ZGlmZiAtLWdpdCBhL0FuZHJvaWQvR3JhZGxlL01ha2VmaWxlLmluIGIvQW5kcm9pZC9HcmFkbGUvTWFrZWZpbGUuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWEyZDY1NwotLS0gL2Rldi9udWxsCisrKyBiL0FuZHJvaWQvR3JhZGxlL01ha2VmaWxlLmluCkBAIC0wLDAgKzEsMTcgQEAKK2FsbDogZGVidWcKKworY29yZTogY29yZS1kZWJ1ZworYXBwOiBhcHAtZGVidWcKK2FwaTogYXBpLWRlYnVnCithcGl0ZXN0OiBhcGl0ZXN0LWRlYnVnCisKK2RlYnVnOiBhcHAtZGVidWcKK3JlbGVhc2U6IGFwcC1yZWxlYXNlCitidW5kbGU6IGJ1bmRsZS1yZWxlYXNlCisKK2xpbnQ6IGxpbnQtZGVidWcKK2luc3RhbGw6IGluc3RhbGwtZGVidWcKKworaW5jbHVkZSAkKFNSQ19ESVIpL2NvbW1vbi5taworaW5jbHVkZSAkKFNSQ19ESVIpL3RhcmdldHMubWsKK2luY2x1ZGUgJChTUkNfRElSKS9wdWJsaXNoLm1rCmRpZmYgLS1naXQgYS9BbmRyb2lkL0dyYWRsZS9hcGkvYnJsdHR5LmdyYWRsZSBiL0FuZHJvaWQvR3JhZGxlL2FwaS9icmx0dHkuZ3JhZGxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg0YTQ4ZTkKLS0tIC9kZXYvbnVsbAorKysgYi9BbmRyb2lkL0dyYWRsZS9hcGkvYnJsdHR5LmdyYWRsZQpAQCAtMCwwICsxLDE2IEBACiticmx0dHkuYWRkVGFza3MoWworICBwcm9qZWN0OiBwcm9qZWN0LAorICBjb21wb25lbnROYW1lOiAiYXBpIiwKKyAgbWFrZVN1YmRpcmVjdG9yeTogYnJsdHR5Lm5hdGl2ZS5qYXZhU3ViZGlyZWN0b3J5LAorICBqYXJzOiBbImJybGFwaSJdLAorCisgIGxpYnJhcmllczogWworICAgICJicmxhcGlfamF2YSIsCisgICAgImJybGFwaSIKKyAgXSwKKworICBsaWJyYXJ5U3ViZGlyZWN0b3JpZXM6IFsKKyAgICBicmx0dHkubmF0aXZlLmphdmFTdWJkaXJlY3RvcnksCisgICAgYnJsdHR5Lm5hdGl2ZS5jb3JlU3ViZGlyZWN0b3J5CisgIF0sCitdKQpkaWZmIC0tZ2l0IGEvQW5kcm9pZC9HcmFkbGUvYXBpL2J1aWxkLmdyYWRsZSBiL0FuZHJvaWQvR3JhZGxlL2FwaS9idWlsZC5ncmFkbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDRmMDRkYgotLS0gL2Rldi9udWxsCisrKyBiL0FuZHJvaWQvR3JhZGxlL2FwaS9idWlsZC5ncmFkbGUKQEAgLTAsMCArMSwzNyBAQAorcGx1Z2lucyB7CisgIGlkICJjb20uYW5kcm9pZC5saWJyYXJ5IgorICBpZCAibWF2ZW4tcHVibGlzaCIKK30KKworZGVzY3JpcHRpb24gPSAiIiIKKyIke3Byb2plY3QubmFtZX0iIHByb3ZpZGVzIHRoZSBKYXZhIGNsaWVudCBiaW5kaW5ncyBmb3IgIiR7cm9vdFByb2plY3QubmFtZX0iIGNvZGUuCisiIiIKKworYXBwbHkgZnJvbTogImJybHR0eS5ncmFkbGUiCisKK2RlcGVuZGVuY2llcyB7CisgIGFwaSBmaWxlcygic3JjL21haW4vbGlicy9icmxhcGkuamFyIikKK30KKworYW5kcm9pZCB7CisgIGNvbXBpbGVTZGtWZXJzaW9uICJhbmRyb2lkLTMxIgorICBidWlsZFRvb2xzVmVyc2lvbiAiMjkuMC4zIgorCisgIGRlZmF1bHRDb25maWcgeworICAgIHRhcmdldFNka1ZlcnNpb24gMzAKKyAgICBtaW5TZGtWZXJzaW9uIDI0CisgIH0KK30KKworYWZ0ZXJFdmFsdWF0ZSB7CisgIHB1Ymxpc2hpbmcgeworICAgIHB1YmxpY2F0aW9ucyB7CisgICAgICByZWxlYXNlKE1hdmVuUHVibGljYXRpb24pIHsKKyAgICAgICAgZnJvbSBjb21wb25lbnRzLnJlbGVhc2UKKyAgICAgICAgZ3JvdXBJZCA9ICJvcmcuYTExeS5icmx0dHkiCisgICAgICAgIGFydGlmYWN0SWQgPSAiYnJsYXBpLWFuZHJvaWQiCisgICAgICAgIHZlcnNpb24gPSBicmx0dHkuY29uZmlnLmFwaVJlbGVhc2UKKyAgICAgIH0KKyAgICB9CisgIH0KK30KZGlmZiAtLWdpdCBhL0FuZHJvaWQvR3JhZGxlL2FwaS9zcmMvbWFpbi9BbmRyb2lkTWFuaWZlc3QueG1sIGIvQW5kcm9pZC9HcmFkbGUvYXBpL3NyYy9tYWluL0FuZHJvaWRNYW5pZmVzdC54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGJmMTI3ZgotLS0gL2Rldi9udWxsCisrKyBiL0FuZHJvaWQvR3JhZGxlL2FwaS9zcmMvbWFpbi9BbmRyb2lkTWFuaWZlc3QueG1sCkBAIC0wLDAgKzEsNyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KKworPG1hbmlmZXN0IHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgcGFja2FnZT0ib3JnLmExMXkuYnJsYXBpIgorICA+CisKKzwvbWFuaWZlc3Q+CmRpZmYgLS1naXQgYS9BbmRyb2lkL0dyYWRsZS9hcGl0ZXN0L2J1aWxkLmdyYWRsZSBiL0FuZHJvaWQvR3JhZGxlL2FwaXRlc3QvYnVpbGQuZ3JhZGxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRkMzg4ZmUKLS0tIC9kZXYvbnVsbAorKysgYi9BbmRyb2lkL0dyYWRsZS9hcGl0ZXN0L2J1aWxkLmdyYWRsZQpAQCAtMCwwICsxLDE5IEBACitwbHVnaW5zIHsKKyAgaWQgImNvbS5hbmRyb2lkLmFwcGxpY2F0aW9uIgorfQorCitkZXNjcmlwdGlvbiA9ICIiIgorQSB0ZXN0IHByb2dyYW0gdG8gdmVyaWZ5IHRoYXQgdGhlIE1hdmVuIGRlcGVuZGVuY3kgb24gQnJsQVBJIGlzIHdvcmtpbmcuCisiIiIKKworYXBwbHkgZnJvbTogcm9vdFByb2plY3QuZmlsZSgiYnJsYXBpLWFuZHJvaWQuZ3JhZGxlIikKKworYW5kcm9pZCB7CisgIGNvbXBpbGVTZGtWZXJzaW9uICJhbmRyb2lkLTI5IgorICBidWlsZFRvb2xzVmVyc2lvbiAiMjkuMC4zIgorCisgIGRlZmF1bHRDb25maWcgeworICAgIHRhcmdldFNka1ZlcnNpb24gMjkKKyAgICBtaW5TZGtWZXJzaW9uIDI2CisgIH0KK30KZGlmZiAtLWdpdCBhL0FuZHJvaWQvR3JhZGxlL2FwaXRlc3Qvc3JjL21haW4vQW5kcm9pZE1hbmlmZXN0LnhtbCBiL0FuZHJvaWQvR3JhZGxlL2FwaXRlc3Qvc3JjL21haW4vQW5kcm9pZE1hbmlmZXN0LnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMGM5ZTMxCi0tLSAvZGV2L251bGwKKysrIGIvQW5kcm9pZC9HcmFkbGUvYXBpdGVzdC9zcmMvbWFpbi9BbmRyb2lkTWFuaWZlc3QueG1sCkBAIC0wLDAgKzEsNyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KKworPG1hbmlmZXN0IHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgcGFja2FnZT0ib3JnLmExMXkuYnJsYXBpLmFuZHJvaWQiCisgID4KKworPC9tYW5pZmVzdD4KZGlmZiAtLWdpdCBhL0FuZHJvaWQvR3JhZGxlL2FwaXRlc3Qvc3JjL21haW4vamF2YS9vcmcvYTExeS9icmxhcGkvYW5kcm9pZC9UZXN0UHJvZ3JhbS5qYXZhIGIvQW5kcm9pZC9HcmFkbGUvYXBpdGVzdC9zcmMvbWFpbi9qYXZhL29yZy9hMTF5L2JybGFwaS9hbmRyb2lkL1Rlc3RQcm9ncmFtLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDQ2MGU1NQotLS0gL2Rldi9udWxsCisrKyBiL0FuZHJvaWQvR3JhZGxlL2FwaXRlc3Qvc3JjL21haW4vamF2YS9vcmcvYTExeS9icmxhcGkvYW5kcm9pZC9UZXN0UHJvZ3JhbS5qYXZhCkBAIC0wLDAgKzEsNyBAQAorcGFja2FnZSBvcmcuYTExeS5icmxhcGkuYW5kcm9pZDsKKworCitwdWJsaWMgY2xhc3MgVGVzdFByb2dyYW0geworICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbiAoU3RyaW5nW10gYXJndW1lbnRzKSB7CisgIH0KK30KZGlmZiAtLWdpdCBhL0FuZHJvaWQvR3JhZGxlL2FwcC9icmx0dHktYXNzZXRzLmdyYWRsZSBiL0FuZHJvaWQvR3JhZGxlL2FwcC9icmx0dHktYXNzZXRzLmdyYWRsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lODcyZmI2Ci0tLSAvZGV2L251bGwKKysrIGIvQW5kcm9pZC9HcmFkbGUvYXBwL2JybHR0eS1hc3NldHMuZ3JhZGxlCkBAIC0wLDAgKzEsODMgQEAKK2RlZiBhc3NldHNEaXJlY3RvcnkgPSBicmx0dHkuZ2V0QXNzZXRzUGF0aChwcm9qZWN0KQorZGVmIG1lc3NhZ2VzRGlyZWN0b3J5ID0gYXNzZXRzRGlyZWN0b3J5ICsgRmlsZS5zZXBhcmF0b3IgKyAibG9jYWxlIgorZGVmIHRhYmxlc0RpcmVjdG9yeSA9IGFzc2V0c0RpcmVjdG9yeSArIEZpbGUuc2VwYXJhdG9yICsgInRhYmxlcyIKKwordGFzayBicmx0dHlBZGRUYWJsZXMgKHR5cGU6IENvcHkpIHsKKyAgZ3JvdXAgImJ1aWxkIgorICBkZXNjcmlwdGlvbiAiQWRkIHRoZSB0YWJsZXMgKHRleHQsIGNvbnRyYWN0aW9uLCBhdHRyaWJ1dGVzLCBrZXlib2FyZCwgaW5wdXQpIHRvIHRoZSBidWlsZCAoYXMgYXNzZXRzKS4iCisKKyAgZnJvbSBicmx0dHkubmF0aXZlLnRhYmxlc0RpcmVjdG9yeQorICBpbnRvIHRhYmxlc0RpcmVjdG9yeQorICBpbmNsdWRlICdUZXh0LyoqLyoudHQ/JworICBpbmNsdWRlICdDb250cmFjdGlvbi8qKi8qLmN0PycKKyAgaW5jbHVkZSAnQXR0cmlidXRlcy8qKi8qLmF0PycKKyAgaW5jbHVkZSAnS2V5Ym9hcmQvKiovKi5rdD8nCisgIGluY2x1ZGUgJ0lucHV0LyoqLyoua3Q/JworfQorCit0YXNrIGJybHR0eVJlbW92ZVRhYmxlcyAodHlwZTogRGVsZXRlKSB7CisgIGdyb3VwICJidWlsZCIKKyAgZGVzY3JpcHRpb24gIlJlbW92ZSB0aGUgdGFibGVzICh0ZXh0LCBjb250cmFjdGlvbiwgYXR0cmlidXRlcywga2V5Ym9hcmQsIGlucHV0KSBmcm9tIHRoZSBidWlsZC4iCisKKyAgZGVsZXRlIHRhYmxlc0RpcmVjdG9yeQorfQorCit0YXNrcy5yZWdpc3RlcigiYnJsdHR5QWRkTWVzc2FnZXMiKSB7CisgIGdyb3VwICJidWlsZCIKKyAgZGVzY3JpcHRpb24gIkFkZCB0aGUgbWVzc2FnZSBjYXRhbG9ncyAoLm1vIGZpbGVzKSB0byB0aGUgYnVpbGQgKGFzIGFzc2V0cykuIgorCisgIGRvTGFzdCB7CisgICAgZGVmIGNvbW1hbmRQcm9jZXNzZXMgPSBbXQorCisgICAgdHJ5IHsKKyAgICAgIGRlZiBzb3VyY2VEaXJlY3RvcnkgPSBuZXcgRmlsZShicmx0dHkubmF0aXZlLm1lc3NhZ2VzRGlyZWN0b3J5KQorICAgICAgZGVmIHNvdXJjZUZpbGVzID0gbGF5b3V0LmZpbGVzIHtzb3VyY2VEaXJlY3RvcnkubGlzdEZpbGVzKCl9CisKKyAgICAgIHNvdXJjZUZpbGVzLmVhY2ggeyBzb3VyY2VGaWxlIC0+CisgICAgICAgIGRlZiBzb3VyY2VOYW1lID0gc291cmNlRmlsZS5uYW1lCisKKyAgICAgICAgaWYgKHNvdXJjZU5hbWUuZW5kc1dpdGgoIi5wbyIpKSB7CisgICAgICAgICAgZGVmIGxhbmd1YWdlQ29kZSA9IHNvdXJjZU5hbWUucmVwbGFjZUFsbCgvXC4uKz8kLywgJycpCisgICAgICAgICAgZGVmIHRhcmdldERpcmVjdG9yeSA9IG5ldyBGaWxlKG1lc3NhZ2VzRGlyZWN0b3J5ICsgRmlsZS5zZXBhcmF0b3IgKyBsYW5ndWFnZUNvZGUgKyBGaWxlLnNlcGFyYXRvciArICJMQ19NRVNTQUdFUyIpCisKKyAgICAgICAgICBpZiAodGFyZ2V0RGlyZWN0b3J5LmlzRGlyZWN0b3J5KCkgfHwgdGFyZ2V0RGlyZWN0b3J5Lm1rZGlycygpKSB7CisgICAgICAgICAgICBkZWYgdGFyZ2V0RmlsZSA9IG5ldyBGaWxlKHRhcmdldERpcmVjdG9yeSwgImJybHR0eS5tbyIpCisKKyAgICAgICAgICAgIGRlZiBjb21tYW5kQXJndW1lbnRzID0gWworICAgICAgICAgICAgICAibXNnZm10IiwgIi0tbm8taGFzaCIsCisgICAgICAgICAgICAgICItLW91dHB1dC1maWxlPSIgKyB0YXJnZXRGaWxlLmFic29sdXRlUGF0aCwKKyAgICAgICAgICAgICAgIi0tIiwgc291cmNlRmlsZS5hYnNvbHV0ZVBhdGgKKyAgICAgICAgICAgIF0KKworICAgICAgICAgICAgZGVmIGNvbW1hbmRQcm9jZXNzID0gY29tbWFuZEFyZ3VtZW50cy5leGVjdXRlKCkKKyAgICAgICAgICAgIGNvbW1hbmRQcm9jZXNzLndhaXRGb3JQcm9jZXNzT3V0cHV0KG5ldyBTdHJpbmdCdWZmZXIoKSwgU3lzdGVtLmVycikKKyAgICAgICAgICAgIGNvbW1hbmRQcm9jZXNzZXMgKz0gY29tbWFuZFByb2Nlc3MKKyAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgdGhyb3cgbmV3IElPRXhjZXB0aW9uKCJtZXNzYWdlcyBkaXJlY3Rvcnkgbm90IGNyZWF0ZWQ6ICIgKyB0YXJnZXREaXJlY3RvcnkuYWJzb2x1dGVQYXRoKQorICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgfQorICAgIH0gZmluYWxseSB7CisgICAgICBkZWYgb2sgPSB0cnVlCisKKyAgICAgIGNvbW1hbmRQcm9jZXNzZXMuZWFjaCB7IHByb2Nlc3MgLT4KKyAgICAgICAgaW50IGV4aXRWYWx1ZSA9IHByb2Nlc3Mud2FpdEZvcigpCisgICAgICAgIGlmIChleGl0VmFsdWUpIG9rID0gZmFsc2UKKyAgICAgIH0KKworICAgICAgaWYgKCFvaykgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oImluc3RhbGxpbmcgbWVzc2FnZXMgZmFpbGVkIikKKyAgICB9CisgIH0KK30KKwordGFzayBicmx0dHlSZW1vdmVNZXNzYWdlcyAodHlwZTogRGVsZXRlKSB7CisgIGdyb3VwICJidWlsZCIKKyAgZGVzY3JpcHRpb24gIlJlbW92ZSB0aGUgbWVzc2FnZSBjYXRhbG9ncyAoLm1vIGZpbGVzKSBmcm9tIHRoZSBidWlsZC4iCisKKyAgZGVsZXRlIG1lc3NhZ2VzRGlyZWN0b3J5Cit9CisKK2JybHR0eS5hZGRBc3NlbWJsZVRhc2sgcHJvamVjdCwgYnJsdHR5QWRkTWVzc2FnZXMKK2JybHR0eS5hZGRBc3NlbWJsZVRhc2sgcHJvamVjdCwgYnJsdHR5QWRkVGFibGVzCitjbGVhbi5kZXBlbmRzT24gYnJsdHR5UmVtb3ZlTWVzc2FnZXMKK2NsZWFuLmRlcGVuZHNPbiBicmx0dHlSZW1vdmVUYWJsZXMKZGlmZiAtLWdpdCBhL0FuZHJvaWQvR3JhZGxlL2FwcC9icmx0dHktY29uZmlnLmdyYWRsZSBiL0FuZHJvaWQvR3JhZGxlL2FwcC9icmx0dHktY29uZmlnLmdyYWRsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZTE1YjgxCi0tLSAvZGV2L251bGwKKysrIGIvQW5kcm9pZC9HcmFkbGUvYXBwL2JybHR0eS1jb25maWcuZ3JhZGxlCkBAIC0wLDAgKzEsMjYgQEAKK2JybHR0eS5jb25maWcucmV2aXNpb25JZGVudGlmaWVyID0gWworICBicmx0dHkubmF0aXZlLnJvb3REaXJlY3RvcnkgKyBGaWxlLnNlcGFyYXRvciArICJnZXRyZXZpZCIsCisgICItbSIsICIrIiwKKyAgYnJsdHR5Lm5hdGl2ZS5yb290RGlyZWN0b3J5CitdLmV4ZWN1dGUoKS50ZXh0LnRyaW0oKQorCiticmx0dHkuY29uZmlnLnZlcnNpb25Db2RlID0gWworICBicmx0dHkubmF0aXZlLnJvb3REaXJlY3RvcnkgKyBGaWxlLnNlcGFyYXRvciArICJnZXRyZXZpZCIsCisgICItciIsIGJybHR0eS5jb25maWcucmV2aXNpb25JZGVudGlmaWVyLCAiLWkiLAorICBicmx0dHkubmF0aXZlLnJvb3REaXJlY3RvcnkKK10uZXhlY3V0ZSgpLnRleHQudHJpbSgpCisKK2JybHR0eS5jb25maWcudmVyc2lvbk5hbWUgPSBicmx0dHkuY29uZmlnLnJldmlzaW9uSWRlbnRpZmllci5yZXBsYWNlQWxsKC9eLio/LShcZCkvLCAvJDEvKS5yZXBsYWNlQWxsKC8tZy4qJC8sICIiKQorYnJsdHR5LmNvbmZpZy5zb3VyY2VSZXZpc2lvbiA9IGJybHR0eS5jb25maWcucmV2aXNpb25JZGVudGlmaWVyLnJlcGxhY2VBbGwoL14uKi1nKC4qKSQvLCAvZ2l0OiQxLykKKworYnJsdHR5LmNvbmZpZy5idWlsZFRpbWUgPSBJbnN0YW50Lm5vdygpLnRvU3RyaW5nKCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKCdUJywgJ0AnKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2VBbGwoLzpcZHsyfVwuLiovLCAiIFVUQyIpCisKK2FuZHJvaWQgeworICBkZWZhdWx0Q29uZmlnIHsKKyAgICBicmx0dHkuY29uZmlnLnByb3BlcnR5TmFtZXMoKS5lYWNoIHsgbmFtZSAtPgorICAgICAgcmVzVmFsdWUgInN0cmluZyIsICJhcHBDb25maWdfJHtuYW1lfSIsIGJybHR0eS5jb25maWdbbmFtZV0KKyAgICB9CisgIH0KK30KZGlmZiAtLWdpdCBhL0FuZHJvaWQvR3JhZGxlL2FwcC9idWlsZC5ncmFkbGUgYi9BbmRyb2lkL0dyYWRsZS9hcHAvYnVpbGQuZ3JhZGxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjczNmNmOTcKLS0tIC9kZXYvbnVsbAorKysgYi9BbmRyb2lkL0dyYWRsZS9hcHAvYnVpbGQuZ3JhZGxlCkBAIC0wLDAgKzEsOTEgQEAKK3BsdWdpbnMgeworICBpZCAiY29tLmFuZHJvaWQuYXBwbGljYXRpb24iCisgIGlkICJjb20uZ2l0aHViLnRyaXBsZXQucGxheSIgdmVyc2lvbiAiMy40LjAiCit9CisKK2Rlc2NyaXB0aW9uID0gIiIiCisiJHtwcm9qZWN0Lm5hbWV9IiBpbXBsZW1lbnRzIHRoZSBhY2Nlc3NpYmlsaXR5IHNlcnZpY2UgZm9yICIke3Jvb3RQcm9qZWN0Lm5hbWV9IiBvbiBBbmRyb2lkLgorIiIiCisKK2FwcGx5IGZyb206ICJicmx0dHktY29uZmlnLmdyYWRsZSIKK2FwcGx5IGZyb206ICJicmx0dHktYXNzZXRzLmdyYWRsZSIKKworZGVwZW5kZW5jaWVzIHsKKyAgaW1wbGVtZW50YXRpb24gcHJvamVjdCgiOmNvcmUiKQorICBpbXBsZW1lbnRhdGlvbiAiYW5kcm9pZHguY29yZTpjb3JlOjEuNS4wIgorfQorCithbmRyb2lkIHsKKyAgY29tcGlsZVNka1ZlcnNpb24gImFuZHJvaWQtMzEiCisgIGJ1aWxkVG9vbHNWZXJzaW9uICIyOS4wLjMiCisKKy8vbmRrVmVyc2lvbiAiMjEuNC43MDc1NTI5IiAvLyByMjFlIC0gTFRTCisvL25ka1ZlcnNpb24gIjIyLjEuNzE3MTY3MCIgLy8gcjIyYiAtIHN0YWJsZQorCisgIGNvbXBpbGVPcHRpb25zIHsKKyAgICBzb3VyY2VDb21wYXRpYmlsaXR5IEphdmFWZXJzaW9uLlZFUlNJT05fMV83CisgICAgdGFyZ2V0Q29tcGF0aWJpbGl0eSBKYXZhVmVyc2lvbi5WRVJTSU9OXzFfNworICB9CisKKyAgbGludE9wdGlvbnMgeworICAgIHdhcm5pbmcgIk1pc3NpbmdUcmFuc2xhdGlvbiIKKyAgICBlcnJvciAiVW50cmFuc2xhdGFibGUiCisgIH0KKworICBkZWZhdWx0Q29uZmlnIHsKKyAgICB0YXJnZXRTZGtWZXJzaW9uIDMwCisgICAgbWluU2RrVmVyc2lvbiAxNgorCisgICAgdmVyc2lvbk5hbWUgYnJsdHR5LmNvbmZpZy52ZXJzaW9uTmFtZQorICAgIHZlcnNpb25Db2RlIGJybHR0eS5jb25maWcudmVyc2lvbkNvZGUgYXMgaW50CisKKyAgICBuZGsgeworICAgICAgc3BsaXRzIHsKKyAgICAgICAgYWJpIHsKKyAgICAgICAgICBlbmFibGUgdHJ1ZQorICAgICAgICAgIHVuaXZlcnNhbEFwayB0cnVlCisgICAgICAgICAgcmVzZXQoKQorCisgICAgICAgICAgYnJsdHR5Lm5hdGl2ZS5hYmlMaXN0LmVhY2ggeyBhYmkgLT4KKyAgICAgICAgICAgIGluY2x1ZGUgYWJpCisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICB9CisgICAgfQorICB9CisKKyAgc2lnbmluZ0NvbmZpZ3MgeworICAgIHJlbGVhc2UgeworICAgICAgZGVmIHNpZ25pbmdQcm9wZXJ0aWVzID0gYnJsdHR5LmxvYWRQcm9wZXJ0aWVzKCJjcmVkZW50aWFscy9zaWduLWdyYWRsZS5wcm9wZXJ0aWVzIikKKyAgICAgIHN0b3JlRmlsZSAgICAgc2lnbmluZ1Byb3BlcnRpZXMuc3RvcmVGaWxlCisgICAgICBzdG9yZVBhc3N3b3JkIHNpZ25pbmdQcm9wZXJ0aWVzLnN0b3JlUGFzc3dvcmQKKyAgICAgIGtleUFsaWFzICAgICAgc2lnbmluZ1Byb3BlcnRpZXMua2V5QWxpYXMKKyAgICAgIGtleVBhc3N3b3JkICAgc2lnbmluZ1Byb3BlcnRpZXMua2V5UGFzc3dvcmQKKyAgICB9CisgIH0KKworICBidWlsZFR5cGVzIHsKKyAgICBkZWJ1ZyB7CisgICAgICBuZGsgeworICAgICAgICBhYmlGaWx0ZXJzICJhcm1lYWJpLXY3YSIKKyAgICAgIH0KKyAgICB9CisKKyAgICByZWxlYXNlIHsKKyAgICAgIHNpZ25pbmdDb25maWcgc2lnbmluZ0NvbmZpZ3MucmVsZWFzZQorCisgICAgICBtaW5pZnlFbmFibGVkIGZhbHNlCisgICAgICBwcm9ndWFyZEZpbGUgZ2V0RGVmYXVsdFByb2d1YXJkRmlsZSgicHJvZ3VhcmQtYW5kcm9pZC50eHQiKQorCisgICAgICBuZGsgeworICAgICAgICBkZWJ1Z1N5bWJvbExldmVsICJGVUxMIiAvLyBGVUxMLCBTWU1CT0xfVEFCTEUKKyAgICAgIH0KKyAgICB9CisgIH0KKworICBwbGF5IHsKKyAgICB0cmFjayA9ICJwcm9kdWN0aW9uIiAvLyBpbnRlcm5hbCwgYWxwaGEsIGJldGEsIHByb2R1Y3Rpb24KKyAgICBkZWZhdWx0VG9BcHBCdW5kbGVzID0gdHJ1ZQorICAgIHNlcnZpY2VBY2NvdW50Q3JlZGVudGlhbHMgPSByb290UHJvamVjdC5maWxlKCJjcmVkZW50aWFscy9wdWJsaXNoLXBsYXkuanNvbiIpCisgIH0KK30KZGlmZiAtLWdpdCBhL0FuZHJvaWQvR3JhZGxlL2FwcC9zcmMvbWFpbi9BbmRyb2lkTWFuaWZlc3QueG1sIGIvQW5kcm9pZC9HcmFkbGUvYXBwL3NyYy9tYWluL0FuZHJvaWRNYW5pZmVzdC54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGViNmM1MwotLS0gL2Rldi9udWxsCisrKyBiL0FuZHJvaWQvR3JhZGxlL2FwcC9zcmMvbWFpbi9BbmRyb2lkTWFuaWZlc3QueG1sCkBAIC0wLDAgKzEsMTYxIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgorCis8bWFuaWZlc3QKKyAgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICB4bWxuczp0b29scz0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vdG9vbHMiCisgIHBhY2thZ2U9Im9yZy5hMTF5LmJybHR0eS5hbmRyb2lkIgorICBhbmRyb2lkOnZlcnNpb25Db2RlPSIwIgorICBhbmRyb2lkOnZlcnNpb25OYW1lPSJAc3RyaW5nL2FwcF92ZXJzaW9uIgorICA+CisKKyAgPCEtLSBmb3IgY3JlYXRpbmcgYSBmb3JlZ3JvdW5kIG5vdGlmaWNhdGlvbiAtLT4KKyAgPHVzZXMtcGVybWlzc2lvbiBhbmRyb2lkOm5hbWU9ImFuZHJvaWQucGVybWlzc2lvbi5GT1JFR1JPVU5EX1NFUlZJQ0UiIC8+CisKKyAgPCEtLSBmb3IgcmVzZXR0aW5nIHRoZSBkZXZpY2UncyBsb2NrIHRpbWVyIC0tPgorICA8dXNlcy1wZXJtaXNzaW9uIGFuZHJvaWQ6bmFtZT0iYW5kcm9pZC5wZXJtaXNzaW9uLldBS0VfTE9DSyIgLz4KKworICA8IS0tIGZvciBjb21tdW5pY2F0aW5nIHdpdGggYSBicmFpbGxlIGRldmljZSB2aWEgQmx1ZXRvb3RoIC0tPgorICA8dXNlcy1wZXJtaXNzaW9uIGFuZHJvaWQ6bmFtZT0iYW5kcm9pZC5wZXJtaXNzaW9uLkJMVUVUT09USCIgLz4KKyAgPHVzZXMtZmVhdHVyZSBhbmRyb2lkOm5hbWU9ImFuZHJvaWQuaGFyZHdhcmUuYmx1ZXRvb3RoIiAvPgorCisgIDwhLS0gZm9yIGNvbW11bmljYXRpbmcgd2l0aCBhIGJyYWlsbGUgZGV2aWNlIHZpYSBVU0IgLS0+CisgIDx1c2VzLWZlYXR1cmUgYW5kcm9pZDpuYW1lPSJhbmRyb2lkLmhhcmR3YXJlLnVzYi5ob3N0IiAvPgorCisgIDwhLS0gZm9yIGxpc3RlbmluZyBvbiBhIFRDUC9JUCBwb3J0IGZvciBCcmxBUEkgY2xpZW50IGNvbm5lY3Rpb24gcmVxdWVzdHMgLS0+CisgIDx1c2VzLXBlcm1pc3Npb24gYW5kcm9pZDpuYW1lPSJhbmRyb2lkLnBlcm1pc3Npb24uSU5URVJORVQiIC8+CisKKyAgPCEtLSBmb3IgcmVhZGluZyBjdXN0b21pemVkIGRhdGEgZmlsZXMgLS0+CisgIDx1c2VzLXBlcm1pc3Npb24gYW5kcm9pZDpuYW1lPSJhbmRyb2lkLnBlcm1pc3Npb24uUkVBRF9FWFRFUk5BTF9TVE9SQUdFIiAvPgorCisgIDwhLS0gZm9yIHByZXNlbnRpbmcgdGhlIEFjY2Vzc2liaWxpdHkgQWN0aW9ucyBjaG9vc2VyIC0tPgorICA8dXNlcy1wZXJtaXNzaW9uIGFuZHJvaWQ6bmFtZT0iYW5kcm9pZC5wZXJtaXNzaW9uLlNZU1RFTV9BTEVSVF9XSU5ET1ciIC8+CisKKyAgPCEtLSBmb3Iga25vd2luZyB3aGVuIGxvY2tlZCBzdG9yYWdlIGNhbiBiZSBhY2Nlc3NlZCBhZnRlciBhIHJlYm9vdCAtLT4KKyAgPHVzZXMtcGVybWlzc2lvbiBhbmRyb2lkOm5hbWU9ImFuZHJvaWQucGVybWlzc2lvbi5SRUNFSVZFX0JPT1RfQ09NUExFVEVEIiAvPgorCisgIDwhLS0gZm9yIHVwZ3JhZGluZyB0byBhIG5ld2VyIHJlbGVhc2UgLS0+CisgIDx1c2VzLXBlcm1pc3Npb24gYW5kcm9pZDpuYW1lPSJhbmRyb2lkLnBlcm1pc3Npb24uUkVRVUVTVF9JTlNUQUxMX1BBQ0tBR0VTIiAvPgorCisgIDwhLS0gZm9yIGdldHRpbmcgV2ktRmkgc3RhdHVzIHZhbHVlcyAoZm9yIHRoZSBJTkRJQ0FUT1JTIGNvbW1hbmQpIC0tPgorICA8dXNlcy1wZXJtaXNzaW9uIGFuZHJvaWQ6bmFtZT0iYW5kcm9pZC5wZXJtaXNzaW9uLkFDQ0VTU19XSUZJX1NUQVRFIiAvPgorICA8dXNlcy1mZWF0dXJlIGFuZHJvaWQ6bmFtZT0iYW5kcm9pZC5oYXJkd2FyZS53aWZpIiAvPgorCisgIDwhLS0gZm9yIGdldHRpbmcgdGhlIFdpLUZpIFNTSUQgKGZvciB0aGUgSU5ESUNBVE9SUyBjb21tYW5kKSAtLT4KKyAgPCEtLSBmb3IgZ2V0dGluZyBjZWxsIGluZm9ybWF0aW9uIChmb3IgdGhlIElORElDQVRPUlMgY29tbWFuZCkgLS0+CisgIDx1c2VzLXBlcm1pc3Npb24gYW5kcm9pZDpuYW1lPSJhbmRyb2lkLnBlcm1pc3Npb24uQUNDRVNTX0ZJTkVfTE9DQVRJT04iIC8+CisgIDx1c2VzLWZlYXR1cmUgYW5kcm9pZDpuYW1lPSJhbmRyb2lkLmhhcmR3YXJlLmxvY2F0aW9uIiAvPgorCisgIDwhLS0gZm9yIGdldHRpbmcgdGhlIGNlbGwgc2lnbmFsIHN0cmVuZ3RoIChmb3IgdGhlIElORElDQVRPUlMgY29tbWFuZCkgLS0+CisgIDx1c2VzLXBlcm1pc3Npb24gYW5kcm9pZDpuYW1lPSJhbmRyb2lkLnBlcm1pc3Npb24uQUNDRVNTX0NPQVJTRV9VUERBVEVTIiAvPgorCisgIDwhLS0gZm9yIGdldHRpbmcgdGhlIGNlbGwgZGF0YSBuZXR3b3JrIHR5cGUgKGZvciB0aGUgSU5ESUNBVE9SUyBjb21tYW5kKSAtLT4KKyAgPHVzZXMtcGVybWlzc2lvbiBhbmRyb2lkOm5hbWU9ImFuZHJvaWQucGVybWlzc2lvbi5SRUFEX1BIT05FX1NUQVRFIiAvPgorCisgIDxhcHBsaWNhdGlvbgorICAgIGFuZHJvaWQ6bGFiZWw9IkBzdHJpbmcvYXBwX25hbWUiCisgICAgYW5kcm9pZDppY29uPSJAZHJhd2FibGUvYnJhaWxsZV9zZXJ2aWNlIgorICAgIGFuZHJvaWQ6bmFtZT0iLkJyYWlsbGVBcHBsaWNhdGlvbiIKKyAgICBhbmRyb2lkOnBlcnNpc3RlbnQ9InRydWUiCisgICAgYW5kcm9pZDpzdXBwb3J0c1J0bD0iZmFsc2UiCisgICAgYW5kcm9pZDphbGxvd0JhY2t1cD0idHJ1ZSIKKyAgICBhbmRyb2lkOmZ1bGxCYWNrdXBDb250ZW50PSJAeG1sL2JhY2t1cF9ydWxlcyIKKyAgICA+CisKKyAgICA8c2VydmljZQorICAgICAgYW5kcm9pZDpuYW1lPSIuQnJhaWxsZVNlcnZpY2UiCisgICAgICBhbmRyb2lkOmxhYmVsPSJAc3RyaW5nL2FwcF9uYW1lIgorICAgICAgYW5kcm9pZDpwZXJtaXNzaW9uPSJhbmRyb2lkLnBlcm1pc3Npb24uQklORF9BQ0NFU1NJQklMSVRZX1NFUlZJQ0UiCisgICAgICB0b29sczppZ25vcmU9IlVudXNlZEF0dHJpYnV0ZSIKKyAgICAgIGFuZHJvaWQ6ZGlyZWN0Qm9vdEF3YXJlPSJ0cnVlIgorICAgICAgPgorCisgICAgICA8aW50ZW50LWZpbHRlcj4KKyAgICAgICAgPGFjdGlvbiBhbmRyb2lkOm5hbWU9ImFuZHJvaWQuYWNjZXNzaWJpbGl0eXNlcnZpY2UuQWNjZXNzaWJpbGl0eVNlcnZpY2UiIC8+CisgICAgICA8L2ludGVudC1maWx0ZXI+CisKKyAgICAgIDxtZXRhLWRhdGEKKyAgICAgICAgYW5kcm9pZDpuYW1lPSJhbmRyb2lkLmFjY2Vzc2liaWxpdHlzZXJ2aWNlIgorICAgICAgICBhbmRyb2lkOnJlc291cmNlPSJAeG1sL2FjY2Vzc2liaWxpdHlfc2VydmljZSIKKyAgICAgICAvPgorICAgIDwvc2VydmljZT4KKworICAgIDxzZXJ2aWNlCisgICAgICBhbmRyb2lkOm5hbWU9Ii5JbnB1dFNlcnZpY2UiCisgICAgICBhbmRyb2lkOmxhYmVsPSJAc3RyaW5nL2lucHV0U2VydmljZV9uYW1lIgorICAgICAgYW5kcm9pZDpwZXJtaXNzaW9uPSJhbmRyb2lkLnBlcm1pc3Npb24uQklORF9JTlBVVF9NRVRIT0QiCisgICAgICB0b29sczppZ25vcmU9IlVudXNlZEF0dHJpYnV0ZSIKKyAgICAgIGFuZHJvaWQ6ZGlyZWN0Qm9vdEF3YXJlPSJ0cnVlIgorICAgICAgPgorCisgICAgICA8aW50ZW50LWZpbHRlcj4KKyAgICAgICAgPGFjdGlvbiBhbmRyb2lkOm5hbWU9ImFuZHJvaWQudmlldy5JbnB1dE1ldGhvZCIgLz4KKyAgICAgIDwvaW50ZW50LWZpbHRlcj4KKworICAgICAgPG1ldGEtZGF0YQorICAgICAgICBhbmRyb2lkOm5hbWU9ImFuZHJvaWQudmlldy5pbSIKKyAgICAgICAgYW5kcm9pZDpyZXNvdXJjZT0iQHhtbC9pbnB1dF9zZXJ2aWNlIgorICAgICAgIC8+CisgICAgPC9zZXJ2aWNlPgorCisgICAgPGFjdGl2aXR5CisgICAgICBhbmRyb2lkOm5hbWU9Ii5hY3Rpdml0aWVzLkFjdGlvbnNBY3Rpdml0eSIKKyAgICAgIGFuZHJvaWQ6bGFiZWw9IkBzdHJpbmcvYXBwX25hbWUiCisgICAgICA+CisgICAgPC9hY3Rpdml0eT4KKworICAgIDxhY3Rpdml0eQorICAgICAgYW5kcm9pZDpuYW1lPSIuc2V0dGluZ3MuU2V0dGluZ3NBY3Rpdml0eSIKKyAgICAgIGFuZHJvaWQ6bGFiZWw9IkBzdHJpbmcvU0VUVElOR1NfU0NSRUVOX01BSU4iCisgICAgICA+CisgICAgPC9hY3Rpdml0eT4KKworICAgIDxhY3Rpdml0eQorICAgICAgYW5kcm9pZDpuYW1lPSIuYWN0aXZpdGllcy5BYm91dEFjdGl2aXR5IgorICAgICAgYW5kcm9pZDpsYWJlbD0iQHN0cmluZy9hYm91dF9sYWJlbF9hY3Rpdml0eSIKKyAgICAgID4KKyAgICA8L2FjdGl2aXR5PgorCisgICAgPGFjdGl2aXR5CisgICAgICBhbmRyb2lkOm5hbWU9Ii5zZXR0aW5ncy5Vc2JEZXZpY2VBdHRhY2hlZE1vbml0b3IiCisgICAgICBhbmRyb2lkOmxhYmVsPSJAc3RyaW5nL3VzYk1vbml0b3JfbGFiZWwiCisgICAgICBhbmRyb2lkOmV4cG9ydGVkPSJmYWxzZSIKKyAgICAgIGFuZHJvaWQ6bm9IaXN0b3J5PSJ0cnVlIgorICAgICAgYW5kcm9pZDpleGNsdWRlRnJvbVJlY2VudHM9InRydWUiCisgICAgICBhbmRyb2lkOmRpcmVjdEJvb3RBd2FyZT0idHJ1ZSIKKyAgICAgID4KKworICAgICAgPGludGVudC1maWx0ZXI+CisgICAgICAgIDxhY3Rpb24gYW5kcm9pZDpuYW1lPSJhbmRyb2lkLmhhcmR3YXJlLnVzYi5hY3Rpb24uVVNCX0RFVklDRV9BVFRBQ0hFRCIgLz4KKyAgICAgIDwvaW50ZW50LWZpbHRlcj4KKworICAgICAgPG1ldGEtZGF0YQorICAgICAgICBhbmRyb2lkOm5hbWU9ImFuZHJvaWQuaGFyZHdhcmUudXNiLmFjdGlvbi5VU0JfREVWSUNFX0FUVEFDSEVEIgorICAgICAgICBhbmRyb2lkOnJlc291cmNlPSJAeG1sL3VzYl9kZXZpY2VzIgorICAgICAgIC8+CisgICAgPC9hY3Rpdml0eT4KKworICAgIDxyZWNlaXZlcgorICAgICAgYW5kcm9pZDpuYW1lPSIuSG9zdE1vbml0b3IiCisgICAgICBhbmRyb2lkOmV4cG9ydGVkPSJmYWxzZSIKKyAgICAgID4KKworICAgICAgPGludGVudC1maWx0ZXI+CisgICAgICAgIDxhY3Rpb24gYW5kcm9pZDpuYW1lPSJhbmRyb2lkLmludGVudC5hY3Rpb24uTVlfUEFDS0FHRV9SRVBMQUNFRCIgLz4KKyAgICAgICAgPGFjdGlvbiBhbmRyb2lkOm5hbWU9ImFuZHJvaWQuaW50ZW50LmFjdGlvbi5MT0NLRURfQk9PVF9DT01QTEVURUQiIC8+CisgICAgICA8L2ludGVudC1maWx0ZXI+CisgICAgPC9yZWNlaXZlcj4KKworICAgIDxwcm92aWRlcgorICAgICAgYW5kcm9pZDpuYW1lPSJhbmRyb2lkeC5jb3JlLmNvbnRlbnQuRmlsZVByb3ZpZGVyIgorICAgICAgYW5kcm9pZDphdXRob3JpdGllcz0ib3JnLmExMXkuYnJsdHR5LmFuZHJvaWQuZmlsZXByb3ZpZGVyIgorICAgICAgYW5kcm9pZDpleHBvcnRlZD0iZmFsc2UiCisgICAgICBhbmRyb2lkOmdyYW50VXJpUGVybWlzc2lvbnM9InRydWUiCisgICAgICA+CisKKyAgICAgIDxtZXRhLWRhdGEKKyAgICAgICAgYW5kcm9pZDpuYW1lPSJhbmRyb2lkLnN1cHBvcnQuRklMRV9QUk9WSURFUl9QQVRIUyIKKyAgICAgICAgYW5kcm9pZDpyZXNvdXJjZT0iQHhtbC9maWxlX3Byb3ZpZGVyX3BhdGhzIgorICAgICAgIC8+CisgICAgPC9wcm92aWRlcj4KKyAgPC9hcHBsaWNhdGlvbj4KKzwvbWFuaWZlc3Q+CmRpZmYgLS1naXQgYS9BbmRyb2lkL0dyYWRsZS9hcHAvc3JjL21haW4vYXNzZXRzL1VCcmFpbGxlLnR0ZiBiL0FuZHJvaWQvR3JhZGxlL2FwcC9zcmMvbWFpbi9hc3NldHMvVUJyYWlsbGUudHRmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE4YTlmMTIKLS0tIC9kZXYvbnVsbAorKysgYi9BbmRyb2lkL0dyYWRsZS9hcHAvc3JjL21haW4vYXNzZXRzL1VCcmFpbGxlLnR0ZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9BbmRyb2lkL0dyYWRsZS9hcHAvc3JjL21haW4vamF2YS9vcmcvYTExeS9icmx0dHkvYW5kcm9pZC9BUElUZXN0cy5qYXZhIGIvQW5kcm9pZC9HcmFkbGUvYXBwL3NyYy9tYWluL2phdmEvb3JnL2ExMXkvYnJsdHR5L2FuZHJvaWQvQVBJVGVzdHMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOWI5NzIxCi0tLSAvZGV2L251bGwKKysrIGIvQW5kcm9pZC9HcmFkbGUvYXBwL3NyYy9tYWluL2phdmEvb3JnL2ExMXkvYnJsdHR5L2FuZHJvaWQvQVBJVGVzdHMuamF2YQpAQCAtMCwwICsxLDc4IEBACisvKgorICogQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyAqICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyAqCisgKiBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorICoKKyAqIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyAqCisgKiBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisgKi8KKworcGFja2FnZSBvcmcuYTExeS5icmx0dHkuYW5kcm9pZDsKKworaW1wb3J0IGFuZHJvaWQub3MuQnVpbGQ7CisKK3B1YmxpYyBhYnN0cmFjdCBjbGFzcyBBUElUZXN0cyB7CisgIHByaXZhdGUgQVBJVGVzdHMgKCkgeworICB9CisKKyAgcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBoYXZlQVBJTGV2ZWwgKGludCBsZXZlbCkgeworICAgIHJldHVybiBCdWlsZC5WRVJTSU9OLlNES19JTlQgPj0gbGV2ZWw7CisgIH0KKworICBwdWJsaWMgZmluYWwgc3RhdGljIGJvb2xlYW4gaGF2ZUljZUNyZWFtU2FuZHdpY2gKKyAgPSBoYXZlQVBJTGV2ZWwoQnVpbGQuVkVSU0lPTl9DT0RFUy5JQ0VfQ1JFQU1fU0FORFdJQ0gpOworCisgIHB1YmxpYyBmaW5hbCBzdGF0aWMgYm9vbGVhbiBoYXZlSmVsbHlCZWFuCisgID0gaGF2ZUFQSUxldmVsKEJ1aWxkLlZFUlNJT05fQ09ERVMuSkVMTFlfQkVBTik7CisKKyAgcHVibGljIGZpbmFsIHN0YXRpYyBib29sZWFuIGhhdmVKZWxseUJlYW5NUjEKKyAgPSBoYXZlQVBJTGV2ZWwoQnVpbGQuVkVSU0lPTl9DT0RFUy5KRUxMWV9CRUFOX01SMSk7CisKKyAgcHVibGljIGZpbmFsIHN0YXRpYyBib29sZWFuIGhhdmVKZWxseUJlYW5NUjIKKyAgPSBoYXZlQVBJTGV2ZWwoQnVpbGQuVkVSU0lPTl9DT0RFUy5KRUxMWV9CRUFOX01SMik7CisKKyAgcHVibGljIGZpbmFsIHN0YXRpYyBib29sZWFuIGhhdmVLaXRrYXQKKyAgPSBoYXZlQVBJTGV2ZWwoQnVpbGQuVkVSU0lPTl9DT0RFUy5LSVRLQVQpOworCisgIHB1YmxpYyBmaW5hbCBzdGF0aWMgYm9vbGVhbiBoYXZlTG9sbGlwb3AKKyAgPSBoYXZlQVBJTGV2ZWwoQnVpbGQuVkVSU0lPTl9DT0RFUy5MT0xMSVBPUCk7CisKKyAgcHVibGljIGZpbmFsIHN0YXRpYyBib29sZWFuIGhhdmVMb2xsaXBvcE1SMQorICA9IGhhdmVBUElMZXZlbChCdWlsZC5WRVJTSU9OX0NPREVTLkxPTExJUE9QX01SMSk7CisKKyAgcHVibGljIGZpbmFsIHN0YXRpYyBib29sZWFuIGhhdmVNYXJzaG1hbGxvdworICA9IGhhdmVBUElMZXZlbChCdWlsZC5WRVJTSU9OX0NPREVTLk0pOworCisgIHB1YmxpYyBmaW5hbCBzdGF0aWMgYm9vbGVhbiBoYXZlTm91Z2F0CisgID0gaGF2ZUFQSUxldmVsKEJ1aWxkLlZFUlNJT05fQ09ERVMuTik7CisKKyAgcHVibGljIGZpbmFsIHN0YXRpYyBib29sZWFuIGhhdmVOb3VnYXRNUjEKKyAgPSBoYXZlQVBJTGV2ZWwoQnVpbGQuVkVSU0lPTl9DT0RFUy5OX01SMSk7CisKKyAgcHVibGljIGZpbmFsIHN0YXRpYyBib29sZWFuIGhhdmVPcmVvCisgID0gaGF2ZUFQSUxldmVsKEJ1aWxkLlZFUlNJT05fQ09ERVMuTyk7CisKKyAgcHVibGljIGZpbmFsIHN0YXRpYyBib29sZWFuIGhhdmVPcmVvTVIxCisgID0gaGF2ZUFQSUxldmVsKEJ1aWxkLlZFUlNJT05fQ09ERVMuT19NUjEpOworCisgIHB1YmxpYyBmaW5hbCBzdGF0aWMgYm9vbGVhbiBoYXZlUGllCisgID0gaGF2ZUFQSUxldmVsKEJ1aWxkLlZFUlNJT05fQ09ERVMuUCk7CisKKyAgcHVibGljIGZpbmFsIHN0YXRpYyBib29sZWFuIGhhdmVRCisgID0gaGF2ZUFQSUxldmVsKEJ1aWxkLlZFUlNJT05fQ09ERVMuUSk7CisKKyAgcHVibGljIGZpbmFsIHN0YXRpYyBib29sZWFuIGhhdmVSCisgID0gaGF2ZUFQSUxldmVsKEJ1aWxkLlZFUlNJT05fQ09ERVMuUik7CisKKyAgcHVibGljIGZpbmFsIHN0YXRpYyBib29sZWFuIGhhdmVTCisgID0gaGF2ZUFQSUxldmVsKEJ1aWxkLlZFUlNJT05fQ09ERVMuUyk7Cit9CmRpZmYgLS1naXQgYS9BbmRyb2lkL0dyYWRsZS9hcHAvc3JjL21haW4vamF2YS9vcmcvYTExeS9icmx0dHkvYW5kcm9pZC9BY2Nlc3NpYmlsaXR5QnV0dG9uQ2FsbGJhY2tzLmphdmEgYi9BbmRyb2lkL0dyYWRsZS9hcHAvc3JjL21haW4vamF2YS9vcmcvYTExeS9icmx0dHkvYW5kcm9pZC9BY2Nlc3NpYmlsaXR5QnV0dG9uQ2FsbGJhY2tzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmM2MjM4ZAotLS0gL2Rldi9udWxsCisrKyBiL0FuZHJvaWQvR3JhZGxlL2FwcC9zcmMvbWFpbi9qYXZhL29yZy9hMTF5L2JybHR0eS9hbmRyb2lkL0FjY2Vzc2liaWxpdHlCdXR0b25DYWxsYmFja3MuamF2YQpAQCAtMCwwICsxLDM1IEBACisvKgorICogQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyAqICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyAqCisgKiBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorICoKKyAqIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyAqCisgKiBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisgKi8KKworcGFja2FnZSBvcmcuYTExeS5icmx0dHkuYW5kcm9pZDsKKworaW1wb3J0IGFuZHJvaWQuYWNjZXNzaWJpbGl0eXNlcnZpY2UuQWNjZXNzaWJpbGl0eUJ1dHRvbkNvbnRyb2xsZXI7CitpbXBvcnQgYW5kcm9pZC5hbm5vdGF0aW9uLlN1cHByZXNzTGludDsKK2ltcG9ydCBvcmcuYTExeS5icmx0dHkuYW5kcm9pZC5hY3Rpdml0aWVzLkFjdGlvbnNBY3Rpdml0eTsKKworQFN1cHByZXNzTGludCgiTmV3QXBpIikKK3B1YmxpYyBjbGFzcyBBY2Nlc3NpYmlsaXR5QnV0dG9uQ2FsbGJhY2tzIGV4dGVuZHMgQWNjZXNzaWJpbGl0eUJ1dHRvbkNvbnRyb2xsZXIuQWNjZXNzaWJpbGl0eUJ1dHRvbkNhbGxiYWNrIHsKKyAgQE92ZXJyaWRlCisgIHB1YmxpYyB2b2lkIG9uQ2xpY2tlZCAoQWNjZXNzaWJpbGl0eUJ1dHRvbkNvbnRyb2xsZXIgY29udHJvbGxlcikgeworICAgIEFjdGlvbnNBY3Rpdml0eS5sYXVuY2goKTsKKyAgfQorCisgIEBPdmVycmlkZQorICBwdWJsaWMgdm9pZCBvbkF2YWlsYWJpbGl0eUNoYW5nZWQgKEFjY2Vzc2liaWxpdHlCdXR0b25Db250cm9sbGVyIGNvbnRyb2xsZXIsIGJvb2xlYW4gaXNBdmFpbGFibGUpIHsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvQW5kcm9pZC9HcmFkbGUvYXBwL3NyYy9tYWluL2phdmEvb3JnL2ExMXkvYnJsdHR5L2FuZHJvaWQvQXBwbGljYXRpb25QYXJhbWV0ZXJzLmphdmEgYi9BbmRyb2lkL0dyYWRsZS9hcHAvc3JjL21haW4vamF2YS9vcmcvYTExeS9icmx0dHkvYW5kcm9pZC9BcHBsaWNhdGlvblBhcmFtZXRlcnMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZDY3MDc2Ci0tLSAvZGV2L251bGwKKysrIGIvQW5kcm9pZC9HcmFkbGUvYXBwL3NyYy9tYWluL2phdmEvb3JnL2ExMXkvYnJsdHR5L2FuZHJvaWQvQXBwbGljYXRpb25QYXJhbWV0ZXJzLmphdmEKQEAgLTAsMCArMSwzOCBAQAorLyoKKyAqIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisgKiAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisgKgorICogQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKK3BhY2thZ2Ugb3JnLmExMXkuYnJsdHR5LmFuZHJvaWQ7CisKK3B1YmxpYyBhYnN0cmFjdCBjbGFzcyBBcHBsaWNhdGlvblBhcmFtZXRlcnMgeworICBwcml2YXRlIEFwcGxpY2F0aW9uUGFyYW1ldGVycyAoKSB7CisgIH0KKworICBwdWJsaWMgZmluYWwgc3RhdGljIGJvb2xlYW4gRU5BQkxFX1NFVF9URVhUID0gZmFsc2U7CisgIHB1YmxpYyBmaW5hbCBzdGF0aWMgYm9vbGVhbiBFTkFCTEVfTU9USU9OX0xPR0dJTkcgPSB0cnVlOworCisgIHB1YmxpYyBmaW5hbCBzdGF0aWMgaW50IEJSQUlMTEVfQ09MVU1OX1NQQUNJTkcgPSAyOworICBwdWJsaWMgZmluYWwgc3RhdGljIGludCBCUkFJTExFX1JPV19TUEFDSU5HID0gMDsKKworICBwdWJsaWMgZmluYWwgc3RhdGljIGludCBDT1JFX1dBSVRfRFVSQVRJT04gPSBJbnRlZ2VyLk1BWF9WQUxVRTsKKworICBwdWJsaWMgZmluYWwgc3RhdGljIGxvbmcgRk9DVVNfV0FJVF9USU1FT1VUID0gMTAwMDsKKyAgcHVibGljIGZpbmFsIHN0YXRpYyBsb25nIEZPQ1VTX1dBSVRfSU5URVJWQUwgPSAxMDA7CisKKyAgcHVibGljIGZpbmFsIHN0YXRpYyBsb25nIExPTkdfUFJFU1NfREVMQVkgPSAxMDA7CisgIHB1YmxpYyBmaW5hbCBzdGF0aWMgbG9uZyBGT0NVU19TRVRURVJfREVMQVkgPSA1MDA7Cit9CmRpZmYgLS1naXQgYS9BbmRyb2lkL0dyYWRsZS9hcHAvc3JjL21haW4vamF2YS9vcmcvYTExeS9icmx0dHkvYW5kcm9pZC9BcHBsaWNhdGlvblNldHRpbmdzLmphdmEgYi9BbmRyb2lkL0dyYWRsZS9hcHAvc3JjL21haW4vamF2YS9vcmcvYTExeS9icmx0dHkvYW5kcm9pZC9BcHBsaWNhdGlvblNldHRpbmdzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjQ5OGNjOQotLS0gL2Rldi9udWxsCisrKyBiL0FuZHJvaWQvR3JhZGxlL2FwcC9zcmMvbWFpbi9qYXZhL29yZy9hMTF5L2JybHR0eS9hbmRyb2lkL0FwcGxpY2F0aW9uU2V0dGluZ3MuamF2YQpAQCAtMCwwICsxLDM3IEBACisvKgorICogQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyAqICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyAqCisgKiBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorICoKKyAqIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyAqCisgKiBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisgKi8KKworcGFja2FnZSBvcmcuYTExeS5icmx0dHkuYW5kcm9pZDsKKworCitwdWJsaWMgYWJzdHJhY3QgY2xhc3MgQXBwbGljYXRpb25TZXR0aW5ncyB7CisgIHByaXZhdGUgQXBwbGljYXRpb25TZXR0aW5ncyAoKSB7CisgIH0KKworICBwdWJsaWMgc3RhdGljIHZvbGF0aWxlIGJvb2xlYW4gUkVMRUFTRV9CUkFJTExFX0RFVklDRSA9IGZhbHNlOworICBwdWJsaWMgc3RhdGljIHZvbGF0aWxlIGJvb2xlYW4gQlJBSUxMRV9ERVZJQ0VfT05MSU5FID0gZmFsc2U7CisKKyAgcHVibGljIHN0YXRpYyB2b2xhdGlsZSBib29sZWFuIFNIT1dfTk9USUZJQ0FUSU9OUyA9IGZhbHNlOworICBwdWJsaWMgc3RhdGljIHZvbGF0aWxlIGJvb2xlYW4gU0hPV19BTEVSVFMgPSBmYWxzZTsKKyAgcHVibGljIHN0YXRpYyB2b2xhdGlsZSBib29sZWFuIFNIT1dfQU5OT1VOQ0VNRU5UUyA9IGZhbHNlOworCisgIHB1YmxpYyBzdGF0aWMgdm9sYXRpbGUgYm9vbGVhbiBMT0dfQUNDRVNTSUJJTElUWV9FVkVOVFMgPSBmYWxzZTsKKyAgcHVibGljIHN0YXRpYyB2b2xhdGlsZSBib29sZWFuIExPR19SRU5ERVJFRF9TQ1JFRU4gPSBmYWxzZTsKKyAgcHVibGljIHN0YXRpYyB2b2xhdGlsZSBib29sZWFuIExPR19LRVlCT0FSRF9FVkVOVFMgPSBmYWxzZTsKKyAgcHVibGljIHN0YXRpYyB2b2xhdGlsZSBib29sZWFuIExPR19VTkhBTkRMRURfRVZFTlRTID0gZmFsc2U7Cit9CmRpZmYgLS1naXQgYS9BbmRyb2lkL0dyYWRsZS9hcHAvc3JjL21haW4vamF2YS9vcmcvYTExeS9icmx0dHkvYW5kcm9pZC9BcHBsaWNhdGlvblV0aWxpdGllcy5qYXZhIGIvQW5kcm9pZC9HcmFkbGUvYXBwL3NyYy9tYWluL2phdmEvb3JnL2ExMXkvYnJsdHR5L2FuZHJvaWQvQXBwbGljYXRpb25VdGlsaXRpZXMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YTkwNjEzCi0tLSAvZGV2L251bGwKKysrIGIvQW5kcm9pZC9HcmFkbGUvYXBwL3NyYy9tYWluL2phdmEvb3JnL2ExMXkvYnJsdHR5L2FuZHJvaWQvQXBwbGljYXRpb25VdGlsaXRpZXMuamF2YQpAQCAtMCwwICsxLDEwNCBAQAorLyoKKyAqIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisgKiAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisgKgorICogQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKK3BhY2thZ2Ugb3JnLmExMXkuYnJsdHR5LmFuZHJvaWQ7CisKK2ltcG9ydCBhbmRyb2lkLmFwcC5BY3Rpdml0eTsKK2ltcG9ydCBhbmRyb2lkLmFwcC5LZXlndWFyZE1hbmFnZXI7CitpbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbnRlbnRSZXNvbHZlcjsKK2ltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29udGV4dDsKK2ltcG9ydCBhbmRyb2lkLmNvbnRlbnQuSW50ZW50OworaW1wb3J0IGFuZHJvaWQuaGFyZHdhcmUudXNiLlVzYk1hbmFnZXI7CitpbXBvcnQgYW5kcm9pZC5vcy5Qb3dlck1hbmFnZXI7CitpbXBvcnQgYW5kcm9pZC5vcy5TeXN0ZW1DbG9jazsKK2ltcG9ydCBhbmRyb2lkLnByb3ZpZGVyLlNldHRpbmdzOworaW1wb3J0IGFuZHJvaWQudmlldy5XaW5kb3dNYW5hZ2VyOworaW1wb3J0IGFuZHJvaWQudmlldy5pbnB1dG1ldGhvZC5JbnB1dE1ldGhvZE1hbmFnZXI7CisKK3B1YmxpYyBhYnN0cmFjdCBjbGFzcyBBcHBsaWNhdGlvblV0aWxpdGllcyB7CisgIHByaXZhdGUgZmluYWwgc3RhdGljIFN0cmluZyBMT0dfVEFHID0gQXBwbGljYXRpb25VdGlsaXRpZXMuY2xhc3MuZ2V0TmFtZSgpOworCisgIHByaXZhdGUgQXBwbGljYXRpb25VdGlsaXRpZXMgKCkgeworICB9CisKKyAgcHVibGljIHN0YXRpYyBsb25nIGdldEFic29sdXRlVGltZSAoKSB7CisgICAgcmV0dXJuIFN5c3RlbUNsb2NrLnVwdGltZU1pbGxpcygpOworICB9CisKKyAgcHVibGljIHN0YXRpYyBsb25nIGdldFJlbGF0aXZlVGltZSAobG9uZyBmcm9tKSB7CisgICAgcmV0dXJuIGdldEFic29sdXRlVGltZSgpIC0gZnJvbTsKKyAgfQorCisgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldFJlc291cmNlU3RyaW5nIChpbnQgaWRlbnRpZmllcikgeworICAgIHJldHVybiBCcmFpbGxlQXBwbGljYXRpb24uZ2V0KCkuZ2V0U3RyaW5nKGlkZW50aWZpZXIpOworICB9CisKKyAgcHVibGljIHN0YXRpYyBDb250ZW50UmVzb2x2ZXIgZ2V0Q29udGVudFJlc29sdmVyICgpIHsKKyAgICByZXR1cm4gQnJhaWxsZUFwcGxpY2F0aW9uLmdldCgpLmdldENvbnRlbnRSZXNvbHZlcigpOworICB9CisKKyAgcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0U2VjdXJlU2V0dGluZyAoU3RyaW5nIHNldHRpbmcpIHsKKyAgICByZXR1cm4gU2V0dGluZ3MuU2VjdXJlLmdldFN0cmluZyhnZXRDb250ZW50UmVzb2x2ZXIoKSwgc2V0dGluZyk7CisgIH0KKworICBwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRTZWxlY3RlZElucHV0TWV0aG9kSWRlbnRpZmllciAoKSB7CisgICAgcmV0dXJuIGdldFNlY3VyZVNldHRpbmcoU2V0dGluZ3MuU2VjdXJlLkRFRkFVTFRfSU5QVVRfTUVUSE9EKTsKKyAgfQorCisgIHByaXZhdGUgZmluYWwgc3RhdGljIFNpbmdsZXRvblJlZmVyZW5jZTxQb3dlck1hbmFnZXI+IHBvd2VyTWFuYWdlclJlZmVyZW5jZQorICAgID0gbmV3IFN5c3RlbVNlcnZpY2VSZWZlcmVuY2U8UG93ZXJNYW5hZ2VyPihDb250ZXh0LlBPV0VSX1NFUlZJQ0UpOworICBwdWJsaWMgc3RhdGljIFBvd2VyTWFuYWdlciBnZXRQb3dlck1hbmFnZXIgKCkgeworICAgIHJldHVybiBwb3dlck1hbmFnZXJSZWZlcmVuY2UuZ2V0KCk7CisgIH0KKworICBwcml2YXRlIGZpbmFsIHN0YXRpYyBTaW5nbGV0b25SZWZlcmVuY2U8S2V5Z3VhcmRNYW5hZ2VyPiBrZXlndWFyZE1hbmFnZXJSZWZlcmVuY2UKKyAgICA9IG5ldyBTeXN0ZW1TZXJ2aWNlUmVmZXJlbmNlPEtleWd1YXJkTWFuYWdlcj4oQ29udGV4dC5LRVlHVUFSRF9TRVJWSUNFKTsKKyAgcHVibGljIHN0YXRpYyBLZXlndWFyZE1hbmFnZXIgZ2V0S2V5Z3VhcmRNYW5hZ2VyICgpIHsKKyAgICByZXR1cm4ga2V5Z3VhcmRNYW5hZ2VyUmVmZXJlbmNlLmdldCgpOworICB9CisKKyAgcHJpdmF0ZSBmaW5hbCBzdGF0aWMgU2luZ2xldG9uUmVmZXJlbmNlPElucHV0TWV0aG9kTWFuYWdlcj4gaW5wdXRNZXRob2RNYW5hZ2VyUmVmZXJlbmNlCisgICAgPSBuZXcgU3lzdGVtU2VydmljZVJlZmVyZW5jZTxJbnB1dE1ldGhvZE1hbmFnZXI+KENvbnRleHQuSU5QVVRfTUVUSE9EX1NFUlZJQ0UpOworICBwdWJsaWMgc3RhdGljIElucHV0TWV0aG9kTWFuYWdlciBnZXRJbnB1dE1ldGhvZE1hbmFnZXIgKCkgeworICAgIHJldHVybiBpbnB1dE1ldGhvZE1hbmFnZXJSZWZlcmVuY2UuZ2V0KCk7CisgIH0KKworICBwcml2YXRlIGZpbmFsIHN0YXRpYyBTaW5nbGV0b25SZWZlcmVuY2U8V2luZG93TWFuYWdlcj4gd2luZG93TWFuYWdlclJlZmVyZW5jZQorICAgID0gbmV3IFN5c3RlbVNlcnZpY2VSZWZlcmVuY2U8V2luZG93TWFuYWdlcj4oQ29udGV4dC5XSU5ET1dfU0VSVklDRSk7CisgIHB1YmxpYyBzdGF0aWMgV2luZG93TWFuYWdlciBnZXRXaW5kb3dNYW5hZ2VyICgpIHsKKyAgICByZXR1cm4gd2luZG93TWFuYWdlclJlZmVyZW5jZS5nZXQoKTsKKyAgfQorCisgIHByaXZhdGUgZmluYWwgc3RhdGljIFNpbmdsZXRvblJlZmVyZW5jZTxVc2JNYW5hZ2VyPiB1c2JNYW5hZ2VyUmVmZXJlbmNlCisgICAgPSBuZXcgU3lzdGVtU2VydmljZVJlZmVyZW5jZTxVc2JNYW5hZ2VyPihDb250ZXh0LlVTQl9TRVJWSUNFKTsKKyAgcHVibGljIHN0YXRpYyBVc2JNYW5hZ2VyIGdldFVzYk1hbmFnZXIgKCkgeworICAgIHJldHVybiB1c2JNYW5hZ2VyUmVmZXJlbmNlLmdldCgpOworICB9CisKKyAgcHVibGljIHN0YXRpYyB2b2lkIGxhdW5jaCAoQ2xhc3M8PyBleHRlbmRzIEFjdGl2aXR5PiBhY3Rpdml0eUNsYXNzKSB7CisgICAgSW50ZW50IGludGVudCA9IG5ldyBJbnRlbnQoQnJhaWxsZUFwcGxpY2F0aW9uLmdldCgpLCBhY3Rpdml0eUNsYXNzKTsKKworICAgIGludGVudC5hZGRGbGFncygKKyAgICAgIEludGVudC5GTEFHX0FDVElWSVRZX05FV19UQVNLIHwKKyAgICAgIEludGVudC5GTEFHX0FDVElWSVRZX0NMRUFSX1RPUCB8CisgICAgICBJbnRlbnQuRkxBR19GUk9NX0JBQ0tHUk9VTkQKKyAgICApOworCisgICAgQnJhaWxsZUFwcGxpY2F0aW9uLmdldCgpLnN0YXJ0QWN0aXZpdHkoaW50ZW50KTsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvQW5kcm9pZC9HcmFkbGUvYXBwL3NyYy9tYWluL2phdmEvb3JnL2ExMXkvYnJsdHR5L2FuZHJvaWQvQmx1ZXRvb3RoQ29ubmVjdGlvbi5qYXZhIGIvQW5kcm9pZC9HcmFkbGUvYXBwL3NyYy9tYWluL2phdmEvb3JnL2ExMXkvYnJsdHR5L2FuZHJvaWQvQmx1ZXRvb3RoQ29ubmVjdGlvbi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI5MWNlMjQKLS0tIC9kZXYvbnVsbAorKysgYi9BbmRyb2lkL0dyYWRsZS9hcHAvc3JjL21haW4vamF2YS9vcmcvYTExeS9icmx0dHkvYW5kcm9pZC9CbHVldG9vdGhDb25uZWN0aW9uLmphdmEKQEAgLTAsMCArMSwzNDYgQEAKKy8qCisgKiBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorICogICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorICoKKyAqIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorICoKKyAqIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyAqLworCitwYWNrYWdlIG9yZy5hMTF5LmJybHR0eS5hbmRyb2lkOworCitpbXBvcnQgYW5kcm9pZC5ibHVldG9vdGguQmx1ZXRvb3RoQWRhcHRlcjsKK2ltcG9ydCBhbmRyb2lkLmJsdWV0b290aC5CbHVldG9vdGhEZXZpY2U7CitpbXBvcnQgYW5kcm9pZC5ibHVldG9vdGguQmx1ZXRvb3RoU29ja2V0OworaW1wb3J0IGFuZHJvaWQub3MuUGFyY2VsVXVpZDsKK2ltcG9ydCBhbmRyb2lkLnV0aWwuTG9nOworaW1wb3J0IGphdmEuaW8uRmlsZTsKK2ltcG9ydCBqYXZhLmlvLkZpbGVPdXRwdXRTdHJlYW07CitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOworaW1wb3J0IGphdmEuaW8uT3V0cHV0U3RyZWFtOworaW1wb3J0IGphdmEubGFuZy5yZWZsZWN0Lio7CitpbXBvcnQgamF2YS51dGlsLlNldDsKK2ltcG9ydCBqYXZhLnV0aWwuVVVJRDsKKworcHVibGljIGNsYXNzIEJsdWV0b290aENvbm5lY3Rpb24geworICBwcml2YXRlIGZpbmFsIHN0YXRpYyBTdHJpbmcgTE9HX1RBRyA9IEJsdWV0b290aENvbm5lY3Rpb24uY2xhc3MuZ2V0TmFtZSgpOworCisgIHByb3RlY3RlZCBmaW5hbCBzdGF0aWMgVVVJRCBTRVJJQUxfUFJPRklMRV9VVUlEID0gVVVJRC5mcm9tU3RyaW5nKAorICAgICIwMDAwMTEwMS0wMDAwLTEwMDAtODAwMC0wMDgwNUY5QjM0RkIiCisgICk7CisKKyAgcHJvdGVjdGVkIGZpbmFsIHN0YXRpYyBCbHVldG9vdGhBZGFwdGVyIGJsdWV0b290aEFkYXB0ZXIgPSBCbHVldG9vdGhBZGFwdGVyLmdldERlZmF1bHRBZGFwdGVyKCk7CisgIHByb3RlY3RlZCBmaW5hbCBsb25nIHJlbW90ZUFkZHJlc3NWYWx1ZTsKKyAgcHJvdGVjdGVkIGZpbmFsIGJ5dGVbXSByZW1vdGVBZGRyZXNzQnl0ZXMgPSBuZXcgYnl0ZVs2XTsKKyAgcHJvdGVjdGVkIGZpbmFsIFN0cmluZyByZW1vdGVBZGRyZXNzU3RyaW5nOworCisgIHByb3RlY3RlZCBCbHVldG9vdGhTb2NrZXQgYmx1ZXRvb3RoU29ja2V0ID0gbnVsbDsKKyAgcHJvdGVjdGVkIElucHV0U3RyZWFtIGlucHV0U3RyZWFtID0gbnVsbDsKKyAgcHJvdGVjdGVkIE91dHB1dFN0cmVhbSBvdXRwdXRTdHJlYW0gPSBudWxsOworICBwcm90ZWN0ZWQgT3V0cHV0U3RyZWFtIHBpcGVTdHJlYW0gPSBudWxsOworICBwcm90ZWN0ZWQgSW5wdXRUaHJlYWQgaW5wdXRUaHJlYWQgPSBudWxsOworCisgIHByaXZhdGUgY2xhc3MgSW5wdXRUaHJlYWQgZXh0ZW5kcyBUaHJlYWQgeworICAgIHZvbGF0aWxlIGJvb2xlYW4gc3RvcCA9IGZhbHNlOworCisgICAgSW5wdXRUaHJlYWQgKCkgeworICAgICAgc3VwZXIoKCJibHVldG9vdGgtaW5wdXQtIiArIHJlbW90ZUFkZHJlc3NTdHJpbmcpKTsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgdm9pZCBydW4gKCkgeworICAgICAgdHJ5IHsKKyAgICAgICAgYnl0ZVtdIGJ1ZmZlciA9IG5ldyBieXRlWzBYODBdOworCisgICAgICAgIHdoaWxlICghc3RvcCkgeworICAgICAgICAgIGludCBieXRlQ291bnQ7CisKKyAgICAgICAgICB0cnkgeworICAgICAgICAgICAgYnl0ZUNvdW50ID0gaW5wdXRTdHJlYW0ucmVhZChidWZmZXIpOworICAgICAgICAgIH0gY2F0Y2ggKElPRXhjZXB0aW9uIGV4Y2VwdGlvbikgeworICAgICAgICAgICAgTG9nLmQoCisgICAgICAgICAgICAgICAgTE9HX1RBRywKKyAgICAgICAgICAgICAgICAoIkJsdWV0b290aCBpbnB1dCBleGNlcHRpb246ICIKKyAgICAgICAgICAgICAgICAgICAgKyByZW1vdGVBZGRyZXNzU3RyaW5nCisgICAgICAgICAgICAgICAgICAgICsgIjogIgorICAgICAgICAgICAgICAgICAgICArIGV4Y2VwdGlvbi5nZXRNZXNzYWdlKCkpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIH0KKworICAgICAgICAgIGlmIChieXRlQ291bnQgPiAwKSB7CisgICAgICAgICAgICBwaXBlU3RyZWFtLndyaXRlKGJ1ZmZlciwgMCwgYnl0ZUNvdW50KTsKKyAgICAgICAgICAgIHBpcGVTdHJlYW0uZmx1c2goKTsKKyAgICAgICAgICB9IGVsc2UgaWYgKGJ5dGVDb3VudCA8IDApIHsKKyAgICAgICAgICAgIExvZy5kKExPR19UQUcsICgiQmx1ZXRvb3RoIGlucHV0IGVuZDogIiArIHJlbW90ZUFkZHJlc3NTdHJpbmcpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgfSBjYXRjaCAoVGhyb3dhYmxlIGNhdXNlKSB7CisgICAgICAgIExvZy5lKExPR19UQUcsICgiQmx1ZXRvb3RoIGlucHV0IGZhaWxlZDogIiArIHJlbW90ZUFkZHJlc3NTdHJpbmcpLCBjYXVzZSk7CisgICAgICB9CisKKyAgICAgIGNsb3NlUGlwZVN0cmVhbSgpOworICAgIH0KKyAgfQorCisgIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBpc1VwICgpIHsKKyAgICBpZiAoYmx1ZXRvb3RoQWRhcHRlciA9PSBudWxsKSByZXR1cm4gZmFsc2U7CisgICAgaWYgKCFibHVldG9vdGhBZGFwdGVyLmlzRW5hYmxlZCgpKSByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIHRydWU7CisgIH0KKworICBwdWJsaWMgZmluYWwgQmx1ZXRvb3RoRGV2aWNlIGdldERldmljZSAoKSB7CisgICAgaWYgKCFpc1VwKCkpIHJldHVybiBudWxsOworCisgICAgaWYgKEFQSVRlc3RzLmhhdmVKZWxseUJlYW4pIHsKKyAgICAgIHJldHVybiBibHVldG9vdGhBZGFwdGVyLmdldFJlbW90ZURldmljZShyZW1vdGVBZGRyZXNzQnl0ZXMpOworICAgIH0gZWxzZSB7CisgICAgICByZXR1cm4gYmx1ZXRvb3RoQWRhcHRlci5nZXRSZW1vdGVEZXZpY2UocmVtb3RlQWRkcmVzc1N0cmluZyk7CisgICAgfQorICB9CisKKyAgcHVibGljIGZpbmFsIFN0cmluZyBnZXROYW1lICgpIHsKKyAgICBCbHVldG9vdGhEZXZpY2UgZGV2aWNlID0gZ2V0RGV2aWNlKCk7CisgICAgaWYgKGRldmljZSA9PSBudWxsKSByZXR1cm4gbnVsbDsKKyAgICByZXR1cm4gZGV2aWNlLmdldE5hbWUoKTsKKyAgfQorCisgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldE5hbWUgKGxvbmcgYWRkcmVzcykgeworICAgIHJldHVybiBuZXcgQmx1ZXRvb3RoQ29ubmVjdGlvbihhZGRyZXNzKS5nZXROYW1lKCk7CisgIH0KKworICBwdWJsaWMgQmx1ZXRvb3RoQ29ubmVjdGlvbiAobG9uZyBhZGRyZXNzKSB7CisgICAgcmVtb3RlQWRkcmVzc1ZhbHVlID0gYWRkcmVzczsKKworICAgIHsKKyAgICAgIGxvbmcgdmFsdWUgPSByZW1vdGVBZGRyZXNzVmFsdWU7CisgICAgICBpbnQgaSA9IHJlbW90ZUFkZHJlc3NCeXRlcy5sZW5ndGg7CisKKyAgICAgIHdoaWxlIChpID4gMCkgeworICAgICAgICByZW1vdGVBZGRyZXNzQnl0ZXNbLS1pXSA9IChieXRlKSh2YWx1ZSAmIDBYRkYpOworICAgICAgICB2YWx1ZSA+Pj0gODsKKyAgICAgIH0KKyAgICB9CisKKyAgICB7CisgICAgICBTdHJpbmdCdWlsZGVyIHNiID0gbmV3IFN0cmluZ0J1aWxkZXIoKTsKKworICAgICAgZm9yIChieXRlIG9jdGV0IDogcmVtb3RlQWRkcmVzc0J5dGVzKSB7CisgICAgICAgIGlmIChzYi5sZW5ndGgoKSA+IDApIHNiLmFwcGVuZCgnOicpOworICAgICAgICBzYi5hcHBlbmQoU3RyaW5nLmZvcm1hdCgiJTAyWCIsIG9jdGV0KSk7CisgICAgICB9CisKKyAgICAgIHJlbW90ZUFkZHJlc3NTdHJpbmcgPSBzYi50b1N0cmluZygpOworICAgIH0KKyAgfQorCisgIHByaXZhdGUgdm9pZCBjbG9zZUJsdWV0b290aFNvY2tldCAoKSB7CisgICAgaWYgKGJsdWV0b290aFNvY2tldCAhPSBudWxsKSB7CisgICAgICB0cnkgeworICAgICAgICBibHVldG9vdGhTb2NrZXQuY2xvc2UoKTsKKyAgICAgIH0gY2F0Y2ggKElPRXhjZXB0aW9uIGV4Y2VwdGlvbikgeworICAgICAgICBMb2cudyhMT0dfVEFHLCAoIkJsdWV0b290aCBzb2NrZXQgY2xvc2UgZmFpbHVyZTogIiArIHJlbW90ZUFkZHJlc3NTdHJpbmcpLCBleGNlcHRpb24pOworICAgICAgfQorCisgICAgICBibHVldG9vdGhTb2NrZXQgPSBudWxsOworICAgIH0KKyAgfQorCisgIHByaXZhdGUgdm9pZCBjbG9zZUlucHV0U3RyZWFtICgpIHsKKyAgICBpZiAoaW5wdXRTdHJlYW0gIT0gbnVsbCkgeworICAgICAgdHJ5IHsKKyAgICAgICAgaW5wdXRTdHJlYW0uY2xvc2UoKTsKKyAgICAgIH0gY2F0Y2ggKElPRXhjZXB0aW9uIGV4Y2VwdGlvbikgeworICAgICAgICBMb2cudyhMT0dfVEFHLCAoIkJsdWV0b290aCBpbnB1dCBzdHJlYW0gY2xvc2UgZmFpbHVyZTogIiArIHJlbW90ZUFkZHJlc3NTdHJpbmcpLCBleGNlcHRpb24pOworICAgICAgfQorCisgICAgICBpbnB1dFN0cmVhbSA9IG51bGw7CisgICAgfQorICB9CisKKyAgcHJpdmF0ZSB2b2lkIGNsb3NlT3V0cHV0U3RyZWFtICgpIHsKKyAgICBpZiAob3V0cHV0U3RyZWFtICE9IG51bGwpIHsKKyAgICAgIHRyeSB7CisgICAgICAgIG91dHB1dFN0cmVhbS5jbG9zZSgpOworICAgICAgfSBjYXRjaCAoSU9FeGNlcHRpb24gZXhjZXB0aW9uKSB7CisgICAgICAgIExvZy53KAorICAgICAgICAgICAgTE9HX1RBRywgKCJCbHVldG9vdGggb3V0cHV0IHN0cmVhbSBjbG9zZSBmYWlsdXJlOiAiICsgcmVtb3RlQWRkcmVzc1N0cmluZyksIGV4Y2VwdGlvbik7CisgICAgICB9CisKKyAgICAgIG91dHB1dFN0cmVhbSA9IG51bGw7CisgICAgfQorICB9CisKKyAgcHJpdmF0ZSB2b2lkIGNsb3NlUGlwZVN0cmVhbSAoKSB7CisgICAgaWYgKHBpcGVTdHJlYW0gIT0gbnVsbCkgeworICAgICAgdHJ5IHsKKyAgICAgICAgcGlwZVN0cmVhbS5jbG9zZSgpOworICAgICAgfSBjYXRjaCAoSU9FeGNlcHRpb24gZXhjZXB0aW9uKSB7CisgICAgICAgIExvZy53KExPR19UQUcsICgiQmx1ZXRvb3RoIHBpcGUgc3RyZWFtIGNsb3NlIGZhaWx1cmU6ICIgKyByZW1vdGVBZGRyZXNzU3RyaW5nKSwgZXhjZXB0aW9uKTsKKyAgICAgIH0KKworICAgICAgcGlwZVN0cmVhbSA9IG51bGw7CisgICAgfQorICB9CisKKyAgcHJpdmF0ZSB2b2lkIHN0b3BJbnB1dFRocmVhZCAoKSB7CisgICAgaWYgKGlucHV0VGhyZWFkICE9IG51bGwpIHsKKyAgICAgIGlucHV0VGhyZWFkLnN0b3AgPSB0cnVlOworICAgICAgaW5wdXRUaHJlYWQgPSBudWxsOworICAgIH0KKyAgfQorCisgIHB1YmxpYyB2b2lkIGNsb3NlICgpIHsKKyAgICBzdG9wSW5wdXRUaHJlYWQoKTsKKyAgICBjbG9zZVBpcGVTdHJlYW0oKTsKKyAgICBjbG9zZUlucHV0U3RyZWFtKCk7CisgICAgY2xvc2VPdXRwdXRTdHJlYW0oKTsKKyAgICBjbG9zZUJsdWV0b290aFNvY2tldCgpOworICB9CisKKyAgcHVibGljIGJvb2xlYW4gY2FuRGlzY292ZXIgKCkgeworICAgIEJsdWV0b290aERldmljZSBkZXZpY2UgPSBnZXREZXZpY2UoKTsKKworICAgIGZvciAoUGFyY2VsVXVpZCB1dWlkIDogZGV2aWNlLmdldFV1aWRzKCkpIHsKKyAgICAgIGlmICh1dWlkLmdldFV1aWQoKS5lcXVhbHMoU0VSSUFMX1BST0ZJTEVfVVVJRCkpIHsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIGZhbHNlOworICB9CisKKyAgcHVibGljIHN0YXRpYyBCbHVldG9vdGhTb2NrZXQgY3JlYXRlUmZjb21tU29ja2V0IChCbHVldG9vdGhEZXZpY2UgZGV2aWNlLCBpbnQgY2hhbm5lbCkgeworICAgIFN0cmluZyBjbGFzc05hbWUgPSBkZXZpY2UuZ2V0Q2xhc3MoKS5nZXROYW1lKCk7CisgICAgU3RyaW5nIG1ldGhvZE5hbWUgPSAiY3JlYXRlUmZjb21tU29ja2V0IjsKKyAgICBTdHJpbmcgcmVmZXJlbmNlID0gY2xhc3NOYW1lICsgIi4iICsgbWV0aG9kTmFtZTsKKworICAgIHRyeSB7CisgICAgICBDbGFzc1tdIGFyZ3VtZW50cyA9IG5ldyBDbGFzc1tdIHtpbnQuY2xhc3N9OworICAgICAgTWV0aG9kIG1ldGhvZCA9IGRldmljZS5nZXRDbGFzcygpLmdldE1ldGhvZChtZXRob2ROYW1lLCBhcmd1bWVudHMpOworICAgICAgcmV0dXJuIChCbHVldG9vdGhTb2NrZXQpbWV0aG9kLmludm9rZShkZXZpY2UsIGNoYW5uZWwpOworICAgIH0gY2F0Y2ggKE5vU3VjaE1ldGhvZEV4Y2VwdGlvbiBleGNlcHRpb24pIHsKKyAgICAgIExvZy53KExPR19UQUcsICJjYW5ub3QgZmluZCBtZXRob2Q6ICIgKyByZWZlcmVuY2UpOworICAgIH0gY2F0Y2ggKElsbGVnYWxBY2Nlc3NFeGNlcHRpb24gZXhjZXB0aW9uKSB7CisgICAgICBMb2cudyhMT0dfVEFHLCAiY2Fubm90IGFjY2VzcyBtZXRob2Q6ICIgKyByZWZlcmVuY2UpOworICAgIH0gY2F0Y2ggKEludm9jYXRpb25UYXJnZXRFeGNlcHRpb24gZXhjZXB0aW9uKSB7CisgICAgICBMb2cudyhMT0dfVEFHLCByZWZlcmVuY2UgKyAiIGZhaWxlZCIsIGV4Y2VwdGlvbi5nZXRDYXVzZSgpKTsKKyAgICB9CisKKyAgICByZXR1cm4gbnVsbDsKKyAgfQorCisgIHB1YmxpYyBib29sZWFuIG9wZW4gKGludCBpbnB1dFBpcGUsIGludCBjaGFubmVsLCBib29sZWFuIHNlY3VyZSkgeworICAgIEJsdWV0b290aERldmljZSBkZXZpY2UgPSBnZXREZXZpY2UoKTsKKyAgICBpZiAoZGV2aWNlID09IG51bGwpIHJldHVybiBmYWxzZTsKKyAgICBpZiAoYmx1ZXRvb3RoQWRhcHRlci5pc0Rpc2NvdmVyaW5nKCkpIHJldHVybiBmYWxzZTsKKworICAgIGlmIChjaGFubmVsID09IDApIHsKKyAgICAgIHRyeSB7CisgICAgICAgIGJsdWV0b290aFNvY2tldCA9IHNlY3VyZT8gZGV2aWNlLmNyZWF0ZVJmY29tbVNvY2tldFRvU2VydmljZVJlY29yZChTRVJJQUxfUFJPRklMRV9VVUlEKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXZpY2UuY3JlYXRlSW5zZWN1cmVSZmNvbW1Tb2NrZXRUb1NlcnZpY2VSZWNvcmQoU0VSSUFMX1BST0ZJTEVfVVVJRCk7CisgICAgICB9IGNhdGNoIChJT0V4Y2VwdGlvbiBleGNlcHRpb24pIHsKKyAgICAgICAgTG9nLmUoCisgICAgICAgICAgICBMT0dfVEFHLAorICAgICAgICAgICAgKCJCbHVldG9vdGggVVVJRCByZXNvbHV0aW9uIGZhaWxlZDogIgorICAgICAgICAgICAgICAgICsgcmVtb3RlQWRkcmVzc1N0cmluZworICAgICAgICAgICAgICAgICsgIjogIgorICAgICAgICAgICAgICAgICsgZXhjZXB0aW9uLmdldE1lc3NhZ2UoKSkpOworICAgICAgICBibHVldG9vdGhTb2NrZXQgPSBudWxsOworICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICBibHVldG9vdGhTb2NrZXQgPSBjcmVhdGVSZmNvbW1Tb2NrZXQoZGV2aWNlLCBjaGFubmVsKTsKKyAgICB9CisKKyAgICBpZiAoYmx1ZXRvb3RoU29ja2V0ICE9IG51bGwpIHsKKyAgICAgIHRyeSB7CisgICAgICAgIGJsdWV0b290aFNvY2tldC5jb25uZWN0KCk7CisKKyAgICAgICAgaW5wdXRTdHJlYW0gPSBibHVldG9vdGhTb2NrZXQuZ2V0SW5wdXRTdHJlYW0oKTsKKyAgICAgICAgb3V0cHV0U3RyZWFtID0gYmx1ZXRvb3RoU29ja2V0LmdldE91dHB1dFN0cmVhbSgpOworCisgICAgICAgIHsKKyAgICAgICAgICBGaWxlIHBpcGVGaWxlID0gbmV3IEZpbGUoIi9wcm9jL3NlbGYvZmQvIiArIGlucHV0UGlwZSk7CisgICAgICAgICAgcGlwZVN0cmVhbSA9IG5ldyBGaWxlT3V0cHV0U3RyZWFtKHBpcGVGaWxlKTsKKyAgICAgICAgfQorCisgICAgICAgIGlucHV0VGhyZWFkID0gbmV3IElucHV0VGhyZWFkKCk7CisgICAgICAgIGlucHV0VGhyZWFkLnN0YXJ0KCk7CisKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICB9IGNhdGNoIChJT0V4Y2VwdGlvbiBvcGVuRXhjZXB0aW9uKSB7CisgICAgICAgIExvZy5kKAorICAgICAgICAgICAgTE9HX1RBRywKKyAgICAgICAgICAgICgiQmx1ZXRvb3RoIGNvbm5lY3QgZmFpbGVkOiAiCisgICAgICAgICAgICAgICAgKyByZW1vdGVBZGRyZXNzU3RyaW5nCisgICAgICAgICAgICAgICAgKyAiOiAiCisgICAgICAgICAgICAgICAgKyBvcGVuRXhjZXB0aW9uLmdldE1lc3NhZ2UoKSkpOworICAgICAgfQorICAgIH0KKworICAgIGNsb3NlKCk7CisgICAgcmV0dXJuIGZhbHNlOworICB9CisKKyAgcHVibGljIGJvb2xlYW4gd3JpdGUgKGJ5dGVbXSBieXRlcykgeworICAgIHRyeSB7CisgICAgICBvdXRwdXRTdHJlYW0ud3JpdGUoYnl0ZXMpOworICAgICAgb3V0cHV0U3RyZWFtLmZsdXNoKCk7CisgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9IGNhdGNoIChJT0V4Y2VwdGlvbiBleGNlcHRpb24pIHsKKyAgICAgIExvZy5lKExPR19UQUcsICgiQmx1ZXRvb3RoIHdyaXRlIGZhaWxlZDogIiArIHJlbW90ZUFkZHJlc3NTdHJpbmcpLCBleGNlcHRpb24pOworICAgIH0KKworICAgIHJldHVybiBmYWxzZTsKKyAgfQorCisgIHByaXZhdGUgc3RhdGljIEJsdWV0b290aERldmljZVtdIHBhaXJlZERldmljZXMgPSBudWxsOworCisgIHB1YmxpYyBzdGF0aWMgaW50IGdldFBhaXJlZERldmljZUNvdW50ICgpIHsKKyAgICBpZiAoaXNVcCgpKSB7CisgICAgICBTZXQ8Qmx1ZXRvb3RoRGV2aWNlPiBkZXZpY2VzID0gYmx1ZXRvb3RoQWRhcHRlci5nZXRCb25kZWREZXZpY2VzKCk7CisKKyAgICAgIGlmIChkZXZpY2VzICE9IG51bGwpIHsKKyAgICAgICAgcGFpcmVkRGV2aWNlcyA9IGRldmljZXMudG9BcnJheShuZXcgQmx1ZXRvb3RoRGV2aWNlW2RldmljZXMuc2l6ZSgpXSk7CisgICAgICAgIHJldHVybiBwYWlyZWREZXZpY2VzLmxlbmd0aDsKKyAgICAgIH0KKyAgICB9CisKKyAgICBwYWlyZWREZXZpY2VzID0gbnVsbDsKKyAgICByZXR1cm4gMDsKKyAgfQorCisgIHByaXZhdGUgc3RhdGljIEJsdWV0b290aERldmljZSBnZXRQYWlyZWREZXZpY2UgKGludCBpbmRleCkgeworICAgIGlmIChpbmRleCA+PSAwKSB7CisgICAgICBpZiAocGFpcmVkRGV2aWNlcyAhPSBudWxsKSB7CisgICAgICAgIGlmIChpbmRleCA8IHBhaXJlZERldmljZXMubGVuZ3RoKSB7CisgICAgICAgICAgcmV0dXJuIHBhaXJlZERldmljZXNbaW5kZXhdOworICAgICAgICB9CisgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIG51bGw7CisgIH0KKworICBwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRQYWlyZWREZXZpY2VBZGRyZXNzIChpbnQgaW5kZXgpIHsKKyAgICBCbHVldG9vdGhEZXZpY2UgZGV2aWNlID0gZ2V0UGFpcmVkRGV2aWNlKGluZGV4KTsKKyAgICBpZiAoZGV2aWNlID09IG51bGwpIHJldHVybiBudWxsOworICAgIHJldHVybiBkZXZpY2UuZ2V0QWRkcmVzcygpOworICB9CisKKyAgcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0UGFpcmVkRGV2aWNlTmFtZSAoaW50IGluZGV4KSB7CisgICAgQmx1ZXRvb3RoRGV2aWNlIGRldmljZSA9IGdldFBhaXJlZERldmljZShpbmRleCk7CisgICAgaWYgKGRldmljZSA9PSBudWxsKSByZXR1cm4gbnVsbDsKKyAgICByZXR1cm4gZGV2aWNlLmdldE5hbWUoKTsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvQW5kcm9pZC9HcmFkbGUvYXBwL3NyYy9tYWluL2phdmEvb3JnL2ExMXkvYnJsdHR5L2FuZHJvaWQvQnJhaWxsZUFwcGxpY2F0aW9uLmphdmEgYi9BbmRyb2lkL0dyYWRsZS9hcHAvc3JjL21haW4vamF2YS9vcmcvYTExeS9icmx0dHkvYW5kcm9pZC9CcmFpbGxlQXBwbGljYXRpb24uamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YjY0MjU5Ci0tLSAvZGV2L251bGwKKysrIGIvQW5kcm9pZC9HcmFkbGUvYXBwL3NyYy9tYWluL2phdmEvb3JnL2ExMXkvYnJsdHR5L2FuZHJvaWQvQnJhaWxsZUFwcGxpY2F0aW9uLmphdmEKQEAgLTAsMCArMSw2OCBAQAorLyoKKyAqIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisgKiAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisgKgorICogQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKK3BhY2thZ2Ugb3JnLmExMXkuYnJsdHR5LmFuZHJvaWQ7CisKK2ltcG9ydCBhbmRyb2lkLmFwcC5BcHBsaWNhdGlvbjsKK2ltcG9ydCBhbmRyb2lkLm9zLkhhbmRsZXI7CitpbXBvcnQgamF2YS51dGlsLkxvY2FsZTsKKworcHVibGljIGNsYXNzIEJyYWlsbGVBcHBsaWNhdGlvbiBleHRlbmRzIEFwcGxpY2F0aW9uIHsKKyAgcHJpdmF0ZSBzdGF0aWMgQnJhaWxsZUFwcGxpY2F0aW9uIGFwcGxpY2F0aW9uT2JqZWN0ID0gbnVsbDsKKyAgcHJpdmF0ZSBzdGF0aWMgSGFuZGxlciBhcHBsaWNhdGlvbkhhbmRsZXIgPSBudWxsOworCisgIEBPdmVycmlkZQorICBwdWJsaWMgdm9pZCBvbkNyZWF0ZSAoKSB7CisgICAgc3VwZXIub25DcmVhdGUoKTsKKyAgICBhcHBsaWNhdGlvbk9iamVjdCA9IHRoaXM7CisgICAgYXBwbGljYXRpb25IYW5kbGVyID0gbmV3IEhhbmRsZXIoKTsKKyAgfQorCisgIHB1YmxpYyBzdGF0aWMgQnJhaWxsZUFwcGxpY2F0aW9uIGdldCAoKSB7CisgICAgcmV0dXJuIGFwcGxpY2F0aW9uT2JqZWN0OworICB9CisKKyAgcHVibGljIHN0YXRpYyB2b2lkIHVucG9zdCAoUnVubmFibGUgY2FsbGJhY2spIHsKKyAgICBhcHBsaWNhdGlvbkhhbmRsZXIucmVtb3ZlQ2FsbGJhY2tzKGNhbGxiYWNrKTsKKyAgfQorCisgIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBwb3N0IChSdW5uYWJsZSBjYWxsYmFjaykgeworICAgIHJldHVybiBhcHBsaWNhdGlvbkhhbmRsZXIucG9zdChjYWxsYmFjayk7CisgIH0KKworICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gcG9zdEluIChsb25nIGRlbGF5LCBSdW5uYWJsZSBjYWxsYmFjaykgeworICAgIHJldHVybiBhcHBsaWNhdGlvbkhhbmRsZXIucG9zdERlbGF5ZWQoY2FsbGJhY2ssIGRlbGF5KTsKKyAgfQorCisgIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBwb3N0QXQgKGxvbmcgd2hlbiwgUnVubmFibGUgY2FsbGJhY2spIHsKKyAgICByZXR1cm4gYXBwbGljYXRpb25IYW5kbGVyLnBvc3RBdFRpbWUoY2FsbGJhY2ssIHdoZW4pOworICB9CisKKyAgcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0Q3VycmVudExvY2FsZSAoKSB7CisgICAgTG9jYWxlIGxvY2FsZTsKKworICAgIGlmIChBUElUZXN0cy5oYXZlTm91Z2F0KSB7CisgICAgICBsb2NhbGUgPSBnZXQoKS5nZXRSZXNvdXJjZXMoKS5nZXRDb25maWd1cmF0aW9uKCkuZ2V0TG9jYWxlcygpLmdldCgwKTsKKyAgICB9IGVsc2UgeworICAgICAgbG9jYWxlID0gZ2V0KCkuZ2V0UmVzb3VyY2VzKCkuZ2V0Q29uZmlndXJhdGlvbigpLmxvY2FsZTsKKyAgICB9CisKKyAgICBpZiAobG9jYWxlID09IG51bGwpIHJldHVybiBudWxsOworICAgIHJldHVybiBsb2NhbGUudG9TdHJpbmcoKTsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvQW5kcm9pZC9HcmFkbGUvYXBwL3NyYy9tYWluL2phdmEvb3JnL2ExMXkvYnJsdHR5L2FuZHJvaWQvQnJhaWxsZU1lc3NhZ2UuamF2YSBiL0FuZHJvaWQvR3JhZGxlL2FwcC9zcmMvbWFpbi9qYXZhL29yZy9hMTF5L2JybHR0eS9hbmRyb2lkL0JyYWlsbGVNZXNzYWdlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWNkNWEyZQotLS0gL2Rldi9udWxsCisrKyBiL0FuZHJvaWQvR3JhZGxlL2FwcC9zcmMvbWFpbi9qYXZhL29yZy9hMTF5L2JybHR0eS9hbmRyb2lkL0JyYWlsbGVNZXNzYWdlLmphdmEKQEAgLTAsMCArMSw2NSBAQAorLyoKKyAqIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisgKiAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisgKgorICogQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKK3BhY2thZ2Ugb3JnLmExMXkuYnJsdHR5LmFuZHJvaWQ7CisKK2ltcG9ydCBvcmcuYTExeS5icmx0dHkuY29yZS4qOworCitwdWJsaWMgZW51bSBCcmFpbGxlTWVzc2FnZSB7CisgIFBMQUlOKG51bGwpLAorICBXSU5ET1coIndpbiIpLAorICBXQVJOSU5HKCJ3YXJuIiksCisgIE5PVElGSUNBVElPTigibnRmYyIpLAorICBBTEVSVCgiYWxydCIpLAorICBERUJVRygiZGJnIiksCisgIEFOTk9VTkNFTUVOVCgiYW5uIiksCisgIDsgLy8gZW5kIG9mIGVudW1lcmF0aW9uCisKKyAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgbWVzc2FnZUxhYmVsOworCisgIEJyYWlsbGVNZXNzYWdlIChTdHJpbmcgbGFiZWwpIHsKKyAgICBtZXNzYWdlTGFiZWwgPSBsYWJlbDsKKyAgfQorCisgIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0TGFiZWwgKCkgeworICAgIHJldHVybiBtZXNzYWdlTGFiZWw7CisgIH0KKworICBwdWJsaWMgZmluYWwgdm9pZCBzaG93IChTdHJpbmcgdGV4dCkgeworICAgIGlmICh0ZXh0ID09IG51bGwpIHJldHVybjsKKyAgICB0ZXh0ID0gdGV4dC5yZXBsYWNlKCdcbicsICcgJykudHJpbSgpOworICAgIGlmICh0ZXh0LmlzRW1wdHkoKSkgcmV0dXJuOworCisgICAgU3RyaW5nIGxhYmVsID0gZ2V0TGFiZWwoKTsKKyAgICBpZiAoISgobGFiZWwgPT0gbnVsbCkgfHwgbGFiZWwuaXNFbXB0eSgpKSkgdGV4dCA9IGxhYmVsICsgIjogIiArIHRleHQ7CisgICAgZmluYWwgU3RyaW5nIG1lc3NhZ2UgPSB0ZXh0OworCisgICAgQ29yZVdyYXBwZXIucnVuT25Db3JlVGhyZWFkKAorICAgICAgbmV3IFJ1bm5hYmxlKCkgeworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHVibGljIHZvaWQgcnVuICgpIHsKKyAgICAgICAgICBDb3JlV3JhcHBlci5zaG93TWVzc2FnZShtZXNzYWdlKTsKKyAgICAgICAgfQorICAgICAgfQorICAgICk7CisgIH0KKworICBwdWJsaWMgZmluYWwgdm9pZCBzaG93IChpbnQgdGV4dCkgeworICAgIHNob3coQnJhaWxsZUFwcGxpY2F0aW9uLmdldCgpLmdldFN0cmluZyh0ZXh0KSk7CisgIH0KK30KZGlmZiAtLWdpdCBhL0FuZHJvaWQvR3JhZGxlL2FwcC9zcmMvbWFpbi9qYXZhL29yZy9hMTF5L2JybHR0eS9hbmRyb2lkL0JyYWlsbGVOb3RpZmljYXRpb24uamF2YSBiL0FuZHJvaWQvR3JhZGxlL2FwcC9zcmMvbWFpbi9qYXZhL29yZy9hMTF5L2JybHR0eS9hbmRyb2lkL0JyYWlsbGVOb3RpZmljYXRpb24uamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MWEwYjEyCi0tLSAvZGV2L251bGwKKysrIGIvQW5kcm9pZC9HcmFkbGUvYXBwL3NyYy9tYWluL2phdmEvb3JnL2ExMXkvYnJsdHR5L2FuZHJvaWQvQnJhaWxsZU5vdGlmaWNhdGlvbi5qYXZhCkBAIC0wLDAgKzEsMTkyIEBACisvKgorICogQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyAqICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyAqCisgKiBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorICoKKyAqIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyAqCisgKiBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisgKi8KKworcGFja2FnZSBvcmcuYTExeS5icmx0dHkuYW5kcm9pZDsKKworaW1wb3J0IGFuZHJvaWQuYXBwLkFjdGl2aXR5OworaW1wb3J0IGFuZHJvaWQuYXBwLk5vdGlmaWNhdGlvbjsKK2ltcG9ydCBhbmRyb2lkLmFwcC5Ob3RpZmljYXRpb25DaGFubmVsOworaW1wb3J0IGFuZHJvaWQuYXBwLk5vdGlmaWNhdGlvbk1hbmFnZXI7CitpbXBvcnQgYW5kcm9pZC5hcHAuUGVuZGluZ0ludGVudDsKK2ltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29udGV4dDsKK2ltcG9ydCBhbmRyb2lkLmNvbnRlbnQuSW50ZW50OworaW1wb3J0IG9yZy5hMTF5LmJybHR0eS5hbmRyb2lkLmFjdGl2aXRpZXMuQWN0aW9uc0FjdGl2aXR5OworaW1wb3J0IG9yZy5hMTF5LmJybHR0eS5hbmRyb2lkLnNldHRpbmdzLkRldmljZU1hbmFnZXI7CisKK3B1YmxpYyBhYnN0cmFjdCBjbGFzcyBCcmFpbGxlTm90aWZpY2F0aW9uIHsKKyAgcHJpdmF0ZSBCcmFpbGxlTm90aWZpY2F0aW9uICgpIHsKKyAgfQorCisgIHByaXZhdGUgZmluYWwgc3RhdGljIEludGVnZXIgTk9USUZJQ0FUSU9OX0lERU5USUZJRVIgPSAxOworICBwcml2YXRlIGZpbmFsIHN0YXRpYyBTdHJpbmcgTk9USUZJQ0FUSU9OX0NIQU5ORUwgPSAiYnJhaWxsZSI7CisKKyAgcHJpdmF0ZSBzdGF0aWMgQ29udGV4dCBhcHBsaWNhdGlvbkNvbnRleHQgPSBudWxsOworICBwcml2YXRlIHN0YXRpYyBOb3RpZmljYXRpb25NYW5hZ2VyIG5vdGlmaWNhdGlvbk1hbmFnZXIgPSBudWxsOworICBwcml2YXRlIHN0YXRpYyBOb3RpZmljYXRpb24uQnVpbGRlciBub3RpZmljYXRpb25CdWlsZGVyID0gbnVsbDsKKworICBwcml2YXRlIHN0YXRpYyBDb250ZXh0IGdldENvbnRleHQgKCkgeworICAgIGlmIChhcHBsaWNhdGlvbkNvbnRleHQgPT0gbnVsbCkgeworICAgICAgYXBwbGljYXRpb25Db250ZXh0ID0gQnJhaWxsZUFwcGxpY2F0aW9uLmdldCgpOworICAgIH0KKworICAgIHJldHVybiBhcHBsaWNhdGlvbkNvbnRleHQ7CisgIH0KKworICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgZ2V0U3RyaW5nIChpbnQgaWRlbnRpZmllcikgeworICAgIHJldHVybiBnZXRDb250ZXh0KCkuZ2V0U3RyaW5nKGlkZW50aWZpZXIpOworICB9CisKKyAgcHJpdmF0ZSBzdGF0aWMgUGVuZGluZ0ludGVudCBuZXdQZW5kaW5nSW50ZW50IChDbGFzczw/IGV4dGVuZHMgQWN0aXZpdHk+IGFjdGl2aXR5Q2xhc3MpIHsKKyAgICBDb250ZXh0IGNvbnRleHQgPSBnZXRDb250ZXh0KCk7CisgICAgSW50ZW50IGludGVudCA9IG5ldyBJbnRlbnQoY29udGV4dCwgYWN0aXZpdHlDbGFzcyk7CisKKyAgICBpbnRlbnQuYWRkRmxhZ3MoCisgICAgICBJbnRlbnQuRkxBR19BQ1RJVklUWV9DTEVBUl9UQVNLIHwKKyAgICAgIEludGVudC5GTEFHX0FDVElWSVRZX05FV19UQVNLCisgICAgKTsKKworICAgIHJldHVybiBQZW5kaW5nSW50ZW50LmdldEFjdGl2aXR5KGNvbnRleHQsIDAsIGludGVudCwgMCk7CisgIH0KKworICBwcml2YXRlIHN0YXRpYyBOb3RpZmljYXRpb25NYW5hZ2VyIGdldE1hbmFnZXIgKCkgeworICAgIGlmIChub3RpZmljYXRpb25NYW5hZ2VyID09IG51bGwpIHsKKyAgICAgIG5vdGlmaWNhdGlvbk1hbmFnZXIgPSAoTm90aWZpY2F0aW9uTWFuYWdlcikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRDb250ZXh0KCkuZ2V0U3lzdGVtU2VydmljZShDb250ZXh0Lk5PVElGSUNBVElPTl9TRVJWSUNFKTsKKyAgICB9CisKKyAgICByZXR1cm4gbm90aWZpY2F0aW9uTWFuYWdlcjsKKyAgfQorCisgIHByaXZhdGUgc3RhdGljIGJvb2xlYW4gaXNBY3RpdmUgKCkgeworICAgIHJldHVybiBub3RpZmljYXRpb25CdWlsZGVyICE9IG51bGw7CisgIH0KKworICBwcml2YXRlIHN0YXRpYyB2b2lkIG1ha2VCdWlsZGVyICgpIHsKKyAgICBDb250ZXh0IGNvbnRleHQgPSBnZXRDb250ZXh0KCk7CisKKyAgICBpZiAoQVBJVGVzdHMuaGF2ZU9yZW8pIHsKKyAgICAgIE5vdGlmaWNhdGlvbk1hbmFnZXIgbm0gPSBnZXRNYW5hZ2VyKCk7CisgICAgICBOb3RpZmljYXRpb25DaGFubmVsIGNoYW5uZWwgPSBubS5nZXROb3RpZmljYXRpb25DaGFubmVsKE5PVElGSUNBVElPTl9DSEFOTkVMKTsKKworICAgICAgaWYgKGNoYW5uZWwgPT0gbnVsbCkgeworICAgICAgICBjaGFubmVsID0gbmV3IE5vdGlmaWNhdGlvbkNoYW5uZWwoCisgICAgICAgICAgTk9USUZJQ0FUSU9OX0NIQU5ORUwsCisgICAgICAgICAgZ2V0U3RyaW5nKFIuc3RyaW5nLmJyYWlsbGVfY2hhbm5lbF9uYW1lKSwKKyAgICAgICAgICBOb3RpZmljYXRpb25NYW5hZ2VyLklNUE9SVEFOQ0VfTE9XCisgICAgICAgICk7CisKKyAgICAgICAgbm0uY3JlYXRlTm90aWZpY2F0aW9uQ2hhbm5lbChjaGFubmVsKTsKKyAgICAgIH0KKworICAgICAgbm90aWZpY2F0aW9uQnVpbGRlciA9IG5ldyBOb3RpZmljYXRpb24uQnVpbGRlcihjb250ZXh0LCBOT1RJRklDQVRJT05fQ0hBTk5FTCk7CisgICAgfSBlbHNlIHsKKyAgICAgIG5vdGlmaWNhdGlvbkJ1aWxkZXIgPSBuZXcgTm90aWZpY2F0aW9uLkJ1aWxkZXIoY29udGV4dCkKKyAgICAgICAgLnNldFByaW9yaXR5KE5vdGlmaWNhdGlvbi5QUklPUklUWV9MT1cpCisgICAgICAgIDsKKyAgICB9CisKKyAgICBub3RpZmljYXRpb25CdWlsZGVyCisgICAgICAuc2V0T25nb2luZyh0cnVlKQorICAgICAgLnNldE9ubHlBbGVydE9uY2UodHJ1ZSkKKworICAgICAgLnNldFNtYWxsSWNvbihSLmRyYXdhYmxlLmJyYWlsbGVfbm90aWZpY2F0aW9uKQorICAgICAgLnNldFN1YlRleHQoZ2V0U3RyaW5nKFIuc3RyaW5nLmJyYWlsbGVfaGludF90YXApKQorICAgICAgLnNldENvbnRlbnRJbnRlbnQobmV3UGVuZGluZ0ludGVudChBY3Rpb25zQWN0aXZpdHkuY2xhc3MpKQorICAgICAgOworCisgICAgaWYgKEFQSVRlc3RzLmhhdmVKZWxseUJlYW5NUjEpIHsKKyAgICAgIG5vdGlmaWNhdGlvbkJ1aWxkZXIuc2V0U2hvd1doZW4oZmFsc2UpOworICAgIH0KKworICAgIGlmIChBUElUZXN0cy5oYXZlTG9sbGlwb3ApIHsKKyAgICAgIG5vdGlmaWNhdGlvbkJ1aWxkZXIuc2V0Q2F0ZWdvcnkoTm90aWZpY2F0aW9uLkNBVEVHT1JZX1NFUlZJQ0UpOworICAgIH0KKyAgfQorCisgIHByaXZhdGUgc3RhdGljIE5vdGlmaWNhdGlvbiBidWlsZE5vdGlmaWNhdGlvbiAoKSB7CisgICAgcmV0dXJuIG5vdGlmaWNhdGlvbkJ1aWxkZXIuYnVpbGQoKTsKKyAgfQorCisgIHByaXZhdGUgc3RhdGljIHZvaWQgdXBkYXRlTm90aWZpY2F0aW9uICgpIHsKKyAgICBnZXRNYW5hZ2VyKCkubm90aWZ5KE5PVElGSUNBVElPTl9JREVOVElGSUVSLCBidWlsZE5vdGlmaWNhdGlvbigpKTsKKyAgfQorCisgIHByaXZhdGUgc3RhdGljIHZvaWQgc2V0U3RhdGUgKCkgeworICAgIGludCBzdGF0ZTsKKworICAgIGlmIChBcHBsaWNhdGlvblNldHRpbmdzLlJFTEVBU0VfQlJBSUxMRV9ERVZJQ0UpIHsKKyAgICAgIHN0YXRlID0gUi5zdHJpbmcuYnJhaWxsZV9zdGF0ZV9yZWxlYXNlZDsKKyAgICB9IGVsc2UgaWYgKEFwcGxpY2F0aW9uU2V0dGluZ3MuQlJBSUxMRV9ERVZJQ0VfT05MSU5FKSB7CisgICAgICBzdGF0ZSA9IFIuc3RyaW5nLmJyYWlsbGVfc3RhdGVfY29ubmVjdGVkOworICAgIH0gZWxzZSB7CisgICAgICBzdGF0ZSA9IFIuc3RyaW5nLmJyYWlsbGVfc3RhdGVfd2FpdGluZzsKKyAgICB9CisKKyAgICBub3RpZmljYXRpb25CdWlsZGVyLnNldENvbnRlbnRUaXRsZShnZXRTdHJpbmcoc3RhdGUpKTsKKyAgfQorCisgIHB1YmxpYyBzdGF0aWMgdm9pZCB1cGRhdGVTdGF0ZSAoKSB7CisgICAgc3luY2hyb25pemVkIChOT1RJRklDQVRJT05fSURFTlRJRklFUikgeworICAgICAgaWYgKGlzQWN0aXZlKCkpIHsKKyAgICAgICAgc2V0U3RhdGUoKTsKKyAgICAgICAgdXBkYXRlTm90aWZpY2F0aW9uKCk7CisgICAgICB9CisgICAgfQorICB9CisKKyAgcHJpdmF0ZSBzdGF0aWMgdm9pZCBzZXREZXZpY2UgKFN0cmluZyBkZXZpY2UpIHsKKyAgICBpZiAoZGV2aWNlID09IG51bGwpIGRldmljZSA9ICIiOworICAgIGlmIChkZXZpY2UuaXNFbXB0eSgpKSBkZXZpY2UgPSBnZXRTdHJpbmcoUi5zdHJpbmcuU0VMRUNURURfREVWSUNFX1VOU0VMRUNURUQpOworICAgIG5vdGlmaWNhdGlvbkJ1aWxkZXIuc2V0Q29udGVudFRleHQoZGV2aWNlKTsKKyAgfQorCisgIHB1YmxpYyBzdGF0aWMgdm9pZCB1cGRhdGVEZXZpY2UgKFN0cmluZyBkZXZpY2UpIHsKKyAgICBzeW5jaHJvbml6ZWQgKE5PVElGSUNBVElPTl9JREVOVElGSUVSKSB7CisgICAgICBpZiAoaXNBY3RpdmUoKSkgeworICAgICAgICBzZXREZXZpY2UoZGV2aWNlKTsKKyAgICAgICAgdXBkYXRlTm90aWZpY2F0aW9uKCk7CisgICAgICB9CisgICAgfQorICB9CisKKyAgcHVibGljIHN0YXRpYyB2b2lkIGNyZWF0ZSAoKSB7CisgICAgc3luY2hyb25pemVkIChOT1RJRklDQVRJT05fSURFTlRJRklFUikgeworICAgICAgaWYgKGlzQWN0aXZlKCkpIHsKKyAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbigiYWxyZWFkeSBhY3RpdmUiKTsKKyAgICAgIH0KKworICAgICAgbWFrZUJ1aWxkZXIoKTsKKyAgICAgIHNldFN0YXRlKCk7CisgICAgICBzZXREZXZpY2UoRGV2aWNlTWFuYWdlci5nZXRTZWxlY3RlZERldmljZSgpKTsKKworICAgICAgQnJhaWxsZVNlcnZpY2UuZ2V0QnJhaWxsZVNlcnZpY2UoKQorICAgICAgICAgICAgICAgICAgICAuc3RhcnRGb3JlZ3JvdW5kKE5PVElGSUNBVElPTl9JREVOVElGSUVSLCBidWlsZE5vdGlmaWNhdGlvbigpKTsKKyAgICB9CisgIH0KKworICBwdWJsaWMgc3RhdGljIHZvaWQgZGVzdHJveSAoKSB7CisgICAgc3luY2hyb25pemVkIChOT1RJRklDQVRJT05fSURFTlRJRklFUikgeworICAgICAgaWYgKCFpc0FjdGl2ZSgpKSB7CisgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oIm5vdCBhY3RpdmUiKTsKKyAgICAgIH0KKworICAgICAgbm90aWZpY2F0aW9uQnVpbGRlciA9IG51bGw7CisgICAgICBnZXRNYW5hZ2VyKCkuY2FuY2VsKE5PVElGSUNBVElPTl9JREVOVElGSUVSKTsKKyAgICB9CisgIH0KK30KZGlmZiAtLWdpdCBhL0FuZHJvaWQvR3JhZGxlL2FwcC9zcmMvbWFpbi9qYXZhL29yZy9hMTF5L2JybHR0eS9hbmRyb2lkL0JyYWlsbGVSZW5kZXJlci5qYXZhIGIvQW5kcm9pZC9HcmFkbGUvYXBwL3NyYy9tYWluL2phdmEvb3JnL2ExMXkvYnJsdHR5L2FuZHJvaWQvQnJhaWxsZVJlbmRlcmVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWEyNmFhNQotLS0gL2Rldi9udWxsCisrKyBiL0FuZHJvaWQvR3JhZGxlL2FwcC9zcmMvbWFpbi9qYXZhL29yZy9hMTF5L2JybHR0eS9hbmRyb2lkL0JyYWlsbGVSZW5kZXJlci5qYXZhCkBAIC0wLDAgKzEsMTU3IEBACisvKgorICogQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyAqICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyAqCisgKiBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorICoKKyAqIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyAqCisgKiBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisgKi8KKworcGFja2FnZSBvcmcuYTExeS5icmx0dHkuYW5kcm9pZDsKKworaW1wb3J0IGFuZHJvaWQuYWNjZXNzaWJpbGl0eXNlcnZpY2UuQWNjZXNzaWJpbGl0eVNlcnZpY2U7CitpbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5SZWN0OworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCitwdWJsaWMgYWJzdHJhY3QgY2xhc3MgQnJhaWxsZVJlbmRlcmVyIHsKKyAgcHJpdmF0ZSBmaW5hbCBzdGF0aWMgU3RyaW5nIExPR19UQUcgPSBCcmFpbGxlUmVuZGVyZXIuY2xhc3MuZ2V0TmFtZSgpOworCisgIHByaXZhdGUgc3RhdGljIHZvbGF0aWxlIEJyYWlsbGVSZW5kZXJlciBicmFpbGxlUmVuZGVyZXIgPSBuZXcgTGlzdEJyYWlsbGVSZW5kZXJlcigpOworCisgIHB1YmxpYyBzdGF0aWMgQnJhaWxsZVJlbmRlcmVyIGdldEJyYWlsbGVSZW5kZXJlciAoKSB7CisgICAgcmV0dXJuIGJyYWlsbGVSZW5kZXJlcjsKKyAgfQorCisgIHB1YmxpYyBzdGF0aWMgdm9pZCBzZXRCcmFpbGxlUmVuZGVyZXIgKEJyYWlsbGVSZW5kZXJlciByZW5kZXJlcikgeworICAgIGJyYWlsbGVSZW5kZXJlciA9IHJlbmRlcmVyOworICB9CisKKyAgcHVibGljIHN0YXRpYyB2b2lkIHNldEJyYWlsbGVSZW5kZXJlciAoU3RyaW5nIHR5cGUpIHsKKyAgICBTdHJpbmdCdWlsZGVyIG5hbWUgPSBuZXcgU3RyaW5nQnVpbGRlcihCcmFpbGxlUmVuZGVyZXIuY2xhc3MuZ2V0TmFtZSgpKTsKKyAgICBpbnQgaW5kZXggPSBuYW1lLmxhc3RJbmRleE9mKCIuIik7CisgICAgbmFtZS5pbnNlcnQoaW5kZXgrMSwgdHlwZSk7CisgICAgc2V0QnJhaWxsZVJlbmRlcmVyKChCcmFpbGxlUmVuZGVyZXIpTGFuZ3VhZ2VVdGlsaXRpZXMubmV3SW5zdGFuY2UobmFtZS50b1N0cmluZygpKSk7CisgIH0KKworICBwcm90ZWN0ZWQgYWJzdHJhY3Qgdm9pZCBzZXRCcmFpbGxlTG9jYXRpb25zIChTY3JlZW5FbGVtZW50TGlzdCBlbGVtZW50cyk7CisKKyAgcHJvdGVjdGVkIHN0YXRpYyBpbnQgZ2V0VGV4dFdpZHRoIChTdHJpbmdbXSBsaW5lcykgeworICAgIGludCB3aWR0aCA9IDE7CisKKyAgICBmb3IgKFN0cmluZyBsaW5lIDogbGluZXMpIHsKKyAgICAgIHdpZHRoID0gTWF0aC5tYXgod2lkdGgsIGxpbmUubGVuZ3RoKCkpOworICAgIH0KKworICAgIHJldHVybiB3aWR0aDsKKyAgfQorCisgIHByaXZhdGUgdm9pZCBhZGRWaXJ0dWFsRWxlbWVudHMgKFNjcmVlbkVsZW1lbnRMaXN0IGVsZW1lbnRzKSB7CisgICAgaWYgKEFQSVRlc3RzLmhhdmVKZWxseUJlYW4pIHsKKyAgICAgIGVsZW1lbnRzLmFkZEF0VG9wKAorICAgICAgICBSLnN0cmluZy5HTE9CQUxfQlVUVE9OX05PVElGSUNBVElPTlMsCisgICAgICAgIEFjY2Vzc2liaWxpdHlTZXJ2aWNlLkdMT0JBTF9BQ1RJT05fTk9USUZJQ0FUSU9OUworICAgICAgKTsKKyAgICB9CisKKyAgICBpZiAoQVBJVGVzdHMuaGF2ZUplbGx5QmVhbk1SMSkgeworICAgICAgZWxlbWVudHMuYWRkQXRUb3AoCisgICAgICAgIFIuc3RyaW5nLkdMT0JBTF9CVVRUT05fUVVJQ0tfU0VUVElOR1MsCisgICAgICAgIEFjY2Vzc2liaWxpdHlTZXJ2aWNlLkdMT0JBTF9BQ1RJT05fUVVJQ0tfU0VUVElOR1MKKyAgICAgICk7CisgICAgfQorCisgICAgaWYgKEFQSVRlc3RzLmhhdmVKZWxseUJlYW4pIHsKKyAgICAgIGVsZW1lbnRzLmFkZEF0Qm90dG9tKAorICAgICAgICBSLnN0cmluZy5HTE9CQUxfQlVUVE9OX0JBQ0ssCisgICAgICAgIEFjY2Vzc2liaWxpdHlTZXJ2aWNlLkdMT0JBTF9BQ1RJT05fQkFDSworICAgICAgKTsKKyAgICB9CisKKyAgICBpZiAoQVBJVGVzdHMuaGF2ZUplbGx5QmVhbikgeworICAgICAgZWxlbWVudHMuYWRkQXRCb3R0b20oCisgICAgICAgIFIuc3RyaW5nLkdMT0JBTF9CVVRUT05fSE9NRSwKKyAgICAgICAgQWNjZXNzaWJpbGl0eVNlcnZpY2UuR0xPQkFMX0FDVElPTl9IT01FCisgICAgICApOworICAgIH0KKworICAgIGlmIChBUElUZXN0cy5oYXZlSmVsbHlCZWFuKSB7CisgICAgICBlbGVtZW50cy5hZGRBdEJvdHRvbSgKKyAgICAgICAgQVBJVGVzdHMuaGF2ZUxvbGxpcG9wPworICAgICAgICAgIFIuc3RyaW5nLkdMT0JBTF9CVVRUT05fT1ZFUlZJRVc6CisgICAgICAgICAgUi5zdHJpbmcuR0xPQkFMX0JVVFRPTl9SRUNFTlRfQVBQUywKKyAgICAgICAgQWNjZXNzaWJpbGl0eVNlcnZpY2UuR0xPQkFMX0FDVElPTl9SRUNFTlRTCisgICAgICApOworICAgIH0KKyAgfQorCisgIHByaXZhdGUgdm9pZCBzZXRTY3JlZW5SZWdpb24gKExpc3Q8U3RyaW5nPiByb3dzLCBSZWN0IGxvY2F0aW9uLCBTdHJpbmdbXSBsaW5lcykgeworICAgIGludCB3aWR0aCA9IGxvY2F0aW9uLnJpZ2h0IC0gbG9jYXRpb24ubGVmdCArIDE7CisKKyAgICB3aGlsZSAocm93cy5zaXplKCkgPD0gbG9jYXRpb24uYm90dG9tKSB7CisgICAgICByb3dzLmFkZCgiIik7CisgICAgfQorCisgICAgZm9yIChpbnQgcm93SW5kZXg9bG9jYXRpb24udG9wOyByb3dJbmRleDw9bG9jYXRpb24uYm90dG9tOyByb3dJbmRleCs9MSkgeworICAgICAgU3RyaW5nQnVpbGRlciByb3cgPSBuZXcgU3RyaW5nQnVpbGRlcihyb3dzLmdldChyb3dJbmRleCkpOworICAgICAgd2hpbGUgKHJvdy5sZW5ndGgoKSA8PSBsb2NhdGlvbi5yaWdodCkgcm93LmFwcGVuZCgnICcpOworCisgICAgICBpbnQgbGluZUluZGV4ID0gcm93SW5kZXggLSBsb2NhdGlvbi50b3A7CisgICAgICBTdHJpbmcgbGluZSA9IChsaW5lSW5kZXggPCBsaW5lcy5sZW5ndGgpPyBsaW5lc1tsaW5lSW5kZXhdOiAiIjsKKyAgICAgIGlmIChsaW5lLmxlbmd0aCgpID4gd2lkdGgpIGxpbmUgPSBsaW5lLnN1YnN0cmluZygwLCB3aWR0aCk7CisKKyAgICAgIGludCBlbmQgPSBsb2NhdGlvbi5sZWZ0ICsgbGluZS5sZW5ndGgoKTsKKyAgICAgIHJvdy5yZXBsYWNlKGxvY2F0aW9uLmxlZnQsIGVuZCwgbGluZSk7CisgICAgICB3aGlsZSAoZW5kIDw9IGxvY2F0aW9uLnJpZ2h0KSByb3cuc2V0Q2hhckF0KGVuZCsrLCAnICcpOworCisgICAgICByb3dzLnNldChyb3dJbmRleCwgcm93LnRvU3RyaW5nKCkpOworICAgIH0KKyAgfQorCisgIHB1YmxpYyBmaW5hbCB2b2lkIHJlbmRlclNjcmVlbkVsZW1lbnRzIChTY3JlZW5FbGVtZW50TGlzdCBlbGVtZW50cywgTGlzdDxTdHJpbmc+IHJvd3MpIHsKKyAgICBzZXRCcmFpbGxlTG9jYXRpb25zKGVsZW1lbnRzKTsKKyAgICBhZGRWaXJ0dWFsRWxlbWVudHMoZWxlbWVudHMpOworCisgICAgYm9vbGVhbiB3YXNWaXJ0dWFsID0gZmFsc2U7CisgICAgaW50IGhvcml6b250YWxPZmZzZXQgPSAwOworICAgIGludCB2ZXJ0aWNhbE9mZnNldCA9IDA7CisKKyAgICBmb3IgKFNjcmVlbkVsZW1lbnQgZWxlbWVudCA6IGVsZW1lbnRzKSB7CisgICAgICBib29sZWFuIGlzVmlydHVhbCA9IGVsZW1lbnQuZ2V0VmlzdWFsTG9jYXRpb24oKSA9PSBudWxsOworCisgICAgICBpZiAoaXNWaXJ0dWFsICE9IHdhc1ZpcnR1YWwpIHsKKyAgICAgICAgaG9yaXpvbnRhbE9mZnNldCA9IDA7CisgICAgICAgIHZlcnRpY2FsT2Zmc2V0ID0gcm93cy5zaXplKCk7CisgICAgICAgIHdhc1ZpcnR1YWwgPSBpc1ZpcnR1YWw7CisgICAgICB9CisKKyAgICAgIGlmIChpc1ZpcnR1YWwpIHsKKyAgICAgICAgU3RyaW5nW10gdGV4dCA9IGVsZW1lbnQuZ2V0QnJhaWxsZVRleHQoKTsKKyAgICAgICAgaW50IGxlZnQgPSBob3Jpem9udGFsT2Zmc2V0OworICAgICAgICBpbnQgdG9wID0gMDsKKyAgICAgICAgaW50IHJpZ2h0ID0gbGVmdCArIGdldFRleHRXaWR0aCh0ZXh0KSAtIDE7CisgICAgICAgIGludCBib3R0b20gPSB0b3AgKyB0ZXh0Lmxlbmd0aCAtIDE7CisgICAgICAgIGVsZW1lbnQuc2V0QnJhaWxsZUxvY2F0aW9uKGxlZnQsIHRvcCwgcmlnaHQsIGJvdHRvbSk7CisgICAgICAgIGhvcml6b250YWxPZmZzZXQgPSByaWdodCArIDEgKyBBcHBsaWNhdGlvblBhcmFtZXRlcnMuQlJBSUxMRV9DT0xVTU5fU1BBQ0lORzsKKyAgICAgIH0KKworICAgICAgUmVjdCBsb2NhdGlvbiA9IGVsZW1lbnQuZ2V0QnJhaWxsZUxvY2F0aW9uKCk7CisgICAgICBpZiAobG9jYXRpb24gIT0gbnVsbCkgeworICAgICAgICBsb2NhdGlvbi50b3AgKz0gdmVydGljYWxPZmZzZXQ7CisgICAgICAgIGxvY2F0aW9uLmJvdHRvbSArPSB2ZXJ0aWNhbE9mZnNldDsKKyAgICAgICAgc2V0U2NyZWVuUmVnaW9uKHJvd3MsIGxvY2F0aW9uLCBlbGVtZW50LmdldEJyYWlsbGVUZXh0KCkpOworICAgICAgfQorICAgIH0KKyAgfQorCisgIHByb3RlY3RlZCBCcmFpbGxlUmVuZGVyZXIgKCkgeworICB9Cit9CmRpZmYgLS1naXQgYS9BbmRyb2lkL0dyYWRsZS9hcHAvc3JjL21haW4vamF2YS9vcmcvYTExeS9icmx0dHkvYW5kcm9pZC9CcmFpbGxlU2VydmljZS5qYXZhIGIvQW5kcm9pZC9HcmFkbGUvYXBwL3NyYy9tYWluL2phdmEvb3JnL2ExMXkvYnJsdHR5L2FuZHJvaWQvQnJhaWxsZVNlcnZpY2UuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NjFiODNhCi0tLSAvZGV2L251bGwKKysrIGIvQW5kcm9pZC9HcmFkbGUvYXBwL3NyYy9tYWluL2phdmEvb3JnL2ExMXkvYnJsdHR5L2FuZHJvaWQvQnJhaWxsZVNlcnZpY2UuamF2YQpAQCAtMCwwICsxLDEyNSBAQAorLyoKKyAqIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisgKiAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisgKgorICogQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKK3BhY2thZ2Ugb3JnLmExMXkuYnJsdHR5LmFuZHJvaWQ7CisKK2ltcG9ydCBhbmRyb2lkLmFjY2Vzc2liaWxpdHlzZXJ2aWNlLkFjY2Vzc2liaWxpdHlCdXR0b25Db250cm9sbGVyOworaW1wb3J0IGFuZHJvaWQuYWNjZXNzaWJpbGl0eXNlcnZpY2UuQWNjZXNzaWJpbGl0eVNlcnZpY2U7CitpbXBvcnQgYW5kcm9pZC51dGlsLkxvZzsKK2ltcG9ydCBhbmRyb2lkLnZpZXcuYWNjZXNzaWJpbGl0eS5BY2Nlc3NpYmlsaXR5RXZlbnQ7CitpbXBvcnQgb3JnLmExMXkuYnJsdHR5LmNvcmUuKjsKKworcHVibGljIGNsYXNzIEJyYWlsbGVTZXJ2aWNlIGV4dGVuZHMgQWNjZXNzaWJpbGl0eVNlcnZpY2UgeworICBwcml2YXRlIGZpbmFsIHN0YXRpYyBTdHJpbmcgTE9HX1RBRyA9IEJyYWlsbGVTZXJ2aWNlLmNsYXNzLmdldE5hbWUoKTsKKworICBwcml2YXRlIHN0YXRpYyB2b2xhdGlsZSBCcmFpbGxlU2VydmljZSBicmFpbGxlU2VydmljZSA9IG51bGw7CisgIHByaXZhdGUgQWNjZXNzaWJpbGl0eUJ1dHRvbkNhbGxiYWNrcyBhY2Nlc3NpYmlsaXR5QnV0dG9uQ2FsbGJhY2tzID0gbnVsbDsKKyAgcHJpdmF0ZSBUaHJlYWQgY29yZVRocmVhZCA9IG51bGw7CisKKyAgcHVibGljIHN0YXRpYyBCcmFpbGxlU2VydmljZSBnZXRCcmFpbGxlU2VydmljZSAoKSB7CisgICAgcmV0dXJuIGJyYWlsbGVTZXJ2aWNlOworICB9CisKKyAgcHJpdmF0ZSBmaW5hbCB2b2lkIGVuYWJsZUFjY2Vzc2liaWxpdHlCdXR0b24gKCkgeworICAgIGlmIChBUElUZXN0cy5oYXZlT3JlbykgeworICAgICAgQWNjZXNzaWJpbGl0eUJ1dHRvbkNvbnRyb2xsZXIgY29udHJvbGxlciA9IGdldEFjY2Vzc2liaWxpdHlCdXR0b25Db250cm9sbGVyKCk7CisKKyAgICAgIGlmIChjb250cm9sbGVyICE9IG51bGwpIHsKKyAgICAgICAgc3luY2hyb25pemVkIChjb250cm9sbGVyKSB7CisgICAgICAgICAgaWYgKGFjY2Vzc2liaWxpdHlCdXR0b25DYWxsYmFja3MgPT0gbnVsbCkgeworICAgICAgICAgICAgYWNjZXNzaWJpbGl0eUJ1dHRvbkNhbGxiYWNrcyA9IG5ldyBBY2Nlc3NpYmlsaXR5QnV0dG9uQ2FsbGJhY2tzKCk7CisgICAgICAgICAgICBjb250cm9sbGVyLnJlZ2lzdGVyQWNjZXNzaWJpbGl0eUJ1dHRvbkNhbGxiYWNrKGFjY2Vzc2liaWxpdHlCdXR0b25DYWxsYmFja3MpOworICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgfQorICAgIH0KKyAgfQorCisgIHByaXZhdGUgZmluYWwgdm9pZCBkaXNhYmxlQWNjZXNzaWJpbGl0eUJ1dHRvbiAoKSB7CisgICAgaWYgKEFQSVRlc3RzLmhhdmVPcmVvKSB7CisgICAgICBBY2Nlc3NpYmlsaXR5QnV0dG9uQ29udHJvbGxlciBjb250cm9sbGVyID0gZ2V0QWNjZXNzaWJpbGl0eUJ1dHRvbkNvbnRyb2xsZXIoKTsKKworICAgICAgaWYgKGNvbnRyb2xsZXIgIT0gbnVsbCkgeworICAgICAgICBzeW5jaHJvbml6ZWQgKGNvbnRyb2xsZXIpIHsKKyAgICAgICAgICBpZiAoYWNjZXNzaWJpbGl0eUJ1dHRvbkNhbGxiYWNrcyAhPSBudWxsKSB7CisgICAgICAgICAgICBjb250cm9sbGVyLnVucmVnaXN0ZXJBY2Nlc3NpYmlsaXR5QnV0dG9uQ2FsbGJhY2soYWNjZXNzaWJpbGl0eUJ1dHRvbkNhbGxiYWNrcyk7CisgICAgICAgICAgICBhY2Nlc3NpYmlsaXR5QnV0dG9uQ2FsbGJhY2tzID0gbnVsbDsKKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9CisgIH0KKworICBwcml2YXRlIGZpbmFsIHZvaWQgc3RhcnRDb3JlVGhyZWFkICgpIHsKKyAgICBMb2cuZChMT0dfVEFHLCAic3RhcnRpbmcgY29yZSB0aHJlYWQiKTsKKyAgICBjb3JlVGhyZWFkID0gbmV3IENvcmVUaHJlYWQodGhpcyk7CisgICAgY29yZVRocmVhZC5zdGFydCgpOworICB9CisKKyAgcHJpdmF0ZSBmaW5hbCB2b2lkIHN0b3BDb3JlVGhyZWFkICgpIHsKKyAgICB0cnkgeworICAgICAgTG9nLmQoTE9HX1RBRywgInN0b3BwaW5nIGNvcmUgdGhyZWFkIik7CisgICAgICBDb3JlV3JhcHBlci5zdG9wKCk7CisgICAgICBMb2cuZChMT0dfVEFHLCAid2FpdGluZyBmb3IgY29yZSB0aHJlYWQgdG8gc3RvcCIpOworCisgICAgICB0cnkgeworICAgICAgICBjb3JlVGhyZWFkLmpvaW4oKTsKKyAgICAgICAgTG9nLmQoTE9HX1RBRywgImNvcmUgdGhyZWFkIHN0b3BwZWQiKTsKKyAgICAgIH0gY2F0Y2ggKEludGVycnVwdGVkRXhjZXB0aW9uIGV4Y2VwdGlvbikgeworICAgICAgICBMb2cudyhMT0dfVEFHLCAiY29yZSB0aHJlYWQgam9pbiBpbnRlcnJ1cHRlZCIsIGV4Y2VwdGlvbik7CisgICAgICB9CisgICAgfSBmaW5hbGx5IHsKKyAgICAgIGNvcmVUaHJlYWQgPSBudWxsOworICAgIH0KKyAgfQorCisgIEBPdmVycmlkZQorICBwdWJsaWMgdm9pZCBvbkNyZWF0ZSAoKSB7CisgICAgc3VwZXIub25DcmVhdGUoKTsKKworICAgIExvZy5kKExPR19UQUcsICJicmFpbGxlIHNlcnZpY2Ugc3RhcnRpbmciKTsKKyAgICBicmFpbGxlU2VydmljZSA9IHRoaXM7CisKKyAgICBlbmFibGVBY2Nlc3NpYmlsaXR5QnV0dG9uKCk7CisgICAgc3RhcnRDb3JlVGhyZWFkKCk7CisgICAgQnJhaWxsZU5vdGlmaWNhdGlvbi5jcmVhdGUoKTsKKyAgfQorCisgIEBPdmVycmlkZQorICBwdWJsaWMgdm9pZCBvbkRlc3Ryb3kgKCkgeworICAgIHRyeSB7CisgICAgICBzdG9wQ29yZVRocmVhZCgpOworICAgICAgZGlzYWJsZUFjY2Vzc2liaWxpdHlCdXR0b24oKTsKKyAgICAgIEJyYWlsbGVOb3RpZmljYXRpb24uZGVzdHJveSgpOworCisgICAgICBicmFpbGxlU2VydmljZSA9IG51bGw7CisgICAgICBMb2cuZChMT0dfVEFHLCAiYnJhaWxsZSBzZXJ2aWNlIHN0b3BwZWQiKTsKKyAgICB9IGZpbmFsbHkgeworICAgICAgc3VwZXIub25EZXN0cm95KCk7CisgICAgfQorICB9CisKKyAgQE92ZXJyaWRlCisgIHB1YmxpYyB2b2lkIG9uQWNjZXNzaWJpbGl0eUV2ZW50IChBY2Nlc3NpYmlsaXR5RXZlbnQgZXZlbnQpIHsKKyAgICBTY3JlZW5Ecml2ZXIub25BY2Nlc3NpYmlsaXR5RXZlbnQoZXZlbnQpOworICB9CisKKyAgQE92ZXJyaWRlCisgIHB1YmxpYyB2b2lkIG9uSW50ZXJydXB0ICgpIHsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvQW5kcm9pZC9HcmFkbGUvYXBwL3NyYy9tYWluL2phdmEvb3JnL2ExMXkvYnJsdHR5L2FuZHJvaWQvQ2hhcmFjdGVycy5qYXZhIGIvQW5kcm9pZC9HcmFkbGUvYXBwL3NyYy9tYWluL2phdmEvb3JnL2ExMXkvYnJsdHR5L2FuZHJvaWQvQ2hhcmFjdGVycy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVmNmUyM2YKLS0tIC9kZXYvbnVsbAorKysgYi9BbmRyb2lkL0dyYWRsZS9hcHAvc3JjL21haW4vamF2YS9vcmcvYTExeS9icmx0dHkvYW5kcm9pZC9DaGFyYWN0ZXJzLmphdmEKQEAgLTAsMCArMSwxMDQgQEAKKy8qCisgKiBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorICogICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorICoKKyAqIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorICoKKyAqIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyAqLworCitwYWNrYWdlIG9yZy5hMTF5LmJybHR0eS5hbmRyb2lkOworCitpbXBvcnQgb3JnLmExMXkuYnJsdHR5LmNvcmUuQnJhaWxsZTsKKworcHVibGljIGFic3RyYWN0IGNsYXNzIENoYXJhY3RlcnMgeworICBwcml2YXRlIENoYXJhY3RlcnMgKCkgeworICB9CisKKyAgcHVibGljIGZpbmFsIHN0YXRpYyBjaGFyIENIRUNLQk9YX0JFR0lOID0gQnJhaWxsZS5ST1cKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgQnJhaWxsZS5ET1Q0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEJyYWlsbGUuRE9UMQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBCcmFpbGxlLkRPVDIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgQnJhaWxsZS5ET1QzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEJyYWlsbGUuRE9UNworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBCcmFpbGxlLkRPVDgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKKworICBwdWJsaWMgZmluYWwgc3RhdGljIGNoYXIgQ0hFQ0tCT1hfTUFSSyA9IEJyYWlsbGUuUk9XCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgQnJhaWxsZS5ET1QyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgQnJhaWxsZS5ET1Q1CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgQnJhaWxsZS5ET1QzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgQnJhaWxsZS5ET1Q2CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKKworICBwdWJsaWMgZmluYWwgc3RhdGljIGNoYXIgQ0hFQ0tCT1hfRU5EID0gQnJhaWxsZS5ST1cKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEJyYWlsbGUuRE9UMQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgQnJhaWxsZS5ET1Q0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBCcmFpbGxlLkRPVDUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEJyYWlsbGUuRE9UNgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgQnJhaWxsZS5ET1Q4CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBCcmFpbGxlLkRPVDcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CisKKyAgcHVibGljIGZpbmFsIHN0YXRpYyBjaGFyIFJBRElPX0JFR0lOID0gQnJhaWxsZS5ST1cKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgQnJhaWxsZS5ET1Q0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEJyYWlsbGUuRE9UMgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBCcmFpbGxlLkRPVDMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgQnJhaWxsZS5ET1Q4CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CisKKyAgcHVibGljIGZpbmFsIHN0YXRpYyBjaGFyIFJBRElPX01BUksgPSBCcmFpbGxlLlJPVworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEJyYWlsbGUuRE9UMgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEJyYWlsbGUuRE9UNQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEJyYWlsbGUuRE9UMworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEJyYWlsbGUuRE9UNgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CisKKyAgcHVibGljIGZpbmFsIHN0YXRpYyBjaGFyIFJBRElPX0VORCA9IEJyYWlsbGUuUk9XCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBCcmFpbGxlLkRPVDEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEJyYWlsbGUuRE9UNQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgQnJhaWxsZS5ET1Q2CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBCcmFpbGxlLkRPVDcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CisKKyAgcHVibGljIGZpbmFsIHN0YXRpYyBjaGFyIFNXSVRDSF9CRUdJTiA9IEJyYWlsbGUuUk9XCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBCcmFpbGxlLkRPVDQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEJyYWlsbGUuRE9UNQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgQnJhaWxsZS5ET1Q2CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBCcmFpbGxlLkRPVDgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CisKKyAgcHVibGljIGZpbmFsIHN0YXRpYyBjaGFyIFNXSVRDSF9PRkYgPSBCcmFpbGxlLlJPVworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEJyYWlsbGUuRE9UMQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEJyYWlsbGUuRE9UNAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEJyYWlsbGUuRE9UMworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEJyYWlsbGUuRE9UNgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEJyYWlsbGUuRE9UNworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEJyYWlsbGUuRE9UOAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CisKKyAgcHVibGljIGZpbmFsIHN0YXRpYyBjaGFyIFNXSVRDSF9PTiA9IEJyYWlsbGUuUk9XCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBCcmFpbGxlLkRPVDEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEJyYWlsbGUuRE9UNAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgQnJhaWxsZS5ET1QyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBCcmFpbGxlLkRPVDUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEJyYWlsbGUuRE9UNworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgQnJhaWxsZS5ET1Q4CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOworCisgIHB1YmxpYyBmaW5hbCBzdGF0aWMgY2hhciBTV0lUQ0hfRU5EID0gQnJhaWxsZS5ST1cKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBCcmFpbGxlLkRPVDEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBCcmFpbGxlLkRPVDIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBCcmFpbGxlLkRPVDMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBCcmFpbGxlLkRPVDcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOworfQpkaWZmIC0tZ2l0IGEvQW5kcm9pZC9HcmFkbGUvYXBwL3NyYy9tYWluL2phdmEvb3JnL2ExMXkvYnJsdHR5L2FuZHJvaWQvQ2hvb3NlcldpbmRvdy5qYXZhIGIvQW5kcm9pZC9HcmFkbGUvYXBwL3NyYy9tYWluL2phdmEvb3JnL2ExMXkvYnJsdHR5L2FuZHJvaWQvQ2hvb3NlcldpbmRvdy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZhMWUxYzUKLS0tIC9kZXYvbnVsbAorKysgYi9BbmRyb2lkL0dyYWRsZS9hcHAvc3JjL21haW4vamF2YS9vcmcvYTExeS9icmx0dHkvYW5kcm9pZC9DaG9vc2VyV2luZG93LmphdmEKQEAgLTAsMCArMSw4MiBAQAorLyoKKyAqIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisgKiAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisgKgorICogQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKK3BhY2thZ2Ugb3JnLmExMXkuYnJsdHR5LmFuZHJvaWQ7CisKK2ltcG9ydCBhbmRyb2lkLnZpZXcuVmlldzsKK2ltcG9ydCBhbmRyb2lkLndpZGdldC5BZGFwdGVyVmlldzsKK2ltcG9ydCBhbmRyb2lkLndpZGdldC5BcnJheUFkYXB0ZXI7CitpbXBvcnQgYW5kcm9pZC53aWRnZXQuQnV0dG9uOworaW1wb3J0IGFuZHJvaWQud2lkZ2V0Lkxpc3RWaWV3OworaW1wb3J0IGFuZHJvaWQud2lkZ2V0LlRleHRWaWV3OworCitwdWJsaWMgY2xhc3MgQ2hvb3NlcldpbmRvdyBleHRlbmRzIE92ZXJsYXlXaW5kb3cgeworICBwcml2YXRlIGZpbmFsIExpc3RWaWV3IGl0ZW1MaXN0OworICBwcml2YXRlIGZpbmFsIEJ1dHRvbiBkaXNtaXNzQnV0dG9uOworCisgIHByaXZhdGUgZmluYWwgdm9pZCBkaXNtaXNzICgpIHsKKyAgICBpdGVtTGlzdC5zZXRPbkl0ZW1DbGlja0xpc3RlbmVyKG51bGwpOworICAgIGRpc21pc3NCdXR0b24uc2V0T25DbGlja0xpc3RlbmVyKG51bGwpOworICAgIHJlbW92ZVZpZXcoKTsKKyAgfQorCisgIHB1YmxpYyBzdGF0aWMgaW50ZXJmYWNlIEl0ZW1DbGlja0xpc3RlbmVyIHsKKyAgICBwdWJsaWMgdm9pZCBvbkNsaWNrIChpbnQgcG9zaXRpb24pOworICB9CisKKyAgcHVibGljIENob29zZXJXaW5kb3cgKENoYXJTZXF1ZW5jZVtdIGl0ZW1MYWJlbHMsIGludCB0aXRsZSwgZmluYWwgSXRlbUNsaWNrTGlzdGVuZXIgaXRlbUNsaWNrTGlzdGVuZXIpIHsKKyAgICBzdXBlcigpOworCisgICAgVmlldyB2aWV3ID0gc2V0VmlldyhSLmxheW91dC5jaG9vc2VyKTsKKyAgICBpdGVtTGlzdCA9IChMaXN0Vmlldyl2aWV3LmZpbmRWaWV3QnlJZChSLmlkLmNob29zZXJfbGlzdCk7CisgICAgZGlzbWlzc0J1dHRvbiA9IChCdXR0b24pdmlldy5maW5kVmlld0J5SWQoUi5pZC5jaG9vc2VyX2Rpc21pc3MpOworCisgICAgeworICAgICAgVGV4dFZpZXcgdGl0bGVWaWV3ID0gKFRleHRWaWV3KXZpZXcuZmluZFZpZXdCeUlkKFIuaWQuY2hvb3Nlcl90aXRsZSk7CisgICAgICB0aXRsZVZpZXcuc2V0VGV4dCh0aXRsZSk7CisgICAgfQorCisgICAgeworICAgICAgQXJyYXlBZGFwdGVyPENoYXJTZXF1ZW5jZT4gYWRhcHRlciA9IG5ldyBBcnJheUFkYXB0ZXI8Q2hhclNlcXVlbmNlPigKKyAgICAgICAgZ2V0Q29udGV4dCgpLCBhbmRyb2lkLlIubGF5b3V0LnNpbXBsZV9saXN0X2l0ZW1fMSwgaXRlbUxhYmVscworICAgICAgKTsKKworICAgICAgaXRlbUxpc3Quc2V0QWRhcHRlcihhZGFwdGVyKTsKKyAgICB9CisKKyAgICBpdGVtTGlzdC5zZXRPbkl0ZW1DbGlja0xpc3RlbmVyKAorICAgICAgbmV3IEFkYXB0ZXJWaWV3Lk9uSXRlbUNsaWNrTGlzdGVuZXIoKSB7CisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgdm9pZCBvbkl0ZW1DbGljayAoQWRhcHRlclZpZXcgYWRhcHRlciwgVmlldyB2aWV3LCBpbnQgcG9zaXRpb24sIGxvbmcgaWQpIHsKKyAgICAgICAgICBpdGVtQ2xpY2tMaXN0ZW5lci5vbkNsaWNrKHBvc2l0aW9uKTsKKyAgICAgICAgICBkaXNtaXNzKCk7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICApOworICAgIGRpc21pc3NCdXR0b24uc2V0T25DbGlja0xpc3RlbmVyKAorICAgICAgbmV3IFZpZXcuT25DbGlja0xpc3RlbmVyKCkgeworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHVibGljIHZvaWQgb25DbGljayAoVmlldyB2aWV3KSB7CisgICAgICAgICAgZGlzbWlzcygpOworICAgICAgICB9CisgICAgICB9CisgICAgKTsKKworICAgIGl0ZW1MaXN0LnJlcXVlc3RGb2N1cygpOworICB9Cit9CmRpZmYgLS1naXQgYS9BbmRyb2lkL0dyYWRsZS9hcHAvc3JjL21haW4vamF2YS9vcmcvYTExeS9icmx0dHkvYW5kcm9pZC9DaHJvbWVSb2xlLmphdmEgYi9BbmRyb2lkL0dyYWRsZS9hcHAvc3JjL21haW4vamF2YS9vcmcvYTExeS9icmx0dHkvYW5kcm9pZC9DaHJvbWVSb2xlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTgxNzMwNAotLS0gL2Rldi9udWxsCisrKyBiL0FuZHJvaWQvR3JhZGxlL2FwcC9zcmMvbWFpbi9qYXZhL29yZy9hMTF5L2JybHR0eS9hbmRyb2lkL0Nocm9tZVJvbGUuamF2YQpAQCAtMCwwICsxLDI4MCBAQAorLyoKKyAqIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisgKiAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisgKgorICogQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKK3BhY2thZ2Ugb3JnLmExMXkuYnJsdHR5LmFuZHJvaWQ7CisKK2ltcG9ydCBhbmRyb2lkLnV0aWwuTG9nOworaW1wb3J0IGFuZHJvaWQudmlldy5hY2Nlc3NpYmlsaXR5LkFjY2Vzc2liaWxpdHlOb2RlSW5mbzsKK2ltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKK2ltcG9ydCBqYXZhLnV0aWwuTWFwOworCitwdWJsaWMgZW51bSBDaHJvbWVSb2xlIHsKKyAgY2VsbCgiY29sIiwKKyAgICBuZXcgTGFiZWxNYWtlcigpIHsKKyAgICAgIEBPdmVycmlkZQorICAgICAgcHVibGljIFN0cmluZyBtYWtlTGFiZWwgKENocm9tZVJvbGUgcm9sZSwgQWNjZXNzaWJpbGl0eU5vZGVJbmZvIG5vZGUpIHsKKyAgICAgICAgcmV0dXJuIG1ha2VDb29yZGluYXRlc0xhYmVsKHJvbGUsIG5vZGUpOworICAgICAgfQorICAgIH0KKyAgKSwKKworICBjb2x1bW5IZWFkZXIoImhkciIsCisgICAgbmV3IExhYmVsTWFrZXIoKSB7CisgICAgICBAT3ZlcnJpZGUKKyAgICAgIHB1YmxpYyBTdHJpbmcgbWFrZUxhYmVsIChDaHJvbWVSb2xlIHJvbGUsIEFjY2Vzc2liaWxpdHlOb2RlSW5mbyBub2RlKSB7CisgICAgICAgIHJldHVybiBtYWtlQ29vcmRpbmF0ZXNMYWJlbChyb2xlLCBub2RlKTsKKyAgICAgIH0KKyAgICB9CisgICksCisKKyAgaGVhZGluZygiaGRnIiwKKyAgICAiaGVhZGluZyAxIiwgImhkMSIsCisgICAgImhlYWRpbmcgMiIsICJoZDIiLAorICAgICJoZWFkaW5nIDMiLCAiaGQzIiwKKyAgICAiaGVhZGluZyA0IiwgImhkNCIsCisgICAgImhlYWRpbmcgNSIsICJoZDUiLAorICAgICJoZWFkaW5nIDYiLCAiaGQ2IgorICApLAorCisgIGxpbmsoImxuayIsCisgICAgbmV3IExhYmVsTWFrZXIoKSB7CisgICAgICBAT3ZlcnJpZGUKKyAgICAgIHB1YmxpYyBTdHJpbmcgbWFrZUxhYmVsIChDaHJvbWVSb2xlIHJvbGUsIEFjY2Vzc2liaWxpdHlOb2RlSW5mbyBub2RlKSB7CisgICAgICAgIFN0cmluZ0J1aWxkZXIgbGFiZWwgPSBuZXcgU3RyaW5nQnVpbGRlcihyb2xlLmdlbmVyaWNMYWJlbCk7CisKKyAgICAgICAgaWYgKGZhbHNlKSB7CisgICAgICAgICAgU3RyaW5nIHVybCA9IFNjcmVlblV0aWxpdGllcy5nZXRTdHJpbmdFeHRyYShub2RlLCBFWFRSQV9UQVJHRVRfVVJMKTsKKworICAgICAgICAgIGlmICgodXJsICE9IG51bGwpICYmICF1cmwuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICBsYWJlbC5hcHBlbmQoJyAnKS5hcHBlbmQodXJsKTsKKyAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gbGFiZWwudG9TdHJpbmcoKTsKKyAgICAgIH0KKyAgICB9CisgICksCisKKyAgbGlzdCgibHN0IiwKKyAgICBuZXcgTGFiZWxNYWtlcigpIHsKKyAgICAgIEBPdmVycmlkZQorICAgICAgcHVibGljIFN0cmluZyBtYWtlTGFiZWwgKENocm9tZVJvbGUgcm9sZSwgQWNjZXNzaWJpbGl0eU5vZGVJbmZvIG5vZGUpIHsKKyAgICAgICAgU3RyaW5nQnVpbGRlciBsYWJlbCA9IG5ldyBTdHJpbmdCdWlsZGVyKHJvbGUuZ2VuZXJpY0xhYmVsKTsKKworICAgICAgICBpZiAoQVBJVGVzdHMuaGF2ZUtpdGthdCkgeworICAgICAgICAgIEFjY2Vzc2liaWxpdHlOb2RlSW5mby5Db2xsZWN0aW9uSW5mbyBjb2xsZWN0aW9uID0gbm9kZS5nZXRDb2xsZWN0aW9uSW5mbygpOworCisgICAgICAgICAgaWYgKGNvbGxlY3Rpb24gIT0gbnVsbCkgeworICAgICAgICAgICAgaW50IGNvbHVtbnMgPSBjb2xsZWN0aW9uLmdldENvbHVtbkNvdW50KCk7CisgICAgICAgICAgICBpZiAoY29sdW1ucyA9PSAwKSBjb2x1bW5zID0gMTsKKworICAgICAgICAgICAgaW50IHJvd3MgPSBjb2xsZWN0aW9uLmdldFJvd0NvdW50KCk7CisgICAgICAgICAgICBpZiAocm93cyA9PSAwKSByb3dzID0gMTsKKworICAgICAgICAgICAgbGFiZWwuYXBwZW5kKCcgJykKKyAgICAgICAgICAgICAgICAgLmFwcGVuZChjb2x1bW5zKQorICAgICAgICAgICAgICAgICAuYXBwZW5kKCd4JykKKyAgICAgICAgICAgICAgICAgLmFwcGVuZChyb3dzKQorICAgICAgICAgICAgICAgICA7CisgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIGxhYmVsLnRvU3RyaW5nKCk7CisgICAgICB9CisgICAgfQorICApLAorCisgIGxpc3RJdGVtKCJsc2kiLAorICAgIG5ldyBMYWJlbE1ha2VyKCkgeworICAgICAgQE92ZXJyaWRlCisgICAgICBwdWJsaWMgU3RyaW5nIG1ha2VMYWJlbCAoQ2hyb21lUm9sZSByb2xlLCBBY2Nlc3NpYmlsaXR5Tm9kZUluZm8gbm9kZSkgeworICAgICAgICBTdHJpbmdCdWlsZGVyIGxhYmVsID0gbmV3IFN0cmluZ0J1aWxkZXIocm9sZS5nZW5lcmljTGFiZWwpOworCisgICAgICAgIGlmIChBUElUZXN0cy5oYXZlS2l0a2F0KSB7CisgICAgICAgICAgQWNjZXNzaWJpbGl0eU5vZGVJbmZvLkNvbGxlY3Rpb25JdGVtSW5mbyBpdGVtID0gbm9kZS5nZXRDb2xsZWN0aW9uSXRlbUluZm8oKTsKKworICAgICAgICAgIGlmIChpdGVtICE9IG51bGwpIHsKKyAgICAgICAgICAgIGxhYmVsLmFwcGVuZCgnICcpCisgICAgICAgICAgICAgICAgIC5hcHBlbmQoaXRlbS5nZXRDb2x1bW5JbmRleCgpICsgMSkKKyAgICAgICAgICAgICAgICAgLmFwcGVuZCgnQCcpCisgICAgICAgICAgICAgICAgIC5hcHBlbmQoaXRlbS5nZXRSb3dJbmRleCgpICsgMSkKKyAgICAgICAgICAgICAgICAgOworICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBsYWJlbC50b1N0cmluZygpOworICAgICAgfQorICAgIH0KKyAgKSwKKworICB0YWJsZSgidGJsIiwKKyAgICBuZXcgTGFiZWxNYWtlcigpIHsKKyAgICAgIEBPdmVycmlkZQorICAgICAgcHVibGljIFN0cmluZyBtYWtlTGFiZWwgKENocm9tZVJvbGUgcm9sZSwgQWNjZXNzaWJpbGl0eU5vZGVJbmZvIG5vZGUpIHsKKyAgICAgICAgcmV0dXJuIG1ha2VEaW1lbnNpb25zTGFiZWwocm9sZSwgbm9kZSk7CisgICAgICB9CisgICAgfQorICApLAorCisgIHRleHRGaWVsZCgidHh0IiwKKyAgICBuZXcgTGFiZWxNYWtlcigpIHsKKyAgICAgIEBPdmVycmlkZQorICAgICAgcHVibGljIFN0cmluZyBtYWtlTGFiZWwgKENocm9tZVJvbGUgcm9sZSwgQWNjZXNzaWJpbGl0eU5vZGVJbmZvIG5vZGUpIHsKKyAgICAgICAgaWYgKChub2RlLmdldEFjdGlvbnMoKSAmIEFjY2Vzc2liaWxpdHlOb2RlSW5mby5BQ1RJT05fRVhQQU5EKSA9PSAwKSByZXR1cm4gIiI7CisgICAgICAgIGlmIChub2RlLmlzUGFzc3dvcmQoKSkgcmV0dXJuICJwd2QiOworICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgIH0KKyAgICB9CisgICksCisKKyAgYW5jaG9yKCksCisgIGJ1dHRvbigiYnRuIiksCisgIGNhcHRpb24oImNhcCIpLAorICBjaGVja0JveCgpLAorICBmb3JtKCJmcm0iKSwKKyAgZ2VuZXJpY0NvbnRhaW5lcigiIiksCisgIGxpbmVCcmVhaygpLAorICBsaXN0TWFya2VyKCJsc20iKSwKKyAgcGFyYWdyYXBoKCksCisgIHBvcFVwQnV0dG9uKCJwb3AiKSwKKyAgcmFkaW9CdXR0b24oKSwKKyAgcm9vdFdlYkFyZWEoKSwKKyAgcm93KCJyb3ciKSwKKyAgc3BsaXR0ZXIoIi0tLS0tLS0tIiksCisgIHN0YXRpY1RleHQoKSwKKyAgOyAvLyBlbmQgb2YgZW51bWVyYXRpb24KKworICBwcml2YXRlIGZpbmFsIHN0YXRpYyBTdHJpbmcgTE9HX1RBRyA9IENocm9tZVJvbGUuY2xhc3MuZ2V0TmFtZSgpOworCisgIHB1YmxpYyBmaW5hbCBzdGF0aWMgU3RyaW5nIEVYVFJBX0NIUk9NRV9ST0xFID0gIkFjY2Vzc2liaWxpdHlOb2RlSW5mby5jaHJvbWVSb2xlIjsKKyAgcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgRVhUUkFfUk9MRV9ERVNDUklQVElPTiA9ICJBY2Nlc3NpYmlsaXR5Tm9kZUluZm8ucm9sZURlc2NyaXB0aW9uIjsKKyAgcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgRVhUUkFfSElOVCA9ICJBY2Nlc3NpYmlsaXR5Tm9kZUluZm8uaGludCI7CisgIHB1YmxpYyBmaW5hbCBzdGF0aWMgU3RyaW5nIEVYVFJBX1RBUkdFVF9VUkwgPSAiQWNjZXNzaWJpbGl0eU5vZGVJbmZvLnRhcmdldFVybCI7CisKKyAgcHJpdmF0ZSBpbnRlcmZhY2UgTGFiZWxNYWtlciB7CisgICAgcHVibGljIFN0cmluZyBtYWtlTGFiZWwgKENocm9tZVJvbGUgcm9sZSwgQWNjZXNzaWJpbGl0eU5vZGVJbmZvIG5vZGUpOworICB9CisKKyAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgZ2VuZXJpY0xhYmVsOworICBwcml2YXRlIGZpbmFsIExhYmVsTWFrZXIgbGFiZWxNYWtlcjsKKyAgcHJpdmF0ZSBmaW5hbCBNYXA8U3RyaW5nLCBTdHJpbmc+IGRlc2NyaXB0aW9uTGFiZWxzOworCisgIENocm9tZVJvbGUgKFN0cmluZyBnZW5lcmljLCBMYWJlbE1ha2VyIG1ha2VyLCBTdHJpbmcuLi4gZGVzY3JpcHRpb25zKSB7CisgICAgZ2VuZXJpY0xhYmVsID0gZ2VuZXJpYzsKKyAgICBsYWJlbE1ha2VyID0gbWFrZXI7CisKKyAgICB7CisgICAgICBpbnQgY291bnQgPSBkZXNjcmlwdGlvbnMubGVuZ3RoOworCisgICAgICBpZiAoY291bnQgPiAwKSB7CisgICAgICAgIGRlc2NyaXB0aW9uTGFiZWxzID0gbmV3IEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+KCk7CisgICAgICAgIGludCBpbmRleCA9IDA7CisKKyAgICAgICAgd2hpbGUgKGluZGV4IDwgY291bnQpIHsKKyAgICAgICAgICBTdHJpbmcgZGVzY3JpcHRpb24gPSBkZXNjcmlwdGlvbnNbaW5kZXgrK107CisgICAgICAgICAgU3RyaW5nIGxhYmVsID0gZGVzY3JpcHRpb25zW2luZGV4KytdOworICAgICAgICAgIGRlc2NyaXB0aW9uTGFiZWxzLnB1dChkZXNjcmlwdGlvbiwgbGFiZWwpOworICAgICAgICB9CisgICAgICB9IGVsc2UgeworICAgICAgICBkZXNjcmlwdGlvbkxhYmVscyA9IG51bGw7CisgICAgICB9CisgICAgfQorICB9CisKKyAgQ2hyb21lUm9sZSAoU3RyaW5nIGdlbmVyaWMsIFN0cmluZy4uLiBkZXNjcmlwdGlvbnMpIHsKKyAgICB0aGlzKGdlbmVyaWMsIG51bGwsIGRlc2NyaXB0aW9ucyk7CisgIH0KKworICBDaHJvbWVSb2xlICgpIHsKKyAgICB0aGlzKG51bGwpOworICB9CisKKyAgcHVibGljIHN0YXRpYyBTdHJpbmcgbWFrZUNvb3JkaW5hdGVzTGFiZWwgKENocm9tZVJvbGUgcm9sZSwgQWNjZXNzaWJpbGl0eU5vZGVJbmZvIG5vZGUpIHsKKyAgICBpZiAoQVBJVGVzdHMuaGF2ZUtpdGthdCkgeworICAgICAgQWNjZXNzaWJpbGl0eU5vZGVJbmZvLkNvbGxlY3Rpb25JdGVtSW5mbyBpdGVtID0gbm9kZS5nZXRDb2xsZWN0aW9uSXRlbUluZm8oKTsKKworICAgICAgaWYgKGl0ZW0gIT0gbnVsbCkgeworICAgICAgICBTdHJpbmdCdWlsZGVyIGxhYmVsID0gbmV3IFN0cmluZ0J1aWxkZXIocm9sZS5nZW5lcmljTGFiZWwpOworICAgICAgICBsYWJlbC5hcHBlbmQoJyAnKQorICAgICAgICAgICAgIC5hcHBlbmQoaXRlbS5nZXRDb2x1bW5JbmRleCgpICsgMSkKKyAgICAgICAgICAgICAuYXBwZW5kKCdAJykKKyAgICAgICAgICAgICAuYXBwZW5kKGl0ZW0uZ2V0Um93SW5kZXgoKSArIDEpCisgICAgICAgICAgICAgOworICAgICAgICByZXR1cm4gbGFiZWwudG9TdHJpbmcoKTsKKyAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gbnVsbDsKKyAgfQorCisgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIG1ha2VEaW1lbnNpb25zTGFiZWwgKENocm9tZVJvbGUgcm9sZSwgQWNjZXNzaWJpbGl0eU5vZGVJbmZvIG5vZGUpIHsKKyAgICBpZiAoQVBJVGVzdHMuaGF2ZUtpdGthdCkgeworICAgICAgQWNjZXNzaWJpbGl0eU5vZGVJbmZvLkNvbGxlY3Rpb25JbmZvIGNvbGxlY3Rpb24gPSBub2RlLmdldENvbGxlY3Rpb25JbmZvKCk7CisKKyAgICAgIGlmIChjb2xsZWN0aW9uICE9IG51bGwpIHsKKyAgICAgICAgU3RyaW5nQnVpbGRlciBsYWJlbCA9IG5ldyBTdHJpbmdCdWlsZGVyKHJvbGUuZ2VuZXJpY0xhYmVsKTsKKyAgICAgICAgbGFiZWwuYXBwZW5kKCcgJykKKyAgICAgICAgICAgICAuYXBwZW5kKGNvbGxlY3Rpb24uZ2V0Q29sdW1uQ291bnQoKSkKKyAgICAgICAgICAgICAuYXBwZW5kKCd4JykKKyAgICAgICAgICAgICAuYXBwZW5kKGNvbGxlY3Rpb24uZ2V0Um93Q291bnQoKSkKKyAgICAgICAgICAgICA7CisKKyAgICAgICAgcmV0dXJuIGxhYmVsLnRvU3RyaW5nKCk7CisgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIG51bGw7CisgIH0KKworICBwdWJsaWMgc3RhdGljIENocm9tZVJvbGUgZ2V0Q2hyb21lUm9sZSAoQWNjZXNzaWJpbGl0eU5vZGVJbmZvIG5vZGUpIHsKKyAgICBTdHJpbmcgbmFtZSA9IFNjcmVlblV0aWxpdGllcy5nZXRTdHJpbmdFeHRyYShub2RlLCBFWFRSQV9DSFJPTUVfUk9MRSk7CisgICAgaWYgKG5hbWUgPT0gbnVsbCkgcmV0dXJuIG51bGw7CisgICAgaWYgKG5hbWUuaXNFbXB0eSgpKSByZXR1cm4gbnVsbDsKKworICAgIHRyeSB7CisgICAgICByZXR1cm4gQ2hyb21lUm9sZS52YWx1ZU9mKG5hbWUpOworICAgIH0gY2F0Y2ggKElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiBleGNlcHRpb24pIHsKKyAgICAgIExvZy53KExPR19UQUcsICgidW5yZWNvZ25pemVkIENocm9tZSByb2xlOiAiICsgbmFtZSkpOworICAgIH0KKworICAgIHJldHVybiBudWxsOworICB9CisKKyAgcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0TGFiZWwgKEFjY2Vzc2liaWxpdHlOb2RlSW5mbyBub2RlKSB7CisgICAgaWYgKG5vZGUgPT0gbnVsbCkgcmV0dXJuIG51bGw7CisKKyAgICBDaHJvbWVSb2xlIHJvbGUgPSBnZXRDaHJvbWVSb2xlKG5vZGUpOworICAgIGlmIChyb2xlID09IG51bGwpIHJldHVybiBudWxsOworCisgICAgaWYgKHJvbGUubGFiZWxNYWtlciAhPSBudWxsKSB7CisgICAgICBTdHJpbmcgbGFiZWwgPSByb2xlLmxhYmVsTWFrZXIubWFrZUxhYmVsKHJvbGUsIG5vZGUpOworICAgICAgaWYgKGxhYmVsICE9IG51bGwpIHJldHVybiBsYWJlbDsKKyAgICB9CisKKyAgICBpZiAocm9sZS5kZXNjcmlwdGlvbkxhYmVscyAhPSBudWxsKSB7CisgICAgICBmaW5hbCBTdHJpbmcgZGVzY3JpcHRpb24gPSBTY3JlZW5VdGlsaXRpZXMuZ2V0U3RyaW5nRXh0cmEobm9kZSwgRVhUUkFfUk9MRV9ERVNDUklQVElPTik7CisKKyAgICAgIGlmIChkZXNjcmlwdGlvbiAhPSBudWxsKSB7CisgICAgICAgIFN0cmluZyBsYWJlbCA9IHJvbGUuZGVzY3JpcHRpb25MYWJlbHMuZ2V0KGRlc2NyaXB0aW9uKTsKKyAgICAgICAgaWYgKGxhYmVsICE9IG51bGwpIHJldHVybiBsYWJlbDsKKyAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gcm9sZS5nZW5lcmljTGFiZWw7CisgIH0KK30KZGlmZiAtLWdpdCBhL0FuZHJvaWQvR3JhZGxlL2FwcC9zcmMvbWFpbi9qYXZhL29yZy9hMTF5L2JybHR0eS9hbmRyb2lkL0NvcmVUaHJlYWQuamF2YSBiL0FuZHJvaWQvR3JhZGxlL2FwcC9zcmMvbWFpbi9qYXZhL29yZy9hMTF5L2JybHR0eS9hbmRyb2lkL0NvcmVUaHJlYWQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43OGIwMDFjCi0tLSAvZGV2L251bGwKKysrIGIvQW5kcm9pZC9HcmFkbGUvYXBwL3NyYy9tYWluL2phdmEvb3JnL2ExMXkvYnJsdHR5L2FuZHJvaWQvQ29yZVRocmVhZC5qYXZhCkBAIC0wLDAgKzEsMzQxIEBACisvKgorICogQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyAqICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyAqCisgKiBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorICoKKyAqIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyAqCisgKiBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisgKi8KKworcGFja2FnZSBvcmcuYTExeS5icmx0dHkuYW5kcm9pZDsKKworaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db250ZXh0OworaW1wb3J0IGFuZHJvaWQuY29udGVudC5TaGFyZWRQcmVmZXJlbmNlczsKK2ltcG9ydCBhbmRyb2lkLmNvbnRlbnQucmVzLkFzc2V0TWFuYWdlcjsKK2ltcG9ydCBhbmRyb2lkLm9zLkVudmlyb25tZW50OworaW1wb3J0IGFuZHJvaWQudXRpbC5Mb2c7CitpbXBvcnQgamF2YS5pby5GaWxlOworaW1wb3J0IGphdmEuaW8uRmlsZU91dHB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07CitpbXBvcnQgamF2YS5pby5PdXRwdXRTdHJlYW07CitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbnM7CitpbXBvcnQgamF2YS51dGlsLlNldDsKK2ltcG9ydCBvcmcuYTExeS5icmx0dHkuYW5kcm9pZC5zZXR0aW5ncy5EZXZpY2VEZXNjcmlwdG9yOworaW1wb3J0IG9yZy5hMTF5LmJybHR0eS5hbmRyb2lkLnNldHRpbmdzLkRldmljZU1hbmFnZXI7CitpbXBvcnQgb3JnLmExMXkuYnJsdHR5LmNvcmUuKjsKKworcHVibGljIGNsYXNzIENvcmVUaHJlYWQgZXh0ZW5kcyBUaHJlYWQgeworICBwcml2YXRlIGZpbmFsIHN0YXRpYyBTdHJpbmcgTE9HX1RBRyA9IENvcmVUaHJlYWQuY2xhc3MuZ2V0TmFtZSgpOworCisgIHByaXZhdGUgZmluYWwgQ29udGV4dCBjb3JlQ29udGV4dDsKKworICBwcml2YXRlIGZpbmFsIHZvaWQgZW1wdHlEaXJlY3RvcnkgKEZpbGUgZGlyZWN0b3J5KSB7CisgICAgaWYgKCFkaXJlY3RvcnkuY2FuV3JpdGUoKSkgeworICAgICAgZGlyZWN0b3J5LnNldFdyaXRhYmxlKHRydWUsIHRydWUpOworICAgIH0KKworICAgIGZvciAoRmlsZSBmaWxlIDogZGlyZWN0b3J5Lmxpc3RGaWxlcygpKSB7CisgICAgICBpZiAoZmlsZS5pc0RpcmVjdG9yeSgpKSB7CisgICAgICAgIGVtcHR5RGlyZWN0b3J5KGZpbGUpOworICAgICAgfQorCisgICAgICBmaWxlLmRlbGV0ZSgpOworICAgIH0KKyAgfQorCisgIHByaXZhdGUgZmluYWwgdm9pZCBleHRyYWN0QXNzZXQgKEFzc2V0TWFuYWdlciBhc3NldHMsIFN0cmluZyBhc3NldCwgRmlsZSBwYXRoKSB7CisgICAgdHJ5IHsKKyAgICAgIElucHV0U3RyZWFtIGlucHV0ID0gbnVsbDsKKyAgICAgIE91dHB1dFN0cmVhbSBvdXRwdXQgPSBudWxsOworCisgICAgICB0cnkgeworICAgICAgICBpbnB1dCA9IGFzc2V0cy5vcGVuKGFzc2V0KTsKKyAgICAgICAgb3V0cHV0ID0gbmV3IEZpbGVPdXRwdXRTdHJlYW0ocGF0aCk7CisKKyAgICAgICAgYnl0ZVtdIGJ1ZmZlciA9IG5ldyBieXRlWzBYNDAwMF07CisgICAgICAgIGludCBjb3VudDsKKworICAgICAgICB3aGlsZSAoKGNvdW50ID0gaW5wdXQucmVhZChidWZmZXIpKSA+IDApIHsKKyAgICAgICAgICBvdXRwdXQud3JpdGUoYnVmZmVyLCAwLCBjb3VudCk7CisgICAgICAgIH0KKyAgICAgIH0gZmluYWxseSB7CisgICAgICAgIGlmIChpbnB1dCAhPSBudWxsKSB7CisgICAgICAgICAgaW5wdXQuY2xvc2UoKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChvdXRwdXQgIT0gbnVsbCkgeworICAgICAgICAgIG91dHB1dC5jbG9zZSgpOworICAgICAgICB9CisgICAgICB9CisgICAgfSBjYXRjaCAoSU9FeGNlcHRpb24gZXhjZXB0aW9uKSB7CisgICAgICBMb2cuZShMT0dfVEFHLCAiY2Fubm90IGV4dHJhY3QgYXNzZXQ6ICIgKyBhc3NldCArICIgLT4gIiArIHBhdGgsIGV4Y2VwdGlvbik7CisgICAgfQorICB9CisKKyAgcHJpdmF0ZSBmaW5hbCB2b2lkIGV4dHJhY3RBc3NldHMgKEFzc2V0TWFuYWdlciBhc3NldHMsIFN0cmluZyBhc3NldCwgRmlsZSBwYXRoLCBib29sZWFuIGV4ZWN1dGFibGUpIHsKKyAgICB0cnkgeworICAgICAgU3RyaW5nW10gbmFtZXMgPSBhc3NldHMubGlzdChhc3NldCk7CisKKyAgICAgIGlmIChuYW1lcy5sZW5ndGggPT0gMCkgeworICAgICAgICBleHRyYWN0QXNzZXQoYXNzZXRzLCBhc3NldCwgcGF0aCk7CisKKyAgICAgICAgaWYgKGV4ZWN1dGFibGUpIHsKKyAgICAgICAgICBwYXRoLnNldEV4ZWN1dGFibGUodHJ1ZSwgZmFsc2UpOworICAgICAgICB9CisgICAgICB9IGVsc2UgeworICAgICAgICBpZiAoIXBhdGguZXhpc3RzKCkpIHsKKyAgICAgICAgICBwYXRoLm1rZGlyKCk7CisgICAgICAgIH0gZWxzZSBpZiAoIXBhdGguaXNEaXJlY3RvcnkoKSkgeworICAgICAgICAgIExvZy5kKExPR19UQUcsICJub3QgYSBkaXJlY3Rvcnk6ICIgKyBwYXRoKTsKKyAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBmb3IgKFN0cmluZyBuYW1lIDogbmFtZXMpIHsKKyAgICAgICAgICBleHRyYWN0QXNzZXRzKGFzc2V0cywgbmV3IEZpbGUoYXNzZXQsIG5hbWUpLmdldFBhdGgoKSwgbmV3IEZpbGUocGF0aCwgbmFtZSksIGV4ZWN1dGFibGUpOworICAgICAgICB9CisgICAgICB9CisKKyAgICAgIHBhdGguc2V0UmVhZE9ubHkoKTsKKyAgICB9IGNhdGNoIChJT0V4Y2VwdGlvbiBleGNlcHRpb24pIHsKKyAgICAgIExvZy5lKExPR19UQUcsICJjYW5ub3QgbGlzdCBhc3NldDogIiArIGFzc2V0LCBleGNlcHRpb24pOworICAgIH0KKyAgfQorCisgIHByaXZhdGUgZmluYWwgdm9pZCBleHRyYWN0QXNzZXRzIChBc3NldE1hbmFnZXIgYXNzZXRzLCBEYXRhVHlwZSB0eXBlLCBib29sZWFuIGV4ZWN1dGFibGUpIHsKKyAgICBGaWxlIGRpcmVjdG9yeSA9IHR5cGUuZ2V0RGlyZWN0b3J5KCk7CisgICAgZW1wdHlEaXJlY3RvcnkoZGlyZWN0b3J5KTsKKyAgICBleHRyYWN0QXNzZXRzKGFzc2V0cywgdHlwZS5nZXROYW1lKCksIGRpcmVjdG9yeSwgZXhlY3V0YWJsZSk7CisgIH0KKworICBwcml2YXRlIGZpbmFsIHZvaWQgZXh0cmFjdEFzc2V0cyAoKSB7CisgICAgTG9nLmQoTE9HX1RBRywgImV4dHJhY3RpbmcgYXNzZXRzIik7CisgICAgQXNzZXRNYW5hZ2VyIGFzc2V0cyA9IGNvcmVDb250ZXh0LmdldEFzc2V0cygpOworICAgIGV4dHJhY3RBc3NldHMoYXNzZXRzLCBEYXRhVHlwZS5MT0NBTEUsIGZhbHNlKTsKKyAgICBleHRyYWN0QXNzZXRzKGFzc2V0cywgRGF0YVR5cGUuVEFCTEVTLCBmYWxzZSk7CisgICAgTG9nLmQoTE9HX1RBRywgImFzc2V0cyBleHRyYWN0ZWQiKTsKKyAgfQorCisgIHByaXZhdGUgU3RyaW5nIGdldFN0cmluZ1Jlc291cmNlIChpbnQgcmVzb3VyY2UpIHsKKyAgICByZXR1cm4gY29yZUNvbnRleHQuZ2V0UmVzb3VyY2VzKCkuZ2V0U3RyaW5nKHJlc291cmNlKTsKKyAgfQorCisgIHByaXZhdGUgc3RhdGljIFNoYXJlZFByZWZlcmVuY2VzIGdldFByZWZlcmVuY2VzICgpIHsKKyAgICByZXR1cm4gRGF0YVR5cGUuZ2V0UHJlZmVyZW5jZXMoKTsKKyAgfQorCisgIHByaXZhdGUgYm9vbGVhbiBnZXRCb29sZWFuU2V0dGluZyAoaW50IGtleSwgYm9vbGVhbiBkZWZhdWx0VmFsdWUpIHsKKyAgICByZXR1cm4gZ2V0UHJlZmVyZW5jZXMoKS5nZXRCb29sZWFuKGdldFN0cmluZ1Jlc291cmNlKGtleSksIGRlZmF1bHRWYWx1ZSk7CisgIH0KKworICBwcml2YXRlIGJvb2xlYW4gZ2V0Qm9vbGVhblNldHRpbmcgKGludCBrZXkpIHsKKyAgICByZXR1cm4gZ2V0Qm9vbGVhblNldHRpbmcoa2V5LCBmYWxzZSk7CisgIH0KKworICBwcml2YXRlIFN0cmluZyBnZXRTdHJpbmdTZXR0aW5nIChpbnQga2V5LCBTdHJpbmcgZGVmYXVsdFZhbHVlKSB7CisgICAgcmV0dXJuIGdldFByZWZlcmVuY2VzKCkuZ2V0U3RyaW5nKGdldFN0cmluZ1Jlc291cmNlKGtleSksIGRlZmF1bHRWYWx1ZSk7CisgIH0KKworICBwcml2YXRlIFN0cmluZyBnZXRTdHJpbmdTZXR0aW5nIChpbnQga2V5LCBpbnQgZGVmYXVsdFZhbHVlKSB7CisgICAgcmV0dXJuIGdldFN0cmluZ1NldHRpbmcoa2V5LCBnZXRTdHJpbmdSZXNvdXJjZShkZWZhdWx0VmFsdWUpKTsKKyAgfQorCisgIHByaXZhdGUgU3RyaW5nIGdldFN0cmluZ1NldHRpbmcgKGludCBrZXkpIHsKKyAgICByZXR1cm4gZ2V0U3RyaW5nU2V0dGluZyhrZXksICIiKTsKKyAgfQorCisgIHByaXZhdGUgU2V0PFN0cmluZz4gZ2V0U3RyaW5nU2V0U2V0dGluZyAoaW50IGtleSkgeworICAgIHJldHVybiBnZXRQcmVmZXJlbmNlcygpLmdldFN0cmluZ1NldChnZXRTdHJpbmdSZXNvdXJjZShrZXkpLCBDb2xsZWN0aW9ucy5FTVBUWV9TRVQpOworICB9CisKKyAgcHJpdmF0ZSBmaW5hbCB2b2lkIHVwZGF0ZURhdGFGaWxlcyAoKSB7CisgICAgU2hhcmVkUHJlZmVyZW5jZXMgcHJlZnMgPSBnZXRQcmVmZXJlbmNlcygpOworICAgIEZpbGUgZmlsZSA9IG5ldyBGaWxlKGNvcmVDb250ZXh0LmdldFBhY2thZ2VDb2RlUGF0aCgpKTsKKworICAgIFN0cmluZyBwcmVmS2V5X3NpemUgPSBnZXRTdHJpbmdSZXNvdXJjZShSLnN0cmluZy5QUkVGX0tFWV9QQUNLQUdFX1NJWkUpOworICAgIGxvbmcgb2xkU2l6ZSA9IHByZWZzLmdldExvbmcocHJlZktleV9zaXplLCAtMSk7CisgICAgbG9uZyBuZXdTaXplID0gZmlsZS5sZW5ndGgoKTsKKworICAgIFN0cmluZyBwcmVmS2V5X3RpbWUgPSBnZXRTdHJpbmdSZXNvdXJjZShSLnN0cmluZy5QUkVGX0tFWV9QQUNLQUdFX1RJTUUpOworICAgIGxvbmcgb2xkVGltZSA9IHByZWZzLmdldExvbmcocHJlZktleV90aW1lLCAtMSk7CisgICAgbG9uZyBuZXdUaW1lID0gZmlsZS5sYXN0TW9kaWZpZWQoKTsKKworICAgIGlmICgobmV3U2l6ZSAhPSBvbGRTaXplKSB8fCAobmV3VGltZSAhPSBvbGRUaW1lKSkgeworICAgICAgTG9nLmQoTE9HX1RBRywgInBhY2thZ2Ugc2l6ZTogIiArIG9sZFNpemUgKyAiIC0+ICIgKyBuZXdTaXplKTsKKyAgICAgIExvZy5kKExPR19UQUcsICJwYWNrYWdlIHRpbWU6ICIgKyBvbGRUaW1lICsgIiAtPiAiICsgbmV3VGltZSk7CisgICAgICBleHRyYWN0QXNzZXRzKCk7CisKKyAgICAgIHsKKyAgICAgICAgU2hhcmVkUHJlZmVyZW5jZXMuRWRpdG9yIGVkaXRvciA9IHByZWZzLmVkaXQoKTsKKyAgICAgICAgZWRpdG9yLnB1dExvbmcocHJlZktleV9zaXplLCBuZXdTaXplKTsKKyAgICAgICAgZWRpdG9yLnB1dExvbmcocHJlZktleV90aW1lLCBuZXdUaW1lKTsKKyAgICAgICAgZWRpdG9yLmFwcGx5KCk7CisgICAgICB9CisgICAgfQorICB9CisKKyAgcHJpdmF0ZSBzdGF0aWMgRmlsZSBnZXRTdGF0ZUZpbGUgKEZpbGUgZGlyZWN0b3J5LCBTdHJpbmcgZXh0ZW5zaW9uKSB7CisgICAgU3RyaW5nIG5ld05hbWUgPSAiYnJsdHR5LiIgKyBleHRlbnNpb247CisgICAgRmlsZSBuZXdGaWxlID0gbmV3IEZpbGUoZGlyZWN0b3J5LCBuZXdOYW1lKTsKKworICAgIGlmICghbmV3RmlsZS5leGlzdHMoKSkgeworICAgICAgU3RyaW5nIG9sZE5hbWUgPSAiZGVmYXVsdC4iICsgZXh0ZW5zaW9uOworICAgICAgRmlsZSBvbGRGaWxlID0gbmV3IEZpbGUoZGlyZWN0b3J5LCBvbGROYW1lKTsKKworICAgICAgaWYgKG9sZEZpbGUuZXhpc3RzKCkpIHsKKyAgICAgICAgaWYgKG9sZEZpbGUucmVuYW1lVG8obmV3RmlsZSkpIHsKKyAgICAgICAgICBMb2cuZChMT0dfVEFHLAorICAgICAgICAgICAgU3RyaW5nLmZvcm1hdCgKKyAgICAgICAgICAgICAgIlwiJXNcIiByZW5hbWVkIHRvIFwiJXNcIiIsCisgICAgICAgICAgICAgIG9sZE5hbWUsIG5ld05hbWUKKyAgICAgICAgICAgICkKKyAgICAgICAgICApOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgIExvZy53KExPR19UQUcsCisgICAgICAgICAgICBTdHJpbmcuZm9ybWF0KAorICAgICAgICAgICAgICAiY291bGRuJ3QgcmVuYW1lIFwiJXNcIiB0byBcIiVzXCIiLAorICAgICAgICAgICAgICBvbGROYW1lLCBuZXdOYW1lCisgICAgICAgICAgICApCisgICAgICAgICAgKTsKKyAgICAgICAgfQorICAgICAgfSBlbHNlIHsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICBpZiAoIW5ld0ZpbGUuY3JlYXRlTmV3RmlsZSgpKSB7CisgICAgICAgICAgICBMb2cudyhMT0dfVEFHLAorICAgICAgICAgICAgICBTdHJpbmcuZm9ybWF0KAorICAgICAgICAgICAgICAgICJjb3VsZG4ndCBjcmVhdGUgXCIlc1wiIiwgbmV3TmFtZQorICAgICAgICAgICAgICApCisgICAgICAgICAgICApOworICAgICAgICAgIH0KKyAgICAgICAgfSBjYXRjaCAoSU9FeGNlcHRpb24gZXhjZXB0aW9uKSB7CisgICAgICAgICAgTG9nLncoTE9HX1RBRywKKyAgICAgICAgICAgIFN0cmluZy5mb3JtYXQoCisgICAgICAgICAgICAgICJmaWxlIGNyZWF0aW9uIGVycm9yOiAlczogJXMiLAorICAgICAgICAgICAgICBuZXdOYW1lLCBleGNlcHRpb24uZ2V0TWVzc2FnZSgpCisgICAgICAgICAgICApCisgICAgICAgICAgKTsKKyAgICAgICAgfQorICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBuZXdGaWxlOworICB9CisKKyAgcHJpdmF0ZSBTdHJpbmdbXSBtYWtlQXJndW1lbnRzICgpIHsKKyAgICBBcmd1bWVudHNCdWlsZGVyIGJ1aWxkZXIgPSBuZXcgQXJndW1lbnRzQnVpbGRlcigpOworCisgICAgYnVpbGRlci5zZXRGb3JlZ3JvdW5kRXhlY3V0aW9uKHRydWUpOworICAgIGJ1aWxkZXIuc2V0UmVsZWFzZURldmljZSh0cnVlKTsKKworICAgIGJ1aWxkZXIuc2V0TG9jYWxlRGlyZWN0b3J5KERhdGFUeXBlLkxPQ0FMRS5nZXREaXJlY3RvcnkoKSk7CisgICAgYnVpbGRlci5zZXRUYWJsZXNEaXJlY3RvcnkoRGF0YVR5cGUuVEFCTEVTLmdldERpcmVjdG9yeSgpKTsKKyAgICBidWlsZGVyLnNldFdyaXRhYmxlRGlyZWN0b3J5KERhdGFUeXBlLldSSVRBQkxFLmdldERpcmVjdG9yeSgpKTsKKworICAgIHsKKyAgICAgIEZpbGUgZGlyZWN0b3J5ID0gRGF0YVR5cGUuU1RBVEUuZ2V0RGlyZWN0b3J5KCk7CisgICAgICBidWlsZGVyLnNldFVwZGF0YWJsZURpcmVjdG9yeShkaXJlY3RvcnkpOworCisgICAgICBidWlsZGVyLnNldENvbmZpZ3VyYXRpb25GaWxlKGdldFN0YXRlRmlsZShkaXJlY3RvcnksICJjb25mIikpOworICAgICAgYnVpbGRlci5zZXRQcmVmZXJlbmNlc0ZpbGUoZ2V0U3RhdGVGaWxlKGRpcmVjdG9yeSwgInByZWZzIikpOworICAgIH0KKworICAgIGJ1aWxkZXIuc2V0VGV4dFRhYmxlKGdldFN0cmluZ1NldHRpbmcoUi5zdHJpbmcuUFJFRl9LRVlfVEVYVF9UQUJMRSwgUi5zdHJpbmcuREVGQVVMVF9URVhUX1RBQkxFKSk7CisgICAgYnVpbGRlci5zZXRBdHRyaWJ1dGVzVGFibGUoZ2V0U3RyaW5nU2V0dGluZyhSLnN0cmluZy5QUkVGX0tFWV9BVFRSSUJVVEVTX1RBQkxFLCBSLnN0cmluZy5ERUZBVUxUX0FUVFJJQlVURVNfVEFCTEUpKTsKKyAgICBidWlsZGVyLnNldENvbnRyYWN0aW9uVGFibGUoZ2V0U3RyaW5nU2V0dGluZyhSLnN0cmluZy5QUkVGX0tFWV9DT05UUkFDVElPTl9UQUJMRSwgUi5zdHJpbmcuREVGQVVMVF9DT05UUkFDVElPTl9UQUJMRSkpOworICAgIGJ1aWxkZXIuc2V0S2V5Ym9hcmRUYWJsZShnZXRTdHJpbmdTZXR0aW5nKFIuc3RyaW5nLlBSRUZfS0VZX0tFWUJPQVJEX1RBQkxFLCBSLnN0cmluZy5ERUZBVUxUX0tFWUJPQVJEX1RBQkxFKSk7CisKKyAgICB7CisgICAgICBEZXZpY2VEZXNjcmlwdG9yIGRlc2NyaXB0b3IgPSBEZXZpY2VNYW5hZ2VyLmdldERldmljZURlc2NyaXB0b3IoKTsKKyAgICAgIGJ1aWxkZXIuc2V0QnJhaWxsZURldmljZShkZXNjcmlwdG9yLmdldElkZW50aWZpZXIoKSk7CisgICAgICBidWlsZGVyLnNldEJyYWlsbGVEcml2ZXIoZGVzY3JpcHRvci5nZXREcml2ZXIoKSk7CisgICAgfQorCisgICAgYnVpbGRlci5zZXRTcGVlY2hEcml2ZXIoZ2V0U3RyaW5nU2V0dGluZyhSLnN0cmluZy5QUkVGX0tFWV9TUEVFQ0hfU1VQUE9SVCwgUi5zdHJpbmcuREVGQVVMVF9TUEVFQ0hfU1VQUE9SVCkpOworICAgIGJ1aWxkZXIuc2V0UXVpZXRJZk5vQnJhaWxsZSh0cnVlKTsKKworICAgIGJ1aWxkZXIuc2V0QXBpRW5hYmxlZCh0cnVlKTsKKyAgICBidWlsZGVyLnNldEFwaVBhcmFtZXRlcnMoImhvc3Q9MTI3LjAuMC4xOjAsYXV0aD1ub25lIik7CisKKyAgICB7CisgICAgICBBcnJheUxpc3Q8U3RyaW5nPiBrZXl3b3JkcyA9IG5ldyBBcnJheUxpc3Q8U3RyaW5nPigpOworICAgICAga2V5d29yZHMuYWRkKGdldFN0cmluZ1NldHRpbmcoUi5zdHJpbmcuUFJFRl9LRVlfTE9HX0xFVkVMLCBSLnN0cmluZy5ERUZBVUxUX0xPR19MRVZFTCkpOworICAgICAga2V5d29yZHMuYWRkQWxsKGdldFN0cmluZ1NldFNldHRpbmcoUi5zdHJpbmcuUFJFRl9LRVlfTE9HX0NBVEVHT1JJRVMpKTsKKyAgICAgIFN0cmluZ0J1aWxkZXIgb3BlcmFuZCA9IG5ldyBTdHJpbmdCdWlsZGVyKCk7CisKKyAgICAgIGZvciAoU3RyaW5nIGtleXdvcmQgOiBrZXl3b3JkcykgeworICAgICAgICBpZiAoa2V5d29yZC5sZW5ndGgoKSA+IDApIHsKKyAgICAgICAgICBpZiAob3BlcmFuZC5sZW5ndGgoKSA+IDApIG9wZXJhbmQuYXBwZW5kKCcsJyk7CisgICAgICAgICAgb3BlcmFuZC5hcHBlbmQoa2V5d29yZCk7CisgICAgICAgIH0KKyAgICAgIH0KKworICAgICAgYnVpbGRlci5zZXRMb2dMZXZlbChvcGVyYW5kLnRvU3RyaW5nKCkpOworICAgIH0KKworICAgIHJldHVybiBidWlsZGVyLmdldEFyZ3VtZW50cygpOworICB9CisKKyAgQE92ZXJyaWRlCisgIHB1YmxpYyB2b2lkIHJ1biAoKSB7CisgICAgdXBkYXRlRGF0YUZpbGVzKCk7CisKKyAgICB7CisgICAgICBVc2JIZWxwZXIuYmVnaW4oKTsKKworICAgICAgdHJ5IHsKKyAgICAgICAgQ29yZVdyYXBwZXIucnVuKG1ha2VBcmd1bWVudHMoKSwgQXBwbGljYXRpb25QYXJhbWV0ZXJzLkNPUkVfV0FJVF9EVVJBVElPTik7CisgICAgICB9IGZpbmFsbHkgeworICAgICAgICBVc2JIZWxwZXIuZW5kKCk7CisgICAgICB9CisgICAgfQorICB9CisKKyAgcHJpdmF0ZSBmaW5hbCB2b2lkIHJlc3RvcmVTZXR0aW5ncyAoKSB7CisgICAgQnJhaWxsZVJlbmRlcmVyLnNldEJyYWlsbGVSZW5kZXJlcihnZXRTdHJpbmdTZXR0aW5nKFIuc3RyaW5nLlBSRUZfS0VZX05BVklHQVRJT05fTU9ERSwgUi5zdHJpbmcuREVGQVVMVF9OQVZJR0FUSU9OX01PREUpKTsKKworICAgIEFwcGxpY2F0aW9uU2V0dGluZ3MuUkVMRUFTRV9CUkFJTExFX0RFVklDRSA9IGdldEJvb2xlYW5TZXR0aW5nKFIuc3RyaW5nLlBSRUZfS0VZX1JFTEVBU0VfQlJBSUxMRV9ERVZJQ0UpOworCisgICAgQXBwbGljYXRpb25TZXR0aW5ncy5TSE9XX05PVElGSUNBVElPTlMgPSBnZXRCb29sZWFuU2V0dGluZyhSLnN0cmluZy5QUkVGX0tFWV9TSE9XX05PVElGSUNBVElPTlMpOworICAgIEFwcGxpY2F0aW9uU2V0dGluZ3MuU0hPV19BTEVSVFMgPSBnZXRCb29sZWFuU2V0dGluZyhSLnN0cmluZy5QUkVGX0tFWV9TSE9XX0FMRVJUUyk7CisgICAgQXBwbGljYXRpb25TZXR0aW5ncy5TSE9XX0FOTk9VTkNFTUVOVFMgPSBnZXRCb29sZWFuU2V0dGluZyhSLnN0cmluZy5QUkVGX0tFWV9TSE9XX0FOTk9VTkNFTUVOVFMpOworCisgICAgQXBwbGljYXRpb25TZXR0aW5ncy5MT0dfQUNDRVNTSUJJTElUWV9FVkVOVFMgPSBnZXRCb29sZWFuU2V0dGluZyhSLnN0cmluZy5QUkVGX0tFWV9MT0dfQUNDRVNTSUJJTElUWV9FVkVOVFMpOworICAgIEFwcGxpY2F0aW9uU2V0dGluZ3MuTE9HX1JFTkRFUkVEX1NDUkVFTiA9IGdldEJvb2xlYW5TZXR0aW5nKFIuc3RyaW5nLlBSRUZfS0VZX0xPR19SRU5ERVJFRF9TQ1JFRU4pOworICAgIEFwcGxpY2F0aW9uU2V0dGluZ3MuTE9HX0tFWUJPQVJEX0VWRU5UUyA9IGdldEJvb2xlYW5TZXR0aW5nKFIuc3RyaW5nLlBSRUZfS0VZX0xPR19LRVlCT0FSRF9FVkVOVFMpOworICAgIEFwcGxpY2F0aW9uU2V0dGluZ3MuTE9HX1VOSEFORExFRF9FVkVOVFMgPSBnZXRCb29sZWFuU2V0dGluZyhSLnN0cmluZy5QUkVGX0tFWV9MT0dfVU5IQU5ETEVEX0VWRU5UUyk7CisgIH0KKworICBwcml2YXRlIGZpbmFsIHZvaWQgc2V0T3ZlcnJpZGVEaXJlY3RvcmllcyAoKSB7CisgICAgU3RyaW5nQnVpbGRlciBwYXRocyA9IG5ldyBTdHJpbmdCdWlsZGVyKCk7CisKKyAgICBGaWxlW10gZGlyZWN0b3JpZXMgPSBuZXcgRmlsZVtdIHsKKyAgICAgIEVudmlyb25tZW50LmdldEV4dGVybmFsU3RvcmFnZURpcmVjdG9yeSgpCisgICAgfTsKKworICAgIGZvciAoRmlsZSBkaXJlY3RvcnkgOiBkaXJlY3RvcmllcykgeworICAgICAgU3RyaW5nIHBhdGggPSBkaXJlY3RvcnkuZ2V0QWJzb2x1dGVQYXRoKCk7CisgICAgICBpZiAocGF0aHMubGVuZ3RoKCkgPiAwKSBwYXRocy5hcHBlbmQoJzonKTsKKyAgICAgIHBhdGhzLmFwcGVuZChwYXRoKTsKKyAgICB9CisKKyAgICBDb3JlV3JhcHBlci5zZXRFbnZpcm9ubWVudFZhcmlhYmxlKCJYREdfQ09ORklHX0RJUlMiLCBwYXRocy50b1N0cmluZygpKTsKKyAgfQorCisgIHB1YmxpYyBDb3JlVGhyZWFkIChDb250ZXh0IGNvbnRleHQpIHsKKyAgICBzdXBlcigiQ29yZSIpOworICAgIGNvcmVDb250ZXh0ID0gY29udGV4dDsKKworICAgIHJlc3RvcmVTZXR0aW5ncygpOworICAgIHNldE92ZXJyaWRlRGlyZWN0b3JpZXMoKTsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvQW5kcm9pZC9HcmFkbGUvYXBwL3NyYy9tYWluL2phdmEvb3JnL2ExMXkvYnJsdHR5L2FuZHJvaWQvRGF0YVR5cGUuamF2YSBiL0FuZHJvaWQvR3JhZGxlL2FwcC9zcmMvbWFpbi9qYXZhL29yZy9hMTF5L2JybHR0eS9hbmRyb2lkL0RhdGFUeXBlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWU1ZjgzOQotLS0gL2Rldi9udWxsCisrKyBiL0FuZHJvaWQvR3JhZGxlL2FwcC9zcmMvbWFpbi9qYXZhL29yZy9hMTF5L2JybHR0eS9hbmRyb2lkL0RhdGFUeXBlLmphdmEKQEAgLTAsMCArMSw2MSBAQAorcGFja2FnZSBvcmcuYTExeS5icmx0dHkuYW5kcm9pZDsKKworaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db250ZXh0OworaW1wb3J0IGFuZHJvaWQuY29udGVudC5TaGFyZWRQcmVmZXJlbmNlczsKK2ltcG9ydCBhbmRyb2lkLnByZWZlcmVuY2UuUHJlZmVyZW5jZU1hbmFnZXI7CitpbXBvcnQgamF2YS5pby5GaWxlOworaW1wb3J0IGphdmEudXRpbC5Mb2NhbGU7CisKK3B1YmxpYyBlbnVtIERhdGFUeXBlIHsKKyAgTE9DQUxFLAorICBUQUJMRVMsCisgIFNUQVRFLAorICBXUklUQUJMRSwKKyAgOworCisgIHByaXZhdGUgZmluYWwgU3RyaW5nIHR5cGVOYW1lOworCisgIERhdGFUeXBlICgpIHsKKyAgICB0eXBlTmFtZSA9IG5hbWUoKS50b0xvd2VyQ2FzZShMb2NhbGUuUk9PVCk7CisgIH0KKworICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldE5hbWUgKCkgeworICAgIHJldHVybiB0eXBlTmFtZTsKKyAgfQorCisgIHByaXZhdGUgZmluYWwgc3RhdGljIE9iamVjdCBEQVRBX0NPTlRFWFRfTE9DSyA9IG5ldyBPYmplY3QoKTsKKyAgcHJpdmF0ZSBzdGF0aWMgQ29udGV4dCBkYXRhQ29udGV4dCA9IG51bGw7CisKKyAgcHVibGljIHN0YXRpYyBDb250ZXh0IGdldENvbnRleHQgKCkgeworICAgIHN5bmNocm9uaXplZCAoREFUQV9DT05URVhUX0xPQ0spIHsKKyAgICAgIGlmIChkYXRhQ29udGV4dCA9PSBudWxsKSB7CisgICAgICAgIENvbnRleHQgY29udGV4dCA9IEJyYWlsbGVBcHBsaWNhdGlvbi5nZXQoKTsKKworICAgICAgICBpZiAoQVBJVGVzdHMuaGF2ZU5vdWdhdCkgeworICAgICAgICAgIGRhdGFDb250ZXh0ID0gY29udGV4dC5jcmVhdGVEZXZpY2VQcm90ZWN0ZWRTdG9yYWdlQ29udGV4dCgpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgIGRhdGFDb250ZXh0ID0gY29udGV4dDsKKyAgICAgICAgfQorICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBkYXRhQ29udGV4dDsKKyAgfQorCisgIHB1YmxpYyBzdGF0aWMgU2hhcmVkUHJlZmVyZW5jZXMgZ2V0UHJlZmVyZW5jZXMgKCkgeworICAgIHJldHVybiBQcmVmZXJlbmNlTWFuYWdlci5nZXREZWZhdWx0U2hhcmVkUHJlZmVyZW5jZXMoZ2V0Q29udGV4dCgpKTsKKyAgfQorCisgIHByaXZhdGUgZmluYWwgc3RhdGljIEludGVnZXIgRElSRUNUT1JZX01PREUgPSBDb250ZXh0Lk1PREVfUFJJVkFURTsKKyAgcHJpdmF0ZSBGaWxlIGRpcmVjdG9yeU9iamVjdDsKKworICBwdWJsaWMgZmluYWwgRmlsZSBnZXREaXJlY3RvcnkgKCkgeworICAgIHN5bmNocm9uaXplZCAoRElSRUNUT1JZX01PREUpIHsKKyAgICAgIGlmIChkaXJlY3RvcnlPYmplY3QgPT0gbnVsbCkgeworICAgICAgICBkaXJlY3RvcnlPYmplY3QgPSBnZXRDb250ZXh0KCkuZ2V0RGlyKHR5cGVOYW1lLCBESVJFQ1RPUllfTU9ERSk7CisgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIGRpcmVjdG9yeU9iamVjdDsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvQW5kcm9pZC9HcmFkbGUvYXBwL3NyYy9tYWluL2phdmEvb3JnL2ExMXkvYnJsdHR5L2FuZHJvaWQvRGVmZXJyZWRUYXNrLmphdmEgYi9BbmRyb2lkL0dyYWRsZS9hcHAvc3JjL21haW4vamF2YS9vcmcvYTExeS9icmx0dHkvYW5kcm9pZC9EZWZlcnJlZFRhc2suamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZDMxZGY4Ci0tLSAvZGV2L251bGwKKysrIGIvQW5kcm9pZC9HcmFkbGUvYXBwL3NyYy9tYWluL2phdmEvb3JnL2ExMXkvYnJsdHR5L2FuZHJvaWQvRGVmZXJyZWRUYXNrLmphdmEKQEAgLTAsMCArMSw3NyBAQAorLyoKKyAqIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisgKiAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisgKgorICogQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKK3BhY2thZ2Ugb3JnLmExMXkuYnJsdHR5LmFuZHJvaWQ7CisKK3B1YmxpYyBhYnN0cmFjdCBjbGFzcyBEZWZlcnJlZFRhc2sgaW1wbGVtZW50cyBSdW5uYWJsZSB7CisgIHByb3RlY3RlZCBhYnN0cmFjdCB2b2lkIHJ1blRhc2sgKCk7CisKKyAgcHJvdGVjdGVkIGJvb2xlYW4gaXNTdGFydGFibGUgKCkgeworICAgIHJldHVybiB0cnVlOworICB9CisKKyAgcHJvdGVjdGVkIHZvaWQgcmVsZWFzZVJlc291cmNlcyAoKSB7CisgIH0KKworICBwcml2YXRlIGZpbmFsIGxvbmcgdGFza0RlbGF5OworICBwcml2YXRlIGJvb2xlYW4gaXNTY2hlZHVsZWQgPSBmYWxzZTsKKworICBwcm90ZWN0ZWQgRGVmZXJyZWRUYXNrIChsb25nIGRlbGF5KSB7CisgICAgdGFza0RlbGF5ID0gZGVsYXk7CisgIH0KKworICBwcml2YXRlIGZpbmFsIHZvaWQgc2NoZWR1bGVUYXNrICgpIHsKKyAgICBzeW5jaHJvbml6ZWQgKHRoaXMpIHsKKyAgICAgIGlmICghaXNTY2hlZHVsZWQpIHsKKyAgICAgICAgQnJhaWxsZUFwcGxpY2F0aW9uLnBvc3RJbih0YXNrRGVsYXksIHRoaXMpOworICAgICAgICBpc1NjaGVkdWxlZCA9IHRydWU7CisgICAgICB9CisgICAgfQorICB9CisKKyAgcHJpdmF0ZSBmaW5hbCB2b2lkIGNhbmNlbFRhc2sgKCkgeworICAgIHN5bmNocm9uaXplZCAodGhpcykgeworICAgICAgaWYgKGlzU2NoZWR1bGVkKSB7CisgICAgICAgIEJyYWlsbGVBcHBsaWNhdGlvbi51bnBvc3QodGhpcyk7CisgICAgICAgIGlzU2NoZWR1bGVkID0gZmFsc2U7CisgICAgICB9CisgICAgfQorICB9CisKKyAgcHVibGljIGZpbmFsIHZvaWQgcmVzdGFydCAoKSB7CisgICAgc3luY2hyb25pemVkICh0aGlzKSB7CisgICAgICBjYW5jZWxUYXNrKCk7CisgICAgICBpZiAoaXNTdGFydGFibGUoKSkgc2NoZWR1bGVUYXNrKCk7CisgICAgfQorICB9CisKKyAgcHVibGljIGZpbmFsIHZvaWQgc3RvcCAoKSB7CisgICAgc3luY2hyb25pemVkICh0aGlzKSB7CisgICAgICBjYW5jZWxUYXNrKCk7CisgICAgICByZWxlYXNlUmVzb3VyY2VzKCk7CisgICAgfQorICB9CisKKyAgQE92ZXJyaWRlCisgIHB1YmxpYyBmaW5hbCB2b2lkIHJ1biAoKSB7CisgICAgc3luY2hyb25pemVkICh0aGlzKSB7CisgICAgICBpZiAoaXNTY2hlZHVsZWQpIHJ1blRhc2soKTsKKyAgICAgIHN0b3AoKTsKKyAgICB9CisgIH0KK30KZGlmZiAtLWdpdCBhL0FuZHJvaWQvR3JhZGxlL2FwcC9zcmMvbWFpbi9qYXZhL29yZy9hMTF5L2JybHR0eS9hbmRyb2lkL0dyaWRCcmFpbGxlUmVuZGVyZXIuamF2YSBiL0FuZHJvaWQvR3JhZGxlL2FwcC9zcmMvbWFpbi9qYXZhL29yZy9hMTF5L2JybHR0eS9hbmRyb2lkL0dyaWRCcmFpbGxlUmVuZGVyZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMDllZjJjCi0tLSAvZGV2L251bGwKKysrIGIvQW5kcm9pZC9HcmFkbGUvYXBwL3NyYy9tYWluL2phdmEvb3JnL2ExMXkvYnJsdHR5L2FuZHJvaWQvR3JpZEJyYWlsbGVSZW5kZXJlci5qYXZhCkBAIC0wLDAgKzEsNDM4IEBACisvKgorICogQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyAqICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyAqCisgKiBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorICoKKyAqIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyAqCisgKiBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisgKi8KKworcGFja2FnZSBvcmcuYTExeS5icmx0dHkuYW5kcm9pZDsKKworaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuUG9pbnQ7CitpbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5SZWN0OworaW1wb3J0IGFuZHJvaWQudmlldy5hY2Nlc3NpYmlsaXR5LkFjY2Vzc2liaWxpdHlOb2RlSW5mbzsKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uczsKK2ltcG9ydCBqYXZhLnV0aWwuQ29tcGFyYXRvcjsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdEl0ZXJhdG9yOworCitwdWJsaWMgY2xhc3MgR3JpZEJyYWlsbGVSZW5kZXJlciBleHRlbmRzIEJyYWlsbGVSZW5kZXJlciB7CisgIHB1YmxpYyBjbGFzcyBHcmlkIHsKKyAgICBwcm90ZWN0ZWQgYWJzdHJhY3QgY2xhc3MgQ29vcmRpbmF0ZSBpbXBsZW1lbnRzIENvbXBhcmF0b3I8Q2VsbD4geworICAgICAgcHJpdmF0ZSBmaW5hbCBpbnQgY29vcmRpbmF0ZVZhbHVlOworCisgICAgICBwcml2YXRlIGZpbmFsIExpc3Q8Q2VsbD4gY2VsbHMgPSBuZXcgQXJyYXlMaXN0PENlbGw+KCk7CisKKyAgICAgIHByaXZhdGUgaW50IGJyYWlsbGVPZmZzZXQgPSAwOworCisgICAgICBwdWJsaWMgYWJzdHJhY3QgaW50IGNvbXBhcmUgKENlbGwgY2VsbDEsIENlbGwgY2VsbDIpOworICAgICAgcHJvdGVjdGVkIGFic3RyYWN0IHZvaWQgc2V0UHJldmlvdXNDZWxsIChDZWxsIGNlbGwsIENlbGwgcHJldmlvdXMpOworICAgICAgcHJvdGVjdGVkIGFic3RyYWN0IHZvaWQgc2V0TmV4dENlbGwgKENlbGwgY2VsbCwgQ2VsbCBOZXh0KTsKKyAgICAgIHByb3RlY3RlZCBhYnN0cmFjdCBDZWxsIGdldEFkamFjZW50Q2VsbCAoQ2VsbCBjZWxsKTsKKyAgICAgIHByb3RlY3RlZCBhYnN0cmFjdCBDb29yZGluYXRlIGdldENvb3JkaW5hdGUgKENlbGwgY2VsbCk7CisgICAgICBwcm90ZWN0ZWQgYWJzdHJhY3QgaW50IGdldFNpemUgKENlbGwgY2VsbCk7CisgICAgICBwcm90ZWN0ZWQgYWJzdHJhY3QgaW50IGdldFNwYWNpbmcgKCk7CisKKyAgICAgIHB1YmxpYyBmaW5hbCBpbnQgZ2V0VmFsdWUgKCkgeworICAgICAgICByZXR1cm4gY29vcmRpbmF0ZVZhbHVlOworICAgICAgfQorCisgICAgICBwdWJsaWMgTGlzdDxDZWxsPiBnZXRDZWxscyAoKSB7CisgICAgICAgIHJldHVybiBjZWxsczsKKyAgICAgIH0KKworICAgICAgcHVibGljIGludCBnZXRCcmFpbGxlT2Zmc2V0ICgpIHsKKyAgICAgICAgcmV0dXJuIGJyYWlsbGVPZmZzZXQ7CisgICAgICB9CisKKyAgICAgIHB1YmxpYyB2b2lkIHNldEJyYWlsbGVPZmZzZXQgKGludCBvZmZzZXQpIHsKKyAgICAgICAgaWYgKG9mZnNldCA+IGJyYWlsbGVPZmZzZXQpIGJyYWlsbGVPZmZzZXQgPSBvZmZzZXQ7CisgICAgICB9CisKKyAgICAgIHB1YmxpYyB2b2lkIGFkZENlbGwgKENlbGwgY2VsbCkgeworICAgICAgICBjZWxscy5hZGQoY2VsbCk7CisgICAgICB9CisKKyAgICAgIHB1YmxpYyB2b2lkIGxpbmtDZWxscyAoKSB7CisgICAgICAgIENvbGxlY3Rpb25zLnNvcnQoY2VsbHMsIHRoaXMpOworICAgICAgICBDZWxsIHByZXZpb3VzID0gbnVsbDsKKworICAgICAgICBmb3IgKENlbGwgbmV4dCA6IGNlbGxzKSB7CisgICAgICAgICAgaWYgKHByZXZpb3VzICE9IG51bGwpIHsKKyAgICAgICAgICAgIHNldFByZXZpb3VzQ2VsbChuZXh0LCBwcmV2aW91cyk7CisgICAgICAgICAgICBzZXROZXh0Q2VsbChwcmV2aW91cywgbmV4dCk7CisgICAgICAgICAgfQorCisgICAgICAgICAgcHJldmlvdXMgPSBuZXh0OworICAgICAgICB9CisgICAgICB9CisKKyAgICAgIHB1YmxpYyB2b2lkIHNldE9mZnNldHMgKCkgeworICAgICAgICBmb3IgKENlbGwgY2VsbCA6IGNlbGxzKSB7CisgICAgICAgICAgQ2VsbCBuZXh0ID0gZ2V0QWRqYWNlbnRDZWxsKGNlbGwpOworCisgICAgICAgICAgaWYgKG5leHQgIT0gbnVsbCkgeworICAgICAgICAgICAgZ2V0Q29vcmRpbmF0ZShuZXh0KS5zZXRCcmFpbGxlT2Zmc2V0KGdldEJyYWlsbGVPZmZzZXQoKSArIGdldFNpemUoY2VsbCkgKyBnZXRTcGFjaW5nKCkpOworICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgfQorCisgICAgICBwdWJsaWMgQ29vcmRpbmF0ZSAoaW50IHZhbHVlKSB7CisgICAgICAgIGNvb3JkaW5hdGVWYWx1ZSA9IHZhbHVlOworICAgICAgfQorICAgIH0KKworICAgIHB1YmxpYyBjbGFzcyBDb2x1bW4gZXh0ZW5kcyBDb29yZGluYXRlIHsKKyAgICAgIEBPdmVycmlkZQorICAgICAgcHVibGljIGZpbmFsIGludCBjb21wYXJlIChDZWxsIGNlbGwxLCBDZWxsIGNlbGwyKSB7CisgICAgICAgIHJldHVybiBMYW5ndWFnZVV0aWxpdGllcy5jb21wYXJlKAorICAgICAgICAgIGNlbGwxLmdldEdyaWRSb3coKS5nZXRWYWx1ZSgpLAorICAgICAgICAgIGNlbGwyLmdldEdyaWRSb3coKS5nZXRWYWx1ZSgpCisgICAgICAgICk7CisgICAgICB9CisKKyAgICAgIEBPdmVycmlkZQorICAgICAgcHJvdGVjdGVkIGZpbmFsIHZvaWQgc2V0UHJldmlvdXNDZWxsIChDZWxsIGNlbGwsIENlbGwgcHJldmlvdXMpIHsKKyAgICAgICAgY2VsbC5zZXROb3J0aENlbGwocHJldmlvdXMpOworICAgICAgfQorCisgICAgICBAT3ZlcnJpZGUKKyAgICAgIHByb3RlY3RlZCBmaW5hbCB2b2lkIHNldE5leHRDZWxsIChDZWxsIGNlbGwsIENlbGwgbmV4dCkgeworICAgICAgICBjZWxsLnNldFNvdXRoQ2VsbChuZXh0KTsKKyAgICAgIH0KKworICAgICAgQE92ZXJyaWRlCisgICAgICBwcm90ZWN0ZWQgZmluYWwgQ2VsbCBnZXRBZGphY2VudENlbGwgKENlbGwgY2VsbCkgeworICAgICAgICByZXR1cm4gY2VsbC5nZXRFYXN0Q2VsbCgpOworICAgICAgfQorCisgICAgICBAT3ZlcnJpZGUKKyAgICAgIHByb3RlY3RlZCBmaW5hbCBDb29yZGluYXRlIGdldENvb3JkaW5hdGUgKENlbGwgY2VsbCkgeworICAgICAgICByZXR1cm4gY2VsbC5nZXRHcmlkQ29sdW1uKCk7CisgICAgICB9CisKKyAgICAgIEBPdmVycmlkZQorICAgICAgcHJvdGVjdGVkIGZpbmFsIGludCBnZXRTaXplIChDZWxsIGNlbGwpIHsKKyAgICAgICAgcmV0dXJuIGNlbGwuZ2V0V2lkdGgoKTsKKyAgICAgIH0KKworICAgICAgQE92ZXJyaWRlCisgICAgICBwcm90ZWN0ZWQgZmluYWwgaW50IGdldFNwYWNpbmcgKCkgeworICAgICAgICByZXR1cm4gQXBwbGljYXRpb25QYXJhbWV0ZXJzLkJSQUlMTEVfQ09MVU1OX1NQQUNJTkc7CisgICAgICB9CisKKyAgICAgIHB1YmxpYyBDb2x1bW4gKGludCB2YWx1ZSkgeworICAgICAgICBzdXBlcih2YWx1ZSk7CisgICAgICB9CisgICAgfQorCisgICAgcHVibGljIGNsYXNzIFJvdyBleHRlbmRzIENvb3JkaW5hdGUgeworICAgICAgQE92ZXJyaWRlCisgICAgICBwdWJsaWMgZmluYWwgaW50IGNvbXBhcmUgKENlbGwgY2VsbDEsIENlbGwgY2VsbDIpIHsKKyAgICAgICAgcmV0dXJuIExhbmd1YWdlVXRpbGl0aWVzLmNvbXBhcmUoCisgICAgICAgICAgY2VsbDEuZ2V0R3JpZENvbHVtbigpLmdldFZhbHVlKCksCisgICAgICAgICAgY2VsbDIuZ2V0R3JpZENvbHVtbigpLmdldFZhbHVlKCkKKyAgICAgICAgKTsKKyAgICAgIH0KKworICAgICAgQE92ZXJyaWRlCisgICAgICBwcm90ZWN0ZWQgZmluYWwgdm9pZCBzZXRQcmV2aW91c0NlbGwgKENlbGwgY2VsbCwgQ2VsbCBwcmV2aW91cykgeworICAgICAgICBjZWxsLnNldFdlc3RDZWxsKHByZXZpb3VzKTsKKyAgICAgIH0KKworICAgICAgQE92ZXJyaWRlCisgICAgICBwcm90ZWN0ZWQgZmluYWwgdm9pZCBzZXROZXh0Q2VsbCAoQ2VsbCBjZWxsLCBDZWxsIG5leHQpIHsKKyAgICAgICAgY2VsbC5zZXRFYXN0Q2VsbChuZXh0KTsKKyAgICAgIH0KKworICAgICAgQE92ZXJyaWRlCisgICAgICBwcm90ZWN0ZWQgZmluYWwgQ2VsbCBnZXRBZGphY2VudENlbGwgKENlbGwgY2VsbCkgeworICAgICAgICByZXR1cm4gY2VsbC5nZXRTb3V0aENlbGwoKTsKKyAgICAgIH0KKworICAgICAgQE92ZXJyaWRlCisgICAgICBwcm90ZWN0ZWQgZmluYWwgQ29vcmRpbmF0ZSBnZXRDb29yZGluYXRlIChDZWxsIGNlbGwpIHsKKyAgICAgICAgcmV0dXJuIGNlbGwuZ2V0R3JpZFJvdygpOworICAgICAgfQorCisgICAgICBAT3ZlcnJpZGUKKyAgICAgIHByb3RlY3RlZCBmaW5hbCBpbnQgZ2V0U2l6ZSAoQ2VsbCBjZWxsKSB7CisgICAgICAgIHJldHVybiBjZWxsLmdldEhlaWdodCgpOworICAgICAgfQorCisgICAgICBAT3ZlcnJpZGUKKyAgICAgIHByb3RlY3RlZCBmaW5hbCBpbnQgZ2V0U3BhY2luZyAoKSB7CisgICAgICAgIHJldHVybiBBcHBsaWNhdGlvblBhcmFtZXRlcnMuQlJBSUxMRV9ST1dfU1BBQ0lORzsKKyAgICAgIH0KKworICAgICAgcHVibGljIFJvdyAoaW50IHZhbHVlKSB7CisgICAgICAgIHN1cGVyKHZhbHVlKTsKKyAgICAgIH0KKyAgICB9CisKKyAgICBwcm90ZWN0ZWQgYWJzdHJhY3QgY2xhc3MgQ29vcmRpbmF0ZXMgeworICAgICAgcHJpdmF0ZSBmaW5hbCBpbnQgY29vcmRpbmF0ZVNwYWNpbmc7CisKKyAgICAgIHByaXZhdGUgZmluYWwgTGlzdDxDb29yZGluYXRlPiBjb29yZGluYXRlcyA9IG5ldyBBcnJheUxpc3Q8Q29vcmRpbmF0ZT4oKTsKKworICAgICAgcHJvdGVjdGVkIGFic3RyYWN0IENvb3JkaW5hdGUgbmV3Q29vcmRpbmF0ZSAoaW50IHZhbHVlKTsKKworICAgICAgcHVibGljIGZpbmFsIExpc3Q8Q29vcmRpbmF0ZT4gZ2V0Q29vcmRpbmF0ZXMgKCkgeworICAgICAgICByZXR1cm4gY29vcmRpbmF0ZXM7CisgICAgICB9CisKKyAgICAgIHB1YmxpYyBmaW5hbCBDb29yZGluYXRlIGdldENvb3JkaW5hdGUgKGludCB2YWx1ZSkgeworICAgICAgICBMaXN0SXRlcmF0b3I8Q29vcmRpbmF0ZT4gaXRlcmF0b3IgPSBjb29yZGluYXRlcy5saXN0SXRlcmF0b3IoKTsKKworICAgICAgICB3aGlsZSAoaXRlcmF0b3IuaGFzTmV4dCgpKSB7CisgICAgICAgICAgQ29vcmRpbmF0ZSBjb29yZGluYXRlID0gaXRlcmF0b3IubmV4dCgpOworICAgICAgICAgIGludCBjdXJyZW50ID0gY29vcmRpbmF0ZS5nZXRWYWx1ZSgpOworICAgICAgICAgIGlmIChjdXJyZW50ID09IHZhbHVlKSByZXR1cm4gY29vcmRpbmF0ZTsKKworICAgICAgICAgIGlmIChjdXJyZW50ID4gdmFsdWUpIHsKKyAgICAgICAgICAgIGl0ZXJhdG9yLnByZXZpb3VzKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICB7CisgICAgICAgICAgQ29vcmRpbmF0ZSBjb29yZGluYXRlID0gbmV3Q29vcmRpbmF0ZSh2YWx1ZSk7CisgICAgICAgICAgaXRlcmF0b3IuYWRkKGNvb3JkaW5hdGUpOworICAgICAgICAgIHJldHVybiBjb29yZGluYXRlOworICAgICAgICB9CisgICAgICB9CisKKyAgICAgIHB1YmxpYyB2b2lkIGxpbmtDZWxscyAoKSB7CisgICAgICAgIGZvciAoQ29vcmRpbmF0ZSBjb29yZGluYXRlIDogY29vcmRpbmF0ZXMpIHsKKyAgICAgICAgICBjb29yZGluYXRlLmxpbmtDZWxscygpOworICAgICAgICB9CisgICAgICB9CisKKyAgICAgIHB1YmxpYyB2b2lkIHNldE9mZnNldHMgKCkgeworICAgICAgICBpbnQgb2Zmc2V0ID0gMDsKKyAgICAgICAgaW50IGluY3JlbWVudCA9IGNvb3JkaW5hdGVTcGFjaW5nOworICAgICAgICBpZiAoaW5jcmVtZW50ID09IDApIGluY3JlbWVudCA9IDE7CisKKyAgICAgICAgZm9yIChDb29yZGluYXRlIGNvb3JkaW5hdGUgOiBjb29yZGluYXRlcykgeworICAgICAgICAgIGNvb3JkaW5hdGUuc2V0QnJhaWxsZU9mZnNldChvZmZzZXQpOworICAgICAgICAgIG9mZnNldCArPSBpbmNyZW1lbnQ7CisgICAgICAgICAgY29vcmRpbmF0ZS5zZXRPZmZzZXRzKCk7CisgICAgICAgIH0KKyAgICAgIH0KKworICAgICAgcHVibGljIENvb3JkaW5hdGVzIChpbnQgc3BhY2luZykgeworICAgICAgICBjb29yZGluYXRlU3BhY2luZyA9IHNwYWNpbmc7CisgICAgICB9CisgICAgfQorCisgICAgcHVibGljIGNsYXNzIENvbHVtbnMgZXh0ZW5kcyBDb29yZGluYXRlcyB7CisgICAgICBAT3ZlcnJpZGUKKyAgICAgIHByb3RlY3RlZCBmaW5hbCBDb29yZGluYXRlIG5ld0Nvb3JkaW5hdGUgKGludCB2YWx1ZSkgeworICAgICAgICByZXR1cm4gbmV3IENvbHVtbih2YWx1ZSk7CisgICAgICB9CisKKyAgICAgIHB1YmxpYyBDb2x1bW5zICgpIHsKKyAgICAgICAgc3VwZXIoQXBwbGljYXRpb25QYXJhbWV0ZXJzLkJSQUlMTEVfQ09MVU1OX1NQQUNJTkcpOworICAgICAgfQorICAgIH0KKworICAgIHB1YmxpYyBjbGFzcyBSb3dzIGV4dGVuZHMgQ29vcmRpbmF0ZXMgeworICAgICAgQE92ZXJyaWRlCisgICAgICBwcm90ZWN0ZWQgZmluYWwgQ29vcmRpbmF0ZSBuZXdDb29yZGluYXRlIChpbnQgdmFsdWUpIHsKKyAgICAgICAgcmV0dXJuIG5ldyBSb3codmFsdWUpOworICAgICAgfQorCisgICAgICBwdWJsaWMgUm93cyAoKSB7CisgICAgICAgIHN1cGVyKEFwcGxpY2F0aW9uUGFyYW1ldGVycy5CUkFJTExFX1JPV19TUEFDSU5HKTsKKyAgICAgIH0KKyAgICB9CisKKyAgICBwdWJsaWMgY2xhc3MgQ2VsbCB7CisgICAgICBwcml2YXRlIGZpbmFsIENvb3JkaW5hdGUgZ3JpZENvbHVtbjsKKyAgICAgIHByaXZhdGUgZmluYWwgQ29vcmRpbmF0ZSBncmlkUm93OworICAgICAgcHJpdmF0ZSBmaW5hbCBTY3JlZW5FbGVtZW50IHNjcmVlbkVsZW1lbnQ7CisKKyAgICAgIHByaXZhdGUgZmluYWwgaW50IGNlbGxXaWR0aDsKKyAgICAgIHByaXZhdGUgZmluYWwgaW50IGNlbGxIZWlnaHQ7CisKKyAgICAgIHByaXZhdGUgQ2VsbCBub3J0aENlbGwgPSBudWxsOworICAgICAgcHJpdmF0ZSBDZWxsIGVhc3RDZWxsID0gbnVsbDsKKyAgICAgIHByaXZhdGUgQ2VsbCBzb3V0aENlbGwgPSBudWxsOworICAgICAgcHJpdmF0ZSBDZWxsIHdlc3RDZWxsID0gbnVsbDsKKworICAgICAgcHVibGljIGZpbmFsIENvb3JkaW5hdGUgZ2V0R3JpZENvbHVtbiAoKSB7CisgICAgICAgIHJldHVybiBncmlkQ29sdW1uOworICAgICAgfQorCisgICAgICBwdWJsaWMgZmluYWwgQ29vcmRpbmF0ZSBnZXRHcmlkUm93ICgpIHsKKyAgICAgICAgcmV0dXJuIGdyaWRSb3c7CisgICAgICB9CisKKyAgICAgIHB1YmxpYyBmaW5hbCBTY3JlZW5FbGVtZW50IGdldFNjcmVlbkVsZW1lbnQgKCkgeworICAgICAgICByZXR1cm4gc2NyZWVuRWxlbWVudDsKKyAgICAgIH0KKworICAgICAgcHVibGljIGZpbmFsIGludCBnZXRXaWR0aCAoKSB7CisgICAgICAgIHJldHVybiBjZWxsV2lkdGg7CisgICAgICB9CisKKyAgICAgIHB1YmxpYyBmaW5hbCBpbnQgZ2V0SGVpZ2h0ICgpIHsKKyAgICAgICAgcmV0dXJuIGNlbGxIZWlnaHQ7CisgICAgICB9CisKKyAgICAgIHB1YmxpYyBDZWxsIGdldE5vcnRoQ2VsbCAoKSB7CisgICAgICAgIHJldHVybiBub3J0aENlbGw7CisgICAgICB9CisKKyAgICAgIHB1YmxpYyBDZWxsIGdldEVhc3RDZWxsICgpIHsKKyAgICAgICAgcmV0dXJuIGVhc3RDZWxsOworICAgICAgfQorCisgICAgICBwdWJsaWMgQ2VsbCBnZXRTb3V0aENlbGwgKCkgeworICAgICAgICByZXR1cm4gc291dGhDZWxsOworICAgICAgfQorCisgICAgICBwdWJsaWMgQ2VsbCBnZXRXZXN0Q2VsbCAoKSB7CisgICAgICAgIHJldHVybiB3ZXN0Q2VsbDsKKyAgICAgIH0KKworICAgICAgcHVibGljIHZvaWQgc2V0Tm9ydGhDZWxsIChDZWxsIGNlbGwpIHsKKyAgICAgICAgbm9ydGhDZWxsID0gY2VsbDsKKyAgICAgIH0KKworICAgICAgcHVibGljIHZvaWQgc2V0RWFzdENlbGwgKENlbGwgY2VsbCkgeworICAgICAgICBlYXN0Q2VsbCA9IGNlbGw7CisgICAgICB9CisKKyAgICAgIHB1YmxpYyB2b2lkIHNldFNvdXRoQ2VsbCAoQ2VsbCBjZWxsKSB7CisgICAgICAgIHNvdXRoQ2VsbCA9IGNlbGw7CisgICAgICB9CisKKyAgICAgIHB1YmxpYyB2b2lkIHNldFdlc3RDZWxsIChDZWxsIGNlbGwpIHsKKyAgICAgICAgd2VzdENlbGwgPSBjZWxsOworICAgICAgfQorCisgICAgICBwdWJsaWMgQ2VsbCAoQ29vcmRpbmF0ZSBjb2x1bW4sIENvb3JkaW5hdGUgcm93LCBTY3JlZW5FbGVtZW50IGVsZW1lbnQpIHsKKyAgICAgICAgZ3JpZENvbHVtbiA9IGNvbHVtbjsKKyAgICAgICAgZ3JpZFJvdyA9IHJvdzsKKyAgICAgICAgc2NyZWVuRWxlbWVudCA9IGVsZW1lbnQ7CisKKyAgICAgICAgU3RyaW5nW10gdGV4dCA9IGVsZW1lbnQuZ2V0QnJhaWxsZVRleHQoKTsKKyAgICAgICAgY2VsbFdpZHRoID0gZ2V0VGV4dFdpZHRoKHRleHQpOworICAgICAgICBjZWxsSGVpZ2h0ID0gdGV4dC5sZW5ndGg7CisgICAgICB9CisgICAgfQorCisgICAgcHJpdmF0ZSBmaW5hbCBDb29yZGluYXRlcyBjb2x1bW5zID0gbmV3IENvbHVtbnMoKTsKKyAgICBwcml2YXRlIGZpbmFsIENvb3JkaW5hdGVzIHJvd3MgPSBuZXcgUm93cygpOworCisgICAgcHVibGljIGZpbmFsIExpc3Q8Q29vcmRpbmF0ZT4gZ2V0Q29sdW1ucyAoKSB7CisgICAgICByZXR1cm4gY29sdW1ucy5nZXRDb29yZGluYXRlcygpOworICAgIH0KKworICAgIHB1YmxpYyBmaW5hbCBMaXN0PENvb3JkaW5hdGU+IGdldFJvd3MgKCkgeworICAgICAgcmV0dXJuIHJvd3MuZ2V0Q29vcmRpbmF0ZXMoKTsKKyAgICB9CisKKyAgICBwcml2YXRlIGZpbmFsIENvb3JkaW5hdGUgZ2V0Q29sdW1uIChpbnQgdmFsdWUpIHsKKyAgICAgIHJldHVybiBjb2x1bW5zLmdldENvb3JkaW5hdGUodmFsdWUpOworICAgIH0KKworICAgIHByaXZhdGUgZmluYWwgQ29vcmRpbmF0ZSBnZXRSb3cgKGludCB2YWx1ZSkgeworICAgICAgcmV0dXJuIHJvd3MuZ2V0Q29vcmRpbmF0ZSh2YWx1ZSk7CisgICAgfQorCisgICAgcHVibGljIFBvaW50IGdldFBvaW50IChTY3JlZW5FbGVtZW50IGVsZW1lbnQpIHsKKyAgICAgIEFjY2Vzc2liaWxpdHlOb2RlSW5mbyBub2RlID0gZWxlbWVudC5nZXRBY2Nlc3NpYmlsaXR5Tm9kZSgpOworICAgICAgaWYgKG5vZGUgPT0gbnVsbCkgcmV0dXJuIG51bGw7CisKKyAgICAgIFJlY3QgbG9jYXRpb24gPSBuZXcgUmVjdCgpOworICAgICAgYm9vbGVhbiBsZWFmID0gbm9kZS5nZXRDaGlsZENvdW50KCkgPT0gMDsKKworICAgICAgZG8geworICAgICAgICBub2RlLmdldEJvdW5kc0luU2NyZWVuKGxvY2F0aW9uKTsKKworICAgICAgICBBY2Nlc3NpYmlsaXR5Tm9kZUluZm8gcGFyZW50ID0gbm9kZS5nZXRQYXJlbnQoKTsKKyAgICAgICAgaWYgKHBhcmVudCA9PSBudWxsKSBicmVhazsKKworICAgICAgICBub2RlLnJlY3ljbGUoKTsKKyAgICAgICAgbm9kZSA9IHBhcmVudDsKKyAgICAgIH0gd2hpbGUgKG5vZGUuZ2V0Q2hpbGRDb3VudCgpID09IDEpOworCisgICAgICBub2RlLnJlY3ljbGUoKTsKKyAgICAgIG5vZGUgPSBudWxsOworCisgICAgICBpbnQgY29sdW1uID0gbG9jYXRpb24ubGVmdDsKKyAgICAgIGludCByb3cgPSBsZWFmPyAoKGxvY2F0aW9uLnRvcCArIGxvY2F0aW9uLmJvdHRvbSkgLyAyKTogbG9jYXRpb24udG9wOworICAgICAgcmV0dXJuIG5ldyBQb2ludChjb2x1bW4sIHJvdyk7CisgICAgfQorCisgICAgcHVibGljIGZpbmFsIENlbGwgYWRkQ2VsbCAoU2NyZWVuRWxlbWVudCBlbGVtZW50KSB7CisgICAgICBTdHJpbmdbXSB0ZXh0ID0gZWxlbWVudC5nZXRCcmFpbGxlVGV4dCgpOworICAgICAgaWYgKHRleHQgPT0gbnVsbCkgcmV0dXJuIG51bGw7CisKKyAgICAgIFBvaW50IHBvaW50ID0gZ2V0UG9pbnQoZWxlbWVudCk7CisgICAgICBpZiAocG9pbnQgPT0gbnVsbCkgcmV0dXJuIG51bGw7CisKKyAgICAgIENvb3JkaW5hdGUgY29sdW1uID0gZ2V0Q29sdW1uKHBvaW50LngpOworICAgICAgQ29vcmRpbmF0ZSByb3cgPSBnZXRSb3cocG9pbnQueSk7CisgICAgICBDZWxsIGNlbGwgPSBuZXcgQ2VsbChjb2x1bW4sIHJvdywgZWxlbWVudCk7CisKKyAgICAgIGNvbHVtbi5hZGRDZWxsKGNlbGwpOworICAgICAgcm93LmFkZENlbGwoY2VsbCk7CisKKyAgICAgIHJldHVybiBjZWxsOworICAgIH0KKworICAgIHB1YmxpYyBmaW5hbCB2b2lkIGZpbmlzaCAoKSB7CisgICAgICBjb2x1bW5zLmxpbmtDZWxscygpOworICAgICAgcm93cy5saW5rQ2VsbHMoKTsKKworICAgICAgY29sdW1ucy5zZXRPZmZzZXRzKCk7CisgICAgICByb3dzLnNldE9mZnNldHMoKTsKKyAgICB9CisKKyAgICBwdWJsaWMgR3JpZCAoKSB7CisgICAgfQorICB9CisKKyAgQE92ZXJyaWRlCisgIHByb3RlY3RlZCBmaW5hbCB2b2lkIHNldEJyYWlsbGVMb2NhdGlvbnMgKFNjcmVlbkVsZW1lbnRMaXN0IGVsZW1lbnRzKSB7CisgICAgR3JpZCBncmlkID0gbmV3IEdyaWQoKTsKKworICAgIGZvciAoU2NyZWVuRWxlbWVudCBlbGVtZW50IDogZWxlbWVudHMpIHsKKyAgICAgIGdyaWQuYWRkQ2VsbChlbGVtZW50KTsKKyAgICB9CisgICAgZ3JpZC5maW5pc2goKTsKKworICAgIGZvciAoR3JpZC5Db29yZGluYXRlIHJvdyA6IGdyaWQuZ2V0Um93cygpKSB7CisgICAgICBpbnQgdG9wID0gcm93LmdldEJyYWlsbGVPZmZzZXQoKTsKKworICAgICAgZm9yIChHcmlkLkNlbGwgY2VsbCA6IHJvdy5nZXRDZWxscygpKSB7CisgICAgICAgIEdyaWQuQ29vcmRpbmF0ZSBjb2x1bW4gPSBjZWxsLmdldEdyaWRDb2x1bW4oKTsKKyAgICAgICAgaW50IGxlZnQgPSBjb2x1bW4uZ2V0QnJhaWxsZU9mZnNldCgpOworCisgICAgICAgIGludCByaWdodCA9IGxlZnQgKyBjZWxsLmdldFdpZHRoKCkgLSAxOworICAgICAgICBpbnQgYm90dG9tID0gdG9wICsgY2VsbC5nZXRIZWlnaHQoKSAtIDE7CisKKyAgICAgICAgU2NyZWVuRWxlbWVudCBlbGVtZW50ID0gY2VsbC5nZXRTY3JlZW5FbGVtZW50KCk7CisgICAgICAgIGVsZW1lbnQuc2V0QnJhaWxsZUxvY2F0aW9uKGxlZnQsIHRvcCwgcmlnaHQsIGJvdHRvbSk7CisgICAgICB9CisgICAgfQorICB9CisKKyAgcHVibGljIEdyaWRCcmFpbGxlUmVuZGVyZXIgKCkgeworICAgIHN1cGVyKCk7CisgIH0KK30KZGlmZiAtLWdpdCBhL0FuZHJvaWQvR3JhZGxlL2FwcC9zcmMvbWFpbi9qYXZhL29yZy9hMTF5L2JybHR0eS9hbmRyb2lkL0hvc3RNb25pdG9yLmphdmEgYi9BbmRyb2lkL0dyYWRsZS9hcHAvc3JjL21haW4vamF2YS9vcmcvYTExeS9icmx0dHkvYW5kcm9pZC9Ib3N0TW9uaXRvci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhlYWUxNDIKLS0tIC9kZXYvbnVsbAorKysgYi9BbmRyb2lkL0dyYWRsZS9hcHAvc3JjL21haW4vamF2YS9vcmcvYTExeS9icmx0dHkvYW5kcm9pZC9Ib3N0TW9uaXRvci5qYXZhCkBAIC0wLDAgKzEsOTcgQEAKK3BhY2thZ2Ugb3JnLmExMXkuYnJsdHR5LmFuZHJvaWQ7CisKK2ltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQnJvYWRjYXN0UmVjZWl2ZXI7CitpbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbnRleHQ7CitpbXBvcnQgYW5kcm9pZC5jb250ZW50LkludGVudDsKK2ltcG9ydCBhbmRyb2lkLnByZWZlcmVuY2UuUHJlZmVyZW5jZU1hbmFnZXI7CitpbXBvcnQgYW5kcm9pZC51dGlsLkxvZzsKK2ltcG9ydCBqYXZhLmlvLkZpbGU7CitpbXBvcnQgamF2YS5pby5GaWxlSW5wdXRTdHJlYW07CitpbXBvcnQgamF2YS5pby5GaWxlT3V0cHV0U3RyZWFtOworaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247CitpbXBvcnQgamF2YS5uaW8uY2hhbm5lbHMuRmlsZUNoYW5uZWw7CisKK3B1YmxpYyBjbGFzcyBIb3N0TW9uaXRvciBleHRlbmRzIEJyb2FkY2FzdFJlY2VpdmVyIHsKKyAgcHJpdmF0ZSBmaW5hbCBzdGF0aWMgU3RyaW5nIExPR19UQUcgPSBIb3N0TW9uaXRvci5jbGFzcy5nZXROYW1lKCk7CisKKyAgcHJpdmF0ZSBzdGF0aWMgdm9pZCBtaWdyYXRlRGF0YSAoRmlsZSBmcm9tLCBGaWxlIHRvKSB7CisgICAgaWYgKGZyb20uZXhpc3RzKCkpIHsKKyAgICAgIGlmIChmcm9tLmlzRGlyZWN0b3J5KCkpIHsKKyAgICAgICAgaWYgKCF0by5leGlzdHMoKSkgeworICAgICAgICAgIGlmICghdG8ubWtkaXIoKSkgeworICAgICAgICAgICAgTG9nLncoTE9HX1RBRywgKCJkaXJlY3Rvcnkgbm90IGNyZWF0ZWQ6ICIgKyB0by5nZXRBYnNvbHV0ZVBhdGgoKSkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGZvciAoU3RyaW5nIG5hbWUgOiBmcm9tLmxpc3QoKSkgeworICAgICAgICAgIG1pZ3JhdGVEYXRhKAorICAgICAgICAgICAgbmV3IEZpbGUoZnJvbSwgbmFtZSksCisgICAgICAgICAgICBuZXcgRmlsZSh0bywgbmFtZSkKKyAgICAgICAgICApOworICAgICAgICB9CisgICAgICB9IGVsc2UgaWYgKCF0by5leGlzdHMoKSkgeworICAgICAgICB0cnkgeworICAgICAgICAgIEZpbGVDaGFubmVsIGlucHV0ID0gbmV3IEZpbGVJbnB1dFN0cmVhbShmcm9tKS5nZXRDaGFubmVsKCk7CisKKyAgICAgICAgICB0cnkgeworICAgICAgICAgICAgRmlsZUNoYW5uZWwgb3V0cHV0ID0gbmV3IEZpbGVPdXRwdXRTdHJlYW0odG8pLmdldENoYW5uZWwoKTsKKworICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgaW5wdXQudHJhbnNmZXJUbygwLCBpbnB1dC5zaXplKCksIG91dHB1dCk7CisgICAgICAgICAgICB9IGZpbmFsbHkgeworICAgICAgICAgICAgICBvdXRwdXQuY2xvc2UoKTsKKyAgICAgICAgICAgICAgb3V0cHV0ID0gbnVsbDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9IGZpbmFsbHkgeworICAgICAgICAgICAgaW5wdXQuY2xvc2UoKTsKKyAgICAgICAgICAgIGlucHV0ID0gbnVsbDsKKyAgICAgICAgICB9CisgICAgICAgIH0gY2F0Y2ggKElPRXhjZXB0aW9uIGV4Y2VwdGlvbikgeworICAgICAgICAgIExvZy53KExPR19UQUcsICgiZGF0YSBtaWdyYXRpb24gZXJyb3I6ICIgKyBleGNlcHRpb24uZ2V0TWVzc2FnZSgpKSk7CisgICAgICAgIH0KKyAgICAgIH0KKworICAgICAgZnJvbS5kZWxldGUoKTsKKyAgICB9CisgIH0KKworICBwcml2YXRlIHN0YXRpYyB2b2lkIG1pZ3JhdGVEYXRhIChDb250ZXh0IGZyb21Db250ZXh0KSB7CisgICAgaWYgKEFQSVRlc3RzLmhhdmVOb3VnYXQpIHsKKyAgICAgIENvbnRleHQgdG9Db250ZXh0ID0gRGF0YVR5cGUuZ2V0Q29udGV4dCgpOworCisgICAgICBpZiAodG9Db250ZXh0ICE9IGZyb21Db250ZXh0KSB7CisgICAgICAgIHsKKyAgICAgICAgICBTdHJpbmcgbmFtZSA9IFByZWZlcmVuY2VNYW5hZ2VyLmdldERlZmF1bHRTaGFyZWRQcmVmZXJlbmNlc05hbWUoZnJvbUNvbnRleHQpOworICAgICAgICAgIHRvQ29udGV4dC5tb3ZlU2hhcmVkUHJlZmVyZW5jZXNGcm9tKGZyb21Db250ZXh0LCBuYW1lKTsKKyAgICAgICAgfQorCisgICAgICAgIGZvciAoRGF0YVR5cGUgdHlwZSA6IERhdGFUeXBlLnZhbHVlcygpKSB7CisgICAgICAgICAgbWlncmF0ZURhdGEoCisgICAgICAgICAgICBmcm9tQ29udGV4dC5nZXREaXIodHlwZS5nZXROYW1lKCksCisgICAgICAgICAgICBDb250ZXh0Lk1PREVfUFJJVkFURSksCisgICAgICAgICAgICB0eXBlLmdldERpcmVjdG9yeSgpCisgICAgICAgICAgKTsKKyAgICAgICAgfQorICAgICAgfQorICAgIH0KKyAgfQorCisgIEBPdmVycmlkZQorICBwdWJsaWMgdm9pZCBvblJlY2VpdmUgKENvbnRleHQgY29udGV4dCwgSW50ZW50IGludGVudCkgeworICAgIFN0cmluZyBhY3Rpb24gPSBpbnRlbnQuZ2V0QWN0aW9uKCk7CisgICAgaWYgKGFjdGlvbiA9PSBudWxsKSByZXR1cm47CisgICAgTG9nLmQoTE9HX1RBRywgKCJob3N0IGV2ZW50OiAiICsgYWN0aW9uKSk7CisKKyAgICBpZiAoQVBJVGVzdHMuaGF2ZU5vdWdhdCkgeworICAgICAgaWYgKGFjdGlvbi5lcXVhbHMoSW50ZW50LkFDVElPTl9MT0NLRURfQk9PVF9DT01QTEVURUQpKSB7CisgICAgICAgIHJldHVybjsKKyAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoYWN0aW9uLmVxdWFscyhJbnRlbnQuQUNUSU9OX01ZX1BBQ0tBR0VfUkVQTEFDRUQpKSB7CisgICAgICBtaWdyYXRlRGF0YShjb250ZXh0KTsKKyAgICAgIHJldHVybjsKKyAgICB9CisgIH0KK30KZGlmZiAtLWdpdCBhL0FuZHJvaWQvR3JhZGxlL2FwcC9zcmMvbWFpbi9qYXZhL29yZy9hMTF5L2JybHR0eS9hbmRyb2lkL0lucHV0SGFuZGxlcnMuamF2YSBiL0FuZHJvaWQvR3JhZGxlL2FwcC9zcmMvbWFpbi9qYXZhL29yZy9hMTF5L2JybHR0eS9hbmRyb2lkL0lucHV0SGFuZGxlcnMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZmM2NTQ1Ci0tLSAvZGV2L251bGwKKysrIGIvQW5kcm9pZC9HcmFkbGUvYXBwL3NyYy9tYWluL2phdmEvb3JnL2ExMXkvYnJsdHR5L2FuZHJvaWQvSW5wdXRIYW5kbGVycy5qYXZhCkBAIC0wLDAgKzEsMTAyOSBAQAorLyoKKyAqIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisgKiAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisgKgorICogQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKK3BhY2thZ2Ugb3JnLmExMXkuYnJsdHR5LmFuZHJvaWQ7CisKK2ltcG9ydCBhbmRyb2lkLmFjY2Vzc2liaWxpdHlzZXJ2aWNlLkFjY2Vzc2liaWxpdHlTZXJ2aWNlOworaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuUmVjdDsKK2ltcG9ydCBhbmRyb2lkLm9zLkJ1bmRsZTsKK2ltcG9ydCBhbmRyb2lkLnRleHQuRWRpdGFibGU7CitpbXBvcnQgYW5kcm9pZC50ZXh0LlNwYW5uYWJsZVN0cmluZ0J1aWxkZXI7CitpbXBvcnQgYW5kcm9pZC52aWV3LktleUV2ZW50OworaW1wb3J0IGFuZHJvaWQudmlldy5hY2Nlc3NpYmlsaXR5LkFjY2Vzc2liaWxpdHlOb2RlSW5mbzsKK2ltcG9ydCBhbmRyb2lkLnZpZXcuYWNjZXNzaWJpbGl0eS5BY2Nlc3NpYmlsaXR5V2luZG93SW5mbzsKK2ltcG9ydCBhbmRyb2lkLnZpZXcuaW5wdXRtZXRob2QuSW5wdXRDb25uZWN0aW9uOworaW1wb3J0IGphdmEudXRpbC5BcnJheXM7CitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb25zOworaW1wb3J0IGphdmEudXRpbC5Db21wYXJhdG9yOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworaW1wb3J0IG9yZy5hMTF5LmJybHR0eS5hbmRyb2lkLmFjdGl2aXRpZXMuQWN0aW9uc0FjdGl2aXR5OworaW1wb3J0IG9yZy5hMTF5LmJybHR0eS5jb3JlLkJyYWlsbGU7CisKK3B1YmxpYyBhYnN0cmFjdCBjbGFzcyBJbnB1dEhhbmRsZXJzIHsKKyAgcHJpdmF0ZSBJbnB1dEhhbmRsZXJzICgpIHsKKyAgfQorCisgIHByaXZhdGUgZmluYWwgc3RhdGljIGludCBOT19TRUxFQ1RJT04gPSAtMTsKKworICBwcml2YXRlIHN0YXRpYyBib29sZWFuIHBlcmZvcm1HbG9iYWxBY3Rpb24gKGludCBhY3Rpb24pIHsKKyAgICByZXR1cm4gQnJhaWxsZVNlcnZpY2UuZ2V0QnJhaWxsZVNlcnZpY2UoKS5wZXJmb3JtR2xvYmFsQWN0aW9uKGFjdGlvbik7CisgIH0KKworICBwcml2YXRlIHN0YXRpYyBBY2Nlc3NpYmlsaXR5Tm9kZUluZm8gZ2V0Q3Vyc29yTm9kZSAoKSB7CisgICAgUmVuZGVyZWRTY3JlZW4gc2NyZWVuID0gU2NyZWVuRHJpdmVyLmdldEN1cnJlbnRSZW5kZXJlZFNjcmVlbigpOworICAgIGlmIChzY3JlZW4gPT0gbnVsbCkgcmV0dXJuIG51bGw7CisgICAgcmV0dXJuIHNjcmVlbi5nZXRDdXJzb3JOb2RlKCk7CisgIH0KKworICBwcml2YXRlIHN0YXRpYyBDaGFyU2VxdWVuY2UgZ2V0V2luZG93VGl0bGUgKEFjY2Vzc2liaWxpdHlXaW5kb3dJbmZvIHdpbmRvdykgeworICAgIGlmIChBUElUZXN0cy5oYXZlTm91Z2F0KSB7CisgICAgICBDaGFyU2VxdWVuY2UgdGl0bGUgPSB3aW5kb3cuZ2V0VGl0bGUoKTsKKyAgICAgIGlmICgodGl0bGUgIT0gbnVsbCkgJiYgKHRpdGxlLmxlbmd0aCgpID4gMCkpIHJldHVybiB0aXRsZTsKKyAgICB9CisKKyAgICBpZiAoQVBJVGVzdHMuaGF2ZVBpZSkgeworICAgICAgQWNjZXNzaWJpbGl0eU5vZGVJbmZvIG5vZGUgPSB3aW5kb3cuZ2V0Um9vdCgpOworCisgICAgICBpZiAobm9kZSAhPSBudWxsKSB7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgd2hpbGUgKHRydWUpIHsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgQ2hhclNlcXVlbmNlIHRpdGxlID0gbm9kZS5nZXRQYW5lVGl0bGUoKTsKKyAgICAgICAgICAgICAgaWYgKCh0aXRsZSAhPSBudWxsKSAmJiAodGl0bGUubGVuZ3RoKCkgPiAwKSkgcmV0dXJuIHRpdGxlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAobm9kZS5nZXRDaGlsZENvdW50KCkgIT0gMSkgYnJlYWs7CisgICAgICAgICAgICBBY2Nlc3NpYmlsaXR5Tm9kZUluZm8gY2hpbGQgPSBub2RlLmdldENoaWxkKDApOworICAgICAgICAgICAgaWYgKGNoaWxkID09IG51bGwpIGJyZWFrOworCisgICAgICAgICAgICBub2RlLnJlY3ljbGUoKTsKKyAgICAgICAgICAgIG5vZGUgPSBjaGlsZDsKKyAgICAgICAgICAgIGNoaWxkID0gbnVsbDsKKyAgICAgICAgICB9CisgICAgICAgIH0gZmluYWxseSB7CisgICAgICAgICAgbm9kZS5yZWN5Y2xlKCk7CisgICAgICAgICAgbm9kZSA9IG51bGw7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gInVubmFtZWQiOworICB9CisKKyAgcHJpdmF0ZSBzdGF0aWMgdm9pZCBzaG93V2luZG93VGl0bGUgKEFjY2Vzc2liaWxpdHlXaW5kb3dJbmZvIHdpbmRvdykgeworICAgIENoYXJTZXF1ZW5jZSB0aXRsZSA9IGdldFdpbmRvd1RpdGxlKHdpbmRvdyk7CisgICAgQnJhaWxsZU1lc3NhZ2UuV0lORE9XLnNob3codGl0bGUudG9TdHJpbmcoKSk7CisgIH0KKworICBwcml2YXRlIHN0YXRpYyB2b2lkIHNob3dXaW5kb3dUaXRsZSAoU2NyZWVuV2luZG93IHdpbmRvdykgeworICAgIEFjY2Vzc2liaWxpdHlXaW5kb3dJbmZvIGluZm8gPSB3aW5kb3cuZ2V0V2luZG93SW5mbygpOworCisgICAgaWYgKGluZm8gIT0gbnVsbCkgeworICAgICAgdHJ5IHsKKyAgICAgICAgc2hvd1dpbmRvd1RpdGxlKGluZm8pOworICAgICAgfSBmaW5hbGx5IHsKKyAgICAgICAgaWYgKEFQSVRlc3RzLmhhdmVMb2xsaXBvcCkgeworICAgICAgICAgIGluZm8ucmVjeWNsZSgpOworICAgICAgICB9CisKKyAgICAgICAgaW5mbyA9IG51bGw7CisgICAgICB9CisgICAgfQorICB9CisKKyAgcHJpdmF0ZSBzdGF0aWMgdm9pZCBzaG93V2luZG93VGl0bGUgKCkgeworICAgIHNob3dXaW5kb3dUaXRsZShTY3JlZW5Ecml2ZXIuZ2V0Q3VycmVudFNjcmVlbldpbmRvdygpKTsKKyAgfQorCisgIHByaXZhdGUgc3RhdGljIExpc3Q8QWNjZXNzaWJpbGl0eVdpbmRvd0luZm8+IGdldFZpc2libGVXaW5kb3dzICgpIHsKKyAgICBpZiAoQVBJVGVzdHMuaGF2ZUxvbGxpcG9wKSB7CisgICAgICByZXR1cm4gQnJhaWxsZVNlcnZpY2UuZ2V0QnJhaWxsZVNlcnZpY2UoKS5nZXRXaW5kb3dzKCk7CisgICAgfSBlbHNlIHsKKyAgICAgIHJldHVybiBDb2xsZWN0aW9ucy5FTVBUWV9MSVNUOworICAgIH0KKyAgfQorCisgIHByaXZhdGUgc3RhdGljIEFjY2Vzc2liaWxpdHlXaW5kb3dJbmZvW10gZ2V0VmlzaWJsZVdpbmRvd3MgKGZpbmFsIENvbXBhcmF0b3I8SW50ZWdlcj4gY29tcGFyYXRvcikgeworICAgIGlmIChBUElUZXN0cy5oYXZlTG9sbGlwb3ApIHsKKyAgICAgIExpc3Q8QWNjZXNzaWJpbGl0eVdpbmRvd0luZm8+IGxpc3QgPSBnZXRWaXNpYmxlV2luZG93cygpOworICAgICAgQWNjZXNzaWJpbGl0eVdpbmRvd0luZm9bXSBhcnJheSA9IGxpc3QudG9BcnJheShuZXcgQWNjZXNzaWJpbGl0eVdpbmRvd0luZm9bbGlzdC5zaXplKCldKTsKKworICAgICAgQXJyYXlzLnNvcnQoYXJyYXksCisgICAgICAgIG5ldyBDb21wYXJhdG9yPEFjY2Vzc2liaWxpdHlXaW5kb3dJbmZvPigpIHsKKyAgICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgICBwdWJsaWMgaW50IGNvbXBhcmUgKEFjY2Vzc2liaWxpdHlXaW5kb3dJbmZvIHdpbmRvdzEsIEFjY2Vzc2liaWxpdHlXaW5kb3dJbmZvIHdpbmRvdzIpIHsKKyAgICAgICAgICAgIHJldHVybiBjb21wYXJhdG9yLmNvbXBhcmUod2luZG93MS5nZXRJZCgpLCB3aW5kb3cyLmdldElkKCkpOworICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgKTsKKworICAgICAgcmV0dXJuIGFycmF5OworICAgIH0KKworICAgIHJldHVybiBudWxsOworICB9CisKKyAgcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBzd2l0Y2hUb1dpbmRvdyAoQWNjZXNzaWJpbGl0eVdpbmRvd0luZm8gd2luZG93KSB7CisgICAgaWYgKEFQSVRlc3RzLmhhdmVMb2xsaXBvcCkgeworICAgICAgQWNjZXNzaWJpbGl0eU5vZGVJbmZvIHJvb3QgPSB3aW5kb3cuZ2V0Um9vdCgpOworCisgICAgICBpZiAocm9vdCAhPSBudWxsKSB7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgUmVuZGVyZWRTY3JlZW4gc2NyZWVuID0gbmV3IFJlbmRlcmVkU2NyZWVuKHJvb3QpOworICAgICAgICAgIHNob3dXaW5kb3dUaXRsZSh3aW5kb3cpOworCisgICAgICAgICAgU2NyZWVuRHJpdmVyLmxvY2tTY3JlZW5XaW5kb3coCisgICAgICAgICAgICBTY3JlZW5XaW5kb3cuZ2V0U2NyZWVuV2luZG93KHdpbmRvdykKKyAgICAgICAgICAgICAgICAgICAgICAgIC5zZXRSZW5kZXJlZFNjcmVlbihzY3JlZW4pCisgICAgICAgICAgKTsKKworICAgICAgICAgIFNjcmVlbkRyaXZlci5zZXRDdXJyZW50Tm9kZShyb290KTsKKyAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfSBmaW5hbGx5IHsKKyAgICAgICAgICByb290LnJlY3ljbGUoKTsKKyAgICAgICAgICByb290ID0gbnVsbDsKKyAgICAgICAgfQorICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBmYWxzZTsKKyAgfQorCisgIHByaXZhdGUgc3RhdGljIGJvb2xlYW4gc3dpdGNoVG9XaW5kb3cgKENvbXBhcmF0b3I8SW50ZWdlcj4gY29tcGFyYXRvcikgeworICAgIGJvb2xlYW4gZm91bmQgPSBmYWxzZTsKKworICAgIGlmIChBUElUZXN0cy5oYXZlTG9sbGlwb3ApIHsKKyAgICAgIEFjY2Vzc2liaWxpdHlXaW5kb3dJbmZvW10gd2luZG93cyA9IGdldFZpc2libGVXaW5kb3dzKGNvbXBhcmF0b3IpOworCisgICAgICBpZiAod2luZG93cyAhPSBudWxsKSB7CisgICAgICAgIEFjY2Vzc2liaWxpdHlOb2RlSW5mbyBjdXJzb3JOb2RlID0gZ2V0Q3Vyc29yTm9kZSgpOworCisgICAgICAgIGlmIChjdXJzb3JOb2RlICE9IG51bGwpIHsKKyAgICAgICAgICB0cnkgeworICAgICAgICAgICAgaW50IHJlZmVyZW5jZUlkZW50aWZpZXIgPSBjdXJzb3JOb2RlLmdldFdpbmRvd0lkKCk7CisKKyAgICAgICAgICAgIGZvciAoQWNjZXNzaWJpbGl0eVdpbmRvd0luZm8gd2luZG93IDogd2luZG93cykgeworICAgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgIGlmICghZm91bmQpIHsKKyAgICAgICAgICAgICAgICAgIGlmIChjb21wYXJhdG9yLmNvbXBhcmUod2luZG93LmdldElkKCksIHJlZmVyZW5jZUlkZW50aWZpZXIpID4gMCkgeworICAgICAgICAgICAgICAgICAgICBpZiAoc3dpdGNoVG9XaW5kb3cod2luZG93KSkgeworICAgICAgICAgICAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgfSBmaW5hbGx5IHsKKyAgICAgICAgICAgICAgICB3aW5kb3cucmVjeWNsZSgpOworICAgICAgICAgICAgICAgIHdpbmRvdyA9IG51bGw7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9IGZpbmFsbHkgeworICAgICAgICAgICAgY3Vyc29yTm9kZS5yZWN5Y2xlKCk7CisgICAgICAgICAgICBjdXJzb3JOb2RlID0gbnVsbDsKKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gZm91bmQ7CisgIH0KKworICBwcml2YXRlIHN0YXRpYyBib29sZWFuIG1vdmVGb2N1cyAoUmVuZGVyZWRTY3JlZW4uU2VhcmNoRGlyZWN0aW9uIGRpcmVjdGlvbikgeworICAgIFJlbmRlcmVkU2NyZWVuIHNjcmVlbiA9IFNjcmVlbkRyaXZlci5nZXRDdXJyZW50UmVuZGVyZWRTY3JlZW4oKTsKKworICAgIGlmIChzY3JlZW4gIT0gbnVsbCkgeworICAgICAgaWYgKHNjcmVlbi5tb3ZlRm9jdXMoZGlyZWN0aW9uKSkgeworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7CisgIH0KKworICBwcml2YXRlIHN0YXRpYyBpbnQgZ2V0VGV4dFN0YXJ0T2Zmc2V0IChBY2Nlc3NpYmlsaXR5Tm9kZUluZm8gbm9kZSkgeworICAgIGludCBvZmZzZXQ7CisKKyAgICBpZiAoQVBJVGVzdHMuaGF2ZUplbGx5QmVhbk1SMikgeworICAgICAgb2Zmc2V0ID0gbm9kZS5nZXRUZXh0U2VsZWN0aW9uU3RhcnQoKTsKKyAgICB9IGVsc2UgeworICAgICAgb2Zmc2V0ID0gTk9fU0VMRUNUSU9OOworICAgIH0KKworICAgIGlmIChvZmZzZXQgPT0gTk9fU0VMRUNUSU9OKSByZXR1cm4gMDsKKyAgICByZXR1cm4gb2Zmc2V0OworICB9CisKKyAgcHJpdmF0ZSBzdGF0aWMgaW50IGdldFRleHRFbmRPZmZzZXQgKEFjY2Vzc2liaWxpdHlOb2RlSW5mbyBub2RlKSB7CisgICAgaW50IG9mZnNldDsKKworICAgIGlmIChBUElUZXN0cy5oYXZlSmVsbHlCZWFuTVIyKSB7CisgICAgICBvZmZzZXQgPSBub2RlLmdldFRleHRTZWxlY3Rpb25FbmQoKTsKKyAgICB9IGVsc2UgeworICAgICAgb2Zmc2V0ID0gTk9fU0VMRUNUSU9OOworICAgIH0KKworICAgIGlmIChvZmZzZXQgPT0gTk9fU0VMRUNUSU9OKSByZXR1cm4gMDsKKyAgICBpZiAob2Zmc2V0ICE9IGdldFRleHRTdGFydE9mZnNldChub2RlKSkgb2Zmc2V0IC09IDE7CisgICAgcmV0dXJuIG9mZnNldDsKKyAgfQorCisgIHByaXZhdGUgc3RhdGljIEludGVnZXIgZmluZE5leHRMaW5lIChDaGFyU2VxdWVuY2UgdGV4dCwgaW50IG9mZnNldCkgeworICAgIGludCBsZW5ndGggPSB0ZXh0Lmxlbmd0aCgpOworCisgICAgd2hpbGUgKG9mZnNldCA8IGxlbmd0aCkgeworICAgICAgaWYgKHRleHQuY2hhckF0KG9mZnNldCsrKSA9PSAnXG4nKSByZXR1cm4gb2Zmc2V0OworICAgIH0KKworICAgIHJldHVybiBudWxsOworICB9CisKKyAgcHJpdmF0ZSBzdGF0aWMgaW50IGZpbmRDdXJyZW50TGluZSAoQ2hhclNlcXVlbmNlIHRleHQsIGludCBvZmZzZXQpIHsKKyAgICB3aGlsZSAob2Zmc2V0ID4gMCkgeworICAgICAgaWYgKHRleHQuY2hhckF0KC0tb2Zmc2V0KSA9PSAnXG4nKSB7CisgICAgICAgIG9mZnNldCArPSAxOworICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gb2Zmc2V0OworICB9CisKKyAgcHJpdmF0ZSBzdGF0aWMgSW50ZWdlciBmaW5kUHJldmlvdXNMaW5lIChDaGFyU2VxdWVuY2UgdGV4dCwgaW50IG9mZnNldCkgeworICAgIG9mZnNldCA9IGZpbmRDdXJyZW50TGluZSh0ZXh0LCBvZmZzZXQpOworICAgIGlmIChvZmZzZXQgPT0gMCkgcmV0dXJuIG51bGw7CisgICAgcmV0dXJuIGZpbmRDdXJyZW50TGluZSh0ZXh0LCBvZmZzZXQtMSk7CisgIH0KKworICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gc2V0U2VsZWN0aW9uIChBY2Nlc3NpYmlsaXR5Tm9kZUluZm8gbm9kZSwgaW50IHN0YXJ0LCBpbnQgZW5kKSB7CisgICAgaWYgKEFQSVRlc3RzLmhhdmVKZWxseUJlYW5NUjIpIHsKKyAgICAgIEJ1bmRsZSBhcmd1bWVudHMgPSBuZXcgQnVuZGxlKCk7CisgICAgICBhcmd1bWVudHMucHV0SW50KEFjY2Vzc2liaWxpdHlOb2RlSW5mby5BQ1RJT05fQVJHVU1FTlRfU0VMRUNUSU9OX1NUQVJUX0lOVCwgc3RhcnQpOworICAgICAgYXJndW1lbnRzLnB1dEludChBY2Nlc3NpYmlsaXR5Tm9kZUluZm8uQUNUSU9OX0FSR1VNRU5UX1NFTEVDVElPTl9FTkRfSU5ULCBlbmQpOworICAgICAgcmV0dXJuIG5vZGUucGVyZm9ybUFjdGlvbihBY2Nlc3NpYmlsaXR5Tm9kZUluZm8uQUNUSU9OX1NFVF9TRUxFQ1RJT04sIGFyZ3VtZW50cyk7CisgICAgfQorCisgICAgeworICAgICAgSW5wdXRDb25uZWN0aW9uIGNvbm5lY3Rpb24gPSBJbnB1dFNlcnZpY2UuZ2V0SW5wdXRDb25uZWN0aW9uKCk7CisgICAgICBpZiAoY29ubmVjdGlvbiAhPSBudWxsKSByZXR1cm4gY29ubmVjdGlvbi5zZXRTZWxlY3Rpb24oc3RhcnQsIGVuZCk7CisgICAgfQorCisgICAgcmV0dXJuIGZhbHNlOworICB9CisKKyAgcHVibGljIHN0YXRpYyBib29sZWFuIHBsYWNlQ3Vyc29yIChBY2Nlc3NpYmlsaXR5Tm9kZUluZm8gbm9kZSwgaW50IG9mZnNldCkgeworICAgIHJldHVybiBzZXRTZWxlY3Rpb24obm9kZSwgb2Zmc2V0LCBvZmZzZXQpOworICB9CisKKyAgcHJpdmF0ZSBhYnN0cmFjdCBzdGF0aWMgY2xhc3MgVGV4dEVkaXRvciB7CisgICAgcHVibGljIFRleHRFZGl0b3IgKCkgeworICAgIH0KKworICAgIHByb3RlY3RlZCBhYnN0cmFjdCBib29sZWFuIGVkaXRUZXh0IChJbnB1dENvbm5lY3Rpb24gY29ubmVjdGlvbik7CisgICAgcHJvdGVjdGVkIGFic3RyYWN0IEludGVnZXIgZWRpdFRleHQgKEVkaXRhYmxlIGVkaXRvciwgaW50IHN0YXJ0LCBpbnQgZW5kKTsKKworICAgIHByaXZhdGUgZmluYWwgYm9vbGVhbiBlZGl0VGV4dCAoQWNjZXNzaWJpbGl0eU5vZGVJbmZvIG5vZGUpIHsKKyAgICAgIGlmIChBUElUZXN0cy5oYXZlTG9sbGlwb3ApIHsKKyAgICAgICAgaWYgKG5vZGUuaXNGb2N1c2VkKCkpIHsKKyAgICAgICAgICBDaGFyU2VxdWVuY2UgdGV4dCA9IG5vZGUuZ2V0VGV4dCgpOworICAgICAgICAgIGludCBzdGFydCA9IG5vZGUuZ2V0VGV4dFNlbGVjdGlvblN0YXJ0KCk7CisgICAgICAgICAgaW50IGVuZCA9IG5vZGUuZ2V0VGV4dFNlbGVjdGlvbkVuZCgpOworCisgICAgICAgICAgaWYgKHN0YXJ0ID09IE5PX1NFTEVDVElPTikgdGV4dCA9IG51bGw7CisgICAgICAgICAgaWYgKHRleHQgPT0gbnVsbCkgdGV4dCA9ICIiOworICAgICAgICAgIGlmICh0ZXh0Lmxlbmd0aCgpID09IDApIHN0YXJ0ID0gZW5kID0gMDsKKworICAgICAgICAgIEVkaXRhYmxlIGVkaXRvciA9ICh0ZXh0IGluc3RhbmNlb2YgRWRpdGFibGUpPworICAgICAgICAgICAgICAgICAgICAgICAgICAgIChFZGl0YWJsZSl0ZXh0OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBTcGFubmFibGVTdHJpbmdCdWlsZGVyKHRleHQpOworCisgICAgICAgICAgaWYgKCgwIDw9IHN0YXJ0KSAmJiAoc3RhcnQgPD0gZW5kKSAmJiAoZW5kIDw9IHRleHQubGVuZ3RoKCkpKSB7CisgICAgICAgICAgICBJbnRlZ2VyIG9mZnNldCA9IGVkaXRUZXh0KGVkaXRvciwgc3RhcnQsIGVuZCk7CisKKyAgICAgICAgICAgIGlmIChvZmZzZXQgIT0gbnVsbCkgeworICAgICAgICAgICAgICBCdW5kbGUgYXJndW1lbnRzID0gbmV3IEJ1bmRsZSgpOworICAgICAgICAgICAgICBhcmd1bWVudHMucHV0Q2hhclNlcXVlbmNlKEFjY2Vzc2liaWxpdHlOb2RlSW5mby5BQ1RJT05fQVJHVU1FTlRfU0VUX1RFWFRfQ0hBUlNFUVVFTkNFLCBlZGl0b3IpOworCisgICAgICAgICAgICAgIGlmIChub2RlLnBlcmZvcm1BY3Rpb24oQWNjZXNzaWJpbGl0eU5vZGVJbmZvLkFDVElPTl9TRVRfVEVYVCwgYXJndW1lbnRzKSkgeworICAgICAgICAgICAgICAgIGlmIChvZmZzZXQgPT0gZWRpdG9yLmxlbmd0aCgpKSByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgICAgICByZXR1cm4gcGxhY2VDdXJzb3Iobm9kZSwgb2Zmc2V0KTsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgfQorCisgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgcHVibGljIGZpbmFsIGJvb2xlYW4gZWRpdFRleHQgKCkgeworICAgICAgeworICAgICAgICBBY2Nlc3NpYmlsaXR5Tm9kZUluZm8gbm9kZSA9IGdldEN1cnNvck5vZGUoKTsKKworICAgICAgICBpZiAobm9kZSAhPSBudWxsKSB7CisgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIGlmIChTY3JlZW5VdGlsaXRpZXMuaXNFZGl0YWJsZShub2RlKSkgeworICAgICAgICAgICAgICBpZiAoQXBwbGljYXRpb25QYXJhbWV0ZXJzLkVOQUJMRV9TRVRfVEVYVCkgeworICAgICAgICAgICAgICAgIGlmIChBUElUZXN0cy5oYXZlTG9sbGlwb3ApIHsKKyAgICAgICAgICAgICAgICAgIGlmICghbm9kZS5pc1Bhc3N3b3JkKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVkaXRUZXh0KG5vZGUpOworICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgIH0gZmluYWxseSB7CisgICAgICAgICAgICBub2RlLnJlY3ljbGUoKTsKKyAgICAgICAgICAgIG5vZGUgPSBudWxsOworICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgfQorCisgICAgICB7CisgICAgICAgIElucHV0Q29ubmVjdGlvbiBjb25uZWN0aW9uID0gSW5wdXRTZXJ2aWNlLmdldElucHV0Q29ubmVjdGlvbigpOworICAgICAgICBpZiAoY29ubmVjdGlvbiAhPSBudWxsKSByZXR1cm4gZWRpdFRleHQoY29ubmVjdGlvbik7CisgICAgICB9CisKKyAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgIH0KKworICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gaW5wdXRDaGFyYWN0ZXIgKGZpbmFsIGNoYXIgY2hhcmFjdGVyKSB7CisgICAgcmV0dXJuIG5ldyBUZXh0RWRpdG9yKCkgeworICAgICAgQE92ZXJyaWRlCisgICAgICBwcm90ZWN0ZWQgYm9vbGVhbiBlZGl0VGV4dCAoSW5wdXRDb25uZWN0aW9uIGNvbm5lY3Rpb24pIHsKKyAgICAgICAgcmV0dXJuIGNvbm5lY3Rpb24uY29tbWl0VGV4dChDaGFyYWN0ZXIudG9TdHJpbmcoY2hhcmFjdGVyKSwgMSk7CisgICAgICB9CisKKyAgICAgIEBPdmVycmlkZQorICAgICAgcHJvdGVjdGVkIEludGVnZXIgZWRpdFRleHQgKEVkaXRhYmxlIGVkaXRvciwgaW50IHN0YXJ0LCBpbnQgZW5kKSB7CisgICAgICAgIGVkaXRvci5yZXBsYWNlKHN0YXJ0LCBlbmQsIENoYXJhY3Rlci50b1N0cmluZyhjaGFyYWN0ZXIpKTsKKyAgICAgICAgcmV0dXJuIHN0YXJ0ICsgMTsKKyAgICAgIH0KKyAgICB9LmVkaXRUZXh0KCk7CisgIH0KKworICBwcml2YXRlIHN0YXRpYyBjaGFyIHN0cnVjdHVyYWxNb3Rpb25EaXJlY3Rpb25Eb3QgPSBTdHJ1Y3R1cmFsTW90aW9uLkRPVF9ORVhUOworCisgIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBwZXJmb3JtU3RydWN0dXJhbE1vdGlvbiAoYnl0ZSBkb3RzKSB7CisgICAgY2hhciBjaGFyYWN0ZXIgPSAoY2hhcilkb3RzOworICAgIGNoYXJhY3RlciAmPSBCcmFpbGxlLkRPVFNfQUxMOworCisgICAgYm9vbGVhbiBuZXh0ID0gKGNoYXJhY3RlciAmIFN0cnVjdHVyYWxNb3Rpb24uRE9UX05FWFQpICE9IDA7CisgICAgYm9vbGVhbiBwcmV2aW91cyA9IChjaGFyYWN0ZXIgJiBTdHJ1Y3R1cmFsTW90aW9uLkRPVF9QUkVWSU9VUykgIT0gMDsKKworICAgIGlmIChuZXh0ICYmIHByZXZpb3VzKSByZXR1cm4gZmFsc2U7CisgICAgYm9vbGVhbiBub0RpcmVjdGlvbiA9ICEobmV4dCB8fCBwcmV2aW91cyk7CisKKyAgICBpZiAoKGNoYXJhY3RlciAmIH5TdHJ1Y3R1cmFsTW90aW9uLkRPVFNfRElSRUNUSU9OKSA9PSAwKSB7CisgICAgICBpZiAobm9EaXJlY3Rpb24pIHJldHVybiBmYWxzZTsKKyAgICAgIHN0cnVjdHVyYWxNb3Rpb25EaXJlY3Rpb25Eb3QgPSBuZXh0PyBTdHJ1Y3R1cmFsTW90aW9uLkRPVF9ORVhUOiBTdHJ1Y3R1cmFsTW90aW9uLkRPVF9QUkVWSU9VUzsKKyAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIGlmIChub0RpcmVjdGlvbikgY2hhcmFjdGVyIHw9IHN0cnVjdHVyYWxNb3Rpb25EaXJlY3Rpb25Eb3Q7CisgICAgY2hhcmFjdGVyIHw9IEJyYWlsbGUuUk9XOworCisgICAgU3RydWN0dXJhbE1vdGlvbiBtb3Rpb24gPSBTdHJ1Y3R1cmFsTW90aW9uLmdldChjaGFyYWN0ZXIpOworICAgIGlmIChtb3Rpb24gPT0gbnVsbCkgcmV0dXJuIGZhbHNlOworCisgICAgQWNjZXNzaWJpbGl0eU5vZGVJbmZvIG5vZGUgPSBnZXRDdXJzb3JOb2RlKCk7CisgICAgaWYgKG5vZGUgPT0gbnVsbCkgcmV0dXJuIGZhbHNlOworCisgICAgdHJ5IHsKKyAgICAgIHJldHVybiBtb3Rpb24uYXBwbHkobm9kZSk7CisgICAgfSBmaW5hbGx5IHsKKyAgICAgIG5vZGUucmVjeWNsZSgpOworICAgICAgbm9kZSA9IG51bGw7CisgICAgfQorICB9CisKKyAgcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBpbmplY3RLZXkgKGludCBjb2RlKSB7CisgICAgcmV0dXJuIElucHV0U2VydmljZS5pbmplY3RLZXkoY29kZSk7CisgIH0KKworICBwcml2YXRlIGFic3RyYWN0IHN0YXRpYyBjbGFzcyBLZXlIYW5kbGVyIHsKKyAgICBwcml2YXRlIGZpbmFsIGludCBrZXlDb2RlOworCisgICAgcHVibGljIEtleUhhbmRsZXIgKGludCBjb2RlKSB7CisgICAgICBrZXlDb2RlID0gY29kZTsKKyAgICB9CisKKyAgICBwcm90ZWN0ZWQgYm9vbGVhbiBwZXJmb3JtTmF2aWdhdGlvbkFjdGlvbiAoQWNjZXNzaWJpbGl0eU5vZGVJbmZvIG5vZGUpIHsKKyAgICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbigpOworICAgIH0KKworICAgIHByb3RlY3RlZCBib29sZWFuIHBlcmZvcm1FZGl0QWN0aW9uIChBY2Nlc3NpYmlsaXR5Tm9kZUluZm8gbm9kZSkgeworICAgICAgcmV0dXJuIHBlcmZvcm1OYXZpZ2F0aW9uQWN0aW9uKG5vZGUpOworICAgIH0KKworICAgIHB1YmxpYyBmaW5hbCBib29sZWFuIGhhbmRsZUtleSAoKSB7CisgICAgICB0cnkgeworICAgICAgICBBY2Nlc3NpYmlsaXR5Tm9kZUluZm8gbm9kZSA9IGdldEN1cnNvck5vZGUoKTsKKworICAgICAgICBpZiAobm9kZSAhPSBudWxsKSB7CisgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIHJldHVybiBTY3JlZW5VdGlsaXRpZXMuaXNFZGl0YWJsZShub2RlKT8KKyAgICAgICAgICAgICAgICAgICBwZXJmb3JtRWRpdEFjdGlvbihub2RlKToKKyAgICAgICAgICAgICAgICAgICBwZXJmb3JtTmF2aWdhdGlvbkFjdGlvbihub2RlKTsKKyAgICAgICAgICB9IGZpbmFsbHkgeworICAgICAgICAgICAgbm9kZS5yZWN5Y2xlKCk7CisgICAgICAgICAgICBub2RlID0gbnVsbDsKKyAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb24oKTsKKyAgICAgIH0gY2F0Y2ggKFVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uIGV4Y2VwdGlvbikgeworICAgICAgICByZXR1cm4gaW5qZWN0S2V5KGtleUNvZGUpOworICAgICAgfQorICAgIH0KKyAgfQorCisgIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBrZXlIYW5kbGVyX2VudGVyICgpIHsKKyAgICByZXR1cm4gbmV3IEtleUhhbmRsZXIoS2V5RXZlbnQuS0VZQ09ERV9FTlRFUikgeworICAgICAgQE92ZXJyaWRlCisgICAgICBwcm90ZWN0ZWQgYm9vbGVhbiBwZXJmb3JtTmF2aWdhdGlvbkFjdGlvbiAoQWNjZXNzaWJpbGl0eU5vZGVJbmZvIG5vZGUpIHsKKyAgICAgICAgaWYgKEFQSVRlc3RzLmhhdmVKZWxseUJlYW4pIHsKKyAgICAgICAgICByZXR1cm4gU2NyZWVuVXRpbGl0aWVzLnBlcmZvcm1DbGljayhub2RlKTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBzdXBlci5wZXJmb3JtTmF2aWdhdGlvbkFjdGlvbihub2RlKTsKKyAgICAgIH0KKworICAgICAgQE92ZXJyaWRlCisgICAgICBwcm90ZWN0ZWQgYm9vbGVhbiBwZXJmb3JtRWRpdEFjdGlvbiAoQWNjZXNzaWJpbGl0eU5vZGVJbmZvIG5vZGUpIHsKKyAgICAgICAgaWYgKEFQSVRlc3RzLmhhdmVMb2xsaXBvcCkgeworICAgICAgICAgIGlmIChub2RlLmlzTXVsdGlMaW5lKCkpIHsKKyAgICAgICAgICAgIHJldHVybiBpbnB1dENoYXJhY3RlcignXG4nKTsKKyAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb24oKTsKKyAgICAgIH0KKyAgICB9LmhhbmRsZUtleSgpOworICB9CisKKyAgcHVibGljIHN0YXRpYyBib29sZWFuIGtleUhhbmRsZXJfdGFiICgpIHsKKyAgICByZXR1cm4gbmV3IEtleUhhbmRsZXIoS2V5RXZlbnQuS0VZQ09ERV9UQUIpIHsKKyAgICAgIEBPdmVycmlkZQorICAgICAgcHJvdGVjdGVkIGJvb2xlYW4gcGVyZm9ybU5hdmlnYXRpb25BY3Rpb24gKEFjY2Vzc2liaWxpdHlOb2RlSW5mbyBub2RlKSB7CisgICAgICAgIHJldHVybiBtb3ZlRm9jdXMoUmVuZGVyZWRTY3JlZW4uU2VhcmNoRGlyZWN0aW9uLkZPUldBUkQpOworICAgICAgfQorICAgIH0uaGFuZGxlS2V5KCk7CisgIH0KKworICBwdWJsaWMgc3RhdGljIGJvb2xlYW4ga2V5SGFuZGxlcl9iYWNrc3BhY2UgKCkgeworICAgIHJldHVybiBuZXcgVGV4dEVkaXRvcigpIHsKKyAgICAgIEBPdmVycmlkZQorICAgICAgcHJvdGVjdGVkIGJvb2xlYW4gZWRpdFRleHQgKElucHV0Q29ubmVjdGlvbiBjb25uZWN0aW9uKSB7CisgICAgICAgIHJldHVybiBJbnB1dFNlcnZpY2UuaW5qZWN0S2V5KGNvbm5lY3Rpb24sIEtleUV2ZW50LktFWUNPREVfREVMLCBmYWxzZSk7CisgICAgICB9CisKKyAgICAgIEBPdmVycmlkZQorICAgICAgcHJvdGVjdGVkIEludGVnZXIgZWRpdFRleHQgKEVkaXRhYmxlIGVkaXRvciwgaW50IHN0YXJ0LCBpbnQgZW5kKSB7CisgICAgICAgIGlmIChzdGFydCA9PSBlbmQpIHsKKyAgICAgICAgICBpZiAoc3RhcnQgPCAxKSByZXR1cm4gbnVsbDsKKyAgICAgICAgICBzdGFydCAtPSAxOworICAgICAgICB9CisKKyAgICAgICAgZWRpdG9yLmRlbGV0ZShzdGFydCwgZW5kKTsKKyAgICAgICAgcmV0dXJuIHN0YXJ0OworICAgICAgfQorICAgIH0uZWRpdFRleHQoKTsKKyAgfQorCisgIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBrZXlIYW5kbGVyX2VzY2FwZSAoKSB7CisgICAgaWYgKEFQSVRlc3RzLmhhdmVKZWxseUJlYW4pIHsKKyAgICAgIHJldHVybiBwZXJmb3JtR2xvYmFsQWN0aW9uKEFjY2Vzc2liaWxpdHlTZXJ2aWNlLkdMT0JBTF9BQ1RJT05fQkFDSyk7CisgICAgfQorCisgICAgcmV0dXJuIGluamVjdEtleShLZXlFdmVudC5LRVlDT0RFX0VTQ0FQRSk7CisgIH0KKworICBwdWJsaWMgc3RhdGljIGJvb2xlYW4ga2V5SGFuZGxlcl9jdXJzb3JMZWZ0ICgpIHsKKyAgICByZXR1cm4gbmV3IEtleUhhbmRsZXIoS2V5RXZlbnQuS0VZQ09ERV9EUEFEX0xFRlQpIHsKKyAgICAgIEBPdmVycmlkZQorICAgICAgcHJvdGVjdGVkIGJvb2xlYW4gcGVyZm9ybU5hdmlnYXRpb25BY3Rpb24gKEFjY2Vzc2liaWxpdHlOb2RlSW5mbyBub2RlKSB7CisgICAgICAgIHJldHVybiBtb3ZlRm9jdXMoUmVuZGVyZWRTY3JlZW4uU2VhcmNoRGlyZWN0aW9uLkxFRlQpOworICAgICAgfQorCisgICAgICBAT3ZlcnJpZGUKKyAgICAgIHByb3RlY3RlZCBib29sZWFuIHBlcmZvcm1FZGl0QWN0aW9uIChBY2Nlc3NpYmlsaXR5Tm9kZUluZm8gbm9kZSkgeworICAgICAgICBpZiAoQVBJVGVzdHMuaGF2ZUplbGx5QmVhbk1SMikgeworICAgICAgICAgIGludCBvZmZzZXQgPSBub2RlLmdldFRleHRTZWxlY3Rpb25TdGFydCgpOworICAgICAgICAgIGlmIChvZmZzZXQgPT0gTk9fU0VMRUNUSU9OKSByZXR1cm4gZmFsc2U7CisgICAgICAgICAgaWYgKG9mZnNldCA9PSBub2RlLmdldFRleHRTZWxlY3Rpb25FbmQoKSkgb2Zmc2V0IC09IDE7CisgICAgICAgICAgaWYgKG9mZnNldCA8IDApIHJldHVybiBmYWxzZTsKKyAgICAgICAgICByZXR1cm4gcGxhY2VDdXJzb3Iobm9kZSwgb2Zmc2V0KTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBzdXBlci5wZXJmb3JtRWRpdEFjdGlvbihub2RlKTsKKyAgICAgIH0KKyAgICB9LmhhbmRsZUtleSgpOworICB9CisKKyAgcHVibGljIHN0YXRpYyBib29sZWFuIGtleUhhbmRsZXJfY3Vyc29yUmlnaHQgKCkgeworICAgIHJldHVybiBuZXcgS2V5SGFuZGxlcihLZXlFdmVudC5LRVlDT0RFX0RQQURfUklHSFQpIHsKKyAgICAgIEBPdmVycmlkZQorICAgICAgcHJvdGVjdGVkIGJvb2xlYW4gcGVyZm9ybU5hdmlnYXRpb25BY3Rpb24gKEFjY2Vzc2liaWxpdHlOb2RlSW5mbyBub2RlKSB7CisgICAgICAgIHJldHVybiBtb3ZlRm9jdXMoUmVuZGVyZWRTY3JlZW4uU2VhcmNoRGlyZWN0aW9uLlJJR0hUKTsKKyAgICAgIH0KKworICAgICAgQE92ZXJyaWRlCisgICAgICBwcm90ZWN0ZWQgYm9vbGVhbiBwZXJmb3JtRWRpdEFjdGlvbiAoQWNjZXNzaWJpbGl0eU5vZGVJbmZvIG5vZGUpIHsKKyAgICAgICAgaWYgKEFQSVRlc3RzLmhhdmVKZWxseUJlYW5NUjIpIHsKKyAgICAgICAgICBpbnQgb2Zmc2V0ID0gbm9kZS5nZXRUZXh0U2VsZWN0aW9uRW5kKCk7CisgICAgICAgICAgaWYgKG9mZnNldCA9PSBOT19TRUxFQ1RJT04pIHJldHVybiBmYWxzZTsKKyAgICAgICAgICBpZiAob2Zmc2V0ID09IG5vZGUuZ2V0VGV4dFNlbGVjdGlvblN0YXJ0KCkpIG9mZnNldCArPSAxOworICAgICAgICAgIGlmIChvZmZzZXQgPiBub2RlLmdldFRleHQoKS5sZW5ndGgoKSkgcmV0dXJuIGZhbHNlOworICAgICAgICAgIHJldHVybiBwbGFjZUN1cnNvcihub2RlLCBvZmZzZXQpOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIHN1cGVyLnBlcmZvcm1FZGl0QWN0aW9uKG5vZGUpOworICAgICAgfQorICAgIH0uaGFuZGxlS2V5KCk7CisgIH0KKworICBwdWJsaWMgc3RhdGljIGJvb2xlYW4ga2V5SGFuZGxlcl9jdXJzb3JVcCAoKSB7CisgICAgcmV0dXJuIG5ldyBLZXlIYW5kbGVyKEtleUV2ZW50LktFWUNPREVfRFBBRF9VUCkgeworICAgICAgQE92ZXJyaWRlCisgICAgICBwcm90ZWN0ZWQgYm9vbGVhbiBwZXJmb3JtTmF2aWdhdGlvbkFjdGlvbiAoQWNjZXNzaWJpbGl0eU5vZGVJbmZvIG5vZGUpIHsKKyAgICAgICAgcmV0dXJuIG1vdmVGb2N1cyhSZW5kZXJlZFNjcmVlbi5TZWFyY2hEaXJlY3Rpb24uVVApOworICAgICAgfQorCisgICAgICBAT3ZlcnJpZGUKKyAgICAgIHByb3RlY3RlZCBib29sZWFuIHBlcmZvcm1FZGl0QWN0aW9uIChBY2Nlc3NpYmlsaXR5Tm9kZUluZm8gbm9kZSkgeworICAgICAgICBpZiAoQVBJVGVzdHMuaGF2ZUplbGx5QmVhbk1SMikgeworICAgICAgICAgIGludCBvZmZzZXQgPSBnZXRUZXh0U3RhcnRPZmZzZXQobm9kZSk7CisKKyAgICAgICAgICBDaGFyU2VxdWVuY2UgdGV4dCA9IG5vZGUuZ2V0VGV4dCgpOworICAgICAgICAgIGludCBjdXJyZW50ID0gZmluZEN1cnJlbnRMaW5lKHRleHQsIG9mZnNldCk7CisgICAgICAgICAgaWYgKGN1cnJlbnQgPT0gMCkgcmV0dXJuIGZhbHNlOworCisgICAgICAgICAgaW50IGVuZCA9IGN1cnJlbnQgLSAxOworICAgICAgICAgIGludCBwcmV2aW91cyA9IGZpbmRDdXJyZW50TGluZSh0ZXh0LCBlbmQpOworCisgICAgICAgICAgaW50IHBvc2l0aW9uID0gTWF0aC5taW4ob2Zmc2V0LWN1cnJlbnQsIGVuZC1wcmV2aW91cyk7CisgICAgICAgICAgcmV0dXJuIHBsYWNlQ3Vyc29yKG5vZGUsIHByZXZpb3VzK3Bvc2l0aW9uKTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBzdXBlci5wZXJmb3JtRWRpdEFjdGlvbihub2RlKTsKKyAgICAgIH0KKyAgICB9LmhhbmRsZUtleSgpOworICB9CisKKyAgcHVibGljIHN0YXRpYyBib29sZWFuIGtleUhhbmRsZXJfY3Vyc29yRG93biAoKSB7CisgICAgcmV0dXJuIG5ldyBLZXlIYW5kbGVyKEtleUV2ZW50LktFWUNPREVfRFBBRF9ET1dOKSB7CisgICAgICBAT3ZlcnJpZGUKKyAgICAgIHByb3RlY3RlZCBib29sZWFuIHBlcmZvcm1OYXZpZ2F0aW9uQWN0aW9uIChBY2Nlc3NpYmlsaXR5Tm9kZUluZm8gbm9kZSkgeworICAgICAgICByZXR1cm4gbW92ZUZvY3VzKFJlbmRlcmVkU2NyZWVuLlNlYXJjaERpcmVjdGlvbi5ET1dOKTsKKyAgICAgIH0KKworICAgICAgQE92ZXJyaWRlCisgICAgICBwcm90ZWN0ZWQgYm9vbGVhbiBwZXJmb3JtRWRpdEFjdGlvbiAoQWNjZXNzaWJpbGl0eU5vZGVJbmZvIG5vZGUpIHsKKyAgICAgICAgaWYgKEFQSVRlc3RzLmhhdmVKZWxseUJlYW5NUjIpIHsKKyAgICAgICAgICBpbnQgb2Zmc2V0ID0gZ2V0VGV4dEVuZE9mZnNldChub2RlKTsKKworICAgICAgICAgIENoYXJTZXF1ZW5jZSB0ZXh0ID0gbm9kZS5nZXRUZXh0KCk7CisgICAgICAgICAgSW50ZWdlciBuZXh0ID0gZmluZE5leHRMaW5lKHRleHQsIG9mZnNldCk7CisgICAgICAgICAgaWYgKG5leHQgPT0gbnVsbCkgcmV0dXJuIGZhbHNlOworCisgICAgICAgICAgaW50IGN1cnJlbnQgPSBmaW5kQ3VycmVudExpbmUodGV4dCwgb2Zmc2V0KTsKKyAgICAgICAgICBpbnQgcG9zaXRpb24gPSBvZmZzZXQgLSBjdXJyZW50OworCisgICAgICAgICAgY3VycmVudCA9IG5leHQ7CisgICAgICAgICAgbmV4dCA9IGZpbmROZXh0TGluZSh0ZXh0LCBjdXJyZW50KTsKKworICAgICAgICAgIGludCBlbmQgPSAoKG5leHQgIT0gbnVsbCk/IG5leHQtMTogdGV4dC5sZW5ndGgoKSkgLSBjdXJyZW50OworICAgICAgICAgIGlmIChwb3NpdGlvbiA+IGVuZCkgcG9zaXRpb24gPSBlbmQ7CisgICAgICAgICAgcmV0dXJuIHBsYWNlQ3Vyc29yKG5vZGUsIGN1cnJlbnQrcG9zaXRpb24pOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIHN1cGVyLnBlcmZvcm1FZGl0QWN0aW9uKG5vZGUpOworICAgICAgfQorICAgIH0uaGFuZGxlS2V5KCk7CisgIH0KKworICBwdWJsaWMgc3RhdGljIGJvb2xlYW4ga2V5SGFuZGxlcl9wYWdlVXAgKCkgeworICAgIHJldHVybiBuZXcgS2V5SGFuZGxlcihLZXlFdmVudC5LRVlDT0RFX1BBR0VfVVApIHsKKyAgICAgIEBPdmVycmlkZQorICAgICAgcHJvdGVjdGVkIGJvb2xlYW4gcGVyZm9ybU5hdmlnYXRpb25BY3Rpb24gKEFjY2Vzc2liaWxpdHlOb2RlSW5mbyBub2RlKSB7CisgICAgICAgIGlmIChBUElUZXN0cy5oYXZlSmVsbHlCZWFuKSB7CisgICAgICAgICAgcmV0dXJuIFNjcmVlblV0aWxpdGllcy5wZXJmb3JtU2Nyb2xsQmFja3dhcmQobm9kZSk7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gc3VwZXIucGVyZm9ybU5hdmlnYXRpb25BY3Rpb24obm9kZSk7CisgICAgICB9CisKKyAgICAgIEBPdmVycmlkZQorICAgICAgcHJvdGVjdGVkIGJvb2xlYW4gcGVyZm9ybUVkaXRBY3Rpb24gKEFjY2Vzc2liaWxpdHlOb2RlSW5mbyBub2RlKSB7CisgICAgICAgIGlmIChBUElUZXN0cy5oYXZlSmVsbHlCZWFuTVIyKSB7CisgICAgICAgICAgaW50IGZyb20gPSBnZXRUZXh0U3RhcnRPZmZzZXQobm9kZSk7CisKKyAgICAgICAgICBmaW5hbCBpbnQgdG8gPSAwOworICAgICAgICAgIGlmICh0byA9PSBmcm9tKSByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgICByZXR1cm4gcGxhY2VDdXJzb3Iobm9kZSwgdG8pOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIHN1cGVyLnBlcmZvcm1FZGl0QWN0aW9uKG5vZGUpOworICAgICAgfQorICAgIH0uaGFuZGxlS2V5KCk7CisgIH0KKworICBwdWJsaWMgc3RhdGljIGJvb2xlYW4ga2V5SGFuZGxlcl9wYWdlRG93biAoKSB7CisgICAgcmV0dXJuIG5ldyBLZXlIYW5kbGVyKEtleUV2ZW50LktFWUNPREVfUEFHRV9ET1dOKSB7CisgICAgICBAT3ZlcnJpZGUKKyAgICAgIHByb3RlY3RlZCBib29sZWFuIHBlcmZvcm1OYXZpZ2F0aW9uQWN0aW9uIChBY2Nlc3NpYmlsaXR5Tm9kZUluZm8gbm9kZSkgeworICAgICAgICBpZiAoQVBJVGVzdHMuaGF2ZUplbGx5QmVhbikgeworICAgICAgICAgIHJldHVybiBTY3JlZW5VdGlsaXRpZXMucGVyZm9ybVNjcm9sbEZvcndhcmQobm9kZSk7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gc3VwZXIucGVyZm9ybU5hdmlnYXRpb25BY3Rpb24obm9kZSk7CisgICAgICB9CisKKyAgICAgIEBPdmVycmlkZQorICAgICAgcHJvdGVjdGVkIGJvb2xlYW4gcGVyZm9ybUVkaXRBY3Rpb24gKEFjY2Vzc2liaWxpdHlOb2RlSW5mbyBub2RlKSB7CisgICAgICAgIGlmIChBUElUZXN0cy5oYXZlSmVsbHlCZWFuTVIyKSB7CisgICAgICAgICAgaW50IGZyb20gPSBnZXRUZXh0RW5kT2Zmc2V0KG5vZGUpOworCisgICAgICAgICAgZmluYWwgaW50IHRvID0gbm9kZS5nZXRUZXh0KCkubGVuZ3RoKCk7CisgICAgICAgICAgaWYgKHRvID09IGZyb20pIHJldHVybiBmYWxzZTsKKworICAgICAgICAgIHJldHVybiBwbGFjZUN1cnNvcihub2RlLCB0byk7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gc3VwZXIucGVyZm9ybUVkaXRBY3Rpb24obm9kZSk7CisgICAgICB9CisgICAgfS5oYW5kbGVLZXkoKTsKKyAgfQorCisgIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBrZXlIYW5kbGVyX2hvbWUgKCkgeworICAgIHJldHVybiBuZXcgS2V5SGFuZGxlcihLZXlFdmVudC5LRVlDT0RFX01PVkVfSE9NRSkgeworICAgICAgQE92ZXJyaWRlCisgICAgICBwcm90ZWN0ZWQgYm9vbGVhbiBwZXJmb3JtTmF2aWdhdGlvbkFjdGlvbiAoQWNjZXNzaWJpbGl0eU5vZGVJbmZvIG5vZGUpIHsKKyAgICAgICAgcmV0dXJuIG1vdmVGb2N1cyhSZW5kZXJlZFNjcmVlbi5TZWFyY2hEaXJlY3Rpb24uRklSU1QpOworICAgICAgfQorCisgICAgICBAT3ZlcnJpZGUKKyAgICAgIHByb3RlY3RlZCBib29sZWFuIHBlcmZvcm1FZGl0QWN0aW9uIChBY2Nlc3NpYmlsaXR5Tm9kZUluZm8gbm9kZSkgeworICAgICAgICBpZiAoQVBJVGVzdHMuaGF2ZUplbGx5QmVhbk1SMikgeworICAgICAgICAgIGludCBmcm9tID0gZ2V0VGV4dFN0YXJ0T2Zmc2V0KG5vZGUpOworICAgICAgICAgIGlmIChmcm9tID09IDApIHJldHVybiBmYWxzZTsKKworICAgICAgICAgIENoYXJTZXF1ZW5jZSB0ZXh0ID0gbm9kZS5nZXRUZXh0KCk7CisgICAgICAgICAgaW50IHRvID0gZmluZEN1cnJlbnRMaW5lKHRleHQsIGZyb20pOworICAgICAgICAgIGlmICh0byA9PSBmcm9tKSByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgICByZXR1cm4gcGxhY2VDdXJzb3Iobm9kZSwgdG8pOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIHN1cGVyLnBlcmZvcm1FZGl0QWN0aW9uKG5vZGUpOworICAgICAgfQorICAgIH0uaGFuZGxlS2V5KCk7CisgIH0KKworICBwdWJsaWMgc3RhdGljIGJvb2xlYW4ga2V5SGFuZGxlcl9lbmQgKCkgeworICAgIHJldHVybiBuZXcgS2V5SGFuZGxlcihLZXlFdmVudC5LRVlDT0RFX01PVkVfRU5EKSB7CisgICAgICBAT3ZlcnJpZGUKKyAgICAgIHByb3RlY3RlZCBib29sZWFuIHBlcmZvcm1OYXZpZ2F0aW9uQWN0aW9uIChBY2Nlc3NpYmlsaXR5Tm9kZUluZm8gbm9kZSkgeworICAgICAgICByZXR1cm4gbW92ZUZvY3VzKFJlbmRlcmVkU2NyZWVuLlNlYXJjaERpcmVjdGlvbi5MQVNUKTsKKyAgICAgIH0KKworICAgICAgQE92ZXJyaWRlCisgICAgICBwcm90ZWN0ZWQgYm9vbGVhbiBwZXJmb3JtRWRpdEFjdGlvbiAoQWNjZXNzaWJpbGl0eU5vZGVJbmZvIG5vZGUpIHsKKyAgICAgICAgaWYgKEFQSVRlc3RzLmhhdmVKZWxseUJlYW5NUjIpIHsKKyAgICAgICAgICBpbnQgZnJvbSA9IGdldFRleHRFbmRPZmZzZXQobm9kZSk7CisKKyAgICAgICAgICBDaGFyU2VxdWVuY2UgdGV4dCA9IG5vZGUuZ2V0VGV4dCgpOworICAgICAgICAgIEludGVnZXIgbmV4dCA9IGZpbmROZXh0TGluZSh0ZXh0LCBmcm9tKTsKKworICAgICAgICAgIGludCB0byA9IChuZXh0ICE9IG51bGwpPyBuZXh0LTE6IHRleHQubGVuZ3RoKCk7CisgICAgICAgICAgaWYgKGZyb20gPT0gdG8pIHJldHVybiBmYWxzZTsKKworICAgICAgICAgIHJldHVybiBwbGFjZUN1cnNvcihub2RlLCB0byk7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gc3VwZXIucGVyZm9ybUVkaXRBY3Rpb24obm9kZSk7CisgICAgICB9CisgICAgfS5oYW5kbGVLZXkoKTsKKyAgfQorCisgIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBrZXlIYW5kbGVyX2luc2VydCAoKSB7CisgICAgcmV0dXJuIG5ldyBLZXlIYW5kbGVyKEtleUV2ZW50LktFWUNPREVfSU5TRVJUKSB7CisgICAgICBAT3ZlcnJpZGUKKyAgICAgIHByb3RlY3RlZCBib29sZWFuIHBlcmZvcm1OYXZpZ2F0aW9uQWN0aW9uIChBY2Nlc3NpYmlsaXR5Tm9kZUluZm8gbm9kZSkgeworICAgICAgICBpZiAoQVBJVGVzdHMuaGF2ZUplbGx5QmVhbikgeworICAgICAgICAgIHJldHVybiBTY3JlZW5VdGlsaXRpZXMucGVyZm9ybUxvbmdDbGljayhub2RlKTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBzdXBlci5wZXJmb3JtTmF2aWdhdGlvbkFjdGlvbihub2RlKTsKKyAgICAgIH0KKyAgICB9LmhhbmRsZUtleSgpOworICB9CisKKyAgcHVibGljIHN0YXRpYyBib29sZWFuIGtleUhhbmRsZXJfZGVsZXRlICgpIHsKKyAgICByZXR1cm4gbmV3IFRleHRFZGl0b3IoKSB7CisgICAgICBAT3ZlcnJpZGUKKyAgICAgIHByb3RlY3RlZCBib29sZWFuIGVkaXRUZXh0IChJbnB1dENvbm5lY3Rpb24gY29ubmVjdGlvbikgeworICAgICAgICByZXR1cm4gSW5wdXRTZXJ2aWNlLmluamVjdEtleShjb25uZWN0aW9uLCBLZXlFdmVudC5LRVlDT0RFX0ZPUldBUkRfREVMLCBmYWxzZSk7CisgICAgICB9CisKKyAgICAgIEBPdmVycmlkZQorICAgICAgcHJvdGVjdGVkIEludGVnZXIgZWRpdFRleHQgKEVkaXRhYmxlIGVkaXRvciwgaW50IHN0YXJ0LCBpbnQgZW5kKSB7CisgICAgICAgIGlmIChzdGFydCA9PSBlbmQpIHsKKyAgICAgICAgICBpZiAoZW5kID09IGVkaXRvci5sZW5ndGgoKSkgcmV0dXJuIG51bGw7CisgICAgICAgICAgZW5kICs9IDE7CisgICAgICAgIH0KKworICAgICAgICBlZGl0b3IuZGVsZXRlKHN0YXJ0LCBlbmQpOworICAgICAgICByZXR1cm4gc3RhcnQ7CisgICAgICB9CisgICAgfS5lZGl0VGV4dCgpOworICB9CisKKyAgcHVibGljIHN0YXRpYyBib29sZWFuIGdsb2JhbEFjdGlvbl9icmFpbGxlQWN0aW9ucyAoKSB7CisgICAgQWN0aW9uc0FjdGl2aXR5LmxhdW5jaCgpOworICAgIHJldHVybiB0cnVlOworICB9CisKKyAgcHVibGljIHN0YXRpYyBib29sZWFuIGdsb2JhbEFjdGlvbl9zaG93U3RhdHVzSW5kaWNhdG9ycyAoKSB7CisgICAgU3RyaW5nIGluZGljYXRvcnMgPSBTdGF0dXNJbmRpY2F0b3JzLmdldCgpOworICAgIGlmIChpbmRpY2F0b3JzID09IG51bGwpIHJldHVybiBmYWxzZTsKKyAgICBpZiAoaW5kaWNhdG9ycy5pc0VtcHR5KCkpIHJldHVybiBmYWxzZTsKKworICAgIEJyYWlsbGVNZXNzYWdlLlBMQUlOLnNob3coaW5kaWNhdG9ycyk7CisgICAgcmV0dXJuIHRydWU7CisgIH0KKworICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gZ2xvYmFsQWN0aW9uX3Nob3dXaW5kb3dUaXRsZSAoKSB7CisgICAgc2hvd1dpbmRvd1RpdGxlKCk7CisgICAgcmV0dXJuIHRydWU7CisgIH0KKworICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gZ2xvYmFsQWN0aW9uX3RvQWN0aXZlV2luZG93ICgpIHsKKyAgICBTY3JlZW5Ecml2ZXIudW5sb2NrU2NyZWVuV2luZG93KCk7CisgICAgQWNjZXNzaWJpbGl0eU5vZGVJbmZvIHJvb3QgPSBTY3JlZW5VdGlsaXRpZXMuZ2V0Um9vdE5vZGUoKTsKKworICAgIHRyeSB7CisgICAgICBTY3JlZW5Ecml2ZXIuc2V0Q3VycmVudE5vZGUocm9vdCk7CisgICAgfSBmaW5hbGx5IHsKKyAgICAgIHJvb3QucmVjeWNsZSgpOworICAgICAgcm9vdCA9IG51bGw7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7CisgIH0KKworICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gZ2xvYmFsQWN0aW9uX3RvUHJldmlvdXNXaW5kb3cgKCkgeworICAgIGlmIChBUElUZXN0cy5oYXZlS2l0a2F0KSB7CisgICAgICBDb21wYXJhdG9yPEludGVnZXI+IGNvbXBhcmF0b3IgPQorICAgICAgICBuZXcgQ29tcGFyYXRvcjxJbnRlZ2VyPigpIHsKKyAgICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgICBwdWJsaWMgaW50IGNvbXBhcmUgKEludGVnZXIgaWQxLCBJbnRlZ2VyIGlkMikgeworICAgICAgICAgICAgcmV0dXJuIC1JbnRlZ2VyLmNvbXBhcmUoaWQxLCBpZDIpOworICAgICAgICAgIH0KKyAgICAgICAgfTsKKworICAgICAgcmV0dXJuIHN3aXRjaFRvV2luZG93KGNvbXBhcmF0b3IpOworICAgIH0KKworICAgIHJldHVybiBmYWxzZTsKKyAgfQorCisgIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBnbG9iYWxBY3Rpb25fdG9OZXh0V2luZG93ICgpIHsKKyAgICBpZiAoQVBJVGVzdHMuaGF2ZUtpdGthdCkgeworICAgICAgQ29tcGFyYXRvcjxJbnRlZ2VyPiBjb21wYXJhdG9yID0KKyAgICAgICAgbmV3IENvbXBhcmF0b3I8SW50ZWdlcj4oKSB7CisgICAgICAgICAgQE92ZXJyaWRlCisgICAgICAgICAgcHVibGljIGludCBjb21wYXJlIChJbnRlZ2VyIGlkMSwgSW50ZWdlciBpZDIpIHsKKyAgICAgICAgICAgIHJldHVybiBJbnRlZ2VyLmNvbXBhcmUoaWQxLCBpZDIpOworICAgICAgICAgIH0KKyAgICAgICAgfTsKKworICAgICAgcmV0dXJuIHN3aXRjaFRvV2luZG93KGNvbXBhcmF0b3IpOworICAgIH0KKworICAgIHJldHVybiBmYWxzZTsKKyAgfQorCisgIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBnbG9iYWxBY3Rpb25fdG9GaXJzdEl0ZW0gKCkgeworICAgIHJldHVybiBtb3ZlRm9jdXMoUmVuZGVyZWRTY3JlZW4uU2VhcmNoRGlyZWN0aW9uLkZJUlNUKTsKKyAgfQorCisgIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBnbG9iYWxBY3Rpb25fdG9QcmV2aW91c0l0ZW0gKCkgeworICAgIHJldHVybiBtb3ZlRm9jdXMoUmVuZGVyZWRTY3JlZW4uU2VhcmNoRGlyZWN0aW9uLkJBQ0tXQVJEKTsKKyAgfQorCisgIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBnbG9iYWxBY3Rpb25fdG9OZXh0SXRlbSAoKSB7CisgICAgcmV0dXJuIG1vdmVGb2N1cyhSZW5kZXJlZFNjcmVlbi5TZWFyY2hEaXJlY3Rpb24uRk9SV0FSRCk7CisgIH0KKworICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gZ2xvYmFsQWN0aW9uX3RvTGFzdEl0ZW0gKCkgeworICAgIHJldHVybiBtb3ZlRm9jdXMoUmVuZGVyZWRTY3JlZW4uU2VhcmNoRGlyZWN0aW9uLkxBU1QpOworICB9CisKKyAgcHVibGljIHN0YXRpYyBib29sZWFuIGdsb2JhbEFjdGlvbl9ob21lU2NyZWVuICgpIHsKKyAgICBpZiAoQVBJVGVzdHMuaGF2ZUplbGx5QmVhbikgeworICAgICAgcmV0dXJuIHBlcmZvcm1HbG9iYWxBY3Rpb24oQWNjZXNzaWJpbGl0eVNlcnZpY2UuR0xPQkFMX0FDVElPTl9IT01FKTsKKyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7CisgIH0KKworICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gZ2xvYmFsQWN0aW9uX25vdGlmaWNhdGlvbnNTaGFkZSAoKSB7CisgICAgaWYgKEFQSVRlc3RzLmhhdmVKZWxseUJlYW4pIHsKKyAgICAgIHJldHVybiBwZXJmb3JtR2xvYmFsQWN0aW9uKEFjY2Vzc2liaWxpdHlTZXJ2aWNlLkdMT0JBTF9BQ1RJT05fTk9USUZJQ0FUSU9OUyk7CisgICAgfQorCisgICAgcmV0dXJuIGZhbHNlOworICB9CisKKyAgcHVibGljIHN0YXRpYyBib29sZWFuIGdsb2JhbEFjdGlvbl9xdWlja1NldHRpbmdzICgpIHsKKyAgICBpZiAoQVBJVGVzdHMuaGF2ZUplbGx5QmVhbk1SMSkgeworICAgICAgcmV0dXJuIHBlcmZvcm1HbG9iYWxBY3Rpb24oQWNjZXNzaWJpbGl0eVNlcnZpY2UuR0xPQkFMX0FDVElPTl9RVUlDS19TRVRUSU5HUyk7CisgICAgfQorCisgICAgcmV0dXJuIGZhbHNlOworICB9CisKKyAgcHVibGljIHN0YXRpYyBib29sZWFuIGdsb2JhbEFjdGlvbl9yZWNlbnRBcHBsaWNhdGlvbnMgKCkgeworICAgIGlmIChBUElUZXN0cy5oYXZlSmVsbHlCZWFuKSB7CisgICAgICByZXR1cm4gcGVyZm9ybUdsb2JhbEFjdGlvbihBY2Nlc3NpYmlsaXR5U2VydmljZS5HTE9CQUxfQUNUSU9OX1JFQ0VOVFMpOworICAgIH0KKworICAgIHJldHVybiBmYWxzZTsKKyAgfQorCisgIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBnbG9iYWxBY3Rpb25fZGV2aWNlT3B0aW9ucyAoKSB7CisgICAgaWYgKEFQSVRlc3RzLmhhdmVMb2xsaXBvcCkgeworICAgICAgcmV0dXJuIHBlcmZvcm1HbG9iYWxBY3Rpb24oQWNjZXNzaWJpbGl0eVNlcnZpY2UuR0xPQkFMX0FDVElPTl9QT1dFUl9ESUFMT0cpOworICAgIH0KKworICAgIHJldHVybiBmYWxzZTsKKyAgfQorCisgIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBnbG9iYWxBY3Rpb25fYmFja0J1dHRvbiAoKSB7CisgICAgaWYgKEFQSVRlc3RzLmhhdmVKZWxseUJlYW4pIHsKKyAgICAgIHJldHVybiBwZXJmb3JtR2xvYmFsQWN0aW9uKEFjY2Vzc2liaWxpdHlTZXJ2aWNlLkdMT0JBTF9BQ1RJT05fQkFDSyk7CisgICAgfQorCisgICAgcmV0dXJuIGZhbHNlOworICB9CisKKyAgcHVibGljIHN0YXRpYyBib29sZWFuIGdsb2JhbEFjdGlvbl9tZW51QnV0dG9uICgpIHsKKyAgICByZXR1cm4gbmV3IEtleUhhbmRsZXIoS2V5RXZlbnQuS0VZQ09ERV9NRU5VKSB7CisgICAgfS5oYW5kbGVLZXkoKTsKKyAgfQorCisgIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBnbG9iYWxBY3Rpb25fbG9nU2NyZWVuICgpIHsKKyAgICB0cnkgeworICAgICAgU2NyZWVuTG9nZ2VyLmxvZ1RvRmlsZSgpOworICAgIH0gZmluYWxseSB7CisgICAgICBCcmFpbGxlTWVzc2FnZS5QTEFJTi5zaG93KCJzY3JlZW4gbG9nZ2VkIik7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7CisgIH0KKworICBwdWJsaWMgc3RhdGljIGJvb2xlYW4ga2V5SGFuZGxlcl9mdW5jdGlvbiAoaW50IGtleSkgeworICAgIHN3aXRjaCAoa2V5ICsgMSkgeworICAgICAgY2FzZSAgMTogcmV0dXJuIGdsb2JhbEFjdGlvbl9ob21lU2NyZWVuKCk7CisgICAgICBjYXNlICAyOiByZXR1cm4gZ2xvYmFsQWN0aW9uX2JhY2tCdXR0b24oKTsKKyAgICAgIGNhc2UgIDM6IHJldHVybiBnbG9iYWxBY3Rpb25fbm90aWZpY2F0aW9uc1NoYWRlKCk7CisgICAgICBjYXNlICA0OiByZXR1cm4gZ2xvYmFsQWN0aW9uX3JlY2VudEFwcGxpY2F0aW9ucygpOworICAgICAgY2FzZSAgNTogcmV0dXJuIGdsb2JhbEFjdGlvbl9icmFpbGxlQWN0aW9ucygpOworICAgICAgY2FzZSAgNjogcmV0dXJuIGdsb2JhbEFjdGlvbl90b0ZpcnN0SXRlbSgpOworICAgICAgY2FzZSAgNzogcmV0dXJuIGdsb2JhbEFjdGlvbl90b1ByZXZpb3VzSXRlbSgpOworICAgICAgY2FzZSAgODogcmV0dXJuIGdsb2JhbEFjdGlvbl90b05leHRJdGVtKCk7CisgICAgICBjYXNlICA5OiByZXR1cm4gZ2xvYmFsQWN0aW9uX3RvTGFzdEl0ZW0oKTsKKyAgICAgIGNhc2UgMTA6IHJldHVybiBnbG9iYWxBY3Rpb25fbWVudUJ1dHRvbigpOworICAgICAgY2FzZSAxMTogcmV0dXJuIGdsb2JhbEFjdGlvbl90b0FjdGl2ZVdpbmRvdygpOworICAgICAgY2FzZSAxMjogcmV0dXJuIGdsb2JhbEFjdGlvbl90b1ByZXZpb3VzV2luZG93KCk7CisgICAgICBjYXNlIDEzOiByZXR1cm4gZ2xvYmFsQWN0aW9uX3RvTmV4dFdpbmRvdygpOworICAgICAgY2FzZSAxNDogcmV0dXJuIGdsb2JhbEFjdGlvbl9zaG93V2luZG93VGl0bGUoKTsKKyAgICAgIGNhc2UgMTU6IHJldHVybiBnbG9iYWxBY3Rpb25fc2hvd1N0YXR1c0luZGljYXRvcnMoKTsKKyAgICAgIGNhc2UgMTY6IHJldHVybiBnbG9iYWxBY3Rpb25fbG9nU2NyZWVuKCk7CisgICAgICBkZWZhdWx0OiByZXR1cm4gZmFsc2U7CisgICAgfQorICB9CisKKyAgcHVibGljIHN0YXRpYyBib29sZWFuIHRleHRIYW5kbGVyX3NldFNlbGVjdGlvbiAoaW50IHN0YXJ0Q29sdW1uLCBpbnQgc3RhcnRSb3csIGludCBlbmRDb2x1bW4sIGludCBlbmRSb3cpIHsKKyAgICBSZW5kZXJlZFNjcmVlbiBzY3JlZW4gPSBTY3JlZW5Ecml2ZXIuZ2V0Q3VycmVudFJlbmRlcmVkU2NyZWVuKCk7CisgICAgaWYgKHNjcmVlbiA9PSBudWxsKSByZXR1cm4gZmFsc2U7CisKKyAgICBTY3JlZW5FbGVtZW50IGVsZW1lbnQgPSBzY3JlZW4uZmluZFNjcmVlbkVsZW1lbnQoc3RhcnRDb2x1bW4sIHN0YXJ0Um93KTsKKyAgICBpZiAoZWxlbWVudCA9PSBudWxsKSByZXR1cm4gZmFsc2U7CisKKyAgICB7CisgICAgICBTY3JlZW5FbGVtZW50IGVuZCA9IHNjcmVlbi5maW5kU2NyZWVuRWxlbWVudChlbmRDb2x1bW4sIGVuZFJvdyk7CisgICAgICBpZiAoZW5kICE9IGVsZW1lbnQpIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBBY2Nlc3NpYmlsaXR5Tm9kZUluZm8gbm9kZSA9IGVsZW1lbnQuZ2V0QWNjZXNzaWJpbGl0eU5vZGUoKTsKKyAgICBpZiAobm9kZSA9PSBudWxsKSByZXR1cm4gZmFsc2U7CisKKyAgICB0cnkgeworICAgICAgUmVjdCBsb2NhdGlvbiA9IGVsZW1lbnQuZ2V0QnJhaWxsZUxvY2F0aW9uKCk7CisgICAgICBpbnQgbGVmdCA9IGxvY2F0aW9uLmxlZnQ7CisgICAgICBpbnQgdG9wID0gbG9jYXRpb24udG9wOworCisgICAgICBpbnQgc3RhcnQgPSBlbGVtZW50LmdldFRleHRPZmZzZXQoKHN0YXJ0Q29sdW1uIC0gbGVmdCksIChzdGFydFJvdyAtIHRvcCkpOworICAgICAgaW50IGVuZCA9IGVsZW1lbnQuZ2V0VGV4dE9mZnNldCgoZW5kQ29sdW1uIC0gbGVmdCksIChlbmRSb3cgLSB0b3ApKSArIDE7CisKKyAgICAgIHJldHVybiBzZXRTZWxlY3Rpb24obm9kZSwgc3RhcnQsIGVuZCk7CisgICAgfSBmaW5hbGx5IHsKKyAgICAgIG5vZGUucmVjeWNsZSgpOworICAgICAgbm9kZSA9IG51bGw7CisgICAgfQorICB9CisKKyAgcHVibGljIGFic3RyYWN0IHN0YXRpYyBjbGFzcyBOb2RlSGFuZGxlciB7CisgICAgcHVibGljIGFic3RyYWN0IGJvb2xlYW4gaGFuZGxlTm9kZSAoQWNjZXNzaWJpbGl0eU5vZGVJbmZvIG5vZGUpOworCisgICAgcHVibGljIGZpbmFsIGJvb2xlYW4gaGFuZGxlTm9kZSAoKSB7CisgICAgICBBY2Nlc3NpYmlsaXR5Tm9kZUluZm8gbm9kZSA9IGdldEN1cnNvck5vZGUoKTsKKyAgICAgIGlmIChub2RlID09IG51bGwpIHJldHVybiBmYWxzZTsKKworICAgICAgdHJ5IHsKKyAgICAgICAgcmV0dXJuIGhhbmRsZU5vZGUobm9kZSk7CisgICAgICB9IGZpbmFsbHkgeworICAgICAgICBub2RlLnJlY3ljbGUoKTsKKyAgICAgICAgbm9kZSA9IG51bGw7CisgICAgICB9CisgICAgfQorCisgICAgcHVibGljIE5vZGVIYW5kbGVyICgpIHsKKyAgICB9CisgIH0KKworICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gdGV4dEhhbmRsZXJfc2VsZWN0QWxsICgpIHsKKyAgICByZXR1cm4gbmV3IE5vZGVIYW5kbGVyKCkgeworICAgICAgQE92ZXJyaWRlCisgICAgICBwdWJsaWMgYm9vbGVhbiBoYW5kbGVOb2RlIChBY2Nlc3NpYmlsaXR5Tm9kZUluZm8gbm9kZSkgeworICAgICAgICByZXR1cm4gc2V0U2VsZWN0aW9uKG5vZGUsIDAsIG5vZGUuZ2V0VGV4dCgpLmxlbmd0aCgpKTsKKyAgICAgIH0KKyAgICB9LmhhbmRsZU5vZGUoKTsKKyAgfQorCisgIHByaXZhdGUgc3RhdGljIGJvb2xlYW4gcGVyZm9ybU5vZGVBY3Rpb24gKGZpbmFsIGludCBhY3Rpb24pIHsKKyAgICByZXR1cm4gbmV3IE5vZGVIYW5kbGVyKCkgeworICAgICAgQE92ZXJyaWRlCisgICAgICBwdWJsaWMgYm9vbGVhbiBoYW5kbGVOb2RlIChBY2Nlc3NpYmlsaXR5Tm9kZUluZm8gbm9kZSkgeworICAgICAgICByZXR1cm4gbm9kZS5wZXJmb3JtQWN0aW9uKGFjdGlvbik7CisgICAgICB9CisgICAgfS5oYW5kbGVOb2RlKCk7CisgIH0KKworICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gdGV4dEhhbmRsZXJfY2xlYXJTZWxlY3Rpb24gKCkgeworICAgIGlmIChBUElUZXN0cy5oYXZlSmVsbHlCZWFuTVIyKSB7CisgICAgICByZXR1cm4gbmV3IE5vZGVIYW5kbGVyKCkgeworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHVibGljIGJvb2xlYW4gaGFuZGxlTm9kZSAoQWNjZXNzaWJpbGl0eU5vZGVJbmZvIG5vZGUpIHsKKyAgICAgICAgICBpbnQgc3RhcnQgPSBub2RlLmdldFRleHRTZWxlY3Rpb25TdGFydCgpOworICAgICAgICAgIGludCBlbmQgPSBub2RlLmdldFRleHRTZWxlY3Rpb25FbmQoKTsKKyAgICAgICAgICBpZiAoZW5kIDw9IHN0YXJ0KSByZXR1cm4gZmFsc2U7CisgICAgICAgICAgcmV0dXJuIHBsYWNlQ3Vyc29yKG5vZGUsIGVuZCk7CisgICAgICAgIH0KKyAgICAgIH0uaGFuZGxlTm9kZSgpOworICAgIH0KKworICAgIHJldHVybiBmYWxzZTsKKyAgfQorCisgIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiB0ZXh0SGFuZGxlcl9jb3B5U2VsZWN0aW9uICgpIHsKKyAgICBpZiAoQVBJVGVzdHMuaGF2ZUplbGx5QmVhbk1SMikgeworICAgICAgcmV0dXJuIHBlcmZvcm1Ob2RlQWN0aW9uKEFjY2Vzc2liaWxpdHlOb2RlSW5mby5BQ1RJT05fQ09QWSk7CisgICAgfQorCisgICAgcmV0dXJuIGZhbHNlOworICB9CisKKyAgcHVibGljIHN0YXRpYyBib29sZWFuIHRleHRIYW5kbGVyX2N1dFNlbGVjdGlvbiAoKSB7CisgICAgaWYgKEFQSVRlc3RzLmhhdmVKZWxseUJlYW5NUjIpIHsKKyAgICAgIHJldHVybiBwZXJmb3JtTm9kZUFjdGlvbihBY2Nlc3NpYmlsaXR5Tm9kZUluZm8uQUNUSU9OX0NVVCk7CisgICAgfQorCisgICAgcmV0dXJuIGZhbHNlOworICB9CisKKyAgcHVibGljIHN0YXRpYyBib29sZWFuIHRleHRIYW5kbGVyX3Bhc3RlQ2xpcGJvYXJkICgpIHsKKyAgICBpZiAoQVBJVGVzdHMuaGF2ZUplbGx5QmVhbk1SMikgeworICAgICAgcmV0dXJuIHBlcmZvcm1Ob2RlQWN0aW9uKEFjY2Vzc2liaWxpdHlOb2RlSW5mby5BQ1RJT05fUEFTVEUpOworICAgIH0KKworICAgIHJldHVybiBmYWxzZTsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvQW5kcm9pZC9HcmFkbGUvYXBwL3NyYy9tYWluL2phdmEvb3JnL2ExMXkvYnJsdHR5L2FuZHJvaWQvSW5wdXRTZXJ2aWNlLmphdmEgYi9BbmRyb2lkL0dyYWRsZS9hcHAvc3JjL21haW4vamF2YS9vcmcvYTExeS9icmx0dHkvYW5kcm9pZC9JbnB1dFNlcnZpY2UuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZWJkNzZlCi0tLSAvZGV2L251bGwKKysrIGIvQW5kcm9pZC9HcmFkbGUvYXBwL3NyYy9tYWluL2phdmEvb3JnL2ExMXkvYnJsdHR5L2FuZHJvaWQvSW5wdXRTZXJ2aWNlLmphdmEKQEAgLTAsMCArMSwyOTEgQEAKKy8qCisgKiBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorICogICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorICoKKyAqIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorICoKKyAqIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyAqLworCitwYWNrYWdlIG9yZy5hMTF5LmJybHR0eS5hbmRyb2lkOworCitpbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbnRleHQ7CitpbXBvcnQgYW5kcm9pZC5pbnB1dG1ldGhvZHNlcnZpY2UuSW5wdXRNZXRob2RTZXJ2aWNlOworaW1wb3J0IGFuZHJvaWQudXRpbC5Mb2c7CitpbXBvcnQgYW5kcm9pZC52aWV3LktleUV2ZW50OworaW1wb3J0IGFuZHJvaWQudmlldy5WaWV3Q29uZmlndXJhdGlvbjsKK2ltcG9ydCBhbmRyb2lkLnZpZXcuaW5wdXRtZXRob2QuRWRpdG9ySW5mbzsKK2ltcG9ydCBhbmRyb2lkLnZpZXcuaW5wdXRtZXRob2QuSW5wdXRDb25uZWN0aW9uOworaW1wb3J0IGFuZHJvaWQudmlldy5pbnB1dG1ldGhvZC5JbnB1dE1ldGhvZEluZm87CitpbXBvcnQgb3JnLmExMXkuYnJsdHR5LmNvcmUuKjsKKworcHVibGljIGNsYXNzIElucHV0U2VydmljZSBleHRlbmRzIElucHV0TWV0aG9kU2VydmljZSB7CisgIHByaXZhdGUgZmluYWwgc3RhdGljIFN0cmluZyBMT0dfVEFHID0gSW5wdXRTZXJ2aWNlLmNsYXNzLmdldE5hbWUoKTsKKworICBwcml2YXRlIHN0YXRpYyB2b2xhdGlsZSBJbnB1dFNlcnZpY2UgaW5wdXRTZXJ2aWNlID0gbnVsbDsKKworICBwdWJsaWMgc3RhdGljIElucHV0U2VydmljZSBnZXRJbnB1dFNlcnZpY2UgKCkgeworICAgIHJldHVybiBpbnB1dFNlcnZpY2U7CisgIH0KKworICBAT3ZlcnJpZGUKKyAgcHVibGljIHZvaWQgb25DcmVhdGUgKCkgeworICAgIHN1cGVyLm9uQ3JlYXRlKCk7CisgICAgaW5wdXRTZXJ2aWNlID0gdGhpczsKKyAgICBMb2cuZChMT0dfVEFHLCAiaW5wdXQgc2VydmljZSBzdGFydGVkIik7CisgIH0KKworICBAT3ZlcnJpZGUKKyAgcHVibGljIHZvaWQgb25EZXN0cm95ICgpIHsKKyAgICB0cnkgeworICAgICAgaW5wdXRTZXJ2aWNlID0gbnVsbDsKKyAgICAgIExvZy5kKExPR19UQUcsICJpbnB1dCBzZXJ2aWNlIHN0b3BwZWQiKTsKKyAgICB9IGZpbmFsbHkgeworICAgICAgc3VwZXIub25EZXN0cm95KCk7CisgICAgfQorICB9CisKKyAgQE92ZXJyaWRlCisgIHB1YmxpYyB2b2lkIG9uQmluZElucHV0ICgpIHsKKyAgICBMb2cuZChMT0dfVEFHLCAiaW5wdXQgc2VydmljZSBib3VuZCIpOworICB9CisKKyAgQE92ZXJyaWRlCisgIHB1YmxpYyB2b2lkIG9uVW5iaW5kSW5wdXQgKCkgeworICAgIExvZy5kKExPR19UQUcsICJpbnB1dCBzZXJ2aWNlIHVuYm91bmQiKTsKKyAgfQorCisgIEBPdmVycmlkZQorICBwdWJsaWMgdm9pZCBvblN0YXJ0SW5wdXQgKEVkaXRvckluZm8gaW5mbywgYm9vbGVhbiByZXN0YXJ0aW5nKSB7CisgICAgTG9nLmQoTE9HX1RBRywgImlucHV0IHNlcnZpY2UgIiArIChyZXN0YXJ0aW5nPyAicmVjb25uZWN0ZWQiOiAiY29ubmVjdGVkIikpOworICAgIGlmIChpbmZvLmFjdGlvbkxhYmVsICE9IG51bGwpIExvZy5kKExPR19UQUcsICJhY3Rpb24gbGFiZWw6ICIgKyBpbmZvLmFjdGlvbkxhYmVsKTsKKyAgICBMb2cuZChMT0dfVEFHLCAiYWN0aW9uIGlkOiAiICsgaW5mby5hY3Rpb25JZCk7CisgIH0KKworICBAT3ZlcnJpZGUKKyAgcHVibGljIHZvaWQgb25GaW5pc2hJbnB1dCAoKSB7CisgICAgTG9nLmQoTE9HX1RBRywgImlucHV0IHNlcnZpY2UgZGlzY29ubmVjdGVkIik7CisgIH0KKworICBwdWJsaWMgc3RhdGljIHZvaWQgbG9nS2V5RXZlbnQgKGludCBjb2RlLCBib29sZWFuIHByZXNzLCBTdHJpbmcgZGVzY3JpcHRpb24pIHsKKyAgICBpZiAoQXBwbGljYXRpb25TZXR0aW5ncy5MT0dfS0VZQk9BUkRfRVZFTlRTKSB7CisgICAgICBTdHJpbmdCdWlsZGVyIHNiID0gbmV3IFN0cmluZ0J1aWxkZXIoKTsKKworICAgICAgc2IuYXBwZW5kKCJrZXkgIik7CisgICAgICBzYi5hcHBlbmQoKHByZXNzPyAicHJlc3MiOiAicmVsZWFzZSIpKTsKKyAgICAgIHNiLmFwcGVuZCgnICcpOworICAgICAgc2IuYXBwZW5kKGRlc2NyaXB0aW9uKTsKKworICAgICAgc2IuYXBwZW5kKCI6ICIpOworICAgICAgc2IuYXBwZW5kKGNvZGUpOworCisgICAgICBzYi5hcHBlbmQoIiAoIik7CisgICAgICBzYi5hcHBlbmQoS2V5RXZlbnQua2V5Q29kZVRvU3RyaW5nKGNvZGUpKTsKKyAgICAgIHNiLmFwcGVuZCgiKSIpOworCisgICAgICBMb2cuZChMT0dfVEFHLCBzYi50b1N0cmluZygpKTsKKyAgICB9CisgIH0KKworICBwdWJsaWMgc3RhdGljIHZvaWQgbG9nS2V5RXZlbnRSZWNlaXZlZCAoaW50IGNvZGUsIGJvb2xlYW4gcHJlc3MpIHsKKyAgICBsb2dLZXlFdmVudChjb2RlLCBwcmVzcywgInJlY2VpdmVkIik7CisgIH0KKworICBwdWJsaWMgc3RhdGljIHZvaWQgbG9nS2V5RXZlbnRTZW50IChpbnQgY29kZSwgYm9vbGVhbiBwcmVzcykgeworICAgIGxvZ0tleUV2ZW50KGNvZGUsIHByZXNzLCAic2VudCIpOworICB9CisKKyAgcHVibGljIGZpbmFsIG5hdGl2ZSBib29sZWFuIGhhbmRsZUtleUV2ZW50IChpbnQgY29kZSwgYm9vbGVhbiBwcmVzcyk7CisKKyAgcHVibGljIHZvaWQgZm9yd2FyZEtleUV2ZW50IChpbnQgY29kZSwgYm9vbGVhbiBwcmVzcykgeworICAgIElucHV0Q29ubmVjdGlvbiBjb25uZWN0aW9uID0gZ2V0Q3VycmVudElucHV0Q29ubmVjdGlvbigpOworCisgICAgaWYgKGNvbm5lY3Rpb24gIT0gbnVsbCkgeworICAgICAgaW50IGFjdGlvbiA9IHByZXNzPyBLZXlFdmVudC5BQ1RJT05fRE9XTjogS2V5RXZlbnQuQUNUSU9OX1VQOworICAgICAgS2V5RXZlbnQgZXZlbnQgPSBuZXcgS2V5RXZlbnQoYWN0aW9uLCBjb2RlKTsKKyAgICAgIGV2ZW50ID0gS2V5RXZlbnQuY2hhbmdlRmxhZ3MoZXZlbnQsIEtleUV2ZW50LkZMQUdfU09GVF9LRVlCT0FSRCk7CisKKyAgICAgIGlmIChjb25uZWN0aW9uLnNlbmRLZXlFdmVudChldmVudCkpIHsKKyAgICAgICAgbG9nS2V5RXZlbnQoY29kZSwgcHJlc3MsICJmb3J3YXJkZWQiKTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIGxvZ0tleUV2ZW50KGNvZGUsIHByZXNzLCAibm90IGZvcndhcmRlZCIpOworICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICBsb2dLZXlFdmVudChjb2RlLCBwcmVzcywgInVuZm9yd2FyZGFibGUiKTsKKyAgICB9CisgIH0KKworICBwdWJsaWMgYm9vbGVhbiBhY2NlcHRLZXlFdmVudCAoZmluYWwgaW50IGNvZGUsIGZpbmFsIGJvb2xlYW4gcHJlc3MpIHsKKyAgICBzd2l0Y2ggKGNvZGUpIHsKKyAgICAgIGNhc2UgS2V5RXZlbnQuS0VZQ09ERV9QT1dFUjoKKyAgICAgIGNhc2UgS2V5RXZlbnQuS0VZQ09ERV9IT01FOgorICAgICAgY2FzZSBLZXlFdmVudC5LRVlDT0RFX0JBQ0s6CisgICAgICBjYXNlIEtleUV2ZW50LktFWUNPREVfTUVOVToKKyAgICAgICAgbG9nS2V5RXZlbnQoY29kZSwgcHJlc3MsICJyZWplY3RlZCIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIGxvZ0tleUV2ZW50KGNvZGUsIHByZXNzLCAiYWNjZXB0ZWQiKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgaWYgKEJyYWlsbGVTZXJ2aWNlLmdldEJyYWlsbGVTZXJ2aWNlKCkgPT0gbnVsbCkgeworICAgICAgTG9nLncoTE9HX1RBRywgImJyYWlsbGUgc2VydmljZSBub3Qgc3RhcnRlZCIpOworICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIENvcmVXcmFwcGVyLnJ1bk9uQ29yZVRocmVhZCgKKyAgICAgIG5ldyBSdW5uYWJsZSgpIHsKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyB2b2lkIHJ1biAoKSB7CisgICAgICAgICAgbG9nS2V5RXZlbnQoY29kZSwgcHJlc3MsICJkZWxpdmVyZWQiKTsKKworICAgICAgICAgIGlmIChoYW5kbGVLZXlFdmVudChjb2RlLCBwcmVzcykpIHsKKyAgICAgICAgICAgIGxvZ0tleUV2ZW50KGNvZGUsIHByZXNzLCAiaGFuZGxlZCIpOworICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBmb3J3YXJkS2V5RXZlbnQoY29kZSwgcHJlc3MpOworICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgfQorICAgICk7CisKKyAgICByZXR1cm4gdHJ1ZTsKKyAgfQorCisgIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBpc1N5c3RlbUtleUNvZGUgKGludCBjb2RlKSB7CisgICAgc3dpdGNoIChjb2RlKSB7CisgICAgICBjYXNlIEtleUV2ZW50LktFWUNPREVfSE9NRToKKyAgICAgIGNhc2UgS2V5RXZlbnQuS0VZQ09ERV9CQUNLOgorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgfQorCisgIEBPdmVycmlkZQorICBwdWJsaWMgYm9vbGVhbiBvbktleURvd24gKGludCBjb2RlLCBLZXlFdmVudCBldmVudCkgeworICAgIGxvZ0tleUV2ZW50UmVjZWl2ZWQoY29kZSwgdHJ1ZSk7CisKKyAgICBpZiAoIWlzU3lzdGVtS2V5Q29kZShjb2RlKSkgeworICAgICAgaWYgKGFjY2VwdEtleUV2ZW50KGNvZGUsIHRydWUpKSB7CisgICAgICAgIHJldHVybiB0cnVlOworICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBzdXBlci5vbktleURvd24oY29kZSwgZXZlbnQpOworICB9CisKKyAgQE92ZXJyaWRlCisgIHB1YmxpYyBib29sZWFuIG9uS2V5VXAgKGludCBjb2RlLCBLZXlFdmVudCBldmVudCkgeworICAgIGxvZ0tleUV2ZW50UmVjZWl2ZWQoY29kZSwgZmFsc2UpOworCisgICAgaWYgKCFpc1N5c3RlbUtleUNvZGUoY29kZSkpIHsKKyAgICAgIGlmIChhY2NlcHRLZXlFdmVudChjb2RlLCBmYWxzZSkpIHsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHN1cGVyLm9uS2V5VXAoY29kZSwgZXZlbnQpOworICB9CisKKyAgcHVibGljIHN0YXRpYyBJbnB1dE1ldGhvZEluZm8gZ2V0SW5wdXRNZXRob2RJbmZvIChDbGFzcyBjbGFzc09iamVjdCkgeworICAgIFN0cmluZyBjbGFzc05hbWUgPSBjbGFzc09iamVjdC5nZXROYW1lKCk7CisKKyAgICBmb3IgKElucHV0TWV0aG9kSW5mbyBpbmZvIDogQXBwbGljYXRpb25VdGlsaXRpZXMuZ2V0SW5wdXRNZXRob2RNYW5hZ2VyKCkuZ2V0RW5hYmxlZElucHV0TWV0aG9kTGlzdCgpKSB7CisgICAgICBpZiAoaW5mby5nZXRDb21wb25lbnQoKS5nZXRDbGFzc05hbWUoKS5lcXVhbHMoY2xhc3NOYW1lKSkgeworICAgICAgICByZXR1cm4gaW5mbzsKKyAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gbnVsbDsKKyAgfQorCisgIHB1YmxpYyBzdGF0aWMgSW5wdXRNZXRob2RJbmZvIGdldElucHV0TWV0aG9kSW5mbyAoKSB7CisgICAgcmV0dXJuIGdldElucHV0TWV0aG9kSW5mbyhJbnB1dFNlcnZpY2UuY2xhc3MpOworICB9CisKKyAgcHVibGljIHN0YXRpYyBib29sZWFuIGlzRW5hYmxlZCAoKSB7CisgICAgcmV0dXJuIGdldElucHV0TWV0aG9kSW5mbygpICE9IG51bGw7CisgIH0KKworICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gaXNTZWxlY3RlZCAoKSB7CisgICAgSW5wdXRNZXRob2RJbmZvIGluZm8gPSBnZXRJbnB1dE1ldGhvZEluZm8oKTsKKworICAgIGlmIChpbmZvICE9IG51bGwpIHsKKyAgICAgIGlmIChpbmZvLmdldElkKCkuZXF1YWxzKEFwcGxpY2F0aW9uVXRpbGl0aWVzLmdldFNlbGVjdGVkSW5wdXRNZXRob2RJZGVudGlmaWVyKCkpKSB7CisgICAgICAgIHJldHVybiB0cnVlOworICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBmYWxzZTsKKyAgfQorCisgIHB1YmxpYyBzdGF0aWMgdm9pZCBzd2l0Y2hJbnB1dE1ldGhvZCAoKSB7CisgICAgTG9nLncoTE9HX1RBRywgInNob3dpbmcgaW5wdXQgbWV0aG9kIHBpY2tlciIpOworICAgIEFwcGxpY2F0aW9uVXRpbGl0aWVzLmdldElucHV0TWV0aG9kTWFuYWdlcigpLnNob3dJbnB1dE1ldGhvZFBpY2tlcigpOworICB9CisKKyAgcHJpdmF0ZSBzdGF0aWMgdm9pZCByZXBvcnRJbnB1dFByb2JsZW0gKGludCBtZXNzYWdlKSB7CisgICAgQ29udGV4dCBjb250ZXh0ID0gQnJhaWxsZUFwcGxpY2F0aW9uLmdldCgpOworICAgIExvZy53KExPR19UQUcsIGNvbnRleHQuZ2V0UmVzb3VyY2VzKCkuZ2V0U3RyaW5nKG1lc3NhZ2UpKTsKKyAgICBCcmFpbGxlTWVzc2FnZS5XQVJOSU5HLnNob3coY29udGV4dC5nZXRTdHJpbmcobWVzc2FnZSkpOworICB9CisKKyAgcHVibGljIHN0YXRpYyBJbnB1dENvbm5lY3Rpb24gZ2V0SW5wdXRDb25uZWN0aW9uICgpIHsKKyAgICBJbnB1dFNlcnZpY2Ugc2VydmljZSA9IElucHV0U2VydmljZS5nZXRJbnB1dFNlcnZpY2UoKTsKKworICAgIGlmIChzZXJ2aWNlICE9IG51bGwpIHsKKyAgICAgIElucHV0Q29ubmVjdGlvbiBjb25uZWN0aW9uID0gc2VydmljZS5nZXRDdXJyZW50SW5wdXRDb25uZWN0aW9uKCk7CisgICAgICBpZiAoY29ubmVjdGlvbiAhPSBudWxsKSByZXR1cm4gY29ubmVjdGlvbjsKKyAgICAgIHJlcG9ydElucHV0UHJvYmxlbShSLnN0cmluZy5pbnB1dFNlcnZpY2Vfbm90X2Nvbm5lY3RlZCk7CisgICAgfSBlbHNlIGlmIChpc1NlbGVjdGVkKCkpIHsKKyAgICAgIHJlcG9ydElucHV0UHJvYmxlbShSLnN0cmluZy5pbnB1dFNlcnZpY2Vfbm90X3N0YXJ0ZWQpOworICAgIH0gZWxzZSBpZiAoaXNFbmFibGVkKCkpIHsKKyAgICAgIHJlcG9ydElucHV0UHJvYmxlbShSLnN0cmluZy5pbnB1dFNlcnZpY2Vfbm90X3NlbGVjdGVkKTsKKyAgICB9IGVsc2UgeworICAgICAgcmVwb3J0SW5wdXRQcm9ibGVtKFIuc3RyaW5nLmlucHV0U2VydmljZV9ub3RfZW5hYmxlZCk7CisgICAgfQorCisgICAgcmV0dXJuIG51bGw7CisgIH0KKworICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gaW5qZWN0S2V5IChJbnB1dENvbm5lY3Rpb24gY29ubmVjdGlvbiwgaW50IGtleUNvZGUsIGJvb2xlYW4gbG9uZ1ByZXNzKSB7CisgICAgaWYgKGNvbm5lY3Rpb24uc2VuZEtleUV2ZW50KG5ldyBLZXlFdmVudChLZXlFdmVudC5BQ1RJT05fRE9XTiwga2V5Q29kZSkpKSB7CisgICAgICBsb2dLZXlFdmVudFNlbnQoa2V5Q29kZSwgdHJ1ZSk7CisKKyAgICAgIGlmIChsb25nUHJlc3MpIHsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICBUaHJlYWQuc2xlZXAoVmlld0NvbmZpZ3VyYXRpb24uZ2V0TG9uZ1ByZXNzVGltZW91dCgpICsgQXBwbGljYXRpb25QYXJhbWV0ZXJzLkxPTkdfUFJFU1NfREVMQVkpOworICAgICAgICB9IGNhdGNoIChJbnRlcnJ1cHRlZEV4Y2VwdGlvbiBleGNlcHRpb24pIHsKKyAgICAgICAgfQorICAgICAgfQorCisgICAgICBpZiAoY29ubmVjdGlvbi5zZW5kS2V5RXZlbnQobmV3IEtleUV2ZW50KEtleUV2ZW50LkFDVElPTl9VUCwga2V5Q29kZSkpKSB7CisgICAgICAgIGxvZ0tleUV2ZW50U2VudChrZXlDb2RlLCBmYWxzZSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBmYWxzZTsKKyAgfQorCisgIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBpbmplY3RLZXkgKGludCBrZXlDb2RlLCBib29sZWFuIGxvbmdQcmVzcykgeworICAgIElucHV0Q29ubmVjdGlvbiBjb25uZWN0aW9uID0gZ2V0SW5wdXRDb25uZWN0aW9uKCk7CisgICAgaWYgKGNvbm5lY3Rpb24gPT0gbnVsbCkgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiBpbmplY3RLZXkoY29ubmVjdGlvbiwga2V5Q29kZSwgbG9uZ1ByZXNzKTsKKyAgfQorCisgIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBpbmplY3RLZXkgKGludCBrZXlDb2RlKSB7CisgICAgcmV0dXJuIGluamVjdEtleShrZXlDb2RlLCBmYWxzZSk7CisgIH0KK30KZGlmZiAtLWdpdCBhL0FuZHJvaWQvR3JhZGxlL2FwcC9zcmMvbWFpbi9qYXZhL29yZy9hMTF5L2JybHR0eS9hbmRyb2lkL0xhbmd1YWdlVXRpbGl0aWVzLmphdmEgYi9BbmRyb2lkL0dyYWRsZS9hcHAvc3JjL21haW4vamF2YS9vcmcvYTExeS9icmx0dHkvYW5kcm9pZC9MYW5ndWFnZVV0aWxpdGllcy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdhNTAzNmQKLS0tIC9kZXYvbnVsbAorKysgYi9BbmRyb2lkL0dyYWRsZS9hcHAvc3JjL21haW4vamF2YS9vcmcvYTExeS9icmx0dHkvYW5kcm9pZC9MYW5ndWFnZVV0aWxpdGllcy5qYXZhCkBAIC0wLDAgKzEsMTEzIEBACisvKgorICogQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyAqICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyAqCisgKiBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorICoKKyAqIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyAqCisgKiBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisgKi8KKworcGFja2FnZSBvcmcuYTExeS5icmx0dHkuYW5kcm9pZDsKKworaW1wb3J0IGFuZHJvaWQudXRpbC5Mb2c7CitpbXBvcnQgamF2YS5sYW5nLnJlZmxlY3QuKjsKKworcHVibGljIGZpbmFsIGNsYXNzIExhbmd1YWdlVXRpbGl0aWVzIHsKKyAgcHJpdmF0ZSBmaW5hbCBzdGF0aWMgU3RyaW5nIExPR19UQUcgPSBMYW5ndWFnZVV0aWxpdGllcy5jbGFzcy5nZXROYW1lKCk7CisKKyAgcHVibGljIHN0YXRpYyBTdHJpbmdbXSBuZXdTdHJpbmdBcnJheSAoQ2hhclNlcXVlbmNlW10gY2hhclNlcXVlbmNlcykgeworICAgIGludCBzaXplID0gY2hhclNlcXVlbmNlcy5sZW5ndGg7CisgICAgU3RyaW5nW10gc3RyaW5ncyA9IG5ldyBTdHJpbmdbc2l6ZV07CisKKyAgICBmb3IgKGludCBpPTA7IGk8c2l6ZTsgaSs9MSkgeworICAgICAgc3RyaW5nc1tpXSA9IGNoYXJTZXF1ZW5jZXNbaV0udG9TdHJpbmcoKTsKKyAgICB9CisKKyAgICByZXR1cm4gc3RyaW5nczsKKyAgfQorCisgIHB1YmxpYyBzdGF0aWMgT2JqZWN0IG5ld0luc3RhbmNlIChTdHJpbmcgaW5zdGFuY2VUeXBlLCBTdHJpbmdbXSBhcmd1bWVudFR5cGVzLCBPYmplY3RbXSBhcmd1bWVudHMpIHsKKyAgICBDbGFzcyBpbnN0YW5jZUNsYXNzOworICAgIHRyeSB7CisgICAgICBpbnN0YW5jZUNsYXNzID0gQ2xhc3MuZm9yTmFtZShpbnN0YW5jZVR5cGUpOworICAgIH0gY2F0Y2ggKENsYXNzTm90Rm91bmRFeGNlcHRpb24gZXhjZXB0aW9uKSB7CisgICAgICBMb2cudyhMT0dfVEFHLCAiY2xhc3Mgbm90IGZvdW5kOiAiICsgaW5zdGFuY2VUeXBlKTsKKyAgICAgIHJldHVybiBudWxsOworICAgIH0KKworICAgIENsYXNzW10gYXJndW1lbnRDbGFzc2VzID0gbmV3IENsYXNzW2FyZ3VtZW50VHlwZXMubGVuZ3RoXTsKKyAgICBmb3IgKGludCBpPTA7IGk8YXJndW1lbnRUeXBlcy5sZW5ndGg7IGkrPTEpIHsKKyAgICAgIFN0cmluZyB0eXBlID0gYXJndW1lbnRUeXBlc1tpXTsKKworICAgICAgaWYgKHR5cGUgPT0gbnVsbCkgeworICAgICAgICBhcmd1bWVudENsYXNzZXNbaV0gPSBhcmd1bWVudHNbaV0uZ2V0Q2xhc3MoKTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgYXJndW1lbnRDbGFzc2VzW2ldID0gQ2xhc3MuZm9yTmFtZSh0eXBlKTsKKyAgICAgICAgfSBjYXRjaCAoQ2xhc3NOb3RGb3VuZEV4Y2VwdGlvbiBleGNlcHRpb24pIHsKKyAgICAgICAgICBMb2cudyhMT0dfVEFHLCAiY2xhc3Mgbm90IGZvdW5kOiAiICsgdHlwZSk7CisgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9CisKKyAgICBDb25zdHJ1Y3RvciBjb25zdHJ1Y3RvcjsKKyAgICB0cnkgeworICAgICAgY29uc3RydWN0b3IgPSBpbnN0YW5jZUNsYXNzLmdldENvbnN0cnVjdG9yKGFyZ3VtZW50Q2xhc3Nlcyk7CisgICAgfSBjYXRjaCAoTm9TdWNoTWV0aG9kRXhjZXB0aW9uIGV4Y2VwdGlvbikgeworICAgICAgTG9nLncoTE9HX1RBRywgImNvbnN0cnVjdG9yIG5vdCBmb3VuZDogIiArIGluc3RhbmNlVHlwZSk7CisgICAgICByZXR1cm4gbnVsbDsKKyAgICB9CisKKyAgICBPYmplY3QgaW5zdGFuY2U7CisgICAgdHJ5IHsKKyAgICAgIGluc3RhbmNlID0gY29uc3RydWN0b3IubmV3SW5zdGFuY2UoYXJndW1lbnRzKTsKKyAgICB9IGNhdGNoIChqYXZhLmxhbmcuSW5zdGFudGlhdGlvbkV4Y2VwdGlvbiBleGNlcHRpb24pIHsKKyAgICAgIExvZy53KExPR19UQUcsICJ1bmluc3RhbnRpYXRhYmxlIGNsYXNzOiAiICsgaW5zdGFuY2VUeXBlKTsKKyAgICAgIHJldHVybiBudWxsOworICAgIH0gY2F0Y2ggKElsbGVnYWxBY2Nlc3NFeGNlcHRpb24gZXhjZXB0aW9uKSB7CisgICAgICBMb2cudyhMT0dfVEFHLCAiaW5hY2Nlc3NpYmxlIGNvbnN0cnVjdG9yOiAiICsgaW5zdGFuY2VUeXBlKTsKKyAgICAgIHJldHVybiBudWxsOworICAgIH0gY2F0Y2ggKEludm9jYXRpb25UYXJnZXRFeGNlcHRpb24gZXhjZXB0aW9uKSB7CisgICAgICBMb2cudyhMT0dfVEFHLCAiY29uc3RydWN0aW9uIGZhaWxlZDogIiArIGluc3RhbmNlVHlwZSk7CisgICAgICByZXR1cm4gbnVsbDsKKyAgICB9CisKKyAgICByZXR1cm4gaW5zdGFuY2U7CisgIH0KKworICBwdWJsaWMgc3RhdGljIE9iamVjdCBuZXdJbnN0YW5jZSAoU3RyaW5nIGluc3RhbmNlVHlwZSkgeworICAgIHJldHVybiBuZXdJbnN0YW5jZShpbnN0YW5jZVR5cGUsIG5ldyBTdHJpbmdbMF0sIG5ldyBPYmplY3RbMF0pOworICB9CisKKyAgcHVibGljIHN0YXRpYyBib29sZWFuIGNhbkFzc2lnbiAoQ2xhc3MgdGFyZ2V0LCBDbGFzcyBzb3VyY2UpIHsKKyAgICByZXR1cm4gdGFyZ2V0LmlzQXNzaWduYWJsZUZyb20oc291cmNlKTsKKyAgfQorCisgIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBjYW5Bc3NpZ24gKENsYXNzIHRhcmdldCwgU3RyaW5nIHNvdXJjZSkgeworICAgIHRyeSB7CisgICAgICByZXR1cm4gY2FuQXNzaWduKHRhcmdldCwgQ2xhc3MuZm9yTmFtZShzb3VyY2UpKTsKKyAgICB9IGNhdGNoIChDbGFzc05vdEZvdW5kRXhjZXB0aW9uIGV4Y2VwdGlvbikgeworICAgIH0KKworICAgIHJldHVybiBmYWxzZTsKKyAgfQorCisgIHB1YmxpYyBzdGF0aWMgaW50IGNvbXBhcmUgKGludCB2YWx1ZTEsIGludCB2YWx1ZTIpIHsKKyAgICBpZiAodmFsdWUxIDwgdmFsdWUyKSByZXR1cm4gLTE7CisgICAgaWYgKHZhbHVlMSA+IHZhbHVlMikgcmV0dXJuIDE7CisgICAgcmV0dXJuIDA7CisgIH0KKworICBwcml2YXRlIExhbmd1YWdlVXRpbGl0aWVzICgpIHsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvQW5kcm9pZC9HcmFkbGUvYXBwL3NyYy9tYWluL2phdmEvb3JnL2ExMXkvYnJsdHR5L2FuZHJvaWQvTGlzdEJyYWlsbGVSZW5kZXJlci5qYXZhIGIvQW5kcm9pZC9HcmFkbGUvYXBwL3NyYy9tYWluL2phdmEvb3JnL2ExMXkvYnJsdHR5L2FuZHJvaWQvTGlzdEJyYWlsbGVSZW5kZXJlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhlZWE1NzMKLS0tIC9kZXYvbnVsbAorKysgYi9BbmRyb2lkL0dyYWRsZS9hcHAvc3JjL21haW4vamF2YS9vcmcvYTExeS9icmx0dHkvYW5kcm9pZC9MaXN0QnJhaWxsZVJlbmRlcmVyLmphdmEKQEAgLTAsMCArMSw0NCBAQAorLyoKKyAqIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisgKiAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisgKgorICogQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKK3BhY2thZ2Ugb3JnLmExMXkuYnJsdHR5LmFuZHJvaWQ7CisKKworcHVibGljIGNsYXNzIExpc3RCcmFpbGxlUmVuZGVyZXIgZXh0ZW5kcyBCcmFpbGxlUmVuZGVyZXIgeworICBAT3ZlcnJpZGUKKyAgcHJvdGVjdGVkIGZpbmFsIHZvaWQgc2V0QnJhaWxsZUxvY2F0aW9ucyAoU2NyZWVuRWxlbWVudExpc3QgZWxlbWVudHMpIHsKKyAgICBpbnQgbGVmdCA9IDA7CisgICAgaW50IHRvcCA9IDA7CisKKyAgICBmb3IgKFNjcmVlbkVsZW1lbnQgZWxlbWVudCA6IGVsZW1lbnRzKSB7CisgICAgICBTdHJpbmdbXSB0ZXh0ID0gZWxlbWVudC5nZXRCcmFpbGxlVGV4dCgpOworCisgICAgICBpZiAodGV4dCAhPSBudWxsKSB7CisgICAgICAgIGludCByaWdodCA9IGxlZnQgKyBnZXRUZXh0V2lkdGgodGV4dCkgLSAxOworICAgICAgICBpbnQgYm90dG9tID0gdG9wICsgdGV4dC5sZW5ndGggLSAxOworCisgICAgICAgIGVsZW1lbnQuc2V0QnJhaWxsZUxvY2F0aW9uKGxlZnQsIHRvcCwgcmlnaHQsIGJvdHRvbSk7CisgICAgICAgIHRvcCA9IGJvdHRvbSArIDE7CisgICAgICB9CisgICAgfQorICB9CisKKyAgcHVibGljIExpc3RCcmFpbGxlUmVuZGVyZXIgKCkgeworICAgIHN1cGVyKCk7CisgIH0KK30KZGlmZiAtLWdpdCBhL0FuZHJvaWQvR3JhZGxlL2FwcC9zcmMvbWFpbi9qYXZhL29yZy9hMTF5L2JybHR0eS9hbmRyb2lkL0xvY2tVdGlsaXRpZXMuamF2YSBiL0FuZHJvaWQvR3JhZGxlL2FwcC9zcmMvbWFpbi9qYXZhL29yZy9hMTF5L2JybHR0eS9hbmRyb2lkL0xvY2tVdGlsaXRpZXMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZmQ1ZDkzCi0tLSAvZGV2L251bGwKKysrIGIvQW5kcm9pZC9HcmFkbGUvYXBwL3NyYy9tYWluL2phdmEvb3JnL2ExMXkvYnJsdHR5L2FuZHJvaWQvTG9ja1V0aWxpdGllcy5qYXZhCkBAIC0wLDAgKzEsNTAgQEAKKy8qCisgKiBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorICogICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorICoKKyAqIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorICoKKyAqIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyAqLworCitwYWNrYWdlIG9yZy5hMTF5LmJybHR0eS5hbmRyb2lkOworCitpbXBvcnQgYW5kcm9pZC5vcy5Qb3dlck1hbmFnZXI7CitpbXBvcnQgamF2YS51dGlsLmNvbmN1cnJlbnQuVGltZVVuaXQ7CisKK3B1YmxpYyBhYnN0cmFjdCBjbGFzcyBMb2NrVXRpbGl0aWVzIHsKKyAgcHJpdmF0ZSBMb2NrVXRpbGl0aWVzICgpIHsKKyAgfQorCisgIHByaXZhdGUgZmluYWwgc3RhdGljIFBvd2VyTWFuYWdlci5XYWtlTG9jayB3YWtlTG9jayA9CisgICAgQXBwbGljYXRpb25VdGlsaXRpZXMuZ2V0UG93ZXJNYW5hZ2VyKCkubmV3V2FrZUxvY2soCisgICAgICBQb3dlck1hbmFnZXIuU0NSRUVOX0RJTV9XQUtFX0xPQ0sgfCBQb3dlck1hbmFnZXIuT05fQUZURVJfUkVMRUFTRSwKKyAgICAgIEJyYWlsbGVBcHBsaWNhdGlvbi5nZXQoKS5nZXRTdHJpbmcoUi5zdHJpbmcuYXBwX25hbWUpCisgICAgKTsKKworICBwcml2YXRlIGZpbmFsIHN0YXRpYyBsb25nIExPQ0tfVElNRU9VVCA9IFRpbWVVbml0LlNFQ09ORFMudG9NaWxsaXMoMSk7CisKKyAgcHVibGljIHN0YXRpYyBib29sZWFuIGlzTG9ja2VkICgpIHsKKyAgICBpZiAoIUFwcGxpY2F0aW9uVXRpbGl0aWVzLmdldFBvd2VyTWFuYWdlcigpLmlzU2NyZWVuT24oKSkgeworICAgICAgaWYgKEFwcGxpY2F0aW9uVXRpbGl0aWVzLmdldEtleWd1YXJkTWFuYWdlcigpLmluS2V5Z3VhcmRSZXN0cmljdGVkSW5wdXRNb2RlKCkpIHsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIGZhbHNlOworICB9CisKKyAgcHVibGljIHN0YXRpYyB2b2lkIHJlc2V0VGltZXIgKCkgeworICAgIHdha2VMb2NrLmFjcXVpcmUoTE9DS19USU1FT1VUKTsKKyAgICB3YWtlTG9jay5yZWxlYXNlKCk7CisgIH0KK30KZGlmZiAtLWdpdCBhL0FuZHJvaWQvR3JhZGxlL2FwcC9zcmMvbWFpbi9qYXZhL29yZy9hMTF5L2JybHR0eS9hbmRyb2lkL0xvZ2dlci5qYXZhIGIvQW5kcm9pZC9HcmFkbGUvYXBwL3NyYy9tYWluL2phdmEvb3JnL2ExMXkvYnJsdHR5L2FuZHJvaWQvTG9nZ2VyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2ZkZDg2OAotLS0gL2Rldi9udWxsCisrKyBiL0FuZHJvaWQvR3JhZGxlL2FwcC9zcmMvbWFpbi9qYXZhL29yZy9hMTF5L2JybHR0eS9hbmRyb2lkL0xvZ2dlci5qYXZhCkBAIC0wLDAgKzEsNTggQEAKKy8qCisgKiBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorICogICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorICoKKyAqIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorICoKKyAqIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyAqLworCitwYWNrYWdlIG9yZy5hMTF5LmJybHR0eS5hbmRyb2lkOworCitpbXBvcnQgYW5kcm9pZC51dGlsLkxvZzsKK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworCitwdWJsaWMgYWJzdHJhY3QgY2xhc3MgTG9nZ2VyIHsKKyAgcHJpdmF0ZSBmaW5hbCBzdGF0aWMgU3RyaW5nIExPR19UQUcgPSBMb2dnZXIuY2xhc3MuZ2V0TmFtZSgpOworCisgIHByb3RlY3RlZCBTdHJpbmcgZ2V0TG9nVGFnICgpIHsKKyAgICByZXR1cm4gTE9HX1RBRzsKKyAgfQorCisgIHByb3RlY3RlZCB2b2lkIGxvZyAoU3RyaW5nIG1lc3NhZ2UpIHRocm93cyBJT0V4Y2VwdGlvbiB7CisgICAgTG9nLmQoTE9HX1RBRywgbWVzc2FnZSk7CisgIH0KKworICBwcm90ZWN0ZWQgTG9nZ2VyICgpIHsKKyAgfQorCisgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIHNocmlua1RleHQgKFN0cmluZyB0ZXh0KSB7CisgICAgaWYgKHRleHQgPT0gbnVsbCkgcmV0dXJuIG51bGw7CisKKyAgICBmaW5hbCBpbnQgdGhyZXNob2xkID0gNTA7CisgICAgZmluYWwgY2hhciBkZWxpbWl0ZXIgPSAnXG4nOworCisgICAgaW50IGxlbmd0aCA9IHRleHQubGVuZ3RoKCk7CisgICAgaW50IHRvID0gdGV4dC5sYXN0SW5kZXhPZihkZWxpbWl0ZXIpOworICAgIGludCBmcm9tID0gKHRvID09IC0xKT8gbGVuZ3RoOiB0ZXh0LmluZGV4T2YoZGVsaW1pdGVyKTsKKyAgICB0byArPSAxOworCisgICAgZnJvbSA9IE1hdGgubWluKGZyb20sIHRocmVzaG9sZCk7CisgICAgdG8gPSBNYXRoLm1heCh0bywgKGxlbmd0aCAtIHRocmVzaG9sZCkpOworCisgICAgaWYgKGZyb20gPCB0bykgeworICAgICAgdGV4dCA9IHRleHQuc3Vic3RyaW5nKDAsIGZyb20pICsgIlsuLi5dIiArIHRleHQuc3Vic3RyaW5nKHRvKTsKKyAgICB9CisKKyAgICByZXR1cm4gdGV4dDsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvQW5kcm9pZC9HcmFkbGUvYXBwL3NyYy9tYWluL2phdmEvb3JnL2ExMXkvYnJsdHR5L2FuZHJvaWQvTm9kZUNvbXBhcmF0b3IuamF2YSBiL0FuZHJvaWQvR3JhZGxlL2FwcC9zcmMvbWFpbi9qYXZhL29yZy9hMTF5L2JybHR0eS9hbmRyb2lkL05vZGVDb21wYXJhdG9yLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGNlY2I2ZgotLS0gL2Rldi9udWxsCisrKyBiL0FuZHJvaWQvR3JhZGxlL2FwcC9zcmMvbWFpbi9qYXZhL29yZy9hMTF5L2JybHR0eS9hbmRyb2lkL05vZGVDb21wYXJhdG9yLmphdmEKQEAgLTAsMCArMSwyNiBAQAorLyoKKyAqIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisgKiAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisgKgorICogQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKK3BhY2thZ2Ugb3JnLmExMXkuYnJsdHR5LmFuZHJvaWQ7CisKK2ltcG9ydCBhbmRyb2lkLnZpZXcuYWNjZXNzaWJpbGl0eS5BY2Nlc3NpYmlsaXR5Tm9kZUluZm87CitpbXBvcnQgamF2YS51dGlsLkNvbXBhcmF0b3I7CisKK3B1YmxpYyBpbnRlcmZhY2UgTm9kZUNvbXBhcmF0b3IgZXh0ZW5kcyBDb21wYXJhdG9yPEFjY2Vzc2liaWxpdHlOb2RlSW5mbz4geworICBwdWJsaWMgaW50IGNvbXBhcmUgKEFjY2Vzc2liaWxpdHlOb2RlSW5mbyBub2RlMSwgQWNjZXNzaWJpbGl0eU5vZGVJbmZvIG5vZGUyKTsKK30KZGlmZiAtLWdpdCBhL0FuZHJvaWQvR3JhZGxlL2FwcC9zcmMvbWFpbi9qYXZhL29yZy9hMTF5L2JybHR0eS9hbmRyb2lkL05vZGVUZXN0ZXIuamF2YSBiL0FuZHJvaWQvR3JhZGxlL2FwcC9zcmMvbWFpbi9qYXZhL29yZy9hMTF5L2JybHR0eS9hbmRyb2lkL05vZGVUZXN0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMjU2ZjY2Ci0tLSAvZGV2L251bGwKKysrIGIvQW5kcm9pZC9HcmFkbGUvYXBwL3NyYy9tYWluL2phdmEvb3JnL2ExMXkvYnJsdHR5L2FuZHJvaWQvTm9kZVRlc3Rlci5qYXZhCkBAIC0wLDAgKzEsMjUgQEAKKy8qCisgKiBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorICogICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorICoKKyAqIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorICoKKyAqIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyAqLworCitwYWNrYWdlIG9yZy5hMTF5LmJybHR0eS5hbmRyb2lkOworCitpbXBvcnQgYW5kcm9pZC52aWV3LmFjY2Vzc2liaWxpdHkuQWNjZXNzaWJpbGl0eU5vZGVJbmZvOworCitwdWJsaWMgaW50ZXJmYWNlIE5vZGVUZXN0ZXIgeworICBwdWJsaWMgYm9vbGVhbiB0ZXN0Tm9kZSAoQWNjZXNzaWJpbGl0eU5vZGVJbmZvIG5vZGUpOworfQpkaWZmIC0tZ2l0IGEvQW5kcm9pZC9HcmFkbGUvYXBwL3NyYy9tYWluL2phdmEvb3JnL2ExMXkvYnJsdHR5L2FuZHJvaWQvT3ZlcmxheVdpbmRvdy5qYXZhIGIvQW5kcm9pZC9HcmFkbGUvYXBwL3NyYy9tYWluL2phdmEvb3JnL2ExMXkvYnJsdHR5L2FuZHJvaWQvT3ZlcmxheVdpbmRvdy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQyODNlYTcKLS0tIC9kZXYvbnVsbAorKysgYi9BbmRyb2lkL0dyYWRsZS9hcHAvc3JjL21haW4vamF2YS9vcmcvYTExeS9icmx0dHkvYW5kcm9pZC9PdmVybGF5V2luZG93LmphdmEKQEAgLTAsMCArMSw4MiBAQAorLyoKKyAqIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisgKiAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisgKgorICogQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKK3BhY2thZ2Ugb3JnLmExMXkuYnJsdHR5LmFuZHJvaWQ7CisKK2ltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29udGV4dDsKK2ltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLlBpeGVsRm9ybWF0OworaW1wb3J0IGFuZHJvaWQudmlldy5HcmF2aXR5OworaW1wb3J0IGFuZHJvaWQudmlldy5MYXlvdXRJbmZsYXRlcjsKK2ltcG9ydCBhbmRyb2lkLnZpZXcuVmlldzsKK2ltcG9ydCBhbmRyb2lkLnZpZXcuV2luZG93TWFuYWdlcjsKK2ltcG9ydCBhbmRyb2lkLnZpZXcuV2luZG93TWFuYWdlci5MYXlvdXRQYXJhbXM7CisKK3B1YmxpYyBhYnN0cmFjdCBjbGFzcyBPdmVybGF5V2luZG93IHsKKyAgcHJvdGVjdGVkIHN0YXRpYyBDb250ZXh0IGdldENvbnRleHQgKCkgeworICAgIHJldHVybiBCcmFpbGxlU2VydmljZS5nZXRCcmFpbGxlU2VydmljZSgpOworICB9CisKKyAgcHJvdGVjdGVkIHN0YXRpYyBXaW5kb3dNYW5hZ2VyIGdldFdpbmRvd01hbmFnZXIgKCkgeworICAgIHJldHVybiAoV2luZG93TWFuYWdlcilnZXRDb250ZXh0KCkuZ2V0U3lzdGVtU2VydmljZShDb250ZXh0LldJTkRPV19TRVJWSUNFKTsKKyAgfQorCisgIHByaXZhdGUgZmluYWwgTGF5b3V0UGFyYW1zIGxheW91dFBhcmFtZXRlcnMgPSBuZXcgTGF5b3V0UGFyYW1zKCk7CisgIHByaXZhdGUgVmlldyBjdXJyZW50VmlldyA9IG51bGw7CisKKyAgcHJvdGVjdGVkIE92ZXJsYXlXaW5kb3cgKCkgeworICAgIGxheW91dFBhcmFtZXRlcnMuZm9ybWF0ID0gUGl4ZWxGb3JtYXQuT1BBUVVFOworICAgIGxheW91dFBhcmFtZXRlcnMuZ3Jhdml0eSA9IEdyYXZpdHkuVE9QIHwgR3Jhdml0eS5DRU5URVJfSE9SSVpPTlRBTDsKKworICAgIGxheW91dFBhcmFtZXRlcnMud2lkdGggPSBMYXlvdXRQYXJhbXMuV1JBUF9DT05URU5UOworICAgIGxheW91dFBhcmFtZXRlcnMuaGVpZ2h0ID0gTGF5b3V0UGFyYW1zLldSQVBfQ09OVEVOVDsKKworICAgIGxheW91dFBhcmFtZXRlcnMuZmxhZ3MgfD0gTGF5b3V0UGFyYW1zLkZMQUdfTk9UX1RPVUNIQUJMRTsKKworICAgIGlmIChBUElUZXN0cy5oYXZlTG9sbGlwb3BNUjEpIHsKKyAgICAgIGxheW91dFBhcmFtZXRlcnMudHlwZSA9IExheW91dFBhcmFtcy5UWVBFX0FDQ0VTU0lCSUxJVFlfT1ZFUkxBWTsKKyAgICB9IGVsc2UgeworICAgICAgbGF5b3V0UGFyYW1ldGVycy50eXBlID0gTGF5b3V0UGFyYW1zLlRZUEVfU1lTVEVNX09WRVJMQVk7CisgICAgfQorICB9CisKKyAgcHJvdGVjdGVkIGZpbmFsIHZvaWQgc2V0VmlldyAoVmlldyBuZXdWaWV3KSB7CisgICAgc3luY2hyb25pemVkICh0aGlzKSB7CisgICAgICBpZiAobmV3VmlldyAhPSBjdXJyZW50VmlldykgeworICAgICAgICBXaW5kb3dNYW5hZ2VyIHdtID0gZ2V0V2luZG93TWFuYWdlcigpOworICAgICAgICBpZiAoY3VycmVudFZpZXcgIT0gbnVsbCkgd20ucmVtb3ZlVmlldyhjdXJyZW50Vmlldyk7CisKKyAgICAgICAgaWYgKChjdXJyZW50VmlldyA9IG5ld1ZpZXcpICE9IG51bGwpIHsKKyAgICAgICAgICB3bS5hZGRWaWV3KGN1cnJlbnRWaWV3LCBsYXlvdXRQYXJhbWV0ZXJzKTsKKyAgICAgICAgICBjdXJyZW50Vmlldy5zZXRJbXBvcnRhbnRGb3JBY2Nlc3NpYmlsaXR5KFZpZXcuSU1QT1JUQU5UX0ZPUl9BQ0NFU1NJQklMSVRZX1lFUyk7CisgICAgICAgICAgY3VycmVudFZpZXcucmVxdWVzdEZvY3VzKCk7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9CisgIH0KKworICBwcm90ZWN0ZWQgZmluYWwgVmlldyBzZXRWaWV3IChpbnQgcmVzb3VyY2UpIHsKKyAgICBMYXlvdXRJbmZsYXRlciBpbmZsYXRlciA9IExheW91dEluZmxhdGVyLmZyb20oZ2V0Q29udGV4dCgpKTsKKyAgICBWaWV3IHZpZXcgPSBpbmZsYXRlci5pbmZsYXRlKHJlc291cmNlLCBudWxsKTsKKyAgICBzZXRWaWV3KHZpZXcpOworICAgIHJldHVybiB2aWV3OworICB9CisKKyAgcHJvdGVjdGVkIGZpbmFsIHZvaWQgcmVtb3ZlVmlldyAoKSB7CisgICAgc2V0VmlldyhudWxsKTsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvQW5kcm9pZC9HcmFkbGUvYXBwL3NyYy9tYWluL2phdmEvb3JnL2ExMXkvYnJsdHR5L2FuZHJvaWQvUGNtRGV2aWNlLmphdmEgYi9BbmRyb2lkL0dyYWRsZS9hcHAvc3JjL21haW4vamF2YS9vcmcvYTExeS9icmx0dHkvYW5kcm9pZC9QY21EZXZpY2UuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZjI4MTA0Ci0tLSAvZGV2L251bGwKKysrIGIvQW5kcm9pZC9HcmFkbGUvYXBwL3NyYy9tYWluL2phdmEvb3JnL2ExMXkvYnJsdHR5L2FuZHJvaWQvUGNtRGV2aWNlLmphdmEKQEAgLTAsMCArMSwxODAgQEAKKy8qCisgKiBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorICogICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorICoKKyAqIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorICoKKyAqIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyAqLworCitwYWNrYWdlIG9yZy5hMTF5LmJybHR0eS5hbmRyb2lkOworCitpbXBvcnQgYW5kcm9pZC5hbm5vdGF0aW9uLlN1cHByZXNzTGludDsKK2ltcG9ydCBhbmRyb2lkLm1lZGlhLkF1ZGlvQXR0cmlidXRlczsKK2ltcG9ydCBhbmRyb2lkLm1lZGlhLkF1ZGlvRm9ybWF0OworaW1wb3J0IGFuZHJvaWQubWVkaWEuQXVkaW9NYW5hZ2VyOworaW1wb3J0IGFuZHJvaWQubWVkaWEuQXVkaW9UcmFjazsKK2ltcG9ydCBhbmRyb2lkLnV0aWwuTG9nOworCitAU3VwcHJlc3NMaW50KCJOZXdBcGkiKQorcHVibGljIGZpbmFsIGNsYXNzIFBjbURldmljZSBpbXBsZW1lbnRzIEF1dG9DbG9zZWFibGUgeworICBwcml2YXRlIGZpbmFsIHN0YXRpYyBTdHJpbmcgTE9HX1RBRyA9IFBjbURldmljZS5jbGFzcy5nZXROYW1lKCk7CisKKyAgcHJpdmF0ZSBmaW5hbCBzdGF0aWMgaW50IFNUUkVBTV9UWVBFID0gQXVkaW9NYW5hZ2VyLlNUUkVBTV9OT1RJRklDQVRJT047CisgIHByaXZhdGUgZmluYWwgc3RhdGljIGludCBUUkFDS19NT0RFID0gQXVkaW9UcmFjay5NT0RFX1NUUkVBTTsKKyAgcHJpdmF0ZSBmaW5hbCBzdGF0aWMgaW50IEFVRElPX0VOQ09ESU5HID0gQXVkaW9Gb3JtYXQuRU5DT0RJTkdfUENNXzE2QklUOworCisgIHByaXZhdGUgaW50IHNhbXBsZVJhdGUgPSA4MDAwOworICBwcml2YXRlIGludCBjaGFubmVsQ291bnQgPSAxOworICBwcml2YXRlIEF1ZGlvVHJhY2sgYXVkaW9UcmFjayA9IG51bGw7CisKKyAgcHVibGljIGZpbmFsIGJvb2xlYW4gaXNTdGFydGVkICgpIHsKKyAgICByZXR1cm4gYXVkaW9UcmFjayAhPSBudWxsOworICB9CisKKyAgcHVibGljIGZpbmFsIGJvb2xlYW4gaXNQbGF5aW5nICgpIHsKKyAgICByZXR1cm4gYXVkaW9UcmFjay5nZXRQbGF5U3RhdGUoKSA9PSBBdWRpb1RyYWNrLlBMQVlTVEFURV9QTEFZSU5HOworICB9CisKKyAgcHJpdmF0ZSBmaW5hbCB2b2lkIGNoZWNrTm90U3RhcnRlZCAoKSB7CisgICAgaWYgKGlzU3RhcnRlZCgpKSB0aHJvdyBuZXcgSWxsZWdhbFN0YXRlRXhjZXB0aW9uKCJ0cmFjayBhbHJlYWR5IHN0YXJ0ZWQiKTsKKyAgfQorCisgIHB1YmxpYyBmaW5hbCBpbnQgZ2V0U2FtcGxlUmF0ZSAoKSB7CisgICAgcmV0dXJuIHNhbXBsZVJhdGU7CisgIH0KKworICBwdWJsaWMgZmluYWwgdm9pZCBzZXRTYW1wbGVSYXRlIChpbnQgcmF0ZSkgeworICAgIGNoZWNrTm90U3RhcnRlZCgpOworICAgIHNhbXBsZVJhdGUgPSByYXRlOworICB9CisKKyAgcHVibGljIGZpbmFsIGludCBnZXRDaGFubmVsUG9zaXRpb25NYXNrICgpIHsKKyAgICBzd2l0Y2ggKGNoYW5uZWxDb3VudCkgeworICAgICAgY2FzZSAxOgorICAgICAgICByZXR1cm4gQXVkaW9Gb3JtYXQuQ0hBTk5FTF9PVVRfTU9OTzsKKworICAgICAgY2FzZSAyOgorICAgICAgICByZXR1cm4gQXVkaW9Gb3JtYXQuQ0hBTk5FTF9PVVRfU1RFUkVPOworCisgICAgICBjYXNlIDM6CisgICAgICAgIHJldHVybiBBdWRpb0Zvcm1hdC5DSEFOTkVMX09VVF9TVEVSRU8gfCBBdWRpb0Zvcm1hdC5DSEFOTkVMX09VVF9GUk9OVF9DRU5URVI7CisKKyAgICAgIGNhc2UgNDoKKyAgICAgICAgcmV0dXJuIEF1ZGlvRm9ybWF0LkNIQU5ORUxfT1VUX1FVQUQ7CisKKyAgICAgIGNhc2UgNToKKyAgICAgICAgcmV0dXJuIEF1ZGlvRm9ybWF0LkNIQU5ORUxfT1VUXzVQT0lOVDE7CisKKyAgICAgIGNhc2UgNjoKKyAgICAgICAgcmV0dXJuIEF1ZGlvRm9ybWF0LkNIQU5ORUxfT1VUXzVQT0lOVDEgfCBBdWRpb0Zvcm1hdC5DSEFOTkVMX09VVF9CQUNLX0NFTlRFUjsKKworICAgICAgY2FzZSA3OgorICAgICAgICByZXR1cm4gQXVkaW9Gb3JtYXQuQ0hBTk5FTF9PVVRfN1BPSU5UMV9TVVJST1VORDsKKworICAgICAgZGVmYXVsdDoKKyAgICAgICAgTG9nLncoTE9HX1RBRywgKCJ1bnN1cHBvcnRlZCBjaGFubmVsIGNvdW50OiAiICsgY2hhbm5lbENvdW50KSk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgfQorCisgIHB1YmxpYyBmaW5hbCBpbnQgZ2V0Q2hhbm5lbENvdW50ICgpIHsKKyAgICByZXR1cm4gY2hhbm5lbENvdW50OworICB9CisKKyAgcHVibGljIGZpbmFsIHZvaWQgc2V0Q2hhbm5lbENvdW50IChpbnQgY291bnQpIHsKKyAgICBjaGVja05vdFN0YXJ0ZWQoKTsKKyAgICBjaGFubmVsQ291bnQgPSBjb3VudDsKKyAgfQorCisgIHB1YmxpYyBmaW5hbCBpbnQgZ2V0QnVmZmVyU2l6ZSAoKSB7CisgICAgcmV0dXJuIEF1ZGlvVHJhY2suZ2V0TWluQnVmZmVyU2l6ZSgKKyAgICAgIGdldFNhbXBsZVJhdGUoKSwKKyAgICAgIGdldENoYW5uZWxQb3NpdGlvbk1hc2soKSwKKyAgICAgIEFVRElPX0VOQ09ESU5HCisgICAgKTsKKyAgfQorCisgIHByaXZhdGUgZmluYWwgQXVkaW9UcmFjayBuZXdBdWRpb1RyYWNrICgpIHsKKyAgICBpZiAoQVBJVGVzdHMuaGF2ZU9yZW8pIHsKKyAgICAgIEF1ZGlvQXR0cmlidXRlcyBhdHRyaWJ1dGVzID0gbmV3IEF1ZGlvQXR0cmlidXRlcy5CdWlsZGVyKCkKKyAgICAgICAgLnNldFVzYWdlKEF1ZGlvQXR0cmlidXRlcy5VU0FHRV9BU1NJU1RBTkNFX0FDQ0VTU0lCSUxJVFkpCisgICAgICAgIC5zZXRDb250ZW50VHlwZShBdWRpb0F0dHJpYnV0ZXMuQ09OVEVOVF9UWVBFX1NPTklGSUNBVElPTikKKyAgICAgICAgLnNldEZsYWdzKEF1ZGlvQXR0cmlidXRlcy5GTEFHX0FVRElCSUxJVFlfRU5GT1JDRUQpCisgICAgICAgIC5idWlsZCgpOworCisgICAgICBBdWRpb0Zvcm1hdCBmb3JtYXQgPSBuZXcgQXVkaW9Gb3JtYXQuQnVpbGRlcigpCisgICAgICAgIC5zZXRFbmNvZGluZyhBVURJT19FTkNPRElORykKKyAgICAgICAgLnNldFNhbXBsZVJhdGUoZ2V0U2FtcGxlUmF0ZSgpKQorICAgICAgICAuc2V0Q2hhbm5lbE1hc2soZ2V0Q2hhbm5lbFBvc2l0aW9uTWFzaygpKQorICAgICAgICAuYnVpbGQoKTsKKworICAgICAgcmV0dXJuIG5ldyBBdWRpb1RyYWNrLkJ1aWxkZXIoKQorICAgICAgICAuc2V0QXVkaW9BdHRyaWJ1dGVzKGF0dHJpYnV0ZXMpCisgICAgICAgIC5zZXRBdWRpb0Zvcm1hdChmb3JtYXQpCisgICAgICAgIC5zZXRCdWZmZXJTaXplSW5CeXRlcyhnZXRCdWZmZXJTaXplKCkpCisgICAgICAgIC5zZXRUcmFuc2Zlck1vZGUoQXVkaW9UcmFjay5NT0RFX1NUUkVBTSkKKyAgICAgICAgLnNldFBlcmZvcm1hbmNlTW9kZShBdWRpb1RyYWNrLlBFUkZPUk1BTkNFX01PREVfTE9XX0xBVEVOQ1kpCisgICAgICAgIC5idWlsZCgpOworICAgIH0KKworICAgIHJldHVybiBuZXcgQXVkaW9UcmFjayhTVFJFQU1fVFlQRSwgZ2V0U2FtcGxlUmF0ZSgpLAorICAgICAgZ2V0Q2hhbm5lbFBvc2l0aW9uTWFzaygpLCBBVURJT19FTkNPRElORywKKyAgICAgIGdldEJ1ZmZlclNpemUoKSwgVFJBQ0tfTU9ERQorICAgICk7CisgIH0KKworICBwcm90ZWN0ZWQgZmluYWwgdm9pZCBzdGFydCAoKSB7CisgICAgaWYgKCFpc1N0YXJ0ZWQoKSkgYXVkaW9UcmFjayA9IG5ld0F1ZGlvVHJhY2soKTsKKyAgfQorCisgIHB1YmxpYyBmaW5hbCBib29sZWFuIHdyaXRlIChzaG9ydFtdIHNhbXBsZXMpIHsKKyAgICBzdGFydCgpOworCisgICAgaW50IG9mZnNldCA9IDA7CisgICAgaW50IGxlbmd0aCA9IHNhbXBsZXMubGVuZ3RoOworCisgICAgd2hpbGUgKGxlbmd0aCA+IDApIHsKKyAgICAgIGludCBjb3VudCA9IGF1ZGlvVHJhY2sud3JpdGUoc2FtcGxlcywgb2Zmc2V0LCBsZW5ndGgpOworICAgICAgaWYgKGNvdW50IDwgMSkgcmV0dXJuIGZhbHNlOworCisgICAgICBvZmZzZXQgKz0gY291bnQ7CisgICAgICBsZW5ndGggLT0gY291bnQ7CisKKyAgICAgIGlmICghaXNQbGF5aW5nKCkpIGF1ZGlvVHJhY2sucGxheSgpOworICAgIH0KKworICAgIHJldHVybiB0cnVlOworICB9CisKKyAgcHVibGljIGZpbmFsIHZvaWQgcHVzaCAoKSB7CisgIH0KKworICBwdWJsaWMgZmluYWwgdm9pZCBhd2FpdCAoKSB7CisgICAgaWYgKGlzUGxheWluZygpKSBhdWRpb1RyYWNrLnN0b3AoKTsKKyAgfQorCisgIHB1YmxpYyBmaW5hbCB2b2lkIGNhbmNlbCAoKSB7CisgICAgaWYgKGlzUGxheWluZygpKSBhdWRpb1RyYWNrLnBhdXNlKCk7CisgICAgYXVkaW9UcmFjay5mbHVzaCgpOworICB9CisKKyAgQE92ZXJyaWRlCisgIHB1YmxpYyBmaW5hbCB2b2lkIGNsb3NlICgpIHsKKyAgICBhd2FpdCgpOworICAgIGF1ZGlvVHJhY2sucmVsZWFzZSgpOworICAgIGF1ZGlvVHJhY2sgPSBudWxsOworICB9CisKKyAgcHVibGljIFBjbURldmljZSAoKSB7CisgIH0KK30KZGlmZiAtLWdpdCBhL0FuZHJvaWQvR3JhZGxlL2FwcC9zcmMvbWFpbi9qYXZhL29yZy9hMTF5L2JybHR0eS9hbmRyb2lkL1JlYWxTY3JlZW5FbGVtZW50LmphdmEgYi9BbmRyb2lkL0dyYWRsZS9hcHAvc3JjL21haW4vamF2YS9vcmcvYTExeS9icmx0dHkvYW5kcm9pZC9SZWFsU2NyZWVuRWxlbWVudC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE0OWU5NmMKLS0tIC9kZXYvbnVsbAorKysgYi9BbmRyb2lkL0dyYWRsZS9hcHAvc3JjL21haW4vamF2YS9vcmcvYTExeS9icmx0dHkvYW5kcm9pZC9SZWFsU2NyZWVuRWxlbWVudC5qYXZhCkBAIC0wLDAgKzEsMzQ5IEBACisvKgorICogQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyAqICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyAqCisgKiBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorICoKKyAqIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyAqCisgKiBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisgKi8KKworcGFja2FnZSBvcmcuYTExeS5icmx0dHkuYW5kcm9pZDsKKworaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuUmVjdDsKK2ltcG9ydCBhbmRyb2lkLnZpZXcuS2V5RXZlbnQ7CitpbXBvcnQgYW5kcm9pZC52aWV3LmFjY2Vzc2liaWxpdHkuQWNjZXNzaWJpbGl0eU5vZGVJbmZvOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCitwdWJsaWMgY2xhc3MgUmVhbFNjcmVlbkVsZW1lbnQgZXh0ZW5kcyBTY3JlZW5FbGVtZW50IHsKKyAgcHJpdmF0ZSBmaW5hbCBzdGF0aWMgU3RyaW5nIExPR19UQUcgPSBSZWFsU2NyZWVuRWxlbWVudC5jbGFzcy5nZXROYW1lKCk7CisKKyAgcHJpdmF0ZSBmaW5hbCBBY2Nlc3NpYmlsaXR5Tm9kZUluZm8gYWNjZXNzaWJpbGl0eU5vZGU7CisKKyAgcHVibGljIFJlYWxTY3JlZW5FbGVtZW50IChTdHJpbmcgdGV4dCwgQWNjZXNzaWJpbGl0eU5vZGVJbmZvIG5vZGUpIHsKKyAgICBzdXBlcih0ZXh0KTsKKyAgICBhY2Nlc3NpYmlsaXR5Tm9kZSA9IEFjY2Vzc2liaWxpdHlOb2RlSW5mby5vYnRhaW4obm9kZSk7CisKKyAgICB7CisgICAgICBSZWN0IGxvY2F0aW9uID0gbmV3IFJlY3QoKTsKKyAgICAgIG5vZGUuZ2V0Qm91bmRzSW5TY3JlZW4obG9jYXRpb24pOworICAgICAgbG9jYXRpb24ucmlnaHQgLT0gMTsKKyAgICAgIGxvY2F0aW9uLmJvdHRvbSAtPSAxOworICAgICAgc2V0VmlzdWFsTG9jYXRpb24obG9jYXRpb24pOworICAgIH0KKyAgfQorCisgIEBPdmVycmlkZQorICBwdWJsaWMgQWNjZXNzaWJpbGl0eU5vZGVJbmZvIGdldEFjY2Vzc2liaWxpdHlOb2RlICgpIHsKKyAgICByZXR1cm4gQWNjZXNzaWJpbGl0eU5vZGVJbmZvLm9idGFpbihhY2Nlc3NpYmlsaXR5Tm9kZSk7CisgIH0KKworICBAT3ZlcnJpZGUKKyAgcHVibGljIGJvb2xlYW4gaXNFZGl0YWJsZSAoKSB7CisgICAgcmV0dXJuIFNjcmVlblV0aWxpdGllcy5pc0VkaXRhYmxlKGFjY2Vzc2liaWxpdHlOb2RlKTsKKyAgfQorCisgIHByaXZhdGUgc3RhdGljIGJvb2xlYW4gc2V0SW5wdXRGb2N1cyAoQWNjZXNzaWJpbGl0eU5vZGVJbmZvIG5vZGUpIHsKKyAgICBpZiAobm9kZS5pc0ZvY3VzZWQoKSkgcmV0dXJuIHRydWU7CisKKyAgICBpZiAoIW5vZGUucGVyZm9ybUFjdGlvbihBY2Nlc3NpYmlsaXR5Tm9kZUluZm8uQUNUSU9OX0ZPQ1VTKSkgcmV0dXJuIGZhbHNlOworICAgIGZpbmFsIGxvbmcgc3RhcnRUaW1lID0gQXBwbGljYXRpb25VdGlsaXRpZXMuZ2V0QWJzb2x1dGVUaW1lKCk7CisKKyAgICB3aGlsZSAodHJ1ZSkgeworICAgICAgdHJ5IHsKKyAgICAgICAgVGhyZWFkLnNsZWVwKEFwcGxpY2F0aW9uUGFyYW1ldGVycy5GT0NVU19XQUlUX0lOVEVSVkFMKTsKKyAgICAgIH0gY2F0Y2ggKEludGVycnVwdGVkRXhjZXB0aW9uIGV4Y2VwdGlvbikgeworICAgICAgfQorCisgICAgICB7CisgICAgICAgIEFjY2Vzc2liaWxpdHlOb2RlSW5mbyByZWZyZXNoZWQgPSBTY3JlZW5VdGlsaXRpZXMuZ2V0UmVmcmVzaGVkTm9kZShub2RlKTsKKworICAgICAgICBpZiAocmVmcmVzaGVkICE9IG51bGwpIHsKKyAgICAgICAgICB0cnkgeworICAgICAgICAgICAgaWYgKHJlZnJlc2hlZC5pc0ZvY3VzZWQoKSkgcmV0dXJuIHRydWU7CisgICAgICAgICAgfSBmaW5hbGx5IHsKKyAgICAgICAgICAgIHJlZnJlc2hlZC5yZWN5Y2xlKCk7CisgICAgICAgICAgICByZWZyZXNoZWQgPSBudWxsOworICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgfQorCisgICAgICBpZiAoQXBwbGljYXRpb25VdGlsaXRpZXMuZ2V0UmVsYXRpdmVUaW1lKHN0YXJ0VGltZSkgPj0gQXBwbGljYXRpb25QYXJhbWV0ZXJzLkZPQ1VTX1dBSVRfVElNRU9VVCkgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICB9CisgICAgfQorICB9CisKKyAgcHJpdmF0ZSBmaW5hbCBib29sZWFuIHNldElucHV0Rm9jdXMgKCkgeworICAgIEFjY2Vzc2liaWxpdHlOb2RlSW5mbyBub2RlID0gU2NyZWVuVXRpbGl0aWVzLmdldFJlZnJlc2hlZE5vZGUoYWNjZXNzaWJpbGl0eU5vZGUpOworCisgICAgaWYgKG5vZGUgIT0gbnVsbCkgeworICAgICAgdHJ5IHsKKyAgICAgICAgcmV0dXJuIHNldElucHV0Rm9jdXMobm9kZSk7CisgICAgICB9IGZpbmFsbHkgeworICAgICAgICBub2RlLnJlY3ljbGUoKTsKKyAgICAgICAgbm9kZSA9IG51bGw7CisgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIGZhbHNlOworICB9CisKKyAgcHJpdmF0ZSBBY2Nlc3NpYmlsaXR5Tm9kZUluZm8gZ2V0Rm9jdXNhYmxlTm9kZSAoKSB7CisgICAgcmV0dXJuIFNjcmVlblV0aWxpdGllcy5maW5kQWN0aW9uYWJsZU5vZGUoYWNjZXNzaWJpbGl0eU5vZGUsCisgICAgICBBY2Nlc3NpYmlsaXR5Tm9kZUluZm8uQUNUSU9OX0ZPQ1VTIHwKKyAgICAgIEFjY2Vzc2liaWxpdHlOb2RlSW5mby5BQ1RJT05fQ0xFQVJfRk9DVVMKKyAgICApOworICB9CisKKyAgcHJpdmF0ZSBib29sZWFuIHBlcmZvcm1Ob2RlQWN0aW9uIChpbnQgYWN0aW9uKSB7CisgICAgcmV0dXJuIFNjcmVlblV0aWxpdGllcy5wZXJmb3JtQWN0aW9uKGFjY2Vzc2liaWxpdHlOb2RlLCBhY3Rpb24pOworICB9CisKKyAgcHJpdmF0ZSBib29sZWFuIHBlcmZvcm1Ob2RlQWN0aW9uIChBY2Nlc3NpYmlsaXR5Tm9kZUluZm8uQWNjZXNzaWJpbGl0eUFjdGlvbiBhY3Rpb24pIHsKKyAgICByZXR1cm4gU2NyZWVuVXRpbGl0aWVzLnBlcmZvcm1BY3Rpb24oYWNjZXNzaWJpbGl0eU5vZGUsIGFjdGlvbik7CisgIH0KKworICBwdWJsaWMgYm9vbGVhbiBpbmplY3RLZXkgKGludCBrZXlDb2RlLCBib29sZWFuIGxvbmdQcmVzcykgeworICAgIEFjY2Vzc2liaWxpdHlOb2RlSW5mbyBub2RlID0gZ2V0Rm9jdXNhYmxlTm9kZSgpOworCisgICAgaWYgKG5vZGUgIT0gbnVsbCkgeworICAgICAgdHJ5IHsKKyAgICAgICAgaWYgKHNldElucHV0Rm9jdXMobm9kZSkpIHsKKyAgICAgICAgICBpZiAoSW5wdXRTZXJ2aWNlLmluamVjdEtleShrZXlDb2RlLCBsb25nUHJlc3MpKSB7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgIH0gZmluYWxseSB7CisgICAgICAgIG5vZGUucmVjeWNsZSgpOworICAgICAgICBub2RlID0gbnVsbDsKKyAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7CisgIH0KKworICBAT3ZlcnJpZGUKKyAgcHVibGljIGJvb2xlYW4gYnJpbmdDdXJzb3IgKCkgeworICAgIGlmIChBUElUZXN0cy5oYXZlSmVsbHlCZWFuKSB7CisgICAgICByZXR1cm4gcGVyZm9ybU5vZGVBY3Rpb24oQWNjZXNzaWJpbGl0eU5vZGVJbmZvLkFDVElPTl9BQ0NFU1NJQklMSVRZX0ZPQ1VTKTsKKyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7CisgIH0KKworICBAT3ZlcnJpZGUKKyAgcHVibGljIGJvb2xlYW4gb25CcmluZ0N1cnNvciAoKSB7CisgICAgaWYgKEFQSVRlc3RzLmhhdmVKZWxseUJlYW4pIHsKKyAgICAgIHsKKyAgICAgICAgQWNjZXNzaWJpbGl0eU5vZGVJbmZvIG5vZGUgPSBhY2Nlc3NpYmlsaXR5Tm9kZS5maW5kRm9jdXMoQWNjZXNzaWJpbGl0eU5vZGVJbmZvLkZPQ1VTX0FDQ0VTU0lCSUxJVFkpOworCisgICAgICAgIGlmIChub2RlICE9IG51bGwpIHsKKyAgICAgICAgICB0cnkgeworICAgICAgICAgICAgcmV0dXJuIG5vZGUuZXF1YWxzKGFjY2Vzc2liaWxpdHlOb2RlKTsKKyAgICAgICAgICB9IGZpbmFsbHkgeworICAgICAgICAgICAgbm9kZS5yZWN5Y2xlKCk7CisgICAgICAgICAgICBub2RlID0gbnVsbDsKKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgIH0KKworICAgICAgaWYgKHBlcmZvcm1Ob2RlQWN0aW9uKEFjY2Vzc2liaWxpdHlOb2RlSW5mby5BQ1RJT05fQUNDRVNTSUJJTElUWV9GT0NVUykpIHJldHVybiB0cnVlOworICAgIH0KKworICAgIGlmIChBUElUZXN0cy5oYXZlSWNlQ3JlYW1TYW5kd2ljaCkgeworICAgICAgQWNjZXNzaWJpbGl0eU5vZGVJbmZvIG5vZGUgPSBnZXRGb2N1c2FibGVOb2RlKCk7CisKKyAgICAgIGlmIChub2RlICE9IG51bGwpIHsKKyAgICAgICAgYm9vbGVhbiBpc0ZvY3VzZWQgPSBub2RlLmlzRm9jdXNlZCgpOworCisgICAgICAgIGlmICghaXNGb2N1c2VkKSB7CisgICAgICAgICAgaWYgKG5vZGUucGVyZm9ybUFjdGlvbihBY2Nlc3NpYmlsaXR5Tm9kZUluZm8uQUNUSU9OX0ZPQ1VTKSkgeworICAgICAgICAgICAgaXNGb2N1c2VkID0gdHJ1ZTsKKyAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBub2RlLnJlY3ljbGUoKTsKKyAgICAgICAgbm9kZSA9IG51bGw7CisKKyAgICAgICAgaWYgKGlzRm9jdXNlZCkgcmV0dXJuIHRydWU7CisgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHN1cGVyLm9uQnJpbmdDdXJzb3IoKTsKKyAgfQorCisgIEBPdmVycmlkZQorICBwdWJsaWMgYm9vbGVhbiBvbkNsaWNrICgpIHsKKyAgICBpZiAoQVBJVGVzdHMuaGF2ZUljZUNyZWFtU2FuZHdpY2gpIHsKKyAgICAgIGlmIChpc0VkaXRhYmxlKCkpIHsKKyAgICAgICAgcmV0dXJuIHBlcmZvcm1Ob2RlQWN0aW9uKEFjY2Vzc2liaWxpdHlOb2RlSW5mby5BQ1RJT05fRk9DVVMpOworICAgICAgfQorICAgIH0KKworICAgIGlmIChBUElUZXN0cy5oYXZlSmVsbHlCZWFuKSB7CisgICAgICByZXR1cm4gcGVyZm9ybU5vZGVBY3Rpb24oQWNjZXNzaWJpbGl0eU5vZGVJbmZvLkFDVElPTl9DTElDSyk7CisgICAgfQorCisgICAgaWYgKEFQSVRlc3RzLmhhdmVJY2VDcmVhbVNhbmR3aWNoKSB7CisgICAgICByZXR1cm4gaW5qZWN0S2V5KEtleUV2ZW50LktFWUNPREVfRFBBRF9DRU5URVIsIGZhbHNlKTsKKyAgICB9CisKKyAgICByZXR1cm4gc3VwZXIub25DbGljaygpOworICB9CisKKyAgQE92ZXJyaWRlCisgIHB1YmxpYyBib29sZWFuIG9uTG9uZ0NsaWNrICgpIHsKKyAgICBpZiAoQVBJVGVzdHMuaGF2ZUplbGx5QmVhbikgeworICAgICAgcmV0dXJuIHBlcmZvcm1Ob2RlQWN0aW9uKEFjY2Vzc2liaWxpdHlOb2RlSW5mby5BQ1RJT05fTE9OR19DTElDSyk7CisgICAgfQorCisgICAgaWYgKEFQSVRlc3RzLmhhdmVJY2VDcmVhbVNhbmR3aWNoKSB7CisgICAgICByZXR1cm4gaW5qZWN0S2V5KEtleUV2ZW50LktFWUNPREVfRFBBRF9DRU5URVIsIHRydWUpOworICAgIH0KKworICAgIHJldHVybiBzdXBlci5vbkxvbmdDbGljaygpOworICB9CisKKyAgQE92ZXJyaWRlCisgIHB1YmxpYyBib29sZWFuIG9uU2Nyb2xsQmFja3dhcmQgKCkgeworICAgIGlmIChBUElUZXN0cy5oYXZlSmVsbHlCZWFuKSB7CisgICAgICByZXR1cm4gcGVyZm9ybU5vZGVBY3Rpb24oQWNjZXNzaWJpbGl0eU5vZGVJbmZvLkFDVElPTl9TQ1JPTExfQkFDS1dBUkQpOworICAgIH0KKworICAgIGlmIChBUElUZXN0cy5oYXZlSWNlQ3JlYW1TYW5kd2ljaCkgeworICAgICAgcmV0dXJuIGluamVjdEtleShLZXlFdmVudC5LRVlDT0RFX1BBR0VfVVAsIGZhbHNlKTsKKyAgICB9CisKKyAgICByZXR1cm4gc3VwZXIub25TY3JvbGxCYWNrd2FyZCgpOworICB9CisKKyAgQE92ZXJyaWRlCisgIHB1YmxpYyBib29sZWFuIG9uU2Nyb2xsRm9yd2FyZCAoKSB7CisgICAgaWYgKEFQSVRlc3RzLmhhdmVKZWxseUJlYW4pIHsKKyAgICAgIHJldHVybiBwZXJmb3JtTm9kZUFjdGlvbihBY2Nlc3NpYmlsaXR5Tm9kZUluZm8uQUNUSU9OX1NDUk9MTF9GT1JXQVJEKTsKKyAgICB9CisKKyAgICBpZiAoQVBJVGVzdHMuaGF2ZUljZUNyZWFtU2FuZHdpY2gpIHsKKyAgICAgIHJldHVybiBpbmplY3RLZXkoS2V5RXZlbnQuS0VZQ09ERV9QQUdFX0RPV04sIGZhbHNlKTsKKyAgICB9CisKKyAgICByZXR1cm4gc3VwZXIub25TY3JvbGxGb3J3YXJkKCk7CisgIH0KKworICBAT3ZlcnJpZGUKKyAgcHVibGljIGJvb2xlYW4gb25Db250ZXh0Q2xpY2sgKCkgeworICAgIGlmIChBUElUZXN0cy5oYXZlTWFyc2htYWxsb3cpIHsKKyAgICAgIHJldHVybiBwZXJmb3JtTm9kZUFjdGlvbihBY2Nlc3NpYmlsaXR5Tm9kZUluZm8uQWNjZXNzaWJpbGl0eUFjdGlvbi5BQ1RJT05fQ09OVEVYVF9DTElDSyk7CisgICAgfQorCisgICAgcmV0dXJuIHN1cGVyLm9uQ29udGV4dENsaWNrKCk7CisgIH0KKworICBAT3ZlcnJpZGUKKyAgcHVibGljIGJvb2xlYW4gb25BY2Nlc3NpYmlsaXR5QWN0aW9ucyAoKSB7CisgICAgaWYgKEFQSVRlc3RzLmhhdmVMb2xsaXBvcCkgeworICAgICAgTGlzdDxBY2Nlc3NpYmlsaXR5Tm9kZUluZm8uQWNjZXNzaWJpbGl0eUFjdGlvbj4gYWN0aW9ucyA9IGFjY2Vzc2liaWxpdHlOb2RlLmdldEFjdGlvbkxpc3QoKTsKKworICAgICAgaWYgKGFjdGlvbnMgIT0gbnVsbCkgeworICAgICAgICBmaW5hbCBDaGFyU2VxdWVuY2VbXSBsYWJlbHM7CisgICAgICAgIGZpbmFsIGludFtdIGlkczsKKworICAgICAgICB7CisgICAgICAgICAgaW50IHNpemUgPSBhY3Rpb25zLnNpemUoKTsKKyAgICAgICAgICBDaGFyU2VxdWVuY2VbXSBsYWJlbEJ1ZmZlciA9IG5ldyBDaGFyU2VxdWVuY2Vbc2l6ZV07CisgICAgICAgICAgaW50W10gaWRCdWZmZXIgPSBuZXcgaW50W3NpemVdOworICAgICAgICAgIGludCBjb3VudCA9IDA7CisKKyAgICAgICAgICBmb3IgKEFjY2Vzc2liaWxpdHlOb2RlSW5mby5BY2Nlc3NpYmlsaXR5QWN0aW9uIGFjdGlvbiA6IGFjdGlvbnMpIHsKKyAgICAgICAgICAgIENoYXJTZXF1ZW5jZSBsYWJlbCA9IGFjdGlvbi5nZXRMYWJlbCgpOworICAgICAgICAgICAgaWYgKGxhYmVsID09IG51bGwpIGNvbnRpbnVlOworICAgICAgICAgICAgaWYgKGxhYmVsLmxlbmd0aCgpID09IDApIGNvbnRpbnVlOworCisgICAgICAgICAgICBsYWJlbEJ1ZmZlcltjb3VudF0gPSBsYWJlbDsKKyAgICAgICAgICAgIGlkQnVmZmVyW2NvdW50XSA9IGFjdGlvbi5nZXRJZCgpOworICAgICAgICAgICAgY291bnQgKz0gMTsKKyAgICAgICAgICB9CisKKyAgICAgICAgICBpZiAoY291bnQgPiAwKSB7CisgICAgICAgICAgICBsYWJlbHMgPSBuZXcgQ2hhclNlcXVlbmNlW2NvdW50XTsKKyAgICAgICAgICAgIFN5c3RlbS5hcnJheWNvcHkobGFiZWxCdWZmZXIsIDAsIGxhYmVscywgMCwgY291bnQpOworCisgICAgICAgICAgICBpZHMgPSBuZXcgaW50W2NvdW50XTsKKyAgICAgICAgICAgIFN5c3RlbS5hcnJheWNvcHkoaWRCdWZmZXIsIDAsIGlkcywgMCwgY291bnQpOworICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBsYWJlbHMgPSBudWxsOworICAgICAgICAgICAgaWRzID0gbnVsbDsKKyAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZiAobGFiZWxzICE9IG51bGwpIHsKKyAgICAgICAgICBCcmFpbGxlQXBwbGljYXRpb24ucG9zdCgKKyAgICAgICAgICAgIG5ldyBSdW5uYWJsZSgpIHsKKyAgICAgICAgICAgICAgQE92ZXJyaWRlCisgICAgICAgICAgICAgIHB1YmxpYyB2b2lkIHJ1biAoKSB7CisgICAgICAgICAgICAgICAgbmV3IENob29zZXJXaW5kb3coCisgICAgICAgICAgICAgICAgICBsYWJlbHMsCisgICAgICAgICAgICAgICAgICBSLnN0cmluZy5DSE9PU0VSX1RJVExFX0FDQ0VTU0lCSUxJVFlfQUNUSU9OUywKKyAgICAgICAgICAgICAgICAgIG5ldyBDaG9vc2VyV2luZG93Lkl0ZW1DbGlja0xpc3RlbmVyKCkgeworICAgICAgICAgICAgICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgICAgICAgICAgICAgcHVibGljIHZvaWQgb25DbGljayAoaW50IHBvc2l0aW9uKSB7CisgICAgICAgICAgICAgICAgICAgICAgYWNjZXNzaWJpbGl0eU5vZGUucGVyZm9ybUFjdGlvbihpZHNbcG9zaXRpb25dKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICk7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICApOworCisgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gc3VwZXIub25BY2Nlc3NpYmlsaXR5QWN0aW9ucygpOworICB9CisKKyAgQE92ZXJyaWRlCisgIHB1YmxpYyBib29sZWFuIG9uRGVzY3JpYmVFbGVtZW50ICgpIHsKKyAgICBCcmFpbGxlTWVzc2FnZS5ERUJVRy5zaG93KFNjcmVlbkxvZ2dlci50b1N0cmluZyhhY2Nlc3NpYmlsaXR5Tm9kZSkpOworICAgIHJldHVybiB0cnVlOworICB9CisKKyAgQE92ZXJyaWRlCisgIHB1YmxpYyBib29sZWFuIHBlcmZvcm1BY3Rpb24gKGludCBjb2x1bW4sIGludCByb3cpIHsKKyAgICBpZiAoU2NyZWVuVXRpbGl0aWVzLmlzRWRpdGFibGUoYWNjZXNzaWJpbGl0eU5vZGUpKSB7CisgICAgICBpZiAoIW9uQnJpbmdDdXJzb3IoKSkgcmV0dXJuIGZhbHNlOworICAgICAgc2V0SW5wdXRGb2N1cygpOworCisgICAgICBpbnQgb2Zmc2V0ID0gZ2V0VGV4dE9mZnNldChjb2x1bW4sIHJvdyk7CisgICAgICByZXR1cm4gSW5wdXRIYW5kbGVycy5wbGFjZUN1cnNvcihhY2Nlc3NpYmlsaXR5Tm9kZSwgb2Zmc2V0KTsKKyAgICB9CisKKyAgICByZXR1cm4gc3VwZXIucGVyZm9ybUFjdGlvbihjb2x1bW4sIHJvdyk7CisgIH0KKworICBAT3ZlcnJpZGUKKyAgcHJvdGVjdGVkIFN0cmluZ1tdIG1ha2VCcmFpbGxlVGV4dCAoU3RyaW5nIHRleHQpIHsKKyAgICBTdHJpbmdbXSBsaW5lcyA9IHN1cGVyLm1ha2VCcmFpbGxlVGV4dCh0ZXh0KTsKKyAgICBpZiAobGluZXMgPT0gbnVsbCkgcmV0dXJuIG51bGw7CisKKyAgICBpZiAoU2NyZWVuVXRpbGl0aWVzLmlzRWRpdGFibGUoYWNjZXNzaWJpbGl0eU5vZGUpKSB7CisgICAgICBpbnQgY291bnQgPSBsaW5lcy5sZW5ndGg7CisKKyAgICAgIGZvciAoaW50IGluZGV4PTA7IGluZGV4PGNvdW50OyBpbmRleCs9MSkgeworICAgICAgICBsaW5lc1tpbmRleF0gKz0gJyAnOworICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBsaW5lczsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvQW5kcm9pZC9HcmFkbGUvYXBwL3NyYy9tYWluL2phdmEvb3JnL2ExMXkvYnJsdHR5L2FuZHJvaWQvUmVuZGVyZWRTY3JlZW4uamF2YSBiL0FuZHJvaWQvR3JhZGxlL2FwcC9zcmMvbWFpbi9qYXZhL29yZy9hMTF5L2JybHR0eS9hbmRyb2lkL1JlbmRlcmVkU2NyZWVuLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTRhODMzOAotLS0gL2Rldi9udWxsCisrKyBiL0FuZHJvaWQvR3JhZGxlL2FwcC9zcmMvbWFpbi9qYXZhL29yZy9hMTF5L2JybHR0eS9hbmRyb2lkL1JlbmRlcmVkU2NyZWVuLmphdmEKQEAgLTAsMCArMSw4NTkgQEAKKy8qCisgKiBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorICogICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorICoKKyAqIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorICoKKyAqIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyAqLworCitwYWNrYWdlIG9yZy5hMTF5LmJybHR0eS5hbmRyb2lkOworCitpbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5SZWN0OworaW1wb3J0IGFuZHJvaWQudGV4dC5UZXh0VXRpbHM7CitpbXBvcnQgYW5kcm9pZC51dGlsLkxvZzsKK2ltcG9ydCBhbmRyb2lkLnZpZXcuYWNjZXNzaWJpbGl0eS5BY2Nlc3NpYmlsaXR5Tm9kZUluZm87CitpbXBvcnQgYW5kcm9pZC53aWRnZXQuSW1hZ2VWaWV3OworaW1wb3J0IGFuZHJvaWQud2lkZ2V0LkxpbmVhckxheW91dDsKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OworaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworaW1wb3J0IGphdmEudXRpbC5Mb2NhbGU7CitpbXBvcnQgamF2YS51dGlsLk1hcDsKK2ltcG9ydCBqYXZhLnV0aWwuU2V0OworCitwdWJsaWMgY2xhc3MgUmVuZGVyZWRTY3JlZW4geworICBwcml2YXRlIGZpbmFsIHN0YXRpYyBTdHJpbmcgTE9HX1RBRyA9IFJlbmRlcmVkU2NyZWVuLmNsYXNzLmdldE5hbWUoKTsKKworICBwcml2YXRlIGZpbmFsIEFjY2Vzc2liaWxpdHlOb2RlSW5mbyBldmVudE5vZGU7CisgIHByaXZhdGUgZmluYWwgQWNjZXNzaWJpbGl0eU5vZGVJbmZvIHJvb3ROb2RlOworCisgIHByaXZhdGUgZmluYWwgU2NyZWVuRWxlbWVudExpc3Qgc2NyZWVuRWxlbWVudHMgPSBuZXcgU2NyZWVuRWxlbWVudExpc3QoKTsKKyAgcHJpdmF0ZSBmaW5hbCBMaXN0PFN0cmluZz4gc2NyZWVuUm93cyA9IG5ldyBBcnJheUxpc3Q8PigpOworCisgIHByaXZhdGUgZmluYWwgaW50IHNjcmVlbldpZHRoOworICBwcml2YXRlIGZpbmFsIEFjY2Vzc2liaWxpdHlOb2RlSW5mbyBjdXJzb3JOb2RlOworCisgIHByaXZhdGUgZmluYWwgQWNjZXNzaWJpbGl0eU5vZGVJbmZvIGdldE5vZGUgKEFjY2Vzc2liaWxpdHlOb2RlSW5mbyBub2RlKSB7CisgICAgaWYgKG5vZGUgPT0gbnVsbCkgcmV0dXJuIG51bGw7CisgICAgcmV0dXJuIEFjY2Vzc2liaWxpdHlOb2RlSW5mby5vYnRhaW4obm9kZSk7CisgIH0KKworICBwdWJsaWMgZmluYWwgQWNjZXNzaWJpbGl0eU5vZGVJbmZvIGdldFJvb3ROb2RlICgpIHsKKyAgICByZXR1cm4gZ2V0Tm9kZShyb290Tm9kZSk7CisgIH0KKworICBwdWJsaWMgZmluYWwgaW50IGdldFNjcmVlbldpZHRoICgpIHsKKyAgICByZXR1cm4gc2NyZWVuV2lkdGg7CisgIH0KKworICBwdWJsaWMgZmluYWwgaW50IGdldFNjcmVlbkhlaWdodCAoKSB7CisgICAgcmV0dXJuIHNjcmVlblJvd3Muc2l6ZSgpOworICB9CisKKyAgcHVibGljIGZpbmFsIFN0cmluZyBnZXRTY3JlZW5Sb3cgKGludCBpbmRleCkgeworICAgIHJldHVybiBzY3JlZW5Sb3dzLmdldChpbmRleCk7CisgIH0KKworICBwdWJsaWMgZmluYWwgQWNjZXNzaWJpbGl0eU5vZGVJbmZvIGdldEN1cnNvck5vZGUgKCkgeworICAgIHJldHVybiBnZXROb2RlKGN1cnNvck5vZGUpOworICB9CisKKyAgcHVibGljIGZpbmFsIFNjcmVlbkVsZW1lbnQgZ2V0U2NyZWVuRWxlbWVudCAoQWNjZXNzaWJpbGl0eU5vZGVJbmZvIG5vZGUpIHsKKyAgICBpZiAobm9kZSA9PSBudWxsKSByZXR1cm4gbnVsbDsKKyAgICByZXR1cm4gc2NyZWVuRWxlbWVudHMuZ2V0KG5vZGUpOworICB9CisKKyAgcHVibGljIGZpbmFsIFNjcmVlbkVsZW1lbnQgZmluZFNjcmVlbkVsZW1lbnQgKEFjY2Vzc2liaWxpdHlOb2RlSW5mbyBub2RlKSB7CisgICAgU2NyZWVuRWxlbWVudCBlbGVtZW50ID0gZ2V0U2NyZWVuRWxlbWVudChub2RlKTsKKworICAgIGlmIChlbGVtZW50ICE9IG51bGwpIHsKKyAgICAgIGlmIChlbGVtZW50LmdldEJyYWlsbGVMb2NhdGlvbigpICE9IG51bGwpIHsKKyAgICAgICAgcmV0dXJuIGVsZW1lbnQ7CisgICAgICB9CisgICAgfQorCisgICAgeworICAgICAgaW50IGNoaWxkQ291bnQgPSBub2RlLmdldENoaWxkQ291bnQoKTsKKworICAgICAgZm9yIChpbnQgY2hpbGRJbmRleD0wOyBjaGlsZEluZGV4PGNoaWxkQ291bnQ7IGNoaWxkSW5kZXgrPTEpIHsKKyAgICAgICAgQWNjZXNzaWJpbGl0eU5vZGVJbmZvIGNoaWxkID0gbm9kZS5nZXRDaGlsZChjaGlsZEluZGV4KTsKKworICAgICAgICBpZiAoY2hpbGQgIT0gbnVsbCkgeworICAgICAgICAgIGVsZW1lbnQgPSBmaW5kU2NyZWVuRWxlbWVudChjaGlsZCk7CisKKyAgICAgICAgICBjaGlsZC5yZWN5Y2xlKCk7CisgICAgICAgICAgY2hpbGQgPSBudWxsOworCisgICAgICAgICAgaWYgKGVsZW1lbnQgIT0gbnVsbCkgcmV0dXJuIGVsZW1lbnQ7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gbnVsbDsKKyAgfQorCisgIHB1YmxpYyBmaW5hbCBTY3JlZW5FbGVtZW50IGZpbmRTY3JlZW5FbGVtZW50IChpbnQgY29sdW1uLCBpbnQgcm93KSB7CisgICAgcmV0dXJuIHNjcmVlbkVsZW1lbnRzLmZpbmRCeUJyYWlsbGVMb2NhdGlvbihjb2x1bW4sIHJvdyk7CisgIH0KKworICBwdWJsaWMgZmluYWwgYm9vbGVhbiBwZXJmb3JtQWN0aW9uIChpbnQgY29sdW1uLCBpbnQgcm93KSB7CisgICAgU2NyZWVuRWxlbWVudCBlbGVtZW50ID0gZmluZFNjcmVlbkVsZW1lbnQoY29sdW1uLCByb3cpOworICAgIGlmIChlbGVtZW50ID09IG51bGwpIHJldHVybiBmYWxzZTsKKworICAgIFJlY3QgbG9jYXRpb24gPSBlbGVtZW50LmdldEJyYWlsbGVMb2NhdGlvbigpOworICAgIHJldHVybiBlbGVtZW50LnBlcmZvcm1BY3Rpb24oKGNvbHVtbiAtIGxvY2F0aW9uLmxlZnQpLCAocm93IC0gbG9jYXRpb24udG9wKSk7CisgIH0KKworICBwcml2YXRlIGZpbmFsIHN0YXRpYyBOb2RlVGVzdGVyW10gc2lnbmlmaWNhbnROb2RlRmlsdGVycyA9IG5ldyBOb2RlVGVzdGVyW10geworICAgIG5ldyBOb2RlVGVzdGVyKCkgeworICAgICAgQE92ZXJyaWRlCisgICAgICBwdWJsaWMgYm9vbGVhbiB0ZXN0Tm9kZSAoQWNjZXNzaWJpbGl0eU5vZGVJbmZvIG5vZGUpIHsKKyAgICAgICAgaWYgKCFUZXh0VXRpbHMuZXF1YWxzKG5vZGUuZ2V0UGFja2FnZU5hbWUoKSwgImNvbS5zYW1zdW5nLmFuZHJvaWQubWVzc2FnaW5nIikpIHJldHVybiBmYWxzZTsKKyAgICAgICAgaWYgKCFTY3JlZW5VdGlsaXRpZXMuaXNTdWJjbGFzc09mKG5vZGUsIExpbmVhckxheW91dC5jbGFzcykpIHJldHVybiBmYWxzZTsKKyAgICAgICAgaWYgKG5vZGUuZ2V0Q2hpbGRDb3VudCgpICE9IDEpIHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICB9CisgICAgfQorICB9OworCisgIHB1YmxpYyBzdGF0aWMgaW50ZXJmYWNlIE5vZGVBY3Rpb25WZXJpZmllciB7CisgICAgcHVibGljIGJvb2xlYW4gdmVyaWZ5IChBY2Nlc3NpYmlsaXR5Tm9kZUluZm8gbm9kZSk7CisgIH0KKworICBwcml2YXRlIGZpbmFsIHN0YXRpYyBNYXA8SW50ZWdlciwgTm9kZUFjdGlvblZlcmlmaWVyPiBub2RlQWN0aW9uVmVyaWZpZXJzID0KKyAgICAgICAgICAgICAgIG5ldyBIYXNoTWFwPEludGVnZXIsIE5vZGVBY3Rpb25WZXJpZmllcj4oKQorICB7CisgICAgeworICAgICAgcHV0KAorICAgICAgICBBY2Nlc3NpYmlsaXR5Tm9kZUluZm8uQUNUSU9OX0NMSUNLLAorICAgICAgICBuZXcgTm9kZUFjdGlvblZlcmlmaWVyKCkgeworICAgICAgICAgIEBPdmVycmlkZQorICAgICAgICAgIHB1YmxpYyBib29sZWFuIHZlcmlmeSAoQWNjZXNzaWJpbGl0eU5vZGVJbmZvIG5vZGUpIHsKKyAgICAgICAgICAgIHJldHVybiBub2RlLmlzQ2xpY2thYmxlKCk7CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICApOworCisgICAgICBwdXQoCisgICAgICAgIEFjY2Vzc2liaWxpdHlOb2RlSW5mby5BQ1RJT05fTE9OR19DTElDSywKKyAgICAgICAgbmV3IE5vZGVBY3Rpb25WZXJpZmllcigpIHsKKyAgICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgICBwdWJsaWMgYm9vbGVhbiB2ZXJpZnkgKEFjY2Vzc2liaWxpdHlOb2RlSW5mbyBub2RlKSB7CisgICAgICAgICAgICByZXR1cm4gbm9kZS5pc0xvbmdDbGlja2FibGUoKTsKKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICk7CisKKyAgICAgIHB1dCgKKyAgICAgICAgQWNjZXNzaWJpbGl0eU5vZGVJbmZvLkFDVElPTl9TQ1JPTExfRk9SV0FSRCwKKyAgICAgICAgbmV3IE5vZGVBY3Rpb25WZXJpZmllcigpIHsKKyAgICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgICBwdWJsaWMgYm9vbGVhbiB2ZXJpZnkgKEFjY2Vzc2liaWxpdHlOb2RlSW5mbyBub2RlKSB7CisgICAgICAgICAgICByZXR1cm4gbm9kZS5pc1Njcm9sbGFibGUoKTsKKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICk7CisKKyAgICAgIHB1dCgKKyAgICAgICAgQWNjZXNzaWJpbGl0eU5vZGVJbmZvLkFDVElPTl9TQ1JPTExfQkFDS1dBUkQsCisgICAgICAgIG5ldyBOb2RlQWN0aW9uVmVyaWZpZXIoKSB7CisgICAgICAgICAgQE92ZXJyaWRlCisgICAgICAgICAgcHVibGljIGJvb2xlYW4gdmVyaWZ5IChBY2Nlc3NpYmlsaXR5Tm9kZUluZm8gbm9kZSkgeworICAgICAgICAgICAgcmV0dXJuIG5vZGUuaXNTY3JvbGxhYmxlKCk7CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICApOworICAgIH0KKyAgfTsKKworICBwdWJsaWMgc3RhdGljIFNldDxJbnRlZ2VyPiBnZXRWZXJpZmlhYmxlTm9kZUFjdGlvbnMgKCkgeworICAgIHJldHVybiBub2RlQWN0aW9uVmVyaWZpZXJzLmtleVNldCgpOworICB9CisKKyAgcHJpdmF0ZSBmaW5hbCBzdGF0aWMgaW50IFNJR05JRklDQU5UX05PREVfQUNUSU9OUzsKKyAgc3RhdGljIHsKKyAgICBpbnQgYWN0aW9ucyA9IDA7CisKKyAgICBmb3IgKEludGVnZXIgYWN0aW9uIDogZ2V0VmVyaWZpYWJsZU5vZGVBY3Rpb25zKCkpIHsKKyAgICAgIGFjdGlvbnMgfD0gYWN0aW9uOworICAgIH0KKworICAgIFNJR05JRklDQU5UX05PREVfQUNUSU9OUyA9IGFjdGlvbnM7CisgIH0KKworICBwdWJsaWMgc3RhdGljIGludCBnZXRTaWduaWZpY2FudEFjdGlvbnMgKEFjY2Vzc2liaWxpdHlOb2RlSW5mbyBub2RlKSB7CisgICAgaW50IGFjdGlvbnMgPSBub2RlLmdldEFjdGlvbnMoKSAmIFNJR05JRklDQU5UX05PREVfQUNUSU9OUzsKKworICAgIGlmIChhY3Rpb25zICE9IDApIHsKKyAgICAgIGZvciAoSW50ZWdlciBhY3Rpb24gOiBnZXRWZXJpZmlhYmxlTm9kZUFjdGlvbnMoKSkgeworICAgICAgICBpZiAoKGFjdGlvbnMgJiBhY3Rpb24pICE9IDApIHsKKyAgICAgICAgICBpZiAoIW5vZGVBY3Rpb25WZXJpZmllcnMuZ2V0KGFjdGlvbikudmVyaWZ5KG5vZGUpKSB7CisgICAgICAgICAgICBpZiAoKGFjdGlvbnMgJj0gfmFjdGlvbikgPT0gMCkgeworICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gYWN0aW9uczsKKyAgfQorCisgIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBoYXNTaWduaWZpY2FudEFjdGlvbiAoQWNjZXNzaWJpbGl0eU5vZGVJbmZvIG5vZGUpIHsKKyAgICByZXR1cm4gZ2V0U2lnbmlmaWNhbnRBY3Rpb25zKG5vZGUpICE9IDA7CisgIH0KKworICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgbWFrZVRleHQgKEFjY2Vzc2liaWxpdHlOb2RlSW5mbyBub2RlKSB7CisgICAgU3RyaW5nQnVpbGRlciBzYiA9IG5ldyBTdHJpbmdCdWlsZGVyKCk7CisgICAgYm9vbGVhbiBhbGxvd1plcm9MZW5ndGggPSBmYWxzZTsKKyAgICBib29sZWFuIGluY2x1ZGVEZXNjcmlwdGlvbiA9IGZhbHNlOworCisgICAgaWYgKG5vZGUuaXNDaGVja2FibGUoKSkgeworICAgICAgaW5jbHVkZURlc2NyaXB0aW9uID0gdHJ1ZTsKKyAgICAgIGlmIChzYi5sZW5ndGgoKSA+IDApIHNiLmFwcGVuZCgnICcpOworCisgICAgICBpZiAoU2NyZWVuVXRpbGl0aWVzLmlzU3dpdGNoKG5vZGUpKSB7CisgICAgICAgIHNiLmFwcGVuZChDaGFyYWN0ZXJzLlNXSVRDSF9CRUdJTik7CisgICAgICAgIHNiLmFwcGVuZChub2RlLmlzQ2hlY2tlZCgpPyBDaGFyYWN0ZXJzLlNXSVRDSF9PTjogQ2hhcmFjdGVycy5TV0lUQ0hfT0ZGKTsKKyAgICAgICAgc2IuYXBwZW5kKENoYXJhY3RlcnMuU1dJVENIX0VORCk7CisgICAgICB9IGVsc2UgaWYgKFNjcmVlblV0aWxpdGllcy5pc1JhZGlvQnV0dG9uKG5vZGUpKSB7CisgICAgICAgIHNiLmFwcGVuZChDaGFyYWN0ZXJzLlJBRElPX0JFR0lOKTsKKyAgICAgICAgc2IuYXBwZW5kKG5vZGUuaXNDaGVja2VkKCk/IENoYXJhY3RlcnMuUkFESU9fTUFSSzogJyAnKTsKKyAgICAgICAgc2IuYXBwZW5kKENoYXJhY3RlcnMuUkFESU9fRU5EKTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIHNiLmFwcGVuZChDaGFyYWN0ZXJzLkNIRUNLQk9YX0JFR0lOKTsKKyAgICAgICAgc2IuYXBwZW5kKG5vZGUuaXNDaGVja2VkKCk/IENoYXJhY3RlcnMuQ0hFQ0tCT1hfTUFSSzogJyAnKTsKKyAgICAgICAgc2IuYXBwZW5kKENoYXJhY3RlcnMuQ0hFQ0tCT1hfRU5EKTsKKyAgICAgIH0KKyAgICB9CisKKyAgICB7CisgICAgICBTdHJpbmcgdGV4dCA9IFNjcmVlblV0aWxpdGllcy5nZXRUZXh0KG5vZGUpOworCisgICAgICBpZiAodGV4dCAhPSBudWxsKSB7CisgICAgICAgIGFsbG93WmVyb0xlbmd0aCA9IHRydWU7CisKKyAgICAgICAgaWYgKHRleHQubGVuZ3RoKCkgPiAwKSB7CisgICAgICAgICAgaWYgKHNiLmxlbmd0aCgpID4gMCkgc2IuYXBwZW5kKCcgJyk7CisgICAgICAgICAgc2IuYXBwZW5kKHRleHQpOworICAgICAgICB9CisgICAgICB9IGVsc2UgaWYgKFNjcmVlblV0aWxpdGllcy5pc1N1YmNsYXNzT2Yobm9kZSwgSW1hZ2VWaWV3LmNsYXNzKSkgeworICAgICAgICBpbmNsdWRlRGVzY3JpcHRpb24gPSB0cnVlOworICAgICAgfQorICAgIH0KKworICAgIGlmIChpbmNsdWRlRGVzY3JpcHRpb24pIHsKKyAgICAgIFN0cmluZyBkZXNjcmlwdGlvbiA9IFNjcmVlblV0aWxpdGllcy5nZXREZXNjcmlwdGlvbihub2RlKTsKKworICAgICAgaWYgKGRlc2NyaXB0aW9uICE9IG51bGwpIHsKKyAgICAgICAgaWYgKHNiLmxlbmd0aCgpID4gMCkgc2IuYXBwZW5kKCcgJyk7CisgICAgICAgIHNiLmFwcGVuZCgnWycpOworICAgICAgICBzYi5hcHBlbmQoZGVzY3JpcHRpb24pOworICAgICAgICBzYi5hcHBlbmQoJ10nKTsKKyAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoQVBJVGVzdHMuaGF2ZUtpdGthdCkgeworICAgICAgQWNjZXNzaWJpbGl0eU5vZGVJbmZvLlJhbmdlSW5mbyByYW5nZSA9IG5vZGUuZ2V0UmFuZ2VJbmZvKCk7CisKKyAgICAgIGlmIChyYW5nZSAhPSBudWxsKSB7CisgICAgICAgIGlmIChzYi5sZW5ndGgoKSA9PSAwKSB7CisgICAgICAgICAgQ2hhclNlcXVlbmNlIGRlc2NyaXB0aW9uID0gU2NyZWVuVXRpbGl0aWVzLmdldERlc2NyaXB0aW9uKG5vZGUpOworICAgICAgICAgIGlmIChkZXNjcmlwdGlvbiAhPSBudWxsKSBzYi5hcHBlbmQoZGVzY3JpcHRpb24pOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHNiLmxlbmd0aCgpID4gMCkgc2IuYXBwZW5kKCcgJyk7CisgICAgICAgIFN0cmluZyBmb3JtYXQgPSBTY3JlZW5VdGlsaXRpZXMuZ2V0UmFuZ2VWYWx1ZUZvcm1hdChyYW5nZSk7CisKKyAgICAgICAgc2IuYXBwZW5kKCJAIik7CisgICAgICAgIHNiLmFwcGVuZChTdHJpbmcuZm9ybWF0KGZvcm1hdCwgcmFuZ2UuZ2V0Q3VycmVudCgpKSk7CisgICAgICAgIHNiLmFwcGVuZCgiICgiKTsKKyAgICAgICAgc2IuYXBwZW5kKFN0cmluZy5mb3JtYXQoZm9ybWF0LCByYW5nZS5nZXRNaW4oKSkpOworICAgICAgICBzYi5hcHBlbmQoIiAtICIpOworICAgICAgICBzYi5hcHBlbmQoU3RyaW5nLmZvcm1hdChmb3JtYXQsIHJhbmdlLmdldE1heCgpKSk7CisgICAgICAgIHNiLmFwcGVuZCgiKSIpOworICAgICAgfQorICAgIH0KKworICAgIGlmICghKGFsbG93WmVyb0xlbmd0aCB8fCAoc2IubGVuZ3RoKCkgPiAwKSkpIHsKKyAgICAgIGZvciAoTm9kZVRlc3RlciBmaWx0ZXIgOiBzaWduaWZpY2FudE5vZGVGaWx0ZXJzKSB7CisgICAgICAgIGlmIChmaWx0ZXIudGVzdE5vZGUobm9kZSkpIHsKKyAgICAgICAgICBTdHJpbmcgZGVzY3JpcHRpb24gPSBTY3JlZW5VdGlsaXRpZXMuZ2V0RGVzY3JpcHRpb24obm9kZSk7CisgICAgICAgICAgaWYgKGRlc2NyaXB0aW9uICE9IG51bGwpIHNiLmFwcGVuZChkZXNjcmlwdGlvbik7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgIH0KKworICAgICAgaWYgKHNiLmxlbmd0aCgpID09IDApIHJldHVybiBudWxsOworICAgIH0KKworICAgIHJldHVybiBzYi50b1N0cmluZygpOworICB9CisKKyAgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIGdldERlc2NyaXB0aW9uIChBY2Nlc3NpYmlsaXR5Tm9kZUluZm8gbm9kZSkgeworICAgIHsKKyAgICAgIFN0cmluZyBkZXNjcmlwdGlvbiA9IFNjcmVlblV0aWxpdGllcy5nZXREZXNjcmlwdGlvbihub2RlKTsKKyAgICAgIGlmIChkZXNjcmlwdGlvbiAhPSBudWxsKSByZXR1cm4gZGVzY3JpcHRpb247CisgICAgfQorCisgICAgeworICAgICAgU3RyaW5nQnVpbGRlciBzYiA9IG5ldyBTdHJpbmdCdWlsZGVyKCk7CisgICAgICBpbnQgY2hpbGRDb3VudCA9IG5vZGUuZ2V0Q2hpbGRDb3VudCgpOworCisgICAgICBmb3IgKGludCBjaGlsZEluZGV4PTA7IGNoaWxkSW5kZXg8Y2hpbGRDb3VudDsgY2hpbGRJbmRleCs9MSkgeworICAgICAgICBBY2Nlc3NpYmlsaXR5Tm9kZUluZm8gY2hpbGQgPSBub2RlLmdldENoaWxkKGNoaWxkSW5kZXgpOworCisgICAgICAgIGlmIChjaGlsZCAhPSBudWxsKSB7CisgICAgICAgICAgaWYgKCFoYXNTaWduaWZpY2FudEFjdGlvbihjaGlsZCkpIHsKKyAgICAgICAgICAgIFN0cmluZyBkZXNjcmlwdGlvbiA9IFNjcmVlblV0aWxpdGllcy5nZXREZXNjcmlwdGlvbihjaGlsZCk7CisKKyAgICAgICAgICAgIGlmIChkZXNjcmlwdGlvbiAhPSBudWxsKSB7CisgICAgICAgICAgICAgIGlmIChzYi5sZW5ndGgoKSA+IDApIHNiLmFwcGVuZCgnICcpOworICAgICAgICAgICAgICBzYi5hcHBlbmQoZGVzY3JpcHRpb24pOworICAgICAgICAgICAgfQorICAgICAgICAgIH0KKworICAgICAgICAgIGNoaWxkLnJlY3ljbGUoKTsKKyAgICAgICAgICBjaGlsZCA9IG51bGw7CisgICAgICAgIH0KKyAgICAgIH0KKworICAgICAgaWYgKHNiLmxlbmd0aCgpID4gMCkgcmV0dXJuIHNiLnRvU3RyaW5nKCk7CisgICAgfQorCisgICAgcmV0dXJuIG51bGw7CisgIH0KKworICBwcml2YXRlIGZpbmFsIGludCBhZGRTY3JlZW5FbGVtZW50cyAoQWNjZXNzaWJpbGl0eU5vZGVJbmZvIHJvb3QpIHsKKyAgICBpbnQgcHJvcGFnYXRlZEFjdGlvbnMgPSAwOworCisgICAgaWYgKHJvb3QgIT0gbnVsbCkgeworICAgICAgeworICAgICAgICBpbnQgY2hpbGRDb3VudCA9IHJvb3QuZ2V0Q2hpbGRDb3VudCgpOworCisgICAgICAgIGZvciAoaW50IGNoaWxkSW5kZXg9MDsgY2hpbGRJbmRleDxjaGlsZENvdW50OyBjaGlsZEluZGV4Kz0xKSB7CisgICAgICAgICAgQWNjZXNzaWJpbGl0eU5vZGVJbmZvIGNoaWxkID0gcm9vdC5nZXRDaGlsZChjaGlsZEluZGV4KTsKKworICAgICAgICAgIGlmIChjaGlsZCAhPSBudWxsKSB7CisgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICBwcm9wYWdhdGVkQWN0aW9ucyB8PSBhZGRTY3JlZW5FbGVtZW50cyhjaGlsZCk7CisgICAgICAgICAgICB9IGZpbmFsbHkgeworICAgICAgICAgICAgICBjaGlsZC5yZWN5Y2xlKCk7CisgICAgICAgICAgICAgIGNoaWxkID0gbnVsbDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgIH0KKworICAgICAgaW50IGFjdGlvbnMgPSBnZXRTaWduaWZpY2FudEFjdGlvbnMocm9vdCk7CisgICAgICBib29sZWFuIGhhc0FjdGlvbnMgPSAoYWN0aW9ucyAmIH5wcm9wYWdhdGVkQWN0aW9ucykgIT0gMDsKKyAgICAgIHByb3BhZ2F0ZWRBY3Rpb25zICY9IH5hY3Rpb25zOworCisgICAgICBpZiAoU2NyZWVuVXRpbGl0aWVzLmlzVmlzaWJsZShyb290KSkgeworICAgICAgICBTdHJpbmcgdGV4dCA9IG1ha2VUZXh0KHJvb3QpOworICAgICAgICBib29sZWFuIGhhc1RleHQgPSB0ZXh0ICE9IG51bGw7CisgICAgICAgIGJvb2xlYW4gaXNTa2lwcGFibGUgPSBmYWxzZTsKKworICAgICAgICB7CisgICAgICAgICAgU3RyaW5nIGxhYmVsID0gQ2hyb21lUm9sZS5nZXRMYWJlbChyb290KTsKKworICAgICAgICAgIGlmIChsYWJlbCAhPSBudWxsKSB7CisgICAgICAgICAgICBpZiAobGFiZWwuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICAgIGlzU2tpcHBhYmxlID0gdHJ1ZTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgIGxhYmVsID0gU3RyaW5nLmZvcm1hdCgiKCVzKSIsIGxhYmVsKTsKKworICAgICAgICAgICAgICBpZiAodGV4dCAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgbGFiZWwgKz0gJyAnOworICAgICAgICAgICAgICAgIGxhYmVsICs9IHRleHQ7CisgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICB0ZXh0ID0gbGFiZWw7CisgICAgICAgICAgICB9CisgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYgKGhhc0FjdGlvbnMgJiYgIWhhc1RleHQpIHsKKyAgICAgICAgICBTdHJpbmcgZGVzY3JpcHRpb24gPSBnZXREZXNjcmlwdGlvbihyb290KTsKKworICAgICAgICAgIGlmICghaXNTa2lwcGFibGUpIHsKKyAgICAgICAgICAgIGlmICgoZGVzY3JpcHRpb24gPT0gbnVsbCkgJiYgKHRleHQgPT0gbnVsbCkpIHsKKyAgICAgICAgICAgICAgZGVzY3JpcHRpb24gPSBTY3JlZW5VdGlsaXRpZXMuZ2V0Q2xhc3NOYW1lKHJvb3QpOworCisgICAgICAgICAgICAgIGlmIChBUElUZXN0cy5oYXZlSmVsbHlCZWFuTVIyKSB7CisgICAgICAgICAgICAgICAgU3RyaW5nIG5hbWUgPSByb290LmdldFZpZXdJZFJlc291cmNlTmFtZSgpOworCisgICAgICAgICAgICAgICAgaWYgKG5hbWUgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgICAgU3RyaW5nIG1hcmtlciA9ICI6aWQvIjsKKyAgICAgICAgICAgICAgICAgIGludCBpbmRleCA9IG5hbWUuaW5kZXhPZihtYXJrZXIpOworICAgICAgICAgICAgICAgICAgbmFtZSA9IChpbmRleCA8IDApPyBudWxsOiBuYW1lLnN1YnN0cmluZyhpbmRleCArIG1hcmtlci5sZW5ndGgoKSk7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgaWYgKGRlc2NyaXB0aW9uID09IG51bGwpIHsKKyAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uID0gbmFtZTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG5hbWUgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb24gKz0gIiAiICsgbmFtZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICBpZiAoZGVzY3JpcHRpb24gPT0gbnVsbCkgZGVzY3JpcHRpb24gPSAiPyI7CisgICAgICAgICAgICAgIGRlc2NyaXB0aW9uID0gIigiICsgZGVzY3JpcHRpb24gKyAiKSI7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChkZXNjcmlwdGlvbiAhPSBudWxsKSB7CisgICAgICAgICAgICAgIGlmICh0ZXh0ID09IG51bGwpIHsKKyAgICAgICAgICAgICAgICB0ZXh0ID0gZGVzY3JpcHRpb247CisgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgdGV4dCArPSAnICc7CisgICAgICAgICAgICAgICAgdGV4dCArPSBkZXNjcmlwdGlvbjsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmICh0ZXh0ICE9IG51bGwpIHsKKyAgICAgICAgICBwcm9wYWdhdGVkQWN0aW9ucyB8PSBTSUdOSUZJQ0FOVF9OT0RFX0FDVElPTlMgJiB+YWN0aW9uczsKKyAgICAgICAgICBpZiAoIXJvb3QuaXNFbmFibGVkKCkpIHRleHQgKz0gIiAoZGlzYWJsZWQpIjsKKyAgICAgICAgICBzY3JlZW5FbGVtZW50cy5hZGQodGV4dCwgcm9vdCk7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gcHJvcGFnYXRlZEFjdGlvbnM7CisgIH0KKworICBwcml2YXRlIGZpbmFsIGludCBmaW5kU2NyZWVuV2lkdGggKCkgeworICAgIGludCB3aWR0aCA9IDE7CisKKyAgICBpZiAoc2NyZWVuUm93cy5pc0VtcHR5KCkpIHsKKyAgICAgIHNjcmVlblJvd3MuYWRkKCJ3YWl0aW5nIGZvciBzY3JlZW4gdXBkYXRlIik7CisgICAgfQorCisgICAgZm9yIChTdHJpbmcgcm93IDogc2NyZWVuUm93cykgeworICAgICAgaW50IGxlbmd0aCA9IHJvdy5sZW5ndGgoKTsKKyAgICAgIGlmIChsZW5ndGggPiB3aWR0aCkgd2lkdGggPSBsZW5ndGg7CisgICAgfQorCisgICAgcmV0dXJuIHdpZHRoOworICB9CisKKyAgcHJpdmF0ZSBmaW5hbCBBY2Nlc3NpYmlsaXR5Tm9kZUluZm8gZmluZEN1cnNvck5vZGUgKCkgeworICAgIEFjY2Vzc2liaWxpdHlOb2RlSW5mbyByb290ID0gZ2V0Um9vdE5vZGUoKTsKKworICAgIGlmIChyb290ICE9IG51bGwpIHsKKyAgICAgIGlmIChBUElUZXN0cy5oYXZlSmVsbHlCZWFuKSB7CisgICAgICAgIEFjY2Vzc2liaWxpdHlOb2RlSW5mbyBub2RlID0gcm9vdC5maW5kRm9jdXMoQWNjZXNzaWJpbGl0eU5vZGVJbmZvLkZPQ1VTX0FDQ0VTU0lCSUxJVFkpOworCisgICAgICAgIGlmIChub2RlICE9IG51bGwpIHsKKyAgICAgICAgICByb290LnJlY3ljbGUoKTsKKyAgICAgICAgICByb290ID0gbm9kZTsKKyAgICAgICAgICBub2RlID0gU2NyZWVuVXRpbGl0aWVzLmZpbmRUZXh0Tm9kZShyb290KTsKKworICAgICAgICAgIGlmIChub2RlICE9IG51bGwpIHsKKyAgICAgICAgICAgIHJvb3QucmVjeWNsZSgpOworICAgICAgICAgICAgcm9vdCA9IG5vZGU7CisgICAgICAgICAgICBub2RlID0gbnVsbDsKKyAgICAgICAgICB9CisKKyAgICAgICAgICByZXR1cm4gcm9vdDsKKyAgICAgICAgfQorICAgICAgfQorCisgICAgICB7CisgICAgICAgIEFjY2Vzc2liaWxpdHlOb2RlSW5mbyBub2RlOworCisgICAgICAgIGlmIChBUElUZXN0cy5oYXZlSmVsbHlCZWFuKSB7CisgICAgICAgICAgbm9kZSA9IHJvb3QuZmluZEZvY3VzKEFjY2Vzc2liaWxpdHlOb2RlSW5mby5GT0NVU19JTlBVVCk7CisgICAgICAgIH0gZWxzZSBpZiAoQVBJVGVzdHMuaGF2ZUljZUNyZWFtU2FuZHdpY2gpIHsKKyAgICAgICAgICBub2RlID0gU2NyZWVuVXRpbGl0aWVzLmZpbmRGb2N1c2VkTm9kZShyb290KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICBub2RlID0gbnVsbDsKKyAgICAgICAgfQorCisgICAgICAgIGlmICghQVBJVGVzdHMuaGF2ZUplbGx5QmVhbikgeworICAgICAgICAgIGlmIChub2RlID09IG51bGwpIHsKKyAgICAgICAgICAgIGlmIChBUElUZXN0cy5oYXZlSWNlQ3JlYW1TYW5kd2ljaCkgeworICAgICAgICAgICAgICBpZiAoKG5vZGUgPSBTY3JlZW5VdGlsaXRpZXMuZmluZEZvY3VzYWJsZU5vZGUocm9vdCkpICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICBpZiAoIW5vZGUucGVyZm9ybUFjdGlvbihBY2Nlc3NpYmlsaXR5Tm9kZUluZm8uQUNUSU9OX0ZPQ1VTKSkgeworICAgICAgICAgICAgICAgICAgbm9kZS5yZWN5Y2xlKCk7CisgICAgICAgICAgICAgICAgICBub2RlID0gbnVsbDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZiAobm9kZSAhPSBudWxsKSB7CisgICAgICAgICAgcm9vdC5yZWN5Y2xlKCk7CisgICAgICAgICAgcm9vdCA9IG5vZGU7CisgICAgICAgICAgbm9kZSA9IFNjcmVlblV0aWxpdGllcy5maW5kU2VsZWN0ZWROb2RlKHJvb3QpOworCisgICAgICAgICAgaWYgKG5vZGUgIT0gbnVsbCkgeworICAgICAgICAgICAgcm9vdC5yZWN5Y2xlKCk7CisgICAgICAgICAgICByb290ID0gbm9kZTsKKyAgICAgICAgICAgIG5vZGUgPSBudWxsOworICAgICAgICAgIH0KKworICAgICAgICAgIGlmICgobm9kZSA9IFNjcmVlblV0aWxpdGllcy5maW5kVGV4dE5vZGUocm9vdCkpID09IG51bGwpIHsKKyAgICAgICAgICAgIG5vZGUgPSAgU2NyZWVuVXRpbGl0aWVzLmZpbmREZXNjcmliZWROb2RlKHJvb3QpOworICAgICAgICAgIH0KKworICAgICAgICAgIGlmIChub2RlICE9IG51bGwpIHsKKyAgICAgICAgICAgIHJvb3QucmVjeWNsZSgpOworICAgICAgICAgICAgcm9vdCA9IG5vZGU7CisgICAgICAgICAgICBub2RlID0gbnVsbDsKKyAgICAgICAgICB9CisKKyAgICAgICAgICByZXR1cm4gcm9vdDsKKyAgICAgICAgfQorICAgICAgfQorICAgIH0KKworICAgIHJldHVybiByb290OworICB9CisKKyAgcHJpdmF0ZSBzdGF0aWMgdm9pZCBsb2cgKFN0cmluZyBtZXNzYWdlKSB7CisgICAgTG9nLmQoTE9HX1RBRywgbWVzc2FnZSk7CisgIH0KKworICBwcml2YXRlIGZpbmFsIHZvaWQgbG9nUmVuZGVyZWRFbGVtZW50cyAoKSB7CisgICAgbG9nKCgic2NyZWVuIGVsZW1lbnQgY291bnQ6ICIgKyBzY3JlZW5FbGVtZW50cy5zaXplKCkpKTsKKyAgICBpbnQgZWxlbWVudEluZGV4ID0gMDsKKworICAgIGZvciAoU2NyZWVuRWxlbWVudCBlbGVtZW50IDogc2NyZWVuRWxlbWVudHMpIHsKKyAgICAgIGxvZygKKyAgICAgICAgU3RyaW5nLmZvcm1hdChMb2NhbGUuUk9PVCwKKyAgICAgICAgICAic2NyZWVuIGVsZW1lbnQgJWQ6ICVzIiwgZWxlbWVudEluZGV4KyssIGVsZW1lbnQuZ2V0RWxlbWVudFRleHQoKQorICAgICAgICApCisgICAgICApOworICAgIH0KKyAgfQorCisgIHByaXZhdGUgZmluYWwgdm9pZCBsb2dSZW5kZXJlZFJvd3MgKCkgeworICAgIGxvZygoInNjcmVlbiByb3cgY291bnQ6ICIgKyBzY3JlZW5Sb3dzLnNpemUoKSkpOworICAgIGxvZygoInNjcmVlbiB3aWR0aDogIiArIHNjcmVlbldpZHRoKSk7CisgICAgaW50IHJvd0luZGV4ID0gMDsKKworICAgIGZvciAoU3RyaW5nIHJvdyA6IHNjcmVlblJvd3MpIHsKKyAgICAgIGxvZygKKyAgICAgICAgU3RyaW5nLmZvcm1hdChMb2NhbGUuUk9PVCwKKyAgICAgICAgICAic2NyZWVuIHJvdyAlZDogJXMiLCByb3dJbmRleCsrLCByb3cudG9TdHJpbmcoKQorICAgICAgICApCisgICAgICApOworICAgIH0KKyAgfQorCisgIHB1YmxpYyBmaW5hbCB2b2lkIGxvZ1JlbmRlcmVkU2NyZWVuICgpIHsKKyAgICBsb2coImJlZ2luIHJlbmRlcmVkIHNjcmVlbiIpOworICAgIGxvZ1JlbmRlcmVkRWxlbWVudHMoKTsKKyAgICBsb2dSZW5kZXJlZFJvd3MoKTsKKyAgICBsb2coImVuZCByZW5kZXJlZCBzY3JlZW4iKTsKKyAgfQorCisgIHB1YmxpYyBSZW5kZXJlZFNjcmVlbiAoQWNjZXNzaWJpbGl0eU5vZGVJbmZvIG5vZGUpIHsKKyAgICBpZiAobm9kZSAhPSBudWxsKSBub2RlID0gQWNjZXNzaWJpbGl0eU5vZGVJbmZvLm9idGFpbihub2RlKTsKKworICAgIGV2ZW50Tm9kZSA9IG5vZGU7CisgICAgcm9vdE5vZGUgPSBTY3JlZW5VdGlsaXRpZXMuZmluZFJvb3ROb2RlKG5vZGUpOworCisgICAgYWRkU2NyZWVuRWxlbWVudHMocm9vdE5vZGUpOworICAgIHNjcmVlbkVsZW1lbnRzLmZpbmlzaCgpOworICAgIEJyYWlsbGVSZW5kZXJlci5nZXRCcmFpbGxlUmVuZGVyZXIoKS5yZW5kZXJTY3JlZW5FbGVtZW50cyhzY3JlZW5FbGVtZW50cywgc2NyZWVuUm93cyk7CisKKyAgICBzY3JlZW5XaWR0aCA9IGZpbmRTY3JlZW5XaWR0aCgpOworICAgIGN1cnNvck5vZGUgPSBmaW5kQ3Vyc29yTm9kZSgpOworCisgICAgaWYgKEFwcGxpY2F0aW9uU2V0dGluZ3MuTE9HX1JFTkRFUkVEX1NDUkVFTikgeworICAgICAgbG9nUmVuZGVyZWRTY3JlZW4oKTsKKyAgICB9CisgIH0KKworICBwcml2YXRlIGFic3RyYWN0IHN0YXRpYyBjbGFzcyBOZXh0RWxlbWVudEdldHRlciB7CisgICAgcHVibGljIGFic3RyYWN0IFNjcmVlbkVsZW1lbnQgZ2V0TmV4dEVsZW1lbnQgKFNjcmVlbkVsZW1lbnQgZnJvbSk7CisgIH0KKworICBwcml2YXRlIGZpbmFsIHN0YXRpYyBOZXh0RWxlbWVudEdldHRlciBmb3J3YXJkRWxlbWVudEdldHRlciA9CisgICAgbmV3IE5leHRFbGVtZW50R2V0dGVyKCkgeworICAgICAgQE92ZXJyaWRlCisgICAgICBwdWJsaWMgZmluYWwgU2NyZWVuRWxlbWVudCBnZXROZXh0RWxlbWVudCAoU2NyZWVuRWxlbWVudCBmcm9tKSB7CisgICAgICAgIHJldHVybiBmcm9tLmdldEZvcndhcmRFbGVtZW50KCk7CisgICAgICB9CisgICAgfTsKKworICBwcml2YXRlIGZpbmFsIHN0YXRpYyBOZXh0RWxlbWVudEdldHRlciBiYWNrd2FyZEVsZW1lbnRHZXR0ZXIgPQorICAgIG5ldyBOZXh0RWxlbWVudEdldHRlcigpIHsKKyAgICAgIEBPdmVycmlkZQorICAgICAgcHVibGljIGZpbmFsIFNjcmVlbkVsZW1lbnQgZ2V0TmV4dEVsZW1lbnQgKFNjcmVlbkVsZW1lbnQgZnJvbSkgeworICAgICAgICByZXR1cm4gZnJvbS5nZXRCYWNrd2FyZEVsZW1lbnQoKTsKKyAgICAgIH0KKyAgICB9OworCisgIHByaXZhdGUgYWJzdHJhY3QgY2xhc3MgTmV4dEVsZW1lbnRGaW5kZXIgZXh0ZW5kcyBOZXh0RWxlbWVudEdldHRlciB7CisgICAgcHJvdGVjdGVkIGFic3RyYWN0IFNjcmVlbkVsZW1lbnQgZ2V0Q2FjaGVkRWxlbWVudCAoU2NyZWVuRWxlbWVudCBmcm9tKTsKKyAgICBwcm90ZWN0ZWQgYWJzdHJhY3Qgdm9pZCBzZXRDYWNoZWRFbGVtZW50IChTY3JlZW5FbGVtZW50IGZyb20sIFNjcmVlbkVsZW1lbnQgdG8pOworCisgICAgcHJvdGVjdGVkIGFic3RyYWN0IGJvb2xlYW4gZ29Gb3J3YXJkICgpOworICAgIHByb3RlY3RlZCBhYnN0cmFjdCBpbnQgZ2V0TGVzc2VyRWRnZSAoUmVjdCBsb2NhdGlvbik7CisgICAgcHJvdGVjdGVkIGFic3RyYWN0IGludCBnZXRHcmVhdGVyRWRnZSAoUmVjdCBsb2NhdGlvbik7CisgICAgcHJvdGVjdGVkIGFic3RyYWN0IGludCBnZXRMZXNzZXJTaWRlIChSZWN0IGxvY2F0aW9uKTsKKyAgICBwcm90ZWN0ZWQgYWJzdHJhY3QgaW50IGdldEdyZWF0ZXJTaWRlIChSZWN0IGxvY2F0aW9uKTsKKworICAgIHByaXZhdGUgZmluYWwgU2NyZWVuRWxlbWVudCBmaW5kTmV4dEVsZW1lbnQgKFNjcmVlbkVsZW1lbnQgZnJvbSkgeworICAgICAgZmluYWwgUmVjdCBmcm9tTG9jYXRpb24gPSBmcm9tLmdldFZpc3VhbExvY2F0aW9uKCk7CisgICAgICBpZiAoZnJvbUxvY2F0aW9uID09IG51bGwpIHJldHVybiBudWxsOworCisgICAgICBmaW5hbCBib29sZWFuIGZvcndhcmQgPSBnb0ZvcndhcmQoKTsKKyAgICAgIGZpbmFsIGludCBmcm9tRWRnZSA9IGZvcndhcmQ/IGdldEdyZWF0ZXJFZGdlKGZyb21Mb2NhdGlvbik6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRMZXNzZXJFZGdlKGZyb21Mb2NhdGlvbik7CisKKyAgICAgIGRvdWJsZSBiZXN0QW5nbGUgPSBEb3VibGUuTUFYX1ZBTFVFOworICAgICAgZG91YmxlIGJlc3REaXN0YW5jZSA9IERvdWJsZS5NQVhfVkFMVUU7CisgICAgICBTY3JlZW5FbGVtZW50IGJlc3RFbGVtZW50ID0gbnVsbDsKKworICAgICAgZm9yIChTY3JlZW5FbGVtZW50IHRvIDogc2NyZWVuRWxlbWVudHMpIHsKKyAgICAgICAgaWYgKHRvID09IGZyb20pIGNvbnRpbnVlOworCisgICAgICAgIFJlY3QgdG9Mb2NhdGlvbiA9IHRvLmdldFZpc3VhbExvY2F0aW9uKCk7CisgICAgICAgIGlmICh0b0xvY2F0aW9uID09IG51bGwpIGNvbnRpbnVlOworCisgICAgICAgIGRvdWJsZSBlZGdlRGlzdGFuY2UgPSBmb3J3YXJkPyAoZ2V0TGVzc2VyRWRnZSh0b0xvY2F0aW9uKSAtIGZyb21FZGdlKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChmcm9tRWRnZSAtIGdldEdyZWF0ZXJFZGdlKHRvTG9jYXRpb24pKTsKKworICAgICAgICBpZiAoZWRnZURpc3RhbmNlIDwgMGQpIGNvbnRpbnVlOworICAgICAgICBkb3VibGUgc2lkZURpc3RhbmNlID0gZ2V0TGVzc2VyU2lkZShmcm9tTG9jYXRpb24pIC0gZ2V0R3JlYXRlclNpZGUodG9Mb2NhdGlvbik7CisgICAgICAgIGlmIChzaWRlRGlzdGFuY2UgPCAwZCkgc2lkZURpc3RhbmNlID0gZ2V0TGVzc2VyU2lkZSh0b0xvY2F0aW9uKSAtIGdldEdyZWF0ZXJTaWRlKGZyb21Mb2NhdGlvbik7CisgICAgICAgIGlmIChzaWRlRGlzdGFuY2UgPCAwZCkgc2lkZURpc3RhbmNlID0gMGQ7CisKKyAgICAgICAgZG91YmxlIGFuZ2xlID0gTWF0aC5hdGFuMihzaWRlRGlzdGFuY2UsIGVkZ2VEaXN0YW5jZSk7CisgICAgICAgIGRvdWJsZSBkaXN0YW5jZSA9IE1hdGguaHlwb3Qoc2lkZURpc3RhbmNlLCBlZGdlRGlzdGFuY2UpOworCisgICAgICAgIGlmIChiZXN0RWxlbWVudCAhPSBudWxsKSB7CisgICAgICAgICAgaWYgKGFuZ2xlID4gYmVzdEFuZ2xlKSBjb250aW51ZTsKKworICAgICAgICAgIGlmIChhbmdsZSA9PSBiZXN0QW5nbGUpIHsKKyAgICAgICAgICAgIGlmIChkaXN0YW5jZSA+PSBiZXN0RGlzdGFuY2UpIHsKKyAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgYmVzdEFuZ2xlID0gYW5nbGU7CisgICAgICAgIGJlc3REaXN0YW5jZSA9IGRpc3RhbmNlOworICAgICAgICBiZXN0RWxlbWVudCA9IHRvOworICAgICAgfQorCisgICAgICByZXR1cm4gYmVzdEVsZW1lbnQ7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIGZpbmFsIFNjcmVlbkVsZW1lbnQgZ2V0TmV4dEVsZW1lbnQgKFNjcmVlbkVsZW1lbnQgZnJvbSkgeworICAgICAgU2NyZWVuRWxlbWVudCB0byA9IGdldENhY2hlZEVsZW1lbnQoZnJvbSk7CisKKyAgICAgIGlmICh0byA9PSBmcm9tKSB7CisgICAgICAgIHRvID0gZmluZE5leHRFbGVtZW50KGZyb20pOworICAgICAgICBzZXRDYWNoZWRFbGVtZW50KGZyb20sIHRvKTsKKyAgICAgIH0KKworICAgICAgcmV0dXJuIHRvOworICAgIH0KKyAgfQorCisgIHByaXZhdGUgYWJzdHJhY3QgY2xhc3MgVmVydGljYWxFbGVtZW50RmluZGVyIGV4dGVuZHMgTmV4dEVsZW1lbnRGaW5kZXIgeworICAgIEBPdmVycmlkZQorICAgIHByb3RlY3RlZCBmaW5hbCBpbnQgZ2V0TGVzc2VyRWRnZSAoUmVjdCBsb2NhdGlvbikgeworICAgICAgcmV0dXJuIGxvY2F0aW9uLnRvcDsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwcm90ZWN0ZWQgZmluYWwgaW50IGdldEdyZWF0ZXJFZGdlIChSZWN0IGxvY2F0aW9uKSB7CisgICAgICByZXR1cm4gbG9jYXRpb24uYm90dG9tOworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHByb3RlY3RlZCBmaW5hbCBpbnQgZ2V0TGVzc2VyU2lkZSAoUmVjdCBsb2NhdGlvbikgeworICAgICAgcmV0dXJuIGxvY2F0aW9uLmxlZnQ7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHJvdGVjdGVkIGZpbmFsIGludCBnZXRHcmVhdGVyU2lkZSAoUmVjdCBsb2NhdGlvbikgeworICAgICAgcmV0dXJuIGxvY2F0aW9uLnJpZ2h0OworICAgIH0KKyAgfQorCisgIHByaXZhdGUgZmluYWwgTmV4dEVsZW1lbnRHZXR0ZXIgdXB3YXJkRWxlbWVudEZpbmRlciA9CisgICAgbmV3IFZlcnRpY2FsRWxlbWVudEZpbmRlcigpIHsKKyAgICAgIEBPdmVycmlkZQorICAgICAgcHJvdGVjdGVkIGZpbmFsIFNjcmVlbkVsZW1lbnQgZ2V0Q2FjaGVkRWxlbWVudCAoU2NyZWVuRWxlbWVudCBmcm9tKSB7CisgICAgICAgIHJldHVybiBmcm9tLmdldFVwd2FyZEVsZW1lbnQoKTsKKyAgICAgIH0KKworICAgICAgQE92ZXJyaWRlCisgICAgICBwcm90ZWN0ZWQgZmluYWwgdm9pZCBzZXRDYWNoZWRFbGVtZW50IChTY3JlZW5FbGVtZW50IGZyb20sIFNjcmVlbkVsZW1lbnQgdG8pIHsKKyAgICAgICAgZnJvbS5zZXRVcHdhcmRFbGVtZW50KHRvKTsKKyAgICAgIH0KKworICAgICAgQE92ZXJyaWRlCisgICAgICBwcm90ZWN0ZWQgZmluYWwgYm9vbGVhbiBnb0ZvcndhcmQgKCkgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICB9CisgICAgfTsKKworICBwcml2YXRlIGZpbmFsIE5leHRFbGVtZW50R2V0dGVyIGRvd253YXJkRWxlbWVudEZpbmRlciA9CisgICAgbmV3IFZlcnRpY2FsRWxlbWVudEZpbmRlcigpIHsKKyAgICAgIEBPdmVycmlkZQorICAgICAgcHJvdGVjdGVkIGZpbmFsIFNjcmVlbkVsZW1lbnQgZ2V0Q2FjaGVkRWxlbWVudCAoU2NyZWVuRWxlbWVudCBmcm9tKSB7CisgICAgICAgIHJldHVybiBmcm9tLmdldERvd253YXJkRWxlbWVudCgpOworICAgICAgfQorCisgICAgICBAT3ZlcnJpZGUKKyAgICAgIHByb3RlY3RlZCBmaW5hbCB2b2lkIHNldENhY2hlZEVsZW1lbnQgKFNjcmVlbkVsZW1lbnQgZnJvbSwgU2NyZWVuRWxlbWVudCB0bykgeworICAgICAgICBmcm9tLnNldERvd253YXJkRWxlbWVudCh0byk7CisgICAgICB9CisKKyAgICAgIEBPdmVycmlkZQorICAgICAgcHJvdGVjdGVkIGZpbmFsIGJvb2xlYW4gZ29Gb3J3YXJkICgpIHsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICB9CisgICAgfTsKKworICBwcml2YXRlIGFic3RyYWN0IGNsYXNzIEhvcml6b250YWxFbGVtZW50RmluZGVyIGV4dGVuZHMgTmV4dEVsZW1lbnRGaW5kZXIgeworICAgIEBPdmVycmlkZQorICAgIHByb3RlY3RlZCBmaW5hbCBpbnQgZ2V0TGVzc2VyRWRnZSAoUmVjdCBsb2NhdGlvbikgeworICAgICAgcmV0dXJuIGxvY2F0aW9uLmxlZnQ7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHJvdGVjdGVkIGZpbmFsIGludCBnZXRHcmVhdGVyRWRnZSAoUmVjdCBsb2NhdGlvbikgeworICAgICAgcmV0dXJuIGxvY2F0aW9uLnJpZ2h0OworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHByb3RlY3RlZCBmaW5hbCBpbnQgZ2V0TGVzc2VyU2lkZSAoUmVjdCBsb2NhdGlvbikgeworICAgICAgcmV0dXJuIGxvY2F0aW9uLnRvcDsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwcm90ZWN0ZWQgZmluYWwgaW50IGdldEdyZWF0ZXJTaWRlIChSZWN0IGxvY2F0aW9uKSB7CisgICAgICByZXR1cm4gbG9jYXRpb24uYm90dG9tOworICAgIH0KKyAgfQorCisgIHByaXZhdGUgZmluYWwgTmV4dEVsZW1lbnRHZXR0ZXIgbGVmdHdhcmRFbGVtZW50RmluZGVyID0KKyAgICBuZXcgSG9yaXpvbnRhbEVsZW1lbnRGaW5kZXIoKSB7CisgICAgICBAT3ZlcnJpZGUKKyAgICAgIHByb3RlY3RlZCBmaW5hbCBTY3JlZW5FbGVtZW50IGdldENhY2hlZEVsZW1lbnQgKFNjcmVlbkVsZW1lbnQgZnJvbSkgeworICAgICAgICByZXR1cm4gZnJvbS5nZXRMZWZ0d2FyZEVsZW1lbnQoKTsKKyAgICAgIH0KKworICAgICAgQE92ZXJyaWRlCisgICAgICBwcm90ZWN0ZWQgZmluYWwgdm9pZCBzZXRDYWNoZWRFbGVtZW50IChTY3JlZW5FbGVtZW50IGZyb20sIFNjcmVlbkVsZW1lbnQgdG8pIHsKKyAgICAgICAgZnJvbS5zZXRMZWZ0d2FyZEVsZW1lbnQodG8pOworICAgICAgfQorCisgICAgICBAT3ZlcnJpZGUKKyAgICAgIHByb3RlY3RlZCBmaW5hbCBib29sZWFuIGdvRm9yd2FyZCAoKSB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgIH0KKyAgICB9OworCisgIHByaXZhdGUgZmluYWwgTmV4dEVsZW1lbnRHZXR0ZXIgcmlnaHR3YXJkRWxlbWVudEZpbmRlciA9CisgICAgbmV3IEhvcml6b250YWxFbGVtZW50RmluZGVyKCkgeworICAgICAgQE92ZXJyaWRlCisgICAgICBwcm90ZWN0ZWQgZmluYWwgU2NyZWVuRWxlbWVudCBnZXRDYWNoZWRFbGVtZW50IChTY3JlZW5FbGVtZW50IGZyb20pIHsKKyAgICAgICAgcmV0dXJuIGZyb20uZ2V0UmlnaHR3YXJkRWxlbWVudCgpOworICAgICAgfQorCisgICAgICBAT3ZlcnJpZGUKKyAgICAgIHByb3RlY3RlZCBmaW5hbCB2b2lkIHNldENhY2hlZEVsZW1lbnQgKFNjcmVlbkVsZW1lbnQgZnJvbSwgU2NyZWVuRWxlbWVudCB0bykgeworICAgICAgICBmcm9tLnNldFJpZ2h0d2FyZEVsZW1lbnQodG8pOworICAgICAgfQorCisgICAgICBAT3ZlcnJpZGUKKyAgICAgIHByb3RlY3RlZCBmaW5hbCBib29sZWFuIGdvRm9yd2FyZCAoKSB7CisgICAgICAgIHJldHVybiB0cnVlOworICAgICAgfQorICAgIH07CisKKyAgcHJpdmF0ZSBmaW5hbCBib29sZWFuIG1vdmVGb2N1cyAoCisgICAgU2NyZWVuRWxlbWVudCBlbGVtZW50LCBOZXh0RWxlbWVudEdldHRlciBuZXh0RWxlbWVudEdldHRlciwgYm9vbGVhbiBpbmNsdXNpdmUKKyAgKSB7CisgICAgU2NyZWVuRWxlbWVudCBlbmQgPSBlbGVtZW50OworCisgICAgd2hpbGUgKHRydWUpIHsKKyAgICAgIGlmIChpbmNsdXNpdmUpIHsKKyAgICAgICAgaW5jbHVzaXZlID0gZmFsc2U7CisgICAgICB9IGVsc2UgaWYgKChlbGVtZW50ID0gbmV4dEVsZW1lbnRHZXR0ZXIuZ2V0TmV4dEVsZW1lbnQoZWxlbWVudCkpID09IGVuZCkgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICB9IGVsc2UgaWYgKGVsZW1lbnQgPT0gbnVsbCkgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICB9CisKKyAgICAgIGlmIChlbGVtZW50LmJyaW5nQ3Vyc29yKCkpIHJldHVybiB0cnVlOworICAgIH0KKyAgfQorCisgIHB1YmxpYyBlbnVtIFNlYXJjaERpcmVjdGlvbiB7CisgICAgRklSU1QsIExBU1QsCisgICAgRk9SV0FSRCwgQkFDS1dBUkQsCisgICAgVVAsIERPV04sCisgICAgTEVGVCwgUklHSFQsCisgIH0KKworICBwdWJsaWMgZmluYWwgYm9vbGVhbiBtb3ZlRm9jdXMgKFNlYXJjaERpcmVjdGlvbiBkaXJlY3Rpb24pIHsKKyAgICBBY2Nlc3NpYmlsaXR5Tm9kZUluZm8gbm9kZSA9IGdldEN1cnNvck5vZGUoKTsKKyAgICBpZiAobm9kZSA9PSBudWxsKSByZXR1cm4gZmFsc2U7CisKKyAgICB0cnkgeworICAgICAgU2NyZWVuRWxlbWVudCBlbGVtZW50ID0gZ2V0U2NyZWVuRWxlbWVudChub2RlKTsKKyAgICAgIGlmIChlbGVtZW50ID09IG51bGwpIHJldHVybiBmYWxzZTsKKworICAgICAgc3dpdGNoIChkaXJlY3Rpb24pIHsKKyAgICAgICAgY2FzZSBGSVJTVDogeworICAgICAgICAgIFNjcmVlbkVsZW1lbnQgZmlyc3QgPSBzY3JlZW5FbGVtZW50cy5nZXRGaXJzdEVsZW1lbnQoKTsKKyAgICAgICAgICBpZiAoZWxlbWVudCA9PSBmaXJzdCkgcmV0dXJuIGZhbHNlOworICAgICAgICAgIHJldHVybiBtb3ZlRm9jdXMoZmlyc3QsIGZvcndhcmRFbGVtZW50R2V0dGVyLCB0cnVlKTsKKyAgICAgICAgfQorCisgICAgICAgIGNhc2UgTEFTVDogeworICAgICAgICAgIFNjcmVlbkVsZW1lbnQgbGFzdCA9IHNjcmVlbkVsZW1lbnRzLmdldExhc3RFbGVtZW50KCk7CisgICAgICAgICAgaWYgKGVsZW1lbnQgPT0gbGFzdCkgcmV0dXJuIGZhbHNlOworICAgICAgICAgIHJldHVybiBtb3ZlRm9jdXMobGFzdCwgYmFja3dhcmRFbGVtZW50R2V0dGVyLCB0cnVlKTsKKyAgICAgICAgfQorCisgICAgICAgIGNhc2UgRk9SV0FSRDoKKyAgICAgICAgICByZXR1cm4gbW92ZUZvY3VzKGVsZW1lbnQsIGZvcndhcmRFbGVtZW50R2V0dGVyLCBmYWxzZSk7CisKKyAgICAgICAgY2FzZSBCQUNLV0FSRDoKKyAgICAgICAgICByZXR1cm4gbW92ZUZvY3VzKGVsZW1lbnQsIGJhY2t3YXJkRWxlbWVudEdldHRlciwgZmFsc2UpOworCisgICAgICAgIGNhc2UgVVA6CisgICAgICAgICAgcmV0dXJuIG1vdmVGb2N1cyhlbGVtZW50LCB1cHdhcmRFbGVtZW50RmluZGVyLCBmYWxzZSk7CisKKyAgICAgICAgY2FzZSBET1dOOgorICAgICAgICAgIHJldHVybiBtb3ZlRm9jdXMoZWxlbWVudCwgZG93bndhcmRFbGVtZW50RmluZGVyLCBmYWxzZSk7CisKKyAgICAgICAgY2FzZSBMRUZUOgorICAgICAgICAgIHJldHVybiBtb3ZlRm9jdXMoZWxlbWVudCwgbGVmdHdhcmRFbGVtZW50RmluZGVyLCBmYWxzZSk7CisKKyAgICAgICAgY2FzZSBSSUdIVDoKKyAgICAgICAgICByZXR1cm4gbW92ZUZvY3VzKGVsZW1lbnQsIHJpZ2h0d2FyZEVsZW1lbnRGaW5kZXIsIGZhbHNlKTsKKworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgIH0KKyAgICB9IGZpbmFsbHkgeworICAgICAgbm9kZS5yZWN5Y2xlKCk7CisgICAgICBub2RlID0gbnVsbDsKKyAgICB9CisgIH0KK30KZGlmZiAtLWdpdCBhL0FuZHJvaWQvR3JhZGxlL2FwcC9zcmMvbWFpbi9qYXZhL29yZy9hMTF5L2JybHR0eS9hbmRyb2lkL1NjcmVlbkRyaXZlci5qYXZhIGIvQW5kcm9pZC9HcmFkbGUvYXBwL3NyYy9tYWluL2phdmEvb3JnL2ExMXkvYnJsdHR5L2FuZHJvaWQvU2NyZWVuRHJpdmVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjI0NTg0OQotLS0gL2Rldi9udWxsCisrKyBiL0FuZHJvaWQvR3JhZGxlL2FwcC9zcmMvbWFpbi9qYXZhL29yZy9hMTF5L2JybHR0eS9hbmRyb2lkL1NjcmVlbkRyaXZlci5qYXZhCkBAIC0wLDAgKzEsNTc5IEBACisvKgorICogQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyAqICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyAqCisgKiBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorICoKKyAqIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyAqCisgKiBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisgKi8KKworcGFja2FnZSBvcmcuYTExeS5icmx0dHkuYW5kcm9pZDsKKworaW1wb3J0IGFuZHJvaWQuYXBwLk5vdGlmaWNhdGlvbjsKK2ltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLlBvaW50OworaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuUmVjdDsKK2ltcG9ydCBhbmRyb2lkLm9zLkJ1bmRsZTsKK2ltcG9ydCBhbmRyb2lkLnRleHQuVGV4dFV0aWxzOworaW1wb3J0IGFuZHJvaWQudXRpbC5Mb2c7CitpbXBvcnQgYW5kcm9pZC52aWV3LmFjY2Vzc2liaWxpdHkuQWNjZXNzaWJpbGl0eUV2ZW50OworaW1wb3J0IGFuZHJvaWQudmlldy5hY2Nlc3NpYmlsaXR5LkFjY2Vzc2liaWxpdHlOb2RlSW5mbzsKK2ltcG9ydCBhbmRyb2lkLnZpZXcuYWNjZXNzaWJpbGl0eS5BY2Nlc3NpYmlsaXR5V2luZG93SW5mbzsKK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247CitpbXBvcnQgb3JnLmExMXkuYnJsdHR5LmNvcmUuKjsKKworcHVibGljIGFic3RyYWN0IGNsYXNzIFNjcmVlbkRyaXZlciB7CisgIHByaXZhdGUgZmluYWwgc3RhdGljIFN0cmluZyBMT0dfVEFHID0gU2NyZWVuRHJpdmVyLmNsYXNzLmdldE5hbWUoKTsKKworICBwcml2YXRlIFNjcmVlbkRyaXZlciAoKSB7CisgIH0KKworICBwcml2YXRlIHN0YXRpYyBTY3JlZW5Mb2dnZXIgc2NyZWVuTG9nZ2VyID0gbnVsbDsKKworICBwcml2YXRlIHN0YXRpYyBTY3JlZW5Mb2dnZXIgZ2V0U2NyZWVuTG9nZ2VyICgpIHsKKyAgICBpZiAoc2NyZWVuTG9nZ2VyID09IG51bGwpIHNjcmVlbkxvZ2dlciA9IG5ldyBTY3JlZW5Mb2dnZXIoKTsKKyAgICByZXR1cm4gc2NyZWVuTG9nZ2VyOworICB9CisKKyAgcHJpdmF0ZSBzdGF0aWMgdm9pZCBsb2cgKEFjY2Vzc2liaWxpdHlOb2RlSW5mbyBub2RlKSB7CisgICAgdHJ5IHsKKyAgICAgIGdldFNjcmVlbkxvZ2dlcigpLmxvZyhub2RlLCBmYWxzZSk7CisgICAgfSBjYXRjaCAoSU9FeGNlcHRpb24gZXhjZXB0aW9uKSB7CisgICAgICBMb2cuZChMT0dfVEFHLCAoIm5vZGUgbG9nIGZhaWx1cmU6ICIgKyBleGNlcHRpb24uZ2V0TWVzc2FnZSgpKSk7CisgICAgfQorICB9CisKKyAgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIHRvVGV4dCAoQ29sbGVjdGlvbjxDaGFyU2VxdWVuY2U+IGxpbmVzKSB7CisgICAgaWYgKGxpbmVzID09IG51bGwpIHJldHVybiBudWxsOworCisgICAgU3RyaW5nQnVpbGRlciB0ZXh0ID0gbmV3IFN0cmluZ0J1aWxkZXIoKTsKKyAgICBib29sZWFuIGZpcnN0ID0gdHJ1ZTsKKworICAgIGZvciAoQ2hhclNlcXVlbmNlIGxpbmUgOiBsaW5lcykgeworICAgICAgaWYgKGxpbmUgPT0gbnVsbCkgY29udGludWU7CisKKyAgICAgIGlmIChmaXJzdCkgeworICAgICAgICBmaXJzdCA9IGZhbHNlOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgdGV4dC5hcHBlbmQoJ1xuJyk7CisgICAgICB9CisKKyAgICAgIHRleHQuYXBwZW5kKGxpbmUpOworICAgIH0KKworICAgIGlmICh0ZXh0Lmxlbmd0aCgpID09IDApIHJldHVybiBudWxsOworICAgIHJldHVybiB0ZXh0LnRvU3RyaW5nKCk7CisgIH0KKworICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgdG9UZXh0IChOb3RpZmljYXRpb24gbm90aWZpY2F0aW9uKSB7CisgICAgaWYgKG5vdGlmaWNhdGlvbiA9PSBudWxsKSByZXR1cm4gbnVsbDsKKworICAgIENvbGxlY3Rpb248Q2hhclNlcXVlbmNlPiBsaW5lcyA9IG5ldyBBcnJheUxpc3Q8Q2hhclNlcXVlbmNlPigpOworICAgIENoYXJTZXF1ZW5jZSB0aWNrZXJUZXh0ID0gbm90aWZpY2F0aW9uLnRpY2tlclRleHQ7CisKKyAgICBpZiAoQVBJVGVzdHMuaGF2ZUtpdGthdCkgeworICAgICAgQnVuZGxlIGV4dHJhcyA9IG5vdGlmaWNhdGlvbi5leHRyYXM7CisKKyAgICAgIGlmIChleHRyYXMgIT0gbnVsbCkgeworICAgICAgICB7CisgICAgICAgICAgQ2hhclNlcXVlbmNlIHRpdGxlID0gZXh0cmFzLmdldENoYXJTZXF1ZW5jZShOb3RpZmljYXRpb24uRVhUUkFfVElUTEUpOworICAgICAgICAgIGlmICghVGV4dFV0aWxzLmlzRW1wdHkodGl0bGUpKSBsaW5lcy5hZGQodGl0bGUpOworICAgICAgICB9CisKKyAgICAgICAgeworICAgICAgICAgIENoYXJTZXF1ZW5jZSB0ZXh0ID0gZXh0cmFzLmdldENoYXJTZXF1ZW5jZShOb3RpZmljYXRpb24uRVhUUkFfVEVYVCk7CisKKyAgICAgICAgICBpZiAoIVRleHRVdGlscy5pc0VtcHR5KHRleHQpKSB7CisgICAgICAgICAgICBsaW5lcy5hZGQodGV4dCk7CisgICAgICAgICAgICB0aWNrZXJUZXh0ID0gbnVsbDsKKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoIVRleHRVdGlscy5pc0VtcHR5KHRpY2tlclRleHQpKSBsaW5lcy5hZGQodGlja2VyVGV4dCk7CisgICAgaWYgKGxpbmVzLmlzRW1wdHkoKSkgcmV0dXJuIG51bGw7CisgICAgcmV0dXJuIHRvVGV4dChsaW5lcyk7CisgIH0KKworICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgdG9UZXh0IChBY2Nlc3NpYmlsaXR5RXZlbnQgZXZlbnQpIHsKKyAgICByZXR1cm4gdG9UZXh0KGV2ZW50LmdldFRleHQoKSk7CisgIH0KKworICBwcml2YXRlIHN0YXRpYyB2b2lkIHNob3dFdmVudFRleHQgKEJyYWlsbGVNZXNzYWdlIG1lc3NhZ2UsIEFjY2Vzc2liaWxpdHlFdmVudCBldmVudCkgeworICAgIG1lc3NhZ2Uuc2hvdyh0b1RleHQoZXZlbnQpKTsKKyAgfQorCisgIHByaXZhdGUgc3RhdGljIHZvaWQgc2hvd05vdGlmaWNhdGlvbiAoQWNjZXNzaWJpbGl0eUV2ZW50IGV2ZW50KSB7CisgICAgQnJhaWxsZU1lc3NhZ2UgbWVzc2FnZTsKKyAgICBTdHJpbmcgdGV4dCA9IG51bGw7CisgICAgTm90aWZpY2F0aW9uIG5vdGlmaWNhdGlvbiA9IChOb3RpZmljYXRpb24pZXZlbnQuZ2V0UGFyY2VsYWJsZURhdGEoKTsKKworICAgIGlmIChub3RpZmljYXRpb24gIT0gbnVsbCkgeworICAgICAgaWYgKCFBcHBsaWNhdGlvblNldHRpbmdzLlNIT1dfTk9USUZJQ0FUSU9OUykgcmV0dXJuOworICAgICAgaWYgKCFBUElUZXN0cy5oYXZlSmVsbHlCZWFuKSByZXR1cm47CisgICAgICBpZiAobm90aWZpY2F0aW9uLnByaW9yaXR5IDwgTm90aWZpY2F0aW9uLlBSSU9SSVRZX0RFRkFVTFQpIHJldHVybjsKKworICAgICAgbWVzc2FnZSA9IEJyYWlsbGVNZXNzYWdlLk5PVElGSUNBVElPTjsKKyAgICAgIHRleHQgPSB0b1RleHQobm90aWZpY2F0aW9uKTsKKyAgICB9IGVsc2UgeworICAgICAgaWYgKCFBcHBsaWNhdGlvblNldHRpbmdzLlNIT1dfQUxFUlRTKSByZXR1cm47CisgICAgICBtZXNzYWdlID0gQnJhaWxsZU1lc3NhZ2UuQUxFUlQ7CisgICAgfQorCisgICAgaWYgKHRleHQgPT0gbnVsbCkgdGV4dCA9IHRvVGV4dChldmVudCk7CisgICAgbWVzc2FnZS5zaG93KHRleHQpOworICB9CisKKyAgcHJpdmF0ZSBzdGF0aWMgdm9pZCBsb2dVbmhhbmRsZWRFdmVudCAoQWNjZXNzaWJpbGl0eUV2ZW50IGV2ZW50LCBBY2Nlc3NpYmlsaXR5Tm9kZUluZm8gbm9kZSkgeworICAgIGlmIChBcHBsaWNhdGlvblNldHRpbmdzLkxPR19VTkhBTkRMRURfRVZFTlRTKSB7CisgICAgICBTdHJpbmdCdWlsZGVyIGxvZyA9IG5ldyBTdHJpbmdCdWlsZGVyKCk7CisKKyAgICAgIGxvZy5hcHBlbmQoInVuaGFuZGxlZCBhY2Nlc3NpYmlsaXR5IGV2ZW50OiAiKTsKKyAgICAgIGxvZy5hcHBlbmQoZXZlbnQudG9TdHJpbmcoKSk7CisKKyAgICAgIGlmIChub2RlICE9IG51bGwpIHsKKyAgICAgICAgbG9nLmFwcGVuZCgiOyBTb3VyY2U6ICIpOworICAgICAgICBsb2cuYXBwZW5kKFNjcmVlbkxvZ2dlci50b1N0cmluZyhub2RlKSk7CisgICAgICB9CisKKyAgICAgIExvZy53KExPR19UQUcsIGxvZy50b1N0cmluZygpKTsKKyAgICB9CisgIH0KKworICBwcml2YXRlIHN0YXRpYyBib29sZWFuIHNldEZvY3VzIChBY2Nlc3NpYmlsaXR5Tm9kZUluZm8gbm9kZSkgeworICAgIGlmIChBUElUZXN0cy5oYXZlSmVsbHlCZWFuKSB7CisgICAgICBpZiAobm9kZS5pc0FjY2Vzc2liaWxpdHlGb2N1c2VkKCkpIHJldHVybiB0cnVlOworICAgICAgbm9kZSA9IEFjY2Vzc2liaWxpdHlOb2RlSW5mby5vYnRhaW4obm9kZSk7CisKKyAgICAgIHsKKyAgICAgICAgQWNjZXNzaWJpbGl0eU5vZGVJbmZvIHN1Ym5vZGUgPSBub2RlLmZpbmRGb2N1cyhBY2Nlc3NpYmlsaXR5Tm9kZUluZm8uRk9DVVNfQUNDRVNTSUJJTElUWSk7CisKKyAgICAgICAgaWYgKHN1Ym5vZGUgIT0gbnVsbCkgeworICAgICAgICAgIG5vZGUucmVjeWNsZSgpOworICAgICAgICAgIG5vZGUgPSBzdWJub2RlOworICAgICAgICAgIHN1Ym5vZGUgPSBudWxsOworICAgICAgICB9CisgICAgICB9CisKKyAgICAgIHsKKyAgICAgICAgQWNjZXNzaWJpbGl0eU5vZGVJbmZvIHN1Ym5vZGUgPSBTY3JlZW5VdGlsaXRpZXMuZmluZFRleHROb2RlKG5vZGUpOworICAgICAgICBpZiAoc3Vibm9kZSA9PSBudWxsKSBzdWJub2RlID0gU2NyZWVuVXRpbGl0aWVzLmZpbmREZXNjcmliZWROb2RlKG5vZGUpOworCisgICAgICAgIGlmIChzdWJub2RlICE9IG51bGwpIHsKKyAgICAgICAgICBub2RlLnJlY3ljbGUoKTsKKyAgICAgICAgICBub2RlID0gc3Vibm9kZTsKKyAgICAgICAgICBzdWJub2RlID0gbnVsbDsKKyAgICAgICAgfQorICAgICAgfQorCisgICAgICB0cnkgeworICAgICAgICBpZiAobm9kZS5pc0FjY2Vzc2liaWxpdHlGb2N1c2VkKCkpIHJldHVybiB0cnVlOworCisgICAgICAgIGlmIChub2RlLnBlcmZvcm1BY3Rpb24oQWNjZXNzaWJpbGl0eU5vZGVJbmZvLkFDVElPTl9BQ0NFU1NJQklMSVRZX0ZPQ1VTKSkgeworICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICB9IGZpbmFsbHkgeworICAgICAgICBub2RlLnJlY3ljbGUoKTsKKyAgICAgICAgbm9kZSA9IG51bGw7CisgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIGZhbHNlOworICB9CisKKyAgcHJpdmF0ZSBzdGF0aWMgY2xhc3MgRm9jdXNTZXR0ZXIgZXh0ZW5kcyBEZWZlcnJlZFRhc2sgeworICAgIHByaXZhdGUgQWNjZXNzaWJpbGl0eU5vZGVJbmZvIGZvY3VzTm9kZSA9IG51bGw7CisKKyAgICBwdWJsaWMgRm9jdXNTZXR0ZXIgKCkgeworICAgICAgc3VwZXIoQXBwbGljYXRpb25QYXJhbWV0ZXJzLkZPQ1VTX1NFVFRFUl9ERUxBWSk7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHJvdGVjdGVkIGZpbmFsIGJvb2xlYW4gaXNTdGFydGFibGUgKCkgeworICAgICAgcmV0dXJuIGZvY3VzTm9kZSAhPSBudWxsOworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHByb3RlY3RlZCBmaW5hbCB2b2lkIHJlbGVhc2VSZXNvdXJjZXMgKCkgeworICAgICAgaWYgKGZvY3VzTm9kZSAhPSBudWxsKSB7CisgICAgICAgIGZvY3VzTm9kZS5yZWN5Y2xlKCk7CisgICAgICAgIGZvY3VzTm9kZSA9IG51bGw7CisgICAgICB9CisgICAgfQorCisgICAgcHVibGljIGZpbmFsIHZvaWQgc3RhcnQgKEFjY2Vzc2liaWxpdHlOb2RlSW5mbyBub2RlKSB7CisgICAgICBzeW5jaHJvbml6ZWQgKHRoaXMpIHsKKyAgICAgICAgcmVsZWFzZVJlc291cmNlcygpOworICAgICAgICBpZiAobm9kZSAhPSBudWxsKSBmb2N1c05vZGUgPSBBY2Nlc3NpYmlsaXR5Tm9kZUluZm8ub2J0YWluKG5vZGUpOworICAgICAgICByZXN0YXJ0KCk7CisgICAgICB9CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIHZvaWQgcnVuVGFzayAoKSB7CisgICAgICBpZiAoZm9jdXNOb2RlICE9IG51bGwpIHNldEZvY3VzKGZvY3VzTm9kZSk7CisgICAgfQorICB9CisKKyAgcHJpdmF0ZSBmaW5hbCBzdGF0aWMgRm9jdXNTZXR0ZXIgZm9jdXNTZXR0ZXIgPSBuZXcgRm9jdXNTZXR0ZXIoKTsKKworICBwcml2YXRlIG5hdGl2ZSBzdGF0aWMgdm9pZCBzY3JlZW5VcGRhdGVkICgpOworICBwcml2YXRlIGZpbmFsIHN0YXRpYyBPYmplY3QgTk9ERV9MT0NLID0gbmV3IE9iamVjdCgpOworICBwcml2YXRlIHZvbGF0aWxlIHN0YXRpYyBBY2Nlc3NpYmlsaXR5Tm9kZUluZm8gY3VycmVudE5vZGUgPSBudWxsOworCisgIHB1YmxpYyBzdGF0aWMgdm9pZCBzZXRDdXJyZW50Tm9kZSAoQWNjZXNzaWJpbGl0eU5vZGVJbmZvIG5ld05vZGUpIHsKKyAgICBpZiAobmV3Tm9kZSAhPSBudWxsKSB7CisgICAgICB7CisgICAgICAgIEFjY2Vzc2liaWxpdHlOb2RlSW5mbyBvbGROb2RlOworCisgICAgICAgIHN5bmNocm9uaXplZCAoTk9ERV9MT0NLKSB7CisgICAgICAgICAgb2xkTm9kZSA9IGN1cnJlbnROb2RlOworICAgICAgICAgIGN1cnJlbnROb2RlID0gQWNjZXNzaWJpbGl0eU5vZGVJbmZvLm9idGFpbihuZXdOb2RlKTsKKyAgICAgICAgICBuZXdOb2RlID0gbnVsbDsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChvbGROb2RlICE9IG51bGwpIHsKKyAgICAgICAgICBvbGROb2RlLnJlY3ljbGUoKTsKKyAgICAgICAgICBvbGROb2RlID0gbnVsbDsKKyAgICAgICAgfQorICAgICAgfQorCisgICAgICBDb3JlV3JhcHBlci5ydW5PbkNvcmVUaHJlYWQoCisgICAgICAgIG5ldyBSdW5uYWJsZSgpIHsKKyAgICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgICBwdWJsaWMgdm9pZCBydW4gKCkgeworICAgICAgICAgICAgc2NyZWVuVXBkYXRlZCgpOworICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgKTsKKyAgICB9CisgIH0KKworICBzdGF0aWMgeworICAgIEFjY2Vzc2liaWxpdHlOb2RlSW5mbyByb290ID0gU2NyZWVuVXRpbGl0aWVzLmdldFJvb3ROb2RlKCk7CisKKyAgICBpZiAocm9vdCAhPSBudWxsKSB7CisgICAgICB0cnkgeworICAgICAgICBzZXRGb2N1cyhyb290KTsKKyAgICAgICAgc2V0Q3VycmVudE5vZGUocm9vdCk7CisgICAgICB9IGZpbmFsbHkgeworICAgICAgICByb290LnJlY3ljbGUoKTsKKyAgICAgICAgcm9vdCA9IG51bGw7CisgICAgICB9CisgICAgfQorICB9CisKKyAgcHJpdmF0ZSBzdGF0aWMgU2NyZWVuV2luZG93IGxvY2tlZFNjcmVlbldpbmRvdyA9IG51bGw7CisKKyAgcHVibGljIHN0YXRpYyB2b2lkIGxvY2tTY3JlZW5XaW5kb3cgKFNjcmVlbldpbmRvdyB3aW5kb3cpIHsKKyAgICBsb2NrZWRTY3JlZW5XaW5kb3cgPSB3aW5kb3c7CisgIH0KKworICBwdWJsaWMgc3RhdGljIHZvaWQgdW5sb2NrU2NyZWVuV2luZG93ICgpIHsKKyAgICBsb2NrU2NyZWVuV2luZG93KG51bGwpOworICB9CisKKyAgcHJpdmF0ZSBzdGF0aWMgU2NyZWVuV2luZG93IGN1cnJlbnRTY3JlZW5XaW5kb3cgPQorICAgIFNjcmVlbldpbmRvdy5nZXRTY3JlZW5XaW5kb3coMCkKKyAgICAgICAgICAgICAgICAuc2V0UmVuZGVyZWRTY3JlZW4obmV3IFJlbmRlcmVkU2NyZWVuKG51bGwpKQorICAgICAgICAgICAgICAgIDsKKworICBwdWJsaWMgc3RhdGljIFNjcmVlbldpbmRvdyBnZXRDdXJyZW50U2NyZWVuV2luZG93ICgpIHsKKyAgICBpZiAobG9ja2VkU2NyZWVuV2luZG93ICE9IG51bGwpIHJldHVybiBsb2NrZWRTY3JlZW5XaW5kb3c7CisgICAgcmV0dXJuIGN1cnJlbnRTY3JlZW5XaW5kb3c7CisgIH0KKworICBwdWJsaWMgc3RhdGljIFJlbmRlcmVkU2NyZWVuIGdldEN1cnJlbnRSZW5kZXJlZFNjcmVlbiAoKSB7CisgICAgcmV0dXJuIGdldEN1cnJlbnRTY3JlZW5XaW5kb3coKS5nZXRSZW5kZXJlZFNjcmVlbigpOworICB9CisKKyAgcHVibGljIHN0YXRpYyB2b2lkIG9uQWNjZXNzaWJpbGl0eUV2ZW50IChBY2Nlc3NpYmlsaXR5RXZlbnQgZXZlbnQpIHsKKyAgICBmb2N1c1NldHRlci5yZXN0YXJ0KCk7CisKKyAgICBmaW5hbCBib29sZWFuIGxvZyA9IEFwcGxpY2F0aW9uU2V0dGluZ3MuTE9HX0FDQ0VTU0lCSUxJVFlfRVZFTlRTOworICAgIGlmIChsb2cpIExvZy5kKExPR19UQUcsICgiYWNjZXNzaWJpbGl0eSBldmVudDogIiArIGV2ZW50LnRvU3RyaW5nKCkpKTsKKworICAgIGludCBldmVudFR5cGUgPSBldmVudC5nZXRFdmVudFR5cGUoKTsKKyAgICBBY2Nlc3NpYmlsaXR5Tm9kZUluZm8gbm9kZSA9IGV2ZW50LmdldFNvdXJjZSgpOworCisgICAgaWYgKG5vZGUgPT0gbnVsbCkgeworICAgICAgLy9ub2luc3BlY3Rpb24gU3dpdGNoSW50RGVmCisgICAgICBzd2l0Y2ggKGV2ZW50VHlwZSkgeworICAgICAgICBjYXNlIEFjY2Vzc2liaWxpdHlFdmVudC5UWVBFX05PVElGSUNBVElPTl9TVEFURV9DSEFOR0VEOgorICAgICAgICAgIHNob3dOb3RpZmljYXRpb24oZXZlbnQpOworICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgQWNjZXNzaWJpbGl0eUV2ZW50LlRZUEVfQU5OT1VOQ0VNRU5UOgorICAgICAgICAgIGlmIChBcHBsaWNhdGlvblNldHRpbmdzLlNIT1dfQU5OT1VOQ0VNRU5UUykgc2hvd0V2ZW50VGV4dChCcmFpbGxlTWVzc2FnZS5BTk5PVU5DRU1FTlQsIGV2ZW50KTsKKyAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIEFjY2Vzc2liaWxpdHlFdmVudC5UWVBFX1dJTkRPV1NfQ0hBTkdFRDoKKyAgICAgICAgICBzZXRDdXJyZW50Tm9kZShTY3JlZW5VdGlsaXRpZXMuZ2V0Um9vdE5vZGUoKSk7CisgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICBsb2dVbmhhbmRsZWRFdmVudChldmVudCwgbnVsbCk7CisgICAgICAgIGNhc2UgQWNjZXNzaWJpbGl0eUV2ZW50LlRZUEVfVE9VQ0hfSU5URVJBQ1RJT05fU1RBUlQ6CisgICAgICAgIGNhc2UgQWNjZXNzaWJpbGl0eUV2ZW50LlRZUEVfVE9VQ0hfSU5URVJBQ1RJT05fRU5EOgorICAgICAgICBjYXNlIEFjY2Vzc2liaWxpdHlFdmVudC5UWVBFX0dFU1RVUkVfREVURUNUSU9OX1NUQVJUOgorICAgICAgICBjYXNlIEFjY2Vzc2liaWxpdHlFdmVudC5UWVBFX0dFU1RVUkVfREVURUNUSU9OX0VORDoKKyAgICAgICAgY2FzZSBBY2Nlc3NpYmlsaXR5RXZlbnQuVFlQRV9UT1VDSF9FWFBMT1JBVElPTl9HRVNUVVJFX1NUQVJUOgorICAgICAgICBjYXNlIEFjY2Vzc2liaWxpdHlFdmVudC5UWVBFX1RPVUNIX0VYUExPUkFUSU9OX0dFU1RVUkVfRU5EOgorICAgICAgICBjYXNlIEFjY2Vzc2liaWxpdHlFdmVudC5UWVBFX1dJTkRPV19TVEFURV9DSEFOR0VEOgorICAgICAgICBjYXNlIEFjY2Vzc2liaWxpdHlFdmVudC5UWVBFX1dJTkRPV19DT05URU5UX0NIQU5HRUQ6CisgICAgICAgIGNhc2UgQWNjZXNzaWJpbGl0eUV2ZW50LlRZUEVfVklFV19GT0NVU0VEOgorICAgICAgICBjYXNlIEFjY2Vzc2liaWxpdHlFdmVudC5UWVBFX1ZJRVdfQUNDRVNTSUJJTElUWV9GT0NVU19DTEVBUkVEOgorICAgICAgICBjYXNlIEFjY2Vzc2liaWxpdHlFdmVudC5UWVBFX1ZJRVdfQ0xJQ0tFRDoKKyAgICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgdHJ5IHsKKyAgICAgICAgaWYgKGxvZykgbG9nKG5vZGUpOworCisgICAgICAgIGlmIChBUElUZXN0cy5oYXZlTG9sbGlwb3ApIHsKKyAgICAgICAgICBBY2Nlc3NpYmlsaXR5V2luZG93SW5mbyB3aW5kb3cgPSBub2RlLmdldFdpbmRvdygpOworCisgICAgICAgICAgaWYgKHdpbmRvdyAhPSBudWxsKSB7CisgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICBib29sZWFuIGFjY2VwdCA9CisgICAgICAgICAgICAgICAgKGxvY2tlZFNjcmVlbldpbmRvdyAhPSBudWxsKT8KKyAgICAgICAgICAgICAgICAod2luZG93LmdldElkKCkgPT0gbG9ja2VkU2NyZWVuV2luZG93LmdldFdpbmRvd0lkZW50aWZpZXIoKSk6CisgICAgICAgICAgICAgICAgd2luZG93LmlzQWN0aXZlKCk7CisKKyAgICAgICAgICAgICAgaWYgKCFhY2NlcHQpIHJldHVybjsKKyAgICAgICAgICAgIH0gZmluYWxseSB7CisgICAgICAgICAgICAgIHdpbmRvdy5yZWN5Y2xlKCk7CisgICAgICAgICAgICAgIHdpbmRvdyA9IG51bGw7CisgICAgICAgICAgICB9CisgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLy9ub2luc3BlY3Rpb24gU3dpdGNoSW50RGVmCisgICAgICAgIHN3aXRjaCAoZXZlbnRUeXBlKSB7CisgICAgICAgICAgY2FzZSBBY2Nlc3NpYmlsaXR5RXZlbnQuVFlQRV9XSU5ET1dfU1RBVEVfQ0hBTkdFRDoKKyAgICAgICAgICAgIGZvY3VzU2V0dGVyLnN0YXJ0KG5vZGUpOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICBjYXNlIEFjY2Vzc2liaWxpdHlFdmVudC5UWVBFX1dJTkRPV19DT05URU5UX0NIQU5HRUQ6CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgIGNhc2UgQWNjZXNzaWJpbGl0eUV2ZW50LlRZUEVfVklFV19TQ1JPTExFRDoKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgY2FzZSBBY2Nlc3NpYmlsaXR5RXZlbnQuVFlQRV9WSUVXX1NFTEVDVEVEOgorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICBjYXNlIEFjY2Vzc2liaWxpdHlFdmVudC5UWVBFX1ZJRVdfRk9DVVNFRDoKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgY2FzZSBBY2Nlc3NpYmlsaXR5RXZlbnQuVFlQRV9WSUVXX0FDQ0VTU0lCSUxJVFlfRk9DVVNFRDoKKyAgICAgICAgICAgIGZvY3VzU2V0dGVyLnN0b3AoKTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgY2FzZSBBY2Nlc3NpYmlsaXR5RXZlbnQuVFlQRV9WSUVXX1RFWFRfQ0hBTkdFRDogeworICAgICAgICAgICAgaWYgKCFBUElUZXN0cy5oYXZlSmVsbHlCZWFuTVIyKSB7CisgICAgICAgICAgICAgIFRleHRGaWVsZCBmaWVsZCA9IFRleHRGaWVsZC5nZXQobm9kZSwgdHJ1ZSk7CisgICAgICAgICAgICAgIGZpZWxkLnNldEN1cnNvcihldmVudC5nZXRGcm9tSW5kZXgoKSArIGV2ZW50LmdldEFkZGVkQ291bnQoKSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIH0KKworICAgICAgICAgIGNhc2UgQWNjZXNzaWJpbGl0eUV2ZW50LlRZUEVfVklFV19URVhUX1NFTEVDVElPTl9DSEFOR0VEOiB7CisgICAgICAgICAgICBpZiAoIUFQSVRlc3RzLmhhdmVKZWxseUJlYW5NUjIpIHsKKyAgICAgICAgICAgICAgVGV4dEZpZWxkIGZpZWxkID0gVGV4dEZpZWxkLmdldChub2RlLCB0cnVlKTsKKyAgICAgICAgICAgICAgZmllbGQuc2V0U2VsZWN0aW9uKGV2ZW50LmdldEZyb21JbmRleCgpLCBldmVudC5nZXRUb0luZGV4KCkpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICB9CisKKyAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgbG9nVW5oYW5kbGVkRXZlbnQoZXZlbnQsIG5vZGUpOworICAgICAgICAgIGNhc2UgQWNjZXNzaWJpbGl0eUV2ZW50LlRZUEVfVklFV19IT1ZFUl9FTlRFUjoKKyAgICAgICAgICBjYXNlIEFjY2Vzc2liaWxpdHlFdmVudC5UWVBFX1ZJRVdfSE9WRVJfRVhJVDoKKyAgICAgICAgICBjYXNlIEFjY2Vzc2liaWxpdHlFdmVudC5UWVBFX1ZJRVdfQUNDRVNTSUJJTElUWV9GT0NVU19DTEVBUkVEOgorICAgICAgICAgIGNhc2UgQWNjZXNzaWJpbGl0eUV2ZW50LlRZUEVfVklFV19DTElDS0VEOgorICAgICAgICAgIGNhc2UgQWNjZXNzaWJpbGl0eUV2ZW50LlRZUEVfVklFV19MT05HX0NMSUNLRUQ6CisgICAgICAgICAgY2FzZSBBY2Nlc3NpYmlsaXR5RXZlbnQuVFlQRV9WSUVXX1RFWFRfVFJBVkVSU0VEX0FUX01PVkVNRU5UX0dSQU5VTEFSSVRZOgorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGZhbHNlICYmIG5vZGUuaXNQYXNzd29yZCgpKSB7CisgICAgICAgICAgVGV4dEZpZWxkIGZpZWxkID0gVGV4dEZpZWxkLmdldChub2RlLCB0cnVlKTsKKyAgICAgICAgICBmaWVsZC5zZXRBY2Nlc3NpYmlsaXR5VGV4dCh0b1RleHQoZXZlbnQpKTsKKyAgICAgICAgfQorCisgICAgICAgIHNldEN1cnJlbnROb2RlKG5vZGUpOworICAgICAgfSBmaW5hbGx5IHsKKyAgICAgICAgbm9kZS5yZWN5Y2xlKCk7CisgICAgICAgIG5vZGUgPSBudWxsOworICAgICAgfQorICAgIH0KKyAgfQorCisgIHByaXZhdGUgbmF0aXZlIHN0YXRpYyB2b2lkIGV4cG9ydFNjcmVlblByb3BlcnRpZXMgKAorICAgIGludCBudW1iZXIsIGludCBjb2x1bW5zLCBpbnQgcm93cywKKyAgICBpbnQgbG9jTGVmdCwgaW50IGxvY1RvcCwgaW50IGxvY1JpZ2h0LCBpbnQgbG9jQm90dG9tLAorICAgIGludCBzZWxMZWZ0LCBpbnQgc2VsVG9wLCBpbnQgc2VsUmlnaHQsIGludCBzZWxCb3R0b20KKyAgKTsKKworICBwcml2YXRlIHN0YXRpYyB2b2lkIGV4cG9ydFNjcmVlblByb3BlcnRpZXMgKCkgeworICAgIFNjcmVlbldpbmRvdyB3aW5kb3cgPSBnZXRDdXJyZW50U2NyZWVuV2luZG93KCk7CisgICAgUmVuZGVyZWRTY3JlZW4gc2NyZWVuID0gd2luZG93LmdldFJlbmRlcmVkU2NyZWVuKCk7CisgICAgQWNjZXNzaWJpbGl0eU5vZGVJbmZvIG5vZGUgPSBzY3JlZW4uZ2V0Q3Vyc29yTm9kZSgpOworCisgICAgaW50IGxvY2F0aW9uTGVmdCA9IDA7CisgICAgaW50IGxvY2F0aW9uVG9wID0gMDsKKyAgICBpbnQgbG9jYXRpb25SaWdodCA9IDA7CisgICAgaW50IGxvY2F0aW9uQm90dG9tID0gMDsKKworICAgIGludCBzZWxlY3Rpb25MZWZ0ID0gMDsKKyAgICBpbnQgc2VsZWN0aW9uVG9wID0gMDsKKyAgICBpbnQgc2VsZWN0aW9uUmlnaHQgPSAwOworICAgIGludCBzZWxlY3Rpb25Cb3R0b20gPSAwOworCisgICAgaWYgKG5vZGUgIT0gbnVsbCkgeworICAgICAgdHJ5IHsKKyAgICAgICAgU2NyZWVuRWxlbWVudCBlbGVtZW50ID0gc2NyZWVuLmZpbmRTY3JlZW5FbGVtZW50KG5vZGUpOworCisgICAgICAgIGlmIChlbGVtZW50ICE9IG51bGwpIHsKKyAgICAgICAgICBSZWN0IGxvY2F0aW9uID0gZWxlbWVudC5nZXRCcmFpbGxlTG9jYXRpb24oKTsKKyAgICAgICAgICBsb2NhdGlvbkxlZnQgPSBsb2NhdGlvbi5sZWZ0OworICAgICAgICAgIGxvY2F0aW9uVG9wID0gbG9jYXRpb24udG9wOworICAgICAgICAgIGxvY2F0aW9uUmlnaHQgPSBsb2NhdGlvbi5yaWdodDsKKyAgICAgICAgICBsb2NhdGlvbkJvdHRvbSA9IGxvY2F0aW9uLmJvdHRvbTsKKworICAgICAgICAgIGlmIChTY3JlZW5VdGlsaXRpZXMuaXNFZGl0YWJsZShub2RlKSkgeworICAgICAgICAgICAgaW50IHN0YXJ0ID0gLTE7CisgICAgICAgICAgICBpbnQgZW5kID0gLTE7CisKKyAgICAgICAgICAgIGlmIChBUElUZXN0cy5oYXZlSmVsbHlCZWFuTVIyKSB7CisgICAgICAgICAgICAgIHN0YXJ0ID0gbm9kZS5nZXRUZXh0U2VsZWN0aW9uU3RhcnQoKTsKKyAgICAgICAgICAgICAgZW5kID0gbm9kZS5nZXRUZXh0U2VsZWN0aW9uRW5kKCk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICBUZXh0RmllbGQgZmllbGQgPSBUZXh0RmllbGQuZ2V0KG5vZGUpOworCisgICAgICAgICAgICAgIGlmIChmaWVsZCAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgc3luY2hyb25pemVkIChmaWVsZCkgeworICAgICAgICAgICAgICAgICAgc3RhcnQgPSBmaWVsZC5nZXRTZWxlY3Rpb25TdGFydCgpOworICAgICAgICAgICAgICAgICAgZW5kID0gZmllbGQuZ2V0U2VsZWN0aW9uRW5kKCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICgoMCA8PSBzdGFydCkgJiYgKHN0YXJ0IDw9IGVuZCkpIHsKKyAgICAgICAgICAgICAgUG9pbnQgdG9wTGVmdCA9IGVsZW1lbnQuZ2V0QnJhaWxsZUNvb3JkaW5hdGVzKHN0YXJ0KTsKKworICAgICAgICAgICAgICBpZiAodG9wTGVmdCAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgaWYgKHN0YXJ0ID09IGVuZCkgeworICAgICAgICAgICAgICAgICAgc2VsZWN0aW9uTGVmdCA9IHNlbGVjdGlvblJpZ2h0ID0gdG9wTGVmdC54OworICAgICAgICAgICAgICAgICAgc2VsZWN0aW9uVG9wID0gc2VsZWN0aW9uQm90dG9tID0gdG9wTGVmdC55OworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICBQb2ludCBib3R0b21SaWdodCA9IGVsZW1lbnQuZ2V0QnJhaWxsZUNvb3JkaW5hdGVzKGVuZC0xKTsKKworICAgICAgICAgICAgICAgICAgaWYgKGJvdHRvbVJpZ2h0ICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICAgICAgc2VsZWN0aW9uTGVmdCA9IHRvcExlZnQueDsKKyAgICAgICAgICAgICAgICAgICAgc2VsZWN0aW9uVG9wID0gdG9wTGVmdC55OworICAgICAgICAgICAgICAgICAgICBzZWxlY3Rpb25SaWdodCA9IGJvdHRvbVJpZ2h0LnggKyAxOworICAgICAgICAgICAgICAgICAgICBzZWxlY3Rpb25Cb3R0b20gPSBib3R0b21SaWdodC55ICsgMTsKKyAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgIH0gZmluYWxseSB7CisgICAgICAgIG5vZGUucmVjeWNsZSgpOworICAgICAgICBub2RlID0gbnVsbDsKKyAgICAgIH0KKyAgICB9CisKKyAgICBleHBvcnRTY3JlZW5Qcm9wZXJ0aWVzKAorICAgICAgd2luZG93LmdldFdpbmRvd0lkZW50aWZpZXIoKSwKKyAgICAgIHNjcmVlbi5nZXRTY3JlZW5XaWR0aCgpLCBzY3JlZW4uZ2V0U2NyZWVuSGVpZ2h0KCksCisgICAgICBsb2NhdGlvbkxlZnQsIGxvY2F0aW9uVG9wLCBsb2NhdGlvblJpZ2h0LCBsb2NhdGlvbkJvdHRvbSwKKyAgICAgIHNlbGVjdGlvbkxlZnQsIHNlbGVjdGlvblRvcCwgc2VsZWN0aW9uUmlnaHQsIHNlbGVjdGlvbkJvdHRvbQorICAgICk7CisgIH0KKworICBzdGF0aWMgeworICAgIGV4cG9ydFNjcmVlblByb3BlcnRpZXMoKTsKKyAgfQorCisgIHByaXZhdGUgc3RhdGljIHZvaWQgcmVmcmVzaFNjcmVlbiAoQWNjZXNzaWJpbGl0eU5vZGVJbmZvIG5vZGUpIHsKKyAgICBjdXJyZW50U2NyZWVuV2luZG93ID0gU2NyZWVuV2luZG93LnNldFJlbmRlcmVkU2NyZWVuKG5vZGUpOworICAgIGV4cG9ydFNjcmVlblByb3BlcnRpZXMoKTsKKyAgfQorCisgIHB1YmxpYyBzdGF0aWMgY2hhciByZWZyZXNoU2NyZWVuICgpIHsKKyAgICBpZiAoQXBwbGljYXRpb25TZXR0aW5ncy5SRUxFQVNFX0JSQUlMTEVfREVWSUNFKSByZXR1cm4gJ3InOworICAgIGlmIChMb2NrVXRpbGl0aWVzLmlzTG9ja2VkKCkpIHJldHVybiAnbCc7CisKKyAgICBBY2Nlc3NpYmlsaXR5Tm9kZUluZm8gbm9kZTsKKworICAgIHN5bmNocm9uaXplZCAoTk9ERV9MT0NLKSB7CisgICAgICBpZiAoKG5vZGUgPSBjdXJyZW50Tm9kZSkgIT0gbnVsbCkgeworICAgICAgICBjdXJyZW50Tm9kZSA9IG51bGw7CisgICAgICB9CisgICAgfQorCisgICAgaWYgKG5vZGUgIT0gbnVsbCkgeworICAgICAgdHJ5IHsKKyAgICAgICAgcmVmcmVzaFNjcmVlbihub2RlKTsKKyAgICAgIH0gZmluYWxseSB7CisgICAgICAgIG5vZGUucmVjeWNsZSgpOworICAgICAgICBub2RlID0gbnVsbDsKKyAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gMDsKKyAgfQorCisgIHB1YmxpYyBzdGF0aWMgY2hhcltdIGdldFJvd1RleHQgKGludCByb3csIGludCBjb2x1bW4pIHsKKyAgICBSZW5kZXJlZFNjcmVlbiBzY3JlZW4gPSBnZXRDdXJyZW50UmVuZGVyZWRTY3JlZW4oKTsKKyAgICBTdHJpbmcgdGV4dCA9IChyb3cgPCBzY3JlZW4uZ2V0U2NyZWVuSGVpZ2h0KCkpPyBzY3JlZW4uZ2V0U2NyZWVuUm93KHJvdyk6ICIiOworICAgIGludCBsZW5ndGggPSB0ZXh0Lmxlbmd0aCgpOworCisgICAgaWYgKGNvbHVtbiA+IGxlbmd0aCkgY29sdW1uID0gbGVuZ3RoOworICAgIGludCBjb3VudCA9IGxlbmd0aCAtIGNvbHVtbjsKKworICAgIGNoYXJbXSBjaGFyYWN0ZXJzID0gbmV3IGNoYXJbY291bnRdOworICAgIHRleHQuZ2V0Q2hhcnMoY29sdW1uLCBsZW5ndGgsIGNoYXJhY3RlcnMsIDApOworICAgIHJldHVybiBjaGFyYWN0ZXJzOworICB9CisKKyAgcHVibGljIHN0YXRpYyBib29sZWFuIHJvdXRlQ3Vyc29yIChpbnQgY29sdW1uLCBpbnQgcm93KSB7CisgICAgaWYgKHJvdyA9PSAtMSkgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiBnZXRDdXJyZW50UmVuZGVyZWRTY3JlZW4oKS5wZXJmb3JtQWN0aW9uKGNvbHVtbiwgcm93KTsKKyAgfQorCisgIHB1YmxpYyBzdGF0aWMgdm9pZCByZXBvcnRFdmVudCAoY2hhciBldmVudCkgeworICAgIHN3aXRjaCAoZXZlbnQpIHsKKyAgICAgIGNhc2UgJ2InOiAvLyBicmFpbGxlIGRldmljZSBvbmxpbmUKKyAgICAgICAgQXBwbGljYXRpb25TZXR0aW5ncy5CUkFJTExFX0RFVklDRV9PTkxJTkUgPSB0cnVlOworICAgICAgICBCcmFpbGxlTm90aWZpY2F0aW9uLnVwZGF0ZVN0YXRlKCk7CisgICAgICAgIGJyZWFrOworCisgICAgICBjYXNlICdCJzogLy8gYnJhaWxsZSBkZXZpY2Ugb2ZmbGluZQorICAgICAgICBBcHBsaWNhdGlvblNldHRpbmdzLkJSQUlMTEVfREVWSUNFX09OTElORSA9IGZhbHNlOworICAgICAgICBCcmFpbGxlTm90aWZpY2F0aW9uLnVwZGF0ZVN0YXRlKCk7CisgICAgICAgIGJyZWFrOworCisgICAgICBjYXNlICdrJzogLy8gYnJhaWxsZSBrZXkgZXZlbnQKKyAgICAgICAgTG9ja1V0aWxpdGllcy5yZXNldFRpbWVyKCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgfQorfQpkaWZmIC0tZ2l0IGEvQW5kcm9pZC9HcmFkbGUvYXBwL3NyYy9tYWluL2phdmEvb3JnL2ExMXkvYnJsdHR5L2FuZHJvaWQvU2NyZWVuRWxlbWVudC5qYXZhIGIvQW5kcm9pZC9HcmFkbGUvYXBwL3NyYy9tYWluL2phdmEvb3JnL2ExMXkvYnJsdHR5L2FuZHJvaWQvU2NyZWVuRWxlbWVudC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVmZGM4OGEKLS0tIC9kZXYvbnVsbAorKysgYi9BbmRyb2lkL0dyYWRsZS9hcHAvc3JjL21haW4vamF2YS9vcmcvYTExeS9icmx0dHkvYW5kcm9pZC9TY3JlZW5FbGVtZW50LmphdmEKQEAgLTAsMCArMSwyNjcgQEAKKy8qCisgKiBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorICogICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorICoKKyAqIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorICoKKyAqIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyAqLworCitwYWNrYWdlIG9yZy5hMTF5LmJybHR0eS5hbmRyb2lkOworCitpbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5Qb2ludDsKK2ltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLlJlY3Q7CitpbXBvcnQgYW5kcm9pZC52aWV3LmFjY2Vzc2liaWxpdHkuQWNjZXNzaWJpbGl0eU5vZGVJbmZvOworaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKK3B1YmxpYyBjbGFzcyBTY3JlZW5FbGVtZW50IHsKKyAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgZWxlbWVudFRleHQ7CisKKyAgcHVibGljIFNjcmVlbkVsZW1lbnQgKFN0cmluZyB0ZXh0KSB7CisgICAgZWxlbWVudFRleHQgPSB0ZXh0OworICB9CisKKyAgcHVibGljIFNjcmVlbkVsZW1lbnQgKGludCB0ZXh0KSB7CisgICAgdGhpcyhBcHBsaWNhdGlvblV0aWxpdGllcy5nZXRSZXNvdXJjZVN0cmluZyh0ZXh0KSk7CisgIH0KKworICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldEVsZW1lbnRUZXh0ICgpIHsKKyAgICByZXR1cm4gZWxlbWVudFRleHQ7CisgIH0KKworICBwcml2YXRlIFNjcmVlbkVsZW1lbnQgYmFja3dhcmRFbGVtZW50ID0gbnVsbDsKKyAgcHJpdmF0ZSBTY3JlZW5FbGVtZW50IGZvcndhcmRFbGVtZW50ID0gbnVsbDsKKworICBwdWJsaWMgZmluYWwgU2NyZWVuRWxlbWVudCBnZXRCYWNrd2FyZEVsZW1lbnQgKCkgeworICAgIHJldHVybiBiYWNrd2FyZEVsZW1lbnQ7CisgIH0KKworICBwdWJsaWMgZmluYWwgU2NyZWVuRWxlbWVudCBzZXRCYWNrd2FyZEVsZW1lbnQgKFNjcmVlbkVsZW1lbnQgZWxlbWVudCkgeworICAgIGJhY2t3YXJkRWxlbWVudCA9IGVsZW1lbnQ7CisgICAgcmV0dXJuIHRoaXM7CisgIH0KKworICBwdWJsaWMgZmluYWwgU2NyZWVuRWxlbWVudCBnZXRGb3J3YXJkRWxlbWVudCAoKSB7CisgICAgcmV0dXJuIGZvcndhcmRFbGVtZW50OworICB9CisKKyAgcHVibGljIGZpbmFsIFNjcmVlbkVsZW1lbnQgc2V0Rm9yd2FyZEVsZW1lbnQgKFNjcmVlbkVsZW1lbnQgZWxlbWVudCkgeworICAgIGZvcndhcmRFbGVtZW50ID0gZWxlbWVudDsKKyAgICByZXR1cm4gdGhpczsKKyAgfQorCisgIC8vIFNpbmNlIG51bGwgbmVlZHMgdG8gYmUgYSB2YWxpZCBjYWNoZWQgdmFsdWUsIHVzZSBhIHNlbGYgcmVmZXJlbmNlCisgIC8vIHRvIG1lYW4gdGhhdCB0aGUgY29ycmVjdCB2YWx1ZSBoYXNuJ3QgYmVlbiBkZXRlcm1pbmVkIHlldC4KKyAgcHJpdmF0ZSBTY3JlZW5FbGVtZW50IHVwd2FyZEVsZW1lbnQgPSB0aGlzOworICBwcml2YXRlIFNjcmVlbkVsZW1lbnQgZG93bndhcmRFbGVtZW50ID0gdGhpczsKKyAgcHJpdmF0ZSBTY3JlZW5FbGVtZW50IGxlZnR3YXJkRWxlbWVudCA9IHRoaXM7CisgIHByaXZhdGUgU2NyZWVuRWxlbWVudCByaWdodHdhcmRFbGVtZW50ID0gdGhpczsKKworICBwdWJsaWMgZmluYWwgU2NyZWVuRWxlbWVudCBnZXRVcHdhcmRFbGVtZW50ICgpIHsKKyAgICByZXR1cm4gdXB3YXJkRWxlbWVudDsKKyAgfQorCisgIHB1YmxpYyBmaW5hbCBTY3JlZW5FbGVtZW50IHNldFVwd2FyZEVsZW1lbnQgKFNjcmVlbkVsZW1lbnQgZWxlbWVudCkgeworICAgIHVwd2FyZEVsZW1lbnQgPSBlbGVtZW50OworICAgIHJldHVybiB0aGlzOworICB9CisKKyAgcHVibGljIGZpbmFsIFNjcmVlbkVsZW1lbnQgZ2V0RG93bndhcmRFbGVtZW50ICgpIHsKKyAgICByZXR1cm4gZG93bndhcmRFbGVtZW50OworICB9CisKKyAgcHVibGljIGZpbmFsIFNjcmVlbkVsZW1lbnQgc2V0RG93bndhcmRFbGVtZW50IChTY3JlZW5FbGVtZW50IGVsZW1lbnQpIHsKKyAgICBkb3dud2FyZEVsZW1lbnQgPSBlbGVtZW50OworICAgIHJldHVybiB0aGlzOworICB9CisKKyAgcHVibGljIGZpbmFsIFNjcmVlbkVsZW1lbnQgZ2V0TGVmdHdhcmRFbGVtZW50ICgpIHsKKyAgICByZXR1cm4gbGVmdHdhcmRFbGVtZW50OworICB9CisKKyAgcHVibGljIGZpbmFsIFNjcmVlbkVsZW1lbnQgc2V0TGVmdHdhcmRFbGVtZW50IChTY3JlZW5FbGVtZW50IGVsZW1lbnQpIHsKKyAgICBsZWZ0d2FyZEVsZW1lbnQgPSBlbGVtZW50OworICAgIHJldHVybiB0aGlzOworICB9CisKKyAgcHVibGljIGZpbmFsIFNjcmVlbkVsZW1lbnQgZ2V0UmlnaHR3YXJkRWxlbWVudCAoKSB7CisgICAgcmV0dXJuIHJpZ2h0d2FyZEVsZW1lbnQ7CisgIH0KKworICBwdWJsaWMgZmluYWwgU2NyZWVuRWxlbWVudCBzZXRSaWdodHdhcmRFbGVtZW50IChTY3JlZW5FbGVtZW50IGVsZW1lbnQpIHsKKyAgICByaWdodHdhcmRFbGVtZW50ID0gZWxlbWVudDsKKyAgICByZXR1cm4gdGhpczsKKyAgfQorCisgIHB1YmxpYyBBY2Nlc3NpYmlsaXR5Tm9kZUluZm8gZ2V0QWNjZXNzaWJpbGl0eU5vZGUgKCkgeworICAgIHJldHVybiBudWxsOworICB9CisKKyAgcHVibGljIGJvb2xlYW4gaXNFZGl0YWJsZSAoKSB7CisgICAgcmV0dXJuIGZhbHNlOworICB9CisKKyAgcHVibGljIGJvb2xlYW4gYnJpbmdDdXJzb3IgKCkgeworICAgIHJldHVybiBmYWxzZTsKKyAgfQorCisgIHB1YmxpYyBib29sZWFuIG9uQnJpbmdDdXJzb3IgKCkgeworICAgIHJldHVybiBmYWxzZTsKKyAgfQorCisgIHB1YmxpYyBib29sZWFuIG9uQ2xpY2sgKCkgeworICAgIHJldHVybiBmYWxzZTsKKyAgfQorCisgIHB1YmxpYyBib29sZWFuIG9uTG9uZ0NsaWNrICgpIHsKKyAgICByZXR1cm4gZmFsc2U7CisgIH0KKworICBwdWJsaWMgYm9vbGVhbiBvblNjcm9sbEJhY2t3YXJkICgpIHsKKyAgICByZXR1cm4gZmFsc2U7CisgIH0KKworICBwdWJsaWMgYm9vbGVhbiBvblNjcm9sbEZvcndhcmQgKCkgeworICAgIHJldHVybiBmYWxzZTsKKyAgfQorCisgIHB1YmxpYyBib29sZWFuIG9uQ29udGV4dENsaWNrICgpIHsKKyAgICByZXR1cm4gZmFsc2U7CisgIH0KKworICBwdWJsaWMgYm9vbGVhbiBvbkFjY2Vzc2liaWxpdHlBY3Rpb25zICgpIHsKKyAgICByZXR1cm4gZmFsc2U7CisgIH0KKworICBwdWJsaWMgYm9vbGVhbiBvbkRlc2NyaWJlRWxlbWVudCAoKSB7CisgICAgcmV0dXJuIGZhbHNlOworICB9CisKKyAgcHVibGljIGJvb2xlYW4gcGVyZm9ybUFjdGlvbiAoaW50IGNvbHVtbiwgaW50IHJvdykgeworICAgIHN3aXRjaCAoY29sdW1uKSB7CisgICAgICBjYXNlICAwOiByZXR1cm4gb25CcmluZ0N1cnNvcigpOworICAgICAgY2FzZSAgMTogcmV0dXJuIG9uQ2xpY2soKTsKKyAgICAgIGNhc2UgIDI6IHJldHVybiBvbkxvbmdDbGljaygpOworICAgICAgY2FzZSAgMzogcmV0dXJuIG9uU2Nyb2xsQmFja3dhcmQoKTsKKyAgICAgIGNhc2UgIDQ6IHJldHVybiBvblNjcm9sbEZvcndhcmQoKTsKKyAgICAgIGNhc2UgIDU6IHJldHVybiBvbkNvbnRleHRDbGljaygpOworICAgICAgY2FzZSAgNjogcmV0dXJuIG9uQWNjZXNzaWJpbGl0eUFjdGlvbnMoKTsKKyAgICAgIGNhc2UgMTU6IHJldHVybiBvbkRlc2NyaWJlRWxlbWVudCgpOworICAgICAgZGVmYXVsdDogcmV0dXJuIGZhbHNlOworICAgIH0KKyAgfQorCisgIHByaXZhdGUgUmVjdCB2aXN1YWxMb2NhdGlvbiA9IG51bGw7CisKKyAgcHVibGljIGZpbmFsIFJlY3QgZ2V0VmlzdWFsTG9jYXRpb24gKCkgeworICAgIHJldHVybiB2aXN1YWxMb2NhdGlvbjsKKyAgfQorCisgIHB1YmxpYyBmaW5hbCBTY3JlZW5FbGVtZW50IHNldFZpc3VhbExvY2F0aW9uIChSZWN0IGxvY2F0aW9uKSB7CisgICAgdmlzdWFsTG9jYXRpb24gPSBsb2NhdGlvbjsKKyAgICByZXR1cm4gdGhpczsKKyAgfQorCisgIHByaXZhdGUgUmVjdCBicmFpbGxlTG9jYXRpb24gPSBudWxsOworCisgIHB1YmxpYyBmaW5hbCBSZWN0IGdldEJyYWlsbGVMb2NhdGlvbiAoKSB7CisgICAgcmV0dXJuIGJyYWlsbGVMb2NhdGlvbjsKKyAgfQorCisgIHB1YmxpYyBmaW5hbCBTY3JlZW5FbGVtZW50IHNldEJyYWlsbGVMb2NhdGlvbiAoUmVjdCBsb2NhdGlvbikgeworICAgIGJyYWlsbGVMb2NhdGlvbiA9IGxvY2F0aW9uOworICAgIHJldHVybiB0aGlzOworICB9CisKKyAgcHVibGljIGZpbmFsIFNjcmVlbkVsZW1lbnQgc2V0QnJhaWxsZUxvY2F0aW9uIChpbnQgbGVmdCwgaW50IHRvcCwgaW50IHJpZ2h0LCBpbnQgYm90dG9tKSB7CisgICAgcmV0dXJuIHNldEJyYWlsbGVMb2NhdGlvbihuZXcgUmVjdChsZWZ0LCB0b3AsIHJpZ2h0LCBib3R0b20pKTsKKyAgfQorCisgIHByaXZhdGUgU3RyaW5nW10gYnJhaWxsZVRleHQgPSBudWxsOworICBwcml2YXRlIGludFtdIGxpbmVPZmZzZXRzID0gbnVsbDsKKworICBwcm90ZWN0ZWQgU3RyaW5nW10gbWFrZUJyYWlsbGVUZXh0IChTdHJpbmcgdGV4dCkgeworICAgIGlmICh0ZXh0ID09IG51bGwpIHJldHVybiBudWxsOworCisgICAgTGlzdDxTdHJpbmc+IGxpbmVzID0gbmV3IEFycmF5TGlzdDxTdHJpbmc+KCk7CisgICAgaW50IHN0YXJ0ID0gMDsKKworICAgIHdoaWxlICh0cnVlKSB7CisgICAgICBpbnQgZW5kID0gdGV4dC5pbmRleE9mKCdcbicsIHN0YXJ0KTsKKyAgICAgIGlmIChlbmQgPT0gLTEpIGJyZWFrOworCisgICAgICBsaW5lcy5hZGQodGV4dC5zdWJzdHJpbmcoc3RhcnQsIGVuZCkpOworICAgICAgc3RhcnQgPSBlbmQgKyAxOworICAgIH0KKworICAgIGlmIChzdGFydCA+IDApIHRleHQgPSB0ZXh0LnN1YnN0cmluZyhzdGFydCk7CisgICAgbGluZXMuYWRkKHRleHQpOworCisgICAgcmV0dXJuIGxpbmVzLnRvQXJyYXkobmV3IFN0cmluZ1tsaW5lcy5zaXplKCldKTsKKyAgfQorCisgIHB1YmxpYyBmaW5hbCBTdHJpbmdbXSBnZXRCcmFpbGxlVGV4dCAoKSB7CisgICAgc3luY2hyb25pemVkICh0aGlzKSB7CisgICAgICBpZiAoYnJhaWxsZVRleHQgPT0gbnVsbCkgeworICAgICAgICBicmFpbGxlVGV4dCA9IG1ha2VCcmFpbGxlVGV4dChlbGVtZW50VGV4dCk7CisgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIGJyYWlsbGVUZXh0OworICB9CisKKyAgcHJpdmF0ZSBmaW5hbCBpbnRbXSBtYWtlTGluZU9mZnNldHMgKFN0cmluZ1tdIGxpbmVzKSB7CisgICAgaW50W10gb2Zmc2V0cyA9IG5ldyBpbnRbbGluZXMubGVuZ3RoXTsKKworICAgIGludCBpbmRleCA9IDA7CisgICAgaW50IG9mZnNldCA9IDA7CisKKyAgICBmb3IgKFN0cmluZyBsaW5lIDogbGluZXMpIHsKKyAgICAgIG9mZnNldHNbaW5kZXhdID0gb2Zmc2V0OworICAgICAgb2Zmc2V0ICs9IGxpbmVzW2luZGV4XS5sZW5ndGgoKTsKKyAgICAgIGluZGV4ICs9IDE7CisgICAgfQorCisgICAgcmV0dXJuIG9mZnNldHM7CisgIH0KKworICBwdWJsaWMgZmluYWwgaW50IGdldFRleHRPZmZzZXQgKGludCBjb2x1bW4sIGludCByb3cpIHsKKyAgICBTdHJpbmdbXSBsaW5lcyA9IGdldEJyYWlsbGVUZXh0KCk7CisKKyAgICBzeW5jaHJvbml6ZWQgKHRoaXMpIHsKKyAgICAgIGlmIChsaW5lT2Zmc2V0cyA9PSBudWxsKSB7CisgICAgICAgIGxpbmVPZmZzZXRzID0gbWFrZUxpbmVPZmZzZXRzKGxpbmVzKTsKKyAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gbGluZU9mZnNldHNbcm93XSArIE1hdGgubWluKGNvbHVtbiwgKGxpbmVzW3Jvd10ubGVuZ3RoKCkgLSAxKSk7CisgIH0KKworICBwdWJsaWMgZmluYWwgUG9pbnQgZ2V0QnJhaWxsZUNvb3JkaW5hdGVzIChpbnQgb2Zmc2V0KSB7CisgICAgU3RyaW5nW10gbGluZXMgPSBnZXRCcmFpbGxlVGV4dCgpOworCisgICAgaWYgKGxpbmVzICE9IG51bGwpIHsKKyAgICAgIGludCByb3cgPSAwOworCisgICAgICBmb3IgKFN0cmluZyBsaW5lIDogbGluZXMpIHsKKyAgICAgICAgaW50IGxlbmd0aCA9IGxpbmUubGVuZ3RoKCk7CisgICAgICAgIGlmIChvZmZzZXQgPCBsZW5ndGgpIHJldHVybiBuZXcgUG9pbnQob2Zmc2V0LCByb3cpOworCisgICAgICAgIHJvdyArPSAxOworICAgICAgICBvZmZzZXQgLT0gbGVuZ3RoOworICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBudWxsOworICB9Cit9CmRpZmYgLS1naXQgYS9BbmRyb2lkL0dyYWRsZS9hcHAvc3JjL21haW4vamF2YS9vcmcvYTExeS9icmx0dHkvYW5kcm9pZC9TY3JlZW5FbGVtZW50TGlzdC5qYXZhIGIvQW5kcm9pZC9HcmFkbGUvYXBwL3NyYy9tYWluL2phdmEvb3JnL2ExMXkvYnJsdHR5L2FuZHJvaWQvU2NyZWVuRWxlbWVudExpc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYTAxNmFjCi0tLSAvZGV2L251bGwKKysrIGIvQW5kcm9pZC9HcmFkbGUvYXBwL3NyYy9tYWluL2phdmEvb3JnL2ExMXkvYnJsdHR5L2FuZHJvaWQvU2NyZWVuRWxlbWVudExpc3QuamF2YQpAQCAtMCwwICsxLDI1MyBAQAorLyoKKyAqIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisgKiAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisgKgorICogQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKK3BhY2thZ2Ugb3JnLmExMXkuYnJsdHR5LmFuZHJvaWQ7CisKK2ltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLlJlY3Q7CitpbXBvcnQgYW5kcm9pZC51dGlsLkxvZzsKK2ltcG9ydCBhbmRyb2lkLnZpZXcuYWNjZXNzaWJpbGl0eS5BY2Nlc3NpYmlsaXR5Tm9kZUluZm87CitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlzOworaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOworaW1wb3J0IGphdmEudXRpbC5NYXA7CisKK3B1YmxpYyBjbGFzcyBTY3JlZW5FbGVtZW50TGlzdCBleHRlbmRzIEFycmF5TGlzdDxTY3JlZW5FbGVtZW50PiB7CisgIHByaXZhdGUgZmluYWwgc3RhdGljIFN0cmluZyBMT0dfVEFHID0gU2NyZWVuRWxlbWVudExpc3QuY2xhc3MuZ2V0TmFtZSgpOworCisgIHB1YmxpYyBTY3JlZW5FbGVtZW50TGlzdCAoKSB7CisgICAgc3VwZXIoKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIGxvZyAoKSB7CisgICAgTG9nLmQoTE9HX1RBRywgImJlZ2luIHNjcmVlbiBlbGVtZW50IGxpc3QiKTsKKworICAgIGZvciAoU2NyZWVuRWxlbWVudCBlbGVtZW50IDogdGhpcykgeworICAgICAgTG9nLmQoTE9HX1RBRywgInNjcmVlbiBlbGVtZW50OiAiICsgZWxlbWVudC5nZXRFbGVtZW50VGV4dCgpKTsKKyAgICB9CisKKyAgICBMb2cuZChMT0dfVEFHLCAiZW5kIHNjcmVlbiBlbGVtZW50IGxpc3QiKTsKKyAgfQorCisgIHByaXZhdGUgaW50IGF0VG9wQ291bnQgPSAwOworCisgIHB1YmxpYyBmaW5hbCB2b2lkIGFkZEF0VG9wIChWaXJ0dWFsU2NyZWVuRWxlbWVudCBlbGVtZW50KSB7CisgICAgYWRkKGF0VG9wQ291bnQrKywgZWxlbWVudCk7CisgIH0KKworICBwdWJsaWMgZmluYWwgdm9pZCBhZGRBdFRvcCAoaW50IHRleHQsIGludCBhY3Rpb24sIGludCBrZXkpIHsKKyAgICBhZGRBdFRvcChuZXcgVmlydHVhbFNjcmVlbkVsZW1lbnQodGV4dCwgYWN0aW9uLCBrZXkpKTsKKyAgfQorCisgIHB1YmxpYyBmaW5hbCB2b2lkIGFkZEF0VG9wIChpbnQgdGV4dCwgaW50IGFjdGlvbikgeworICAgIGFkZEF0VG9wKG5ldyBWaXJ0dWFsU2NyZWVuRWxlbWVudCh0ZXh0LCBhY3Rpb24pKTsKKyAgfQorCisgIHB1YmxpYyBmaW5hbCB2b2lkIGFkZEF0Qm90dG9tIChpbnQgdGV4dCwgaW50IGFjdGlvbiwgaW50IGtleSkgeworICAgIGFkZChuZXcgVmlydHVhbFNjcmVlbkVsZW1lbnQodGV4dCwgYWN0aW9uLCBrZXkpKTsKKyAgfQorCisgIHB1YmxpYyBmaW5hbCB2b2lkIGFkZEF0Qm90dG9tIChpbnQgdGV4dCwgaW50IGFjdGlvbikgeworICAgIGFkZChuZXcgVmlydHVhbFNjcmVlbkVsZW1lbnQodGV4dCwgYWN0aW9uKSk7CisgIH0KKworICBwcml2YXRlIGZpbmFsIE1hcDxBY2Nlc3NpYmlsaXR5Tm9kZUluZm8sIFNjcmVlbkVsZW1lbnQ+IG5vZGVUb1NjcmVlbkVsZW1lbnQgPQorICAgICAgICBuZXcgSGFzaE1hcDxBY2Nlc3NpYmlsaXR5Tm9kZUluZm8sIFNjcmVlbkVsZW1lbnQ+KCk7CisKKyAgcHVibGljIGZpbmFsIHZvaWQgYWRkIChTdHJpbmcgdGV4dCwgQWNjZXNzaWJpbGl0eU5vZGVJbmZvIG5vZGUpIHsKKyAgICBub2RlID0gQWNjZXNzaWJpbGl0eU5vZGVJbmZvLm9idGFpbihub2RlKTsKKyAgICBTY3JlZW5FbGVtZW50IGVsZW1lbnQgPSBuZXcgUmVhbFNjcmVlbkVsZW1lbnQodGV4dCwgbm9kZSk7CisgICAgYWRkKGVsZW1lbnQpOworICAgIG5vZGVUb1NjcmVlbkVsZW1lbnQucHV0KG5vZGUsIGVsZW1lbnQpOworICB9CisKKyAgcHVibGljIGZpbmFsIFNjcmVlbkVsZW1lbnQgZ2V0IChBY2Nlc3NpYmlsaXR5Tm9kZUluZm8gbm9kZSkgeworICAgIHJldHVybiBub2RlVG9TY3JlZW5FbGVtZW50LmdldChub2RlKTsKKyAgfQorCisgIHByaXZhdGUgZmluYWwgdm9pZCBhZGRCeUNvbnRhaW5lciAoTm9kZUNvbXBhcmF0b3Igbm9kZUNvbXBhcmF0b3IsIEFjY2Vzc2liaWxpdHlOb2RlSW5mby4uLiBub2RlcykgeworICAgIHsKKyAgICAgIGZpbmFsIGludCBjb3VudCA9IG5vZGVzLmxlbmd0aDsKKyAgICAgIGlmIChjb3VudCA9PSAwKSByZXR1cm47CisgICAgICBpZiAoY291bnQgPiAxKSBBcnJheXMuc29ydChub2Rlcywgbm9kZUNvbXBhcmF0b3IpOworICAgIH0KKworICAgIGZvciAoQWNjZXNzaWJpbGl0eU5vZGVJbmZvIG5vZGUgOiBub2RlcykgeworICAgICAgaWYgKG5vZGUgPT0gbnVsbCkgYnJlYWs7CisKKyAgICAgIHRyeSB7CisgICAgICAgIHsKKyAgICAgICAgICBTY3JlZW5FbGVtZW50IGVsZW1lbnQgPSBnZXQobm9kZSk7CisgICAgICAgICAgaWYgKGVsZW1lbnQgIT0gbnVsbCkgYWRkKGVsZW1lbnQpOworICAgICAgICB9CisKKyAgICAgICAgeworICAgICAgICAgIGludCBjb3VudCA9IG5vZGUuZ2V0Q2hpbGRDb3VudCgpOworCisgICAgICAgICAgaWYgKGNvdW50ID4gMCkgeworICAgICAgICAgICAgQWNjZXNzaWJpbGl0eU5vZGVJbmZvW10gY2hpbGRyZW4gPSBuZXcgQWNjZXNzaWJpbGl0eU5vZGVJbmZvW2NvdW50XTsKKworICAgICAgICAgICAgZm9yIChpbnQgaW5kZXg9MDsgaW5kZXg8Y291bnQ7IGluZGV4Kz0xKSB7CisgICAgICAgICAgICAgIGNoaWxkcmVuW2luZGV4XSA9IG5vZGUuZ2V0Q2hpbGQoaW5kZXgpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBhZGRCeUNvbnRhaW5lcihub2RlQ29tcGFyYXRvciwgY2hpbGRyZW4pOworICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgfSBmaW5hbGx5IHsKKyAgICAgICAgbm9kZS5yZWN5Y2xlKCk7CisgICAgICAgIG5vZGUgPSBudWxsOworICAgICAgfQorICAgIH0KKyAgfQorCisgIHByaXZhdGUgZmluYWwgdm9pZCBzb3J0QnlWaXN1YWxMb2NhdGlvbiAoKSB7CisgICAgaWYgKHNpemUoKSA8IDIpIHJldHVybjsKKyAgICBBY2Nlc3NpYmlsaXR5Tm9kZUluZm8gbm9kZSA9IGdldCgwKS5nZXRBY2Nlc3NpYmlsaXR5Tm9kZSgpOworCisgICAgdHJ5IHsKKyAgICAgIEFjY2Vzc2liaWxpdHlOb2RlSW5mbyByb290ID0gU2NyZWVuVXRpbGl0aWVzLmZpbmRSb290Tm9kZShub2RlKTsKKworICAgICAgaWYgKHJvb3QgIT0gbnVsbCkgeworICAgICAgICBOb2RlQ29tcGFyYXRvciBjb21wYXJhdG9yID0gbmV3IE5vZGVDb21wYXJhdG9yKCkgeworICAgICAgICAgIHByaXZhdGUgZmluYWwgTWFwPEFjY2Vzc2liaWxpdHlOb2RlSW5mbywgUmVjdD4gbm9kZUxvY2F0aW9ucyA9CisgICAgICAgICAgICAgICAgbmV3IEhhc2hNYXA8QWNjZXNzaWJpbGl0eU5vZGVJbmZvLCBSZWN0PigpOworCisgICAgICAgICAgcHJpdmF0ZSBmaW5hbCBSZWN0IGdldExvY2F0aW9uIChBY2Nlc3NpYmlsaXR5Tm9kZUluZm8gbm9kZSkgeworICAgICAgICAgICAgc3luY2hyb25pemVkIChub2RlTG9jYXRpb25zKSB7CisgICAgICAgICAgICAgIFJlY3QgbG9jYXRpb24gPSBub2RlTG9jYXRpb25zLmdldChub2RlKTsKKyAgICAgICAgICAgICAgaWYgKGxvY2F0aW9uICE9IG51bGwpIHJldHVybiBsb2NhdGlvbjsKKworICAgICAgICAgICAgICBsb2NhdGlvbiA9IG5ldyBSZWN0KCk7CisgICAgICAgICAgICAgIG5vZGUuZ2V0Qm91bmRzSW5TY3JlZW4obG9jYXRpb24pOworCisgICAgICAgICAgICAgIG5vZGVMb2NhdGlvbnMucHV0KG5vZGUsIGxvY2F0aW9uKTsKKyAgICAgICAgICAgICAgcmV0dXJuIGxvY2F0aW9uOworICAgICAgICAgICAgfQorICAgICAgICAgIH0KKworICAgICAgICAgIEBPdmVycmlkZQorICAgICAgICAgIHB1YmxpYyBpbnQgY29tcGFyZSAoQWNjZXNzaWJpbGl0eU5vZGVJbmZvIG5vZGUxLCBBY2Nlc3NpYmlsaXR5Tm9kZUluZm8gbm9kZTIpIHsKKyAgICAgICAgICAgIGlmIChub2RlMSA9PSBudWxsKSB7CisgICAgICAgICAgICAgIHJldHVybiAobm9kZTIgPT0gbnVsbCk/IDA6IDE7CisgICAgICAgICAgICB9IGVsc2UgaWYgKG5vZGUyID09IG51bGwpIHsKKyAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBSZWN0IGxvY2F0aW9uMSA9IGdldExvY2F0aW9uKG5vZGUxKTsKKyAgICAgICAgICAgIGludCB0b3AxID0gbG9jYXRpb24xLnRvcDsKKyAgICAgICAgICAgIGludCBib3R0b20xID0gbG9jYXRpb24xLmJvdHRvbTsKKyAgICAgICAgICAgIGludCBsZWZ0MSA9IGxvY2F0aW9uMS5sZWZ0OworICAgICAgICAgICAgaW50IHJpZ2h0MSA9IGxvY2F0aW9uMS5yaWdodDsKKworICAgICAgICAgICAgUmVjdCBsb2NhdGlvbjIgPSBnZXRMb2NhdGlvbihub2RlMik7CisgICAgICAgICAgICBpbnQgdG9wMiA9IGxvY2F0aW9uMi50b3A7CisgICAgICAgICAgICBpbnQgYm90dG9tMiA9IGxvY2F0aW9uMi5ib3R0b207CisgICAgICAgICAgICBpbnQgbGVmdDIgPSBsb2NhdGlvbjIubGVmdDsKKyAgICAgICAgICAgIGludCByaWdodDIgPSBsb2NhdGlvbjIucmlnaHQ7CisKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgaW50IG1pZGRsZTEgPSAodG9wMSArIGJvdHRvbTEpIC8gMjsKKyAgICAgICAgICAgICAgaW50IG1pZGRsZTIgPSAodG9wMiArIGJvdHRvbTIpIC8gMjsKKyAgICAgICAgICAgICAgYm9vbGVhbiBzYW1lUm93ID0gKChtaWRkbGUxID49IHRvcDIpICYmIChtaWRkbGUxIDwgYm90dG9tMikpIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgobWlkZGxlMiA+PSB0b3AxKSAmJiAobWlkZGxlMiA8IGJvdHRvbTEpKTsKKworICAgICAgICAgICAgICBpZiAoc2FtZVJvdykgeworICAgICAgICAgICAgICAgIGlmICgobGVmdDEgPCBsZWZ0MikgJiYgKHJpZ2h0MSA8IHJpZ2h0MikpIHJldHVybiAtMTsKKyAgICAgICAgICAgICAgICBpZiAoKGxlZnQxID4gbGVmdDIpICYmIChyaWdodDEgPiByaWdodDIpKSByZXR1cm4gMTsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAodG9wMSA8IHRvcDIpIHJldHVybiAtMTsKKyAgICAgICAgICAgIGlmICh0b3AxID4gdG9wMikgcmV0dXJuIDE7CisKKyAgICAgICAgICAgIGlmIChsZWZ0MSA8IGxlZnQyKSByZXR1cm4gLTE7CisgICAgICAgICAgICBpZiAobGVmdDEgPiBsZWZ0MikgcmV0dXJuIDE7CisKKyAgICAgICAgICAgIGlmIChyaWdodDEgPiByaWdodDIpIHJldHVybiAtMTsKKyAgICAgICAgICAgIGlmIChyaWdodDEgPCByaWdodDIpIHJldHVybiAxOworCisgICAgICAgICAgICBpZiAoYm90dG9tMSA+IGJvdHRvbTIpIHJldHVybiAtMTsKKyAgICAgICAgICAgIGlmIChib3R0b20xIDwgYm90dG9tMikgcmV0dXJuIDE7CisKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgIH0KKyAgICAgICAgfTsKKworICAgICAgICBjbGVhcigpOworICAgICAgICBhZGRCeUNvbnRhaW5lcihjb21wYXJhdG9yLCByb290KTsKKyAgICAgIH0KKyAgICB9IGZpbmFsbHkgeworICAgICAgbm9kZS5yZWN5Y2xlKCk7CisgICAgICBub2RlID0gbnVsbDsKKyAgICB9CisgIH0KKworICBwcml2YXRlIFNjcmVlbkVsZW1lbnQgZmlyc3RFbGVtZW50ID0gbnVsbDsKKyAgcHJpdmF0ZSBTY3JlZW5FbGVtZW50IGxhc3RFbGVtZW50ID0gbnVsbDsKKworICBwdWJsaWMgZmluYWwgU2NyZWVuRWxlbWVudCBnZXRGaXJzdEVsZW1lbnQgKCkgeworICAgIHJldHVybiBmaXJzdEVsZW1lbnQ7CisgIH0KKworICBwdWJsaWMgZmluYWwgU2NyZWVuRWxlbWVudCBnZXRMYXN0RWxlbWVudCAoKSB7CisgICAgcmV0dXJuIGxhc3RFbGVtZW50OworICB9CisKKyAgcHJpdmF0ZSBmaW5hbCB2b2lkIG1ha2VUcmF2ZXJzYWxMaW5rcyAoKSB7CisgICAgaW50IGNvdW50ID0gc2l6ZSgpOworICAgIGlmIChjb3VudCA9PSAwKSByZXR1cm47CisKKyAgICBmaXJzdEVsZW1lbnQgPSBnZXQoMCk7CisgICAgbGFzdEVsZW1lbnQgPSBnZXQoY291bnQtMSk7CisgICAgU2NyZWVuRWxlbWVudCBwcmV2aW91c0VsZW1lbnQgPSBsYXN0RWxlbWVudDsKKworICAgIGZvciAoU2NyZWVuRWxlbWVudCBuZXh0RWxlbWVudCA6IHRoaXMpIHsKKyAgICAgIG5leHRFbGVtZW50LnNldEJhY2t3YXJkRWxlbWVudChwcmV2aW91c0VsZW1lbnQpOworICAgICAgcHJldmlvdXNFbGVtZW50LnNldEZvcndhcmRFbGVtZW50KG5leHRFbGVtZW50KTsKKyAgICAgIHByZXZpb3VzRWxlbWVudCA9IG5leHRFbGVtZW50OworICAgIH0KKyAgfQorCisgIHB1YmxpYyBmaW5hbCB2b2lkIGZpbmlzaCAoKSB7CisgICAgc29ydEJ5VmlzdWFsTG9jYXRpb24oKTsKKyAgICBtYWtlVHJhdmVyc2FsTGlua3MoKTsKKyAgfQorCisgIHB1YmxpYyBmaW5hbCBTY3JlZW5FbGVtZW50IGZpbmRCeUJyYWlsbGVMb2NhdGlvbiAoaW50IGNvbHVtbiwgaW50IHJvdykgeworICAgIFNjcmVlbkVsZW1lbnQgYmVzdEVsZW1lbnQgPSBudWxsOworICAgIGludCBiZXN0TGVmdCA9IC0xOworCisgICAgZm9yIChTY3JlZW5FbGVtZW50IGVsZW1lbnQgOiB0aGlzKSB7CisgICAgICBSZWN0IGxvY2F0aW9uID0gZWxlbWVudC5nZXRCcmFpbGxlTG9jYXRpb24oKTsKKyAgICAgIGlmIChsb2NhdGlvbiA9PSBudWxsKSBjb250aW51ZTsKKworICAgICAgaWYgKHJvdyA8IGxvY2F0aW9uLnRvcCkgY29udGludWU7CisgICAgICBpZiAocm93ID4gbG9jYXRpb24uYm90dG9tKSBjb250aW51ZTsKKworICAgICAgaWYgKGNvbHVtbiA8IGxvY2F0aW9uLmxlZnQpIGNvbnRpbnVlOworICAgICAgaWYgKGNvbHVtbiA8PSBsb2NhdGlvbi5yaWdodCkgcmV0dXJuIGVsZW1lbnQ7CisKKyAgICAgIGlmIChsb2NhdGlvbi5sZWZ0ID4gYmVzdExlZnQpIHsKKyAgICAgICAgYmVzdExlZnQgPSBsb2NhdGlvbi5sZWZ0OworICAgICAgICBiZXN0RWxlbWVudCA9IGVsZW1lbnQ7CisgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIGJlc3RFbGVtZW50OworICB9Cit9CmRpZmYgLS1naXQgYS9BbmRyb2lkL0dyYWRsZS9hcHAvc3JjL21haW4vamF2YS9vcmcvYTExeS9icmx0dHkvYW5kcm9pZC9TY3JlZW5Mb2dnZXIuamF2YSBiL0FuZHJvaWQvR3JhZGxlL2FwcC9zcmMvbWFpbi9qYXZhL29yZy9hMTF5L2JybHR0eS9hbmRyb2lkL1NjcmVlbkxvZ2dlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZmMDBiMmYKLS0tIC9kZXYvbnVsbAorKysgYi9BbmRyb2lkL0dyYWRsZS9hcHAvc3JjL21haW4vamF2YS9vcmcvYTExeS9icmx0dHkvYW5kcm9pZC9TY3JlZW5Mb2dnZXIuamF2YQpAQCAtMCwwICsxLDY1MSBAQAorLyoKKyAqIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisgKiAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisgKgorICogQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKK3BhY2thZ2Ugb3JnLmExMXkuYnJsdHR5LmFuZHJvaWQ7CisKK2ltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLlJlY3Q7CitpbXBvcnQgYW5kcm9pZC5vcy5CdW5kbGU7CitpbXBvcnQgYW5kcm9pZC50ZXh0LlNwYW5uZWQ7CitpbXBvcnQgYW5kcm9pZC51dGlsLkxvZzsKK2ltcG9ydCBhbmRyb2lkLnZpZXcuYWNjZXNzaWJpbGl0eS5BY2Nlc3NpYmlsaXR5Tm9kZUluZm87CitpbXBvcnQgYW5kcm9pZC52aWV3LmFjY2Vzc2liaWxpdHkuQWNjZXNzaWJpbGl0eVdpbmRvd0luZm87CitpbXBvcnQgamF2YS5pby5GaWxlOworaW1wb3J0IGphdmEuaW8uRmlsZU5vdEZvdW5kRXhjZXB0aW9uOworaW1wb3J0IGphdmEuaW8uRmlsZU91dHB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworaW1wb3J0IGphdmEuaW8uT3V0cHV0U3RyZWFtOworaW1wb3J0IGphdmEuaW8uT3V0cHV0U3RyZWFtV3JpdGVyOworaW1wb3J0IGphdmEuaW8uV3JpdGVyOworaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOworaW1wb3J0IGphdmEudXRpbC5MaW5rZWRIYXNoTWFwOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworaW1wb3J0IGphdmEudXRpbC5NYXA7CisKK3B1YmxpYyBjbGFzcyBTY3JlZW5Mb2dnZXIgZXh0ZW5kcyBMb2dnZXIgeworICBwcml2YXRlIGZpbmFsIHN0YXRpYyBTdHJpbmcgTE9HX1RBRyA9IFNjcmVlbkxvZ2dlci5jbGFzcy5nZXROYW1lKCk7CisKKyAgQE92ZXJyaWRlCisgIHByb3RlY3RlZCBTdHJpbmcgZ2V0TG9nVGFnICgpIHsKKyAgICByZXR1cm4gTE9HX1RBRzsKKyAgfQorCisgIHB1YmxpYyBTY3JlZW5Mb2dnZXIgKCkgeworICAgIHN1cGVyKCk7CisgIH0KKworICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgZ2V0VGV4dCAoQWNjZXNzaWJpbGl0eU5vZGVJbmZvIG5vZGUpIHsKKyAgICBTdHJpbmcgdGV4dCA9IFNjcmVlblV0aWxpdGllcy5nZXRUZXh0KG5vZGUpOworICAgIGlmICh0ZXh0ICE9IG51bGwpIHJldHVybiB0ZXh0OworICAgIHJldHVybiBTY3JlZW5VdGlsaXRpZXMuZ2V0RGVzY3JpcHRpb24obm9kZSk7CisgIH0KKworICBwcml2YXRlIHN0YXRpYyB2b2lkIGFkZFRleHQgKFN0cmluZ0J1aWxkZXIgc2IsIENoYXJTZXF1ZW5jZSB0ZXh0LCBTdHJpbmcgbGFiZWwsIGNoYXIgYmVnaW4sIGNoYXIgZW5kKSB7CisgICAgaWYgKHRleHQgPT0gbnVsbCkgcmV0dXJuOworICAgIGlmICh0ZXh0Lmxlbmd0aCgpID09IDApIHJldHVybjsKKworICAgIGlmIChzYi5sZW5ndGgoKSA+IDApIHNiLmFwcGVuZCgnICcpOworICAgIGlmIChsYWJlbCAhPSBudWxsKSBzYi5hcHBlbmQobGFiZWwpLmFwcGVuZCgnOicpOworICAgIHNiLmFwcGVuZChiZWdpbikuYXBwZW5kKHRleHQpLmFwcGVuZChlbmQpOworICB9CisKKyAgcHJpdmF0ZSBzdGF0aWMgdm9pZCBhZGRUZXh0IChTdHJpbmdCdWlsZGVyIHNiLCBDaGFyU2VxdWVuY2UgdGV4dCwgU3RyaW5nIGxhYmVsKSB7CisgICAgYWRkVGV4dChzYiwgdGV4dCwgbGFiZWwsICciJywgJyInKTsKKyAgfQorCisgIHByaXZhdGUgZmluYWwgc3RhdGljIHZvaWQgYWRkIChTdHJpbmdCdWlsZGVyIHNiLCBTdHJpbmcgdmFsdWUpIHsKKyAgICBpZiAodmFsdWUgIT0gbnVsbCkgeworICAgICAgaWYgKHNiLmxlbmd0aCgpID4gMCkgc2IuYXBwZW5kKCcgJyk7CisgICAgICBzYi5hcHBlbmQodmFsdWUpOworICAgIH0KKyAgfQorCisgIHByaXZhdGUgZmluYWwgc3RhdGljIHZvaWQgYWRkIChTdHJpbmdCdWlsZGVyIHNiLCBib29sZWFuIGNvbmRpdGlvbiwgU3RyaW5nIHRydWVWYWx1ZSwgU3RyaW5nIGZhbHNlVmFsdWUpIHsKKyAgICBhZGQoc2IsIChjb25kaXRpb24/IHRydWVWYWx1ZTogZmFsc2VWYWx1ZSkpOworICB9CisKKyAgcHJpdmF0ZSBmaW5hbCBzdGF0aWMgdm9pZCBhZGQgKFN0cmluZ0J1aWxkZXIgc2IsIGJvb2xlYW4gY29uZGl0aW9uLCBTdHJpbmcgdHJ1ZVZhbHVlKSB7CisgICAgYWRkKHNiLCBjb25kaXRpb24sIHRydWVWYWx1ZSwgbnVsbCk7CisgIH0KKworICBwcml2YXRlIGZpbmFsIHN0YXRpYyB2b2lkIGFkZCAoU3RyaW5nQnVpbGRlciBzYiwgU3RyaW5nIGxhYmVsLCBDaGFyU2VxdWVuY2UgdmFsdWUpIHsKKyAgICBpZiAodmFsdWUgIT0gbnVsbCkgYWRkKHNiLCBTdHJpbmcuZm9ybWF0KCIlcz0lcyIsIGxhYmVsLCB2YWx1ZSkpOworICB9CisKKyAgcHJpdmF0ZSBmaW5hbCBzdGF0aWMgdm9pZCBhZGQgKFN0cmluZ0J1aWxkZXIgc2IsIFN0cmluZyBsYWJlbCwgaW50IHZhbHVlKSB7CisgICAgYWRkKHNiLCBsYWJlbCwgSW50ZWdlci50b1N0cmluZyh2YWx1ZSkpOworICB9CisKKyAgcHJpdmF0ZSBmaW5hbCBzdGF0aWMgdm9pZCBhZGQgKFN0cmluZ0J1aWxkZXIgc2IsIFN0cmluZyBsYWJlbCwgaW50IHZhbHVlLCBNYXA8SW50ZWdlciwgU3RyaW5nPiBuYW1lcykgeworICAgIFN0cmluZyBuYW1lID0gbmFtZXMuZ2V0KHZhbHVlKTsKKworICAgIGlmIChuYW1lICE9IG51bGwpIHsKKyAgICAgIGFkZChzYiwgbGFiZWwsIG5hbWUpOworICAgIH0gZWxzZSB7CisgICAgICBhZGQoc2IsIGxhYmVsLCB2YWx1ZSk7CisgICAgfQorICB9CisKKyAgcHJpdmF0ZSBmaW5hbCB2b2lkIGxvZyAoU3RyaW5nIGxhYmVsLCBTdHJpbmcgZGF0YSkgdGhyb3dzIElPRXhjZXB0aW9uIHsKKyAgICBsb2coKGxhYmVsICsgIjogIiArIGRhdGEpKTsKKyAgfQorCisgIHByaXZhdGUgc3RhdGljIGNsYXNzIEFjdGlvbkxhYmVsTWFwIGV4dGVuZHMgTGlua2VkSGFzaE1hcDxJbnRlZ2VyLCBTdHJpbmc+IHsKKyAgICBwdWJsaWMgZmluYWwgdm9pZCBwdXQgKFN0cmluZyBuYW1lLCBpbnQgYWN0aW9uKSB7CisgICAgICBwdXQoYWN0aW9uLCBuYW1lKTsKKyAgICB9CisKKyAgICBwdWJsaWMgZmluYWwgdm9pZCBwdXQgKFN0cmluZyBuYW1lLCBBY2Nlc3NpYmlsaXR5Tm9kZUluZm8uQWNjZXNzaWJpbGl0eUFjdGlvbiBhY3Rpb24pIHsKKyAgICAgIGlmIChBUElUZXN0cy5oYXZlTG9sbGlwb3ApIHsKKyAgICAgICAgcHV0KG5hbWUsIGFjdGlvbi5nZXRJZCgpKTsKKyAgICAgIH0KKyAgICB9CisgIH0KKworICBwcml2YXRlIGZpbmFsIHN0YXRpYyBBY3Rpb25MYWJlbE1hcCBhY3Rpb25MYWJlbHMgPSBuZXcgQWN0aW9uTGFiZWxNYXAoKQorICB7CisgICAgeworICAgICAgcHV0KCJjbGsiLCBBY2Nlc3NpYmlsaXR5Tm9kZUluZm8uQUNUSU9OX0NMSUNLKTsKKyAgICAgIHB1dCgibGNrIiwgQWNjZXNzaWJpbGl0eU5vZGVJbmZvLkFDVElPTl9MT05HX0NMSUNLKTsKKyAgICAgIHB1dCgic2NmIiwgQWNjZXNzaWJpbGl0eU5vZGVJbmZvLkFDVElPTl9TQ1JPTExfRk9SV0FSRCk7CisgICAgICBwdXQoInNjYiIsIEFjY2Vzc2liaWxpdHlOb2RlSW5mby5BQ1RJT05fU0NST0xMX0JBQ0tXQVJEKTsKKyAgICAgIHB1dCgibWdwIiwgQWNjZXNzaWJpbGl0eU5vZGVJbmZvLkFDVElPTl9QUkVWSU9VU19BVF9NT1ZFTUVOVF9HUkFOVUxBUklUWSk7CisgICAgICBwdXQoIm1nbiIsIEFjY2Vzc2liaWxpdHlOb2RlSW5mby5BQ1RJT05fTkVYVF9BVF9NT1ZFTUVOVF9HUkFOVUxBUklUWSk7CisgICAgICBwdXQoIm1lcCIsIEFjY2Vzc2liaWxpdHlOb2RlSW5mby5BQ1RJT05fUFJFVklPVVNfSFRNTF9FTEVNRU5UKTsKKyAgICAgIHB1dCgibWVuIiwgQWNjZXNzaWJpbGl0eU5vZGVJbmZvLkFDVElPTl9ORVhUX0hUTUxfRUxFTUVOVCk7CisgICAgICBwdXQoInNscyIsIEFjY2Vzc2liaWxpdHlOb2RlSW5mby5BQ1RJT05fU0VMRUNUKTsKKyAgICAgIHB1dCgic2xjIiwgQWNjZXNzaWJpbGl0eU5vZGVJbmZvLkFDVElPTl9DTEVBUl9TRUxFQ1RJT04pOworICAgICAgcHV0KCJpZnMiLCBBY2Nlc3NpYmlsaXR5Tm9kZUluZm8uQUNUSU9OX0ZPQ1VTKTsKKyAgICAgIHB1dCgiaWZjIiwgQWNjZXNzaWJpbGl0eU5vZGVJbmZvLkFDVElPTl9DTEVBUl9GT0NVUyk7CisgICAgICBwdXQoImFmcyIsIEFjY2Vzc2liaWxpdHlOb2RlSW5mby5BQ1RJT05fQUNDRVNTSUJJTElUWV9GT0NVUyk7CisgICAgICBwdXQoImFmYyIsIEFjY2Vzc2liaWxpdHlOb2RlSW5mby5BQ1RJT05fQ0xFQVJfQUNDRVNTSUJJTElUWV9GT0NVUyk7CisKKyAgICAgIGlmIChBUElUZXN0cy5oYXZlSmVsbHlCZWFuTVIyKSB7CisgICAgICAgIHB1dCgic2VsIiwgQWNjZXNzaWJpbGl0eU5vZGVJbmZvLkFDVElPTl9TRVRfU0VMRUNUSU9OKTsKKyAgICAgICAgcHV0KCJjYmMiLCBBY2Nlc3NpYmlsaXR5Tm9kZUluZm8uQUNUSU9OX0NPUFkpOworICAgICAgICBwdXQoImNieCIsIEFjY2Vzc2liaWxpdHlOb2RlSW5mby5BQ1RJT05fQ1VUKTsKKyAgICAgICAgcHV0KCJjYnAiLCBBY2Nlc3NpYmlsaXR5Tm9kZUluZm8uQUNUSU9OX1BBU1RFKTsKKyAgICAgIH0KKworICAgICAgaWYgKEFQSVRlc3RzLmhhdmVLaXRrYXQpIHsKKyAgICAgICAgcHV0KCJkc21zIiwgQWNjZXNzaWJpbGl0eU5vZGVJbmZvLkFDVElPTl9ESVNNSVNTKTsKKyAgICAgICAgcHV0KCJjbHBzIiwgQWNjZXNzaWJpbGl0eU5vZGVJbmZvLkFDVElPTl9DT0xMQVBTRSk7CisgICAgICAgIHB1dCgieHBuZCIsIEFjY2Vzc2liaWxpdHlOb2RlSW5mby5BQ1RJT05fRVhQQU5EKTsKKyAgICAgIH0KKworICAgICAgaWYgKEFQSVRlc3RzLmhhdmVMb2xsaXBvcCkgeworICAgICAgICBwdXQoInR4cyIsIEFjY2Vzc2liaWxpdHlOb2RlSW5mby5BQ1RJT05fU0VUX1RFWFQpOworICAgICAgfQorCisgICAgICBpZiAoQVBJVGVzdHMuaGF2ZU1hcnNobWFsbG93KSB7CisgICAgICAgIHB1dCgiY2NrIiwgQWNjZXNzaWJpbGl0eU5vZGVJbmZvLkFjY2Vzc2liaWxpdHlBY3Rpb24uQUNUSU9OX0NPTlRFWFRfQ0xJQ0spOworICAgICAgfQorICAgIH0KKyAgfTsKKworICBwdWJsaWMgc3RhdGljIFN0cmluZyB0b1N0cmluZyAoQWNjZXNzaWJpbGl0eU5vZGVJbmZvIG5vZGUpIHsKKyAgICBTdHJpbmdCdWlsZGVyIHNiID0gbmV3IFN0cmluZ0J1aWxkZXIoKTsKKyAgICBhZGQoc2IsIFNjcmVlblV0aWxpdGllcy5nZXRDbGFzc05hbWUobm9kZSkpOworCisgICAgYWRkVGV4dChzYiwgc2hyaW5rVGV4dChTY3JlZW5VdGlsaXRpZXMuZ2V0VGV4dChub2RlKSksIG51bGwpOworICAgIGFkZFRleHQoc2IsIHNocmlua1RleHQoU2NyZWVuVXRpbGl0aWVzLmdldERlc2NyaXB0aW9uKG5vZGUpKSwgbnVsbCwgJygnLCAnKScpOworCisgICAgaWYgKEFQSVRlc3RzLmhhdmVPcmVvKSB7CisgICAgICBhZGRUZXh0KHNiLCBub2RlLmdldEhpbnRUZXh0KCksICJoaW50Iik7CisgICAgfQorCisgICAgaWYgKEFQSVRlc3RzLmhhdmVQaWUpIHsKKyAgICAgIGFkZFRleHQoc2IsIG5vZGUuZ2V0VG9vbHRpcFRleHQoKSwgInRpcCIpOworICAgIH0KKworICAgIGlmIChBUElUZXN0cy5oYXZlUGllKSB7CisgICAgICBhZGRUZXh0KHNiLCBub2RlLmdldFBhbmVUaXRsZSgpLCAicGFuZSIpOworICAgIH0KKworICAgIGlmIChBUElUZXN0cy5oYXZlTG9sbGlwb3ApIHsKKyAgICAgIGFkZFRleHQoc2IsIG5vZGUuZ2V0RXJyb3IoKSwgImVycm9yIik7CisgICAgfQorCisgICAgeworICAgICAgQWNjZXNzaWJpbGl0eU5vZGVJbmZvIHBhcmVudCA9IG5vZGUuZ2V0UGFyZW50KCk7CisKKyAgICAgIGlmIChwYXJlbnQgIT0gbnVsbCkgeworICAgICAgICBwYXJlbnQucmVjeWNsZSgpOworICAgICAgICBwYXJlbnQgPSBudWxsOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgYWRkKHNiLCAicm9vdCIpOworICAgICAgfQorICAgIH0KKworICAgIHsKKyAgICAgIGludCBjb3VudCA9IG5vZGUuZ2V0Q2hpbGRDb3VudCgpOworICAgICAgaWYgKGNvdW50ID4gMCkgYWRkKHNiLCAiY2xkIiwgY291bnQpOworICAgIH0KKworICAgIGlmIChBUElUZXN0cy5oYXZlSmVsbHlCZWFuKSB7CisgICAgICBhZGQoc2IsICFub2RlLmlzVmlzaWJsZVRvVXNlcigpLCAiaW52Iik7CisgICAgfQorCisgICAgYWRkKHNiLCAhbm9kZS5pc0VuYWJsZWQoKSwgImRzYiIpOworICAgIGFkZChzYiwgbm9kZS5pc1NlbGVjdGVkKCksICJzbGQiKTsKKyAgICBhZGQoc2IsIG5vZGUuaXNTY3JvbGxhYmxlKCksICJzY3IiKTsKKyAgICBhZGQoc2IsIG5vZGUuaXNGb2N1c2FibGUoKSwgImlmYiIpOworICAgIGFkZChzYiwgbm9kZS5pc0ZvY3VzZWQoKSwgImlmZCIpOworCisgICAgaWYgKEFQSVRlc3RzLmhhdmVKZWxseUJlYW4pIHsKKyAgICAgIGFkZChzYiwgbm9kZS5pc0FjY2Vzc2liaWxpdHlGb2N1c2VkKCksICJhZmQiKTsKKyAgICB9CisKKyAgICBhZGQoc2IsIG5vZGUuaXNDbGlja2FibGUoKSwgImNsYiIpOworICAgIGFkZChzYiwgbm9kZS5pc0xvbmdDbGlja2FibGUoKSwgImxjYiIpOworCisgICAgaWYgKEFQSVRlc3RzLmhhdmVNYXJzaG1hbGxvdykgeworICAgICAgYWRkKHNiLCBub2RlLmlzQ29udGV4dENsaWNrYWJsZSgpLCAiY2NiIik7CisgICAgfQorICAgICAgIAorICAgIGFkZChzYiwgbm9kZS5pc0NoZWNrYWJsZSgpLCAiY2tiIik7CisgICAgYWRkKHNiLCBub2RlLmlzQ2hlY2tlZCgpLCAiY2tkIik7CisgICAgYWRkKHNiLCBub2RlLmlzUGFzc3dvcmQoKSwgInB3ZCIpOworCisgICAgaWYgKEFQSVRlc3RzLmhhdmVKZWxseUJlYW5NUjIpIHsKKyAgICAgIGFkZChzYiwgU2NyZWVuVXRpbGl0aWVzLmlzRWRpdGFibGUobm9kZSksICJlZHQiKTsKKworICAgICAgeworICAgICAgICBpbnQgc3RhcnQgPSBub2RlLmdldFRleHRTZWxlY3Rpb25TdGFydCgpOworICAgICAgICBpbnQgZW5kID0gbm9kZS5nZXRUZXh0U2VsZWN0aW9uRW5kKCk7CisKKyAgICAgICAgaWYgKCEoKHN0YXJ0ID09IC0xKSAmJiAoZW5kID09IC0xKSkpIHsKKyAgICAgICAgICBhZGQoc2IsICJzZWwiKTsKKyAgICAgICAgICBzYi5hcHBlbmQoJygnKTsKKyAgICAgICAgICBzYi5hcHBlbmQoc3RhcnQpOworCisgICAgICAgICAgaWYgKGVuZCAhPSBzdGFydCkgeworICAgICAgICAgICAgc2IuYXBwZW5kKCIuLiIpOworICAgICAgICAgICAgc2IuYXBwZW5kKGVuZCk7CisgICAgICAgICAgfQorCisgICAgICAgICAgc2IuYXBwZW5kKCcpJyk7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoQVBJVGVzdHMuaGF2ZUtpdGthdCkgeworICAgICAgeworICAgICAgICBBY2Nlc3NpYmlsaXR5Tm9kZUluZm8uUmFuZ2VJbmZvIHJhbmdlID0gbm9kZS5nZXRSYW5nZUluZm8oKTsKKworICAgICAgICBpZiAocmFuZ2UgIT0gbnVsbCkgeworICAgICAgICAgIGFkZChzYiwgInJuZyIpOworICAgICAgICAgIFN0cmluZyBmb3JtYXQgPSBTY3JlZW5VdGlsaXRpZXMuZ2V0UmFuZ2VWYWx1ZUZvcm1hdChyYW5nZSk7CisKKyAgICAgICAgICBzYi5hcHBlbmQoJygnKTsKKyAgICAgICAgICBzYi5hcHBlbmQoU3RyaW5nLmZvcm1hdChmb3JtYXQsIHJhbmdlLmdldE1pbigpKSk7CisgICAgICAgICAgc2IuYXBwZW5kKCIuLiIpOworICAgICAgICAgIHNiLmFwcGVuZChTdHJpbmcuZm9ybWF0KGZvcm1hdCwgcmFuZ2UuZ2V0TWF4KCkpKTsKKyAgICAgICAgICBzYi5hcHBlbmQoJ0AnKTsKKyAgICAgICAgICBzYi5hcHBlbmQoU3RyaW5nLmZvcm1hdChmb3JtYXQsIHJhbmdlLmdldEN1cnJlbnQoKSkpOworICAgICAgICAgIHNiLmFwcGVuZCgnKScpOworICAgICAgICB9CisgICAgICB9CisKKyAgICAgIHsKKyAgICAgICAgQWNjZXNzaWJpbGl0eU5vZGVJbmZvLkNvbGxlY3Rpb25JbmZvIGNvbGxlY3Rpb24gPSBub2RlLmdldENvbGxlY3Rpb25JbmZvKCk7CisKKyAgICAgICAgaWYgKGNvbGxlY3Rpb24gIT0gbnVsbCkgeworICAgICAgICAgIGFkZChzYiwgImNvbCIpOworICAgICAgICAgIHNiLmFwcGVuZCgnKCcpOworCisgICAgICAgICAgc2IuYXBwZW5kKGNvbGxlY3Rpb24uZ2V0Q29sdW1uQ291bnQoKSk7CisgICAgICAgICAgc2IuYXBwZW5kKCd4Jyk7CisgICAgICAgICAgc2IuYXBwZW5kKGNvbGxlY3Rpb24uZ2V0Um93Q291bnQoKSk7CisKKyAgICAgICAgICBzYi5hcHBlbmQoJywnKTsKKyAgICAgICAgICBzYi5hcHBlbmQoY29sbGVjdGlvbi5pc0hpZXJhcmNoaWNhbCgpPyAidHJlZSI6ICJmbGF0Iik7CisKKyAgICAgICAgICB7CisgICAgICAgICAgICBTdHJpbmcgbW9kZSA9IFNjcmVlblV0aWxpdGllcy5nZXRTZWxlY3Rpb25Nb2RlTGFiZWwoY29sbGVjdGlvbik7CisKKyAgICAgICAgICAgIGlmIChtb2RlICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgc2IuYXBwZW5kKCcsJyk7CisgICAgICAgICAgICAgIHNiLmFwcGVuZChtb2RlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9CisKKyAgICAgICAgICBzYi5hcHBlbmQoJyknKTsKKyAgICAgICAgfQorICAgICAgfQorCisgICAgICB7CisgICAgICAgIEFjY2Vzc2liaWxpdHlOb2RlSW5mby5Db2xsZWN0aW9uSXRlbUluZm8gaXRlbSA9IG5vZGUuZ2V0Q29sbGVjdGlvbkl0ZW1JbmZvKCk7CisKKyAgICAgICAgaWYgKGl0ZW0gIT0gbnVsbCkgeworICAgICAgICAgIGFkZChzYiwgIml0bSIpOworICAgICAgICAgIHNiLmFwcGVuZCgnKCcpOworCisgICAgICAgICAgc2IuYXBwZW5kKGl0ZW0uZ2V0Q29sdW1uU3BhbigpKTsKKyAgICAgICAgICBzYi5hcHBlbmQoJ3gnKTsKKyAgICAgICAgICBzYi5hcHBlbmQoaXRlbS5nZXRSb3dTcGFuKCkpOworICAgICAgICAgIHNiLmFwcGVuZCgnKycpOworICAgICAgICAgIHNiLmFwcGVuZChpdGVtLmdldENvbHVtbkluZGV4KCkpOworICAgICAgICAgIHNiLmFwcGVuZCgnKycpOworICAgICAgICAgIHNiLmFwcGVuZChpdGVtLmdldFJvd0luZGV4KCkpOworCisgICAgICAgICAgaWYgKGl0ZW0uaXNIZWFkaW5nKCkpIHsKKyAgICAgICAgICAgIHNiLmFwcGVuZCgnLCcpOworICAgICAgICAgICAgc2IuYXBwZW5kKCJoZGciKTsKKyAgICAgICAgICB9CisKKyAgICAgICAgICBpZiAoQVBJVGVzdHMuaGF2ZUxvbGxpcG9wKSB7CisgICAgICAgICAgICBpZiAoaXRlbS5pc1NlbGVjdGVkKCkpIHsKKyAgICAgICAgICAgICAgc2IuYXBwZW5kKCcsJyk7CisgICAgICAgICAgICAgIHNiLmFwcGVuZCgic2VsIik7CisgICAgICAgICAgICB9CisgICAgICAgICAgfQorCisgICAgICAgICAgc2IuYXBwZW5kKCcpJyk7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoQVBJVGVzdHMuaGF2ZUxvbGxpcG9wKSB7CisgICAgICBmb3IgKEFjY2Vzc2liaWxpdHlOb2RlSW5mby5BY2Nlc3NpYmlsaXR5QWN0aW9uIGFjdGlvbiA6IG5vZGUuZ2V0QWN0aW9uTGlzdCgpKSB7CisgICAgICAgIFN0cmluZyBsYWJlbCA9IGFjdGlvbkxhYmVscy5nZXQoYWN0aW9uLmdldElkKCkpOworICAgICAgICBpZiAobGFiZWwgIT0gbnVsbCkgYWRkKHNiLCBsYWJlbCk7CisgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgIGludCBhY3Rpb25zID0gbm9kZS5nZXRBY3Rpb25zKCk7CisKKyAgICAgIGZvciAoSW50ZWdlciBhY3Rpb24gOiBhY3Rpb25MYWJlbHMua2V5U2V0KCkpIHsKKyAgICAgICAgaWYgKChhY3Rpb25zICYgYWN0aW9uKSAhPSAwKSB7CisgICAgICAgICAgYWRkKHNiLCBhY3Rpb25MYWJlbHMuZ2V0KGFjdGlvbikpOworICAgICAgICB9CisgICAgICB9CisgICAgfQorCisgICAgaWYgKEFQSVRlc3RzLmhhdmVKZWxseUJlYW5NUjEpIHsKKyAgICAgIEFjY2Vzc2liaWxpdHlOb2RlSW5mbyBzdWJub2RlID0gbm9kZS5nZXRMYWJlbEZvcigpOworCisgICAgICBpZiAoc3Vibm9kZSAhPSBudWxsKSB7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgYWRkKHNiLCAibGJmIiwgZ2V0VGV4dChzdWJub2RlKSk7CisgICAgICAgIH0gZmluYWxseSB7CisgICAgICAgICAgc3Vibm9kZS5yZWN5Y2xlKCk7CisgICAgICAgICAgc3Vibm9kZSA9IG51bGw7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoQVBJVGVzdHMuaGF2ZUplbGx5QmVhbk1SMSkgeworICAgICAgQWNjZXNzaWJpbGl0eU5vZGVJbmZvIHN1Ym5vZGUgPSBub2RlLmdldExhYmVsZWRCeSgpOworCisgICAgICBpZiAoc3Vibm9kZSAhPSBudWxsKSB7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgYWRkKHNiLCAibGJkIiwgZ2V0VGV4dChzdWJub2RlKSk7CisgICAgICAgIH0gZmluYWxseSB7CisgICAgICAgICAgc3Vibm9kZS5yZWN5Y2xlKCk7CisgICAgICAgICAgc3Vibm9kZSA9IG51bGw7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9CisKKyAgICB7CisgICAgICBSZWN0IGxvY2F0aW9uID0gbmV3IFJlY3QoKTsKKyAgICAgIG5vZGUuZ2V0Qm91bmRzSW5TY3JlZW4obG9jYXRpb24pOworICAgICAgYWRkKHNiLCBsb2NhdGlvbi50b1Nob3J0U3RyaW5nKCkpOworICAgIH0KKworICAgIGFkZChzYiwgIm9iaiIsIG5vZGUuZ2V0Q2xhc3NOYW1lKCkpOworICAgIGFkZChzYiwgInBrZyIsIG5vZGUuZ2V0UGFja2FnZU5hbWUoKSk7CisgICAgYWRkKHNiLCAid2luIiwgbm9kZS5nZXRXaW5kb3dJZCgpKTsKKworICAgIGlmIChBUElUZXN0cy5oYXZlSmVsbHlCZWFuTVIyKSB7CisgICAgICBhZGQoc2IsICJ2cm4iLCBub2RlLmdldFZpZXdJZFJlc291cmNlTmFtZSgpKTsKKyAgICB9CisKKyAgICB7CisgICAgICBDaGFyU2VxdWVuY2UgdGV4dCA9IG5vZGUuZ2V0VGV4dCgpOworCisgICAgICBpZiAodGV4dCBpbnN0YW5jZW9mIFNwYW5uZWQpIHsKKyAgICAgICAgU3Bhbm5lZCBzcGFubmVkID0gKFNwYW5uZWQpdGV4dDsKKyAgICAgICAgT2JqZWN0W10gc3BhbnMgPSBzcGFubmVkLmdldFNwYW5zKDAsIHNwYW5uZWQubGVuZ3RoKCksIE9iamVjdC5jbGFzcyk7CisKKyAgICAgICAgaWYgKHNwYW5zICE9IG51bGwpIHsKKyAgICAgICAgICBib29sZWFuIGZpcnN0ID0gdHJ1ZTsKKworICAgICAgICAgIGZvciAoT2JqZWN0IHNwYW4gOiBzcGFucykgeworICAgICAgICAgICAgaWYgKGZpcnN0KSB7CisgICAgICAgICAgICAgIGZpcnN0ID0gZmFsc2U7CisgICAgICAgICAgICAgIGFkZChzYiwgInNwYW5zOlsiKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgIHNiLmFwcGVuZCgiLCAiKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgc2IuYXBwZW5kKHNwYW4uZ2V0Q2xhc3MoKS5nZXRTaW1wbGVOYW1lKCkpCisgICAgICAgICAgICAgIC5hcHBlbmQoJygnKQorICAgICAgICAgICAgICAuYXBwZW5kKHNwYW5uZWQuZ2V0U3BhblN0YXJ0KHNwYW4pKQorICAgICAgICAgICAgICAuYXBwZW5kKCIuLiIpCisgICAgICAgICAgICAgIC5hcHBlbmQoc3Bhbm5lZC5nZXRTcGFuRW5kKHNwYW4pKQorICAgICAgICAgICAgICAuYXBwZW5kKCcpJykKKyAgICAgICAgICAgICAgOworICAgICAgICAgIH0KKworICAgICAgICAgIGlmICghZmlyc3QpIHNiLmFwcGVuZCgnXScpOworICAgICAgICB9CisgICAgICB9CisgICAgfQorCisgICAgaWYgKEFQSVRlc3RzLmhhdmVLaXRrYXQpIHsKKyAgICAgIEJ1bmRsZSBleHRyYXMgPSBub2RlLmdldEV4dHJhcygpOworCisgICAgICBpZiAoZXh0cmFzICE9IG51bGwpIHsKKyAgICAgICAgaWYgKGV4dHJhcy5zaXplKCkgPiAwKSB7CisgICAgICAgICAgYWRkKHNiLCAiZXh0cmFzOiAiKTsKKyAgICAgICAgICBzYi5hcHBlbmQoZXh0cmFzLnRvU3RyaW5nKCkpOworICAgICAgICB9CisgICAgICB9CisgICAgfQorCisgICAgaWYgKEFQSVRlc3RzLmhhdmVMb2xsaXBvcCkgeworICAgICAgTGlzdDxBY2Nlc3NpYmlsaXR5Tm9kZUluZm8uQWNjZXNzaWJpbGl0eUFjdGlvbj4gYWN0aW9ucyA9IG5vZGUuZ2V0QWN0aW9uTGlzdCgpOworCisgICAgICBpZiAoYWN0aW9ucyAhPSBudWxsKSB7CisgICAgICAgIGJvb2xlYW4gZmlyc3QgPSB0cnVlOworCisgICAgICAgIGZvciAoQWNjZXNzaWJpbGl0eU5vZGVJbmZvLkFjY2Vzc2liaWxpdHlBY3Rpb24gYWN0aW9uIDogYWN0aW9ucykgeworICAgICAgICAgIENoYXJTZXF1ZW5jZSBsYWJlbCA9IGFjdGlvbi5nZXRMYWJlbCgpOworICAgICAgICAgIGlmIChsYWJlbCA9PSBudWxsKSBjb250aW51ZTsKKyAgICAgICAgICBpZiAobGFiZWwubGVuZ3RoKCkgPT0gMCkgY29udGludWU7CisKKyAgICAgICAgICBpZiAoZmlyc3QpIHsKKyAgICAgICAgICAgIGZpcnN0ID0gZmFsc2U7CisgICAgICAgICAgICBhZGQoc2IsICJhY3Rpb25zOiIpOworICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBzYi5hcHBlbmQoJywnKTsKKyAgICAgICAgICB9CisKKyAgICAgICAgICBzYi5hcHBlbmQoJyAnKTsKKyAgICAgICAgICBzYi5hcHBlbmQobGFiZWwpOworICAgICAgICB9CisgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHNiLnRvU3RyaW5nKCk7CisgIH0KKworICBwcml2YXRlIGZpbmFsIHZvaWQgbG9nIChBY2Nlc3NpYmlsaXR5Tm9kZUluZm8gbm9kZSwgYm9vbGVhbiBkZXNjZW5kLCBTdHJpbmcgbmFtZSkgdGhyb3dzIElPRXhjZXB0aW9uIHsKKyAgICBsb2cobmFtZSwgdG9TdHJpbmcobm9kZSkpOworCisgICAgaWYgKGRlc2NlbmQpIHsKKyAgICAgIGludCBjaGlsZENvdW50ID0gbm9kZS5nZXRDaGlsZENvdW50KCk7CisKKyAgICAgIGZvciAoaW50IGNoaWxkSW5kZXg9MDsgY2hpbGRJbmRleDxjaGlsZENvdW50OyBjaGlsZEluZGV4Kz0xKSB7CisgICAgICAgIEFjY2Vzc2liaWxpdHlOb2RlSW5mbyBjaGlsZCA9IG5vZGUuZ2V0Q2hpbGQoY2hpbGRJbmRleCk7CisKKyAgICAgICAgaWYgKGNoaWxkICE9IG51bGwpIHsKKyAgICAgICAgICBsb2coY2hpbGQsIHRydWUsIChuYW1lICsgIi4iICsgY2hpbGRJbmRleCkpOworICAgICAgICAgIGNoaWxkLnJlY3ljbGUoKTsKKyAgICAgICAgICBjaGlsZCA9IG51bGw7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9CisgIH0KKworICBwdWJsaWMgZmluYWwgdm9pZCBsb2cgKEFjY2Vzc2liaWxpdHlOb2RlSW5mbyByb290LCBib29sZWFuIGRlc2NlbmQpIHRocm93cyBJT0V4Y2VwdGlvbiB7CisgICAgaWYgKGRlc2NlbmQpIGxvZygiYmVnaW4gbm9kZSB0cmVlIik7CisKKyAgICB0cnkgeworICAgICAgbG9nKHJvb3QsIGRlc2NlbmQsICJyb290Iik7CisgICAgfSBmaW5hbGx5IHsKKyAgICAgIGlmIChkZXNjZW5kKSBsb2coImVuZCBub2RlIHRyZWUiKTsKKyAgICB9CisgIH0KKworICBwdWJsaWMgZmluYWwgdm9pZCBsb2cgKEFjY2Vzc2liaWxpdHlOb2RlSW5mbyByb290KSB0aHJvd3MgSU9FeGNlcHRpb24geworICAgIGxvZyhyb290LCB0cnVlKTsKKyAgfQorCisgIHByaXZhdGUgZmluYWwgc3RhdGljIE1hcDxJbnRlZ2VyLCBTdHJpbmc+IHdpbmRvd1R5cGVOYW1lcyA9CisgICAgICAgICAgICAgICBuZXcgSGFzaE1hcDxJbnRlZ2VyLCBTdHJpbmc+KCkKKyAgeworICAgIHsKKyAgICAgIGlmIChBUElUZXN0cy5oYXZlTG9sbGlwb3ApIHsKKyAgICAgICAgcHV0KEFjY2Vzc2liaWxpdHlXaW5kb3dJbmZvLlRZUEVfU1lTVEVNLCAic3lzIik7CisgICAgICAgIHB1dChBY2Nlc3NpYmlsaXR5V2luZG93SW5mby5UWVBFX0FQUExJQ0FUSU9OLCAiYXBwIik7CisgICAgICAgIHB1dChBY2Nlc3NpYmlsaXR5V2luZG93SW5mby5UWVBFX0lOUFVUX01FVEhPRCwgImltZSIpOworICAgICAgfQorCisgICAgICBpZiAoQVBJVGVzdHMuaGF2ZU1hcnNobWFsbG93KSB7CisgICAgICAgIHB1dChBY2Nlc3NpYmlsaXR5V2luZG93SW5mby5UWVBFX0FDQ0VTU0lCSUxJVFlfT1ZFUkxBWSwgImFjYyIpOworICAgICAgfQorCisgICAgICBpZiAoQVBJVGVzdHMuaGF2ZU5vdWdhdCkgeworICAgICAgICBwdXQoQWNjZXNzaWJpbGl0eVdpbmRvd0luZm8uVFlQRV9TUExJVF9TQ1JFRU5fRElWSURFUiwgInNzZCIpOworICAgICAgfQorICAgIH0KKyAgfTsKKworICBwdWJsaWMgc3RhdGljIFN0cmluZyB0b1N0cmluZyAoQWNjZXNzaWJpbGl0eVdpbmRvd0luZm8gd2luZG93KSB7CisgICAgU3RyaW5nQnVpbGRlciBzYiA9IG5ldyBTdHJpbmdCdWlsZGVyKCk7CisKKyAgICBpZiAoQVBJVGVzdHMuaGF2ZUxvbGxpcG9wKSB7CisgICAgICBhZGQoc2IsICJpZCIsIHdpbmRvdy5nZXRJZCgpKTsKKyAgICB9CisKKyAgICBpZiAoQVBJVGVzdHMuaGF2ZU5vdWdhdCkgeworICAgICAgYWRkVGV4dChzYiwgd2luZG93LmdldFRpdGxlKCksIG51bGwpOworICAgIH0KKworICAgIGlmIChBUElUZXN0cy5oYXZlTG9sbGlwb3ApIHsKKyAgICAgIEFjY2Vzc2liaWxpdHlXaW5kb3dJbmZvIHBhcmVudCA9IHdpbmRvdy5nZXRQYXJlbnQoKTsKKworICAgICAgaWYgKHBhcmVudCAhPSBudWxsKSB7CisgICAgICAgIHBhcmVudC5yZWN5Y2xlKCk7CisgICAgICAgIHBhcmVudCA9IG51bGw7CisgICAgICB9IGVsc2UgeworICAgICAgICBhZGQoc2IsICJyb290Iik7CisgICAgICB9CisgICAgfQorCisgICAgaWYgKEFQSVRlc3RzLmhhdmVMb2xsaXBvcCkgeworICAgICAgaW50IGNvdW50ID0gd2luZG93LmdldENoaWxkQ291bnQoKTsKKyAgICAgIGlmIChjb3VudCA+IDApIGFkZChzYiwgImNsZCIsIGNvdW50KTsKKyAgICB9CisKKyAgICBpZiAoQVBJVGVzdHMuaGF2ZUxvbGxpcG9wKSB7CisgICAgICBhZGQoc2IsICJ0eXBlIiwgd2luZG93LmdldFR5cGUoKSwgd2luZG93VHlwZU5hbWVzKTsKKyAgICAgIGFkZChzYiwgImxheWVyIiwgd2luZG93LmdldExheWVyKCkpOworICAgICAgYWRkKHNiLCB3aW5kb3cuaXNBY3RpdmUoKSwgImFjdCIpOworICAgICAgYWRkKHNiLCB3aW5kb3cuaXNGb2N1c2VkKCksICJpZmQiKTsKKyAgICAgIGFkZChzYiwgd2luZG93LmlzQWNjZXNzaWJpbGl0eUZvY3VzZWQoKSwgImFmZCIpOworICAgIH0KKworICAgIGlmIChBUElUZXN0cy5oYXZlT3JlbykgeworICAgICAgYWRkKHNiLCB3aW5kb3cuaXNJblBpY3R1cmVJblBpY3R1cmVNb2RlKCksICJwaXAiKTsKKyAgICB9CisKKyAgICBpZiAoQVBJVGVzdHMuaGF2ZUxvbGxpcG9wKSB7CisgICAgICBSZWN0IGxvY2F0aW9uID0gbmV3IFJlY3QoKTsKKyAgICAgIHdpbmRvdy5nZXRCb3VuZHNJblNjcmVlbihsb2NhdGlvbik7CisgICAgICBhZGQoc2IsIGxvY2F0aW9uLnRvU2hvcnRTdHJpbmcoKSk7CisgICAgfQorCisgICAgcmV0dXJuIHNiLnRvU3RyaW5nKCk7CisgIH0KKworICBwcml2YXRlIGZpbmFsIHZvaWQgbG9nIChBY2Nlc3NpYmlsaXR5V2luZG93SW5mbyB3aW5kb3csIFN0cmluZyBuYW1lLCBib29sZWFuIGRlc2NlbmQsIGJvb2xlYW4gbm9kZXMpIHRocm93cyBJT0V4Y2VwdGlvbiB7CisgICAgbG9nKG5hbWUsIHRvU3RyaW5nKHdpbmRvdykpOworCisgICAgaWYgKG5vZGVzKSB7CisgICAgICBpZiAoQVBJVGVzdHMuaGF2ZUxvbGxpcG9wKSB7CisgICAgICAgIEFjY2Vzc2liaWxpdHlOb2RlSW5mbyByb290ID0gd2luZG93LmdldFJvb3QoKTsKKworICAgICAgICBpZiAocm9vdCAhPSBudWxsKSB7CisgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIGxvZyhyb290KTsKKyAgICAgICAgICB9IGZpbmFsbHkgeworICAgICAgICAgICAgcm9vdC5yZWN5Y2xlKCk7CisgICAgICAgICAgICByb290ID0gbnVsbDsKKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoZGVzY2VuZCkgeworICAgICAgaWYgKEFQSVRlc3RzLmhhdmVMb2xsaXBvcCkgeworICAgICAgICBpbnQgY2hpbGRDb3VudCA9IHdpbmRvdy5nZXRDaGlsZENvdW50KCk7CisKKyAgICAgICAgZm9yIChpbnQgY2hpbGRJbmRleD0wOyBjaGlsZEluZGV4PGNoaWxkQ291bnQ7IGNoaWxkSW5kZXgrPTEpIHsKKyAgICAgICAgICBBY2Nlc3NpYmlsaXR5V2luZG93SW5mbyBjaGlsZCA9IHdpbmRvdy5nZXRDaGlsZChjaGlsZEluZGV4KTsKKworICAgICAgICAgIGlmIChjaGlsZCAhPSBudWxsKSB7CisgICAgICAgICAgICBsb2coY2hpbGQsIChuYW1lICsgJy4nICsgY2hpbGRJbmRleCksIHRydWUsIG5vZGVzKTsKKyAgICAgICAgICAgIGNoaWxkLnJlY3ljbGUoKTsKKyAgICAgICAgICAgIGNoaWxkID0gbnVsbDsKKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9CisgIH0KKworICBwdWJsaWMgZmluYWwgdm9pZCBsb2cgKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKKyAgICBsb2coImJlZ2luIHNjcmVlbiBsb2ciKTsKKworICAgIGlmIChBUElUZXN0cy5oYXZlTG9sbGlwb3ApIHsKKyAgICAgIGludCBpbmRleCA9IDA7CisKKyAgICAgIGZvciAoQWNjZXNzaWJpbGl0eVdpbmRvd0luZm8gd2luZG93IDogU2NyZWVuVXRpbGl0aWVzLmdldFdpbmRvd3MoKSkgeworICAgICAgICBsb2cod2luZG93LCAoIndpbmRvdy4iICsgaW5kZXgpLCB0cnVlLCB0cnVlKTsKKyAgICAgICAgaW5kZXggKz0gMTsKKyAgICAgIH0KKyAgICB9IGVsc2UgaWYgKEFQSVRlc3RzLmhhdmVKZWxseUJlYW4pIHsKKyAgICAgIEFjY2Vzc2liaWxpdHlOb2RlSW5mbyByb290ID0gU2NyZWVuVXRpbGl0aWVzLmdldFJvb3ROb2RlKCk7CisKKyAgICAgIGlmIChyb290ICE9IG51bGwpIHsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICBsb2cocm9vdCk7CisgICAgICAgIH0gZmluYWxseSB7CisgICAgICAgICAgcm9vdC5yZWN5Y2xlKCk7CisgICAgICAgICAgcm9vdCA9IG51bGw7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9CisKKyAgICBsb2coImVuZCBzY3JlZW4gbG9nIik7CisgIH0KKworICBwdWJsaWMgc3RhdGljIHZvaWQgbG9nVG9GaWxlIChGaWxlIGZpbGUpIHsKKyAgICBTdHJpbmcgcGF0aCA9IGZpbGUuZ2V0QWJzb2x1dGVQYXRoKCk7CisgICAgTG9nLmQoTE9HX1RBRywgKCJsb2dnaW5nIHNjcmVlbiB0byBmaWxlOiAiICsgcGF0aCkpOworCisgICAgdHJ5IHsKKyAgICAgIE91dHB1dFN0cmVhbSBzdHJlYW0gPSBuZXcgRmlsZU91dHB1dFN0cmVhbShmaWxlKTsKKworICAgICAgdHJ5IHsKKyAgICAgICAgZmluYWwgV3JpdGVyIHdyaXRlciA9IG5ldyBPdXRwdXRTdHJlYW1Xcml0ZXIoc3RyZWFtLCAiVVRGLTgiKTsKKworICAgICAgICB0cnkgeworICAgICAgICAgIG5ldyBTY3JlZW5Mb2dnZXIoKSB7CisgICAgICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgICAgIHByb3RlY3RlZCB2b2lkIGxvZyAoU3RyaW5nIG1lc3NhZ2UpIHRocm93cyBJT0V4Y2VwdGlvbiB7CisgICAgICAgICAgICAgIHdyaXRlci53cml0ZShtZXNzYWdlKTsKKyAgICAgICAgICAgICAgd3JpdGVyLndyaXRlKCdcbicpOworICAgICAgICAgICAgfQorICAgICAgICAgIH0ubG9nKCk7CisgICAgICAgIH0gZmluYWxseSB7CisgICAgICAgICAgd3JpdGVyLmNsb3NlKCk7CisgICAgICAgIH0KKyAgICAgIH0gZmluYWxseSB7CisgICAgICAgIHN0cmVhbS5jbG9zZSgpOworICAgICAgfQorICAgIH0gY2F0Y2ggKEZpbGVOb3RGb3VuZEV4Y2VwdGlvbiBleGNlcHRpb24pIHsKKyAgICAgIExvZy53KExPR19UQUcsICgiZmlsZSBub3QgZm91bmQ6ICIgKyBwYXRoKSk7CisgICAgfSBjYXRjaCAoSU9FeGNlcHRpb24gZXhjZXB0aW9uKSB7CisgICAgICBMb2cudyhMT0dfVEFHLCBTdHJpbmcuZm9ybWF0KCJsb2cgZmlsZSBlcnJvcjogJXM6ICVzIiwgcGF0aCwgZXhjZXB0aW9uLmdldE1lc3NhZ2UoKSkpOworICAgIH0KKyAgfQorCisgIHB1YmxpYyBzdGF0aWMgdm9pZCBsb2dUb0ZpbGUgKFN0cmluZyBwYXRoKSB7CisgICAgbG9nVG9GaWxlKG5ldyBGaWxlKHBhdGgpKTsKKyAgfQorCisgIHB1YmxpYyBzdGF0aWMgRmlsZSBsb2dUb0ZpbGUgKCkgeworICAgIEZpbGUgZGlyZWN0b3J5ID0gQnJhaWxsZUFwcGxpY2F0aW9uLmdldCgpLmdldEV4dGVybmFsRmlsZXNEaXIobnVsbCk7CisgICAgRmlsZSBmaWxlID0gbmV3IEZpbGUoZGlyZWN0b3J5LCAic2NyZWVuLmxvZyIpOworCisgICAgbG9nVG9GaWxlKGZpbGUpOworICAgIHJldHVybiBmaWxlOworICB9Cit9CmRpZmYgLS1naXQgYS9BbmRyb2lkL0dyYWRsZS9hcHAvc3JjL21haW4vamF2YS9vcmcvYTExeS9icmx0dHkvYW5kcm9pZC9TY3JlZW5VdGlsaXRpZXMuamF2YSBiL0FuZHJvaWQvR3JhZGxlL2FwcC9zcmMvbWFpbi9qYXZhL29yZy9hMTF5L2JybHR0eS9hbmRyb2lkL1NjcmVlblV0aWxpdGllcy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU3ZTJhNzgKLS0tIC9kZXYvbnVsbAorKysgYi9BbmRyb2lkL0dyYWRsZS9hcHAvc3JjL21haW4vamF2YS9vcmcvYTExeS9icmx0dHkvYW5kcm9pZC9TY3JlZW5VdGlsaXRpZXMuamF2YQpAQCAtMCwwICsxLDU0NiBAQAorLyoKKyAqIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisgKiAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisgKgorICogQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKK3BhY2thZ2Ugb3JnLmExMXkuYnJsdHR5LmFuZHJvaWQ7CisKK2ltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLlJlY3Q7CitpbXBvcnQgYW5kcm9pZC5vcy5CdW5kbGU7CitpbXBvcnQgYW5kcm9pZC52aWV3LmFjY2Vzc2liaWxpdHkuQWNjZXNzaWJpbGl0eU5vZGVJbmZvOworaW1wb3J0IGFuZHJvaWQudmlldy5hY2Nlc3NpYmlsaXR5LkFjY2Vzc2liaWxpdHlXaW5kb3dJbmZvOworaW1wb3J0IGFuZHJvaWQud2Via2l0LldlYlZpZXc7CitpbXBvcnQgamF2YS51dGlsLkFycmF5czsKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbnM7CitpbXBvcnQgamF2YS51dGlsLkNvbXBhcmF0b3I7CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKK3B1YmxpYyBhYnN0cmFjdCBjbGFzcyBTY3JlZW5VdGlsaXRpZXMgeworICBwcml2YXRlIFNjcmVlblV0aWxpdGllcyAoKSB7CisgIH0KKworICBwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRDbGFzc1BhdGggKEFjY2Vzc2liaWxpdHlOb2RlSW5mbyBub2RlKSB7CisgICAgQ2hhclNlcXVlbmNlIHBhdGggPSBub2RlLmdldENsYXNzTmFtZSgpOworICAgIGlmIChwYXRoID09IG51bGwpIHJldHVybiBudWxsOworICAgIHJldHVybiBwYXRoLnRvU3RyaW5nKCk7CisgIH0KKworICBwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRDbGFzc05hbWUgKEFjY2Vzc2liaWxpdHlOb2RlSW5mbyBub2RlKSB7CisgICAgU3RyaW5nIHBhdGggPSBnZXRDbGFzc1BhdGgobm9kZSk7CisgICAgaWYgKHBhdGggPT0gbnVsbCkgcmV0dXJuIG51bGw7CisKKyAgICBpbnQgaW5kZXggPSBwYXRoLmxhc3RJbmRleE9mKCcuJyk7CisgICAgcmV0dXJuIHBhdGguc3Vic3RyaW5nKGluZGV4KzEpOworICB9CisKKyAgcHVibGljIHN0YXRpYyBBY2Nlc3NpYmlsaXR5Tm9kZUluZm8gZ2V0UmVmcmVzaGVkTm9kZSAoQWNjZXNzaWJpbGl0eU5vZGVJbmZvIG5vZGUpIHsKKyAgICBpZiAobm9kZSAhPSBudWxsKSB7CisgICAgICBpZiAoQVBJVGVzdHMuaGF2ZUplbGx5QmVhbk1SMikgeworICAgICAgICBub2RlID0gQWNjZXNzaWJpbGl0eU5vZGVJbmZvLm9idGFpbihub2RlKTsKKworICAgICAgICBpZiAoIW5vZGUucmVmcmVzaCgpKSB7CisgICAgICAgICAgbm9kZS5yZWN5Y2xlKCk7CisgICAgICAgICAgbm9kZSA9IG51bGw7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gbm9kZTsKKyAgICAgIH0KKworICAgICAgeworICAgICAgICBpbnQgY2hpbGRDb3VudCA9IG5vZGUuZ2V0Q2hpbGRDb3VudCgpOworCisgICAgICAgIGZvciAoaW50IGNoaWxkSW5kZXg9MDsgY2hpbGRJbmRleDxjaGlsZENvdW50OyBjaGlsZEluZGV4Kz0xKSB7CisgICAgICAgICAgQWNjZXNzaWJpbGl0eU5vZGVJbmZvIGNoaWxkID0gbm9kZS5nZXRDaGlsZChjaGlsZEluZGV4KTsKKworICAgICAgICAgIGlmIChjaGlsZCAhPSBudWxsKSB7CisgICAgICAgICAgICBBY2Nlc3NpYmlsaXR5Tm9kZUluZm8gcGFyZW50ID0gY2hpbGQuZ2V0UGFyZW50KCk7CisKKyAgICAgICAgICAgIGNoaWxkLnJlY3ljbGUoKTsKKyAgICAgICAgICAgIGNoaWxkID0gbnVsbDsKKworICAgICAgICAgICAgaWYgKG5vZGUuZXF1YWxzKHBhcmVudCkpIHsKKyAgICAgICAgICAgICAgcmV0dXJuIHBhcmVudDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKHBhcmVudCAhPSBudWxsKSB7CisgICAgICAgICAgICAgIHBhcmVudC5yZWN5Y2xlKCk7CisgICAgICAgICAgICAgIHBhcmVudCA9IG51bGw7CisgICAgICAgICAgICB9CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICB9CisKKyAgICAgIHsKKyAgICAgICAgQWNjZXNzaWJpbGl0eU5vZGVJbmZvIHBhcmVudCA9IG5vZGUuZ2V0UGFyZW50KCk7CisKKyAgICAgICAgaWYgKHBhcmVudCAhPSBudWxsKSB7CisgICAgICAgICAgaW50IGNoaWxkQ291bnQgPSBwYXJlbnQuZ2V0Q2hpbGRDb3VudCgpOworCisgICAgICAgICAgZm9yIChpbnQgY2hpbGRJbmRleD0wOyBjaGlsZEluZGV4PGNoaWxkQ291bnQ7IGNoaWxkSW5kZXgrPTEpIHsKKyAgICAgICAgICAgIEFjY2Vzc2liaWxpdHlOb2RlSW5mbyBjaGlsZCA9IHBhcmVudC5nZXRDaGlsZChjaGlsZEluZGV4KTsKKworICAgICAgICAgICAgaWYgKG5vZGUuZXF1YWxzKGNoaWxkKSkgeworICAgICAgICAgICAgICBwYXJlbnQucmVjeWNsZSgpOworICAgICAgICAgICAgICBwYXJlbnQgPSBudWxsOworICAgICAgICAgICAgICByZXR1cm4gY2hpbGQ7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChjaGlsZCAhPSBudWxsKSB7CisgICAgICAgICAgICAgIGNoaWxkLnJlY3ljbGUoKTsKKyAgICAgICAgICAgICAgY2hpbGQgPSBudWxsOworICAgICAgICAgICAgfQorICAgICAgICAgIH0KKworICAgICAgICAgIHBhcmVudC5yZWN5Y2xlKCk7CisgICAgICAgICAgcGFyZW50ID0gbnVsbDsKKyAgICAgICAgfQorICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBudWxsOworICB9CisKKyAgcHVibGljIHN0YXRpYyBib29sZWFuIGlzVmlzaWJsZSAoQWNjZXNzaWJpbGl0eU5vZGVJbmZvIG5vZGUpIHsKKyAgICBpZiAoQVBJVGVzdHMuaGF2ZUplbGx5QmVhbikgeworICAgICAgcmV0dXJuIG5vZGUuaXNWaXNpYmxlVG9Vc2VyKCk7CisgICAgfQorCisgICAgUmVjdCBsb2NhdGlvbiA9IG5ldyBSZWN0KCk7CisgICAgbm9kZS5nZXRCb3VuZHNJblNjcmVlbihsb2NhdGlvbik7CisgICAgcmV0dXJuIFNjcmVlbkRyaXZlci5nZXRDdXJyZW50U2NyZWVuV2luZG93KCkuY29udGFpbnMobG9jYXRpb24pOworICB9CisKKyAgcHVibGljIHN0YXRpYyBib29sZWFuIGlzU3ViY2xhc3NPZiAoQWNjZXNzaWJpbGl0eU5vZGVJbmZvIG5vZGUsIENsYXNzIHR5cGUpIHsKKyAgICBTdHJpbmcgcGF0aCA9IGdldENsYXNzUGF0aChub2RlKTsKKyAgICBpZiAocGF0aCA9PSBudWxsKSByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIExhbmd1YWdlVXRpbGl0aWVzLmNhbkFzc2lnbih0eXBlLCBwYXRoKTsKKyAgfQorCisgIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBpc0NoZWNrQm94IChBY2Nlc3NpYmlsaXR5Tm9kZUluZm8gbm9kZSkgeworICAgIHJldHVybiBpc1N1YmNsYXNzT2Yobm9kZSwgYW5kcm9pZC53aWRnZXQuQ2hlY2tCb3guY2xhc3MpOworICB9CisKKyAgcHVibGljIHN0YXRpYyBib29sZWFuIGlzU3dpdGNoIChBY2Nlc3NpYmlsaXR5Tm9kZUluZm8gbm9kZSkgeworICAgIHJldHVybiBpc1N1YmNsYXNzT2Yobm9kZSwgYW5kcm9pZC53aWRnZXQuU3dpdGNoLmNsYXNzKTsKKyAgfQorCisgIHB1YmxpYyBzdGF0aWMgaW50IGdldFNlbGVjdGlvbk1vZGUgKEFjY2Vzc2liaWxpdHlOb2RlSW5mbyBub2RlKSB7CisgICAgaWYgKEFQSVRlc3RzLmhhdmVMb2xsaXBvcCkgeworICAgICAgaWYgKG5vZGUuZ2V0Q29sbGVjdGlvbkl0ZW1JbmZvKCkgIT0gbnVsbCkgeworICAgICAgICBBY2Nlc3NpYmlsaXR5Tm9kZUluZm8gcGFyZW50ID0gbm9kZS5nZXRQYXJlbnQoKTsKKworICAgICAgICBpZiAocGFyZW50ICE9IG51bGwpIHsKKyAgICAgICAgICB0cnkgeworICAgICAgICAgICAgQWNjZXNzaWJpbGl0eU5vZGVJbmZvLkNvbGxlY3Rpb25JbmZvIGNvbGxlY3Rpb24gPSBwYXJlbnQuZ2V0Q29sbGVjdGlvbkluZm8oKTsKKworICAgICAgICAgICAgaWYgKGNvbGxlY3Rpb24gIT0gbnVsbCkgeworICAgICAgICAgICAgICByZXR1cm4gY29sbGVjdGlvbi5nZXRTZWxlY3Rpb25Nb2RlKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgfSBmaW5hbGx5IHsKKyAgICAgICAgICAgIHBhcmVudC5yZWN5Y2xlKCk7CisgICAgICAgICAgICBwYXJlbnQgPSBudWxsOworICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBub2RlLmlzQ2hlY2thYmxlKCk/CisgICAgICAgICAgIC8vbm9pbnNwZWN0aW9uIElubGluZWRBcGkKKyAgICAgICAgICAgQWNjZXNzaWJpbGl0eU5vZGVJbmZvLkNvbGxlY3Rpb25JbmZvLlNFTEVDVElPTl9NT0RFX01VTFRJUExFOgorICAgICAgICAgICAvL25vaW5zcGVjdGlvbiBJbmxpbmVkQXBpCisgICAgICAgICAgIEFjY2Vzc2liaWxpdHlOb2RlSW5mby5Db2xsZWN0aW9uSW5mby5TRUxFQ1RJT05fTU9ERV9OT05FOworICB9CisKKyAgcHVibGljIHN0YXRpYyBib29sZWFuIGhhc1NlbGVjdGlvbk1vZGUgKEFjY2Vzc2liaWxpdHlOb2RlSW5mbyBpdGVtLCBpbnQgbW9kZSkgeworICAgIHJldHVybiBnZXRTZWxlY3Rpb25Nb2RlKGl0ZW0pID09IG1vZGU7CisgIH0KKworICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gaXNSYWRpb0J1dHRvbiAoQWNjZXNzaWJpbGl0eU5vZGVJbmZvIG5vZGUpIHsKKyAgICBpZiAoaGFzU2VsZWN0aW9uTW9kZShub2RlLCBBY2Nlc3NpYmlsaXR5Tm9kZUluZm8uQ29sbGVjdGlvbkluZm8uU0VMRUNUSU9OX01PREVfU0lOR0xFKSkgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIGlzU3ViY2xhc3NPZihub2RlLCBhbmRyb2lkLndpZGdldC5SYWRpb0J1dHRvbi5jbGFzcyk7CisgIH0KKworICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gaXNFZGl0YWJsZSAoQWNjZXNzaWJpbGl0eU5vZGVJbmZvIG5vZGUpIHsKKyAgICBpZiAoQVBJVGVzdHMuaGF2ZUplbGx5QmVhbk1SMikgeworICAgICAgcmV0dXJuIG5vZGUuaXNFZGl0YWJsZSgpOworICAgIH0gZWxzZSB7CisgICAgICByZXR1cm4gaXNTdWJjbGFzc09mKG5vZGUsIGFuZHJvaWQud2lkZ2V0LkVkaXRUZXh0LmNsYXNzKTsKKyAgICB9CisgIH0KKworICBwdWJsaWMgc3RhdGljIFN0cmluZyBub3JtYWxpemVUZXh0IChDaGFyU2VxdWVuY2UgdGV4dCkgeworICAgIGlmICh0ZXh0ICE9IG51bGwpIHsKKyAgICAgIFN0cmluZyBzdHJpbmcgPSB0ZXh0LnRvU3RyaW5nKCkudHJpbSgpOworICAgICAgaWYgKHN0cmluZy5sZW5ndGgoKSA+IDApIHJldHVybiBzdHJpbmc7CisgICAgfQorCisgICAgcmV0dXJuIG51bGw7CisgIH0KKworICBwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRUZXh0IChBY2Nlc3NpYmlsaXR5Tm9kZUluZm8gbm9kZSkgeworICAgIENoYXJTZXF1ZW5jZSB0ZXh0ID0gbnVsbDsKKworICAgIHsKKyAgICAgIFRleHRGaWVsZCBmaWVsZCA9IFRleHRGaWVsZC5nZXQobm9kZSk7CisKKyAgICAgIGlmIChmaWVsZCAhPSBudWxsKSB7CisgICAgICAgIHN5bmNocm9uaXplZCAoZmllbGQpIHsKKyAgICAgICAgICB0ZXh0ID0gZmllbGQuZ2V0QWNjZXNzaWJpbGl0eVRleHQoKTsKKyAgICAgICAgfQorICAgICAgfQorICAgIH0KKworICAgIGlmICh0ZXh0ID09IG51bGwpIHRleHQgPSBub2RlLmdldFRleHQoKTsKKyAgICBpZiAoIWlzRWRpdGFibGUobm9kZSkpIHJldHVybiBub3JtYWxpemVUZXh0KHRleHQpOworCisgICAgaWYgKHRleHQgPT0gbnVsbCkgcmV0dXJuICIiOworICAgIHJldHVybiB0ZXh0LnRvU3RyaW5nKCk7CisgIH0KKworICBwdWJsaWMgc3RhdGljIFN0cmluZyBnZXREZXNjcmlwdGlvbiAoQWNjZXNzaWJpbGl0eU5vZGVJbmZvIG5vZGUpIHsKKyAgICByZXR1cm4gbm9ybWFsaXplVGV4dChub2RlLmdldENvbnRlbnREZXNjcmlwdGlvbigpKTsKKyAgfQorCisgIHB1YmxpYyBzdGF0aWMgQWNjZXNzaWJpbGl0eU5vZGVJbmZvIGdldFJvb3ROb2RlICgpIHsKKyAgICBpZiAoQVBJVGVzdHMuaGF2ZUplbGx5QmVhbikgeworICAgICAgcmV0dXJuIEJyYWlsbGVTZXJ2aWNlLmdldEJyYWlsbGVTZXJ2aWNlKCkuZ2V0Um9vdEluQWN0aXZlV2luZG93KCk7CisgICAgfQorCisgICAgcmV0dXJuIG51bGw7CisgIH0KKworICBwdWJsaWMgc3RhdGljIEFjY2Vzc2liaWxpdHlOb2RlSW5mbyBmaW5kQ29udGFpbmluZ05vZGUgKEFjY2Vzc2liaWxpdHlOb2RlSW5mbyBub2RlLCBOb2RlVGVzdGVyIHRlc3RlcikgeworICAgIGlmIChub2RlID09IG51bGwpIHJldHVybiBudWxsOworICAgIG5vZGUgPSBBY2Nlc3NpYmlsaXR5Tm9kZUluZm8ub2J0YWluKG5vZGUpOworICAgIGJvb2xlYW4gaGF2ZVRlc3RlciA9IHRlc3RlciAhPSBudWxsOworCisgICAgd2hpbGUgKHRydWUpIHsKKyAgICAgIGlmIChoYXZlVGVzdGVyICYmIHRlc3Rlci50ZXN0Tm9kZShub2RlKSkgcmV0dXJuIG5vZGU7CisKKyAgICAgIEFjY2Vzc2liaWxpdHlOb2RlSW5mbyBwYXJlbnQgPSBub2RlLmdldFBhcmVudCgpOworICAgICAgYm9vbGVhbiBhdFJvb3QgPSBwYXJlbnQgPT0gbnVsbDsKKworICAgICAgaWYgKGF0Um9vdCAmJiAhaGF2ZVRlc3RlcikgcmV0dXJuIG5vZGU7CisgICAgICBub2RlLnJlY3ljbGUoKTsKKyAgICAgIGlmIChhdFJvb3QpIHJldHVybiBudWxsOworCisgICAgICBub2RlID0gcGFyZW50OworICAgICAgcGFyZW50ID0gbnVsbDsKKyAgICB9CisgIH0KKworICBwdWJsaWMgc3RhdGljIEFjY2Vzc2liaWxpdHlOb2RlSW5mbyBmaW5kUm9vdE5vZGUgKEFjY2Vzc2liaWxpdHlOb2RlSW5mbyBub2RlKSB7CisgICAgcmV0dXJuIGZpbmRDb250YWluaW5nTm9kZShub2RlLCBudWxsKTsKKyAgfQorCisgIHB1YmxpYyBzdGF0aWMgQWNjZXNzaWJpbGl0eU5vZGVJbmZvIGZpbmRDb250YWluaW5nV2ViVmlldyAoQWNjZXNzaWJpbGl0eU5vZGVJbmZvIG5vZGUpIHsKKyAgICBOb2RlVGVzdGVyIHRlc3RlciA9IG5ldyBOb2RlVGVzdGVyKCkgeworICAgICAgQE92ZXJyaWRlCisgICAgICBwdWJsaWMgYm9vbGVhbiB0ZXN0Tm9kZSAoQWNjZXNzaWJpbGl0eU5vZGVJbmZvIG5vZGUpIHsKKyAgICAgICAgcmV0dXJuIGlzU3ViY2xhc3NPZihub2RlLCBXZWJWaWV3LmNsYXNzKTsKKyAgICAgIH0KKyAgICB9OworCisgICAgcmV0dXJuIGZpbmRDb250YWluaW5nTm9kZShub2RlLCB0ZXN0ZXIpOworICB9CisKKyAgcHVibGljIHN0YXRpYyBBY2Nlc3NpYmlsaXR5Tm9kZUluZm8gZmluZENvbnRhaW5pbmdBY2Nlc3NpYmlsaXR5Rm9jdXMgKEFjY2Vzc2liaWxpdHlOb2RlSW5mbyBub2RlKSB7CisgICAgTm9kZVRlc3RlciB0ZXN0ZXIgPSBuZXcgTm9kZVRlc3RlcigpIHsKKyAgICAgIEBPdmVycmlkZQorICAgICAgcHVibGljIGJvb2xlYW4gdGVzdE5vZGUgKEFjY2Vzc2liaWxpdHlOb2RlSW5mbyBub2RlKSB7CisgICAgICAgIHJldHVybiBub2RlLmlzQWNjZXNzaWJpbGl0eUZvY3VzZWQoKTsKKyAgICAgIH0KKyAgICB9OworCisgICAgcmV0dXJuIGZpbmRDb250YWluaW5nTm9kZShub2RlLCB0ZXN0ZXIpOworICB9CisKKyAgcHVibGljIHN0YXRpYyBBY2Nlc3NpYmlsaXR5Tm9kZUluZm8gZmluZE5vZGUgKEFjY2Vzc2liaWxpdHlOb2RlSW5mbyByb290LCBOb2RlVGVzdGVyIHRlc3RlcikgeworICAgIGlmIChyb290ICE9IG51bGwpIHsKKyAgICAgIGlmIChpc1Zpc2libGUocm9vdCkpIHsKKyAgICAgICAgaWYgKHRlc3Rlci50ZXN0Tm9kZShyb290KSkgeworICAgICAgICAgIHJldHVybiBBY2Nlc3NpYmlsaXR5Tm9kZUluZm8ub2J0YWluKHJvb3QpOworICAgICAgICB9CisgICAgICB9CisKKyAgICAgIHsKKyAgICAgICAgaW50IGNoaWxkQ291bnQgPSByb290LmdldENoaWxkQ291bnQoKTsKKworICAgICAgICBmb3IgKGludCBjaGlsZEluZGV4PTA7IGNoaWxkSW5kZXg8Y2hpbGRDb3VudDsgY2hpbGRJbmRleCs9MSkgeworICAgICAgICAgIEFjY2Vzc2liaWxpdHlOb2RlSW5mbyBjaGlsZCA9IHJvb3QuZ2V0Q2hpbGQoY2hpbGRJbmRleCk7CisKKyAgICAgICAgICBpZiAoY2hpbGQgIT0gbnVsbCkgeworICAgICAgICAgICAgQWNjZXNzaWJpbGl0eU5vZGVJbmZvIG5vZGUgPSBmaW5kTm9kZShjaGlsZCwgdGVzdGVyKTsKKyAgICAgICAgICAgIGNoaWxkLnJlY3ljbGUoKTsKKyAgICAgICAgICAgIGNoaWxkID0gbnVsbDsKKyAgICAgICAgICAgIGlmIChub2RlICE9IG51bGwpIHJldHVybiBub2RlOworICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBudWxsOworICB9CisKKyAgcHVibGljIHN0YXRpYyBBY2Nlc3NpYmlsaXR5Tm9kZUluZm8gZmluZFNlbGVjdGVkTm9kZSAoQWNjZXNzaWJpbGl0eU5vZGVJbmZvIHJvb3QpIHsKKyAgICBOb2RlVGVzdGVyIHRlc3RlciA9IG5ldyBOb2RlVGVzdGVyKCkgeworICAgICAgQE92ZXJyaWRlCisgICAgICBwdWJsaWMgYm9vbGVhbiB0ZXN0Tm9kZSAoQWNjZXNzaWJpbGl0eU5vZGVJbmZvIG5vZGUpIHsKKyAgICAgICAgcmV0dXJuIG5vZGUuaXNTZWxlY3RlZCgpOworICAgICAgfQorICAgIH07CisKKyAgICByZXR1cm4gZmluZE5vZGUocm9vdCwgdGVzdGVyKTsKKyAgfQorCisgIHB1YmxpYyBzdGF0aWMgQWNjZXNzaWJpbGl0eU5vZGVJbmZvIGZpbmRGb2N1c2VkTm9kZSAoQWNjZXNzaWJpbGl0eU5vZGVJbmZvIHJvb3QpIHsKKyAgICBOb2RlVGVzdGVyIHRlc3RlciA9IG5ldyBOb2RlVGVzdGVyKCkgeworICAgICAgQE92ZXJyaWRlCisgICAgICBwdWJsaWMgYm9vbGVhbiB0ZXN0Tm9kZSAoQWNjZXNzaWJpbGl0eU5vZGVJbmZvIG5vZGUpIHsKKyAgICAgICAgcmV0dXJuIG5vZGUuaXNGb2N1c2VkKCk7CisgICAgICB9CisgICAgfTsKKworICAgIHJldHVybiBmaW5kTm9kZShyb290LCB0ZXN0ZXIpOworICB9CisKKyAgcHVibGljIHN0YXRpYyBBY2Nlc3NpYmlsaXR5Tm9kZUluZm8gZmluZEZvY3VzYWJsZU5vZGUgKEFjY2Vzc2liaWxpdHlOb2RlSW5mbyByb290KSB7CisgICAgTm9kZVRlc3RlciB0ZXN0ZXIgPSBuZXcgTm9kZVRlc3RlcigpIHsKKyAgICAgIEBPdmVycmlkZQorICAgICAgcHVibGljIGJvb2xlYW4gdGVzdE5vZGUgKEFjY2Vzc2liaWxpdHlOb2RlSW5mbyBub2RlKSB7CisgICAgICAgIGlmIChub2RlLmlzRm9jdXNhYmxlKCkpIHsKKyAgICAgICAgICBpZiAoaXNWaXNpYmxlKG5vZGUpKSB7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICB9CisgICAgfTsKKworICAgIHJldHVybiBmaW5kTm9kZShyb290LCB0ZXN0ZXIpOworICB9CisKKyAgcHVibGljIHN0YXRpYyBBY2Nlc3NpYmlsaXR5Tm9kZUluZm8gZmluZFRleHROb2RlIChBY2Nlc3NpYmlsaXR5Tm9kZUluZm8gcm9vdCkgeworICAgIE5vZGVUZXN0ZXIgdGVzdGVyID0gbmV3IE5vZGVUZXN0ZXIoKSB7CisgICAgICBAT3ZlcnJpZGUKKyAgICAgIHB1YmxpYyBib29sZWFuIHRlc3ROb2RlIChBY2Nlc3NpYmlsaXR5Tm9kZUluZm8gbm9kZSkgeworICAgICAgICByZXR1cm4gZ2V0VGV4dChub2RlKSAhPSBudWxsOworICAgICAgfQorICAgIH07CisKKyAgICByZXR1cm4gZmluZE5vZGUocm9vdCwgdGVzdGVyKTsKKyAgfQorCisgIHB1YmxpYyBzdGF0aWMgQWNjZXNzaWJpbGl0eU5vZGVJbmZvIGZpbmREZXNjcmliZWROb2RlIChBY2Nlc3NpYmlsaXR5Tm9kZUluZm8gcm9vdCkgeworICAgIE5vZGVUZXN0ZXIgdGVzdGVyID0gbmV3IE5vZGVUZXN0ZXIoKSB7CisgICAgICBAT3ZlcnJpZGUKKyAgICAgIHB1YmxpYyBib29sZWFuIHRlc3ROb2RlIChBY2Nlc3NpYmlsaXR5Tm9kZUluZm8gbm9kZSkgeworICAgICAgICByZXR1cm4gZ2V0RGVzY3JpcHRpb24obm9kZSkgIT0gbnVsbDsKKyAgICAgIH0KKyAgICB9OworCisgICAgcmV0dXJuIGZpbmROb2RlKHJvb3QsIHRlc3Rlcik7CisgIH0KKworICBwdWJsaWMgc3RhdGljIEFjY2Vzc2liaWxpdHlOb2RlSW5mbyBmaW5kQWN0aW9uYWJsZU5vZGUgKEFjY2Vzc2liaWxpdHlOb2RlSW5mbyBub2RlLCBmaW5hbCBpbnQgYWN0aW9ucykgeworICAgIE5vZGVUZXN0ZXIgdGVzdGVyID0gbmV3IE5vZGVUZXN0ZXIoKSB7CisgICAgICBAT3ZlcnJpZGUKKyAgICAgIHB1YmxpYyBib29sZWFuIHRlc3ROb2RlIChBY2Nlc3NpYmlsaXR5Tm9kZUluZm8gbm9kZSkgeworICAgICAgICBpZiAoIW5vZGUuaXNFbmFibGVkKCkpIHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJuIChub2RlLmdldEFjdGlvbnMoKSAmIGFjdGlvbnMpICE9IDA7CisgICAgICB9CisgICAgfTsKKworICAgIHJldHVybiBmaW5kQ29udGFpbmluZ05vZGUobm9kZSwgdGVzdGVyKTsKKyAgfQorCisgIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBwZXJmb3JtQWN0aW9uIChBY2Nlc3NpYmlsaXR5Tm9kZUluZm8gbm9kZSwgaW50IGFjdGlvbiwgQnVuZGxlIGFyZ3VtZW50cykgeworICAgIG5vZGUgPSBmaW5kQWN0aW9uYWJsZU5vZGUobm9kZSwgYWN0aW9uKTsKKyAgICBpZiAobm9kZSA9PSBudWxsKSByZXR1cm4gZmFsc2U7CisKKyAgICB0cnkgeworICAgICAgcmV0dXJuIG5vZGUucGVyZm9ybUFjdGlvbihhY3Rpb24sIGFyZ3VtZW50cyk7CisgICAgfSBmaW5hbGx5IHsKKyAgICAgIG5vZGUucmVjeWNsZSgpOworICAgICAgbm9kZSA9IG51bGw7CisgICAgfQorICB9CisKKyAgcHVibGljIHN0YXRpYyBib29sZWFuIHBlcmZvcm1BY3Rpb24gKEFjY2Vzc2liaWxpdHlOb2RlSW5mbyBub2RlLCBpbnQgYWN0aW9uKSB7CisgICAgcmV0dXJuIHBlcmZvcm1BY3Rpb24obm9kZSwgYWN0aW9uLCBudWxsKTsKKyAgfQorCisgIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBwZXJmb3JtQ2xpY2sgKEFjY2Vzc2liaWxpdHlOb2RlSW5mbyBub2RlKSB7CisgICAgcmV0dXJuIHBlcmZvcm1BY3Rpb24obm9kZSwgQWNjZXNzaWJpbGl0eU5vZGVJbmZvLkFDVElPTl9DTElDSyk7CisgIH0KKworICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gcGVyZm9ybUxvbmdDbGljayAoQWNjZXNzaWJpbGl0eU5vZGVJbmZvIG5vZGUpIHsKKyAgICByZXR1cm4gcGVyZm9ybUFjdGlvbihub2RlLCBBY2Nlc3NpYmlsaXR5Tm9kZUluZm8uQUNUSU9OX0xPTkdfQ0xJQ0spOworICB9CisKKyAgcHVibGljIHN0YXRpYyBib29sZWFuIHBlcmZvcm1TY3JvbGxGb3J3YXJkIChBY2Nlc3NpYmlsaXR5Tm9kZUluZm8gbm9kZSkgeworICAgIHJldHVybiBwZXJmb3JtQWN0aW9uKG5vZGUsIEFjY2Vzc2liaWxpdHlOb2RlSW5mby5BQ1RJT05fU0NST0xMX0ZPUldBUkQpOworICB9CisKKyAgcHVibGljIHN0YXRpYyBib29sZWFuIHBlcmZvcm1TY3JvbGxCYWNrd2FyZCAoQWNjZXNzaWJpbGl0eU5vZGVJbmZvIG5vZGUpIHsKKyAgICByZXR1cm4gcGVyZm9ybUFjdGlvbihub2RlLCBBY2Nlc3NpYmlsaXR5Tm9kZUluZm8uQUNUSU9OX1NDUk9MTF9CQUNLV0FSRCk7CisgIH0KKworICBwdWJsaWMgc3RhdGljIEFjY2Vzc2liaWxpdHlOb2RlSW5mbyBmaW5kQWN0aW9uYWJsZU5vZGUgKAorICAgIEFjY2Vzc2liaWxpdHlOb2RlSW5mbyBub2RlLAorICAgIEFjY2Vzc2liaWxpdHlOb2RlSW5mby5BY2Nlc3NpYmlsaXR5QWN0aW9uLi4uIGFjdGlvbnMKKyAgKSB7CisgICAgaWYgKEFQSVRlc3RzLmhhdmVMb2xsaXBvcCkgeworICAgICAgZmluYWwgQ29tcGFyYXRvcjxBY2Nlc3NpYmlsaXR5Tm9kZUluZm8uQWNjZXNzaWJpbGl0eUFjdGlvbj4gY29tcGFyYXRvciA9CisgICAgICAgIG5ldyBDb21wYXJhdG9yPEFjY2Vzc2liaWxpdHlOb2RlSW5mby5BY2Nlc3NpYmlsaXR5QWN0aW9uPigpIHsKKyAgICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgICBwdWJsaWMgaW50IGNvbXBhcmUgKAorICAgICAgICAgICAgQWNjZXNzaWJpbGl0eU5vZGVJbmZvLkFjY2Vzc2liaWxpdHlBY3Rpb24gYWN0aW9uMSwKKyAgICAgICAgICAgIEFjY2Vzc2liaWxpdHlOb2RlSW5mby5BY2Nlc3NpYmlsaXR5QWN0aW9uIGFjdGlvbjIKKyAgICAgICAgICApIHsKKyAgICAgICAgICAgIHJldHVybiBJbnRlZ2VyLmNvbXBhcmUoYWN0aW9uMS5nZXRJZCgpLCBhY3Rpb24yLmdldElkKCkpOworICAgICAgICAgIH0KKyAgICAgICAgfTsKKworICAgICAgZmluYWwgQWNjZXNzaWJpbGl0eU5vZGVJbmZvLkFjY2Vzc2liaWxpdHlBY3Rpb25bXSBhcnJheSA9IEFycmF5cy5jb3B5T2YoYWN0aW9ucywgYWN0aW9ucy5sZW5ndGgpOworICAgICAgQXJyYXlzLnNvcnQoYXJyYXksIDAsIGFycmF5Lmxlbmd0aCwgY29tcGFyYXRvcik7CisKKyAgICAgIE5vZGVUZXN0ZXIgdGVzdGVyID0gbmV3IE5vZGVUZXN0ZXIoKSB7CisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgYm9vbGVhbiB0ZXN0Tm9kZSAoQWNjZXNzaWJpbGl0eU5vZGVJbmZvIG5vZGUpIHsKKyAgICAgICAgICBpZiAoIW5vZGUuaXNFbmFibGVkKCkpIHJldHVybiBmYWxzZTsKKworICAgICAgICAgIGZvciAoQWNjZXNzaWJpbGl0eU5vZGVJbmZvLkFjY2Vzc2liaWxpdHlBY3Rpb24gYWN0aW9uIDogbm9kZS5nZXRBY3Rpb25MaXN0KCkpIHsKKyAgICAgICAgICAgIGlmIChBcnJheXMuYmluYXJ5U2VhcmNoKGFycmF5LCAwLCBhcnJheS5sZW5ndGgsIGFjdGlvbiwgY29tcGFyYXRvcikgPj0gMCkgeworICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9CisKKyAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgIH07CisKKyAgICAgIHJldHVybiBmaW5kQ29udGFpbmluZ05vZGUobm9kZSwgdGVzdGVyKTsKKyAgICB9CisKKyAgICByZXR1cm4gbnVsbDsKKyAgfQorCisgIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBwZXJmb3JtQWN0aW9uICgKKyAgICBBY2Nlc3NpYmlsaXR5Tm9kZUluZm8gbm9kZSwKKyAgICBBY2Nlc3NpYmlsaXR5Tm9kZUluZm8uQWNjZXNzaWJpbGl0eUFjdGlvbiBhY3Rpb24KKyAgKSB7CisgICAgaWYgKEFQSVRlc3RzLmhhdmVMb2xsaXBvcCkgeworICAgICAgbm9kZSA9IGZpbmRBY3Rpb25hYmxlTm9kZShub2RlLCBhY3Rpb24pOworCisgICAgICBpZiAobm9kZSAhPSBudWxsKSB7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgcmV0dXJuIG5vZGUucGVyZm9ybUFjdGlvbihhY3Rpb24uZ2V0SWQoKSk7CisgICAgICAgIH0gZmluYWxseSB7CisgICAgICAgICAgbm9kZS5yZWN5Y2xlKCk7CisgICAgICAgICAgbm9kZSA9IG51bGw7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7CisgIH0KKworICBwdWJsaWMgc3RhdGljIExpc3Q8QWNjZXNzaWJpbGl0eVdpbmRvd0luZm8+IGdldFdpbmRvd3MgKCkgeworICAgIGlmIChBUElUZXN0cy5oYXZlTG9sbGlwb3ApIHsKKyAgICAgIHJldHVybiBCcmFpbGxlU2VydmljZS5nZXRCcmFpbGxlU2VydmljZSgpLmdldFdpbmRvd3MoKTsKKyAgICB9CisKKyAgICByZXR1cm4gQ29sbGVjdGlvbnMuRU1QVFlfTElTVDsKKyAgfQorCisgIHB1YmxpYyBzdGF0aWMgQWNjZXNzaWJpbGl0eVdpbmRvd0luZm8gZmluZFdpbmRvdyAoaW50IGlkZW50aWZpZXIpIHsKKyAgICBBY2Nlc3NpYmlsaXR5V2luZG93SW5mbyBmb3VuZCA9IG51bGw7CisKKyAgICBpZiAoQVBJVGVzdHMuaGF2ZUxvbGxpcG9wKSB7CisgICAgICBmb3IgKEFjY2Vzc2liaWxpdHlXaW5kb3dJbmZvIHdpbmRvdyA6IGdldFdpbmRvd3MoKSkgeworICAgICAgICBpZiAoZm91bmQgPT0gbnVsbCkgeworICAgICAgICAgIGlmICh3aW5kb3cuZ2V0SWQoKSA9PSBpZGVudGlmaWVyKSB7CisgICAgICAgICAgICBmb3VuZCA9IHdpbmRvdzsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHdpbmRvdy5yZWN5Y2xlKCk7CisgICAgICAgIHdpbmRvdyA9IG51bGw7CisgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIGZvdW5kOworICB9CisKKyAgcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0UmFuZ2VWYWx1ZUZvcm1hdCAoQWNjZXNzaWJpbGl0eU5vZGVJbmZvLlJhbmdlSW5mbyByYW5nZSkgeworICAgIGludCB0eXBlOworCisgICAgaWYgKEFQSVRlc3RzLmhhdmVLaXRrYXQpIHsKKyAgICAgIHR5cGUgPSByYW5nZS5nZXRUeXBlKCk7CisgICAgfSBlbHNlIHsKKyAgICAgIC8vbm9pbnNwZWN0aW9uIElubGluZWRBcGkKKyAgICAgIHR5cGUgPSBBY2Nlc3NpYmlsaXR5Tm9kZUluZm8uUmFuZ2VJbmZvLlJBTkdFX1RZUEVfRkxPQVQ7CisgICAgfQorCisgICAgc3dpdGNoICh0eXBlKSB7CisgICAgICBjYXNlIEFjY2Vzc2liaWxpdHlOb2RlSW5mby5SYW5nZUluZm8uUkFOR0VfVFlQRV9JTlQ6CisgICAgICAgIHJldHVybiAiJS4wZiI7CisKKyAgICAgIGNhc2UgQWNjZXNzaWJpbGl0eU5vZGVJbmZvLlJhbmdlSW5mby5SQU5HRV9UWVBFX1BFUkNFTlQ6CisgICAgICAgIHJldHVybiAiJS4wZiUiOworCisgICAgICBkZWZhdWx0OgorICAgICAgY2FzZSBBY2Nlc3NpYmlsaXR5Tm9kZUluZm8uUmFuZ2VJbmZvLlJBTkdFX1RZUEVfRkxPQVQ6CisgICAgICAgIHJldHVybiAiJS4yZiI7CisgICAgfQorICB9CisKKyAgcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0U2VsZWN0aW9uTW9kZUxhYmVsIChBY2Nlc3NpYmlsaXR5Tm9kZUluZm8uQ29sbGVjdGlvbkluZm8gY29sbGVjdGlvbikgeworICAgIGlmIChBUElUZXN0cy5oYXZlTG9sbGlwb3ApIHsKKyAgICAgIHN3aXRjaCAoY29sbGVjdGlvbi5nZXRTZWxlY3Rpb25Nb2RlKCkpIHsKKyAgICAgICAgY2FzZSBBY2Nlc3NpYmlsaXR5Tm9kZUluZm8uQ29sbGVjdGlvbkluZm8uU0VMRUNUSU9OX01PREVfTk9ORToKKyAgICAgICAgICByZXR1cm4gIm5vbmUiOworCisgICAgICAgIGNhc2UgQWNjZXNzaWJpbGl0eU5vZGVJbmZvLkNvbGxlY3Rpb25JbmZvLlNFTEVDVElPTl9NT0RFX1NJTkdMRToKKyAgICAgICAgICByZXR1cm4gInNuZ2wiOworCisgICAgICAgIGNhc2UgQWNjZXNzaWJpbGl0eU5vZGVJbmZvLkNvbGxlY3Rpb25JbmZvLlNFTEVDVElPTl9NT0RFX01VTFRJUExFOgorICAgICAgICAgIHJldHVybiAibXVsdCI7CisgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIG51bGw7CisgIH0KKworICBwdWJsaWMgc3RhdGljIEJ1bmRsZSBnZXRFeHRyYXMgKEFjY2Vzc2liaWxpdHlOb2RlSW5mbyBub2RlKSB7CisgICAgaWYgKG5vZGUgIT0gbnVsbCkgeworICAgICAgaWYgKEFQSVRlc3RzLmhhdmVLaXRrYXQpIHsKKyAgICAgICAgcmV0dXJuIG5vZGUuZ2V0RXh0cmFzKCk7CisgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIG51bGw7CisgIH0KKworICBwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRTdHJpbmdFeHRyYSAoQWNjZXNzaWJpbGl0eU5vZGVJbmZvIG5vZGUsIFN0cmluZyBleHRyYSkgeworICAgIEJ1bmRsZSBleHRyYXMgPSBnZXRFeHRyYXMobm9kZSk7CisgICAgaWYgKGV4dHJhcyA9PSBudWxsKSByZXR1cm4gbnVsbDsKKyAgICByZXR1cm4gZXh0cmFzLmdldFN0cmluZyhleHRyYSk7CisgIH0KK30KZGlmZiAtLWdpdCBhL0FuZHJvaWQvR3JhZGxlL2FwcC9zcmMvbWFpbi9qYXZhL29yZy9hMTF5L2JybHR0eS9hbmRyb2lkL1NjcmVlbldpbmRvdy5qYXZhIGIvQW5kcm9pZC9HcmFkbGUvYXBwL3NyYy9tYWluL2phdmEvb3JnL2ExMXkvYnJsdHR5L2FuZHJvaWQvU2NyZWVuV2luZG93LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGUzMTRlNQotLS0gL2Rldi9udWxsCisrKyBiL0FuZHJvaWQvR3JhZGxlL2FwcC9zcmMvbWFpbi9qYXZhL29yZy9hMTF5L2JybHR0eS9hbmRyb2lkL1NjcmVlbldpbmRvdy5qYXZhCkBAIC0wLDAgKzEsMTM1IEBACisvKgorICogQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyAqICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyAqCisgKiBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorICoKKyAqIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyAqCisgKiBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisgKi8KKworcGFja2FnZSBvcmcuYTExeS5icmx0dHkuYW5kcm9pZDsKKworaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuUG9pbnQ7CitpbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5SZWN0OworaW1wb3J0IGFuZHJvaWQudmlldy5hY2Nlc3NpYmlsaXR5LkFjY2Vzc2liaWxpdHlOb2RlSW5mbzsKK2ltcG9ydCBhbmRyb2lkLnZpZXcuYWNjZXNzaWJpbGl0eS5BY2Nlc3NpYmlsaXR5V2luZG93SW5mbzsKK2ltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKK2ltcG9ydCBqYXZhLnV0aWwuTWFwOworCitwdWJsaWMgY2xhc3MgU2NyZWVuV2luZG93IHsKKyAgcHJpdmF0ZSBmaW5hbCBpbnQgd2luZG93SWRlbnRpZmllcjsKKyAgcHJpdmF0ZSBBY2Nlc3NpYmlsaXR5V2luZG93SW5mbyB3aW5kb3dJbmZvID0gbnVsbDsKKworICBwcml2YXRlIFNjcmVlbldpbmRvdyAoaW50IGlkZW50aWZpZXIpIHsKKyAgICB3aW5kb3dJZGVudGlmaWVyID0gaWRlbnRpZmllcjsKKyAgfQorCisgIHB1YmxpYyBmaW5hbCBpbnQgZ2V0V2luZG93SWRlbnRpZmllciAoKSB7CisgICAgcmV0dXJuIHdpbmRvd0lkZW50aWZpZXI7CisgIH0KKworICBwdWJsaWMgZmluYWwgQWNjZXNzaWJpbGl0eVdpbmRvd0luZm8gZ2V0V2luZG93SW5mbyAoKSB7CisgICAgc3luY2hyb25pemVkICh0aGlzKSB7CisgICAgICBpZiAod2luZG93SW5mbyAhPSBudWxsKSB7CisgICAgICAgIGlmIChBUElUZXN0cy5oYXZlTG9sbGlwb3ApIHsKKyAgICAgICAgICByZXR1cm4gQWNjZXNzaWJpbGl0eVdpbmRvd0luZm8ub2J0YWluKHdpbmRvd0luZm8pOworICAgICAgICB9CisgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIG51bGw7CisgIH0KKworICBwcml2YXRlIGZpbmFsIHN0YXRpYyBNYXA8SW50ZWdlciwgU2NyZWVuV2luZG93PiBzY3JlZW5XaW5kb3dDYWNoZSA9CisgICAgICAgICAgICAgICBuZXcgSGFzaE1hcDxJbnRlZ2VyLCBTY3JlZW5XaW5kb3c+KCk7CisKKyAgcHJpdmF0ZSBSZW5kZXJlZFNjcmVlbiByZW5kZXJlZFNjcmVlbiA9IG51bGw7CisKKyAgcHVibGljIHN0YXRpYyBTY3JlZW5XaW5kb3cgZ2V0U2NyZWVuV2luZG93IChJbnRlZ2VyIGlkZW50aWZpZXIpIHsKKyAgICBzeW5jaHJvbml6ZWQgKHNjcmVlbldpbmRvd0NhY2hlKSB7CisgICAgICBTY3JlZW5XaW5kb3cgd2luZG93ID0gc2NyZWVuV2luZG93Q2FjaGUuZ2V0KGlkZW50aWZpZXIpOworICAgICAgaWYgKHdpbmRvdyAhPSBudWxsKSByZXR1cm4gd2luZG93OworCisgICAgICB3aW5kb3cgPSBuZXcgU2NyZWVuV2luZG93KGlkZW50aWZpZXIpOworICAgICAgc2NyZWVuV2luZG93Q2FjaGUucHV0KGlkZW50aWZpZXIsIHdpbmRvdyk7CisgICAgICByZXR1cm4gd2luZG93OworICAgIH0KKyAgfQorCisgIHB1YmxpYyBzdGF0aWMgU2NyZWVuV2luZG93IGdldFNjcmVlbldpbmRvdyAoQWNjZXNzaWJpbGl0eVdpbmRvd0luZm8gaW5mbykgeworICAgIFNjcmVlbldpbmRvdyB3aW5kb3cgPSBudWxsOworCisgICAgaWYgKEFQSVRlc3RzLmhhdmVMb2xsaXBvcCkgeworICAgICAgd2luZG93ID0gZ2V0U2NyZWVuV2luZG93KGluZm8uZ2V0SWQoKSk7CisKKyAgICAgIHN5bmNocm9uaXplZCAod2luZG93KSB7CisgICAgICAgIGlmICh3aW5kb3cud2luZG93SW5mbyAhPSBudWxsKSB3aW5kb3cud2luZG93SW5mby5yZWN5Y2xlKCk7CisgICAgICAgIHdpbmRvdy53aW5kb3dJbmZvID0gQWNjZXNzaWJpbGl0eVdpbmRvd0luZm8ub2J0YWluKGluZm8pOworICAgICAgfQorICAgIH0KKworICAgIHJldHVybiB3aW5kb3c7CisgIH0KKworICBwdWJsaWMgc3RhdGljIFNjcmVlbldpbmRvdyBnZXRTY3JlZW5XaW5kb3cgKEFjY2Vzc2liaWxpdHlOb2RlSW5mbyBub2RlKSB7CisgICAgaWYgKEFQSVRlc3RzLmhhdmVMb2xsaXBvcCkgeworICAgICAgQWNjZXNzaWJpbGl0eVdpbmRvd0luZm8gaW5mbyA9IG5vZGUuZ2V0V2luZG93KCk7CisKKyAgICAgIGlmIChpbmZvICE9IG51bGwpIHsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICByZXR1cm4gZ2V0U2NyZWVuV2luZG93KGluZm8pOworICAgICAgICB9IGZpbmFsbHkgeworICAgICAgICAgIGluZm8ucmVjeWNsZSgpOworICAgICAgICAgIGluZm8gPSBudWxsOworICAgICAgICB9CisgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIGdldFNjcmVlbldpbmRvdyhub2RlLmdldFdpbmRvd0lkKCkpOworICB9CisKKyAgcHVibGljIGZpbmFsIFJlY3QgZ2V0TG9jYXRpb24gKCkgeworICAgIHN5bmNocm9uaXplZCAodGhpcykgeworICAgICAgUmVjdCBsb2NhdGlvbiA9IG5ldyBSZWN0KCk7CisKKyAgICAgIGlmICh3aW5kb3dJbmZvICE9IG51bGwpIHsKKyAgICAgICAgaWYgKEFQSVRlc3RzLmhhdmVMb2xsaXBvcCkgeworICAgICAgICAgIHdpbmRvd0luZm8uZ2V0Qm91bmRzSW5TY3JlZW4obG9jYXRpb24pOworICAgICAgICAgIHJldHVybiBsb2NhdGlvbjsKKyAgICAgICAgfQorICAgICAgfQorCisgICAgICBQb2ludCBzaXplID0gbmV3IFBvaW50KCk7CisgICAgICBBcHBsaWNhdGlvblV0aWxpdGllcy5nZXRXaW5kb3dNYW5hZ2VyKCkuZ2V0RGVmYXVsdERpc3BsYXkoKS5nZXRTaXplKHNpemUpOworICAgICAgbG9jYXRpb24uc2V0KDAsIDAsIHNpemUueCwgc2l6ZS55KTsKKyAgICAgIHJldHVybiBsb2NhdGlvbjsKKyAgICB9CisgIH0KKworICBwdWJsaWMgYm9vbGVhbiBjb250YWlucyAoUmVjdCBsb2NhdGlvbikgeworICAgIHJldHVybiBnZXRMb2NhdGlvbigpLmNvbnRhaW5zKGxvY2F0aW9uKTsKKyAgfQorCisgIHB1YmxpYyBmaW5hbCBSZW5kZXJlZFNjcmVlbiBnZXRSZW5kZXJlZFNjcmVlbiAoKSB7CisgICAgcmV0dXJuIHJlbmRlcmVkU2NyZWVuOworICB9CisKKyAgcHVibGljIGZpbmFsIFNjcmVlbldpbmRvdyBzZXRSZW5kZXJlZFNjcmVlbiAoUmVuZGVyZWRTY3JlZW4gc2NyZWVuKSB7CisgICAgcmVuZGVyZWRTY3JlZW4gPSBzY3JlZW47CisgICAgcmV0dXJuIHRoaXM7CisgIH0KKworICBwdWJsaWMgc3RhdGljIFNjcmVlbldpbmRvdyBzZXRSZW5kZXJlZFNjcmVlbiAoQWNjZXNzaWJpbGl0eU5vZGVJbmZvIG5vZGUpIHsKKyAgICBTY3JlZW5XaW5kb3cgd2luZG93ID0gZ2V0U2NyZWVuV2luZG93KG5vZGUpOworICAgIHJldHVybiB3aW5kb3cuc2V0UmVuZGVyZWRTY3JlZW4obmV3IFJlbmRlcmVkU2NyZWVuKG5vZGUpKTsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvQW5kcm9pZC9HcmFkbGUvYXBwL3NyYy9tYWluL2phdmEvb3JnL2ExMXkvYnJsdHR5L2FuZHJvaWQvU2luZ2xldG9uUmVmZXJlbmNlLmphdmEgYi9BbmRyb2lkL0dyYWRsZS9hcHAvc3JjL21haW4vamF2YS9vcmcvYTExeS9icmx0dHkvYW5kcm9pZC9TaW5nbGV0b25SZWZlcmVuY2UuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NGRkZmM5Ci0tLSAvZGV2L251bGwKKysrIGIvQW5kcm9pZC9HcmFkbGUvYXBwL3NyYy9tYWluL2phdmEvb3JnL2ExMXkvYnJsdHR5L2FuZHJvaWQvU2luZ2xldG9uUmVmZXJlbmNlLmphdmEKQEAgLTAsMCArMSwzOCBAQAorLyoKKyAqIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisgKiAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisgKgorICogQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKK3BhY2thZ2Ugb3JnLmExMXkuYnJsdHR5LmFuZHJvaWQ7CisKK3B1YmxpYyBhYnN0cmFjdCBjbGFzcyBTaW5nbGV0b25SZWZlcmVuY2U8VD4geworICBwcml2YXRlIFQgcmVmZXJlbmNlID0gbnVsbDsKKworICBwcm90ZWN0ZWQgYWJzdHJhY3QgVCBvbk5lZWRSZWZlcmVuY2UgKCk7CisKKyAgcHVibGljIGZpbmFsIFQgZ2V0ICgpIHsKKyAgICBzeW5jaHJvbml6ZWQgKHRoaXMpIHsKKyAgICAgIGlmIChyZWZlcmVuY2UgPT0gbnVsbCkgeworICAgICAgICByZWZlcmVuY2UgPSBvbk5lZWRSZWZlcmVuY2UoKTsKKyAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gcmVmZXJlbmNlOworICB9CisKKyAgU2luZ2xldG9uUmVmZXJlbmNlICgpIHsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvQW5kcm9pZC9HcmFkbGUvYXBwL3NyYy9tYWluL2phdmEvb3JnL2ExMXkvYnJsdHR5L2FuZHJvaWQvU3RhdHVzSW5kaWNhdG9ycy5qYXZhIGIvQW5kcm9pZC9HcmFkbGUvYXBwL3NyYy9tYWluL2phdmEvb3JnL2ExMXkvYnJsdHR5L2FuZHJvaWQvU3RhdHVzSW5kaWNhdG9ycy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY4M2ZhODgKLS0tIC9kZXYvbnVsbAorKysgYi9BbmRyb2lkL0dyYWRsZS9hcHAvc3JjL21haW4vamF2YS9vcmcvYTExeS9icmx0dHkvYW5kcm9pZC9TdGF0dXNJbmRpY2F0b3JzLmphdmEKQEAgLTAsMCArMSw0MTEgQEAKKy8qCisgKiBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorICogICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorICoKKyAqIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorICoKKyAqIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyAqLworCitwYWNrYWdlIG9yZy5hMTF5LmJybHR0eS5hbmRyb2lkOworCitpbXBvcnQgYW5kcm9pZC5hbm5vdGF0aW9uLlN1cHByZXNzTGludDsKK2ltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29udGV4dDsKK2ltcG9ydCBhbmRyb2lkLm5ldC53aWZpLldpZmlJbmZvOworaW1wb3J0IGFuZHJvaWQubmV0LndpZmkuV2lmaU1hbmFnZXI7CitpbXBvcnQgYW5kcm9pZC5vcy5CYXR0ZXJ5TWFuYWdlcjsKK2ltcG9ydCBhbmRyb2lkLnRlbGVwaG9ueS5DZWxsSW5mbzsKK2ltcG9ydCBhbmRyb2lkLnRlbGVwaG9ueS5DZWxsSW5mb0NkbWE7CitpbXBvcnQgYW5kcm9pZC50ZWxlcGhvbnkuQ2VsbEluZm9Hc207CitpbXBvcnQgYW5kcm9pZC50ZWxlcGhvbnkuQ2VsbEluZm9MdGU7CitpbXBvcnQgYW5kcm9pZC50ZWxlcGhvbnkuQ2VsbEluZm9OcjsKK2ltcG9ydCBhbmRyb2lkLnRlbGVwaG9ueS5DZWxsSW5mb1Rkc2NkbWE7CitpbXBvcnQgYW5kcm9pZC50ZWxlcGhvbnkuQ2VsbEluZm9XY2RtYTsKK2ltcG9ydCBhbmRyb2lkLnRlbGVwaG9ueS5DZWxsU2lnbmFsU3RyZW5ndGg7CitpbXBvcnQgYW5kcm9pZC50ZWxlcGhvbnkuVGVsZXBob255TWFuYWdlcjsKK2ltcG9ydCBhbmRyb2lkLnRleHQuZm9ybWF0LkRhdGVGb3JtYXQ7CitpbXBvcnQgYW5kcm9pZC51dGlsLkxvZzsKK2ltcG9ydCBqYXZhLnRleHQuU2ltcGxlRGF0ZUZvcm1hdDsKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlzOworaW1wb3J0IGphdmEudXRpbC5EYXRlOworaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworaW1wb3J0IGphdmEudXRpbC5Mb2NhbGU7CitpbXBvcnQgamF2YS51dGlsLk1hcDsKKworcHVibGljIGFic3RyYWN0IGNsYXNzIFN0YXR1c0luZGljYXRvcnMgeworICBwcml2YXRlIGZpbmFsIHN0YXRpYyBTdHJpbmcgTE9HX1RBRyA9IFN0YXR1c0luZGljYXRvcnMuY2xhc3MuZ2V0TmFtZSgpOworCisgIHByaXZhdGUgU3RhdHVzSW5kaWNhdG9ycyAoKSB7CisgIH0KKworICBwcml2YXRlIGZpbmFsIHN0YXRpYyBDb250ZXh0IGNvbnRleHQgPSBCcmFpbGxlQXBwbGljYXRpb24uZ2V0KCk7CisKKyAgcHJpdmF0ZSBmaW5hbCBzdGF0aWMgVGVsZXBob255TWFuYWdlciB0ZWxlcGhvbnlNYW5hZ2VyID0gKFRlbGVwaG9ueU1hbmFnZXIpCisgICAgICAgICAgY29udGV4dC5nZXRTeXN0ZW1TZXJ2aWNlKENvbnRleHQuVEVMRVBIT05ZX1NFUlZJQ0UpOworCisgIHByaXZhdGUgZmluYWwgc3RhdGljIFdpZmlNYW5hZ2VyIHdpZmlNYW5hZ2VyID0gKFdpZmlNYW5hZ2VyKQorICAgICAgICAgIGNvbnRleHQuZ2V0QXBwbGljYXRpb25Db250ZXh0KCkuZ2V0U3lzdGVtU2VydmljZShDb250ZXh0LldJRklfU0VSVklDRSk7CisKKyAgcHVibGljIGludGVyZmFjZSBJdGVtIHsKKyAgICBwdWJsaWMgU3RyaW5nIGdldExhYmVsICgpOworICAgIHB1YmxpYyBTdHJpbmcgZ2V0VmFsdWUgKCk7CisgIH0KKworICBwdWJsaWMgc3RhdGljIGNsYXNzIEdyb3VwIHsKKyAgICBwcml2YXRlIGZpbmFsIEl0ZW1bXSBncm91cEl0ZW1zOworCisgICAgcHVibGljIGZpbmFsIEl0ZW1bXSBnZXRJdGVtcyAoKSB7CisgICAgICBJdGVtW10gYXJyYXkgPSBncm91cEl0ZW1zOworICAgICAgcmV0dXJuIEFycmF5cy5jb3B5T2YoYXJyYXksIGFycmF5Lmxlbmd0aCk7CisgICAgfQorCisgICAgcHVibGljIEdyb3VwIChJdGVtLi4uIGl0ZW1zKSB7CisgICAgICBncm91cEl0ZW1zID0gaXRlbXM7CisgICAgfQorCisgICAgcHVibGljIGJvb2xlYW4gcHJlcGFyZSAoKSB7CisgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgIH0KKworICBwcml2YXRlIHN0YXRpYyBjbGFzcyBEZXZpY2VHcm91cCBleHRlbmRzIEdyb3VwIHsKKyAgICBwdWJsaWMgZmluYWwgc3RhdGljIEl0ZW0gVElNRSA9IG5ldyBJdGVtKCkgeworICAgICAgQE92ZXJyaWRlCisgICAgICBwdWJsaWMgU3RyaW5nIGdldExhYmVsICgpIHsKKyAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICB9CisKKyAgICAgIEBTdXBwcmVzc0xpbnQoIkNvbnN0YW50TG9jYWxlIikKKyAgICAgIEBPdmVycmlkZQorICAgICAgcHVibGljIFN0cmluZyBnZXRWYWx1ZSAoKSB7CisgICAgICAgIFN0cmluZyBmb3JtYXQgPSBEYXRlRm9ybWF0LmlzMjRIb3VyRm9ybWF0KGNvbnRleHQpPyAiSEg6bW0iOiAiaDptbWEiOworICAgICAgICByZXR1cm4gbmV3IFNpbXBsZURhdGVGb3JtYXQoZm9ybWF0LCBMb2NhbGUuZ2V0RGVmYXVsdCgpKS5mb3JtYXQobmV3IERhdGUoKSk7CisgICAgICB9CisgICAgfTsKKworICAgIHB1YmxpYyBmaW5hbCBzdGF0aWMgSXRlbSBCQVRURVJZID0gbmV3IEl0ZW0oKSB7CisgICAgICBwcml2YXRlIGZpbmFsIGludCBJTlRfTk9fVkFMVUUgPSBBUElUZXN0cy5oYXZlUGllPyBJbnRlZ2VyLk1JTl9WQUxVRTogMDsKKyAgICAgIHByaXZhdGUgZmluYWwgbG9uZyBMT05HX05PX1ZBTFVFID0gTG9uZy5NSU5fVkFMVUU7CisKKyAgICAgIEBPdmVycmlkZQorICAgICAgcHVibGljIFN0cmluZyBnZXRMYWJlbCAoKSB7CisgICAgICAgIHJldHVybiAiQmF0IjsKKyAgICAgIH0KKworICAgICAgQE92ZXJyaWRlCisgICAgICBwdWJsaWMgU3RyaW5nIGdldFZhbHVlICgpIHsKKyAgICAgICAgaWYgKEFQSVRlc3RzLmhhdmVMb2xsaXBvcCkgeworICAgICAgICAgIEJhdHRlcnlNYW5hZ2VyIGJhdHRlcnlNYW5hZ2VyID0gKEJhdHRlcnlNYW5hZ2VyKQorICAgICAgICAgICAgY29udGV4dC5nZXRTeXN0ZW1TZXJ2aWNlKENvbnRleHQuQkFUVEVSWV9TRVJWSUNFKTsKKworICAgICAgICAgIGludCB2YWx1ZSA9IGJhdHRlcnlNYW5hZ2VyLmdldEludFByb3BlcnR5KEJhdHRlcnlNYW5hZ2VyLkJBVFRFUllfUFJPUEVSVFlfQ0FQQUNJVFkpOworCisgICAgICAgICAgaWYgKHZhbHVlICE9IElOVF9OT19WQUxVRSkgeworICAgICAgICAgICAgcmV0dXJuIEludGVnZXIudG9TdHJpbmcodmFsdWUpICsgJyUnOworICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBudWxsOworICAgICAgfQorICAgIH07CisKKyAgICBwdWJsaWMgRGV2aWNlR3JvdXAgKCkgeworICAgICAgc3VwZXIoVElNRSwgQkFUVEVSWSk7CisgICAgfQorICB9CisKKyAgcHJpdmF0ZSBzdGF0aWMgY2xhc3MgQ2VsbEdyb3VwIGV4dGVuZHMgR3JvdXAgeworICAgIHB1YmxpYyBmaW5hbCBzdGF0aWMgSXRlbSBPUEVSQVRPUiA9IG5ldyBJdGVtKCkgeworICAgICAgQE92ZXJyaWRlCisgICAgICBwdWJsaWMgU3RyaW5nIGdldExhYmVsICgpIHsKKyAgICAgICAgcmV0dXJuICJDZWxsIjsKKyAgICAgIH0KKworICAgICAgQE92ZXJyaWRlCisgICAgICBwdWJsaWMgU3RyaW5nIGdldFZhbHVlICgpIHsKKyAgICAgICAgU3RyaW5nIG5hbWUgPSB0ZWxlcGhvbnlNYW5hZ2VyLmdldE5ldHdvcmtPcGVyYXRvck5hbWUoKTsKKyAgICAgICAgcmV0dXJuIG5hbWU7CisgICAgICB9CisgICAgfTsKKworICAgIHB1YmxpYyBmaW5hbCBzdGF0aWMgSXRlbSBTSUdOQUwgPSBuZXcgSXRlbSgpIHsKKyAgICAgIEBPdmVycmlkZQorICAgICAgcHVibGljIFN0cmluZyBnZXRMYWJlbCAoKSB7CisgICAgICAgIHJldHVybiAiU2lnIjsKKyAgICAgIH0KKworICAgICAgcHJpdmF0ZSBmaW5hbCBDZWxsSW5mbyBnZXRDZWxsSW5mbyAoKSB7CisgICAgICAgIExpc3Q8Q2VsbEluZm8+IGluZm9MaXN0ID0gbnVsbDsKKworICAgICAgICBpZiAoQVBJVGVzdHMuaGF2ZUplbGx5QmVhbk1SMSkgeworICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICBpbmZvTGlzdCA9IHRlbGVwaG9ueU1hbmFnZXIuZ2V0QWxsQ2VsbEluZm8oKTsKKyAgICAgICAgICB9IGNhdGNoIChTZWN1cml0eUV4Y2VwdGlvbiBleGNlcHRpb24pIHsKKyAgICAgICAgICAgIExvZy53KExPR19UQUcsICgic2VjdXJpdHkgZXhjZXB0aW9uOiAiICsgZXhjZXB0aW9uLmdldE1lc3NhZ2UoKSkpOworICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmIChpbmZvTGlzdCAhPSBudWxsKSB7CisgICAgICAgICAgaWYgKCFpbmZvTGlzdC5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIHJldHVybiBpbmZvTGlzdC5nZXQoMCk7CisgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICB9CisKKyAgICAgIHByaXZhdGUgZmluYWwgQ2VsbFNpZ25hbFN0cmVuZ3RoIGdldENlbGxTaWduYWxTdHJlbmd0aCAoQ2VsbEluZm8gaW5mbykgeworICAgICAgICBpZiAoQVBJVGVzdHMuaGF2ZUplbGx5QmVhbk1SMSkgeworICAgICAgICAgIGlmIChpbmZvIGluc3RhbmNlb2YgQ2VsbEluZm9DZG1hKSB7CisgICAgICAgICAgICByZXR1cm4gKChDZWxsSW5mb0NkbWEpaW5mbykuZ2V0Q2VsbFNpZ25hbFN0cmVuZ3RoKCk7CisgICAgICAgICAgfQorCisgICAgICAgICAgaWYgKGluZm8gaW5zdGFuY2VvZiBDZWxsSW5mb0dzbSkgeworICAgICAgICAgICAgcmV0dXJuICgoQ2VsbEluZm9Hc20paW5mbykuZ2V0Q2VsbFNpZ25hbFN0cmVuZ3RoKCk7CisgICAgICAgICAgfQorCisgICAgICAgICAgaWYgKGluZm8gaW5zdGFuY2VvZiBDZWxsSW5mb0x0ZSkgeworICAgICAgICAgICAgcmV0dXJuICgoQ2VsbEluZm9MdGUpaW5mbykuZ2V0Q2VsbFNpZ25hbFN0cmVuZ3RoKCk7CisgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYgKEFQSVRlc3RzLmhhdmVKZWxseUJlYW5NUjIpIHsKKyAgICAgICAgICBpZiAoaW5mbyBpbnN0YW5jZW9mIENlbGxJbmZvV2NkbWEpIHsKKyAgICAgICAgICAgIHJldHVybiAoKENlbGxJbmZvV2NkbWEpaW5mbykuZ2V0Q2VsbFNpZ25hbFN0cmVuZ3RoKCk7CisgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYgKEFQSVRlc3RzLmhhdmVRKSB7CisgICAgICAgICAgaWYgKGluZm8gaW5zdGFuY2VvZiBDZWxsSW5mb05yKSB7CisgICAgICAgICAgICByZXR1cm4gKChDZWxsSW5mb05yKWluZm8pLmdldENlbGxTaWduYWxTdHJlbmd0aCgpOworICAgICAgICAgIH0KKworICAgICAgICAgIGlmIChpbmZvIGluc3RhbmNlb2YgQ2VsbEluZm9UZHNjZG1hKSB7CisgICAgICAgICAgICByZXR1cm4gKChDZWxsSW5mb1Rkc2NkbWEpaW5mbykuZ2V0Q2VsbFNpZ25hbFN0cmVuZ3RoKCk7CisgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICB9CisKKyAgICAgIHByaXZhdGUgZmluYWwgU3RyaW5nW10gbGV2ZWxOYW1lcyA9IG5ldyBTdHJpbmdbXSB7CisgICAgICAgICJub25lIiwgInBvb3IiLCAiZmFpciIsICJnb29kIiwgImhpZ2giCisgICAgICB9OworCisgICAgICBAT3ZlcnJpZGUKKyAgICAgIHB1YmxpYyBTdHJpbmcgZ2V0VmFsdWUgKCkgeworICAgICAgICBpZiAoQVBJVGVzdHMuaGF2ZUplbGx5QmVhbk1SMSkgeworICAgICAgICAgIENlbGxJbmZvIGluZm8gPSBnZXRDZWxsSW5mbygpOworCisgICAgICAgICAgaWYgKGluZm8gIT0gbnVsbCkgeworICAgICAgICAgICAgQ2VsbFNpZ25hbFN0cmVuZ3RoIGNzcyA9IGdldENlbGxTaWduYWxTdHJlbmd0aChpbmZvKTsKKworICAgICAgICAgICAgaWYgKGNzcyAhPSBudWxsKSB7CisgICAgICAgICAgICAgIGludCBsZXZlbCA9IGNzcy5nZXRMZXZlbCgpOworICAgICAgICAgICAgICByZXR1cm4gbGV2ZWxOYW1lc1tsZXZlbF07CisgICAgICAgICAgICB9CisgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICB9CisgICAgfTsKKworICAgIHB1YmxpYyBmaW5hbCBzdGF0aWMgSXRlbSBURUNITk9MT0dZID0gbmV3IEl0ZW0oKSB7CisgICAgICBwcml2YXRlIGZpbmFsIE1hcDxJbnRlZ2VyLCBTdHJpbmc+IG5ldHdvcmtUeXBlcyA9IG5ldyBIYXNoTWFwPD4oKTsKKworICAgICAgeworICAgICAgICBuZXR3b3JrVHlwZXMucHV0KFRlbGVwaG9ueU1hbmFnZXIuTkVUV09SS19UWVBFXzF4UlRULCAiMXhSVFQiKTsKKyAgICAgICAgbmV0d29ya1R5cGVzLnB1dChUZWxlcGhvbnlNYW5hZ2VyLk5FVFdPUktfVFlQRV9DRE1BLCAiQ0RNQSIpOworICAgICAgICBuZXR3b3JrVHlwZXMucHV0KFRlbGVwaG9ueU1hbmFnZXIuTkVUV09SS19UWVBFX0VER0UsICJFREdFIik7CisgICAgICAgIG5ldHdvcmtUeXBlcy5wdXQoVGVsZXBob255TWFuYWdlci5ORVRXT1JLX1RZUEVfRUhSUEQsICJlSFJQRCIpOworICAgICAgICBuZXR3b3JrVHlwZXMucHV0KFRlbGVwaG9ueU1hbmFnZXIuTkVUV09SS19UWVBFX0VWRE9fMCwgIkVWRE8gcmV2aXNpb24gMCIpOworICAgICAgICBuZXR3b3JrVHlwZXMucHV0KFRlbGVwaG9ueU1hbmFnZXIuTkVUV09SS19UWVBFX0VWRE9fQSwgIkVWRE8gcmV2aXNpb24gQSIpOworICAgICAgICBuZXR3b3JrVHlwZXMucHV0KFRlbGVwaG9ueU1hbmFnZXIuTkVUV09SS19UWVBFX0VWRE9fQiwgIkVWRE8gcmV2aXNpb24gQiIpOworICAgICAgICBuZXR3b3JrVHlwZXMucHV0KFRlbGVwaG9ueU1hbmFnZXIuTkVUV09SS19UWVBFX0dQUlMsICJHUFJTIik7CisgICAgICAgIG5ldHdvcmtUeXBlcy5wdXQoVGVsZXBob255TWFuYWdlci5ORVRXT1JLX1RZUEVfSFNEUEEsICJIU0RQQSIpOworICAgICAgICBuZXR3b3JrVHlwZXMucHV0KFRlbGVwaG9ueU1hbmFnZXIuTkVUV09SS19UWVBFX0hTUEEsICJIU1BBIik7CisgICAgICAgIG5ldHdvcmtUeXBlcy5wdXQoVGVsZXBob255TWFuYWdlci5ORVRXT1JLX1RZUEVfSFNQQVAsICJIU1BBKyIpOworICAgICAgICBuZXR3b3JrVHlwZXMucHV0KFRlbGVwaG9ueU1hbmFnZXIuTkVUV09SS19UWVBFX0hTVVBBLCAiSFNVUEEiKTsKKyAgICAgICAgbmV0d29ya1R5cGVzLnB1dChUZWxlcGhvbnlNYW5hZ2VyLk5FVFdPUktfVFlQRV9JREVOLCAiaURlbiIpOworICAgICAgICBuZXR3b3JrVHlwZXMucHV0KFRlbGVwaG9ueU1hbmFnZXIuTkVUV09SS19UWVBFX0xURSwgIkxURSIpOworICAgICAgICBuZXR3b3JrVHlwZXMucHV0KFRlbGVwaG9ueU1hbmFnZXIuTkVUV09SS19UWVBFX1VNVFMsICJVTVRTIik7CisgICAgICB9CisKKyAgICAgIEBPdmVycmlkZQorICAgICAgcHVibGljIFN0cmluZyBnZXRMYWJlbCAoKSB7CisgICAgICAgIHJldHVybiBudWxsOworICAgICAgfQorCisgICAgICBAT3ZlcnJpZGUKKyAgICAgIHB1YmxpYyBTdHJpbmcgZ2V0VmFsdWUgKCkgeworICAgICAgICBpbnQgdHlwZSA9IFRlbGVwaG9ueU1hbmFnZXIuTkVUV09SS19UWVBFX1VOS05PV047CisKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICB0eXBlID0gdGVsZXBob255TWFuYWdlci5nZXROZXR3b3JrVHlwZSgpOworICAgICAgICB9IGNhdGNoIChTZWN1cml0eUV4Y2VwdGlvbiBleGNlcHRpb24pIHsKKyAgICAgICAgfQorCisgICAgICAgIGlmICh0eXBlID09IFRlbGVwaG9ueU1hbmFnZXIuTkVUV09SS19UWVBFX1VOS05PV04pIHJldHVybiBudWxsOworICAgICAgICByZXR1cm4gbmV0d29ya1R5cGVzLmdldCh0eXBlKTsKKyAgICAgIH0KKyAgICB9OworCisgICAgcHVibGljIGZpbmFsIHN0YXRpYyBJdGVtIFJPQU1JTkcgPSBuZXcgSXRlbSgpIHsKKyAgICAgIEBPdmVycmlkZQorICAgICAgcHVibGljIFN0cmluZyBnZXRMYWJlbCAoKSB7CisgICAgICAgIHJldHVybiBudWxsOworICAgICAgfQorCisgICAgICBAT3ZlcnJpZGUKKyAgICAgIHB1YmxpYyBTdHJpbmcgZ2V0VmFsdWUgKCkgeworICAgICAgICByZXR1cm4gdGVsZXBob255TWFuYWdlci5pc05ldHdvcmtSb2FtaW5nKCk/ICJyb2FtaW5nIjogbnVsbDsKKyAgICAgIH0KKyAgICB9OworCisgICAgcHVibGljIENlbGxHcm91cCAoKSB7CisgICAgICBzdXBlcihPUEVSQVRPUiwgU0lHTkFMLCBURUNITk9MT0dZLCBST0FNSU5HKTsKKyAgICB9CisgIH0KKworICBwcml2YXRlIHN0YXRpYyBjbGFzcyBXaWZpR3JvdXAgZXh0ZW5kcyBHcm91cCB7CisgICAgcHJpdmF0ZSBzdGF0aWMgV2lmaUluZm8gd2lmaUluZm8gPSBudWxsOworCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIGJvb2xlYW4gcHJlcGFyZSAoKSB7CisgICAgICBpZiAoIXN1cGVyLnByZXBhcmUoKSkgcmV0dXJuIGZhbHNlOworCisgICAgICB0cnkgeworICAgICAgICB3aWZpSW5mbyA9IHdpZmlNYW5hZ2VyLmdldENvbm5lY3Rpb25JbmZvKCk7CisgICAgICB9IGNhdGNoIChTZWN1cml0eUV4Y2VwdGlvbiBleGNlcHRpb24pIHsKKyAgICAgICAgd2lmaUluZm8gPSBudWxsOworICAgICAgfQorCisgICAgICByZXR1cm4gd2lmaUluZm8gIT0gbnVsbDsKKyAgICB9CisKKyAgICBwdWJsaWMgZmluYWwgc3RhdGljIEl0ZW0gU1NJRCA9IG5ldyBJdGVtKCkgeworICAgICAgQE92ZXJyaWRlCisgICAgICBwdWJsaWMgU3RyaW5nIGdldExhYmVsICgpIHsKKyAgICAgICAgcmV0dXJuICJXaUZpIjsKKyAgICAgIH0KKworICAgICAgQE92ZXJyaWRlCisgICAgICBwdWJsaWMgU3RyaW5nIGdldFZhbHVlICgpIHsKKyAgICAgICAgaWYgKHdpZmlJbmZvICE9IG51bGwpIHsKKyAgICAgICAgICBTdHJpbmcgc3NpZCA9IHdpZmlJbmZvLmdldFNTSUQoKTsKKyAgICAgICAgICBpZiAoKHNzaWQgIT0gbnVsbCkgJiYgIXNzaWQuaXNFbXB0eSgpKSByZXR1cm4gc3NpZDsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBudWxsOworICAgICAgfQorICAgIH07CisKKyAgICBwdWJsaWMgZmluYWwgc3RhdGljIEl0ZW0gU0lHTkFMID0gbmV3IEl0ZW0oKSB7CisgICAgICBAT3ZlcnJpZGUKKyAgICAgIHB1YmxpYyBTdHJpbmcgZ2V0TGFiZWwgKCkgeworICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgIH0KKworICAgICAgQE92ZXJyaWRlCisgICAgICBwdWJsaWMgU3RyaW5nIGdldFZhbHVlICgpIHsKKyAgICAgICAgaWYgKHdpZmlJbmZvICE9IG51bGwpIHsKKyAgICAgICAgICBpbnQgcnNzaSA9IHdpZmlJbmZvLmdldFJzc2koKTsKKyAgICAgICAgICBpbnQgcGVyY2VudGFnZSA9IHdpZmlNYW5hZ2VyLmNhbGN1bGF0ZVNpZ25hbExldmVsKHJzc2ksIDEwMCk7CisgICAgICAgICAgcmV0dXJuIEludGVnZXIudG9TdHJpbmcocGVyY2VudGFnZSkgKyAnJSc7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgIH0KKyAgICB9OworCisgICAgcHVibGljIGZpbmFsIHN0YXRpYyBJdGVtIFNQRUVEID0gbmV3IEl0ZW0oKSB7CisgICAgICBAT3ZlcnJpZGUKKyAgICAgIHB1YmxpYyBTdHJpbmcgZ2V0TGFiZWwgKCkgeworICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgIH0KKworICAgICAgQE92ZXJyaWRlCisgICAgICBwdWJsaWMgU3RyaW5nIGdldFZhbHVlICgpIHsKKyAgICAgICAgaWYgKHdpZmlJbmZvICE9IG51bGwpIHsKKyAgICAgICAgICBpbnQgc3BlZWQgPSB3aWZpSW5mby5nZXRMaW5rU3BlZWQoKTsKKyAgICAgICAgICByZXR1cm4gSW50ZWdlci50b1N0cmluZyhzcGVlZCkgKyBXaWZpSW5mby5MSU5LX1NQRUVEX1VOSVRTOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICB9CisgICAgfTsKKworICAgIHB1YmxpYyBmaW5hbCBzdGF0aWMgSXRlbSBGUkVRVUVOQ1kgPSBuZXcgSXRlbSgpIHsKKyAgICAgIEBPdmVycmlkZQorICAgICAgcHVibGljIFN0cmluZyBnZXRMYWJlbCAoKSB7CisgICAgICAgIHJldHVybiBudWxsOworICAgICAgfQorCisgICAgICBAT3ZlcnJpZGUKKyAgICAgIHB1YmxpYyBTdHJpbmcgZ2V0VmFsdWUgKCkgeworICAgICAgICBpZiAoQVBJVGVzdHMuaGF2ZUxvbGxpcG9wKSB7CisgICAgICAgICAgaWYgKHdpZmlJbmZvICE9IG51bGwpIHsKKyAgICAgICAgICAgIGludCBmcmVxdWVuY3kgPSB3aWZpSW5mby5nZXRGcmVxdWVuY3koKTsKKyAgICAgICAgICAgIHJldHVybiBJbnRlZ2VyLnRvU3RyaW5nKGZyZXF1ZW5jeSkgKyBXaWZpSW5mby5GUkVRVUVOQ1lfVU5JVFM7CisgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICB9CisgICAgfTsKKworICAgIHB1YmxpYyBXaWZpR3JvdXAgKCkgeworICAgICAgc3VwZXIoU1NJRCwgU0lHTkFMLCBTUEVFRCwgRlJFUVVFTkNZKTsKKyAgICB9CisgIH0KKworICBwdWJsaWMgZmluYWwgc3RhdGljIEdyb3VwIERFVklDRSA9IG5ldyBEZXZpY2VHcm91cCgpOworICBwdWJsaWMgZmluYWwgc3RhdGljIEdyb3VwIENFTEwgPSBuZXcgQ2VsbEdyb3VwKCk7CisgIHB1YmxpYyBmaW5hbCBzdGF0aWMgR3JvdXAgV0lGSSA9IG5ldyBXaWZpR3JvdXAoKTsKKworICBwcml2YXRlIGZpbmFsIHN0YXRpYyBHcm91cFtdIEdST1VQUyA9IHsKKyAgICBERVZJQ0UsIENFTEwsIFdJRkkKKyAgfTsKKworICBwdWJsaWMgc3RhdGljIFN0cmluZyBnZXQgKCkgeworICAgIFN0cmluZ0J1aWxkZXIgc3RhdHVzID0gbmV3IFN0cmluZ0J1aWxkZXIoKTsKKworICAgIGZvciAoR3JvdXAgZ3JvdXAgOiBHUk9VUFMpIHsKKyAgICAgIGlmICghZ3JvdXAucHJlcGFyZSgpKSBjb250aW51ZTsKKyAgICAgIGJvb2xlYW4gZmlyc3QgPSB0cnVlOworCisgICAgICBmb3IgKEl0ZW0gaXRlbSA6IGdyb3VwLmdldEl0ZW1zKCkpIHsKKyAgICAgICAgU3RyaW5nIHZhbHVlID0gaXRlbS5nZXRWYWx1ZSgpOworCisgICAgICAgIGlmICgodmFsdWUgPT0gbnVsbCkgfHwgdmFsdWUuaXNFbXB0eSgpKSB7CisgICAgICAgICAgaWYgKGZpcnN0KSBicmVhazsKKyAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChmaXJzdCkgeworICAgICAgICAgIGZpcnN0ID0gZmFsc2U7CisgICAgICAgICAgaWYgKHN0YXR1cy5sZW5ndGgoKSA+IDApIHN0YXR1cy5hcHBlbmQoJywnKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChzdGF0dXMubGVuZ3RoKCkgPiAwKSBzdGF0dXMuYXBwZW5kKCcgJyk7CisgICAgICAgIFN0cmluZyBsYWJlbCA9IGl0ZW0uZ2V0TGFiZWwoKTsKKyAgICAgICAgaWYgKChsYWJlbCAhPSBudWxsKSAmJiAhbGFiZWwuaXNFbXB0eSgpKSBzdGF0dXMuYXBwZW5kKGxhYmVsKS5hcHBlbmQoJzonKTsKKyAgICAgICAgc3RhdHVzLmFwcGVuZCh2YWx1ZSk7CisgICAgICB9CisgICAgfQorCisgICAgaWYgKHN0YXR1cy5sZW5ndGgoKSA9PSAwKSByZXR1cm4gbnVsbDsKKyAgICByZXR1cm4gc3RhdHVzLnRvU3RyaW5nKCk7CisgIH0KK30KZGlmZiAtLWdpdCBhL0FuZHJvaWQvR3JhZGxlL2FwcC9zcmMvbWFpbi9qYXZhL29yZy9hMTF5L2JybHR0eS9hbmRyb2lkL1N0cnVjdHVyYWxNb3Rpb24uamF2YSBiL0FuZHJvaWQvR3JhZGxlL2FwcC9zcmMvbWFpbi9qYXZhL29yZy9hMTF5L2JybHR0eS9hbmRyb2lkL1N0cnVjdHVyYWxNb3Rpb24uamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hM2NiNDVlCi0tLSAvZGV2L251bGwKKysrIGIvQW5kcm9pZC9HcmFkbGUvYXBwL3NyYy9tYWluL2phdmEvb3JnL2ExMXkvYnJsdHR5L2FuZHJvaWQvU3RydWN0dXJhbE1vdGlvbi5qYXZhCkBAIC0wLDAgKzEsMzIxIEBACisvKgorICogQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyAqICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyAqCisgKiBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorICoKKyAqIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyAqCisgKiBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisgKi8KKworcGFja2FnZSBvcmcuYTExeS5icmx0dHkuYW5kcm9pZDsKKworaW1wb3J0IGFuZHJvaWQub3MuQnVuZGxlOworaW1wb3J0IGFuZHJvaWQudXRpbC5Mb2c7CitpbXBvcnQgYW5kcm9pZC52aWV3LktleUV2ZW50OworaW1wb3J0IGFuZHJvaWQudmlldy5hY2Nlc3NpYmlsaXR5LkFjY2Vzc2liaWxpdHlOb2RlSW5mbzsKK2ltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKK2ltcG9ydCBqYXZhLnV0aWwuTG9jYWxlOworaW1wb3J0IGphdmEudXRpbC5NYXA7CitpbXBvcnQgb3JnLmExMXkuYnJsdHR5LmNvcmUuQnJhaWxsZTsKKworcHVibGljIGNsYXNzIFN0cnVjdHVyYWxNb3Rpb24geworICBwcml2YXRlIGZpbmFsIHN0YXRpYyBTdHJpbmcgTE9HX1RBRyA9IFN0cnVjdHVyYWxNb3Rpb24uY2xhc3MuZ2V0TmFtZSgpOworCisgIHB1YmxpYyBhYnN0cmFjdCBzdGF0aWMgY2xhc3MgVHlwZSB7CisgICAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgdHlwZU5hbWU7CisKKyAgICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldFR5cGVOYW1lICgpIHsKKyAgICAgIHJldHVybiB0eXBlTmFtZTsKKyAgICB9CisKKyAgICBwcm90ZWN0ZWQgVHlwZSAoU3RyaW5nIG5hbWUpIHsKKyAgICAgIHR5cGVOYW1lID0gbmFtZTsKKyAgICB9CisKKyAgICBwcm90ZWN0ZWQgYWJzdHJhY3Qgdm9pZCBzZXRUeXBlQXJndW1lbnQgKEJ1bmRsZSBhcmd1bWVudHMpOworICAgIHByb3RlY3RlZCBhYnN0cmFjdCBpbnQgZ2V0QWN0aW9uRm9yTmV4dCAoKTsKKyAgICBwcm90ZWN0ZWQgYWJzdHJhY3QgaW50IGdldEFjdGlvbkZvclByZXZpb3VzICgpOworICB9CisKKyAgcHVibGljIHN0YXRpYyBjbGFzcyBUZXh0IGV4dGVuZHMgVHlwZSB7CisgICAgcHJpdmF0ZSBmaW5hbCBpbnQgbW92ZW1lbnRHcmFudWxhcml0eTsKKworICAgIHB1YmxpYyBmaW5hbCBpbnQgZ2V0TW92ZW1lbnRHcmFudWxhcml0eSAoKSB7CisgICAgICByZXR1cm4gbW92ZW1lbnRHcmFudWxhcml0eTsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwcm90ZWN0ZWQgZmluYWwgdm9pZCBzZXRUeXBlQXJndW1lbnQgKEJ1bmRsZSBhcmd1bWVudHMpIHsKKyAgICAgIGFyZ3VtZW50cy5wdXRJbnQoQWNjZXNzaWJpbGl0eU5vZGVJbmZvLkFDVElPTl9BUkdVTUVOVF9NT1ZFTUVOVF9HUkFOVUxBUklUWV9JTlQsIG1vdmVtZW50R3JhbnVsYXJpdHkpOworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHByb3RlY3RlZCBmaW5hbCBpbnQgZ2V0QWN0aW9uRm9yTmV4dCAoKSB7CisgICAgICByZXR1cm4gQWNjZXNzaWJpbGl0eU5vZGVJbmZvLkFDVElPTl9ORVhUX0FUX01PVkVNRU5UX0dSQU5VTEFSSVRZOworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHByb3RlY3RlZCBmaW5hbCBpbnQgZ2V0QWN0aW9uRm9yUHJldmlvdXMgKCkgeworICAgICAgcmV0dXJuIEFjY2Vzc2liaWxpdHlOb2RlSW5mby5BQ1RJT05fUFJFVklPVVNfQVRfTU9WRU1FTlRfR1JBTlVMQVJJVFk7CisgICAgfQorCisgICAgcHJpdmF0ZSBUZXh0IChpbnQgZ3JhbnVsYXJpdHksIFN0cmluZyBuYW1lKSB7CisgICAgICBzdXBlcihuYW1lKTsKKyAgICAgIG1vdmVtZW50R3JhbnVsYXJpdHkgPSBncmFudWxhcml0eTsKKyAgICB9CisKKyAgICBwdWJsaWMgZmluYWwgc3RhdGljIFR5cGUgQ0hBUkFDVEVSID0gbmV3IFRleHQoCisgICAgICBBY2Nlc3NpYmlsaXR5Tm9kZUluZm8uTU9WRU1FTlRfR1JBTlVMQVJJVFlfQ0hBUkFDVEVSLCAiQ0hBUkFDVEVSIgorICAgICk7CisKKyAgICBwdWJsaWMgZmluYWwgc3RhdGljIFR5cGUgV09SRCA9IG5ldyBUZXh0KAorICAgICAgQWNjZXNzaWJpbGl0eU5vZGVJbmZvLk1PVkVNRU5UX0dSQU5VTEFSSVRZX1dPUkQsICJXT1JEIgorICAgICk7CisKKyAgICBwdWJsaWMgZmluYWwgc3RhdGljIFR5cGUgTElORSA9IG5ldyBUZXh0KAorICAgICAgQWNjZXNzaWJpbGl0eU5vZGVJbmZvLk1PVkVNRU5UX0dSQU5VTEFSSVRZX0xJTkUsICJMSU5FIgorICAgICk7CisKKyAgICBwdWJsaWMgZmluYWwgc3RhdGljIFR5cGUgUEFSQUdSQVBIID0gbmV3IFRleHQoCisgICAgICBBY2Nlc3NpYmlsaXR5Tm9kZUluZm8uTU9WRU1FTlRfR1JBTlVMQVJJVFlfUEFSQUdSQVBILCAiUEFSQUdSQVBIIgorICAgICk7CisKKyAgICBwdWJsaWMgZmluYWwgc3RhdGljIFR5cGUgUEFHRSA9IG5ldyBUZXh0KAorICAgICAgQWNjZXNzaWJpbGl0eU5vZGVJbmZvLk1PVkVNRU5UX0dSQU5VTEFSSVRZX1BBR0UsICJQQUdFIgorICAgICk7CisgIH0KKworICBwdWJsaWMgc3RhdGljIGNsYXNzIEVsZW1lbnQgZXh0ZW5kcyBUeXBlIHsKKyAgICBwcml2YXRlIGZpbmFsIFN0cmluZyByb2xlTmFtZTsKKworICAgIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0Um9sZU5hbWUgKCkgeworICAgICAgcmV0dXJuIHJvbGVOYW1lOworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHByb3RlY3RlZCBmaW5hbCB2b2lkIHNldFR5cGVBcmd1bWVudCAoQnVuZGxlIGFyZ3VtZW50cykgeworICAgICAgYXJndW1lbnRzLnB1dFN0cmluZyhBY2Nlc3NpYmlsaXR5Tm9kZUluZm8uQUNUSU9OX0FSR1VNRU5UX0hUTUxfRUxFTUVOVF9TVFJJTkcsIHJvbGVOYW1lKTsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwcm90ZWN0ZWQgZmluYWwgaW50IGdldEFjdGlvbkZvck5leHQgKCkgeworICAgICAgcmV0dXJuIEFjY2Vzc2liaWxpdHlOb2RlSW5mby5BQ1RJT05fTkVYVF9IVE1MX0VMRU1FTlQ7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHJvdGVjdGVkIGZpbmFsIGludCBnZXRBY3Rpb25Gb3JQcmV2aW91cyAoKSB7CisgICAgICByZXR1cm4gQWNjZXNzaWJpbGl0eU5vZGVJbmZvLkFDVElPTl9QUkVWSU9VU19IVE1MX0VMRU1FTlQ7CisgICAgfQorCisgICAgcHJpdmF0ZSBFbGVtZW50IChTdHJpbmcgcm9sZSwgU3RyaW5nIG5hbWUpIHsKKyAgICAgIHN1cGVyKG5hbWUpOworICAgICAgcm9sZU5hbWUgPSByb2xlOworICAgIH0KKworICAgIHByaXZhdGUgRWxlbWVudCAoU3RyaW5nIHJvbGUpIHsKKyAgICAgIHRoaXMocm9sZSwgcm9sZSk7CisgICAgfQorCisgICAgcHVibGljIGZpbmFsIHN0YXRpYyBUeXBlIE1BSU4gPSBuZXcgRWxlbWVudCgiTUFJTiIpOworICAgIHB1YmxpYyBmaW5hbCBzdGF0aWMgVHlwZSBGT0NVU0FCTEUgPSBuZXcgRWxlbWVudCgiRk9DVVNBQkxFIik7CisgICAgcHVibGljIGZpbmFsIHN0YXRpYyBUeXBlIENPTlRST0wgPSBuZXcgRWxlbWVudCgiQ09OVFJPTCIpOworICAgIHB1YmxpYyBmaW5hbCBzdGF0aWMgVHlwZSBMQU5ETUFSSyA9IG5ldyBFbGVtZW50KCJMQU5ETUFSSyIpOworCisgICAgcHVibGljIGZpbmFsIHN0YXRpYyBUeXBlIEFSVElDTEUgPSBuZXcgRWxlbWVudCgiQVJUSUNMRSIpOworICAgIHB1YmxpYyBmaW5hbCBzdGF0aWMgVHlwZSBGUkFNRSA9IG5ldyBFbGVtZW50KCJGUkFNRSIpOworICAgIHB1YmxpYyBmaW5hbCBzdGF0aWMgVHlwZSBTRUNUSU9OID0gbmV3IEVsZW1lbnQoIlNFQ1RJT04iKTsKKworICAgIHB1YmxpYyBmaW5hbCBzdGF0aWMgVHlwZSBHUkFQSElDID0gbmV3IEVsZW1lbnQoIkdSQVBISUMiKTsKKyAgICBwdWJsaWMgZmluYWwgc3RhdGljIFR5cGUgTUVESUEgPSBuZXcgRWxlbWVudCgiTUVESUEiKTsKKworICAgIHB1YmxpYyBmaW5hbCBzdGF0aWMgVHlwZSBUQUJMRSA9IG5ldyBFbGVtZW50KCJUQUJMRSIpOworICAgIHB1YmxpYyBmaW5hbCBzdGF0aWMgVHlwZSBMSVNUID0gbmV3IEVsZW1lbnQoIkxJU1QiKTsKKyAgICBwdWJsaWMgZmluYWwgc3RhdGljIFR5cGUgTElTVF9JVEVNID0gbmV3IEVsZW1lbnQoIkxJU1RfSVRFTSIpOworCisgICAgcHVibGljIGZpbmFsIHN0YXRpYyBUeXBlIEhFQURJTkcgPSBuZXcgRWxlbWVudCgiSEVBRElORyIpOworICAgIHB1YmxpYyBmaW5hbCBzdGF0aWMgVHlwZSBIRUFESU5HXzEgPSBuZXcgRWxlbWVudCgiSDEiKTsKKyAgICBwdWJsaWMgZmluYWwgc3RhdGljIFR5cGUgSEVBRElOR18yID0gbmV3IEVsZW1lbnQoIkgyIik7CisgICAgcHVibGljIGZpbmFsIHN0YXRpYyBUeXBlIEhFQURJTkdfMyA9IG5ldyBFbGVtZW50KCJIMyIpOworICAgIHB1YmxpYyBmaW5hbCBzdGF0aWMgVHlwZSBIRUFESU5HXzQgPSBuZXcgRWxlbWVudCgiSDQiKTsKKyAgICBwdWJsaWMgZmluYWwgc3RhdGljIFR5cGUgSEVBRElOR181ID0gbmV3IEVsZW1lbnQoIkg1Iik7CisgICAgcHVibGljIGZpbmFsIHN0YXRpYyBUeXBlIEhFQURJTkdfNiA9IG5ldyBFbGVtZW50KCJINiIpOworCisgICAgcHVibGljIGZpbmFsIHN0YXRpYyBUeXBlIExJTksgPSBuZXcgRWxlbWVudCgiTElOSyIpOworICAgIHB1YmxpYyBmaW5hbCBzdGF0aWMgVHlwZSBWSVNJVEVEX0xJTksgPSBuZXcgRWxlbWVudCgiVklTSVRFRF9MSU5LIik7CisgICAgcHVibGljIGZpbmFsIHN0YXRpYyBUeXBlIFVOVklTSVRFRF9MSU5LID0gbmV3IEVsZW1lbnQoIlVOVklTSVRFRF9MSU5LIik7CisKKyAgICBwdWJsaWMgZmluYWwgc3RhdGljIFR5cGUgRURJVEFCTEVfVEVYVCA9IG5ldyBFbGVtZW50KCJURVhUX0ZJRUxEIiwgIkVESVRBQkxFX1RFWFQiKTsKKyAgICBwdWJsaWMgZmluYWwgc3RhdGljIFR5cGUgQ0hFQ0tCT1ggPSBuZXcgRWxlbWVudCgiQ0hFQ0tCT1giKTsKKyAgICBwdWJsaWMgZmluYWwgc3RhdGljIFR5cGUgQ09NQk9CT1ggPSBuZXcgRWxlbWVudCgiQ09NQk9CT1giKTsKKyAgICBwdWJsaWMgZmluYWwgc3RhdGljIFR5cGUgQlVUVE9OID0gbmV3IEVsZW1lbnQoIkJVVFRPTiIpOworICAgIHB1YmxpYyBmaW5hbCBzdGF0aWMgVHlwZSBSQURJT19CVVRUT04gPSBuZXcgRWxlbWVudCgiUkFESU8iLCAiUkFESU9fQlVUVE9OIik7CisgIH0KKworICBwdWJsaWMgZW51bSBEaXJlY3Rpb24geworICAgIE5FWFQoCisgICAgICBuZXcgQWN0aW9uR2V0dGVyKCkgeworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHVibGljIGludCBnZXRBY3Rpb24gKFR5cGUgdHlwZSkgeworICAgICAgICAgIHJldHVybiB0eXBlLmdldEFjdGlvbkZvck5leHQoKTsKKyAgICAgICAgfQorICAgICAgfQorICAgICksCisKKyAgICBQUkVWSU9VUygKKyAgICAgIG5ldyBBY3Rpb25HZXR0ZXIoKSB7CisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgaW50IGdldEFjdGlvbiAoVHlwZSB0eXBlKSB7CisgICAgICAgICAgcmV0dXJuIHR5cGUuZ2V0QWN0aW9uRm9yUHJldmlvdXMoKTsKKyAgICAgICAgfQorICAgICAgfQorICAgICksCisKKyAgICA7IC8vIGVuZCBvZiBlbnVtZXJhdGlvbgorCisgICAgcHVibGljIGludGVyZmFjZSBBY3Rpb25HZXR0ZXIgeworICAgICAgcHVibGljIGludCBnZXRBY3Rpb24gKFR5cGUgdHlwZSk7CisgICAgfQorCisgICAgcHVibGljIGZpbmFsIEFjdGlvbkdldHRlciBhY3Rpb25HZXR0ZXI7CisKKyAgICBEaXJlY3Rpb24gKEFjdGlvbkdldHRlciBnZXR0ZXIpIHsKKyAgICAgIGFjdGlvbkdldHRlciA9IGdldHRlcjsKKyAgICB9CisKKyAgICBwdWJsaWMgZmluYWwgaW50IGdldEFjdGlvbiAoVHlwZSB0eXBlKSB7CisgICAgICByZXR1cm4gYWN0aW9uR2V0dGVyLmdldEFjdGlvbih0eXBlKTsKKyAgICB9CisgIH0KKworICBwcml2YXRlIGZpbmFsIHN0YXRpYyBNYXA8Q2hhcmFjdGVyLCBTdHJ1Y3R1cmFsTW90aW9uPiBzdHJ1Y3R1cmFsTW90aW9ucyA9CisgICAgICAgICAgICAgICBuZXcgSGFzaE1hcDxDaGFyYWN0ZXIsIFN0cnVjdHVyYWxNb3Rpb24+KCk7CisKKyAgcHVibGljIHN0YXRpYyBTdHJ1Y3R1cmFsTW90aW9uIGdldCAoY2hhciBjaGFyYWN0ZXIpIHsKKyAgICByZXR1cm4gc3RydWN0dXJhbE1vdGlvbnMuZ2V0KGNoYXJhY3Rlcik7CisgIH0KKworICBwcml2YXRlIGZpbmFsIFR5cGUgbW90aW9uVHlwZTsKKyAgcHJpdmF0ZSBmaW5hbCBEaXJlY3Rpb24gbW90aW9uRGlyZWN0aW9uOworCisgIHB1YmxpYyBmaW5hbCBUeXBlIGdldFR5cGUgKCkgeworICAgIHJldHVybiBtb3Rpb25UeXBlOworICB9CisKKyAgcHVibGljIGZpbmFsIERpcmVjdGlvbiBnZXREaXJlY3Rpb24gKCkgeworICAgIHJldHVybiBtb3Rpb25EaXJlY3Rpb247CisgIH0KKworICBwcml2YXRlIGZpbmFsIGludCBhY3Rpb25JZGVudGlmaWVyOworICBwcml2YXRlIGZpbmFsIEJ1bmRsZSBhY3Rpb25Bcmd1bWVudHM7CisKKyAgQE92ZXJyaWRlCisgIHB1YmxpYyBTdHJpbmcgdG9TdHJpbmcgKCkgeworICAgIHJldHVybiBuZXcgU3RyaW5nQnVpbGRlcigpCisgICAgICAgICAgLmFwcGVuZChnZXRDbGFzcygpLmdldFNpbXBsZU5hbWUoKSkuYXBwZW5kKCd7JykKKyAgICAgICAgICAuYXBwZW5kKCJEaXI6IikuYXBwZW5kKG1vdGlvbkRpcmVjdGlvbi5uYW1lKCkudG9Mb3dlckNhc2UoTG9jYWxlLlJPT1QpKQorICAgICAgICAgIC5hcHBlbmQoIiBUeXBlOiIpLmFwcGVuZChtb3Rpb25UeXBlLmdldFR5cGVOYW1lKCkudG9Mb3dlckNhc2UoTG9jYWxlLlJPT1QpKQorICAgICAgICAgIC5hcHBlbmQoIiBBY3Q6IikuYXBwZW5kKGFjdGlvbklkZW50aWZpZXIpCisgICAgICAgICAgLmFwcGVuZCgiIEFyZ3M6IikuYXBwZW5kKGFjdGlvbkFyZ3VtZW50cy50b1N0cmluZygpKQorICAgICAgICAgIC5hcHBlbmQoJ30nKQorICAgICAgICAgIC50b1N0cmluZygpOworICB9CisKKyAgcHVibGljIHN0YXRpYyBTdHJpbmcgdG9TdHJpbmcgKFN0cnVjdHVyYWxNb3Rpb24gbW90aW9uKSB7CisgICAgcmV0dXJuIG1vdGlvbi50b1N0cmluZygpOworICB9CisKKyAgcHVibGljIGZpbmFsIGJvb2xlYW4gYXBwbHkgKEFjY2Vzc2liaWxpdHlOb2RlSW5mbyBub2RlKSB7CisgICAgaWYgKEFwcGxpY2F0aW9uUGFyYW1ldGVycy5FTkFCTEVfTU9USU9OX0xPR0dJTkcpIHsKKyAgICAgIExvZy5kKExPR19UQUcsCisgICAgICAgIFN0cmluZy5mb3JtYXQoCisgICAgICAgICAgImFwcGx5aW5nOiAlcyBGcm9tOiVzIEFmZDolYiIsIHRvU3RyaW5nKCksCisgICAgICAgICAgU2NyZWVuVXRpbGl0aWVzLmdldFRleHQobm9kZSksIG5vZGUuaXNBY2Nlc3NpYmlsaXR5Rm9jdXNlZCgpCisgICAgICAgICkKKyAgICAgICk7CisgICAgfQorCisgICAgcmV0dXJuIFNjcmVlblV0aWxpdGllcy5wZXJmb3JtQWN0aW9uKG5vZGUsIGFjdGlvbklkZW50aWZpZXIsIGFjdGlvbkFyZ3VtZW50cyk7CisgIH0KKworICBwcml2YXRlIFN0cnVjdHVyYWxNb3Rpb24gKFR5cGUgdHlwZSwgRGlyZWN0aW9uIGRpcmVjdGlvbikgeworICAgIG1vdGlvblR5cGUgPSB0eXBlOworICAgIG1vdGlvbkRpcmVjdGlvbiA9IGRpcmVjdGlvbjsKKworICAgIGFjdGlvbklkZW50aWZpZXIgPSBkaXJlY3Rpb24uZ2V0QWN0aW9uKHR5cGUpOworICAgIGFjdGlvbkFyZ3VtZW50cyA9IG5ldyBCdW5kbGUoKTsKKyAgICB0eXBlLnNldFR5cGVBcmd1bWVudChhY3Rpb25Bcmd1bWVudHMpOworICB9CisKKyAgcHJpdmF0ZSBzdGF0aWMgdm9pZCBhZGRNb3Rpb24gKGNoYXIgY2hhcmFjdGVyLCBUeXBlIHR5cGUsIERpcmVjdGlvbiBkaXJlY3Rpb24pIHsKKyAgICBzdHJ1Y3R1cmFsTW90aW9ucy5wdXQoY2hhcmFjdGVyLCBuZXcgU3RydWN0dXJhbE1vdGlvbih0eXBlLCBkaXJlY3Rpb24pKTsKKyAgfQorCisgIHByaXZhdGUgc3RhdGljIHZvaWQgYWRkTW90aW9uIChjaGFyIHByZXZpb3VzLCBjaGFyIG5leHQsIFR5cGUgdHlwZSkgeworICAgIGFkZE1vdGlvbihwcmV2aW91cywgdHlwZSwgRGlyZWN0aW9uLlBSRVZJT1VTKTsKKyAgICBhZGRNb3Rpb24obmV4dCwgdHlwZSwgRGlyZWN0aW9uLk5FWFQpOworICB9CisKKyAgcHVibGljIGZpbmFsIHN0YXRpYyBjaGFyIERPVF9QUkVWSU9VUyAgID0gQnJhaWxsZS5ET1Q3OworICBwdWJsaWMgZmluYWwgc3RhdGljIGNoYXIgRE9UX05FWFQgICAgICAgPSBCcmFpbGxlLkRPVDg7CisgIHB1YmxpYyBmaW5hbCBzdGF0aWMgY2hhciBET1RTX0RJUkVDVElPTiA9IERPVF9QUkVWSU9VUyB8IERPVF9ORVhUOworCisgIHByaXZhdGUgc3RhdGljIHZvaWQgYWRkTW90aW9uIChjaGFyIGNoYXJhY3RlciwgVHlwZSB0eXBlLCBJbnRlZ2VyIGtleSkgeworICAgIGNoYXJhY3RlciB8PSBCcmFpbGxlLlJPVzsKKworICAgIGNoYXIgcHJldmlvdXMgPSBjaGFyYWN0ZXI7CisgICAgcHJldmlvdXMgfD0gRE9UX1BSRVZJT1VTOworCisgICAgY2hhciBuZXh0ID0gY2hhcmFjdGVyOworICAgIG5leHQgfD0gRE9UX05FWFQ7CisKKyAgICBhZGRNb3Rpb24ocHJldmlvdXMsIG5leHQsIHR5cGUpOworICB9CisKKyAgcHJpdmF0ZSBzdGF0aWMgdm9pZCBhZGRNb3Rpb24gKGNoYXIgY2hhcmFjdGVyLCBUeXBlIHR5cGUpIHsKKyAgICBhZGRNb3Rpb24oY2hhcmFjdGVyLCB0eXBlLCBLZXlFdmVudC5LRVlDT0RFX1VOS05PV04pOworICB9CisKKyAgc3RhdGljIHsKKyAgICBhZGRNb3Rpb24oJ1snLCAnXScsIFRleHQuUEFSQUdSQVBIKTsKKyAgICBhZGRNb3Rpb24oJ3snLCAnfScsIFRleHQuUEFHRSk7CisKKyAgICBhZGRNb3Rpb24oJzwnLCAnPicsIEVsZW1lbnQuTUFJTik7CisgICAgYWRkTW90aW9uKCcoJywgJyknLCBFbGVtZW50LkZSQU1FKTsKKworICAgIGFkZE1vdGlvbihCcmFpbGxlLkRPVFNfQSwgRWxlbWVudC5BUlRJQ0xFKTsKKyAgICBhZGRNb3Rpb24oQnJhaWxsZS5ET1RTX0IsIEVsZW1lbnQuQlVUVE9OLCBLZXlFdmVudC5LRVlDT0RFX0IpOworICAgIGFkZE1vdGlvbihCcmFpbGxlLkRPVFNfQywgRWxlbWVudC5DT05UUk9MLCBLZXlFdmVudC5LRVlDT0RFX0MpOworICAgIGFkZE1vdGlvbihCcmFpbGxlLkRPVFNfRCwgRWxlbWVudC5MQU5ETUFSSywgS2V5RXZlbnQuS0VZQ09ERV9EKTsKKyAgICBhZGRNb3Rpb24oQnJhaWxsZS5ET1RTX0UsIEVsZW1lbnQuRURJVEFCTEVfVEVYVCwgS2V5RXZlbnQuS0VZQ09ERV9FKTsKKyAgICBhZGRNb3Rpb24oQnJhaWxsZS5ET1RTX0YsIEVsZW1lbnQuRk9DVVNBQkxFLCBLZXlFdmVudC5LRVlDT0RFX0YpOworICAgIGFkZE1vdGlvbihCcmFpbGxlLkRPVFNfRywgRWxlbWVudC5HUkFQSElDLCBLZXlFdmVudC5LRVlDT0RFX0cpOworICAgIGFkZE1vdGlvbihCcmFpbGxlLkRPVFNfSCwgRWxlbWVudC5IRUFESU5HLCBLZXlFdmVudC5LRVlDT0RFX0gpOworICAgIGFkZE1vdGlvbihCcmFpbGxlLkRPVFNfSSwgRWxlbWVudC5MSVNUX0lURU0sIEtleUV2ZW50LktFWUNPREVfSSk7CisgICAgYWRkTW90aW9uKEJyYWlsbGUuRE9UU19MLCBFbGVtZW50LkxJTkssIEtleUV2ZW50LktFWUNPREVfTCk7CisgICAgYWRkTW90aW9uKEJyYWlsbGUuRE9UU19NLCBFbGVtZW50Lk1FRElBKTsKKyAgICBhZGRNb3Rpb24oQnJhaWxsZS5ET1RTX08sIEVsZW1lbnQuTElTVCwgS2V5RXZlbnQuS0VZQ09ERV9PKTsKKyAgICBhZGRNb3Rpb24oQnJhaWxsZS5ET1RTX1IsIEVsZW1lbnQuUkFESU9fQlVUVE9OKTsKKyAgICBhZGRNb3Rpb24oQnJhaWxsZS5ET1RTX1MsIEVsZW1lbnQuU0VDVElPTik7CisgICAgYWRkTW90aW9uKEJyYWlsbGUuRE9UU19ULCBFbGVtZW50LlRBQkxFLCBLZXlFdmVudC5LRVlDT0RFX1QpOworICAgIGFkZE1vdGlvbihCcmFpbGxlLkRPVFNfVSwgRWxlbWVudC5VTlZJU0lURURfTElOSyk7CisgICAgYWRkTW90aW9uKEJyYWlsbGUuRE9UU19WLCBFbGVtZW50LlZJU0lURURfTElOSyk7CisgICAgYWRkTW90aW9uKEJyYWlsbGUuRE9UU19YLCBFbGVtZW50LkNIRUNLQk9YLCBLZXlFdmVudC5LRVlDT0RFX1gpOworICAgIGFkZE1vdGlvbihCcmFpbGxlLkRPVFNfWiwgRWxlbWVudC5DT01CT0JPWCwgS2V5RXZlbnQuS0VZQ09ERV9aKTsKKworICAgIGFkZE1vdGlvbihCcmFpbGxlLkRPVFNfMSwgRWxlbWVudC5IRUFESU5HXzEsIEtleUV2ZW50LktFWUNPREVfMSk7CisgICAgYWRkTW90aW9uKEJyYWlsbGUuRE9UU18yLCBFbGVtZW50LkhFQURJTkdfMiwgS2V5RXZlbnQuS0VZQ09ERV8yKTsKKyAgICBhZGRNb3Rpb24oQnJhaWxsZS5ET1RTXzMsIEVsZW1lbnQuSEVBRElOR18zLCBLZXlFdmVudC5LRVlDT0RFXzMpOworICAgIGFkZE1vdGlvbihCcmFpbGxlLkRPVFNfNCwgRWxlbWVudC5IRUFESU5HXzQsIEtleUV2ZW50LktFWUNPREVfNCk7CisgICAgYWRkTW90aW9uKEJyYWlsbGUuRE9UU181LCBFbGVtZW50LkhFQURJTkdfNSwgS2V5RXZlbnQuS0VZQ09ERV81KTsKKyAgICBhZGRNb3Rpb24oQnJhaWxsZS5ET1RTXzYsIEVsZW1lbnQuSEVBRElOR182LCBLZXlFdmVudC5LRVlDT0RFXzYpOworICB9Cit9CmRpZmYgLS1naXQgYS9BbmRyb2lkL0dyYWRsZS9hcHAvc3JjL21haW4vamF2YS9vcmcvYTExeS9icmx0dHkvYW5kcm9pZC9TeXN0ZW1TZXJ2aWNlUmVmZXJlbmNlLmphdmEgYi9BbmRyb2lkL0dyYWRsZS9hcHAvc3JjL21haW4vamF2YS9vcmcvYTExeS9icmx0dHkvYW5kcm9pZC9TeXN0ZW1TZXJ2aWNlUmVmZXJlbmNlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmM1YjNmMwotLS0gL2Rldi9udWxsCisrKyBiL0FuZHJvaWQvR3JhZGxlL2FwcC9zcmMvbWFpbi9qYXZhL29yZy9hMTF5L2JybHR0eS9hbmRyb2lkL1N5c3RlbVNlcnZpY2VSZWZlcmVuY2UuamF2YQpAQCAtMCwwICsxLDMzIEBACisvKgorICogQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyAqICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyAqCisgKiBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorICoKKyAqIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyAqCisgKiBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisgKi8KKworcGFja2FnZSBvcmcuYTExeS5icmx0dHkuYW5kcm9pZDsKKworcHVibGljIGZpbmFsIGNsYXNzIFN5c3RlbVNlcnZpY2VSZWZlcmVuY2U8VD4gZXh0ZW5kcyBTaW5nbGV0b25SZWZlcmVuY2U8VD4geworICBwcml2YXRlIGZpbmFsIFN0cmluZyBzZXJ2aWNlTmFtZTsKKworICBAT3ZlcnJpZGUKKyAgcHJvdGVjdGVkIGZpbmFsIFQgb25OZWVkUmVmZXJlbmNlICgpIHsKKyAgICByZXR1cm4gKFQpQnJhaWxsZUFwcGxpY2F0aW9uLmdldCgpLmdldFN5c3RlbVNlcnZpY2Uoc2VydmljZU5hbWUpOworICB9CisKKyAgU3lzdGVtU2VydmljZVJlZmVyZW5jZSAoU3RyaW5nIG5hbWUpIHsKKyAgICBzdXBlcigpOworICAgIHNlcnZpY2VOYW1lID0gbmFtZTsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvQW5kcm9pZC9HcmFkbGUvYXBwL3NyYy9tYWluL2phdmEvb3JnL2ExMXkvYnJsdHR5L2FuZHJvaWQvVGV4dEZpZWxkLmphdmEgYi9BbmRyb2lkL0dyYWRsZS9hcHAvc3JjL21haW4vamF2YS9vcmcvYTExeS9icmx0dHkvYW5kcm9pZC9UZXh0RmllbGQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZGI3MTg2Ci0tLSAvZGV2L251bGwKKysrIGIvQW5kcm9pZC9HcmFkbGUvYXBwL3NyYy9tYWluL2phdmEvb3JnL2ExMXkvYnJsdHR5L2FuZHJvaWQvVGV4dEZpZWxkLmphdmEKQEAgLTAsMCArMSw4NCBAQAorLyoKKyAqIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisgKiAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisgKgorICogQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKK3BhY2thZ2Ugb3JnLmExMXkuYnJsdHR5LmFuZHJvaWQ7CisKK2ltcG9ydCBhbmRyb2lkLnZpZXcuYWNjZXNzaWJpbGl0eS5BY2Nlc3NpYmlsaXR5Tm9kZUluZm87CitpbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7CitpbXBvcnQgamF2YS51dGlsLk1hcDsKKworcHVibGljIGNsYXNzIFRleHRGaWVsZCB7CisgIHB1YmxpYyBUZXh0RmllbGQgKCkgeworICB9CisKKyAgcHJpdmF0ZSBDaGFyU2VxdWVuY2UgYWNjZXNzaWJpbGl0eVRleHQgPSBudWxsOworICBwcml2YXRlIGludCBzZWxlY3Rpb25TdGFydCA9IDA7CisgIHByaXZhdGUgaW50IHNlbGVjdGlvbkVuZCA9IDA7CisKKyAgcHVibGljIGZpbmFsIENoYXJTZXF1ZW5jZSBnZXRBY2Nlc3NpYmlsaXR5VGV4dCAoKSB7CisgICAgcmV0dXJuIGFjY2Vzc2liaWxpdHlUZXh0OworICB9CisKKyAgcHVibGljIGZpbmFsIFRleHRGaWVsZCBzZXRBY2Nlc3NpYmlsaXR5VGV4dCAoQ2hhclNlcXVlbmNlIHRleHQpIHsKKyAgICBzeW5jaHJvbml6ZWQgKHRoaXMpIHsKKyAgICAgIGFjY2Vzc2liaWxpdHlUZXh0ID0gdGV4dDsKKyAgICB9CisKKyAgICByZXR1cm4gdGhpczsKKyAgfQorCisgIHB1YmxpYyBmaW5hbCBpbnQgZ2V0U2VsZWN0aW9uU3RhcnQgKCkgeworICAgIHJldHVybiBzZWxlY3Rpb25TdGFydDsKKyAgfQorCisgIHB1YmxpYyBmaW5hbCBpbnQgZ2V0U2VsZWN0aW9uRW5kICgpIHsKKyAgICByZXR1cm4gc2VsZWN0aW9uRW5kOworICB9CisKKyAgcHVibGljIGZpbmFsIFRleHRGaWVsZCBzZXRTZWxlY3Rpb24gKGludCBzdGFydCwgaW50IGVuZCkgeworICAgIHN5bmNocm9uaXplZCAodGhpcykgeworICAgICAgc2VsZWN0aW9uU3RhcnQgPSBzdGFydDsKKyAgICAgIHNlbGVjdGlvbkVuZCA9IGVuZDsKKyAgICB9CisKKyAgICByZXR1cm4gdGhpczsKKyAgfQorCisgIHB1YmxpYyBmaW5hbCBUZXh0RmllbGQgc2V0Q3Vyc29yIChpbnQgb2Zmc2V0KSB7CisgICAgcmV0dXJuIHNldFNlbGVjdGlvbihvZmZzZXQsIG9mZnNldCk7CisgIH0KKworICBwcml2YXRlIGZpbmFsIHN0YXRpYyBNYXA8QWNjZXNzaWJpbGl0eU5vZGVJbmZvLCBUZXh0RmllbGQ+IHRleHRGaWVsZHMgPQorICAgICAgICAgICAgICAgbmV3IEhhc2hNYXA8QWNjZXNzaWJpbGl0eU5vZGVJbmZvLCBUZXh0RmllbGQ+KCk7CisKKyAgcHVibGljIHN0YXRpYyBUZXh0RmllbGQgZ2V0IChBY2Nlc3NpYmlsaXR5Tm9kZUluZm8gbm9kZSwgYm9vbGVhbiBjYW5DcmVhdGUpIHsKKyAgICBzeW5jaHJvbml6ZWQgKHRleHRGaWVsZHMpIHsKKyAgICAgIFRleHRGaWVsZCBmaWVsZCA9IHRleHRGaWVsZHMuZ2V0KG5vZGUpOworICAgICAgaWYgKGZpZWxkICE9IG51bGwpIHJldHVybiBmaWVsZDsKKyAgICAgIGlmICghY2FuQ3JlYXRlKSByZXR1cm4gbnVsbDsKKworICAgICAgZmllbGQgPSBuZXcgVGV4dEZpZWxkKCk7CisgICAgICB0ZXh0RmllbGRzLnB1dChub2RlLCBmaWVsZCk7CisgICAgICByZXR1cm4gZmllbGQ7CisgICAgfQorICB9CisKKyAgcHVibGljIHN0YXRpYyBUZXh0RmllbGQgZ2V0IChBY2Nlc3NpYmlsaXR5Tm9kZUluZm8gbm9kZSkgeworICAgIHJldHVybiBnZXQobm9kZSwgZmFsc2UpOworICB9Cit9CmRpZmYgLS1naXQgYS9BbmRyb2lkL0dyYWRsZS9hcHAvc3JjL21haW4vamF2YS9vcmcvYTExeS9icmx0dHkvYW5kcm9pZC9Vc2JIZWxwZXIuamF2YSBiL0FuZHJvaWQvR3JhZGxlL2FwcC9zcmMvbWFpbi9qYXZhL29yZy9hMTF5L2JybHR0eS9hbmRyb2lkL1VzYkhlbHBlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIzNmRjZjQKLS0tIC9kZXYvbnVsbAorKysgYi9BbmRyb2lkL0dyYWRsZS9hcHAvc3JjL21haW4vamF2YS9vcmcvYTExeS9icmx0dHkvYW5kcm9pZC9Vc2JIZWxwZXIuamF2YQpAQCAtMCwwICsxLDE1NyBAQAorLyoKKyAqIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisgKiAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisgKgorICogQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKK3BhY2thZ2Ugb3JnLmExMXkuYnJsdHR5LmFuZHJvaWQ7CisKK2ltcG9ydCBhbmRyb2lkLmFwcC5QZW5kaW5nSW50ZW50OworaW1wb3J0IGFuZHJvaWQuY29udGVudC5Ccm9hZGNhc3RSZWNlaXZlcjsKK2ltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29udGV4dDsKK2ltcG9ydCBhbmRyb2lkLmNvbnRlbnQuSW50ZW50OworaW1wb3J0IGFuZHJvaWQuY29udGVudC5JbnRlbnRGaWx0ZXI7CitpbXBvcnQgYW5kcm9pZC5oYXJkd2FyZS51c2IuKjsKK2ltcG9ydCBhbmRyb2lkLnV0aWwuTG9nOworaW1wb3J0IGphdmEubmlvLkJ5dGVCdWZmZXI7CitpbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7CitpbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOworCitwdWJsaWMgY2xhc3MgVXNiSGVscGVyIHsKKyAgcHJpdmF0ZSBmaW5hbCBzdGF0aWMgU3RyaW5nIExPR19UQUcgPSBVc2JIZWxwZXIuY2xhc3MuZ2V0TmFtZSgpOworCisgIHByaXZhdGUgc3RhdGljIENvbnRleHQgdXNiQ29udGV4dDsKKyAgcHJpdmF0ZSBzdGF0aWMgVXNiTWFuYWdlciB1c2JNYW5hZ2VyOworCisgIHByaXZhdGUgc3RhdGljIEJyb2FkY2FzdFJlY2VpdmVyIHBlcm1pc3Npb25SZWNlaXZlcjsKKyAgcHJpdmF0ZSBzdGF0aWMgUGVuZGluZ0ludGVudCBwZXJtaXNzaW9uSW50ZW50OworCisgIHByaXZhdGUgZmluYWwgc3RhdGljIFN0cmluZyBBQ1RJT05fVVNCX1BFUk1JU1NJT04gPQorICAgICJvcmcuYTExeS5icmx0dHkuYW5kcm9pZC5VU0JfUEVSTUlTU0lPTiI7CisKKyAgcHJpdmF0ZSBzdGF0aWMgdm9pZCBtYWtlUGVybWlzc2lvblJlY2VpdmVyICgpIHsKKyAgICBwZXJtaXNzaW9uUmVjZWl2ZXIgPSBuZXcgQnJvYWRjYXN0UmVjZWl2ZXIgKCkgeworICAgICAgQE92ZXJyaWRlCisgICAgICBwdWJsaWMgdm9pZCBvblJlY2VpdmUgKENvbnRleHQgY29udGV4dCwgSW50ZW50IGludGVudCkgeworICAgICAgICBTdHJpbmcgYWN0aW9uID0gaW50ZW50LmdldEFjdGlvbigpOworCisgICAgICAgIGlmIChhY3Rpb24uZXF1YWxzKEFDVElPTl9VU0JfUEVSTUlTU0lPTikpIHsKKyAgICAgICAgICBzeW5jaHJvbml6ZWQgKHRoaXMpIHsKKyAgICAgICAgICAgIFVzYkRldmljZSBkZXZpY2UgPSBpbnRlbnQuZ2V0UGFyY2VsYWJsZUV4dHJhKFVzYk1hbmFnZXIuRVhUUkFfREVWSUNFKTsKKworICAgICAgICAgICAgaWYgKGludGVudC5nZXRCb29sZWFuRXh0cmEoVXNiTWFuYWdlci5FWFRSQV9QRVJNSVNTSU9OX0dSQU5URUQsIGZhbHNlKSkgeworICAgICAgICAgICAgICBMb2cuaShMT0dfVEFHLCAicGVybWlzc2lvbiBncmFudGVkIGZvciBVU0IgZGV2aWNlOiAiICsgZGV2aWNlKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgIExvZy53KExPR19UQUcsICJwZXJtaXNzaW9uIGRlbmllZCBmb3IgVVNCIGRldmljZTogIiArIGRldmljZSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIG5vdGlmeSgpOworICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgfQorICAgIH07CisKKyAgICB7CisgICAgICBJbnRlbnRGaWx0ZXIgZmlsdGVyID0gbmV3IEludGVudEZpbHRlcihBQ1RJT05fVVNCX1BFUk1JU1NJT04pOworICAgICAgdXNiQ29udGV4dC5yZWdpc3RlclJlY2VpdmVyKHBlcm1pc3Npb25SZWNlaXZlciwgZmlsdGVyKTsKKyAgICB9CisKKyAgICBwZXJtaXNzaW9uSW50ZW50ID0gUGVuZGluZ0ludGVudC5nZXRCcm9hZGNhc3QodXNiQ29udGV4dCwgMCwgbmV3IEludGVudChBQ1RJT05fVVNCX1BFUk1JU1NJT04pLCAwKTsKKyAgfQorCisgIHB1YmxpYyBzdGF0aWMgdm9pZCBiZWdpbiAoKSB7CisgICAgdXNiQ29udGV4dCA9IEJyYWlsbGVBcHBsaWNhdGlvbi5nZXQoKTsKKyAgICB1c2JNYW5hZ2VyID0gQXBwbGljYXRpb25VdGlsaXRpZXMuZ2V0VXNiTWFuYWdlcigpOworICAgIG1ha2VQZXJtaXNzaW9uUmVjZWl2ZXIoKTsKKyAgfQorCisgIHB1YmxpYyBzdGF0aWMgdm9pZCBlbmQgKCkgeworICAgIHVzYkNvbnRleHQudW5yZWdpc3RlclJlY2VpdmVyKHBlcm1pc3Npb25SZWNlaXZlcik7CisgIH0KKworICBwdWJsaWMgc3RhdGljIEl0ZXJhdG9yPFVzYkRldmljZT4gZ2V0RGV2aWNlSXRlcmF0b3IgKCkgeworICAgIEhhc2hNYXA8U3RyaW5nLCBVc2JEZXZpY2U+IGRldmljZXMgPSB1c2JNYW5hZ2VyLmdldERldmljZUxpc3QoKTsKKyAgICByZXR1cm4gZGV2aWNlcy52YWx1ZXMoKS5pdGVyYXRvcigpOworICB9CisKKyAgcHVibGljIHN0YXRpYyBVc2JEZXZpY2UgZ2V0TmV4dERldmljZSAoSXRlcmF0b3I8VXNiRGV2aWNlPiBpdGVyYXRvcikgeworICAgIHJldHVybiBpdGVyYXRvci5oYXNOZXh0KCk/IGl0ZXJhdG9yLm5leHQoKTogbnVsbDsKKyAgfQorCisgIHB1YmxpYyBzdGF0aWMgVXNiSW50ZXJmYWNlIGdldERldmljZUludGVyZmFjZSAoVXNiRGV2aWNlIGRldmljZSwgaW50IGlkZW50aWZpZXIpIHsKKyAgICBpbnQgY291bnQgPSBkZXZpY2UuZ2V0SW50ZXJmYWNlQ291bnQoKTsKKworICAgIGZvciAoaW50IGluZGV4PTA7IGluZGV4PGNvdW50OyBpbmRleCs9MSkgeworICAgICAgVXNiSW50ZXJmYWNlIGludGYgPSBkZXZpY2UuZ2V0SW50ZXJmYWNlKGluZGV4KTsKKyAgICAgIGlmIChpZGVudGlmaWVyID09IGludGYuZ2V0SWQoKSkgcmV0dXJuIGludGY7CisgICAgfQorCisgICAgcmV0dXJuIG51bGw7CisgIH0KKworICBwdWJsaWMgc3RhdGljIFVzYkVuZHBvaW50IGdldEludGVyZmFjZUVuZHBvaW50IChVc2JJbnRlcmZhY2UgaW50ZiwgaW50IGFkZHJlc3MpIHsKKyAgICBpbnQgY291bnQgPSBpbnRmLmdldEVuZHBvaW50Q291bnQoKTsKKworICAgIGZvciAoaW50IGluZGV4PTA7IGluZGV4PGNvdW50OyBpbmRleCs9MSkgeworICAgICAgVXNiRW5kcG9pbnQgZW5kcG9pbnQgPSBpbnRmLmdldEVuZHBvaW50KGluZGV4KTsKKyAgICAgIGlmIChhZGRyZXNzID09IGVuZHBvaW50LmdldEFkZHJlc3MoKSkgcmV0dXJuIGVuZHBvaW50OworICAgIH0KKworICAgIHJldHVybiBudWxsOworICB9CisKKyAgcHVibGljIHN0YXRpYyBib29sZWFuIG9idGFpblBlcm1pc3Npb24gKFVzYkRldmljZSBkZXZpY2UpIHsKKyAgICBpZiAodXNiTWFuYWdlci5oYXNQZXJtaXNzaW9uKGRldmljZSkpIHJldHVybiB0cnVlOworICAgIExvZy5kKExPR19UQUcsICJyZXF1ZXN0aW5nIHBlcm1pc3Npb24gZm9yIFVTQiBkZXZpY2U6ICIgKyBkZXZpY2UpOworCisgICAgc3luY2hyb25pemVkIChwZXJtaXNzaW9uUmVjZWl2ZXIpIHsKKyAgICAgIHVzYk1hbmFnZXIucmVxdWVzdFBlcm1pc3Npb24oZGV2aWNlLCBwZXJtaXNzaW9uSW50ZW50KTsKKworICAgICAgdHJ5IHsKKyAgICAgICAgcGVybWlzc2lvblJlY2VpdmVyLndhaXQoKTsKKyAgICAgIH0gY2F0Y2ggKEludGVycnVwdGVkRXhjZXB0aW9uIGV4Y2VwdGlvbikgeworICAgICAgfQorICAgIH0KKworICAgIHJldHVybiB1c2JNYW5hZ2VyLmhhc1Blcm1pc3Npb24oZGV2aWNlKTsKKyAgfQorCisgIHB1YmxpYyBzdGF0aWMgVXNiRGV2aWNlQ29ubmVjdGlvbiBvcGVuRGV2aWNlQ29ubmVjdGlvbiAoVXNiRGV2aWNlIGRldmljZSkgeworICAgIGlmIChvYnRhaW5QZXJtaXNzaW9uKGRldmljZSkpIHsKKyAgICAgIHJldHVybiB1c2JNYW5hZ2VyLm9wZW5EZXZpY2UoZGV2aWNlKTsKKyAgICB9CisKKyAgICByZXR1cm4gbnVsbDsKKyAgfQorCisgIHB1YmxpYyBzdGF0aWMgVXNiUmVxdWVzdCBlbnF1ZXVlUmVxdWVzdCAoVXNiRGV2aWNlQ29ubmVjdGlvbiBjb25uZWN0aW9uLCBVc2JFbmRwb2ludCBlbmRwb2ludCwgYnl0ZVtdIGJ5dGVzKSB7CisgICAgVXNiUmVxdWVzdCByZXF1ZXN0ID0gbmV3IFVzYlJlcXVlc3QoKTsKKworICAgIGlmIChyZXF1ZXN0LmluaXRpYWxpemUoY29ubmVjdGlvbiwgZW5kcG9pbnQpKSB7CisgICAgICBCeXRlQnVmZmVyIGJ1ZmZlciA9IEJ5dGVCdWZmZXIud3JhcChieXRlcyk7CisgICAgICByZXF1ZXN0LnNldENsaWVudERhdGEoYnl0ZXMpOworICAgICAgaWYgKHJlcXVlc3QucXVldWUoYnVmZmVyLCBieXRlcy5sZW5ndGgpKSByZXR1cm4gcmVxdWVzdDsKKworICAgICAgcmVxdWVzdC5jbG9zZSgpOworICAgIH0KKworICAgIHJldHVybiBudWxsOworICB9CisKKyAgcHVibGljIHN0YXRpYyB2b2lkIGNhbmNlbFJlcXVlc3QgKFVzYlJlcXVlc3QgcmVxdWVzdCkgeworICAgIHJlcXVlc3QuY2FuY2VsKCk7CisgICAgcmVxdWVzdC5jbG9zZSgpOworICB9Cit9CmRpZmYgLS1naXQgYS9BbmRyb2lkL0dyYWRsZS9hcHAvc3JjL21haW4vamF2YS9vcmcvYTExeS9icmx0dHkvYW5kcm9pZC9WaXJ0dWFsU2NyZWVuRWxlbWVudC5qYXZhIGIvQW5kcm9pZC9HcmFkbGUvYXBwL3NyYy9tYWluL2phdmEvb3JnL2ExMXkvYnJsdHR5L2FuZHJvaWQvVmlydHVhbFNjcmVlbkVsZW1lbnQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNzNmOGIwCi0tLSAvZGV2L251bGwKKysrIGIvQW5kcm9pZC9HcmFkbGUvYXBwL3NyYy9tYWluL2phdmEvb3JnL2ExMXkvYnJsdHR5L2FuZHJvaWQvVmlydHVhbFNjcmVlbkVsZW1lbnQuamF2YQpAQCAtMCwwICsxLDQ5IEBACisvKgorICogQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyAqICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyAqCisgKiBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorICoKKyAqIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyAqCisgKiBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisgKi8KKworcGFja2FnZSBvcmcuYTExeS5icmx0dHkuYW5kcm9pZDsKKworaW1wb3J0IGFuZHJvaWQudmlldy5LZXlFdmVudDsKKworcHVibGljIGNsYXNzIFZpcnR1YWxTY3JlZW5FbGVtZW50IGV4dGVuZHMgU2NyZWVuRWxlbWVudCB7CisgIHByaXZhdGUgZmluYWwgaW50IGdsb2JhbEFjdGlvbjsKKyAgcHJpdmF0ZSBmaW5hbCBpbnQga2V5Q29kZTsKKworICBAT3ZlcnJpZGUKKyAgcHVibGljIGJvb2xlYW4gb25DbGljayAoKSB7CisgICAgaWYgKEFQSVRlc3RzLmhhdmVKZWxseUJlYW4pIHsKKyAgICAgIHJldHVybiBCcmFpbGxlU2VydmljZS5nZXRCcmFpbGxlU2VydmljZSgpLnBlcmZvcm1HbG9iYWxBY3Rpb24oZ2xvYmFsQWN0aW9uKTsKKyAgICB9CisKKyAgICBpZiAoa2V5Q29kZSAhPSBLZXlFdmVudC5LRVlDT0RFX1VOS05PV04pIHsKKyAgICAgIHJldHVybiBJbnB1dFNlcnZpY2UuaW5qZWN0S2V5KGtleUNvZGUpOworICAgIH0KKworICAgIHJldHVybiBzdXBlci5vbkNsaWNrKCk7CisgIH0KKworICBwdWJsaWMgVmlydHVhbFNjcmVlbkVsZW1lbnQgKGludCB0ZXh0LCBpbnQgYWN0aW9uLCBpbnQga2V5KSB7CisgICAgc3VwZXIodGV4dCk7CisgICAgZ2xvYmFsQWN0aW9uID0gYWN0aW9uOworICAgIGtleUNvZGUgPSBrZXk7CisgIH0KKworICBwdWJsaWMgVmlydHVhbFNjcmVlbkVsZW1lbnQgKGludCB0ZXh0LCBpbnQgYWN0aW9uKSB7CisgICAgdGhpcyh0ZXh0LCBhY3Rpb24sIEtleUV2ZW50LktFWUNPREVfVU5LTk9XTik7CisgIH0KK30KZGlmZiAtLWdpdCBhL0FuZHJvaWQvR3JhZGxlL2FwcC9zcmMvbWFpbi9qYXZhL29yZy9hMTF5L2JybHR0eS9hbmRyb2lkL2FjdGl2aXRpZXMvQWJvdXRBY3Rpdml0eS5qYXZhIGIvQW5kcm9pZC9HcmFkbGUvYXBwL3NyYy9tYWluL2phdmEvb3JnL2ExMXkvYnJsdHR5L2FuZHJvaWQvYWN0aXZpdGllcy9BYm91dEFjdGl2aXR5LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTc2OGU5NQotLS0gL2Rldi9udWxsCisrKyBiL0FuZHJvaWQvR3JhZGxlL2FwcC9zcmMvbWFpbi9qYXZhL29yZy9hMTF5L2JybHR0eS9hbmRyb2lkL2FjdGl2aXRpZXMvQWJvdXRBY3Rpdml0eS5qYXZhCkBAIC0wLDAgKzEsNjIgQEAKKy8qCisgKiBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorICogICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorICoKKyAqIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorICoKKyAqIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyAqLworCitwYWNrYWdlIG9yZy5hMTF5LmJybHR0eS5hbmRyb2lkLmFjdGl2aXRpZXM7CisKK2ltcG9ydCBhbmRyb2lkLmNvbnRlbnQucG0uUGFja2FnZUluZm87CitpbXBvcnQgYW5kcm9pZC5jb250ZW50LnBtLlBhY2thZ2VNYW5hZ2VyOworaW1wb3J0IGFuZHJvaWQub3MuQnVuZGxlOworaW1wb3J0IGFuZHJvaWQudXRpbC5Mb2c7CitpbXBvcnQgYW5kcm9pZC52aWV3LlZpZXc7CitpbXBvcnQgYW5kcm9pZC53aWRnZXQuVGV4dFZpZXc7CitpbXBvcnQgb3JnLmExMXkuYnJsdHR5LmFuZHJvaWQuKjsKKworcHVibGljIGNsYXNzIEFib3V0QWN0aXZpdHkgZXh0ZW5kcyBJbnRlcm5hbEFjdGl2aXR5IHsKKyAgcHJpdmF0ZSBmaW5hbCBzdGF0aWMgU3RyaW5nIExPR19UQUcgPSBBYm91dEFjdGl2aXR5LmNsYXNzLmdldE5hbWUoKTsKKworICBwdWJsaWMgdm9pZCB2aWV3UHJpdmFjeVBvbGljeSAoVmlldyB2aWV3KSB7CisgICAgbGF1bmNoKFIuc3RyaW5nLnByaXZhY3lfcG9saWN5X3VybCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB2aWV3R29vZ2xlUGxheSAoVmlldyB2aWV3KSB7CisgICAgbGF1bmNoKFIuc3RyaW5nLmdvb2dsZV9wbGF5X3VybCk7CisgIH0KKworICBwcml2YXRlIGZpbmFsIHZvaWQgc2V0VGV4dCAoaW50IHZpZXcsIENoYXJTZXF1ZW5jZSB0ZXh0KSB7CisgICAgKChUZXh0VmlldylmaW5kVmlld0J5SWQodmlldykpLnNldFRleHQodGV4dCk7CisgIH0KKworICBAT3ZlcnJpZGUKKyAgcHJvdGVjdGVkIHZvaWQgb25DcmVhdGUgKEJ1bmRsZSBzYXZlZFN0YXRlKSB7CisgICAgc3VwZXIub25DcmVhdGUoc2F2ZWRTdGF0ZSk7CisgICAgc2V0Q29udGVudFZpZXcoUi5sYXlvdXQuYWJvdXRfYWN0aXZpdHkpOworCisgICAgU3RyaW5nIG5hbWUgPSBnZXRQYWNrYWdlTmFtZSgpOworICAgIHRyeSB7CisgICAgICBQYWNrYWdlSW5mbyBpbmZvID0gZ2V0UGFja2FnZU1hbmFnZXIoKS5nZXRQYWNrYWdlSW5mbyhuYW1lLCAwKTsKKworICAgICAgc2V0VGV4dChSLmlkLmFwcF92ZXJzaW9uX25hbWUsIGluZm8udmVyc2lvbk5hbWUpOworICAgIH0gY2F0Y2ggKFBhY2thZ2VNYW5hZ2VyLk5hbWVOb3RGb3VuZEV4Y2VwdGlvbiBleGNlcHRpb24pIHsKKyAgICAgIExvZy53KExPR19UQUcsICgicGFja2FnZSBpbmZvcm1hdGlvbiBub3QgZm91bmQ6ICIgKyBuYW1lKSk7CisgICAgfQorICB9CisKKyAgcHVibGljIHN0YXRpYyB2b2lkIGxhdW5jaCAoKSB7CisgICAgQXBwbGljYXRpb25VdGlsaXRpZXMubGF1bmNoKEFib3V0QWN0aXZpdHkuY2xhc3MpOworICB9Cit9CmRpZmYgLS1naXQgYS9BbmRyb2lkL0dyYWRsZS9hcHAvc3JjL21haW4vamF2YS9vcmcvYTExeS9icmx0dHkvYW5kcm9pZC9hY3Rpdml0aWVzL0FjdGlvbnNBY3Rpdml0eS5qYXZhIGIvQW5kcm9pZC9HcmFkbGUvYXBwL3NyYy9tYWluL2phdmEvb3JnL2ExMXkvYnJsdHR5L2FuZHJvaWQvYWN0aXZpdGllcy9BY3Rpb25zQWN0aXZpdHkuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MWE0NTFkCi0tLSAvZGV2L251bGwKKysrIGIvQW5kcm9pZC9HcmFkbGUvYXBwL3NyYy9tYWluL2phdmEvb3JnL2ExMXkvYnJsdHR5L2FuZHJvaWQvYWN0aXZpdGllcy9BY3Rpb25zQWN0aXZpdHkuamF2YQpAQCAtMCwwICsxLDE0MiBAQAorLyoKKyAqIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisgKiAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisgKgorICogQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKK3BhY2thZ2Ugb3JnLmExMXkuYnJsdHR5LmFuZHJvaWQuYWN0aXZpdGllczsKKworaW1wb3J0IGFuZHJvaWQuY29udGVudC5JbnRlbnQ7CitpbXBvcnQgYW5kcm9pZC5uZXQuVXJpOworaW1wb3J0IGFuZHJvaWQub3MuQnVuZGxlOworaW1wb3J0IGFuZHJvaWQudmlldy5WaWV3OworaW1wb3J0IGFuZHJvaWQud2lkZ2V0LkNoZWNrQm94OworaW1wb3J0IGphdmEuaW8uRmlsZTsKK2ltcG9ydCBvcmcuYTExeS5icmx0dHkuYW5kcm9pZC4qOworaW1wb3J0IG9yZy5hMTF5LmJybHR0eS5hbmRyb2lkLnNldHRpbmdzLlNldHRpbmdzQWN0aXZpdHk7CisKK3B1YmxpYyBjbGFzcyBBY3Rpb25zQWN0aXZpdHkgZXh0ZW5kcyBJbnRlcm5hbEFjdGl2aXR5IHsKKyAgcHVibGljIHZvaWQgc3dpdGNoSW5wdXRNZXRob2QgKFZpZXcgdmlldykgeworICAgIElucHV0U2VydmljZS5zd2l0Y2hJbnB1dE1ldGhvZCgpOworICB9CisKKyAgcHVibGljIHZvaWQgbGF1bmNoU2V0dGluZ3NBY3Rpdml0eSAoVmlldyB2aWV3KSB7CisgICAgU2V0dGluZ3NBY3Rpdml0eS5sYXVuY2goKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHZpZXdVc2VyR3VpZGUgKFZpZXcgdmlldykgeworICAgIGxhdW5jaChSLnN0cmluZy51c2VyX2d1aWRlX3VybCk7CisgIH0KKworICBwdWJsaWMgdm9pZCBicm93c2VXZWJTaXRlIChWaWV3IHZpZXcpIHsKKyAgICBsYXVuY2goUi5zdHJpbmcuYXBwQ29uZmlnX3dlYlNpdGUpOworICB9CisKKyAgcHVibGljIHZvaWQgYnJvd3NlQ29tbXVuaXR5TWVzc2FnZXMgKFZpZXcgdmlldykgeworICAgIGxhdW5jaChSLnN0cmluZy5jb21tdW5pdHlfbWVzc2FnZXNfdXJsKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHBvc3RDb21tdW5pdHlNZXNzYWdlIChWaWV3IHZpZXcpIHsKKyAgICBJbnRlbnQgaW50ZW50ID0gbmV3IEludGVudChJbnRlbnQuQUNUSU9OX1NFTkRUTywgVXJpLnBhcnNlKCJtYWlsdG86IikpOworCisgICAgeworICAgICAgU3RyaW5nQnVpbGRlciByZWNpcGllbnQgPSBuZXcgU3RyaW5nQnVpbGRlcigpOworICAgICAgcmVjaXBpZW50LmFwcGVuZCgiQlJMVFRZIE1haWxpbmcgTGlzdCIpOworICAgICAgcmVjaXBpZW50LmFwcGVuZCgnICcpOworICAgICAgcmVjaXBpZW50LmFwcGVuZCgnPCcpOworICAgICAgcmVjaXBpZW50LmFwcGVuZChnZXRSZXNvdXJjZVN0cmluZyhSLnN0cmluZy5hcHBDb25maWdfZW1haWxBZGRyZXNzKSk7CisgICAgICByZWNpcGllbnQuYXBwZW5kKCc+Jyk7CisgICAgICBpbnRlbnQucHV0RXh0cmEoSW50ZW50LkVYVFJBX0VNQUlMLCBuZXcgU3RyaW5nW10ge3JlY2lwaWVudC50b1N0cmluZygpfSk7CisgICAgfQorCisgICAgbGF1bmNoKGludGVudCk7CisgIH0KKworICBwdWJsaWMgdm9pZCBtYW5hZ2VDb21tdW5pdHlNZW1iZXJzaGlwIChWaWV3IHZpZXcpIHsKKyAgICBsYXVuY2goUi5zdHJpbmcuY29tbXVuaXR5X21lbWJlcnNoaXBfdXJsKTsKKyAgfQorCisgIHByaXZhdGUgVmlld1tdIHVwZGF0ZUFwcGxpY2F0aW9uT3B0aW9ucyA9IG51bGw7CisgIHByaXZhdGUgQ2hlY2tCb3ggZGV2ZWxvcGVyQnVpbGQgPSBudWxsOworICBwcml2YXRlIENoZWNrQm94IGFsbG93RG93bmdyYWRlID0gbnVsbDsKKworICBwdWJsaWMgdm9pZCB1cGRhdGVBcHBsaWNhdGlvbiAoVmlldyB2aWV3KSB7CisgICAgRmlsZSBkaXJlY3RvcnkgPSBuZXcgRmlsZShnZXRDYWNoZURpcigpLCAicHVibGljIik7CisgICAgZGlyZWN0b3J5Lm1rZGlyKCk7CisgICAgRmlsZSBmaWxlID0gbmV3IEZpbGUoZGlyZWN0b3J5LCAibGF0ZXN0LmFwayIpOworCisgICAgaW50IHVybCA9CisgICAgICBkZXZlbG9wZXJCdWlsZC5pc0NoZWNrZWQoKT8KKyAgICAgIFIuc3RyaW5nLmRldmVsb3Blcl9wYWNrYWdlX3VybDoKKyAgICAgIFIuc3RyaW5nLmFwcGxpY2F0aW9uX3BhY2thZ2VfdXJsOworCisgICAgbmV3IFBhY2thZ2VJbnN0YWxsZXIodGhpcywgdXJsLCBmaWxlKSB7CisgICAgICBAT3ZlcnJpZGUKKyAgICAgIHByb3RlY3RlZCB2b2lkIG9uSW5zdGFsbEZhaWxlZCAoU3RyaW5nIG1lc3NhZ2UpIHsKKyAgICAgICAgc2hvd01lc3NhZ2UoCisgICAgICAgICAgU3RyaW5nLmZvcm1hdCgKKyAgICAgICAgICAgICIlczogJXMiLAorICAgICAgICAgICAgZ2V0U3RyaW5nKFIuc3RyaW5nLnVwZGF0ZUFwcGxpY2F0aW9uX3Byb2JsZW1fZmFpbGVkKSwKKyAgICAgICAgICAgIG1lc3NhZ2UKKyAgICAgICAgICApCisgICAgICAgICk7CisgICAgICB9CisgICAgfS5zZXRBbGxvd0Rvd25ncmFkZShhbGxvd0Rvd25ncmFkZS5pc0NoZWNrZWQoKSkKKyAgICAgLnN0YXJ0SW5zdGFsbCgpOworICB9CisKKyAgcHVibGljIHZvaWQgbGF1bmNoQWJvdXRBY3Rpdml0eSAoVmlldyB2aWV3KSB7CisgICAgQWJvdXRBY3Rpdml0eS5sYXVuY2goKTsKKyAgfQorCisgIEBPdmVycmlkZQorICBwcm90ZWN0ZWQgdm9pZCBvbkNyZWF0ZSAoQnVuZGxlIHNhdmVkU3RhdGUpIHsKKyAgICBzdXBlci5vbkNyZWF0ZShzYXZlZFN0YXRlKTsKKyAgICBzZXRDb250ZW50VmlldyhSLmxheW91dC5hY3Rpb25zX2FjdGl2aXR5KTsKKworICAgIGRldmVsb3BlckJ1aWxkID0gZmluZFZpZXdCeUlkKFIuaWQuR0xPQkFMX0NIRUNLQk9YX0RFVkVMT1BFUl9CVUlMRCk7CisgICAgYWxsb3dEb3duZ3JhZGUgPSBmaW5kVmlld0J5SWQoUi5pZC5HTE9CQUxfQ0hFQ0tCT1hfQUxMT1dfRE9XTkdSQURFKTsKKworICAgIHVwZGF0ZUFwcGxpY2F0aW9uT3B0aW9ucyA9IG5ldyBWaWV3W10geworICAgICAgZGV2ZWxvcGVyQnVpbGQsCisgICAgICBhbGxvd0Rvd25ncmFkZQorICAgIH07CisKKyAgICBmb3IgKFZpZXcgb3B0aW9uIDogdXBkYXRlQXBwbGljYXRpb25PcHRpb25zKSB7CisgICAgICBvcHRpb24uc2V0VmlzaWJpbGl0eShWaWV3LkdPTkUpOworICAgIH0KKworICAgIHsKKyAgICAgIFZpZXcgYnV0dG9uID0gZmluZFZpZXdCeUlkKFIuaWQuR0xPQkFMX0JVVFRPTl9VUERBVEVfQVBQTElDQVRJT04pOworCisgICAgICBidXR0b24uc2V0T25Mb25nQ2xpY2tMaXN0ZW5lcigKKyAgICAgICAgbmV3IFZpZXcuT25Mb25nQ2xpY2tMaXN0ZW5lcigpIHsKKyAgICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgICBwdWJsaWMgYm9vbGVhbiBvbkxvbmdDbGljayAoVmlldyB2aWV3KSB7CisgICAgICAgICAgICBmb3IgKFZpZXcgb3B0aW9uIDogdXBkYXRlQXBwbGljYXRpb25PcHRpb25zKSB7CisgICAgICAgICAgICAgIG9wdGlvbi5zZXRWaXNpYmlsaXR5KFZpZXcuVklTSUJMRSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgKTsKKyAgICB9CisgIH0KKworICBwdWJsaWMgc3RhdGljIHZvaWQgbGF1bmNoICgpIHsKKyAgICBBcHBsaWNhdGlvblV0aWxpdGllcy5sYXVuY2goQWN0aW9uc0FjdGl2aXR5LmNsYXNzKTsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvQW5kcm9pZC9HcmFkbGUvYXBwL3NyYy9tYWluL2phdmEvb3JnL2ExMXkvYnJsdHR5L2FuZHJvaWQvYWN0aXZpdGllcy9GaWxlRG93bmxvYWRlci5qYXZhIGIvQW5kcm9pZC9HcmFkbGUvYXBwL3NyYy9tYWluL2phdmEvb3JnL2ExMXkvYnJsdHR5L2FuZHJvaWQvYWN0aXZpdGllcy9GaWxlRG93bmxvYWRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjczYTNjYmUKLS0tIC9kZXYvbnVsbAorKysgYi9BbmRyb2lkL0dyYWRsZS9hcHAvc3JjL21haW4vamF2YS9vcmcvYTExeS9icmx0dHkvYW5kcm9pZC9hY3Rpdml0aWVzL0ZpbGVEb3dubG9hZGVyLmphdmEKQEAgLTAsMCArMSwyNzEgQEAKKy8qCisgKiBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorICogICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorICoKKyAqIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorICoKKyAqIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyAqLworCitwYWNrYWdlIG9yZy5hMTF5LmJybHR0eS5hbmRyb2lkLmFjdGl2aXRpZXM7CisKK2ltcG9ydCBhbmRyb2lkLmFwcC5BbGVydERpYWxvZzsKK2ltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29udGV4dDsKK2ltcG9ydCBhbmRyb2lkLm9zLkFzeW5jVGFzazsKK2ltcG9ydCBhbmRyb2lkLnV0aWwuTG9nOworaW1wb3J0IGFuZHJvaWQudmlldy5MYXlvdXRJbmZsYXRlcjsKK2ltcG9ydCBhbmRyb2lkLnZpZXcuVmlldzsKK2ltcG9ydCBhbmRyb2lkLndpZGdldC5Qcm9ncmVzc0JhcjsKK2ltcG9ydCBhbmRyb2lkLndpZGdldC5UZXh0VmlldzsKK2ltcG9ydCBqYXZhLmlvLkZpbGU7CitpbXBvcnQgamF2YS5pby5GaWxlT3V0cHV0U3RyZWFtOworaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247CitpbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLmlvLk91dHB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLm5ldC5IdHRwVVJMQ29ubmVjdGlvbjsKK2ltcG9ydCBqYXZhLm5ldC5VUkw7CitpbXBvcnQgamF2YS51dGlsLkxvY2FsZTsKK2ltcG9ydCBvcmcuYTExeS5icmx0dHkuYW5kcm9pZC4qOworCitwdWJsaWMgY2xhc3MgRmlsZURvd25sb2FkZXIgZXh0ZW5kcyBVcGdyYWRlQ29tcG9uZW50IHsKKyAgcHJpdmF0ZSBmaW5hbCBzdGF0aWMgU3RyaW5nIExPR19UQUcgPSBGaWxlRG93bmxvYWRlci5jbGFzcy5nZXROYW1lKCk7CisKKyAgcHJvdGVjdGVkIGZpbmFsIFN0cmluZyBzb3VyY2VVUkw7CisgIHByb3RlY3RlZCBmaW5hbCBGaWxlIHRhcmdldEZpbGU7CisKKyAgcHVibGljIEZpbGVEb3dubG9hZGVyIChJbnRlcm5hbEFjdGl2aXR5IG93bmVyLCBTdHJpbmcgdXJsLCBGaWxlIGZpbGUpIHsKKyAgICBzdXBlcihvd25lcik7CisgICAgc291cmNlVVJMID0gdXJsOworICAgIHRhcmdldEZpbGUgPSBmaWxlOworICB9CisKKyAgcHJvdGVjdGVkIHZvaWQgb25Eb3dubG9hZFN0YXJ0ZWQgKCkgeworICB9CisKKyAgcHJvdGVjdGVkIHZvaWQgb25Eb3dubG9hZFByb2dyZXNzIChsb25nIHRpbWUsIGxvbmcgcG9zaXRpb24sIExvbmcgbGVuZ3RoKSB7CisgICAgaWYgKGZhbHNlKSB7CisgICAgICBsb25nIHJlbWFpbmluZyA9IChsZW5ndGggPT0gbnVsbCk/IC0xOiAobGVuZ3RoIC0gcG9zaXRpb24pOworICAgICAgTG9nLmQoImRubGQtcHJvZyIsIFN0cmluZy5mb3JtYXQoInQ9JWQgcD0lZCByPSVkIiwgdGltZSwgcG9zaXRpb24sIHJlbWFpbmluZykpOworICAgIH0KKyAgfQorCisgIHByb3RlY3RlZCB2b2lkIG9uRG93bmxvYWRGaW5pc2hlZCAoKSB7CisgIH0KKworICBwcm90ZWN0ZWQgdm9pZCBvbkRvd25sb2FkRmFpbGVkIChTdHJpbmcgbWVzc2FnZSkgeworICAgIGdldEFjdGl2aXR5KCkuc2hvd01lc3NhZ2UoCisgICAgICBTdHJpbmcuZm9ybWF0KAorICAgICAgICAiJXM6ICVzIiwKKyAgICAgICAgZ2V0U3RyaW5nKFIuc3RyaW5nLmZpbGVEb3dubG9hZGVyX3Byb2JsZW1fZmFpbGVkKSwKKyAgICAgICAgbWVzc2FnZQorICAgICAgKQorICAgICk7CisgIH0KKworICBwdWJsaWMgZmluYWwgdm9pZCBzdGFydERvd25sb2FkICgpIHsKKyAgICBuZXcgQXN5bmNUYXNrPE9iamVjdCwgT2JqZWN0LCBTdHJpbmc+KCkgeworICAgICAgcHJpdmF0ZSBmaW5hbCBPYmplY3QgUFJPR1JFU1NfTE9DSyA9IG5ldyBPYmplY3QoKTsKKyAgICAgIHByaXZhdGUgYm9vbGVhbiBwcm9ncmVzc0luaXRpYWxpemVkID0gZmFsc2U7CisKKyAgICAgIHByaXZhdGUgbG9uZyBzdGFydFRpbWU7CisgICAgICBwcml2YXRlIGxvbmcgY3VycmVudFRpbWU7CisgICAgICBwcml2YXRlIGxvbmcgY3VycmVudFBvc2l0aW9uOworICAgICAgcHJpdmF0ZSBMb25nIGNvbnRlbnRMZW5ndGg7CisKKyAgICAgIHByaXZhdGUgQWxlcnREaWFsb2cgYWxlcnREaWFsb2c7CisgICAgICBwcml2YXRlIFRleHRWaWV3IHN0YXRlVmlldzsKKyAgICAgIHByaXZhdGUgVmlldyBwcm9ncmVzc1ZpZXc7CisgICAgICBwcml2YXRlIFByb2dyZXNzQmFyIHByb2dyZXNzQmFyOworICAgICAgcHJpdmF0ZSBUZXh0VmlldyBwcm9ncmVzc0N1cnJlbnQ7CisgICAgICBwcml2YXRlIFRleHRWaWV3IHByb2dyZXNzUmVtYWluaW5nOworCisgICAgICBwcml2YXRlIGxvbmcgZ2V0VGltZSAoKSB7CisgICAgICAgIHJldHVybiBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKKyAgICAgIH0KKworICAgICAgcHJpdmF0ZSB2b2lkIHNldFN0YXRlIChpbnQgc3RhdGUpIHsKKyAgICAgICAgc3RhdGVWaWV3LnNldFRleHQoc3RhdGUpOworICAgICAgfQorCisgICAgICBwcml2YXRlIHZvaWQgc2V0Qnl0ZXMgKFRleHRWaWV3IHZpZXcsIGxvbmcgdmFsdWUpIHsKKyAgICAgICAgdmlldy5zZXRUZXh0KFN0cmluZy5mb3JtYXQoTG9jYWxlLmdldERlZmF1bHQoKSwgIiVkIiwgdmFsdWUpKTsKKyAgICAgIH0KKworICAgICAgcHJpdmF0ZSBBbGVydERpYWxvZyBtYWtlRGlhbG9nICgpIHsKKyAgICAgICAgQWxlcnREaWFsb2cuQnVpbGRlciBidWlsZGVyID0gbmV3IEFsZXJ0RGlhbG9nLkJ1aWxkZXIoZ2V0QWN0aXZpdHkoKSkKKyAgICAgICAgICAuc2V0VGl0bGUoUi5zdHJpbmcuZmlsZURvd25sb2FkZXJfdGl0bGUpCisgICAgICAgICAgLnNldE1lc3NhZ2Uoc291cmNlVVJMKQorICAgICAgICAgIDsKKworICAgICAgICB7CisgICAgICAgICAgaW50IGxheW91dCA9IFIubGF5b3V0LmZpbGVfZG93bmxvYWRlcjsKKworICAgICAgICAgIGlmIChBUElUZXN0cy5oYXZlTG9sbGlwb3ApIHsKKyAgICAgICAgICAgIGJ1aWxkZXIuc2V0VmlldyhsYXlvdXQpOworICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBDb250ZXh0IGNvbnRleHQgPSBidWlsZGVyLmdldENvbnRleHQoKTsKKyAgICAgICAgICAgIExheW91dEluZmxhdGVyIGluZmxhdGVyID0gKExheW91dEluZmxhdGVyKWNvbnRleHQuZ2V0U3lzdGVtU2VydmljZShDb250ZXh0LkxBWU9VVF9JTkZMQVRFUl9TRVJWSUNFKTsKKyAgICAgICAgICAgIGJ1aWxkZXIuc2V0VmlldyhpbmZsYXRlci5pbmZsYXRlKGxheW91dCwgbnVsbCkpOworICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBidWlsZGVyLmNyZWF0ZSgpOworICAgICAgfQorCisgICAgICBwcml2YXRlIHZvaWQgc2hvd0RpYWxvZyAoKSB7CisgICAgICAgIGFsZXJ0RGlhbG9nID0gbWFrZURpYWxvZygpOworICAgICAgICBhbGVydERpYWxvZy5zaG93KCk7CisKKyAgICAgICAgc3RhdGVWaWV3ID0gKFRleHRWaWV3KWFsZXJ0RGlhbG9nLmZpbmRWaWV3QnlJZChSLmlkLnN0YXRlKTsKKyAgICAgICAgcHJvZ3Jlc3NWaWV3ID0gYWxlcnREaWFsb2cuZmluZFZpZXdCeUlkKFIuaWQucHJvZ3Jlc3MpOworICAgICAgICBwcm9ncmVzc0JhciA9IChQcm9ncmVzc0JhcilhbGVydERpYWxvZy5maW5kVmlld0J5SWQoUi5pZC5iYXIpOworICAgICAgICBwcm9ncmVzc0N1cnJlbnQgPSAoVGV4dFZpZXcpYWxlcnREaWFsb2cuZmluZFZpZXdCeUlkKFIuaWQuY3VycmVudCk7CisgICAgICAgIHByb2dyZXNzUmVtYWluaW5nID0gKFRleHRWaWV3KWFsZXJ0RGlhbG9nLmZpbmRWaWV3QnlJZChSLmlkLnJlbWFpbmluZyk7CisgICAgICB9CisKKyAgICAgIEBPdmVycmlkZQorICAgICAgcHJvdGVjdGVkIHZvaWQgb25Qcm9ncmVzc1VwZGF0ZSAoT2JqZWN0Li4uIGFyZ3VtZW50cykgeworICAgICAgICBzeW5jaHJvbml6ZWQgKFBST0dSRVNTX0xPQ0spIHsKKyAgICAgICAgICBpZiAoIXByb2dyZXNzSW5pdGlhbGl6ZWQpIHsKKyAgICAgICAgICAgIHByb2dyZXNzVmlldy5zZXRWaXNpYmlsaXR5KFZpZXcuVklTSUJMRSk7CisgICAgICAgICAgICBzZXRTdGF0ZShSLnN0cmluZy5maWxlRG93bmxvYWRlcl9zdGF0ZV9kb3dubG9hZGluZyk7CisKKyAgICAgICAgICAgIGlmIChjb250ZW50TGVuZ3RoID09IG51bGwpIHsKKyAgICAgICAgICAgICAgcHJvZ3Jlc3NCYXIuc2V0SW5kZXRlcm1pbmF0ZSh0cnVlKTsKKyAgICAgICAgICAgICAgcHJvZ3Jlc3NSZW1haW5pbmcuc2V0VmlzaWJpbGl0eShWaWV3LkdPTkUpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgcHJvZ3Jlc3NCYXIuc2V0SW5kZXRlcm1pbmF0ZShmYWxzZSk7CisgICAgICAgICAgICAgIHByb2dyZXNzQmFyLnNldE1heCgoaW50KShsb25nKWNvbnRlbnRMZW5ndGgpOworCisgICAgICAgICAgICAgIGlmIChBUElUZXN0cy5oYXZlT3JlbykgeworICAgICAgICAgICAgICAgIHByb2dyZXNzQmFyLnNldE1pbigwKTsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBwcm9ncmVzc0luaXRpYWxpemVkID0gdHJ1ZTsKKyAgICAgICAgICB9CisKKyAgICAgICAgICBwcm9ncmVzc0Jhci5zZXRQcm9ncmVzcygoaW50KWN1cnJlbnRQb3NpdGlvbik7CisgICAgICAgICAgc2V0Qnl0ZXMocHJvZ3Jlc3NDdXJyZW50LCBjdXJyZW50UG9zaXRpb24pOworCisgICAgICAgICAgaWYgKGNvbnRlbnRMZW5ndGggIT0gbnVsbCkgeworICAgICAgICAgICAgc2V0Qnl0ZXMocHJvZ3Jlc3NSZW1haW5pbmcsIChjdXJyZW50UG9zaXRpb24gLSBjb250ZW50TGVuZ3RoKSk7CisgICAgICAgICAgfQorCisgICAgICAgICAgb25Eb3dubG9hZFByb2dyZXNzKGN1cnJlbnRUaW1lLCBjdXJyZW50UG9zaXRpb24sIGNvbnRlbnRMZW5ndGgpOworICAgICAgICB9CisgICAgICB9CisKKyAgICAgIHByaXZhdGUgdm9pZCBjb3B5IChJbnB1dFN0cmVhbSBpbnB1dCwgT3V0cHV0U3RyZWFtIG91dHB1dCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKKyAgICAgICAgc3luY2hyb25pemVkIChQUk9HUkVTU19MT0NLKSB7CisgICAgICAgICAgY3VycmVudFBvc2l0aW9uID0gMDsKKyAgICAgICAgICBwdWJsaXNoUHJvZ3Jlc3MoKTsKKyAgICAgICAgfQorCisgICAgICAgIGJ5dGVbXSBidWZmZXIgPSBuZXcgYnl0ZVswWDEwMDBdOworICAgICAgICBpbnQgY291bnQ7CisKKyAgICAgICAgd2hpbGUgKChjb3VudCA9IGlucHV0LnJlYWQoYnVmZmVyKSkgIT0gLTEpIHsKKyAgICAgICAgICBvdXRwdXQud3JpdGUoYnVmZmVyLCAwLCBjb3VudCk7CisgICAgICAgICAgY3VycmVudFBvc2l0aW9uICs9IGNvdW50OworCisgICAgICAgICAgc3luY2hyb25pemVkIChQUk9HUkVTU19MT0NLKSB7CisgICAgICAgICAgICBsb25nIG5ld1RpbWUgPSBnZXRUaW1lKCkgLSBzdGFydFRpbWU7CisKKyAgICAgICAgICAgIGlmICgobmV3VGltZSAtIGN1cnJlbnRUaW1lKSA+IDEwMCkgeworICAgICAgICAgICAgICBjdXJyZW50VGltZSA9IG5ld1RpbWU7CisgICAgICAgICAgICAgIHB1Ymxpc2hQcm9ncmVzcygpOworICAgICAgICAgICAgfQorICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHN5bmNocm9uaXplZCAoUFJPR1JFU1NfTE9DSykgeworICAgICAgICAgIHB1Ymxpc2hQcm9ncmVzcygpOworICAgICAgICB9CisgICAgICB9CisKKyAgICAgIEBPdmVycmlkZQorICAgICAgcHJvdGVjdGVkIHZvaWQgb25QcmVFeGVjdXRlICgpIHsKKyAgICAgICAgb25Eb3dubG9hZFN0YXJ0ZWQoKTsKKyAgICAgICAgc2hvd0RpYWxvZygpOworICAgICAgICBzZXRTdGF0ZShSLnN0cmluZy5maWxlRG93bmxvYWRlcl9zdGF0ZV9jb25uZWN0aW5nKTsKKyAgICAgIH0KKworICAgICAgQE92ZXJyaWRlCisgICAgICBwcm90ZWN0ZWQgU3RyaW5nIGRvSW5CYWNrZ3JvdW5kIChPYmplY3QuLi4gYXJndW1lbnRzKSB7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgVVJMIHVybCA9IG5ldyBVUkwoc291cmNlVVJMKTsKKyAgICAgICAgICBIdHRwVVJMQ29ubmVjdGlvbiBjb25uZWN0aW9uID0gKEh0dHBVUkxDb25uZWN0aW9uKXVybC5vcGVuQ29ubmVjdGlvbigpOworICAgICAgICAgIGNvbm5lY3Rpb24uc2V0UmVxdWVzdE1ldGhvZCgiR0VUIik7CisgICAgICAgICAgY29ubmVjdGlvbi5jb25uZWN0KCk7CisKKyAgICAgICAgICB0cnkgeworICAgICAgICAgICAgSW5wdXRTdHJlYW0gaW5wdXQgPSBjb25uZWN0aW9uLmdldElucHV0U3RyZWFtKCk7CisKKyAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgIEZpbGUgZmlsZSA9IHRhcmdldEZpbGU7CisgICAgICAgICAgICAgIGZpbGUuZGVsZXRlKCk7CisKKyAgICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICBPdXRwdXRTdHJlYW0gb3V0cHV0ID0gbmV3IEZpbGVPdXRwdXRTdHJlYW0oZmlsZSk7CisKKyAgICAgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgICAgaWYgKEFQSVRlc3RzLmhhdmVOb3VnYXQpIHsKKyAgICAgICAgICAgICAgICAgICAgY29udGVudExlbmd0aCA9IGNvbm5lY3Rpb24uZ2V0Q29udGVudExlbmd0aExvbmcoKTsKKyAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGNvbnRlbnRMZW5ndGggPSAobG9uZyljb25uZWN0aW9uLmdldENvbnRlbnRMZW5ndGgoKTsKKyAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgaWYgKGNvbnRlbnRMZW5ndGggPCAwKSBjb250ZW50TGVuZ3RoID0gbnVsbDsKKyAgICAgICAgICAgICAgICAgIHN0YXJ0VGltZSA9IGdldFRpbWUoKTsKKyAgICAgICAgICAgICAgICAgIGN1cnJlbnRUaW1lID0gMDsKKworICAgICAgICAgICAgICAgICAgY29weShpbnB1dCwgb3V0cHV0KTsKKyAgICAgICAgICAgICAgICAgIG91dHB1dC5mbHVzaCgpOworCisgICAgICAgICAgICAgICAgICBmaWxlID0gbnVsbDsKKyAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsOworICAgICAgICAgICAgICAgIH0gZmluYWxseSB7CisgICAgICAgICAgICAgICAgICBvdXRwdXQuY2xvc2UoKTsKKyAgICAgICAgICAgICAgICAgIG91dHB1dCA9IG51bGw7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICB9IGZpbmFsbHkgeworICAgICAgICAgICAgICAgIGlmIChmaWxlICE9IG51bGwpIGZpbGUuZGVsZXRlKCk7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZmluYWxseSB7CisgICAgICAgICAgICAgIGlucHV0LmNsb3NlKCk7CisgICAgICAgICAgICAgIGlucHV0ID0gbnVsbDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9IGZpbmFsbHkgeworICAgICAgICAgICAgY29ubmVjdGlvbi5kaXNjb25uZWN0KCk7CisgICAgICAgICAgICBjb25uZWN0aW9uID0gbnVsbDsKKyAgICAgICAgICB9CisgICAgICAgIH0gY2F0Y2ggKElPRXhjZXB0aW9uIGV4Y2VwdGlvbikgeworICAgICAgICAgIFN0cmluZyBtZXNzYWdlID0gZXhjZXB0aW9uLmdldE1lc3NhZ2UoKTsKKyAgICAgICAgICBMb2cudyhMT0dfVEFHLCBTdHJpbmcuZm9ybWF0KCJmaWxlIGRvd25sb2FkIGZhaWxlZDogJXM6ICVzIiwgc291cmNlVVJMLCBtZXNzYWdlKSk7CisgICAgICAgICAgcmV0dXJuIG1lc3NhZ2U7CisgICAgICAgIH0KKyAgICAgIH0KKworICAgICAgQE92ZXJyaWRlCisgICAgICBwcm90ZWN0ZWQgdm9pZCBvblBvc3RFeGVjdXRlIChTdHJpbmcgbWVzc2FnZSkgeworICAgICAgICBhbGVydERpYWxvZy5kaXNtaXNzKCk7CisKKyAgICAgICAgaWYgKG1lc3NhZ2UgPT0gbnVsbCkgeworICAgICAgICAgIG9uRG93bmxvYWRGaW5pc2hlZCgpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgIG9uRG93bmxvYWRGYWlsZWQobWVzc2FnZSk7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9LmV4ZWN1dGUoKTsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvQW5kcm9pZC9HcmFkbGUvYXBwL3NyYy9tYWluL2phdmEvb3JnL2ExMXkvYnJsdHR5L2FuZHJvaWQvYWN0aXZpdGllcy9JbnRlcm5hbEFjdGl2aXR5LmphdmEgYi9BbmRyb2lkL0dyYWRsZS9hcHAvc3JjL21haW4vamF2YS9vcmcvYTExeS9icmx0dHkvYW5kcm9pZC9hY3Rpdml0aWVzL0ludGVybmFsQWN0aXZpdHkuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZjBiMjMzCi0tLSAvZGV2L251bGwKKysrIGIvQW5kcm9pZC9HcmFkbGUvYXBwL3NyYy9tYWluL2phdmEvb3JnL2ExMXkvYnJsdHR5L2FuZHJvaWQvYWN0aXZpdGllcy9JbnRlcm5hbEFjdGl2aXR5LmphdmEKQEAgLTAsMCArMSw5NCBAQAorLyoKKyAqIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisgKiAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisgKgorICogQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKK3BhY2thZ2Ugb3JnLmExMXkuYnJsdHR5LmFuZHJvaWQuYWN0aXZpdGllczsKKworaW1wb3J0IGFuZHJvaWQuYXBwLkFjdGl2aXR5OworaW1wb3J0IGFuZHJvaWQuYXBwLkFsZXJ0RGlhbG9nOworaW1wb3J0IGFuZHJvaWQuY29udGVudC5BY3Rpdml0eU5vdEZvdW5kRXhjZXB0aW9uOworaW1wb3J0IGFuZHJvaWQuY29udGVudC5EaWFsb2dJbnRlcmZhY2U7CitpbXBvcnQgYW5kcm9pZC5jb250ZW50LkludGVudDsKK2ltcG9ydCBhbmRyb2lkLm5ldC5Vcmk7CitpbXBvcnQgYW5kcm9pZC51dGlsLkxvZzsKK2ltcG9ydCBhbmRyb2lkLndpZGdldC5Ub2FzdDsKK2ltcG9ydCBqYXZhLmlvLkZpbGU7CitpbXBvcnQgb3JnLmExMXkuYnJsdHR5LmFuZHJvaWQuKjsKKworcHVibGljIGFic3RyYWN0IGNsYXNzIEludGVybmFsQWN0aXZpdHkgZXh0ZW5kcyBBY3Rpdml0eSB7CisgIHByaXZhdGUgZmluYWwgc3RhdGljIFN0cmluZyBMT0dfVEFHID0gSW50ZXJuYWxBY3Rpdml0eS5jbGFzcy5nZXROYW1lKCk7CisKKyAgcHJvdGVjdGVkIGZpbmFsIFN0cmluZyBnZXRSZXNvdXJjZVN0cmluZyAoaW50IGlkZW50aWZpZXIpIHsKKyAgICByZXR1cm4gZ2V0UmVzb3VyY2VzKCkuZ2V0U3RyaW5nKGlkZW50aWZpZXIpOworICB9CisKKyAgcHJvdGVjdGVkIGZpbmFsIHZvaWQgc2hvd01lc3NhZ2UgKENoYXJTZXF1ZW5jZSBtZXNzYWdlLCBib29sZWFuIGFzVG9hc3QpIHsKKyAgICBpZiAoYXNUb2FzdCkgeworICAgICAgVG9hc3QubWFrZVRleHQodGhpcywgbWVzc2FnZSwgVG9hc3QuTEVOR1RIX0xPTkcpLnNob3coKTsKKyAgICB9IGVsc2UgeworICAgICAgRGlhbG9nSW50ZXJmYWNlLk9uQ2xpY2tMaXN0ZW5lciBsaXN0ZW5lciA9CisgICAgICAgIG5ldyBEaWFsb2dJbnRlcmZhY2UuT25DbGlja0xpc3RlbmVyKCkgeworICAgICAgICAgIEBPdmVycmlkZQorICAgICAgICAgIHB1YmxpYyB2b2lkIG9uQ2xpY2sgKERpYWxvZ0ludGVyZmFjZSBkaWFsb2csIGludCBidXR0b24pIHsKKyAgICAgICAgICAgIGRpYWxvZy5kaXNtaXNzKCk7CisgICAgICAgICAgfQorICAgICAgICB9OworCisgICAgICBuZXcgQWxlcnREaWFsb2cuQnVpbGRlcih0aGlzKQorICAgICAgICAuc2V0TWVzc2FnZShtZXNzYWdlKQorICAgICAgICAuc2V0TmV1dHJhbEJ1dHRvbihhbmRyb2lkLlIuc3RyaW5nLnllcywgbGlzdGVuZXIpCisgICAgICAgIC5jcmVhdGUoKQorICAgICAgICAuc2hvdygpOworICAgIH0KKyAgfQorCisgIHByb3RlY3RlZCBmaW5hbCB2b2lkIHNob3dNZXNzYWdlIChDaGFyU2VxdWVuY2UgbWVzc2FnZSkgeworICAgIHNob3dNZXNzYWdlKG1lc3NhZ2UsIGZhbHNlKTsKKyAgfQorCisgIHByb3RlY3RlZCBmaW5hbCB2b2lkIHNob3dNZXNzYWdlIChpbnQgbWVzc2FnZSwgYm9vbGVhbiBhc1RvYXN0KSB7CisgICAgc2hvd01lc3NhZ2UoZ2V0UmVzb3VyY2VTdHJpbmcobWVzc2FnZSksIGFzVG9hc3QpOworICB9CisKKyAgcHJvdGVjdGVkIGZpbmFsIHZvaWQgc2hvd01lc3NhZ2UgKGludCBtZXNzYWdlKSB7CisgICAgc2hvd01lc3NhZ2UobWVzc2FnZSwgZmFsc2UpOworICB9CisKKyAgcHJvdGVjdGVkIGZpbmFsIHZvaWQgbGF1bmNoIChJbnRlbnQgaW50ZW50KSB7CisgICAgdHJ5IHsKKyAgICAgIHN0YXJ0QWN0aXZpdHkoaW50ZW50KTsKKyAgICB9IGNhdGNoIChBY3Rpdml0eU5vdEZvdW5kRXhjZXB0aW9uIGV4Y2VwdGlvbikgeworICAgICAgTG9nLncoTE9HX1RBRywgImFjdGl2aXR5IG5vdCBmb3VuZCIsIGV4Y2VwdGlvbik7CisgICAgfQorICB9CisKKyAgcHJvdGVjdGVkIGZpbmFsIHZvaWQgbGF1bmNoIChVcmkgdXJpKSB7CisgICAgbGF1bmNoKG5ldyBJbnRlbnQoSW50ZW50LkFDVElPTl9WSUVXLCB1cmkpKTsKKyAgfQorCisgIHByb3RlY3RlZCBmaW5hbCB2b2lkIGxhdW5jaCAoRmlsZSBmaWxlKSB7CisgICAgbGF1bmNoKFVyaS5mcm9tRmlsZShmaWxlKSk7CisgIH0KKworICBwcm90ZWN0ZWQgZmluYWwgdm9pZCBsYXVuY2ggKFN0cmluZyB1cmwpIHsKKyAgICBsYXVuY2goVXJpLnBhcnNlKHVybCkpOworICB9CisKKyAgcHJvdGVjdGVkIGZpbmFsIHZvaWQgbGF1bmNoIChpbnQgdXJsKSB7CisgICAgbGF1bmNoKGdldFJlc291cmNlU3RyaW5nKHVybCkpOworICB9Cit9CmRpZmYgLS1naXQgYS9BbmRyb2lkL0dyYWRsZS9hcHAvc3JjL21haW4vamF2YS9vcmcvYTExeS9icmx0dHkvYW5kcm9pZC9hY3Rpdml0aWVzL1BhY2thZ2VJbnN0YWxsZXIuamF2YSBiL0FuZHJvaWQvR3JhZGxlL2FwcC9zcmMvbWFpbi9qYXZhL29yZy9hMTF5L2JybHR0eS9hbmRyb2lkL2FjdGl2aXRpZXMvUGFja2FnZUluc3RhbGxlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ4YzhkZGUKLS0tIC9kZXYvbnVsbAorKysgYi9BbmRyb2lkL0dyYWRsZS9hcHAvc3JjL21haW4vamF2YS9vcmcvYTExeS9icmx0dHkvYW5kcm9pZC9hY3Rpdml0aWVzL1BhY2thZ2VJbnN0YWxsZXIuamF2YQpAQCAtMCwwICsxLDE4MCBAQAorLyoKKyAqIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisgKiAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisgKgorICogQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKK3BhY2thZ2Ugb3JnLmExMXkuYnJsdHR5LmFuZHJvaWQuYWN0aXZpdGllczsKKworaW1wb3J0IGFuZHJvaWQuY29udGVudC5BY3Rpdml0eU5vdEZvdW5kRXhjZXB0aW9uOworaW1wb3J0IGFuZHJvaWQuY29udGVudC5JbnRlbnQ7CitpbXBvcnQgYW5kcm9pZC5jb250ZW50LnBtLlBhY2thZ2VJbmZvOworaW1wb3J0IGFuZHJvaWQuY29udGVudC5wbS5QYWNrYWdlTWFuYWdlcjsKK2ltcG9ydCBhbmRyb2lkLm5ldC5Vcmk7CitpbXBvcnQgYW5kcm9pZC51dGlsLkxvZzsKK2ltcG9ydCBhbmRyb2lkeC5jb3JlLmNvbnRlbnQuRmlsZVByb3ZpZGVyOworaW1wb3J0IGphdmEuaW8uRmlsZTsKK2ltcG9ydCBqYXZhLnV0aWwuTG9jYWxlOworaW1wb3J0IG9yZy5hMTF5LmJybHR0eS5hbmRyb2lkLio7CisKK3B1YmxpYyBjbGFzcyBQYWNrYWdlSW5zdGFsbGVyIGV4dGVuZHMgVXBncmFkZUNvbXBvbmVudCB7CisgIHByaXZhdGUgZmluYWwgc3RhdGljIFN0cmluZyBMT0dfVEFHID0gUGFja2FnZUluc3RhbGxlci5jbGFzcy5nZXROYW1lKCk7CisKKyAgcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgUFJPVklERVJfQVVUSE9SSVRZID0gIm9yZy5hMTF5LmJybHR0eS5hbmRyb2lkLmZpbGVwcm92aWRlciI7CisgIHB1YmxpYyBmaW5hbCBzdGF0aWMgU3RyaW5nIE1JTUVfVFlQRSA9ICJhcHBsaWNhdGlvbi92bmQuYW5kcm9pZC5wYWNrYWdlLWFyY2hpdmUiOworCisgIHByaXZhdGUgZmluYWwgU3RyaW5nIHNvdXJjZVVSTDsKKyAgcHJpdmF0ZSBmaW5hbCBGaWxlIHRhcmdldEZpbGU7CisgIHByaXZhdGUgYm9vbGVhbiBhbGxvd0Rvd25ncmFkZSA9IGZhbHNlOworCisgIHB1YmxpYyBQYWNrYWdlSW5zdGFsbGVyIChJbnRlcm5hbEFjdGl2aXR5IG93bmVyLCBTdHJpbmcgdXJsLCBGaWxlIGZpbGUpIHsKKyAgICBzdXBlcihvd25lcik7CisgICAgc291cmNlVVJMID0gdXJsOworICAgIHRhcmdldEZpbGUgPSBmaWxlOworICB9CisKKyAgcHVibGljIFBhY2thZ2VJbnN0YWxsZXIgKEludGVybmFsQWN0aXZpdHkgb3duZXIsIGludCB1cmwsIEZpbGUgZmlsZSkgeworICAgIHRoaXMob3duZXIsIG93bmVyLmdldFJlc291cmNlcygpLmdldFN0cmluZyh1cmwpLCBmaWxlKTsKKyAgfQorCisgIHB1YmxpYyBmaW5hbCBQYWNrYWdlSW5zdGFsbGVyIHNldEFsbG93RG93bmdyYWRlIChib29sZWFuIHllcykgeworICAgIGFsbG93RG93bmdyYWRlID0geWVzOworICAgIHJldHVybiB0aGlzOworICB9CisKKyAgcHJpdmF0ZSBmaW5hbCBQYWNrYWdlTWFuYWdlciBnZXRQYWNrYWdlTWFuYWdlciAoKSB7CisgICAgcmV0dXJuIGdldEFjdGl2aXR5KCkuZ2V0UGFja2FnZU1hbmFnZXIoKTsKKyAgfQorCisgIHByaXZhdGUgZmluYWwgU3RyaW5nIGdldFBhY2thZ2VOYW1lICgpIHsKKyAgICByZXR1cm4gZ2V0QWN0aXZpdHkoKS5nZXRQYWNrYWdlTmFtZSgpOworICB9CisKKyAgcHJpdmF0ZSBmaW5hbCBQYWNrYWdlSW5mbyBnZXRQYWNrYWdlSW5mbyAoU3RyaW5nIG5hbWUpIHsKKyAgICB0cnkgeworICAgICAgcmV0dXJuIGdldFBhY2thZ2VNYW5hZ2VyKCkuZ2V0UGFja2FnZUluZm8obmFtZSwgMCk7CisgICAgfSBjYXRjaCAoUGFja2FnZU1hbmFnZXIuTmFtZU5vdEZvdW5kRXhjZXB0aW9uIGV4Y2VwdGlvbikgeworICAgICAgTG9nLncoTE9HX1RBRywgKCJwYWNrYWdlIG5vdCBpbnN0YWxsZWQ6ICIgKyBuYW1lKSk7CisgICAgfQorCisgICAgcmV0dXJuIG51bGw7CisgIH0KKworICBwcml2YXRlIGZpbmFsIFBhY2thZ2VJbmZvIGdldFBhY2thZ2VJbmZvICgpIHsKKyAgICByZXR1cm4gZ2V0UGFja2FnZUluZm8oZ2V0UGFja2FnZU5hbWUoKSk7CisgIH0KKworICBwcml2YXRlIGZpbmFsIFBhY2thZ2VJbmZvIGdldFBhY2thZ2VJbmZvIChGaWxlIGZpbGUpIHsKKyAgICByZXR1cm4gZ2V0UGFja2FnZU1hbmFnZXIoKS5nZXRQYWNrYWdlQXJjaGl2ZUluZm8oZmlsZS5nZXRBYnNvbHV0ZVBhdGgoKSwgMCk7CisgIH0KKworICBwcm90ZWN0ZWQgdm9pZCBvbkluc3RhbGxGYWlsZWQgKFN0cmluZyBtZXNzYWdlKSB7CisgICAgZ2V0QWN0aXZpdHkoKS5zaG93TWVzc2FnZSgKKyAgICAgIFN0cmluZy5mb3JtYXQoCisgICAgICAgICIlczogJXMiLAorICAgICAgICBnZXRTdHJpbmcoUi5zdHJpbmcucGFja2FnZUluc3RhbGxlcl9wcm9ibGVtX2ZhaWxlZCksCisgICAgICAgIG1lc3NhZ2UKKyAgICAgICkKKyAgICApOworICB9CisKKyAgcHJpdmF0ZSB2b2lkIG9uSW5zdGFsbEZhaWxlZCAoRXhjZXB0aW9uIGV4Y2VwdGlvbikgeworICAgIFN0cmluZyBtZXNzYWdlID0gZXhjZXB0aW9uLmdldE1lc3NhZ2UoKTsKKyAgICBMb2cudyhMT0dfVEFHLCBTdHJpbmcuZm9ybWF0KCJwYWNrYWdlIGluc3RhbGwgZmFpbGVkOiAlczogJXMiLCBzb3VyY2VVUkwsIG1lc3NhZ2UpKTsKKyAgICBvbkluc3RhbGxGYWlsZWQobWVzc2FnZSk7CisgIH0KKworICBwcml2YXRlIGZpbmFsIGJvb2xlYW4gaXNVcGdyYWRlIChQYWNrYWdlSW5mbyBvbGRJbmZvLCBQYWNrYWdlSW5mbyBuZXdJbmZvKSB7CisgICAgaW50IG9sZENvZGUgPSBvbGRJbmZvLnZlcnNpb25Db2RlOworICAgIGludCBuZXdDb2RlID0gbmV3SW5mby52ZXJzaW9uQ29kZTsKKworICAgIFN0cmluZyBvbGROYW1lID0gb2xkSW5mby52ZXJzaW9uTmFtZTsKKyAgICBTdHJpbmcgbmV3TmFtZSA9IG5ld0luZm8udmVyc2lvbk5hbWU7CisKKyAgICBpZiAobmV3Q29kZSA9PSBvbGRDb2RlKSB7CisgICAgICBvbkluc3RhbGxGYWlsZWQoCisgICAgICAgIFN0cmluZy5mb3JtYXQoTG9jYWxlLlJPT1QsCisgICAgICAgICAgIiVzOiAlcyAoJWQpIiwKKyAgICAgICAgICBnZXRTdHJpbmcoUi5zdHJpbmcucGFja2FnZUluc3RhbGxlcl9wcm9ibGVtX3NhbWUpLAorICAgICAgICAgIG5ld05hbWUsIG5ld0NvZGUKKyAgICAgICAgKQorICAgICAgKTsKKworICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGlmIChuZXdDb2RlIDwgb2xkQ29kZSkgeworICAgICAgZmluYWwgU3RyaW5nIG9wZXJhdG9yID0gIjwiOworCisgICAgICBvbkluc3RhbGxGYWlsZWQoCisgICAgICAgIFN0cmluZy5mb3JtYXQoTG9jYWxlLlJPT1QsCisgICAgICAgICAgIiVzOiAlcyAlcyAlcyAoJWQgJXMgJWQpIiwKKyAgICAgICAgICBnZXRTdHJpbmcoUi5zdHJpbmcucGFja2FnZUluc3RhbGxlcl9wcm9ibGVtX2Rvd25ncmFkZSksCisgICAgICAgICAgbmV3TmFtZSwgb3BlcmF0b3IsIG9sZE5hbWUsCisgICAgICAgICAgbmV3Q29kZSwgb3BlcmF0b3IsIG9sZENvZGUKKyAgICAgICAgKQorICAgICAgKTsKKworICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHJldHVybiB0cnVlOworICB9CisKKyAgcHJpdmF0ZSBmaW5hbCBib29sZWFuIGNhbkluc3RhbGxQYWNrYWdlICgpIHsKKyAgICBpZiAoYWxsb3dEb3duZ3JhZGUpIHJldHVybiB0cnVlOworCisgICAgUGFja2FnZUluZm8gb2xkSW5mbyA9IGdldFBhY2thZ2VJbmZvKCk7CisgICAgUGFja2FnZUluZm8gbmV3SW5mbyA9IGdldFBhY2thZ2VJbmZvKHRhcmdldEZpbGUpOworCisgICAgaWYgKG9sZEluZm8gPT0gbnVsbCkgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIGlzVXBncmFkZShvbGRJbmZvLCBuZXdJbmZvKTsKKyAgfQorCisgIHB1YmxpYyBmaW5hbCB2b2lkIHN0YXJ0SW5zdGFsbCAoKSB7CisgICAgbmV3IEZpbGVEb3dubG9hZGVyKGdldEFjdGl2aXR5KCksIHNvdXJjZVVSTCwgdGFyZ2V0RmlsZSkgeworICAgICAgQE92ZXJyaWRlCisgICAgICBwcm90ZWN0ZWQgdm9pZCBvbkRvd25sb2FkRmluaXNoZWQgKCkgeworICAgICAgICBpZiAoY2FuSW5zdGFsbFBhY2thZ2UoKSkgeworICAgICAgICAgIFVyaSB1cmk7CisgICAgICAgICAgaW50IGZsYWdzOworCisgICAgICAgICAgaWYgKEFQSVRlc3RzLmhhdmVOb3VnYXQpIHsKKyAgICAgICAgICAgIHVyaSA9IEZpbGVQcm92aWRlci5nZXRVcmlGb3JGaWxlKGdldEFjdGl2aXR5KCksIFBST1ZJREVSX0FVVEhPUklUWSwgdGFyZ2V0RmlsZSk7CisgICAgICAgICAgICBmbGFncyA9IEludGVudC5GTEFHX0dSQU5UX1JFQURfVVJJX1BFUk1JU1NJT047CisgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHVyaSA9IFVyaS5mcm9tRmlsZSh0YXJnZXRGaWxlKTsKKyAgICAgICAgICAgIGZsYWdzID0gSW50ZW50LkZMQUdfQUNUSVZJVFlfTkVXX1RBU0s7CisgICAgICAgICAgfQorCisgICAgICAgICAgSW50ZW50IGludGVudCA9IG5ldyBJbnRlbnQoSW50ZW50LkFDVElPTl9WSUVXKTsKKyAgICAgICAgICBpbnRlbnQuc2V0RGF0YUFuZFR5cGUodXJpLCBNSU1FX1RZUEUpOworICAgICAgICAgIGludGVudC5zZXRGbGFncyhmbGFncyk7CisKKyAgICAgICAgICB0cnkgeworICAgICAgICAgICAgZ2V0QWN0aXZpdHkoKS5zdGFydEFjdGl2aXR5KGludGVudCk7CisgICAgICAgICAgfSBjYXRjaCAoQWN0aXZpdHlOb3RGb3VuZEV4Y2VwdGlvbiBleGNlcHRpb24pIHsKKyAgICAgICAgICAgIG9uSW5zdGFsbEZhaWxlZChleGNlcHRpb24pOworICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgfQorCisgICAgICBAT3ZlcnJpZGUKKyAgICAgIHByb3RlY3RlZCB2b2lkIG9uRG93bmxvYWRGYWlsZWQgKFN0cmluZyBtZXNzYWdlKSB7CisgICAgICAgIG9uSW5zdGFsbEZhaWxlZChtZXNzYWdlKTsKKyAgICAgIH0KKyAgICB9LnN0YXJ0RG93bmxvYWQoKTsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvQW5kcm9pZC9HcmFkbGUvYXBwL3NyYy9tYWluL2phdmEvb3JnL2ExMXkvYnJsdHR5L2FuZHJvaWQvYWN0aXZpdGllcy9VcGdyYWRlQ29tcG9uZW50LmphdmEgYi9BbmRyb2lkL0dyYWRsZS9hcHAvc3JjL21haW4vamF2YS9vcmcvYTExeS9icmx0dHkvYW5kcm9pZC9hY3Rpdml0aWVzL1VwZ3JhZGVDb21wb25lbnQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOTczODAzCi0tLSAvZGV2L251bGwKKysrIGIvQW5kcm9pZC9HcmFkbGUvYXBwL3NyYy9tYWluL2phdmEvb3JnL2ExMXkvYnJsdHR5L2FuZHJvaWQvYWN0aXZpdGllcy9VcGdyYWRlQ29tcG9uZW50LmphdmEKQEAgLTAsMCArMSw0NyBAQAorLyoKKyAqIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisgKiAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisgKgorICogQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKK3BhY2thZ2Ugb3JnLmExMXkuYnJsdHR5LmFuZHJvaWQuYWN0aXZpdGllczsKKworaW1wb3J0IGFuZHJvaWQuY29udGVudC5yZXMuUmVzb3VyY2VzOworaW1wb3J0IG9yZy5hMTF5LmJybHR0eS5hbmRyb2lkLio7CisKK3B1YmxpYyBhYnN0cmFjdCBjbGFzcyBVcGdyYWRlQ29tcG9uZW50IHsKKyAgcHJpdmF0ZSBmaW5hbCBJbnRlcm5hbEFjdGl2aXR5IG93bmluZ0FjdGl2aXR5OworCisgIHByb3RlY3RlZCBVcGdyYWRlQ29tcG9uZW50IChJbnRlcm5hbEFjdGl2aXR5IG93bmVyKSB7CisgICAgb3duaW5nQWN0aXZpdHkgPSBvd25lcjsKKyAgfQorCisgIHByb3RlY3RlZCBmaW5hbCBJbnRlcm5hbEFjdGl2aXR5IGdldEFjdGl2aXR5ICgpIHsKKyAgICByZXR1cm4gb3duaW5nQWN0aXZpdHk7CisgIH0KKworICBwcm90ZWN0ZWQgZmluYWwgUmVzb3VyY2VzIGdldFJlc291cmNlcyAoKSB7CisgICAgcmV0dXJuIGdldEFjdGl2aXR5KCkuZ2V0UmVzb3VyY2VzKCk7CisgIH0KKworICBwcm90ZWN0ZWQgZmluYWwgU3RyaW5nIGdldFN0cmluZyAoaW50IHJlc291cmNlLCBib29sZWFuIHVudHJhbnNsYXRlZCkgeworICAgIGlmICh1bnRyYW5zbGF0ZWQpIGdldFJlc291cmNlcygpLmdldFN0cmluZyhyZXNvdXJjZSk7CisgICAgcmV0dXJuIGdldEFjdGl2aXR5KCkuZ2V0U3RyaW5nKHJlc291cmNlKTsKKyAgfQorCisgIHByb3RlY3RlZCBmaW5hbCBTdHJpbmcgZ2V0U3RyaW5nIChpbnQgcmVzb3VyY2UpIHsKKyAgICByZXR1cm4gZ2V0U3RyaW5nKHJlc291cmNlLCBmYWxzZSk7CisgIH0KK30KZGlmZiAtLWdpdCBhL0FuZHJvaWQvR3JhZGxlL2FwcC9zcmMvbWFpbi9qYXZhL29yZy9hMTF5L2JybHR0eS9hbmRyb2lkL3NldHRpbmdzL0FkdmFuY2VkU2V0dGluZ3MuamF2YSBiL0FuZHJvaWQvR3JhZGxlL2FwcC9zcmMvbWFpbi9qYXZhL29yZy9hMTF5L2JybHR0eS9hbmRyb2lkL3NldHRpbmdzL0FkdmFuY2VkU2V0dGluZ3MuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZWM2ZjY1Ci0tLSAvZGV2L251bGwKKysrIGIvQW5kcm9pZC9HcmFkbGUvYXBwL3NyYy9tYWluL2phdmEvb3JnL2ExMXkvYnJsdHR5L2FuZHJvaWQvc2V0dGluZ3MvQWR2YW5jZWRTZXR0aW5ncy5qYXZhCkBAIC0wLDAgKzEsNTIgQEAKKy8qCisgKiBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorICogICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorICoKKyAqIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorICoKKyAqIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyAqLworCitwYWNrYWdlIG9yZy5hMTF5LmJybHR0eS5hbmRyb2lkLnNldHRpbmdzOworCitpbXBvcnQgYW5kcm9pZC5vcy5CdW5kbGU7CitpbXBvcnQgb3JnLmExMXkuYnJsdHR5LmFuZHJvaWQuKjsKKworcHVibGljIGZpbmFsIGNsYXNzIEFkdmFuY2VkU2V0dGluZ3MgZXh0ZW5kcyBTZXR0aW5nc0ZyYWdtZW50IHsKKyAgcHJpdmF0ZSBLZXlib2FyZFRhYmxlU2V0dGluZyBrZXlib2FyZFRhYmxlU2V0dGluZyA9IG51bGw7CisgIHByaXZhdGUgQXR0cmlidXRlc1RhYmxlU2V0dGluZyBhdHRyaWJ1dGVzVGFibGVTZXR0aW5nID0gbnVsbDsKKworICBwcml2YXRlIExvZ0xldmVsU2V0dGluZyBsb2dMZXZlbFNldHRpbmcgPSBudWxsOworICBwcml2YXRlIExvZ0NhdGVnb3JpZXNTZXR0aW5nIGxvZ0NhdGVnb3JpZXNTZXR0aW5nID0gbnVsbDsKKworICBwcml2YXRlIExvZ0FjY2Vzc2liaWxpdHlFdmVudHNTZXR0aW5nIGxvZ0FjY2Vzc2liaWxpdHlFdmVudHNTZXR0aW5nID0gbnVsbDsKKyAgcHJpdmF0ZSBMb2dSZW5kZXJlZFNjcmVlblNldHRpbmcgbG9nUmVuZGVyZWRTY3JlZW5TZXR0aW5nID0gbnVsbDsKKyAgcHJpdmF0ZSBMb2dLZXlib2FyZEV2ZW50c1NldHRpbmcgbG9nS2V5Ym9hcmRFdmVudHNTZXR0aW5nID0gbnVsbDsKKyAgcHJpdmF0ZSBMb2dVbmhhbmRsZWRFdmVudHNTZXR0aW5nIGxvZ1VuaGFuZGxlZEV2ZW50c1NldHRpbmcgPSBudWxsOworCisgIEBPdmVycmlkZQorICBwdWJsaWMgdm9pZCBvbkNyZWF0ZSAoQnVuZGxlIHNhdmVkSW5zdGFuY2VTdGF0ZSkgeworICAgIHN1cGVyLm9uQ3JlYXRlKHNhdmVkSW5zdGFuY2VTdGF0ZSk7CisgICAgYWRkUHJlZmVyZW5jZXNGcm9tUmVzb3VyY2UoUi54bWwuc2V0dGluZ3NfYWR2YW5jZWQpOworCisgICAga2V5Ym9hcmRUYWJsZVNldHRpbmcgPSBuZXcgS2V5Ym9hcmRUYWJsZVNldHRpbmcodGhpcyk7CisgICAgYXR0cmlidXRlc1RhYmxlU2V0dGluZyA9IG5ldyBBdHRyaWJ1dGVzVGFibGVTZXR0aW5nKHRoaXMpOworCisgICAgbG9nTGV2ZWxTZXR0aW5nID0gbmV3IExvZ0xldmVsU2V0dGluZyh0aGlzKTsKKyAgICBsb2dDYXRlZ29yaWVzU2V0dGluZyA9IG5ldyBMb2dDYXRlZ29yaWVzU2V0dGluZyh0aGlzKTsKKworICAgIGxvZ0FjY2Vzc2liaWxpdHlFdmVudHNTZXR0aW5nID0gbmV3IExvZ0FjY2Vzc2liaWxpdHlFdmVudHNTZXR0aW5nKHRoaXMpOworICAgIGxvZ1JlbmRlcmVkU2NyZWVuU2V0dGluZyA9IG5ldyBMb2dSZW5kZXJlZFNjcmVlblNldHRpbmcodGhpcyk7CisgICAgbG9nS2V5Ym9hcmRFdmVudHNTZXR0aW5nID0gbmV3IExvZ0tleWJvYXJkRXZlbnRzU2V0dGluZyh0aGlzKTsKKyAgICBsb2dVbmhhbmRsZWRFdmVudHNTZXR0aW5nID0gbmV3IExvZ1VuaGFuZGxlZEV2ZW50c1NldHRpbmcodGhpcyk7CisgIH0KK30KZGlmZiAtLWdpdCBhL0FuZHJvaWQvR3JhZGxlL2FwcC9zcmMvbWFpbi9qYXZhL29yZy9hMTF5L2JybHR0eS9hbmRyb2lkL3NldHRpbmdzL0F0dHJpYnV0ZXNUYWJsZVNldHRpbmcuamF2YSBiL0FuZHJvaWQvR3JhZGxlL2FwcC9zcmMvbWFpbi9qYXZhL29yZy9hMTF5L2JybHR0eS9hbmRyb2lkL3NldHRpbmdzL0F0dHJpYnV0ZXNUYWJsZVNldHRpbmcuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NTNmZjdkCi0tLSAvZGV2L251bGwKKysrIGIvQW5kcm9pZC9HcmFkbGUvYXBwL3NyYy9tYWluL2phdmEvb3JnL2ExMXkvYnJsdHR5L2FuZHJvaWQvc2V0dGluZ3MvQXR0cmlidXRlc1RhYmxlU2V0dGluZy5qYXZhCkBAIC0wLDAgKzEsNDEgQEAKKy8qCisgKiBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorICogICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorICoKKyAqIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorICoKKyAqIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyAqLworCitwYWNrYWdlIG9yZy5hMTF5LmJybHR0eS5hbmRyb2lkLnNldHRpbmdzOworCitpbXBvcnQgb3JnLmExMXkuYnJsdHR5LmFuZHJvaWQuKjsKK2ltcG9ydCBvcmcuYTExeS5icmx0dHkuY29yZS5Db3JlV3JhcHBlcjsKKworcHVibGljIGNsYXNzIEF0dHJpYnV0ZXNUYWJsZVNldHRpbmcgZXh0ZW5kcyBTaW5nbGVTZWxlY3Rpb25TZXR0aW5nIHsKKyAgcHVibGljIEF0dHJpYnV0ZXNUYWJsZVNldHRpbmcgKFNldHRpbmdzRnJhZ21lbnQgZnJhZ21lbnQpIHsKKyAgICBzdXBlcihmcmFnbWVudCwgUi5zdHJpbmcuUFJFRl9LRVlfQVRUUklCVVRFU19UQUJMRSk7CisgICAgc29ydEVsZW1lbnRzQnlMYWJlbCgpOworICB9CisKKyAgQE92ZXJyaWRlCisgIHByb3RlY3RlZCBmaW5hbCB2b2lkIG9uU2VsZWN0aW9uQ2hhbmdlZCAoZmluYWwgU3RyaW5nIG5ld1NlbGVjdGlvbikgeworICAgIENvcmVXcmFwcGVyLnJ1bk9uQ29yZVRocmVhZCgKKyAgICAgIG5ldyBSdW5uYWJsZSgpIHsKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyB2b2lkIHJ1biAoKSB7CisgICAgICAgICAgQ29yZVdyYXBwZXIuY2hhbmdlQXR0cmlidXRlc1RhYmxlKG5ld1NlbGVjdGlvbik7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICApOworICB9Cit9CmRpZmYgLS1naXQgYS9BbmRyb2lkL0dyYWRsZS9hcHAvc3JjL21haW4vamF2YS9vcmcvYTExeS9icmx0dHkvYW5kcm9pZC9zZXR0aW5ncy9CbHVldG9vdGhEZXZpY2VDb2xsZWN0aW9uLmphdmEgYi9BbmRyb2lkL0dyYWRsZS9hcHAvc3JjL21haW4vamF2YS9vcmcvYTExeS9icmx0dHkvYW5kcm9pZC9zZXR0aW5ncy9CbHVldG9vdGhEZXZpY2VDb2xsZWN0aW9uLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTFmNGEyNgotLS0gL2Rldi9udWxsCisrKyBiL0FuZHJvaWQvR3JhZGxlL2FwcC9zcmMvbWFpbi9qYXZhL29yZy9hMTF5L2JybHR0eS9hbmRyb2lkL3NldHRpbmdzL0JsdWV0b290aERldmljZUNvbGxlY3Rpb24uamF2YQpAQCAtMCwwICsxLDcyIEBACisvKgorICogQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyAqICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyAqCisgKiBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorICoKKyAqIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyAqCisgKiBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisgKi8KKworcGFja2FnZSBvcmcuYTExeS5icmx0dHkuYW5kcm9pZC5zZXR0aW5nczsKKworaW1wb3J0IGFuZHJvaWQuYmx1ZXRvb3RoLio7CitpbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbnRleHQ7CitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247CitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb25zOworaW1wb3J0IGphdmEudXRpbC5NYXA7CitpbXBvcnQgb3JnLmExMXkuYnJsdHR5LmFuZHJvaWQuKjsKKworcHVibGljIGZpbmFsIGNsYXNzIEJsdWV0b290aERldmljZUNvbGxlY3Rpb24gZXh0ZW5kcyBEZXZpY2VDb2xsZWN0aW9uIHsKKyAgcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgREVWSUNFX1FVQUxJRklFUiA9ICJibHVldG9vdGgiOworCisgIEBPdmVycmlkZQorICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldFF1YWxpZmllciAoKSB7CisgICAgcmV0dXJuIERFVklDRV9RVUFMSUZJRVI7CisgIH0KKworICBwcml2YXRlIGZpbmFsIENvbGxlY3Rpb248Qmx1ZXRvb3RoRGV2aWNlPiBkZXZpY2VzOworCisgIHB1YmxpYyBCbHVldG9vdGhEZXZpY2VDb2xsZWN0aW9uIChDb250ZXh0IGNvbnRleHQpIHsKKyAgICBzdXBlcigpOworICAgIEJsdWV0b290aEFkYXB0ZXIgYWRhcHRlciA9IEJsdWV0b290aEFkYXB0ZXIuZ2V0RGVmYXVsdEFkYXB0ZXIoKTsKKyAgICBkZXZpY2VzID0gKGFkYXB0ZXIgIT0gbnVsbCk/IGFkYXB0ZXIuZ2V0Qm9uZGVkRGV2aWNlcygpOiBDb2xsZWN0aW9ucy5FTVBUWV9TRVQ7CisgIH0KKworICBAT3ZlcnJpZGUKKyAgcHVibGljIGZpbmFsIFN0cmluZ1tdIG1ha2VWYWx1ZXMgKCkgeworICAgIFN0cmluZ01ha2VyPEJsdWV0b290aERldmljZT4gc3RyaW5nTWFrZXIgPSBuZXcgU3RyaW5nTWFrZXI8Qmx1ZXRvb3RoRGV2aWNlPigpIHsKKyAgICAgIEBPdmVycmlkZQorICAgICAgcHVibGljIFN0cmluZyBtYWtlU3RyaW5nIChCbHVldG9vdGhEZXZpY2UgZGV2aWNlKSB7CisgICAgICAgIHJldHVybiBkZXZpY2UuZ2V0QWRkcmVzcygpOworICAgICAgfQorICAgIH07CisKKyAgICByZXR1cm4gbWFrZVN0cmluZ0FycmF5KGRldmljZXMsIHN0cmluZ01ha2VyKTsKKyAgfQorCisgIEBPdmVycmlkZQorICBwdWJsaWMgZmluYWwgU3RyaW5nW10gbWFrZUxhYmVscyAoKSB7CisgICAgU3RyaW5nTWFrZXI8Qmx1ZXRvb3RoRGV2aWNlPiBzdHJpbmdNYWtlciA9IG5ldyBTdHJpbmdNYWtlcjxCbHVldG9vdGhEZXZpY2U+KCkgeworICAgICAgQE92ZXJyaWRlCisgICAgICBwdWJsaWMgU3RyaW5nIG1ha2VTdHJpbmcgKEJsdWV0b290aERldmljZSBkZXZpY2UpIHsKKyAgICAgICAgcmV0dXJuIGRldmljZS5nZXROYW1lKCk7CisgICAgICB9CisgICAgfTsKKworICAgIHJldHVybiBtYWtlU3RyaW5nQXJyYXkoZGV2aWNlcywgc3RyaW5nTWFrZXIpOworICB9CisKKyAgQE92ZXJyaWRlCisgIHByb3RlY3RlZCBmaW5hbCB2b2lkIHB1dFBhcmFtZXRlcnMgKE1hcDxTdHJpbmcsIFN0cmluZz4gcGFyYW1ldGVycywgU3RyaW5nIHZhbHVlKSB7CisgICAgcGFyYW1ldGVycy5wdXQoImFkZHJlc3MiLCB2YWx1ZSk7CisgIH0KK30KZGlmZiAtLWdpdCBhL0FuZHJvaWQvR3JhZGxlL2FwcC9zcmMvbWFpbi9qYXZhL29yZy9hMTF5L2JybHR0eS9hbmRyb2lkL3NldHRpbmdzL0NoZWNrQm94U2V0dGluZy5qYXZhIGIvQW5kcm9pZC9HcmFkbGUvYXBwL3NyYy9tYWluL2phdmEvb3JnL2ExMXkvYnJsdHR5L2FuZHJvaWQvc2V0dGluZ3MvQ2hlY2tCb3hTZXR0aW5nLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmRlZDBmOAotLS0gL2Rldi9udWxsCisrKyBiL0FuZHJvaWQvR3JhZGxlL2FwcC9zcmMvbWFpbi9qYXZhL29yZy9hMTF5L2JybHR0eS9hbmRyb2lkL3NldHRpbmdzL0NoZWNrQm94U2V0dGluZy5qYXZhCkBAIC0wLDAgKzEsNTggQEAKKy8qCisgKiBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorICogICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorICoKKyAqIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorICoKKyAqIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyAqLworCitwYWNrYWdlIG9yZy5hMTF5LmJybHR0eS5hbmRyb2lkLnNldHRpbmdzOworCitpbXBvcnQgYW5kcm9pZC5wcmVmZXJlbmNlLkNoZWNrQm94UHJlZmVyZW5jZTsKK2ltcG9ydCBhbmRyb2lkLnByZWZlcmVuY2UuUHJlZmVyZW5jZTsKK2ltcG9ydCBvcmcuYTExeS5icmx0dHkuYW5kcm9pZC4qOworCitwdWJsaWMgYWJzdHJhY3QgY2xhc3MgQ2hlY2tCb3hTZXR0aW5nIGV4dGVuZHMgUHJlZmVyZW5jZVNldHRpbmc8Q2hlY2tCb3hQcmVmZXJlbmNlPiB7CisgIHByb3RlY3RlZCBhYnN0cmFjdCB2b2lkIG9uU3RhdGVDaGFuZ2VkIChib29sZWFuIG5ld1N0YXRlKTsKKworICBwdWJsaWMgZmluYWwgYm9vbGVhbiBpc0NoZWNrZWQgKCkgeworICAgIHJldHVybiBwcmVmZXJlbmNlLmlzQ2hlY2tlZCgpOworICB9CisKKyAgcHJvdGVjdGVkIGZpbmFsIHZvaWQgc2V0U3VtbWFyeSAoYm9vbGVhbiBjaGVja2VkKSB7CisgICAgc2V0U3VtbWFyeSgKKyAgICAgIGdldFN0cmluZygKKyAgICAgICAgY2hlY2tlZD8gUi5zdHJpbmcuY2hlY2tib3hfc3RhdGVfY2hlY2tlZDogUi5zdHJpbmcuY2hlY2tib3hfc3RhdGVfdW5jaGVja2VkCisgICAgICApCisgICAgKTsKKyAgfQorCisgIEBPdmVycmlkZQorICBwdWJsaWMgZmluYWwgdm9pZCBzZXRTdW1tYXJ5ICgpIHsKKyAgICBzZXRTdW1tYXJ5KGlzQ2hlY2tlZCgpKTsKKyAgfQorCisgIEBPdmVycmlkZQorICBwdWJsaWMgYm9vbGVhbiBvblByZWZlcmVuY2VDaGFuZ2UgKFByZWZlcmVuY2UgcHJlZmVyZW5jZSwgT2JqZWN0IG5ld1ZhbHVlKSB7CisgICAgZmluYWwgYm9vbGVhbiBuZXdTdGF0ZSA9IChCb29sZWFuKW5ld1ZhbHVlOworCisgICAgc2V0U3VtbWFyeShuZXdTdGF0ZSk7CisgICAgb25TdGF0ZUNoYW5nZWQobmV3U3RhdGUpOworCisgICAgcmV0dXJuIHRydWU7CisgIH0KKworICBwcm90ZWN0ZWQgQ2hlY2tCb3hTZXR0aW5nIChTZXR0aW5nc0ZyYWdtZW50IGZyYWdtZW50LCBpbnQga2V5KSB7CisgICAgc3VwZXIoZnJhZ21lbnQsIGtleSk7CisgIH0KK30KZGlmZiAtLWdpdCBhL0FuZHJvaWQvR3JhZGxlL2FwcC9zcmMvbWFpbi9qYXZhL29yZy9hMTF5L2JybHR0eS9hbmRyb2lkL3NldHRpbmdzL0NvbnRyYWN0aW9uVGFibGVTZXR0aW5nLmphdmEgYi9BbmRyb2lkL0dyYWRsZS9hcHAvc3JjL21haW4vamF2YS9vcmcvYTExeS9icmx0dHkvYW5kcm9pZC9zZXR0aW5ncy9Db250cmFjdGlvblRhYmxlU2V0dGluZy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE4NzhiYTUKLS0tIC9kZXYvbnVsbAorKysgYi9BbmRyb2lkL0dyYWRsZS9hcHAvc3JjL21haW4vamF2YS9vcmcvYTExeS9icmx0dHkvYW5kcm9pZC9zZXR0aW5ncy9Db250cmFjdGlvblRhYmxlU2V0dGluZy5qYXZhCkBAIC0wLDAgKzEsNDEgQEAKKy8qCisgKiBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorICogICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorICoKKyAqIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorICoKKyAqIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyAqLworCitwYWNrYWdlIG9yZy5hMTF5LmJybHR0eS5hbmRyb2lkLnNldHRpbmdzOworCitpbXBvcnQgb3JnLmExMXkuYnJsdHR5LmFuZHJvaWQuKjsKK2ltcG9ydCBvcmcuYTExeS5icmx0dHkuY29yZS5Db3JlV3JhcHBlcjsKKworcHVibGljIGNsYXNzIENvbnRyYWN0aW9uVGFibGVTZXR0aW5nIGV4dGVuZHMgU2luZ2xlU2VsZWN0aW9uU2V0dGluZyB7CisgIHB1YmxpYyBDb250cmFjdGlvblRhYmxlU2V0dGluZyAoU2V0dGluZ3NGcmFnbWVudCBmcmFnbWVudCkgeworICAgIHN1cGVyKGZyYWdtZW50LCBSLnN0cmluZy5QUkVGX0tFWV9DT05UUkFDVElPTl9UQUJMRSk7CisgICAgc29ydEVsZW1lbnRzQnlMYWJlbCgxKTsKKyAgfQorCisgIEBPdmVycmlkZQorICBwcm90ZWN0ZWQgZmluYWwgdm9pZCBvblNlbGVjdGlvbkNoYW5nZWQgKGZpbmFsIFN0cmluZyBuZXdTZWxlY3Rpb24pIHsKKyAgICBDb3JlV3JhcHBlci5ydW5PbkNvcmVUaHJlYWQoCisgICAgICBuZXcgUnVubmFibGUoKSB7CisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgdm9pZCBydW4gKCkgeworICAgICAgICAgIENvcmVXcmFwcGVyLmNoYW5nZUNvbnRyYWN0aW9uVGFibGUobmV3U2VsZWN0aW9uKTsKKyAgICAgICAgfQorICAgICAgfQorICAgICk7CisgIH0KK30KZGlmZiAtLWdpdCBhL0FuZHJvaWQvR3JhZGxlL2FwcC9zcmMvbWFpbi9qYXZhL29yZy9hMTF5L2JybHR0eS9hbmRyb2lkL3NldHRpbmdzL0RldmljZUNvbGxlY3Rpb24uamF2YSBiL0FuZHJvaWQvR3JhZGxlL2FwcC9zcmMvbWFpbi9qYXZhL29yZy9hMTF5L2JybHR0eS9hbmRyb2lkL3NldHRpbmdzL0RldmljZUNvbGxlY3Rpb24uamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZDYyMzFkCi0tLSAvZGV2L251bGwKKysrIGIvQW5kcm9pZC9HcmFkbGUvYXBwL3NyYy9tYWluL2phdmEvb3JnL2ExMXkvYnJsdHR5L2FuZHJvaWQvc2V0dGluZ3MvRGV2aWNlQ29sbGVjdGlvbi5qYXZhCkBAIC0wLDAgKzEsOTIgQEAKKy8qCisgKiBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorICogICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorICoKKyAqIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorICoKKyAqIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyAqLworCitwYWNrYWdlIG9yZy5hMTF5LmJybHR0eS5hbmRyb2lkLnNldHRpbmdzOworCitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuTGlua2VkSGFzaE1hcDsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuTWFwOworaW1wb3J0IG9yZy5hMTF5LmJybHR0eS5hbmRyb2lkLio7CisKK3B1YmxpYyBhYnN0cmFjdCBjbGFzcyBEZXZpY2VDb2xsZWN0aW9uIHsKKyAgcHJvdGVjdGVkIERldmljZUNvbGxlY3Rpb24gKCkgeworICB9CisKKyAgcHJvdGVjdGVkIHN0YXRpYyBpbnRlcmZhY2UgU3RyaW5nTWFrZXI8VD4geworICAgIHB1YmxpYyBTdHJpbmcgbWFrZVN0cmluZyAoVCBvYmplY3QpOworICB9CisKKyAgcHJvdGVjdGVkIHN0YXRpYyA8VD4gU3RyaW5nW10gbWFrZVN0cmluZ0FycmF5IChDb2xsZWN0aW9uPFQ+IGNvbGxlY3Rpb24sIFN0cmluZ01ha2VyPFQ+IHN0cmluZ01ha2VyKSB7CisgICAgTGlzdDxTdHJpbmc+IHN0cmluZ3MgPSBuZXcgQXJyYXlMaXN0PFN0cmluZz4oY29sbGVjdGlvbi5zaXplKCkpOworCisgICAgZm9yIChUIGVsZW1lbnQgOiBjb2xsZWN0aW9uKSB7CisgICAgICBzdHJpbmdzLmFkZChzdHJpbmdNYWtlci5tYWtlU3RyaW5nKGVsZW1lbnQpKTsKKyAgICB9CisKKyAgICByZXR1cm4gc3RyaW5ncy50b0FycmF5KG5ldyBTdHJpbmdbc3RyaW5ncy5zaXplKCldKTsKKyAgfQorCisgIHB1YmxpYyBmaW5hbCBzdGF0aWMgY2hhciBJREVOVElGSUVSX1NFUEFSQVRPUiA9ICcsJzsKKyAgcHVibGljIGZpbmFsIHN0YXRpYyBjaGFyIFFVQUxJRklFUl9ERUxJTUlURVIgPSAnOic7CisgIHB1YmxpYyBmaW5hbCBzdGF0aWMgY2hhciBQQVJBTUVURVJfU0VQQVJBVE9SID0gJysnOworICBwdWJsaWMgZmluYWwgc3RhdGljIGNoYXIgQVNTSUdOTUVOVF9ERUxJTUlURVIgPSAnPSc7CisKKyAgcHVibGljIGFic3RyYWN0IFN0cmluZyBnZXRRdWFsaWZpZXIgKCk7CisgIHB1YmxpYyBhYnN0cmFjdCBTdHJpbmdbXSBtYWtlVmFsdWVzICgpOworICBwdWJsaWMgYWJzdHJhY3QgU3RyaW5nW10gbWFrZUxhYmVscyAoKTsKKyAgcHJvdGVjdGVkIGFic3RyYWN0IHZvaWQgcHV0UGFyYW1ldGVycyAoTWFwPFN0cmluZywgU3RyaW5nPiBwYXJhbWV0ZXJzLCBTdHJpbmcgdmFsdWUpOworCisgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIG1ha2VSZWZlcmVuY2UgKE1hcDxTdHJpbmcsIFN0cmluZz4gcGFyYW1ldGVycykgeworICAgIFN0cmluZ0J1aWxkZXIgcmVmZXJlbmNlID0gbmV3IFN0cmluZ0J1aWxkZXIoKTsKKworICAgIGZvciAoU3RyaW5nIGtleSA6IHBhcmFtZXRlcnMua2V5U2V0KCkpIHsKKyAgICAgIFN0cmluZyB2YWx1ZSA9IHBhcmFtZXRlcnMuZ2V0KGtleSk7CisgICAgICBpZiAodmFsdWUgPT0gbnVsbCkgY29udGludWU7CisgICAgICBpZiAodmFsdWUuaXNFbXB0eSgpKSBjb250aW51ZTsKKworICAgICAgaWYgKHZhbHVlLmluZGV4T2YoUEFSQU1FVEVSX1NFUEFSQVRPUikgPj0gMCkgY29udGludWU7CisgICAgICBpZiAodmFsdWUuaW5kZXhPZihJREVOVElGSUVSX1NFUEFSQVRPUikgPj0gMCkgY29udGludWU7CisKKyAgICAgIGlmIChyZWZlcmVuY2UubGVuZ3RoKCkgPiAwKSByZWZlcmVuY2UuYXBwZW5kKFBBUkFNRVRFUl9TRVBBUkFUT1IpOworICAgICAgcmVmZXJlbmNlLmFwcGVuZChrZXkpOworICAgICAgcmVmZXJlbmNlLmFwcGVuZChBU1NJR05NRU5UX0RFTElNSVRFUik7CisgICAgICByZWZlcmVuY2UuYXBwZW5kKHZhbHVlKTsKKyAgICB9CisKKyAgICBpZiAocmVmZXJlbmNlLmxlbmd0aCgpID09IDApIHJldHVybiBudWxsOworICAgIHJldHVybiByZWZlcmVuY2UudG9TdHJpbmcoKTsKKyAgfQorCisgIHB1YmxpYyBzdGF0aWMgTWFwPFN0cmluZywgU3RyaW5nPiBuZXdQYXJhbWV0ZXJzICgpIHsKKyAgICByZXR1cm4gbmV3IExpbmtlZEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+KCk7CisgIH0KKworICBwdWJsaWMgZmluYWwgU3RyaW5nIG1ha2VSZWZlcmVuY2UgKFN0cmluZyB2YWx1ZSkgeworICAgIE1hcDxTdHJpbmcsIFN0cmluZz4gcGFyYW1ldGVycyA9IG5ld1BhcmFtZXRlcnMoKTsKKyAgICBwdXRQYXJhbWV0ZXJzKHBhcmFtZXRlcnMsIHZhbHVlKTsKKyAgICByZXR1cm4gbWFrZVJlZmVyZW5jZShwYXJhbWV0ZXJzKTsKKyAgfQorCisgIHB1YmxpYyBmaW5hbCBTdHJpbmcgbWFrZUlkZW50aWZpZXIgKFN0cmluZyB2YWx1ZSkgeworICAgIFN0cmluZyByZWZlcmVuY2UgPSBtYWtlUmVmZXJlbmNlKHZhbHVlKTsKKyAgICBpZiAocmVmZXJlbmNlID09IG51bGwpIHJldHVybiBudWxsOworICAgIHJldHVybiBnZXRRdWFsaWZpZXIoKSArIFFVQUxJRklFUl9ERUxJTUlURVIgKyByZWZlcmVuY2U7CisgIH0KK30KZGlmZiAtLWdpdCBhL0FuZHJvaWQvR3JhZGxlL2FwcC9zcmMvbWFpbi9qYXZhL29yZy9hMTF5L2JybHR0eS9hbmRyb2lkL3NldHRpbmdzL0RldmljZURlc2NyaXB0b3IuamF2YSBiL0FuZHJvaWQvR3JhZGxlL2FwcC9zcmMvbWFpbi9qYXZhL29yZy9hMTF5L2JybHR0eS9hbmRyb2lkL3NldHRpbmdzL0RldmljZURlc2NyaXB0b3IuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNzdlOGE2Ci0tLSAvZGV2L251bGwKKysrIGIvQW5kcm9pZC9HcmFkbGUvYXBwL3NyYy9tYWluL2phdmEvb3JnL2ExMXkvYnJsdHR5L2FuZHJvaWQvc2V0dGluZ3MvRGV2aWNlRGVzY3JpcHRvci5qYXZhCkBAIC0wLDAgKzEsMzkgQEAKKy8qCisgKiBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorICogICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorICoKKyAqIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorICoKKyAqIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyAqLworCitwYWNrYWdlIG9yZy5hMTF5LmJybHR0eS5hbmRyb2lkLnNldHRpbmdzOworCitpbXBvcnQgb3JnLmExMXkuYnJsdHR5LmFuZHJvaWQuKjsKKworcHVibGljIGZpbmFsIGNsYXNzIERldmljZURlc2NyaXB0b3IgeworICBwcml2YXRlIGZpbmFsIFN0cmluZyBkZXZpY2VJZGVudGlmaWVyOworICBwcml2YXRlIGZpbmFsIFN0cmluZyBicmFpbGxlRHJpdmVyOworCisgIHB1YmxpYyBEZXZpY2VEZXNjcmlwdG9yIChTdHJpbmcgaWRlbnRpZmllciwgU3RyaW5nIGRyaXZlcikgeworICAgIGRldmljZUlkZW50aWZpZXIgPSBpZGVudGlmaWVyOworICAgIGJyYWlsbGVEcml2ZXIgPSBkcml2ZXI7CisgIH0KKworICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldElkZW50aWZpZXIgKCkgeworICAgIHJldHVybiBkZXZpY2VJZGVudGlmaWVyOworICB9CisKKyAgcHVibGljIGZpbmFsIFN0cmluZyBnZXREcml2ZXIgKCkgeworICAgIHJldHVybiBicmFpbGxlRHJpdmVyOworICB9Cit9CmRpZmYgLS1naXQgYS9BbmRyb2lkL0dyYWRsZS9hcHAvc3JjL21haW4vamF2YS9vcmcvYTExeS9icmx0dHkvYW5kcm9pZC9zZXR0aW5ncy9EZXZpY2VNYW5hZ2VyLmphdmEgYi9BbmRyb2lkL0dyYWRsZS9hcHAvc3JjL21haW4vamF2YS9vcmcvYTExeS9icmx0dHkvYW5kcm9pZC9zZXR0aW5ncy9EZXZpY2VNYW5hZ2VyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWI1ZWIwYgotLS0gL2Rldi9udWxsCisrKyBiL0FuZHJvaWQvR3JhZGxlL2FwcC9zcmMvbWFpbi9qYXZhL29yZy9hMTF5L2JybHR0eS9hbmRyb2lkL3NldHRpbmdzL0RldmljZU1hbmFnZXIuamF2YQpAQCAtMCwwICsxLDQxNCBAQAorLyoKKyAqIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisgKiAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisgKgorICogQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKK3BhY2thZ2Ugb3JnLmExMXkuYnJsdHR5LmFuZHJvaWQuc2V0dGluZ3M7CisKK2ltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29udGV4dDsKK2ltcG9ydCBhbmRyb2lkLmNvbnRlbnQuU2hhcmVkUHJlZmVyZW5jZXM7CitpbXBvcnQgYW5kcm9pZC5vcy5Bc3luY1Rhc2s7CitpbXBvcnQgYW5kcm9pZC5vcy5CdW5kbGU7CitpbXBvcnQgYW5kcm9pZC5wcmVmZXJlbmNlLlByZWZlcmVuY2U7CitpbXBvcnQgYW5kcm9pZC5wcmVmZXJlbmNlLlByZWZlcmVuY2VTY3JlZW47CitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb25zOworaW1wb3J0IGphdmEudXRpbC5MaW5rZWRIYXNoTWFwOworaW1wb3J0IGphdmEudXRpbC5NYXA7CitpbXBvcnQgamF2YS51dGlsLlNldDsKK2ltcG9ydCBqYXZhLnV0aWwuVHJlZVNldDsKK2ltcG9ydCBvcmcuYTExeS5icmx0dHkuYW5kcm9pZC4qOworaW1wb3J0IG9yZy5hMTF5LmJybHR0eS5jb3JlLkNvcmVXcmFwcGVyOworCitwdWJsaWMgZmluYWwgY2xhc3MgRGV2aWNlTWFuYWdlciBleHRlbmRzIFNldHRpbmdzRnJhZ21lbnQgeworICBwcml2YXRlIGZpbmFsIHN0YXRpYyBTdHJpbmcgTE9HX1RBRyA9IERldmljZU1hbmFnZXIuY2xhc3MuZ2V0TmFtZSgpOworCisgIHByaXZhdGUgU2V0PFN0cmluZz4gZGV2aWNlTmFtZXM7CisgIHByaXZhdGUgRGV2aWNlQ29sbGVjdGlvbiBkZXZpY2VDb2xsZWN0aW9uOworCisgIHByaXZhdGUgU2luZ2xlU2VsZWN0aW9uU2V0dGluZyBzZWxlY3RlZERldmljZVNldHRpbmc7CisgIHByaXZhdGUgUHJlZmVyZW5jZVNjcmVlbiBhZGREZXZpY2VTY3JlZW47CisgIHByaXZhdGUgUHJlZmVyZW5jZVNjcmVlbiByZW1vdmVEZXZpY2VTY3JlZW47CisKKyAgcHJpdmF0ZSBUZXh0U2V0dGluZyBkZXZpY2VOYW1lU2V0dGluZzsKKyAgcHJpdmF0ZSBTaW5nbGVTZWxlY3Rpb25TZXR0aW5nIGRldmljZU1ldGhvZFNldHRpbmc7CisgIHByaXZhdGUgU2luZ2xlU2VsZWN0aW9uU2V0dGluZyBkZXZpY2VJZGVudGlmaWVyU2V0dGluZzsKKyAgcHJpdmF0ZSBTaW5nbGVTZWxlY3Rpb25TZXR0aW5nIGRldmljZURyaXZlclNldHRpbmc7CisgIHByaXZhdGUgUHJlZmVyZW5jZUJ1dHRvbiBhZGREZXZpY2VCdXR0b247CisKKyAgcHJpdmF0ZSBQcmVmZXJlbmNlIHJlbW92ZURldmljZVByb21wdDsKKyAgcHJpdmF0ZSBQcmVmZXJlbmNlQnV0dG9uIHJlbW92ZURldmljZUNhbmNlbGxhdGlvbkJ1dHRvbjsKKyAgcHJpdmF0ZSBQcmVmZXJlbmNlQnV0dG9uIHJlbW92ZURldmljZUNvbmZpcm1hdGlvbkJ1dHRvbjsKKworICBwcml2YXRlIGZpbmFsIHN0YXRpYyBTdHJpbmcgUFJFRl9LRVlfREVWSUNFX05BTUVTID0gImRldmljZS1uYW1lcyI7CisgIHByaXZhdGUgZmluYWwgc3RhdGljIFN0cmluZyBQUkVGX0tFWV9ERVZJQ0VfSURFTlRJRklFUiA9ICJkZXZpY2UtaWRlbnRpZmllciI7CisgIHByaXZhdGUgZmluYWwgc3RhdGljIFN0cmluZyBQUkVGX0tFWV9ERVZJQ0VfUVVBTElGSUVSID0gImRldmljZS1xdWFsaWZpZXIiOworICBwcml2YXRlIGZpbmFsIHN0YXRpYyBTdHJpbmcgUFJFRl9LRVlfREVWSUNFX1JFRkVSRU5DRSA9ICJkZXZpY2UtcmVmZXJlbmNlIjsKKyAgcHJpdmF0ZSBmaW5hbCBzdGF0aWMgU3RyaW5nIFBSRUZfS0VZX0RFVklDRV9EUklWRVIgPSAiZGV2aWNlLWRyaXZlciI7CisKKyAgcHJpdmF0ZSBmaW5hbCBzdGF0aWMgU3RyaW5nW10gREVWSUNFX1BST1BFUlRZX0tFWVMgPSB7CisgICAgUFJFRl9LRVlfREVWSUNFX0lERU5USUZJRVIsCisgICAgUFJFRl9LRVlfREVWSUNFX1FVQUxJRklFUiwKKyAgICBQUkVGX0tFWV9ERVZJQ0VfUkVGRVJFTkNFLAorICAgIFBSRUZfS0VZX0RFVklDRV9EUklWRVIKKyAgfTsKKworICBwcml2YXRlIHN0YXRpYyBNYXA8U3RyaW5nLCBTdHJpbmc+IGdldERldmljZVByb3BlcnRpZXMgKFNoYXJlZFByZWZlcmVuY2VzIHByZWZzLCBTdHJpbmcgbmFtZSkgeworICAgIHJldHVybiBnZXRQcm9wZXJ0aWVzKHByZWZzLCBuYW1lLCBERVZJQ0VfUFJPUEVSVFlfS0VZUyk7CisgIH0KKworICBwcml2YXRlIHN0YXRpYyB2b2lkIHJlbW92ZURldmljZVByb3BlcnRpZXMgKFNoYXJlZFByZWZlcmVuY2VzLkVkaXRvciBlZGl0b3IsIFN0cmluZyBuYW1lKSB7CisgICAgcmVtb3ZlUHJvcGVydGllcyhlZGl0b3IsIG5hbWUsIERFVklDRV9QUk9QRVJUWV9LRVlTKTsKKyAgfQorCisgIHByaXZhdGUgc3RhdGljIFN0cmluZyBnZXRTZWxlY3RlZERldmljZSAoU2hhcmVkUHJlZmVyZW5jZXMgcHJlZnMpIHsKKyAgICBDb250ZXh0IGNvbnRleHQgPSBCcmFpbGxlQXBwbGljYXRpb24uZ2V0KCk7CisgICAgU3RyaW5nIGtleSA9IGNvbnRleHQuZ2V0UmVzb3VyY2VzKCkuZ2V0U3RyaW5nKFIuc3RyaW5nLlBSRUZfS0VZX1NFTEVDVEVEX0RFVklDRSk7CisgICAgcmV0dXJuIHByZWZzLmdldFN0cmluZyhrZXksICIiKTsKKyAgfQorCisgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldFNlbGVjdGVkRGV2aWNlICgpIHsKKyAgICByZXR1cm4gZ2V0U2VsZWN0ZWREZXZpY2UoRGF0YVR5cGUuZ2V0UHJlZmVyZW5jZXMoKSk7CisgIH0KKworICBwcml2YXRlIHN0YXRpYyBEZXZpY2VEZXNjcmlwdG9yIGdldERldmljZURlc2NyaXB0b3IgKFNoYXJlZFByZWZlcmVuY2VzIHByZWZzLCBTdHJpbmcgZGV2aWNlKSB7CisgICAgU3RyaW5nIGlkZW50aWZpZXIgPSAiIjsKKyAgICBTdHJpbmcgZHJpdmVyID0gIiI7CisKKyAgICBpZiAoIWRldmljZS5pc0VtcHR5KCkpIHsKKyAgICAgIE1hcDxTdHJpbmcsIFN0cmluZz4gcHJvcGVydGllcyA9IGdldERldmljZVByb3BlcnRpZXMocHJlZnMsIGRldmljZSk7CisgICAgICBpZGVudGlmaWVyID0gcHJvcGVydGllcy5nZXQoUFJFRl9LRVlfREVWSUNFX0lERU5USUZJRVIpOworICAgICAgZHJpdmVyID0gcHJvcGVydGllcy5nZXQoUFJFRl9LRVlfREVWSUNFX0RSSVZFUik7CisKKyAgICAgIGlmIChpZGVudGlmaWVyLmlzRW1wdHkoKSkgeworICAgICAgICBTdHJpbmcgcXVhbGlmaWVyID0gcHJvcGVydGllcy5nZXQoUFJFRl9LRVlfREVWSUNFX1FVQUxJRklFUik7CisKKyAgICAgICAgaWYgKCFxdWFsaWZpZXIuaXNFbXB0eSgpKSB7CisgICAgICAgICAgU3RyaW5nQnVpbGRlciBzYiA9IG5ldyBTdHJpbmdCdWlsZGVyKCk7CisgICAgICAgICAgc2IuYXBwZW5kKHF1YWxpZmllcik7CisgICAgICAgICAgc2IuYXBwZW5kKERldmljZUNvbGxlY3Rpb24uUVVBTElGSUVSX0RFTElNSVRFUik7CisgICAgICAgICAgc2IuYXBwZW5kKHByb3BlcnRpZXMuZ2V0KFBSRUZfS0VZX0RFVklDRV9SRUZFUkVOQ0UpKTsKKyAgICAgICAgICBpZGVudGlmaWVyID0gc2IudG9TdHJpbmcoKTsKKyAgICAgICAgfQorICAgICAgfQorICAgIH0KKworICAgIGlmIChpZGVudGlmaWVyLmlzRW1wdHkoKSkgeworICAgICAgU3RyaW5nQnVpbGRlciBzYiA9IG5ldyBTdHJpbmdCdWlsZGVyKCk7CisgICAgICBzYi5hcHBlbmQoQmx1ZXRvb3RoRGV2aWNlQ29sbGVjdGlvbi5ERVZJQ0VfUVVBTElGSUVSKTsKKyAgICAgIHNiLmFwcGVuZChEZXZpY2VDb2xsZWN0aW9uLlFVQUxJRklFUl9ERUxJTUlURVIpOworICAgICAgc2IuYXBwZW5kKERldmljZUNvbGxlY3Rpb24uSURFTlRJRklFUl9TRVBBUkFUT1IpOworICAgICAgc2IuYXBwZW5kKFVzYkRldmljZUNvbGxlY3Rpb24uREVWSUNFX1FVQUxJRklFUik7CisgICAgICBzYi5hcHBlbmQoRGV2aWNlQ29sbGVjdGlvbi5RVUFMSUZJRVJfREVMSU1JVEVSKTsKKyAgICAgIGlkZW50aWZpZXIgPSBzYi50b1N0cmluZygpOworICAgIH0KKworICAgIGlmIChkcml2ZXIuaXNFbXB0eSgpKSB7CisgICAgICBkcml2ZXIgPSAiYXV0byI7CisgICAgfQorCisgICAgcmV0dXJuIG5ldyBEZXZpY2VEZXNjcmlwdG9yKGlkZW50aWZpZXIsIGRyaXZlcik7CisgIH0KKworICBwcml2YXRlIHN0YXRpYyBEZXZpY2VEZXNjcmlwdG9yIGdldERldmljZURlc2NyaXB0b3IgKFNoYXJlZFByZWZlcmVuY2VzIHByZWZzKSB7CisgICAgcmV0dXJuIGdldERldmljZURlc2NyaXB0b3IocHJlZnMsIGdldFNlbGVjdGVkRGV2aWNlKHByZWZzKSk7CisgIH0KKworICBwdWJsaWMgc3RhdGljIERldmljZURlc2NyaXB0b3IgZ2V0RGV2aWNlRGVzY3JpcHRvciAoKSB7CisgICAgcmV0dXJuIGdldERldmljZURlc2NyaXB0b3IoRGF0YVR5cGUuZ2V0UHJlZmVyZW5jZXMoKSk7CisgIH0KKworICBwcml2YXRlIHZvaWQgdXBkYXRlUmVtb3ZlRGV2aWNlU2NyZWVuIChTdHJpbmcgc2VsZWN0ZWREZXZpY2UpIHsKKyAgICBib29sZWFuIG9uID0gZmFsc2U7CisKKyAgICBpZiAoc2VsZWN0ZWREZXZpY2VTZXR0aW5nLmlzRW5hYmxlZCgpKSB7CisgICAgICBpZiAoc2VsZWN0ZWREZXZpY2UgIT0gbnVsbCkgeworICAgICAgICBpZiAoc2VsZWN0ZWREZXZpY2UubGVuZ3RoKCkgPiAwKSB7CisgICAgICAgICAgb24gPSB0cnVlOworICAgICAgICAgIHJlbW92ZURldmljZVByb21wdC5zZXRTdW1tYXJ5KHNlbGVjdGVkRGV2aWNlKTsKKyAgICAgICAgfQorICAgICAgfQorICAgIH0KKworICAgIHJlbW92ZURldmljZVNjcmVlbi5zZXRTZWxlY3RhYmxlKG9uKTsKKyAgfQorCisgIHByaXZhdGUgdm9pZCB1cGRhdGVSZW1vdmVEZXZpY2VTY3JlZW4gKCkgeworICAgIHVwZGF0ZVJlbW92ZURldmljZVNjcmVlbihzZWxlY3RlZERldmljZVNldHRpbmcuZ2V0U2VsZWN0ZWRWYWx1ZSgpKTsKKyAgfQorCisgIHByaXZhdGUgdm9pZCB1cGRhdGVTZWxlY3RlZERldmljZVNldHRpbmcgKCkgeworICAgIGJvb2xlYW4gaGF2ZURldmljZXMgPSAhZGV2aWNlTmFtZXMuaXNFbXB0eSgpOworICAgIHNlbGVjdGVkRGV2aWNlU2V0dGluZy5zZXRFbmFibGVkKGhhdmVEZXZpY2VzKTsKKyAgICBDaGFyU2VxdWVuY2Ugc3VtbWFyeTsKKworICAgIGlmIChoYXZlRGV2aWNlcykgeworICAgICAgeworICAgICAgICBTdHJpbmdbXSBuYW1lcyA9IG5ldyBTdHJpbmdbZGV2aWNlTmFtZXMuc2l6ZSgpXTsKKyAgICAgICAgZGV2aWNlTmFtZXMudG9BcnJheShuYW1lcyk7CisgICAgICAgIHNlbGVjdGVkRGV2aWNlU2V0dGluZy5zZXRFbGVtZW50cyhuYW1lcyk7CisgICAgICAgIHNlbGVjdGVkRGV2aWNlU2V0dGluZy5zb3J0RWxlbWVudHNCeUxhYmVsKCk7CisgICAgICB9CisKKyAgICAgIHN1bW1hcnkgPSBzZWxlY3RlZERldmljZVNldHRpbmcuZ2V0U2VsZWN0ZWRMYWJlbCgpOworICAgICAgaWYgKChzdW1tYXJ5ID09IG51bGwpIHx8IChzdW1tYXJ5Lmxlbmd0aCgpID09IDApKSB7CisgICAgICAgIHN1bW1hcnkgPSBnZXRTdHJpbmcoUi5zdHJpbmcuU0VMRUNURURfREVWSUNFX1VOU0VMRUNURUQpOworICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICBzdW1tYXJ5ID0gZ2V0U3RyaW5nKFIuc3RyaW5nLlNFTEVDVEVEX0RFVklDRV9OT05FKTsKKyAgICB9CisKKyAgICBzZWxlY3RlZERldmljZVNldHRpbmcuc2V0U3VtbWFyeShzdW1tYXJ5KTsKKyAgICB1cGRhdGVSZW1vdmVEZXZpY2VTY3JlZW4oKTsKKyAgfQorCisgIHByaXZhdGUgU3RyaW5nIGdldERldmljZU1ldGhvZCAoKSB7CisgICAgcmV0dXJuIGRldmljZU1ldGhvZFNldHRpbmcuZ2V0U2VsZWN0ZWRWYWx1ZSgpOworICB9CisKKyAgcHJpdmF0ZSBEZXZpY2VDb2xsZWN0aW9uIG1ha2VEZXZpY2VDb2xsZWN0aW9uIChTdHJpbmcgZGV2aWNlTWV0aG9kKSB7CisgICAgU3RyaW5nIGNsYXNzTmFtZSA9IGdldENsYXNzKCkuZ2V0UGFja2FnZSgpLmdldE5hbWUoKSArICIuIiArIGRldmljZU1ldGhvZCArICJEZXZpY2VDb2xsZWN0aW9uIjsKKworICAgIFN0cmluZ1tdIGFyZ3VtZW50VHlwZXMgPSBuZXcgU3RyaW5nW10geworICAgICAgImFuZHJvaWQuY29udGVudC5Db250ZXh0IgorICAgIH07CisKKyAgICBPYmplY3RbXSBhcmd1bWVudHMgPSBuZXcgT2JqZWN0W10geworICAgICAgZ2V0QWN0aXZpdHkoKQorICAgIH07CisKKyAgICByZXR1cm4gKERldmljZUNvbGxlY3Rpb24pTGFuZ3VhZ2VVdGlsaXRpZXMubmV3SW5zdGFuY2UoCisgICAgICBjbGFzc05hbWUsIGFyZ3VtZW50VHlwZXMsIGFyZ3VtZW50cworICAgICk7CisgIH0KKworICBwcml2YXRlIHZvaWQgdXBkYXRlRGV2aWNlSWRlbnRpZmllclNldHRpbmcgKFN0cmluZyBkZXZpY2VNZXRob2QpIHsKKyAgICBkZXZpY2VDb2xsZWN0aW9uID0gbWFrZURldmljZUNvbGxlY3Rpb24oZGV2aWNlTWV0aG9kKTsKKworICAgIGRldmljZUlkZW50aWZpZXJTZXR0aW5nLnNldEVsZW1lbnRzKAorICAgICAgZGV2aWNlQ29sbGVjdGlvbi5tYWtlVmFsdWVzKCksIAorICAgICAgZGV2aWNlQ29sbGVjdGlvbi5tYWtlTGFiZWxzKCkKKyAgICApOworCisgICAgZGV2aWNlSWRlbnRpZmllclNldHRpbmcuc29ydEVsZW1lbnRzQnlMYWJlbCgpOworCisgICAgeworICAgICAgYm9vbGVhbiBoYXZlSWRlbnRpZmllcnMgPSBkZXZpY2VJZGVudGlmaWVyU2V0dGluZy5nZXRFbGVtZW50Q291bnQoKSA+IDA7CisgICAgICBkZXZpY2VJZGVudGlmaWVyU2V0dGluZy5zZXRFbmFibGVkKGhhdmVJZGVudGlmaWVycyk7CisKKyAgICAgIGlmIChoYXZlSWRlbnRpZmllcnMpIHsKKyAgICAgICAgZGV2aWNlSWRlbnRpZmllclNldHRpbmcuc2VsZWN0Rmlyc3RFbGVtZW50KCk7CisgICAgICB9IGVsc2UgeworICAgICAgICBkZXZpY2VJZGVudGlmaWVyU2V0dGluZy5zZXRTdW1tYXJ5KGdldFN0cmluZyhSLnN0cmluZy5BRERfREVWSUNFX05PX0RFVklDRVMpKTsKKyAgICAgIH0KKyAgICB9CisKKyAgICBkZXZpY2VEcml2ZXJTZXR0aW5nLnNlbGVjdEZpcnN0RWxlbWVudCgpOworICB9CisKKyAgcHJpdmF0ZSB2b2lkIHVwZGF0ZURldmljZU5hbWUgKFN0cmluZyBuYW1lKSB7CisgICAgU3RyaW5nIHByb2JsZW07CisKKyAgICBpZiAoIWRldmljZU1ldGhvZFNldHRpbmcuaXNFbmFibGVkKCkpIHsKKyAgICAgIHByb2JsZW0gPSBnZXRTdHJpbmcoUi5zdHJpbmcuQUREX0RFVklDRV9VTlNFTEVDVEVEX01FVEhPRCk7CisgICAgfSBlbHNlIGlmICghZGV2aWNlSWRlbnRpZmllclNldHRpbmcuaXNFbmFibGVkKCkpIHsKKyAgICAgIHByb2JsZW0gPSBnZXRTdHJpbmcoUi5zdHJpbmcuQUREX0RFVklDRV9VTlNFTEVDVEVEX0RFVklDRSk7CisgICAgfSBlbHNlIGlmICghZGV2aWNlRHJpdmVyU2V0dGluZy5pc0VuYWJsZWQoKSkgeworICAgICAgcHJvYmxlbSA9IGdldFN0cmluZyhSLnN0cmluZy5BRERfREVWSUNFX1VOU0VMRUNURURfRFJJVkVSKTsKKyAgICB9IGVsc2UgeworICAgICAgaWYgKG5hbWUubGVuZ3RoKCkgPT0gMCkgeworICAgICAgICBuYW1lID0gbmV3IFN0cmluZ0J1aWxkZXIoKQorICAgICAgICAgICAgICAuYXBwZW5kKGRldmljZURyaXZlclNldHRpbmcuZ2V0U3VtbWFyeSgpKQorICAgICAgICAgICAgICAuYXBwZW5kKCcgJykKKyAgICAgICAgICAgICAgLmFwcGVuZChkZXZpY2VNZXRob2RTZXR0aW5nLmdldFN1bW1hcnkoKSkKKyAgICAgICAgICAgICAgLmFwcGVuZCgnICcpCisgICAgICAgICAgICAgIC5hcHBlbmQoZGV2aWNlSWRlbnRpZmllclNldHRpbmcuZ2V0U3VtbWFyeSgpKQorICAgICAgICAgICAgICAudG9TdHJpbmcoKTsKKyAgICAgIH0KKworICAgICAgaWYgKGRldmljZU5hbWVzLmNvbnRhaW5zKG5hbWUpKSB7CisgICAgICAgIHByb2JsZW0gPSBnZXRTdHJpbmcoUi5zdHJpbmcuQUREX0RFVklDRV9EVVBMSUNBVEVfTkFNRSk7CisgICAgICB9IGVsc2UgeworICAgICAgICBwcm9ibGVtID0gIiI7CisgICAgICB9CisgICAgfQorCisgICAgYWRkRGV2aWNlQnV0dG9uLnNldFN1bW1hcnkocHJvYmxlbSk7CisgICAgYWRkRGV2aWNlQnV0dG9uLnNldEVuYWJsZWQocHJvYmxlbS5pc0VtcHR5KCkpOworICAgIGRldmljZU5hbWVTZXR0aW5nLnNldFN1bW1hcnkobmFtZSk7CisgIH0KKworICBwcml2YXRlIHZvaWQgdXBkYXRlRGV2aWNlTmFtZSAoKSB7CisgICAgdXBkYXRlRGV2aWNlTmFtZShkZXZpY2VOYW1lU2V0dGluZy5nZXRUZXh0KCkudG9TdHJpbmcoKSk7CisgIH0KKworICBwcml2YXRlIHN0YXRpYyB2b2lkIHJlc3RhcnRCcmFpbGxlRHJpdmVyIChmaW5hbCBTaGFyZWRQcmVmZXJlbmNlcyBwcmVmcywgZmluYWwgU3RyaW5nIGRldmljZSkgeworICAgIENvcmVXcmFwcGVyLnJ1bk9uQ29yZVRocmVhZCgKKyAgICAgIG5ldyBSdW5uYWJsZSgpIHsKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyB2b2lkIHJ1biAoKSB7CisgICAgICAgICAgRGV2aWNlRGVzY3JpcHRvciBkZXNjcmlwdG9yID0gZ2V0RGV2aWNlRGVzY3JpcHRvcihwcmVmcywgZGV2aWNlKTsKKyAgICAgICAgICBDb3JlV3JhcHBlci5jaGFuZ2VCcmFpbGxlRGV2aWNlKGRlc2NyaXB0b3IuZ2V0SWRlbnRpZmllcigpKTsKKyAgICAgICAgICBDb3JlV3JhcHBlci5jaGFuZ2VCcmFpbGxlRHJpdmVyKGRlc2NyaXB0b3IuZ2V0RHJpdmVyKCkpOworICAgICAgICAgIENvcmVXcmFwcGVyLnJlc3RhcnRCcmFpbGxlRHJpdmVyKCk7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICApOworICB9CisKKyAgQE92ZXJyaWRlCisgIHB1YmxpYyB2b2lkIG9uQ3JlYXRlIChCdW5kbGUgc2F2ZWRJbnN0YW5jZVN0YXRlKSB7CisgICAgc3VwZXIub25DcmVhdGUoc2F2ZWRJbnN0YW5jZVN0YXRlKTsKKyAgICBhZGRQcmVmZXJlbmNlc0Zyb21SZXNvdXJjZShSLnhtbC5zZXR0aW5nc19kZXZpY2VzKTsKKyAgICBmaW5hbCBTaGFyZWRQcmVmZXJlbmNlcyBwcmVmcyA9IGdldFByZWZlcmVuY2VzKCk7CisKKyAgICBhZGREZXZpY2VTY3JlZW4gPSBnZXRQcmVmZXJlbmNlU2NyZWVuKFIuc3RyaW5nLlBSRUZfS0VZX0FERF9ERVZJQ0UpOworICAgIHJlbW92ZURldmljZVNjcmVlbiA9IGdldFByZWZlcmVuY2VTY3JlZW4oUi5zdHJpbmcuUFJFRl9LRVlfUkVNT1ZFX0RFVklDRSk7CisgICAgcmVtb3ZlRGV2aWNlUHJvbXB0ID0gZ2V0UHJlZmVyZW5jZShSLnN0cmluZy5QUkVGX0tFWV9SRU1PVkVfREVWSUNFX1BST01QVCk7CisKKyAgICBzZWxlY3RlZERldmljZVNldHRpbmcgPSBuZXcgU2luZ2xlU2VsZWN0aW9uU2V0dGluZyh0aGlzLCBSLnN0cmluZy5QUkVGX0tFWV9TRUxFQ1RFRF9ERVZJQ0UpIHsKKyAgICAgIEBPdmVycmlkZQorICAgICAgcHVibGljIHZvaWQgb25TZWxlY3Rpb25DaGFuZ2VkIChTdHJpbmcgbmV3RGV2aWNlKSB7CisgICAgICAgIEJyYWlsbGVOb3RpZmljYXRpb24udXBkYXRlRGV2aWNlKG5ld0RldmljZSk7CisgICAgICAgIHVwZGF0ZVJlbW92ZURldmljZVNjcmVlbihuZXdEZXZpY2UpOworICAgICAgICByZXN0YXJ0QnJhaWxsZURyaXZlcihwcmVmcywgbmV3RGV2aWNlKTsKKyAgICAgIH0KKyAgICB9OworCisgICAgZGV2aWNlTmFtZVNldHRpbmcgPSBuZXcgVGV4dFNldHRpbmcodGhpcywgUi5zdHJpbmcuUFJFRl9LRVlfREVWSUNFX05BTUUpIHsKKyAgICAgIEBPdmVycmlkZQorICAgICAgcHVibGljIHZvaWQgb25UZXh0Q2hhbmdlZCAoU3RyaW5nIG5ld05hbWUpIHsKKyAgICAgICAgdXBkYXRlRGV2aWNlTmFtZShuZXdOYW1lKTsKKyAgICAgIH0KKyAgICB9OworCisgICAgZGV2aWNlTWV0aG9kU2V0dGluZyA9IG5ldyBTaW5nbGVTZWxlY3Rpb25TZXR0aW5nKHRoaXMsIFIuc3RyaW5nLlBSRUZfS0VZX0RFVklDRV9NRVRIT0QpIHsKKyAgICAgIEBPdmVycmlkZQorICAgICAgcHVibGljIHZvaWQgb25TZWxlY3Rpb25DaGFuZ2VkIChTdHJpbmcgbmV3TWV0aG9kKSB7CisgICAgICAgIHVwZGF0ZURldmljZUlkZW50aWZpZXJTZXR0aW5nKG5ld01ldGhvZCk7CisgICAgICAgIHVwZGF0ZURldmljZU5hbWUoKTsKKyAgICAgIH0KKyAgICB9OworCisgICAgZGV2aWNlSWRlbnRpZmllclNldHRpbmcgPSBuZXcgU2luZ2xlU2VsZWN0aW9uU2V0dGluZyh0aGlzLCBSLnN0cmluZy5QUkVGX0tFWV9ERVZJQ0VfSURFTlRJRklFUikgeworICAgICAgQE92ZXJyaWRlCisgICAgICBwdWJsaWMgdm9pZCBvblNlbGVjdGlvbkNoYW5nZWQgKFN0cmluZyBuZXdJZGVudGlmaWVyKSB7CisgICAgICAgIHVwZGF0ZURldmljZU5hbWUoKTsKKyAgICAgIH0KKyAgICB9OworCisgICAgZGV2aWNlRHJpdmVyU2V0dGluZyA9IG5ldyBTaW5nbGVTZWxlY3Rpb25TZXR0aW5nKHRoaXMsIFIuc3RyaW5nLlBSRUZfS0VZX0RFVklDRV9EUklWRVIpIHsKKyAgICAgIEBPdmVycmlkZQorICAgICAgcHVibGljIHZvaWQgb25TZWxlY3Rpb25DaGFuZ2VkIChTdHJpbmcgbmV3RHJpdmVyKSB7CisgICAgICAgIHVwZGF0ZURldmljZU5hbWUoKTsKKyAgICAgIH0KKyAgICB9OworCisgICAgYWRkRGV2aWNlQnV0dG9uID0gbmV3IFByZWZlcmVuY2VCdXR0b24odGhpcywgUi5zdHJpbmcuUFJFRl9LRVlfREVWSUNFX0FERCkgeworICAgICAgQE92ZXJyaWRlCisgICAgICBwdWJsaWMgdm9pZCBvbkJ1dHRvbkNsaWNrZWQgKCkgeworICAgICAgICBuZXcgQXN5bmNUYXNrPE9iamVjdCwgT2JqZWN0LCBTdHJpbmc+KCkgeworICAgICAgICAgIFN0cmluZyBuYW1lOworCisgICAgICAgICAgQE92ZXJyaWRlCisgICAgICAgICAgcHJvdGVjdGVkIHZvaWQgb25QcmVFeGVjdXRlICgpIHsKKyAgICAgICAgICAgIG5hbWUgPSBkZXZpY2VOYW1lU2V0dGluZy5nZXRTdW1tYXJ5KCkudG9TdHJpbmcoKTsKKyAgICAgICAgICB9CisKKyAgICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgICBwcm90ZWN0ZWQgU3RyaW5nIGRvSW5CYWNrZ3JvdW5kIChPYmplY3QuLi4gYXJndW1lbnRzKSB7CisgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICByZXR1cm4gZGV2aWNlQ29sbGVjdGlvbi5tYWtlSWRlbnRpZmllcihkZXZpY2VJZGVudGlmaWVyU2V0dGluZy5nZXRTZWxlY3RlZFZhbHVlKCkpOworICAgICAgICAgICAgfSBjYXRjaCAoU2VjdXJpdHlFeGNlcHRpb24gZXhjZXB0aW9uKSB7CisgICAgICAgICAgICAgIHJldHVybiBudWxsOworICAgICAgICAgICAgfQorICAgICAgICAgIH0KKworICAgICAgICAgIEBPdmVycmlkZQorICAgICAgICAgIHByb3RlY3RlZCB2b2lkIG9uUG9zdEV4ZWN1dGUgKFN0cmluZyBpZGVudGlmaWVyKSB7CisgICAgICAgICAgICBpZiAoaWRlbnRpZmllciA9PSBudWxsKSB7CisgICAgICAgICAgICAgIHNob3dQcm9ibGVtKFIuc3RyaW5nLkFERF9ERVZJQ0VfTk9fUEVSTUlTU0lPTiwgbmFtZSk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICBkZXZpY2VOYW1lcy5hZGQobmFtZSk7CisgICAgICAgICAgICAgIHVwZGF0ZVNlbGVjdGVkRGV2aWNlU2V0dGluZygpOworICAgICAgICAgICAgICB1cGRhdGVEZXZpY2VOYW1lKCk7CisKKyAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGZpbmFsIFNoYXJlZFByZWZlcmVuY2VzLkVkaXRvciBlZGl0b3IgPSBwcmVmZXJlbmNlLmdldEVkaXRvcigpOworCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgTWFwPFN0cmluZywgU3RyaW5nPiBwcm9wZXJ0aWVzID0gbmV3IExpbmtlZEhhc2hNYXAoKTsKKyAgICAgICAgICAgICAgICAgIHByb3BlcnRpZXMucHV0KFBSRUZfS0VZX0RFVklDRV9JREVOVElGSUVSLCBpZGVudGlmaWVyKTsKKworICAgICAgICAgICAgICAgICAgcHJvcGVydGllcy5wdXQoCisgICAgICAgICAgICAgICAgICAgIFBSRUZfS0VZX0RFVklDRV9EUklWRVIsCisgICAgICAgICAgICAgICAgICAgIGRldmljZURyaXZlclNldHRpbmcuZ2V0U2VsZWN0ZWRWYWx1ZSgpCisgICAgICAgICAgICAgICAgICApOworCisgICAgICAgICAgICAgICAgICBwdXRQcm9wZXJ0aWVzKGVkaXRvciwgbmFtZSwgcHJvcGVydGllcyk7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgZWRpdG9yLnB1dFN0cmluZ1NldChQUkVGX0tFWV9ERVZJQ0VfTkFNRVMsIGRldmljZU5hbWVzKTsKKyAgICAgICAgICAgICAgICBlZGl0b3IuYXBwbHkoKTsKKyAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgIGRpc21pc3NTY3JlZW4oKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9CisgICAgICAgIH0uZXhlY3V0ZSgpOworICAgICAgfQorICAgIH07CisKKyAgICByZW1vdmVEZXZpY2VDYW5jZWxsYXRpb25CdXR0b24gPSBuZXcgUHJlZmVyZW5jZUJ1dHRvbiAodGhpcywgUi5zdHJpbmcuUFJFRl9LRVlfUkVNT1ZFX0RFVklDRV9DQU5DRUwpIHsKKyAgICAgIEBPdmVycmlkZQorICAgICAgcHVibGljIHZvaWQgb25CdXR0b25DbGlja2VkICgpIHsKKyAgICAgICAgZGlzbWlzc1NjcmVlbigpOworICAgICAgfQorICAgIH07CisKKyAgICByZW1vdmVEZXZpY2VDb25maXJtYXRpb25CdXR0b24gPSBuZXcgUHJlZmVyZW5jZUJ1dHRvbih0aGlzLCBSLnN0cmluZy5QUkVGX0tFWV9SRU1PVkVfREVWSUNFX0NPTkZJUk0pIHsKKyAgICAgIEBPdmVycmlkZQorICAgICAgcHVibGljIHZvaWQgb25CdXR0b25DbGlja2VkICgpIHsKKyAgICAgICAgU3RyaW5nIG5hbWUgPSBzZWxlY3RlZERldmljZVNldHRpbmcuZ2V0U2VsZWN0ZWRWYWx1ZSgpOworCisgICAgICAgIGlmIChuYW1lICE9IG51bGwpIHsKKyAgICAgICAgICBCcmFpbGxlTm90aWZpY2F0aW9uLnVwZGF0ZURldmljZShudWxsKTsKKyAgICAgICAgICBkZXZpY2VOYW1lcy5yZW1vdmUobmFtZSk7CisgICAgICAgICAgc2VsZWN0ZWREZXZpY2VTZXR0aW5nLnNlbGVjdFZhbHVlKCIiKTsKKyAgICAgICAgICB1cGRhdGVTZWxlY3RlZERldmljZVNldHRpbmcoKTsKKyAgICAgICAgICB1cGRhdGVEZXZpY2VOYW1lKCk7CisKKyAgICAgICAgICB7CisgICAgICAgICAgICBTaGFyZWRQcmVmZXJlbmNlcy5FZGl0b3IgZWRpdG9yID0gcHJlZmVyZW5jZS5nZXRFZGl0b3IoKTsKKyAgICAgICAgICAgIGVkaXRvci5wdXRTdHJpbmdTZXQoUFJFRl9LRVlfREVWSUNFX05BTUVTLCBkZXZpY2VOYW1lcyk7CisgICAgICAgICAgICByZW1vdmVEZXZpY2VQcm9wZXJ0aWVzKGVkaXRvciwgbmFtZSk7CisgICAgICAgICAgICBlZGl0b3IuYXBwbHkoKTsKKyAgICAgICAgICB9CisKKyAgICAgICAgICByZXN0YXJ0QnJhaWxsZURyaXZlcihwcmVmcywgIiIpOworICAgICAgICB9CisKKyAgICAgICAgZGlzbWlzc1NjcmVlbigpOworICAgICAgfQorICAgIH07CisKKyAgICBkZXZpY2VEcml2ZXJTZXR0aW5nLnNvcnRFbGVtZW50c0J5TGFiZWwoMSk7CisgICAgZGV2aWNlTmFtZXMgPSBuZXcgVHJlZVNldDxTdHJpbmc+KHByZWZzLmdldFN0cmluZ1NldChQUkVGX0tFWV9ERVZJQ0VfTkFNRVMsIENvbGxlY3Rpb25zLkVNUFRZX1NFVCkpOworCisgICAgdXBkYXRlU2VsZWN0ZWREZXZpY2VTZXR0aW5nKCk7CisgICAgdXBkYXRlRGV2aWNlSWRlbnRpZmllclNldHRpbmcoZ2V0RGV2aWNlTWV0aG9kKCkpOworICAgIHVwZGF0ZURldmljZU5hbWUoKTsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvQW5kcm9pZC9HcmFkbGUvYXBwL3NyYy9tYWluL2phdmEvb3JnL2ExMXkvYnJsdHR5L2FuZHJvaWQvc2V0dGluZ3MvR2VuZXJhbFNldHRpbmdzLmphdmEgYi9BbmRyb2lkL0dyYWRsZS9hcHAvc3JjL21haW4vamF2YS9vcmcvYTExeS9icmx0dHkvYW5kcm9pZC9zZXR0aW5ncy9HZW5lcmFsU2V0dGluZ3MuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOWI5NTYwCi0tLSAvZGV2L251bGwKKysrIGIvQW5kcm9pZC9HcmFkbGUvYXBwL3NyYy9tYWluL2phdmEvb3JnL2ExMXkvYnJsdHR5L2FuZHJvaWQvc2V0dGluZ3MvR2VuZXJhbFNldHRpbmdzLmphdmEKQEAgLTAsMCArMSw0MiBAQAorLyoKKyAqIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisgKiAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisgKgorICogQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKK3BhY2thZ2Ugb3JnLmExMXkuYnJsdHR5LmFuZHJvaWQuc2V0dGluZ3M7CisKK2ltcG9ydCBhbmRyb2lkLm9zLkJ1bmRsZTsKK2ltcG9ydCBvcmcuYTExeS5icmx0dHkuYW5kcm9pZC4qOworCitwdWJsaWMgZmluYWwgY2xhc3MgR2VuZXJhbFNldHRpbmdzIGV4dGVuZHMgU2V0dGluZ3NGcmFnbWVudCB7CisgIHByaXZhdGUgUmVsZWFzZUJyYWlsbGVEZXZpY2VTZXR0aW5nIHJlbGVhc2VCcmFpbGxlRGV2aWNlU2V0dGluZyA9IG51bGw7CisgIHByaXZhdGUgTmF2aWdhdGlvbk1vZGVTZXR0aW5nIG5hdmlnYXRpb25Nb2RlU2V0dGluZyA9IG51bGw7CisgIHByaXZhdGUgVGV4dFRhYmxlU2V0dGluZyB0ZXh0VGFibGVTZXR0aW5nID0gbnVsbDsKKyAgcHJpdmF0ZSBDb250cmFjdGlvblRhYmxlU2V0dGluZyBjb250cmFjdGlvblRhYmxlU2V0dGluZyA9IG51bGw7CisgIHByaXZhdGUgU3BlZWNoU3VwcG9ydFNldHRpbmcgc3BlZWNoU3VwcG9ydFNldHRpbmcgPSBudWxsOworCisgIEBPdmVycmlkZQorICBwdWJsaWMgdm9pZCBvbkNyZWF0ZSAoQnVuZGxlIHNhdmVkSW5zdGFuY2VTdGF0ZSkgeworICAgIHN1cGVyLm9uQ3JlYXRlKHNhdmVkSW5zdGFuY2VTdGF0ZSk7CisgICAgYWRkUHJlZmVyZW5jZXNGcm9tUmVzb3VyY2UoUi54bWwuc2V0dGluZ3NfZ2VuZXJhbCk7CisKKyAgICByZWxlYXNlQnJhaWxsZURldmljZVNldHRpbmcgPSBuZXcgUmVsZWFzZUJyYWlsbGVEZXZpY2VTZXR0aW5nKHRoaXMpOworICAgIG5hdmlnYXRpb25Nb2RlU2V0dGluZyA9IG5ldyBOYXZpZ2F0aW9uTW9kZVNldHRpbmcodGhpcyk7CisgICAgdGV4dFRhYmxlU2V0dGluZyA9IG5ldyBUZXh0VGFibGVTZXR0aW5nKHRoaXMpOworICAgIGNvbnRyYWN0aW9uVGFibGVTZXR0aW5nID0gbmV3IENvbnRyYWN0aW9uVGFibGVTZXR0aW5nKHRoaXMpOworICAgIHNwZWVjaFN1cHBvcnRTZXR0aW5nID0gbmV3IFNwZWVjaFN1cHBvcnRTZXR0aW5nKHRoaXMpOworICB9Cit9CmRpZmYgLS1naXQgYS9BbmRyb2lkL0dyYWRsZS9hcHAvc3JjL21haW4vamF2YS9vcmcvYTExeS9icmx0dHkvYW5kcm9pZC9zZXR0aW5ncy9LZXlib2FyZFRhYmxlU2V0dGluZy5qYXZhIGIvQW5kcm9pZC9HcmFkbGUvYXBwL3NyYy9tYWluL2phdmEvb3JnL2ExMXkvYnJsdHR5L2FuZHJvaWQvc2V0dGluZ3MvS2V5Ym9hcmRUYWJsZVNldHRpbmcuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNzdkNDJmCi0tLSAvZGV2L251bGwKKysrIGIvQW5kcm9pZC9HcmFkbGUvYXBwL3NyYy9tYWluL2phdmEvb3JnL2ExMXkvYnJsdHR5L2FuZHJvaWQvc2V0dGluZ3MvS2V5Ym9hcmRUYWJsZVNldHRpbmcuamF2YQpAQCAtMCwwICsxLDQxIEBACisvKgorICogQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyAqICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyAqCisgKiBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorICoKKyAqIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyAqCisgKiBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisgKi8KKworcGFja2FnZSBvcmcuYTExeS5icmx0dHkuYW5kcm9pZC5zZXR0aW5nczsKKworaW1wb3J0IG9yZy5hMTF5LmJybHR0eS5hbmRyb2lkLio7CitpbXBvcnQgb3JnLmExMXkuYnJsdHR5LmNvcmUuQ29yZVdyYXBwZXI7CisKK3B1YmxpYyBjbGFzcyBLZXlib2FyZFRhYmxlU2V0dGluZyBleHRlbmRzIFNpbmdsZVNlbGVjdGlvblNldHRpbmcgeworICBwdWJsaWMgS2V5Ym9hcmRUYWJsZVNldHRpbmcgKFNldHRpbmdzRnJhZ21lbnQgZnJhZ21lbnQpIHsKKyAgICBzdXBlcihmcmFnbWVudCwgUi5zdHJpbmcuUFJFRl9LRVlfS0VZQk9BUkRfVEFCTEUpOworICAgIHNvcnRFbGVtZW50c0J5TGFiZWwoMSk7CisgIH0KKworICBAT3ZlcnJpZGUKKyAgcHJvdGVjdGVkIGZpbmFsIHZvaWQgb25TZWxlY3Rpb25DaGFuZ2VkIChmaW5hbCBTdHJpbmcgbmV3U2VsZWN0aW9uKSB7CisgICAgQ29yZVdyYXBwZXIucnVuT25Db3JlVGhyZWFkKAorICAgICAgbmV3IFJ1bm5hYmxlKCkgeworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHVibGljIHZvaWQgcnVuICgpIHsKKyAgICAgICAgICBDb3JlV3JhcHBlci5jaGFuZ2VLZXlib2FyZFRhYmxlKG5ld1NlbGVjdGlvbik7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICApOworICB9Cit9CmRpZmYgLS1naXQgYS9BbmRyb2lkL0dyYWRsZS9hcHAvc3JjL21haW4vamF2YS9vcmcvYTExeS9icmx0dHkvYW5kcm9pZC9zZXR0aW5ncy9Mb2dBY2Nlc3NpYmlsaXR5RXZlbnRzU2V0dGluZy5qYXZhIGIvQW5kcm9pZC9HcmFkbGUvYXBwL3NyYy9tYWluL2phdmEvb3JnL2ExMXkvYnJsdHR5L2FuZHJvaWQvc2V0dGluZ3MvTG9nQWNjZXNzaWJpbGl0eUV2ZW50c1NldHRpbmcuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MzUxNGE3Ci0tLSAvZGV2L251bGwKKysrIGIvQW5kcm9pZC9HcmFkbGUvYXBwL3NyYy9tYWluL2phdmEvb3JnL2ExMXkvYnJsdHR5L2FuZHJvaWQvc2V0dGluZ3MvTG9nQWNjZXNzaWJpbGl0eUV2ZW50c1NldHRpbmcuamF2YQpAQCAtMCwwICsxLDMyIEBACisvKgorICogQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyAqICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyAqCisgKiBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorICoKKyAqIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyAqCisgKiBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisgKi8KKworcGFja2FnZSBvcmcuYTExeS5icmx0dHkuYW5kcm9pZC5zZXR0aW5nczsKKworaW1wb3J0IG9yZy5hMTF5LmJybHR0eS5hbmRyb2lkLio7CisKK3B1YmxpYyBjbGFzcyBMb2dBY2Nlc3NpYmlsaXR5RXZlbnRzU2V0dGluZyBleHRlbmRzIENoZWNrQm94U2V0dGluZyB7CisgIHB1YmxpYyBMb2dBY2Nlc3NpYmlsaXR5RXZlbnRzU2V0dGluZyAoU2V0dGluZ3NGcmFnbWVudCBmcmFnbWVudCkgeworICAgIHN1cGVyKGZyYWdtZW50LCBSLnN0cmluZy5QUkVGX0tFWV9MT0dfQUNDRVNTSUJJTElUWV9FVkVOVFMpOworICB9CisKKyAgQE92ZXJyaWRlCisgIHByb3RlY3RlZCBmaW5hbCB2b2lkIG9uU3RhdGVDaGFuZ2VkIChib29sZWFuIG5ld1N0YXRlKSB7CisgICAgQXBwbGljYXRpb25TZXR0aW5ncy5MT0dfQUNDRVNTSUJJTElUWV9FVkVOVFMgPSBuZXdTdGF0ZTsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvQW5kcm9pZC9HcmFkbGUvYXBwL3NyYy9tYWluL2phdmEvb3JnL2ExMXkvYnJsdHR5L2FuZHJvaWQvc2V0dGluZ3MvTG9nQ2F0ZWdvcmllc1NldHRpbmcuamF2YSBiL0FuZHJvaWQvR3JhZGxlL2FwcC9zcmMvbWFpbi9qYXZhL29yZy9hMTF5L2JybHR0eS9hbmRyb2lkL3NldHRpbmdzL0xvZ0NhdGVnb3JpZXNTZXR0aW5nLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzQ2NjI2YQotLS0gL2Rldi9udWxsCisrKyBiL0FuZHJvaWQvR3JhZGxlL2FwcC9zcmMvbWFpbi9qYXZhL29yZy9hMTF5L2JybHR0eS9hbmRyb2lkL3NldHRpbmdzL0xvZ0NhdGVnb3JpZXNTZXR0aW5nLmphdmEKQEAgLTAsMCArMSw0MSBAQAorLyoKKyAqIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisgKiAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisgKgorICogQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKK3BhY2thZ2Ugb3JnLmExMXkuYnJsdHR5LmFuZHJvaWQuc2V0dGluZ3M7CisKK2ltcG9ydCBqYXZhLnV0aWwuU2V0OworaW1wb3J0IG9yZy5hMTF5LmJybHR0eS5hbmRyb2lkLio7CitpbXBvcnQgb3JnLmExMXkuYnJsdHR5LmNvcmUuQ29yZVdyYXBwZXI7CisKK3B1YmxpYyBjbGFzcyBMb2dDYXRlZ29yaWVzU2V0dGluZyBleHRlbmRzIE11bHRpcGxlU2VsZWN0aW9uU2V0dGluZyB7CisgIHB1YmxpYyBMb2dDYXRlZ29yaWVzU2V0dGluZyAoU2V0dGluZ3NGcmFnbWVudCBmcmFnbWVudCkgeworICAgIHN1cGVyKGZyYWdtZW50LCBSLnN0cmluZy5QUkVGX0tFWV9MT0dfQ0FURUdPUklFUyk7CisgIH0KKworICBAT3ZlcnJpZGUKKyAgcHJvdGVjdGVkIGZpbmFsIHZvaWQgb25TZWxlY3Rpb25DaGFuZ2VkIChmaW5hbCBTZXQ8U3RyaW5nPiBuZXdTZWxlY3Rpb24pIHsKKyAgICBDb3JlV3JhcHBlci5ydW5PbkNvcmVUaHJlYWQoCisgICAgICBuZXcgUnVubmFibGUoKSB7CisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgdm9pZCBydW4gKCkgeworICAgICAgICAgIENvcmVXcmFwcGVyLmNoYW5nZUxvZ0NhdGVnb3JpZXMobmV3U2VsZWN0aW9uKTsKKyAgICAgICAgfQorICAgICAgfQorICAgICk7CisgIH0KK30KZGlmZiAtLWdpdCBhL0FuZHJvaWQvR3JhZGxlL2FwcC9zcmMvbWFpbi9qYXZhL29yZy9hMTF5L2JybHR0eS9hbmRyb2lkL3NldHRpbmdzL0xvZ0tleWJvYXJkRXZlbnRzU2V0dGluZy5qYXZhIGIvQW5kcm9pZC9HcmFkbGUvYXBwL3NyYy9tYWluL2phdmEvb3JnL2ExMXkvYnJsdHR5L2FuZHJvaWQvc2V0dGluZ3MvTG9nS2V5Ym9hcmRFdmVudHNTZXR0aW5nLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTEwZmM0OAotLS0gL2Rldi9udWxsCisrKyBiL0FuZHJvaWQvR3JhZGxlL2FwcC9zcmMvbWFpbi9qYXZhL29yZy9hMTF5L2JybHR0eS9hbmRyb2lkL3NldHRpbmdzL0xvZ0tleWJvYXJkRXZlbnRzU2V0dGluZy5qYXZhCkBAIC0wLDAgKzEsMzIgQEAKKy8qCisgKiBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorICogICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorICoKKyAqIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorICoKKyAqIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyAqLworCitwYWNrYWdlIG9yZy5hMTF5LmJybHR0eS5hbmRyb2lkLnNldHRpbmdzOworCitpbXBvcnQgb3JnLmExMXkuYnJsdHR5LmFuZHJvaWQuKjsKKworcHVibGljIGNsYXNzIExvZ0tleWJvYXJkRXZlbnRzU2V0dGluZyBleHRlbmRzIENoZWNrQm94U2V0dGluZyB7CisgIHB1YmxpYyBMb2dLZXlib2FyZEV2ZW50c1NldHRpbmcgKFNldHRpbmdzRnJhZ21lbnQgZnJhZ21lbnQpIHsKKyAgICBzdXBlcihmcmFnbWVudCwgUi5zdHJpbmcuUFJFRl9LRVlfTE9HX0tFWUJPQVJEX0VWRU5UUyk7CisgIH0KKworICBAT3ZlcnJpZGUKKyAgcHJvdGVjdGVkIGZpbmFsIHZvaWQgb25TdGF0ZUNoYW5nZWQgKGJvb2xlYW4gbmV3U3RhdGUpIHsKKyAgICBBcHBsaWNhdGlvblNldHRpbmdzLkxPR19LRVlCT0FSRF9FVkVOVFMgPSBuZXdTdGF0ZTsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvQW5kcm9pZC9HcmFkbGUvYXBwL3NyYy9tYWluL2phdmEvb3JnL2ExMXkvYnJsdHR5L2FuZHJvaWQvc2V0dGluZ3MvTG9nTGV2ZWxTZXR0aW5nLmphdmEgYi9BbmRyb2lkL0dyYWRsZS9hcHAvc3JjL21haW4vamF2YS9vcmcvYTExeS9icmx0dHkvYW5kcm9pZC9zZXR0aW5ncy9Mb2dMZXZlbFNldHRpbmcuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ODE1ZmEyCi0tLSAvZGV2L251bGwKKysrIGIvQW5kcm9pZC9HcmFkbGUvYXBwL3NyYy9tYWluL2phdmEvb3JnL2ExMXkvYnJsdHR5L2FuZHJvaWQvc2V0dGluZ3MvTG9nTGV2ZWxTZXR0aW5nLmphdmEKQEAgLTAsMCArMSw0MCBAQAorLyoKKyAqIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisgKiAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisgKgorICogQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKK3BhY2thZ2Ugb3JnLmExMXkuYnJsdHR5LmFuZHJvaWQuc2V0dGluZ3M7CisKK2ltcG9ydCBvcmcuYTExeS5icmx0dHkuYW5kcm9pZC4qOworaW1wb3J0IG9yZy5hMTF5LmJybHR0eS5jb3JlLkNvcmVXcmFwcGVyOworCitwdWJsaWMgY2xhc3MgTG9nTGV2ZWxTZXR0aW5nIGV4dGVuZHMgU2luZ2xlU2VsZWN0aW9uU2V0dGluZyB7CisgIHB1YmxpYyBMb2dMZXZlbFNldHRpbmcgKFNldHRpbmdzRnJhZ21lbnQgZnJhZ21lbnQpIHsKKyAgICBzdXBlcihmcmFnbWVudCwgUi5zdHJpbmcuUFJFRl9LRVlfTE9HX0xFVkVMKTsKKyAgfQorCisgIEBPdmVycmlkZQorICBwcm90ZWN0ZWQgZmluYWwgdm9pZCBvblNlbGVjdGlvbkNoYW5nZWQgKGZpbmFsIFN0cmluZyBuZXdTZWxlY3Rpb24pIHsKKyAgICBDb3JlV3JhcHBlci5ydW5PbkNvcmVUaHJlYWQoCisgICAgICBuZXcgUnVubmFibGUoKSB7CisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgdm9pZCBydW4gKCkgeworICAgICAgICAgIENvcmVXcmFwcGVyLmNoYW5nZUxvZ0xldmVsKG5ld1NlbGVjdGlvbik7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICApOworICB9Cit9CmRpZmYgLS1naXQgYS9BbmRyb2lkL0dyYWRsZS9hcHAvc3JjL21haW4vamF2YS9vcmcvYTExeS9icmx0dHkvYW5kcm9pZC9zZXR0aW5ncy9Mb2dSZW5kZXJlZFNjcmVlblNldHRpbmcuamF2YSBiL0FuZHJvaWQvR3JhZGxlL2FwcC9zcmMvbWFpbi9qYXZhL29yZy9hMTF5L2JybHR0eS9hbmRyb2lkL3NldHRpbmdzL0xvZ1JlbmRlcmVkU2NyZWVuU2V0dGluZy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRjYjVkNjcKLS0tIC9kZXYvbnVsbAorKysgYi9BbmRyb2lkL0dyYWRsZS9hcHAvc3JjL21haW4vamF2YS9vcmcvYTExeS9icmx0dHkvYW5kcm9pZC9zZXR0aW5ncy9Mb2dSZW5kZXJlZFNjcmVlblNldHRpbmcuamF2YQpAQCAtMCwwICsxLDMyIEBACisvKgorICogQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyAqICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyAqCisgKiBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorICoKKyAqIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyAqCisgKiBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisgKi8KKworcGFja2FnZSBvcmcuYTExeS5icmx0dHkuYW5kcm9pZC5zZXR0aW5nczsKKworaW1wb3J0IG9yZy5hMTF5LmJybHR0eS5hbmRyb2lkLio7CisKK3B1YmxpYyBjbGFzcyBMb2dSZW5kZXJlZFNjcmVlblNldHRpbmcgZXh0ZW5kcyBDaGVja0JveFNldHRpbmcgeworICBwdWJsaWMgTG9nUmVuZGVyZWRTY3JlZW5TZXR0aW5nIChTZXR0aW5nc0ZyYWdtZW50IGZyYWdtZW50KSB7CisgICAgc3VwZXIoZnJhZ21lbnQsIFIuc3RyaW5nLlBSRUZfS0VZX0xPR19SRU5ERVJFRF9TQ1JFRU4pOworICB9CisKKyAgQE92ZXJyaWRlCisgIHByb3RlY3RlZCBmaW5hbCB2b2lkIG9uU3RhdGVDaGFuZ2VkIChib29sZWFuIG5ld1N0YXRlKSB7CisgICAgQXBwbGljYXRpb25TZXR0aW5ncy5MT0dfUkVOREVSRURfU0NSRUVOID0gbmV3U3RhdGU7CisgIH0KK30KZGlmZiAtLWdpdCBhL0FuZHJvaWQvR3JhZGxlL2FwcC9zcmMvbWFpbi9qYXZhL29yZy9hMTF5L2JybHR0eS9hbmRyb2lkL3NldHRpbmdzL0xvZ1VuaGFuZGxlZEV2ZW50c1NldHRpbmcuamF2YSBiL0FuZHJvaWQvR3JhZGxlL2FwcC9zcmMvbWFpbi9qYXZhL29yZy9hMTF5L2JybHR0eS9hbmRyb2lkL3NldHRpbmdzL0xvZ1VuaGFuZGxlZEV2ZW50c1NldHRpbmcuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MTkyMjViCi0tLSAvZGV2L251bGwKKysrIGIvQW5kcm9pZC9HcmFkbGUvYXBwL3NyYy9tYWluL2phdmEvb3JnL2ExMXkvYnJsdHR5L2FuZHJvaWQvc2V0dGluZ3MvTG9nVW5oYW5kbGVkRXZlbnRzU2V0dGluZy5qYXZhCkBAIC0wLDAgKzEsMzIgQEAKKy8qCisgKiBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorICogICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorICoKKyAqIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorICoKKyAqIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyAqLworCitwYWNrYWdlIG9yZy5hMTF5LmJybHR0eS5hbmRyb2lkLnNldHRpbmdzOworCitpbXBvcnQgb3JnLmExMXkuYnJsdHR5LmFuZHJvaWQuKjsKKworcHVibGljIGNsYXNzIExvZ1VuaGFuZGxlZEV2ZW50c1NldHRpbmcgZXh0ZW5kcyBDaGVja0JveFNldHRpbmcgeworICBwdWJsaWMgTG9nVW5oYW5kbGVkRXZlbnRzU2V0dGluZyAoU2V0dGluZ3NGcmFnbWVudCBmcmFnbWVudCkgeworICAgIHN1cGVyKGZyYWdtZW50LCBSLnN0cmluZy5QUkVGX0tFWV9MT0dfVU5IQU5ETEVEX0VWRU5UUyk7CisgIH0KKworICBAT3ZlcnJpZGUKKyAgcHJvdGVjdGVkIGZpbmFsIHZvaWQgb25TdGF0ZUNoYW5nZWQgKGJvb2xlYW4gbmV3U3RhdGUpIHsKKyAgICBBcHBsaWNhdGlvblNldHRpbmdzLkxPR19VTkhBTkRMRURfRVZFTlRTID0gbmV3U3RhdGU7CisgIH0KK30KZGlmZiAtLWdpdCBhL0FuZHJvaWQvR3JhZGxlL2FwcC9zcmMvbWFpbi9qYXZhL29yZy9hMTF5L2JybHR0eS9hbmRyb2lkL3NldHRpbmdzL01lc3NhZ2VTZXR0aW5ncy5qYXZhIGIvQW5kcm9pZC9HcmFkbGUvYXBwL3NyYy9tYWluL2phdmEvb3JnL2ExMXkvYnJsdHR5L2FuZHJvaWQvc2V0dGluZ3MvTWVzc2FnZVNldHRpbmdzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDI0MDA3ZgotLS0gL2Rldi9udWxsCisrKyBiL0FuZHJvaWQvR3JhZGxlL2FwcC9zcmMvbWFpbi9qYXZhL29yZy9hMTF5L2JybHR0eS9hbmRyb2lkL3NldHRpbmdzL01lc3NhZ2VTZXR0aW5ncy5qYXZhCkBAIC0wLDAgKzEsMzggQEAKKy8qCisgKiBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorICogICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorICoKKyAqIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorICoKKyAqIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyAqLworCitwYWNrYWdlIG9yZy5hMTF5LmJybHR0eS5hbmRyb2lkLnNldHRpbmdzOworCitpbXBvcnQgYW5kcm9pZC5vcy5CdW5kbGU7CitpbXBvcnQgb3JnLmExMXkuYnJsdHR5LmFuZHJvaWQuKjsKKworcHVibGljIGZpbmFsIGNsYXNzIE1lc3NhZ2VTZXR0aW5ncyBleHRlbmRzIFNldHRpbmdzRnJhZ21lbnQgeworICBwcml2YXRlIFNob3dOb3RpZmljYXRpb25zU2V0dGluZyBzaG93Tm90aWZpY2F0aW9uc1NldHRpbmcgPSBudWxsOworICBwcml2YXRlIFNob3dBbGVydHNTZXR0aW5nIHNob3dBbGVydHNTZXR0aW5nID0gbnVsbDsKKyAgcHJpdmF0ZSBTaG93QW5ub3VuY2VtZW50c1NldHRpbmcgc2hvd0Fubm91bmNlbWVudHNTZXR0aW5nID0gbnVsbDsKKworICBAT3ZlcnJpZGUKKyAgcHVibGljIHZvaWQgb25DcmVhdGUgKEJ1bmRsZSBzYXZlZEluc3RhbmNlU3RhdGUpIHsKKyAgICBzdXBlci5vbkNyZWF0ZShzYXZlZEluc3RhbmNlU3RhdGUpOworICAgIGFkZFByZWZlcmVuY2VzRnJvbVJlc291cmNlKFIueG1sLnNldHRpbmdzX21lc3NhZ2UpOworCisgICAgc2hvd05vdGlmaWNhdGlvbnNTZXR0aW5nID0gbmV3IFNob3dOb3RpZmljYXRpb25zU2V0dGluZyh0aGlzKTsKKyAgICBzaG93QWxlcnRzU2V0dGluZyA9IG5ldyBTaG93QWxlcnRzU2V0dGluZyh0aGlzKTsKKyAgICBzaG93QW5ub3VuY2VtZW50c1NldHRpbmcgPSBuZXcgU2hvd0Fubm91bmNlbWVudHNTZXR0aW5nKHRoaXMpOworICB9Cit9CmRpZmYgLS1naXQgYS9BbmRyb2lkL0dyYWRsZS9hcHAvc3JjL21haW4vamF2YS9vcmcvYTExeS9icmx0dHkvYW5kcm9pZC9zZXR0aW5ncy9NdWx0aXBsZVNlbGVjdGlvblNldHRpbmcuamF2YSBiL0FuZHJvaWQvR3JhZGxlL2FwcC9zcmMvbWFpbi9qYXZhL29yZy9hMTF5L2JybHR0eS9hbmRyb2lkL3NldHRpbmdzL011bHRpcGxlU2VsZWN0aW9uU2V0dGluZy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk2NmI1OWUKLS0tIC9kZXYvbnVsbAorKysgYi9BbmRyb2lkL0dyYWRsZS9hcHAvc3JjL21haW4vamF2YS9vcmcvYTExeS9icmx0dHkvYW5kcm9pZC9zZXR0aW5ncy9NdWx0aXBsZVNlbGVjdGlvblNldHRpbmcuamF2YQpAQCAtMCwwICsxLDk5IEBACisvKgorICogQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyAqICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyAqCisgKiBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorICoKKyAqIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyAqCisgKiBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisgKi8KKworcGFja2FnZSBvcmcuYTExeS5icmx0dHkuYW5kcm9pZC5zZXR0aW5nczsKKworaW1wb3J0IGFuZHJvaWQucHJlZmVyZW5jZS5NdWx0aVNlbGVjdExpc3RQcmVmZXJlbmNlOworaW1wb3J0IGFuZHJvaWQucHJlZmVyZW5jZS5QcmVmZXJlbmNlOworaW1wb3J0IGphdmEudXRpbC5TZXQ7CitpbXBvcnQgb3JnLmExMXkuYnJsdHR5LmFuZHJvaWQuKjsKKworcHVibGljIGFic3RyYWN0IGNsYXNzIE11bHRpcGxlU2VsZWN0aW9uU2V0dGluZyBleHRlbmRzIFNlbGVjdGlvblNldHRpbmc8TXVsdGlTZWxlY3RMaXN0UHJlZmVyZW5jZT4geworICBwcm90ZWN0ZWQgYWJzdHJhY3Qgdm9pZCBvblNlbGVjdGlvbkNoYW5nZWQgKFNldDxTdHJpbmc+IG5ld1NlbGVjdGlvbik7CisKKyAgQE92ZXJyaWRlCisgIHB1YmxpYyBmaW5hbCBDaGFyU2VxdWVuY2VbXSBnZXRBbGxWYWx1ZXMgKCkgeworICAgIHJldHVybiBwcmVmZXJlbmNlLmdldEVudHJ5VmFsdWVzKCk7CisgIH0KKworICBAT3ZlcnJpZGUKKyAgcHVibGljIGZpbmFsIENoYXJTZXF1ZW5jZSBnZXRWYWx1ZUF0IChpbnQgaW5kZXgpIHsKKyAgICByZXR1cm4gZ2V0QWxsVmFsdWVzKClbaW5kZXhdOworICB9CisKKyAgQE92ZXJyaWRlCisgIHB1YmxpYyBmaW5hbCBpbnQgaW5kZXhPZiAoU3RyaW5nIHZhbHVlKSB7CisgICAgcmV0dXJuIHByZWZlcmVuY2UuZmluZEluZGV4T2ZWYWx1ZSh2YWx1ZSk7CisgIH0KKworICBAT3ZlcnJpZGUKKyAgcHVibGljIGZpbmFsIENoYXJTZXF1ZW5jZVtdIGdldEFsbExhYmVscyAoKSB7CisgICAgcmV0dXJuIHByZWZlcmVuY2UuZ2V0RW50cmllcygpOworICB9CisKKyAgQE92ZXJyaWRlCisgIHB1YmxpYyBmaW5hbCBDaGFyU2VxdWVuY2UgZ2V0TGFiZWxBdCAoaW50IGluZGV4KSB7CisgICAgcmV0dXJuIGdldEFsbExhYmVscygpW2luZGV4XTsKKyAgfQorCisgIHB1YmxpYyBmaW5hbCBTZXQ8U3RyaW5nPiBnZXRTZWxlY3RlZFZhbHVlcyAoKSB7CisgICAgcmV0dXJuIHByZWZlcmVuY2UuZ2V0VmFsdWVzKCk7CisgIH0KKworICBAT3ZlcnJpZGUKKyAgcHJvdGVjdGVkIGZpbmFsIHZvaWQgc2V0RWxlbWVudHMgKFN0cmluZ1tdIHZhbHVlcywgU3RyaW5nW10gbGFiZWxzKSB7CisgICAgcHJlZmVyZW5jZS5zZXRFbnRyeVZhbHVlcyh2YWx1ZXMpOworICAgIHByZWZlcmVuY2Uuc2V0RW50cmllcyhsYWJlbHMpOworICB9CisKKyAgcHJvdGVjdGVkIGZpbmFsIHZvaWQgc2V0U3VtbWFyeSAoU2V0PFN0cmluZz4gdmFsdWVzKSB7CisgICAgU3RyaW5nQnVpbGRlciBzdW1tYXJ5ID0gbmV3IFN0cmluZ0J1aWxkZXIoKTsKKworICAgIGZvciAoU3RyaW5nIHZhbHVlIDogdmFsdWVzKSB7CisgICAgICBpZiAodmFsdWUubGVuZ3RoKCkgPiAwKSB7CisgICAgICAgIGlmIChzdW1tYXJ5Lmxlbmd0aCgpID4gMCkgc3VtbWFyeS5hcHBlbmQoJ1xuJyk7CisgICAgICAgIHN1bW1hcnkuYXBwZW5kKGdldExhYmVsRm9yKHZhbHVlKSk7CisgICAgICB9CisgICAgfQorCisgICAgaWYgKHN1bW1hcnkubGVuZ3RoKCkgPT0gMCkgeworICAgICAgc3VtbWFyeS5hcHBlbmQoZ2V0U3RyaW5nKFIuc3RyaW5nLlNFVF9TRUxFQ1RJT05fTk9ORSkpOworICAgIH0KKworICAgIHNldFN1bW1hcnkoc3VtbWFyeSk7CisgIH0KKworICBAT3ZlcnJpZGUKKyAgcHVibGljIGZpbmFsIHZvaWQgc2V0U3VtbWFyeSAoKSB7CisgICAgc2V0U3VtbWFyeShnZXRTZWxlY3RlZFZhbHVlcygpKTsKKyAgfQorCisgIEBPdmVycmlkZQorICBwdWJsaWMgYm9vbGVhbiBvblByZWZlcmVuY2VDaGFuZ2UgKFByZWZlcmVuY2UgcHJlZmVyZW5jZSwgT2JqZWN0IG5ld1ZhbHVlKSB7CisgICAgZmluYWwgU2V0PFN0cmluZz4gbmV3U2VsZWN0aW9uID0gKFNldDxTdHJpbmc+KW5ld1ZhbHVlOworCisgICAgc2V0U3VtbWFyeShuZXdTZWxlY3Rpb24pOworICAgIG9uU2VsZWN0aW9uQ2hhbmdlZChuZXdTZWxlY3Rpb24pOworCisgICAgcmV0dXJuIHRydWU7CisgIH0KKworICBwcm90ZWN0ZWQgTXVsdGlwbGVTZWxlY3Rpb25TZXR0aW5nIChTZXR0aW5nc0ZyYWdtZW50IGZyYWdtZW50LCBpbnQga2V5KSB7CisgICAgc3VwZXIoZnJhZ21lbnQsIGtleSk7CisgIH0KK30KZGlmZiAtLWdpdCBhL0FuZHJvaWQvR3JhZGxlL2FwcC9zcmMvbWFpbi9qYXZhL29yZy9hMTF5L2JybHR0eS9hbmRyb2lkL3NldHRpbmdzL05hdmlnYXRpb25Nb2RlU2V0dGluZy5qYXZhIGIvQW5kcm9pZC9HcmFkbGUvYXBwL3NyYy9tYWluL2phdmEvb3JnL2ExMXkvYnJsdHR5L2FuZHJvaWQvc2V0dGluZ3MvTmF2aWdhdGlvbk1vZGVTZXR0aW5nLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTc1YTUyNwotLS0gL2Rldi9udWxsCisrKyBiL0FuZHJvaWQvR3JhZGxlL2FwcC9zcmMvbWFpbi9qYXZhL29yZy9hMTF5L2JybHR0eS9hbmRyb2lkL3NldHRpbmdzL05hdmlnYXRpb25Nb2RlU2V0dGluZy5qYXZhCkBAIC0wLDAgKzEsMzIgQEAKKy8qCisgKiBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorICogICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorICoKKyAqIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorICoKKyAqIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyAqLworCitwYWNrYWdlIG9yZy5hMTF5LmJybHR0eS5hbmRyb2lkLnNldHRpbmdzOworCitpbXBvcnQgb3JnLmExMXkuYnJsdHR5LmFuZHJvaWQuKjsKKworcHVibGljIGNsYXNzIE5hdmlnYXRpb25Nb2RlU2V0dGluZyBleHRlbmRzIFNpbmdsZVNlbGVjdGlvblNldHRpbmcgeworICBwdWJsaWMgTmF2aWdhdGlvbk1vZGVTZXR0aW5nIChTZXR0aW5nc0ZyYWdtZW50IGZyYWdtZW50KSB7CisgICAgc3VwZXIoZnJhZ21lbnQsIFIuc3RyaW5nLlBSRUZfS0VZX05BVklHQVRJT05fTU9ERSk7CisgIH0KKworICBAT3ZlcnJpZGUKKyAgcHJvdGVjdGVkIGZpbmFsIHZvaWQgb25TZWxlY3Rpb25DaGFuZ2VkIChTdHJpbmcgbmV3U2VsZWN0aW9uKSB7CisgICAgQnJhaWxsZVJlbmRlcmVyLnNldEJyYWlsbGVSZW5kZXJlcihuZXdTZWxlY3Rpb24pOworICB9Cit9CmRpZmYgLS1naXQgYS9BbmRyb2lkL0dyYWRsZS9hcHAvc3JjL21haW4vamF2YS9vcmcvYTExeS9icmx0dHkvYW5kcm9pZC9zZXR0aW5ncy9QcmVmZXJlbmNlQnV0dG9uLmphdmEgYi9BbmRyb2lkL0dyYWRsZS9hcHAvc3JjL21haW4vamF2YS9vcmcvYTExeS9icmx0dHkvYW5kcm9pZC9zZXR0aW5ncy9QcmVmZXJlbmNlQnV0dG9uLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGI5MGQwMwotLS0gL2Rldi9udWxsCisrKyBiL0FuZHJvaWQvR3JhZGxlL2FwcC9zcmMvbWFpbi9qYXZhL29yZy9hMTF5L2JybHR0eS9hbmRyb2lkL3NldHRpbmdzL1ByZWZlcmVuY2VCdXR0b24uamF2YQpAQCAtMCwwICsxLDU2IEBACisvKgorICogQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyAqICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyAqCisgKiBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorICoKKyAqIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyAqCisgKiBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisgKi8KKworcGFja2FnZSBvcmcuYTExeS5icmx0dHkuYW5kcm9pZC5zZXR0aW5nczsKKworaW1wb3J0IGFuZHJvaWQucHJlZmVyZW5jZS5QcmVmZXJlbmNlOworaW1wb3J0IGFuZHJvaWQucHJlZmVyZW5jZS5QcmVmZXJlbmNlU2NyZWVuOworaW1wb3J0IG9yZy5hMTF5LmJybHR0eS5hbmRyb2lkLio7CisKK3B1YmxpYyBhYnN0cmFjdCBjbGFzcyBQcmVmZXJlbmNlQnV0dG9uCitleHRlbmRzIFByZWZlcmVuY2VXcmFwcGVyPFByZWZlcmVuY2U+CitpbXBsZW1lbnRzIFByZWZlcmVuY2UuT25QcmVmZXJlbmNlQ2xpY2tMaXN0ZW5lcgoreworICBwcm90ZWN0ZWQgYWJzdHJhY3Qgdm9pZCBvbkJ1dHRvbkNsaWNrZWQgKCk7CisKKyAgQE92ZXJyaWRlCisgIHB1YmxpYyBib29sZWFuIG9uUHJlZmVyZW5jZUNsaWNrIChQcmVmZXJlbmNlIHByZWZlcmVuY2UpIHsKKyAgICBvbkJ1dHRvbkNsaWNrZWQoKTsKKyAgICByZXR1cm4gdHJ1ZTsKKyAgfQorCisgIHByb3RlY3RlZCBQcmVmZXJlbmNlQnV0dG9uIChTZXR0aW5nc0ZyYWdtZW50IGZyYWdtZW50LCBpbnQga2V5KSB7CisgICAgc3VwZXIoZnJhZ21lbnQsIGtleSk7CisgICAgcHJlZmVyZW5jZS5zZXRPblByZWZlcmVuY2VDbGlja0xpc3RlbmVyKHRoaXMpOworICB9CisKKyAgcHJvdGVjdGVkIGZpbmFsIFByZWZlcmVuY2VTY3JlZW4gZmluZFNjcmVlbiAoKSB7CisgICAgUHJlZmVyZW5jZSBwcmVmID0gcHJlZmVyZW5jZTsKKworICAgIHdoaWxlIChwcmVmICE9IG51bGwpIHsKKyAgICAgIGlmIChwcmVmIGluc3RhbmNlb2YgUHJlZmVyZW5jZVNjcmVlbikgcmV0dXJuIChQcmVmZXJlbmNlU2NyZWVuKXByZWY7CisgICAgICBwcmVmID0gcHJlZi5nZXRQYXJlbnQoKTsKKyAgICB9CisKKyAgICByZXR1cm4gbnVsbDsKKyAgfQorCisgIHByb3RlY3RlZCBmaW5hbCB2b2lkIGRpc21pc3NTY3JlZW4gKCkgeworICAgIGZpbmRTY3JlZW4oKS5nZXREaWFsb2coKS5kaXNtaXNzKCk7CisgIH0KK30KZGlmZiAtLWdpdCBhL0FuZHJvaWQvR3JhZGxlL2FwcC9zcmMvbWFpbi9qYXZhL29yZy9hMTF5L2JybHR0eS9hbmRyb2lkL3NldHRpbmdzL1ByZWZlcmVuY2VTZXR0aW5nLmphdmEgYi9BbmRyb2lkL0dyYWRsZS9hcHAvc3JjL21haW4vamF2YS9vcmcvYTExeS9icmx0dHkvYW5kcm9pZC9zZXR0aW5ncy9QcmVmZXJlbmNlU2V0dGluZy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUyYzQ3NGMKLS0tIC9kZXYvbnVsbAorKysgYi9BbmRyb2lkL0dyYWRsZS9hcHAvc3JjL21haW4vamF2YS9vcmcvYTExeS9icmx0dHkvYW5kcm9pZC9zZXR0aW5ncy9QcmVmZXJlbmNlU2V0dGluZy5qYXZhCkBAIC0wLDAgKzEsMzUgQEAKKy8qCisgKiBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorICogICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorICoKKyAqIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorICoKKyAqIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyAqLworCitwYWNrYWdlIG9yZy5hMTF5LmJybHR0eS5hbmRyb2lkLnNldHRpbmdzOworCitpbXBvcnQgYW5kcm9pZC5wcmVmZXJlbmNlLlByZWZlcmVuY2U7CitpbXBvcnQgb3JnLmExMXkuYnJsdHR5LmFuZHJvaWQuKjsKKworcHVibGljIGFic3RyYWN0IGNsYXNzIFByZWZlcmVuY2VTZXR0aW5nPFAgZXh0ZW5kcyBQcmVmZXJlbmNlPgorZXh0ZW5kcyBQcmVmZXJlbmNlV3JhcHBlcjxQPgoraW1wbGVtZW50cyBQcmVmZXJlbmNlLk9uUHJlZmVyZW5jZUNoYW5nZUxpc3RlbmVyCit7CisgIHB1YmxpYyBhYnN0cmFjdCB2b2lkIHNldFN1bW1hcnkgKCk7CisKKyAgcHJvdGVjdGVkIFByZWZlcmVuY2VTZXR0aW5nIChTZXR0aW5nc0ZyYWdtZW50IGZyYWdtZW50LCBpbnQga2V5KSB7CisgICAgc3VwZXIoZnJhZ21lbnQsIGtleSk7CisgICAgc2V0U3VtbWFyeSgpOworICAgIHByZWZlcmVuY2Uuc2V0T25QcmVmZXJlbmNlQ2hhbmdlTGlzdGVuZXIodGhpcyk7CisgIH0KK30KZGlmZiAtLWdpdCBhL0FuZHJvaWQvR3JhZGxlL2FwcC9zcmMvbWFpbi9qYXZhL29yZy9hMTF5L2JybHR0eS9hbmRyb2lkL3NldHRpbmdzL1ByZWZlcmVuY2VXcmFwcGVyLmphdmEgYi9BbmRyb2lkL0dyYWRsZS9hcHAvc3JjL21haW4vamF2YS9vcmcvYTExeS9icmx0dHkvYW5kcm9pZC9zZXR0aW5ncy9QcmVmZXJlbmNlV3JhcHBlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU2MjZjOGUKLS0tIC9kZXYvbnVsbAorKysgYi9BbmRyb2lkL0dyYWRsZS9hcHAvc3JjL21haW4vamF2YS9vcmcvYTExeS9icmx0dHkvYW5kcm9pZC9zZXR0aW5ncy9QcmVmZXJlbmNlV3JhcHBlci5qYXZhCkBAIC0wLDAgKzEsNjAgQEAKKy8qCisgKiBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorICogICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorICoKKyAqIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorICoKKyAqIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyAqLworCitwYWNrYWdlIG9yZy5hMTF5LmJybHR0eS5hbmRyb2lkLnNldHRpbmdzOworCitpbXBvcnQgYW5kcm9pZC5wcmVmZXJlbmNlLlByZWZlcmVuY2U7CitpbXBvcnQgb3JnLmExMXkuYnJsdHR5LmFuZHJvaWQuKjsKKworcHVibGljIGFic3RyYWN0IGNsYXNzIFByZWZlcmVuY2VXcmFwcGVyPFAgZXh0ZW5kcyBQcmVmZXJlbmNlPiB7CisgIHByb3RlY3RlZCBmaW5hbCBTZXR0aW5nc0ZyYWdtZW50IHNldHRpbmdzRnJhZ21lbnQ7CisgIHByb3RlY3RlZCBmaW5hbCBQIHByZWZlcmVuY2U7CisKKyAgcHJvdGVjdGVkIFByZWZlcmVuY2VXcmFwcGVyIChTZXR0aW5nc0ZyYWdtZW50IGZyYWdtZW50LCBpbnQga2V5KSB7CisgICAgc2V0dGluZ3NGcmFnbWVudCA9IGZyYWdtZW50OworICAgIHByZWZlcmVuY2UgPSAoUClzZXR0aW5nc0ZyYWdtZW50LmdldFByZWZlcmVuY2Uoa2V5KTsKKyAgfQorCisgIHByb3RlY3RlZCBmaW5hbCBTdHJpbmcgZ2V0U3RyaW5nIChpbnQgc3RyaW5nKSB7CisgICAgcmV0dXJuIHNldHRpbmdzRnJhZ21lbnQuZ2V0U3RyaW5nKHN0cmluZyk7CisgIH0KKworICBwdWJsaWMgZmluYWwgQ2hhclNlcXVlbmNlIGdldFN1bW1hcnkgKCkgeworICAgIHJldHVybiBwcmVmZXJlbmNlLmdldFN1bW1hcnkoKTsKKyAgfQorCisgIHB1YmxpYyBmaW5hbCB2b2lkIHNldFN1bW1hcnkgKENoYXJTZXF1ZW5jZSBzdW1tYXJ5KSB7CisgICAgcHJlZmVyZW5jZS5zZXRTdW1tYXJ5KHN1bW1hcnkpOworICB9CisKKyAgcHVibGljIGZpbmFsIGJvb2xlYW4gaXNFbmFibGVkICgpIHsKKyAgICByZXR1cm4gcHJlZmVyZW5jZS5pc0VuYWJsZWQoKTsKKyAgfQorCisgIHB1YmxpYyBmaW5hbCB2b2lkIHNldEVuYWJsZWQgKGJvb2xlYW4geWVzKSB7CisgICAgcHJlZmVyZW5jZS5zZXRFbmFibGVkKHllcyk7CisgIH0KKworICBwdWJsaWMgZmluYWwgYm9vbGVhbiBpc1NlbGVjdGFibGUgKCkgeworICAgIHJldHVybiBwcmVmZXJlbmNlLmlzU2VsZWN0YWJsZSgpOworICB9CisKKyAgcHVibGljIGZpbmFsIHZvaWQgc2V0U2VsZWN0YWJsZSAoYm9vbGVhbiB5ZXMpIHsKKyAgICBwcmVmZXJlbmNlLnNldFNlbGVjdGFibGUoeWVzKTsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvQW5kcm9pZC9HcmFkbGUvYXBwL3NyYy9tYWluL2phdmEvb3JnL2ExMXkvYnJsdHR5L2FuZHJvaWQvc2V0dGluZ3MvUmVsZWFzZUJyYWlsbGVEZXZpY2VTZXR0aW5nLmphdmEgYi9BbmRyb2lkL0dyYWRsZS9hcHAvc3JjL21haW4vamF2YS9vcmcvYTExeS9icmx0dHkvYW5kcm9pZC9zZXR0aW5ncy9SZWxlYXNlQnJhaWxsZURldmljZVNldHRpbmcuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xN2JmNWY2Ci0tLSAvZGV2L251bGwKKysrIGIvQW5kcm9pZC9HcmFkbGUvYXBwL3NyYy9tYWluL2phdmEvb3JnL2ExMXkvYnJsdHR5L2FuZHJvaWQvc2V0dGluZ3MvUmVsZWFzZUJyYWlsbGVEZXZpY2VTZXR0aW5nLmphdmEKQEAgLTAsMCArMSwzMyBAQAorLyoKKyAqIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisgKiAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisgKgorICogQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKK3BhY2thZ2Ugb3JnLmExMXkuYnJsdHR5LmFuZHJvaWQuc2V0dGluZ3M7CisKK2ltcG9ydCBvcmcuYTExeS5icmx0dHkuYW5kcm9pZC4qOworCitwdWJsaWMgY2xhc3MgUmVsZWFzZUJyYWlsbGVEZXZpY2VTZXR0aW5nIGV4dGVuZHMgQ2hlY2tCb3hTZXR0aW5nIHsKKyAgcHVibGljIFJlbGVhc2VCcmFpbGxlRGV2aWNlU2V0dGluZyAoU2V0dGluZ3NGcmFnbWVudCBmcmFnbWVudCkgeworICAgIHN1cGVyKGZyYWdtZW50LCBSLnN0cmluZy5QUkVGX0tFWV9SRUxFQVNFX0JSQUlMTEVfREVWSUNFKTsKKyAgfQorCisgIEBPdmVycmlkZQorICBwcm90ZWN0ZWQgZmluYWwgdm9pZCBvblN0YXRlQ2hhbmdlZCAoYm9vbGVhbiBuZXdTdGF0ZSkgeworICAgIEFwcGxpY2F0aW9uU2V0dGluZ3MuUkVMRUFTRV9CUkFJTExFX0RFVklDRSA9IG5ld1N0YXRlOworICAgIEJyYWlsbGVOb3RpZmljYXRpb24udXBkYXRlU3RhdGUoKTsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvQW5kcm9pZC9HcmFkbGUvYXBwL3NyYy9tYWluL2phdmEvb3JnL2ExMXkvYnJsdHR5L2FuZHJvaWQvc2V0dGluZ3MvU2VsZWN0aW9uU2V0dGluZy5qYXZhIGIvQW5kcm9pZC9HcmFkbGUvYXBwL3NyYy9tYWluL2phdmEvb3JnL2ExMXkvYnJsdHR5L2FuZHJvaWQvc2V0dGluZ3MvU2VsZWN0aW9uU2V0dGluZy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcwNGZiZGQKLS0tIC9kZXYvbnVsbAorKysgYi9BbmRyb2lkL0dyYWRsZS9hcHAvc3JjL21haW4vamF2YS9vcmcvYTExeS9icmx0dHkvYW5kcm9pZC9zZXR0aW5ncy9TZWxlY3Rpb25TZXR0aW5nLmphdmEKQEAgLTAsMCArMSw4OSBAQAorLyoKKyAqIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisgKiAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisgKgorICogQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKK3BhY2thZ2Ugb3JnLmExMXkuYnJsdHR5LmFuZHJvaWQuc2V0dGluZ3M7CisKK2ltcG9ydCBhbmRyb2lkLnByZWZlcmVuY2UuUHJlZmVyZW5jZTsKK2ltcG9ydCBqYXZhLnRleHQuQ29sbGF0aW9uS2V5OworaW1wb3J0IGphdmEudGV4dC5Db2xsYXRvcjsKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlzOworaW1wb3J0IGphdmEudXRpbC5MaW5rZWRIYXNoTWFwOworaW1wb3J0IGphdmEudXRpbC5NYXA7CitpbXBvcnQgb3JnLmExMXkuYnJsdHR5LmFuZHJvaWQuKjsKKworcHVibGljIGFic3RyYWN0IGNsYXNzIFNlbGVjdGlvblNldHRpbmc8UCBleHRlbmRzIFByZWZlcmVuY2U+IGV4dGVuZHMgUHJlZmVyZW5jZVNldHRpbmc8UD4geworICBwcm90ZWN0ZWQgU2VsZWN0aW9uU2V0dGluZyAoU2V0dGluZ3NGcmFnbWVudCBmcmFnbWVudCwgaW50IGtleSkgeworICAgIHN1cGVyKGZyYWdtZW50LCBrZXkpOworICB9CisKKyAgcHVibGljIGFic3RyYWN0IENoYXJTZXF1ZW5jZVtdIGdldEFsbFZhbHVlcyAoKTsKKyAgcHVibGljIGFic3RyYWN0IENoYXJTZXF1ZW5jZSBnZXRWYWx1ZUF0IChpbnQgaW5kZXgpOworICBwdWJsaWMgYWJzdHJhY3QgaW50IGluZGV4T2YgKFN0cmluZyB2YWx1ZSk7CisKKyAgcHVibGljIGFic3RyYWN0IENoYXJTZXF1ZW5jZVtdIGdldEFsbExhYmVscyAoKTsKKyAgcHVibGljIGFic3RyYWN0IENoYXJTZXF1ZW5jZSBnZXRMYWJlbEF0IChpbnQgaW5kZXgpOworCisgIHB1YmxpYyBmaW5hbCBDaGFyU2VxdWVuY2UgZ2V0TGFiZWxGb3IgKFN0cmluZyB2YWx1ZSkgeworICAgIGludCBpbmRleCA9IGluZGV4T2YodmFsdWUpOworICAgIGlmIChpbmRleCA8IDApIHJldHVybiBudWxsOworICAgIHJldHVybiBnZXRMYWJlbEF0KGluZGV4KTsKKyAgfQorCisgIHB1YmxpYyBmaW5hbCBpbnQgZ2V0RWxlbWVudENvdW50ICgpIHsKKyAgICByZXR1cm4gZ2V0QWxsVmFsdWVzKCkubGVuZ3RoOworICB9CisKKyAgcHJvdGVjdGVkIGFic3RyYWN0IHZvaWQgc2V0RWxlbWVudHMgKFN0cmluZ1tdIHZhbHVlcywgU3RyaW5nW10gbGFiZWxzKTsKKworICBwcm90ZWN0ZWQgZmluYWwgdm9pZCBzZXRFbGVtZW50cyAoU3RyaW5nW10gdmFsdWVzKSB7CisgICAgc2V0RWxlbWVudHModmFsdWVzLCB2YWx1ZXMpOworICB9CisKKyAgcHJvdGVjdGVkIGZpbmFsIHZvaWQgc29ydEVsZW1lbnRzQnlMYWJlbCAoaW50IGZyb21JbmRleCkgeworICAgIENvbGxhdG9yIGNvbGxhdG9yID0gQ29sbGF0b3IuZ2V0SW5zdGFuY2UoKTsKKyAgICBjb2xsYXRvci5zZXRTdHJlbmd0aChDb2xsYXRvci5QUklNQVJZKTsKKyAgICBjb2xsYXRvci5zZXREZWNvbXBvc2l0aW9uKENvbGxhdG9yLkNBTk9OSUNBTF9ERUNPTVBPU0lUSU9OKTsKKworICAgIFN0cmluZ1tdIHZhbHVlcyA9IExhbmd1YWdlVXRpbGl0aWVzLm5ld1N0cmluZ0FycmF5KGdldEFsbFZhbHVlcygpKTsKKyAgICBTdHJpbmdbXSBsYWJlbHMgPSBMYW5ndWFnZVV0aWxpdGllcy5uZXdTdHJpbmdBcnJheShnZXRBbGxMYWJlbHMoKSk7CisKKyAgICBpbnQgc2l6ZSA9IHZhbHVlcy5sZW5ndGg7CisgICAgTWFwPFN0cmluZywgU3RyaW5nPiBtYXAgPSBuZXcgTGlua2VkSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4oKTsKKyAgICBDb2xsYXRpb25LZXkga2V5c1tdID0gbmV3IENvbGxhdGlvbktleVtzaXplXTsKKworICAgIGZvciAoaW50IGk9MDsgaTxzaXplOyBpKz0xKSB7CisgICAgICBTdHJpbmcgbGFiZWwgPSBsYWJlbHNbaV07CisgICAgICBtYXAucHV0KGxhYmVsLCB2YWx1ZXNbaV0pOworICAgICAga2V5c1tpXSA9IGNvbGxhdG9yLmdldENvbGxhdGlvbktleShsYWJlbCk7CisgICAgfQorCisgICAgQXJyYXlzLnNvcnQoa2V5cywgZnJvbUluZGV4LCBrZXlzLmxlbmd0aCk7CisKKyAgICBmb3IgKGludCBpPTA7IGk8c2l6ZTsgaSs9MSkgeworICAgICAgU3RyaW5nIGxhYmVsID0ga2V5c1tpXS5nZXRTb3VyY2VTdHJpbmcoKTsKKyAgICAgIGxhYmVsc1tpXSA9IGxhYmVsOworICAgICAgdmFsdWVzW2ldID0gbWFwLmdldChsYWJlbCk7CisgICAgfQorCisgICAgc2V0RWxlbWVudHModmFsdWVzLCBsYWJlbHMpOworICB9CisKKyAgcHJvdGVjdGVkIGZpbmFsIHZvaWQgc29ydEVsZW1lbnRzQnlMYWJlbCAoKSB7CisgICAgc29ydEVsZW1lbnRzQnlMYWJlbCgwKTsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvQW5kcm9pZC9HcmFkbGUvYXBwL3NyYy9tYWluL2phdmEvb3JnL2ExMXkvYnJsdHR5L2FuZHJvaWQvc2V0dGluZ3MvU2VyaWFsRGV2aWNlQ29sbGVjdGlvbi5qYXZhIGIvQW5kcm9pZC9HcmFkbGUvYXBwL3NyYy9tYWluL2phdmEvb3JnL2ExMXkvYnJsdHR5L2FuZHJvaWQvc2V0dGluZ3MvU2VyaWFsRGV2aWNlQ29sbGVjdGlvbi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNkNGMxMmMKLS0tIC9kZXYvbnVsbAorKysgYi9BbmRyb2lkL0dyYWRsZS9hcHAvc3JjL21haW4vamF2YS9vcmcvYTExeS9icmx0dHkvYW5kcm9pZC9zZXR0aW5ncy9TZXJpYWxEZXZpY2VDb2xsZWN0aW9uLmphdmEKQEAgLTAsMCArMSw1MCBAQAorLyoKKyAqIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisgKiAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisgKgorICogQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKK3BhY2thZ2Ugb3JnLmExMXkuYnJsdHR5LmFuZHJvaWQuc2V0dGluZ3M7CisKK2ltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29udGV4dDsKK2ltcG9ydCBqYXZhLnV0aWwuTWFwOworaW1wb3J0IG9yZy5hMTF5LmJybHR0eS5hbmRyb2lkLio7CisKK3B1YmxpYyBmaW5hbCBjbGFzcyBTZXJpYWxEZXZpY2VDb2xsZWN0aW9uIGV4dGVuZHMgRGV2aWNlQ29sbGVjdGlvbiB7CisgIHB1YmxpYyBmaW5hbCBzdGF0aWMgU3RyaW5nIERFVklDRV9RVUFMSUZJRVIgPSAic2VyaWFsIjsKKworICBAT3ZlcnJpZGUKKyAgcHVibGljIGZpbmFsIFN0cmluZyBnZXRRdWFsaWZpZXIgKCkgeworICAgIHJldHVybiBERVZJQ0VfUVVBTElGSUVSOworICB9CisKKyAgcHVibGljIFNlcmlhbERldmljZUNvbGxlY3Rpb24gKENvbnRleHQgY29udGV4dCkgeworICAgIHN1cGVyKCk7CisgIH0KKworICBAT3ZlcnJpZGUKKyAgcHVibGljIGZpbmFsIFN0cmluZ1tdIG1ha2VWYWx1ZXMgKCkgeworICAgIHJldHVybiBuZXcgU3RyaW5nWzBdOworICB9CisKKyAgQE92ZXJyaWRlCisgIHB1YmxpYyBmaW5hbCBTdHJpbmdbXSBtYWtlTGFiZWxzICgpIHsKKyAgICByZXR1cm4gbmV3IFN0cmluZ1swXTsKKyAgfQorCisgIEBPdmVycmlkZQorICBwcm90ZWN0ZWQgZmluYWwgdm9pZCBwdXRQYXJhbWV0ZXJzIChNYXA8U3RyaW5nLCBTdHJpbmc+IHBhcmFtZXRlcnMsIFN0cmluZyB2YWx1ZSkgeworICB9Cit9CmRpZmYgLS1naXQgYS9BbmRyb2lkL0dyYWRsZS9hcHAvc3JjL21haW4vamF2YS9vcmcvYTExeS9icmx0dHkvYW5kcm9pZC9zZXR0aW5ncy9TZXR0aW5nc0FjdGl2aXR5LmphdmEgYi9BbmRyb2lkL0dyYWRsZS9hcHAvc3JjL21haW4vamF2YS9vcmcvYTExeS9icmx0dHkvYW5kcm9pZC9zZXR0aW5ncy9TZXR0aW5nc0FjdGl2aXR5LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGFjZTkyZgotLS0gL2Rldi9udWxsCisrKyBiL0FuZHJvaWQvR3JhZGxlL2FwcC9zcmMvbWFpbi9qYXZhL29yZy9hMTF5L2JybHR0eS9hbmRyb2lkL3NldHRpbmdzL1NldHRpbmdzQWN0aXZpdHkuamF2YQpAQCAtMCwwICsxLDQ4IEBACisvKgorICogQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyAqICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyAqCisgKiBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorICoKKyAqIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyAqCisgKiBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisgKi8KKworcGFja2FnZSBvcmcuYTExeS5icmx0dHkuYW5kcm9pZC5zZXR0aW5nczsKKworaW1wb3J0IGFuZHJvaWQub3MuQnVuZGxlOworaW1wb3J0IGFuZHJvaWQucHJlZmVyZW5jZS5QcmVmZXJlbmNlQWN0aXZpdHk7CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CitpbXBvcnQgb3JnLmExMXkuYnJsdHR5LmFuZHJvaWQuKjsKKworcHVibGljIGNsYXNzIFNldHRpbmdzQWN0aXZpdHkgZXh0ZW5kcyBQcmVmZXJlbmNlQWN0aXZpdHkgeworICBwcml2YXRlIGZpbmFsIHN0YXRpYyBTdHJpbmcgTE9HX1RBRyA9IFNldHRpbmdzQWN0aXZpdHkuY2xhc3MuZ2V0TmFtZSgpOworCisgIEBPdmVycmlkZQorICBwcm90ZWN0ZWQgdm9pZCBvbkNyZWF0ZSAoQnVuZGxlIHNhdmVkSW5zdGFuY2VTdGF0ZSkgeworICAgIHN1cGVyLm9uQ3JlYXRlKHNhdmVkSW5zdGFuY2VTdGF0ZSk7CisgICAgc2V0VGl0bGUoUi5zdHJpbmcuU0VUVElOR1NfU0NSRUVOX01BSU4pOworICB9CisKKyAgQE92ZXJyaWRlCisgIHB1YmxpYyB2b2lkIG9uQnVpbGRIZWFkZXJzIChMaXN0PEhlYWRlcj4gaGVhZGVycykgeworICAgIGxvYWRIZWFkZXJzRnJvbVJlc291cmNlKFIueG1sLnNldHRpbmdzX2hlYWRlcnMsIGhlYWRlcnMpOworICB9CisKKyAgQE92ZXJyaWRlCisgIHByb3RlY3RlZCBib29sZWFuIGlzVmFsaWRGcmFnbWVudCAoU3RyaW5nIG5hbWUpIHsKKyAgICByZXR1cm4gdHJ1ZTsKKyAgfQorCisgIHB1YmxpYyBzdGF0aWMgdm9pZCBsYXVuY2ggKCkgeworICAgIEFwcGxpY2F0aW9uVXRpbGl0aWVzLmxhdW5jaChTZXR0aW5nc0FjdGl2aXR5LmNsYXNzKTsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvQW5kcm9pZC9HcmFkbGUvYXBwL3NyYy9tYWluL2phdmEvb3JnL2ExMXkvYnJsdHR5L2FuZHJvaWQvc2V0dGluZ3MvU2V0dGluZ3NGcmFnbWVudC5qYXZhIGIvQW5kcm9pZC9HcmFkbGUvYXBwL3NyYy9tYWluL2phdmEvb3JnL2ExMXkvYnJsdHR5L2FuZHJvaWQvc2V0dGluZ3MvU2V0dGluZ3NGcmFnbWVudC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU0NDlmYTMKLS0tIC9kZXYvbnVsbAorKysgYi9BbmRyb2lkL0dyYWRsZS9hcHAvc3JjL21haW4vamF2YS9vcmcvYTExeS9icmx0dHkvYW5kcm9pZC9zZXR0aW5ncy9TZXR0aW5nc0ZyYWdtZW50LmphdmEKQEAgLTAsMCArMSw5MSBAQAorLyoKKyAqIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisgKiAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisgKgorICogQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKK3BhY2thZ2Ugb3JnLmExMXkuYnJsdHR5LmFuZHJvaWQuc2V0dGluZ3M7CisKK2ltcG9ydCBhbmRyb2lkLmNvbnRlbnQuU2hhcmVkUHJlZmVyZW5jZXM7CitpbXBvcnQgYW5kcm9pZC5vcy5CdW5kbGU7CitpbXBvcnQgYW5kcm9pZC5wcmVmZXJlbmNlLlByZWZlcmVuY2U7CitpbXBvcnQgYW5kcm9pZC5wcmVmZXJlbmNlLlByZWZlcmVuY2VGcmFnbWVudDsKK2ltcG9ydCBhbmRyb2lkLnByZWZlcmVuY2UuUHJlZmVyZW5jZVNjcmVlbjsKK2ltcG9ydCBhbmRyb2lkLndpZGdldC5Ub2FzdDsKK2ltcG9ydCBqYXZhLnV0aWwuTGlua2VkSGFzaE1hcDsKK2ltcG9ydCBqYXZhLnV0aWwuTWFwOworaW1wb3J0IG9yZy5hMTF5LmJybHR0eS5hbmRyb2lkLio7CisKK3B1YmxpYyBhYnN0cmFjdCBjbGFzcyBTZXR0aW5nc0ZyYWdtZW50IGV4dGVuZHMgUHJlZmVyZW5jZUZyYWdtZW50IHsKKyAgcHJpdmF0ZSBmaW5hbCBzdGF0aWMgU3RyaW5nIExPR19UQUcgPSBTZXR0aW5nc0ZyYWdtZW50LmNsYXNzLmdldE5hbWUoKTsKKworICBAT3ZlcnJpZGUKKyAgcHVibGljIHZvaWQgb25DcmVhdGUgKEJ1bmRsZSBzYXZlZEluc3RhbmNlU3RhdGUpIHsKKyAgICBzdXBlci5vbkNyZWF0ZShzYXZlZEluc3RhbmNlU3RhdGUpOworCisgICAgaWYgKEFQSVRlc3RzLmhhdmVOb3VnYXQpIHsKKyAgICAgIGdldFByZWZlcmVuY2VNYW5hZ2VyKCkuc2V0U3RvcmFnZURldmljZVByb3RlY3RlZCgpOworICAgIH0KKyAgfQorCisgIHByb3RlY3RlZCBmaW5hbCB2b2lkIHNob3dQcm9ibGVtIChpbnQgcHJvYmxlbSwgU3RyaW5nIGRldGFpbCkgeworICAgIFN0cmluZ0J1aWxkZXIgbWVzc2FnZSA9IG5ldyBTdHJpbmdCdWlsZGVyKCk7CisgICAgbWVzc2FnZS5hcHBlbmQoZ2V0U3RyaW5nKHByb2JsZW0pKTsKKyAgICBpZiAoZGV0YWlsICE9IG51bGwpIG1lc3NhZ2UuYXBwZW5kKCI6ICIpLmFwcGVuZChkZXRhaWwpOworICAgIFRvYXN0Lm1ha2VUZXh0KGdldEFjdGl2aXR5KCksIG1lc3NhZ2UudG9TdHJpbmcoKSwgVG9hc3QuTEVOR1RIX0xPTkcpLnNob3coKTsKKyAgfQorCisgIHByb3RlY3RlZCBmaW5hbCB2b2lkIHNob3dQcm9ibGVtIChpbnQgcHJvYmxlbSkgeworICAgIHNob3dQcm9ibGVtKHByb2JsZW0sIG51bGwpOworICB9CisKKyAgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIG1ha2VQcm9wZXJ0eUtleSAoU3RyaW5nIG5hbWUsIFN0cmluZyBrZXkpIHsKKyAgICByZXR1cm4ga2V5ICsgJy0nICsgbmFtZTsKKyAgfQorCisgIHByb3RlY3RlZCBzdGF0aWMgdm9pZCBwdXRQcm9wZXJ0aWVzIChTaGFyZWRQcmVmZXJlbmNlcy5FZGl0b3IgZWRpdG9yLCBTdHJpbmcgbmFtZSwgTWFwPFN0cmluZywgU3RyaW5nPiBwcm9wZXJ0aWVzKSB7CisgICAgZm9yIChNYXAuRW50cnk8U3RyaW5nLCBTdHJpbmc+IHByb3BlcnR5IDogcHJvcGVydGllcy5lbnRyeVNldCgpKSB7CisgICAgICBlZGl0b3IucHV0U3RyaW5nKG1ha2VQcm9wZXJ0eUtleShuYW1lLCBwcm9wZXJ0eS5nZXRLZXkoKSksIHByb3BlcnR5LmdldFZhbHVlKCkpOworICAgIH0KKyAgfQorCisgIHByb3RlY3RlZCBzdGF0aWMgTWFwPFN0cmluZywgU3RyaW5nPiBnZXRQcm9wZXJ0aWVzIChTaGFyZWRQcmVmZXJlbmNlcyBwcmVmcywgU3RyaW5nIG5hbWUsIFN0cmluZy4uLiBrZXlzKSB7CisgICAgTWFwPFN0cmluZywgU3RyaW5nPiBwcm9wZXJ0aWVzID0gbmV3IExpbmtlZEhhc2hNYXAoKTsKKworICAgIGZvciAoU3RyaW5nIGtleSA6IGtleXMpIHsKKyAgICAgIHByb3BlcnRpZXMucHV0KGtleSwgcHJlZnMuZ2V0U3RyaW5nKG1ha2VQcm9wZXJ0eUtleShuYW1lLCBrZXkpLCAiIikpOworICAgIH0KKworICAgIHJldHVybiBwcm9wZXJ0aWVzOworICB9CisKKyAgcHJvdGVjdGVkIHN0YXRpYyB2b2lkIHJlbW92ZVByb3BlcnRpZXMgKFNoYXJlZFByZWZlcmVuY2VzLkVkaXRvciBlZGl0b3IsIFN0cmluZyBuYW1lLCBTdHJpbmcuLi4ga2V5cykgeworICAgIGZvciAoU3RyaW5nIGtleSA6IGtleXMpIHsKKyAgICAgIGVkaXRvci5yZW1vdmUobWFrZVByb3BlcnR5S2V5KG5hbWUsIGtleSkpOworICAgIH0KKyAgfQorCisgIHByb3RlY3RlZCBmaW5hbCBTaGFyZWRQcmVmZXJlbmNlcyBnZXRQcmVmZXJlbmNlcyAoKSB7CisgICAgcmV0dXJuIGdldFByZWZlcmVuY2VNYW5hZ2VyKCkuZ2V0U2hhcmVkUHJlZmVyZW5jZXMoKTsKKyAgfQorCisgIHByb3RlY3RlZCBmaW5hbCBQcmVmZXJlbmNlIGdldFByZWZlcmVuY2UgKGludCBrZXkpIHsKKyAgICByZXR1cm4gZmluZFByZWZlcmVuY2UoZ2V0UmVzb3VyY2VzKCkuZ2V0U3RyaW5nKGtleSkpOworICB9CisKKyAgcHJvdGVjdGVkIGZpbmFsIFByZWZlcmVuY2VTY3JlZW4gZ2V0UHJlZmVyZW5jZVNjcmVlbiAoaW50IGtleSkgeworICAgIHJldHVybiAoUHJlZmVyZW5jZVNjcmVlbilnZXRQcmVmZXJlbmNlKGtleSk7CisgIH0KK30KZGlmZiAtLWdpdCBhL0FuZHJvaWQvR3JhZGxlL2FwcC9zcmMvbWFpbi9qYXZhL29yZy9hMTF5L2JybHR0eS9hbmRyb2lkL3NldHRpbmdzL1Nob3dBbGVydHNTZXR0aW5nLmphdmEgYi9BbmRyb2lkL0dyYWRsZS9hcHAvc3JjL21haW4vamF2YS9vcmcvYTExeS9icmx0dHkvYW5kcm9pZC9zZXR0aW5ncy9TaG93QWxlcnRzU2V0dGluZy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg1ODExMmMKLS0tIC9kZXYvbnVsbAorKysgYi9BbmRyb2lkL0dyYWRsZS9hcHAvc3JjL21haW4vamF2YS9vcmcvYTExeS9icmx0dHkvYW5kcm9pZC9zZXR0aW5ncy9TaG93QWxlcnRzU2V0dGluZy5qYXZhCkBAIC0wLDAgKzEsMzIgQEAKKy8qCisgKiBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorICogICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorICoKKyAqIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorICoKKyAqIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyAqLworCitwYWNrYWdlIG9yZy5hMTF5LmJybHR0eS5hbmRyb2lkLnNldHRpbmdzOworCitpbXBvcnQgb3JnLmExMXkuYnJsdHR5LmFuZHJvaWQuKjsKKworcHVibGljIGNsYXNzIFNob3dBbGVydHNTZXR0aW5nIGV4dGVuZHMgQ2hlY2tCb3hTZXR0aW5nIHsKKyAgcHVibGljIFNob3dBbGVydHNTZXR0aW5nIChTZXR0aW5nc0ZyYWdtZW50IGZyYWdtZW50KSB7CisgICAgc3VwZXIoZnJhZ21lbnQsIFIuc3RyaW5nLlBSRUZfS0VZX1NIT1dfQUxFUlRTKTsKKyAgfQorCisgIEBPdmVycmlkZQorICBwcm90ZWN0ZWQgZmluYWwgdm9pZCBvblN0YXRlQ2hhbmdlZCAoYm9vbGVhbiBuZXdTdGF0ZSkgeworICAgIEFwcGxpY2F0aW9uU2V0dGluZ3MuU0hPV19BTEVSVFMgPSBuZXdTdGF0ZTsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvQW5kcm9pZC9HcmFkbGUvYXBwL3NyYy9tYWluL2phdmEvb3JnL2ExMXkvYnJsdHR5L2FuZHJvaWQvc2V0dGluZ3MvU2hvd0Fubm91bmNlbWVudHNTZXR0aW5nLmphdmEgYi9BbmRyb2lkL0dyYWRsZS9hcHAvc3JjL21haW4vamF2YS9vcmcvYTExeS9icmx0dHkvYW5kcm9pZC9zZXR0aW5ncy9TaG93QW5ub3VuY2VtZW50c1NldHRpbmcuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NWI1MmRhCi0tLSAvZGV2L251bGwKKysrIGIvQW5kcm9pZC9HcmFkbGUvYXBwL3NyYy9tYWluL2phdmEvb3JnL2ExMXkvYnJsdHR5L2FuZHJvaWQvc2V0dGluZ3MvU2hvd0Fubm91bmNlbWVudHNTZXR0aW5nLmphdmEKQEAgLTAsMCArMSwzMiBAQAorLyoKKyAqIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisgKiAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisgKgorICogQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKK3BhY2thZ2Ugb3JnLmExMXkuYnJsdHR5LmFuZHJvaWQuc2V0dGluZ3M7CisKK2ltcG9ydCBvcmcuYTExeS5icmx0dHkuYW5kcm9pZC4qOworCitwdWJsaWMgY2xhc3MgU2hvd0Fubm91bmNlbWVudHNTZXR0aW5nIGV4dGVuZHMgQ2hlY2tCb3hTZXR0aW5nIHsKKyAgcHVibGljIFNob3dBbm5vdW5jZW1lbnRzU2V0dGluZyAoU2V0dGluZ3NGcmFnbWVudCBmcmFnbWVudCkgeworICAgIHN1cGVyKGZyYWdtZW50LCBSLnN0cmluZy5QUkVGX0tFWV9TSE9XX0FOTk9VTkNFTUVOVFMpOworICB9CisKKyAgQE92ZXJyaWRlCisgIHByb3RlY3RlZCBmaW5hbCB2b2lkIG9uU3RhdGVDaGFuZ2VkIChib29sZWFuIG5ld1N0YXRlKSB7CisgICAgQXBwbGljYXRpb25TZXR0aW5ncy5TSE9XX0FOTk9VTkNFTUVOVFMgPSBuZXdTdGF0ZTsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvQW5kcm9pZC9HcmFkbGUvYXBwL3NyYy9tYWluL2phdmEvb3JnL2ExMXkvYnJsdHR5L2FuZHJvaWQvc2V0dGluZ3MvU2hvd05vdGlmaWNhdGlvbnNTZXR0aW5nLmphdmEgYi9BbmRyb2lkL0dyYWRsZS9hcHAvc3JjL21haW4vamF2YS9vcmcvYTExeS9icmx0dHkvYW5kcm9pZC9zZXR0aW5ncy9TaG93Tm90aWZpY2F0aW9uc1NldHRpbmcuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43OWFlMTUzCi0tLSAvZGV2L251bGwKKysrIGIvQW5kcm9pZC9HcmFkbGUvYXBwL3NyYy9tYWluL2phdmEvb3JnL2ExMXkvYnJsdHR5L2FuZHJvaWQvc2V0dGluZ3MvU2hvd05vdGlmaWNhdGlvbnNTZXR0aW5nLmphdmEKQEAgLTAsMCArMSwzMiBAQAorLyoKKyAqIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisgKiAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisgKgorICogQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKK3BhY2thZ2Ugb3JnLmExMXkuYnJsdHR5LmFuZHJvaWQuc2V0dGluZ3M7CisKK2ltcG9ydCBvcmcuYTExeS5icmx0dHkuYW5kcm9pZC4qOworCitwdWJsaWMgY2xhc3MgU2hvd05vdGlmaWNhdGlvbnNTZXR0aW5nIGV4dGVuZHMgQ2hlY2tCb3hTZXR0aW5nIHsKKyAgcHVibGljIFNob3dOb3RpZmljYXRpb25zU2V0dGluZyAoU2V0dGluZ3NGcmFnbWVudCBmcmFnbWVudCkgeworICAgIHN1cGVyKGZyYWdtZW50LCBSLnN0cmluZy5QUkVGX0tFWV9TSE9XX05PVElGSUNBVElPTlMpOworICB9CisKKyAgQE92ZXJyaWRlCisgIHByb3RlY3RlZCBmaW5hbCB2b2lkIG9uU3RhdGVDaGFuZ2VkIChib29sZWFuIG5ld1N0YXRlKSB7CisgICAgQXBwbGljYXRpb25TZXR0aW5ncy5TSE9XX05PVElGSUNBVElPTlMgPSBuZXdTdGF0ZTsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvQW5kcm9pZC9HcmFkbGUvYXBwL3NyYy9tYWluL2phdmEvb3JnL2ExMXkvYnJsdHR5L2FuZHJvaWQvc2V0dGluZ3MvU2luZ2xlU2VsZWN0aW9uU2V0dGluZy5qYXZhIGIvQW5kcm9pZC9HcmFkbGUvYXBwL3NyYy9tYWluL2phdmEvb3JnL2ExMXkvYnJsdHR5L2FuZHJvaWQvc2V0dGluZ3MvU2luZ2xlU2VsZWN0aW9uU2V0dGluZy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE5NzRhMDcKLS0tIC9kZXYvbnVsbAorKysgYi9BbmRyb2lkL0dyYWRsZS9hcHAvc3JjL21haW4vamF2YS9vcmcvYTExeS9icmx0dHkvYW5kcm9pZC9zZXR0aW5ncy9TaW5nbGVTZWxlY3Rpb25TZXR0aW5nLmphdmEKQEAgLTAsMCArMSwxMDEgQEAKKy8qCisgKiBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorICogICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorICoKKyAqIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorICoKKyAqIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyAqLworCitwYWNrYWdlIG9yZy5hMTF5LmJybHR0eS5hbmRyb2lkLnNldHRpbmdzOworCitpbXBvcnQgYW5kcm9pZC5wcmVmZXJlbmNlLkxpc3RQcmVmZXJlbmNlOworaW1wb3J0IGFuZHJvaWQucHJlZmVyZW5jZS5QcmVmZXJlbmNlOworaW1wb3J0IG9yZy5hMTF5LmJybHR0eS5hbmRyb2lkLio7CisKK3B1YmxpYyBhYnN0cmFjdCBjbGFzcyBTaW5nbGVTZWxlY3Rpb25TZXR0aW5nIGV4dGVuZHMgU2VsZWN0aW9uU2V0dGluZzxMaXN0UHJlZmVyZW5jZT4geworICBwcm90ZWN0ZWQgYWJzdHJhY3Qgdm9pZCBvblNlbGVjdGlvbkNoYW5nZWQgKFN0cmluZyBuZXdTZWxlY3Rpb24pOworCisgIEBPdmVycmlkZQorICBwdWJsaWMgZmluYWwgQ2hhclNlcXVlbmNlW10gZ2V0QWxsVmFsdWVzICgpIHsKKyAgICByZXR1cm4gcHJlZmVyZW5jZS5nZXRFbnRyeVZhbHVlcygpOworICB9CisKKyAgQE92ZXJyaWRlCisgIHB1YmxpYyBmaW5hbCBDaGFyU2VxdWVuY2UgZ2V0VmFsdWVBdCAoaW50IGluZGV4KSB7CisgICAgcmV0dXJuIGdldEFsbFZhbHVlcygpW2luZGV4XTsKKyAgfQorCisgIEBPdmVycmlkZQorICBwdWJsaWMgZmluYWwgaW50IGluZGV4T2YgKFN0cmluZyB2YWx1ZSkgeworICAgIHJldHVybiBwcmVmZXJlbmNlLmZpbmRJbmRleE9mVmFsdWUodmFsdWUpOworICB9CisKKyAgQE92ZXJyaWRlCisgIHB1YmxpYyBmaW5hbCBDaGFyU2VxdWVuY2VbXSBnZXRBbGxMYWJlbHMgKCkgeworICAgIHJldHVybiBwcmVmZXJlbmNlLmdldEVudHJpZXMoKTsKKyAgfQorCisgIEBPdmVycmlkZQorICBwdWJsaWMgZmluYWwgQ2hhclNlcXVlbmNlIGdldExhYmVsQXQgKGludCBpbmRleCkgeworICAgIHJldHVybiBnZXRBbGxMYWJlbHMoKVtpbmRleF07CisgIH0KKworICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldFNlbGVjdGVkVmFsdWUgKCkgeworICAgIHJldHVybiBwcmVmZXJlbmNlLmdldFZhbHVlKCk7CisgIH0KKworICBwdWJsaWMgZmluYWwgQ2hhclNlcXVlbmNlIGdldFNlbGVjdGVkTGFiZWwgKCkgeworICAgIHJldHVybiBwcmVmZXJlbmNlLmdldEVudHJ5KCk7CisgIH0KKworICBAT3ZlcnJpZGUKKyAgcHVibGljIGZpbmFsIHZvaWQgc2V0U3VtbWFyeSAoKSB7CisgICAgQ2hhclNlcXVlbmNlIGxhYmVsID0gZ2V0U2VsZWN0ZWRMYWJlbCgpOworICAgIGlmIChsYWJlbCA9PSBudWxsKSBsYWJlbCA9ICIiOworICAgIHNldFN1bW1hcnkobGFiZWwpOworICB9CisKKyAgcHJvdGVjdGVkIGZpbmFsIHZvaWQgc2V0U3VtbWFyeSAoaW50IGluZGV4KSB7CisgICAgc2V0U3VtbWFyeShnZXRMYWJlbEF0KGluZGV4KSk7CisgIH0KKworICBAT3ZlcnJpZGUKKyAgcHVibGljIGJvb2xlYW4gb25QcmVmZXJlbmNlQ2hhbmdlIChQcmVmZXJlbmNlIHByZWZlcmVuY2UsIE9iamVjdCBuZXdWYWx1ZSkgeworICAgIGZpbmFsIFN0cmluZyBuZXdTZWxlY3Rpb24gPSAoU3RyaW5nKW5ld1ZhbHVlOworCisgICAgc2V0U3VtbWFyeShpbmRleE9mKG5ld1NlbGVjdGlvbikpOworICAgIG9uU2VsZWN0aW9uQ2hhbmdlZChuZXdTZWxlY3Rpb24pOworCisgICAgcmV0dXJuIHRydWU7CisgIH0KKworICBwcm90ZWN0ZWQgU2luZ2xlU2VsZWN0aW9uU2V0dGluZyAoU2V0dGluZ3NGcmFnbWVudCBmcmFnbWVudCwgaW50IGtleSkgeworICAgIHN1cGVyKGZyYWdtZW50LCBrZXkpOworICB9CisKKyAgQE92ZXJyaWRlCisgIHByb3RlY3RlZCBmaW5hbCB2b2lkIHNldEVsZW1lbnRzIChTdHJpbmdbXSB2YWx1ZXMsIFN0cmluZ1tdIGxhYmVscykgeworICAgIHByZWZlcmVuY2Uuc2V0RW50cnlWYWx1ZXModmFsdWVzKTsKKyAgICBwcmVmZXJlbmNlLnNldEVudHJpZXMobGFiZWxzKTsKKyAgfQorCisgIHByb3RlY3RlZCBmaW5hbCB2b2lkIHNlbGVjdEZpcnN0RWxlbWVudCAoKSB7CisgICAgcHJlZmVyZW5jZS5zZXRWYWx1ZUluZGV4KDApOworICAgIHNldFN1bW1hcnkoKTsKKyAgfQorCisgIHB1YmxpYyBmaW5hbCB2b2lkIHNlbGVjdFZhbHVlIChTdHJpbmcgbmV3VmFsdWUpIHsKKyAgICBwcmVmZXJlbmNlLnNldFZhbHVlKG5ld1ZhbHVlKTsKKyAgICBzZXRTdW1tYXJ5KCk7CisgIH0KK30KZGlmZiAtLWdpdCBhL0FuZHJvaWQvR3JhZGxlL2FwcC9zcmMvbWFpbi9qYXZhL29yZy9hMTF5L2JybHR0eS9hbmRyb2lkL3NldHRpbmdzL1NwZWVjaFN1cHBvcnRTZXR0aW5nLmphdmEgYi9BbmRyb2lkL0dyYWRsZS9hcHAvc3JjL21haW4vamF2YS9vcmcvYTExeS9icmx0dHkvYW5kcm9pZC9zZXR0aW5ncy9TcGVlY2hTdXBwb3J0U2V0dGluZy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ1MzY0ZDcKLS0tIC9kZXYvbnVsbAorKysgYi9BbmRyb2lkL0dyYWRsZS9hcHAvc3JjL21haW4vamF2YS9vcmcvYTExeS9icmx0dHkvYW5kcm9pZC9zZXR0aW5ncy9TcGVlY2hTdXBwb3J0U2V0dGluZy5qYXZhCkBAIC0wLDAgKzEsNDEgQEAKKy8qCisgKiBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorICogICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorICoKKyAqIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorICoKKyAqIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyAqLworCitwYWNrYWdlIG9yZy5hMTF5LmJybHR0eS5hbmRyb2lkLnNldHRpbmdzOworCitpbXBvcnQgb3JnLmExMXkuYnJsdHR5LmFuZHJvaWQuKjsKK2ltcG9ydCBvcmcuYTExeS5icmx0dHkuY29yZS5Db3JlV3JhcHBlcjsKKworcHVibGljIGNsYXNzIFNwZWVjaFN1cHBvcnRTZXR0aW5nIGV4dGVuZHMgU2luZ2xlU2VsZWN0aW9uU2V0dGluZyB7CisgIHB1YmxpYyBTcGVlY2hTdXBwb3J0U2V0dGluZyAoU2V0dGluZ3NGcmFnbWVudCBmcmFnbWVudCkgeworICAgIHN1cGVyKGZyYWdtZW50LCBSLnN0cmluZy5QUkVGX0tFWV9TUEVFQ0hfU1VQUE9SVCk7CisgIH0KKworICBAT3ZlcnJpZGUKKyAgcHJvdGVjdGVkIGZpbmFsIHZvaWQgb25TZWxlY3Rpb25DaGFuZ2VkIChmaW5hbCBTdHJpbmcgbmV3U2VsZWN0aW9uKSB7CisgICAgQ29yZVdyYXBwZXIucnVuT25Db3JlVGhyZWFkKAorICAgICAgbmV3IFJ1bm5hYmxlKCkgeworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHVibGljIHZvaWQgcnVuICgpIHsKKyAgICAgICAgICBDb3JlV3JhcHBlci5jaGFuZ2VTcGVlY2hEcml2ZXIobmV3U2VsZWN0aW9uKTsKKyAgICAgICAgICBDb3JlV3JhcHBlci5yZXN0YXJ0U3BlZWNoRHJpdmVyKCk7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICApOworICB9Cit9CmRpZmYgLS1naXQgYS9BbmRyb2lkL0dyYWRsZS9hcHAvc3JjL21haW4vamF2YS9vcmcvYTExeS9icmx0dHkvYW5kcm9pZC9zZXR0aW5ncy9UZXh0U2V0dGluZy5qYXZhIGIvQW5kcm9pZC9HcmFkbGUvYXBwL3NyYy9tYWluL2phdmEvb3JnL2ExMXkvYnJsdHR5L2FuZHJvaWQvc2V0dGluZ3MvVGV4dFNldHRpbmcuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZDUyMjI0Ci0tLSAvZGV2L251bGwKKysrIGIvQW5kcm9pZC9HcmFkbGUvYXBwL3NyYy9tYWluL2phdmEvb3JnL2ExMXkvYnJsdHR5L2FuZHJvaWQvc2V0dGluZ3MvVGV4dFNldHRpbmcuamF2YQpAQCAtMCwwICsxLDUwIEBACisvKgorICogQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyAqICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyAqCisgKiBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorICoKKyAqIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyAqCisgKiBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisgKi8KKworcGFja2FnZSBvcmcuYTExeS5icmx0dHkuYW5kcm9pZC5zZXR0aW5nczsKKworaW1wb3J0IGFuZHJvaWQucHJlZmVyZW5jZS5FZGl0VGV4dFByZWZlcmVuY2U7CitpbXBvcnQgYW5kcm9pZC5wcmVmZXJlbmNlLlByZWZlcmVuY2U7CitpbXBvcnQgb3JnLmExMXkuYnJsdHR5LmFuZHJvaWQuKjsKKworcHVibGljIGFic3RyYWN0IGNsYXNzIFRleHRTZXR0aW5nIGV4dGVuZHMgUHJlZmVyZW5jZVNldHRpbmc8RWRpdFRleHRQcmVmZXJlbmNlPiB7CisgIHByb3RlY3RlZCBhYnN0cmFjdCB2b2lkIG9uVGV4dENoYW5nZWQgKFN0cmluZyBuZXdUZXh0KTsKKworICBwdWJsaWMgZmluYWwgQ2hhclNlcXVlbmNlIGdldFRleHQgKCkgeworICAgIHJldHVybiBwcmVmZXJlbmNlLmdldEVkaXRUZXh0KCkuZ2V0VGV4dCgpOworICB9CisKKyAgQE92ZXJyaWRlCisgIHB1YmxpYyBmaW5hbCB2b2lkIHNldFN1bW1hcnkgKCkgeworICAgIHNldFN1bW1hcnkoZ2V0VGV4dCgpKTsKKyAgfQorCisgIEBPdmVycmlkZQorICBwdWJsaWMgYm9vbGVhbiBvblByZWZlcmVuY2VDaGFuZ2UgKFByZWZlcmVuY2UgcHJlZmVyZW5jZSwgT2JqZWN0IG5ld1ZhbHVlKSB7CisgICAgZmluYWwgU3RyaW5nIG5ld1RleHQgPSAoU3RyaW5nKW5ld1ZhbHVlOworCisgICAgc2V0U3VtbWFyeShuZXdUZXh0KTsKKyAgICBvblRleHRDaGFuZ2VkKG5ld1RleHQpOworCisgICAgcmV0dXJuIHRydWU7CisgIH0KKworICBwcm90ZWN0ZWQgVGV4dFNldHRpbmcgKFNldHRpbmdzRnJhZ21lbnQgZnJhZ21lbnQsIGludCBrZXkpIHsKKyAgICBzdXBlcihmcmFnbWVudCwga2V5KTsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvQW5kcm9pZC9HcmFkbGUvYXBwL3NyYy9tYWluL2phdmEvb3JnL2ExMXkvYnJsdHR5L2FuZHJvaWQvc2V0dGluZ3MvVGV4dFRhYmxlU2V0dGluZy5qYXZhIGIvQW5kcm9pZC9HcmFkbGUvYXBwL3NyYy9tYWluL2phdmEvb3JnL2ExMXkvYnJsdHR5L2FuZHJvaWQvc2V0dGluZ3MvVGV4dFRhYmxlU2V0dGluZy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMzNTUxYjEKLS0tIC9kZXYvbnVsbAorKysgYi9BbmRyb2lkL0dyYWRsZS9hcHAvc3JjL21haW4vamF2YS9vcmcvYTExeS9icmx0dHkvYW5kcm9pZC9zZXR0aW5ncy9UZXh0VGFibGVTZXR0aW5nLmphdmEKQEAgLTAsMCArMSw0MSBAQAorLyoKKyAqIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisgKiAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisgKgorICogQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKK3BhY2thZ2Ugb3JnLmExMXkuYnJsdHR5LmFuZHJvaWQuc2V0dGluZ3M7CisKK2ltcG9ydCBvcmcuYTExeS5icmx0dHkuYW5kcm9pZC4qOworaW1wb3J0IG9yZy5hMTF5LmJybHR0eS5jb3JlLkNvcmVXcmFwcGVyOworCitwdWJsaWMgY2xhc3MgVGV4dFRhYmxlU2V0dGluZyBleHRlbmRzIFNpbmdsZVNlbGVjdGlvblNldHRpbmcgeworICBwdWJsaWMgVGV4dFRhYmxlU2V0dGluZyAoU2V0dGluZ3NGcmFnbWVudCBmcmFnbWVudCkgeworICAgIHN1cGVyKGZyYWdtZW50LCBSLnN0cmluZy5QUkVGX0tFWV9URVhUX1RBQkxFKTsKKyAgICBzb3J0RWxlbWVudHNCeUxhYmVsKDEpOworICB9CisKKyAgQE92ZXJyaWRlCisgIHByb3RlY3RlZCBmaW5hbCB2b2lkIG9uU2VsZWN0aW9uQ2hhbmdlZCAoZmluYWwgU3RyaW5nIG5ld1NlbGVjdGlvbikgeworICAgIENvcmVXcmFwcGVyLnJ1bk9uQ29yZVRocmVhZCgKKyAgICAgIG5ldyBSdW5uYWJsZSgpIHsKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyB2b2lkIHJ1biAoKSB7CisgICAgICAgICAgQ29yZVdyYXBwZXIuY2hhbmdlVGV4dFRhYmxlKG5ld1NlbGVjdGlvbik7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICApOworICB9Cit9CmRpZmYgLS1naXQgYS9BbmRyb2lkL0dyYWRsZS9hcHAvc3JjL21haW4vamF2YS9vcmcvYTExeS9icmx0dHkvYW5kcm9pZC9zZXR0aW5ncy9Vc2JEZXZpY2VBdHRhY2hlZE1vbml0b3IuamF2YSBiL0FuZHJvaWQvR3JhZGxlL2FwcC9zcmMvbWFpbi9qYXZhL29yZy9hMTF5L2JybHR0eS9hbmRyb2lkL3NldHRpbmdzL1VzYkRldmljZUF0dGFjaGVkTW9uaXRvci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ2MWQzMTkKLS0tIC9kZXYvbnVsbAorKysgYi9BbmRyb2lkL0dyYWRsZS9hcHAvc3JjL21haW4vamF2YS9vcmcvYTExeS9icmx0dHkvYW5kcm9pZC9zZXR0aW5ncy9Vc2JEZXZpY2VBdHRhY2hlZE1vbml0b3IuamF2YQpAQCAtMCwwICsxLDg3IEBACisvKgorICogQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyAqICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyAqCisgKiBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorICoKKyAqIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyAqCisgKiBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisgKi8KKworcGFja2FnZSBvcmcuYTExeS5icmx0dHkuYW5kcm9pZC5zZXR0aW5nczsKKworaW1wb3J0IGFuZHJvaWQuYXBwLkFjdGl2aXR5OworaW1wb3J0IGFuZHJvaWQuY29udGVudC5JbnRlbnQ7CitpbXBvcnQgYW5kcm9pZC5oYXJkd2FyZS51c2IuKjsKK2ltcG9ydCBhbmRyb2lkLm9zLkJ1bmRsZTsKK2ltcG9ydCBhbmRyb2lkLnV0aWwuTG9nOworaW1wb3J0IGphdmEudXRpbC5MaW5rZWRIYXNoTWFwOworaW1wb3J0IGphdmEudXRpbC5NYXA7CitpbXBvcnQgb3JnLmExMXkuYnJsdHR5LmFuZHJvaWQuKjsKKworcHVibGljIGNsYXNzIFVzYkRldmljZUF0dGFjaGVkTW9uaXRvciBleHRlbmRzIEFjdGl2aXR5IHsKKyAgcHJpdmF0ZSBmaW5hbCBzdGF0aWMgU3RyaW5nIExPR19UQUcgPSBVc2JEZXZpY2VBdHRhY2hlZE1vbml0b3IuY2xhc3MuZ2V0TmFtZSgpOworCisgIHByaXZhdGUgc3RhdGljIHZvaWQgYWRkUHJvcGVydHkgKE1hcDxTdHJpbmcsIFN0cmluZz4gcHJvcGVydGllcywgU3RyaW5nIG5hbWUsIGludCB2YWx1ZSkgeworICAgIGlmICh2YWx1ZSAhPSAwKSB7CisgICAgICBwcm9wZXJ0aWVzLnB1dChuYW1lLCBTdHJpbmcuZm9ybWF0KCIlMDRYIiwgdmFsdWUpKTsKKyAgICB9CisgIH0KKworICBwcml2YXRlIHN0YXRpYyB2b2lkIGFkZFByb3BlcnR5IChNYXA8U3RyaW5nLCBTdHJpbmc+IHByb3BlcnRpZXMsIFN0cmluZyBuYW1lLCBTdHJpbmcgdmFsdWUpIHsKKyAgICBpZiAodmFsdWUgIT0gbnVsbCkgeworICAgICAgaWYgKCF2YWx1ZS5pc0VtcHR5KCkpIHsKKyAgICAgICAgY2hhciBxdW90ZSA9ICciJzsKKyAgICAgICAgcHJvcGVydGllcy5wdXQobmFtZSwgU3RyaW5nLmZvcm1hdCgiJWMlcyVjIiwgcXVvdGUsIHZhbHVlLCBxdW90ZSkpOworICAgICAgfQorICAgIH0KKyAgfQorCisgIHByaXZhdGUgc3RhdGljIE1hcDxTdHJpbmcsIFN0cmluZz4gZ2V0UHJvcGVydGllcyAoVXNiRGV2aWNlIGRldmljZSkgeworICAgIE1hcDxTdHJpbmcsIFN0cmluZz4gcHJvcGVydGllcyA9IG5ldyBMaW5rZWRIYXNoTWFwPD4oKTsKKworICAgIGFkZFByb3BlcnR5KHByb3BlcnRpZXMsICJWSUQiLCBkZXZpY2UuZ2V0VmVuZG9ySWQoKSk7CisgICAgYWRkUHJvcGVydHkocHJvcGVydGllcywgIlBJRCIsIGRldmljZS5nZXRQcm9kdWN0SWQoKSk7CisgICAgYWRkUHJvcGVydHkocHJvcGVydGllcywgIlNlcmlhbCIsIGRldmljZS5nZXRTZXJpYWxOdW1iZXIoKSk7CisgICAgYWRkUHJvcGVydHkocHJvcGVydGllcywgIk1hbnVmYWN0dXJlciIsIGRldmljZS5nZXRNYW51ZmFjdHVyZXJOYW1lKCkpOworICAgIGFkZFByb3BlcnR5KHByb3BlcnRpZXMsICJQcm9kdWN0IiwgZGV2aWNlLmdldFByb2R1Y3ROYW1lKCkpOworCisgICAgcmV0dXJuIHByb3BlcnRpZXM7CisgIH0KKworICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgbWFrZURlc2NyaXB0aW9uIChVc2JEZXZpY2UgZGV2aWNlKSB7CisgICAgTWFwPFN0cmluZywgU3RyaW5nPiBwcm9wZXJ0aWVzID0gZ2V0UHJvcGVydGllcyhkZXZpY2UpOworICAgIFN0cmluZ0J1aWxkZXIgZGVzY3JpcHRpb24gPSBuZXcgU3RyaW5nQnVpbGRlcigpOworCisgICAgZm9yIChTdHJpbmcgbmFtZSA6IHByb3BlcnRpZXMua2V5U2V0KCkpIHsKKyAgICAgIFN0cmluZyB2YWx1ZSA9IHByb3BlcnRpZXMuZ2V0KG5hbWUpOworICAgICAgaWYgKGRlc2NyaXB0aW9uLmxlbmd0aCgpID4gMCkgZGVzY3JpcHRpb24uYXBwZW5kKCcgJyk7CisgICAgICBkZXNjcmlwdGlvbi5hcHBlbmQobmFtZSkuYXBwZW5kKCc6JykuYXBwZW5kKHZhbHVlKTsKKyAgICB9CisKKyAgICByZXR1cm4gZGVzY3JpcHRpb24udG9TdHJpbmcoKTsKKyAgfQorCisgIEBPdmVycmlkZQorICBwcm90ZWN0ZWQgdm9pZCBvbkNyZWF0ZSAoQnVuZGxlIHNhdmVkU3RhdGUpIHsKKyAgICBzdXBlci5vbkNyZWF0ZShzYXZlZFN0YXRlKTsKKworICAgIEludGVudCBpbnRlbnQgPSBnZXRJbnRlbnQoKTsKKyAgICBVc2JEZXZpY2UgZGV2aWNlID0gaW50ZW50LmdldFBhcmNlbGFibGVFeHRyYShVc2JNYW5hZ2VyLkVYVFJBX0RFVklDRSk7CisgICAgTG9nLmkoTE9HX1RBRywgKCJkZXZpY2UgYXR0YWNoZWQ6ICIgKyBtYWtlRGVzY3JpcHRpb24oZGV2aWNlKSkpOworICB9CisKKyAgQE92ZXJyaWRlCisgIHByb3RlY3RlZCB2b2lkIG9uUmVzdW1lICgpIHsKKyAgICBzdXBlci5vblJlc3VtZSgpOworICAgIGZpbmlzaCgpOworICB9Cit9CmRpZmYgLS1naXQgYS9BbmRyb2lkL0dyYWRsZS9hcHAvc3JjL21haW4vamF2YS9vcmcvYTExeS9icmx0dHkvYW5kcm9pZC9zZXR0aW5ncy9Vc2JEZXZpY2VDb2xsZWN0aW9uLmphdmEgYi9BbmRyb2lkL0dyYWRsZS9hcHAvc3JjL21haW4vamF2YS9vcmcvYTExeS9icmx0dHkvYW5kcm9pZC9zZXR0aW5ncy9Vc2JEZXZpY2VDb2xsZWN0aW9uLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmU3ZDhmZgotLS0gL2Rldi9udWxsCisrKyBiL0FuZHJvaWQvR3JhZGxlL2FwcC9zcmMvbWFpbi9qYXZhL29yZy9hMTF5L2JybHR0eS9hbmRyb2lkL3NldHRpbmdzL1VzYkRldmljZUNvbGxlY3Rpb24uamF2YQpAQCAtMCwwICsxLDE2MCBAQAorLyoKKyAqIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisgKiAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisgKgorICogQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKK3BhY2thZ2Ugb3JnLmExMXkuYnJsdHR5LmFuZHJvaWQuc2V0dGluZ3M7CisKK2ltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29udGV4dDsKK2ltcG9ydCBhbmRyb2lkLmhhcmR3YXJlLnVzYi4qOworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOworaW1wb3J0IGphdmEudXRpbC5NYXA7CitpbXBvcnQgb3JnLmExMXkuYnJsdHR5LmFuZHJvaWQuKjsKKworcHVibGljIGZpbmFsIGNsYXNzIFVzYkRldmljZUNvbGxlY3Rpb24gZXh0ZW5kcyBEZXZpY2VDb2xsZWN0aW9uIHsKKyAgcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgREVWSUNFX1FVQUxJRklFUiA9ICJ1c2IiOworCisgIEBPdmVycmlkZQorICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldFF1YWxpZmllciAoKSB7CisgICAgcmV0dXJuIERFVklDRV9RVUFMSUZJRVI7CisgIH0KKworICBwcml2YXRlIGZpbmFsIHN0YXRpYyBVc2JNYW5hZ2VyIHVzYk1hbmFnZXIgPSAoVXNiTWFuYWdlcikKKyAgICBCcmFpbGxlQXBwbGljYXRpb24uZ2V0KCkuZ2V0U3lzdGVtU2VydmljZShDb250ZXh0LlVTQl9TRVJWSUNFKTsKKworICBwcml2YXRlIGZpbmFsIE1hcDxTdHJpbmcsIFVzYkRldmljZT4gdXNiRGV2aWNlTWFwOworICBwcml2YXRlIGZpbmFsIENvbGxlY3Rpb248VXNiRGV2aWNlPiB1c2JEZXZpY2VzOworCisgIHB1YmxpYyBVc2JEZXZpY2VDb2xsZWN0aW9uIChDb250ZXh0IGNvbnRleHQpIHsKKyAgICBzdXBlcigpOworICAgIHVzYkRldmljZU1hcCA9IHVzYk1hbmFnZXIuZ2V0RGV2aWNlTGlzdCgpOworICAgIHVzYkRldmljZXMgPSB1c2JEZXZpY2VNYXAudmFsdWVzKCk7CisgIH0KKworICBwcml2YXRlIGZpbmFsIFN0cmluZyBnZXRNYW51ZmFjdHVyZXJOYW1lIChVc2JEZXZpY2UgZGV2aWNlKSB7CisgICAgaWYgKEFQSVRlc3RzLmhhdmVMb2xsaXBvcCkgeworICAgICAgcmV0dXJuIGRldmljZS5nZXRNYW51ZmFjdHVyZXJOYW1lKCk7CisgICAgfSBlbHNlIHsKKyAgICAgIHJldHVybiBudWxsOworICAgIH0KKyAgfQorCisgIHByaXZhdGUgZmluYWwgU3RyaW5nIGdldFByb2R1Y3REZXNjcmlwdGlvbiAoVXNiRGV2aWNlIGRldmljZSkgeworICAgIGlmIChBUElUZXN0cy5oYXZlTG9sbGlwb3ApIHsKKyAgICAgIHJldHVybiBkZXZpY2UuZ2V0UHJvZHVjdE5hbWUoKTsKKyAgICB9IGVsc2UgeworICAgICAgcmV0dXJuIG51bGw7CisgICAgfQorICB9CisKKyAgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIGdldFNlcmlhbE51bWJlciAoVXNiRGV2aWNlIGRldmljZSkgeworICAgIGlmIChBUElUZXN0cy5oYXZlTG9sbGlwb3ApIHsKKyAgICAgIHJldHVybiBkZXZpY2UuZ2V0U2VyaWFsTnVtYmVyKCk7CisgICAgfSBlbHNlIHsKKyAgICAgIFVzYkRldmljZUNvbm5lY3Rpb24gY29ubmVjdGlvbiA9IHVzYk1hbmFnZXIub3BlbkRldmljZShkZXZpY2UpOworICAgICAgaWYgKGNvbm5lY3Rpb24gPT0gbnVsbCkgcmV0dXJuIG51bGw7CisKKyAgICAgIHRyeSB7CisgICAgICAgIHJldHVybiBjb25uZWN0aW9uLmdldFNlcmlhbCgpOworICAgICAgfSBmaW5hbGx5IHsKKyAgICAgICAgY29ubmVjdGlvbi5jbG9zZSgpOworICAgICAgfQorICAgIH0KKyAgfQorCisgIEBPdmVycmlkZQorICBwdWJsaWMgZmluYWwgU3RyaW5nW10gbWFrZVZhbHVlcyAoKSB7CisgICAgU3RyaW5nTWFrZXI8VXNiRGV2aWNlPiBzdHJpbmdNYWtlciA9IG5ldyBTdHJpbmdNYWtlcjxVc2JEZXZpY2U+KCkgeworICAgICAgQE92ZXJyaWRlCisgICAgICBwdWJsaWMgU3RyaW5nIG1ha2VTdHJpbmcgKFVzYkRldmljZSBkZXZpY2UpIHsKKyAgICAgICAgcmV0dXJuIGRldmljZS5nZXREZXZpY2VOYW1lKCk7CisgICAgICB9CisgICAgfTsKKworICAgIHJldHVybiBtYWtlU3RyaW5nQXJyYXkodXNiRGV2aWNlcywgc3RyaW5nTWFrZXIpOworICB9CisKKyAgQE92ZXJyaWRlCisgIHB1YmxpYyBmaW5hbCBTdHJpbmdbXSBtYWtlTGFiZWxzICgpIHsKKyAgICBTdHJpbmdNYWtlcjxVc2JEZXZpY2U+IHN0cmluZ01ha2VyID0gbmV3IFN0cmluZ01ha2VyPFVzYkRldmljZT4oKSB7CisgICAgICBAT3ZlcnJpZGUKKyAgICAgIHB1YmxpYyBTdHJpbmcgbWFrZVN0cmluZyAoVXNiRGV2aWNlIGRldmljZSkgeworICAgICAgICBTdHJpbmdCdWlsZGVyIGxhYmVsID0gbmV3IFN0cmluZ0J1aWxkZXIoKTsKKworICAgICAgICB7CisgICAgICAgICAgYm9vbGVhbiBmaXJzdCA9IHRydWU7CisgICAgICAgICAgU3RyaW5nIHNlcmlhbE51bWJlcjsKKworICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICBzZXJpYWxOdW1iZXIgPSBnZXRTZXJpYWxOdW1iZXIoZGV2aWNlKTsKKyAgICAgICAgICB9IGNhdGNoIChTZWN1cml0eUV4Y2VwdGlvbiBleGNlcHRpb24pIHsKKyAgICAgICAgICAgIHNlcmlhbE51bWJlciA9IG51bGw7CisgICAgICAgICAgfQorCisgICAgICAgICAgU3RyaW5nW10gY29tcG9uZW50cyA9IG5ldyBTdHJpbmdbXSB7CisgICAgICAgICAgICBnZXRNYW51ZmFjdHVyZXJOYW1lKGRldmljZSksCisgICAgICAgICAgICBnZXRQcm9kdWN0RGVzY3JpcHRpb24oZGV2aWNlKSwKKyAgICAgICAgICAgIHNlcmlhbE51bWJlcgorICAgICAgICAgIH07CisKKyAgICAgICAgICBmb3IgKFN0cmluZyBjb21wb25lbnQgOiBjb21wb25lbnRzKSB7CisgICAgICAgICAgICBpZiAoY29tcG9uZW50ID09IG51bGwpIGNvbnRpbnVlOworICAgICAgICAgICAgY29tcG9uZW50ID0gY29tcG9uZW50LnRyaW0oKTsKKyAgICAgICAgICAgIGlmIChjb21wb25lbnQuaXNFbXB0eSgpKSBjb250aW51ZTsKKworICAgICAgICAgICAgaWYgKGZpcnN0KSB7CisgICAgICAgICAgICAgIGZpcnN0ID0gZmFsc2U7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICBsYWJlbC5hcHBlbmQoJywnKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGxhYmVsLmxlbmd0aCgpID4gMCkgbGFiZWwuYXBwZW5kKCcgJyk7CisgICAgICAgICAgICBsYWJlbC5hcHBlbmQoY29tcG9uZW50KTsKKyAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZiAobGFiZWwubGVuZ3RoKCkgPT0gMCkgeworICAgICAgICAgIGxhYmVsLmFwcGVuZCgKKyAgICAgICAgICAgIFN0cmluZy5mb3JtYXQoCisgICAgICAgICAgICAgICJbJTA0WDolMDRYXSIsCisgICAgICAgICAgICAgIGRldmljZS5nZXRWZW5kb3JJZCgpLAorICAgICAgICAgICAgICBkZXZpY2UuZ2V0UHJvZHVjdElkKCkKKyAgICAgICAgICAgICkKKyAgICAgICAgICApOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIGxhYmVsLnRvU3RyaW5nKCk7CisgICAgICB9CisgICAgfTsKKworICAgIHJldHVybiBtYWtlU3RyaW5nQXJyYXkodXNiRGV2aWNlcywgc3RyaW5nTWFrZXIpOworICB9CisKKyAgcHVibGljIHN0YXRpYyB2b2lkIHB1dFBhcmFtZXRlcnMgKE1hcDxTdHJpbmcsIFN0cmluZz4gcGFyYW1ldGVycywgVXNiRGV2aWNlIGRldmljZSkgeworICAgIHBhcmFtZXRlcnMucHV0KCJ2ZW5kb3JJZGVudGlmaWVyIiwgSW50ZWdlci50b1N0cmluZyhkZXZpY2UuZ2V0VmVuZG9ySWQoKSkpOworICAgIHBhcmFtZXRlcnMucHV0KCJwcm9kdWN0SWRlbnRpZmllciIsIEludGVnZXIudG9TdHJpbmcoZGV2aWNlLmdldFByb2R1Y3RJZCgpKSk7CisKKyAgICBpZiAoVXNiSGVscGVyLm9idGFpblBlcm1pc3Npb24oZGV2aWNlKSkgeworICAgICAgcGFyYW1ldGVycy5wdXQoInNlcmlhbE51bWJlciIsIGdldFNlcmlhbE51bWJlcihkZXZpY2UpKTsKKyAgICB9CisgIH0KKworICBAT3ZlcnJpZGUKKyAgcHJvdGVjdGVkIGZpbmFsIHZvaWQgcHV0UGFyYW1ldGVycyAoTWFwPFN0cmluZywgU3RyaW5nPiBwYXJhbWV0ZXJzLCBTdHJpbmcgdmFsdWUpIHsKKyAgICBVc2JEZXZpY2UgZGV2aWNlID0gdXNiRGV2aWNlTWFwLmdldCh2YWx1ZSk7CisgICAgcHV0UGFyYW1ldGVycyhwYXJhbWV0ZXJzLCBkZXZpY2UpOworICB9Cit9CmRpZmYgLS1naXQgYS9BbmRyb2lkL0dyYWRsZS9hcHAvc3JjL21haW4vamF2YS9vcmcvYTExeS9icmx0dHkvYW5kcm9pZC9zcGVlY2gvTmV3U3BlZWNoUGFyYWRpZ20uamF2YSBiL0FuZHJvaWQvR3JhZGxlL2FwcC9zcmMvbWFpbi9qYXZhL29yZy9hMTF5L2JybHR0eS9hbmRyb2lkL3NwZWVjaC9OZXdTcGVlY2hQYXJhZGlnbS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdiMzQzNjMKLS0tIC9kZXYvbnVsbAorKysgYi9BbmRyb2lkL0dyYWRsZS9hcHAvc3JjL21haW4vamF2YS9vcmcvYTExeS9icmx0dHkvYW5kcm9pZC9zcGVlY2gvTmV3U3BlZWNoUGFyYWRpZ20uamF2YQpAQCAtMCwwICsxLDExNCBAQAorLyoKKyAqIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisgKiAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisgKgorICogQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKK3BhY2thZ2Ugb3JnLmExMXkuYnJsdHR5LmFuZHJvaWQuc3BlZWNoOworCitpbXBvcnQgYW5kcm9pZC5vcy5CdW5kbGU7CitpbXBvcnQgYW5kcm9pZC5zcGVlY2gudHRzLlRleHRUb1NwZWVjaDsKK2ltcG9ydCBvcmcuYTExeS5icmx0dHkuYW5kcm9pZC4qOworCitwdWJsaWMgY2xhc3MgTmV3U3BlZWNoUGFyYWRpZ20gZXh0ZW5kcyBTcGVlY2hQYXJhZGlnbSB7CisgIHByaXZhdGUgZmluYWwgc3RhdGljIFN0cmluZyBMT0dfVEFHID0gTmV3U3BlZWNoUGFyYWRpZ20uY2xhc3MuZ2V0TmFtZSgpOworCisgIHB1YmxpYyBOZXdTcGVlY2hQYXJhZGlnbSAoKSB7CisgICAgc3VwZXIoKTsKKyAgfQorCisgIHByaXZhdGUgZmluYWwgQnVuZGxlIHBhcmFtZXRlcnMgPSBuZXcgQnVuZGxlKCk7CisKKyAgQE92ZXJyaWRlCisgIHB1YmxpYyBmaW5hbCBOZXdTcGVlY2hQYXJhZGlnbSByZXNldFBhcmFtZXRlcnMgKCkgeworICAgIHN5bmNocm9uaXplZCAocGFyYW1ldGVycykgeworICAgICAgcGFyYW1ldGVycy5jbGVhcigpOworICAgIH0KKworICAgIHJldHVybiB0aGlzOworICB9CisKKyAgQE92ZXJyaWRlCisgIHB1YmxpYyBmaW5hbCBOZXdTcGVlY2hQYXJhZGlnbSByZXNldFBhcmFtZXRlciAoU3RyaW5nIGtleSkgeworICAgIHN5bmNocm9uaXplZCAocGFyYW1ldGVycykgeworICAgICAgcGFyYW1ldGVycy5yZW1vdmUoa2V5KTsKKyAgICB9CisKKyAgICByZXR1cm4gdGhpczsKKyAgfQorCisgIEBPdmVycmlkZQorICBwdWJsaWMgZmluYWwgTmV3U3BlZWNoUGFyYWRpZ20gc2V0UGFyYW1ldGVyIChTdHJpbmcga2V5LCBTdHJpbmcgdmFsdWUpIHsKKyAgICBzeW5jaHJvbml6ZWQgKHBhcmFtZXRlcnMpIHsKKyAgICAgIHBhcmFtZXRlcnMucHV0U3RyaW5nKGtleSwgdmFsdWUpOworICAgIH0KKworICAgIHJldHVybiB0aGlzOworICB9CisKKyAgQE92ZXJyaWRlCisgIHB1YmxpYyBmaW5hbCBOZXdTcGVlY2hQYXJhZGlnbSBzZXRQYXJhbWV0ZXIgKFN0cmluZyBrZXksIGludCB2YWx1ZSkgeworICAgIHN5bmNocm9uaXplZCAocGFyYW1ldGVycykgeworICAgICAgcGFyYW1ldGVycy5wdXRJbnQoa2V5LCB2YWx1ZSk7CisgICAgfQorCisgICAgcmV0dXJuIHRoaXM7CisgIH0KKworICBAT3ZlcnJpZGUKKyAgcHVibGljIGZpbmFsIE5ld1NwZWVjaFBhcmFkaWdtIHNldFBhcmFtZXRlciAoU3RyaW5nIGtleSwgZmxvYXQgdmFsdWUpIHsKKyAgICBzeW5jaHJvbml6ZWQgKHBhcmFtZXRlcnMpIHsKKyAgICAgIHBhcmFtZXRlcnMucHV0RmxvYXQoa2V5LCB2YWx1ZSk7CisgICAgfQorCisgICAgcmV0dXJuIHRoaXM7CisgIH0KKworICBAT3ZlcnJpZGUKKyAgcHVibGljIGZpbmFsIFN0cmluZyBnZXRQYXJhbWV0ZXIgKFN0cmluZyBrZXksIFN0cmluZyBkZWZhdWx0VmFsdWUpIHsKKyAgICBzeW5jaHJvbml6ZWQgKHBhcmFtZXRlcnMpIHsKKyAgICAgIHJldHVybiBwYXJhbWV0ZXJzLmdldFN0cmluZyhrZXksIGRlZmF1bHRWYWx1ZSk7CisgICAgfQorICB9CisKKyAgQE92ZXJyaWRlCisgIHB1YmxpYyBmaW5hbCBpbnQgZ2V0UGFyYW1ldGVyIChTdHJpbmcga2V5LCBpbnQgZGVmYXVsdFZhbHVlKSB7CisgICAgc3luY2hyb25pemVkIChwYXJhbWV0ZXJzKSB7CisgICAgICByZXR1cm4gcGFyYW1ldGVycy5nZXRJbnQoa2V5LCBkZWZhdWx0VmFsdWUpOworICAgIH0KKyAgfQorCisgIEBPdmVycmlkZQorICBwdWJsaWMgZmluYWwgZmxvYXQgZ2V0UGFyYW1ldGVyIChTdHJpbmcga2V5LCBmbG9hdCBkZWZhdWx0VmFsdWUpIHsKKyAgICBzeW5jaHJvbml6ZWQgKHBhcmFtZXRlcnMpIHsKKyAgICAgIHJldHVybiBwYXJhbWV0ZXJzLmdldEZsb2F0KGtleSwgZGVmYXVsdFZhbHVlKTsKKyAgICB9CisgIH0KKworICBAT3ZlcnJpZGUKKyAgcHVibGljIGZpbmFsIGJvb2xlYW4gc2F5VGV4dCAoVGV4dFRvU3BlZWNoIHR0cywgQ2hhclNlcXVlbmNlIHRleHQsIGludCBxdWV1ZU1vZGUpIHsKKyAgICBpbnQgcmVzdWx0OworCisgICAgaWYgKEFQSVRlc3RzLmhhdmVMb2xsaXBvcCkgeworICAgICAgcmVzdWx0ID0gdHRzLnNwZWFrKHRleHQsIHF1ZXVlTW9kZSwgcGFyYW1ldGVycywgZ2V0VXR0ZXJhbmNlSWRlbnRpZmllcigpKTsKKyAgICB9IGVsc2UgeworICAgICAgcmVzdWx0ID0gVGV4dFRvU3BlZWNoLkVSUk9SOworICAgIH0KKworICAgIGlmIChyZXN1bHQgPT0gVGV4dFRvU3BlZWNoLlNVQ0NFU1MpIHJldHVybiB0cnVlOworICAgIGxvZ1NwZWVjaEVycm9yKCJzcGVhayIsIHJlc3VsdCk7CisgICAgcmV0dXJuIGZhbHNlOworICB9Cit9CmRpZmYgLS1naXQgYS9BbmRyb2lkL0dyYWRsZS9hcHAvc3JjL21haW4vamF2YS9vcmcvYTExeS9icmx0dHkvYW5kcm9pZC9zcGVlY2gvT2xkU3BlZWNoUGFyYWRpZ20uamF2YSBiL0FuZHJvaWQvR3JhZGxlL2FwcC9zcmMvbWFpbi9qYXZhL29yZy9hMTF5L2JybHR0eS9hbmRyb2lkL3NwZWVjaC9PbGRTcGVlY2hQYXJhZGlnbS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIzMWI5MzYKLS0tIC9kZXYvbnVsbAorKysgYi9BbmRyb2lkL0dyYWRsZS9hcHAvc3JjL21haW4vamF2YS9vcmcvYTExeS9icmx0dHkvYW5kcm9pZC9zcGVlY2gvT2xkU3BlZWNoUGFyYWRpZ20uamF2YQpAQCAtMCwwICsxLDEwNiBAQAorLyoKKyAqIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisgKiAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisgKgorICogQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKK3BhY2thZ2Ugb3JnLmExMXkuYnJsdHR5LmFuZHJvaWQuc3BlZWNoOworCitpbXBvcnQgYW5kcm9pZC5zcGVlY2gudHRzLlRleHRUb1NwZWVjaDsKK2ltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKK2ltcG9ydCBvcmcuYTExeS5icmx0dHkuYW5kcm9pZC4qOworCitwdWJsaWMgY2xhc3MgT2xkU3BlZWNoUGFyYWRpZ20gZXh0ZW5kcyBTcGVlY2hQYXJhZGlnbSB7CisgIHByaXZhdGUgZmluYWwgc3RhdGljIFN0cmluZyBMT0dfVEFHID0gT2xkU3BlZWNoUGFyYWRpZ20uY2xhc3MuZ2V0TmFtZSgpOworCisgIHB1YmxpYyBPbGRTcGVlY2hQYXJhZGlnbSAoKSB7CisgICAgc3VwZXIoKTsKKyAgfQorCisgIHByaXZhdGUgZmluYWwgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4gcGFyYW1ldGVycyA9IG5ldyBIYXNoTWFwPD4oKTsKKworICBAT3ZlcnJpZGUKKyAgcHVibGljIGZpbmFsIE9sZFNwZWVjaFBhcmFkaWdtIHJlc2V0UGFyYW1ldGVycyAoKSB7CisgICAgc3luY2hyb25pemVkIChwYXJhbWV0ZXJzKSB7CisgICAgICBwYXJhbWV0ZXJzLmNsZWFyKCk7CisgICAgfQorCisgICAgcmV0dXJuIHRoaXM7CisgIH0KKworICBAT3ZlcnJpZGUKKyAgcHVibGljIGZpbmFsIE9sZFNwZWVjaFBhcmFkaWdtIHJlc2V0UGFyYW1ldGVyIChTdHJpbmcga2V5KSB7CisgICAgc3luY2hyb25pemVkIChwYXJhbWV0ZXJzKSB7CisgICAgICBwYXJhbWV0ZXJzLnJlbW92ZShrZXkpOworICAgIH0KKworICAgIHJldHVybiB0aGlzOworICB9CisKKyAgQE92ZXJyaWRlCisgIHB1YmxpYyBmaW5hbCBPbGRTcGVlY2hQYXJhZGlnbSBzZXRQYXJhbWV0ZXIgKFN0cmluZyBrZXksIFN0cmluZyB2YWx1ZSkgeworICAgIHN5bmNocm9uaXplZCAocGFyYW1ldGVycykgeworICAgICAgcGFyYW1ldGVycy5wdXQoa2V5LCB2YWx1ZSk7CisgICAgfQorCisgICAgcmV0dXJuIHRoaXM7CisgIH0KKworICBAT3ZlcnJpZGUKKyAgcHVibGljIGZpbmFsIE9sZFNwZWVjaFBhcmFkaWdtIHNldFBhcmFtZXRlciAoU3RyaW5nIGtleSwgaW50IHZhbHVlKSB7CisgICAgcmV0dXJuIHNldFBhcmFtZXRlcihrZXksIEludGVnZXIudG9TdHJpbmcodmFsdWUpKTsKKyAgfQorCisgIEBPdmVycmlkZQorICBwdWJsaWMgZmluYWwgT2xkU3BlZWNoUGFyYWRpZ20gc2V0UGFyYW1ldGVyIChTdHJpbmcga2V5LCBmbG9hdCB2YWx1ZSkgeworICAgIHJldHVybiBzZXRQYXJhbWV0ZXIoa2V5LCBGbG9hdC50b1N0cmluZyh2YWx1ZSkpOworICB9CisKKyAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgZ2V0UGFyYW1ldGVyIChTdHJpbmcga2V5KSB7CisgICAgc3luY2hyb25pemVkIChwYXJhbWV0ZXJzKSB7CisgICAgICByZXR1cm4gcGFyYW1ldGVycy5nZXQoa2V5KTsKKyAgICB9CisgIH0KKworICBAT3ZlcnJpZGUKKyAgcHVibGljIGZpbmFsIFN0cmluZyBnZXRQYXJhbWV0ZXIgKFN0cmluZyBrZXksIFN0cmluZyBkZWZhdWx0VmFsdWUpIHsKKyAgICBTdHJpbmcgc3RyaW5nID0gZ2V0UGFyYW1ldGVyKGtleSk7CisgICAgaWYgKHN0cmluZyA9PSBudWxsKSByZXR1cm4gZGVmYXVsdFZhbHVlOworICAgIHJldHVybiBzdHJpbmc7CisgIH0KKworICBAT3ZlcnJpZGUKKyAgcHVibGljIGZpbmFsIGludCBnZXRQYXJhbWV0ZXIgKFN0cmluZyBrZXksIGludCBkZWZhdWx0VmFsdWUpIHsKKyAgICBTdHJpbmcgc3RyaW5nID0gZ2V0UGFyYW1ldGVyKGtleSk7CisgICAgaWYgKHN0cmluZyA9PSBudWxsKSByZXR1cm4gZGVmYXVsdFZhbHVlOworICAgIHJldHVybiBJbnRlZ2VyLnZhbHVlT2Yoc3RyaW5nKTsKKyAgfQorCisgIEBPdmVycmlkZQorICBwdWJsaWMgZmluYWwgZmxvYXQgZ2V0UGFyYW1ldGVyIChTdHJpbmcga2V5LCBmbG9hdCBkZWZhdWx0VmFsdWUpIHsKKyAgICBTdHJpbmcgc3RyaW5nID0gZ2V0UGFyYW1ldGVyKGtleSk7CisgICAgaWYgKHN0cmluZyA9PSBudWxsKSByZXR1cm4gZGVmYXVsdFZhbHVlOworICAgIHJldHVybiBGbG9hdC52YWx1ZU9mKHN0cmluZyk7CisgIH0KKworICBAT3ZlcnJpZGUKKyAgcHVibGljIGZpbmFsIGJvb2xlYW4gc2F5VGV4dCAoVGV4dFRvU3BlZWNoIHR0cywgQ2hhclNlcXVlbmNlIHRleHQsIGludCBxdWV1ZU1vZGUpIHsKKyAgICBpbnQgcmVzdWx0ID0gdHRzLnNwZWFrKChTdHJpbmcpdGV4dCwgcXVldWVNb2RlLCBwYXJhbWV0ZXJzKTsKKyAgICBpZiAocmVzdWx0ID09IFRleHRUb1NwZWVjaC5TVUNDRVNTKSByZXR1cm4gdHJ1ZTsKKworICAgIGxvZ1NwZWVjaEVycm9yKCJzcGVhayIsIHJlc3VsdCk7CisgICAgcmV0dXJuIGZhbHNlOworICB9Cit9CmRpZmYgLS1naXQgYS9BbmRyb2lkL0dyYWRsZS9hcHAvc3JjL21haW4vamF2YS9vcmcvYTExeS9icmx0dHkvYW5kcm9pZC9zcGVlY2gvU3BlZWNoQ29tcG9uZW50LmphdmEgYi9BbmRyb2lkL0dyYWRsZS9hcHAvc3JjL21haW4vamF2YS9vcmcvYTExeS9icmx0dHkvYW5kcm9pZC9zcGVlY2gvU3BlZWNoQ29tcG9uZW50LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzIxMThkMAotLS0gL2Rldi9udWxsCisrKyBiL0FuZHJvaWQvR3JhZGxlL2FwcC9zcmMvbWFpbi9qYXZhL29yZy9hMTF5L2JybHR0eS9hbmRyb2lkL3NwZWVjaC9TcGVlY2hDb21wb25lbnQuamF2YQpAQCAtMCwwICsxLDMzIEBACisvKgorICogQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyAqICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyAqCisgKiBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorICoKKyAqIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyAqCisgKiBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisgKi8KKworcGFja2FnZSBvcmcuYTExeS5icmx0dHkuYW5kcm9pZC5zcGVlY2g7CisKK2ltcG9ydCBhbmRyb2lkLnV0aWwuTG9nOworaW1wb3J0IG9yZy5hMTF5LmJybHR0eS5hbmRyb2lkLio7CisKK3B1YmxpYyBhYnN0cmFjdCBjbGFzcyBTcGVlY2hDb21wb25lbnQgeworICBwcml2YXRlIGZpbmFsIHN0YXRpYyBTdHJpbmcgTE9HX1RBRyA9IFNwZWVjaERyaXZlci5jbGFzcy5nZXROYW1lKCk7CisKKyAgcHJvdGVjdGVkIFNwZWVjaENvbXBvbmVudCAoKSB7CisgIH0KKworICBwcm90ZWN0ZWQgc3RhdGljIHZvaWQgbG9nU3BlZWNoRXJyb3IgKFN0cmluZyBhY3Rpb24sIGludCByZXN1bHQpIHsKKyAgICBMb2cudyhMT0dfVEFHLCBTdHJpbmcuZm9ybWF0KCIlcyBlcnJvcjogJWQiLCBhY3Rpb24sIHJlc3VsdCkpOworICB9Cit9CmRpZmYgLS1naXQgYS9BbmRyb2lkL0dyYWRsZS9hcHAvc3JjL21haW4vamF2YS9vcmcvYTExeS9icmx0dHkvYW5kcm9pZC9zcGVlY2gvU3BlZWNoRHJpdmVyLmphdmEgYi9BbmRyb2lkL0dyYWRsZS9hcHAvc3JjL21haW4vamF2YS9vcmcvYTExeS9icmx0dHkvYW5kcm9pZC9zcGVlY2gvU3BlZWNoRHJpdmVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWFlNWQzNQotLS0gL2Rldi9udWxsCisrKyBiL0FuZHJvaWQvR3JhZGxlL2FwcC9zcmMvbWFpbi9qYXZhL29yZy9hMTF5L2JybHR0eS9hbmRyb2lkL3NwZWVjaC9TcGVlY2hEcml2ZXIuamF2YQpAQCAtMCwwICsxLDMwNyBAQAorLyoKKyAqIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisgKiAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisgKgorICogQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKK3BhY2thZ2Ugb3JnLmExMXkuYnJsdHR5LmFuZHJvaWQuc3BlZWNoOworCitpbXBvcnQgYW5kcm9pZC5zcGVlY2gudHRzLlRleHRUb1NwZWVjaDsKK2ltcG9ydCBhbmRyb2lkLnNwZWVjaC50dHMuVXR0ZXJhbmNlUHJvZ3Jlc3NMaXN0ZW5lcjsKK2ltcG9ydCBhbmRyb2lkLnV0aWwuTG9nOworaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOworaW1wb3J0IGphdmEudXRpbC5NYXA7CitpbXBvcnQgb3JnLmExMXkuYnJsdHR5LmFuZHJvaWQuKjsKKworcHVibGljIGNsYXNzIFNwZWVjaERyaXZlciBleHRlbmRzIFNwZWVjaENvbXBvbmVudCB7CisgIHByaXZhdGUgZmluYWwgc3RhdGljIFN0cmluZyBMT0dfVEFHID0gU3BlZWNoRHJpdmVyLmNsYXNzLmdldE5hbWUoKTsKKworICBwcm90ZWN0ZWQgU3BlZWNoRHJpdmVyICgpIHsKKyAgICBzdXBlcigpOworICB9CisKKyAgZW51bSBFbmdpbmVTdGF0ZSB7CisgICAgU1RPUFBFRCwKKyAgICBTVEFSVEVELAorICAgIEZBSUxFRAorICB9CisKKyAgcHJpdmF0ZSBmaW5hbCBzdGF0aWMgaW50IG1heGltdW1UZXh0TGVuZ3RoID0gKAorICAgIEFQSVRlc3RzLmhhdmVKZWxseUJlYW5NUjI/ICBUZXh0VG9TcGVlY2guZ2V0TWF4U3BlZWNoSW5wdXRMZW5ndGgoKToKKyAgICA0MDAwCisgICkgLSAxOworCisgIHByaXZhdGUgZmluYWwgc3RhdGljIFNwZWVjaFBhcmFkaWdtIHR0c1BhcmFkaWdtID0KKyAgICBBUElUZXN0cy5oYXZlTG9sbGlwb3A/IG5ldyBOZXdTcGVlY2hQYXJhZGlnbSgpOgorICAgIG5ldyBPbGRTcGVlY2hQYXJhZGlnbSgpOworCisgIHByaXZhdGUgc3RhdGljIHZvbGF0aWxlIEVuZ2luZVN0YXRlIGVuZ2luZVN0YXRlID0gRW5naW5lU3RhdGUuU1RPUFBFRDsKKyAgcHJpdmF0ZSBzdGF0aWMgVGV4dFRvU3BlZWNoIHR0c09iamVjdCA9IG51bGw7CisKKyAgcHJpdmF0ZSBuYXRpdmUgc3RhdGljIHZvaWQgdGVsbExvY2F0aW9uIChsb25nIHN5bnRoZXNpemVyLCBpbnQgbG9jYXRpb24pOworICBwcml2YXRlIG5hdGl2ZSBzdGF0aWMgdm9pZCB0ZWxsRmluaXNoZWQgKGxvbmcgc3ludGhlc2l6ZXIpOworCisgIHByaXZhdGUgc3RhdGljIGNsYXNzIFV0dGVyYW5jZSB7CisgICAgcHJpdmF0ZSBmaW5hbCBsb25nIHNwZWVjaFN5bnRoZXNpemVyOworICAgIHByaXZhdGUgZmluYWwgQ2hhclNlcXVlbmNlIHV0dGVyYW5jZVRleHQ7CisKKyAgICBwdWJsaWMgVXR0ZXJhbmNlIChsb25nIHN5bnRoZXNpemVyLCBDaGFyU2VxdWVuY2UgdGV4dCkgeworICAgICAgc3BlZWNoU3ludGhlc2l6ZXIgPSBzeW50aGVzaXplcjsKKyAgICAgIHV0dGVyYW5jZVRleHQgPSB0ZXh0OworICAgIH0KKworICAgIHB1YmxpYyBmaW5hbCBsb25nIGdldFN5bnRoZXNpemVyICgpIHsKKyAgICAgIHJldHVybiBzcGVlY2hTeW50aGVzaXplcjsKKyAgICB9CisKKyAgICBwdWJsaWMgZmluYWwgQ2hhclNlcXVlbmNlIGdldFRleHQgKCkgeworICAgICAgcmV0dXJuIHV0dGVyYW5jZVRleHQ7CisgICAgfQorCisgICAgcHJpdmF0ZSBpbnQgcmFuZ2VTdGFydCA9IDA7CisgICAgcHJpdmF0ZSBpbnQgcmFuZ2VFbmQgPSAwOworCisgICAgcHVibGljIGZpbmFsIGludCBnZXRSYW5nZVN0YXJ0ICgpIHsKKyAgICAgIHJldHVybiByYW5nZVN0YXJ0OworICAgIH0KKworICAgIHB1YmxpYyBmaW5hbCBpbnQgZ2V0UmFuZ2VFbmQgKCkgeworICAgICAgcmV0dXJuIHJhbmdlRW5kOworICAgIH0KKworICAgIHB1YmxpYyBmaW5hbCB2b2lkIHNldFJhbmdlIChpbnQgc3RhcnQsIGludCBlbmQpIHsKKyAgICAgIHJhbmdlU3RhcnQgPSBzdGFydDsKKyAgICAgIHJhbmdlRW5kID0gZW5kOworICAgICAgdGVsbExvY2F0aW9uKGdldFN5bnRoZXNpemVyKCksIHN0YXJ0KTsKKyAgICB9CisgIH0KKworICBwcml2YXRlIGZpbmFsIHN0YXRpYyBNYXA8Q2hhclNlcXVlbmNlLCBVdHRlcmFuY2U+IGFjdGl2ZVV0dGVyYW5jZXMgPSBuZXcgSGFzaE1hcDw+KCk7CisKKyAgcHJpdmF0ZSBzdGF0aWMgVXR0ZXJhbmNlIGdldFV0dGVyYW5jZSAoU3RyaW5nIGlkZW50aWZpZXIpIHsKKyAgICBzeW5jaHJvbml6ZWQgKGFjdGl2ZVV0dGVyYW5jZXMpIHsKKyAgICAgIHJldHVybiBhY3RpdmVVdHRlcmFuY2VzLmdldChpZGVudGlmaWVyKTsKKyAgICB9CisgIH0KKworICBwcml2YXRlIHN0YXRpYyB2b2lkIGxvZ1V0dGVyYW5jZVN0YXRlIChTdHJpbmcgaWRlbnRpZmllciwgU3RyaW5nIHN0YXRlLCBib29sZWFuIHVuZXhwZWN0ZWQpIHsKKyAgICBTdHJpbmdCdWlsZGVyIGxvZyA9IG5ldyBTdHJpbmdCdWlsZGVyKCk7CisgICAgbG9nLmFwcGVuZCgidXR0ZXJhbmNlICIpLmFwcGVuZChzdGF0ZSk7CisKKyAgICBpZiAoKGlkZW50aWZpZXIgIT0gbnVsbCkgJiYgIWlkZW50aWZpZXIuaXNFbXB0eSgpKSB7CisgICAgICBsb2cuYXBwZW5kKCI6ICIpLmFwcGVuZChpZGVudGlmaWVyKTsKKyAgICAgIFV0dGVyYW5jZSB1dHRlcmFuY2UgPSBnZXRVdHRlcmFuY2UoaWRlbnRpZmllcik7CisKKyAgICAgIGlmICh1dHRlcmFuY2UgIT0gbnVsbCkgeworICAgICAgICBTdHJpbmcgdGV4dCA9IHV0dGVyYW5jZS5nZXRUZXh0KCkudG9TdHJpbmcoKTsKKyAgICAgICAgdGV4dCA9IExvZ2dlci5zaHJpbmtUZXh0KHRleHQpOworICAgICAgICBsb2cuYXBwZW5kKCI6ICIpLmFwcGVuZCh0ZXh0KTsKKyAgICAgIH0KKyAgICB9CisKKyAgICBpZiAodW5leHBlY3RlZCkgeworICAgICAgTG9nLncoTE9HX1RBRywgbG9nLnRvU3RyaW5nKCkpOworICAgIH0gZWxzZSB7CisgICAgICBMb2cuZChMT0dfVEFHLCBsb2cudG9TdHJpbmcoKSk7CisgICAgfQorICB9CisKKyAgcHJpdmF0ZSBmaW5hbCBzdGF0aWMgVXR0ZXJhbmNlUHJvZ3Jlc3NMaXN0ZW5lciB1dHRlcmFuY2VQcm9ncmVzc0xpc3RlbmVyID0KKyAgICBuZXcgVXR0ZXJhbmNlUHJvZ3Jlc3NMaXN0ZW5lcigpIHsKKyAgICAgIHByaXZhdGUgZmluYWwgdm9pZCBvblV0dGVyYW5jZUluY29tcGxldGUgKFN0cmluZyBpZGVudGlmaWVyKSB7CisgICAgICAgIHN5bmNocm9uaXplZCAoYWN0aXZlVXR0ZXJhbmNlcykgeworICAgICAgICAgIFV0dGVyYW5jZSB1dHRlcmFuY2UgPSBhY3RpdmVVdHRlcmFuY2VzLmdldChpZGVudGlmaWVyKTsKKyAgICAgICAgICBhY3RpdmVVdHRlcmFuY2VzLmNsZWFyKCk7CisKKyAgICAgICAgICBpZiAodXR0ZXJhbmNlICE9IG51bGwpIHsKKyAgICAgICAgICAgIHRlbGxGaW5pc2hlZCh1dHRlcmFuY2UuZ2V0U3ludGhlc2l6ZXIoKSk7CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICB9CisKKyAgICAgIC8vIEFQSSBMZXZlbCAxNSAtIGNhbGxlZCB3aGVuIGFuIHV0dGVyYW5jZSBzdGFydHMgdG8gYmUgcHJvY2Vzc2VkCisgICAgICBAT3ZlcnJpZGUKKyAgICAgIHB1YmxpYyBmaW5hbCB2b2lkIG9uU3RhcnQgKFN0cmluZyBpZGVudGlmaWVyKSB7CisgICAgICAgIGxvZ1V0dGVyYW5jZVN0YXRlKGlkZW50aWZpZXIsICJzdGFydGVkIiwgZmFsc2UpOworICAgICAgfQorCisgICAgICAvLyBBUEkgTGV2ZWwgMTUgLSBjYWxsZWQgd2hlbiBhbiB1dHRlcmFuY2UgaGFzIHN1Y2Nlc3NmdWxseSBjb21wbGV0ZWQKKyAgICAgIEBPdmVycmlkZQorICAgICAgcHVibGljIGZpbmFsIHZvaWQgb25Eb25lIChTdHJpbmcgaWRlbnRpZmllcikgeworICAgICAgICBsb2dVdHRlcmFuY2VTdGF0ZShpZGVudGlmaWVyLCAiZmluaXNoZWQiLCBmYWxzZSk7CisKKyAgICAgICAgc3luY2hyb25pemVkIChhY3RpdmVVdHRlcmFuY2VzKSB7CisgICAgICAgICAgVXR0ZXJhbmNlIHV0dGVyYW5jZSA9IGFjdGl2ZVV0dGVyYW5jZXMucmVtb3ZlKGlkZW50aWZpZXIpOworCisgICAgICAgICAgaWYgKHV0dGVyYW5jZSAhPSBudWxsKSB7CisgICAgICAgICAgICBpZiAoYWN0aXZlVXR0ZXJhbmNlcy5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgICAgbG9uZyBzeW50aGVzaXplciA9IHV0dGVyYW5jZS5nZXRTeW50aGVzaXplcigpOworICAgICAgICAgICAgICB0ZWxsTG9jYXRpb24oc3ludGhlc2l6ZXIsIHV0dGVyYW5jZS5nZXRSYW5nZUVuZCgpKTsKKyAgICAgICAgICAgICAgdGVsbEZpbmlzaGVkKHN5bnRoZXNpemVyKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgIH0KKworICAgICAgLy8gQVBJIExldmVsIDIzIC0gY2FsbGVkIHdoZW4gYW4gdXR0ZXJhbmNlIGlzIHN0b3BwZWQgb3IgZmx1c2hlZAorICAgICAgQE92ZXJyaWRlCisgICAgICBwdWJsaWMgZmluYWwgdm9pZCBvblN0b3AgKFN0cmluZyBpZGVudGlmaWVyLCBib29sZWFuIHdhc0ludGVycnVwdGVkKSB7CisgICAgICAgIGxvZ1V0dGVyYW5jZVN0YXRlKGlkZW50aWZpZXIsICh3YXNJbnRlcnJ1cHRlZD8gImludGVycnVwdGVkIjogImNhbmNlbGxlZCIpLCBmYWxzZSk7CisgICAgICAgIG9uVXR0ZXJhbmNlSW5jb21wbGV0ZShpZGVudGlmaWVyKTsKKyAgICAgIH0KKworICAgICAgLy8gQVBJIExldmVsIDE1IC0gY2FsbGVkIHdoZW4gYW4gZXJyb3IgaGFzIG9jY3VycmVkCisgICAgICBAT3ZlcnJpZGUKKyAgICAgIHB1YmxpYyBmaW5hbCB2b2lkIG9uRXJyb3IgKFN0cmluZyBpZGVudGlmaWVyKSB7CisgICAgICAgIGxvZ1V0dGVyYW5jZVN0YXRlKGlkZW50aWZpZXIsICJlcnJvciIsIHRydWUpOworICAgICAgICBvblV0dGVyYW5jZUluY29tcGxldGUoaWRlbnRpZmllcik7CisgICAgICB9CisKKyAgICAgIC8vIEFQSSBMZXZlbCAyMSAtIGNhbGxlZCB3aGVuIGFuIGVycm9yIGhhcyBvY2N1cnJlZAorICAgICAgQE92ZXJyaWRlCisgICAgICBwdWJsaWMgZmluYWwgdm9pZCBvbkVycm9yIChTdHJpbmcgaWRlbnRpZmllciwgaW50IGNvZGUpIHsKKyAgICAgICAgbG9nVXR0ZXJhbmNlU3RhdGUoaWRlbnRpZmllciwgKCJlcnJvciAiICsgY29kZSksIHRydWUpOworICAgICAgICBvblV0dGVyYW5jZUluY29tcGxldGUoaWRlbnRpZmllcik7CisgICAgICB9CisKKyAgICAgIC8vIEFQSSBMZXZlbCAyNCAtIGNhbGxlZCB3aGVuIHRoZSBlbmdpbmUgYmVnaW5zIHRvIHN5bnRoZXNpemUgYSByZXF1ZXN0CisgICAgICBAT3ZlcnJpZGUKKyAgICAgIHB1YmxpYyBmaW5hbCB2b2lkIG9uQmVnaW5TeW50aGVzaXMgKFN0cmluZyBpZGVudGlmaWVyLCBpbnQgcmF0ZSwgaW50IGZvcm1hdCwgaW50IGNoYW5uZWxzKSB7CisgICAgICB9CisKKyAgICAgIC8vIEFQSSBMZXZlbCAyNCAtIGNhbGxlZCB3aGVuIGEgY2h1bmsgb2YgYXVkaW8gaGFzIGJlZW4gZ2VuZXJhdGVkCisgICAgICBAT3ZlcnJpZGUKKyAgICAgIHB1YmxpYyBmaW5hbCB2b2lkIG9uQXVkaW9BdmFpbGFibGUgKFN0cmluZyBpZGVudGlmaWVyLCBieXRlW10gYXVkaW8pIHsKKyAgICAgIH0KKworICAgICAgLy8gQVBJIExldmVsIDI2IC0gY2FsbGVkIHdoZW4gdGhlIHNwZWNpZmllZCByYW5nZSBpcyBhYm91dCB0byBiZSBzcG9rZW4KKyAgICAgIEBPdmVycmlkZQorICAgICAgcHVibGljIGZpbmFsIHZvaWQgb25SYW5nZVN0YXJ0IChTdHJpbmcgaWRlbnRpZmllciwgaW50IHN0YXJ0LCBpbnQgZW5kLCBpbnQgZnJhbWUpIHsKKyAgICAgICAgVXR0ZXJhbmNlIHV0dGVyYW5jZSA9IGdldFV0dGVyYW5jZShpZGVudGlmaWVyKTsKKyAgICAgICAgaWYgKHV0dGVyYW5jZSAhPSBudWxsKSB1dHRlcmFuY2Uuc2V0UmFuZ2Uoc3RhcnQsIGVuZCk7CisgICAgICB9CisgICAgfTsKKworICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gc2F5VGV4dCAobG9uZyBzeW50aGVzaXplciwgQ2hhclNlcXVlbmNlIHRleHQpIHsKKyAgICBzeW5jaHJvbml6ZWQgKHR0c1BhcmFkaWdtKSB7CisgICAgICBTdHJpbmcgaWRlbnRpZmllciA9IHR0c1BhcmFkaWdtLnNldFV0dGVyYW5jZUlkZW50aWZpZXIoKTsKKworICAgICAgc3luY2hyb25pemVkIChhY3RpdmVVdHRlcmFuY2VzKSB7CisgICAgICAgIGFjdGl2ZVV0dGVyYW5jZXMucHV0KGlkZW50aWZpZXIsIG5ldyBVdHRlcmFuY2Uoc3ludGhlc2l6ZXIsIHRleHQpKTsKKyAgICAgIH0KKworICAgICAgaWYgKHR0c1BhcmFkaWdtLnNheVRleHQodHRzT2JqZWN0LCB0ZXh0LCBUZXh0VG9TcGVlY2guUVVFVUVfQUREKSkgeworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgIH0KKworICAgICAgc3luY2hyb25pemVkIChhY3RpdmVVdHRlcmFuY2VzKSB7CisgICAgICAgIGFjdGl2ZVV0dGVyYW5jZXMucmVtb3ZlKGlkZW50aWZpZXIpOworICAgICAgfQorCisgICAgICBsb2dVdHRlcmFuY2VTdGF0ZShpZGVudGlmaWVyLCAic3RhcnQgZmFpbGVkIiwgdHJ1ZSk7CisgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICB9CisKKyAgcHVibGljIHN0YXRpYyBib29sZWFuIHN0b3BTcGVha2luZyAoKSB7CisgICAgaW50IHJlc3VsdCA9IHR0c09iamVjdC5zdG9wKCk7CisgICAgaWYgKHJlc3VsdCA9PSBUZXh0VG9TcGVlY2guU1VDQ0VTUykgcmV0dXJuIHRydWU7CisKKyAgICBsb2dTcGVlY2hFcnJvcigic3RvcCBzcGVha2luZyIsIHJlc3VsdCk7CisgICAgcmV0dXJuIGZhbHNlOworICB9CisKKyAgcHVibGljIHN0YXRpYyBib29sZWFuIHNldFZvbHVtZSAoZmxvYXQgdm9sdW1lKSB7CisgICAgdHRzUGFyYWRpZ20uc2V0UGFyYW1ldGVyKFRleHRUb1NwZWVjaC5FbmdpbmUuS0VZX1BBUkFNX1ZPTFVNRSwgdm9sdW1lKTsKKyAgICByZXR1cm4gdHJ1ZTsKKyAgfQorCisgIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBzZXRCYWxhbmNlIChmbG9hdCBiYWxhbmNlKSB7CisgICAgdHRzUGFyYWRpZ20uc2V0UGFyYW1ldGVyKFRleHRUb1NwZWVjaC5FbmdpbmUuS0VZX1BBUkFNX1BBTiwgYmFsYW5jZSk7CisgICAgcmV0dXJuIHRydWU7CisgIH0KKworICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gc2V0UmF0ZSAoZmxvYXQgcmF0ZSkgeworICAgIGludCByZXN1bHQgPSB0dHNPYmplY3Quc2V0U3BlZWNoUmF0ZShyYXRlKTsKKyAgICBpZiAocmVzdWx0ID09IFRleHRUb1NwZWVjaC5TVUNDRVNTKSByZXR1cm4gdHJ1ZTsKKworICAgIGxvZ1NwZWVjaEVycm9yKCJzZXQgcmF0ZSIsIHJlc3VsdCk7CisgICAgcmV0dXJuIGZhbHNlOworICB9CisKKyAgcHVibGljIHN0YXRpYyBib29sZWFuIHNldFBpdGNoIChmbG9hdCBwaXRjaCkgeworICAgIGludCByZXN1bHQgPSB0dHNPYmplY3Quc2V0UGl0Y2gocGl0Y2gpOworICAgIGlmIChyZXN1bHQgPT0gVGV4dFRvU3BlZWNoLlNVQ0NFU1MpIHJldHVybiB0cnVlOworCisgICAgbG9nU3BlZWNoRXJyb3IoInNldCBwaXRjaCIsIHJlc3VsdCk7CisgICAgcmV0dXJuIGZhbHNlOworICB9CisKKyAgcHVibGljIHN0YXRpYyBib29sZWFuIHN0YXJ0RW5naW5lICgpIHsKKyAgICBUZXh0VG9TcGVlY2guT25Jbml0TGlzdGVuZXIgbGlzdGVuZXIgPSBuZXcgVGV4dFRvU3BlZWNoLk9uSW5pdExpc3RlbmVyKCkgeworICAgICAgQE92ZXJyaWRlCisgICAgICBwdWJsaWMgdm9pZCBvbkluaXQgKGludCBzdGF0dXMpIHsKKyAgICAgICAgc3luY2hyb25pemVkICh0aGlzKSB7CisgICAgICAgICAgc3dpdGNoIChzdGF0dXMpIHsKKyAgICAgICAgICAgIGNhc2UgVGV4dFRvU3BlZWNoLlNVQ0NFU1M6CisgICAgICAgICAgICAgIGVuZ2luZVN0YXRlID0gRW5naW5lU3RhdGUuU1RBUlRFRDsKKyAgICAgICAgICAgICAgdHRzT2JqZWN0LnNldE9uVXR0ZXJhbmNlUHJvZ3Jlc3NMaXN0ZW5lcih1dHRlcmFuY2VQcm9ncmVzc0xpc3RlbmVyKTsKKyAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgIExvZy53KExPR19UQUcsICgidW5rbm93biB0ZXh0IHRvIHNwZWVjaCBlbmdpbmUgc3RhcnR1cCBzdGF0dXM6ICIgKyBzdGF0dXMpKTsKKyAgICAgICAgICAgIGNhc2UgVGV4dFRvU3BlZWNoLkVSUk9SOgorICAgICAgICAgICAgICBlbmdpbmVTdGF0ZSA9IEVuZ2luZVN0YXRlLkZBSUxFRDsKKyAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgfQorCisgICAgICAgICAgbm90aWZ5KCk7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9OworCisgICAgc3luY2hyb25pemVkIChsaXN0ZW5lcikgeworICAgICAgTG9nLmQoTE9HX1RBRywgInN0YXJ0aW5nIHRleHQgdG8gc3BlZWNoIGVuZ2luZSIpOworICAgICAgZW5naW5lU3RhdGUgPSBFbmdpbmVTdGF0ZS5TVE9QUEVEOworICAgICAgdHRzT2JqZWN0ID0gbmV3IFRleHRUb1NwZWVjaChCcmFpbGxlQXBwbGljYXRpb24uZ2V0KCksIGxpc3RlbmVyKTsKKworICAgICAgd2hpbGUgKGVuZ2luZVN0YXRlID09IEVuZ2luZVN0YXRlLlNUT1BQRUQpIHsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICBsaXN0ZW5lci53YWl0KCk7CisgICAgICAgIH0gY2F0Y2ggKEludGVycnVwdGVkRXhjZXB0aW9uIGV4Y2VwdGlvbikgeworICAgICAgICB9CisgICAgICB9CisgICAgfQorCisgICAgaWYgKGVuZ2luZVN0YXRlID09IEVuZ2luZVN0YXRlLlNUQVJURUQpIHsKKyAgICAgIHR0c1BhcmFkaWdtLnJlc2V0UGFyYW1ldGVycygpOworICAgICAgTG9nLmQoTE9HX1RBRywgInRleHQgdG8gc3BlZWNoIGVuZ2luZSBzdGFydGVkIik7CisgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBMb2cudyhMT0dfVEFHLCAidGV4dCB0byBzcGVlY2ggZW5naW5lIGZhaWxlZCIpOworICAgIHR0c09iamVjdCA9IG51bGw7CisgICAgcmV0dXJuIGZhbHNlOworICB9CisKKyAgcHVibGljIHN0YXRpYyB2b2lkIHN0b3BFbmdpbmUgKCkgeworICAgIGlmICh0dHNPYmplY3QgIT0gbnVsbCkgeworICAgICAgTG9nLmQoTE9HX1RBRywgInN0b3BwaW5nIHRleHQgdG8gc3BlZWNoIGVuZ2luZSIpOworICAgICAgdHRzT2JqZWN0LnNodXRkb3duKCk7CisgICAgICB0dHNPYmplY3QgPSBudWxsOworICAgICAgZW5naW5lU3RhdGUgPSBFbmdpbmVTdGF0ZS5TVE9QUEVEOworICAgIH0KKyAgfQorfQpkaWZmIC0tZ2l0IGEvQW5kcm9pZC9HcmFkbGUvYXBwL3NyYy9tYWluL2phdmEvb3JnL2ExMXkvYnJsdHR5L2FuZHJvaWQvc3BlZWNoL1NwZWVjaFBhcmFkaWdtLmphdmEgYi9BbmRyb2lkL0dyYWRsZS9hcHAvc3JjL21haW4vamF2YS9vcmcvYTExeS9icmx0dHkvYW5kcm9pZC9zcGVlY2gvU3BlZWNoUGFyYWRpZ20uamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZTgzZDIyCi0tLSAvZGV2L251bGwKKysrIGIvQW5kcm9pZC9HcmFkbGUvYXBwL3NyYy9tYWluL2phdmEvb3JnL2ExMXkvYnJsdHR5L2FuZHJvaWQvc3BlZWNoL1NwZWVjaFBhcmFkaWdtLmphdmEKQEAgLTAsMCArMSw2MiBAQAorLyoKKyAqIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisgKiAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisgKgorICogQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKK3BhY2thZ2Ugb3JnLmExMXkuYnJsdHR5LmFuZHJvaWQuc3BlZWNoOworCitpbXBvcnQgYW5kcm9pZC5zcGVlY2gudHRzLlRleHRUb1NwZWVjaDsKK2ltcG9ydCBvcmcuYTExeS5icmx0dHkuYW5kcm9pZC4qOworCitwdWJsaWMgYWJzdHJhY3QgY2xhc3MgU3BlZWNoUGFyYWRpZ20gZXh0ZW5kcyBTcGVlY2hDb21wb25lbnQgeworICBwcml2YXRlIGZpbmFsIHN0YXRpYyBTdHJpbmcgTE9HX1RBRyA9IFNwZWVjaFBhcmFkaWdtLmNsYXNzLmdldE5hbWUoKTsKKworICBwcm90ZWN0ZWQgU3BlZWNoUGFyYWRpZ20gKCkgeworICAgIHN1cGVyKCk7CisgIH0KKworICBwdWJsaWMgYWJzdHJhY3QgU3BlZWNoUGFyYWRpZ20gcmVzZXRQYXJhbWV0ZXJzICgpOworICBwdWJsaWMgYWJzdHJhY3QgU3BlZWNoUGFyYWRpZ20gcmVzZXRQYXJhbWV0ZXIgKFN0cmluZyBrZXkpOworCisgIHB1YmxpYyBhYnN0cmFjdCBTcGVlY2hQYXJhZGlnbSBzZXRQYXJhbWV0ZXIgKFN0cmluZyBrZXksIFN0cmluZyB2YWx1ZSk7CisgIHB1YmxpYyBhYnN0cmFjdCBTcGVlY2hQYXJhZGlnbSBzZXRQYXJhbWV0ZXIgKFN0cmluZyBrZXksIGludCB2YWx1ZSk7CisgIHB1YmxpYyBhYnN0cmFjdCBTcGVlY2hQYXJhZGlnbSBzZXRQYXJhbWV0ZXIgKFN0cmluZyBrZXksIGZsb2F0IHZhbHVlKTsKKworICBwdWJsaWMgYWJzdHJhY3QgU3RyaW5nIGdldFBhcmFtZXRlciAoU3RyaW5nIGtleSwgU3RyaW5nIGRlZmF1bHRWYWx1ZSk7CisgIHB1YmxpYyBhYnN0cmFjdCBpbnQgZ2V0UGFyYW1ldGVyIChTdHJpbmcga2V5LCBpbnQgZGVmYXVsdFZhbHVlKTsKKyAgcHVibGljIGFic3RyYWN0IGZsb2F0IGdldFBhcmFtZXRlciAoU3RyaW5nIGtleSwgZmxvYXQgZGVmYXVsdFZhbHVlKTsKKworICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldFV0dGVyYW5jZUlkZW50aWZpZXIgKCkgeworICAgIHJldHVybiBnZXRQYXJhbWV0ZXIoVGV4dFRvU3BlZWNoLkVuZ2luZS5LRVlfUEFSQU1fVVRURVJBTkNFX0lELCBudWxsKTsKKyAgfQorCisgIHByaXZhdGUgZmluYWwgc3RhdGljIE9iamVjdCBVVFRFUkFOQ0VfSURFTlRJRklFUl9MT0NLID0gbmV3IE9iamVjdCgpOworICBwcml2YXRlIHN0YXRpYyBpbnQgdXR0ZXJhbmNlSWRlbnRpZmllciA9IDA7CisKKyAgcHVibGljIGZpbmFsIFN0cmluZyBuZXdVdHRlcmFuY2VJZGVudGlmaWVyICgpIHsKKyAgICBzeW5jaHJvbml6ZWQgKFVUVEVSQU5DRV9JREVOVElGSUVSX0xPQ0spIHsKKyAgICAgIHJldHVybiAidXQjIiArICsrdXR0ZXJhbmNlSWRlbnRpZmllcjsKKyAgICB9CisgIH0KKworICBwdWJsaWMgZmluYWwgU3RyaW5nIHNldFV0dGVyYW5jZUlkZW50aWZpZXIgKCkgeworICAgIFN0cmluZyBpZGVudGlmaWVyID0gbmV3VXR0ZXJhbmNlSWRlbnRpZmllcigpOworICAgIHNldFBhcmFtZXRlcihUZXh0VG9TcGVlY2guRW5naW5lLktFWV9QQVJBTV9VVFRFUkFOQ0VfSUQsIGlkZW50aWZpZXIpOworICAgIHJldHVybiBpZGVudGlmaWVyOworICB9CisKKyAgcHVibGljIGFic3RyYWN0IGJvb2xlYW4gc2F5VGV4dCAoVGV4dFRvU3BlZWNoIHR0cywgQ2hhclNlcXVlbmNlIHRleHQsIGludCBxdWV1ZU1vZGUpOworfQpkaWZmIC0tZ2l0IGEvQW5kcm9pZC9HcmFkbGUvYXBwL3NyYy9tYWluL3BsYXkvY29udGFjdC1lbWFpbC50eHQgYi9BbmRyb2lkL0dyYWRsZS9hcHAvc3JjL21haW4vcGxheS9jb250YWN0LWVtYWlsLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NmE0ZGI0Ci0tLSAvZGV2L251bGwKKysrIGIvQW5kcm9pZC9HcmFkbGUvYXBwL3NyYy9tYWluL3BsYXkvY29udGFjdC1lbWFpbC50eHQKQEAgLTAsMCArMSBAQAorRGF2ZS5BLk1pZWxrZUBnbWFpbC5jb20KZGlmZiAtLWdpdCBhL0FuZHJvaWQvR3JhZGxlL2FwcC9zcmMvbWFpbi9wbGF5L2NvbnRhY3Qtd2Vic2l0ZS50eHQgYi9BbmRyb2lkL0dyYWRsZS9hcHAvc3JjL21haW4vcGxheS9jb250YWN0LXdlYnNpdGUudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNhOTkyYmQKLS0tIC9kZXYvbnVsbAorKysgYi9BbmRyb2lkL0dyYWRsZS9hcHAvc3JjL21haW4vcGxheS9jb250YWN0LXdlYnNpdGUudHh0CkBAIC0wLDAgKzEgQEAKK2h0dHBzOi8vYnJsdHR5LmFwcC8KZGlmZiAtLWdpdCBhL0FuZHJvaWQvR3JhZGxlL2FwcC9zcmMvbWFpbi9wbGF5L2RlZmF1bHQtbGFuZ3VhZ2UudHh0IGIvQW5kcm9pZC9HcmFkbGUvYXBwL3NyYy9tYWluL3BsYXkvZGVmYXVsdC1sYW5ndWFnZS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjU5ZjE2ZAotLS0gL2Rldi9udWxsCisrKyBiL0FuZHJvaWQvR3JhZGxlL2FwcC9zcmMvbWFpbi9wbGF5L2RlZmF1bHQtbGFuZ3VhZ2UudHh0CkBAIC0wLDAgKzEgQEAKK2VuLUNBCmRpZmYgLS1naXQgYS9BbmRyb2lkL0dyYWRsZS9hcHAvc3JjL21haW4vcGxheS9saXN0aW5ncy9lbi1DQS9mdWxsLWRlc2NyaXB0aW9uLnR4dCBiL0FuZHJvaWQvR3JhZGxlL2FwcC9zcmMvbWFpbi9wbGF5L2xpc3RpbmdzL2VuLUNBL2Z1bGwtZGVzY3JpcHRpb24udHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ1YmU1M2EKLS0tIC9kZXYvbnVsbAorKysgYi9BbmRyb2lkL0dyYWRsZS9hcHAvc3JjL21haW4vcGxheS9saXN0aW5ncy9lbi1DQS9mdWxsLWRlc2NyaXB0aW9uLnR4dApAQCAtMCwwICsxLDE4IEBACitCUkxUVFkgaXMgYW4gYWNjZXNzaWJpbGl0eSBhcHAuIEl0J3MgYSBzY3JlZW4gcmVhZGVyIHRoYXQncyBiZWVuIHByaW1hcmlseSBkZXNpZ25lZCBmb3IgdGhvc2Ugd2hvIHVzZSBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheSAoYWx0aG91Z2ggaXQgYWxzbyBpbmNsdWRlcyBzdXBwb3J0IGZvciBzcGVlY2gpLiBEZXRhaWxlZCBkb2N1bWVudGF0aW9uIGZvciB1c2luZyBpdCBvbiBBbmRyb2lkIGlzIGF0OiBodHRwczovL2JybHR0eS5hcHAvZG9jL0FuZHJvaWQuaHRtbAorCitCbHVldG9vdGggYW5kIFVTQiBicmFpbGxlIGRldmljZXMgYXJlIHN1cHBvcnRlZCAoVVNCIGRldmljZXMgcmVxdWlyZSB0aGUgdXNlIG9mIGFuIE9URyBjYWJsZSkuIEJvdGggY29tcHV0ZXIgYW5kIGxpdGVyYXJ5IChjb250cmFjdGVkKSBicmFpbGxlIGFyZSBzdXBwb3J0ZWQuIEJyYWlsbGUgdGFibGVzIGZvciBtYW55IGxhbmd1YWdlcyBhcmUgaW5jbHVkZWQuCisKK1RoZSBjb250ZW50IG9mIHRoZSBzY3JlZW4gaXMgcmVuZGVyZWQgb24gdGhlIGJyYWlsbGUgZGlzcGxheS4gU3RhbmRhcmQgd2lkZ2V0cyAoY2hlY2sgYm94ZXMsIHN3aXRjaGVzLCByYWRpbyBidXR0b25zLCBldGMpIGFyZSByZW5kZXJlZCBpbiBicmFpbGxlLWZyaWVuZGx5IHdheXMuIElmIHRoZSBicmFpbGxlIGRldmljZSBoYXMgYSBrZXlib2FyZCB0aGVuIGl0IGNhbiBiZSB1c2VkIGZvciB0eXBpbmcgd2l0aGluIGFuIGlucHV0IGFyZWEuCisKK01hbnkgc3RhbmRhcmQgQW5kcm9pZCBhY3Rpb25zIGNhbiBiZSBwZXJmb3JtZWQgcmlnaHQgZnJvbSB0aGUgYnJhaWxsZSBkZXZpY2UuIFRoZXNlIGluY2x1ZGU6CisKKyAgKiBHb2luZyB0byB0aGUgSG9tZSBzY3JlZW4uCisgICogR29pbmcgQmFjayB0byB0aGUgcHJldmlvdXMgc2NyZWVuLgorICAqIEdvaW5nIHRvIHRoZSBPdmVydmlldyAoUmVjZW50IEFwcHMpIHNjcmVlbi4KKyAgKiBHb2luZyB0byB0aGUgTm90aWZpY2F0aW9ucyBzY3JlZW4uCisgICogR29pbmcgdG8gdGhlIFF1aWNrIFNldHRpbmdzIHNjcmVlbi4KKyAgKiBHb2luZyB0byB0aGUgRGV2aWNlIE9wdGlvbnMgKFBvd2VyIE9mZikgc2NyZWVuLgorICAqIE9wZW5pbmcgdGhlIGN1cnJlbnQgYXBwJ3Mgb3B0aW9ucyBtZW51LgorICAqIFRhcHBpbmcgKGNsaWNraW5nKSBhbmQgaG9sZGluZyAobG9uZyBwcmVzc2luZykgd2lkZ2V0cy4KKyAgKiBPcGVuaW5nIGEgd2lkZ2V0J3MgY29udGV4dC1kZXBlbmRlbnQgbWVudS4KKyAgKiBFeGVjdXRpbmcgYSB3aWRnZXQncyBhY2Nlc3NpYmlsaXR5IGFjdGlvbnMuCmRpZmYgLS1naXQgYS9BbmRyb2lkL0dyYWRsZS9hcHAvc3JjL21haW4vcGxheS9saXN0aW5ncy9lbi1DQS9ncmFwaGljcy9mZWF0dXJlLWdyYXBoaWMvMS5wbmcgYi9BbmRyb2lkL0dyYWRsZS9hcHAvc3JjL21haW4vcGxheS9saXN0aW5ncy9lbi1DQS9ncmFwaGljcy9mZWF0dXJlLWdyYXBoaWMvMS5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjNjZTBhOAotLS0gL2Rldi9udWxsCisrKyBiL0FuZHJvaWQvR3JhZGxlL2FwcC9zcmMvbWFpbi9wbGF5L2xpc3RpbmdzL2VuLUNBL2dyYXBoaWNzL2ZlYXR1cmUtZ3JhcGhpYy8xLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9BbmRyb2lkL0dyYWRsZS9hcHAvc3JjL21haW4vcGxheS9saXN0aW5ncy9lbi1DQS9ncmFwaGljcy9pY29uLzEucG5nIGIvQW5kcm9pZC9HcmFkbGUvYXBwL3NyYy9tYWluL3BsYXkvbGlzdGluZ3MvZW4tQ0EvZ3JhcGhpY3MvaWNvbi8xLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mODA5YmZhCi0tLSAvZGV2L251bGwKKysrIGIvQW5kcm9pZC9HcmFkbGUvYXBwL3NyYy9tYWluL3BsYXkvbGlzdGluZ3MvZW4tQ0EvZ3JhcGhpY3MvaWNvbi8xLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9BbmRyb2lkL0dyYWRsZS9hcHAvc3JjL21haW4vcGxheS9saXN0aW5ncy9lbi1DQS9ncmFwaGljcy9sYXJnZS10YWJsZXQtc2NyZWVuc2hvdHMvMS5wbmcgYi9BbmRyb2lkL0dyYWRsZS9hcHAvc3JjL21haW4vcGxheS9saXN0aW5ncy9lbi1DQS9ncmFwaGljcy9sYXJnZS10YWJsZXQtc2NyZWVuc2hvdHMvMS5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjNkNDkxYQotLS0gL2Rldi9udWxsCisrKyBiL0FuZHJvaWQvR3JhZGxlL2FwcC9zcmMvbWFpbi9wbGF5L2xpc3RpbmdzL2VuLUNBL2dyYXBoaWNzL2xhcmdlLXRhYmxldC1zY3JlZW5zaG90cy8xLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9BbmRyb2lkL0dyYWRsZS9hcHAvc3JjL21haW4vcGxheS9saXN0aW5ncy9lbi1DQS9ncmFwaGljcy9sYXJnZS10YWJsZXQtc2NyZWVuc2hvdHMvMi5wbmcgYi9BbmRyb2lkL0dyYWRsZS9hcHAvc3JjL21haW4vcGxheS9saXN0aW5ncy9lbi1DQS9ncmFwaGljcy9sYXJnZS10YWJsZXQtc2NyZWVuc2hvdHMvMi5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTU3NjA3YgotLS0gL2Rldi9udWxsCisrKyBiL0FuZHJvaWQvR3JhZGxlL2FwcC9zcmMvbWFpbi9wbGF5L2xpc3RpbmdzL2VuLUNBL2dyYXBoaWNzL2xhcmdlLXRhYmxldC1zY3JlZW5zaG90cy8yLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9BbmRyb2lkL0dyYWRsZS9hcHAvc3JjL21haW4vcGxheS9saXN0aW5ncy9lbi1DQS9ncmFwaGljcy9waG9uZS1zY3JlZW5zaG90cy8xLnBuZyBiL0FuZHJvaWQvR3JhZGxlL2FwcC9zcmMvbWFpbi9wbGF5L2xpc3RpbmdzL2VuLUNBL2dyYXBoaWNzL3Bob25lLXNjcmVlbnNob3RzLzEucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM3ZTY2ZDgKLS0tIC9kZXYvbnVsbAorKysgYi9BbmRyb2lkL0dyYWRsZS9hcHAvc3JjL21haW4vcGxheS9saXN0aW5ncy9lbi1DQS9ncmFwaGljcy9waG9uZS1zY3JlZW5zaG90cy8xLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9BbmRyb2lkL0dyYWRsZS9hcHAvc3JjL21haW4vcGxheS9saXN0aW5ncy9lbi1DQS9ncmFwaGljcy9waG9uZS1zY3JlZW5zaG90cy8yLnBuZyBiL0FuZHJvaWQvR3JhZGxlL2FwcC9zcmMvbWFpbi9wbGF5L2xpc3RpbmdzL2VuLUNBL2dyYXBoaWNzL3Bob25lLXNjcmVlbnNob3RzLzIucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcwYzMxMzEKLS0tIC9kZXYvbnVsbAorKysgYi9BbmRyb2lkL0dyYWRsZS9hcHAvc3JjL21haW4vcGxheS9saXN0aW5ncy9lbi1DQS9ncmFwaGljcy9waG9uZS1zY3JlZW5zaG90cy8yLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9BbmRyb2lkL0dyYWRsZS9hcHAvc3JjL21haW4vcGxheS9saXN0aW5ncy9lbi1DQS9ncmFwaGljcy90YWJsZXQtc2NyZWVuc2hvdHMvMS5wbmcgYi9BbmRyb2lkL0dyYWRsZS9hcHAvc3JjL21haW4vcGxheS9saXN0aW5ncy9lbi1DQS9ncmFwaGljcy90YWJsZXQtc2NyZWVuc2hvdHMvMS5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTU2NTc0OQotLS0gL2Rldi9udWxsCisrKyBiL0FuZHJvaWQvR3JhZGxlL2FwcC9zcmMvbWFpbi9wbGF5L2xpc3RpbmdzL2VuLUNBL2dyYXBoaWNzL3RhYmxldC1zY3JlZW5zaG90cy8xLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9BbmRyb2lkL0dyYWRsZS9hcHAvc3JjL21haW4vcGxheS9saXN0aW5ncy9lbi1DQS9ncmFwaGljcy90YWJsZXQtc2NyZWVuc2hvdHMvMi5wbmcgYi9BbmRyb2lkL0dyYWRsZS9hcHAvc3JjL21haW4vcGxheS9saXN0aW5ncy9lbi1DQS9ncmFwaGljcy90YWJsZXQtc2NyZWVuc2hvdHMvMi5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTMzZDRlOQotLS0gL2Rldi9udWxsCisrKyBiL0FuZHJvaWQvR3JhZGxlL2FwcC9zcmMvbWFpbi9wbGF5L2xpc3RpbmdzL2VuLUNBL2dyYXBoaWNzL3RhYmxldC1zY3JlZW5zaG90cy8yLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9BbmRyb2lkL0dyYWRsZS9hcHAvc3JjL21haW4vcGxheS9saXN0aW5ncy9lbi1DQS9zaG9ydC1kZXNjcmlwdGlvbi50eHQgYi9BbmRyb2lkL0dyYWRsZS9hcHAvc3JjL21haW4vcGxheS9saXN0aW5ncy9lbi1DQS9zaG9ydC1kZXNjcmlwdGlvbi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODAzMWU2YQotLS0gL2Rldi9udWxsCisrKyBiL0FuZHJvaWQvR3JhZGxlL2FwcC9zcmMvbWFpbi9wbGF5L2xpc3RpbmdzL2VuLUNBL3Nob3J0LWRlc2NyaXB0aW9uLnR4dApAQCAtMCwwICsxIEBACitBY2Nlc3NpYmlsaXR5IEFwcCAtIEEgc2NyZWVuIHJlYWRlciBmb3IgdGhvc2Ugd2hvIHVzZSBhIGJyYWlsbGUgZGlzcGxheS4KZGlmZiAtLWdpdCBhL0FuZHJvaWQvR3JhZGxlL2FwcC9zcmMvbWFpbi9wbGF5L2xpc3RpbmdzL2VuLUNBL3RpdGxlLnR4dCBiL0FuZHJvaWQvR3JhZGxlL2FwcC9zcmMvbWFpbi9wbGF5L2xpc3RpbmdzL2VuLUNBL3RpdGxlLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNmNhYjBhCi0tLSAvZGV2L251bGwKKysrIGIvQW5kcm9pZC9HcmFkbGUvYXBwL3NyYy9tYWluL3BsYXkvbGlzdGluZ3MvZW4tQ0EvdGl0bGUudHh0CkBAIC0wLDAgKzEgQEAKK0JSTFRUWQpkaWZmIC0tZ2l0IGEvQW5kcm9pZC9HcmFkbGUvYXBwL3NyYy9tYWluL3BsYXkvcmVsZWFzZS1ub3Rlcy9lbi1DQS9iZXRhLnR4dCBiL0FuZHJvaWQvR3JhZGxlL2FwcC9zcmMvbWFpbi9wbGF5L3JlbGVhc2Utbm90ZXMvZW4tQ0EvYmV0YS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDk5NzAyMwotLS0gL2Rldi9udWxsCisrKyBiL0FuZHJvaWQvR3JhZGxlL2FwcC9zcmMvbWFpbi9wbGF5L3JlbGVhc2Utbm90ZXMvZW4tQ0EvYmV0YS50eHQKQEAgLTAsMCArMSwyIEBACitCUkxUVFkgaXMgYW4gYWNjZXNzaWJpbGl0eSBhcHAgKGl0J3MgYSBzY3JlZW4gcmVhZGVyIGZvciBicmFpbGxlIHVzZXJzKSBzbyBpdCB3b24ndCBiZSBpbiB0aGUgQXBwcyBsaXN0LiBUbyBzdGFydC9zdG9wIGl0LCBnbyB0byBTZXR0aW5ncyAtPiBBY2Nlc3NpYmlsaXR5LgorRnVsbCBkZXRhaWxzIGZvciB1c2luZyBCUkxUVFkgb24gQW5kcm9pZCBhcmUgYXQ6IGh0dHBzOi8vYnJsdHR5LmFwcC9kb2MvQW5kcm9pZC5odG1sCmRpZmYgLS1naXQgYS9BbmRyb2lkL0dyYWRsZS9hcHAvc3JjL21haW4vcGxheS9yZWxlYXNlLW5vdGVzL2VuLUNBL3Byb2R1Y3Rpb24udHh0IGIvQW5kcm9pZC9HcmFkbGUvYXBwL3NyYy9tYWluL3BsYXkvcmVsZWFzZS1ub3Rlcy9lbi1DQS9wcm9kdWN0aW9uLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kOTk3MDIzCi0tLSAvZGV2L251bGwKKysrIGIvQW5kcm9pZC9HcmFkbGUvYXBwL3NyYy9tYWluL3BsYXkvcmVsZWFzZS1ub3Rlcy9lbi1DQS9wcm9kdWN0aW9uLnR4dApAQCAtMCwwICsxLDIgQEAKK0JSTFRUWSBpcyBhbiBhY2Nlc3NpYmlsaXR5IGFwcCAoaXQncyBhIHNjcmVlbiByZWFkZXIgZm9yIGJyYWlsbGUgdXNlcnMpIHNvIGl0IHdvbid0IGJlIGluIHRoZSBBcHBzIGxpc3QuIFRvIHN0YXJ0L3N0b3AgaXQsIGdvIHRvIFNldHRpbmdzIC0+IEFjY2Vzc2liaWxpdHkuCitGdWxsIGRldGFpbHMgZm9yIHVzaW5nIEJSTFRUWSBvbiBBbmRyb2lkIGFyZSBhdDogaHR0cHM6Ly9icmx0dHkuYXBwL2RvYy9BbmRyb2lkLmh0bWwKZGlmZiAtLWdpdCBhL0FuZHJvaWQvR3JhZGxlL2FwcC9zcmMvbWFpbi9yZXMvZHJhd2FibGUtaGRwaS9icmFpbGxlX3NlcnZpY2UucG5nIGIvQW5kcm9pZC9HcmFkbGUvYXBwL3NyYy9tYWluL3Jlcy9kcmF3YWJsZS1oZHBpL2JyYWlsbGVfc2VydmljZS5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGJiYTUyZQotLS0gL2Rldi9udWxsCisrKyBiL0FuZHJvaWQvR3JhZGxlL2FwcC9zcmMvbWFpbi9yZXMvZHJhd2FibGUtaGRwaS9icmFpbGxlX3NlcnZpY2UucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL0FuZHJvaWQvR3JhZGxlL2FwcC9zcmMvbWFpbi9yZXMvZHJhd2FibGUtbGRwaS9icmFpbGxlX3NlcnZpY2UucG5nIGIvQW5kcm9pZC9HcmFkbGUvYXBwL3NyYy9tYWluL3Jlcy9kcmF3YWJsZS1sZHBpL2JyYWlsbGVfc2VydmljZS5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWY5MDNhOQotLS0gL2Rldi9udWxsCisrKyBiL0FuZHJvaWQvR3JhZGxlL2FwcC9zcmMvbWFpbi9yZXMvZHJhd2FibGUtbGRwaS9icmFpbGxlX3NlcnZpY2UucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL0FuZHJvaWQvR3JhZGxlL2FwcC9zcmMvbWFpbi9yZXMvZHJhd2FibGUtbWRwaS9icmFpbGxlX3NlcnZpY2UucG5nIGIvQW5kcm9pZC9HcmFkbGUvYXBwL3NyYy9tYWluL3Jlcy9kcmF3YWJsZS1tZHBpL2JyYWlsbGVfc2VydmljZS5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmM0NTRmYwotLS0gL2Rldi9udWxsCisrKyBiL0FuZHJvaWQvR3JhZGxlL2FwcC9zcmMvbWFpbi9yZXMvZHJhd2FibGUtbWRwaS9icmFpbGxlX3NlcnZpY2UucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL0FuZHJvaWQvR3JhZGxlL2FwcC9zcmMvbWFpbi9yZXMvZHJhd2FibGUtbm9kcGkvYnJhaWxsZV9ub3RpZmljYXRpb24ucG5nIGIvQW5kcm9pZC9HcmFkbGUvYXBwL3NyYy9tYWluL3Jlcy9kcmF3YWJsZS1ub2RwaS9icmFpbGxlX25vdGlmaWNhdGlvbi5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmY1ZTVlMAotLS0gL2Rldi9udWxsCisrKyBiL0FuZHJvaWQvR3JhZGxlL2FwcC9zcmMvbWFpbi9yZXMvZHJhd2FibGUtbm9kcGkvYnJhaWxsZV9ub3RpZmljYXRpb24ucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL0FuZHJvaWQvR3JhZGxlL2FwcC9zcmMvbWFpbi9yZXMvZHJhd2FibGUteGhkcGkvYnJhaWxsZV9zZXJ2aWNlLnBuZyBiL0FuZHJvaWQvR3JhZGxlL2FwcC9zcmMvbWFpbi9yZXMvZHJhd2FibGUteGhkcGkvYnJhaWxsZV9zZXJ2aWNlLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMTg3YjZkCi0tLSAvZGV2L251bGwKKysrIGIvQW5kcm9pZC9HcmFkbGUvYXBwL3NyYy9tYWluL3Jlcy9kcmF3YWJsZS14aGRwaS9icmFpbGxlX3NlcnZpY2UucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL0FuZHJvaWQvR3JhZGxlL2FwcC9zcmMvbWFpbi9yZXMvZHJhd2FibGUteHhoZHBpL2JyYWlsbGVfc2VydmljZS5wbmcgYi9BbmRyb2lkL0dyYWRsZS9hcHAvc3JjL21haW4vcmVzL2RyYXdhYmxlLXh4aGRwaS9icmFpbGxlX3NlcnZpY2UucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdiYmVhZmUKLS0tIC9kZXYvbnVsbAorKysgYi9BbmRyb2lkL0dyYWRsZS9hcHAvc3JjL21haW4vcmVzL2RyYXdhYmxlLXh4aGRwaS9icmFpbGxlX3NlcnZpY2UucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL0FuZHJvaWQvR3JhZGxlL2FwcC9zcmMvbWFpbi9yZXMvZHJhd2FibGUteHh4aGRwaS9icmFpbGxlX3NlcnZpY2UucG5nIGIvQW5kcm9pZC9HcmFkbGUvYXBwL3NyYy9tYWluL3Jlcy9kcmF3YWJsZS14eHhoZHBpL2JyYWlsbGVfc2VydmljZS5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGQwMGViYwotLS0gL2Rldi9udWxsCisrKyBiL0FuZHJvaWQvR3JhZGxlL2FwcC9zcmMvbWFpbi9yZXMvZHJhd2FibGUteHh4aGRwaS9icmFpbGxlX3NlcnZpY2UucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL0FuZHJvaWQvR3JhZGxlL2FwcC9zcmMvbWFpbi9yZXMvbGF5b3V0L2Fib3V0X2FjdGl2aXR5LnhtbCBiL0FuZHJvaWQvR3JhZGxlL2FwcC9zcmMvbWFpbi9yZXMvbGF5b3V0L2Fib3V0X2FjdGl2aXR5LnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYzVhY2JhCi0tLSAvZGV2L251bGwKKysrIGIvQW5kcm9pZC9HcmFkbGUvYXBwL3NyYy9tYWluL3Jlcy9sYXlvdXQvYWJvdXRfYWN0aXZpdHkueG1sCkBAIC0wLDAgKzEsNDIgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+CisKKzxUYWJsZUxheW91dCB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0ibWF0Y2hfcGFyZW50IgorICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgorICA+CisKKyAgPFRhYmxlUm93PgorICAgIDxUZXh0VmlldyBhbmRyb2lkOnRleHQ9IkBzdHJpbmcvYWJvdXRfbGFiZWxfY29weXJpZ2h0IiAvPgorICAgIDxUZXh0VmlldyBhbmRyb2lkOnRleHQ9IkBzdHJpbmcvYXBwQ29uZmlnX2NvcHlyaWdodE5vdGljZSIgLz4KKyAgPC9UYWJsZVJvdz4KKworICA8VGFibGVSb3c+CisgICAgPFRleHRWaWV3IGFuZHJvaWQ6dGV4dD0iQHN0cmluZy9hcHBfbmFtZSIgLz4KKyAgICA8VGV4dFZpZXcgYW5kcm9pZDppZD0iQCtpZC9hcHBfdmVyc2lvbl9uYW1lIiAvPgorICA8L1RhYmxlUm93PgorCisgIDxUYWJsZVJvdz4KKyAgICA8VGV4dFZpZXcgYW5kcm9pZDp0ZXh0PSJAc3RyaW5nL2FwaV9uYW1lIiAvPgorICAgIDxUZXh0VmlldyBhbmRyb2lkOnRleHQ9IkBzdHJpbmcvYXBwQ29uZmlnX2FwaVJlbGVhc2UiIC8+CisgIDwvVGFibGVSb3c+CisKKyAgPFRhYmxlUm93PgorICAgIDxUZXh0VmlldyBhbmRyb2lkOnRleHQ9IkBzdHJpbmcvYWJvdXRfbGFiZWxfYnVpbGRUaW1lIiAvPgorICAgIDxUZXh0VmlldyBhbmRyb2lkOnRleHQ9IkBzdHJpbmcvYXBwQ29uZmlnX2J1aWxkVGltZSIgLz4KKyAgPC9UYWJsZVJvdz4KKworICA8VGFibGVSb3c+CisgICAgPFRleHRWaWV3IGFuZHJvaWQ6dGV4dD0iQHN0cmluZy9hYm91dF9sYWJlbF9zb3VyY2VSZXZpc2lvbiIgLz4KKyAgICA8VGV4dFZpZXcgYW5kcm9pZDp0ZXh0PSJAc3RyaW5nL2FwcENvbmZpZ19zb3VyY2VSZXZpc2lvbiIgLz4KKyAgPC9UYWJsZVJvdz4KKworICA8QnV0dG9uCisgICAgYW5kcm9pZDp0ZXh0PSJAc3RyaW5nL2Fib3V0X2xhYmVsX3ByaXZhY3lQb2xpY3kiCisgICAgYW5kcm9pZDpvbkNsaWNrPSJ2aWV3UHJpdmFjeVBvbGljeSIKKyAgIC8+CisKKyAgPEJ1dHRvbgorICAgIGFuZHJvaWQ6dGV4dD0iQHN0cmluZy9nb29nbGVfcGxheV9sYWJlbCIKKyAgICBhbmRyb2lkOm9uQ2xpY2s9InZpZXdHb29nbGVQbGF5IgorICAgLz4KKzwvVGFibGVMYXlvdXQ+CmRpZmYgLS1naXQgYS9BbmRyb2lkL0dyYWRsZS9hcHAvc3JjL21haW4vcmVzL2xheW91dC9hY3Rpb25zX2FjdGl2aXR5LnhtbCBiL0FuZHJvaWQvR3JhZGxlL2FwcC9zcmMvbWFpbi9yZXMvbGF5b3V0L2FjdGlvbnNfYWN0aXZpdHkueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE1YmYyMzcKLS0tIC9kZXYvbnVsbAorKysgYi9BbmRyb2lkL0dyYWRsZS9hcHAvc3JjL21haW4vcmVzL2xheW91dC9hY3Rpb25zX2FjdGl2aXR5LnhtbApAQCAtMCwwICsxLDcxIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgorCis8U2Nyb2xsVmlldyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0ibWF0Y2hfcGFyZW50IgorICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgorICBhbmRyb2lkOm9yaWVudGF0aW9uPSJ2ZXJ0aWNhbCIKKyAgPgorCisgIDxUYWJsZUxheW91dAorICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0ibWF0Y2hfcGFyZW50IgorICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCisgICAgYW5kcm9pZDpvcmllbnRhdGlvbj0idmVydGljYWwiCisgICAgPgorCisgICAgPEJ1dHRvbgorICAgICAgYW5kcm9pZDp0ZXh0PSJAc3RyaW5nL0dMT0JBTF9CVVRUT05fU1dJVENIX0lOUFVUX01FVEhPRCIKKyAgICAgIGFuZHJvaWQ6b25DbGljaz0ic3dpdGNoSW5wdXRNZXRob2QiCisgICAgIC8+CisKKyAgICA8QnV0dG9uCisgICAgICBhbmRyb2lkOnRleHQ9IkBzdHJpbmcvU0VUVElOR1NfU0NSRUVOX01BSU4iCisgICAgICBhbmRyb2lkOm9uQ2xpY2s9ImxhdW5jaFNldHRpbmdzQWN0aXZpdHkiCisgICAgIC8+CisKKyAgICA8QnV0dG9uCisgICAgICBhbmRyb2lkOnRleHQ9IkBzdHJpbmcvR0xPQkFMX0JVVFRPTl9WSUVXX1VTRVJfR1VJREUiCisgICAgICBhbmRyb2lkOm9uQ2xpY2s9InZpZXdVc2VyR3VpZGUiCisgICAgIC8+CisKKyAgICA8QnV0dG9uCisgICAgICBhbmRyb2lkOnRleHQ9IkBzdHJpbmcvR0xPQkFMX0JVVFRPTl9CUk9XU0VfV0VCX1NJVEUiCisgICAgICBhbmRyb2lkOm9uQ2xpY2s9ImJyb3dzZVdlYlNpdGUiCisgICAgIC8+CisKKyAgICA8QnV0dG9uCisgICAgICBhbmRyb2lkOnRleHQ9IkBzdHJpbmcvR0xPQkFMX0JVVFRPTl9CUk9XU0VfQ09NTVVOSVRZX01FU1NBR0VTIgorICAgICAgYW5kcm9pZDpvbkNsaWNrPSJicm93c2VDb21tdW5pdHlNZXNzYWdlcyIKKyAgICAgLz4KKworICAgIDxCdXR0b24KKyAgICAgIGFuZHJvaWQ6dGV4dD0iQHN0cmluZy9HTE9CQUxfQlVUVE9OX1BPU1RfQ09NTVVOSVRZX01FU1NBR0UiCisgICAgICBhbmRyb2lkOm9uQ2xpY2s9InBvc3RDb21tdW5pdHlNZXNzYWdlIgorICAgICAvPgorCisgICAgPEJ1dHRvbgorICAgICAgYW5kcm9pZDp0ZXh0PSJAc3RyaW5nL0dMT0JBTF9CVVRUT05fTUFOQUdFX0NPTU1VTklUWV9NRU1CRVJTSElQIgorICAgICAgYW5kcm9pZDpvbkNsaWNrPSJtYW5hZ2VDb21tdW5pdHlNZW1iZXJzaGlwIgorICAgICAvPgorCisgICAgPEJ1dHRvbgorICAgICAgYW5kcm9pZDppZD0iQCtpZC9HTE9CQUxfQlVUVE9OX1VQREFURV9BUFBMSUNBVElPTiIKKyAgICAgIGFuZHJvaWQ6dGV4dD0iQHN0cmluZy9HTE9CQUxfQlVUVE9OX1VQREFURV9BUFBMSUNBVElPTiIKKyAgICAgIGFuZHJvaWQ6b25DbGljaz0idXBkYXRlQXBwbGljYXRpb24iCisgICAgIC8+CisKKyAgICA8Q2hlY2tCb3gKKyAgICAgIGFuZHJvaWQ6aWQ9IkAraWQvR0xPQkFMX0NIRUNLQk9YX0RFVkVMT1BFUl9CVUlMRCIKKyAgICAgIGFuZHJvaWQ6dGV4dD0iQHN0cmluZy9HTE9CQUxfQ0hFQ0tCT1hfREVWRUxPUEVSX0JVSUxEIgorICAgICAvPgorCisgICAgPENoZWNrQm94CisgICAgICBhbmRyb2lkOmlkPSJAK2lkL0dMT0JBTF9DSEVDS0JPWF9BTExPV19ET1dOR1JBREUiCisgICAgICBhbmRyb2lkOnRleHQ9IkBzdHJpbmcvR0xPQkFMX0NIRUNLQk9YX0FMTE9XX0RPV05HUkFERSIKKyAgICAgLz4KKworICAgIDxCdXR0b24KKyAgICAgIGFuZHJvaWQ6dGV4dD0iQHN0cmluZy9hYm91dF9sYWJlbF9hY3Rpdml0eSIKKyAgICAgIGFuZHJvaWQ6b25DbGljaz0ibGF1bmNoQWJvdXRBY3Rpdml0eSIKKyAgICAgLz4KKyAgPC9UYWJsZUxheW91dD4KKzwvU2Nyb2xsVmlldz4KZGlmZiAtLWdpdCBhL0FuZHJvaWQvR3JhZGxlL2FwcC9zcmMvbWFpbi9yZXMvbGF5b3V0L2Nob29zZXIueG1sIGIvQW5kcm9pZC9HcmFkbGUvYXBwL3NyYy9tYWluL3Jlcy9sYXlvdXQvY2hvb3Nlci54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWEwMTM2OAotLS0gL2Rldi9udWxsCisrKyBiL0FuZHJvaWQvR3JhZGxlL2FwcC9zcmMvbWFpbi9yZXMvbGF5b3V0L2Nob29zZXIueG1sCkBAIC0wLDAgKzEsMjEgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+CisKKzxUYWJsZUxheW91dCB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0ibWF0Y2hfcGFyZW50IgorICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgorICA+CisKKyAgPFRleHRWaWV3CisgICAgYW5kcm9pZDppZD0iQCtpZC9jaG9vc2VyX3RpdGxlIgorICAgIGFuZHJvaWQ6dGV4dFN0eWxlPSJib2xkIgorICAgLz4KKworICA8TGlzdFZpZXcKKyAgICBhbmRyb2lkOmlkPSJAK2lkL2Nob29zZXJfbGlzdCIKKyAgIC8+CisKKyAgPEJ1dHRvbgorICAgIGFuZHJvaWQ6aWQ9IkAraWQvY2hvb3Nlcl9kaXNtaXNzIgorICAgIGFuZHJvaWQ6dGV4dD0iQGFuZHJvaWQ6c3RyaW5nL2NhbmNlbCIKKyAgIC8+Cis8L1RhYmxlTGF5b3V0PgpkaWZmIC0tZ2l0IGEvQW5kcm9pZC9HcmFkbGUvYXBwL3NyYy9tYWluL3Jlcy9sYXlvdXQvZmlsZV9kb3dubG9hZGVyLnhtbCBiL0FuZHJvaWQvR3JhZGxlL2FwcC9zcmMvbWFpbi9yZXMvbGF5b3V0L2ZpbGVfZG93bmxvYWRlci54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTkwYjIzNgotLS0gL2Rldi9udWxsCisrKyBiL0FuZHJvaWQvR3JhZGxlL2FwcC9zcmMvbWFpbi9yZXMvbGF5b3V0L2ZpbGVfZG93bmxvYWRlci54bWwKQEAgLTAsMCArMSwyNiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KKworPFRhYmxlTGF5b3V0IHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJtYXRjaF9wYXJlbnQiCisgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCisgIGFuZHJvaWQ6b3JpZW50YXRpb249InZlcnRpY2FsIgorICA+CisKKyAgPFRleHRWaWV3IGFuZHJvaWQ6aWQ9IkAraWQvc3RhdGUiIC8+CisKKyAgPFRhYmxlTGF5b3V0CisgICAgYW5kcm9pZDppZD0iQCtpZC9wcm9ncmVzcyIKKyAgICBhbmRyb2lkOnZpc2liaWxpdHk9ImdvbmUiCisgICAgYW5kcm9pZDpwYWRkaW5nPSIyNWRwIgorICAgIGFuZHJvaWQ6c3RyZXRjaENvbHVtbnM9IjEiCisgICAgPgorCisgICAgPFByb2dyZXNzQmFyIGFuZHJvaWQ6aWQ9IkAraWQvYmFyIiAvPgorCisgICAgPFRhYmxlUm93PgorICAgICAgPFRleHRWaWV3IGFuZHJvaWQ6aWQ9IkAraWQvY3VycmVudCIgYW5kcm9pZDpncmF2aXR5PSJsZWZ0IiAvPgorICAgICAgPFNwYWNlIC8+CisgICAgICA8VGV4dFZpZXcgYW5kcm9pZDppZD0iQCtpZC9yZW1haW5pbmciIGFuZHJvaWQ6Z3Jhdml0eT0icmlnaHQiIC8+CisgICAgPC9UYWJsZVJvdz4KKyAgPC9UYWJsZUxheW91dD4KKzwvVGFibGVMYXlvdXQ+CmRpZmYgLS1naXQgYS9BbmRyb2lkL0dyYWRsZS9hcHAvc3JjL21haW4vcmVzL3ZhbHVlcy1hci9zdHJpbmdzLnhtbCBiL0FuZHJvaWQvR3JhZGxlL2FwcC9zcmMvbWFpbi9yZXMvdmFsdWVzLWFyL3N0cmluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYwMWY1NzUKLS0tIC9kZXYvbnVsbAorKysgYi9BbmRyb2lkL0dyYWRsZS9hcHAvc3JjL21haW4vcmVzL3ZhbHVlcy1hci9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDI4NSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KKworPHJlc291cmNlcz4KKyAgPHN0cmluZyBuYW1lPSJhcHBfZGVzY3JpcHRpb24iPtmK2K/YudmFIEJSTFRUWSDYo9is2YfYstipINio2LHYp9mK2YQg2KfZhNmF2K7YqtmE2YHYqS48L3N0cmluZz4KKworICA8c3RyaW5nIG5hbWU9ImFib3V0X2xhYmVsX2FjdGl2aXR5Ij7YrdmI2YQg2KfZhNiq2LfYqNmK2YI8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJhYm91dF9sYWJlbF9jb3B5cmlnaHQiPtit2YLZiNmCINin2YTZhti02LE8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJhYm91dF9sYWJlbF9idWlsZFRpbWUiPtmI2YLYqiDYp9mE2KXZhti02KfYoTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9ImFib3V0X2xhYmVsX3NvdXJjZVJldmlzaW9uIj7Zhdix2KfYrNi52Kkg2KfZhNmF2LXYr9ixPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iYWJvdXRfbGFiZWxfcHJpdmFjeVBvbGljeSI+2LPZitin2LPYqSDYp9mE2K7YtdmI2LXZitipPC9zdHJpbmc+CisKKyAgPHN0cmluZyBuYW1lPSJpbnB1dFNlcnZpY2VfbmFtZSI+2K7Yr9mF2Kkg2KfZhNil2K/Yrtin2YQg2YHZiiBCUkxUVFk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJpbnB1dFNlcnZpY2VfdHlwZSI+2YTZiNit2KfYqiDYp9mE2YXZgdin2KrZititINi52YTZiSDYo9is2YfYstipINio2LHYp9mK2YQ8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJpbnB1dFNlcnZpY2Vfbm90X2VuYWJsZWQiPtiu2K/ZhdipINin2YTYpdiv2K7Yp9mEINi62YrYsSDZhdmP2YHYudmR2Y7ZhNipPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iaW5wdXRTZXJ2aWNlX25vdF9zZWxlY3RlZCI+2K7Yr9mF2Kkg2KfZhNil2K/Yrtin2YQg2LrZitixINmF2K3Yr9iv2Kk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJpbnB1dFNlcnZpY2Vfbm90X3N0YXJ0ZWQiPtiu2K/ZhdipINin2YTYpdiv2K7Yp9mEINmE2YUg2KrYqNiv2KM8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJpbnB1dFNlcnZpY2Vfbm90X2Nvbm5lY3RlZCI+2K7Yr9mF2Kkg2KfZhNil2K/Yrtin2YQg2LrZitixINmF2KrYtdmE2Kk8L3N0cmluZz4KKworICA8c3RyaW5nIG5hbWU9InVwZGF0ZUFwcGxpY2F0aW9uX3Byb2JsZW1fZmFpbGVkIj7ZhNmFINmK2KrZhSDYqtit2K/ZitirINin2YTYqti32KjZitmCPC9zdHJpbmc+CisKKyAgPHN0cmluZyBuYW1lPSJwYWNrYWdlSW5zdGFsbGVyX3Byb2JsZW1fZmFpbGVkIj7Yp9mE2K3YstmF2Kkg2LrZitixINmF2KvYqNiq2Kk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJwYWNrYWdlSW5zdGFsbGVyX3Byb2JsZW1fc2FtZSI+2YbZgdizINin2YTYpdi12K/Yp9ixPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0icGFja2FnZUluc3RhbGxlcl9wcm9ibGVtX2Rvd25ncmFkZSI+2KfZhNix2KzZiNi5INil2YTZiSDYpdi12K/Yp9ixINij2YLYr9mFINi62YrYsSDZhdiz2YXZiNitINio2Yc8L3N0cmluZz4KKworICA8c3RyaW5nIG5hbWU9ImZpbGVEb3dubG9hZGVyX3RpdGxlIj7Yo9iv2KfYqSDYqtmG2LLZitmEINin2YTZhdmE2YHYp9iqINmF2YYgQlJMVFRZPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iZmlsZURvd25sb2FkZXJfcHJvYmxlbV9mYWlsZWQiPtmE2YUg2YrYqtmFINiq2YbYstmK2YQg2KfZhNmF2YTZgTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9ImZpbGVEb3dubG9hZGVyX3N0YXRlX2Nvbm5lY3RpbmciPtmK2KzYsdmKINin2YTYp9iq2LXYp9mEPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iZmlsZURvd25sb2FkZXJfc3RhdGVfZG93bmxvYWRpbmciPtmK2KzYsdmKINin2YTYqtit2YXZitmEPC9zdHJpbmc+CisKKyAgPHN0cmluZyBuYW1lPSJzZXR0aW5nX3N0YXRlX29mZiI+2YXYudi32YQ8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJjaGVja2JveF9zdGF0ZV91bmNoZWNrZWQiPtmE2Kc8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJjaGVja2JveF9zdGF0ZV9jaGVja2VkIj7Zhti52YU8L3N0cmluZz4KKworICA8c3RyaW5nIG5hbWU9ImJyYWlsbGVfY2hhbm5lbF9uYW1lIj7Yrdin2YTYqSDYrNmH2KfYsiDYqNix2KfZitmEPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iYnJhaWxsZV9oaW50X3RhcCI+2KfZhtmC2LEg2YTZhNit2LXZiNmEINi52YTZiSDYp9mE2KXYrNix2KfYodin2Ko8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJicmFpbGxlX3N0YXRlX3JlbGVhc2VkIj7ZhdmB2LHYujwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9ImJyYWlsbGVfc3RhdGVfd2FpdGluZyI+2YLZitivINin2YTYp9mG2KrYuNin2LE8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJicmFpbGxlX3N0YXRlX2Nvbm5lY3RlZCI+2YXYqti12YQ8L3N0cmluZz4KKworICA8c3RyaW5nIG5hbWU9IkdMT0JBTF9CVVRUT05fTk9USUZJQ0FUSU9OUyI+2KfZhNil2LTYudin2LHYp9iqPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iR0xPQkFMX0JVVFRPTl9RVUlDS19TRVRUSU5HUyI+2KXYudiv2KfYr9in2Kog2LPYsdmK2LnYqTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkdMT0JBTF9CVVRUT05fQkFDSyI+2LHYrNmI2Lk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJHTE9CQUxfQlVUVE9OX0hPTUUiPtin2YTYtNin2LTYqSDYp9mE2LHYptmK2LPZitipPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iR0xPQkFMX0JVVFRPTl9SRUNFTlRfQVBQUyI+2KfZhNiq2LfYqNmK2YLYp9iqINin2YTYrdiv2YrYq9ipPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iR0xPQkFMX0JVVFRPTl9PVkVSVklFVyI+2YbYuNix2Kkg2LnYp9mF2Kk8L3N0cmluZz4KKworICA8c3RyaW5nIG5hbWU9IkdMT0JBTF9CVVRUT05fU1dJVENIX0lOUFVUX01FVEhPRCI+2KrYqNiv2YrZhCDYt9ix2YrZgtipINin2YTYpdiv2K7Yp9mEPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iR0xPQkFMX0JVVFRPTl9WSUVXX1VTRVJfR1VJREUiPti52LHYtiDYr9mE2YrZhCDYp9mE2YXYs9iq2K7Yr9mFPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iR0xPQkFMX0JVVFRPTl9CUk9XU0VfV0VCX1NJVEUiPtiq2LXZgditINin2YTZhdmI2YLYuTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkdMT0JBTF9CVVRUT05fQlJPV1NFX0NPTU1VTklUWV9NRVNTQUdFUyI+2KrYtdmB2K0g2LHYs9in2KbZhCDYp9mE2YXYs9iq2K7Yr9mF2YrZhjwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkdMT0JBTF9CVVRUT05fUE9TVF9DT01NVU5JVFlfTUVTU0FHRSI+2KXYsdiz2KfZhCDYsdiz2KfZhNipINmE2YTZhdiz2KrYrtiv2YXZitmGPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iR0xPQkFMX0JVVFRPTl9NQU5BR0VfQ09NTVVOSVRZX01FTUJFUlNISVAiPtil2K/Yp9ix2Kkg2KfZhNi52LbZiNmK2Kkg2YHZiiDZhdis2KrZhdi5INin2YTZhdiz2KrYrtiv2YXZitmGPC9zdHJpbmc+CisKKyAgPHN0cmluZyBuYW1lPSJHTE9CQUxfQlVUVE9OX1VQREFURV9BUFBMSUNBVElPTiI+2KrYrdiv2YrYqyDYp9mE2KrYt9io2YrZgjwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkdMT0JBTF9DSEVDS0JPWF9ERVZFTE9QRVJfQlVJTEQiPtmG2LPYrtipINmE2YTZhdi32YjYsdmK2YY8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJHTE9CQUxfQ0hFQ0tCT1hfQUxMT1dfRE9XTkdSQURFIj7Yp9mE2LPZhdin2K0g2KjYp9mE2LnZiNiv2Kkg2YTZhNmG2LPYriDYp9mE2KPZgtiv2YU8L3N0cmluZz4KKworICA8c3RyaW5nIG5hbWU9IkNIT09TRVJfVElUTEVfQUNDRVNTSUJJTElUWV9BQ1RJT05TIj7Ypdis2LHYp9ii2Kog2KXZhdmD2KfZhtmK2Kkg2KfZhNmI2LXZiNmEPC9zdHJpbmc+CisKKyAgPHN0cmluZyBuYW1lPSJTRVRUSU5HU19TQ1JFRU5fTUFJTiI+2KXYudiv2KfYr9in2KogQlJMVFRZPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iU0VUVElOR1NfU0NSRUVOX0dFTkVSQUwiPtin2YTYp9i52K/Yp9iv2KfYqiDYp9mE2LnYp9mF2Kk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJTRVRUSU5HU19TQ1JFRU5fTUVTU0FHRSI+2KXYudiv2KfYr9in2Kog2KfZhNix2LPYp9im2YQ8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJTRVRUSU5HU19TQ1JFRU5fREVWSUNFUyI+2KXYr9in2LHYqSDYp9mE2KPYrNmH2LLYqTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlNFVFRJTkdTX1NDUkVFTl9BRFZBTkNFRCI+2KXYudiv2KfYr9in2Kog2YXYqtmC2K/ZhdipPC9zdHJpbmc+CisKKyAgPHN0cmluZyBuYW1lPSJTRVRUSU5HU19DSEVDS0JPWF9SRUxFQVNFX0JSQUlMTEVfREVWSUNFIj7Zgdi12YQg2KzZh9in2LIg2KjYsdin2YrZhDwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlNFVFRJTkdTX0JVVFRPTl9OQVZJR0FUSU9OX01PREUiPtmG2YXYtyDYp9mE2KrZhtmC2YQ8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJTRVRUSU5HU19CVVRUT05fU1BFRUNIX1NVUFBPUlQiPtiv2LnZhSDYp9mE2YbYt9mCPC9zdHJpbmc+CisKKyAgPHN0cmluZyBuYW1lPSJTRVRUSU5HU19CVVRUT05fVEVYVF9UQUJMRSI+2KzYr9mI2YQg2KfZhNmG2LU8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJTRVRUSU5HU19CVVRUT05fQVRUUklCVVRFU19UQUJMRSI+2KzYr9mI2YQg2KfZhNiz2YXYp9iqPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iU0VUVElOR1NfQlVUVE9OX0NPTlRSQUNUSU9OX1RBQkxFIj7YrNiv2YjZhCDYp9mE2KfYrtiq2LXYp9ix2KfYqjwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlNFVFRJTkdTX0JVVFRPTl9LRVlCT0FSRF9UQUJMRSI+2KzYr9mI2YQg2YTZiNit2Kkg2KfZhNmF2YHYp9iq2YrYrTwvc3RyaW5nPgorCisgIDxzdHJpbmcgbmFtZT0iU0VUVElOR1NfQ0hFQ0tCT1hfU0hPV19BTEVSVFMiPti52LHYtiDYp9mE2KrZhtio2YrZh9in2Ko8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJTRVRUSU5HU19DSEVDS0JPWF9TSE9XX0FOTk9VTkNFTUVOVFMiPti52LHYtiDYp9mE2KXYudmE2KfZhtin2Ko8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJTRVRUSU5HU19DSEVDS0JPWF9TSE9XX05PVElGSUNBVElPTlMiPti52LHYtiDYp9mE2KXYtNi52KfYsdin2Ko8L3N0cmluZz4KKworICA8c3RyaW5nIG5hbWU9IlNFVFRJTkdTX0JVVFRPTl9MT0dfTEVWRUwiPtmF2LPYqtmI2Ykg2KfZhNiz2KzZhDwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlNFVFRJTkdTX0JVVFRPTl9MT0dfQ0FURUdPUklFUyI+2KPZgtiz2KfZhSDYp9mE2LPYrNmEPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iU0VUVElOR1NfQ0hFQ0tCT1hfTE9HX0FDQ0VTU0lCSUxJVFlfRVZFTlRTIj7Ys9is2YQg2KPYrdiv2KfYqyDYpdmF2YPYp9mG2YrYqSDYp9mE2YjYtdmI2YQ8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJTRVRUSU5HU19DSEVDS0JPWF9MT0dfUkVOREVSRURfU0NSRUVOIj7Yqtiz2KzZitmEINin2YTYtNin2LTYqSDYp9mE2YXYudix2YjYttipPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iU0VUVElOR1NfQ0hFQ0tCT1hfTE9HX0tFWUJPQVJEX0VWRU5UUyI+2LPYrNmEINij2K3Yr9in2Ksg2YTZiNit2KfYqiDYp9mE2YXZgdin2KrZititPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iU0VUVElOR1NfQ0hFQ0tCT1hfTE9HX1VOSEFORExFRF9FVkVOVFMiPtiz2KzZhCDYp9mE2KPYrdiv2KfYqyDYutmK2LEg2KfZhNmF2LnYp9mE2KzYqTwvc3RyaW5nPgorCisgIDxzdHJpbmcgbmFtZT0iREVWSUNFU19CVVRUT05fU0VMRUNURUQiPtin2YTYrNmH2KfYsiDYp9mE2YXYrdiv2K88L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJERVZJQ0VTX0JVVFRPTl9BREQiPtil2LbYp9mB2Kkg2KzZh9in2LI8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJERVZJQ0VTX0JVVFRPTl9SRU1PVkUiPtil2LLYp9mE2Kkg2KzZh9in2LI8L3N0cmluZz4KKworICA8c3RyaW5nIG5hbWU9IlNFTEVDVEVEX0RFVklDRV9OT05FIj7ZhNinINiq2YjYrNivINij2KzZh9iy2Kk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJTRUxFQ1RFRF9ERVZJQ0VfVU5TRUxFQ1RFRCI+2KfZhNis2YfYp9iyINi62YrYsSDZhdit2K/Yrzwvc3RyaW5nPgorCisgIDxzdHJpbmcgbmFtZT0iQUREX0RFVklDRV9OQU1FIj7Yp9iz2YUg2KfZhNis2YfYp9iyPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iQUREX0RFVklDRV9NRVRIT0QiPti32LHZitmC2Kkg2KfZhNin2KrYtdin2YQ8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJBRERfREVWSUNFX1NFTEVDVCI+2KfYrtiq2YrYp9ixINis2YfYp9iyPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iQUREX0RFVklDRV9EUklWRVIiPtiz2KfYptmC2Kkg2KjYsdin2YrZhDwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkFERF9ERVZJQ0VfRE9ORSI+2KrZhTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkFERF9ERVZJQ0VfVU5TRUxFQ1RFRF9NRVRIT0QiPti32LHZitmC2Kkg2KfZhNin2KrYtdin2YQg2LrZitixINmF2K3Yr9iv2Kk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJBRERfREVWSUNFX1VOU0VMRUNURURfREVWSUNFIj7Yp9mE2KzZh9in2LIg2LrZitixINmF2K3Yr9ivPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iQUREX0RFVklDRV9VTlNFTEVDVEVEX0RSSVZFUiI+2YTZhSDZitiq2YUg2KrYrdiv2YrYryDYs9in2KbZgtipINiq2LTYutmK2YQg2KjYsdin2YrZhDwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkFERF9ERVZJQ0VfTk9fREVWSUNFUyI+2YTYpyDYqtmI2KzYryDYo9is2YfYstipPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iQUREX0RFVklDRV9EVVBMSUNBVEVfTkFNRSI+2KfYs9mFINin2YTYrNmH2KfYsiDZgtmK2K8g2KfZhNin2LPYqtiu2K/Yp9mFINio2KfZhNmB2LnZhDwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkFERF9ERVZJQ0VfTk9fUEVSTUlTU0lPTiI+2YTZhSDZitiq2YUg2YXZhtitINi12YTYp9it2YrYqSDYp9mE2YjYtdmI2YQg2KXZhNmJINin2YTYrNmH2KfYsjwvc3RyaW5nPgorCisgIDxzdHJpbmcgbmFtZT0iUkVNT1ZFX0RFVklDRV9QUk9NUFQiPtmH2YQg2KrYsdi62Kgg2K3ZgtmL2Kcg2YHZiiDYpdiy2KfZhNipINmH2LDYpyDYp9mE2KzZh9in2LLYnzwvc3RyaW5nPgorCisgIDxzdHJpbmcgbmFtZT0iU0VUX1NFTEVDVElPTl9OT05FIj7ZhNmFINmK2KrZhSDYqtit2K/ZitivINij2Yog2LTZitihPC9zdHJpbmc+CisKKyAgPHN0cmluZyBuYW1lPSJOQVZJR0FUSU9OX01PREVfTEFCRUxfTGlzdCI+2YLYp9im2YXYqSDYudmF2YjYr9mK2Kk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJOQVZJR0FUSU9OX01PREVfTEFCRUxfR3JpZCI+2LTYqNmD2Kkg2KvZhtin2KbZitipINin2YTYo9io2LnYp9ivPC9zdHJpbmc+CisKKyAgPHN0cmluZyBuYW1lPSJTUEVFQ0hfU1VQUE9SVF9MQUJFTF9uYXRpdmUiPtmF2K3ZhNmKPC9zdHJpbmc+CisKKyAgPHN0cmluZyBuYW1lPSJDT01NVU5JQ0FUSU9OX01FVEhPRF9MQUJFTF9CbHVldG9vdGgiPtio2YTZiNiq2YjYqzwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkNPTU1VTklDQVRJT05fTUVUSE9EX0xBQkVMX1VzYiI+VVNCPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iQ09NTVVOSUNBVElPTl9NRVRIT0RfTEFCRUxfU2VyaWFsIj7Yp9mE2YPYp9io2YQg2KfZhNiq2LPZhNiz2YTZiiBTZXJpYWw8L3N0cmluZz4KKworICA8c3RyaW5nIG5hbWU9IkxPR19MRVZFTF9MQUJFTF9kZWJ1ZyI+2KrYtdit2YrYrSDYp9mE2KPYrti32KfYoTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkxPR19MRVZFTF9MQUJFTF9pbmZvcm1hdGlvbiI+2YXYudmE2YjZhdin2Ko8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJMT0dfTEVWRUxfTEFCRUxfbm90aWNlIj7ZhdmE2KfYrdi42KfYqjwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkxPR19MRVZFTF9MQUJFTF93YXJuaW5nIj7Yqtit2LDZitix2KfYqjwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkxPR19MRVZFTF9MQUJFTF9lcnJvciI+2KPYrti32KfYoTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkxPR19MRVZFTF9MQUJFTF9jcml0aWNhbCI+2KPYrti32KfYoSDYrdix2KzYqTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkxPR19MRVZFTF9MQUJFTF9hbGVydCI+2KrZhtio2YrZh9in2Ko8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJMT0dfTEVWRUxfTEFCRUxfZW1lcmdlbmN5Ij7Yt9mI2KfYsdimPC9zdHJpbmc+CisKKyAgPHN0cmluZyBuYW1lPSJMT0dfQ0FURUdPUllfTEFCRUxfaW5wa3RzIj7Yrdiy2YUg2KfZhNil2K/Yrtin2YQ8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJMT0dfQ0FURUdPUllfTEFCRUxfb3V0cGt0cyI+2K3YstmFINin2YTYudix2LY8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJMT0dfQ0FURUdPUllfTEFCRUxfYnJsa2V5cyI+2KPYrdiv2KfYqyDZhdmB2KfYqtmK2K0g2KzZh9in2LIg2KjYsdin2YrZhDwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkxPR19DQVRFR09SWV9MQUJFTF9rYmRrZXlzIj7Yo9it2K/Yp9irINij2LLYsdin2LEg2YTZiNit2Kkg2KfZhNmF2YHYp9iq2YrYrTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkxPR19DQVRFR09SWV9MQUJFTF9jc3J0cmsiPtiq2LnZgtioINin2YTZhdik2LTYsTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkxPR19DQVRFR09SWV9MQUJFTF9jc3JydGciPtiq2YjYrNmK2Ycg2KfZhNmF2KTYtNixPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iTE9HX0NBVEVHT1JZX0xBQkVMX3VwZGF0ZSI+2KrYrdiv2YrYqyDYp9mE2KPYrdiv2KfYqzwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkxPR19DQVRFR09SWV9MQUJFTF9zcGVlY2giPtij2K3Yr9in2Ksg2KfZhNmG2LfZgjwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkxPR19DQVRFR09SWV9MQUJFTF9hc3luYyI+2KPYrdiv2KfYqyDYutmK2LEg2YXYqtiy2KfZhdmG2Kk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJMT0dfQ0FURUdPUllfTEFCRUxfc2VydmVyIj7Yo9it2K/Yp9irINin2YTYrtin2K/ZhTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkxPR19DQVRFR09SWV9MQUJFTF9naW8iPti52KfZhSBJIC8gTzwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkxPR19DQVRFR09SWV9MQUJFTF9zZXJpYWwiPtin2YTYqtiz2YTYs9mEIEkgLyBPPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iTE9HX0NBVEVHT1JZX0xBQkVMX3VzYiI+VVNCIEkvTzwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkxPR19DQVRFR09SWV9MQUJFTF9idCI+Qmx1ZXRvb3RoIEkvTzwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkxPR19DQVRFR09SWV9MQUJFTF9oaWQiPtmI2KfYrNmH2Kkg2KfZhNi52LHYtiBJL088L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJMT0dfQ0FURUdPUllfTEFCRUxfYnJsZHJ2Ij7Yo9it2K/Yp9irINiz2KfYptmC2Kkg2KjYsdin2YrZhDwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkxPR19DQVRFR09SWV9MQUJFTF9zcGtkcnYiPtij2K3Yr9in2Ksg2LPYp9im2YLYqSDYp9mE2YbYt9mCPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iTE9HX0NBVEVHT1JZX0xBQkVMX3NjcmRydiI+2KPYrdiv2KfYqyDYs9in2KbZgtipINin2YTYtNin2LTYqTwvc3RyaW5nPgorCisgIDxzdHJpbmcgbmFtZT0iQlJBSUxMRV9EUklWRVJfTEFCRUxfYXV0byI+2KfZhNin2YPYqti02KfZgSDYp9mE2KrZhNmC2KfYptmKPC9zdHJpbmc+CisKKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX2F1dG8iPtin2YTYp9iu2KrZitin2LEg2KfZhNiq2YTZgtin2KbZiiDYudmE2Ykg2KPYs9in2LMg2KfZhNmE2LrYqTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfYXIiPti52LHYqNmKICjYudin2YUpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9hcyI+2KfZhNij2LPYp9mF2YrYqTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfYXdhIj7Yp9mE2KPZiNin2K/ZitipPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9iZyI+2KfZhNio2YTYutin2LHZitipPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9iaCI+2KfZhNio2YrZh9in2LHZitipPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9ibiI+2KfZhNio2YbYutin2YTZitipPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9ibyI+2KfZhNiq2KjYqtmK2Kk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX2JyYSI+2KfZhNio2LHYp9i62YrYqTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfYnJmIj7YqtmG2LPZitmCINio2LHYp9mK2YQg2KfZhNis2KfZh9iyICjZhNi52LHYtiDZhdmE2YHYp9iqIC5icmYg2K/Yp9iu2YQg2KrYt9io2YrZgtin2Kog2KrYrdix2YrYsSDYp9mE2YXYs9iq2YbYr9in2KopPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9jcyI+2KfZhNiq2LTZitmD2YrYqTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfY3kiPtin2YTZiNmE2LLZitipPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9kYSI+2KfZhNiv2YbZhdix2YPZitipPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9kYV8xMjUyIj7Yp9mE2K/ZhtmF2LHZg9mK2KkgKNiz2YHZitmG2K8g2KvZiNi62KfYsdivINiMIDIwMDItMTEtMTgpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9kYV9sdCI+2KfZhNiv2YbZhdin2LHZg9mK2KkgKExvZ1RleHQpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9kZSI+2KfZhNij2YTZhdin2YbZitipPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9kcmEiPtiv2LHYp9mB2YrYr9in2YY8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX2VsIj7Yp9mE2YrZiNmG2KfZhtmK2Kk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX2VuIj7Yp9mE2KXZhtis2YTZitiy2YrYqTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfZW5fQ0EiPtin2YTYpdmG2KzZhNmK2LLZitipICjZg9mG2K/Ypyk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX2VuX0dCIj7Yp9mE2KXZhtis2YTZitiy2YrYqSAo2KfZhNmF2YXZhNmD2Kkg2KfZhNmF2KrYrdiv2KkpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9lbl9uYWJjYyI+2KfZhNil2YbYrNmE2YrYstmK2KkgKNij2YPZiNin2K8g2KjYsdin2YrZhCDYp9mE2K3Yp9iz2YjYqNmK2Kkg2YTYo9mF2LHZitmD2Kcg2KfZhNi02YXYp9mE2YrYqSk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX2VuX1VTIj7Yp9mE2KXZhtis2YTZitiy2YrYqSAo2KfZhNmI2YTYp9mK2KfYqiDYp9mE2YXYqtit2K/YqSk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX2VvIj7Yp9iz2KjYsdin2YbYqtmIPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9lcyI+2KfZhNij2LPYqNin2YbZitipPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9ldCI+2KfZhNil2LPYqtmI2YbZitipPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9maSI+2KfZhNmB2YbZhNmG2K/ZitipPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9mciI+2KfZhNmB2LHZhtiz2YrYqTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfZnJfMjAwNyI+2KfZhNmB2LHZhtiz2YrYqSAo2KfZhNmF2YjYrdiv2KkgMjAwNyk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX2ZyX0NBIj7Yp9mE2YHYsdmG2LPZitipICjZg9mG2K/Ypyk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX2ZyX2NiaWZzIj7Yp9mE2YHYsdmG2LPZitipICjYsdmF2LIg2KjYsdin2YrZhCDZhNmE2YPZhdio2YrZiNiq2LEg2KfZhNmB2LHZhtiz2Yog2KfZhNmC2YrYp9iz2YopPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9mcl9GUiI+2KfZhNmB2LHZhtiz2YrYqSAo2YHYsdmG2LPYpyk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX2ZyX3ZzIj7Yp9mE2YHYsdmG2LPZitipIChWaXNpb0JyYWlsbGUpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9nYSI+2KfZhNin2YrYsdmE2YbYr9mK2Kk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX2dkIj7Yp9mE2LrZitmE2YrYqTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfZ29uIj7Yp9mE2LrYp9mG2K/ZitipPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9ndSI+2KfZhNi62YjYrNin2LHYp9iq2YrYqTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfaGUiPtin2YTYudio2LHZitipPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9oaSI+2KfZhNmH2YbYr9mK2Kk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX2hyIj7Yp9mE2YPYsdmI2KfYqtmK2Kk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX2h1Ij7Yp9mE2YXYrNix2YrYqTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfaHkiPtin2YTYo9ix2YXZitmG2YrYqTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfaXMiPtin2YTYo9mK2LPZhNin2YbYr9mK2Kk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX2l0Ij7Yp9mE2KXZiti32KfZhNmK2Kk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX2toYSI+2KfZhNmD2KfYstin2K7ZitipPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9rbiI+2KfZhNmD2KfZhtin2K/Ypzwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfa29rIj7Yp9mE2YPZiNmG2YPYp9mG2YrYqTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfa3J1Ij7Yp9mE2YPZiNix2YjYrjwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfbHQiPtin2YTZhNmK2KrZiNin2YbZitipPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9sdiI+2KfZhNmE2KfYqtmB2YrYqTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfbWciPtin2YTZhdiv2LrYtNmC2LHZitipPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9taSI+2KfZhNmF2KfZiNix2Yo8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX21sIj7Yp9mE2YXYp9mE2KfZitin2YTYp9mF2YrYqTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfbW5pIj7Yp9mE2YXYp9mG2YrYqNmI2LHZijwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfbXIiPtin2YTZhdin2LHYp9ir2Yk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX210Ij7Yp9mE2YXYp9mE2LfZitipPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9tdW4iPtin2YTZhdmI2YbYr9inPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9td3IiPtin2YTZhdix2YjYp9ix2Yo8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX25lIj7Yp9mE2YbZitio2KfZhNmK2Kk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX25ldyI+2KfZhNmG2YrZiNix2Yo8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX25sIj7Yp9mE2YfZiNmE2YbYr9mK2Kk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX25sX0JFIj7Yp9mE2YfZiNmE2YbYr9mK2KkgKNio2YTYrNmK2YPYpyk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX25sX05MIj7Yp9mE2YfZiNmE2YbYr9mK2KkgKNmH2YjZhNmG2K/Ypyk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX25vIj7Yp9mE2YbYsdmI2YrYrNmK2Kk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX25vX2dlbmVyaWMiPtin2YTZhtix2YjZitis2YrYqSAo2YXYuSDYr9i52YUg2YTZhNi62KfYqiDYo9iu2LHZiSk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX25vX291cCI+2KfZhNmG2LHZiNmK2KzZitipICjYp9mE2KzZhdi52YrYqSDYp9mE2LnYp9mF2Kkg2YTYqNix2KfZitmEKTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfbndjIj7Yp9mE2YbZitmI2KfYsdmKICjZgtiv2YrZhSk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX29yIj7Yp9mE2KPZiNix2YrYpzwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfcGEiPtin2YTYqNmG2KzYp9io2Yo8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX3BpIj7Yp9mE2KjYp9mE2Yo8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX3BsIj7Yp9mE2KjZiNmE2YbYr9mK2Kk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX3B0Ij7Yp9mE2KjYsdiq2LrYp9mE2YrYqTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfcm8iPtin2YTYsdmI2YXYp9mG2YrYqTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfcnUiPtin2YTYsdmI2LPZitipPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9zYSI+2KfZhNiz2YbYs9mD2LHZitiq2YrYqTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfc2F0Ij7Yp9mE2LPZhtiq2KfZhNmK2Kk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX3NkIj7Yp9mE2LPZhtiv2YrYqTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfc2UiPtin2YTYs9in2YXZiiAo2KfZhNi02YXYp9mE2YrYqSk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX3NrIj7Yp9mE2LPZhNmI2YHYp9mD2YrYqTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfc2wiPtin2YTYs9mE2YjZgdmK2YbZitipPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9zdiI+2KfZhNiz2YjZitiv2YrYqTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfc3ZfMTk4OSI+2KfZhNiz2YjZitiv2YrYqSAo2YXYudmK2KfYsSAxOTg5KTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfc3ZfMTk5NiI+2KfZhNiz2YjZitiv2YrYqSAo2YXYudmK2KfYsSAxOTk2KTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfc3ciPtin2YTYs9mI2KfYrdmK2YTZitipPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF90YSI+2KfZhNiq2KfZhdmK2YQ8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX3RlIj7Yp9mE2KrZitmE2KzZiDwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfdHIiPtin2YTYqtix2YPZitipPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF91ayI+2KfZhNij2YjZg9ix2KfZhtmK2Kk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX3ZpIj7Yp9mE2YHZitiq2YbYp9mF2YrYqTwvc3RyaW5nPgorCisgIDxzdHJpbmcgbmFtZT0iQVRUUklCVVRFU19UQUJMRV9MQUJFTF9pbnZsZWZ0X3JpZ2h0Ij7YudmD2LMg2YTZiNmGINin2YTZhdmC2K/ZhdipINmB2Yog2KfZhNi52YXZiNivINin2YTYo9mK2LPYsSDZiNmE2YjZhiDYp9mE2K7ZhNmB2YrYqSDZgdmKINin2YTYudmF2YjYryDYp9mE2KPZitmF2YY8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJBVFRSSUJVVEVTX1RBQkxFX0xBQkVMX2xlZnRfcmlnaHQiPtmE2YjZhiDYp9mE2YXZgtiv2YXYqSDZgdmKINin2YTYudmF2YjYryDYp9mE2KPZitiz2LEg2YjZhNmI2YYg2KfZhNiu2YTZgdmK2Kkg2YHZiiDYp9mE2LnZhdmI2K8g2KfZhNij2YrZhdmGPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iQVRUUklCVVRFU19UQUJMRV9MQUJFTF91cHBlcl9sb3dlciI+2YTZiNmGINin2YTZhdmC2K/ZhdipINmB2Yog2KfZhNmF2LHYqNi5INin2YTYudmE2YjZiiDZiNmE2YjZhiDYp9mE2K7ZhNmB2YrYqSDZgdmKINin2YTZhdix2KjYuSDYp9mE2LPZgdmE2Yo8L3N0cmluZz4KKworICA8c3RyaW5nIG5hbWU9IkNPTlRSQUNUSU9OX1RBQkxFX0xBQkVMX2F1dG8iPtin2YTYp9iu2KrZitin2LEg2KfZhNiq2YTZgtin2KbZiiDYudmE2Ykg2KPYs9in2LMg2KfZhNmE2LrYqTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkNPTlRSQUNUSU9OX1RBQkxFX0xBQkVMX2FmIj7Yp9mE2KPZgdix2YrZg9in2YbZitipICjZhdiu2KrYtdixKTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkNPTlRSQUNUSU9OX1RBQkxFX0xBQkVMX2FtIj7Yp9mE2KPZhdmH2LHZitipICjYutmK2LEg2YXYrtiq2LXYsSk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJDT05UUkFDVElPTl9UQUJMRV9MQUJFTF9kZSI+2KfZhNij2YTZhdin2YbZitipPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iQ09OVFJBQ1RJT05fVEFCTEVfTEFCRUxfZGVfZzAiPtin2YTYo9mE2YXYp9mG2YrYqSAo2LrZitixINmF2K7Yqti12LEpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iQ09OVFJBQ1RJT05fVEFCTEVfTEFCRUxfZGVfZzEiPtin2YTYo9mE2YXYp9mG2YrYqSAo2KfZhNin2K7Yqti12KfYsdin2Kog2KfZhNij2LPYp9iz2YrYqSk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJDT05UUkFDVElPTl9UQUJMRV9MQUJFTF9kZV9nMiI+2KfZhNij2YTZhdin2YbZitipICjZhdiu2KrYtdixKTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkNPTlRSQUNUSU9OX1RBQkxFX0xBQkVMX2RlXzE5OTgiPtin2YTYo9mE2YXYp9mG2YrYqSAo2YXYrtiq2LXYsSAgLSDZiNmB2YLYpyDZhNmF2LnYp9mK2YrYsSAxOTk4KTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkNPTlRSQUNUSU9OX1RBQkxFX0xBQkVMX2RlXzIwMTUiPtin2YTYo9mE2YXYp9mG2YrYqSAo2YXYrtiq2LXYsSAgLSDZhdi52YrYp9ixIDIwMTUpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iQ09OVFJBQ1RJT05fVEFCTEVfTEFCRUxfZW4iPtin2YTYpdmG2KzZhNmK2LLZitipPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iQ09OVFJBQ1RJT05fVEFCTEVfTEFCRUxfZW5fVVMiPtin2YTYpdmG2KzZhNmK2LLZitipICjYp9mE2YjZhNin2YrYp9iqINin2YTZhdiq2K3Yr9ipKTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkNPTlRSQUNUSU9OX1RBQkxFX0xBQkVMX2VuX3VlYl9nMiI+2KfZhNil2YbYrNmE2YrYstmK2KkgKNin2YTZhdmI2K3Yr9iMINmF2K7Yqti12LEpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iQ09OVFJBQ1RJT05fVEFCTEVfTEFCRUxfZW5fdXNfZzIiPtin2YTYpdmG2KzZhNmK2LLZitipICjYp9mE2YjZhNin2YrYp9iqINin2YTZhdiq2K3Yr9ipINiMINmF2K7Yqti12LEpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iQ09OVFJBQ1RJT05fVEFCTEVfTEFCRUxfZXMiPtin2YTYpdiz2KjYp9mG2YrYqSAo2YXYrtiq2LXYsSk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJDT05UUkFDVElPTl9UQUJMRV9MQUJFTF9mciI+2KfZhNmB2LHZhtiz2YrYqTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkNPTlRSQUNUSU9OX1RBQkxFX0xBQkVMX2ZyX2cxIj7Yp9mE2YHYsdmG2LPZitipICjYutmK2LEg2YXYrtiq2LXYsSk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJDT05UUkFDVElPTl9UQUJMRV9MQUJFTF9mcl9nMiI+2KfZhNmB2LHZhtiz2YrYqSAo2YXYrtiq2LXYsSk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJDT05UUkFDVElPTl9UQUJMRV9MQUJFTF9oYSI+2KfZhNmH2YjYs9inICjZhdiu2KrYtdixKTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkNPTlRSQUNUSU9OX1RBQkxFX0xBQkVMX2lkIj7Yp9mE2KPZhtiv2YjZhtmK2LPZitipICjZhdiu2KrYtdixKTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkNPTlRSQUNUSU9OX1RBQkxFX0xBQkVMX2lwYSI+2KfZhNij2KjYrNiv2YrYqSDYp9mE2LXZiNiq2YrYqSDYp9mE2K/ZiNmE2YrYqTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkNPTlRSQUNUSU9OX1RBQkxFX0xBQkVMX2phIj7Yp9mE2YrYp9io2KfZhtmK2KkgKNi62YrYsSDZhdiu2KrYtdixKTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkNPTlRSQUNUSU9OX1RBQkxFX0xBQkVMX2tvIj7Yp9mE2YPZiNix2YrYqTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkNPTlRSQUNUSU9OX1RBQkxFX0xBQkVMX2tvX2cwIj7Yp9mE2YPZiNix2YrYqSAo2LrZitixINmF2K7Yqti12LEpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iQ09OVFJBQ1RJT05fVEFCTEVfTEFCRUxfa29fZzEiPtin2YTZg9mI2LHZitipICjZhdiu2KrYtdixINis2LLYptmK2KcpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iQ09OVFJBQ1RJT05fVEFCTEVfTEFCRUxfa29fZzIiPtin2YTZg9mI2LHZitipICjZhdiu2KrYtdixKTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkNPTlRSQUNUSU9OX1RBQkxFX0xBQkVMX2x0Ij7Yp9mE2YTZitiq2YjYp9mG2YrYqSAo2LrZitixINmF2K7Yqti12LEpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iQ09OVFJBQ1RJT05fVEFCTEVfTEFCRUxfbWciPtin2YTZhdiv2LrYtNmC2LHZitipICjZhdiu2KrYtdixKTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkNPTlRSQUNUSU9OX1RBQkxFX0xBQkVMX211biI+2KfZhNmF2YjZhtiv2KcgKNmF2K7Yqti12LEpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iQ09OVFJBQ1RJT05fVEFCTEVfTEFCRUxfbmwiPtin2YTZh9mI2YTZhtiv2YrYqSDZhdiu2KrYtdix2YXYqti52KfZgtivKTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkNPTlRSQUNUSU9OX1RBQkxFX0xBQkVMX255Ij7Yp9mE2LTZiti02YrZiNinICjZhdiu2KrYtdixKTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkNPTlRSQUNUSU9OX1RBQkxFX0xBQkVMX3B0Ij7Yp9mE2KjYsdiq2LrYp9mE2YrYqSAo2YXYrtiq2LXYsSk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJDT05UUkFDVElPTl9UQUJMRV9MQUJFTF9ydSI+2KfZhNix2YjYs9mK2KkgKNmF2K7Yqti12LEpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iQ09OVFJBQ1RJT05fVEFCTEVfTEFCRUxfc2kiPtin2YTYs9mG2YfYp9mE2YrYqSAo2LrZitixINmF2K7Yqti12LEpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iQ09OVFJBQ1RJT05fVEFCTEVfTEFCRUxfc3ciPtin2YTYs9mI2KfYrdmK2YTZitipICjZhdiu2KrYtdixKTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkNPTlRSQUNUSU9OX1RBQkxFX0xBQkVMX3RoIj7Yp9mE2KrYp9mK2YTYp9mG2K/ZitipICjZhdiu2KrYtdixKTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkNPTlRSQUNUSU9OX1RBQkxFX0xBQkVMX3poX1RXIj7Yp9mE2LXZitmG2YrYqSAo2KrYp9mK2YjYp9mGINiMINi62YrYsSDZhdiu2KrYtdixKTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkNPTlRSQUNUSU9OX1RBQkxFX0xBQkVMX3p1Ij7Yp9mE2LLZiNmE2YggKNmF2K7Yqti12LEpPC9zdHJpbmc+CisKKyAgPHN0cmluZyBuYW1lPSJLRVlCT0FSRF9UQUJMRV9MQUJFTF9icmFpbGxlIj7YsdmI2KfYqNi3INmE2YTZiNit2KfYqiDZhdmB2KfYqtmK2K0g2KjYsdin2YrZhDwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IktFWUJPQVJEX1RBQkxFX0xBQkVMX2Rlc2t0b3AiPtix2YjYp9io2Lcg2YTZhNmI2K3Yp9iqINin2YTZhdmB2KfYqtmK2K0g2KfZhNmD2KfZhdmE2Kk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJLRVlCT0FSRF9UQUJMRV9MQUJFTF9rZXlwYWQiPtin2LHYqtio2KfYt9in2Kog2YTZhNiq2YbZgtmEINi52KjYsSDYp9mE2YTZiNit2Kkg2KfZhNix2YLZhdmK2Kk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJLRVlCT0FSRF9UQUJMRV9MQUJFTF9sYXB0b3AiPtin2LHYqtio2KfYt9in2Kog2YTZhNmI2K3Yp9iqINin2YTZhdmB2KfYqtmK2K0g2KfZhNiq2Yog2YTZitizINio2YfYpyDZhNmI2K3YqSDYsdmC2YXZitipPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iS0VZQk9BUkRfVEFCTEVfTEFCRUxfc3VuX3R5cGU2Ij7YsdmI2KfYqNi3INmE2YTZiNit2KfYqiDZhdmB2KfYqtmK2K0gU3VuIFR5cGUgNjwvc3RyaW5nPgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9BbmRyb2lkL0dyYWRsZS9hcHAvc3JjL21haW4vcmVzL3ZhbHVlcy1jcy9zdHJpbmdzLnhtbCBiL0FuZHJvaWQvR3JhZGxlL2FwcC9zcmMvbWFpbi9yZXMvdmFsdWVzLWNzL3N0cmluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ5MDFkYTIKLS0tIC9kZXYvbnVsbAorKysgYi9BbmRyb2lkL0dyYWRsZS9hcHAvc3JjL21haW4vcmVzL3ZhbHVlcy1jcy9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDI4OCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KKworPHJlc291cmNlcz4KKyAgPHN0cmluZyBuYW1lPSJhcHBfZGVzY3JpcHRpb24iPkJSTFRUWSBwb2Rwb3J1amUgYnJhaWxsc2vDqSDFmcOhZGt5Ljwvc3RyaW5nPgorCisgIDxzdHJpbmcgbmFtZT0idXNiTW9uaXRvcl9sYWJlbCI+UMWZaXBvamVuw70gbW9uaXRvciB6YcWZw616ZW7DrSBVU0I8L3N0cmluZz4KKworICA8c3RyaW5nIG5hbWU9ImFib3V0X2xhYmVsX2FjdGl2aXR5Ij5PIGFwbGlrYWNpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iYWJvdXRfbGFiZWxfY29weXJpZ2h0Ij5Db3B5cmlnaHQ8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJhYm91dF9sYWJlbF9idWlsZFRpbWUiPsSMYXMgc2VzdGF2ZW7DrTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9ImFib3V0X2xhYmVsX3NvdXJjZVJldmlzaW9uIj5SZXZpemUgemRyb2pvdsOpaG8ga8OzZHU8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJhYm91dF9sYWJlbF9wcml2YWN5UG9saWN5Ij5aw6FzYWR5IHpwcmFjb3bDoW7DrSBvc29ibsOtY2ggw7pkYWrFrzwvc3RyaW5nPgorCisgIDxzdHJpbmcgbmFtZT0iaW5wdXRTZXJ2aWNlX25hbWUiPlNsdcW+YmEgdnN0dXB1IEJSTFRUWTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9ImlucHV0U2VydmljZV90eXBlIj5LbMOhdmVzbmljZSBicmFpbGxza8O9Y2ggemHFmcOtemVuw608L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJpbnB1dFNlcnZpY2Vfbm90X2VuYWJsZWQiPnNsdcW+YmEgdnN0dXB1IG5lcG92b2xlbmE8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJpbnB1dFNlcnZpY2Vfbm90X3NlbGVjdGVkIj5zbHXFvmJhIHZzdHVwdSBuZXZ5YnLDoW5hPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iaW5wdXRTZXJ2aWNlX25vdF9zdGFydGVkIj5zbHXFvmJhIHZzdHVwdSBuZXNwdcWhdMSbbmE8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJpbnB1dFNlcnZpY2Vfbm90X2Nvbm5lY3RlZCI+c2x1xb5iYSB2c3R1cHUgbmVwxZlpcG9qZW5hPC9zdHJpbmc+CisKKyAgPHN0cmluZyBuYW1lPSJ1cGRhdGVBcHBsaWNhdGlvbl9wcm9ibGVtX2ZhaWxlZCI+YXBsaWthY2UgbmVieWxhIGFrdHVhbGl6b3bDoW5hPC9zdHJpbmc+CisKKyAgPHN0cmluZyBuYW1lPSJwYWNrYWdlSW5zdGFsbGVyX3Byb2JsZW1fZmFpbGVkIj5iYWzDrcSNZWsgbmVieWwgbmFpbnN0YWxvdsOhbjwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9InBhY2thZ2VJbnN0YWxsZXJfcHJvYmxlbV9zYW1lIj5zaG9kbsOhIHZlcnplPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0icGFja2FnZUluc3RhbGxlcl9wcm9ibGVtX2Rvd25ncmFkZSI+aW5zdGFsYWNlIHN0YXLFocOtIHZlcnplIG5lbsOtIG1vxb5uw6E8L3N0cmluZz4KKworICA8c3RyaW5nIG5hbWU9ImZpbGVEb3dubG9hZGVyX3RpdGxlIj5Ow6FzdHJvaiBzdGFob3bDoW7DrSBCUkxUVFk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJmaWxlRG93bmxvYWRlcl9wcm9ibGVtX2ZhaWxlZCI+c291Ym9yIG5lYnlsIHN0YcW+ZW48L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJmaWxlRG93bmxvYWRlcl9zdGF0ZV9jb25uZWN0aW5nIj5wxZlpcG9qb3bDoW7DrTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9ImZpbGVEb3dubG9hZGVyX3N0YXRlX2Rvd25sb2FkaW5nIj5zdGFob3bDoW7DrTwvc3RyaW5nPgorCisgIDxzdHJpbmcgbmFtZT0ic2V0dGluZ19zdGF0ZV9vZmYiPlZ5cG51dG88L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJjaGVja2JveF9zdGF0ZV91bmNoZWNrZWQiPlZ5cG51dG88L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJjaGVja2JveF9zdGF0ZV9jaGVja2VkIj5aYXBudXRvPC9zdHJpbmc+CisKKyAgPHN0cmluZyBuYW1lPSJicmFpbGxlX2NoYW5uZWxfbmFtZSI+U3RhdiBicmFpbGxza8OpaG8gemHFmcOtemVuw608L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJicmFpbGxlX2hpbnRfdGFwIj5rbGVwbsSbdGUgcHJvIGFrY2U8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJicmFpbGxlX3N0YXRlX3JlbGVhc2VkIj5Vdm9sbsSbbm88L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJicmFpbGxlX3N0YXRlX3dhaXRpbmciPsSMZWvDoTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9ImJyYWlsbGVfc3RhdGVfY29ubmVjdGVkIj5QxZlpcG9qZW5vPC9zdHJpbmc+CisKKyAgPHN0cmluZyBuYW1lPSJHTE9CQUxfQlVUVE9OX05PVElGSUNBVElPTlMiPk96bsOhbWVuw608L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJHTE9CQUxfQlVUVE9OX1FVSUNLX1NFVFRJTkdTIj5SeWNobMOpIG5hc3RhdmVuw608L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJHTE9CQUxfQlVUVE9OX0JBQ0siPlpwxJt0PC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iR0xPQkFMX0JVVFRPTl9IT01FIj5Eb23Frzwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkdMT0JBTF9CVVRUT05fUkVDRU5UX0FQUFMiPlBvc2xlZG7DrSBhcGxpa2FjZTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkdMT0JBTF9CVVRUT05fT1ZFUlZJRVciPlBvc2xlZG7DrSBhcGxpa2FjZTwvc3RyaW5nPgorCisgIDxzdHJpbmcgbmFtZT0iR0xPQkFMX0JVVFRPTl9TV0lUQ0hfSU5QVVRfTUVUSE9EIj5QxZllcG5vdXQgbWV0b2R1IHZzdHVwdTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkdMT0JBTF9CVVRUT05fVklFV19VU0VSX0dVSURFIj5ab2JyYXppdCB1xb5pdmF0ZWxza291IHDFmcOtcnXEjWt1PC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iR0xPQkFMX0JVVFRPTl9CUk9XU0VfV0VCX1NJVEUiPk90ZXbFmcOtdCB3ZWJvdm91IHN0csOhbmt1PC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iR0xPQkFMX0JVVFRPTl9CUk9XU0VfQ09NTVVOSVRZX01FU1NBR0VTIj5Qcm9qw610IHpwcsOhdnkga29tdW5pdHk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJHTE9CQUxfQlVUVE9OX1BPU1RfQ09NTVVOSVRZX01FU1NBR0UiPk5hcHNhdCB6cHLDoXZ1IGtvbXVuaXTEmzwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkdMT0JBTF9CVVRUT05fTUFOQUdFX0NPTU1VTklUWV9NRU1CRVJTSElQIj5TcHJhdm92YXQgxI1sZW5zdHbDrSB2IGtvbXVuaXTEmzwvc3RyaW5nPgorCisgIDxzdHJpbmcgbmFtZT0iR0xPQkFMX0JVVFRPTl9VUERBVEVfQVBQTElDQVRJT04iPkFrdHVhbGl6b3ZhdCBhcGxpa2FjaTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkdMT0JBTF9DSEVDS0JPWF9ERVZFTE9QRVJfQlVJTEQiPlbDvXZvam92w6EgdmVyemU8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJHTE9CQUxfQ0hFQ0tCT1hfQUxMT1dfRE9XTkdSQURFIj5Qb3ZvbGl0IHDFmWVjaG9kIG5hIG5pxb7FocOtIHZlcnppPC9zdHJpbmc+CisKKyAgPHN0cmluZyBuYW1lPSJDSE9PU0VSX1RJVExFX0FDQ0VTU0lCSUxJVFlfQUNUSU9OUyI+QWtjZSB6cMWZw61zdHVwbsSbbsOtPC9zdHJpbmc+CisKKyAgPHN0cmluZyBuYW1lPSJTRVRUSU5HU19TQ1JFRU5fTUFJTiI+TmFzdGF2ZW7DrSBCUkxUVFk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJTRVRUSU5HU19TQ1JFRU5fR0VORVJBTCI+T2JlY27DoSBuYXN0YXZlbsOtPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iU0VUVElOR1NfU0NSRUVOX01FU1NBR0UiPk5hc3RhdmVuw60genByw6F2PC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iU0VUVElOR1NfU0NSRUVOX0RFVklDRVMiPlNwcsOhdmEgemHFmcOtemVuw608L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJTRVRUSU5HU19TQ1JFRU5fQURWQU5DRUQiPlBva3JvxI1pbMOhIG5hc3RhdmVuw608L3N0cmluZz4KKworICA8c3RyaW5nIG5hbWU9IlNFVFRJTkdTX0NIRUNLQk9YX1JFTEVBU0VfQlJBSUxMRV9ERVZJQ0UiPlV2b2xuaXQgYnJhaWxsc2vDqSB6YcWZw616ZW7DrTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlNFVFRJTkdTX0JVVFRPTl9OQVZJR0FUSU9OX01PREUiPlJlxb5pbSBuYXZpZ2FjZTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlNFVFRJTkdTX0JVVFRPTl9TUEVFQ0hfU1VQUE9SVCI+SGxhc292w6EgcG9kcG9yYTwvc3RyaW5nPgorCisgIDxzdHJpbmcgbmFtZT0iU0VUVElOR1NfQlVUVE9OX1RFWFRfVEFCTEUiPlRhYnVsa2EgcHJvIHDFmWV2b2QgdGV4dHU8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJTRVRUSU5HU19CVVRUT05fQVRUUklCVVRFU19UQUJMRSI+VGFidWxrYSBhdHJpYnV0xa88L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJTRVRUSU5HU19CVVRUT05fQ09OVFJBQ1RJT05fVEFCTEUiPlRhYnVsa2EgemtyYXRrb3Bpc3U8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJTRVRUSU5HU19CVVRUT05fS0VZQk9BUkRfVEFCTEUiPlRhYnVsa2Ega2zDoXZlc25pY2U8L3N0cmluZz4KKworICA8c3RyaW5nIG5hbWU9IlNFVFRJTkdTX0NIRUNLQk9YX1NIT1dfQUxFUlRTIj5ab2JyYXpvdmF0IHbDvXN0cmFoeTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlNFVFRJTkdTX0NIRUNLQk9YX1NIT1dfQU5OT1VOQ0VNRU5UUyI+Wm9icmF6b3ZhdCBobMOhxaFlbsOtPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iU0VUVElOR1NfQ0hFQ0tCT1hfU0hPV19OT1RJRklDQVRJT05TIj5ab2JyYXpvdmF0IG96bsOhbWVuw608L3N0cmluZz4KKworICA8c3RyaW5nIG5hbWU9IlNFVFRJTkdTX0JVVFRPTl9MT0dfTEVWRUwiPsOacm92ZcWIIHByb3Rva29sdTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlNFVFRJTkdTX0JVVFRPTl9MT0dfQ0FURUdPUklFUyI+S2F0ZWdvcmllIHByb3Rva29sdSB1ZMOhbG9zdMOtPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iU0VUVElOR1NfQ0hFQ0tCT1hfTE9HX0FDQ0VTU0lCSUxJVFlfRVZFTlRTIj5aYXpuYW1lbsOhdmF0IHVkw6Fsb3N0aSB1c25hZG7Em27DrTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlNFVFRJTkdTX0NIRUNLQk9YX0xPR19SRU5ERVJFRF9TQ1JFRU4iPlphem5hbWVuw6F2YXQgdnlrcmVzbGVuw70gb2JzYWggb2JyYXpvdmt5PC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iU0VUVElOR1NfQ0hFQ0tCT1hfTE9HX0tFWUJPQVJEX0VWRU5UUyI+WmF6bmFtZW7DoXZhdCB1ZMOhbG9zdGkga2zDoXZlc25pY2U8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJTRVRUSU5HU19DSEVDS0JPWF9MT0dfVU5IQU5ETEVEX0VWRU5UUyI+WmF6bmFtZW7DoXZhdCBuZXpwcmFjb3ZhbsOpIHVkw6Fsb3N0aTwvc3RyaW5nPgorCisgIDxzdHJpbmcgbmFtZT0iREVWSUNFU19CVVRUT05fU0VMRUNURUQiPlZ5YnJhbsOpIHphxZnDrXplbsOtPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iREVWSUNFU19CVVRUT05fQUREIj5QxZlpZGF0IHphxZnDrXplbsOtPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iREVWSUNFU19CVVRUT05fUkVNT1ZFIj5PZGVicmF0IHphxZnDrXplbsOtPC9zdHJpbmc+CisKKyAgPHN0cmluZyBuYW1lPSJTRUxFQ1RFRF9ERVZJQ0VfTk9ORSI+xb3DoWRuw6kgemHFmcOtemVuw608L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJTRUxFQ1RFRF9ERVZJQ0VfVU5TRUxFQ1RFRCI+WmHFmcOtemVuw60gbmV2eWJyw6Fubzwvc3RyaW5nPgorCisgIDxzdHJpbmcgbmFtZT0iQUREX0RFVklDRV9OQU1FIj5KbcOpbm8gemHFmcOtemVuw608L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJBRERfREVWSUNFX01FVEhPRCI+WnDFr3NvYiBrb211bmlrYWNlPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iQUREX0RFVklDRV9TRUxFQ1QiPlZ5YnJhdCB6YcWZw616ZW7DrTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkFERF9ERVZJQ0VfRFJJVkVSIj5CcmFpbGxza8O9IG92bGFkYcSNPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iQUREX0RFVklDRV9ET05FIj5Eb2tvbsSNaXQ8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJBRERfREVWSUNFX1VOU0VMRUNURURfTUVUSE9EIj5acMWvc29iIGtvbXVuaWthY2UgbmV2eWJyw6FuPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iQUREX0RFVklDRV9VTlNFTEVDVEVEX0RFVklDRSI+WmHFmcOtemVuw60gbmV2eWJyw6Fubzwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkFERF9ERVZJQ0VfVU5TRUxFQ1RFRF9EUklWRVIiPkJyYWlsbHNrw70gb3ZsYWRhxI0gbmV2eWJyw6FuPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iQUREX0RFVklDRV9OT19ERVZJQ0VTIj7FvcOhZG7DoSB6YcWZw616ZW7DrTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkFERF9ERVZJQ0VfRFVQTElDQVRFX05BTUUiPkptw6lubyB6YcWZw616ZW7DrSBzZSBqacW+IHBvdcW+w612w6E8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJBRERfREVWSUNFX05PX1BFUk1JU1NJT04iPnDFmcOtc3R1cCBrIHphxZnDrXplbsOtIG5lYnlsIHVkxJtsZW48L3N0cmluZz4KKworICA8c3RyaW5nIG5hbWU9IlJFTU9WRV9ERVZJQ0VfUFJPTVBUIj5PcHJhdmR1IHNpIHDFmWVqZXRlIG9kZWJyYXQgdG90byB6YcWZw616ZW7DrT88L3N0cmluZz4KKworICA8c3RyaW5nIG5hbWU9IlNFVF9TRUxFQ1RJT05fTk9ORSI+TmljIG5ldnlicsOhbm88L3N0cmluZz4KKworICA8c3RyaW5nIG5hbWU9Ik5BVklHQVRJT05fTU9ERV9MQUJFTF9MaXN0Ij5TdmlzbMO9IHNlem5hbTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9Ik5BVklHQVRJT05fTU9ERV9MQUJFTF9HcmlkIj5Edm91cm96bcSbcm7DoSBtxZnDrcW+a2E8L3N0cmluZz4KKworICA8c3RyaW5nIG5hbWU9IlNQRUVDSF9TVVBQT1JUX0xBQkVMX25hdGl2ZSI+TmF0aXZuw608L3N0cmluZz4KKworICA8c3RyaW5nIG5hbWU9IkNPTU1VTklDQVRJT05fTUVUSE9EX0xBQkVMX0JsdWV0b290aCI+Qmx1ZXRvb3RoPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iQ09NTVVOSUNBVElPTl9NRVRIT0RfTEFCRUxfVXNiIj5VU0I8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJDT01NVU5JQ0FUSU9OX01FVEhPRF9MQUJFTF9TZXJpYWwiPlPDqXJpb3bDoTwvc3RyaW5nPgorCisgIDxzdHJpbmcgbmFtZT0iTE9HX0xFVkVMX0xBQkVMX2RlYnVnIj5MYWTEm27DrTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkxPR19MRVZFTF9MQUJFTF9pbmZvcm1hdGlvbiI+SW5mb3JtYWNlPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iTE9HX0xFVkVMX0xBQkVMX25vdGljZSI+VXBvem9ybsSbbsOtPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iTE9HX0xFVkVMX0xBQkVMX3dhcm5pbmciPlZhcm92w6Fuw608L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJMT0dfTEVWRUxfTEFCRUxfZXJyb3IiPkNoeWJ5PC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iTE9HX0xFVkVMX0xBQkVMX2NyaXRpY2FsIj5Lcml0aWNrw6k8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJMT0dfTEVWRUxfTEFCRUxfYWxlcnQiPlbDvXN0cmFoeTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkxPR19MRVZFTF9MQUJFTF9lbWVyZ2VuY3kiPk5vdXpvdsOpPC9zdHJpbmc+CisKKyAgPHN0cmluZyBuYW1lPSJMT0dfQ0FURUdPUllfTEFCRUxfaW5wa3RzIj5Wc3R1cG7DrSBwYWtldHk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJMT0dfQ0FURUdPUllfTEFCRUxfb3V0cGt0cyI+VsO9c3R1cG7DrSBwYWtldHk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJMT0dfQ0FURUdPUllfTEFCRUxfYnJsa2V5cyI+VWTDoWxvc3RpIGtsw6F2ZXNuaWNlIGJyYWlsbHNrw6lobyB6YcWZw616ZW7DrTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkxPR19DQVRFR09SWV9MQUJFTF9rYmRrZXlzIj5VZMOhbG9zdGkga2zDoXZlc25pY2U8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJMT0dfQ0FURUdPUllfTEFCRUxfY3NydHJrIj5TbGVkb3bDoW7DrSBrdXJ6b3J1PC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iTE9HX0NBVEVHT1JZX0xBQkVMX2NzcnJ0ZyI+TmF2w6FkxJtuw60ga3Vyem9ydTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkxPR19DQVRFR09SWV9MQUJFTF91cGRhdGUiPlVkw6Fsb3N0aSBha3R1YWxpemFjw608L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJMT0dfQ0FURUdPUllfTEFCRUxfc3BlZWNoIj5VZMOhbG9zdGkgaGxhc3U8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJMT0dfQ0FURUdPUllfTEFCRUxfYXN5bmMiPkFzeW5jaHJvbm7DrSB1ZMOhbG9zdGk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJMT0dfQ0FURUdPUllfTEFCRUxfc2VydmVyIj5VZMOhbG9zdGkgc2VydmVydTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkxPR19DQVRFR09SWV9MQUJFTF9naW8iPk9iZWNuw70gVnN0dXAvVsO9c3R1cDwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkxPR19DQVRFR09SWV9MQUJFTF9zZXJpYWwiPlPDqXJpb3bDvSBWc3R1cC9Ww71zdHVwPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iTE9HX0NBVEVHT1JZX0xBQkVMX3VzYiI+VVNCIFZzdHVwL1bDvXN0dXA8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJMT0dfQ0FURUdPUllfTEFCRUxfYnQiPkJsdWV0b290aCBWc3R1cC9Ww71zdHVwPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iTE9HX0NBVEVHT1JZX0xBQkVMX2hpZCI+VnN0dXAvVsO9c3R1cCBIdW1hbiBJbnRlcmZhY2U8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJMT0dfQ0FURUdPUllfTEFCRUxfYnJsZHJ2Ij5VZMOhbG9zdGkgYnJhaWxsc2vDqWhvIG92bGFkYcSNZTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkxPR19DQVRFR09SWV9MQUJFTF9zcGtkcnYiPlVkw6Fsb3N0aSBvdmxhZGHEjWUgaGxhc3U8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJMT0dfQ0FURUdPUllfTEFCRUxfc2NyZHJ2Ij5VZMOhbG9zdGkgb3ZsYWRhxI1lIG9icmF6b3ZreTwvc3RyaW5nPgorCisgIDxzdHJpbmcgbmFtZT0iQlJBSUxMRV9EUklWRVJfTEFCRUxfYXV0byI+QXV0b2RldGVrY2U8L3N0cmluZz4KKworICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfYXV0byI+QXV0b21hdGlja8O9IHbDvWLEm3IgZGxlIG7DoXJvZG7DrWhvIHByb3N0xZllZMOtPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9hciI+QXJhYsWhdGluYSAob2JlY27DoSk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX2FzIj7DgXPDoW3FoXRpbmE8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX2F3YSI+QXZhZGjDrTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfYmciPkJ1bGhhcsWhdGluYTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfYmgiPkJpaMOhcnNrw6kgamF6eWt5PC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9ibiI+QmVuZ8OhbMWhdGluYTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfYm8iPlRpYmV0xaF0aW5hPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9icmEiPkJyYWTFvsWhdGluYTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfYnJmIj5CcmFpbGxlIFJlYWR5IEZvcm1hdCAocHJvIHpvYnJhemVuw60gc291Ym9yxa8gLmJyZiB2IGVkaXRvcnUgxI1pIHBhZ2VydSk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX2NzIj7EjGXFoXRpbmE8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX2N5Ij5WZWzFoXRpbmE8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX2RhIj5Ew6FuxaF0aW5hPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9kYV8xMjUyIj5Ew6FuxaF0aW5hIChTdmVuZCBUaG91Z2FhcmQsIDIwMDLigJMxMeKAkzE4KTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfZGFfbHQiPkTDoW7FoXRpbmEgKExvZ1RleHQpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9kZSI+TsSbbcSNaW5hPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9kcmEiPkRyw6F2aWRza8OpIGphenlreTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfZWwiPsWYZcSNdGluYTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfZW4iPkFuZ2xpxI10aW5hPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9lbl9DQSI+QW5nbGnEjXRpbmEgKEthbmFkYSk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX2VuX0dCIj5BbmdsacSNdGluYSAoU3BvamVuw6kgS3LDoWxvdnN0dsOtKTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfZW5fbmFiY2MiPkFuZ2xpxI10aW5hIChOb3J0aCBBbWVyaWNhbiBCcmFpbGxlIENvbXB1dGVyIENvZGUpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9lbl9VUyI+QW5nbGnEjXRpbmEgKFNwb2plbsOpIHN0w6F0eSk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX2VvIj5Fc3BlcmFudG88L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX2VzIj7FoHBhbsSbbMWhdGluYTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfZXQiPkVzdG9uxaF0aW5hPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9maSI+RmluxaF0aW5hPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9mciI+RnJhbmNvdXrFoXRpbmE8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX2ZyXzIwMDciPkZyYW5jb3V6xaF0aW5hICh1bmlmaWVkIDIwMDcpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9mcl9DQSI+RnJhbmNvdXrFoXRpbmEgKEthbmFkYSk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX2ZyX2NiaWZzIj5GcmFuY291esWhdGluYSAoQ29kZSBCcmFpbGxlIEluZm9ybWF0aXF1ZSBGcmFuw6dhaXMgU3RhbmRhcmQpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9mcl9GUiI+RnJhbmNvdXrFoXRpbmEgKEZyYW5jaWUpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9mcl92cyI+RnJhbmNvdXrFoXRpbmEgKFZpc2lvQnJhaWxsZSk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX2dhIj5JcsWhdGluYTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfZ2QiPlNrb3Rza8OhIGdhZWzFoXRpbmE8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX2dvbiI+R8OzbmTDrTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfZ3UiPkd1ZMW+YXLDoXTFoXRpbmE8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX2hlIj5IZWJyZWrFoXRpbmE8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX2hpIj5IaW5kxaF0aW5hPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9ociI+Q2hvcnZhdMWhdGluYTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfaHUiPk1hxI9hcsWhdGluYTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfaHkiPkFybcOpbsWhdGluYTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfaXMiPklzbGFuZMWhdGluYTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfaXQiPkl0YWzFoXRpbmE8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX2toYSI+S2hhc2k8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX2tuIj5LYW5uYWTFoXRpbmE8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX2tvayI+S29ua2FuxaF0aW5hPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9rcnUiPkt1cnVraDwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfbHQiPkxpdGV2xaF0aW5hPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9sdiI+TG90ecWhdGluYTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfbWciPk1hbGdhxaF0aW5hPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9taSI+TWFvcsWhdGluYTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfbWwiPk1hbGFqw6FsYW3FoXRpbmE8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX21uaSI+TWFuaXB1csWhdGluYTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfbXIiPk1hcsOhdGjFoXRpbmE8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX210Ij5NYWx0xaF0aW5hPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9tdW4iPk11bmRza8OpIGphenlreTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfbXdyIj5Nw6FydsOhcsOtPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9uZSI+TmVww6FsxaF0aW5hPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9uZXciPk5ldmFyxaF0aW5hPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9ubCI+Tml6b3plbcWhdGluYTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfbmxfQkUiPk5pem96ZW3FoXRpbmEgKEJlbGdpZSk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX25sX05MIj5OaXpvemVtxaF0aW5hIChOaXpvemVtw60pPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9ubyI+Tm9yxaF0aW5hPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9ub19nZW5lcmljIj5Ob3LFoXRpbmEgKHMgcG9kcG9yb3Ugb3N0YXRuw61jaCBqYXp5a8WvKTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfbm9fb3VwIj5Ob3LFoXRpbmEgKE9mZmVudGxpZyB1dHZhbGcgZm9yIHB1bmt0c2tyaWZ0KTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfbndjIj5LbGFzaWNrw6EgbmV2YXLFoXRpbmEgKHN0YXLDoSk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX29yIj5VcmlqxaF0aW5hPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9wYSI+UGHFiGTFvsOhYsWhdGluYTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfcGkiPlDDoWxpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9wbCI+UG9sxaF0aW5hPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9wdCI+UG9ydHVnYWzFoXRpbmE8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX3JvIj5SdW11bsWhdGluYTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfcnUiPlJ1xaF0aW5hPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9zYSI+U2Fuc2tydDwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfc2F0Ij5TYW50w6FsxaF0aW5hPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9zZCI+U2luZGjFoXRpbmE8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX3NlIj5Tw6FtxaF0aW5hIChzZXZlcm7DrSk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX3NrIj5TbG92ZW7FoXRpbmE8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX3NsIj5TbG92aW7FoXRpbmE8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX3N2Ij7FoHbDqWTFoXRpbmE8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX3N2XzE5ODkiPsWgdsOpZMWhdGluYSAoc3RhbmRhcmQgMTk4OSk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX3N2XzE5OTYiPsWgdsOpZMWhdGluYSAoc3RhbmRhcmQgMTk5Nik8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX3N3Ij5TdmFoaWzFoXRpbmE8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX3RhIj5UYW1pbMWhdGluYTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfdGUiPlRlbHVnxaF0aW5hPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF90ciI+VHVyZcSNdGluYTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfdWsiPlVrcmFqaW7FoXRpbmE8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX3ZpIj5WaWV0bmFtxaF0aW5hPC9zdHJpbmc+CisKKyAgPHN0cmluZyBuYW1lPSJBVFRSSUJVVEVTX1RBQkxFX0xBQkVMX2ludmxlZnRfcmlnaHQiPkludmVydG92YW7DoSAoYmFydmEgcG9wxZllZMOtIHYgbGV2w6ltIHNsb3VwY2kgYSBiYXJ2YSBwb3phZMOtIHYgcHJhdsOpbSBzbG91cGNpKTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkFUVFJJQlVURVNfVEFCTEVfTEFCRUxfbGVmdF9yaWdodCI+QmFydmEgcG9wxZllZMOtIHYgbGV2w6ltIHNsb3VwY2kgYSBiYXJ2YSBwb3phZMOtIHYgcHJhdsOpbSBzbG91cGNpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iQVRUUklCVVRFU19UQUJMRV9MQUJFTF91cHBlcl9sb3dlciI+QmFydmEgcG9wxZllZMOtIHYgaG9ybsOtbSDEjXR5xZlib2R1IGEgYmFydmEgcG96YWTDrSB2IGRvbG7DrW0gxI10ecWZYm9kdTwvc3RyaW5nPgorCisgIDxzdHJpbmcgbmFtZT0iQ09OVFJBQ1RJT05fVEFCTEVfTEFCRUxfYXV0byI+QXV0b21hdGlja8O9IHbDvWLEm3IgZGxlIG7DoXJvZG7DrWhvIHByb3N0xZllZMOtPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iQ09OVFJBQ1RJT05fVEFCTEVfTEFCRUxfYWYiPkFmcmlrw6FuxaF0aW5hICh6a3JhdGtvcGlzKTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkNPTlRSQUNUSU9OX1RBQkxFX0xBQkVMX2FtIj5BbWhhcsWhdGluYSAocGxub3Bpcyk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJDT05UUkFDVElPTl9UQUJMRV9MQUJFTF9kZSI+TsSbbcSNaW5hPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iQ09OVFJBQ1RJT05fVEFCTEVfTEFCRUxfZGVfZzAiPk7Em23EjWluYSAocGxub3Bpcyk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJDT05UUkFDVElPTl9UQUJMRV9MQUJFTF9kZV9nMSI+TsSbbcSNaW5hICh6w6FrbGFkbsOtIHprcmF0a29waXMpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iQ09OVFJBQ1RJT05fVEFCTEVfTEFCRUxfZGVfZzIiPk7Em23EjWluYSAoemtyYXRrb3Bpcyk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJDT05UUkFDVElPTl9UQUJMRV9MQUJFTF9kZV8xOTk4Ij5OxJttxI1pbmEgKHprcmF0a29waXMgLSBzdGFuZGFydCAxOTk4KTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkNPTlRSQUNUSU9OX1RBQkxFX0xBQkVMX2RlXzIwMTUiPk7Em23EjWluYSAoemtyYXRrb3BpcyAtIHN0YW5kYXJ0IDIwMTUpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iQ09OVFJBQ1RJT05fVEFCTEVfTEFCRUxfZW4iPkFuZ2xpxI10aW5hPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iQ09OVFJBQ1RJT05fVEFCTEVfTEFCRUxfZW5fVVMiPkFuZ2xpxI10aW5hIChTcG9qZW7DqSBzdMOhdHkpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iQ09OVFJBQ1RJT05fVEFCTEVfTEFCRUxfZW5fdWViX2cxIj5BbmdsacSNdGluYSAoVW5pZmllZCwgcGxub3Bpcyk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJDT05UUkFDVElPTl9UQUJMRV9MQUJFTF9lbl91ZWJfZzIiPkFuZ2xpxI10aW5hIChVbmlmaWVkIEVuZ2xpc2ggQnJhaWxsZSwgZ3JhZGUgMik8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJDT05UUkFDVElPTl9UQUJMRV9MQUJFTF9lbl91c19nMiI+QW5nbGnEjXRpbmEgKFVTLCBncmFkZSAyKTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkNPTlRSQUNUSU9OX1RBQkxFX0xBQkVMX2VzIj7FoHBhbsSbbMWhdGluYSAoZ3JhZGUgMik8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJDT05UUkFDVElPTl9UQUJMRV9MQUJFTF9mciI+RnJhbmNvdXrFoXRpbmE8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJDT05UUkFDVElPTl9UQUJMRV9MQUJFTF9mcl9nMSI+RnJhbmNvdXrFoXRpbmEgKHBsbm9waXMpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iQ09OVFJBQ1RJT05fVEFCTEVfTEFCRUxfZnJfZzIiPkZyYW5jb3V6xaF0aW5hICh6a3JhdGtvcGlzKTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkNPTlRSQUNUSU9OX1RBQkxFX0xBQkVMX2hhIj5IYXXFoXRpbmEgKHprcmF0a29waXMpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iQ09OVFJBQ1RJT05fVEFCTEVfTEFCRUxfaWQiPkluZG9uw6nFoXRpbmEgKHprcmF0a29waXMpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iQ09OVFJBQ1RJT05fVEFCTEVfTEFCRUxfaXBhIj5JbnRlcm5hdGlvbmFsIFBob25ldGljIEFscGhhYmV0PC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iQ09OVFJBQ1RJT05fVEFCTEVfTEFCRUxfamEiPkphcG9uxaF0aW5hIChwbG5vcGlzKTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkNPTlRSQUNUSU9OX1RBQkxFX0xBQkVMX2tvIj5Lb3JlasWhdGluYTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkNPTlRSQUNUSU9OX1RBQkxFX0xBQkVMX2tvX2cwIj5Lb3JlasWhdGluYSAocGxub3Bpcyk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJDT05UUkFDVElPTl9UQUJMRV9MQUJFTF9rb19nMSI+S29yZWrFoXRpbmEgKGdyYWRlIDEpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iQ09OVFJBQ1RJT05fVEFCTEVfTEFCRUxfa29fZzIiPktvcmVqxaF0aW5hIChncmFkZSAyKTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkNPTlRSQUNUSU9OX1RBQkxFX0xBQkVMX2x0Ij5MaXRldsWhdGluYSAocGxub3Bpcyk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJDT05UUkFDVElPTl9UQUJMRV9MQUJFTF9tZyI+TWFsZ2HFoXRpbmEgKHprcmF0a29waXMpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iQ09OVFJBQ1RJT05fVEFCTEVfTEFCRUxfbXVuIj5NdW5kc2vDqSBqYXp5a3kgKHprcmF0a29waXMpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iQ09OVFJBQ1RJT05fVEFCTEVfTEFCRUxfbmwiPk5pem96ZW3FoXRpbmEgKHprcmF0a29waXMpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iQ09OVFJBQ1RJT05fVEFCTEVfTEFCRUxfbnkiPsSMacSNZXZhICh6a3JhdGtvcGlzKTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkNPTlRSQUNUSU9OX1RBQkxFX0xBQkVMX3B0Ij5Qb3J0dWdhbMWhdGluYSAoZ3JhZGUgMik8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJDT05UUkFDVElPTl9UQUJMRV9MQUJFTF9ydSI+UnXFoXRpbmEgKHprcmF0a29waXMpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iQ09OVFJBQ1RJT05fVEFCTEVfTEFCRUxfc2kiPlNpbmhhbMWhdGluYSAocGxub3Bpcyk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJDT05UUkFDVElPTl9UQUJMRV9MQUJFTF9zdyI+U3ZhaGlsxaF0aW5hICh6a3JhdGtvcGlzKTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkNPTlRSQUNUSU9OX1RBQkxFX0xBQkVMX3RoIj5UaGFqxaF0aW5hICh6a3JhdGtvcGlzKTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkNPTlRSQUNUSU9OX1RBQkxFX0xBQkVMX3poX1RXIj7EjMOtbsWhdGluYSAoVGNoYWotd2FuLCBwbG5vcGlzKTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkNPTlRSQUNUSU9OX1RBQkxFX0xBQkVMX3p1Ij5adWzFoXRpbmEgKHprcmF0a29waXMpPC9zdHJpbmc+CisKKyAgPHN0cmluZyBuYW1lPSJLRVlCT0FSRF9UQUJMRV9MQUJFTF9icmFpbGxlIj5QcmF2aWRsYSBwcm8gYnJhaWxsc2vDqSBrbMOhdmVzbmljZTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IktFWUJPQVJEX1RBQkxFX0xBQkVMX2Rlc2t0b3AiPlByYXZpZGxhIHBybyBzdGFuZGFyZG7DrSBrbMOhdmVzbmljZTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IktFWUJPQVJEX1RBQkxFX0xBQkVMX2tleXBhZCI+UHJhdmlkbGEgcHJvIGtsw6F2ZXNuaWNlIHRlbGVmb27Frzwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IktFWUJPQVJEX1RBQkxFX0xBQkVMX2xhcHRvcCI+UHJhdmlkbGEgcHJvIGtsw6F2ZXNuaWNlIG5vdGVib29rxa88L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJLRVlCT0FSRF9UQUJMRV9MQUJFTF9zdW5fdHlwZTYiPlByYXZpZGxhIHBybyBrbMOhdmVzbmljZSB0eXB1IHN1biB0eXBlNjwvc3RyaW5nPgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9BbmRyb2lkL0dyYWRsZS9hcHAvc3JjL21haW4vcmVzL3ZhbHVlcy1kYS9zdHJpbmdzLnhtbCBiL0FuZHJvaWQvR3JhZGxlL2FwcC9zcmMvbWFpbi9yZXMvdmFsdWVzLWRhL3N0cmluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg4YzVlMDUKLS0tIC9kZXYvbnVsbAorKysgYi9BbmRyb2lkL0dyYWRsZS9hcHAvc3JjL21haW4vcmVzL3ZhbHVlcy1kYS9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDI4OCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KKworPHJlc291cmNlcz4KKyAgPHN0cmluZyBuYW1lPSJhcHBfZGVzY3JpcHRpb24iPkJSTFRUWSB1bmRlcnN0w7h0dGVyIGJyYWlsbGUgZW5oZWRlci48L3N0cmluZz4KKworICA8c3RyaW5nIG5hbWU9InVzYk1vbml0b3JfbGFiZWwiPlVTQiBFbmhlZCBUaWxzbHV0dGV0IFNrw6ZybTwvc3RyaW5nPgorCisgIDxzdHJpbmcgbmFtZT0iYWJvdXRfbGFiZWxfYWN0aXZpdHkiPk9tIEFwcGxpa2F0aW9uZW48L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJhYm91dF9sYWJlbF9jb3B5cmlnaHQiPkNvcHlyaWdodDwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9ImFib3V0X2xhYmVsX2J1aWxkVGltZSI+S29tcGlsZXJpbmdzdGlkc3B1bmt0PC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iYWJvdXRfbGFiZWxfc291cmNlUmV2aXNpb24iPktpbGRla29kZSBSZXZpc2lvbjwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9ImFib3V0X2xhYmVsX3ByaXZhY3lQb2xpY3kiPlByaXZhdGxpdnNwb2xpdGlrPC9zdHJpbmc+CisKKyAgPHN0cmluZyBuYW1lPSJpbnB1dFNlcnZpY2VfbmFtZSI+QlJMVFRZIElucHV0IFNlcnZpY2U8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJpbnB1dFNlcnZpY2VfdHlwZSI+VGFzdGF0dXJlciBww6UgQnJhaWxsZSBlbmhlZGVyPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iaW5wdXRTZXJ2aWNlX25vdF9lbmFibGVkIj5pbnB1dCBzZXJ2aWNlIGlra2UgdGlsZ8OmbmdlbGlnPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iaW5wdXRTZXJ2aWNlX25vdF9zZWxlY3RlZCI+aW5wdXQgc2VydmljZSBpa2tlIHZhbGd0PC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iaW5wdXRTZXJ2aWNlX25vdF9zdGFydGVkIj5pbnB1dCBzZXJ2aWNlIGlra2Ugc3RhcnRldDwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9ImlucHV0U2VydmljZV9ub3RfY29ubmVjdGVkIj5pbnB1dCBzZXJ2aWNlIGlra2UgZm9yYnVuZGV0PC9zdHJpbmc+CisKKyAgPHN0cmluZyBuYW1lPSJ1cGRhdGVBcHBsaWNhdGlvbl9wcm9ibGVtX2ZhaWxlZCI+YXBwbGlrYXRpb24gYmxldiBpa2tlIG9wZGF0ZXJldDwvc3RyaW5nPgorCisgIDxzdHJpbmcgbmFtZT0icGFja2FnZUluc3RhbGxlcl9wcm9ibGVtX2ZhaWxlZCI+cGFra2UgaWtrZSBpbnN0YWxsZXQ8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJwYWNrYWdlSW5zdGFsbGVyX3Byb2JsZW1fc2FtZSI+c2FtbWUgdmVyc2lvbjwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9InBhY2thZ2VJbnN0YWxsZXJfcHJvYmxlbV9kb3duZ3JhZGUiPm5lZGdyYWRlcmluZyBpa2tlIHRpbGxhZHQ8L3N0cmluZz4KKworICA8c3RyaW5nIG5hbWU9ImZpbGVEb3dubG9hZGVyX3RpdGxlIj5GaWwgRG93bmxvYWRlcjwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9ImZpbGVEb3dubG9hZGVyX3Byb2JsZW1fZmFpbGVkIj5maWwgaWtrZSBoZW50ZXQ8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJmaWxlRG93bmxvYWRlcl9zdGF0ZV9jb25uZWN0aW5nIj5mb3JiaW5kZXI8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJmaWxlRG93bmxvYWRlcl9zdGF0ZV9kb3dubG9hZGluZyI+aGVudGVyPC9zdHJpbmc+CisKKyAgPHN0cmluZyBuYW1lPSJzZXR0aW5nX3N0YXRlX29mZiI+RnJhPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iY2hlY2tib3hfc3RhdGVfdW5jaGVja2VkIj5OZWo8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJjaGVja2JveF9zdGF0ZV9jaGVja2VkIj5KYTwvc3RyaW5nPgorCisgIDxzdHJpbmcgbmFtZT0iYnJhaWxsZV9jaGFubmVsX25hbWUiPkJyYWlsbGUgRW5oZWQgU3RhdHVzPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iYnJhaWxsZV9oaW50X3RhcCI+dHJ5ayBmb3IgaGFuZGxpbmdlcjwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9ImJyYWlsbGVfc3RhdGVfcmVsZWFzZWQiPkZyaWdpdmV0PC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iYnJhaWxsZV9zdGF0ZV93YWl0aW5nIj5WZW50ZXI8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJicmFpbGxlX3N0YXRlX2Nvbm5lY3RlZCI+Rm9yYmluZGV0PC9zdHJpbmc+CisKKyAgPHN0cmluZyBuYW1lPSJHTE9CQUxfQlVUVE9OX05PVElGSUNBVElPTlMiPk5vdGlmaWthdGlvbmVyPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iR0xPQkFMX0JVVFRPTl9RVUlDS19TRVRUSU5HUyI+SHVydGlnIEluZHN0aWxsaW5nZXI8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJHTE9CQUxfQlVUVE9OX0JBQ0siPlRpbGJhZ2U8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJHTE9CQUxfQlVUVE9OX0hPTUUiPkhqZW08L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJHTE9CQUxfQlVUVE9OX1JFQ0VOVF9BUFBTIj5TZW5lc3RlIEFwcHM8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJHTE9CQUxfQlVUVE9OX09WRVJWSUVXIj5PdmVyYmxpazwvc3RyaW5nPgorCisgIDxzdHJpbmcgbmFtZT0iR0xPQkFMX0JVVFRPTl9TV0lUQ0hfSU5QVVRfTUVUSE9EIj5Ta2lmdCBJbnB1dCBNZXRvZGU8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJHTE9CQUxfQlVUVE9OX1ZJRVdfVVNFUl9HVUlERSI+VmlzIEJydWdlciBWZWpsZWRuaW5nPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iR0xPQkFMX0JVVFRPTl9CUk9XU0VfV0VCX1NJVEUiPkzDpnMgV2Vic2lkZTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkdMT0JBTF9CVVRUT05fQlJPV1NFX0NPTU1VTklUWV9NRVNTQUdFUyI+TMOmcyBGw6ZsbGVzc2thYnMgQmVza2VkZXI8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJHTE9CQUxfQlVUVE9OX1BPU1RfQ09NTVVOSVRZX01FU1NBR0UiPlNrcml2IEbDpmxsZXNza2FicyBCZXNrZWQ8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJHTE9CQUxfQlVUVE9OX01BTkFHRV9DT01NVU5JVFlfTUVNQkVSU0hJUCI+w4ZuZHJlIEbDpmxsZXNza2FicyBJbmRzdGlsbGluZ2VyPC9zdHJpbmc+CisKKyAgPHN0cmluZyBuYW1lPSJHTE9CQUxfQlVUVE9OX1VQREFURV9BUFBMSUNBVElPTiI+VXBkYXRlciBBcHBsaWthdGlvbjwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkdMT0JBTF9DSEVDS0JPWF9ERVZFTE9QRVJfQlVJTEQiPlVkdmlrbGVyIHZlcnNpb248L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJHTE9CQUxfQ0hFQ0tCT1hfQUxMT1dfRE9XTkdSQURFIj5UaWxsYWQgbmVkZ3JhZGVyaW5nPC9zdHJpbmc+CisKKyAgPHN0cmluZyBuYW1lPSJDSE9PU0VSX1RJVExFX0FDQ0VTU0lCSUxJVFlfQUNUSU9OUyI+VGlsZ8OmbmdlbGlnaGVkc2hhbmRsaW5nZXI8L3N0cmluZz4KKworICA8c3RyaW5nIG5hbWU9IlNFVFRJTkdTX1NDUkVFTl9NQUlOIj5CUkxUVFkgSW5kc3RpbGxpbmdlcjwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlNFVFRJTkdTX1NDUkVFTl9HRU5FUkFMIj5HZW5lcmFsbGUgaW5kc3RpbGxpbmdlcjwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlNFVFRJTkdTX1NDUkVFTl9NRVNTQUdFIj5CZXNrZWQgSW5kc3RpbGxpbmdlcjwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlNFVFRJTkdTX1NDUkVFTl9ERVZJQ0VTIj5Iw6VuZHRlciBlbmhlZGVyPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iU0VUVElOR1NfU0NSRUVOX0FEVkFOQ0VEIj5BZHZhbmNlcmVkZSBpbmRzdGlsbGluZ2VyPC9zdHJpbmc+CisKKyAgPHN0cmluZyBuYW1lPSJTRVRUSU5HU19DSEVDS0JPWF9SRUxFQVNFX0JSQUlMTEVfREVWSUNFIj5VZGdhdmUgQnJhaWxsZSBFbmhlZDwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlNFVFRJTkdTX0JVVFRPTl9OQVZJR0FUSU9OX01PREUiPk5hdmlnYXRpb25zdGlsc3RhbmQ8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJTRVRUSU5HU19CVVRUT05fU1BFRUNIX1NVUFBPUlQiPlRhbGV1bmRlcnN0w7h0dGVsc2U8L3N0cmluZz4KKworICA8c3RyaW5nIG5hbWU9IlNFVFRJTkdTX0JVVFRPTl9URVhUX1RBQkxFIj5UZWtzdHRhYmVsPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iU0VUVElOR1NfQlVUVE9OX0FUVFJJQlVURVNfVEFCTEUiPkF0dHJpYnV0dGFiZWw8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJTRVRUSU5HU19CVVRUT05fQ09OVFJBQ1RJT05fVEFCTEUiPkZvcmtvcnRlbHNlc3RhYmVsPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iU0VUVElOR1NfQlVUVE9OX0tFWUJPQVJEX1RBQkxFIj5UYXN0YXR1cnRhYmVsPC9zdHJpbmc+CisKKyAgPHN0cmluZyBuYW1lPSJTRVRUSU5HU19DSEVDS0JPWF9TSE9XX0FMRVJUUyI+VmlzIEFsYXJtZXI8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJTRVRUSU5HU19DSEVDS0JPWF9TSE9XX0FOTk9VTkNFTUVOVFMiPlZpcyBNZWRkZWxlbHNlcjwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlNFVFRJTkdTX0NIRUNLQk9YX1NIT1dfTk9USUZJQ0FUSU9OUyI+VmlzIE5vdG9maWthdGlvbmVyPC9zdHJpbmc+CisKKyAgPHN0cmluZyBuYW1lPSJTRVRUSU5HU19CVVRUT05fTE9HX0xFVkVMIj5Mb2cgTml2ZWF1PC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iU0VUVElOR1NfQlVUVE9OX0xPR19DQVRFR09SSUVTIj5Mb2cgS2F0ZWdvcmk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJTRVRUSU5HU19DSEVDS0JPWF9MT0dfQUNDRVNTSUJJTElUWV9FVkVOVFMiPkxvZyBUaWxnw6ZuZ2VsaWdoZWRzaMOmbmRlbHNlcjwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlNFVFRJTkdTX0NIRUNLQk9YX0xPR19SRU5ERVJFRF9TQ1JFRU4iPkxvZyBGcmVta2FsZHQgc2vDpnJtPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iU0VUVElOR1NfQ0hFQ0tCT1hfTE9HX0tFWUJPQVJEX0VWRU5UUyI+TG9nIFRhc3RhdHVyaMOmbmRlbHNlcjwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlNFVFRJTkdTX0NIRUNLQk9YX0xPR19VTkhBTkRMRURfRVZFTlRTIj5Mb2cgSWtrZS1ow6VuZHRlcmVuZGUgSMOmbmRlbHNlcjwvc3RyaW5nPgorCisgIDxzdHJpbmcgbmFtZT0iREVWSUNFU19CVVRUT05fU0VMRUNURUQiPlZhbGd0ZSBlbmhlZDwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkRFVklDRVNfQlVUVE9OX0FERCI+VGlsZsO4aiBlbmhlZDwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkRFVklDRVNfQlVUVE9OX1JFTU9WRSI+Rmplcm4gZW5oZWQ8L3N0cmluZz4KKworICA8c3RyaW5nIG5hbWU9IlNFTEVDVEVEX0RFVklDRV9OT05FIj5JbmdlbiBlbmhlZGVyPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iU0VMRUNURURfREVWSUNFX1VOU0VMRUNURUQiPkVuaGVkIGlra2UgdmFsZ3Q8L3N0cmluZz4KKworICA8c3RyaW5nIG5hbWU9IkFERF9ERVZJQ0VfTkFNRSI+RW5oZWRzbmF2bjwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkFERF9ERVZJQ0VfTUVUSE9EIj5Lb21tdW5pa2F0aW9uc21ldG9kZTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkFERF9ERVZJQ0VfU0VMRUNUIj5Ww6ZsZyBlbmhlZDwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkFERF9ERVZJQ0VfRFJJVkVSIj5CcmFpbGxlIGRyaXZlcjwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkFERF9ERVZJQ0VfRE9ORSI+VWRmw7hydDwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkFERF9ERVZJQ0VfVU5TRUxFQ1RFRF9NRVRIT0QiPmtvbW11bmlrYXRpb25zbWV0b2RlIGlra2UgdmFsZ3Q8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJBRERfREVWSUNFX1VOU0VMRUNURURfREVWSUNFIj5lbmhlZCBpa2tlIHZhbGd0PC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iQUREX0RFVklDRV9VTlNFTEVDVEVEX0RSSVZFUiI+YnJhaWxsZSBkcml2ZXIgaWtrZSB2YWxndDwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkFERF9ERVZJQ0VfTk9fREVWSUNFUyI+aW5nZW4gZW5oZWRlcjwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkFERF9ERVZJQ0VfRFVQTElDQVRFX05BTUUiPmVuaGVkc25hdm4gYWxsZXJlZGUgaSBicnVnPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iQUREX0RFVklDRV9OT19QRVJNSVNTSU9OIj5pa2tlIGdpdmV0IGFkZ2FuZyB0aWwgZW5oZWRlbjwvc3RyaW5nPgorCisgIDxzdHJpbmcgbmFtZT0iUkVNT1ZFX0RFVklDRV9QUk9NUFQiPlZpbCBkdSB2aXJrZWxpZyBnZXJuZSBmamVybmUgZGVubmUgZW5oZWQgPzwvc3RyaW5nPgorCisgIDxzdHJpbmcgbmFtZT0iU0VUX1NFTEVDVElPTl9OT05FIj5pbmdlbiB2YWxndDwvc3RyaW5nPgorCisgIDxzdHJpbmcgbmFtZT0iTkFWSUdBVElPTl9NT0RFX0xBQkVMX0xpc3QiPlZlcnRpa2FsIGxpc3RlPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iTkFWSUdBVElPTl9NT0RFX0xBQkVMX0dyaWQiPlRvIGRpbWVuc2lvbmVsdCBnaXR0ZXI8L3N0cmluZz4KKworICA8c3RyaW5nIG5hbWU9IlNQRUVDSF9TVVBQT1JUX0xBQkVMX25hdGl2ZSI+TWVkZsO4ZHQ8L3N0cmluZz4KKworICA8c3RyaW5nIG5hbWU9IkNPTU1VTklDQVRJT05fTUVUSE9EX0xBQkVMX0JsdWV0b290aCI+Qmx1ZXRvb3RoPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iQ09NTVVOSUNBVElPTl9NRVRIT0RfTEFCRUxfVXNiIj5VU0I8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJDT01NVU5JQ0FUSU9OX01FVEhPRF9MQUJFTF9TZXJpYWwiPlNlcmllbDwvc3RyaW5nPgorCisgIDxzdHJpbmcgbmFtZT0iTE9HX0xFVkVMX0xBQkVMX2RlYnVnIj5BZmx1czwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkxPR19MRVZFTF9MQUJFTF9pbmZvcm1hdGlvbiI+SW5mb3JtYXRpb248L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJMT0dfTEVWRUxfTEFCRUxfbm90aWNlIj5PcG3DpnJrc29taGVkPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iTE9HX0xFVkVMX0xBQkVMX3dhcm5pbmciPkFkdmFyc2VsPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iTE9HX0xFVkVMX0xBQkVMX2Vycm9yIj5GZWpsPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iTE9HX0xFVkVMX0xBQkVMX2NyaXRpY2FsIj5LaXJ0aXNrPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iTE9HX0xFVkVMX0xBQkVMX2FsZXJ0Ij5BbGFybTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkxPR19MRVZFTF9MQUJFTF9lbWVyZ2VuY3kiPlVoZWxkPC9zdHJpbmc+CisKKyAgPHN0cmluZyBuYW1lPSJMT0dfQ0FURUdPUllfTEFCRUxfaW5wa3RzIj5JbnB1dCBwYWtrZXI8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJMT0dfQ0FURUdPUllfTEFCRUxfb3V0cGt0cyI+T3V0cHV0IHBha2tlcjwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkxPR19DQVRFR09SWV9MQUJFTF9icmxrZXlzIj5CcmFpbGxlIGVuaGVkIG7DuGdsZWjDpm5kZWxzZXI8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJMT0dfQ0FURUdPUllfTEFCRUxfa2Jka2V5cyI+VGFzdGF0dXIgbsO4Z2xlaMOmbmRlbHNlcjwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkxPR19DQVRFR09SWV9MQUJFTF9jc3J0cmsiPk1hcmvDuHIgZsO4bGduaW5nPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iTE9HX0NBVEVHT1JZX0xBQkVMX2NzcnJ0ZyI+TWFya8O4ciBydXRlcGxhbmzDpmduaW5nPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iTE9HX0NBVEVHT1JZX0xBQkVMX3VwZGF0ZSI+T3BkYXRlcmluZ3Now6ZuZGVsc2VyPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iTE9HX0NBVEVHT1JZX0xBQkVMX3NwZWVjaCI+VGFsZWjDpm5kZWxzZXI8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJMT0dfQ0FURUdPUllfTEFCRUxfYXN5bmMiPkFzeW5rcm9uZSBow6ZuZGVsc2VyPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iTE9HX0NBVEVHT1JZX0xBQkVMX3NlcnZlciI+U2VydmVyIGjDpm5kZWxzZXI8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJMT0dfQ0FURUdPUllfTEFCRUxfZ2lvIj5HZW5lcmlzayBJL088L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJMT0dfQ0FURUdPUllfTEFCRUxfc2VyaWFsIj5TZXJpZWx0IEkvTzwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkxPR19DQVRFR09SWV9MQUJFTF91c2IiPlVTQiBJL088L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJMT0dfQ0FURUdPUllfTEFCRUxfYnQiPkJsdWV0b290aCBJL088L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJMT0dfQ0FURUdPUllfTEFCRUxfaGlkIj5NZW5uZXNrZSBHcsOmbnNlZmxhZGUgSS9PPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iTE9HX0NBVEVHT1JZX0xBQkVMX2JybGRydiI+QnJhaWxsZS1kcml2ZXIgaMOmbmRlbHNlcjwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkxPR19DQVRFR09SWV9MQUJFTF9zcGtkcnYiPlRhbGUtZHJpdmVyIGjDpm5kZWxzZXI8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJMT0dfQ0FURUdPUllfTEFCRUxfc2NyZHJ2Ij5Ta8Omcm0tcml2ZXIgaMOmbmRlbHNlcjwvc3RyaW5nPgorCisgIDxzdHJpbmcgbmFtZT0iQlJBSUxMRV9EUklWRVJfTEFCRUxfYXV0byI+YXV0b2ZpbmQ8L3N0cmluZz4KKworICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfYXV0byI+bG9rYWwtYmFzZXJldCBhdXRvdsOmbGc8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX2FyIj5BcmFiaXNrIChnZW5lcmlzayk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX2FzIj5Bc3NhbWVzZTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfYXdhIj5Bd2FkaGk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX2JnIj5CdWxnYXJzazwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfYmgiPkJpaGFyaTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfYm4iPkJlbmdhbGk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX2JvIj5UaWJldGFuc2s8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX2JyYSI+QnJhajwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfYnJmIj5CcmFpbGxlIFJlYWR5IEZvcm1hdCAoZm9yIGF0IHZpc2UgLmJyZiBmaWxlcyBpIGVuIGVkaXRvciBlbGxlciBmcmVtdmlzZXIpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9jcyI+VGpla2tpc2s8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX2N5Ij5XZWxzazwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfZGEiPkRhbnNrPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9kYV8xMjUyIj5EYW5zayAoU3ZlbmQgVGhvdWdhYXJkLCAyMDAy4oCTMTHigJMxOCk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX2RhX2x0Ij5EYW5zayAoTG9nVGV4dCk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX2RlIj5UeXNrPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9kcmEiPkRyYXZpZGlhbjwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfZWwiPkdyw6Zzazwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfZW4iPkVuZ2Vsc2s8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX2VuX0NBIj5FbmdlbHNrIChDYW5hZGEpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9lbl9HQiI+RW5nZWxzayAoVW5pdGVkIEtpbmdkb20pPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9lbl9uYWJjYyI+RW5nZWxzayAoTm9yZCBBbWVyaWthbnNrIEJyYWlsbGUgQ29tcHV0ZXIgQ29kZSk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX2VuX1VTIj5FbmdlbHNrIChVbml0ZWQgU3RhdGVzKTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfZW8iPkVzcGVyYW50bzwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfZXMiPlNwYW5zazwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfZXQiPkVzdGlzazwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfZmkiPkZpbnNrPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9mciI+RnJhbnNrPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9mcl8yMDA3Ij5GcmFuc2sgKHVuaWZpZWQgMjAwNyk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX2ZyX0NBIj5GcmFuc2sgKENhbmFkYSk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX2ZyX2NiaWZzIj5GcmFuc2sgKENvZGUgQnJhaWxsZSBJbmZvcm1hdGlxdWUgRnJhbsOnYWlzIFN0YW5kYXJkKTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfZnJfRlIiPkZyYW5zayAoRnJhbmtyaWcpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9mcl92cyI+RnJhbnNrIChWaXNpb0JyYWlsbGUpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9nYSI+SXJzazwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfZ2QiPkdhZWxpYzwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfZ29uIj5Hb25kaTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfZ3UiPkd1amFyYXRpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9oZSI+SGVicmFpc2s8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX2hpIj5IaW5kaTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfaHIiPktyb2F0aXNrPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9odSI+VW5nYXJuc2s8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX2h5Ij5Bcm1lbmlzazwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfaXMiPklzbGFuZHNrPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9pdCI+SXRhbGllbnNrPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9raGEiPktoYXNpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9rbiI+S2FubmFkYTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfa29rIj5Lb25rYW5pPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9rcnUiPkt1cnVraDwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfbHQiPkxpdGF1aXNrPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9sdiI+TGV0dGlzazwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfbWciPk1hbGFnYXN5PC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9taSI+TWFvcmk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX21sIj5NYWxheWFsYW08L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX21uaSI+TWFuaXB1cmk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX21yIj5NYXJhdGhpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9tdCI+TWFsdGVzZTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfbXVuIj5NdW5kYTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfbXdyIj5NYXJ3YXJpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9uZSI+TmVwYWxlc2lzazwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfbmV3Ij5OZXdhcmk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX25sIj5CZWxnaXNrPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9ubF9CRSI+QmVsZ2lzayAoQmVsZ2llbik8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX25sX05MIj5Ib2xsYW5zayAoSG9sbGFuZCk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX25vIj5Ob3Jzazwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfbm9fZ2VuZXJpYyI+Tm9yc2sgKG1lZCB1bmRlcnN0w7h0dGVsc2UgZm9yIGFuZHJlIHNwcm9nKTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfbm9fb3VwIj5Ob3JzayAoT2ZmZW50bGlnIHV0dmFsZyBmb3IgcHVua3Rza3JpZnQpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9ud2MiPk5ld2FyaSAob2xkKTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfb3IiPk9yaXlhPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9wYSI+UGFuamFiaTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfcGkiPlBhbGk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX3BsIj5Qb2xzazwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfcHQiPlBvcnR1Z2lzaXNrPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9ybyI+Um9tYW5zazwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfcnUiPlJ1c3Npc2s8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX3NhIj5TYW5za3JpdDwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfc2F0Ij5TYW50YWxpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9zZCI+U2luZGhpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9zZSI+U2FtaXNrIChOb3Jkc2FtaXNrKTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfc2siPlNsb3Zha2lzazwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfc2wiPlNsb3ZlbnNrPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9zdiI+U3ZlbnNrPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9zdl8xOTg5Ij5TdmVuc2sgKDE5ODkgc3RhbmRhcmQpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9zdl8xOTk2Ij5TdmVuc2sgKDE5OTYgc3RhbmRhcmQpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9zdyI+U3dhaGlsaTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfdGEiPlRhbWlsPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF90ZSI+VGVsdWd1PC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF90ciI+VHlya2lzazwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfdWsiPlVrcmFpZW5zazwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfdmkiPlZpZXRuYW1lc2lzazwvc3RyaW5nPgorCisgIDxzdHJpbmcgbmFtZT0iQVRUUklCVVRFU19UQUJMRV9MQUJFTF9pbnZsZWZ0X3JpZ2h0Ij5pbnZlcnRlcmV0IGZvcmdydW5kc2ZhcnZlIGkgdmVuc3RyZSBzw7hqbGUgb2cgYmFnZ3J1bmRzZmFydmUgaSBow7hqcmUgc8O4amxlPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iQVRUUklCVVRFU19UQUJMRV9MQUJFTF9sZWZ0X3JpZ2h0Ij5mb3JncnVuZHNmYXJ2ZSBpIHZlbnN0cmUgc8O4amxlIG9nIGJhZ2dydW5kc2ZhcnZlIGkgaMO4anJlIHPDuGpsZTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkFUVFJJQlVURVNfVEFCTEVfTEFCRUxfdXBwZXJfbG93ZXIiPmZvcmdydW5kc2ZhcnZlIGkgw7h2ZXJzdGUgZmlya2FudCBvZyBiYWdncnVuZHNmYXJ2ZSBpIG5lZGVyc3RlIGZpcmthbnQ8L3N0cmluZz4KKworICA8c3RyaW5nIG5hbWU9IkNPTlRSQUNUSU9OX1RBQkxFX0xBQkVMX2F1dG8iPmxva2FsLWJhc2VyZXQgYXV0b3bDpmxnPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iQ09OVFJBQ1RJT05fVEFCTEVfTEFCRUxfYWYiPkFmcmlrYWFucyAoZm9ya29ydGV0KTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkNPTlRSQUNUSU9OX1RBQkxFX0xBQkVMX2FtIj5BbWhhcmljICh1Zm9ya29ydGV0KTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkNPTlRSQUNUSU9OX1RBQkxFX0xBQkVMX2RlIj5UeXNrPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iQ09OVFJBQ1RJT05fVEFCTEVfTEFCRUxfZGVfZzAiPlR5c2sgKHVmb3Jrb3J0ZXQpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iQ09OVFJBQ1RJT05fVEFCTEVfTEFCRUxfZGVfZzEiPlR5c2sgKGJhc2lzIGZvcmtvcnRlbHNlcik8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJDT05UUkFDVElPTl9UQUJMRV9MQUJFTF9kZV9nMiI+VHlzayAoZm9ya29ydGV0KTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkNPTlRSQUNUSU9OX1RBQkxFX0xBQkVMX2RlXzE5OTgiPlR5c2sgKGZvcmtvcnRldCAtIDE5OTggc3RhbmRhcmQpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iQ09OVFJBQ1RJT05fVEFCTEVfTEFCRUxfZGVfMjAxNSI+VHlzayAoZm9ya29ydGV0IC0gMjAxNSBzdGFuZGFyZCk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJDT05UUkFDVElPTl9UQUJMRV9MQUJFTF9lbiI+RW5nZWxzazwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkNPTlRSQUNUSU9OX1RBQkxFX0xBQkVMX2VuX1VTIj5FbmdlbHNrIChGb3JlbmVkZSBzdGF0ZXIpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iQ09OVFJBQ1RJT05fVEFCTEVfTEFCRUxfZW5fdWViX2cxIj5FbmdlbHNrIChTYW1sZXQsIHVmb3Jrb3J0ZXQpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iQ09OVFJBQ1RJT05fVEFCTEVfTEFCRUxfZW5fdWViX2cyIj5FbmdlbHNrIChVbmlmaWVkIEVuZ2xpc2ggQnJhaWxsZSwgZ3JhZGUgMik8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJDT05UUkFDVElPTl9UQUJMRV9MQUJFTF9lbl91c19nMiI+RW5nZWxzayAoVVMsIGdyYWRlIDIpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iQ09OVFJBQ1RJT05fVEFCTEVfTEFCRUxfZXMiPlNwYW5zayAoZ3JhZGUgMik8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJDT05UUkFDVElPTl9UQUJMRV9MQUJFTF9mciI+RnJhbnNrPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iQ09OVFJBQ1RJT05fVEFCTEVfTEFCRUxfZnJfZzEiPkZyYW5zayAodWZvcmtvcnRldCk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJDT05UUkFDVElPTl9UQUJMRV9MQUJFTF9mcl9nMiI+RnJhbnNrIChmb3Jrb3J0ZXQpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iQ09OVFJBQ1RJT05fVEFCTEVfTEFCRUxfaGEiPkhhdXNhIChmb3Jrb3J0ZXQpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iQ09OVFJBQ1RJT05fVEFCTEVfTEFCRUxfaWQiPkluZG9uZXNpc2sgKGZvcmtvcnRldCk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJDT05UUkFDVElPTl9UQUJMRV9MQUJFTF9pcGEiPkludGVydGlvbmFsZSBhb25ldGlza2UgYWxmYWJldDwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkNPTlRSQUNUSU9OX1RBQkxFX0xBQkVMX2phIj5KYXBhbnNrICh1Zm9ya29ydGV0KTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkNPTlRSQUNUSU9OX1RBQkxFX0xBQkVMX2tvIj5Lb3JlYW5zazwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkNPTlRSQUNUSU9OX1RBQkxFX0xBQkVMX2tvX2cwIj5Lb3JlYW5zayAodWZvcmtvcnRldCk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJDT05UUkFDVElPTl9UQUJMRV9MQUJFTF9rb19nMSI+S29yZWFuc2sgKGdyYWRlIDEpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iQ09OVFJBQ1RJT05fVEFCTEVfTEFCRUxfa29fZzIiPktvcmVhbnNrIChncmFkZSAyKTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkNPTlRSQUNUSU9OX1RBQkxFX0xBQkVMX2x0Ij5MaXRhdWlzayAodWZvcmtvcnRldCk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJDT05UUkFDVElPTl9UQUJMRV9MQUJFTF9tZyI+TWFsYWlzaXNrIChmb3Jrb3J0ZXQpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iQ09OVFJBQ1RJT05fVEFCTEVfTEFCRUxfbXVuIj5NdW5kYSAoZm9ya29ydGV0KTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkNPTlRSQUNUSU9OX1RBQkxFX0xBQkVMX25sIj5CZWxnaXNrIChmb3Jrb3J0ZXQpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iQ09OVFJBQ1RJT05fVEFCTEVfTEFCRUxfbnkiPkNoaWNoZXdhIChmb3Jrb3J0ZXQpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iQ09OVFJBQ1RJT05fVEFCTEVfTEFCRUxfcHQiPlBvcnR1Z2lza2lzayAoZ3JhZGUgMik8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJDT05UUkFDVElPTl9UQUJMRV9MQUJFTF9ydSI+UnVzc2lzayAoZm9ya29ydGV0KTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkNPTlRSQUNUSU9OX1RBQkxFX0xBQkVMX3NpIj5TaW5oYWxlc2UgKHVmb3Jrb3J0ZXQpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iQ09OVFJBQ1RJT05fVEFCTEVfTEFCRUxfc3ciPlN3YWhpbGkgKGZvcmtvcnRldCk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJDT05UUkFDVElPTl9UQUJMRV9MQUJFTF90aCI+VGhhaWxhbmRzayAoRm9ya29ydGV0KTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkNPTlRSQUNUSU9OX1RBQkxFX0xBQkVMX3poX1RXIj5LaW5lc2lzayAoVGFpd2FuLCB1Zm9ya29ydGV0KTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkNPTlRSQUNUSU9OX1RBQkxFX0xBQkVMX3p1Ij5adWx1IChmb3Jrb3J0ZXQpPC9zdHJpbmc+CisKKyAgPHN0cmluZyBuYW1lPSJLRVlCT0FSRF9UQUJMRV9MQUJFTF9icmFpbGxlIj5nZW52ZWplIGZvciBicmFpbGxlIHRhc3RhdHVyZXI8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJLRVlCT0FSRF9UQUJMRV9MQUJFTF9kZXNrdG9wIj5nZW52ZWplIGZvciBoZWxlIHRhc3RhdHVyZXI8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJLRVlCT0FSRF9UQUJMRV9MQUJFTF9rZXlwYWQiPmdlbnZlamUgZm9yIHRhc3RlLWJhc2VyZXQgbmF2aWdhdGlvbjwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IktFWUJPQVJEX1RBQkxFX0xBQkVMX2xhcHRvcCI+Z2VudmVqZSBmb3IgdGFzdGF0dXJlciB1ZGVuIG51bW1lcmlzayB0YXN0YXR1cjwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IktFWUJPQVJEX1RBQkxFX0xBQkVMX3N1bl90eXBlNiI+Z2VudmVqZSBmb3IgU3VuIFR5cGUgNiB0YXN0YXR1cmVyPC9zdHJpbmc+Cis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL0FuZHJvaWQvR3JhZGxlL2FwcC9zcmMvbWFpbi9yZXMvdmFsdWVzLWRlL3N0cmluZ3MueG1sIGIvQW5kcm9pZC9HcmFkbGUvYXBwL3NyYy9tYWluL3Jlcy92YWx1ZXMtZGUvc3RyaW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmUxNmZiYwotLS0gL2Rldi9udWxsCisrKyBiL0FuZHJvaWQvR3JhZGxlL2FwcC9zcmMvbWFpbi9yZXMvdmFsdWVzLWRlL3N0cmluZ3MueG1sCkBAIC0wLDAgKzEsMjg4IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgorCis8cmVzb3VyY2VzPgorICA8c3RyaW5nIG5hbWU9ImFwcF9kZXNjcmlwdGlvbiI+QlJMVFRZIHVudGVyc3TDvHR6dCBCcmFpbGxlZ2Vyw6R0ZS48L3N0cmluZz4KKworICA8c3RyaW5nIG5hbWU9InVzYk1vbml0b3JfbGFiZWwiPsOcYmVyd2FjaHVuZyBhbmdlc2NobG9zc2VuZXIgVVNCLUdlcsOkdGU8L3N0cmluZz4KKworICA8c3RyaW5nIG5hbWU9ImFib3V0X2xhYmVsX2FjdGl2aXR5Ij7DnGJlciBkaWUgQXBwbGlrYXRpb248L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJhYm91dF9sYWJlbF9jb3B5cmlnaHQiPkNvcHlyaWdodDwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9ImFib3V0X2xhYmVsX2J1aWxkVGltZSI+RXJzdGVsbHVuZ3NkYXR1bTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9ImFib3V0X2xhYmVsX3NvdXJjZVJldmlzaW9uIj5RdWVsbHJldmlzaW9uPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iYWJvdXRfbGFiZWxfcHJpdmFjeVBvbGljeSI+RGF0ZW5zY2h1dHpyaWNodGxpbmllPC9zdHJpbmc+CisKKyAgPHN0cmluZyBuYW1lPSJpbnB1dFNlcnZpY2VfbmFtZSI+QlJMVFRZIEJyYWlsbGVlaW5nYWJlIFNlcnZpY2U8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJpbnB1dFNlcnZpY2VfdHlwZSI+VGFzdGF0dXJlbiBhdWYgQnJhaWxsZXplaWxlbjwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9ImlucHV0U2VydmljZV9ub3RfZW5hYmxlZCI+RWluZ2FiZWRpZW5zdCBuaWNodCBha3RpdmllcnQ8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJpbnB1dFNlcnZpY2Vfbm90X3NlbGVjdGVkIj5FaW5nYWJlZGllbnN0IG5pY2h0IGF1c2dld8OkaGx0PC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iaW5wdXRTZXJ2aWNlX25vdF9zdGFydGVkIj5FaW5nYWJlZGllbnN0IG5pY2h0IGdlc3RhcnRldDwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9ImlucHV0U2VydmljZV9ub3RfY29ubmVjdGVkIj5FaW5nYWJlZGllbnN0IG5pY2h0IHZlcmJ1bmRlbjwvc3RyaW5nPgorCisgIDxzdHJpbmcgbmFtZT0idXBkYXRlQXBwbGljYXRpb25fcHJvYmxlbV9mYWlsZWQiPkFwcGxpa2F0aW9uIG5pY2h0IGFrdHVhbGlzaWVydDwvc3RyaW5nPgorCisgIDxzdHJpbmcgbmFtZT0icGFja2FnZUluc3RhbGxlcl9wcm9ibGVtX2ZhaWxlZCI+UGFrZXQgbmljaHQgaW5zdGFsbGllcnQ8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJwYWNrYWdlSW5zdGFsbGVyX3Byb2JsZW1fc2FtZSI+c2VsYmUgVmVyc2lvbjwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9InBhY2thZ2VJbnN0YWxsZXJfcHJvYmxlbV9kb3duZ3JhZGUiPkRvd25ncmFkZSBpc3QgbmljaHQgZXJsYXVidDwvc3RyaW5nPgorCisgIDxzdHJpbmcgbmFtZT0iZmlsZURvd25sb2FkZXJfdGl0bGUiPkJSTFRUWSBEYXRlaSBEb3dubG9hZGVyPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iZmlsZURvd25sb2FkZXJfcHJvYmxlbV9mYWlsZWQiPkRhdGVpIG5pY2h0IGhlcnVudGVyZ2VsYWRlbjwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9ImZpbGVEb3dubG9hZGVyX3N0YXRlX2Nvbm5lY3RpbmciPlZlcmJpbmR1bmdzYXVmYmF1PC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iZmlsZURvd25sb2FkZXJfc3RhdGVfZG93bmxvYWRpbmciPldpcmQgaGVydW50ZXJnZWxhZGVuPC9zdHJpbmc+CisKKyAgPHN0cmluZyBuYW1lPSJzZXR0aW5nX3N0YXRlX29mZiI+QXVzPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iY2hlY2tib3hfc3RhdGVfdW5jaGVja2VkIj5OZWluPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iY2hlY2tib3hfc3RhdGVfY2hlY2tlZCI+SmE8L3N0cmluZz4KKworICA8c3RyaW5nIG5hbWU9ImJyYWlsbGVfY2hhbm5lbF9uYW1lIj5CcmFpbGxlemVpbGVuenVzdGFuZDwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9ImJyYWlsbGVfaGludF90YXAiPnRpcHBlbiBmw7xyIEFrdGlvbmVuPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iYnJhaWxsZV9zdGF0ZV9yZWxlYXNlZCI+RnJlaWdlZ2ViZW48L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJicmFpbGxlX3N0YXRlX3dhaXRpbmciPldhcnRlbjwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9ImJyYWlsbGVfc3RhdGVfY29ubmVjdGVkIj5WZXJidW5kZW48L3N0cmluZz4KKworICA8c3RyaW5nIG5hbWU9IkdMT0JBTF9CVVRUT05fTk9USUZJQ0FUSU9OUyI+QmVuYWNocmljaHRpZ3VuZ2VuPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iR0xPQkFMX0JVVFRPTl9RVUlDS19TRVRUSU5HUyI+U2NobmVsbGVpbnN0ZWxsdW5nZW48L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJHTE9CQUxfQlVUVE9OX0JBQ0siPlp1csO8Y2s8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJHTE9CQUxfQlVUVE9OX0hPTUUiPlN0YXJ0c2VpdGU8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJHTE9CQUxfQlVUVE9OX1JFQ0VOVF9BUFBTIj5WZXJ3ZW5kZXRlIEFwcHM8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJHTE9CQUxfQlVUVE9OX09WRVJWSUVXIj7DnGJlcnNpY2h0PC9zdHJpbmc+CisKKyAgPHN0cmluZyBuYW1lPSJHTE9CQUxfQlVUVE9OX1NXSVRDSF9JTlBVVF9NRVRIT0QiPldlY2hzbGUgRWluZ2FiZW1ldG9kZTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkdMT0JBTF9CVVRUT05fVklFV19VU0VSX0dVSURFIj5CZWRpZW51bmdzYW5sZWl0dW5nIGFuemVpZ2VuPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iR0xPQkFMX0JVVFRPTl9CUk9XU0VfV0VCX1NJVEUiPldlYnNlaXRlIGJlc3VjaGVuPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iR0xPQkFMX0JVVFRPTl9CUk9XU0VfQ09NTVVOSVRZX01FU1NBR0VTIj5HZW1laW5zY2hhZnRzbmFjaHJpY2h0ZW4gbGVzZW48L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJHTE9CQUxfQlVUVE9OX1BPU1RfQ09NTVVOSVRZX01FU1NBR0UiPkdlbWVpbnNjaGFmdHNuYWNocmljaHQgZXJzdGVsbGVuPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iR0xPQkFMX0JVVFRPTl9NQU5BR0VfQ09NTVVOSVRZX01FTUJFUlNISVAiPkdlbWVpbnNjaGFmdHNtaXRnbGllZHNjaGFmdCB2ZXJ3YWx0ZW48L3N0cmluZz4KKworICA8c3RyaW5nIG5hbWU9IkdMT0JBTF9CVVRUT05fVVBEQVRFX0FQUExJQ0FUSU9OIj5BcHBsaWthdGlvbiBha3R1YWxpc2llcmVuPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iR0xPQkFMX0NIRUNLQk9YX0RFVkVMT1BFUl9CVUlMRCI+RW50d2lja2xlcnZlcnNpb248L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJHTE9CQUxfQ0hFQ0tCT1hfQUxMT1dfRE9XTkdSQURFIj5FcmxhdWJlIERvd25ncmFkZTwvc3RyaW5nPgorCisgIDxzdHJpbmcgbmFtZT0iQ0hPT1NFUl9USVRMRV9BQ0NFU1NJQklMSVRZX0FDVElPTlMiPkJhcnJpZXJlZnJlaWhlaXRzLUFrdGlvbmVuPC9zdHJpbmc+CisKKyAgPHN0cmluZyBuYW1lPSJTRVRUSU5HU19TQ1JFRU5fTUFJTiI+QlJMVFRZIEVpbnN0ZWxsdW5nZW48L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJTRVRUSU5HU19TQ1JFRU5fR0VORVJBTCI+QWxsZ2VtZWluZSBFaW5zdGVsbHVuZ2VuPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iU0VUVElOR1NfU0NSRUVOX01FU1NBR0UiPk5hY2hyaWNodGVuZWluc3RlbGx1bmdlbjwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlNFVFRJTkdTX1NDUkVFTl9ERVZJQ0VTIj5HZXLDpHRlIHZlcndhbHRlbjwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlNFVFRJTkdTX1NDUkVFTl9BRFZBTkNFRCI+RXJ3ZWl0ZXJ0ZSBFaW5zdGVsbHVuZ2VuPC9zdHJpbmc+CisKKyAgPHN0cmluZyBuYW1lPSJTRVRUSU5HU19DSEVDS0JPWF9SRUxFQVNFX0JSQUlMTEVfREVWSUNFIj5CcmFpbGxlemVpbGUgZnJlaWdlYmVuPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iU0VUVElOR1NfQlVUVE9OX05BVklHQVRJT05fTU9ERSI+TmF2aWdhdGlvbnNtb2R1czwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlNFVFRJTkdTX0JVVFRPTl9TUEVFQ0hfU1VQUE9SVCI+U3ByYWNoYXVzZ2FiZW51bnRlcnN0w7x0enVuZzwvc3RyaW5nPgorCisgIDxzdHJpbmcgbmFtZT0iU0VUVElOR1NfQlVUVE9OX1RFWFRfVEFCTEUiPlRleHR0YWJlbGxlPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iU0VUVElOR1NfQlVUVE9OX0FUVFJJQlVURVNfVEFCTEUiPkF0dHJpYnV0dGFiZWxsZTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlNFVFRJTkdTX0JVVFRPTl9DT05UUkFDVElPTl9UQUJMRSI+S3VyenNjaHJpZnR0YWJlbGxlPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iU0VUVElOR1NfQlVUVE9OX0tFWUJPQVJEX1RBQkxFIj5UYXN0YXR1cnRhYmVsbGU8L3N0cmluZz4KKworICA8c3RyaW5nIG5hbWU9IlNFVFRJTkdTX0NIRUNLQk9YX1NIT1dfQUxFUlRTIj5aZWlnZSBXYXJudW5nZW48L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJTRVRUSU5HU19DSEVDS0JPWF9TSE9XX0FOTk9VTkNFTUVOVFMiPlplaWdlIEFua8O8bmRpZ3VuZ2VuPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iU0VUVElOR1NfQ0hFQ0tCT1hfU0hPV19OT1RJRklDQVRJT05TIj5aZWlnZSBCZW5hY2hyaWNodGlndW5nZW48L3N0cmluZz4KKworICA8c3RyaW5nIG5hbWU9IlNFVFRJTkdTX0JVVFRPTl9MT0dfTEVWRUwiPlByb3Rva29sbHN0dWZlPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iU0VUVElOR1NfQlVUVE9OX0xPR19DQVRFR09SSUVTIj5Qcm90b2tvbGxrYXRlZ29yaWVuPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iU0VUVElOR1NfQ0hFQ0tCT1hfTE9HX0FDQ0VTU0lCSUxJVFlfRVZFTlRTIj5Qcm90b2tvbGxpZXJlIEJhcnJpZXJlZnJlaWhlaXRzZXJlaWduaXNzZTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlNFVFRJTkdTX0NIRUNLQk9YX0xPR19SRU5ERVJFRF9TQ1JFRU4iPlByb3Rva29sbGllcmUgZGVuIEJpbGRzY2hpcm1pbmhhbHQ8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJTRVRUSU5HU19DSEVDS0JPWF9MT0dfS0VZQk9BUkRfRVZFTlRTIj5Qcm90b2tvbGxpZXJlIFRhc3RhdHVyZXJlaWduaXNzZTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlNFVFRJTkdTX0NIRUNLQk9YX0xPR19VTkhBTkRMRURfRVZFTlRTIj5VbmJlaGFuZGVsdGUgRXJlaWduaXNzZSBwcm90b2tvbGxpZXJlbjwvc3RyaW5nPgorCisgIDxzdHJpbmcgbmFtZT0iREVWSUNFU19CVVRUT05fU0VMRUNURUQiPkdlcsOkdCBhdXN3w6RobGVuPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iREVWSUNFU19CVVRUT05fQUREIj5HZXLDpHQgaGluenVmw7xnZW48L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJERVZJQ0VTX0JVVFRPTl9SRU1PVkUiPkdlcsOkdCBlbnRmZXJuZW48L3N0cmluZz4KKworICA8c3RyaW5nIG5hbWU9IlNFTEVDVEVEX0RFVklDRV9OT05FIj5rZWluZSBHZXLDpHRlPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iU0VMRUNURURfREVWSUNFX1VOU0VMRUNURUQiPkdlcsOkdCBuaWNodCBhdXNnZXfDpGhsdDwvc3RyaW5nPgorCisgIDxzdHJpbmcgbmFtZT0iQUREX0RFVklDRV9OQU1FIj5OYW1lIGRlcyBHZXLDpHRlczwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkFERF9ERVZJQ0VfTUVUSE9EIj5Lb21tdW5pa2F0aW9uc21ldGhvZGU8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJBRERfREVWSUNFX1NFTEVDVCI+R2Vyw6R0IGF1c3fDpGhsZW48L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJBRERfREVWSUNFX0RSSVZFUiI+QnJhaWxsZXRyZWliZXIgYXVzd8OkaGxlbjwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkFERF9ERVZJQ0VfRE9ORSI+RmVydGlnPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iQUREX0RFVklDRV9VTlNFTEVDVEVEX01FVEhPRCI+S29tbXVuaWthdGlvbnNtZXRob2RlIG5pY2h0IGF1c2dld8OkaGx0PC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iQUREX0RFVklDRV9VTlNFTEVDVEVEX0RFVklDRSI+R2Vyw6R0IG5pY2h0IGF1c2dld8OkaGx0PC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iQUREX0RFVklDRV9VTlNFTEVDVEVEX0RSSVZFUiI+QnJhaWxsZXRyZWliZXIgbmljaHQgYXVzZ2V3w6RobHQ8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJBRERfREVWSUNFX05PX0RFVklDRVMiPmtlaW5lIEdlcsOkdGU8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJBRERfREVWSUNFX0RVUExJQ0FURV9OQU1FIj5HZXLDpHRlbmFtZSBpc3QgYmVyZWl0cyBpbiBWZXJ3ZW5kdW5nPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iQUREX0RFVklDRV9OT19QRVJNSVNTSU9OIj5adWdyaWZmIHp1bSBHZXLDpHQgdmVyd2VpZ2VydDwvc3RyaW5nPgorCisgIDxzdHJpbmcgbmFtZT0iUkVNT1ZFX0RFVklDRV9QUk9NUFQiPk3DtmNodGVuIFNpZSBkaWVzZXMgR2Vyw6R0IHdpcmtsaWNoIGVudGZlcm5lbj88L3N0cmluZz4KKworICA8c3RyaW5nIG5hbWU9IlNFVF9TRUxFQ1RJT05fTk9ORSI+a2VpbmUgYXVzZ2V3w6RobHQ8L3N0cmluZz4KKworICA8c3RyaW5nIG5hbWU9Ik5BVklHQVRJT05fTU9ERV9MQUJFTF9MaXN0Ij5WZXJ0aWthbGUgTGlzdGU8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJOQVZJR0FUSU9OX01PREVfTEFCRUxfR3JpZCI+Mi1EaW1lbnNpb25hbGVzIEdpdHRlcjwvc3RyaW5nPgorCisgIDxzdHJpbmcgbmFtZT0iU1BFRUNIX1NVUFBPUlRfTEFCRUxfbmF0aXZlIj5OYXRpdjwvc3RyaW5nPgorCisgIDxzdHJpbmcgbmFtZT0iQ09NTVVOSUNBVElPTl9NRVRIT0RfTEFCRUxfQmx1ZXRvb3RoIj5CbHVldG9vdGg8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJDT01NVU5JQ0FUSU9OX01FVEhPRF9MQUJFTF9Vc2IiPlVTQjwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkNPTU1VTklDQVRJT05fTUVUSE9EX0xBQkVMX1NlcmlhbCI+U2VyaWVsbDwvc3RyaW5nPgorCisgIDxzdHJpbmcgbmFtZT0iTE9HX0xFVkVMX0xBQkVMX2RlYnVnIj5EZWJ1Zzwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkxPR19MRVZFTF9MQUJFTF9pbmZvcm1hdGlvbiI+SW5mb3JtYXRpb25lbjwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkxPR19MRVZFTF9MQUJFTF9ub3RpY2UiPk5vdGl6ZW48L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJMT0dfTEVWRUxfTEFCRUxfd2FybmluZyI+V2FybnVuZ2VuPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iTE9HX0xFVkVMX0xBQkVMX2Vycm9yIj5GZWhsZXI8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJMT0dfTEVWRUxfTEFCRUxfY3JpdGljYWwiPktyaXRpc2NoPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iTE9HX0xFVkVMX0xBQkVMX2FsZXJ0Ij5BbGFybXNpZ25hbGU8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJMT0dfTEVWRUxfTEFCRUxfZW1lcmdlbmN5Ij51bmVyd2FydGV0ZSBFcmVpZ25pc3NlPC9zdHJpbmc+CisKKyAgPHN0cmluZyBuYW1lPSJMT0dfQ0FURUdPUllfTEFCRUxfaW5wa3RzIj5FaW5nYWJlcGFrZXRlPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iTE9HX0NBVEVHT1JZX0xBQkVMX291dHBrdHMiPkF1c2dhYmVwYWtldGU8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJMT0dfQ0FURUdPUllfTEFCRUxfYnJsa2V5cyI+QnJhaWxsZXplaWxlbnRhc3RlbiBFcmVpZ25pc3NlPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iTE9HX0NBVEVHT1JZX0xBQkVMX2tiZGtleXMiPlRhc3RhdHVyIEVyZWlnbmlzc2U8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJMT0dfQ0FURUdPUllfTEFCRUxfY3NydHJrIj5DdXJzb3IgVHJhY2tpbmc8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJMT0dfQ0FURUdPUllfTEFCRUxfY3NycnRnIj5DdXJzb3IgUm91dGluZzwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkxPR19DQVRFR09SWV9MQUJFTF91cGRhdGUiPlVwZGF0ZSBFcmVpZ25pc3NlPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iTE9HX0NBVEVHT1JZX0xBQkVMX3NwZWVjaCI+U3ByYWNoZXJlaWduaXNzZTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkxPR19DQVRFR09SWV9MQUJFTF9hc3luYyI+QXN5bmNocm9uZSBFcmVpZ25pc3NlPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iTE9HX0NBVEVHT1JZX0xBQkVMX3NlcnZlciI+U2VydmVyIEVyZWlnbmlzc2U8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJMT0dfQ0FURUdPUllfTEFCRUxfZ2lvIj5BbGxnZW1laW5lIEVpbi0vQXVzZ2FiZTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkxPR19DQVRFR09SWV9MQUJFTF9zZXJpYWwiPlNlcmllbGxlIEUvQTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkxPR19DQVRFR09SWV9MQUJFTF91c2IiPlVTQiBFL0E8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJMT0dfQ0FURUdPUllfTEFCRUxfYnQiPkJsdWV0b290aCBFL0E8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJMT0dfQ0FURUdPUllfTEFCRUxfaGlkIj5IdW1hbiBJbnRlcmZhY2UgRWluLS9BdXNnYWJlPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iTE9HX0NBVEVHT1JZX0xBQkVMX2JybGRydiI+QnJhaWxsZXRyZWliZXJlcmVpZ25pc3NlPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iTE9HX0NBVEVHT1JZX0xBQkVMX3Nwa2RydiI+U3ByYWNoYXVzZ2FiZW50cmVpYmVyPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iTE9HX0NBVEVHT1JZX0xBQkVMX3NjcmRydiI+QmlsZHNjaGlybXRyZWliZXJlcmVpZ25pc3NlPC9zdHJpbmc+CisKKyAgPHN0cmluZyBuYW1lPSJCUkFJTExFX0RSSVZFUl9MQUJFTF9hdXRvIj5BdXRvbWF0aXNjaGUgRXJrZW5udW5nPC9zdHJpbmc+CisKKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX2F1dG8iPkF1dG9tYXRpc2NoIGFuaGFuZCBkZXIgTGFuZGVzZWluc3RlbGx1bmc8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX2FyIj5BcmFiaXNjaCAoYWxsZ2VtZWluKTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfYXMiPkFzc2FtZXNpc2NoPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9hd2EiPkF3YWRoaXNjaDwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfYmciPkJ1bGdhcmlzY2g8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX2JoIj5CaWhhcmlzY2g8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX2JuIj5CZW5nYWxpc2NoPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9ibyI+VGliZXRpc2NoPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9icmEiPkJyYWo8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX2JyZiI+QnJhaWxsZSBSZWFkeSBGb3JtYXQgKHp1bSBMZXNlbiB2b24gLmJyZiBEYXRlaWVuIGluIGVpbmVtIEVkaXRvciBvZGVyIHBhZ2VyKTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfY3MiPlRzY2hlY2hpc2NoPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9jeSI+V2FsaXNpc2NoPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9kYSI+RMOkbmlzY2g8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX2RhXzEyNTIiPkTDpG5pc2NoIChTdmVuZCBUaG91Z2FhcmQsIDIwMDLigJMxMeKAkzE4KTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfZGFfbHQiPkTDpG5pc2NoIChMb2dUZXh0KTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfZGUiPkRldXRzY2g8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX2RyYSI+RHJhdmlkaXNjaDwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfZWwiPkdyaWVjaGlzY2g8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX2VuIj5FbmdsaXNjaDwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfZW5fQ0EiPkVuZ2xpc2NoIChLYW5hZGEpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9lbl9HQiI+RW5nbGlzY2ggKEdyb+KivGJyaXRhbm5pZW4pPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9lbl9uYWJjYyI+RW5nbGlzY2ggKE5vcmRhbWVyaWthbmlzY2hlcyBDb21wdXRlciBCcmFpbGxlKTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfZW5fVVMiPkVuZ2xpc2NoIChWZXJlaW5pZ3RlIFN0YWF0ZW4pPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9lbyI+RXNwZXJhbnRvPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9lcyI+U3BhbmlzY2g8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX2V0Ij5Fc3RuaXNjaDwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfZmkiPkZpbm5pc2NoPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9mciI+RnJhbnrDtnNpc2NoPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9mcl8yMDA3Ij5GcmFuesO2c2lzY2ggKHZlcmVpbmhlaXRsaWNodCAyMDA3KTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfZnJfQ0EiPkZyYW56w7ZzaXNjaCAoS2FuYWRhKTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfZnJfY2JpZnMiPkZyYW56w7ZzaXNjaCAoQ29kZSBCcmFpbGxlIEluZm9ybWF0aXF1ZSBGcmFuw6dhaXMgU3RhbmRhcmQpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9mcl9GUiI+RnJhbnrDtnNpc2NoIChGcmFua3JlaWNoKTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfZnJfdnMiPkZyYW56w7ZzaXNjaCAoVmlzaW9CcmFpbGxlKTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfZ2EiPklyaXNjaDwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfZ2QiPkfDpGxpc2NoPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9nb24iPkdvbmRpc2NoPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9ndSI+R3VqYXJhdGk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX2hlIj5IZWJyw6Rpc2NoPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9oaSI+SGluZGk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX2hyIj5Lcm9hdGlzY2g8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX2h1Ij5VbmdhcmlzY2g8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX2h5Ij5Bcm1lbmlzY2g8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX2lzIj5Jc2zDpG5kaXNjaDwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfaXQiPkl0YWxpZW5pc2NoPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9raGEiPktoYXNpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9rbiI+S2FuYXJlc2lzY2g8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX2tvayI+S29ua2FuaTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfa3J1Ij5LdXJ1a2g8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX2x0Ij5MaXRhdWlzY2g8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX2x2Ij5MZXR0aXNjaDwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfbWciPk1hZGFnYXNzaXNjaDwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfbWkiPk1hb3JpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9tbCI+TWFsYXlhbGFtPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9tbmkiPk1hbmlwdXJpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9tciI+TWFyYXRoaTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfbXQiPk1hbHRlc2lzY2g8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX211biI+TXVuZGE8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX213ciI+TWFyd2FyaTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfbmUiPk5lcGFsZXNpc2NoPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9uZXciPk5ld2FyaTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfbmwiPk5pZWRlcmzDpG5kaXNjaDwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfbmxfQkUiPk5pZWRlcmzDpG5kaXNjaCAoQmVsZ2llbik8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX25sX05MIj5OaWVkZXJsw6RuZGlzY2ggKE5pZWRlcmxhbmRlKTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfbm8iPk5vcndlZ2lzY2g8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX25vX2dlbmVyaWMiPk5vcndlZ2lzY2ggKG1pdCBVbnRlcnN0w7x0enVuZyBmw7xyIGFuZGVyZSBTcHJhY2hlbik8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX25vX291cCI+Tm9yd2VnaXNjaCAoT2ZmZW50bGlnIHV0dmFsZyBmb3IgcHVua3Rza3JpZnQpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9ud2MiPk5ld2FyaSAoYWx0KTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfb3IiPk9yaXlhPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9wYSI+UGFuamFiaTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfcGkiPlBhbGk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX3BsIj5Qb2xuaXNjaDwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfcHQiPlBvcnR1Z2llc2lzY2g8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX3JvIj5SdW3DpG5pc2NoPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9ydSI+UnVzc2lzY2g8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX3NhIj5TYW5za3JpdDwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfc2F0Ij5TYW50YWxpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9zZCI+U2luZGhpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9zZSI+U2FtaXNjaCAoTm9yZHNhbWlzY2gpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9zayI+U2xvd2FraXNjaDwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfc2wiPlNsb3dlbmlzY2g8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX3N2Ij5TY2h3ZWRpc2NoPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9zdl8xOTg5Ij5TY2h3ZWRpc2NoICgxOTg5IFN0YW5kYXJkKTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfc3ZfMTk5NiI+U2Nod2VkaXNjaCAoMTk5NiBTdGFuZGFyZCk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX3N3Ij5Td2FoaWxpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF90YSI+VGFtaWxpc2NoPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF90ZSI+VGVsdWd1PC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF90ciI+VMO8cmtpc2NoPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF91ayI+VWtyYWluaXNjaDwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfdmkiPlZpZXRuYW1lc2lzY2g8L3N0cmluZz4KKworICA8c3RyaW5nIG5hbWU9IkFUVFJJQlVURVNfVEFCTEVfTEFCRUxfaW52bGVmdF9yaWdodCI+SW52ZXJ0aWVydGUgRm9yZGVyZ3J1bmRmYXJiZSBpbiBkZXIgbGlua2VuIFNwYWx0ZSB1bmQgSGludGVyZ3J1bmRmYXJiZSBpbiBkZXIgcmVjaHRlbiBTcGFsdGU8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJBVFRSSUJVVEVTX1RBQkxFX0xBQkVMX2xlZnRfcmlnaHQiPkZvcmRlcmdydW5kZmFyYmUgaW4gZGVyIGxpbmtlbiBTcGFsdGUgdW5kIEhpbnRlcmdydW5kZmFyYmUgaW4gZGVyIHJlY2h0ZW4gU3BhbHRlPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iQVRUUklCVVRFU19UQUJMRV9MQUJFTF91cHBlcl9sb3dlciI+Rm9yZGVyZ3J1bmRmYXJiZSBpbSBvYmVyZW4gUXVhZHJhdCB1bmQgSGludGVyZ3J1bmRmYXJiZSBpbSB1bnRlcmVuIFF1YWRyYXQ8L3N0cmluZz4KKworICA8c3RyaW5nIG5hbWU9IkNPTlRSQUNUSU9OX1RBQkxFX0xBQkVMX2F1dG8iPkF1dG9tYXRpc2NoIGFuaGFuZCBkZXIgTGFuZGVzZWluc3RlbGx1bmc8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJDT05UUkFDVElPTl9UQUJMRV9MQUJFTF9hZiI+QWZyaWthYW5zIChLdXJ6c2NocmlmdCk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJDT05UUkFDVElPTl9UQUJMRV9MQUJFTF9hbSI+QW1oYXJpc2NoIChWb2xsc2NocmlmdCk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJDT05UUkFDVElPTl9UQUJMRV9MQUJFTF9kZSI+RGV1dHNjaDwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkNPTlRSQUNUSU9OX1RBQkxFX0xBQkVMX2RlX2cwIj5EZXV0c2NoIChWb2xsc2NocmlmdCk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJDT05UUkFDVElPTl9UQUJMRV9MQUJFTF9kZV9nMSI+RGV1dHNjaCAoQmFzaXNzY2hyaWZ0KTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkNPTlRSQUNUSU9OX1RBQkxFX0xBQkVMX2RlX2cyIj5EZXV0c2NoIChLdXJ6c2NocmlmdCk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJDT05UUkFDVElPTl9UQUJMRV9MQUJFTF9kZV8xOTk4Ij5EZXV0c2NoIChLdXJ6c2NocmlmdCAtIDE5OTggU3RhbmRhcmQpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iQ09OVFJBQ1RJT05fVEFCTEVfTEFCRUxfZGVfMjAxNSI+RGV1dHNjaCAoS3VyenNjaHJpZnQgLSAyMDE1IFN0YW5kYXJkKTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkNPTlRSQUNUSU9OX1RBQkxFX0xBQkVMX2VuIj5FbmdsaXNjaDwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkNPTlRSQUNUSU9OX1RBQkxFX0xBQkVMX2VuX1VTIj5FbmdsaXNjaCAoVmVyZWluaWd0ZSBTdGFhdGVuKTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkNPTlRSQUNUSU9OX1RBQkxFX0xBQkVMX2VuX3VlYl9nMSI+RW5nbGlzY2ggKFVFQiwgVm9sbHNjaHJpZnQpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iQ09OVFJBQ1RJT05fVEFCTEVfTEFCRUxfZW5fdWViX2cyIj5FbmdsaXNjaCAoVUVCLCBLdXJ6c2NocmlmdCk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJDT05UUkFDVElPTl9UQUJMRV9MQUJFTF9lbl91c19nMiI+RW5nbGlzY2ggKFZlcmVpbmlndGUgU3RhYXRlbiwgS3VyenNjaHJpZnQpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iQ09OVFJBQ1RJT05fVEFCTEVfTEFCRUxfZXMiPlNwYW5pc2NoIChLdXJ6c2NocmlmdCk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJDT05UUkFDVElPTl9UQUJMRV9MQUJFTF9mciI+RnJhbnrDtnNpc2NoPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iQ09OVFJBQ1RJT05fVEFCTEVfTEFCRUxfZnJfZzEiPkZyYW56w7ZzaXNjaCAoVm9sbHNjaHJpZnQpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iQ09OVFJBQ1RJT05fVEFCTEVfTEFCRUxfZnJfZzIiPkZyYW56w7ZzaXNjaCAoS3VyenNjaHJpZnQpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iQ09OVFJBQ1RJT05fVEFCTEVfTEFCRUxfaGEiPkhhdXNhIChLdXJ6c2NocmlmdCk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJDT05UUkFDVElPTl9UQUJMRV9MQUJFTF9pZCI+SW5kb25lc2lzY2ggKEt1cnpzY2hyaWZ0KTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkNPTlRSQUNUSU9OX1RBQkxFX0xBQkVMX2lwYSI+SW50ZXJuYXRpb25hbGVzIFBob25ldGlzY2hlcyBBbHBoYWJldDwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkNPTlRSQUNUSU9OX1RBQkxFX0xBQkVMX2phIj5KYXBhbmlzY2ggKFZvbGxzY2hyaWZ0KTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkNPTlRSQUNUSU9OX1RBQkxFX0xBQkVMX2tvIj5Lb3JlYW5pc2NoPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iQ09OVFJBQ1RJT05fVEFCTEVfTEFCRUxfa29fZzAiPktvcmVhbmlzY2ggKFZvbGxzY2hyaWZ0KTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkNPTlRSQUNUSU9OX1RBQkxFX0xBQkVMX2tvX2cxIj5Lb3JlYW5pc2NoIChUZWlsa3VyenNjaHJpZnQpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iQ09OVFJBQ1RJT05fVEFCTEVfTEFCRUxfa29fZzIiPktvcmVhbmlzY2ggKEt1cnpzY2hyaWZ0KTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkNPTlRSQUNUSU9OX1RBQkxFX0xBQkVMX2x0Ij5MaXRhdWlzY2ggKFZvbGxzY2hyaWZ0KTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkNPTlRSQUNUSU9OX1RBQkxFX0xBQkVMX21nIj5NYWRhZ2Fzc2lzY2ggKEt1cnpzY2hyaWZ0KTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkNPTlRSQUNUSU9OX1RBQkxFX0xBQkVMX211biI+TXVuZGEgKEt1cnpzY2hyaWZ0KTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkNPTlRSQUNUSU9OX1RBQkxFX0xBQkVMX25sIj5OaWVkZXJsw6RuZGlzY2ggKEt1cnpzY2hyaWZ0KTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkNPTlRSQUNUSU9OX1RBQkxFX0xBQkVMX255Ij5DaGljaGV3YSAoS3VyenNjaHJpZnQpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iQ09OVFJBQ1RJT05fVEFCTEVfTEFCRUxfcHQiPlBvcnR1Z2llc2lzY2ggKEt1cnpzY2hyaWZ0KTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkNPTlRSQUNUSU9OX1RBQkxFX0xBQkVMX3J1Ij5SdXNzaXNjaCAoS3VyenNjaHJpZnQpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iQ09OVFJBQ1RJT05fVEFCTEVfTEFCRUxfc2kiPlNpbmdoYWxlc2lzY2ggKFZvbGxzY2hyaWZ0KTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkNPTlRSQUNUSU9OX1RBQkxFX0xBQkVMX3N3Ij5Td2FoaWxpIChLdXJ6c2NocmlmdCk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJDT05UUkFDVElPTl9UQUJMRV9MQUJFTF90aCI+VGhhaWzDpG5kaXNjaCAoS3VyenNjaHJpZnQpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iQ09OVFJBQ1RJT05fVEFCTEVfTEFCRUxfemhfVFciPkNoaW5lc2lzY2ggKFRhaXdhbiwgVm9sbHNjaHJpZnQpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iQ09OVFJBQ1RJT05fVEFCTEVfTEFCRUxfenUiPlp1bHUgKEt1cnpzY2hyaWZ0KTwvc3RyaW5nPgorCisgIDxzdHJpbmcgbmFtZT0iS0VZQk9BUkRfVEFCTEVfTEFCRUxfYnJhaWxsZSI+VGFzdGVuenV3ZWlzdW5nZW4gZsO8ciBCcmFpbGxlIFRhc3RhdHVyZW48L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJLRVlCT0FSRF9UQUJMRV9MQUJFTF9kZXNrdG9wIj5UYXN0ZW56dXdlaXN1bmdlbiBmw7xyIGRlc2t0b3AgVGFzdGF0dXJlbjwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IktFWUJPQVJEX1RBQkxFX0xBQkVMX2tleXBhZCI+VGFzdGVuenV3ZWlzdW5nZW4gZsO8ciBOdW1tZXJuLUJsb2NrIGJhc3NpZXJ0ZSBOYXZpZ2F0aW9uPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iS0VZQk9BUkRfVEFCTEVfTEFCRUxfbGFwdG9wIj5UYXN0ZW56dXdlaXN1bmdlbiBmw7xyIFRhc3RhdHVyZW4gb2huZSBOdW1tZXJuYmxvY2s8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJLRVlCT0FSRF9UQUJMRV9MQUJFTF9zdW5fdHlwZTYiPlRhc3Rlbnp1d2Vpc3VuZ2VuIGbDvHIgU3VuIFR5cGUgNiBUYXN0YXR1cmVuPC9zdHJpbmc+Cis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL0FuZHJvaWQvR3JhZGxlL2FwcC9zcmMvbWFpbi9yZXMvdmFsdWVzLWVzL3N0cmluZ3MueG1sIGIvQW5kcm9pZC9HcmFkbGUvYXBwL3NyYy9tYWluL3Jlcy92YWx1ZXMtZXMvc3RyaW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDliMTZiYQotLS0gL2Rldi9udWxsCisrKyBiL0FuZHJvaWQvR3JhZGxlL2FwcC9zcmMvbWFpbi9yZXMvdmFsdWVzLWVzL3N0cmluZ3MueG1sCkBAIC0wLDAgKzEsMjg4IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgorCis8cmVzb3VyY2VzPgorICA8c3RyaW5nIG5hbWU9ImFwcF9kZXNjcmlwdGlvbiI+QlJMVFRZIGFwb3lhIGRpc3Bvc2l0aXZvcyBkZSBicmFpbGxlLjwvc3RyaW5nPgorCisgIDxzdHJpbmcgbmFtZT0idXNiTW9uaXRvcl9sYWJlbCI+ZGV0ZWN0b3IgZGUgZGlzcG9zaXRpdm8gVVNCIGNvbmVjdGFkbzwvc3RyaW5nPgorCisgIDxzdHJpbmcgbmFtZT0iYWJvdXRfbGFiZWxfYWN0aXZpdHkiPkFjZXJjYSBkZSBhcGxpY2FjacOzbjwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9ImFib3V0X2xhYmVsX2NvcHlyaWdodCI+RGVyZWNob3MgZGUgYXV0b3I8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJhYm91dF9sYWJlbF9idWlsZFRpbWUiPkhvcmEgZGUgQ29tcGlsYWNpw7NuPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iYWJvdXRfbGFiZWxfc291cmNlUmV2aXNpb24iPlJldmlzacOzbiBkZSBGdWVudGU8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJhYm91dF9sYWJlbF9wcml2YWN5UG9saWN5Ij5Qb2zDrXRpY2EgZGUgUHJpdmFjaWRhZDwvc3RyaW5nPgorCisgIDxzdHJpbmcgbmFtZT0iaW5wdXRTZXJ2aWNlX25hbWUiPkJSTFRUWSBTZXJ2aWNpbyBkZSBFbnRyYWRhPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iaW5wdXRTZXJ2aWNlX3R5cGUiPlRlY2xhZG9zIEVuIERpc3Bvc2l0aXZvcyBkZSBCcmFpbGxlPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iaW5wdXRTZXJ2aWNlX25vdF9lbmFibGVkIj5zZXJ2aWNpbyBkZSBlbnRyYWRhIG5vIGhhYmlsaXRhZG88L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJpbnB1dFNlcnZpY2Vfbm90X3NlbGVjdGVkIj5zZXJ2aWNpbyBkZSBlbnRyYWRhIG5vIHNlbGVjY2lvbmFkbzwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9ImlucHV0U2VydmljZV9ub3Rfc3RhcnRlZCI+c2VydmljaW8gZGUgZW50cmFkYSBubyBpbmljaWFkbzwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9ImlucHV0U2VydmljZV9ub3RfY29ubmVjdGVkIj5zZXJ2aWNpbyBkZSBlbnRyYWRhIG5vIGNvbmVjdGFkbzwvc3RyaW5nPgorCisgIDxzdHJpbmcgbmFtZT0idXBkYXRlQXBwbGljYXRpb25fcHJvYmxlbV9mYWlsZWQiPmFwbGljYWNpw7NuIG5vIGFjdHVhbGl6YWRhPC9zdHJpbmc+CisKKyAgPHN0cmluZyBuYW1lPSJwYWNrYWdlSW5zdGFsbGVyX3Byb2JsZW1fZmFpbGVkIj5wYXF1ZXRlIG5vIGluc3RhbGFkbzwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9InBhY2thZ2VJbnN0YWxsZXJfcHJvYmxlbV9zYW1lIj5taXNtYSB2ZXJzacOzbjwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9InBhY2thZ2VJbnN0YWxsZXJfcHJvYmxlbV9kb3duZ3JhZGUiPmRlZ3JhZG8gbm8gcGVybWl0aWRvPC9zdHJpbmc+CisKKyAgPHN0cmluZyBuYW1lPSJmaWxlRG93bmxvYWRlcl90aXRsZSI+QlJMVFRZIEJhamFkb3IgZGUgQXJjaGl2b3M8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJmaWxlRG93bmxvYWRlcl9wcm9ibGVtX2ZhaWxlZCI+YXJjaGl2byBubyBiYWphZG88L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJmaWxlRG93bmxvYWRlcl9zdGF0ZV9jb25uZWN0aW5nIj5jb25lY3RhbmRvPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iZmlsZURvd25sb2FkZXJfc3RhdGVfZG93bmxvYWRpbmciPmJhamFuZG88L3N0cmluZz4KKworICA8c3RyaW5nIG5hbWU9InNldHRpbmdfc3RhdGVfb2ZmIj5EZXNhY3RpdmFkbzwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9ImNoZWNrYm94X3N0YXRlX3VuY2hlY2tlZCI+Tm88L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJjaGVja2JveF9zdGF0ZV9jaGVja2VkIj5Tw608L3N0cmluZz4KKworICA8c3RyaW5nIG5hbWU9ImJyYWlsbGVfY2hhbm5lbF9uYW1lIj5Fc3RhZG8gZGVsIGRpc3Bvc2l0aXZvIEJyYWlsbGU8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJicmFpbGxlX2hpbnRfdGFwIj5Ub2NhIHBhcmEgYWNjaW9uZXM8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJicmFpbGxlX3N0YXRlX3JlbGVhc2VkIj5MaWJlcmFkbzwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9ImJyYWlsbGVfc3RhdGVfd2FpdGluZyI+RXNwZXJhbmRvPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iYnJhaWxsZV9zdGF0ZV9jb25uZWN0ZWQiPkNvbmVjdGFkbzwvc3RyaW5nPgorCisgIDxzdHJpbmcgbmFtZT0iR0xPQkFMX0JVVFRPTl9OT1RJRklDQVRJT05TIj5Ob3RpZmljYWNpb25lczwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkdMT0JBTF9CVVRUT05fUVVJQ0tfU0VUVElOR1MiPkFqdXN0b3MgTGlqZXJvczwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkdMT0JBTF9CVVRUT05fQkFDSyI+RGUgVnVlbHRhPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iR0xPQkFMX0JVVFRPTl9IT01FIj5Ib2dhcjwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkdMT0JBTF9CVVRUT05fUkVDRU5UX0FQUFMiPkFwbGljYWNpb25lcyBSZWNpZW50ZXM8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJHTE9CQUxfQlVUVE9OX09WRVJWSUVXIj5WaXNpw7NuIGRlIGNvbmp1bnRvPC9zdHJpbmc+CisKKyAgPHN0cmluZyBuYW1lPSJHTE9CQUxfQlVUVE9OX1NXSVRDSF9JTlBVVF9NRVRIT0QiPkNhbWJpYSBtw6l0b2RvIGRlIGVudHJhZGE8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJHTE9CQUxfQlVUVE9OX1ZJRVdfVVNFUl9HVUlERSI+TWlyYSBsYSBndcOtYSBkZWwgdXN1YXJpbzwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkdMT0JBTF9CVVRUT05fQlJPV1NFX1dFQl9TSVRFIj5OYXZlZ2EgcG9yIHNpdGlvIHdlYjwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkdMT0JBTF9CVVRUT05fQlJPV1NFX0NPTU1VTklUWV9NRVNTQUdFUyI+TmF2ZWdhIHBvciBtZW5zYWplcyBkZSBjb211bmlkYWQ8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJHTE9CQUxfQlVUVE9OX1BPU1RfQ09NTVVOSVRZX01FU1NBR0UiPlB1YmxpY2EgbWVuc2FqZSBkZSBjb211bmlkYWQ8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJHTE9CQUxfQlVUVE9OX01BTkFHRV9DT01NVU5JVFlfTUVNQkVSU0hJUCI+QWRtaW5pc3RyYSBtZW1icmVzw61hIGRlIGNvbXVuaWRhZDwvc3RyaW5nPgorCisgIDxzdHJpbmcgbmFtZT0iR0xPQkFMX0JVVFRPTl9VUERBVEVfQVBQTElDQVRJT04iPkFjdHVhbGl6YSBhcGxpY2FjacOzbjwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkdMT0JBTF9DSEVDS0JPWF9ERVZFTE9QRVJfQlVJTEQiPkJ1aWxkIGRlIERlc2Fycm9sbGFkb3Jlczwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkdMT0JBTF9DSEVDS0JPWF9BTExPV19ET1dOR1JBREUiPnBlcm1pdGlyIGJhamFyIGRlIGNhdGVnb3LDrWE8L3N0cmluZz4KKworICA8c3RyaW5nIG5hbWU9IkNIT09TRVJfVElUTEVfQUNDRVNTSUJJTElUWV9BQ1RJT05TIj5BY2Npb25lcyBkZSBsYSBhY2Nlc2liaWxpZGFkPC9zdHJpbmc+CisKKyAgPHN0cmluZyBuYW1lPSJTRVRUSU5HU19TQ1JFRU5fTUFJTiI+QWp1c3RvcyBkZSBCUkxUVFk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJTRVRUSU5HU19TQ1JFRU5fR0VORVJBTCI+Q29uZmlndXJhY2nDs24gR2VuZXJhbDwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlNFVFRJTkdTX1NDUkVFTl9NRVNTQUdFIj5Db25maWd1cmFjaW9uZXMgZGUgbWVuc2FqZTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlNFVFRJTkdTX1NDUkVFTl9ERVZJQ0VTIj5BZG1pbmlzdHJlIERpc3Bvc2l0aXZvczwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlNFVFRJTkdTX1NDUkVFTl9BRFZBTkNFRCI+Q29uZmlndXJhY2nDs24gQXZhbnphZGE8L3N0cmluZz4KKworICA8c3RyaW5nIG5hbWU9IlNFVFRJTkdTX0NIRUNLQk9YX1JFTEVBU0VfQlJBSUxMRV9ERVZJQ0UiPkxpYmVyYSBkaXNwb3NpdGl2byBCcmFpbGxlPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iU0VUVElOR1NfQlVUVE9OX05BVklHQVRJT05fTU9ERSI+TW9kYSBkZSBOYXZpZ2FjY2nDs248L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJTRVRUSU5HU19CVVRUT05fU1BFRUNIX1NVUFBPUlQiPlN1cHBvcnRlIGRlbCBIYWJsYTwvc3RyaW5nPgorCisgIDxzdHJpbmcgbmFtZT0iU0VUVElOR1NfQlVUVE9OX1RFWFRfVEFCTEUiPlRhYmxhIGRlIFRleHRvPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iU0VUVElOR1NfQlVUVE9OX0FUVFJJQlVURVNfVEFCTEUiPlRhYmxhIGRlIEF0cmlidXRvczwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlNFVFRJTkdTX0JVVFRPTl9DT05UUkFDVElPTl9UQUJMRSI+VGFibGEgZGUgQ29udHJhY2Npb25lczwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlNFVFRJTkdTX0JVVFRPTl9LRVlCT0FSRF9UQUJMRSI+VGFibGEgZGUgVGVjbGFkb3M8L3N0cmluZz4KKworICA8c3RyaW5nIG5hbWU9IlNFVFRJTkdTX0NIRUNLQk9YX1NIT1dfQUxFUlRTIj5Nb3N0cmEgYWxlcnRhczwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlNFVFRJTkdTX0NIRUNLQk9YX1NIT1dfQU5OT1VOQ0VNRU5UUyI+TW9zdHJhIGFudW5jaW9zPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iU0VUVElOR1NfQ0hFQ0tCT1hfU0hPV19OT1RJRklDQVRJT05TIj5Nb3N0cmEgbm90aWZpY2FjaW9uZXM8L3N0cmluZz4KKworICA8c3RyaW5nIG5hbWU9IlNFVFRJTkdTX0JVVFRPTl9MT0dfTEVWRUwiPk5pdmVsIGRlIFJlZ2lzdHJvPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iU0VUVElOR1NfQlVUVE9OX0xPR19DQVRFR09SSUVTIj5DYXRlZ29yw61hcyBkZSBSZWdpc3Rybzwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlNFVFRJTkdTX0NIRUNLQk9YX0xPR19BQ0NFU1NJQklMSVRZX0VWRU5UUyI+UmVnaXN0cmEgRXZlbnRvcyBkZSBBY2Nlc2liaWxpZGFkPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iU0VUVElOR1NfQ0hFQ0tCT1hfTE9HX1JFTkRFUkVEX1NDUkVFTiI+UmVnaXN0cmEgUGFudGFsbGEgUmVuZGVyaXphZGE8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJTRVRUSU5HU19DSEVDS0JPWF9MT0dfS0VZQk9BUkRfRVZFTlRTIj5SZWdpc3RyYSBFdmVudG9zIGRlIFRlY2xhZG88L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJTRVRUSU5HU19DSEVDS0JPWF9MT0dfVU5IQU5ETEVEX0VWRU5UUyI+UmVnaXN0cmEgZXZlbnRvcyBubyBnZXN0aW9uYWRvczwvc3RyaW5nPgorCisgIDxzdHJpbmcgbmFtZT0iREVWSUNFU19CVVRUT05fU0VMRUNURUQiPkRpc3Bvc2l0aXZvIFNlbGVjY2lvbmFkbzwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkRFVklDRVNfQlVUVE9OX0FERCI+QcOxYWRhIHVuIERpc3Bvc2l0aXZvPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iREVWSUNFU19CVVRUT05fUkVNT1ZFIj5SZXRpcmUgZWwgRGlzcG9zaXRpdm88L3N0cmluZz4KKworICA8c3RyaW5nIG5hbWU9IlNFTEVDVEVEX0RFVklDRV9OT05FIj5uaW5ndW5vcyBkaXNwb3NpdGl2b3M8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJTRUxFQ1RFRF9ERVZJQ0VfVU5TRUxFQ1RFRCI+ZGlzcG9zaXRpdm8gbm8gZXN0w6Egc2VsZWNjaW9uYWRvPC9zdHJpbmc+CisKKyAgPHN0cmluZyBuYW1lPSJBRERfREVWSUNFX05BTUUiPk5vbWJyZSBkZSBEaXNwb3NpdGl2bzwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkFERF9ERVZJQ0VfTUVUSE9EIj5Nw6l0b2RvIGRlIENvbXVuaWNhY2nDs248L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJBRERfREVWSUNFX1NFTEVDVCI+U2VsZWNjaW9uZSBEaXNwb3NpdGl2bzwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkFERF9ERVZJQ0VfRFJJVkVSIj5Db250cm9sYWRvciBkZSBCcmFpbGxlPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iQUREX0RFVklDRV9ET05FIj5UZXJtaW5hZG88L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJBRERfREVWSUNFX1VOU0VMRUNURURfTUVUSE9EIj5tw6l0b2RvIGRlIGNvbW11bmljYWNjacOzbiBubyBlc3TDoSBzZWxlY2Npb25hZG88L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJBRERfREVWSUNFX1VOU0VMRUNURURfREVWSUNFIj5kZXBvc2l0aXZvIG5vIGVzdMOhIHNlbGVjY2lvbmFkbzwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkFERF9ERVZJQ0VfVU5TRUxFQ1RFRF9EUklWRVIiPmNvbnRyb2xhZG9yIGRlIGJyYWlsbGUgbm8gZXN0w6Egc2VsZWNjaW9uYWRvPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iQUREX0RFVklDRV9OT19ERVZJQ0VTIj5uaW5ndW5vcyBkaXNwb3NpdGl2b3M8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJBRERfREVWSUNFX0RVUExJQ0FURV9OQU1FIj5ub21icmUgZGUgZGlzcG9zaXRpdm8geWEgZXN0w6EgZW4gdXNvPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iQUREX0RFVklDRV9OT19QRVJNSVNTSU9OIj5hY2Nlc28gYWwgZGlzcG9zaXRpdm8gbm8gY29uY2VkaWRvPC9zdHJpbmc+CisKKyAgPHN0cmluZyBuYW1lPSJSRU1PVkVfREVWSUNFX1BST01QVCI+wr9SZWFsbWVudGUgZGVzZWEgcmV0aXJhciBlc3RlIGRpc3Bvc2l0aXZvPzwvc3RyaW5nPgorCisgIDxzdHJpbmcgbmFtZT0iU0VUX1NFTEVDVElPTl9OT05FIj5uaW5ndW5vIHNlbGVjY2lvbmFkbzwvc3RyaW5nPgorCisgIDxzdHJpbmcgbmFtZT0iTkFWSUdBVElPTl9NT0RFX0xBQkVMX0xpc3QiPkxpc3RhIFZlcnRpY2FsPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iTkFWSUdBVElPTl9NT0RFX0xBQkVMX0dyaWQiPkN1YWRyw61jdWxhIGRlIERvcyBEaW1lbnNpb25lczwvc3RyaW5nPgorCisgIDxzdHJpbmcgbmFtZT0iU1BFRUNIX1NVUFBPUlRfTEFCRUxfbmF0aXZlIj5OYXRpdm88L3N0cmluZz4KKworICA8c3RyaW5nIG5hbWU9IkNPTU1VTklDQVRJT05fTUVUSE9EX0xBQkVMX0JsdWV0b290aCI+Qmx1ZXRvb3RoPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iQ09NTVVOSUNBVElPTl9NRVRIT0RfTEFCRUxfVXNiIj5VU0I8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJDT01NVU5JQ0FUSU9OX01FVEhPRF9MQUJFTF9TZXJpYWwiPlNlcmlhbDwvc3RyaW5nPgorCisgIDxzdHJpbmcgbmFtZT0iTE9HX0xFVkVMX0xBQkVMX2RlYnVnIj5EZXB1cmU8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJMT0dfTEVWRUxfTEFCRUxfaW5mb3JtYXRpb24iPkluZm9ybWFjY2nDs248L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJMT0dfTEVWRUxfTEFCRUxfbm90aWNlIj5Ob3RpZmljYWNpw7NuPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iTE9HX0xFVkVMX0xBQkVMX3dhcm5pbmciPkFtb25lc3RhY2nDs248L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJMT0dfTEVWRUxfTEFCRUxfZXJyb3IiPkVycm9yPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iTE9HX0xFVkVMX0xBQkVMX2NyaXRpY2FsIj5Dcml0aWNvPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iTE9HX0xFVkVMX0xBQkVMX2FsZXJ0Ij5BbGVydGE8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJMT0dfTEVWRUxfTEFCRUxfZW1lcmdlbmN5Ij5FbWVyZ2VuY2lhPC9zdHJpbmc+CisKKyAgPHN0cmluZyBuYW1lPSJMT0dfQ0FURUdPUllfTEFCRUxfaW5wa3RzIj5QYXF1ZXRlcyBkZSBFbnRyYWRhPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iTE9HX0NBVEVHT1JZX0xBQkVMX291dHBrdHMiPlBhcXVldGVzIGRlIFNhbGlkYTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkxPR19DQVRFR09SWV9MQUJFTF9icmxrZXlzIj5FdmVudG9zIGRlIFRlY2xhcyBkZSBEaXNwb3NpdGl2b3MgZGUgQnJhaWxsZTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkxPR19DQVRFR09SWV9MQUJFTF9rYmRrZXlzIj5FdmVudG9zIGRlIFRlY2xhcyBkZSBUZWNsYWRvczwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkxPR19DQVRFR09SWV9MQUJFTF9jc3J0cmsiPlNlZ3VpbWllbnRvIGRlIEN1cnNvcjwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkxPR19DQVRFR09SWV9MQUJFTF9jc3JydGciPkVucnV0YW1pZW50byBkZSBDdXJzb3I8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJMT0dfQ0FURUdPUllfTEFCRUxfdXBkYXRlIj5FdmVudG9zIGRlIEFjdHVhbGl6YWNpw7NuPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iTE9HX0NBVEVHT1JZX0xBQkVMX3NwZWVjaCI+RXZlbnRvcyBkZWwgSGFibGE8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJMT0dfQ0FURUdPUllfTEFCRUxfYXN5bmMiPkV2ZW50b3MgZGUgQXN5bmM8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJMT0dfQ0FURUdPUllfTEFCRUxfc2VydmVyIj5FdmVudG9zIGRlIFNlcnZpZG9yPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iTE9HX0NBVEVHT1JZX0xBQkVMX2dpbyI+RS9TIGdlbsOpcmljYTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkxPR19DQVRFR09SWV9MQUJFTF9zZXJpYWwiPkUvUyBlbiBTZXJpZTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkxPR19DQVRFR09SWV9MQUJFTF91c2IiPkUvUyBVU0I8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJMT0dfQ0FURUdPUllfTEFCRUxfYnQiPkUvUyBCbHVldG9vdGg8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJMT0dfQ0FURUdPUllfTEFCRUxfaGlkIj5FL1MgZGUgaW50ZXJmYXogaHVtYW5hPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iTE9HX0NBVEVHT1JZX0xBQkVMX2JybGRydiI+RXZlbnRvcyBkZSBDb250cm9sYWRvciBkZSBCcmFpbGxlPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iTE9HX0NBVEVHT1JZX0xBQkVMX3Nwa2RydiI+RXZlbnRvcyBkZSBDb250cm9sYWRvciBkZSBIYWJsYTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkxPR19DQVRFR09SWV9MQUJFTF9zY3JkcnYiPkV2ZW50b3MgZGUgQ29udHJvbGFkb3IgZGUgUGFudGFsbGE8L3N0cmluZz4KKworICA8c3RyaW5nIG5hbWU9IkJSQUlMTEVfRFJJVkVSX0xBQkVMX2F1dG8iPkF1dG9kZXRlY3RlPC9zdHJpbmc+CisKKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX2F1dG8iPlNlbGVjY2nDs24gQXV0b23DoXRpY2EgQmFzYWRhIGVuIGxhIENvbmZpZ3VyYWNpw7NuIFJlZ2lvbmFsPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9hciI+w4FyYWJlIChnZW7DqXJpY288L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX2FzIj5Bc2Ftw6lzPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9hd2EiPkF3YWTDrTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfYmciPkLDumxnYXJvPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9iaCI+QmloYXLDrTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfYm4iPkJlbmdhbMOtPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9ibyI+VGliZXRhbm88L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX2JyYSI+QnJhajwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfYnJmIj5Gb3JtYWRvIGRlIExpc3RhIGVuIEJyYWlsbGUgKHBhcmEgdmlzdWFsaXphY2nDs24gZGUgYXJjaGl2b3MgQlJGIGRlbnRybyBkZSB1biBlZGl0b3IgbyBwYWdpbmFkb3IpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9jcyI+Q2hlY288L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX2N5Ij5HYWzDqXM8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX2RhIj5EYW7DqXM8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX2RhXzEyNTIiPkRhbsOpcyAoU3ZlbmQgVGhvdWdhYXJkLCAyMDAy4oCTMTHigJMxOCk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX2RhX2x0Ij5EYW7DqXMgKFRleHRvUmVnaXN0cm8pPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9kZSI+QWxlbcOhbjwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfZHJhIj5EcmF2aWRpYW5vPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9lbCI+R3JpZWdvPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9lbiI+SW5nbMOpczwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfZW5fQ0EiPkluZ2zDqXMgKENhbmFkw6EpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9lbl9HQiI+SW5nbMOpcyAoUmVpbm8gVW5pZG8pPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9lbl9uYWJjYyI+SW5nbMOpcyAoQ8OzZGlnbyBicmFpbGxlIGRlIGNvbXB1dGFkb3JhcyBub3J0ZWFtZXJpY2Fubyk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX2VuX1VTIj5Jbmdsw6lzIChFc3RhZG9zIFVuaWRvcyk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX2VvIj5Fc3BlcmFudG88L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX2VzIj5Fc3Bhw7FvbDwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfZXQiPkVzdG9uaW88L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX2ZpIj5GaW5sYW5kw6lzPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9mciI+RnJhbmPDqXM8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX2ZyXzIwMDciPkZyYW5jw6lzICh1bmlmaWNhZG8gMjAwNyk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX2ZyX0NBIj5GcmFuY8OpcyAoQ2FuYWTDoSk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX2ZyX2NiaWZzIj5GcmFuY8OpcyAoQ29kZSBCcmFpbGxlIEluZm9ybWF0aXF1ZSBGcmFuw4PCp2FpcyBlc3TDoW5kYXIpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9mcl9GUiI+RnJhbmPDqXMgKEZyYW5jaWEpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9mcl92cyI+RnJhbmPDqXMgKFZpc2lvQnJhaWxsZSk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX2dhIj5JcmxhbmTDqXM8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX2dkIj5HYcOpbGljbzwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfZ29uIj5Hb25kw608L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX2d1Ij5HdWphcmF0w608L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX2hlIj5IZWJyZW88L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX2hpIj5IaW5kw608L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX2hyIj5Dcm9hdGE8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX2h1Ij5Iw7puZ2Fybzwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfaHkiPkFybWVuaW88L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX2lzIj5Jc2xhbmTDqXM8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX2l0Ij5JdGFsaWFubzwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfa2hhIj5LaGFzw608L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX2tuIj5LYW5uYWRhPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9rb2siPktvbmthbsOtPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9rcnUiPkt1cnVraDwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfbHQiPkxpdHVhbm88L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX2x2Ij5MZXTDs248L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX21nIj5NYWxhZ2FzeTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfbWkiPk1hb3LDrTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfbWwiPk1hbGF5YWxhbTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfbW5pIj5NYW5pcHVyw608L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX21yIj5NYXJhdMOtPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9tdCI+TWFsdMOpczwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfbXVuIj5NdW5kYTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfbXdyIj5NYXJ3YXLDrTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfbmUiPk5lcGFsw608L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX25ldyI+TmV3YXLDrTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfbmwiPkhvbGFuZMOpczwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfbmxfQkUiPkhvbGFuZMOpcyAoQsOpbGdpY2EpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9ubF9OTCI+SG9sYW5kw6lzIChQYcOtc2VzIEJham9zKTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfbm8iPk5vcnVlZ288L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX25vX2dlbmVyaWMiPk5vcnVlZ28gKGNvbiBhcG95byBkZSBvdHJvcyBpZGlvbWFzKTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfbm9fb3VwIj5Ob3J1ZWdvIChPZmZlbnRsaWcgdXR2YWxnIGZvciBwdW5rdHNrcmlmdCk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX253YyI+TmV3YXLDrSAodmllam8pPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9vciI+T3JpeWE8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX3BhIj5QYW5qYWLDrTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfcGkiPlBhbMOtPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9wbCI+UG9sYWNvPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9wdCI+UG9ydHVndcOpczwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfcm8iPlJ1bWFubzwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfcnUiPlJ1c288L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX3NhIj5Tw6Fuc2NyaXRvPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9zYXQiPlNhbnRhbMOtPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9zZCI+U2luZMOtPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9zZSI+U2FtaSAoTm9ydGVubyk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX3NrIj5Fc2xvdmFjbzwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfc2wiPmVzbG92ZW5vPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9zdiI+U3VlY288L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX3N2XzE5ODkiPlN1ZWNvICgxOTg5IGVzdMOhbmRhcik8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX3N2XzE5OTYiPlN1ZWNvICgxOTk2IGVzdMOhbmRhcik8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX3N3Ij5Td2FoaWzDrTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfdGEiPlRhbWlsPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF90ZSI+VGVsdWd1PC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF90ciI+VHVyY288L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX3VrIj51Y3JhbmlvPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF92aSI+VmlldG5hbWl0YTwvc3RyaW5nPgorCisgIDxzdHJpbmcgbmFtZT0iQVRUUklCVVRFU19UQUJMRV9MQUJFTF9pbnZsZWZ0X3JpZ2h0Ij5jb2xvciBpbnZlcnNvIGRlbCBwcmltZXIgcGxhbm8gZW4gbGEgY29sdW1uYSBpc3F1aWVyZGEgeSBjb2xvciBkZWwgZm9uZG8gZW4gbGEgY29sdW1uYSBpc3F1aWVyZGE8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJBVFRSSUJVVEVTX1RBQkxFX0xBQkVMX2xlZnRfcmlnaHQiPmNvbG9yIGRlbCBwcmltZXIgcGxhbm8gZW4gbGEgY29sdW1uYSBpc3F1aWVyZGEgeSBjb2xvciBkZWwgZm9uZG8gZW4gbGEgY29sdW1uYSBkZXJlY2hhPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iQVRUUklCVVRFU19UQUJMRV9MQUJFTF91cHBlcl9sb3dlciI+Y29sb3IgZGVsIHByaW1lciBwbGFubyBlbiBlbCBjdWFkcm8gc3VwZXJpb3IgeSBjb2xvciBkZWwgZm9uZG8gZW4gZWwgY3VhZHJvIGluZmVyaW9yPC9zdHJpbmc+CisKKyAgPHN0cmluZyBuYW1lPSJDT05UUkFDVElPTl9UQUJMRV9MQUJFTF9hdXRvIj5TZWxlY2Npw7NuIEF1dG9tw6F0aWNhIEJhc2FkYSBlbiBsYSBDb25maWd1cmFjacOzbiBSZWdpb25hbDwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkNPTlRSQUNUSU9OX1RBQkxFX0xBQkVMX2FmIj5BZnJpY2FhbnMgKGNvbnRyYWNjaW9uYWRvKTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkNPTlRSQUNUSU9OX1RBQkxFX0xBQkVMX2FtIj5BbWhhcmljbyAoc2luIGNvbnRyYWNjaW9uZXMpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iQ09OVFJBQ1RJT05fVEFCTEVfTEFCRUxfZGUiPkFsZW3DoW48L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJDT05UUkFDVElPTl9UQUJMRV9MQUJFTF9kZV9nMCI+QWxlbcOhbiAoc2luIGNvbnRyYWNjaW9uZXMpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iQ09OVFJBQ1RJT05fVEFCTEVfTEFCRUxfZGVfZzEiPkFsZW3DoW4gKGNvbnRyYWNjaW9uZXMgYsOhc2ljYXMpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iQ09OVFJBQ1RJT05fVEFCTEVfTEFCRUxfZGVfZzIiPkFsZW3DoW4gKGNvbnRyYWNjaW9uYWRvKTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkNPTlRSQUNUSU9OX1RBQkxFX0xBQkVMX2RlXzE5OTgiPkFsZW3DoW4gKGNvbnRyYWNjaW9uYWRvIC0gZXN0w6FuZGFyIGRlIDE5OTgpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iQ09OVFJBQ1RJT05fVEFCTEVfTEFCRUxfZGVfMjAxNSI+QWxlbcOhbiAoY29udHJhY2Npb25hZG8gLSBlc3TDoW5kYXIgZGUgMjAxNSk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJDT05UUkFDVElPTl9UQUJMRV9MQUJFTF9lbiI+SW5nbMOpczwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkNPTlRSQUNUSU9OX1RBQkxFX0xBQkVMX2VuX1VTIj5Jbmdsw6lzIChFc3RhZG9zIFVuaWRvcyk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJDT05UUkFDVElPTl9UQUJMRV9MQUJFTF9lbl91ZWJfZzEiPkluZ2zDqXMgKFVuaWZpY2Fkbywgbm8gY29udHJhY2Npb25hZG8pPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iQ09OVFJBQ1RJT05fVEFCTEVfTEFCRUxfZW5fdWViX2cyIj5Jbmdsw6lzIChCcmFpbGxlIEluZ2zDqXMgdW5pZmljYWRvLCBncmFkbyAyKTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkNPTlRSQUNUSU9OX1RBQkxFX0xBQkVMX2VuX3VzX2cyIj5Jbmdsw6lzIChFc3RhZG9zIFVuaWRvcywgZ3JhZG8gMik8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJDT05UUkFDVElPTl9UQUJMRV9MQUJFTF9lcyI+RXNwYcOxb2wgKGdyYWRvIDIpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iQ09OVFJBQ1RJT05fVEFCTEVfTEFCRUxfZnIiPkZyYW5jw6lzICA8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJDT05UUkFDVElPTl9UQUJMRV9MQUJFTF9mcl9nMSI+RnJhbmPDqXMgKHNpbiBjb250cmFjY2lvbmVzKTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkNPTlRSQUNUSU9OX1RBQkxFX0xBQkVMX2ZyX2cyIj5GcmFuY8OpcyAoY29udHJhY2Npb25hZG8pPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iQ09OVFJBQ1RJT05fVEFCTEVfTEFCRUxfaGEiPkhhdXNhIChjb250cmFjY2lvbmFkbyk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJDT05UUkFDVElPTl9UQUJMRV9MQUJFTF9pZCI+SW5kb25lc2lvIChjb250cmFjY2lvbmFkbyk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJDT05UUkFDVElPTl9UQUJMRV9MQUJFTF9pcGEiPkFsZmFiZXRvIEZvbsOpdGljbyBJbnRlcm5hY2lvbmFsPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iQ09OVFJBQ1RJT05fVEFCTEVfTEFCRUxfamEiPkphcG9uw6lzIChzaW4gY29udHJhY2Npb25lcyk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJDT05UUkFDVElPTl9UQUJMRV9MQUJFTF9rbyI+Q29yZWFubzwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkNPTlRSQUNUSU9OX1RBQkxFX0xBQkVMX2tvX2cwIj5Db3JlYW5vIChzaW4gY29udHJhY2Npb25lcyk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJDT05UUkFDVElPTl9UQUJMRV9MQUJFTF9rb19nMSI+Q29yZWFubyAoZ3JhZG8gMSk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJDT05UUkFDVElPTl9UQUJMRV9MQUJFTF9rb19nMiI+Q29yZWFubyAoZ3JhZG8gMik8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJDT05UUkFDVElPTl9UQUJMRV9MQUJFTF9sdCI+TGl0dWFubyAoc2luIGNvbnRyYWNjaW9uZXMpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iQ09OVFJBQ1RJT05fVEFCTEVfTEFCRUxfbWciPk1hbGFnYXN5IChjb250cmFjY2lvbmFkbyk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJDT05UUkFDVElPTl9UQUJMRV9MQUJFTF9tdW4iPk11bmRhIChjb250cmFjY2lvbmFkbyk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJDT05UUkFDVElPTl9UQUJMRV9MQUJFTF9ubCI+SXNsYW5kw6lzIChjb250cmFjY2lvbmFkbyk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJDT05UUkFDVElPTl9UQUJMRV9MQUJFTF9ueSI+Q2hpY2hld2EgKGNvbnRyYWNjaW9uYWRvKTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkNPTlRSQUNUSU9OX1RBQkxFX0xBQkVMX3B0Ij5Qb3J0dWfDqXMgKGdyYWRvIDIpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iQ09OVFJBQ1RJT05fVEFCTEVfTEFCRUxfcnUiPlJ1c28gKGNvbnRyYXRhZG8pPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iQ09OVFJBQ1RJT05fVEFCTEVfTEFCRUxfc2kiPlNpbmhhbMOpcyAoc2luIGNvbnRyYWNjaW9uZXMpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iQ09OVFJBQ1RJT05fVEFCTEVfTEFCRUxfc3ciPlN3YWhpbMOtIChjb250cmFjY2lvbmFkbyk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJDT05UUkFDVElPTl9UQUJMRV9MQUJFTF90aCI+VGlsYW5kw6lzIChjb250cmFjY2lvbmFkbyk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJDT05UUkFDVElPTl9UQUJMRV9MQUJFTF96aF9UVyI+Q2hpbm8gKFRhaXdhbiwgc2luIGNvbnRyYWNjaW9uZXMpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iQ09OVFJBQ1RJT05fVEFCTEVfTEFCRUxfenUiPlp1bMO6IChjb250cmFjY2lvbmFkbyk8L3N0cmluZz4KKworICA8c3RyaW5nIG5hbWU9IktFWUJPQVJEX1RBQkxFX0xBQkVMX2JyYWlsbGUiPnZpbmN1bGFudGVzIHBhcmEgdGVjbGFkb3MgYnJhaWxsZTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IktFWUJPQVJEX1RBQkxFX0xBQkVMX2Rlc2t0b3AiPnZpbmN1bGFudGVzIHBhcmEgdGVjbGFkb3MgcGxlbm9zPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iS0VZQk9BUkRfVEFCTEVfTEFCRUxfa2V5cGFkIj52aW5jdWxhbnRlcyBwYXJhIG5hdmlnYWNjacOzbiBkZSB0ZWNsYWRvIG51bcOpcmljbzwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IktFWUJPQVJEX1RBQkxFX0xBQkVMX2xhcHRvcCI+dmluY3VsYW50ZXMgcGFyYSB0ZWNsYWRvcyBzaW4gdGVjbGFkbyBudW3DqXJpY288L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJLRVlCT0FSRF9UQUJMRV9MQUJFTF9zdW5fdHlwZTYiPnZpbmN1bGFudGVzIHBhcmEgdGVjbGFkb3MgU3VuIFRpcG8gNjwvc3RyaW5nPgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9BbmRyb2lkL0dyYWRsZS9hcHAvc3JjL21haW4vcmVzL3ZhbHVlcy1mYS9zdHJpbmdzLnhtbCBiL0FuZHJvaWQvR3JhZGxlL2FwcC9zcmMvbWFpbi9yZXMvdmFsdWVzLWZhL3N0cmluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNkMmZjNzQKLS0tIC9kZXYvbnVsbAorKysgYi9BbmRyb2lkL0dyYWRsZS9hcHAvc3JjL21haW4vcmVzL3ZhbHVlcy1mYS9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDI4MiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KKworPHJlc291cmNlcz4KKyAgPHN0cmluZyBuYW1lPSJhcHBfZGVzY3JpcHRpb24iPkJSTFRUWSDYp9iyINiv2LPYqtqv2KfZh9mH2KfbjCDYrti3INio2LHbjNmEINm+2LTYqtuM2KjYp9mG24wg2YXbjNqp2YbYryAuPC9zdHJpbmc+CisKKyAgPHN0cmluZyBuYW1lPSJhYm91dF9sYWJlbF9hY3Rpdml0eSI+2K/Ysdio2KfYsdmHINmG2LHZheKAjNin2YHYstin2LE8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJhYm91dF9sYWJlbF9jb3B5cmlnaHQiPtit2YIg2KfZhtiq2LTYp9ixPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iYWJvdXRfbGFiZWxfYnVpbGRUaW1lIj7YstmF2KfZhiDYs9in2K7Yqjwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9ImFib3V0X2xhYmVsX3NvdXJjZVJldmlzaW9uIj7YqNin2LLZhtqv2LHbjCDZhdmG2KjYuTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9ImFib3V0X2xhYmVsX3ByaXZhY3lQb2xpY3kiPtit2LHbjNmFINi02K7YtduMPC9zdHJpbmc+CisKKyAgPHN0cmluZyBuYW1lPSJpbnB1dFNlcnZpY2VfbmFtZSI+QlJMVFRZINiu2K/Zhdin2Kog2YjYsdmI2K/bjDwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9ImlucHV0U2VydmljZV90eXBlIj7YtdmB2K3ZhyDaqdmE24zYr9mH2KfbjCDYr9iz2Krar9in2Ycg2KjYsduM2YQ8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJpbnB1dFNlcnZpY2Vfbm90X2VuYWJsZWQiPtiu2K/Zhdin2Kog2YjYsdmI2K/bjCDZgdi52KfZhCDZhti02K/ZhyDYp9iz2Ko8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJpbnB1dFNlcnZpY2Vfbm90X3NlbGVjdGVkIj7Yrtiv2YXYp9iqINmI2LHZiNiv24wg2KfZhtiq2K7Yp9ioINmG2LTYr9mHINin2LPYqjwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9ImlucHV0U2VydmljZV9ub3Rfc3RhcnRlZCI+2K7Yr9mF2KfYqiDZiNix2YjYr9uMINin2KzYsdinINmG2LTYr9mHINin2LPYqjwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9ImlucHV0U2VydmljZV9ub3RfY29ubmVjdGVkIj7Yrtiv2YXYp9iqINmI2LHZiNiv24wg2YjYtdmEINmG24zYs9iqPC9zdHJpbmc+CisKKyAgPHN0cmluZyBuYW1lPSJ1cGRhdGVBcHBsaWNhdGlvbl9wcm9ibGVtX2ZhaWxlZCI+2KjYsdmG2KfZhdmHINio2LHZiNiy2LHYs9in2YbbjCDZhti02K/Zhzwvc3RyaW5nPgorCisgIDxzdHJpbmcgbmFtZT0icGFja2FnZUluc3RhbGxlcl9wcm9ibGVtX2ZhaWxlZCI+2KjYs9iq2Ycg2YbYtdioINmG2LTYrzwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9InBhY2thZ2VJbnN0YWxsZXJfcHJvYmxlbV9zYW1lIj7Zhtiz2K7ZhyDbjNqp2LPYp9mGPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0icGFja2FnZUluc3RhbGxlcl9wcm9ibGVtX2Rvd25ncmFkZSI+2KfYrNin2LLZhyDYudmC2KjigIzar9ix2K8g2YjYrNmI2K8g2YbYr9in2LHYrzwvc3RyaW5nPgorCisgIDxzdHJpbmcgbmFtZT0iZmlsZURvd25sb2FkZXJfdGl0bGUiPkJSTFRUWSBGaWxlINiv2KfZhtmE2YjYryDaqdmG2YbYr9mHPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iZmlsZURvd25sb2FkZXJfcHJvYmxlbV9mYWlsZWQiPtmB2KfbjNmEINiv2KfZhtmE2YjYryDZhti02K88L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJmaWxlRG93bmxvYWRlcl9zdGF0ZV9jb25uZWN0aW5nIj7Yr9ixINit2KfZhCDYp9iq2LXYp9mEPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iZmlsZURvd25sb2FkZXJfc3RhdGVfZG93bmxvYWRpbmciPtiv2LEg2K3Yp9mEINiv2KfZhtmE2YjYrzwvc3RyaW5nPgorCisgIDxzdHJpbmcgbmFtZT0ic2V0dGluZ19zdGF0ZV9vZmYiPtiu2KfZhdmI2LQ8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJjaGVja2JveF9zdGF0ZV91bmNoZWNrZWQiPtiu24zYsTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9ImNoZWNrYm94X3N0YXRlX2NoZWNrZWQiPtio2YTZhzwvc3RyaW5nPgorCisgIDxzdHJpbmcgbmFtZT0iYnJhaWxsZV9jaGFubmVsX25hbWUiPtmI2LbYuduM2Kog2K/Ys9iq2q/Yp9mHINio2LHbjNmEPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iYnJhaWxsZV9oaW50X3RhcCI+2KjYsdin24wg2LHYp9mH2YbZhdin24zbjCDYp9uM2YYg2YbZgti32Ycg2LHYpyDYqNmB2LTYp9ix24zYrzwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9ImJyYWlsbGVfc3RhdGVfcmVsZWFzZWQiPtmI2LbYuduM2Kog2KfZhtiq2LTYp9ixINiv2LPYqtqv2KfZhzwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9ImJyYWlsbGVfc3RhdGVfd2FpdGluZyI+2LXYqNixINqp2YbbjNivPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iYnJhaWxsZV9zdGF0ZV9jb25uZWN0ZWQiPtmF2KrYtdmEINi02K88L3N0cmluZz4KKworICA8c3RyaW5nIG5hbWU9IkdMT0JBTF9CVVRUT05fTk9USUZJQ0FUSU9OUyI+2KfYudmE2KfZhtmH2Kc8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJHTE9CQUxfQlVUVE9OX1FVSUNLX1NFVFRJTkdTIj7YqtmG2LjbjNmF2KfYqiDYs9ix24zYuTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkdMT0JBTF9CVVRUT05fQkFDSyI+2KjYp9iy2q/YtNiqPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iR0xPQkFMX0JVVFRPTl9IT01FIj7Yrtin2YbZhzwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkdMT0JBTF9CVVRUT05fUkVDRU5UX0FQUFMiPtmG2LHZheKAjNin2YHYstin2LEg2YfYp9uMINin2K7bjNixPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iR0xPQkFMX0JVVFRPTl9PVkVSVklFVyI+2q/Ystin2LHYtCDaqdmE24w8L3N0cmluZz4KKworICA8c3RyaW5nIG5hbWU9IkdMT0JBTF9CVVRUT05fU1dJVENIX0lOUFVUX01FVEhPRCI+2LHZiNi0INiq2LrbjNuM2LEg2YjYsdmI2K/bjDwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkdMT0JBTF9CVVRUT05fVklFV19VU0VSX0dVSURFIj7ZhtmF2KfbjNi0INix2KfZh9mG2YXYp9uMINqp2KfYsdio2LE8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJHTE9CQUxfQlVUVE9OX0JST1dTRV9XRUJfU0lURSI+2q/YtNiq2YYg2K/YsSDZiNioINiz2KfbjNiqPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iR0xPQkFMX0JVVFRPTl9CUk9XU0VfQ09NTVVOSVRZX01FU1NBR0VTIj7ar9i02KrZhiDYr9ixINm+24zYp9mF4oCM2YfYp9uMINqv2LHZiNmHPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iR0xPQkFMX0JVVFRPTl9QT1NUX0NPTU1VTklUWV9NRVNTQUdFIj7Yp9ix2LPYp9mEINm+24zYp9mFINiv2LEg2q/YsdmI2Yc8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJHTE9CQUxfQlVUVE9OX01BTkFHRV9DT01NVU5JVFlfTUVNQkVSU0hJUCI+2YXYr9uM2LHbjNiqINi52LbZiNuM2Kog2K/YsSDar9ix2YjZhzwvc3RyaW5nPgorCisgIDxzdHJpbmcgbmFtZT0iR0xPQkFMX0JVVFRPTl9VUERBVEVfQVBQTElDQVRJT04iPtio2YfigIzYsdmI2LIg2LHYs9in2YbbjCDZhtix2YXigIzYp9mB2LLYp9ixPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iR0xPQkFMX0NIRUNLQk9YX0RFVkVMT1BFUl9CVUlMRCI+2LPYp9iu2Kog2KrZiNiz2LnZhyDYr9mH2YbYr9mHPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iR0xPQkFMX0NIRUNLQk9YX0FMTE9XX0RPV05HUkFERSI+2KfYrNin2LLZhyDYudmC2KjigIzar9ix2K88L3N0cmluZz4KKworICA8c3RyaW5nIG5hbWU9IkNIT09TRVJfVElUTEVfQUNDRVNTSUJJTElUWV9BQ1RJT05TIj7YudmF2YTbjNin2Kog2K/Ys9iq2LHYs9uMPC9zdHJpbmc+CisKKyAgPHN0cmluZyBuYW1lPSJTRVRUSU5HU19TQ1JFRU5fTUFJTiI+QlJMVFRZINiq2YbYuNuM2YXYp9iqPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iU0VUVElOR1NfU0NSRUVOX0dFTkVSQUwiPtiq2YbYuNuM2YXYp9iqINi52YXZiNmF24w8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJTRVRUSU5HU19TQ1JFRU5fTUVTU0FHRSI+2KrZhti424zZhdin2Kog2b7bjNin2YU8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJTRVRUSU5HU19TQ1JFRU5fREVWSUNFUyI+2YXYr9uM2LHbjNiqINiv2LPYqtqv2KfZh+KAjNmH2Kc8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJTRVRUSU5HU19TQ1JFRU5fQURWQU5DRUQiPtiq2YbYuNuM2YXYp9iqINm+24zYtNix2YHYqtmHPC9zdHJpbmc+CisKKyAgPHN0cmluZyBuYW1lPSJTRVRUSU5HU19DSEVDS0JPWF9SRUxFQVNFX0JSQUlMTEVfREVWSUNFIj7Yp9mG2KrYtNin2LEg2K/Ys9iq2q/Yp9mHINio2LHbjNmEPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iU0VUVElOR1NfQlVUVE9OX05BVklHQVRJT05fTU9ERSI+2K3Yp9mE2Kog2YXYs9uM2LHbjNin2KjbjDwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlNFVFRJTkdTX0JVVFRPTl9TUEVFQ0hfU1VQUE9SVCI+2b7YtNiq24zYqNin2YbbjCDYp9iyINqv2YHYqtin2LE8L3N0cmluZz4KKworICA8c3RyaW5nIG5hbWU9IlNFVFRJTkdTX0JVVFRPTl9URVhUX1RBQkxFIj7YrNiv2YjZhCDZhtmI2LTYqtmHPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iU0VUVElOR1NfQlVUVE9OX0FUVFJJQlVURVNfVEFCTEUiPti12YHYp9iqINis2K/ZiNmEPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iU0VUVElOR1NfQlVUVE9OX0NPTlRSQUNUSU9OX1RBQkxFIj7Yp9iu2KrYtdin2LEg2KzYr9mI2YQ8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJTRVRUSU5HU19CVVRUT05fS0VZQk9BUkRfVEFCTEUiPtis2K/ZiNmEINi12YHYrdmHINqp2YTbjNivPC9zdHJpbmc+CisKKyAgPHN0cmluZyBuYW1lPSJTRVRUSU5HU19DSEVDS0JPWF9TSE9XX0FMRVJUUyI+2YbZhdin24zYtCDYp9iu2LfYp9ix2YfYpzwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlNFVFRJTkdTX0NIRUNLQk9YX1NIT1dfQU5OT1VOQ0VNRU5UUyI+2YbZhdin24zYtCDYp9i52YTYp9mF24zZhyDZh9inPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iU0VUVElOR1NfQ0hFQ0tCT1hfU0hPV19OT1RJRklDQVRJT05TIj7ZhtmF2KfbjNi0INin2LnZhNin2YYg2YfYpzwvc3RyaW5nPgorCisgIDxzdHJpbmcgbmFtZT0iU0VUVElOR1NfQlVUVE9OX0xPR19MRVZFTCI+2LPYt9itINqv2LLYp9ix2LQ8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJTRVRUSU5HU19CVVRUT05fTE9HX0NBVEVHT1JJRVMiPtiv2LPYqtmHINio2YbYr9uMINmH2KfbjCDar9iy2KfYsdi0PC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iU0VUVElOR1NfQ0hFQ0tCT1hfTE9HX0FDQ0VTU0lCSUxJVFlfRVZFTlRTIj7ar9iy2KfYsdi0INmE2K3YuNin2Kog2K/Ys9iq2LHYs9uMPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iU0VUVElOR1NfQ0hFQ0tCT1hfTE9HX1JFTkRFUkVEX1NDUkVFTiI+2q/Ystin2LHYtCDYsdmG2K/YsSDYtdmB2K3Zhzwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlNFVFRJTkdTX0NIRUNLQk9YX0xPR19LRVlCT0FSRF9FVkVOVFMiPtqv2LLYp9ix2LQg2YTYrdi42KfYqiDYtdmB2K3ZhyDaqdmE24zYrzwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlNFVFRJTkdTX0NIRUNLQk9YX0xPR19VTkhBTkRMRURfRVZFTlRTIj7ar9iy2KfYsdi0INmE2K3YuNin2Kog2LrbjNixINmF2KrYsdmC2KjZhzwvc3RyaW5nPgorCisgIDxzdHJpbmcgbmFtZT0iREVWSUNFU19CVVRUT05fU0VMRUNURUQiPtiv2LPYqtqv2KfZhyDYp9mG2KrYrtin2Kgg2LTYr9mHPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iREVWSUNFU19CVVRUT05fQUREIj7Yp9i22KfZgdmHINqp2LHYr9mGINiv2LPYqtqv2KfZhzwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkRFVklDRVNfQlVUVE9OX1JFTU9WRSI+2K3YsNmBINiv2LPYqtqv2KfZhzwvc3RyaW5nPgorCisgIDxzdHJpbmcgbmFtZT0iU0VMRUNURURfREVWSUNFX05PTkUiPtiv2LPYqtqv2KfZh9uMINuM2KfZgdiqINmG2LTYrzwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlNFTEVDVEVEX0RFVklDRV9VTlNFTEVDVEVEIj7Yr9iz2Krar9in2YfbjCDYp9mG2KrYrtin2Kgg2YbYtNivPC9zdHJpbmc+CisKKyAgPHN0cmluZyBuYW1lPSJBRERfREVWSUNFX05BTUUiPtmG2KfZhSDYr9iz2Krar9in2Yc8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJBRERfREVWSUNFX01FVEhPRCI+2LHZiNi0INin2LHYqtio2KfYtyDYr9iz2Krar9in2Yc8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJBRERfREVWSUNFX1NFTEVDVCI+2K/Ys9iq2q/Yp9mH24wg2LHYpyDYp9mG2KrYrtin2Kgg2qnZhtuM2K88L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJBRERfREVWSUNFX0RSSVZFUiI+2LHYp9mHINin2YbYr9in2LIg2KjYsduM2YQg2LHYpyDYp9mG2KrYrtin2Kgg2qnZhtuM2K88L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJBRERfREVWSUNFX0RPTkUiPtio2Kcg2YXZiNmB2YLbjNiqINin2YbYrNin2YUg2LTYrzwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkFERF9ERVZJQ0VfVU5TRUxFQ1RFRF9NRVRIT0QiPtix2YjYtCDYp9ix2KrYqNin2Lcg2KfZhtiq2K7Yp9ioINmG2LTYrzwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkFERF9ERVZJQ0VfVU5TRUxFQ1RFRF9ERVZJQ0UiPtiv2LPYqtqv2KfZhyDYp9mG2KrYrtin2Kgg2YbYtNivPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iQUREX0RFVklDRV9VTlNFTEVDVEVEX0RSSVZFUiI+2LHYp9mHINin2YbYr9in2LIg2KjYsduM2YQg2KfZhtiq2K7Yp9ioINmG2LTYrzwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkFERF9ERVZJQ0VfTk9fREVWSUNFUyI+2K/Ys9iq2q/Yp9mH24wg24zYp9mB2Kog2YbYtNivPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iQUREX0RFVklDRV9EVVBMSUNBVEVfTkFNRSI+2YbYp9mFINiv2LPYqtqv2KfZhyDYqtqp2LHYp9ix24wg2KfYs9iqPC9zdHJpbmc+CisKKyAgPHN0cmluZyBuYW1lPSJSRU1PVkVfREVWSUNFX1BST01QVCI+2KLbjNinINmI2KfZgti52Kcg2YXYp9uM2YTbjNivINqp2Ycg2KfbjNmGINiv2LPYqtqv2KfZhyDYsdinINit2LDZgSDaqdmG24zYr9ifPC9zdHJpbmc+CisKKyAgPHN0cmluZyBuYW1lPSJTRVRfU0VMRUNUSU9OX05PTkUiPtqG24zYstuMINin2YbYqtiu2KfYqCDZhti02K/Zhzwvc3RyaW5nPgorCisgIDxzdHJpbmcgbmFtZT0iTkFWSUdBVElPTl9NT0RFX0xBQkVMX0xpc3QiPtmE24zYs9iqINi52YXZiNiv24w8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJOQVZJR0FUSU9OX01PREVfTEFCRUxfR3JpZCI+2K7YtyDaqdi024wg2K/ZiCDYqNi52K/bjDwvc3RyaW5nPgorCisgIDxzdHJpbmcgbmFtZT0iU1BFRUNIX1NVUFBPUlRfTEFCRUxfbmF0aXZlIj7Ys9in2LLar9in2LE8L3N0cmluZz4KKworICA8c3RyaW5nIG5hbWU9IkNPTU1VTklDQVRJT05fTUVUSE9EX0xBQkVMX0JsdWV0b290aCI+2KjZhNmI2KrZiNirPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iQ09NTVVOSUNBVElPTl9NRVRIT0RfTEFCRUxfVXNiIj7bjNmIINin2LMg2KjbjDwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkNPTU1VTklDQVRJT05fTUVUSE9EX0xBQkVMX1NlcmlhbCI+2b7ZiNix2Kog2LPYsduM2KfZhDwvc3RyaW5nPgorCisgIDxzdHJpbmcgbmFtZT0iTE9HX0xFVkVMX0xBQkVMX2RlYnVnIj7YuduM2Kgg24zYp9io24w8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJMT0dfTEVWRUxfTEFCRUxfaW5mb3JtYXRpb24iPtin2LfZhNin2LnYp9iqPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iTE9HX0xFVkVMX0xBQkVMX25vdGljZSI+2KrZiNis2Yc8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJMT0dfTEVWRUxfTEFCRUxfd2FybmluZyI+2YfYtNiv2KfYsTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkxPR19MRVZFTF9MQUJFTF9lcnJvciI+2K7Yt9inPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iTE9HX0xFVkVMX0xBQkVMX2NyaXRpY2FsIj7YqNit2LHYp9mG24w8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJMT0dfTEVWRUxfTEFCRUxfYWxlcnQiPtin2K7Yt9in2LE8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJMT0dfTEVWRUxfTEFCRUxfZW1lcmdlbmN5Ij7Yttix2YjYsduMPC9zdHJpbmc+CisKKyAgPHN0cmluZyBuYW1lPSJMT0dfQ0FURUdPUllfTEFCRUxfaW5wa3RzIj7YqNiz2KrZhyDZh9in24wg2YjYsdmI2K/bjDwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkxPR19DQVRFR09SWV9MQUJFTF9vdXRwa3RzIj7YqNiz2KrZhyDZh9in24wg2K7YsdmI2KzbjDwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkxPR19DQVRFR09SWV9MQUJFTF9icmxrZXlzIj7ZhNit2LjYp9iqINqp2YTbjNiv2YfYp9uMINiv2LPYqtqv2KfZhyDYqNix24zZhDwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkxPR19DQVRFR09SWV9MQUJFTF9rYmRrZXlzIj7ZhNit2LjYp9iqINqp2YTbjNiv2YfYp9uMINi12YHYrdmHINqp2YTbjNivPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iTE9HX0NBVEVHT1JZX0xBQkVMX2NzcnRyayI+Q3Vyc29yINm+24zar9uM2LHbjDwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkxPR19DQVRFR09SWV9MQUJFTF9jc3JydGciPkN1cnNvciDZhdiz24zYsSDYs9mG2KzbjDwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkxPR19DQVRFR09SWV9MQUJFTF91cGRhdGUiPtio2Ycg2LHZiNiyINix2LPYp9mG24wg2YTYrdi42KfYqjwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkxPR19DQVRFR09SWV9MQUJFTF9zcGVlY2giPtmE2K3YuNin2Kog2q/Zgdiq2KfYsTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkxPR19DQVRFR09SWV9MQUJFTF9hc3luYyI+QXN5bmMg2YTYrdi42KfYqjwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkxPR19DQVRFR09SWV9MQUJFTF9zZXJ2ZXIiPtmE2K3YuNin2Kog2LPYsdmI24zYsyDYr9mH2YbYr9mHPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iTE9HX0NBVEVHT1JZX0xBQkVMX3NlcmlhbCI+2YHYudin2YTbjNiqINiz2LHbjNin2YQ8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJMT0dfQ0FURUdPUllfTEFCRUxfdXNiIj7Zgdi52KfZhNuM2Kog24zZiCDYp9izINio24w8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJMT0dfQ0FURUdPUllfTEFCRUxfYnQiPtmB2LnYp9mE24zYqiDYqNmE2YjYqtmI2Ks8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJMT0dfQ0FURUdPUllfTEFCRUxfYnJsZHJ2Ij7ZhNit2LjYp9iqINix2KfZhyDYp9mG2K/Yp9iyINio2LHbjNmEPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iTE9HX0NBVEVHT1JZX0xBQkVMX3Nwa2RydiI+2YTYrdi42KfYqiDYsdin2Ycg2KfZhtiv2KfYsiDar9mB2KrYp9ixPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iTE9HX0NBVEVHT1JZX0xBQkVMX3NjcmRydiI+2YTYrdi42KfYqiDYsdin2Ycg2KfZhtiv2KfYsiDYtdmB2K3Zhzwvc3RyaW5nPgorCisgIDxzdHJpbmcgbmFtZT0iQlJBSUxMRV9EUklWRVJfTEFCRUxfYXV0byI+2LTZhtin2LPYp9uM24wg2KfYqtmI2YXYp9iq24zaqTwvc3RyaW5nPgorCisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9hdXRvIj7Yp9mG2KrYrtin2Kgg2KfYqtmI2YXYp9iq24zaqSDYqNixINmF2KjZhtin24wg2YXYrdmEPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9hciI+2LnYsdio24w8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX2FzIj5Bc3NhbWVzZTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfYXdhIj5Bd2FkaGk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX2JnIj7YqNmE2LrYp9ix24w8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX2JoIj5CaWhhcmk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX2JuIj7YqNmG2q/Yp9mE24w8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX2JvIj5UaWJldGFuPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9icmEiPkJyYWo8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX2JyZiI+QnJhaWxsZSBSZWFkeSBGb3JtYXQgKGZvciB2aWV3aW5nIC5icmYgZmlsZXMgd2l0aGluIGFuIGVkaXRvciBvciBwYWdlcik8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX2NzIj7ahtqpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9jeSI+2YjZhNiy24w8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX2RhXzEyNTIiPkRhbmlzaCAoU3ZlbmQgVGhvdWdhYXJkLCAyMDAy4oCTMTHigJMxOCk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX2RhIj7Yr9in2YbZhdin2LHaqduMPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9kYV9sdCI+RGFuaXNoIChMb2dUZXh0KTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfZGUiPtii2YTZhdin2YbbjDwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfZHJhIj5EcmF2aWRpYW48L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX2VsIj7bjNmI2YbYp9mG24w8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX2VuX0NBIj7Yp9mG2q/ZhNuM2LPbjCAo2qnYp9mG2KfYr9inKTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfZW4iPtin2Ybar9mE24zYs9uMPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9lbl9HQiI+2KfZhtqv2YTbjNiz24wgKNin2Ybar9mE2LPYqtin2YYpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9lbl9uYWJjYyI+2KfZhtqv2YTbjNiz24wgKNi02YXYp9mEINii2YXYsduM2qnYpyk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX2VuX1VTIj7Yp9mG2q/ZhNuM2LPbjCAo2KfbjNin2YTYp9iqINmF2KrYrdiv2Ycg2KLZhdix24zaqdinKTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfZW8iPkVzcGVyYW50bzwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfZXMiPtin2LPZvtin2YbbjNin24zbjDwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfZXQiPtin2LPYqtmI2YbbjNin24zbjDwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfZmkiPtmB2YbZhNin2YbYr9uMPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9mcl8yMDA3Ij5GcmVuY2ggKHVuaWZpZWQgMjAwNyk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX2ZyX0NBIj7Zgdix2KfZhtiz2YjbjCAo2qnYp9mG2KfYr9inKTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfZnJfY2JpZnMiPkZyZW5jaCAoQ29kZSBCcmFpbGxlIEluZm9ybWF0aXF1ZSBGcmFuw6dhaXMgU3RhbmRhcmQpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9mciI+2YHYsdin2YbYs9mI24w8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX2ZyX0ZSIj7Zgdix2KfZhtiz2YjbjCAo2YHYsdin2YbYs9mHKTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfZnJfdnMiPkZyZW5jaCAoVmlzaW9CcmFpbGxlKTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfZ2EiPtin24zYsdmE2YbYr9uMPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9nZCI+R2FlbGljPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9nb24iPkdvbmRpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9ndSI+R3VqYXJhdGk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX2hlIj7Yudio2LHbjDwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfaGkiPtmH2YbYr9uMPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9ociI+2qnYsdmI2KfYs9uM2KfbjNuMPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9odSI+2YXYrNin2LHbjDwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfaHkiPtin2LHZhdmG24w8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX2lzIj7Yp9uM2LPZhNmG2K/bjDwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfaXQiPtin24zYqtin2YTbjNin24zbjDwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfa2hhIj5LaGFzaTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfa24iPkthbm5hZGE8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX2tvayI+S29ua2FuaTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfa3J1Ij5LdXJ1a2g8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX2x0Ij7ZhNuM2KrZiNin2YbbjNin24zbjDwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfbHYiPtmE2KrZiNmG24zYp9uM24w8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX21nIj5NYWxhZ2FzeTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfbWkiPk1hb3JpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9tbCI+TWFsYXlhbGFtPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9tbmkiPk1hbmlwdXJpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9tciI+TWFyYXRoaTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfbXQiPk1hbHRlc2U8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX211biI+TXVuZGE8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX213ciI+TWFyd2FyaTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfbmUiPtmG2b7Yp9mE24w8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX25ldyI+TmV3YXJpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9ubF9CRSI+RHV0Y2ggKEJlbGdpdW0pPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9ubCI+RHV0Y2g8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX25sX05MIj5EdXRjaCAoTmV0aGVybGFuZHMpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9ub19nZW5lcmljIj5Ob3J3ZWdpYW4gKHdpdGggc3VwcG9ydCBmb3Igb3RoZXIgbGFuZ3VhZ2VzKTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfbm8iPk5vcndlZ2lhbjwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfbm9fb3VwIj5Ob3J3ZWdpYW4gKE9mZmVudGxpZyB1dHZhbGcgZm9yIHB1bmt0c2tyaWZ0KTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfbndjIj5OZXdhcmkgKG9sZCk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX29yIj5Pcml5YTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfcGEiPtm+2YbYrNin2KjbjDwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfcGkiPlBhbGk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX3BsIj7ZhNmH2LPYqtin2YbbjDwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfcHQiPtm+2LHYqti62KfZhNuMPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9ybyI+Um9tYW5pYW48L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX3J1Ij7YsdmI2LPbjDwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfc2EiPlNhbnNrcml0PC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9zYXQiPlNhbnRhbGk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX3NkIj5TaW5kaGk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX3NlIj5TYW1pIChOb3J0aGVybik8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX3NrIj5TbG92YWs8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX3NsIj7Yp9iz2YTZiNmG24zYp9uM24w8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX3N2XzE5ODkiPlN3ZWRpc2ggKDE5ODkgc3RhbmRhcmQpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9zdl8xOTk2Ij5Td2VkaXNoICgxOTk2IHN0YW5kYXJkKTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfc3YiPtiz2YjYptiv24w8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX3N3Ij5Td2FoaWxpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF90YSI+VGFtaWw8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX3RlIj5UZWx1Z3U8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX3RyIj7Yqtix2qnbjDwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfdWsiPtin2qnYsdin24zZhtuMPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF92aSI+2YjbjNiq2YbYp9mF24w8L3N0cmluZz4KKworICA8c3RyaW5nIG5hbWU9IkFUVFJJQlVURVNfVEFCTEVfTEFCRUxfaW52bGVmdF9yaWdodCI+2KzYp9io2Ycg2KzYp9uM24wg2LHZhtqvINm+24zYtCDYstmF24zZhtmHINiv2LEg2LPYqtmI2YYg2obZviDYqNinINix2YbaryDZvtizINiy2YXbjNmG2Ycg2K/YsSDYs9iq2YjZhiDYsdin2LPYqjwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkFUVFJJQlVURVNfVEFCTEVfTEFCRUxfbGVmdF9yaWdodCI+2LHZhtqvINm+24zYtCDYstmF24zZhtmHINiv2LEg2LPYqtmI2YYg2obZviDZiCDYsdmG2q8g2b7YsyDYstmF24zZhtmHINiv2LEg2LPYqtmI2YYg2LHYp9iz2Ko8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJBVFRSSUJVVEVTX1RBQkxFX0xBQkVMX3VwcGVyX2xvd2VyIj7YsdmG2q8g2b7bjNi0INiy2YXbjNmG2Ycg2K/YsSDZhdix2KjYuSDYqNin2YTYp9uM24wg2Ygg2LHZhtqvINm+2LMg2LLZhduM2YbZhyDYr9ixINmF2LHYqNi5INm+2KfbjNuM2YbbjDwvc3RyaW5nPgorCisgIDxzdHJpbmcgbmFtZT0iQ09OVFJBQ1RJT05fVEFCTEVfTEFCRUxfYXV0byI+2KfZhtiq2K7Yp9ioINin2KrZiNmF2KfYqtuM2qkg2KjYsSDZhdio2YbYp9uMINmF2K3ZhDwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkNPTlRSQUNUSU9OX1RBQkxFX0xBQkVMX2FmIj7YotmB2LHbjNmC2KfbjNuMIChjb250cmFjdGVkKTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkNPTlRSQUNUSU9OX1RBQkxFX0xBQkVMX2FtIj5BbWhhcmljICh1bmNvbnRyYWN0ZWQpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iQ09OVFJBQ1RJT05fVEFCTEVfTEFCRUxfZGUiPtii2YTZhdin2YbbjDwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkNPTlRSQUNUSU9OX1RBQkxFX0xBQkVMX2RlX2cwIj5HZXJtYW4gKHVuY29udHJhY3RlZCk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJDT05UUkFDVElPTl9UQUJMRV9MQUJFTF9kZV9nMSI+R2VybWFuIChiYXNpYyBjb250cmFjdGlvbnMpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iQ09OVFJBQ1RJT05fVEFCTEVfTEFCRUxfZGVfZzIiPkdlcm1hbiAoY29udHJhY3RlZCk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJDT05UUkFDVElPTl9UQUJMRV9MQUJFTF9kZV8xOTk4Ij5HZXJtYW4gKGNvbnRyYWN0ZWQgLSAxOTk4IHN0YW5kYXJkKTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkNPTlRSQUNUSU9OX1RBQkxFX0xBQkVMX2RlXzIwMTUiPkdlcm1hbiAoY29udHJhY3RlZCAtIDIwMTUgc3RhbmRhcmQpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iQ09OVFJBQ1RJT05fVEFCTEVfTEFCRUxfZW4iPtin2Ybar9mE24zYs9uMPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iQ09OVFJBQ1RJT05fVEFCTEVfTEFCRUxfZW5fVVMiPtin2Ybar9mE24zYs9uMICjYp9uM2KfZhNin2Kog2YXYqtit2K/Zhyk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJDT05UUkFDVElPTl9UQUJMRV9MQUJFTF9lbl91ZWJfZzIiPkVuZ2xpc2ggKFVuaWZpZWQgRW5nbGlzaCBCcmFpbGxlLCBncmFkZSAyKTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkNPTlRSQUNUSU9OX1RBQkxFX0xBQkVMX2VuX3VzX2cyIj5FbmdsaXNoIChVUywgZ3JhZGUgMik8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJDT05UUkFDVElPTl9UQUJMRV9MQUJFTF9lcyI+U3BhbmlzaCAoZ3JhZGUgMik8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJDT05UUkFDVElPTl9UQUJMRV9MQUJFTF9mciI+2YHYsdin2LPZiNuMPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iQ09OVFJBQ1RJT05fVEFCTEVfTEFCRUxfZnJfZzEiPkZyZW5jaCAodW5jb250cmFjdGVkKTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkNPTlRSQUNUSU9OX1RBQkxFX0xBQkVMX2ZyX2cyIj5GcmVuY2ggKGNvbnRyYWN0ZWQpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iQ09OVFJBQ1RJT05fVEFCTEVfTEFCRUxfaGEiPkhhdXNhIChjb250cmFjdGVkKTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkNPTlRSQUNUSU9OX1RBQkxFX0xBQkVMX2lkIj5JbmRvbmVzaWFuIChjb250cmFjdGVkKTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkNPTlRSQUNUSU9OX1RBQkxFX0xBQkVMX2lwYSI+SW50ZXJuYXRpb25hbCBQaG9uZXRpYyBBbHBoYWJldDwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkNPTlRSQUNUSU9OX1RBQkxFX0xBQkVMX2phIj5KYXBhbmVzZSAodW5jb250cmFjdGVkKTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkNPTlRSQUNUSU9OX1RBQkxFX0xBQkVMX2tvIj7aqdix2YfigIzYp9uMPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iQ09OVFJBQ1RJT05fVEFCTEVfTEFCRUxfa29fZzEiPktvcmVhbiAoZ3JhZGUgMSk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJDT05UUkFDVElPTl9UQUJMRV9MQUJFTF9rb19nMiI+S29yZWFuIChncmFkZSAyKTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkNPTlRSQUNUSU9OX1RBQkxFX0xBQkVMX2tvX2cwIj5Lb3JlYW4gKHVuY29udHJhY3RlZCk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJDT05UUkFDVElPTl9UQUJMRV9MQUJFTF9sdCI+TGl0aHVhbmlhbiAodW5jb250cmFjdGVkKTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkNPTlRSQUNUSU9OX1RBQkxFX0xBQkVMX21nIj5NYWxhZ2FzeSAoY29udHJhY3RlZCk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJDT05UUkFDVElPTl9UQUJMRV9MQUJFTF9tdW4iPk11bmRhIChjb250cmFjdGVkKTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkNPTlRSQUNUSU9OX1RBQkxFX0xBQkVMX25sIj5EdXRjaCAoY29udHJhY3RlZCk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJDT05UUkFDVElPTl9UQUJMRV9MQUJFTF9ueSI+Q2hpY2hld2EgKGNvbnRyYWN0ZWQpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iQ09OVFJBQ1RJT05fVEFCTEVfTEFCRUxfcHQiPlBvcnR1Z3Vlc2UgKGdyYWRlIDIpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iQ09OVFJBQ1RJT05fVEFCTEVfTEFCRUxfcnUiPtix2YjYs9uMPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iQ09OVFJBQ1RJT05fVEFCTEVfTEFCRUxfc2kiPlNpbmhhbGVzZSAodW5jb250cmFjdGVkKTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkNPTlRSQUNUSU9OX1RBQkxFX0xBQkVMX3N3Ij5Td2FoaWxpIChjb250cmFjdGVkKTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkNPTlRSQUNUSU9OX1RBQkxFX0xBQkVMX3RoIj5UaGFpIChjb250cmFjdGVkKTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkNPTlRSQUNUSU9OX1RBQkxFX0xBQkVMX3poX1RXIj5DaGluZXNlIChUYWl3YW4sIHVuY29udHJhY3RlZCk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJDT05UUkFDVElPTl9UQUJMRV9MQUJFTF96dSI+WnVsdSAoY29udHJhY3RlZCk8L3N0cmluZz4KKworICA8c3RyaW5nIG5hbWU9IktFWUJPQVJEX1RBQkxFX0xBQkVMX2JyYWlsbGUiPtm+24zZiNiz2Kog2KjYsduM2YQg2KjYsdin24wg2LXZgdit2Ycg2qnZhNuM2K8g2KjYsduM2YQ8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJLRVlCT0FSRF9UQUJMRV9MQUJFTF9kZXNrdG9wIj7ZvtuM2YjYs9iqINiv2LPaqdiq2KfZviDYqNix2KfbjCDYtdmB2K3ZhyDaqdmE24zYryDaqdin2YXZhDwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IktFWUJPQVJEX1RBQkxFX0xBQkVMX2tleXBhZCI+2b7bjNmI2LPYqiDaqdmE24zYryDZhdin2LTbjNmGINit2LPYp9ioINio2LHYp9uMINmF2LPbjNix24zYp9io24wg2KjYsSDZvtin24zZhyDaqdmE24zYryDZhdin2LTbjNmGINit2LPYp9ioPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iS0VZQk9BUkRfVEFCTEVfTEFCRUxfbGFwdG9wIj7ZvtuM2YjYs9iqINmE2KjYqtin2b4g2KjYsdin24wg2qnbjNio2LHYr9mH2KfbjCDYqNiv2YjZhiDZhdin2LTbjNmGINit2LPYp9ioPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iS0VZQk9BUkRfVEFCTEVfTEFCRUxfc3VuX3R5cGU2Ij7ZvtuM2YjYs9iqINio2LHYp9uMINi12YHYrdmHINqp2YTbjNivIDYg2q/Yp9mG2Ycg2K7ZiNix2LTbjNiv24w8L3N0cmluZz4KKzwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvQW5kcm9pZC9HcmFkbGUvYXBwL3NyYy9tYWluL3Jlcy92YWx1ZXMtZmkvc3RyaW5ncy54bWwgYi9BbmRyb2lkL0dyYWRsZS9hcHAvc3JjL21haW4vcmVzL3ZhbHVlcy1maS9zdHJpbmdzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNDAxOGNlCi0tLSAvZGV2L251bGwKKysrIGIvQW5kcm9pZC9HcmFkbGUvYXBwL3NyYy9tYWluL3Jlcy92YWx1ZXMtZmkvc3RyaW5ncy54bWwKQEAgLTAsMCArMSwyODIgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+CisKKzxyZXNvdXJjZXM+CisgIDxzdHJpbmcgbmFtZT0iYXBwX2Rlc2NyaXB0aW9uIj5CUkxUVFkgdHVrZWUgcGlzdGVuw6R5dHTDtmrDpC48L3N0cmluZz4KKworICA8c3RyaW5nIG5hbWU9ImFib3V0X2xhYmVsX2FjdGl2aXR5Ij5UaWV0b2Egc292ZWxsdWtzZXN0YTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9ImFib3V0X2xhYmVsX2NvcHlyaWdodCI+VGVraWrDpG5vaWtldXM8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJhYm91dF9sYWJlbF9idWlsZFRpbWUiPkvDpMOkbm7DtmtzZW4gYWphbmtvaHRhPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iYWJvdXRfbGFiZWxfc291cmNlUmV2aXNpb24iPkzDpGhkZWtvb2RpbiByZXZpc2lvPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iYWJvdXRfbGFiZWxfcHJpdmFjeVBvbGljeSI+VGlldG9qYSB5a3NpdHlpc3l5ZGVuc3VvamFzdGE8L3N0cmluZz4KKworICA8c3RyaW5nIG5hbWU9ImlucHV0U2VydmljZV9uYW1lIj5CUkxUVFk6biBzecO2dGVwYWx2ZWx1PC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iaW5wdXRTZXJ2aWNlX3R5cGUiPlBpc3RlbsOkeXR0w7ZqZW4gbsOkcHDDpGltaXN0w7Z0PC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iaW5wdXRTZXJ2aWNlX25vdF9lbmFibGVkIj5TecO2dGVwYWx2ZWx1IGVpIG9sZSBrw6R5dMO2c3PDpDwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9ImlucHV0U2VydmljZV9ub3Rfc2VsZWN0ZWQiPlN5w7Z0ZXBhbHZlbHVhIGVpIG9sZSB2YWxpdHR1PC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iaW5wdXRTZXJ2aWNlX25vdF9zdGFydGVkIj5TecO2dGVwYWx2ZWx1YSBlaSBvbGUga8OkeW5uaXN0ZXR0eTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9ImlucHV0U2VydmljZV9ub3RfY29ubmVjdGVkIj5TecO2dGVwYWx2ZWx1YSBlaSBvbGUgeWhkaXN0ZXR0eTwvc3RyaW5nPgorCisgIDxzdHJpbmcgbmFtZT0idXBkYXRlQXBwbGljYXRpb25fcHJvYmxlbV9mYWlsZWQiPnNvdmVsbHVzdGEgZWkgcMOkaXZpdGV0dHk8L3N0cmluZz4KKworICA8c3RyaW5nIG5hbWU9InBhY2thZ2VJbnN0YWxsZXJfcHJvYmxlbV9mYWlsZWQiPnBha2V0dGlhIGVpIGFzZW5uZXR0dTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9InBhY2thZ2VJbnN0YWxsZXJfcHJvYmxlbV9zYW1lIj5zYW1hIHZlcnNpbzwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9InBhY2thZ2VJbnN0YWxsZXJfcHJvYmxlbV9kb3duZ3JhZGUiPmFsYXNww6RpbiBww6Rpdml0dMOkbWlzdMOkIGVpIHNhbGxpdGE8L3N0cmluZz4KKworICA8c3RyaW5nIG5hbWU9ImZpbGVEb3dubG9hZGVyX3RpdGxlIj5CUkxUVFktdGllZG9zdG9sYXRhYWphPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iZmlsZURvd25sb2FkZXJfcHJvYmxlbV9mYWlsZWQiPnRpZWRvc3RvYSBlaSBsYWRhdHR1PC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iZmlsZURvd25sb2FkZXJfc3RhdGVfY29ubmVjdGluZyI+eWhkaXN0ZXTDpMOkbjwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9ImZpbGVEb3dubG9hZGVyX3N0YXRlX2Rvd25sb2FkaW5nIj5sYWRhdGFhbjwvc3RyaW5nPgorCisgIDxzdHJpbmcgbmFtZT0ic2V0dGluZ19zdGF0ZV9vZmYiPlBvaXM8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJjaGVja2JveF9zdGF0ZV91bmNoZWNrZWQiPkVpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iY2hlY2tib3hfc3RhdGVfY2hlY2tlZCI+S3lsbMOkPC9zdHJpbmc+CisKKyAgPHN0cmluZyBuYW1lPSJicmFpbGxlX2NoYW5uZWxfbmFtZSI+UGlzdGVraXJqb2l0dXNsYWl0dGVlbiB0aWxhPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iYnJhaWxsZV9oaW50X3RhcCI+TmFwYXV0YSBzYWFkYWtzZXNpIHRvaW1pbnRvamE8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJicmFpbGxlX3N0YXRlX3JlbGVhc2VkIj5WYXBhdXRldHR1PC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iYnJhaWxsZV9zdGF0ZV93YWl0aW5nIj5PZG90dGFhPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iYnJhaWxsZV9zdGF0ZV9jb25uZWN0ZWQiPlloZGlzdGV0dHk8L3N0cmluZz4KKworICA8c3RyaW5nIG5hbWU9IkdMT0JBTF9CVVRUT05fTk9USUZJQ0FUSU9OUyI+SWxtb2l0dWtzZXQ8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJHTE9CQUxfQlVUVE9OX1FVSUNLX1NFVFRJTkdTIj5QaWthLWFzZXR1a3NldDwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkdMT0JBTF9CVVRUT05fQkFDSyI+VGFrYWlzaW48L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJHTE9CQUxfQlVUVE9OX0hPTUUiPktvdGk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJHTE9CQUxfQlVUVE9OX1JFQ0VOVF9BUFBTIj5WaWltZWlzaW1tw6R0IHNvdmVsbHVrc2V0PC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iR0xPQkFMX0JVVFRPTl9PVkVSVklFVyI+WWxlaXNrYXRzYXVzPC9zdHJpbmc+CisKKyAgPHN0cmluZyBuYW1lPSJHTE9CQUxfQlVUVE9OX1NXSVRDSF9JTlBVVF9NRVRIT0QiPlZhaWhkYSBzecO2dHTDtm1lbmV0ZWxtw6TDpDwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkdMT0JBTF9CVVRUT05fVklFV19VU0VSX0dVSURFIj5Ow6R5dMOkIGvDpHl0dMO2b3Bhczwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkdMT0JBTF9CVVRUT05fQlJPV1NFX1dFQl9TSVRFIj5TZWxhYSB2ZXJra29zaXZ1c3RvYTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkdMT0JBTF9CVVRUT05fQlJPV1NFX0NPTU1VTklUWV9NRVNTQUdFUyI+U2VsYWEgeWh0ZWlzw7ZuIHZpZXN0ZWrDpDwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkdMT0JBTF9CVVRUT05fUE9TVF9DT01NVU5JVFlfTUVTU0FHRSI+TMOkaGV0w6QgeWh0ZWlzw7Z2aWVzdGk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJHTE9CQUxfQlVUVE9OX01BTkFHRV9DT01NVU5JVFlfTUVNQkVSU0hJUCI+SGFsbGlubm9pIHlodGVpc8O2asOkc2VueXl0dMOkPC9zdHJpbmc+CisKKyAgPHN0cmluZyBuYW1lPSJHTE9CQUxfQlVUVE9OX1VQREFURV9BUFBMSUNBVElPTiI+UMOkaXZpdMOkIHNvdmVsbHVzPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iR0xPQkFMX0NIRUNLQk9YX0RFVkVMT1BFUl9CVUlMRCI+S2VoaXR0w6Rqw6RuIGtvb250aXZlcnNpbzwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkdMT0JBTF9DSEVDS0JPWF9BTExPV19ET1dOR1JBREUiPlNhbGxpIGFsYXNww6RpbiBww6Rpdml0dMOkbWluZW48L3N0cmluZz4KKworICA8c3RyaW5nIG5hbWU9IkNIT09TRVJfVElUTEVfQUNDRVNTSUJJTElUWV9BQ1RJT05TIj5IZWxwcG9rw6R5dHTDtnRvaW1pbm5vdDwvc3RyaW5nPgorCisgIDxzdHJpbmcgbmFtZT0iU0VUVElOR1NfU0NSRUVOX01BSU4iPkJSTFRUWTpuIGFzZXR1a3NldDwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlNFVFRJTkdTX1NDUkVFTl9HRU5FUkFMIj5ZbGVpc2V0PC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iU0VUVElOR1NfU0NSRUVOX01FU1NBR0UiPlZpZXN0aWFzZXR1a3NldDwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlNFVFRJTkdTX1NDUkVFTl9ERVZJQ0VTIj5MYWl0dGVpZGVuIGhhbGxpbnRhPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iU0VUVElOR1NfU0NSRUVOX0FEVkFOQ0VEIj5MaXPDpGFzZXR1a3NldDwvc3RyaW5nPgorCisgIDxzdHJpbmcgbmFtZT0iU0VUVElOR1NfQ0hFQ0tCT1hfUkVMRUFTRV9CUkFJTExFX0RFVklDRSI+VmFwYXV0YSBwaXN0ZWtpcmpvaXR1c2xhaXRlPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iU0VUVElOR1NfQlVUVE9OX05BVklHQVRJT05fTU9ERSI+TmF2aWdvaW50aXRpbGE8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJTRVRUSU5HU19CVVRUT05fU1BFRUNIX1NVUFBPUlQiPlB1aGV0dWtpPC9zdHJpbmc+CisKKyAgPHN0cmluZyBuYW1lPSJTRVRUSU5HU19CVVRUT05fVEVYVF9UQUJMRSI+VGVrc3RpdGF1bHVra288L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJTRVRUSU5HU19CVVRUT05fQVRUUklCVVRFU19UQUJMRSI+TcOkw6RyZXRhdWx1a2tvPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iU0VUVElOR1NfQlVUVE9OX0NPTlRSQUNUSU9OX1RBQkxFIj5MeWhlbm5ldGF1bHVra288L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJTRVRUSU5HU19CVVRUT05fS0VZQk9BUkRfVEFCTEUiPk7DpHBww6RpbnRhdWx1a2tvPC9zdHJpbmc+CisKKyAgPHN0cmluZyBuYW1lPSJTRVRUSU5HU19DSEVDS0JPWF9TSE9XX0FMRVJUUyI+TsOkeXTDpCBow6RseXR5a3NldDwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlNFVFRJTkdTX0NIRUNLQk9YX1NIT1dfQU5OT1VOQ0VNRU5UUyI+TsOkeXTDpCB0aWVkb3R1a3NldDwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlNFVFRJTkdTX0NIRUNLQk9YX1NIT1dfTk9USUZJQ0FUSU9OUyI+TsOkeXTDpCBpbG1vaXR1a3NldDwvc3RyaW5nPgorCisgIDxzdHJpbmcgbmFtZT0iU0VUVElOR1NfQlVUVE9OX0xPR19MRVZFTCI+TG9raXRhc288L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJTRVRUSU5HU19CVVRUT05fTE9HX0NBVEVHT1JJRVMiPkxva2lrYXRlZ29yaWF0PC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iU0VUVElOR1NfQ0hFQ0tCT1hfTE9HX0FDQ0VTU0lCSUxJVFlfRVZFTlRTIj5UYWxsZW5uYSBzYWF2dXRldHRhdnV1c3RhcGFodHVtYXQgbG9raWluPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iU0VUVElOR1NfQ0hFQ0tCT1hfTE9HX1JFTkRFUkVEX1NDUkVFTiI+VGFsbGVubmEgaGFobW9ubmV0dHUgbsOkeXR0w7YgbG9raWluPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iU0VUVElOR1NfQ0hFQ0tCT1hfTE9HX0tFWUJPQVJEX0VWRU5UUyI+VGFsbGVubmEgbsOkcHDDpGltaXN0w7Z0YXBhaHR1bWF0IGxva2lpbjwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlNFVFRJTkdTX0NIRUNLQk9YX0xPR19VTkhBTkRMRURfRVZFTlRTIj5Mb2cgS8Okc2l0dGVsZW3DpHR0w7Ztw6R0IHRhcGFodHVtYXQ8L3N0cmluZz4KKworICA8c3RyaW5nIG5hbWU9IkRFVklDRVNfQlVUVE9OX1NFTEVDVEVEIj5WYWxpdHR1IGxhaXRlPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iREVWSUNFU19CVVRUT05fQUREIj5MaXPDpMOkIGxhaXRlPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iREVWSUNFU19CVVRUT05fUkVNT1ZFIj5Qb2lzdGEgbGFpdGU8L3N0cmluZz4KKworICA8c3RyaW5nIG5hbWU9IlNFTEVDVEVEX0RFVklDRV9OT05FIj5laSBsYWl0dGVpdGE8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJTRUxFQ1RFRF9ERVZJQ0VfVU5TRUxFQ1RFRCI+bGFpdGV0dGEgZWkgb2xlIHZhbGl0dHU8L3N0cmluZz4KKworICA8c3RyaW5nIG5hbWU9IkFERF9ERVZJQ0VfTkFNRSI+TGFpdHRlZW4gbmltaTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkFERF9ERVZJQ0VfTUVUSE9EIj5ZaHRleXNtZW5ldGVsbcOkPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iQUREX0RFVklDRV9TRUxFQ1QiPlZhbGl0c2UgbGFpdGU8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJBRERfREVWSUNFX0RSSVZFUiI+UGlzdGVuw6R5dHTDtmFqdXJpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iQUREX0RFVklDRV9ET05FIj5WYWxtaXM8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJBRERfREVWSUNFX1VOU0VMRUNURURfTUVUSE9EIj55aHRleXNtZW5ldGVsbcOkw6QgZWkgb2xlIHZhbGl0dHU8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJBRERfREVWSUNFX1VOU0VMRUNURURfREVWSUNFIj5sYWl0ZXR0YSBlaSBvbGUgdmFsaXR0dTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkFERF9ERVZJQ0VfVU5TRUxFQ1RFRF9EUklWRVIiPnBpc3RlbsOkeXR0w7ZhanVyaWEgZWkgb2xlIHZhbGl0dHU8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJBRERfREVWSUNFX05PX0RFVklDRVMiPmVpIGxhaXR0ZWl0YTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkFERF9ERVZJQ0VfRFVQTElDQVRFX05BTUUiPmxhaXRlbmltaSBvbiBqbyBrw6R5dMO2c3PDpDwvc3RyaW5nPgorCisgIDxzdHJpbmcgbmFtZT0iUkVNT1ZFX0RFVklDRV9QUk9NUFQiPkhhbHVhdGtvIHZhcm1hc3RpIHBvaXN0YWEgdMOkbcOkbiBsYWl0dGVlbj88L3N0cmluZz4KKworICA8c3RyaW5nIG5hbWU9IlNFVF9TRUxFQ1RJT05fTk9ORSI+ZWkgdmFsaW50YWE8L3N0cmluZz4KKworICA8c3RyaW5nIG5hbWU9Ik5BVklHQVRJT05fTU9ERV9MQUJFTF9MaXN0Ij5QeXN0eXN1dW50YWluZW4gbGlzdGE8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJOQVZJR0FUSU9OX01PREVfTEFCRUxfR3JpZCI+S2Frc2l1bG90dGVpbmVuIHJ1dWR1a2tvPC9zdHJpbmc+CisKKyAgPHN0cmluZyBuYW1lPSJTUEVFQ0hfU1VQUE9SVF9MQUJFTF9uYXRpdmUiPkFsa3VwZXLDpGluZW48L3N0cmluZz4KKworICA8c3RyaW5nIG5hbWU9IkNPTU1VTklDQVRJT05fTUVUSE9EX0xBQkVMX0JsdWV0b290aCI+Qmx1ZXRvb3RoPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iQ09NTVVOSUNBVElPTl9NRVRIT0RfTEFCRUxfVXNiIj5VU0I8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJDT01NVU5JQ0FUSU9OX01FVEhPRF9MQUJFTF9TZXJpYWwiPlNhcmphcG9ydHRpPC9zdHJpbmc+CisKKyAgPHN0cmluZyBuYW1lPSJMT0dfTEVWRUxfTEFCRUxfZGVidWciPlZpcmhlZW5rb3JqYXVzPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iTE9HX0xFVkVMX0xBQkVMX2luZm9ybWF0aW9uIj5UaWVkb3Q8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJMT0dfTEVWRUxfTEFCRUxfbm90aWNlIj5IdW9tYXV0dXM8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJMT0dfTEVWRUxfTEFCRUxfd2FybmluZyI+VmFyb2l0dXM8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJMT0dfTEVWRUxfTEFCRUxfZXJyb3IiPlZpcmhlPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iTE9HX0xFVkVMX0xBQkVMX2NyaXRpY2FsIj5LcmlpdHRpbmVuPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iTE9HX0xFVkVMX0xBQkVMX2FsZXJ0Ij5Iw6RseXR5czwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkxPR19MRVZFTF9MQUJFTF9lbWVyZ2VuY3kiPkjDpHTDpHRpbGFubmU8L3N0cmluZz4KKworICA8c3RyaW5nIG5hbWU9IkxPR19DQVRFR09SWV9MQUJFTF9pbnBrdHMiPlN5w7Z0ZXBha2V0aXQ8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJMT0dfQ0FURUdPUllfTEFCRUxfb3V0cGt0cyI+VHVsb3N0dXNwYWtldGl0PC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iTE9HX0NBVEVHT1JZX0xBQkVMX2JybGtleXMiPlBpc3RlbsOkeXTDtm4gbsOkcHDDpGludGFwYWh0dW1hdDwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkxPR19DQVRFR09SWV9MQUJFTF9rYmRrZXlzIj5Ow6RwcMOkaW1pc3TDtm4gbsOkcHDDpGludGFwYWh0dW1hdDwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkxPR19DQVRFR09SWV9MQUJFTF9jc3J0cmsiPktvaGRpc3RpbWVuIHNldXJhbnRhPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iTE9HX0NBVEVHT1JZX0xBQkVMX2NzcnJ0ZyI+S29oZGlzdGltZW4gc2lpcnTDpG1pbmVuPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iTE9HX0NBVEVHT1JZX0xBQkVMX3VwZGF0ZSI+UMOkaXZpdHlzdGFwYWh0dW1hdDwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkxPR19DQVRFR09SWV9MQUJFTF9zcGVlY2giPlB1aGV0YXBhaHR1bWF0PC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iTE9HX0NBVEVHT1JZX0xBQkVMX2FzeW5jIj5Bc3lua3JvbmlzZXQgdGFwYWh0dW1hdDwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkxPR19DQVRFR09SWV9MQUJFTF9zZXJ2ZXIiPlBhbHZlbGludGFwYWh0dW1hdDwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkxPR19DQVRFR09SWV9MQUJFTF9zZXJpYWwiPlNhcmphcG9ydGluIHN5w7Z0dMO2L3R1bG9zdHVzPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iTE9HX0NBVEVHT1JZX0xBQkVMX3VzYiI+VVNCOm4gc3nDtnR0w7YvdHVsb3N0dXM8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJMT0dfQ0FURUdPUllfTEFCRUxfYnQiPkJsdWV0b290aGluIHN5w7Z0dMO2L3R1bG9zdHVzPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iTE9HX0NBVEVHT1JZX0xBQkVMX2JybGRydiI+UGlzdGVuw6R5dHTDtmFqdXJpbiB0YXBhaHR1bWF0PC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iTE9HX0NBVEVHT1JZX0xBQkVMX3Nwa2RydiI+UHVoZWFqdXJpbiB0YXBhaHR1bWF0PC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iTE9HX0NBVEVHT1JZX0xBQkVMX3NjcmRydiI+TsOkeXR0w7ZhanVyaW4gdGFwYWh0dW1hdDwvc3RyaW5nPgorCisgIDxzdHJpbmcgbmFtZT0iQlJBSUxMRV9EUklWRVJfTEFCRUxfYXV0byI+dHVubmlzdGEgYXV0b21hYXR0aXNlc3RpPC9zdHJpbmc+CisKKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX2F1dG8iPmF1dG9tYWF0dGluZW4gdmFsaW50YSBraWVsaWFzZXR1c3RlbiBtdWthYW48L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX2FyIj5BcmFiaWEgKHlsZWluZW4pPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9hcyI+QXNzYW1pPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9hd2EiPkF3YWRoaTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfYmciPkJ1bGdhcmlhPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9iaCI+QmloYXJpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9ibiI+QmVuZ2FsaTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfYm8iPlRpaWJldDwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfYnJhIj5CcmFqPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9icmYiPkJyYWlsbGUgUmVhZHkgRm9ybWF0ICguYnJmLXRpZWRvc3RvamVuIGthdHNlbGVtaXNlZW4gbXVva2thaW4tIHRhaSBrYXRzZWx1c292ZWxsdWtzZXNzYSk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX2NzIj5Uc2hla2tpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9jeSI+V2FsZXM8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX2RhIj5UYW5za2E8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX2RhXzEyNTIiPlRhbnNrYSAoU3ZlbmQgVGhvdWdhYXJkLCAyMDAy4oCTMTHigJMxOCk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX2RhX2x0Ij5UYW5za2EgKExvZ1RleHQpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9kZSI+U2Frc2E8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX2RyYSI+RHJhdmlkaWE8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX2VsIj5LcmVpa2thPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9lbiI+RW5nbGFudGk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX2VuX0NBIj5FbmdsYW50aSAoS2FuYWRhKTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfZW5fR0IiPkVuZ2xhbnRpIChJc28tQnJpdGFubmlhKTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfZW5fbmFiY2MiPkVuZ2xhbnRpIChwb2hqb2lzYW1lcmlra2FsYWluZW4gdGlldG9rb25lbWVya2lzdMO2KTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfZW5fVVMiPkVuZ2xhbnRpIChZaGR5c3ZhbGxhdCk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX2VvIj5Fc3BlcmFudG88L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX2VzIj5Fc3BhbmphPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9ldCI+Vmlybzwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfZmkiPlN1b21pPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9mciI+UmFuc2thPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9mcl8yMDA3Ij5SYW5za2EgKHloZGVubXVrYWlzdGV0dHUgMjAwNyk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX2ZyX0NBIj5SYW5za2EgKEthbmFkYSk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX2ZyX2NiaWZzIj5SYW5za2EgKENvZGUgQnJhaWxsZSBJbmZvcm1hdGlxdWUgRnJhbsOnYWlzIFN0YW5kYXJkKTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfZnJfRlIiPlJhbnNrYSAoUmFuc2thKTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfZnJfdnMiPlJhbnNrYSAoVmlzaW9CcmFpbGxlKTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfZ2EiPklpcmk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX2dkIj5HYWVsPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9nb24iPkdvbmRpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9ndSI+R3VqYXJhdGk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX2hlIj5IZXByZWE8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX2hpIj5IaW5kaTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfaHIiPktyb2F0aWE8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX2h1Ij5Vbmthcmk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX2h5Ij5Bcm1lbmlhPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9pcyI+SXNsYW50aTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfaXQiPkl0YWxpYTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfa2hhIj5LaGFzaTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfa24iPkthbm5hZGE8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX2tvayI+S29ua2FuaTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfa3J1Ij5LdXJ1a2g8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX2x0Ij5saWV0dHVhPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9sdiI+bGF0dmlhPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9tZyI+bWFsYWdhc3NpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9taSI+bWFvcmk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX21sIj5tYWxhamFsYW08L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX21uaSI+bWFuaXB1cmk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX21yIj5tYXJhdGhpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9tdCI+bWFsdGE8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX211biI+bXVuZGE8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX213ciI+bWFyd2FyaTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfbmUiPm5lcGFsaTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfbmV3Ij5uZXdhcmk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX25sIj5ob2xsYW50aTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfbmxfQkUiPmhvbGxhbnRpIChCZWxnaWEpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9ubF9OTCI+aG9sbGFudGkgKEhvbGxhbnRpKTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfbm8iPm5vcmphPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9ub19nZW5lcmljIj5ub3JqYSAodHVraSBtdWlsbGUga2llbGlsbGUpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9ub19vdXAiPm5vcmphIChPZmZlbnRsaWcgVXR2YWxnIGZvciBCbGluZGVza3JpZnQpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9ud2MiPm5ld2FyaSAodmFuaGEpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9vciI+b3JpamE8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX3BhIj5wdW5qYWJpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9waSI+cGFsaTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfcGwiPnB1b2xhPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9wdCI+cG9ydHVnYWxpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9ybyI+cm9tYW5pYTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfcnUiPnZlbsOkasOkPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9zYSI+c2Fuc2tyaXQ8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX3NhdCI+c2FudGFsaTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfc2QiPnNpbmRoaTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfc2UiPnNhYW1lIChwb2hqb2lzc2FhbWUpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9zayI+c2xvdmFra2k8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX3NsIj5zbG92ZW5pYTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfc3YiPnJ1b3RzaTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfc3ZfMTk4OSI+cnVvdHNpICgxOTg5IHN0YW5kYXJkaSk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX3N2XzE5OTYiPnJ1b3RzaSAoMTk5NiBzdGFuZGFyZGkpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9zdyI+c3dhaGlsaTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfdGEiPnRhbWlsaTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfdGUiPnRlbHVndTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfdHIiPnR1cmtraTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfdWsiPnVrcmFpbmE8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX3ZpIj52aWV0bmFtPC9zdHJpbmc+CisKKyAgPHN0cmluZyBuYW1lPSJBVFRSSUJVVEVTX1RBQkxFX0xBQkVMX2ludmxlZnRfcmlnaHQiPmvDpMOkbnRlaW5lbiBlZHVzdGFuIHbDpHJpIHZhc2VtbWFzc2Egc2FyYWtrZWVzc2EgamEgdGF1c3RhdsOkcmkgb2lrZWFzc2Egc2FyYWtrZWVzc2E8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJBVFRSSUJVVEVTX1RBQkxFX0xBQkVMX2xlZnRfcmlnaHQiPmVkdXN0YW4gdsOkcmkgdmFzZW1tYXNzYSBzYXJha2tlZXNzYSBqYSB0YXVzdGF2w6RyaSBvaWtlYXNzYSBzYXJha2tlZXNzYTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkFUVFJJQlVURVNfVEFCTEVfTEFCRUxfdXBwZXJfbG93ZXIiPmVkdXN0YW4gdsOkcmkgeWzDpG9zYXNzYSBqYSB0YXVzdGF2w6RyaSBhbGFvc2Fzc2E8L3N0cmluZz4KKworICA8c3RyaW5nIG5hbWU9IkNPTlRSQUNUSU9OX1RBQkxFX0xBQkVMX2F1dG8iPmF1dG9tYWF0dGluZW4gdmFsaW50YSBraWVsaWFzZXR1c3RlbiBtdWthYW48L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJDT05UUkFDVElPTl9UQUJMRV9MQUJFTF9hZiI+YWZyaWthYW5zIChseWhlbm5la2lyam9pdHVzKTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkNPTlRSQUNUSU9OX1RBQkxFX0xBQkVMX2FtIj5hbWhhcmEgKHRhdmFsbGluZW4ga2lyam9pdHVzKTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkNPTlRSQUNUSU9OX1RBQkxFX0xBQkVMX2RlIj5zYWtzYTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkNPTlRSQUNUSU9OX1RBQkxFX0xBQkVMX2RlX2cwIj5zYWtzYSAodGF2YWxsaW5lbiBraXJqb2l0dXMpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iQ09OVFJBQ1RJT05fVEFCTEVfTEFCRUxfZGVfZzEiPnNha3NhIChwZXJ1c2x5aGVudGVldCk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJDT05UUkFDVElPTl9UQUJMRV9MQUJFTF9kZV9nMiI+c2Frc2EgKGx5aGVubmVraXJqb2l0dXMpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iQ09OVFJBQ1RJT05fVEFCTEVfTEFCRUxfZGVfMTk5OCI+c2Frc2EgKGx5aGVubmVraXJqb2l0dXMgLSAxOTk4IHN0YW5kYXJkaSk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJDT05UUkFDVElPTl9UQUJMRV9MQUJFTF9kZV8yMDE1Ij5zYWtzYSAobHloZW5uZWtpcmpvaXR1cyAtIDIwMTUgc3RhbmRhcmRpKTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkNPTlRSQUNUSU9OX1RBQkxFX0xBQkVMX2VuIj5lbmdsYW50aTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkNPTlRSQUNUSU9OX1RBQkxFX0xBQkVMX2VuX1VTIj5FbmdsYW50aSAoWWhkeXN2YWxsYXQpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iQ09OVFJBQ1RJT05fVEFCTEVfTEFCRUxfZW5fdWViX2cyIj5lbmdsYW50aSAoVW5pZmllZCBFbmdsaXNoIEJyYWlsbGUsIHRhc28gMik8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJDT05UUkFDVElPTl9UQUJMRV9MQUJFTF9lbl91c19nMiI+ZW5nbGFudGkgKFloZHlzdmFsbGF0LCB0YXNvIDIpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iQ09OVFJBQ1RJT05fVEFCTEVfTEFCRUxfZXMiPmVzcGFuamEgKHRhc28gMik8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJDT05UUkFDVElPTl9UQUJMRV9MQUJFTF9mciI+cmFuc2thPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iQ09OVFJBQ1RJT05fVEFCTEVfTEFCRUxfZnJfZzEiPnJhbnNrYSAodGF2YWxsaW5lbiBraXJqb2l0dXMpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iQ09OVFJBQ1RJT05fVEFCTEVfTEFCRUxfZnJfZzIiPnJhbnNrYSAobHloZW5uZWtpcmpvaXR1cyk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJDT05UUkFDVElPTl9UQUJMRV9MQUJFTF9oYSI+aGF1c2EgKGx5aGVubmVraXJqb2l0dXMpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iQ09OVFJBQ1RJT05fVEFCTEVfTEFCRUxfaWQiPmluZG9uZXNpYSAobHloZW5uZWtpcmpvaXR1cyk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJDT05UUkFDVElPTl9UQUJMRV9MQUJFTF9pcGEiPkthbnNhaW52w6RsaW5lbiBmb25lZXR0aW5lbiBhYWtrb3N0bzwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkNPTlRSQUNUSU9OX1RBQkxFX0xBQkVMX2phIj5qYXBhbmkgKHRhdmFsbGluZW4ga2lyam9pdHVzKTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkNPTlRSQUNUSU9OX1RBQkxFX0xBQkVMX2tvIj5rb3JlYTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkNPTlRSQUNUSU9OX1RBQkxFX0xBQkVMX2tvX2cwIj5rb3JlYSAodGF2YWxsaW5lbiBraXJqb2l0dXMpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iQ09OVFJBQ1RJT05fVEFCTEVfTEFCRUxfa29fZzEiPmtvcmVhICh0YXNvIDEpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iQ09OVFJBQ1RJT05fVEFCTEVfTEFCRUxfa29fZzIiPmtvcmVhICh0YXNvIDIpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iQ09OVFJBQ1RJT05fVEFCTEVfTEFCRUxfbHQiPmxpZXR0dWEgKHRhdmFsbGluZW4ga2lyam9pdHVzKTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkNPTlRSQUNUSU9OX1RBQkxFX0xBQkVMX21nIj5tYWxhZ2Fzc2kgKGx5aGVubmVraXJqb2l0dXMpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iQ09OVFJBQ1RJT05fVEFCTEVfTEFCRUxfbXVuIj5tdW5kYSAobHloZW5uZWtpcmpvaXR1cyk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJDT05UUkFDVElPTl9UQUJMRV9MQUJFTF9ubCI+aG9sbGFudGkgKGx5aGVubmVraXJqb2l0dXMpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iQ09OVFJBQ1RJT05fVEFCTEVfTEFCRUxfbnkiPmNoaWNoZXdhIChseWhlbm5la2lyam9pdHVzKTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkNPTlRSQUNUSU9OX1RBQkxFX0xBQkVMX3B0Ij5wb3J0dWdhbGkgKHRhc28gMik8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJDT05UUkFDVElPTl9UQUJMRV9MQUJFTF9ydSI+VmVuw6Rsw6RpbmVuIChseWhlbm5ldHR5KTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkNPTlRSQUNUSU9OX1RBQkxFX0xBQkVMX3NpIj5zaW5nYWxlZXNpICh0YXZhbGxpbmVuIGtpcmpvaXR1cyk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJDT05UUkFDVElPTl9UQUJMRV9MQUJFTF9zdyI+c3dhaGlsaSAobHloZW5uZWtpcmpvaXR1cyk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJDT05UUkFDVElPTl9UQUJMRV9MQUJFTF90aCI+dGhhaSAobHloZW5uZWtpcmpvaXR1cyk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJDT05UUkFDVElPTl9UQUJMRV9MQUJFTF96aF9UVyI+a2lpbmEgKFRhaXdhbiwgdGF2YWxsaW5lbiBraXJqb2l0dXMpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iQ09OVFJBQ1RJT05fVEFCTEVfTEFCRUxfenUiPlp1bHUgKGx5aGVubmVraXJqb2l0dXMpPC9zdHJpbmc+CisKKyAgPHN0cmluZyBuYW1lPSJLRVlCT0FSRF9UQUJMRV9MQUJFTF9icmFpbGxlIj5waXN0ZW7DpHBww6RpbWlzdMO2amVuIG7DpHBww6Rpbm3DpMOkcml0eWtzZXQ8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJLRVlCT0FSRF9UQUJMRV9MQUJFTF9kZXNrdG9wIj50w6R5c2lrb2tvaXN0ZW4gbsOkcHDDpGltaXN0w7ZqZW4gbsOkcHDDpGlubcOkw6RyaXR5a3NldDwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IktFWUJPQVJEX1RBQkxFX0xBQkVMX2tleXBhZCI+TnVtZXJvbsOkcHDDpGltaXN0w7ZuYXZpZ29pbm5pbiBuw6RwcMOkaW5tw6TDpHJpdHlrc2V0PC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iS0VZQk9BUkRfVEFCTEVfTEFCRUxfbGFwdG9wIj5OdW1lcm9uw6RwcMOkaW1pc3TDtnR0w7ZtaWVuIG7DpHBww6RpbWlzdMO2amVuIG7DpHBww6Rpbm3DpMOkcml0eWtzZXQ8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJLRVlCT0FSRF9UQUJMRV9MQUJFTF9zdW5fdHlwZTYiPlN1biBUeXBlIDYgLW7DpHBww6RpbWlzdMO2amVuIG7DpHBww6Rpbm3DpMOkcml0eWtzZXQ8L3N0cmluZz4KKzwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvQW5kcm9pZC9HcmFkbGUvYXBwL3NyYy9tYWluL3Jlcy92YWx1ZXMtZnIvc3RyaW5ncy54bWwgYi9BbmRyb2lkL0dyYWRsZS9hcHAvc3JjL21haW4vcmVzL3ZhbHVlcy1mci9zdHJpbmdzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNTlmYmQwCi0tLSAvZGV2L251bGwKKysrIGIvQW5kcm9pZC9HcmFkbGUvYXBwL3NyYy9tYWluL3Jlcy92YWx1ZXMtZnIvc3RyaW5ncy54bWwKQEAgLTAsMCArMSwyODggQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+CisKKzxyZXNvdXJjZXM+CisgIDxzdHJpbmcgbmFtZT0iYXBwX2Rlc2NyaXB0aW9uIj5CUkxUVFkgc3VwcG9ydGUgZGVzIGFmZmljaGV1cnMgYnJhaWxsZS48L3N0cmluZz4KKworICA8c3RyaW5nIG5hbWU9InVzYk1vbml0b3JfbGFiZWwiPlZpc2lvbm5ldXIgZGUgcMOpcmlwaMOpcmlxdWVzIFVTQiBjb25uZWN0w6lzPC9zdHJpbmc+CisKKyAgPHN0cmluZyBuYW1lPSJhYm91dF9sYWJlbF9hY3Rpdml0eSI+w4AgcHJvcG9zIGRlIGxcJ2FwcGxpY2F0aW9uPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iYWJvdXRfbGFiZWxfY29weXJpZ2h0Ij5Ecm9pdHMgZFwnYXV0ZXVyPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iYWJvdXRfbGFiZWxfYnVpbGRUaW1lIj5EYXRlIGRlIGNvbnN0cnVjdGlvbjwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9ImFib3V0X2xhYmVsX3NvdXJjZVJldmlzaW9uIj5Sw6l2aXNpb24gZGVzIHNvdXJjZXM8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJhYm91dF9sYWJlbF9wcml2YWN5UG9saWN5Ij5Qb2xpdGlxdWUgZGUgY29uZmlkZW50aWFsaXTDqTwvc3RyaW5nPgorCisgIDxzdHJpbmcgbmFtZT0iaW5wdXRTZXJ2aWNlX25hbWUiPlNlcnZpY2UgZFwnZW50csOpZSBCUkxUVFk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJpbnB1dFNlcnZpY2VfdHlwZSI+Q2xhdmllcnMgZGVzIHDDqXJpcGjDqXJpcXVlcyBicmFpbGxlczwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9ImlucHV0U2VydmljZV9ub3RfZW5hYmxlZCI+RGlzcG9zaXRpZiBkZSBzYWlzaWUgbm9uIGFjdGl2w6k8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJpbnB1dFNlcnZpY2Vfbm90X3NlbGVjdGVkIj5EaXNwb3NpdGlmIGRlIHNhaXNpZSBub24gc8OpbGVjdGlvbm7DqTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9ImlucHV0U2VydmljZV9ub3Rfc3RhcnRlZCI+RGlzcG9zaXRpZiBkZSBzYWlzaWUgbm9uIGTDqW1hcnLDqTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9ImlucHV0U2VydmljZV9ub3RfY29ubmVjdGVkIj5EaXNwb3NpdGlmIGRlIHNhaXNpZSBub24gY29ubmVjdMOpPC9zdHJpbmc+CisKKyAgPHN0cmluZyBuYW1lPSJ1cGRhdGVBcHBsaWNhdGlvbl9wcm9ibGVtX2ZhaWxlZCI+QXBwbGljYXRpb24gbm9uIG1pc2Ugw6Agam91cjwvc3RyaW5nPgorICAgCisgIDxzdHJpbmcgbmFtZT0icGFja2FnZUluc3RhbGxlcl9wcm9ibGVtX2ZhaWxlZCI+UGFxdWV0IG5vbiBpbnN0YWxsw6k8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJwYWNrYWdlSW5zdGFsbGVyX3Byb2JsZW1fc2FtZSI+VmVyc2lvbiBpZGVudGlxdWU8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJwYWNrYWdlSW5zdGFsbGVyX3Byb2JsZW1fZG93bmdyYWRlIj5Sw6l0cm9ncmFkYXRpb24gbm9uIHBlcm1pc2U8L3N0cmluZz4KKyAgIAorICA8c3RyaW5nIG5hbWU9ImZpbGVEb3dubG9hZGVyX3RpdGxlIj5Uw6lsw6ljaGFyZ2V1ciBkdSBmaWNoaWVyIGRlIEJSTFRUWTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9ImZpbGVEb3dubG9hZGVyX3Byb2JsZW1fZmFpbGVkIj5GaWNoaWVyIG5vbiB0w6lsw6ljaGFyZ8OpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iZmlsZURvd25sb2FkZXJfc3RhdGVfY29ubmVjdGluZyI+Q29ubmV4aW9uPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iZmlsZURvd25sb2FkZXJfc3RhdGVfZG93bmxvYWRpbmciPlTDqWzDqWNoYXJnZW1lbnQ8L3N0cmluZz4KKyAgIAorICA8c3RyaW5nIG5hbWU9InNldHRpbmdfc3RhdGVfb2ZmIj5Ew6lzYWN0aXbDqTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9ImNoZWNrYm94X3N0YXRlX3VuY2hlY2tlZCI+Tm9uPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iY2hlY2tib3hfc3RhdGVfY2hlY2tlZCI+T3VpPC9zdHJpbmc+CisKKyAgPHN0cmluZyBuYW1lPSJicmFpbGxlX2NoYW5uZWxfbmFtZSI+w4l0YXQgZHUgcMOpcmlwaMOpcmlxdWUgYnJhaWxsZTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9ImJyYWlsbGVfaGludF90YXAiPmdlc3RlcyBkXCdhY3Rpb25zPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iYnJhaWxsZV9zdGF0ZV9yZWxlYXNlZCI+TGliw6lyw6k8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJicmFpbGxlX3N0YXRlX3dhaXRpbmciPkVuIGF0dGVudGU8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJicmFpbGxlX3N0YXRlX2Nvbm5lY3RlZCI+Q29ubmVjdMOpPC9zdHJpbmc+CisKKyAgPHN0cmluZyBuYW1lPSJHTE9CQUxfQlVUVE9OX05PVElGSUNBVElPTlMiPk5vdGlmaWNhdGlvbnM8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJHTE9CQUxfQlVUVE9OX1FVSUNLX1NFVFRJTkdTIj5QYXJhbcOpdHJhZ2VzIHJhcGlkZXM8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJHTE9CQUxfQlVUVE9OX0JBQ0siPlJldG91cjwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkdMT0JBTF9CVVRUT05fSE9NRSI+QWNjdWVpbDwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkdMT0JBTF9CVVRUT05fUkVDRU5UX0FQUFMiPkFwcGxpcyByw6ljZW50ZXM8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJHTE9CQUxfQlVUVE9OX09WRVJWSUVXIj5Hw6luw6lyYWw8L3N0cmluZz4KKworICA8c3RyaW5nIG5hbWU9IkdMT0JBTF9CVVRUT05fU1dJVENIX0lOUFVUX01FVEhPRCI+Q2hhbmdlciBsZSBtb2RlIGRlIHNhaXNpZTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkdMT0JBTF9CVVRUT05fVklFV19VU0VSX0dVSURFIj5MaXJlIGxlIGd1aWRlIHV0aWxpc2F0ZXVyPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iR0xPQkFMX0JVVFRPTl9CUk9XU0VfV0VCX1NJVEUiPlZpc2l0ZXIgbGUgc2l0ZSBXZWI8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJHTE9CQUxfQlVUVE9OX0JST1dTRV9DT01NVU5JVFlfTUVTU0FHRVMiPlBhcmNvdXJpciBsZXMgbWVzc2FnZXMgZGUgbGEgY29tbXVuYXV0w6k8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJHTE9CQUxfQlVUVE9OX1BPU1RfQ09NTVVOSVRZX01FU1NBR0UiPlBvc3RlciB1biBtZXNzYWdlIMOgIGxhIGNvbW11bmF1dMOpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iR0xPQkFMX0JVVFRPTl9NQU5BR0VfQ09NTVVOSVRZX01FTUJFUlNISVAiPkfDqXJlciBsXCdhZGjDqXNpb24gw6AgbGEgY29tbXVuYXV0w6k8L3N0cmluZz4KKworICA8c3RyaW5nIG5hbWU9IkdMT0JBTF9CVVRUT05fVVBEQVRFX0FQUExJQ0FUSU9OIj5NZXR0cmUgw6Agam91ciBsXCdhcHBsaWNhdGlvbjwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkdMT0JBTF9DSEVDS0JPWF9ERVZFTE9QRVJfQlVJTEQiPlZlcnNpb24gZGUgZMOpdmVsb3BwZW1lbnQ8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJHTE9CQUxfQ0hFQ0tCT1hfQUxMT1dfRE9XTkdSQURFIj5BdXRvcmlzZXIgbGVzIG1pc2VzIMOgIGpvdXIgZGVzY2VuZGFudGVzPC9zdHJpbmc+CisKKyAgPHN0cmluZyBuYW1lPSJDSE9PU0VSX1RJVExFX0FDQ0VTU0lCSUxJVFlfQUNUSU9OUyI+QWN0aW9ucyBkXCdhY2Nlc3NpYmlsaXTDqTwvc3RyaW5nPgorCisgIDxzdHJpbmcgbmFtZT0iU0VUVElOR1NfU0NSRUVOX01BSU4iPlBhcmFtw6h0cmVzIGRlIEJSTFRUWTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlNFVFRJTkdTX1NDUkVFTl9HRU5FUkFMIj5QYXJhbcOodHJlcyBnw6luw6lyYXV4PC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iU0VUVElOR1NfU0NSRUVOX01FU1NBR0UiPlBhcmFtw6h0cmVzIGRlcyBtZXNzYWdlczwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlNFVFRJTkdTX1NDUkVFTl9ERVZJQ0VTIj5HZXN0aW9uIGRlcyBww6lyaXBow6lyaXF1ZXM8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJTRVRUSU5HU19TQ1JFRU5fQURWQU5DRUQiPlBhcmFtw6h0cmVzIGF2YW5jw6lzPC9zdHJpbmc+CisKKyAgPHN0cmluZyBuYW1lPSJTRVRUSU5HU19DSEVDS0JPWF9SRUxFQVNFX0JSQUlMTEVfREVWSUNFIj5MaWLDqXJlciBsZSBww6lyaXBow6lyaXF1ZSBicmFpbGxlPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iU0VUVElOR1NfQlVUVE9OX05BVklHQVRJT05fTU9ERSI+TW9kZSBuYXZpZ2F0aW9uPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iU0VUVElOR1NfQlVUVE9OX1NQRUVDSF9TVVBQT1JUIj5TdXBwb3J0IGRlIGxhIHBhcm9sZTwvc3RyaW5nPgorCisgIDxzdHJpbmcgbmFtZT0iU0VUVElOR1NfQlVUVE9OX1RFWFRfVEFCTEUiPlRhYmxlIGRlIHRleHRlPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iU0VUVElOR1NfQlVUVE9OX0FUVFJJQlVURVNfVEFCTEUiPlRhYmxlIGRcJ2F0dHJpYnV0czwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlNFVFRJTkdTX0JVVFRPTl9DT05UUkFDVElPTl9UQUJMRSI+VGFibGUgZFwnYWJyw6lnw6k8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJTRVRUSU5HU19CVVRUT05fS0VZQk9BUkRfVEFCTEUiPlRhYmxlIGRlcyB0b3VjaGVzIGR1IGNsYXZpZXI8L3N0cmluZz4KKworICA8c3RyaW5nIG5hbWU9IlNFVFRJTkdTX0NIRUNLQk9YX1NIT1dfQUxFUlRTIj5BZmZpY2hlciBsZXMgYWxlcnRlczwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlNFVFRJTkdTX0NIRUNLQk9YX1NIT1dfQU5OT1VOQ0VNRU5UUyI+QWZmaWNoZXIgbGVzIGFubm9uY2VzPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iU0VUVElOR1NfQ0hFQ0tCT1hfU0hPV19OT1RJRklDQVRJT05TIj5BZmZpY2hlciBsZXMgbm90aWZpY2F0aW9uczwvc3RyaW5nPgorCisgIDxzdHJpbmcgbmFtZT0iU0VUVElOR1NfQlVUVE9OX0xPR19MRVZFTCI+Tml2ZWF1IGRlIGpvdXJuYWxpc2F0aW9uPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iU0VUVElOR1NfQlVUVE9OX0xPR19DQVRFR09SSUVTIj5DYXTDqWdvcmllIGRlIGpvdXJuYWw8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJTRVRUSU5HU19DSEVDS0JPWF9MT0dfQUNDRVNTSUJJTElUWV9FVkVOVFMiPkpvdXJuYWxpc2VyIGxlcyDDqXbDqW5lbWVudHMgbGnDqXMgw6AgbFwnYWNjZXNzaWJpbGl0w6k8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJTRVRUSU5HU19DSEVDS0JPWF9MT0dfUkVOREVSRURfU0NSRUVOIj5Kb3VybmFsaXNlciBsXCdhZmZpY2hhZ2UgZGUgbFwnw6ljcmFuPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iU0VUVElOR1NfQ0hFQ0tCT1hfTE9HX0tFWUJPQVJEX0VWRU5UUyI+Sm91cm5hbGlzZXIgbGVzIMOpdsOpbmVtZW50cyBkdSBjbGF2aWVyPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iU0VUVElOR1NfQ0hFQ0tCT1hfTE9HX1VOSEFORExFRF9FVkVOVFMiPkpvdXJuYWxpc2VyIGxlcyDDqXbDqW5lbWVudHMgbm9uIGfDqXLDqXM8L3N0cmluZz4KKworICA8c3RyaW5nIG5hbWU9IkRFVklDRVNfQlVUVE9OX1NFTEVDVEVEIj5Qw6lyaXBow6lyaXF1ZSBzw6lsZWN0aW9ubsOpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iREVWSUNFU19CVVRUT05fQUREIj5Bam91dGVyIHVuIHDDqXJpcGjDqXJpcXVlPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iREVWSUNFU19CVVRUT05fUkVNT1ZFIj5TdXBwcmltZXIgdW4gcMOpcmlwaMOpcmlxdWU8L3N0cmluZz4KKworICA8c3RyaW5nIG5hbWU9IlNFTEVDVEVEX0RFVklDRV9OT05FIj5QYXMgZGUgcMOpcmlwaMOpcmlxdWVzPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iU0VMRUNURURfREVWSUNFX1VOU0VMRUNURUQiPnDDqXJpcGjDqXJpcXVlIG5vbiBzw6lsZWN0aW9ubsOpPC9zdHJpbmc+CisKKyAgPHN0cmluZyBuYW1lPSJBRERfREVWSUNFX05BTUUiPk5vbSBkdSBww6lyaXBow6lyaXF1ZTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkFERF9ERVZJQ0VfTUVUSE9EIj5Nw6l0aG9kZSBkZSBjb21tdW5pY2F0aW9uPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iQUREX0RFVklDRV9TRUxFQ1QiPlDDqXJpcGjDqXJpcXVlIHPDqWxlY3Rpb25uw6k8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJBRERfREVWSUNFX0RSSVZFUiI+UGlsb3RlIGJyYWlsbGU8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJBRERfREVWSUNFX0RPTkUiPkZhaXQ8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJBRERfREVWSUNFX1VOU0VMRUNURURfTUVUSE9EIj5tw6l0aG9kZSBkZSBjb21tdW5pY2F0aW9uIG5vbiBzw6lsZWN0aW9ubsOpZTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkFERF9ERVZJQ0VfVU5TRUxFQ1RFRF9ERVZJQ0UiPnDDqXJpcGjDqXJpcXVlIG5vbiBzw6lsZWN0aW9ubsOpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iQUREX0RFVklDRV9VTlNFTEVDVEVEX0RSSVZFUiI+cGlsb3RlIGJyYWlsbGUgbm9uIHPDqWxlY3Rpb25uw6k8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJBRERfREVWSUNFX05PX0RFVklDRVMiPnBhcyBkZSBww6lyaXBow6lyaXF1ZXM8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJBRERfREVWSUNFX0RVUExJQ0FURV9OQU1FIj5ub20gZGUgcMOpcmlwaMOpcmlxdWUgZMOpasOgIHV0aWxpc8OpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iQUREX0RFVklDRV9OT19QRVJNSVNTSU9OIj5BY2PDqHMgYXUgcMOpcmlwaMOpcmlxdWUgaW50ZXJkaXQ8L3N0cmluZz4KKworICA8c3RyaW5nIG5hbWU9IlJFTU9WRV9ERVZJQ0VfUFJPTVBUIj5Wb3VsZXotdm91cyB2cmFpbWVudCBzdXBwcmltZXIgY2UgcMOpcmlwaMOpcmlxdWXCoD88L3N0cmluZz4KKworICA8c3RyaW5nIG5hbWU9IlNFVF9TRUxFQ1RJT05fTk9ORSI+YXVjdW5lIHPDqWxlY3Rpb248L3N0cmluZz4KKworICA8c3RyaW5nIG5hbWU9Ik5BVklHQVRJT05fTU9ERV9MQUJFTF9MaXN0Ij5MaXN0ZSB2ZXJ0aWNhbGU8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJOQVZJR0FUSU9OX01PREVfTEFCRUxfR3JpZCI+R3JpbGxlIDJEPC9zdHJpbmc+CisKKyAgPHN0cmluZyBuYW1lPSJTUEVFQ0hfU1VQUE9SVF9MQUJFTF9uYXRpdmUiPk5hdGlmPC9zdHJpbmc+CisKKyAgPHN0cmluZyBuYW1lPSJDT01NVU5JQ0FUSU9OX01FVEhPRF9MQUJFTF9CbHVldG9vdGgiPkJsdWV0b290aDwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkNPTU1VTklDQVRJT05fTUVUSE9EX0xBQkVMX1VzYiI+VVNCPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iQ09NTVVOSUNBVElPTl9NRVRIT0RfTEFCRUxfU2VyaWFsIj5Tw6lyaWU8L3N0cmluZz4KKworICA8c3RyaW5nIG5hbWU9IkxPR19MRVZFTF9MQUJFTF9kZWJ1ZyI+RMOpYm9nYWdlPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iTE9HX0xFVkVMX0xBQkVMX2luZm9ybWF0aW9uIj5JbmZvcm1hdGlvbnM8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJMT0dfTEVWRUxfTEFCRUxfbm90aWNlIj5SZW1hcnF1ZTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkxPR19MRVZFTF9MQUJFTF93YXJuaW5nIj5BdmVydGlzc2VtZW50PC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iTE9HX0xFVkVMX0xBQkVMX2Vycm9yIj5FcnJldXI8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJMT0dfTEVWRUxfTEFCRUxfY3JpdGljYWwiPkNyaXRpcXVlPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iTE9HX0xFVkVMX0xBQkVMX2FsZXJ0Ij5BbGVydGU8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJMT0dfTEVWRUxfTEFCRUxfZW1lcmdlbmN5Ij5VcmdlbmNlPC9zdHJpbmc+CisKKyAgPHN0cmluZyBuYW1lPSJMT0dfQ0FURUdPUllfTEFCRUxfaW5wa3RzIj5QYXF1ZXRzIGVuIGVudHLDqWU8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJMT0dfQ0FURUdPUllfTEFCRUxfb3V0cGt0cyI+UGFxdWV0cyBlbiBzb3J0aWU8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJMT0dfQ0FURUdPUllfTEFCRUxfYnJsa2V5cyI+w4l2w6luZW1lbnRzIGNsYXZpZXIgZHUgcMOpcmlwaMOpcmlxdWUgYnJhaWxsZTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkxPR19DQVRFR09SWV9MQUJFTF9rYmRrZXlzIj7DiXbDqW5lbWVudCB0b3VjaGUgZHUgY2xhdmllcjwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkxPR19DQVRFR09SWV9MQUJFTF9jc3J0cmsiPlBvdXJzdWl0ZSBkdSBjdXJzZXVyPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iTE9HX0NBVEVHT1JZX0xBQkVMX2NzcnJ0ZyI+Um91dGluZSBjdXJzZXVyPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iTE9HX0NBVEVHT1JZX0xBQkVMX3VwZGF0ZSI+w4l2w6luZW1lbnRzIGxpw6lzIMOgIGxhIG1pc2Ugw6Agam91cjwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkxPR19DQVRFR09SWV9MQUJFTF9zcGVlY2giPsOJdsOpbmVtZW50cyBsacOpcyDDoCBsYSBwYXJvbGU8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJMT0dfQ0FURUdPUllfTEFCRUxfYXN5bmMiPsOJdsOpbmVtZW50cyBhc3luY2hyb25lczwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkxPR19DQVRFR09SWV9MQUJFTF9zZXJ2ZXIiPsOJdsOpbmVtZW50cyBsacOpcyBhdSBzZXJ2ZXVyPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iTE9HX0NBVEVHT1JZX0xBQkVMX2dpbyI+RS9TIGfDqW7DqXJpcXVlPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iTE9HX0NBVEVHT1JZX0xBQkVMX3NlcmlhbCI+RS9TIHPDqXJpZTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkxPR19DQVRFR09SWV9MQUJFTF91c2IiPkUvUyBVU0I8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJMT0dfQ0FURUdPUllfTEFCRUxfYnQiPkUvUyBCbHVldG9vdGg8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJMT0dfQ0FURUdPUllfTEFCRUxfaGlkIj5FL1MgaW50ZXJmYWNlIGhvbW1lLW1hY2hpbmU8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJMT0dfQ0FURUdPUllfTEFCRUxfYnJsZHJ2Ij5QaWxvdGUgYnJhaWxsZTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkxPR19DQVRFR09SWV9MQUJFTF9zcGtkcnYiPlBpbG90ZSBkZSBzeW50aMOoc2Ugdm9jYWxlPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iTE9HX0NBVEVHT1JZX0xBQkVMX3NjcmRydiI+UGlsb3RlIGRlIGxcJ8OpY3Jhbjwvc3RyaW5nPgorCisgIDxzdHJpbmcgbmFtZT0iQlJBSUxMRV9EUklWRVJfTEFCRUxfYXV0byI+RMOpdGVjdGlvbiBhdXRvbWF0aXF1ZTwvc3RyaW5nPgorCisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9hdXRvIj5Tw6lsZWN0aW9uIGF1dG9tYXRpcXVlIGJhc8OpZSBzdXIgbGEgbG9jYWxlPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9hciI+QXJhYmUgKGfDqW7DqXJpcXVlKTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfYXMiPkFzc2FtZXNlPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9hd2EiPkF3YWRoaTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfYmciPkJ1bGdhcmU8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX2JoIj5CaWhhcmk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX2JuIj5CZW5nYWxpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9ibyI+VGliw6l0YWluPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9icmEiPkJyYWo8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX2JyZiI+Rm9ybWF0IHRyYW5zY3JpcHRpb24gYnJhaWxsZSAocG91ciB2aXN1YWxpc2VyIGxlcyBmaWNoaWVycyAuYnJmIGRhbnMgdW4gw6lkaXRldXIgb3UgdW4gYWZmaWNoZXVyKTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfY3MiPlRjaMOocXVlPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9jeSI+R2FsbG9pczwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfZGEiPkRhbm9pczwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfZGFfMTI1MiI+RGFub2lzIChTdmVuZCBUaG91Z2FhcmQsIDIwMDLigJMxMeKAkzE4KTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfZGFfbHQiPkRhbm9pcyAoTG9nVGV4dCk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX2RlIj5BbGxlbWFuZDwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfZHJhIj5EcmF2aWRpYW48L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX2VsIj5HcmVjPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9lbiI+QW5nbGFpczwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfZW5fQ0EiPkFuZ2xhaXMgKENhbmFkYSk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX2VuX0dCIj5BbmdsYWlzIChSb3lhdW1lLVVuaSk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX2VuX25hYmNjIj5BbmdsYWlzIChDb2RlIGluZm9ybWF0aXF1ZSBicmFpbGxlIG5vcmQtYW3DqXJpY2Fpbik8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX2VuX1VTIj5BbmdsYWlzICjDiXRhdHMtVW5pcyk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX2VvIj5Fc3DDqXJhbnRvPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9lcyI+RXNwYWdub2w8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX2V0Ij5Fc3Rvbmllbjwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfZmkiPkZpbm5vaXM8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX2ZyIj5GcmFuw6dhaXM8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX2ZyXzIwMDciPkZyYW7Dp2FpcyAodW5pZmnDqSAyMDA3KTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfZnJfQ0EiPkZyYW7Dp2FpcyAoQ2FuYWRhKTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfZnJfY2JpZnMiPkZyYW7Dp2FpcyAoQ29kZSBCcmFpbGxlIEluZm9ybWF0aXF1ZSBGcmFuw6dhaXMgU3RhbmRhcmQpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9mcl9GUiI+RnJhbsOnYWlzIChGcmFuY2UpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9mcl92cyI+RnJhbsOnYWlzIChWaXNpb0JyYWlsbGUpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9nYSI+SXJsYW5kYWlzPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9nZCI+R2HDqWxpcXVlPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9nb24iPkdvbmRpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9ndSI+R3VqcmF0aTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfaGUiPkjDqWJyZXV4PC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9oaSI+SGluZGk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX2hyIj5Dcm9hdGU8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX2h1Ij5Ib25ncm9pczwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfaHkiPkFybcOpbmllbjwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfaXMiPklzbGFuZGFpczwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfaXQiPkl0YWxpZW48L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX2toYSI+S2hhc2k8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX2tuIj5LYW5uYWRhPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9rb2siPktvbmthbmk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX2tydSI+S3VydWtoPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9sdCI+TGl0dWFuaWVuPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9sdiI+TGV0dG9uPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9tZyI+TWFsZ2FjaGU8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX21pIj5NYW9yaTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfbWwiPk1hbGF5YWxhbTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfbW5pIj5NYW5pcHVyaTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfbXIiPk1hcmF0aGk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX210Ij5NYWx0YWlzPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9tdW4iPk11bmRhPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9td3IiPk1hcndhcmk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX25lIj5Ow6lwYWxhaXM8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX25ldyI+TmV3YXJpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9ubCI+QXV0cmljaGllbjwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfbmxfQkUiPkZsYW1hbmQgKEJlbGdpcXVlKTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfbmxfTkwiPkZsYW1hbmQgKFBheXMtQmFzKTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfbm8iPk5vcnbDqWdpZW48L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX25vX2dlbmVyaWMiPk5vcnbDqWdpZW4gKGF2ZWMgcHJpc2UgZW4gY2hhcmdlIGRcJ2F1dHJlcyBsYW5ndWVzKTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfbm9fb3VwIj5Ob3J2w6lnaWVuIChPZmZlbnRsaWcgdXR2YWxnIGZvciBwdW5rdHNrcmlmdCk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX253YyI+TmV3YXJpIChhbmNpZW4pPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9vciI+T3JpeWE8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX3BhIj5QdW5qYWJpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9waSI+UGFsaTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfcGwiPlBvbG9uYWlzPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9wdCI+UG9ydHVnYWlzPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9ybyI+Um91bWFpbjwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfcnUiPlJ1c3NlPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9zYSI+U2Fuc2NyaXQ8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX3NhdCI+U2FudGFsaTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfc2QiPlNpbmRoaTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfc2UiPlNhbWkgKGR1IE5vcmQpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9zayI+U2xvdmFxdWU8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX3NsIj5TbG92w6huZTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfc3YiPlN1w6lkb2lzPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9zdl8xOTg5Ij5TdcOpZG9pcyAoMTk4OSBzdGFuZGFyZCk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX3N2XzE5OTYiPlN1w6lkb2lzICgxOTk2IHN0YW5kYXJkKTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfc3ciPlN3YWhpbGk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX3RhIj5UYW1vdWw8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX3RlIj5UZWx1Z3U8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX3RyIj5UdXJjPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF91ayI+dWtyYWluaWVuPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF92aSI+VmlldG5hbWllbjwvc3RyaW5nPgorCisgIDxzdHJpbmcgbmFtZT0iQVRUUklCVVRFU19UQUJMRV9MQUJFTF9pbnZsZWZ0X3JpZ2h0Ij5pbnZlcnNpb24gZGVzIGNvdWxldXJzIGRlIHByZW1pZXIgcGxhbiBkYW5zIGxhIGNvbG9ubmUgZGUgZ2F1Y2hlIGV0IGRlIGZvbmQgZGFucyBsYSBjb2xvbm5lIGRlIGRyb2l0ZTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkFUVFJJQlVURVNfVEFCTEVfTEFCRUxfbGVmdF9yaWdodCI+Y291bGV1ciBkZSBwcmVtaWVyIHBsYW4gZGFucyBsYSBjb2xvbm5lIGRlIGdhdWNoZSBldCBkZSBmb25kIGRhbnMgbGEgY29sb25uZSBkZSBkcm9pdGU8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJBVFRSSUJVVEVTX1RBQkxFX0xBQkVMX3VwcGVyX2xvd2VyIj5jb3VsZXVyIGRlIHByZW1pZXIgcGxhbiBkYW5zIGxlIGNhcnLDqSBlbiBtYWp1c2N1bGUgZXQgZGUgZm9uZCBkYW5zIGxlIGNhcnLDqSBlbiBtaW51c2N1bGU8L3N0cmluZz4KKworICA8c3RyaW5nIG5hbWU9IkNPTlRSQUNUSU9OX1RBQkxFX0xBQkVMX2F1dG8iPlPDqWxlY3Rpb24gYXV0b21hdGlxdWUgYmFzw6llIHN1ciBsYSBsb2NhbGU8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJDT05UUkFDVElPTl9UQUJMRV9MQUJFTF9hZiI+QWZyaWthYW5zIChhYnLDqWfDqSk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJDT05UUkFDVElPTl9UQUJMRV9MQUJFTF9hbSI+QW1oYXJpcXVlIChkw6lzYWJyw6lnw6kpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iQ09OVFJBQ1RJT05fVEFCTEVfTEFCRUxfZGUiPkFsbGVtYW5kPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iQ09OVFJBQ1RJT05fVEFCTEVfTEFCRUxfZGVfZzAiPkFsbGVtYW5kIChkw6lzYWJyw6lnw6kpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iQ09OVFJBQ1RJT05fVEFCTEVfTEFCRUxfZGVfZzEiPkFsbGVtYW5kIChhYnLDqXZpYXRpb25zIGRlIGJhc2UpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iQ09OVFJBQ1RJT05fVEFCTEVfTEFCRUxfZGVfZzIiPkFsbGVtYW5kIChhYnLDqWfDqSk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJDT05UUkFDVElPTl9UQUJMRV9MQUJFTF9kZV8xOTk4Ij5BbGxlbWFuZCAoYWJyw6lnw6kgLSBzdGFuZGFyZCAxOTk4KTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkNPTlRSQUNUSU9OX1RBQkxFX0xBQkVMX2RlXzIwMTUiPkFsbGVtYW5kIChhYnLDqWfDqSAtIHN0YW5kYXJkIDIwMTUpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iQ09OVFJBQ1RJT05fVEFCTEVfTEFCRUxfZW4iPkFuZ2xhaXM8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJDT05UUkFDVElPTl9UQUJMRV9MQUJFTF9lbl9VUyI+QW5nbGFpcyAow4l0YXRzLVVuaXMpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iQ09OVFJBQ1RJT05fVEFCTEVfTEFCRUxfZW5fdWViX2cxIj5BbmdsYWlzIChCcmFpbGxlIGFuZ2xhaXMgdW5pZmnDqSwgMWVyIGRlZ3LDqSk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJDT05UUkFDVElPTl9UQUJMRV9MQUJFTF9lbl91ZWJfZzIiPkFuZ2xhaXMgKEJyYWlsbGUgYW5nbGFpcyB1bmlmacOpLCAyw6htZSBkZWdyw6kpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iQ09OVFJBQ1RJT05fVEFCTEVfTEFCRUxfZW5fdXNfZzIiPkFuZ2xhaXMgKEVVLCAyw6htZSBkZWdyw6kpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iQ09OVFJBQ1RJT05fVEFCTEVfTEFCRUxfZXMiPkVzcGFnbm9sICgyw6htZSBkZWdyw6kpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iQ09OVFJBQ1RJT05fVEFCTEVfTEFCRUxfZnIiPkZyYW7Dp2Fpczwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkNPTlRSQUNUSU9OX1RBQkxFX0xBQkVMX2ZyX2cxIj5GcmFuw6dhaXMgKGTDqXNhYnLDqWfDqSk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJDT05UUkFDVElPTl9UQUJMRV9MQUJFTF9mcl9nMiI+RnJhbsOnYWlzIChhYnLDqWfDqSk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJDT05UUkFDVElPTl9UQUJMRV9MQUJFTF9oYSI+SGF1c2EgKGFicsOpZ8OpKTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkNPTlRSQUNUSU9OX1RBQkxFX0xBQkVMX2lkIj5JbmRvbsOpc2llbiAoYWJyw6lnw6kpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iQ09OVFJBQ1RJT05fVEFCTEVfTEFCRUxfaXBhIj5BbHBoYWJldCBQaG9uw6l0aXF1ZSBpbnRlcm5hdGlvbmFsPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iQ09OVFJBQ1RJT05fVEFCTEVfTEFCRUxfamEiPkphcG9uYWlzIChkw6lzYWJyw6lnw6kpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iQ09OVFJBQ1RJT05fVEFCTEVfTEFCRUxfa28iPkNvcsOpZW48L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJDT05UUkFDVElPTl9UQUJMRV9MQUJFTF9rb19nMCI+Q29yw6llbiAoZMOpc2FicsOpZ8OpKTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkNPTlRSQUNUSU9OX1RBQkxFX0xBQkVMX2tvX2cxIj5Db3LDqWVuICgxZXIgZGVncsOpKTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkNPTlRSQUNUSU9OX1RBQkxFX0xBQkVMX2tvX2cyIj5Db3LDqWVuICgyw6htZSBkZWdyw6kpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iQ09OVFJBQ1RJT05fVEFCTEVfTEFCRUxfbHQiPkxpdHVhbmllbiAobm9uIGFicsOpZ8OpKTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkNPTlRSQUNUSU9OX1RBQkxFX0xBQkVMX21nIj5NYWxnYWNoZSAoYWJyw6lnw6kpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iQ09OVFJBQ1RJT05fVEFCTEVfTEFCRUxfbXVuIj5NdW5kYSAoYWJyw6lnw6kpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iQ09OVFJBQ1RJT05fVEFCTEVfTEFCRUxfbmwiPkF1dHJpY2hpZW4gKEFicsOpZ8OpKTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkNPTlRSQUNUSU9OX1RBQkxFX0xBQkVMX255Ij5DaGljaGV3YSAoYWJyw6lnw6kpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iQ09OVFJBQ1RJT05fVEFCTEVfTEFCRUxfcHQiPlBvcnR1Z2FpcyAoMsOobWUgZGVncsOpKTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkNPTlRSQUNUSU9OX1RBQkxFX0xBQkVMX3J1Ij5SdXNzZSAoMWVyIGRlZ3LDqSk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJDT05UUkFDVElPTl9UQUJMRV9MQUJFTF9zaSI+Q2luZ2FsYWlzIChkw6lzYWJyw6lnw6kpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iQ09OVFJBQ1RJT05fVEFCTEVfTEFCRUxfc3ciPlN3YWhpbGkgKGFicsOpZ8OpKTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkNPTlRSQUNUSU9OX1RBQkxFX0xBQkVMX3RoIj5UaGHDr2xhbmRhaXMgKGFicsOpZ8OpKTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkNPTlRSQUNUSU9OX1RBQkxFX0xBQkVMX3poX1RXIj5DaGlub2lzIChUYWl3YW4sIGTDqXNhYnLDqWfDqSk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJDT05UUkFDVElPTl9UQUJMRV9MQUJFTF96dSI+Wm91bG91IChhYnLDqWfDqSk8L3N0cmluZz4KKworICA8c3RyaW5nIG5hbWU9IktFWUJPQVJEX1RBQkxFX0xBQkVMX2JyYWlsbGUiPmFzc29jaWF0aW9ucyBwb3VyIGxlcyBjbGF2aWVycyBicmFpbGxlczwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IktFWUJPQVJEX1RBQkxFX0xBQkVMX2Rlc2t0b3AiPmFzc29jaWF0aW9ucyBwb3VyIGxlcyBjbGF2aWVycyBjb21wbGV0czwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IktFWUJPQVJEX1RBQkxFX0xBQkVMX2tleXBhZCI+YXNzb2NpYXRpb25zIHBvdXIgbGEgbmF2aWdhdGlvbiBhdSBwYXbDqSBudW3DqXJpcXVlPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iS0VZQk9BUkRfVEFCTEVfTEFCRUxfbGFwdG9wIj5hc3NvY2lhdGlvbnMgcG91ciBsZXMgY2xhdmllcnMgc2FucyBwYXbDqSBudW3DqXJpcXVlPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iS0VZQk9BUkRfVEFCTEVfTEFCRUxfc3VuX3R5cGU2Ij5hc3NvY2lhdGlvbnMgcG91ciBsZXMgY2xhdmllcnMgU3VuIFR5cGUgNjwvc3RyaW5nPgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9BbmRyb2lkL0dyYWRsZS9hcHAvc3JjL21haW4vcmVzL3ZhbHVlcy1pdC9zdHJpbmdzLnhtbCBiL0FuZHJvaWQvR3JhZGxlL2FwcC9zcmMvbWFpbi9yZXMvdmFsdWVzLWl0L3N0cmluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg0ODA1ZGMKLS0tIC9kZXYvbnVsbAorKysgYi9BbmRyb2lkL0dyYWRsZS9hcHAvc3JjL21haW4vcmVzL3ZhbHVlcy1pdC9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDI4OCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KKworPHJlc291cmNlcz4KKyAgPHN0cmluZyBuYW1lPSJhcHBfZGVzY3JpcHRpb24iPkJSTFRUWSBwZXJtZXR0ZSBsXCd1dGlsaXp6byBkaSBkaXNwb3NpdGl2aSBicmFpbGxlLjwvc3RyaW5nPgorCisgIDxzdHJpbmcgbmFtZT0idXNiTW9uaXRvcl9sYWJlbCI+RGlzcG9zaXRpdm8gVVNCIENvbGxlZ2F0byBNb25pdG9yPC9zdHJpbmc+CisKKyAgPHN0cmluZyBuYW1lPSJhYm91dF9sYWJlbF9hY3Rpdml0eSI+SW5mbyBzdWxsXCdBcHBsaWNhemlvbmU8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJhYm91dF9sYWJlbF9jb3B5cmlnaHQiPkNvcHlyaWdodDwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9ImFib3V0X2xhYmVsX2J1aWxkVGltZSI+RGF0YSBlIE9yYSBkZWwgUmlsYXNjaW88L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJhYm91dF9sYWJlbF9zb3VyY2VSZXZpc2lvbiI+UmV2aXNpb25lIFNvcmdlbnRlPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iYWJvdXRfbGFiZWxfcHJpdmFjeVBvbGljeSI+SW5mb3JtYXRpdmEgc3VsbGEgUHJpdmFjeTwvc3RyaW5nPgorCisgIDxzdHJpbmcgbmFtZT0iaW5wdXRTZXJ2aWNlX25hbWUiPkJSTFRUWSBTZXJ2aXppbyBpbiBJbmdyZXNzbzwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9ImlucHV0U2VydmljZV90eXBlIj5UYXN0aWVyZSBzdSBEaXNwb3NpdGl2aSBCcmFpbGxlPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iaW5wdXRTZXJ2aWNlX25vdF9lbmFibGVkIj5zZXJ2aXppbyBpbW1pc3Npb25lIG5vbiBhYmlsaXRhdG88L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJpbnB1dFNlcnZpY2Vfbm90X3NlbGVjdGVkIj5zZXJ2aXppbyBpbW1pc3Npb25lIG5vbiBzZWxlemlvbmF0bzwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9ImlucHV0U2VydmljZV9ub3Rfc3RhcnRlZCI+c2Vydml6aW8gaW1taXNzaW9uZSBub24gYXZ2aWF0bzwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9ImlucHV0U2VydmljZV9ub3RfY29ubmVjdGVkIj5zZXJ2aXppbyBpbW1pc3Npb25lIG5vbiBjb25uZXNzbzwvc3RyaW5nPgorCisgIDxzdHJpbmcgbmFtZT0idXBkYXRlQXBwbGljYXRpb25fcHJvYmxlbV9mYWlsZWQiPmFwcGxpY2F6aW9uZSBub25vbiBhZ2dpb3JuYXRhPC9zdHJpbmc+CisKKyAgPHN0cmluZyBuYW1lPSJwYWNrYWdlSW5zdGFsbGVyX3Byb2JsZW1fZmFpbGVkIj5wYWNjaGV0dG8gbm9uIGluc3RhbGxhdG88L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJwYWNrYWdlSW5zdGFsbGVyX3Byb2JsZW1fc2FtZSI+c2FtZSB2ZXJzaW9uPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0icGFja2FnZUluc3RhbGxlcl9wcm9ibGVtX2Rvd25ncmFkZSI+ZG93bmdyYWRlIG5vbiBjb25zZW50aXRvPC9zdHJpbmc+CisKKyAgPHN0cmluZyBuYW1lPSJmaWxlRG93bmxvYWRlcl90aXRsZSI+QlJMVFRZIEZpbGUgU2NhcmljYXRvPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iZmlsZURvd25sb2FkZXJfcHJvYmxlbV9mYWlsZWQiPmZpbGUgbm9uIHNjYXJpY2F0bzwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9ImZpbGVEb3dubG9hZGVyX3N0YXRlX2Nvbm5lY3RpbmciPmNvbm5lc3Npb25lIGluIGNvcnNvPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iZmlsZURvd25sb2FkZXJfc3RhdGVfZG93bmxvYWRpbmciPnNjYXJpY2FtZW50byBpbiBjb3Jzbzwvc3RyaW5nPgorCisgIDxzdHJpbmcgbmFtZT0ic2V0dGluZ19zdGF0ZV9vZmYiPk9mZjwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9ImNoZWNrYm94X3N0YXRlX3VuY2hlY2tlZCI+Tm88L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJjaGVja2JveF9zdGF0ZV9jaGVja2VkIj5Tw6w8L3N0cmluZz4KKworICA8c3RyaW5nIG5hbWU9ImJyYWlsbGVfY2hhbm5lbF9uYW1lIj5TdGF0byBEaXNwb3NpdGl2byBCcmFpbGxlPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iYnJhaWxsZV9oaW50X3RhcCI+dG9jY2EgcGVyIG9wemlvbmk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJicmFpbGxlX3N0YXRlX3JlbGVhc2VkIj5TY29sbGVnYXRvPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iYnJhaWxsZV9zdGF0ZV93YWl0aW5nIj5JbiBBdHRlc2E8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJicmFpbGxlX3N0YXRlX2Nvbm5lY3RlZCI+Q29ubmVzc288L3N0cmluZz4KKworICA8c3RyaW5nIG5hbWU9IkdMT0JBTF9CVVRUT05fTk9USUZJQ0FUSU9OUyI+Tm90aWZpY2hlPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iR0xPQkFMX0JVVFRPTl9RVUlDS19TRVRUSU5HUyI+SW1wb3N0YXppb25pIFJhcGlkZTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkdMT0JBTF9CVVRUT05fQkFDSyI+SW5kaWV0cm88L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJHTE9CQUxfQlVUVE9OX0hPTUUiPkhvbWU8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJHTE9CQUxfQlVUVE9OX1JFQ0VOVF9BUFBTIj5BcHBsaWNhemlvbmkgUmVjZW50aTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkdMT0JBTF9CVVRUT05fT1ZFUlZJRVciPlBhbm9yYW1pY2E8L3N0cmluZz4KKworICA8c3RyaW5nIG5hbWU9IkdMT0JBTF9CVVRUT05fU1dJVENIX0lOUFVUX01FVEhPRCI+Q2FtYmlhIE1ldG9kbyBkaSBpbW1pc3Npb25lPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iR0xPQkFMX0JVVFRPTl9WSUVXX1VTRVJfR1VJREUiPlZpc3VhbGl6emEgR3VpZGEgVXRlbnRlPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iR0xPQkFMX0JVVFRPTl9CUk9XU0VfV0VCX1NJVEUiPk5hdmlnYSBTaXRvIFdlYjwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkdMT0JBTF9CVVRUT05fQlJPV1NFX0NPTU1VTklUWV9NRVNTQUdFUyI+VmlzdWFsaXp6YSBpIE1lc3NhZ2dpIGRlbGxhIENvbW11bml0eTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkdMT0JBTF9CVVRUT05fUE9TVF9DT01NVU5JVFlfTUVTU0FHRSI+UG9zdGEgdW4gTWVzc2FnZ2lvIGFsbGEgQ29tbXVuaXR5PC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iR0xPQkFMX0JVVFRPTl9NQU5BR0VfQ09NTVVOSVRZX01FTUJFUlNISVAiPkdlc3Rpc2NpIElzY3JpemlvbmUgYWxsYSBDb21tdW5pdHk8L3N0cmluZz4KKworICA8c3RyaW5nIG5hbWU9IkdMT0JBTF9CVVRUT05fVVBEQVRFX0FQUExJQ0FUSU9OIj5BZ2dpb3JuYSBBcHBsaWNhemlvbmU8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJHTE9CQUxfQ0hFQ0tCT1hfREVWRUxPUEVSX0JVSUxEIj5CdWlsZCBkaSBTdmlsdXBwbzwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkdMT0JBTF9DSEVDS0JPWF9BTExPV19ET1dOR1JBREUiPkNvbnNlbnRpIERvd25ncmFkZTwvc3RyaW5nPgorCisgIDxzdHJpbmcgbmFtZT0iQ0hPT1NFUl9USVRMRV9BQ0NFU1NJQklMSVRZX0FDVElPTlMiPkF6aW9uaSBBY2Nlc3NpYmlsaXTDoDwvc3RyaW5nPgorCisgIDxzdHJpbmcgbmFtZT0iU0VUVElOR1NfU0NSRUVOX01BSU4iPkltcG9zdGF6aW9uaSBCUkxUVFk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJTRVRUSU5HU19TQ1JFRU5fR0VORVJBTCI+SW1wb3N0YXppb25pIEdlbmVyYWxpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iU0VUVElOR1NfU0NSRUVOX01FU1NBR0UiPkltcG9zdGF6aW9uaSBNZXNzYWdnaTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlNFVFRJTkdTX1NDUkVFTl9ERVZJQ0VTIj5HZXN0aW9uZSBEaXNwb3NpdGl2aTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlNFVFRJTkdTX1NDUkVFTl9BRFZBTkNFRCI+SW1wb3N0YXppb25pIEF2YW56YXRlPC9zdHJpbmc+CisKKyAgPHN0cmluZyBuYW1lPSJTRVRUSU5HU19DSEVDS0JPWF9SRUxFQVNFX0JSQUlMTEVfREVWSUNFIj5TY29sbGVnYSBEaXNwb3NpdGl2byBCcmFpbGxlPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iU0VUVElOR1NfQlVUVE9OX05BVklHQVRJT05fTU9ERSI+TW9kYWxpdMOgIE5hdmlnYXppb25lPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iU0VUVElOR1NfQlVUVE9OX1NQRUVDSF9TVVBQT1JUIj5TdXBwb3J0byBWb2NlPC9zdHJpbmc+CisKKyAgPHN0cmluZyBuYW1lPSJTRVRUSU5HU19CVVRUT05fVEVYVF9UQUJMRSI+VGFiZWxsYSBkaSBUcmFkdXppb25lPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iU0VUVElOR1NfQlVUVE9OX0FUVFJJQlVURVNfVEFCTEUiPlRhYmVsbGEgQXR0cmlidXRpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iU0VUVElOR1NfQlVUVE9OX0NPTlRSQUNUSU9OX1RBQkxFIj5UYWJlbGxhIEJyYWlsbGUgQ29udHJhdHRvPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iU0VUVElOR1NfQlVUVE9OX0tFWUJPQVJEX1RBQkxFIj5UYWJlbGxhIFRhc3RpZXJhPC9zdHJpbmc+CisKKyAgPHN0cmluZyBuYW1lPSJTRVRUSU5HU19DSEVDS0JPWF9TSE9XX0FMRVJUUyI+VmlzdWFsaXp6YSBBdnZpc2k8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJTRVRUSU5HU19DSEVDS0JPWF9TSE9XX0FOTk9VTkNFTUVOVFMiPlZpc3VhbGl6emEgQW5udW5jaTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlNFVFRJTkdTX0NIRUNLQk9YX1NIT1dfTk9USUZJQ0FUSU9OUyI+VmlzdWFsaXp6YSBOb3RpZmljaGU8L3N0cmluZz4KKworICA8c3RyaW5nIG5hbWU9IlNFVFRJTkdTX0JVVFRPTl9MT0dfTEVWRUwiPkxpdmVsbG8gZGkgTG9nPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iU0VUVElOR1NfQlVUVE9OX0xPR19DQVRFR09SSUVTIj5DYXRlZ29yaWUgTG9nPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iU0VUVElOR1NfQ0hFQ0tCT1hfTE9HX0FDQ0VTU0lCSUxJVFlfRVZFTlRTIj5Mb2cgRXZlbnRpIEFjY2Vzc2liaWxpdMOgPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iU0VUVElOR1NfQ0hFQ0tCT1hfTE9HX1JFTkRFUkVEX1NDUkVFTiI+TG9nIExheW91dCBTY2hlcm1vPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iU0VUVElOR1NfQ0hFQ0tCT1hfTE9HX0tFWUJPQVJEX0VWRU5UUyI+TG9nIEV2ZW50aSBUYXN0aWVyYTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlNFVFRJTkdTX0NIRUNLQk9YX0xPR19VTkhBTkRMRURfRVZFTlRTIj5Mb2cgRXZlbnRpIE5vbiBHZXN0aXRpPC9zdHJpbmc+CisKKyAgPHN0cmluZyBuYW1lPSJERVZJQ0VTX0JVVFRPTl9TRUxFQ1RFRCI+RGlzcG9zaXRpdm8gU2VsZXppb25hdG88L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJERVZJQ0VTX0JVVFRPTl9BREQiPkFnZ2l1bmdpIERpc3Bvc2l0aXZvPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iREVWSUNFU19CVVRUT05fUkVNT1ZFIj5SaW11b3ZpIERpc3Bvc2l0aXZvPC9zdHJpbmc+CisKKyAgPHN0cmluZyBuYW1lPSJTRUxFQ1RFRF9ERVZJQ0VfTk9ORSI+bmVzc3VuIGRpc3Bvc2l0aXZvPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iU0VMRUNURURfREVWSUNFX1VOU0VMRUNURUQiPmRpc3Bvc2l0aXZvIG5vbiBzZWxlemlvbmF0bzwvc3RyaW5nPgorCisgIDxzdHJpbmcgbmFtZT0iQUREX0RFVklDRV9OQU1FIj5Ob21lIERpc3Bvc2l0aXZvPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iQUREX0RFVklDRV9NRVRIT0QiPk1vZGFsaXTDoCBkaSBDb2xsZWdhbWVudG88L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJBRERfREVWSUNFX1NFTEVDVCI+U2VsZXppb25hIERpc3Bvc2l0aXZvPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iQUREX0RFVklDRV9EUklWRVIiPkRyaXZlciBCcmFpbGxlPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iQUREX0RFVklDRV9ET05FIj5Db21wbGV0YXRvPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iQUREX0RFVklDRV9VTlNFTEVDVEVEX01FVEhPRCI+bW9kYWxpdMOgIGRpIGNvbXVuaWNhemlvbmUgbm9uIHNlbGV6aW9uYXRhPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iQUREX0RFVklDRV9VTlNFTEVDVEVEX0RFVklDRSI+ZGlzcG9zaXRpdm8gbm9uIHNlbGV6aW9uYXRvPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iQUREX0RFVklDRV9VTlNFTEVDVEVEX0RSSVZFUiI+ZHJpdmVyIGJyYWlsbGUgbm9uIHNlbGV6aW9uYXRvPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iQUREX0RFVklDRV9OT19ERVZJQ0VTIj5uZXNzdW4gZGlzcG9zaXRpdm88L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJBRERfREVWSUNFX0RVUExJQ0FURV9OQU1FIj5ub21lIGRpc3Bvc2l0aXZvIGdpw6AgaW4gdXNvPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iQUREX0RFVklDRV9OT19QRVJNSVNTSU9OIj5hY2Nlc3NvIGFsIGRpc3Bvc2l0aXZvIG5lZ2F0bzwvc3RyaW5nPgorCisgIDxzdHJpbmcgbmFtZT0iUkVNT1ZFX0RFVklDRV9QUk9NUFQiPlNlaSBzaWN1cm8gZGkgdm9sZXIgcmltdW92ZXJlIHF1ZXN0byBkaXNwb3NpdGl2bz88L3N0cmluZz4KKworICA8c3RyaW5nIG5hbWU9IlNFVF9TRUxFQ1RJT05fTk9ORSI+bmVzc3VuYSBzZWxlemlvbmU8L3N0cmluZz4KKworICA8c3RyaW5nIG5hbWU9Ik5BVklHQVRJT05fTU9ERV9MQUJFTF9MaXN0Ij5FbGVuY28gVmVydGljYWxlPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iTkFWSUdBVElPTl9NT0RFX0xBQkVMX0dyaWQiPkdyaWdsaWEgQmlkaW1lbnNpb25hbGU8L3N0cmluZz4KKworICA8c3RyaW5nIG5hbWU9IlNQRUVDSF9TVVBQT1JUX0xBQkVMX25hdGl2ZSI+TmF0aXZvPC9zdHJpbmc+CisKKyAgPHN0cmluZyBuYW1lPSJDT01NVU5JQ0FUSU9OX01FVEhPRF9MQUJFTF9CbHVldG9vdGgiPkJsdWV0b290aDwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkNPTU1VTklDQVRJT05fTUVUSE9EX0xBQkVMX1VzYiI+VVNCPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iQ09NTVVOSUNBVElPTl9NRVRIT0RfTEFCRUxfU2VyaWFsIj5TZXJpYWxlPC9zdHJpbmc+CisKKyAgPHN0cmluZyBuYW1lPSJMT0dfTEVWRUxfTEFCRUxfZGVidWciPkRlYnVnPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iTE9HX0xFVkVMX0xBQkVMX2luZm9ybWF0aW9uIj5JbmZvcm1hemlvbmk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJMT0dfTEVWRUxfTEFCRUxfbm90aWNlIj5Ob3RpZmljYTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkxPR19MRVZFTF9MQUJFTF93YXJuaW5nIj5BdnZpc288L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJMT0dfTEVWRUxfTEFCRUxfZXJyb3IiPkVycm9yZTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkxPR19MRVZFTF9MQUJFTF9jcml0aWNhbCI+Q3JpdGljbzwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkxPR19MRVZFTF9MQUJFTF9hbGVydCI+QWxsYXJtZTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkxPR19MRVZFTF9MQUJFTF9lbWVyZ2VuY3kiPkVtZXJnZW56YTwvc3RyaW5nPgorCisgIDxzdHJpbmcgbmFtZT0iTE9HX0NBVEVHT1JZX0xBQkVMX2lucGt0cyI+UGFjY2hldHRpIGluIEluZ3Jlc3NvPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iTE9HX0NBVEVHT1JZX0xBQkVMX291dHBrdHMiPlBhY2NoZXR0aSBpbiB1c2NpdGE8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJMT0dfQ0FURUdPUllfTEFCRUxfYnJsa2V5cyI+RXZlbnRpIENoaWF2ZSBEaXNwb3NpdGl2byBCcmFpbGxlPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iTE9HX0NBVEVHT1JZX0xBQkVMX2tiZGtleXMiPkV2ZW50aSBDaGlhdmUgVGFzdGllcmE8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJMT0dfQ0FURUdPUllfTEFCRUxfY3NydHJrIj5UcmFjY2lhbWVudG8gQ3Vyc29yZTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkxPR19DQVRFR09SWV9MQUJFTF9jc3JydGciPkN1cnNvciBSb3V0aW5nPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iTE9HX0NBVEVHT1JZX0xBQkVMX3VwZGF0ZSI+RXZlbnRpIGRpIEFnZ2lvcm5hbWVudG88L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJMT0dfQ0FURUdPUllfTEFCRUxfc3BlZWNoIj5FdmVudGkgQXVkaW88L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJMT0dfQ0FURUdPUllfTEFCRUxfYXN5bmMiPkV2ZW50aSBBc2luY3Jvbmk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJMT0dfQ0FURUdPUllfTEFCRUxfc2VydmVyIj5FdmVudGkgU2VydmVyPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iTE9HX0NBVEVHT1JZX0xBQkVMX2dpbyI+SS9PIGdlbmVyaWNvPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iTE9HX0NBVEVHT1JZX0xBQkVMX3NlcmlhbCI+SS9PIFNlcmlhbGU8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJMT0dfQ0FURUdPUllfTEFCRUxfdXNiIj5JL08gVVNCPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iTE9HX0NBVEVHT1JZX0xBQkVMX2J0Ij5JL08gQmx1ZXRvb3RoPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iTE9HX0NBVEVHT1JZX0xBQkVMX2hpZCI+SS9PIEludGVyZmFjY2lhIFVvbW8tTWFjY2hpbmE8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJMT0dfQ0FURUdPUllfTEFCRUxfYnJsZHJ2Ij5FdmVudGkgRHJpdmVyIEJyYWlsbGU8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJMT0dfQ0FURUdPUllfTEFCRUxfc3BrZHJ2Ij5FdmVudGkgRHJpdmVyIFZvY2U8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJMT0dfQ0FURUdPUllfTEFCRUxfc2NyZHJ2Ij5FdmVudGkgRHJpdmVyIFNjaGVybW88L3N0cmluZz4KKworICA8c3RyaW5nIG5hbWU9IkJSQUlMTEVfRFJJVkVSX0xBQkVMX2F1dG8iPlJpbGV2YW1lbnRvIEF1dG9tYXRpY288L3N0cmluZz4KKworICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfYXV0byI+U2VsZXppb25lIEF1dG9tYXRpY2EgaW4gYmFzZSBhbCBsb2NhbGU8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX2FyIj5BcmFibyAoZ2VuZXJpY28pPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9hcyI+QXNzYW1lc2U8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX2F3YSI+QXdhZGhpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9iZyI+QnVsZ2Fybzwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfYmgiPkJpaGFyaTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfYm4iPkJlbmdhbGk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX2JvIj5UaWJldGFubzwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfYnJhIj5CcmFqPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9icmYiPkJyYWlsbGUgUmVhZHkgRm9ybWF0IChQZXIgdmlzdWFpenphciBmaWxlIC5icmYgYWxsXCdpbnRlcm8gZGkgdW4gZWRpdHIgbyBkaSB1biBwYWdlcik8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX2NzIj5DZWNvPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9jeSI+R2FsbGVzZTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfZGEiPkRhbmVzZTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfZGFfMTI1MiI+RGFuZXNlIChTdmVuZCBUaG91Z2FhcmQsIDIwMDLigJMxMeKAkzE4KTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfZGFfbHQiPkRhbmVzZSAoTG9nVGV4dCk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX2RlIj5UZWRlc2NvPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9kcmEiPkRyYXZpZGljbzwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfZWwiPkdyZWNvPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9lbiI+SW5nbGVzZTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfZW5fQ0EiPkluZ2xlc2UgKENhbmFkYSk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX2VuX0dCIj5JbmdsZXNlIChSZWdubyBVbml0byk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX2VuX25hYmNjIj5JbmdsZXNlIChOb3J0aCBBbWVyaWNhbiBCcmFpbGxlIENvbXB1dGVyIENvZGUpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9lbl9VUyI+SW5nbGVzZSAoU3RhdGkgVW5pdGkpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9lbyI+RXNwZXJhbnRvPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9lcyI+U3BhbmlzaDwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfZXQiPkVzdG9uZTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfZmkiPkZpbmxhbmRlc2U8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX2ZyIj5GcmFuY2VzZTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfZnJfMjAwNyI+RnJhbmNlc2UgKHVuaWZpY2F0byAyMDA3KTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfZnJfQ0EiPkZyYW5jZXNlIChDYW5hZGEpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9mcl9jYmlmcyI+RnJhbmNlc2UgKENvZGUgQnJhaWxsZSBJbmZvcm1hdGlxdWUgRnJhbsOnYWlzIFN0YW5kYXJkKTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfZnJfRlIiPkZyYW5jZXNlIChGcmFuY2lhKTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfZnJfdnMiPkZyYW5jZXNlIChWaXNpb0JyYWlsbGUpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9nYSI+SXJsYW5kZXNlPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9nZCI+R2FlbGljbzwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfZ29uIj5Hb25kaTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfZ3UiPkd1amFyYXRpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9oZSI+RWJyYWljbzwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfaGkiPkhpbmRpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9ociI+Q3JvYXRvPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9odSI+VW5naGVyZXNlPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9oeSI+QXJtZW5vPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9pcyI+SXNsYW5kZXNlPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9pdCI+SXRhbGlhbm88L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX2toYSI+S2hhc2k8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX2tuIj5LYW5uYWRhPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9rb2siPktvbmthbmk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX2tydSI+S3VydWtoPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9sdCI+TGl0dWFubzwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfbHYiPkxldHRvbmU8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX21nIj5NYWxhZ2FzeTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfbWkiPk1hb3JpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9tbCI+TWFsYXlhbGFtPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9tbmkiPk1hbmlwdXJpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9tciI+TWFyYXRoaTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfbXQiPk1hbHRlc2U8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX211biI+TXVuZGE8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX213ciI+TWFyd2FyaTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfbmUiPk5lcGFsaTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfbmV3Ij5OZXdhcmk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX25sIj5PbGFuZGVzZTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfbmxfQkUiPk9sYW5kZXNlIChCZWxnaW8pPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9ubF9OTCI+T2xhbmRlc2UgKE9sYW5kYSk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX25vIj5Ob3J2ZWdlc2U8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX25vX2dlbmVyaWMiPk5vcnZlZ2VzZSAoY29uIHN1cHBvcnRvIHByIGFsdHJlIGxpbmd1ZSk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX25vX291cCI+Tm9ydmVnZXNlIChPZmZlbnRsaWcgdXR2YWxnIGZvciBwdW5rdHNrcmlmdCk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX253YyI+TmV3YXJpIChvbGQpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9vciI+T3JpeWE8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX3BhIj5QYW5qYWJpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9waSI+UGFsaTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfcGwiPlBvbGFjY288L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX3B0Ij5Qb3J0b2doZXNlPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9ybyI+Um9tZW5vPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9ydSI+UnVzc288L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX3NhIj5TYW5zY3JpdG88L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX3NhdCI+U2FudGFsaTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfc2QiPlNpbmRoaTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfc2UiPlNhbWkgKFNldHRlbnRyaW9uYWxlKTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfc2siPlNsb3ZhY2NvPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9zbCI+U2xvdmVubzwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfc3YiPlN2ZWRlc2U8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX3N2XzE5ODkiPlN2ZWRlc2UgKHN0YW5kYXJkIDE5ODkpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9zdl8xOTk2Ij5Td2VkaXNoIChzdGFuZGFyZCAxOTk2KTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfc3ciPlN3YWhpbGk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX3RhIj5UYW1pbDwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfdGUiPlRlbHVndTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfdHIiPlR1cmNvPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF91ayI+VWNyYWlubzwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfdmkiPlZpZXRuYW1pdGE8L3N0cmluZz4KKworICA8c3RyaW5nIG5hbWU9IkFUVFJJQlVURVNfVEFCTEVfTEFCRUxfaW52bGVmdF9yaWdodCI+aW52ZXJzaW9uZSBjb2xvcmUgcHJpbW8gcGlhbm8gbmVsbGEgY29sb25uYSBzaW5pc3RyYSBlIGNvbG9yZSBzZm9uZG8gbmVsbGEgY29sb25uYSBkZXN0cmE8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJBVFRSSUJVVEVTX1RBQkxFX0xBQkVMX2xlZnRfcmlnaHQiPmNvbG9yZSBwcmltbyBwaWFubyBuZWxsYSBjb2xvbm5hIHNpbmlzdHJhIGUgY29sb3JlIHNmb25kbyBuZWxsYSBjb2xvbm5hIGRlc3RyYTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkFUVFJJQlVURVNfVEFCTEVfTEFCRUxfdXBwZXJfbG93ZXIiPmNvbG9yZSBwcmltbyBwaWFubyBuZWwgcmlxdWFkcm8gc3VwZXJpb3JlIGUgY29sb3JlIHNmb25kbyBuZWwgcmlxdWFkcm8gaW5mZXJpb3JlPC9zdHJpbmc+CisKKyAgPHN0cmluZyBuYW1lPSJDT05UUkFDVElPTl9UQUJMRV9MQUJFTF9hdXRvIj5TZWxlemlvbmUgQXV0b21hdGljYSBpbiBiYXNlIGFsIGxvY2FsZTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkNPTlRSQUNUSU9OX1RBQkxFX0xBQkVMX2FmIj5BZnJpa2FhbnMgKGNvbnRyYXR0byk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJDT05UUkFDVElPTl9UQUJMRV9MQUJFTF9hbSI+QW1hcmljbyAobm9uIGNvbnRyYXR0byk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJDT05UUkFDVElPTl9UQUJMRV9MQUJFTF9kZSI+VGVkZXNjbzwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkNPTlRSQUNUSU9OX1RBQkxFX0xBQkVMX2RlX2cwIj5UZWRlc2NvIChub24gY29udHJhdHRvKTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkNPTlRSQUNUSU9OX1RBQkxFX0xBQkVMX2RlX2cxIj5UZXNlc2NvKGNvbnRyYXppb25pIGRpIGJhc2UpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iQ09OVFJBQ1RJT05fVEFCTEVfTEFCRUxfZGVfZzIiPlRlc2VzY28gKGNvbnRyYXR0byk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJDT05UUkFDVElPTl9UQUJMRV9MQUJFTF9kZV8xOTk4Ij5UZXNlc2NvIChjb250cmF0dG8gLSBzdGFuZGFyZCAxOTk4KTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkNPTlRSQUNUSU9OX1RBQkxFX0xBQkVMX2RlXzIwMTUiPlRlc2VzY28gKGNvbnRyYXR0byAtIHN0YW5kYXJkIDIwMTUpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iQ09OVFJBQ1RJT05fVEFCTEVfTEFCRUxfZW4iPkluZ2xlc2U8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJDT05UUkFDVElPTl9UQUJMRV9MQUJFTF9lbl9VUyI+SW5nbGVzZSAoU3RhdGkgVW5pdGkpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iQ09OVFJBQ1RJT05fVEFCTEVfTEFCRUxfZW5fdWViX2cxIj5JbmdsZXNlIChVbmlmaWNhdG8sIG5vbiBjb250cmF0dG8pPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iQ09OVFJBQ1RJT05fVEFCTEVfTEFCRUxfZW5fdWViX2cyIj5JbmdsZXNlIChVbmlmaWVkIEVuZ2xpc2ggQnJhaWxsZSwgZ3JhZG8gMik8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJDT05UUkFDVElPTl9UQUJMRV9MQUJFTF9lbl91c19nMiI+SW5nbGVzZSAoVVNBLCBncmFkTyAyKTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkNPTlRSQUNUSU9OX1RBQkxFX0xBQkVMX2VzIj5TcGFnbm9sbyAoZ3JhZG8gMik8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJDT05UUkFDVElPTl9UQUJMRV9MQUJFTF9mciI+RnJhbmNlc2U8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJDT05UUkFDVElPTl9UQUJMRV9MQUJFTF9mcl9nMSI+RnJhbmNlc2UgKG5vbiBjb250cmF0dG8pPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iQ09OVFJBQ1RJT05fVEFCTEVfTEFCRUxfZnJfZzIiPkZyYW5jZXNlIChjb250cmF0dG8pPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iQ09OVFJBQ1RJT05fVEFCTEVfTEFCRUxfaGEiPkhhdXNhIChjb250cmF0dG8pPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iQ09OVFJBQ1RJT05fVEFCTEVfTEFCRUxfaWQiPkluZG9uZXNpYW5vIChjb250cmF0dG8pPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iQ09OVFJBQ1RJT05fVEFCTEVfTEFCRUxfaXBhIj5BbGZhYmV0byBGb25ldGljbyBJbnRlcm5hemlvbmFsZTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkNPTlRSQUNUSU9OX1RBQkxFX0xBQkVMX2phIj5HaWFwcG9uZXNlIChub24gY29udHJhdHRvKTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkNPTlRSQUNUSU9OX1RBQkxFX0xBQkVMX2tvIj5Db3JlYW5vPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iQ09OVFJBQ1RJT05fVEFCTEVfTEFCRUxfa29fZzAiPkNvcmVhbm8gKG5vbiBjb250cmF0dG8pPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iQ09OVFJBQ1RJT05fVEFCTEVfTEFCRUxfa29fZzEiPkNvcmVhbm8gKGdyYWRvIDEpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iQ09OVFJBQ1RJT05fVEFCTEVfTEFCRUxfa29fZzIiPkNvcmVhbm8gKGdyYWRvIDIpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iQ09OVFJBQ1RJT05fVEFCTEVfTEFCRUxfbHQiPkxpdHVhbm8gKG5vbiBjb250cmF0dG8pPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iQ09OVFJBQ1RJT05fVEFCTEVfTEFCRUxfbWciPk1hbGFnYXN5IChjb250cmF0dG8pPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iQ09OVFJBQ1RJT05fVEFCTEVfTEFCRUxfbXVuIj5NdW5kYSAoY29udHJhdHRvKTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkNPTlRSQUNUSU9OX1RBQkxFX0xBQkVMX25sIj5PbGFuZGVzZSAoY29udHJhdHRvKTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkNPTlRSQUNUSU9OX1RBQkxFX0xBQkVMX255Ij5DaGljaGV3YSAoY29udHJhdHRvKTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkNPTlRSQUNUSU9OX1RBQkxFX0xBQkVMX3B0Ij5Qb3J0b2doZXNlIChncmFkbyAyKTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkNPTlRSQUNUSU9OX1RBQkxFX0xBQkVMX3J1Ij5SdXNzbyAoY29udHJhY3RlZCk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJDT05UUkFDVElPTl9UQUJMRV9MQUJFTF9zaSI+U2luaGFsZXNlIChub24gY29udHJhdHRvKTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkNPTlRSQUNUSU9OX1RBQkxFX0xBQkVMX3N3Ij5Td2FoaWxpIChjb250cmF0dG8pPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iQ09OVFJBQ1RJT05fVEFCTEVfTEFCRUxfdGgiPlRoYWkgKGNvbnRyYXR0byk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJDT05UUkFDVElPTl9UQUJMRV9MQUJFTF96aF9UVyI+Q2luZXNlIChUYWl3YW4sIG5vbiBjb250cmF0dG8pPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iQ09OVFJBQ1RJT05fVEFCTEVfTEFCRUxfenUiPlp1bHUgKGNvbnRyYXR0byk8L3N0cmluZz4KKworICA8c3RyaW5nIG5hbWU9IktFWUJPQVJEX1RBQkxFX0xBQkVMX2JyYWlsbGUiPmNvbWJpbmF6aW9uaSB0YXN0aSBwZXIgdGFzdGllcmUgYnJhaWxsZTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IktFWUJPQVJEX1RBQkxFX0xBQkVMX2Rlc2t0b3AiPmNvbWJpbmF6aW9uaSB0YXN0aSBwZXIgdGFzdGllcmUgZXN0ZXNlPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iS0VZQk9BUkRfVEFCTEVfTEFCRUxfa2V5cGFkIj5jb21iaW5hemlvbmkgZGkgdGFzdGkgcGVyIG5hdmlnYXppb25lIGRhIHRhc3RpZXJpbm8gbnVtZXJpY288L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJLRVlCT0FSRF9UQUJMRV9MQUJFTF9sYXB0b3AiPmNvbWJpbmF6aW9uaSBkaSB0YXN0aSBwZXIgdGFzdGllcmUgc2VuemEgdGFzdGllcmlubyBudW1lcmljbzwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IktFWUJPQVJEX1RBQkxFX0xBQkVMX3N1bl90eXBlNiI+Y29tYmluYXppb25pIGRpIHRhc3RpIHBlciB0YXN0aWVyZSBkaSBzb3R0b3RpcG8gNjwvc3RyaW5nPgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9BbmRyb2lkL0dyYWRsZS9hcHAvc3JjL21haW4vcmVzL3ZhbHVlcy1uYi9kZWZhdWx0cy54bWwgYi9BbmRyb2lkL0dyYWRsZS9hcHAvc3JjL21haW4vcmVzL3ZhbHVlcy1uYi9kZWZhdWx0cy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTU1NDRmOAotLS0gL2Rldi9udWxsCisrKyBiL0FuZHJvaWQvR3JhZGxlL2FwcC9zcmMvbWFpbi9yZXMvdmFsdWVzLW5iL2RlZmF1bHRzLnhtbApAQCAtMCwwICsxLDUgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+CisKKzxyZXNvdXJjZXM+CisgIDxzdHJpbmcgbmFtZT0iREVGQVVMVF9URVhUX1RBQkxFIj5ubzwvc3RyaW5nPgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9BbmRyb2lkL0dyYWRsZS9hcHAvc3JjL21haW4vcmVzL3ZhbHVlcy1uYi9zdHJpbmdzLnhtbCBiL0FuZHJvaWQvR3JhZGxlL2FwcC9zcmMvbWFpbi9yZXMvdmFsdWVzLW5iL3N0cmluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEzNzg0Y2QKLS0tIC9kZXYvbnVsbAorKysgYi9BbmRyb2lkL0dyYWRsZS9hcHAvc3JjL21haW4vcmVzL3ZhbHVlcy1uYi9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDI4OCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KKworPHJlc291cmNlcz4KKyAgPHN0cmluZyBuYW1lPSJhcHBfZGVzY3JpcHRpb24iPkJSTFRUWSBzdMO4dHRlciBwdW5rdHNrcmlmdGVuaGV0ZXIuPC9zdHJpbmc+CisKKyAgPHN0cmluZyBuYW1lPSJ1c2JNb25pdG9yX2xhYmVsIj5PYnNlcnZlcmUgdGlsa29wbGV0IFVTQi1lbmhldDwvc3RyaW5nPgorCisgIDxzdHJpbmcgbmFtZT0iYWJvdXRfbGFiZWxfYWN0aXZpdHkiPk9tIHByb2dyYW1tZXQ8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJhYm91dF9sYWJlbF9jb3B5cmlnaHQiPk9wcGhhdnNyZXR0PC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iYWJvdXRfbGFiZWxfYnVpbGRUaW1lIj5CeWdnZXRpZDwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9ImFib3V0X2xhYmVsX3NvdXJjZVJldmlzaW9uIj5raWxkZWtvZGV1dGdhdmU8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJhYm91dF9sYWJlbF9wcml2YWN5UG9saWN5Ij5QZXJzb252ZXJucmVnbGVyPC9zdHJpbmc+CisKKyAgPHN0cmluZyBuYW1lPSJpbnB1dFNlcnZpY2VfbmFtZSI+SW5uZGF0YXRqZW5lc3RlIGZvciBCUkxUVFk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJpbnB1dFNlcnZpY2VfdHlwZSI+VGFzdGF0dXIgcMOlIHB1bmt0c2tyaWZ0ZW5oZXRlcjwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9ImlucHV0U2VydmljZV9ub3RfZW5hYmxlZCI+aW5uZGF0YXRqZW5lc3RlbiBlciBpa2tlIGFrdGl2ZXJ0PC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iaW5wdXRTZXJ2aWNlX25vdF9zZWxlY3RlZCI+aW5uZGF0YXRqZW5lc3RlbiBlciBpa2tlIHZhbGd0PC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iaW5wdXRTZXJ2aWNlX25vdF9zdGFydGVkIj5pbm5kYXRhdGplbmVzdGVuIGVyIGlra2Ugc3RhcnRldDwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9ImlucHV0U2VydmljZV9ub3RfY29ubmVjdGVkIj5pbm5kYXRhdGplbmVzdGVuIGVyIGlra2UgdGlsa29ibGV0PC9zdHJpbmc+CisKKyAgPHN0cmluZyBuYW1lPSJ1cGRhdGVBcHBsaWNhdGlvbl9wcm9ibGVtX2ZhaWxlZCI+cHJvZ3JhbW1ldCBlciBpa2tlIG9wcGRhdGVydDwvc3RyaW5nPgorCisgIDxzdHJpbmcgbmFtZT0icGFja2FnZUluc3RhbGxlcl9wcm9ibGVtX2ZhaWxlZCI+cGFra2VuIGVyIGlra2UgaW5zdGFsbGVydDwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9InBhY2thZ2VJbnN0YWxsZXJfcHJvYmxlbV9zYW1lIj5zYW1tZSB2ZXJzam9uPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0icGFja2FnZUluc3RhbGxlcl9wcm9ibGVtX2Rvd25ncmFkZSI+bmVkZ3JhZGVyaW5nIGVyIGlra2UgdGlsbGF0dDwvc3RyaW5nPgorCisgIDxzdHJpbmcgbmFtZT0iZmlsZURvd25sb2FkZXJfdGl0bGUiPkJSTFRUWSBmaWxuZWRsYXN0ZXI8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJmaWxlRG93bmxvYWRlcl9wcm9ibGVtX2ZhaWxlZCI+ZmlsYSBlciBpa2tlIGxhc3RldCBuZWQ8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJmaWxlRG93bmxvYWRlcl9zdGF0ZV9jb25uZWN0aW5nIj5rb2JsZXIgdGlsPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iZmlsZURvd25sb2FkZXJfc3RhdGVfZG93bmxvYWRpbmciPmxhc3RlciBuZWQ8L3N0cmluZz4KKworICA8c3RyaW5nIG5hbWU9InNldHRpbmdfc3RhdGVfb2ZmIj5hdjwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9ImNoZWNrYm94X3N0YXRlX3VuY2hlY2tlZCI+bmVpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iY2hlY2tib3hfc3RhdGVfY2hlY2tlZCI+amE8L3N0cmluZz4KKworICA8c3RyaW5nIG5hbWU9ImJyYWlsbGVfY2hhbm5lbF9uYW1lIj5QdW5rdHNrcmlmdGVuaGV0c3N0YXR1czwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9ImJyYWlsbGVfaGludF90YXAiPnRyeWtrIGZvciBoYW5kbGluZ2VyPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iYnJhaWxsZV9zdGF0ZV9yZWxlYXNlZCI+RnJpZ2pvcnQ8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJicmFpbGxlX3N0YXRlX3dhaXRpbmciPlZlbnRlcjwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9ImJyYWlsbGVfc3RhdGVfY29ubmVjdGVkIj5UaWxrb2JsZXQ8L3N0cmluZz4KKworICA8c3RyaW5nIG5hbWU9IkdMT0JBTF9CVVRUT05fTk9USUZJQ0FUSU9OUyI+VmFyc2xpbmdlcjwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkdMT0JBTF9CVVRUT05fUVVJQ0tfU0VUVElOR1MiPkh1cnRpZ2lubnN0aWxsaW5nZXI8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJHTE9CQUxfQlVUVE9OX0JBQ0siPlRpbGJha2U8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJHTE9CQUxfQlVUVE9OX0hPTUUiPkhqZW08L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJHTE9CQUxfQlVUVE9OX1JFQ0VOVF9BUFBTIj5OeWxpZyBicnVrdGUgYXBwZXI8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJHTE9CQUxfQlVUVE9OX09WRVJWSUVXIj5PdmVyc2lrdDwvc3RyaW5nPgorCisgIDxzdHJpbmcgbmFtZT0iR0xPQkFMX0JVVFRPTl9TV0lUQ0hfSU5QVVRfTUVUSE9EIj5CeXR0IGlubmRhdGFtZXRvZGU8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJHTE9CQUxfQlVUVE9OX1ZJRVdfVVNFUl9HVUlERSI+VmlzIGJydWtlcnZlaWxlZG5pbmc8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJHTE9CQUxfQlVUVE9OX0JST1dTRV9XRUJfU0lURSI+QmxhIGdqZW5ub20gbmV0dHN0ZWRldDwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkdMT0JBTF9CVVRUT05fQlJPV1NFX0NPTU1VTklUWV9NRVNTQUdFUyI+QmxhIGdqZW5ub20gZmVsbGVzc2thcHNtZWxkaW5nZXI8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJHTE9CQUxfQlVUVE9OX1BPU1RfQ09NTVVOSVRZX01FU1NBR0UiPlBvc3QgZmVsbGVzc2thcHNtZWxkaW5nPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iR0xPQkFMX0JVVFRPTl9NQU5BR0VfQ09NTVVOSVRZX01FTUJFUlNISVAiPkFkbWluaXN0cmVyIGZlbGxlc3NrYXBzbWVkbGVtc2thcDwvc3RyaW5nPgorCisgIDxzdHJpbmcgbmFtZT0iR0xPQkFMX0JVVFRPTl9VUERBVEVfQVBQTElDQVRJT04iPk9wcGRhdGVyIHByb2dyYW1tZXQ8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJHTE9CQUxfQ0hFQ0tCT1hfREVWRUxPUEVSX0JVSUxEIj5VdHZpa2xlcnV0Z2F2ZTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkdMT0JBTF9DSEVDS0JPWF9BTExPV19ET1dOR1JBREUiPlRpbGxhdCBuZWRncmFkZXJpbmc8L3N0cmluZz4KKworICA8c3RyaW5nIG5hbWU9IkNIT09TRVJfVElUTEVfQUNDRVNTSUJJTElUWV9BQ1RJT05TIj5UaWxnamVuZ2VsaWdoZXRzaGFuZGxpbmdlcjwvc3RyaW5nPgorCisgIDxzdHJpbmcgbmFtZT0iU0VUVElOR1NfU0NSRUVOX01BSU4iPklubnN0aWxsaW5nZXIgZm9yIEJSTFRUWTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlNFVFRJTkdTX1NDUkVFTl9HRU5FUkFMIj5HZW5lcmVsbGUgaW5uc3RpbGxpbmdlcjwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlNFVFRJTkdTX1NDUkVFTl9NRVNTQUdFIj5NZWxkaW5nc2lubnN0aWxsaW5nZXI8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJTRVRUSU5HU19TQ1JFRU5fREVWSUNFUyI+QWRtaW5pc3RyZXJlIGVuaGV0ZXI8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJTRVRUSU5HU19TQ1JFRU5fQURWQU5DRUQiPkF2YW5zZXJ0ZSBpbm5zdGlsbGluZ2VyPC9zdHJpbmc+CisKKyAgPHN0cmluZyBuYW1lPSJTRVRUSU5HU19DSEVDS0JPWF9SRUxFQVNFX0JSQUlMTEVfREVWSUNFIj5GcmlnasO4ciBwdW5rdHNrcmlmdGVuaGV0ZW48L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJTRVRUSU5HU19CVVRUT05fTkFWSUdBVElPTl9NT0RFIj5OYXZpZ2Fzam9uc21vZHVzPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iU0VUVElOR1NfQlVUVE9OX1NQRUVDSF9TVVBQT1JUIj5TdMO4dHRlIGZvciB0YWxlPC9zdHJpbmc+CisKKyAgPHN0cmluZyBuYW1lPSJTRVRUSU5HU19CVVRUT05fVEVYVF9UQUJMRSI+VGVrc3R0YWJlbGw8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJTRVRUSU5HU19CVVRUT05fQVRUUklCVVRFU19UQUJMRSI+QXR0cmlidXR0YWJlbGw8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJTRVRUSU5HU19CVVRUT05fQ09OVFJBQ1RJT05fVEFCTEUiPktvcnRza3JpZnR0YWJlbGw8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJTRVRUSU5HU19CVVRUT05fS0VZQk9BUkRfVEFCTEUiPlRhc3RhdHVydGFiZWxsPC9zdHJpbmc+CisKKyAgPHN0cmluZyBuYW1lPSJTRVRUSU5HU19DSEVDS0JPWF9TSE9XX0FMRVJUUyI+VmlzIGFkdmFyc2xlcjwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlNFVFRJTkdTX0NIRUNLQk9YX1NIT1dfQU5OT1VOQ0VNRU5UUyI+VmlzIG1lbGRpbmdlcjwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlNFVFRJTkdTX0NIRUNLQk9YX1NIT1dfTk9USUZJQ0FUSU9OUyI+VmlzIHZhcnNsZXI8L3N0cmluZz4KKworICA8c3RyaW5nIG5hbWU9IlNFVFRJTkdTX0JVVFRPTl9MT0dfTEVWRUwiPkxvZ2dlbml2w6U8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJTRVRUSU5HU19CVVRUT05fTE9HX0NBVEVHT1JJRVMiPkxvZ2dla2F0ZWdvcmllcjwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlNFVFRJTkdTX0NIRUNLQk9YX0xPR19BQ0NFU1NJQklMSVRZX0VWRU5UUyI+TG9nZyB0aWxnamVuZ2VsaWdoZXRzaGVuZGVsc2VyPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iU0VUVElOR1NfQ0hFQ0tCT1hfTE9HX1JFTkRFUkVEX1NDUkVFTiI+TG9nZyBnamVuZ2l0dCBza2plcm1iaWxkZTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlNFVFRJTkdTX0NIRUNLQk9YX0xPR19LRVlCT0FSRF9FVkVOVFMiPkxvZ2cgdGFzdGF0dXJoZW5kZWxzZXI8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJTRVRUSU5HU19DSEVDS0JPWF9MT0dfVU5IQU5ETEVEX0VWRU5UUyI+TG9nZyBpa2tlLWjDpW5kdGVydGUgaGVuZGVsc2VyPC9zdHJpbmc+CisKKyAgPHN0cmluZyBuYW1lPSJERVZJQ0VTX0JVVFRPTl9TRUxFQ1RFRCI+VmFsZ3QgZW5oZXQ8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJERVZJQ0VTX0JVVFRPTl9BREQiPkxlZ2cgdGlsIGVuaGV0PC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iREVWSUNFU19CVVRUT05fUkVNT1ZFIj5GamVybiBlbmhldDwvc3RyaW5nPgorCisgIDxzdHJpbmcgbmFtZT0iU0VMRUNURURfREVWSUNFX05PTkUiPmluZ2VuIGVuaGV0ZXI8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJTRUxFQ1RFRF9ERVZJQ0VfVU5TRUxFQ1RFRCI+ZW5oZXRlbiBlciBpa2tlIHZhbGd0PC9zdHJpbmc+CisKKyAgPHN0cmluZyBuYW1lPSJBRERfREVWSUNFX05BTUUiPkVuaGV0c25hdm48L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJBRERfREVWSUNFX01FVEhPRCI+S29tbXVuaWthc2pvbnNtZXRvZGU8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJBRERfREVWSUNFX1NFTEVDVCI+VmVsZyBlbmhldDwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkFERF9ERVZJQ0VfRFJJVkVSIj5QdW5rdHNrcmlmdGRyaXZlcjwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkFERF9ERVZJQ0VfRE9ORSI+RmVyZGlnPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iQUREX0RFVklDRV9VTlNFTEVDVEVEX01FVEhPRCI+a29tbXVuaWthc2pvbnNtZXRvZGVuIGVyIGlra2UgdmFsZ3Q8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJBRERfREVWSUNFX1VOU0VMRUNURURfREVWSUNFIj5lbmhldGVuIGVyIGlra2UgdmFsZ3Q8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJBRERfREVWSUNFX1VOU0VMRUNURURfRFJJVkVSIj5wdW5rdHNrcmlmdGRyaXZlcmVuIGVyIGlra2UgdmFsZ3Q8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJBRERfREVWSUNFX05PX0RFVklDRVMiPmluZ2VuIGVuaGV0ZXI8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJBRERfREVWSUNFX0RVUExJQ0FURV9OQU1FIj5lbmhldHNuYXZuZXQgZXIgYWxsZXJlZGUgaSBicnVrPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iQUREX0RFVklDRV9OT19QRVJNSVNTSU9OIj50aWxnYW5nIHRpbCBlbmhldGVuIGVyIGlra2UgZ2l0dDwvc3RyaW5nPgorCisgIDxzdHJpbmcgbmFtZT0iUkVNT1ZFX0RFVklDRV9QUk9NUFQiPlZpbCBkdSB2aXJrZWxpZyBmamVybmUgZGVubmUgZW5oZXRlbj88L3N0cmluZz4KKworICA8c3RyaW5nIG5hbWU9IlNFVF9TRUxFQ1RJT05fTk9ORSI+aW5nZW50aW5nIGVyIHZhbGd0PC9zdHJpbmc+CisKKyAgPHN0cmluZyBuYW1lPSJOQVZJR0FUSU9OX01PREVfTEFCRUxfTGlzdCI+VmVydGlrYWwgbGlzdGU8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJOQVZJR0FUSU9OX01PREVfTEFCRUxfR3JpZCI+VG9kaW1lbnNqb25hbHQgcnV0ZW5ldHQ8L3N0cmluZz4KKworICA8c3RyaW5nIG5hbWU9IlNQRUVDSF9TVVBQT1JUX0xBQkVMX25hdGl2ZSI+b3JpZ2luYWw8L3N0cmluZz4KKworICA8c3RyaW5nIG5hbWU9IkNPTU1VTklDQVRJT05fTUVUSE9EX0xBQkVMX0JsdWV0b290aCI+Qmx1ZXRvb3RoPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iQ09NTVVOSUNBVElPTl9NRVRIT0RfTEFCRUxfVXNiIj5VU0I8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJDT01NVU5JQ0FUSU9OX01FVEhPRF9MQUJFTF9TZXJpYWwiPlNlcmllbGw8L3N0cmluZz4KKworICA8c3RyaW5nIG5hbWU9IkxPR19MRVZFTF9MQUJFTF9kZWJ1ZyI+RmVpbHJldHRpbmc8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJMT0dfTEVWRUxfTEFCRUxfaW5mb3JtYXRpb24iPkluZm9ybWFzam9uPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iTE9HX0xFVkVMX0xBQkVMX25vdGljZSI+Tm90ZTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkxPR19MRVZFTF9MQUJFTF93YXJuaW5nIj5BZHZhcnNlbDwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkxPR19MRVZFTF9MQUJFTF9lcnJvciI+RmVpbDwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkxPR19MRVZFTF9MQUJFTF9jcml0aWNhbCI+S3JpdGlzazwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkxPR19MRVZFTF9MQUJFTF9hbGVydCI+VmFyc2VsPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iTE9HX0xFVkVMX0xBQkVMX2VtZXJnZW5jeSI+TsO4ZHN0aWxmZWxsZTwvc3RyaW5nPgorCisgIDxzdHJpbmcgbmFtZT0iTE9HX0NBVEVHT1JZX0xBQkVMX2lucGt0cyI+SW5uZGF0YXBha2tlcjwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkxPR19DQVRFR09SWV9MQUJFTF9vdXRwa3RzIj5VdGRhdGFwYWtrZXI8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJMT0dfQ0FURUdPUllfTEFCRUxfYnJsa2V5cyI+SGVuZGVsc2VyIGtueXR0ZXQgdGlsIHRhc3RlciBww6UgZW4gcHVua3Rza3JpZnRlbmhldDwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkxPR19DQVRFR09SWV9MQUJFTF9rYmRrZXlzIj5IZW5kZWxzZXIga255dHRldCB0aWwgdGFzdGVyIHDDpSBldCB0YXN0YXR1cjwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkxPR19DQVRFR09SWV9MQUJFTF9jc3J0cmsiPk1hcmvDuHJmw7hsZ2luZzwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkxPR19DQVRFR09SWV9MQUJFTF9jc3JydGciPk1hcmvDuHJoZW50aW5nPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iTE9HX0NBVEVHT1JZX0xBQkVMX3VwZGF0ZSI+SGVuZGVsc2VyIGtueXR0ZXQgdGlsIG9wcGRhdGVyaW5nPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iTE9HX0NBVEVHT1JZX0xBQkVMX3NwZWVjaCI+SGVuZGVsc2VyIGtueXR0ZXQgdGlsIHRhbGU8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJMT0dfQ0FURUdPUllfTEFCRUxfYXN5bmMiPkhlbmRlbHNlciBrbnl0dGV0IHRpbCBhc3lua3JvbiBrb21tdW5pa2Fzam9uPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iTE9HX0NBVEVHT1JZX0xBQkVMX3NlcnZlciI+SGVuZGVsc2VyIGtueXR0ZXQgdGlsIHRqZW5lcmVuPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iTE9HX0NBVEVHT1JZX0xBQkVMX2dpbyI+VmFubGlnZSBpbm4tIGVsbGVyIHV0ZGF0YTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkxPR19DQVRFR09SWV9MQUJFTF9zZXJpYWwiPlNlcmllbGxlIGlubi0gZWxsZXIgdXRkYXRhPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iTE9HX0NBVEVHT1JZX0xBQkVMX3VzYiI+SW5uLSBlbGxlciB1dGRhdGEgZm9yIFVTQjwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkxPR19DQVRFR09SWV9MQUJFTF9idCI+SW5uLSBlbGxlciB1dGRhdGEgZm9yIEJsdWV0b290aDwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkxPR19DQVRFR09SWV9MQUJFTF9oaWQiPkhJRCAoSHVtYW4gSW50ZXJmYWNlKSBpbm4tIGVsbGVyIHV0ZGF0YTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkxPR19DQVRFR09SWV9MQUJFTF9icmxkcnYiPkhlbmRlbHNlciBtZWQgcHVua3Rza3JpZnRkcml2ZXJlbjwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkxPR19DQVRFR09SWV9MQUJFTF9zcGtkcnYiPkhlbmRlbHNlciBtZWQgdGFsZWRyaXZlcmVuPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iTE9HX0NBVEVHT1JZX0xBQkVMX3NjcmRydiI+SGVuZGVsc2VyIG1lZCBza2plcm1kcml2ZXJlbjwvc3RyaW5nPgorCisgIDxzdHJpbmcgbmFtZT0iQlJBSUxMRV9EUklWRVJfTEFCRUxfYXV0byI+YXV0b21hdGlzayBnamVua2plbm5pbmc8L3N0cmluZz4KKworICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfYXV0byI+bG9rYWxpdGV0c2Jhc2VydCwgYXV0b21hdGlzayB2YWxnPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9hciI+YXJhYmlzayAoZ2VuZXJlbHQpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9hcyI+YXNzYW1lc2lzazwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfYXdhIj5hd2FkaGk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX2JnIj5idWxnYXJzazwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfYmgiPmJpaGFyaTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfYm4iPmJlbmdhbGk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX2JvIj50aWJldGFuc2s8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX2JyYSI+YnJhajwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfYnJmIj5CcmFpbGxlIFJlYWR5IEZvcm1hdCAoZm9yIHZpc25pbmcgYXYgLmJyZi1maWxlciBpIGV0IHJlZGlnZXJpbmdzLSBlbGxlciB2aXNuaW5nc3Byb2dyYW0pPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9jcyI+dHNqZWtraXNrPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9jeSI+d2FsaXNpc2s8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX2RhIj5kYW5zazwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfZGFfMTI1MiI+ZGFuc2sgKFN2ZW5kIFRob3VnYWFyZCwgMjAwMuKAkzEx4oCTMTgpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9kYV9sdCI+ZGFuc2sgKExvZ1RleHQpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9kZSI+dHlzazwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfZHJhIj5kcmF2aWRpc2s8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX2VsIj5ncmVzazwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfZW4iPmVuZ2Vsc2s8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX2VuX0NBIj5lbmdlbHNrIChDYW5hZGEpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9lbl9HQiI+ZW5nZWxzayAoU3RvcmJyaXRhbmlhKTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfZW5fbmFiY2MiPmVuZ2Vsc2sgKE5vcnRoIEFtZXJpY2FuIEJyYWlsbGUgQ29tcHV0ZXIgQ29kZSk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX2VuX1VTIj5lbmdlbHNrIChVU0EpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9lbyI+ZXNwZXJhbnRvPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9lcyI+c3BhbnNrPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9ldCI+ZXN0aXNrPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9maSI+Zmluc2s8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX2ZyIj5mcmFuc2s8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX2ZyXzIwMDciPmZyYW5zayAoZW5oZXRsaWcgMjAwNyk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX2ZyX0NBIj5mcmFuc2sgKENhbmFkYSk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX2ZyX2NiaWZzIj5mcmFuc2sgKENvZGUgQnJhaWxsZSBJbmZvcm1hdGlxdWUgRnJhbsODwqdhaXMgU3RhbmRhcmQpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9mcl9GUiI+ZnJhbnNrIChGcmFua3Jpa2UpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9mcl92cyI+ZnJhbnNrIChWaXNpb0JyYWlsbGUpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9nYSI+aXJzazwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfZ2QiPmfDpmxpc2s8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX2dvbiI+Z29uZGk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX2d1Ij5ndWphcmF0aTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfaGUiPmhlYnJhaXNrPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9oaSI+aGluZGk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX2hyIj5rcm9hdGlzazwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfaHUiPnVuZ2Fyc2s8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX2h5Ij5hcm1lbnNrPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9pcyI+aXNsYW5kc2s8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX2l0Ij5pdGFsaWVuc2s8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX2toYSI+a2hhc2k8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX2tuIj5rYW5uYWRhPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9rb2siPmtvbmthbmk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX2tydSI+a3VydWtoPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9sdCI+bGl0YXVpc2s8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX2x2Ij5sYXR2aXNrPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9tZyI+bWFkYWdhc3Npc2s8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX21pIj5tYW9yaTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfbWwiPm1hbGF5YWxhbTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfbW5pIj5tYW5pcHVyaTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfbXIiPm1hcmF0aGk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX210Ij5tYWx0ZXNpc2s8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX211biI+bXVuZGE8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX213ciI+bWFyd2FyaTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfbmUiPm5lcGFsc2s8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX25ldyI+bmV3YXJpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9ubCI+bmVkZXJsYW5kc2s8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX25sX0JFIj5uZWRlcmxhbmRzayAoQmVsZ2lhKTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfbmxfTkwiPm5lZGVybGFuZHNrIChOZWRlcmxhbmQpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9ubyI+bm9yc2s8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX25vX2dlbmVyaWMiPm5vcnNrIChtZWQgc3TDuHR0ZSBmb3IgYW5kcmUgc3Byw6VrKTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfbm9fb3VwIj5ub3JzayAoT2ZmZW50bGlnIHV0dmFsZyBmb3IgcHVua3Rza3JpZnQpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9ud2MiPm5ld2FyaSAoZ2FtbWVsdCk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX29yIj5vcml5YTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfcGEiPnBhbmphYmk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX3BpIj5wYWxpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9wbCI+cG9sc2s8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX3B0Ij5wb3J0dWdpc2lzazwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfcm8iPnJ1bWVuc2s8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX3J1Ij5ydXNzaXNrPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9zYSI+c2Fuc2tyaXQ8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX3NhdCI+c2FudGFsaTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfc2QiPnNpbmRoaTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfc2UiPnNhbWlzayAobm9yZHNhbWlzayk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX3NrIj5zbG92YWtpc2s8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX3NsIj5zbG92ZW5zazwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfc3YiPnN2ZW5zazwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfc3ZfMTk4OSI+c3ZlbnNrICgxOTg5LXN0YW5kYXJkKTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfc3ZfMTk5NiI+c3ZlbnNrICgxOTk2LXN0YW5kYXJkKTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfc3ciPnN3YWhpbGk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX3RhIj50YW1pbDwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfdGUiPnRlbHVndTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfdHIiPnR5cmtpc2s8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX3VrIj51a3JhaW5zazwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfdmkiPnZpZXRuYW1lc2lzazwvc3RyaW5nPgorCisgIDxzdHJpbmcgbmFtZT0iQVRUUklCVVRFU19UQUJMRV9MQUJFTF9pbnZsZWZ0X3JpZ2h0Ij5vbXZlbmR0IGZvcmdydW5uc2ZhcmdlIGkgdmVuc3RyZSBrb2xvbm5lIG9nIGJha2dydW5uc2ZhcmdlIGkgaMO4eXJlIGtvbG9ubmU8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJBVFRSSUJVVEVTX1RBQkxFX0xBQkVMX2xlZnRfcmlnaHQiPmZvcmdydW5uc2ZhcmdlIGkgdmVuc3RyZSBrb2xvbm5lIG9nIGJha2dydW5uc2ZhcmdlIGkgaMO4eXJlIGtvbG9ubmU8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJBVFRSSUJVVEVTX1RBQkxFX0xBQkVMX3VwcGVyX2xvd2VyIj5mb3JncnVubnNmYXJnZSBpIMO4dmVyc3RlIGRlbCBvZyBiYWtncnVubnNmYXJnZSBpIG5lZGVyc3RlIGRlbDwvc3RyaW5nPgorCisgIDxzdHJpbmcgbmFtZT0iQ09OVFJBQ1RJT05fVEFCTEVfTEFCRUxfYXV0byI+bG9rYWxpdGV0c2Jhc2VydCwgYXV0b21hdGlzayB2YWxnPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iQ09OVFJBQ1RJT05fVEFCTEVfTEFCRUxfYWYiPmFmcmlrYWFucyAoa29ydHNrcmlmdCk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJDT05UUkFDVElPTl9UQUJMRV9MQUJFTF9hbSI+YW1oYXJpc2sgKGZ1bGxza3JpZnQpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iQ09OVFJBQ1RJT05fVEFCTEVfTEFCRUxfZGUiPnR5c2s8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJDT05UUkFDVElPTl9UQUJMRV9MQUJFTF9kZV9nMCI+dHlzayAoZnVsbHNrcmlmdCk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJDT05UUkFDVElPTl9UQUJMRV9MQUJFTF9kZV9nMSI+dHlzayAoZW5rZWwga29ydHNrcmlmdCk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJDT05UUkFDVElPTl9UQUJMRV9MQUJFTF9kZV9nMiI+dHlzayAoa29ydHNrcmlmdCk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJDT05UUkFDVElPTl9UQUJMRV9MQUJFTF9kZV8xOTk4Ij50eXNrIChrb3J0c2tyaWZ0IC0gMTk5OC1zdGFuZGFyZCk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJDT05UUkFDVElPTl9UQUJMRV9MQUJFTF9kZV8yMDE1Ij50eXNrIChrb3J0c2tyaWZ0IC0gMjAxNS1zdGFuZGFyZCk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJDT05UUkFDVElPTl9UQUJMRV9MQUJFTF9lbiI+ZW5nZWxzazwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkNPTlRSQUNUSU9OX1RBQkxFX0xBQkVMX2VuX1VTIj5lbmdlbHNrIChVU0EpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iQ09OVFJBQ1RJT05fVEFCTEVfTEFCRUxfZW5fdWViX2cxIj5lbmdlbHNrIChlbmhldGxpZywgZnVsbHNrcmlmdCk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJDT05UUkFDVElPTl9UQUJMRV9MQUJFTF9lbl91ZWJfZzIiPmVuZ2Vsc2sgKGVuaGV0bGlnLCBrb3J0c2tyaWZ0KTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkNPTlRSQUNUSU9OX1RBQkxFX0xBQkVMX2VuX3VzX2cyIj5lbmdlbHNrIChGb3JlbnRlIHN0YXRlciwga29ydHNrcmlmdCk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJDT05UUkFDVElPTl9UQUJMRV9MQUJFTF9lcyI+c3BhbnNrIChrb3J0c2tyaWZ0KTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkNPTlRSQUNUSU9OX1RBQkxFX0xBQkVMX2ZyIj5mcmFuc2s8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJDT05UUkFDVElPTl9UQUJMRV9MQUJFTF9mcl9nMSI+ZnJhbnNrIChmdWxsc2tyaWZ0KTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkNPTlRSQUNUSU9OX1RBQkxFX0xBQkVMX2ZyX2cyIj5mcmFuc2sgKGtvcnRza3JpZnQpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iQ09OVFJBQ1RJT05fVEFCTEVfTEFCRUxfaGEiPmhhdXNhIChrb3J0c2tyaWZ0KTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkNPTlRSQUNUSU9OX1RBQkxFX0xBQkVMX2lkIj5pbmRvbmVzaXNrIChrb3J0c2tyaWZ0KTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkNPTlRSQUNUSU9OX1RBQkxFX0xBQkVMX2lwYSI+aW50ZXJuYXNqb25hbHQgZm9uZXRpc2sgYWxmYWJldDwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkNPTlRSQUNUSU9OX1RBQkxFX0xBQkVMX2phIj5qYXBhbnNrIChmdWxsc2tyaWZ0KTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkNPTlRSQUNUSU9OX1RBQkxFX0xBQkVMX2tvIj5rb3JlYW5zazwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkNPTlRSQUNUSU9OX1RBQkxFX0xBQkVMX2tvX2cwIj5rb3JlYW5zayAoZnVsbHNrcmlmdCk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJDT05UUkFDVElPTl9UQUJMRV9MQUJFTF9rb19nMSI+a29yZWFuc2sgKGVua2VsIGtvcnRza3JpZnQpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iQ09OVFJBQ1RJT05fVEFCTEVfTEFCRUxfa29fZzIiPmtvcmVhbnNrIChrb3J0c2tyaWZ0KTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkNPTlRSQUNUSU9OX1RBQkxFX0xBQkVMX2x0Ij5sYXR2aXNrICh1Zm9ya29ydGV0KTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkNPTlRSQUNUSU9OX1RBQkxFX0xBQkVMX21nIj5tYWRhZ2Fzc2lzayAoa29ydHNrcmlmdCk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJDT05UUkFDVElPTl9UQUJMRV9MQUJFTF9tdW4iPm11bmRhIChrb3J0c2tyaWZ0KTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkNPTlRSQUNUSU9OX1RBQkxFX0xBQkVMX25sIj5uZWRlcmxhbmRzayAoa29ydHNrcmlmdCk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJDT05UUkFDVElPTl9UQUJMRV9MQUJFTF9ueSI+Y2hpY2hld2EgKGtvcnRza3JpZnQpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iQ09OVFJBQ1RJT05fVEFCTEVfTEFCRUxfcHQiPnBvcnR1Z2lzaXNrIChrb3J0c2tyaWZ0KTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkNPTlRSQUNUSU9OX1RBQkxFX0xBQkVMX3J1Ij5ydXNzaXNrIChrb3J0c2tyaWZ0KTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkNPTlRSQUNUSU9OX1RBQkxFX0xBQkVMX3NpIj5zaW5nYWxlc2lzayAoZnVsbHNrcmlmdCk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJDT05UUkFDVElPTl9UQUJMRV9MQUJFTF9zdyI+c3dhaGlsaSAoa29ydHNrcmlmdCk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJDT05UUkFDVElPTl9UQUJMRV9MQUJFTF90aCI+dGhhaSAoa29ydHNrcmlmdCk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJDT05UUkFDVElPTl9UQUJMRV9MQUJFTF96aF9UVyI+a2luZXNpc2sgKFRhaXdhbiwgZnVsbHNrcmlmdCk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJDT05UUkFDVElPTl9UQUJMRV9MQUJFTF96dSI+enVsdSAoa29ydHNrcmlmdCk8L3N0cmluZz4KKworICA8c3RyaW5nIG5hbWU9IktFWUJPQVJEX1RBQkxFX0xBQkVMX2JyYWlsbGUiPmFsdGVybmF0aXYgZm9yIHB1bmt0c2tyaWZ0dGFzdGF0dXI8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJLRVlCT0FSRF9UQUJMRV9MQUJFTF9kZXNrdG9wIj5hbHRlcm5hdGl2IGZvciBmdWxsdCB0YXN0YXR1cjwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IktFWUJPQVJEX1RBQkxFX0xBQkVMX2tleXBhZCI+YWx0ZXJuYXRpdiBmb3IgdGFsbHRhc3RhdHVyYmFzZXJ0IG5hdmlnYXNqb248L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJLRVlCT0FSRF9UQUJMRV9MQUJFTF9sYXB0b3AiPmFsdGVybmF0aXYgZm9yIHRhc3RhdHVyIHV0ZW4gdGFsbHRhc3RhdHVyPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iS0VZQk9BUkRfVEFCTEVfTEFCRUxfc3VuX3R5cGU2Ij5hbHRlcm5hdGl2IGZvciBTdW4gdHlwZSA2IHRhc3RhdHVyPC9zdHJpbmc+Cis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL0FuZHJvaWQvR3JhZGxlL2FwcC9zcmMvbWFpbi9yZXMvdmFsdWVzLW5sL3N0cmluZ3MueG1sIGIvQW5kcm9pZC9HcmFkbGUvYXBwL3NyYy9tYWluL3Jlcy92YWx1ZXMtbmwvc3RyaW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2ZmZGE2ZQotLS0gL2Rldi9udWxsCisrKyBiL0FuZHJvaWQvR3JhZGxlL2FwcC9zcmMvbWFpbi9yZXMvdmFsdWVzLW5sL3N0cmluZ3MueG1sCkBAIC0wLDAgKzEsMjg4IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgorCis8cmVzb3VyY2VzPgorICA8c3RyaW5nIG5hbWU9ImFwcF9kZXNjcmlwdGlvbiI+QlJMVFRZIG9uZGVyc3RldW50IGJyYWlsbGVhcHBhcmF0ZW4uPC9zdHJpbmc+CisKKyAgPHN0cmluZyBuYW1lPSJ1c2JNb25pdG9yX2xhYmVsIj5VU0IgQXBwYXJhYXQgQWFuZ2VzbG90ZW4gTW9uaXRvcjwvc3RyaW5nPgorCisgIDxzdHJpbmcgbmFtZT0iYWJvdXRfbGFiZWxfYWN0aXZpdHkiPk92ZXIgYXBwbGljYXRpZTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9ImFib3V0X2xhYmVsX2NvcHlyaWdodCI+Q29weXJpZ2h0PC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iYWJvdXRfbGFiZWxfYnVpbGRUaW1lIj5Nb21lbnQgVmFuIEJ1aWxkPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iYWJvdXRfbGFiZWxfc291cmNlUmV2aXNpb24iPkJyb25oZXJ6aWVuaW5nPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iYWJvdXRfbGFiZWxfcHJpdmFjeVBvbGljeSI+UHJpdmFjeXZlcmtsYXJpbmc8L3N0cmluZz4KKworICA8c3RyaW5nIG5hbWU9ImlucHV0U2VydmljZV9uYW1lIj5CUkxUVFkgSW52b2VyU2VydmljZTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9ImlucHV0U2VydmljZV90eXBlIj5Ub2V0c2VuYm9yZGVuIG9wIGJyYWlsbGVhcHBhcmF0ZW48L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJpbnB1dFNlcnZpY2Vfbm90X2VuYWJsZWQiPmludm9lcnNlcnZpY2UgbmlldCBnZWFjdGl2ZWVyZDwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9ImlucHV0U2VydmljZV9ub3Rfc2VsZWN0ZWQiPmludm9lcnNlcnZpY2UgbmlldCBnZXNlbGVjdGVlcmQ8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJpbnB1dFNlcnZpY2Vfbm90X3N0YXJ0ZWQiPmludm9lcnNlcnZpY2UgbmlldCBnZXN0YXJ0PC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iaW5wdXRTZXJ2aWNlX25vdF9jb25uZWN0ZWQiPmludm9lcnNlcnZpY2UgbmlldCB2ZXJib25kZW48L3N0cmluZz4KKworICA8c3RyaW5nIG5hbWU9InVwZGF0ZUFwcGxpY2F0aW9uX3Byb2JsZW1fZmFpbGVkIj5hcHBsaWNhdGllIG5pZXQgZ2XDvHBkYXRlPC9zdHJpbmc+CisKKyAgPHN0cmluZyBuYW1lPSJwYWNrYWdlSW5zdGFsbGVyX3Byb2JsZW1fZmFpbGVkIj5wYWtrZXQgbmlldCBnZcOvbnN0YWxsZWVyZDwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9InBhY2thZ2VJbnN0YWxsZXJfcHJvYmxlbV9zYW1lIj56ZWxmZGUgdmVyc2llPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0icGFja2FnZUluc3RhbGxlcl9wcm9ibGVtX2Rvd25ncmFkZSI+ZG93bmdyYWRlIG5pZXQgdG9lZ2VzdGFhbjwvc3RyaW5nPgorCisgIDxzdHJpbmcgbmFtZT0iZmlsZURvd25sb2FkZXJfdGl0bGUiPkJSTFRUWSBCZXN0YW5kc0Rvd25sb2FkZXI8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJmaWxlRG93bmxvYWRlcl9wcm9ibGVtX2ZhaWxlZCI+YmVzdGFuZCBuaWV0IGdlZG93bmxvYWQ8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJmaWxlRG93bmxvYWRlcl9zdGF0ZV9jb25uZWN0aW5nIj5iZXppZyBtZXQgdmVyYmluZGVuPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iZmlsZURvd25sb2FkZXJfc3RhdGVfZG93bmxvYWRpbmciPmJlemlnIG1ldCBkb3dubG9hZGVuPC9zdHJpbmc+CisKKyAgPHN0cmluZyBuYW1lPSJzZXR0aW5nX3N0YXRlX29mZiI+VWl0PC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iY2hlY2tib3hfc3RhdGVfdW5jaGVja2VkIj5OZWU8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJjaGVja2JveF9zdGF0ZV9jaGVja2VkIj5KYTwvc3RyaW5nPgorCisgIDxzdHJpbmcgbmFtZT0iYnJhaWxsZV9jaGFubmVsX25hbWUiPlRvZXN0YW5kIFZhbiBCcmFpbGxlLWFwcGFyYWF0PC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iYnJhaWxsZV9oaW50X3RhcCI+dGlrIHZvb3IgYWN0aWVzPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iYnJhaWxsZV9zdGF0ZV9yZWxlYXNlZCI+VnJpamdlZ2V2ZW48L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJicmFpbGxlX3N0YXRlX3dhaXRpbmciPkFhbiBoZXQgd2FjaHRlbjwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9ImJyYWlsbGVfc3RhdGVfY29ubmVjdGVkIj5WZXJib25kZW48L3N0cmluZz4KKworICA8c3RyaW5nIG5hbWU9IkdMT0JBTF9CVVRUT05fTk9USUZJQ0FUSU9OUyI+TWVsZGluZ2VuPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iR0xPQkFMX0JVVFRPTl9RVUlDS19TRVRUSU5HUyI+U25lbGxlIEluc3RlbGxpbmdlbjwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkdMT0JBTF9CVVRUT05fQkFDSyI+VGVydWc8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJHTE9CQUxfQlVUVE9OX0hPTUUiPkhvbWU8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJHTE9CQUxfQlVUVE9OX1JFQ0VOVF9BUFBTIj5SZWNlbnRlIEFwcHM8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJHTE9CQUxfQlVUVE9OX09WRVJWSUVXIj5PdmVyemljaHQ8L3N0cmluZz4KKworICA8c3RyaW5nIG5hbWU9IkdMT0JBTF9CVVRUT05fU1dJVENIX0lOUFVUX01FVEhPRCI+SW52b2VybWV0aG9kZSBTY2hha2VsZW48L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJHTE9CQUxfQlVUVE9OX1ZJRVdfVVNFUl9HVUlERSI+R2VicnVpa2Vyc2hhbmRsZWlkaW5nPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iR0xPQkFMX0JVVFRPTl9CUk9XU0VfV0VCX1NJVEUiPldlYlNpdGU8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJHTE9CQUxfQlVUVE9OX0JST1dTRV9DT01NVU5JVFlfTUVTU0FHRVMiPkJlcmljaHRlbiBJbiBEZSBDb21tdW5pdHk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJHTE9CQUxfQlVUVE9OX1BPU1RfQ09NTVVOSVRZX01FU1NBR0UiPlBsYWF0cyBFZW4gQ29tbXVuaXR5YmVyaWNodDwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkdMT0JBTF9CVVRUT05fTUFOQUdFX0NPTU1VTklUWV9NRU1CRVJTSElQIj5CZWhlZXIgQ29tbXVuaXR5bGlkbWFhdHNjaGFwPC9zdHJpbmc+CisKKyAgPHN0cmluZyBuYW1lPSJHTE9CQUxfQlVUVE9OX1VQREFURV9BUFBMSUNBVElPTiI+VXBkYXRlIEFwcGxpY2F0aWU8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJHTE9CQUxfQ0hFQ0tCT1hfREVWRUxPUEVSX0JVSUxEIj5PbnR3aWtrZWxhYXJzYnVpbGQ8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJHTE9CQUxfQ0hFQ0tCT1hfQUxMT1dfRE9XTkdSQURFIj5Eb3duZ3JhZGVuIFRvZXN0YWFuPC9zdHJpbmc+CisKKyAgPHN0cmluZyBuYW1lPSJDSE9PU0VSX1RJVExFX0FDQ0VTU0lCSUxJVFlfQUNUSU9OUyI+VG9lZ2Fua2VsaWpraGVpZHNhY3RpZXM8L3N0cmluZz4KKworICA8c3RyaW5nIG5hbWU9IlNFVFRJTkdTX1NDUkVFTl9NQUlOIj5CUkxUVFkgSW5zdGVsbGluZ2VuPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iU0VUVElOR1NfU0NSRUVOX0dFTkVSQUwiPkFsZ2VtZW5lIEluc3RlbGxpbmdlbjwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlNFVFRJTkdTX1NDUkVFTl9NRVNTQUdFIj5JbnN0ZWxsaW5nZW4gdm9vciBiZXJpY2h0ZW48L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJTRVRUSU5HU19TQ1JFRU5fREVWSUNFUyI+QmVoZWVyIEFwcGFyYXRlbjwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlNFVFRJTkdTX1NDUkVFTl9BRFZBTkNFRCI+R2VhdmFuY2VlcmRlIEluc3RlbGxpbmdlbjwvc3RyaW5nPgorCisgIDxzdHJpbmcgbmFtZT0iU0VUVElOR1NfQ0hFQ0tCT1hfUkVMRUFTRV9CUkFJTExFX0RFVklDRSI+R2VlZiBCcmFpbGxlYXBwYXJhYXQgdnJpajwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlNFVFRJTkdTX0JVVFRPTl9OQVZJR0FUSU9OX01PREUiPk5hdmlnYXRpZW1vZHVzPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iU0VUVElOR1NfQlVUVE9OX1NQRUVDSF9TVVBQT1JUIj5TcHJhYWtvbmRlcnN0ZXVuaW5nPC9zdHJpbmc+CisKKyAgPHN0cmluZyBuYW1lPSJTRVRUSU5HU19CVVRUT05fVEVYVF9UQUJMRSI+VGVrc3R0YWJlbDwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlNFVFRJTkdTX0JVVFRPTl9BVFRSSUJVVEVTX1RBQkxFIj5BdHRyaWJ1dGVudGFiZWw8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJTRVRUSU5HU19CVVRUT05fQ09OVFJBQ1RJT05fVEFCTEUiPkNvbnRyYWN0aWV0YWJlbDwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlNFVFRJTkdTX0JVVFRPTl9LRVlCT0FSRF9UQUJMRSI+VG9ldHNlbmJvcmR0YWJlbDwvc3RyaW5nPgorCisgIDxzdHJpbmcgbmFtZT0iU0VUVElOR1NfQ0hFQ0tCT1hfU0hPV19BTEVSVFMiPlRvb24gQWxlcnRzPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iU0VUVElOR1NfQ0hFQ0tCT1hfU0hPV19BTk5PVU5DRU1FTlRTIj5Ub29uIEFhbmtvbmRpZ2luZ2VuPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iU0VUVElOR1NfQ0hFQ0tCT1hfU0hPV19OT1RJRklDQVRJT05TIj5Ub29uIE1lbGRpbmdlbjwvc3RyaW5nPgorCisgIDxzdHJpbmcgbmFtZT0iU0VUVElOR1NfQlVUVE9OX0xPR19MRVZFTCI+TG9nbml2ZWF1PC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iU0VUVElOR1NfQlVUVE9OX0xPR19DQVRFR09SSUVTIj5Mb2djYXRlZ29yaWXDq248L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJTRVRUSU5HU19DSEVDS0JPWF9MT0dfQUNDRVNTSUJJTElUWV9FVkVOVFMiPkxvZyBUb2VnYW5rZWxpamtoZWlkc2dlYmV1cnRlbmlzc2VuPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iU0VUVElOR1NfQ0hFQ0tCT1hfTE9HX1JFTkRFUkVEX1NDUkVFTiI+TG9nIFJlbmRlcmVkIFNjaGVybTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlNFVFRJTkdTX0NIRUNLQk9YX0xPR19LRVlCT0FSRF9FVkVOVFMiPkxvZyBUb2V0c2VuYm9yZGdlYmV1cnRlbmlzc2VuPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iU0VUVElOR1NfQ0hFQ0tCT1hfTE9HX1VOSEFORExFRF9FVkVOVFMiPkxvZyBvbnZlcndlcmt0ZSBnZWJldXJ0ZW5pc3Nlbjwvc3RyaW5nPgorCisgIDxzdHJpbmcgbmFtZT0iREVWSUNFU19CVVRUT05fU0VMRUNURUQiPkdlc2VsZWN0ZWVyZCBBcHBhcmFhdDwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkRFVklDRVNfQlVUVE9OX0FERCI+Vm9lZyBBcHBhcmFhdCBUb2U8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJERVZJQ0VTX0JVVFRPTl9SRU1PVkUiPlZlcndpamRlciBBcHBhcmFhdDwvc3RyaW5nPgorCisgIDxzdHJpbmcgbmFtZT0iU0VMRUNURURfREVWSUNFX05PTkUiPmdlZW4gYXBwYXJhdGVuPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iU0VMRUNURURfREVWSUNFX1VOU0VMRUNURUQiPmFwcGFyYWF0IG5pZXQgZ2VzZWxlY3RlZXJkPC9zdHJpbmc+CisKKyAgPHN0cmluZyBuYW1lPSJBRERfREVWSUNFX05BTUUiPkFwcGFyYWF0bmFhbTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkFERF9ERVZJQ0VfTUVUSE9EIj5Db21tdW5pY2F0aWVtZXRob2RlPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iQUREX0RFVklDRV9TRUxFQ1QiPlNlbGVjdGVlciBBcHBhcmFhdDwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkFERF9ERVZJQ0VfRFJJVkVSIj5CcmFpbGxlIERyaXZlcjwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkFERF9ERVZJQ0VfRE9ORSI+R2VyZWVkPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iQUREX0RFVklDRV9VTlNFTEVDVEVEX01FVEhPRCI+Q29tbXVuaWNhdGllbWV0aG9kZSBuaWV0IGdlc2VsZWN0ZWVyZDwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkFERF9ERVZJQ0VfVU5TRUxFQ1RFRF9ERVZJQ0UiPmFwcGFyYWF0IG5pZXQgZ2VzZWxlY3RlZXJkPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iQUREX0RFVklDRV9VTlNFTEVDVEVEX0RSSVZFUiI+YnJhaWxsZSBkcml2ZXIgbmlldCBnZXNlbGVjdGVlcmQ8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJBRERfREVWSUNFX05PX0RFVklDRVMiPmdlZW4gYXBwYXJhdGVuPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iQUREX0RFVklDRV9EVVBMSUNBVEVfTkFNRSI+YXBwYXJhYXRuYWFtIGFsIGluIGdlYnJ1aWs8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJBRERfREVWSUNFX05PX1BFUk1JU1NJT04iPlRPRVNURU1NSU5HIHRvZWdhbmcgdG90IGFwcGFyYWF0IG5pZXQgdmVybGVlbmQ8L3N0cmluZz4KKworICA8c3RyaW5nIG5hbWU9IlJFTU9WRV9ERVZJQ0VfUFJPTVBUIj5XZWV0IHUgemVrZXIgZGF0IHUgZGl0IGFwcGFyYWF0IHdpbHQgdmVyd2lqZGVyZW4/PC9zdHJpbmc+CisKKyAgPHN0cmluZyBuYW1lPSJTRVRfU0VMRUNUSU9OX05PTkUiPm5pZXRzIGdlc2VsZWN0ZWVyZDwvc3RyaW5nPgorCisgIDxzdHJpbmcgbmFtZT0iTkFWSUdBVElPTl9NT0RFX0xBQkVMX0xpc3QiPlZlcnRpY2FsZSBMaWpzdDwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9Ik5BVklHQVRJT05fTU9ERV9MQUJFTF9HcmlkIj5Ud2VlZGltZW5zaW9uYWFsIFJhc3Rlcjwvc3RyaW5nPgorCisgIDxzdHJpbmcgbmFtZT0iU1BFRUNIX1NVUFBPUlRfTEFCRUxfbmF0aXZlIj5TdGFuZGFhcmQ8L3N0cmluZz4KKworICA8c3RyaW5nIG5hbWU9IkNPTU1VTklDQVRJT05fTUVUSE9EX0xBQkVMX0JsdWV0b290aCI+Qmx1ZXRvb3RoPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iQ09NTVVOSUNBVElPTl9NRVRIT0RfTEFCRUxfVXNiIj5VU0I8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJDT01NVU5JQ0FUSU9OX01FVEhPRF9MQUJFTF9TZXJpYWwiPlNlcmllZWw8L3N0cmluZz4KKworICA8c3RyaW5nIG5hbWU9IkxPR19MRVZFTF9MQUJFTF9kZWJ1ZyI+RGVidWc8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJMT0dfTEVWRUxfTEFCRUxfaW5mb3JtYXRpb24iPkluZm9ybWF0aWU8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJMT0dfTEVWRUxfTEFCRUxfbm90aWNlIj5NZWxkaW5nPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iTE9HX0xFVkVMX0xBQkVMX3dhcm5pbmciPldhYXJzY2h1d2luZzwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkxPR19MRVZFTF9MQUJFTF9lcnJvciI+Rm91dDwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkxPR19MRVZFTF9MQUJFTF9jcml0aWNhbCI+S3JpdGllazwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkxPR19MRVZFTF9MQUJFTF9hbGVydCI+QWxlcnQ8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJMT0dfTEVWRUxfTEFCRUxfZW1lcmdlbmN5Ij5BbGFybTwvc3RyaW5nPgorCisgIDxzdHJpbmcgbmFtZT0iTE9HX0NBVEVHT1JZX0xBQkVMX2lucGt0cyI+SW5wdXQgUGFja2V0czwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkxPR19DQVRFR09SWV9MQUJFTF9vdXRwa3RzIj5PdXRwdXQgUGFja2V0czwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkxPR19DQVRFR09SWV9MQUJFTF9icmxrZXlzIj5CcmFpbGxlIERldmljZSBLZXkgRXZlbnRzPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iTE9HX0NBVEVHT1JZX0xBQkVMX2tiZGtleXMiPktleWJvYXJkIEtleSBFdmVudHM8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJMT0dfQ0FURUdPUllfTEFCRUxfY3NydHJrIj5DdXJzb3IgVHJhY2tpbmc8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJMT0dfQ0FURUdPUllfTEFCRUxfY3NycnRnIj5DdXJzb3IgUm91dGluZzwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkxPR19DQVRFR09SWV9MQUJFTF91cGRhdGUiPlVwZGF0ZSBFdmVudHM8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJMT0dfQ0FURUdPUllfTEFCRUxfc3BlZWNoIj5TcGVlY2ggRXZlbnRzPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iTE9HX0NBVEVHT1JZX0xBQkVMX2FzeW5jIj5Bc3luYyBFdmVudHM8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJMT0dfQ0FURUdPUllfTEFCRUxfc2VydmVyIj5TZXJ2ZXIgRXZlbnRzPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iTE9HX0NBVEVHT1JZX0xBQkVMX2dpbyI+QWxnZW1lZW4gSS9PPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iTE9HX0NBVEVHT1JZX0xBQkVMX3NlcmlhbCI+U2VyaWFsIEkvTzwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkxPR19DQVRFR09SWV9MQUJFTF91c2IiPlVTQiBJL088L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJMT0dfQ0FURUdPUllfTEFCRUxfYnQiPkJsdWV0b290aCBJL088L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJMT0dfQ0FURUdPUllfTEFCRUxfaGlkIj5NZW5zZWxpamsgSW50ZXJmYWNlIEkvTzwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkxPR19DQVRFR09SWV9MQUJFTF9icmxkcnYiPkJyYWlsbGUgRHJpdmVyIEV2ZW50czwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkxPR19DQVRFR09SWV9MQUJFTF9zcGtkcnYiPlNwZWVjaCBEcml2ZXIgRXZlbnRzPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iTE9HX0NBVEVHT1JZX0xBQkVMX3NjcmRydiI+U2NyZWVuIERyaXZlciBFdmVudHM8L3N0cmluZz4KKworICA8c3RyaW5nIG5hbWU9IkJSQUlMTEVfRFJJVkVSX0xBQkVMX2F1dG8iPmF1dG9kZXRlY3Q8L3N0cmluZz4KKworICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfYXV0byI+bG9jYWFsIGdlYmFzZWVyZGUgYXV0b3NlbGVjdGllPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9hciI+QXJhYmlzY2ggKHN0YW5kYWFyZCk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX2FzIj5Bc3NhbWVlczwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfYXdhIj5Bd2FkaGk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX2JnIj5CdWxnYWFyczwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfYmgiPkJpaGFyaTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfYm4iPkJlbmdhbGk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX2JvIj5UaWJldGFhbnM8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX2JyYSI+QnJhajwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfYnJmIj5CcmFpbGxlIFJlYWR5IEZvcm1hYXQgKHZvb3IgaGV0IGJla2lqa2VuIHZhbiAuYnJmIGJlc3RhbmRlbiBpbiBlZW4gdGVrc3R2ZXJ3ZXJrZXIgb2YgcGFnZXIpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9jcyI+Q3plY2hpc2NoPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9jeSI+V2Vsc2g8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX2RhIj5EZWVuczwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfZGFfMTI1MiI+RGVlbnMgKFN2ZW5kIFRob3VnYWFyZCwgMjAwMuKAkzEx4oCTMTgpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9kYV9sdCI+RGVlbnMgKExvZ1RleHQpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9kZSI+RHVpdHM8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX2RyYSI+RHJhdmlkaWFhbnM8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX2VsIj5Hcmlla3M8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX2VuIj5FbmdlbHM8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX2VuX0NBIj5FbmdlbHMgKENhbmFkYSk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX2VuX0dCIj5FbmdlbHMgKFZlcmVuaWdkIEtvbmlua3JpamspPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9lbl9uYWJjYyI+RW5nZWxzIChOb3J0aCBBbWVyaWNhbiBCcmFpbGxlIENvbXB1dGVyIENvZGUpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9lbl9VUyI+RW5nZWxzIChWZXJlbmlnZGUgU3RhdGVuKTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfZW8iPkVzcGVyYW50bzwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfZXMiPlNwYWFuczwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfZXQiPkVzdGxhbmRzPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9maSI+Rmluczwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfZnIiPkZyYW5zPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9mcl8yMDA3Ij5GcmFucyAodW5pZmllZCAyMDA3KTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfZnJfQ0EiPkZyYW5zIChDYW5hZGEpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9mcl9jYmlmcyI+RnJhbnMgKENvZGUgQnJhaWxsZSBJbmZvcm1hdGlxdWUgRnJhbsOnYWlzIFN0YW5kYXJkKTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfZnJfRlIiPkZyYW5zIChGcmFua3JpamspPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9mcl92cyI+RnJhbnMgKFZpc2lvQnJhaWxsZSk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX2dhIj5JZXJzPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9nZCI+R2FlbGljPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9nb24iPkdvbmRpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9ndSI+R3VqYXJhdGk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX2hlIj5IZWJyZWV1d3M8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX2hpIj5IaW5kaTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfaHIiPkNyb2F0aXNjaDwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfaHUiPkhvbmdhYXJzPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9oeSI+QXJtZWVuczwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfaXMiPklqc2xhbmRzPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9pdCI+SXRhbGlhYW5zPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9raGEiPktoYXNpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9rbiI+S2FubmFkYTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfa29rIj5Lb25rYW5pPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9rcnUiPkt1cnVraDwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfbHQiPkxpdGF1d3M8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX2x2Ij5MZXRzPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9tZyI+TWFsYWdhc3k8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX21pIj5NYW9yaTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfbWwiPk1hbGF5YWxhbTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfbW5pIj5NYW5pcHVyaTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfbXIiPk1hcmF0aGk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX210Ij5NYWx0ZWVzPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9tdW4iPk11bmRhPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9td3IiPk1hcndhcmk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX25lIj5OZXBhbGk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX25ldyI+TmV3YXJpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9ubCI+TmVkZXJsYW5kczwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfbmxfQkUiPk5lZGVybGFuZHMgKEJlbGdpw6spPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9ubF9OTCI+TmVkZXJsYW5kcyAoTmVkZXJsYW5kKTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfbm8iPk5vb3JzPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9ub19nZW5lcmljIj5Ob29ycyAobWV0IG9uZGVyc3RldW5pbmcgdm9vciBhbmRlcmUgdGFsZW4pPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9ub19vdXAiPk5vb3JzIChPZmZlbnRsaWcgdXR2YWxnIGZvciBwdW5rdHNrcmlmdCk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX253YyI+TmV3YXJpIChvdWQpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9vciI+T3JpeWE8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX3BhIj5QYW5qYWJpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9waSI+UGFsaTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfcGwiPlBvb2xzPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9wdCI+UG9ydHVnZWVzPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9ybyI+Um9lbWVlbnM8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX3J1Ij5SdXNzaXNjaDwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfc2EiPlNhbnNrcml0PC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9zYXQiPlNhbnRhbGk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX3NkIj5TaW5kaGk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX3NlIj5TYW1pIChOb29yZGVsaWprKTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfc2siPlNsb3ZhYWtzPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9zbCI+U2xvdmVlbnM8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX3N2Ij5ad2VlZHM8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX3N2XzE5ODkiPlp3ZWVkcyAoMTk4OSBzdGFuZGFhcmQpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9zdl8xOTk2Ij5ad2VlZHMgKDE5OTYgc3RhbmRhYXJkKTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfc3ciPlN3YWhpbGk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX3RhIj5UYW1pbDwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfdGUiPlRlbHVndTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfdHIiPlR1cmtzPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF91ayI+T2VrcmFpZW5zPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF92aSI+VmlldG5hbWVlczwvc3RyaW5nPgorCisgIDxzdHJpbmcgbmFtZT0iQVRUUklCVVRFU19UQUJMRV9MQUJFTF9pbnZsZWZ0X3JpZ2h0Ij5nZcOvbnZlcnRlZXJkIHZvb3Jncm9uZGtsZXVyIGluIGRlIGxpbmtlcmtvbG9tIGVuIGFjaHRlcmdyb25ka2xldXIgaW4gZGUgcmVjaHRlcmtvbG9tPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iQVRUUklCVVRFU19UQUJMRV9MQUJFTF9sZWZ0X3JpZ2h0Ij52b29yZ3JvbmRrbGV1ciBpbiBkZSBsaW5rZXJrb2xvbSBlbiBhY2h0ZXJncm9uZGtsZXVyIGluIGRlIHJlY2h0ZXJrb2xvbTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkFUVFJJQlVURVNfVEFCTEVfTEFCRUxfdXBwZXJfbG93ZXIiPnZvb3Jncm9uZGtsZXVyIGluIGJvdmVuc3RlIHZpZXJrYW50IGVuIGFjaHRlcmdyb25ka2xldXIgaW4gb25kZXJzdGUgdmllcmthbnQ8L3N0cmluZz4KKworICA8c3RyaW5nIG5hbWU9IkNPTlRSQUNUSU9OX1RBQkxFX0xBQkVMX2F1dG8iPmxvY2FhbCBnZWJhc2VlcmRlIGF1dG9zZWxlY3RpZTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkNPTlRSQUNUSU9OX1RBQkxFX0xBQkVMX2FmIj5BZnJpa2FhbnMgKFZlcmtvcnQpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iQ09OVFJBQ1RJT05fVEFCTEVfTEFCRUxfYW0iPkFtaGFyaWMgKE9udmVya29ydCk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJDT05UUkFDVElPTl9UQUJMRV9MQUJFTF9kZSI+RHVpdHM8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJDT05UUkFDVElPTl9UQUJMRV9MQUJFTF9kZV9nMCI+RHVpdHMgKE9udmVya29ydCk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJDT05UUkFDVElPTl9UQUJMRV9MQUJFTF9kZV9nMSI+RHVpdHMgKHN0YW5kYWFyZCBzYW1lbnRyZWtraW5nZW4pPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iQ09OVFJBQ1RJT05fVEFCTEVfTEFCRUxfZGVfZzIiPkR1aXRzIChWZXJrb3J0KTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkNPTlRSQUNUSU9OX1RBQkxFX0xBQkVMX2RlXzE5OTgiPkR1aXRzICh2ZXJrb3J0IC0gMTk5OCBzdGFuZGFhcmQpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iQ09OVFJBQ1RJT05fVEFCTEVfTEFCRUxfZGVfMjAxNSI+RHVpdHMgKHZlcmtvcnQgLSAyMDE1IHN0YW5kYWFyZCk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJDT05UUkFDVElPTl9UQUJMRV9MQUJFTF9lbiI+RW5nZWxzPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iQ09OVFJBQ1RJT05fVEFCTEVfTEFCRUxfZW5fVVMiPkVuZ2VscyAoVmVyZW5pZ2RlIFN0YXRlbik8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJDT05UUkFDVElPTl9UQUJMRV9MQUJFTF9lbl91ZWJfZzEiPkVuZ2VscyAodmVyZW5pZ2QsIG9udmVya29ydCk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJDT05UUkFDVElPTl9UQUJMRV9MQUJFTF9lbl91ZWJfZzIiPkVuZ2VscyAoVW5pZmllZCBFbmdsaXNoIEJyYWlsbGUsIGdyYWRlIDIpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iQ09OVFJBQ1RJT05fVEFCTEVfTEFCRUxfZW5fdXNfZzIiPkVuZ2VscyAoVlMsIGdyYWRlIDIpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iQ09OVFJBQ1RJT05fVEFCTEVfTEFCRUxfZXMiPlNwYWFucyAoZ3JhZGUgMik8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJDT05UUkFDVElPTl9UQUJMRV9MQUJFTF9mciI+RnJhbnM8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJDT05UUkFDVElPTl9UQUJMRV9MQUJFTF9mcl9nMSI+RnJhbnMgKG9udmVya29ydCk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJDT05UUkFDVElPTl9UQUJMRV9MQUJFTF9mcl9nMiI+RnJhbnMgKHZlcmtvcnQpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iQ09OVFJBQ1RJT05fVEFCTEVfTEFCRUxfaGEiPkhhdXNhICh2ZXJrb3J0KTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkNPTlRSQUNUSU9OX1RBQkxFX0xBQkVMX2lkIj5JbmRvbmVzaXNjaCAodmVya29ydCk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJDT05UUkFDVElPTl9UQUJMRV9MQUJFTF9pcGEiPkludGVybmF0aW9uYWFsIFBob25ldGlzY2ggQWxmYWJldDwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkNPTlRSQUNUSU9OX1RBQkxFX0xBQkVMX2phIj5KYXBhbnMgKG9udmVya29ydCk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJDT05UUkFDVElPTl9UQUJMRV9MQUJFTF9rbyI+S29yZWFhbnM8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJDT05UUkFDVElPTl9UQUJMRV9MQUJFTF9rb19nMCI+S29yZWFhbnMgKG9udmVya29ydCk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJDT05UUkFDVElPTl9UQUJMRV9MQUJFTF9rb19nMSI+S29yZWFhbnMgKGdyYWRlIDEpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iQ09OVFJBQ1RJT05fVEFCTEVfTEFCRUxfa29fZzIiPktvcmVhYW5zIChncmFkZSAyKTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkNPTlRSQUNUSU9OX1RBQkxFX0xBQkVMX2x0Ij5MaXRhdXdzIChvbnZlcmtvcnQpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iQ09OVFJBQ1RJT05fVEFCTEVfTEFCRUxfbWciPk1hbGFnYXN5ICh2ZXJrb3J0KTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkNPTlRSQUNUSU9OX1RBQkxFX0xBQkVMX211biI+TXVuZGEgKHZlcmtvcnQpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iQ09OVFJBQ1RJT05fVEFCTEVfTEFCRUxfbmwiPk5lZGVybGFuZHMgKHZlcmtvcnQpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iQ09OVFJBQ1RJT05fVEFCTEVfTEFCRUxfbnkiPkNoaWNoZXdhICh2ZXJrb3J0KTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkNPTlRSQUNUSU9OX1RBQkxFX0xBQkVMX3B0Ij5Qb3J0dWdlZXMgKGdyYWRlIDIpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iQ09OVFJBQ1RJT05fVEFCTEVfTEFCRUxfcnUiPlJ1c3Npc2NoICh2ZXJrb3J0KTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkNPTlRSQUNUSU9OX1RBQkxFX0xBQkVMX3NpIj5TaW5oYWxlc2UgKG9udmVya29ydCk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJDT05UUkFDVElPTl9UQUJMRV9MQUJFTF9zdyI+U3dhaGlsaSAodmVya29ydCk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJDT05UUkFDVElPTl9UQUJMRV9MQUJFTF90aCI+VGhhaXMgKHZlcmtvcnQpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iQ09OVFJBQ1RJT05fVEFCTEVfTEFCRUxfemhfVFciPkNoaW5lZXMgKFRhaXdhbiwgb252ZXJrb3J0KTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkNPTlRSQUNUSU9OX1RBQkxFX0xBQkVMX3p1Ij5adWx1ICh2ZXJrb3J0KTwvc3RyaW5nPgorCisgIDxzdHJpbmcgbmFtZT0iS0VZQk9BUkRfVEFCTEVfTEFCRUxfYnJhaWxsZSI+bGF5b3V0IHZvb3IgYnJhaWxsZXRvZXRzZW5ib3JkZW48L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJLRVlCT0FSRF9UQUJMRV9MQUJFTF9kZXNrdG9wIj5sYXlvdXQgdm9vciB2b2xsZWRpZ2UgdG9ldHNlbmJvcmRlbjwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IktFWUJPQVJEX1RBQkxFX0xBQkVMX2tleXBhZCI+bGF5b3V0IHZvb3IgdG9ldHNlbmJsb2tnZWJhc2VlcmRlIG5hdmlnYXRpZTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IktFWUJPQVJEX1RBQkxFX0xBQkVMX2xhcHRvcCI+bGF5b3V0IHZvb3IgdG9ldHNlbmJvcmRlbiB6b25kZXIga2V5cGFkPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iS0VZQk9BUkRfVEFCTEVfTEFCRUxfc3VuX3R5cGU2Ij5sYXlvdXQgdm9vciBTdW4gVHlwZSA2IHRvZXRzZW5ib3JkZW48L3N0cmluZz4KKzwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvQW5kcm9pZC9HcmFkbGUvYXBwL3NyYy9tYWluL3Jlcy92YWx1ZXMtcnUvc3RyaW5ncy54bWwgYi9BbmRyb2lkL0dyYWRsZS9hcHAvc3JjL21haW4vcmVzL3ZhbHVlcy1ydS9zdHJpbmdzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYTkzNjU3Ci0tLSAvZGV2L251bGwKKysrIGIvQW5kcm9pZC9HcmFkbGUvYXBwL3NyYy9tYWluL3Jlcy92YWx1ZXMtcnUvc3RyaW5ncy54bWwKQEAgLTAsMCArMSwyODggQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+CisKKzxyZXNvdXJjZXM+CisgIDxzdHJpbmcgbmFtZT0iYXBwX2Rlc2NyaXB0aW9uIj5CUkxUVFkg0L/QvtC00LTQtdGA0LbQuNCy0LDQtdGCINCx0YDQsNC50LvQtdCy0YHQutC40LUg0YPRgdGC0YDQvtC50YHRgtCy0LAuPC9zdHJpbmc+CisKKyAgPHN0cmluZyBuYW1lPSJ1c2JNb25pdG9yX2xhYmVsIj7QnNC+0L3QuNGC0L7RgCDQv9C+0LTQutC70Y7Rh9GR0L0g0LogVVNCLdGD0YHRgtGA0L7QudGB0YLQstGDPC9zdHJpbmc+CisKKyAgPHN0cmluZyBuYW1lPSJhYm91dF9sYWJlbF9hY3Rpdml0eSI+0J4g0L/RgNC40LvQvtC20LXQvdC40Lg8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJhYm91dF9sYWJlbF9jb3B5cmlnaHQiPtCQ0LLRgtC+0YDRgdC60LjQtSDQv9GA0LDQstCwPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iYWJvdXRfbGFiZWxfYnVpbGRUaW1lIj7QktGA0LXQvNGPINGB0LHQvtGA0LrQuDwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9ImFib3V0X2xhYmVsX3NvdXJjZVJldmlzaW9uIj7QktC10YDRgdC40Y8g0LjRgdGF0L7QtNC90L7Qs9C+INC60L7QtNCwPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iYWJvdXRfbGFiZWxfcHJpdmFjeVBvbGljeSI+0J/QvtC70LjRgtC40LrQsCDQutC+0L3RhNC40LTQtdC90YbQuNCw0LvRjNC90L7RgdGC0Lg8L3N0cmluZz4KKworICA8c3RyaW5nIG5hbWU9ImlucHV0U2VydmljZV9uYW1lIj7QodC70YPQttCx0LAg0LLQstC+0LTQsCBCUkxUVFk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJpbnB1dFNlcnZpY2VfdHlwZSI+0JrQu9Cw0LLQuNCw0YLRg9GA0Ysg0L3QsCDQsdGA0LDQudC70LXQstGB0LrQuNGFINGD0YHRgtGA0L7QudGB0YLQstCw0YU8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJpbnB1dFNlcnZpY2Vfbm90X2VuYWJsZWQiPtGB0LvRg9C20LHQsCDQstCy0L7QtNCwINC90LUg0LLQutC70Y7Rh9C10L3QsDwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9ImlucHV0U2VydmljZV9ub3Rfc2VsZWN0ZWQiPtGB0LvRg9C20LHQsCDQstCy0L7QtNCwINC90LUg0LLRi9Cx0YDQsNC90LA8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJpbnB1dFNlcnZpY2Vfbm90X3N0YXJ0ZWQiPtGB0LvRg9C20LHQsCDQstCy0L7QtNCwINC90LUg0LfQsNC/0YPRidC10L3QsDwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9ImlucHV0U2VydmljZV9ub3RfY29ubmVjdGVkIj7RgdC70YPQttCx0LAg0LLQstC+0LTQsCDQvdC1INC/0L7QtNC60LvRjtGH0LXQvdCwPC9zdHJpbmc+CisKKyAgPHN0cmluZyBuYW1lPSJ1cGRhdGVBcHBsaWNhdGlvbl9wcm9ibGVtX2ZhaWxlZCI+0L/RgNC40LvQvtC20LXQvdC40LUg0L3QtSDQvtCx0L3QvtCy0LvQtdC90L48L3N0cmluZz4KKworICA8c3RyaW5nIG5hbWU9InBhY2thZ2VJbnN0YWxsZXJfcHJvYmxlbV9mYWlsZWQiPtC/0LDQutC10YIg0L3QtSDRg9GB0YLQsNC90L7QstC70LXQvTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9InBhY2thZ2VJbnN0YWxsZXJfcHJvYmxlbV9zYW1lIj7RgtCwINC20LUg0LLQtdGA0YHQuNGPPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0icGFja2FnZUluc3RhbGxlcl9wcm9ibGVtX2Rvd25ncmFkZSI+0L/QvtC90LjQttC10L3QuNC1INCy0LXRgNGB0LjQuCDQvdC1INC00L7Qv9GD0YHQutCw0LXRgtGB0Y88L3N0cmluZz4KKworICA8c3RyaW5nIG5hbWU9ImZpbGVEb3dubG9hZGVyX3RpdGxlIj7Ql9Cw0LPRgNGD0LfRh9C40Log0YTQsNC50LvQvtCyIEJSTFRUWTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9ImZpbGVEb3dubG9hZGVyX3Byb2JsZW1fZmFpbGVkIj7RhNCw0LnQuyDQvdC1INC30LDQs9GA0YPQttC10L08L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJmaWxlRG93bmxvYWRlcl9zdGF0ZV9jb25uZWN0aW5nIj7Qv9C+0LTQutC70Y7Rh9C10L3QuNC1PC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iZmlsZURvd25sb2FkZXJfc3RhdGVfZG93bmxvYWRpbmciPtGB0LrQsNGH0LjQstCw0L3QuNC1PC9zdHJpbmc+CisKKyAgPHN0cmluZyBuYW1lPSJzZXR0aW5nX3N0YXRlX29mZiI+0JLRi9C60LvRjtGH0LXQvdC+PC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iY2hlY2tib3hfc3RhdGVfdW5jaGVja2VkIj7QndC10YI8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJjaGVja2JveF9zdGF0ZV9jaGVja2VkIj7QlNCwPC9zdHJpbmc+CisKKyAgPHN0cmluZyBuYW1lPSJicmFpbGxlX2NoYW5uZWxfbmFtZSI+0KHQvtGB0YLQvtGP0L3QuNC1INCx0YDQsNC50LvQtdCy0YHQutC+0LPQviDRg9GB0YLRgNC+0LnRgdGC0LLQsDwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9ImJyYWlsbGVfaGludF90YXAiPtC90LDQttC80LjRgtC1INC00LvRjyDQstGL0L/QvtC70L3QtdC90LjRjyDQtNC10LnRgdGC0LLQuNGPPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iYnJhaWxsZV9zdGF0ZV9yZWxlYXNlZCI+0KDQsNC30YrQtdC00LjQvdC10L3Qvjwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9ImJyYWlsbGVfc3RhdGVfd2FpdGluZyI+0J7QttC40LTQsNC90LjQtTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9ImJyYWlsbGVfc3RhdGVfY29ubmVjdGVkIj7Qn9C+0LTQutC70Y7Rh9C10L3Qvjwvc3RyaW5nPgorCisgIDxzdHJpbmcgbmFtZT0iR0xPQkFMX0JVVFRPTl9OT1RJRklDQVRJT05TIj7Qo9Cy0LXQtNC+0LzQu9C10L3QuNGPPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iR0xPQkFMX0JVVFRPTl9RVUlDS19TRVRUSU5HUyI+0JHRi9GB0YLRgNGL0LUg0L3QsNGB0YLRgNC+0LnQutC4PC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iR0xPQkFMX0JVVFRPTl9CQUNLIj7QndCw0LfQsNC0PC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iR0xPQkFMX0JVVFRPTl9IT01FIj7Qk9C70LDQstC90LDRjyDRgdGC0YDQsNC90LjRhtCwPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iR0xPQkFMX0JVVFRPTl9SRUNFTlRfQVBQUyI+0J3QtdC00LDQstC90LjQtSDQv9GA0LjQu9C+0LbQtdC90LjRjzwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkdMT0JBTF9CVVRUT05fT1ZFUlZJRVciPtCe0LHQt9C+0YA8L3N0cmluZz4KKworICA8c3RyaW5nIG5hbWU9IkdMT0JBTF9CVVRUT05fU1dJVENIX0lOUFVUX01FVEhPRCI+0J/QtdGA0LXQutC70Y7Rh9C10L3QuNC1INC80LXRgtC+0LTQsCDQstCy0L7QtNCwPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iR0xPQkFMX0JVVFRPTl9WSUVXX1VTRVJfR1VJREUiPtCf0YDQvtGB0LzQvtGC0YAg0YDRg9C60L7QstC+0LTRgdGC0LLQsCDQv9C+0LvRjNC30L7QstCw0YLQtdC70Y88L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJHTE9CQUxfQlVUVE9OX0JST1dTRV9XRUJfU0lURSI+0J/RgNC+0YHQvNC+0YLRgCB3ZWIt0YHQsNC50YLQsDwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkdMT0JBTF9CVVRUT05fQlJPV1NFX0NPTU1VTklUWV9NRVNTQUdFUyI+0J/RgNC+0YHQvNC+0YLRgCDRgdC+0L7QsdGJ0LXQvdC40Lkg0YHQvtC+0LHRidC10YHRgtCy0LA8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJHTE9CQUxfQlVUVE9OX1BPU1RfQ09NTVVOSVRZX01FU1NBR0UiPtCe0YLQv9GA0LDQstC60LAg0YHQvtC+0LHRidC10L3QuNC5INGB0L7QvtCx0YnQtdGB0YLQstCwPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iR0xPQkFMX0JVVFRPTl9NQU5BR0VfQ09NTVVOSVRZX01FTUJFUlNISVAiPtCj0L/RgNCw0LLQu9C10L3QuNC1INGH0LvQtdC90YHRgtCy0L7QvCDQsiDRgdC+0L7QsdGJ0LXRgdGC0LLQtTwvc3RyaW5nPgorCisgIDxzdHJpbmcgbmFtZT0iR0xPQkFMX0JVVFRPTl9VUERBVEVfQVBQTElDQVRJT04iPtCe0LHQvdC+0LLQu9C10L3QuNC1INC/0YDQuNC70L7QttC10L3QuNGPPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iR0xPQkFMX0NIRUNLQk9YX0RFVkVMT1BFUl9CVUlMRCI+0KHQsdC+0YDQutCwINGA0LDQt9GA0LDQsdC+0YLRh9C40LrQsDwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkdMT0JBTF9DSEVDS0JPWF9BTExPV19ET1dOR1JBREUiPtCg0LDQt9GA0LXRiNC40YLRjCDQv9C10YDQtdGF0L7QtCDQvdCwINCx0L7Qu9C10LUg0YDQsNC90L3RjtGOINCy0LXRgNGB0LjRjjwvc3RyaW5nPgorCisgIDxzdHJpbmcgbmFtZT0iQ0hPT1NFUl9USVRMRV9BQ0NFU1NJQklMSVRZX0FDVElPTlMiPtCU0LXQudGB0YLQstC40Y8g0YHQv9C10YbQuNCw0LvRjNC90YvRhSDQstC+0LfQvNC+0LbQvdC+0YHRgtC10Lk8L3N0cmluZz4KKworICA8c3RyaW5nIG5hbWU9IlNFVFRJTkdTX1NDUkVFTl9NQUlOIj7QndCw0YHRgtGA0L7QudC60LggQlJMVFRZPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iU0VUVElOR1NfU0NSRUVOX0dFTkVSQUwiPtCe0LHRidC40LUg0L3QsNGB0YLRgNC+0LnQutC4PC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iU0VUVElOR1NfU0NSRUVOX01FU1NBR0UiPtCd0LDRgdGC0YDQvtC50LrQuCDRgdC+0L7QsdGJ0LXQvdC40Lk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJTRVRUSU5HU19TQ1JFRU5fREVWSUNFUyI+0KPQv9GA0LDQstC70LXQvdC40LUg0YPRgdGC0YDQvtC50YHRgtCy0LDQvNC4PC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iU0VUVElOR1NfU0NSRUVOX0FEVkFOQ0VEIj7QoNCw0YHRiNC40YDQtdC90L3Ri9C1INC90LDRgdGC0YDQvtC50LrQuDwvc3RyaW5nPgorCisgIDxzdHJpbmcgbmFtZT0iU0VUVElOR1NfQ0hFQ0tCT1hfUkVMRUFTRV9CUkFJTExFX0RFVklDRSI+0KDQsNC30YrQtdC00LjQvdC10L3QuNC1INCx0YDQsNC50LvQtdCy0YHQutC+0LPQviDRg9GB0YLRgNC+0LnRgdGC0LLQsDwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlNFVFRJTkdTX0JVVFRPTl9OQVZJR0FUSU9OX01PREUiPtCg0LXQttC40Lwg0L3QsNCy0LjQs9Cw0YbQuNC4PC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iU0VUVElOR1NfQlVUVE9OX1NQRUVDSF9TVVBQT1JUIj7Qn9C+0LTQtNC10YDQttC60LAg0YDQtdGH0Lg8L3N0cmluZz4KKworICA8c3RyaW5nIG5hbWU9IlNFVFRJTkdTX0JVVFRPTl9URVhUX1RBQkxFIj7QotC10LrRgdGC0L7QstCw0Y8g0YLQsNCx0LvQuNGG0LA8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJTRVRUSU5HU19CVVRUT05fQVRUUklCVVRFU19UQUJMRSI+0KLQsNCx0LvQuNGG0LAg0LDRgtGA0LjQsdGD0YLQvtCyPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iU0VUVElOR1NfQlVUVE9OX0NPTlRSQUNUSU9OX1RBQkxFIj7QotCw0LHQu9C40YbQsCDQutGA0LDRgtC60L7Qv9C40YHQuDwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlNFVFRJTkdTX0JVVFRPTl9LRVlCT0FSRF9UQUJMRSI+0JrQu9Cw0LLQuNCw0YLRg9GA0L3QsNGPINGC0LDQsdC70LjRhtCwPC9zdHJpbmc+CisKKyAgPHN0cmluZyBuYW1lPSJTRVRUSU5HU19DSEVDS0JPWF9TSE9XX0FMRVJUUyI+0J/QvtC60LDQt9GL0LLQsNGC0Ywg0L/RgNC10LTRg9C/0YDQtdC20LTQtdC90LjRjzwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlNFVFRJTkdTX0NIRUNLQk9YX1NIT1dfQU5OT1VOQ0VNRU5UUyI+0J/QvtC60LDQt9GL0LLQsNGC0Ywg0LjQt9Cy0LXRidC10L3QuNGPPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iU0VUVElOR1NfQ0hFQ0tCT1hfU0hPV19OT1RJRklDQVRJT05TIj7Qn9C+0LrQsNC30YvQstCw0YLRjCDRg9Cy0LXQtNC+0LzQu9C10L3QuNGPPC9zdHJpbmc+CisKKyAgPHN0cmluZyBuYW1lPSJTRVRUSU5HU19CVVRUT05fTE9HX0xFVkVMIj7Qo9GA0L7QstC10L3RjCDQttGD0YDQvdCw0LvQsDwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlNFVFRJTkdTX0JVVFRPTl9MT0dfQ0FURUdPUklFUyI+0JrQsNGC0LXQs9C+0YDQuNC4INC20YPRgNC90LDQu9CwPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iU0VUVElOR1NfQ0hFQ0tCT1hfTE9HX0FDQ0VTU0lCSUxJVFlfRVZFTlRTIj5Mb2cg0YHQvtCx0YvRgtC40Lkg0LTQvtGB0YLRg9C/0L3QvtGB0YLQuDwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlNFVFRJTkdTX0NIRUNLQk9YX0xPR19SRU5ERVJFRF9TQ1JFRU4iPkxvZyDRjdC60YDQsNC90L3QvtCz0L4g0L/RgNC10LTRgdGC0LDQstC70LXQvdC40Y88L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJTRVRUSU5HU19DSEVDS0JPWF9MT0dfS0VZQk9BUkRfRVZFTlRTIj5Mb2cg0LrQu9Cw0LLQuNCw0YLRg9GA0L3Ri9GFINGB0L7QsdGL0YLQuNC5PC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iU0VUVElOR1NfQ0hFQ0tCT1hfTE9HX1VOSEFORExFRF9FVkVOVFMiPtCW0YPRgNC90LDQuyDQvdC10L7QsdGA0LDQsdC+0YLQsNC90L3Ri9GFINGB0L7QsdGL0YLQuNC5PC9zdHJpbmc+CisKKyAgPHN0cmluZyBuYW1lPSJERVZJQ0VTX0JVVFRPTl9TRUxFQ1RFRCI+0JLRi9Cx0YDQsNC90L3QvtC1INGD0YHRgtGA0L7QudGB0YLQstC+PC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iREVWSUNFU19CVVRUT05fQUREIj7QlNC+0LHQsNCy0LjRgtGMINGD0YHRgtGA0L7QudGB0YLQstC+PC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iREVWSUNFU19CVVRUT05fUkVNT1ZFIj7Qo9C00LDQu9C40YLRjCDRg9GB0YLRgNC+0LnRgdGC0LLQvjwvc3RyaW5nPgorCisgIDxzdHJpbmcgbmFtZT0iU0VMRUNURURfREVWSUNFX05PTkUiPtC90Lgg0L7QtNC90L7Qs9C+INGD0YHRgtGA0L7QudGB0YLQstCwPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iU0VMRUNURURfREVWSUNFX1VOU0VMRUNURUQiPtGD0YHRgtGA0L7QudGB0YLQstC+INC90LUg0LLRi9Cx0YDQsNC90L48L3N0cmluZz4KKworICA8c3RyaW5nIG5hbWU9IkFERF9ERVZJQ0VfTkFNRSI+0JjQvNGPINGD0YHRgtGA0L7QudGB0YLQstCwPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iQUREX0RFVklDRV9NRVRIT0QiPtCh0L/QvtGB0L7QsSDRgdCy0Y/Qt9C4PC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iQUREX0RFVklDRV9TRUxFQ1QiPtCS0YvQsdC+0YAg0YPRgdGC0YDQvtC50YHRgtCy0LA8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJBRERfREVWSUNFX0RSSVZFUiI+0JHRgNCw0LnQu9C10LLRgdC60LjQuSDQtNGA0LDQudCy0LXRgDwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkFERF9ERVZJQ0VfRE9ORSI+0JLRi9C/0L7Qu9C90LXQvdC+PC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iQUREX0RFVklDRV9VTlNFTEVDVEVEX01FVEhPRCI+0YHQv9C+0YHQvtCxINGB0LLRj9C30Lgg0L3QtSDQstGL0LHRgNCw0L08L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJBRERfREVWSUNFX1VOU0VMRUNURURfREVWSUNFIj7Rg9GB0YLRgNC+0LnRgdGC0LLQviDQvdC1INCy0YvQsdGA0LDQvdC+PC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iQUREX0RFVklDRV9VTlNFTEVDVEVEX0RSSVZFUiI+0LHRgNCw0LnQu9C10LLRgdC60LjQuSDQtNGA0LDQudCy0LXRgCDQvdC1INCy0YvQsdGA0LDQvTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkFERF9ERVZJQ0VfTk9fREVWSUNFUyI+0L3QuCDQvtC00L3QvtCz0L4g0YPRgdGC0YDQvtC50YHRgtCy0LA8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJBRERfREVWSUNFX0RVUExJQ0FURV9OQU1FIj7QuNC80Y8g0YPRgdGC0YDQvtC50YHRgtCy0LAg0YPQttC1INC40YHQv9C+0LvRjNC30YPQtdGC0YHRjzwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkFERF9ERVZJQ0VfTk9fUEVSTUlTU0lPTiI+0LTQvtGB0YLRg9C/INC6INGD0YHRgtGA0L7QudGB0YLQstGDINC90LUg0L/RgNC10LTQvtGB0YLQsNCy0LvQtdC9PC9zdHJpbmc+CisKKyAgPHN0cmluZyBuYW1lPSJSRU1PVkVfREVWSUNFX1BST01QVCI+0JLRiywg0LTQtdC50YHRgtCy0LjRgtC10LvRjNC90L4sINGF0L7RgtC40YLQtSDRg9C00LDQu9C40YLRjCDRjdGC0L4g0YPRgdGC0YDQvtC50YHRgtCy0L4/PC9zdHJpbmc+CisKKyAgPHN0cmluZyBuYW1lPSJTRVRfU0VMRUNUSU9OX05PTkUiPtC90LUg0LLRi9Cx0YDQsNC90L48L3N0cmluZz4KKworICA8c3RyaW5nIG5hbWU9Ik5BVklHQVRJT05fTU9ERV9MQUJFTF9MaXN0Ij7QktC10YDRgtC40LrQsNC70YzQvdGL0Lkg0YHQv9C40YHQvtC6PC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iTkFWSUdBVElPTl9NT0RFX0xBQkVMX0dyaWQiPtCU0LLRg9C80LXRgNC90LDRjyDRgdC10YLQutCwPC9zdHJpbmc+CisKKyAgPHN0cmluZyBuYW1lPSJTUEVFQ0hfU1VQUE9SVF9MQUJFTF9uYXRpdmUiPtCd0LDRgtC40LLQvdCw0Y88L3N0cmluZz4KKworICA8c3RyaW5nIG5hbWU9IkNPTU1VTklDQVRJT05fTUVUSE9EX0xBQkVMX0JsdWV0b290aCI+Qmx1ZXRvb3RoPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iQ09NTVVOSUNBVElPTl9NRVRIT0RfTEFCRUxfVXNiIj5VU0I8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJDT01NVU5JQ0FUSU9OX01FVEhPRF9MQUJFTF9TZXJpYWwiPtCf0L7RgdC70LXQtNC+0LLQsNGC0LXQu9GM0L3Ri9C5INC/0L7RgNGCPC9zdHJpbmc+CisKKyAgPHN0cmluZyBuYW1lPSJMT0dfTEVWRUxfTEFCRUxfZGVidWciPtCe0YLQu9Cw0LTQutCwPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iTE9HX0xFVkVMX0xBQkVMX2luZm9ybWF0aW9uIj7QmNC90YTQvtGA0LzQsNGG0LjRjzwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkxPR19MRVZFTF9MQUJFTF9ub3RpY2UiPtCj0LLQtdC00L7QvNC70LXQvdC40LU8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJMT0dfTEVWRUxfTEFCRUxfd2FybmluZyI+0J/RgNC10LTRg9C/0YDQtdC20LTQtdC90LjQtTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkxPR19MRVZFTF9MQUJFTF9lcnJvciI+0J7RiNC40LHQutCwPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iTE9HX0xFVkVMX0xBQkVMX2NyaXRpY2FsIj7QmtGA0LjRgtC40YfQtdGB0LrQuNC5PC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iTE9HX0xFVkVMX0xBQkVMX2FsZXJ0Ij7QntC/0L7QstC10YnQtdC90LjQtTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkxPR19MRVZFTF9MQUJFTF9lbWVyZ2VuY3kiPtCQ0LLQsNGA0LjRjzwvc3RyaW5nPgorCisgIDxzdHJpbmcgbmFtZT0iTE9HX0NBVEVHT1JZX0xBQkVMX2lucGt0cyI+0JLRhdC+0LTQvdC+0Lkg0L/QsNC60LXRgjwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkxPR19DQVRFR09SWV9MQUJFTF9vdXRwa3RzIj7QktGL0YXQvtC00L3QvtC5INC/0LDQutC10YI8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJMT0dfQ0FURUdPUllfTEFCRUxfYnJsa2V5cyI+0JrQu9GO0YfQtdCy0YvQtSDRgdC+0LHRi9GC0LjRjyDQsdGA0LDQudC70LXQstGB0LrQvtCz0L4g0YPRgdGC0YDQvtC50YHRgtCy0LA8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJMT0dfQ0FURUdPUllfTEFCRUxfa2Jka2V5cyI+0JrQu9GO0YfQtdCy0YvQtSDRgdC+0LHRi9GC0LjRjyDQutC70LDQstC40LDRgtGD0YDRizwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkxPR19DQVRFR09SWV9MQUJFTF9jc3J0cmsiPtCe0YLRgdC70LXQttC40LLQsNC90LjQtSDQutGD0YDRgdC+0YDQsDwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkxPR19DQVRFR09SWV9MQUJFTF9jc3JydGciPtCc0LDRgNGI0YDRg9GC0LjQt9Cw0YbQuNGPINC60YPRgNGB0L7RgNCwPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iTE9HX0NBVEVHT1JZX0xBQkVMX3VwZGF0ZSI+0J7QsdC90L7QstC70LXQvdC40LUg0YHQvtCx0YvRgtC40Lk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJMT0dfQ0FURUdPUllfTEFCRUxfc3BlZWNoIj7QoNC10YfQtdCy0YvQtSDRgdC+0LHRi9GC0LjRjzwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkxPR19DQVRFR09SWV9MQUJFTF9hc3luYyI+0JDRgdC40L3RhdGA0L7QvdC90YvQtSDRgdC+0LHRi9GC0LjRjzwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkxPR19DQVRFR09SWV9MQUJFTF9zZXJ2ZXIiPtCh0LXRgNCy0LXRgNC90YvQtSDRgdC+0LHRi9GC0LjRjzwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkxPR19DQVRFR09SWV9MQUJFTF9naW8iPtCe0LHRidC40Lkg0LLQstC+0LQv0LLRi9Cy0L7QtDwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkxPR19DQVRFR09SWV9MQUJFTF9zZXJpYWwiPtCf0L7RgdC70LXQtNC+0LLQsNGC0LXQu9GM0L3Ri9C5IEkvTzwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkxPR19DQVRFR09SWV9MQUJFTF91c2IiPlVTQiBJL088L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJMT0dfQ0FURUdPUllfTEFCRUxfYnQiPkJsdWV0b290aCBJL088L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJMT0dfQ0FURUdPUllfTEFCRUxfaGlkIj7QktCy0L7QtC/QstGL0LLQvtC0INC40L3RgtC10YDRhNC10LnRgdCwINC/0L7Qu9GM0LfQvtCy0LDRgtC10LvRjzwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkxPR19DQVRFR09SWV9MQUJFTF9icmxkcnYiPtCh0L7QsdGL0YLQuNGPINCx0YDQsNC50LvQtdCy0YHQutC+0LPQviDQtNGA0LDQudCy0LXRgNCwPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iTE9HX0NBVEVHT1JZX0xBQkVMX3Nwa2RydiI+0KHQvtCx0YvRgtC40Y8g0YDQtdGH0LXQstC+0LPQviDQtNGA0LDQudCy0LXRgNCwPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iTE9HX0NBVEVHT1JZX0xBQkVMX3NjcmRydiI+0KHQvtCx0YvRgtC40Y8g0LTRgNCw0LnQstC10YDQsCDQv9GA0L7Qs9GA0LDQvNC80Ysg0Y3QutGA0LDQvdC90L7Qs9C+INC00L7RgdGC0YPQv9CwPC9zdHJpbmc+CisKKyAgPHN0cmluZyBuYW1lPSJCUkFJTExFX0RSSVZFUl9MQUJFTF9hdXRvIj7QsNCy0YLQvtC+0L/RgNC10LTQtdC70LXQvdC40LU8L3N0cmluZz4KKworICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfYXV0byI+0LDQstGC0L7QstGL0LHQvtGAINGP0LfRi9C60L7QstC+0Lkg0L7RgdC90L7QstGLPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9hciI+0JDRgNCw0LHRgdC60LjQuSAo0L7QsdGJ0LjQuSk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX2FzIj7QkNGB0YHQsNC80YHQutC40Lk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX2F3YSI+0JDQstCw0LTRhdC4PC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9iZyI+0JHQvtC70LPQsNGA0YHQutC40Lk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX2JoIj7QkdC40YXQsNGA0Lg8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX2JuIj7QkdC10L3Qs9Cw0LvRjNGB0LrQuNC5PC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9ibyI+0KLQuNCx0LXRgtGB0LrQuNC5PC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9icmEiPtCR0YDQsNC00LY8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX2JyZiI+0JPQvtGC0L7QstGL0Lkg0LHRgNCw0LnQu9C10LLRgdC60LjQuSDRhNC+0YDQvNCw0YIgKNC00LvRjyDQv9GA0L7RgdC80L7RgtGA0LAg0YTQsNC50LvQvtCyIC5icmYg0LIg0YDQtdC00LDQutGC0L7RgNC1INC40LvQuCDQv9C10LnQtNC20LXRgNC1KTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfY3MiPtCn0LXRiNGB0LrQuNC5PC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9jeSI+0JLQsNC70LvQuNC50YHQutC40Lk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX2RhIj7QlNCw0YLRgdC60LjQuTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfZGFfMTI1MiI+0JTQsNGC0YHQutC40LkgKFN2ZW5kIFRob3VnYWFyZCwgMjAwMuKAkzEx4oCTMTgpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9kYV9sdCI+0JTQsNGC0YHQutC40LkgKExvZ1RleHQpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9kZSI+0J3QtdC80LXRhtC60LjQuTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfZHJhIj7QlNGA0LDQstC40LTQuNC50YHQutC40Lk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX2VsIj7Qk9GA0LXRh9C10YHQutC40Lk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX2VuIj7QkNC90LPQu9C40LnRgdC60LjQuTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfZW5fQ0EiPtCQ0L3Qs9C70LjQudGB0LrQuNC5ICjQmtCw0L3QsNC00LApPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9lbl9HQiI+0JDQvdCz0LvQuNC50YHQutC40LkgKNCS0LXQu9C40LrQvtCx0YDQuNGC0LDQvdC40Y8pPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9lbl9uYWJjYyI+0JDQvdCz0LvQuNC50YHQutC40LkgKNCh0LXQstC10YDQvtCw0LzQtdGA0LjQutCw0L3RgdC60LjQuSBBU0NJSSDQutC+0LQg0LTQu9GPINC/0YDQtdC00YHRgtCw0LLQu9C10L3QuNGPINGI0YDQuNGE0YLQsCDQkdGA0LDQudC70Y8pPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9lbl9VUyI+0JDQvdCz0LvQuNC50YHQutC40LkgKNCh0KjQkCk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX2VvIj7QrdGB0L/QtdGA0LDQvdGC0L48L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX2VzIj7QmNGB0L/QsNC90YHQutC40Lk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX2V0Ij7QrdGB0YLQvtC90YHQutC40Lk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX2ZpIj7QpNC40L3RgdC60LjQuTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfZnIiPtCk0YDQsNC90YbRg9C30YHQutC40Lk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX2ZyXzIwMDciPtCk0YDQsNC90YbRg9C30YHQutC40LkgKNGD0L3QuNGE0LjRhtC40YDQvtCy0LDQvdC90YvQuSAyMDA3KTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfZnJfQ0EiPtCk0YDQsNC90YbRg9C30YHQutC40LkgKNCa0LDQvdCw0LTQsCk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX2ZyX2NiaWZzIj7QpNGA0LDQvdGG0YPQt9GB0LrQuNC5ICjRhNGA0LDQvdGG0YPQt9GB0LrQuNC5INGB0YLQsNC90LTQsNGA0YLQvdGL0Lkg0LrQvtC80L/RjNGO0YLQtdGA0L3Ri9C5INC60L7QtCDQkdGA0LDQudC70Y8pPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9mcl9GUiI+0KTRgNCw0L3RhtGD0LfRgdC60LjQuSAo0KTRgNCw0L3RhtC40Y8pPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9mcl92cyI+0KTRgNCw0L3RhtGD0LfRgdC60LjQuSAoVmlzaW9CcmFpbGxlKTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfZ2EiPtCY0YDQu9Cw0L3QtNGB0LrQuNC5PC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9nZCI+0JPRjdC70YzRgdC60LjQuTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfZ29uIj7Qk9C+0L3QtNC4PC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9ndSI+0JPRg9C00LbQsNGA0LDRgtC4PC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9oZSI+0JjQstGA0LjRgjwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfaGkiPtCl0LjQvdC00Lg8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX2hyIj7QpdC+0YDQstCw0YLRgdC60LjQuTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfaHUiPtCS0LXQvdCz0LXRgNGB0LrQuNC5PC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9oeSI+0JDRgNC80Y/QvdGB0LrQuNC5PC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9pcyI+0JjRgdC70LDQvdC00YHQutC40Lk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX2l0Ij7QmNGC0LDQu9GM0Y/QvdGB0LrQuNC5PC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9raGEiPtCl0LDRgdC4PC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9rbiI+0JrQsNC90L3QsNC00LU8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX2tvayI+0JrQvtC90LrQsNC90Lg8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX2tydSI+0JrRg9GA0YPQutGFPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9sdCI+0JvQuNGC0L7QstGB0LrQuNC5PC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9sdiI+0JvQsNGC0LLQuNC50YHQutC40Lk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX21nIj7QnNCw0LvQsNCz0LDRgdC40LnRgdC60LjQuTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfbWkiPtCc0LDQvtGA0Lg8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX21sIj7QnNCw0LvQsNGP0LvQsNC8PC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9tbmkiPtCc0LDQvdC40L/Rg9GA0Lg8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX21yIj7QnNCw0YDQsNGC0YXQuDwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfbXQiPtCc0LDQu9GM0YLQuNC50YHQutC40Lk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX211biI+0JzRg9C90LTQsDwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfbXdyIj7QnNCw0YDQstCw0YDQuDwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfbmUiPtCd0LXQv9Cw0LvRjNGB0LrQuNC5PC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9uZXciPtCd0LXQstCw0YDQuDwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfbmwiPtCT0L7Qu9C70LDQvdC00YHQutC40Lk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX25sX0JFIj7Qk9C+0LvQu9Cw0L3QtNGB0LrQuNC5ICjQkdC10LvRjNCz0LjRjyk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX25sX05MIj7Qk9C+0LvQu9Cw0L3QtNGB0LrQuNC5ICjQndC40LTQtdGA0LvQsNC90LTRiyk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX25vIj7QndC+0YDQstC10LbRgdC60LjQuTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfbm9fZ2VuZXJpYyI+0J3QvtGA0LLQtdC20YHQutC40LkgKNGBINC/0L7QtNC00LXRgNC20LrQvtC5INC00YDRg9Cz0LjRhSDRj9C30YvQutC+0LIpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9ub19vdXAiPtCd0L7RgNCy0LXQttGB0LrQuNC5IChPZmZlbnRsaWcgdXR2YWxnIGZvciBwdW5rdHNrcmlmdCk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX253YyI+0J3QtdCy0LDRgNC4ICjRgdGC0LDRgNGL0LkpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9vciI+0J7RgNC40Y88L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX3BhIj7Qn9Cw0L3QtNC20LDQsdC4PC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9waSI+0J/QsNC70Lg8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX3BsIj7Qn9C+0LvRjNGB0LrQuNC5PC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9wdCI+0J/QvtGA0YLRg9Cz0LDQu9GM0YHQutC40Lk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX3JvIj7QoNGD0LzRi9C90YHQutC40Lk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX3J1Ij7QoNGD0YHRgdC60LjQuTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfc2EiPtCh0LDQvdGB0LrRgNC40YI8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX3NhdCI+0KHQsNC90YLQsNC70Lg8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX3NkIj7QodC40L3QtNGF0L7Qsjwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfc2UiPtCh0LXQstC10YDQvdC+0YHQsNCw0LzRgdC60LjQuTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfc2siPtCh0LvQvtCy0LDRhtC60LjQuTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfc2wiPtCh0LvQvtCy0LXQvdGB0LrQuNC5PC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9zdiI+0KjQstC10LTRgdC60LjQuTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfc3ZfMTk4OSI+0KjQstC10LTRgdC60LjQuSAo0YHRgtCw0L3QtNCw0YDRgiAxOTg5KTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfc3ZfMTk5NiI+0KjQstC10LTRgdC60LjQuSAo0YHRgtCw0L3QtNCw0YDRgiAxOTk2KTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfc3ciPtCh0YPQsNGF0LjQu9C4PC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF90YSI+0KLQsNC80LjQuzwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfdGUiPtCi0LXQu9GD0LPRgzwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfdHIiPtCi0YPRgNC10YbQutC40Lk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX3VrIj7Qo9C60YDQsNC40L3RgdC60LjQuTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfdmkiPtCS0YzQtdGC0L3QsNC80YHQutC40Lk8L3N0cmluZz4KKworICA8c3RyaW5nIG5hbWU9IkFUVFJJQlVURVNfVEFCTEVfTEFCRUxfaW52bGVmdF9yaWdodCI+0LjQvdCy0LXRgNGB0L3Ri9C5INGG0LLQtdGCINC/0LXRgNC10LTQvdC10LPQviDQv9C70LDQvdCwINCyINC70LXQstC+0Lkg0LrQvtC70L7QvdC60LUg0Lgg0YbQstC10YIg0YTQvtC90LAg0LIg0L/RgNCw0LLQvtC5INC60L7Qu9C+0L3QutC1PC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iQVRUUklCVVRFU19UQUJMRV9MQUJFTF9sZWZ0X3JpZ2h0Ij7RhtCy0LXRgiDQv9C10YDQtdC00L3QtdCz0L4g0L/Qu9Cw0L3QsCDQsiDQu9C10LLQvtC5INC60L7Qu9C+0L3QutC1INC4INGG0LLQtdGCINGE0L7QvdCwINCyINC/0YDQsNCy0L7QuSDQutC+0LvQvtC90LrQtTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkFUVFJJQlVURVNfVEFCTEVfTEFCRUxfdXBwZXJfbG93ZXIiPtGG0LLQtdGCINC/0LXRgNC10LTQvdC10LPQviDQv9C70LDQvdCwINCyINCy0LXRgNGF0L3QtdC8INC60LLQsNC00YDQsNGC0LUg0Lgg0YbQstC10YIg0YTQvtC90LAg0LIg0L3QuNC20L3QtdC8INC60LLQsNC00YDQsNGC0LU8L3N0cmluZz4KKworICA8c3RyaW5nIG5hbWU9IkNPTlRSQUNUSU9OX1RBQkxFX0xBQkVMX2F1dG8iPtCw0LLRgtC+0LLRi9Cx0L7RgCDRj9C30YvQutC+0LLQvtC5INC+0YHQvdC+0LLRizwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkNPTlRSQUNUSU9OX1RBQkxFX0xBQkVMX2FmIj7QkNGE0YDQuNC60LDQsNC90YEgKNGB0L7QutGA0LDRidGR0L3QvdGL0LkpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iQ09OVFJBQ1RJT05fVEFCTEVfTEFCRUxfYW0iPtCQ0LzRhdCw0YDRgdC60LjQuSAo0L3QtdGB0L7QutGA0LDRidGR0L3QvdGL0LkpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iQ09OVFJBQ1RJT05fVEFCTEVfTEFCRUxfZGUiPtCd0LXQvNC10YbQutC40Lk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJDT05UUkFDVElPTl9UQUJMRV9MQUJFTF9kZV9nMCI+0J3QtdC80LXRhtC60LjQuSAo0L3QtdGB0L7QutGA0LDRidGR0L3QvdGL0LkpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iQ09OVFJBQ1RJT05fVEFCTEVfTEFCRUxfZGVfZzEiPtCd0LXQvNC10YbQutC40LkgKNCx0LDQt9C+0LLRi9C1INGB0L7QutGA0LDRidC10L3QuNGPKTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkNPTlRSQUNUSU9OX1RBQkxFX0xBQkVMX2RlX2cyIj7QndC10LzQtdGG0LrQuNC5ICjRgdC+0LrRgNCw0YnRkdC90L3Ri9C5KTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkNPTlRSQUNUSU9OX1RBQkxFX0xBQkVMX2RlXzE5OTgiPtCd0LXQvNC10YbQutC40LkgKNGB0L7QutGA0LDRidGR0L3QvdGL0LkgLSDRgdGC0LDQvdC00LDRgNGCIDE5OTgpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iQ09OVFJBQ1RJT05fVEFCTEVfTEFCRUxfZGVfMjAxNSI+0J3QtdC80LXRhtC60LjQuSAo0YHQvtC60YDQsNGJ0ZHQvdC90YvQuSAtINGB0YLQsNC90LTQsNGA0YIgMjAxNSk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJDT05UUkFDVElPTl9UQUJMRV9MQUJFTF9lbiI+0JDQvdCz0LvQuNC50YHQutC40Lk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJDT05UUkFDVElPTl9UQUJMRV9MQUJFTF9lbl9VUyI+0JDQvdCz0LvQuNC50YHQutC40LkgKNCh0KjQkCk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJDT05UUkFDVElPTl9UQUJMRV9MQUJFTF9lbl91ZWJfZzEiPtCQ0L3Qs9C70LjQudGB0LrQuNC5ICjRg9C90LjRhNC40YbQuNGA0L7QstCw0L3QvdGL0LksINC90LXRgdC+0LrRgNCw0YnRkdC90L3Ri9C5KTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkNPTlRSQUNUSU9OX1RBQkxFX0xBQkVMX2VuX3VlYl9nMiI+0JDQvdCz0LvQuNC50YHQutC40LkgKNGD0L3QuNGE0LjRhtC40YDQvtCy0LDQvdC90YvQuSDQsNC90LPQu9C40LnRgdC60LjQuSDQkdGA0LDQudC70YwsINGB0YLRg9C/0LXQvdGMIDIpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iQ09OVFJBQ1RJT05fVEFCTEVfTEFCRUxfZW5fdXNfZzIiPtCQ0L3Qs9C70LjQudGB0LrQuNC5ICjQodCo0JAsINGB0YLRg9C/0LXQvdGMIDIpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iQ09OVFJBQ1RJT05fVEFCTEVfTEFCRUxfZXMiPtCY0YHQv9Cw0L3RgdC60LjQuSAo0YHRgtGD0L/QtdC90YwgMik8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJDT05UUkFDVElPTl9UQUJMRV9MQUJFTF9mciI+0KTRgNCw0L3RhtGD0LfRgdC60LjQuTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkNPTlRSQUNUSU9OX1RBQkxFX0xBQkVMX2ZyX2cxIj7QpNGA0LDQvdGG0YPQt9GB0LrQuNC5ICjQvdC10YHQvtC60YDQsNGJ0ZHQvdC90YvQuSk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJDT05UUkFDVElPTl9UQUJMRV9MQUJFTF9mcl9nMiI+0KTRgNCw0L3RhtGD0LfRgdC60LjQuSAo0YHQvtC60YDQsNGJ0ZHQvdC90YvQuSk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJDT05UUkFDVElPTl9UQUJMRV9MQUJFTF9oYSI+0KXQsNGD0YHQsCAo0YHQvtC60YDQsNGJ0ZHQvdC90YvQuSk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJDT05UUkFDVElPTl9UQUJMRV9MQUJFTF9pZCI+0JjQvdC00L7QvdC10LfQuNC50YHQutC40LkgKNGB0L7QutGA0LDRidGR0L3QvdGL0LkpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iQ09OVFJBQ1RJT05fVEFCTEVfTEFCRUxfaXBhIj7QnNC10LbQtNGD0L3QsNGA0L7QtNC90YvQuSDRhNC+0L3QtdGC0LjRh9C10YHQutC40Lkg0LDQu9GE0LDQstC40YI8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJDT05UUkFDVElPTl9UQUJMRV9MQUJFTF9qYSI+0K/Qv9C+0L3RgdC60LjQuSAo0L3QtdGB0L7QutGA0LDRidGR0L3QvdGL0LkpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iQ09OVFJBQ1RJT05fVEFCTEVfTEFCRUxfa28iPtCa0L7RgNC10LnRgdC60LjQuTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkNPTlRSQUNUSU9OX1RBQkxFX0xBQkVMX2tvX2cwIj7QmtC+0YDQtdC50YHQutC40LkgKNC90LXRgdC+0LrRgNCw0YnRkdC90L3Ri9C5KTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkNPTlRSQUNUSU9OX1RBQkxFX0xBQkVMX2tvX2cxIj7QmtC+0YDQtdC50YHQutC40LkgKNGB0YLRg9C/0LXQvdGMIDEpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iQ09OVFJBQ1RJT05fVEFCTEVfTEFCRUxfa29fZzIiPtCa0L7RgNC10LnRgdC60LjQuSAo0YHRgtGD0L/QtdC90YwgMik8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJDT05UUkFDVElPTl9UQUJMRV9MQUJFTF9sdCI+0JvQuNGC0L7QstGB0LrQuNC5ICjQvdC10YHQvtC60YDQsNGJ0ZHQvdC90YvQuSk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJDT05UUkFDVElPTl9UQUJMRV9MQUJFTF9tZyI+0JzQsNC70LDQs9Cw0YHQuNC50YHQutC40LkgKNGB0L7QutGA0LDRidGR0L3QvdGL0LkpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iQ09OVFJBQ1RJT05fVEFCTEVfTEFCRUxfbXVuIj7QnNGD0L3QtNCwICjRgdC+0LrRgNCw0YnRkdC90L3Ri9C5KTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkNPTlRSQUNUSU9OX1RBQkxFX0xBQkVMX25sIj7Qk9C+0LvQu9Cw0L3QtNGB0LrQuNC5ICjRgdC+0LrRgNCw0YnRkdC90L3Ri9C5KTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkNPTlRSQUNUSU9OX1RBQkxFX0xBQkVMX255Ij7Qp9C40YfQtdCy0LAgKNGB0L7QutGA0LDRidGR0L3QvdGL0LkpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iQ09OVFJBQ1RJT05fVEFCTEVfTEFCRUxfcHQiPtCf0L7RgNGC0YPQs9Cw0LvRjNGB0LrQuNC5ICjRgdGC0YPQv9C10L3RjCAyKTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkNPTlRSQUNUSU9OX1RBQkxFX0xBQkVMX3J1Ij7QoNGD0YHRgdC60LjQuSAo0YHQvtC60YDQsNGJ0ZHQvdC90YvQuSk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJDT05UUkFDVElPTl9UQUJMRV9MQUJFTF9zaSI+0KHQuNC90LPQsNC70YzRgdC60LjQuSAo0L3QtdGB0L7QutGA0LDRidGR0L3QvdGL0LkpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iQ09OVFJBQ1RJT05fVEFCTEVfTEFCRUxfc3ciPtCh0YPQsNGF0LjQu9C4ICjRgdC+0LrRgNCw0YnRkdC90L3Ri9C5KTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkNPTlRSQUNUSU9OX1RBQkxFX0xBQkVMX3RoIj7QotCw0LnRgdC60LjQuSAo0YHQvtC60YDQsNGJ0ZHQvdC90YvQuSk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJDT05UUkFDVElPTl9UQUJMRV9MQUJFTF96aF9UVyI+0JrQuNGC0LDQudGB0LrQuNC5ICjQotCw0LnQstCw0L3RjCwg0L3QtdGB0L7QutGA0LDRidGR0L3QvdGL0LkpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iQ09OVFJBQ1RJT05fVEFCTEVfTEFCRUxfenUiPtCX0YPQu9GDICjRgdC+0LrRgNCw0YnRkdC90L3Ri9C5KTwvc3RyaW5nPgorCisgIDxzdHJpbmcgbmFtZT0iS0VZQk9BUkRfVEFCTEVfTEFCRUxfYnJhaWxsZSI+0L/RgNC40LLRj9C30LrQuCDQtNC70Y8g0LHRgNCw0LnQu9C10LLRgdC60LjRhSDQutC70LDQstC40LDRgtGD0YA8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJLRVlCT0FSRF9UQUJMRV9MQUJFTF9kZXNrdG9wIj7Qv9GA0LjQstGP0LfQutC4INC00LvRjyDQv9C+0LvQvdGL0YUg0LrQu9Cw0LLQuNCw0YLRg9GAPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iS0VZQk9BUkRfVEFCTEVfTEFCRUxfa2V5cGFkIj7Qv9GA0LjQstGP0LfQutC4INC00LvRjyDQutC90L7Qv9C+0YfQvdC+0Lkg0L/QsNC90LXQu9C4INC90LDQstC40LPQsNGG0LjQuDwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IktFWUJPQVJEX1RBQkxFX0xBQkVMX2xhcHRvcCI+0L/RgNC40LLRj9C30LrQuCDQtNC70Y8g0LrQu9Cw0LLQuNCw0YLRg9GAINGBINC+0YLRgdGD0YLRgdGC0LLRg9GO0YnQuNC8INC00L7Qv9C+0LvQvdC40YLQtdC70YzQvdGL0Lwg0LHQu9C+0LrQvtC8PC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iS0VZQk9BUkRfVEFCTEVfTEFCRUxfc3VuX3R5cGU2Ij7Qv9GA0LjQstGP0LfQutC4INC00LvRjyDQutC70LDQstC40LDRgtGD0YAgU3VuIFR5cGUgNjwvc3RyaW5nPgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9BbmRyb2lkL0dyYWRsZS9hcHAvc3JjL21haW4vcmVzL3ZhbHVlcy1zbC9zdHJpbmdzLnhtbCBiL0FuZHJvaWQvR3JhZGxlL2FwcC9zcmMvbWFpbi9yZXMvdmFsdWVzLXNsL3N0cmluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMzZWUzOTEKLS0tIC9kZXYvbnVsbAorKysgYi9BbmRyb2lkL0dyYWRsZS9hcHAvc3JjL21haW4vcmVzL3ZhbHVlcy1zbC9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDI4OCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KKworPHJlc291cmNlcz4KKyAgPHN0cmluZyBuYW1lPSJhcHBfZGVzY3JpcHRpb24iPkJSTFRUWSBwb2RwaXJhIGJyYWpldmUgbmFwcmF2ZS48L3N0cmluZz4KKworICA8c3RyaW5nIG5hbWU9InVzYk1vbml0b3JfbGFiZWwiPlNwcmVtbGphbmplIFByaWtsanXEjWVuZSBVU0IgTmFwcmF2ZTwvc3RyaW5nPgorCisgIDxzdHJpbmcgbmFtZT0iYWJvdXRfbGFiZWxfYWN0aXZpdHkiPk8gUHJvZ3JhbXU8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJhYm91dF9sYWJlbF9jb3B5cmlnaHQiPkF2dG9yc2tlIFByYXZpY2U8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJhYm91dF9sYWJlbF9idWlsZFRpbWUiPsSMYXMgR3JhZGl0dmU8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJhYm91dF9sYWJlbF9zb3VyY2VSZXZpc2lvbiI+UmF6bGnEjWljYSBJenZvcm5lS29kZTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9ImFib3V0X2xhYmVsX3ByaXZhY3lQb2xpY3kiPlBvbGl0aWthIFphc2Vibm9zdGk8L3N0cmluZz4KKworICA8c3RyaW5nIG5hbWU9ImlucHV0U2VydmljZV9uYW1lIj5CUkxUVFkgU3Rvcml0ZXYgVm5vc2E8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJpbnB1dFNlcnZpY2VfdHlwZSI+VGlwa292bmljZSBuYSBCcmFqZXZpaCBWcnN0aWNhaDwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9ImlucHV0U2VydmljZV9ub3RfZW5hYmxlZCI+c3Rvcml0ZXYgdm5vc2Egbmkgb21vZ2/EjWVuYTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9ImlucHV0U2VydmljZV9ub3Rfc2VsZWN0ZWQiPnN0b3JpdGV2IHZub3NhIG5pIGl6YnJhbmE8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJpbnB1dFNlcnZpY2Vfbm90X3N0YXJ0ZWQiPnN0b3JpdGV2IHZub3NhIG5pIHphZ25hbmE8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJpbnB1dFNlcnZpY2Vfbm90X2Nvbm5lY3RlZCI+c3Rvcml0ZXYgdm5vc2EgbmkgcHJpa2xqdcSNZW5hPC9zdHJpbmc+CisKKyAgPHN0cmluZyBuYW1lPSJ1cGRhdGVBcHBsaWNhdGlvbl9wcm9ibGVtX2ZhaWxlZCI+cHJvZ3JhbSBzZSBuaSBwb3NvZG9iaWw8L3N0cmluZz4KKworICA8c3RyaW5nIG5hbWU9InBhY2thZ2VJbnN0YWxsZXJfcHJvYmxlbV9mYWlsZWQiPnBha2V0IG5pIG5hbWXFocSNZW48L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJwYWNrYWdlSW5zdGFsbGVyX3Byb2JsZW1fc2FtZSI+ZW5ha2EgcmF6bGnEjWljYTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9InBhY2thZ2VJbnN0YWxsZXJfcHJvYmxlbV9kb3duZ3JhZGUiPnBvZGdyYWRuamEgc2UgbmUgZG92b2xpPC9zdHJpbmc+CisKKyAgPHN0cmluZyBuYW1lPSJmaWxlRG93bmxvYWRlcl90aXRsZSI+QlJMVFRZIFByZW5vcyBEYXRvdGVrZTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9ImZpbGVEb3dubG9hZGVyX3Byb2JsZW1fZmFpbGVkIj5kYXRvdGVrYSBzZSBuaSBwcmVuZXNsYTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9ImZpbGVEb3dubG9hZGVyX3N0YXRlX2Nvbm5lY3RpbmciPnBvdmV6b3ZhbmplPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iZmlsZURvd25sb2FkZXJfc3RhdGVfZG93bmxvYWRpbmciPnByZW5hxaFhbmplPC9zdHJpbmc+CisKKyAgPHN0cmluZyBuYW1lPSJzZXR0aW5nX3N0YXRlX29mZiI+SXprbGp1xI1lbm88L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJjaGVja2JveF9zdGF0ZV91bmNoZWNrZWQiPk5lPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iY2hlY2tib3hfc3RhdGVfY2hlY2tlZCI+RGE8L3N0cmluZz4KKworICA8c3RyaW5nIG5hbWU9ImJyYWlsbGVfY2hhbm5lbF9uYW1lIj5TdGFuamUgQnJhamV2ZSBOYXByYXZlPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iYnJhaWxsZV9oaW50X3RhcCI+dGFwbml0ZSB6YSBkZWphbmphPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iYnJhaWxsZV9zdGF0ZV9yZWxlYXNlZCI+U3Byb8WhxI1lbmE8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJicmFpbGxlX3N0YXRlX3dhaXRpbmciPsSMYWtham/EjWE8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJicmFpbGxlX3N0YXRlX2Nvbm5lY3RlZCI+UHJpa2xqdcSNZW5hPC9zdHJpbmc+CisKKyAgPHN0cmluZyBuYW1lPSJHTE9CQUxfQlVUVE9OX05PVElGSUNBVElPTlMiPk9idmVzdGlsYTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkdMT0JBTF9CVVRUT05fUVVJQ0tfU0VUVElOR1MiPkhpdHJlIE5hc3Rhdml0dmU8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJHTE9CQUxfQlVUVE9OX0JBQ0siPk5hemFqPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iR0xPQkFMX0JVVFRPTl9IT01FIj5Eb21vdjwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkdMT0JBTF9CVVRUT05fUkVDRU5UX0FQUFMiPlRyZW51dG5lIEFwbGlrYWNpamU8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJHTE9CQUxfQlVUVE9OX09WRVJWSUVXIj5QcmVnbGVkPC9zdHJpbmc+CisKKyAgPHN0cmluZyBuYW1lPSJHTE9CQUxfQlVUVE9OX1NXSVRDSF9JTlBVVF9NRVRIT0QiPlByZWtsb3BpIFZub3NubyBNZXRvZG88L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJHTE9CQUxfQlVUVE9OX1ZJRVdfVVNFUl9HVUlERSI+R2xlaiBVcG9yYWJuacWha2kgVm9kacSNPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iR0xPQkFMX0JVVFRPTl9CUk9XU0VfV0VCX1NJVEUiPlByZWJyc2thaiBTcGxldG5vIE1lc3RvPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iR0xPQkFMX0JVVFRPTl9CUk9XU0VfQ09NTVVOSVRZX01FU1NBR0VTIj5QcmVicnNrYWogU3Bvcm/EjWlsYSBTa3Vwbm9zdGk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJHTE9CQUxfQlVUVE9OX1BPU1RfQ09NTVVOSVRZX01FU1NBR0UiPk9iamF2aSBTcG9yb8SNaWxvIFNrdXBub3N0aTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkdMT0JBTF9CVVRUT05fTUFOQUdFX0NPTU1VTklUWV9NRU1CRVJTSElQIj5VcHJhdmxqYWogxIxsYW5zdHZvIHYgU2t1cG5vc3RpPC9zdHJpbmc+CisKKyAgPHN0cmluZyBuYW1lPSJHTE9CQUxfQlVUVE9OX1VQREFURV9BUFBMSUNBVElPTiI+UG9zb2RvYmkgUHJvZ3JhbTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkdMT0JBTF9DSEVDS0JPWF9ERVZFTE9QRVJfQlVJTEQiPkdyYWRpdGV2IHphIFJhenZpamFsY2U8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJHTE9CQUxfQ0hFQ0tCT1hfQUxMT1dfRE9XTkdSQURFIj5Eb3ZvbGkgUG9kZ3JhZGl0ZXY8L3N0cmluZz4KKworICA8c3RyaW5nIG5hbWU9IkNIT09TRVJfVElUTEVfQUNDRVNTSUJJTElUWV9BQ1RJT05TIj5EZWphbmphIERvc3RvcG5vc3RpPC9zdHJpbmc+CisKKyAgPHN0cmluZyBuYW1lPSJTRVRUSU5HU19TQ1JFRU5fTUFJTiI+QlJMVFRZIFNldHRpbmdzPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iU0VUVElOR1NfU0NSRUVOX0dFTkVSQUwiPlNwbG/FoW5lIE5hc3Rhdml0dmU8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJTRVRUSU5HU19TQ1JFRU5fTUVTU0FHRSI+TmFzdGF2aXR2ZSBTcG9yb8SNaWxhPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iU0VUVElOR1NfU0NSRUVOX0RFVklDRVMiPlVwcmF2bGphaiBOYXByYXZlPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iU0VUVElOR1NfU0NSRUVOX0FEVkFOQ0VEIj5OYXByZWRuZSBOYXN0YXZpdHZlPC9zdHJpbmc+CisKKyAgPHN0cmluZyBuYW1lPSJTRVRUSU5HU19DSEVDS0JPWF9SRUxFQVNFX0JSQUlMTEVfREVWSUNFIj5TcHJvc3RpIEJyYWpldm8gTmFwcmF2bzwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlNFVFRJTkdTX0JVVFRPTl9OQVZJR0FUSU9OX01PREUiPkRlbG92YW5qZSBrcm1hcmplbmphPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iU0VUVElOR1NfQlVUVE9OX1NQRUVDSF9TVVBQT1JUIj5Hb3Zvcm5hIFBvZHBvcmE8L3N0cmluZz4KKworICA8c3RyaW5nIG5hbWU9IlNFVFRJTkdTX0JVVFRPTl9URVhUX1RBQkxFIj5UYWJlbGEgQmVzZWRpbGE8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJTRVRUSU5HU19CVVRUT05fQVRUUklCVVRFU19UQUJMRSI+QXR0cmlidXRlcyBUYWJsZSBUYWJlbGEgUHJpbGFzdGtvdjwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlNFVFRJTkdTX0JVVFRPTl9DT05UUkFDVElPTl9UQUJMRSI+VGFiZWxhIEtyYWrFoWF2PC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iU0VUVElOR1NfQlVUVE9OX0tFWUJPQVJEX1RBQkxFIj5UYWJlbGEgVGlwazwvc3RyaW5nPgorCisgIDxzdHJpbmcgbmFtZT0iU0VUVElOR1NfQ0hFQ0tCT1hfU0hPV19BTEVSVFMiPlBva2HFvmkgT3Bvem9yaWxhPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iU0VUVElOR1NfQ0hFQ0tCT1hfU0hPV19BTk5PVU5DRU1FTlRTIj5Qb2thxb5pIE5hem5hbmlsYTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlNFVFRJTkdTX0NIRUNLQk9YX1NIT1dfTk9USUZJQ0FUSU9OUyI+UG9rYcW+aSBPYnZlc3RpbGE8L3N0cmluZz4KKworICA8c3RyaW5nIG5hbWU9IlNFVFRJTkdTX0JVVFRPTl9MT0dfTEVWRUwiPk5pdm8gRG5ldm5pa2E8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJTRVRUSU5HU19CVVRUT05fTE9HX0NBVEVHT1JJRVMiPkthdGVnb3JpamUgRG5ldm5pa292PC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iU0VUVElOR1NfQ0hFQ0tCT1hfTE9HX0FDQ0VTU0lCSUxJVFlfRVZFTlRTIj5CZWxlxb5pIERvZ29ka2UgRG9zdG9wbm9zdGk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJTRVRUSU5HU19DSEVDS0JPWF9MT0dfUkVOREVSRURfU0NSRUVOIj5CZWxlxb5pIERvZ29ka2UgdiBadmV6aSB6IFVwb2RhYmxqYW5qZW0gbmEgWmFzbG9uPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iU0VUVElOR1NfQ0hFQ0tCT1hfTE9HX0tFWUJPQVJEX0VWRU5UUyI+QmVsZcW+aSBEb2dvZGtlIHMgVGlwa292bmljbzwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlNFVFRJTkdTX0NIRUNLQk9YX0xPR19VTkhBTkRMRURfRVZFTlRTIj5aYWJlbGXFvmkgTmVvYnJhdm5hdmFuZSBEb2dvZGtlPC9zdHJpbmc+CisKKyAgPHN0cmluZyBuYW1lPSJERVZJQ0VTX0JVVFRPTl9TRUxFQ1RFRCI+SXpicmFuYSBOYXByYXZhPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iREVWSUNFU19CVVRUT05fQUREIj5Eb2RhaiBOYXByYXZvPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iREVWSUNFU19CVVRUT05fUkVNT1ZFIj5PZHN0cmFuaSBOYXByYXZvPC9zdHJpbmc+CisKKyAgPHN0cmluZyBuYW1lPSJTRUxFQ1RFRF9ERVZJQ0VfTk9ORSI+YnJleiBuYXByYXZlPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iU0VMRUNURURfREVWSUNFX1VOU0VMRUNURUQiPmRldmljZSBuaSBpemJyYW5hPC9zdHJpbmc+CisKKyAgPHN0cmluZyBuYW1lPSJBRERfREVWSUNFX05BTUUiPkltZSBOYXByYXZlPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iQUREX0RFVklDRV9NRVRIT0QiPk1ldG9kYSBLb211bmlrYWNpamU8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJBRERfREVWSUNFX1NFTEVDVCI+SXpiZXJpIE5hcHJhdm88L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJBRERfREVWSUNFX0RSSVZFUiI+R29uaWxuaWsgQnJhamE8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJBRERfREVWSUNFX0RPTkUiPktvbsSNYW5vPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iQUREX0RFVklDRV9VTlNFTEVDVEVEX01FVEhPRCI+bmHEjWluIGtvbXVuaWthY2lqZSBuaSBpemJyYW48L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJBRERfREVWSUNFX1VOU0VMRUNURURfREVWSUNFIj5uYXByYXZhIG5pIGl6YnJhbmE8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJBRERfREVWSUNFX1VOU0VMRUNURURfRFJJVkVSIj5nb25pbG5payBicmFqZXZlIHZyc3RpY2UgbmkgaXpicmFuPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iQUREX0RFVklDRV9OT19ERVZJQ0VTIj5uaSBuYXByYXY8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJBRERfREVWSUNFX0RVUExJQ0FURV9OQU1FIj5pbWUgbmFwcmF2ZSDFvmUgdiB1cG9yYWJpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iQUREX0RFVklDRV9OT19QRVJNSVNTSU9OIj5kb3N0b3AgZG8gbmFwcmF2ZSBuaSBkb2RlbGplbjwvc3RyaW5nPgorCisgIDxzdHJpbmcgbmFtZT0iUkVNT1ZFX0RFVklDRV9QUk9NUFQiPkFsaSByZXMgxb5lbGl0ZSBvZHN0cmFuaXRpIHRvIG5hcHJhdm8/PC9zdHJpbmc+CisKKyAgPHN0cmluZyBuYW1lPSJTRVRfU0VMRUNUSU9OX05PTkUiPm5pxI0gbmkgaXpicmFubzwvc3RyaW5nPgorCisgIDxzdHJpbmcgbmFtZT0iTkFWSUdBVElPTl9NT0RFX0xBQkVMX0xpc3QiPk5hdnBpxI1uaSBTZXpuYW08L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJOQVZJR0FUSU9OX01PREVfTEFCRUxfR3JpZCI+RHZvZGltZW56aW9uYWxuYSBNcmXFvmE8L3N0cmluZz4KKworICA8c3RyaW5nIG5hbWU9IlNQRUVDSF9TVVBQT1JUX0xBQkVMX25hdGl2ZSI+TmFyYXZuYTwvc3RyaW5nPgorCisgIDxzdHJpbmcgbmFtZT0iQ09NTVVOSUNBVElPTl9NRVRIT0RfTEFCRUxfQmx1ZXRvb3RoIj5CbHVldG9vdGg8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJDT01NVU5JQ0FUSU9OX01FVEhPRF9MQUJFTF9Vc2IiPlVTQjwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkNPTU1VTklDQVRJT05fTUVUSE9EX0xBQkVMX1NlcmlhbCI+U2VyaWFsPC9zdHJpbmc+CisKKyAgPHN0cmluZyBuYW1lPSJMT0dfTEVWRUxfTEFCRUxfZGVidWciPlJhemhyb8WhxI1ldmFuamU8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJMT0dfTEVWRUxfTEFCRUxfaW5mb3JtYXRpb24iPkluZm9ybWFjaWplPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iTE9HX0xFVkVMX0xBQkVMX25vdGljZSI+U3Bvcm/EjWlsbzwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkxPR19MRVZFTF9MQUJFTF93YXJuaW5nIj5PcG96b3JpbG88L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJMT0dfTEVWRUxfTEFCRUxfZXJyb3IiPk5hcGFrYTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkxPR19MRVZFTF9MQUJFTF9jcml0aWNhbCI+S3JpdGnEjW5vPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iTE9HX0xFVkVMX0xBQkVMX2FsZXJ0Ij5BbGFybTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkxPR19MRVZFTF9MQUJFTF9lbWVyZ2VuY3kiPlYgc2lsaTwvc3RyaW5nPgorCisgIDxzdHJpbmcgbmFtZT0iTE9HX0NBVEVHT1JZX0xBQkVMX2lucGt0cyI+Vm5vc25hIFBvbGphPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iTE9HX0NBVEVHT1JZX0xBQkVMX291dHBrdHMiPkl6aG9kbmEgUG9samE8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJMT0dfQ0FURUdPUllfTEFCRUxfYnJsa2V5cyI+RG9nb2RraSB2IFp2ZXppIHMgVGlwa2FtaSBOYSBCcmFqZXZpIE5hcHJhdmk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJMT0dfQ0FURUdPUllfTEFCRUxfa2Jka2V5cyI+RG9nb2RraSB2IFp2ZXppIHMgVGlwa2FtaSBuYSBUaXBrb3ZuaWNpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iTE9HX0NBVEVHT1JZX0xBQkVMX2NzcnRyayI+U3ByZW1samFuamUgVXRyaXBhbGtlPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iTE9HX0NBVEVHT1JZX0xBQkVMX2NzcnJ0ZyI+S2xpY2FuamUgVXRyaXBhbGtlPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iTE9HX0NBVEVHT1JZX0xBQkVMX3VwZGF0ZSI+RG9nb2RraSBQb3NvZG9iaXRldjwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkxPR19DQVRFR09SWV9MQUJFTF9zcGVlY2giPkdvdm9ybmkgRG9nb2RraTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkxPR19DQVRFR09SWV9MQUJFTF9hc3luYyI+QXNpbmhyb25pIERvZ29ka2k8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJMT0dfQ0FURUdPUllfTEFCRUxfc2VydmVyIj5Eb2dvZGtpIFN0cmXFvm5pa2E8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJMT0dfQ0FURUdPUllfTEFCRUxfZ2lvIj5zcGxvxaFuaSBWL0k8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJMT0dfQ0FURUdPUllfTEFCRUxfc2VyaWFsIj5TZXJpanNraSBWL0k8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJMT0dfQ0FURUdPUllfTEFCRUxfdXNiIj5VU0IgVi9JPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iTE9HX0NBVEVHT1JZX0xBQkVMX2J0Ij5CbHVldG9vdGggVi9JPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iTE9HX0NBVEVHT1JZX0xBQkVMX2hpZCI+SHVtYW4gVm1lc25payBWL0k8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJMT0dfQ0FURUdPUllfTEFCRUxfYnJsZHJ2Ij5Eb2dvZGtpIEdvbmlsbmlrYSB6YSBCcmFqaWNvPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iTE9HX0NBVEVHT1JZX0xBQkVMX3Nwa2RydiI+RG9nb2RraSBHb25pbG5pa2EgR292b3JhPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iTE9HX0NBVEVHT1JZX0xBQkVMX3NjcmRydiI+RG9nb2RraSBaYXNsb25za2VnYSBHb25pbG5pa2E8L3N0cmluZz4KKworICA8c3RyaW5nIG5hbWU9IkJSQUlMTEVfRFJJVkVSX0xBQkVMX2F1dG8iPnNhbW9kZWpuYSBwcmVwb3puYXZhPC9zdHJpbmc+CisKKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX2F1dG8iPmxvY2FsZS1iYXNlZCBzYW1vZGVqbmEgaXpiaXJhPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9hciI+QXJhYnNrYSAoZ2VuZXJpxI1uYSk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX2FzIj5Bc2FtZcWha2E8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX2F3YSI+QXdhZGhpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9iZyI+Qm9sZ2Fyc2thPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9iaCI+QmloYXJpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9ibiI+QmVuZ2Fsc2thPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9ibyI+VGliZXRhbnNrYTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfYnJhIj5CcmFqPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9icmYiPnphIEJyYWpldiBJenBpcyBQcmlwcmF2bGplbmEgT2JsaWthIChOYW1lbmplbmEgUHJlZ2xlZG92YW5qdSAuYnJmIGRhdG90ZWsgdiB1cmVqZXZhbG5pa3UgYWxpIHByZWdsZWRvdmFsbmlrdSk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX2NzIj7EjGXFoWthPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9jeSI+VmFsacW+YW5za2E8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX2RhIj5EYW5za2E8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX2RhXzEyNTIiPkRhbnNrYSAoU3ZlbmQgVGhvdWdhYXJkLCAyMDAy4oCTMTHigJMxOCk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX2RhX2x0Ij5EYW5za2EgKExvZ1RleHQpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9kZSI+TmVtxaFrYTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfZHJhIj5EcmF2aWRza2E8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX2VsIj5HcsWha2E8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX2VuIj5BbmdsZcWha2E8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX2VuX0NBIj5BbmdsZcWha2EgKEthbmFkYSk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX2VuX0dCIj5BbmdsZcWha2EgKFpkcnXFvmVubyBLcmFsamVzdHZvKTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfZW5fbmFiY2MiPkFuZ2xlxaFrYSAoU2V2ZXJub0FtZXJpxaFrYSBCcmFqZXZhIFJhxI11bmFsbmnFoWthIEtvZGEpKTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfZW5fVVMiPkFuZ2xlxaFrYSAoWmRydcW+ZW5lIERyxb5hdmUpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9lbyI+RXNwZXJhbnRvPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9lcyI+xaBwYW5za2E8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX2V0Ij5Fc3RvbnNrYTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfZmkiPkZpbm5za2E8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX2ZyIj5GcmFuY29za2E8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX2ZyXzIwMDciPkZyYW5jb3NrYSAoemRydcW+ZW5hIDIwMDcpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9mcl9DQSI+RnJhbmNvc2thIChLYW5hZGEpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9mcl9jYmlmcyI+RnJhbmNvc2thIChTdGFuZGFyZG5hIEZyYW5jb3NrYSBCcmFqZXZhIFJhxI11bmFsbmnFoWthIEtvZGEpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9mcl9GUiI+RnJhbmNvc2thKEZyYW5jaWphKTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfZnJfdnMiPkZyZW5jaCAoVmlzaW9CcmFpbGxlKTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfZ2EiPklyc2thPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9nZCI+R2Fsc2thPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9nb24iPkdvbmRpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9ndSI+R3VqYXJhdGk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX2hlIj5IZWJyZWpza2E8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX2hpIj5IaW5kdWpza2E8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX2hyIj5IcnZhxaFrYTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfaHUiPk1hZMW+YXJza2E8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX2h5Ij5Bcm1lbnNrYTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfaXMiPklzbGFuZHNrYTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfaXQiPkl0YWxpamFuc2thPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9raGEiPktoYXNpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9rbiI+S2FubmFkYTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfa29rIj5Lb25rYW5pPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9rcnUiPkt1cnVraDwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfbHQiPkxpdG92c2thPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9sdiI+TGF0dmlqc2thPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9tZyI+TWFsYWdhxaFrYTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfbWkiPk1hb3JpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9tbCI+TWFsYWpza2E8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX21uaSI+TWFuaXB1cmlqc2thPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9tciI+TWFyYXRoaTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfbXQiPk1hbHRlxaFrYTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfbXVuIj5NdW5kYTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfbXdyIj5NYXJ3YXJpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9uZSI+TmVwYWxza2E8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX25ldyI+TmV3YXJpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9ubCI+Tml6b3plbXNrYTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfbmxfQkUiPk5pem96ZW1za2EgKEJlbGdpanNrYSk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX25sX05MIj5OaXpvemVtc2thIChOaXpvemVtc2thKTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfbm8iPk5vcnZlxaFrYTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfbm9fZ2VuZXJpYyI+Tm9ydmXFoWthIChzIHBvZHBvcm8gemEgZHJ1Z2UgamV6aWtlKTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfbm9fb3VwIj5Ob3J2ZcWha2EgKE9mZmVudGxpZyB1dHZhbGcgZm9yIHB1bmt0c2tyaWZ0KTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfbndjIj5OZXdhcmkgKG9sZCk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX29yIj5Pcml5YTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfcGEiPlBhbmphYmk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX3BpIj5QYWxpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9wbCI+UG9sanNrYTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfcHQiPlBvcnR1Z2Fsc2thPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9ybyI+Um9tdW5za2E8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX3J1Ij5SdXNrYTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfc2EiPlNhbnNrcml0PC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9zYXQiPlNhbnRhbGk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX3NkIj5TaW5kaGk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX3NlIj5TYW1pasWhxI1pbmEgKFNldmVybmEpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9zayI+U2xvdmHFoWthPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9zbCI+U2xvdmVuxaHEjWluYTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfc3YiPsWgdmVkc2thPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9zdl8xOTg5Ij7FoHZlZHNrYSAoMTk4OSBzdGFuZGFyZCk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX3N2XzE5OTYiPsWgdmVkc2thICgxOTk2IHN0YW5kYXJkKTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfc3ciPlN3YWhpbGk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX3RhIj5UYW1pbDwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfdGUiPlRlbHVndTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfdHIiPlR1csWha2E8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX3VrIj5Va3Jhamluc2thPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF92aSI+VmlqZXRuYW1za2E8L3N0cmluZz4KKworICA8c3RyaW5nIG5hbWU9IkFUVFJJQlVURVNfVEFCTEVfTEFCRUxfaW52bGVmdF9yaWdodCI+T2JybmkgYmFydm8gb3NwcmVkamEgdiBsZXZlbSBzdG9scGN1IGluIGJhcnZvIG96YWRqYSB2IGRlc25lbSBzdG9scGN1PC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iQVRUUklCVVRFU19UQUJMRV9MQUJFTF9sZWZ0X3JpZ2h0Ij5iYXJ2YSBvc3ByZWRqYSAoxI1ya2UgaW4gZHJ1Z28pIHYgbGV2ZW0gc3RvbHBjdSBpbiBiYXJ2YSBvemFkamEgdiBkZXNuZW0gc3RvbHBjdTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkFUVFJJQlVURVNfVEFCTEVfTEFCRUxfdXBwZXJfbG93ZXIiPmJhcnZhIG9zcHJlZGphIHYgemdvcm5qZW0gcHJvc3RvcnUgaW4gYmFydmEgb3phZGphIHYgc3BvZG5qZW0gcHJvc3RvcnU8L3N0cmluZz4KKworICA8c3RyaW5nIG5hbWU9IkNPTlRSQUNUSU9OX1RBQkxFX0xBQkVMX2F1dG8iPmxvY2FsZS1iYXNlZCBzYW1vZGVqbmEgaXpiaXJhPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iQ09OVFJBQ1RJT05fVEFCTEVfTEFCRUxfYWYiPkFmcmlrYW5za2EgKHMga3JhasWhYXZhbWkpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iQ09OVFJBQ1RJT05fVEFCTEVfTEFCRUxfYW0iPkFtaGFyaWpza2EgKGJyZXoga3JhasWhYXYpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iQ09OVFJBQ1RJT05fVEFCTEVfTEFCRUxfZGUiPk5lbcWha2E8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJDT05UUkFDVElPTl9UQUJMRV9MQUJFTF9kZV9nMCI+TmVtxaFrYSAoYnJleiBrcmFqxaFhdik8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJDT05UUkFDVElPTl9UQUJMRV9MQUJFTF9kZV9nMSI+TmVtxaFrYSAob3Nub3ZuZSBrcmFqxaFhdmUpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iQ09OVFJBQ1RJT05fVEFCTEVfTEFCRUxfZGVfZzIiPk5lbcWha2EgKHMga3JhasWhYXZhbWkpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iQ09OVFJBQ1RJT05fVEFCTEVfTEFCRUxfZGVfMTk5OCI+TmVtxaFrYSAocyBrcmFqxaFhdmFtaSAtIDE5OTggc3RhbmRhcmQpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iQ09OVFJBQ1RJT05fVEFCTEVfTEFCRUxfZGVfMjAxNSI+TmVtxaFrYSAocyBrcmFqxaFhdmFtaSAtIDIwMTUgc3RhbmRhcmQpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iQ09OVFJBQ1RJT05fVEFCTEVfTEFCRUxfZW4iPkFuZ2xlxaFrYTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkNPTlRSQUNUSU9OX1RBQkxFX0xBQkVMX2VuX1VTIj5BbmdsZcWha2EgKFpkcnXFvmVuZSBEcsW+YXZlKTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkNPTlRSQUNUSU9OX1RBQkxFX0xBQkVMX2VuX3VlYl9nMSI+QW5nbGXFoWthIChaZHJ1xb5lbmEsIGJyZXoga3I8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJDT05UUkFDVElPTl9UQUJMRV9MQUJFTF9lbl91ZWJfZzIiPkFuZ2xlxaFrYSAoWmRydcW+ZW5hIEFuZ2xlxaFrYSByYXp2cnN0aXRldiAyKTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkNPTlRSQUNUSU9OX1RBQkxFX0xBQkVMX2VuX3VzX2cyIj5FbmdsaXNoIChaREEsIHJhenZyc3RpdGV2IDIpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iQ09OVFJBQ1RJT05fVEFCTEVfTEFCRUxfZXMiPsWgcGFuc2thKHJhenZyc3RpdGV2IDIpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iQ09OVFJBQ1RJT05fVEFCTEVfTEFCRUxfZnIiPkZyYW5jb3NrYTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkNPTlRSQUNUSU9OX1RBQkxFX0xBQkVMX2ZyX2cxIj5GcmFuY29za2EgKGJyZXoga3JhasWhYXYpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iQ09OVFJBQ1RJT05fVEFCTEVfTEFCRUxfZnJfZzIiPkZyYW5jb3NrYShzIGtyYWrFoWF2YW1pKTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkNPTlRSQUNUSU9OX1RBQkxFX0xBQkVMX2hhIj5IYXVzYSAocyBrcmFqxaFhdmFtaSk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJDT05UUkFDVElPTl9UQUJMRV9MQUJFTF9pZCI+SW5kb25lemlqc2thKHMga3JhasWhYXZhbWkpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iQ09OVFJBQ1RJT05fVEFCTEVfTEFCRUxfaXBhIj5NZWRuYXJvZG5hIEZvbmV0acSNbmEgQWJlY2VkYTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkNPTlRSQUNUSU9OX1RBQkxFX0xBQkVMX2phIj5KYXBvbnNrYShicmV6IGtyYWrFoWF2KTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkNPTlRSQUNUSU9OX1RBQkxFX0xBQkVMX2tvIj5Lb3JlanNrYTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkNPTlRSQUNUSU9OX1RBQkxFX0xBQkVMX2tvX2cwIj5Lb3JlanNrYSAoYnJleiBrcmFqxaFhdik8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJDT05UUkFDVElPTl9UQUJMRV9MQUJFTF9rb19nMSI+S29yZWpza2EgKHJhenZyc3RpdGV2IDEpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iQ09OVFJBQ1RJT05fVEFCTEVfTEFCRUxfa29fZzIiPktvcmVqc2thIChyYXp2cnN0aXRldiAyKTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkNPTlRSQUNUSU9OX1RBQkxFX0xBQkVMX2x0Ij5MZXRvbnNrYSAobmVza3JhasWhYW5hKTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkNPTlRSQUNUSU9OX1RBQkxFX0xBQkVMX21nIj5NYWxhZ2FzeSAocyBrcmFqxaFhdmFtaSk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJDT05UUkFDVElPTl9UQUJMRV9MQUJFTF9tdW4iPk11bmRhIChzIGtyYWrFoWF2YW1pKTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkNPTlRSQUNUSU9OX1RBQkxFX0xBQkVMX25sIj5OaXpvemVtc2thKHMga3JhasWhYXZhbWkpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iQ09OVFJBQ1RJT05fVEFCTEVfTEFCRUxfbnkiPkNoaWNoZXdhIChzIGtyYWrFoWF2YW1pKTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkNPTlRSQUNUSU9OX1RBQkxFX0xBQkVMX3B0Ij5Qb3J0dWdhbHNrYSAocmF6dnJzdGl0ZXYgMik8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJDT05UUkFDVElPTl9UQUJMRV9MQUJFTF9ydSI+UnVza2EgKHNrcmFqxaFhbmEpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iQ09OVFJBQ1RJT05fVEFCTEVfTEFCRUxfc2kiPlNpbmhhbHNrYShicmV6IGtyYWrFoWF2KTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkNPTlRSQUNUSU9OX1RBQkxFX0xBQkVMX3N3Ij5Td2FoaWxpIChzIGtyYWrFoWF2YW1pKTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkNPTlRSQUNUSU9OX1RBQkxFX0xBQkVMX3RoIj5UYWpza2EocyBrcmFqxaFhdmFtaSk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJDT05UUkFDVElPTl9UQUJMRV9MQUJFTF96aF9UVyI+S2l0YWpza2EgKFRhanZhbiwgYnJleiBrcmFqxaFhdik8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJDT05UUkFDVElPTl9UQUJMRV9MQUJFTF96dSI+WnVsdSAocyBrcmFqxaFhdmFtaSk8L3N0cmluZz4KKworICA8c3RyaW5nIG5hbWU9IktFWUJPQVJEX1RBQkxFX0xBQkVMX2JyYWlsbGUiPmJsacW+bmppY2UgemEgYnJhamV2ZSB0aXBrb3ZuaWNlPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iS0VZQk9BUkRfVEFCTEVfTEFCRUxfZGVza3RvcCI+Ymxpxb5uamljZSB6YSBwb2xuZSB0aXBrb3ZuaWNlPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iS0VZQk9BUkRfVEFCTEVfTEFCRUxfa2V5cGFkIj5ibGnFvm5qaWNlIHphIGtybWFyamVuamUga2kgYmF6aXJhIG5hIMWhdGV2aWxza2loIHRpcGtvdm5pY2FoPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iS0VZQk9BUkRfVEFCTEVfTEFCRUxfbGFwdG9wIj5ibGnFvm5qaWNlIHphIHRpcGtvdm5pY2UgYnJleiDFoXRldmlsc2tlZ2EgZGVsYTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IktFWUJPQVJEX1RBQkxFX0xBQkVMX3N1bl90eXBlNiI+Ymxpxb5uamljZSB6YSBTdW4gVHlwZSA2IHRpcGtvdm5pY2U8L3N0cmluZz4KKzwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvQW5kcm9pZC9HcmFkbGUvYXBwL3NyYy9tYWluL3Jlcy92YWx1ZXMtdHIvc3RyaW5ncy54bWwgYi9BbmRyb2lkL0dyYWRsZS9hcHAvc3JjL21haW4vcmVzL3ZhbHVlcy10ci9zdHJpbmdzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42Y2FkZTM0Ci0tLSAvZGV2L251bGwKKysrIGIvQW5kcm9pZC9HcmFkbGUvYXBwL3NyYy9tYWluL3Jlcy92YWx1ZXMtdHIvc3RyaW5ncy54bWwKQEAgLTAsMCArMSwyODggQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+CisKKzxyZXNvdXJjZXM+CisgIDxzdHJpbmcgbmFtZT0iYXBwX2Rlc2NyaXB0aW9uIj5CUkxUVFkgYnJhaWxsZSBjaWhhemxhcsSxIGRlc3Rla2xlci48L3N0cmluZz4KKworICA8c3RyaW5nIG5hbWU9InVzYk1vbml0b3JfbGFiZWwiPkVrbGVuZW4gVVNCIGNpaGF6IGl6bGVtZXNpPC9zdHJpbmc+CisKKyAgPHN0cmluZyBuYW1lPSJhYm91dF9sYWJlbF9hY3Rpdml0eSI+VXlndWxhbWEgaGFra8SxbmRhPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iYWJvdXRfbGFiZWxfY29weXJpZ2h0Ij5UZWxpZiBoYWtrxLE8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJhYm91dF9sYWJlbF9idWlsZFRpbWUiPllhcMSxbSB6YW1hbsSxPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iYWJvdXRfbGFiZWxfc291cmNlUmV2aXNpb24iPktheW5hayBSZXZpenlvbnU8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJhYm91dF9sYWJlbF9wcml2YWN5UG9saWN5Ij5HaXpsaWxpayBQb2xpdGlrYXPEsTwvc3RyaW5nPgorCisgIDxzdHJpbmcgbmFtZT0iaW5wdXRTZXJ2aWNlX25hbWUiPkJSTFRUWSBHaXJkaSBIaXptZXRpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iaW5wdXRTZXJ2aWNlX3R5cGUiPkJyYWlsbGUgY2loYXogS2xhdnllbGVyaTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9ImlucHV0U2VydmljZV9ub3RfZW5hYmxlZCI+R2lyZGkgaGl6bWV0aSBldGtpbmxlxZ90aXJpbG1lZGk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJpbnB1dFNlcnZpY2Vfbm90X3NlbGVjdGVkIj5HaXJkaSBoaXptZXRpIHNlw6dpbG1lZGk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJpbnB1dFNlcnZpY2Vfbm90X3N0YXJ0ZWQiPkdpcmRpIGhpem1ldGkgYmHFn2xhdMSxbG1hZMSxPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iaW5wdXRTZXJ2aWNlX25vdF9jb25uZWN0ZWQiPkdpcmRpIGhpem1ldGkgYmHEn2zEsSBkZcSfaWw8L3N0cmluZz4KKworICA8c3RyaW5nIG5hbWU9InVwZGF0ZUFwcGxpY2F0aW9uX3Byb2JsZW1fZmFpbGVkIj5VeWd1bGFtYSBnw7xuY2VsbGVuZW1lZGk8L3N0cmluZz4KKworICA8c3RyaW5nIG5hbWU9InBhY2thZ2VJbnN0YWxsZXJfcHJvYmxlbV9mYWlsZWQiPlBha2V0IGt1cnVsYW1hZMSxPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0icGFja2FnZUluc3RhbGxlcl9wcm9ibGVtX3NhbWUiPkF5bsSxIHPDvHLDvG08L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJwYWNrYWdlSW5zdGFsbGVyX3Byb2JsZW1fZG93bmdyYWRlIj5Tw7xyw7xtIGTDvMWfw7xybWV5ZSBpemluIHZlcmlsbWVtZWt0ZWRpcjwvc3RyaW5nPgorCisgIDxzdHJpbmcgbmFtZT0iZmlsZURvd25sb2FkZXJfdGl0bGUiPkJSTFRUWSBkb3N5YSBpbmRpcmljaTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9ImZpbGVEb3dubG9hZGVyX3Byb2JsZW1fZmFpbGVkIj5Eb3N5YSBpbmRpcmlsZW1lZGk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJmaWxlRG93bmxvYWRlcl9zdGF0ZV9jb25uZWN0aW5nIj5iYcSfbGFuxLF5b3I8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJmaWxlRG93bmxvYWRlcl9zdGF0ZV9kb3dubG9hZGluZyI+aW5kaXJpbGl5b3I8L3N0cmluZz4KKworICA8c3RyaW5nIG5hbWU9InNldHRpbmdfc3RhdGVfb2ZmIj5LYXBhbMSxPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iY2hlY2tib3hfc3RhdGVfdW5jaGVja2VkIj5IYXnEsXI8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJjaGVja2JveF9zdGF0ZV9jaGVja2VkIj5FdmV0PC9zdHJpbmc+CisKKyAgPHN0cmluZyBuYW1lPSJicmFpbGxlX2NoYW5uZWxfbmFtZSI+QnJhaWxsZSBDaWhheiBEdXJ1bXU8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJicmFpbGxlX2hpbnRfdGFwIj5FeWxlbWxlciBpw6dpbiBkb2t1bnVuPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iYnJhaWxsZV9zdGF0ZV9yZWxlYXNlZCI+QmHEn2zEsSBkZcSfaWw8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJicmFpbGxlX3N0YXRlX3dhaXRpbmciPkJla2xlbml5b3I8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJicmFpbGxlX3N0YXRlX2Nvbm5lY3RlZCI+QmHEn2zEsTwvc3RyaW5nPgorCisgIDxzdHJpbmcgbmFtZT0iR0xPQkFMX0JVVFRPTl9OT1RJRklDQVRJT05TIj5CaWxkaXJpbWxlcjwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkdMT0JBTF9CVVRUT05fUVVJQ0tfU0VUVElOR1MiPkjEsXpsxLEgYXlhcmxhcjwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkdMT0JBTF9CVVRUT05fQkFDSyI+R2VyaTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkdMT0JBTF9CVVRUT05fSE9NRSI+QW5hIHNheWZhPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iR0xPQkFMX0JVVFRPTl9SRUNFTlRfQVBQUyI+U29uIHV5Z3VsYW1hbGFyPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iR0xPQkFMX0JVVFRPTl9PVkVSVklFVyI+R2VuZWwgYmFrxLHFnzwvc3RyaW5nPgorCisgIDxzdHJpbmcgbmFtZT0iR0xPQkFMX0JVVFRPTl9TV0lUQ0hfSU5QVVRfTUVUSE9EIj5HaXJkaSB5w7ZudGVtaW5pIGRlxJ9pxZ90aXI8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJHTE9CQUxfQlVUVE9OX1ZJRVdfVVNFUl9HVUlERSI+S3VsbGFuxLFjxLEga8SxbGF2dXp1bnUgZ8O2csO8bnTDvGxlPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iR0xPQkFMX0JVVFRPTl9CUk9XU0VfV0VCX1NJVEUiPldlYiBzYXlmYXPEsW5hIGdpdDwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkdMT0JBTF9CVVRUT05fQlJPV1NFX0NPTU1VTklUWV9NRVNTQUdFUyI+VG9wbHVsdWsgbWVzYWpsYXLEsW5hIGfDtnphdDwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkdMT0JBTF9CVVRUT05fUE9TVF9DT01NVU5JVFlfTUVTU0FHRSI+VG9wbHVsdWsgbWVzYWrEsSB5YXnEsW5sYTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkdMT0JBTF9CVVRUT05fTUFOQUdFX0NPTU1VTklUWV9NRU1CRVJTSElQIj5Ub3BsdWx1ayDDvHllbGnEn2luaSB5w7ZuZXQ8L3N0cmluZz4KKworICA8c3RyaW5nIG5hbWU9IkdMT0JBTF9CVVRUT05fVVBEQVRFX0FQUExJQ0FUSU9OIj5VeWd1bGFtYXnEsSBnw7xuY2VsbGU8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJHTE9CQUxfQ0hFQ0tCT1hfREVWRUxPUEVSX0JVSUxEIj5HZWxpxZ90aXJpY2kgc8O8csO8bcO8PC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iR0xPQkFMX0NIRUNLQk9YX0FMTE9XX0RPV05HUkFERSI+U8O8csO8bSBkw7zFn8O8cm1leWUgaXppbiB2ZXI8L3N0cmluZz4KKworICA8c3RyaW5nIG5hbWU9IkNIT09TRVJfVElUTEVfQUNDRVNTSUJJTElUWV9BQ1RJT05TIj5FcmnFn2lsZWJpbGlybGlrIGV5bGVtbGVyaTwvc3RyaW5nPgorCisgIDxzdHJpbmcgbmFtZT0iU0VUVElOR1NfU0NSRUVOX01BSU4iPkJSTFRUWSBBeWFybGFyxLE8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJTRVRUSU5HU19TQ1JFRU5fR0VORVJBTCI+R2VuZWwgQXlhcmxhcjwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlNFVFRJTkdTX1NDUkVFTl9NRVNTQUdFIj5NZXNhaiBBeWFybGFyxLE8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJTRVRUSU5HU19TQ1JFRU5fREVWSUNFUyI+Q2loYXpsYXLEsSBZw7ZuZXQ8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJTRVRUSU5HU19TQ1JFRU5fQURWQU5DRUQiPkdlbGnFn21pxZ8gQXlhcmxhcjwvc3RyaW5nPgorCisgIDxzdHJpbmcgbmFtZT0iU0VUVElOR1NfQ0hFQ0tCT1hfUkVMRUFTRV9CUkFJTExFX0RFVklDRSI+QnJhaWxsZSBDaWhheiBCYcSfbGFudMSxc8SxbsSxIEtlczwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlNFVFRJTkdTX0JVVFRPTl9OQVZJR0FUSU9OX01PREUiPkRvbGHFn8SxbSBNb2R1PC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iU0VUVElOR1NfQlVUVE9OX1NQRUVDSF9TVVBQT1JUIj5Lb251xZ9tYSBEZXN0ZcSfaTwvc3RyaW5nPgorCisgIDxzdHJpbmcgbmFtZT0iU0VUVElOR1NfQlVUVE9OX1RFWFRfVEFCTEUiPk1ldGluIFRhYmxvc3U8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJTRVRUSU5HU19CVVRUT05fQVRUUklCVVRFU19UQUJMRSI+w5Z6bml0ZWxpayBUYWJsb3N1PC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iU0VUVElOR1NfQlVUVE9OX0NPTlRSQUNUSU9OX1RBQkxFIj5LxLFzYWx0bWEgVGFibG9zdTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlNFVFRJTkdTX0JVVFRPTl9LRVlCT0FSRF9UQUJMRSI+S2xhdnllIFRhYmxvc3U8L3N0cmluZz4KKworICA8c3RyaW5nIG5hbWU9IlNFVFRJTkdTX0NIRUNLQk9YX1NIT1dfQUxFUlRTIj5VeWFyxLFsYXLEsSBHw7ZzdGVyPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iU0VUVElOR1NfQ0hFQ0tCT1hfU0hPV19BTk5PVU5DRU1FTlRTIj5EdXl1cnVsYXLEsSBHw7ZzdGVyPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iU0VUVElOR1NfQ0hFQ0tCT1hfU0hPV19OT1RJRklDQVRJT05TIj5CaWxkaXJpbWxlcmkgR8O2c3Rlcjwvc3RyaW5nPgorCisgIDxzdHJpbmcgbmFtZT0iU0VUVElOR1NfQlVUVE9OX0xPR19MRVZFTCI+R8O8bmzDvGsgT2x1xZ90dXJtYSBEw7x6ZXlpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iU0VUVElOR1NfQlVUVE9OX0xPR19DQVRFR09SSUVTIj5Hw7xubMO8ayBPbHXFn3R1cm1hIEthdGVnb3JpbGVyaTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlNFVFRJTkdTX0NIRUNLQk9YX0xPR19BQ0NFU1NJQklMSVRZX0VWRU5UUyI+RXJpxZ9pbGViaWxpcmxpayBFdGtpbmxpa2xlcmluaSBHw7xubMO8ayBEb3N5YXPEsW5hIEtheWRldDwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlNFVFRJTkdTX0NIRUNLQk9YX0xPR19SRU5ERVJFRF9TQ1JFRU4iPkTDtm7DvMWfdMO8csO8bGVuIEVrcmFuxLEgR8O8bmzDvGsgRG9zeWFzxLFuYSBLYXlkZXQ8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJTRVRUSU5HU19DSEVDS0JPWF9MT0dfS0VZQk9BUkRfRVZFTlRTIj5LbGF2eWUgRXRraW5saWtsZXJpbmkgR8O8bmzDvGsgRG9zeWFzxLFuYSBLYXlkZXQ8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJTRVRUSU5HU19DSEVDS0JPWF9MT0dfVU5IQU5ETEVEX0VWRU5UUyI+xLDFn2xlbmVtZXllbiBFdGtpbmxpa2xlcmkgR8O8bmzDvGsgRG9zeWFzxLFuYSBLYXlkZXQ8L3N0cmluZz4KKworICA8c3RyaW5nIG5hbWU9IkRFVklDRVNfQlVUVE9OX1NFTEVDVEVEIj5TZcOnaWxpIENpaGF6PC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iREVWSUNFU19CVVRUT05fQUREIj5DaWhheiBFa2xlPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iREVWSUNFU19CVVRUT05fUkVNT1ZFIj5DaWhhesSxIEthbGTEsXI8L3N0cmluZz4KKworICA8c3RyaW5nIG5hbWU9IlNFTEVDVEVEX0RFVklDRV9OT05FIj5TZcOnaWxpIENpaGF6IFlvazwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlNFTEVDVEVEX0RFVklDRV9VTlNFTEVDVEVEIj5DaWhheiBTZcOnaWxpIERlxJ9pbDwvc3RyaW5nPgorCisgIDxzdHJpbmcgbmFtZT0iQUREX0RFVklDRV9OQU1FIj5DaWhheiBBZMSxPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iQUREX0RFVklDRV9NRVRIT0QiPkJhxJ9sYW50xLEgWcO2bnRlbWk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJBRERfREVWSUNFX1NFTEVDVCI+Q2loYXogU2XDpzwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkFERF9ERVZJQ0VfRFJJVkVSIj5CcmFpbGxlIFPDvHLDvGPDvHPDvDwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkFERF9ERVZJQ0VfRE9ORSI+VGFtYW1sYW5kxLE8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJBRERfREVWSUNFX1VOU0VMRUNURURfTUVUSE9EIj5CYcSfbGFudMSxIHnDtm50ZW1pIHNlw6dpbG1lZGk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJBRERfREVWSUNFX1VOU0VMRUNURURfREVWSUNFIj5DaWhheiBzZcOnaWxtZWRpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iQUREX0RFVklDRV9VTlNFTEVDVEVEX0RSSVZFUiI+YnJhaWxsZSBzw7xyw7xjw7xzw7wgc2XDp2lsbWVkaTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkFERF9ERVZJQ0VfTk9fREVWSUNFUyI+Q2loYXogYnVsdW5hbWFkxLE8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJBRERfREVWSUNFX0RVUExJQ0FURV9OQU1FIj5DaWhheiBhZMSxIHphdGVuIGt1bGxhbsSxbMSxeW9yPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iQUREX0RFVklDRV9OT19QRVJNSVNTSU9OIj5DaWhhemEgZXJpxZ9pbSBpem5pIHZlcmlsbWVtacWfPC9zdHJpbmc+CisKKyAgPHN0cmluZyBuYW1lPSJSRU1PVkVfREVWSUNFX1BST01QVCI+QnUgY2loYXrEsSBnZXLDp2VrdGVuIGthbGTEsXJtYWsgaXN0aXlvciBtdXN1bnV6Pzwvc3RyaW5nPgorCisgIDxzdHJpbmcgbmFtZT0iU0VUX1NFTEVDVElPTl9OT05FIj5oacOnYmlyaSBzZcOnaWxtZWRpPC9zdHJpbmc+CisKKyAgPHN0cmluZyBuYW1lPSJOQVZJR0FUSU9OX01PREVfTEFCRUxfTGlzdCI+RGlrZXkgTGlzdGU8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJOQVZJR0FUSU9OX01PREVfTEFCRUxfR3JpZCI+xLBraSBCb3l1dGx1IEvEsWxhdnV6PC9zdHJpbmc+CisKKyAgPHN0cmluZyBuYW1lPSJTUEVFQ0hfU1VQUE9SVF9MQUJFTF9uYXRpdmUiPlllcmVsPC9zdHJpbmc+CisKKyAgPHN0cmluZyBuYW1lPSJDT01NVU5JQ0FUSU9OX01FVEhPRF9MQUJFTF9CbHVldG9vdGgiPkJsdWV0b290aDwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkNPTU1VTklDQVRJT05fTUVUSE9EX0xBQkVMX1VzYiI+VVNCPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iQ09NTVVOSUNBVElPTl9NRVRIT0RfTEFCRUxfU2VyaWFsIj5TZXJpYWw8L3N0cmluZz4KKworICA8c3RyaW5nIG5hbWU9IkxPR19MRVZFTF9MQUJFTF9kZWJ1ZyI+SGF0YSBBecSxa2xhbWE8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJMT0dfTEVWRUxfTEFCRUxfaW5mb3JtYXRpb24iPkJpbGdpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iTE9HX0xFVkVMX0xBQkVMX25vdGljZSI+RHV5dXJ1PC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iTE9HX0xFVkVMX0xBQkVMX3dhcm5pbmciPlV5YXLEsTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkxPR19MRVZFTF9MQUJFTF9lcnJvciI+SGF0YTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkxPR19MRVZFTF9MQUJFTF9jcml0aWNhbCI+S3JpdGlrPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iTE9HX0xFVkVMX0xBQkVMX2FsZXJ0Ij5BY2lsIFV5YXLEsTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkxPR19MRVZFTF9MQUJFTF9lbWVyZ2VuY3kiPkFjaWwgRHVydW08L3N0cmluZz4KKworICA8c3RyaW5nIG5hbWU9IkxPR19DQVRFR09SWV9MQUJFTF9pbnBrdHMiPkdpcmRpIFBha2V0bGVyaTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkxPR19DQVRFR09SWV9MQUJFTF9vdXRwa3RzIj7Dh8Sxa3TEsSBQYWtldGxlcmk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJMT0dfQ0FURUdPUllfTEFCRUxfYnJsa2V5cyI+QnJhaWxsZSBDaWhheiBUdcWfIEV0a2lubGlrbGVyaTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkxPR19DQVRFR09SWV9MQUJFTF9rYmRrZXlzIj5LbGF2eWUgVHXFnyBFdGtpbmxpa2xlcmk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJMT0dfQ0FURUdPUllfTEFCRUxfY3NydHJrIj7EsG1sZcOnIMSwemxlbWU8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJMT0dfQ0FURUdPUllfTEFCRUxfY3NycnRnIj7EsG1sZcOnIFnDtm5sZW5kaXJtZTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkxPR19DQVRFR09SWV9MQUJFTF91cGRhdGUiPkV0a2lubGlrbGVyaSBHw7xuY2VsbGU8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJMT0dfQ0FURUdPUllfTEFCRUxfc3BlZWNoIj5Lb251xZ9tYSBFdGtpbmxpa2xlcmk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJMT0dfQ0FURUdPUllfTEFCRUxfYXN5bmMiPkFzeW5jIEV0a2lubGlrbGVyPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iTE9HX0NBVEVHT1JZX0xBQkVMX3NlcnZlciI+U3VudWN1IEV0a2lubGlrbGVyaTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkxPR19DQVRFR09SWV9MQUJFTF9naW8iPkdlbmVyaWMgSS9PPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iTE9HX0NBVEVHT1JZX0xBQkVMX3NlcmlhbCI+U2VyaWFsIEkvTzwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkxPR19DQVRFR09SWV9MQUJFTF91c2IiPlVTQiBJL088L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJMT0dfQ0FURUdPUllfTEFCRUxfYnQiPkJsdWV0b290aCBJL088L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJMT0dfQ0FURUdPUllfTEFCRUxfaGlkIj7EsG5zYW4gQXJhYmlyaW0gQ2loYXrEsSBJL088L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJMT0dfQ0FURUdPUllfTEFCRUxfYnJsZHJ2Ij5CcmFpbGxlIFPDvHLDvGPDvHPDvCBFdGtpbmxpa2xlcmk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJMT0dfQ0FURUdPUllfTEFCRUxfc3BrZHJ2Ij5Lb251xZ9tYSBTw7xyw7xjw7xzw7wgRXRraW5saWtsZXJpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iTE9HX0NBVEVHT1JZX0xBQkVMX3NjcmRydiI+RWtyYW4gU8O8csO8Y8O8c8O8IEV0a2lubGlrbGVyaTwvc3RyaW5nPgorCisgIDxzdHJpbmcgbmFtZT0iQlJBSUxMRV9EUklWRVJfTEFCRUxfYXV0byI+T3RvLWFsZ8SxbGE8L3N0cmluZz4KKworICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfYXV0byI+WWVyZWwgVGFiYW5sxLEgT3RvLXNlw6dpbTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfYXIiPkFyYXDDp2EgKGdlbmVsKTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfYXMiPkFzc2FtIGRpbGk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX2F3YSI+QXdhZGhpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9iZyI+QnVsZ2FyY2E8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX2JoIj5CaWhhcmk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX2JuIj5CZW5nYWxjZTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfYm8iPlRpYmV0w6dlPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9icmEiPkJyYWo8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX2JyZiI+SGF6xLFyIEJyYWlsbGUgRm9ybWF0xLEgQlJGICguZWRpdMO2cmRla2kgYnJmIGRvc3lhbGFyxLFuxLEgZ8O2csO8bnTDvGxlbWVrIGnDp2luKTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfY3MiPsOHZWvDp2U8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX2N5Ij5HYWxjZTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfZGEiPkRhbmNhPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9kYV8xMjUyIj5EYW5jYSAoU3ZlbmQgVGhvdWdhYXJkLCAyMDAy4oCTMTHigJMxOCk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX2RhX2x0Ij5EYW5jYSAoTG9nVGV4dCk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX2RlIj5BbG1hbmNhPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9kcmEiPkRyYXZpZCBEaWxpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9lbCI+WXVuYW5jYTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfZW4iPsSwbmdpbGl6Y2U8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX2VuX0NBIj7EsG5naWxpemNlIChLYW5hZGEpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9lbl9HQiI+xLBuZ2lsaXpjZSAoxLBuZ2lsdGVyZSk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX2VuX25hYmNjIj7EsG5naWxpemNlIChLdXpleSBBbWVyaWthIEJyYWlsbGUgQmlsZ2lzYXlhciBLb2R1KTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfZW5fVVMiPsSwbmdpbGl6Y2UgKEFtZXJpa2EgQmlybGXFn2lrIERldmxldGxlcmkpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9lbyI+RXNwZXJhbnRvPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9lcyI+xLBzcGFueW9sY2E8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX2V0Ij5Fc3RvbmNhPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9maSI+RmluY2U8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX2ZyIj5GcmFuc8SxemNhPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9mcl8yMDA3Ij5GcmFuc8SxemNhIChiaXJsZcWfaWsgMjAwNyk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX2ZyX0NBIj5GcmFuc8SxemNhIChrYW5hZGEpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9mcl9jYmlmcyI+RnJhbnPEsXpjYSAoQ29kZSBCcmFpbGxlIEluZm9ybWF0aXF1ZSBGcmFuw6dhaXMgU3RhbmRhcmQpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9mcl9GUiI+RnJhbnPEsXpjYSAoRnJhbnNhKTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfZnJfdnMiPkZyYW5zxLF6Y2EgKFZpc2lvQnJhaWxsZSk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX2dhIj7EsHJsYW5kYWNhPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9nZCI+xLBza2/DpyBHYWxjZXNpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9nb24iPkdvbmRpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9ndSI+R3VjZXJhdMOnYTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfaGUiPsSwYnJhbmljZTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfaGkiPkhpbnTDp2U8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX2hyIj5IxLFydmF0w6dhPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9odSI+TWFjYXJjYTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfaHkiPkVybWVuaWNlPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9pcyI+xLB6bGFuZGFjYTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfaXQiPkl0YWx5YW5jYTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfa2hhIj5LaGFzaTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfa24iPkthbm5hZGE8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX2tvayI+S29ua2FuaTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfa3J1Ij5LdXJ1a2g8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX2x0Ij5MaXR2YW5jYTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfbHYiPkxldG9uY2E8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX21nIj5NYWxhZ2FzeTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfbWkiPk1hb3JpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9tbCI+TWFsYXlhbGFtPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9tbmkiPk1hbmlwdXJpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9tciI+TWFyYXRoaTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfbXQiPk1hbHRhY2E8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX211biI+TXVuZGE8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX213ciI+TWFyd2FyaTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfbmUiPk5lcGFsY2U8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX25ldyI+TmV3YXJpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9ubCI+RmVsZW1lbmvDp2U8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX25sX0JFIj5GZWxlbWVua8OnZSAoQmVsw6dpa2EpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9ubF9OTCI+RmVsZW1lbmvDp2UgKEhvbGxhbmRhKTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfbm8iPk5vcnZlw6fDp2U8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX25vX2dlbmVyaWMiPk5vcnZlw6fDp2UgKGRpxJ9lciBkaWxsZXJpIGRlc3Rla2xleWVuKTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfbm9fb3VwIj5Ob3J2ZcOnw6dlIChPZmZlbnRsaWcgdXR2YWxnIGZvciBwdW5rdHNrcmlmdCk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX253YyI+TmV3YXJpIChlc2tpKTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfb3IiPk9yaXlhPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9wYSI+UGFuY2Fww6dhPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9waSI+UGFsaTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfcGwiPkxlaMOnZTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfcHQiPlBvcnRla2l6Y2U8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX3JvIj5Sb21lbmNlPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9ydSI+UnVzw6dhPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9zYSI+U2Fuc2tyaXTDp2U8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX3NhdCI+U2FudGFsaTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfc2QiPlNpbmRoaTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfc2UiPlNhbWljZSAoS3V6ZXkpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9zayI+U2xvdmFrw6dhPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9zbCI+U2xvdmVuY2U8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX3N2Ij7EsHN2ZcOnw6dlPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9zdl8xOTg5Ij7EsHN2ZcOnw6dlICgxOTg5IHN0YW5kYXJ0KTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfc3ZfMTk5NiI+xLBzdmXDp8OnZSAoMTk5NiBzdGFuZGFydCk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX3N3Ij5Td2FoaWxpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF90YSI+VGFtaWxjZTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfdGUiPlRlbHVndTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfdHIiPlTDvHJrw6dlPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF91ayI+VWtyYXluYWNhPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF92aSI+Vml5ZXRuYW1jYTwvc3RyaW5nPgorCisgIDxzdHJpbmcgbmFtZT0iQVRUUklCVVRFU19UQUJMRV9MQUJFTF9pbnZsZWZ0X3JpZ2h0Ij7Dlm4gcGxhbiByZW5rbGVyaSBzb2wgc8O8dHVuZGEgdmUgYXJrYSBwbGFuIHJlbmtsZXJpIHNhxJ8gc8O8dHVuZGEgdGVyczwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkFUVFJJQlVURVNfVEFCTEVfTEFCRUxfbGVmdF9yaWdodCI+w5ZuIHBsYW4gcmVua2xlcmkgc29sIHPDvHR1bmRhIHZlIGFya2EgcGxhbiByZW5rbGVyaSBzYcSfIHPDvHR1bmRhPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iQVRUUklCVVRFU19UQUJMRV9MQUJFTF91cHBlcl9sb3dlciI+w5ZuIHBsYW4gcmVua2xlcmkgw7xzdCBrxLFzxLFtZGEgdmUgYXJrYSBwbGFuIHJlbmtsZXJpIGFsdCBrxLFzxLFtZGE8L3N0cmluZz4KKworICA8c3RyaW5nIG5hbWU9IkNPTlRSQUNUSU9OX1RBQkxFX0xBQkVMX2F1dG8iPlllcmVsIG90by1zZcOnaW08L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJDT05UUkFDVElPTl9UQUJMRV9MQUJFTF9hZiI+QWZyaWthbmNhIChrxLFzYWx0bWFsxLEpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iQ09OVFJBQ1RJT05fVEFCTEVfTEFCRUxfYW0iPkFtaGFyY2EgKGvEsXNhbHRtYXPEsXopPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iQ09OVFJBQ1RJT05fVEFCTEVfTEFCRUxfZGUiPkFsbWFuY2E8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJDT05UUkFDVElPTl9UQUJMRV9MQUJFTF9kZV9nMCI+QWxtYW5jYSAoa8Sxc2FsdG1hc8Sxeik8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJDT05UUkFDVElPTl9UQUJMRV9MQUJFTF9kZV9nMSI+QWxtYW5jYSAodGVtZWwga8Sxc2FsdG1hbGFyKTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkNPTlRSQUNUSU9OX1RBQkxFX0xBQkVMX2RlX2cyIj5BbG1hbmNhIChrxLFzYWx0bWFsxLEpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iQ09OVFJBQ1RJT05fVEFCTEVfTEFCRUxfZGVfMTk5OCI+QWxtYW5jYSAoa8Sxc2FsdG1hbMSxIC0gMTk5OCBzdGFuZGFydCk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJDT05UUkFDVElPTl9UQUJMRV9MQUJFTF9kZV8yMDE1Ij5BbG1hbmNhIChrxLFzYWx0bWFsxLEgLSAyMDE1IHN0YW5kYXJ0KTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkNPTlRSQUNUSU9OX1RBQkxFX0xBQkVMX2VuIj7EsG5naWxpemNlPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iQ09OVFJBQ1RJT05fVEFCTEVfTEFCRUxfZW5fVVMiPsSwbmdpbGl6Y2UgKEFtZXJpa2EgQmlybGXFn2lrIERldmxldGxlcmkpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iQ09OVFJBQ1RJT05fVEFCTEVfTEFCRUxfZW5fdWViX2cxIj7EsG5naWxpemNlIChCaXJsZcWfbWnFnywga8Sxc2FsdG1hc8Sxeik8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJDT05UUkFDVElPTl9UQUJMRV9MQUJFTF9lbl91ZWJfZzIiPsSwbmdpbGl6Y2UgKEJpcmxlxZ9tacWfLCBrxLFzYWx0bWFsxLEpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iQ09OVFJBQ1RJT05fVEFCTEVfTEFCRUxfZW5fdXNfZzIiPsSwbmdpbGl6Y2UgKEFtZXJpa2EgQmlybGXFn2lrIERldmxldGxlcmksIGvEsXNhbHRtYWzEsSk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJDT05UUkFDVElPTl9UQUJMRV9MQUJFTF9lcyI+xLBzcGFueW9sY2EgKGvEsXNhbHRtYWzEsSk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJDT05UUkFDVElPTl9UQUJMRV9MQUJFTF9mciI+RnJhbnPEsXpjYTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkNPTlRSQUNUSU9OX1RBQkxFX0xBQkVMX2ZyX2cxIj5GcmFuc8SxemNhIChrxLFzYWx0bWFzxLF6KTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkNPTlRSQUNUSU9OX1RBQkxFX0xBQkVMX2ZyX2cyIj5GcmFuc8SxemNhIChrxLFzYWx0bWFsxLEpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iQ09OVFJBQ1RJT05fVEFCTEVfTEFCRUxfaGEiPkhhdXNhIChrxLFzYWx0bWFsxLEpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iQ09OVFJBQ1RJT05fVEFCTEVfTEFCRUxfaWQiPkVuZG9uZXp5YWNhIChrxLFzYWx0bWFsxLEpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iQ09OVFJBQ1RJT05fVEFCTEVfTEFCRUxfaXBhIj5VbHVzbGFyYXJhc8SxIEZvbmV0aWsgQWxmYWJlc2k8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJDT05UUkFDVElPTl9UQUJMRV9MQUJFTF9qYSI+SmFwb25jYSAoa8Sxc2FsdG1hc8Sxeik8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJDT05UUkFDVElPTl9UQUJMRV9MQUJFTF9rbyI+S29yZWNlPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iQ09OVFJBQ1RJT05fVEFCTEVfTEFCRUxfa29fZzAiPktvcmVjZSAoa8Sxc2FsdG1hc8Sxeik8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJDT05UUkFDVElPTl9UQUJMRV9MQUJFTF9rb19nMSI+S29yZWNlIChrxLFzbWkga8Sxc2FsdG1hbMSxKTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkNPTlRSQUNUSU9OX1RBQkxFX0xBQkVMX2tvX2cyIj5Lb3JlY2UgKGvEsXNhbHRtYWzEsSk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJDT05UUkFDVElPTl9UQUJMRV9MQUJFTF9sdCI+TGl0dmFuY2EgKGvEsXNhbHRtYXPEsXopPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iQ09OVFJBQ1RJT05fVEFCTEVfTEFCRUxfbWciPk1hbGFnYXN5IChrxLFzYWx0bWFsxLEpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iQ09OVFJBQ1RJT05fVEFCTEVfTEFCRUxfbXVuIj5NdW5kYSAoa8Sxc2FsdG1hbMSxKTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkNPTlRSQUNUSU9OX1RBQkxFX0xBQkVMX25sIj5GZWxlbWVua8OnZSAoa8Sxc2FsdG1hbMSxKTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkNPTlRSQUNUSU9OX1RBQkxFX0xBQkVMX255Ij5DaGljaGV3YSAoa8Sxc2FsdG1hbMSxKTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkNPTlRSQUNUSU9OX1RBQkxFX0xBQkVMX3B0Ij5Qb3J0ZWtpemNlIChrxLFzYWx0bWFsxLEpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iQ09OVFJBQ1RJT05fVEFCTEVfTEFCRUxfcnUiPlJ1c8OnYSAoa8Sxc2FsdG1hbMSxKTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkNPTlRSQUNUSU9OX1RBQkxFX0xBQkVMX3NpIj5TcmkgTGFua2FjYSAoa8Sxc2FsdG1hc8Sxeik8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJDT05UUkFDVElPTl9UQUJMRV9MQUJFTF9zdyI+U3dhaGlsaSAoa8Sxc2FsdG1hbMSxKTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkNPTlRSQUNUSU9OX1RBQkxFX0xBQkVMX3RoIj5UYXljYSAoa8Sxc2FsdG1hbMSxKTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkNPTlRSQUNUSU9OX1RBQkxFX0xBQkVMX3poX1RXIj7Dh2luY2UgKFRheXZhbiwga8Sxc2FsdG1hc8Sxeik8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJDT05UUkFDVElPTl9UQUJMRV9MQUJFTF96dSI+WnVsdSAoa8Sxc2FsdG1hbMSxKTwvc3RyaW5nPgorCisgIDxzdHJpbmcgbmFtZT0iS0VZQk9BUkRfVEFCTEVfTEFCRUxfYnJhaWxsZSI+QnJhaWxsZSBrbGF2eWVsZXIgacOnaW4gYmHEn2xhbSB0dcWfbGFyxLE8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJLRVlCT0FSRF9UQUJMRV9MQUJFTF9kZXNrdG9wIj5UYW0ga2xhdnllbGVyIGnDp2luIGJhxJ9sYW0gdHXFn2xhcsSxPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iS0VZQk9BUkRfVEFCTEVfTEFCRUxfa2V5cGFkIj5UdcWfIHRha8SxbcSxIHRhYmFubMSxIGRvbGHFn8SxbSBpw6dpbiB0dcWfIHRha8SxbcSxIGJhxJ9sYW0gdHXFn2xhcsSxPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iS0VZQk9BUkRfVEFCTEVfTEFCRUxfbGFwdG9wIj5UdcWfIHRha8SxbcSxIG9sbWF5YW4ga2xhdnllbGVyIGnDp2luIGJhxJ9sYW0gdHXFn2xhcsSxPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iS0VZQk9BUkRfVEFCTEVfTEFCRUxfc3VuX3R5cGU2Ij5TdW4gVGlwIDYgS2xhdnllbGVyIGnDp2luIGJhxJ9sYW0gdHXFn2xhcsSxPC9zdHJpbmc+Cis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL0FuZHJvaWQvR3JhZGxlL2FwcC9zcmMvbWFpbi9yZXMvdmFsdWVzLXpoLXJUVy9zdHJpbmdzLnhtbCBiL0FuZHJvaWQvR3JhZGxlL2FwcC9zcmMvbWFpbi9yZXMvdmFsdWVzLXpoLXJUVy9zdHJpbmdzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MGZkMGQxCi0tLSAvZGV2L251bGwKKysrIGIvQW5kcm9pZC9HcmFkbGUvYXBwL3NyYy9tYWluL3Jlcy92YWx1ZXMtemgtclRXL3N0cmluZ3MueG1sCkBAIC0wLDAgKzEsMjgyIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgorCis8cmVzb3VyY2VzPgorICA8c3RyaW5nIG5hbWU9ImFwcF9kZXNjcmlwdGlvbiI+QlJMVFRZIOaUr+aPtOm7nuWtl+mhr+ekuuWZqDwvc3RyaW5nPgorCisgIDxzdHJpbmcgbmFtZT0iYWJvdXRfbGFiZWxfYWN0aXZpdHkiPumXnOaWvOi7n+mrlDwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9ImFib3V0X2xhYmVsX2NvcHlyaWdodCI+54mI5qyKPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iYWJvdXRfbGFiZWxfYnVpbGRUaW1lIj7lu7rliLbmmYLplpM8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJhYm91dF9sYWJlbF9zb3VyY2VSZXZpc2lvbiI+5rqQ56K85L+u6KiCPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iYWJvdXRfbGFiZWxfcHJpdmFjeVBvbGljeSI+6Zqx56eB5pS/562WPC9zdHJpbmc+CisKKyAgPHN0cmluZyBuYW1lPSJpbnB1dFNlcnZpY2VfbmFtZSI+QlJMVFRZIOm7nuWtl+mNteebpOi8uOWFpTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9ImlucHV0U2VydmljZV90eXBlIj7pu57poa/lmajkuIrnmoTpjbXnm6Q8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJpbnB1dFNlcnZpY2Vfbm90X2VuYWJsZWQiPui8uOWFpeacjeWLmeWwmuacquWVn+eUqDwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9ImlucHV0U2VydmljZV9ub3Rfc2VsZWN0ZWQiPui8uOWFpeacjeWLmeWwmuacqumBuOeUqDwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9ImlucHV0U2VydmljZV9ub3Rfc3RhcnRlZCI+6Ly45YWl5pyN5YuZ5bCa5pyq6ZaL5aeLPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iaW5wdXRTZXJ2aWNlX25vdF9jb25uZWN0ZWQiPui8uOWFpeacjeWLmeWwmuacqumAo+e3mjwvc3RyaW5nPgorCisgIDxzdHJpbmcgbmFtZT0idXBkYXRlQXBwbGljYXRpb25fcHJvYmxlbV9mYWlsZWQiPui7n+mrlOacquWNh+e0mjwvc3RyaW5nPgorCisgIDxzdHJpbmcgbmFtZT0icGFja2FnZUluc3RhbGxlcl9wcm9ibGVtX2ZhaWxlZCI+5aWX5Lu25pyq5a6J6KOdPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0icGFja2FnZUluc3RhbGxlcl9wcm9ibGVtX3NhbWUiPueJiOacrOebuOWQjDwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9InBhY2thZ2VJbnN0YWxsZXJfcHJvYmxlbV9kb3duZ3JhZGUiPuS4jeWFgeiosemZjee0mjwvc3RyaW5nPgorCisgIDxzdHJpbmcgbmFtZT0iZmlsZURvd25sb2FkZXJfdGl0bGUiPkJSTFRUWSDmqpTmoYjkuIvovInlt6Xlhbc8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJmaWxlRG93bmxvYWRlcl9wcm9ibGVtX2ZhaWxlZCI+5qqU5qGI5pyq5LiL6LyJPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iZmlsZURvd25sb2FkZXJfc3RhdGVfY29ubmVjdGluZyI+6YCj5o6l5LitPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iZmlsZURvd25sb2FkZXJfc3RhdGVfZG93bmxvYWRpbmciPuS4i+i8ieS4rTwvc3RyaW5nPgorCisgIDxzdHJpbmcgbmFtZT0ic2V0dGluZ19zdGF0ZV9vZmYiPumXnOmWiTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9ImNoZWNrYm94X3N0YXRlX3VuY2hlY2tlZCI+5ZCmPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iY2hlY2tib3hfc3RhdGVfY2hlY2tlZCI+5biCPC9zdHJpbmc+CisKKyAgPHN0cmluZyBuYW1lPSJicmFpbGxlX2NoYW5uZWxfbmFtZSI+6bue5a2X6Kit5YKZ54uA5oWLPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iYnJhaWxsZV9oaW50X3RhcCI+6bue5pOK5ZWf55SoPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iYnJhaWxsZV9zdGF0ZV9yZWxlYXNlZCI+5bey6YeL5pS+PC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iYnJhaWxsZV9zdGF0ZV93YWl0aW5nIj7nrYnlvoXkuK08L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJicmFpbGxlX3N0YXRlX2Nvbm5lY3RlZCI+5bey6YCj5o6lPC9zdHJpbmc+CisKKyAgPHN0cmluZyBuYW1lPSJHTE9CQUxfQlVUVE9OX05PVElGSUNBVElPTlMiPumAmuefpTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkdMT0JBTF9CVVRUT05fUVVJQ0tfU0VUVElOR1MiPuW/q+mAn+ioreWumjwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkdMT0JBTF9CVVRUT05fQkFDSyI+6L+U5ZuePC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iR0xPQkFMX0JVVFRPTl9IT01FIj7kuLvpoIE8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJHTE9CQUxfQlVUVE9OX1JFQ0VOVF9BUFBTIj7mnIDov5HplovllZ/nmoTmh4nnlKjln47luII8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJHTE9CQUxfQlVUVE9OX09WRVJWSUVXIj7mpoLopr08L3N0cmluZz4KKworICA8c3RyaW5nIG5hbWU9IkdMT0JBTF9CVVRUT05fU1dJVENIX0lOUFVUX01FVEhPRCI+5YiH5o+b6Ly45YWl5rOVPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iR0xPQkFMX0JVVFRPTl9WSUVXX1VTRVJfR1VJREUiPuingOeci+S9v+eUqOiqquaYjjwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkdMT0JBTF9CVVRUT05fQlJPV1NFX1dFQl9TSVRFIj7ngI/opr3ntrLnq5k8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJHTE9CQUxfQlVUVE9OX0JST1dTRV9DT01NVU5JVFlfTUVTU0FHRVMiPueAj+imveekvue+pOioiuaBrzwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkdMT0JBTF9CVVRUT05fUE9TVF9DT01NVU5JVFlfTUVTU0FHRSI+5by16LK856S+576k6KiK5oGvPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iR0xPQkFMX0JVVFRPTl9NQU5BR0VfQ09NTVVOSVRZX01FTUJFUlNISVAiPueuoeeQhuekvue+pOacg+WToTwvc3RyaW5nPgorCisgIDxzdHJpbmcgbmFtZT0iR0xPQkFMX0JVVFRPTl9VUERBVEVfQVBQTElDQVRJT04iPuabtOaWsOi7n+mrlDwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkdMT0JBTF9DSEVDS0JPWF9ERVZFTE9QRVJfQlVJTEQiPumWi+eZvOiAheW7uuWItjwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkdMT0JBTF9DSEVDS0JPWF9BTExPV19ET1dOR1JBREUiPuWFgeiosemZjee0mjwvc3RyaW5nPgorCisgIDxzdHJpbmcgbmFtZT0iQ0hPT1NFUl9USVRMRV9BQ0NFU1NJQklMSVRZX0FDVElPTlMiPueEoemanOekmea0u+WLlTwvc3RyaW5nPgorCisgIDxzdHJpbmcgbmFtZT0iU0VUVElOR1NfU0NSRUVOX01BSU4iPkJSTFRUWSDoqK3lrpo8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJTRVRUSU5HU19TQ1JFRU5fR0VORVJBTCI+5LiA6Iis6Kit5a6aPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iU0VUVElOR1NfU0NSRUVOX01FU1NBR0UiPuioiuaBr+ioreWumjwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlNFVFRJTkdTX1NDUkVFTl9ERVZJQ0VTIj7pu57poa/lmajoqK3lrpo8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJTRVRUSU5HU19TQ1JFRU5fQURWQU5DRUQiPumAsumajuioreWumjwvc3RyaW5nPgorCisgIDxzdHJpbmcgbmFtZT0iU0VUVElOR1NfQ0hFQ0tCT1hfUkVMRUFTRV9CUkFJTExFX0RFVklDRSI+6YeL5pS+55qE6bue5a2X6Kit5YKZPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iU0VUVElOR1NfQlVUVE9OX05BVklHQVRJT05fTU9ERSI+5bCL5oe25qih5byPPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iU0VUVElOR1NfQlVUVE9OX1NQRUVDSF9TVVBQT1JUIj7oqp7pn7PmlK/mj7Q8L3N0cmluZz4KKworICA8c3RyaW5nIG5hbWU9IlNFVFRJTkdTX0JVVFRPTl9URVhUX1RBQkxFIj7mma7pgJrpu57lrZc8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJTRVRUSU5HU19CVVRUT05fQVRUUklCVVRFU19UQUJMRSI+5bGs5oCn6bue5a2XPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iU0VUVElOR1NfQlVUVE9OX0NPTlRSQUNUSU9OX1RBQkxFIj7nuK7lr6vpu57lrZc8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJTRVRUSU5HU19CVVRUT05fS0VZQk9BUkRfVEFCTEUiPumNteebpOWwjeaHieihqDwvc3RyaW5nPgorCisgIDxzdHJpbmcgbmFtZT0iU0VUVElOR1NfQ0hFQ0tCT1hfU0hPV19BTEVSVFMiPumhr+ekuuitpuekujwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlNFVFRJTkdTX0NIRUNLQk9YX1NIT1dfQU5OT1VOQ0VNRU5UUyI+6aGv56S65o+Q6YaSPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iU0VUVElOR1NfQ0hFQ0tCT1hfU0hPV19OT1RJRklDQVRJT05TIj7poa/npLrpgJrnn6U8L3N0cmluZz4KKworICA8c3RyaW5nIG5hbWU9IlNFVFRJTkdTX0JVVFRPTl9MT0dfTEVWRUwiPue0gOmMhOetiee0mjwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlNFVFRJTkdTX0JVVFRPTl9MT0dfQ0FURUdPUklFUyI+57SA6YyE5YiG6aGePC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iU0VUVElOR1NfQ0hFQ0tCT1hfTE9HX0FDQ0VTU0lCSUxJVFlfRVZFTlRTIj7ntIDpjITnhKHpmpznpJnkuovku7Y8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJTRVRUSU5HU19DSEVDS0JPWF9MT0dfUkVOREVSRURfU0NSRUVOIj7ntIDpjITmjajmo4TnmoTnlavpnaI8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJTRVRUSU5HU19DSEVDS0JPWF9MT0dfS0VZQk9BUkRfRVZFTlRTIj7ntIDpjITpjbXnm6Tkuovku7Y8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJTRVRUSU5HU19DSEVDS0JPWF9MT0dfVU5IQU5ETEVEX0VWRU5UUyI+57SA6YyE5pyq5Y+X5o6n5Yi25LqL5Lu2PC9zdHJpbmc+CisKKyAgPHN0cmluZyBuYW1lPSJERVZJQ0VTX0JVVFRPTl9TRUxFQ1RFRCI+6YG455So55qE6bue6aGv5ZmoPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iREVWSUNFU19CVVRUT05fQUREIj7mlrDlop7pu57poa/lmag8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJERVZJQ0VTX0JVVFRPTl9SRU1PVkUiPuenu+mZpOm7numhr+WZqDwvc3RyaW5nPgorCisgIDxzdHJpbmcgbmFtZT0iU0VMRUNURURfREVWSUNFX05PTkUiPuaykuacieioreWCmTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlNFTEVDVEVEX0RFVklDRV9VTlNFTEVDVEVEIj7oqK3lgpnppLXpgbjlj5Y8L3N0cmluZz4KKworICA8c3RyaW5nIG5hbWU9IkFERF9ERVZJQ0VfTkFNRSI+6bue6aGv5Zmo5ZCN56ixPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iQUREX0RFVklDRV9NRVRIT0QiPumAo+aOpeaWueW8jzwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkFERF9ERVZJQ0VfU0VMRUNUIj7pgbjmk4fpu57poa/lmag8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJBRERfREVWSUNFX0RSSVZFUiI+6bue6aGv5ZmoPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iQUREX0RFVklDRV9ET05FIj7lrozmiJA8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJBRERfREVWSUNFX1VOU0VMRUNURURfTUVUSE9EIj7mup3pgJrmlrnlvI/ppLXpgbjlj5Y8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJBRERfREVWSUNFX1VOU0VMRUNURURfREVWSUNFIj7oqK3lgpnppLXpgbjlj5Y8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJBRERfREVWSUNFX1VOU0VMRUNURURfRFJJVkVSIj7pu57lrZfpqYXli5XppLXpgbjlj5Y8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJBRERfREVWSUNFX05PX0RFVklDRVMiPuaykuacieioreWCmTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkFERF9ERVZJQ0VfRFVQTElDQVRFX05BTUUiPuioreWCmeWQjeeoseS7peS9v+eUqDwvc3RyaW5nPgorCisgIDxzdHJpbmcgbmFtZT0iUkVNT1ZFX0RFVklDRV9QUk9NUFQiPuaCqOeiuuWumuimgeenu+mZpOmAmeWAi+m7numhr+WZqOWXju+8nzwvc3RyaW5nPgorCisgIDxzdHJpbmcgbmFtZT0iU0VUX1NFTEVDVElPTl9OT05FIj7mspLmnInpgbjlj5Y8L3N0cmluZz4KKworICA8c3RyaW5nIG5hbWU9Ik5BVklHQVRJT05fTU9ERV9MQUJFTF9MaXN0Ij7nuLHlkJHmuIXllq48L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJOQVZJR0FUSU9OX01PREVfTEFCRUxfR3JpZCI+5LqM57at5pa55qC8PC9zdHJpbmc+CisKKyAgPHN0cmluZyBuYW1lPSJTUEVFQ0hfU1VQUE9SVF9MQUJFTF9uYXRpdmUiPuWFp+W7ujwvc3RyaW5nPgorCisgIDxzdHJpbmcgbmFtZT0iQ09NTVVOSUNBVElPTl9NRVRIT0RfTEFCRUxfQmx1ZXRvb3RoIj7ol43niZk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJDT01NVU5JQ0FUSU9OX01FVEhPRF9MQUJFTF9Vc2IiPlVTQjwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkNPTU1VTklDQVRJT05fTUVUSE9EX0xBQkVMX1NlcmlhbCI+5bqP5YiX5Z+gPC9zdHJpbmc+CisKKyAgPHN0cmluZyBuYW1lPSJMT0dfTEVWRUxfTEFCRUxfZGVidWciPumZpOmMrzwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkxPR19MRVZFTF9MQUJFTF9pbmZvcm1hdGlvbiI+6LOH6KiKPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iTE9HX0xFVkVMX0xBQkVMX25vdGljZSI+5o+Q56S6PC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iTE9HX0xFVkVMX0xBQkVMX3dhcm5pbmciPuitpuekujwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkxPR19MRVZFTF9MQUJFTF9lcnJvciI+6Yyv6KqkPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iTE9HX0xFVkVMX0xBQkVMX2NyaXRpY2FsIj7pl5zpjbU8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJMT0dfTEVWRUxfTEFCRUxfYWxlcnQiPuitpuWRijwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkxPR19MRVZFTF9MQUJFTF9lbWVyZ2VuY3kiPue3iuaApTwvc3RyaW5nPgorCisgIDxzdHJpbmcgbmFtZT0iTE9HX0NBVEVHT1JZX0xBQkVMX2lucGt0cyI+6Ly45YWl5bCB5YyFPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iTE9HX0NBVEVHT1JZX0xBQkVMX291dHBrdHMiPui8uOWHuuWwgeWMhTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkxPR19DQVRFR09SWV9MQUJFTF9icmxrZXlzIj7pu57lrZfpjbXnm6Tkuovku7Y8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJMT0dfQ0FURUdPUllfTEFCRUxfa2Jka2V5cyI+5pmu6YCa6Y2155uk5LqL5Lu2PC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iTE9HX0NBVEVHT1JZX0xBQkVMX2NzcnRyayI+5ri45qiZ6L+96LmkPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iTE9HX0NBVEVHT1JZX0xBQkVMX2NzcnJ0ZyI+5ri45qiZ5a6a5L2NPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iTE9HX0NBVEVHT1JZX0xBQkVMX3VwZGF0ZSI+5pu05paw5LqL5Lu2PC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iTE9HX0NBVEVHT1JZX0xBQkVMX3NwZWVjaCI+5pyX6K6A5LqL5Lu2PC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iTE9HX0NBVEVHT1JZX0xBQkVMX2FzeW5jIj7pnZ7lkIzmraXkuovku7Y8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJMT0dfQ0FURUdPUllfTEFCRUxfc2VydmVyIj7mnI3li5nkuovku7Y8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJMT0dfQ0FURUdPUllfTEFCRUxfc2VyaWFsIj7luo/liJfovLjlhaXovLjlh7o8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJMT0dfQ0FURUdPUllfTEFCRUxfdXNiIj5VU0Ig6Ly45YWl6Ly45Ye6PC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iTE9HX0NBVEVHT1JZX0xBQkVMX2J0Ij7ol43niZnovLjlhaXovLjlh7o8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJMT0dfQ0FURUdPUllfTEFCRUxfYnJsZHJ2Ij7pu57lrZfpqYXli5Xkuovku7Y8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJMT0dfQ0FURUdPUllfTEFCRUxfc3BrZHJ2Ij7oqp7pn7PpqYXli5Xkuovku7Y8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJMT0dfQ0FURUdPUllfTEFCRUxfc2NyZHJ2Ij7onqLluZXpqYXli5Xkuovku7Y8L3N0cmluZz4KKworICA8c3RyaW5nIG5hbWU9IkJSQUlMTEVfRFJJVkVSX0xBQkVMX2F1dG8iPuiHquWLleWBtea4rDwvc3RyaW5nPgorCisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9hdXRvIj7kvp3nhafoqp7oqIDoqK3lrproh6rli5Xpgbjmk4c8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX2FyIj7pmL/mi4nkvK/vvIjkuIDoiKzvvIk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX2FzIj7pmL/olqnlp4Y8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX2F3YSI+6Zi/55Om6L+qPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9iZyI+5L+d5Yqg5Yip5LqePC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9iaCI+5q+U5ZOI54i+PC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9ibiI+5a2f5Yqg5ouJPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9ibyI+6KW/6JeP6KqePC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9icmEiPkJyYWo8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX2JyZiI+6bue5a2X5qC85byP5qqU77yI6Zax6K6AIC5icmYg5qqU77yJPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9jcyI+5o235YWLPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9jeSI+5aiB54i+5pavPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9kYSI+5Li56bqlPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9kYV8xMjUyIj7kuLnpuqUgKFN2ZW5kIFRob3VnYWFyZCwgMjAwMuKAkzEx4oCTMTgpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9kYV9sdCI+5Li56bqlIChMb2dUZXh0KTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfZGUiPuW+t+aWhzwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfZHJhIj7lvrfmi4nntq08L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX2VsIj7luIzoh5g8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX2VuIj7oi7Hmloc8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX2VuX0NBIj7oi7HmlofvvIjliqDmi7/lpKfvvIk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX2VuX0dCIj7oi7HmlofvvIjoi7HlnIvvvIk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX2VuX25hYmNjIj7oi7HmlofvvIjljJfnvo7pm7vohabpu57lrZfvvIk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX2VuX1VTIj7oi7HmlofvvIjnvo7lnIvvvIk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX2VvIj7kuJbnlYzoqp48L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX2VzIj7opb/nj63niZk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX2V0Ij7mhJvmspnlsLzkup48L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX2ZpIj7oiqzomK08L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX2ZyIj7ms5Xmloc8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX2ZyXzIwMDciPuazleaWhyAo57Wx5LiAIDIwMDcpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9mcl9DQSI+5rOV5paH77yI5Yqg5ou/5aSn77yJPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9mcl9jYmlmcyI+5rOV5paH77yI5rOV5ZyL5qiZ5rqW6bue5a2X6LOH6KiK56K877yJPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9mcl9GUiI+5rOV5paH77yI5rOV6Jit6KW/77yJPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9mcl92cyI+5rOV5paHIChWaXNpb0JyYWlsbGUpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9nYSI+5oSb54i+6Jit6Iux6KqePC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9nZCI+6JOL54i+PC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9nb24iPuWyoeW+tzwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfZ3UiPuWNsOW6puWPpOWQieaLieeJuTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfaGUiPuW4jOS8r+S+hjwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfaGkiPuWMl+WNsOW6puiqnjwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfaHIiPuWFi+e+heWfg+ilv+S6njwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfaHUiPuWMiOeJmeWIqTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfaHkiPuS6nue+juWwvOS6njwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfaXMiPuWGsOWztjwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfaXQiPue+qeWkp+WIqTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfa2hhIj7ljaHopb88L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX2tuIj7lnY7pgqPpgZToqp48L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX2tvayI+5a2U5Y2h5bC8PC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9rcnUiPkt1cnVraDwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfbHQiPueri+mZtuWumzwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfbHYiPuaLieiEq+e2reS6njwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfbWciPummrOmBlOWKoOaWr+WKoDwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfbWkiPuavm+WIqeiqnjwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfbWwiPuWNsOW6puilv+WNl+mDqOeahOW+t+aLieWogeaWueiogDwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfbW5pIj4o5Y2w5bqmKeabvOWwvOaZrueIvjwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfbXIiPummrOaLieWcsOiqnjwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfbXQiPummrOeIvuS7ljwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfbXVuIj7okpnpgZToqp48L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX213ciI+6aas54i+55Om54i+PC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9uZSI+5bC85rOK54i+PC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9uZXciPuWwvOeTpueIvjwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfbmwiPuiNt+iYrTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfbmxfQkUiPuiNt+iYre+8iOavlOWIqeaZgu+8iTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfbmxfTkwiPuiNt+iYre+8iOWwvOW+t+iYre+8iTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfbm8iPuaMquWogTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfbm9fZ2VuZXJpYyI+5oyq5aiB77yI5pSv5o+05YW25LuW6Kqe6KiA77yJPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9ub19vdXAiPuaMquWogSAoT2ZmZW50bGlnIHV0dmFsZyBmb3IgcHVua3Rza3JpZnQpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9ud2MiPue0kOeTpumHjO+8iOiIiu+8iTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfb3IiPuatkOWIqeS6nuiqnjwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfcGEiPuaXgemBruaZruiqnjwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfcGkiPuW3tOatt+iqnjwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfcGwiPuazouiYrTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfcHQiPuiRoeiQhOeJmTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfcm8iPue+hemmrOWwvOS6njwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfcnUiPuS/hOiqnjwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfc2EiPuaiteiqnjwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfc2F0Ij5TYW50YWxpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9zZCI+5L+h5b636KqePC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9zZSI+5YyX6Jap57GzPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9zayI+5pav5rSb5rOV5YWLPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9zbCI+5pav5rSb5Yeh5bC85Lqe6KqePC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9zdiI+55Ge5YW4PC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9zdl8xOTg5Ij7nkZ7lhbggKDE5ODkg5qiZ5rqWKTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfc3ZfMTk5NiI+55Ge5YW4ICgxOTk2IOaomea6lik8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX3N3Ij7mlq/oj6/luIzoo6E8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX3RhIj7lnabnsbPniL48L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX3RlIj7ms7Dnm6flm7roqp48L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX3RyIj7lnJ/ogLPlhbY8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX3VrIj7ng4/lhYvomK3oqp48L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX3ZpIj7otorljZc8L3N0cmluZz4KKworICA8c3RyaW5nIG5hbWU9IkFUVFJJQlVURVNfVEFCTEVfTEFCRUxfaW52bGVmdF9yaWdodCI+5bCN6Kq/5bem6YKK5qyE5L2N55qE5YmN5pmv6aGP6Imy6IiH5Y+z6YKK5qyE5L2N55qE6IOM5pmv6aGP6ImyPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iQVRUUklCVVRFU19UQUJMRV9MQUJFTF9sZWZ0X3JpZ2h0Ij7lt6bpgormrITkvY3ngrrliY3mma/poY/oibIg5Y+z6YKK5qyE5L2N54K66IOM5pmv6aGP6ImyPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iQVRUUklCVVRFU19UQUJMRV9MQUJFTF91cHBlcl9sb3dlciI+5LiK5qGG54K65YmN5pmv6aGP6ImyIOS4i+ahhueCuuiDjOaZr+mhj+iJsjwvc3RyaW5nPgorCisgIDxzdHJpbmcgbmFtZT0iQ09OVFJBQ1RJT05fVEFCTEVfTEFCRUxfYXV0byI+5L6d54Wn6Kqe6KiA6Kit5a6a6Ieq5YuV6YG45pOHPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iQ09OVFJBQ1RJT05fVEFCTEVfTEFCRUxfYWYiPuWNl+mdnueahOiNt+iYreiqnue4ruWvqzwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkNPTlRSQUNUSU9OX1RBQkxFX0xBQkVMX2FtIj7pmL/mr5Topb/lsLzkup7lrpjoqbHnhKHnuK7lr6s8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJDT05UUkFDVElPTl9UQUJMRV9MQUJFTF9kZSI+5b635paHPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iQ09OVFJBQ1RJT05fVEFCTEVfTEFCRUxfZGVfZzAiPuW+t+aWh+eEoee4ruWvqzwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkNPTlRSQUNUSU9OX1RBQkxFX0xBQkVMX2RlX2cxIj7lvrfmlofln7rmnKznuK7lr6s8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJDT05UUkFDVElPTl9UQUJMRV9MQUJFTF9kZV9nMiI+5b635paH57iu5a+rPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iQ09OVFJBQ1RJT05fVEFCTEVfTEFCRUxfZGVfMTk5OCI+5b635paH57iu5a+rIDE5OTgg5qiZ5rqWPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iQ09OVFJBQ1RJT05fVEFCTEVfTEFCRUxfZGVfMjAxNSI+5b635paH57iu5a+rIDIwMTUg5qiZ5rqWPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iQ09OVFJBQ1RJT05fVEFCTEVfTEFCRUxfZW4iPuiLseaWhzwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkNPTlRSQUNUSU9OX1RBQkxFX0xBQkVMX2VuX1VTIj7oi7HmlofvvIjnvo7lnIvvvIk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJDT05UUkFDVElPTl9UQUJMRV9MQUJFTF9lbl91ZWJfZzIiPuiLseaWh+e1seS4gOS6jOe0mum7nuWtlzwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkNPTlRSQUNUSU9OX1RBQkxFX0xBQkVMX2VuX3VzX2cyIj7oi7HmlofkuozntJo8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJDT05UUkFDVElPTl9UQUJMRV9MQUJFTF9lcyI+6KW/54+t54mZ6Kqe5LqM57SaPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iQ09OVFJBQ1RJT05fVEFCTEVfTEFCRUxfZnIiPuazleaWhzwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkNPTlRSQUNUSU9OX1RBQkxFX0xBQkVMX2ZyX2cxIj7ms5XmlofnhKHnuK7lr6s8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJDT05UUkFDVElPTl9UQUJMRV9MQUJFTF9mcl9nMiI+5rOV5paH57iu5a+rPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iQ09OVFJBQ1RJT05fVEFCTEVfTEFCRUxfaGEiPuixquaSkuiqnue4ruWvqzwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkNPTlRSQUNUSU9OX1RBQkxFX0xBQkVMX2lkIj7ljbDlsLzoqp7nuK7lr6s8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJDT05UUkFDVElPTl9UQUJMRV9MQUJFTF9pcGEiPuWci+mam+aLvOmfs+Wtl+avjTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkNPTlRSQUNUSU9OX1RBQkxFX0xBQkVMX2phIj7ml6XmlofnhKHnuK7lr6s8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJDT05UUkFDVElPTl9UQUJMRV9MQUJFTF9rbyI+6Z+T5paHPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iQ09OVFJBQ1RJT05fVEFCTEVfTEFCRUxfa29fZzAiPumfk+aWh+eEoee4ruWvqzwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkNPTlRSQUNUSU9OX1RBQkxFX0xBQkVMX2tvX2cxIj7pn5PmlofkuIDntJo8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJDT05UUkFDVElPTl9UQUJMRV9MQUJFTF9rb19nMiI+6Z+T5paH5LqM57SaPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iQ09OVFJBQ1RJT05fVEFCTEVfTEFCRUxfbHQiPueri+mZtuWum+iqniAo5rKS57iu5a+rKTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkNPTlRSQUNUSU9OX1RBQkxFX0xBQkVMX21nIj7ppqzpgZTliqDmlq/liqDoqp7nuK7lr6s8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJDT05UUkFDVElPTl9UQUJMRV9MQUJFTF9tdW4iPuiSmemBlOiqnue4ruWvqzwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkNPTlRSQUNUSU9OX1RBQkxFX0xBQkVMX25sIj7ojbfomK3oqp7nuK7lr6s8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJDT05UUkFDVElPTl9UQUJMRV9MQUJFTF9ueSI+5aWH5YiH55OmICjnuK7lr6spPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iQ09OVFJBQ1RJT05fVEFCTEVfTEFCRUxfcHQiPuiRoeiQhOeJmeiqnuS6jOe0mjwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkNPTlRSQUNUSU9OX1RBQkxFX0xBQkVMX3J1Ij7kv4Toqp7vvIjnuK7lr6vvvIk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJDT05UUkFDVElPTl9UQUJMRV9MQUJFTF9zaSI+6Yyr6Jit6Kqe54Sh57iu5a+rPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iQ09OVFJBQ1RJT05fVEFCTEVfTEFCRUxfc3ciPuaWr+eTpuW4jOijoeiqnue4ruWvqzwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkNPTlRSQUNUSU9OX1RBQkxFX0xBQkVMX3RoIj7ms7DlnIvoqp7nuK7lr6s8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJDT05UUkFDVElPTl9UQUJMRV9MQUJFTF96aF9UVyI+5Lit5paHPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iQ09OVFJBQ1RJT05fVEFCTEVfTEFCRUxfenUiPuellumtr+iqnue4ruWvqzwvc3RyaW5nPgorCisgIDxzdHJpbmcgbmFtZT0iS0VZQk9BUkRfVEFCTEVfTEFCRUxfYnJhaWxsZSI+6bue5a2X6Y2155uk5bCN5oeJPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iS0VZQk9BUkRfVEFCTEVfTEFCRUxfZGVza3RvcCI+5YWo6Y2155uk5bCN5oeJPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iS0VZQk9BUkRfVEFCTEVfTEFCRUxfa2V5cGFkIj7kuZ3lrq7pjbXlsIvmh7blsI3mh4k8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJLRVlCT0FSRF9UQUJMRV9MQUJFTF9sYXB0b3AiPuaykuacieS5neWurumNteeahOmNteebpOWwjeaHiTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IktFWUJPQVJEX1RBQkxFX0xBQkVMX3N1bl90eXBlNiI+U3VuIOesrOWFreW9oumNteebpOWwjeaHiTwvc3RyaW5nPgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9BbmRyb2lkL0dyYWRsZS9hcHAvc3JjL21haW4vcmVzL3ZhbHVlcy9hdHRyaWJ1dGVzLXRhYmxlLnhtbCBiL0FuZHJvaWQvR3JhZGxlL2FwcC9zcmMvbWFpbi9yZXMvdmFsdWVzL2F0dHJpYnV0ZXMtdGFibGUueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUzMDM2YWQKLS0tIC9kZXYvbnVsbAorKysgYi9BbmRyb2lkL0dyYWRsZS9hcHAvc3JjL21haW4vcmVzL3ZhbHVlcy9hdHRyaWJ1dGVzLXRhYmxlLnhtbApAQCAtMCwwICsxLDIyIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgorCis8IS0tIGdlbmVyYXRlZCBmcm9tIGJybHR0eS5jb25mLmluIGJ5IG1rc2V0dGluZ3MgLS0+Cis8IS0tIGNoYW5nZXMgbWFkZSBoZXJlIHdpbGwgYmUgb3ZlcndyaXR0ZW4gLS0+CisKKzxyZXNvdXJjZXM+CisgIDxzdHJpbmcgbmFtZT0iQVRUUklCVVRFU19UQUJMRV9MQUJFTF9pbnZsZWZ0X3JpZ2h0IiB0cmFuc2xhdGFibGU9InRydWUiPmludmVyc2UgZm9yZWdyb3VuZCBjb2xvdXIgaW4gdGhlIGxlZnQgY29sdW1uIGFuZCBiYWNrZ3JvdW5kIGNvbG91ciBpbiB0aGUgcmlnaHQgY29sdW1uPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iQVRUUklCVVRFU19UQUJMRV9MQUJFTF9sZWZ0X3JpZ2h0IiB0cmFuc2xhdGFibGU9InRydWUiPmZvcmVncm91bmQgY29sb3VyIGluIHRoZSBsZWZ0IGNvbHVtbiBhbmQgYmFja2dyb3VuZCBjb2xvdXIgaW4gdGhlIHJpZ2h0IGNvbHVtbjwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkFUVFJJQlVURVNfVEFCTEVfTEFCRUxfdXBwZXJfbG93ZXIiIHRyYW5zbGF0YWJsZT0idHJ1ZSI+Zm9yZWdyb3VuZCBjb2xvdXIgaW4gdGhlIHVwcGVyIHNxdWFyZSBhbmQgYmFja2dyb3VuZCBjb2xvdXIgaW4gdGhlIGxvd2VyIHNxdWFyZTwvc3RyaW5nPgorCisgIDxzdHJpbmctYXJyYXkgbmFtZT0iQVRUUklCVVRFU19UQUJMRV9MQUJFTFMiPgorICAgIDxpdGVtPkBzdHJpbmcvQVRUUklCVVRFU19UQUJMRV9MQUJFTF9pbnZsZWZ0X3JpZ2h0PC9pdGVtPgorICAgIDxpdGVtPkBzdHJpbmcvQVRUUklCVVRFU19UQUJMRV9MQUJFTF9sZWZ0X3JpZ2h0PC9pdGVtPgorICAgIDxpdGVtPkBzdHJpbmcvQVRUUklCVVRFU19UQUJMRV9MQUJFTF91cHBlcl9sb3dlcjwvaXRlbT4KKyAgPC9zdHJpbmctYXJyYXk+CisKKyAgPHN0cmluZy1hcnJheSBuYW1lPSJBVFRSSUJVVEVTX1RBQkxFX1ZBTFVFUyI+CisgICAgPGl0ZW0+aW52bGVmdF9yaWdodDwvaXRlbT4KKyAgICA8aXRlbT5sZWZ0X3JpZ2h0PC9pdGVtPgorICAgIDxpdGVtPnVwcGVyX2xvd2VyPC9pdGVtPgorICA8L3N0cmluZy1hcnJheT4KKzwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvQW5kcm9pZC9HcmFkbGUvYXBwL3NyYy9tYWluL3Jlcy92YWx1ZXMvYnJhaWxsZS1kcml2ZXIueG1sIGIvQW5kcm9pZC9HcmFkbGUvYXBwL3NyYy9tYWluL3Jlcy92YWx1ZXMvYnJhaWxsZS1kcml2ZXIueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhhNjNjNmMKLS0tIC9kZXYvbnVsbAorKysgYi9BbmRyb2lkL0dyYWRsZS9hcHAvc3JjL21haW4vcmVzL3ZhbHVlcy9icmFpbGxlLWRyaXZlci54bWwKQEAgLTAsMCArMSwxMzAgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+CisKKzwhLS0gZ2VuZXJhdGVkIGZyb20gYnJsdHR5LmNvbmYuaW4gYnkgbWtzZXR0aW5ncyAtLT4KKzwhLS0gY2hhbmdlcyBtYWRlIGhlcmUgd2lsbCBiZSBvdmVyd3JpdHRlbiAtLT4KKworPHJlc291cmNlcz4KKyAgPHN0cmluZyBuYW1lPSJCUkFJTExFX0RSSVZFUl9MQUJFTF9hdXRvIiB0cmFuc2xhdGFibGU9InRydWUiPmF1dG9kZXRlY3Q8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJCUkFJTExFX0RSSVZFUl9MQUJFTF9hbCIgdHJhbnNsYXRhYmxlPSJmYWxzZSI+QWx2YTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkJSQUlMTEVfRFJJVkVSX0xBQkVMX2F0IiB0cmFuc2xhdGFibGU9ImZhbHNlIj5BbGJhdHJvc3M8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJCUkFJTExFX0RSSVZFUl9MQUJFTF9iYSIgdHJhbnNsYXRhYmxlPSJmYWxzZSI+QnJsQVBJPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iQlJBSUxMRV9EUklWRVJfTEFCRUxfYmMiIHRyYW5zbGF0YWJsZT0iZmFsc2UiPkJyYWlsQ29tbTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkJSQUlMTEVfRFJJVkVSX0xBQkVMX2JkIiB0cmFuc2xhdGFibGU9ImZhbHNlIj5CcmF1ZGk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJCUkFJTExFX0RSSVZFUl9MQUJFTF9ibCIgdHJhbnNsYXRhYmxlPSJmYWxzZSI+QnJhaWxsZUxpdGU8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJCUkFJTExFX0RSSVZFUl9MQUJFTF9ibSIgdHJhbnNsYXRhYmxlPSJmYWxzZSI+QmF1bTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkJSQUlMTEVfRFJJVkVSX0xBQkVMX2JuIiB0cmFuc2xhdGFibGU9ImZhbHNlIj5CcmFpbGxlTm90ZTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkJSQUlMTEVfRFJJVkVSX0xBQkVMX2NiIiB0cmFuc2xhdGFibGU9ImZhbHNlIj5Db21iaUJyYWlsbGU8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJCUkFJTExFX0RSSVZFUl9MQUJFTF9jZSIgdHJhbnNsYXRhYmxlPSJmYWxzZSI+Q2VicmE8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJCUkFJTExFX0RSSVZFUl9MQUJFTF9jbiIgdHJhbnNsYXRhYmxlPSJmYWxzZSI+Q2FudXRlPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iQlJBSUxMRV9EUklWRVJfTEFCRUxfZHAiIHRyYW5zbGF0YWJsZT0iZmFsc2UiPkRvdFBhZDwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkJSQUlMTEVfRFJJVkVSX0xBQkVMX2VjIiB0cmFuc2xhdGFibGU9ImZhbHNlIj5FY29CcmFpbGxlPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iQlJBSUxMRV9EUklWRVJfTEFCRUxfZXUiIHRyYW5zbGF0YWJsZT0iZmFsc2UiPkV1cm9CcmFpbGxlPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iQlJBSUxMRV9EUklWRVJfTEFCRUxfZmEiIHRyYW5zbGF0YWJsZT0iZmFsc2UiPkZyYW5rQXVkaW9kYXRhPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iQlJBSUxMRV9EUklWRVJfTEFCRUxfZnMiIHRyYW5zbGF0YWJsZT0iZmFsc2UiPkZyZWVkb21TY2llbnRpZmljPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iQlJBSUxMRV9EUklWRVJfTEFCRUxfaGQiIHRyYW5zbGF0YWJsZT0iZmFsc2UiPkhlZG88L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJCUkFJTExFX0RSSVZFUl9MQUJFTF9obSIgdHJhbnNsYXRhYmxlPSJmYWxzZSI+SElNUzwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkJSQUlMTEVfRFJJVkVSX0xBQkVMX2h0IiB0cmFuc2xhdGFibGU9ImZhbHNlIj5IYW5keVRlY2g8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJCUkFJTExFX0RSSVZFUl9MQUJFTF9odyIgdHJhbnNsYXRhYmxlPSJmYWxzZSI+SHVtYW5XYXJlPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iQlJBSUxMRV9EUklWRVJfTEFCRUxfaWMiIHRyYW5zbGF0YWJsZT0iZmFsc2UiPkluY2VwdG9yPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iQlJBSUxMRV9EUklWRVJfTEFCRUxfaXIiIHRyYW5zbGF0YWJsZT0iZmFsc2UiPklyaXM8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJCUkFJTExFX0RSSVZFUl9MQUJFTF9sYiIgdHJhbnNsYXRhYmxlPSJmYWxzZSI+TGliYnJhaWxsZTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkJSQUlMTEVfRFJJVkVSX0xBQkVMX2x0IiB0cmFuc2xhdGFibGU9ImZhbHNlIj5Mb2dUZXh0PC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iQlJBSUxMRV9EUklWRVJfTEFCRUxfbWIiIHRyYW5zbGF0YWJsZT0iZmFsc2UiPk11bHRpQnJhaWxsZTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkJSQUlMTEVfRFJJVkVSX0xBQkVMX21kIiB0cmFuc2xhdGFibGU9ImZhbHNlIj5NRFY8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJCUkFJTExFX0RSSVZFUl9MQUJFTF9tbSIgdHJhbnNsYXRhYmxlPSJmYWxzZSI+QnJhaWxsZU1lbW88L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJCUkFJTExFX0RSSVZFUl9MQUJFTF9tbiIgdHJhbnNsYXRhYmxlPSJmYWxzZSI+TWluaUJyYWlsbGU8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJCUkFJTExFX0RSSVZFUl9MQUJFTF9tdCIgdHJhbnNsYXRhYmxlPSJmYWxzZSI+TWV0ZWM8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJCUkFJTExFX0RSSVZFUl9MQUJFTF9ucCIgdHJhbnNsYXRhYmxlPSJmYWxzZSI+TmluZVBvaW50PC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iQlJBSUxMRV9EUklWRVJfTEFCRUxfcGciIHRyYW5zbGF0YWJsZT0iZmFsc2UiPlBlZ2FzdXM8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJCUkFJTExFX0RSSVZFUl9MQUJFTF9wbSIgdHJhbnNsYXRhYmxlPSJmYWxzZSI+UGFwZW5tZWllcjwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkJSQUlMTEVfRFJJVkVSX0xBQkVMX3NrIiB0cmFuc2xhdGFibGU9ImZhbHNlIj5TZWlrYTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkJSQUlMTEVfRFJJVkVSX0xBQkVMX3RuIiB0cmFuc2xhdGFibGU9ImZhbHNlIj5UZWNobmlCcmFpbGxlPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iQlJBSUxMRV9EUklWRVJfTEFCRUxfdHMiIHRyYW5zbGF0YWJsZT0iZmFsc2UiPlRTSTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkJSQUlMTEVfRFJJVkVSX0xBQkVMX3ZkIiB0cmFuc2xhdGFibGU9ImZhbHNlIj5WaWRlb0JyYWlsbGU8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJCUkFJTExFX0RSSVZFUl9MQUJFTF92byIgdHJhbnNsYXRhYmxlPSJmYWxzZSI+Vm95YWdlcjwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkJSQUlMTEVfRFJJVkVSX0xBQkVMX3ZzIiB0cmFuc2xhdGFibGU9ImZhbHNlIj5WaXNpb0JyYWlsbGU8L3N0cmluZz4KKworICA8c3RyaW5nLWFycmF5IG5hbWU9IkJSQUlMTEVfRFJJVkVSX0xBQkVMUyI+CisgICAgPGl0ZW0+QHN0cmluZy9CUkFJTExFX0RSSVZFUl9MQUJFTF9hdXRvPC9pdGVtPgorICAgIDxpdGVtPkBzdHJpbmcvQlJBSUxMRV9EUklWRVJfTEFCRUxfYWw8L2l0ZW0+CisgICAgPGl0ZW0+QHN0cmluZy9CUkFJTExFX0RSSVZFUl9MQUJFTF9hdDwvaXRlbT4KKyAgICA8aXRlbT5Ac3RyaW5nL0JSQUlMTEVfRFJJVkVSX0xBQkVMX2JhPC9pdGVtPgorICAgIDxpdGVtPkBzdHJpbmcvQlJBSUxMRV9EUklWRVJfTEFCRUxfYmM8L2l0ZW0+CisgICAgPGl0ZW0+QHN0cmluZy9CUkFJTExFX0RSSVZFUl9MQUJFTF9iZDwvaXRlbT4KKyAgICA8aXRlbT5Ac3RyaW5nL0JSQUlMTEVfRFJJVkVSX0xBQkVMX2JsPC9pdGVtPgorICAgIDxpdGVtPkBzdHJpbmcvQlJBSUxMRV9EUklWRVJfTEFCRUxfYm08L2l0ZW0+CisgICAgPGl0ZW0+QHN0cmluZy9CUkFJTExFX0RSSVZFUl9MQUJFTF9ibjwvaXRlbT4KKyAgICA8aXRlbT5Ac3RyaW5nL0JSQUlMTEVfRFJJVkVSX0xBQkVMX2NiPC9pdGVtPgorICAgIDxpdGVtPkBzdHJpbmcvQlJBSUxMRV9EUklWRVJfTEFCRUxfY2U8L2l0ZW0+CisgICAgPGl0ZW0+QHN0cmluZy9CUkFJTExFX0RSSVZFUl9MQUJFTF9jbjwvaXRlbT4KKyAgICA8aXRlbT5Ac3RyaW5nL0JSQUlMTEVfRFJJVkVSX0xBQkVMX2RwPC9pdGVtPgorICAgIDxpdGVtPkBzdHJpbmcvQlJBSUxMRV9EUklWRVJfTEFCRUxfZWM8L2l0ZW0+CisgICAgPGl0ZW0+QHN0cmluZy9CUkFJTExFX0RSSVZFUl9MQUJFTF9ldTwvaXRlbT4KKyAgICA8aXRlbT5Ac3RyaW5nL0JSQUlMTEVfRFJJVkVSX0xBQkVMX2ZhPC9pdGVtPgorICAgIDxpdGVtPkBzdHJpbmcvQlJBSUxMRV9EUklWRVJfTEFCRUxfZnM8L2l0ZW0+CisgICAgPGl0ZW0+QHN0cmluZy9CUkFJTExFX0RSSVZFUl9MQUJFTF9oZDwvaXRlbT4KKyAgICA8aXRlbT5Ac3RyaW5nL0JSQUlMTEVfRFJJVkVSX0xBQkVMX2htPC9pdGVtPgorICAgIDxpdGVtPkBzdHJpbmcvQlJBSUxMRV9EUklWRVJfTEFCRUxfaHQ8L2l0ZW0+CisgICAgPGl0ZW0+QHN0cmluZy9CUkFJTExFX0RSSVZFUl9MQUJFTF9odzwvaXRlbT4KKyAgICA8aXRlbT5Ac3RyaW5nL0JSQUlMTEVfRFJJVkVSX0xBQkVMX2ljPC9pdGVtPgorICAgIDxpdGVtPkBzdHJpbmcvQlJBSUxMRV9EUklWRVJfTEFCRUxfaXI8L2l0ZW0+CisgICAgPGl0ZW0+QHN0cmluZy9CUkFJTExFX0RSSVZFUl9MQUJFTF9sYjwvaXRlbT4KKyAgICA8aXRlbT5Ac3RyaW5nL0JSQUlMTEVfRFJJVkVSX0xBQkVMX2x0PC9pdGVtPgorICAgIDxpdGVtPkBzdHJpbmcvQlJBSUxMRV9EUklWRVJfTEFCRUxfbWI8L2l0ZW0+CisgICAgPGl0ZW0+QHN0cmluZy9CUkFJTExFX0RSSVZFUl9MQUJFTF9tZDwvaXRlbT4KKyAgICA8aXRlbT5Ac3RyaW5nL0JSQUlMTEVfRFJJVkVSX0xBQkVMX21tPC9pdGVtPgorICAgIDxpdGVtPkBzdHJpbmcvQlJBSUxMRV9EUklWRVJfTEFCRUxfbW48L2l0ZW0+CisgICAgPGl0ZW0+QHN0cmluZy9CUkFJTExFX0RSSVZFUl9MQUJFTF9tdDwvaXRlbT4KKyAgICA8aXRlbT5Ac3RyaW5nL0JSQUlMTEVfRFJJVkVSX0xBQkVMX25wPC9pdGVtPgorICAgIDxpdGVtPkBzdHJpbmcvQlJBSUxMRV9EUklWRVJfTEFCRUxfcGc8L2l0ZW0+CisgICAgPGl0ZW0+QHN0cmluZy9CUkFJTExFX0RSSVZFUl9MQUJFTF9wbTwvaXRlbT4KKyAgICA8aXRlbT5Ac3RyaW5nL0JSQUlMTEVfRFJJVkVSX0xBQkVMX3NrPC9pdGVtPgorICAgIDxpdGVtPkBzdHJpbmcvQlJBSUxMRV9EUklWRVJfTEFCRUxfdG48L2l0ZW0+CisgICAgPGl0ZW0+QHN0cmluZy9CUkFJTExFX0RSSVZFUl9MQUJFTF90czwvaXRlbT4KKyAgICA8aXRlbT5Ac3RyaW5nL0JSQUlMTEVfRFJJVkVSX0xBQkVMX3ZkPC9pdGVtPgorICAgIDxpdGVtPkBzdHJpbmcvQlJBSUxMRV9EUklWRVJfTEFCRUxfdm88L2l0ZW0+CisgICAgPGl0ZW0+QHN0cmluZy9CUkFJTExFX0RSSVZFUl9MQUJFTF92czwvaXRlbT4KKyAgPC9zdHJpbmctYXJyYXk+CisKKyAgPHN0cmluZy1hcnJheSBuYW1lPSJCUkFJTExFX0RSSVZFUl9WQUxVRVMiPgorICAgIDxpdGVtPmF1dG88L2l0ZW0+CisgICAgPGl0ZW0+YWw8L2l0ZW0+CisgICAgPGl0ZW0+YXQ8L2l0ZW0+CisgICAgPGl0ZW0+YmE8L2l0ZW0+CisgICAgPGl0ZW0+YmM8L2l0ZW0+CisgICAgPGl0ZW0+YmQ8L2l0ZW0+CisgICAgPGl0ZW0+Ymw8L2l0ZW0+CisgICAgPGl0ZW0+Ym08L2l0ZW0+CisgICAgPGl0ZW0+Ym48L2l0ZW0+CisgICAgPGl0ZW0+Y2I8L2l0ZW0+CisgICAgPGl0ZW0+Y2U8L2l0ZW0+CisgICAgPGl0ZW0+Y248L2l0ZW0+CisgICAgPGl0ZW0+ZHA8L2l0ZW0+CisgICAgPGl0ZW0+ZWM8L2l0ZW0+CisgICAgPGl0ZW0+ZXU8L2l0ZW0+CisgICAgPGl0ZW0+ZmE8L2l0ZW0+CisgICAgPGl0ZW0+ZnM8L2l0ZW0+CisgICAgPGl0ZW0+aGQ8L2l0ZW0+CisgICAgPGl0ZW0+aG08L2l0ZW0+CisgICAgPGl0ZW0+aHQ8L2l0ZW0+CisgICAgPGl0ZW0+aHc8L2l0ZW0+CisgICAgPGl0ZW0+aWM8L2l0ZW0+CisgICAgPGl0ZW0+aXI8L2l0ZW0+CisgICAgPGl0ZW0+bGI8L2l0ZW0+CisgICAgPGl0ZW0+bHQ8L2l0ZW0+CisgICAgPGl0ZW0+bWI8L2l0ZW0+CisgICAgPGl0ZW0+bWQ8L2l0ZW0+CisgICAgPGl0ZW0+bW08L2l0ZW0+CisgICAgPGl0ZW0+bW48L2l0ZW0+CisgICAgPGl0ZW0+bXQ8L2l0ZW0+CisgICAgPGl0ZW0+bnA8L2l0ZW0+CisgICAgPGl0ZW0+cGc8L2l0ZW0+CisgICAgPGl0ZW0+cG08L2l0ZW0+CisgICAgPGl0ZW0+c2s8L2l0ZW0+CisgICAgPGl0ZW0+dG48L2l0ZW0+CisgICAgPGl0ZW0+dHM8L2l0ZW0+CisgICAgPGl0ZW0+dmQ8L2l0ZW0+CisgICAgPGl0ZW0+dm88L2l0ZW0+CisgICAgPGl0ZW0+dnM8L2l0ZW0+CisgIDwvc3RyaW5nLWFycmF5PgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9BbmRyb2lkL0dyYWRsZS9hcHAvc3JjL21haW4vcmVzL3ZhbHVlcy9jb21tdW5pY2F0aW9uLW1ldGhvZC54bWwgYi9BbmRyb2lkL0dyYWRsZS9hcHAvc3JjL21haW4vcmVzL3ZhbHVlcy9jb21tdW5pY2F0aW9uLW1ldGhvZC54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGY1NjAxNQotLS0gL2Rldi9udWxsCisrKyBiL0FuZHJvaWQvR3JhZGxlL2FwcC9zcmMvbWFpbi9yZXMvdmFsdWVzL2NvbW11bmljYXRpb24tbWV0aG9kLnhtbApAQCAtMCwwICsxLDE5IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgorCis8cmVzb3VyY2VzPgorICA8c3RyaW5nIG5hbWU9IkNPTU1VTklDQVRJT05fTUVUSE9EX0xBQkVMX0JsdWV0b290aCI+Qmx1ZXRvb3RoPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iQ09NTVVOSUNBVElPTl9NRVRIT0RfTEFCRUxfVXNiIj5VU0I8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJDT01NVU5JQ0FUSU9OX01FVEhPRF9MQUJFTF9TZXJpYWwiPlNlcmlhbDwvc3RyaW5nPgorCisgIDxzdHJpbmctYXJyYXkgbmFtZT0iREVWSUNFX01FVEhPRF9MQUJFTFMiPgorICAgIDxpdGVtPkBzdHJpbmcvQ09NTVVOSUNBVElPTl9NRVRIT0RfTEFCRUxfQmx1ZXRvb3RoPC9pdGVtPgorICAgIDxpdGVtPkBzdHJpbmcvQ09NTVVOSUNBVElPTl9NRVRIT0RfTEFCRUxfVXNiPC9pdGVtPgorICAgIDxpdGVtPkBzdHJpbmcvQ09NTVVOSUNBVElPTl9NRVRIT0RfTEFCRUxfU2VyaWFsPC9pdGVtPgorICA8L3N0cmluZy1hcnJheT4KKworICA8c3RyaW5nLWFycmF5IG5hbWU9IkRFVklDRV9NRVRIT0RfVkFMVUVTIj4KKyAgICA8aXRlbT5CbHVldG9vdGg8L2l0ZW0+CisgICAgPGl0ZW0+VXNiPC9pdGVtPgorICAgIDxpdGVtPlNlcmlhbDwvaXRlbT4KKyAgPC9zdHJpbmctYXJyYXk+Cis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL0FuZHJvaWQvR3JhZGxlL2FwcC9zcmMvbWFpbi9yZXMvdmFsdWVzL2NvbnN0YW50cy54bWwgYi9BbmRyb2lkL0dyYWRsZS9hcHAvc3JjL21haW4vcmVzL3ZhbHVlcy9jb25zdGFudHMueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNkZmNkMmMKLS0tIC9kZXYvbnVsbAorKysgYi9BbmRyb2lkL0dyYWRsZS9hcHAvc3JjL21haW4vcmVzL3ZhbHVlcy9jb25zdGFudHMueG1sCkBAIC0wLDAgKzEsMjEgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+CisKKzxyZXNvdXJjZXM+CisgIDxzdHJpbmcgbmFtZT0iYXBwX25hbWUiIHRyYW5zbGF0YWJsZT0iZmFsc2UiPkJSTFRUWTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9ImFwaV9uYW1lIiB0cmFuc2xhdGFibGU9ImZhbHNlIj5CcmxBUEk8L3N0cmluZz4KKworICA8c3RyaW5nIG5hbWU9ImFwcGxpY2F0aW9uX3BhY2thZ2VfdXJsIiB0cmFuc2xhdGFibGU9ImZhbHNlIj5odHRwczovL2JybHR0eS5hcHAvYXJjaGl2ZS9BbmRyb2lkL2JybHR0eS1sYXRlc3QuYXBrPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iZGV2ZWxvcGVyX3BhY2thZ2VfdXJsIiB0cmFuc2xhdGFibGU9ImZhbHNlIj5odHRwczovL21pZWxrZS5jYy9+YW5kcm9pZC9icmx0dHktZGV2LmFwazwvc3RyaW5nPgorCisgIDxzdHJpbmcgbmFtZT0icHJpdmFjeV9wb2xpY3lfdXJsIiB0cmFuc2xhdGFibGU9ImZhbHNlIj5odHRwczovL2JybHR0eS5hcHAvZG9jL1ByaXZhY3lQb2xpY3kuaHRtbDwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9InVzZXJfZ3VpZGVfdXJsIiB0cmFuc2xhdGFibGU9ImZhbHNlIj5odHRwczovL2JybHR0eS5hcHAvZG9jL0FuZHJvaWQuaHRtbDwvc3RyaW5nPgorCisgIDxzdHJpbmcgbmFtZT0iY29tbXVuaXR5X21lc3NhZ2VzX3VybCIgdHJhbnNsYXRhYmxlPSJmYWxzZSI+aHR0cHM6Ly9icmx0dHkuYXBwL3BpcGVybWFpbC9icmx0dHkvPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iY29tbXVuaXR5X21lbWJlcnNoaXBfdXJsIiB0cmFuc2xhdGFibGU9ImZhbHNlIj5odHRwczovL2JybHR0eS5hcHAvbWFpbG1hbi9saXN0aW5mby9icmx0dHk8L3N0cmluZz4KKworICA8c3RyaW5nIG5hbWU9Imdvb2dsZV9wbGF5X3VybCIgdHJhbnNsYXRhYmxlPSJmYWxzZSI+aHR0cHM6Ly9wbGF5Lmdvb2dsZS5jb20vc3RvcmUvYXBwcy9kZXRhaWxzP2lkPW9yZy5hMTF5LmJybHR0eS5hbmRyb2lkPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iZ29vZ2xlX3BsYXlfbGFiZWwiIHRyYW5zbGF0YWJsZT0iZmFsc2UiPkdvb2dsZSBQbGF5PC9zdHJpbmc+CisKKyAgPHN0cmluZy1hcnJheSBuYW1lPSJFTVBUWV9TVFJJTkdfQVJSQVkiPgorICA8L3N0cmluZy1hcnJheT4KKzwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvQW5kcm9pZC9HcmFkbGUvYXBwL3NyYy9tYWluL3Jlcy92YWx1ZXMvY29udHJhY3Rpb24tdGFibGUueG1sIGIvQW5kcm9pZC9HcmFkbGUvYXBwL3NyYy9tYWluL3Jlcy92YWx1ZXMvY29udHJhY3Rpb24tdGFibGUueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkwZDg3NzUKLS0tIC9kZXYvbnVsbAorKysgYi9BbmRyb2lkL0dyYWRsZS9hcHAvc3JjL21haW4vcmVzL3ZhbHVlcy9jb250cmFjdGlvbi10YWJsZS54bWwKQEAgLTAsMCArMSwxMjcgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+CisKKzwhLS0gZ2VuZXJhdGVkIGZyb20gYnJsdHR5LmNvbmYuaW4gYnkgbWtzZXR0aW5ncyAtLT4KKzwhLS0gY2hhbmdlcyBtYWRlIGhlcmUgd2lsbCBiZSBvdmVyd3JpdHRlbiAtLT4KKworPHJlc291cmNlcz4KKyAgPHN0cmluZyBuYW1lPSJDT05UUkFDVElPTl9UQUJMRV9MQUJFTF9hdXRvIiB0cmFuc2xhdGFibGU9InRydWUiPmxvY2FsZS1iYXNlZCBhdXRvc2VsZWN0aW9uPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iQ09OVFJBQ1RJT05fVEFCTEVfTEFCRUxfYWYiIHRyYW5zbGF0YWJsZT0idHJ1ZSI+QWZyaWthYW5zIChjb250cmFjdGVkKTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkNPTlRSQUNUSU9OX1RBQkxFX0xBQkVMX2FtIiB0cmFuc2xhdGFibGU9InRydWUiPkFtaGFyaWMgKHVuY29udHJhY3RlZCk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJDT05UUkFDVElPTl9UQUJMRV9MQUJFTF9kZSIgdHJhbnNsYXRhYmxlPSJ0cnVlIj5HZXJtYW48L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJDT05UUkFDVElPTl9UQUJMRV9MQUJFTF9kZV8xOTk4IiB0cmFuc2xhdGFibGU9InRydWUiPkdlcm1hbiAoY29udHJhY3RlZCAtIDE5OTggc3RhbmRhcmQpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iQ09OVFJBQ1RJT05fVEFCTEVfTEFCRUxfZGVfMjAxNSIgdHJhbnNsYXRhYmxlPSJ0cnVlIj5HZXJtYW4gKGNvbnRyYWN0ZWQgLSAyMDE1IHN0YW5kYXJkKTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkNPTlRSQUNUSU9OX1RBQkxFX0xBQkVMX2RlX2cwIiB0cmFuc2xhdGFibGU9InRydWUiPkdlcm1hbiAodW5jb250cmFjdGVkKTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkNPTlRSQUNUSU9OX1RBQkxFX0xBQkVMX2RlX2cxIiB0cmFuc2xhdGFibGU9InRydWUiPkdlcm1hbiAoYmFzaWMgY29udHJhY3Rpb25zKTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkNPTlRSQUNUSU9OX1RBQkxFX0xBQkVMX2RlX2cyIiB0cmFuc2xhdGFibGU9InRydWUiPkdlcm1hbiAoY29udHJhY3RlZCk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJDT05UUkFDVElPTl9UQUJMRV9MQUJFTF9lbiIgdHJhbnNsYXRhYmxlPSJ0cnVlIj5FbmdsaXNoPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iQ09OVFJBQ1RJT05fVEFCTEVfTEFCRUxfZW5fdWViX2cxIiB0cmFuc2xhdGFibGU9InRydWUiPkVuZ2xpc2ggKFVuaWZpZWQsIHVuY29udHJhY3RlZCk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJDT05UUkFDVElPTl9UQUJMRV9MQUJFTF9lbl91ZWJfZzIiIHRyYW5zbGF0YWJsZT0idHJ1ZSI+RW5nbGlzaCAoVW5pZmllZCwgY29udHJhY3RlZCk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJDT05UUkFDVElPTl9UQUJMRV9MQUJFTF9lbl91c19nMiIgdHJhbnNsYXRhYmxlPSJ0cnVlIj5FbmdsaXNoIChVbml0ZWQgU3RhdGVzLCBjb250cmFjdGVkKTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkNPTlRSQUNUSU9OX1RBQkxFX0xBQkVMX2VuX1VTIiB0cmFuc2xhdGFibGU9InRydWUiPkVuZ2xpc2ggKFVuaXRlZCBTdGF0ZXMpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iQ09OVFJBQ1RJT05fVEFCTEVfTEFCRUxfZXMiIHRyYW5zbGF0YWJsZT0idHJ1ZSI+U3BhbmlzaCAoY29udHJhY3RlZCk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJDT05UUkFDVElPTl9UQUJMRV9MQUJFTF9mciIgdHJhbnNsYXRhYmxlPSJ0cnVlIj5GcmVuY2g8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJDT05UUkFDVElPTl9UQUJMRV9MQUJFTF9mcl9nMSIgdHJhbnNsYXRhYmxlPSJ0cnVlIj5GcmVuY2ggKHVuY29udHJhY3RlZCk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJDT05UUkFDVElPTl9UQUJMRV9MQUJFTF9mcl9nMiIgdHJhbnNsYXRhYmxlPSJ0cnVlIj5GcmVuY2ggKGNvbnRyYWN0ZWQpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iQ09OVFJBQ1RJT05fVEFCTEVfTEFCRUxfaGEiIHRyYW5zbGF0YWJsZT0idHJ1ZSI+SGF1c2EgKGNvbnRyYWN0ZWQpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iQ09OVFJBQ1RJT05fVEFCTEVfTEFCRUxfaWQiIHRyYW5zbGF0YWJsZT0idHJ1ZSI+SW5kb25lc2lhbiAoY29udHJhY3RlZCk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJDT05UUkFDVElPTl9UQUJMRV9MQUJFTF9pcGEiIHRyYW5zbGF0YWJsZT0idHJ1ZSI+SW50ZXJuYXRpb25hbCBQaG9uZXRpYyBBbHBoYWJldDwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkNPTlRSQUNUSU9OX1RBQkxFX0xBQkVMX2phIiB0cmFuc2xhdGFibGU9InRydWUiPkphcGFuZXNlICh1bmNvbnRyYWN0ZWQpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iQ09OVFJBQ1RJT05fVEFCTEVfTEFCRUxfa28iIHRyYW5zbGF0YWJsZT0idHJ1ZSI+S29yZWFuPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iQ09OVFJBQ1RJT05fVEFCTEVfTEFCRUxfa29fZzAiIHRyYW5zbGF0YWJsZT0idHJ1ZSI+S29yZWFuICh1bmNvbnRyYWN0ZWQpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iQ09OVFJBQ1RJT05fVEFCTEVfTEFCRUxfa29fZzEiIHRyYW5zbGF0YWJsZT0idHJ1ZSI+S29yZWFuIChwYXJ0aWFsbHkgY29udHJhY3RlZCk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJDT05UUkFDVElPTl9UQUJMRV9MQUJFTF9rb19nMiIgdHJhbnNsYXRhYmxlPSJ0cnVlIj5Lb3JlYW4gKGNvbnRyYWN0ZWQpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iQ09OVFJBQ1RJT05fVEFCTEVfTEFCRUxfbHQiIHRyYW5zbGF0YWJsZT0idHJ1ZSI+TGl0aHVhbmlhbiAodW5jb250cmFjdGVkKTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkNPTlRSQUNUSU9OX1RBQkxFX0xBQkVMX21nIiB0cmFuc2xhdGFibGU9InRydWUiPk1hbGFnYXN5IChjb250cmFjdGVkKTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkNPTlRSQUNUSU9OX1RBQkxFX0xBQkVMX211biIgdHJhbnNsYXRhYmxlPSJ0cnVlIj5NdW5kYSAoY29udHJhY3RlZCk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJDT05UUkFDVElPTl9UQUJMRV9MQUJFTF9ubCIgdHJhbnNsYXRhYmxlPSJ0cnVlIj5EdXRjaCAoY29udHJhY3RlZCk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJDT05UUkFDVElPTl9UQUJMRV9MQUJFTF9ueSIgdHJhbnNsYXRhYmxlPSJ0cnVlIj5DaGljaGV3YSAoY29udHJhY3RlZCk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJDT05UUkFDVElPTl9UQUJMRV9MQUJFTF9wdCIgdHJhbnNsYXRhYmxlPSJ0cnVlIj5Qb3J0dWd1ZXNlIChjb250cmFjdGVkKTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkNPTlRSQUNUSU9OX1RBQkxFX0xBQkVMX3J1IiB0cmFuc2xhdGFibGU9InRydWUiPlJ1c3NpYW4gKGNvbnRyYWN0ZWQpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iQ09OVFJBQ1RJT05fVEFCTEVfTEFCRUxfc2kiIHRyYW5zbGF0YWJsZT0idHJ1ZSI+U2luaGFsZXNlICh1bmNvbnRyYWN0ZWQpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iQ09OVFJBQ1RJT05fVEFCTEVfTEFCRUxfc3ciIHRyYW5zbGF0YWJsZT0idHJ1ZSI+U3dhaGlsaSAoY29udHJhY3RlZCk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJDT05UUkFDVElPTl9UQUJMRV9MQUJFTF90aCIgdHJhbnNsYXRhYmxlPSJ0cnVlIj5UaGFpIChjb250cmFjdGVkKTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkNPTlRSQUNUSU9OX1RBQkxFX0xBQkVMX3poX1RXIiB0cmFuc2xhdGFibGU9InRydWUiPkNoaW5lc2UgKFRhaXdhbiwgdW5jb250cmFjdGVkKTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkNPTlRSQUNUSU9OX1RBQkxFX0xBQkVMX3p1IiB0cmFuc2xhdGFibGU9InRydWUiPlp1bHUgKGNvbnRyYWN0ZWQpPC9zdHJpbmc+CisKKyAgPHN0cmluZy1hcnJheSBuYW1lPSJDT05UUkFDVElPTl9UQUJMRV9MQUJFTFMiPgorICAgIDxpdGVtPkBzdHJpbmcvQ09OVFJBQ1RJT05fVEFCTEVfTEFCRUxfYXV0bzwvaXRlbT4KKyAgICA8aXRlbT5Ac3RyaW5nL0NPTlRSQUNUSU9OX1RBQkxFX0xBQkVMX2FmPC9pdGVtPgorICAgIDxpdGVtPkBzdHJpbmcvQ09OVFJBQ1RJT05fVEFCTEVfTEFCRUxfYW08L2l0ZW0+CisgICAgPGl0ZW0+QHN0cmluZy9DT05UUkFDVElPTl9UQUJMRV9MQUJFTF9kZTwvaXRlbT4KKyAgICA8aXRlbT5Ac3RyaW5nL0NPTlRSQUNUSU9OX1RBQkxFX0xBQkVMX2RlXzE5OTg8L2l0ZW0+CisgICAgPGl0ZW0+QHN0cmluZy9DT05UUkFDVElPTl9UQUJMRV9MQUJFTF9kZV8yMDE1PC9pdGVtPgorICAgIDxpdGVtPkBzdHJpbmcvQ09OVFJBQ1RJT05fVEFCTEVfTEFCRUxfZGVfZzA8L2l0ZW0+CisgICAgPGl0ZW0+QHN0cmluZy9DT05UUkFDVElPTl9UQUJMRV9MQUJFTF9kZV9nMTwvaXRlbT4KKyAgICA8aXRlbT5Ac3RyaW5nL0NPTlRSQUNUSU9OX1RBQkxFX0xBQkVMX2RlX2cyPC9pdGVtPgorICAgIDxpdGVtPkBzdHJpbmcvQ09OVFJBQ1RJT05fVEFCTEVfTEFCRUxfZW48L2l0ZW0+CisgICAgPGl0ZW0+QHN0cmluZy9DT05UUkFDVElPTl9UQUJMRV9MQUJFTF9lbl91ZWJfZzE8L2l0ZW0+CisgICAgPGl0ZW0+QHN0cmluZy9DT05UUkFDVElPTl9UQUJMRV9MQUJFTF9lbl91ZWJfZzI8L2l0ZW0+CisgICAgPGl0ZW0+QHN0cmluZy9DT05UUkFDVElPTl9UQUJMRV9MQUJFTF9lbl91c19nMjwvaXRlbT4KKyAgICA8aXRlbT5Ac3RyaW5nL0NPTlRSQUNUSU9OX1RBQkxFX0xBQkVMX2VuX1VTPC9pdGVtPgorICAgIDxpdGVtPkBzdHJpbmcvQ09OVFJBQ1RJT05fVEFCTEVfTEFCRUxfZXM8L2l0ZW0+CisgICAgPGl0ZW0+QHN0cmluZy9DT05UUkFDVElPTl9UQUJMRV9MQUJFTF9mcjwvaXRlbT4KKyAgICA8aXRlbT5Ac3RyaW5nL0NPTlRSQUNUSU9OX1RBQkxFX0xBQkVMX2ZyX2cxPC9pdGVtPgorICAgIDxpdGVtPkBzdHJpbmcvQ09OVFJBQ1RJT05fVEFCTEVfTEFCRUxfZnJfZzI8L2l0ZW0+CisgICAgPGl0ZW0+QHN0cmluZy9DT05UUkFDVElPTl9UQUJMRV9MQUJFTF9oYTwvaXRlbT4KKyAgICA8aXRlbT5Ac3RyaW5nL0NPTlRSQUNUSU9OX1RBQkxFX0xBQkVMX2lkPC9pdGVtPgorICAgIDxpdGVtPkBzdHJpbmcvQ09OVFJBQ1RJT05fVEFCTEVfTEFCRUxfaXBhPC9pdGVtPgorICAgIDxpdGVtPkBzdHJpbmcvQ09OVFJBQ1RJT05fVEFCTEVfTEFCRUxfamE8L2l0ZW0+CisgICAgPGl0ZW0+QHN0cmluZy9DT05UUkFDVElPTl9UQUJMRV9MQUJFTF9rbzwvaXRlbT4KKyAgICA8aXRlbT5Ac3RyaW5nL0NPTlRSQUNUSU9OX1RBQkxFX0xBQkVMX2tvX2cwPC9pdGVtPgorICAgIDxpdGVtPkBzdHJpbmcvQ09OVFJBQ1RJT05fVEFCTEVfTEFCRUxfa29fZzE8L2l0ZW0+CisgICAgPGl0ZW0+QHN0cmluZy9DT05UUkFDVElPTl9UQUJMRV9MQUJFTF9rb19nMjwvaXRlbT4KKyAgICA8aXRlbT5Ac3RyaW5nL0NPTlRSQUNUSU9OX1RBQkxFX0xBQkVMX2x0PC9pdGVtPgorICAgIDxpdGVtPkBzdHJpbmcvQ09OVFJBQ1RJT05fVEFCTEVfTEFCRUxfbWc8L2l0ZW0+CisgICAgPGl0ZW0+QHN0cmluZy9DT05UUkFDVElPTl9UQUJMRV9MQUJFTF9tdW48L2l0ZW0+CisgICAgPGl0ZW0+QHN0cmluZy9DT05UUkFDVElPTl9UQUJMRV9MQUJFTF9ubDwvaXRlbT4KKyAgICA8aXRlbT5Ac3RyaW5nL0NPTlRSQUNUSU9OX1RBQkxFX0xBQkVMX255PC9pdGVtPgorICAgIDxpdGVtPkBzdHJpbmcvQ09OVFJBQ1RJT05fVEFCTEVfTEFCRUxfcHQ8L2l0ZW0+CisgICAgPGl0ZW0+QHN0cmluZy9DT05UUkFDVElPTl9UQUJMRV9MQUJFTF9ydTwvaXRlbT4KKyAgICA8aXRlbT5Ac3RyaW5nL0NPTlRSQUNUSU9OX1RBQkxFX0xBQkVMX3NpPC9pdGVtPgorICAgIDxpdGVtPkBzdHJpbmcvQ09OVFJBQ1RJT05fVEFCTEVfTEFCRUxfc3c8L2l0ZW0+CisgICAgPGl0ZW0+QHN0cmluZy9DT05UUkFDVElPTl9UQUJMRV9MQUJFTF90aDwvaXRlbT4KKyAgICA8aXRlbT5Ac3RyaW5nL0NPTlRSQUNUSU9OX1RBQkxFX0xBQkVMX3poX1RXPC9pdGVtPgorICAgIDxpdGVtPkBzdHJpbmcvQ09OVFJBQ1RJT05fVEFCTEVfTEFCRUxfenU8L2l0ZW0+CisgIDwvc3RyaW5nLWFycmF5PgorCisgIDxzdHJpbmctYXJyYXkgbmFtZT0iQ09OVFJBQ1RJT05fVEFCTEVfVkFMVUVTIj4KKyAgICA8aXRlbT5hdXRvPC9pdGVtPgorICAgIDxpdGVtPmFmPC9pdGVtPgorICAgIDxpdGVtPmFtPC9pdGVtPgorICAgIDxpdGVtPmRlPC9pdGVtPgorICAgIDxpdGVtPmRlLTE5OTg8L2l0ZW0+CisgICAgPGl0ZW0+ZGUtMjAxNTwvaXRlbT4KKyAgICA8aXRlbT5kZS1nMDwvaXRlbT4KKyAgICA8aXRlbT5kZS1nMTwvaXRlbT4KKyAgICA8aXRlbT5kZS1nMjwvaXRlbT4KKyAgICA8aXRlbT5lbjwvaXRlbT4KKyAgICA8aXRlbT5lbi11ZWItZzE8L2l0ZW0+CisgICAgPGl0ZW0+ZW4tdWViLWcyPC9pdGVtPgorICAgIDxpdGVtPmVuLXVzLWcyPC9pdGVtPgorICAgIDxpdGVtPmVuX1VTPC9pdGVtPgorICAgIDxpdGVtPmVzPC9pdGVtPgorICAgIDxpdGVtPmZyPC9pdGVtPgorICAgIDxpdGVtPmZyLWcxPC9pdGVtPgorICAgIDxpdGVtPmZyLWcyPC9pdGVtPgorICAgIDxpdGVtPmhhPC9pdGVtPgorICAgIDxpdGVtPmlkPC9pdGVtPgorICAgIDxpdGVtPmlwYTwvaXRlbT4KKyAgICA8aXRlbT5qYTwvaXRlbT4KKyAgICA8aXRlbT5rbzwvaXRlbT4KKyAgICA8aXRlbT5rby1nMDwvaXRlbT4KKyAgICA8aXRlbT5rby1nMTwvaXRlbT4KKyAgICA8aXRlbT5rby1nMjwvaXRlbT4KKyAgICA8aXRlbT5sdDwvaXRlbT4KKyAgICA8aXRlbT5tZzwvaXRlbT4KKyAgICA8aXRlbT5tdW48L2l0ZW0+CisgICAgPGl0ZW0+bmw8L2l0ZW0+CisgICAgPGl0ZW0+bnk8L2l0ZW0+CisgICAgPGl0ZW0+cHQ8L2l0ZW0+CisgICAgPGl0ZW0+cnU8L2l0ZW0+CisgICAgPGl0ZW0+c2k8L2l0ZW0+CisgICAgPGl0ZW0+c3c8L2l0ZW0+CisgICAgPGl0ZW0+dGg8L2l0ZW0+CisgICAgPGl0ZW0+emhfVFc8L2l0ZW0+CisgICAgPGl0ZW0+enU8L2l0ZW0+CisgIDwvc3RyaW5nLWFycmF5PgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9BbmRyb2lkL0dyYWRsZS9hcHAvc3JjL21haW4vcmVzL3ZhbHVlcy9kZWZhdWx0cy54bWwgYi9BbmRyb2lkL0dyYWRsZS9hcHAvc3JjL21haW4vcmVzL3ZhbHVlcy9kZWZhdWx0cy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzE5ZDY2NwotLS0gL2Rldi9udWxsCisrKyBiL0FuZHJvaWQvR3JhZGxlL2FwcC9zcmMvbWFpbi9yZXMvdmFsdWVzL2RlZmF1bHRzLnhtbApAQCAtMCwwICsxLDEzIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgorCis8cmVzb3VyY2VzIHhtbG5zOnRvb2xzPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS90b29scyI+CisgIDxzdHJpbmcgbmFtZT0iREVGQVVMVF9BVFRSSUJVVEVTX1RBQkxFIiB0cmFuc2xhdGFibGU9ImZhbHNlIj51cHBlcl9sb3dlcjwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkRFRkFVTFRfQlJBSUxMRV9EUklWRVIiIHRyYW5zbGF0YWJsZT0iZmFsc2UiPmF1dG88L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJERUZBVUxUX0NPTU1VTklDQVRJT05fTUVUSE9EIiB0cmFuc2xhdGFibGU9ImZhbHNlIj5CbHVldG9vdGg8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJERUZBVUxUX0NPTlRSQUNUSU9OX1RBQkxFIiB0b29sczppZ25vcmU9Ik1pc3NpbmdUcmFuc2xhdGlvbiI+YXV0bzwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkRFRkFVTFRfS0VZQk9BUkRfVEFCTEUiIHRyYW5zbGF0YWJsZT0iZmFsc2UiPm9mZjwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkRFRkFVTFRfTE9HX0xFVkVMIiB0cmFuc2xhdGFibGU9ImZhbHNlIj5ub3RpY2U8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJERUZBVUxUX05BVklHQVRJT05fTU9ERSIgdHJhbnNsYXRhYmxlPSJmYWxzZSI+TGlzdDwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkRFRkFVTFRfU1BFRUNIX1NVUFBPUlQiIHRyYW5zbGF0YWJsZT0iZmFsc2UiPmFuPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iREVGQVVMVF9URVhUX1RBQkxFIiB0b29sczppZ25vcmU9Ik1pc3NpbmdUcmFuc2xhdGlvbiI+YXV0bzwvc3RyaW5nPgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9BbmRyb2lkL0dyYWRsZS9hcHAvc3JjL21haW4vcmVzL3ZhbHVlcy9rZXlib2FyZC10YWJsZS54bWwgYi9BbmRyb2lkL0dyYWRsZS9hcHAvc3JjL21haW4vcmVzL3ZhbHVlcy9rZXlib2FyZC10YWJsZS54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjVjM2M0NwotLS0gL2Rldi9udWxsCisrKyBiL0FuZHJvaWQvR3JhZGxlL2FwcC9zcmMvbWFpbi9yZXMvdmFsdWVzL2tleWJvYXJkLXRhYmxlLnhtbApAQCAtMCwwICsxLDMwIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgorCis8IS0tIGdlbmVyYXRlZCBmcm9tIGJybHR0eS5jb25mLmluIGJ5IG1rc2V0dGluZ3MgLS0+Cis8IS0tIGNoYW5nZXMgbWFkZSBoZXJlIHdpbGwgYmUgb3ZlcndyaXR0ZW4gLS0+CisKKzxyZXNvdXJjZXM+CisgIDxzdHJpbmcgbmFtZT0iS0VZQk9BUkRfVEFCTEVfTEFCRUxfYnJhaWxsZSIgdHJhbnNsYXRhYmxlPSJ0cnVlIj5iaW5kaW5ncyBmb3IgYnJhaWxsZSBrZXlib2FyZHM8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJLRVlCT0FSRF9UQUJMRV9MQUJFTF9kZXNrdG9wIiB0cmFuc2xhdGFibGU9InRydWUiPmJpbmRpbmdzIGZvciBmdWxsIGtleWJvYXJkczwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IktFWUJPQVJEX1RBQkxFX0xBQkVMX2tleXBhZCIgdHJhbnNsYXRhYmxlPSJ0cnVlIj5iaW5kaW5ncyBmb3Iga2V5cGFkLWJhc2VkIG5hdmlnYXRpb248L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJLRVlCT0FSRF9UQUJMRV9MQUJFTF9sYXB0b3AiIHRyYW5zbGF0YWJsZT0idHJ1ZSI+YmluZGluZ3MgZm9yIGtleWJvYXJkcyB3aXRob3V0IGEga2V5cGFkPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iS0VZQk9BUkRfVEFCTEVfTEFCRUxfc3VuX3R5cGU2IiB0cmFuc2xhdGFibGU9InRydWUiPmJpbmRpbmdzIGZvciBTdW4gVHlwZSA2IGtleWJvYXJkczwvc3RyaW5nPgorCisgIDxzdHJpbmctYXJyYXkgbmFtZT0iS0VZQk9BUkRfVEFCTEVfTEFCRUxTIj4KKyAgICA8aXRlbT5Ac3RyaW5nL3NldHRpbmdfc3RhdGVfb2ZmPC9pdGVtPgorICAgIDxpdGVtPkBzdHJpbmcvS0VZQk9BUkRfVEFCTEVfTEFCRUxfYnJhaWxsZTwvaXRlbT4KKyAgICA8aXRlbT5Ac3RyaW5nL0tFWUJPQVJEX1RBQkxFX0xBQkVMX2Rlc2t0b3A8L2l0ZW0+CisgICAgPGl0ZW0+QHN0cmluZy9LRVlCT0FSRF9UQUJMRV9MQUJFTF9rZXlwYWQ8L2l0ZW0+CisgICAgPGl0ZW0+QHN0cmluZy9LRVlCT0FSRF9UQUJMRV9MQUJFTF9sYXB0b3A8L2l0ZW0+CisgICAgPGl0ZW0+QHN0cmluZy9LRVlCT0FSRF9UQUJMRV9MQUJFTF9zdW5fdHlwZTY8L2l0ZW0+CisgIDwvc3RyaW5nLWFycmF5PgorCisgIDxzdHJpbmctYXJyYXkgbmFtZT0iS0VZQk9BUkRfVEFCTEVfVkFMVUVTIj4KKyAgICA8aXRlbT5vZmY8L2l0ZW0+CisgICAgPGl0ZW0+YnJhaWxsZTwvaXRlbT4KKyAgICA8aXRlbT5kZXNrdG9wPC9pdGVtPgorICAgIDxpdGVtPmtleXBhZDwvaXRlbT4KKyAgICA8aXRlbT5sYXB0b3A8L2l0ZW0+CisgICAgPGl0ZW0+c3VuX3R5cGU2PC9pdGVtPgorICA8L3N0cmluZy1hcnJheT4KKzwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvQW5kcm9pZC9HcmFkbGUvYXBwL3NyYy9tYWluL3Jlcy92YWx1ZXMvbG9nLWNhdGVnb3J5LnhtbCBiL0FuZHJvaWQvR3JhZGxlL2FwcC9zcmMvbWFpbi9yZXMvdmFsdWVzL2xvZy1jYXRlZ29yeS54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjc5NTM1ZAotLS0gL2Rldi9udWxsCisrKyBiL0FuZHJvaWQvR3JhZGxlL2FwcC9zcmMvbWFpbi9yZXMvdmFsdWVzL2xvZy1jYXRlZ29yeS54bWwKQEAgLTAsMCArMSw2NCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KKworPHJlc291cmNlcz4KKyAgPHN0cmluZyBuYW1lPSJMT0dfQ0FURUdPUllfTEFCRUxfaW5wa3RzIj5JbnB1dCBQYWNrZXRzPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iTE9HX0NBVEVHT1JZX0xBQkVMX291dHBrdHMiPk91dHB1dCBQYWNrZXRzPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iTE9HX0NBVEVHT1JZX0xBQkVMX2JybGtleXMiPkJyYWlsbGUgRGV2aWNlIEtleSBFdmVudHM8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJMT0dfQ0FURUdPUllfTEFCRUxfa2Jka2V5cyI+S2V5Ym9hcmQgS2V5IEV2ZW50czwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkxPR19DQVRFR09SWV9MQUJFTF9jc3J0cmsiPkN1cnNvciBUcmFja2luZzwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkxPR19DQVRFR09SWV9MQUJFTF9jc3JydGciPkN1cnNvciBSb3V0aW5nPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iTE9HX0NBVEVHT1JZX0xBQkVMX3VwZGF0ZSI+VXBkYXRlIEV2ZW50czwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkxPR19DQVRFR09SWV9MQUJFTF9zcGVlY2giPlNwZWVjaCBFdmVudHM8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJMT0dfQ0FURUdPUllfTEFCRUxfYXN5bmMiPkFzeW5jIEV2ZW50czwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkxPR19DQVRFR09SWV9MQUJFTF9zZXJ2ZXIiPlNlcnZlciBFdmVudHM8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJMT0dfQ0FURUdPUllfTEFCRUxfZ2lvIj5HZW5lcmljIEkvTzwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkxPR19DQVRFR09SWV9MQUJFTF9zZXJpYWwiPlNlcmlhbCBJL088L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJMT0dfQ0FURUdPUllfTEFCRUxfdXNiIj5VU0IgSS9PPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iTE9HX0NBVEVHT1JZX0xBQkVMX2J0Ij5CbHVldG9vdGggSS9PPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iTE9HX0NBVEVHT1JZX0xBQkVMX2hpZCI+SHVtYW4gSW50ZXJmYWNlIEkvTzwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkxPR19DQVRFR09SWV9MQUJFTF9icmxkcnYiPkJyYWlsbGUgRHJpdmVyIEV2ZW50czwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkxPR19DQVRFR09SWV9MQUJFTF9zcGtkcnYiPlNwZWVjaCBEcml2ZXIgRXZlbnRzPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iTE9HX0NBVEVHT1JZX0xBQkVMX3NjcmRydiI+U2NyZWVuIERyaXZlciBFdmVudHM8L3N0cmluZz4KKworICA8c3RyaW5nLWFycmF5IG5hbWU9IkxPR19DQVRFR09SWV9MQUJFTFMiPgorICAgIDxpdGVtPkBzdHJpbmcvTE9HX0NBVEVHT1JZX0xBQkVMX2lucGt0czwvaXRlbT4KKyAgICA8aXRlbT5Ac3RyaW5nL0xPR19DQVRFR09SWV9MQUJFTF9vdXRwa3RzPC9pdGVtPgorICAgIDxpdGVtPkBzdHJpbmcvTE9HX0NBVEVHT1JZX0xBQkVMX2JybGtleXM8L2l0ZW0+CisgICAgPGl0ZW0+QHN0cmluZy9MT0dfQ0FURUdPUllfTEFCRUxfa2Jka2V5czwvaXRlbT4KKyAgICA8aXRlbT5Ac3RyaW5nL0xPR19DQVRFR09SWV9MQUJFTF9jc3J0cms8L2l0ZW0+CisgICAgPGl0ZW0+QHN0cmluZy9MT0dfQ0FURUdPUllfTEFCRUxfY3NycnRnPC9pdGVtPgorICAgIDxpdGVtPkBzdHJpbmcvTE9HX0NBVEVHT1JZX0xBQkVMX3VwZGF0ZTwvaXRlbT4KKyAgICA8aXRlbT5Ac3RyaW5nL0xPR19DQVRFR09SWV9MQUJFTF9zcGVlY2g8L2l0ZW0+CisgICAgPGl0ZW0+QHN0cmluZy9MT0dfQ0FURUdPUllfTEFCRUxfYXN5bmM8L2l0ZW0+CisgICAgPGl0ZW0+QHN0cmluZy9MT0dfQ0FURUdPUllfTEFCRUxfc2VydmVyPC9pdGVtPgorICAgIDxpdGVtPkBzdHJpbmcvTE9HX0NBVEVHT1JZX0xBQkVMX2dpbzwvaXRlbT4KKyAgICA8aXRlbT5Ac3RyaW5nL0xPR19DQVRFR09SWV9MQUJFTF9zZXJpYWw8L2l0ZW0+CisgICAgPGl0ZW0+QHN0cmluZy9MT0dfQ0FURUdPUllfTEFCRUxfdXNiPC9pdGVtPgorICAgIDxpdGVtPkBzdHJpbmcvTE9HX0NBVEVHT1JZX0xBQkVMX2J0PC9pdGVtPgorICAgIDxpdGVtPkBzdHJpbmcvTE9HX0NBVEVHT1JZX0xBQkVMX2hpZDwvaXRlbT4KKyAgICA8aXRlbT5Ac3RyaW5nL0xPR19DQVRFR09SWV9MQUJFTF9icmxkcnY8L2l0ZW0+CisgICAgPGl0ZW0+QHN0cmluZy9MT0dfQ0FURUdPUllfTEFCRUxfc3BrZHJ2PC9pdGVtPgorICAgIDxpdGVtPkBzdHJpbmcvTE9HX0NBVEVHT1JZX0xBQkVMX3NjcmRydjwvaXRlbT4KKyAgPC9zdHJpbmctYXJyYXk+CisKKyAgPHN0cmluZy1hcnJheSBuYW1lPSJMT0dfQ0FURUdPUllfVkFMVUVTIj4KKyAgICA8aXRlbT5pbnBrdHM8L2l0ZW0+CisgICAgPGl0ZW0+b3V0cGt0czwvaXRlbT4KKyAgICA8aXRlbT5icmxrZXlzPC9pdGVtPgorICAgIDxpdGVtPmtiZGtleXM8L2l0ZW0+CisgICAgPGl0ZW0+Y3NydHJrPC9pdGVtPgorICAgIDxpdGVtPmNzcnJ0ZzwvaXRlbT4KKyAgICA8aXRlbT51cGRhdGU8L2l0ZW0+CisgICAgPGl0ZW0+c3BlZWNoPC9pdGVtPgorICAgIDxpdGVtPmFzeW5jPC9pdGVtPgorICAgIDxpdGVtPnNlcnZlcjwvaXRlbT4KKyAgICA8aXRlbT5naW88L2l0ZW0+CisgICAgPGl0ZW0+c2VyaWFsPC9pdGVtPgorICAgIDxpdGVtPnVzYjwvaXRlbT4KKyAgICA8aXRlbT5idDwvaXRlbT4KKyAgICA8aXRlbT5oaWQ8L2l0ZW0+CisgICAgPGl0ZW0+YnJsZHJ2PC9pdGVtPgorICAgIDxpdGVtPnNwa2RydjwvaXRlbT4KKyAgICA8aXRlbT5zY3JkcnY8L2l0ZW0+CisgIDwvc3RyaW5nLWFycmF5PgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9BbmRyb2lkL0dyYWRsZS9hcHAvc3JjL21haW4vcmVzL3ZhbHVlcy9sb2ctbGV2ZWwueG1sIGIvQW5kcm9pZC9HcmFkbGUvYXBwL3NyYy9tYWluL3Jlcy92YWx1ZXMvbG9nLWxldmVsLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xODJmNzExCi0tLSAvZGV2L251bGwKKysrIGIvQW5kcm9pZC9HcmFkbGUvYXBwL3NyYy9tYWluL3Jlcy92YWx1ZXMvbG9nLWxldmVsLnhtbApAQCAtMCwwICsxLDM0IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgorCis8cmVzb3VyY2VzPgorICA8c3RyaW5nIG5hbWU9IkxPR19MRVZFTF9MQUJFTF9kZWJ1ZyI+RGVidWc8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJMT0dfTEVWRUxfTEFCRUxfaW5mb3JtYXRpb24iPkluZm9ybWF0aW9uPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iTE9HX0xFVkVMX0xBQkVMX25vdGljZSI+Tm90aWNlPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iTE9HX0xFVkVMX0xBQkVMX3dhcm5pbmciPldhcm5pbmc8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJMT0dfTEVWRUxfTEFCRUxfZXJyb3IiPkVycm9yPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iTE9HX0xFVkVMX0xBQkVMX2NyaXRpY2FsIj5Dcml0aWNhbDwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkxPR19MRVZFTF9MQUJFTF9hbGVydCI+QWxlcnQ8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJMT0dfTEVWRUxfTEFCRUxfZW1lcmdlbmN5Ij5FbWVyZ2VuY3k8L3N0cmluZz4KKworICA8c3RyaW5nLWFycmF5IG5hbWU9IkxPR19MRVZFTF9MQUJFTFMiPgorICAgIDxpdGVtPkBzdHJpbmcvTE9HX0xFVkVMX0xBQkVMX2RlYnVnPC9pdGVtPgorICAgIDxpdGVtPkBzdHJpbmcvTE9HX0xFVkVMX0xBQkVMX2luZm9ybWF0aW9uPC9pdGVtPgorICAgIDxpdGVtPkBzdHJpbmcvTE9HX0xFVkVMX0xBQkVMX25vdGljZTwvaXRlbT4KKyAgICA8aXRlbT5Ac3RyaW5nL0xPR19MRVZFTF9MQUJFTF93YXJuaW5nPC9pdGVtPgorICAgIDxpdGVtPkBzdHJpbmcvTE9HX0xFVkVMX0xBQkVMX2Vycm9yPC9pdGVtPgorICAgIDxpdGVtPkBzdHJpbmcvTE9HX0xFVkVMX0xBQkVMX2NyaXRpY2FsPC9pdGVtPgorICAgIDxpdGVtPkBzdHJpbmcvTE9HX0xFVkVMX0xBQkVMX2FsZXJ0PC9pdGVtPgorICAgIDxpdGVtPkBzdHJpbmcvTE9HX0xFVkVMX0xBQkVMX2VtZXJnZW5jeTwvaXRlbT4KKyAgPC9zdHJpbmctYXJyYXk+CisKKyAgPHN0cmluZy1hcnJheSBuYW1lPSJMT0dfTEVWRUxfVkFMVUVTIj4KKyAgICA8aXRlbT5kZWJ1ZzwvaXRlbT4KKyAgICA8aXRlbT5pbmZvcm1hdGlvbjwvaXRlbT4KKyAgICA8aXRlbT5ub3RpY2U8L2l0ZW0+CisgICAgPGl0ZW0+d2FybmluZzwvaXRlbT4KKyAgICA8aXRlbT5lcnJvcjwvaXRlbT4KKyAgICA8aXRlbT5jcml0aWNhbDwvaXRlbT4KKyAgICA8aXRlbT5hbGVydDwvaXRlbT4KKyAgICA8aXRlbT5lbWVyZ2VuY3k8L2l0ZW0+CisgIDwvc3RyaW5nLWFycmF5PgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9BbmRyb2lkL0dyYWRsZS9hcHAvc3JjL21haW4vcmVzL3ZhbHVlcy9uYXZpZ2F0aW9uLW1vZGUueG1sIGIvQW5kcm9pZC9HcmFkbGUvYXBwL3NyYy9tYWluL3Jlcy92YWx1ZXMvbmF2aWdhdGlvbi1tb2RlLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NmQ0N2Q4Ci0tLSAvZGV2L251bGwKKysrIGIvQW5kcm9pZC9HcmFkbGUvYXBwL3NyYy9tYWluL3Jlcy92YWx1ZXMvbmF2aWdhdGlvbi1tb2RlLnhtbApAQCAtMCwwICsxLDE2IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgorCis8cmVzb3VyY2VzPgorICA8c3RyaW5nIG5hbWU9Ik5BVklHQVRJT05fTU9ERV9MQUJFTF9MaXN0Ij5WZXJ0aWNhbCBMaXN0PC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iTkFWSUdBVElPTl9NT0RFX0xBQkVMX0dyaWQiPlR3byBEaW1lbnNpb25hbCBHcmlkPC9zdHJpbmc+CisKKyAgPHN0cmluZy1hcnJheSBuYW1lPSJOQVZJR0FUSU9OX01PREVfTEFCRUxTIj4KKyAgICA8aXRlbT5Ac3RyaW5nL05BVklHQVRJT05fTU9ERV9MQUJFTF9MaXN0PC9pdGVtPgorICAgIDxpdGVtPkBzdHJpbmcvTkFWSUdBVElPTl9NT0RFX0xBQkVMX0dyaWQ8L2l0ZW0+CisgIDwvc3RyaW5nLWFycmF5PgorCisgIDxzdHJpbmctYXJyYXkgbmFtZT0iTkFWSUdBVElPTl9NT0RFX1ZBTFVFUyI+CisgICAgPGl0ZW0+TGlzdDwvaXRlbT4KKyAgICA8aXRlbT5HcmlkPC9pdGVtPgorICA8L3N0cmluZy1hcnJheT4KKzwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvQW5kcm9pZC9HcmFkbGUvYXBwL3NyYy9tYWluL3Jlcy92YWx1ZXMvcHJlZi1rZXlzLnhtbCBiL0FuZHJvaWQvR3JhZGxlL2FwcC9zcmMvbWFpbi9yZXMvdmFsdWVzL3ByZWYta2V5cy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmQ1NDVlNwotLS0gL2Rldi9udWxsCisrKyBiL0FuZHJvaWQvR3JhZGxlL2FwcC9zcmMvbWFpbi9yZXMvdmFsdWVzL3ByZWYta2V5cy54bWwKQEAgLTAsMCArMSw0MSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KKworPHJlc291cmNlcz4KKyAgPHN0cmluZyBuYW1lPSJQUkVGX0tFWV9QQUNLQUdFX1NJWkUiIHRyYW5zbGF0YWJsZT0iZmFsc2UiPnBhY2thZ2Utc2l6ZTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlBSRUZfS0VZX1BBQ0tBR0VfVElNRSIgdHJhbnNsYXRhYmxlPSJmYWxzZSI+cGFja2FnZS10aW1lPC9zdHJpbmc+CisKKyAgPHN0cmluZyBuYW1lPSJQUkVGX0tFWV9SRUxFQVNFX0JSQUlMTEVfREVWSUNFIiB0cmFuc2xhdGFibGU9ImZhbHNlIj5yZWxlYXNlLWJyYWlsbGUtZGV2aWNlPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iUFJFRl9LRVlfTkFWSUdBVElPTl9NT0RFIiB0cmFuc2xhdGFibGU9ImZhbHNlIj5uYXZpZ2F0aW9uLW1vZGU8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJQUkVGX0tFWV9TUEVFQ0hfU1VQUE9SVCIgdHJhbnNsYXRhYmxlPSJmYWxzZSI+c3BlZWNoLXN1cHBvcnQ8L3N0cmluZz4KKworICA8c3RyaW5nIG5hbWU9IlBSRUZfS0VZX1RFWFRfVEFCTEUiIHRyYW5zbGF0YWJsZT0iZmFsc2UiPnRleHQtdGFibGU8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJQUkVGX0tFWV9BVFRSSUJVVEVTX1RBQkxFIiB0cmFuc2xhdGFibGU9ImZhbHNlIj5hdHRyaWJ1dGVzLXRhYmxlPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iUFJFRl9LRVlfQ09OVFJBQ1RJT05fVEFCTEUiIHRyYW5zbGF0YWJsZT0iZmFsc2UiPmNvbnRyYWN0aW9uLXRhYmxlPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iUFJFRl9LRVlfS0VZQk9BUkRfVEFCTEUiIHRyYW5zbGF0YWJsZT0iZmFsc2UiPmtleWJvYXJkLXRhYmxlPC9zdHJpbmc+CisKKyAgPHN0cmluZyBuYW1lPSJQUkVGX0tFWV9TSE9XX0FMRVJUUyIgdHJhbnNsYXRhYmxlPSJmYWxzZSI+c2hvdy1hbGVydHM8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJQUkVGX0tFWV9TSE9XX0FOTk9VTkNFTUVOVFMiIHRyYW5zbGF0YWJsZT0iZmFsc2UiPnNob3ctYW5ub3VuY2VtZW50czwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlBSRUZfS0VZX1NIT1dfTk9USUZJQ0FUSU9OUyIgdHJhbnNsYXRhYmxlPSJmYWxzZSI+c2hvdy1ub3RpZmljYXRpb25zPC9zdHJpbmc+CisKKyAgPHN0cmluZyBuYW1lPSJQUkVGX0tFWV9MT0dfTEVWRUwiIHRyYW5zbGF0YWJsZT0iZmFsc2UiPmxvZy1sZXZlbDwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlBSRUZfS0VZX0xPR19DQVRFR09SSUVTIiB0cmFuc2xhdGFibGU9ImZhbHNlIj5sb2ctY2F0ZWdvcmllczwvc3RyaW5nPgorCisgIDxzdHJpbmcgbmFtZT0iUFJFRl9LRVlfTE9HX0FDQ0VTU0lCSUxJVFlfRVZFTlRTIiB0cmFuc2xhdGFibGU9ImZhbHNlIj5sb2ctYWNjZXNzaWJpbGl0eS1ldmVudHM8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJQUkVGX0tFWV9MT0dfUkVOREVSRURfU0NSRUVOIiB0cmFuc2xhdGFibGU9ImZhbHNlIj5sb2ctcmVuZGVyZWQtc2NyZWVuPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iUFJFRl9LRVlfTE9HX0tFWUJPQVJEX0VWRU5UUyIgdHJhbnNsYXRhYmxlPSJmYWxzZSI+bG9nLWtleWJvYXJkLWV2ZW50czwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlBSRUZfS0VZX0xPR19VTkhBTkRMRURfRVZFTlRTIiB0cmFuc2xhdGFibGU9ImZhbHNlIj5sb2ctdW5oYW5kbGVkLWV2ZW50czwvc3RyaW5nPgorCisgIDxzdHJpbmcgbmFtZT0iUFJFRl9LRVlfU0VMRUNURURfREVWSUNFIiB0cmFuc2xhdGFibGU9ImZhbHNlIj5zZWxlY3RlZC1kZXZpY2U8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJQUkVGX0tFWV9BRERfREVWSUNFIiB0cmFuc2xhdGFibGU9ImZhbHNlIj5hZGQtZGV2aWNlPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iUFJFRl9LRVlfUkVNT1ZFX0RFVklDRSIgdHJhbnNsYXRhYmxlPSJmYWxzZSI+cmVtb3ZlLWRldmljZTwvc3RyaW5nPgorCisgIDxzdHJpbmcgbmFtZT0iUFJFRl9LRVlfUkVNT1ZFX0RFVklDRV9QUk9NUFQiIHRyYW5zbGF0YWJsZT0iZmFsc2UiPnJlbW92ZS1kZXZpY2UtcHJvbXB0PC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iUFJFRl9LRVlfUkVNT1ZFX0RFVklDRV9DQU5DRUwiIHRyYW5zbGF0YWJsZT0iZmFsc2UiPnJlbW92ZS1kZXZpY2UtY2FuY2VsPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iUFJFRl9LRVlfUkVNT1ZFX0RFVklDRV9DT05GSVJNIiB0cmFuc2xhdGFibGU9ImZhbHNlIj5yZW1vdmUtZGV2aWNlLWNvbmZpcm08L3N0cmluZz4KKworICA8c3RyaW5nIG5hbWU9IlBSRUZfS0VZX0RFVklDRV9OQU1FIiB0cmFuc2xhdGFibGU9ImZhbHNlIj5kZXZpY2UtbmFtZTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlBSRUZfS0VZX0RFVklDRV9NRVRIT0QiIHRyYW5zbGF0YWJsZT0iZmFsc2UiPmRldmljZS1tZXRob2Q8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJQUkVGX0tFWV9ERVZJQ0VfSURFTlRJRklFUiIgdHJhbnNsYXRhYmxlPSJmYWxzZSI+ZGV2aWNlLWlkZW50aWZpZXI8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJQUkVGX0tFWV9ERVZJQ0VfRFJJVkVSIiB0cmFuc2xhdGFibGU9ImZhbHNlIj5kZXZpY2UtZHJpdmVyPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iUFJFRl9LRVlfREVWSUNFX0FERCIgdHJhbnNsYXRhYmxlPSJmYWxzZSI+ZGV2aWNlLWFkZDwvc3RyaW5nPgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9BbmRyb2lkL0dyYWRsZS9hcHAvc3JjL21haW4vcmVzL3ZhbHVlcy9zcGVlY2gtc3VwcG9ydC54bWwgYi9BbmRyb2lkL0dyYWRsZS9hcHAvc3JjL21haW4vcmVzL3ZhbHVlcy9zcGVlY2gtc3VwcG9ydC54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODY1MDQ2NgotLS0gL2Rldi9udWxsCisrKyBiL0FuZHJvaWQvR3JhZGxlL2FwcC9zcmMvbWFpbi9yZXMvdmFsdWVzL3NwZWVjaC1zdXBwb3J0LnhtbApAQCAtMCwwICsxLDE1IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgorCis8cmVzb3VyY2VzPgorICA8c3RyaW5nIG5hbWU9IlNQRUVDSF9TVVBQT1JUX0xBQkVMX25hdGl2ZSI+TmF0aXZlPC9zdHJpbmc+CisKKyAgPHN0cmluZy1hcnJheSBuYW1lPSJTUEVFQ0hfU1VQUE9SVF9MQUJFTFMiPgorICAgIDxpdGVtPkBzdHJpbmcvc2V0dGluZ19zdGF0ZV9vZmY8L2l0ZW0+CisgICAgPGl0ZW0+QHN0cmluZy9TUEVFQ0hfU1VQUE9SVF9MQUJFTF9uYXRpdmU8L2l0ZW0+CisgIDwvc3RyaW5nLWFycmF5PgorCisgIDxzdHJpbmctYXJyYXkgbmFtZT0iU1BFRUNIX1NVUFBPUlRfVkFMVUVTIj4KKyAgICA8aXRlbT5ubzwvaXRlbT4KKyAgICA8aXRlbT5hbjwvaXRlbT4KKyAgPC9zdHJpbmctYXJyYXk+Cis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL0FuZHJvaWQvR3JhZGxlL2FwcC9zcmMvbWFpbi9yZXMvdmFsdWVzL3N0cmluZ3MueG1sIGIvQW5kcm9pZC9HcmFkbGUvYXBwL3NyYy9tYWluL3Jlcy92YWx1ZXMvc3RyaW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2Q0OGUwYgotLS0gL2Rldi9udWxsCisrKyBiL0FuZHJvaWQvR3JhZGxlL2FwcC9zcmMvbWFpbi9yZXMvdmFsdWVzL3N0cmluZ3MueG1sCkBAIC0wLDAgKzEsMTEwIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgorCis8cmVzb3VyY2VzPgorICA8c3RyaW5nIG5hbWU9ImFwcF9kZXNjcmlwdGlvbiI+QlJMVFRZIHN1cHBvcnRzIGJyYWlsbGUgZGV2aWNlcy48L3N0cmluZz4KKworICA8c3RyaW5nIG5hbWU9InVzYk1vbml0b3JfbGFiZWwiPlVTQiBEZXZpY2UgQXR0YWNoZWQgTW9uaXRvcjwvc3RyaW5nPgorCisgIDxzdHJpbmcgbmFtZT0iYWJvdXRfbGFiZWxfYWN0aXZpdHkiPkFib3V0IEFwcGxpY2F0aW9uPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iYWJvdXRfbGFiZWxfY29weXJpZ2h0Ij5Db3B5cmlnaHQ8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJhYm91dF9sYWJlbF9idWlsZFRpbWUiPkJ1aWxkIFRpbWU8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJhYm91dF9sYWJlbF9zb3VyY2VSZXZpc2lvbiI+U291cmNlIFJldmlzaW9uPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iYWJvdXRfbGFiZWxfcHJpdmFjeVBvbGljeSI+UHJpdmFjeSBQb2xpY3k8L3N0cmluZz4KKworICA8c3RyaW5nIG5hbWU9ImlucHV0U2VydmljZV9uYW1lIj5CUkxUVFkgSW5wdXQgU2VydmljZTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9ImlucHV0U2VydmljZV90eXBlIj5LZXlib2FyZHMgb24gQnJhaWxsZSBEZXZpY2VzPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iaW5wdXRTZXJ2aWNlX25vdF9lbmFibGVkIj5pbnB1dCBzZXJ2aWNlIG5vdCBlbmFibGVkPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iaW5wdXRTZXJ2aWNlX25vdF9zZWxlY3RlZCI+aW5wdXQgc2VydmljZSBub3Qgc2VsZWN0ZWQ8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJpbnB1dFNlcnZpY2Vfbm90X3N0YXJ0ZWQiPmlucHV0IHNlcnZpY2Ugbm90IHN0YXJ0ZWQ8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJpbnB1dFNlcnZpY2Vfbm90X2Nvbm5lY3RlZCI+aW5wdXQgc2VydmljZSBub3QgY29ubmVjdGVkPC9zdHJpbmc+CisKKyAgPHN0cmluZyBuYW1lPSJ1cGRhdGVBcHBsaWNhdGlvbl9wcm9ibGVtX2ZhaWxlZCI+YXBwbGljYXRpb24gbm90IHVwZGF0ZWQ8L3N0cmluZz4KKworICA8c3RyaW5nIG5hbWU9InBhY2thZ2VJbnN0YWxsZXJfcHJvYmxlbV9mYWlsZWQiPnBhY2thZ2Ugbm90IGluc3RhbGxlZDwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9InBhY2thZ2VJbnN0YWxsZXJfcHJvYmxlbV9zYW1lIj5zYW1lIHZlcnNpb248L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJwYWNrYWdlSW5zdGFsbGVyX3Byb2JsZW1fZG93bmdyYWRlIj5kb3duZ3JhZGUgbm90IGFsbG93ZWQ8L3N0cmluZz4KKworICA8c3RyaW5nIG5hbWU9ImZpbGVEb3dubG9hZGVyX3RpdGxlIj5CUkxUVFkgRmlsZSBEb3dubG9hZGVyPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iZmlsZURvd25sb2FkZXJfcHJvYmxlbV9mYWlsZWQiPmZpbGUgbm90IGRvd25sb2FkZWQ8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJmaWxlRG93bmxvYWRlcl9zdGF0ZV9jb25uZWN0aW5nIj5jb25uZWN0aW5nPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iZmlsZURvd25sb2FkZXJfc3RhdGVfZG93bmxvYWRpbmciPmRvd25sb2FkaW5nPC9zdHJpbmc+CisKKyAgPHN0cmluZyBuYW1lPSJzZXR0aW5nX3N0YXRlX29mZiI+T2ZmPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iY2hlY2tib3hfc3RhdGVfdW5jaGVja2VkIj5Obzwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9ImNoZWNrYm94X3N0YXRlX2NoZWNrZWQiPlllczwvc3RyaW5nPgorCisgIDxzdHJpbmcgbmFtZT0iYnJhaWxsZV9jaGFubmVsX25hbWUiPkJyYWlsbGUgRGV2aWNlIFN0YXRlPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iYnJhaWxsZV9oaW50X3RhcCI+dGFwIGZvciBhY3Rpb25zPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iYnJhaWxsZV9zdGF0ZV9yZWxlYXNlZCI+UmVsZWFzZWQ8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJicmFpbGxlX3N0YXRlX3dhaXRpbmciPldhaXRpbmc8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJicmFpbGxlX3N0YXRlX2Nvbm5lY3RlZCI+Q29ubmVjdGVkPC9zdHJpbmc+CisKKyAgPHN0cmluZyBuYW1lPSJHTE9CQUxfQlVUVE9OX05PVElGSUNBVElPTlMiPk5vdGlmaWNhdGlvbnM8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJHTE9CQUxfQlVUVE9OX1FVSUNLX1NFVFRJTkdTIj5RdWljayBTZXR0aW5nczwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkdMT0JBTF9CVVRUT05fQkFDSyI+QmFjazwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkdMT0JBTF9CVVRUT05fSE9NRSI+SG9tZTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkdMT0JBTF9CVVRUT05fUkVDRU5UX0FQUFMiPlJlY2VudCBBcHBzPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iR0xPQkFMX0JVVFRPTl9PVkVSVklFVyI+T3ZlcnZpZXc8L3N0cmluZz4KKworICA8c3RyaW5nIG5hbWU9IkdMT0JBTF9CVVRUT05fU1dJVENIX0lOUFVUX01FVEhPRCI+U3dpdGNoIElucHV0IE1ldGhvZDwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkdMT0JBTF9CVVRUT05fVklFV19VU0VSX0dVSURFIj5WaWV3IFVzZXIgR3VpZGU8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJHTE9CQUxfQlVUVE9OX0JST1dTRV9XRUJfU0lURSI+QnJvd3NlIFdlYiBTaXRlPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iR0xPQkFMX0JVVFRPTl9CUk9XU0VfQ09NTVVOSVRZX01FU1NBR0VTIj5Ccm93c2UgQ29tbXVuaXR5IE1lc3NhZ2VzPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iR0xPQkFMX0JVVFRPTl9QT1NUX0NPTU1VTklUWV9NRVNTQUdFIj5Qb3N0IENvbW11bml0eSBNZXNzYWdlPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iR0xPQkFMX0JVVFRPTl9NQU5BR0VfQ09NTVVOSVRZX01FTUJFUlNISVAiPk1hbmFnZSBDb21tdW5pdHkgTWVtYmVyc2hpcDwvc3RyaW5nPgorCisgIDxzdHJpbmcgbmFtZT0iR0xPQkFMX0JVVFRPTl9VUERBVEVfQVBQTElDQVRJT04iPlVwZGF0ZSBBcHBsaWNhdGlvbjwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkdMT0JBTF9DSEVDS0JPWF9ERVZFTE9QRVJfQlVJTEQiPkRldmVsb3BlciBCdWlsZDwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkdMT0JBTF9DSEVDS0JPWF9BTExPV19ET1dOR1JBREUiPkFsbG93IERvd25ncmFkZTwvc3RyaW5nPgorCisgIDxzdHJpbmcgbmFtZT0iQ0hPT1NFUl9USVRMRV9BQ0NFU1NJQklMSVRZX0FDVElPTlMiPkFjY2Vzc2liaWxpdHkgQWN0aW9uczwvc3RyaW5nPgorCisgIDxzdHJpbmcgbmFtZT0iU0VUVElOR1NfU0NSRUVOX01BSU4iPkJSTFRUWSBTZXR0aW5nczwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlNFVFRJTkdTX1NDUkVFTl9HRU5FUkFMIj5HZW5lcmFsIFNldHRpbmdzPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iU0VUVElOR1NfU0NSRUVOX01FU1NBR0UiPk1lc3NhZ2UgU2V0dGluZ3M8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJTRVRUSU5HU19TQ1JFRU5fREVWSUNFUyI+TWFuYWdlIERldmljZXM8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJTRVRUSU5HU19TQ1JFRU5fQURWQU5DRUQiPkFkdmFuY2VkIFNldHRpbmdzPC9zdHJpbmc+CisKKyAgPHN0cmluZyBuYW1lPSJTRVRUSU5HU19DSEVDS0JPWF9SRUxFQVNFX0JSQUlMTEVfREVWSUNFIj5SZWxlYXNlIEJyYWlsbGUgRGV2aWNlPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iU0VUVElOR1NfQlVUVE9OX05BVklHQVRJT05fTU9ERSI+TmF2aWdhdGlvbiBNb2RlPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iU0VUVElOR1NfQlVUVE9OX1NQRUVDSF9TVVBQT1JUIj5TcGVlY2ggU3VwcG9ydDwvc3RyaW5nPgorCisgIDxzdHJpbmcgbmFtZT0iU0VUVElOR1NfQlVUVE9OX1RFWFRfVEFCTEUiPlRleHQgVGFibGU8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJTRVRUSU5HU19CVVRUT05fQVRUUklCVVRFU19UQUJMRSI+QXR0cmlidXRlcyBUYWJsZTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlNFVFRJTkdTX0JVVFRPTl9DT05UUkFDVElPTl9UQUJMRSI+Q29udHJhY3Rpb24gVGFibGU8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJTRVRUSU5HU19CVVRUT05fS0VZQk9BUkRfVEFCTEUiPktleWJvYXJkIFRhYmxlPC9zdHJpbmc+CisKKyAgPHN0cmluZyBuYW1lPSJTRVRUSU5HU19DSEVDS0JPWF9TSE9XX0FMRVJUUyI+U2hvdyBBbGVydHM8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJTRVRUSU5HU19DSEVDS0JPWF9TSE9XX0FOTk9VTkNFTUVOVFMiPlNob3cgQW5ub3VuY2VtZW50czwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlNFVFRJTkdTX0NIRUNLQk9YX1NIT1dfTk9USUZJQ0FUSU9OUyI+U2hvdyBOb3RpZmljYXRpb25zPC9zdHJpbmc+CisKKyAgPHN0cmluZyBuYW1lPSJTRVRUSU5HU19CVVRUT05fTE9HX0xFVkVMIj5Mb2cgTGV2ZWw8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJTRVRUSU5HU19CVVRUT05fTE9HX0NBVEVHT1JJRVMiPkxvZyBDYXRlZ29yaWVzPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iU0VUVElOR1NfQ0hFQ0tCT1hfTE9HX0FDQ0VTU0lCSUxJVFlfRVZFTlRTIj5Mb2cgQWNjZXNzaWJpbGl0eSBFdmVudHM8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJTRVRUSU5HU19DSEVDS0JPWF9MT0dfUkVOREVSRURfU0NSRUVOIj5Mb2cgUmVuZGVyZWQgU2NyZWVuPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iU0VUVElOR1NfQ0hFQ0tCT1hfTE9HX0tFWUJPQVJEX0VWRU5UUyI+TG9nIEtleWJvYXJkIEV2ZW50czwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlNFVFRJTkdTX0NIRUNLQk9YX0xPR19VTkhBTkRMRURfRVZFTlRTIj5Mb2cgVW5oYW5kbGVkIEV2ZW50czwvc3RyaW5nPgorCisgIDxzdHJpbmcgbmFtZT0iREVWSUNFU19CVVRUT05fU0VMRUNURUQiPlNlbGVjdGVkIERldmljZTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkRFVklDRVNfQlVUVE9OX0FERCI+QWRkIERldmljZTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkRFVklDRVNfQlVUVE9OX1JFTU9WRSI+UmVtb3ZlIERldmljZTwvc3RyaW5nPgorCisgIDxzdHJpbmcgbmFtZT0iU0VMRUNURURfREVWSUNFX05PTkUiPm5vIGRldmljZXM8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJTRUxFQ1RFRF9ERVZJQ0VfVU5TRUxFQ1RFRCI+ZGV2aWNlIG5vdCBzZWxlY3RlZDwvc3RyaW5nPgorCisgIDxzdHJpbmcgbmFtZT0iQUREX0RFVklDRV9OQU1FIj5EZXZpY2UgTmFtZTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkFERF9ERVZJQ0VfTUVUSE9EIj5Db21tdW5pY2F0aW9uIE1ldGhvZDwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkFERF9ERVZJQ0VfU0VMRUNUIj5TZWxlY3QgRGV2aWNlPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iQUREX0RFVklDRV9EUklWRVIiPkJyYWlsbGUgRHJpdmVyPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iQUREX0RFVklDRV9ET05FIj5Eb25lPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iQUREX0RFVklDRV9VTlNFTEVDVEVEX01FVEhPRCI+Y29tbXVuaWNhdGlvbiBtZXRob2Qgbm90IHNlbGVjdGVkPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iQUREX0RFVklDRV9VTlNFTEVDVEVEX0RFVklDRSI+ZGV2aWNlIG5vdCBzZWxlY3RlZDwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkFERF9ERVZJQ0VfVU5TRUxFQ1RFRF9EUklWRVIiPmJyYWlsbGUgZHJpdmVyIG5vdCBzZWxlY3RlZDwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkFERF9ERVZJQ0VfTk9fREVWSUNFUyI+bm8gZGV2aWNlczwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IkFERF9ERVZJQ0VfRFVQTElDQVRFX05BTUUiPmRldmljZSBuYW1lIGFscmVhZHkgaW4gdXNlPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iQUREX0RFVklDRV9OT19QRVJNSVNTSU9OIj5hY2Nlc3MgdG8gZGV2aWNlIG5vdCBncmFudGVkPC9zdHJpbmc+CisKKyAgPHN0cmluZyBuYW1lPSJSRU1PVkVfREVWSUNFX1BST01QVCI+V291bGQgeW91IHJlYWxseSBsaWtlIHRvIHJlbW92ZSB0aGlzIGRldmljZT88L3N0cmluZz4KKworICA8c3RyaW5nIG5hbWU9IlNFVF9TRUxFQ1RJT05fTk9ORSI+bm9uZSBzZWxlY3RlZDwvc3RyaW5nPgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9BbmRyb2lkL0dyYWRsZS9hcHAvc3JjL21haW4vcmVzL3ZhbHVlcy90ZXh0LXRhYmxlLnhtbCBiL0FuZHJvaWQvR3JhZGxlL2FwcC9zcmMvbWFpbi9yZXMvdmFsdWVzL3RleHQtdGFibGUueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZkNTVhMjcKLS0tIC9kZXYvbnVsbAorKysgYi9BbmRyb2lkL0dyYWRsZS9hcHAvc3JjL21haW4vcmVzL3ZhbHVlcy90ZXh0LXRhYmxlLnhtbApAQCAtMCwwICsxLDI4MCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KKworPCEtLSBnZW5lcmF0ZWQgZnJvbSBicmx0dHkuY29uZi5pbiBieSBta3NldHRpbmdzIC0tPgorPCEtLSBjaGFuZ2VzIG1hZGUgaGVyZSB3aWxsIGJlIG92ZXJ3cml0dGVuIC0tPgorCis8cmVzb3VyY2VzPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfYXV0byIgdHJhbnNsYXRhYmxlPSJ0cnVlIj5sb2NhbGUtYmFzZWQgYXV0b3NlbGVjdGlvbjwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfYXIiIHRyYW5zbGF0YWJsZT0idHJ1ZSI+QXJhYmljIChnZW5lcmljKTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfYXMiIHRyYW5zbGF0YWJsZT0idHJ1ZSI+QXNzYW1lc2U8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX2F3YSIgdHJhbnNsYXRhYmxlPSJ0cnVlIj5Bd2FkaGk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX2JnIiB0cmFuc2xhdGFibGU9InRydWUiPkJ1bGdhcmlhbjwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfYmgiIHRyYW5zbGF0YWJsZT0idHJ1ZSI+QmloYXJpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9ibiIgdHJhbnNsYXRhYmxlPSJ0cnVlIj5CZW5nYWxpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9ibyIgdHJhbnNsYXRhYmxlPSJ0cnVlIj5UaWJldGFuPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9icmEiIHRyYW5zbGF0YWJsZT0idHJ1ZSI+QnJhajwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfYnJmIiB0cmFuc2xhdGFibGU9InRydWUiPkJyYWlsbGUgUmVhZHkgRm9ybWF0IChmb3Igdmlld2luZyAuYnJmIGZpbGVzIHdpdGhpbiBhbiBlZGl0b3Igb3IgcGFnZXIpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9jcyIgdHJhbnNsYXRhYmxlPSJ0cnVlIj5DemVjaDwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfY3kiIHRyYW5zbGF0YWJsZT0idHJ1ZSI+V2Vsc2g8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX2RhIiB0cmFuc2xhdGFibGU9InRydWUiPkRhbmlzaDwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfZGFfMTI1MiIgdHJhbnNsYXRhYmxlPSJ0cnVlIj5EYW5pc2ggKFN2ZW5kIFRob3VnYWFyZCwgMjAwMuKAkzEx4oCTMTgpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9kYV9sdCIgdHJhbnNsYXRhYmxlPSJ0cnVlIj5EYW5pc2ggKExvZ1RleHQpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9kZSIgdHJhbnNsYXRhYmxlPSJ0cnVlIj5HZXJtYW48L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX2RyYSIgdHJhbnNsYXRhYmxlPSJ0cnVlIj5EcmF2aWRpYW48L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX2VsIiB0cmFuc2xhdGFibGU9InRydWUiPkdyZWVrPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9lbiIgdHJhbnNsYXRhYmxlPSJ0cnVlIj5FbmdsaXNoPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9lbl9uYWJjYyIgdHJhbnNsYXRhYmxlPSJ0cnVlIj5FbmdsaXNoIChOb3J0aCBBbWVyaWNhbiBCcmFpbGxlIENvbXB1dGVyIENvZGUpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9lbl9DQSIgdHJhbnNsYXRhYmxlPSJ0cnVlIj5FbmdsaXNoIChDYW5hZGEpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9lbl9HQiIgdHJhbnNsYXRhYmxlPSJ0cnVlIj5FbmdsaXNoIChVbml0ZWQgS2luZ2RvbSk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX2VuX1VTIiB0cmFuc2xhdGFibGU9InRydWUiPkVuZ2xpc2ggKFVuaXRlZCBTdGF0ZXMpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9lbyIgdHJhbnNsYXRhYmxlPSJ0cnVlIj5Fc3BlcmFudG88L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX2VzIiB0cmFuc2xhdGFibGU9InRydWUiPlNwYW5pc2g8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX2V0IiB0cmFuc2xhdGFibGU9InRydWUiPkVzdG9uaWFuPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9maSIgdHJhbnNsYXRhYmxlPSJ0cnVlIj5GaW5uaXNoPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9mciIgdHJhbnNsYXRhYmxlPSJ0cnVlIj5GcmVuY2g8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX2ZyXzIwMDciIHRyYW5zbGF0YWJsZT0idHJ1ZSI+RnJlbmNoICh1bmlmaWVkIDIwMDcpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9mcl9jYmlmcyIgdHJhbnNsYXRhYmxlPSJ0cnVlIj5GcmVuY2ggKENvZGUgQnJhaWxsZSBJbmZvcm1hdGlxdWUgRnJhbsOnYWlzIFN0YW5kYXJkKTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfZnJfdnMiIHRyYW5zbGF0YWJsZT0idHJ1ZSI+RnJlbmNoIChWaXNpb0JyYWlsbGUpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9mcl9DQSIgdHJhbnNsYXRhYmxlPSJ0cnVlIj5GcmVuY2ggKENhbmFkYSk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX2ZyX0ZSIiB0cmFuc2xhdGFibGU9InRydWUiPkZyZW5jaCAoRnJhbmNlKTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfZ2EiIHRyYW5zbGF0YWJsZT0idHJ1ZSI+SXJpc2g8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX2dkIiB0cmFuc2xhdGFibGU9InRydWUiPkdhZWxpYzwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfZ29uIiB0cmFuc2xhdGFibGU9InRydWUiPkdvbmRpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9ndSIgdHJhbnNsYXRhYmxlPSJ0cnVlIj5HdWphcmF0aTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfaGUiIHRyYW5zbGF0YWJsZT0idHJ1ZSI+SGVicmV3PC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9oaSIgdHJhbnNsYXRhYmxlPSJ0cnVlIj5IaW5kaTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfaHIiIHRyYW5zbGF0YWJsZT0idHJ1ZSI+Q3JvYXRpYW48L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX2h1IiB0cmFuc2xhdGFibGU9InRydWUiPkh1bmdhcmlhbjwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfaHkiIHRyYW5zbGF0YWJsZT0idHJ1ZSI+QXJtZW5pYW48L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX2lzIiB0cmFuc2xhdGFibGU9InRydWUiPkljZWxhbmRpYzwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfaXQiIHRyYW5zbGF0YWJsZT0idHJ1ZSI+SXRhbGlhbjwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfa2hhIiB0cmFuc2xhdGFibGU9InRydWUiPktoYXNpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9rbiIgdHJhbnNsYXRhYmxlPSJ0cnVlIj5LYW5uYWRhPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9rb2siIHRyYW5zbGF0YWJsZT0idHJ1ZSI+S29ua2FuaTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfa3J1IiB0cmFuc2xhdGFibGU9InRydWUiPkt1cnVraDwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfbHQiIHRyYW5zbGF0YWJsZT0idHJ1ZSI+TGl0dWFuaWFuPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9sdiIgdHJhbnNsYXRhYmxlPSJ0cnVlIj5MYXR2aWFuPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9tZyIgdHJhbnNsYXRhYmxlPSJ0cnVlIj5NYWxhZ2FzeTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfbWkiIHRyYW5zbGF0YWJsZT0idHJ1ZSI+TWFvcmk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX21sIiB0cmFuc2xhdGFibGU9InRydWUiPk1hbGF5YWxhbTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfbW5pIiB0cmFuc2xhdGFibGU9InRydWUiPk1hbmlwdXJpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9tciIgdHJhbnNsYXRhYmxlPSJ0cnVlIj5NYXJhdGhpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9tdCIgdHJhbnNsYXRhYmxlPSJ0cnVlIj5NYWx0ZXNlPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9tdW4iIHRyYW5zbGF0YWJsZT0idHJ1ZSI+TXVuZGE8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX213ciIgdHJhbnNsYXRhYmxlPSJ0cnVlIj5NYXJ3YXJpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9uZSIgdHJhbnNsYXRhYmxlPSJ0cnVlIj5OZXBhbGk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX25ldyIgdHJhbnNsYXRhYmxlPSJ0cnVlIj5OZXdhcmk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX25sIiB0cmFuc2xhdGFibGU9InRydWUiPkR1dGNoPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9ubF9CRSIgdHJhbnNsYXRhYmxlPSJ0cnVlIj5EdXRjaCAoQmVsZ2l1bSk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX25sX05MIiB0cmFuc2xhdGFibGU9InRydWUiPkR1dGNoIChOZXRoZXJsYW5kcyk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX25vIiB0cmFuc2xhdGFibGU9InRydWUiPk5vcndlZ2lhbjwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfbm9fZ2VuZXJpYyIgdHJhbnNsYXRhYmxlPSJ0cnVlIj5Ob3J3ZWdpYW4gKHdpdGggc3VwcG9ydCBmb3Igb3RoZXIgbGFuZ3VhZ2VzKTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfbm9fb3VwIiB0cmFuc2xhdGFibGU9InRydWUiPk5vcndlZ2lhbiAoT2ZmZW50bGlnIHV0dmFsZyBmb3IgcHVua3Rza3JpZnQpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9ud2MiIHRyYW5zbGF0YWJsZT0idHJ1ZSI+TmV3YXJpIChvbGQpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9vciIgdHJhbnNsYXRhYmxlPSJ0cnVlIj5Pcml5YTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfcGEiIHRyYW5zbGF0YWJsZT0idHJ1ZSI+UGFuamFiaTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfcGkiIHRyYW5zbGF0YWJsZT0idHJ1ZSI+UGFsaTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfcGwiIHRyYW5zbGF0YWJsZT0idHJ1ZSI+UG9saXNoPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9wdCIgdHJhbnNsYXRhYmxlPSJ0cnVlIj5Qb3J0dWd1ZXNlPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9ybyIgdHJhbnNsYXRhYmxlPSJ0cnVlIj5Sb21hbmlhbjwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfcnUiIHRyYW5zbGF0YWJsZT0idHJ1ZSI+UnVzc2lhbjwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfc2EiIHRyYW5zbGF0YWJsZT0idHJ1ZSI+U2Fuc2tyaXQ8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX3NhdCIgdHJhbnNsYXRhYmxlPSJ0cnVlIj5TYW50YWxpPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9zZCIgdHJhbnNsYXRhYmxlPSJ0cnVlIj5TaW5kaGk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX3NlIiB0cmFuc2xhdGFibGU9InRydWUiPlNhbWkgKE5vcnRoZXJuKTwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfc2siIHRyYW5zbGF0YWJsZT0idHJ1ZSI+U2xvdmFrPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF9zbCIgdHJhbnNsYXRhYmxlPSJ0cnVlIj5TbG92ZW5pYW48L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX3N2IiB0cmFuc2xhdGFibGU9InRydWUiPlN3ZWRpc2g8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX3N2XzE5ODkiIHRyYW5zbGF0YWJsZT0idHJ1ZSI+U3dlZGlzaCAoMTk4OSBzdGFuZGFyZCk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX3N2XzE5OTYiIHRyYW5zbGF0YWJsZT0idHJ1ZSI+U3dlZGlzaCAoMTk5NiBzdGFuZGFyZCk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX3N3IiB0cmFuc2xhdGFibGU9InRydWUiPlN3YWhpbGk8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX3RhIiB0cmFuc2xhdGFibGU9InRydWUiPlRhbWlsPC9zdHJpbmc+CisgIDxzdHJpbmcgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTF90ZSIgdHJhbnNsYXRhYmxlPSJ0cnVlIj5UZWx1Z3U8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX3RyIiB0cmFuc2xhdGFibGU9InRydWUiPlR1cmtpc2g8L3N0cmluZz4KKyAgPHN0cmluZyBuYW1lPSJURVhUX1RBQkxFX0xBQkVMX3VrIiB0cmFuc2xhdGFibGU9InRydWUiPlVrcmFpbmlhbjwvc3RyaW5nPgorICA8c3RyaW5nIG5hbWU9IlRFWFRfVEFCTEVfTEFCRUxfdmkiIHRyYW5zbGF0YWJsZT0idHJ1ZSI+VmlldG5hbWVzZTwvc3RyaW5nPgorCisgIDxzdHJpbmctYXJyYXkgbmFtZT0iVEVYVF9UQUJMRV9MQUJFTFMiPgorICAgIDxpdGVtPkBzdHJpbmcvVEVYVF9UQUJMRV9MQUJFTF9hdXRvPC9pdGVtPgorICAgIDxpdGVtPkBzdHJpbmcvVEVYVF9UQUJMRV9MQUJFTF9hcjwvaXRlbT4KKyAgICA8aXRlbT5Ac3RyaW5nL1RFWFRfVEFCTEVfTEFCRUxfYXM8L2l0ZW0+CisgICAgPGl0ZW0+QHN0cmluZy9URVhUX1RBQkxFX0xBQkVMX2F3YTwvaXRlbT4KKyAgICA8aXRlbT5Ac3RyaW5nL1RFWFRfVEFCTEVfTEFCRUxfYmc8L2l0ZW0+CisgICAgPGl0ZW0+QHN0cmluZy9URVhUX1RBQkxFX0xBQkVMX2JoPC9pdGVtPgorICAgIDxpdGVtPkBzdHJpbmcvVEVYVF9UQUJMRV9MQUJFTF9ibjwvaXRlbT4KKyAgICA8aXRlbT5Ac3RyaW5nL1RFWFRfVEFCTEVfTEFCRUxfYm88L2l0ZW0+CisgICAgPGl0ZW0+QHN0cmluZy9URVhUX1RBQkxFX0xBQkVMX2JyYTwvaXRlbT4KKyAgICA8aXRlbT5Ac3RyaW5nL1RFWFRfVEFCTEVfTEFCRUxfYnJmPC9pdGVtPgorICAgIDxpdGVtPkBzdHJpbmcvVEVYVF9UQUJMRV9MQUJFTF9jczwvaXRlbT4KKyAgICA8aXRlbT5Ac3RyaW5nL1RFWFRfVEFCTEVfTEFCRUxfY3k8L2l0ZW0+CisgICAgPGl0ZW0+QHN0cmluZy9URVhUX1RBQkxFX0xBQkVMX2RhPC9pdGVtPgorICAgIDxpdGVtPkBzdHJpbmcvVEVYVF9UQUJMRV9MQUJFTF9kYV8xMjUyPC9pdGVtPgorICAgIDxpdGVtPkBzdHJpbmcvVEVYVF9UQUJMRV9MQUJFTF9kYV9sdDwvaXRlbT4KKyAgICA8aXRlbT5Ac3RyaW5nL1RFWFRfVEFCTEVfTEFCRUxfZGU8L2l0ZW0+CisgICAgPGl0ZW0+QHN0cmluZy9URVhUX1RBQkxFX0xBQkVMX2RyYTwvaXRlbT4KKyAgICA8aXRlbT5Ac3RyaW5nL1RFWFRfVEFCTEVfTEFCRUxfZWw8L2l0ZW0+CisgICAgPGl0ZW0+QHN0cmluZy9URVhUX1RBQkxFX0xBQkVMX2VuPC9pdGVtPgorICAgIDxpdGVtPkBzdHJpbmcvVEVYVF9UQUJMRV9MQUJFTF9lbl9uYWJjYzwvaXRlbT4KKyAgICA8aXRlbT5Ac3RyaW5nL1RFWFRfVEFCTEVfTEFCRUxfZW5fQ0E8L2l0ZW0+CisgICAgPGl0ZW0+QHN0cmluZy9URVhUX1RBQkxFX0xBQkVMX2VuX0dCPC9pdGVtPgorICAgIDxpdGVtPkBzdHJpbmcvVEVYVF9UQUJMRV9MQUJFTF9lbl9VUzwvaXRlbT4KKyAgICA8aXRlbT5Ac3RyaW5nL1RFWFRfVEFCTEVfTEFCRUxfZW88L2l0ZW0+CisgICAgPGl0ZW0+QHN0cmluZy9URVhUX1RBQkxFX0xBQkVMX2VzPC9pdGVtPgorICAgIDxpdGVtPkBzdHJpbmcvVEVYVF9UQUJMRV9MQUJFTF9ldDwvaXRlbT4KKyAgICA8aXRlbT5Ac3RyaW5nL1RFWFRfVEFCTEVfTEFCRUxfZmk8L2l0ZW0+CisgICAgPGl0ZW0+QHN0cmluZy9URVhUX1RBQkxFX0xBQkVMX2ZyPC9pdGVtPgorICAgIDxpdGVtPkBzdHJpbmcvVEVYVF9UQUJMRV9MQUJFTF9mcl8yMDA3PC9pdGVtPgorICAgIDxpdGVtPkBzdHJpbmcvVEVYVF9UQUJMRV9MQUJFTF9mcl9jYmlmczwvaXRlbT4KKyAgICA8aXRlbT5Ac3RyaW5nL1RFWFRfVEFCTEVfTEFCRUxfZnJfdnM8L2l0ZW0+CisgICAgPGl0ZW0+QHN0cmluZy9URVhUX1RBQkxFX0xBQkVMX2ZyX0NBPC9pdGVtPgorICAgIDxpdGVtPkBzdHJpbmcvVEVYVF9UQUJMRV9MQUJFTF9mcl9GUjwvaXRlbT4KKyAgICA8aXRlbT5Ac3RyaW5nL1RFWFRfVEFCTEVfTEFCRUxfZ2E8L2l0ZW0+CisgICAgPGl0ZW0+QHN0cmluZy9URVhUX1RBQkxFX0xBQkVMX2dkPC9pdGVtPgorICAgIDxpdGVtPkBzdHJpbmcvVEVYVF9UQUJMRV9MQUJFTF9nb248L2l0ZW0+CisgICAgPGl0ZW0+QHN0cmluZy9URVhUX1RBQkxFX0xBQkVMX2d1PC9pdGVtPgorICAgIDxpdGVtPkBzdHJpbmcvVEVYVF9UQUJMRV9MQUJFTF9oZTwvaXRlbT4KKyAgICA8aXRlbT5Ac3RyaW5nL1RFWFRfVEFCTEVfTEFCRUxfaGk8L2l0ZW0+CisgICAgPGl0ZW0+QHN0cmluZy9URVhUX1RBQkxFX0xBQkVMX2hyPC9pdGVtPgorICAgIDxpdGVtPkBzdHJpbmcvVEVYVF9UQUJMRV9MQUJFTF9odTwvaXRlbT4KKyAgICA8aXRlbT5Ac3RyaW5nL1RFWFRfVEFCTEVfTEFCRUxfaHk8L2l0ZW0+CisgICAgPGl0ZW0+QHN0cmluZy9URVhUX1RBQkxFX0xBQkVMX2lzPC9pdGVtPgorICAgIDxpdGVtPkBzdHJpbmcvVEVYVF9UQUJMRV9MQUJFTF9pdDwvaXRlbT4KKyAgICA8aXRlbT5Ac3RyaW5nL1RFWFRfVEFCTEVfTEFCRUxfa2hhPC9pdGVtPgorICAgIDxpdGVtPkBzdHJpbmcvVEVYVF9UQUJMRV9MQUJFTF9rbjwvaXRlbT4KKyAgICA8aXRlbT5Ac3RyaW5nL1RFWFRfVEFCTEVfTEFCRUxfa29rPC9pdGVtPgorICAgIDxpdGVtPkBzdHJpbmcvVEVYVF9UQUJMRV9MQUJFTF9rcnU8L2l0ZW0+CisgICAgPGl0ZW0+QHN0cmluZy9URVhUX1RBQkxFX0xBQkVMX2x0PC9pdGVtPgorICAgIDxpdGVtPkBzdHJpbmcvVEVYVF9UQUJMRV9MQUJFTF9sdjwvaXRlbT4KKyAgICA8aXRlbT5Ac3RyaW5nL1RFWFRfVEFCTEVfTEFCRUxfbWc8L2l0ZW0+CisgICAgPGl0ZW0+QHN0cmluZy9URVhUX1RBQkxFX0xBQkVMX21pPC9pdGVtPgorICAgIDxpdGVtPkBzdHJpbmcvVEVYVF9UQUJMRV9MQUJFTF9tbDwvaXRlbT4KKyAgICA8aXRlbT5Ac3RyaW5nL1RFWFRfVEFCTEVfTEFCRUxfbW5pPC9pdGVtPgorICAgIDxpdGVtPkBzdHJpbmcvVEVYVF9UQUJMRV9MQUJFTF9tcjwvaXRlbT4KKyAgICA8aXRlbT5Ac3RyaW5nL1RFWFRfVEFCTEVfTEFCRUxfbXQ8L2l0ZW0+CisgICAgPGl0ZW0+QHN0cmluZy9URVhUX1RBQkxFX0xBQkVMX211bjwvaXRlbT4KKyAgICA8aXRlbT5Ac3RyaW5nL1RFWFRfVEFCTEVfTEFCRUxfbXdyPC9pdGVtPgorICAgIDxpdGVtPkBzdHJpbmcvVEVYVF9UQUJMRV9MQUJFTF9uZTwvaXRlbT4KKyAgICA8aXRlbT5Ac3RyaW5nL1RFWFRfVEFCTEVfTEFCRUxfbmV3PC9pdGVtPgorICAgIDxpdGVtPkBzdHJpbmcvVEVYVF9UQUJMRV9MQUJFTF9ubDwvaXRlbT4KKyAgICA8aXRlbT5Ac3RyaW5nL1RFWFRfVEFCTEVfTEFCRUxfbmxfQkU8L2l0ZW0+CisgICAgPGl0ZW0+QHN0cmluZy9URVhUX1RBQkxFX0xBQkVMX25sX05MPC9pdGVtPgorICAgIDxpdGVtPkBzdHJpbmcvVEVYVF9UQUJMRV9MQUJFTF9ubzwvaXRlbT4KKyAgICA8aXRlbT5Ac3RyaW5nL1RFWFRfVEFCTEVfTEFCRUxfbm9fZ2VuZXJpYzwvaXRlbT4KKyAgICA8aXRlbT5Ac3RyaW5nL1RFWFRfVEFCTEVfTEFCRUxfbm9fb3VwPC9pdGVtPgorICAgIDxpdGVtPkBzdHJpbmcvVEVYVF9UQUJMRV9MQUJFTF9ud2M8L2l0ZW0+CisgICAgPGl0ZW0+QHN0cmluZy9URVhUX1RBQkxFX0xBQkVMX29yPC9pdGVtPgorICAgIDxpdGVtPkBzdHJpbmcvVEVYVF9UQUJMRV9MQUJFTF9wYTwvaXRlbT4KKyAgICA8aXRlbT5Ac3RyaW5nL1RFWFRfVEFCTEVfTEFCRUxfcGk8L2l0ZW0+CisgICAgPGl0ZW0+QHN0cmluZy9URVhUX1RBQkxFX0xBQkVMX3BsPC9pdGVtPgorICAgIDxpdGVtPkBzdHJpbmcvVEVYVF9UQUJMRV9MQUJFTF9wdDwvaXRlbT4KKyAgICA8aXRlbT5Ac3RyaW5nL1RFWFRfVEFCTEVfTEFCRUxfcm88L2l0ZW0+CisgICAgPGl0ZW0+QHN0cmluZy9URVhUX1RBQkxFX0xBQkVMX3J1PC9pdGVtPgorICAgIDxpdGVtPkBzdHJpbmcvVEVYVF9UQUJMRV9MQUJFTF9zYTwvaXRlbT4KKyAgICA8aXRlbT5Ac3RyaW5nL1RFWFRfVEFCTEVfTEFCRUxfc2F0PC9pdGVtPgorICAgIDxpdGVtPkBzdHJpbmcvVEVYVF9UQUJMRV9MQUJFTF9zZDwvaXRlbT4KKyAgICA8aXRlbT5Ac3RyaW5nL1RFWFRfVEFCTEVfTEFCRUxfc2U8L2l0ZW0+CisgICAgPGl0ZW0+QHN0cmluZy9URVhUX1RBQkxFX0xBQkVMX3NrPC9pdGVtPgorICAgIDxpdGVtPkBzdHJpbmcvVEVYVF9UQUJMRV9MQUJFTF9zbDwvaXRlbT4KKyAgICA8aXRlbT5Ac3RyaW5nL1RFWFRfVEFCTEVfTEFCRUxfc3Y8L2l0ZW0+CisgICAgPGl0ZW0+QHN0cmluZy9URVhUX1RBQkxFX0xBQkVMX3N2XzE5ODk8L2l0ZW0+CisgICAgPGl0ZW0+QHN0cmluZy9URVhUX1RBQkxFX0xBQkVMX3N2XzE5OTY8L2l0ZW0+CisgICAgPGl0ZW0+QHN0cmluZy9URVhUX1RBQkxFX0xBQkVMX3N3PC9pdGVtPgorICAgIDxpdGVtPkBzdHJpbmcvVEVYVF9UQUJMRV9MQUJFTF90YTwvaXRlbT4KKyAgICA8aXRlbT5Ac3RyaW5nL1RFWFRfVEFCTEVfTEFCRUxfdGU8L2l0ZW0+CisgICAgPGl0ZW0+QHN0cmluZy9URVhUX1RBQkxFX0xBQkVMX3RyPC9pdGVtPgorICAgIDxpdGVtPkBzdHJpbmcvVEVYVF9UQUJMRV9MQUJFTF91azwvaXRlbT4KKyAgICA8aXRlbT5Ac3RyaW5nL1RFWFRfVEFCTEVfTEFCRUxfdmk8L2l0ZW0+CisgIDwvc3RyaW5nLWFycmF5PgorCisgIDxzdHJpbmctYXJyYXkgbmFtZT0iVEVYVF9UQUJMRV9WQUxVRVMiPgorICAgIDxpdGVtPmF1dG88L2l0ZW0+CisgICAgPGl0ZW0+YXI8L2l0ZW0+CisgICAgPGl0ZW0+YXM8L2l0ZW0+CisgICAgPGl0ZW0+YXdhPC9pdGVtPgorICAgIDxpdGVtPmJnPC9pdGVtPgorICAgIDxpdGVtPmJoPC9pdGVtPgorICAgIDxpdGVtPmJuPC9pdGVtPgorICAgIDxpdGVtPmJvPC9pdGVtPgorICAgIDxpdGVtPmJyYTwvaXRlbT4KKyAgICA8aXRlbT5icmY8L2l0ZW0+CisgICAgPGl0ZW0+Y3M8L2l0ZW0+CisgICAgPGl0ZW0+Y3k8L2l0ZW0+CisgICAgPGl0ZW0+ZGE8L2l0ZW0+CisgICAgPGl0ZW0+ZGEtMTI1MjwvaXRlbT4KKyAgICA8aXRlbT5kYS1sdDwvaXRlbT4KKyAgICA8aXRlbT5kZTwvaXRlbT4KKyAgICA8aXRlbT5kcmE8L2l0ZW0+CisgICAgPGl0ZW0+ZWw8L2l0ZW0+CisgICAgPGl0ZW0+ZW48L2l0ZW0+CisgICAgPGl0ZW0+ZW4tbmFiY2M8L2l0ZW0+CisgICAgPGl0ZW0+ZW5fQ0E8L2l0ZW0+CisgICAgPGl0ZW0+ZW5fR0I8L2l0ZW0+CisgICAgPGl0ZW0+ZW5fVVM8L2l0ZW0+CisgICAgPGl0ZW0+ZW88L2l0ZW0+CisgICAgPGl0ZW0+ZXM8L2l0ZW0+CisgICAgPGl0ZW0+ZXQ8L2l0ZW0+CisgICAgPGl0ZW0+Zmk8L2l0ZW0+CisgICAgPGl0ZW0+ZnI8L2l0ZW0+CisgICAgPGl0ZW0+ZnItMjAwNzwvaXRlbT4KKyAgICA8aXRlbT5mci1jYmlmczwvaXRlbT4KKyAgICA8aXRlbT5mci12czwvaXRlbT4KKyAgICA8aXRlbT5mcl9DQTwvaXRlbT4KKyAgICA8aXRlbT5mcl9GUjwvaXRlbT4KKyAgICA8aXRlbT5nYTwvaXRlbT4KKyAgICA8aXRlbT5nZDwvaXRlbT4KKyAgICA8aXRlbT5nb248L2l0ZW0+CisgICAgPGl0ZW0+Z3U8L2l0ZW0+CisgICAgPGl0ZW0+aGU8L2l0ZW0+CisgICAgPGl0ZW0+aGk8L2l0ZW0+CisgICAgPGl0ZW0+aHI8L2l0ZW0+CisgICAgPGl0ZW0+aHU8L2l0ZW0+CisgICAgPGl0ZW0+aHk8L2l0ZW0+CisgICAgPGl0ZW0+aXM8L2l0ZW0+CisgICAgPGl0ZW0+aXQ8L2l0ZW0+CisgICAgPGl0ZW0+a2hhPC9pdGVtPgorICAgIDxpdGVtPmtuPC9pdGVtPgorICAgIDxpdGVtPmtvazwvaXRlbT4KKyAgICA8aXRlbT5rcnU8L2l0ZW0+CisgICAgPGl0ZW0+bHQ8L2l0ZW0+CisgICAgPGl0ZW0+bHY8L2l0ZW0+CisgICAgPGl0ZW0+bWc8L2l0ZW0+CisgICAgPGl0ZW0+bWk8L2l0ZW0+CisgICAgPGl0ZW0+bWw8L2l0ZW0+CisgICAgPGl0ZW0+bW5pPC9pdGVtPgorICAgIDxpdGVtPm1yPC9pdGVtPgorICAgIDxpdGVtPm10PC9pdGVtPgorICAgIDxpdGVtPm11bjwvaXRlbT4KKyAgICA8aXRlbT5td3I8L2l0ZW0+CisgICAgPGl0ZW0+bmU8L2l0ZW0+CisgICAgPGl0ZW0+bmV3PC9pdGVtPgorICAgIDxpdGVtPm5sPC9pdGVtPgorICAgIDxpdGVtPm5sX0JFPC9pdGVtPgorICAgIDxpdGVtPm5sX05MPC9pdGVtPgorICAgIDxpdGVtPm5vPC9pdGVtPgorICAgIDxpdGVtPm5vLWdlbmVyaWM8L2l0ZW0+CisgICAgPGl0ZW0+bm8tb3VwPC9pdGVtPgorICAgIDxpdGVtPm53YzwvaXRlbT4KKyAgICA8aXRlbT5vcjwvaXRlbT4KKyAgICA8aXRlbT5wYTwvaXRlbT4KKyAgICA8aXRlbT5waTwvaXRlbT4KKyAgICA8aXRlbT5wbDwvaXRlbT4KKyAgICA8aXRlbT5wdDwvaXRlbT4KKyAgICA8aXRlbT5ybzwvaXRlbT4KKyAgICA8aXRlbT5ydTwvaXRlbT4KKyAgICA8aXRlbT5zYTwvaXRlbT4KKyAgICA8aXRlbT5zYXQ8L2l0ZW0+CisgICAgPGl0ZW0+c2Q8L2l0ZW0+CisgICAgPGl0ZW0+c2U8L2l0ZW0+CisgICAgPGl0ZW0+c2s8L2l0ZW0+CisgICAgPGl0ZW0+c2w8L2l0ZW0+CisgICAgPGl0ZW0+c3Y8L2l0ZW0+CisgICAgPGl0ZW0+c3YtMTk4OTwvaXRlbT4KKyAgICA8aXRlbT5zdi0xOTk2PC9pdGVtPgorICAgIDxpdGVtPnN3PC9pdGVtPgorICAgIDxpdGVtPnRhPC9pdGVtPgorICAgIDxpdGVtPnRlPC9pdGVtPgorICAgIDxpdGVtPnRyPC9pdGVtPgorICAgIDxpdGVtPnVrPC9pdGVtPgorICAgIDxpdGVtPnZpPC9pdGVtPgorICA8L3N0cmluZy1hcnJheT4KKzwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvQW5kcm9pZC9HcmFkbGUvYXBwL3NyYy9tYWluL3Jlcy94bWwvYWNjZXNzaWJpbGl0eV9zZXJ2aWNlLnhtbCBiL0FuZHJvaWQvR3JhZGxlL2FwcC9zcmMvbWFpbi9yZXMveG1sL2FjY2Vzc2liaWxpdHlfc2VydmljZS54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTRkNjM3YQotLS0gL2Rldi9udWxsCisrKyBiL0FuZHJvaWQvR3JhZGxlL2FwcC9zcmMvbWFpbi9yZXMveG1sL2FjY2Vzc2liaWxpdHlfc2VydmljZS54bWwKQEAgLTAsMCArMSwxMiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KKworPGFjY2Vzc2liaWxpdHktc2VydmljZSB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgIGFuZHJvaWQ6aXNBY2Nlc3NpYmlsaXR5VG9vbD0idHJ1ZSIKKyAgYW5kcm9pZDpkZXNjcmlwdGlvbj0iQHN0cmluZy9hcHBfZGVzY3JpcHRpb24iCisgIGFuZHJvaWQ6YWNjZXNzaWJpbGl0eUV2ZW50VHlwZXM9InR5cGVBbGxNYXNrIgorICBhbmRyb2lkOmFjY2Vzc2liaWxpdHlGbGFncz0iZmxhZ0RlZmF1bHR8ZmxhZ1JlcXVlc3RFbmhhbmNlZFdlYkFjY2Vzc2liaWxpdHl8ZmxhZ1JldHJpZXZlSW50ZXJhY3RpdmVXaW5kb3dzfGZsYWdSZXBvcnRWaWV3SWRzfGZsYWdSZXF1ZXN0QWNjZXNzaWJpbGl0eUJ1dHRvbiIKKyAgYW5kcm9pZDphY2Nlc3NpYmlsaXR5RmVlZGJhY2tUeXBlPSJmZWVkYmFja0dlbmVyaWMiCisgIGFuZHJvaWQ6bm90aWZpY2F0aW9uVGltZW91dD0iMTAwIgorICBhbmRyb2lkOmNhblJldHJpZXZlV2luZG93Q29udGVudD0idHJ1ZSIKKyAgYW5kcm9pZDpzZXR0aW5nc0FjdGl2aXR5PSJvcmcuYTExeS5icmx0dHkuYW5kcm9pZC5hY3Rpdml0aWVzLkFjdGlvbnNBY3Rpdml0eSIKKyAvPgpkaWZmIC0tZ2l0IGEvQW5kcm9pZC9HcmFkbGUvYXBwL3NyYy9tYWluL3Jlcy94bWwvYmFja3VwX3J1bGVzLnhtbCBiL0FuZHJvaWQvR3JhZGxlL2FwcC9zcmMvbWFpbi9yZXMveG1sL2JhY2t1cF9ydWxlcy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGMwMTkzNAotLS0gL2Rldi9udWxsCisrKyBiL0FuZHJvaWQvR3JhZGxlL2FwcC9zcmMvbWFpbi9yZXMveG1sL2JhY2t1cF9ydWxlcy54bWwKQEAgLTAsMCArMSw2IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgorCis8ZnVsbC1iYWNrdXAtY29udGVudD4KKyAgPGluY2x1ZGUgZG9tYWluPSJzaGFyZWRwcmVmIiBwYXRoPSIuIiAvPgorICA8aW5jbHVkZSBkb21haW49ImV4dGVybmFsIiBwYXRoPSIuIiAvPgorPC9mdWxsLWJhY2t1cC1jb250ZW50PgpkaWZmIC0tZ2l0IGEvQW5kcm9pZC9HcmFkbGUvYXBwL3NyYy9tYWluL3Jlcy94bWwvZmlsZV9wcm92aWRlcl9wYXRocy54bWwgYi9BbmRyb2lkL0dyYWRsZS9hcHAvc3JjL21haW4vcmVzL3htbC9maWxlX3Byb3ZpZGVyX3BhdGhzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43Yjk2N2I1Ci0tLSAvZGV2L251bGwKKysrIGIvQW5kcm9pZC9HcmFkbGUvYXBwL3NyYy9tYWluL3Jlcy94bWwvZmlsZV9wcm92aWRlcl9wYXRocy54bWwKQEAgLTAsMCArMSw1IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgorCis8cGF0aHMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIj4KKyAgPGNhY2hlLXBhdGggbmFtZT0iY2FjaGUtcHVibGljIiBwYXRoPSJwdWJsaWMvIiAvPgorPC9wYXRocz4KZGlmZiAtLWdpdCBhL0FuZHJvaWQvR3JhZGxlL2FwcC9zcmMvbWFpbi9yZXMveG1sL2lucHV0X3NlcnZpY2UueG1sIGIvQW5kcm9pZC9HcmFkbGUvYXBwL3NyYy9tYWluL3Jlcy94bWwvaW5wdXRfc2VydmljZS54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODc5NjcxNwotLS0gL2Rldi9udWxsCisrKyBiL0FuZHJvaWQvR3JhZGxlL2FwcC9zcmMvbWFpbi9yZXMveG1sL2lucHV0X3NlcnZpY2UueG1sCkBAIC0wLDAgKzEsMTAgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+CisKKzxpbnB1dC1tZXRob2QgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICBhbmRyb2lkOmlzRGVmYXVsdD0iZmFsc2UiCisgID4KKworICA8c3VidHlwZQorICAgIGFuZHJvaWQ6bGFiZWw9IkBzdHJpbmcvaW5wdXRTZXJ2aWNlX3R5cGUiCisgICAvPgorPC9pbnB1dC1tZXRob2Q+CmRpZmYgLS1naXQgYS9BbmRyb2lkL0dyYWRsZS9hcHAvc3JjL21haW4vcmVzL3htbC9zZXR0aW5nc19hZHZhbmNlZC54bWwgYi9BbmRyb2lkL0dyYWRsZS9hcHAvc3JjL21haW4vcmVzL3htbC9zZXR0aW5nc19hZHZhbmNlZC54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDlkZDZjYQotLS0gL2Rldi9udWxsCisrKyBiL0FuZHJvaWQvR3JhZGxlL2FwcC9zcmMvbWFpbi9yZXMveG1sL3NldHRpbmdzX2FkdmFuY2VkLnhtbApAQCAtMCwwICsxLDY2IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgorCis8UHJlZmVyZW5jZVNjcmVlbiB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgIGFuZHJvaWQ6dGl0bGU9IkBzdHJpbmcvU0VUVElOR1NfU0NSRUVOX0FEVkFOQ0VEIgorICA+CisKKyAgPExpc3RQcmVmZXJlbmNlCisgICAgYW5kcm9pZDprZXk9IkBzdHJpbmcvUFJFRl9LRVlfS0VZQk9BUkRfVEFCTEUiCisgICAgYW5kcm9pZDpwZXJzaXN0ZW50PSJ0cnVlIgorICAgIGFuZHJvaWQ6dGl0bGU9IkBzdHJpbmcvU0VUVElOR1NfQlVUVE9OX0tFWUJPQVJEX1RBQkxFIgorICAgIGFuZHJvaWQ6ZW50cmllcz0iQGFycmF5L0tFWUJPQVJEX1RBQkxFX0xBQkVMUyIKKyAgICBhbmRyb2lkOmVudHJ5VmFsdWVzPSJAYXJyYXkvS0VZQk9BUkRfVEFCTEVfVkFMVUVTIgorICAgIGFuZHJvaWQ6ZGVmYXVsdFZhbHVlPSJAc3RyaW5nL0RFRkFVTFRfS0VZQk9BUkRfVEFCTEUiCisgICAvPgorCisgIDxMaXN0UHJlZmVyZW5jZQorICAgIGFuZHJvaWQ6a2V5PSJAc3RyaW5nL1BSRUZfS0VZX0FUVFJJQlVURVNfVEFCTEUiCisgICAgYW5kcm9pZDpwZXJzaXN0ZW50PSJ0cnVlIgorICAgIGFuZHJvaWQ6dGl0bGU9IkBzdHJpbmcvU0VUVElOR1NfQlVUVE9OX0FUVFJJQlVURVNfVEFCTEUiCisgICAgYW5kcm9pZDplbnRyaWVzPSJAYXJyYXkvQVRUUklCVVRFU19UQUJMRV9MQUJFTFMiCisgICAgYW5kcm9pZDplbnRyeVZhbHVlcz0iQGFycmF5L0FUVFJJQlVURVNfVEFCTEVfVkFMVUVTIgorICAgIGFuZHJvaWQ6ZGVmYXVsdFZhbHVlPSJAc3RyaW5nL0RFRkFVTFRfQVRUUklCVVRFU19UQUJMRSIKKyAgIC8+CisKKyAgPExpc3RQcmVmZXJlbmNlCisgICAgYW5kcm9pZDprZXk9IkBzdHJpbmcvUFJFRl9LRVlfTE9HX0xFVkVMIgorICAgIGFuZHJvaWQ6cGVyc2lzdGVudD0idHJ1ZSIKKyAgICBhbmRyb2lkOnRpdGxlPSJAc3RyaW5nL1NFVFRJTkdTX0JVVFRPTl9MT0dfTEVWRUwiCisgICAgYW5kcm9pZDplbnRyaWVzPSJAYXJyYXkvTE9HX0xFVkVMX0xBQkVMUyIKKyAgICBhbmRyb2lkOmVudHJ5VmFsdWVzPSJAYXJyYXkvTE9HX0xFVkVMX1ZBTFVFUyIKKyAgICBhbmRyb2lkOmRlZmF1bHRWYWx1ZT0iQHN0cmluZy9ERUZBVUxUX0xPR19MRVZFTCIKKyAgIC8+CisKKyAgPE11bHRpU2VsZWN0TGlzdFByZWZlcmVuY2UKKyAgICBhbmRyb2lkOmtleT0iQHN0cmluZy9QUkVGX0tFWV9MT0dfQ0FURUdPUklFUyIKKyAgICBhbmRyb2lkOnBlcnNpc3RlbnQ9InRydWUiCisgICAgYW5kcm9pZDp0aXRsZT0iQHN0cmluZy9TRVRUSU5HU19CVVRUT05fTE9HX0NBVEVHT1JJRVMiCisgICAgYW5kcm9pZDplbnRyaWVzPSJAYXJyYXkvTE9HX0NBVEVHT1JZX0xBQkVMUyIKKyAgICBhbmRyb2lkOmVudHJ5VmFsdWVzPSJAYXJyYXkvTE9HX0NBVEVHT1JZX1ZBTFVFUyIKKyAgICBhbmRyb2lkOmRlZmF1bHRWYWx1ZT0iQGFycmF5L0VNUFRZX1NUUklOR19BUlJBWSIKKyAgIC8+CisKKyAgPENoZWNrQm94UHJlZmVyZW5jZQorICAgIGFuZHJvaWQ6a2V5PSJAc3RyaW5nL1BSRUZfS0VZX0xPR19BQ0NFU1NJQklMSVRZX0VWRU5UUyIKKyAgICBhbmRyb2lkOnBlcnNpc3RlbnQ9InRydWUiCisgICAgYW5kcm9pZDp0aXRsZT0iQHN0cmluZy9TRVRUSU5HU19DSEVDS0JPWF9MT0dfQUNDRVNTSUJJTElUWV9FVkVOVFMiCisgICAvPgorCisgIDxDaGVja0JveFByZWZlcmVuY2UKKyAgICBhbmRyb2lkOmtleT0iQHN0cmluZy9QUkVGX0tFWV9MT0dfUkVOREVSRURfU0NSRUVOIgorICAgIGFuZHJvaWQ6cGVyc2lzdGVudD0idHJ1ZSIKKyAgICBhbmRyb2lkOnRpdGxlPSJAc3RyaW5nL1NFVFRJTkdTX0NIRUNLQk9YX0xPR19SRU5ERVJFRF9TQ1JFRU4iCisgICAvPgorCisgIDxDaGVja0JveFByZWZlcmVuY2UKKyAgICBhbmRyb2lkOmtleT0iQHN0cmluZy9QUkVGX0tFWV9MT0dfS0VZQk9BUkRfRVZFTlRTIgorICAgIGFuZHJvaWQ6cGVyc2lzdGVudD0idHJ1ZSIKKyAgICBhbmRyb2lkOnRpdGxlPSJAc3RyaW5nL1NFVFRJTkdTX0NIRUNLQk9YX0xPR19LRVlCT0FSRF9FVkVOVFMiCisgICAvPgorCisgIDxDaGVja0JveFByZWZlcmVuY2UKKyAgICBhbmRyb2lkOmtleT0iQHN0cmluZy9QUkVGX0tFWV9MT0dfVU5IQU5ETEVEX0VWRU5UUyIKKyAgICBhbmRyb2lkOnBlcnNpc3RlbnQ9InRydWUiCisgICAgYW5kcm9pZDp0aXRsZT0iQHN0cmluZy9TRVRUSU5HU19DSEVDS0JPWF9MT0dfVU5IQU5ETEVEX0VWRU5UUyIKKyAgIC8+Cis8L1ByZWZlcmVuY2VTY3JlZW4+CmRpZmYgLS1naXQgYS9BbmRyb2lkL0dyYWRsZS9hcHAvc3JjL21haW4vcmVzL3htbC9zZXR0aW5nc19kZXZpY2VzLnhtbCBiL0FuZHJvaWQvR3JhZGxlL2FwcC9zcmMvbWFpbi9yZXMveG1sL3NldHRpbmdzX2RldmljZXMueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFlMDM1NTUKLS0tIC9kZXYvbnVsbAorKysgYi9BbmRyb2lkL0dyYWRsZS9hcHAvc3JjL21haW4vcmVzL3htbC9zZXR0aW5nc19kZXZpY2VzLnhtbApAQCAtMCwwICsxLDgxIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgorCis8UHJlZmVyZW5jZVNjcmVlbiB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgIGFuZHJvaWQ6dGl0bGU9IkBzdHJpbmcvU0VUVElOR1NfU0NSRUVOX0RFVklDRVMiCisgID4KKworICA8TGlzdFByZWZlcmVuY2UKKyAgICBhbmRyb2lkOmtleT0iQHN0cmluZy9QUkVGX0tFWV9TRUxFQ1RFRF9ERVZJQ0UiCisgICAgYW5kcm9pZDpwZXJzaXN0ZW50PSJ0cnVlIgorICAgIGFuZHJvaWQ6dGl0bGU9IkBzdHJpbmcvREVWSUNFU19CVVRUT05fU0VMRUNURUQiCisgICAvPgorCisgIDxQcmVmZXJlbmNlU2NyZWVuCisgICAgYW5kcm9pZDprZXk9IkBzdHJpbmcvUFJFRl9LRVlfQUREX0RFVklDRSIKKyAgICBhbmRyb2lkOnRpdGxlPSJAc3RyaW5nL0RFVklDRVNfQlVUVE9OX0FERCIKKyAgICA+CisKKyAgICA8RWRpdFRleHRQcmVmZXJlbmNlCisgICAgICBhbmRyb2lkOmtleT0iQHN0cmluZy9QUkVGX0tFWV9ERVZJQ0VfTkFNRSIKKyAgICAgIGFuZHJvaWQ6cGVyc2lzdGVudD0iZmFsc2UiCisgICAgICBhbmRyb2lkOnRpdGxlPSJAc3RyaW5nL0FERF9ERVZJQ0VfTkFNRSIKKyAgICAgIGFuZHJvaWQ6ZGVmYXVsdFZhbHVlPSIiCisgICAgIC8+CisKKyAgICA8TGlzdFByZWZlcmVuY2UKKyAgICAgIGFuZHJvaWQ6a2V5PSJAc3RyaW5nL1BSRUZfS0VZX0RFVklDRV9NRVRIT0QiCisgICAgICBhbmRyb2lkOnBlcnNpc3RlbnQ9ImZhbHNlIgorICAgICAgYW5kcm9pZDp0aXRsZT0iQHN0cmluZy9BRERfREVWSUNFX01FVEhPRCIKKyAgICAgIGFuZHJvaWQ6ZW50cmllcz0iQGFycmF5L0RFVklDRV9NRVRIT0RfTEFCRUxTIgorICAgICAgYW5kcm9pZDplbnRyeVZhbHVlcz0iQGFycmF5L0RFVklDRV9NRVRIT0RfVkFMVUVTIgorICAgICAgYW5kcm9pZDpkZWZhdWx0VmFsdWU9IkBzdHJpbmcvREVGQVVMVF9DT01NVU5JQ0FUSU9OX01FVEhPRCIKKyAgICAgLz4KKworICAgIDxMaXN0UHJlZmVyZW5jZQorICAgICAgYW5kcm9pZDprZXk9IkBzdHJpbmcvUFJFRl9LRVlfREVWSUNFX0lERU5USUZJRVIiCisgICAgICBhbmRyb2lkOnBlcnNpc3RlbnQ9ImZhbHNlIgorICAgICAgYW5kcm9pZDp0aXRsZT0iQHN0cmluZy9BRERfREVWSUNFX1NFTEVDVCIKKyAgICAgIGFuZHJvaWQ6ZW50cmllcz0iQGFycmF5L0VNUFRZX1NUUklOR19BUlJBWSIKKyAgICAgIGFuZHJvaWQ6ZW50cnlWYWx1ZXM9IkBhcnJheS9FTVBUWV9TVFJJTkdfQVJSQVkiCisgICAgIC8+CisKKyAgICA8TGlzdFByZWZlcmVuY2UKKyAgICAgIGFuZHJvaWQ6a2V5PSJAc3RyaW5nL1BSRUZfS0VZX0RFVklDRV9EUklWRVIiCisgICAgICBhbmRyb2lkOnBlcnNpc3RlbnQ9ImZhbHNlIgorICAgICAgYW5kcm9pZDp0aXRsZT0iQHN0cmluZy9BRERfREVWSUNFX0RSSVZFUiIKKyAgICAgIGFuZHJvaWQ6ZW50cmllcz0iQGFycmF5L0JSQUlMTEVfRFJJVkVSX0xBQkVMUyIKKyAgICAgIGFuZHJvaWQ6ZW50cnlWYWx1ZXM9IkBhcnJheS9CUkFJTExFX0RSSVZFUl9WQUxVRVMiCisgICAgICBhbmRyb2lkOmRlZmF1bHRWYWx1ZT0iQHN0cmluZy9ERUZBVUxUX0JSQUlMTEVfRFJJVkVSIgorICAgICAvPgorCisgICAgPFByZWZlcmVuY2UKKyAgICAgIGFuZHJvaWQ6a2V5PSJAc3RyaW5nL1BSRUZfS0VZX0RFVklDRV9BREQiCisgICAgICBhbmRyb2lkOnBlcnNpc3RlbnQ9ImZhbHNlIgorICAgICAgYW5kcm9pZDp0aXRsZT0iQHN0cmluZy9BRERfREVWSUNFX0RPTkUiCisgICAgIC8+CisgIDwvUHJlZmVyZW5jZVNjcmVlbj4KKworICA8UHJlZmVyZW5jZVNjcmVlbgorICAgIGFuZHJvaWQ6a2V5PSJAc3RyaW5nL1BSRUZfS0VZX1JFTU9WRV9ERVZJQ0UiCisgICAgYW5kcm9pZDp0aXRsZT0iQHN0cmluZy9ERVZJQ0VTX0JVVFRPTl9SRU1PVkUiCisgICAgPgorCisgICAgPFByZWZlcmVuY2UKKyAgICAgIGFuZHJvaWQ6a2V5PSJAc3RyaW5nL1BSRUZfS0VZX1JFTU9WRV9ERVZJQ0VfUFJPTVBUIgorICAgICAgYW5kcm9pZDpwZXJzaXN0ZW50PSJmYWxzZSIKKyAgICAgIGFuZHJvaWQ6dGl0bGU9IkBzdHJpbmcvUkVNT1ZFX0RFVklDRV9QUk9NUFQiCisgICAgIC8+CisKKyAgICA8UHJlZmVyZW5jZQorICAgICAgYW5kcm9pZDprZXk9IkBzdHJpbmcvUFJFRl9LRVlfUkVNT1ZFX0RFVklDRV9DQU5DRUwiCisgICAgICBhbmRyb2lkOnBlcnNpc3RlbnQ9ImZhbHNlIgorICAgICAgYW5kcm9pZDp0aXRsZT0iQHN0cmluZy9hbmRyb2lkOm5vIgorICAgICAvPgorCisgICAgPFByZWZlcmVuY2UKKyAgICAgIGFuZHJvaWQ6a2V5PSJAc3RyaW5nL1BSRUZfS0VZX1JFTU9WRV9ERVZJQ0VfQ09ORklSTSIKKyAgICAgIGFuZHJvaWQ6cGVyc2lzdGVudD0iZmFsc2UiCisgICAgICBhbmRyb2lkOnRpdGxlPSJAc3RyaW5nL2FuZHJvaWQ6eWVzIgorICAgICAvPgorICA8L1ByZWZlcmVuY2VTY3JlZW4+Cis8L1ByZWZlcmVuY2VTY3JlZW4+CmRpZmYgLS1naXQgYS9BbmRyb2lkL0dyYWRsZS9hcHAvc3JjL21haW4vcmVzL3htbC9zZXR0aW5nc19nZW5lcmFsLnhtbCBiL0FuZHJvaWQvR3JhZGxlL2FwcC9zcmMvbWFpbi9yZXMveG1sL3NldHRpbmdzX2dlbmVyYWwueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ3ODU5YzEKLS0tIC9kZXYvbnVsbAorKysgYi9BbmRyb2lkL0dyYWRsZS9hcHAvc3JjL21haW4vcmVzL3htbC9zZXR0aW5nc19nZW5lcmFsLnhtbApAQCAtMCwwICsxLDQ4IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgorCis8UHJlZmVyZW5jZVNjcmVlbiB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgIGFuZHJvaWQ6dGl0bGU9IkBzdHJpbmcvU0VUVElOR1NfU0NSRUVOX0dFTkVSQUwiCisgID4KKworICA8Q2hlY2tCb3hQcmVmZXJlbmNlCisgICAgYW5kcm9pZDprZXk9IkBzdHJpbmcvUFJFRl9LRVlfUkVMRUFTRV9CUkFJTExFX0RFVklDRSIKKyAgICBhbmRyb2lkOnBlcnNpc3RlbnQ9InRydWUiCisgICAgYW5kcm9pZDp0aXRsZT0iQHN0cmluZy9TRVRUSU5HU19DSEVDS0JPWF9SRUxFQVNFX0JSQUlMTEVfREVWSUNFIgorICAgLz4KKworICA8TGlzdFByZWZlcmVuY2UKKyAgICBhbmRyb2lkOmtleT0iQHN0cmluZy9QUkVGX0tFWV9OQVZJR0FUSU9OX01PREUiCisgICAgYW5kcm9pZDpwZXJzaXN0ZW50PSJ0cnVlIgorICAgIGFuZHJvaWQ6dGl0bGU9IkBzdHJpbmcvU0VUVElOR1NfQlVUVE9OX05BVklHQVRJT05fTU9ERSIKKyAgICBhbmRyb2lkOmVudHJpZXM9IkBhcnJheS9OQVZJR0FUSU9OX01PREVfTEFCRUxTIgorICAgIGFuZHJvaWQ6ZW50cnlWYWx1ZXM9IkBhcnJheS9OQVZJR0FUSU9OX01PREVfVkFMVUVTIgorICAgIGFuZHJvaWQ6ZGVmYXVsdFZhbHVlPSJAc3RyaW5nL0RFRkFVTFRfTkFWSUdBVElPTl9NT0RFIgorICAgLz4KKworICA8TGlzdFByZWZlcmVuY2UKKyAgICBhbmRyb2lkOmtleT0iQHN0cmluZy9QUkVGX0tFWV9URVhUX1RBQkxFIgorICAgIGFuZHJvaWQ6cGVyc2lzdGVudD0idHJ1ZSIKKyAgICBhbmRyb2lkOnRpdGxlPSJAc3RyaW5nL1NFVFRJTkdTX0JVVFRPTl9URVhUX1RBQkxFIgorICAgIGFuZHJvaWQ6ZW50cmllcz0iQGFycmF5L1RFWFRfVEFCTEVfTEFCRUxTIgorICAgIGFuZHJvaWQ6ZW50cnlWYWx1ZXM9IkBhcnJheS9URVhUX1RBQkxFX1ZBTFVFUyIKKyAgICBhbmRyb2lkOmRlZmF1bHRWYWx1ZT0iQHN0cmluZy9ERUZBVUxUX1RFWFRfVEFCTEUiCisgICAvPgorCisgIDxMaXN0UHJlZmVyZW5jZQorICAgIGFuZHJvaWQ6a2V5PSJAc3RyaW5nL1BSRUZfS0VZX0NPTlRSQUNUSU9OX1RBQkxFIgorICAgIGFuZHJvaWQ6cGVyc2lzdGVudD0idHJ1ZSIKKyAgICBhbmRyb2lkOnRpdGxlPSJAc3RyaW5nL1NFVFRJTkdTX0JVVFRPTl9DT05UUkFDVElPTl9UQUJMRSIKKyAgICBhbmRyb2lkOmVudHJpZXM9IkBhcnJheS9DT05UUkFDVElPTl9UQUJMRV9MQUJFTFMiCisgICAgYW5kcm9pZDplbnRyeVZhbHVlcz0iQGFycmF5L0NPTlRSQUNUSU9OX1RBQkxFX1ZBTFVFUyIKKyAgICBhbmRyb2lkOmRlZmF1bHRWYWx1ZT0iQHN0cmluZy9ERUZBVUxUX0NPTlRSQUNUSU9OX1RBQkxFIgorICAgLz4KKworICA8TGlzdFByZWZlcmVuY2UKKyAgICBhbmRyb2lkOmtleT0iQHN0cmluZy9QUkVGX0tFWV9TUEVFQ0hfU1VQUE9SVCIKKyAgICBhbmRyb2lkOnBlcnNpc3RlbnQ9InRydWUiCisgICAgYW5kcm9pZDp0aXRsZT0iQHN0cmluZy9TRVRUSU5HU19CVVRUT05fU1BFRUNIX1NVUFBPUlQiCisgICAgYW5kcm9pZDplbnRyaWVzPSJAYXJyYXkvU1BFRUNIX1NVUFBPUlRfTEFCRUxTIgorICAgIGFuZHJvaWQ6ZW50cnlWYWx1ZXM9IkBhcnJheS9TUEVFQ0hfU1VQUE9SVF9WQUxVRVMiCisgICAgYW5kcm9pZDpkZWZhdWx0VmFsdWU9IkBzdHJpbmcvREVGQVVMVF9TUEVFQ0hfU1VQUE9SVCIKKyAgIC8+Cis8L1ByZWZlcmVuY2VTY3JlZW4+CmRpZmYgLS1naXQgYS9BbmRyb2lkL0dyYWRsZS9hcHAvc3JjL21haW4vcmVzL3htbC9zZXR0aW5nc19oZWFkZXJzLnhtbCBiL0FuZHJvaWQvR3JhZGxlL2FwcC9zcmMvbWFpbi9yZXMveG1sL3NldHRpbmdzX2hlYWRlcnMueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjZjk2MzAKLS0tIC9kZXYvbnVsbAorKysgYi9BbmRyb2lkL0dyYWRsZS9hcHAvc3JjL21haW4vcmVzL3htbC9zZXR0aW5nc19oZWFkZXJzLnhtbApAQCAtMCwwICsxLDI1IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgorCis8cHJlZmVyZW5jZS1oZWFkZXJzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgPgorCisgIDxoZWFkZXIKKyAgICBhbmRyb2lkOmZyYWdtZW50PSJvcmcuYTExeS5icmx0dHkuYW5kcm9pZC5zZXR0aW5ncy5HZW5lcmFsU2V0dGluZ3MiCisgICAgYW5kcm9pZDp0aXRsZT0iQHN0cmluZy9TRVRUSU5HU19TQ1JFRU5fR0VORVJBTCIKKyAgIC8+CisKKyAgPGhlYWRlcgorICAgIGFuZHJvaWQ6ZnJhZ21lbnQ9Im9yZy5hMTF5LmJybHR0eS5hbmRyb2lkLnNldHRpbmdzLk1lc3NhZ2VTZXR0aW5ncyIKKyAgICBhbmRyb2lkOnRpdGxlPSJAc3RyaW5nL1NFVFRJTkdTX1NDUkVFTl9NRVNTQUdFIgorICAgLz4KKworICA8aGVhZGVyCisgICAgYW5kcm9pZDpmcmFnbWVudD0ib3JnLmExMXkuYnJsdHR5LmFuZHJvaWQuc2V0dGluZ3MuRGV2aWNlTWFuYWdlciIKKyAgICBhbmRyb2lkOnRpdGxlPSJAc3RyaW5nL1NFVFRJTkdTX1NDUkVFTl9ERVZJQ0VTIgorICAgLz4KKworICA8aGVhZGVyCisgICAgYW5kcm9pZDpmcmFnbWVudD0ib3JnLmExMXkuYnJsdHR5LmFuZHJvaWQuc2V0dGluZ3MuQWR2YW5jZWRTZXR0aW5ncyIKKyAgICBhbmRyb2lkOnRpdGxlPSJAc3RyaW5nL1NFVFRJTkdTX1NDUkVFTl9BRFZBTkNFRCIKKyAgIC8+Cis8L3ByZWZlcmVuY2UtaGVhZGVycz4KZGlmZiAtLWdpdCBhL0FuZHJvaWQvR3JhZGxlL2FwcC9zcmMvbWFpbi9yZXMveG1sL3NldHRpbmdzX21lc3NhZ2UueG1sIGIvQW5kcm9pZC9HcmFkbGUvYXBwL3NyYy9tYWluL3Jlcy94bWwvc2V0dGluZ3NfbWVzc2FnZS54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTc0OGEzMQotLS0gL2Rldi9udWxsCisrKyBiL0FuZHJvaWQvR3JhZGxlL2FwcC9zcmMvbWFpbi9yZXMveG1sL3NldHRpbmdzX21lc3NhZ2UueG1sCkBAIC0wLDAgKzEsMjQgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+CisKKzxQcmVmZXJlbmNlU2NyZWVuIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgYW5kcm9pZDp0aXRsZT0iQHN0cmluZy9TRVRUSU5HU19TQ1JFRU5fTUVTU0FHRSIKKyAgPgorCisgIDxDaGVja0JveFByZWZlcmVuY2UKKyAgICBhbmRyb2lkOmtleT0iQHN0cmluZy9QUkVGX0tFWV9TSE9XX05PVElGSUNBVElPTlMiCisgICAgYW5kcm9pZDpwZXJzaXN0ZW50PSJ0cnVlIgorICAgIGFuZHJvaWQ6dGl0bGU9IkBzdHJpbmcvU0VUVElOR1NfQ0hFQ0tCT1hfU0hPV19OT1RJRklDQVRJT05TIgorICAgLz4KKworICA8Q2hlY2tCb3hQcmVmZXJlbmNlCisgICAgYW5kcm9pZDprZXk9IkBzdHJpbmcvUFJFRl9LRVlfU0hPV19BTEVSVFMiCisgICAgYW5kcm9pZDpwZXJzaXN0ZW50PSJ0cnVlIgorICAgIGFuZHJvaWQ6dGl0bGU9IkBzdHJpbmcvU0VUVElOR1NfQ0hFQ0tCT1hfU0hPV19BTEVSVFMiCisgICAvPgorCisgIDxDaGVja0JveFByZWZlcmVuY2UKKyAgICBhbmRyb2lkOmtleT0iQHN0cmluZy9QUkVGX0tFWV9TSE9XX0FOTk9VTkNFTUVOVFMiCisgICAgYW5kcm9pZDpwZXJzaXN0ZW50PSJ0cnVlIgorICAgIGFuZHJvaWQ6dGl0bGU9IkBzdHJpbmcvU0VUVElOR1NfQ0hFQ0tCT1hfU0hPV19BTk5PVU5DRU1FTlRTIgorICAgLz4KKzwvUHJlZmVyZW5jZVNjcmVlbj4KZGlmZiAtLWdpdCBhL0FuZHJvaWQvR3JhZGxlL2FwcC9zcmMvbWFpbi9yZXMveG1sL3VzYl9kZXZpY2VzLnhtbCBiL0FuZHJvaWQvR3JhZGxlL2FwcC9zcmMvbWFpbi9yZXMveG1sL3VzYl9kZXZpY2VzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZDRjMmZhCi0tLSAvZGV2L251bGwKKysrIGIvQW5kcm9pZC9HcmFkbGUvYXBwL3NyYy9tYWluL3Jlcy94bWwvdXNiX2RldmljZXMueG1sCkBAIC0wLDAgKzEsNTE0IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgorCis8cmVzb3VyY2VzPgorICA8IS0tIEJFR0lOX1VTQl9CUkFJTExFX0RFVklDRVMgLS0+CisKKyAgPCEtLSBEZXZpY2U6IDA0MDM6NjAwMSAtLT4KKyAgPCEtLSBHZW5lcmljIElkZW50aWZpZXIgLS0+CisgIDwhLS0gVmVuZG9yOiBGdXR1cmUgVGVjaG5vbG9neSBEZXZpY2VzIEludGVybmF0aW9uYWwsIEx0ZC4gLS0+CisgIDwhLS0gUHJvZHVjdDogRlQyMzIgVVNCLVNlcmlhbCAoVUFSVCkgSUMgLS0+CisgIDwhLS0gQWxiYXRyb3NzIFthbGwgbW9kZWxzXSAtLT4KKyAgPCEtLSBDZWJyYSBbYWxsIG1vZGVsc10gLS0+CisgIDwhLS0gSElNUyBbU3luYyBCcmFpbGxlXSAtLT4KKyAgPCEtLSBIYW5keVRlY2ggW0ZUREkgY2hpcF0gLS0+CisgIDwhLS0gSGVkbyBbTW9iaWxMaW5lXSAtLT4KKyAgPCEtLSBNRFYgW2FsbCBtb2RlbHNdIC0tPgorICA8dXNiLWRldmljZSB2ZW5kb3ItaWQ9IjEwMjciIHByb2R1Y3QtaWQ9IjI0NTc3IiAvPgorCisgIDwhLS0gRGV2aWNlOiAwNDAzOjYwMTAgLS0+CisgIDwhLS0gR2VuZXJpYyBJZGVudGlmaWVyIC0tPgorICA8IS0tIFZlbmRvcjogRnV0dXJlIFRlY2hub2xvZ3kgRGV2aWNlcyBJbnRlcm5hdGlvbmFsLCBMdGQgLS0+CisgIDwhLS0gUHJvZHVjdDogRlQyMjMyQy9EL0ggRHVhbCBVQVJUL0ZJRk8gSUMgLS0+CisgIDwhLS0gRG90UGFkIFthbGwgbW9kZWxzXSAtLT4KKyAgPHVzYi1kZXZpY2UgdmVuZG9yLWlkPSIxMDI3IiBwcm9kdWN0LWlkPSIyNDU5MiIgLz4KKworICA8IS0tIERldmljZTogMDQwMzpERTU4IC0tPgorICA8IS0tIEhlZG8gW01vYmlsTGluZV0gLS0+CisgIDx1c2ItZGV2aWNlIHZlbmRvci1pZD0iMTAyNyIgcHJvZHVjdC1pZD0iNTY5MjAiIC8+CisKKyAgPCEtLSBEZXZpY2U6IDA0MDM6REU1OSAtLT4KKyAgPCEtLSBIZWRvIFtQcm9maUxpbmVdIC0tPgorICA8dXNiLWRldmljZSB2ZW5kb3ItaWQ9IjEwMjciIHByb2R1Y3QtaWQ9IjU2OTIxIiAvPgorCisgIDwhLS0gRGV2aWNlOiAwNDAzOkYyMDggLS0+CisgIDwhLS0gUGFwZW5tZWllciBbYWxsIG1vZGVsc10gLS0+CisgIDx1c2ItZGV2aWNlIHZlbmRvci1pZD0iMTAyNyIgcHJvZHVjdC1pZD0iNjE5NjAiIC8+CisKKyAgPCEtLSBEZXZpY2U6IDA0MDM6RkU3MCAtLT4KKyAgPCEtLSBCYXVtIFtWYXJpbyA0MCAoNDAgY2VsbHMpXSAtLT4KKyAgPHVzYi1kZXZpY2UgdmVuZG9yLWlkPSIxMDI3IiBwcm9kdWN0LWlkPSI2NTEzNiIgLz4KKworICA8IS0tIERldmljZTogMDQwMzpGRTcxIC0tPgorICA8IS0tIEJhdW0gW1BvY2tldFZhcmlvICgyNCBjZWxscyldIC0tPgorICA8dXNiLWRldmljZSB2ZW5kb3ItaWQ9IjEwMjciIHByb2R1Y3QtaWQ9IjY1MTM3IiAvPgorCisgIDwhLS0gRGV2aWNlOiAwNDAzOkZFNzIgLS0+CisgIDwhLS0gQmF1bSBbU3VwZXJWYXJpbyA0MCAoNDAgY2VsbHMpXSAtLT4KKyAgPHVzYi1kZXZpY2UgdmVuZG9yLWlkPSIxMDI3IiBwcm9kdWN0LWlkPSI2NTEzOCIgLz4KKworICA8IS0tIERldmljZTogMDQwMzpGRTczIC0tPgorICA8IS0tIEJhdW0gW1N1cGVyVmFyaW8gMzIgKDMyIGNlbGxzKV0gLS0+CisgIDx1c2ItZGV2aWNlIHZlbmRvci1pZD0iMTAyNyIgcHJvZHVjdC1pZD0iNjUxMzkiIC8+CisKKyAgPCEtLSBEZXZpY2U6IDA0MDM6RkU3NCAtLT4KKyAgPCEtLSBCYXVtIFtTdXBlclZhcmlvIDY0ICg2NCBjZWxscyldIC0tPgorICA8dXNiLWRldmljZSB2ZW5kb3ItaWQ9IjEwMjciIHByb2R1Y3QtaWQ9IjY1MTQwIiAvPgorCisgIDwhLS0gRGV2aWNlOiAwNDAzOkZFNzUgLS0+CisgIDwhLS0gQmF1bSBbU3VwZXJWYXJpbyA4MCAoODAgY2VsbHMpXSAtLT4KKyAgPHVzYi1kZXZpY2UgdmVuZG9yLWlkPSIxMDI3IiBwcm9kdWN0LWlkPSI2NTE0MSIgLz4KKworICA8IS0tIERldmljZTogMDQwMzpGRTc2IC0tPgorICA8IS0tIEJhdW0gW1ZhcmlvUHJvIDgwICg4MCBjZWxscyldIC0tPgorICA8dXNiLWRldmljZSB2ZW5kb3ItaWQ9IjEwMjciIHByb2R1Y3QtaWQ9IjY1MTQyIiAvPgorCisgIDwhLS0gRGV2aWNlOiAwNDAzOkZFNzcgLS0+CisgIDwhLS0gQmF1bSBbVmFyaW9Qcm8gNjQgKDY0IGNlbGxzKV0gLS0+CisgIDx1c2ItZGV2aWNlIHZlbmRvci1pZD0iMTAyNyIgcHJvZHVjdC1pZD0iNjUxNDMiIC8+CisKKyAgPCEtLSBEZXZpY2U6IDA0NTI6MDEwMCAtLT4KKyAgPCEtLSBNZXRlYyBbYWxsIG1vZGVsc10gLS0+CisgIDx1c2ItZGV2aWNlIHZlbmRvci1pZD0iMTEwNiIgcHJvZHVjdC1pZD0iMjU2IiAvPgorCisgIDwhLS0gRGV2aWNlOiAwNDVFOjkzMEEgLS0+CisgIDwhLS0gSElNUyBbQnJhaWxsZSBTZW5zZSAoVVNCIDEuMSldIC0tPgorICA8IS0tIEhJTVMgW0JyYWlsbGUgU2Vuc2UgKFVTQiAyLjApXSAtLT4KKyAgPCEtLSBISU1TIFtCcmFpbGxlIFNlbnNlIFUyIChVU0IgMi4wKV0gLS0+CisgIDx1c2ItZGV2aWNlIHZlbmRvci1pZD0iMTExOCIgcHJvZHVjdC1pZD0iMzc2NDIiIC8+CisKKyAgPCEtLSBEZXZpY2U6IDA0NUU6OTMwQiAtLT4KKyAgPCEtLSBISU1TIFtCcmFpbGxlIEVkZ2UgYW5kIFFCcmFpbGxlWExdIC0tPgorICA8dXNiLWRldmljZSB2ZW5kb3ItaWQ9IjExMTgiIHByb2R1Y3QtaWQ9IjM3NjQzIiAvPgorCisgIDwhLS0gRGV2aWNlOiAwNDgzOkExRDMgLS0+CisgIDwhLS0gQmF1bSBbT3JiaXQgUmVhZGVyIDIwICgyMCBjZWxscyldIC0tPgorICA8dXNiLWRldmljZSB2ZW5kb3ItaWQ9IjExNTUiIHByb2R1Y3QtaWQ9IjQxNDI3IiAvPgorCisgIDwhLS0gRGV2aWNlOiAwNDgzOkEzNjYgLS0+CisgIDwhLS0gQmF1bSBbT3JiaXQgUmVhZGVyIDQwICg0MCBjZWxscyldIC0tPgorICA8dXNiLWRldmljZSB2ZW5kb3ItaWQ9IjExNTUiIHByb2R1Y3QtaWQ9IjQxODMwIiAvPgorCisgIDwhLS0gRGV2aWNlOiAwNkIwOjAwMDEgLS0+CisgIDwhLS0gQWx2YSBbU2F0ZWxsaXRlICg1bm4pXSAtLT4KKyAgPHVzYi1kZXZpY2UgdmVuZG9yLWlkPSIxNzEyIiBwcm9kdWN0LWlkPSIxIiAvPgorCisgIDwhLS0gRGV2aWNlOiAwNzk4OjAwMDEgLS0+CisgIDwhLS0gVm95YWdlciBbYWxsIG1vZGVsc10gLS0+CisgIDx1c2ItZGV2aWNlIHZlbmRvci1pZD0iMTk0NCIgcHJvZHVjdC1pZD0iMSIgLz4KKworICA8IS0tIERldmljZTogMDc5ODowNjAwIC0tPgorICA8IS0tIEFsdmEgW1ZveWFnZXIgUHJvdG9jb2wgQ29udmVydGVyXSAtLT4KKyAgPHVzYi1kZXZpY2UgdmVuZG9yLWlkPSIxOTQ0IiBwcm9kdWN0LWlkPSIxNTM2IiAvPgorCisgIDwhLS0gRGV2aWNlOiAwNzk4OjA2MjQgLS0+CisgIDwhLS0gQWx2YSBbQkM2MjRdIC0tPgorICA8dXNiLWRldmljZSB2ZW5kb3ItaWQ9IjE5NDQiIHByb2R1Y3QtaWQ9IjE1NzIiIC8+CisKKyAgPCEtLSBEZXZpY2U6IDA3OTg6MDY0MCAtLT4KKyAgPCEtLSBBbHZhIFtCQzY0MF0gLS0+CisgIDx1c2ItZGV2aWNlIHZlbmRvci1pZD0iMTk0NCIgcHJvZHVjdC1pZD0iMTYwMCIgLz4KKworICA8IS0tIERldmljZTogMDc5ODowNjgwIC0tPgorICA8IS0tIEFsdmEgW0JDNjgwXSAtLT4KKyAgPHVzYi1kZXZpY2UgdmVuZG9yLWlkPSIxOTQ0IiBwcm9kdWN0LWlkPSIxNjY0IiAvPgorCisgIDwhLS0gRGV2aWNlOiAwOTA0OjEwMTYgLS0+CisgIDwhLS0gRnJhbmtBdWRpb2RhdGEgW0IySzg0IChiZWZvcmUgZmlybXdhcmUgaW5zdGFsbGF0aW9uKV0gLS0+CisgIDx1c2ItZGV2aWNlIHZlbmRvci1pZD0iMjMwOCIgcHJvZHVjdC1pZD0iNDExOCIgLz4KKworICA8IS0tIERldmljZTogMDkwNDoxMDE3IC0tPgorICA8IS0tIEZyYW5rQXVkaW9kYXRhIFtCMks4NCAoYWZ0ZXIgZmlybXdhcmUgaW5zdGFsbGF0aW9uKV0gLS0+CisgIDx1c2ItZGV2aWNlIHZlbmRvci1pZD0iMjMwOCIgcHJvZHVjdC1pZD0iNDExOSIgLz4KKworICA8IS0tIERldmljZTogMDkwNDoyMDAwIC0tPgorICA8IS0tIEJhdW0gW1ZhcmlvUHJvIDQwICg0MCBjZWxscyldIC0tPgorICA8dXNiLWRldmljZSB2ZW5kb3ItaWQ9IjIzMDgiIHByb2R1Y3QtaWQ9IjgxOTIiIC8+CisKKyAgPCEtLSBEZXZpY2U6IDA5MDQ6MjAwMSAtLT4KKyAgPCEtLSBCYXVtIFtFY29WYXJpbyAyNCAoMjQgY2VsbHMpXSAtLT4KKyAgPHVzYi1kZXZpY2UgdmVuZG9yLWlkPSIyMzA4IiBwcm9kdWN0LWlkPSI4MTkzIiAvPgorCisgIDwhLS0gRGV2aWNlOiAwOTA0OjIwMDIgLS0+CisgIDwhLS0gQmF1bSBbRWNvVmFyaW8gNDAgKDQwIGNlbGxzKV0gLS0+CisgIDx1c2ItZGV2aWNlIHZlbmRvci1pZD0iMjMwOCIgcHJvZHVjdC1pZD0iODE5NCIgLz4KKworICA8IS0tIERldmljZTogMDkwNDoyMDA3IC0tPgorICA8IS0tIEJhdW0gW1ZhcmlvQ29ubmVjdCA0MCAoNDAgY2VsbHMpXSAtLT4KKyAgPHVzYi1kZXZpY2UgdmVuZG9yLWlkPSIyMzA4IiBwcm9kdWN0LWlkPSI4MTk5IiAvPgorCisgIDwhLS0gRGV2aWNlOiAwOTA0OjIwMDggLS0+CisgIDwhLS0gQmF1bSBbVmFyaW9Db25uZWN0IDMyICgzMiBjZWxscyldIC0tPgorICA8dXNiLWRldmljZSB2ZW5kb3ItaWQ9IjIzMDgiIHByb2R1Y3QtaWQ9IjgyMDAiIC8+CisKKyAgPCEtLSBEZXZpY2U6IDA5MDQ6MjAwOSAtLT4KKyAgPCEtLSBCYXVtIFtWYXJpb0Nvbm5lY3QgMjQgKDI0IGNlbGxzKV0gLS0+CisgIDx1c2ItZGV2aWNlIHZlbmRvci1pZD0iMjMwOCIgcHJvZHVjdC1pZD0iODIwMSIgLz4KKworICA8IS0tIERldmljZTogMDkwNDoyMDEwIC0tPgorICA8IS0tIEJhdW0gW1ZhcmlvQ29ubmVjdCA2NCAoNjQgY2VsbHMpXSAtLT4KKyAgPHVzYi1kZXZpY2UgdmVuZG9yLWlkPSIyMzA4IiBwcm9kdWN0LWlkPSI4MjA4IiAvPgorCisgIDwhLS0gRGV2aWNlOiAwOTA0OjIwMTEgLS0+CisgIDwhLS0gQmF1bSBbVmFyaW9Db25uZWN0IDgwICg4MCBjZWxscyldIC0tPgorICA8dXNiLWRldmljZSB2ZW5kb3ItaWQ9IjIzMDgiIHByb2R1Y3QtaWQ9IjgyMDkiIC8+CisKKyAgPCEtLSBEZXZpY2U6IDA5MDQ6MjAxNCAtLT4KKyAgPCEtLSBCYXVtIFtFY29WYXJpbyAzMiAoMzIgY2VsbHMpXSAtLT4KKyAgPHVzYi1kZXZpY2UgdmVuZG9yLWlkPSIyMzA4IiBwcm9kdWN0LWlkPSI4MjEyIiAvPgorCisgIDwhLS0gRGV2aWNlOiAwOTA0OjIwMTUgLS0+CisgIDwhLS0gQmF1bSBbRWNvVmFyaW8gNjQgKDY0IGNlbGxzKV0gLS0+CisgIDx1c2ItZGV2aWNlIHZlbmRvci1pZD0iMjMwOCIgcHJvZHVjdC1pZD0iODIxMyIgLz4KKworICA8IS0tIERldmljZTogMDkwNDoyMDE2IC0tPgorICA8IS0tIEJhdW0gW0Vjb1ZhcmlvIDgwICg4MCBjZWxscyldIC0tPgorICA8dXNiLWRldmljZSB2ZW5kb3ItaWQ9IjIzMDgiIHByb2R1Y3QtaWQ9IjgyMTQiIC8+CisKKyAgPCEtLSBEZXZpY2U6IDA5MDQ6MzAwMCAtLT4KKyAgPCEtLSBCYXVtIFtSZWZyZXNoYWJyYWlsbGUgMTggKDE4IGNlbGxzKV0gLS0+CisgIDx1c2ItZGV2aWNlIHZlbmRvci1pZD0iMjMwOCIgcHJvZHVjdC1pZD0iMTIyODgiIC8+CisKKyAgPCEtLSBEZXZpY2U6IDA5MDQ6MzAwMSAtLT4KKyAgPCEtLSBCYXVtIFtPcmJpdCBpbiBSZWZyZXNoYWJyYWlsbGUgRW11bGF0aW9uIE1vZGUgKDE4IGNlbGxzKV0gLS0+CisgIDwhLS0gQmF1bSBbUmVmcmVzaGFicmFpbGxlIDE4ICgxOCBjZWxscyldIC0tPgorICA8dXNiLWRldmljZSB2ZW5kb3ItaWQ9IjIzMDgiIHByb2R1Y3QtaWQ9IjEyMjg5IiAvPgorCisgIDwhLS0gRGV2aWNlOiAwOTA0OjQwMDQgLS0+CisgIDwhLS0gQmF1bSBbUHJvbnRvISBWMyAxOCAoMTggY2VsbHMpXSAtLT4KKyAgPHVzYi1kZXZpY2UgdmVuZG9yLWlkPSIyMzA4IiBwcm9kdWN0LWlkPSIxNjM4OCIgLz4KKworICA8IS0tIERldmljZTogMDkwNDo0MDA1IC0tPgorICA8IS0tIEJhdW0gW1Byb250byEgVjMgNDAgKDQwIGNlbGxzKV0gLS0+CisgIDx1c2ItZGV2aWNlIHZlbmRvci1pZD0iMjMwOCIgcHJvZHVjdC1pZD0iMTYzODkiIC8+CisKKyAgPCEtLSBEZXZpY2U6IDA5MDQ6NDAwNyAtLT4KKyAgPCEtLSBCYXVtIFtQcm9udG8hIFY0IDE4ICgxOCBjZWxscyldIC0tPgorICA8dXNiLWRldmljZSB2ZW5kb3ItaWQ9IjIzMDgiIHByb2R1Y3QtaWQ9IjE2MzkxIiAvPgorCisgIDwhLS0gRGV2aWNlOiAwOTA0OjQwMDggLS0+CisgIDwhLS0gQmF1bSBbUHJvbnRvISBWNCA0MCAoNDAgY2VsbHMpXSAtLT4KKyAgPHVzYi1kZXZpY2UgdmVuZG9yLWlkPSIyMzA4IiBwcm9kdWN0LWlkPSIxNjM5MiIgLz4KKworICA8IS0tIERldmljZTogMDkwNDo2MDAxIC0tPgorICA8IS0tIEJhdW0gW1N1cGVyVmFyaW8yIDQwICg0MCBjZWxscyldIC0tPgorICA8dXNiLWRldmljZSB2ZW5kb3ItaWQ9IjIzMDgiIHByb2R1Y3QtaWQ9IjI0NTc3IiAvPgorCisgIDwhLS0gRGV2aWNlOiAwOTA0OjYwMDIgLS0+CisgIDwhLS0gQmF1bSBbUG9ja2V0VmFyaW8yICgyNCBjZWxscyldIC0tPgorICA8dXNiLWRldmljZSB2ZW5kb3ItaWQ9IjIzMDgiIHByb2R1Y3QtaWQ9IjI0NTc4IiAvPgorCisgIDwhLS0gRGV2aWNlOiAwOTA0OjYwMDMgLS0+CisgIDwhLS0gQmF1bSBbU3VwZXJWYXJpbzIgMzIgKDMyIGNlbGxzKV0gLS0+CisgIDx1c2ItZGV2aWNlIHZlbmRvci1pZD0iMjMwOCIgcHJvZHVjdC1pZD0iMjQ1NzkiIC8+CisKKyAgPCEtLSBEZXZpY2U6IDA5MDQ6NjAwNCAtLT4KKyAgPCEtLSBCYXVtIFtTdXBlclZhcmlvMiA2NCAoNjQgY2VsbHMpXSAtLT4KKyAgPHVzYi1kZXZpY2UgdmVuZG9yLWlkPSIyMzA4IiBwcm9kdWN0LWlkPSIyNDU4MCIgLz4KKworICA8IS0tIERldmljZTogMDkwNDo2MDA1IC0tPgorICA8IS0tIEJhdW0gW1N1cGVyVmFyaW8yIDgwICg4MCBjZWxscyldIC0tPgorICA8dXNiLWRldmljZSB2ZW5kb3ItaWQ9IjIzMDgiIHByb2R1Y3QtaWQ9IjI0NTgxIiAvPgorCisgIDwhLS0gRGV2aWNlOiAwOTA0OjYwMDYgLS0+CisgIDwhLS0gQmF1bSBbQnJhaWxsaWFudDIgNDAgKDQwIGNlbGxzKV0gLS0+CisgIDx1c2ItZGV2aWNlIHZlbmRvci1pZD0iMjMwOCIgcHJvZHVjdC1pZD0iMjQ1ODIiIC8+CisKKyAgPCEtLSBEZXZpY2U6IDA5MDQ6NjAwNyAtLT4KKyAgPCEtLSBCYXVtIFtCcmFpbGxpYW50MiAyNCAoMjQgY2VsbHMpXSAtLT4KKyAgPHVzYi1kZXZpY2UgdmVuZG9yLWlkPSIyMzA4IiBwcm9kdWN0LWlkPSIyNDU4MyIgLz4KKworICA8IS0tIERldmljZTogMDkwNDo2MDA4IC0tPgorICA8IS0tIEJhdW0gW0JyYWlsbGlhbnQyIDMyICgzMiBjZWxscyldIC0tPgorICA8dXNiLWRldmljZSB2ZW5kb3ItaWQ9IjIzMDgiIHByb2R1Y3QtaWQ9IjI0NTg0IiAvPgorCisgIDwhLS0gRGV2aWNlOiAwOTA0OjYwMDkgLS0+CisgIDwhLS0gQmF1bSBbQnJhaWxsaWFudDIgNjQgKDY0IGNlbGxzKV0gLS0+CisgIDx1c2ItZGV2aWNlIHZlbmRvci1pZD0iMjMwOCIgcHJvZHVjdC1pZD0iMjQ1ODUiIC8+CisKKyAgPCEtLSBEZXZpY2U6IDA5MDQ6NjAwQSAtLT4KKyAgPCEtLSBCYXVtIFtCcmFpbGxpYW50MiA4MCAoODAgY2VsbHMpXSAtLT4KKyAgPHVzYi1kZXZpY2UgdmVuZG9yLWlkPSIyMzA4IiBwcm9kdWN0LWlkPSIyNDU4NiIgLz4KKworICA8IS0tIERldmljZTogMDkwNDo2MDExIC0tPgorICA8IS0tIEJhdW0gW1ZhcmlvQ29ubmVjdCAyNCAoMjQgY2VsbHMpXSAtLT4KKyAgPHVzYi1kZXZpY2UgdmVuZG9yLWlkPSIyMzA4IiBwcm9kdWN0LWlkPSIyNDU5MyIgLz4KKworICA8IS0tIERldmljZTogMDkwNDo2MDEyIC0tPgorICA8IS0tIEJhdW0gW1ZhcmlvQ29ubmVjdCAzMiAoMzIgY2VsbHMpXSAtLT4KKyAgPHVzYi1kZXZpY2UgdmVuZG9yLWlkPSIyMzA4IiBwcm9kdWN0LWlkPSIyNDU5NCIgLz4KKworICA8IS0tIERldmljZTogMDkwNDo2MDEzIC0tPgorICA8IS0tIEJhdW0gW1ZhcmlvQ29ubmVjdCA0MCAoNDAgY2VsbHMpXSAtLT4KKyAgPHVzYi1kZXZpY2UgdmVuZG9yLWlkPSIyMzA4IiBwcm9kdWN0LWlkPSIyNDU5NSIgLz4KKworICA8IS0tIERldmljZTogMDkwNDo2MTAxIC0tPgorICA8IS0tIEJhdW0gW1ZhcmlvVWx0cmEgMjAgKDIwIGNlbGxzKV0gLS0+CisgIDx1c2ItZGV2aWNlIHZlbmRvci1pZD0iMjMwOCIgcHJvZHVjdC1pZD0iMjQ4MzMiIC8+CisKKyAgPCEtLSBEZXZpY2U6IDA5MDQ6NjEwMiAtLT4KKyAgPCEtLSBCYXVtIFtWYXJpb1VsdHJhIDQwICg0MCBjZWxscyldIC0tPgorICA8dXNiLWRldmljZSB2ZW5kb3ItaWQ9IjIzMDgiIHByb2R1Y3QtaWQ9IjI0ODM0IiAvPgorCisgIDwhLS0gRGV2aWNlOiAwOTA0OjYxMDMgLS0+CisgIDwhLS0gQmF1bSBbVmFyaW9VbHRyYSAzMiAoMzIgY2VsbHMpXSAtLT4KKyAgPHVzYi1kZXZpY2UgdmVuZG9yLWlkPSIyMzA4IiBwcm9kdWN0LWlkPSIyNDgzNSIgLz4KKworICA8IS0tIERldmljZTogMDkyMToxMjAwIC0tPgorICA8IS0tIEhhbmR5VGVjaCBbR29IdWJzIGNoaXBdIC0tPgorICA8dXNiLWRldmljZSB2ZW5kb3ItaWQ9IjIzMzciIHByb2R1Y3QtaWQ9IjQ2MDgiIC8+CisKKyAgPCEtLSBEZXZpY2U6IDBGNEU6MDEwMCAtLT4KKyAgPCEtLSBGcmVlZG9tU2NpZW50aWZpYyBbRm9jdXMgMV0gLS0+CisgIDx1c2ItZGV2aWNlIHZlbmRvci1pZD0iMzkxOCIgcHJvZHVjdC1pZD0iMjU2IiAvPgorCisgIDwhLS0gRGV2aWNlOiAwRjRFOjAxMTEgLS0+CisgIDwhLS0gRnJlZWRvbVNjaWVudGlmaWMgW1BBQyBNYXRlXSAtLT4KKyAgPHVzYi1kZXZpY2UgdmVuZG9yLWlkPSIzOTE4IiBwcm9kdWN0LWlkPSIyNzMiIC8+CisKKyAgPCEtLSBEZXZpY2U6IDBGNEU6MDExMiAtLT4KKyAgPCEtLSBGcmVlZG9tU2NpZW50aWZpYyBbRm9jdXMgMl0gLS0+CisgIDx1c2ItZGV2aWNlIHZlbmRvci1pZD0iMzkxOCIgcHJvZHVjdC1pZD0iMjc0IiAvPgorCisgIDwhLS0gRGV2aWNlOiAwRjRFOjAxMTQgLS0+CisgIDwhLS0gRnJlZWRvbVNjaWVudGlmaWMgW0ZvY3VzIDMrXSAtLT4KKyAgPHVzYi1kZXZpY2UgdmVuZG9yLWlkPSIzOTE4IiBwcm9kdWN0LWlkPSIyNzYiIC8+CisKKyAgPCEtLSBEZXZpY2U6IDEwQzQ6RUE2MCAtLT4KKyAgPCEtLSBHZW5lcmljIElkZW50aWZpZXIgLS0+CisgIDwhLS0gVmVuZG9yOiBDeWduYWwgSW50ZWdyYXRlZCBQcm9kdWN0cywgSW5jLiAtLT4KKyAgPCEtLSBQcm9kdWN0OiBDUDIxMHggVUFSVCBCcmlkZ2UgLyBteUFWUiBteVNtYXJ0VVNCIGxpZ2h0IC0tPgorICA8IS0tIEJyYWlsbGVNZW1vIFtQb2NrZXRdIC0tPgorICA8IS0tIFNlaWthIFtCcmFpbGxlIERpc3BsYXldIC0tPgorICA8dXNiLWRldmljZSB2ZW5kb3ItaWQ9IjQyOTIiIHByb2R1Y3QtaWQ9IjYwMDAwIiAvPgorCisgIDwhLS0gRGV2aWNlOiAxMEM0OkVBODAgLS0+CisgIDwhLS0gR2VuZXJpYyBJZGVudGlmaWVyIC0tPgorICA8IS0tIFZlbmRvcjogQ3lnbmFsIEludGVncmF0ZWQgUHJvZHVjdHMsIEluYy4gLS0+CisgIDwhLS0gUHJvZHVjdDogQ1AyMTB4IFVBUlQgQnJpZGdlIC0tPgorICA8IS0tIFNlaWthIFtOb3RlIFRha2VyXSAtLT4KKyAgPHVzYi1kZXZpY2UgdmVuZG9yLWlkPSI0MjkyIiBwcm9kdWN0LWlkPSI2MDAzMiIgLz4KKworICA8IS0tIERldmljZTogMTE0ODowMzAxIC0tPgorICA8IS0tIEJyYWlsbGVNZW1vIFtTbWFydF0gLS0+CisgIDx1c2ItZGV2aWNlIHZlbmRvci1pZD0iNDQyNCIgcHJvZHVjdC1pZD0iNzY5IiAvPgorCisgIDwhLS0gRGV2aWNlOiAxMjA5OkFCQzAgLS0+CisgIDwhLS0gSW5jZXB0b3IgW2FsbCBtb2RlbHNdIC0tPgorICA8dXNiLWRldmljZSB2ZW5kb3ItaWQ9IjQ2MTciIHByb2R1Y3QtaWQ9IjQzOTY4IiAvPgorCisgIDwhLS0gRGV2aWNlOiAxNkMwOjA1RTEgLS0+CisgIDwhLS0gQ2FudXRlIFthbGwgbW9kZWxzXSAtLT4KKyAgPHVzYi1kZXZpY2UgdmVuZG9yLWlkPSI1ODI0IiBwcm9kdWN0LWlkPSIxNTA1IiAvPgorCisgIDwhLS0gRGV2aWNlOiAxQTg2Ojc1MjMgLS0+CisgIDwhLS0gR2VuZXJpYyBJZGVudGlmaWVyIC0tPgorICA8IS0tIFZlbmRvcjogSmlhbmdzdSBRaW5IZW5nLCBMdGQuIC0tPgorICA8IS0tIFByb2R1Y3Q6IENIMzQxIFVTQiBCcmlkZ2UgQ29udHJvbGxlciAtLT4KKyAgPCEtLSBCYXVtIFtOTFMgZVJlYWRlciBab29tYXggKDIwIGNlbGxzKV0gLS0+CisgIDx1c2ItZGV2aWNlIHZlbmRvci1pZD0iNjc5MCIgcHJvZHVjdC1pZD0iMjk5ODciIC8+CisKKyAgPCEtLSBEZXZpY2U6IDFDNzE6QzAwNCAtLT4KKyAgPCEtLSBCcmFpbGxlTm90ZSBbSHVtYW5XYXJlIEFQRVhdIC0tPgorICA8dXNiLWRldmljZSB2ZW5kb3ItaWQ9IjcyODEiIHByb2R1Y3QtaWQ9IjQ5MTU2IiAvPgorCisgIDwhLS0gRGV2aWNlOiAxQzcxOkMwMDUgLS0+CisgIDwhLS0gSHVtYW5XYXJlIFtCcmFpbGxpYW50IEJJIDMyLzQwLCBCcmFpbGxpYW50IEIgODAgKHNlcmlhbCBwcm90b2NvbCldIC0tPgorICA8dXNiLWRldmljZSB2ZW5kb3ItaWQ9IjcyODEiIHByb2R1Y3QtaWQ9IjQ5MTU3IiAvPgorCisgIDwhLS0gRGV2aWNlOiAxQzcxOkMwMDYgLS0+CisgIDwhLS0gSHVtYW5XYXJlIFtub24tVG91Y2ggbW9kZWxzIChISUQgcHJvdG9jb2wpXSAtLT4KKyAgPHVzYi1kZXZpY2UgdmVuZG9yLWlkPSI3MjgxIiBwcm9kdWN0LWlkPSI0OTE1OCIgLz4KKworICA8IS0tIERldmljZTogMUM3MTpDMDBBIC0tPgorICA8IS0tIEh1bWFuV2FyZSBbQnJhaWxsZU5vdGUgVG91Y2ggKEhJRCBwcm90b2NvbCldIC0tPgorICA8dXNiLWRldmljZSB2ZW5kb3ItaWQ9IjcyODEiIHByb2R1Y3QtaWQ9IjQ5MTYyIiAvPgorCisgIDwhLS0gRGV2aWNlOiAxQzcxOkMwMjEgLS0+CisgIDwhLS0gSHVtYW5XYXJlIFtCcmFpbGxpYW50IEJJIDE0IChzZXJpYWwgcHJvdG9jb2wpXSAtLT4KKyAgPHVzYi1kZXZpY2UgdmVuZG9yLWlkPSI3MjgxIiBwcm9kdWN0LWlkPSI0OTE4NSIgLz4KKworICA8IS0tIERldmljZTogMUM3MTpDMTAxIC0tPgorICA8IS0tIEh1bWFuV2FyZSBbQVBIIENoYW1lbGVvbiAyMCAoSElEIHByb3RvY29sLCBmaXJtd2FyZSAxLjApXSAtLT4KKyAgPCEtLSBIdW1hbldhcmUgW0FQSCBDaGFtZWxlb24gMjAgKEhJRCBwcm90b2NvbCwgZmlybXdhcmUgMS4xKV0gLS0+CisgIDx1c2ItZGV2aWNlIHZlbmRvci1pZD0iNzI4MSIgcHJvZHVjdC1pZD0iNDk0MDkiIC8+CisKKyAgPCEtLSBEZXZpY2U6IDFDNzE6QzEwNCAtLT4KKyAgPCEtLSBIdW1hbldhcmUgW0FQSCBDaGFtZWxlb24gMjAgKHNlcmlhbCBwcm90b2NvbCldIC0tPgorICA8dXNiLWRldmljZSB2ZW5kb3ItaWQ9IjcyODEiIHByb2R1Y3QtaWQ9IjQ5NDEyIiAvPgorCisgIDwhLS0gRGV2aWNlOiAxQzcxOkMxMTEgLS0+CisgIDwhLS0gSHVtYW5XYXJlIFtBUEggTWFudGlzIFE0MCAoSElEIHByb3RvY29sLCBmaXJtd2FyZSAxLjApXSAtLT4KKyAgPCEtLSBIdW1hbldhcmUgW0FQSCBNYW50aXMgUTQwIChISUQgcHJvdG9jb2wsIGZpcm13YXJlIDEuMSldIC0tPgorICA8dXNiLWRldmljZSB2ZW5kb3ItaWQ9IjcyODEiIHByb2R1Y3QtaWQ9IjQ5NDI1IiAvPgorCisgIDwhLS0gRGV2aWNlOiAxQzcxOkMxMTQgLS0+CisgIDwhLS0gSHVtYW5XYXJlIFtBUEggTWFudGlzIFE0MCAoc2VyaWFsIHByb3RvY29sKV0gLS0+CisgIDx1c2ItZGV2aWNlIHZlbmRvci1pZD0iNzI4MSIgcHJvZHVjdC1pZD0iNDk0MjgiIC8+CisKKyAgPCEtLSBEZXZpY2U6IDFDNzE6QzEyMSAtLT4KKyAgPCEtLSBIdW1hbldhcmUgW0h1bWFud2FyZSBCcmFpbGxlT25lIChISUQgcHJvdG9jb2wsIGZpcm13YXJlIDEuMCldIC0tPgorICA8IS0tIEh1bWFuV2FyZSBbSHVtYW53YXJlIEJyYWlsbGVPbmUgKEhJRCBwcm90b2NvbCwgZmlybXdhcmUgMS4xKV0gLS0+CisgIDx1c2ItZGV2aWNlIHZlbmRvci1pZD0iNzI4MSIgcHJvZHVjdC1pZD0iNDk0NDEiIC8+CisKKyAgPCEtLSBEZXZpY2U6IDFDNzE6QzEyNCAtLT4KKyAgPCEtLSBIdW1hbldhcmUgW0h1bWFud2FyZSBCcmFpbGxlT25lIChzZXJpYWwgcHJvdG9jb2wpXSAtLT4KKyAgPHVzYi1kZXZpY2UgdmVuZG9yLWlkPSI3MjgxIiBwcm9kdWN0LWlkPSI0OTQ0NCIgLz4KKworICA8IS0tIERldmljZTogMUM3MTpDMTMxIC0tPgorICA8IS0tIEh1bWFuV2FyZSBbSHVtYW53YXJlIEJyYWlsbGlhbnQgQkkgNDBYIChISUQgcHJvdG9jb2wsIGZpcm13YXJlIDEuMCldIC0tPgorICA8IS0tIEh1bWFuV2FyZSBbSHVtYW53YXJlIEJyYWlsbGlhbnQgQkkgNDBYIChISUQgcHJvdG9jb2wsIGZpcm13YXJlIDEuMSldIC0tPgorICA8dXNiLWRldmljZSB2ZW5kb3ItaWQ9IjcyODEiIHByb2R1Y3QtaWQ9IjQ5NDU3IiAvPgorCisgIDwhLS0gRGV2aWNlOiAxQzcxOkMxNDEgLS0+CisgIDwhLS0gSHVtYW5XYXJlIFtIdW1hbndhcmUgQnJhaWxsaWFudCBCSSAyMFggKEhJRCBwcm90b2NvbCwgZmlybXdhcmUgMS4wKV0gLS0+CisgIDwhLS0gSHVtYW5XYXJlIFtIdW1hbndhcmUgQnJhaWxsaWFudCBCSSAyMFggKEhJRCBwcm90b2NvbCwgZmlybXdhcmUgMS4xKV0gLS0+CisgIDx1c2ItZGV2aWNlIHZlbmRvci1pZD0iNzI4MSIgcHJvZHVjdC1pZD0iNDk0NzMiIC8+CisKKyAgPCEtLSBEZXZpY2U6IDFDNzE6Q0UwMSAtLT4KKyAgPCEtLSBIdW1hbldhcmUgW05MUyBlUmVhZGVyIChISUQgcHJvdG9jb2wsIGZpcm13YXJlIDEuMCldIC0tPgorICA8IS0tIEh1bWFuV2FyZSBbTkxTIGVSZWFkZXIgKEhJRCBwcm90b2NvbCwgZmlybXdhcmUgMS4xKV0gLS0+CisgIDx1c2ItZGV2aWNlIHZlbmRvci1pZD0iNzI4MSIgcHJvZHVjdC1pZD0iNTI3MzciIC8+CisKKyAgPCEtLSBEZXZpY2U6IDFDNzE6Q0UwNCAtLT4KKyAgPCEtLSBIdW1hbldhcmUgW05MUyBlUmVhZGVyIChzZXJpYWwgcHJvdG9jb2wpXSAtLT4KKyAgPHVzYi1kZXZpY2UgdmVuZG9yLWlkPSI3MjgxIiBwcm9kdWN0LWlkPSI1Mjc0MCIgLz4KKworICA8IS0tIERldmljZTogMUZFNDowMDAzIC0tPgorICA8IS0tIEhhbmR5VGVjaCBbVVNCLUhJRCBhZGFwdGVyXSAtLT4KKyAgPHVzYi1kZXZpY2UgdmVuZG9yLWlkPSI4MTY0IiBwcm9kdWN0LWlkPSIzIiAvPgorCisgIDwhLS0gRGV2aWNlOiAxRkU0OjAwNDQgLS0+CisgIDwhLS0gSGFuZHlUZWNoIFtFYXN5IEJyYWlsbGUgKEhJRCldIC0tPgorICA8dXNiLWRldmljZSB2ZW5kb3ItaWQ9IjgxNjQiIHByb2R1Y3QtaWQ9IjY4IiAvPgorCisgIDwhLS0gRGV2aWNlOiAxRkU0OjAwNTQgLS0+CisgIDwhLS0gSGFuZHlUZWNoIFtBY3RpdmUgQnJhaWxsZV0gLS0+CisgIDx1c2ItZGV2aWNlIHZlbmRvci1pZD0iODE2NCIgcHJvZHVjdC1pZD0iODQiIC8+CisKKyAgPCEtLSBEZXZpY2U6IDFGRTQ6MDA1NSAtLT4KKyAgPCEtLSBIYW5keVRlY2ggW0Nvbm5lY3QgQnJhaWxsZSA0MF0gLS0+CisgIDx1c2ItZGV2aWNlIHZlbmRvci1pZD0iODE2NCIgcHJvZHVjdC1pZD0iODUiIC8+CisKKyAgPCEtLSBEZXZpY2U6IDFGRTQ6MDA2MSAtLT4KKyAgPCEtLSBIYW5keVRlY2ggW0FjdGlsaW5vXSAtLT4KKyAgPHVzYi1kZXZpY2UgdmVuZG9yLWlkPSI4MTY0IiBwcm9kdWN0LWlkPSI5NyIgLz4KKworICA8IS0tIERldmljZTogMUZFNDowMDY0IC0tPgorICA8IS0tIEhhbmR5VGVjaCBbQWN0aXZlIFN0YXIgNDBdIC0tPgorICA8dXNiLWRldmljZSB2ZW5kb3ItaWQ9IjgxNjQiIHByb2R1Y3QtaWQ9IjEwMCIgLz4KKworICA8IS0tIERldmljZTogMUZFNDowMDc0IC0tPgorICA8IS0tIEhhbmR5VGVjaCBbQnJhaWxsZSBTdGFyIDQwIChISUQpXSAtLT4KKyAgPHVzYi1kZXZpY2UgdmVuZG9yLWlkPSI4MTY0IiBwcm9kdWN0LWlkPSIxMTYiIC8+CisKKyAgPCEtLSBEZXZpY2U6IDFGRTQ6MDA4MSAtLT4KKyAgPCEtLSBIYW5keVRlY2ggW0Jhc2ljIEJyYWlsbGUgMTZdIC0tPgorICA8dXNiLWRldmljZSB2ZW5kb3ItaWQ9IjgxNjQiIHByb2R1Y3QtaWQ9IjEyOSIgLz4KKworICA8IS0tIERldmljZTogMUZFNDowMDgyIC0tPgorICA8IS0tIEhhbmR5VGVjaCBbQmFzaWMgQnJhaWxsZSAyMF0gLS0+CisgIDx1c2ItZGV2aWNlIHZlbmRvci1pZD0iODE2NCIgcHJvZHVjdC1pZD0iMTMwIiAvPgorCisgIDwhLS0gRGV2aWNlOiAxRkU0OjAwODMgLS0+CisgIDwhLS0gSGFuZHlUZWNoIFtCYXNpYyBCcmFpbGxlIDMyXSAtLT4KKyAgPHVzYi1kZXZpY2UgdmVuZG9yLWlkPSI4MTY0IiBwcm9kdWN0LWlkPSIxMzEiIC8+CisKKyAgPCEtLSBEZXZpY2U6IDFGRTQ6MDA4NCAtLT4KKyAgPCEtLSBIYW5keVRlY2ggW0Jhc2ljIEJyYWlsbGUgNDBdIC0tPgorICA8dXNiLWRldmljZSB2ZW5kb3ItaWQ9IjgxNjQiIHByb2R1Y3QtaWQ9IjEzMiIgLz4KKworICA8IS0tIERldmljZTogMUZFNDowMDg2IC0tPgorICA8IS0tIEhhbmR5VGVjaCBbQmFzaWMgQnJhaWxsZSA2NF0gLS0+CisgIDx1c2ItZGV2aWNlIHZlbmRvci1pZD0iODE2NCIgcHJvZHVjdC1pZD0iMTM0IiAvPgorCisgIDwhLS0gRGV2aWNlOiAxRkU0OjAwODcgLS0+CisgIDwhLS0gSGFuZHlUZWNoIFtCYXNpYyBCcmFpbGxlIDgwXSAtLT4KKyAgPHVzYi1kZXZpY2UgdmVuZG9yLWlkPSI4MTY0IiBwcm9kdWN0LWlkPSIxMzUiIC8+CisKKyAgPCEtLSBEZXZpY2U6IDFGRTQ6MDA4QSAtLT4KKyAgPCEtLSBIYW5keVRlY2ggW0Jhc2ljIEJyYWlsbGUgNDhdIC0tPgorICA8dXNiLWRldmljZSB2ZW5kb3ItaWQ9IjgxNjQiIHByb2R1Y3QtaWQ9IjEzOCIgLz4KKworICA8IS0tIERldmljZTogMUZFNDowMDhCIC0tPgorICA8IS0tIEhhbmR5VGVjaCBbQmFzaWMgQnJhaWxsZSAxNjBdIC0tPgorICA8dXNiLWRldmljZSB2ZW5kb3ItaWQ9IjgxNjQiIHByb2R1Y3QtaWQ9IjEzOSIgLz4KKworICA8IS0tIERldmljZTogMUZFNDowMEE0IC0tPgorICA8IS0tIEhhbmR5VGVjaCBbQWN0aXZhdG9yXSAtLT4KKyAgPHVzYi1kZXZpY2UgdmVuZG9yLWlkPSI4MTY0IiBwcm9kdWN0LWlkPSIxNjQiIC8+CisKKyAgPCEtLSBEZXZpY2U6IDQyNDI6MDAwMSAtLT4KKyAgPCEtLSBQZWdhc3VzIFthbGwgbW9kZWxzXSAtLT4KKyAgPHVzYi1kZXZpY2UgdmVuZG9yLWlkPSIxNjk2MiIgcHJvZHVjdC1pZD0iMSIgLz4KKworICA8IS0tIERldmljZTogQzI1MToxMTIyIC0tPgorICA8IS0tIEV1cm9CcmFpbGxlIFtFc3lzICh2ZXJzaW9uIDwgMy4wLCBubyBTRCBjYXJkKV0gLS0+CisgIDx1c2ItZGV2aWNlIHZlbmRvci1pZD0iNDk3NDUiIHByb2R1Y3QtaWQ9IjQzODYiIC8+CisKKyAgPCEtLSBEZXZpY2U6IEMyNTE6MTEyMyAtLT4KKyAgPCEtLSBFdXJvQnJhaWxsZSBbcmVzZXJ2ZWRdIC0tPgorICA8dXNiLWRldmljZSB2ZW5kb3ItaWQ9IjQ5NzQ1IiBwcm9kdWN0LWlkPSI0Mzg3IiAvPgorCisgIDwhLS0gRGV2aWNlOiBDMjUxOjExMjQgLS0+CisgIDwhLS0gRXVyb0JyYWlsbGUgW0VzeXMgKHZlcnNpb24gPCAzLjAsIHdpdGggU0QgY2FyZCldIC0tPgorICA8dXNiLWRldmljZSB2ZW5kb3ItaWQ9IjQ5NzQ1IiBwcm9kdWN0LWlkPSI0Mzg4IiAvPgorCisgIDwhLS0gRGV2aWNlOiBDMjUxOjExMjUgLS0+CisgIDwhLS0gRXVyb0JyYWlsbGUgW3Jlc2VydmVkXSAtLT4KKyAgPHVzYi1kZXZpY2UgdmVuZG9yLWlkPSI0OTc0NSIgcHJvZHVjdC1pZD0iNDM4OSIgLz4KKworICA8IS0tIERldmljZTogQzI1MToxMTI2IC0tPgorICA8IS0tIEV1cm9CcmFpbGxlIFtFc3lzICh2ZXJzaW9uID49IDMuMCwgbm8gU0QgY2FyZCldIC0tPgorICA8dXNiLWRldmljZSB2ZW5kb3ItaWQ9IjQ5NzQ1IiBwcm9kdWN0LWlkPSI0MzkwIiAvPgorCisgIDwhLS0gRGV2aWNlOiBDMjUxOjExMjcgLS0+CisgIDwhLS0gRXVyb0JyYWlsbGUgW3Jlc2VydmVkXSAtLT4KKyAgPHVzYi1kZXZpY2UgdmVuZG9yLWlkPSI0OTc0NSIgcHJvZHVjdC1pZD0iNDM5MSIgLz4KKworICA8IS0tIERldmljZTogQzI1MToxMTI4IC0tPgorICA8IS0tIEV1cm9CcmFpbGxlIFtFc3lzICh2ZXJzaW9uID49IDMuMCwgd2l0aCBTRCBjYXJkKV0gLS0+CisgIDx1c2ItZGV2aWNlIHZlbmRvci1pZD0iNDk3NDUiIHByb2R1Y3QtaWQ9IjQzOTIiIC8+CisKKyAgPCEtLSBEZXZpY2U6IEMyNTE6MTEyOSAtLT4KKyAgPCEtLSBFdXJvQnJhaWxsZSBbcmVzZXJ2ZWRdIC0tPgorICA8dXNiLWRldmljZSB2ZW5kb3ItaWQ9IjQ5NzQ1IiBwcm9kdWN0LWlkPSI0MzkzIiAvPgorCisgIDwhLS0gRGV2aWNlOiBDMjUxOjExMkEgLS0+CisgIDwhLS0gRXVyb0JyYWlsbGUgW3Jlc2VydmVkXSAtLT4KKyAgPHVzYi1kZXZpY2UgdmVuZG9yLWlkPSI0OTc0NSIgcHJvZHVjdC1pZD0iNDM5NCIgLz4KKworICA8IS0tIERldmljZTogQzI1MToxMTJCIC0tPgorICA8IS0tIEV1cm9CcmFpbGxlIFtyZXNlcnZlZF0gLS0+CisgIDx1c2ItZGV2aWNlIHZlbmRvci1pZD0iNDk3NDUiIHByb2R1Y3QtaWQ9IjQzOTUiIC8+CisKKyAgPCEtLSBEZXZpY2U6IEMyNTE6MTEyQyAtLT4KKyAgPCEtLSBFdXJvQnJhaWxsZSBbcmVzZXJ2ZWRdIC0tPgorICA8dXNiLWRldmljZSB2ZW5kb3ItaWQ9IjQ5NzQ1IiBwcm9kdWN0LWlkPSI0Mzk2IiAvPgorCisgIDwhLS0gRGV2aWNlOiBDMjUxOjExMkQgLS0+CisgIDwhLS0gRXVyb0JyYWlsbGUgW3Jlc2VydmVkXSAtLT4KKyAgPHVzYi1kZXZpY2UgdmVuZG9yLWlkPSI0OTc0NSIgcHJvZHVjdC1pZD0iNDM5NyIgLz4KKworICA8IS0tIERldmljZTogQzI1MToxMTJFIC0tPgorICA8IS0tIEV1cm9CcmFpbGxlIFtyZXNlcnZlZF0gLS0+CisgIDx1c2ItZGV2aWNlIHZlbmRvci1pZD0iNDk3NDUiIHByb2R1Y3QtaWQ9IjQzOTgiIC8+CisKKyAgPCEtLSBEZXZpY2U6IEMyNTE6MTEyRiAtLT4KKyAgPCEtLSBFdXJvQnJhaWxsZSBbcmVzZXJ2ZWRdIC0tPgorICA8dXNiLWRldmljZSB2ZW5kb3ItaWQ9IjQ5NzQ1IiBwcm9kdWN0LWlkPSI0Mzk5IiAvPgorCisgIDwhLS0gRGV2aWNlOiBDMjUxOjExMzAgLS0+CisgIDwhLS0gRXVyb0JyYWlsbGUgW0VzeXRpbWUgKGZpcm13YXJlIDEuMDMsIDIwMTQtMDMtMzEpXSAtLT4KKyAgPCEtLSBFdXJvQnJhaWxsZSBbRXN5dGltZV0gLS0+CisgIDx1c2ItZGV2aWNlIHZlbmRvci1pZD0iNDk3NDUiIHByb2R1Y3QtaWQ9IjQ0MDAiIC8+CisKKyAgPCEtLSBEZXZpY2U6IEMyNTE6MTEzMSAtLT4KKyAgPCEtLSBFdXJvQnJhaWxsZSBbcmVzZXJ2ZWRdIC0tPgorICA8dXNiLWRldmljZSB2ZW5kb3ItaWQ9IjQ5NzQ1IiBwcm9kdWN0LWlkPSI0NDAxIiAvPgorCisgIDwhLS0gRGV2aWNlOiBDMjUxOjExMzIgLS0+CisgIDwhLS0gRXVyb0JyYWlsbGUgW3Jlc2VydmVkXSAtLT4KKyAgPHVzYi1kZXZpY2UgdmVuZG9yLWlkPSI0OTc0NSIgcHJvZHVjdC1pZD0iNDQwMiIgLz4KKworICA8IS0tIEVORF9VU0JfQlJBSUxMRV9ERVZJQ0VTIC0tPgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9BbmRyb2lkL0dyYWRsZS9icmxhcGktYW5kcm9pZC5ncmFkbGUgYi9BbmRyb2lkL0dyYWRsZS9icmxhcGktYW5kcm9pZC5ncmFkbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzNjNjAwNwotLS0gL2Rldi9udWxsCisrKyBiL0FuZHJvaWQvR3JhZGxlL2JybGFwaS1hbmRyb2lkLmdyYWRsZQpAQCAtMCwwICsxLDE2IEBACisvLyBUaGlzIHdpbGwgZmFpbCBpZiBtaW5TZGtWZXJzaW9uIGlzIGxlc3MgdGhhbiAyNi4KKy8vIFJlbWVtYmVyIHRvIGNoYW5nZSB0aGUgZGVwZW5kZW5jeSB2ZXJzaW9uIGFzIG5lZWRlZC4KKworcmVwb3NpdG9yaWVzIHsKKyAgbWF2ZW4geworICAgIHVybCAiaHR0cHM6Ly9icmx0dHkuYXBwL2FyY2hpdmUvTWF2ZW4yLyIKKyAgfQorfQorCitkZXBlbmRlbmNpZXMgeworICBpbXBsZW1lbnRhdGlvbigKKyAgICBncm91cDogIm9yZy5hMTF5LmJybHR0eSIsCisgICAgbmFtZTogImJybGFwaS1hbmRyb2lkIiwKKyAgICB2ZXJzaW9uOiAiMC44LjIiCisgICkKK30KZGlmZiAtLWdpdCBhL0FuZHJvaWQvR3JhZGxlL2JybHR0eS1idWlsZC5ncmFkbGUgYi9BbmRyb2lkL0dyYWRsZS9icmx0dHktYnVpbGQuZ3JhZGxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ4NDA0ZWUKLS0tIC9kZXYvbnVsbAorKysgYi9BbmRyb2lkL0dyYWRsZS9icmx0dHktYnVpbGQuZ3JhZGxlCkBAIC0wLDAgKzEsMjEyIEBACitTdHJpbmcgZ2V0SmFyc1BhdGggKE1hcCBwcm9wZXJ0aWVzKSB7CisgIHJldHVybiBicmx0dHkuZ2V0SmFyc1BhdGgocHJvcGVydGllcy5wcm9qZWN0KQorfQorCitTdHJpbmcgZ2V0TGlicmFyaWVzUGF0aCAoTWFwIHByb3BlcnRpZXMpIHsKKyAgcmV0dXJuIGJybHR0eS5nZXRMaWJyYXJpZXNQYXRoKHByb3BlcnRpZXMucHJvamVjdCkKK30KKworU3RyaW5nIGdldEFCSVBhdGggKE1hcCBwcm9wZXJ0aWVzKSB7CisgIHJldHVybiBicmx0dHkuZ2V0QUJJUGF0aChwcm9wZXJ0aWVzLnByb2plY3QsIHByb3BlcnRpZXMuQUJJKQorfQorCitNYXAgZ2V0QUJJIChTdHJpbmcgYWJpKSB7CisgIGlmICghYnJsdHR5LmNvbnRhaW5zS2V5KCJBQkkiKSkgeworICAgIGJybHR0eS5BQkkgPSBbOl0KKyAgfQorCisgIGRlZiBBQkkgPSBicmx0dHkuQUJJCisgIGlmICghQUJJLmNvbnRhaW5zS2V5KGFiaSkpIEFCSVthYmldID0gWzpdCisgIHJldHVybiBBQklbYWJpXQorfQorCitNYXAgZ2V0QUJJIChNYXAgcHJvcGVydGllcykgeworICByZXR1cm4gZ2V0QUJJKHByb3BlcnRpZXMuQUJJKQorfQorCitUYXNrIG5ld1Rhc2sgKFByb2plY3QgcHJvamVjdCwgU3RyaW5nIG5hbWUsIENsYXNzPERlZmF1bHRUYXNrPiB0eXBlPURlZmF1bHRUYXNrLCBDbG9zdXJlIGNsb3N1cmUpIHsKKyAgVGFzayB0YXNrID0gcHJvamVjdC50YXNrcy5yZWdpc3RlcihuYW1lLCB0eXBlLCBjbG9zdXJlKS5nZXQoKQorCisgIHRhc2suY29uZmlndXJlIHsKKyAgICBncm91cCAiYnVpbGQiCisgIH0KKworICByZXR1cm4gdGFzaworfQorCitUYXNrIG5ld1Rhc2sgKE1hcCBwcm9wZXJ0aWVzLCBTdHJpbmcgbmFtZSwgQ2xhc3M8RGVmYXVsdFRhc2s+IHR5cGU9RGVmYXVsdFRhc2ssIENsb3N1cmUgY2xvc3VyZSkgeworICBuYW1lICs9IHByb3BlcnRpZXMudGFza05hbWVTdWZmaXgKKyAgcmV0dXJuIG5ld1Rhc2socHJvcGVydGllcy5wcm9qZWN0LCBuYW1lLCB0eXBlLCBjbG9zdXJlKQorfQorCitUYXNrIG5ld0Fzc2VtYmxlVGFzayAoTWFwIHByb3BlcnRpZXMpIHsKKyAgcmV0dXJuIG5ld1Rhc2socHJvcGVydGllcy5wcm9qZWN0LCAiYnJsdHR5QXNzZW1ibGVBbGxDb21wb25lbnRzIikgeworICAgIGRlc2NyaXB0aW9uICJBc3NlbWJsZSBhbGwgb2YgdGhlIG5hdGl2ZSBqYXJzLCBsaWJyYXJpZXMsIGFzc2V0cywgZXRjLiIKKyAgfQorfQorCit2b2lkIGFkZEFzc2VtYmxlRGVwZW5kZW5jeSAoTWFwIHByb3BlcnRpZXMsIFRhc2sgdGFzaykgeworICBwcm9wZXJ0aWVzLmFzc2VtYmxlVGFzay5kZXBlbmRzT24gdGFzaworfQorCitUYXNrIG5ld0NsZWFuVGFzayAoTWFwIHByb3BlcnRpZXMpIHsKKyAgcmV0dXJuIG5ld1Rhc2socHJvcGVydGllcy5wcm9qZWN0LCAiYnJsdHR5Q2xlYW5BbGxDb21wb25lbnRzIikgeworICAgIGRlc2NyaXB0aW9uICJDbGVhbiBhbGwgb2YgdGhlIG5hdGl2ZSBqYXJzLCBsaWJyYXJpZXMsIGFzc2V0cywgZXRjLiIKKyAgfQorfQorCit2b2lkIGFkZENsZWFuRGVwZW5kZW5jeSAoTWFwIHByb3BlcnRpZXMsIFRhc2sgdGFzaykgeworICBwcm9wZXJ0aWVzLmNsZWFuVGFzay5kZXBlbmRzT24gdGFzaworfQorCitUYXNrIG5ld0NvbmZpZ3VyZVRhc2sgKE1hcCBwcm9wZXJ0aWVzKSB7CisgIHJldHVybiBuZXdUYXNrKHByb3BlcnRpZXMsICJicmx0dHlDb25maWd1cmVBQkkiLCBFeGVjKSB7CisgICAgZGVzY3JpcHRpb24gIkNvbmZpZ3VyZSB0aGUgJHtwcm9wZXJ0aWVzLmNvbXBvbmVudE5hbWV9IGZvciB0aGUgJHtwcm9wZXJ0aWVzLkFCSX0gQUJJLiIKKworICAgIHdvcmtpbmdEaXIgcHJvcGVydGllcy5hYmlEaXJlY3RvcnkKKyAgICBpZ25vcmVFeGl0VmFsdWUgZmFsc2UKKyAgICBjb21tYW5kTGluZSAiJHticmx0dHkubmF0aXZlLnJvb3REaXJlY3Rvcnl9L2NmZy1hbmRyb2lkLWFiaSIsIHByb3BlcnRpZXMuQUJJCisgIH0KK30KKworVGFzayBnZXRDb25maWd1cmVUYXNrIChNYXAgcHJvcGVydGllcykgeworICBkZWYgYWJpID0gZ2V0QUJJKHByb3BlcnRpZXMpCisKKyAgaWYgKCFhYmkuY29udGFpbnNLZXkoImNvbmZpZ3VyZVRhc2siKSkgeworICAgIGFiaS5jb25maWd1cmVUYXNrID0gbmV3Q29uZmlndXJlVGFzayhwcm9wZXJ0aWVzKQorICB9CisKKyAgcmV0dXJuIGFiaS5jb25maWd1cmVUYXNrCit9CisKK1Rhc2sgbmV3TWFrZUNvbXBvbmVudHNUYXNrIChNYXAgcHJvcGVydGllcykgeworICByZXR1cm4gbmV3VGFzayhwcm9wZXJ0aWVzLCAiYnJsdHR5TWFrZUFCSSIsIEV4ZWMpIHsKKyAgICBkZXNjcmlwdGlvbiAiTWFrZSB0aGUgJHtwcm9wZXJ0aWVzLkFCSX0gY29tcG9uZW50cyBvZiB0aGUgJHtwcm9wZXJ0aWVzLmNvbXBvbmVudE5hbWV9LiIKKyAgICBkZXBlbmRzT24gcHJvcGVydGllcy5jb25maWd1cmVUYXNrCisKKyAgICB3b3JraW5nRGlyIHByb3BlcnRpZXMubWFrZURpcmVjdG9yeQorICAgIGlnbm9yZUV4aXRWYWx1ZSBmYWxzZQorCisgICAgY29tbWFuZExpbmUgIm1ha2UiCisgICAgYXJncyBwcm9wZXJ0aWVzLm1ha2VUYXJnZXRzCisgIH0KK30KKworVGFzayBuZXdBZGRKYXJzVGFzayAoTWFwIHByb3BlcnRpZXMpIHsKKyAgcmV0dXJuIG5ld1Rhc2socHJvcGVydGllcywgImJybHR0eUFkZEphcnMiLCBDb3B5KSB7CisgICAgZGVzY3JpcHRpb24gIkFkZCB0aGUgJHtwcm9wZXJ0aWVzLmNvbXBvbmVudE5hbWV9J3MgJHtwcm9wZXJ0aWVzLkFCSX0gamFycyB0byB0aGUgYnVpbGQuIgorICAgIGRlcGVuZHNPbiBwcm9wZXJ0aWVzLm1ha2VDb21wb25lbnRzVGFzaworICAgIGludG8gZ2V0SmFyc1BhdGgocHJvcGVydGllcykKKworICAgIHByb3BlcnRpZXMuamFyU3ViZGlyZWN0b3JpZXMuZWFjaCB7IHN1YmRpcmVjdG9yeSAtPgorICAgICAgZnJvbSBwcm9wZXJ0aWVzLmFiaURpcmVjdG9yeSArIEZpbGUuc2VwYXJhdG9yICsgc3ViZGlyZWN0b3J5CisgICAgfQorCisgICAgcHJvcGVydGllcy5qYXJzLmVhY2ggeyBqYXIgLT4KKyAgICAgIGluY2x1ZGUgIiR7amFyfS5qYXIiCisgICAgfQorICB9Cit9CisKK1Rhc2sgbmV3QWRkTGlicmFyaWVzVGFzayAoTWFwIHByb3BlcnRpZXMpIHsKKyAgcmV0dXJuIG5ld1Rhc2socHJvcGVydGllcywgImJybHR0eUFkZExpYnJhcmllcyIsIENvcHkpIHsKKyAgICBkZXNjcmlwdGlvbiAiQWRkIHRoZSAke3Byb3BlcnRpZXMuY29tcG9uZW50TmFtZX0ncyAke3Byb3BlcnRpZXMuQUJJfSBsaWJyYXJpZXMgdG8gdGhlIGJ1aWxkLiIKKyAgICBkZXBlbmRzT24gcHJvcGVydGllcy5tYWtlQ29tcG9uZW50c1Rhc2sKKyAgICBpbnRvIGdldEFCSVBhdGgocHJvcGVydGllcykKKworICAgIHByb3BlcnRpZXMubGlicmFyeVN1YmRpcmVjdG9yaWVzLmVhY2ggeyBzdWJkaXJlY3RvcnkgLT4KKyAgICAgIGZyb20gcHJvcGVydGllcy5hYmlEaXJlY3RvcnkgKyBGaWxlLnNlcGFyYXRvciArIHN1YmRpcmVjdG9yeQorICAgIH0KKworICAgIHByb3BlcnRpZXMubGlicmFyaWVzLmVhY2ggeyBsaWJyYXJ5IC0+CisgICAgICBpbmNsdWRlICJsaWIke2xpYnJhcnl9LnNvIgorICAgIH0KKyAgfQorfQorCitUYXNrIG5ld01ha2VDbGVhblRhc2sgKE1hcCBwcm9wZXJ0aWVzKSB7CisgIHJldHVybiBuZXdUYXNrKHByb3BlcnRpZXMsICJicmx0dHlDbGVhbkFCSSIsIEV4ZWMpIHsKKyAgICBkZXNjcmlwdGlvbiAiUmVtb3ZlIChtYWtlIGNsZWFuKSB0aGUgJHtwcm9wZXJ0aWVzLkFCSX0gY29tcG9uZW50cyBvZiB0aGUgJHtwcm9wZXJ0aWVzLmNvbXBvbmVudE5hbWV9LiIKKyAgICBkZXBlbmRzT24gcHJvcGVydGllcy5jb25maWd1cmVUYXNrCisKKyAgICB3b3JraW5nRGlyIHByb3BlcnRpZXMubWFrZURpcmVjdG9yeQorICAgIGlnbm9yZUV4aXRWYWx1ZSB0cnVlCisgICAgY29tbWFuZExpbmUgIm1ha2UiLCAiY2xlYW4iCisgIH0KK30KKworVGFzayBuZXdSZW1vdmVUYXNrIChNYXAgcHJvcGVydGllcykgeworICByZXR1cm4gbmV3VGFzayhwcm9wZXJ0aWVzLCAiYnJsdHR5UmVtb3ZlQWxsQ29tcG9uZW50cyIsIERlbGV0ZSkgeworICAgIGRlc2NyaXB0aW9uICJSZW1vdmUgdGhlICR7cHJvcGVydGllcy5jb21wb25lbnROYW1lfSdzIGphcnMgYW5kIGxpYnJhcmllcyBmcm9tIHRoZSBidWlsZC4iCisgICAgZGVsZXRlIGdldEphcnNQYXRoKHByb3BlcnRpZXMpCisgICAgZGVsZXRlIGdldExpYnJhcmllc1BhdGgocHJvcGVydGllcykKKyAgfQorfQorCit2b2lkIGFkZFRhc2tzIChNYXAgcHJvcGVydGllcywgU3RyaW5nIGFiaSkgeworICBwcm9wZXJ0aWVzLkFCSSA9IGFiaQorICBkZWYgaXNQcmltYXJ5QUJJID0gYWJpLmVxdWFscyhicmx0dHkubmF0aXZlLmFiaUxpc3RbMF0pCisKKyAgcHJvcGVydGllcy5hYmlEaXJlY3RvcnkgPSBicmx0dHkubmF0aXZlLmFiaURpcmVjdG9yeSArIEZpbGUuc2VwYXJhdG9yICsgcHJvcGVydGllcy5BQkkKKyAgcHJvcGVydGllcy5jb25maWd1cmVUYXNrID0gZ2V0Q29uZmlndXJlVGFzayhwcm9wZXJ0aWVzKQorCisgIHByb3BlcnRpZXMubWFrZURpcmVjdG9yeSA9IHByb3BlcnRpZXMuYWJpRGlyZWN0b3J5ICsgRmlsZS5zZXBhcmF0b3IgKyBwcm9wZXJ0aWVzLm1ha2VTdWJkaXJlY3RvcnkKKyAgcHJvcGVydGllcy5tYWtlQ29tcG9uZW50c1Rhc2sgPSBuZXdNYWtlQ29tcG9uZW50c1Rhc2socHJvcGVydGllcykKKworICBpZiAoaXNQcmltYXJ5QUJJKSB7CisgICAgZGVmIGphcnMgPSBwcm9wZXJ0aWVzLmphcnMKKworICAgIGlmICgoamFycyAhPSBudWxsKSAmJiAhamFycy5pc0VtcHR5KCkpIHsKKyAgICAgIGRlZiBhZGRKYXJzVGFzayA9IG5ld0FkZEphcnNUYXNrKHByb3BlcnRpZXMpCisgICAgICBhZGRBc3NlbWJsZURlcGVuZGVuY3kocHJvcGVydGllcywgYWRkSmFyc1Rhc2spCisgICAgfQorICB9CisKKyAgZGVmIGxpYnJhcmllcyA9IHByb3BlcnRpZXMubGlicmFyaWVzCisgIGlmICgobGlicmFyaWVzICE9IG51bGwpICYmICFsaWJyYXJpZXMuaXNFbXB0eSgpKSB7CisgICAgZGVmIGFkZExpYnJhcmllc1Rhc2sgPSBuZXdBZGRMaWJyYXJpZXNUYXNrKHByb3BlcnRpZXMpCisgICAgYWRkQXNzZW1ibGVEZXBlbmRlbmN5KHByb3BlcnRpZXMsIGFkZExpYnJhcmllc1Rhc2spCisgIH0KKworICBkZWYgbWFrZUNsZWFuVGFzayA9IG5ld01ha2VDbGVhblRhc2socHJvcGVydGllcykKKyAgYWRkQ2xlYW5EZXBlbmRlbmN5KHByb3BlcnRpZXMsIG1ha2VDbGVhblRhc2spCit9CisKK3ZvaWQgYWRkVGFza3MgKE1hcCBwcm9wZXJ0aWVzKSB7CisgIGRlZiB0YXNrTmFtZVN1ZmZpeCA9ICIiCisgIHByb3BlcnRpZXMudGFza05hbWVTdWZmaXggPSB0YXNrTmFtZVN1ZmZpeAorCisgIHByb3BlcnRpZXMuYXNzZW1ibGVUYXNrID0gbmV3QXNzZW1ibGVUYXNrKHByb3BlcnRpZXMpCisgIHByb3BlcnRpZXMuY2xlYW5UYXNrID0gbmV3Q2xlYW5UYXNrKHByb3BlcnRpZXMpCisKKyAgaWYgKHByb3BlcnRpZXMubWFrZVRhcmdldHMgPT0gbnVsbCkgcHJvcGVydGllcy5tYWtlVGFyZ2V0cyA9ICJhbGwiCisgIGlmIChwcm9wZXJ0aWVzLm1ha2VUYXJnZXRzIGluc3RhbmNlb2YgU3RyaW5nKSBwcm9wZXJ0aWVzLm1ha2VUYXJnZXRzID0gW3Byb3BlcnRpZXMubWFrZVRhcmdldHNdCisKKyAgaWYgKHByb3BlcnRpZXMuamFyU3ViZGlyZWN0b3JpZXMgPT0gbnVsbCkgcHJvcGVydGllcy5qYXJTdWJkaXJlY3RvcmllcyA9IHByb3BlcnRpZXMubWFrZVN1YmRpcmVjdG9yeQorICBpZiAocHJvcGVydGllcy5qYXJTdWJkaXJlY3RvcmllcyBpbnN0YW5jZW9mIFN0cmluZykgcHJvcGVydGllcy5qYXJTdWJkaXJlY3RvcmllcyA9IFtwcm9wZXJ0aWVzLmphclN1YmRpcmVjdG9yaWVzXQorCisgIGlmIChwcm9wZXJ0aWVzLmxpYnJhcnlTdWJkaXJlY3RvcmllcyA9PSBudWxsKSBwcm9wZXJ0aWVzLmxpYnJhcnlTdWJkaXJlY3RvcmllcyA9IHByb3BlcnRpZXMubWFrZVN1YmRpcmVjdG9yeQorICBpZiAocHJvcGVydGllcy5saWJyYXJ5U3ViZGlyZWN0b3JpZXMgaW5zdGFuY2VvZiBTdHJpbmcpIHByb3BlcnRpZXMubGlicmFyeVN1YmRpcmVjdG9yaWVzID0gW3Byb3BlcnRpZXMubGlicmFyeVN1YmRpcmVjdG9yaWVzXQorCisgIGRlZiByZW1vdmVUYXNrID0gbmV3UmVtb3ZlVGFzayhwcm9wZXJ0aWVzKQorICBhZGRDbGVhbkRlcGVuZGVuY3kocHJvcGVydGllcywgcmVtb3ZlVGFzaykKKworICBicmx0dHkubmF0aXZlLmFiaUxpc3QuZWFjaCB7IGFiaSAtPgorICAgIHByb3BlcnRpZXMudGFza05hbWVTdWZmaXggPSAiJHt0YXNrTmFtZVN1ZmZpeH1fJHthYml9IgorICAgIGFkZFRhc2tzKHByb3BlcnRpZXMsIGFiaSkKKyAgfQorfQorCiticmx0dHkuYWRkQXNzZW1ibGVUYXNrID0geyBQcm9qZWN0IHByb2plY3QsIFRhc2sgYXNzZW1ibGVUYXNrIC0+CisgIHByb2plY3QuYWZ0ZXJFdmFsdWF0ZSB7CisgICAgcHJvamVjdC50YXNrcy53aXRoVHlwZShKYXZhQ29tcGlsZSkuZWFjaCB7IGNvbXBpbGVUYXNrIC0+CisgICAgICBjb21waWxlVGFzay5kZXBlbmRzT24gYXNzZW1ibGVUYXNrCisgICAgfQorICB9Cit9CisKK2JybHR0eS5hZGRUYXNrcyA9IHsgTWFwIHByb3BlcnRpZXMgLT4KKyAgYWRkVGFza3MocHJvcGVydGllcykKKyAgYnJsdHR5LmFkZEFzc2VtYmxlVGFzayhwcm9wZXJ0aWVzLnByb2plY3QsIHByb3BlcnRpZXMuYXNzZW1ibGVUYXNrKQorICBjbGVhbi5kZXBlbmRzT24gcHJvcGVydGllcy5jbGVhblRhc2sKK30KZGlmZiAtLWdpdCBhL0FuZHJvaWQvR3JhZGxlL2JybHR0eS1oZWxwLmdyYWRsZSBiL0FuZHJvaWQvR3JhZGxlL2JybHR0eS1oZWxwLmdyYWRsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kOTBmOWEwCi0tLSAvZGV2L251bGwKKysrIGIvQW5kcm9pZC9HcmFkbGUvYnJsdHR5LWhlbHAuZ3JhZGxlCkBAIC0wLDAgKzEsNDMgQEAKK3ZvaWQgbGlzdFByb3BlcnRpZXMgKE9iamVjdCBvYmplY3QsIFN0cmluZyBuYW1lLCBpbnQgbGV2ZWw9MCkgeworICBwcmludCAoInwgIiAqIGxldmVsKQorICBsZXZlbCArPSAxCisgIHByaW50IG5hbWUKKworICBpZiAob2JqZWN0IGluc3RhbmNlb2YgTWFwKSB7CisgICAgcHJpbnRsbiAiWzpdIgorICAgIGRlZiBtYXAgPSBvYmplY3QgYXMgTWFwCisKKyAgICBtYXAua2V5U2V0KCkuc29ydCgpLmVhY2ggeyBrZXkgLT4KKyAgICAgIGxpc3RQcm9wZXJ0aWVzKG1hcFtrZXldLCBrZXksIGxldmVsKQorICAgIH0KKyAgfSBlbHNlIGlmIChvYmplY3QgaW5zdGFuY2VvZiBMaXN0KSB7CisgICAgcHJpbnRsbiAiW10iCisgICAgZGVmIGxpc3QgPSBvYmplY3QgYXMgTGlzdAorICAgIGludCBpbmRleCA9IDAKKworICAgIGxpc3QuZWFjaCB7IGVsZW1lbnQgLT4KKyAgICAgIGxpc3RQcm9wZXJ0aWVzKGVsZW1lbnQsICgnWycgKyBpbmRleCsrICsgJ10nKSwgbGV2ZWwpCisgICAgfQorICB9IGVsc2UgeworICAgIHByaW50ICI6ICIKKworICAgIGlmIChvYmplY3QgaW5zdGFuY2VvZiBQcm9qZWN0KSB7CisgICAgICBwcmludCAib2JqZWN0ICIKKyAgICAgIG9iamVjdCA9IG9iamVjdC5uYW1lCisgICAgfSBlbHNlIGlmIChvYmplY3QgaW5zdGFuY2VvZiBUYXNrKSB7CisgICAgICBwcmludCAidGFzayAiCisgICAgICBvYmplY3QgPSBvYmplY3QubmFtZQorICAgIH0KKworICAgIHByaW50bG4gb2JqZWN0CisgIH0KK30KKwordGFza3MucmVnaXN0ZXIoImJybHR0eUxpc3RQcm9wZXJ0aWVzIikgeworICBncm91cCAiaGVscCIKKyAgZGVzY3JpcHRpb24gIkxpc3RzIGFsbCBvZiBicmx0dHkncyBwcm9wZXJ0aWVzLiIKKworICBkb0xhc3QgeworICAgIGxpc3RQcm9wZXJ0aWVzKHJvb3RQcm9qZWN0LmJybHR0eSwgImJybHR0eSIpCisgIH0KK30KZGlmZiAtLWdpdCBhL0FuZHJvaWQvR3JhZGxlL2JybHR0eS1wcm9wZXJ0aWVzLmdyYWRsZSBiL0FuZHJvaWQvR3JhZGxlL2JybHR0eS1wcm9wZXJ0aWVzLmdyYWRsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jODY4ZDNhCi0tLSAvZGV2L251bGwKKysrIGIvQW5kcm9pZC9HcmFkbGUvYnJsdHR5LXByb3BlcnRpZXMuZ3JhZGxlCkBAIC0wLDAgKzEsNzkgQEAKK2RlZiBwcm9wZXJ0eUZpbGVzID0gWworICBjb25maWc6ICJjb25maWcucHJvcGVydGllcyIsCisgIG5hdGl2ZTogIm5hdGl2ZS5wcm9wZXJ0aWVzIiwKK10KKwordm9pZCBub3JtYWxpemVGaWxlUHJvcGVydHkgKFByb3BlcnRpZXMgcHJvcGVydGllcywgU3RyaW5nIG5hbWUpIHsKKyAgcHJvcGVydGllc1tuYW1lXSA9IHJvb3RQcm9qZWN0LmZpbGUocHJvcGVydGllc1tuYW1lXSkKK30KKwordm9pZCBub3JtYWxpemVEaXJlY3RvcnlQcm9wZXJ0eSAoUHJvcGVydGllcyBwcm9wZXJ0aWVzLCBTdHJpbmcgbmFtZSkgeworICBub3JtYWxpemVGaWxlUHJvcGVydHkocHJvcGVydGllcywgbmFtZSkKKyAgcHJvcGVydGllc1tuYW1lXSA9IHByb3BlcnRpZXNbbmFtZV0uYWJzb2x1dGVQYXRoCit9CisKK3ZvaWQgbm9ybWFsaXplU3ViZGlyZWN0b3J5UHJvcGVydHkgKFByb3BlcnRpZXMgcHJvcGVydGllcywgU3RyaW5nIHN1YmRpcmVjdG9yeU5hbWUpIHsKKyAgZGVmIGRpcmVjdG9yeU5hbWUgPSBzdWJkaXJlY3RvcnlOYW1lLnJlcGxhY2VBbGwoL1N1YmRpcmVjdG9yeSQvLCAiRGlyZWN0b3J5IikKKyAgcHJvcGVydGllc1tkaXJlY3RvcnlOYW1lXSA9IHByb3BlcnRpZXMucm9vdERpcmVjdG9yeSArIEZpbGUuc2VwYXJhdG9yICsgcHJvcGVydGllc1tzdWJkaXJlY3RvcnlOYW1lXQorfQorCit2b2lkIG5vcm1hbGl6ZUxpc3RQcm9wZXJ0eSAoUHJvcGVydGllcyBwcm9wZXJ0aWVzLCBTdHJpbmcgbmFtZSkgeworICBwcm9wZXJ0aWVzW25hbWVdID0gcHJvcGVydGllc1tuYW1lXS5zcGxpdCgnLCcpLmNvbGxlY3R7aXQgYXMgU3RyaW5nfQorfQorCitQcm9wZXJ0aWVzIGxvYWRQcm9wZXJ0aWVzRnJvbUZpbGUgKFN0cmluZyBwYXRoKSB7CisgIGRlZiBwcm9wZXJ0aWVzID0gbmV3IFByb3BlcnRpZXMoKQorICBkZWYgZmlsZSA9IHJvb3RQcm9qZWN0LmZpbGUocGF0aCkKKworICBpZiAoZmlsZS5leGlzdHMoKSkgeworICAgIG5ldyBGaWxlSW5wdXRTdHJlYW0oZmlsZSkud2l0aFN0cmVhbSB7IHN0cmVhbSAtPgorICAgICAgbmV3IElucHV0U3RyZWFtUmVhZGVyKHN0cmVhbSwgIlVURi04Iikud2l0aFJlYWRlciB7IHJlYWRlciAtPgorICAgICAgICBwcm9wZXJ0aWVzLmxvYWQocmVhZGVyKQorICAgICAgfQorICAgIH0KKyAgfQorCisgIGRlZiBkaXJlY3RvcnlQcm9wZXJ0aWVzID0gW10KKyAgZGVmIHN1YmRpcmVjdG9yeVByb3BlcnRpZXMgPSBbXQorICBkZWYgZmlsZVByb3BlcnRpZXMgPSBbXQorICBkZWYgbGlzdFByb3BlcnRpZXMgPSBbXQorCisgIHByb3BlcnRpZXMucHJvcGVydHlOYW1lcygpLmVhY2ggeyBuYW1lIC0+CisgICAgaWYgKG5hbWUuZW5kc1dpdGgoIkRpcmVjdG9yeSIpKSB7CisgICAgICBkaXJlY3RvcnlQcm9wZXJ0aWVzICs9IG5hbWUKKyAgICB9IGVsc2UgaWYgKG5hbWUuZW5kc1dpdGgoIlN1YmRpcmVjdG9yeSIpKSB7CisgICAgICBzdWJkaXJlY3RvcnlQcm9wZXJ0aWVzICs9IG5hbWUKKyAgICB9IGVsc2UgaWYgKG5hbWUuZW5kc1dpdGgoIkZpbGUiKSkgeworICAgICAgZmlsZVByb3BlcnRpZXMgKz0gbmFtZQorICAgIH0gZWxzZSBpZiAobmFtZS5lbmRzV2l0aCgiTGlzdCIpKSB7CisgICAgICBsaXN0UHJvcGVydGllcyArPSBuYW1lCisgICAgfQorICB9CisKKyAgZGlyZWN0b3J5UHJvcGVydGllcy5lYWNoIHsgbmFtZSAtPgorICAgIG5vcm1hbGl6ZURpcmVjdG9yeVByb3BlcnR5KHByb3BlcnRpZXMsIG5hbWUpCisgIH0KKworICBzdWJkaXJlY3RvcnlQcm9wZXJ0aWVzLmVhY2ggeyBuYW1lIC0+CisgICAgbm9ybWFsaXplU3ViZGlyZWN0b3J5UHJvcGVydHkocHJvcGVydGllcywgbmFtZSkKKyAgfQorCisgIGZpbGVQcm9wZXJ0aWVzLmVhY2ggeyBuYW1lIC0+CisgICAgbm9ybWFsaXplRmlsZVByb3BlcnR5KHByb3BlcnRpZXMsIG5hbWUpCisgIH0KKworICBsaXN0UHJvcGVydGllcy5lYWNoIHsgbmFtZSAtPgorICAgIG5vcm1hbGl6ZUxpc3RQcm9wZXJ0eShwcm9wZXJ0aWVzLCBuYW1lKQorICB9CisKKyAgcmV0dXJuIHByb3BlcnRpZXMKK30KKworcHJvcGVydHlGaWxlcy5rZXlTZXQoKS5lYWNoIHsgbmFtZSAtPgorICBkZWYgcGF0aCA9IHByb3BlcnR5RmlsZXNbbmFtZV0KKyAgYnJsdHR5W25hbWVdID0gbG9hZFByb3BlcnRpZXNGcm9tRmlsZShwYXRoKQorfQorCiticmx0dHkubG9hZFByb3BlcnRpZXMgPSB7IFN0cmluZyBmaWxlUGF0aCAtPgorICBsb2FkUHJvcGVydGllc0Zyb21GaWxlKGZpbGVQYXRoKQorfQpkaWZmIC0tZ2l0IGEvQW5kcm9pZC9HcmFkbGUvYnJsdHR5LmdyYWRsZSBiL0FuZHJvaWQvR3JhZGxlL2JybHR0eS5ncmFkbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWUzZmM3OQotLS0gL2Rldi9udWxsCisrKyBiL0FuZHJvaWQvR3JhZGxlL2JybHR0eS5ncmFkbGUKQEAgLTAsMCArMSwyOSBAQAorZXh0LmJybHR0eSA9IFs6XQorCiticmx0dHkuZ2V0UHJvamVjdFBhdGggPSB7IFByb2plY3QgcHJvamVjdCAtPgorICBwcm9qZWN0LnByb2plY3REaXIucGF0aAorfQorCitTdHJpbmcgZ2V0UHJvamVjdFBhdGggKFByb2plY3QgcHJvamVjdCwgU3RyaW5nIHN1YnBhdGgpIHsKKyAgcmV0dXJuIGJybHR0eS5nZXRQcm9qZWN0UGF0aChwcm9qZWN0KSArIEZpbGUuc2VwYXJhdG9yICsgc3VicGF0aAorfQorCiticmx0dHkuZ2V0QXNzZXRzUGF0aCA9IHsgUHJvamVjdCBwcm9qZWN0IC0+CisgIHJldHVybiBnZXRQcm9qZWN0UGF0aChwcm9qZWN0LCBicmx0dHkubmF0aXZlLmFzc2V0c1BhdGgpCit9CisKK2JybHR0eS5nZXRKYXJzUGF0aCA9IHsgUHJvamVjdCBwcm9qZWN0IC0+CisgIHJldHVybiBnZXRQcm9qZWN0UGF0aChwcm9qZWN0LCBicmx0dHkubmF0aXZlLmphcnNQYXRoKQorfQorCiticmx0dHkuZ2V0TGlicmFyaWVzUGF0aCA9IHsgUHJvamVjdCBwcm9qZWN0IC0+CisgIHJldHVybiBnZXRQcm9qZWN0UGF0aChwcm9qZWN0LCBicmx0dHkubmF0aXZlLmxpYnJhcmllc1BhdGgpCit9CisKK2JybHR0eS5nZXRBQklQYXRoID0geyBQcm9qZWN0IHByb2plY3QsIFN0cmluZyBhYmkgLT4KKyAgYnJsdHR5LmdldExpYnJhcmllc1BhdGgocHJvamVjdCkgKyBGaWxlLnNlcGFyYXRvciArIGFiaQorfQorCithcHBseSBmcm9tOiAiYnJsdHR5LXByb3BlcnRpZXMuZ3JhZGxlIgorYXBwbHkgZnJvbTogImJybHR0eS1idWlsZC5ncmFkbGUiCithcHBseSBmcm9tOiAiYnJsdHR5LWhlbHAuZ3JhZGxlIgpkaWZmIC0tZ2l0IGEvQW5kcm9pZC9HcmFkbGUvYnVpbGQuZ3JhZGxlIGIvQW5kcm9pZC9HcmFkbGUvYnVpbGQuZ3JhZGxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgyODk0YTgKLS0tIC9kZXYvbnVsbAorKysgYi9BbmRyb2lkL0dyYWRsZS9idWlsZC5ncmFkbGUKQEAgLTAsMCArMSwyOSBAQAorYnVpbGRzY3JpcHQgeworICByZXBvc2l0b3JpZXMgeworICAgIGdvb2dsZSgpCisgICAgbWF2ZW5DZW50cmFsKCkKKyAgICBqY2VudGVyKCkKKyAgfQorCisgIGRlcGVuZGVuY2llcyB7CisgICAgY2xhc3NwYXRoICJjb20uYW5kcm9pZC50b29scy5idWlsZDpncmFkbGU6NC4xLjMiCisgIH0KK30KKworcGx1Z2lucyB7CisgIGlkICJiYXNlIgorfQorCitkZXNjcmlwdGlvbiA9ICIiIgorIiR7cHJvamVjdC5uYW1lfSIgaXMgYSBzY3JlZW4gcmVhZGVyIGZvciBicmFpbGxlIHVzZXJzLgorIiIiCisKK2FwcGx5IGZyb206ICJicmx0dHkuZ3JhZGxlIgorCitzdWJwcm9qZWN0cyB7CisgIHJlcG9zaXRvcmllcyB7CisgICAgZ29vZ2xlKCkKKyAgICBtYXZlbkNlbnRyYWwoKQorICAgIGpjZW50ZXIoKQorICB9Cit9CmRpZmYgLS1naXQgYS9BbmRyb2lkL0dyYWRsZS9jb21tb24ubWsgYi9BbmRyb2lkL0dyYWRsZS9jb21tb24ubWsKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGRjOGE1MgotLS0gL2Rldi9udWxsCisrKyBiL0FuZHJvaWQvR3JhZGxlL2NvbW1vbi5tawpAQCAtMCwwICsxLDQzIEBACitHUkFETEVfV1JBUFBFUl9DT01NQU5EID0gLi9ncmFkbGV3IC0tcXVpZXQgLS1jb25zb2xlIHBsYWluCitHUkFETEVfRFVNUF9DT01NQU5EID0gYWFwdCBkdW1wIC0tdmFsdWVzCitHUkFETEVfU1lNTElOS19DT01NQU5EID0gbG4gLXMgLWYKKworR1JBRExFX1JPT1RfTkFNRSA9IGJybHR0eQorR1JBRExFX0NPUkVfTkFNRSA9IGNvcmUKK0dSQURMRV9BUFBfTkFNRSA9IGFwcAorR1JBRExFX0FQSV9OQU1FID0gYXBpCitHUkFETEVfQVBJVEVTVF9OQU1FID0gYXBpdGVzdAorCitHUkFETEVfREVCVUdfVkFSSUFOVCA9IGRlYnVnCitHUkFETEVfUkVMRUFTRV9WQVJJQU5UID0gcmVsZWFzZQorCitHUkFETEVfQUxMX0FCSSA9IHVuaXZlcnNhbAorR1JBRExFX0FSTTMyX0FCSSA9IGFybWVhYmktdjdhCitHUkFETEVfQVJNNjRfQUJJID0gYXJtNjQtdjhhCitHUkFETEVfWDg2MzJfQUJJID0geDg2CitHUkFETEVfWDg2NjRfQUJJID0geDg2XzY0CisKK0dSQURMRV9CVUlMRF9ESVJFQ1RPUlkgPSBhcHAvYnVpbGQKK0dSQURMRV9PVVRQVVRfRElSRUNUT1JZID0gJChHUkFETEVfQlVJTERfRElSRUNUT1JZKS9vdXRwdXRzCisKK0dSQURMRV9QQUNLQUdFX0RJUkVDVE9SWSA9ICQoR1JBRExFX09VVFBVVF9ESVJFQ1RPUlkpL2FwaworR1JBRExFX1BBQ0tBR0VfRVhURU5TSU9OID0gYXBrCitHUkFETEVfREVCVUdfUEFDS0FHRSA9ICQoR1JBRExFX1BBQ0tBR0VfRElSRUNUT1JZKS8kKEdSQURMRV9ERUJVR19WQVJJQU5UKS8kKEdSQURMRV9BUFBfTkFNRSktJChHUkFETEVfQUxMX0FCSSktJChHUkFETEVfREVCVUdfVkFSSUFOVCkuJChHUkFETEVfUEFDS0FHRV9FWFRFTlNJT04pCitHUkFETEVfUkVMRUFTRV9QQUNLQUdFID0gJChHUkFETEVfUEFDS0FHRV9ESVJFQ1RPUlkpLyQoR1JBRExFX1JFTEVBU0VfVkFSSUFOVCkvJChHUkFETEVfQVBQX05BTUUpLSQoR1JBRExFX0FMTF9BQkkpLSQoR1JBRExFX1JFTEVBU0VfVkFSSUFOVCkuJChHUkFETEVfUEFDS0FHRV9FWFRFTlNJT04pCisKK0dSQURMRV9CVU5ETEVfRElSRUNUT1JZID0gJChHUkFETEVfT1VUUFVUX0RJUkVDVE9SWSkvYnVuZGxlCitHUkFETEVfQlVORExFX0VYVEVOU0lPTiA9IGFhYgorR1JBRExFX0RFQlVHX0JVTkRMRSA9ICQoR1JBRExFX0JVTkRMRV9ESVJFQ1RPUlkpLyQoR1JBRExFX0RFQlVHX1ZBUklBTlQpLyQoR1JBRExFX0FQUF9OQU1FKS0kKEdSQURMRV9ERUJVR19WQVJJQU5UKS4kKEdSQURMRV9CVU5ETEVfRVhURU5TSU9OKQorR1JBRExFX1JFTEVBU0VfQlVORExFID0gJChHUkFETEVfQlVORExFX0RJUkVDVE9SWSkvJChHUkFETEVfUkVMRUFTRV9WQVJJQU5UKS8kKEdSQURMRV9BUFBfTkFNRSktJChHUkFETEVfUkVMRUFTRV9WQVJJQU5UKS4kKEdSQURMRV9CVU5ETEVfRVhURU5TSU9OKQorCitHUkFETEVfUkVQT1JUX0RJUkVDVE9SWSA9ICQoR1JBRExFX0JVSUxEX0RJUkVDVE9SWSkvcmVwb3J0cworR1JBRExFX1JFUE9SVF9OQU1FID0gbGludAorR1JBRExFX1JFUE9SVF9UWVBFID0gcmVzdWx0cworR1JBRExFX1JFUE9SVF9FWFRFTlNJT04gPSBodG1sCitHUkFETEVfREVCVUdfUkVQT1JUID0gJChHUkFETEVfUkVQT1JUX0RJUkVDVE9SWSkvJChHUkFETEVfUkVQT1JUX05BTUUpLSQoR1JBRExFX1JFUE9SVF9UWVBFKS0kKEdSQURMRV9ERUJVR19WQVJJQU5UKS4kKEdSQURMRV9SRVBPUlRfRVhURU5TSU9OKQorR1JBRExFX1JFTEVBU0VfUkVQT1JUID0gJChHUkFETEVfUkVQT1JUX0RJUkVDVE9SWSkvJChHUkFETEVfUkVQT1JUX05BTUUpLSQoR1JBRExFX1JFUE9SVF9UWVBFKS0kKEdSQURMRV9SRUxFQVNFX1ZBUklBTlQpLiQoR1JBRExFX1JFUE9SVF9FWFRFTlNJT04pCisKK0dSQURMRV9EVU1QX0VYVEVOU0lPTiA9IGR1bXAKK0dSQURMRV9EVU1QX05BTUUgPSAkKEA6LWR1bXA9KQorR1JBRExFX0RVTVBfRklMRSA9ICQoR1JBRExFX1JPT1RfTkFNRSktJChHUkFETEVfRFVNUF9OQU1FKS4kKEdSQURMRV9EVU1QX0VYVEVOU0lPTikKKwpkaWZmIC0tZ2l0IGEvQW5kcm9pZC9HcmFkbGUvY29uZmlnLnByb3BlcnRpZXMuaW4gYi9BbmRyb2lkL0dyYWRsZS9jb25maWcucHJvcGVydGllcy5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YzE3YmY3Ci0tLSAvZGV2L251bGwKKysrIGIvQW5kcm9pZC9HcmFkbGUvY29uZmlnLnByb3BlcnRpZXMuaW4KQEAgLTAsMCArMSw3IEBACitjb3B5cmlnaHROb3RpY2U9QFBBQ0tBR0VfQ09QWVJJR0hUQAord2ViU2l0ZT1AUEFDS0FHRV9VUkxACitlbWFpbEFkZHJlc3M9QFBBQ0tBR0VfQlVHUkVQT1JUQAorCithcGlWZXJzaW9uPUBhcGlfdmVyc2lvbkAKK2FwaVJlbGVhc2U9QGFwaV9yZWxlYXNlQAorCmRpZmYgLS1naXQgYS9BbmRyb2lkL0dyYWRsZS9jb3JlL2JybHR0eS5ncmFkbGUgYi9BbmRyb2lkL0dyYWRsZS9jb3JlL2JybHR0eS5ncmFkbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmNlYzk4YgotLS0gL2Rldi9udWxsCisrKyBiL0FuZHJvaWQvR3JhZGxlL2NvcmUvYnJsdHR5LmdyYWRsZQpAQCAtMCwwICsxLDI5IEBACiticmx0dHkuYWRkVGFza3MoWworICBwcm9qZWN0OiBwcm9qZWN0LAorICBjb21wb25lbnROYW1lOiAiY29yZSIsCisgIG1ha2VTdWJkaXJlY3Rvcnk6IGJybHR0eS5uYXRpdmUuY29yZVN1YmRpcmVjdG9yeSwKKworICBtYWtlVGFyZ2V0czogWworICAgIGJybHR0eS5uYXRpdmUuY29yZUxpYnJhcnksCisgICAgYnJsdHR5Lm5hdGl2ZS5jb3JlV3JhcHBlciwKKyAgICBicmx0dHkubmF0aXZlLmNvcmVCaW5kaW5ncywKKworICAgICJicmFpbGxlLWRyaXZlcnMiLAorICAgICJzcGVlY2gtZHJpdmVycyIsCisgICAgInNjcmVlbi1kcml2ZXJzIiwKKyAgXSwKKworICBsaWJyYXJpZXM6IFsKKyAgICAiYnJsdHR5X2NvcmUiLAorICAgICJicmx0dHlfam5pIiwKKworICAgICJicmx0dHliPz8iLAorICAgICJicmx0dHlzPz8iLAorICAgICJicmx0dHl4Pz8iCisgIF0sCisKKyAgbGlicmFyeVN1YmRpcmVjdG9yaWVzOiBbCisgICAgYnJsdHR5Lm5hdGl2ZS5jb3JlU3ViZGlyZWN0b3J5LAorICAgIGJybHR0eS5uYXRpdmUuZHJpdmVyc1N1YmRpcmVjdG9yeQorICBdLAorXSkKZGlmZiAtLWdpdCBhL0FuZHJvaWQvR3JhZGxlL2NvcmUvYnVpbGQuZ3JhZGxlIGIvQW5kcm9pZC9HcmFkbGUvY29yZS9idWlsZC5ncmFkbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTFkY2QwYQotLS0gL2Rldi9udWxsCisrKyBiL0FuZHJvaWQvR3JhZGxlL2NvcmUvYnVpbGQuZ3JhZGxlCkBAIC0wLDAgKzEsMTkgQEAKK3BsdWdpbnMgeworICBpZCAiY29tLmFuZHJvaWQubGlicmFyeSIKK30KKworZGVzY3JpcHRpb24gPSAiIiIKKyIke3Byb2plY3QubmFtZX0iIGlzIGEgSmF2YSB3cmFwcGVyIGZvciB0aGUgbmF0aXZlICIke3Jvb3RQcm9qZWN0Lm5hbWV9IiBjb2RlLgorIiIiCisKK2FwcGx5IGZyb206ICJicmx0dHkuZ3JhZGxlIgorCithbmRyb2lkIHsKKyAgY29tcGlsZVNka1ZlcnNpb24gImFuZHJvaWQtMzEiCisgIGJ1aWxkVG9vbHNWZXJzaW9uICIyOS4wLjMiCisKKyAgZGVmYXVsdENvbmZpZyB7CisgICAgdGFyZ2V0U2RrVmVyc2lvbiAzMAorICAgIG1pblNka1ZlcnNpb24gMTYKKyAgfQorfQpkaWZmIC0tZ2l0IGEvQW5kcm9pZC9HcmFkbGUvY29yZS9zcmMvbWFpbi9BbmRyb2lkTWFuaWZlc3QueG1sIGIvQW5kcm9pZC9HcmFkbGUvY29yZS9zcmMvbWFpbi9BbmRyb2lkTWFuaWZlc3QueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQwZTkyNGQKLS0tIC9kZXYvbnVsbAorKysgYi9BbmRyb2lkL0dyYWRsZS9jb3JlL3NyYy9tYWluL0FuZHJvaWRNYW5pZmVzdC54bWwKQEAgLTAsMCArMSw3IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgorCis8bWFuaWZlc3QgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICBwYWNrYWdlPSJvcmcuYTExeS5icmx0dHkuY29yZSIKKyAgPgorCis8L21hbmlmZXN0PgpkaWZmIC0tZ2l0IGEvQW5kcm9pZC9HcmFkbGUvY29yZS9zcmMvbWFpbi9qYXZhL29yZy9hMTF5L2JybHR0eS9jb3JlL0FyZ3VtZW50c0J1aWxkZXIuamF2YSBiL0FuZHJvaWQvR3JhZGxlL2NvcmUvc3JjL21haW4vamF2YS9vcmcvYTExeS9icmx0dHkvY29yZS9Bcmd1bWVudHNCdWlsZGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODYxZDNkMgotLS0gL2Rldi9udWxsCisrKyBiL0FuZHJvaWQvR3JhZGxlL2NvcmUvc3JjL21haW4vamF2YS9vcmcvYTExeS9icmx0dHkvY29yZS9Bcmd1bWVudHNCdWlsZGVyLmphdmEKQEAgLTAsMCArMSwzMzkgQEAKKy8qCisgKiBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorICogICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorICoKKyAqIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorICoKKyAqIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyAqLworCitwYWNrYWdlIG9yZy5hMTF5LmJybHR0eS5jb3JlOworCitpbXBvcnQgamF2YS5pby5GaWxlOworaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKKy8qIG9wdGlvbnMgbm90IHlldCBzdXBwb3J0ZWQ6CisgKiAtRSAgICAgICAgICAgLS1lbnZpcm9ubWVudC12YXJpYWJsZXMKKyAqIC1BIGFyZywuLi4gICAtLWFwaS1wYXJhbWV0ZXJzPQorICogLU4gICAgICAgICAgIC0tbm8tYXBpCisgKiAtQiBhcmcsLi4uICAgLS1icmFpbGxlLXBhcmFtZXRlcnM9CisgKiAtciAgICAgICAgICAgLS1yZWxlYXNlLWRldmljZQorICogLUsgYXJnLC4uLiAgIC0ta2V5Ym9hcmQtcHJvcGVydGllcz0KKyAqIC1zIGRyaXZlciAgICAtLXNwZWVjaC1kcml2ZXI9CisgKiAtUyBhcmcsLi4uICAgLS1zcGVlY2gtcGFyYW1ldGVycz0KKyAqIC1pIGZpbGUgICAgICAtLXNwZWVjaC1pbnB1dD0KKyAqIC14IGRyaXZlciAgICAtLXNjcmVlbi1kcml2ZXI9CisgKiAtWCBhcmcsLi4uICAgLS1zY3JlZW4tcGFyYW1ldGVycz0KKyAqIC1wIGRldmljZSAgICAtLXBjbS1kZXZpY2U9CisgKiAtbSBkZXZpY2UgICAgLS1taWRpLWRldmljZT0KKyAqIC1VIGNzZWNzICAgICAtLXVwZGF0ZS1pbnRlcnZhbD0KKyAqIC1NIGNzZWNzICAgICAtLW1lc3NhZ2UtZGVsYXk9CisgKiAtZSAgICAgICAgICAgLS1zdGFuZGFyZC1lcnJvcgorICogLXYgICAgICAgICAgIC0tdmVyaWZ5CisgKi8KKworcHVibGljIGNsYXNzIEFyZ3VtZW50c0J1aWxkZXIgeworICBwcml2YXRlIGJvb2xlYW4gZm9yZWdyb3VuZEV4ZWN1dGlvbiA9IGZhbHNlOworICBwcml2YXRlIGJvb2xlYW4gcmVsZWFzZURldmljZSA9IGZhbHNlOworICBwcml2YXRlIFN0cmluZyBsb2dMZXZlbCA9IG51bGw7CisgIHByaXZhdGUgU3RyaW5nIGxvZ0ZpbGUgPSBudWxsOworICBwcml2YXRlIFN0cmluZyBjb25maWd1cmF0aW9uRmlsZSA9IG51bGw7CisgIHByaXZhdGUgU3RyaW5nIHByZWZlcmVuY2VzRmlsZSA9IG51bGw7CisgIHByaXZhdGUgU3RyaW5nIGxvY2FsZURpcmVjdG9yeSA9IG51bGw7CisgIHByaXZhdGUgU3RyaW5nIGRyaXZlcnNEaXJlY3RvcnkgPSBudWxsOworICBwcml2YXRlIFN0cmluZyB3cml0YWJsZURpcmVjdG9yeSA9IG51bGw7CisgIHByaXZhdGUgU3RyaW5nIHVwZGF0YWJsZURpcmVjdG9yeSA9IG51bGw7CisgIHByaXZhdGUgU3RyaW5nIHRhYmxlc0RpcmVjdG9yeSA9IG51bGw7CisgIHByaXZhdGUgU3RyaW5nIHRleHRUYWJsZSA9IG51bGw7CisgIHByaXZhdGUgU3RyaW5nIGF0dHJpYnV0ZXNUYWJsZSA9IG51bGw7CisgIHByaXZhdGUgU3RyaW5nIGNvbnRyYWN0aW9uVGFibGUgPSBudWxsOworICBwcml2YXRlIFN0cmluZyBrZXlib2FyZFRhYmxlID0gbnVsbDsKKyAgcHJpdmF0ZSBTdHJpbmcgYnJhaWxsZURyaXZlciA9IG51bGw7CisgIHByaXZhdGUgU3RyaW5nIGJyYWlsbGVEZXZpY2UgPSBudWxsOworICBwcml2YXRlIFN0cmluZyBzcGVlY2hEcml2ZXIgPSBudWxsOworICBwcml2YXRlIGJvb2xlYW4gcXVpZXRJZk5vQnJhaWxsZSA9IGZhbHNlOworICBwcml2YXRlIGJvb2xlYW4gYXBpRW5hYmxlZCA9IGZhbHNlOworICBwcml2YXRlIFN0cmluZyBhcGlQYXJhbWV0ZXJzID0gbnVsbDsKKworICBwdWJsaWMgZmluYWwgYm9vbGVhbiBnZXRGb3JlZ3JvdW5kRXhlY3V0aW9uICgpIHsKKyAgICByZXR1cm4gIGZvcmVncm91bmRFeGVjdXRpb247CisgIH0KKworICBwdWJsaWMgZmluYWwgQXJndW1lbnRzQnVpbGRlciBzZXRGb3JlZ3JvdW5kRXhlY3V0aW9uIChib29sZWFuIHZhbHVlKSB7CisgICAgZm9yZWdyb3VuZEV4ZWN1dGlvbiA9IHZhbHVlOworICAgIHJldHVybiB0aGlzOworICB9CisKKyAgcHVibGljIGZpbmFsIGJvb2xlYW4gZ2V0UmVsZWFzZURldmljZSAoKSB7CisgICAgcmV0dXJuICByZWxlYXNlRGV2aWNlOworICB9CisKKyAgcHVibGljIGZpbmFsIEFyZ3VtZW50c0J1aWxkZXIgc2V0UmVsZWFzZURldmljZSAoYm9vbGVhbiB2YWx1ZSkgeworICAgIHJlbGVhc2VEZXZpY2UgPSB2YWx1ZTsKKyAgICByZXR1cm4gdGhpczsKKyAgfQorCisgIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0TG9nTGV2ZWwgKCkgeworICAgIHJldHVybiAgbG9nTGV2ZWw7CisgIH0KKworICBwdWJsaWMgZmluYWwgQXJndW1lbnRzQnVpbGRlciBzZXRMb2dMZXZlbCAoU3RyaW5nIHZhbHVlKSB7CisgICAgbG9nTGV2ZWwgPSB2YWx1ZTsKKyAgICByZXR1cm4gdGhpczsKKyAgfQorCisgIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0TG9nRmlsZSAoKSB7CisgICAgcmV0dXJuICBsb2dGaWxlOworICB9CisKKyAgcHVibGljIGZpbmFsIEFyZ3VtZW50c0J1aWxkZXIgc2V0TG9nRmlsZSAoU3RyaW5nIHZhbHVlKSB7CisgICAgbG9nRmlsZSA9IHZhbHVlOworICAgIHJldHVybiB0aGlzOworICB9CisKKyAgcHVibGljIGZpbmFsIFN0cmluZyBnZXRDb25maWd1cmF0aW9uRmlsZSAoKSB7CisgICAgcmV0dXJuICBjb25maWd1cmF0aW9uRmlsZTsKKyAgfQorCisgIHB1YmxpYyBmaW5hbCBBcmd1bWVudHNCdWlsZGVyIHNldENvbmZpZ3VyYXRpb25GaWxlIChTdHJpbmcgdmFsdWUpIHsKKyAgICBjb25maWd1cmF0aW9uRmlsZSA9IHZhbHVlOworICAgIHJldHVybiB0aGlzOworICB9CisKKyAgcHVibGljIGZpbmFsIEFyZ3VtZW50c0J1aWxkZXIgc2V0Q29uZmlndXJhdGlvbkZpbGUgKEZpbGUgdmFsdWUpIHsKKyAgICByZXR1cm4gc2V0Q29uZmlndXJhdGlvbkZpbGUodmFsdWUuZ2V0QWJzb2x1dGVQYXRoKCkpOworICB9CisKKyAgcHVibGljIGZpbmFsIFN0cmluZyBnZXRQcmVmZXJlbmNlc0ZpbGUgKCkgeworICAgIHJldHVybiAgcHJlZmVyZW5jZXNGaWxlOworICB9CisKKyAgcHVibGljIGZpbmFsIEFyZ3VtZW50c0J1aWxkZXIgc2V0UHJlZmVyZW5jZXNGaWxlIChTdHJpbmcgdmFsdWUpIHsKKyAgICBwcmVmZXJlbmNlc0ZpbGUgPSB2YWx1ZTsKKyAgICByZXR1cm4gdGhpczsKKyAgfQorCisgIHB1YmxpYyBmaW5hbCBBcmd1bWVudHNCdWlsZGVyIHNldFByZWZlcmVuY2VzRmlsZSAoRmlsZSB2YWx1ZSkgeworICAgIHJldHVybiBzZXRQcmVmZXJlbmNlc0ZpbGUodmFsdWUuZ2V0QWJzb2x1dGVQYXRoKCkpOworICB9CisKKyAgcHVibGljIGZpbmFsIFN0cmluZyBnZXRMb2NhbGVEaXJlY3RvcnkgKCkgeworICAgIHJldHVybiAgbG9jYWxlRGlyZWN0b3J5OworICB9CisKKyAgcHVibGljIGZpbmFsIEFyZ3VtZW50c0J1aWxkZXIgc2V0TG9jYWxlRGlyZWN0b3J5IChTdHJpbmcgdmFsdWUpIHsKKyAgICBsb2NhbGVEaXJlY3RvcnkgPSB2YWx1ZTsKKyAgICByZXR1cm4gdGhpczsKKyAgfQorCisgIHB1YmxpYyBmaW5hbCBBcmd1bWVudHNCdWlsZGVyIHNldExvY2FsZURpcmVjdG9yeSAoRmlsZSB2YWx1ZSkgeworICAgIHJldHVybiBzZXRMb2NhbGVEaXJlY3RvcnkodmFsdWUuZ2V0QWJzb2x1dGVQYXRoKCkpOworICB9CisKKyAgcHVibGljIGZpbmFsIFN0cmluZyBnZXREcml2ZXJzRGlyZWN0b3J5ICgpIHsKKyAgICByZXR1cm4gIGRyaXZlcnNEaXJlY3Rvcnk7CisgIH0KKworICBwdWJsaWMgZmluYWwgQXJndW1lbnRzQnVpbGRlciBzZXREcml2ZXJzRGlyZWN0b3J5IChTdHJpbmcgdmFsdWUpIHsKKyAgICBkcml2ZXJzRGlyZWN0b3J5ID0gdmFsdWU7CisgICAgcmV0dXJuIHRoaXM7CisgIH0KKworICBwdWJsaWMgZmluYWwgQXJndW1lbnRzQnVpbGRlciBzZXREcml2ZXJzRGlyZWN0b3J5IChGaWxlIHZhbHVlKSB7CisgICAgcmV0dXJuIHNldERyaXZlcnNEaXJlY3RvcnkodmFsdWUuZ2V0QWJzb2x1dGVQYXRoKCkpOworICB9CisKKyAgcHVibGljIGZpbmFsIFN0cmluZyBnZXRXcml0YWJsZURpcmVjdG9yeSAoKSB7CisgICAgcmV0dXJuICB3cml0YWJsZURpcmVjdG9yeTsKKyAgfQorCisgIHB1YmxpYyBmaW5hbCBBcmd1bWVudHNCdWlsZGVyIHNldFdyaXRhYmxlRGlyZWN0b3J5IChTdHJpbmcgdmFsdWUpIHsKKyAgICB3cml0YWJsZURpcmVjdG9yeSA9IHZhbHVlOworICAgIHJldHVybiB0aGlzOworICB9CisKKyAgcHVibGljIGZpbmFsIEFyZ3VtZW50c0J1aWxkZXIgc2V0V3JpdGFibGVEaXJlY3RvcnkgKEZpbGUgdmFsdWUpIHsKKyAgICByZXR1cm4gc2V0V3JpdGFibGVEaXJlY3RvcnkodmFsdWUuZ2V0QWJzb2x1dGVQYXRoKCkpOworICB9CisKKyAgcHVibGljIGZpbmFsIFN0cmluZyBnZXRVcGRhdGFibGVEaXJlY3RvcnkgKCkgeworICAgIHJldHVybiAgdXBkYXRhYmxlRGlyZWN0b3J5OworICB9CisKKyAgcHVibGljIGZpbmFsIEFyZ3VtZW50c0J1aWxkZXIgc2V0VXBkYXRhYmxlRGlyZWN0b3J5IChTdHJpbmcgdmFsdWUpIHsKKyAgICB1cGRhdGFibGVEaXJlY3RvcnkgPSB2YWx1ZTsKKyAgICByZXR1cm4gdGhpczsKKyAgfQorCisgIHB1YmxpYyBmaW5hbCBBcmd1bWVudHNCdWlsZGVyIHNldFVwZGF0YWJsZURpcmVjdG9yeSAoRmlsZSB2YWx1ZSkgeworICAgIHJldHVybiBzZXRVcGRhdGFibGVEaXJlY3RvcnkodmFsdWUuZ2V0QWJzb2x1dGVQYXRoKCkpOworICB9CisKKyAgcHVibGljIGZpbmFsIFN0cmluZyBnZXRUYWJsZXNEaXJlY3RvcnkgKCkgeworICAgIHJldHVybiAgdGFibGVzRGlyZWN0b3J5OworICB9CisKKyAgcHVibGljIGZpbmFsIEFyZ3VtZW50c0J1aWxkZXIgc2V0VGFibGVzRGlyZWN0b3J5IChTdHJpbmcgdmFsdWUpIHsKKyAgICB0YWJsZXNEaXJlY3RvcnkgPSB2YWx1ZTsKKyAgICByZXR1cm4gdGhpczsKKyAgfQorCisgIHB1YmxpYyBmaW5hbCBBcmd1bWVudHNCdWlsZGVyIHNldFRhYmxlc0RpcmVjdG9yeSAoRmlsZSB2YWx1ZSkgeworICAgIHJldHVybiBzZXRUYWJsZXNEaXJlY3RvcnkodmFsdWUuZ2V0QWJzb2x1dGVQYXRoKCkpOworICB9CisKKyAgcHVibGljIGZpbmFsIFN0cmluZyBnZXRUZXh0VGFibGUgKCkgeworICAgIHJldHVybiAgdGV4dFRhYmxlOworICB9CisKKyAgcHVibGljIGZpbmFsIEFyZ3VtZW50c0J1aWxkZXIgc2V0VGV4dFRhYmxlIChTdHJpbmcgdmFsdWUpIHsKKyAgICB0ZXh0VGFibGUgPSB2YWx1ZTsKKyAgICByZXR1cm4gdGhpczsKKyAgfQorCisgIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0QXR0cmlidXRlc1RhYmxlICgpIHsKKyAgICByZXR1cm4gIGF0dHJpYnV0ZXNUYWJsZTsKKyAgfQorCisgIHB1YmxpYyBmaW5hbCBBcmd1bWVudHNCdWlsZGVyIHNldEF0dHJpYnV0ZXNUYWJsZSAoU3RyaW5nIHZhbHVlKSB7CisgICAgYXR0cmlidXRlc1RhYmxlID0gdmFsdWU7CisgICAgcmV0dXJuIHRoaXM7CisgIH0KKworICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldENvbnRyYWN0aW9uVGFibGUgKCkgeworICAgIHJldHVybiAgY29udHJhY3Rpb25UYWJsZTsKKyAgfQorCisgIHB1YmxpYyBmaW5hbCBBcmd1bWVudHNCdWlsZGVyIHNldENvbnRyYWN0aW9uVGFibGUgKFN0cmluZyB2YWx1ZSkgeworICAgIGNvbnRyYWN0aW9uVGFibGUgPSB2YWx1ZTsKKyAgICByZXR1cm4gdGhpczsKKyAgfQorCisgIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0S2V5Ym9hcmRUYWJsZSAoKSB7CisgICAgcmV0dXJuICBrZXlib2FyZFRhYmxlOworICB9CisKKyAgcHVibGljIGZpbmFsIEFyZ3VtZW50c0J1aWxkZXIgc2V0S2V5Ym9hcmRUYWJsZSAoU3RyaW5nIHZhbHVlKSB7CisgICAga2V5Ym9hcmRUYWJsZSA9IHZhbHVlOworICAgIHJldHVybiB0aGlzOworICB9CisKKyAgcHVibGljIGZpbmFsIFN0cmluZyBnZXRCcmFpbGxlRHJpdmVyICgpIHsKKyAgICByZXR1cm4gIGJyYWlsbGVEcml2ZXI7CisgIH0KKworICBwdWJsaWMgZmluYWwgQXJndW1lbnRzQnVpbGRlciBzZXRCcmFpbGxlRHJpdmVyIChTdHJpbmcgdmFsdWUpIHsKKyAgICBicmFpbGxlRHJpdmVyID0gdmFsdWU7CisgICAgcmV0dXJuIHRoaXM7CisgIH0KKworICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldEJyYWlsbGVEZXZpY2UgKCkgeworICAgIHJldHVybiAgYnJhaWxsZURldmljZTsKKyAgfQorCisgIHB1YmxpYyBmaW5hbCBBcmd1bWVudHNCdWlsZGVyIHNldEJyYWlsbGVEZXZpY2UgKFN0cmluZyB2YWx1ZSkgeworICAgIGJyYWlsbGVEZXZpY2UgPSB2YWx1ZTsKKyAgICByZXR1cm4gdGhpczsKKyAgfQorCisgIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0U3BlZWNoRHJpdmVyICgpIHsKKyAgICByZXR1cm4gIHNwZWVjaERyaXZlcjsKKyAgfQorCisgIHB1YmxpYyBmaW5hbCBBcmd1bWVudHNCdWlsZGVyIHNldFNwZWVjaERyaXZlciAoU3RyaW5nIHZhbHVlKSB7CisgICAgc3BlZWNoRHJpdmVyID0gdmFsdWU7CisgICAgcmV0dXJuIHRoaXM7CisgIH0KKworICBwdWJsaWMgZmluYWwgYm9vbGVhbiBnZXRRdWlldElmTm9CcmFpbGxlICgpIHsKKyAgICByZXR1cm4gIHF1aWV0SWZOb0JyYWlsbGU7CisgIH0KKworICBwdWJsaWMgZmluYWwgQXJndW1lbnRzQnVpbGRlciBzZXRRdWlldElmTm9CcmFpbGxlIChib29sZWFuIHZhbHVlKSB7CisgICAgcXVpZXRJZk5vQnJhaWxsZSA9IHZhbHVlOworICAgIHJldHVybiB0aGlzOworICB9CisKKyAgcHVibGljIGZpbmFsIGJvb2xlYW4gZ2V0QXBpRW5hYmxlZCAoKSB7CisgICAgcmV0dXJuICBhcGlFbmFibGVkOworICB9CisKKyAgcHVibGljIGZpbmFsIEFyZ3VtZW50c0J1aWxkZXIgc2V0QXBpRW5hYmxlZCAoYm9vbGVhbiB2YWx1ZSkgeworICAgIGFwaUVuYWJsZWQgPSB2YWx1ZTsKKyAgICByZXR1cm4gdGhpczsKKyAgfQorCisgIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0QXBpUGFyYW1ldGVycyAoKSB7CisgICAgcmV0dXJuIGFwaVBhcmFtZXRlcnM7CisgIH0KKworICBwdWJsaWMgZmluYWwgQXJndW1lbnRzQnVpbGRlciBzZXRBcGlQYXJhbWV0ZXJzIChTdHJpbmcgdmFsdWUpIHsKKyAgICBhcGlQYXJhbWV0ZXJzID0gdmFsdWU7CisgICAgcmV0dXJuIHRoaXM7CisgIH0KKworICBwcm90ZWN0ZWQgdm9pZCBhZGRPcHRpb24gKExpc3Q8U3RyaW5nPiBhcmd1bWVudHMsIFN0cmluZyBvcHRpb24sIFN0cmluZyB2YWx1ZSkgeworICAgIGlmICh2YWx1ZSAhPSBudWxsKSB7CisgICAgICBpZiAodmFsdWUubGVuZ3RoKCkgPiAwKSB7CisgICAgICAgIGFyZ3VtZW50cy5hZGQob3B0aW9uKTsKKyAgICAgICAgYXJndW1lbnRzLmFkZCh2YWx1ZSk7CisgICAgICB9CisgICAgfQorICB9CisKKyAgcHJvdGVjdGVkIHZvaWQgYWRkT3B0aW9uIChMaXN0PFN0cmluZz4gYXJndW1lbnRzLCBTdHJpbmcgb3B0aW9uLCBFbnVtIHZhbHVlKSB7CisgICAgaWYgKHZhbHVlICE9IG51bGwpIHsKKyAgICAgIGFkZE9wdGlvbihhcmd1bWVudHMsIG9wdGlvbiwgdmFsdWUubmFtZSgpKTsKKyAgICB9CisgIH0KKworICBwcm90ZWN0ZWQgdm9pZCBhZGRPcHRpb24gKExpc3Q8U3RyaW5nPiBhcmd1bWVudHMsIFN0cmluZyBvcHRpb24sIGJvb2xlYW4gdmFsdWUpIHsKKyAgICBpZiAodmFsdWUpIHsKKyAgICAgIGFyZ3VtZW50cy5hZGQob3B0aW9uKTsKKyAgICB9CisgIH0KKworICBwdWJsaWMgU3RyaW5nW10gZ2V0QXJndW1lbnRzICgpIHsKKyAgICBMaXN0PFN0cmluZz4gYXJndW1lbnRzID0gbmV3IEFycmF5TGlzdDxTdHJpbmc+KCk7CisgICAgYWRkT3B0aW9uKGFyZ3VtZW50cywgIi1uIiwgZm9yZWdyb3VuZEV4ZWN1dGlvbik7CisKKyAgICBhZGRPcHRpb24oYXJndW1lbnRzLCAiLWwiLCBsb2dMZXZlbCk7CisgICAgYWRkT3B0aW9uKGFyZ3VtZW50cywgIi1MIiwgbG9nRmlsZSk7CisKKyAgICBhZGRPcHRpb24oYXJndW1lbnRzLCAiLWYiLCBjb25maWd1cmF0aW9uRmlsZSk7CisgICAgYWRkT3B0aW9uKGFyZ3VtZW50cywgIi1GIiwgcHJlZmVyZW5jZXNGaWxlKTsKKworICAgIGFkZE9wdGlvbihhcmd1bWVudHMsICItLWxvY2FsZS1kaXJlY3RvcnkiLCBsb2NhbGVEaXJlY3RvcnkpOworICAgIGFkZE9wdGlvbihhcmd1bWVudHMsICItRCIsIGRyaXZlcnNEaXJlY3RvcnkpOworICAgIGFkZE9wdGlvbihhcmd1bWVudHMsICItVyIsIHdyaXRhYmxlRGlyZWN0b3J5KTsKKyAgICBhZGRPcHRpb24oYXJndW1lbnRzLCAiLVUiLCB1cGRhdGFibGVEaXJlY3RvcnkpOworCisgICAgYWRkT3B0aW9uKGFyZ3VtZW50cywgIi1UIiwgdGFibGVzRGlyZWN0b3J5KTsKKyAgICBhZGRPcHRpb24oYXJndW1lbnRzLCAiLXQiLCB0ZXh0VGFibGUpOworICAgIGFkZE9wdGlvbihhcmd1bWVudHMsICItYSIsIGF0dHJpYnV0ZXNUYWJsZSk7CisgICAgYWRkT3B0aW9uKGFyZ3VtZW50cywgIi1jIiwgY29udHJhY3Rpb25UYWJsZSk7CisgICAgYWRkT3B0aW9uKGFyZ3VtZW50cywgIi1rIiwga2V5Ym9hcmRUYWJsZSk7CisKKyAgICBhZGRPcHRpb24oYXJndW1lbnRzLCAiLWIiLCBicmFpbGxlRHJpdmVyKTsKKyAgICBhZGRPcHRpb24oYXJndW1lbnRzLCAiLWQiLCBicmFpbGxlRGV2aWNlKTsKKyAgICBhZGRPcHRpb24oYXJndW1lbnRzLCAiLXIiLCByZWxlYXNlRGV2aWNlKTsKKworICAgIGFkZE9wdGlvbihhcmd1bWVudHMsICItcyIsIHNwZWVjaERyaXZlcik7CisgICAgYWRkT3B0aW9uKGFyZ3VtZW50cywgIi1RIiwgcXVpZXRJZk5vQnJhaWxsZSk7CisKKyAgICBhZGRPcHRpb24oYXJndW1lbnRzLCAiLU4iLCAhYXBpRW5hYmxlZCk7CisgICAgYWRkT3B0aW9uKGFyZ3VtZW50cywgIi1BIiwgYXBpUGFyYW1ldGVycyk7CisKKyAgICByZXR1cm4gYXJndW1lbnRzLnRvQXJyYXkobmV3IFN0cmluZ1thcmd1bWVudHMuc2l6ZSgpXSk7CisgIH0KK30KZGlmZiAtLWdpdCBhL0FuZHJvaWQvR3JhZGxlL2NvcmUvc3JjL21haW4vamF2YS9vcmcvYTExeS9icmx0dHkvY29yZS9CcmFpbGxlLmphdmEgYi9BbmRyb2lkL0dyYWRsZS9jb3JlL3NyYy9tYWluL2phdmEvb3JnL2ExMXkvYnJsdHR5L2NvcmUvQnJhaWxsZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE2NmUxNjIKLS0tIC9kZXYvbnVsbAorKysgYi9BbmRyb2lkL0dyYWRsZS9jb3JlL3NyYy9tYWluL2phdmEvb3JnL2ExMXkvYnJsdHR5L2NvcmUvQnJhaWxsZS5qYXZhCkBAIC0wLDAgKzEsODQgQEAKKy8qCisgKiBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorICogICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorICoKKyAqIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorICoKKyAqIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyAqLworCitwYWNrYWdlIG9yZy5hMTF5LmJybHR0eS5jb3JlOworCitwdWJsaWMgYWJzdHJhY3QgY2xhc3MgQnJhaWxsZSB7CisgIHByaXZhdGUgQnJhaWxsZSAoKSB7CisgIH0KKworICBwdWJsaWMgZmluYWwgc3RhdGljIGNoYXIgUk9XICA9IDB4MjgwMDsKKyAgcHVibGljIGZpbmFsIHN0YXRpYyBjaGFyIERPVDEgPSAweDAwMDE7CisgIHB1YmxpYyBmaW5hbCBzdGF0aWMgY2hhciBET1QyID0gMHgwMDAyOworICBwdWJsaWMgZmluYWwgc3RhdGljIGNoYXIgRE9UMyA9IDB4MDAwNDsKKyAgcHVibGljIGZpbmFsIHN0YXRpYyBjaGFyIERPVDQgPSAweDAwMDg7CisgIHB1YmxpYyBmaW5hbCBzdGF0aWMgY2hhciBET1Q1ID0gMHgwMDEwOworICBwdWJsaWMgZmluYWwgc3RhdGljIGNoYXIgRE9UNiA9IDB4MDAyMDsKKyAgcHVibGljIGZpbmFsIHN0YXRpYyBjaGFyIERPVDcgPSAweDAwNDA7CisgIHB1YmxpYyBmaW5hbCBzdGF0aWMgY2hhciBET1Q4ID0gMHgwMDgwOworCisgIHB1YmxpYyBmaW5hbCBzdGF0aWMgY2hhciBET1RTX0xFRlQgID0gRE9UMSB8IERPVDIgfCBET1QzIHwgRE9UNzsKKyAgcHVibGljIGZpbmFsIHN0YXRpYyBjaGFyIERPVFNfUklHSFQgPSBET1Q0IHwgRE9UNSB8IERPVDYgfCBET1Q4OworICBwdWJsaWMgZmluYWwgc3RhdGljIGNoYXIgRE9UU19BTEwgICA9IERPVFNfTEVGVCB8IERPVFNfUklHSFQ7CisKKyAgcHVibGljIGZpbmFsIHN0YXRpYyBjaGFyIERPVFNfVVBQRVIgID0gRE9UMSB8IERPVDQ7CisgIHB1YmxpYyBmaW5hbCBzdGF0aWMgY2hhciBET1RTX01JRERMRSA9IERPVDIgfCBET1Q1OworICBwdWJsaWMgZmluYWwgc3RhdGljIGNoYXIgRE9UU19MT1dFUiAgPSBET1QzIHwgRE9UNjsKKyAgcHVibGljIGZpbmFsIHN0YXRpYyBjaGFyIERPVFNfQkVMT1cgID0gRE9UNyB8IERPVDg7CisKKyAgcHVibGljIGZpbmFsIHN0YXRpYyBjaGFyIERPVFNfTElURVJBUlkgPSBET1RTX1VQUEVSIHwgRE9UU19NSURETEUgfCBET1RTX0xPV0VSOworICBwdWJsaWMgZmluYWwgc3RhdGljIGNoYXIgRE9UU19DT01QVVRFUiA9IERPVFNfTElURVJBUlkgfCBET1RTX0JFTE9XOworCisgIHB1YmxpYyBmaW5hbCBzdGF0aWMgY2hhciBET1RTX0EgPSBET1QxOworICBwdWJsaWMgZmluYWwgc3RhdGljIGNoYXIgRE9UU19CID0gRE9UMSB8IERPVDI7CisgIHB1YmxpYyBmaW5hbCBzdGF0aWMgY2hhciBET1RTX0MgPSBET1QxIHwgRE9UNDsKKyAgcHVibGljIGZpbmFsIHN0YXRpYyBjaGFyIERPVFNfRCA9IERPVDEgfCBET1Q0IHwgRE9UNTsKKyAgcHVibGljIGZpbmFsIHN0YXRpYyBjaGFyIERPVFNfRSA9IERPVDEgfCBET1Q1OworICBwdWJsaWMgZmluYWwgc3RhdGljIGNoYXIgRE9UU19GID0gRE9UMSB8IERPVDIgfCBET1Q0OworICBwdWJsaWMgZmluYWwgc3RhdGljIGNoYXIgRE9UU19HID0gRE9UMSB8IERPVDIgfCBET1Q0IHwgRE9UNTsKKyAgcHVibGljIGZpbmFsIHN0YXRpYyBjaGFyIERPVFNfSCA9IERPVDEgfCBET1QyIHwgRE9UNTsKKyAgcHVibGljIGZpbmFsIHN0YXRpYyBjaGFyIERPVFNfSSA9IERPVDIgfCBET1Q0OworICBwdWJsaWMgZmluYWwgc3RhdGljIGNoYXIgRE9UU19KID0gRE9UMiB8IERPVDQgfCBET1Q1OworICBwdWJsaWMgZmluYWwgc3RhdGljIGNoYXIgRE9UU19LID0gRE9UMSB8IERPVDM7CisgIHB1YmxpYyBmaW5hbCBzdGF0aWMgY2hhciBET1RTX0wgPSBET1QxIHwgRE9UMiB8IERPVDM7CisgIHB1YmxpYyBmaW5hbCBzdGF0aWMgY2hhciBET1RTX00gPSBET1QxIHwgRE9UMyB8IERPVDQ7CisgIHB1YmxpYyBmaW5hbCBzdGF0aWMgY2hhciBET1RTX04gPSBET1QxIHwgRE9UMyB8IERPVDQgfCBET1Q1OworICBwdWJsaWMgZmluYWwgc3RhdGljIGNoYXIgRE9UU19PID0gRE9UMSB8IERPVDMgfCBET1Q1OworICBwdWJsaWMgZmluYWwgc3RhdGljIGNoYXIgRE9UU19QID0gRE9UMSB8IERPVDIgfCBET1QzIHwgRE9UNDsKKyAgcHVibGljIGZpbmFsIHN0YXRpYyBjaGFyIERPVFNfUSA9IERPVDEgfCBET1QyIHwgRE9UMyB8IERPVDQgfCBET1Q1OworICBwdWJsaWMgZmluYWwgc3RhdGljIGNoYXIgRE9UU19SID0gRE9UMSB8IERPVDIgfCBET1QzIHwgRE9UNTsKKyAgcHVibGljIGZpbmFsIHN0YXRpYyBjaGFyIERPVFNfUyA9IERPVDIgfCBET1QzIHwgRE9UNDsKKyAgcHVibGljIGZpbmFsIHN0YXRpYyBjaGFyIERPVFNfVCA9IERPVDIgfCBET1QzIHwgRE9UNCB8IERPVDU7CisgIHB1YmxpYyBmaW5hbCBzdGF0aWMgY2hhciBET1RTX1UgPSBET1QxIHwgRE9UMyB8IERPVDY7CisgIHB1YmxpYyBmaW5hbCBzdGF0aWMgY2hhciBET1RTX1YgPSBET1QxIHwgRE9UMiB8IERPVDMgfCBET1Q2OworICBwdWJsaWMgZmluYWwgc3RhdGljIGNoYXIgRE9UU19XID0gRE9UMiB8IERPVDQgfCBET1Q1IHwgRE9UNjsKKyAgcHVibGljIGZpbmFsIHN0YXRpYyBjaGFyIERPVFNfWCA9IERPVDEgfCBET1QzIHwgRE9UNCB8IERPVDY7CisgIHB1YmxpYyBmaW5hbCBzdGF0aWMgY2hhciBET1RTX1kgPSBET1QxIHwgRE9UMyB8IERPVDQgfCBET1Q1IHwgRE9UNjsKKyAgcHVibGljIGZpbmFsIHN0YXRpYyBjaGFyIERPVFNfWiA9IERPVDEgfCBET1QzIHwgRE9UNSB8IERPVDY7CisKKyAgcHVibGljIGZpbmFsIHN0YXRpYyBjaGFyIERPVFNfMCA9IERPVDMgfCBET1Q1IHwgRE9UNjsKKyAgcHVibGljIGZpbmFsIHN0YXRpYyBjaGFyIERPVFNfMSA9IERPVDI7CisgIHB1YmxpYyBmaW5hbCBzdGF0aWMgY2hhciBET1RTXzIgPSBET1QyIHwgRE9UMzsKKyAgcHVibGljIGZpbmFsIHN0YXRpYyBjaGFyIERPVFNfMyA9IERPVDIgfCBET1Q1OworICBwdWJsaWMgZmluYWwgc3RhdGljIGNoYXIgRE9UU180ID0gRE9UMiB8IERPVDUgfCBET1Q2OworICBwdWJsaWMgZmluYWwgc3RhdGljIGNoYXIgRE9UU181ID0gRE9UMiB8IERPVDY7CisgIHB1YmxpYyBmaW5hbCBzdGF0aWMgY2hhciBET1RTXzYgPSBET1QyIHwgRE9UMyB8IERPVDU7CisgIHB1YmxpYyBmaW5hbCBzdGF0aWMgY2hhciBET1RTXzcgPSBET1QyIHwgRE9UMyB8IERPVDUgfCBET1Q2OworICBwdWJsaWMgZmluYWwgc3RhdGljIGNoYXIgRE9UU184ID0gRE9UMiB8IERPVDMgfCBET1Q2OworICBwdWJsaWMgZmluYWwgc3RhdGljIGNoYXIgRE9UU185ID0gRE9UMyB8IERPVDU7Cit9CmRpZmYgLS1naXQgYS9BbmRyb2lkL0dyYWRsZS9jb3JlL3NyYy9tYWluL2phdmEvb3JnL2ExMXkvYnJsdHR5L2NvcmUvQ29yZVdyYXBwZXIuamF2YSBiL0FuZHJvaWQvR3JhZGxlL2NvcmUvc3JjL21haW4vamF2YS9vcmcvYTExeS9icmx0dHkvY29yZS9Db3JlV3JhcHBlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE3MzJlOWUKLS0tIC9kZXYvbnVsbAorKysgYi9BbmRyb2lkL0dyYWRsZS9jb3JlL3NyYy9tYWluL2phdmEvb3JnL2ExMXkvYnJsdHR5L2NvcmUvQ29yZVdyYXBwZXIuamF2YQpAQCAtMCwwICsxLDEzOCBAQAorLyoKKyAqIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisgKiAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisgKgorICogQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKK3BhY2thZ2Ugb3JnLmExMXkuYnJsdHR5LmNvcmU7CisKK2ltcG9ydCBqYXZhLnV0aWwuQWJzdHJhY3RRdWV1ZTsKK2ltcG9ydCBqYXZhLnV0aWwuU2V0OworaW1wb3J0IGphdmEudXRpbC5jb25jdXJyZW50LkxpbmtlZEJsb2NraW5nRGVxdWU7CisKK3B1YmxpYyBhYnN0cmFjdCBjbGFzcyBDb3JlV3JhcHBlciB7CisgIHByaXZhdGUgQ29yZVdyYXBwZXIgKCkgeworICB9CisKKyAgc3RhdGljIHsKKyAgICBTeXN0ZW0ubG9hZExpYnJhcnkoImJybHR0eV9jb3JlIik7CisgICAgU3lzdGVtLmxvYWRMaWJyYXJ5KCJicmx0dHlfam5pIik7CisgIH0KKworICBwdWJsaWMgbmF0aXZlIHN0YXRpYyBpbnQgY29yZUNvbnN0cnVjdCAoU3RyaW5nW10gYXJndW1lbnRzLCBDbGFzc0xvYWRlciBjbGFzc0xvYWRlcik7CisgIHB1YmxpYyBuYXRpdmUgc3RhdGljIGJvb2xlYW4gY29yZURlc3RydWN0ICgpOworCisgIHB1YmxpYyBuYXRpdmUgc3RhdGljIGJvb2xlYW4gY29yZUVuYWJsZUludGVycnVwdCAoKTsKKyAgcHVibGljIG5hdGl2ZSBzdGF0aWMgYm9vbGVhbiBjb3JlRGlzYWJsZUludGVycnVwdCAoKTsKKworICBwdWJsaWMgbmF0aXZlIHN0YXRpYyBib29sZWFuIGNvcmVJbnRlcnJ1cHQgKGJvb2xlYW4gc3RvcCk7CisgIHB1YmxpYyBuYXRpdmUgc3RhdGljIGJvb2xlYW4gY29yZVdhaXQgKGludCBkdXJhdGlvbik7CisKKyAgcHVibGljIG5hdGl2ZSBzdGF0aWMgYm9vbGVhbiBjaGFuZ2VMb2dMZXZlbCAoU3RyaW5nIGxldmVsKTsKKyAgcHVibGljIG5hdGl2ZSBzdGF0aWMgYm9vbGVhbiBjaGFuZ2VMb2dDYXRlZ29yaWVzIChTdHJpbmcgY2F0ZWdvcmllcyk7CisKKyAgcHVibGljIG5hdGl2ZSBzdGF0aWMgYm9vbGVhbiBjaGFuZ2VUZXh0VGFibGUgKFN0cmluZyBuYW1lKTsKKyAgcHVibGljIG5hdGl2ZSBzdGF0aWMgYm9vbGVhbiBjaGFuZ2VBdHRyaWJ1dGVzVGFibGUgKFN0cmluZyBuYW1lKTsKKyAgcHVibGljIG5hdGl2ZSBzdGF0aWMgYm9vbGVhbiBjaGFuZ2VDb250cmFjdGlvblRhYmxlIChTdHJpbmcgbmFtZSk7CisgIHB1YmxpYyBuYXRpdmUgc3RhdGljIGJvb2xlYW4gY2hhbmdlS2V5Ym9hcmRUYWJsZSAoU3RyaW5nIG5hbWUpOworCisgIHB1YmxpYyBuYXRpdmUgc3RhdGljIGJvb2xlYW4gcmVzdGFydEJyYWlsbGVEcml2ZXIgKCk7CisgIHB1YmxpYyBuYXRpdmUgc3RhdGljIGJvb2xlYW4gY2hhbmdlQnJhaWxsZURyaXZlciAoU3RyaW5nIGRyaXZlcik7CisgIHB1YmxpYyBuYXRpdmUgc3RhdGljIGJvb2xlYW4gY2hhbmdlQnJhaWxsZVBhcmFtZXRlcnMgKFN0cmluZyBwYXJhbWV0ZXJzKTsKKyAgcHVibGljIG5hdGl2ZSBzdGF0aWMgYm9vbGVhbiBjaGFuZ2VCcmFpbGxlRGV2aWNlIChTdHJpbmcgZGV2aWNlKTsKKworICBwdWJsaWMgbmF0aXZlIHN0YXRpYyBib29sZWFuIHJlc3RhcnRTcGVlY2hEcml2ZXIgKCk7CisgIHB1YmxpYyBuYXRpdmUgc3RhdGljIGJvb2xlYW4gY2hhbmdlU3BlZWNoRHJpdmVyIChTdHJpbmcgZHJpdmVyKTsKKyAgcHVibGljIG5hdGl2ZSBzdGF0aWMgYm9vbGVhbiBjaGFuZ2VTcGVlY2hQYXJhbWV0ZXJzIChTdHJpbmcgcGFyYW1ldGVycyk7CisKKyAgcHVibGljIG5hdGl2ZSBzdGF0aWMgYm9vbGVhbiByZXN0YXJ0U2NyZWVuRHJpdmVyICgpOworICBwdWJsaWMgbmF0aXZlIHN0YXRpYyBib29sZWFuIGNoYW5nZVNjcmVlbkRyaXZlciAoU3RyaW5nIGRyaXZlcik7CisgIHB1YmxpYyBuYXRpdmUgc3RhdGljIGJvb2xlYW4gY2hhbmdlU2NyZWVuUGFyYW1ldGVycyAoU3RyaW5nIHBhcmFtZXRlcnMpOworCisgIHB1YmxpYyBuYXRpdmUgc3RhdGljIGJvb2xlYW4gY2hhbmdlTWVzc2FnZUxvY2FsZSAoU3RyaW5nIGxvY2FsZSk7CisgIHB1YmxpYyBuYXRpdmUgc3RhdGljIHZvaWQgc2hvd01lc3NhZ2UgKFN0cmluZyB0ZXh0KTsKKworICBwdWJsaWMgbmF0aXZlIHN0YXRpYyBib29sZWFuIHNldEVudmlyb25tZW50VmFyaWFibGUgKFN0cmluZyBuYW1lLCBTdHJpbmcgdmFsdWUpOworCisgIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBjaGFuZ2VMb2dDYXRlZ29yaWVzIChTZXQ8U3RyaW5nPiBjYXRlZ29yaWVzKSB7CisgICAgU3RyaW5nQnVpbGRlciBzYiA9IG5ldyBTdHJpbmdCdWlsZGVyKCk7CisKKyAgICBmb3IgKFN0cmluZyBjYXRlZ29yeSA6IGNhdGVnb3JpZXMpIHsKKyAgICAgIGlmIChzYi5sZW5ndGgoKSA+IDApIHNiLmFwcGVuZCgnLCcpOworICAgICAgc2IuYXBwZW5kKGNhdGVnb3J5KTsKKyAgICB9CisKKyAgICByZXR1cm4gY2hhbmdlTG9nQ2F0ZWdvcmllcyhzYi50b1N0cmluZygpKTsKKyAgfQorCisgIHByaXZhdGUgc3RhdGljIFRocmVhZCBjb3JlVGhyZWFkID0gbnVsbDsKKyAgcHJpdmF0ZSBmaW5hbCBzdGF0aWMgQWJzdHJhY3RRdWV1ZTxSdW5uYWJsZT4gcnVuUXVldWUgPSBuZXcgTGlua2VkQmxvY2tpbmdEZXF1ZTxSdW5uYWJsZT4oKTsKKworICBwdWJsaWMgc3RhdGljIHZvaWQgY2xlYXJSdW5RdWV1ZSAoKSB7CisgICAgcnVuUXVldWUuY2xlYXIoKTsKKyAgfQorCisgIHB1YmxpYyBzdGF0aWMgdm9pZCBwcm9jZXNzUnVuUXVldWUgKCkgeworICAgIFJ1bm5hYmxlIHJ1bm5hYmxlOworICAgIHdoaWxlICgocnVubmFibGUgPSBydW5RdWV1ZS5wb2xsKCkpICE9IG51bGwpIHJ1bm5hYmxlLnJ1bigpOworICB9CisKKyAgcHVibGljIHN0YXRpYyBib29sZWFuIHJ1bk9uQ29yZVRocmVhZCAoUnVubmFibGUgcnVubmFibGUpIHsKKyAgICBpZiAoVGhyZWFkLmN1cnJlbnRUaHJlYWQoKSA9PSBjb3JlVGhyZWFkKSB7CisgICAgICBydW5uYWJsZS5ydW4oKTsKKyAgICB9IGVsc2UgeworICAgICAgaWYgKCFydW5RdWV1ZS5vZmZlcihydW5uYWJsZSkpIHJldHVybiBmYWxzZTsKKyAgICAgIGNvcmVJbnRlcnJ1cHQoZmFsc2UpOworICAgIH0KKworICAgIHJldHVybiB0cnVlOworICB9CisKKyAgcHVibGljIHN0YXRpYyB2b2lkIHN0b3AgKCkgeworICAgIGNvcmVJbnRlcnJ1cHQodHJ1ZSk7CisgIH0KKworICBwdWJsaWMgc3RhdGljIGludCBydW4gKFN0cmluZ1tdIGFyZ3VtZW50cywgaW50IHdhaXREdXJhdGlvbikgeworICAgIGNsZWFyUnVuUXVldWUoKTsKKyAgICBjb3JlVGhyZWFkID0gVGhyZWFkLmN1cnJlbnRUaHJlYWQoKTsKKworICAgIHRyeSB7CisgICAgICBpbnQgZXhpdFN0YXR1cyA9IGNvcmVDb25zdHJ1Y3QoYXJndW1lbnRzLCBDb3JlV3JhcHBlci5jbGFzcy5nZXRDbGFzc0xvYWRlcigpKTsKKworICAgICAgaWYgKGV4aXRTdGF0dXMgPT0gUHJvZ3JhbUV4aXRTdGF0dXMuU1VDQ0VTUy52YWx1ZSkgeworICAgICAgICBib29sZWFuIGludGVycnVwdEVuYWJsZWQgPSBjb3JlRW5hYmxlSW50ZXJydXB0KCk7CisKKyAgICAgICAgd2hpbGUgKGNvcmVXYWl0KHdhaXREdXJhdGlvbikpIHsKKyAgICAgICAgICBwcm9jZXNzUnVuUXVldWUoKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChpbnRlcnJ1cHRFbmFibGVkKSB7CisgICAgICAgICAgY29yZURpc2FibGVJbnRlcnJ1cHQoKTsKKyAgICAgICAgfQorICAgICAgfSBlbHNlIGlmIChleGl0U3RhdHVzID09IFByb2dyYW1FeGl0U3RhdHVzLkZPUkNFLnZhbHVlKSB7CisgICAgICAgIGV4aXRTdGF0dXMgPSBQcm9ncmFtRXhpdFN0YXR1cy5TVUNDRVNTLnZhbHVlOworICAgICAgfQorCisgICAgICBjb3JlRGVzdHJ1Y3QoKTsKKyAgICAgIHJldHVybiBleGl0U3RhdHVzOworICAgIH0gZmluYWxseSB7CisgICAgICBjb3JlVGhyZWFkID0gbnVsbDsKKyAgICB9CisgIH0KKworICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbiAoU3RyaW5nW10gYXJndW1lbnRzKSB7CisgICAgU3lzdGVtLmV4aXQocnVuKGFyZ3VtZW50cywgSW50ZWdlci5NQVhfVkFMVUUpKTsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvQW5kcm9pZC9HcmFkbGUvY29yZS9zcmMvbWFpbi9qYXZhL29yZy9hMTF5L2JybHR0eS9jb3JlL0xvZ0xldmVsLmphdmEgYi9BbmRyb2lkL0dyYWRsZS9jb3JlL3NyYy9tYWluL2phdmEvb3JnL2ExMXkvYnJsdHR5L2NvcmUvTG9nTGV2ZWwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMDJjYjBhCi0tLSAvZGV2L251bGwKKysrIGIvQW5kcm9pZC9HcmFkbGUvY29yZS9zcmMvbWFpbi9qYXZhL29yZy9hMTF5L2JybHR0eS9jb3JlL0xvZ0xldmVsLmphdmEKQEAgLTAsMCArMSwzNiBAQAorLyoKKyAqIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisgKiAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisgKgorICogQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKK3BhY2thZ2Ugb3JnLmExMXkuYnJsdHR5LmNvcmU7CisKK3B1YmxpYyBlbnVtIExvZ0xldmVsIHsKKyAgRU1FUkdFTkNZICAgKDApLAorICBBTEVSVCAgICAgICAoMSksCisgIENSSVRJQ0FMICAgICgyKSwKKyAgRVJST1IgICAgICAgKDMpLAorICBXQVJOSU5HICAgICAoNCksCisgIE5PVElDRSAgICAgICg1KSwKKyAgSU5GT1JNQVRJT04gKDYpLAorICBERUJVRyAgICAgICAoNyk7CisKKyAgcHVibGljIGZpbmFsIGludCB2YWx1ZTsKKworICBMb2dMZXZlbCAoaW50IHZhbHVlKSB7CisgICAgdGhpcy52YWx1ZSA9IHZhbHVlOworICB9Cit9CmRpZmYgLS1naXQgYS9BbmRyb2lkL0dyYWRsZS9jb3JlL3NyYy9tYWluL2phdmEvb3JnL2ExMXkvYnJsdHR5L2NvcmUvUHJvZ3JhbUV4aXRTdGF0dXMuamF2YSBiL0FuZHJvaWQvR3JhZGxlL2NvcmUvc3JjL21haW4vamF2YS9vcmcvYTExeS9icmx0dHkvY29yZS9Qcm9ncmFtRXhpdFN0YXR1cy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUyZGYyOGQKLS0tIC9kZXYvbnVsbAorKysgYi9BbmRyb2lkL0dyYWRsZS9jb3JlL3NyYy9tYWluL2phdmEvb3JnL2ExMXkvYnJsdHR5L2NvcmUvUHJvZ3JhbUV4aXRTdGF0dXMuamF2YQpAQCAtMCwwICsxLDMzIEBACisvKgorICogQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyAqICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyAqCisgKiBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorICoKKyAqIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyAqCisgKiBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisgKi8KKworcGFja2FnZSBvcmcuYTExeS5icmx0dHkuY29yZTsKKworcHVibGljIGVudW0gUHJvZ3JhbUV4aXRTdGF0dXMgeworICBTVUNDRVNTICAoMCksCisgIEZPUkNFICAgICgxKSwKKyAgU1lOVEFYICAgKDIpLAorICBTRU1BTlRJQyAoMyksCisgIEZBVEFMICAgICg0KTsKKworICBwdWJsaWMgZmluYWwgaW50IHZhbHVlOworCisgIFByb2dyYW1FeGl0U3RhdHVzIChpbnQgdmFsdWUpIHsKKyAgICB0aGlzLnZhbHVlID0gdmFsdWU7CisgIH0KK30KZGlmZiAtLWdpdCBhL0FuZHJvaWQvR3JhZGxlL2NvcmUvc3JjL21haW4vcmVzL3ZhbHVlcy9zdHJpbmdzLnhtbCBiL0FuZHJvaWQvR3JhZGxlL2NvcmUvc3JjL21haW4vcmVzL3ZhbHVlcy9zdHJpbmdzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYTBlYjU0Ci0tLSAvZGV2L251bGwKKysrIGIvQW5kcm9pZC9HcmFkbGUvY29yZS9zcmMvbWFpbi9yZXMvdmFsdWVzL3N0cmluZ3MueG1sCkBAIC0wLDAgKzEsNCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KKworPHJlc291cmNlcz4KKzwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvQW5kcm9pZC9HcmFkbGUvZ3JhZGxlLnByb3BlcnRpZXMgYi9BbmRyb2lkL0dyYWRsZS9ncmFkbGUucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YzY2ZTdiCi0tLSAvZGV2L251bGwKKysrIGIvQW5kcm9pZC9HcmFkbGUvZ3JhZGxlLnByb3BlcnRpZXMKQEAgLTAsMCArMSwyNCBAQAorIyBQcm9qZWN0LXdpZGUgR3JhZGxlIHNldHRpbmdzLgorCisjIEZvciBtb3JlIGRldGFpbHMgb24gaG93IHRvIGNvbmZpZ3VyZSB5b3VyIGJ1aWxkIGVudmlyb25tZW50IHZpc2l0CisjIGh0dHA6Ly93d3cuZ3JhZGxlLm9yZy9kb2NzL2N1cnJlbnQvdXNlcmd1aWRlL2J1aWxkX2Vudmlyb25tZW50Lmh0bWwKKworIyBTcGVjaWZpZXMgdGhlIEpWTSBhcmd1bWVudHMgdXNlZCBmb3IgdGhlIGRhZW1vbiBwcm9jZXNzLgorb3JnLmdyYWRsZS5qdm1hcmdzPS1YbXgyMDQ4bSAtRGZpbGUuZW5jb2Rpbmc9VVRGLTgKKworIyBXaGVuIGNvbmZpZ3VyZWQsIEdyYWRsZSB3aWxsIHJ1biBpbiBpbmN1YmF0aW5nIHBhcmFsbGVsIG1vZGUuCisjIFRoaXMgb3B0aW9uIHNob3VsZCBvbmx5IGJlIHVzZWQgd2l0aCBkZWNvdXBsZWQgcHJvamVjdHMuIE1vcmUgZGV0YWlscywgdmlzaXQKKyMgaHR0cDovL3d3dy5ncmFkbGUub3JnL2RvY3MvY3VycmVudC91c2VyZ3VpZGUvbXVsdGlfcHJvamVjdF9idWlsZHMuaHRtbCNzZWM6ZGVjb3VwbGVkX3Byb2plY3RzCisjIG9yZy5ncmFkbGUucGFyYWxsZWw9dHJ1ZQorCisjIEFuZHJvaWRYIHBhY2thZ2Ugc3RydWN0dXJlIHRvIG1ha2UgaXQgY2xlYXJlciB3aGljaCBwYWNrYWdlcyBhcmUgYnVuZGxlZCB3aXRoIHRoZQorIyBBbmRyb2lkIG9wZXJhdGluZyBzeXN0ZW0sIGFuZCB3aGljaCBhcmUgcGFja2FnZWQgd2l0aCB5b3VyIGFwcCJzIEFQSworIyBodHRwczovL2RldmVsb3Blci5hbmRyb2lkLmNvbS90b3BpYy9saWJyYXJpZXMvc3VwcG9ydC1saWJyYXJ5L2FuZHJvaWR4LXJuCithbmRyb2lkLnVzZUFuZHJvaWRYPXRydWUKKworIyBBdXRvbWF0aWNhbGx5IGNvbnZlcnQgdGhpcmQtcGFydHkgbGlicmFyaWVzIHRvIHVzZSBBbmRyb2lkWAorYW5kcm9pZC5lbmFibGVKZXRpZmllcj10cnVlCisKKyMgS290bGluIGNvZGUgc3R5bGUgZm9yIHRoaXMgcHJvamVjdDogIm9mZmljaWFsIiBvciAib2Jzb2xldGUiOgora290bGluLmNvZGUuc3R5bGU9b2ZmaWNpYWwKKwpkaWZmIC0tZ2l0IGEvQW5kcm9pZC9HcmFkbGUvZ3JhZGxlL3dyYXBwZXIvZ3JhZGxlLXdyYXBwZXIucHJvcGVydGllcyBiL0FuZHJvaWQvR3JhZGxlL2dyYWRsZS93cmFwcGVyL2dyYWRsZS13cmFwcGVyLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjUyOTNlZQotLS0gL2Rldi9udWxsCisrKyBiL0FuZHJvaWQvR3JhZGxlL2dyYWRsZS93cmFwcGVyL2dyYWRsZS13cmFwcGVyLnByb3BlcnRpZXMKQEAgLTAsMCArMSw2IEBACisjV2VkIEFwciAxMCAxNToyNzoxMCBQRFQgMjAxMworZGlzdHJpYnV0aW9uQmFzZT1HUkFETEVfVVNFUl9IT01FCitkaXN0cmlidXRpb25QYXRoPXdyYXBwZXIvZGlzdHMKK3ppcFN0b3JlQmFzZT1HUkFETEVfVVNFUl9IT01FCit6aXBTdG9yZVBhdGg9d3JhcHBlci9kaXN0cworZGlzdHJpYnV0aW9uVXJsPWh0dHBzXDovL3NlcnZpY2VzLmdyYWRsZS5vcmcvZGlzdHJpYnV0aW9ucy9ncmFkbGUtNi41LWFsbC56aXAKZGlmZiAtLWdpdCBhL0FuZHJvaWQvR3JhZGxlL2dyYWRsZXcgYi9BbmRyb2lkL0dyYWRsZS9ncmFkbGV3Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjkxYTdlMjYKLS0tIC9kZXYvbnVsbAorKysgYi9BbmRyb2lkL0dyYWRsZS9ncmFkbGV3CkBAIC0wLDAgKzEsMTY0IEBACisjIS91c3IvYmluL2VudiBiYXNoCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyMKKyMjICBHcmFkbGUgc3RhcnQgdXAgc2NyaXB0IGZvciBVTipYCisjIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMgQWRkIGRlZmF1bHQgSlZNIG9wdGlvbnMgaGVyZS4gWW91IGNhbiBhbHNvIHVzZSBKQVZBX09QVFMgYW5kIEdSQURMRV9PUFRTIHRvIHBhc3MgSlZNIG9wdGlvbnMgdG8gdGhpcyBzY3JpcHQuCitERUZBVUxUX0pWTV9PUFRTPSIiCisKK0FQUF9OQU1FPSJHcmFkbGUiCitBUFBfQkFTRV9OQU1FPWBiYXNlbmFtZSAiJDAiYAorCisjIFVzZSB0aGUgbWF4aW11bSBhdmFpbGFibGUsIG9yIHNldCBNQVhfRkQgIT0gLTEgdG8gdXNlIHRoYXQgdmFsdWUuCitNQVhfRkQ9Im1heGltdW0iCisKK3dhcm4gKCApIHsKKyAgICBlY2hvICIkKiIKK30KKworZGllICggKSB7CisgICAgZWNobworICAgIGVjaG8gIiQqIgorICAgIGVjaG8KKyAgICBleGl0IDEKK30KKworIyBPUyBzcGVjaWZpYyBzdXBwb3J0IChtdXN0IGJlICd0cnVlJyBvciAnZmFsc2UnKS4KK2N5Z3dpbj1mYWxzZQorbXN5cz1mYWxzZQorZGFyd2luPWZhbHNlCitjYXNlICJgdW5hbWVgIiBpbgorICBDWUdXSU4qICkKKyAgICBjeWd3aW49dHJ1ZQorICAgIDs7CisgIERhcndpbiogKQorICAgIGRhcndpbj10cnVlCisgICAgOzsKKyAgTUlOR1cqICkKKyAgICBtc3lzPXRydWUKKyAgICA7OworZXNhYworCisjIEZvciBDeWd3aW4sIGVuc3VyZSBwYXRocyBhcmUgaW4gVU5JWCBmb3JtYXQgYmVmb3JlIGFueXRoaW5nIGlzIHRvdWNoZWQuCitpZiAkY3lnd2luIDsgdGhlbgorICAgIFsgLW4gIiRKQVZBX0hPTUUiIF0gJiYgSkFWQV9IT01FPWBjeWdwYXRoIC0tdW5peCAiJEpBVkFfSE9NRSJgCitmaQorCisjIEF0dGVtcHQgdG8gc2V0IEFQUF9IT01FCisjIFJlc29sdmUgbGlua3M6ICQwIG1heSBiZSBhIGxpbmsKK1BSRz0iJDAiCisjIE5lZWQgdGhpcyBmb3IgcmVsYXRpdmUgc3ltbGlua3MuCit3aGlsZSBbIC1oICIkUFJHIiBdIDsgZG8KKyAgICBscz1gbHMgLWxkICIkUFJHImAKKyAgICBsaW5rPWBleHByICIkbHMiIDogJy4qLT4gXCguKlwpJCdgCisgICAgaWYgZXhwciAiJGxpbmsiIDogJy8uKicgPiAvZGV2L251bGw7IHRoZW4KKyAgICAgICAgUFJHPSIkbGluayIKKyAgICBlbHNlCisgICAgICAgIFBSRz1gZGlybmFtZSAiJFBSRyJgIi8kbGluayIKKyAgICBmaQorZG9uZQorU0FWRUQ9ImBwd2RgIgorY2QgImBkaXJuYW1lIFwiJFBSR1wiYC8iID4mLQorQVBQX0hPTUU9ImBwd2QgLVBgIgorY2QgIiRTQVZFRCIgPiYtCisKK0NMQVNTUEFUSD0kQVBQX0hPTUUvZ3JhZGxlL3dyYXBwZXIvZ3JhZGxlLXdyYXBwZXIuamFyCisKKyMgRGV0ZXJtaW5lIHRoZSBKYXZhIGNvbW1hbmQgdG8gdXNlIHRvIHN0YXJ0IHRoZSBKVk0uCitpZiBbIC1uICIkSkFWQV9IT01FIiBdIDsgdGhlbgorICAgIGlmIFsgLXggIiRKQVZBX0hPTUUvanJlL3NoL2phdmEiIF0gOyB0aGVuCisgICAgICAgICMgSUJNJ3MgSkRLIG9uIEFJWCB1c2VzIHN0cmFuZ2UgbG9jYXRpb25zIGZvciB0aGUgZXhlY3V0YWJsZXMKKyAgICAgICAgSkFWQUNNRD0iJEpBVkFfSE9NRS9qcmUvc2gvamF2YSIKKyAgICBlbHNlCisgICAgICAgIEpBVkFDTUQ9IiRKQVZBX0hPTUUvYmluL2phdmEiCisgICAgZmkKKyAgICBpZiBbICEgLXggIiRKQVZBQ01EIiBdIDsgdGhlbgorICAgICAgICBkaWUgIkVSUk9SOiBKQVZBX0hPTUUgaXMgc2V0IHRvIGFuIGludmFsaWQgZGlyZWN0b3J5OiAkSkFWQV9IT01FCisKK1BsZWFzZSBzZXQgdGhlIEpBVkFfSE9NRSB2YXJpYWJsZSBpbiB5b3VyIGVudmlyb25tZW50IHRvIG1hdGNoIHRoZQorbG9jYXRpb24gb2YgeW91ciBKYXZhIGluc3RhbGxhdGlvbi4iCisgICAgZmkKK2Vsc2UKKyAgICBKQVZBQ01EPSJqYXZhIgorICAgIHdoaWNoIGphdmEgPi9kZXYvbnVsbCAyPiYxIHx8IGRpZSAiRVJST1I6IEpBVkFfSE9NRSBpcyBub3Qgc2V0IGFuZCBubyAnamF2YScgY29tbWFuZCBjb3VsZCBiZSBmb3VuZCBpbiB5b3VyIFBBVEguCisKK1BsZWFzZSBzZXQgdGhlIEpBVkFfSE9NRSB2YXJpYWJsZSBpbiB5b3VyIGVudmlyb25tZW50IHRvIG1hdGNoIHRoZQorbG9jYXRpb24gb2YgeW91ciBKYXZhIGluc3RhbGxhdGlvbi4iCitmaQorCisjIEluY3JlYXNlIHRoZSBtYXhpbXVtIGZpbGUgZGVzY3JpcHRvcnMgaWYgd2UgY2FuLgoraWYgWyAiJGN5Z3dpbiIgPSAiZmFsc2UiIC1hICIkZGFyd2luIiA9ICJmYWxzZSIgXSA7IHRoZW4KKyAgICBNQVhfRkRfTElNSVQ9YHVsaW1pdCAtSCAtbmAKKyAgICBpZiBbICQ/IC1lcSAwIF0gOyB0aGVuCisgICAgICAgIGlmIFsgIiRNQVhfRkQiID0gIm1heGltdW0iIC1vICIkTUFYX0ZEIiA9ICJtYXgiIF0gOyB0aGVuCisgICAgICAgICAgICBNQVhfRkQ9IiRNQVhfRkRfTElNSVQiCisgICAgICAgIGZpCisgICAgICAgIHVsaW1pdCAtbiAkTUFYX0ZECisgICAgICAgIGlmIFsgJD8gLW5lIDAgXSA7IHRoZW4KKyAgICAgICAgICAgIHdhcm4gIkNvdWxkIG5vdCBzZXQgbWF4aW11bSBmaWxlIGRlc2NyaXB0b3IgbGltaXQ6ICRNQVhfRkQiCisgICAgICAgIGZpCisgICAgZWxzZQorICAgICAgICB3YXJuICJDb3VsZCBub3QgcXVlcnkgbWF4aW11bSBmaWxlIGRlc2NyaXB0b3IgbGltaXQ6ICRNQVhfRkRfTElNSVQiCisgICAgZmkKK2ZpCisKKyMgRm9yIERhcndpbiwgYWRkIG9wdGlvbnMgdG8gc3BlY2lmeSBob3cgdGhlIGFwcGxpY2F0aW9uIGFwcGVhcnMgaW4gdGhlIGRvY2sKK2lmICRkYXJ3aW47IHRoZW4KKyAgICBHUkFETEVfT1BUUz0iJEdSQURMRV9PUFRTIFwiLVhkb2NrOm5hbWU9JEFQUF9OQU1FXCIgXCItWGRvY2s6aWNvbj0kQVBQX0hPTUUvbWVkaWEvZ3JhZGxlLmljbnNcIiIKK2ZpCisKKyMgRm9yIEN5Z3dpbiwgc3dpdGNoIHBhdGhzIHRvIFdpbmRvd3MgZm9ybWF0IGJlZm9yZSBydW5uaW5nIGphdmEKK2lmICRjeWd3aW4gOyB0aGVuCisgICAgQVBQX0hPTUU9YGN5Z3BhdGggLS1wYXRoIC0tbWl4ZWQgIiRBUFBfSE9NRSJgCisgICAgQ0xBU1NQQVRIPWBjeWdwYXRoIC0tcGF0aCAtLW1peGVkICIkQ0xBU1NQQVRIImAKKworICAgICMgV2UgYnVpbGQgdGhlIHBhdHRlcm4gZm9yIGFyZ3VtZW50cyB0byBiZSBjb252ZXJ0ZWQgdmlhIGN5Z3BhdGgKKyAgICBST09URElSU1JBVz1gZmluZCAtTCAvIC1tYXhkZXB0aCAxIC1taW5kZXB0aCAxIC10eXBlIGQgMj4vZGV2L251bGxgCisgICAgU0VQPSIiCisgICAgZm9yIGRpciBpbiAkUk9PVERJUlNSQVcgOyBkbworICAgICAgICBST09URElSUz0iJFJPT1RESVJTJFNFUCRkaXIiCisgICAgICAgIFNFUD0ifCIKKyAgICBkb25lCisgICAgT1VSQ1lHUEFUVEVSTj0iKF4oJFJPT1RESVJTKSkiCisgICAgIyBBZGQgYSB1c2VyLWRlZmluZWQgcGF0dGVybiB0byB0aGUgY3lncGF0aCBhcmd1bWVudHMKKyAgICBpZiBbICIkR1JBRExFX0NZR1BBVFRFUk4iICE9ICIiIF0gOyB0aGVuCisgICAgICAgIE9VUkNZR1BBVFRFUk49IiRPVVJDWUdQQVRURVJOfCgkR1JBRExFX0NZR1BBVFRFUk4pIgorICAgIGZpCisgICAgIyBOb3cgY29udmVydCB0aGUgYXJndW1lbnRzIC0ga2x1ZGdlIHRvIGxpbWl0IG91cnNlbHZlcyB0byAvYmluL3NoCisgICAgaT0wCisgICAgZm9yIGFyZyBpbiAiJEAiIDsgZG8KKyAgICAgICAgQ0hFQ0s9YGVjaG8gIiRhcmcifGVncmVwIC1jICIkT1VSQ1lHUEFUVEVSTiIgLWAKKyAgICAgICAgQ0hFQ0syPWBlY2hvICIkYXJnInxlZ3JlcCAtYyAiXi0iYCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMjIyBEZXRlcm1pbmUgaWYgYW4gb3B0aW9uCisKKyAgICAgICAgaWYgWyAkQ0hFQ0sgLW5lIDAgXSAmJiBbICRDSEVDSzIgLWVxIDAgXSA7IHRoZW4gICAgICAgICAgICAgICAgICAgICMjIyBBZGRlZCBhIGNvbmRpdGlvbgorICAgICAgICAgICAgZXZhbCBgZWNobyBhcmdzJGlgPWBjeWdwYXRoIC0tcGF0aCAtLWlnbm9yZSAtLW1peGVkICIkYXJnImAKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZXZhbCBgZWNobyBhcmdzJGlgPSJcIiRhcmdcIiIKKyAgICAgICAgZmkKKyAgICAgICAgaT0kKChpKzEpKQorICAgIGRvbmUKKyAgICBjYXNlICRpIGluCisgICAgICAgICgwKSBzZXQgLS0gOzsKKyAgICAgICAgKDEpIHNldCAtLSAiJGFyZ3MwIiA7OworICAgICAgICAoMikgc2V0IC0tICIkYXJnczAiICIkYXJnczEiIDs7CisgICAgICAgICgzKSBzZXQgLS0gIiRhcmdzMCIgIiRhcmdzMSIgIiRhcmdzMiIgOzsKKyAgICAgICAgKDQpIHNldCAtLSAiJGFyZ3MwIiAiJGFyZ3MxIiAiJGFyZ3MyIiAiJGFyZ3MzIiA7OworICAgICAgICAoNSkgc2V0IC0tICIkYXJnczAiICIkYXJnczEiICIkYXJnczIiICIkYXJnczMiICIkYXJnczQiIDs7CisgICAgICAgICg2KSBzZXQgLS0gIiRhcmdzMCIgIiRhcmdzMSIgIiRhcmdzMiIgIiRhcmdzMyIgIiRhcmdzNCIgIiRhcmdzNSIgOzsKKyAgICAgICAgKDcpIHNldCAtLSAiJGFyZ3MwIiAiJGFyZ3MxIiAiJGFyZ3MyIiAiJGFyZ3MzIiAiJGFyZ3M0IiAiJGFyZ3M1IiAiJGFyZ3M2IiA7OworICAgICAgICAoOCkgc2V0IC0tICIkYXJnczAiICIkYXJnczEiICIkYXJnczIiICIkYXJnczMiICIkYXJnczQiICIkYXJnczUiICIkYXJnczYiICIkYXJnczciIDs7CisgICAgICAgICg5KSBzZXQgLS0gIiRhcmdzMCIgIiRhcmdzMSIgIiRhcmdzMiIgIiRhcmdzMyIgIiRhcmdzNCIgIiRhcmdzNSIgIiRhcmdzNiIgIiRhcmdzNyIgIiRhcmdzOCIgOzsKKyAgICBlc2FjCitmaQorCisjIFNwbGl0IHVwIHRoZSBKVk1fT1BUUyBBbmQgR1JBRExFX09QVFMgdmFsdWVzIGludG8gYW4gYXJyYXksIGZvbGxvd2luZyB0aGUgc2hlbGwgcXVvdGluZyBhbmQgc3Vic3RpdHV0aW9uIHJ1bGVzCitmdW5jdGlvbiBzcGxpdEp2bU9wdHMoKSB7CisgICAgSlZNX09QVFM9KCIkQCIpCit9CitldmFsIHNwbGl0SnZtT3B0cyAkREVGQVVMVF9KVk1fT1BUUyAkSkFWQV9PUFRTICRHUkFETEVfT1BUUworSlZNX09QVFNbJHsjSlZNX09QVFNbKl19XT0iLURvcmcuZ3JhZGxlLmFwcG5hbWU9JEFQUF9CQVNFX05BTUUiCisKK2V4ZWMgIiRKQVZBQ01EIiAiJHtKVk1fT1BUU1tAXX0iIC1jbGFzc3BhdGggIiRDTEFTU1BBVEgiIG9yZy5ncmFkbGUud3JhcHBlci5HcmFkbGVXcmFwcGVyTWFpbiAiJEAiCmRpZmYgLS1naXQgYS9BbmRyb2lkL0dyYWRsZS9ncmFkbGV3LmJhdCBiL0FuZHJvaWQvR3JhZGxlL2dyYWRsZXcuYmF0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhhMGIyODIKLS0tIC9kZXYvbnVsbAorKysgYi9BbmRyb2lkL0dyYWRsZS9ncmFkbGV3LmJhdApAQCAtMCwwICsxLDkwIEBACitAaWYgIiVERUJVRyUiID09ICIiIEBlY2hvIG9mZgorQHJlbSAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworQHJlbQorQHJlbSAgR3JhZGxlIHN0YXJ0dXAgc2NyaXB0IGZvciBXaW5kb3dzCitAcmVtCitAcmVtICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK0ByZW0gU2V0IGxvY2FsIHNjb3BlIGZvciB0aGUgdmFyaWFibGVzIHdpdGggd2luZG93cyBOVCBzaGVsbAoraWYgIiVPUyUiPT0iV2luZG93c19OVCIgc2V0bG9jYWwKKworQHJlbSBBZGQgZGVmYXVsdCBKVk0gb3B0aW9ucyBoZXJlLiBZb3UgY2FuIGFsc28gdXNlIEpBVkFfT1BUUyBhbmQgR1JBRExFX09QVFMgdG8gcGFzcyBKVk0gb3B0aW9ucyB0byB0aGlzIHNjcmlwdC4KK3NldCBERUZBVUxUX0pWTV9PUFRTPQorCitzZXQgRElSTkFNRT0lfmRwMAoraWYgIiVESVJOQU1FJSIgPT0gIiIgc2V0IERJUk5BTUU9Lgorc2V0IEFQUF9CQVNFX05BTUU9JX5uMAorc2V0IEFQUF9IT01FPSVESVJOQU1FJQorCitAcmVtIEZpbmQgamF2YS5leGUKK2lmIGRlZmluZWQgSkFWQV9IT01FIGdvdG8gZmluZEphdmFGcm9tSmF2YUhvbWUKKworc2V0IEpBVkFfRVhFPWphdmEuZXhlCislSkFWQV9FWEUlIC12ZXJzaW9uID5OVUwgMj4mMQoraWYgIiVFUlJPUkxFVkVMJSIgPT0gIjAiIGdvdG8gaW5pdAorCitlY2hvLgorZWNobyBFUlJPUjogSkFWQV9IT01FIGlzIG5vdCBzZXQgYW5kIG5vICdqYXZhJyBjb21tYW5kIGNvdWxkIGJlIGZvdW5kIGluIHlvdXIgUEFUSC4KK2VjaG8uCitlY2hvIFBsZWFzZSBzZXQgdGhlIEpBVkFfSE9NRSB2YXJpYWJsZSBpbiB5b3VyIGVudmlyb25tZW50IHRvIG1hdGNoIHRoZQorZWNobyBsb2NhdGlvbiBvZiB5b3VyIEphdmEgaW5zdGFsbGF0aW9uLgorCitnb3RvIGZhaWwKKworOmZpbmRKYXZhRnJvbUphdmFIb21lCitzZXQgSkFWQV9IT01FPSVKQVZBX0hPTUU6Ij0lCitzZXQgSkFWQV9FWEU9JUpBVkFfSE9NRSUvYmluL2phdmEuZXhlCisKK2lmIGV4aXN0ICIlSkFWQV9FWEUlIiBnb3RvIGluaXQKKworZWNoby4KK2VjaG8gRVJST1I6IEpBVkFfSE9NRSBpcyBzZXQgdG8gYW4gaW52YWxpZCBkaXJlY3Rvcnk6ICVKQVZBX0hPTUUlCitlY2hvLgorZWNobyBQbGVhc2Ugc2V0IHRoZSBKQVZBX0hPTUUgdmFyaWFibGUgaW4geW91ciBlbnZpcm9ubWVudCB0byBtYXRjaCB0aGUKK2VjaG8gbG9jYXRpb24gb2YgeW91ciBKYXZhIGluc3RhbGxhdGlvbi4KKworZ290byBmYWlsCisKKzppbml0CitAcmVtIEdldCBjb21tYW5kLWxpbmUgYXJndW1lbnRzLCBoYW5kbGluZyBXaW5kb3d6IHZhcmlhbnRzCisKK2lmIG5vdCAiJU9TJSIgPT0gIldpbmRvd3NfTlQiIGdvdG8gd2luOXhNRV9hcmdzCitpZiAiJUBldmFsWzIrMl0iID09ICI0IiBnb3RvIDROVF9hcmdzCisKKzp3aW45eE1FX2FyZ3MKK0ByZW0gU2x1cnAgdGhlIGNvbW1hbmQgbGluZSBhcmd1bWVudHMuCitzZXQgQ01EX0xJTkVfQVJHUz0KK3NldCBfU0tJUD0yCisKKzp3aW45eE1FX2FyZ3Nfc2x1cnAKK2lmICJ4JX4xIiA9PSAieCIgZ290byBleGVjdXRlCisKK3NldCBDTURfTElORV9BUkdTPSUqCitnb3RvIGV4ZWN1dGUKKworOjROVF9hcmdzCitAcmVtIEdldCBhcmd1bWVudHMgZnJvbSB0aGUgNE5UIFNoZWxsIGZyb20gSlAgU29mdHdhcmUKK3NldCBDTURfTElORV9BUkdTPSUkCisKKzpleGVjdXRlCitAcmVtIFNldHVwIHRoZSBjb21tYW5kIGxpbmUKKworc2V0IENMQVNTUEFUSD0lQVBQX0hPTUUlXGdyYWRsZVx3cmFwcGVyXGdyYWRsZS13cmFwcGVyLmphcgorCitAcmVtIEV4ZWN1dGUgR3JhZGxlCisiJUpBVkFfRVhFJSIgJURFRkFVTFRfSlZNX09QVFMlICVKQVZBX09QVFMlICVHUkFETEVfT1BUUyUgIi1Eb3JnLmdyYWRsZS5hcHBuYW1lPSVBUFBfQkFTRV9OQU1FJSIgLWNsYXNzcGF0aCAiJUNMQVNTUEFUSCUiIG9yZy5ncmFkbGUud3JhcHBlci5HcmFkbGVXcmFwcGVyTWFpbiAlQ01EX0xJTkVfQVJHUyUKKworOmVuZAorQHJlbSBFbmQgbG9jYWwgc2NvcGUgZm9yIHRoZSB2YXJpYWJsZXMgd2l0aCB3aW5kb3dzIE5UIHNoZWxsCitpZiAiJUVSUk9STEVWRUwlIj09IjAiIGdvdG8gbWFpbkVuZAorCis6ZmFpbAorcmVtIFNldCB2YXJpYWJsZSBHUkFETEVfRVhJVF9DT05TT0xFIGlmIHlvdSBuZWVkIHRoZSBfc2NyaXB0XyByZXR1cm4gY29kZSBpbnN0ZWFkIG9mCityZW0gdGhlIF9jbWQuZXhlIC9jXyByZXR1cm4gY29kZSEKK2lmICBub3QgIiIgPT0gIiVHUkFETEVfRVhJVF9DT05TT0xFJSIgZXhpdCAxCitleGl0IC9iIDEKKworOm1haW5FbmQKK2lmICIlT1MlIj09IldpbmRvd3NfTlQiIGVuZGxvY2FsCisKKzpvbWVnYQpkaWZmIC0tZ2l0IGEvQW5kcm9pZC9HcmFkbGUvbmF0aXZlLnByb3BlcnRpZXMgYi9BbmRyb2lkL0dyYWRsZS9uYXRpdmUucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YjExNWI4Ci0tLSAvZGV2L251bGwKKysrIGIvQW5kcm9pZC9HcmFkbGUvbmF0aXZlLnByb3BlcnRpZXMKQEAgLTAsMCArMSwyMSBAQAorYWJpTGlzdD1hcm1lYWJpLXY3YSxhcm02NC12OGEseDg2LHg4Nl82NAorcm9vdERpcmVjdG9yeT0uLi8uLgorCithYmlTdWJkaXJlY3Rvcnk9QW5kcm9pZC9BQkkKK2RyaXZlcnNTdWJkaXJlY3Rvcnk9bGliCittZXNzYWdlc1N1YmRpcmVjdG9yeT1NZXNzYWdlcwordGFibGVzU3ViZGlyZWN0b3J5PVRhYmxlcworCitjb3JlU3ViZGlyZWN0b3J5PVByb2dyYW1zCitjb3JlTGlicmFyeT1saWJicmx0dHlfY29yZS5zbworY29yZVdyYXBwZXI9bGliYnJsdHR5X2puaS5zbworY29yZUJpbmRpbmdzPWxpYmJybGFwaS5zbworCitqYXZhU3ViZGlyZWN0b3J5PUJpbmRpbmdzL0phdmEKK2phdmFCaW5kaW5ncz1saWJicmxhcGlfamF2YS5zbworamF2YUNsYXNzZXM9YnJsYXBpX2phcgorCithc3NldHNQYXRoPXNyYy9tYWluL2Fzc2V0cworamFyc1BhdGg9c3JjL21haW4vbGlicworbGlicmFyaWVzUGF0aD1zcmMvbWFpbi9qbmlMaWJzCisKZGlmZiAtLWdpdCBhL0FuZHJvaWQvR3JhZGxlL3B1Ymxpc2gubWsgYi9BbmRyb2lkL0dyYWRsZS9wdWJsaXNoLm1rCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhjN2NkMTcKLS0tIC9kZXYvbnVsbAorKysgYi9BbmRyb2lkL0dyYWRsZS9wdWJsaXNoLm1rCkBAIC0wLDAgKzEsMjkgQEAKK0dSQURMRV9QVUJMSVNIX0NPTU1BTkQgPSAkKEdSQURMRV9XUkFQUEVSX0NPTU1BTkQpIDokKEdSQURMRV9BUFBfTkFNRSk6cHVibGlzaFJlbGVhc2VCdW5kbGUKK0dSQURMRV9QUk9NT1RFX0NPTU1BTkQgPSAkKEdSQURMRV9XUkFQUEVSX0NPTU1BTkQpIDokKEdSQURMRV9BUFBfTkFNRSk6cHJvbW90ZUFydGlmYWN0CisKK0dSQURMRV9MSVNUSU5HX0RJUkVDVE9SWSA9IGFwcC9zcmMvbWFpbi9wbGF5CisKK3B1Ymxpc2gtYWxwaGE6CisJJChHUkFETEVfUFVCTElTSF9DT01NQU5EKSAtLXRyYWNrIGFscGhhIC0tcmVsZWFzZS1zdGF0dXMgaW5Qcm9ncmVzcworCitwdWJsaXNoLWJldGE6CisJJChHUkFETEVfUFVCTElTSF9DT01NQU5EKSAtLXRyYWNrIGJldGEgLS1yZWxlYXNlLXN0YXR1cyBpblByb2dyZXNzCisKK3B1Ymxpc2gtcHJvZHVjdGlvbjoKKwkkKEdSQURMRV9QVUJMSVNIX0NPTU1BTkQpIC0tdHJhY2sgcHJvZHVjdGlvbiAtLXJlbGVhc2Utc3RhdHVzIGNvbXBsZXRlZAorCitwcm9tb3RlLXRvLWJldGE6CisJJChHUkFETEVfUFJPTU9URV9DT01NQU5EKSAtLWZyb20tdHJhY2sgYWxwaGEgLS1wcm9tb3RlLXRyYWNrIGJldGEgLS1yZWxlYXNlLXN0YXR1cyBpblByb2dyZXNzCisKK3Byb21vdGUtdG8tcHJvZHVjdGlvbjoKKwkkKEdSQURMRV9QUk9NT1RFX0NPTU1BTkQpIC0tZnJvbS10cmFjayBiZXRhIC0tcHJvbW90ZS10cmFjayBwcm9kdWN0aW9uIC0tcmVsZWFzZS1zdGF0dXMgY29tcGxldGVkCisKK2Rvd25sb2FkLWxpc3Rpbmc6CisJJChHUkFETEVfV1JBUFBFUl9DT01NQU5EKSBib290c3RyYXAKKworcHVibGlzaC1saXN0aW5nOgorCSQoR1JBRExFX1dSQVBQRVJfQ09NTUFORCkgcHVibGlzaExpc3RpbmcKKworY2xlYW4tbGlzdGluZzoKKwktcm0gLWYgLXIgJChHUkFETEVfTElTVElOR19ESVJFQ1RPUlkpCisKZGlmZiAtLWdpdCBhL0FuZHJvaWQvR3JhZGxlL3NldHRpbmdzLmdyYWRsZSBiL0FuZHJvaWQvR3JhZGxlL3NldHRpbmdzLmdyYWRsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NWU5NzdiCi0tLSAvZGV2L251bGwKKysrIGIvQW5kcm9pZC9HcmFkbGUvc2V0dGluZ3MuZ3JhZGxlCkBAIC0wLDAgKzEsNiBAQAorcm9vdFByb2plY3QubmFtZSA9ICJicmx0dHkiCisKK2luY2x1ZGUgIjpjb3JlIgoraW5jbHVkZSAiOmFwcCIKK2luY2x1ZGUgImFwaSIKK2luY2x1ZGUgImFwaXRlc3QiCmRpZmYgLS1naXQgYS9BbmRyb2lkL0dyYWRsZS90YXJnZXRzLm1rIGIvQW5kcm9pZC9HcmFkbGUvdGFyZ2V0cy5tawpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YzIwZGNmCi0tLSAvZGV2L251bGwKKysrIGIvQW5kcm9pZC9HcmFkbGUvdGFyZ2V0cy5tawpAQCAtMCwwICsxLDk3IEBACitjb3JlLWRlYnVnOgorCSQoR1JBRExFX1dSQVBQRVJfQ09NTUFORCkgOiQoR1JBRExFX0NPUkVfTkFNRSk6YXNzZW1ibGVEZWJ1ZworCitjb3JlLXJlbGVhc2U6CisJJChHUkFETEVfV1JBUFBFUl9DT01NQU5EKSA6JChHUkFETEVfQ09SRV9OQU1FKTphc3NlbWJsZVJlbGVhc2UKKworYXBpLWRlYnVnOgorCSQoR1JBRExFX1dSQVBQRVJfQ09NTUFORCkgOiQoR1JBRExFX0FQSV9OQU1FKTphc3NlbWJsZURlYnVnCisKK2FwaS1yZWxlYXNlOgorCSQoR1JBRExFX1dSQVBQRVJfQ09NTUFORCkgOiQoR1JBRExFX0FQSV9OQU1FKTphc3NlbWJsZVJlbGVhc2UKKworYXBpLXB1Ymxpc2g6CisJJChHUkFETEVfV1JBUFBFUl9DT01NQU5EKSA6JChHUkFETEVfQVBJX05BTUUpOnB1Ymxpc2hSZWxlYXNlUHVibGljYXRpb25Ub01hdmVuTG9jYWwKKworYXBpdGVzdC1kZWJ1ZzoKKwkkKEdSQURMRV9XUkFQUEVSX0NPTU1BTkQpIDokKEdSQURMRV9BUElURVNUX05BTUUpOmFzc2VtYmxlRGVidWcKKworYXBpdGVzdC1yZWxlYXNlOgorCSQoR1JBRExFX1dSQVBQRVJfQ09NTUFORCkgOiQoR1JBRExFX0FQSVRFU1RfTkFNRSk6YXNzZW1ibGVSZWxlYXNlCisKK2FwcC1kZWJ1ZzoKKwkkKEdSQURMRV9XUkFQUEVSX0NPTU1BTkQpIDokKEdSQURMRV9BUFBfTkFNRSk6YXNzZW1ibGVEZWJ1ZworCithcHAtcmVsZWFzZToKKwkkKEdSQURMRV9XUkFQUEVSX0NPTU1BTkQpIDokKEdSQURMRV9BUFBfTkFNRSk6YXNzZW1ibGVSZWxlYXNlCisKK2J1bmRsZS1kZWJ1ZzoKKwkkKEdSQURMRV9XUkFQUEVSX0NPTU1BTkQpIDokKEdSQURMRV9BUFBfTkFNRSk6YnVuZGxlRGVidWcKKworYnVuZGxlLXJlbGVhc2U6CisJJChHUkFETEVfV1JBUFBFUl9DT01NQU5EKSA6JChHUkFETEVfQVBQX05BTUUpOmJ1bmRsZVJlbGVhc2UKKworbGludC1kZWJ1ZzoKKwkkKEdSQURMRV9XUkFQUEVSX0NPTU1BTkQpIGxpbnREZWJ1ZworCitsaW50LXJlbGVhc2U6CisJJChHUkFETEVfV1JBUFBFUl9DT01NQU5EKSBsaW50UmVsZWFzZQorCitjbGVhbi1idWlsZDoKKwkkKEdSQURMRV9XUkFQUEVSX0NPTU1BTkQpIGNsZWFuCisKK2luc3RhbGwtZGVidWc6IGFwcC1kZWJ1ZworCWFkYiBpbnN0YWxsIC1yIC1kICQoR1JBRExFX0RFQlVHX1BBQ0tBR0UpCisKK2luc3RhbGwtcmVsZWFzZTogYXBwLXJlbGVhc2UKKwlhZGIgaW5zdGFsbCAtciAkKEdSQURMRV9SRUxFQVNFX1BBQ0tBR0UpCisKK2Fzc2V0czogbWVzc2FnZXMgdGFibGVzCisKK21lc3NhZ2VzOgorCSQoR1JBRExFX1dSQVBQRVJfQ09NTUFORCkgOiQoR1JBRExFX0FQUF9OQU1FKTpicmx0dHlBZGRNZXNzYWdlcworCit0YWJsZXM6CisJJChHUkFETEVfV1JBUFBFUl9DT01NQU5EKSA6JChHUkFETEVfQVBQX05BTUUpOmJybHR0eUFkZFRhYmxlcworCityZW1vdmUtYXNzZXRzOiByZW1vdmUtbWVzc2FnZXMgcmVtb3ZlLXRhYmxlcworCityZW1vdmUtbWVzc2FnZXM6CisJJChHUkFETEVfV1JBUFBFUl9DT01NQU5EKSA6JChHUkFETEVfQVBQX05BTUUpOmJybHR0eVJlbW92ZU1lc3NhZ2VzCisKK3JlbW92ZS10YWJsZXM6CisJJChHUkFETEVfV1JBUFBFUl9DT01NQU5EKSA6JChHUkFETEVfQVBQX05BTUUpOmJybHR0eVJlbW92ZVRhYmxlcworCit0YXNrcy1kdW1wOgorCSQoR1JBRExFX1dSQVBQRVJfQ09NTUFORCkgJChHUkFETEVfRFVNUF9OQU1FKSB0YXNrcyAtLWFsbCA+JChHUkFETEVfRFVNUF9GSUxFKQorCitiYWRnaW5nLWR1bXAgY29uZmlndXJhdGlvbnMtZHVtcCBwZXJtaXNzaW9ucy1kdW1wIHJlc291cmNlcy1kdW1wIHN0cmluZ3MtZHVtcCB4bWxzdHJpbmdzLWR1bXAgeG1sdHJlZS1kdW1wOiBhcHAtZGVidWcKKwkkKEdSQURMRV9EVU1QX0NPTU1BTkQpICQoR1JBRExFX0RVTVBfTkFNRSkgJChHUkFETEVfREVCVUdfUEFDS0FHRSkgPiQoR1JBRExFX0RVTVBfRklMRSkKKworc3ltbGlua3M6IHBhY2thZ2Utc3ltbGlua3MgYnVuZGxlLXN5bWxpbmtzIGxpbnQtc3ltbGlua3MKKworcGFja2FnZS1zeW1saW5rczoKKwkkKEdSQURMRV9TWU1MSU5LX0NPTU1BTkQpICQoR1JBRExFX0RFQlVHX1BBQ0tBR0UpICQoR1JBRExFX1JPT1RfTkFNRSktJChHUkFETEVfREVCVUdfVkFSSUFOVCkuJChHUkFETEVfUEFDS0FHRV9FWFRFTlNJT04pCisJJChHUkFETEVfU1lNTElOS19DT01NQU5EKSAkKEdSQURMRV9SRUxFQVNFX1BBQ0tBR0UpICQoR1JBRExFX1JPT1RfTkFNRSktJChHUkFETEVfUkVMRUFTRV9WQVJJQU5UKS4kKEdSQURMRV9QQUNLQUdFX0VYVEVOU0lPTikKKworYnVuZGxlLXN5bWxpbmtzOgorCSQoR1JBRExFX1NZTUxJTktfQ09NTUFORCkgJChHUkFETEVfREVCVUdfQlVORExFKSAkKEdSQURMRV9ST09UX05BTUUpLSQoR1JBRExFX0RFQlVHX1ZBUklBTlQpLiQoR1JBRExFX0JVTkRMRV9FWFRFTlNJT04pCisJJChHUkFETEVfU1lNTElOS19DT01NQU5EKSAkKEdSQURMRV9SRUxFQVNFX0JVTkRMRSkgJChHUkFETEVfUk9PVF9OQU1FKS0kKEdSQURMRV9SRUxFQVNFX1ZBUklBTlQpLiQoR1JBRExFX0JVTkRMRV9FWFRFTlNJT04pCisKK2xpbnQtc3ltbGlua3M6CisJJChHUkFETEVfU1lNTElOS19DT01NQU5EKSAkKEdSQURMRV9ERUJVR19SRVBPUlQpICQoR1JBRExFX1JFUE9SVF9OQU1FKS0kKEdSQURMRV9ERUJVR19WQVJJQU5UKS4kKEdSQURMRV9SRVBPUlRfRVhURU5TSU9OKQorCSQoR1JBRExFX1NZTUxJTktfQ09NTUFORCkgJChHUkFETEVfUkVMRUFTRV9SRVBPUlQpICQoR1JBRExFX1JFUE9SVF9OQU1FKS0kKEdSQURMRV9SRUxFQVNFX1ZBUklBTlQpLiQoR1JBRExFX1JFUE9SVF9FWFRFTlNJT04pCisKK2dldC1zY3JlZW4tbG9nOgorCWFkYiBwdWxsIC9zZGNhcmQvQW5kcm9pZC9kYXRhL29yZy5hMTF5LmJybHR0eS5hbmRyb2lkL2ZpbGVzL3NjcmVlbi5sb2cKKworY2xlYW46OgorCS1ybSAtZiAkKEdSQURMRV9ST09UX05BTUUpLSouJChHUkFETEVfUEFDS0FHRV9FWFRFTlNJT04pCisJLXJtIC1mICQoR1JBRExFX1JPT1RfTkFNRSktKi4kKEdSQURMRV9CVU5ETEVfRVhURU5TSU9OKQorCS1ybSAtZiAkKEdSQURMRV9ST09UX05BTUUpLSouJChHUkFETEVfUkVQT1JUX0VYVEVOU0lPTikKKwktcm0gLWYgJChHUkFETEVfUk9PVF9OQU1FKS0qLiQoR1JBRExFX0RVTVBfRVhURU5TSU9OKQorCitkaXN0Y2xlYW46OgorCS1ybSAtZiBjb25maWcucHJvcGVydGllcworCS1ybSAtZiAtciAuLi9BQkkKKwpkaWZmIC0tZ2l0IGEvQW5kcm9pZC9Ob3Rlcy9JU1NVRVMgYi9BbmRyb2lkL05vdGVzL0lTU1VFUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MGJjMjVjCi0tLSAvZGV2L251bGwKKysrIGIvQW5kcm9pZC9Ob3Rlcy9JU1NVRVMKQEAgLTAsMCArMSwzIEBACitjaGVjayBhY3Rpb24gcGVyZm9ybWFiaWxpdHkgYmV0dGVyIChlLmcuIHNldHRpbmcvY2xlYXJpbmcgaW5wdXQvYWNjZXNzIGZvY3VzKQorZGlzcG1kIGNyYXNoZXMgd2hlbiBuYXZpZ2F0aW5nIG9mZiB0aGUgdG9wCitpY29uIGZvciBpbnB1dCBzZXJ2aWNlCmRpZmYgLS1naXQgYS9BbmRyb2lkL05vdGVzL1BFTkRJTkcgYi9BbmRyb2lkL05vdGVzL1BFTkRJTkcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2Y2ZGEzMQotLS0gL2Rldi9udWxsCisrKyBiL0FuZHJvaWQvTm90ZXMvUEVORElORwpAQCAtMCwwICsxLDMgQEAKK2xpbnQgZGVwcmVjYXRlZCBhcGkKK2xpbnQgdW5zYWZlIG9yIHVuY2hlY2tlZCBvcGVyYXRpb25zIC0gSW5wdXRIYW5kbGVycworc3RyaXAgcmVsZWFzZSBsaWJyYXJpZXMKZGlmZiAtLWdpdCBhL0FuZHJvaWQvTm90ZXMvVE9ETyBiL0FuZHJvaWQvTm90ZXMvVE9ETwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MjYyZWFmCi0tLSAvZGV2L251bGwKKysrIGIvQW5kcm9pZC9Ob3Rlcy9UT0RPCkBAIC0wLDAgKzEsMjIgQEAKK2FjY2Vzc2liaWxpdHkgZm9jdXMgYnVpbHQgaW50byB0YWxrYmFjaworZXhwbG9yZSBieSB0b3VjaCBidWlsdCBpbnRvIHRhbGtiYWNrCit0eXBpbmcgb24gYnJhaWxsZSBrZXlib2FyZCBhbmQgdG91Y2ggc2NyZWVuIHNpbXVsdGFuZW91c2x5Cit0eXBpbmcgUElOIG9uIGxvY2sgc2NyZWVuCisKK2F1dG9tYXRpYyBzY3JvbGwgYXQgdGhlIHRvcC9ib3R0b20gb2YgYSBwYWdlCitzd2l0Y2ggYW1vbmdzdCBzZWxlY3RlZCB0ZXh0L2NvbnRyYWN0aW9uIHRhYmxlcworbW9uaXRvciBtdWx0aXBsZSBicmFpbGxlIGRldmljZXMKKworbWVzc2FnZXMgZW5xdWV1ZSB3aGlsZSBkZXZpY2UgaXNuJ3QgY29ubmVjdGVkCityZW1vdmluZyBhIGRldmljZSBuZWVkcyBpdHMgb3duIHNlbGVjdG9yCitjb250cmFjdGVkIGJyYWlsbGUgZG9lc24ndCBjb3VudCByb3V0aW5nIGtleXMgY29ycmVjdGx5CisKK3Nob3cgdGhhdCB0ZXh0IGlzIGVkaXRhYmxlCithIHdheSB0byBjbGljayBvbiB0aGUgYmFja2dyb3VuZAorYSB3YXkgdG8gZHJhZyBhbmQgZHJvcAorY29udHJhY3RlZCBicmFpbGxlIGFuZCByb3V0aW5nIGtleSBhc3NvY2lhdGlvbnMKK3N1cHBvcnQgdGhlIGR5bmFtaWMgbG9hZGluZyBvZiBub24tYnVpbHQtaW4gZHJpdmVycworc3VwcG9ydCBzZXJpYWwgYnJhaWxsZSBkZXZpY2VzCithY3Rpb25zIG9uIGVsZW1lbnRzIHdpdGggc2hvcnQgdGV4dCAoZ3JpZCB2aWV3KQorc2VsZWN0aW5nIG11bHRpcGxlIGRldmljZXMKK3N3aXRjaGluZyBiZXR3ZWVuIHByZWZlcnJlZCB0ZXh0L2NvbnRyYWN0aW9uIHRhYmxlcwpkaWZmIC0tZ2l0IGEvQW5kcm9pZC9Ob3Rlcy9icmFpbGxlX3NlcnZpY2UucG5nIGIvQW5kcm9pZC9Ob3Rlcy9icmFpbGxlX3NlcnZpY2UucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY4MDliZmEKLS0tIC9kZXYvbnVsbAorKysgYi9BbmRyb2lkL05vdGVzL2JyYWlsbGVfc2VydmljZS5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvQW5kcm9pZC9Ob3Rlcy9jaHJvbWUtcm9sZXMgYi9BbmRyb2lkL05vdGVzL2Nocm9tZS1yb2xlcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYWU1OWM1Ci0tLSAvZGV2L251bGwKKysrIGIvQW5kcm9pZC9Ob3Rlcy9jaHJvbWUtcm9sZXMKQEAgLTAsMCArMSwxMiBAQAorZGVzY3JpcHRpb25MaXN0CitkZXNjcmlwdGlvbkxpc3REZXRhaWwKK2Rlc2NyaXB0aW9uTGlzdFRlcm0KK2dlbmVyaWNDb250YWluZXIKK2hlYWRpbmcKK2xpbmsKK2xpc3QKK2xpc3RJdGVtCitsaXN0TWFya2VyCitwYXJhZ3JhcGgKK3NwbGl0dGVyCitzdGF0aWNUZXh0CmRpZmYgLS1naXQgYS9BbmRyb2lkL1NUUklOR1MgYi9BbmRyb2lkL1NUUklOR1MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzJiYjRiNAotLS0gL2Rldi9udWxsCisrKyBiL0FuZHJvaWQvU1RSSU5HUwpAQCAtMCwwICsxLDI4NCBAQAorYXBwX2Rlc2NyaXB0aW9uIEJSTFRUWSBzdXBwb3J0cyBicmFpbGxlIGRldmljZXMuCisKK3VzYk1vbml0b3JfbGFiZWwgVVNCIERldmljZSBBdHRhY2hlZCBNb25pdG9yCisKK2Fib3V0X2xhYmVsX2FjdGl2aXR5IEFib3V0IEFwcGxpY2F0aW9uCithYm91dF9sYWJlbF9jb3B5cmlnaHQgQ29weXJpZ2h0CithYm91dF9sYWJlbF9idWlsZFRpbWUgQnVpbGQgVGltZQorYWJvdXRfbGFiZWxfc291cmNlUmV2aXNpb24gU291cmNlIFJldmlzaW9uCithYm91dF9sYWJlbF9wcml2YWN5UG9saWN5IFByaXZhY3kgUG9saWN5CisKK2lucHV0U2VydmljZV9uYW1lIEJSTFRUWSBJbnB1dCBTZXJ2aWNlCitpbnB1dFNlcnZpY2VfdHlwZSBLZXlib2FyZHMgb24gQnJhaWxsZSBEZXZpY2VzCitpbnB1dFNlcnZpY2Vfbm90X2VuYWJsZWQgaW5wdXQgc2VydmljZSBub3QgZW5hYmxlZAoraW5wdXRTZXJ2aWNlX25vdF9zZWxlY3RlZCBpbnB1dCBzZXJ2aWNlIG5vdCBzZWxlY3RlZAoraW5wdXRTZXJ2aWNlX25vdF9zdGFydGVkIGlucHV0IHNlcnZpY2Ugbm90IHN0YXJ0ZWQKK2lucHV0U2VydmljZV9ub3RfY29ubmVjdGVkIGlucHV0IHNlcnZpY2Ugbm90IGNvbm5lY3RlZAorCit1cGRhdGVBcHBsaWNhdGlvbl9wcm9ibGVtX2ZhaWxlZCBhcHBsaWNhdGlvbiBub3QgdXBkYXRlZAorCitwYWNrYWdlSW5zdGFsbGVyX3Byb2JsZW1fZmFpbGVkIHBhY2thZ2Ugbm90IGluc3RhbGxlZAorcGFja2FnZUluc3RhbGxlcl9wcm9ibGVtX3NhbWUgc2FtZSB2ZXJzaW9uCitwYWNrYWdlSW5zdGFsbGVyX3Byb2JsZW1fZG93bmdyYWRlIGRvd25ncmFkZSBub3QgYWxsb3dlZAorCitmaWxlRG93bmxvYWRlcl90aXRsZSBCUkxUVFkgRmlsZSBEb3dubG9hZGVyCitmaWxlRG93bmxvYWRlcl9wcm9ibGVtX2ZhaWxlZCBmaWxlIG5vdCBkb3dubG9hZGVkCitmaWxlRG93bmxvYWRlcl9zdGF0ZV9jb25uZWN0aW5nIGNvbm5lY3RpbmcKK2ZpbGVEb3dubG9hZGVyX3N0YXRlX2Rvd25sb2FkaW5nIGRvd25sb2FkaW5nCisKK3NldHRpbmdfc3RhdGVfb2ZmIE9mZgorY2hlY2tib3hfc3RhdGVfdW5jaGVja2VkIE5vCitjaGVja2JveF9zdGF0ZV9jaGVja2VkIFllcworCiticmFpbGxlX2NoYW5uZWxfbmFtZSBCcmFpbGxlIERldmljZSBTdGF0ZQorYnJhaWxsZV9oaW50X3RhcCB0YXAgZm9yIGFjdGlvbnMKK2JyYWlsbGVfc3RhdGVfcmVsZWFzZWQgUmVsZWFzZWQKK2JyYWlsbGVfc3RhdGVfd2FpdGluZyBXYWl0aW5nCiticmFpbGxlX3N0YXRlX2Nvbm5lY3RlZCBDb25uZWN0ZWQKKworR0xPQkFMX0JVVFRPTl9OT1RJRklDQVRJT05TIE5vdGlmaWNhdGlvbnMKK0dMT0JBTF9CVVRUT05fUVVJQ0tfU0VUVElOR1MgUXVpY2sgU2V0dGluZ3MKK0dMT0JBTF9CVVRUT05fQkFDSyBCYWNrCitHTE9CQUxfQlVUVE9OX0hPTUUgSG9tZQorR0xPQkFMX0JVVFRPTl9SRUNFTlRfQVBQUyBSZWNlbnQgQXBwcworR0xPQkFMX0JVVFRPTl9PVkVSVklFVyBPdmVydmlldworCitHTE9CQUxfQlVUVE9OX1NXSVRDSF9JTlBVVF9NRVRIT0QgU3dpdGNoIElucHV0IE1ldGhvZAorR0xPQkFMX0JVVFRPTl9WSUVXX1VTRVJfR1VJREUgVmlldyBVc2VyIEd1aWRlCitHTE9CQUxfQlVUVE9OX0JST1dTRV9XRUJfU0lURSBCcm93c2UgV2ViIFNpdGUKK0dMT0JBTF9CVVRUT05fQlJPV1NFX0NPTU1VTklUWV9NRVNTQUdFUyBCcm93c2UgQ29tbXVuaXR5IE1lc3NhZ2VzCitHTE9CQUxfQlVUVE9OX1BPU1RfQ09NTVVOSVRZX01FU1NBR0UgUG9zdCBDb21tdW5pdHkgTWVzc2FnZQorR0xPQkFMX0JVVFRPTl9NQU5BR0VfQ09NTVVOSVRZX01FTUJFUlNISVAgTWFuYWdlIENvbW11bml0eSBNZW1iZXJzaGlwCisKK0dMT0JBTF9CVVRUT05fVVBEQVRFX0FQUExJQ0FUSU9OIFVwZGF0ZSBBcHBsaWNhdGlvbgorR0xPQkFMX0NIRUNLQk9YX0RFVkVMT1BFUl9CVUlMRCBEZXZlbG9wZXIgQnVpbGQKK0dMT0JBTF9DSEVDS0JPWF9BTExPV19ET1dOR1JBREUgQWxsb3cgRG93bmdyYWRlCisKK0NIT09TRVJfVElUTEVfQUNDRVNTSUJJTElUWV9BQ1RJT05TIEFjY2Vzc2liaWxpdHkgQWN0aW9ucworCitTRVRUSU5HU19TQ1JFRU5fTUFJTiBCUkxUVFkgU2V0dGluZ3MKK1NFVFRJTkdTX1NDUkVFTl9HRU5FUkFMIEdlbmVyYWwgU2V0dGluZ3MKK1NFVFRJTkdTX1NDUkVFTl9NRVNTQUdFIE1lc3NhZ2UgU2V0dGluZ3MKK1NFVFRJTkdTX1NDUkVFTl9ERVZJQ0VTIE1hbmFnZSBEZXZpY2VzCitTRVRUSU5HU19TQ1JFRU5fQURWQU5DRUQgQWR2YW5jZWQgU2V0dGluZ3MKKworU0VUVElOR1NfQ0hFQ0tCT1hfUkVMRUFTRV9CUkFJTExFX0RFVklDRSBSZWxlYXNlIEJyYWlsbGUgRGV2aWNlCitTRVRUSU5HU19CVVRUT05fTkFWSUdBVElPTl9NT0RFIE5hdmlnYXRpb24gTW9kZQorU0VUVElOR1NfQlVUVE9OX1NQRUVDSF9TVVBQT1JUIFNwZWVjaCBTdXBwb3J0CisKK1NFVFRJTkdTX0JVVFRPTl9URVhUX1RBQkxFIFRleHQgVGFibGUKK1NFVFRJTkdTX0JVVFRPTl9BVFRSSUJVVEVTX1RBQkxFIEF0dHJpYnV0ZXMgVGFibGUKK1NFVFRJTkdTX0JVVFRPTl9DT05UUkFDVElPTl9UQUJMRSBDb250cmFjdGlvbiBUYWJsZQorU0VUVElOR1NfQlVUVE9OX0tFWUJPQVJEX1RBQkxFIEtleWJvYXJkIFRhYmxlCisKK1NFVFRJTkdTX0NIRUNLQk9YX1NIT1dfQUxFUlRTIFNob3cgQWxlcnRzCitTRVRUSU5HU19DSEVDS0JPWF9TSE9XX0FOTk9VTkNFTUVOVFMgU2hvdyBBbm5vdW5jZW1lbnRzCitTRVRUSU5HU19DSEVDS0JPWF9TSE9XX05PVElGSUNBVElPTlMgU2hvdyBOb3RpZmljYXRpb25zCisKK1NFVFRJTkdTX0JVVFRPTl9MT0dfTEVWRUwgTG9nIExldmVsCitTRVRUSU5HU19CVVRUT05fTE9HX0NBVEVHT1JJRVMgTG9nIENhdGVnb3JpZXMKK1NFVFRJTkdTX0NIRUNLQk9YX0xPR19BQ0NFU1NJQklMSVRZX0VWRU5UUyBMb2cgQWNjZXNzaWJpbGl0eSBFdmVudHMKK1NFVFRJTkdTX0NIRUNLQk9YX0xPR19SRU5ERVJFRF9TQ1JFRU4gTG9nIFJlbmRlcmVkIFNjcmVlbgorU0VUVElOR1NfQ0hFQ0tCT1hfTE9HX0tFWUJPQVJEX0VWRU5UUyBMb2cgS2V5Ym9hcmQgRXZlbnRzCitTRVRUSU5HU19DSEVDS0JPWF9MT0dfVU5IQU5ETEVEX0VWRU5UUyBMb2cgVW5oYW5kbGVkIEV2ZW50cworCitERVZJQ0VTX0JVVFRPTl9TRUxFQ1RFRCBTZWxlY3RlZCBEZXZpY2UKK0RFVklDRVNfQlVUVE9OX0FERCBBZGQgRGV2aWNlCitERVZJQ0VTX0JVVFRPTl9SRU1PVkUgUmVtb3ZlIERldmljZQorCitTRUxFQ1RFRF9ERVZJQ0VfTk9ORSBubyBkZXZpY2VzCitTRUxFQ1RFRF9ERVZJQ0VfVU5TRUxFQ1RFRCBkZXZpY2Ugbm90IHNlbGVjdGVkCisKK0FERF9ERVZJQ0VfTkFNRSBEZXZpY2UgTmFtZQorQUREX0RFVklDRV9NRVRIT0QgQ29tbXVuaWNhdGlvbiBNZXRob2QKK0FERF9ERVZJQ0VfU0VMRUNUIFNlbGVjdCBEZXZpY2UKK0FERF9ERVZJQ0VfRFJJVkVSIEJyYWlsbGUgRHJpdmVyCitBRERfREVWSUNFX0RPTkUgRG9uZQorQUREX0RFVklDRV9VTlNFTEVDVEVEX01FVEhPRCBjb21tdW5pY2F0aW9uIG1ldGhvZCBub3Qgc2VsZWN0ZWQKK0FERF9ERVZJQ0VfVU5TRUxFQ1RFRF9ERVZJQ0UgZGV2aWNlIG5vdCBzZWxlY3RlZAorQUREX0RFVklDRV9VTlNFTEVDVEVEX0RSSVZFUiBicmFpbGxlIGRyaXZlciBub3Qgc2VsZWN0ZWQKK0FERF9ERVZJQ0VfTk9fREVWSUNFUyBubyBkZXZpY2VzCitBRERfREVWSUNFX0RVUExJQ0FURV9OQU1FIGRldmljZSBuYW1lIGFscmVhZHkgaW4gdXNlCitBRERfREVWSUNFX05PX1BFUk1JU1NJT04gYWNjZXNzIHRvIGRldmljZSBub3QgZ3JhbnRlZAorCitSRU1PVkVfREVWSUNFX1BST01QVCBXb3VsZCB5b3UgcmVhbGx5IGxpa2UgdG8gcmVtb3ZlIHRoaXMgZGV2aWNlPworCitTRVRfU0VMRUNUSU9OX05PTkUgbm9uZSBzZWxlY3RlZAorCitOQVZJR0FUSU9OX01PREVfTEFCRUxfTGlzdCBWZXJ0aWNhbCBMaXN0CitOQVZJR0FUSU9OX01PREVfTEFCRUxfR3JpZCBUd28gRGltZW5zaW9uYWwgR3JpZAorCitTUEVFQ0hfU1VQUE9SVF9MQUJFTF9uYXRpdmUgTmF0aXZlCisKK0NPTU1VTklDQVRJT05fTUVUSE9EX0xBQkVMX0JsdWV0b290aCBCbHVldG9vdGgKK0NPTU1VTklDQVRJT05fTUVUSE9EX0xBQkVMX1VzYiBVU0IKK0NPTU1VTklDQVRJT05fTUVUSE9EX0xBQkVMX1NlcmlhbCBTZXJpYWwKKworTE9HX0xFVkVMX0xBQkVMX2RlYnVnIERlYnVnCitMT0dfTEVWRUxfTEFCRUxfaW5mb3JtYXRpb24gSW5mb3JtYXRpb24KK0xPR19MRVZFTF9MQUJFTF9ub3RpY2UgTm90aWNlCitMT0dfTEVWRUxfTEFCRUxfd2FybmluZyBXYXJuaW5nCitMT0dfTEVWRUxfTEFCRUxfZXJyb3IgRXJyb3IKK0xPR19MRVZFTF9MQUJFTF9jcml0aWNhbCBDcml0aWNhbAorTE9HX0xFVkVMX0xBQkVMX2FsZXJ0IEFsZXJ0CitMT0dfTEVWRUxfTEFCRUxfZW1lcmdlbmN5IEVtZXJnZW5jeQorCitMT0dfQ0FURUdPUllfTEFCRUxfaW5wa3RzIElucHV0IFBhY2tldHMKK0xPR19DQVRFR09SWV9MQUJFTF9vdXRwa3RzIE91dHB1dCBQYWNrZXRzCitMT0dfQ0FURUdPUllfTEFCRUxfYnJsa2V5cyBCcmFpbGxlIERldmljZSBLZXkgRXZlbnRzCitMT0dfQ0FURUdPUllfTEFCRUxfa2Jka2V5cyBLZXlib2FyZCBLZXkgRXZlbnRzCitMT0dfQ0FURUdPUllfTEFCRUxfY3NydHJrIEN1cnNvciBUcmFja2luZworTE9HX0NBVEVHT1JZX0xBQkVMX2NzcnJ0ZyBDdXJzb3IgUm91dGluZworTE9HX0NBVEVHT1JZX0xBQkVMX3VwZGF0ZSBVcGRhdGUgRXZlbnRzCitMT0dfQ0FURUdPUllfTEFCRUxfc3BlZWNoIFNwZWVjaCBFdmVudHMKK0xPR19DQVRFR09SWV9MQUJFTF9hc3luYyBBc3luYyBFdmVudHMKK0xPR19DQVRFR09SWV9MQUJFTF9zZXJ2ZXIgU2VydmVyIEV2ZW50cworTE9HX0NBVEVHT1JZX0xBQkVMX2dpbyBHZW5lcmljIEkvTworTE9HX0NBVEVHT1JZX0xBQkVMX3NlcmlhbCBTZXJpYWwgSS9PCitMT0dfQ0FURUdPUllfTEFCRUxfdXNiIFVTQiBJL08KK0xPR19DQVRFR09SWV9MQUJFTF9idCBCbHVldG9vdGggSS9PCitMT0dfQ0FURUdPUllfTEFCRUxfaGlkIEh1bWFuIEludGVyZmFjZSBJL08KK0xPR19DQVRFR09SWV9MQUJFTF9icmxkcnYgQnJhaWxsZSBEcml2ZXIgRXZlbnRzCitMT0dfQ0FURUdPUllfTEFCRUxfc3BrZHJ2IFNwZWVjaCBEcml2ZXIgRXZlbnRzCitMT0dfQ0FURUdPUllfTEFCRUxfc2NyZHJ2IFNjcmVlbiBEcml2ZXIgRXZlbnRzCisKK0JSQUlMTEVfRFJJVkVSX0xBQkVMX2F1dG8gYXV0b2RldGVjdAorCitURVhUX1RBQkxFX0xBQkVMX2F1dG8gbG9jYWxlLWJhc2VkIGF1dG9zZWxlY3Rpb24KK1RFWFRfVEFCTEVfTEFCRUxfYXIgQXJhYmljIChnZW5lcmljKQorVEVYVF9UQUJMRV9MQUJFTF9hcyBBc3NhbWVzZQorVEVYVF9UQUJMRV9MQUJFTF9hd2EgQXdhZGhpCitURVhUX1RBQkxFX0xBQkVMX2JnIEJ1bGdhcmlhbgorVEVYVF9UQUJMRV9MQUJFTF9iaCBCaWhhcmkKK1RFWFRfVEFCTEVfTEFCRUxfYm4gQmVuZ2FsaQorVEVYVF9UQUJMRV9MQUJFTF9ibyBUaWJldGFuCitURVhUX1RBQkxFX0xBQkVMX2JyYSBCcmFqCitURVhUX1RBQkxFX0xBQkVMX2JyZiBCcmFpbGxlIFJlYWR5IEZvcm1hdCAoZm9yIHZpZXdpbmcgLmJyZiBmaWxlcyB3aXRoaW4gYW4gZWRpdG9yIG9yIHBhZ2VyKQorVEVYVF9UQUJMRV9MQUJFTF9jcyBDemVjaAorVEVYVF9UQUJMRV9MQUJFTF9jeSBXZWxzaAorVEVYVF9UQUJMRV9MQUJFTF9kYSBEYW5pc2gKK1RFWFRfVEFCTEVfTEFCRUxfZGFfMTI1MiBEYW5pc2ggKFN2ZW5kIFRob3VnYWFyZCwgMjAwMuKAkzEx4oCTMTgpCitURVhUX1RBQkxFX0xBQkVMX2RhX2x0IERhbmlzaCAoTG9nVGV4dCkKK1RFWFRfVEFCTEVfTEFCRUxfZGUgR2VybWFuCitURVhUX1RBQkxFX0xBQkVMX2RyYSBEcmF2aWRpYW4KK1RFWFRfVEFCTEVfTEFCRUxfZWwgR3JlZWsKK1RFWFRfVEFCTEVfTEFCRUxfZW4gRW5nbGlzaAorVEVYVF9UQUJMRV9MQUJFTF9lbl9DQSBFbmdsaXNoIChDYW5hZGEpCitURVhUX1RBQkxFX0xBQkVMX2VuX0dCIEVuZ2xpc2ggKFVuaXRlZCBLaW5nZG9tKQorVEVYVF9UQUJMRV9MQUJFTF9lbl9uYWJjYyBFbmdsaXNoIChOb3J0aCBBbWVyaWNhbiBCcmFpbGxlIENvbXB1dGVyIENvZGUpCitURVhUX1RBQkxFX0xBQkVMX2VuX1VTIEVuZ2xpc2ggKFVuaXRlZCBTdGF0ZXMpCitURVhUX1RBQkxFX0xBQkVMX2VvIEVzcGVyYW50bworVEVYVF9UQUJMRV9MQUJFTF9lcyBTcGFuaXNoCitURVhUX1RBQkxFX0xBQkVMX2V0IEVzdG9uaWFuCitURVhUX1RBQkxFX0xBQkVMX2ZpIEZpbm5pc2gKK1RFWFRfVEFCTEVfTEFCRUxfZnIgRnJlbmNoCitURVhUX1RBQkxFX0xBQkVMX2ZyXzIwMDcgRnJlbmNoICh1bmlmaWVkIDIwMDcpCitURVhUX1RBQkxFX0xBQkVMX2ZyX0NBIEZyZW5jaCAoQ2FuYWRhKQorVEVYVF9UQUJMRV9MQUJFTF9mcl9jYmlmcyBGcmVuY2ggKENvZGUgQnJhaWxsZSBJbmZvcm1hdGlxdWUgRnJhbsOnYWlzIFN0YW5kYXJkKQorVEVYVF9UQUJMRV9MQUJFTF9mcl9GUiBGcmVuY2ggKEZyYW5jZSkKK1RFWFRfVEFCTEVfTEFCRUxfZnJfdnMgRnJlbmNoIChWaXNpb0JyYWlsbGUpCitURVhUX1RBQkxFX0xBQkVMX2dhIElyaXNoCitURVhUX1RBQkxFX0xBQkVMX2dkIEdhZWxpYworVEVYVF9UQUJMRV9MQUJFTF9nb24gR29uZGkKK1RFWFRfVEFCTEVfTEFCRUxfZ3UgR3VqYXJhdGkKK1RFWFRfVEFCTEVfTEFCRUxfaGUgSGVicmV3CitURVhUX1RBQkxFX0xBQkVMX2hpIEhpbmRpCitURVhUX1RBQkxFX0xBQkVMX2hyIENyb2F0aWFuCitURVhUX1RBQkxFX0xBQkVMX2h1IEh1bmdhcmlhbgorVEVYVF9UQUJMRV9MQUJFTF9oeSBBcm1lbmlhbgorVEVYVF9UQUJMRV9MQUJFTF9pcyBJY2VsYW5kaWMKK1RFWFRfVEFCTEVfTEFCRUxfaXQgSXRhbGlhbgorVEVYVF9UQUJMRV9MQUJFTF9raGEgS2hhc2kKK1RFWFRfVEFCTEVfTEFCRUxfa24gS2FubmFkYQorVEVYVF9UQUJMRV9MQUJFTF9rb2sgS29ua2FuaQorVEVYVF9UQUJMRV9MQUJFTF9rcnUgS3VydWtoCitURVhUX1RBQkxFX0xBQkVMX2x0IExpdHVhbmlhbgorVEVYVF9UQUJMRV9MQUJFTF9sdiBMYXR2aWFuCitURVhUX1RBQkxFX0xBQkVMX21nIE1hbGFnYXN5CitURVhUX1RBQkxFX0xBQkVMX21pIE1hb3JpCitURVhUX1RBQkxFX0xBQkVMX21sIE1hbGF5YWxhbQorVEVYVF9UQUJMRV9MQUJFTF9tbmkgTWFuaXB1cmkKK1RFWFRfVEFCTEVfTEFCRUxfbXIgTWFyYXRoaQorVEVYVF9UQUJMRV9MQUJFTF9tdCBNYWx0ZXNlCitURVhUX1RBQkxFX0xBQkVMX211biBNdW5kYQorVEVYVF9UQUJMRV9MQUJFTF9td3IgTWFyd2FyaQorVEVYVF9UQUJMRV9MQUJFTF9uZSBOZXBhbGkKK1RFWFRfVEFCTEVfTEFCRUxfbmV3IE5ld2FyaQorVEVYVF9UQUJMRV9MQUJFTF9ubCBEdXRjaAorVEVYVF9UQUJMRV9MQUJFTF9ubF9CRSBEdXRjaCAoQmVsZ2l1bSkKK1RFWFRfVEFCTEVfTEFCRUxfbmxfTkwgRHV0Y2ggKE5ldGhlcmxhbmRzKQorVEVYVF9UQUJMRV9MQUJFTF9ubyBOb3J3ZWdpYW4KK1RFWFRfVEFCTEVfTEFCRUxfbm9fZ2VuZXJpYyBOb3J3ZWdpYW4gKHdpdGggc3VwcG9ydCBmb3Igb3RoZXIgbGFuZ3VhZ2VzKQorVEVYVF9UQUJMRV9MQUJFTF9ub19vdXAgTm9yd2VnaWFuIChPZmZlbnRsaWcgdXR2YWxnIGZvciBwdW5rdHNrcmlmdCkKK1RFWFRfVEFCTEVfTEFCRUxfbndjIE5ld2FyaSAob2xkKQorVEVYVF9UQUJMRV9MQUJFTF9vciBPcml5YQorVEVYVF9UQUJMRV9MQUJFTF9wYSBQYW5qYWJpCitURVhUX1RBQkxFX0xBQkVMX3BpIFBhbGkKK1RFWFRfVEFCTEVfTEFCRUxfcGwgUG9saXNoCitURVhUX1RBQkxFX0xBQkVMX3B0IFBvcnR1Z3Vlc2UKK1RFWFRfVEFCTEVfTEFCRUxfcm8gUm9tYW5pYW4KK1RFWFRfVEFCTEVfTEFCRUxfcnUgUnVzc2lhbgorVEVYVF9UQUJMRV9MQUJFTF9zYSBTYW5za3JpdAorVEVYVF9UQUJMRV9MQUJFTF9zYXQgU2FudGFsaQorVEVYVF9UQUJMRV9MQUJFTF9zZCBTaW5kaGkKK1RFWFRfVEFCTEVfTEFCRUxfc2UgU2FtaSAoTm9ydGhlcm4pCitURVhUX1RBQkxFX0xBQkVMX3NrIFNsb3ZhaworVEVYVF9UQUJMRV9MQUJFTF9zbCBTbG92ZW5pYW4KK1RFWFRfVEFCTEVfTEFCRUxfc3YgU3dlZGlzaAorVEVYVF9UQUJMRV9MQUJFTF9zdl8xOTg5IFN3ZWRpc2ggKDE5ODkgc3RhbmRhcmQpCitURVhUX1RBQkxFX0xBQkVMX3N2XzE5OTYgU3dlZGlzaCAoMTk5NiBzdGFuZGFyZCkKK1RFWFRfVEFCTEVfTEFCRUxfc3cgU3dhaGlsaQorVEVYVF9UQUJMRV9MQUJFTF90YSBUYW1pbAorVEVYVF9UQUJMRV9MQUJFTF90ZSBUZWx1Z3UKK1RFWFRfVEFCTEVfTEFCRUxfdHIgVHVya2lzaAorVEVYVF9UQUJMRV9MQUJFTF91ayBVa3JhaW5pYW4KK1RFWFRfVEFCTEVfTEFCRUxfdmkgVmlldG5hbWVzZQorCitBVFRSSUJVVEVTX1RBQkxFX0xBQkVMX2ludmxlZnRfcmlnaHQgaW52ZXJzZSBmb3JlZ3JvdW5kIGNvbG91ciBpbiB0aGUgbGVmdCBjb2x1bW4gYW5kIGJhY2tncm91bmQgY29sb3VyIGluIHRoZSByaWdodCBjb2x1bW4KK0FUVFJJQlVURVNfVEFCTEVfTEFCRUxfbGVmdF9yaWdodCBmb3JlZ3JvdW5kIGNvbG91ciBpbiB0aGUgbGVmdCBjb2x1bW4gYW5kIGJhY2tncm91bmQgY29sb3VyIGluIHRoZSByaWdodCBjb2x1bW4KK0FUVFJJQlVURVNfVEFCTEVfTEFCRUxfdXBwZXJfbG93ZXIgZm9yZWdyb3VuZCBjb2xvdXIgaW4gdGhlIHVwcGVyIHNxdWFyZSBhbmQgYmFja2dyb3VuZCBjb2xvdXIgaW4gdGhlIGxvd2VyIHNxdWFyZQorCitDT05UUkFDVElPTl9UQUJMRV9MQUJFTF9hdXRvIGxvY2FsZS1iYXNlZCBhdXRvc2VsZWN0aW9uCitDT05UUkFDVElPTl9UQUJMRV9MQUJFTF9hZiBBZnJpa2FhbnMgKGNvbnRyYWN0ZWQpCitDT05UUkFDVElPTl9UQUJMRV9MQUJFTF9hbSBBbWhhcmljICh1bmNvbnRyYWN0ZWQpCitDT05UUkFDVElPTl9UQUJMRV9MQUJFTF9kZSBHZXJtYW4KK0NPTlRSQUNUSU9OX1RBQkxFX0xBQkVMX2RlX2cwIEdlcm1hbiAodW5jb250cmFjdGVkKQorQ09OVFJBQ1RJT05fVEFCTEVfTEFCRUxfZGVfZzEgR2VybWFuIChiYXNpYyBjb250cmFjdGlvbnMpCitDT05UUkFDVElPTl9UQUJMRV9MQUJFTF9kZV9nMiBHZXJtYW4gKGNvbnRyYWN0ZWQpCitDT05UUkFDVElPTl9UQUJMRV9MQUJFTF9kZV8xOTk4IEdlcm1hbiAoY29udHJhY3RlZCAtIDE5OTggc3RhbmRhcmQpCitDT05UUkFDVElPTl9UQUJMRV9MQUJFTF9kZV8yMDE1IEdlcm1hbiAoY29udHJhY3RlZCAtIDIwMTUgc3RhbmRhcmQpCitDT05UUkFDVElPTl9UQUJMRV9MQUJFTF9lbiBFbmdsaXNoCitDT05UUkFDVElPTl9UQUJMRV9MQUJFTF9lbl9VUyBFbmdsaXNoIChVbml0ZWQgU3RhdGVzKQorQ09OVFJBQ1RJT05fVEFCTEVfTEFCRUxfZW5fdWViX2cxIEVuZ2xpc2ggKFVuaWZpZWQsIHVuY29udHJhY3RlZCkKK0NPTlRSQUNUSU9OX1RBQkxFX0xBQkVMX2VuX3VlYl9nMiBFbmdsaXNoIChVbmlmaWVkLCBjb250cmFjdGVkKQorQ09OVFJBQ1RJT05fVEFCTEVfTEFCRUxfZW5fdXNfZzIgRW5nbGlzaCAoVW5pdGVkIFN0YXRlcywgY29udHJhY3RlZCkKK0NPTlRSQUNUSU9OX1RBQkxFX0xBQkVMX2VzIFNwYW5pc2ggKGNvbnRyYWN0ZWQpCitDT05UUkFDVElPTl9UQUJMRV9MQUJFTF9mciBGcmVuY2gKK0NPTlRSQUNUSU9OX1RBQkxFX0xBQkVMX2ZyX2cxIEZyZW5jaCAodW5jb250cmFjdGVkKQorQ09OVFJBQ1RJT05fVEFCTEVfTEFCRUxfZnJfZzIgRnJlbmNoIChjb250cmFjdGVkKQorQ09OVFJBQ1RJT05fVEFCTEVfTEFCRUxfaGEgSGF1c2EgKGNvbnRyYWN0ZWQpCitDT05UUkFDVElPTl9UQUJMRV9MQUJFTF9pZCBJbmRvbmVzaWFuIChjb250cmFjdGVkKQorQ09OVFJBQ1RJT05fVEFCTEVfTEFCRUxfaXBhIEludGVybmF0aW9uYWwgUGhvbmV0aWMgQWxwaGFiZXQKK0NPTlRSQUNUSU9OX1RBQkxFX0xBQkVMX2phIEphcGFuZXNlICh1bmNvbnRyYWN0ZWQpCitDT05UUkFDVElPTl9UQUJMRV9MQUJFTF9rbyBLb3JlYW4KK0NPTlRSQUNUSU9OX1RBQkxFX0xBQkVMX2tvX2cwIEtvcmVhbiAodW5jb250cmFjdGVkKQorQ09OVFJBQ1RJT05fVEFCTEVfTEFCRUxfa29fZzEgS29yZWFuIChwYXJ0aWFsbHkgY29udHJhY3RlZCkKK0NPTlRSQUNUSU9OX1RBQkxFX0xBQkVMX2tvX2cyIEtvcmVhbiAoY29udHJhY3RlZCkKK0NPTlRSQUNUSU9OX1RBQkxFX0xBQkVMX2x0IExpdGh1YW5pYW4gKHVuY29udHJhY3RlZCkKK0NPTlRSQUNUSU9OX1RBQkxFX0xBQkVMX21nIE1hbGFnYXN5IChjb250cmFjdGVkKQorQ09OVFJBQ1RJT05fVEFCTEVfTEFCRUxfbXVuIE11bmRhIChjb250cmFjdGVkKQorQ09OVFJBQ1RJT05fVEFCTEVfTEFCRUxfbmwgRHV0Y2ggKGNvbnRyYWN0ZWQpCitDT05UUkFDVElPTl9UQUJMRV9MQUJFTF9ueSBDaGljaGV3YSAoY29udHJhY3RlZCkKK0NPTlRSQUNUSU9OX1RBQkxFX0xBQkVMX3B0IFBvcnR1Z3Vlc2UgKGNvbnRyYWN0ZWQpCitDT05UUkFDVElPTl9UQUJMRV9MQUJFTF9ydSBSdXNzaWFuIChjb250cmFjdGVkKQorQ09OVFJBQ1RJT05fVEFCTEVfTEFCRUxfc2kgU2luaGFsZXNlICh1bmNvbnRyYWN0ZWQpCitDT05UUkFDVElPTl9UQUJMRV9MQUJFTF9zdyBTd2FoaWxpIChjb250cmFjdGVkKQorQ09OVFJBQ1RJT05fVEFCTEVfTEFCRUxfdGggVGhhaSAoY29udHJhY3RlZCkKK0NPTlRSQUNUSU9OX1RBQkxFX0xBQkVMX3poX1RXIENoaW5lc2UgKFRhaXdhbiwgdW5jb250cmFjdGVkKQorQ09OVFJBQ1RJT05fVEFCTEVfTEFCRUxfenUgWnVsdSAoY29udHJhY3RlZCkKKworS0VZQk9BUkRfVEFCTEVfTEFCRUxfYnJhaWxsZSBiaW5kaW5ncyBmb3IgYnJhaWxsZSBrZXlib2FyZHMKK0tFWUJPQVJEX1RBQkxFX0xBQkVMX2Rlc2t0b3AgYmluZGluZ3MgZm9yIGZ1bGwga2V5Ym9hcmRzCitLRVlCT0FSRF9UQUJMRV9MQUJFTF9rZXlwYWQgYmluZGluZ3MgZm9yIGtleXBhZC1iYXNlZCBuYXZpZ2F0aW9uCitLRVlCT0FSRF9UQUJMRV9MQUJFTF9sYXB0b3AgYmluZGluZ3MgZm9yIGtleWJvYXJkcyB3aXRob3V0IGEga2V5cGFkCitLRVlCT0FSRF9UQUJMRV9MQUJFTF9zdW5fdHlwZTYgYmluZGluZ3MgZm9yIFN1biBUeXBlIDYga2V5Ym9hcmRzCmRpZmYgLS1naXQgYS9BbmRyb2lkL1RSQU5TTEFUT1JTIGIvQW5kcm9pZC9UUkFOU0xBVE9SUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZWI2MjE4Ci0tLSAvZGV2L251bGwKKysrIGIvQW5kcm9pZC9UUkFOU0xBVE9SUwpAQCAtMCwwICsxLDE4IEBACithciBJa3JhbWkgQWhtYWQgPGlrcmFtaUBibGluZC5nb3YucWE+CitjcyBQZXRyIMWYZWjDoWsgPFJlaGFrQGFkYXB0ZWNoLmN6PgorZGEgT2xlIEd1bGRiZXJnIDxPbGVAb21nd3RmLmRrPgorZGUgRGlldG1hciBTZWdiZXJ0IDxEaWV0bWFyU2VnYmVydEBHTVguZGU+CitkZSBNYXJpbyBMYW5nIDxNTGFuZ0BibGluZC5ndXJ1PgorZGUgTmVybWluIEhhc2ljIDxuZXJtaW4taGFzaWNAZ214LmRlPgorZW4gRGF2ZSBNaWVsa2UgPERhdmVATWllbGtlLmNjPgorZXMgVG9ueSBIZXJuYW5kZXogPFRvbnlIU3BlYWtzQEdNYWlsLmNvbT4KK2ZhIFJlemEgSW1hbnkgPGltYW55LnJlemExQGdtYWlsLmNvbT4KK2ZpIEphbmkgS2lubnVuZW4gPEphbmkuS2lubnVuZW5Ad2lwcGllcy5maT4KK2ZyIEplYW4tUGhpbGlwcGUgTWVuZ3VhbCA8anBtZW5ndWFsQGRlYmlhbi5vcmc+CitpdCBPbGxpZSBNYWxsYXJkIDxNYWxsYXJkQGtpbWFiZS5ldT4KK25iIEhlbGdlIEhhdm5lZ2plcmRlIDxIZWxnZS5IYXZuZWdqZXJkZUBnZXRtYWlsLm5vPgorbmwgTWlyYW5kYSBXb3Vkc3RyYSA8TWlyYW4uV291ZHN0cmFAZ21haWwuY29tPgorcnUgTmlraXRhIFRzZXlrb3ZldHMgPFRzZWlrb3ZldHNAcmFtYmxlci5ydT4KK3NsIEouRyA8Sm96a28uR3JlZ29yY0BndWVzdC5hcm5lcy5zaT4KK3RyIEVyacWfaWxlYmlsaXIgQW5kcm9pZCBFa2liaSA8YmlsZ2lAZXJpc2lsZWJpbGlyYW5kcm9pZC5jb20+Cit6aCDpq5jnlJ/ml7ogPENvc2NlbGxAbW9sZXJhdC5uZXQ+CmRpZmYgLS1naXQgYS9BbmRyb2lkL1Rvb2xzL2ZpeHN0cmluZ3MgYi9BbmRyb2lkL1Rvb2xzL2ZpeHN0cmluZ3MKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMDkzZjUzMAotLS0gL2Rldi9udWxsCisrKyBiL0FuZHJvaWQvVG9vbHMvZml4c3RyaW5ncwpAQCAtMCwwICsxLDEwIEBACisjIS9iaW4vYmFzaAorc2V0IC1lCisKK3NlZCAtZSAnCitzLyQvPFwvc3RyaW5nPi8KK3MvIC8iPi8KK3MvXi8gIDxzdHJpbmcgbmFtZT0iLworJyAtaSAiJHtAfSIKKworZXhpdCAwCmRpZmYgLS1naXQgYS9BbmRyb2lkL1Rvb2xzL21raWNvbnMgYi9BbmRyb2lkL1Rvb2xzL21raWNvbnMKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNGVhYmJiZAotLS0gL2Rldi9udWxsCisrKyBiL0FuZHJvaWQvVG9vbHMvbWtpY29ucwpAQCAtMCwwICsxLDQ5IEBACisjIS9iaW4vc2gKK3NldCAtZQorCityZWFkb25seSBwcm9ncmFtTmFtZT0iJHswIyMqL30iCisKK3Byb2dyYW1NZXNzYWdlKCkgeworICBsb2NhbCBtZXNzYWdlPSIkezF9IgorCisgIGVjaG8gIiR7cHJvZ3JhbU5hbWV9OiAke21lc3NhZ2V9IgorfQorCitzeW50YXhFcnJvcigpIHsKKyAgbG9jYWwgbWVzc2FnZT0iJHsxfSIKKworICBwcm9ncmFtTWVzc2FnZSAiJHttZXNzYWdlfSIKKyAgZXhpdCAyCit9CisKK3NlbWFudGljRXJyb3IoKSB7CisgIGxvY2FsIG1lc3NhZ2U9IiR7MX0iCisKKyAgcHJvZ3JhbU1lc3NhZ2UgIiR7bWVzc2FnZX0iCisgIGV4aXQgMworfQorCittYWtlSWNvbigpIHsKKyAgbG9jYWwgbmFtZT0iJHsxfSIKKyAgbG9jYWwgc2l6ZT0iJHsyfSIKKworICBjb252ZXJ0ICIke2ltYWdlRmlsZX0iIC1yZXNpemUgIiR7c2l6ZX0iICJyZXMvZHJhd2FibGUtJHtuYW1lfS8ke2ltYWdlTmFtZX0ucG5nIgorfQorCitbICIkeyN9IiAtZ2UgMSBdIHx8IHN5bnRheEVycm9yICJtaXNzaW5nIGltYWdlIGZpbGUiCitpbWFnZUZpbGU9IiR7MX0iCitzaGlmdCAxCisKK1sgIiR7I30iIC1lcSAwIF0gfHwgc3ludGF4RXJyb3IgInRvbyBtYW55IHBhcmFtZXRlcnMiCisKK1sgLWYgIiR7aW1hZ2VGaWxlfSIgXSB8fCBzZW1hbnRpY0Vycm9yICJpbWFnZSBmaWxlIG5vdCBmb3VuZDogJHtpbWFnZUZpbGV9IgorWyAtciAiJHtpbWFnZUZpbGV9IiBdIHx8IHNlbWFudGljRXJyb3IgImltYWdlIGZpbGUgbm90IHJlYWRhYmxlOiAke2ltYWdlRmlsZX0iCisKK2ltYWdlTmFtZT0iJHtpbWFnZUZpbGUlLip9IgorCittYWtlSWNvbiBsZHBpIDM2eDM2CittYWtlSWNvbiBtZHBpIDQ4eDQ4CittYWtlSWNvbiBoZHBpIDcyeDcyCittYWtlSWNvbiB4aGRwaSA5Nng5NgorCitleGl0IDAKZGlmZiAtLWdpdCBhL0FuZHJvaWQvVG9vbHMvbWtzZXR0aW5ncyBiL0FuZHJvaWQvVG9vbHMvbWtzZXR0aW5ncwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4zNzc3NWEzCi0tLSAvZGV2L251bGwKKysrIGIvQW5kcm9pZC9Ub29scy9ta3NldHRpbmdzCkBAIC0wLDAgKzEsMTcwIEBACisjIS91c3IvYmluL2VudiB0Y2xzaAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorIyAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyMKKyMgQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorIworIyBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorIworIyBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisjIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyMgbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisjCisjIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK3NvdXJjZSBbZmlsZSBqb2luIFtmaWxlIGRpcm5hbWUgW2luZm8gc2NyaXB0XV0gInByb2xvZ3VlLnRjbCJdCisKK3Byb2MgbG9hZFByb3BlcnRpZXMge2ZpbGUgbmFtZXN9IHsKKyAgIHNldCBwcm9wZXJ0aWVzIFtkaWN0IGNyZWF0ZV0KKworICAgc2V0IGNvbW1lbnQgIworICAgc2V0IHBhdHRlcm4ge159CisgICBhcHBlbmQgcGF0dGVybiAiJHtjb21tZW50fShbam9pbiAkbmFtZXMgfF0pIgorICAgYXBwZW5kIHBhdHRlcm4gIlxccysoXFteXFxzJHtjb21tZW50fVxdKykiCisgICBhcHBlbmQgcGF0dGVybiAiXFxzKig/OiR7Y29tbWVudH1cXHMqKC4qPykpPyIKKyAgIGFwcGVuZCBwYXR0ZXJuIHtccyokfQorCisgICBmb3JFYWNoTGluZSByZWNvcmQgJGZpbGUgeworICAgICAgaWYge1tyZWdleHAgJHBhdHRlcm4gJHJlY29yZCB4IG5hbWUgY29kZSBsYWJlbF19IHsKKyAgICAgICAgIGlmIHtbc3RyaW5nIGxlbmd0aCAkbGFiZWxdID09IDB9IHsKKyAgICAgICAgICAgIHNldCBsYWJlbCAkY29kZQorICAgICAgICAgfSBlbHNlaWYge1tzZXQgaW5kZXggW3N0cmluZyBmaXJzdCAiOyIgJGxhYmVsXV0gPj0gMH0geworICAgICAgICAgICAgc2V0IGxhYmVsIFtzdHJpbmcgcmVwbGFjZSAkbGFiZWwgJGluZGV4IGVuZF0KKyAgICAgICAgIH0KKworICAgICAgICAgZGljdCBzZXQgcHJvcGVydGllcyAkbmFtZSAkY29kZSAkbGFiZWwKKyAgICAgIH0KKyAgIH0KKworICAgcmV0dXJuICRwcm9wZXJ0aWVzCit9CisKK3Byb2MgY29tcGFyZUtleXMge2RpY3Rpb25hcnkga2V5MSBrZXkyfSB7CisgICBzZXQgdGV4dDEgW2RpY3QgZ2V0ICRkaWN0aW9uYXJ5ICRrZXkxXQorICAgc2V0IHRleHQyIFtkaWN0IGdldCAkZGljdGlvbmFyeSAka2V5Ml0KKworICAgc2V0IGNhcGl0YWxpemVkMSBbc3RyaW5nIGlzIHVwcGVyIC1zdHJpY3QgW3N0cmluZyBpbmRleCAkdGV4dDEgMF1dCisgICBzZXQgY2FwaXRhbGl6ZWQyIFtzdHJpbmcgaXMgdXBwZXIgLXN0cmljdCBbc3RyaW5nIGluZGV4ICR0ZXh0MiAwXV0KKworICAgaWYgeyEkY2FwaXRhbGl6ZWQxICYmICRjYXBpdGFsaXplZDJ9IHsKKyAgICAgIHJldHVybiAtMQorICAgfQorCisgICBpZiB7JGNhcGl0YWxpemVkMSAmJiAhJGNhcGl0YWxpemVkMn0geworICAgICAgcmV0dXJuIDEKKyAgIH0KKworICAgcmV0dXJuIFtzdHJpbmcgY29tcGFyZSAka2V5MSAka2V5Ml0KK30KKworcHJvYyBtYWtlU3RyaW5nQXJyYXkge25hbWUgaXRlbXN9IHsKKyAgIHNldCBsaW5lcyBbbGlzdF0KKyAgIGxhcHBlbmQgbGluZXMgIiAgPHN0cmluZy1hcnJheSBuYW1lPVwiJG5hbWVcIj4iCisKKyAgIGZvcmVhY2ggaXRlbSAkaXRlbXMgeworICAgICAgbGFwcGVuZCBsaW5lcyAiICAgIDxpdGVtPiRpdGVtPC9pdGVtPiIKKyAgIH0KKworICAgbGFwcGVuZCBsaW5lcyAiICA8L3N0cmluZy1hcnJheT4iCisgICByZXR1cm4gJGxpbmVzCit9CisKK3Byb2MgbWFrZVJlc291cmNlTGluZXMge3Byb3BlcnRpZXMgbmFtZX0geworICAgc2V0IHByb3BlcnR5IFtkaWN0IGdldCAkcHJvcGVydGllcyAkbmFtZV0KKyAgIHNldCBwcmVmaXggIltzdHJpbmcgdG91cHBlciBbc3RyaW5nIG1hcCB7LSBffSAkbmFtZV1dXyIKKworICAgc2V0IGxpbmVzIFtsaXN0XQorICAgbGFwcGVuZCBsaW5lcyB7PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz59CisKKyAgIGxhcHBlbmQgbGluZXMgIiIKKyAgIGxhcHBlbmQgbGluZXMgIjwhLS0gZ2VuZXJhdGVkIGZyb20gJDo6aW5wdXRGaWxlIGJ5IFtmaWxlIHRhaWwgW2luZm8gc2NyaXB0XV0gLS0+IgorICAgbGFwcGVuZCBsaW5lcyAiPCEtLSBjaGFuZ2VzIG1hZGUgaGVyZSB3aWxsIGJlIG92ZXJ3cml0dGVuIC0tPiIKKworICAgbGFwcGVuZCBsaW5lcyAiIgorICAgbGFwcGVuZCBsaW5lcyAiPHJlc291cmNlcz4iCisKKyAgIHNldCBjb2RlcyBbbGlzdF0KKyAgIHNldCBsYWJlbHMgW2xpc3RdCisKKyAgIGZvcmVhY2ggY29kZSBbbHNvcnQgLWNvbW1hbmQgW2xpc3QgY29tcGFyZUtleXMgJHByb3BlcnR5XSBbZGljdCBrZXlzICRwcm9wZXJ0eV1dIHsKKyAgICAgIHNldCB0cmFuc2xhdGFibGUgInRydWUiCisKKyAgICAgIGlmIHshW3N0cmluZyBlcXVhbCAkY29kZSAiYXV0byJdfSB7CisgICAgICAgICBpZiB7W3N0cmluZyBlcXVhbCAkbmFtZSAiYnJhaWxsZS1kcml2ZXIiXX0geworICAgICAgICAgICAgc2V0IHRyYW5zbGF0YWJsZSAiZmFsc2UiCisgICAgICAgICB9CisgICAgICB9CisKKyAgICAgIGlmIHtbc3RyaW5nIGVxdWFsICRjb2RlIG9mZl19IHsKKyAgICAgICAgIGx2YXJwdXNoIGNvZGVzICRjb2RlCisgICAgICAgICBsdmFycHVzaCBsYWJlbHMgIkBzdHJpbmcvc2V0dGluZ19zdGF0ZV8kY29kZSIKKyAgICAgICAgIGNvbnRpbnVlCisgICAgICB9CisKKyAgICAgIHNldCBsYWJlbCAiJHtwcmVmaXh9TEFCRUxfW3N0cmluZyBtYXAgey0gX30gJGNvZGVdIgorICAgICAgbGFwcGVuZCBsYWJlbHMgIkBzdHJpbmcvJGxhYmVsIgorICAgICAgbGFwcGVuZCBjb2RlcyAkY29kZQorCisgICAgICBsYXBwZW5kIGxpbmVzICIgIDxzdHJpbmcgbmFtZT1cIiRsYWJlbFwiIHRyYW5zbGF0YWJsZT1cIiR0cmFuc2xhdGFibGVcIj5bZGljdCBnZXQgJHByb3BlcnR5ICRjb2RlXTwvc3RyaW5nPiIKKyAgIH0KKworICAgbGFwcGVuZCBsaW5lcyAiIgorICAgbHZhcmNhdCBsaW5lcyBbbWFrZVN0cmluZ0FycmF5ICIke3ByZWZpeH1MQUJFTFMiICRsYWJlbHNdCisKKyAgIGxhcHBlbmQgbGluZXMgIiIKKyAgIGx2YXJjYXQgbGluZXMgW21ha2VTdHJpbmdBcnJheSAiJHtwcmVmaXh9VkFMVUVTIiAkY29kZXNdCisKKyAgIGxhcHBlbmQgbGluZXMgIjwvcmVzb3VyY2VzPiIKKyAgIHJldHVybiAkbGluZXMKK30KKworc2V0IG9wdGlvbkRlZmluaXRpb25zIHsKK30KKworcHJvY2Vzc1Byb2dyYW1Bcmd1bWVudHMgb3B0aW9uVmFsdWVzICRvcHRpb25EZWZpbml0aW9ucyBwb3NpdGlvbmFsQXJndW1lbnRzICJcW3Byb3BlcnR5IC4uLlxdIgorc2V0IHByb3BlcnR5TmFtZXMgJHBvc2l0aW9uYWxBcmd1bWVudHMKKworaWYge1tsbGVuZ3RoICRwcm9wZXJ0eU5hbWVzXSA9PSAwfSB7CisgICBsYXBwZW5kIHByb3BlcnR5TmFtZXMgImJyYWlsbGUtZHJpdmVyIgorICAgbGFwcGVuZCBwcm9wZXJ0eU5hbWVzICJ0ZXh0LXRhYmxlIgorICAgbGFwcGVuZCBwcm9wZXJ0eU5hbWVzICJhdHRyaWJ1dGVzLXRhYmxlIgorICAgbGFwcGVuZCBwcm9wZXJ0eU5hbWVzICJjb250cmFjdGlvbi10YWJsZSIKKyAgIGxhcHBlbmQgcHJvcGVydHlOYW1lcyAia2V5Ym9hcmQtdGFibGUiCit9CisKK2lmIHtbbGxlbmd0aCAkcHJvcGVydHlOYW1lc10gPT0gMH0geworICAgc3ludGF4RXJyb3IgInByb3BlcnR5IG5hbWVzIG5vdCBzcGVjaWZpZWQiCit9CisKK3NldCBpbnB1dEZpbGUgICJicmx0dHkuY29uZi5pbiIKK3NldCBpbnB1dFBhdGggW2ZpbGUgam9pbiAkc291cmNlUm9vdCBEb2N1bWVudHMgJGlucHV0RmlsZV0KK2xvZ05vdGUgImxvYWRpbmcgcHJvcGVydGllczogJGlucHV0UGF0aCIKK3NldCBwcm9wZXJ0aWVzIFtsb2FkUHJvcGVydGllcyAkaW5wdXRQYXRoICRwcm9wZXJ0eU5hbWVzXQorCitmb3JlYWNoIG5hbWUgJHByb3BlcnR5TmFtZXMgeworICAgaWYgeyFbZGljdCBleGlzdHMgJHByb3BlcnRpZXMgJG5hbWVdfSB7CisgICAgICBzeW50YXhFcnJvciAidW5rbm93biBwcm9wZXJ0eSBuYW1lOiAkbmFtZSIKKyAgIH0KK30KKworc2V0IHVwZGF0ZWQgMAorZm9yZWFjaCBwcm9wZXJ0eU5hbWUgJHByb3BlcnR5TmFtZXMgeworICAgc2V0IHJlc291cmNlRmlsZSAiW3N0cmluZyB0b2xvd2VyICRwcm9wZXJ0eU5hbWVdLnhtbCIKKyAgIHNldCByZXNvdXJjZVBhdGggW2ZpbGUgam9pbiAkYXBwbGljYXRpb25EaXJlY3RvcnkgcmVzIHZhbHVlcyAkcmVzb3VyY2VGaWxlXQorICAgbG9nTm90ZSAid3JpdGluZyByZXNvdXJjZSBmaWxlOiAkcmVzb3VyY2VQYXRoIgorCisgICBpZiB7W3VwZGF0ZUZpbGUgJHJlc291cmNlUGF0aCAiW2pvaW4gW21ha2VSZXNvdXJjZUxpbmVzICRwcm9wZXJ0aWVzICRwcm9wZXJ0eU5hbWVdIFxuXVxuIl19IHsKKyAgICAgIHNldCB1cGRhdGVkIDEKKyAgIH0KK30KKworaWYgeyEkdXBkYXRlZH0geworICAgbG9nTWVzc2FnZSB0YXNrICJubyBmaWxlcyB1cGRhdGVkIgorfQorCitleGl0IDAKZGlmZiAtLWdpdCBhL0FuZHJvaWQvVG9vbHMvbmV3c3RyaW5ncyBiL0FuZHJvaWQvVG9vbHMvbmV3c3RyaW5ncwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5lNWQwNDBmCi0tLSAvZGV2L251bGwKKysrIGIvQW5kcm9pZC9Ub29scy9uZXdzdHJpbmdzCkBAIC0wLDAgKzEsMTg3IEBACisjIS91c3IvYmluL2VudiB0Y2xzaAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorIyAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyMKKyMgQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorIworIyBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorIworIyBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisjIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyMgbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisjCisjIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK3NvdXJjZSBbZmlsZSBqb2luIFtmaWxlIGRpcm5hbWUgW2luZm8gc2NyaXB0XV0gInByb2xvZ3VlLnRjbCJdCisKK3Byb2Mgc3BsaXROYW1lcyB7bmFtZXMgb2xkTmFtZXNWYXJpYWJsZSBzYW1lTmFtZXNWYXJpYWJsZSBuZXdOYW1lc1ZhcmlhYmxlfSB7CisgICBnbG9iYWwgYmFzZVN0cmluZ3MgaWdub3JhYmxlTmFtZXMKKworICAgdXB2YXIgMSAkb2xkTmFtZXNWYXJpYWJsZSBvbGROYW1lcworICAgdXB2YXIgMSAkc2FtZU5hbWVzVmFyaWFibGUgc2FtZU5hbWVzCisgICB1cHZhciAxICRuZXdOYW1lc1ZhcmlhYmxlIG5ld05hbWVzCisKKyAgIGxhc3NpZ24gW2ludGVyc2VjdDMgJG5hbWVzIFtkaWN0IGtleXMgJGJhc2VTdHJpbmdzXV0gb2xkTmFtZXMgc2FtZU5hbWVzIG5ld05hbWVzCisgICBsYXNzaWduIFtpbnRlcnNlY3QzICRuZXdOYW1lcyAkaWdub3JhYmxlTmFtZXNdIG5ld05hbWVzIHggeAorfQorCitwcm9jIHdyaXRlTmFtZXMge3BhdGggbmFtZXN9IHsKKyAgIGdsb2JhbCBiYXNlU3RyaW5ncworICAgZmlsZSBkZWxldGUgJHBhdGgKKworICAgaWYge1tsbGVuZ3RoICRuYW1lc10gPiAwfSB7CisgICAgICBpZiB7W2NhdGNoIFtsaXN0IG9wZW4gJHBhdGgge1dST05MWSBUUlVOQyBDUkVBVH1dIGNoYW5uZWxdID09IDB9IHsKKyAgICAgICAgIGZvcmVhY2ggbmFtZSAkbmFtZXMgeworICAgICAgICAgICAgc2V0IHN0cmluZyBbZGljdCBnZXQgJGJhc2VTdHJpbmdzICRuYW1lXQorICAgICAgICAgICAgcHV0cyAkY2hhbm5lbCAiJG5hbWUgW2RpY3QgZ2V0ICRzdHJpbmcgdGV4dF0iCisgICAgICAgICB9CisKKyAgICAgICAgIGNsb3NlICRjaGFubmVsOyB1bnNldCBjaGFubmVsCisgICAgICB9IGVsc2UgeworICAgICAgICAgc2VtYW50aWNFcnJvciAkY2hhbm5lbAorICAgICAgfQorICAgfQorfQorCitwcm9jIGxvYWRTdHJpbmdMaXN0IHt9IHsKKyAgIGdsb2JhbCBhbmRyb2lkRGlyZWN0b3J5CisKKyAgIHNldCBzdHJpbmdzIFtkaWN0IGNyZWF0ZV0KKyAgIHNldCBwYXRoIFtmaWxlIGpvaW4gJGFuZHJvaWREaXJlY3RvcnkgU1RSSU5HU10KKyAgIGxvZ01lc3NhZ2UgZGV0YWlsICJsb2FkaW5nIHN0cmluZyBsaXN0OiAkcGF0aCIKKworICAgc2V0IG9yZGVyIDAKKyAgIHNldCBwYXR0ZXJuIHteXHMqKFxTKylccysoLio/KVxzKiR9CisKKyAgIGlmIHtbY2F0Y2ggW2xpc3Qgb3BlbiAkcGF0aCB7UkRPTkxZfV0gY2hhbm5lbF0gPT0gMH0geworICAgICAgd2hpbGUge1tnZXRzICRjaGFubmVsIGxpbmVdID49IDB9IHsKKyAgICAgICAgIGlmIHtbcmVnZXhwICRwYXR0ZXJuICRsaW5lIHggbmFtZSB0ZXh0XX0geworICAgICAgICAgICAgc2V0IHN0cmluZyBbZGljdCBjcmVhdGUgdGV4dCAkdGV4dCBvcmRlciBbaW5jciBvcmRlcl1dCisgICAgICAgICAgICBkaWN0IHNldCBzdHJpbmdzICRuYW1lICRzdHJpbmcKKyAgICAgICAgIH0KKyAgICAgIH0KKworICAgICAgY2xvc2UgJGNoYW5uZWw7IHVuc2V0IGNoYW5uZWwKKyAgIH0gZWxzZSB7CisgICAgICBzZW1hbnRpY0Vycm9yICRjaGFubmVsCisgICB9CisKKyAgIHJldHVybiAkc3RyaW5ncworfQorCitwcm9jIGF1ZGl0U3RyaW5nTGlzdCB7fSB7CisgICBnbG9iYWwgYmFzZVN0cmluZ3MgbGlzdGVkU3RyaW5ncworCisgICBsb2dOb3RlICJhdWRpdGluZyBzdHJpbmcgbGlzdCIKKyAgIHNwbGl0TmFtZXMgW2RpY3Qga2V5cyAkbGlzdGVkU3RyaW5nc10gb2xkTmFtZXMgc2FtZU5hbWVzIG5ld05hbWVzCisgICB3cml0ZU5hbWVzICJbZ2V0UHJvZ3JhbU5hbWVdLnR4dCIgJG5ld05hbWVzCisKKyAgIGZvcmVhY2ggbmFtZSAkb2xkTmFtZXMgeworICAgICAgd3JpdGVQcm9ncmFtTWVzc2FnZSAib2xkIGxpc3RlZCBzdHJpbmc6ICRuYW1lIgorICAgfQorCisgICBmb3JlYWNoIG5hbWUgJHNhbWVOYW1lcyB7CisgICAgICBzZXQgb2xkVGV4dCBbZGljdCBnZXQgJGxpc3RlZFN0cmluZ3MgJG5hbWUgdGV4dF0KKyAgICAgIHNldCBuZXdUZXh0IFtkaWN0IGdldCAkYmFzZVN0cmluZ3MgJG5hbWUgdGV4dF0KKworICAgICAgaWYgeyFbc3RyaW5nIGVxdWFsICRuZXdUZXh0ICRvbGRUZXh0XX0geworICAgICAgICAgd3JpdGVQcm9ncmFtTWVzc2FnZSAiYmFzZSBzdHJpbmcgY2hhbmdlZDogJG5hbWU6ICRvbGRUZXh0IC0+ICRuZXdUZXh0IgorICAgICAgfQorICAgfQorfQorCitwcm9jIGxvYWRTdHJpbmdSZXNvdXJjZXMge2RpcmVjdG9yeX0geworICAgbG9nTWVzc2FnZSBkZXRhaWwgImxvYWRpbmcgcmVzb3VyY2UgZGlyZWN0b3J5OiAkZGlyZWN0b3J5IgorICAgc2V0IHN0cmluZ3MgW2RpY3QgY3JlYXRlXQorCisgICBzZXQgcGF0dGVybiB7XlxzKjxccypzdHJpbmd9CisgICBhcHBlbmQgcGF0dGVybiB7XHMrbmFtZVxzKj1ccyoiKFteIl0qKSJ9CisgICBhcHBlbmQgcGF0dGVybiB7KD86XHMrdHJhbnNsYXRhYmxlXHMqPVxzKiJ0cnVlIik/fQorICAgYXBwZW5kIHBhdHRlcm4geyg/OlxzK3Rvb2xzOmlnbm9yZVxzKj1ccyoiKE1pc3NpbmdUcmFuc2xhdGlvbikiKT99CisgICBhcHBlbmQgcGF0dGVybiB7XHMqPlxzKiguKj8pXHMqPFxzKi9zdHJpbmdccyo+XHMqJH0KKworICAgZm9yZWFjaCBwYXRoIFtnbG9iICIkZGlyZWN0b3J5LyoueG1sIl0geworICAgICAgbG9nTWVzc2FnZSBkZXRhaWwgImxvYWRpbmcgc3RyaW5nIHJlc291cmNlczogJHBhdGgiCisKKyAgICAgIGlmIHtbY2F0Y2ggW2xpc3Qgb3BlbiAkcGF0aCB7UkRPTkxZfV0gY2hhbm5lbF0gPT0gMH0geworICAgICAgICAgc2V0IG9yZGVyIDAKKworICAgICAgICAgd2hpbGUge1tnZXRzICRjaGFubmVsIGxpbmVdID49IDB9IHsKKyAgICAgICAgICAgIGlmIHtbcmVnZXhwICRwYXR0ZXJuICRsaW5lIHggbmFtZSBpZ25vcmFibGUgdGV4dF19IHsKKyAgICAgICAgICAgICAgIHNldCBpZ25vcmFibGUgW2V4cHIge1tzdHJpbmcgbGVuZ3RoICRpZ25vcmFibGVdID4gMH1dCisgICAgICAgICAgICAgICBzZXQgc3RyaW5nIFtkaWN0IGNyZWF0ZSB0ZXh0ICR0ZXh0IGlnbm9yYWJsZSAkaWdub3JhYmxlIG9yZGVyIFtpbmNyIG9yZGVyXV0KKyAgICAgICAgICAgICAgIGRpY3Qgc2V0IHN0cmluZ3MgJG5hbWUgJHN0cmluZworICAgICAgICAgICAgfQorICAgICAgICAgfQorCisgICAgICAgICBjbG9zZSAkY2hhbm5lbDsgdW5zZXQgY2hhbm5lbAorICAgICAgfSBlbHNlIHsKKyAgICAgICAgIHNlbWFudGljRXJyb3IgJGNoYW5uZWwKKyAgICAgIH0KKyAgIH0KKworICAgcmV0dXJuICRzdHJpbmdzCit9CisKK3Byb2MgZ2V0SWdub3JhYmxlTmFtZXMge3N0cmluZ3N9IHsKKyAgIHNldCBuYW1lcyBbbGlzdF0KKworICAgZm9yZWFjaCBuYW1lIFtkaWN0IGtleXMgJHN0cmluZ3NdIHsKKyAgICAgIGlmIHtbZGljdCBnZXQgJHN0cmluZ3MgJG5hbWUgaWdub3JhYmxlXX0geworICAgICAgICAgbGFwcGVuZCBuYW1lcyAkbmFtZQorICAgICAgfQorICAgfQorCisgICByZXR1cm4gJG5hbWVzCit9CisKK3Byb2MgYXVkaXRMYW5ndWFnZSB7Y29kZSBkaXJlY3Rvcnl9IHsKKyAgIGxvZ05vdGUgImF1ZGl0aW5nIGxhbmd1YWdlOiAkY29kZSIKKyAgIHNldCBsYW5ndWFnZVN0cmluZ3MgW2xvYWRTdHJpbmdSZXNvdXJjZXMgJGRpcmVjdG9yeV0KKyAgIHNwbGl0TmFtZXMgW2RpY3Qga2V5cyAkbGFuZ3VhZ2VTdHJpbmdzXSBvbGROYW1lcyBzYW1lTmFtZXMgbmV3TmFtZXMKKyAgIHdyaXRlTmFtZXMgIltnZXRQcm9ncmFtTmFtZV0tJGNvZGUudHh0IiAkbmV3TmFtZXMKKworICAgZm9yZWFjaCBuYW1lICRvbGROYW1lcyB7CisgICAgICB3cml0ZVByb2dyYW1NZXNzYWdlICJvbGQgbGFuZ3VhZ2Ugc3RyaW5nOiAkY29kZTogJG5hbWUiCisgICB9CisKKyAgIGlmIHsoW3N0cmluZyBsZW5ndGggJG9sZE5hbWVzXSArIFtzdHJpbmcgbGVuZ3RoICRuZXdOYW1lc10pID09IDB9IHsKKyAgICAgIGdsb2JhbCBsaXN0ZWRTdHJpbmdzCisKKyAgICAgIGZvcmVhY2ggbmFtZSBbZGljdCBrZXlzICRsaXN0ZWRTdHJpbmdzXSB7CisgICAgICAgICBpZiB7W2RpY3QgZ2V0ICRsaXN0ZWRTdHJpbmdzICRuYW1lIG9yZGVyXSAhPSBbZGljdCBnZXQgJGxhbmd1YWdlU3RyaW5ncyAkbmFtZSBvcmRlcl19IHsKKyAgICAgICAgICAgIHdyaXRlUHJvZ3JhbU1lc3NhZ2UgImxhbmd1YWdlIHN0cmluZyBvdXQgb2Ygb3JkZXI6ICRjb2RlOiAkbmFtZSIKKyAgICAgICAgIH0KKyAgICAgIH0KKyAgIH0KK30KKworcHJvYyBhdWRpdEFsbExhbmd1YWdlcyB7fSB7CisgICBnbG9iYWwgYmFzZURpcmVjdG9yeQorICAgc2V0IGxhbmd1YWdlRGVsaW1pdGVyIC0KKworICAgZm9yZWFjaCBkaXJlY3RvcnkgW2dsb2IgLW5vY29tcGxhaW4gLXBhdGggIiRiYXNlRGlyZWN0b3J5JGxhbmd1YWdlRGVsaW1pdGVyIiAiPyoiXSB7CisgICAgICBzZXQgY29kZSBbbGluZGV4IFtzcGxpdCBbZmlsZSB0YWlsICRkaXJlY3RvcnldICRsYW5ndWFnZURlbGltaXRlcl0gMV0KKyAgICAgIGF1ZGl0TGFuZ3VhZ2UgJGNvZGUgJGRpcmVjdG9yeQorICAgfQorfQorCitzZXQgb3B0aW9uRGVmaW5pdGlvbnMgeworfQorCitwcm9jZXNzUHJvZ3JhbUFyZ3VtZW50cyBvcHRpb25WYWx1ZXMgJG9wdGlvbkRlZmluaXRpb25zCisKK3NldCBiYXNlRGlyZWN0b3J5IFtmaWxlIGpvaW4gJGFwcGxpY2F0aW9uRGlyZWN0b3J5IHJlcyB2YWx1ZXNdCitzZXQgYmFzZVN0cmluZ3MgW2xvYWRTdHJpbmdSZXNvdXJjZXMgJGJhc2VEaXJlY3RvcnldCitzZXQgaWdub3JhYmxlTmFtZXMgW2dldElnbm9yYWJsZU5hbWVzICRiYXNlU3RyaW5nc10KKworc2V0IGxpc3RlZFN0cmluZ3MgW2xvYWRTdHJpbmdMaXN0XQorYXVkaXRTdHJpbmdMaXN0CisKK2F1ZGl0QWxsTGFuZ3VhZ2VzCitleGl0IDAKZGlmZiAtLWdpdCBhL0FuZHJvaWQvVG9vbHMvcHJvbG9ndWUudGNsIGIvQW5kcm9pZC9Ub29scy9wcm9sb2d1ZS50Y2wKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDM2Y2M0OAotLS0gL2Rldi9udWxsCisrKyBiL0FuZHJvaWQvVG9vbHMvcHJvbG9ndWUudGNsCkBAIC0wLDAgKzEsMjIgQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyMgICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisjCisjIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyMKKyMgQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitzb3VyY2UgW2ZpbGUgam9pbiBbZmlsZSBkaXJuYW1lIFtpbmZvIHNjcmlwdF1dIC4uIC4uICJwcm9sb2d1ZS50Y2wiXQorc2V0IGFuZHJvaWREaXJlY3RvcnkgW2ZpbGUgam9pbiAkc291cmNlUm9vdCBBbmRyb2lkXQorc2V0IGdyYWRsZURpcmVjdG9yeSBbZmlsZSBqb2luICRhbmRyb2lkRGlyZWN0b3J5IEdyYWRsZV0KK3NldCBhcHBsaWNhdGlvbkRpcmVjdG9yeSBbZmlsZSBqb2luICRncmFkbGVEaXJlY3RvcnkgYXBwIHNyYyBtYWluXQpkaWZmIC0tZ2l0IGEvQW5kcm9pZC9Ub29scy9yZWJ1aWxkIGIvQW5kcm9pZC9Ub29scy9yZWJ1aWxkCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjMzZmIyOGQKLS0tIC9kZXYvbnVsbAorKysgYi9BbmRyb2lkL1Rvb2xzL3JlYnVpbGQKQEAgLTAsMCArMSw3MyBAQAorIyEvdXNyL2Jpbi9lbnYgdGNsc2gKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyMgICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisjCisjIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyMKKyMgQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitzb3VyY2UgW2ZpbGUgam9pbiBbZmlsZSBkaXJuYW1lIFtpbmZvIHNjcmlwdF1dICJwcm9sb2d1ZS50Y2wiXQorCitzZXQgb3B0aW9uRGVmaW5pdGlvbnMgeworfQorCitwcm9jZXNzUHJvZ3JhbUFyZ3VtZW50cyBvcHRpb25WYWx1ZXMgJG9wdGlvbkRlZmluaXRpb25zCisKK3Byb2MgZXhlY3V0ZUNvbW1hbmQge2FyZ3N9IHsKKyAgIGlmIHtbY2F0Y2ggJGFyZ3MgcmVzcG9uc2VdID09IDB9IHsKKyAgICAgIHNldCByZXNwb25zZSAiIgorICAgfSBlbHNlaWYge1tzdHJpbmcgZXF1YWwgW2xpbmRleCAkOjplcnJvckNvZGUgMF0gQ0hJTERTVEFUVVNdfSB7CisgICAgICBzZXQgcmVzcG9uc2UgImhvc3QgY29tbWFuZCBmYWlsZWQ6IGV4aXQgc3RhdHVzIFtsaW5kZXggJDo6ZXJyb3JDb2RlIDJdIgorICAgfQorCisgICByZXR1cm4gJHJlc3BvbnNlCit9CisKK3Byb2Mgc2V0V29ya2luZ0RpcmVjdG9yeSB7cGF0aH0geworICAgbG9nRGV0YWlsICJ3b3JraW5nIGRpcmVjdG9yeTogJHBhdGgiCisgICBzZXQgcHJvYmxlbSBbZXhlY3V0ZUNvbW1hbmQgY2QgJHBhdGhdCisKKyAgIGlmIHtbc3RyaW5nIGxlbmd0aCAkcHJvYmxlbV0gPiAwfSB7CisgICAgICBzZW1hbnRpY0Vycm9yICIkcHJvYmxlbSIKKyAgIH0KK30KKworcHJvYyBleGVjdXRlSG9zdENvbW1hbmQge2FyZ3N9IHsKKyAgIHNldCBjb21tYW5kIFtqb2luICRhcmdzICIgIl0KKyAgIGxvZ0RldGFpbCAiZXhlY3V0aW5nIGhvc3QgY29tbWFuZDogJGNvbW1hbmQiCisKKyAgIHNldCBhcmdzIFtsaW5zZXJ0ICRhcmdzIDAgZXhlYyA8QCBzdGRpbl0KKyAgIGxhcHBlbmQgYXJncyA+QCBzdGRvdXQgMj5AIHN0ZGVycgorICAgc2V0IHByb2JsZW0gW2V2YWwgZXhlY3V0ZUNvbW1hbmQgJGFyZ3NdCisKKyAgIGlmIHtbc3RyaW5nIGxlbmd0aCAkcHJvYmxlbV0gPiAwfSB7CisgICAgICBzZW1hbnRpY0Vycm9yICIkcHJvYmxlbTogJGNvbW1hbmQiCisgICB9Cit9CisKK3Byb2MgZXhlY3V0ZUdyYWRsZVRhc2sge3Rhc2t9IHsKKyAgIGV4ZWN1dGVIb3N0Q29tbWFuZCAuL2dyYWRsZXcgLS1xdWlldCAtLWNvbnNvbGUgcGxhaW4gLS0gJHRhc2sKK30KKworc2V0V29ya2luZ0RpcmVjdG9yeSAkc291cmNlUm9vdAorZXhlY3V0ZUhvc3RDb21tYW5kIC4vYXV0b2dlbgorZXhlY3V0ZUhvc3RDb21tYW5kIC4vY2ZnLWFuZHJvaWQKKworc2V0V29ya2luZ0RpcmVjdG9yeSAkZ3JhZGxlRGlyZWN0b3J5CitleGVjdXRlR3JhZGxlVGFzayBjbGVhbgorZXhlY3V0ZUdyYWRsZVRhc2sgOmFwcDphc3NlbWJsZURlYnVnCitleGVjdXRlR3JhZGxlVGFzayA6YXBwOmFzc2VtYmxlUmVsZWFzZQorCitsb2dNZXNzYWdlIHRhc2sgImRvbmUiCitleGl0IDAKZGlmZiAtLWdpdCBhL0F1dGhvcml6YXRpb24vUG9sa2l0L01ha2VmaWxlLmluIGIvQXV0aG9yaXphdGlvbi9Qb2xraXQvTWFrZWZpbGUuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjRlOTYxZQotLS0gL2Rldi9udWxsCisrKyBiL0F1dGhvcml6YXRpb24vUG9sa2l0L01ha2VmaWxlLmluCkBAIC0wLDAgKzEsNDQgQEAKKyMgQXV0aG9yaXphdGlvbi9Qb2xraXQvTWFrZWZpbGUuICBHZW5lcmF0ZWQgZnJvbSBNYWtlZmlsZS5pbiBieSBjb25maWd1cmUuCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisjICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorIworIyBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisjCisjIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisjCisjIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyMgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorIyBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyMKKyMgV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworIworIyBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworUE9MS0lUX1BBQ0tBR0VfTkFNRSA9IG9yZy5hMTF5LmJybGFwaQorUE9MS0lUX1BPTElDSUVTX0VYVEVOU0lPTiA9IHBvbGljeQorUE9MS0lUX1JVTEVTX0VYVEVOU0lPTiA9IHJ1bGVzCisKK1BPTEtJVF9QT0xJQ0lFU19ESVJFQ1RPUlkgPSAkKElOU1RBTExfUk9PVCkkKFBPTEtJVF9QT0xJQ1lfRElSKQorUE9MS0lUX1JVTEVTX0RJUkVDVE9SWSA9ICQoSU5TVEFMTF9ST09UKSQoUE9MS0lUX1JVTEVfRElSKQorCitpbnN0YWxsOiBpbnN0YWxsLXBvbGljaWVzIGluc3RhbGwtcnVsZXMKKworaW5zdGFsbC1wb2xpY2llcy1kaXJlY3Rvcnk6CisJJChJTlNUQUxMX0RJUkVDVE9SWSkgJChQT0xLSVRfUE9MSUNJRVNfRElSRUNUT1JZKQorCitpbnN0YWxsLXBvbGljaWVzOiBpbnN0YWxsLXBvbGljaWVzLWRpcmVjdG9yeQorCSQoSU5TVEFMTF9EQVRBKSAkKFNSQ19ESVIpL3BvbGljaWVzICQoUE9MS0lUX1BPTElDSUVTX0RJUkVDVE9SWSkvJChQT0xLSVRfUEFDS0FHRV9OQU1FKS4kKFBPTEtJVF9QT0xJQ0lFU19FWFRFTlNJT04pCisKK2luc3RhbGwtcnVsZXMtZGlyZWN0b3J5OgorCSQoSU5TVEFMTF9ESVJFQ1RPUlkpICQoUE9MS0lUX1JVTEVTX0RJUkVDVE9SWSkKKworaW5zdGFsbC1ydWxlczogaW5zdGFsbC1ydWxlcy1kaXJlY3RvcnkKKwkkKElOU1RBTExfREFUQSkgJChTUkNfRElSKS9ydWxlcyAkKFBPTEtJVF9SVUxFU19ESVJFQ1RPUlkpLyQoUE9MS0lUX1BBQ0tBR0VfTkFNRSkuJChQT0xLSVRfUlVMRVNfRVhURU5TSU9OKQorCit1bmluc3RhbGw6OgorCS1ybSAkKFBPTEtJVF9QT0xJQ0lFU19ESVJFQ1RPUlkpLyQoUE9MS0lUX1BBQ0tBR0VfTkFNRSkuKgorCS1ybSAkKFBPTEtJVF9SVUxFU19ESVJFQ1RPUlkpLyQoUE9MS0lUX1BBQ0tBR0VfTkFNRSkuKgorCmRpZmYgLS1naXQgYS9BdXRob3JpemF0aW9uL1BvbGtpdC9wb2xpY2llcyBiL0F1dGhvcml6YXRpb24vUG9sa2l0L3BvbGljaWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE3NzUwY2EKLS0tIC9kZXYvbnVsbAorKysgYi9BdXRob3JpemF0aW9uL1BvbGtpdC9wb2xpY2llcwpAQCAtMCwwICsxLDI0IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorCis8IURPQ1RZUEUgcG9saWN5Y29uZmlnIFBVQkxJQworICItLy9mcmVlZGVza3RvcC8vRFREIFBvbGljeUtpdCBQb2xpY3kgQ29uZmlndXJhdGlvbiAxLjAvL0VOIgorICJodHRwOi8vd3d3LmZyZWVkZXNrdG9wLm9yZy9zdGFuZGFyZHMvUG9saWN5S2l0LzEuMC9wb2xpY3ljb25maWcuZHRkIgorPgorCis8cG9saWN5Y29uZmlnPgorICA8dmVuZG9yPlRoZSBCUkxUVFkgRGV2ZWxvcGVyczwvdmVuZG9yPgorICA8dmVuZG9yX3VybD5odHRwOi8vYnJsdHR5LmFwcC88L3ZlbmRvcl91cmw+CisKKyAgPGFjdGlvbiBpZD0ib3JnLmExMXkuYnJsYXBpLndyaXRlLWRpc3BsYXkiPgorICAgIDxkZXNjcmlwdGlvbj5BY2Nlc3MgdG8gdGhlIGJyYWlsbGUgZGV2aWNlIHZpYSBCcmxBUEk8L2Rlc2NyaXB0aW9uPgorICAgIDxtZXNzYWdlPlByaXZpbGVnZXMgYXJlIHJlcXVpcmVkIHRvIGFjY2VzcyB0aGUgYnJhaWxsZSBkZXZpY2UgdmlhIEJybEFQSTwvbWVzc2FnZT4KKworICAgIDxkZWZhdWx0cz4KKyAgICAgIDxhbGxvd19hY3RpdmU+eWVzPC9hbGxvd19hY3RpdmU+CisgICAgICA8YWxsb3dfaW5hY3RpdmU+bm88L2FsbG93X2luYWN0aXZlPgorICAgICAgPGFsbG93X2FueT5ubzwvYWxsb3dfYW55PgorICAgIDwvZGVmYXVsdHM+CisKKyAgICA8YW5ub3RhdGUga2V5PSJvcmcuZnJlZWRlc2t0b3AucG9saWN5a2l0Lm93bmVyIj51bml4LXVzZXI6YnJsdHR5PC9hbm5vdGF0ZT4KKyAgPC9hY3Rpb24+Cis8L3BvbGljeWNvbmZpZz4KZGlmZiAtLWdpdCBhL0F1dGhvcml6YXRpb24vUG9sa2l0L3J1bGVzIGIvQXV0aG9yaXphdGlvbi9Qb2xraXQvcnVsZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzJhZWY4NAotLS0gL2Rldi9udWxsCisrKyBiL0F1dGhvcml6YXRpb24vUG9sa2l0L3J1bGVzCkBAIC0wLDAgKzEsNyBAQAorcG9sa2l0LmFkZFJ1bGUoZnVuY3Rpb24oYWN0aW9uLCBzdWJqZWN0KSB7CisgIGlmIChhY3Rpb24uaWQgPT0gIm9yZy5hMTF5LmJybGFwaS53cml0ZS1kaXNwbGF5IikgeworICAgIGlmIChzdWJqZWN0LmlzSW5Hcm91cCgiYnJsYXBpIikpIHsKKyAgICAgIHJldHVybiBwb2xraXQuUmVzdWx0LllFUzsKKyAgICB9CisgIH0KK30pOwpkaWZmIC0tZ2l0IGEvQXV0b3N0YXJ0L0FwcFN0cmVhbS9NYWtlZmlsZS5pbiBiL0F1dG9zdGFydC9BcHBTdHJlYW0vTWFrZWZpbGUuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWQzZTcwZAotLS0gL2Rldi9udWxsCisrKyBiL0F1dG9zdGFydC9BcHBTdHJlYW0vTWFrZWZpbGUuaW4KQEAgLTAsMCArMSwzMCBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorIyAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyMKKyMgQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorIworIyBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorIworIyBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisjIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyMgbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisjCisjIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK01FVEFJTkZPX0RJUkVDVE9SWSA9ICQoSU5TVEFMTF9ST09UKSQoZGF0YWRpcikvbWV0YWluZm8KK01FVEFJTkZPX0ZJTEUgPSBvcmcuYTExeS5icmx0dHkubWV0YWluZm8ueG1sCisKK2luc3RhbGwtbWV0YWluZm8tZGlyZWN0b3J5OgorCSQoSU5TVEFMTF9ESVJFQ1RPUlkpICQoTUVUQUlORk9fRElSRUNUT1JZKQorCitpbnN0YWxsOiBpbnN0YWxsLW1ldGFpbmZvLWRpcmVjdG9yeQorCSQoSU5TVEFMTF9EQVRBKSAkKFNSQ19ESVIpLyQoTUVUQUlORk9fRklMRSkgJChNRVRBSU5GT19ESVJFQ1RPUlkpCisKK3VuaW5zdGFsbDoKKwktcm0gLWYgJChNRVRBSU5GT19ESVJFQ1RPUlkpLyQoTUVUQUlORk9fRklMRSkKKwpkaWZmIC0tZ2l0IGEvQXV0b3N0YXJ0L0FwcFN0cmVhbS9vcmcuYTExeS5icmx0dHkubWV0YWluZm8ueG1sIGIvQXV0b3N0YXJ0L0FwcFN0cmVhbS9vcmcuYTExeS5icmx0dHkubWV0YWluZm8ueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIzZjc0MTIKLS0tIC9kZXYvbnVsbAorKysgYi9BdXRvc3RhcnQvQXBwU3RyZWFtL29yZy5hMTF5LmJybHR0eS5tZXRhaW5mby54bWwKQEAgLTAsMCArMSw1NTAgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+CisKKzwhLS0KKyAgQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorIAorICBUaGlzIGZpbGUgaXMgcHJvdmlkZWQsIGZyZWUgb2YgY2hhcmdlIGFuZCBhcy1pcywgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICBBbGwgUGVybWlzc2l2ZSBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICBQbGVhc2Ugc2VlOiBodHRwczovL3NwZHgub3JnL2xpY2Vuc2VzL0ZTRkFQLmh0bWwKKworICBDb3B5aW5nIGFuZCBkaXN0cmlidXRpb24gb2YgdGhpcyBmaWxlLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLAorICBhcmUgcGVybWl0dGVkIGluIGFueSBtZWRpdW0gd2l0aG91dCByb3lhbHR5IHByb3ZpZGVkIHRoZSBjb3B5cmlnaHQKKyAgbm90aWNlIGFuZCB0aGlzIG5vdGljZSBhcmUgcHJlc2VydmVkLiBUaGlzIGZpbGUgaXMgb2ZmZXJlZCBhcy1pcywKKyAgd2l0aG91dCBhbnkgd2FycmFudHkuCistLT4KKworPCEtLQorICBXaGlsZSB0aGUgbGljZW5zZSBkb2VzIHBlcm1pdCBtb2RpZmljYXRpb24sIHRoZSBjb3B5cmlnaHQgaG9sZGVyIHdpbGwKKyAgYXBwcmVjaWF0ZSBpdCBpZiBtb2RpZmljYXRpb25zIHdlcmUgcmVzdHJpY3RlZCB0byB0aGUgbW9kYWxpYXMgbGlzdCwKKyAgYW5kIHRoYXQgdGhlIHJlc3Qgb2YgdGhlIG1ldGFkYXRhIHJlbWFpbiBhcyBpdCB3YXMgb3JpZ2luYWxseSB3cml0dGVuLgorLS0+CisKKzxjb21wb25lbnQ+CisgIDxpZD5vcmcuYTExeS5icmx0dHk8L2lkPgorICA8bmFtZT5CUkxUVFk8L25hbWU+CisgIDxzdW1tYXJ5PlN1cHBvcnQgZm9yIGJyYWlsbGUgZGV2aWNlczwvc3VtbWFyeT4KKworICA8ZGVzY3JpcHRpb24+CisgICAgQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyAgPC9kZXNjcmlwdGlvbj4KKworICA8ZGV2ZWxvcGVyX25hbWU+VGhlIEJSTFRUWSBEZXZlbG9wZXJzPC9kZXZlbG9wZXJfbmFtZT4KKyAgPHVybCB0eXBlPSJob21lcGFnZSI+aHR0cDovL2JybHR0eS5hcHAvPC91cmw+CisKKyAgPG1ldGFkYXRhX2xpY2Vuc2U+RlNGQVA8L21ldGFkYXRhX2xpY2Vuc2U+CisgIDxwcm9qZWN0X2xpY2Vuc2U+R1BMLTIuMDwvcHJvamVjdF9saWNlbnNlPgorCisgIDxwcm92aWRlcz4KKyAgICA8IS0tIEJFR0lOX1VTQl9CUkFJTExFX0RFVklDRVMgLS0+CisKKyAgICA8IS0tIERldmljZTogMDQwMzo2MDAxIC0tPgorICAgIDwhLS0gR2VuZXJpYyBJZGVudGlmaWVyIC0tPgorICAgIDwhLS0gVmVuZG9yOiBGdXR1cmUgVGVjaG5vbG9neSBEZXZpY2VzIEludGVybmF0aW9uYWwsIEx0ZC4gLS0+CisgICAgPCEtLSBQcm9kdWN0OiBGVDIzMiBVU0ItU2VyaWFsIChVQVJUKSBJQyAtLT4KKyAgICA8IS0tIEFsYmF0cm9zcyBbYWxsIG1vZGVsc10gLS0+CisgICAgPCEtLSBDZWJyYSBbYWxsIG1vZGVsc10gLS0+CisgICAgPCEtLSBISU1TIFtTeW5jIEJyYWlsbGVdIC0tPgorICAgIDwhLS0gSGFuZHlUZWNoIFtGVERJIGNoaXBdIC0tPgorICAgIDwhLS0gSGVkbyBbTW9iaWxMaW5lXSAtLT4KKyAgICA8IS0tIE1EViBbYWxsIG1vZGVsc10gLS0+CisgICAgPG1vZGFsaWFzPnVzYjp2MDQwM3A2MDAxKjwvbW9kYWxpYXM+CisKKyAgICA8IS0tIERldmljZTogMDQwMzo2MDEwIC0tPgorICAgIDwhLS0gR2VuZXJpYyBJZGVudGlmaWVyIC0tPgorICAgIDwhLS0gVmVuZG9yOiBGdXR1cmUgVGVjaG5vbG9neSBEZXZpY2VzIEludGVybmF0aW9uYWwsIEx0ZCAtLT4KKyAgICA8IS0tIFByb2R1Y3Q6IEZUMjIzMkMvRC9IIER1YWwgVUFSVC9GSUZPIElDIC0tPgorICAgIDwhLS0gRG90UGFkIFthbGwgbW9kZWxzXSAtLT4KKyAgICA8bW9kYWxpYXM+dXNiOnYwNDAzcDYwMTAqPC9tb2RhbGlhcz4KKworICAgIDwhLS0gRGV2aWNlOiAwNDAzOkRFNTggLS0+CisgICAgPCEtLSBIZWRvIFtNb2JpbExpbmVdIC0tPgorICAgIDxtb2RhbGlhcz51c2I6djA0MDNwREU1OCo8L21vZGFsaWFzPgorCisgICAgPCEtLSBEZXZpY2U6IDA0MDM6REU1OSAtLT4KKyAgICA8IS0tIEhlZG8gW1Byb2ZpTGluZV0gLS0+CisgICAgPG1vZGFsaWFzPnVzYjp2MDQwM3BERTU5KjwvbW9kYWxpYXM+CisKKyAgICA8IS0tIERldmljZTogMDQwMzpGMjA4IC0tPgorICAgIDwhLS0gUGFwZW5tZWllciBbYWxsIG1vZGVsc10gLS0+CisgICAgPG1vZGFsaWFzPnVzYjp2MDQwM3BGMjA4KjwvbW9kYWxpYXM+CisKKyAgICA8IS0tIERldmljZTogMDQwMzpGRTcwIC0tPgorICAgIDwhLS0gQmF1bSBbVmFyaW8gNDAgKDQwIGNlbGxzKV0gLS0+CisgICAgPG1vZGFsaWFzPnVzYjp2MDQwM3BGRTcwKjwvbW9kYWxpYXM+CisKKyAgICA8IS0tIERldmljZTogMDQwMzpGRTcxIC0tPgorICAgIDwhLS0gQmF1bSBbUG9ja2V0VmFyaW8gKDI0IGNlbGxzKV0gLS0+CisgICAgPG1vZGFsaWFzPnVzYjp2MDQwM3BGRTcxKjwvbW9kYWxpYXM+CisKKyAgICA8IS0tIERldmljZTogMDQwMzpGRTcyIC0tPgorICAgIDwhLS0gQmF1bSBbU3VwZXJWYXJpbyA0MCAoNDAgY2VsbHMpXSAtLT4KKyAgICA8bW9kYWxpYXM+dXNiOnYwNDAzcEZFNzIqPC9tb2RhbGlhcz4KKworICAgIDwhLS0gRGV2aWNlOiAwNDAzOkZFNzMgLS0+CisgICAgPCEtLSBCYXVtIFtTdXBlclZhcmlvIDMyICgzMiBjZWxscyldIC0tPgorICAgIDxtb2RhbGlhcz51c2I6djA0MDNwRkU3Myo8L21vZGFsaWFzPgorCisgICAgPCEtLSBEZXZpY2U6IDA0MDM6RkU3NCAtLT4KKyAgICA8IS0tIEJhdW0gW1N1cGVyVmFyaW8gNjQgKDY0IGNlbGxzKV0gLS0+CisgICAgPG1vZGFsaWFzPnVzYjp2MDQwM3BGRTc0KjwvbW9kYWxpYXM+CisKKyAgICA8IS0tIERldmljZTogMDQwMzpGRTc1IC0tPgorICAgIDwhLS0gQmF1bSBbU3VwZXJWYXJpbyA4MCAoODAgY2VsbHMpXSAtLT4KKyAgICA8bW9kYWxpYXM+dXNiOnYwNDAzcEZFNzUqPC9tb2RhbGlhcz4KKworICAgIDwhLS0gRGV2aWNlOiAwNDAzOkZFNzYgLS0+CisgICAgPCEtLSBCYXVtIFtWYXJpb1BybyA4MCAoODAgY2VsbHMpXSAtLT4KKyAgICA8bW9kYWxpYXM+dXNiOnYwNDAzcEZFNzYqPC9tb2RhbGlhcz4KKworICAgIDwhLS0gRGV2aWNlOiAwNDAzOkZFNzcgLS0+CisgICAgPCEtLSBCYXVtIFtWYXJpb1BybyA2NCAoNjQgY2VsbHMpXSAtLT4KKyAgICA8bW9kYWxpYXM+dXNiOnYwNDAzcEZFNzcqPC9tb2RhbGlhcz4KKworICAgIDwhLS0gRGV2aWNlOiAwNDUyOjAxMDAgLS0+CisgICAgPCEtLSBNZXRlYyBbYWxsIG1vZGVsc10gLS0+CisgICAgPG1vZGFsaWFzPnVzYjp2MDQ1MnAwMTAwKjwvbW9kYWxpYXM+CisKKyAgICA8IS0tIERldmljZTogMDQ1RTo5MzBBIC0tPgorICAgIDwhLS0gSElNUyBbQnJhaWxsZSBTZW5zZSAoVVNCIDEuMSldIC0tPgorICAgIDwhLS0gSElNUyBbQnJhaWxsZSBTZW5zZSAoVVNCIDIuMCldIC0tPgorICAgIDwhLS0gSElNUyBbQnJhaWxsZSBTZW5zZSBVMiAoVVNCIDIuMCldIC0tPgorICAgIDxtb2RhbGlhcz51c2I6djA0NUVwOTMwQSo8L21vZGFsaWFzPgorCisgICAgPCEtLSBEZXZpY2U6IDA0NUU6OTMwQiAtLT4KKyAgICA8IS0tIEhJTVMgW0JyYWlsbGUgRWRnZSBhbmQgUUJyYWlsbGVYTF0gLS0+CisgICAgPG1vZGFsaWFzPnVzYjp2MDQ1RXA5MzBCKjwvbW9kYWxpYXM+CisKKyAgICA8IS0tIERldmljZTogMDQ4MzpBMUQzIC0tPgorICAgIDwhLS0gQmF1bSBbT3JiaXQgUmVhZGVyIDIwICgyMCBjZWxscyldIC0tPgorICAgIDxtb2RhbGlhcz51c2I6djA0ODNwQTFEMyo8L21vZGFsaWFzPgorCisgICAgPCEtLSBEZXZpY2U6IDA0ODM6QTM2NiAtLT4KKyAgICA8IS0tIEJhdW0gW09yYml0IFJlYWRlciA0MCAoNDAgY2VsbHMpXSAtLT4KKyAgICA8bW9kYWxpYXM+dXNiOnYwNDgzcEEzNjYqPC9tb2RhbGlhcz4KKworICAgIDwhLS0gRGV2aWNlOiAwNkIwOjAwMDEgLS0+CisgICAgPCEtLSBBbHZhIFtTYXRlbGxpdGUgKDVubildIC0tPgorICAgIDxtb2RhbGlhcz51c2I6djA2QjBwMDAwMSo8L21vZGFsaWFzPgorCisgICAgPCEtLSBEZXZpY2U6IDA3OTg6MDAwMSAtLT4KKyAgICA8IS0tIFZveWFnZXIgW2FsbCBtb2RlbHNdIC0tPgorICAgIDxtb2RhbGlhcz51c2I6djA3OThwMDAwMSo8L21vZGFsaWFzPgorCisgICAgPCEtLSBEZXZpY2U6IDA3OTg6MDYwMCAtLT4KKyAgICA8IS0tIEFsdmEgW1ZveWFnZXIgUHJvdG9jb2wgQ29udmVydGVyXSAtLT4KKyAgICA8bW9kYWxpYXM+dXNiOnYwNzk4cDA2MDAqPC9tb2RhbGlhcz4KKworICAgIDwhLS0gRGV2aWNlOiAwNzk4OjA2MjQgLS0+CisgICAgPCEtLSBBbHZhIFtCQzYyNF0gLS0+CisgICAgPG1vZGFsaWFzPnVzYjp2MDc5OHAwNjI0KjwvbW9kYWxpYXM+CisKKyAgICA8IS0tIERldmljZTogMDc5ODowNjQwIC0tPgorICAgIDwhLS0gQWx2YSBbQkM2NDBdIC0tPgorICAgIDxtb2RhbGlhcz51c2I6djA3OThwMDY0MCo8L21vZGFsaWFzPgorCisgICAgPCEtLSBEZXZpY2U6IDA3OTg6MDY4MCAtLT4KKyAgICA8IS0tIEFsdmEgW0JDNjgwXSAtLT4KKyAgICA8bW9kYWxpYXM+dXNiOnYwNzk4cDA2ODAqPC9tb2RhbGlhcz4KKworICAgIDwhLS0gRGV2aWNlOiAwOTA0OjEwMTYgLS0+CisgICAgPCEtLSBGcmFua0F1ZGlvZGF0YSBbQjJLODQgKGJlZm9yZSBmaXJtd2FyZSBpbnN0YWxsYXRpb24pXSAtLT4KKyAgICA8bW9kYWxpYXM+dXNiOnYwOTA0cDEwMTYqPC9tb2RhbGlhcz4KKworICAgIDwhLS0gRGV2aWNlOiAwOTA0OjEwMTcgLS0+CisgICAgPCEtLSBGcmFua0F1ZGlvZGF0YSBbQjJLODQgKGFmdGVyIGZpcm13YXJlIGluc3RhbGxhdGlvbildIC0tPgorICAgIDxtb2RhbGlhcz51c2I6djA5MDRwMTAxNyo8L21vZGFsaWFzPgorCisgICAgPCEtLSBEZXZpY2U6IDA5MDQ6MjAwMCAtLT4KKyAgICA8IS0tIEJhdW0gW1ZhcmlvUHJvIDQwICg0MCBjZWxscyldIC0tPgorICAgIDxtb2RhbGlhcz51c2I6djA5MDRwMjAwMCo8L21vZGFsaWFzPgorCisgICAgPCEtLSBEZXZpY2U6IDA5MDQ6MjAwMSAtLT4KKyAgICA8IS0tIEJhdW0gW0Vjb1ZhcmlvIDI0ICgyNCBjZWxscyldIC0tPgorICAgIDxtb2RhbGlhcz51c2I6djA5MDRwMjAwMSo8L21vZGFsaWFzPgorCisgICAgPCEtLSBEZXZpY2U6IDA5MDQ6MjAwMiAtLT4KKyAgICA8IS0tIEJhdW0gW0Vjb1ZhcmlvIDQwICg0MCBjZWxscyldIC0tPgorICAgIDxtb2RhbGlhcz51c2I6djA5MDRwMjAwMio8L21vZGFsaWFzPgorCisgICAgPCEtLSBEZXZpY2U6IDA5MDQ6MjAwNyAtLT4KKyAgICA8IS0tIEJhdW0gW1ZhcmlvQ29ubmVjdCA0MCAoNDAgY2VsbHMpXSAtLT4KKyAgICA8bW9kYWxpYXM+dXNiOnYwOTA0cDIwMDcqPC9tb2RhbGlhcz4KKworICAgIDwhLS0gRGV2aWNlOiAwOTA0OjIwMDggLS0+CisgICAgPCEtLSBCYXVtIFtWYXJpb0Nvbm5lY3QgMzIgKDMyIGNlbGxzKV0gLS0+CisgICAgPG1vZGFsaWFzPnVzYjp2MDkwNHAyMDA4KjwvbW9kYWxpYXM+CisKKyAgICA8IS0tIERldmljZTogMDkwNDoyMDA5IC0tPgorICAgIDwhLS0gQmF1bSBbVmFyaW9Db25uZWN0IDI0ICgyNCBjZWxscyldIC0tPgorICAgIDxtb2RhbGlhcz51c2I6djA5MDRwMjAwOSo8L21vZGFsaWFzPgorCisgICAgPCEtLSBEZXZpY2U6IDA5MDQ6MjAxMCAtLT4KKyAgICA8IS0tIEJhdW0gW1ZhcmlvQ29ubmVjdCA2NCAoNjQgY2VsbHMpXSAtLT4KKyAgICA8bW9kYWxpYXM+dXNiOnYwOTA0cDIwMTAqPC9tb2RhbGlhcz4KKworICAgIDwhLS0gRGV2aWNlOiAwOTA0OjIwMTEgLS0+CisgICAgPCEtLSBCYXVtIFtWYXJpb0Nvbm5lY3QgODAgKDgwIGNlbGxzKV0gLS0+CisgICAgPG1vZGFsaWFzPnVzYjp2MDkwNHAyMDExKjwvbW9kYWxpYXM+CisKKyAgICA8IS0tIERldmljZTogMDkwNDoyMDE0IC0tPgorICAgIDwhLS0gQmF1bSBbRWNvVmFyaW8gMzIgKDMyIGNlbGxzKV0gLS0+CisgICAgPG1vZGFsaWFzPnVzYjp2MDkwNHAyMDE0KjwvbW9kYWxpYXM+CisKKyAgICA8IS0tIERldmljZTogMDkwNDoyMDE1IC0tPgorICAgIDwhLS0gQmF1bSBbRWNvVmFyaW8gNjQgKDY0IGNlbGxzKV0gLS0+CisgICAgPG1vZGFsaWFzPnVzYjp2MDkwNHAyMDE1KjwvbW9kYWxpYXM+CisKKyAgICA8IS0tIERldmljZTogMDkwNDoyMDE2IC0tPgorICAgIDwhLS0gQmF1bSBbRWNvVmFyaW8gODAgKDgwIGNlbGxzKV0gLS0+CisgICAgPG1vZGFsaWFzPnVzYjp2MDkwNHAyMDE2KjwvbW9kYWxpYXM+CisKKyAgICA8IS0tIERldmljZTogMDkwNDozMDAwIC0tPgorICAgIDwhLS0gQmF1bSBbUmVmcmVzaGFicmFpbGxlIDE4ICgxOCBjZWxscyldIC0tPgorICAgIDxtb2RhbGlhcz51c2I6djA5MDRwMzAwMCo8L21vZGFsaWFzPgorCisgICAgPCEtLSBEZXZpY2U6IDA5MDQ6MzAwMSAtLT4KKyAgICA8IS0tIEJhdW0gW09yYml0IGluIFJlZnJlc2hhYnJhaWxsZSBFbXVsYXRpb24gTW9kZSAoMTggY2VsbHMpXSAtLT4KKyAgICA8IS0tIEJhdW0gW1JlZnJlc2hhYnJhaWxsZSAxOCAoMTggY2VsbHMpXSAtLT4KKyAgICA8bW9kYWxpYXM+dXNiOnYwOTA0cDMwMDEqPC9tb2RhbGlhcz4KKworICAgIDwhLS0gRGV2aWNlOiAwOTA0OjQwMDQgLS0+CisgICAgPCEtLSBCYXVtIFtQcm9udG8hIFYzIDE4ICgxOCBjZWxscyldIC0tPgorICAgIDxtb2RhbGlhcz51c2I6djA5MDRwNDAwNCo8L21vZGFsaWFzPgorCisgICAgPCEtLSBEZXZpY2U6IDA5MDQ6NDAwNSAtLT4KKyAgICA8IS0tIEJhdW0gW1Byb250byEgVjMgNDAgKDQwIGNlbGxzKV0gLS0+CisgICAgPG1vZGFsaWFzPnVzYjp2MDkwNHA0MDA1KjwvbW9kYWxpYXM+CisKKyAgICA8IS0tIERldmljZTogMDkwNDo0MDA3IC0tPgorICAgIDwhLS0gQmF1bSBbUHJvbnRvISBWNCAxOCAoMTggY2VsbHMpXSAtLT4KKyAgICA8bW9kYWxpYXM+dXNiOnYwOTA0cDQwMDcqPC9tb2RhbGlhcz4KKworICAgIDwhLS0gRGV2aWNlOiAwOTA0OjQwMDggLS0+CisgICAgPCEtLSBCYXVtIFtQcm9udG8hIFY0IDQwICg0MCBjZWxscyldIC0tPgorICAgIDxtb2RhbGlhcz51c2I6djA5MDRwNDAwOCo8L21vZGFsaWFzPgorCisgICAgPCEtLSBEZXZpY2U6IDA5MDQ6NjAwMSAtLT4KKyAgICA8IS0tIEJhdW0gW1N1cGVyVmFyaW8yIDQwICg0MCBjZWxscyldIC0tPgorICAgIDxtb2RhbGlhcz51c2I6djA5MDRwNjAwMSo8L21vZGFsaWFzPgorCisgICAgPCEtLSBEZXZpY2U6IDA5MDQ6NjAwMiAtLT4KKyAgICA8IS0tIEJhdW0gW1BvY2tldFZhcmlvMiAoMjQgY2VsbHMpXSAtLT4KKyAgICA8bW9kYWxpYXM+dXNiOnYwOTA0cDYwMDIqPC9tb2RhbGlhcz4KKworICAgIDwhLS0gRGV2aWNlOiAwOTA0OjYwMDMgLS0+CisgICAgPCEtLSBCYXVtIFtTdXBlclZhcmlvMiAzMiAoMzIgY2VsbHMpXSAtLT4KKyAgICA8bW9kYWxpYXM+dXNiOnYwOTA0cDYwMDMqPC9tb2RhbGlhcz4KKworICAgIDwhLS0gRGV2aWNlOiAwOTA0OjYwMDQgLS0+CisgICAgPCEtLSBCYXVtIFtTdXBlclZhcmlvMiA2NCAoNjQgY2VsbHMpXSAtLT4KKyAgICA8bW9kYWxpYXM+dXNiOnYwOTA0cDYwMDQqPC9tb2RhbGlhcz4KKworICAgIDwhLS0gRGV2aWNlOiAwOTA0OjYwMDUgLS0+CisgICAgPCEtLSBCYXVtIFtTdXBlclZhcmlvMiA4MCAoODAgY2VsbHMpXSAtLT4KKyAgICA8bW9kYWxpYXM+dXNiOnYwOTA0cDYwMDUqPC9tb2RhbGlhcz4KKworICAgIDwhLS0gRGV2aWNlOiAwOTA0OjYwMDYgLS0+CisgICAgPCEtLSBCYXVtIFtCcmFpbGxpYW50MiA0MCAoNDAgY2VsbHMpXSAtLT4KKyAgICA8bW9kYWxpYXM+dXNiOnYwOTA0cDYwMDYqPC9tb2RhbGlhcz4KKworICAgIDwhLS0gRGV2aWNlOiAwOTA0OjYwMDcgLS0+CisgICAgPCEtLSBCYXVtIFtCcmFpbGxpYW50MiAyNCAoMjQgY2VsbHMpXSAtLT4KKyAgICA8bW9kYWxpYXM+dXNiOnYwOTA0cDYwMDcqPC9tb2RhbGlhcz4KKworICAgIDwhLS0gRGV2aWNlOiAwOTA0OjYwMDggLS0+CisgICAgPCEtLSBCYXVtIFtCcmFpbGxpYW50MiAzMiAoMzIgY2VsbHMpXSAtLT4KKyAgICA8bW9kYWxpYXM+dXNiOnYwOTA0cDYwMDgqPC9tb2RhbGlhcz4KKworICAgIDwhLS0gRGV2aWNlOiAwOTA0OjYwMDkgLS0+CisgICAgPCEtLSBCYXVtIFtCcmFpbGxpYW50MiA2NCAoNjQgY2VsbHMpXSAtLT4KKyAgICA8bW9kYWxpYXM+dXNiOnYwOTA0cDYwMDkqPC9tb2RhbGlhcz4KKworICAgIDwhLS0gRGV2aWNlOiAwOTA0OjYwMEEgLS0+CisgICAgPCEtLSBCYXVtIFtCcmFpbGxpYW50MiA4MCAoODAgY2VsbHMpXSAtLT4KKyAgICA8bW9kYWxpYXM+dXNiOnYwOTA0cDYwMEEqPC9tb2RhbGlhcz4KKworICAgIDwhLS0gRGV2aWNlOiAwOTA0OjYwMTEgLS0+CisgICAgPCEtLSBCYXVtIFtWYXJpb0Nvbm5lY3QgMjQgKDI0IGNlbGxzKV0gLS0+CisgICAgPG1vZGFsaWFzPnVzYjp2MDkwNHA2MDExKjwvbW9kYWxpYXM+CisKKyAgICA8IS0tIERldmljZTogMDkwNDo2MDEyIC0tPgorICAgIDwhLS0gQmF1bSBbVmFyaW9Db25uZWN0IDMyICgzMiBjZWxscyldIC0tPgorICAgIDxtb2RhbGlhcz51c2I6djA5MDRwNjAxMio8L21vZGFsaWFzPgorCisgICAgPCEtLSBEZXZpY2U6IDA5MDQ6NjAxMyAtLT4KKyAgICA8IS0tIEJhdW0gW1ZhcmlvQ29ubmVjdCA0MCAoNDAgY2VsbHMpXSAtLT4KKyAgICA8bW9kYWxpYXM+dXNiOnYwOTA0cDYwMTMqPC9tb2RhbGlhcz4KKworICAgIDwhLS0gRGV2aWNlOiAwOTA0OjYxMDEgLS0+CisgICAgPCEtLSBCYXVtIFtWYXJpb1VsdHJhIDIwICgyMCBjZWxscyldIC0tPgorICAgIDxtb2RhbGlhcz51c2I6djA5MDRwNjEwMSo8L21vZGFsaWFzPgorCisgICAgPCEtLSBEZXZpY2U6IDA5MDQ6NjEwMiAtLT4KKyAgICA8IS0tIEJhdW0gW1ZhcmlvVWx0cmEgNDAgKDQwIGNlbGxzKV0gLS0+CisgICAgPG1vZGFsaWFzPnVzYjp2MDkwNHA2MTAyKjwvbW9kYWxpYXM+CisKKyAgICA8IS0tIERldmljZTogMDkwNDo2MTAzIC0tPgorICAgIDwhLS0gQmF1bSBbVmFyaW9VbHRyYSAzMiAoMzIgY2VsbHMpXSAtLT4KKyAgICA8bW9kYWxpYXM+dXNiOnYwOTA0cDYxMDMqPC9tb2RhbGlhcz4KKworICAgIDwhLS0gRGV2aWNlOiAwOTIxOjEyMDAgLS0+CisgICAgPCEtLSBIYW5keVRlY2ggW0dvSHVicyBjaGlwXSAtLT4KKyAgICA8bW9kYWxpYXM+dXNiOnYwOTIxcDEyMDAqPC9tb2RhbGlhcz4KKworICAgIDwhLS0gRGV2aWNlOiAwRjRFOjAxMDAgLS0+CisgICAgPCEtLSBGcmVlZG9tU2NpZW50aWZpYyBbRm9jdXMgMV0gLS0+CisgICAgPG1vZGFsaWFzPnVzYjp2MEY0RXAwMTAwKjwvbW9kYWxpYXM+CisKKyAgICA8IS0tIERldmljZTogMEY0RTowMTExIC0tPgorICAgIDwhLS0gRnJlZWRvbVNjaWVudGlmaWMgW1BBQyBNYXRlXSAtLT4KKyAgICA8bW9kYWxpYXM+dXNiOnYwRjRFcDAxMTEqPC9tb2RhbGlhcz4KKworICAgIDwhLS0gRGV2aWNlOiAwRjRFOjAxMTIgLS0+CisgICAgPCEtLSBGcmVlZG9tU2NpZW50aWZpYyBbRm9jdXMgMl0gLS0+CisgICAgPG1vZGFsaWFzPnVzYjp2MEY0RXAwMTEyKjwvbW9kYWxpYXM+CisKKyAgICA8IS0tIERldmljZTogMEY0RTowMTE0IC0tPgorICAgIDwhLS0gRnJlZWRvbVNjaWVudGlmaWMgW0ZvY3VzIDMrXSAtLT4KKyAgICA8bW9kYWxpYXM+dXNiOnYwRjRFcDAxMTQqPC9tb2RhbGlhcz4KKworICAgIDwhLS0gRGV2aWNlOiAxMEM0OkVBNjAgLS0+CisgICAgPCEtLSBHZW5lcmljIElkZW50aWZpZXIgLS0+CisgICAgPCEtLSBWZW5kb3I6IEN5Z25hbCBJbnRlZ3JhdGVkIFByb2R1Y3RzLCBJbmMuIC0tPgorICAgIDwhLS0gUHJvZHVjdDogQ1AyMTB4IFVBUlQgQnJpZGdlIC8gbXlBVlIgbXlTbWFydFVTQiBsaWdodCAtLT4KKyAgICA8IS0tIEJyYWlsbGVNZW1vIFtQb2NrZXRdIC0tPgorICAgIDwhLS0gU2Vpa2EgW0JyYWlsbGUgRGlzcGxheV0gLS0+CisgICAgPG1vZGFsaWFzPnVzYjp2MTBDNHBFQTYwKjwvbW9kYWxpYXM+CisKKyAgICA8IS0tIERldmljZTogMTBDNDpFQTgwIC0tPgorICAgIDwhLS0gR2VuZXJpYyBJZGVudGlmaWVyIC0tPgorICAgIDwhLS0gVmVuZG9yOiBDeWduYWwgSW50ZWdyYXRlZCBQcm9kdWN0cywgSW5jLiAtLT4KKyAgICA8IS0tIFByb2R1Y3Q6IENQMjEweCBVQVJUIEJyaWRnZSAtLT4KKyAgICA8IS0tIFNlaWthIFtOb3RlIFRha2VyXSAtLT4KKyAgICA8bW9kYWxpYXM+dXNiOnYxMEM0cEVBODAqPC9tb2RhbGlhcz4KKworICAgIDwhLS0gRGV2aWNlOiAxMTQ4OjAzMDEgLS0+CisgICAgPCEtLSBCcmFpbGxlTWVtbyBbU21hcnRdIC0tPgorICAgIDxtb2RhbGlhcz51c2I6djExNDhwMDMwMSo8L21vZGFsaWFzPgorCisgICAgPCEtLSBEZXZpY2U6IDEyMDk6QUJDMCAtLT4KKyAgICA8IS0tIEluY2VwdG9yIFthbGwgbW9kZWxzXSAtLT4KKyAgICA8bW9kYWxpYXM+dXNiOnYxMjA5cEFCQzAqPC9tb2RhbGlhcz4KKworICAgIDwhLS0gRGV2aWNlOiAxNkMwOjA1RTEgLS0+CisgICAgPCEtLSBDYW51dGUgW2FsbCBtb2RlbHNdIC0tPgorICAgIDxtb2RhbGlhcz51c2I6djE2QzBwMDVFMSo8L21vZGFsaWFzPgorCisgICAgPCEtLSBEZXZpY2U6IDFBODY6NzUyMyAtLT4KKyAgICA8IS0tIEdlbmVyaWMgSWRlbnRpZmllciAtLT4KKyAgICA8IS0tIFZlbmRvcjogSmlhbmdzdSBRaW5IZW5nLCBMdGQuIC0tPgorICAgIDwhLS0gUHJvZHVjdDogQ0gzNDEgVVNCIEJyaWRnZSBDb250cm9sbGVyIC0tPgorICAgIDwhLS0gQmF1bSBbTkxTIGVSZWFkZXIgWm9vbWF4ICgyMCBjZWxscyldIC0tPgorICAgIDxtb2RhbGlhcz51c2I6djFBODZwNzUyMyo8L21vZGFsaWFzPgorCisgICAgPCEtLSBEZXZpY2U6IDFDNzE6QzAwNCAtLT4KKyAgICA8IS0tIEJyYWlsbGVOb3RlIFtIdW1hbldhcmUgQVBFWF0gLS0+CisgICAgPG1vZGFsaWFzPnVzYjp2MUM3MXBDMDA0KjwvbW9kYWxpYXM+CisKKyAgICA8IS0tIERldmljZTogMUM3MTpDMDA1IC0tPgorICAgIDwhLS0gSHVtYW5XYXJlIFtCcmFpbGxpYW50IEJJIDMyLzQwLCBCcmFpbGxpYW50IEIgODAgKHNlcmlhbCBwcm90b2NvbCldIC0tPgorICAgIDxtb2RhbGlhcz51c2I6djFDNzFwQzAwNSo8L21vZGFsaWFzPgorCisgICAgPCEtLSBEZXZpY2U6IDFDNzE6QzAwNiAtLT4KKyAgICA8IS0tIEh1bWFuV2FyZSBbbm9uLVRvdWNoIG1vZGVscyAoSElEIHByb3RvY29sKV0gLS0+CisgICAgPG1vZGFsaWFzPnVzYjp2MUM3MXBDMDA2KjwvbW9kYWxpYXM+CisKKyAgICA8IS0tIERldmljZTogMUM3MTpDMDBBIC0tPgorICAgIDwhLS0gSHVtYW5XYXJlIFtCcmFpbGxlTm90ZSBUb3VjaCAoSElEIHByb3RvY29sKV0gLS0+CisgICAgPG1vZGFsaWFzPnVzYjp2MUM3MXBDMDBBKjwvbW9kYWxpYXM+CisKKyAgICA8IS0tIERldmljZTogMUM3MTpDMDIxIC0tPgorICAgIDwhLS0gSHVtYW5XYXJlIFtCcmFpbGxpYW50IEJJIDE0IChzZXJpYWwgcHJvdG9jb2wpXSAtLT4KKyAgICA8bW9kYWxpYXM+dXNiOnYxQzcxcEMwMjEqPC9tb2RhbGlhcz4KKworICAgIDwhLS0gRGV2aWNlOiAxQzcxOkMxMDEgLS0+CisgICAgPCEtLSBIdW1hbldhcmUgW0FQSCBDaGFtZWxlb24gMjAgKEhJRCBwcm90b2NvbCwgZmlybXdhcmUgMS4wKV0gLS0+CisgICAgPCEtLSBIdW1hbldhcmUgW0FQSCBDaGFtZWxlb24gMjAgKEhJRCBwcm90b2NvbCwgZmlybXdhcmUgMS4xKV0gLS0+CisgICAgPG1vZGFsaWFzPnVzYjp2MUM3MXBDMTAxKjwvbW9kYWxpYXM+CisKKyAgICA8IS0tIERldmljZTogMUM3MTpDMTA0IC0tPgorICAgIDwhLS0gSHVtYW5XYXJlIFtBUEggQ2hhbWVsZW9uIDIwIChzZXJpYWwgcHJvdG9jb2wpXSAtLT4KKyAgICA8bW9kYWxpYXM+dXNiOnYxQzcxcEMxMDQqPC9tb2RhbGlhcz4KKworICAgIDwhLS0gRGV2aWNlOiAxQzcxOkMxMTEgLS0+CisgICAgPCEtLSBIdW1hbldhcmUgW0FQSCBNYW50aXMgUTQwIChISUQgcHJvdG9jb2wsIGZpcm13YXJlIDEuMCldIC0tPgorICAgIDwhLS0gSHVtYW5XYXJlIFtBUEggTWFudGlzIFE0MCAoSElEIHByb3RvY29sLCBmaXJtd2FyZSAxLjEpXSAtLT4KKyAgICA8bW9kYWxpYXM+dXNiOnYxQzcxcEMxMTEqPC9tb2RhbGlhcz4KKworICAgIDwhLS0gRGV2aWNlOiAxQzcxOkMxMTQgLS0+CisgICAgPCEtLSBIdW1hbldhcmUgW0FQSCBNYW50aXMgUTQwIChzZXJpYWwgcHJvdG9jb2wpXSAtLT4KKyAgICA8bW9kYWxpYXM+dXNiOnYxQzcxcEMxMTQqPC9tb2RhbGlhcz4KKworICAgIDwhLS0gRGV2aWNlOiAxQzcxOkMxMjEgLS0+CisgICAgPCEtLSBIdW1hbldhcmUgW0h1bWFud2FyZSBCcmFpbGxlT25lIChISUQgcHJvdG9jb2wsIGZpcm13YXJlIDEuMCldIC0tPgorICAgIDwhLS0gSHVtYW5XYXJlIFtIdW1hbndhcmUgQnJhaWxsZU9uZSAoSElEIHByb3RvY29sLCBmaXJtd2FyZSAxLjEpXSAtLT4KKyAgICA8bW9kYWxpYXM+dXNiOnYxQzcxcEMxMjEqPC9tb2RhbGlhcz4KKworICAgIDwhLS0gRGV2aWNlOiAxQzcxOkMxMjQgLS0+CisgICAgPCEtLSBIdW1hbldhcmUgW0h1bWFud2FyZSBCcmFpbGxlT25lIChzZXJpYWwgcHJvdG9jb2wpXSAtLT4KKyAgICA8bW9kYWxpYXM+dXNiOnYxQzcxcEMxMjQqPC9tb2RhbGlhcz4KKworICAgIDwhLS0gRGV2aWNlOiAxQzcxOkMxMzEgLS0+CisgICAgPCEtLSBIdW1hbldhcmUgW0h1bWFud2FyZSBCcmFpbGxpYW50IEJJIDQwWCAoSElEIHByb3RvY29sLCBmaXJtd2FyZSAxLjApXSAtLT4KKyAgICA8IS0tIEh1bWFuV2FyZSBbSHVtYW53YXJlIEJyYWlsbGlhbnQgQkkgNDBYIChISUQgcHJvdG9jb2wsIGZpcm13YXJlIDEuMSldIC0tPgorICAgIDxtb2RhbGlhcz51c2I6djFDNzFwQzEzMSo8L21vZGFsaWFzPgorCisgICAgPCEtLSBEZXZpY2U6IDFDNzE6QzE0MSAtLT4KKyAgICA8IS0tIEh1bWFuV2FyZSBbSHVtYW53YXJlIEJyYWlsbGlhbnQgQkkgMjBYIChISUQgcHJvdG9jb2wsIGZpcm13YXJlIDEuMCldIC0tPgorICAgIDwhLS0gSHVtYW5XYXJlIFtIdW1hbndhcmUgQnJhaWxsaWFudCBCSSAyMFggKEhJRCBwcm90b2NvbCwgZmlybXdhcmUgMS4xKV0gLS0+CisgICAgPG1vZGFsaWFzPnVzYjp2MUM3MXBDMTQxKjwvbW9kYWxpYXM+CisKKyAgICA8IS0tIERldmljZTogMUM3MTpDRTAxIC0tPgorICAgIDwhLS0gSHVtYW5XYXJlIFtOTFMgZVJlYWRlciAoSElEIHByb3RvY29sLCBmaXJtd2FyZSAxLjApXSAtLT4KKyAgICA8IS0tIEh1bWFuV2FyZSBbTkxTIGVSZWFkZXIgKEhJRCBwcm90b2NvbCwgZmlybXdhcmUgMS4xKV0gLS0+CisgICAgPG1vZGFsaWFzPnVzYjp2MUM3MXBDRTAxKjwvbW9kYWxpYXM+CisKKyAgICA8IS0tIERldmljZTogMUM3MTpDRTA0IC0tPgorICAgIDwhLS0gSHVtYW5XYXJlIFtOTFMgZVJlYWRlciAoc2VyaWFsIHByb3RvY29sKV0gLS0+CisgICAgPG1vZGFsaWFzPnVzYjp2MUM3MXBDRTA0KjwvbW9kYWxpYXM+CisKKyAgICA8IS0tIERldmljZTogMUZFNDowMDAzIC0tPgorICAgIDwhLS0gSGFuZHlUZWNoIFtVU0ItSElEIGFkYXB0ZXJdIC0tPgorICAgIDxtb2RhbGlhcz51c2I6djFGRTRwMDAwMyo8L21vZGFsaWFzPgorCisgICAgPCEtLSBEZXZpY2U6IDFGRTQ6MDA0NCAtLT4KKyAgICA8IS0tIEhhbmR5VGVjaCBbRWFzeSBCcmFpbGxlIChISUQpXSAtLT4KKyAgICA8bW9kYWxpYXM+dXNiOnYxRkU0cDAwNDQqPC9tb2RhbGlhcz4KKworICAgIDwhLS0gRGV2aWNlOiAxRkU0OjAwNTQgLS0+CisgICAgPCEtLSBIYW5keVRlY2ggW0FjdGl2ZSBCcmFpbGxlXSAtLT4KKyAgICA8bW9kYWxpYXM+dXNiOnYxRkU0cDAwNTQqPC9tb2RhbGlhcz4KKworICAgIDwhLS0gRGV2aWNlOiAxRkU0OjAwNTUgLS0+CisgICAgPCEtLSBIYW5keVRlY2ggW0Nvbm5lY3QgQnJhaWxsZSA0MF0gLS0+CisgICAgPG1vZGFsaWFzPnVzYjp2MUZFNHAwMDU1KjwvbW9kYWxpYXM+CisKKyAgICA8IS0tIERldmljZTogMUZFNDowMDYxIC0tPgorICAgIDwhLS0gSGFuZHlUZWNoIFtBY3RpbGlub10gLS0+CisgICAgPG1vZGFsaWFzPnVzYjp2MUZFNHAwMDYxKjwvbW9kYWxpYXM+CisKKyAgICA8IS0tIERldmljZTogMUZFNDowMDY0IC0tPgorICAgIDwhLS0gSGFuZHlUZWNoIFtBY3RpdmUgU3RhciA0MF0gLS0+CisgICAgPG1vZGFsaWFzPnVzYjp2MUZFNHAwMDY0KjwvbW9kYWxpYXM+CisKKyAgICA8IS0tIERldmljZTogMUZFNDowMDc0IC0tPgorICAgIDwhLS0gSGFuZHlUZWNoIFtCcmFpbGxlIFN0YXIgNDAgKEhJRCldIC0tPgorICAgIDxtb2RhbGlhcz51c2I6djFGRTRwMDA3NCo8L21vZGFsaWFzPgorCisgICAgPCEtLSBEZXZpY2U6IDFGRTQ6MDA4MSAtLT4KKyAgICA8IS0tIEhhbmR5VGVjaCBbQmFzaWMgQnJhaWxsZSAxNl0gLS0+CisgICAgPG1vZGFsaWFzPnVzYjp2MUZFNHAwMDgxKjwvbW9kYWxpYXM+CisKKyAgICA8IS0tIERldmljZTogMUZFNDowMDgyIC0tPgorICAgIDwhLS0gSGFuZHlUZWNoIFtCYXNpYyBCcmFpbGxlIDIwXSAtLT4KKyAgICA8bW9kYWxpYXM+dXNiOnYxRkU0cDAwODIqPC9tb2RhbGlhcz4KKworICAgIDwhLS0gRGV2aWNlOiAxRkU0OjAwODMgLS0+CisgICAgPCEtLSBIYW5keVRlY2ggW0Jhc2ljIEJyYWlsbGUgMzJdIC0tPgorICAgIDxtb2RhbGlhcz51c2I6djFGRTRwMDA4Myo8L21vZGFsaWFzPgorCisgICAgPCEtLSBEZXZpY2U6IDFGRTQ6MDA4NCAtLT4KKyAgICA8IS0tIEhhbmR5VGVjaCBbQmFzaWMgQnJhaWxsZSA0MF0gLS0+CisgICAgPG1vZGFsaWFzPnVzYjp2MUZFNHAwMDg0KjwvbW9kYWxpYXM+CisKKyAgICA8IS0tIERldmljZTogMUZFNDowMDg2IC0tPgorICAgIDwhLS0gSGFuZHlUZWNoIFtCYXNpYyBCcmFpbGxlIDY0XSAtLT4KKyAgICA8bW9kYWxpYXM+dXNiOnYxRkU0cDAwODYqPC9tb2RhbGlhcz4KKworICAgIDwhLS0gRGV2aWNlOiAxRkU0OjAwODcgLS0+CisgICAgPCEtLSBIYW5keVRlY2ggW0Jhc2ljIEJyYWlsbGUgODBdIC0tPgorICAgIDxtb2RhbGlhcz51c2I6djFGRTRwMDA4Nyo8L21vZGFsaWFzPgorCisgICAgPCEtLSBEZXZpY2U6IDFGRTQ6MDA4QSAtLT4KKyAgICA8IS0tIEhhbmR5VGVjaCBbQmFzaWMgQnJhaWxsZSA0OF0gLS0+CisgICAgPG1vZGFsaWFzPnVzYjp2MUZFNHAwMDhBKjwvbW9kYWxpYXM+CisKKyAgICA8IS0tIERldmljZTogMUZFNDowMDhCIC0tPgorICAgIDwhLS0gSGFuZHlUZWNoIFtCYXNpYyBCcmFpbGxlIDE2MF0gLS0+CisgICAgPG1vZGFsaWFzPnVzYjp2MUZFNHAwMDhCKjwvbW9kYWxpYXM+CisKKyAgICA8IS0tIERldmljZTogMUZFNDowMEE0IC0tPgorICAgIDwhLS0gSGFuZHlUZWNoIFtBY3RpdmF0b3JdIC0tPgorICAgIDxtb2RhbGlhcz51c2I6djFGRTRwMDBBNCo8L21vZGFsaWFzPgorCisgICAgPCEtLSBEZXZpY2U6IDQyNDI6MDAwMSAtLT4KKyAgICA8IS0tIFBlZ2FzdXMgW2FsbCBtb2RlbHNdIC0tPgorICAgIDxtb2RhbGlhcz51c2I6djQyNDJwMDAwMSo8L21vZGFsaWFzPgorCisgICAgPCEtLSBEZXZpY2U6IEMyNTE6MTEyMiAtLT4KKyAgICA8IS0tIEV1cm9CcmFpbGxlIFtFc3lzICh2ZXJzaW9uIDwgMy4wLCBubyBTRCBjYXJkKV0gLS0+CisgICAgPG1vZGFsaWFzPnVzYjp2QzI1MXAxMTIyKjwvbW9kYWxpYXM+CisKKyAgICA8IS0tIERldmljZTogQzI1MToxMTIzIC0tPgorICAgIDwhLS0gRXVyb0JyYWlsbGUgW3Jlc2VydmVkXSAtLT4KKyAgICA8bW9kYWxpYXM+dXNiOnZDMjUxcDExMjMqPC9tb2RhbGlhcz4KKworICAgIDwhLS0gRGV2aWNlOiBDMjUxOjExMjQgLS0+CisgICAgPCEtLSBFdXJvQnJhaWxsZSBbRXN5cyAodmVyc2lvbiA8IDMuMCwgd2l0aCBTRCBjYXJkKV0gLS0+CisgICAgPG1vZGFsaWFzPnVzYjp2QzI1MXAxMTI0KjwvbW9kYWxpYXM+CisKKyAgICA8IS0tIERldmljZTogQzI1MToxMTI1IC0tPgorICAgIDwhLS0gRXVyb0JyYWlsbGUgW3Jlc2VydmVkXSAtLT4KKyAgICA8bW9kYWxpYXM+dXNiOnZDMjUxcDExMjUqPC9tb2RhbGlhcz4KKworICAgIDwhLS0gRGV2aWNlOiBDMjUxOjExMjYgLS0+CisgICAgPCEtLSBFdXJvQnJhaWxsZSBbRXN5cyAodmVyc2lvbiA+PSAzLjAsIG5vIFNEIGNhcmQpXSAtLT4KKyAgICA8bW9kYWxpYXM+dXNiOnZDMjUxcDExMjYqPC9tb2RhbGlhcz4KKworICAgIDwhLS0gRGV2aWNlOiBDMjUxOjExMjcgLS0+CisgICAgPCEtLSBFdXJvQnJhaWxsZSBbcmVzZXJ2ZWRdIC0tPgorICAgIDxtb2RhbGlhcz51c2I6dkMyNTFwMTEyNyo8L21vZGFsaWFzPgorCisgICAgPCEtLSBEZXZpY2U6IEMyNTE6MTEyOCAtLT4KKyAgICA8IS0tIEV1cm9CcmFpbGxlIFtFc3lzICh2ZXJzaW9uID49IDMuMCwgd2l0aCBTRCBjYXJkKV0gLS0+CisgICAgPG1vZGFsaWFzPnVzYjp2QzI1MXAxMTI4KjwvbW9kYWxpYXM+CisKKyAgICA8IS0tIERldmljZTogQzI1MToxMTI5IC0tPgorICAgIDwhLS0gRXVyb0JyYWlsbGUgW3Jlc2VydmVkXSAtLT4KKyAgICA8bW9kYWxpYXM+dXNiOnZDMjUxcDExMjkqPC9tb2RhbGlhcz4KKworICAgIDwhLS0gRGV2aWNlOiBDMjUxOjExMkEgLS0+CisgICAgPCEtLSBFdXJvQnJhaWxsZSBbcmVzZXJ2ZWRdIC0tPgorICAgIDxtb2RhbGlhcz51c2I6dkMyNTFwMTEyQSo8L21vZGFsaWFzPgorCisgICAgPCEtLSBEZXZpY2U6IEMyNTE6MTEyQiAtLT4KKyAgICA8IS0tIEV1cm9CcmFpbGxlIFtyZXNlcnZlZF0gLS0+CisgICAgPG1vZGFsaWFzPnVzYjp2QzI1MXAxMTJCKjwvbW9kYWxpYXM+CisKKyAgICA8IS0tIERldmljZTogQzI1MToxMTJDIC0tPgorICAgIDwhLS0gRXVyb0JyYWlsbGUgW3Jlc2VydmVkXSAtLT4KKyAgICA8bW9kYWxpYXM+dXNiOnZDMjUxcDExMkMqPC9tb2RhbGlhcz4KKworICAgIDwhLS0gRGV2aWNlOiBDMjUxOjExMkQgLS0+CisgICAgPCEtLSBFdXJvQnJhaWxsZSBbcmVzZXJ2ZWRdIC0tPgorICAgIDxtb2RhbGlhcz51c2I6dkMyNTFwMTEyRCo8L21vZGFsaWFzPgorCisgICAgPCEtLSBEZXZpY2U6IEMyNTE6MTEyRSAtLT4KKyAgICA8IS0tIEV1cm9CcmFpbGxlIFtyZXNlcnZlZF0gLS0+CisgICAgPG1vZGFsaWFzPnVzYjp2QzI1MXAxMTJFKjwvbW9kYWxpYXM+CisKKyAgICA8IS0tIERldmljZTogQzI1MToxMTJGIC0tPgorICAgIDwhLS0gRXVyb0JyYWlsbGUgW3Jlc2VydmVkXSAtLT4KKyAgICA8bW9kYWxpYXM+dXNiOnZDMjUxcDExMkYqPC9tb2RhbGlhcz4KKworICAgIDwhLS0gRGV2aWNlOiBDMjUxOjExMzAgLS0+CisgICAgPCEtLSBFdXJvQnJhaWxsZSBbRXN5dGltZSAoZmlybXdhcmUgMS4wMywgMjAxNC0wMy0zMSldIC0tPgorICAgIDwhLS0gRXVyb0JyYWlsbGUgW0VzeXRpbWVdIC0tPgorICAgIDxtb2RhbGlhcz51c2I6dkMyNTFwMTEzMCo8L21vZGFsaWFzPgorCisgICAgPCEtLSBEZXZpY2U6IEMyNTE6MTEzMSAtLT4KKyAgICA8IS0tIEV1cm9CcmFpbGxlIFtyZXNlcnZlZF0gLS0+CisgICAgPG1vZGFsaWFzPnVzYjp2QzI1MXAxMTMxKjwvbW9kYWxpYXM+CisKKyAgICA8IS0tIERldmljZTogQzI1MToxMTMyIC0tPgorICAgIDwhLS0gRXVyb0JyYWlsbGUgW3Jlc2VydmVkXSAtLT4KKyAgICA8bW9kYWxpYXM+dXNiOnZDMjUxcDExMzIqPC9tb2RhbGlhcz4KKworICAgIDwhLS0gRU5EX1VTQl9CUkFJTExFX0RFVklDRVMgLS0+CisgIDwvcHJvdmlkZXM+Cis8L2NvbXBvbmVudD4KZGlmZiAtLWdpdCBhL0F1dG9zdGFydC9Ib3RwbHVnL2JybHR0eSBiL0F1dG9zdGFydC9Ib3RwbHVnL2JybHR0eQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi43NzExMDBlCi0tLSAvZGV2L251bGwKKysrIGIvQXV0b3N0YXJ0L0hvdHBsdWcvYnJsdHR5CkBAIC0wLDAgKzEsNDkgQEAKKyMhL2Jpbi9zaAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorIyAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyMKKyMgQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorIworIyBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorIworIyBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisjIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyMgbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisjCisjIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK3Byb2dyYW1OYW1lPSIkezAjIyovfSIKKworcHJvZ3JhbU1lc3NhZ2UoKSB7CisgICBlY2hvID4mMiAiJHtwcm9ncmFtTmFtZX06ICR7MX0iCit9CisKK3Byb2dyYW1FcnJvcigpIHsKKyAgIFsgLW4gIiR7MX0iIF0gJiYgcHJvZ3JhbU1lc3NhZ2UgIiR7MX0iCisgICBleGl0ICIkezI6LTJ9IgorfQorCitbIC1uICIke0FDVElPTn0iIF0gfHwgcHJvZ3JhbUVycm9yICJhY3Rpb24gbm90IHNwZWNpZmllZC4iCitjYXNlICIke0FDVElPTn0iCitpbgorICAgYWRkKQorICAgICAgZHJpdmVyPSJhdXRvIgorICAgICAgZGV2aWNlPSJ1c2I6IgorCisgICAgICBicmx0dHkgLWIiJHtkcml2ZXJ9IiAtZCIke2RldmljZX0iICYmIHsKKyAgICAgICAgIFsgLW4gIiR7UkVNT1ZFUn0iIF0gJiYgbG4gLXMgLWYgLS0gIiR7MH0iICIke1JFTU9WRVJ9IgorICAgICAgfQorICAgICAgOzsKKworICAgcmVtb3ZlKQorICAgICAgOzsKKworICAgKikgcHJvZ3JhbUVycm9yICJhY3Rpb24gbm90IHN1cHBvcnRlZDogJHtBQ1RJT059IgorZXNhYworCitleGl0IDAKZGlmZiAtLWdpdCBhL0F1dG9zdGFydC9Ib3RwbHVnL2JybHR0eS51c2VybWFwIGIvQXV0b3N0YXJ0L0hvdHBsdWcvYnJsdHR5LnVzZXJtYXAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjE1NWNhYwotLS0gL2Rldi9udWxsCisrKyBiL0F1dG9zdGFydC9Ib3RwbHVnL2JybHR0eS51c2VybWFwCkBAIC0wLDAgKzEsNTI4IEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisjICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorIworIyBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisjCisjIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisjCisjIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyMgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorIyBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyMKKyMgV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworIworIyBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIyBCRUdJTl9VU0JfQlJBSUxMRV9ERVZJQ0VTCisKKyMgRGV2aWNlOiAwNDAzOjYwMDEKKyMgR2VuZXJpYyBJZGVudGlmaWVyCisjIFZlbmRvcjogRnV0dXJlIFRlY2hub2xvZ3kgRGV2aWNlcyBJbnRlcm5hdGlvbmFsLCBMdGQuCisjIFByb2R1Y3Q6IEZUMjMyIFVTQi1TZXJpYWwgKFVBUlQpIElDCisjIEFsYmF0cm9zcyBbYWxsIG1vZGVsc10KKyMgQ2VicmEgW2FsbCBtb2RlbHNdCisjIEhJTVMgW1N5bmMgQnJhaWxsZV0KKyMgSGFuZHlUZWNoIFtGVERJIGNoaXBdCisjIEhlZG8gW01vYmlsTGluZV0KKyMgTURWIFthbGwgbW9kZWxzXQorYnJsdHR5IDB4MDAwMyAweDA0MDMgMHg2MDAxCisKKyMgRGV2aWNlOiAwNDAzOjYwMTAKKyMgR2VuZXJpYyBJZGVudGlmaWVyCisjIFZlbmRvcjogRnV0dXJlIFRlY2hub2xvZ3kgRGV2aWNlcyBJbnRlcm5hdGlvbmFsLCBMdGQKKyMgUHJvZHVjdDogRlQyMjMyQy9EL0ggRHVhbCBVQVJUL0ZJRk8gSUMKKyMgRG90UGFkIFthbGwgbW9kZWxzXQorYnJsdHR5IDB4MDAwMyAweDA0MDMgMHg2MDEwCisKKyMgRGV2aWNlOiAwNDAzOkRFNTgKKyMgSGVkbyBbTW9iaWxMaW5lXQorYnJsdHR5IDB4MDAwMyAweDA0MDMgMHhkZTU4CisKKyMgRGV2aWNlOiAwNDAzOkRFNTkKKyMgSGVkbyBbUHJvZmlMaW5lXQorYnJsdHR5IDB4MDAwMyAweDA0MDMgMHhkZTU5CisKKyMgRGV2aWNlOiAwNDAzOkYyMDgKKyMgUGFwZW5tZWllciBbYWxsIG1vZGVsc10KK2JybHR0eSAweDAwMDMgMHgwNDAzIDB4ZjIwOAorCisjIERldmljZTogMDQwMzpGRTcwCisjIEJhdW0gW1ZhcmlvIDQwICg0MCBjZWxscyldCiticmx0dHkgMHgwMDAzIDB4MDQwMyAweGZlNzAKKworIyBEZXZpY2U6IDA0MDM6RkU3MQorIyBCYXVtIFtQb2NrZXRWYXJpbyAoMjQgY2VsbHMpXQorYnJsdHR5IDB4MDAwMyAweDA0MDMgMHhmZTcxCisKKyMgRGV2aWNlOiAwNDAzOkZFNzIKKyMgQmF1bSBbU3VwZXJWYXJpbyA0MCAoNDAgY2VsbHMpXQorYnJsdHR5IDB4MDAwMyAweDA0MDMgMHhmZTcyCisKKyMgRGV2aWNlOiAwNDAzOkZFNzMKKyMgQmF1bSBbU3VwZXJWYXJpbyAzMiAoMzIgY2VsbHMpXQorYnJsdHR5IDB4MDAwMyAweDA0MDMgMHhmZTczCisKKyMgRGV2aWNlOiAwNDAzOkZFNzQKKyMgQmF1bSBbU3VwZXJWYXJpbyA2NCAoNjQgY2VsbHMpXQorYnJsdHR5IDB4MDAwMyAweDA0MDMgMHhmZTc0CisKKyMgRGV2aWNlOiAwNDAzOkZFNzUKKyMgQmF1bSBbU3VwZXJWYXJpbyA4MCAoODAgY2VsbHMpXQorYnJsdHR5IDB4MDAwMyAweDA0MDMgMHhmZTc1CisKKyMgRGV2aWNlOiAwNDAzOkZFNzYKKyMgQmF1bSBbVmFyaW9Qcm8gODAgKDgwIGNlbGxzKV0KK2JybHR0eSAweDAwMDMgMHgwNDAzIDB4ZmU3NgorCisjIERldmljZTogMDQwMzpGRTc3CisjIEJhdW0gW1ZhcmlvUHJvIDY0ICg2NCBjZWxscyldCiticmx0dHkgMHgwMDAzIDB4MDQwMyAweGZlNzcKKworIyBEZXZpY2U6IDA0NTI6MDEwMAorIyBNZXRlYyBbYWxsIG1vZGVsc10KK2JybHR0eSAweDAwMDMgMHgwNDUyIDB4MDEwMAorCisjIERldmljZTogMDQ1RTo5MzBBCisjIEhJTVMgW0JyYWlsbGUgU2Vuc2UgKFVTQiAxLjEpXQorIyBISU1TIFtCcmFpbGxlIFNlbnNlIChVU0IgMi4wKV0KKyMgSElNUyBbQnJhaWxsZSBTZW5zZSBVMiAoVVNCIDIuMCldCiticmx0dHkgMHgwMDAzIDB4MDQ1ZSAweDkzMGEKKworIyBEZXZpY2U6IDA0NUU6OTMwQgorIyBISU1TIFtCcmFpbGxlIEVkZ2UgYW5kIFFCcmFpbGxlWExdCiticmx0dHkgMHgwMDAzIDB4MDQ1ZSAweDkzMGIKKworIyBEZXZpY2U6IDA0ODM6QTFEMworIyBCYXVtIFtPcmJpdCBSZWFkZXIgMjAgKDIwIGNlbGxzKV0KK2JybHR0eSAweDAwMDMgMHgwNDgzIDB4YTFkMworCisjIERldmljZTogMDQ4MzpBMzY2CisjIEJhdW0gW09yYml0IFJlYWRlciA0MCAoNDAgY2VsbHMpXQorYnJsdHR5IDB4MDAwMyAweDA0ODMgMHhhMzY2CisKKyMgRGV2aWNlOiAwNkIwOjAwMDEKKyMgQWx2YSBbU2F0ZWxsaXRlICg1bm4pXQorYnJsdHR5IDB4MDAwMyAweDA2YjAgMHgwMDAxCisKKyMgRGV2aWNlOiAwNzk4OjAwMDEKKyMgVm95YWdlciBbYWxsIG1vZGVsc10KK2JybHR0eSAweDAwMDMgMHgwNzk4IDB4MDAwMQorCisjIERldmljZTogMDc5ODowNjAwCisjIEFsdmEgW1ZveWFnZXIgUHJvdG9jb2wgQ29udmVydGVyXQorYnJsdHR5IDB4MDAwMyAweDA3OTggMHgwNjAwCisKKyMgRGV2aWNlOiAwNzk4OjA2MjQKKyMgQWx2YSBbQkM2MjRdCiticmx0dHkgMHgwMDAzIDB4MDc5OCAweDA2MjQKKworIyBEZXZpY2U6IDA3OTg6MDY0MAorIyBBbHZhIFtCQzY0MF0KK2JybHR0eSAweDAwMDMgMHgwNzk4IDB4MDY0MAorCisjIERldmljZTogMDc5ODowNjgwCisjIEFsdmEgW0JDNjgwXQorYnJsdHR5IDB4MDAwMyAweDA3OTggMHgwNjgwCisKKyMgRGV2aWNlOiAwOTA0OjEwMTYKKyMgRnJhbmtBdWRpb2RhdGEgW0IySzg0IChiZWZvcmUgZmlybXdhcmUgaW5zdGFsbGF0aW9uKV0KK2JybHR0eSAweDAwMDMgMHgwOTA0IDB4MTAxNgorCisjIERldmljZTogMDkwNDoxMDE3CisjIEZyYW5rQXVkaW9kYXRhIFtCMks4NCAoYWZ0ZXIgZmlybXdhcmUgaW5zdGFsbGF0aW9uKV0KK2JybHR0eSAweDAwMDMgMHgwOTA0IDB4MTAxNworCisjIERldmljZTogMDkwNDoyMDAwCisjIEJhdW0gW1ZhcmlvUHJvIDQwICg0MCBjZWxscyldCiticmx0dHkgMHgwMDAzIDB4MDkwNCAweDIwMDAKKworIyBEZXZpY2U6IDA5MDQ6MjAwMQorIyBCYXVtIFtFY29WYXJpbyAyNCAoMjQgY2VsbHMpXQorYnJsdHR5IDB4MDAwMyAweDA5MDQgMHgyMDAxCisKKyMgRGV2aWNlOiAwOTA0OjIwMDIKKyMgQmF1bSBbRWNvVmFyaW8gNDAgKDQwIGNlbGxzKV0KK2JybHR0eSAweDAwMDMgMHgwOTA0IDB4MjAwMgorCisjIERldmljZTogMDkwNDoyMDA3CisjIEJhdW0gW1ZhcmlvQ29ubmVjdCA0MCAoNDAgY2VsbHMpXQorYnJsdHR5IDB4MDAwMyAweDA5MDQgMHgyMDA3CisKKyMgRGV2aWNlOiAwOTA0OjIwMDgKKyMgQmF1bSBbVmFyaW9Db25uZWN0IDMyICgzMiBjZWxscyldCiticmx0dHkgMHgwMDAzIDB4MDkwNCAweDIwMDgKKworIyBEZXZpY2U6IDA5MDQ6MjAwOQorIyBCYXVtIFtWYXJpb0Nvbm5lY3QgMjQgKDI0IGNlbGxzKV0KK2JybHR0eSAweDAwMDMgMHgwOTA0IDB4MjAwOQorCisjIERldmljZTogMDkwNDoyMDEwCisjIEJhdW0gW1ZhcmlvQ29ubmVjdCA2NCAoNjQgY2VsbHMpXQorYnJsdHR5IDB4MDAwMyAweDA5MDQgMHgyMDEwCisKKyMgRGV2aWNlOiAwOTA0OjIwMTEKKyMgQmF1bSBbVmFyaW9Db25uZWN0IDgwICg4MCBjZWxscyldCiticmx0dHkgMHgwMDAzIDB4MDkwNCAweDIwMTEKKworIyBEZXZpY2U6IDA5MDQ6MjAxNAorIyBCYXVtIFtFY29WYXJpbyAzMiAoMzIgY2VsbHMpXQorYnJsdHR5IDB4MDAwMyAweDA5MDQgMHgyMDE0CisKKyMgRGV2aWNlOiAwOTA0OjIwMTUKKyMgQmF1bSBbRWNvVmFyaW8gNjQgKDY0IGNlbGxzKV0KK2JybHR0eSAweDAwMDMgMHgwOTA0IDB4MjAxNQorCisjIERldmljZTogMDkwNDoyMDE2CisjIEJhdW0gW0Vjb1ZhcmlvIDgwICg4MCBjZWxscyldCiticmx0dHkgMHgwMDAzIDB4MDkwNCAweDIwMTYKKworIyBEZXZpY2U6IDA5MDQ6MzAwMAorIyBCYXVtIFtSZWZyZXNoYWJyYWlsbGUgMTggKDE4IGNlbGxzKV0KK2JybHR0eSAweDAwMDMgMHgwOTA0IDB4MzAwMAorCisjIERldmljZTogMDkwNDozMDAxCisjIEJhdW0gW09yYml0IGluIFJlZnJlc2hhYnJhaWxsZSBFbXVsYXRpb24gTW9kZSAoMTggY2VsbHMpXQorIyBCYXVtIFtSZWZyZXNoYWJyYWlsbGUgMTggKDE4IGNlbGxzKV0KK2JybHR0eSAweDAwMDMgMHgwOTA0IDB4MzAwMQorCisjIERldmljZTogMDkwNDo0MDA0CisjIEJhdW0gW1Byb250byEgVjMgMTggKDE4IGNlbGxzKV0KK2JybHR0eSAweDAwMDMgMHgwOTA0IDB4NDAwNAorCisjIERldmljZTogMDkwNDo0MDA1CisjIEJhdW0gW1Byb250byEgVjMgNDAgKDQwIGNlbGxzKV0KK2JybHR0eSAweDAwMDMgMHgwOTA0IDB4NDAwNQorCisjIERldmljZTogMDkwNDo0MDA3CisjIEJhdW0gW1Byb250byEgVjQgMTggKDE4IGNlbGxzKV0KK2JybHR0eSAweDAwMDMgMHgwOTA0IDB4NDAwNworCisjIERldmljZTogMDkwNDo0MDA4CisjIEJhdW0gW1Byb250byEgVjQgNDAgKDQwIGNlbGxzKV0KK2JybHR0eSAweDAwMDMgMHgwOTA0IDB4NDAwOAorCisjIERldmljZTogMDkwNDo2MDAxCisjIEJhdW0gW1N1cGVyVmFyaW8yIDQwICg0MCBjZWxscyldCiticmx0dHkgMHgwMDAzIDB4MDkwNCAweDYwMDEKKworIyBEZXZpY2U6IDA5MDQ6NjAwMgorIyBCYXVtIFtQb2NrZXRWYXJpbzIgKDI0IGNlbGxzKV0KK2JybHR0eSAweDAwMDMgMHgwOTA0IDB4NjAwMgorCisjIERldmljZTogMDkwNDo2MDAzCisjIEJhdW0gW1N1cGVyVmFyaW8yIDMyICgzMiBjZWxscyldCiticmx0dHkgMHgwMDAzIDB4MDkwNCAweDYwMDMKKworIyBEZXZpY2U6IDA5MDQ6NjAwNAorIyBCYXVtIFtTdXBlclZhcmlvMiA2NCAoNjQgY2VsbHMpXQorYnJsdHR5IDB4MDAwMyAweDA5MDQgMHg2MDA0CisKKyMgRGV2aWNlOiAwOTA0OjYwMDUKKyMgQmF1bSBbU3VwZXJWYXJpbzIgODAgKDgwIGNlbGxzKV0KK2JybHR0eSAweDAwMDMgMHgwOTA0IDB4NjAwNQorCisjIERldmljZTogMDkwNDo2MDA2CisjIEJhdW0gW0JyYWlsbGlhbnQyIDQwICg0MCBjZWxscyldCiticmx0dHkgMHgwMDAzIDB4MDkwNCAweDYwMDYKKworIyBEZXZpY2U6IDA5MDQ6NjAwNworIyBCYXVtIFtCcmFpbGxpYW50MiAyNCAoMjQgY2VsbHMpXQorYnJsdHR5IDB4MDAwMyAweDA5MDQgMHg2MDA3CisKKyMgRGV2aWNlOiAwOTA0OjYwMDgKKyMgQmF1bSBbQnJhaWxsaWFudDIgMzIgKDMyIGNlbGxzKV0KK2JybHR0eSAweDAwMDMgMHgwOTA0IDB4NjAwOAorCisjIERldmljZTogMDkwNDo2MDA5CisjIEJhdW0gW0JyYWlsbGlhbnQyIDY0ICg2NCBjZWxscyldCiticmx0dHkgMHgwMDAzIDB4MDkwNCAweDYwMDkKKworIyBEZXZpY2U6IDA5MDQ6NjAwQQorIyBCYXVtIFtCcmFpbGxpYW50MiA4MCAoODAgY2VsbHMpXQorYnJsdHR5IDB4MDAwMyAweDA5MDQgMHg2MDBhCisKKyMgRGV2aWNlOiAwOTA0OjYwMTEKKyMgQmF1bSBbVmFyaW9Db25uZWN0IDI0ICgyNCBjZWxscyldCiticmx0dHkgMHgwMDAzIDB4MDkwNCAweDYwMTEKKworIyBEZXZpY2U6IDA5MDQ6NjAxMgorIyBCYXVtIFtWYXJpb0Nvbm5lY3QgMzIgKDMyIGNlbGxzKV0KK2JybHR0eSAweDAwMDMgMHgwOTA0IDB4NjAxMgorCisjIERldmljZTogMDkwNDo2MDEzCisjIEJhdW0gW1ZhcmlvQ29ubmVjdCA0MCAoNDAgY2VsbHMpXQorYnJsdHR5IDB4MDAwMyAweDA5MDQgMHg2MDEzCisKKyMgRGV2aWNlOiAwOTA0OjYxMDEKKyMgQmF1bSBbVmFyaW9VbHRyYSAyMCAoMjAgY2VsbHMpXQorYnJsdHR5IDB4MDAwMyAweDA5MDQgMHg2MTAxCisKKyMgRGV2aWNlOiAwOTA0OjYxMDIKKyMgQmF1bSBbVmFyaW9VbHRyYSA0MCAoNDAgY2VsbHMpXQorYnJsdHR5IDB4MDAwMyAweDA5MDQgMHg2MTAyCisKKyMgRGV2aWNlOiAwOTA0OjYxMDMKKyMgQmF1bSBbVmFyaW9VbHRyYSAzMiAoMzIgY2VsbHMpXQorYnJsdHR5IDB4MDAwMyAweDA5MDQgMHg2MTAzCisKKyMgRGV2aWNlOiAwOTIxOjEyMDAKKyMgSGFuZHlUZWNoIFtHb0h1YnMgY2hpcF0KK2JybHR0eSAweDAwMDMgMHgwOTIxIDB4MTIwMAorCisjIERldmljZTogMEY0RTowMTAwCisjIEZyZWVkb21TY2llbnRpZmljIFtGb2N1cyAxXQorYnJsdHR5IDB4MDAwMyAweDBmNGUgMHgwMTAwCisKKyMgRGV2aWNlOiAwRjRFOjAxMTEKKyMgRnJlZWRvbVNjaWVudGlmaWMgW1BBQyBNYXRlXQorYnJsdHR5IDB4MDAwMyAweDBmNGUgMHgwMTExCisKKyMgRGV2aWNlOiAwRjRFOjAxMTIKKyMgRnJlZWRvbVNjaWVudGlmaWMgW0ZvY3VzIDJdCiticmx0dHkgMHgwMDAzIDB4MGY0ZSAweDAxMTIKKworIyBEZXZpY2U6IDBGNEU6MDExNAorIyBGcmVlZG9tU2NpZW50aWZpYyBbRm9jdXMgMytdCiticmx0dHkgMHgwMDAzIDB4MGY0ZSAweDAxMTQKKworIyBEZXZpY2U6IDEwQzQ6RUE2MAorIyBHZW5lcmljIElkZW50aWZpZXIKKyMgVmVuZG9yOiBDeWduYWwgSW50ZWdyYXRlZCBQcm9kdWN0cywgSW5jLgorIyBQcm9kdWN0OiBDUDIxMHggVUFSVCBCcmlkZ2UgLyBteUFWUiBteVNtYXJ0VVNCIGxpZ2h0CisjIEJyYWlsbGVNZW1vIFtQb2NrZXRdCisjIFNlaWthIFtCcmFpbGxlIERpc3BsYXldCiticmx0dHkgMHgwMDAzIDB4MTBjNCAweGVhNjAKKworIyBEZXZpY2U6IDEwQzQ6RUE4MAorIyBHZW5lcmljIElkZW50aWZpZXIKKyMgVmVuZG9yOiBDeWduYWwgSW50ZWdyYXRlZCBQcm9kdWN0cywgSW5jLgorIyBQcm9kdWN0OiBDUDIxMHggVUFSVCBCcmlkZ2UKKyMgU2Vpa2EgW05vdGUgVGFrZXJdCiticmx0dHkgMHgwMDAzIDB4MTBjNCAweGVhODAKKworIyBEZXZpY2U6IDExNDg6MDMwMQorIyBCcmFpbGxlTWVtbyBbU21hcnRdCiticmx0dHkgMHgwMDAzIDB4MTE0OCAweDAzMDEKKworIyBEZXZpY2U6IDEyMDk6QUJDMAorIyBJbmNlcHRvciBbYWxsIG1vZGVsc10KK2JybHR0eSAweDAwMDMgMHgxMjA5IDB4YWJjMAorCisjIERldmljZTogMTZDMDowNUUxCisjIENhbnV0ZSBbYWxsIG1vZGVsc10KK2JybHR0eSAweDAwMDMgMHgxNmMwIDB4MDVlMQorCisjIERldmljZTogMUE4Njo3NTIzCisjIEdlbmVyaWMgSWRlbnRpZmllcgorIyBWZW5kb3I6IEppYW5nc3UgUWluSGVuZywgTHRkLgorIyBQcm9kdWN0OiBDSDM0MSBVU0IgQnJpZGdlIENvbnRyb2xsZXIKKyMgQmF1bSBbTkxTIGVSZWFkZXIgWm9vbWF4ICgyMCBjZWxscyldCiticmx0dHkgMHgwMDAzIDB4MWE4NiAweDc1MjMKKworIyBEZXZpY2U6IDFDNzE6QzAwNAorIyBCcmFpbGxlTm90ZSBbSHVtYW5XYXJlIEFQRVhdCiticmx0dHkgMHgwMDAzIDB4MWM3MSAweGMwMDQKKworIyBEZXZpY2U6IDFDNzE6QzAwNQorIyBIdW1hbldhcmUgW0JyYWlsbGlhbnQgQkkgMzIvNDAsIEJyYWlsbGlhbnQgQiA4MCAoc2VyaWFsIHByb3RvY29sKV0KK2JybHR0eSAweDAwMDMgMHgxYzcxIDB4YzAwNQorCisjIERldmljZTogMUM3MTpDMDA2CisjIEh1bWFuV2FyZSBbbm9uLVRvdWNoIG1vZGVscyAoSElEIHByb3RvY29sKV0KK2JybHR0eSAweDAwMDMgMHgxYzcxIDB4YzAwNgorCisjIERldmljZTogMUM3MTpDMDBBCisjIEh1bWFuV2FyZSBbQnJhaWxsZU5vdGUgVG91Y2ggKEhJRCBwcm90b2NvbCldCiticmx0dHkgMHgwMDAzIDB4MWM3MSAweGMwMGEKKworIyBEZXZpY2U6IDFDNzE6QzAyMQorIyBIdW1hbldhcmUgW0JyYWlsbGlhbnQgQkkgMTQgKHNlcmlhbCBwcm90b2NvbCldCiticmx0dHkgMHgwMDAzIDB4MWM3MSAweGMwMjEKKworIyBEZXZpY2U6IDFDNzE6QzEwMQorIyBIdW1hbldhcmUgW0FQSCBDaGFtZWxlb24gMjAgKEhJRCBwcm90b2NvbCwgZmlybXdhcmUgMS4wKV0KKyMgSHVtYW5XYXJlIFtBUEggQ2hhbWVsZW9uIDIwIChISUQgcHJvdG9jb2wsIGZpcm13YXJlIDEuMSldCiticmx0dHkgMHgwMDAzIDB4MWM3MSAweGMxMDEKKworIyBEZXZpY2U6IDFDNzE6QzEwNAorIyBIdW1hbldhcmUgW0FQSCBDaGFtZWxlb24gMjAgKHNlcmlhbCBwcm90b2NvbCldCiticmx0dHkgMHgwMDAzIDB4MWM3MSAweGMxMDQKKworIyBEZXZpY2U6IDFDNzE6QzExMQorIyBIdW1hbldhcmUgW0FQSCBNYW50aXMgUTQwIChISUQgcHJvdG9jb2wsIGZpcm13YXJlIDEuMCldCisjIEh1bWFuV2FyZSBbQVBIIE1hbnRpcyBRNDAgKEhJRCBwcm90b2NvbCwgZmlybXdhcmUgMS4xKV0KK2JybHR0eSAweDAwMDMgMHgxYzcxIDB4YzExMQorCisjIERldmljZTogMUM3MTpDMTE0CisjIEh1bWFuV2FyZSBbQVBIIE1hbnRpcyBRNDAgKHNlcmlhbCBwcm90b2NvbCldCiticmx0dHkgMHgwMDAzIDB4MWM3MSAweGMxMTQKKworIyBEZXZpY2U6IDFDNzE6QzEyMQorIyBIdW1hbldhcmUgW0h1bWFud2FyZSBCcmFpbGxlT25lIChISUQgcHJvdG9jb2wsIGZpcm13YXJlIDEuMCldCisjIEh1bWFuV2FyZSBbSHVtYW53YXJlIEJyYWlsbGVPbmUgKEhJRCBwcm90b2NvbCwgZmlybXdhcmUgMS4xKV0KK2JybHR0eSAweDAwMDMgMHgxYzcxIDB4YzEyMQorCisjIERldmljZTogMUM3MTpDMTI0CisjIEh1bWFuV2FyZSBbSHVtYW53YXJlIEJyYWlsbGVPbmUgKHNlcmlhbCBwcm90b2NvbCldCiticmx0dHkgMHgwMDAzIDB4MWM3MSAweGMxMjQKKworIyBEZXZpY2U6IDFDNzE6QzEzMQorIyBIdW1hbldhcmUgW0h1bWFud2FyZSBCcmFpbGxpYW50IEJJIDQwWCAoSElEIHByb3RvY29sLCBmaXJtd2FyZSAxLjApXQorIyBIdW1hbldhcmUgW0h1bWFud2FyZSBCcmFpbGxpYW50IEJJIDQwWCAoSElEIHByb3RvY29sLCBmaXJtd2FyZSAxLjEpXQorYnJsdHR5IDB4MDAwMyAweDFjNzEgMHhjMTMxCisKKyMgRGV2aWNlOiAxQzcxOkMxNDEKKyMgSHVtYW5XYXJlIFtIdW1hbndhcmUgQnJhaWxsaWFudCBCSSAyMFggKEhJRCBwcm90b2NvbCwgZmlybXdhcmUgMS4wKV0KKyMgSHVtYW5XYXJlIFtIdW1hbndhcmUgQnJhaWxsaWFudCBCSSAyMFggKEhJRCBwcm90b2NvbCwgZmlybXdhcmUgMS4xKV0KK2JybHR0eSAweDAwMDMgMHgxYzcxIDB4YzE0MQorCisjIERldmljZTogMUM3MTpDRTAxCisjIEh1bWFuV2FyZSBbTkxTIGVSZWFkZXIgKEhJRCBwcm90b2NvbCwgZmlybXdhcmUgMS4wKV0KKyMgSHVtYW5XYXJlIFtOTFMgZVJlYWRlciAoSElEIHByb3RvY29sLCBmaXJtd2FyZSAxLjEpXQorYnJsdHR5IDB4MDAwMyAweDFjNzEgMHhjZTAxCisKKyMgRGV2aWNlOiAxQzcxOkNFMDQKKyMgSHVtYW5XYXJlIFtOTFMgZVJlYWRlciAoc2VyaWFsIHByb3RvY29sKV0KK2JybHR0eSAweDAwMDMgMHgxYzcxIDB4Y2UwNAorCisjIERldmljZTogMUZFNDowMDAzCisjIEhhbmR5VGVjaCBbVVNCLUhJRCBhZGFwdGVyXQorYnJsdHR5IDB4MDAwMyAweDFmZTQgMHgwMDAzCisKKyMgRGV2aWNlOiAxRkU0OjAwNDQKKyMgSGFuZHlUZWNoIFtFYXN5IEJyYWlsbGUgKEhJRCldCiticmx0dHkgMHgwMDAzIDB4MWZlNCAweDAwNDQKKworIyBEZXZpY2U6IDFGRTQ6MDA1NAorIyBIYW5keVRlY2ggW0FjdGl2ZSBCcmFpbGxlXQorYnJsdHR5IDB4MDAwMyAweDFmZTQgMHgwMDU0CisKKyMgRGV2aWNlOiAxRkU0OjAwNTUKKyMgSGFuZHlUZWNoIFtDb25uZWN0IEJyYWlsbGUgNDBdCiticmx0dHkgMHgwMDAzIDB4MWZlNCAweDAwNTUKKworIyBEZXZpY2U6IDFGRTQ6MDA2MQorIyBIYW5keVRlY2ggW0FjdGlsaW5vXQorYnJsdHR5IDB4MDAwMyAweDFmZTQgMHgwMDYxCisKKyMgRGV2aWNlOiAxRkU0OjAwNjQKKyMgSGFuZHlUZWNoIFtBY3RpdmUgU3RhciA0MF0KK2JybHR0eSAweDAwMDMgMHgxZmU0IDB4MDA2NAorCisjIERldmljZTogMUZFNDowMDc0CisjIEhhbmR5VGVjaCBbQnJhaWxsZSBTdGFyIDQwIChISUQpXQorYnJsdHR5IDB4MDAwMyAweDFmZTQgMHgwMDc0CisKKyMgRGV2aWNlOiAxRkU0OjAwODEKKyMgSGFuZHlUZWNoIFtCYXNpYyBCcmFpbGxlIDE2XQorYnJsdHR5IDB4MDAwMyAweDFmZTQgMHgwMDgxCisKKyMgRGV2aWNlOiAxRkU0OjAwODIKKyMgSGFuZHlUZWNoIFtCYXNpYyBCcmFpbGxlIDIwXQorYnJsdHR5IDB4MDAwMyAweDFmZTQgMHgwMDgyCisKKyMgRGV2aWNlOiAxRkU0OjAwODMKKyMgSGFuZHlUZWNoIFtCYXNpYyBCcmFpbGxlIDMyXQorYnJsdHR5IDB4MDAwMyAweDFmZTQgMHgwMDgzCisKKyMgRGV2aWNlOiAxRkU0OjAwODQKKyMgSGFuZHlUZWNoIFtCYXNpYyBCcmFpbGxlIDQwXQorYnJsdHR5IDB4MDAwMyAweDFmZTQgMHgwMDg0CisKKyMgRGV2aWNlOiAxRkU0OjAwODYKKyMgSGFuZHlUZWNoIFtCYXNpYyBCcmFpbGxlIDY0XQorYnJsdHR5IDB4MDAwMyAweDFmZTQgMHgwMDg2CisKKyMgRGV2aWNlOiAxRkU0OjAwODcKKyMgSGFuZHlUZWNoIFtCYXNpYyBCcmFpbGxlIDgwXQorYnJsdHR5IDB4MDAwMyAweDFmZTQgMHgwMDg3CisKKyMgRGV2aWNlOiAxRkU0OjAwOEEKKyMgSGFuZHlUZWNoIFtCYXNpYyBCcmFpbGxlIDQ4XQorYnJsdHR5IDB4MDAwMyAweDFmZTQgMHgwMDhhCisKKyMgRGV2aWNlOiAxRkU0OjAwOEIKKyMgSGFuZHlUZWNoIFtCYXNpYyBCcmFpbGxlIDE2MF0KK2JybHR0eSAweDAwMDMgMHgxZmU0IDB4MDA4YgorCisjIERldmljZTogMUZFNDowMEE0CisjIEhhbmR5VGVjaCBbQWN0aXZhdG9yXQorYnJsdHR5IDB4MDAwMyAweDFmZTQgMHgwMGE0CisKKyMgRGV2aWNlOiA0MjQyOjAwMDEKKyMgUGVnYXN1cyBbYWxsIG1vZGVsc10KK2JybHR0eSAweDAwMDMgMHg0MjQyIDB4MDAwMQorCisjIERldmljZTogQzI1MToxMTIyCisjIEV1cm9CcmFpbGxlIFtFc3lzICh2ZXJzaW9uIDwgMy4wLCBubyBTRCBjYXJkKV0KK2JybHR0eSAweDAwMDMgMHhjMjUxIDB4MTEyMgorCisjIERldmljZTogQzI1MToxMTIzCisjIEV1cm9CcmFpbGxlIFtyZXNlcnZlZF0KK2JybHR0eSAweDAwMDMgMHhjMjUxIDB4MTEyMworCisjIERldmljZTogQzI1MToxMTI0CisjIEV1cm9CcmFpbGxlIFtFc3lzICh2ZXJzaW9uIDwgMy4wLCB3aXRoIFNEIGNhcmQpXQorYnJsdHR5IDB4MDAwMyAweGMyNTEgMHgxMTI0CisKKyMgRGV2aWNlOiBDMjUxOjExMjUKKyMgRXVyb0JyYWlsbGUgW3Jlc2VydmVkXQorYnJsdHR5IDB4MDAwMyAweGMyNTEgMHgxMTI1CisKKyMgRGV2aWNlOiBDMjUxOjExMjYKKyMgRXVyb0JyYWlsbGUgW0VzeXMgKHZlcnNpb24gPj0gMy4wLCBubyBTRCBjYXJkKV0KK2JybHR0eSAweDAwMDMgMHhjMjUxIDB4MTEyNgorCisjIERldmljZTogQzI1MToxMTI3CisjIEV1cm9CcmFpbGxlIFtyZXNlcnZlZF0KK2JybHR0eSAweDAwMDMgMHhjMjUxIDB4MTEyNworCisjIERldmljZTogQzI1MToxMTI4CisjIEV1cm9CcmFpbGxlIFtFc3lzICh2ZXJzaW9uID49IDMuMCwgd2l0aCBTRCBjYXJkKV0KK2JybHR0eSAweDAwMDMgMHhjMjUxIDB4MTEyOAorCisjIERldmljZTogQzI1MToxMTI5CisjIEV1cm9CcmFpbGxlIFtyZXNlcnZlZF0KK2JybHR0eSAweDAwMDMgMHhjMjUxIDB4MTEyOQorCisjIERldmljZTogQzI1MToxMTJBCisjIEV1cm9CcmFpbGxlIFtyZXNlcnZlZF0KK2JybHR0eSAweDAwMDMgMHhjMjUxIDB4MTEyYQorCisjIERldmljZTogQzI1MToxMTJCCisjIEV1cm9CcmFpbGxlIFtyZXNlcnZlZF0KK2JybHR0eSAweDAwMDMgMHhjMjUxIDB4MTEyYgorCisjIERldmljZTogQzI1MToxMTJDCisjIEV1cm9CcmFpbGxlIFtyZXNlcnZlZF0KK2JybHR0eSAweDAwMDMgMHhjMjUxIDB4MTEyYworCisjIERldmljZTogQzI1MToxMTJECisjIEV1cm9CcmFpbGxlIFtyZXNlcnZlZF0KK2JybHR0eSAweDAwMDMgMHhjMjUxIDB4MTEyZAorCisjIERldmljZTogQzI1MToxMTJFCisjIEV1cm9CcmFpbGxlIFtyZXNlcnZlZF0KK2JybHR0eSAweDAwMDMgMHhjMjUxIDB4MTEyZQorCisjIERldmljZTogQzI1MToxMTJGCisjIEV1cm9CcmFpbGxlIFtyZXNlcnZlZF0KK2JybHR0eSAweDAwMDMgMHhjMjUxIDB4MTEyZgorCisjIERldmljZTogQzI1MToxMTMwCisjIEV1cm9CcmFpbGxlIFtFc3l0aW1lIChmaXJtd2FyZSAxLjAzLCAyMDE0LTAzLTMxKV0KKyMgRXVyb0JyYWlsbGUgW0VzeXRpbWVdCiticmx0dHkgMHgwMDAzIDB4YzI1MSAweDExMzAKKworIyBEZXZpY2U6IEMyNTE6MTEzMQorIyBFdXJvQnJhaWxsZSBbcmVzZXJ2ZWRdCiticmx0dHkgMHgwMDAzIDB4YzI1MSAweDExMzEKKworIyBEZXZpY2U6IEMyNTE6MTEzMgorIyBFdXJvQnJhaWxsZSBbcmVzZXJ2ZWRdCiticmx0dHkgMHgwMDAzIDB4YzI1MSAweDExMzIKKworIyBFTkRfVVNCX0JSQUlMTEVfREVWSUNFUwpkaWZmIC0tZ2l0IGEvQXV0b3N0YXJ0L1N5c3RlbWQvTWFrZWZpbGUuaW4gYi9BdXRvc3RhcnQvU3lzdGVtZC9NYWtlZmlsZS5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNjFjMjQ2Ci0tLSAvZGV2L251bGwKKysrIGIvQXV0b3N0YXJ0L1N5c3RlbWQvTWFrZWZpbGUuaW4KQEAgLTAsMCArMSw3NCBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorIyAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyMKKyMgQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorIworIyBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorIworIyBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisjIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyMgbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisjCisjIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK1NZU1RFTURfVU5JVFNfRElSRUNUT1JZID0gJChJTlNUQUxMX1JPT1QpJChTWVNURU1EX1VOSVRfRElSKQorU1lTVEVNRF9VU0VSU19ESVJFQ1RPUlkgPSAkKElOU1RBTExfUk9PVCkkKFNZU1RFTURfU1lTVVNFUlNfRElSKQorU1lTVEVNRF9VU0VSU19GSUxFID0gJChTWVNURU1EX1VTRVJTX0RJUkVDVE9SWSkvJChQQUNLQUdFX1RBUk5BTUUpLmNvbmYKKworU1lTVEVNRF9GSUxFU19ESVJFQ1RPUlkgPSAkKElOU1RBTExfUk9PVCkkKFNZU1RFTURfVE1QRklMRVNfRElSKQorU1lTVEVNRF9GSUxFU19GSUxFID0gJChTWVNURU1EX0ZJTEVTX0RJUkVDVE9SWSkvJChQQUNLQUdFX1RBUk5BTUUpLmNvbmYKKworaW5zdGFsbDogaW5zdGFsbC11bml0cyBpbnN0YWxsLXdyYXBwZXIgaW5zdGFsbC11c2VycyBpbnN0YWxsLWZpbGVzCisKK2luc3RhbGwtdW5pdHMtZGlyZWN0b3J5OgorCSQoSU5TVEFMTF9ESVJFQ1RPUlkpICQoU1lTVEVNRF9VTklUU19ESVJFQ1RPUlkpCisKK2luc3RhbGwtdW5pdHM6IGluc3RhbGwtdW5pdHMtZGlyZWN0b3J5CisJJChJTlNUQUxMX0RBVEEpICQoQkxEX0RJUikvYnJsdHR5QC5zZXJ2aWNlICQoU1lTVEVNRF9VTklUU19ESVJFQ1RPUlkpCisJJChJTlNUQUxMX0RBVEEpICQoU1JDX0RJUikvYnJsdHR5LWRldmljZUAuc2VydmljZSAkKFNZU1RFTURfVU5JVFNfRElSRUNUT1JZKQorCSQoSU5TVEFMTF9EQVRBKSAkKFNSQ19ESVIpL2JybHR0eUAucGF0aCAkKFNZU1RFTURfVU5JVFNfRElSRUNUT1JZKQorCSQoSU5TVEFMTF9EQVRBKSAkKFNSQ19ESVIpL2JybHR0eS5wYXRoICQoU1lTVEVNRF9VTklUU19ESVJFQ1RPUlkpCisKK2luc3RhbGwtd3JhcHBlcjogaW5zdGFsbC1jb21tYW5kcy1kaXJlY3RvcnkKKwkkKElOU1RBTExfU0NSSVBUKSAkKFNSQ19ESVIpL3N5c3RlbWQtd3JhcHBlciAkKElOU1RBTExfQ09NTUFORFNfRElSRUNUT1JZKQorCitpbnN0YWxsLXVzZXJzLWRpcmVjdG9yeToKKwkkKElOU1RBTExfRElSRUNUT1JZKSAkKFNZU1RFTURfVVNFUlNfRElSRUNUT1JZKQorCitpbnN0YWxsLXVzZXJzOiBpbnN0YWxsLXVzZXJzLWRpcmVjdG9yeQorCSQoSU5TVEFMTF9EQVRBKSAkKFNSQ19ESVIpL3N5c3VzZXJzICQoU1lTVEVNRF9VU0VSU19GSUxFKQorCitpbnN0YWxsLWZpbGVzLWRpcmVjdG9yeToKKwkkKElOU1RBTExfRElSRUNUT1JZKSAkKFNZU1RFTURfRklMRVNfRElSRUNUT1JZKQorCitpbnN0YWxsLWZpbGVzOiBpbnN0YWxsLWZpbGVzLWRpcmVjdG9yeQorCSQoSU5TVEFMTF9EQVRBKSAkKEJMRF9ESVIpL3RtcGZpbGVzICQoU1lTVEVNRF9GSUxFU19GSUxFKQorCit1bmluc3RhbGw6CisJLXJtIC1mICQoU1lTVEVNRF9VTklUU19ESVJFQ1RPUlkpLyQoUEFDS0FHRV9UQVJOQU1FKS4qCisJLXJtIC1mICQoU1lTVEVNRF9VTklUU19ESVJFQ1RPUlkpLyQoUEFDS0FHRV9UQVJOQU1FKUAuKgorCS1ybSAtZiAkKFNZU1RFTURfVU5JVFNfRElSRUNUT1JZKS8kKFBBQ0tBR0VfVEFSTkFNRSktKgorCS1ybSAtZiAkKElOU1RBTExfQ09NTUFORFNfRElSRUNUT1JZKS9zeXN0ZW1kLSoKKwktcm0gLWYgJChTWVNURU1EX1VTRVJTX0ZJTEUpCisJLXJtIC1mICQoU1lTVEVNRF9GSUxFU19GSUxFKQorCitkaXN0Y2xlYW46OgorCS1ybSBicmx0dHlALnNlcnZpY2UKKwktcm0gdG1wZmlsZXMKKworcmVsb2FkOiByZWxvYWQtdW5pdHMgcmVsb2FkLXVzZXJzIHJlbG9hZC1maWxlcworCityZWxvYWQtdW5pdHM6CisJc3lzdGVtY3RsIGRhZW1vbi1yZWxvYWQKKworcmVsb2FkLXVzZXJzOgorCXN5c3RlbWQtc3lzdXNlcnMgJChTWVNURU1EX1VTRVJTX0ZJTEUpCisKK3JlbG9hZC1maWxlczoKKwlzeXN0ZW1kLXRtcGZpbGVzIC0tY3JlYXRlICQoU1lTVEVNRF9GSUxFU19GSUxFKQorCmRpZmYgLS1naXQgYS9BdXRvc3RhcnQvU3lzdGVtZC9icmx0dHktZGV2aWNlQC5zZXJ2aWNlIGIvQXV0b3N0YXJ0L1N5c3RlbWQvYnJsdHR5LWRldmljZUAuc2VydmljZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMTUxMzQ4Ci0tLSAvZGV2L251bGwKKysrIGIvQXV0b3N0YXJ0L1N5c3RlbWQvYnJsdHR5LWRldmljZUAuc2VydmljZQpAQCAtMCwwICsxLDMzIEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisjICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorIworIyBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisjCisjIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisjCisjIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyMgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorIyBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyMKKyMgV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworIworIyBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworW1VuaXRdCitEZXNjcmlwdGlvbj1CcmFpbGxlIERldmljZTogJUkKK0RvY3VtZW50YXRpb249bWFuOmJybHR0eSgxKQorCitCaW5kc1RvPSVpLmRldmljZQorUmVxdWlyZXM9YnJsdHR5QC0laS5zZXJ2aWNlCisKK1JlZnVzZU1hbnVhbFN0YXJ0PXRydWUKK1JlZnVzZU1hbnVhbFN0b3A9dHJ1ZQorCitbU2VydmljZV0KK1R5cGU9b25lc2hvdAorRXhlY1N0YXJ0PS91c3IvYmluL3RydWUKK1JlbWFpbkFmdGVyRXhpdD10cnVlCisKZGlmZiAtLWdpdCBhL0F1dG9zdGFydC9TeXN0ZW1kL2JybHR0eS5wYXRoIGIvQXV0b3N0YXJ0L1N5c3RlbWQvYnJsdHR5LnBhdGgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmIxODBjMAotLS0gL2Rldi9udWxsCisrKyBiL0F1dG9zdGFydC9TeXN0ZW1kL2JybHR0eS5wYXRoCkBAIC0wLDAgKzEsMzQgQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyMgICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisjCisjIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyMKKyMgQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitbVW5pdF0KK0Rlc2NyaXB0aW9uPURlZmF1bHQgQlJMVFRZIEluc3RhbmNlCitEb2N1bWVudGF0aW9uPW1hbjpicmx0dHkoMSkKKworRGVmYXVsdERlcGVuZGVuY2llcz1ubworQWZ0ZXI9bG9jYWwtZnMudGFyZ2V0CitSZXF1aXJlcz1icmx0dHlALWV0Yy1icmx0dHkuY29uZi5zZXJ2aWNlCisKKworW1BhdGhdCitQYXRoRXhpc3RzPS9ldGMvYnJsdHR5LmNvbmYKK1VuaXQ9YnJsdHR5QC1ldGMtYnJsdHR5LmNvbmYuc2VydmljZQorCisKK1tJbnN0YWxsXQorV2FudGVkQnk9ZGVmYXVsdC50YXJnZXQgbXVsdGktdXNlci50YXJnZXQgcmVzY3VlLnRhcmdldCBlbWVyZ2VuY3kudGFyZ2V0CmRpZmYgLS1naXQgYS9BdXRvc3RhcnQvU3lzdGVtZC9icmx0dHlALnBhdGggYi9BdXRvc3RhcnQvU3lzdGVtZC9icmx0dHlALnBhdGgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjY4MWE0NAotLS0gL2Rldi9udWxsCisrKyBiL0F1dG9zdGFydC9TeXN0ZW1kL2JybHR0eUAucGF0aApAQCAtMCwwICsxLDM0IEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisjICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorIworIyBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisjCisjIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisjCisjIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyMgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorIyBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyMKKyMgV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworIworIyBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworW1VuaXRdCitEZXNjcmlwdGlvbj1CUkxUVFkgKHVzaW5nIGNvbmZpZ3VyYXRpb24gZmlsZSAvZXRjL2JybHR0eV8lSS5jb25mKQorRG9jdW1lbnRhdGlvbj1tYW46YnJsdHR5KDEpCisKK0RlZmF1bHREZXBlbmRlbmNpZXM9bm8KK0FmdGVyPWxvY2FsLWZzLnRhcmdldAorUmVxdWlyZXM9YnJsdHR5QC1ldGMtYnJsdHR5XyVpLmNvbmYuc2VydmljZQorCisKK1tQYXRoXQorUGF0aEV4aXN0cz0vZXRjL2JybHR0eV8lSS5jb25mCitVbml0PWJybHR0eUAtZXRjLWJybHR0eV8laS5jb25mLnNlcnZpY2UKKworCitbSW5zdGFsbF0KK1dhbnRlZEJ5PWRlZmF1bHQudGFyZ2V0IG11bHRpLXVzZXIudGFyZ2V0IHJlc2N1ZS50YXJnZXQgZW1lcmdlbmN5LnRhcmdldApkaWZmIC0tZ2l0IGEvQXV0b3N0YXJ0L1N5c3RlbWQvYnJsdHR5QC5zZXJ2aWNlLmluIGIvQXV0b3N0YXJ0L1N5c3RlbWQvYnJsdHR5QC5zZXJ2aWNlLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRhMDExY2MKLS0tIC9kZXYvbnVsbAorKysgYi9BdXRvc3RhcnQvU3lzdGVtZC9icmx0dHlALnNlcnZpY2UuaW4KQEAgLTAsMCArMSwxMDggQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyMgICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisjCisjIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyMKKyMgQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitbVW5pdF0KK0Rlc2NyaXB0aW9uPUJSTFRUWSBJbnN0YW5jZTogJUkKK0RvY3VtZW50YXRpb249bWFuOmJybHR0eSgxKQorRG9jdW1lbnRhdGlvbj1AUEFDS0FHRV9VUkxACisKK1JlcXVpcmVzTW91bnRzRm9yPUBXUklUQUJMRV9ESVJFQ1RPUllACitSZXF1aXJlc01vdW50c0Zvcj1AVVBEQVRBQkxFX0RJUkVDVE9SWUAKK1JlcXVpcmVzTW91bnRzRm9yPUBCUkxBUElfU09DS0VUUEFUSEAKKworV2FudHM9c291bmQudGFyZ2V0CitBZnRlcj1zb3VuZC50YXJnZXQKKworQWZ0ZXI9bG9jYWwtZnMudGFyZ2V0CitDb25kaXRpb25QYXRoRXhpc3RzPSVJCisKK1JlZnVzZU1hbnVhbFN0YXJ0PXRydWUKK1N0b3BXaGVuVW5uZWVkZWQ9dHJ1ZQorCisKK1tTZXJ2aWNlXQorCitTeXNsb2dJZGVudGlmaWVyPWJybHR0eQorRW52aXJvbm1lbnQ9IkJSTFRUWV9TWVNURU1EX0lOU1RBTkNFPSVJIgorCitTdGFuZGFyZElucHV0PW51bGwKK1N0YW5kYXJkT3V0cHV0PW51bGwKK1N0YW5kYXJkRXJyb3I9aW5oZXJpdAorCitQSURGaWxlPSV0L2JybHR0eS9icmx0dHktJWkucGlkCitFbnZpcm9ubWVudD0iQlJMVFRZX1BJRF9GSUxFPSV0L2JybHR0eS9icmx0dHktJWkucGlkIgorCitUeXBlPUBTWVNURU1EX1NFUlZJQ0VfVFlQRUAKK0Vudmlyb25tZW50PSJCUkxUVFlfRVhFQ1VUQUJMRV9BUkdVTUVOVFM9QFNZU1RFTURfU0VSVklDRV9BUkdVTUVOVFNAIgorRXhlY1N0YXJ0PUBDT01NQU5EU19ESVJFQ1RPUllAL3N5c3RlbWQtd3JhcHBlcgorCitUaW1lb3V0U3RhcnRTZWM9NQorVGltZW91dFN0b3BTZWM9MTAKKworUmVzdGFydD1vbi1mYWlsdXJlCitSZXN0YXJ0U2VjPTMwCisKK05pY2U9LTEwCitPT01TY29yZUFkanVzdD0tOTAwCisKKyMgZm9yIHBsYXlpbmcgYWxlcnQgdHVuZXMgdmlhIHRoZSBidWlsdC1pbiBQQyBzcGVha2VyIChLRE1LVE9ORSwgS0lPQ1NPVU5EKQorRXhlY1N0YXJ0UHJlPS0rL3NiaW4vbW9kcHJvYmUgcGNzcGtyCitBbWJpZW50Q2FwYWJpbGl0aWVzPWNhcF9zeXNfdHR5X2NvbmZpZworCisjIGZvciBjcmVhdGluZyB2aXJ0dWFsIGRldmljZXMKK0V4ZWNTdGFydFByZT0tKy9zYmluL21vZHByb2JlIHVpbnB1dAorCisjIGZvciBpbmplY3RpbmcgaW5wdXQgY2hhcmFjdGVycyB0eXBlZCBvbiBhIGJyYWlsbGUgZGV2aWNlIChUSU9DU1RJKQorQW1iaWVudENhcGFiaWxpdGllcz1jYXBfc3lzX2FkbWluCisKKyMgZm9yIGNyZWF0aW5nIG5lZWRlZCBidXQgbWlzc2luZyBzcGVjaWFsIGRldmljZSBmaWxlcworQW1iaWVudENhcGFiaWxpdGllcz1jYXBfbWtub2QKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBrZWVwIHRoZXNlIHN5bmNocm9uaXplZCB3aXRoIHN5c3VzZXJzLmQvYnJsdHR5LmNvbmYgIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitVc2VyPWJybHR0eQorCisjIGZvciByZWFkaW5nIHNjcmVlbiBjb250ZW50ICgvZGV2L3ZjcyopCisjIGZvciB2aXJ0dWFsIGNvbnNvbGUgbW9uaXRvcmluZyBhbmQgY29udHJvbCAoL2Rldi90dHk8bj4pCitTdXBwbGVtZW50YXJ5R3JvdXBzPXR0eQorCisjIGZvciBzZXJpYWwgSS9PICgvZGV2L3R0eVM8bj4pCisjIHByb2JhYmx5IG9ubHkgb25lIG9mIHRoZXNlIHNob3VsZCBiZSB1bmNvbW1lbnRlZAorU3VwcGxlbWVudGFyeUdyb3Vwcz1kaWFsb3V0CisjU3VwcGxlbWVudGFyeUdyb3Vwcz11dWNwCisKKyMgZm9yIFVTQiBJL28gdmlhIFVTQkZTICgvZGV2L2J1cy91c2IvKi8qKQorU3VwcGxlbWVudGFyeUdyb3Vwcz1yb290CisKKyMgZm9yIHBsYXlpbmcgc291bmQgdmlhIHRoZSBBTFNBIGZyYW1ld29yaworU3VwcGxlbWVudGFyeUdyb3Vwcz1hdWRpbworCisjIGZvciBwbGF5aW5nIHNvdW5kIHZpYSB0aGUgUHVsc2UgQXVkaW8gZGFlbW9uCitTdXBwbGVtZW50YXJ5R3JvdXBzPXB1bHNlLWFjY2VzcworCisjIGZvciBtb25pdG9yaW5nIGtleWJvYXJkIGlucHV0ICgvZGV2L2lucHV0LyopCitTdXBwbGVtZW50YXJ5R3JvdXBzPWlucHV0CisKKyMgZm9yIGNyZWF0aW5nIHZpcnR1YWwgZGV2aWNlcyAoL2Rldi91aW5wdXQgb3IgL2Rldi9pbnB1dC91aW5wdXQpCitTdXBwbGVtZW50YXJ5R3JvdXBzPXJvb3QKKworIyBmb3IgcmVhZGluZyB0aGUgQnJsQVBJIGF1dGhvcml6YXRpb24ga2V5IGZpbGUKK1N1cHBsZW1lbnRhcnlHcm91cHM9YnJsYXBpCisKZGlmZiAtLWdpdCBhL0F1dG9zdGFydC9TeXN0ZW1kL3N5c3RlbWQtd3JhcHBlciBiL0F1dG9zdGFydC9TeXN0ZW1kL3N5c3RlbWQtd3JhcHBlcgpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4wMmY1ZDAxCi0tLSAvZGV2L251bGwKKysrIGIvQXV0b3N0YXJ0L1N5c3RlbWQvc3lzdGVtZC13cmFwcGVyCkBAIC0wLDAgKzEsMTA4IEBACisjIS9iaW4vYmFzaCAtcAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorIyAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyMKKyMgQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorIworIyBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorIworIyBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisjIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyMgbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisjCisjIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK3NldCAtZQorcmVhZG9ubHkgZGVmYXVsdFBhdGg9Ii9ldGMvYnJsdHR5LmNvbmYiCisKK3JlYWRvbmx5IHByb2dyYW1QcmVmaXg9ImJybHR0eS0iCitwcm9ncmFtTmFtZT0iJHswIyMqL30iCitbICIke3Byb2dyYW1OYW1lIyR7cHJvZ3JhbVByZWZpeH19IiA9ICIke3Byb2dyYW1OYW1lfSIgXSAmJiBwcm9ncmFtTmFtZT0iJHtwcm9ncmFtUHJlZml4fSR7cHJvZ3JhbU5hbWV9IgorcmVhZG9ubHkgcHJvZ3JhbU5hbWUKKworcHJvZ3JhbU1lc3NhZ2UoKSB7CisgIGxvY2FsIG1lc3NhZ2U9IiR7MX0iCisgIGxvY2FsIGxldmVsPSIkezJ9IgorCisgIGxvZ2dlciAtcCAiZGFlbW9uLiR7bGV2ZWw6LWluZm99IiAtdCAiJHtwcm9ncmFtTmFtZX0iIC0tICIkezF9IiAmJgorICBbICEgLXQgMiBdIHx8CisgIGVjaG8gPiYyICIke3Byb2dyYW1OYW1lfTogJHttZXNzYWdlfSIKK30KKworZXJyb3JNZXNzYWdlKCkgeworICBsb2NhbCBtZXNzYWdlPSIkezF9IgorICBsb2NhbCBjb2RlPSIkezJ9IgorCisgIHByb2dyYW1NZXNzYWdlICIke21lc3NhZ2V9IiBlcnIKKyAgZXhpdCAiJHtjb2RlOi0xfSIKK30KKworc3ludGF4RXJyb3IoKSB7CisgIGxvY2FsIG1lc3NhZ2U9IiR7MX0iCisKKyAgZXJyb3JNZXNzYWdlICIke21lc3NhZ2V9IiAyCit9CisKK3NlbWFudGljRXJyb3IoKSB7CisgIGxvY2FsIG1lc3NhZ2U9IiR7MX0iCisKKyAgZXJyb3JNZXNzYWdlICIke21lc3NhZ2V9IiAzCit9CisKK2luc3RhbmNlUGF0aD0iJHtCUkxUVFlfU1lTVEVNRF9JTlNUQU5DRTotJHtkZWZhdWx0UGF0aH19IgorWyAiJHtpbnN0YW5jZVBhdGgjL30iID0gIiR7aW5zdGFuY2VQYXRofSIgXSAmJiBpbnN0YW5jZVBhdGg9Ii8ke2luc3RhbmNlUGF0aH0iCityZWFkb25seSBpbnN0YW5jZVBhdGgKKworaWYgWyAiJHtpbnN0YW5jZVBhdGgjL3N5cy99IiAhPSAiJHtpbnN0YW5jZVBhdGh9IiBdCit0aGVuCisgIGlzRGV2aWNlSW5zdGFuY2U9dHJ1ZQorICB1ZGV2T3B0aW9uPSJwYXRoIgorZWxpZiBbIC1jICIke2luc3RhbmNlUGF0aH0iIF0KK3RoZW4KKyAgaXNEZXZpY2VJbnN0YW5jZT10cnVlCisgIHVkZXZPcHRpb249Im5hbWUiCitlbGlmIFsgLWYgIiR7aW5zdGFuY2VQYXRofSIgXQordGhlbgorICBpc0RldmljZUluc3RhbmNlPWZhbHNlCitlbGlmIFsgLWUgIiR7aW5zdGFuY2VQYXRofSIgXQordGhlbgorICBzZW1hbnRpY0Vycm9yICJ1bnN1cHBvcnRlZCBpbnN0YW5jZSBwYXRoOiAke2luc3RhbmNlUGF0aH0iCitlbHNlCisgIHNlbWFudGljRXJyb3IgImluc3RhbmNlIHBhdGggbm90IGZvdW5kOiAke2luc3RhbmNlUGF0aH0iCitmaQorCitpZiAiJHtpc0RldmljZUluc3RhbmNlfSIKK3RoZW4KKyAgaXNVZGV2TWFuYWdlZD1mYWxzZQorCisgIHdoaWxlIHJlYWQgbGluZQorICBkbworICAgIGlmIFtbICIke2xpbmV9IiA9fiBeJ046ICcgXV0KKyAgICB0aGVuCisgICAgICBpc1VkZXZNYW5hZ2VkPXRydWUKKyAgICBlbGlmIFtbICIke2xpbmV9IiA9fiBeJ0U6ICcoW14gPV0rKT0oLiopIF1dCisgICAgdGhlbgorICAgICAgbmFtZT0iJHtCQVNIX1JFTUFUQ0hbMV19IgorICAgICAgdmFsdWU9IiR7QkFTSF9SRU1BVENIWzJdfSIKKworICAgICAgW1sgIiR7bmFtZX0iID1+IF4nQlJMVFRZXycgXV0gfHwgY29udGludWUKKyAgICAgIFsgLXogIiR7IW5hbWV9IiBdIHx8IGNvbnRpbnVlCisKKyAgICAgIGV4cG9ydCAiJHtuYW1lfT0ke3ZhbHVlfSIKKyAgICBmaQorICBkb25lIDwgPCgodWRldmFkbSBpbmZvIC0tIiR7dWRldk9wdGlvbn0iPSIke2luc3RhbmNlUGF0aH0iIC0tZXhwb3J0IDI+L2Rldi9udWxsKSkKKworICAiJHtpc1VkZXZNYW5hZ2VkfSIgfHwgc2VtYW50aWNFcnJvciAiaW5zdGFuY2UgcGF0aCBub3QgbWFuYWdlZCBieSB1ZGV2OiAke2luc3RhbmNlUGF0aH0iCitlbHNlCisgIGV4cG9ydCBCUkxUVFlfQ09ORklHVVJBVElPTl9GSUxFPSIke2luc3RhbmNlUGF0aH0iCitmaQorCitzZXQgLS0gIiR7QlJMVFRZX0VYRUNVVEFCTEVfUEFUSDotYnJsdHR5fSIgLUUgJHtCUkxUVFlfRVhFQ1VUQUJMRV9BUkdVTUVOVFN9ICIke0B9IgorcHJvZ3JhbU1lc3NhZ2UgImV4ZWN1dGluZyBjb21tYW5kOiAkeyp9IiBpbmZvCitleGVjICIke0B9IgorZXhpdCAiJHs/fSIKZGlmZiAtLWdpdCBhL0F1dG9zdGFydC9TeXN0ZW1kL3N5c3VzZXJzIGIvQXV0b3N0YXJ0L1N5c3RlbWQvc3lzdXNlcnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjNjMTM2MQotLS0gL2Rldi9udWxsCisrKyBiL0F1dG9zdGFydC9TeXN0ZW1kL3N5c3VzZXJzCkBAIC0wLDAgKzEsNTIgQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyMgICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisjCisjIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyMKKyMgQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMga2VlcCB0aGVzZSBzeW5jaHJvbml6ZWQgd2l0aCBicmx0dHlALnNlcnZpY2UgIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK3UgYnJsdHR5IC0gIkJyYWlsbGUgRGV2aWNlIERhZW1vbiIgL3Zhci9saWIvYnJsdHR5CisKKyMgZm9yIHJlYWRpbmcgc2NyZWVuIGNvbnRlbnQgKC9kZXYvdmNzKikKKyMgZm9yIHZpcnR1YWwgY29uc29sZSBtb25pdG9yaW5nIGFuZCBjb250cm9sICgvZGV2L3R0eTxuPikKK20gYnJsdHR5IHR0eQorCisjIGZvciBzZXJpYWwgSS9PICgvZGV2L3R0eVM8bj4pCisjIHByb2JhYmx5IG9ubHkgb25lIG9mIHRoZXNlIHNob3VsZCBiZSB1bmNvbW1lbnRlZAorbSBicmx0dHkgZGlhbG91dAorI20gYnJsdHR5IHV1Y3AKKworIyBmb3IgVVNCIEkvbyAoL2Rldi9idXMvdXNiLyovKikKK20gYnJsdHR5IHJvb3QKKworIyBmb3IgcGxheWluZyBzb3VuZCB2aWEgdGhlIEFMU0EgZnJhbWV3b3JrCittIGJybHR0eSBhdWRpbworCisjIGZvciBwbGF5aW5nIHNvdW5kIHZpYSB0aGUgUHVsc2UgQXVkaW8gZGFlbW9uCittIGJybHR0eSBwdWxzZS1hY2Nlc3MKKworIyBmb3IgbW9uaXRvcmluZyBrZXlib2FyZCBpbnB1dCAoL2Rldi9pbnB1dC8qKQorbSBicmx0dHkgaW5wdXQKKworIyBmb3IgY3JlYXRpbmcgdmlydHVhbCBkZXZpY2VzICgvZGV2L3VpbnB1dCkKK20gYnJsdHR5IHJvb3QKKworIyBmb3IgcmVhZGluZyB0aGUgQnJsQVBJIGF1dGhvcml6YXRpb24ga2V5IGZpbGUKK2cgYnJsYXBpCittIGJybHR0eSBicmxhcGkKKwpkaWZmIC0tZ2l0IGEvQXV0b3N0YXJ0L1N5c3RlbWQvdG1wZmlsZXMuaW4gYi9BdXRvc3RhcnQvU3lzdGVtZC90bXBmaWxlcy5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNTBlMGI1Ci0tLSAvZGV2L251bGwKKysrIGIvQXV0b3N0YXJ0L1N5c3RlbWQvdG1wZmlsZXMuaW4KQEAgLTAsMCArMSwzMCBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorIyAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyMKKyMgQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorIworIyBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorIworIyBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisjIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyMgbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisjCisjIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMgQlJMVFRZJ3MgcnVudGltZSBkaXJlY3RvcnkKK2QgQFdSSVRBQkxFX0RJUkVDVE9SWUAgMDc1MCBicmx0dHkgYnJsdHR5CisKKyMgQlJMVFRZJ3MgbG9jYWwgc3RhdGUgZGlyZWN0b3J5CitkIEBVUERBVEFCTEVfRElSRUNUT1JZQCAyNzcwIGJybHR0eSBicmx0dHkKKworIyBCcmxBUEkncyBzb2NrZXRzIGRpcmVjdG9yeQorZCBAQlJMQVBJX1NPQ0tFVFBBVEhAIDM3NzcgYnJsdHR5IGJybHR0eQorCisjIEJybEFQSSdzIGF1dGhvcml6YXRpb24ga2V5IGZpbGUKK3ogQENPTkZJR1VSQVRJT05fRElSRUNUT1JZQC9AYXBpX2F1dGhrZXlmaWxlQCAwNjQwIHJvb3QgYnJsYXBpCisKZGlmZiAtLWdpdCBhL0F1dG9zdGFydC9VZGV2L01ha2VmaWxlLmluIGIvQXV0b3N0YXJ0L1VkZXYvTWFrZWZpbGUuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmExNzY3YgotLS0gL2Rldi9udWxsCisrKyBiL0F1dG9zdGFydC9VZGV2L01ha2VmaWxlLmluCkBAIC0wLDAgKzEsODUgQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyMgICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisjCisjIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyMKKyMgQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitVREVWX1JVTEVTX1NFUVVFTkNFID0gOTAKK1VERVZfUEFSRU5UX0xPQ0FUSU9OID0gJChsaWJkaXIpCisjVURFVl9QQVJFTlRfTE9DQVRJT04gPSAkKHN5c2NvbmZkaXIpCisKK1VERVZfUlVMRVNfTE9DQVRJT04gPSAkKFVERVZfUEFSRU5UX0xPQ0FUSU9OKS91ZGV2L3J1bGVzLmQKK1VERVZfUlVMRVNfRElSRUNUT1JZID0gJChJTlNUQUxMX1JPT1QpJChVREVWX1JVTEVTX0xPQ0FUSU9OKQorCitVREVWX1BBVEhfUFJFRklYID0gJChVREVWX1JVTEVTX0RJUkVDVE9SWSkvJChVREVWX1JVTEVTX1NFUVVFTkNFKS0kKFBBQ0tBR0VfVEFSTkFNRSktCitVREVWX1JVTEVTX0VYVEVOU0lPTiA9IHJ1bGVzCisKK1VERVZfTkFNRV9ISUQgPSBoaWQuJChVREVWX1JVTEVTX0VYVEVOU0lPTikKK1VERVZfTkFNRV9VSU5QVVQgPSB1aW5wdXQuJChVREVWX1JVTEVTX0VYVEVOU0lPTikKKworVVBEVVNCREVWUyA9ICQoU1JDX1RPUClUb29scy91cGR1c2JkZXZzIC1xdWlldCAtcXVpZXQKK1VERVZfTkFNRV9VU0JfVEVNUExBVEUgPSB1c2ItdGVtcGxhdGUuJChVREVWX1JVTEVTX0VYVEVOU0lPTikKK1VERVZfTkFNRV9VU0JfQ1VTVE9NSVpFRCA9IHVzYi1jdXN0b21pemVkLiQoVURFVl9SVUxFU19FWFRFTlNJT04pCitVREVWX05BTUVfVVNCX0dFTkVSSUMgPSB1c2ItZ2VuZXJpYy4kKFVERVZfUlVMRVNfRVhURU5TSU9OKQorCithbGw6IHVzYi1jdXN0b21pemVkIHVzYi1nZW5lcmljCisKK3VzYi1jdXN0b21pemVkOgorCWNwICQoVURFVl9OQU1FX1VTQl9URU1QTEFURSkgJChVREVWX05BTUVfVVNCX0NVU1RPTUlaRUQpCisJJChVUERVU0JERVZTKSAtbm9nZW5lcmljIHVkZXY6JChVREVWX05BTUVfVVNCX0NVU1RPTUlaRUQpCisKK3VzYi1nZW5lcmljOgorCWNwICQoVURFVl9OQU1FX1VTQl9URU1QTEFURSkgJChVREVWX05BTUVfVVNCX0dFTkVSSUMpCisJJChVUERVU0JERVZTKSAtb25seWdlbmVyaWMgdWRldjokKFVERVZfTkFNRV9VU0JfR0VORVJJQykKKworaW5zdGFsbC13cmFwcGVyOiBpbnN0YWxsLWNvbW1hbmRzLWRpcmVjdG9yeQorCSQoSU5TVEFMTF9TQ1JJUFQpICQoU1JDX0RJUikvdWRldi13cmFwcGVyICQoSU5TVEFMTF9DT01NQU5EU19ESVJFQ1RPUlkpCisKK2luc3RhbGwtcnVsZXMtZGlyZWN0b3J5OgorCSQoSU5TVEFMTF9ESVJFQ1RPUlkpICQoVURFVl9SVUxFU19ESVJFQ1RPUlkpCisKK2luc3RhbGwtcnVsZXM6IGluc3RhbGwtcnVsZXMtaGlkIGluc3RhbGwtcnVsZXMtdWlucHV0IGluc3RhbGwtcnVsZXMtdXNiCisKK2luc3RhbGwtcnVsZXMtaGlkOiBpbnN0YWxsLXJ1bGVzLWRpcmVjdG9yeQorCSQoSU5TVEFMTF9EQVRBKSAkKFNSQ19ESVIpLyQoVURFVl9OQU1FX0hJRCkgJChVREVWX1BBVEhfUFJFRklYKSQoVURFVl9OQU1FX0hJRCkKKworaW5zdGFsbC1ydWxlcy11aW5wdXQ6IGluc3RhbGwtcnVsZXMtZGlyZWN0b3J5CisJJChJTlNUQUxMX0RBVEEpICQoU1JDX0RJUikvJChVREVWX05BTUVfVUlOUFVUKSAkKFVERVZfUEFUSF9QUkVGSVgpJChVREVWX05BTUVfVUlOUFVUKQorCitpbnN0YWxsLXJ1bGVzLXVzYi1jdXN0b21pemVkOiB1c2ItY3VzdG9taXplZCBpbnN0YWxsLXJ1bGVzLWRpcmVjdG9yeQorCSQoSU5TVEFMTF9EQVRBKSAkKEJMRF9ESVIpLyQoVURFVl9OQU1FX1VTQl9DVVNUT01JWkVEKSAkKFVERVZfUEFUSF9QUkVGSVgpJChVREVWX05BTUVfVVNCX0NVU1RPTUlaRUQpCisKK2luc3RhbGwtcnVsZXMtdXNiLWdlbmVyaWM6IHVzYi1nZW5lcmljIGluc3RhbGwtcnVsZXMtZGlyZWN0b3J5CisJJChJTlNUQUxMX0RBVEEpICQoQkxEX0RJUikvJChVREVWX05BTUVfVVNCX0dFTkVSSUMpICQoVURFVl9QQVRIX1BSRUZJWCkkKFVERVZfTkFNRV9VU0JfR0VORVJJQykKKworaW5zdGFsbC1ydWxlcy11c2I6IGluc3RhbGwtcnVsZXMtdXNiLWN1c3RvbWl6ZWQgaW5zdGFsbC1ydWxlcy11c2ItZ2VuZXJpYworCitpbnN0YWxsOiBpbnN0YWxsLXdyYXBwZXIgaW5zdGFsbC1ydWxlcworCit1bmluc3RhbGw6CisJLXJtIC1mICQoVURFVl9SVUxFU19ESVJFQ1RPUlkpLz8qLSQoUEFDS0FHRV9UQVJOQU1FKS4kKFVERVZfUlVMRVNfRVhURU5TSU9OKQorCS1ybSAtZiAkKFVERVZfUlVMRVNfRElSRUNUT1JZKS8/Ki0kKFBBQ0tBR0VfVEFSTkFNRSktKi4kKFVERVZfUlVMRVNfRVhURU5TSU9OKQorCS1ybSAtZiAkKElOU1RBTExfQ09NTUFORFNfRElSRUNUT1JZKS91ZGV2LSoKKworY2xlYW46OgorCS1ybSAtZiAkKFVERVZfTkFNRV9VU0JfQ1VTVE9NSVpFRCkKKwktcm0gLWYgJChVREVWX05BTUVfVVNCX0dFTkVSSUMpCisKK2Rpc3RjbGVhbjo6IGNsZWFuCisJLXJtIC1mICQoVURFVl9OQU1FX1VTQl9URU1QTEFURSkKKworcmVsb2FkOgorCXVkZXZhZG0gY29udHJvbCAtLXJlbG9hZAorCmRpZmYgLS1naXQgYS9BdXRvc3RhcnQvVWRldi9oaWQucnVsZXMgYi9BdXRvc3RhcnQvVWRldi9oaWQucnVsZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWYyNmQ4MwotLS0gL2Rldi9udWxsCisrKyBiL0F1dG9zdGFydC9VZGV2L2hpZC5ydWxlcwpAQCAtMCwwICsxLDUxIEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisjICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorIworIyBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisjCisjIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisjCisjIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyMgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorIyBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyMKKyMgV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworIworIyBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgVWRldiBydWxlcyBmb3IgZ2l2aW5nIEJSTFRUWSBhY2Nlc3MgdG8gSElEIGJyYWlsbGUgZGV2aWNlcyAjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBCUkxUVFkgaXMgbm93IGFibGUgdG8gc3dpdGNoIHRvIHJ1bm5pbmcgYXMgYW4gdW5wcml2aWxlZ2VkIHVzZXIsIHVzaW5nICAgICMKKyMgb25seSBhIGZldyBjYXBhYmlsaXRpZXMpLCBhbmQgd2UgZG9uJ3Qgd2FudCB0byBiZSB1c2luZyBDQVBfREFDX09WRVJSSURFLiAjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitTVUJTWVNURU0hPSJoaWRyYXciLCBHT1RPPSJicmx0dHlfaGlkX2VuZCIKK0FDVElPTiE9ImFkZCIsIEdPVE89ImJybHR0eV9oaWRfZW5kIgorCitBVFRSU3tiSW50ZXJmYWNlTnVtYmVyfT09Ij8qIiwgR09UTz0iYnJsdHR5X2hpZF91c2IiCitHT1RPPSJicmx0dHlfaGlkX2VuZCIKKworTEFCRUw9ImJybHR0eV9oaWRfdXNiIgorRU5Wey5CUkxUVFlfSElEX05BTUV9PSIkYXR0cnsuLi9wcm9kdWN0fS1JbnRmOiRhdHRye2JJbnRlcmZhY2VOdW1iZXJ9IgorR09UTz0iYnJsdHR5X2hpZF9maWx0ZXIiCisKK0xBQkVMPSJicmx0dHlfaGlkX2ZpbHRlciIKK0VOVnsuQlJMVFRZX0hJRF9OQU1FfT09Ik5MUyBlUmVhZGVyICoiLCBHT1RPPSJicmx0dHlfaGlkX2FkZCIKK0dPVE89ImJybHR0eV9oaWRfZW5kIgorCitMQUJFTD0iYnJsdHR5X2hpZF9hZGQiCitTWU1MSU5LKz0iYnJsdHR5L0hJRC0kZW52ey5CUkxUVFlfSElEX05BTUV9IgorVEVTVD09Ii91c3IvYmluL3NldGZhY2wiLCBHT1RPPSJicmx0dHlfaGlkX3NldGZhY2wiCitHT1RPPSJicmx0dHlfaGlkX2VuZCIKKworTEFCRUw9ImJybHR0eV9oaWRfc2V0ZmFjbCIKK1JVTis9Ii91c3IvYmluL3NldGZhY2wgLW0gdTpicmx0dHk6cncgL2Rldi8kbmFtZSIKK0dPVE89ImJybHR0eV9oaWRfZW5kIgorCitMQUJFTD0iYnJsdHR5X2hpZF9lbmQiCmRpZmYgLS1naXQgYS9BdXRvc3RhcnQvVWRldi91ZGV2LXdyYXBwZXIgYi9BdXRvc3RhcnQvVWRldi91ZGV2LXdyYXBwZXIKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZGE2ZWJjYgotLS0gL2Rldi9udWxsCisrKyBiL0F1dG9zdGFydC9VZGV2L3VkZXYtd3JhcHBlcgpAQCAtMCwwICsxLDMyIEBACisjIS9iaW4vc2gKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyMgICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisjCisjIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyMKKyMgQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjIFRoaXMgc2NyaXB0IG11c3QgYmUgaW5zdGFsbGVkIHdpdGhpbiBicmx0dHkncyBsaWJyYXJ5IGRpcmVjdG9yeTogL3Vzci9saWIvYnJsdHR5LworCitzZXQgLWUKK3JlYWRvbmx5IHJvb3REaXJlY3Rvcnk9Ii9zeXMvZnMvY2dyb3VwL3N5c3RlbWQiCisKK1sgISAtZCAiJHtyb290RGlyZWN0b3J5fSIgXSB8fCB7CisgIGdyb3VwRGlyZWN0b3J5PSIke3Jvb3REaXJlY3Rvcnl9L2JybHR0eSIKKyAgWyAtZCAiJHtncm91cERpcmVjdG9yeX0iIF0gfHwgbWtkaXIgIiR7Z3JvdXBEaXJlY3Rvcnl9IgorICBlY2hvICQkID4iJHtncm91cERpcmVjdG9yeX0vdGFza3MiCit9CisKK2V4ZWMgIiR7QlJMVFRZX0VYRUNVVEFCTEVfUEFUSDotYnJsdHR5fSIgLUUgIiR7QH0iCitleGl0ICIkez99IgpkaWZmIC0tZ2l0IGEvQXV0b3N0YXJ0L1VkZXYvdWlucHV0LnJ1bGVzIGIvQXV0b3N0YXJ0L1VkZXYvdWlucHV0LnJ1bGVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEwMWVkYTMKLS0tIC9kZXYvbnVsbAorKysgYi9BdXRvc3RhcnQvVWRldi91aW5wdXQucnVsZXMKQEAgLTAsMCArMSw0MiBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorIyAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyMKKyMgQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorIworIyBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorIworIyBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisjIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyMgbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisjCisjIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBVZGV2IHJ1bGVzIGZvciBnaXZpbmcgQlJMVFRZIGFjY2VzcyB0byAvZGV2L3VpbnB1dCAjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQlJMVFRZIGlzIG5vdyBhYmxlIHRvIHN3aXRjaCB0byBydW5uaW5nIGFzIGFuIHVucHJpdmlsZWdlZCB1c2VyLCB1c2luZyAgICAjCisjIG9ubHkgYSBmZXcgY2FwYWJpbGl0aWVzKSwgYW5kIHdlIGRvbid0IHdhbnQgdG8gYmUgdXNpbmcgQ0FQX0RBQ19PVkVSUklERS4gIworIyBJdCB1c2VzIHVpbnB1dCBpbiBvcmRlciB0byBzdXBwb3J0IHNvbWUgaW1wb3J0YW50IGZlYXR1cmVzLCBpbmNsdWRpbmc6ICAgICMKKyMgKiAgS2V5Ym9hcmQgS2V5IFRhYmxlcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjICogIEluamVjdGluZyBhcmJpdHJhcnkga2V5IGNvbWJpbmF0aW9ucyB0eXBlZCBvbiBicmFpbGxlIGRldmljZXMuICAgICAgICAgIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworS0VSTkVMPT0idWlucHV0IiwgQUNUSU9OPT0iYWRkIiwgR09UTz0iYnJsdHR5X3VpbnB1dF9hZGQiCitHT1RPPSJicmx0dHlfdWlucHV0X2VuZCIKKworTEFCRUw9ImJybHR0eV91aW5wdXRfYWRkIgorVEVTVD09Ii91c3IvYmluL3NldGZhY2wiLCBHT1RPPSJicmx0dHlfdWlucHV0X3NldGZhY2wiCitHT1RPPSJicmx0dHlfdWlucHV0X2VuZCIKKworTEFCRUw9ImJybHR0eV91aW5wdXRfc2V0ZmFjbCIKK1JVTis9Ii91c3IvYmluL3NldGZhY2wgLW0gdTpicmx0dHk6cncgL2Rldi8kbmFtZSIKK0dPVE89ImJybHR0eV91aW5wdXRfZW5kIgorCitMQUJFTD0iYnJsdHR5X3VpbnB1dF9lbmQiCmRpZmYgLS1naXQgYS9BdXRvc3RhcnQvVWRldi91c2ItdGVtcGxhdGUucnVsZXMuaW4gYi9BdXRvc3RhcnQvVWRldi91c2ItdGVtcGxhdGUucnVsZXMuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjQ4YTJlNQotLS0gL2Rldi9udWxsCisrKyBiL0F1dG9zdGFydC9VZGV2L3VzYi10ZW1wbGF0ZS5ydWxlcy5pbgpAQCAtMCwwICsxLDg0IEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisjICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorIworIyBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisjCisjIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisjCisjIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyMgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorIyBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyMKKyMgV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworIworIyBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBVZGV2IHJ1bGVzIGZvciBzdGFydGluZyBCUkxUVFkgd2hlbiBhIFVTQiBicmFpbGxlIGRldmljZSBpcyBjb25uZWN0ZWQgIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitTVUJTWVNURU09PSJ1c2JfZGV2aWNlIiwgR09UTz0iYnJsdHR5X3VzYl9iZWdpbiIKK1NVQlNZU1RFTT09InVzYiIsIEtFUk5FTCE9Iio6KiIsIEdPVE89ImJybHR0eV91c2JfYmVnaW4iCitHT1RPPSJicmx0dHlfZGV2aWNlX2VuZCIKKworTEFCRUw9ImJybHR0eV91c2JfYmVnaW4iCisjIEJFR0lOX1VTQl9CUkFJTExFX0RFVklDRVMKKyMgRU5EX1VTQl9CUkFJTExFX0RFVklDRVMKK0dPVE89ImJybHR0eV9kZXZpY2VfZW5kIgorCitMQUJFTD0iYnJsdHR5X3VzYl9ydW4iCitTWU1MSU5LKz0iYnJsdHR5L1VTQi1NZnI6JGF0dHJ7bWFudWZhY3R1cmVyfS1QcmQ6JGF0dHJ7cHJvZHVjdH0tU2VyOiRhdHRye3NlcmlhbH0iCitFTlZ7QlJMVFRZX0JSQUlMTEVfREVWSUNFfT0idXNiOnZlbmRvcj0wWCRzeXNmc3tpZFZlbmRvcn0rcHJvZHVjdD0wWCRzeXNmc3tpZFByb2R1Y3R9K3NlcmlhbD0kc3lzZnN7c2VyaWFsfSIKK0dPVE89ImJybHR0eV9kZXZpY2VfcnVuIgorCitMQUJFTD0iYnJsdHR5X2RldmljZV9ydW4iCitURVNUPT0iL3N5cy9mcy9jZ3JvdXAvc3lzdGVtZCIsIEdPVE89ImJybHR0eV9zeXN0ZW1kIgorVEVTVD09Ii9ydW4vc3lzdGVtZC9zeXN0ZW0iLCBHT1RPPSJicmx0dHlfc3lzdGVtZCIKK0VOVntCUkxUVFlfUElEX0ZJTEV9PSIvcnVuL2JybHR0eS9icmx0dHkuJGtlcm5lbC5waWQiCisKK1RFU1Q9PSIvZXRjL2luaXQiLCBHT1RPPSJicmx0dHlfdXBzdGFydCIKK1RFU1Q9PSIvZXRjL2V2ZW50LmQiLCBHT1RPPSJicmx0dHlfdXBzdGFydCIKKworQUNUSU9OPT0iYWRkIiwgR09UTz0iYnJsdHR5X3VkZXZfYWRkIgorQUNUSU9OPT0icmVtb3ZlIiwgR09UTz0iYnJsdHR5X3VkZXZfcmVtb3ZlIgorR09UTz0iYnJsdHR5X2RldmljZV9lbmQiCisKK0xBQkVMPSJicmx0dHlfdWRldl9hZGQiCitSVU4rPSJAQ09NTUFORFNfRElSRUNUT1JZQC91ZGV2LXdyYXBwZXIiCitHT1RPPSJicmx0dHlfZGV2aWNlX2VuZCIKKworTEFCRUw9ImJybHR0eV91ZGV2X3JlbW92ZSIKK1JVTis9IkBDT01NQU5EU19ESVJFQ1RPUllAL3VkZXYtd3JhcHBlciAtQyIKK0dPVE89ImJybHR0eV9kZXZpY2VfZW5kIgorCitMQUJFTD0iYnJsdHR5X3Vwc3RhcnQiCitBQ1RJT049PSJhZGQiLCBHT1RPPSJicmx0dHlfdXBzdGFydF9zdGFydCIKK0FDVElPTj09InJlbW92ZSIsIEdPVE89ImJybHR0eV91cHN0YXJ0X3N0b3AiCitHT1RPPSJicmx0dHlfZGV2aWNlX2VuZCIKKworTEFCRUw9ImJybHR0eV91cHN0YXJ0X3N0YXJ0IgorUFJPR1JBTT0iL3NiaW4vaW5pdGN0bCBzdGF0dXMgYnJsdHR5IiwgUkVTVUxUPT0iKnJ1bm5pbmcqIiwgR09UTz0iYnJsdHR5X3Vwc3RhcnRfcmVzdGFydCIKK1JVTis9Ii9zYmluL2luaXRjdGwgc3RhcnQgLS1xdWlldCAtLW5vLXdhaXQgYnJsdHR5ICdCUkxUVFlfQlJBSUxMRV9ERVZJQ0U9JGVudntCUkxUVFlfQlJBSUxMRV9ERVZJQ0V9JyAnQlJMVFRZX0JSQUlMTEVfRFJJVkVSPSRlbnZ7QlJMVFRZX0JSQUlMTEVfRFJJVkVSfSciCitHT1RPPSJicmx0dHlfZGV2aWNlX2VuZCIKKworTEFCRUw9ImJybHR0eV91cHN0YXJ0X3Jlc3RhcnQiCitSVU4rPSIvc2Jpbi9pbml0Y3RsIHJlc3RhcnQgLS1xdWlldCAtLW5vLXdhaXQgYnJsdHR5ICdCUkxUVFlfQlJBSUxMRV9ERVZJQ0U9JGVudntCUkxUVFlfQlJBSUxMRV9ERVZJQ0V9JyAnQlJMVFRZX0JSQUlMTEVfRFJJVkVSPSRlbnZ7QlJMVFRZX0JSQUlMTEVfRFJJVkVSfSciCitHT1RPPSJicmx0dHlfZGV2aWNlX2VuZCIKKworTEFCRUw9ImJybHR0eV91cHN0YXJ0X3N0b3AiCitSVU4rPSIvc2Jpbi9pbml0Y3RsIHN0b3AgLS1xdWlldCAtLW5vLXdhaXQgYnJsdHR5IgorR09UTz0iYnJsdHR5X2RldmljZV9lbmQiCisKK0xBQkVMPSJicmx0dHlfc3lzdGVtZCIKK1RBRys9InN5c3RlbWQiCitBQ1RJT049PSJhZGQiLCBHT1RPPSJicmx0dHlfc3lzdGVtZF9hZGQiCitHT1RPPSJicmx0dHlfZGV2aWNlX2VuZCIKKworTEFCRUw9ImJybHR0eV9zeXN0ZW1kX2FkZCIKK0VOVntTWVNURU1EX1dBTlRTfSs9ImJybHR0eS1kZXZpY2VALnNlcnZpY2UiCitHT1RPPSJicmx0dHlfZGV2aWNlX2VuZCIKKworTEFCRUw9ImJybHR0eV9kZXZpY2VfZW5kIgpkaWZmIC0tZ2l0IGEvQXV0b3N0YXJ0L1Vwc3RhcnQvam9iIGIvQXV0b3N0YXJ0L1Vwc3RhcnQvam9iCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmViNDMwNGYKLS0tIC9kZXYvbnVsbAorKysgYi9BdXRvc3RhcnQvVXBzdGFydC9qb2IKQEAgLTAsMCArMSwxOSBAQAorIyBCUkxUVFkgaXMgYSBiYWNrZ3JvdW5kIHByb2Nlc3MgKGRhZW1vbikgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgTGludXgvVW5peAorIyBjb25zb2xlICh3aGVuIGluIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZQorIyBkaXNwbGF5LgorCisjIFRoaXMgaXMgYSBzaW1wbGUgVXBzdGFydCBqb2IuIENvcHkgaXQgaW50byB5b3VyIGRpc3RyaWJ1dGlvbidzIFVwc3RhcnQKKyMgam9icyBkaXJlY3RvcnkgYW5kIG1vZGlmeSBhcyBhcHByb3ByaWF0ZSBmb3IgeW91ciBuZWVkcy4gUG9zc2libGUKKyMgbG9jYXRpb25zIGZvciB0aGlzIGRpcmVjdG9yeSBpbmNsdWRlOgorIyAqIC9ldGMvaW5pdC9qb2JzLmQvCisjICogL2V0Yy9ldmVudC5kLworIyAqIC9ldGMvaW5pdC8KKyMgU2V0IGl0cyBwZXJtaXNzaW9ucywgb3duZXJzaGlwLCBhbmQgbmFtZSBhcyBwZXIgdGhlIG90aGVyIFVwc3RhcnQgam9icy4KKworY29uc29sZSBvdXRwdXQKK3Jlc3Bhd24KKworIyBUaGlzIHNlcnZpY2UgaXMgc3RhcnRlZCBhdXRvbWF0aWNhbGx5IGJ5IGluaXQgc28gdGhhdCBicmFpbGxlIG91dHB1dCBpcworIyBhdmFpbGFibGUgYXMgc29vbiBhcyBwb3NzaWJsZSBvbiBzeXN0ZW0gc3RhcnR1cC4KK3N0YXJ0IG9uIHN0YXJ0dXAKK2V4ZWMgL2Jpbi9icmx0dHkgLW4KZGlmZiAtLWdpdCBhL0F1dG9zdGFydC9YMTEvOTB4YnJsYXBpLmluIGIvQXV0b3N0YXJ0L1gxMS85MHhicmxhcGkuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2IzZTNlNQotLS0gL2Rldi9udWxsCisrKyBiL0F1dG9zdGFydC9YMTEvOTB4YnJsYXBpLmluCkBAIC0wLDAgKzEsMTkgQEAKKyMgc3RhcnR1cCBzY3JpcHQgZm9yIC9ldGMvWDExL1hzZXNzaW9uLmQKKworcHJlZml4PSJAcHJlZml4QCIKK2V4ZWNfcHJlZml4PSJAZXhlY19wcmVmaXhAIgorZHJpdmVyc19kaXJlY3Rvcnk9IkBkcml2ZXJzX2RpcmVjdG9yeUAiCitwcm9ncmFtX2RpcmVjdG9yeT0iQHByb2dyYW1fZGlyZWN0b3J5QCIKK3hicmxhcGk9IiRwcm9ncmFtX2RpcmVjdG9yeS94YnJsYXBpIgorYnJsdHR5PSIkcHJvZ3JhbV9kaXJlY3RvcnkvYnJsdHR5IgorCitpZiBbIC14ICIke3hicmxhcGl9IiBdOyB0aGVuCisgIGlmICIke3hicmxhcGl9IiAyPi9kZXYvbnVsbCA7IHRoZW4KKyAgICAjIHhicmxhcGkgY291bGQgY29ubmVjdCB0byBCcmxBUEksIHRyeSB0byBzdGFydCBicmx0dHkgd2l0aCBBdFNwaTIgZHJpdmVyLgorICAgIGlmIFsgLXggIiR7YnJsdHR5fSIgLWEgXAorICAgICAgICAgLWUgIiRkcml2ZXJzX2RpcmVjdG9yeS9saWJicmx0dHliYmEuc28iIC1hIFwKKyAgICAgICAgIC1lICIkZHJpdmVyc19kaXJlY3RvcnkvbGliYnJsdHR5eGEyLnNvIiBdOyB0aGVuCisgICAgICAiJHticmx0dHl9IiAtYiBiYSAtcyBubyAteCBhMiAtTiAyPi9kZXYvbnVsbAorICAgIGZpCisgIGZpCitmaQpkaWZmIC0tZ2l0IGEvQXV0b3N0YXJ0L1gxMS9NYWtlZmlsZS5pbiBiL0F1dG9zdGFydC9YMTEvTWFrZWZpbGUuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWQ3ZDU3YgotLS0gL2Rldi9udWxsCisrKyBiL0F1dG9zdGFydC9YMTEvTWFrZWZpbGUuaW4KQEAgLTAsMCArMSwyMSBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorIyAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyMKKyMgQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorIworIyBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorIworIyBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisjIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyMgbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisjCisjIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK2Rpc3RjbGVhbjo6CisJLXJtIDkweGJybGFwaQorCmRpZmYgLS1naXQgYS9BdXRvc3RhcnQvZ2RtL2JybHR0eS1nZG0uY29uZiBiL0F1dG9zdGFydC9nZG0vYnJsdHR5LWdkbS5jb25mCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU3Y2JkYTUKLS0tIC9kZXYvbnVsbAorKysgYi9BdXRvc3RhcnQvZ2RtL2JybHR0eS1nZG0uY29uZgpAQCAtMCwwICsxLDcgQEAKK2JyYWlsbGUtZHJpdmVyIGJhCitzcGVlY2gtZHJpdmVyIG5vCitzY3JlZW4tZHJpdmVyIGEyCitzY3JlZW4tcGFyYW1ldGVycyByZWxlYXNlPW5vCisKK25vLWFwaSBvbgorcHJlZmVyZW5jZXMtZmlsZSBicmx0dHktZ2RtLnByZWZzCmRpZmYgLS1naXQgYS9BdXRvc3RhcnQvZ2RtL2JybHR0eS5kZXNrdG9wIGIvQXV0b3N0YXJ0L2dkbS9icmx0dHkuZGVza3RvcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNWJmOTA3Ci0tLSAvZGV2L251bGwKKysrIGIvQXV0b3N0YXJ0L2dkbS9icmx0dHkuZGVza3RvcApAQCAtMCwwICsxLDcgQEAKK1tEZXNrdG9wIEVudHJ5XQorVHlwZT1BcHBsaWNhdGlvbgorTmFtZT1CUkxUVFkgU2NyZWVuIFJlYWRlcgorRXhlYz1icmx0dHkgLW4gLWYgYnJsdHR5LWdkbS5jb25mIAorTm9EaXNwbGF5PXRydWUKK0F1dG9zdGFydENvbmRpdGlvbj1HU2V0dGluZ3Mgb3JnLmdub21lLmRlc2t0b3AuYTExeS5hcHBsaWNhdGlvbnMgc2NyZWVuLXJlYWRlci1lbmFibGVkCitYLUdOT01FLUF1dG9SZXN0YXJ0PXRydWUKZGlmZiAtLWdpdCBhL0F1dG9zdGFydC9nZG0veGJybGFwaS5kZXNrdG9wIGIvQXV0b3N0YXJ0L2dkbS94YnJsYXBpLmRlc2t0b3AKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTAwNzYyZgotLS0gL2Rldi9udWxsCisrKyBiL0F1dG9zdGFydC9nZG0veGJybGFwaS5kZXNrdG9wCkBAIC0wLDAgKzEsNiBAQAorW0Rlc2t0b3AgRW50cnldCitUeXBlPUFwcGxpY2F0aW9uCitOYW1lPXhicmxhcGkKK0V4ZWM9eGJybGFwaSAtcQorTm9EaXNwbGF5PXRydWUKK1gtR05PTUUtQXV0b1Jlc3RhcnQ9dHJ1ZQpkaWZmIC0tZ2l0IGEvQmluZGluZ3MvRW1hY3MvTWFrZWZpbGUuaW4gYi9CaW5kaW5ncy9FbWFjcy9NYWtlZmlsZS5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YjA0ODhlCi0tLSAvZGV2L251bGwKKysrIGIvQmluZGluZ3MvRW1hY3MvTWFrZWZpbGUuaW4KQEAgLTAsMCArMSw1NCBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBsaWJicmxhcGkgLSBBIGxpYnJhcnkgcHJvdmlkaW5nIGFjY2VzcyB0byBicmFpbGxlIHRlcm1pbmFscyBmb3IgYXBwbGljYXRpb25zLgorIworIyBDb3B5cmlnaHQgKEMpIDIwMDYtMjAyMyBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+CisjCisjIGxpYmJybGFwaSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisjCisjIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyMgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorIyBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyMKKyMgV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworIworIyBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworaW5jbHVkZSAkKFNSQ19UT1ApYmluZGluZ3MubWsKKworRU1BQ1NfT0sgPSBARU1BQ1NfT0tACitFTUFDUyA9IEBFTUFDU0AKKworRU1BQ1NfQVBJX05BTUUgPSAkKEFQSV9OQU1FKQorRU1BQ1NfQVBJX09CSkVDVCA9IGJpbmRpbmdzLiRPCitFTUFDU19BUElfTElCUkFSWSA9ICQoRU1BQ1NfQVBJX05BTUUpLiQoTElCX0VYVCkKKworRU1BQ1NfQVBJX1NVQkRJUkVDVE9SWSA9IEBFTUFDU19TVUJESVJFQ1RPUllACitFTUFDU19BUElfTElCRElSID0gJChJTlNUQUxMX1JPT1QpJChEUklWRVJTX0RJUkVDVE9SWSkvJChFTUFDU19BUElfU1VCRElSRUNUT1JZKQorRU1BQ1NfQVBJX0VMRElSID0gJChJTlNUQUxMX1JPT1QpJChUQUJMRVNfRElSRUNUT1JZKS8kKEVNQUNTX0FQSV9TVUJESVJFQ1RPUlkpCisKK2FsbDogJChFTUFDU19BUElfTElCUkFSWSkKKworJChFTUFDU19BUElfTElCUkFSWSk6ICQoRU1BQ1NfQVBJX09CSkVDVCkKKwkkKE1LTElCOjxuYW1lPj0kKEVNQUNTX0FQSV9MSUJSQVJZKS4kKEFQSV9WRVJTSU9OKSkgJEAgJChFTUFDU19BUElfT0JKRUNUKSAkKEFQSV9MREZMQUdTKQorCiskKEVNQUNTX0FQSV9PQkpFQ1QpOiB8ICQoQVBJX05BTUUpCisJJChDQykgJChMSUJDRkxBR1MpIC1vICRAIC1jICQoU1JDX0RJUikvYmluZGluZ3MuYworCitjbGVhbjo6CisJLXJtIC1mIC0tICQoRU1BQ1NfQVBJX0xJQlJBUlkpCisKK2Rpc3RjbGVhbjo6CisJLXJtIC1mIC0tIGFkZF9kaXJlY3RvcnkuZWwKKworaW5zdGFsbDogYWxsCisJJChJTlNUQUxMX0RJUkVDVE9SWSkgJChFTUFDU19BUElfTElCRElSKQorCSQoSU5TVEFMTF9QUk9HUkFNKSAkKEVNQUNTX0FQSV9MSUJSQVJZKSAkKEVNQUNTX0FQSV9MSUJESVIpCisJJChJTlNUQUxMX0RJUkVDVE9SWSkgJChFTUFDU19BUElfRUxESVIpCisJJChJTlNUQUxMX1NDUklQVCkgYWRkX2RpcmVjdG9yeS5lbCAkKEVNQUNTX0FQSV9FTERJUikKKwordW5pbnN0YWxsOgorCS1ybSAtZiAtciAtLSAkKEVNQUNTX0FQSV9MSUJESVIpCisJLXJtIC1mIC1yIC0tICQoRU1BQ1NfQVBJX0VMRElSKQorCmRpZmYgLS1naXQgYS9CaW5kaW5ncy9FbWFjcy9hZGRfZGlyZWN0b3J5LmVsLmluIGIvQmluZGluZ3MvRW1hY3MvYWRkX2RpcmVjdG9yeS5lbC5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YjdkY2Q4Ci0tLSAvZGV2L251bGwKKysrIGIvQmluZGluZ3MvRW1hY3MvYWRkX2RpcmVjdG9yeS5lbC5pbgpAQCAtMCwwICsxIEBACisoYWRkLXRvLWxpc3QgJ2xvYWQtcGF0aCAiQERSSVZFUlNfRElSRUNUT1JZQC9ARU1BQ1NfU1VCRElSRUNUT1JZQCIpCmRpZmYgLS1naXQgYS9CaW5kaW5ncy9FbWFjcy9hcGl0ZXN0IGIvQmluZGluZ3MvRW1hY3MvYXBpdGVzdApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi43YmVmMTdjCi0tLSAvZGV2L251bGwKKysrIGIvQmluZGluZ3MvRW1hY3MvYXBpdGVzdApAQCAtMCwwICsxLDIxIEBACisjIS9iaW4vYmFzaAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBsaWJicmxhcGkgLSBBIGxpYnJhcnkgcHJvdmlkaW5nIGFjY2VzcyB0byBicmFpbGxlIHRlcm1pbmFscyBmb3IgYXBwbGljYXRpb25zLgorIworIyBDb3B5cmlnaHQgKEMpIDIwMDYtMjAyMyBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+CisjCisjIGxpYmJybGFwaSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisjCisjIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyMgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorIyBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyMKKyMgV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworIworIyBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworLiAiJHswJS8qfS8uLi8uLi9hcGl0ZXN0LnNoIgorZXhlYyBlbWFjcyAtLWJhdGNoIC0tbm8tc2l0ZS1maWxlIC1MIC4gLWwgYXBpdGVzdC5lbCAiJHtAfSIKK2V4aXQgIiR7P30iCmRpZmYgLS1naXQgYS9CaW5kaW5ncy9FbWFjcy9hcGl0ZXN0LmVsIGIvQmluZGluZ3MvRW1hY3MvYXBpdGVzdC5lbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zODIwNzhmCi0tLSAvZGV2L251bGwKKysrIGIvQmluZGluZ3MvRW1hY3MvYXBpdGVzdC5lbApAQCAtMCwwICsxLDI3IEBACisobG9hZCAiYnJsYXBpIikKKworKGRlZnZhciBicmwgKGFwcGx5ICMnYnJsYXBpLW9wZW4tY29ubmVjdGlvbiBjb21tYW5kLWxpbmUtYXJncy1sZWZ0KSkKKworKGxldCAoKHZlcnNpb24gKGJybGFwaS1nZXQtbGlicmFyeS12ZXJzaW9uKSkpCisgIChtZXNzYWdlICJMaWJyYXJ5IFZlcnNpb246ICVzLiVzLiVzIgorICAgICAgICAgICAgKHBsaXN0LWdldCB2ZXJzaW9uIDptYWpvcikKKyAgICAgICAgICAgIChwbGlzdC1nZXQgdmVyc2lvbiA6bWlub3IpCisgICAgICAgICAgICAocGxpc3QtZ2V0IHZlcnNpb24gOnJldmlzaW9uKSkpCisobWVzc2FnZSAiRHJpdmVyIE5hbWU6ICVzIiAoYnJsYXBpLWdldC1kcml2ZXItbmFtZSBicmwpKQorKG1lc3NhZ2UgIk1vZGVsIElkZW50aWZpZXI6ICVzIiAoYnJsYXBpLWdldC1tb2RlbC1pZGVudGlmaWVyIGJybCkpCisobGV0ICgoc2l6ZSAoYnJsYXBpLWdldC1kaXNwbGF5LXNpemUgYnJsKSkpCisgIChtZXNzYWdlICJEaXNwbGF5IFNpemU6ICVkeCVkIiAoY2FyIHNpemUpIChjZHIgc2l6ZSkpKQorCisobWVzc2FnZSAiQ29tcHV0ZXIgQnJhaWxsZSBUYWJsZTogJXMiIChicmxhcGktZ2V0LWNvbXB1dGVyLWJyYWlsbGUtdGFibGUgYnJsKSkKKyhtZXNzYWdlICJMaXRlcmFyeSBCcmFpbGxlIFRhYmxlOiAlcyIgKGJybGFwaS1nZXQtbGl0ZXJhcnktYnJhaWxsZS10YWJsZSBicmwpKQorKG1lc3NhZ2UgIk1lc3NhZ2UgTG9jYWxlOiAlcyIgKGJybGFwaS1nZXQtbWVzc2FnZS1sb2NhbGUgYnJsKSkKKworKG1lc3NhZ2UgIkJvdW5kIENvbW1hbmQgS2V5Y29kZSBOYW1lczogJVMiCisgICAgICAgICAobWFwY2FyIChsYW1iZGEgKGNvZGUpIChicmxhcGktZ2V0LWNvbW1hbmQta2V5Y29kZS1uYW1lIGJybCBjb2RlKSkKKyAgICAgICAgICAgICAgICAgKGJybGFwaS1nZXQtYm91bmQtY29tbWFuZC1rZXljb2RlcyBicmwpKSkKKworKG1lc3NhZ2UgIkRlZmluZWQgRHJpdmVyIEtleWNvZGUgTmFtZXM6ICVTIgorICAgICAgICAgKG1hcGNhciAobGFtYmRhIChjb2RlKSAoYnJsYXBpLWdldC1kcml2ZXIta2V5Y29kZS1uYW1lIGJybCBjb2RlKSkKKyAgICAgICAgICAgICAgICAgKGJybGFwaS1nZXQtZGVmaW5lZC1kcml2ZXIta2V5Y29kZXMgYnJsKSkpCisKKyhicmxhcGktY2xvc2UtY29ubmVjdGlvbiBicmwpCmRpZmYgLS1naXQgYS9CaW5kaW5ncy9FbWFjcy9iaW5kaW5ncy5jIGIvQmluZGluZ3MvRW1hY3MvYmluZGluZ3MuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZTg0YTU5Ci0tLSAvZGV2L251bGwKKysrIGIvQmluZGluZ3MvRW1hY3MvYmluZGluZ3MuYwpAQCAtMCwwICsxLDg5MSBAQAorLyoKKyAqIGxpYmJybGFwaSAtIEEgbGlicmFyeSBwcm92aWRpbmcgYWNjZXNzIHRvIGJyYWlsbGUgdGVybWluYWxzIGZvciBhcHBsaWNhdGlvbnMuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMjMgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPgorICoKKyAqIGxpYmJybGFwaSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorICoKKyAqIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyAqLworCisjZGVmaW5lIEJSTEFQSV9OT19TSU5HTEVfU0VTU0lPTgorI2luY2x1ZGUgInByb2xvZ3VlLmgiCisjaW5jbHVkZSA8YnJsYXBpLmg+CisjaW5jbHVkZSA8ZW1hY3MtbW9kdWxlLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworaW50IHBsdWdpbl9pc19HUExfY29tcGF0aWJsZTsKKworc3RhdGljIGNvbnN0IGNoYXIgKmVycm9yX25hbWUgPSAiYnJsYXBpLWVycm9yIjsKK3N0YXRpYyBjb25zdCBjaGFyICplcnJvcl9tZXNzYWdlID0gIkJybEFQSSBFcnJvciI7CisKK3N0YXRpYyBpbmxpbmUgZW1hY3NfdmFsdWUKK2NvbnMoZW1hY3NfZW52ICplbnYsIGVtYWNzX3ZhbHVlIGNhciwgZW1hY3NfdmFsdWUgY2RyKSB7CisgIGVtYWNzX3ZhbHVlIGFyZ3NbXSA9IHsgY2FyLCBjZHIgfTsKKworICByZXR1cm4gZW52LT5mdW5jYWxsKGVudiwgZW52LT5pbnRlcm4oZW52LCAiY29ucyIpLCBBUlJBWV9DT1VOVChhcmdzKSwgYXJncyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgZW1hY3NfdmFsdWUKK2xpc3QoZW1hY3NfZW52ICplbnYsIHB0cmRpZmZfdCBuYXJncywgZW1hY3NfdmFsdWUgKmFyZ3MpIHsKKyAgcmV0dXJuIGVudi0+ZnVuY2FsbChlbnYsIGVudi0+aW50ZXJuKGVudiwgImxpc3QiKSwgbmFyZ3MsIGFyZ3MpOworfQorCitzdGF0aWMgdm9pZAorZXJyb3IoZW1hY3NfZW52ICplbnYpIHsKKyAgY29uc3QgY2hhciAqY29uc3Qgc3RyID0gYnJsYXBpX3N0cmVycm9yKCZicmxhcGlfZXJyb3IpOworICBlbWFjc192YWx1ZSBlcnJvcl9zeW1ib2wgPSBlbnYtPmludGVybihlbnYsIGVycm9yX25hbWUpOworICBlbWFjc192YWx1ZSBkYXRhW10gPSB7CisgICAgZW52LT5tYWtlX3N0cmluZyhlbnYsIHN0ciwgc3RybGVuKHN0cikpLAorICAgIGVudi0+bWFrZV9pbnRlZ2VyKGVudiwgYnJsYXBpX2Vycm5vKSwKKyAgICBlbnYtPm1ha2VfaW50ZWdlcihlbnYsIGJybGFwaV9saWJjZXJybm8pLAorICAgIGVudi0+bWFrZV9pbnRlZ2VyKGVudiwgYnJsYXBpX2dhaWVycm5vKQorICB9OworCisgIGVudi0+bm9uX2xvY2FsX2V4aXRfc2lnbmFsKGVudiwKKyAgICBlcnJvcl9zeW1ib2wsIGxpc3QoZW52LCBBUlJBWV9DT1VOVChkYXRhKSwgZGF0YSkKKyAgKTsKK30KKworc3RhdGljIGVtYWNzX3ZhbHVlCitnZXRMaWJyYXJ5VmVyc2lvbihlbWFjc19lbnYgKmVudiwgcHRyZGlmZl90IG5hcmdzLCBlbWFjc192YWx1ZSAqYXJncywgdm9pZCAqZGF0YSkgeworICBpbnQgbWFqb3IsIG1pbm9yLCByZXZpc2lvbjsKKworICBicmxhcGlfZ2V0TGlicmFyeVZlcnNpb24oJm1ham9yLCAmbWlub3IsICZyZXZpc2lvbik7CisKKyAgeworICAgIGVtYWNzX3ZhbHVlIGRhdGFbXSA9IHsKKyAgICAgIGVudi0+aW50ZXJuKGVudiwgIjptYWpvciIpLCBlbnYtPm1ha2VfaW50ZWdlcihlbnYsIG1ham9yKSwKKyAgICAgIGVudi0+aW50ZXJuKGVudiwgIjptaW5vciIpLCBlbnYtPm1ha2VfaW50ZWdlcihlbnYsIG1pbm9yKSwKKyAgICAgIGVudi0+aW50ZXJuKGVudiwgIjpyZXZpc2lvbiIpLCBlbnYtPm1ha2VfaW50ZWdlcihlbnYsIHJldmlzaW9uKQorICAgIH07CisKKyAgICByZXR1cm4gbGlzdChlbnYsIEFSUkFZX0NPVU5UKGRhdGEpLCBkYXRhKTsKKyAgfQorfQorCitzdGF0aWMgY2hhciAqCitleHRyYWN0X3N0cmluZyhlbWFjc19lbnYgKmVudiwgcHRyZGlmZl90IG5hcmdzLCBwdHJkaWZmX3QgYXJnLCBlbWFjc192YWx1ZSAqYXJncykgeworICBpZiAoYXJnIDwgbmFyZ3MpIHsKKyAgICBpZiAoZW52LT5pc19ub3RfbmlsKGVudiwgYXJnc1thcmddKSkgeworICAgICAgcHRyZGlmZl90IHNpemU7CisgICAgICBpZiAoZW52LT5jb3B5X3N0cmluZ19jb250ZW50cyhlbnYsIGFyZ3NbYXJnXSwgTlVMTCwgJnNpemUpKSB7CisgICAgICAgIGNoYXIgKnN0cmluZyA9IG1hbGxvYyhzaXplKTsKKworICAgICAgICBpZiAoZW52LT5jb3B5X3N0cmluZ19jb250ZW50cyhlbnYsIGFyZ3NbYXJnXSwgc3RyaW5nLCAmc2l6ZSkpIHsKKyAgICAgICAgICByZXR1cm4gc3RyaW5nOworICAgICAgICB9CisgICAgICB9CisgICAgfQorICB9CisKKyAgcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBlbWFjc192YWx1ZQorb3BlbkNvbm5lY3Rpb24oZW1hY3NfZW52ICplbnYsIHB0cmRpZmZfdCBuYXJncywgZW1hY3NfdmFsdWUgKmFyZ3MsIHZvaWQgKmRhdGEpIHsKKyAgYnJsYXBpX2hhbmRsZV90ICpjb25zdCBoYW5kbGUgPSBtYWxsb2MoYnJsYXBpX2dldEhhbmRsZVNpemUoKSk7CisgIGNoYXIgKmhvc3QgPSBleHRyYWN0X3N0cmluZyhlbnYsIG5hcmdzLCAwLCBhcmdzKTsKKyAgY2hhciAqYXV0aCA9IGV4dHJhY3Rfc3RyaW5nKGVudiwgbmFyZ3MsIDEsIGFyZ3MpOworICBjb25zdCBicmxhcGlfY29ubmVjdGlvblNldHRpbmdzX3QgZGVzaXJlZFNldHRpbmdzID0geworICAgIC5ob3N0ID0gaG9zdCwgLmF1dGggPSBhdXRoCisgIH07CisgIGJybGFwaV9jb25uZWN0aW9uU2V0dGluZ3NfdCBhY3R1YWxTZXR0aW5nczsKKyAgaW50IHJlc3VsdDsKKworICBpZiAoZW52LT5ub25fbG9jYWxfZXhpdF9jaGVjayhlbnYpICE9IGVtYWNzX2Z1bmNhbGxfZXhpdF9yZXR1cm4pIHsKKyAgICBpZiAoaGFuZGxlKSBmcmVlKGhhbmRsZSk7CisgICAgaWYgKGhvc3QpIGZyZWUoaG9zdCk7CisgICAgaWYgKGF1dGgpIGZyZWUoYXV0aCk7CisgICAgcmV0dXJuIE5VTEw7CisgIH0KKworICByZXN1bHQgPSBicmxhcGlfX29wZW5Db25uZWN0aW9uKGhhbmRsZSwgJmRlc2lyZWRTZXR0aW5ncywgJmFjdHVhbFNldHRpbmdzKTsKKworICBpZiAoaG9zdCkgZnJlZShob3N0KTsKKyAgaWYgKGF1dGgpIGZyZWUoYXV0aCk7CisgIAorICBpZiAocmVzdWx0ID09IC0xKSB7CisgICAgZXJyb3IoZW52KTsKKyAgICBmcmVlKGhhbmRsZSk7CisgICAgcmV0dXJuIE5VTEw7CisgIH0KKworICByZXR1cm4gZW52LT5tYWtlX3VzZXJfcHRyKGVudiwgZnJlZSwgaGFuZGxlKTsKK30KKworc3RhdGljIGVtYWNzX3ZhbHVlCitnZXRTdHJpbmcoCisgIGVtYWNzX2VudiAqZW52LCBwdHJkaWZmX3QgbmFyZ3MsIGVtYWNzX3ZhbHVlICphcmdzLCB2b2lkICpkYXRhLAorICBpbnQgQlJMQVBJX1NURENBTEwgKCpnZXQpIChicmxhcGlfaGFuZGxlX3QgKiwgY2hhciAqLCBzaXplX3QpCispIHsKKyAgYnJsYXBpX2hhbmRsZV90ICpjb25zdCBoYW5kbGUgPSBlbnYtPmdldF91c2VyX3B0cihlbnYsIGFyZ3NbMF0pOworCisgIGlmIChoYW5kbGUpIHsKKyAgICBjaGFyIG5hbWVbQlJMQVBJX01BWE5BTUVMRU5HVEggKyAxXTsKKyAgICBzaXplX3QgbGVuZ3RoID0gZ2V0KGhhbmRsZSwgbmFtZSwgc2l6ZW9mKG5hbWUpKTsKKworICAgIGlmIChsZW5ndGggIT0gLTEpIHsKKyAgICAgIGlmIChsZW5ndGggPiAwKSBsZW5ndGgtLTsKKworICAgICAgcmV0dXJuIGVudi0+bWFrZV9zdHJpbmcoZW52LCBuYW1lLCBsZW5ndGgpOworICAgIH0KKworICAgIGVycm9yKGVudik7CisgIH0KKworICByZXR1cm4gTlVMTDsKK30KKworc3RhdGljIGVtYWNzX3ZhbHVlCitnZXREcml2ZXJOYW1lKGVtYWNzX2VudiAqZW52LCBwdHJkaWZmX3QgbmFyZ3MsIGVtYWNzX3ZhbHVlICphcmdzLCB2b2lkICpkYXRhKSB7CisgIHJldHVybiBnZXRTdHJpbmcoZW52LCBuYXJncywgYXJncywgZGF0YSwgYnJsYXBpX19nZXREcml2ZXJOYW1lKTsKK30KKworc3RhdGljIGVtYWNzX3ZhbHVlCitnZXRNb2RlbElkZW50aWZpZXIoZW1hY3NfZW52ICplbnYsIHB0cmRpZmZfdCBuYXJncywgZW1hY3NfdmFsdWUgKmFyZ3MsIHZvaWQgKmRhdGEpIHsKKyAgcmV0dXJuIGdldFN0cmluZyhlbnYsIG5hcmdzLCBhcmdzLCBkYXRhLCBicmxhcGlfX2dldE1vZGVsSWRlbnRpZmllcik7Cit9CisKK3N0YXRpYyBlbWFjc192YWx1ZQorZ2V0RGlzcGxheVNpemUoZW1hY3NfZW52ICplbnYsIHB0cmRpZmZfdCBuYXJncywgZW1hY3NfdmFsdWUgKmFyZ3MsIHZvaWQgKmRhdGEpIHsKKyAgYnJsYXBpX2hhbmRsZV90ICpjb25zdCBoYW5kbGUgPSBlbnYtPmdldF91c2VyX3B0cihlbnYsIGFyZ3NbMF0pOworCisgIGlmIChoYW5kbGUpIHsKKyAgICB1bnNpZ25lZCBpbnQgeCwgeTsKKworICAgIGlmIChicmxhcGlfX2dldERpc3BsYXlTaXplKGhhbmRsZSwgJngsICZ5KSAhPSAtMSkgeworICAgICAgcmV0dXJuIGNvbnMoZW52LCBlbnYtPm1ha2VfaW50ZWdlcihlbnYsIHgpLCBlbnYtPm1ha2VfaW50ZWdlcihlbnYsIHkpKTsKKyAgICB9CisKKyAgICBlcnJvcihlbnYpOworICB9CisKKyAgcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBjaGFyICoKK2V4dHJhY3RfZHJpdmVyKGVtYWNzX2VudiAqZW52LCBlbWFjc192YWx1ZSBhcmcpIHsKKyAgcHRyZGlmZl90IHNpemU7CisKKyAgaWYgKGVudi0+Y29weV9zdHJpbmdfY29udGVudHMoZW52LCBhcmcsIE5VTEwsICZzaXplKSkgeworICAgIGNoYXIgKmRyaXZlciA9IG1hbGxvYyhzaXplKTsKKworICAgIGlmIChlbnYtPmNvcHlfc3RyaW5nX2NvbnRlbnRzKGVudiwgYXJnLCBkcml2ZXIsICZzaXplKSkgeworICAgICAgcmV0dXJuIGRyaXZlcjsKKyAgICB9CisgIH0KKworICByZXR1cm4gTlVMTDsKK30KKworc3RhdGljIGVtYWNzX3ZhbHVlCitlbnRlclR0eU1vZGUoZW1hY3NfZW52ICplbnYsIHB0cmRpZmZfdCBuYXJncywgZW1hY3NfdmFsdWUgKmFyZ3MsIHZvaWQgKmRhdGEpIHsKKyAgYnJsYXBpX2hhbmRsZV90ICpjb25zdCBoYW5kbGUgPSBlbnYtPmdldF91c2VyX3B0cihlbnYsIGFyZ3NbMF0pOworICBlbWFjc192YWx1ZSByZXN1bHQgPSBOVUxMOworCisgIGlmIChoYW5kbGUpIHsKKyAgICBpbnQgdHR5ID0gbmFyZ3MgPiAxICYmIGVudi0+aXNfbm90X25pbChlbnYsIGFyZ3NbMV0pPworICAgICAgICAgICAgICBlbnYtPmV4dHJhY3RfaW50ZWdlcihlbnYsIGFyZ3NbMV0pOiBCUkxBUElfVFRZX0RFRkFVTFQ7CisgICAgY2hhciAqZHJpdmVyID0gbmFyZ3MgPiAyPyBleHRyYWN0X2RyaXZlcihlbnYsIGFyZ3NbMl0pOiBOVUxMOworCisgICAgaWYgKGVudi0+bm9uX2xvY2FsX2V4aXRfY2hlY2soZW52KSA9PSBlbWFjc19mdW5jYWxsX2V4aXRfcmV0dXJuKSB7CisgICAgICB0dHkgPSBicmxhcGlfX2VudGVyVHR5TW9kZShoYW5kbGUsIHR0eSwgZHJpdmVyKTsKKyAgICAKKyAgICAgIGlmICh0dHkgIT0gLTEpIHsKKyAgICAgICAgcmVzdWx0ID0gZW52LT5tYWtlX2ludGVnZXIoZW52LCB0dHkpOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgZXJyb3IoZW52KTsKKyAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoZHJpdmVyKSBmcmVlKGRyaXZlcik7CisgIH0KKworICByZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgZW1hY3NfdmFsdWUKK2xlYXZlVHR5TW9kZShlbWFjc19lbnYgKmVudiwgcHRyZGlmZl90IG5hcmdzLCBlbWFjc192YWx1ZSAqYXJncywgdm9pZCAqZGF0YSkgeworICBicmxhcGlfaGFuZGxlX3QgKmNvbnN0IGhhbmRsZSA9IGVudi0+Z2V0X3VzZXJfcHRyKGVudiwgYXJnc1swXSk7CisKKyAgaWYgKGhhbmRsZSkgeworICAgIGlmIChicmxhcGlfX2xlYXZlVHR5TW9kZShoYW5kbGUpICE9IC0xKSB7CisgICAgICByZXR1cm4gZW52LT5pbnRlcm4oZW52LCAibmlsIik7CisgICAgfQorCisgICAgZXJyb3IoZW52KTsKKyAgfQorCisgIHJldHVybiBOVUxMOworfQorCitzdGF0aWMgaW5saW5lIGludAorZXh0cmFjdF9jdXJzb3IoZW1hY3NfZW52ICplbnYsIGVtYWNzX3ZhbHVlIGFyZykgeworICBpZiAoIWVudi0+aXNfbm90X25pbChlbnYsIGFyZykpIHJldHVybiBCUkxBUElfQ1VSU09SX09GRjsKKyAgaWYgKGVudi0+ZXEoZW52LCBhcmcsIGVudi0+aW50ZXJuKGVudiwgImxlYXZlIikpKSByZXR1cm4gQlJMQVBJX0NVUlNPUl9MRUFWRTsKKyAgcmV0dXJuIGVudi0+ZXh0cmFjdF9pbnRlZ2VyKGVudiwgYXJnKTsKK30KKworc3RhdGljIGVtYWNzX3ZhbHVlCit3cml0ZVRleHQoZW1hY3NfZW52ICplbnYsIHB0cmRpZmZfdCBuYXJncywgZW1hY3NfdmFsdWUgKmFyZ3MsIHZvaWQgKmRhdGEpIHsKKyAgYnJsYXBpX2hhbmRsZV90ICpjb25zdCBoYW5kbGUgPSBlbnYtPmdldF91c2VyX3B0cihlbnYsIGFyZ3NbMF0pOworCisgIGlmIChoYW5kbGUpIHsKKyAgICBwdHJkaWZmX3Qgc2l6ZTsKKworICAgIGlmIChlbnYtPmNvcHlfc3RyaW5nX2NvbnRlbnRzKGVudiwgYXJnc1sxXSwgTlVMTCwgJnNpemUpKSB7CisgICAgICBjaGFyIHRleHRbc2l6ZV07CisKKyAgICAgIGlmIChlbnYtPmNvcHlfc3RyaW5nX2NvbnRlbnRzKGVudiwgYXJnc1sxXSwgdGV4dCwgJnNpemUpKSB7CisgICAgICAgIGludCBjdXJzb3IgPSBuYXJncyA+IDI/IGV4dHJhY3RfY3Vyc29yKGVudiwgYXJnc1syXSk6IEJSTEFQSV9DVVJTT1JfT0ZGOworCisgICAgICAgIGlmIChlbnYtPm5vbl9sb2NhbF9leGl0X2NoZWNrKGVudikgPT0gZW1hY3NfZnVuY2FsbF9leGl0X3JldHVybikgeworICAgICAgICAgIGlmIChicmxhcGlfX3dyaXRlVGV4dChoYW5kbGUsIGN1cnNvciwgdGV4dCkgIT0gLTEpIHsKKyAgICAgICAgICAgIHJldHVybiBlbnYtPmludGVybihlbnYsICJuaWwiKTsKKyAgICAgICAgICB9CisKKyAgICAgICAgICBlcnJvcihlbnYpOworICAgICAgICB9CisgICAgICB9CisgICAgfQorICB9CisKKyAgcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBlbWFjc192YWx1ZQorcmVhZEtleShlbWFjc19lbnYgKmVudiwgcHRyZGlmZl90IG5hcmdzLCBlbWFjc192YWx1ZSAqYXJncywgdm9pZCAqZGF0YSkgeworICBicmxhcGlfaGFuZGxlX3QgKmNvbnN0IGhhbmRsZSA9IGVudi0+Z2V0X3VzZXJfcHRyKGVudiwgYXJnc1swXSk7CisgIGNvbnN0IGludCB3YWl0ID0gbmFyZ3MgPiAxPyBlbnYtPmlzX25vdF9uaWwoZW52LCBhcmdzWzFdKTogMDsKKyAgYnJsYXBpX2tleUNvZGVfdCBrZXlDb2RlOworICBpbnQgcmVzdWx0OworCisgIGlmIChoYW5kbGUgPT0gTlVMTCkgcmV0dXJuIE5VTEw7CisKKyAgZG8geworICAgIGlmIChlbnYtPnByb2Nlc3NfaW5wdXQoZW52KSAhPSBlbWFjc19wcm9jZXNzX2lucHV0X2NvbnRpbnVlKQorICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICByZXN1bHQgPSBicmxhcGlfX3JlYWRLZXkoaGFuZGxlLCB3YWl0LCAma2V5Q29kZSk7CisgIH0gd2hpbGUgKHJlc3VsdCA9PSAtMSAmJgorICAgICAgICAgICBicmxhcGlfZXJybm8gPT0gQlJMQVBJX0VSUk9SX0xJQkNFUlIgJiYKKyAgICAgICAgICAgYnJsYXBpX2xpYmNlcnJubyA9PSBFSU5UUik7CisgIAorICBpZiAocmVzdWx0ID09IC0xKSB7CisgICAgZXJyb3IoZW52KTsKKyAgICByZXR1cm4gTlVMTDsKKyAgfQorCisgIGlmIChyZXN1bHQgPT0gMCkgcmV0dXJuIGVudi0+aW50ZXJuKGVudiwgIm5pbCIpOworCisgIHJldHVybiBlbnYtPm1ha2VfaW50ZWdlcihlbnYsIChpbnRtYXhfdClrZXlDb2RlKTsKK30KKworc3RhdGljIGVtYWNzX3ZhbHVlCityZWFkS2V5V2l0aFRpbWVvdXQoZW1hY3NfZW52ICplbnYsIHB0cmRpZmZfdCBuYXJncywgZW1hY3NfdmFsdWUgKmFyZ3MsIHZvaWQgKmRhdGEpIHsKKyAgYnJsYXBpX2hhbmRsZV90ICpjb25zdCBoYW5kbGUgPSBlbnYtPmdldF91c2VyX3B0cihlbnYsIGFyZ3NbMF0pOworICBjb25zdCBpbnQgdGltZW91dF9tcyA9IGVudi0+ZXh0cmFjdF9pbnRlZ2VyKGVudiwgYXJnc1sxXSk7CisgIGJybGFwaV9rZXlDb2RlX3Qga2V5Q29kZTsKKyAgaW50IHJlc3VsdDsKKworICBkbyB7CisgICAgaWYgKGVudi0+cHJvY2Vzc19pbnB1dChlbnYpICE9IGVtYWNzX3Byb2Nlc3NfaW5wdXRfY29udGludWUpCisgICAgICByZXR1cm4gTlVMTDsKKworICAgIHJlc3VsdCA9IGJybGFwaV9fcmVhZEtleVdpdGhUaW1lb3V0KGhhbmRsZSwgdGltZW91dF9tcywgJmtleUNvZGUpOworICB9IHdoaWxlIChyZXN1bHQgPT0gLTEgJiYKKyAgICAgICAgICAgdGltZW91dF9tcyA8IDAgJiYKKyAgICAgICAgICAgYnJsYXBpX2Vycm5vID09IEJSTEFQSV9FUlJPUl9MSUJDRVJSICYmCisgICAgICAgICAgIGJybGFwaV9saWJjZXJybm8gPT0gRUlOVFIpOworICAKKyAgaWYgKHJlc3VsdCA9PSAtMSkgeworICAgIGVycm9yKGVudik7CisgICAgcmV0dXJuIE5VTEw7CisgIH0KKworICBpZiAocmVzdWx0ID09IDApIHJldHVybiBlbnYtPmludGVybihlbnYsICJuaWwiKTsKKworICByZXR1cm4gZW52LT5tYWtlX2ludGVnZXIoZW52LCAoaW50bWF4X3Qpa2V5Q29kZSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgYnJsYXBpX2tleUNvZGVfdAorZXh0cmFjdF9rZXlDb2RlKGVtYWNzX2VudiAqZW52LCBlbWFjc192YWx1ZSB2YWx1ZSkgeworICByZXR1cm4gKGJybGFwaV9rZXlDb2RlX3QpZW52LT5leHRyYWN0X2ludGVnZXIoZW52LCB2YWx1ZSk7Cit9CisKK3N0YXRpYyBjb25zdCBwdHJkaWZmX3QgY2hhbmdlS2V5c01pbkFyaXR5ID0gMjsKKworc3RhdGljIGVtYWNzX3ZhbHVlCitjaGFuZ2VLZXlzICgKKyAgZW1hY3NfZW52ICplbnYsIHB0cmRpZmZfdCBuYXJncywgZW1hY3NfdmFsdWUgKmFyZ3MsIHZvaWQgKmRhdGEsCisgIGludCBCUkxBUElfU1REQ0FMTCAoKmNoYW5nZSkgKAorICAgIGJybGFwaV9oYW5kbGVfdCAqLCBicmxhcGlfcmFuZ2VUeXBlX3QsIGNvbnN0IGJybGFwaV9rZXlDb2RlX3RbXSwgdW5zaWduZWQgaW50CisgICkKKykgeworICBicmxhcGlfaGFuZGxlX3QgKmNvbnN0IGhhbmRsZSA9IGVudi0+Z2V0X3VzZXJfcHRyKGVudiwgYXJnc1swXSk7CisKKyAgaWYgKGhhbmRsZSkgeworICAgIHN0YXRpYyBjb25zdCBjaGFyICpyYW5nZU5hbWVzW10gPSB7CisgICAgICAiYWxsIiwgImNvZGUiLCAiY29tbWFuZCIsICJrZXkiLCAidHlwZSIsIE5VTEwKKyAgICB9OworICAgIHN0YXRpYyBjb25zdCBicmxhcGlfcmFuZ2VUeXBlX3QgcmFuZ2VUeXBlc1tdID0geworICAgICAgYnJsYXBpX3JhbmdlVHlwZV9hbGwsCisgICAgICBicmxhcGlfcmFuZ2VUeXBlX2NvZGUsCisgICAgICBicmxhcGlfcmFuZ2VUeXBlX2NvbW1hbmQsCisgICAgICBicmxhcGlfcmFuZ2VUeXBlX2tleSwKKyAgICAgIGJybGFwaV9yYW5nZVR5cGVfdHlwZQorICAgIH07CisgICAgc2l6ZV90IHJhbmdlSW5kZXggPSAwOworCisgICAgd2hpbGUgKHJhbmdlTmFtZXNbcmFuZ2VJbmRleF0pIHsKKyAgICAgIGlmIChlbnYtPmVxKGVudiwgYXJnc1sxXSwgZW52LT5pbnRlcm4oZW52LCByYW5nZU5hbWVzW3JhbmdlSW5kZXhdKSkpIHsKKyAgICAgICAgYnJlYWs7CisgICAgICB9CisgICAgICByYW5nZUluZGV4Kys7CisgICAgfQorCisgICAgaWYgKHJhbmdlTmFtZXNbcmFuZ2VJbmRleF0pIHsKKyAgICAgIGNvbnN0IGJybGFwaV9yYW5nZVR5cGVfdCByYW5nZSA9IHJhbmdlVHlwZXNbcmFuZ2VJbmRleF07CisKKyAgICAgIGlmIChyYW5nZSA9PSBicmxhcGlfcmFuZ2VUeXBlX2FsbCkgeworICAgICAgICBpZiAoY2hhbmdlKGhhbmRsZSwgcmFuZ2UsIE5VTEwsIDApICE9IC0xKSB7CisgICAgICAgICAgcmV0dXJuIGVudi0+aW50ZXJuKGVudiwgIm5pbCIpOworICAgICAgICB9CisKKyAgICAgICAgZXJyb3IoZW52KTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIGJybGFwaV9rZXlDb2RlX3Qga2V5c1tuYXJncyAtIGNoYW5nZUtleXNNaW5Bcml0eV07CisKKyAgICAgICAgZm9yIChwdHJkaWZmX3QgaW5kZXggPSAwOyBpbmRleCA8IEFSUkFZX0NPVU5UKGtleXMpOyBpbmRleCsrKSB7CisgICAgICAgICAga2V5c1tpbmRleF0gPSBleHRyYWN0X2tleUNvZGUoZW52LCBhcmdzW2NoYW5nZUtleXNNaW5Bcml0eSArIGluZGV4XSk7CisKKyAgICAgICAgICBpZiAoZW52LT5ub25fbG9jYWxfZXhpdF9jaGVjayhlbnYpICE9IGVtYWNzX2Z1bmNhbGxfZXhpdF9yZXR1cm4pCisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChjaGFuZ2UoaGFuZGxlLCByYW5nZSwga2V5cywgQVJSQVlfQ09VTlQoa2V5cykpICE9IC0xKSB7CisgICAgICAgICAgcmV0dXJuIGVudi0+aW50ZXJuKGVudiwgIm5pbCIpOworICAgICAgICB9CisKKyAgICAgICAgZXJyb3IoZW52KTsKKyAgICAgIH0KKworICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgeyAvKiAoc2lnbmFsICd3cm9uZy10eXBlLWFyZ3VtZW50IChsaXN0ICdzeW1ib2xwIGFyZykpICovCisgICAgICBlbWFjc192YWx1ZSBkYXRhW10gPSB7CisgICAgICAgIGVudi0+aW50ZXJuKGVudiwgInN5bWJvbHAiKSwgYXJnc1sxXQorICAgICAgfTsKKworICAgICAgZW52LT5ub25fbG9jYWxfZXhpdF9zaWduYWwoZW52LAorICAgICAgICBlbnYtPmludGVybihlbnYsICJ3cm9uZy10eXBlLWFyZ3VtZW50IiksCisgICAgICAgIGxpc3QoZW52LCBBUlJBWV9DT1VOVChkYXRhKSwgZGF0YSkKKyAgICAgICk7CisgICAgfQorICB9CisKKyAgcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBlbWFjc192YWx1ZQorYWNjZXB0S2V5cyhlbWFjc19lbnYgKmVudiwgcHRyZGlmZl90IG5hcmdzLCBlbWFjc192YWx1ZSAqYXJncywgdm9pZCAqZGF0YSkgeworICByZXR1cm4gY2hhbmdlS2V5cyhlbnYsIG5hcmdzLCBhcmdzLCBkYXRhLCBicmxhcGlfX2FjY2VwdEtleXMpOworfQorCitzdGF0aWMgZW1hY3NfdmFsdWUKK2lnbm9yZUtleXMoZW1hY3NfZW52ICplbnYsIHB0cmRpZmZfdCBuYXJncywgZW1hY3NfdmFsdWUgKmFyZ3MsIHZvaWQgKmRhdGEpIHsKKyAgcmV0dXJuIGNoYW5nZUtleXMoZW52LCBuYXJncywgYXJncywgZGF0YSwgYnJsYXBpX19pZ25vcmVLZXlzKTsKK30KKworc3RhdGljIGVtYWNzX3ZhbHVlCitkZXNjcmliZUtleUNvZGUoZW1hY3NfZW52ICplbnYsIHB0cmRpZmZfdCBuYXJncywgZW1hY3NfdmFsdWUgKmFyZ3MsIHZvaWQgKmRhdGEpIHsKKyAgY29uc3QgYnJsYXBpX2tleUNvZGVfdCBrZXlDb2RlID0gZXh0cmFjdF9rZXlDb2RlKGVudiwgYXJnc1swXSk7CisKKyAgaWYgKGVudi0+bm9uX2xvY2FsX2V4aXRfY2hlY2soZW52KSA9PSBlbWFjc19mdW5jYWxsX2V4aXRfcmV0dXJuKSB7CisgICAgYnJsYXBpX2Rlc2NyaWJlZEtleUNvZGVfdCBkZXNjcmlwdGlvbjsKKworICAgIGlmIChicmxhcGlfZGVzY3JpYmVLZXlDb2RlKGtleUNvZGUsICZkZXNjcmlwdGlvbikgIT0gLTEpIHsKKyAgICAgIHN0YXRpYyBjb25zdCBzaXplX3QgbWluX2xlbiA9IDM7CisgICAgICBlbWFjc192YWx1ZSBkYXRhW21pbl9sZW4gKyBkZXNjcmlwdGlvbi5mbGFnc107CisgICAgICAKKyAgICAgIGRhdGFbMF0gPSBlbnYtPmludGVybihlbnYsIGRlc2NyaXB0aW9uLnR5cGUpOworICAgICAgZGF0YVsxXSA9IGVudi0+aW50ZXJuKGVudiwgZGVzY3JpcHRpb24uY29tbWFuZCk7CisgICAgICBkYXRhWzJdID0gZW52LT5tYWtlX2ludGVnZXIoZW52LCBkZXNjcmlwdGlvbi5hcmd1bWVudCk7CisgICAgICBmb3IgKHNpemVfdCBpbmRleCA9IDA7IGluZGV4IDwgZGVzY3JpcHRpb24uZmxhZ3M7IGluZGV4ICs9IDEpIHsKKyAgICAgICAgZGF0YVttaW5fbGVuK2luZGV4XSA9IGVudi0+aW50ZXJuKGVudiwgZGVzY3JpcHRpb24uZmxhZ1tpbmRleF0pOworICAgICAgfQorCisgICAgICByZXR1cm4gbGlzdChlbnYsIEFSUkFZX0NPVU5UKGRhdGEpLCBkYXRhKTsKKyAgICB9CisKKyAgICBlcnJvcihlbnYpOworICB9CisKKyAgcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBlbWFjc192YWx1ZQorZ2V0U3RyaW5nUGFyYW1ldGVyKAorICBlbWFjc19lbnYgKmVudiwgcHRyZGlmZl90IG5hcmdzLCBlbWFjc192YWx1ZSAqYXJncywgdm9pZCAqZGF0YSwKKyAgYnJsYXBpX3BhcmFtX3QgcGFyYW0KKykgeworICBicmxhcGlfaGFuZGxlX3QgKmNvbnN0IGhhbmRsZSA9IGVudi0+Z2V0X3VzZXJfcHRyKGVudiwgYXJnc1swXSk7CisKKyAgaWYgKGhhbmRsZSkgeworICAgIHN0YXRpYyBjb25zdCBicmxhcGlfcGFyYW1fZmxhZ3NfdCBmbGFncyA9IEJSTEFQSV9QQVJBTUZfR0xPQkFMOworICAgIHNpemVfdCBjb3VudDsKKyAgICBjaGFyICpzdHJpbmcgPSBicmxhcGlfX2dldFBhcmFtZXRlckFsbG9jKGhhbmRsZSwgcGFyYW0sIDAsIGZsYWdzLCAmY291bnQpOworCisgICAgaWYgKHN0cmluZykgeworICAgICAgZW1hY3NfdmFsdWUgcmVzdWx0ID0gZW52LT5tYWtlX3N0cmluZyhlbnYsIHN0cmluZywgY291bnQpOworCisgICAgICBmcmVlKHN0cmluZyk7CisKKyAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgZXJyb3IoZW52KTsKKyAgfQorCisgIHJldHVybiBOVUxMOworfQorCitzdGF0aWMgZW1hY3NfdmFsdWUKK3NldFN0cmluZ1BhcmFtZXRlcigKKyAgZW1hY3NfZW52ICplbnYsIHB0cmRpZmZfdCBuYXJncywgZW1hY3NfdmFsdWUgKmFyZ3MsIHZvaWQgKmRhdGEsCisgIGJybGFwaV9wYXJhbV90IHBhcmFtCispIHsKKyAgYnJsYXBpX2hhbmRsZV90ICpjb25zdCBoYW5kbGUgPSBlbnYtPmdldF91c2VyX3B0cihlbnYsIGFyZ3NbMF0pOworCisgIGlmIChoYW5kbGUpIHsKKyAgICBwdHJkaWZmX3QgbGVuZ3RoOworICAgIAorICAgIGlmIChlbnYtPmNvcHlfc3RyaW5nX2NvbnRlbnRzKGVudiwgYXJnc1sxXSwgTlVMTCwgJmxlbmd0aCkpIHsKKyAgICAgIGNoYXIgc3RyaW5nW2xlbmd0aF07CisgICAgICAKKyAgICAgIGlmIChlbnYtPmNvcHlfc3RyaW5nX2NvbnRlbnRzKGVudiwgYXJnc1sxXSwgc3RyaW5nLCAmbGVuZ3RoKSkgeworICAgICAgICBzdGF0aWMgY29uc3QgYnJsYXBpX3BhcmFtX2ZsYWdzX3QgZmxhZ3MgPSBCUkxBUElfUEFSQU1GX0dMT0JBTDsKKworICAgICAgICBpZiAoYnJsYXBpX19zZXRQYXJhbWV0ZXIoaGFuZGxlLCBwYXJhbSwgMCwgZmxhZ3MsIHN0cmluZywgbGVuZ3RoKSAhPSAtMSkgeworICAgICAgICAgIHJldHVybiBlbnYtPmludGVybihlbnYsICJuaWwiKTsKKyAgICAgICAgfQorCisgICAgICAgIGVycm9yKGVudik7CisgICAgICB9CisgICAgfQorICB9CisKKyAgcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBlbWFjc192YWx1ZQorZ2V0RHJpdmVyQ29kZShlbWFjc19lbnYgKmVudiwgcHRyZGlmZl90IG5hcmdzLCBlbWFjc192YWx1ZSAqYXJncywgdm9pZCAqZGF0YSkgeworICByZXR1cm4gZ2V0U3RyaW5nUGFyYW1ldGVyKGVudiwgbmFyZ3MsIGFyZ3MsIGRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQlJMQVBJX1BBUkFNX0RSSVZFUl9DT0RFKTsKK30KKworc3RhdGljIGVtYWNzX3ZhbHVlCitnZXREcml2ZXJWZXJzaW9uKGVtYWNzX2VudiAqZW52LCBwdHJkaWZmX3QgbmFyZ3MsIGVtYWNzX3ZhbHVlICphcmdzLCB2b2lkICpkYXRhKSB7CisgIHJldHVybiBnZXRTdHJpbmdQYXJhbWV0ZXIoZW52LCBuYXJncywgYXJncywgZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBCUkxBUElfUEFSQU1fRFJJVkVSX1ZFUlNJT04pOworfQorCitzdGF0aWMgZW1hY3NfdmFsdWUKK2dldENsaXBib2FyZENvbnRlbnQoCisgIGVtYWNzX2VudiAqZW52LCBwdHJkaWZmX3QgbmFyZ3MsIGVtYWNzX3ZhbHVlICphcmdzLCB2b2lkICpkYXRhCispIHsKKyAgcmV0dXJuIGdldFN0cmluZ1BhcmFtZXRlcihlbnYsIG5hcmdzLCBhcmdzLCBkYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJSTEFQSV9QQVJBTV9DTElQQk9BUkRfQ09OVEVOVCk7Cit9CisKK3N0YXRpYyBlbWFjc192YWx1ZQorc2V0Q2xpcGJvYXJkQ29udGVudCgKKyAgZW1hY3NfZW52ICplbnYsIHB0cmRpZmZfdCBuYXJncywgZW1hY3NfdmFsdWUgKmFyZ3MsIHZvaWQgKmRhdGEKKykgeworICByZXR1cm4gc2V0U3RyaW5nUGFyYW1ldGVyKGVudiwgbmFyZ3MsIGFyZ3MsIGRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQlJMQVBJX1BBUkFNX0NMSVBCT0FSRF9DT05URU5UKTsKK30KKworc3RhdGljIGVtYWNzX3ZhbHVlCitnZXRDb21wdXRlckJyYWlsbGVUYWJsZSgKKyAgZW1hY3NfZW52ICplbnYsIHB0cmRpZmZfdCBuYXJncywgZW1hY3NfdmFsdWUgKmFyZ3MsIHZvaWQgKmRhdGEKKykgeworICByZXR1cm4gZ2V0U3RyaW5nUGFyYW1ldGVyKGVudiwgbmFyZ3MsIGFyZ3MsIGRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQlJMQVBJX1BBUkFNX0NPTVBVVEVSX0JSQUlMTEVfVEFCTEUpOworfQorCitzdGF0aWMgZW1hY3NfdmFsdWUKK3NldENvbXB1dGVyQnJhaWxsZVRhYmxlKAorICBlbWFjc19lbnYgKmVudiwgcHRyZGlmZl90IG5hcmdzLCBlbWFjc192YWx1ZSAqYXJncywgdm9pZCAqZGF0YQorKSB7CisgIHJldHVybiBzZXRTdHJpbmdQYXJhbWV0ZXIoZW52LCBuYXJncywgYXJncywgZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBCUkxBUElfUEFSQU1fQ09NUFVURVJfQlJBSUxMRV9UQUJMRSk7Cit9CisKK3N0YXRpYyBlbWFjc192YWx1ZQorZ2V0TGl0ZXJhcnlCcmFpbGxlVGFibGUoCisgIGVtYWNzX2VudiAqZW52LCBwdHJkaWZmX3QgbmFyZ3MsIGVtYWNzX3ZhbHVlICphcmdzLCB2b2lkICpkYXRhCispIHsKKyAgcmV0dXJuIGdldFN0cmluZ1BhcmFtZXRlcihlbnYsIG5hcmdzLCBhcmdzLCBkYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJSTEFQSV9QQVJBTV9MSVRFUkFSWV9CUkFJTExFX1RBQkxFKTsKK30KKworc3RhdGljIGVtYWNzX3ZhbHVlCitzZXRMaXRlcmFyeUJyYWlsbGVUYWJsZSgKKyAgZW1hY3NfZW52ICplbnYsIHB0cmRpZmZfdCBuYXJncywgZW1hY3NfdmFsdWUgKmFyZ3MsIHZvaWQgKmRhdGEKKykgeworICByZXR1cm4gc2V0U3RyaW5nUGFyYW1ldGVyKGVudiwgbmFyZ3MsIGFyZ3MsIGRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQlJMQVBJX1BBUkFNX0xJVEVSQVJZX0JSQUlMTEVfVEFCTEUpOworfQorCitzdGF0aWMgZW1hY3NfdmFsdWUKK2dldE1lc3NhZ2VMb2NhZSgKKyAgZW1hY3NfZW52ICplbnYsIHB0cmRpZmZfdCBuYXJncywgZW1hY3NfdmFsdWUgKmFyZ3MsIHZvaWQgKmRhdGEKKykgeworICByZXR1cm4gZ2V0U3RyaW5nUGFyYW1ldGVyKGVudiwgbmFyZ3MsIGFyZ3MsIGRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQlJMQVBJX1BBUkFNX01FU1NBR0VfTE9DQUxFKTsKK30KKworc3RhdGljIGVtYWNzX3ZhbHVlCitzZXRNZXNzYWdlTG9jYWxlKAorICBlbWFjc19lbnYgKmVudiwgcHRyZGlmZl90IG5hcmdzLCBlbWFjc192YWx1ZSAqYXJncywgdm9pZCAqZGF0YQorKSB7CisgIHJldHVybiBzZXRTdHJpbmdQYXJhbWV0ZXIoZW52LCBuYXJncywgYXJncywgZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBCUkxBUElfUEFSQU1fTUVTU0FHRV9MT0NBTEUpOworfQorCitzdGF0aWMgZW1hY3NfdmFsdWUKK2dldEtleWNvZGVzKAorICBlbWFjc19lbnYgKmVudiwgcHRyZGlmZl90IG5hcmdzLCBlbWFjc192YWx1ZSAqYXJncywgdm9pZCAqZGF0YSwKKyAgYnJsYXBpX3BhcmFtX3QgcGFyYW0KKykgeworICBicmxhcGlfaGFuZGxlX3QgKmNvbnN0IGhhbmRsZSA9IGVudi0+Z2V0X3VzZXJfcHRyKGVudiwgYXJnc1swXSk7CisKKyAgaWYgKGhhbmRsZSkgeworICAgIHN0YXRpYyBjb25zdCBicmxhcGlfcGFyYW1fZmxhZ3NfdCBmbGFncyA9IEJSTEFQSV9QQVJBTUZfR0xPQkFMOworICAgIHNpemVfdCBjb3VudDsKKyAgICBicmxhcGlfa2V5Q29kZV90ICpjb2RlcyA9IGJybGFwaV9fZ2V0UGFyYW1ldGVyQWxsb2MoCisgICAgICBoYW5kbGUsIHBhcmFtLCAwLCBmbGFncywgJmNvdW50CisgICAgKTsKKworICAgIGlmIChjb2RlcyAhPSBOVUxMKSB7CisgICAgICBjb3VudCAvPSBzaXplb2YoYnJsYXBpX2tleUNvZGVfdCk7CisKKyAgICAgIHsKKyAgICAgICAgZW1hY3NfdmFsdWUgZGF0YVtjb3VudF07CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY291bnQ7IGkgKz0gMSkgeworICAgICAgICAgIGRhdGFbaV0gPSBlbnYtPm1ha2VfaW50ZWdlcihlbnYsIChpbnRtYXhfdCljb2Rlc1tpXSk7CisgICAgICAgIH0KKyAgICAgICAgZnJlZShjb2Rlcyk7CisKKyAgICAgICAgcmV0dXJuIGxpc3QoZW52LCBBUlJBWV9DT1VOVChkYXRhKSwgZGF0YSk7CisgICAgICB9CisgICAgfQorCisgICAgZXJyb3IoZW52KTsKKyAgfQorCisgIHJldHVybiBOVUxMOworfQorCitzdGF0aWMgZW1hY3NfdmFsdWUKK2dldEJvdW5kQ29tbWFuZEtleWNvZGVzKAorICBlbWFjc19lbnYgKmVudiwgcHRyZGlmZl90IG5hcmdzLCBlbWFjc192YWx1ZSAqYXJncywgdm9pZCAqZGF0YQorKSB7CisgIHJldHVybiBnZXRLZXljb2RlcyhlbnYsIG5hcmdzLCBhcmdzLCBkYXRhLAorICAgIEJSTEFQSV9QQVJBTV9CT1VORF9DT01NQU5EX0tFWUNPREVTCisgICk7Cit9CisKK3N0YXRpYyBlbWFjc192YWx1ZQorZ2V0RGVmaW5lZERyaXZlcktleWNvZGVzKAorICBlbWFjc19lbnYgKmVudiwgcHRyZGlmZl90IG5hcmdzLCBlbWFjc192YWx1ZSAqYXJncywgdm9pZCAqZGF0YQorKSB7CisgIHJldHVybiBnZXRLZXljb2RlcyhlbnYsIG5hcmdzLCBhcmdzLCBkYXRhLAorICAgIEJSTEFQSV9QQVJBTV9ERUZJTkVEX0RSSVZFUl9LRVlDT0RFUworICApOworfQorCitzdGF0aWMgZW1hY3NfdmFsdWUKK2dldEtleWNvZGVOYW1lKAorICBlbWFjc19lbnYgKmVudiwgcHRyZGlmZl90IG5hcmdzLCBlbWFjc192YWx1ZSAqYXJncywgdm9pZCAqZGF0YSwKKyAgYnJsYXBpX3BhcmFtX3QgcGFyYW0KKykgeworICBicmxhcGlfaGFuZGxlX3QgKmNvbnN0IGhhbmRsZSA9IGVudi0+Z2V0X3VzZXJfcHRyKGVudiwgYXJnc1swXSk7CisKKyAgaWYgKGhhbmRsZSkgeworICAgIGJybGFwaV9rZXlDb2RlX3Qga2V5Q29kZSA9IGV4dHJhY3Rfa2V5Q29kZShlbnYsIGFyZ3NbMV0pOworCisgICAgaWYgKGVudi0+bm9uX2xvY2FsX2V4aXRfY2hlY2soZW52KSA9PSBlbWFjc19mdW5jYWxsX2V4aXRfcmV0dXJuKSB7CisgICAgICBjaGFyICpuYW1lID0gYnJsYXBpX19nZXRQYXJhbWV0ZXJBbGxvYyhoYW5kbGUsCisgICAgICAgIHBhcmFtLCBrZXlDb2RlLCBCUkxBUElfUEFSQU1GX0dMT0JBTCwgTlVMTAorICAgICAgKTsKKyAgICAgIAorICAgICAgaWYgKG5hbWUpIHsKKyAgICAgICAgZW1hY3NfdmFsdWUgcmVzdWx0ID0gZW52LT5pbnRlcm4oZW52LCBuYW1lKTsKKworICAgICAgICBmcmVlKG5hbWUpOworICAgICAgICAKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgIH0KKworICAgICAgZXJyb3IoZW52KTsKKyAgICB9CisgIH0KKyAgCisgIHJldHVybiBOVUxMOworfQorCitzdGF0aWMgZW1hY3NfdmFsdWUKK2dldENvbW1hbmRLZXljb2RlTmFtZSgKKyAgZW1hY3NfZW52ICplbnYsIHB0cmRpZmZfdCBuYXJncywgZW1hY3NfdmFsdWUgKmFyZ3MsIHZvaWQgKmRhdGEKKykgeworICByZXR1cm4gZ2V0S2V5Y29kZU5hbWUoZW52LCBuYXJncywgYXJncywgZGF0YSwKKyAgICBCUkxBUElfUEFSQU1fQ09NTUFORF9LRVlDT0RFX05BTUUKKyAgKTsKK30KKworc3RhdGljIGVtYWNzX3ZhbHVlCitnZXREcml2ZXJLZXljb2RlTmFtZSgKKyAgZW1hY3NfZW52ICplbnYsIHB0cmRpZmZfdCBuYXJncywgZW1hY3NfdmFsdWUgKmFyZ3MsIHZvaWQgKmRhdGEKKykgeworICByZXR1cm4gZ2V0S2V5Y29kZU5hbWUoZW52LCBuYXJncywgYXJncywgZGF0YSwKKyAgICBCUkxBUElfUEFSQU1fRFJJVkVSX0tFWUNPREVfTkFNRQorICApOworfQorCitzdGF0aWMgZW1hY3NfdmFsdWUKK2dldEtleWNvZGVTdW1tYXJ5KAorICBlbWFjc19lbnYgKmVudiwgcHRyZGlmZl90IG5hcmdzLCBlbWFjc192YWx1ZSAqYXJncywgdm9pZCAqZGF0YSwKKyAgYnJsYXBpX3BhcmFtX3QgcGFyYW0KKykgeworICBicmxhcGlfaGFuZGxlX3QgKmNvbnN0IGhhbmRsZSA9IGVudi0+Z2V0X3VzZXJfcHRyKGVudiwgYXJnc1swXSk7CisKKyAgaWYgKGhhbmRsZSkgeworICAgIGJybGFwaV9rZXlDb2RlX3Qga2V5Q29kZSA9IGV4dHJhY3Rfa2V5Q29kZShlbnYsIGFyZ3NbMV0pOworCisgICAgaWYgKGVudi0+bm9uX2xvY2FsX2V4aXRfY2hlY2soZW52KSA9PSBlbWFjc19mdW5jYWxsX2V4aXRfcmV0dXJuKSB7CisgICAgICBzaXplX3QgY291bnQ7CisgICAgICBjaGFyICpzdW1tYXJ5ID0gYnJsYXBpX19nZXRQYXJhbWV0ZXJBbGxvYyhoYW5kbGUsCisgICAgICAgIHBhcmFtLCBrZXlDb2RlLCBCUkxBUElfUEFSQU1GX0dMT0JBTCwgJmNvdW50CisgICAgICApOworICAgICAgCisgICAgICBpZiAoc3VtbWFyeSkgeworICAgICAgICBlbWFjc192YWx1ZSByZXN1bHQgPSBlbnYtPm1ha2Vfc3RyaW5nKGVudiwgc3VtbWFyeSwgY291bnQpOworCisgICAgICAgIGZyZWUoc3VtbWFyeSk7CisgICAgICAgIAorICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgfQorCisgICAgICBlcnJvcihlbnYpOworICAgIH0KKyAgfQorICAKKyAgcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBlbWFjc192YWx1ZQorZ2V0Q29tbWFuZEtleWNvZGVTdW1tYXJ5KAorICBlbWFjc19lbnYgKmVudiwgcHRyZGlmZl90IG5hcmdzLCBlbWFjc192YWx1ZSAqYXJncywgdm9pZCAqZGF0YQorKSB7CisgIHJldHVybiBnZXRLZXljb2RlU3VtbWFyeShlbnYsIG5hcmdzLCBhcmdzLCBkYXRhLAorICAgIEJSTEFQSV9QQVJBTV9DT01NQU5EX0tFWUNPREVfU1VNTUFSWQorICApOworfQorCitzdGF0aWMgZW1hY3NfdmFsdWUKK2dldERyaXZlcktleWNvZGVTdW1tYXJ5KAorICBlbWFjc19lbnYgKmVudiwgcHRyZGlmZl90IG5hcmdzLCBlbWFjc192YWx1ZSAqYXJncywgdm9pZCAqZGF0YQorKSB7CisgIHJldHVybiBnZXRLZXljb2RlU3VtbWFyeShlbnYsIG5hcmdzLCBhcmdzLCBkYXRhLAorICAgIEJSTEFQSV9QQVJBTV9EUklWRVJfS0VZQ09ERV9TVU1NQVJZCisgICk7Cit9CisKK3N0YXRpYyBlbWFjc192YWx1ZQorY2xvc2VDb25uZWN0aW9uKGVtYWNzX2VudiAqZW52LCBwdHJkaWZmX3QgbmFyZ3MsIGVtYWNzX3ZhbHVlICphcmdzLCB2b2lkICpkYXRhKSB7CisgIGJybGFwaV9oYW5kbGVfdCAqY29uc3QgaGFuZGxlID0gZW52LT5nZXRfdXNlcl9wdHIoZW52LCBhcmdzWzBdKTsKKworICBpZiAoaGFuZGxlKSB7CisgICAgYnJsYXBpX19jbG9zZUNvbm5lY3Rpb24oaGFuZGxlKTsKKworICAgIHJldHVybiBlbnYtPmludGVybihlbnYsICJuaWwiKTsKKyAgfQorCisgIHJldHVybiBOVUxMOworfQorCitpbnQKK2VtYWNzX21vZHVsZV9pbml0KHN0cnVjdCBlbWFjc19ydW50aW1lICpydW50aW1lKSB7CisgIGVtYWNzX2VudiAqY29uc3QgZW52ID0gcnVudGltZS0+Z2V0X2Vudmlyb25tZW50KHJ1bnRpbWUpOworCisgIGlmIChydW50aW1lLT5zaXplIDwgc2l6ZW9mKCpydW50aW1lKSkgcmV0dXJuIDE7CisgIGlmIChlbnYtPnNpemUgPCBzaXplb2YoKmVudikpIHJldHVybiAyOworCisgIHsgLyogKGRlZmluZS1lcnJvciAnYnJsYXBpLWVycm9yICJCcmxBUEkgRXJyb3IiKSAqLworICAgIGVtYWNzX3ZhbHVlIGFyZ3NbXSA9IHsKKyAgICAgIGVudi0+aW50ZXJuKGVudiwgZXJyb3JfbmFtZSksCisgICAgICBlbnYtPm1ha2Vfc3RyaW5nKGVudiwgZXJyb3JfbWVzc2FnZSwgc3RybGVuKGVycm9yX21lc3NhZ2UpKQorICAgIH07CisKKyAgICBlbnYtPmZ1bmNhbGwoZW52LCBlbnYtPmludGVybihlbnYsICJkZWZpbmUtZXJyb3IiKSwgQVJSQVlfQ09VTlQoYXJncyksIGFyZ3MpOworICB9CisKKyNkZWZpbmUgcmVnaXN0ZXJfZnVuY3Rpb24oZnVuYywgbWluYXJncywgbWF4YXJncywgbmFtZSwgZG9jKSAgICAgICAgICAgICAgICAgIFwKKyAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBlbWFjc192YWx1ZSBhcmdzW10gPSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIGVudi0+aW50ZXJuKGVudiwgImJybGFwaS0iIG5hbWUpLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIGVudi0+bWFrZV9mdW5jdGlvbihlbnYsIG1pbmFyZ3MsIG1heGFyZ3MsIGZ1bmMsIGRvYywgTlVMTCkgICAgICAgICAgICAgIFwKKyAgICB9OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBlbnYtPmZ1bmNhbGwoZW52LCBlbnYtPmludGVybihlbnYsICJkZWZhbGlhcyIpLCBBUlJBWV9DT1VOVChhcmdzKSwgYXJncyk7IFwKKyAgfQorCisgIHJlZ2lzdGVyX2Z1bmN0aW9uKGdldExpYnJhcnlWZXJzaW9uLCAwLCAwLCAiZ2V0LWxpYnJhcnktdmVyc2lvbiIsCisgICAgIkdldCB0aGUgdmVyc2lvbiBvZiBCcmxBUEkuIgorICApCisgIHJlZ2lzdGVyX2Z1bmN0aW9uKG9wZW5Db25uZWN0aW9uLCAwLCAyLCAib3Blbi1jb25uZWN0aW9uIiwKKyAgICAiT3BlbiBhIG5ldyBjb25uZWN0aW9uIHRvIEJSTFRUWS4iCisgICAgIlxuXG5IT1NUIGlzIGEgc3RyaW5nIG9mIHRoZSBmb3JtIFwiaG9zdDowXCIgd2hlcmUgdGhlIG51bWJlciBhZnRlciB0aGUgY29sb24iCisgICAgIlxuc3BlY2lmaWVzIHRoZSBpbnN0YW5jZSBvZiBCUkxUVFkgb24gdGhlIGdpdmVuIGhvc3QuIgorICAgICJcblxuSWYgQVVUSCBpcyBub24tbmlsLCBzcGVjaWZpZXMgdGhlIHBhdGggdG8gdGhlIHNlY3JldCBrZXkuIgorICAgICJcblxuQWxzbyBzZWUgYGJybGFwaS1jbG9zZS1jb25uZWN0aW9uJy4iCisgICAgIlxuXG4oZm4gJm9wdGlvbmFsIEhPU1QgQVVUSCkiCisgICkKKyAgcmVnaXN0ZXJfZnVuY3Rpb24oZ2V0RHJpdmVyTmFtZSwgMSwgMSwgImdldC1kcml2ZXItbmFtZSIsCisgICAgIkdldCB0aGUgY29tcGxldGUgbmFtZSBvZiB0aGUgZHJpdmVyIHVzZWQgYnkgQlJMVFRZLiIKKyAgICAiXG5cbihmbiBDT05ORUNUSU9OKSIKKyAgKQorICByZWdpc3Rlcl9mdW5jdGlvbihnZXRNb2RlbElkZW50aWZpZXIsIDEsIDEsICJnZXQtbW9kZWwtaWRlbnRpZmllciIsCisgICAgIkdldCBtb2RlbCBpZGVudGlmaWVyLiIKKyAgICAiXG5cbihmbiBDT05ORUNUSU9OKSIKKyAgKQorICByZWdpc3Rlcl9mdW5jdGlvbihnZXREaXNwbGF5U2l6ZSwgMSwgMSwgImdldC1kaXNwbGF5LXNpemUiLAorICAgICJHZXQgdGhlIHNpemUgb2YgdGhlIGJyYWlsbGUgZGlzcGxheSByZWFjaGFibGUgdmlhIENPTk5FQ1RJT04uIgorICAgICJcblxuUmV0dXJucyBhIGBjb25zJyB3aGVyZSBgY2FyJyBpcyB0aGUgeCBkaW1lbnNpb24gYW5kIGBjZHInIHRoZSB5IGRpbWVuc2lvbi4iCisgICAgIlxuXG4oZm4gQ09OTkVDVElPTikiCisgICkKKyAgcmVnaXN0ZXJfZnVuY3Rpb24oZW50ZXJUdHlNb2RlLCAxLCAzLCAiZW50ZXItdHR5LW1vZGUiLAorICAgICJFbnRlciBUVFkgbW9kZS4iCisgICAgIlxuXG4oZm4gQ09OTkVDVElPTiAmb3B0aW9uYWwgVFRZIERSSVZFUikiCisgICkKKyAgcmVnaXN0ZXJfZnVuY3Rpb24obGVhdmVUdHlNb2RlLCAxLCAxLCAibGVhdmUtdHR5LW1vZGUiLAorICAgICJMZWF2ZSBUVFkgbW9kZS4iCisgICAgIlxuXG4oZm4gQ09OTkVDVElPTikiCisgICkKKyAgcmVnaXN0ZXJfZnVuY3Rpb24od3JpdGVUZXh0LCAyLCAzLCAid3JpdGUtdGV4dCIsCisgICAgIldyaXRlIFNUUklORyB0byB0aGUgYnJhaWxsZSBkaXNwbGF5LiIKKyAgICAiXG5cbkNVUlNPUiBpcyBlaXRoZXIgYW4gaW50ZWdlciBvciB0aGUgc3ltYm9sIGBsZWF2ZScuIgorICAgICJcblxuKGZuIENPTk5FQ1RJT04gU1RSSU5HIENVUlNPUikiCisgICkKKyAgcmVnaXN0ZXJfZnVuY3Rpb24ocmVhZEtleSwgMSwgMiwgInJlYWQta2V5IiwKKyAgICAiUmVhZCBhIGtleXByZXNzIGZyb20gQ09OTkVDVElPTi4iCisgICAgIlxuXG5JZiBXQUlUIGlzIG5vbi1uaWwsIHdhaXQgdW50aWwgYSBrZXlwcmVzcyBhY3R1YWxseSBhcnJpdmVzLiIKKyAgICAiXG5cbihmbiBDT05ORUNUSU9OIFdBSVQpIgorICApCisgIHJlZ2lzdGVyX2Z1bmN0aW9uKHJlYWRLZXlXaXRoVGltZW91dCwgMiwgMiwgInJlYWQta2V5LXdpdGgtdGltZW91dCIsCisgICAgIlJlYWQgYSBrZXlwcmVzcyBmcm9tIENPTk5FQ1RJT04gd2FpdGluZyBNSUxJU0VDT05EUy4iCisgICAgIlxuXG4oZm4gQ09OTkVDVElPTiBNSUxJU0VDT05EUykiCisgICkKKyAgcmVnaXN0ZXJfZnVuY3Rpb24oYWNjZXB0S2V5cywgY2hhbmdlS2V5c01pbkFyaXR5LCBlbWFjc192YXJpYWRpY19mdW5jdGlvbiwgImFjY2VwdC1rZXlzIiwKKyAgICAiQXNrIHRoZSBzZXJ2ZXIgdG8gZ2l2ZSBLRVktQ09ERVMgdG8gdGhlIGFwcGxpY2F0aW9uLiIKKyAgICAiXG5cblRZUEUgc2hvdWxkIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHN5bWJvbHM6IgorICAgICJcbiAgJ2FsbCcgZm9yIGFsbCBrZXlzIgorICAgICJcbiAgJ3R5cGUnIGZvciBrZXlzIG9mIGEgZ2l2ZW4gdHlwZSIKKyAgICAiXG4gICdjb21tYW5kJyBmb3Iga2V5cyBvZiBhIGdpdmVuIGNvbW1hbmQgYmxvY2ssIGkuZS4gbWF0Y2hpbmcgdGhlIGtleSB0eXBlIGFuZCBjb21tYW5kIHBhcnRzIgorICAgICJcbiAgJ2tleScgZm9yIGEgZ2l2ZW4ga2V5IHdpdGggYW55IGZsYWdzIgorICAgICJcbiAgJ2NvZGUnIGZvciBhIGdpdmVuIGtleSBjb2RlIgorICAgICJcblxuKGZuIENPTk5FQ1RJT04gVFlQRSAmcmVzdCBLRVktQ09ERVMpIgorICApCisgIHJlZ2lzdGVyX2Z1bmN0aW9uKGlnbm9yZUtleXMsIGNoYW5nZUtleXNNaW5Bcml0eSwgZW1hY3NfdmFyaWFkaWNfZnVuY3Rpb24sICJpZ25vcmUta2V5cyIsCisgICAgIkFzayB0aGUgc2VydmVyIHRvIGhhbmRsZSBLRVktQ09ERVMgYnkgYnJsdHR5LiIKKyAgICAiXG5cblNlZSBgYnJsYXBpLWFjY2VwdC1rZXlzJyBmb3IgYSBkZXNjcmlwdGlvbiBvZiB0aGUgVFlQRSBhcmd1bWVudC4iCisgICAgIlxuXG4oZm4gQ09OTkVDVElPTiBUWVBFICZyZXN0IEtFWS1DT0RFUykiCisgICkKKyAgcmVnaXN0ZXJfZnVuY3Rpb24oZGVzY3JpYmVLZXlDb2RlLCAxLCAxLCAiZGVzY3JpYmUta2V5LWNvZGUiLAorICAgICJEZWNvZGUgS0VZLUNPREUgaW50byBpdHMgaW5kaXZpZHVhbCBzeW1ib2xpYyBjb21wb25lbnRzLiIKKyAgICAiXG5cbihmbiBLRVktQ09ERSkiCisgICkKKyAgcmVnaXN0ZXJfZnVuY3Rpb24oZ2V0RHJpdmVyQ29kZSwgMSwgMSwgImdldC1kcml2ZXItY29kZSIsCisgICAgIkdldCB0aGUgZHJpdmVyIGNvZGUgKGEgMiBsZXR0ZXIgc3RyaW5nKSBvZiBDT05ORUNUSU9OLiIKKyAgICAiXG5cbihmbiBDT05ORUNUSU9OKSIKKyAgKQorICByZWdpc3Rlcl9mdW5jdGlvbihnZXREcml2ZXJWZXJzaW9uLCAxLCAxLCAiZ2V0LWRyaXZlci12ZXJzaW9uIiwKKyAgICAiR2V0IHRoZSBkcml2ZXIgdmVyc2lvbihhIHN0cmluZykgb2YgQ09OTkVDVElPTi4iCisgICAgIlxuXG4oZm4gQ09OTkVDVElPTikiCisgICkKKyAgcmVnaXN0ZXJfZnVuY3Rpb24oZ2V0Q2xpcGJvYXJkQ29udGVudCwgMSwgMSwgImdldC1jbGlwYm9hcmQtY29udGVudCIsCisgICAgIkdldCB0aGUgY29udGVudCBvZiB0aGUgY2xpcGJvYXJkIG9mIENPTk5FQ1RJT04uIgorICAgICJcblxuKGZuIENPTk5FQ1RJT04pIgorICApCisgIHJlZ2lzdGVyX2Z1bmN0aW9uKHNldENsaXBib2FyZENvbnRlbnQsIDIsIDIsICJzZXQtY2xpcGJvYXJkLWNvbnRlbnQiLAorICAgICJTZXQgdGhlIGNvbnRlbnQgb2YgdGhlIGNsaXBib2FyZCBvZiBDT05ORUNUSU9OIHRvIFNUUklORy4iCisgICAgIlxuXG4oZm4gQ09OTkVDVElPTiBTVFJJTkcpIgorICApCisgIHJlZ2lzdGVyX2Z1bmN0aW9uKGdldENvbXB1dGVyQnJhaWxsZVRhYmxlLCAxLCAxLCAiZ2V0LWNvbXB1dGVyLWJyYWlsbGUtdGFibGUiLAorICAgICJHZXQgdGhlIGNvbXB1dGVyIGJyYWlsbGUgdGFibGUgb2YgQ09OTkVDVElPTi4iCisgICAgIlxuXG4oZm4gQ09OTkVDVElPTikiCisgICkKKyAgcmVnaXN0ZXJfZnVuY3Rpb24oc2V0Q29tcHV0ZXJCcmFpbGxlVGFibGUsIDIsIDIsICJzZXQtY29tcHV0ZXItYnJhaWxsZS10YWJsZSIsCisgICAgIlNldCB0aGUgY29tcHV0ZXIgYnJhaWxsZSB0YWJsZSBvZiBDT05ORUNUSU9OIHRvIFNUUklORy4iCisgICAgIlxuXG4oZm4gQ09OTkVDVElPTiBTVFJJTkcpIgorICApCisgIHJlZ2lzdGVyX2Z1bmN0aW9uKGdldExpdGVyYXJ5QnJhaWxsZVRhYmxlLCAxLCAxLCAiZ2V0LWxpdGVyYXJ5LWJyYWlsbGUtdGFibGUiLAorICAgICJHZXQgdGhlIGxpdGVyYXJ5IGJyYWlsbGUgdGFibGUgb2YgQ09OTkVDVElPTi4iCisgICAgIlxuXG4oZm4gQ09OTkVDVElPTikiCisgICkKKyAgcmVnaXN0ZXJfZnVuY3Rpb24oc2V0TGl0ZXJhcnlCcmFpbGxlVGFibGUsIDIsIDIsICJzZXQtbGl0ZXJhcnktYnJhaWxsZS10YWJsZSIsCisgICAgIlNldCB0aGUgbGl0ZXJhcnkgYnJhaWxsZSB0YWJsZSBvZiBDT05ORUNUSU9OIHRvIFNUUklORy4iCisgICAgIlxuXG4oZm4gQ09OTkVDVElPTiBTVFJJTkcpIgorICApCisgIHJlZ2lzdGVyX2Z1bmN0aW9uKGdldE1lc3NhZ2VMb2NhZSwgMSwgMSwgImdldC1tZXNzYWdlLWxvY2FsZSIsCisgICAgIkdldCB0aGUgbWVzc2FnZSBsb2NhbGUgb2YgQ09OTkVDVElPTi4iCisgICAgIlxuXG4oZm4gQ09OTkVDVElPTikiCisgICkKKyAgcmVnaXN0ZXJfZnVuY3Rpb24oc2V0TWVzc2FnZUxvY2FsZSwgMiwgMiwgInNldC1tZXNzYWdlLWxvY2FsZSIsCisgICAgIlNldCB0aGUgbWVzc2FnZSBsb2NhbGUgb2YgQ09OTkVDVElPTiB0byBTVFJJTkcuIgorICAgICJcblxuKGZuIENPTk5FQ1RJT04gU1RSSU5HKSIKKyAgKQorICByZWdpc3Rlcl9mdW5jdGlvbihnZXRCb3VuZENvbW1hbmRLZXljb2RlcywgMSwgMSwgImdldC1ib3VuZC1jb21tYW5kLWtleWNvZGVzIiwKKyAgICAiR2V0IGNvbW1hbmRzIGJvdW5kIGJ5IHRoZSBkcml2ZXIuIgorICAgICJcblxuKGZuIENPTk5FQ1RJT04pIgorICApCisgIHJlZ2lzdGVyX2Z1bmN0aW9uKGdldENvbW1hbmRLZXljb2RlTmFtZSwgMiwgMiwgImdldC1jb21tYW5kLWtleWNvZGUtbmFtZSIsCisgICAgIkdldCB0aGUgbmFtZSAoYSBzeW1ib2wpIG9mIHRoZSBnaXZlbiBjb21tYW5kIEtFWUNPREUuIgorICAgICJcblxuKGZuIEtFWUNPREUpIgorICApCisgIHJlZ2lzdGVyX2Z1bmN0aW9uKGdldENvbW1hbmRLZXljb2RlU3VtbWFyeSwgMiwgMiwgImdldC1jb21tYW5kLWtleWNvZGUtc3VtbWFyeSIsCisgICAgIkdldCBhIGRlc2NyaXB0aW9uIGZvciBhIGNvbW1hbmQgS0VZQ09ERS4iCisgICAgIlxuXG4oZm4gS0VZQ09ERSkiCisgICkKKyAgcmVnaXN0ZXJfZnVuY3Rpb24oZ2V0RGVmaW5lZERyaXZlcktleWNvZGVzLCAxLCAxLCAiZ2V0LWRlZmluZWQtZHJpdmVyLWtleWNvZGVzIiwKKyAgICAiR2V0IGEgbGlzdCBvZiBkZWZpbmVkIGRyaXZlciBzcGVjaWZpYyBrZXljb2Rlcy4iCisgICAgIlxuXG4oZm4gQ09OTkVDVElPTikiCisgICkKKyAgcmVnaXN0ZXJfZnVuY3Rpb24oZ2V0RHJpdmVyS2V5Y29kZU5hbWUsIDIsIDIsICJnZXQtZHJpdmVyLWtleWNvZGUtbmFtZSIsCisgICAgIkdldCB0aGUgbmFtZSAoYSBzeW1ib2wpIG9mIHRoZSBkcml2ZXIgc3BlY2lmaWMgS0VZQ09ERS4iCisgICAgIlxuXG4oZm4gS0VZQ09ERSkiCisgICkKKyAgcmVnaXN0ZXJfZnVuY3Rpb24oZ2V0RHJpdmVyS2V5Y29kZVN1bW1hcnksIDIsIDIsICJnZXQtZHJpdmVyLWtleWNvZGUtc3VtbWFyeSIsCisgICAgIkdldCBhIGRlc2NyaXB0aW9uIGZvciBhIGRyaXZlciBzcGVjaWZpYyBLRVlDT0RFLiIKKyAgICAiXG5cbihmbiBLRVlDT0RFKSIKKyAgKQorICByZWdpc3Rlcl9mdW5jdGlvbihjbG9zZUNvbm5lY3Rpb24sIDEsIDEsICJjbG9zZS1jb25uZWN0aW9uIiwKKyAgICAiQ2xvc2UgdGhlIGNvbm5lY3Rpb24uIgorICAgICJcblxuKGZuIENPTk5FQ1RJT04pIgorICApCisjdW5kZWYgcmVnaXN0ZXJfZnVuY3Rpb24KKworICByZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL0JpbmRpbmdzL0VtYWNzL2JpbmRpbmdzLm00IGIvQmluZGluZ3MvRW1hY3MvYmluZGluZ3MubTQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWE5M2NkMgotLS0gL2Rldi9udWxsCisrKyBiL0JpbmRpbmdzL0VtYWNzL2JpbmRpbmdzLm00CkBAIC0wLDAgKzEsMzggQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgbGliYnJsYXBpIC0gQSBsaWJyYXJ5IHByb3ZpZGluZyBhY2Nlc3MgdG8gYnJhaWxsZSB0ZXJtaW5hbHMgZm9yIGFwcGxpY2F0aW9ucy4KKyMKKyMgQ29weXJpZ2h0IChDKSAyMDA2LTIwMjMgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPgorIworIyBsaWJicmxhcGkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorIworIyBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisjIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyMgbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisjCisjIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK0FDX0RFRlVOKFtCUkxUVFlfRU1BQ1NfQklORElOR1NdLCBbZG5sCitFTUFDU19PSz1mYWxzZQorRU1BQ1M9IiIKKworQUNfQ0hFQ0tfSEVBREVSKFtlbWFjcy1tb2R1bGUuaF0sIFtkbmwKKyAgIEFDX1BBVEhfUFJPRyhbRU1BQ1NdLCBbZW1hY3NdKQorCisgICBpZiB0ZXN0IC1uICIke0VNQUNTfSIKKyAgIHRoZW4KKyAgICAgIEFDX01TR19OT1RJQ0UoW2VtYWNzIGVkaXRvcjogJHtFTUFDU31dKQorICAgICAgRU1BQ1NfT0s9dHJ1ZQorICAgZWxzZQorICAgICAgQUNfTVNHX1dBUk4oW2VtYWNzIGVkaXRvciBub3QgZm91bmRdKQorICAgICAgRU1BQ1M9IkVNQUNTX0VESVRPUl9OT1RfRk9VTkRfQllfQ09ORklHVVJFIgorICAgZmkKK10pCisKK0FDX1NVQlNUKFtFTUFDU19PS10pCitBQ19TVUJTVChbRU1BQ1NdKQorQUNfU1VCU1QoW0VNQUNTX1NVQkRJUkVDVE9SWV0sIFtFbWFjc10pCitdKQpkaWZmIC0tZ2l0IGEvQmluZGluZ3MvSmF2YS9BUElFcnJvci5qYXZhIGIvQmluZGluZ3MvSmF2YS9BUElFcnJvci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdiYjIyMTUKLS0tIC9kZXYvbnVsbAorKysgYi9CaW5kaW5ncy9KYXZhL0FQSUVycm9yLmphdmEKQEAgLTAsMCArMSw3MSBAQAorLyoKKyAqIGxpYmJybGFwaSAtIEEgbGlicmFyeSBwcm92aWRpbmcgYWNjZXNzIHRvIGJyYWlsbGUgdGVybWluYWxzIGZvciBhcHBsaWNhdGlvbnMuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMjMgYnkKKyAqICAgU2FtdWVsIFRoaWJhdWx0IDxTYW11ZWwuVGhpYmF1bHRAZW5zLWx5b24ub3JnPgorICogICBTw6liYXN0aWVuIEhpbmRlcmVyIDxTZWJhc3RpZW4uSGluZGVyZXJAZW5zLWx5b24ub3JnPgorICoKKyAqIGxpYmJybGFwaSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorICoKKyAqIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyAqLworCitwYWNrYWdlIG9yZy5hMTF5LmJybGFwaTsKKworcHVibGljIGNsYXNzIEFQSUVycm9yIGV4dGVuZHMgRXJyb3IgeworICBAT3ZlcnJpZGUKKyAgcHVibGljIG5hdGl2ZSBTdHJpbmcgdG9TdHJpbmcgKCk7CisKKyAgcHJpdmF0ZSBmaW5hbCBpbnQgYXBpRXJyb3I7CisgIHByaXZhdGUgZmluYWwgaW50IG9zRXJyb3I7CisgIHByaXZhdGUgZmluYWwgaW50IGdhaUVycm9yOworICBwcml2YXRlIGZpbmFsIFN0cmluZyBmdW5jdGlvbk5hbWU7CisKKyAgcHVibGljIEFQSUVycm9yIChpbnQgYXBpLCBpbnQgb3MsIGludCBnYWksIFN0cmluZyBmdW5jdGlvbikgeworICAgIGFwaUVycm9yID0gYXBpOworICAgIG9zRXJyb3IgPSBvczsKKyAgICBnYWlFcnJvciA9IGdhaTsKKyAgICBmdW5jdGlvbk5hbWUgPSBmdW5jdGlvbjsKKyAgfQorCisgIHB1YmxpYyBmaW5hbCBpbnQgZ2V0QXBpRXJyb3IgKCkgeworICAgIHJldHVybiBhcGlFcnJvcjsKKyAgfQorCisgIHB1YmxpYyBmaW5hbCBpbnQgZ2V0T3NFcnJvciAoKSB7CisgICAgcmV0dXJuIG9zRXJyb3I7CisgIH0KKworICBwdWJsaWMgZmluYWwgaW50IGdldEdhaUVycm9yICgpIHsKKyAgICByZXR1cm4gZ2FpRXJyb3I7CisgIH0KKworICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldEZ1bmN0aW9uTmFtZSAoKSB7CisgICAgcmV0dXJuIGZ1bmN0aW9uTmFtZTsKKyAgfQorCisgIHB1YmxpYyBmaW5hbCBzdGF0aWMgaW50IFNVQ0NFU1MgICAgICAgICAgICAgPSAgMDsgLyogU3VjY2VzcyAqLworICBwdWJsaWMgZmluYWwgc3RhdGljIGludCBOT01FTSAgICAgICAgICAgICAgID0gIDE7IC8qIE5vdCBlbm91Z2ggbWVtb3J5ICovCisgIHB1YmxpYyBmaW5hbCBzdGF0aWMgaW50IFRUWUJVU1kgICAgICAgICAgICAgPSAgMjsgLyogQWxyZWFkeSBhIGNvbm5lY3Rpb24gcnVubmluZyBpbiB0aGlzIHR0eSAqLworICBwdWJsaWMgZmluYWwgc3RhdGljIGludCBERVZJQ0VCVVNZICAgICAgICAgID0gIDM7IC8qIEFscmVhZHkgYSBjb25uZWN0aW9uIHVzaW5nIFJBVyBtb2RlICovCisgIHB1YmxpYyBmaW5hbCBzdGF0aWMgaW50IFVOS05PV05fSU5TVFJVQ1RJT04gPSAgNDsgLyogTm90IGltcGxlbWVudGVkIGluIHByb3RvY29sICovCisgIHB1YmxpYyBmaW5hbCBzdGF0aWMgaW50IElMTEVHQUxfSU5TVFJVQ1RJT04gPSAgNTsgLyogRm9yYmlkZW4gaW4gY3VycmVudCBtb2RlICovCisgIHB1YmxpYyBmaW5hbCBzdGF0aWMgaW50IElOVkFMSURfUEFSQU1FVEVSICAgPSAgNjsgLyogT3V0IG9mIHJhbmdlIG9yIGhhdmUgbm8gc2Vuc2UgKi8KKyAgcHVibGljIGZpbmFsIHN0YXRpYyBpbnQgSU5WQUxJRF9QQUNLRVQgICAgICA9ICA3OyAvKiBJbnZhbGlkIHNpemUgKi8KKyAgcHVibGljIGZpbmFsIHN0YXRpYyBpbnQgQ09OTlJFRlVTRUQgICAgICAgICA9ICA4OyAvKiBDb25uZWN0aW9uIHJlZnVzZWQgKi8KKyAgcHVibGljIGZpbmFsIHN0YXRpYyBpbnQgT1BOT1RTVVBQICAgICAgICAgICA9ICA5OyAvKiBPcGVyYXRpb24gbm90IHN1cHBvcnRlZCAqLworICBwdWJsaWMgZmluYWwgc3RhdGljIGludCBHQUlFUlIgICAgICAgICAgICAgID0gMTA7IC8qIEdldGFkZHJpbmZvIGVycm9yICovCisgIHB1YmxpYyBmaW5hbCBzdGF0aWMgaW50IExJQkNFUlIgICAgICAgICAgICAgPSAxMTsgLyogTGliYyBlcnJvciAqLworICBwdWJsaWMgZmluYWwgc3RhdGljIGludCBVTktOT1dOVFRZICAgICAgICAgID0gMTI7IC8qIENvdWxkbid0IGZpbmQgb3V0IHRoZSB0dHkgbnVtYmVyICovCisgIHB1YmxpYyBmaW5hbCBzdGF0aWMgaW50IFBST1RPQ09MX1ZFUlNJT04gICAgPSAxMzsgLyogQmFkIHByb3RvY29sIHZlcnNpb24gKi8KKyAgcHVibGljIGZpbmFsIHN0YXRpYyBpbnQgRU9GICAgICAgICAgICAgICAgICA9IDE0OyAvKiBVbmV4cGVjdGVkIGVuZCBvZiBmaWxlICovCisgIHB1YmxpYyBmaW5hbCBzdGF0aWMgaW50IEVNUFRZS0VZICAgICAgICAgICAgPSAxNTsgLyogVG9vIG1hbnkgbGV2ZWxzIG9mIHJlY3Vyc2lvbiAqLworICBwdWJsaWMgZmluYWwgc3RhdGljIGludCBEUklWRVJFUlJPUiAgICAgICAgID0gMTY7IC8qIFBhY2tldCByZXR1cm5lZCBieSBkcml2ZXIgdG9vIGxhcmdlICovCit9CmRpZmYgLS1naXQgYS9CaW5kaW5ncy9KYXZhL0FQSUV4Y2VwdGlvbi5qYXZhIGIvQmluZGluZ3MvSmF2YS9BUElFeGNlcHRpb24uamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OWI4ZDEyCi0tLSAvZGV2L251bGwKKysrIGIvQmluZGluZ3MvSmF2YS9BUElFeGNlcHRpb24uamF2YQpAQCAtMCwwICsxLDU4IEBACisvKgorICogbGliYnJsYXBpIC0gQSBsaWJyYXJ5IHByb3ZpZGluZyBhY2Nlc3MgdG8gYnJhaWxsZSB0ZXJtaW5hbHMgZm9yIGFwcGxpY2F0aW9ucy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAyMyBieQorICogICBTYW11ZWwgVGhpYmF1bHQgPFNhbXVlbC5UaGliYXVsdEBlbnMtbHlvbi5vcmc+CisgKiAgIFPDqWJhc3RpZW4gSGluZGVyZXIgPFNlYmFzdGllbi5IaW5kZXJlckBlbnMtbHlvbi5vcmc+CisgKgorICogbGliYnJsYXBpIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKK3BhY2thZ2Ugb3JnLmExMXkuYnJsYXBpOworCitwdWJsaWMgY2xhc3MgQVBJRXhjZXB0aW9uIGV4dGVuZHMgUnVudGltZUV4Y2VwdGlvbiB7CisgIEBPdmVycmlkZQorICBwdWJsaWMgbmF0aXZlIFN0cmluZyB0b1N0cmluZyAoKTsKKworICBwcml2YXRlIGZpbmFsIGxvbmcgY29ubmVjdGlvbkhhbmRsZTsKKyAgcHJpdmF0ZSBmaW5hbCBDb25uZWN0aW9uQmFzZSBjb25uZWN0aW9uOworCisgIHByaXZhdGUgZmluYWwgaW50IGVycm9yTnVtYmVyOworICBwcml2YXRlIGZpbmFsIGludCBwYWNrZXRUeXBlOworICBwcml2YXRlIGZpbmFsIGJ5dGVbXSBmYWlsZWRQYWNrZXQ7CisKKyAgcHVibGljIEFQSUV4Y2VwdGlvbiAobG9uZyBoYW5kbGUsIGludCBlcnJvciwgaW50IHR5cGUsIGJ5dGVbXSBwYWNrZXQpIHsKKyAgICBzdXBlcigpOworCisgICAgQ29ubmVjdGlvbi5zZXRVbnVzYWJsZShoYW5kbGUpOworICAgIGNvbm5lY3Rpb25IYW5kbGUgPSBoYW5kbGU7CisgICAgY29ubmVjdGlvbiA9IENvbm5lY3Rpb25CYXNlLmdldENvbm5lY3Rpb24oaGFuZGxlKTsKKworICAgIGVycm9yTnVtYmVyID0gZXJyb3I7CisgICAgcGFja2V0VHlwZSA9IHR5cGU7CisgICAgZmFpbGVkUGFja2V0ID0gcGFja2V0OworICB9CisKKyAgcHVibGljIGZpbmFsIGludCBnZXRFcnJvck51bWJlciAoKSB7CisgICAgcmV0dXJuIGVycm9yTnVtYmVyOworICB9CisKKyAgcHVibGljIGZpbmFsIGludCBnZXRQYWNrZXRUeXBlICgpIHsKKyAgICByZXR1cm4gcGFja2V0VHlwZTsKKyAgfQorCisgIHB1YmxpYyBmaW5hbCBieXRlW10gZ2V0RmFpbGVkUGFja2V0ICgpIHsKKyAgICByZXR1cm4gZmFpbGVkUGFja2V0OworICB9CisKKyAgcHVibGljIG5hdGl2ZSBzdGF0aWMgU3RyaW5nIGdldFBhY2tldFR5cGVOYW1lIChpbnQgdHlwZSk7Cit9CmRpZmYgLS1naXQgYS9CaW5kaW5ncy9KYXZhL0FQSVZlcnNpb24uamF2YSBiL0JpbmRpbmdzL0phdmEvQVBJVmVyc2lvbi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVlMTFiMTAKLS0tIC9kZXYvbnVsbAorKysgYi9CaW5kaW5ncy9KYXZhL0FQSVZlcnNpb24uamF2YQpAQCAtMCwwICsxLDM1IEBACisvKgorICogbGliYnJsYXBpIC0gQSBsaWJyYXJ5IHByb3ZpZGluZyBhY2Nlc3MgdG8gYnJhaWxsZSB0ZXJtaW5hbHMgZm9yIGFwcGxpY2F0aW9ucy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAyMyBieQorICogICBTYW11ZWwgVGhpYmF1bHQgPFNhbXVlbC5UaGliYXVsdEBlbnMtbHlvbi5vcmc+CisgKiAgIFPDqWJhc3RpZW4gSGluZGVyZXIgPFNlYmFzdGllbi5IaW5kZXJlckBlbnMtbHlvbi5vcmc+CisgKgorICogbGliYnJsYXBpIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKK3BhY2thZ2Ugb3JnLmExMXkuYnJsYXBpOworCitwdWJsaWMgYWJzdHJhY3QgY2xhc3MgQVBJVmVyc2lvbiBleHRlbmRzIE5hdGl2ZUNvbXBvbmVudCB7CisgIHByaXZhdGUgQVBJVmVyc2lvbiAoKSB7CisgICAgc3VwZXIoKTsKKyAgfQorCisgIHByaXZhdGUgbmF0aXZlIHN0YXRpYyBpbnQgZ2V0TWFqb3IgKCk7CisgIHB1YmxpYyBmaW5hbCBzdGF0aWMgaW50IE1BSk9SID0gZ2V0TWFqb3IoKTsKKworICBwcml2YXRlIG5hdGl2ZSBzdGF0aWMgaW50IGdldE1pbm9yICgpOworICBwdWJsaWMgZmluYWwgc3RhdGljIGludCBNSU5PUiA9IGdldE1pbm9yKCk7CisKKyAgcHJpdmF0ZSBuYXRpdmUgc3RhdGljIGludCBnZXRSZXZpc2lvbiAoKTsKKyAgcHVibGljIGZpbmFsIHN0YXRpYyBpbnQgUkVWSVNJT04gPSBnZXRSZXZpc2lvbigpOworfQpkaWZmIC0tZ2l0IGEvQmluZGluZ3MvSmF2YS9BdXRoZW50aWNhdGlvbkV4Y2VwdGlvbi5qYXZhIGIvQmluZGluZ3MvSmF2YS9BdXRoZW50aWNhdGlvbkV4Y2VwdGlvbi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg3NTY5ODQKLS0tIC9kZXYvbnVsbAorKysgYi9CaW5kaW5ncy9KYXZhL0F1dGhlbnRpY2F0aW9uRXhjZXB0aW9uLmphdmEKQEAgLTAsMCArMSwzMyBAQAorLyoKKyAqIGxpYmJybGFwaSAtIEEgbGlicmFyeSBwcm92aWRpbmcgYWNjZXNzIHRvIGJyYWlsbGUgdGVybWluYWxzIGZvciBhcHBsaWNhdGlvbnMuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMjMgYnkKKyAqICAgU2FtdWVsIFRoaWJhdWx0IDxTYW11ZWwuVGhpYmF1bHRAZW5zLWx5b24ub3JnPgorICogICBTw6liYXN0aWVuIEhpbmRlcmVyIDxTZWJhc3RpZW4uSGluZGVyZXJAZW5zLWx5b24ub3JnPgorICoKKyAqIGxpYmJybGFwaSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorICoKKyAqIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyAqLworCitwYWNrYWdlIG9yZy5hMTF5LmJybGFwaTsKKworcHVibGljIGNsYXNzIEF1dGhlbnRpY2F0aW9uRXhjZXB0aW9uIGV4dGVuZHMgQ29ubmVjdEV4Y2VwdGlvbiB7CisgIHByaXZhdGUgZmluYWwgU3RyaW5nIGF1dGhlbnRpY2F0aW9uU2NoZW1lOworCisgIHB1YmxpYyBBdXRoZW50aWNhdGlvbkV4Y2VwdGlvbiAoU3RyaW5nIHNjaGVtZSkgeworICAgIHN1cGVyKCJhdXRoZW50aWNhdGlvbiBmYWlsZWQ6ICVzIiwgc2NoZW1lKTsKKyAgICBhdXRoZW50aWNhdGlvblNjaGVtZSA9IHNjaGVtZTsKKyAgfQorCisgIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0U2NoZW1lICgpIHsKKyAgICByZXR1cm4gYXV0aGVudGljYXRpb25TY2hlbWU7CisgIH0KK30KZGlmZiAtLWdpdCBhL0JpbmRpbmdzL0phdmEvQml0TWFzay5qYXZhIGIvQmluZGluZ3MvSmF2YS9CaXRNYXNrLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjkwYzM0OQotLS0gL2Rldi9udWxsCisrKyBiL0JpbmRpbmdzL0phdmEvQml0TWFzay5qYXZhCkBAIC0wLDAgKzEsOTAgQEAKKy8qCisgKiBsaWJicmxhcGkgLSBBIGxpYnJhcnkgcHJvdmlkaW5nIGFjY2VzcyB0byBicmFpbGxlIHRlcm1pbmFscyBmb3IgYXBwbGljYXRpb25zLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNi0yMDIzIGJ5CisgKiAgIFNhbXVlbCBUaGliYXVsdCA8U2FtdWVsLlRoaWJhdWx0QGVucy1seW9uLm9yZz4KKyAqICAgU8OpYmFzdGllbiBIaW5kZXJlciA8U2ViYXN0aWVuLkhpbmRlcmVyQGVucy1seW9uLm9yZz4KKyAqCisgKiBsaWJicmxhcGkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorICoKKyAqIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyAqCisgKiBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisgKi8KKworcGFja2FnZSBvcmcuYTExeS5icmxhcGk7CisKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlzOworCitwdWJsaWMgY2xhc3MgQml0TWFzayBleHRlbmRzIENvbXBvbmVudCB7CisgIHByaXZhdGUgZmluYWwgc3RhdGljIGludCBCWVRFX1NJWkUgPSBCeXRlLlNJWkU7CisKKyAgcHJpdmF0ZSBmaW5hbCBieXRlW10gbWFza0J5dGVzOworICBwcml2YXRlIGZpbmFsIGludCBtYXNrU2l6ZTsKKworICBwdWJsaWMgQml0TWFzayAoYnl0ZVtdIGJ5dGVzKSB7CisgICAgbWFza0J5dGVzID0gYnl0ZXM7CisgICAgbWFza1NpemUgPSBtYXNrQnl0ZXMubGVuZ3RoICogQllURV9TSVpFOworICB9CisKKyAgcHVibGljIGludCBnZXRTaXplICgpIHsKKyAgICByZXR1cm4gbWFza1NpemU7CisgIH0KKworICBwdWJsaWMgYm9vbGVhbiBpc1NldCAoaW50IGluZGV4KSB7CisgICAgaWYgKGluZGV4IDwgMCkgcmV0dXJuIGZhbHNlOworICAgIGlmIChpbmRleCA+PSBtYXNrU2l6ZSkgcmV0dXJuIGZhbHNlOworCisgICAgaW50IGJpdCA9IDEgPDwgKGluZGV4ICUgQllURV9TSVpFKTsKKyAgICBpbmRleCAvPSBCWVRFX1NJWkU7CisgICAgcmV0dXJuIChtYXNrQnl0ZXNbaW5kZXhdICYgYml0KSAhPSAwOworICB9CisKKyAgcHJpdmF0ZSBpbnRbXSBiaXROdW1iZXJzID0gbnVsbDsKKworICBwcml2YXRlIGZpbmFsIGludFtdIG5ld0JpdE51bWJlcnMgKCkgeworICAgIGludCBzaXplID0gZ2V0U2l6ZSgpOworICAgIGludFtdIGJ1ZmZlciA9IG5ldyBpbnRbc2l6ZV07CisgICAgaW50IGNvdW50ID0gMDsKKyAgICBpbnQgc3RhcnQgPSAwOworCisgICAgZm9yIChpbnQgYml0cyA6IG1hc2tCeXRlcykgeworICAgICAgaWYgKChiaXRzICY9IEJZVEVfTUFTSykgIT0gMCkgeworICAgICAgICBpbnQgYml0ID0gc3RhcnQ7CisKKyAgICAgICAgd2hpbGUgKHRydWUpIHsKKyAgICAgICAgICBpZiAoKGJpdHMgJiAxKSAhPSAwKSBidWZmZXJbY291bnQrK10gPSBiaXQ7CisgICAgICAgICAgaWYgKChiaXRzID4+PSAxKSA9PSAwKSBicmVhazsKKyAgICAgICAgICBiaXQgKz0gMTsKKyAgICAgICAgfQorICAgICAgfQorCisgICAgICBzdGFydCArPSBCWVRFX1NJWkU7CisgICAgfQorCisgICAgaW50W10gcmVzdWx0ID0gbmV3IGludFtjb3VudF07CisgICAgU3lzdGVtLmFycmF5Y29weShidWZmZXIsIDAsIHJlc3VsdCwgMCwgY291bnQpOworICAgIHJldHVybiByZXN1bHQ7CisgIH0KKworICBwdWJsaWMgZmluYWwgaW50W10gZ2V0Qml0TnVtYmVycyAoKSB7CisgICAgc3luY2hyb25pemVkICh0aGlzKSB7CisgICAgICBpZiAoYml0TnVtYmVycyA9PSBudWxsKSBiaXROdW1iZXJzID0gbmV3Qml0TnVtYmVycygpOworICAgIH0KKworICAgIGludCBjb3VudCA9IGJpdE51bWJlcnMubGVuZ3RoOworICAgIGludFtdIHJlc3VsdCA9IG5ldyBpbnRbY291bnRdOworICAgIFN5c3RlbS5hcnJheWNvcHkoYml0TnVtYmVycywgMCwgcmVzdWx0LCAwLCBjb3VudCk7CisgICAgcmV0dXJuIHJlc3VsdDsKKyAgfQorCisgIEBPdmVycmlkZQorICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nICgpIHsKKyAgICByZXR1cm4gQXJyYXlzLnRvU3RyaW5nKGdldEJpdE51bWJlcnMoKSk7CisgIH0KK30KZGlmZiAtLWdpdCBhL0JpbmRpbmdzL0phdmEvQ2xpZW50LmphdmEgYi9CaW5kaW5ncy9KYXZhL0NsaWVudC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEyMDRiZmMKLS0tIC9kZXYvbnVsbAorKysgYi9CaW5kaW5ncy9KYXZhL0NsaWVudC5qYXZhCkBAIC0wLDAgKzEsMjI2IEBACisvKgorICogbGliYnJsYXBpIC0gQSBsaWJyYXJ5IHByb3ZpZGluZyBhY2Nlc3MgdG8gYnJhaWxsZSB0ZXJtaW5hbHMgZm9yIGFwcGxpY2F0aW9ucy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAyMyBieQorICogICBTYW11ZWwgVGhpYmF1bHQgPFNhbXVlbC5UaGliYXVsdEBlbnMtbHlvbi5vcmc+CisgKiAgIFPDqWJhc3RpZW4gSGluZGVyZXIgPFNlYmFzdGllbi5IaW5kZXJlckBlbnMtbHlvbi5vcmc+CisgKgorICogbGliYnJsYXBpIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKK3BhY2thZ2Ugb3JnLmExMXkuYnJsYXBpOworCitpbXBvcnQgamF2YS5pby5JbnRlcnJ1cHRlZElPRXhjZXB0aW9uOworCitwdWJsaWMgYWJzdHJhY3QgY2xhc3MgQ2xpZW50IGV4dGVuZHMgUHJvZ3JhbSB7CisgIHByb3RlY3RlZCBhYnN0cmFjdCB2b2lkIHJ1bkNsaWVudCAoQ29ubmVjdGlvbiBjb25uZWN0aW9uKQorICAgICAgICAgICAgdGhyb3dzIFByb2dyYW1FeGNlcHRpb247CisKKyAgcHJpdmF0ZSBmaW5hbCBDb25uZWN0aW9uU2V0dGluZ3MgY29ubmVjdGlvblNldHRpbmdzID0gbmV3IENvbm5lY3Rpb25TZXR0aW5ncygpOworCisgIHB1YmxpYyBmaW5hbCBDbGllbnQgc2V0U2VydmVySG9zdCAoU3RyaW5nIGhvc3QpIHRocm93cyBTeW50YXhFeGNlcHRpb24geworICAgIHRyeSB7CisgICAgICBjb25uZWN0aW9uU2V0dGluZ3Muc2V0U2VydmVySG9zdChob3N0KTsKKyAgICB9IGNhdGNoIChJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gZXhjZXB0aW9uKSB7CisgICAgICB0aHJvdyBuZXcgU3ludGF4RXhjZXB0aW9uKGV4Y2VwdGlvbi5nZXRNZXNzYWdlKCkpOworICAgIH0KKworICAgIHJldHVybiB0aGlzOworICB9CisKKyAgcHVibGljIGZpbmFsIENsaWVudCBzZXRBdXRoZW50aWNhdGlvblNjaGVtZSAoU3RyaW5nIHNjaGVtZSkgdGhyb3dzIFN5bnRheEV4Y2VwdGlvbiB7CisgICAgdHJ5IHsKKyAgICAgIGNvbm5lY3Rpb25TZXR0aW5ncy5zZXRBdXRoZW50aWNhdGlvblNjaGVtZShzY2hlbWUpOworICAgIH0gY2F0Y2ggKElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiBleGNlcHRpb24pIHsKKyAgICAgIHRocm93IG5ldyBTeW50YXhFeGNlcHRpb24oZXhjZXB0aW9uLmdldE1lc3NhZ2UoKSk7CisgICAgfQorCisgICAgcmV0dXJuIHRoaXM7CisgIH0KKworICBwcm90ZWN0ZWQgQ2xpZW50IChTdHJpbmcuLi4gYXJndW1lbnRzKSB7CisgICAgc3VwZXIoYXJndW1lbnRzKTsKKworICAgIGFkZE9wdGlvbigic2VydmVyIiwKKyAgICAgIChvcGVyYW5kcykgLT4geworICAgICAgICBzZXRTZXJ2ZXJIb3N0KG9wZXJhbmRzWzBdKTsKKyAgICAgIH0sCisgICAgICAiaG9zdCBzcGVjaWZpY2F0aW9uIgorICAgICk7CisKKyAgICBhZGRPcHRpb24oImF1dGhlbnRpY2F0aW9uIiwKKyAgICAgIChvcGVyYW5kcykgLT4geworICAgICAgICBzZXRBdXRoZW50aWNhdGlvblNjaGVtZShvcGVyYW5kc1swXSk7CisgICAgICB9LAorICAgICAgInNjaGVtZSIKKyAgICApOworICB9CisKKyAgQE92ZXJyaWRlCisgIHByb3RlY3RlZCB2b2lkIGV4dGVuZFVzYWdlU3VtbWFyeSAoU3RyaW5nQnVpbGRlciB1c2FnZSkgeworICAgIHN1cGVyLmV4dGVuZFVzYWdlU3VtbWFyeSh1c2FnZSk7CisKKyAgICB1c2FnZS5hcHBlbmQoJ1xuJykKKyAgICAgICAgIC5hcHBlbmQoIlRoZSBkZWZhdWx0IHNlcnZlciBob3N0IGlzICIpCisgICAgICAgICAuYXBwZW5kKENvbm5lY3Rpb25TZXR0aW5ncy5ERUZBVUxUX1NFUlZFUl9IT1NUKQorICAgICAgICAgLmFwcGVuZCgiLiAiKQorCisgICAgICAgICAuYXBwZW5kKCJUaGUgZm9ybWF0IG9mIGEgaG9zdCBzcGVjaWZpY2F0aW9uIGlzICIpCisgICAgICAgICAuYXBwZW5kKFVTQUdFX09QVElPTkFMX0JFR0lOKQorICAgICAgICAgLmFwcGVuZCgiaG9zdCIpCisgICAgICAgICAuYXBwZW5kKFVTQUdFX09QVElPTkFMX0VORCkKKyAgICAgICAgIC5hcHBlbmQoVVNBR0VfT1BUSU9OQUxfQkVHSU4pCisgICAgICAgICAuYXBwZW5kKENvbm5lY3Rpb25TZXR0aW5ncy5IT1NUX1BPUlRfU0VQQVJBVE9SKS5hcHBlbmQoInBvcnQiKQorICAgICAgICAgLmFwcGVuZChVU0FHRV9PUFRJT05BTF9FTkQpCisgICAgICAgICAuYXBwZW5kKCIuICIpCisKKyAgICAgICAgIC5hcHBlbmQoIlRoZSBob3N0IGNvbXBvbmVudCBtYXkgYmUgZWl0aGVyIGEgaG9zdCBuYW1lIG9yIGFuIElQVjQgYWRkcmVzcyIpCisgICAgICAgICAuYXBwZW5kKCIgLSBpZiBub3Qgc3BlY2lmaWVkLCBhIGxvY2FsIHNvY2tldCBpcyB1c2VkLiAiKQorCisgICAgICAgICAuYXBwZW5kKCJUaGUgcG9ydCBjb21wb25lbnQgbXVzdCBiZSBhbiBpbnRlZ2VyIHdpdGhpbiB0aGUgcmFuZ2UgIikKKyAgICAgICAgIC5hcHBlbmQoQ29ubmVjdGlvblNldHRpbmdzLk1JTklNVU1fUE9SVF9OVU1CRVIpCisgICAgICAgICAuYXBwZW5kKCIgdGhyb3VnaCAiKQorICAgICAgICAgLmFwcGVuZChDb25uZWN0aW9uU2V0dGluZ3MuTUFYSU1VTV9QT1JUX05VTUJFUikKKyAgICAgICAgIC5hcHBlbmQoIiAtIGlmIG5vdCBzcGVjaWZpZWQsICIpCisgICAgICAgICAuYXBwZW5kKENvbm5lY3Rpb25TZXR0aW5ncy5ERUZBVUxUX1BPUlRfTlVNQkVSKQorICAgICAgICAgLmFwcGVuZCgiIGlzIGFzc3VtZWQuICIpCisgICAgICAgICA7CisKKyAgICB1c2FnZS5hcHBlbmQoJ1xuJykKKyAgICAgICAgIC5hcHBlbmQoIlRoZSBkZWZhdWx0IGF1dGhlbnRpY2F0aW9uIHNjaGVtZSBpcyAiKQorICAgICAgICAgLmFwcGVuZChDb25uZWN0aW9uU2V0dGluZ3MuREVGQVVMVF9BVVRIRU5USUNBVElPTl9TQ0hFTUUpCisgICAgICAgICAuYXBwZW5kKCIuICIpCisKKyAgICAgICAgIC5hcHBlbmQoIlRoZSBmb3JtYXQgb2YgYSBzY2hlbWUgc3BlY2lmaWNhdGlvbiBpcyBuYW1lIikKKyAgICAgICAgIC5hcHBlbmQoVVNBR0VfT1BUSU9OQUxfQkVHSU4pCisgICAgICAgICAuYXBwZW5kKENvbm5lY3Rpb25TZXR0aW5ncy5BVVRIRU5USUNBVElPTl9PUEVSQU5EX1BSRUZJWCkuYXBwZW5kKCJvcGVyYW5kIikKKyAgICAgICAgIC5hcHBlbmQoVVNBR0VfT1BUSU9OQUxfRU5EKQorICAgICAgICAgLmFwcGVuZCgiLiAiKQorCisgICAgICAgICAuYXBwZW5kKCJNb3JlIHRoYW4gb25lIHNjaGVtZSwgc2VwYXJhdGVkIGJ5ICIpCisgICAgICAgICAuYXBwZW5kKENvbm5lY3Rpb25TZXR0aW5ncy5BVVRIRU5USUNBVElPTl9TQ0hFTUVfU0VQQVJBVE9SKQorICAgICAgICAgLmFwcGVuZCgiLCBtYXkgYmUgc3BlY2lmaWVkLiAiKQorCisgICAgICAgICAuYXBwZW5kKCJUaGUgZm9sbG93aW5nIHNjaGVtZXMgYXJlIHN1cHBvcnRlZDoiKQorICAgICAgICAgLmFwcGVuZCgiXG4gICIpLmFwcGVuZChDb25uZWN0aW9uU2V0dGluZ3MuQVVUSEVOVElDQVRJT05fU0NIRU1FX0tFWUZJTEUpCisgICAgICAgICAuYXBwZW5kKENvbm5lY3Rpb25TZXR0aW5ncy5BVVRIRU5USUNBVElPTl9PUEVSQU5EX1BSRUZJWCkuYXBwZW5kKCJwYXRoIikKKyAgICAgICAgIC5hcHBlbmQoIlxuICAiKS5hcHBlbmQoQ29ubmVjdGlvblNldHRpbmdzLkFVVEhFTlRJQ0FUSU9OX1NDSEVNRV9OT05FKQorICAgICAgICAgOworICB9CisKKyAgcHJvdGVjdGVkIGludGVyZmFjZSBDbGllbnRUYXNrIHsKKyAgICBwdWJsaWMgdm9pZCBydW4gKENvbm5lY3Rpb24gY29ubmVjdGlvbikgdGhyb3dzIFByb2dyYW1FeGNlcHRpb247CisgIH0KKworICBwcml2YXRlIGZpbmFsIENsaWVudCBjb25uZWN0IChDbGllbnRUYXNrIHRhc2spIHRocm93cyBQcm9ncmFtRXhjZXB0aW9uIHsKKyAgICB0cnkgeworICAgICAgQ29ubmVjdGlvbiBjb25uZWN0aW9uID0gbmV3IENvbm5lY3Rpb24oY29ubmVjdGlvblNldHRpbmdzKTsKKworICAgICAgdHJ5IHsKKyAgICAgICAgdGFzay5ydW4oY29ubmVjdGlvbik7CisgICAgICB9IGZpbmFsbHkgeworICAgICAgICBjb25uZWN0aW9uLmNsb3NlKCk7CisgICAgICAgIGNvbm5lY3Rpb24gPSBudWxsOworICAgICAgfQorICAgIH0gY2F0Y2ggKExvc3RDb25uZWN0aW9uRXhjZXB0aW9uIGV4Y2VwdGlvbikgeworICAgICAgdGhyb3cgbmV3IEV4dGVybmFsRXhjZXB0aW9uKCJjb25uZWN0aW9uIGxvc3QiKTsKKyAgICB9IGNhdGNoIChBUElFcnJvciBlcnJvcikgeworICAgICAgdGhyb3cgbmV3IEV4dGVybmFsRXhjZXB0aW9uKCgiQVBJIGVycm9yOiAiICsgZXJyb3IpKTsKKyAgICB9IGNhdGNoIChBUElFeGNlcHRpb24gZXhjZXB0aW9uKSB7CisgICAgICB0aHJvdyBuZXcgRXh0ZXJuYWxFeGNlcHRpb24oKCJBUEkgZXhjZXB0aW9uOiAiICsgZXhjZXB0aW9uKSk7CisgICAgfQorCisgICAgcmV0dXJuIHRoaXM7CisgIH0KKworICBwdWJsaWMgZmluYWwgYm9vbGVhbiBwYXVzZSAoQ29ubmVjdGlvbiBjb25uZWN0aW9uLCBpbnQgbWlsbGlzZWNvbmRzKSB7CisgICAgdHJ5IHsKKyAgICAgIGNvbm5lY3Rpb24ucGF1c2UobWlsbGlzZWNvbmRzKTsKKyAgICAgIHJldHVybiB0cnVlOworICAgIH0gY2F0Y2ggKEludGVycnVwdGVkSU9FeGNlcHRpb24gZXhjZXB0aW9uKSB7CisgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICB9CisKKyAgQE92ZXJyaWRlCisgIHByb3RlY3RlZCBmaW5hbCB2b2lkIHJ1blByb2dyYW0gKCkgdGhyb3dzIFByb2dyYW1FeGNlcHRpb24geworICAgIGNvbm5lY3QoCisgICAgICAoY29ubmVjdGlvbikgLT4geworICAgICAgICBydW5DbGllbnQoY29ubmVjdGlvbik7CisgICAgICB9CisgICAgKTsKKyAgfQorCisgIHByb3RlY3RlZCBmaW5hbCBQYXJhbWV0ZXIgZ2V0UGFyYW1ldGVyIChDb25uZWN0aW9uIGNvbm5lY3Rpb24sIFN0cmluZyBuYW1lKQorICAgICAgICAgICAgdGhyb3dzIFNlbWFudGljRXhjZXB0aW9uCisgIHsKKyAgICBQYXJhbWV0ZXIgcGFyYW1ldGVyID0gY29ubmVjdGlvbi5nZXRQYXJhbWV0ZXJzKCkuZ2V0KG5hbWUpOworICAgIGlmIChwYXJhbWV0ZXIgIT0gbnVsbCkgcmV0dXJuIHBhcmFtZXRlcjsKKyAgICB0aHJvdyBuZXcgU2VtYW50aWNFeGNlcHRpb24oInVua25vd24gcGFyYW1ldGVyOiAlcyIsIG5hbWUpOworICB9CisKKyAgcHJvdGVjdGVkIGludGVyZmFjZSBUdHlNb2RlVGFzayB7CisgICAgcHVibGljIHZvaWQgcnVuIChDb25uZWN0aW9uIGNvbm5lY3Rpb24pIHRocm93cyBQcm9ncmFtRXhjZXB0aW9uOworICB9CisKKyAgcHJvdGVjdGVkIGZpbmFsIENsaWVudCB0dHlNb2RlIChDb25uZWN0aW9uIGNvbm5lY3Rpb24sIFN0cmluZyBkcml2ZXIsIFR0eU1vZGVUYXNrIHRhc2ssIGludC4uLiBwYXRoKQorICAgICAgICAgICAgdGhyb3dzIFByb2dyYW1FeGNlcHRpb24KKyAgeworICAgIHRyeSB7CisgICAgICBjb25uZWN0aW9uLmVudGVyVHR5TW9kZVdpdGhQYXRoKGRyaXZlciwgcGF0aCk7CisKKyAgICAgIHRyeSB7CisgICAgICAgIHRhc2sucnVuKGNvbm5lY3Rpb24pOworICAgICAgfSBmaW5hbGx5IHsKKyAgICAgICAgaWYgKCFjb25uZWN0aW9uLmlzVW51c2FibGUoKSkgY29ubmVjdGlvbi5sZWF2ZVR0eU1vZGUoKTsKKyAgICAgIH0KKyAgICB9IGNhdGNoIChBUElFcnJvciBlcnJvcikgeworICAgICAgdGhyb3cgbmV3IFByb2dyYW1FeGNlcHRpb24oKCJ0dHkgbW9kZSBlcnJvcjogIiArIGVycm9yKSk7CisgICAgfQorCisgICAgcmV0dXJuIHRoaXM7CisgIH0KKworICBwcm90ZWN0ZWQgZmluYWwgQ2xpZW50IHR0eU1vZGUgKENvbm5lY3Rpb24gY29ubmVjdGlvbiwgYm9vbGVhbiBrZXlzLCBUdHlNb2RlVGFzayB0YXNrLCBpbnQuLi4gcGF0aCkKKyAgICAgICAgICAgIHRocm93cyBQcm9ncmFtRXhjZXB0aW9uCisgIHsKKyAgICByZXR1cm4gdHR5TW9kZShjb25uZWN0aW9uLCAoa2V5cz8gY29ubmVjdGlvbi5nZXREcml2ZXJOYW1lKCk6IG51bGwpLCB0YXNrLCBwYXRoKTsKKyAgfQorCisgIHByb3RlY3RlZCBpbnRlcmZhY2UgUmF3TW9kZVRhc2sgeworICAgIHB1YmxpYyB2b2lkIHJ1biAoQ29ubmVjdGlvbiBjb25uZWN0aW9uKSB0aHJvd3MgUHJvZ3JhbUV4Y2VwdGlvbjsKKyAgfQorCisgIHByb3RlY3RlZCBmaW5hbCBDbGllbnQgcmF3TW9kZSAoQ29ubmVjdGlvbiBjb25uZWN0aW9uLCBTdHJpbmcgZHJpdmVyLCBSYXdNb2RlVGFzayB0YXNrKQorICAgICAgICAgICAgdGhyb3dzIFByb2dyYW1FeGNlcHRpb24KKyAgeworICAgIHRyeSB7CisgICAgICBjb25uZWN0aW9uLmVudGVyUmF3TW9kZShkcml2ZXIpOworCisgICAgICB0cnkgeworICAgICAgICB0YXNrLnJ1bihjb25uZWN0aW9uKTsKKyAgICAgIH0gZmluYWxseSB7CisgICAgICAgIGlmICghY29ubmVjdGlvbi5pc1VudXNhYmxlKCkpIGNvbm5lY3Rpb24ubGVhdmVSYXdNb2RlKCk7CisgICAgICB9CisgICAgfSBjYXRjaCAoQVBJRXJyb3IgZXJyb3IpIHsKKyAgICAgIHRocm93IG5ldyBQcm9ncmFtRXhjZXB0aW9uKCgicmF3IG1vZGUgZXJyb3I6ICIgKyBlcnJvcikpOworICAgIH0KKworICAgIHJldHVybiB0aGlzOworICB9CisKKyAgcHJvdGVjdGVkIGZpbmFsIENsaWVudCByYXdNb2RlIChDb25uZWN0aW9uIGNvbm5lY3Rpb24sIFJhd01vZGVUYXNrIHRhc2spCisgICAgICAgICAgICB0aHJvd3MgUHJvZ3JhbUV4Y2VwdGlvbgorICB7CisgICAgcmV0dXJuIHJhd01vZGUoY29ubmVjdGlvbiwgY29ubmVjdGlvbi5nZXREcml2ZXJOYW1lKCksIHRhc2spOworICB9Cit9CmRpZmYgLS1naXQgYS9CaW5kaW5ncy9KYXZhL0NvbW1hbmRLZXljb2RlLmphdmEgYi9CaW5kaW5ncy9KYXZhL0NvbW1hbmRLZXljb2RlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2MwMjk5OAotLS0gL2Rldi9udWxsCisrKyBiL0JpbmRpbmdzL0phdmEvQ29tbWFuZEtleWNvZGUuamF2YQpAQCAtMCwwICsxLDgzIEBACisvKgorICogbGliYnJsYXBpIC0gQSBsaWJyYXJ5IHByb3ZpZGluZyBhY2Nlc3MgdG8gYnJhaWxsZSB0ZXJtaW5hbHMgZm9yIGFwcGxpY2F0aW9ucy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAyMyBieQorICogICBTYW11ZWwgVGhpYmF1bHQgPFNhbXVlbC5UaGliYXVsdEBlbnMtbHlvbi5vcmc+CisgKiAgIFPDqWJhc3RpZW4gSGluZGVyZXIgPFNlYmFzdGllbi5IaW5kZXJlckBlbnMtbHlvbi5vcmc+CisgKgorICogbGliYnJsYXBpIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKK3BhY2thZ2Ugb3JnLmExMXkuYnJsYXBpOworCitwdWJsaWMgY2xhc3MgQ29tbWFuZEtleWNvZGUgZXh0ZW5kcyBLZXljb2RlIHsKKyAgcHJpdmF0ZSBmaW5hbCBuYXRpdmUgdm9pZCBleHBhbmRLZXljb2RlIChsb25nIGNvZGUpOworICBwcml2YXRlIGludCB0eXBlVmFsdWU7CisgIHByaXZhdGUgaW50IGNvbW1hbmRWYWx1ZTsKKyAgcHJpdmF0ZSBpbnQgYXJndW1lbnRWYWx1ZTsKKyAgcHJpdmF0ZSBpbnQgZmxhZ3NWYWx1ZTsKKworICBwdWJsaWMgQ29tbWFuZEtleWNvZGUgKGxvbmcgY29kZSkgeworICAgIHN1cGVyKGNvZGUpOworICAgIGV4cGFuZEtleWNvZGUoY29kZSk7CisgIH0KKworICBwdWJsaWMgZmluYWwgaW50IGdldFR5cGUgKCkgeworICAgIHJldHVybiB0eXBlVmFsdWU7CisgIH0KKworICBwdWJsaWMgZmluYWwgaW50IGdldENvbW1hbmQgKCkgeworICAgIHJldHVybiBjb21tYW5kVmFsdWU7CisgIH0KKworICBwdWJsaWMgZmluYWwgaW50IGdldEFyZ3VtZW50ICgpIHsKKyAgICByZXR1cm4gYXJndW1lbnRWYWx1ZTsKKyAgfQorCisgIHB1YmxpYyBmaW5hbCBpbnQgZ2V0RmxhZ3MgKCkgeworICAgIHJldHVybiBmbGFnc1ZhbHVlOworICB9CisKKyAgcHJpdmF0ZSBmaW5hbCBuYXRpdmUgdm9pZCBkZXNjcmliZUtleWNvZGUgKGxvbmcgY29kZSk7CisgIHByaXZhdGUgU3RyaW5nIHR5cGVOYW1lID0gbnVsbDsKKyAgcHJpdmF0ZSBTdHJpbmcgY29tbWFuZE5hbWUgPSBudWxsOworICBwcml2YXRlIFN0cmluZ1tdIGZsYWdOYW1lcyA9IG51bGw7CisKKyAgcHJpdmF0ZSBmaW5hbCB2b2lkIGRlc2NyaWJlS2V5Y29kZSAoKSB7CisgICAgc3luY2hyb25pemVkICh0aGlzKSB7CisgICAgICBpZiAoZmxhZ05hbWVzID09IG51bGwpIGRlc2NyaWJlS2V5Y29kZShnZXRDb2RlKCkpOworICAgIH0KKyAgfQorCisgIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0VHlwZU5hbWUgKCkgeworICAgIGRlc2NyaWJlS2V5Y29kZSgpOworICAgIHJldHVybiB0eXBlTmFtZTsKKyAgfQorCisgIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0Q29tbWFuZE5hbWUgKCkgeworICAgIGRlc2NyaWJlS2V5Y29kZSgpOworICAgIHJldHVybiBjb21tYW5kTmFtZTsKKyAgfQorCisgIHB1YmxpYyBmaW5hbCBTdHJpbmdbXSBnZXRGbGFnTmFtZXMgKCkgeworICAgIGRlc2NyaWJlS2V5Y29kZSgpOworICAgIHJldHVybiBmbGFnTmFtZXM7CisgIH0KKworICBAT3ZlcnJpZGUKKyAgcHVibGljIFN0cmluZyB0b1N0cmluZyAoKSB7CisgICAgcmV0dXJuIFN0cmluZy5mb3JtYXQoCisgICAgICAiJXMgVHlwZTolMDhYIENtZDolMDRYIEFyZzolMDRYIEZsZzolMDRYIiwKKyAgICAgIEtleWNvZGUudG9TdHJpbmcoZ2V0Q29kZSgpKSwgZ2V0VHlwZSgpLCBnZXRDb21tYW5kKCksIGdldEFyZ3VtZW50KCksIGdldEZsYWdzKCkKKyAgICApOworICB9Cit9CmRpZmYgLS1naXQgYS9CaW5kaW5ncy9KYXZhL0NvbXBvbmVudC5qYXZhIGIvQmluZGluZ3MvSmF2YS9Db21wb25lbnQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZDZjZWRiCi0tLSAvZGV2L251bGwKKysrIGIvQmluZGluZ3MvSmF2YS9Db21wb25lbnQuamF2YQpAQCAtMCwwICsxLDU3IEBACisvKgorICogbGliYnJsYXBpIC0gQSBsaWJyYXJ5IHByb3ZpZGluZyBhY2Nlc3MgdG8gYnJhaWxsZSB0ZXJtaW5hbHMgZm9yIGFwcGxpY2F0aW9ucy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAyMyBieQorICogICBTYW11ZWwgVGhpYmF1bHQgPFNhbXVlbC5UaGliYXVsdEBlbnMtbHlvbi5vcmc+CisgKiAgIFPDqWJhc3RpZW4gSGluZGVyZXIgPFNlYmFzdGllbi5IaW5kZXJlckBlbnMtbHlvbi5vcmc+CisgKgorICogbGliYnJsYXBpIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKK3BhY2thZ2Ugb3JnLmExMXkuYnJsYXBpOworCitwdWJsaWMgYWJzdHJhY3QgY2xhc3MgQ29tcG9uZW50IHsKKyAgcHJvdGVjdGVkIENvbXBvbmVudCAoKSB7CisgIH0KKworICBwdWJsaWMgZmluYWwgc3RhdGljIGludCBCWVRFX01BU0sgPSAoMSA8PCBCeXRlLlNJWkUpIC0gMTsKKyAgcHVibGljIGZpbmFsIHN0YXRpYyBjaGFyIFVOSUNPREVfQlJBSUxMRV9ST1cgPSAwWDI4MDA7CisKKyAgcHVibGljIHN0YXRpYyBjaGFyIHRvVW5pY29kZUJyYWlsbGUgKGJ5dGUgZG90cykgeworICAgIGNoYXIgY2hhcmFjdGVyID0gVU5JQ09ERV9CUkFJTExFX1JPVzsKKyAgICBjaGFyYWN0ZXIgfD0gZG90cyAmIEJZVEVfTUFTSzsKKyAgICByZXR1cm4gY2hhcmFjdGVyOworICB9CisKKyAgcHVibGljIHN0YXRpYyBTdHJpbmcgdG9Vbmljb2RlQnJhaWxsZSAoYnl0ZVtdIGRvdHMpIHsKKyAgICBpbnQgY291bnQgPSBkb3RzLmxlbmd0aDsKKyAgICBjaGFyW10gY2hhcmFjdGVycyA9IG5ldyBjaGFyW2NvdW50XTsKKyAgICBmb3IgKGludCBpPTA7IGk8Y291bnQ7IGkrPTEpIGNoYXJhY3RlcnNbaV0gPSB0b1VuaWNvZGVCcmFpbGxlKGRvdHNbaV0pOworICAgIHJldHVybiBuZXcgU3RyaW5nKGNoYXJhY3RlcnMpOworICB9CisKKyAgcHVibGljIHN0YXRpYyB2b2lkIHByaW50ZiAoU3RyaW5nIGZvcm1hdCwgT2JqZWN0Li4uIGFyZ3VtZW50cykgeworICAgIFN5c3RlbS5vdXQucHJpbnRmKGZvcm1hdCwgYXJndW1lbnRzKTsKKyAgfQorCisgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIHRvT3BlcmFuZE5hbWUgKFN0cmluZyBzdHJpbmcpIHsKKyAgICByZXR1cm4gc3RyaW5nLnJlcGxhY2UoJyAnLCAnLScpLnRvTG93ZXJDYXNlKCk7CisgIH0KKworICBwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRPYmplY3ROYW1lKENsYXNzPD8gZXh0ZW5kcyBPYmplY3Q+IHR5cGUpIHsKKyAgICByZXR1cm4gdHlwZS5nZXRTaW1wbGVOYW1lKCk7CisgIH0KKworICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldE9iamVjdE5hbWUoKSB7CisgICAgcmV0dXJuIGdldE9iamVjdE5hbWUoZ2V0Q2xhc3MoKSk7CisgIH0KK30KZGlmZiAtLWdpdCBhL0JpbmRpbmdzL0phdmEvQ29ubmVjdEV4Y2VwdGlvbi5qYXZhIGIvQmluZGluZ3MvSmF2YS9Db25uZWN0RXhjZXB0aW9uLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWFhY2IyZgotLS0gL2Rldi9udWxsCisrKyBiL0JpbmRpbmdzL0phdmEvQ29ubmVjdEV4Y2VwdGlvbi5qYXZhCkBAIC0wLDAgKzEsMjYgQEAKKy8qCisgKiBsaWJicmxhcGkgLSBBIGxpYnJhcnkgcHJvdmlkaW5nIGFjY2VzcyB0byBicmFpbGxlIHRlcm1pbmFscyBmb3IgYXBwbGljYXRpb25zLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNi0yMDIzIGJ5CisgKiAgIFNhbXVlbCBUaGliYXVsdCA8U2FtdWVsLlRoaWJhdWx0QGVucy1seW9uLm9yZz4KKyAqICAgU8OpYmFzdGllbiBIaW5kZXJlciA8U2ViYXN0aWVuLkhpbmRlcmVyQGVucy1seW9uLm9yZz4KKyAqCisgKiBsaWJicmxhcGkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorICoKKyAqIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyAqCisgKiBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisgKi8KKworcGFja2FnZSBvcmcuYTExeS5icmxhcGk7CisKK3B1YmxpYyBjbGFzcyBDb25uZWN0RXhjZXB0aW9uIGV4dGVuZHMgRXh0ZXJuYWxFeGNlcHRpb24geworICBwdWJsaWMgQ29ubmVjdEV4Y2VwdGlvbiAoU3RyaW5nIGZvcm1hdCwgT2JqZWN0Li4uIGFyZ3VtZW50cykgeworICAgIHN1cGVyKGZvcm1hdCwgYXJndW1lbnRzKTsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvQmluZGluZ3MvSmF2YS9Db25uZWN0aW9uLmphdmEgYi9CaW5kaW5ncy9KYXZhL0Nvbm5lY3Rpb24uamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ODExNjMyCi0tLSAvZGV2L251bGwKKysrIGIvQmluZGluZ3MvSmF2YS9Db25uZWN0aW9uLmphdmEKQEAgLTAsMCArMSwxMDkgQEAKKy8qCisgKiBsaWJicmxhcGkgLSBBIGxpYnJhcnkgcHJvdmlkaW5nIGFjY2VzcyB0byBicmFpbGxlIHRlcm1pbmFscyBmb3IgYXBwbGljYXRpb25zLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNi0yMDIzIGJ5CisgKiAgIFNhbXVlbCBUaGliYXVsdCA8U2FtdWVsLlRoaWJhdWx0QGVucy1seW9uLm9yZz4KKyAqICAgU8OpYmFzdGllbiBIaW5kZXJlciA8U2ViYXN0aWVuLkhpbmRlcmVyQGVucy1seW9uLm9yZz4KKyAqCisgKiBsaWJicmxhcGkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorICoKKyAqIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyAqCisgKiBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisgKi8KKworcGFja2FnZSBvcmcuYTExeS5icmxhcGk7CisKK2ltcG9ydCBqYXZhLmlvLkludGVycnVwdGVkSU9FeGNlcHRpb247CisKK3B1YmxpYyBjbGFzcyBDb25uZWN0aW9uIGV4dGVuZHMgQ29ubmVjdGlvbkJhc2UgeworICBwdWJsaWMgQ29ubmVjdGlvbiAoQ29ubmVjdGlvblNldHRpbmdzIHNldHRpbmdzKSB0aHJvd3MgQ29ubmVjdEV4Y2VwdGlvbiB7CisgICAgc3VwZXIoc2V0dGluZ3MpOworICB9CisKKyAgcHVibGljIGludCBnZXRDZWxsQ291bnQgKCkgeworICAgIERpc3BsYXlTaXplIHNpemUgPSBnZXREaXNwbGF5U2l6ZSgpOworICAgIHJldHVybiBzaXplLmdldFdpZHRoKCkgKiBzaXplLmdldEhlaWdodCgpOworICB9CisKKyAgcHVibGljIGludCBlbnRlclR0eU1vZGUgKGludCB0dHkpIHsKKyAgICByZXR1cm4gZW50ZXJUdHlNb2RlKHR0eSwgbnVsbCk7CisgIH0KKworICBwdWJsaWMgaW50IGVudGVyVHR5TW9kZSAoU3RyaW5nIGRyaXZlcikgeworICAgIHJldHVybiBlbnRlclR0eU1vZGUoQ29uc3RhbnRzLlRUWV9ERUZBVUxULCBkcml2ZXIpOworICB9CisKKyAgcHVibGljIGludCBlbnRlclR0eU1vZGUgKCkgeworICAgIHJldHVybiBlbnRlclR0eU1vZGUobnVsbCk7CisgIH0KKworICBwdWJsaWMgdm9pZCBlbnRlclR0eU1vZGVXaXRoUGF0aCAoaW50W10gdHR5cywgU3RyaW5nIGRyaXZlcikgeworICAgIGVudGVyVHR5TW9kZVdpdGhQYXRoKGRyaXZlciwgdHR5cyk7CisgIH0KKworICBwdWJsaWMgdm9pZCBlbnRlclR0eU1vZGVXaXRoUGF0aCAoaW50Li4uIHR0eXMpIHsKKyAgICBlbnRlclR0eU1vZGVXaXRoUGF0aChudWxsLCB0dHlzKTsKKyAgfQorCisgIHB1YmxpYyBmaW5hbCBsb25nIHJlYWRLZXkgKCkgdGhyb3dzIEludGVycnVwdGVkSU9FeGNlcHRpb24geworICAgIHJldHVybiByZWFkS2V5KHRydWUpOworICB9CisKKyAgcHVibGljIHZvaWQgd3JpdGUgKGJ5dGVbXSBkb3RzKSB7CisgICAgaW50IGNvdW50ID0gZ2V0Q2VsbENvdW50KCk7CisKKyAgICBpZiAoZG90cy5sZW5ndGggIT0gY291bnQpIHsKKyAgICAgIGJ5dGVbXSBuZXdEb3RzID0gbmV3IGJ5dGVbY291bnRdOworICAgICAgd2hpbGUgKGNvdW50ID4gZG90cy5sZW5ndGgpIG5ld0RvdHNbLS1jb3VudF0gPSAwOworICAgICAgU3lzdGVtLmFycmF5Y29weShkb3RzLCAwLCBuZXdEb3RzLCAwLCBjb3VudCk7CisgICAgICBkb3RzID0gbmV3RG90czsKKyAgICB9CisKKyAgICB3cml0ZURvdHMoZG90cyk7CisgIH0KKworICBwdWJsaWMgdm9pZCB3cml0ZSAoaW50IGN1cnNvciwgU3RyaW5nIHRleHQpIHsKKyAgICBpZiAodGV4dCAhPSBudWxsKSB7CisgICAgICBpbnQgY291bnQgPSBnZXRDZWxsQ291bnQoKTsKKworICAgICAgeworICAgICAgICBTdHJpbmdCdWlsZGVyIG5ld1RleHQgPSBuZXcgU3RyaW5nQnVpbGRlcih0ZXh0KTsKKyAgICAgICAgd2hpbGUgKG5ld1RleHQubGVuZ3RoKCkgPCBjb3VudCkgbmV3VGV4dC5hcHBlbmQoJyAnKTsKKyAgICAgICAgdGV4dCA9IG5ld1RleHQudG9TdHJpbmcoKTsKKyAgICAgIH0KKworICAgICAgaWYgKHRleHQubGVuZ3RoKCkgPiBjb3VudCkgdGV4dCA9IHRleHQuc3Vic3RyaW5nKDAsIGNvdW50KTsKKyAgICB9CisKKyAgICB3cml0ZVRleHQoY3Vyc29yLCB0ZXh0KTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHdyaXRlIChTdHJpbmcgdGV4dCwgaW50IGN1cnNvcikgeworICAgIHdyaXRlKGN1cnNvciwgdGV4dCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB3cml0ZSAoaW50IGN1cnNvcikgeworICAgIHdyaXRlKGN1cnNvciwgbnVsbCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB3cml0ZSAoU3RyaW5nIHRleHQpIHsKKyAgICB3cml0ZShDb25zdGFudHMuQ1VSU09SX0xFQVZFLCB0ZXh0KTsKKyAgfQorCisgIHByaXZhdGUgUGFyYW1ldGVycyBjb25uZWN0aW9uUGFyYW1ldGVycyA9IG51bGw7CisgIHB1YmxpYyBQYXJhbWV0ZXJzIGdldFBhcmFtZXRlcnMgKCkgeworICAgIHN5bmNocm9uaXplZCAodGhpcykgeworICAgICAgaWYgKGNvbm5lY3Rpb25QYXJhbWV0ZXJzID09IG51bGwpIHsKKyAgICAgICAgY29ubmVjdGlvblBhcmFtZXRlcnMgPSBuZXcgUGFyYW1ldGVycyh0aGlzKTsKKyAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gY29ubmVjdGlvblBhcmFtZXRlcnM7CisgIH0KK30KZGlmZiAtLWdpdCBhL0JpbmRpbmdzL0phdmEvQ29ubmVjdGlvbkJhc2UuamF2YSBiL0JpbmRpbmdzL0phdmEvQ29ubmVjdGlvbkJhc2UuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MTc4ZGNjCi0tLSAvZGV2L251bGwKKysrIGIvQmluZGluZ3MvSmF2YS9Db25uZWN0aW9uQmFzZS5qYXZhCkBAIC0wLDAgKzEsMTM3IEBACisvKgorICogbGliYnJsYXBpIC0gQSBsaWJyYXJ5IHByb3ZpZGluZyBhY2Nlc3MgdG8gYnJhaWxsZSB0ZXJtaW5hbHMgZm9yIGFwcGxpY2F0aW9ucy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAyMyBieQorICogICBTYW11ZWwgVGhpYmF1bHQgPFNhbXVlbC5UaGliYXVsdEBlbnMtbHlvbi5vcmc+CisgKiAgIFPDqWJhc3RpZW4gSGluZGVyZXIgPFNlYmFzdGllbi5IaW5kZXJlckBlbnMtbHlvbi5vcmc+CisgKgorICogbGliYnJsYXBpIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKK3BhY2thZ2Ugb3JnLmExMXkuYnJsYXBpOworCitpbXBvcnQgamF2YS5pby5JbnRlcnJ1cHRlZElPRXhjZXB0aW9uOworaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOworaW1wb3J0IGphdmEudXRpbC5NYXA7CitpbXBvcnQgamF2YS51dGlsLmNvbmN1cnJlbnQuVGltZW91dEV4Y2VwdGlvbjsKKworcHVibGljIGNsYXNzIENvbm5lY3Rpb25CYXNlIGV4dGVuZHMgTmF0aXZlQ29tcG9uZW50IGltcGxlbWVudHMgQXV0b0Nsb3NlYWJsZSB7CisgIHByaXZhdGUgbG9uZyBjb25uZWN0aW9uSGFuZGxlOworICBwcml2YXRlIGZpbmFsIHN0YXRpYyBNYXA8TG9uZywgQ29ubmVjdGlvbkJhc2U+IGNvbm5lY3Rpb25zID0gbmV3IEhhc2hNYXA8PigpOworICBwcml2YXRlIGJvb2xlYW4gaGFzQmVjb21lVW51c2FibGUgPSBmYWxzZTsKKworICBwcml2YXRlIG5hdGl2ZSBpbnQgb3BlbkNvbm5lY3Rpb24gKAorICAgIENvbm5lY3Rpb25TZXR0aW5ncyBkZXNpcmVkU2V0dGluZ3MsIENvbm5lY3Rpb25TZXR0aW5ncyBhY3R1YWxTZXR0aW5ncworICApIHRocm93cyBDb25uZWN0RXhjZXB0aW9uOworCisgIHByaXZhdGUgZmluYWwgQ29ubmVjdGlvblNldHRpbmdzIGNvbm5lY3Rpb25TZXR0aW5nczsKKyAgcHJpdmF0ZSBmaW5hbCBpbnQgZmlsZURlc2NyaXB0b3I7CisKKyAgcHVibGljIENvbm5lY3Rpb25CYXNlIChDb25uZWN0aW9uU2V0dGluZ3Mgc2V0dGluZ3MpIHRocm93cyBDb25uZWN0RXhjZXB0aW9uIHsKKyAgICBzdXBlcigpOworICAgIGNvbm5lY3Rpb25TZXR0aW5ncyA9IG5ldyBDb25uZWN0aW9uU2V0dGluZ3MoKTsKKyAgICBmaWxlRGVzY3JpcHRvciA9IG9wZW5Db25uZWN0aW9uKHNldHRpbmdzLCBjb25uZWN0aW9uU2V0dGluZ3MpOworCisgICAgc3luY2hyb25pemVkIChjb25uZWN0aW9ucykgeworICAgICAgaWYgKGNvbm5lY3Rpb25zLnB1dElmQWJzZW50KGNvbm5lY3Rpb25IYW5kbGUsIHRoaXMpICE9IG51bGwpIHsKKyAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbigiY29ubmVjdGlvbiBoYW5kbGUgYWxyZWFkeSBtYXBwZWQiKTsKKyAgICAgIH0KKyAgICB9CisgIH0KKworICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldFNlcnZlckhvc3QgKCkgeworICAgIHJldHVybiBjb25uZWN0aW9uU2V0dGluZ3MuZ2V0U2VydmVySG9zdCgpOworICB9CisKKyAgcHVibGljIGZpbmFsIFN0cmluZyBnZXRBdXRoZW50aWNhdGlvblNjaGVtZSAoKSB7CisgICAgcmV0dXJuIGNvbm5lY3Rpb25TZXR0aW5ncy5nZXRBdXRoZW50aWNhdGlvblNjaGVtZSgpOworICB9CisKKyAgcHVibGljIGZpbmFsIGludCBnZXRGaWxlRGVzY3JpcHRvciAoKSB7CisgICAgcmV0dXJuIGZpbGVEZXNjcmlwdG9yOworICB9CisKKyAgcHJpdmF0ZSBuYXRpdmUgdm9pZCBjbG9zZUNvbm5lY3Rpb24gKCk7CisgIHByaXZhdGUgYm9vbGVhbiBoYXNCZWVuQ2xvc2VkID0gZmFsc2U7CisKKyAgQE92ZXJyaWRlCisgIHB1YmxpYyB2b2lkIGNsb3NlICgpIHsKKyAgICBzeW5jaHJvbml6ZWQgKHRoaXMpIHsKKyAgICAgIGlmICghaGFzQmVlbkNsb3NlZCkgeworICAgICAgICBzeW5jaHJvbml6ZWQgKGNvbm5lY3Rpb25zKSB7CisgICAgICAgICAgY29ubmVjdGlvbnMucmVtb3ZlKGNvbm5lY3Rpb25IYW5kbGUpOworICAgICAgICB9CisKKyAgICAgICAgY2xvc2VDb25uZWN0aW9uKCk7CisgICAgICAgIGhhc0JlZW5DbG9zZWQgPSB0cnVlOworICAgICAgfQorICAgIH0KKyAgfQorCisgIHB1YmxpYyBzdGF0aWMgQ29ubmVjdGlvbkJhc2UgZ2V0Q29ubmVjdGlvbiAobG9uZyBoYW5kbGUpIHsKKyAgICBzeW5jaHJvbml6ZWQgKGNvbm5lY3Rpb25zKSB7CisgICAgICByZXR1cm4gY29ubmVjdGlvbnMuZ2V0KGhhbmRsZSk7CisgICAgfQorICB9CisKKyAgcHVibGljIHN0YXRpYyB2b2lkIHNldFVudXNhYmxlIChsb25nIGhhbmRsZSkgeworICAgIC8vIHRoaXMgbmVlZHMgdG8gYmUgcHVibGljIGJ1dCBpdCBtdXN0bid0IGJlIGVhc3kKKyAgICBDb25uZWN0aW9uQmFzZSBjb25uZWN0aW9uID0gZ2V0Q29ubmVjdGlvbihoYW5kbGUpOworICAgIGNvbm5lY3Rpb24uaGFzQmVjb21lVW51c2FibGUgPSB0cnVlOworICB9CisKKyAgcHVibGljIGZpbmFsIGJvb2xlYW4gaXNVbnVzYWJsZSAoKSB7CisgICAgcmV0dXJuIGhhc0JlY29tZVVudXNhYmxlOworICB9CisKKyAgcHVibGljIG5hdGl2ZSBTdHJpbmcgZ2V0RHJpdmVyTmFtZSAoKTsKKyAgcHVibGljIG5hdGl2ZSBTdHJpbmcgZ2V0TW9kZWxJZGVudGlmaWVyICgpOworICBwdWJsaWMgbmF0aXZlIERpc3BsYXlTaXplIGdldERpc3BsYXlTaXplICgpOworICAKKyAgcHVibGljIG5hdGl2ZSB2b2lkIHBhdXNlIChpbnQgbWlsbGlzZWNvbmRzKQorICAgICAgICAgdGhyb3dzIEludGVycnVwdGVkSU9FeGNlcHRpb247CisKKyAgcHVibGljIG5hdGl2ZSBpbnQgZW50ZXJUdHlNb2RlIChpbnQgdHR5LCBTdHJpbmcgZHJpdmVyKTsKKyAgcHVibGljIG5hdGl2ZSB2b2lkIGVudGVyVHR5TW9kZVdpdGhQYXRoIChTdHJpbmcgZHJpdmVyLCBpbnQuLi4gdHR5cyk7CisgIHB1YmxpYyBuYXRpdmUgdm9pZCBsZWF2ZVR0eU1vZGUgKCk7CisgIHB1YmxpYyBuYXRpdmUgdm9pZCBzZXRGb2N1cyAoaW50IHR0eSk7CisKKyAgcHJvdGVjdGVkIG5hdGl2ZSB2b2lkIHdyaXRlVGV4dCAoaW50IGN1cnNvciwgU3RyaW5nIHRleHQpOworICBwcm90ZWN0ZWQgbmF0aXZlIHZvaWQgd3JpdGVEb3RzIChieXRlW10gZG90cyk7CisgIHB1YmxpYyBuYXRpdmUgdm9pZCB3cml0ZSAoV3JpdGVBcmd1bWVudHMgYXJndW1lbnRzKTsKKworICBwdWJsaWMgbmF0aXZlIExvbmcgcmVhZEtleSAoYm9vbGVhbiB3YWl0KSB0aHJvd3MgSW50ZXJydXB0ZWRJT0V4Y2VwdGlvbjsKKworICBwdWJsaWMgbmF0aXZlIGxvbmcgcmVhZEtleVdpdGhUaW1lb3V0IChpbnQgbWlsbGlzZWNvbmRzKQorICAgICAgICAgdGhyb3dzIEludGVycnVwdGVkSU9FeGNlcHRpb24sIFRpbWVvdXRFeGNlcHRpb247CisKKyAgcHVibGljIG5hdGl2ZSB2b2lkIGlnbm9yZUtleXMgKGxvbmcgdHlwZSwgbG9uZ1tdIGtleXMpOworICBwdWJsaWMgbmF0aXZlIHZvaWQgYWNjZXB0S2V5cyAobG9uZyB0eXBlLCBsb25nW10ga2V5cyk7CisKKyAgcHVibGljIG5hdGl2ZSB2b2lkIGlnbm9yZUFsbEtleXMgKCk7CisgIHB1YmxpYyBuYXRpdmUgdm9pZCBhY2NlcHRBbGxLZXlzICgpOworCisgIHB1YmxpYyBuYXRpdmUgdm9pZCBpZ25vcmVLZXlSYW5nZXMgKGxvbmdbXVtdIHJhbmdlcyk7CisgIHB1YmxpYyBuYXRpdmUgdm9pZCBhY2NlcHRLZXlSYW5nZXMgKGxvbmdbXVtdIHJhbmdlcyk7CisKKyAgcHVibGljIG5hdGl2ZSB2b2lkIGVudGVyUmF3TW9kZSAoU3RyaW5nIGRyaXZlcik7CisgIHB1YmxpYyBuYXRpdmUgdm9pZCBsZWF2ZVJhd01vZGUgKCk7CisgIHB1YmxpYyBuYXRpdmUgaW50IHNlbmRSYXcgKGJ5dGVbXSBidWZmZXIpOworCisgIHB1YmxpYyBuYXRpdmUgaW50IHJlY3ZSYXcgKGJ5dGVbXSBidWZmZXIpCisgICAgICAgICB0aHJvd3MgSW50ZXJydXB0ZWRJT0V4Y2VwdGlvbjsKKworICBwdWJsaWMgbmF0aXZlIE9iamVjdCBnZXRQYXJhbWV0ZXIgKGludCBwYXJhbWV0ZXIsIGxvbmcgc3VicGFyYW0sIGJvb2xlYW4gZ2xvYmFsKTsKKyAgcHVibGljIG5hdGl2ZSB2b2lkIHNldFBhcmFtZXRlciAoaW50IHBhcmFtZXRlciwgbG9uZyBzdWJwYXJhbSwgYm9vbGVhbiBnbG9iYWwsIE9iamVjdCB2YWx1ZSk7CisgIHB1YmxpYyBuYXRpdmUgbG9uZyB3YXRjaFBhcmFtZXRlciAoaW50IHBhcmFtZXRlciwgbG9uZyBzdWJwYXJhbSwgYm9vbGVhbiBnbG9iYWwsIFBhcmFtZXRlcldhdGNoZXIgd2F0Y2hlcik7CisgIHB1YmxpYyBuYXRpdmUgc3RhdGljIHZvaWQgdW53YXRjaFBhcmFtZXRlciAobG9uZyBpZGVudGlmaWVyKTsKK30KZGlmZiAtLWdpdCBhL0JpbmRpbmdzL0phdmEvQ29ubmVjdGlvblNldHRpbmdzLmphdmEgYi9CaW5kaW5ncy9KYXZhL0Nvbm5lY3Rpb25TZXR0aW5ncy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUzMThkNDkKLS0tIC9kZXYvbnVsbAorKysgYi9CaW5kaW5ncy9KYXZhL0Nvbm5lY3Rpb25TZXR0aW5ncy5qYXZhCkBAIC0wLDAgKzEsMTM3IEBACisvKgorICogbGliYnJsYXBpIC0gQSBsaWJyYXJ5IHByb3ZpZGluZyBhY2Nlc3MgdG8gYnJhaWxsZSB0ZXJtaW5hbHMgZm9yIGFwcGxpY2F0aW9ucy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAyMyBieQorICogICBTYW11ZWwgVGhpYmF1bHQgPFNhbXVlbC5UaGliYXVsdEBlbnMtbHlvbi5vcmc+CisgKiAgIFPDqWJhc3RpZW4gSGluZGVyZXIgPFNlYmFzdGllbi5IaW5kZXJlckBlbnMtbHlvbi5vcmc+CisgKgorICogbGliYnJsYXBpIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKK3BhY2thZ2Ugb3JnLmExMXkuYnJsYXBpOworCitpbXBvcnQgamF2YS5pby5GaWxlOworCitwdWJsaWMgY2xhc3MgQ29ubmVjdGlvblNldHRpbmdzIGV4dGVuZHMgTmF0aXZlQ29tcG9uZW50IHsKKyAgcHVibGljIGZpbmFsIHN0YXRpYyBjaGFyIEhPU1RfUE9SVF9TRVBBUkFUT1IgPSAnOic7CisgIHB1YmxpYyBmaW5hbCBzdGF0aWMgU3RyaW5nIERFRkFVTFRfSE9TVF9OQU1FID0gIiI7CisKKyAgcHVibGljIGZpbmFsIHN0YXRpYyBpbnQgTUlOSU1VTV9QT1JUX05VTUJFUiA9ICAwOworICBwdWJsaWMgZmluYWwgc3RhdGljIGludCBNQVhJTVVNX1BPUlRfTlVNQkVSID0gOTk7CisgIHB1YmxpYyBmaW5hbCBzdGF0aWMgaW50IERFRkFVTFRfUE9SVF9OVU1CRVIgPSBNSU5JTVVNX1BPUlRfTlVNQkVSOworCisgIHB1YmxpYyBmaW5hbCBzdGF0aWMgU3RyaW5nIERFRkFVTFRfU0VSVkVSX0hPU1QgPQorICAgIERFRkFVTFRfSE9TVF9OQU1FICsgSE9TVF9QT1JUX1NFUEFSQVRPUiArIERFRkFVTFRfUE9SVF9OVU1CRVI7CisKKyAgcHJpdmF0ZSBTdHJpbmcgc2VydmVySG9zdCA9IG51bGw7CisKKyAgcHVibGljIHN0YXRpYyB2b2lkIGNoZWNrSG9zdFNwZWNpZmljYXRpb24gKFN0cmluZyBzcGVjaWZpY2F0aW9uKSB7CisgICAgaW50IGluZGV4ID0gc3BlY2lmaWNhdGlvbi5pbmRleE9mKEhPU1RfUE9SVF9TRVBBUkFUT1IpOworCisgICAgaWYgKGluZGV4ID09IDApIHsKKyAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoaW5kZXggPCAwKSB7CisgICAgICBzcGVjaWZpY2F0aW9uID0gU3RyaW5nLmZvcm1hdCgKKyAgICAgICAgIiVzJWMlcyIsIHNwZWNpZmljYXRpb24sIEhPU1RfUE9SVF9TRVBBUkFUT1IsIERFRkFVTFRfUE9SVF9OVU1CRVIKKyAgICAgICk7CisgICAgfSBlbHNlIHsKKyAgICAgIFN0cmluZyBudW1iZXIgPSBzcGVjaWZpY2F0aW9uLnN1YnN0cmluZyhpbmRleCsxKTsKKworICAgICAgaWYgKG51bWJlci5pc0VtcHR5KCkpIHsKKyAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigibWlzc2luZyBwb3J0IG51bWJlciIpOworICAgICAgfQorCisgICAgICB0cnkgeworICAgICAgICBQYXJzZS5hc0ludCgKKyAgICAgICAgICAicG9ydCBudW1iZXIiLCBudW1iZXIsCisgICAgICAgICAgTUlOSU1VTV9QT1JUX05VTUJFUiwgTUFYSU1VTV9QT1JUX05VTUJFUgorICAgICAgICApOworICAgICAgfSBjYXRjaCAoU3ludGF4RXhjZXB0aW9uIGV4Y2VwdGlvbikgeworICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKGV4Y2VwdGlvbi5nZXRNZXNzYWdlKCkpOworICAgICAgfQorICAgIH0KKyAgfQorCisgIHB1YmxpYyBmaW5hbCBDb25uZWN0aW9uU2V0dGluZ3Mgc2V0U2VydmVySG9zdCAoU3RyaW5nIHNwZWNpZmljYXRpb24pIHsKKyAgICBjaGVja0hvc3RTcGVjaWZpY2F0aW9uKHNwZWNpZmljYXRpb24pOworICAgIHNlcnZlckhvc3QgPSBzcGVjaWZpY2F0aW9uOworICAgIHJldHVybiB0aGlzOworICB9CisKKyAgcHVibGljIGZpbmFsIFN0cmluZyBnZXRTZXJ2ZXJIb3N0ICgpIHsKKyAgICByZXR1cm4gc2VydmVySG9zdDsKKyAgfQorCisgIHB1YmxpYyBmaW5hbCBzdGF0aWMgY2hhciBBVVRIRU5USUNBVElPTl9TQ0hFTUVfU0VQQVJBVE9SID0gJysnOworICBwdWJsaWMgZmluYWwgc3RhdGljIGNoYXIgQVVUSEVOVElDQVRJT05fT1BFUkFORF9QUkVGSVggPSAnOic7CisKKyAgcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgQVVUSEVOVElDQVRJT05fU0NIRU1FX0tFWUZJTEUgPSAia2V5ZmlsZSI7CisgIHB1YmxpYyBmaW5hbCBzdGF0aWMgU3RyaW5nIEFVVEhFTlRJQ0FUSU9OX1NDSEVNRV9OT05FID0gIm5vbmUiOworCisgIHByaXZhdGUgbmF0aXZlIHN0YXRpYyBTdHJpbmcgZ2V0S2V5ZmlsZURpcmVjdG9yeSAoKTsKKyAgcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgQVVUSEVOVElDQVRJT05fS0VZRklMRV9ESVJFQ1RPUlkgPSBnZXRLZXlmaWxlRGlyZWN0b3J5KCk7CisKKyAgcHJpdmF0ZSBuYXRpdmUgc3RhdGljIFN0cmluZyBnZXRLZXlmaWxlTmFtZSAoKTsKKyAgcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgQVVUSEVOVElDQVRJT05fS0VZRklMRV9OQU1FID0gZ2V0S2V5ZmlsZU5hbWUoKTsKKworICBwdWJsaWMgZmluYWwgc3RhdGljIFN0cmluZyBERUZBVUxUX0FVVEhFTlRJQ0FUSU9OX1NDSEVNRTsKKyAgc3RhdGljIHsKKyAgICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXIgPSBuZXcgU3RyaW5nQnVpbGRlcigpOworCisgICAgeworICAgICAgRmlsZSBmaWxlID0gbmV3IEZpbGUoCisgICAgICAgIEFVVEhFTlRJQ0FUSU9OX0tFWUZJTEVfRElSRUNUT1JZLAorICAgICAgICBBVVRIRU5USUNBVElPTl9LRVlGSUxFX05BTUUKKyAgICAgICk7CisKKyAgICAgIGlmIChmaWxlLmlzRmlsZSgpICYmIGZpbGUuY2FuUmVhZCgpKSB7CisgICAgICAgIGJ1aWxkZXIuYXBwZW5kKEFVVEhFTlRJQ0FUSU9OX1NDSEVNRV9LRVlGSUxFKQorICAgICAgICAgICAgICAgLmFwcGVuZChBVVRIRU5USUNBVElPTl9PUEVSQU5EX1BSRUZJWCkKKyAgICAgICAgICAgICAgIC5hcHBlbmQoZmlsZS5nZXRBYnNvbHV0ZVBhdGgoKSk7CisgICAgICB9CisgICAgfQorCisgICAgaWYgKGJ1aWxkZXIubGVuZ3RoKCkgPiAwKSBidWlsZGVyLmFwcGVuZChBVVRIRU5USUNBVElPTl9TQ0hFTUVfU0VQQVJBVE9SKTsKKyAgICBidWlsZGVyLmFwcGVuZChBVVRIRU5USUNBVElPTl9TQ0hFTUVfTk9ORSk7CisKKyAgICBERUZBVUxUX0FVVEhFTlRJQ0FUSU9OX1NDSEVNRSA9IGJ1aWxkZXIudG9TdHJpbmcoKTsKKyAgfQorCisgIHByaXZhdGUgU3RyaW5nIGF1dGhlbnRpY2F0aW9uU2NoZW1lID0gbnVsbDsKKworICBwdWJsaWMgc3RhdGljIHZvaWQgY2hlY2tBdXRoZW50aWNhdGlvblNjaGVtZSAoU3RyaW5nIHNjaGVtZSkgeworICB9CisKKyAgcHVibGljIGZpbmFsIENvbm5lY3Rpb25TZXR0aW5ncyBzZXRBdXRoZW50aWNhdGlvblNjaGVtZSAoU3RyaW5nIHNjaGVtZSkgeworICAgIGNoZWNrQXV0aGVudGljYXRpb25TY2hlbWUoc2NoZW1lKTsKKyAgICBhdXRoZW50aWNhdGlvblNjaGVtZSA9IHNjaGVtZTsKKyAgICByZXR1cm4gdGhpczsKKyAgfQorCisgIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0QXV0aGVudGljYXRpb25TY2hlbWUgKCkgeworICAgIHJldHVybiBhdXRoZW50aWNhdGlvblNjaGVtZTsKKyAgfQorCisgIHB1YmxpYyBDb25uZWN0aW9uU2V0dGluZ3MgKCkgeworICAgIHNldFNlcnZlckhvc3QoREVGQVVMVF9TRVJWRVJfSE9TVCk7CisgICAgc2V0QXV0aGVudGljYXRpb25TY2hlbWUoREVGQVVMVF9BVVRIRU5USUNBVElPTl9TQ0hFTUUpOworICB9CisKKyAgQE92ZXJyaWRlCisgIHB1YmxpYyBTdHJpbmcgdG9TdHJpbmcgKCkgeworICAgIHJldHVybiBTdHJpbmcuZm9ybWF0KAorICAgICAgIlNlcnZlcjolcyBTY2hlbWU6JXMiLCBzZXJ2ZXJIb3N0LCBhdXRoZW50aWNhdGlvblNjaGVtZQorICAgICk7CisgIH0KK30KZGlmZiAtLWdpdCBhL0JpbmRpbmdzL0phdmEvQ3Vyc29yUG9zaXRpb25Vc2FnZS5qYXZhIGIvQmluZGluZ3MvSmF2YS9DdXJzb3JQb3NpdGlvblVzYWdlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2Q3NTc0NQotLS0gL2Rldi9udWxsCisrKyBiL0JpbmRpbmdzL0phdmEvQ3Vyc29yUG9zaXRpb25Vc2FnZS5qYXZhCkBAIC0wLDAgKzEsMzAgQEAKKy8qCisgKiBsaWJicmxhcGkgLSBBIGxpYnJhcnkgcHJvdmlkaW5nIGFjY2VzcyB0byBicmFpbGxlIHRlcm1pbmFscyBmb3IgYXBwbGljYXRpb25zLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNi0yMDIzIGJ5CisgKiAgIFNhbXVlbCBUaGliYXVsdCA8U2FtdWVsLlRoaWJhdWx0QGVucy1seW9uLm9yZz4KKyAqICAgU8OpYmFzdGllbiBIaW5kZXJlciA8U2ViYXN0aWVuLkhpbmRlcmVyQGVucy1seW9uLm9yZz4KKyAqCisgKiBsaWJicmxhcGkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorICoKKyAqIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyAqCisgKiBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisgKi8KKworcGFja2FnZSBvcmcuYTExeS5icmxhcGk7CisKK3B1YmxpYyBjbGFzcyBDdXJzb3JQb3NpdGlvblVzYWdlIGV4dGVuZHMgT3BlcmFuZFVzYWdlIHsKKyAgcHVibGljIEN1cnNvclBvc2l0aW9uVXNhZ2UgKGludCBkZWZhdWx0VmFsdWUpIHsKKyAgICBzdXBlcihXcml0ZUFyZ3VtZW50cy5DVVJTT1JfUE9TSVRJT04pOworICAgIHNldERlZmF1bHQoZGVmYXVsdFZhbHVlKTsKKyAgICBzZXRSYW5nZU1pbmltdW0oUGFyc2UuTUlOSU1VTV9DVVJTT1JfUE9TSVRJT04pOworICAgIGFkZFdvcmQoUGFyc2UuTk9fQ1VSU09SLCBDb25zdGFudHMuQ1VSU09SX09GRik7CisgICAgYWRkV29yZChQYXJzZS5MRUFWRV9DVVJTT1IsIENvbnN0YW50cy5DVVJTT1JfTEVBVkUpOworICB9Cit9CmRpZmYgLS1naXQgYS9CaW5kaW5ncy9KYXZhL0Rpc3BsYXlOdW1iZXJVc2FnZS5qYXZhIGIvQmluZGluZ3MvSmF2YS9EaXNwbGF5TnVtYmVyVXNhZ2UuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMDY0MDdjCi0tLSAvZGV2L251bGwKKysrIGIvQmluZGluZ3MvSmF2YS9EaXNwbGF5TnVtYmVyVXNhZ2UuamF2YQpAQCAtMCwwICsxLDI5IEBACisvKgorICogbGliYnJsYXBpIC0gQSBsaWJyYXJ5IHByb3ZpZGluZyBhY2Nlc3MgdG8gYnJhaWxsZSB0ZXJtaW5hbHMgZm9yIGFwcGxpY2F0aW9ucy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAyMyBieQorICogICBTYW11ZWwgVGhpYmF1bHQgPFNhbXVlbC5UaGliYXVsdEBlbnMtbHlvbi5vcmc+CisgKiAgIFPDqWJhc3RpZW4gSGluZGVyZXIgPFNlYmFzdGllbi5IaW5kZXJlckBlbnMtbHlvbi5vcmc+CisgKgorICogbGliYnJsYXBpIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKK3BhY2thZ2Ugb3JnLmExMXkuYnJsYXBpOworCitwdWJsaWMgY2xhc3MgRGlzcGxheU51bWJlclVzYWdlIGV4dGVuZHMgT3BlcmFuZFVzYWdlIHsKKyAgcHVibGljIERpc3BsYXlOdW1iZXJVc2FnZSAoaW50IGRlZmF1bHRWYWx1ZSkgeworICAgIHN1cGVyKFdyaXRlQXJndW1lbnRzLkRJU1BMQVlfTlVNQkVSKTsKKyAgICBzZXREZWZhdWx0KGRlZmF1bHRWYWx1ZSk7CisgICAgc2V0UmFuZ2VNaW5pbXVtKFBhcnNlLk1JTklNVU1fRElTUExBWV9OVU1CRVIpOworICAgIGFkZFdvcmQoUGFyc2UuREVGQVVMVF9ESVNQTEFZLCBDb25zdGFudHMuRElTUExBWV9ERUZBVUxUKTsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvQmluZGluZ3MvSmF2YS9EaXNwbGF5U2l6ZS5qYXZhIGIvQmluZGluZ3MvSmF2YS9EaXNwbGF5U2l6ZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdiMzQyM2EKLS0tIC9kZXYvbnVsbAorKysgYi9CaW5kaW5ncy9KYXZhL0Rpc3BsYXlTaXplLmphdmEKQEAgLTAsMCArMSw0NyBAQAorLyoKKyAqIGxpYmJybGFwaSAtIEEgbGlicmFyeSBwcm92aWRpbmcgYWNjZXNzIHRvIGJyYWlsbGUgdGVybWluYWxzIGZvciBhcHBsaWNhdGlvbnMuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMjMgYnkKKyAqICAgU2FtdWVsIFRoaWJhdWx0IDxTYW11ZWwuVGhpYmF1bHRAZW5zLWx5b24ub3JnPgorICogICBTw6liYXN0aWVuIEhpbmRlcmVyIDxTZWJhc3RpZW4uSGluZGVyZXJAZW5zLWx5b24ub3JnPgorICoKKyAqIGxpYmJybGFwaSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorICoKKyAqIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyAqLworCitwYWNrYWdlIG9yZy5hMTF5LmJybGFwaTsKKworcHVibGljIGNsYXNzIERpc3BsYXlTaXplIHsKKyAgcHJpdmF0ZSBmaW5hbCBpbnQgZGlzcGxheVdpZHRoOworICBwcml2YXRlIGZpbmFsIGludCBkaXNwbGF5SGVpZ2h0OworCisgIHB1YmxpYyBEaXNwbGF5U2l6ZSAoaW50IHdpZHRoLCBpbnQgaGVpZ2h0KSB7CisgICAgZGlzcGxheVdpZHRoID0gd2lkdGg7CisgICAgZGlzcGxheUhlaWdodCA9IGhlaWdodDsgCisgIH0KKworICBwdWJsaWMgRGlzcGxheVNpemUgKGludFtdIGRpbWVuc2lvbnMpIHsKKyAgICB0aGlzKGRpbWVuc2lvbnNbMF0sIGRpbWVuc2lvbnNbMV0pOworICB9CisKKyAgcHVibGljIGludCBnZXRXaWR0aCAoKSB7CisgICAgcmV0dXJuIGRpc3BsYXlXaWR0aDsKKyAgfQorCisgIHB1YmxpYyBpbnQgZ2V0SGVpZ2h0ICgpIHsKKyAgICByZXR1cm4gZGlzcGxheUhlaWdodDsKKyAgfQorCisgIEBPdmVycmlkZQorICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nICgpIHsKKyAgICByZXR1cm4gU3RyaW5nLmZvcm1hdCgiJWR4JWQiLCBnZXRXaWR0aCgpLCBnZXRIZWlnaHQoKSk7CisgIH0KK30KZGlmZiAtLWdpdCBhL0JpbmRpbmdzL0phdmEvRHJpdmVyS2V5Y29kZS5qYXZhIGIvQmluZGluZ3MvSmF2YS9Ecml2ZXJLZXljb2RlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjUwNjA2YgotLS0gL2Rldi9udWxsCisrKyBiL0JpbmRpbmdzL0phdmEvRHJpdmVyS2V5Y29kZS5qYXZhCkBAIC0wLDAgKzEsNTggQEAKKy8qCisgKiBsaWJicmxhcGkgLSBBIGxpYnJhcnkgcHJvdmlkaW5nIGFjY2VzcyB0byBicmFpbGxlIHRlcm1pbmFscyBmb3IgYXBwbGljYXRpb25zLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNi0yMDIzIGJ5CisgKiAgIFNhbXVlbCBUaGliYXVsdCA8U2FtdWVsLlRoaWJhdWx0QGVucy1seW9uLm9yZz4KKyAqICAgU8OpYmFzdGllbiBIaW5kZXJlciA8U2ViYXN0aWVuLkhpbmRlcmVyQGVucy1seW9uLm9yZz4KKyAqCisgKiBsaWJicmxhcGkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorICoKKyAqIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyAqCisgKiBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisgKi8KKworcGFja2FnZSBvcmcuYTExeS5icmxhcGk7CisKK3B1YmxpYyBjbGFzcyBEcml2ZXJLZXljb2RlIGV4dGVuZHMgS2V5Y29kZSB7CisgIHB1YmxpYyBuYXRpdmUgc3RhdGljIGJvb2xlYW4gaXNQcmVzcyAobG9uZyBjb2RlKTsKKyAgcHVibGljIG5hdGl2ZSBzdGF0aWMgbG9uZyBnZXRWYWx1ZSAobG9uZyBjb2RlKTsKKyAgcHVibGljIG5hdGl2ZSBzdGF0aWMgaW50IGdldEdyb3VwIChsb25nIGNvZGUpOworICBwdWJsaWMgbmF0aXZlIHN0YXRpYyBpbnQgZ2V0TnVtYmVyIChsb25nIGNvZGUpOworCisgIHByaXZhdGUgbmF0aXZlIHN0YXRpYyBpbnQgZ2V0TnVtYmVyQW55ICgpOworICBwdWJsaWMgZmluYWwgc3RhdGljIGludCBLRVlfTlVNQkVSX0FOWSA9IGdldE51bWJlckFueSgpOworCisgIHB1YmxpYyBEcml2ZXJLZXljb2RlIChsb25nIGNvZGUpIHsKKyAgICBzdXBlcihjb2RlKTsKKyAgfQorCisgIHB1YmxpYyBmaW5hbCBib29sZWFuIGlzUHJlc3MgKCkgeworICAgIHJldHVybiBpc1ByZXNzKGdldENvZGUoKSk7CisgIH0KKworICBwdWJsaWMgZmluYWwgbG9uZyBnZXRWYWx1ZSAoKSB7CisgICAgcmV0dXJuIGdldFZhbHVlKGdldENvZGUoKSk7CisgIH0KKworICBwdWJsaWMgZmluYWwgaW50IGdldEdyb3VwICgpIHsKKyAgICByZXR1cm4gZ2V0R3JvdXAoZ2V0Q29kZSgpKTsKKyAgfQorCisgIHB1YmxpYyBmaW5hbCBpbnQgZ2V0TnVtYmVyICgpIHsKKyAgICByZXR1cm4gZ2V0TnVtYmVyKGdldENvZGUoKSk7CisgIH0KKworICBAT3ZlcnJpZGUKKyAgcHVibGljIFN0cmluZyB0b1N0cmluZyAoKSB7CisgICAgcmV0dXJuIFN0cmluZy5mb3JtYXQoCisgICAgICAiJXMgJXMgR3JwOiVkIE51bTolZCIsCisgICAgICBLZXljb2RlLnRvU3RyaW5nKGdldENvZGUoKSksIChpc1ByZXNzKCk/ICJwcmVzcyI6ICJyZWxlYXNlIiksIGdldEdyb3VwKCksIGdldE51bWJlcigpCisgICAgKTsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvQmluZGluZ3MvSmF2YS9FeGl0RXhjZXB0aW9uLmphdmEgYi9CaW5kaW5ncy9KYXZhL0V4aXRFeGNlcHRpb24uamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NWU3ZmExCi0tLSAvZGV2L251bGwKKysrIGIvQmluZGluZ3MvSmF2YS9FeGl0RXhjZXB0aW9uLmphdmEKQEAgLTAsMCArMSwzMyBAQAorLyoKKyAqIGxpYmJybGFwaSAtIEEgbGlicmFyeSBwcm92aWRpbmcgYWNjZXNzIHRvIGJyYWlsbGUgdGVybWluYWxzIGZvciBhcHBsaWNhdGlvbnMuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMjMgYnkKKyAqICAgU2FtdWVsIFRoaWJhdWx0IDxTYW11ZWwuVGhpYmF1bHRAZW5zLWx5b24ub3JnPgorICogICBTw6liYXN0aWVuIEhpbmRlcmVyIDxTZWJhc3RpZW4uSGluZGVyZXJAZW5zLWx5b24ub3JnPgorICoKKyAqIGxpYmJybGFwaSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorICoKKyAqIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyAqLworCitwYWNrYWdlIG9yZy5hMTF5LmJybGFwaTsKKworcHVibGljIGNsYXNzIEV4aXRFeGNlcHRpb24gZXh0ZW5kcyBSdW50aW1lRXhjZXB0aW9uIHsKKyAgcHJpdmF0ZSBmaW5hbCBpbnQgZXhpdENvZGU7CisKKyAgcHVibGljIEV4aXRFeGNlcHRpb24gKGludCBjb2RlKSB7CisgICAgc3VwZXIoSW50ZWdlci50b1N0cmluZyhjb2RlKSk7CisgICAgZXhpdENvZGUgPSBjb2RlOworICB9CisKKyAgcHVibGljIGZpbmFsIGludCBnZXRFeGl0Q29kZSAoKSB7CisgICAgcmV0dXJuIGV4aXRDb2RlOworICB9Cit9CmRpZmYgLS1naXQgYS9CaW5kaW5ncy9KYXZhL0V4dGVybmFsRXhjZXB0aW9uLmphdmEgYi9CaW5kaW5ncy9KYXZhL0V4dGVybmFsRXhjZXB0aW9uLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTBlNmM2ZgotLS0gL2Rldi9udWxsCisrKyBiL0JpbmRpbmdzL0phdmEvRXh0ZXJuYWxFeGNlcHRpb24uamF2YQpAQCAtMCwwICsxLDI2IEBACisvKgorICogbGliYnJsYXBpIC0gQSBsaWJyYXJ5IHByb3ZpZGluZyBhY2Nlc3MgdG8gYnJhaWxsZSB0ZXJtaW5hbHMgZm9yIGFwcGxpY2F0aW9ucy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAyMyBieQorICogICBTYW11ZWwgVGhpYmF1bHQgPFNhbXVlbC5UaGliYXVsdEBlbnMtbHlvbi5vcmc+CisgKiAgIFPDqWJhc3RpZW4gSGluZGVyZXIgPFNlYmFzdGllbi5IaW5kZXJlckBlbnMtbHlvbi5vcmc+CisgKgorICogbGliYnJsYXBpIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKK3BhY2thZ2Ugb3JnLmExMXkuYnJsYXBpOworCitwdWJsaWMgY2xhc3MgRXh0ZXJuYWxFeGNlcHRpb24gZXh0ZW5kcyBQcm9ncmFtRXhjZXB0aW9uIHsKKyAgcHVibGljIEV4dGVybmFsRXhjZXB0aW9uIChTdHJpbmcgZm9ybWF0LCBPYmplY3QuLi4gYXJndW1lbnRzKSB7CisgICAgc3VwZXIoZm9ybWF0LCBhcmd1bWVudHMpOworICB9Cit9CmRpZmYgLS1naXQgYS9CaW5kaW5ncy9KYXZhL0dsb2JhbFBhcmFtZXRlci5qYXZhIGIvQmluZGluZ3MvSmF2YS9HbG9iYWxQYXJhbWV0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOWRlYjkxCi0tLSAvZGV2L251bGwKKysrIGIvQmluZGluZ3MvSmF2YS9HbG9iYWxQYXJhbWV0ZXIuamF2YQpAQCAtMCwwICsxLDMxIEBACisvKgorICogbGliYnJsYXBpIC0gQSBsaWJyYXJ5IHByb3ZpZGluZyBhY2Nlc3MgdG8gYnJhaWxsZSB0ZXJtaW5hbHMgZm9yIGFwcGxpY2F0aW9ucy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAyMyBieQorICogICBTYW11ZWwgVGhpYmF1bHQgPFNhbXVlbC5UaGliYXVsdEBlbnMtbHlvbi5vcmc+CisgKiAgIFPDqWJhc3RpZW4gSGluZGVyZXIgPFNlYmFzdGllbi5IaW5kZXJlckBlbnMtbHlvbi5vcmc+CisgKgorICogbGliYnJsYXBpIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKK3BhY2thZ2Ugb3JnLmExMXkuYnJsYXBpOworCitwdWJsaWMgYWJzdHJhY3QgY2xhc3MgR2xvYmFsUGFyYW1ldGVyIGV4dGVuZHMgUGFyYW1ldGVyIHsKKyAgcHJvdGVjdGVkIEdsb2JhbFBhcmFtZXRlciAoQ29ubmVjdGlvbkJhc2UgY29ubmVjdGlvbikgeworICAgIHN1cGVyKGNvbm5lY3Rpb24pOworICB9CisKKyAgQE92ZXJyaWRlCisgIHB1YmxpYyBmaW5hbCBib29sZWFuIGlzR2xvYmFsICgpIHsKKyAgICByZXR1cm4gdHJ1ZTsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvQmluZGluZ3MvSmF2YS9Ib3N0RXhjZXB0aW9uLmphdmEgYi9CaW5kaW5ncy9KYXZhL0hvc3RFeGNlcHRpb24uamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YWYwZWQzCi0tLSAvZGV2L251bGwKKysrIGIvQmluZGluZ3MvSmF2YS9Ib3N0RXhjZXB0aW9uLmphdmEKQEAgLTAsMCArMSwzMyBAQAorLyoKKyAqIGxpYmJybGFwaSAtIEEgbGlicmFyeSBwcm92aWRpbmcgYWNjZXNzIHRvIGJyYWlsbGUgdGVybWluYWxzIGZvciBhcHBsaWNhdGlvbnMuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMjMgYnkKKyAqICAgU2FtdWVsIFRoaWJhdWx0IDxTYW11ZWwuVGhpYmF1bHRAZW5zLWx5b24ub3JnPgorICogICBTw6liYXN0aWVuIEhpbmRlcmVyIDxTZWJhc3RpZW4uSGluZGVyZXJAZW5zLWx5b24ub3JnPgorICoKKyAqIGxpYmJybGFwaSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorICoKKyAqIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyAqLworCitwYWNrYWdlIG9yZy5hMTF5LmJybGFwaTsKKworcHVibGljIGNsYXNzIEhvc3RFeGNlcHRpb24gZXh0ZW5kcyBDb25uZWN0RXhjZXB0aW9uIHsKKyAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgc2VydmVySG9zdDsKKworICBwdWJsaWMgSG9zdEV4Y2VwdGlvbiAoU3RyaW5nIGhvc3QsIFN0cmluZyBjYXVzZSkgeworICAgIHN1cGVyKCIlczogJXMiLCBjYXVzZSwgaG9zdCk7CisgICAgc2VydmVySG9zdCA9IGhvc3Q7CisgIH0KKworICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldEhvc3QgKCkgeworICAgIHJldHVybiBzZXJ2ZXJIb3N0OworICB9Cit9CmRpZmYgLS1naXQgYS9CaW5kaW5ncy9KYXZhL0tleWNvZGUuamF2YSBiL0JpbmRpbmdzL0phdmEvS2V5Y29kZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFiMmI1YWYKLS0tIC9kZXYvbnVsbAorKysgYi9CaW5kaW5ncy9KYXZhL0tleWNvZGUuamF2YQpAQCAtMCwwICsxLDQyIEBACisvKgorICogbGliYnJsYXBpIC0gQSBsaWJyYXJ5IHByb3ZpZGluZyBhY2Nlc3MgdG8gYnJhaWxsZSB0ZXJtaW5hbHMgZm9yIGFwcGxpY2F0aW9ucy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAyMyBieQorICogICBTYW11ZWwgVGhpYmF1bHQgPFNhbXVlbC5UaGliYXVsdEBlbnMtbHlvbi5vcmc+CisgKiAgIFPDqWJhc3RpZW4gSGluZGVyZXIgPFNlYmFzdGllbi5IaW5kZXJlckBlbnMtbHlvbi5vcmc+CisgKgorICogbGliYnJsYXBpIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKK3BhY2thZ2Ugb3JnLmExMXkuYnJsYXBpOworCitwdWJsaWMgYWJzdHJhY3QgY2xhc3MgS2V5Y29kZSBleHRlbmRzIE5hdGl2ZUNvbXBvbmVudCB7CisgIHByaXZhdGUgZmluYWwgbG9uZyBjb2RlVmFsdWU7CisKKyAgcHVibGljIEtleWNvZGUgKGxvbmcgY29kZSkgeworICAgIHN1cGVyKCk7CisgICAgY29kZVZhbHVlID0gY29kZTsKKyAgfQorCisgIHB1YmxpYyBmaW5hbCBsb25nIGdldENvZGUgKCkgeworICAgIHJldHVybiBjb2RlVmFsdWU7CisgIH0KKworICBwdWJsaWMgc3RhdGljIFN0cmluZyB0b1N0cmluZyAobG9uZyBjb2RlKSB7CisgICAgcmV0dXJuIFN0cmluZy5mb3JtYXQoIkNvZGU6JTAxNlgiLCBjb2RlKTsKKyAgfQorCisgIEBPdmVycmlkZQorICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nICgpIHsKKyAgICByZXR1cm4gdG9TdHJpbmcoZ2V0Q29kZSgpKTsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvQmluZGluZ3MvSmF2YS9LZXl3b3JkTWFwLmphdmEgYi9CaW5kaW5ncy9KYXZhL0tleXdvcmRNYXAuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYjQ0ODVkCi0tLSAvZGV2L251bGwKKysrIGIvQmluZGluZ3MvSmF2YS9LZXl3b3JkTWFwLmphdmEKQEAgLTAsMCArMSw4MyBAQAorLyoKKyAqIGxpYmJybGFwaSAtIEEgbGlicmFyeSBwcm92aWRpbmcgYWNjZXNzIHRvIGJyYWlsbGUgdGVybWluYWxzIGZvciBhcHBsaWNhdGlvbnMuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMjMgYnkKKyAqICAgU2FtdWVsIFRoaWJhdWx0IDxTYW11ZWwuVGhpYmF1bHRAZW5zLWx5b24ub3JnPgorICogICBTw6liYXN0aWVuIEhpbmRlcmVyIDxTZWJhc3RpZW4uSGluZGVyZXJAZW5zLWx5b24ub3JnPgorICoKKyAqIGxpYmJybGFwaSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorICoKKyAqIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyAqLworCitwYWNrYWdlIG9yZy5hMTF5LmJybGFwaTsKKworaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOworaW1wb3J0IGphdmEudXRpbC5MaW5rZWRIYXNoTWFwOworaW1wb3J0IGphdmEudXRpbC5NYXA7CitpbXBvcnQgamF2YS51dGlsLlNldDsKKworcHVibGljIGNsYXNzIEtleXdvcmRNYXA8Vj4geworICBwcml2YXRlIGZpbmFsIE1hcDxTdHJpbmcsIFY+IHZhbHVlTWFwID0gbmV3IExpbmtlZEhhc2hNYXA8PigpOworICBwcml2YXRlIGZpbmFsIE1hcDxTdHJpbmcsIFN0cmluZz4gYWxpYXNNYXAgPSBuZXcgSGFzaE1hcDw+KCk7CisgIHByaXZhdGUgZmluYWwgc3RhdGljIFN0cmluZyBBTUJJR1VPVVMgPSAiIjsKKworICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgbm9ybWFsaXplS2V5d29yZCAoU3RyaW5nIGtleXdvcmQpIHsKKyAgICByZXR1cm4ga2V5d29yZC50b0xvd2VyQ2FzZSgpOworICB9CisKKyAgcHJpdmF0ZSBmaW5hbCB2b2lkIGFkZEFsaWFzZXMgKFN0cmluZyBrZXl3b3JkKSB7CisgICAgU3RyaW5nIGFsaWFzID0ga2V5d29yZDsKKworICAgIHdoaWxlICh0cnVlKSB7CisgICAgICBhbGlhcyA9IGFsaWFzLnN1YnN0cmluZygwLCBhbGlhcy5sZW5ndGgoKS0xKTsKKyAgICAgIGlmIChhbGlhcy5pc0VtcHR5KCkpIGJyZWFrOworCisgICAgICBTdHJpbmcgdmFsdWUgPSBhbGlhc01hcC5nZXQoYWxpYXMpOworICAgICAgaWYgKHZhbHVlID09IG51bGwpIHsKKyAgICAgICAgYWxpYXNNYXAucHV0KGFsaWFzLCBrZXl3b3JkKTsKKyAgICAgIH0gZWxzZSBpZiAodmFsdWUgPT0gQU1CSUdVT1VTKSB7CisgICAgICAgIGJyZWFrOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgYWxpYXNNYXAucHV0KGFsaWFzLCBBTUJJR1VPVVMpOworICAgICAgfQorICAgIH0KKyAgfQorCisgIHB1YmxpYyBLZXl3b3JkTWFwPFY+IHB1dCAoU3RyaW5nIGtleXdvcmQsIFYgdmFsdWUpIHsKKyAgICBrZXl3b3JkID0gbm9ybWFsaXplS2V5d29yZChrZXl3b3JkKTsKKyAgICB2YWx1ZU1hcC5wdXQoa2V5d29yZCwgdmFsdWUpOworICAgIGFkZEFsaWFzZXMoa2V5d29yZCk7CisgICAgcmV0dXJuIHRoaXM7CisgIH0KKworICBwdWJsaWMgZmluYWwgViBnZXQgKFN0cmluZyBrZXl3b3JkKSB7CisgICAga2V5d29yZCA9IG5vcm1hbGl6ZUtleXdvcmQoa2V5d29yZCk7CisgICAgViB2YWx1ZSA9IHZhbHVlTWFwLmdldChrZXl3b3JkKTsKKyAgICBpZiAodmFsdWUgIT0gbnVsbCkgcmV0dXJuIHZhbHVlOworCisgICAga2V5d29yZCA9IGFsaWFzTWFwLmdldChrZXl3b3JkKTsKKyAgICBpZiAoa2V5d29yZCA9PSBudWxsKSByZXR1cm4gbnVsbDsKKyAgICBpZiAoa2V5d29yZCA9PSBBTUJJR1VPVVMpIHJldHVybiBudWxsOworICAgIHJldHVybiB2YWx1ZU1hcC5nZXQoa2V5d29yZCk7CisgIH0KKworICBwdWJsaWMgZmluYWwgU3RyaW5nW10gZ2V0S2V5d29yZHMgKCkgeworICAgIFNldDxTdHJpbmc+IGtleXdvcmRzID0gdmFsdWVNYXAua2V5U2V0KCk7CisgICAgcmV0dXJuIGtleXdvcmRzLnRvQXJyYXkobmV3IFN0cmluZ1trZXl3b3Jkcy5zaXplKCldKTsKKyAgfQorCisgIHB1YmxpYyBmaW5hbCBib29sZWFuIGlzRW1wdHkgKCkgeworICAgIHJldHVybiB2YWx1ZU1hcC5pc0VtcHR5KCk7CisgIH0KKworICBwdWJsaWMgS2V5d29yZE1hcCAoKSB7CisgIH0KK30KZGlmZiAtLWdpdCBhL0JpbmRpbmdzL0phdmEvTG9jYWxQYXJhbWV0ZXIuamF2YSBiL0JpbmRpbmdzL0phdmEvTG9jYWxQYXJhbWV0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMzI4YzcxCi0tLSAvZGV2L251bGwKKysrIGIvQmluZGluZ3MvSmF2YS9Mb2NhbFBhcmFtZXRlci5qYXZhCkBAIC0wLDAgKzEsMzEgQEAKKy8qCisgKiBsaWJicmxhcGkgLSBBIGxpYnJhcnkgcHJvdmlkaW5nIGFjY2VzcyB0byBicmFpbGxlIHRlcm1pbmFscyBmb3IgYXBwbGljYXRpb25zLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNi0yMDIzIGJ5CisgKiAgIFNhbXVlbCBUaGliYXVsdCA8U2FtdWVsLlRoaWJhdWx0QGVucy1seW9uLm9yZz4KKyAqICAgU8OpYmFzdGllbiBIaW5kZXJlciA8U2ViYXN0aWVuLkhpbmRlcmVyQGVucy1seW9uLm9yZz4KKyAqCisgKiBsaWJicmxhcGkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorICoKKyAqIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyAqCisgKiBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisgKi8KKworcGFja2FnZSBvcmcuYTExeS5icmxhcGk7CisKK3B1YmxpYyBhYnN0cmFjdCBjbGFzcyBMb2NhbFBhcmFtZXRlciBleHRlbmRzIFBhcmFtZXRlciB7CisgIHByb3RlY3RlZCBMb2NhbFBhcmFtZXRlciAoQ29ubmVjdGlvbkJhc2UgY29ubmVjdGlvbikgeworICAgIHN1cGVyKGNvbm5lY3Rpb24pOworICB9CisKKyAgQE92ZXJyaWRlCisgIHB1YmxpYyBmaW5hbCBib29sZWFuIGlzR2xvYmFsICgpIHsKKyAgICByZXR1cm4gZmFsc2U7CisgIH0KK30KZGlmZiAtLWdpdCBhL0JpbmRpbmdzL0phdmEvTG9zdENvbm5lY3Rpb25FeGNlcHRpb24uamF2YSBiL0JpbmRpbmdzL0phdmEvTG9zdENvbm5lY3Rpb25FeGNlcHRpb24uamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MjEzMTNiCi0tLSAvZGV2L251bGwKKysrIGIvQmluZGluZ3MvSmF2YS9Mb3N0Q29ubmVjdGlvbkV4Y2VwdGlvbi5qYXZhCkBAIC0wLDAgKzEsMjYgQEAKKy8qCisgKiBsaWJicmxhcGkgLSBBIGxpYnJhcnkgcHJvdmlkaW5nIGFjY2VzcyB0byBicmFpbGxlIHRlcm1pbmFscyBmb3IgYXBwbGljYXRpb25zLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNi0yMDIzIGJ5CisgKiAgIFNhbXVlbCBUaGliYXVsdCA8U2FtdWVsLlRoaWJhdWx0QGVucy1seW9uLm9yZz4KKyAqICAgU8OpYmFzdGllbiBIaW5kZXJlciA8U2ViYXN0aWVuLkhpbmRlcmVyQGVucy1seW9uLm9yZz4KKyAqCisgKiBsaWJicmxhcGkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorICoKKyAqIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyAqCisgKiBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisgKi8KKworcGFja2FnZSBvcmcuYTExeS5icmxhcGk7CisKK3B1YmxpYyBjbGFzcyBMb3N0Q29ubmVjdGlvbkV4Y2VwdGlvbiBleHRlbmRzIFJ1bnRpbWVFeGNlcHRpb24geworICBwdWJsaWMgTG9zdENvbm5lY3Rpb25FeGNlcHRpb24gKCkgeworICAgIHN1cGVyKCk7CisgIH0KK30KZGlmZiAtLWdpdCBhL0JpbmRpbmdzL0phdmEvTWFrZWZpbGUuaW4gYi9CaW5kaW5ncy9KYXZhL01ha2VmaWxlLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRmYTgxOTUKLS0tIC9kZXYvbnVsbAorKysgYi9CaW5kaW5ncy9KYXZhL01ha2VmaWxlLmluCkBAIC0wLDAgKzEsMTE1IEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIGxpYmJybGFwaSAtIEEgbGlicmFyeSBwcm92aWRpbmcgYWNjZXNzIHRvIGJyYWlsbGUgdGVybWluYWxzIGZvciBhcHBsaWNhdGlvbnMuCisjCisjIENvcHlyaWdodCAoQykgMjAwNi0yMDIzIGJ5CisjICAgU2FtdWVsIFRoaWJhdWx0IDxTYW11ZWwuVGhpYmF1bHRAZW5zLWx5b24ub3JnPgorIyAgIFPDqWJhc3RpZW4gSGluZGVyZXIgPFNlYmFzdGllbi5IaW5kZXJlckBlbnMtbHlvbi5vcmc+CisjCisjIGxpYmJybGFwaSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisjCisjIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyMgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorIyBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyMKKyMgV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworIworIyBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworaW5jbHVkZSAkKFNSQ19UT1ApYmluZGluZ3MubWsKKworSkFWQV9PSyA9IEBKQVZBX09LQAorSkFWQUMgPSBASkFWQUNACitKQVZBRE9DID0gQEpBVkFET0NACitKQVIgPSBASkFSQAorCitKQVZBX0pBUiA9IEBKQVZBX0pBUkAKK0pBVkFfSkFSX0RJUiA9IEBKQVZBX0pBUl9ESVJACitKQVZBX0pBUl9ERVNURElSID0gJChJTlNUQUxMX1JPT1QpCisKK0pBVkFfSk5JID0gQEpBVkFfSk5JQAorSkFWQV9KTklfRElSID0gQEpBVkFfSk5JX0RJUkAKK0pBVkFfSk5JX0hEUiA9IEBKQVZBX0pOSV9IRFJACitKQVZBX0pOSV9JTkMgPSBASkFWQV9KTklfSU5DQAorSkFWQV9KTklfRkxBR1MgPSBASkFWQV9KTklfRkxBR1NACitKQVZBX0pOSV9ERVNURElSID0gJChJTlNUQUxMX1JPT1QpCisKK2FsbDogamFyIGpuaSBkb2MKKworSkFWQV9TT1VSQ0VTID0gQ29uc3RhbnRzLmphdmEgJChTUkNfRElSKS8qLmphdmEgJChTUkNfRElSKS8qLyouamF2YQorCitKQVZBX0pOSV9GSUxFID0gJChMSUJfUEZYKSQoQVBJX05BTUUpX2phdmEuJChMSUJfRVhUKQoram5pOiAkKEpBVkFfSk5JX0ZJTEUpCisKKyQoSkFWQV9KTklfRklMRSk6IGJpbmRpbmdzLiRPIHwgJChBUElfTkFNRSkKKwkkKE1LTElCOjxuYW1lPj0kKEpBVkFfSk5JX0ZJTEUpLiQoQVBJX1ZFUlNJT04pKSAkQCBiaW5kaW5ncy4kTyAkKEFQSV9MREZMQUdTKQorCitiaW5kaW5ncy4kTzoKKwkkKENDKSAkKExJQkNGTEFHUykgJChKQVZBX0pOSV9GTEFHUykgLW8gJEAgLWMgJChTUkNfRElSKS9iaW5kaW5ncy5jCisKK0pBVkFfSkFSX0ZJTEUgPSAkKEFQSV9OQU1FKS5qYXIKK2phcjogJChKQVZBX0pBUl9GSUxFKQorCiskKEpBVkFfSkFSX0ZJTEUpOiBjbGFzc2VzLm1hZGUKKwkkKEpBUikgY2ZtICRAICQoU1JDX0RJUikvbWFuaWZlc3QgLUMgY2xhc3NlcyAuCisKK0pBVkFDX0xJTlRfT1BUSU9OUyA9IGNhc3QsZGVwcmVjYXRpb24sZmFsbHRocm91Z2gsZmluYWxseSxvdmVycmlkZXMscmF3dHlwZXMsdW5jaGVja2VkCisKK2NsYXNzZXMubWFkZTogJChKQVZBX1NPVVJDRVMpCisJJChJTlNUQUxMX0RJUkVDVE9SWSkgY2xhc3NlcworCSQoSkFWQUMpIC1YbGludDokKEpBVkFDX0xJTlRfT1BUSU9OUykgLWQgY2xhc3NlcyAtY2xhc3NwYXRoIC4gJF4KKwl0b3VjaCAkQAorCitDb25zdGFudHMuamF2YTogJChDT05TVEFOVFNfREVQRU5ERU5DSUVTKQorCSQoQVdLKSAkKENPTlNUQU5UU19BUkdVTUVOVFMpID4kQAorCitkb2M6IGRvYy5tYWRlCisKK2RvYy5tYWRlOiAkKEpBVkFfU09VUkNFUykKKwkkKElOU1RBTExfRElSRUNUT1JZKSBkb2MKKwkkKEpBVkFET0MpIC1xdWlldCAtZCBkb2MgLWF1dGhvciAtbm90aW1lc3RhbXAgLXZlcnNpb24gLXVzZSAkXgorCXRvdWNoICRACisKK2NsZWFuOjoKKwktcm0gLWYgQ29uc3RhbnRzLmphdmEgY2xhc3Nlcy5tYWRlICQoSkFWQV9KQVJfRklMRSkgJChKQVZBX0pOSV9GSUxFKQorCS1ybSAtZiAtciBjbGFzc2VzCisJLXJtIC1mIGRvYy5tYWRlCisJLXJtIC1mIC1yIGRvYworCitpbnN0YWxsOiBpbnN0YWxsLWphciBpbnN0YWxsLWpuaQorCitpbnN0YWxsLWphcjogaW5zdGFsbC1qYXItJChKQVZBX0pBUikKKworaW5zdGFsbC1qYXIteWVzOiBqYXIKKwkkKElOU1RBTExfRElSRUNUT1JZKSAkKEpBVkFfSkFSX0RFU1RESVIpJChKQVZBX0pBUl9ESVIpCisJJChJTlNUQUxMKSAkKEpBVkFfSkFSX0ZJTEUpICQoSkFWQV9KQVJfREVTVERJUikkKEpBVkFfSkFSX0RJUikKKworaW5zdGFsbC1qYXItbm86CisJQGVjaG8gamFyIG5vdCBpbnN0YWxsZWQKKworaW5zdGFsbC1qbmk6IGluc3RhbGwtam5pLSQoSkFWQV9KTkkpCisKK2luc3RhbGwtam5pLXllczogam5pCisJJChJTlNUQUxMX0RJUkVDVE9SWSkgJChKQVZBX0pOSV9ERVNURElSKSQoSkFWQV9KTklfRElSKQorCSQoSU5TVEFMTCkgJChKQVZBX0pOSV9GSUxFKSAkKEpBVkFfSk5JX0RFU1RESVIpJChKQVZBX0pOSV9ESVIpCisKK2luc3RhbGwtam5pLW5vOgorCUBlY2hvIGpuaSBub3QgaW5zdGFsbGVkCisKK3VuaW5zdGFsbDogdW5pbnN0YWxsLWphciB1bmluc3RhbGwtam5pCisKK3VuaW5zdGFsbC1qYXI6IHVuaW5zdGFsbC1qYXItJChKQVZBX0pBUikKKwordW5pbnN0YWxsLWphci15ZXM6CisJLXJtIC1mIC0tICQoSkFWQV9KQVJfREVTVERJUikkKEpBVkFfSkFSX0RJUikvJChKQVZBX0pBUl9GSUxFKQorCit1bmluc3RhbGwtamFyLW5vOgorCit1bmluc3RhbGwtam5pOiB1bmluc3RhbGwtam5pLSQoSkFWQV9KTkkpCisKK3VuaW5zdGFsbC1qbmkteWVzOgorCS1ybSAtZiAtLSAkKEpBVkFfSk5JX0RFU1RESVIpJChKQVZBX0pOSV9ESVIpLyQoSkFWQV9KTklfRklMRSkKKwordW5pbnN0YWxsLWpuaS1ubzoKKwpkaWZmIC0tZ2l0IGEvQmluZGluZ3MvSmF2YS9OYXRpdmVDb21wb25lbnQuamF2YSBiL0JpbmRpbmdzL0phdmEvTmF0aXZlQ29tcG9uZW50LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTg5MjNmZQotLS0gL2Rldi9udWxsCisrKyBiL0JpbmRpbmdzL0phdmEvTmF0aXZlQ29tcG9uZW50LmphdmEKQEAgLTAsMCArMSwzMyBAQAorLyoKKyAqIGxpYmJybGFwaSAtIEEgbGlicmFyeSBwcm92aWRpbmcgYWNjZXNzIHRvIGJyYWlsbGUgdGVybWluYWxzIGZvciBhcHBsaWNhdGlvbnMuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMjMgYnkKKyAqICAgU2FtdWVsIFRoaWJhdWx0IDxTYW11ZWwuVGhpYmF1bHRAZW5zLWx5b24ub3JnPgorICogICBTw6liYXN0aWVuIEhpbmRlcmVyIDxTZWJhc3RpZW4uSGluZGVyZXJAZW5zLWx5b24ub3JnPgorICoKKyAqIGxpYmJybGFwaSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorICoKKyAqIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyAqLworCitwYWNrYWdlIG9yZy5hMTF5LmJybGFwaTsKKworcHVibGljIGNsYXNzIE5hdGl2ZUNvbXBvbmVudCBleHRlbmRzIENvbXBvbmVudCB7CisgIHByaXZhdGUgbmF0aXZlIHN0YXRpYyB2b2lkIGluaXRpYWxpemVOYXRpdmVEYXRhICgpOworCisgIHN0YXRpYyB7CisgICAgU3lzdGVtLmxvYWRMaWJyYXJ5KCJicmxhcGlfamF2YSIpOworICAgIGluaXRpYWxpemVOYXRpdmVEYXRhKCk7CisgIH0KKworICBwcm90ZWN0ZWQgTmF0aXZlQ29tcG9uZW50ICgpIHsKKyAgICBzdXBlcigpOworICB9Cit9CmRpZmYgLS1naXQgYS9CaW5kaW5ncy9KYXZhL09wZXJhbmRFeGNlcHRpb24uamF2YSBiL0JpbmRpbmdzL0phdmEvT3BlcmFuZEV4Y2VwdGlvbi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUwMjY4ZjMKLS0tIC9kZXYvbnVsbAorKysgYi9CaW5kaW5ncy9KYXZhL09wZXJhbmRFeGNlcHRpb24uamF2YQpAQCAtMCwwICsxLDI2IEBACisvKgorICogbGliYnJsYXBpIC0gQSBsaWJyYXJ5IHByb3ZpZGluZyBhY2Nlc3MgdG8gYnJhaWxsZSB0ZXJtaW5hbHMgZm9yIGFwcGxpY2F0aW9ucy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAyMyBieQorICogICBTYW11ZWwgVGhpYmF1bHQgPFNhbXVlbC5UaGliYXVsdEBlbnMtbHlvbi5vcmc+CisgKiAgIFPDqWJhc3RpZW4gSGluZGVyZXIgPFNlYmFzdGllbi5IaW5kZXJlckBlbnMtbHlvbi5vcmc+CisgKgorICogbGliYnJsYXBpIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKK3BhY2thZ2Ugb3JnLmExMXkuYnJsYXBpOworCitwdWJsaWMgY2xhc3MgT3BlcmFuZEV4Y2VwdGlvbiBleHRlbmRzIFByb2dyYW1FeGNlcHRpb24geworICBwdWJsaWMgT3BlcmFuZEV4Y2VwdGlvbiAoU3RyaW5nIGZvcm1hdCwgT2JqZWN0Li4uIGFyZ3VtZW50cykgeworICAgIHN1cGVyKGZvcm1hdCwgYXJndW1lbnRzKTsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvQmluZGluZ3MvSmF2YS9PcGVyYW5kVXNhZ2UuamF2YSBiL0JpbmRpbmdzL0phdmEvT3BlcmFuZFVzYWdlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDU1ZTNhNgotLS0gL2Rldi9udWxsCisrKyBiL0JpbmRpbmdzL0phdmEvT3BlcmFuZFVzYWdlLmphdmEKQEAgLTAsMCArMSwyMTYgQEAKKy8qCisgKiBsaWJicmxhcGkgLSBBIGxpYnJhcnkgcHJvdmlkaW5nIGFjY2VzcyB0byBicmFpbGxlIHRlcm1pbmFscyBmb3IgYXBwbGljYXRpb25zLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNi0yMDIzIGJ5CisgKiAgIFNhbXVlbCBUaGliYXVsdCA8U2FtdWVsLlRoaWJhdWx0QGVucy1seW9uLm9yZz4KKyAqICAgU8OpYmFzdGllbiBIaW5kZXJlciA8U2ViYXN0aWVuLkhpbmRlcmVyQGVucy1seW9uLm9yZz4KKyAqCisgKiBsaWJicmxhcGkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorICoKKyAqIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyAqCisgKiBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisgKi8KKworcGFja2FnZSBvcmcuYTExeS5icmxhcGk7CisKK2ltcG9ydCBqYXZhLnV0aWwuTGlua2VkTGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworcHVibGljIGNsYXNzIE9wZXJhbmRVc2FnZSB7CisgIHByaXZhdGUgZmluYWwgU3RyaW5nIG9wZXJhbmREZXNjcmlwdGlvbjsKKworICBwdWJsaWMgT3BlcmFuZFVzYWdlIChTdHJpbmcgZGVzY3JpcHRpb24pIHsKKyAgICBvcGVyYW5kRGVzY3JpcHRpb24gPSBkZXNjcmlwdGlvbjsKKyAgfQorCisgIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0T3BlcmFuZERlc2NyaXB0aW9uICgpIHsKKyAgICByZXR1cm4gb3BlcmFuZERlc2NyaXB0aW9uOworICB9CisKKyAgcHJpdmF0ZSBJbnRlZ2VyIHJhbmdlTWluaW11bSA9IG51bGw7CisgIHByaXZhdGUgSW50ZWdlciByYW5nZU1heGltdW0gPSBudWxsOworICBwcml2YXRlIFN0cmluZyByYW5nZVVuaXRzID0gbnVsbDsKKyAgcHJpdmF0ZSBTdHJpbmcgcmFuZ2VDb21tZW50ID0gbnVsbDsKKworICBwdWJsaWMgZmluYWwgT3BlcmFuZFVzYWdlIHNldFJhbmdlTWluaW11bSAoaW50IG1pbmltdW0pIHsKKyAgICByYW5nZU1pbmltdW0gPSBtaW5pbXVtOworICAgIHJldHVybiB0aGlzOworICB9CisKKyAgcHVibGljIGZpbmFsIE9wZXJhbmRVc2FnZSBzZXRSYW5nZU1heGltdW0gKGludCBtYXhpbXVtKSB7CisgICAgcmFuZ2VNYXhpbXVtID0gbWF4aW11bTsKKyAgICByZXR1cm4gdGhpczsKKyAgfQorCisgIHB1YmxpYyBmaW5hbCBPcGVyYW5kVXNhZ2Ugc2V0UmFuZ2UgKGludCBtaW5pbXVtLCBpbnQgbWF4aW11bSkgeworICAgIHJldHVybiBzZXRSYW5nZU1pbmltdW0obWluaW11bSkuc2V0UmFuZ2VNYXhpbXVtKG1heGltdW0pOworICB9CisKKyAgcHVibGljIGZpbmFsIE9wZXJhbmRVc2FnZSBzZXRSYW5nZVVuaXRzIChTdHJpbmcgdW5pdHMpIHsKKyAgICByYW5nZVVuaXRzID0gdW5pdHM7CisgICAgcmV0dXJuIHRoaXM7CisgIH0KKworICBwdWJsaWMgZmluYWwgT3BlcmFuZFVzYWdlIHNldFJhbmdlQ29tbWVudCAoU3RyaW5nIHRleHQpIHsKKyAgICByYW5nZUNvbW1lbnQgPSB0ZXh0OworICAgIHJldHVybiB0aGlzOworICB9CisKKyAgcHJpdmF0ZSBzdGF0aWMgY2xhc3MgV29yZEVudHJ5IHsKKyAgICBwdWJsaWMgZmluYWwgU3RyaW5nIHdvcmQ7CisgICAgcHVibGljIGZpbmFsIEludGVnZXIgdmFsdWU7CisgICAgcHVibGljIGZpbmFsIFN0cmluZyBjb21tZW50OworCisgICAgcHVibGljIFdvcmRFbnRyeSAoU3RyaW5nIHdvcmQsIEludGVnZXIgdmFsdWUsIFN0cmluZyBjb21tZW50KSB7CisgICAgICB0aGlzLndvcmQgPSB3b3JkOworICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlOworICAgICAgdGhpcy5jb21tZW50ID0gY29tbWVudDsKKyAgICB9CisgIH0KKworICBwcml2YXRlIGZpbmFsIExpc3Q8V29yZEVudHJ5PiB3b3JkTGlzdCA9IG5ldyBMaW5rZWRMaXN0PD4oKTsKKworICBwdWJsaWMgZmluYWwgT3BlcmFuZFVzYWdlIGFkZFdvcmQgKFN0cmluZyB3b3JkLCBJbnRlZ2VyIHZhbHVlLCBTdHJpbmcgY29tbWVudCkgeworICAgIHdvcmRMaXN0LmFkZChuZXcgV29yZEVudHJ5KHdvcmQsIHZhbHVlLCBjb21tZW50KSk7CisgICAgcmV0dXJuIHRoaXM7CisgIH0KKworICBwdWJsaWMgZmluYWwgT3BlcmFuZFVzYWdlIGFkZFdvcmQgKFN0cmluZyB3b3JkLCBTdHJpbmcgY29tbWVudCkgeworICAgIHJldHVybiBhZGRXb3JkKHdvcmQsIG51bGwsIGNvbW1lbnQpOworICB9CisKKyAgcHVibGljIGZpbmFsIE9wZXJhbmRVc2FnZSBhZGRXb3JkIChTdHJpbmcgd29yZCwgaW50IHZhbHVlKSB7CisgICAgcmV0dXJuIGFkZFdvcmQod29yZCwgdmFsdWUsIG51bGwpOworICB9CisKKyAgcHVibGljIGZpbmFsIE9wZXJhbmRVc2FnZSBhZGRXb3JkIChTdHJpbmcgd29yZCkgeworICAgIHJldHVybiBhZGRXb3JkKHdvcmQsIG51bGwsIG51bGwpOworICB9CisKKyAgcHJpdmF0ZSBTdHJpbmcgZGVmYXVsdFdvcmQgPSBudWxsOworICBwcml2YXRlIEludGVnZXIgZGVmYXVsdFZhbHVlID0gbnVsbDsKKworICBwdWJsaWMgZmluYWwgT3BlcmFuZFVzYWdlIHNldERlZmF1bHQgKFN0cmluZyB3b3JkKSB7CisgICAgZGVmYXVsdFdvcmQgPSB3b3JkOworICAgIGRlZmF1bHRWYWx1ZSA9IG51bGw7CisgICAgcmV0dXJuIHRoaXM7CisgIH0KKworICBwdWJsaWMgZmluYWwgT3BlcmFuZFVzYWdlIHNldERlZmF1bHQgKGludCB2YWx1ZSkgeworICAgIGRlZmF1bHRXb3JkID0gbnVsbDsKKyAgICBkZWZhdWx0VmFsdWUgPSB2YWx1ZTsKKyAgICByZXR1cm4gdGhpczsKKyAgfQorCisgIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0RGVmYXVsdFdvcmQgKCkgeworICAgIGlmIChkZWZhdWx0V29yZCAhPSBudWxsKSByZXR1cm4gZGVmYXVsdFdvcmQ7CisgICAgaWYgKGRlZmF1bHRWYWx1ZSA9PSBudWxsKSByZXR1cm4gbnVsbDsKKworICAgIGZvciAoV29yZEVudHJ5IGVudHJ5IDogd29yZExpc3QpIHsKKyAgICAgIGlmIChlbnRyeS52YWx1ZSA9PSBkZWZhdWx0VmFsdWUpIHsKKyAgICAgICAgcmV0dXJuIChkZWZhdWx0V29yZCA9IGVudHJ5LndvcmQpOworICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBkZWZhdWx0VmFsdWUudG9TdHJpbmcoKTsKKyAgfQorCisgIHB1YmxpYyBmaW5hbCBJbnRlZ2VyIGdldERlZmF1bHRWYWx1ZSAoKSB7CisgICAgaWYgKGRlZmF1bHRWYWx1ZSAhPSBudWxsKSByZXR1cm4gZGVmYXVsdFZhbHVlOworICAgIGlmIChkZWZhdWx0V29yZCA9PSBudWxsKSByZXR1cm4gbnVsbDsKKworICAgIGZvciAoV29yZEVudHJ5IGVudHJ5IDogd29yZExpc3QpIHsKKyAgICAgIGlmIChlbnRyeS53b3JkLmVxdWFscyhkZWZhdWx0V29yZCkpIHsKKyAgICAgICAgcmV0dXJuIChkZWZhdWx0VmFsdWUgPSBlbnRyeS52YWx1ZSk7CisgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIG51bGw7CisgIH0KKworICBwdWJsaWMgZmluYWwgU3RyaW5nQnVpbGRlciBhcHBlbmRUbyAoU3RyaW5nQnVpbGRlciB1c2FnZSkgeworICAgIHVzYWdlLmFwcGVuZCgnXG4nKQorICAgICAgICAgLmFwcGVuZCgiVGhlICIpLmFwcGVuZChvcGVyYW5kRGVzY3JpcHRpb24pLmFwcGVuZCgiIG9wZXJhbmQgbXVzdCBiZSIpOworCisgICAgYm9vbGVhbiBoYXZlUmFuZ2VNaW5pbXVtID0gcmFuZ2VNaW5pbXVtICE9IG51bGw7CisgICAgYm9vbGVhbiBoYXZlUmFuZ2VNYXhpbXVtID0gcmFuZ2VNYXhpbXVtICE9IG51bGw7CisgICAgYm9vbGVhbiBoYXZlUmFuZ2UgPSBoYXZlUmFuZ2VNaW5pbXVtIHx8IGhhdmVSYW5nZU1heGltdW07CisKKyAgICBpZiAoaGF2ZVJhbmdlKSB7CisgICAgICBpZiAocmFuZ2VVbml0cyAhPSBudWxsKSB7CisgICAgICAgIHVzYWdlLmFwcGVuZCgiIGEgbnVtYmVyIG9mICIpLmFwcGVuZChyYW5nZVVuaXRzKTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIHVzYWdlLmFwcGVuZCgiIGFuIGludGVnZXIiKTsKKyAgICAgIH0KKworICAgICAgaWYgKGhhdmVSYW5nZU1pbmltdW0pIHsKKyAgICAgICAgU3RyaW5nIHBocmFzZSA9CisgICAgICAgICAgaGF2ZVJhbmdlTWF4aW11bT8KKyAgICAgICAgICAid2l0aGluIHRoZSByYW5nZSI6CisgICAgICAgICAgImdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byI7CisKKyAgICAgICAgdXNhZ2UuYXBwZW5kKCcgJykuYXBwZW5kKHBocmFzZSkuYXBwZW5kKCcgJykuYXBwZW5kKHJhbmdlTWluaW11bSk7CisgICAgICB9CisKKyAgICAgIGlmIChoYXZlUmFuZ2VNYXhpbXVtKSB7CisgICAgICAgIFN0cmluZyBwaHJhc2UgPQorICAgICAgICAgIGhhdmVSYW5nZU1pbmltdW0/CisgICAgICAgICAgInRocm91Z2giOgorICAgICAgICAgICJsZXNzIHRoYW4gb3IgZXF1YWwgdG8iOworCisgICAgICAgIHVzYWdlLmFwcGVuZCgnICcpLmFwcGVuZChwaHJhc2UpLmFwcGVuZCgnICcpLmFwcGVuZChyYW5nZU1heGltdW0pOworICAgICAgfQorCisgICAgICBpZiAocmFuZ2VDb21tZW50ICE9IG51bGwpIHsKKyAgICAgICAgdXNhZ2UuYXBwZW5kKCIgKCIpLmFwcGVuZChyYW5nZUNvbW1lbnQpLmFwcGVuZCgnKScpOworICAgICAgfQorICAgIH0KKworICAgIGlmICghd29yZExpc3QuaXNFbXB0eSgpKSB7CisgICAgICBpZiAoaGF2ZVJhbmdlKSB1c2FnZS5hcHBlbmQoIiwgb3IiKTsKKworICAgICAgaW50IGNvdW50ID0gd29yZExpc3Quc2l6ZSgpOworICAgICAgaWYgKGNvdW50ID4gMSkgdXNhZ2UuYXBwZW5kKCIgYW55IG9mIik7CisgICAgICBpbnQgbnVtYmVyID0gMDsKKworICAgICAgZm9yIChXb3JkRW50cnkgZW50cnkgOiB3b3JkTGlzdCkgeworICAgICAgICBudW1iZXIgKz0gMTsKKworICAgICAgICBpZiAobnVtYmVyID4gMSkgeworICAgICAgICAgIGlmIChjb3VudCA+IDIpIHVzYWdlLmFwcGVuZCgnLCcpOworICAgICAgICAgIGlmIChudW1iZXIgPT0gY291bnQpIHVzYWdlLmFwcGVuZCgiIG9yIik7CisgICAgICAgIH0KKworICAgICAgICB1c2FnZS5hcHBlbmQoJyAnKS5hcHBlbmQoZW50cnkud29yZCk7CisgICAgICAgIFN0cmluZyBjb21tZW50ID0gZW50cnkuY29tbWVudDsKKworICAgICAgICBpZiAoY29tbWVudCAhPSBudWxsKSB7CisgICAgICAgICAgdXNhZ2UuYXBwZW5kKCIgKCIpLmFwcGVuZChjb21tZW50KS5hcHBlbmQoJyknKTsKKyAgICAgICAgfQorICAgICAgfQorICAgIH0KKworICAgIHVzYWdlLmFwcGVuZCgiLiAiKTsKKworICAgIHsKKyAgICAgIFN0cmluZyB3b3JkID0gZ2V0RGVmYXVsdFdvcmQoKTsKKworICAgICAgaWYgKHdvcmQgIT0gbnVsbCkgeworICAgICAgICB1c2FnZS5hcHBlbmQoIklmIG5vdCBzcGVjaWZpZWQsICIpLmFwcGVuZCh3b3JkKS5hcHBlbmQoIiBpcyBhc3N1bWVkLiAiKTsKKyAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gdXNhZ2U7CisgIH0KKworICBAT3ZlcnJpZGUKKyAgcHVibGljIFN0cmluZyB0b1N0cmluZyAoKSB7CisgICAgcmV0dXJuIGFwcGVuZFRvKG5ldyBTdHJpbmdCdWlsZGVyKCkpLnRvU3RyaW5nKCk7CisgIH0KK30KZGlmZiAtLWdpdCBhL0JpbmRpbmdzL0phdmEvUGFyYW1ldGVyLmphdmEgYi9CaW5kaW5ncy9KYXZhL1BhcmFtZXRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlhZmU0YjUKLS0tIC9kZXYvbnVsbAorKysgYi9CaW5kaW5ncy9KYXZhL1BhcmFtZXRlci5qYXZhCkBAIC0wLDAgKzEsMjQ5IEBACisvKgorICogbGliYnJsYXBpIC0gQSBsaWJyYXJ5IHByb3ZpZGluZyBhY2Nlc3MgdG8gYnJhaWxsZSB0ZXJtaW5hbHMgZm9yIGFwcGxpY2F0aW9ucy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAyMyBieQorICogICBTYW11ZWwgVGhpYmF1bHQgPFNhbXVlbC5UaGliYXVsdEBlbnMtbHlvbi5vcmc+CisgKiAgIFPDqWJhc3RpZW4gSGluZGVyZXIgPFNlYmFzdGllbi5IaW5kZXJlckBlbnMtbHlvbi5vcmc+CisgKgorICogbGliYnJsYXBpIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKK3BhY2thZ2Ugb3JnLmExMXkuYnJsYXBpOworCitwdWJsaWMgYWJzdHJhY3QgY2xhc3MgUGFyYW1ldGVyIGV4dGVuZHMgUGFyYW1ldGVyQ29tcG9uZW50IHsKKyAgcHJpdmF0ZSBmaW5hbCBDb25uZWN0aW9uQmFzZSBjbGllbnRDb25uZWN0aW9uOworCisgIHByb3RlY3RlZCBQYXJhbWV0ZXIgKENvbm5lY3Rpb25CYXNlIGNvbm5lY3Rpb24pIHsKKyAgICBzdXBlcigpOworICAgIGNsaWVudENvbm5lY3Rpb24gPSBjb25uZWN0aW9uOworICB9CisKKyAgcHJpdmF0ZSBTdHJpbmcgcGFyYW1ldGVyTGFiZWwgPSBudWxsOworICBwdWJsaWMgU3RyaW5nIGdldExhYmVsICgpIHsKKyAgICBzeW5jaHJvbml6ZWQgKHRoaXMpIHsKKyAgICAgIGlmIChwYXJhbWV0ZXJMYWJlbCA9PSBudWxsKSB7CisgICAgICAgIHBhcmFtZXRlckxhYmVsID0gU3RyaW5ncy53b3JkaWZ5KAorICAgICAgICAgIFN0cmluZ3MucmVwbGFjZUFsbChnZXRDbGFzcygpLmdldFNpbXBsZU5hbWUoKSwgIlBhcmFtZXRlciQiLCAiIikKKyAgICAgICAgKTsKKyAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gcGFyYW1ldGVyTGFiZWw7CisgIH0KKworICBwcml2YXRlIFN0cmluZyBwYXJhbWV0ZXJOYW1lID0gbnVsbDsKKyAgcHVibGljIFN0cmluZyBnZXROYW1lICgpIHsKKyAgICBzeW5jaHJvbml6ZWQgKHRoaXMpIHsKKyAgICAgIGlmIChwYXJhbWV0ZXJOYW1lID09IG51bGwpIHsKKyAgICAgICAgcGFyYW1ldGVyTmFtZSA9IHRvT3BlcmFuZE5hbWUoZ2V0TGFiZWwoKSk7CisgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHBhcmFtZXRlck5hbWU7CisgIH0KKworICBwdWJsaWMgYWJzdHJhY3QgaW50IGdldFBhcmFtZXRlciAoKTsKKyAgcHVibGljIGFic3RyYWN0IGJvb2xlYW4gaXNHbG9iYWwgKCk7CisKKyAgcHVibGljIGJvb2xlYW4gaXNIaWRhYmxlICgpIHsKKyAgICByZXR1cm4gZmFsc2U7CisgIH0KKworICBwcm90ZWN0ZWQgZmluYWwgT2JqZWN0IGdldFZhbHVlIChsb25nIHN1YnBhcmFtKSB7CisgICAgcmV0dXJuIGNsaWVudENvbm5lY3Rpb24uZ2V0UGFyYW1ldGVyKGdldFBhcmFtZXRlcigpLCBzdWJwYXJhbSwgaXNHbG9iYWwoKSk7CisgIH0KKworICBwcm90ZWN0ZWQgZmluYWwgT2JqZWN0IGdldFZhbHVlICgpIHsKKyAgICByZXR1cm4gZ2V0VmFsdWUoMCk7CisgIH0KKworICBwcm90ZWN0ZWQgZmluYWwgdm9pZCBzZXRWYWx1ZSAobG9uZyBzdWJwYXJhbSwgT2JqZWN0IHZhbHVlKSB7CisgICAgY2xpZW50Q29ubmVjdGlvbi5zZXRQYXJhbWV0ZXIoZ2V0UGFyYW1ldGVyKCksIHN1YnBhcmFtLCBpc0dsb2JhbCgpLCB2YWx1ZSk7CisgIH0KKworICBwcm90ZWN0ZWQgZmluYWwgdm9pZCBzZXRWYWx1ZSAoT2JqZWN0IHZhbHVlKSB7CisgICAgc2V0VmFsdWUoMCwgdmFsdWUpOworICB9CisKKyAgcHVibGljIE9iamVjdCBnZXQgKGxvbmcgc3VicGFyYW0pIHsKKyAgICByZXR1cm4gbnVsbDsKKyAgfQorCisgIHB1YmxpYyBTdHJpbmcgdG9TdHJpbmcgKGxvbmcgc3VicGFyYW0pIHsKKyAgICByZXR1cm4gdG9TdHJpbmcoZ2V0KHN1YnBhcmFtKSk7CisgIH0KKworICBwdWJsaWMgT2JqZWN0IGdldCAoKSB7CisgICAgcmV0dXJuIG51bGw7CisgIH0KKworICBAT3ZlcnJpZGUKKyAgcHVibGljIFN0cmluZyB0b1N0cmluZyAoKSB7CisgICAgcmV0dXJuIHRvU3RyaW5nKGdldCgpKTsKKyAgfQorCisgIHB1YmxpYyBpbnRlcmZhY2UgU2V0dGFibGUgeworICB9CisKKyAgcHVibGljIGZpbmFsIGJvb2xlYW4gaXNTZXR0YWJsZSAoKSB7CisgICAgcmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBTZXR0YWJsZTsKKyAgfQorCisgIHB1YmxpYyBpbnRlcmZhY2UgU3RyaW5nU2V0dGFibGUgZXh0ZW5kcyBTZXR0YWJsZSB7CisgICAgcHVibGljIHZvaWQgc2V0IChTdHJpbmcgdmFsdWUpIHRocm93cyBTeW50YXhFeGNlcHRpb247CisgIH0KKworICBwdWJsaWMgaW50ZXJmYWNlIEJvb2xlYW5TZXR0YWJsZSBleHRlbmRzIFNldHRhYmxlIHsKKyAgICBwdWJsaWMgdm9pZCBzZXQgKGJvb2xlYW4gdmFsdWUpOworICB9CisKKyAgcHVibGljIGludGVyZmFjZSBCeXRlU2V0dGFibGUgZXh0ZW5kcyBTZXR0YWJsZSB7CisgICAgcHVibGljIHZvaWQgc2V0IChieXRlIHZhbHVlKTsKKworICAgIHB1YmxpYyBkZWZhdWx0IGJ5dGUgZ2V0TWluaW11bSAoKSB7CisgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBwdWJsaWMgZGVmYXVsdCBieXRlIGdldE1heGltdW0gKCkgeworICAgICAgcmV0dXJuIEJ5dGUuTUFYX1ZBTFVFOworICAgIH0KKyAgfQorCisgIHB1YmxpYyBpbnRlcmZhY2UgU2hvcnRTZXR0YWJsZSBleHRlbmRzIFNldHRhYmxlIHsKKyAgICBwdWJsaWMgdm9pZCBzZXQgKHNob3J0IHZhbHVlKTsKKworICAgIHB1YmxpYyBkZWZhdWx0IHNob3J0IGdldE1pbmltdW0gKCkgeworICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgcHVibGljIGRlZmF1bHQgc2hvcnQgZ2V0TWF4aW11bSAoKSB7CisgICAgICByZXR1cm4gU2hvcnQuTUFYX1ZBTFVFOworICAgIH0KKyAgfQorCisgIHB1YmxpYyBpbnRlcmZhY2UgSW50U2V0dGFibGUgZXh0ZW5kcyBTZXR0YWJsZSB7CisgICAgcHVibGljIHZvaWQgc2V0IChpbnQgdmFsdWUpOworCisgICAgcHVibGljIGRlZmF1bHQgaW50IGdldE1pbmltdW0gKCkgeworICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgcHVibGljIGRlZmF1bHQgaW50IGdldE1heGltdW0gKCkgeworICAgICAgcmV0dXJuIEludGVnZXIuTUFYX1ZBTFVFOworICAgIH0KKyAgfQorCisgIHB1YmxpYyBpbnRlcmZhY2UgTG9uZ1NldHRhYmxlIGV4dGVuZHMgU2V0dGFibGUgeworICAgIHB1YmxpYyB2b2lkIHNldCAobG9uZyB2YWx1ZSk7CisKKyAgICBwdWJsaWMgZGVmYXVsdCBsb25nIGdldE1pbmltdW0gKCkgeworICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgcHVibGljIGRlZmF1bHQgbG9uZyBnZXRNYXhpbXVtICgpIHsKKyAgICAgIHJldHVybiBMb25nLk1BWF9WQUxVRTsKKyAgICB9CisgIH0KKworICBwcm90ZWN0ZWQgZmluYWwgU3RyaW5nIGdldFBhcnNlRGVzY3JpcHRpb24gKCkgeworICAgIHJldHVybiBnZXROYW1lKCkgKyAiIHZhbHVlIjsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHNldCAoU3RyaW5nIHZhbHVlKSB0aHJvd3MgT3BlcmFuZEV4Y2VwdGlvbiB7CisgICAgaWYgKCFpc1NldHRhYmxlKCkpIHsKKyAgICAgIHRocm93IG5ldyBTZW1hbnRpY0V4Y2VwdGlvbigicGFyYW1ldGVyIGlzIG5vdCBzZXR0YWJsZTogJXMiLCBnZXROYW1lKCkpOworICAgIH0KKworICAgIGlmICh0aGlzIGluc3RhbmNlb2YgU3RyaW5nU2V0dGFibGUpIHsKKyAgICAgIFN0cmluZ1NldHRhYmxlIHNldHRhYmxlID0gKFN0cmluZ1NldHRhYmxlKXRoaXM7CisgICAgICBzZXR0YWJsZS5zZXQodmFsdWUpOworICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmICh0aGlzIGluc3RhbmNlb2YgQm9vbGVhblNldHRhYmxlKSB7CisgICAgICBCb29sZWFuU2V0dGFibGUgc2V0dGFibGUgPSAoQm9vbGVhblNldHRhYmxlKXRoaXM7CisgICAgICBzZXR0YWJsZS5zZXQoUGFyc2UuYXNCb29sZWFuKGdldFBhcnNlRGVzY3JpcHRpb24oKSwgdmFsdWUpKTsKKyAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAodGhpcyBpbnN0YW5jZW9mIEJ5dGVTZXR0YWJsZSkgeworICAgICAgQnl0ZVNldHRhYmxlIHNldHRhYmxlID0gKEJ5dGVTZXR0YWJsZSl0aGlzOworICAgICAgc2V0dGFibGUuc2V0KFBhcnNlLmFzQnl0ZShnZXRQYXJzZURlc2NyaXB0aW9uKCksIHZhbHVlLCBzZXR0YWJsZS5nZXRNaW5pbXVtKCksIHNldHRhYmxlLmdldE1heGltdW0oKSkpOworICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmICh0aGlzIGluc3RhbmNlb2YgU2hvcnRTZXR0YWJsZSkgeworICAgICAgU2hvcnRTZXR0YWJsZSBzZXR0YWJsZSA9IChTaG9ydFNldHRhYmxlKXRoaXM7CisgICAgICBzZXR0YWJsZS5zZXQoUGFyc2UuYXNTaG9ydChnZXRQYXJzZURlc2NyaXB0aW9uKCksIHZhbHVlLCBzZXR0YWJsZS5nZXRNaW5pbXVtKCksIHNldHRhYmxlLmdldE1heGltdW0oKSkpOworICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmICh0aGlzIGluc3RhbmNlb2YgSW50U2V0dGFibGUpIHsKKyAgICAgIEludFNldHRhYmxlIHNldHRhYmxlID0gKEludFNldHRhYmxlKXRoaXM7CisgICAgICBzZXR0YWJsZS5zZXQoUGFyc2UuYXNJbnQoZ2V0UGFyc2VEZXNjcmlwdGlvbigpLCB2YWx1ZSwgc2V0dGFibGUuZ2V0TWluaW11bSgpLCBzZXR0YWJsZS5nZXRNYXhpbXVtKCkpKTsKKyAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAodGhpcyBpbnN0YW5jZW9mIExvbmdTZXR0YWJsZSkgeworICAgICAgTG9uZ1NldHRhYmxlIHNldHRhYmxlID0gKExvbmdTZXR0YWJsZSl0aGlzOworICAgICAgc2V0dGFibGUuc2V0KFBhcnNlLmFzTG9uZyhnZXRQYXJzZURlc2NyaXB0aW9uKCksIHZhbHVlLCBzZXR0YWJsZS5nZXRNaW5pbXVtKCksIHNldHRhYmxlLmdldE1heGltdW0oKSkpOworICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHsKKyAgICAgIENsYXNzPD8+IHR5cGUgPSBTZXR0YWJsZS5jbGFzczsKKworICAgICAgZm9yIChDbGFzczw/PiBpIDogZ2V0Q2xhc3MoKS5nZXRJbnRlcmZhY2VzKCkpIHsKKyAgICAgICAgaWYgKHR5cGUuaXNBc3NpZ25hYmxlRnJvbShpKSkgeworICAgICAgICAgIHR5cGUgPSBpOworICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICB9CisKKyAgICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbigKKyAgICAgICAgU3RyaW5nLmZvcm1hdCgKKyAgICAgICAgICAic2V0IG5vdCBzdXBwb3J0ZWQ6ICVzOiAlcyIsIGdldE5hbWUoKSwgdHlwZS5nZXRTaW1wbGVOYW1lKCkKKyAgICAgICAgKQorICAgICAgKTsKKyAgICB9CisgIH0KKworICBwdWJsaWMgZmluYWwgc3RhdGljIGNsYXNzIFdhdGNoZXJIYW5kbGUgaW1wbGVtZW50cyBBdXRvQ2xvc2VhYmxlIHsKKyAgICBwcml2YXRlIGxvbmcgd2F0Y2hJZGVudGlmaWVyOworCisgICAgcHJpdmF0ZSBXYXRjaGVySGFuZGxlIChsb25nIGlkZW50aWZpZXIpIHsKKyAgICAgIHdhdGNoSWRlbnRpZmllciA9IGlkZW50aWZpZXI7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIHZvaWQgY2xvc2UgKCkgeworICAgICAgc3luY2hyb25pemVkICh0aGlzKSB7CisgICAgICAgIGlmICh3YXRjaElkZW50aWZpZXIgIT0gMCkgeworICAgICAgICAgIENvbm5lY3Rpb25CYXNlLnVud2F0Y2hQYXJhbWV0ZXIod2F0Y2hJZGVudGlmaWVyKTsKKyAgICAgICAgICB3YXRjaElkZW50aWZpZXIgPSAwOworICAgICAgICB9CisgICAgICB9CisgICAgfQorICB9CisKKyAgcHVibGljIGZpbmFsIFdhdGNoZXJIYW5kbGUgd2F0Y2ggKGxvbmcgc3VicGFyYW0sIFBhcmFtZXRlcldhdGNoZXIgd2F0Y2hlcikgeworICAgIHJldHVybiBuZXcgV2F0Y2hlckhhbmRsZSgKKyAgICAgIGNsaWVudENvbm5lY3Rpb24ud2F0Y2hQYXJhbWV0ZXIoCisgICAgICAgIGdldFBhcmFtZXRlcigpLCBzdWJwYXJhbSwgaXNHbG9iYWwoKSwgd2F0Y2hlcgorICAgICAgKQorICAgICk7CisgIH0KKworICBwdWJsaWMgZmluYWwgV2F0Y2hlckhhbmRsZSB3YXRjaCAoUGFyYW1ldGVyV2F0Y2hlciB3YXRjaGVyKSB7CisgICAgcmV0dXJuIHdhdGNoKDAsIHdhdGNoZXIpOworICB9Cit9CmRpZmYgLS1naXQgYS9CaW5kaW5ncy9KYXZhL1BhcmFtZXRlckNvbXBvbmVudC5qYXZhIGIvQmluZGluZ3MvSmF2YS9QYXJhbWV0ZXJDb21wb25lbnQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42Zjc1NjE5Ci0tLSAvZGV2L251bGwKKysrIGIvQmluZGluZ3MvSmF2YS9QYXJhbWV0ZXJDb21wb25lbnQuamF2YQpAQCAtMCwwICsxLDEzOSBAQAorLyoKKyAqIGxpYmJybGFwaSAtIEEgbGlicmFyeSBwcm92aWRpbmcgYWNjZXNzIHRvIGJyYWlsbGUgdGVybWluYWxzIGZvciBhcHBsaWNhdGlvbnMuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMjMgYnkKKyAqICAgU2FtdWVsIFRoaWJhdWx0IDxTYW11ZWwuVGhpYmF1bHRAZW5zLWx5b24ub3JnPgorICogICBTw6liYXN0aWVuIEhpbmRlcmVyIDxTZWJhc3RpZW4uSGluZGVyZXJAZW5zLWx5b24ub3JnPgorICoKKyAqIGxpYmJybGFwaSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorICoKKyAqIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyAqLworCitwYWNrYWdlIG9yZy5hMTF5LmJybGFwaTsKKworaW1wb3J0IGphdmEudXRpbC5BcnJheXM7CisKK3B1YmxpYyBhYnN0cmFjdCBjbGFzcyBQYXJhbWV0ZXJDb21wb25lbnQgZXh0ZW5kcyBDb21wb25lbnQgeworICBwcm90ZWN0ZWQgUGFyYW1ldGVyQ29tcG9uZW50ICgpIHsKKyAgICBzdXBlcigpOworICB9CisKKyAgcHVibGljIHN0YXRpYyBTdHJpbmcgYXNTdHJpbmcgKE9iamVjdCB2YWx1ZSkgeworICAgIHJldHVybiAoU3RyaW5nKXZhbHVlOworICB9CisKKyAgcHVibGljIHN0YXRpYyBib29sZWFuW10gYXNCb29sZWFuQXJyYXkgKE9iamVjdCB2YWx1ZSkgeworICAgIHJldHVybiAoYm9vbGVhbltdKXZhbHVlOworICB9CisKKyAgcHVibGljIHN0YXRpYyBieXRlW10gYXNCeXRlQXJyYXkgKE9iamVjdCB2YWx1ZSkgeworICAgIHJldHVybiAoYnl0ZVtdKXZhbHVlOworICB9CisKKyAgcHVibGljIHN0YXRpYyBzaG9ydFtdIGFzU2hvcnRBcnJheSAoT2JqZWN0IHZhbHVlKSB7CisgICAgcmV0dXJuIChzaG9ydFtdKXZhbHVlOworICB9CisKKyAgcHVibGljIHN0YXRpYyBpbnRbXSBhc0ludEFycmF5IChPYmplY3QgdmFsdWUpIHsKKyAgICByZXR1cm4gKGludFtdKXZhbHVlOworICB9CisKKyAgcHVibGljIHN0YXRpYyBsb25nW10gYXNMb25nQXJyYXkgKE9iamVjdCB2YWx1ZSkgeworICAgIHJldHVybiAobG9uZ1tdKXZhbHVlOworICB9CisKKyAgcHVibGljIHN0YXRpYyBib29sZWFuIGFzQm9vbGVhbiAoT2JqZWN0IHZhbHVlKSB7CisgICAgcmV0dXJuIGFzQm9vbGVhbkFycmF5KHZhbHVlKVswXTsKKyAgfQorCisgIHB1YmxpYyBzdGF0aWMgYnl0ZSBhc0J5dGUgKE9iamVjdCB2YWx1ZSkgeworICAgIHJldHVybiBhc0J5dGVBcnJheSh2YWx1ZSlbMF07CisgIH0KKworICBwdWJsaWMgc3RhdGljIHNob3J0IGFzU2hvcnQgKE9iamVjdCB2YWx1ZSkgeworICAgIHJldHVybiBhc1Nob3J0QXJyYXkodmFsdWUpWzBdOworICB9CisKKyAgcHVibGljIHN0YXRpYyBpbnQgYXNJbnQgKE9iamVjdCB2YWx1ZSkgeworICAgIHJldHVybiBhc0ludEFycmF5KHZhbHVlKVswXTsKKyAgfQorCisgIHB1YmxpYyBzdGF0aWMgbG9uZyBhc0xvbmcgKE9iamVjdCB2YWx1ZSkgeworICAgIHJldHVybiBhc0xvbmdBcnJheSh2YWx1ZSlbMF07CisgIH0KKworICBwdWJsaWMgc3RhdGljIERpc3BsYXlTaXplIGFzRGlzcGxheVNpemUgKE9iamVjdCB2YWx1ZSkgeworICAgIHJldHVybiBuZXcgRGlzcGxheVNpemUoYXNJbnRBcnJheSh2YWx1ZSkpOworICB9CisKKyAgcHVibGljIHN0YXRpYyBCaXRNYXNrIGFzQml0TWFzayAoT2JqZWN0IHZhbHVlKSB7CisgICAgcmV0dXJuIG5ldyBCaXRNYXNrKGFzQnl0ZUFycmF5KHZhbHVlKSk7CisgIH0KKworICBwdWJsaWMgc3RhdGljIFJvd0NlbGxzIGFzUm93Q2VsbHMgKE9iamVjdCB2YWx1ZSkgeworICAgIHJldHVybiBuZXcgUm93Q2VsbHMoYXNCeXRlQXJyYXkodmFsdWUpKTsKKyAgfQorCisgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGFzRG90cyAoYnl0ZSBjZWxsKSB7CisgICAgaWYgKGNlbGwgPT0gMCkgcmV0dXJuICIwIjsKKworICAgIFN0cmluZ0J1aWxkZXIgbnVtYmVycyA9IG5ldyBTdHJpbmdCdWlsZGVyKCk7CisgICAgaW50IGRvdHMgPSBjZWxsICYgQllURV9NQVNLOworICAgIGludCBkb3QgPSAxOworCisgICAgd2hpbGUgKHRydWUpIHsKKyAgICAgIGlmICgoZG90cyAmIDEpICE9IDApIG51bWJlcnMuYXBwZW5kKGRvdCk7CisgICAgICBpZiAoKGRvdHMgPj49IDEpID09IDApIGJyZWFrOworICAgICAgZG90ICs9IDE7CisgICAgfQorCisgICAgcmV0dXJuIG51bWJlcnMudG9TdHJpbmcoKTsKKyAgfQorCisgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGFzRG90cyAoYnl0ZVtdIGNlbGxzKSB7CisgICAgaW50IGNvdW50ID0gY2VsbHMubGVuZ3RoOworICAgIFN0cmluZ1tdIGRvdHMgPSBuZXcgU3RyaW5nW2NvdW50XTsKKworICAgIGZvciAoaW50IGk9MDsgaTxjb3VudDsgaSs9MSkgeworICAgICAgZG90c1tpXSA9IGFzRG90cyhjZWxsc1tpXSk7CisgICAgfQorCisgICAgcmV0dXJuIEFycmF5cy50b1N0cmluZyhkb3RzKTsKKyAgfQorCisgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIHRvU3RyaW5nIChPYmplY3QgdmFsdWUpIHsKKyAgICBpZiAodmFsdWUgPT0gbnVsbCkgcmV0dXJuIG51bGw7CisKKyAgICBpZiAodmFsdWUuZ2V0Q2xhc3MoKS5pc0FycmF5KCkpIHsKKyAgICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIGJvb2xlYW5bXSkgeworICAgICAgICByZXR1cm4gQXJyYXlzLnRvU3RyaW5nKChib29sZWFuW10pdmFsdWUpOworICAgICAgfQorCisgICAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBieXRlW10pIHsKKyAgICAgICAgcmV0dXJuIEFycmF5cy50b1N0cmluZygoYnl0ZVtdKXZhbHVlKTsKKyAgICAgIH0KKworICAgICAgaWYgKHZhbHVlIGluc3RhbmNlb2Ygc2hvcnRbXSkgeworICAgICAgICByZXR1cm4gQXJyYXlzLnRvU3RyaW5nKChzaG9ydFtdKXZhbHVlKTsKKyAgICAgIH0KKworICAgICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgaW50W10pIHsKKyAgICAgICAgcmV0dXJuIEFycmF5cy50b1N0cmluZygoaW50W10pdmFsdWUpOworICAgICAgfQorCisgICAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBsb25nW10pIHsKKyAgICAgICAgcmV0dXJuIEFycmF5cy50b1N0cmluZygobG9uZ1tdKXZhbHVlKTsKKyAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gdmFsdWUudG9TdHJpbmcoKTsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvQmluZGluZ3MvSmF2YS9QYXJhbWV0ZXJXYXRjaGVyLmphdmEgYi9CaW5kaW5ncy9KYXZhL1BhcmFtZXRlcldhdGNoZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMjA2MTM2Ci0tLSAvZGV2L251bGwKKysrIGIvQmluZGluZ3MvSmF2YS9QYXJhbWV0ZXJXYXRjaGVyLmphdmEKQEAgLTAsMCArMSwyOCBAQAorLyoKKyAqIGxpYmJybGFwaSAtIEEgbGlicmFyeSBwcm92aWRpbmcgYWNjZXNzIHRvIGJyYWlsbGUgdGVybWluYWxzIGZvciBhcHBsaWNhdGlvbnMuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMjMgYnkKKyAqICAgU2FtdWVsIFRoaWJhdWx0IDxTYW11ZWwuVGhpYmF1bHRAZW5zLWx5b24ub3JnPgorICogICBTw6liYXN0aWVuIEhpbmRlcmVyIDxTZWJhc3RpZW4uSGluZGVyZXJAZW5zLWx5b24ub3JnPgorICoKKyAqIGxpYmJybGFwaSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorICoKKyAqIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyAqLworCitwYWNrYWdlIG9yZy5hMTF5LmJybGFwaTsKKworcHVibGljIGFic3RyYWN0IGNsYXNzIFBhcmFtZXRlcldhdGNoZXIgZXh0ZW5kcyBQYXJhbWV0ZXJDb21wb25lbnQgeworICBwdWJsaWMgYWJzdHJhY3Qgdm9pZCBvblBhcmFtZXRlclVwZGF0ZWQgKAorICAgIGludCBwYXJhbWV0ZXIsCisgICAgbG9uZyBzdWJwYXJhbSwKKyAgICBPYmplY3QgdmFsdWUKKyAgKTsKK30KZGlmZiAtLWdpdCBhL0JpbmRpbmdzL0phdmEvUGFyYW1ldGVycy5qYXZhIGIvQmluZGluZ3MvSmF2YS9QYXJhbWV0ZXJzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTU2YTQzOAotLS0gL2Rldi9udWxsCisrKyBiL0JpbmRpbmdzL0phdmEvUGFyYW1ldGVycy5qYXZhCkBAIC0wLDAgKzEsMTY4IEBACisvKgorICogbGliYnJsYXBpIC0gQSBsaWJyYXJ5IHByb3ZpZGluZyBhY2Nlc3MgdG8gYnJhaWxsZSB0ZXJtaW5hbHMgZm9yIGFwcGxpY2F0aW9ucy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAyMyBieQorICogICBTYW11ZWwgVGhpYmF1bHQgPFNhbXVlbC5UaGliYXVsdEBlbnMtbHlvbi5vcmc+CisgKiAgIFPDqWJhc3RpZW4gSGluZGVyZXIgPFNlYmFzdGllbi5IaW5kZXJlckBlbnMtbHlvbi5vcmc+CisgKgorICogbGliYnJsYXBpIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKK3BhY2thZ2Ugb3JnLmExMXkuYnJsYXBpOworCitpbXBvcnQgamF2YS5sYW5nLnJlZmxlY3QuRmllbGQ7CitpbXBvcnQgamF2YS5sYW5nLnJlZmxlY3QuTW9kaWZpZXI7CitpbXBvcnQgamF2YS51dGlsLkFycmF5czsKK2ltcG9ydCBvcmcuYTExeS5icmxhcGkucGFyYW1ldGVycy4qOworCitwdWJsaWMgY2xhc3MgUGFyYW1ldGVycyBleHRlbmRzIFBhcmFtZXRlckNvbXBvbmVudCB7CisgIHB1YmxpYyBmaW5hbCBTZXJ2ZXJWZXJzaW9uUGFyYW1ldGVyIHNlcnZlclZlcnNpb247CisgIHB1YmxpYyBmaW5hbCBDbGllbnRQcmlvcml0eVBhcmFtZXRlciBjbGllbnRQcmlvcml0eTsKKyAgcHVibGljIGZpbmFsIERyaXZlck5hbWVQYXJhbWV0ZXIgZHJpdmVyTmFtZTsKKyAgcHVibGljIGZpbmFsIERyaXZlckNvZGVQYXJhbWV0ZXIgZHJpdmVyQ29kZTsKKyAgcHVibGljIGZpbmFsIERyaXZlclZlcnNpb25QYXJhbWV0ZXIgZHJpdmVyVmVyc2lvbjsKKyAgcHVibGljIGZpbmFsIERldmljZU1vZGVsUGFyYW1ldGVyIGRldmljZU1vZGVsOworICBwdWJsaWMgZmluYWwgRGV2aWNlQ2VsbFNpemVQYXJhbWV0ZXIgZGV2aWNlQ2VsbFNpemU7CisgIHB1YmxpYyBmaW5hbCBEaXNwbGF5U2l6ZVBhcmFtZXRlciBkaXNwbGF5U2l6ZTsKKyAgcHVibGljIGZpbmFsIERldmljZUlkZW50aWZpZXJQYXJhbWV0ZXIgZGV2aWNlSWRlbnRpZmllcjsKKyAgcHVibGljIGZpbmFsIERldmljZVNwZWVkUGFyYW1ldGVyIGRldmljZVNwZWVkOworICBwdWJsaWMgZmluYWwgRGV2aWNlT25saW5lUGFyYW1ldGVyIGRldmljZU9ubGluZTsKKyAgcHVibGljIGZpbmFsIFJldGFpbkRvdHNQYXJhbWV0ZXIgcmV0YWluRG90czsKKyAgcHVibGljIGZpbmFsIENvbXB1dGVyQnJhaWxsZUNlbGxTaXplUGFyYW1ldGVyIGNvbXB1dGVyQnJhaWxsZUNlbGxTaXplOworICBwdWJsaWMgZmluYWwgTGl0ZXJhcnlCcmFpbGxlUGFyYW1ldGVyIGxpdGVyYXJ5QnJhaWxsZTsKKyAgcHVibGljIGZpbmFsIEN1cnNvckRvdHNQYXJhbWV0ZXIgY3Vyc29yRG90czsKKyAgcHVibGljIGZpbmFsIEN1cnNvckJsaW5rUGVyaW9kUGFyYW1ldGVyIGN1cnNvckJsaW5rUGVyaW9kOworICBwdWJsaWMgZmluYWwgQ3Vyc29yQmxpbmtQZXJjZW50YWdlUGFyYW1ldGVyIGN1cnNvckJsaW5rUGVyY2VudGFnZTsKKyAgcHVibGljIGZpbmFsIFJlbmRlcmVkQ2VsbHNQYXJhbWV0ZXIgcmVuZGVyZWRDZWxsczsKKyAgcHVibGljIGZpbmFsIFNraXBJZGVudGljYWxMaW5lc1BhcmFtZXRlciBza2lwSWRlbnRpY2FsTGluZXM7CisgIHB1YmxpYyBmaW5hbCBBdWRpYmxlQWxlcnRzUGFyYW1ldGVyIGF1ZGlibGVBbGVydHM7CisgIHB1YmxpYyBmaW5hbCBDbGlwYm9hcmRDb250ZW50UGFyYW1ldGVyIGNsaXBib2FyZENvbnRlbnQ7CisgIHB1YmxpYyBmaW5hbCBCb3VuZENvbW1hbmRLZXljb2Rlc1BhcmFtZXRlciBib3VuZENvbW1hbmRLZXljb2RlczsKKyAgcHVibGljIGZpbmFsIENvbW1hbmRLZXljb2RlTmFtZVBhcmFtZXRlciBjb21tYW5kS2V5Y29kZU5hbWU7CisgIHB1YmxpYyBmaW5hbCBDb21tYW5kS2V5Y29kZVN1bW1hcnlQYXJhbWV0ZXIgY29tbWFuZEtleWNvZGVTdW1tYXJ5OworICBwdWJsaWMgZmluYWwgRGVmaW5lZERyaXZlcktleWNvZGVzUGFyYW1ldGVyIGRlZmluZWREcml2ZXJLZXljb2RlczsKKyAgcHVibGljIGZpbmFsIERyaXZlcktleWNvZGVOYW1lUGFyYW1ldGVyIGRyaXZlcktleWNvZGVOYW1lOworICBwdWJsaWMgZmluYWwgRHJpdmVyS2V5Y29kZVN1bW1hcnlQYXJhbWV0ZXIgZHJpdmVyS2V5Y29kZVN1bW1hcnk7CisgIHB1YmxpYyBmaW5hbCBDb21wdXRlckJyYWlsbGVSb3dzTWFza1BhcmFtZXRlciBjb21wdXRlckJyYWlsbGVSb3dzTWFzazsKKyAgcHVibGljIGZpbmFsIENvbXB1dGVyQnJhaWxsZVJvd0NlbGxzUGFyYW1ldGVyIGNvbXB1dGVyQnJhaWxsZVJvd0NlbGxzOworICBwdWJsaWMgZmluYWwgQ29tcHV0ZXJCcmFpbGxlVGFibGVQYXJhbWV0ZXIgY29tcHV0ZXJCcmFpbGxlVGFibGU7CisgIHB1YmxpYyBmaW5hbCBMaXRlcmFyeUJyYWlsbGVUYWJsZVBhcmFtZXRlciBsaXRlcmFyeUJyYWlsbGVUYWJsZTsKKyAgcHVibGljIGZpbmFsIE1lc3NhZ2VMb2NhbGVQYXJhbWV0ZXIgbWVzc2FnZUxvY2FsZTsKKworICBwdWJsaWMgUGFyYW1ldGVycyAoQ29ubmVjdGlvbkJhc2UgY29ubmVjdGlvbikgeworICAgIHN1cGVyKCk7CisKKyAgICBzZXJ2ZXJWZXJzaW9uID0gbmV3IFNlcnZlclZlcnNpb25QYXJhbWV0ZXIoY29ubmVjdGlvbik7CisgICAgY2xpZW50UHJpb3JpdHkgPSBuZXcgQ2xpZW50UHJpb3JpdHlQYXJhbWV0ZXIoY29ubmVjdGlvbik7CisgICAgZHJpdmVyTmFtZSA9IG5ldyBEcml2ZXJOYW1lUGFyYW1ldGVyKGNvbm5lY3Rpb24pOworICAgIGRyaXZlckNvZGUgPSBuZXcgRHJpdmVyQ29kZVBhcmFtZXRlcihjb25uZWN0aW9uKTsKKyAgICBkcml2ZXJWZXJzaW9uID0gbmV3IERyaXZlclZlcnNpb25QYXJhbWV0ZXIoY29ubmVjdGlvbik7CisgICAgZGV2aWNlTW9kZWwgPSBuZXcgRGV2aWNlTW9kZWxQYXJhbWV0ZXIoY29ubmVjdGlvbik7CisgICAgZGV2aWNlQ2VsbFNpemUgPSBuZXcgRGV2aWNlQ2VsbFNpemVQYXJhbWV0ZXIoY29ubmVjdGlvbik7CisgICAgZGlzcGxheVNpemUgPSBuZXcgRGlzcGxheVNpemVQYXJhbWV0ZXIoY29ubmVjdGlvbik7CisgICAgZGV2aWNlSWRlbnRpZmllciA9IG5ldyBEZXZpY2VJZGVudGlmaWVyUGFyYW1ldGVyKGNvbm5lY3Rpb24pOworICAgIGRldmljZVNwZWVkID0gbmV3IERldmljZVNwZWVkUGFyYW1ldGVyKGNvbm5lY3Rpb24pOworICAgIGRldmljZU9ubGluZSA9IG5ldyBEZXZpY2VPbmxpbmVQYXJhbWV0ZXIoY29ubmVjdGlvbik7CisgICAgcmV0YWluRG90cyA9IG5ldyBSZXRhaW5Eb3RzUGFyYW1ldGVyKGNvbm5lY3Rpb24pOworICAgIGNvbXB1dGVyQnJhaWxsZUNlbGxTaXplID0gbmV3IENvbXB1dGVyQnJhaWxsZUNlbGxTaXplUGFyYW1ldGVyKGNvbm5lY3Rpb24pOworICAgIGxpdGVyYXJ5QnJhaWxsZSA9IG5ldyBMaXRlcmFyeUJyYWlsbGVQYXJhbWV0ZXIoY29ubmVjdGlvbik7CisgICAgY3Vyc29yRG90cyA9IG5ldyBDdXJzb3JEb3RzUGFyYW1ldGVyKGNvbm5lY3Rpb24pOworICAgIGN1cnNvckJsaW5rUGVyaW9kID0gbmV3IEN1cnNvckJsaW5rUGVyaW9kUGFyYW1ldGVyKGNvbm5lY3Rpb24pOworICAgIGN1cnNvckJsaW5rUGVyY2VudGFnZSA9IG5ldyBDdXJzb3JCbGlua1BlcmNlbnRhZ2VQYXJhbWV0ZXIoY29ubmVjdGlvbik7CisgICAgcmVuZGVyZWRDZWxscyA9IG5ldyBSZW5kZXJlZENlbGxzUGFyYW1ldGVyKGNvbm5lY3Rpb24pOworICAgIHNraXBJZGVudGljYWxMaW5lcyA9IG5ldyBTa2lwSWRlbnRpY2FsTGluZXNQYXJhbWV0ZXIoY29ubmVjdGlvbik7CisgICAgYXVkaWJsZUFsZXJ0cyA9IG5ldyBBdWRpYmxlQWxlcnRzUGFyYW1ldGVyKGNvbm5lY3Rpb24pOworICAgIGNsaXBib2FyZENvbnRlbnQgPSBuZXcgQ2xpcGJvYXJkQ29udGVudFBhcmFtZXRlcihjb25uZWN0aW9uKTsKKyAgICBib3VuZENvbW1hbmRLZXljb2RlcyA9IG5ldyBCb3VuZENvbW1hbmRLZXljb2Rlc1BhcmFtZXRlcihjb25uZWN0aW9uKTsKKyAgICBjb21tYW5kS2V5Y29kZU5hbWUgPSBuZXcgQ29tbWFuZEtleWNvZGVOYW1lUGFyYW1ldGVyKGNvbm5lY3Rpb24pOworICAgIGNvbW1hbmRLZXljb2RlU3VtbWFyeSA9IG5ldyBDb21tYW5kS2V5Y29kZVN1bW1hcnlQYXJhbWV0ZXIoY29ubmVjdGlvbik7CisgICAgZGVmaW5lZERyaXZlcktleWNvZGVzID0gbmV3IERlZmluZWREcml2ZXJLZXljb2Rlc1BhcmFtZXRlcihjb25uZWN0aW9uKTsKKyAgICBkcml2ZXJLZXljb2RlTmFtZSA9IG5ldyBEcml2ZXJLZXljb2RlTmFtZVBhcmFtZXRlcihjb25uZWN0aW9uKTsKKyAgICBkcml2ZXJLZXljb2RlU3VtbWFyeSA9IG5ldyBEcml2ZXJLZXljb2RlU3VtbWFyeVBhcmFtZXRlcihjb25uZWN0aW9uKTsKKyAgICBjb21wdXRlckJyYWlsbGVSb3dzTWFzayA9IG5ldyBDb21wdXRlckJyYWlsbGVSb3dzTWFza1BhcmFtZXRlcihjb25uZWN0aW9uKTsKKyAgICBjb21wdXRlckJyYWlsbGVSb3dDZWxscyA9IG5ldyBDb21wdXRlckJyYWlsbGVSb3dDZWxsc1BhcmFtZXRlcihjb25uZWN0aW9uKTsKKyAgICBjb21wdXRlckJyYWlsbGVUYWJsZSA9IG5ldyBDb21wdXRlckJyYWlsbGVUYWJsZVBhcmFtZXRlcihjb25uZWN0aW9uKTsKKyAgICBsaXRlcmFyeUJyYWlsbGVUYWJsZSA9IG5ldyBMaXRlcmFyeUJyYWlsbGVUYWJsZVBhcmFtZXRlcihjb25uZWN0aW9uKTsKKyAgICBtZXNzYWdlTG9jYWxlID0gbmV3IE1lc3NhZ2VMb2NhbGVQYXJhbWV0ZXIoY29ubmVjdGlvbik7CisgIH0KKworICBwcml2YXRlIGZpbmFsIFBhcmFtZXRlcltdIG5ld1BhcmFtZXRlckFycmF5ICgpIHsKKyAgICBDbGFzczxQYXJhbWV0ZXJzPiB0eXBlID0gUGFyYW1ldGVycy5jbGFzczsKKworICAgIEZpZWxkW10gZmllbGRzID0gdHlwZS5nZXRGaWVsZHMoKTsKKyAgICBpbnQgZmllbGRDb3VudCA9IGZpZWxkcy5sZW5ndGg7CisKKyAgICBQYXJhbWV0ZXJbXSBwYXJhbWV0ZXJzID0gbmV3IFBhcmFtZXRlcltmaWVsZENvdW50XTsKKyAgICBpbnQgcGFyYW1ldGVyQ291bnQgPSAwOworCisgICAgZm9yIChGaWVsZCBmaWVsZCA6IGZpZWxkcykgeworICAgICAgaW50IG1vZGlmaWVycyA9IGZpZWxkLmdldE1vZGlmaWVycygpOworICAgICAgaWYgKChtb2RpZmllcnMgJiBNb2RpZmllci5QVUJMSUMpID09IDApIGNvbnRpbnVlOworICAgICAgaWYgKChtb2RpZmllcnMgJiBNb2RpZmllci5GSU5BTCkgPT0gMCkgY29udGludWU7CisgICAgICBpZiAoIXR5cGUuZXF1YWxzKGZpZWxkLmdldERlY2xhcmluZ0NsYXNzKCkpKSBjb250aW51ZTsKKworICAgICAgdHJ5IHsKKyAgICAgICAgcGFyYW1ldGVyc1twYXJhbWV0ZXJDb3VudF0gPSAoUGFyYW1ldGVyKWZpZWxkLmdldCh0aGlzKTsKKyAgICAgICAgcGFyYW1ldGVyQ291bnQgKz0gMTsKKyAgICAgIH0gY2F0Y2ggKElsbGVnYWxBY2Nlc3NFeGNlcHRpb24gZXhjZXB0aW9uKSB7CisgICAgICAgIGNvbnRpbnVlOworICAgICAgfQorICAgIH0KKworICAgIFBhcmFtZXRlcltdIHJlc3VsdCA9IG5ldyBQYXJhbWV0ZXJbcGFyYW1ldGVyQ291bnRdOworICAgIFN5c3RlbS5hcnJheWNvcHkocGFyYW1ldGVycywgMCwgcmVzdWx0LCAwLCBwYXJhbWV0ZXJDb3VudCk7CisgICAgcmV0dXJuIHJlc3VsdDsKKyAgfQorCisgIHByaXZhdGUgUGFyYW1ldGVyW10gcGFyYW1ldGVyQXJyYXkgPSBudWxsOworICBwdWJsaWMgZmluYWwgUGFyYW1ldGVyW10gZ2V0ICgpIHsKKyAgICBzeW5jaHJvbml6ZWQgKHRoaXMpIHsKKyAgICAgIGlmIChwYXJhbWV0ZXJBcnJheSA9PSBudWxsKSB7CisgICAgICAgIHBhcmFtZXRlckFycmF5ID0gbmV3UGFyYW1ldGVyQXJyYXkoKTsKKyAgICAgIH0KKyAgICB9CisKKyAgICBpbnQgY291bnQgPSBwYXJhbWV0ZXJBcnJheS5sZW5ndGg7CisgICAgUGFyYW1ldGVyW10gcmVzdWx0ID0gbmV3IFBhcmFtZXRlcltjb3VudF07CisgICAgU3lzdGVtLmFycmF5Y29weShwYXJhbWV0ZXJBcnJheSwgMCwgcmVzdWx0LCAwLCBjb3VudCk7CisgICAgcmV0dXJuIHJlc3VsdDsKKyAgfQorCisgIHByaXZhdGUgZmluYWwgS2V5d29yZE1hcDxQYXJhbWV0ZXI+IG5ld1BhcmFtZXRlck5hbWVNYXAgKCkgeworICAgIEtleXdvcmRNYXA8UGFyYW1ldGVyPiBtYXAgPSBuZXcgS2V5d29yZE1hcDw+KCk7CisKKyAgICBmb3IgKFBhcmFtZXRlciBwYXJhbWV0ZXIgOiBnZXQoKSkgeworICAgICAgbWFwLnB1dChwYXJhbWV0ZXIuZ2V0TmFtZSgpLCBwYXJhbWV0ZXIpOworICAgIH0KKworICAgIHJldHVybiBtYXA7CisgIH0KKworICBwcml2YXRlIEtleXdvcmRNYXA8UGFyYW1ldGVyPiBwYXJhbWV0ZXJOYW1lTWFwID0gbnVsbDsKKyAgcHVibGljIGZpbmFsIFBhcmFtZXRlciBnZXQgKFN0cmluZyBuYW1lKSB7CisgICAgc3luY2hyb25pemVkICh0aGlzKSB7CisgICAgICBpZiAocGFyYW1ldGVyTmFtZU1hcCA9PSBudWxsKSB7CisgICAgICAgIHBhcmFtZXRlck5hbWVNYXAgPSBuZXdQYXJhbWV0ZXJOYW1lTWFwKCk7CisgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHBhcmFtZXRlck5hbWVNYXAuZ2V0KG5hbWUpOworICB9CisKKyAgcHVibGljIHN0YXRpYyB2b2lkIHNvcnRCeU5hbWUgKFBhcmFtZXRlcltdIHBhcmFtZXRlcnMpIHsKKyAgICBBcnJheXMuc29ydChwYXJhbWV0ZXJzLAorICAgICAgKHBhcmFtZXRlcjEsIHBhcmFtZXRlcjIpIC0+IHsKKyAgICAgICAgcmV0dXJuIHBhcmFtZXRlcjEuZ2V0TmFtZSgpLmNvbXBhcmVUbyhwYXJhbWV0ZXIyLmdldE5hbWUoKSk7CisgICAgICB9CisgICAgKTsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvQmluZGluZ3MvSmF2YS9QYXJzZS5qYXZhIGIvQmluZGluZ3MvSmF2YS9QYXJzZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk3OWU0NjYKLS0tIC9kZXYvbnVsbAorKysgYi9CaW5kaW5ncy9KYXZhL1BhcnNlLmphdmEKQEAgLTAsMCArMSwyMzEgQEAKKy8qCisgKiBsaWJicmxhcGkgLSBBIGxpYnJhcnkgcHJvdmlkaW5nIGFjY2VzcyB0byBicmFpbGxlIHRlcm1pbmFscyBmb3IgYXBwbGljYXRpb25zLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNi0yMDIzIGJ5CisgKiAgIFNhbXVlbCBUaGliYXVsdCA8U2FtdWVsLlRoaWJhdWx0QGVucy1seW9uLm9yZz4KKyAqICAgU8OpYmFzdGllbiBIaW5kZXJlciA8U2ViYXN0aWVuLkhpbmRlcmVyQGVucy1seW9uLm9yZz4KKyAqCisgKiBsaWJicmxhcGkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorICoKKyAqIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyAqCisgKiBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisgKi8KKworcGFja2FnZSBvcmcuYTExeS5icmxhcGk7CisKK3B1YmxpYyBhYnN0cmFjdCBjbGFzcyBQYXJzZSB7CisgIHByaXZhdGUgUGFyc2UgKCkgeworICAgIHN1cGVyKCk7CisgIH0KKworICBwcml2YXRlIGZpbmFsIHN0YXRpYyBLZXl3b3JkTWFwPEJvb2xlYW4+IGJvb2xlYW5LZXl3b3JkcyA9IG5ldyBLZXl3b3JkTWFwPD4oKTsKKyAgc3RhdGljIHsKKyAgICBCb29sZWFuIEZBTFNFID0gZmFsc2U7CisgICAgQm9vbGVhbiBUUlVFID0gdHJ1ZTsKKworICAgIGJvb2xlYW5LZXl3b3Jkcy5wdXQoImZhbHNlIiwgRkFMU0UpOworICAgIGJvb2xlYW5LZXl3b3Jkcy5wdXQoInRydWUiLCBUUlVFKTsKKworICAgIGJvb2xlYW5LZXl3b3Jkcy5wdXQoIm9mZiIsIEZBTFNFKTsKKyAgICBib29sZWFuS2V5d29yZHMucHV0KCJvbiIsIFRSVUUpOworCisgICAgYm9vbGVhbktleXdvcmRzLnB1dCgibm8iLCBGQUxTRSk7CisgICAgYm9vbGVhbktleXdvcmRzLnB1dCgieWVzIiwgVFJVRSk7CisKKyAgICBib29sZWFuS2V5d29yZHMucHV0KCIwIiwgRkFMU0UpOworICAgIGJvb2xlYW5LZXl3b3Jkcy5wdXQoIjEiLCBUUlVFKTsKKyAgfQorCisgIHB1YmxpYyBzdGF0aWMgQm9vbGVhbiBhc0Jvb2xlYW4gKFN0cmluZyBkZXNjcmlwdGlvbiwgU3RyaW5nIG9wZXJhbmQpCisgICAgICAgICB0aHJvd3MgU3ludGF4RXhjZXB0aW9uCisgIHsKKyAgICBCb29sZWFuIHZhbHVlID0gYm9vbGVhbktleXdvcmRzLmdldChvcGVyYW5kKTsKKyAgICBpZiAodmFsdWUgIT0gbnVsbCkgcmV0dXJuIHZhbHVlOworICAgIHRocm93IG5ldyBTeW50YXhFeGNlcHRpb24oIiVzIGlzIG5vdCBhIGJvb2xlYW46ICVzIiwgZGVzY3JpcHRpb24sIG9wZXJhbmQpOworICB9CisKKyAgcHVibGljIHN0YXRpYyB2b2lkIGNoZWNrTWluaW11bSAoU3RyaW5nIGRlc2NyaXB0aW9uLCBsb25nIHZhbHVlLCBsb25nIG1pbmltdW0pCisgICAgICAgICB0aHJvd3MgU3ludGF4RXhjZXB0aW9uCisgIHsKKyAgICBpZiAodmFsdWUgPCBtaW5pbXVtKSB7CisgICAgICB0aHJvdyBuZXcgU3ludGF4RXhjZXB0aW9uKAorICAgICAgICAiJXMgaXMgbGVzcyB0aGFuICVkOiAlZCIsIGRlc2NyaXB0aW9uLCBtaW5pbXVtLCB2YWx1ZQorICAgICAgKTsKKyAgICB9CisgIH0KKworICBwdWJsaWMgc3RhdGljIHZvaWQgY2hlY2tNYXhpbXVtIChTdHJpbmcgZGVzY3JpcHRpb24sIGxvbmcgdmFsdWUsIGxvbmcgbWF4aW11bSkKKyAgICAgICAgIHRocm93cyBTeW50YXhFeGNlcHRpb24KKyAgeworICAgIGlmICh2YWx1ZSA+IG1heGltdW0pIHsKKyAgICAgIHRocm93IG5ldyBTeW50YXhFeGNlcHRpb24oCisgICAgICAgICIlcyBpcyBncmVhdGVyIHRoYW4gJWQ6ICVkIiwgZGVzY3JpcHRpb24sIG1heGltdW0sIHZhbHVlCisgICAgICApOworICAgIH0KKyAgfQorCisgIHB1YmxpYyBzdGF0aWMgdm9pZCBjaGVja1JhbmdlIChTdHJpbmcgZGVzY3JpcHRpb24sIGxvbmcgdmFsdWUsIGxvbmcgbWluaW11bSwgbG9uZyBtYXhpbXVtKQorICAgICAgICAgdGhyb3dzIFN5bnRheEV4Y2VwdGlvbgorICB7CisgICAgY2hlY2tNaW5pbXVtKGRlc2NyaXB0aW9uLCB2YWx1ZSwgbWluaW11bSk7CisgICAgY2hlY2tNYXhpbXVtKGRlc2NyaXB0aW9uLCB2YWx1ZSwgbWF4aW11bSk7CisgIH0KKworICBwcml2YXRlIHN0YXRpYyBOdW1iZXIgYXNOdW1iZXIgKFN0cmluZyBkZXNjcmlwdGlvbiwgU3RyaW5nIG9wZXJhbmQsIGxvbmcgbWluaW11bSwgbG9uZyBtYXhpbXVtKQorICAgICAgICAgIHRocm93cyBTeW50YXhFeGNlcHRpb24KKyAgeworICAgIGxvbmcgdmFsdWU7CisKKyAgICB0cnkgeworICAgICAgdmFsdWUgPSBMb25nLnZhbHVlT2Yob3BlcmFuZCk7CisgICAgICBjaGVja1JhbmdlKGRlc2NyaXB0aW9uLCB2YWx1ZSwgbWluaW11bSwgbWF4aW11bSk7CisgICAgICByZXR1cm4gTG9uZy52YWx1ZU9mKHZhbHVlKTsKKyAgICB9IGNhdGNoIChOdW1iZXJGb3JtYXRFeGNlcHRpb24gZXhjZXB0aW9uKSB7CisgICAgICB0aHJvdyBuZXcgU3ludGF4RXhjZXB0aW9uKAorICAgICAgICAiJXMgaXMgbm90IGFuIGludGVnZXI6ICVzIiwgZGVzY3JpcHRpb24sIG9wZXJhbmQKKyAgICAgICk7CisgICAgfQorICB9CisKKyAgcHVibGljIGZpbmFsIHN0YXRpYyBieXRlIERFRkFVTFRfUkFOR0VfTUlOSU1VTSA9IDA7CisKKyAgcHVibGljIHN0YXRpYyBsb25nIGFzTG9uZyAoU3RyaW5nIGRlc2NyaXB0aW9uLCBTdHJpbmcgb3BlcmFuZCwgbG9uZyBtaW5pbXVtLCBsb25nIG1heGltdW0pCisgICAgICAgICB0aHJvd3MgU3ludGF4RXhjZXB0aW9uCisgIHsKKyAgICByZXR1cm4gYXNOdW1iZXIoZGVzY3JpcHRpb24sIG9wZXJhbmQsIG1pbmltdW0sIG1heGltdW0pLmxvbmdWYWx1ZSgpOworICB9CisKKyAgcHVibGljIHN0YXRpYyBsb25nIGFzTG9uZyAoU3RyaW5nIGRlc2NyaXB0aW9uLCBTdHJpbmcgb3BlcmFuZCwgbG9uZyBtaW5pbXVtKQorICAgICAgICAgdGhyb3dzIFN5bnRheEV4Y2VwdGlvbgorICB7CisgICAgcmV0dXJuIGFzTG9uZyhkZXNjcmlwdGlvbiwgb3BlcmFuZCwgbWluaW11bSwgTG9uZy5NQVhfVkFMVUUpOworICB9CisKKyAgcHVibGljIHN0YXRpYyBsb25nIGFzTG9uZyAoU3RyaW5nIGRlc2NyaXB0aW9uLCBTdHJpbmcgb3BlcmFuZCkKKyAgICAgICAgIHRocm93cyBTeW50YXhFeGNlcHRpb24KKyAgeworICAgIHJldHVybiBhc0xvbmcoZGVzY3JpcHRpb24sIG9wZXJhbmQsIERFRkFVTFRfUkFOR0VfTUlOSU1VTSk7CisgIH0KKworICBwdWJsaWMgc3RhdGljIGludCBhc0ludCAoU3RyaW5nIGRlc2NyaXB0aW9uLCBTdHJpbmcgb3BlcmFuZCwgaW50IG1pbmltdW0sIGludCBtYXhpbXVtKQorICAgICAgICAgdGhyb3dzIFN5bnRheEV4Y2VwdGlvbgorICB7CisgICAgcmV0dXJuIGFzTnVtYmVyKGRlc2NyaXB0aW9uLCBvcGVyYW5kLCBtaW5pbXVtLCBtYXhpbXVtKS5pbnRWYWx1ZSgpOworICB9CisKKyAgcHVibGljIHN0YXRpYyBpbnQgYXNJbnQgKFN0cmluZyBkZXNjcmlwdGlvbiwgU3RyaW5nIG9wZXJhbmQsIGludCBtaW5pbXVtKQorICAgICAgICAgdGhyb3dzIFN5bnRheEV4Y2VwdGlvbgorICB7CisgICAgcmV0dXJuIGFzSW50KGRlc2NyaXB0aW9uLCBvcGVyYW5kLCBtaW5pbXVtLCBJbnRlZ2VyLk1BWF9WQUxVRSk7CisgIH0KKworICBwdWJsaWMgc3RhdGljIGludCBhc0ludCAoU3RyaW5nIGRlc2NyaXB0aW9uLCBTdHJpbmcgb3BlcmFuZCkKKyAgICAgICAgIHRocm93cyBTeW50YXhFeGNlcHRpb24KKyAgeworICAgIHJldHVybiBhc0ludChkZXNjcmlwdGlvbiwgb3BlcmFuZCwgREVGQVVMVF9SQU5HRV9NSU5JTVVNKTsKKyAgfQorCisgIHB1YmxpYyBzdGF0aWMgc2hvcnQgYXNTaG9ydCAoU3RyaW5nIGRlc2NyaXB0aW9uLCBTdHJpbmcgb3BlcmFuZCwgc2hvcnQgbWluaW11bSwgc2hvcnQgbWF4aW11bSkKKyAgICAgICAgIHRocm93cyBTeW50YXhFeGNlcHRpb24KKyAgeworICAgIHJldHVybiBhc051bWJlcihkZXNjcmlwdGlvbiwgb3BlcmFuZCwgbWluaW11bSwgbWF4aW11bSkuc2hvcnRWYWx1ZSgpOworICB9CisKKyAgcHVibGljIHN0YXRpYyBzaG9ydCBhc1Nob3J0IChTdHJpbmcgZGVzY3JpcHRpb24sIFN0cmluZyBvcGVyYW5kLCBzaG9ydCBtaW5pbXVtKQorICAgICAgICAgdGhyb3dzIFN5bnRheEV4Y2VwdGlvbgorICB7CisgICAgcmV0dXJuIGFzU2hvcnQoZGVzY3JpcHRpb24sIG9wZXJhbmQsIG1pbmltdW0sIFNob3J0Lk1BWF9WQUxVRSk7CisgIH0KKworICBwdWJsaWMgc3RhdGljIHNob3J0IGFzU2hvcnQgKFN0cmluZyBkZXNjcmlwdGlvbiwgU3RyaW5nIG9wZXJhbmQpCisgICAgICAgICB0aHJvd3MgU3ludGF4RXhjZXB0aW9uCisgIHsKKyAgICByZXR1cm4gYXNTaG9ydChkZXNjcmlwdGlvbiwgb3BlcmFuZCwgREVGQVVMVF9SQU5HRV9NSU5JTVVNKTsKKyAgfQorCisgIHB1YmxpYyBzdGF0aWMgYnl0ZSBhc0J5dGUgKFN0cmluZyBkZXNjcmlwdGlvbiwgU3RyaW5nIG9wZXJhbmQsIGJ5dGUgbWluaW11bSwgYnl0ZSBtYXhpbXVtKQorICAgICAgICAgdGhyb3dzIFN5bnRheEV4Y2VwdGlvbgorICB7CisgICAgcmV0dXJuIGFzTnVtYmVyKGRlc2NyaXB0aW9uLCBvcGVyYW5kLCBtaW5pbXVtLCBtYXhpbXVtKS5ieXRlVmFsdWUoKTsKKyAgfQorCisgIHB1YmxpYyBzdGF0aWMgYnl0ZSBhc0J5dGUgKFN0cmluZyBkZXNjcmlwdGlvbiwgU3RyaW5nIG9wZXJhbmQsIGJ5dGUgbWluaW11bSkKKyAgICAgICAgIHRocm93cyBTeW50YXhFeGNlcHRpb24KKyAgeworICAgIHJldHVybiBhc0J5dGUoZGVzY3JpcHRpb24sIG9wZXJhbmQsIG1pbmltdW0sIEJ5dGUuTUFYX1ZBTFVFKTsKKyAgfQorCisgIHB1YmxpYyBzdGF0aWMgYnl0ZSBhc0J5dGUgKFN0cmluZyBkZXNjcmlwdGlvbiwgU3RyaW5nIG9wZXJhbmQpCisgICAgICAgICB0aHJvd3MgU3ludGF4RXhjZXB0aW9uCisgIHsKKyAgICByZXR1cm4gYXNCeXRlKGRlc2NyaXB0aW9uLCBvcGVyYW5kLCBERUZBVUxUX1JBTkdFX01JTklNVU0pOworICB9CisKKyAgcHVibGljIHN0YXRpYyBieXRlIGFzRG90cyAoU3RyaW5nIGRlc2NyaXB0aW9uLCBTdHJpbmcgb3BlcmFuZCkKKyAgICAgICAgIHRocm93cyBTeW50YXhFeGNlcHRpb24KKyAgeworICAgIGlmIChvcGVyYW5kLmVxdWFscygiMCIpKSByZXR1cm4gMDsKKworICAgIGJ5dGUgZG90cyA9IDA7CisgICAgU3RyaW5nIG51bWJlcnMgPSAiMTIzNDU2NzgiOworCisgICAgZm9yIChjaGFyIG51bWJlciA6IG9wZXJhbmQudG9DaGFyQXJyYXkoKSkgeworICAgICAgaW50IGluZGV4ID0gbnVtYmVycy5pbmRleE9mKG51bWJlcik7CisgICAgICBpZiAoaW5kZXggPCAwKSB7CisgICAgICAgIHRocm93IG5ldyBTeW50YXhFeGNlcHRpb24oCisgICAgICAgICAgIiVzIGNvbnRhaW5zIGFuIGludmFsaWQgZG90IG51bWJlcjogJXMgKCVjKSIsIGRlc2NyaXB0aW9uLCBvcGVyYW5kLCBudW1iZXIKKyAgICAgICAgKTsKKyAgICAgIH0KKworICAgICAgaW50IGRvdCA9IDEgPDwgaW5kZXg7CisgICAgICBpZiAoKGRvdHMgJiBkb3QpICE9IDApIHsKKyAgICAgICAgdGhyb3cgbmV3IFN5bnRheEV4Y2VwdGlvbigKKyAgICAgICAgICAiJXMgY29udGFpbnMgYSBkdXBsaWNhdGUgZG90IG51bWJlcjogJXMgKCVjKSIsIGRlc2NyaXB0aW9uLCBvcGVyYW5kLCBudW1iZXIKKyAgICAgICAgKTsKKyAgICAgIH0KKworICAgICAgZG90cyB8PSBkb3Q7CisgICAgfQorCisgICAgcmV0dXJuIGRvdHM7CisgIH0KKworICBwdWJsaWMgZmluYWwgc3RhdGljIGludCBNSU5JTVVNX0NVUlNPUl9QT1NJVElPTiA9ICAxOworICBwdWJsaWMgZmluYWwgc3RhdGljIFN0cmluZyBOT19DVVJTT1IgPSAibm8iOworICBwdWJsaWMgZmluYWwgc3RhdGljIFN0cmluZyBMRUFWRV9DVVJTT1IgPSAibGVhdmUiOworCisgIHB1YmxpYyBzdGF0aWMgaW50IGFzQ3Vyc29yUG9zaXRpb24gKFN0cmluZyBvcGVyYW5kKSB0aHJvd3MgU3ludGF4RXhjZXB0aW9uIHsKKyAgICBpZiAoU3RyaW5ncy5pc0FiYnJldmlhdGlvbihOT19DVVJTT1IsIG9wZXJhbmQpKSB7CisgICAgICByZXR1cm4gQ29uc3RhbnRzLkNVUlNPUl9PRkY7CisgICAgfQorCisgICAgaWYgKFN0cmluZ3MuaXNBYmJyZXZpYXRpb24oTEVBVkVfQ1VSU09SLCBvcGVyYW5kKSkgeworICAgICAgcmV0dXJuIENvbnN0YW50cy5DVVJTT1JfTEVBVkU7CisgICAgfQorCisgICAgcmV0dXJuIGFzSW50KAorICAgICAgV3JpdGVBcmd1bWVudHMuQ1VSU09SX1BPU0lUSU9OLAorICAgICAgb3BlcmFuZCwgTUlOSU1VTV9DVVJTT1JfUE9TSVRJT04KKyAgICApOworICB9CisKKyAgcHVibGljIGZpbmFsIHN0YXRpYyBpbnQgTUlOSU1VTV9ESVNQTEFZX05VTUJFUiA9IDE7CisgIHB1YmxpYyBmaW5hbCBzdGF0aWMgU3RyaW5nIERFRkFVTFRfRElTUExBWSA9ICJkZWZhdWx0IjsKKworICBwdWJsaWMgc3RhdGljIGludCBhc0Rpc3BsYXlOdW1iZXIgKFN0cmluZyBvcGVyYW5kKSB0aHJvd3MgU3ludGF4RXhjZXB0aW9uIHsKKyAgICBpZiAoU3RyaW5ncy5pc0FiYnJldmlhdGlvbihERUZBVUxUX0RJU1BMQVksIG9wZXJhbmQpKSB7CisgICAgICByZXR1cm4gQ29uc3RhbnRzLkRJU1BMQVlfREVGQVVMVDsKKyAgICB9CisKKyAgICByZXR1cm4gYXNJbnQoCisgICAgICBXcml0ZUFyZ3VtZW50cy5ESVNQTEFZX05VTUJFUiwKKyAgICAgIG9wZXJhbmQsIE1JTklNVU1fRElTUExBWV9OVU1CRVIKKyAgICApOworICB9Cit9CmRpZmYgLS1naXQgYS9CaW5kaW5ncy9KYXZhL1Byb2dyYW0uamF2YSBiL0JpbmRpbmdzL0phdmEvUHJvZ3JhbS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMyNjRiNDkKLS0tIC9kZXYvbnVsbAorKysgYi9CaW5kaW5ncy9KYXZhL1Byb2dyYW0uamF2YQpAQCAtMCwwICsxLDMyMSBAQAorLyoKKyAqIGxpYmJybGFwaSAtIEEgbGlicmFyeSBwcm92aWRpbmcgYWNjZXNzIHRvIGJyYWlsbGUgdGVybWluYWxzIGZvciBhcHBsaWNhdGlvbnMuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMjMgYnkKKyAqICAgU2FtdWVsIFRoaWJhdWx0IDxTYW11ZWwuVGhpYmF1bHRAZW5zLWx5b24ub3JnPgorICogICBTw6liYXN0aWVuIEhpbmRlcmVyIDxTZWJhc3RpZW4uSGluZGVyZXJAZW5zLWx5b24ub3JnPgorICoKKyAqIGxpYmJybGFwaSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorICoKKyAqIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyAqLworCitwYWNrYWdlIG9yZy5hMTF5LmJybGFwaTsKKworaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CitpbXBvcnQgamF2YS51dGlsLnJlZ2V4Lk1hdGNoZXI7CisKK3B1YmxpYyBhYnN0cmFjdCBjbGFzcyBQcm9ncmFtIGV4dGVuZHMgUHJvZ3JhbUNvbXBvbmVudCBpbXBsZW1lbnRzIFJ1bm5hYmxlIHsKKyAgcHJvdGVjdGVkIGFic3RyYWN0IHZvaWQgcnVuUHJvZ3JhbSAoKSB0aHJvd3MgUHJvZ3JhbUV4Y2VwdGlvbjsKKworICBwcml2YXRlIFN0cmluZyBwcm9ncmFtTmFtZSA9IG51bGw7CisKKyAgcHVibGljIGZpbmFsIGJvb2xlYW4gaXNDbGllbnQgKCkgeworICAgIHJldHVybiBpc0NsaWVudCh0aGlzKTsKKyAgfQorCisgIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0UHJvZ3JhbU5hbWUoKSB7CisgICAgaWYgKHByb2dyYW1OYW1lID09IG51bGwpIHJldHVybiBnZXRPYmplY3ROYW1lKCk7CisgICAgcmV0dXJuIHByb2dyYW1OYW1lOworICB9CisKKyAgcHVibGljIGZpbmFsIFByb2dyYW0gc2V0UHJvZ3JhbU5hbWUoU3RyaW5nIG5hbWUpIHsKKyAgICBwcm9ncmFtTmFtZSA9IG5hbWU7CisgICAgcmV0dXJuIHRoaXM7CisgIH0KKworICBwcm90ZWN0ZWQgZmluYWwgdm9pZCB3cml0ZVByb2dyYW1NZXNzYWdlIChTdHJpbmcgZm9ybWF0LCBPYmplY3QuLi4gYXJndW1lbnRzKSB7CisgICAgU3lzdGVtLmVyci5wcmludGxuKChnZXRPYmplY3ROYW1lKCkgKyAiOiAiICsgU3RyaW5nLmZvcm1hdChmb3JtYXQsIGFyZ3VtZW50cykpKTsKKyAgfQorCisgIHByb3RlY3RlZCBzdGF0aWMgY2xhc3MgT3B0aW9uIHsKKyAgICBwdWJsaWMgZmluYWwgc3RhdGljIGNoYXIgUFJFRklYX0NIQVJBQ1RFUiA9ICctJzsKKworICAgIHB1YmxpYyBpbnRlcmZhY2UgSGFuZGxlciB7CisgICAgICBwdWJsaWMgdm9pZCBoYW5kbGVPcHRpb24gKFN0cmluZ1tdIG9wZXJhbmRzKSB0aHJvd3MgU3ludGF4RXhjZXB0aW9uOworICAgIH0KKworICAgIHByaXZhdGUgZmluYWwgU3RyaW5nIG9wdGlvbk5hbWU7CisgICAgcHJpdmF0ZSBmaW5hbCBIYW5kbGVyIG9wdGlvbkhhbmRsZXI7CisgICAgcHJpdmF0ZSBmaW5hbCBTdHJpbmdbXSBvcGVyYW5kRGVzY3JpcHRpb25zOworCisgICAgcHVibGljIE9wdGlvbiAoU3RyaW5nIG5hbWUsIEhhbmRsZXIgaGFuZGxlciwgU3RyaW5nLi4uIG9wZXJhbmRzKSB7CisgICAgICBvcHRpb25OYW1lID0gbmFtZTsKKyAgICAgIG9wdGlvbkhhbmRsZXIgPSBoYW5kbGVyOworICAgICAgb3BlcmFuZERlc2NyaXB0aW9ucyA9IG9wZXJhbmRzOworICAgIH0KKworICAgIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0TmFtZSAoKSB7CisgICAgICByZXR1cm4gb3B0aW9uTmFtZTsKKyAgICB9CisKKyAgICBwdWJsaWMgZmluYWwgSGFuZGxlciBnZXRIYW5kbGVyICgpIHsKKyAgICAgIHJldHVybiBvcHRpb25IYW5kbGVyOworICAgIH0KKworICAgIHB1YmxpYyBmaW5hbCBTdHJpbmdbXSBnZXRPcGVyYW5kcyAoKSB7CisgICAgICBpbnQgY291bnQgPSBvcGVyYW5kRGVzY3JpcHRpb25zLmxlbmd0aDsKKyAgICAgIFN0cmluZ1tdIHJlc3VsdCA9IG5ldyBTdHJpbmdbY291bnRdOworICAgICAgU3lzdGVtLmFycmF5Y29weShvcGVyYW5kRGVzY3JpcHRpb25zLCAwLCByZXN1bHQsIDAsIGNvdW50KTsKKyAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICB9CisKKyAgcHJpdmF0ZSBmaW5hbCBTdHJpbmdbXSBwcm9ncmFtQXJndW1lbnRzOworICBwcml2YXRlIGZpbmFsIEtleXdvcmRNYXA8T3B0aW9uPiBwcm9ncmFtT3B0aW9ucyA9IG5ldyBLZXl3b3JkTWFwPD4oKTsKKworICBwcm90ZWN0ZWQgZmluYWwgdm9pZCBhZGRPcHRpb24gKFN0cmluZyBuYW1lLCBPcHRpb24uSGFuZGxlciBoYW5kbGVyLCBTdHJpbmcuLi4gb3BlcmFuZHMpIHsKKyAgICBwcm9ncmFtT3B0aW9ucy5wdXQobmFtZSwgbmV3IE9wdGlvbihuYW1lLCBoYW5kbGVyLCBvcGVyYW5kcykpOworICB9CisKKyAgcHJpdmF0ZSBMaXN0PFN0cmluZz4gcmVxdWlyZWRQYXJhbWV0ZXJzID0gbnVsbDsKKyAgcHJpdmF0ZSBMaXN0PFN0cmluZz4gb3B0aW9uYWxQYXJhbWV0ZXJzID0gbnVsbDsKKyAgcHJpdmF0ZSBib29sZWFuIGhhdmVSZXBlYXRpbmdQYXJhbWV0ZXIgPSBmYWxzZTsKKworICBwcm90ZWN0ZWQgZmluYWwgdm9pZCBhZGRSZXF1aXJlZFBhcmFtZXRlcnMgKFN0cmluZy4uLiBwYXJhbWV0ZXJzKSB7CisgICAgaWYgKG9wdGlvbmFsUGFyYW1ldGVycyAhPSBudWxsKSB7CisgICAgICB0aHJvdyBuZXcgSWxsZWdhbFN0YXRlRXhjZXB0aW9uKCJvcHRpb25hbCBwYXJhbWV0ZXJzIGFscmVhZHkgYWRkZWQiKTsKKyAgICB9CisKKyAgICBpZiAocmVxdWlyZWRQYXJhbWV0ZXJzID09IG51bGwpIHsKKyAgICAgIHJlcXVpcmVkUGFyYW1ldGVycyA9IG5ldyBBcnJheUxpc3Q8PigpOworICAgIH0KKworICAgIGZvciAoU3RyaW5nIHBhcmFtZXRlciA6IHBhcmFtZXRlcnMpIHsKKyAgICAgIHJlcXVpcmVkUGFyYW1ldGVycy5hZGQocGFyYW1ldGVyKTsKKyAgICB9CisgIH0KKworICBwcm90ZWN0ZWQgZmluYWwgdm9pZCBhZGRPcHRpb25hbFBhcmFtZXRlcnMgKFN0cmluZy4uLiBwYXJhbWV0ZXJzKSB7CisgICAgaWYgKGhhdmVSZXBlYXRpbmdQYXJhbWV0ZXIpIHsKKyAgICAgIHRocm93IG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oInJlcGVhdGluZyBwYXJhbWV0ZXIgYWxyZWFkeSBhZGRlZCIpOworICAgIH0KKworICAgIGlmIChvcHRpb25hbFBhcmFtZXRlcnMgPT0gbnVsbCkgeworICAgICAgb3B0aW9uYWxQYXJhbWV0ZXJzID0gbmV3IEFycmF5TGlzdDw+KCk7CisgICAgfQorCisgICAgZm9yIChTdHJpbmcgcGFyYW1ldGVyIDogcGFyYW1ldGVycykgeworICAgICAgb3B0aW9uYWxQYXJhbWV0ZXJzLmFkZChwYXJhbWV0ZXIpOworICAgIH0KKyAgfQorCisgIHByb3RlY3RlZCBmaW5hbCB2b2lkIGFkZFJlcGVhdGluZ1BhcmFtZXRlciAoU3RyaW5nIHBhcmFtZXRlcikgeworICAgIGFkZE9wdGlvbmFsUGFyYW1ldGVycyhwYXJhbWV0ZXIpOworICAgIGhhdmVSZXBlYXRpbmdQYXJhbWV0ZXIgPSB0cnVlOworICB9CisKKyAgcHVibGljIFN0cmluZyBnZXRQdXJwb3NlKCkgeworICAgIHJldHVybiBudWxsOworICB9CisKKyAgcHJvdGVjdGVkIHZvaWQgZXh0ZW5kVXNhZ2VTdW1tYXJ5KFN0cmluZ0J1aWxkZXIgdXNhZ2UpIHt9CisKKyAgcHVibGljIGZpbmFsIHN0YXRpYyBjaGFyIFVTQUdFX09QVElPTkFMX0JFR0lOID0gJ1snOworICBwdWJsaWMgZmluYWwgc3RhdGljIGNoYXIgVVNBR0VfT1BUSU9OQUxfRU5EID0gJ10nOworICBwdWJsaWMgZmluYWwgc3RhdGljIFN0cmluZyBVU0FHRV9SRVBFQVRJTkdfSU5ESUNBVE9SID0gIi4uLiI7CisKKyAgcHVibGljIGZpbmFsIFN0cmluZyBnZXRVc2FnZVN1bW1hcnkgKCkgeworICAgIFN0cmluZ0J1aWxkZXIgdXNhZ2UgPSBuZXcgU3RyaW5nQnVpbGRlcigpOworICAgIGJvb2xlYW4gaGF2ZU9wdGlvbnMgPSAhcHJvZ3JhbU9wdGlvbnMuaXNFbXB0eSgpOworCisgICAgeworICAgICAgU3RyaW5nIHBhdHRlcm4gPSAiXiguKikoXFxwe1VwcGVyfS4qKSQiOworICAgICAgU3RyaW5nIG5hbWUgPSBnZXRPYmplY3ROYW1lKCk7CisgICAgICBNYXRjaGVyIG1hdGNoZXIgPSBTdHJpbmdzLmdldE1hdGNoZXIocGF0dGVybiwgbmFtZSk7CisgICAgICBTdHJpbmcgcGhyYXNlOworCisgICAgICBpZiAobWF0Y2hlci5tYXRjaGVzKCkpIHsKKyAgICAgICAgbmFtZSA9IG1hdGNoZXIuZ3JvdXAoMSk7CisgICAgICAgIHBocmFzZSA9ICJ0aGUgIiArIG5hbWUgKyAnICcgKyBtYXRjaGVyLmdyb3VwKDIpOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgcGhyYXNlID0gbmFtZTsKKyAgICAgIH0KKworICAgICAgdXNhZ2UuYXBwZW5kKCJVc2FnZSBTdW1tYXJ5IGZvciAiKS5hcHBlbmQocGhyYXNlKTsKKyAgICB9CisKKyAgICB7CisgICAgICB1c2FnZS5hcHBlbmQoIlxuU3ludGF4OiAiKS5hcHBlbmQoZ2V0UHJvZ3JhbU5hbWUoKSk7CisgICAgICBpbnQgc3RhcnQgPSB1c2FnZS5sZW5ndGgoKTsKKworICAgICAgaWYgKGhhdmVPcHRpb25zKSB7CisgICAgICAgIHVzYWdlLmFwcGVuZCgnICcpLmFwcGVuZChVU0FHRV9PUFRJT05BTF9CRUdJTikKKyAgICAgICAgICAgICAuYXBwZW5kKE9wdGlvbi5QUkVGSVhfQ0hBUkFDVEVSKS5hcHBlbmQoIm9wdGlvbiIpCisgICAgICAgICAgICAgLmFwcGVuZCgnICcpLmFwcGVuZChVU0FHRV9SRVBFQVRJTkdfSU5ESUNBVE9SKQorICAgICAgICAgICAgIC5hcHBlbmQoVVNBR0VfT1BUSU9OQUxfRU5EKTsKKyAgICAgIH0KKworICAgICAgaWYgKHJlcXVpcmVkUGFyYW1ldGVycyAhPSBudWxsKSB7CisgICAgICAgIGZvciAoU3RyaW5nIHBhcmFtZXRlciA6IHJlcXVpcmVkUGFyYW1ldGVycykgeworICAgICAgICAgIHVzYWdlLmFwcGVuZCgnICcpLmFwcGVuZCh0b09wZXJhbmROYW1lKHBhcmFtZXRlcikpOworICAgICAgICB9CisgICAgICB9CisKKyAgICAgIGlmIChvcHRpb25hbFBhcmFtZXRlcnMgIT0gbnVsbCkgeworICAgICAgICBmb3IgKFN0cmluZyBwYXJhbWV0ZXIgOiBvcHRpb25hbFBhcmFtZXRlcnMpIHsKKyAgICAgICAgICB1c2FnZS5hcHBlbmQoJyAnKS5hcHBlbmQoVVNBR0VfT1BUSU9OQUxfQkVHSU4pCisgICAgICAgICAgICAgICAuYXBwZW5kKHRvT3BlcmFuZE5hbWUocGFyYW1ldGVyKSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoaGF2ZVJlcGVhdGluZ1BhcmFtZXRlcikgeworICAgICAgICAgIHVzYWdlLmFwcGVuZCgnICcpLmFwcGVuZChVU0FHRV9SRVBFQVRJTkdfSU5ESUNBVE9SKTsKKyAgICAgICAgfQorCisgICAgICAgIGZvciAoaW50IGk9b3B0aW9uYWxQYXJhbWV0ZXJzLnNpemUoKTsgaT4wOyBpLT0xKSB7CisgICAgICAgICAgdXNhZ2UuYXBwZW5kKFVTQUdFX09QVElPTkFMX0VORCk7CisgICAgICAgIH0KKyAgICAgIH0KKworICAgICAgaWYgKHVzYWdlLmxlbmd0aCgpID09IHN0YXJ0KSB1c2FnZS5hcHBlbmQoIiAobm8gYXJndW1lbnRzKSIpOworICAgIH0KKworICAgIHsKKyAgICAgIFN0cmluZyBwdXJwb3NlID0gZ2V0UHVycG9zZSgpOworCisgICAgICBpZiAoKHB1cnBvc2UgIT0gbnVsbCkgJiYgIXB1cnBvc2UuaXNFbXB0eSgpKSB7CisgICAgICAgIHVzYWdlLmFwcGVuZCgiXG5cbiIpLmFwcGVuZChwdXJwb3NlKTsKKyAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoaGF2ZU9wdGlvbnMpIHsKKyAgICAgIHVzYWdlLmFwcGVuZCgiXG5cblRoZXNlIG9wdGlvbnMgbWF5IGJlIHNwZWNpZmllZDoiKTsKKworICAgICAgZm9yIChTdHJpbmcgbmFtZSA6IHByb2dyYW1PcHRpb25zLmdldEtleXdvcmRzKCkpIHsKKyAgICAgICAgT3B0aW9uIG9wdGlvbiA9IHByb2dyYW1PcHRpb25zLmdldChuYW1lKTsKKyAgICAgICAgdXNhZ2UuYXBwZW5kKCJcbiAgIikuYXBwZW5kKE9wdGlvbi5QUkVGSVhfQ0hBUkFDVEVSKS5hcHBlbmQobmFtZSk7CisKKyAgICAgICAgZm9yIChTdHJpbmcgb3BlcmFuZCA6IG9wdGlvbi5nZXRPcGVyYW5kcygpKSB7CisgICAgICAgICAgdXNhZ2UuYXBwZW5kKCcgJykuYXBwZW5kKHRvT3BlcmFuZE5hbWUob3BlcmFuZCkpOworICAgICAgICB9CisgICAgICB9CisgICAgfQorCisgICAgeworICAgICAgU3RyaW5nQnVpbGRlciBleHRlbnNpb24gPSBuZXcgU3RyaW5nQnVpbGRlcigpOworICAgICAgZXh0ZW5kVXNhZ2VTdW1tYXJ5KGV4dGVuc2lvbik7CisKKyAgICAgIFN0cmluZyB0ZXh0ID0gU3RyaW5ncy5mb3JtYXRQYXJhZ3JhcGhzKGV4dGVuc2lvbi50b1N0cmluZygpKTsKKyAgICAgIGlmICghdGV4dC5pc0VtcHR5KCkpIHVzYWdlLmFwcGVuZCgiXG5cbiIpLmFwcGVuZCh0ZXh0KTsKKyAgICB9CisKKyAgICByZXR1cm4gdXNhZ2UudG9TdHJpbmcoKTsKKyAgfQorCisgIHByb3RlY3RlZCBQcm9ncmFtIChTdHJpbmcuLi4gYXJndW1lbnRzKSB7CisgICAgc3VwZXIoKTsKKyAgICBwcm9ncmFtQXJndW1lbnRzID0gYXJndW1lbnRzOworCisgICAgYWRkT3B0aW9uKCJoZWxwIiwKKyAgICAgIChvcGVyYW5kcykgLT4geworICAgICAgICBwcmludGYoIiVzXG4iLCBnZXRVc2FnZVN1bW1hcnkoKSk7CisgICAgICAgIHRocm93IG5ldyBFeGl0RXhjZXB0aW9uKEVYSVRfQ09ERV9TVUNDRVNTKTsKKyAgICAgIH0KKyAgICApOworICB9CisKKyAgcHJvdGVjdGVkIHZvaWQgcHJvY2Vzc1BhcmFtZXRlcnMgKFN0cmluZ1tdIHBhcmFtZXRlcnMpCisgICAgICAgICAgICB0aHJvd3MgU3ludGF4RXhjZXB0aW9uCisgIHsKKyAgICBpZiAocGFyYW1ldGVycy5sZW5ndGggPiAwKSB7CisgICAgICB0aHJvdyBuZXcgVG9vTWFueVBhcmFtZXRlcnNFeGNlcHRpb24ocGFyYW1ldGVycyk7CisgICAgfQorICB9CisKKyAgcHJpdmF0ZSBmaW5hbCB2b2lkIHByb2Nlc3NBcmd1bWVudHMgKFN0cmluZ1tdIGFyZ3VtZW50cykKKyAgICAgICAgICB0aHJvd3MgU3ludGF4RXhjZXB0aW9uCisgIHsKKyAgICBpbnQgYXJndW1lbnRDb3VudCA9IGFyZ3VtZW50cy5sZW5ndGg7CisgICAgaW50IGFyZ3VtZW50SW5kZXggPSAwOworCisgICAgd2hpbGUgKGFyZ3VtZW50SW5kZXggPCBhcmd1bWVudENvdW50KSB7CisgICAgICBTdHJpbmcgYXJndW1lbnQgPSBhcmd1bWVudHNbYXJndW1lbnRJbmRleF07CisgICAgICBpZiAoYXJndW1lbnQuaXNFbXB0eSgpKSBicmVhazsKKyAgICAgIGlmIChhcmd1bWVudC5jaGFyQXQoMCkgIT0gT3B0aW9uLlBSRUZJWF9DSEFSQUNURVIpIGJyZWFrOworCisgICAgICBpZiAoYXJndW1lbnQubGVuZ3RoKCkgPT0gMSkgeworICAgICAgICBhcmd1bWVudEluZGV4ICs9IDE7CisgICAgICAgIGJyZWFrOworICAgICAgfQorCisgICAgICBTdHJpbmcgbmFtZSA9IGFyZ3VtZW50LnN1YnN0cmluZygxKS50b0xvd2VyQ2FzZSgpOworICAgICAgT3B0aW9uIG9wdGlvbiA9IHByb2dyYW1PcHRpb25zLmdldChuYW1lKTsKKworICAgICAgaWYgKG9wdGlvbiA9PSBudWxsKSB7CisgICAgICAgIHRocm93IG5ldyBTeW50YXhFeGNlcHRpb24oInVua25vd24gb3B0aW9uOiAlcyIsIGFyZ3VtZW50KTsKKyAgICAgIH0KKworICAgICAgU3RyaW5nW10gb3BlcmFuZERlc2NyaXB0aW9ucyA9IG9wdGlvbi5nZXRPcGVyYW5kcygpOworICAgICAgaW50IG9wZXJhbmRDb3VudCA9IG9wZXJhbmREZXNjcmlwdGlvbnMubGVuZ3RoOworCisgICAgICB7CisgICAgICAgIGludCBpbmRleCA9IGFyZ3VtZW50Q291bnQgLSBhcmd1bWVudEluZGV4IC0gMTsKKworICAgICAgICBpZiAoaW5kZXggPCBvcGVyYW5kQ291bnQpIHsKKyAgICAgICAgICB0aHJvdyBuZXcgU3ludGF4RXhjZXB0aW9uKAorICAgICAgICAgICAgIm1pc3NpbmcgJXM6ICVjJXMiLAorICAgICAgICAgICAgb3BlcmFuZERlc2NyaXB0aW9uc1tpbmRleF0sCisgICAgICAgICAgICBPcHRpb24uUFJFRklYX0NIQVJBQ1RFUiwKKyAgICAgICAgICAgIG9wdGlvbi5nZXROYW1lKCkKKyAgICAgICAgICApOworICAgICAgICB9CisgICAgICB9CisKKyAgICAgIFN0cmluZ1tdIG9wZXJhbmRzID0gbmV3IFN0cmluZ1tvcGVyYW5kQ291bnRdOworICAgICAgU3lzdGVtLmFycmF5Y29weShhcmd1bWVudHMsIGFyZ3VtZW50SW5kZXgrMSwgb3BlcmFuZHMsIDAsIG9wZXJhbmRDb3VudCk7CisgICAgICBvcHRpb24uZ2V0SGFuZGxlcigpLmhhbmRsZU9wdGlvbihvcGVyYW5kcyk7CisKKyAgICAgIGFyZ3VtZW50SW5kZXggKz0gMSArIG9wZXJhbmRDb3VudDsKKyAgICB9CisKKyAgICBpbnQgcGFyYW1ldGVyQ291bnQgPSBhcmd1bWVudENvdW50IC0gYXJndW1lbnRJbmRleDsKKyAgICBTdHJpbmdbXSBwYXJhbWV0ZXJzID0gbmV3IFN0cmluZ1twYXJhbWV0ZXJDb3VudF07CisgICAgU3lzdGVtLmFycmF5Y29weShhcmd1bWVudHMsIGFyZ3VtZW50SW5kZXgsIHBhcmFtZXRlcnMsIDAsIHBhcmFtZXRlckNvdW50KTsKKyAgICBwcm9jZXNzUGFyYW1ldGVycyhwYXJhbWV0ZXJzKTsKKyAgfQorCisgIHByb3RlY3RlZCB2b2lkIG9uUHJvZ3JhbUV4Y2VwdGlvbiAoUHJvZ3JhbUV4Y2VwdGlvbiBleGNlcHRpb24pIHsKKyAgICB3cml0ZVByb2dyYW1NZXNzYWdlKCIlcyIsIGV4Y2VwdGlvbi5nZXRNZXNzYWdlKCkpOworICAgIGludCBleGl0Q29kZTsKKworICAgIGlmIChleGNlcHRpb24gaW5zdGFuY2VvZiBTeW50YXhFeGNlcHRpb24pIHsKKyAgICAgIGV4aXRDb2RlID0gRVhJVF9DT0RFX1NZTlRBWDsKKyAgICB9IGVsc2UgaWYgKGV4Y2VwdGlvbiBpbnN0YW5jZW9mIFNlbWFudGljRXhjZXB0aW9uKSB7CisgICAgICBleGl0Q29kZSA9IEVYSVRfQ09ERV9TRU1BTlRJQzsKKyAgICB9IGVsc2UgaWYgKGV4Y2VwdGlvbiBpbnN0YW5jZW9mIEV4dGVybmFsRXhjZXB0aW9uKSB7CisgICAgICBleGl0Q29kZSA9IEVYSVRfQ09ERV9FWFRFUk5BTDsKKyAgICB9IGVsc2UgeworICAgICAgZXhpdENvZGUgPSBFWElUX0NPREVfSU5URVJOQUw7CisgICAgfQorCisgICAgdGhyb3cgbmV3IEV4aXRFeGNlcHRpb24oZXhpdENvZGUpOworICB9CisKKyAgQE92ZXJyaWRlCisgIHB1YmxpYyBmaW5hbCB2b2lkIHJ1biAoKSB7CisgICAgdHJ5IHsKKyAgICAgIHByb2Nlc3NBcmd1bWVudHMocHJvZ3JhbUFyZ3VtZW50cyk7CisgICAgICBydW5Qcm9ncmFtKCk7CisgICAgfSBjYXRjaCAoUHJvZ3JhbUV4Y2VwdGlvbiBleGNlcHRpb24pIHsKKyAgICAgIG9uUHJvZ3JhbUV4Y2VwdGlvbihleGNlcHRpb24pOworICAgIH0KKyAgfQorfQpkaWZmIC0tZ2l0IGEvQmluZGluZ3MvSmF2YS9Qcm9ncmFtQ29tcG9uZW50LmphdmEgYi9CaW5kaW5ncy9KYXZhL1Byb2dyYW1Db21wb25lbnQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NDQ4YjI1Ci0tLSAvZGV2L251bGwKKysrIGIvQmluZGluZ3MvSmF2YS9Qcm9ncmFtQ29tcG9uZW50LmphdmEKQEAgLTAsMCArMSw0MCBAQAorLyoKKyAqIGxpYmJybGFwaSAtIEEgbGlicmFyeSBwcm92aWRpbmcgYWNjZXNzIHRvIGJyYWlsbGUgdGVybWluYWxzIGZvciBhcHBsaWNhdGlvbnMuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMjMgYnkKKyAqICAgU2FtdWVsIFRoaWJhdWx0IDxTYW11ZWwuVGhpYmF1bHRAZW5zLWx5b24ub3JnPgorICogICBTw6liYXN0aWVuIEhpbmRlcmVyIDxTZWJhc3RpZW4uSGluZGVyZXJAZW5zLWx5b24ub3JnPgorICoKKyAqIGxpYmJybGFwaSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorICoKKyAqIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyAqLworCitwYWNrYWdlIG9yZy5hMTF5LmJybGFwaTsKKworcHVibGljIGFic3RyYWN0IGNsYXNzIFByb2dyYW1Db21wb25lbnQgZXh0ZW5kcyBDb21wb25lbnQgeworICBwcm90ZWN0ZWQgUHJvZ3JhbUNvbXBvbmVudCAoKSB7CisgICAgc3VwZXIoKTsKKyAgfQorCisgIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBpc0NsaWVudCAoQ2xhc3MgPD8gZXh0ZW5kcyBQcm9ncmFtPiB0eXBlKSB7CisgICAgcmV0dXJuIENsaWVudC5jbGFzcy5pc0Fzc2lnbmFibGVGcm9tKHR5cGUpOworICB9CisKKyAgcHVibGljIHN0YXRpYyBib29sZWFuIGlzQ2xpZW50IChQcm9ncmFtIHByb2dyYW0pIHsKKyAgICByZXR1cm4gaXNDbGllbnQocHJvZ3JhbS5nZXRDbGFzcygpKTsKKyAgfQorCisgIHB1YmxpYyBmaW5hbCBzdGF0aWMgaW50IEVYSVRfQ09ERV9TVUNDRVNTICA9IDA7CisgIHB1YmxpYyBmaW5hbCBzdGF0aWMgaW50IEVYSVRfQ09ERV9TWU5UQVggICA9IDI7CisgIHB1YmxpYyBmaW5hbCBzdGF0aWMgaW50IEVYSVRfQ09ERV9TRU1BTlRJQyA9IDM7CisgIHB1YmxpYyBmaW5hbCBzdGF0aWMgaW50IEVYSVRfQ09ERV9FWFRFUk5BTCA9IDg7CisgIHB1YmxpYyBmaW5hbCBzdGF0aWMgaW50IEVYSVRfQ09ERV9JTlRFUk5BTCA9IDk7Cit9CmRpZmYgLS1naXQgYS9CaW5kaW5ncy9KYXZhL1Byb2dyYW1FeGNlcHRpb24uamF2YSBiL0JpbmRpbmdzL0phdmEvUHJvZ3JhbUV4Y2VwdGlvbi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYzMzUwMTAKLS0tIC9kZXYvbnVsbAorKysgYi9CaW5kaW5ncy9KYXZhL1Byb2dyYW1FeGNlcHRpb24uamF2YQpAQCAtMCwwICsxLDI2IEBACisvKgorICogbGliYnJsYXBpIC0gQSBsaWJyYXJ5IHByb3ZpZGluZyBhY2Nlc3MgdG8gYnJhaWxsZSB0ZXJtaW5hbHMgZm9yIGFwcGxpY2F0aW9ucy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAyMyBieQorICogICBTYW11ZWwgVGhpYmF1bHQgPFNhbXVlbC5UaGliYXVsdEBlbnMtbHlvbi5vcmc+CisgKiAgIFPDqWJhc3RpZW4gSGluZGVyZXIgPFNlYmFzdGllbi5IaW5kZXJlckBlbnMtbHlvbi5vcmc+CisgKgorICogbGliYnJsYXBpIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKK3BhY2thZ2Ugb3JnLmExMXkuYnJsYXBpOworCitwdWJsaWMgY2xhc3MgUHJvZ3JhbUV4Y2VwdGlvbiBleHRlbmRzIEV4Y2VwdGlvbiB7CisgIHB1YmxpYyBQcm9ncmFtRXhjZXB0aW9uIChTdHJpbmcgZm9ybWF0LCBPYmplY3QuLi4gYXJndW1lbnRzKSB7CisgICAgc3VwZXIoU3RyaW5nLmZvcm1hdChmb3JtYXQsIGFyZ3VtZW50cykpOworICB9Cit9CmRpZmYgLS1naXQgYS9CaW5kaW5ncy9KYXZhL1JFQURNRSBiL0JpbmRpbmdzL0phdmEvUkVBRE1FCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNlOWRkYzgKLS0tIC9kZXYvbnVsbAorKysgYi9CaW5kaW5ncy9KYXZhL1JFQURNRQpAQCAtMCwwICsxLDUwIEBACithcGl0ZXN0IHtwcm9ncmFtIHwgY2xpZW50fSBbYXJndW1lbnQgLi4uXQorCitQcm9ncmFtcyAoc2VlIHRoZSBwcm9ncmFtcy8gc3ViZGlyZWN0b3J5KToKKyAgLWhlbHAKKyAgdmVyc2lvbgorCitDbGllbnRzIChzZWUgdGhlIGNsaWVudHMvIHN1YmRpcmVjdG9yeSk6CisgIC1oZWxwCisgIC1zZXJ2ZXIgaG9zdFs6cG9ydF0gKGRlZmF1bHQgaXMgbG9jYWxob3N0OjApCisgIC1hdXRob3JpemF0aW9uIHNjaGVtZSsuLi4KKyAgYXBpLWVycm9yCisgIGFwaS1leGNlcHRpb24KKyAgICAtd2FpdCBzZWNvbmRzIChkZWZhdWx0IGlzIDUpCisgIGJvdW5kLWNvbW1hbmRzCisgIGNvbXB1dGVyLWJyYWlsbGUKKyAgZHJpdmVyLWtleXMKKyAgZWNobyBbdHR5IC4uLl0KKyAgICAtY29tbWFuZHMgfCAta2V5cworICAgIC12YWx1ZXMgfCAtbmFtZXMKKyAgICAtcmVhZHMgY291bnQgKGRlZmF1bHQgaXMgMTApCisgICAgLXRpbWVvdXQgc2Vjb25kcyAoZGVmYXVsdCBpcyAxMCkKKyAgZ2V0LWRyaXZlcgorICBnZXQtbW9kZWwKKyAgZ2V0LXNpemUKKyAgbGlzdC1wYXJhbWV0ZXJzIFtwYXJhbWV0ZXIgW3N1YnBhcmFtXV0KKyAgcGF1c2UKKyAgICAtd2FpdCBzZWNvbmRzIChkZWZhdWx0IGlzIDUpCisgIHNldC1wYXJhbWV0ZXIgcGFyYW1ldGVyIHZhbHVlCisgIHdyaXRlLWFyZ3VtZW50cworICAgIC13YWl0IHNlY29uZHMgKGRlZmF1bHQgaXMgNSkKKyAgICAtdGV4dCB0ZXh0CisgICAgLWJlZ2luIGNlbGwjIChkZWZhdWx0IGlzIDEpCisgICAgLWxlbmd0aCAjY2VsbHMgKGRlZmF1bHQgaXMgbGFyZ2VzdCBzaXplIG9mOiB0ZXh0LCBhbmQtbWFzaywgb3ItbWFzaykKKyAgICAtY3Vyc29yIHtsZWF2ZSB8IG5vIHwgY2VsbCN9CisgICAgLWRpc3BsYXkge2RlZmF1bHQgfCBkaXNwbGF5I30KKyAgICAtZml4IHwgLW5vZml4CisgICAgLXJlbmRlcgorICB3cml0ZS1kb3RzIFtkb3RzIC4uLl0KKyAgICAtd2FpdCBzZWNvbmRzIChkZWZhdWx0IGlzIDUpCisgIHdyaXRlLXRleHQgW3RleHQgLi4uXQorICAgIC13YWl0IHNlY29uZHMgKGRlZmF1bHQgaXMgNSkKKyAgICAtY3Vyc29yIHtubyB8IGxlYXZlIHwgY2VsbCN9CisKK1RoZXNlIGFyZW4ndCBjYXNlIHNlbnNpdGl2ZSBhbmQgYWxsb3cgdW5hbWJpZ3VvdXMgdHJ1bmNhdGlvbnM6CisgIHByb2dyYW0gbmFtZXMgKGUuZy4gdiBmb3IgdmVyc2lvbikKKyAgY2xpZW50IG5hbWVzIChlLmcuIGwgZm9yIGxpc3QtcGFyYW1ldGVycykKKyAgb3B0aW9uIG5hbWVzIChlLmcuIC1oIGZvciAtaGVscCkKKyAgcGFyYW1ldGVyIG5hbWVzIChlLmcuIGNsaXAgZm9yIGNsaXBib2FyZC1jb250ZW50KQorICBib29sZWFuIG9wZXJhbmRzIChmYWxzZS90cnVlLCBvZmYvb24sIG5vL3llcywgMC8xKQorCmRpZmYgLS1naXQgYS9CaW5kaW5ncy9KYXZhL1Jvd0NlbGxzLmphdmEgYi9CaW5kaW5ncy9KYXZhL1Jvd0NlbGxzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGJkNTc5NAotLS0gL2Rldi9udWxsCisrKyBiL0JpbmRpbmdzL0phdmEvUm93Q2VsbHMuamF2YQpAQCAtMCwwICsxLDg1IEBACisvKgorICogbGliYnJsYXBpIC0gQSBsaWJyYXJ5IHByb3ZpZGluZyBhY2Nlc3MgdG8gYnJhaWxsZSB0ZXJtaW5hbHMgZm9yIGFwcGxpY2F0aW9ucy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAyMyBieQorICogICBTYW11ZWwgVGhpYmF1bHQgPFNhbXVlbC5UaGliYXVsdEBlbnMtbHlvbi5vcmc+CisgKiAgIFPDqWJhc3RpZW4gSGluZGVyZXIgPFNlYmFzdGllbi5IaW5kZXJlckBlbnMtbHlvbi5vcmc+CisgKgorICogbGliYnJsYXBpIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKK3BhY2thZ2Ugb3JnLmExMXkuYnJsYXBpOworCitwdWJsaWMgY2xhc3MgUm93Q2VsbHMgZXh0ZW5kcyBQYXJhbWV0ZXJDb21wb25lbnQgeworICBwcml2YXRlIGZpbmFsIHN0YXRpYyBpbnQgQllURV9TSVpFID0gQnl0ZS5TSVpFOworCisgIHByaXZhdGUgZmluYWwgYnl0ZVtdIGNlbGxBcnJheTsKKyAgcHJpdmF0ZSBmaW5hbCBCaXRNYXNrIGNlbGxNYXNrOworCisgIHByaXZhdGUgZmluYWwgaW50IGNvcHlCeXRlcyAoYnl0ZVtdIHRvLCBieXRlW10gZnJvbSwgaW50IGluZGV4KSB7CisgICAgaW50IGNvdW50ID0gdG8ubGVuZ3RoOworICAgIFN5c3RlbS5hcnJheWNvcHkoZnJvbSwgaW5kZXgsIHRvLCAwLCBjb3VudCk7CisgICAgcmV0dXJuIGluZGV4ICsgY291bnQ7CisgIH0KKworICBwdWJsaWMgUm93Q2VsbHMgKGJ5dGVbXSBieXRlcykgeworICAgIGlmIChieXRlcy5sZW5ndGggPT0gMCkgeworICAgICAgY2VsbEFycmF5ID0gbnVsbDsKKyAgICAgIGNlbGxNYXNrID0gbmV3IEJpdE1hc2sobmV3IGJ5dGVbMF0pOworICAgIH0gZWxzZSB7CisgICAgICBjZWxsQXJyYXkgPSBuZXcgYnl0ZVswWDEwMF07CisgICAgICBpbnQgaW5kZXggPSBjb3B5Qnl0ZXMoY2VsbEFycmF5LCBieXRlcywgMCk7CisKKyAgICAgIHsKKyAgICAgICAgYnl0ZVtdIG1hc2sgPSBuZXcgYnl0ZVtjZWxsQXJyYXkubGVuZ3RoIC8gQllURV9TSVpFXTsKKyAgICAgICAgaW5kZXggPSBjb3B5Qnl0ZXMobWFzaywgYnl0ZXMsIGluZGV4KTsKKyAgICAgICAgY2VsbE1hc2sgPSBuZXcgQml0TWFzayhtYXNrKTsKKyAgICAgIH0KKyAgICB9CisgIH0KKworICBwdWJsaWMgaW50IGdldFNpemUgKCkgeworICAgIHJldHVybiBjZWxsQXJyYXkubGVuZ3RoOworICB9CisKKyAgcHVibGljIGJvb2xlYW4gaXNEZWZpbmVkIChpbnQgaW5kZXgpIHsKKyAgICByZXR1cm4gY2VsbE1hc2suaXNTZXQoaW5kZXgpOworICB9CisKKyAgcHVibGljIGJ5dGUgZ2V0Q2VsbCAoaW50IGluZGV4KSB7CisgICAgcmV0dXJuIGlzRGVmaW5lZChpbmRleCk/IGNlbGxBcnJheVtpbmRleF06IDA7CisgIH0KKworICBAT3ZlcnJpZGUKKyAgcHVibGljIFN0cmluZyB0b1N0cmluZyAoKSB7CisgICAgU3RyaW5nQnVpbGRlciBzYiA9IG5ldyBTdHJpbmdCdWlsZGVyKCk7CisgICAgc2IuYXBwZW5kKCd7Jyk7CisgICAgYm9vbGVhbiBmaXJzdCA9IHRydWU7CisKKyAgICBmb3IgKGludCBpbmRleCA6IGNlbGxNYXNrLmdldEJpdE51bWJlcnMoKSkgeworICAgICAgaWYgKGZpcnN0KSB7CisgICAgICAgIGZpcnN0ID0gZmFsc2U7CisgICAgICB9IGVsc2UgeworICAgICAgICBzYi5hcHBlbmQoIiwgIik7CisgICAgICB9CisKKyAgICAgIHNiLmFwcGVuZCgKKyAgICAgICAgU3RyaW5nLmZvcm1hdCgKKyAgICAgICAgICAiJTAyWDolcyIsIGluZGV4LCBhc0RvdHMoY2VsbEFycmF5W2luZGV4XSkKKyAgICAgICAgKQorICAgICAgKTsKKyAgICB9CisKKyAgICBzYi5hcHBlbmQoJ30nKTsKKyAgICByZXR1cm4gc2IudG9TdHJpbmcoKTsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvQmluZGluZ3MvSmF2YS9TZW1hbnRpY0V4Y2VwdGlvbi5qYXZhIGIvQmluZGluZ3MvSmF2YS9TZW1hbnRpY0V4Y2VwdGlvbi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjViODIxZjIKLS0tIC9kZXYvbnVsbAorKysgYi9CaW5kaW5ncy9KYXZhL1NlbWFudGljRXhjZXB0aW9uLmphdmEKQEAgLTAsMCArMSwyNiBAQAorLyoKKyAqIGxpYmJybGFwaSAtIEEgbGlicmFyeSBwcm92aWRpbmcgYWNjZXNzIHRvIGJyYWlsbGUgdGVybWluYWxzIGZvciBhcHBsaWNhdGlvbnMuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMjMgYnkKKyAqICAgU2FtdWVsIFRoaWJhdWx0IDxTYW11ZWwuVGhpYmF1bHRAZW5zLWx5b24ub3JnPgorICogICBTw6liYXN0aWVuIEhpbmRlcmVyIDxTZWJhc3RpZW4uSGluZGVyZXJAZW5zLWx5b24ub3JnPgorICoKKyAqIGxpYmJybGFwaSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorICoKKyAqIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyAqLworCitwYWNrYWdlIG9yZy5hMTF5LmJybGFwaTsKKworcHVibGljIGNsYXNzIFNlbWFudGljRXhjZXB0aW9uIGV4dGVuZHMgT3BlcmFuZEV4Y2VwdGlvbiB7CisgIHB1YmxpYyBTZW1hbnRpY0V4Y2VwdGlvbiAoU3RyaW5nIGZvcm1hdCwgT2JqZWN0Li4uIGFyZ3VtZW50cykgeworICAgIHN1cGVyKGZvcm1hdCwgYXJndW1lbnRzKTsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvQmluZGluZ3MvSmF2YS9TdHJpbmdzLmphdmEgYi9CaW5kaW5ncy9KYXZhL1N0cmluZ3MuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMDQwOTNhCi0tLSAvZGV2L251bGwKKysrIGIvQmluZGluZ3MvSmF2YS9TdHJpbmdzLmphdmEKQEAgLTAsMCArMSwxNTAgQEAKKy8qCisgKiBsaWJicmxhcGkgLSBBIGxpYnJhcnkgcHJvdmlkaW5nIGFjY2VzcyB0byBicmFpbGxlIHRlcm1pbmFscyBmb3IgYXBwbGljYXRpb25zLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNi0yMDIzIGJ5CisgKiAgIFNhbXVlbCBUaGliYXVsdCA8U2FtdWVsLlRoaWJhdWx0QGVucy1seW9uLm9yZz4KKyAqICAgU8OpYmFzdGllbiBIaW5kZXJlciA8U2ViYXN0aWVuLkhpbmRlcmVyQGVucy1seW9uLm9yZz4KKyAqCisgKiBsaWJicmxhcGkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorICoKKyAqIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyAqCisgKiBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisgKi8KKworcGFja2FnZSBvcmcuYTExeS5icmxhcGk7CisKK2ltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKK2ltcG9ydCBqYXZhLnV0aWwuTWFwOworaW1wb3J0IGphdmEudXRpbC5yZWdleC5NYXRjaGVyOworaW1wb3J0IGphdmEudXRpbC5yZWdleC5QYXR0ZXJuOworCitwdWJsaWMgYWJzdHJhY3QgY2xhc3MgU3RyaW5ncyB7CisgIHByaXZhdGUgU3RyaW5ncyAoKSB7CisgIH0KKworICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gaXNBYmJyZXZpYXRpb24gKFN0cmluZyBhY3R1YWwsIFN0cmluZyBzdXBwbGllZCkgeworICAgIGludCBjb3VudCA9IHN1cHBsaWVkLmxlbmd0aCgpOworICAgIGlmIChjb3VudCA9PSAwKSByZXR1cm4gZmFsc2U7CisgICAgaWYgKGNvdW50ID4gYWN0dWFsLmxlbmd0aCgpKSByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIGFjdHVhbC5yZWdpb25NYXRjaGVzKHRydWUsIDAsIHN1cHBsaWVkLCAwLCBjb3VudCk7CisgIH0KKworICBwcml2YXRlIGZpbmFsIHN0YXRpYyBNYXA8U3RyaW5nLCBQYXR0ZXJuPiBwYXR0ZXJuQ2FjaGUgPSBuZXcgSGFzaE1hcDw+KCk7CisKKyAgcHVibGljIHN0YXRpYyBQYXR0ZXJuIGdldFBhdHRlcm4gKFN0cmluZyBleHByZXNzaW9uKSB7CisgICAgc3luY2hyb25pemVkIChwYXR0ZXJuQ2FjaGUpIHsKKyAgICAgIHJldHVybiBwYXR0ZXJuQ2FjaGUuY29tcHV0ZUlmQWJzZW50KGV4cHJlc3Npb24sIFBhdHRlcm46OmNvbXBpbGUpOworICAgIH0KKyAgfQorCisgIHB1YmxpYyBzdGF0aWMgTWF0Y2hlciBnZXRNYXRjaGVyIChTdHJpbmcgZXhwcmVzc2lvbiwgU3RyaW5nIHRleHQpIHsKKyAgICByZXR1cm4gZ2V0UGF0dGVybihleHByZXNzaW9uKS5tYXRjaGVyKHRleHQpOworICB9CisKKyAgcHVibGljIHN0YXRpYyBTdHJpbmcgcmVwbGFjZUFsbCAoU3RyaW5nIHRleHQsIFN0cmluZyBleHByZXNzaW9uLCBTdHJpbmcgcmVwbGFjZW1lbnQpIHsKKyAgICByZXR1cm4gZ2V0TWF0Y2hlcihleHByZXNzaW9uLCB0ZXh0KS5yZXBsYWNlQWxsKHJlcGxhY2VtZW50KTsKKyAgfQorCisgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIHdvcmRpZnkgKFN0cmluZyBzdHJpbmcpIHsKKyAgICBzdHJpbmcgPSByZXBsYWNlQWxsKHN0cmluZywgIl5cXHMqKC4qPylcXHMqJCIsICIkMSIpOworCisgICAgaWYgKCFzdHJpbmcuaXNFbXB0eSgpKSB7CisgICAgICBzdHJpbmcgPSByZXBsYWNlQWxsKHN0cmluZywgIig/PD0uKSg/PVxccHtVcHBlcn0pIiwgIiAiKTsKKyAgICAgIHN0cmluZyA9IHJlcGxhY2VBbGwoc3RyaW5nLCAiXFxzKyIsICIgIik7CisgICAgfQorCisgICAgcmV0dXJuIHN0cmluZzsKKyAgfQorICAKKyAgcHVibGljIHN0YXRpYyBpbnQgZmluZE5vbmVtcHR5TGluZSAoQ2hhclNlcXVlbmNlIHRleHQpIHsKKyAgICBpbnQgbGVuZ3RoID0gdGV4dC5sZW5ndGgoKTsKKyAgICBpbnQgYXQgPSAwOworCisgICAgZm9yIChpbnQgaW5kZXg9MDsgaW5kZXg8bGVuZ3RoOyBpbmRleCs9MSkgeworICAgICAgY2hhciBjaGFyYWN0ZXIgPSB0ZXh0LmNoYXJBdChpbmRleCk7CisKKyAgICAgIGlmIChjaGFyYWN0ZXIgPT0gJ1xuJykgeworICAgICAgICBhdCA9IGluZGV4ICsgMTsKKyAgICAgIH0gZWxzZSBpZiAoIUNoYXJhY3Rlci5pc1doaXRlc3BhY2UoY2hhcmFjdGVyKSkgeworICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gYXQ7CisgIH0KKworICBwdWJsaWMgc3RhdGljIGludCBmaW5kVHJhaWxpbmdXaGl0ZXNwYWNlIChDaGFyU2VxdWVuY2UgdGV4dCkgeworICAgIGludCBpbmRleCA9IHRleHQubGVuZ3RoKCk7CisKKyAgICB3aGlsZSAoLS1pbmRleCA+PSAwKSB7CisgICAgICBpZiAoIUNoYXJhY3Rlci5pc1doaXRlc3BhY2UodGV4dC5jaGFyQXQoaW5kZXgpKSkgYnJlYWs7CisgICAgfQorCisgICAgcmV0dXJuIGluZGV4ICsgMTsKKyAgfQorCisgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIHJlbW92ZVRyYWlsaW5nV2hpdGVzcGFjZSAoU3RyaW5nIHRleHQpIHsKKyAgICByZXR1cm4gdGV4dC5zdWJzdHJpbmcoMCwgZmluZFRyYWlsaW5nV2hpdGVzcGFjZSh0ZXh0KSk7CisgIH0KKworICBwdWJsaWMgc3RhdGljIFN0cmluZyBjb21wcmVzc1doaXRlc3BhY2UgKFN0cmluZyB0ZXh0KSB7CisgICAgdGV4dCA9IHJlbW92ZVRyYWlsaW5nV2hpdGVzcGFjZSh0ZXh0KTsKKyAgICBpZiAoIXRleHQuaXNFbXB0eSgpKSB0ZXh0ID0gcmVwbGFjZUFsbCh0ZXh0LCAiKD88PVxcUylcXHMrIiwgIiAiKTsKKyAgICByZXR1cm4gdGV4dDsKKyAgfQorCisgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGNvbXByZXNzRW1wdHlMaW5lcyAoU3RyaW5nIHRleHQpIHsKKyAgICByZXR1cm4gcmVwbGFjZUFsbCh0ZXh0LCAiXG57Mix9IiwgIlxuXG4iKTsKKyAgfQorCisgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGZvcm1hdFBhcmFncmFwaHMgKFN0cmluZyB0ZXh0LCBpbnQgd2lkdGgpIHsKKyAgICBTdHJpbmdCdWlsZGVyIHJlc3VsdCA9IG5ldyBTdHJpbmdCdWlsZGVyKCk7CisKKyAgICBpbnQgbGVuZ3RoID0gdGV4dC5sZW5ndGgoKTsKKyAgICBpbnQgZnJvbSA9IDA7CisKKyAgICB3aGlsZSAoZnJvbSA8IGxlbmd0aCkgeworICAgICAgaW50IHRvID0gdGV4dC5pbmRleE9mKCdcbicsIGZyb20pOworICAgICAgaWYgKHRvIDwgMCkgdG8gPSBsZW5ndGg7CisgICAgICBTdHJpbmcgbGluZSA9IGNvbXByZXNzV2hpdGVzcGFjZSh0ZXh0LnN1YnN0cmluZyhmcm9tLCB0bykpOworCisgICAgICBpZiAoIWxpbmUuaXNFbXB0eSgpKSB7CisgICAgICAgIGlmICghQ2hhcmFjdGVyLmlzV2hpdGVzcGFjZShsaW5lLmNoYXJBdCgwKSkpIHsKKyAgICAgICAgICBpZiAocmVzdWx0Lmxlbmd0aCgpID4gMCkgcmVzdWx0LmFwcGVuZCgnXG4nKTsKKworICAgICAgICAgIHdoaWxlIChsaW5lLmxlbmd0aCgpID4gd2lkdGgpIHsKKyAgICAgICAgICAgIGludCBlbmQgPSBsaW5lLmxhc3RJbmRleE9mKCcgJywgd2lkdGgpOworCisgICAgICAgICAgICBpZiAoZW5kIDwgMCkgeworICAgICAgICAgICAgICBlbmQgPSBsaW5lLmluZGV4T2YoJyAnLCB3aWR0aCk7CisgICAgICAgICAgICAgIGlmIChlbmQgPCAwKSBicmVhazsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChsaW5lLnN1YnN0cmluZygwLCBlbmQpKS5hcHBlbmQoJ1xuJyk7CisgICAgICAgICAgICBsaW5lID0gbGluZS5zdWJzdHJpbmcoZW5kKzEpOworICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHJlc3VsdC5hcHBlbmQobGluZSk7CisgICAgICB9CisKKyAgICAgIHJlc3VsdC5hcHBlbmQoJ1xuJyk7CisgICAgICBmcm9tID0gdG8gKyAxOworICAgIH0KKworICAgIHJlc3VsdC5zZXRMZW5ndGgoZmluZFRyYWlsaW5nV2hpdGVzcGFjZShyZXN1bHQpKTsKKyAgICByZXN1bHQuZGVsZXRlKDAsIGZpbmROb25lbXB0eUxpbmUocmVzdWx0KSk7CisKKyAgICByZXR1cm4gY29tcHJlc3NFbXB0eUxpbmVzKHJlc3VsdC50b1N0cmluZygpKTsKKyAgfQorCisgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGZvcm1hdFBhcmFncmFwaHMgKFN0cmluZyB0ZXh0KSB7CisgICAgcmV0dXJuIGZvcm1hdFBhcmFncmFwaHModGV4dCwgNzIpOworICB9Cit9CmRpZmYgLS1naXQgYS9CaW5kaW5ncy9KYXZhL1N5bnRheEV4Y2VwdGlvbi5qYXZhIGIvQmluZGluZ3MvSmF2YS9TeW50YXhFeGNlcHRpb24uamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45M2M1NDA2Ci0tLSAvZGV2L251bGwKKysrIGIvQmluZGluZ3MvSmF2YS9TeW50YXhFeGNlcHRpb24uamF2YQpAQCAtMCwwICsxLDI2IEBACisvKgorICogbGliYnJsYXBpIC0gQSBsaWJyYXJ5IHByb3ZpZGluZyBhY2Nlc3MgdG8gYnJhaWxsZSB0ZXJtaW5hbHMgZm9yIGFwcGxpY2F0aW9ucy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAyMyBieQorICogICBTYW11ZWwgVGhpYmF1bHQgPFNhbXVlbC5UaGliYXVsdEBlbnMtbHlvbi5vcmc+CisgKiAgIFPDqWJhc3RpZW4gSGluZGVyZXIgPFNlYmFzdGllbi5IaW5kZXJlckBlbnMtbHlvbi5vcmc+CisgKgorICogbGliYnJsYXBpIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKK3BhY2thZ2Ugb3JnLmExMXkuYnJsYXBpOworCitwdWJsaWMgY2xhc3MgU3ludGF4RXhjZXB0aW9uIGV4dGVuZHMgT3BlcmFuZEV4Y2VwdGlvbiB7CisgIHB1YmxpYyBTeW50YXhFeGNlcHRpb24gKFN0cmluZyBmb3JtYXQsIE9iamVjdC4uLiBhcmd1bWVudHMpIHsKKyAgICBzdXBlcihmb3JtYXQsIGFyZ3VtZW50cyk7CisgIH0KK30KZGlmZiAtLWdpdCBhL0JpbmRpbmdzL0phdmEvVG9vTWFueVBhcmFtZXRlcnNFeGNlcHRpb24uamF2YSBiL0JpbmRpbmdzL0phdmEvVG9vTWFueVBhcmFtZXRlcnNFeGNlcHRpb24uamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOTFmNjA2Ci0tLSAvZGV2L251bGwKKysrIGIvQmluZGluZ3MvSmF2YS9Ub29NYW55UGFyYW1ldGVyc0V4Y2VwdGlvbi5qYXZhCkBAIC0wLDAgKzEsMzAgQEAKKy8qCisgKiBsaWJicmxhcGkgLSBBIGxpYnJhcnkgcHJvdmlkaW5nIGFjY2VzcyB0byBicmFpbGxlIHRlcm1pbmFscyBmb3IgYXBwbGljYXRpb25zLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNi0yMDIzIGJ5CisgKiAgIFNhbXVlbCBUaGliYXVsdCA8U2FtdWVsLlRoaWJhdWx0QGVucy1seW9uLm9yZz4KKyAqICAgU8OpYmFzdGllbiBIaW5kZXJlciA8U2ViYXN0aWVuLkhpbmRlcmVyQGVucy1seW9uLm9yZz4KKyAqCisgKiBsaWJicmxhcGkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorICoKKyAqIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyAqCisgKiBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisgKi8KKworcGFja2FnZSBvcmcuYTExeS5icmxhcGk7CisKK3B1YmxpYyBjbGFzcyBUb29NYW55UGFyYW1ldGVyc0V4Y2VwdGlvbiBleHRlbmRzIFN5bnRheEV4Y2VwdGlvbiB7CisgIHB1YmxpYyBUb29NYW55UGFyYW1ldGVyc0V4Y2VwdGlvbiAoU3RyaW5nW10gcGFyYW1ldGVycywgaW50IGF0KSB7CisgICAgc3VwZXIoInRvbyBtYW55IHBhcmFtZXRlcnMiKTsKKyAgfQorCisgIHB1YmxpYyBUb29NYW55UGFyYW1ldGVyc0V4Y2VwdGlvbiAoU3RyaW5nW10gcGFyYW1ldGVycykgeworICAgIHRoaXMocGFyYW1ldGVycywgMCk7CisgIH0KK30KZGlmZiAtLWdpdCBhL0JpbmRpbmdzL0phdmEvVW5hdmFpbGFibGVTZXJ2aWNlRXhjZXB0aW9uLmphdmEgYi9CaW5kaW5ncy9KYXZhL1VuYXZhaWxhYmxlU2VydmljZUV4Y2VwdGlvbi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM2MTJlY2MKLS0tIC9kZXYvbnVsbAorKysgYi9CaW5kaW5ncy9KYXZhL1VuYXZhaWxhYmxlU2VydmljZUV4Y2VwdGlvbi5qYXZhCkBAIC0wLDAgKzEsMjYgQEAKKy8qCisgKiBsaWJicmxhcGkgLSBBIGxpYnJhcnkgcHJvdmlkaW5nIGFjY2VzcyB0byBicmFpbGxlIHRlcm1pbmFscyBmb3IgYXBwbGljYXRpb25zLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNi0yMDIzIGJ5CisgKiAgIFNhbXVlbCBUaGliYXVsdCA8U2FtdWVsLlRoaWJhdWx0QGVucy1seW9uLm9yZz4KKyAqICAgU8OpYmFzdGllbiBIaW5kZXJlciA8U2ViYXN0aWVuLkhpbmRlcmVyQGVucy1seW9uLm9yZz4KKyAqCisgKiBsaWJicmxhcGkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorICoKKyAqIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyAqCisgKiBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisgKi8KKworcGFja2FnZSBvcmcuYTExeS5icmxhcGk7CisKK3B1YmxpYyBjbGFzcyBVbmF2YWlsYWJsZVNlcnZpY2VFeGNlcHRpb24gZXh0ZW5kcyBIb3N0RXhjZXB0aW9uIHsKKyAgcHVibGljIFVuYXZhaWxhYmxlU2VydmljZUV4Y2VwdGlvbiAoU3RyaW5nIGhvc3QpIHsKKyAgICBzdXBlcihob3N0LCAic2VydmljZSBub3QgYXZhaWxhYmxlIik7CisgIH0KK30KZGlmZiAtLWdpdCBhL0JpbmRpbmdzL0phdmEvVW5rbm93bkhvc3RFeGNlcHRpb24uamF2YSBiL0JpbmRpbmdzL0phdmEvVW5rbm93bkhvc3RFeGNlcHRpb24uamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZTQ1MWMzCi0tLSAvZGV2L251bGwKKysrIGIvQmluZGluZ3MvSmF2YS9Vbmtub3duSG9zdEV4Y2VwdGlvbi5qYXZhCkBAIC0wLDAgKzEsMjYgQEAKKy8qCisgKiBsaWJicmxhcGkgLSBBIGxpYnJhcnkgcHJvdmlkaW5nIGFjY2VzcyB0byBicmFpbGxlIHRlcm1pbmFscyBmb3IgYXBwbGljYXRpb25zLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNi0yMDIzIGJ5CisgKiAgIFNhbXVlbCBUaGliYXVsdCA8U2FtdWVsLlRoaWJhdWx0QGVucy1seW9uLm9yZz4KKyAqICAgU8OpYmFzdGllbiBIaW5kZXJlciA8U2ViYXN0aWVuLkhpbmRlcmVyQGVucy1seW9uLm9yZz4KKyAqCisgKiBsaWJicmxhcGkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorICoKKyAqIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyAqCisgKiBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisgKi8KKworcGFja2FnZSBvcmcuYTExeS5icmxhcGk7CisKK3B1YmxpYyBjbGFzcyBVbmtub3duSG9zdEV4Y2VwdGlvbiBleHRlbmRzIEhvc3RFeGNlcHRpb24geworICBwdWJsaWMgVW5rbm93bkhvc3RFeGNlcHRpb24gKFN0cmluZyBob3N0KSB7CisgICAgc3VwZXIoaG9zdCwgInVua25vd24gaG9zdCIpOworICB9Cit9CmRpZmYgLS1naXQgYS9CaW5kaW5ncy9KYXZhL1dyaXRlQXJndW1lbnRzLmphdmEgYi9CaW5kaW5ncy9KYXZhL1dyaXRlQXJndW1lbnRzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2I2NmI0YwotLS0gL2Rldi9udWxsCisrKyBiL0JpbmRpbmdzL0phdmEvV3JpdGVBcmd1bWVudHMuamF2YQpAQCAtMCwwICsxLDI5MyBAQAorLyoKKyAqIGxpYmJybGFwaSAtIEEgbGlicmFyeSBwcm92aWRpbmcgYWNjZXNzIHRvIGJyYWlsbGUgdGVybWluYWxzIGZvciBhcHBsaWNhdGlvbnMuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMjMgYnkKKyAqICAgU2FtdWVsIFRoaWJhdWx0IDxTYW11ZWwuVGhpYmF1bHRAZW5zLWx5b24ub3JnPgorICogICBTw6liYXN0aWVuIEhpbmRlcmVyIDxTZWJhc3RpZW4uSGluZGVyZXJAZW5zLWx5b24ub3JnPgorICoKKyAqIGxpYmJybGFwaSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorICoKKyAqIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyAqLworCitwYWNrYWdlIG9yZy5hMTF5LmJybGFwaTsKKworaW1wb3J0IGphdmEudXRpbC5BcnJheXM7CisKK3B1YmxpYyBjbGFzcyBXcml0ZUFyZ3VtZW50cyBleHRlbmRzIENvbXBvbmVudCB7CisgIHByaXZhdGUgU3RyaW5nIHRleHQgPSBudWxsOworICBwcml2YXRlIGJ5dGUgYW5kTWFza1tdID0gbnVsbDsKKyAgcHJpdmF0ZSBieXRlIG9yTWFza1tdID0gbnVsbDsKKyAgcHJpdmF0ZSBpbnQgcmVnaW9uQmVnaW4gPSAwOworICBwcml2YXRlIGludCByZWdpb25TaXplID0gMDsKKyAgcHJpdmF0ZSBpbnQgY3Vyc29yUG9zaXRpb24gPSBDb25zdGFudHMuQ1VSU09SX0xFQVZFOworICBwcml2YXRlIGludCBkaXNwbGF5TnVtYmVyID0gQ29uc3RhbnRzLkRJU1BMQVlfREVGQVVMVDsKKworICBwdWJsaWMgV3JpdGVBcmd1bWVudHMgKCkgeworICB9CisKKyAgcHVibGljIFN0cmluZyBnZXRUZXh0ICgpIHsKKyAgICByZXR1cm4gdGV4dDsKKyAgfQorCisgIHB1YmxpYyBXcml0ZUFyZ3VtZW50cyBzZXRUZXh0IChTdHJpbmcgdGV4dCkgeworICAgIHRoaXMudGV4dCA9IHRleHQ7CisgICAgcmV0dXJuIHRoaXM7CisgIH0KKworICBwdWJsaWMgYnl0ZVtdIGdldEFuZE1hc2sgKCkgeworICAgIHJldHVybiBhbmRNYXNrOworICB9CisKKyAgcHVibGljIFdyaXRlQXJndW1lbnRzIHNldEFuZE1hc2sgKGJ5dGVbXSBtYXNrKSB7CisgICAgYW5kTWFzayA9IG1hc2s7CisgICAgcmV0dXJuIHRoaXM7CisgIH0KKworICBwdWJsaWMgYnl0ZVtdIGdldE9yTWFzayAoKSB7CisgICAgcmV0dXJuIG9yTWFzazsKKyAgfQorCisgIHB1YmxpYyBXcml0ZUFyZ3VtZW50cyBzZXRPck1hc2sgKGJ5dGVbXSBtYXNrKSB7CisgICAgb3JNYXNrID0gbWFzazsKKyAgICByZXR1cm4gdGhpczsKKyAgfQorCisgIHB1YmxpYyBpbnQgZ2V0UmVnaW9uQmVnaW4gKCkgeworICAgIHJldHVybiByZWdpb25CZWdpbjsKKyAgfQorCisgIHB1YmxpYyBXcml0ZUFyZ3VtZW50cyBzZXRSZWdpb25CZWdpbiAoaW50IGJlZ2luKSB7CisgICAgcmVnaW9uQmVnaW4gPSBiZWdpbjsKKyAgICByZXR1cm4gdGhpczsKKyAgfQorCisgIHB1YmxpYyBpbnQgZ2V0UmVnaW9uU2l6ZSAoKSB7CisgICAgcmV0dXJuIHJlZ2lvblNpemU7CisgIH0KKworICBwdWJsaWMgV3JpdGVBcmd1bWVudHMgc2V0UmVnaW9uU2l6ZSAoaW50IHNpemUpIHsKKyAgICByZWdpb25TaXplID0gc2l6ZTsKKyAgICByZXR1cm4gdGhpczsKKyAgfQorCisgIHB1YmxpYyBXcml0ZUFyZ3VtZW50cyBzZXRSZWdpb24gKGludCBiZWdpbiwgaW50IHNpemUpIHsKKyAgICBzZXRSZWdpb25CZWdpbihiZWdpbik7CisgICAgc2V0UmVnaW9uU2l6ZShzaXplKTsKKyAgICByZXR1cm4gdGhpczsKKyAgfQorCisgIHB1YmxpYyBpbnQgZ2V0Q3Vyc29yUG9zaXRpb24gKCkgeworICAgIHJldHVybiBjdXJzb3JQb3NpdGlvbjsKKyAgfQorCisgIHB1YmxpYyBXcml0ZUFyZ3VtZW50cyBzZXRDdXJzb3JQb3NpdGlvbiAoaW50IHBvc2l0aW9uKSB7CisgICAgY3Vyc29yUG9zaXRpb24gPSBwb3NpdGlvbjsKKyAgICByZXR1cm4gdGhpczsKKyAgfQorCisgIHB1YmxpYyBpbnQgZ2V0RGlzcGxheU51bWJlciAoKSB7CisgICAgcmV0dXJuIGRpc3BsYXlOdW1iZXI7CisgIH0KKworICBwdWJsaWMgV3JpdGVBcmd1bWVudHMgc2V0RGlzcGxheU51bWJlciAoaW50IG51bWJlcikgeworICAgIGRpc3BsYXlOdW1iZXIgPSBudW1iZXI7CisgICAgcmV0dXJuIHRoaXM7CisgIH0KKworICBwdWJsaWMgZmluYWwgc3RhdGljIFN0cmluZyBURVhUID0gInRleHQiOworICBwdWJsaWMgZmluYWwgc3RhdGljIFN0cmluZyBBTkRfTUFTSyA9ICJhbmQtbWFzayI7CisgIHB1YmxpYyBmaW5hbCBzdGF0aWMgU3RyaW5nIE9SX01BU0sgPSAib3ItbWFzayI7CisgIHB1YmxpYyBmaW5hbCBzdGF0aWMgU3RyaW5nIFJFR0lPTl9CRUdJTiA9ICJyZWdpb24gYmVnaW4iOworICBwdWJsaWMgZmluYWwgc3RhdGljIFN0cmluZyBSRUdJT05fU0laRSA9ICJyZWdpb24gc2l6ZSI7CisgIHB1YmxpYyBmaW5hbCBzdGF0aWMgU3RyaW5nIENVUlNPUl9QT1NJVElPTiA9ICJjdXJzb3IgcG9zaXRpb24iOworICBwdWJsaWMgZmluYWwgc3RhdGljIFN0cmluZyBESVNQTEFZX05VTUJFUiA9ICJkaXNwbGF5IG51bWJlciI7CisKKyAgcHJpdmF0ZSBzdGF0aWMgdm9pZCBjaGVja1JhbmdlIChTdHJpbmcgZGVzY3JpcHRpb24sIGludCB2YWx1ZSwgSW50ZWdlciBtaW5pbXVtLCBJbnRlZ2VyIG1heGltdW0pIHsKKyAgICB0cnkgeworICAgICAgaWYgKG1pbmltdW0gIT0gbnVsbCkgUGFyc2UuY2hlY2tNaW5pbXVtKGRlc2NyaXB0aW9uLCB2YWx1ZSwgbWluaW11bSk7CisgICAgICBpZiAobWF4aW11bSAhPSBudWxsKSBQYXJzZS5jaGVja01heGltdW0oZGVzY3JpcHRpb24sIHZhbHVlLCBtYXhpbXVtKTsKKyAgICB9IGNhdGNoIChTeW50YXhFeGNlcHRpb24gZXhjZXB0aW9uKSB7CisgICAgICB0aHJvdyBuZXcgSWxsZWdhbFN0YXRlRXhjZXB0aW9uKGV4Y2VwdGlvbi5nZXRNZXNzYWdlKCkpOworICAgIH0KKyAgfQorCisgIHB1YmxpYyBmaW5hbCB2b2lkIGNoZWNrIChpbnQgY2VsbENvdW50LCBib29sZWFuIGZpeCkgeworICAgIGJvb2xlYW4gaGF2ZVJlZ2lvbkJlZ2luID0gcmVnaW9uQmVnaW4gIT0gMDsKKyAgICBib29sZWFuIGhhdmVSZWdpb25TaXplID0gcmVnaW9uU2l6ZSAhPSAwOworICAgIGJvb2xlYW4gaGF2ZVJlZ2lvbiA9IGhhdmVSZWdpb25CZWdpbiB8fCBoYXZlUmVnaW9uU2l6ZTsKKworICAgIGJvb2xlYW4gaGF2ZVRleHQgPSB0ZXh0ICE9IG51bGw7CisgICAgYm9vbGVhbiBoYXZlQW5kTWFzayA9IGFuZE1hc2sgIT0gbnVsbDsKKyAgICBib29sZWFuIGhhdmVPck1hc2sgPSBvck1hc2sgIT0gbnVsbDsKKyAgICBib29sZWFuIGhhdmVDb250ZW50ID0gaGF2ZVRleHQgfHwgaGF2ZUFuZE1hc2sgfHwgaGF2ZU9yTWFzazsKKworICAgIGlmIChoYXZlUmVnaW9uIHx8IGhhdmVDb250ZW50KSB7CisgICAgICBpZiAoIWhhdmVDb250ZW50KSB7CisgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oCisgICAgICAgICAgU3RyaW5nLmZvcm1hdCgKKyAgICAgICAgICAgICJyZWdpb24gY29udGVudCAoJXMsICVzLCBhbmQvb3IgJXMpIG5vdCBzcGVjaWZpZWQiLAorICAgICAgICAgICAgVEVYVCwgQU5EX01BU0ssIE9SX01BU0sKKyAgICAgICAgICApCisgICAgICAgICk7CisgICAgICB9CisKKyAgICAgIGlmICghaGF2ZVJlZ2lvbkJlZ2luKSB7CisgICAgICAgIGlmICghZml4KSB7CisgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbigKKyAgICAgICAgICAgIFN0cmluZy5mb3JtYXQoCisgICAgICAgICAgICAgICIlcyBub3Qgc2V0IiwgUkVHSU9OX0JFR0lOCisgICAgICAgICAgICApCisgICAgICAgICAgKTsKKyAgICAgICAgfQorCisgICAgICAgIHJlZ2lvbkJlZ2luID0gMTsKKyAgICAgICAgaGF2ZVJlZ2lvbiA9IGhhdmVSZWdpb25CZWdpbiA9IHRydWU7CisgICAgICB9CisKKyAgICAgIGlmICghaGF2ZVJlZ2lvblNpemUpIHsKKyAgICAgICAgaWYgKCFmaXgpIHsKKyAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbFN0YXRlRXhjZXB0aW9uKAorICAgICAgICAgICAgU3RyaW5nLmZvcm1hdCgKKyAgICAgICAgICAgICAgIiVzIG5vdCBzZXQiLCBSRUdJT05fU0laRQorICAgICAgICAgICAgKQorICAgICAgICAgICk7CisgICAgICAgIH0KKworICAgICAgICByZWdpb25TaXplID0gMDsKKyAgICAgICAgaWYgKGhhdmVUZXh0KSByZWdpb25TaXplID0gTWF0aC5tYXgocmVnaW9uU2l6ZSwgdGV4dC5sZW5ndGgoKSk7CisgICAgICAgIGlmIChoYXZlQW5kTWFzaykgcmVnaW9uU2l6ZSA9IE1hdGgubWF4KHJlZ2lvblNpemUsIGFuZE1hc2subGVuZ3RoKTsKKyAgICAgICAgaWYgKGhhdmVPck1hc2spIHJlZ2lvblNpemUgPSBNYXRoLm1heChyZWdpb25TaXplLCBvck1hc2subGVuZ3RoKTsKKyAgICAgICAgaGF2ZVJlZ2lvbiA9IGhhdmVSZWdpb25TaXplID0gdHJ1ZTsKKyAgICAgIH0KKworICAgICAgY2hlY2tSYW5nZShSRUdJT05fQkVHSU4sIHJlZ2lvbkJlZ2luLCAxLCBjZWxsQ291bnQpOworICAgICAgY2hlY2tSYW5nZShSRUdJT05fU0laRSwgcmVnaW9uU2l6ZSwgMSwgbnVsbCk7CisKKyAgICAgIHsKKyAgICAgICAgaW50IG1heGltdW0gPSBjZWxsQ291bnQgKyAxIC0gcmVnaW9uQmVnaW47CisKKyAgICAgICAgaWYgKCFmaXgpIHsKKyAgICAgICAgICBjaGVja1JhbmdlKFJFR0lPTl9TSVpFLCByZWdpb25TaXplLCBudWxsLCBtYXhpbXVtKTsKKyAgICAgICAgfSBlbHNlIGlmIChyZWdpb25TaXplID4gbWF4aW11bSkgeworICAgICAgICAgIHJlZ2lvblNpemUgPSBtYXhpbXVtOworICAgICAgICB9CisgICAgICB9CisKKyAgICAgIGlmIChoYXZlVGV4dCkgeworICAgICAgICBpbnQgdGV4dExlbmd0aCA9IHRleHQubGVuZ3RoKCk7CisKKyAgICAgICAgaWYgKHRleHRMZW5ndGggPiByZWdpb25TaXplKSB7CisgICAgICAgICAgaWYgKCFmaXgpIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oCisgICAgICAgICAgICAgIFN0cmluZy5mb3JtYXQoCisgICAgICAgICAgICAgICAgIiVzIGxlbmd0aCBpcyBncmVhdGVyIHRoYW4gJXM6ICVkID4gJWQiLAorICAgICAgICAgICAgICAgIFRFWFQsIFJFR0lPTl9TSVpFLAorICAgICAgICAgICAgICAgIHRleHRMZW5ndGgsIHJlZ2lvblNpemUKKyAgICAgICAgICAgICAgKQorICAgICAgICAgICAgKTsKKyAgICAgICAgICB9CisKKyAgICAgICAgICB0ZXh0ID0gdGV4dC5zdWJzdHJpbmcoMCwgcmVnaW9uU2l6ZSk7CisgICAgICAgIH0gZWxzZSBpZiAodGV4dExlbmd0aCA8IHJlZ2lvblNpemUpIHsKKyAgICAgICAgICBpZiAoIWZpeCkgeworICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbigKKyAgICAgICAgICAgICAgU3RyaW5nLmZvcm1hdCgKKyAgICAgICAgICAgICAgICAiJXMgbGVuZ3RoIGlzIGxlc3MgdGhhbiAlczogJWQgPCAlZCIsCisgICAgICAgICAgICAgICAgVEVYVCwgUkVHSU9OX1NJWkUsCisgICAgICAgICAgICAgICAgdGV4dExlbmd0aCwgcmVnaW9uU2l6ZQorICAgICAgICAgICAgICApCisgICAgICAgICAgICApOworICAgICAgICAgIH0KKworICAgICAgICAgIFN0cmluZ0J1aWxkZXIgbmV3VGV4dCA9IG5ldyBTdHJpbmdCdWlsZGVyKHRleHQpOworICAgICAgICAgIHdoaWxlIChuZXdUZXh0Lmxlbmd0aCgpIDwgcmVnaW9uU2l6ZSkgbmV3VGV4dC5hcHBlbmQoJyAnKTsKKyAgICAgICAgICB0ZXh0ID0gbmV3VGV4dC50b1N0cmluZygpOworICAgICAgICB9CisgICAgICB9CisKKyAgICAgIGlmIChoYXZlQW5kTWFzaykgeworICAgICAgICBpbnQgYW5kU2l6ZSA9IGFuZE1hc2subGVuZ3RoOworCisgICAgICAgIGlmIChhbmRTaXplID4gcmVnaW9uU2l6ZSkgeworICAgICAgICAgIGlmICghZml4KSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbFN0YXRlRXhjZXB0aW9uKAorICAgICAgICAgICAgICBTdHJpbmcuZm9ybWF0KAorICAgICAgICAgICAgICAgICIlcyBzaXplIGlzIGdyZWF0ZXIgdGhhbiAlczogJWQgPiAlZCIsCisgICAgICAgICAgICAgICAgQU5EX01BU0ssIFJFR0lPTl9TSVpFLAorICAgICAgICAgICAgICAgIGFuZFNpemUsIHJlZ2lvblNpemUKKyAgICAgICAgICAgICAgKQorICAgICAgICAgICAgKTsKKyAgICAgICAgICB9CisKKyAgICAgICAgICBieXRlW10gbmV3TWFzayA9IG5ldyBieXRlW3JlZ2lvblNpemVdOworICAgICAgICAgIFN5c3RlbS5hcnJheWNvcHkoYW5kTWFzaywgMCwgbmV3TWFzaywgMCwgcmVnaW9uU2l6ZSk7CisgICAgICAgICAgYW5kTWFzayA9IG5ld01hc2s7CisgICAgICAgIH0gZWxzZSBpZiAoYW5kU2l6ZSA8IHJlZ2lvblNpemUpIHsKKyAgICAgICAgICBpZiAoIWZpeCkgeworICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbigKKyAgICAgICAgICAgICAgU3RyaW5nLmZvcm1hdCgKKyAgICAgICAgICAgICAgICAiJXMgc2l6ZSBpcyBsZXNzIHRoYW4gJXM6ICVkIDwgJWQiLAorICAgICAgICAgICAgICAgIEFORF9NQVNLLCBSRUdJT05fU0laRSwKKyAgICAgICAgICAgICAgICBhbmRTaXplLCByZWdpb25TaXplCisgICAgICAgICAgICAgICkKKyAgICAgICAgICAgICk7CisgICAgICAgICAgfQorCisgICAgICAgICAgYnl0ZVtdIG5ld01hc2sgPSBuZXcgYnl0ZVtyZWdpb25TaXplXTsKKyAgICAgICAgICBTeXN0ZW0uYXJyYXljb3B5KGFuZE1hc2ssIDAsIG5ld01hc2ssIDAsIGFuZFNpemUpOworICAgICAgICAgIEFycmF5cy5maWxsKG5ld01hc2ssIGFuZFNpemUsIChyZWdpb25TaXplIC0gYW5kU2l6ZSksIChieXRlKUJZVEVfTUFTSyk7CisgICAgICAgICAgYW5kTWFzayA9IG5ld01hc2s7CisgICAgICAgIH0KKyAgICAgIH0KKworICAgICAgaWYgKGhhdmVPck1hc2spIHsKKyAgICAgICAgaW50IG9yU2l6ZSA9IG9yTWFzay5sZW5ndGg7CisKKyAgICAgICAgaWYgKG9yU2l6ZSA+IHJlZ2lvblNpemUpIHsKKyAgICAgICAgICBpZiAoIWZpeCkgeworICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbigKKyAgICAgICAgICAgICAgU3RyaW5nLmZvcm1hdCgKKyAgICAgICAgICAgICAgICAiJXMgc2l6ZSBpcyBncmVhdGVyIHRoYW4gJXM6ICVkID4gJWQiLAorICAgICAgICAgICAgICAgIE9SX01BU0ssIFJFR0lPTl9TSVpFLAorICAgICAgICAgICAgICAgIG9yU2l6ZSwgcmVnaW9uU2l6ZQorICAgICAgICAgICAgICApCisgICAgICAgICAgICApOworICAgICAgICAgIH0KKworICAgICAgICAgIGJ5dGVbXSBuZXdNYXNrID0gbmV3IGJ5dGVbcmVnaW9uU2l6ZV07CisgICAgICAgICAgU3lzdGVtLmFycmF5Y29weShvck1hc2ssIDAsIG5ld01hc2ssIDAsIHJlZ2lvblNpemUpOworICAgICAgICAgIG9yTWFzayA9IG5ld01hc2s7CisgICAgICAgIH0gZWxzZSBpZiAob3JTaXplIDwgcmVnaW9uU2l6ZSkgeworICAgICAgICAgIGlmICghZml4KSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbFN0YXRlRXhjZXB0aW9uKAorICAgICAgICAgICAgICBTdHJpbmcuZm9ybWF0KAorICAgICAgICAgICAgICAgICIlcyBzaXplIGlzIGxlc3MgdGhhbiAlczogJWQgPCAlZCIsCisgICAgICAgICAgICAgICAgT1JfTUFTSywgUkVHSU9OX1NJWkUsCisgICAgICAgICAgICAgICAgb3JTaXplLCByZWdpb25TaXplCisgICAgICAgICAgICAgICkKKyAgICAgICAgICAgICk7CisgICAgICAgICAgfQorCisgICAgICAgICAgYnl0ZVtdIG5ld01hc2sgPSBuZXcgYnl0ZVtyZWdpb25TaXplXTsKKyAgICAgICAgICBTeXN0ZW0uYXJyYXljb3B5KG9yTWFzaywgMCwgbmV3TWFzaywgMCwgb3JTaXplKTsKKyAgICAgICAgICBBcnJheXMuZmlsbChuZXdNYXNrLCBvclNpemUsIChyZWdpb25TaXplIC0gb3JTaXplKSwgKGJ5dGUpMCk7CisgICAgICAgICAgb3JNYXNrID0gbmV3TWFzazsKKyAgICAgICAgfQorICAgICAgfQorICAgIH0KKworICAgIGlmIChjdXJzb3JQb3NpdGlvbiAhPSBDb25zdGFudHMuQ1VSU09SX09GRikgeworICAgICAgaWYgKGN1cnNvclBvc2l0aW9uICE9IENvbnN0YW50cy5DVVJTT1JfTEVBVkUpIHsKKyAgICAgICAgY2hlY2tSYW5nZShDVVJTT1JfUE9TSVRJT04sIGN1cnNvclBvc2l0aW9uLCAxLCBjZWxsQ291bnQpOworICAgICAgfQorICAgIH0KKyAgfQorfQpkaWZmIC0tZ2l0IGEvQmluZGluZ3MvSmF2YS9hcGl0b29sIGIvQmluZGluZ3MvSmF2YS9hcGl0b29sCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmIxOGExYTkKLS0tIC9kZXYvbnVsbAorKysgYi9CaW5kaW5ncy9KYXZhL2FwaXRvb2wKQEAgLTAsMCArMSwyMyBAQAorIyEvYmluL3NoCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIGxpYmJybGFwaSAtIEEgbGlicmFyeSBwcm92aWRpbmcgYWNjZXNzIHRvIGJyYWlsbGUgdGVybWluYWxzIGZvciBhcHBsaWNhdGlvbnMuCisjCisjIENvcHlyaWdodCAoQykgMjAwNi0yMDIzIGJ5CisjICAgU2FtdWVsIFRoaWJhdWx0IDxTYW11ZWwuVGhpYmF1bHRAZW5zLWx5b24ub3JnPgorIyAgIFPDqWJhc3RpZW4gSGluZGVyZXIgPFNlYmFzdGllbi5IaW5kZXJlckBlbnMtbHlvbi5vcmc+CisjCisjIGxpYmJybGFwaSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisjCisjIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyMgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorIyBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyMKKyMgV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworIworIyBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworLiAiJHswJS8qfS8uLi8uLi9hcGl0ZXN0LnNoIgorZXhlYyBqYXZhIC1jbGFzc3BhdGggIiR7cHJvZ3JhbURpcmVjdG9yeX0vY2xhc3NlcyIgb3JnLmExMXkuYnJsYXBpLmNvbW1hbmRzLkFwaVRvb2xDb21tYW5kICIke0B9IgorZXhpdCAiJHs/fSIKZGlmZiAtLWdpdCBhL0JpbmRpbmdzL0phdmEvYmluZGluZ3MuYyBiL0JpbmRpbmdzL0phdmEvYmluZGluZ3MuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZGEzNWRiCi0tLSAvZGV2L251bGwKKysrIGIvQmluZGluZ3MvSmF2YS9iaW5kaW5ncy5jCkBAIC0wLDAgKzEsMTY3NiBAQAorLyoKKyAqIGxpYmJybGFwaSAtIEEgbGlicmFyeSBwcm92aWRpbmcgYWNjZXNzIHRvIGJyYWlsbGUgdGVybWluYWxzIGZvciBhcHBsaWNhdGlvbnMuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMjMgYnkKKyAqICAgU2FtdWVsIFRoaWJhdWx0IDxTYW11ZWwuVGhpYmF1bHRAZW5zLWx5b24ub3JnPgorICogICBTw6liYXN0aWVuIEhpbmRlcmVyIDxTZWJhc3RpZW4uSGluZGVyZXJAZW5zLWx5b24ub3JnPgorICoKKyAqIGxpYmJybGFwaSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorICoKKyAqIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyAqLworCisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPG5ldGRiLmg+CisjaW5jbHVkZSA8cHRocmVhZC5oPgorCisjaW5jbHVkZSAiYmluZGluZ3MuaCIKKworI2RlZmluZSBORVdfUFJJTUlUSVZFX1dSQVBQRVIobmFtZSwgdHlwZSwgc2lnKSBcCitzdGF0aWMgam9iamVjdCBcCituZXcjI25hbWUgKEpOSUVudiAqZW52LCB0eXBlIHZhbHVlKSB7IFwKKyAgc3RhdGljIEpBVkFfQ0xBU1NfVkFSSUFCTEUoY2xhc3MpOyBcCisgIHN0YXRpYyBKQVZBX01FVEhPRF9WQVJJQUJMRShjb25zdHJ1Y3Rvcik7IFwKKyAgXAorICBpZiAoIWphdmFGaW5kQ2xhc3NBbmRNZXRob2QoIFwKKyAgICBlbnYsIFwKKyAgICAmY2xhc3MsIEpBVkFfT0JKX0xBTkcoI25hbWUpLCBcCisgICAgJmNvbnN0cnVjdG9yLCBKQVZBX0NPTlNUUlVDVE9SX05BTUUsIFwKKyAgICBKQVZBX1NJR19DT05TVFJVQ1RPUihKQVZBX1NJR18jI3NpZykgXAorICApKSByZXR1cm4gTlVMTDsgXAorICBcCisgIHJldHVybiAoKmVudiktPk5ld09iamVjdChlbnYsIGNsYXNzLCBjb25zdHJ1Y3RvciwgdmFsdWUpOyBcCit9CisKK05FV19QUklNSVRJVkVfV1JBUFBFUihMb25nLCBqbG9uZywgTE9ORykKKworI2RlZmluZSBCUkxBUElfTk9fREVQUkVDQVRFRAorI2RlZmluZSBCUkxBUElfTk9fU0lOR0xFX1NFU1NJT04KKyNpbmNsdWRlICJicmxhcGkuaCIKKyNkZWZpbmUgQlJMQVBJX09CSkVDVChuYW1lKSAib3JnL2ExMXkvYnJsYXBpLyIgbmFtZQorCitzdGF0aWMgamludCBqbmlWZXJzaW9uID0gMDsKK3N0YXRpYyBpbnQgbGlicmFyeVZlcnNpb25fbWFqb3IgPSAwOworc3RhdGljIGludCBsaWJyYXJ5VmVyc2lvbl9taW5vciA9IDA7CitzdGF0aWMgaW50IGxpYnJhcnlWZXJzaW9uX3JldmlzaW9uID0gMDsKKworSkFWQV9TVEFUSUNfTUVUSE9EKAorICBvcmdfYTExeV9icmxhcGlfTmF0aXZlQ29tcG9uZW50LCBpbml0aWFsaXplTmF0aXZlRGF0YSwgdm9pZAorKSB7CisgIGpuaVZlcnNpb24gPSAoKmVudiktPkdldFZlcnNpb24oZW52KTsKKworICBicmxhcGlfZ2V0TGlicmFyeVZlcnNpb24oCisgICAgJmxpYnJhcnlWZXJzaW9uX21ham9yLAorICAgICZsaWJyYXJ5VmVyc2lvbl9taW5vciwKKyAgICAmbGlicmFyeVZlcnNpb25fcmV2aXNpb24KKyAgKTsKK30KKworc3RhdGljIHZvaWQKK2xvZ0phdmFWaXJ0dWFsTWFjaGluZUVycm9yIChqaW50IGVycm9yLCBjb25zdCBjaGFyICptZXRob2QpIHsKKyAgY29uc3QgY2hhciAqbWVzc2FnZTsKKworICBzd2l0Y2ggKGVycm9yKSB7CisgICAgY2FzZSBKTklfT0s6CisgICAgICBtZXNzYWdlID0gInN1Y2Nlc3MiOworICAgICAgYnJlYWs7CisKKyAgICBkZWZhdWx0OgorI2lmZGVmIEpOSV9FUlIKKyAgICBjYXNlIEpOSV9FUlI6CisjZW5kaWYgLyogSk5JX0VSUiAqLworICAgICAgbWVzc2FnZSA9ICJ1bmtub3duIGVycm9yIjsKKyAgICAgIGJyZWFrOworCisjaWZkZWYgSk5JX0VERVRBQ0hFRAorICAgIGNhc2UgSk5JX0VERVRBQ0hFRDoKKyAgICAgIG1lc3NhZ2UgPSAidGhyZWFkIG5vdCBhdHRhY2hlZCB0byB2aXJ0dWFsIG1hY2hpbmUiOworICAgICAgYnJlYWs7CisjZW5kaWYgLyogSk5JX0VERVRBQ0hFRCAqLworCisjaWZkZWYgSk5JX0VWRVJTSU9OCisgICAgY2FzZSBKTklfRVZFUlNJT046CisgICAgICBtZXNzYWdlID0gInZlcnNpb24gZXJyb3IiOworICAgICAgYnJlYWs7CisjZW5kaWYgLyogSk5JX0VWRVJTSU9OICovCisKKyNpZmRlZiBKTklfRU5PTUVNCisgICAgY2FzZSBKTklfRU5PTUVNOgorICAgICAgbWVzc2FnZSA9ICJub3QgZW5vdWdoIG1lbW9yeSI7CisgICAgICBicmVhazsKKyNlbmRpZiAvKiBKTklfRU5PTUVNICovCisKKyNpZmRlZiBKTklfRUVYSVNUCisgICAgY2FzZSBKTklfRUVYSVNUOgorICAgICAgbWVzc2FnZSA9ICJ2aXJ0dWFsIG1hY2hpbmUgYWxyZWFkeSBjcmVhdGVkIjsKKyAgICAgIGJyZWFrOworI2VuZGlmIC8qIEpOSV9FRVhJU1QgKi8KKworI2lmZGVmIEpOSV9FSU5WQUwKKyAgICBjYXNlIEpOSV9FSU5WQUw6CisgICAgICBtZXNzYWdlID0gImludmFsaWQgYXJndW1lbnQiOworICAgICAgYnJlYWs7CisjZW5kaWYgLyogSk5JX0VJTlZBTCAqLworICB9CisKKyAgZnByaW50ZihzdGRlcnIsICJKYXZhIHZpcnR1YWwgbWFjaGluZSBlcnJvciAlZCBpbiAlczogJXNcbiIsIGVycm9yLCBtZXRob2QsIG1lc3NhZ2UpOworfQorCitzdGF0aWMgcHRocmVhZF9rZXlfdCB0aHJlYWRLZXlfdm07CisKK3N0YXRpYyB2b2lkCitkZXN0cm95VGhyZWFkS2V5X3ZtICh2b2lkICp2YWx1ZSkgeworICBKYXZhVk0gKnZtID0gdmFsdWU7CisgICgqdm0pLT5EZXRhY2hDdXJyZW50VGhyZWFkKHZtKTsKK30KKworc3RhdGljIHZvaWQKK2NyZWF0ZVRocmVhZEtleV92bSAodm9pZCkgeworICBwdGhyZWFkX2tleV9jcmVhdGUoJnRocmVhZEtleV92bSwgZGVzdHJveVRocmVhZEtleV92bSk7Cit9CisKK3N0YXRpYyB2b2lkCitzZXRUaHJlYWRFeGl0SGFuZGxlciAoSmF2YVZNICp2bSkgeworICBzdGF0aWMgcHRocmVhZF9vbmNlX3Qgb25jZSA9IFBUSFJFQURfT05DRV9JTklUOworICBwdGhyZWFkX29uY2UoJm9uY2UsIGNyZWF0ZVRocmVhZEtleV92bSk7CisgIHB0aHJlYWRfc2V0c3BlY2lmaWModGhyZWFkS2V5X3ZtLCB2bSk7Cit9CisKK3N0YXRpYyBKTklFbnYgKgorZ2V0SmF2YUVudmlyb25tZW50IChicmxhcGlfaGFuZGxlX3QgKmhhbmRsZSkgeworICBKYXZhVk0gKnZtID0gYnJsYXBpX19nZXRDbGllbnREYXRhKGhhbmRsZSk7CisgIHZvaWQgKmVudiA9IE5VTEw7CisKKyAgaWYgKHZtKSB7CisgICAgamludCByZXN1bHQgPSAoKnZtKS0+R2V0RW52KHZtLCAmZW52LCBqbmlWZXJzaW9uKTsKKworICAgIGlmIChyZXN1bHQgIT0gSk5JX09LKSB7CisgICAgICBpZiAocmVzdWx0ID09IEpOSV9FREVUQUNIRUQpIHsKKyAgICAgICAgSmF2YVZNQXR0YWNoQXJncyBhcmdzID0geworICAgICAgICAgIC52ZXJzaW9uID0gam5pVmVyc2lvbiwKKyAgICAgICAgICAubmFtZSA9IE5VTEwsCisgICAgICAgICAgLmdyb3VwID0gTlVMTAorICAgICAgICB9OworCisgICAgICAgICNpZmRlZiBfX0FORFJPSURfXworICAgICAgICAgIEpOSUVudiAqZSA9IGVudjsKKyAgICAgICAgICByZXN1bHQgPSAoKnZtKS0+QXR0YWNoQ3VycmVudFRocmVhZCh2bSwgJmUsICZhcmdzKTsKKyAgICAgICAgICBlbnYgPSBlOworICAgICAgICAjZWxzZSAvKiBfX0FORFJPSURfXyAqLworICAgICAgICAgIHJlc3VsdCA9ICgqdm0pLT5BdHRhY2hDdXJyZW50VGhyZWFkKHZtLCAmZW52LCAmYXJncyk7CisgICAgICAgICNlbmRpZiAvKiBfX0FORFJPSURfXyAqLworCisgICAgICAgIGlmIChyZXN1bHQgPT0gSk5JX09LKSB7CisgICAgICAgICAgc2V0VGhyZWFkRXhpdEhhbmRsZXIoZW52KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICBsb2dKYXZhVmlydHVhbE1hY2hpbmVFcnJvcihyZXN1bHQsICJBdHRhY2hDdXJyZW50VGhyZWFkIik7CisgICAgICAgIH0KKyAgICAgIH0gZWxzZSB7CisgICAgICAgIGxvZ0phdmFWaXJ0dWFsTWFjaGluZUVycm9yKHJlc3VsdCwgIkdldEVudiIpOworICAgICAgfQorICAgIH0KKyAgfQorCisgIHJldHVybiBlbnY7Cit9CisKK3N0YXRpYyB2b2lkCit0aHJvd0phdmFFcnJvciAoSk5JRW52ICplbnYsIGNvbnN0IGNoYXIgKm9iamVjdCwgY29uc3QgY2hhciAqbWVzc2FnZSkgeworICBpZiAoKCplbnYpLT5FeGNlcHRpb25DaGVjayhlbnYpKSByZXR1cm47CisgIGpjbGFzcyBjbGFzcyA9ICgqZW52KS0+RmluZENsYXNzKGVudiwgb2JqZWN0KTsKKyAgaWYgKGNsYXNzKSAoKmVudiktPlRocm93TmV3KGVudiwgY2xhc3MsIG1lc3NhZ2UpOworfQorCitzdGF0aWMgdm9pZAorbG9nQnJsYXBpRXJyb3IgKGNvbnN0IGNoYXIgKmxhYmVsKSB7CisgIHNpemVfdCBzaXplID0gYnJsYXBpX3N0cmVycm9yX3IoJmJybGFwaV9lcnJvciwgTlVMTCwgMCk7CisgIGNoYXIgbXNnW3NpemUrMV07CisgIGJybGFwaV9zdHJlcnJvcl9yKCZicmxhcGlfZXJyb3IsIG1zZywgc2l6ZW9mKG1zZykpOworICBmcHJpbnRmKHN0ZGVyciwKKyAgICAiJXM6IEFQST0lZCBMaWJjPSVkIEdBST0lZDogJXNcbiIsCisgICAgbGFiZWwsIGJybGFwaV9lcnJubywgYnJsYXBpX2xpYmNlcnJubywgYnJsYXBpX2dhaWVycm5vLCBtc2cKKyAgKTsKK30KKworc3RhdGljIHZvaWQKK3Rocm93QVBJRXJyb3IgKEpOSUVudiAqZW52KSB7CisgIGlmICgwKSBsb2dCcmxhcGlFcnJvcigiQVBJIEVycm9yIik7CisgIGlmICgoKmVudiktPkV4Y2VwdGlvbkNoZWNrKGVudikpIHJldHVybjsKKworICB7CisgICAgY29uc3QgY2hhciAqb2JqZWN0ID0gTlVMTDsKKworICAgIHN3aXRjaCAoYnJsYXBpX2Vycm5vKSB7CisgICAgICBjYXNlIEJSTEFQSV9FUlJPUl9TVUNDRVNTOgorICAgICAgICBicmVhazsKKworICAgICAgY2FzZSBCUkxBUElfRVJST1JfTk9NRU06CisgICAgICAgIG9iamVjdCA9IEpBVkFfT0JKX09VVF9PRl9NRU1PUllfRVJST1I7CisgICAgICAgIGJyZWFrOworCisgICAgICBjYXNlIEJSTEFQSV9FUlJPUl9FT0Y6CisgICAgICAgIG9iamVjdCA9IEJSTEFQSV9PQkpFQ1QoIkxvc3RDb25uZWN0aW9uRXhjZXB0aW9uIik7CisgICAgICAgIGJyZWFrOworCisgICAgICBjYXNlIEJSTEFQSV9FUlJPUl9MSUJDRVJSOiB7CisgICAgICAgIHN3aXRjaCAoYnJsYXBpX2xpYmNlcnJubykgeworICAgICAgICAgIGNhc2UgRUlOVFI6CisgICAgICAgICAgICBvYmplY3QgPSBKQVZBX09CSl9JTlRFUlJVUFRFRF9JT19FWENFUFRJT047CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGJyZWFrOworICAgICAgfQorCisgICAgICBkZWZhdWx0OgorICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBpZiAob2JqZWN0KSB7CisgICAgICB0aHJvd0phdmFFcnJvcihlbnYsIG9iamVjdCwgYnJsYXBpX2VycmZ1bik7CisgICAgICByZXR1cm47CisgICAgfQorICB9CisKKyAgc3RhdGljIEpBVkFfQ0xBU1NfVkFSSUFCTEUoY2xhc3MpOworICBpZiAoIWphdmFGaW5kQ2xhc3MoZW52LCAmY2xhc3MsIEJSTEFQSV9PQkpFQ1QoIkFQSUVycm9yIikpKSByZXR1cm47CisKKyAgc3RhdGljIEpBVkFfTUVUSE9EX1ZBUklBQkxFKGNvbnN0cnVjdG9yKTsKKyAgaWYgKCFKQVZBX0ZJTkRfQ09OU1RSVUNUT1IoZW52LCAmY29uc3RydWN0b3IsIGNsYXNzLAorICAgIEpBVkFfU0lHX0lOVCAvLyBhcGkgZXJyb3IKKyAgICBKQVZBX1NJR19JTlQgLy8gb3MgZXJyb3IKKyAgICBKQVZBX1NJR19JTlQgLy8gZ2FpIGVycm9yCisgICAgSkFWQV9TSUdfU1RSSU5HIC8vIGZ1bmN0aW9uIG5hbWUKKyAgKSkgcmV0dXJuOworCisgIGpzdHJpbmcgakZ1bmN0aW9uOworCisgIGlmICghYnJsYXBpX2VycmZ1bikgeworICAgIGpGdW5jdGlvbiA9IE5VTEw7CisgIH0gZWxzZSBpZiAoIShqRnVuY3Rpb24gPSAoKmVudiktPk5ld1N0cmluZ1VURihlbnYsIGJybGFwaV9lcnJmdW4pKSkgeworICAgIHJldHVybjsKKyAgfQorCisgIGpvYmplY3Qgb2JqZWN0ID0gKCplbnYpLT5OZXdPYmplY3QoCisgICAgZW52LCBjbGFzcywgY29uc3RydWN0b3IsCisgICAgYnJsYXBpX2Vycm5vLCBicmxhcGlfbGliY2Vycm5vLCBicmxhcGlfZ2FpZXJybm8sIGpGdW5jdGlvbgorICApOworCisgIGlmIChvYmplY3QpIHsKKyAgICAoKmVudiktPlRocm93KGVudiwgb2JqZWN0KTsKKyAgfSBlbHNlIGlmIChqRnVuY3Rpb24pIHsKKyAgICAoKmVudiktPlJlbGVhc2VTdHJpbmdVVEZDaGFycyhlbnYsIGpGdW5jdGlvbiwgYnJsYXBpX2VycmZ1bik7CisgIH0KK30KKworc3RhdGljIHZvaWQKK3Rocm93Q29ubmVjdEVycm9yIChKTklFbnYgKmVudiwgY29uc3QgYnJsYXBpX2Nvbm5lY3Rpb25TZXR0aW5nc190ICpzZXR0aW5ncykgeworICBpZiAoMCkgbG9nQnJsYXBpRXJyb3IoIkNvbm5lY3QgRXJyb3IiKTsKKworICBjb25zdCBjaGFyICpvYmplY3QgPSBOVUxMOworICBjb25zdCBjaGFyICptZXNzYWdlID0gTlVMTDsKKworICBjb25zdCBjaGFyICpob3N0ID0gTlVMTDsKKyAgY29uc3QgY2hhciAqYXV0aCA9IE5VTEw7CisKKyAgaWYgKHNldHRpbmdzKSB7CisgICAgaG9zdCA9IHNldHRpbmdzLT5ob3N0OworICAgIGF1dGggPSBzZXR0aW5ncy0+YXV0aDsKKyAgfQorCisgIHN3aXRjaCAoYnJsYXBpX2Vycm5vKSB7CisgICAgY2FzZSBCUkxBUElfRVJST1JfU1VDQ0VTUzoKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBCUkxBUElfRVJST1JfQ09OTlJFRlVTRUQ6CisgICAgICBvYmplY3QgPSBCUkxBUElfT0JKRUNUKCJVbmF2YWlsYWJsZVNlcnZpY2VFeGNlcHRpb24iKTsKKyAgICAgIG1lc3NhZ2UgPSBob3N0OworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIEJSTEFQSV9FUlJPUl9BVVRIRU5USUNBVElPTjoKKyAgICAgIG9iamVjdCA9IEJSTEFQSV9PQkpFQ1QoIkF1dGhlbnRpY2F0aW9uRXhjZXB0aW9uIik7CisgICAgICBtZXNzYWdlID0gYXV0aDsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBCUkxBUElfRVJST1JfR0FJRVJSOiB7CisgICAgICBzd2l0Y2ggKGJybGFwaV9nYWllcnJubykgeworICAgICAgICBjYXNlIEVBSV9TWVNURU06CisgICAgICAgICAgZ290byBTWVNURU1fRVJST1I7CisKKyAgICAgICAgY2FzZSBFQUlfTUVNT1JZOgorICAgICAgICAgIG9iamVjdCA9IEpBVkFfT0JKX09VVF9PRl9NRU1PUllfRVJST1I7CisgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgI2lmZGVmIEVBSV9OT0RBVEEKKyAgICAgICAgY2FzZSBFQUlfTk9EQVRBOiAvLyBvYnNvbGV0ZWQgb24gUkZDIDI1NTNiaXMtMDIKKyAgICAgICAgI2VuZGlmIC8qIEVBSV9OT0RBVEEgKi8KKworICAgICAgICBjYXNlIEVBSV9OT05BTUU6CisgICAgICAgICAgb2JqZWN0ID0gQlJMQVBJX09CSkVDVCgiVW5rbm93bkhvc3RFeGNlcHRpb24iKTsKKyAgICAgICAgICBtZXNzYWdlID0gaG9zdDsKKyAgICAgICAgICBicmVhazsKKyAgICAgIH0KKworICAgICAgYnJlYWs7CisgICAgfQorCisgICAgU1lTVEVNX0VSUk9SOgorICAgIGNhc2UgQlJMQVBJX0VSUk9SX0xJQkNFUlI6IHsKKyAgICAgIHN3aXRjaCAoYnJsYXBpX2xpYmNlcnJubykgeworICAgICAgfQorCisgICAgICBicmVhazsKKyAgICB9CisKKyAgICBkZWZhdWx0OgorICAgICAgYnJlYWs7CisgIH0KKworICBpZiAob2JqZWN0KSB7CisgICAgaWYgKCFtZXNzYWdlKSBtZXNzYWdlID0gIiI7CisgICAgdGhyb3dKYXZhRXJyb3IoZW52LCBvYmplY3QsIG1lc3NhZ2UpOworICB9IGVsc2UgeworICAgIHRocm93QVBJRXJyb3IoZW52KTsKKyAgfQorfQorCitzdGF0aWMgdm9pZCBCUkxBUElfU1REQ0FMTAoraGFuZGxlQVBJRXhjZXB0aW9uIChicmxhcGlfaGFuZGxlX3QgKmhhbmRsZSwgaW50IGVycm9yLCBicmxhcGlfcGFja2V0VHlwZV90IHR5cGUsIGNvbnN0IHZvaWQgKnBhY2tldCwgc2l6ZV90IHNpemUpIHsKKyAgSk5JRW52ICplbnYgPSBnZXRKYXZhRW52aXJvbm1lbnQoaGFuZGxlKTsKKyAgaWYgKCgqZW52KS0+RXhjZXB0aW9uQ2hlY2soZW52KSkgcmV0dXJuOworCisgIGpieXRlQXJyYXkgalBhY2tldCA9ICgqZW52KS0+TmV3Qnl0ZUFycmF5KGVudiwgc2l6ZSk7CisgIGlmICghalBhY2tldCkgcmV0dXJuOworICAoKmVudiktPlNldEJ5dGVBcnJheVJlZ2lvbihlbnYsIGpQYWNrZXQsIDAsIHNpemUsIChqYnl0ZSAqKSBwYWNrZXQpOworCisgIHN0YXRpYyBKQVZBX0NMQVNTX1ZBUklBQkxFKGNsYXNzKTsKKyAgaWYgKCFqYXZhRmluZENsYXNzKGVudiwgJmNsYXNzLCBCUkxBUElfT0JKRUNUKCJBUElFeGNlcHRpb24iKSkpIHJldHVybjsKKworICBzdGF0aWMgSkFWQV9NRVRIT0RfVkFSSUFCTEUoY29uc3RydWN0b3IpOworICBpZiAoIUpBVkFfRklORF9DT05TVFJVQ1RPUihlbnYsICZjb25zdHJ1Y3RvciwgY2xhc3MsCisgICAgSkFWQV9TSUdfTE9ORyAvLyBoYW5kbGUKKyAgICBKQVZBX1NJR19JTlQgLy8gZXJyb3IKKyAgICBKQVZBX1NJR19JTlQgLy8gdHlwZQorICAgIEpBVkFfU0lHX0FSUkFZKEpBVkFfU0lHX0JZVEUpIC8vIHBhY2tldAorICApKSByZXR1cm47CisKKyAgamNsYXNzIG9iamVjdCA9ICgqZW52KS0+TmV3T2JqZWN0KAorICAgIGVudiwgY2xhc3MsIGNvbnN0cnVjdG9yLAorICAgIChqbG9uZykgKGludHB0cl90KSBoYW5kbGUsIGVycm9yLCB0eXBlLCBqUGFja2V0CisgICk7CisgIGlmICghb2JqZWN0KSByZXR1cm47CisKKyAgKCplbnYpLT5UaHJvdyhlbnYsIG9iamVjdCk7Cit9CisKK0pBVkFfU1RBVElDX01FVEhPRCgKKyAgb3JnX2ExMXlfYnJsYXBpX0FQSVZlcnNpb24sIGdldE1ham9yLCBqaW50CispIHsKKyAgcmV0dXJuIGxpYnJhcnlWZXJzaW9uX21ham9yOworfQorCitKQVZBX1NUQVRJQ19NRVRIT0QoCisgIG9yZ19hMTF5X2JybGFwaV9BUElWZXJzaW9uLCBnZXRNaW5vciwgamludAorKSB7CisgIHJldHVybiBsaWJyYXJ5VmVyc2lvbl9taW5vcjsKK30KKworSkFWQV9TVEFUSUNfTUVUSE9EKAorICBvcmdfYTExeV9icmxhcGlfQVBJVmVyc2lvbiwgZ2V0UmV2aXNpb24sIGppbnQKKykgeworICByZXR1cm4gbGlicmFyeVZlcnNpb25fcmV2aXNpb247Cit9CisKKyNkZWZpbmUgR0VUX0NMQVNTKGVudiwgY2xhc3MsIG9iamVjdCwgcmV0KSBcCisgIGpjbGFzcyBjbGFzczsgXAorICBkbyB7IFwKKyAgICBpZiAoISgoY2xhc3MpID0gKCooZW52KSktPkdldE9iamVjdENsYXNzKChlbnYpLCAob2JqZWN0KSkpKSByZXR1cm4gcmV0OyBcCisgIH0gd2hpbGUgKDApCisKKyNkZWZpbmUgRklORF9GSUVMRChlbnYsIGZpZWxkLCBjbGFzcywgbmFtZSwgc2lnbmF0dXJlLCByZXQpIFwKKyAgamZpZWxkSUQgZmllbGQ7IFwKKyAgZG8geyBcCisgICAgaWYgKCEoZmllbGQgPSAoKihlbnYpKS0+R2V0RmllbGRJRCgoZW52KSwgKGNsYXNzKSwgKG5hbWUpLCAoc2lnbmF0dXJlKSkpKSByZXR1cm4gcmV0OyBcCisgIH0gd2hpbGUgKDApCisKKyNkZWZpbmUgRklORF9DT05ORUNUSU9OX0hBTkRMRShlbnYsIG9iamVjdCwgcmV0KSBcCisgIEdFVF9DTEFTUygoZW52KSwgY2xhc3MsIChvYmplY3QpLCByZXQpOyBcCisgIEZJTkRfRklFTEQoKGVudiksIGZpZWxkLCBjbGFzcywgImNvbm5lY3Rpb25IYW5kbGUiLCBKQVZBX1NJR19MT05HLCByZXQpOworCisjZGVmaW5lIEdFVF9DT05ORUNUSU9OX0hBTkRMRShlbnYsIG9iamVjdCwgcmV0KSBcCisgIGJybGFwaV9oYW5kbGVfdCAqaGFuZGxlOyBcCisgIGRvIHsgXAorICAgIEZJTkRfQ09OTkVDVElPTl9IQU5ETEUoKGVudiksIChvYmplY3QpLCByZXQpOyBcCisgICAgaGFuZGxlID0gKHZvaWQqKSAoaW50cHRyX3QpIEpBVkFfR0VUX0ZJRUxEKChlbnYpLCBMb25nLCAob2JqZWN0KSwgZmllbGQpOyBcCisgICAgaWYgKCFoYW5kbGUpIHsgXAorICAgICAgdGhyb3dKYXZhRXJyb3IoKGVudiksIEpBVkFfT0JKX0lMTEVHQUxfU1RBVEVfRVhDRVBUSU9OLCAiY29ubmVjdGlvbiBoYXMgYmVlbiBjbG9zZWQiKTsgXAorICAgICAgcmV0dXJuIHJldDsgXAorICAgIH0gXAorICB9IHdoaWxlICgwKQorCisjZGVmaW5lIFNFVF9DT05ORUNUSU9OX0hBTkRMRShlbnYsIG9iamVjdCwgdmFsdWUsIHJldCkgXAorICBkbyB7IFwKKyAgICBGSU5EX0NPTk5FQ1RJT05fSEFORExFKChlbnYpLCAob2JqZWN0KSwgcmV0KTsgXAorICAgIEpBVkFfU0VUX0ZJRUxEKChlbnYpLCBMb25nLCAob2JqZWN0KSwgZmllbGQsIChqbG9uZykgKGludHB0cl90KSAodmFsdWUpKTsgXAorICB9IHdoaWxlICgwKQorCitKQVZBX1NUQVRJQ19NRVRIT0QoCisgIG9yZ19hMTF5X2JybGFwaV9Db25uZWN0aW9uU2V0dGluZ3MsIGdldEtleWZpbGVEaXJlY3RvcnksIGpzdHJpbmcKKykgeworICByZXR1cm4gKCplbnYpLT5OZXdTdHJpbmdVVEYoZW52LCBCUkxBUElfRVRDRElSKTsKK30KKworSkFWQV9TVEFUSUNfTUVUSE9EKAorICBvcmdfYTExeV9icmxhcGlfQ29ubmVjdGlvblNldHRpbmdzLCBnZXRLZXlmaWxlTmFtZSwganN0cmluZworKSB7CisgIHJldHVybiAoKmVudiktPk5ld1N0cmluZ1VURihlbnYsIEJSTEFQSV9BVVRIS0VZRklMRSk7Cit9CisKK3N0YXRpYyBpbnQKK29wZW5Db25uZWN0aW9uICgKKyAgSk5JRW52ICplbnYsIGpvYmplY3QgY29ubmVjdGlvbiwKKyAgam9iamVjdCBqUmVxdWVzdGVkU2V0dGluZ3MsIGJybGFwaV9jb25uZWN0aW9uU2V0dGluZ3NfdCAqY1JlcXVlc3RlZFNldHRpbmdzLAorICBqb2JqZWN0IGpBY3R1YWxTZXR0aW5ncywgYnJsYXBpX2Nvbm5lY3Rpb25TZXR0aW5nc190ICpjQWN0dWFsU2V0dGluZ3MsCisgIGJybGFwaV9oYW5kbGVfdCAqKmhhbmRsZSwgaW50ICpmaWxlRGVzY3JpcHRvciwKKyAgam9iamVjdCAqalJlcXVlc3RlZEhvc3QsIGpvYmplY3QgKmpSZXF1ZXN0ZWRBdXRoCispIHsKKyAgaWYgKGpSZXF1ZXN0ZWRTZXR0aW5ncykgeworICAgIEdFVF9DTEFTUyhlbnYsIGNsYXNzLCBqUmVxdWVzdGVkU2V0dGluZ3MsIDApOworCisgICAgeworICAgICAgRklORF9GSUVMRChlbnYsIGZpZWxkLCBjbGFzcywgInNlcnZlckhvc3QiLCBKQVZBX1NJR19TVFJJTkcsIDApOworICAgICAgKmpSZXF1ZXN0ZWRIb3N0ID0gSkFWQV9HRVRfRklFTEQoZW52LCBPYmplY3QsIGpSZXF1ZXN0ZWRTZXR0aW5ncywgZmllbGQpOworCisgICAgICBpZiAoKmpSZXF1ZXN0ZWRIb3N0KSB7CisgICAgICAgIGlmICghKGNSZXF1ZXN0ZWRTZXR0aW5ncy0+aG9zdCA9ICgqZW52KS0+R2V0U3RyaW5nVVRGQ2hhcnMoZW52LCAqalJlcXVlc3RlZEhvc3QsIE5VTEwpKSkgeworICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CisgICAgICB9CisgICAgfQorCisgICAgeworICAgICAgRklORF9GSUVMRChlbnYsIGZpZWxkLCBjbGFzcywgImF1dGhlbnRpY2F0aW9uU2NoZW1lIiwgSkFWQV9TSUdfU1RSSU5HLCAwKTsKKyAgICAgICpqUmVxdWVzdGVkQXV0aCA9IEpBVkFfR0VUX0ZJRUxEKGVudiwgT2JqZWN0LCBqUmVxdWVzdGVkU2V0dGluZ3MsIGZpZWxkKTsKKworICAgICAgaWYgKCpqUmVxdWVzdGVkQXV0aCkgeworICAgICAgICBpZiAoIShjUmVxdWVzdGVkU2V0dGluZ3MtPmF1dGggPSAoKmVudiktPkdldFN0cmluZ1VURkNoYXJzKGVudiwgKmpSZXF1ZXN0ZWRBdXRoLCBOVUxMKSkpIHsKKyAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQorICAgICAgfQorICAgIH0KKyAgfQorCisgIGlmICghKCpoYW5kbGUgPSBtYWxsb2MoYnJsYXBpX2dldEhhbmRsZVNpemUoKSkpKSB7CisgICAgdGhyb3dKYXZhRXJyb3IoZW52LCBKQVZBX09CSl9PVVRfT0ZfTUVNT1JZX0VSUk9SLCBfX2Z1bmNfXyk7CisgICAgcmV0dXJuIDA7CisgIH0KKworICAqZmlsZURlc2NyaXB0b3IgPSBicmxhcGlfX29wZW5Db25uZWN0aW9uKAorICAgICpoYW5kbGUsIGNSZXF1ZXN0ZWRTZXR0aW5ncywgY0FjdHVhbFNldHRpbmdzCisgICk7CisKKyAgaWYgKCpmaWxlRGVzY3JpcHRvciA8IDApIHsKKyAgICB0aHJvd0Nvbm5lY3RFcnJvcihlbnYsIGNSZXF1ZXN0ZWRTZXR0aW5ncyk7CisgICAgcmV0dXJuIDA7CisgIH0KKworICBpZiAoY0FjdHVhbFNldHRpbmdzKSB7CisgICAgR0VUX0NMQVNTKGVudiwgY2xhc3MsIGpBY3R1YWxTZXR0aW5ncywgMCk7CisKKyAgICBpZiAoY0FjdHVhbFNldHRpbmdzLT5ob3N0KSB7CisgICAgICBqc3RyaW5nIGhvc3QgPSAoKmVudiktPk5ld1N0cmluZ1VURihlbnYsIGNBY3R1YWxTZXR0aW5ncy0+aG9zdCk7CisgICAgICBpZiAoIWhvc3QpIHJldHVybiAwOworCisgICAgICBGSU5EX0ZJRUxEKGVudiwgZmllbGQsIGNsYXNzLCAic2VydmVySG9zdCIsIEpBVkFfU0lHX1NUUklORywgMCk7CisgICAgICBKQVZBX1NFVF9GSUVMRChlbnYsIE9iamVjdCwgakFjdHVhbFNldHRpbmdzLCBmaWVsZCwgaG9zdCk7CisgICAgICBpZiAoKCplbnYpLT5FeGNlcHRpb25DaGVjayhlbnYpKSByZXR1cm4gMDsKKyAgICB9CisKKyAgICBpZiAoY0FjdHVhbFNldHRpbmdzLT5hdXRoKSB7CisgICAgICBqc3RyaW5nIGF1dGggPSAoKmVudiktPk5ld1N0cmluZ1VURihlbnYsIGNBY3R1YWxTZXR0aW5ncy0+YXV0aCk7CisgICAgICBpZiAoIWF1dGgpIHJldHVybiAwOworCisgICAgICBGSU5EX0ZJRUxEKGVudiwgZmllbGQsIGNsYXNzLCAiYXV0aGVudGljYXRpb25TY2hlbWUiLCBKQVZBX1NJR19TVFJJTkcsIDApOworICAgICAgSkFWQV9TRVRfRklFTEQoZW52LCBPYmplY3QsIGpBY3R1YWxTZXR0aW5ncywgZmllbGQsIGF1dGgpOworICAgICAgaWYgKCgqZW52KS0+RXhjZXB0aW9uQ2hlY2soZW52KSkgcmV0dXJuIDA7CisgICAgfQorICB9CisKKyAgeworICAgIEphdmFWTSAqdm07CisgICAgKCplbnYpLT5HZXRKYXZhVk0oZW52LCAmdm0pOworICAgIGJybGFwaV9fc2V0Q2xpZW50RGF0YSgqaGFuZGxlLCB2bSk7CisgIH0KKworICBicmxhcGlfX3NldEV4Y2VwdGlvbkhhbmRsZXIoKmhhbmRsZSwgaGFuZGxlQVBJRXhjZXB0aW9uKTsKKyAgU0VUX0NPTk5FQ1RJT05fSEFORExFKGVudiwgY29ubmVjdGlvbiwgKmhhbmRsZSwgMCk7CisgIHJldHVybiAxOworfQorCitKQVZBX0lOU1RBTkNFX01FVEhPRCgKKyAgb3JnX2ExMXlfYnJsYXBpX0Nvbm5lY3Rpb25CYXNlLCBvcGVuQ29ubmVjdGlvbiwgamludCwKKyAgam9iamVjdCBqUmVxdWVzdGVkU2V0dGluZ3MsIGpvYmplY3QgakFjdHVhbFNldHRpbmdzCispIHsKKyAgYnJsYXBpX2Nvbm5lY3Rpb25TZXR0aW5nc190IGNSZXF1ZXN0ZWRTZXR0aW5ncywgKnBSZXF1ZXN0ZWRTZXR0aW5nczsKKyAgbWVtc2V0KCZjUmVxdWVzdGVkU2V0dGluZ3MsIDAsIHNpemVvZihjUmVxdWVzdGVkU2V0dGluZ3MpKTsKKyAgcFJlcXVlc3RlZFNldHRpbmdzID0galJlcXVlc3RlZFNldHRpbmdzPyAmY1JlcXVlc3RlZFNldHRpbmdzOiBOVUxMOworCisgIGJybGFwaV9jb25uZWN0aW9uU2V0dGluZ3NfdCBjQWN0dWFsU2V0dGluZ3MsICpwQWN0dWFsU2V0dGluZ3M7CisgIG1lbXNldCgmY0FjdHVhbFNldHRpbmdzLCAwLCBzaXplb2YoY0FjdHVhbFNldHRpbmdzKSk7CisgIHBBY3R1YWxTZXR0aW5ncyA9IGpBY3R1YWxTZXR0aW5ncz8gJmNBY3R1YWxTZXR0aW5nczogTlVMTDsKKworICBicmxhcGlfaGFuZGxlX3QgKmhhbmRsZSA9IE5VTEw7CisgIGludCBmaWxlRGVzY3JpcHRvciA9IC0xOworCisgIGpvYmplY3QgalJlcXVlc3RlZEhvc3QgPSBOVUxMOworICBqb2JqZWN0IGpSZXF1ZXN0ZWRBdXRoID0gTlVMTDsKKworICBpbnQgb3BlbmVkID0gb3BlbkNvbm5lY3Rpb24oCisgICAgZW52LCB0aGlzLAorICAgIGpSZXF1ZXN0ZWRTZXR0aW5ncywgcFJlcXVlc3RlZFNldHRpbmdzLAorICAgIGpBY3R1YWxTZXR0aW5ncywgcEFjdHVhbFNldHRpbmdzLAorICAgICZoYW5kbGUsICZmaWxlRGVzY3JpcHRvciwKKyAgICAmalJlcXVlc3RlZEhvc3QsICZqUmVxdWVzdGVkQXV0aAorICApOworCisgIGlmIChjUmVxdWVzdGVkU2V0dGluZ3MuaG9zdCkgeworICAgICgqZW52KS0+UmVsZWFzZVN0cmluZ1VURkNoYXJzKGVudiwgalJlcXVlc3RlZEhvc3QsIGNSZXF1ZXN0ZWRTZXR0aW5ncy5ob3N0KTsgCisgIH0KKworICBpZiAoY1JlcXVlc3RlZFNldHRpbmdzLmF1dGgpIHsKKyAgICAoKmVudiktPlJlbGVhc2VTdHJpbmdVVEZDaGFycyhlbnYsIGpSZXF1ZXN0ZWRBdXRoLCAgY1JlcXVlc3RlZFNldHRpbmdzLmF1dGgpOyAKKyAgfQorCisgIGlmIChvcGVuZWQpIHJldHVybiBmaWxlRGVzY3JpcHRvcjsKKyAgaWYgKGZpbGVEZXNjcmlwdG9yID49IDApIGJybGFwaV9fY2xvc2VDb25uZWN0aW9uKGhhbmRsZSk7CisgIGlmIChoYW5kbGUpIGZyZWUoaGFuZGxlKTsKKyAgcmV0dXJuIC0xOworfQorCitKQVZBX0lOU1RBTkNFX01FVEhPRCgKKyAgb3JnX2ExMXlfYnJsYXBpX0Nvbm5lY3Rpb25CYXNlLCBjbG9zZUNvbm5lY3Rpb24sIHZvaWQKKykgeworICBHRVRfQ09OTkVDVElPTl9IQU5ETEUoZW52LCB0aGlzLCApOworICBicmxhcGlfX2Nsb3NlQ29ubmVjdGlvbihoYW5kbGUpOworICBmcmVlKGhhbmRsZSk7CisgIFNFVF9DT05ORUNUSU9OX0hBTkRMRShlbnYsIHRoaXMsIE5VTEwsICk7Cit9CisKK0pBVkFfSU5TVEFOQ0VfTUVUSE9EKAorICBvcmdfYTExeV9icmxhcGlfQ29ubmVjdGlvbkJhc2UsIGdldERyaXZlck5hbWUsIGpzdHJpbmcKKykgeworICBHRVRfQ09OTkVDVElPTl9IQU5ETEUoZW52LCB0aGlzLCBOVUxMKTsKKyAgY2hhciBuYW1lWzBYMjBdOworCisgIGlmIChicmxhcGlfX2dldERyaXZlck5hbWUoaGFuZGxlLCBuYW1lLCBzaXplb2YobmFtZSkpIDwgMCkgeworICAgIHRocm93QVBJRXJyb3IoZW52KTsKKyAgICByZXR1cm4gTlVMTDsKKyAgfQorCisgIG5hbWVbc2l6ZW9mKG5hbWUpLTFdID0gMDsKKyAgcmV0dXJuICgqZW52KS0+TmV3U3RyaW5nVVRGKGVudiwgbmFtZSk7Cit9CisKK0pBVkFfSU5TVEFOQ0VfTUVUSE9EKAorICBvcmdfYTExeV9icmxhcGlfQ29ubmVjdGlvbkJhc2UsIGdldE1vZGVsSWRlbnRpZmllciwganN0cmluZworKSB7CisgIEdFVF9DT05ORUNUSU9OX0hBTkRMRShlbnYsIHRoaXMsIE5VTEwpOworICBjaGFyIGlkZW50aWZpZXJbMFgyMF07CisKKyAgaWYgKGJybGFwaV9fZ2V0TW9kZWxJZGVudGlmaWVyKGhhbmRsZSwgaWRlbnRpZmllciwgc2l6ZW9mKGlkZW50aWZpZXIpKSA8IDApIHsKKyAgICB0aHJvd0FQSUVycm9yKGVudik7CisgICAgcmV0dXJuIE5VTEw7CisgIH0KKworICBpZGVudGlmaWVyW3NpemVvZihpZGVudGlmaWVyKS0xXSA9IDA7CisgIHJldHVybiAoKmVudiktPk5ld1N0cmluZ1VURihlbnYsIGlkZW50aWZpZXIpOworfQorCitKQVZBX0lOU1RBTkNFX01FVEhPRCgKKyAgb3JnX2ExMXlfYnJsYXBpX0Nvbm5lY3Rpb25CYXNlLCBnZXREaXNwbGF5U2l6ZSwgam9iamVjdAorKSB7CisgIEdFVF9DT05ORUNUSU9OX0hBTkRMRShlbnYsIHRoaXMsIE5VTEwpOworCisgIHVuc2lnbmVkIGludCB3aWR0aCwgaGVpZ2h0OworICBpZiAoYnJsYXBpX19nZXREaXNwbGF5U2l6ZShoYW5kbGUsICZ3aWR0aCwgJmhlaWdodCkgPCAwKSB7CisgICAgdGhyb3dBUElFcnJvcihlbnYpOworICAgIHJldHVybiBOVUxMOworICB9CisKKyAgamNsYXNzIGNsYXNzID0gKCplbnYpLT5GaW5kQ2xhc3MoZW52LCBCUkxBUElfT0JKRUNUKCJEaXNwbGF5U2l6ZSIpKTsKKyAgaWYgKCFjbGFzcykgcmV0dXJuIE5VTEw7CisKKyAgam1ldGhvZElEIGNvbnN0cnVjdG9yID0gSkFWQV9HRVRfQ09OU1RSVUNUT1IoZW52LCBjbGFzcywKKyAgICBKQVZBX1NJR19JTlQgLy8gd2lkdGgKKyAgICBKQVZBX1NJR19JTlQgLy8gaGVpZ2h0CisgICk7CisgIGlmICghY29uc3RydWN0b3IpIHJldHVybiBOVUxMOworCisgIGpvYmplY3Qgb2JqZWN0ID0gKCplbnYpLT5OZXdPYmplY3QoZW52LCBjbGFzcywgY29uc3RydWN0b3IsIHdpZHRoLCBoZWlnaHQpOworICBpZiAoIW9iamVjdCkgcmV0dXJuIE5VTEw7CisgIHJldHVybiBvYmplY3Q7Cit9CisKK0pBVkFfSU5TVEFOQ0VfTUVUSE9EKAorICBvcmdfYTExeV9icmxhcGlfQ29ubmVjdGlvbkJhc2UsIHBhdXNlLCB2b2lkLAorICBqaW50IG1pbGxpc2Vjb25kcworKSB7CisgIEdFVF9DT05ORUNUSU9OX0hBTkRMRShlbnYsIHRoaXMsICk7CisgIGludCByZXN1bHQgPSBicmxhcGlfX3BhdXNlKGhhbmRsZSwgbWlsbGlzZWNvbmRzKTsKKworICBpZiAocmVzdWx0IDwgMCkgeworICAgIHRocm93QVBJRXJyb3IoZW52KTsKKyAgfQorfQorCitKQVZBX0lOU1RBTkNFX01FVEhPRCgKKyAgb3JnX2ExMXlfYnJsYXBpX0Nvbm5lY3Rpb25CYXNlLCBlbnRlclR0eU1vZGUsIGppbnQsCisgIGppbnQganR0eSwganN0cmluZyBqZHJpdmVyCispIHsKKyAgaW50IHR0eSA7CisgIGNoYXIgKmRyaXZlcjsKKyAgaW50IHJlc3VsdDsKKyAgR0VUX0NPTk5FQ1RJT05fSEFORExFKGVudiwgdGhpcywgLTEpOworICAKKyAgdHR5ID0gKGludClqdHR5OyAKKyAgaWYgKCFqZHJpdmVyKQorICAgIGRyaXZlciA9IE5VTEw7CisgIGVsc2UKKyAgICBpZiAoIShkcml2ZXIgPSAoY2hhciAqKSgqZW52KS0+R2V0U3RyaW5nVVRGQ2hhcnMoZW52LCBqZHJpdmVyLCBOVUxMKSkpIHsKKyAgICAgIHRocm93SmF2YUVycm9yKGVudiwgSkFWQV9PQkpfT1VUX09GX01FTU9SWV9FUlJPUiwgX19mdW5jX18pOworICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICByZXN1bHQgPSBicmxhcGlfX2VudGVyVHR5TW9kZShoYW5kbGUsIHR0eSxkcml2ZXIpOworICBpZiAocmVzdWx0IDwgMCkgeworICAgIHRocm93QVBJRXJyb3IoZW52KTsKKyAgICByZXR1cm4gLTE7CisgIH0KKworICByZXR1cm4gKGppbnQpIHJlc3VsdDsKK30KKworSkFWQV9JTlNUQU5DRV9NRVRIT0QoCisgIG9yZ19hMTF5X2JybGFwaV9Db25uZWN0aW9uQmFzZSwgZW50ZXJUdHlNb2RlV2l0aFBhdGgsIHZvaWQsCisgIGpzdHJpbmcgamRyaXZlciwgamludEFycmF5IGp0dHlzCispIHsKKyAgamludCAqdHR5cyA7CisgIGNoYXIgKmRyaXZlcjsKKyAgaW50IHJlc3VsdDsKKyAgR0VUX0NPTk5FQ1RJT05fSEFORExFKGVudiwgdGhpcywgKTsKKyAgCisgIGlmICghanR0eXMpIHsKKyAgICB0aHJvd0phdmFFcnJvcihlbnYsIEpBVkFfT0JKX05VTExfUE9JTlRFUl9FWENFUFRJT04sIF9fZnVuY19fKTsKKyAgICByZXR1cm47CisgIH0KKyAgaWYgKCEodHR5cyA9ICgqZW52KS0+R2V0SW50QXJyYXlFbGVtZW50cyhlbnYsIGp0dHlzLCBOVUxMKSkpIHsKKyAgICB0aHJvd0phdmFFcnJvcihlbnYsIEpBVkFfT0JKX09VVF9PRl9NRU1PUllfRVJST1IsIF9fZnVuY19fKTsKKyAgICByZXR1cm47CisgIH0KKworICBpZiAoIWpkcml2ZXIpIHsKKyAgICBkcml2ZXIgPSBOVUxMOworICB9IGVsc2UgaWYgKCEoZHJpdmVyID0gKGNoYXIgKikoKmVudiktPkdldFN0cmluZ1VURkNoYXJzKGVudiwgamRyaXZlciwgTlVMTCkpKSB7CisgICAgdGhyb3dKYXZhRXJyb3IoZW52LCBKQVZBX09CSl9PVVRfT0ZfTUVNT1JZX0VSUk9SLCBfX2Z1bmNfXyk7CisgICAgcmV0dXJuOworICB9CisKKyAgcmVzdWx0ID0gYnJsYXBpX19lbnRlclR0eU1vZGVXaXRoUGF0aChoYW5kbGUsIHR0eXMsKCplbnYpLT5HZXRBcnJheUxlbmd0aChlbnYsanR0eXMpLGRyaXZlcik7CisgICgqZW52KS0+UmVsZWFzZUludEFycmF5RWxlbWVudHMoZW52LCBqdHR5cywgdHR5cywgSk5JX0FCT1JUKTsKKyAgaWYgKHJlc3VsdCA8IDApIHsKKyAgICB0aHJvd0FQSUVycm9yKGVudik7CisgICAgcmV0dXJuOworICB9Cit9CisKK0pBVkFfSU5TVEFOQ0VfTUVUSE9EKAorICBvcmdfYTExeV9icmxhcGlfQ29ubmVjdGlvbkJhc2UsIGxlYXZlVHR5TW9kZSwgdm9pZAorKSB7CisgIEdFVF9DT05ORUNUSU9OX0hBTkRMRShlbnYsIHRoaXMsICk7CisKKyAgaWYgKGJybGFwaV9fbGVhdmVUdHlNb2RlKGhhbmRsZSkgPCAwKSB7CisgICAgdGhyb3dBUElFcnJvcihlbnYpOworICAgIHJldHVybjsKKyAgfQorfQorCitKQVZBX0lOU1RBTkNFX01FVEhPRCgKKyAgb3JnX2ExMXlfYnJsYXBpX0Nvbm5lY3Rpb25CYXNlLCBzZXRGb2N1cywgdm9pZCwKKyAgamludCB0dHkKKykgeworICBHRVRfQ09OTkVDVElPTl9IQU5ETEUoZW52LCB0aGlzLCApOworICBpZiAoYnJsYXBpX19zZXRGb2N1cyhoYW5kbGUsIHR0eSkgPCAwKSB0aHJvd0FQSUVycm9yKGVudik7Cit9CisKK0pBVkFfSU5TVEFOQ0VfTUVUSE9EKAorICBvcmdfYTExeV9icmxhcGlfQ29ubmVjdGlvbkJhc2UsIHdyaXRlVGV4dCwgdm9pZCwKKyAgamludCBjdXJzb3IsIGpzdHJpbmcgalRleHQKKykgeworICBHRVRfQ09OTkVDVElPTl9IQU5ETEUoZW52LCB0aGlzLCApOworICAKKyAgY29uc3QgY2hhciAqY1RleHQ7CisgIGlmICghalRleHQpIHsKKyAgICBjVGV4dCA9IE5VTEw7CisgIH0gZWxzZSBpZiAoIShjVGV4dCA9ICgqZW52KS0+R2V0U3RyaW5nVVRGQ2hhcnMoZW52LCBqVGV4dCwgTlVMTCkpKSB7CisgICAgdGhyb3dKYXZhRXJyb3IoZW52LCBKQVZBX09CSl9PVVRfT0ZfTUVNT1JZX0VSUk9SLCBfX2Z1bmNfXyk7CisgICAgcmV0dXJuOworICB9CisKKyAgaW50IHJlc3VsdCA9IGJybGFwaV9fd3JpdGVUZXh0KGhhbmRsZSwgY3Vyc29yLCBjVGV4dCk7CisgIGlmIChqVGV4dCkgKCplbnYpLT5SZWxlYXNlU3RyaW5nVVRGQ2hhcnMoZW52LCBqVGV4dCwgY1RleHQpOyAKKyAgaWYgKHJlc3VsdCA8IDApIHRocm93QVBJRXJyb3IoZW52KTsKK30KKworSkFWQV9JTlNUQU5DRV9NRVRIT0QoCisgIG9yZ19hMTF5X2JybGFwaV9Db25uZWN0aW9uQmFzZSwgd3JpdGVEb3RzLCB2b2lkLAorICBqYnl0ZUFycmF5IGpEb3RzCispIHsKKyAgR0VUX0NPTk5FQ1RJT05fSEFORExFKGVudiwgdGhpcywgKTsKKyAgCisgIGlmICghakRvdHMpIHsKKyAgICB0aHJvd0phdmFFcnJvcihlbnYsIEpBVkFfT0JKX05VTExfUE9JTlRFUl9FWENFUFRJT04sIF9fZnVuY19fKTsKKyAgICByZXR1cm47CisgIH0KKworICBqYnl0ZSAqY0RvdHMgPSAoKmVudiktPkdldEJ5dGVBcnJheUVsZW1lbnRzKGVudiwgakRvdHMsIE5VTEwpOworICBpZiAoIWNEb3RzKSByZXR1cm47CisKKyAgaW50IHJlc3VsdCA9IGJybGFwaV9fd3JpdGVEb3RzKGhhbmRsZSwgKGNvbnN0IHVuc2lnbmVkIGNoYXIgKiljRG90cyk7CisgICgqZW52KS0+UmVsZWFzZUJ5dGVBcnJheUVsZW1lbnRzKGVudiwgakRvdHMsIGNEb3RzLCBKTklfQUJPUlQpOyAKKyAgCisgIGlmIChyZXN1bHQgPCAwKSB7CisgICAgdGhyb3dBUElFcnJvcihlbnYpOworICAgIHJldHVybjsKKyAgfQorfQorCitKQVZBX0lOU1RBTkNFX01FVEhPRCgKKyAgb3JnX2ExMXlfYnJsYXBpX0Nvbm5lY3Rpb25CYXNlLCB3cml0ZSwgdm9pZCwKKyAgam9iamVjdCBqQXJndW1lbnRzCispIHsKKyAgaWYgKCFqQXJndW1lbnRzKSB7CisgICAgdGhyb3dKYXZhRXJyb3IoZW52LCBKQVZBX09CSl9OVUxMX1BPSU5URVJfRVhDRVBUSU9OLCBfX2Z1bmNfXyk7CisgICAgcmV0dXJuOworICB9CisKKyAgR0VUX0NPTk5FQ1RJT05fSEFORExFKGVudiwgdGhpcywgKTsKKyAgR0VUX0NMQVNTKGVudiwgY2xhc3MsIGpBcmd1bWVudHMsICk7CisgIGJybGFwaV93cml0ZUFyZ3VtZW50c190IGNBcmd1bWVudHMgPSBCUkxBUElfV1JJVEVBUkdVTUVOVFNfSU5JVElBTElaRVI7CisKKyAgeworICAgIEZJTkRfRklFTEQoZW52LCBmaWVsZCwgY2xhc3MsICJkaXNwbGF5TnVtYmVyIiwgSkFWQV9TSUdfSU5ULCApOworICAgIGNBcmd1bWVudHMuZGlzcGxheU51bWJlciA9IEpBVkFfR0VUX0ZJRUxEKGVudiwgSW50LCBqQXJndW1lbnRzLCBmaWVsZCk7CisgIH0KKworICB7CisgICAgRklORF9GSUVMRChlbnYsIGZpZWxkLCBjbGFzcywgInJlZ2lvbkJlZ2luIiwgSkFWQV9TSUdfSU5ULCApOworICAgIGNBcmd1bWVudHMucmVnaW9uQmVnaW4gPSBKQVZBX0dFVF9GSUVMRChlbnYsIEludCwgakFyZ3VtZW50cywgZmllbGQpOworICB9CisKKyAgeworICAgIEZJTkRfRklFTEQoZW52LCBmaWVsZCwgY2xhc3MsICJyZWdpb25TaXplIiwgSkFWQV9TSUdfSU5ULCApOworICAgIGNBcmd1bWVudHMucmVnaW9uU2l6ZSA9IEpBVkFfR0VUX0ZJRUxEKGVudiwgSW50LCBqQXJndW1lbnRzLCBmaWVsZCk7CisgIH0KKworICBqc3RyaW5nIGpUZXh0OworICB7CisgICAgRklORF9GSUVMRChlbnYsIGZpZWxkLCBjbGFzcywgInRleHQiLCBKQVZBX1NJR19TVFJJTkcsICk7CisKKyAgICBpZiAoKGpUZXh0ID0gSkFWQV9HRVRfRklFTEQoZW52LCBPYmplY3QsIGpBcmd1bWVudHMsIGZpZWxkKSkpIHsKKyAgICAgIGNBcmd1bWVudHMudGV4dCA9IChjaGFyICopICgqZW52KS0+R2V0U3RyaW5nVVRGQ2hhcnMoZW52LCBqVGV4dCwgTlVMTCk7CisgICAgICBjQXJndW1lbnRzLmNoYXJzZXQgPSAiVVRGLTgiOworICAgIH0gZWxzZSB7CisgICAgICBjQXJndW1lbnRzLnRleHQgPSBOVUxMOworICAgIH0KKyAgfQorCisgIGpieXRlQXJyYXkgakFuZE1hc2s7CisgIHsKKyAgICBGSU5EX0ZJRUxEKGVudiwgZmllbGQsIGNsYXNzLCAiYW5kTWFzayIsIEpBVkFfU0lHX0FSUkFZKEpBVkFfU0lHX0JZVEUpLCApOworCisgICAgaWYgKChqQW5kTWFzayA9IEpBVkFfR0VUX0ZJRUxEKGVudiwgT2JqZWN0LCBqQXJndW1lbnRzLCBmaWVsZCkpKSB7CisgICAgICBjQXJndW1lbnRzLmFuZE1hc2sgPSAodW5zaWduZWQgY2hhciAqKSAoKmVudiktPkdldEJ5dGVBcnJheUVsZW1lbnRzKGVudiwgakFuZE1hc2ssIE5VTEwpOworICAgIH0gZWxzZSB7CisgICAgICBjQXJndW1lbnRzLmFuZE1hc2sgPSBOVUxMOworICAgIH0KKyAgfQorCisgIGpieXRlQXJyYXkgak9yTWFzazsKKyAgeworICAgIEZJTkRfRklFTEQoZW52LCBmaWVsZCwgY2xhc3MsICJvck1hc2siLCBKQVZBX1NJR19BUlJBWShKQVZBX1NJR19CWVRFKSwgKTsKKworICAgIGlmICgoak9yTWFzayA9IEpBVkFfR0VUX0ZJRUxEKGVudiwgT2JqZWN0LCBqQXJndW1lbnRzLCBmaWVsZCkpKSB7CisgICAgICBjQXJndW1lbnRzLm9yTWFzayA9ICh1bnNpZ25lZCBjaGFyICopICgqZW52KS0+R2V0Qnl0ZUFycmF5RWxlbWVudHMoZW52LCBqT3JNYXNrLCBOVUxMKTsKKyAgICB9IGVsc2UgeworICAgICAgY0FyZ3VtZW50cy5vck1hc2sgPSBOVUxMOworICAgIH0KKyAgfQorCisgIHsKKyAgICBGSU5EX0ZJRUxEKGVudiwgZmllbGQsIGNsYXNzLCAiY3Vyc29yUG9zaXRpb24iLCBKQVZBX1NJR19JTlQsICk7CisgICAgY0FyZ3VtZW50cy5jdXJzb3IgPSBKQVZBX0dFVF9GSUVMRChlbnYsIEludCwgakFyZ3VtZW50cywgZmllbGQpOworICB9CisKKyAgaW50IHJlc3VsdCA9IGJybGFwaV9fd3JpdGUoaGFuZGxlLCAmY0FyZ3VtZW50cyk7CisgIGlmIChqVGV4dCkgKCplbnYpLT5SZWxlYXNlU3RyaW5nVVRGQ2hhcnMoZW52LCBqVGV4dCwgY0FyZ3VtZW50cy50ZXh0KTsgCisgIGlmIChqQW5kTWFzaykgKCplbnYpLT5SZWxlYXNlQnl0ZUFycmF5RWxlbWVudHMoZW52LCBqQW5kTWFzaywgKGpieXRlKikgY0FyZ3VtZW50cy5hbmRNYXNrLCBKTklfQUJPUlQpOyAKKyAgaWYgKGpPck1hc2spICgqZW52KS0+UmVsZWFzZUJ5dGVBcnJheUVsZW1lbnRzKGVudiwgak9yTWFzaywgKGpieXRlKikgY0FyZ3VtZW50cy5vck1hc2ssIEpOSV9BQk9SVCk7IAorCisgIGlmIChyZXN1bHQgPCAwKSB0aHJvd0FQSUVycm9yKGVudik7Cit9CisKK0pBVkFfSU5TVEFOQ0VfTUVUSE9EKAorICBvcmdfYTExeV9icmxhcGlfQ29ubmVjdGlvbkJhc2UsIHJlYWRLZXksIGpvYmplY3QsCisgIGpib29sZWFuIGpXYWl0CispIHsKKyAgR0VUX0NPTk5FQ1RJT05fSEFORExFKGVudiwgdGhpcywgTlVMTCk7CisKKyAgaW50IGNXYWl0ID0galdhaXQgIT0gSk5JX0ZBTFNFOworICBicmxhcGlfa2V5Q29kZV90IGNvZGU7CisKKyAgaW50IHJlc3VsdCA9IGJybGFwaV9fcmVhZEtleShoYW5kbGUsIGNXYWl0LCAmY29kZSk7CisgIGlmIChyZXN1bHQgPCAwKSB0aHJvd0FQSUVycm9yKGVudik7CisgIGlmICghcmVzdWx0KSByZXR1cm4gTlVMTDsKKyAgcmV0dXJuIG5ld0xvbmcoZW52LCBjb2RlKTsKK30KKworSkFWQV9JTlNUQU5DRV9NRVRIT0QoCisgIG9yZ19hMTF5X2JybGFwaV9Db25uZWN0aW9uQmFzZSwgcmVhZEtleVdpdGhUaW1lb3V0LCBqbG9uZywKKyAgamludCBtaWxsaXNlY29uZHMKKykgeworICBHRVRfQ09OTkVDVElPTl9IQU5ETEUoZW52LCB0aGlzLCAtMSk7CisKKyAgYnJsYXBpX2tleUNvZGVfdCBjb2RlOworICBpbnQgcmVzdWx0ID0gYnJsYXBpX19yZWFkS2V5V2l0aFRpbWVvdXQoaGFuZGxlLCBtaWxsaXNlY29uZHMsICZjb2RlKTsKKworICBpZiAocmVzdWx0IDwgMCkgeworICAgIHRocm93QVBJRXJyb3IoZW52KTsKKyAgfSBlbHNlIGlmICghcmVzdWx0KSB7CisgICAgdGhyb3dKYXZhRXJyb3IoZW52LCBKQVZBX09CSl9USU1FT1VUX0VYQ0VQVElPTiwgX19mdW5jX18pOworICB9CisKKyAgcmV0dXJuIChqbG9uZyljb2RlOworfQorCitKQVZBX0lOU1RBTkNFX01FVEhPRCgKKyAgb3JnX2ExMXlfYnJsYXBpX0Nvbm5lY3Rpb25CYXNlLCBpZ25vcmVLZXlzLCB2b2lkLAorICBqbG9uZyBqcmFuZ2UsIGpsb25nQXJyYXkganMKKykgeworICBqbG9uZyAqczsKKyAgdW5zaWduZWQgaW50IG47CisgIGludCByZXN1bHQ7CisgIEdFVF9DT05ORUNUSU9OX0hBTkRMRShlbnYsIHRoaXMsICk7CisKKyAgaWYgKCFqcykgeworICAgIHRocm93SmF2YUVycm9yKGVudiwgSkFWQV9PQkpfTlVMTF9QT0lOVEVSX0VYQ0VQVElPTiwgX19mdW5jX18pOworICAgIHJldHVybjsKKyAgfQorCisgIG4gPSAodW5zaWduZWQgaW50KSAoKmVudiktPkdldEFycmF5TGVuZ3RoKGVudiwganMpOworICBzID0gKCplbnYpLT5HZXRMb25nQXJyYXlFbGVtZW50cyhlbnYsIGpzLCBOVUxMKTsKKworICAvLyBYWFggamxvbmcgIT0gYnJsYXBpX2tleUNvZGVfdCBwcm9iYWJseQorICByZXN1bHQgPSBicmxhcGlfX2lnbm9yZUtleXMoaGFuZGxlLCBqcmFuZ2UsIChjb25zdCBicmxhcGlfa2V5Q29kZV90ICopcywgbik7CisgICgqZW52KS0+UmVsZWFzZUxvbmdBcnJheUVsZW1lbnRzKGVudiwganMsIHMsIEpOSV9BQk9SVCk7CisgIAorICBpZiAocmVzdWx0IDwgMCkgeworICAgIHRocm93QVBJRXJyb3IoZW52KTsKKyAgICByZXR1cm47CisgIH0KK30KKworSkFWQV9JTlNUQU5DRV9NRVRIT0QoCisgIG9yZ19hMTF5X2JybGFwaV9Db25uZWN0aW9uQmFzZSwgYWNjZXB0S2V5cywgdm9pZCwKKyAgamxvbmcganJhbmdlLCBqbG9uZ0FycmF5IGpzCispIHsKKyAgamxvbmcgKnM7CisgIHVuc2lnbmVkIGludCBuOworICBpbnQgcmVzdWx0OworICBHRVRfQ09OTkVDVElPTl9IQU5ETEUoZW52LCB0aGlzLCApOworCisgIGlmICghanMpIHsKKyAgICB0aHJvd0phdmFFcnJvcihlbnYsIEpBVkFfT0JKX05VTExfUE9JTlRFUl9FWENFUFRJT04sIF9fZnVuY19fKTsKKyAgICByZXR1cm47CisgIH0KKworICBuID0gKHVuc2lnbmVkIGludCkgKCplbnYpLT5HZXRBcnJheUxlbmd0aChlbnYsIGpzKTsKKyAgcyA9ICgqZW52KS0+R2V0TG9uZ0FycmF5RWxlbWVudHMoZW52LCBqcywgTlVMTCk7CisKKyAgLy8gWFhYIGpsb25nICE9IGJybGFwaV9rZXlDb2RlX3QgcHJvYmFibHkKKyAgcmVzdWx0ID0gYnJsYXBpX19hY2NlcHRLZXlzKGhhbmRsZSwganJhbmdlLCAoY29uc3QgYnJsYXBpX2tleUNvZGVfdCAqKXMsIG4pOworICAoKmVudiktPlJlbGVhc2VMb25nQXJyYXlFbGVtZW50cyhlbnYsIGpzLCBzLCBKTklfQUJPUlQpOworCisgIGlmIChyZXN1bHQgPCAwKSB7CisgICAgdGhyb3dBUElFcnJvcihlbnYpOworICAgIHJldHVybjsKKyAgfQorfQorCitKQVZBX0lOU1RBTkNFX01FVEhPRCgKKyAgb3JnX2ExMXlfYnJsYXBpX0Nvbm5lY3Rpb25CYXNlLCBpZ25vcmVBbGxLZXlzLCB2b2lkCispIHsKKyAgR0VUX0NPTk5FQ1RJT05fSEFORExFKGVudiwgdGhpcywgKTsKKworICBpZiAoYnJsYXBpX19pZ25vcmVBbGxLZXlzKGhhbmRsZSkgPCAwKQorICAgIHRocm93QVBJRXJyb3IoZW52KTsKK30KKworSkFWQV9JTlNUQU5DRV9NRVRIT0QoCisgIG9yZ19hMTF5X2JybGFwaV9Db25uZWN0aW9uQmFzZSwgYWNjZXB0QWxsS2V5cywgdm9pZAorKSB7CisgIEdFVF9DT05ORUNUSU9OX0hBTkRMRShlbnYsIHRoaXMsICk7CisKKyAgaWYgKGJybGFwaV9fYWNjZXB0QWxsS2V5cyhoYW5kbGUpIDwgMCkKKyAgICB0aHJvd0FQSUVycm9yKGVudik7Cit9CisKK0pBVkFfSU5TVEFOQ0VfTUVUSE9EKAorICBvcmdfYTExeV9icmxhcGlfQ29ubmVjdGlvbkJhc2UsIGlnbm9yZUtleVJhbmdlcywgdm9pZCwKKyAgam9iamVjdEFycmF5IGpzCispIHsKKyAgdW5zaWduZWQgaW50IG47CisgIEdFVF9DT05ORUNUSU9OX0hBTkRMRShlbnYsIHRoaXMsICk7CisKKyAgaWYgKCFqcykgeworICAgIHRocm93SmF2YUVycm9yKGVudiwgSkFWQV9PQkpfTlVMTF9QT0lOVEVSX0VYQ0VQVElPTiwgX19mdW5jX18pOworICAgIHJldHVybjsKKyAgfQorCisgIG4gPSAodW5zaWduZWQgaW50KSAoKmVudiktPkdldEFycmF5TGVuZ3RoKGVudiwganMpOworCisgIHsKKyAgICB1bnNpZ25lZCBpbnQgaTsKKyAgICBicmxhcGlfcmFuZ2VfdCBzW25dOworCisgICAgZm9yIChpPTA7IGk8bjsgaSsrKSB7CisgICAgICBqbG9uZ0FycmF5IGpsID0gKCplbnYpLT5HZXRPYmplY3RBcnJheUVsZW1lbnQoZW52LCBqcywgaSk7CisgICAgICBqbG9uZyAqbCA9ICgqZW52KS0+R2V0TG9uZ0FycmF5RWxlbWVudHMoZW52LCBqbCwgTlVMTCk7CisgICAgICBzW2ldLmZpcnN0ID0gbFswXTsKKyAgICAgIHNbaV0ubGFzdCA9IGxbMV07CisgICAgICAoKmVudiktPlJlbGVhc2VMb25nQXJyYXlFbGVtZW50cyhlbnYsIGpsLCBsLCBKTklfQUJPUlQpOworICAgIH0KKyAgICBpZiAoYnJsYXBpX19pZ25vcmVLZXlSYW5nZXMoaGFuZGxlLCBzLCBuKSkgeworICAgICAgdGhyb3dBUElFcnJvcihlbnYpOworICAgICAgcmV0dXJuOworICAgIH0KKyAgfQorfQorCitKQVZBX0lOU1RBTkNFX01FVEhPRCgKKyAgb3JnX2ExMXlfYnJsYXBpX0Nvbm5lY3Rpb25CYXNlLCBhY2NlcHRLZXlSYW5nZXMsIHZvaWQsCisgIGpvYmplY3RBcnJheSBqcworKSB7CisgIHVuc2lnbmVkIGludCBuOworICBHRVRfQ09OTkVDVElPTl9IQU5ETEUoZW52LCB0aGlzLCApOworCisgIGlmICghanMpIHsKKyAgICB0aHJvd0phdmFFcnJvcihlbnYsIEpBVkFfT0JKX05VTExfUE9JTlRFUl9FWENFUFRJT04sIF9fZnVuY19fKTsKKyAgICByZXR1cm47CisgIH0KKworICBuID0gKHVuc2lnbmVkIGludCkgKCplbnYpLT5HZXRBcnJheUxlbmd0aChlbnYsIGpzKTsKKworICB7CisgICAgdW5zaWduZWQgaW50IGk7CisgICAgYnJsYXBpX3JhbmdlX3Qgc1tuXTsKKworICAgIGZvciAoaT0wOyBpPG47IGkrKykgeworICAgICAgamxvbmdBcnJheSBqbCA9ICgqZW52KS0+R2V0T2JqZWN0QXJyYXlFbGVtZW50KGVudiwganMsIGkpOworICAgICAgamxvbmcgKmwgPSAoKmVudiktPkdldExvbmdBcnJheUVsZW1lbnRzKGVudiwgamwsIE5VTEwpOworICAgICAgc1tpXS5maXJzdCA9IGxbMF07CisgICAgICBzW2ldLmxhc3QgPSBsWzFdOworICAgICAgKCplbnYpLT5SZWxlYXNlTG9uZ0FycmF5RWxlbWVudHMoZW52LCBqbCwgbCwgSk5JX0FCT1JUKTsKKyAgICB9CisgICAgaWYgKGJybGFwaV9fYWNjZXB0S2V5UmFuZ2VzKGhhbmRsZSwgcywgbikpIHsKKyAgICAgIHRocm93QVBJRXJyb3IoZW52KTsKKyAgICAgIHJldHVybjsKKyAgICB9CisgIH0KK30KKworSkFWQV9JTlNUQU5DRV9NRVRIT0QoCisgIG9yZ19hMTF5X2JybGFwaV9Db25uZWN0aW9uQmFzZSwgZW50ZXJSYXdNb2RlLCB2b2lkLAorICBqc3RyaW5nIGpkcml2ZXIKKykgeworICBjaGFyICpkcml2ZXI7CisgIGludCByZXM7CisgIEdFVF9DT05ORUNUSU9OX0hBTkRMRShlbnYsIHRoaXMsICk7CisKKyAgaWYgKCFqZHJpdmVyKSB7CisgICAgdGhyb3dKYXZhRXJyb3IoZW52LCBKQVZBX09CSl9OVUxMX1BPSU5URVJfRVhDRVBUSU9OLCBfX2Z1bmNfXyk7CisgICAgcmV0dXJuOworICB9IGVsc2UgaWYgKCEoZHJpdmVyID0gKGNoYXIgKikoKmVudiktPkdldFN0cmluZ1VURkNoYXJzKGVudiwgamRyaXZlciwgTlVMTCkpKSB7CisgICAgdGhyb3dKYXZhRXJyb3IoZW52LCBKQVZBX09CSl9OVUxMX1BPSU5URVJfRVhDRVBUSU9OLCBfX2Z1bmNfXyk7CisgICAgcmV0dXJuOworICB9CisgIHJlcyA9IGJybGFwaV9fZW50ZXJSYXdNb2RlKGhhbmRsZSwgZHJpdmVyKTsKKyAgaWYgKGpkcml2ZXIpICgqZW52KS0+UmVsZWFzZVN0cmluZ1VURkNoYXJzKGVudiwgamRyaXZlciwgZHJpdmVyKTsKKyAgaWYgKHJlcyA8IDApIHsKKyAgICB0aHJvd0FQSUVycm9yKGVudik7CisgICAgcmV0dXJuOworICB9Cit9CisKK0pBVkFfSU5TVEFOQ0VfTUVUSE9EKAorICBvcmdfYTExeV9icmxhcGlfQ29ubmVjdGlvbkJhc2UsIGxlYXZlUmF3TW9kZSwgdm9pZAorKSB7CisgIEdFVF9DT05ORUNUSU9OX0hBTkRMRShlbnYsIHRoaXMsICk7CisKKyAgaWYgKGJybGFwaV9fbGVhdmVSYXdNb2RlKGhhbmRsZSkgPCAwKSB7CisgICAgdGhyb3dBUElFcnJvcihlbnYpOworICAgIHJldHVybjsKKyAgfQorfQorCitKQVZBX0lOU1RBTkNFX01FVEhPRCgKKyAgb3JnX2ExMXlfYnJsYXBpX0Nvbm5lY3Rpb25CYXNlLCBzZW5kUmF3LCBqaW50LAorICBqYnl0ZUFycmF5IGpidWYKKykgeworICBqYnl0ZSAqYnVmOworICB1bnNpZ25lZCBpbnQgbjsKKyAgaW50IHJlc3VsdDsKKyAgR0VUX0NPTk5FQ1RJT05fSEFORExFKGVudiwgdGhpcywgLTEpOworCisgIGlmICghamJ1ZikgeworICAgIHRocm93SmF2YUVycm9yKGVudiwgSkFWQV9PQkpfTlVMTF9QT0lOVEVSX0VYQ0VQVElPTiwgX19mdW5jX18pOworICAgIHJldHVybiAtMTsKKyAgfQorCisgIG4gPSAodW5zaWduZWQgaW50KSAoKmVudiktPkdldEFycmF5TGVuZ3RoKGVudiwgamJ1Zik7CisgIGJ1ZiA9ICgqZW52KS0+R2V0Qnl0ZUFycmF5RWxlbWVudHMoZW52LCBqYnVmLCBOVUxMKTsKKworICByZXN1bHQgPSBicmxhcGlfX3NlbmRSYXcoaGFuZGxlLCAoY29uc3QgdW5zaWduZWQgY2hhciAqKWJ1Ziwgbik7CisgICgqZW52KS0+UmVsZWFzZUJ5dGVBcnJheUVsZW1lbnRzKGVudiwgamJ1ZiwgYnVmLCBKTklfQUJPUlQpOworCisgIGlmIChyZXN1bHQgPCAwKSB7CisgICAgdGhyb3dBUElFcnJvcihlbnYpOworICAgIHJldHVybiAtMTsKKyAgfQorCisgIHJldHVybiAoamludCkgcmVzdWx0OworfQorCitKQVZBX0lOU1RBTkNFX01FVEhPRCgKKyAgb3JnX2ExMXlfYnJsYXBpX0Nvbm5lY3Rpb25CYXNlLCByZWN2UmF3LCBqaW50LAorICBqYnl0ZUFycmF5IGpidWYKKykgeworICBqYnl0ZSAqYnVmOworICB1bnNpZ25lZCBpbnQgbjsKKyAgaW50IHJlc3VsdDsKKyAgR0VUX0NPTk5FQ1RJT05fSEFORExFKGVudiwgdGhpcywgLTEpOworCisgIGlmICghamJ1ZikgeworICAgIHRocm93SmF2YUVycm9yKGVudiwgSkFWQV9PQkpfTlVMTF9QT0lOVEVSX0VYQ0VQVElPTiwgX19mdW5jX18pOworICAgIHJldHVybiAtMTsKKyAgfQorCisgIG4gPSAodW5zaWduZWQgaW50KSAoKmVudiktPkdldEFycmF5TGVuZ3RoKGVudiwgamJ1Zik7CisgIGJ1ZiA9ICgqZW52KS0+R2V0Qnl0ZUFycmF5RWxlbWVudHMoZW52LCBqYnVmLCBOVUxMKTsKKworICByZXN1bHQgPSBicmxhcGlfX3JlY3ZSYXcoaGFuZGxlLCAodW5zaWduZWQgY2hhciAqKWJ1Ziwgbik7CisKKyAgaWYgKHJlc3VsdCA8IDApIHsKKyAgICAoKmVudiktPlJlbGVhc2VCeXRlQXJyYXlFbGVtZW50cyhlbnYsIGpidWYsIGJ1ZiwgSk5JX0FCT1JUKTsKKyAgICB0aHJvd0FQSUVycm9yKGVudik7CisgICAgcmV0dXJuIC0xOworICB9CisKKyAgKCplbnYpLT5SZWxlYXNlQnl0ZUFycmF5RWxlbWVudHMoZW52LCBqYnVmLCBidWYsIDApOworICByZXR1cm4gKGppbnQpIHJlc3VsdDsKK30KKworc3RhdGljIGludAorY2hlY2tQYXJhbWV0ZXIgKAorICBKTklFbnYgKmVudiwKKyAgamludCBwYXJhbWV0ZXIsIGpsb25nIHN1YnBhcmFtLCBqYm9vbGVhbiBnbG9iYWwsCisgIGNvbnN0IGJybGFwaV9wYXJhbV9wcm9wZXJ0aWVzX3QgKipwcm9wZXJ0aWVzLAorICBicmxhcGlfcGFyYW1fZmxhZ3NfdCAqZmxhZ3MKKykgeworICBpZiAoISgqcHJvcGVydGllcyA9IGJybGFwaV9nZXRQYXJhbWV0ZXJQcm9wZXJ0aWVzKHBhcmFtZXRlcikpKSB7CisgICAgdGhyb3dKYXZhRXJyb3IoZW52LCBKQVZBX09CSl9JTExFR0FMX0FSR1VNRU5UX0VYQ0VQVElPTiwgInBhcmFtZXRlciBvdXQgb2YgcmFuZ2UiKTsKKyAgICByZXR1cm4gMDsKKyAgfQorCisgIGlmICghKCpwcm9wZXJ0aWVzKS0+aGFzU3VicGFyYW0gJiYgKHN1YnBhcmFtICE9IDApKSB7CisgICAgdGhyb3dKYXZhRXJyb3IoZW52LCBKQVZBX09CSl9JTExFR0FMX0FSR1VNRU5UX0VYQ0VQVElPTiwgIm5vbnplcm8gc3VicGFyYW0iKTsKKyAgICByZXR1cm4gMDsKKyAgfQorCisgICpmbGFncyA9IDA7CisgIGlmIChnbG9iYWwgPT0gSk5JX1RSVUUpIHsKKyAgICAqZmxhZ3MgfD0gQlJMQVBJX1BBUkFNRl9HTE9CQUw7CisgIH0gZWxzZSBpZiAoZ2xvYmFsID09IEpOSV9GQUxTRSkgeworICAgICpmbGFncyB8PSBCUkxBUElfUEFSQU1GX0xPQ0FMOworICB9CisKKyAgcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBqb2JqZWN0CituZXdQYXJhbWV0ZXJWYWx1ZU9iamVjdCAoCisgIEpOSUVudiAqZW52LCBjb25zdCBicmxhcGlfcGFyYW1fcHJvcGVydGllc190ICpwcm9wZXJ0aWVzLAorICBjb25zdCB2b2lkICp2YWx1ZSwgc2l6ZV90IHNpemUKKykgeworICBqb2JqZWN0IHJlc3VsdCA9IE5VTEw7CisgIHNpemVfdCBjb3VudCA9IHNpemU7CisKKyAgc3dpdGNoIChwcm9wZXJ0aWVzLT50eXBlKSB7CisgICAgY2FzZSBCUkxBUElfUEFSQU1fVFlQRV9TVFJJTkc6IHsKKyAgICAgIHJlc3VsdCA9ICgqZW52KS0+TmV3U3RyaW5nVVRGKGVudiwgdmFsdWUpOworICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBCUkxBUElfUEFSQU1fVFlQRV9CT09MRUFOOiB7CisgICAgICBjb25zdCBicmxhcGlfcGFyYW1fYm9vbF90ICpjQm9vbGVhbnMgPSB2YWx1ZTsKKyAgICAgIGNvdW50IC89IHNpemVvZigqY0Jvb2xlYW5zKTsKKyAgICAgIHJlc3VsdCA9ICgqZW52KS0+TmV3Qm9vbGVhbkFycmF5KGVudiwgY291bnQpOworCisgICAgICBpZiAocmVzdWx0ICYmIGNvdW50KSB7CisgICAgICAgIGpib29sZWFuIGpCb29sZWFuc1tjb3VudF07CisKKyAgICAgICAgZm9yIChqc2l6ZSBpPTA7IGk8Y291bnQ7IGkrPTEpIHsKKyAgICAgICAgICBqQm9vbGVhbnNbaV0gPSBjQm9vbGVhbnNbaV0/IEpOSV9UUlVFOiBKTklfRkFMU0U7CisgICAgICAgIH0KKworICAgICAgICAoKmVudiktPlNldEJvb2xlYW5BcnJheVJlZ2lvbihlbnYsIHJlc3VsdCwgMCwgY291bnQsIGpCb29sZWFucyk7CisgICAgICB9CisKKyAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2UgQlJMQVBJX1BBUkFNX1RZUEVfVUlOVDg6IHsKKyAgICAgIHJlc3VsdCA9ICgqZW52KS0+TmV3Qnl0ZUFycmF5KGVudiwgY291bnQpOworCisgICAgICBpZiAocmVzdWx0ICYmIGNvdW50KSB7CisgICAgICAgICgqZW52KS0+U2V0Qnl0ZUFycmF5UmVnaW9uKGVudiwgcmVzdWx0LCAwLCBjb3VudCwgdmFsdWUpOworICAgICAgfQorCisgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIEJSTEFQSV9QQVJBTV9UWVBFX1VJTlQxNjogeworICAgICAgY291bnQgLz0gMjsKKyAgICAgIHJlc3VsdCA9ICgqZW52KS0+TmV3U2hvcnRBcnJheShlbnYsIGNvdW50KTsKKworICAgICAgaWYgKHJlc3VsdCAmJiBjb3VudCkgeworICAgICAgICAoKmVudiktPlNldFNob3J0QXJyYXlSZWdpb24oZW52LCByZXN1bHQsIDAsIGNvdW50LCB2YWx1ZSk7CisgICAgICB9CisKKyAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2UgQlJMQVBJX1BBUkFNX1RZUEVfVUlOVDMyOiB7CisgICAgICBjb3VudCAvPSA0OworICAgICAgcmVzdWx0ID0gKCplbnYpLT5OZXdJbnRBcnJheShlbnYsIGNvdW50KTsKKworICAgICAgaWYgKHJlc3VsdCAmJiBjb3VudCkgeworICAgICAgICAoKmVudiktPlNldEludEFycmF5UmVnaW9uKGVudiwgcmVzdWx0LCAwLCBjb3VudCwgdmFsdWUpOworICAgICAgfQorCisgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIEJSTEFQSV9QQVJBTV9UWVBFX1VJTlQ2NDogeworICAgICAgY291bnQgLz0gODsKKyAgICAgIHJlc3VsdCA9ICgqZW52KS0+TmV3TG9uZ0FycmF5KGVudiwgY291bnQpOworCisgICAgICBpZiAocmVzdWx0ICYmIGNvdW50KSB7CisgICAgICAgICgqZW52KS0+U2V0TG9uZ0FycmF5UmVnaW9uKGVudiwgcmVzdWx0LCAwLCBjb3VudCwgdmFsdWUpOworICAgICAgfQorCisgICAgICBicmVhazsKKyAgICB9CisgIH0KKworICByZXR1cm4gcmVzdWx0OworfQorCitKQVZBX0lOU1RBTkNFX01FVEhPRCgKKyAgb3JnX2ExMXlfYnJsYXBpX0Nvbm5lY3Rpb25CYXNlLCBnZXRQYXJhbWV0ZXIsIGpvYmplY3QsCisgIGppbnQgcGFyYW1ldGVyLCBqbG9uZyBzdWJwYXJhbSwgamJvb2xlYW4gZ2xvYmFsCispIHsKKyAgR0VUX0NPTk5FQ1RJT05fSEFORExFKGVudiwgdGhpcywgTlVMTCk7CisKKyAgam9iamVjdCByZXN1bHQgPSBOVUxMOworICBjb25zdCBicmxhcGlfcGFyYW1fcHJvcGVydGllc190ICpwcm9wZXJ0aWVzOworICBicmxhcGlfcGFyYW1fZmxhZ3NfdCBmbGFnczsKKworICBpZiAoY2hlY2tQYXJhbWV0ZXIoZW52LCBwYXJhbWV0ZXIsIHN1YnBhcmFtLCBnbG9iYWwsICZwcm9wZXJ0aWVzLCAmZmxhZ3MpKSB7CisgICAgdm9pZCAqdmFsdWU7CisgICAgc2l6ZV90IHNpemU7CisKKyAgICBpZiAoKHZhbHVlID0gYnJsYXBpX19nZXRQYXJhbWV0ZXJBbGxvYyhoYW5kbGUsIHBhcmFtZXRlciwgc3VicGFyYW0sIGZsYWdzLCAmc2l6ZSkpKSB7CisgICAgICByZXN1bHQgPSBuZXdQYXJhbWV0ZXJWYWx1ZU9iamVjdChlbnYsIHByb3BlcnRpZXMsIHZhbHVlLCBzaXplKTsKKyAgICAgIGZyZWUodmFsdWUpOworICAgIH0gZWxzZSB7CisgICAgICB0aHJvd0FQSUVycm9yKGVudik7CisgICAgfQorICB9CisKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIHZvaWQKK3NldFBhcmFtZXRlciAoCisgIEpOSUVudiAqZW52LCBicmxhcGlfaGFuZGxlX3QgKmhhbmRsZSwKKyAgamludCBwYXJhbWV0ZXIsIGpsb25nIHN1YnBhcmFtLCBicmxhcGlfcGFyYW1fZmxhZ3NfdCBmbGFncywKKyAgY29uc3Qgdm9pZCAqZGF0YSwgc2l6ZV90IHNpemUKKykgeworICBpZiAoYnJsYXBpX19zZXRQYXJhbWV0ZXIoaGFuZGxlLCBwYXJhbWV0ZXIsIHN1YnBhcmFtLCBmbGFncywgZGF0YSwgc2l6ZSkgPCAwKSB7CisgICAgdGhyb3dBUElFcnJvcihlbnYpOworICB9Cit9CisKK0pBVkFfSU5TVEFOQ0VfTUVUSE9EKAorICBvcmdfYTExeV9icmxhcGlfQ29ubmVjdGlvbkJhc2UsIHNldFBhcmFtZXRlciwgdm9pZCwKKyAgamludCBwYXJhbWV0ZXIsIGpsb25nIHN1YnBhcmFtLCBqYm9vbGVhbiBnbG9iYWwsIGpvYmplY3QgdmFsdWUKKykgeworICBHRVRfQ09OTkVDVElPTl9IQU5ETEUoZW52LCB0aGlzLCApOworCisgIGNvbnN0IGJybGFwaV9wYXJhbV9wcm9wZXJ0aWVzX3QgKnByb3BlcnRpZXM7CisgIGJybGFwaV9wYXJhbV9mbGFnc190IGZsYWdzOworCisgIGlmIChjaGVja1BhcmFtZXRlcihlbnYsIHBhcmFtZXRlciwgc3VicGFyYW0sIGdsb2JhbCwgJnByb3BlcnRpZXMsICZmbGFncykpIHsKKyAgICBzd2l0Y2ggKHByb3BlcnRpZXMtPnR5cGUpIHsKKyAgICAgIGNhc2UgQlJMQVBJX1BBUkFNX1RZUEVfU1RSSU5HOiB7CisgICAgICAgIGpib29sZWFuIGlzQ29weTsKKyAgICAgICAgY29uc3QgY2hhciAqc3RyaW5nID0gKCplbnYpLT5HZXRTdHJpbmdVVEZDaGFycyhlbnYsIHZhbHVlLCAmaXNDb3B5KTsKKworICAgICAgICBpZiAoc3RyaW5nKSB7CisgICAgICAgICAgc2V0UGFyYW1ldGVyKAorICAgICAgICAgICAgZW52LCBoYW5kbGUsCisgICAgICAgICAgICBwYXJhbWV0ZXIsIHN1YnBhcmFtLCBmbGFncywKKyAgICAgICAgICAgIHN0cmluZywgc3RybGVuKHN0cmluZykKKyAgICAgICAgICApOworCisgICAgICAgICAgKCplbnYpLT5SZWxlYXNlU3RyaW5nVVRGQ2hhcnMoZW52LCB2YWx1ZSwgc3RyaW5nKTsKKyAgICAgICAgfQorCisgICAgICAgIGJyZWFrOworICAgICAgfQorCisgICAgICBjYXNlIEJSTEFQSV9QQVJBTV9UWVBFX0JPT0xFQU46IHsKKyAgICAgICAganNpemUgY291bnQgPSAoKmVudiktPkdldEFycmF5TGVuZ3RoKGVudiwgdmFsdWUpOworCisgICAgICAgIGlmICghamF2YUhhc0V4Y2VwdGlvbk9jY3VycmVkKGVudikpIHsKKyAgICAgICAgICBqYm9vbGVhbiB2YWx1ZXNbY291bnQgKyAxXTsKKyAgICAgICAgICAoKmVudiktPkdldEJvb2xlYW5BcnJheVJlZ2lvbihlbnYsIHZhbHVlLCAwLCBjb3VudCwgdmFsdWVzKTsKKworICAgICAgICAgIGlmICghamF2YUhhc0V4Y2VwdGlvbk9jY3VycmVkKGVudikpIHsKKyAgICAgICAgICAgIGJybGFwaV9wYXJhbV9ib29sX3QgYm9vbGVhbnNbY291bnQgKyAxXTsKKworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaT0wOyBpPGNvdW50OyBpKz0xKSB7CisgICAgICAgICAgICAgIGJvb2xlYW5zW2ldID0gdmFsdWVzW2ldICE9IEpOSV9GQUxTRTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgc2V0UGFyYW1ldGVyKAorICAgICAgICAgICAgICBlbnYsIGhhbmRsZSwKKyAgICAgICAgICAgICAgcGFyYW1ldGVyLCBzdWJwYXJhbSwgZmxhZ3MsCisgICAgICAgICAgICAgIGJvb2xlYW5zLCBjb3VudAorICAgICAgICAgICAgKTsKKyAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBicmVhazsKKyAgICAgIH0KKworICAgICAgY2FzZSBCUkxBUElfUEFSQU1fVFlQRV9VSU5UODogeworICAgICAgICBqc2l6ZSBjb3VudCA9ICgqZW52KS0+R2V0QXJyYXlMZW5ndGgoZW52LCB2YWx1ZSk7CisKKyAgICAgICAgaWYgKCFqYXZhSGFzRXhjZXB0aW9uT2NjdXJyZWQoZW52KSkgeworICAgICAgICAgIGpieXRlIHZhbHVlc1tjb3VudCArIDFdOworICAgICAgICAgICgqZW52KS0+R2V0Qnl0ZUFycmF5UmVnaW9uKGVudiwgdmFsdWUsIDAsIGNvdW50LCB2YWx1ZXMpOworCisgICAgICAgICAgaWYgKCFqYXZhSGFzRXhjZXB0aW9uT2NjdXJyZWQoZW52KSkgeworICAgICAgICAgICAgc2V0UGFyYW1ldGVyKAorICAgICAgICAgICAgICBlbnYsIGhhbmRsZSwKKyAgICAgICAgICAgICAgcGFyYW1ldGVyLCBzdWJwYXJhbSwgZmxhZ3MsCisgICAgICAgICAgICAgIHZhbHVlcywgY291bnQKKyAgICAgICAgICAgICk7CisgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgYnJlYWs7CisgICAgICB9CisKKyAgICAgIGNhc2UgQlJMQVBJX1BBUkFNX1RZUEVfVUlOVDE2OiB7CisgICAgICAgIGpzaXplIGNvdW50ID0gKCplbnYpLT5HZXRBcnJheUxlbmd0aChlbnYsIHZhbHVlKTsKKworICAgICAgICBpZiAoIWphdmFIYXNFeGNlcHRpb25PY2N1cnJlZChlbnYpKSB7CisgICAgICAgICAganNob3J0IHZhbHVlc1tjb3VudCArIDFdOworICAgICAgICAgICgqZW52KS0+R2V0U2hvcnRBcnJheVJlZ2lvbihlbnYsIHZhbHVlLCAwLCBjb3VudCwgdmFsdWVzKTsKKworICAgICAgICAgIGlmICghamF2YUhhc0V4Y2VwdGlvbk9jY3VycmVkKGVudikpIHsKKyAgICAgICAgICAgIHNldFBhcmFtZXRlcigKKyAgICAgICAgICAgICAgZW52LCBoYW5kbGUsCisgICAgICAgICAgICAgIHBhcmFtZXRlciwgc3VicGFyYW0sIGZsYWdzLAorICAgICAgICAgICAgICB2YWx1ZXMsIChjb3VudCAqIDIpCisgICAgICAgICAgICApOworICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGJyZWFrOworICAgICAgfQorCisgICAgICBjYXNlIEJSTEFQSV9QQVJBTV9UWVBFX1VJTlQzMjogeworICAgICAgICBqc2l6ZSBjb3VudCA9ICgqZW52KS0+R2V0QXJyYXlMZW5ndGgoZW52LCB2YWx1ZSk7CisKKyAgICAgICAgaWYgKCFqYXZhSGFzRXhjZXB0aW9uT2NjdXJyZWQoZW52KSkgeworICAgICAgICAgIGppbnQgdmFsdWVzW2NvdW50ICsgMV07CisgICAgICAgICAgKCplbnYpLT5HZXRJbnRBcnJheVJlZ2lvbihlbnYsIHZhbHVlLCAwLCBjb3VudCwgdmFsdWVzKTsKKworICAgICAgICAgIGlmICghamF2YUhhc0V4Y2VwdGlvbk9jY3VycmVkKGVudikpIHsKKyAgICAgICAgICAgIHNldFBhcmFtZXRlcigKKyAgICAgICAgICAgICAgZW52LCBoYW5kbGUsCisgICAgICAgICAgICAgIHBhcmFtZXRlciwgc3VicGFyYW0sIGZsYWdzLAorICAgICAgICAgICAgICB2YWx1ZXMsIChjb3VudCAqIDQpCisgICAgICAgICAgICApOworICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGJyZWFrOworICAgICAgfQorCisgICAgICBjYXNlIEJSTEFQSV9QQVJBTV9UWVBFX1VJTlQ2NDogeworICAgICAgICBqc2l6ZSBjb3VudCA9ICgqZW52KS0+R2V0QXJyYXlMZW5ndGgoZW52LCB2YWx1ZSk7CisKKyAgICAgICAgaWYgKCFqYXZhSGFzRXhjZXB0aW9uT2NjdXJyZWQoZW52KSkgeworICAgICAgICAgIGpsb25nIHZhbHVlc1tjb3VudCArIDFdOworICAgICAgICAgICgqZW52KS0+R2V0TG9uZ0FycmF5UmVnaW9uKGVudiwgdmFsdWUsIDAsIGNvdW50LCB2YWx1ZXMpOworCisgICAgICAgICAgaWYgKCFqYXZhSGFzRXhjZXB0aW9uT2NjdXJyZWQoZW52KSkgeworICAgICAgICAgICAgc2V0UGFyYW1ldGVyKAorICAgICAgICAgICAgICBlbnYsIGhhbmRsZSwKKyAgICAgICAgICAgICAgcGFyYW1ldGVyLCBzdWJwYXJhbSwgZmxhZ3MsCisgICAgICAgICAgICAgIHZhbHVlcywgKGNvdW50ICogOCkKKyAgICAgICAgICAgICk7CisgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgYnJlYWs7CisgICAgICB9CisgICAgfQorICB9Cit9CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgYnJsYXBpX2hhbmRsZV90ICpoYW5kbGU7CisgIGJybGFwaV9wYXJhbUNhbGxiYWNrRGVzY3JpcHRvcl90IGRlc2NyaXB0b3I7CisKKyAgc3RydWN0IHsKKyAgICBqb2JqZWN0IG9iamVjdDsKKyAgICBqY2xhc3MgY2xhc3M7CisgICAgam1ldGhvZElEIG1ldGhvZDsKKyAgfSB3YXRjaGVyOworfSBXYXRjaGVkUGFyYW1ldGVyRGF0YTsKKworc3RhdGljIHZvaWQKK2hhbmRsZVdhdGNoZWRQYXJhbWV0ZXIgKAorICBicmxhcGlfcGFyYW1fdCBwYXJhbWV0ZXIsCisgIGJybGFwaV9wYXJhbV9zdWJwYXJhbV90IHN1YnBhcmFtLAorICBicmxhcGlfcGFyYW1fZmxhZ3NfdCBmbGFncywKKyAgdm9pZCAqaWRlbnRpZmllciwgY29uc3Qgdm9pZCAqZGF0YSwgc2l6ZV90IGxlbmd0aAorKSB7CisgIFdhdGNoZWRQYXJhbWV0ZXJEYXRhICp3cGQgPSAoV2F0Y2hlZFBhcmFtZXRlckRhdGEgKilpZGVudGlmaWVyOworICBicmxhcGlfaGFuZGxlX3QgKmhhbmRsZSA9IHdwZC0+aGFuZGxlOworICBKTklFbnYgKmVudiA9IGdldEphdmFFbnZpcm9ubWVudChoYW5kbGUpOworICBpZiAoIWVudikgcmV0dXJuOworCisgIGpvYmplY3QgdmFsdWUgPSBuZXdQYXJhbWV0ZXJWYWx1ZU9iamVjdCgKKyAgICBlbnYsIGJybGFwaV9nZXRQYXJhbWV0ZXJQcm9wZXJ0aWVzKHBhcmFtZXRlciksCisgICAgZGF0YSwgbGVuZ3RoCisgICk7CisKKyAgaWYgKHZhbHVlKSB7CisgICAgKCplbnYpLT5DYWxsVm9pZE1ldGhvZCgKKyAgICAgIGVudiwgd3BkLT53YXRjaGVyLm9iamVjdCwgd3BkLT53YXRjaGVyLm1ldGhvZCwKKyAgICAgIHBhcmFtZXRlciwgc3VicGFyYW0sIHZhbHVlCisgICAgKTsKKyAgfQorfQorCitKQVZBX0lOU1RBTkNFX01FVEhPRCgKKyAgb3JnX2ExMXlfYnJsYXBpX0Nvbm5lY3Rpb25CYXNlLCB3YXRjaFBhcmFtZXRlciwgamxvbmcsCisgIGppbnQgcGFyYW1ldGVyLCBqbG9uZyBzdWJwYXJhbSwgamJvb2xlYW4gZ2xvYmFsLCBqb2JqZWN0IHdhdGNoZXIKKykgeworICBHRVRfQ09OTkVDVElPTl9IQU5ETEUoZW52LCB0aGlzLCAwKTsKKworICBjb25zdCBicmxhcGlfcGFyYW1fcHJvcGVydGllc190ICpwcm9wZXJ0aWVzOworICBicmxhcGlfcGFyYW1fZmxhZ3NfdCBmbGFnczsKKworICBpZiAoY2hlY2tQYXJhbWV0ZXIoZW52LCBwYXJhbWV0ZXIsIHN1YnBhcmFtLCBnbG9iYWwsICZwcm9wZXJ0aWVzLCAmZmxhZ3MpKSB7CisgICAgV2F0Y2hlZFBhcmFtZXRlckRhdGEgKndwZDsKKworICAgIGlmICgod3BkID0gbWFsbG9jKHNpemVvZigqd3BkKSkpKSB7CisgICAgICBtZW1zZXQod3BkLCAwLCBzaXplb2YoKndwZCkpOworICAgICAgd3BkLT5oYW5kbGUgPSBoYW5kbGU7CisKKyAgICAgIGlmICgod3BkLT53YXRjaGVyLm9iamVjdCA9ICgqZW52KS0+TmV3R2xvYmFsUmVmKGVudiwgd2F0Y2hlcikpKSB7CisgICAgICAgIHdwZC0+d2F0Y2hlci5jbGFzcyA9ICgqZW52KS0+RmluZENsYXNzKAorICAgICAgICAgIGVudiwgQlJMQVBJX09CSkVDVCgiUGFyYW1ldGVyV2F0Y2hlciIpCisgICAgICAgICk7CisKKyAgICAgICAgaWYgKHdwZC0+d2F0Y2hlci5jbGFzcykgeworICAgICAgICAgIHdwZC0+d2F0Y2hlci5tZXRob2QgPSAoKmVudiktPkdldE1ldGhvZElEKAorICAgICAgICAgICAgZW52LCB3cGQtPndhdGNoZXIuY2xhc3MsICJvblBhcmFtZXRlclVwZGF0ZWQiLAorICAgICAgICAgICAgSkFWQV9TSUdfTUVUSE9EKEpBVkFfU0lHX1ZPSUQsCisgICAgICAgICAgICAgIEpBVkFfU0lHX0lOVCAvLyBwYXJhbWV0ZXIKKyAgICAgICAgICAgICAgSkFWQV9TSUdfTE9ORyAvLyBzdWJwYXJhbQorICAgICAgICAgICAgICBKQVZBX1NJR19PQkpFQ1QoSkFWQV9PQkpfT0JKRUNUKSAvLyB2YWx1ZQorICAgICAgICAgICAgKQorICAgICAgICAgICk7CisKKyAgICAgICAgICBpZiAod3BkLT53YXRjaGVyLm1ldGhvZCkgeworICAgICAgICAgICAgd3BkLT5kZXNjcmlwdG9yID0gYnJsYXBpX193YXRjaFBhcmFtZXRlcigKKyAgICAgICAgICAgICAgaGFuZGxlLCBwYXJhbWV0ZXIsIHN1YnBhcmFtLCBmbGFncywKKyAgICAgICAgICAgICAgaGFuZGxlV2F0Y2hlZFBhcmFtZXRlciwgd3BkLCBOVUxMLCAwCisgICAgICAgICAgICApOworCisgICAgICAgICAgICBpZiAod3BkLT5kZXNjcmlwdG9yKSByZXR1cm4gKGludHB0cl90KXdwZDsKKyAgICAgICAgICAgIHRocm93QVBJRXJyb3IoZW52KTsKKyAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAoKmVudiktPkRlbGV0ZUdsb2JhbFJlZihlbnYsIHdwZC0+d2F0Y2hlci5vYmplY3QpOworICAgICAgfQorCisgICAgICBmcmVlKHdwZCk7CisgICAgfSBlbHNlIHsKKyAgICAgIHRocm93SmF2YUVycm9yKGVudiwgSkFWQV9PQkpfT1VUX09GX01FTU9SWV9FUlJPUiwgX19mdW5jX18pOworICAgIH0KKyAgfQorCisgIHJldHVybiAwOworfQorCitKQVZBX1NUQVRJQ19NRVRIT0QoCisgIG9yZ19hMTF5X2JybGFwaV9Db25uZWN0aW9uQmFzZSwgdW53YXRjaFBhcmFtZXRlciwgdm9pZCwKKyAgamxvbmcgaWRlbnRpZmllcgorKSB7CisgIFdhdGNoZWRQYXJhbWV0ZXJEYXRhICp3cGQgPSAoV2F0Y2hlZFBhcmFtZXRlckRhdGEgKikoaW50cHRyX3QpaWRlbnRpZmllcjsKKworICBpZiAoYnJsYXBpX191bndhdGNoUGFyYW1ldGVyKHdwZC0+aGFuZGxlLCB3cGQtPmRlc2NyaXB0b3IpIDwgMCkgeworICAgIHRocm93QVBJRXJyb3IoZW52KTsKKyAgfQorCisgICgqZW52KS0+RGVsZXRlR2xvYmFsUmVmKGVudiwgd3BkLT53YXRjaGVyLm9iamVjdCk7CisgIGZyZWUod3BkKTsKK30KKworSkFWQV9JTlNUQU5DRV9NRVRIT0QoCisgIG9yZ19hMTF5X2JybGFwaV9BUElFcnJvciwgdG9TdHJpbmcsIGpzdHJpbmcKKykgeworICBHRVRfQ0xBU1MoZW52LCBjbGFzcywgdGhpcywgTlVMTCk7CisgIGJybGFwaV9lcnJvcl90IGVycm9yOworICBtZW1zZXQoJmVycm9yLCAwLCBzaXplb2YoZXJyb3IpKTsKKworICB7CisgICAgRklORF9GSUVMRChlbnYsIGZpZWxkLCBjbGFzcywgImFwaUVycm9yIiwgSkFWQV9TSUdfSU5ULCBOVUxMKTsKKyAgICBlcnJvci5icmxlcnJubyA9IEpBVkFfR0VUX0ZJRUxEKGVudiwgSW50LCB0aGlzLCBmaWVsZCk7CisgIH0KKworICB7CisgICAgRklORF9GSUVMRChlbnYsIGZpZWxkLCBjbGFzcywgIm9zRXJyb3IiLCBKQVZBX1NJR19JTlQsIE5VTEwpOworICAgIGVycm9yLmxpYmNlcnJubyA9IEpBVkFfR0VUX0ZJRUxEKGVudiwgSW50LCB0aGlzLCBmaWVsZCk7CisgIH0KKworICB7CisgICAgRklORF9GSUVMRChlbnYsIGZpZWxkLCBjbGFzcywgImdhaUVycm9yIiwgSkFWQV9TSUdfSU5ULCBOVUxMKTsKKyAgICBlcnJvci5nYWllcnJubyA9IEpBVkFfR0VUX0ZJRUxEKGVudiwgSW50LCB0aGlzLCBmaWVsZCk7CisgIH0KKworICBqc3RyaW5nIGpGdW5jdGlvbjsKKyAgeworICAgIEZJTkRfRklFTEQoZW52LCBmaWVsZCwgY2xhc3MsICJmdW5jdGlvbk5hbWUiLCBKQVZBX1NJR19TVFJJTkcsIE5VTEwpOworCisgICAgaWYgKChqRnVuY3Rpb24gPSBKQVZBX0dFVF9GSUVMRChlbnYsIE9iamVjdCwgdGhpcywgZmllbGQpKSkgeworICAgICAgY29uc3QgY2hhciAqY0Z1bmN0aW9uID0gKCplbnYpLT5HZXRTdHJpbmdVVEZDaGFycyhlbnYsIGpGdW5jdGlvbiwgTlVMTCk7CisgICAgICBpZiAoIWNGdW5jdGlvbikgcmV0dXJuIE5VTEw7CisgICAgICBlcnJvci5lcnJmdW4gPSBjRnVuY3Rpb247CisgICAgfSBlbHNlIHsKKyAgICAgIGVycm9yLmVycmZ1biA9IE5VTEw7CisgICAgfQorICB9CisKKyAgc2l6ZV90IHNpemUgPSBicmxhcGlfc3RyZXJyb3JfcigmZXJyb3IsIE5VTEwsIDApOworICBjaGFyIGNNZXNzYWdlW3NpemUrMV07CisKKyAgYnJsYXBpX3N0cmVycm9yX3IoJmVycm9yLCBjTWVzc2FnZSwgc2l6ZW9mKGNNZXNzYWdlKSk7CisgIGlmIChqRnVuY3Rpb24pICgqZW52KS0+UmVsZWFzZVN0cmluZ1VURkNoYXJzKGVudiwgakZ1bmN0aW9uLCBlcnJvci5lcnJmdW4pOworCisgIHJldHVybiAoKmVudiktPk5ld1N0cmluZ1VURihlbnYsIGNNZXNzYWdlKTsKK30KKworSkFWQV9JTlNUQU5DRV9NRVRIT0QoCisgIG9yZ19hMTF5X2JybGFwaV9BUElFeGNlcHRpb24sIHRvU3RyaW5nLCBqc3RyaW5nCispIHsKKyAgR0VUX0NPTk5FQ1RJT05fSEFORExFKGVudiwgdGhpcywgTlVMTCk7CisgIEdFVF9DTEFTUyhlbnYsIGNsYXNzLCB0aGlzLCBOVUxMKTsKKworICBqaW50IGVycm9yOworICB7CisgICAgRklORF9GSUVMRChlbnYsIGZpZWxkLCBjbGFzcywgImVycm9yTnVtYmVyIiwgSkFWQV9TSUdfSU5ULCBOVUxMKTsKKyAgICBlcnJvciA9IEpBVkFfR0VUX0ZJRUxEKGVudiwgSW50LCB0aGlzLCBmaWVsZCk7CisgIH0KKworICBqaW50IHR5cGU7CisgIHsKKyAgICBGSU5EX0ZJRUxEKGVudiwgZmllbGQsIGNsYXNzLCAicGFja2V0VHlwZSIsIEpBVkFfU0lHX0lOVCwgTlVMTCk7CisgICAgdHlwZSA9IEpBVkFfR0VUX0ZJRUxEKGVudiwgSW50LCB0aGlzLCBmaWVsZCk7CisgIH0KKworICBqYnl0ZUFycmF5IGpQYWNrZXQ7CisgIHsKKyAgICBGSU5EX0ZJRUxEKGVudiwgZmllbGQsIGNsYXNzLCAiZmFpbGVkUGFja2V0IiwgSkFWQV9TSUdfQVJSQVkoSkFWQV9TSUdfQllURSksIE5VTEwpOworCisgICAgaWYgKCEoalBhY2tldCA9IEpBVkFfR0VUX0ZJRUxEKGVudiwgT2JqZWN0LCB0aGlzLCBmaWVsZCkpKSB7CisgICAgICB0aHJvd0phdmFFcnJvcihlbnYsIEpBVkFfT0JKX05VTExfUE9JTlRFUl9FWENFUFRJT04sIF9fZnVuY19fKTsKKyAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgfQorCisgIGppbnQgc2l6ZSA9ICgqZW52KS0+R2V0QXJyYXlMZW5ndGgoZW52LCBqUGFja2V0KTsKKyAgamJ5dGUgKmNQYWNrZXQgPSAoKmVudiktPkdldEJ5dGVBcnJheUVsZW1lbnRzKGVudiwgalBhY2tldCwgTlVMTCk7CisKKyAgaWYgKCFjUGFja2V0KSB7CisgICAgdGhyb3dKYXZhRXJyb3IoZW52LCBKQVZBX09CSl9PVVRfT0ZfTUVNT1JZX0VSUk9SLCBfX2Z1bmNfXyk7CisgICAgcmV0dXJuIE5VTEw7CisgIH0KKworICBjaGFyIGJ1ZmZlclswWDEwMF07CisgIGJybGFwaV9fc3RyZXhjZXB0aW9uKGhhbmRsZSwgYnVmZmVyLCBzaXplb2YoYnVmZmVyKSwgZXJyb3IsIHR5cGUsIGNQYWNrZXQsIHNpemUpOyAKKyAganN0cmluZyBtZXNzYWdlID0gKCplbnYpLT5OZXdTdHJpbmdVVEYoZW52LCBidWZmZXIpOworICAoKmVudiktPlJlbGVhc2VCeXRlQXJyYXlFbGVtZW50cyhlbnYsIGpQYWNrZXQsIGNQYWNrZXQsIEpOSV9BQk9SVCk7CisKKyAgcmV0dXJuIG1lc3NhZ2U7Cit9CisKK0pBVkFfU1RBVElDX01FVEhPRCgKKyAgb3JnX2ExMXlfYnJsYXBpX0FQSUV4Y2VwdGlvbiwgZ2V0UGFja2V0VHlwZU5hbWUsIGpzdHJpbmcsCisgIGppbnQgdHlwZQorKSB7CisgIGNvbnN0IGNoYXIgKm5hbWUgPSBicmxhcGlfZ2V0UGFja2V0VHlwZU5hbWUoKGJybGFwaV9wYWNrZXRUeXBlX3QpIHR5cGUpOworICBpZiAoIW5hbWUpIHJldHVybiBOVUxMOworICByZXR1cm4gKCplbnYpLT5OZXdTdHJpbmdVVEYoZW52LCBuYW1lKTsKK30KKworSkFWQV9JTlNUQU5DRV9NRVRIT0QoCisgIG9yZ19hMTF5X2JybGFwaV9Db21tYW5kS2V5Y29kZSwgZXhwYW5kS2V5Y29kZSwgdm9pZCwKKyAgamxvbmcgY29kZQorKSB7CisgIGJybGFwaV9leHBhbmRlZEtleUNvZGVfdCBla2M7CisgIEdFVF9DTEFTUyhlbnYsIGNsYXNzLCB0aGlzLCApOworCisgIGlmIChicmxhcGlfZXhwYW5kS2V5Q29kZSgoYnJsYXBpX2tleUNvZGVfdCljb2RlLCAmZWtjKSA8IDApIHsKKyAgICBtZW1zZXQoJmVrYywgMCwgc2l6ZW9mKGVrYykpOworICAgIGVrYy50eXBlID0gY29kZSAmIEJSTEFQSV9LRVlfVFlQRV9NQVNLOworICAgIGVrYy5jb21tYW5kID0gY29kZSAmIEJSTEFQSV9LRVlfQ09ERV9NQVNLOworICAgIGVrYy5mbGFncyA9IChjb2RlICYgQlJMQVBJX0tFWV9GTEFHU19NQVNLKSA+PiBCUkxBUElfS0VZX0ZMQUdTX1NISUZUOworICB9CisKKyAgeworICAgIEZJTkRfRklFTEQoZW52LCBmaWVsZCwgY2xhc3MsICJ0eXBlVmFsdWUiLCBKQVZBX1NJR19JTlQsICk7CisgICAgSkFWQV9TRVRfRklFTEQoZW52LCBJbnQsIHRoaXMsIGZpZWxkLCBla2MudHlwZSk7CisgIH0KKworICB7CisgICAgRklORF9GSUVMRChlbnYsIGZpZWxkLCBjbGFzcywgImNvbW1hbmRWYWx1ZSIsIEpBVkFfU0lHX0lOVCwgKTsKKyAgICBKQVZBX1NFVF9GSUVMRChlbnYsIEludCwgdGhpcywgZmllbGQsIGVrYy5jb21tYW5kKTsKKyAgfQorCisgIHsKKyAgICBGSU5EX0ZJRUxEKGVudiwgZmllbGQsIGNsYXNzLCAiYXJndW1lbnRWYWx1ZSIsIEpBVkFfU0lHX0lOVCwgKTsKKyAgICBKQVZBX1NFVF9GSUVMRChlbnYsIEludCwgdGhpcywgZmllbGQsIGVrYy5hcmd1bWVudCk7CisgIH0KKworICB7CisgICAgRklORF9GSUVMRChlbnYsIGZpZWxkLCBjbGFzcywgImZsYWdzVmFsdWUiLCBKQVZBX1NJR19JTlQsICk7CisgICAgSkFWQV9TRVRfRklFTEQoZW52LCBJbnQsIHRoaXMsIGZpZWxkLCBla2MuZmxhZ3MpOworICB9Cit9CisKK0pBVkFfSU5TVEFOQ0VfTUVUSE9EKAorICBvcmdfYTExeV9icmxhcGlfQ29tbWFuZEtleWNvZGUsIGRlc2NyaWJlS2V5Y29kZSwgdm9pZCwKKyAgamxvbmcgY29kZQorKSB7CisgIGJybGFwaV9kZXNjcmliZWRLZXlDb2RlX3QgZGtjOworICBHRVRfQ0xBU1MoZW52LCBjbGFzcywgdGhpcywgKTsKKworICBpZiAoYnJsYXBpX2Rlc2NyaWJlS2V5Q29kZSgoYnJsYXBpX2tleUNvZGVfdCljb2RlLCAmZGtjKSA8IDApIHsKKyAgICBtZW1zZXQoJmRrYywgMCwgc2l6ZW9mKGRrYykpOworICAgIGRrYy50eXBlID0gIlVOU1VQUE9SVEVEIjsKKyAgfQorCisgIHsKKyAgICBqc3RyaW5nIG5hbWUgPSAoKmVudiktPk5ld1N0cmluZ1VURihlbnYsIGRrYy50eXBlKTsKKyAgICBpZiAoIW5hbWUpIHJldHVybjsKKworICAgIEZJTkRfRklFTEQoZW52LCBmaWVsZCwgY2xhc3MsICJ0eXBlTmFtZSIsIEpBVkFfU0lHX1NUUklORywgKTsKKyAgICBKQVZBX1NFVF9GSUVMRChlbnYsIE9iamVjdCwgdGhpcywgZmllbGQsIG5hbWUpOworICB9CisKKyAgeworICAgIGpzdHJpbmcgbmFtZSA9ICgqZW52KS0+TmV3U3RyaW5nVVRGKGVudiwgZGtjLmNvbW1hbmQpOworICAgIGlmICghbmFtZSkgcmV0dXJuOworCisgICAgRklORF9GSUVMRChlbnYsIGZpZWxkLCBjbGFzcywgImNvbW1hbmROYW1lIiwgSkFWQV9TSUdfU1RSSU5HLCApOworICAgIEpBVkFfU0VUX0ZJRUxEKGVudiwgT2JqZWN0LCB0aGlzLCBmaWVsZCwgbmFtZSk7CisgIH0KKworICB7CisgICAgamNsYXNzIHN0cmluZ0NsYXNzID0gKCplbnYpLT5GaW5kQ2xhc3MoZW52LCBKQVZBX09CSl9TVFJJTkcpOworICAgIGlmICghc3RyaW5nQ2xhc3MpIHJldHVybjsKKworICAgIGpzaXplIGNvdW50ID0gZGtjLmZsYWdzOworICAgIGpvYmplY3RBcnJheSBuYW1lcyA9ICgqZW52KS0+TmV3T2JqZWN0QXJyYXkoZW52LCBjb3VudCwgc3RyaW5nQ2xhc3MsIE5VTEwpOworICAgIGlmICghbmFtZXMpIHJldHVybjsKKworICAgIGZvciAodW5zaWduZWQgaW50IGluZGV4PTA7IGluZGV4PGNvdW50OyBpbmRleCs9MSkgeworICAgICAganN0cmluZyBuYW1lID0gKCplbnYpLT5OZXdTdHJpbmdVVEYoZW52LCBka2MuZmxhZ1tpbmRleF0pOworICAgICAgaWYgKCFuYW1lKSByZXR1cm47CisKKyAgICAgICgqZW52KS0+U2V0T2JqZWN0QXJyYXlFbGVtZW50KGVudiwgbmFtZXMsIGluZGV4LCBuYW1lKTsKKyAgICAgIGlmICgoKmVudiktPkV4Y2VwdGlvbkNoZWNrKGVudikpIHJldHVybjsKKyAgICB9CisKKyAgICB7CisgICAgICBGSU5EX0ZJRUxEKGVudiwgZmllbGQsIGNsYXNzLCAiZmxhZ05hbWVzIiwgSkFWQV9TSUdfQVJSQVkoSkFWQV9TSUdfU1RSSU5HKSwgKTsKKyAgICAgIEpBVkFfU0VUX0ZJRUxEKGVudiwgT2JqZWN0LCB0aGlzLCBmaWVsZCwgbmFtZXMpOworICAgIH0KKyAgfQorfQorCitKQVZBX1NUQVRJQ19NRVRIT0QoCisgIG9yZ19hMTF5X2JybGFwaV9Ecml2ZXJLZXljb2RlLCBpc1ByZXNzLCBqYm9vbGVhbiwKKyAgamxvbmcgY29kZQorKSB7CisgIHJldHVybiAoY29kZSAmIEJSTEFQSV9EUlZfS0VZX1BSRVNTKT8gSk5JX1RSVUU6IEpOSV9GQUxTRTsKK30KKworSkFWQV9TVEFUSUNfTUVUSE9EKAorICBvcmdfYTExeV9icmxhcGlfRHJpdmVyS2V5Y29kZSwgZ2V0VmFsdWUsIGpsb25nLAorICBqbG9uZyBjb2RlCispIHsKKyAgcmV0dXJuIGNvZGUgJiBCUkxBUElfRFJWX0tFWV9WQUxVRV9NQVNLOworfQorCitKQVZBX1NUQVRJQ19NRVRIT0QoCisgIG9yZ19hMTF5X2JybGFwaV9Ecml2ZXJLZXljb2RlLCBnZXRHcm91cCwgamludCwKKyAgamxvbmcgY29kZQorKSB7CisgIHJldHVybiBCUkxBUElfRFJWX0tFWV9HUk9VUChjb2RlKTsKK30KKworSkFWQV9TVEFUSUNfTUVUSE9EKAorICBvcmdfYTExeV9icmxhcGlfRHJpdmVyS2V5Y29kZSwgZ2V0TnVtYmVyLCBqaW50LAorICBqbG9uZyBjb2RlCispIHsKKyAgcmV0dXJuIEJSTEFQSV9EUlZfS0VZX05VTUJFUihjb2RlKTsKK30KKworSkFWQV9TVEFUSUNfTUVUSE9EKAorICBvcmdfYTExeV9icmxhcGlfRHJpdmVyS2V5Y29kZSwgZ2V0TnVtYmVyQW55LCBqaW50CispIHsKKyAgcmV0dXJuIEJSTEFQSV9EUlZfS0VZX05VTUJFUl9BTlk7Cit9CmRpZmYgLS1naXQgYS9CaW5kaW5ncy9KYXZhL2JpbmRpbmdzLmggYi9CaW5kaW5ncy9KYXZhL2JpbmRpbmdzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODQ0ZTM2MQotLS0gL2Rldi9udWxsCisrKyBiL0JpbmRpbmdzL0phdmEvYmluZGluZ3MuaApAQCAtMCwwICsxLDQyIEBACisvKgorICogbGliYnJsYXBpIC0gQSBsaWJyYXJ5IHByb3ZpZGluZyBhY2Nlc3MgdG8gYnJhaWxsZSB0ZXJtaW5hbHMgZm9yIGFwcGxpY2F0aW9ucy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAyMyBieQorICogICBTYW11ZWwgVGhpYmF1bHQgPFNhbXVlbC5UaGliYXVsdEBlbnMtbHlvbi5vcmc+CisgKiAgIFPDqWJhc3RpZW4gSGluZGVyZXIgPFNlYmFzdGllbi5IaW5kZXJlckBlbnMtbHlvbi5vcmc+CisgKgorICogbGliYnJsYXBpIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKKyNpZm5kZWYgQlJMQVBJX0lOQ0xVREVEX0pBVkFfQklORElOR1MKKyNkZWZpbmUgQlJMQVBJX0lOQ0xVREVEX0pBVkFfQklORElOR1MKKworI2luY2x1ZGUgImNvbW1vbl9qYXZhLmgiCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYgLyogX19jcGx1c3BsdXMgKi8KKworI2RlZmluZSBKQVZBX0dFVF9DT05TVFJVQ1RPUihlbnYsY2xhc3MsYXJndW1lbnRzKSBcCisgICgoKihlbnYpKS0+R2V0TWV0aG9kSUQoKGVudiksIChjbGFzcyksIEpBVkFfQ09OU1RSVUNUT1JfTkFNRSwgSkFWQV9TSUdfQ09OU1RSVUNUT1IoYXJndW1lbnRzKSkpCisKKyNkZWZpbmUgSkFWQV9HRVRfRklFTEQoZW52LHR5cGUsb2JqZWN0LGZpZWxkKSBcCisgICgoKihlbnYpKS0+R2V0ICMjIHR5cGUgIyMgRmllbGQoKGVudiksIChvYmplY3QpLCAoZmllbGQpKSkKKworI2RlZmluZSBKQVZBX1NFVF9GSUVMRChlbnYsdHlwZSxvYmplY3QsZmllbGQsdmFsdWUpIFwKKyAgICgoKihlbnYpKS0+U2V0ICMjIHR5cGUgIyMgRmllbGQoKGVudiksIChvYmplY3QpLCAoZmllbGQpLCAodmFsdWUpKSkKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYgLyogX19jcGx1c3BsdXMgKi8KKworI2VuZGlmIC8qIEJSTEFQSV9JTkNMVURFRF9KQVZBX0JJTkRJTkdTICovCmRpZmYgLS1naXQgYS9CaW5kaW5ncy9KYXZhL2JpbmRpbmdzLm00IGIvQmluZGluZ3MvSmF2YS9iaW5kaW5ncy5tNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMDM2N2RhCi0tLSAvZGV2L251bGwKKysrIGIvQmluZGluZ3MvSmF2YS9iaW5kaW5ncy5tNApAQCAtMCwwICsxLDE3NyBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBsaWJicmxhcGkgLSBBIGxpYnJhcnkgcHJvdmlkaW5nIGFjY2VzcyB0byBicmFpbGxlIHRlcm1pbmFscyBmb3IgYXBwbGljYXRpb25zLgorIworIyBDb3B5cmlnaHQgKEMpIDIwMDYtMjAyMyBieQorIyAgIFNhbXVlbCBUaGliYXVsdCA8U2FtdWVsLlRoaWJhdWx0QGVucy1seW9uLm9yZz4KKyMgICBTw6liYXN0aWVuIEhpbmRlcmVyIDxTZWJhc3RpZW4uSGluZGVyZXJAZW5zLWx5b24ub3JnPgorIworIyBsaWJicmxhcGkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorIworIyBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisjIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyMgbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisjCisjIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK0FDX0RFRlVOKFtCUkxUVFlfSkFWQV9CSU5ESU5HU10sIFtkbmwKK0FDX1NVQlNUKFtKQVZBX09LXSwgW2ZhbHNlXSkKK0FDX1NVQlNUKFtKQVZBQ10sIFtKQVZBX0NPTVBJTEVSX05PVF9GT1VORF9CWV9DT05GSUdVUkVdKQorQUNfU1VCU1QoW0pBVkFET0NdLCBbSkFWQV9ET0NVTUVOVF9DT01NQU5EX05PVF9GT1VORF9CWV9DT05GSUdVUkVdKQorQUNfU1VCU1QoW0pBUl0sIFtKQVZBX0FSQ0hJVkVfQ09NTUFORF9OT1RfRk9VTkRfQllfQ09ORklHVVJFXSkKKworamF2YV9jb21waWxlcl9uYW1lPSJqYXZhYyIKK2phdmFfY29tcGlsZXJfcGF0aD0iIgorCitpZiB0ZXN0IC1uICIke0pBVkFfSE9NRX0iCit0aGVuCisgICBCUkxUVFlfQ0hFQ0tfSkFWQV9IT01FKFsiJHtKQVZBX0hPTUV9Il0pCitlbHNlCisgICBCUkxUVFlfQ0hFQ0tfSkFWQV9DT01QSUxFUihbJHtqYXZhX2NvbXBpbGVyX25hbWV9XSkKKyAgIEJSTFRUWV9DSEVDS19KQVZBX0hPTUUoWyIvdXNyL2phdmEiXSkKKyAgIEJSTFRUWV9DSEVDS19KQVZBX0hPTUUoWyIvdXNyL2xpYi9qdm0vZGVmYXVsdC1qYXZhIl0pCisgICBCUkxUVFlfQ0hFQ0tfSkFWQV9IT01FKFsiL3Vzci9saWIvanZtL2phdmEiXSkKKyAgIEJSTFRUWV9DSEVDS19KQVZBX0NPTVBJTEVSKFtnY2pdKQorZmkKKwordGVzdCAtbiAiJHtqYXZhX2NvbXBpbGVyX3BhdGh9IiAmJiB7CisgICBicmx0dHlfcGF0aD1gcmVhbHBhdGggLS0gIiR7amF2YV9jb21waWxlcl9wYXRofSJgICYmIGphdmFfY29tcGlsZXJfcGF0aD0iJHticmx0dHlfcGF0aH0iCisgICB0ZXN0ICIke2phdmFfY29tcGlsZXJfcGF0aCMjKi99IiA9ICJqYXZhdm0iICYmIGphdmFfY29tcGlsZXJfcGF0aD0iIgorfQorCitCUkxUVFlfQ0hFQ0tfSkFWQV9QQVRIKFtkbmwKKyAgIHRlc3QgLW4gIiR7SkFWQV9WRVJTSU9OfSIgfHwgZXhwb3J0IEpBVkFfVkVSU0lPTj0xMSsKKyAgIEFDX01TR19OT1RJQ0UoW0phdmEgdmVyc2lvbjogJHtKQVZBX1ZFUlNJT059XSkKKworICAgQUNfTVNHX0NIRUNLSU5HKFtKVk0gcGF0aF0pCisgICBCUkxUVFlfSkFWQV9RVUVSWShbYnJsdHR5X3BhdGhdLCBbanZtcGF0aF0pCisKKyAgIGlmIHRlc3QgLW4gIiR7YnJsdHR5X3BhdGh9IgorICAgdGhlbgorICAgICAgQUNfTVNHX1JFU1VMVChbJHticmx0dHlfcGF0aH1dKQorICAgICAgamF2YV9jb21waWxlcl9wYXRoPSIke2JybHR0eV9wYXRoJS8qfS8ke2phdmFfY29tcGlsZXJfbmFtZX0iCisgICBlbHNlCisgICAgICBBQ19NU0dfUkVTVUxUKFtub3QgZm91bmRdKQorICAgZmkKK10pCisKK2lmIHRlc3QgLW4gIiR7amF2YV9jb21waWxlcl9wYXRofSIKK3RoZW4KKyAgIEpBVkFfT0s9dHJ1ZQorICAgQUNfTVNHX05PVElDRShbSmF2YSBjb21waWxlcjogJHtqYXZhX2NvbXBpbGVyX3BhdGh9XSkKKworICAgamF2YV9jb21waWxlcl9uYW1lPSIke2phdmFfY29tcGlsZXJfcGF0aCMjKi99IgorICAgamF2YV9zb3VyY2VfZW5jb2Rpbmc9IlVURi04IgorCisgICBjYXNlICIke2phdmFfY29tcGlsZXJfbmFtZX0iCisgICBpbgorICAgICAgamF2YWMpIGphdmFfY29tcGlsZXJfb3B0aW9ucz0iLWVuY29kaW5nICR7amF2YV9zb3VyY2VfZW5jb2Rpbmd9Ijs7CisgICAgICBnY2opICAgamF2YV9jb21waWxlcl9vcHRpb25zPSItQyAtLWVuY29kaW5nPSR7amF2YV9zb3VyY2VfZW5jb2Rpbmd9Ijs7CisKKyAgICAgICopICAgICBqYXZhX2NvbXBpbGVyX29wdGlvbnM9IiIKKyAgICAgICAgICAgICBBQ19NU0dfV0FSTihbSmF2YSBjb21waWxlciBuYW1lIG5vdCBoYW5kbGVkOiAke2phdmFfY29tcGlsZXJfbmFtZX1dKQorICAgICAgICAgICAgIDs7CisgICBlc2FjCisKKyAgIEpBVkFDPSInJHtqYXZhX2NvbXBpbGVyX3BhdGh9JyAke2phdmFfY29tcGlsZXJfb3B0aW9uc30iCisgICBqYXZhX2NvbW1hbmRzX2RpcmVjdG9yeT1gQVNfRElSTkFNRSgiJHtqYXZhX2NvbXBpbGVyX3BhdGh9IilgCisgICBqYXZhX2hvbWVfZGlyZWN0b3J5PWBBU19ESVJOQU1FKCIke2phdmFfY29tbWFuZHNfZGlyZWN0b3J5fSIpYAorCisgICBCUkxUVFlfQ0hFQ0tfSkFWQV9DT01NQU5EKFtqYXZhX2RvY3VtZW50X2NvbW1hbmRdLCBbamF2YWRvYyBnamRvY10pCisgICB0ZXN0IC1uICIke2phdmFfZG9jdW1lbnRfY29tbWFuZH0iIHx8IGphdmFfZG9jdW1lbnRfY29tbWFuZD0iOiIKKyAgIEpBVkFET0M9Iicke2phdmFfZG9jdW1lbnRfY29tbWFuZH0nIC1lbmNvZGluZyAke2phdmFfc291cmNlX2VuY29kaW5nfSIKKworICAgQlJMVFRZX0NIRUNLX0pBVkFfQ09NTUFORChbamF2YV9hcmNoaXZlX2NvbW1hbmRdLCBbamFyIGdqYXJdKQorICAgSkFSPSInJHtqYXZhX2FyY2hpdmVfY29tbWFuZH0nIgorCisgICBCUkxUVFlfSkFWQV9ESVJFQ1RPUlkoW0pBUl0sIFsvdXNyL3NoYXJlL2phdmEgL21pbmd3XSkKKyAgIEJSTFRUWV9KQVZBX0RJUkVDVE9SWShbSk5JXSwgWy91c3IvbGliKi9qYXZhIC91c3IvbGliKi9qbmkgL3Vzci9saWIvKi9qbmkgL21pbmd3XSkKKworICAgSkFWQV9KTklfSU5DPSIke2phdmFfaG9tZV9kaXJlY3Rvcnl9L2luY2x1ZGUiCisgICBKQVZBX0pOSV9IRFI9ImpuaS5oIgorICAgSkFWQV9KTklfRkxBR1M9IiIKKyAgIEFDX0NIRUNLX0hFQURFUihbJHtKQVZBX0pOSV9IRFJ9XSwgW10sIFtBQ19DSEVDS19GSUxFKFsiJHtKQVZBX0pOSV9JTkN9LyR7SkFWQV9KTklfSERSfSJdLCBbSkFWQV9KTklfRkxBR1M9Ii1JJHtKQVZBX0pOSV9JTkN9Il0sIFtKQVZBX09LPWZhbHNlXSldKQorCisgICAiJHtKQVZBX09LfSIgJiYgeworICAgICAgc2V0IC0tICIke0pBVkFfSk5JX0lOQ30iLyovam5pX21kLmgKKworICAgICAgaWYgdGVzdCAkeyN9IC1lcSAxCisgICAgICB0aGVuCisgICAgICAgICBicmx0dHlfZGlyZWN0b3J5PWBBU19ESVJOQU1FKCIkezF9IilgCisgICAgICAgICBKQVZBX0pOSV9GTEFHUz0iJHtKQVZBX0pOSV9GTEFHU30gLUkke2JybHR0eV9kaXJlY3Rvcnl9IgorICAgICAgZWxpZiB0ZXN0ICR7I30gLWd0IDAKKyAgICAgIHRoZW4KKyAgICAgICAgIEFDX01TR19XQVJOKFttb3JlIHRoYW4gb25lIG1hY2hpbmUtZGVwZW5kZW50IEphdmEgaGVhZGVyIGZvdW5kOiAkeyp9XSkKKyAgICAgICAgIEpBVkFfT0s9ZmFsc2UKKyAgICAgIGZpCisgICB9CisKKyAgIEFDX1NVQlNUKFtKQVZBX0pOSV9IRFJdKQorICAgQUNfU1VCU1QoW0pBVkFfSk5JX0lOQ10sIFsiJyR7SkFWQV9KTklfSU5DfSciXSkKKyAgIEFDX1NVQlNUKFtKQVZBX0pOSV9GTEFHU10pCitlbHNlCisgICBBQ19NU0dfV0FSTihbSmF2YSBjb21waWxlciBub3QgZm91bmRdKQorZmkKK10pCisKK0FDX0RFRlVOKFtCUkxUVFlfQ0hFQ0tfSkFWQV9QQVRIXSwgW2RubAordGVzdCAtbiAiJHtqYXZhX2NvbXBpbGVyX3BhdGh9IiB8fCB7CisgICAkMQorfQorXSkKKworQUNfREVGVU4oW0JSTFRUWV9DSEVDS19KQVZBX0NPTVBJTEVSXSwgW2RubAorICAgQlJMVFRZX0NIRUNLX0pBVkFfUEFUSChbZG5sCisgICAgICBBQ19QQVRIX1BST0coW2phdmFfY29tcGlsZXJfcGF0aF0sIFskMV0sIFtdKQorICAgXSkKK10pCisKK0FDX0RFRlVOKFtCUkxUVFlfQ0hFQ0tfSkFWQV9IT01FXSwgW2RubAordGVzdCAtbiAiJHtqYXZhX2NvbXBpbGVyX3BhdGh9IiB8fCB7CisgICBBQ19NU0dfQ0hFQ0tJTkcoW2lmICQxIGlzIGEgSkRLXSkKKyAgIGJybHR0eV9wYXRoPSIkMS9iaW4vJHtqYXZhX2NvbXBpbGVyX25hbWV9IgorCisgICBpZiB0ZXN0IC1mICIke2JybHR0eV9wYXRofSIgLWEgLXggIiR7YnJsdHR5X3BhdGh9IgorICAgdGhlbgorICAgICAgamF2YV9jb21waWxlcl9wYXRoPSIke2JybHR0eV9wYXRofSIKKyAgICAgIEFDX01TR19SRVNVTFQoW3llc10pCisgICBlbHNlCisgICAgICBBQ19NU0dfUkVTVUxUKFtub10pCisgICBmaQorfQorXSkKKworQUNfREVGVU4oW0JSTFRUWV9DSEVDS19KQVZBX0NPTU1BTkRdLCBbZG5sCisgICBBQ19QQVRIX1BST0dTKFskMV0sIFskMl0sIFtdLCBbIiR7amF2YV9jb21tYW5kc19kaXJlY3Rvcnl9Il0pCitdKQorCitBQ19ERUZVTihbQlJMVFRZX0pBVkFfRElSRUNUT1JZXSwgW2RubAordGVzdCAtbiAiJHtKQVZBXyQxX0RJUn0iIHx8IHsKKyAgIGZvciBkaXJlY3RvcnkgaW4gJDIKKyAgIGRvCisgICAgICB0ZXN0IC1kICIke2RpcmVjdG9yeX0iICYmIHsKKwkgSkFWQV8kMV9ESVI9IiR7ZGlyZWN0b3J5fSIKKwkgYnJlYWsKKyAgICAgIH0KKyAgIGRvbmUKK30KKworaWYgdGVzdCAtbiAiJHtKQVZBXyQxX0RJUn0iCit0aGVuCisgICBKQVZBXyQxPSJ5ZXMiCisgICBBQ19NU0dfTk9USUNFKFtKYXZhXSBtNF90b2xvd2VyKFskMV0pIFtpbnN0YWxsYXRpb24gZGlyZWN0b3J5OiAke0pBVkFfJDFfRElSfV0pCitlbHNlCisgICBKQVZBXyQxPSJubyIKKyAgIEFDX01TR19XQVJOKFtubyBjb21tb25seSB1c2VkXSBtNF90b2xvd2VyKFskMV0pIFtpbnN0YWxsYXRpb24gZGlyZWN0b3J5XSkKK2ZpCisKK0FDX1NVQlNUKFtKQVZBXyQxXSkKK0FDX1NVQlNUKFtKQVZBXyQxX0RJUl0pCitdKQorCitBQ19ERUZVTihbQlJMVFRZX0pBVkFfUVVFUlldLCBbZG5sCisgICAkMT1gIiR7c3JjZGlyfS9Ub29scy9qYXZhY21kIiAkMmAKK10pCmRpZmYgLS1naXQgYS9CaW5kaW5ncy9KYXZhL2NsaWVudHMvQXBpRXJyb3JDbGllbnQuamF2YSBiL0JpbmRpbmdzL0phdmEvY2xpZW50cy9BcGlFcnJvckNsaWVudC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFjNTA2NjAKLS0tIC9kZXYvbnVsbAorKysgYi9CaW5kaW5ncy9KYXZhL2NsaWVudHMvQXBpRXJyb3JDbGllbnQuamF2YQpAQCAtMCwwICsxLDQ1IEBACisvKgorICogbGliYnJsYXBpIC0gQSBsaWJyYXJ5IHByb3ZpZGluZyBhY2Nlc3MgdG8gYnJhaWxsZSB0ZXJtaW5hbHMgZm9yIGFwcGxpY2F0aW9ucy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAyMyBieQorICogICBTYW11ZWwgVGhpYmF1bHQgPFNhbXVlbC5UaGliYXVsdEBlbnMtbHlvbi5vcmc+CisgKiAgIFPDqWJhc3RpZW4gSGluZGVyZXIgPFNlYmFzdGllbi5IaW5kZXJlckBlbnMtbHlvbi5vcmc+CisgKgorICogbGliYnJsYXBpIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKK3BhY2thZ2Ugb3JnLmExMXkuYnJsYXBpLmNsaWVudHM7CisKK2ltcG9ydCBvcmcuYTExeS5icmxhcGkuKjsKKworcHVibGljIGNsYXNzIEFwaUVycm9yQ2xpZW50IGV4dGVuZHMgQ2xpZW50IHsKKyAgcHVibGljIEFwaUVycm9yQ2xpZW50IChTdHJpbmcuLi4gYXJndW1lbnRzKSB7CisgICAgc3VwZXIoYXJndW1lbnRzKTsKKyAgfQorCisgIEBPdmVycmlkZQorICBwcm90ZWN0ZWQgZmluYWwgdm9pZCBydW5DbGllbnQgKENvbm5lY3Rpb24gY29ubmVjdGlvbikgeworICAgIFN0cmluZyByZXN1bHQgPSBudWxsOworCisgICAgdHJ5IHsKKyAgICAgIGNvbm5lY3Rpb24uc2V0UGFyYW1ldGVyKAorICAgICAgICBDb25zdGFudHMuUEFSQU1fU0VSVkVSX1ZFUlNJT04sIDAsIHRydWUsIG5ldyBpbnRbXSB7MH0KKyAgICAgICk7CisKKyAgICAgIHJlc3VsdCA9ICJub3QgdGhyb3duIjsKKyAgICB9IGNhdGNoIChBUElFcnJvciBlcnJvcikgeworICAgICAgcmVzdWx0ID0gInRlc3Qgc3VjY2VlZGVkIjsKKyAgICB9CisKKyAgICBwcmludGYoIkFQSSBFcnJvcjogJXNcbiIsIHJlc3VsdCk7CisgIH0KK30KZGlmZiAtLWdpdCBhL0JpbmRpbmdzL0phdmEvY2xpZW50cy9BcGlFeGNlcHRpb25DbGllbnQuamF2YSBiL0JpbmRpbmdzL0phdmEvY2xpZW50cy9BcGlFeGNlcHRpb25DbGllbnQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMTc0MTAyCi0tLSAvZGV2L251bGwKKysrIGIvQmluZGluZ3MvSmF2YS9jbGllbnRzL0FwaUV4Y2VwdGlvbkNsaWVudC5qYXZhCkBAIC0wLDAgKzEsNTcgQEAKKy8qCisgKiBsaWJicmxhcGkgLSBBIGxpYnJhcnkgcHJvdmlkaW5nIGFjY2VzcyB0byBicmFpbGxlIHRlcm1pbmFscyBmb3IgYXBwbGljYXRpb25zLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNi0yMDIzIGJ5CisgKiAgIFNhbXVlbCBUaGliYXVsdCA8U2FtdWVsLlRoaWJhdWx0QGVucy1seW9uLm9yZz4KKyAqICAgU8OpYmFzdGllbiBIaW5kZXJlciA8U2ViYXN0aWVuLkhpbmRlcmVyQGVucy1seW9uLm9yZz4KKyAqCisgKiBsaWJicmxhcGkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorICoKKyAqIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyAqCisgKiBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisgKi8KKworcGFja2FnZSBvcmcuYTExeS5icmxhcGkuY2xpZW50czsKKworaW1wb3J0IG9yZy5hMTF5LmJybGFwaS4qOworCitwdWJsaWMgY2xhc3MgQXBpRXhjZXB0aW9uQ2xpZW50IGV4dGVuZHMgUGF1c2VDbGllbnQgeworICBwdWJsaWMgQXBpRXhjZXB0aW9uQ2xpZW50IChTdHJpbmcuLi4gYXJndW1lbnRzKSB7CisgICAgc3VwZXIoYXJndW1lbnRzKTsKKyAgfQorCisgIEBPdmVycmlkZQorICBwcm90ZWN0ZWQgZmluYWwgdm9pZCBydW5DbGllbnQgKENvbm5lY3Rpb24gY29ubmVjdGlvbikKKyAgICAgICAgICAgIHRocm93cyBQcm9ncmFtRXhjZXB0aW9uCisgIHsKKyAgICB0dHlNb2RlKAorICAgICAgY29ubmVjdGlvbiwgZmFsc2UsCisgICAgICAoY29uKSAtPiB7CisgICAgICAgIFdyaXRlQXJndW1lbnRzIGFyZ3VtZW50cyA9IG5ldyBXcml0ZUFyZ3VtZW50cygpCisgICAgICAgICAgLnNldFJlZ2lvbigxLCAoY29uLmdldENlbGxDb3VudCgpICsgMSkpCisgICAgICAgICAgLnNldFRleHQoIlRoaXMgc2hvdWxkIGZhaWwgYmVjYXVzZSB0aGUgcmVnaW9uIHNpemUgaXMgdG9vIGJpZy4iKTsKKworICAgICAgICBjb24ud3JpdGUoYXJndW1lbnRzKTsKKyAgICAgICAgU3RyaW5nIHJlc3VsdCA9IG51bGw7CisKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICBpZiAocGF1c2UoY29uKSkgeworICAgICAgICAgICAgcmVzdWx0ID0gIndhaXQgdGltZWQgb3V0IjsKKyAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgcmVzdWx0ID0gIndhaXQgd2FzIGludGVycnVwdGVkIjsKKyAgICAgICAgICB9CisgICAgICAgIH0gY2F0Y2ggKEFQSUV4Y2VwdGlvbiBleGNlcHRpb24pIHsKKyAgICAgICAgICByZXN1bHQgPSAidGVzdCBzdWNjZWVkZWQiOworICAgICAgICB9CisKKyAgICAgICAgcHJpbnRmKCJBUEkgRXhjZXB0aW9uOiAlc1xuIiwgcmVzdWx0KTsKKyAgICAgIH0KKyAgICApOworICB9Cit9CmRpZmYgLS1naXQgYS9CaW5kaW5ncy9KYXZhL2NsaWVudHMvQm91bmRDb21tYW5kc0NsaWVudC5qYXZhIGIvQmluZGluZ3MvSmF2YS9jbGllbnRzL0JvdW5kQ29tbWFuZHNDbGllbnQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YzA5ZmUzCi0tLSAvZGV2L251bGwKKysrIGIvQmluZGluZ3MvSmF2YS9jbGllbnRzL0JvdW5kQ29tbWFuZHNDbGllbnQuamF2YQpAQCAtMCwwICsxLDQxIEBACisvKgorICogbGliYnJsYXBpIC0gQSBsaWJyYXJ5IHByb3ZpZGluZyBhY2Nlc3MgdG8gYnJhaWxsZSB0ZXJtaW5hbHMgZm9yIGFwcGxpY2F0aW9ucy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAyMyBieQorICogICBTYW11ZWwgVGhpYmF1bHQgPFNhbXVlbC5UaGliYXVsdEBlbnMtbHlvbi5vcmc+CisgKiAgIFPDqWJhc3RpZW4gSGluZGVyZXIgPFNlYmFzdGllbi5IaW5kZXJlckBlbnMtbHlvbi5vcmc+CisgKgorICogbGliYnJsYXBpIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKK3BhY2thZ2Ugb3JnLmExMXkuYnJsYXBpLmNsaWVudHM7CisKK2ltcG9ydCBvcmcuYTExeS5icmxhcGkuKjsKKworcHVibGljIGNsYXNzIEJvdW5kQ29tbWFuZHNDbGllbnQgZXh0ZW5kcyBDbGllbnQgeworICBwdWJsaWMgQm91bmRDb21tYW5kc0NsaWVudCAoU3RyaW5nLi4uIGFyZ3VtZW50cykgeworICAgIHN1cGVyKGFyZ3VtZW50cyk7CisgIH0KKworICBAT3ZlcnJpZGUKKyAgcHJvdGVjdGVkIGZpbmFsIHZvaWQgcnVuQ2xpZW50IChDb25uZWN0aW9uIGNvbm5lY3Rpb24pIHsKKyAgICBQYXJhbWV0ZXJzIHBhcmFtZXRlcnMgPSBjb25uZWN0aW9uLmdldFBhcmFtZXRlcnMoKTsKKworICAgIGZvciAobG9uZyBjb2RlIDogcGFyYW1ldGVycy5ib3VuZENvbW1hbmRLZXljb2Rlcy5nZXQoKSkgeworICAgICAgcHJpbnRmKAorICAgICAgICAiJXM6ICVzXG4iLAorICAgICAgICBwYXJhbWV0ZXJzLmNvbW1hbmRLZXljb2RlTmFtZS5nZXQoY29kZSksCisgICAgICAgIHBhcmFtZXRlcnMuY29tbWFuZEtleWNvZGVTdW1tYXJ5LmdldChjb2RlKQorICAgICAgKTsKKyAgICB9CisgIH0KK30KZGlmZiAtLWdpdCBhL0JpbmRpbmdzL0phdmEvY2xpZW50cy9Db21wdXRlckJyYWlsbGVDbGllbnQuamF2YSBiL0JpbmRpbmdzL0phdmEvY2xpZW50cy9Db21wdXRlckJyYWlsbGVDbGllbnQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNmQ0ZGQ4Ci0tLSAvZGV2L251bGwKKysrIGIvQmluZGluZ3MvSmF2YS9jbGllbnRzL0NvbXB1dGVyQnJhaWxsZUNsaWVudC5qYXZhCkBAIC0wLDAgKzEsNDEgQEAKKy8qCisgKiBsaWJicmxhcGkgLSBBIGxpYnJhcnkgcHJvdmlkaW5nIGFjY2VzcyB0byBicmFpbGxlIHRlcm1pbmFscyBmb3IgYXBwbGljYXRpb25zLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNi0yMDIzIGJ5CisgKiAgIFNhbXVlbCBUaGliYXVsdCA8U2FtdWVsLlRoaWJhdWx0QGVucy1seW9uLm9yZz4KKyAqICAgU8OpYmFzdGllbiBIaW5kZXJlciA8U2ViYXN0aWVuLkhpbmRlcmVyQGVucy1seW9uLm9yZz4KKyAqCisgKiBsaWJicmxhcGkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorICoKKyAqIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyAqCisgKiBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisgKi8KKworcGFja2FnZSBvcmcuYTExeS5icmxhcGkuY2xpZW50czsKKworaW1wb3J0IG9yZy5hMTF5LmJybGFwaS4qOworCitwdWJsaWMgY2xhc3MgQ29tcHV0ZXJCcmFpbGxlQ2xpZW50IGV4dGVuZHMgQ2xpZW50IHsKKyAgcHVibGljIENvbXB1dGVyQnJhaWxsZUNsaWVudCAoU3RyaW5nLi4uIGFyZ3VtZW50cykgeworICAgIHN1cGVyKGFyZ3VtZW50cyk7CisgIH0KKworICBAT3ZlcnJpZGUKKyAgcHJvdGVjdGVkIGZpbmFsIHZvaWQgcnVuQ2xpZW50IChDb25uZWN0aW9uIGNvbm5lY3Rpb24pIHsKKyAgICBQYXJhbWV0ZXJzIHBhcmFtZXRlcnMgPSBjb25uZWN0aW9uLmdldFBhcmFtZXRlcnMoKTsKKworICAgIGZvciAoaW50IHJvdyA6IHBhcmFtZXRlcnMuY29tcHV0ZXJCcmFpbGxlUm93c01hc2suZ2V0KCkuZ2V0Qml0TnVtYmVycygpKSB7CisgICAgICBwcmludGYoCisgICAgICAgICJVKyUwNFg6ICVzXG4iLAorICAgICAgICAocm93IDw8IDgpLAorICAgICAgICBwYXJhbWV0ZXJzLmNvbXB1dGVyQnJhaWxsZVJvd0NlbGxzLmdldChyb3cpLnRvU3RyaW5nKCkKKyAgICAgICk7CisgICAgfQorICB9Cit9CmRpZmYgLS1naXQgYS9CaW5kaW5ncy9KYXZhL2NsaWVudHMvRHJpdmVyS2V5c0NsaWVudC5qYXZhIGIvQmluZGluZ3MvSmF2YS9jbGllbnRzL0RyaXZlcktleXNDbGllbnQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lM2NhNmFhCi0tLSAvZGV2L251bGwKKysrIGIvQmluZGluZ3MvSmF2YS9jbGllbnRzL0RyaXZlcktleXNDbGllbnQuamF2YQpAQCAtMCwwICsxLDM5IEBACisvKgorICogbGliYnJsYXBpIC0gQSBsaWJyYXJ5IHByb3ZpZGluZyBhY2Nlc3MgdG8gYnJhaWxsZSB0ZXJtaW5hbHMgZm9yIGFwcGxpY2F0aW9ucy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAyMyBieQorICogICBTYW11ZWwgVGhpYmF1bHQgPFNhbXVlbC5UaGliYXVsdEBlbnMtbHlvbi5vcmc+CisgKiAgIFPDqWJhc3RpZW4gSGluZGVyZXIgPFNlYmFzdGllbi5IaW5kZXJlckBlbnMtbHlvbi5vcmc+CisgKgorICogbGliYnJsYXBpIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKK3BhY2thZ2Ugb3JnLmExMXkuYnJsYXBpLmNsaWVudHM7CisKK2ltcG9ydCBvcmcuYTExeS5icmxhcGkuKjsKKworcHVibGljIGNsYXNzIERyaXZlcktleXNDbGllbnQgZXh0ZW5kcyBDbGllbnQgeworICBwdWJsaWMgRHJpdmVyS2V5c0NsaWVudCAoU3RyaW5nLi4uIGFyZ3VtZW50cykgeworICAgIHN1cGVyKGFyZ3VtZW50cyk7CisgIH0KKworICBAT3ZlcnJpZGUKKyAgcHJvdGVjdGVkIGZpbmFsIHZvaWQgcnVuQ2xpZW50IChDb25uZWN0aW9uIGNvbm5lY3Rpb24pIHsKKyAgICBQYXJhbWV0ZXJzIHBhcmFtZXRlcnMgPSBjb25uZWN0aW9uLmdldFBhcmFtZXRlcnMoKTsKKworICAgIGZvciAobG9uZyBjb2RlIDogcGFyYW1ldGVycy5kZWZpbmVkRHJpdmVyS2V5Y29kZXMuZ2V0KCkpIHsKKyAgICAgIHByaW50ZigKKyAgICAgICAgIiVzXG4iLCBwYXJhbWV0ZXJzLmRyaXZlcktleWNvZGVOYW1lLmdldChjb2RlKQorICAgICAgKTsKKyAgICB9CisgIH0KK30KZGlmZiAtLWdpdCBhL0JpbmRpbmdzL0phdmEvY2xpZW50cy9FY2hvQ2xpZW50LmphdmEgYi9CaW5kaW5ncy9KYXZhL2NsaWVudHMvRWNob0NsaWVudC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFjNDg2ODcKLS0tIC9kZXYvbnVsbAorKysgYi9CaW5kaW5ncy9KYXZhL2NsaWVudHMvRWNob0NsaWVudC5qYXZhCkBAIC0wLDAgKzEsMjM4IEBACisvKgorICogbGliYnJsYXBpIC0gQSBsaWJyYXJ5IHByb3ZpZGluZyBhY2Nlc3MgdG8gYnJhaWxsZSB0ZXJtaW5hbHMgZm9yIGFwcGxpY2F0aW9ucy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAyMyBieQorICogICBTYW11ZWwgVGhpYmF1bHQgPFNhbXVlbC5UaGliYXVsdEBlbnMtbHlvbi5vcmc+CisgKiAgIFPDqWJhc3RpZW4gSGluZGVyZXIgPFNlYmFzdGllbi5IaW5kZXJlckBlbnMtbHlvbi5vcmc+CisgKgorICogbGliYnJsYXBpIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKK3BhY2thZ2Ugb3JnLmExMXkuYnJsYXBpLmNsaWVudHM7CisKK2ltcG9ydCBqYXZhLmlvLkludGVycnVwdGVkSU9FeGNlcHRpb247CitpbXBvcnQgamF2YS51dGlsLmNvbmN1cnJlbnQuVGltZW91dEV4Y2VwdGlvbjsKK2ltcG9ydCBvcmcuYTExeS5icmxhcGkuKjsKKworcHVibGljIGNsYXNzIEVjaG9DbGllbnQgZXh0ZW5kcyBDbGllbnQgeworICBwcml2YXRlIGJvb2xlYW4gZWNob0RyaXZlcktleXMgPSBmYWxzZTsKKyAgcHJpdmF0ZSBib29sZWFuIGVjaG9OYW1lcyA9IGZhbHNlOworCisgIHB1YmxpYyBmaW5hbCBzdGF0aWMgaW50IE1JTklNVU1fUkVBRF9DT1VOVCA9ICAxOworICBwdWJsaWMgZmluYWwgc3RhdGljIGludCBERUZBVUxUX1JFQURfQ09VTlQgPSAxMDsKKworICBwdWJsaWMgZmluYWwgc3RhdGljIFN0cmluZyBOT19USU1FT1VUID0gIm5vbmUiOworICBwdWJsaWMgZmluYWwgc3RhdGljIGludCBGT1JFVkVSX1JFQURfVElNRU9VVCA9ICAwOworICBwdWJsaWMgZmluYWwgc3RhdGljIGludCBNSU5JTVVNX1JFQURfVElNRU9VVCA9ICAxOworICBwdWJsaWMgZmluYWwgc3RhdGljIGludCBERUZBVUxUX1JFQURfVElNRU9VVCA9IDEwOworCisgIHByaXZhdGUgaW50IHJlYWRDb3VudCA9IERFRkFVTFRfUkVBRF9DT1VOVDsKKyAgcHJpdmF0ZSBmaW5hbCBPcGVyYW5kVXNhZ2UgcmVhZENvdW50VXNhZ2UgPSBuZXcgT3BlcmFuZFVzYWdlKCJyZWFkIGNvdW50IikKKyAgICAuc2V0RGVmYXVsdChyZWFkQ291bnQpCisgICAgLnNldFJhbmdlTWluaW11bShNSU5JTVVNX1JFQURfQ09VTlQpCisgICAgOworCisgIHByaXZhdGUgaW50IHJlYWRUaW1lb3V0ID0gREVGQVVMVF9SRUFEX1RJTUVPVVQ7CisgIHByaXZhdGUgZmluYWwgT3BlcmFuZFVzYWdlIHJlYWRUaW1lb3V0VXNhZ2UgPSBuZXcgT3BlcmFuZFVzYWdlKCJyZWFkIHRpbWVvdXQiKQorICAgIC5zZXREZWZhdWx0KHJlYWRUaW1lb3V0KQorICAgIC5zZXRSYW5nZU1pbmltdW0oTUlOSU1VTV9SRUFEX1RJTUVPVVQpCisgICAgLnNldFJhbmdlVW5pdHMoInNlY29uZHMiKQorICAgIC5zZXRSYW5nZUNvbW1lbnQoInJlYWRLZXlXaXRoVGltZW91dCBpcyB1c2VkIikKKyAgICAuYWRkV29yZChOT19USU1FT1VULCBGT1JFVkVSX1JFQURfVElNRU9VVCwgInJlYWRLZXkgaXMgdXNlZCIpCisgICAgOworCisgIHB1YmxpYyBFY2hvQ2xpZW50IChTdHJpbmcuLi4gYXJndW1lbnRzKSB7CisgICAgc3VwZXIoYXJndW1lbnRzKTsKKyAgICBhZGRSZXBlYXRpbmdQYXJhbWV0ZXIoInR0eSIpOworCisgICAgYWRkT3B0aW9uKCJjb21tYW5kcyIsCisgICAgICAob3BlcmFuZHMpIC0+IHsKKyAgICAgICAgZWNob0RyaXZlcktleXMgPSBmYWxzZTsKKyAgICAgIH0KKyAgICApOworCisgICAgYWRkT3B0aW9uKCJrZXlzIiwKKyAgICAgIChvcGVyYW5kcykgLT4geworICAgICAgICBlY2hvRHJpdmVyS2V5cyA9IHRydWU7CisgICAgICB9CisgICAgKTsKKworICAgIGFkZE9wdGlvbigidmFsdWVzIiwKKyAgICAgIChvcGVyYW5kcykgLT4geworICAgICAgICBlY2hvTmFtZXMgPSBmYWxzZTsKKyAgICAgIH0KKyAgICApOworCisgICAgYWRkT3B0aW9uKCJuYW1lcyIsCisgICAgICAob3BlcmFuZHMpIC0+IHsKKyAgICAgICAgZWNob05hbWVzID0gdHJ1ZTsKKyAgICAgIH0KKyAgICApOworCisgICAgYWRkT3B0aW9uKCJyZWFkcyIsCisgICAgICAob3BlcmFuZHMpIC0+IHsKKyAgICAgICAgcmVhZENvdW50ID0gUGFyc2UuYXNJbnQoCisgICAgICAgICAgcmVhZENvdW50VXNhZ2UuZ2V0T3BlcmFuZERlc2NyaXB0aW9uKCksCisgICAgICAgICAgb3BlcmFuZHNbMF0sIE1JTklNVU1fUkVBRF9DT1VOVAorICAgICAgICApOworICAgICAgfSwKKyAgICAgICJjb3VudCIKKyAgICApOworCisgICAgYWRkT3B0aW9uKCJ0aW1lb3V0IiwKKyAgICAgIChvcGVyYW5kcykgLT4geworICAgICAgICBTdHJpbmcgb3BlcmFuZCA9IG9wZXJhbmRzWzBdOworCisgICAgICAgIGlmIChTdHJpbmdzLmlzQWJicmV2aWF0aW9uKE5PX1RJTUVPVVQsIG9wZXJhbmQpKSB7CisgICAgICAgICAgcmVhZFRpbWVvdXQgPSBGT1JFVkVSX1JFQURfVElNRU9VVDsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICByZWFkVGltZW91dCA9IFBhcnNlLmFzSW50KAorICAgICAgICAgICAgcmVhZFRpbWVvdXRVc2FnZS5nZXRPcGVyYW5kRGVzY3JpcHRpb24oKSwKKyAgICAgICAgICAgIG9wZXJhbmQsIE1JTklNVU1fUkVBRF9USU1FT1VUCisgICAgICAgICAgKTsKKyAgICAgICAgfQorICAgICAgfSwKKyAgICAgICJzZWNvbmRzIgorICAgICk7CisgIH0KKworICBAT3ZlcnJpZGUKKyAgcHJvdGVjdGVkIGZpbmFsIHZvaWQgZXh0ZW5kVXNhZ2VTdW1tYXJ5IChTdHJpbmdCdWlsZGVyIHVzYWdlKSB7CisgICAgc3VwZXIuZXh0ZW5kVXNhZ2VTdW1tYXJ5KHVzYWdlKTsKKworICAgIHJlYWRDb3VudFVzYWdlLmFwcGVuZFRvKHVzYWdlKTsKKyAgICByZWFkVGltZW91dFVzYWdlLmFwcGVuZFRvKHVzYWdlKTsKKyAgfQorCisgIHByaXZhdGUgaW50W10gdHR5UGF0aCA9IG51bGw7CisKKyAgQE92ZXJyaWRlCisgIHByb3RlY3RlZCB2b2lkIHByb2Nlc3NQYXJhbWV0ZXJzIChTdHJpbmdbXSBwYXJhbWV0ZXJzKQorICAgICAgICAgICAgdGhyb3dzIFN5bnRheEV4Y2VwdGlvbgorICB7CisgICAgaW50IGNvdW50ID0gcGFyYW1ldGVycy5sZW5ndGg7CisgICAgdHR5UGF0aCA9IG5ldyBpbnRbY291bnRdOworCisgICAgZm9yIChpbnQgaT0wOyBpPGNvdW50OyBpKz0xKSB7CisgICAgICB0dHlQYXRoW2ldID0gUGFyc2UuYXNJbnQoInR0eSBwYXRoIGNvbXBvbmVudCIsIHBhcmFtZXRlcnNbaV0pOworICAgIH0KKyAgfQorCisgIHByaXZhdGUgZmluYWwgdm9pZCBzaG93IChDb25uZWN0aW9uIGNvbm5lY3Rpb24sIFN0cmluZyB0ZXh0KSB7CisgICAgcHJpbnRmKCIlc1xuIiwgdGV4dCk7CisgICAgY29ubmVjdGlvbi53cml0ZSh0ZXh0LCBDb25zdGFudHMuQ1VSU09SX09GRik7CisgIH0KKworICBwcml2YXRlIGZpbmFsIFN0cmluZyB0b1N0cmluZyAoQ29ubmVjdGlvbiBjb25uZWN0aW9uLCBsb25nIGNvZGUpIHsKKyAgICBpZiAoZWNob0RyaXZlcktleXMpIHsKKyAgICAgIERyaXZlcktleWNvZGUga2V5Y29kZSA9IG5ldyBEcml2ZXJLZXljb2RlKGNvZGUpOworICAgICAgU3RyaW5nIHN0cmluZyA9IGtleWNvZGUudG9TdHJpbmcoKTsKKworICAgICAgaWYgKGVjaG9OYW1lcykgeworICAgICAgICBTdHJpbmcgbmFtZSA9IGNvbm5lY3Rpb24uZ2V0UGFyYW1ldGVycygpLmRyaXZlcktleWNvZGVOYW1lLmdldChrZXljb2RlLmdldFZhbHVlKCkpOworCisgICAgICAgIGlmICgobmFtZSAhPSBudWxsKSAmJiAhbmFtZS5pc0VtcHR5KCkpIHsKKyAgICAgICAgICBzdHJpbmcgKz0gIiBOYW1lOiIgKyBuYW1lOworICAgICAgICB9CisgICAgICB9CisKKyAgICAgIHJldHVybiBzdHJpbmc7CisgICAgfSBlbHNlIHsKKyAgICAgIENvbW1hbmRLZXljb2RlIGtleWNvZGUgPSBuZXcgQ29tbWFuZEtleWNvZGUoY29kZSk7CisgICAgICBpZiAoIWVjaG9OYW1lcykgcmV0dXJuIGtleWNvZGUudG9TdHJpbmcoKTsKKworICAgICAgU3RyaW5nQnVpbGRlciBidWlsZGVyID0gbmV3IFN0cmluZ0J1aWxkZXIoKTsKKyAgICAgIGJ1aWxkZXIuYXBwZW5kKEtleWNvZGUudG9TdHJpbmcoY29kZSkpOworCisgICAgICB7CisgICAgICAgIFN0cmluZyB0eXBlID0ga2V5Y29kZS5nZXRUeXBlTmFtZSgpOworICAgICAgICBpZiAodHlwZSAhPSBudWxsKSBidWlsZGVyLmFwcGVuZCgiIFR5cGU6IikuYXBwZW5kKHR5cGUpOworICAgICAgfQorCisgICAgICB7CisgICAgICAgIFN0cmluZyBjb21tYW5kID0ga2V5Y29kZS5nZXRDb21tYW5kTmFtZSgpOworICAgICAgICBpZiAoY29tbWFuZCAhPSBudWxsKSBidWlsZGVyLmFwcGVuZCgiIENtZDoiKS5hcHBlbmQoY29tbWFuZCk7CisgICAgICB9CisKKyAgICAgIHsKKyAgICAgICAgaW50IGFyZ3VtZW50ID0ga2V5Y29kZS5nZXRBcmd1bWVudCgpOworCisgICAgICAgIGlmIChhcmd1bWVudCA+IDApIHsKKyAgICAgICAgICBidWlsZGVyLmFwcGVuZCgKKyAgICAgICAgICAgIFN0cmluZy5mb3JtYXQoCisgICAgICAgICAgICAgICIgQXJnOiUwNFgoJWQpIiwgYXJndW1lbnQsIGFyZ3VtZW50CisgICAgICAgICAgICApCisgICAgICAgICAgKTsKKyAgICAgICAgfQorICAgICAgfQorCisgICAgICB7CisgICAgICAgIFN0cmluZ1tdIGZsYWdzID0ga2V5Y29kZS5nZXRGbGFnTmFtZXMoKTsKKworICAgICAgICBpZiAoZmxhZ3MgIT0gbnVsbCkgeworICAgICAgICAgIGludCBjb3VudCA9IGZsYWdzLmxlbmd0aDsKKyAgICAgICAgICBib29sZWFuIGZpcnN0ID0gdHJ1ZTsKKworICAgICAgICAgIGZvciAoaW50IGluZGV4PTA7IGluZGV4PGNvdW50OyBpbmRleCs9MSkgeworICAgICAgICAgICAgU3RyaW5nIGZsYWcgPSBmbGFnc1tpbmRleF07CisgICAgICAgICAgICBpZiAoZmxhZyA9PSBudWxsKSBjb250aW51ZTsKKyAgICAgICAgICAgIGlmIChmbGFnLmlzRW1wdHkoKSkgY29udGludWU7CisKKyAgICAgICAgICAgIGlmIChmaXJzdCkgeworICAgICAgICAgICAgICBmaXJzdCA9IGZhbHNlOworICAgICAgICAgICAgICBidWlsZGVyLmFwcGVuZCgiIEZsZzoiKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKCcsJyk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKGZsYWcpOworICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgfQorCisgICAgICByZXR1cm4gYnVpbGRlci50b1N0cmluZygpOworICAgIH0KKyAgfQorCisgIEBPdmVycmlkZQorICBwcm90ZWN0ZWQgZmluYWwgdm9pZCBydW5DbGllbnQgKENvbm5lY3Rpb24gY29ubmVjdGlvbikgdGhyb3dzIFByb2dyYW1FeGNlcHRpb24geworICAgIHR0eU1vZGUoCisgICAgICBjb25uZWN0aW9uLCBlY2hvRHJpdmVyS2V5cywKKyAgICAgIChjb24pIC0+IHsKKyAgICAgICAgc2hvdyhjb24sCisgICAgICAgICAgU3RyaW5nLmZvcm1hdCgKKyAgICAgICAgICAgICJwcmVzcyBrZXlzICh0aW1lb3V0IGlzICVkIHNlY29uZHMpIiwgcmVhZFRpbWVvdXQKKyAgICAgICAgICApCisgICAgICAgICk7CisKKyAgICAgICAgd2hpbGUgKHJlYWRDb3VudC0tID4gMCkgeworICAgICAgICAgIGxvbmcgY29kZTsKKworICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICBpZiAocmVhZFRpbWVvdXQgPT0gRk9SRVZFUl9SRUFEX1RJTUVPVVQpIHsKKyAgICAgICAgICAgICAgY29kZSA9IGNvbi5yZWFkS2V5KCk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICBjb2RlID0gY29uLnJlYWRLZXlXaXRoVGltZW91dCgocmVhZFRpbWVvdXQgKiAxMDAwKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgfSBjYXRjaCAoSW50ZXJydXB0ZWRJT0V4Y2VwdGlvbiBleGNlcHRpb24pIHsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgIH0gY2F0Y2ggKFRpbWVvdXRFeGNlcHRpb24gZXhjZXB0aW9uKSB7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICB9CisKKyAgICAgICAgICBzaG93KGNvbiwgdG9TdHJpbmcoY29uLCBjb2RlKSk7CisgICAgICAgIH0KKyAgICAgIH0sCisgICAgICB0dHlQYXRoCisgICAgKTsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvQmluZGluZ3MvSmF2YS9jbGllbnRzL0dldERyaXZlckNsaWVudC5qYXZhIGIvQmluZGluZ3MvSmF2YS9jbGllbnRzL0dldERyaXZlckNsaWVudC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhmMmM0MmQKLS0tIC9kZXYvbnVsbAorKysgYi9CaW5kaW5ncy9KYXZhL2NsaWVudHMvR2V0RHJpdmVyQ2xpZW50LmphdmEKQEAgLTAsMCArMSwzMyBAQAorLyoKKyAqIGxpYmJybGFwaSAtIEEgbGlicmFyeSBwcm92aWRpbmcgYWNjZXNzIHRvIGJyYWlsbGUgdGVybWluYWxzIGZvciBhcHBsaWNhdGlvbnMuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMjMgYnkKKyAqICAgU2FtdWVsIFRoaWJhdWx0IDxTYW11ZWwuVGhpYmF1bHRAZW5zLWx5b24ub3JnPgorICogICBTw6liYXN0aWVuIEhpbmRlcmVyIDxTZWJhc3RpZW4uSGluZGVyZXJAZW5zLWx5b24ub3JnPgorICoKKyAqIGxpYmJybGFwaSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorICoKKyAqIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyAqLworCitwYWNrYWdlIG9yZy5hMTF5LmJybGFwaS5jbGllbnRzOworCitpbXBvcnQgb3JnLmExMXkuYnJsYXBpLio7CisKK3B1YmxpYyBjbGFzcyBHZXREcml2ZXJDbGllbnQgZXh0ZW5kcyBDbGllbnQgeworICBwdWJsaWMgR2V0RHJpdmVyQ2xpZW50IChTdHJpbmcuLi4gYXJndW1lbnRzKSB7CisgICAgc3VwZXIoYXJndW1lbnRzKTsKKyAgfQorCisgIEBPdmVycmlkZQorICBwcm90ZWN0ZWQgZmluYWwgdm9pZCBydW5DbGllbnQgKENvbm5lY3Rpb24gY29ubmVjdGlvbikgeworICAgIHByaW50ZigiJXNcbiIsIGNvbm5lY3Rpb24uZ2V0RHJpdmVyTmFtZSgpKTsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvQmluZGluZ3MvSmF2YS9jbGllbnRzL0dldE1vZGVsQ2xpZW50LmphdmEgYi9CaW5kaW5ncy9KYXZhL2NsaWVudHMvR2V0TW9kZWxDbGllbnQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kODcyMWM3Ci0tLSAvZGV2L251bGwKKysrIGIvQmluZGluZ3MvSmF2YS9jbGllbnRzL0dldE1vZGVsQ2xpZW50LmphdmEKQEAgLTAsMCArMSwzMyBAQAorLyoKKyAqIGxpYmJybGFwaSAtIEEgbGlicmFyeSBwcm92aWRpbmcgYWNjZXNzIHRvIGJyYWlsbGUgdGVybWluYWxzIGZvciBhcHBsaWNhdGlvbnMuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMjMgYnkKKyAqICAgU2FtdWVsIFRoaWJhdWx0IDxTYW11ZWwuVGhpYmF1bHRAZW5zLWx5b24ub3JnPgorICogICBTw6liYXN0aWVuIEhpbmRlcmVyIDxTZWJhc3RpZW4uSGluZGVyZXJAZW5zLWx5b24ub3JnPgorICoKKyAqIGxpYmJybGFwaSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorICoKKyAqIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyAqLworCitwYWNrYWdlIG9yZy5hMTF5LmJybGFwaS5jbGllbnRzOworCitpbXBvcnQgb3JnLmExMXkuYnJsYXBpLio7CisKK3B1YmxpYyBjbGFzcyBHZXRNb2RlbENsaWVudCBleHRlbmRzIENsaWVudCB7CisgIHB1YmxpYyBHZXRNb2RlbENsaWVudCAoU3RyaW5nLi4uIGFyZ3VtZW50cykgeworICAgIHN1cGVyKGFyZ3VtZW50cyk7CisgIH0KKworICBAT3ZlcnJpZGUKKyAgcHJvdGVjdGVkIGZpbmFsIHZvaWQgcnVuQ2xpZW50IChDb25uZWN0aW9uIGNvbm5lY3Rpb24pIHsKKyAgICBwcmludGYoIiVzXG4iLCBjb25uZWN0aW9uLmdldE1vZGVsSWRlbnRpZmllcigpKTsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvQmluZGluZ3MvSmF2YS9jbGllbnRzL0dldFNpemVDbGllbnQuamF2YSBiL0JpbmRpbmdzL0phdmEvY2xpZW50cy9HZXRTaXplQ2xpZW50LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzE1YzU4ZQotLS0gL2Rldi9udWxsCisrKyBiL0JpbmRpbmdzL0phdmEvY2xpZW50cy9HZXRTaXplQ2xpZW50LmphdmEKQEAgLTAsMCArMSwzMyBAQAorLyoKKyAqIGxpYmJybGFwaSAtIEEgbGlicmFyeSBwcm92aWRpbmcgYWNjZXNzIHRvIGJyYWlsbGUgdGVybWluYWxzIGZvciBhcHBsaWNhdGlvbnMuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMjMgYnkKKyAqICAgU2FtdWVsIFRoaWJhdWx0IDxTYW11ZWwuVGhpYmF1bHRAZW5zLWx5b24ub3JnPgorICogICBTw6liYXN0aWVuIEhpbmRlcmVyIDxTZWJhc3RpZW4uSGluZGVyZXJAZW5zLWx5b24ub3JnPgorICoKKyAqIGxpYmJybGFwaSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorICoKKyAqIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyAqLworCitwYWNrYWdlIG9yZy5hMTF5LmJybGFwaS5jbGllbnRzOworCitpbXBvcnQgb3JnLmExMXkuYnJsYXBpLio7CisKK3B1YmxpYyBjbGFzcyBHZXRTaXplQ2xpZW50IGV4dGVuZHMgQ2xpZW50IHsKKyAgcHVibGljIEdldFNpemVDbGllbnQgKFN0cmluZy4uLiBhcmd1bWVudHMpIHsKKyAgICBzdXBlcihhcmd1bWVudHMpOworICB9CisKKyAgQE92ZXJyaWRlCisgIHByb3RlY3RlZCBmaW5hbCB2b2lkIHJ1bkNsaWVudCAoQ29ubmVjdGlvbiBjb25uZWN0aW9uKSB7CisgICAgcHJpbnRmKCIlc1xuIiwgY29ubmVjdGlvbi5nZXREaXNwbGF5U2l6ZSgpKTsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvQmluZGluZ3MvSmF2YS9jbGllbnRzL0xpc3RQYXJhbWV0ZXJzQ2xpZW50LmphdmEgYi9CaW5kaW5ncy9KYXZhL2NsaWVudHMvTGlzdFBhcmFtZXRlcnNDbGllbnQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNTU5N2ZmCi0tLSAvZGV2L251bGwKKysrIGIvQmluZGluZ3MvSmF2YS9jbGllbnRzL0xpc3RQYXJhbWV0ZXJzQ2xpZW50LmphdmEKQEAgLTAsMCArMSw5MCBAQAorLyoKKyAqIGxpYmJybGFwaSAtIEEgbGlicmFyeSBwcm92aWRpbmcgYWNjZXNzIHRvIGJyYWlsbGUgdGVybWluYWxzIGZvciBhcHBsaWNhdGlvbnMuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMjMgYnkKKyAqICAgU2FtdWVsIFRoaWJhdWx0IDxTYW11ZWwuVGhpYmF1bHRAZW5zLWx5b24ub3JnPgorICogICBTw6liYXN0aWVuIEhpbmRlcmVyIDxTZWJhc3RpZW4uSGluZGVyZXJAZW5zLWx5b24ub3JnPgorICoKKyAqIGxpYmJybGFwaSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorICoKKyAqIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyAqLworCitwYWNrYWdlIG9yZy5hMTF5LmJybGFwaS5jbGllbnRzOworCitpbXBvcnQgb3JnLmExMXkuYnJsYXBpLio7CisKK3B1YmxpYyBjbGFzcyBMaXN0UGFyYW1ldGVyc0NsaWVudCBleHRlbmRzIENsaWVudCB7CisgIHB1YmxpYyBMaXN0UGFyYW1ldGVyc0NsaWVudCAoU3RyaW5nLi4uIGFyZ3VtZW50cykgeworICAgIHN1cGVyKGFyZ3VtZW50cyk7CisgICAgYWRkT3B0aW9uYWxQYXJhbWV0ZXJzKCJwYXJhbWV0ZXIiLCAic3VicGFyYW0iKTsKKyAgfQorCisgIHByaXZhdGUgU3RyaW5nIHBhcmFtZXRlck5hbWUgPSBudWxsOworICBwcml2YXRlIExvbmcgc3VicGFyYW1WYWx1ZSA9IG51bGw7CisKKyAgQE92ZXJyaWRlCisgIHByb3RlY3RlZCB2b2lkIHByb2Nlc3NQYXJhbWV0ZXJzIChTdHJpbmdbXSBwYXJhbWV0ZXJzKQorICAgICAgICAgICAgdGhyb3dzIFN5bnRheEV4Y2VwdGlvbgorICB7CisgICAgaW50IGNvdW50ID0gcGFyYW1ldGVycy5sZW5ndGg7CisgICAgaW50IGluZGV4ID0gMDsKKworICAgIGlmIChpbmRleCA9PSBjb3VudCkgcmV0dXJuOworICAgIHBhcmFtZXRlck5hbWUgPSBwYXJhbWV0ZXJzW2luZGV4KytdOworCisgICAgaWYgKGluZGV4ID09IGNvdW50KSByZXR1cm47CisgICAgc3VicGFyYW1WYWx1ZSA9IFBhcnNlLmFzTG9uZygic3VicGFyYW0iLCBwYXJhbWV0ZXJzW2luZGV4KytdKTsKKworICAgIGlmIChpbmRleCA8IGNvdW50KSB0aHJvdyBuZXcgVG9vTWFueVBhcmFtZXRlcnNFeGNlcHRpb24ocGFyYW1ldGVycywgaW5kZXgpOworICB9CisKKyAgQE92ZXJyaWRlCisgIHByb3RlY3RlZCBmaW5hbCB2b2lkIHJ1bkNsaWVudCAoQ29ubmVjdGlvbiBjb25uZWN0aW9uKSB0aHJvd3MgU2VtYW50aWNFeGNlcHRpb24geworICAgIGlmIChwYXJhbWV0ZXJOYW1lID09IG51bGwpIHsKKyAgICAgIFBhcmFtZXRlcltdIHBhcmFtZXRlckFycmF5ID0gY29ubmVjdGlvbi5nZXRQYXJhbWV0ZXJzKCkuZ2V0KCk7CisgICAgICBQYXJhbWV0ZXJzLnNvcnRCeU5hbWUocGFyYW1ldGVyQXJyYXkpOworCisgICAgICBmb3IgKFBhcmFtZXRlciBwYXJhbWV0ZXIgOiBwYXJhbWV0ZXJBcnJheSkgeworICAgICAgICBpZiAocGFyYW1ldGVyLmlzSGlkYWJsZSgpKSBjb250aW51ZTsKKyAgICAgICAgU3RyaW5nIHZhbHVlID0gcGFyYW1ldGVyLnRvU3RyaW5nKCk7CisgICAgICAgIGlmICh2YWx1ZSAhPSBudWxsKSBwcmludGYoIiVzOiAlc1xuIiwgcGFyYW1ldGVyLmdldExhYmVsKCksIHZhbHVlKTsKKyAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgUGFyYW1ldGVyIHBhcmFtZXRlciA9IGdldFBhcmFtZXRlcihjb25uZWN0aW9uLCBwYXJhbWV0ZXJOYW1lKTsKKyAgICAgIFN0cmluZyB2YWx1ZTsKKworICAgICAgaWYgKHN1YnBhcmFtVmFsdWUgPT0gbnVsbCkgeworICAgICAgICB2YWx1ZSA9IHBhcmFtZXRlci50b1N0cmluZygpOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgbG9uZyBzdWJwYXJhbSA9IHN1YnBhcmFtVmFsdWU7CisgICAgICAgIHZhbHVlID0gcGFyYW1ldGVyLnRvU3RyaW5nKHN1YnBhcmFtKTsKKyAgICAgIH0KKworICAgICAgaWYgKHZhbHVlID09IG51bGwpIHsKKyAgICAgICAgU3RyaW5nQnVpbGRlciBtZXNzYWdlID0gbmV3IFN0cmluZ0J1aWxkZXIoKTsKKyAgICAgICAgbWVzc2FnZS5hcHBlbmQoInBhcmFtZXRlciBoYXMgbm8gdmFsdWUiKTsKKworICAgICAgICBtZXNzYWdlLmFwcGVuZCgiOiAiKTsKKyAgICAgICAgbWVzc2FnZS5hcHBlbmQocGFyYW1ldGVyLmdldE5hbWUoKSk7CisKKyAgICAgICAgaWYgKHN1YnBhcmFtVmFsdWUgIT0gbnVsbCkgeworICAgICAgICAgIG1lc3NhZ2UuYXBwZW5kKCdbJyk7CisgICAgICAgICAgbWVzc2FnZS5hcHBlbmQoc3VicGFyYW1WYWx1ZSk7CisgICAgICAgICAgbWVzc2FnZS5hcHBlbmQoJ10nKTsKKyAgICAgICAgfQorCisgICAgICAgIHRocm93IG5ldyBTZW1hbnRpY0V4Y2VwdGlvbigiJXMiLCBtZXNzYWdlKTsKKyAgICAgIH0KKworICAgICAgcHJpbnRmKCIlc1xuIiwgdmFsdWUpOworICAgIH0KKyAgfQorfQpkaWZmIC0tZ2l0IGEvQmluZGluZ3MvSmF2YS9jbGllbnRzL1BhdXNlQ2xpZW50LmphdmEgYi9CaW5kaW5ncy9KYXZhL2NsaWVudHMvUGF1c2VDbGllbnQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYTM3ODY1Ci0tLSAvZGV2L251bGwKKysrIGIvQmluZGluZ3MvSmF2YS9jbGllbnRzL1BhdXNlQ2xpZW50LmphdmEKQEAgLTAsMCArMSw4MCBAQAorLyoKKyAqIGxpYmJybGFwaSAtIEEgbGlicmFyeSBwcm92aWRpbmcgYWNjZXNzIHRvIGJyYWlsbGUgdGVybWluYWxzIGZvciBhcHBsaWNhdGlvbnMuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMjMgYnkKKyAqICAgU2FtdWVsIFRoaWJhdWx0IDxTYW11ZWwuVGhpYmF1bHRAZW5zLWx5b24ub3JnPgorICogICBTw6liYXN0aWVuIEhpbmRlcmVyIDxTZWJhc3RpZW4uSGluZGVyZXJAZW5zLWx5b24ub3JnPgorICoKKyAqIGxpYmJybGFwaSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorICoKKyAqIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyAqLworCitwYWNrYWdlIG9yZy5hMTF5LmJybGFwaS5jbGllbnRzOworCitpbXBvcnQgb3JnLmExMXkuYnJsYXBpLio7CisKK3B1YmxpYyBjbGFzcyBQYXVzZUNsaWVudCBleHRlbmRzIENsaWVudCB7CisgIHB1YmxpYyBmaW5hbCBzdGF0aWMgYnl0ZSBNSU5JTVVNX1dBSVRfVElNRSA9IDE7CisgIHB1YmxpYyBmaW5hbCBzdGF0aWMgYnl0ZSBERUZBVUxUX1dBSVRfVElNRSA9IDU7CisKKyAgcHJpdmF0ZSBieXRlIHdhaXRUaW1lID0gREVGQVVMVF9XQUlUX1RJTUU7CisgIHByaXZhdGUgZmluYWwgT3BlcmFuZFVzYWdlIHdhaXRUaW1lVXNhZ2UgPSBuZXcgT3BlcmFuZFVzYWdlKCJ3YWl0IHRpbWUiKQorICAgIC5zZXREZWZhdWx0KHdhaXRUaW1lKQorICAgIC5zZXRSYW5nZU1pbmltdW0oTUlOSU1VTV9XQUlUX1RJTUUpCisgICAgLnNldFJhbmdlVW5pdHMoInNlY29uZHMiKQorICAgIDsKKworICBwcm90ZWN0ZWQgZmluYWwgaW50IGdldFdhaXRUaW1lICgpIHsKKyAgICByZXR1cm4gd2FpdFRpbWUgKiAxMDAwOworICB9CisKKyAgcHJvdGVjdGVkIGZpbmFsIGJvb2xlYW4gcGF1c2UgKENvbm5lY3Rpb24gY29ubmVjdGlvbikgeworICAgIHJldHVybiBwYXVzZShjb25uZWN0aW9uLCBnZXRXYWl0VGltZSgpKTsKKyAgfQorCisgIHB1YmxpYyBQYXVzZUNsaWVudCAoU3RyaW5nLi4uIGFyZ3VtZW50cykgeworICAgIHN1cGVyKGFyZ3VtZW50cyk7CisgICAgLy8gZG9uJ3QgYWRkIHBhcmFtZXRlcnMgdG8gdGhpcyBjbGllbnQgYmVjYXVzZSBzb21lIG90aGVyIGNsaWVudHMgZXh0ZW5kIGl0CisKKyAgICBhZGRPcHRpb24oIndhaXQiLAorICAgICAgKG9wZXJhbmRzKSAtPiB7CisgICAgICAgIHdhaXRUaW1lID0gUGFyc2UuYXNCeXRlKAorICAgICAgICAgIHdhaXRUaW1lVXNhZ2UuZ2V0T3BlcmFuZERlc2NyaXB0aW9uKCksCisgICAgICAgICAgb3BlcmFuZHNbMF0sIE1JTklNVU1fV0FJVF9USU1FCisgICAgICAgICk7CisgICAgICB9LAorICAgICAgInNlY29uZHMiCisgICAgKTsKKyAgfQorCisgIEBPdmVycmlkZQorICBwcm90ZWN0ZWQgdm9pZCBleHRlbmRVc2FnZVN1bW1hcnkgKFN0cmluZ0J1aWxkZXIgdXNhZ2UpIHsKKyAgICBzdXBlci5leHRlbmRVc2FnZVN1bW1hcnkodXNhZ2UpOworCisgICAgd2FpdFRpbWVVc2FnZS5hcHBlbmRUbyh1c2FnZSk7CisgIH0KKworICBAT3ZlcnJpZGUKKyAgcHJvdGVjdGVkIHZvaWQgcnVuQ2xpZW50IChDb25uZWN0aW9uIGNvbm5lY3Rpb24pIAorICAgICAgICAgICAgdGhyb3dzIFByb2dyYW1FeGNlcHRpb24KKyAgeworICAgIHByaW50ZigiUGF1c2luZyBmb3IgJWQgc2Vjb25kcy4uLiIsIHdhaXRUaW1lKTsKKyAgICBTdHJpbmcgcmVzdWx0OworCisgICAgaWYgKHBhdXNlKGNvbm5lY3Rpb24pKSB7CisgICAgICByZXN1bHQgPSAicGF1c2UgY29tcGxldGVkIjsKKyAgICB9IGVsc2UgeworICAgICAgcmVzdWx0ID0gInBhdXNlIGludGVycnVwdGVkIjsKKyAgICB9CisKKyAgICBwcmludGYoIiAlc1xuIiwgcmVzdWx0KTsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvQmluZGluZ3MvSmF2YS9jbGllbnRzL1NldFBhcmFtZXRlckNsaWVudC5qYXZhIGIvQmluZGluZ3MvSmF2YS9jbGllbnRzL1NldFBhcmFtZXRlckNsaWVudC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMxMWJkM2QKLS0tIC9kZXYvbnVsbAorKysgYi9CaW5kaW5ncy9KYXZhL2NsaWVudHMvU2V0UGFyYW1ldGVyQ2xpZW50LmphdmEKQEAgLTAsMCArMSw1NiBAQAorLyoKKyAqIGxpYmJybGFwaSAtIEEgbGlicmFyeSBwcm92aWRpbmcgYWNjZXNzIHRvIGJyYWlsbGUgdGVybWluYWxzIGZvciBhcHBsaWNhdGlvbnMuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMjMgYnkKKyAqICAgU2FtdWVsIFRoaWJhdWx0IDxTYW11ZWwuVGhpYmF1bHRAZW5zLWx5b24ub3JnPgorICogICBTw6liYXN0aWVuIEhpbmRlcmVyIDxTZWJhc3RpZW4uSGluZGVyZXJAZW5zLWx5b24ub3JnPgorICoKKyAqIGxpYmJybGFwaSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorICoKKyAqIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyAqLworCitwYWNrYWdlIG9yZy5hMTF5LmJybGFwaS5jbGllbnRzOworCitpbXBvcnQgb3JnLmExMXkuYnJsYXBpLio7CisKK3B1YmxpYyBjbGFzcyBTZXRQYXJhbWV0ZXJDbGllbnQgZXh0ZW5kcyBDbGllbnQgeworICBwdWJsaWMgU2V0UGFyYW1ldGVyQ2xpZW50IChTdHJpbmcuLi4gYXJndW1lbnRzKSB7CisgICAgc3VwZXIoYXJndW1lbnRzKTsKKyAgICBhZGRSZXF1aXJlZFBhcmFtZXRlcnMoInBhcmFtZXRlciIsICJ2YWx1ZSIpOworICB9CisKKyAgcHJpdmF0ZSBTdHJpbmcgcGFyYW1ldGVyTmFtZSA9IG51bGw7CisgIHByaXZhdGUgU3RyaW5nIHBhcmFtZXRlclZhbHVlID0gbnVsbDsKKworICBAT3ZlcnJpZGUKKyAgcHJvdGVjdGVkIHZvaWQgcHJvY2Vzc1BhcmFtZXRlcnMgKFN0cmluZ1tdIHBhcmFtZXRlcnMpCisgICAgICAgICAgICB0aHJvd3MgU3ludGF4RXhjZXB0aW9uCisgIHsKKyAgICBpbnQgY291bnQgPSBwYXJhbWV0ZXJzLmxlbmd0aDsKKyAgICBpbnQgaW5kZXggPSAwOworCisgICAgaWYgKGluZGV4ID09IGNvdW50KSB0aHJvdyBuZXcgU3ludGF4RXhjZXB0aW9uKCJtaXNzaW5nIHBhcmFtZXRlciBuYW1lIik7CisgICAgcGFyYW1ldGVyTmFtZSA9IHBhcmFtZXRlcnNbaW5kZXgrK107CisKKyAgICBpZiAoaW5kZXggPT0gY291bnQpIHRocm93IG5ldyBTeW50YXhFeGNlcHRpb24oIm1pc3NpbmcgbGFyYW1ldGVyIHZhbHVlIik7CisgICAgcGFyYW1ldGVyVmFsdWUgPSBwYXJhbWV0ZXJzW2luZGV4KytdOworCisgICAgaWYgKGluZGV4IDwgY291bnQpIHRocm93IG5ldyBUb29NYW55UGFyYW1ldGVyc0V4Y2VwdGlvbihwYXJhbWV0ZXJzLCBpbmRleCk7CisgIH0KKworICBAT3ZlcnJpZGUKKyAgcHJvdGVjdGVkIGZpbmFsIHZvaWQgcnVuQ2xpZW50IChDb25uZWN0aW9uIGNvbm5lY3Rpb24pCisgICAgICAgICAgICB0aHJvd3MgT3BlcmFuZEV4Y2VwdGlvbgorICB7CisgICAgUGFyYW1ldGVyIHBhcmFtZXRlciA9IGdldFBhcmFtZXRlcihjb25uZWN0aW9uLCBwYXJhbWV0ZXJOYW1lKTsKKyAgICBwYXJhbWV0ZXIuc2V0KHBhcmFtZXRlclZhbHVlKTsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvQmluZGluZ3MvSmF2YS9jbGllbnRzL1dyaXRlQXJndW1lbnRzQ2xpZW50LmphdmEgYi9CaW5kaW5ncy9KYXZhL2NsaWVudHMvV3JpdGVBcmd1bWVudHNDbGllbnQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MWVkYWZlCi0tLSAvZGV2L251bGwKKysrIGIvQmluZGluZ3MvSmF2YS9jbGllbnRzL1dyaXRlQXJndW1lbnRzQ2xpZW50LmphdmEKQEAgLTAsMCArMSwxNTkgQEAKKy8qCisgKiBsaWJicmxhcGkgLSBBIGxpYnJhcnkgcHJvdmlkaW5nIGFjY2VzcyB0byBicmFpbGxlIHRlcm1pbmFscyBmb3IgYXBwbGljYXRpb25zLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNi0yMDIzIGJ5CisgKiAgIFNhbXVlbCBUaGliYXVsdCA8U2FtdWVsLlRoaWJhdWx0QGVucy1seW9uLm9yZz4KKyAqICAgU8OpYmFzdGllbiBIaW5kZXJlciA8U2ViYXN0aWVuLkhpbmRlcmVyQGVucy1seW9uLm9yZz4KKyAqCisgKiBsaWJicmxhcGkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorICoKKyAqIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyAqCisgKiBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisgKi8KKworcGFja2FnZSBvcmcuYTExeS5icmxhcGkuY2xpZW50czsKKworaW1wb3J0IGphdmEudXRpbC5MaW5rZWRMaXN0OworaW1wb3J0IGphdmEudXRpbC5MaXN0OworaW1wb3J0IG9yZy5hMTF5LmJybGFwaS4qOworCitwdWJsaWMgY2xhc3MgV3JpdGVBcmd1bWVudHNDbGllbnQgZXh0ZW5kcyBQYXVzZUNsaWVudCB7CisgIHByaXZhdGUgZmluYWwgTGlzdDxXcml0ZUFyZ3VtZW50cz4gd3JpdGVBcmd1bWVudHNMaXN0ID0gbmV3IExpbmtlZExpc3Q8PigpOworICBwcml2YXRlIFdyaXRlQXJndW1lbnRzIHdyaXRlQXJndW1lbnRzID0gbmV3IFdyaXRlQXJndW1lbnRzKCk7CisgIHByaXZhdGUgYm9vbGVhbiBmaXhXcml0ZUFyZ3VtZW50cyA9IHRydWU7CisKKyAgcHJpdmF0ZSBmaW5hbCBPcGVyYW5kVXNhZ2UgY3Vyc29yUG9zaXRpb25Vc2FnZSA9CisgICAgIG5ldyBDdXJzb3JQb3NpdGlvblVzYWdlKHdyaXRlQXJndW1lbnRzLmdldEN1cnNvclBvc2l0aW9uKCkpOworCisgIHByaXZhdGUgZmluYWwgT3BlcmFuZFVzYWdlIGRpc3BsYXlOdW1iZXJVc2FnZSA9CisgICAgICBuZXcgRGlzcGxheU51bWJlclVzYWdlKHdyaXRlQXJndW1lbnRzLmdldERpc3BsYXlOdW1iZXIoKSk7CisKKyAgcHVibGljIGZpbmFsIHN0YXRpYyBpbnQgTUlOSU1VTV9SRUdJT05fQkVHSU4gPSAxOworICBwdWJsaWMgZmluYWwgc3RhdGljIGludCBNSU5JTVVNX1JFR0lPTl9TSVpFID0gMTsKKworICBwdWJsaWMgV3JpdGVBcmd1bWVudHNDbGllbnQgKFN0cmluZy4uLiBhcmd1bWVudHMpIHsKKyAgICBzdXBlcihhcmd1bWVudHMpOworICAgIHdyaXRlQXJndW1lbnRzTGlzdC5hZGQod3JpdGVBcmd1bWVudHMpOworCisgICAgYWRkT3B0aW9uKCJ0ZXh0IiwKKyAgICAgIChvcGVyYW5kcykgLT4geworICAgICAgICB3cml0ZUFyZ3VtZW50cy5zZXRUZXh0KG9wZXJhbmRzWzBdKTsKKyAgICAgIH0sCisgICAgICAidGV4dCIKKyAgICApOworCisgICAgYWRkT3B0aW9uKCJiZWdpbiIsCisgICAgICAob3BlcmFuZHMpIC0+IHsKKyAgICAgICAgd3JpdGVBcmd1bWVudHMuc2V0UmVnaW9uQmVnaW4oCisgICAgICAgICAgUGFyc2UuYXNJbnQoCisgICAgICAgICAgICBXcml0ZUFyZ3VtZW50cy5SRUdJT05fQkVHSU4sCisgICAgICAgICAgICBvcGVyYW5kc1swXSwgTUlOSU1VTV9SRUdJT05fQkVHSU4KKyAgICAgICAgICApCisgICAgICAgICk7CisgICAgICB9LAorICAgICAgInJlZ2lvbiBiZWdpbiIKKyAgICApOworCisgICAgYWRkT3B0aW9uKCJsZW5ndGgiLAorICAgICAgKG9wZXJhbmRzKSAtPiB7CisgICAgICAgIHdyaXRlQXJndW1lbnRzLnNldFJlZ2lvblNpemUoCisgICAgICAgICAgUGFyc2UuYXNJbnQoCisgICAgICAgICAgICBXcml0ZUFyZ3VtZW50cy5SRUdJT05fU0laRSwKKyAgICAgICAgICAgIG9wZXJhbmRzWzBdLCBNSU5JTVVNX1JFR0lPTl9TSVpFCisgICAgICAgICAgKQorICAgICAgICApOworICAgICAgfSwKKyAgICAgICJyZWdpb24gc2l6ZSIKKyAgICApOworCisgICAgYWRkT3B0aW9uKCJjdXJzb3IiLAorICAgICAgKG9wZXJhbmRzKSAtPiB7CisgICAgICAgIHdyaXRlQXJndW1lbnRzLnNldEN1cnNvclBvc2l0aW9uKFBhcnNlLmFzQ3Vyc29yUG9zaXRpb24ob3BlcmFuZHNbMF0pKTsKKyAgICAgIH0sCisgICAgICAicG9zaXRpb24iCisgICAgKTsKKworICAgIGFkZE9wdGlvbigiZGlzcGxheSIsCisgICAgICAob3BlcmFuZHMpIC0+IHsKKyAgICAgICAgd3JpdGVBcmd1bWVudHMuc2V0RGlzcGxheU51bWJlcihQYXJzZS5hc0Rpc3BsYXlOdW1iZXIob3BlcmFuZHNbMF0pKTsKKyAgICAgIH0sCisgICAgICAibnVtYmVyIgorICAgICk7CisKKyAgICBhZGRPcHRpb24oImZpeCIsCisgICAgICAob3BlcmFuZHMpIC0+IHsKKyAgICAgICAgZml4V3JpdGVBcmd1bWVudHMgPSB0cnVlOworICAgICAgfQorICAgICk7CisKKyAgICBhZGRPcHRpb24oIm5vZml4IiwKKyAgICAgIChvcGVyYW5kcykgLT4geworICAgICAgICBmaXhXcml0ZUFyZ3VtZW50cyA9IGZhbHNlOworICAgICAgfQorICAgICk7CisKKyAgICBhZGRPcHRpb24oInJlbmRlciIsCisgICAgICAob3BlcmFuZHMpIC0+IHsKKyAgICAgICAgd3JpdGVBcmd1bWVudHMgPSBuZXcgV3JpdGVBcmd1bWVudHMoKTsKKyAgICAgICAgd3JpdGVBcmd1bWVudHNMaXN0LmFkZCh3cml0ZUFyZ3VtZW50cyk7CisgICAgICB9CisgICAgKTsKKyAgfQorCisgIEBPdmVycmlkZQorICBwcm90ZWN0ZWQgZmluYWwgdm9pZCBleHRlbmRVc2FnZVN1bW1hcnkgKFN0cmluZ0J1aWxkZXIgdXNhZ2UpIHsKKyAgICBzdXBlci5leHRlbmRVc2FnZVN1bW1hcnkodXNhZ2UpOworCisgICAgbmV3IE9wZXJhbmRVc2FnZShXcml0ZUFyZ3VtZW50cy5SRUdJT05fQkVHSU4pCisgICAgICAuc2V0RGVmYXVsdChNSU5JTVVNX1JFR0lPTl9CRUdJTikKKyAgICAgIC5zZXRSYW5nZU1pbmltdW0oTUlOSU1VTV9SRUdJT05fQkVHSU4pCisgICAgICAuYXBwZW5kVG8odXNhZ2UpOworCisgICAgbmV3IE9wZXJhbmRVc2FnZShXcml0ZUFyZ3VtZW50cy5SRUdJT05fU0laRSkKKyAgICAgIC5zZXREZWZhdWx0KAorICAgICAgICBTdHJpbmcuZm9ybWF0KAorICAgICAgICAgICJ0aGUgc2l6ZSBvZiB0aGUgbGFyZ2VzdCBjb250ZW50IHByb3BlcnR5ICglcywgJXMsICVzKSIsCisgICAgICAgICAgV3JpdGVBcmd1bWVudHMuVEVYVCwgV3JpdGVBcmd1bWVudHMuQU5EX01BU0ssIFdyaXRlQXJndW1lbnRzLk9SX01BU0sKKyAgICAgICAgKQorICAgICAgICkKKyAgICAgIC5zZXRSYW5nZU1pbmltdW0oTUlOSU1VTV9SRUdJT05fU0laRSkKKyAgICAgIC5zZXRSYW5nZVVuaXRzKCJjZWxscyIpCisgICAgICAuYXBwZW5kVG8odXNhZ2UpOworCisgICAgY3Vyc29yUG9zaXRpb25Vc2FnZS5hcHBlbmRUbyh1c2FnZSk7CisgICAgZGlzcGxheU51bWJlclVzYWdlLmFwcGVuZFRvKHVzYWdlKTsKKyAgfQorCisgIEBPdmVycmlkZQorICBwcm90ZWN0ZWQgZmluYWwgdm9pZCBydW5DbGllbnQgKENvbm5lY3Rpb24gY29ubmVjdGlvbikgCisgICAgICAgICAgICB0aHJvd3MgUHJvZ3JhbUV4Y2VwdGlvbgorICB7CisgICAgdHR5TW9kZSgKKyAgICAgIGNvbm5lY3Rpb24sIGZhbHNlLAorICAgICAgKGNvbikgLT4geworICAgICAgICBpbnQgY2VsbENvdW50ID0gY29uLmdldENlbGxDb3VudCgpOworCisgICAgICAgIGZvciAoV3JpdGVBcmd1bWVudHMgYXJndW1lbnRzIDogd3JpdGVBcmd1bWVudHNMaXN0KSB7CisgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIGFyZ3VtZW50cy5jaGVjayhjZWxsQ291bnQsIGZpeFdyaXRlQXJndW1lbnRzKTsKKyAgICAgICAgICB9IGNhdGNoIChJbGxlZ2FsU3RhdGVFeGNlcHRpb24gZXhjZXB0aW9uKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgU3ludGF4RXhjZXB0aW9uKGV4Y2VwdGlvbi5nZXRNZXNzYWdlKCkpOworICAgICAgICAgIH0KKworICAgICAgICAgIGNvbi53cml0ZShhcmd1bWVudHMpOworICAgICAgICB9CisKKyAgICAgICAgYnl0ZVtdIGRvdHMgPSBjb24uZ2V0UGFyYW1ldGVycygpLnJlbmRlcmVkQ2VsbHMuZ2V0KCk7CisgICAgICAgIHByaW50ZigiJXNcbiIsIHRvVW5pY29kZUJyYWlsbGUoZG90cykpOworCisgICAgICAgIHBhdXNlKGNvbik7CisgICAgICB9CisgICAgKTsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvQmluZGluZ3MvSmF2YS9jbGllbnRzL1dyaXRlRG90c0NsaWVudC5qYXZhIGIvQmluZGluZ3MvSmF2YS9jbGllbnRzL1dyaXRlRG90c0NsaWVudC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMxYjlkM2IKLS0tIC9kZXYvbnVsbAorKysgYi9CaW5kaW5ncy9KYXZhL2NsaWVudHMvV3JpdGVEb3RzQ2xpZW50LmphdmEKQEAgLTAsMCArMSw2MCBAQAorLyoKKyAqIGxpYmJybGFwaSAtIEEgbGlicmFyeSBwcm92aWRpbmcgYWNjZXNzIHRvIGJyYWlsbGUgdGVybWluYWxzIGZvciBhcHBsaWNhdGlvbnMuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMjMgYnkKKyAqICAgU2FtdWVsIFRoaWJhdWx0IDxTYW11ZWwuVGhpYmF1bHRAZW5zLWx5b24ub3JnPgorICogICBTw6liYXN0aWVuIEhpbmRlcmVyIDxTZWJhc3RpZW4uSGluZGVyZXJAZW5zLWx5b24ub3JnPgorICoKKyAqIGxpYmJybGFwaSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorICoKKyAqIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyAqLworCitwYWNrYWdlIG9yZy5hMTF5LmJybGFwaS5jbGllbnRzOworCitpbXBvcnQgb3JnLmExMXkuYnJsYXBpLio7CisKK3B1YmxpYyBjbGFzcyBXcml0ZURvdHNDbGllbnQgZXh0ZW5kcyBQYXVzZUNsaWVudCB7CisgIHB1YmxpYyBXcml0ZURvdHNDbGllbnQgKFN0cmluZy4uLiBhcmd1bWVudHMpIHsKKyAgICBzdXBlcihhcmd1bWVudHMpOworICAgIGFkZFJlcGVhdGluZ1BhcmFtZXRlcigiZG90cyIpOworICB9CisKKyAgcHJpdmF0ZSBieXRlW10gZG90cyA9IG51bGw7CisKKyAgQE92ZXJyaWRlCisgIHByb3RlY3RlZCBmaW5hbCB2b2lkIHByb2Nlc3NQYXJhbWV0ZXJzIChTdHJpbmdbXSBwYXJhbWV0ZXJzKQorICAgICAgICAgICAgdGhyb3dzIFN5bnRheEV4Y2VwdGlvbgorICB7CisgICAgaW50IGNvdW50ID0gcGFyYW1ldGVycy5sZW5ndGg7CisgICAgZG90cyA9IG5ldyBieXRlW2NvdW50XTsKKworICAgIGZvciAoaW50IGluZGV4PTA7IGluZGV4PGNvdW50OyBpbmRleCs9MSkgeworICAgICAgZG90c1tpbmRleF0gPSBQYXJzZS5hc0RvdHMoImRvdHMgcGFyYW1ldGVyIiwgcGFyYW1ldGVyc1tpbmRleF0pOworICAgIH0KKyAgfQorCisgIEBPdmVycmlkZQorICBwcm90ZWN0ZWQgZmluYWwgdm9pZCBydW5DbGllbnQgKENvbm5lY3Rpb24gY29ubmVjdGlvbikgCisgICAgICAgICAgICB0aHJvd3MgUHJvZ3JhbUV4Y2VwdGlvbgorICB7CisgICAgdHR5TW9kZSgKKyAgICAgIGNvbm5lY3Rpb24sIGZhbHNlLAorICAgICAgKGNvbikgLT4geworICAgICAgICBjb24ud3JpdGUoZG90cyk7CisKKyAgICAgICAgYnl0ZVtdIGRvdHMgPSBjb24uZ2V0UGFyYW1ldGVycygpLnJlbmRlcmVkQ2VsbHMuZ2V0KCk7CisgICAgICAgIHByaW50ZigiJXNcbiIsIHRvVW5pY29kZUJyYWlsbGUoZG90cykpOworCisgICAgICAgIHBhdXNlKGNvbik7CisgICAgICB9CisgICAgKTsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvQmluZGluZ3MvSmF2YS9jbGllbnRzL1dyaXRlVGV4dENsaWVudC5qYXZhIGIvQmluZGluZ3MvSmF2YS9jbGllbnRzL1dyaXRlVGV4dENsaWVudC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJmMTZmNDAKLS0tIC9kZXYvbnVsbAorKysgYi9CaW5kaW5ncy9KYXZhL2NsaWVudHMvV3JpdGVUZXh0Q2xpZW50LmphdmEKQEAgLTAsMCArMSw4NCBAQAorLyoKKyAqIGxpYmJybGFwaSAtIEEgbGlicmFyeSBwcm92aWRpbmcgYWNjZXNzIHRvIGJyYWlsbGUgdGVybWluYWxzIGZvciBhcHBsaWNhdGlvbnMuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMjMgYnkKKyAqICAgU2FtdWVsIFRoaWJhdWx0IDxTYW11ZWwuVGhpYmF1bHRAZW5zLWx5b24ub3JnPgorICogICBTw6liYXN0aWVuIEhpbmRlcmVyIDxTZWJhc3RpZW4uSGluZGVyZXJAZW5zLWx5b24ub3JnPgorICoKKyAqIGxpYmJybGFwaSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorICoKKyAqIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyAqLworCitwYWNrYWdlIG9yZy5hMTF5LmJybGFwaS5jbGllbnRzOworCitpbXBvcnQgb3JnLmExMXkuYnJsYXBpLio7CisKK3B1YmxpYyBjbGFzcyBXcml0ZVRleHRDbGllbnQgZXh0ZW5kcyBQYXVzZUNsaWVudCB7CisgIHByaXZhdGUgaW50IGN1cnNvclBvc2l0aW9uID0gQ29uc3RhbnRzLkNVUlNPUl9PRkY7CisgIHByaXZhdGUgZmluYWwgT3BlcmFuZFVzYWdlIGN1cnNvclBvc2l0aW9uVXNhZ2UgPQorICAgICBuZXcgQ3Vyc29yUG9zaXRpb25Vc2FnZShjdXJzb3JQb3NpdGlvbik7CisKKyAgcHVibGljIFdyaXRlVGV4dENsaWVudCAoU3RyaW5nLi4uIGFyZ3VtZW50cykgeworICAgIHN1cGVyKGFyZ3VtZW50cyk7CisgICAgYWRkUmVwZWF0aW5nUGFyYW1ldGVyKCJ0ZXh0Iik7CisKKyAgICBhZGRPcHRpb24oImN1cnNvciIsCisgICAgICAob3BlcmFuZHMpIC0+IHsKKyAgICAgICAgY3Vyc29yUG9zaXRpb24gPSBQYXJzZS5hc0N1cnNvclBvc2l0aW9uKG9wZXJhbmRzWzBdKTsKKyAgICAgIH0sCisgICAgICAicG9zaXRpb24iCisgICAgKTsKKyAgfQorCisgIHByaXZhdGUgU3RyaW5nIHRleHQgPSBudWxsOworCisgIEBPdmVycmlkZQorICBwcm90ZWN0ZWQgZmluYWwgdm9pZCBwcm9jZXNzUGFyYW1ldGVycyAoU3RyaW5nW10gcGFyYW1ldGVycykgeworICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlciA9IG5ldyBTdHJpbmdCdWlsZGVyKCk7CisKKyAgICBmb3IgKFN0cmluZyBwYXJhbWV0ZXIgOiBwYXJhbWV0ZXJzKSB7CisgICAgICBpZiAoYnVpbGRlci5sZW5ndGgoKSA+IDApIGJ1aWxkZXIuYXBwZW5kKCcgJyk7CisgICAgICBidWlsZGVyLmFwcGVuZChwYXJhbWV0ZXIpOworICAgIH0KKworICAgIHRleHQgPSBidWlsZGVyLnRvU3RyaW5nKCk7CisgIH0KKworICBAT3ZlcnJpZGUKKyAgcHJvdGVjdGVkIGZpbmFsIHZvaWQgZXh0ZW5kVXNhZ2VTdW1tYXJ5IChTdHJpbmdCdWlsZGVyIHVzYWdlKSB7CisgICAgc3VwZXIuZXh0ZW5kVXNhZ2VTdW1tYXJ5KHVzYWdlKTsKKworICAgIGN1cnNvclBvc2l0aW9uVXNhZ2UuYXBwZW5kVG8odXNhZ2UpOworICB9CisKKyAgQE92ZXJyaWRlCisgIHByb3RlY3RlZCBmaW5hbCB2b2lkIHJ1bkNsaWVudCAoQ29ubmVjdGlvbiBjb25uZWN0aW9uKSAKKyAgICAgICAgICAgIHRocm93cyBQcm9ncmFtRXhjZXB0aW9uCisgIHsKKyAgICBQYXJzZS5jaGVja01heGltdW0oCisgICAgICBjdXJzb3JQb3NpdGlvblVzYWdlLmdldE9wZXJhbmREZXNjcmlwdGlvbigpLAorICAgICAgY3Vyc29yUG9zaXRpb24sIGNvbm5lY3Rpb24uZ2V0Q2VsbENvdW50KCkKKyAgICApOworCisgICAgdHR5TW9kZSgKKyAgICAgIGNvbm5lY3Rpb24sIGZhbHNlLAorICAgICAgKGNvbikgLT4geworICAgICAgICBwcmludGYoIiVzXG4iLCB0ZXh0KTsKKyAgICAgICAgY29uLndyaXRlKHRleHQsIGN1cnNvclBvc2l0aW9uKTsKKworICAgICAgICBieXRlW10gZG90cyA9IGNvbi5nZXRQYXJhbWV0ZXJzKCkucmVuZGVyZWRDZWxscy5nZXQoKTsKKyAgICAgICAgcHJpbnRmKCIlc1xuIiwgdG9Vbmljb2RlQnJhaWxsZShkb3RzKSk7CisKKyAgICAgICAgcGF1c2UoY29uKTsKKyAgICAgIH0KKyAgICApOworICB9Cit9CmRpZmYgLS1naXQgYS9CaW5kaW5ncy9KYXZhL2NvbW1hbmRzL0FwaVRvb2xDb21tYW5kLmphdmEgYi9CaW5kaW5ncy9KYXZhL2NvbW1hbmRzL0FwaVRvb2xDb21tYW5kLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjM4M2I3NAotLS0gL2Rldi9udWxsCisrKyBiL0JpbmRpbmdzL0phdmEvY29tbWFuZHMvQXBpVG9vbENvbW1hbmQuamF2YQpAQCAtMCwwICsxLDE1NyBAQAorLyoKKyAqIGxpYmJybGFwaSAtIEEgbGlicmFyeSBwcm92aWRpbmcgYWNjZXNzIHRvIGJyYWlsbGUgdGVybWluYWxzIGZvciBhcHBsaWNhdGlvbnMuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMjMgYnkKKyAqICAgU2FtdWVsIFRoaWJhdWx0IDxTYW11ZWwuVGhpYmF1bHRAZW5zLWx5b24ub3JnPgorICogICBTw6liYXN0aWVuIEhpbmRlcmVyIDxTZWJhc3RpZW4uSGluZGVyZXJAZW5zLWx5b24ub3JnPgorICoKKyAqIGxpYmJybGFwaSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorICoKKyAqIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyAqLworCitwYWNrYWdlIG9yZy5hMTF5LmJybGFwaS5jb21tYW5kczsKKworaW1wb3J0IGphdmEubGFuZy5yZWZsZWN0LkNvbnN0cnVjdG9yOworaW1wb3J0IGphdmEubGFuZy5yZWZsZWN0Lkludm9jYXRpb25UYXJnZXRFeGNlcHRpb247CitpbXBvcnQgb3JnLmExMXkuYnJsYXBpLio7CitpbXBvcnQgb3JnLmExMXkuYnJsYXBpLmNsaWVudHMuKjsKK2ltcG9ydCBvcmcuYTExeS5icmxhcGkucHJvZ3JhbXMuKjsKKworcHVibGljIGNsYXNzIEFwaVRvb2xDb21tYW5kIGV4dGVuZHMgUHJvZ3JhbSB7CisgIHByaXZhdGUgc3RhdGljIGZpbmFsIEtleXdvcmRNYXA8Q2xhc3M8PyBleHRlbmRzIFByb2dyYW0+PiBrbm93blByb2dyYW1zID0gbmV3IEtleXdvcmRNYXA8PigpOworCisgIHByaXZhdGUgc3RhdGljIHZvaWQgYWRkUHJvZ3JhbShDbGFzczw/IGV4dGVuZHMgUHJvZ3JhbT4gdHlwZSkgeworICAgIFN0cmluZyBuYW1lID0gdHlwZS5nZXRTaW1wbGVOYW1lKCk7CisKKyAgICBpZiAoaXNDbGllbnQodHlwZSkpIHsKKyAgICAgIG5hbWUgPSBTdHJpbmdzLnJlcGxhY2VBbGwobmFtZSwgIkNsaWVudCQiLCAiIik7CisgICAgfSBlbHNlIHsKKyAgICAgIG5hbWUgPSBTdHJpbmdzLnJlcGxhY2VBbGwobmFtZSwgIlByb2dyYW0kIiwgIiIpOworICAgIH0KKworICAgIG5hbWUgPSB0b09wZXJhbmROYW1lKFN0cmluZ3Mud29yZGlmeShuYW1lKSk7CisgICAga25vd25Qcm9ncmFtcy5wdXQobmFtZSwgdHlwZSk7CisgIH0KKworICBzdGF0aWMgeworICAgIGFkZFByb2dyYW0oQXBpRXJyb3JDbGllbnQuY2xhc3MpOworICAgIGFkZFByb2dyYW0oQXBpRXhjZXB0aW9uQ2xpZW50LmNsYXNzKTsKKyAgICBhZGRQcm9ncmFtKEJvdW5kQ29tbWFuZHNDbGllbnQuY2xhc3MpOworICAgIGFkZFByb2dyYW0oQ29tcHV0ZXJCcmFpbGxlQ2xpZW50LmNsYXNzKTsKKyAgICBhZGRQcm9ncmFtKERyaXZlcktleXNDbGllbnQuY2xhc3MpOworICAgIGFkZFByb2dyYW0oRWNob0NsaWVudC5jbGFzcyk7CisgICAgYWRkUHJvZ3JhbShHZXREcml2ZXJDbGllbnQuY2xhc3MpOworICAgIGFkZFByb2dyYW0oR2V0TW9kZWxDbGllbnQuY2xhc3MpOworICAgIGFkZFByb2dyYW0oR2V0U2l6ZUNsaWVudC5jbGFzcyk7CisgICAgYWRkUHJvZ3JhbShMaXN0UGFyYW1ldGVyc0NsaWVudC5jbGFzcyk7CisgICAgYWRkUHJvZ3JhbShQYXVzZUNsaWVudC5jbGFzcyk7CisgICAgYWRkUHJvZ3JhbShTZXRQYXJhbWV0ZXJDbGllbnQuY2xhc3MpOworICAgIGFkZFByb2dyYW0oVmVyc2lvblByb2dyYW0uY2xhc3MpOworICAgIGFkZFByb2dyYW0oV3JpdGVBcmd1bWVudHNDbGllbnQuY2xhc3MpOworICAgIGFkZFByb2dyYW0oV3JpdGVEb3RzQ2xpZW50LmNsYXNzKTsKKyAgICBhZGRQcm9ncmFtKFdyaXRlVGV4dENsaWVudC5jbGFzcyk7CisgIH0KKworICBwdWJsaWMgQXBpVG9vbENvbW1hbmQoU3RyaW5nLi4uIGFyZ3VtZW50cykgeworICAgIHN1cGVyKGFyZ3VtZW50cyk7CisgICAgYWRkUmVxdWlyZWRQYXJhbWV0ZXJzKCJwcm9ncmFtL2NsaWVudCIpOworICAgIGFkZFJlcGVhdGluZ1BhcmFtZXRlcigiYXJndW1lbnQiKTsKKyAgfQorCisgIEBPdmVycmlkZQorICBwdWJsaWMgU3RyaW5nIGdldFB1cnBvc2UoKSB7CisgICAgcmV0dXJuICJDb21tYW5kIGxpbmUgYWNjZXNzIHRvIHRoZSBmdW5jdGlvbmFsaXR5IHByb3ZpZGVkIGJ5IHRoZSBCcmxBUEkgaW50ZXJmYWNlLiI7CisgIH0KKworICBAT3ZlcnJpZGUKKyAgcHJvdGVjdGVkIGZpbmFsIHZvaWQgZXh0ZW5kVXNhZ2VTdW1tYXJ5KFN0cmluZ0J1aWxkZXIgdXNhZ2UpIHsKKyAgICBzdXBlci5leHRlbmRVc2FnZVN1bW1hcnkodXNhZ2UpOworCisgICAgaWYgKGtub3duUHJvZ3JhbXMuaXNFbXB0eSgpKSB7CisgICAgICB1c2FnZS5hcHBlbmQoIlxuTm8gcHJvZ3JhbXMgb3IgY2xpZW50cyBoYXZlIGJlZW4gZGVmaW5lZC4iKTsKKyAgICB9IGVsc2UgeworICAgICAgdXNhZ2UKKyAgICAgICAgICAuYXBwZW5kKCJcblRoZXNlIHByb2dyYW1zIGFuZCBjbGllbnRzIGhhdmUgYmVlbiBkZWZpbmVkIikKKyAgICAgICAgICAuYXBwZW5kKCIgKGVhY2ggaGFzIGl0cyBvd24gLWhlbHAgb3B0aW9uKToiKTsKKworICAgICAgZm9yIChTdHJpbmcgbmFtZSA6IGtub3duUHJvZ3JhbXMuZ2V0S2V5d29yZHMoKSkgeworICAgICAgICB1c2FnZS5hcHBlbmQoIlxuICAiKS5hcHBlbmQobmFtZSk7CisgICAgICB9CisgICAgfQorICB9CisKKyAgcHJpdmF0ZSBTdHJpbmcgcHJvZ3JhbU5hbWUgPSBudWxsOworICBwcml2YXRlIENsYXNzPD8gZXh0ZW5kcyBQcm9ncmFtPiBwcm9ncmFtVHlwZSA9IG51bGw7CisgIHByaXZhdGUgU3RyaW5nW10gcHJvZ3JhbUFyZ3VtZW50cyA9IG51bGw7CisKKyAgQE92ZXJyaWRlCisgIHByb3RlY3RlZCBmaW5hbCB2b2lkIHByb2Nlc3NQYXJhbWV0ZXJzKFN0cmluZ1tdIHBhcmFtZXRlcnMpIHRocm93cyBTeW50YXhFeGNlcHRpb24geworICAgIGludCBjb3VudCA9IHBhcmFtZXRlcnMubGVuZ3RoOworCisgICAgaWYgKGNvdW50ID09IDApIHsKKyAgICAgIHRocm93IG5ldyBTeW50YXhFeGNlcHRpb24oIm1pc3NpbmcgcHJvZ3JhbS9jbGllbnQgbmFtZSIpOworICAgIH0KKworICAgIHByb2dyYW1OYW1lID0gcGFyYW1ldGVyc1swXTsKKyAgICBwcm9ncmFtVHlwZSA9IGtub3duUHJvZ3JhbXMuZ2V0KHByb2dyYW1OYW1lKTsKKworICAgIGlmIChwcm9ncmFtVHlwZSA9PSBudWxsKSB7CisgICAgICB0aHJvdyBuZXcgU3ludGF4RXhjZXB0aW9uKCJ1bmtub3duIHByb2dyYW0vY2xpZW50OiAlcyIsIHByb2dyYW1OYW1lKTsKKyAgICB9CisKKyAgICBjb3VudCAtPSAxOworICAgIHByb2dyYW1Bcmd1bWVudHMgPSBuZXcgU3RyaW5nW2NvdW50XTsKKyAgICBTeXN0ZW0uYXJyYXljb3B5KHBhcmFtZXRlcnMsIDEsIHByb2dyYW1Bcmd1bWVudHMsIDAsIGNvdW50KTsKKyAgfQorCisgIEBPdmVycmlkZQorICBwcm90ZWN0ZWQgZmluYWwgdm9pZCBydW5Qcm9ncmFtKCkgdGhyb3dzIFByb2dyYW1FeGNlcHRpb24geworICAgIFN0cmluZyBvYmplY3ROYW1lID0gZ2V0T2JqZWN0TmFtZSgpOworICAgIFByb2dyYW0gcHJvZ3JhbSA9IG51bGw7CisKKyAgICB0cnkgeworICAgICAgQ29uc3RydWN0b3I8PyBleHRlbmRzIFByb2dyYW0+IGNvbnN0cnVjdG9yID0KKyAgICAgICAgICBwcm9ncmFtVHlwZS5nZXRDb25zdHJ1Y3Rvcihwcm9ncmFtQXJndW1lbnRzLmdldENsYXNzKCkpOworCisgICAgICBwcm9ncmFtID0gKFByb2dyYW0pIGNvbnN0cnVjdG9yLm5ld0luc3RhbmNlKChPYmplY3QpIHByb2dyYW1Bcmd1bWVudHMpOworICAgIH0gY2F0Y2ggKE5vU3VjaE1ldGhvZEV4Y2VwdGlvbiBleGNlcHRpb24pIHsKKyAgICAgIHRocm93IG5ldyBQcm9ncmFtRXhjZXB0aW9uKCJjb25zdHJ1Y3RvciBub3QgZm91bmQ6ICVzIiwgb2JqZWN0TmFtZSk7CisgICAgfSBjYXRjaCAoSW5zdGFudGlhdGlvbkV4Y2VwdGlvbiBleGNlcHRpb24pIHsKKyAgICAgIHRocm93IG5ldyBQcm9ncmFtRXhjZXB0aW9uKAorICAgICAgICAgICJpbnN0YW50aWF0aW9uIGZhaWxlZDogJXM6ICVzIiwgb2JqZWN0TmFtZSwgZXhjZXB0aW9uLmdldE1lc3NhZ2UoKSk7CisgICAgfSBjYXRjaCAoSWxsZWdhbEFjY2Vzc0V4Y2VwdGlvbiBleGNlcHRpb24pIHsKKyAgICAgIHRocm93IG5ldyBQcm9ncmFtRXhjZXB0aW9uKCJhY2Nlc3MgZGVuaWVkOiAlczogJXMiLCBvYmplY3ROYW1lLCBleGNlcHRpb24uZ2V0TWVzc2FnZSgpKTsKKyAgICB9IGNhdGNoIChJbnZvY2F0aW9uVGFyZ2V0RXhjZXB0aW9uIGV4Y2VwdGlvbikgeworICAgICAgVGhyb3dhYmxlIGNhdXNlID0gZXhjZXB0aW9uLmdldENhdXNlKCk7CisKKyAgICAgIFN0cmluZyBtZXNzYWdlID0KKyAgICAgICAgICBTdHJpbmcuZm9ybWF0KAorICAgICAgICAgICAgICAiY29uc3RydWN0aW9uIGZhaWxlZDogJXM6ICVzIiwgb2JqZWN0TmFtZSwgY2F1c2UuZ2V0Q2xhc3MoKS5nZXRTaW1wbGVOYW1lKCkpOworCisgICAgICB7CisgICAgICAgIFN0cmluZyBwcm9ibGVtID0gY2F1c2UuZ2V0TWVzc2FnZSgpOworICAgICAgICBpZiAocHJvYmxlbSAhPSBudWxsKSBtZXNzYWdlICs9ICI6ICIgKyBwcm9ibGVtOworICAgICAgfQorCisgICAgICB0aHJvdyBuZXcgUHJvZ3JhbUV4Y2VwdGlvbihtZXNzYWdlKTsKKyAgICB9CisKKyAgICBwcm9ncmFtLnNldFByb2dyYW1OYW1lKHByb2dyYW1OYW1lKS5ydW4oKTsKKyAgfQorCisgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZy4uLiBhcmd1bWVudHMpIHsKKyAgICB0cnkgeworICAgICAgbmV3IEFwaVRvb2xDb21tYW5kKGFyZ3VtZW50cykuc2V0UHJvZ3JhbU5hbWUoImFwaXRvb2wiKS5ydW4oKTsKKyAgICB9IGNhdGNoIChFeGl0RXhjZXB0aW9uIGV4Y2VwdGlvbikgeworICAgICAgU3lzdGVtLmV4aXQoZXhjZXB0aW9uLmdldEV4aXRDb2RlKCkpOworICAgIH0KKyAgfQorfQpkaWZmIC0tZ2l0IGEvQmluZGluZ3MvSmF2YS9jb25zdGFudHMuYXdrIGIvQmluZGluZ3MvSmF2YS9jb25zdGFudHMuYXdrCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVmOGU2ODcKLS0tIC9kZXYvbnVsbAorKysgYi9CaW5kaW5ncy9KYXZhL2NvbnN0YW50cy5hd2sKQEAgLTAsMCArMSwxMTkgQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgbGliYnJsYXBpIC0gQSBsaWJyYXJ5IHByb3ZpZGluZyBhY2Nlc3MgdG8gYnJhaWxsZSB0ZXJtaW5hbHMgZm9yIGFwcGxpY2F0aW9ucy4KKyMKKyMgQ29weXJpZ2h0IChDKSAyMDA2LTIwMjMgYnkKKyMgICBTYW11ZWwgVGhpYmF1bHQgPFNhbXVlbC5UaGliYXVsdEBlbnMtbHlvbi5vcmc+CisjICAgU8OpYmFzdGllbiBIaW5kZXJlciA8U2ViYXN0aWVuLkhpbmRlcmVyQGVucy1seW9uLm9yZz4KKyMKKyMgbGliYnJsYXBpIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitCRUdJTiB7CisgIHByaW50ICJwYWNrYWdlIG9yZy5hMTF5LmJybGFwaTsiCisgIHByaW50ICIiCisgIHByaW50ICJwdWJsaWMgaW50ZXJmYWNlIENvbnN0YW50cyB7IgorfQorCitFTkQgeworICBwcmludCAifSIKK30KKworZnVuY3Rpb24gYnJsQ29tbWFuZChuYW1lLCBzeW1ib2wsIHZhbHVlLCBoZWxwKSB7CisgIHdyaXRlQ29tbWFuZERlZmluaXRpb24obmFtZSwgdmFsdWUsIGhlbHApCit9CisKK2Z1bmN0aW9uIGJybEJsb2NrKG5hbWUsIHN5bWJvbCwgdmFsdWUsIGhlbHApIHsKKyAgaWYgKG5hbWUgPT0gIlBBU1NDSEFSIikgcmV0dXJuCisgIGlmIChuYW1lID09ICJQQVNTS0VZIikgcmV0dXJuCisKKyAgd3JpdGVDb21tYW5kRGVmaW5pdGlvbihuYW1lLCAiKCIgdmFsdWUgIiA8PCBLRVlfQ01EX0JMS19TSElGVCkiLCBoZWxwKQorfQorCitmdW5jdGlvbiBicmxLZXkobmFtZSwgc3ltYm9sLCB2YWx1ZSwgaGVscCkgeworfQorCitmdW5jdGlvbiBicmxGbGFnKG5hbWUsIHN5bWJvbCwgdmFsdWUsIGhlbHApIHsKKyAgaWYgKHZhbHVlIH4gL14wW3hYXVswLTlhLWZBLUZdKzAwMDAkLykgeworICAgIHZhbHVlID0gaGV4YWRlY2ltYWxWYWx1ZShzdWJzdHIodmFsdWUsIDEsIGxlbmd0aCh2YWx1ZSktNCkpCisgICAgaWYgKG5hbWUgfiAvXkNIQVJfLykgeworICAgICAgbmFtZSA9IHN1YnN0cihuYW1lLCA2KQorICAgIH0gZWxzZSB7CisgICAgICB2YWx1ZSA9IHZhbHVlICIwMCIKKyAgICB9CisgIH0gZWxzZSBpZiAodmFsdWUgfiAvXlwoLykgeworICAgIGdzdWIoIkJSTF9GTEdfIiwgIktFWV9GTEdfIiwgdmFsdWUpCisgIH0gZWxzZSB7CisgICAgcmV0dXJuCisgIH0KKyAgd3JpdGVKYXZhQ29uc3RhbnQoImludCIsICJLRVlfRkxHXyIgbmFtZSwgdmFsdWUsIGhlbHApCit9CisKK2Z1bmN0aW9uIGJybERvdChudW1iZXIsIHN5bWJvbCwgdmFsdWUsIGhlbHApIHsKKyAgd3JpdGVKYXZhQ29uc3RhbnQoImludCIsICJET1QiIG51bWJlciwgdmFsdWUsIGhlbHApCit9CisKK2Z1bmN0aW9uIGFwaUNvbnN0YW50KG5hbWUsIHN5bWJvbCwgdmFsdWUsIGhlbHApIHsKKyAgd3JpdGVKYXZhQ29uc3RhbnQoImludCIsIG5hbWUsIHZhbHVlLCBoZWxwKTsKK30KKworZnVuY3Rpb24gYXBpTWFzayhuYW1lLCBzeW1ib2wsIHZhbHVlLCBoZWxwKSB7CisgIHdyaXRlSmF2YUNvbnN0YW50KCJsb25nIiwgIktFWV8iIG5hbWUsIGhleGFkZWNpbWFsVmFsdWUodmFsdWUpICJMIik7Cit9CisKK2Z1bmN0aW9uIGFwaVNoaWZ0KG5hbWUsIHN5bWJvbCwgdmFsdWUsIGhlbHApIHsKKyAgd3JpdGVKYXZhQ29uc3RhbnQoImludCIsICJLRVlfIiBuYW1lLCBoZXhhZGVjaW1hbFZhbHVlKHZhbHVlKSk7Cit9CisKK2Z1bmN0aW9uIGFwaVR5cGUobmFtZSwgc3ltYm9sLCB2YWx1ZSwgaGVscCkgeworICB3cml0ZUphdmFDb25zdGFudCgiaW50IiwgIktFWV9UWVBFXyIgbmFtZSwgaGV4YWRlY2ltYWxWYWx1ZSh2YWx1ZSkpOworfQorCitmdW5jdGlvbiBhcGlLZXkobmFtZSwgc3ltYm9sLCB2YWx1ZSwgaGVscCkgeworICB2YWx1ZSA9IGhleGFkZWNpbWFsVmFsdWUodmFsdWUpCisKKyAgaWYgKG5hbWUgPT0gIkZVTkNUSU9OIikgeworICAgIGZvciAoaT0wOyBpPDM1OyArK2kpIHsKKyAgICAgIHdyaXRlS2V5RGVmaW5pdGlvbigiRiIgKGkrMSksICIoIiB2YWx1ZSAiICsgIiBpICIpIikKKyAgICB9CisgIH0gZWxzZSB7CisgICAgd3JpdGVLZXlEZWZpbml0aW9uKG5hbWUsIHZhbHVlKQorICB9Cit9CisKK2Z1bmN0aW9uIGFwaVJhbmdlVHlwZShuYW1lLCBzeW1ib2wsIHZhbHVlLCBoZWxwKSB7CisgIHdyaXRlSmF2YUNvbnN0YW50KCJpbnQiLCAicmFuZ2VUeXBlXyIgbmFtZSwgdmFsdWUsIGhlbHApCit9CisKK2Z1bmN0aW9uIHdyaXRlQ29tbWFuZERlZmluaXRpb24obmFtZSwgdmFsdWUsIGhlbHApIHsKKyAgd3JpdGVKYXZhQ29uc3RhbnQoImludCIsICJLRVlfQ01EXyIgbmFtZSwgdmFsdWUsIGhlbHApCit9CisKK2Z1bmN0aW9uIHdyaXRlS2V5RGVmaW5pdGlvbihuYW1lLCB2YWx1ZSkgeworICB3cml0ZUphdmFDb25zdGFudCgiaW50IiwgIktFWV9TWU1fIiBuYW1lLCB2YWx1ZSkKK30KKworZnVuY3Rpb24gd3JpdGVKYXZhQ29uc3RhbnQodHlwZSwgbmFtZSwgdmFsdWUsIGhlbHApIHsKKyAgd3JpdGVKYXZhZG9jQ29tbWVudChoZWxwKQorICBwcmludCAiICAiIHR5cGUgIiAiIG5hbWUgIiA9ICIgdmFsdWUgIjsiCit9CisKK2Z1bmN0aW9uIHdyaXRlSmF2YWRvY0NvbW1lbnQodGV4dCkgeworICBpZiAobGVuZ3RoKHRleHQpID4gMCkgcHJpbnQgIiAgLyoqICIgdGV4dCAiICovIgorfQorCitmdW5jdGlvbiBoZXhhZGVjaW1hbFZhbHVlKHZhbHVlKSB7CisgIHZhbHVlID0gdG9sb3dlcih2YWx1ZSkKKyAgZ3N1YigieDArIiwgIngiLCB2YWx1ZSkKKyAgZ3N1YigieCQiLCAieDAiLCB2YWx1ZSkKKyAgcmV0dXJuIHZhbHVlCit9CisKZGlmZiAtLWdpdCBhL0JpbmRpbmdzL0phdmEvbWFuaWZlc3QgYi9CaW5kaW5ncy9KYXZhL21hbmlmZXN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJmNzczYWUKLS0tIC9kZXYvbnVsbAorKysgYi9CaW5kaW5ncy9KYXZhL21hbmlmZXN0CkBAIC0wLDAgKzEgQEAKK01haW4tQ2xhc3M6IG9yZy5hMTF5LmJybGFwaS5jb21tYW5kcy5BcGlUb29sQ29tbWFuZApkaWZmIC0tZ2l0IGEvQmluZGluZ3MvSmF2YS9wYXJhbWV0ZXJzL0F1ZGlibGVBbGVydHNQYXJhbWV0ZXIuamF2YSBiL0JpbmRpbmdzL0phdmEvcGFyYW1ldGVycy9BdWRpYmxlQWxlcnRzUGFyYW1ldGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDYxMWJmNgotLS0gL2Rldi9udWxsCisrKyBiL0JpbmRpbmdzL0phdmEvcGFyYW1ldGVycy9BdWRpYmxlQWxlcnRzUGFyYW1ldGVyLmphdmEKQEAgLTAsMCArMSw0MyBAQAorLyoKKyAqIGxpYmJybGFwaSAtIEEgbGlicmFyeSBwcm92aWRpbmcgYWNjZXNzIHRvIGJyYWlsbGUgdGVybWluYWxzIGZvciBhcHBsaWNhdGlvbnMuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMjMgYnkKKyAqICAgU2FtdWVsIFRoaWJhdWx0IDxTYW11ZWwuVGhpYmF1bHRAZW5zLWx5b24ub3JnPgorICogICBTw6liYXN0aWVuIEhpbmRlcmVyIDxTZWJhc3RpZW4uSGluZGVyZXJAZW5zLWx5b24ub3JnPgorICoKKyAqIGxpYmJybGFwaSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorICoKKyAqIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyAqLworCitwYWNrYWdlIG9yZy5hMTF5LmJybGFwaS5wYXJhbWV0ZXJzOworCitpbXBvcnQgb3JnLmExMXkuYnJsYXBpLio7CisKK3B1YmxpYyBjbGFzcyBBdWRpYmxlQWxlcnRzUGFyYW1ldGVyIGV4dGVuZHMgR2xvYmFsUGFyYW1ldGVyIGltcGxlbWVudHMgUGFyYW1ldGVyLkJvb2xlYW5TZXR0YWJsZSB7CisgIHB1YmxpYyBBdWRpYmxlQWxlcnRzUGFyYW1ldGVyIChDb25uZWN0aW9uQmFzZSBjb25uZWN0aW9uKSB7CisgICAgc3VwZXIoY29ubmVjdGlvbik7CisgIH0KKworICBAT3ZlcnJpZGUKKyAgcHVibGljIGZpbmFsIGludCBnZXRQYXJhbWV0ZXIgKCkgeworICAgIHJldHVybiBDb25zdGFudHMuUEFSQU1fQVVESUJMRV9BTEVSVFM7CisgIH0KKworICBAT3ZlcnJpZGUKKyAgcHVibGljIGZpbmFsIEJvb2xlYW4gZ2V0ICgpIHsKKyAgICByZXR1cm4gYXNCb29sZWFuKGdldFZhbHVlKCkpOworICB9CisKKyAgQE92ZXJyaWRlCisgIHB1YmxpYyBmaW5hbCB2b2lkIHNldCAoYm9vbGVhbiB5ZXMpIHsKKyAgICBzZXRWYWx1ZShuZXcgYm9vbGVhbltdIHt5ZXN9KTsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvQmluZGluZ3MvSmF2YS9wYXJhbWV0ZXJzL0JvdW5kQ29tbWFuZEtleWNvZGVzUGFyYW1ldGVyLmphdmEgYi9CaW5kaW5ncy9KYXZhL3BhcmFtZXRlcnMvQm91bmRDb21tYW5kS2V5Y29kZXNQYXJhbWV0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kOTgxOTE0Ci0tLSAvZGV2L251bGwKKysrIGIvQmluZGluZ3MvSmF2YS9wYXJhbWV0ZXJzL0JvdW5kQ29tbWFuZEtleWNvZGVzUGFyYW1ldGVyLmphdmEKQEAgLTAsMCArMSw0MyBAQAorLyoKKyAqIGxpYmJybGFwaSAtIEEgbGlicmFyeSBwcm92aWRpbmcgYWNjZXNzIHRvIGJyYWlsbGUgdGVybWluYWxzIGZvciBhcHBsaWNhdGlvbnMuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMjMgYnkKKyAqICAgU2FtdWVsIFRoaWJhdWx0IDxTYW11ZWwuVGhpYmF1bHRAZW5zLWx5b24ub3JnPgorICogICBTw6liYXN0aWVuIEhpbmRlcmVyIDxTZWJhc3RpZW4uSGluZGVyZXJAZW5zLWx5b24ub3JnPgorICoKKyAqIGxpYmJybGFwaSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorICoKKyAqIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyAqLworCitwYWNrYWdlIG9yZy5hMTF5LmJybGFwaS5wYXJhbWV0ZXJzOworCitpbXBvcnQgb3JnLmExMXkuYnJsYXBpLio7CisKK3B1YmxpYyBjbGFzcyBCb3VuZENvbW1hbmRLZXljb2Rlc1BhcmFtZXRlciBleHRlbmRzIEdsb2JhbFBhcmFtZXRlciB7CisgIHB1YmxpYyBCb3VuZENvbW1hbmRLZXljb2Rlc1BhcmFtZXRlciAoQ29ubmVjdGlvbkJhc2UgY29ubmVjdGlvbikgeworICAgIHN1cGVyKGNvbm5lY3Rpb24pOworICB9CisKKyAgQE92ZXJyaWRlCisgIHB1YmxpYyBmaW5hbCBpbnQgZ2V0UGFyYW1ldGVyICgpIHsKKyAgICByZXR1cm4gQ29uc3RhbnRzLlBBUkFNX0JPVU5EX0NPTU1BTkRfS0VZQ09ERVM7CisgIH0KKworICBAT3ZlcnJpZGUKKyAgcHVibGljIGJvb2xlYW4gaXNIaWRhYmxlICgpIHsKKyAgICByZXR1cm4gdHJ1ZTsKKyAgfQorCisgIEBPdmVycmlkZQorICBwdWJsaWMgZmluYWwgbG9uZ1tdIGdldCAoKSB7CisgICAgcmV0dXJuIGFzTG9uZ0FycmF5KGdldFZhbHVlKCkpOworICB9Cit9CmRpZmYgLS1naXQgYS9CaW5kaW5ncy9KYXZhL3BhcmFtZXRlcnMvQ2xpZW50UHJpb3JpdHlQYXJhbWV0ZXIuamF2YSBiL0JpbmRpbmdzL0phdmEvcGFyYW1ldGVycy9DbGllbnRQcmlvcml0eVBhcmFtZXRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQzNzg3NTAKLS0tIC9kZXYvbnVsbAorKysgYi9CaW5kaW5ncy9KYXZhL3BhcmFtZXRlcnMvQ2xpZW50UHJpb3JpdHlQYXJhbWV0ZXIuamF2YQpAQCAtMCwwICsxLDQzIEBACisvKgorICogbGliYnJsYXBpIC0gQSBsaWJyYXJ5IHByb3ZpZGluZyBhY2Nlc3MgdG8gYnJhaWxsZSB0ZXJtaW5hbHMgZm9yIGFwcGxpY2F0aW9ucy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAyMyBieQorICogICBTYW11ZWwgVGhpYmF1bHQgPFNhbXVlbC5UaGliYXVsdEBlbnMtbHlvbi5vcmc+CisgKiAgIFPDqWJhc3RpZW4gSGluZGVyZXIgPFNlYmFzdGllbi5IaW5kZXJlckBlbnMtbHlvbi5vcmc+CisgKgorICogbGliYnJsYXBpIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKK3BhY2thZ2Ugb3JnLmExMXkuYnJsYXBpLnBhcmFtZXRlcnM7CisKK2ltcG9ydCBvcmcuYTExeS5icmxhcGkuKjsKKworcHVibGljIGNsYXNzIENsaWVudFByaW9yaXR5UGFyYW1ldGVyIGV4dGVuZHMgTG9jYWxQYXJhbWV0ZXIgaW1wbGVtZW50cyBQYXJhbWV0ZXIuSW50U2V0dGFibGUgeworICBwdWJsaWMgQ2xpZW50UHJpb3JpdHlQYXJhbWV0ZXIgKENvbm5lY3Rpb25CYXNlIGNvbm5lY3Rpb24pIHsKKyAgICBzdXBlcihjb25uZWN0aW9uKTsKKyAgfQorCisgIEBPdmVycmlkZQorICBwdWJsaWMgZmluYWwgaW50IGdldFBhcmFtZXRlciAoKSB7CisgICAgcmV0dXJuIENvbnN0YW50cy5QQVJBTV9DTElFTlRfUFJJT1JJVFk7CisgIH0KKworICBAT3ZlcnJpZGUKKyAgcHVibGljIGZpbmFsIEludGVnZXIgZ2V0ICgpIHsKKyAgICByZXR1cm4gYXNJbnQoZ2V0VmFsdWUoKSk7CisgIH0KKworICBAT3ZlcnJpZGUKKyAgcHVibGljIGZpbmFsIHZvaWQgc2V0IChpbnQgcHJpb3JpdHkpIHsKKyAgICBzZXRWYWx1ZShuZXcgaW50W10ge3ByaW9yaXR5fSk7CisgIH0KK30KZGlmZiAtLWdpdCBhL0JpbmRpbmdzL0phdmEvcGFyYW1ldGVycy9DbGlwYm9hcmRDb250ZW50UGFyYW1ldGVyLmphdmEgYi9CaW5kaW5ncy9KYXZhL3BhcmFtZXRlcnMvQ2xpcGJvYXJkQ29udGVudFBhcmFtZXRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQzZDgzZjUKLS0tIC9kZXYvbnVsbAorKysgYi9CaW5kaW5ncy9KYXZhL3BhcmFtZXRlcnMvQ2xpcGJvYXJkQ29udGVudFBhcmFtZXRlci5qYXZhCkBAIC0wLDAgKzEsNDMgQEAKKy8qCisgKiBsaWJicmxhcGkgLSBBIGxpYnJhcnkgcHJvdmlkaW5nIGFjY2VzcyB0byBicmFpbGxlIHRlcm1pbmFscyBmb3IgYXBwbGljYXRpb25zLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNi0yMDIzIGJ5CisgKiAgIFNhbXVlbCBUaGliYXVsdCA8U2FtdWVsLlRoaWJhdWx0QGVucy1seW9uLm9yZz4KKyAqICAgU8OpYmFzdGllbiBIaW5kZXJlciA8U2ViYXN0aWVuLkhpbmRlcmVyQGVucy1seW9uLm9yZz4KKyAqCisgKiBsaWJicmxhcGkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorICoKKyAqIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyAqCisgKiBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisgKi8KKworcGFja2FnZSBvcmcuYTExeS5icmxhcGkucGFyYW1ldGVyczsKKworaW1wb3J0IG9yZy5hMTF5LmJybGFwaS4qOworCitwdWJsaWMgY2xhc3MgQ2xpcGJvYXJkQ29udGVudFBhcmFtZXRlciBleHRlbmRzIEdsb2JhbFBhcmFtZXRlciBpbXBsZW1lbnRzIFBhcmFtZXRlci5TdHJpbmdTZXR0YWJsZSB7CisgIHB1YmxpYyBDbGlwYm9hcmRDb250ZW50UGFyYW1ldGVyIChDb25uZWN0aW9uQmFzZSBjb25uZWN0aW9uKSB7CisgICAgc3VwZXIoY29ubmVjdGlvbik7CisgIH0KKworICBAT3ZlcnJpZGUKKyAgcHVibGljIGZpbmFsIGludCBnZXRQYXJhbWV0ZXIgKCkgeworICAgIHJldHVybiBDb25zdGFudHMuUEFSQU1fQ0xJUEJPQVJEX0NPTlRFTlQ7CisgIH0KKworICBAT3ZlcnJpZGUKKyAgcHVibGljIGZpbmFsIFN0cmluZyBnZXQgKCkgeworICAgIHJldHVybiBhc1N0cmluZyhnZXRWYWx1ZSgpKTsKKyAgfQorCisgIEBPdmVycmlkZQorICBwdWJsaWMgZmluYWwgdm9pZCBzZXQgKFN0cmluZyB0ZXh0KSB7CisgICAgc2V0VmFsdWUodGV4dCk7CisgIH0KK30KZGlmZiAtLWdpdCBhL0JpbmRpbmdzL0phdmEvcGFyYW1ldGVycy9Db21tYW5kS2V5Y29kZU5hbWVQYXJhbWV0ZXIuamF2YSBiL0JpbmRpbmdzL0phdmEvcGFyYW1ldGVycy9Db21tYW5kS2V5Y29kZU5hbWVQYXJhbWV0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ODA4ZjA2Ci0tLSAvZGV2L251bGwKKysrIGIvQmluZGluZ3MvSmF2YS9wYXJhbWV0ZXJzL0NvbW1hbmRLZXljb2RlTmFtZVBhcmFtZXRlci5qYXZhCkBAIC0wLDAgKzEsMzggQEAKKy8qCisgKiBsaWJicmxhcGkgLSBBIGxpYnJhcnkgcHJvdmlkaW5nIGFjY2VzcyB0byBicmFpbGxlIHRlcm1pbmFscyBmb3IgYXBwbGljYXRpb25zLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNi0yMDIzIGJ5CisgKiAgIFNhbXVlbCBUaGliYXVsdCA8U2FtdWVsLlRoaWJhdWx0QGVucy1seW9uLm9yZz4KKyAqICAgU8OpYmFzdGllbiBIaW5kZXJlciA8U2ViYXN0aWVuLkhpbmRlcmVyQGVucy1seW9uLm9yZz4KKyAqCisgKiBsaWJicmxhcGkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorICoKKyAqIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyAqCisgKiBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisgKi8KKworcGFja2FnZSBvcmcuYTExeS5icmxhcGkucGFyYW1ldGVyczsKKworaW1wb3J0IG9yZy5hMTF5LmJybGFwaS4qOworCitwdWJsaWMgY2xhc3MgQ29tbWFuZEtleWNvZGVOYW1lUGFyYW1ldGVyIGV4dGVuZHMgR2xvYmFsUGFyYW1ldGVyIHsKKyAgcHVibGljIENvbW1hbmRLZXljb2RlTmFtZVBhcmFtZXRlciAoQ29ubmVjdGlvbkJhc2UgY29ubmVjdGlvbikgeworICAgIHN1cGVyKGNvbm5lY3Rpb24pOworICB9CisKKyAgQE92ZXJyaWRlCisgIHB1YmxpYyBmaW5hbCBpbnQgZ2V0UGFyYW1ldGVyICgpIHsKKyAgICByZXR1cm4gQ29uc3RhbnRzLlBBUkFNX0NPTU1BTkRfS0VZQ09ERV9OQU1FOworICB9CisKKyAgQE92ZXJyaWRlCisgIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0IChsb25nIGNvZGUpIHsKKyAgICByZXR1cm4gYXNTdHJpbmcoZ2V0VmFsdWUoY29kZSkpOworICB9Cit9CmRpZmYgLS1naXQgYS9CaW5kaW5ncy9KYXZhL3BhcmFtZXRlcnMvQ29tbWFuZEtleWNvZGVTdW1tYXJ5UGFyYW1ldGVyLmphdmEgYi9CaW5kaW5ncy9KYXZhL3BhcmFtZXRlcnMvQ29tbWFuZEtleWNvZGVTdW1tYXJ5UGFyYW1ldGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDY5YzUxNwotLS0gL2Rldi9udWxsCisrKyBiL0JpbmRpbmdzL0phdmEvcGFyYW1ldGVycy9Db21tYW5kS2V5Y29kZVN1bW1hcnlQYXJhbWV0ZXIuamF2YQpAQCAtMCwwICsxLDM4IEBACisvKgorICogbGliYnJsYXBpIC0gQSBsaWJyYXJ5IHByb3ZpZGluZyBhY2Nlc3MgdG8gYnJhaWxsZSB0ZXJtaW5hbHMgZm9yIGFwcGxpY2F0aW9ucy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAyMyBieQorICogICBTYW11ZWwgVGhpYmF1bHQgPFNhbXVlbC5UaGliYXVsdEBlbnMtbHlvbi5vcmc+CisgKiAgIFPDqWJhc3RpZW4gSGluZGVyZXIgPFNlYmFzdGllbi5IaW5kZXJlckBlbnMtbHlvbi5vcmc+CisgKgorICogbGliYnJsYXBpIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKK3BhY2thZ2Ugb3JnLmExMXkuYnJsYXBpLnBhcmFtZXRlcnM7CisKK2ltcG9ydCBvcmcuYTExeS5icmxhcGkuKjsKKworcHVibGljIGNsYXNzIENvbW1hbmRLZXljb2RlU3VtbWFyeVBhcmFtZXRlciBleHRlbmRzIEdsb2JhbFBhcmFtZXRlciB7CisgIHB1YmxpYyBDb21tYW5kS2V5Y29kZVN1bW1hcnlQYXJhbWV0ZXIgKENvbm5lY3Rpb25CYXNlIGNvbm5lY3Rpb24pIHsKKyAgICBzdXBlcihjb25uZWN0aW9uKTsKKyAgfQorCisgIEBPdmVycmlkZQorICBwdWJsaWMgZmluYWwgaW50IGdldFBhcmFtZXRlciAoKSB7CisgICAgcmV0dXJuIENvbnN0YW50cy5QQVJBTV9DT01NQU5EX0tFWUNPREVfU1VNTUFSWTsKKyAgfQorCisgIEBPdmVycmlkZQorICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldCAobG9uZyBjb2RlKSB7CisgICAgcmV0dXJuIGFzU3RyaW5nKGdldFZhbHVlKGNvZGUpKTsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvQmluZGluZ3MvSmF2YS9wYXJhbWV0ZXJzL0NvbXB1dGVyQnJhaWxsZUNlbGxTaXplUGFyYW1ldGVyLmphdmEgYi9CaW5kaW5ncy9KYXZhL3BhcmFtZXRlcnMvQ29tcHV0ZXJCcmFpbGxlQ2VsbFNpemVQYXJhbWV0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZGQxYzA1Ci0tLSAvZGV2L251bGwKKysrIGIvQmluZGluZ3MvSmF2YS9wYXJhbWV0ZXJzL0NvbXB1dGVyQnJhaWxsZUNlbGxTaXplUGFyYW1ldGVyLmphdmEKQEAgLTAsMCArMSw0MyBAQAorLyoKKyAqIGxpYmJybGFwaSAtIEEgbGlicmFyeSBwcm92aWRpbmcgYWNjZXNzIHRvIGJyYWlsbGUgdGVybWluYWxzIGZvciBhcHBsaWNhdGlvbnMuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMjMgYnkKKyAqICAgU2FtdWVsIFRoaWJhdWx0IDxTYW11ZWwuVGhpYmF1bHRAZW5zLWx5b24ub3JnPgorICogICBTw6liYXN0aWVuIEhpbmRlcmVyIDxTZWJhc3RpZW4uSGluZGVyZXJAZW5zLWx5b24ub3JnPgorICoKKyAqIGxpYmJybGFwaSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorICoKKyAqIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyAqLworCitwYWNrYWdlIG9yZy5hMTF5LmJybGFwaS5wYXJhbWV0ZXJzOworCitpbXBvcnQgb3JnLmExMXkuYnJsYXBpLio7CisKK3B1YmxpYyBjbGFzcyBDb21wdXRlckJyYWlsbGVDZWxsU2l6ZVBhcmFtZXRlciBleHRlbmRzIEdsb2JhbFBhcmFtZXRlciBpbXBsZW1lbnRzIFBhcmFtZXRlci5CeXRlU2V0dGFibGUgeworICBwdWJsaWMgQ29tcHV0ZXJCcmFpbGxlQ2VsbFNpemVQYXJhbWV0ZXIgKENvbm5lY3Rpb25CYXNlIGNvbm5lY3Rpb24pIHsKKyAgICBzdXBlcihjb25uZWN0aW9uKTsKKyAgfQorCisgIEBPdmVycmlkZQorICBwdWJsaWMgZmluYWwgaW50IGdldFBhcmFtZXRlciAoKSB7CisgICAgcmV0dXJuIENvbnN0YW50cy5QQVJBTV9DT01QVVRFUl9CUkFJTExFX0NFTExfU0laRTsKKyAgfQorCisgIEBPdmVycmlkZQorICBwdWJsaWMgZmluYWwgQnl0ZSBnZXQgKCkgeworICAgIHJldHVybiBhc0J5dGUoZ2V0VmFsdWUoKSk7CisgIH0KKworICBAT3ZlcnJpZGUKKyAgcHVibGljIGZpbmFsIHZvaWQgc2V0IChieXRlIHNpemUpIHsKKyAgICBzZXRWYWx1ZShuZXcgYnl0ZVtdIHtzaXplfSk7CisgIH0KK30KZGlmZiAtLWdpdCBhL0JpbmRpbmdzL0phdmEvcGFyYW1ldGVycy9Db21wdXRlckJyYWlsbGVSb3dDZWxsc1BhcmFtZXRlci5qYXZhIGIvQmluZGluZ3MvSmF2YS9wYXJhbWV0ZXJzL0NvbXB1dGVyQnJhaWxsZVJvd0NlbGxzUGFyYW1ldGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDA1NjRiMwotLS0gL2Rldi9udWxsCisrKyBiL0JpbmRpbmdzL0phdmEvcGFyYW1ldGVycy9Db21wdXRlckJyYWlsbGVSb3dDZWxsc1BhcmFtZXRlci5qYXZhCkBAIC0wLDAgKzEsMzggQEAKKy8qCisgKiBsaWJicmxhcGkgLSBBIGxpYnJhcnkgcHJvdmlkaW5nIGFjY2VzcyB0byBicmFpbGxlIHRlcm1pbmFscyBmb3IgYXBwbGljYXRpb25zLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNi0yMDIzIGJ5CisgKiAgIFNhbXVlbCBUaGliYXVsdCA8U2FtdWVsLlRoaWJhdWx0QGVucy1seW9uLm9yZz4KKyAqICAgU8OpYmFzdGllbiBIaW5kZXJlciA8U2ViYXN0aWVuLkhpbmRlcmVyQGVucy1seW9uLm9yZz4KKyAqCisgKiBsaWJicmxhcGkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorICoKKyAqIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyAqCisgKiBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisgKi8KKworcGFja2FnZSBvcmcuYTExeS5icmxhcGkucGFyYW1ldGVyczsKKworaW1wb3J0IG9yZy5hMTF5LmJybGFwaS4qOworCitwdWJsaWMgY2xhc3MgQ29tcHV0ZXJCcmFpbGxlUm93Q2VsbHNQYXJhbWV0ZXIgZXh0ZW5kcyBHbG9iYWxQYXJhbWV0ZXIgeworICBwdWJsaWMgQ29tcHV0ZXJCcmFpbGxlUm93Q2VsbHNQYXJhbWV0ZXIgKENvbm5lY3Rpb25CYXNlIGNvbm5lY3Rpb24pIHsKKyAgICBzdXBlcihjb25uZWN0aW9uKTsKKyAgfQorCisgIEBPdmVycmlkZQorICBwdWJsaWMgZmluYWwgaW50IGdldFBhcmFtZXRlciAoKSB7CisgICAgcmV0dXJuIENvbnN0YW50cy5QQVJBTV9DT01QVVRFUl9CUkFJTExFX1JPV19DRUxMUzsKKyAgfQorCisgIEBPdmVycmlkZQorICBwdWJsaWMgZmluYWwgUm93Q2VsbHMgZ2V0IChsb25nIHJvdykgeworICAgIHJldHVybiBhc1Jvd0NlbGxzKGdldFZhbHVlKHJvdykpOworICB9Cit9CmRpZmYgLS1naXQgYS9CaW5kaW5ncy9KYXZhL3BhcmFtZXRlcnMvQ29tcHV0ZXJCcmFpbGxlUm93c01hc2tQYXJhbWV0ZXIuamF2YSBiL0JpbmRpbmdzL0phdmEvcGFyYW1ldGVycy9Db21wdXRlckJyYWlsbGVSb3dzTWFza1BhcmFtZXRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMwZDhjYzAKLS0tIC9kZXYvbnVsbAorKysgYi9CaW5kaW5ncy9KYXZhL3BhcmFtZXRlcnMvQ29tcHV0ZXJCcmFpbGxlUm93c01hc2tQYXJhbWV0ZXIuamF2YQpAQCAtMCwwICsxLDQzIEBACisvKgorICogbGliYnJsYXBpIC0gQSBsaWJyYXJ5IHByb3ZpZGluZyBhY2Nlc3MgdG8gYnJhaWxsZSB0ZXJtaW5hbHMgZm9yIGFwcGxpY2F0aW9ucy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAyMyBieQorICogICBTYW11ZWwgVGhpYmF1bHQgPFNhbXVlbC5UaGliYXVsdEBlbnMtbHlvbi5vcmc+CisgKiAgIFPDqWJhc3RpZW4gSGluZGVyZXIgPFNlYmFzdGllbi5IaW5kZXJlckBlbnMtbHlvbi5vcmc+CisgKgorICogbGliYnJsYXBpIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKK3BhY2thZ2Ugb3JnLmExMXkuYnJsYXBpLnBhcmFtZXRlcnM7CisKK2ltcG9ydCBvcmcuYTExeS5icmxhcGkuKjsKKworcHVibGljIGNsYXNzIENvbXB1dGVyQnJhaWxsZVJvd3NNYXNrUGFyYW1ldGVyIGV4dGVuZHMgR2xvYmFsUGFyYW1ldGVyIHsKKyAgcHVibGljIENvbXB1dGVyQnJhaWxsZVJvd3NNYXNrUGFyYW1ldGVyIChDb25uZWN0aW9uQmFzZSBjb25uZWN0aW9uKSB7CisgICAgc3VwZXIoY29ubmVjdGlvbik7CisgIH0KKworICBAT3ZlcnJpZGUKKyAgcHVibGljIGZpbmFsIGludCBnZXRQYXJhbWV0ZXIgKCkgeworICAgIHJldHVybiBDb25zdGFudHMuUEFSQU1fQ09NUFVURVJfQlJBSUxMRV9ST1dTX01BU0s7CisgIH0KKworICBAT3ZlcnJpZGUKKyAgcHVibGljIGJvb2xlYW4gaXNIaWRhYmxlICgpIHsKKyAgICByZXR1cm4gdHJ1ZTsKKyAgfQorCisgIEBPdmVycmlkZQorICBwdWJsaWMgZmluYWwgQml0TWFzayBnZXQgKCkgeworICAgIHJldHVybiBhc0JpdE1hc2soZ2V0VmFsdWUoKSk7CisgIH0KK30KZGlmZiAtLWdpdCBhL0JpbmRpbmdzL0phdmEvcGFyYW1ldGVycy9Db21wdXRlckJyYWlsbGVUYWJsZVBhcmFtZXRlci5qYXZhIGIvQmluZGluZ3MvSmF2YS9wYXJhbWV0ZXJzL0NvbXB1dGVyQnJhaWxsZVRhYmxlUGFyYW1ldGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2YxOGUxNAotLS0gL2Rldi9udWxsCisrKyBiL0JpbmRpbmdzL0phdmEvcGFyYW1ldGVycy9Db21wdXRlckJyYWlsbGVUYWJsZVBhcmFtZXRlci5qYXZhCkBAIC0wLDAgKzEsNDMgQEAKKy8qCisgKiBsaWJicmxhcGkgLSBBIGxpYnJhcnkgcHJvdmlkaW5nIGFjY2VzcyB0byBicmFpbGxlIHRlcm1pbmFscyBmb3IgYXBwbGljYXRpb25zLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNi0yMDIzIGJ5CisgKiAgIFNhbXVlbCBUaGliYXVsdCA8U2FtdWVsLlRoaWJhdWx0QGVucy1seW9uLm9yZz4KKyAqICAgU8OpYmFzdGllbiBIaW5kZXJlciA8U2ViYXN0aWVuLkhpbmRlcmVyQGVucy1seW9uLm9yZz4KKyAqCisgKiBsaWJicmxhcGkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorICoKKyAqIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyAqCisgKiBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisgKi8KKworcGFja2FnZSBvcmcuYTExeS5icmxhcGkucGFyYW1ldGVyczsKKworaW1wb3J0IG9yZy5hMTF5LmJybGFwaS4qOworCitwdWJsaWMgY2xhc3MgQ29tcHV0ZXJCcmFpbGxlVGFibGVQYXJhbWV0ZXIgZXh0ZW5kcyBHbG9iYWxQYXJhbWV0ZXIgaW1wbGVtZW50cyBQYXJhbWV0ZXIuU3RyaW5nU2V0dGFibGUgeworICBwdWJsaWMgQ29tcHV0ZXJCcmFpbGxlVGFibGVQYXJhbWV0ZXIgKENvbm5lY3Rpb25CYXNlIGNvbm5lY3Rpb24pIHsKKyAgICBzdXBlcihjb25uZWN0aW9uKTsKKyAgfQorCisgIEBPdmVycmlkZQorICBwdWJsaWMgZmluYWwgaW50IGdldFBhcmFtZXRlciAoKSB7CisgICAgcmV0dXJuIENvbnN0YW50cy5QQVJBTV9DT01QVVRFUl9CUkFJTExFX1RBQkxFOworICB9CisKKyAgQE92ZXJyaWRlCisgIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0ICgpIHsKKyAgICByZXR1cm4gYXNTdHJpbmcoZ2V0VmFsdWUoKSk7CisgIH0KKworICBAT3ZlcnJpZGUKKyAgcHVibGljIGZpbmFsIHZvaWQgc2V0IChTdHJpbmcgbmFtZSkgeworICAgIHNldFZhbHVlKG5hbWUpOworICB9Cit9CmRpZmYgLS1naXQgYS9CaW5kaW5ncy9KYXZhL3BhcmFtZXRlcnMvQ3Vyc29yQmxpbmtQZXJjZW50YWdlUGFyYW1ldGVyLmphdmEgYi9CaW5kaW5ncy9KYXZhL3BhcmFtZXRlcnMvQ3Vyc29yQmxpbmtQZXJjZW50YWdlUGFyYW1ldGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTQzNzFkMgotLS0gL2Rldi9udWxsCisrKyBiL0JpbmRpbmdzL0phdmEvcGFyYW1ldGVycy9DdXJzb3JCbGlua1BlcmNlbnRhZ2VQYXJhbWV0ZXIuamF2YQpAQCAtMCwwICsxLDQ4IEBACisvKgorICogbGliYnJsYXBpIC0gQSBsaWJyYXJ5IHByb3ZpZGluZyBhY2Nlc3MgdG8gYnJhaWxsZSB0ZXJtaW5hbHMgZm9yIGFwcGxpY2F0aW9ucy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAyMyBieQorICogICBTYW11ZWwgVGhpYmF1bHQgPFNhbXVlbC5UaGliYXVsdEBlbnMtbHlvbi5vcmc+CisgKiAgIFPDqWJhc3RpZW4gSGluZGVyZXIgPFNlYmFzdGllbi5IaW5kZXJlckBlbnMtbHlvbi5vcmc+CisgKgorICogbGliYnJsYXBpIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKK3BhY2thZ2Ugb3JnLmExMXkuYnJsYXBpLnBhcmFtZXRlcnM7CisKK2ltcG9ydCBvcmcuYTExeS5icmxhcGkuKjsKKworcHVibGljIGNsYXNzIEN1cnNvckJsaW5rUGVyY2VudGFnZVBhcmFtZXRlciBleHRlbmRzIEdsb2JhbFBhcmFtZXRlciBpbXBsZW1lbnRzIFBhcmFtZXRlci5CeXRlU2V0dGFibGUgeworICBwdWJsaWMgQ3Vyc29yQmxpbmtQZXJjZW50YWdlUGFyYW1ldGVyIChDb25uZWN0aW9uQmFzZSBjb25uZWN0aW9uKSB7CisgICAgc3VwZXIoY29ubmVjdGlvbik7CisgIH0KKworICBAT3ZlcnJpZGUKKyAgcHVibGljIGZpbmFsIGludCBnZXRQYXJhbWV0ZXIgKCkgeworICAgIHJldHVybiBDb25zdGFudHMuUEFSQU1fQ1VSU09SX0JMSU5LX1BFUkNFTlRBR0U7CisgIH0KKworICBAT3ZlcnJpZGUKKyAgcHVibGljIGZpbmFsIEJ5dGUgZ2V0ICgpIHsKKyAgICByZXR1cm4gYXNCeXRlKGdldFZhbHVlKCkpOworICB9CisKKyAgQE92ZXJyaWRlCisgIHB1YmxpYyBmaW5hbCB2b2lkIHNldCAoYnl0ZSBwZXJjZW50YWdlKSB7CisgICAgc2V0VmFsdWUobmV3IGJ5dGVbXSB7cGVyY2VudGFnZX0pOworICB9CisKKyAgQE92ZXJyaWRlCisgIHB1YmxpYyBmaW5hbCBieXRlIGdldE1heGltdW0gKCkgeworICAgIHJldHVybiAxMDA7CisgIH0KK30KZGlmZiAtLWdpdCBhL0JpbmRpbmdzL0phdmEvcGFyYW1ldGVycy9DdXJzb3JCbGlua1BlcmlvZFBhcmFtZXRlci5qYXZhIGIvQmluZGluZ3MvSmF2YS9wYXJhbWV0ZXJzL0N1cnNvckJsaW5rUGVyaW9kUGFyYW1ldGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTRkNmFjNAotLS0gL2Rldi9udWxsCisrKyBiL0JpbmRpbmdzL0phdmEvcGFyYW1ldGVycy9DdXJzb3JCbGlua1BlcmlvZFBhcmFtZXRlci5qYXZhCkBAIC0wLDAgKzEsNTMgQEAKKy8qCisgKiBsaWJicmxhcGkgLSBBIGxpYnJhcnkgcHJvdmlkaW5nIGFjY2VzcyB0byBicmFpbGxlIHRlcm1pbmFscyBmb3IgYXBwbGljYXRpb25zLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNi0yMDIzIGJ5CisgKiAgIFNhbXVlbCBUaGliYXVsdCA8U2FtdWVsLlRoaWJhdWx0QGVucy1seW9uLm9yZz4KKyAqICAgU8OpYmFzdGllbiBIaW5kZXJlciA8U2ViYXN0aWVuLkhpbmRlcmVyQGVucy1seW9uLm9yZz4KKyAqCisgKiBsaWJicmxhcGkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorICoKKyAqIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyAqCisgKiBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisgKi8KKworcGFja2FnZSBvcmcuYTExeS5icmxhcGkucGFyYW1ldGVyczsKKworaW1wb3J0IG9yZy5hMTF5LmJybGFwaS4qOworCitwdWJsaWMgY2xhc3MgQ3Vyc29yQmxpbmtQZXJpb2RQYXJhbWV0ZXIgZXh0ZW5kcyBHbG9iYWxQYXJhbWV0ZXIgaW1wbGVtZW50cyBQYXJhbWV0ZXIuSW50U2V0dGFibGUgeworICBwdWJsaWMgQ3Vyc29yQmxpbmtQZXJpb2RQYXJhbWV0ZXIgKENvbm5lY3Rpb25CYXNlIGNvbm5lY3Rpb24pIHsKKyAgICBzdXBlcihjb25uZWN0aW9uKTsKKyAgfQorCisgIEBPdmVycmlkZQorICBwdWJsaWMgZmluYWwgaW50IGdldFBhcmFtZXRlciAoKSB7CisgICAgcmV0dXJuIENvbnN0YW50cy5QQVJBTV9DVVJTT1JfQkxJTktfUEVSSU9EOworICB9CisKKyAgQE92ZXJyaWRlCisgIHB1YmxpYyBmaW5hbCBJbnRlZ2VyIGdldCAoKSB7CisgICAgcmV0dXJuIGFzSW50KGdldFZhbHVlKCkpOworICB9CisKKyAgQE92ZXJyaWRlCisgIHB1YmxpYyBmaW5hbCB2b2lkIHNldCAoaW50IHBlcmlvZCkgeworICAgIHNldFZhbHVlKG5ldyBpbnRbXSB7cGVyaW9kfSk7CisgIH0KKworICBAT3ZlcnJpZGUKKyAgcHVibGljIGZpbmFsIGludCBnZXRNaW5pbXVtICgpIHsKKyAgICByZXR1cm4gMTAwOworICB9CisKKyAgQE92ZXJyaWRlCisgIHB1YmxpYyBmaW5hbCBpbnQgZ2V0TWF4aW11bSAoKSB7CisgICAgcmV0dXJuIDI1MDA7CisgIH0KK30KZGlmZiAtLWdpdCBhL0JpbmRpbmdzL0phdmEvcGFyYW1ldGVycy9DdXJzb3JEb3RzUGFyYW1ldGVyLmphdmEgYi9CaW5kaW5ncy9KYXZhL3BhcmFtZXRlcnMvQ3Vyc29yRG90c1BhcmFtZXRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRhZDUwMTYKLS0tIC9kZXYvbnVsbAorKysgYi9CaW5kaW5ncy9KYXZhL3BhcmFtZXRlcnMvQ3Vyc29yRG90c1BhcmFtZXRlci5qYXZhCkBAIC0wLDAgKzEsNTIgQEAKKy8qCisgKiBsaWJicmxhcGkgLSBBIGxpYnJhcnkgcHJvdmlkaW5nIGFjY2VzcyB0byBicmFpbGxlIHRlcm1pbmFscyBmb3IgYXBwbGljYXRpb25zLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNi0yMDIzIGJ5CisgKiAgIFNhbXVlbCBUaGliYXVsdCA8U2FtdWVsLlRoaWJhdWx0QGVucy1seW9uLm9yZz4KKyAqICAgU8OpYmFzdGllbiBIaW5kZXJlciA8U2ViYXN0aWVuLkhpbmRlcmVyQGVucy1seW9uLm9yZz4KKyAqCisgKiBsaWJicmxhcGkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorICoKKyAqIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyAqCisgKiBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisgKi8KKworcGFja2FnZSBvcmcuYTExeS5icmxhcGkucGFyYW1ldGVyczsKKworaW1wb3J0IG9yZy5hMTF5LmJybGFwaS4qOworCitwdWJsaWMgY2xhc3MgQ3Vyc29yRG90c1BhcmFtZXRlciBleHRlbmRzIEdsb2JhbFBhcmFtZXRlciBpbXBsZW1lbnRzIFBhcmFtZXRlci5TdHJpbmdTZXR0YWJsZSB7CisgIHB1YmxpYyBDdXJzb3JEb3RzUGFyYW1ldGVyIChDb25uZWN0aW9uQmFzZSBjb25uZWN0aW9uKSB7CisgICAgc3VwZXIoY29ubmVjdGlvbik7CisgIH0KKworICBAT3ZlcnJpZGUKKyAgcHVibGljIGZpbmFsIGludCBnZXRQYXJhbWV0ZXIgKCkgeworICAgIHJldHVybiBDb25zdGFudHMuUEFSQU1fQ1VSU09SX0RPVFM7CisgIH0KKworICBAT3ZlcnJpZGUKKyAgcHVibGljIGZpbmFsIEJ5dGUgZ2V0ICgpIHsKKyAgICByZXR1cm4gYXNCeXRlKGdldFZhbHVlKCkpOworICB9CisKKyAgcHVibGljIGZpbmFsIHZvaWQgc2V0IChieXRlIGRvdHMpIHsKKyAgICBzZXRWYWx1ZShuZXcgYnl0ZVtdIHtkb3RzfSk7CisgIH0KKworICBAT3ZlcnJpZGUKKyAgcHVibGljIGZpbmFsIHZvaWQgc2V0IChTdHJpbmcgbnVtYmVycykgdGhyb3dzIFN5bnRheEV4Y2VwdGlvbiB7CisgICAgc2V0KFBhcnNlLmFzRG90cyhnZXRQYXJzZURlc2NyaXB0aW9uKCksIG51bWJlcnMpKTsKKyAgfQorCisgIEBPdmVycmlkZQorICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nICgpIHsKKyAgICByZXR1cm4gYXNEb3RzKGdldCgpKTsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvQmluZGluZ3MvSmF2YS9wYXJhbWV0ZXJzL0RlZmluZWREcml2ZXJLZXljb2Rlc1BhcmFtZXRlci5qYXZhIGIvQmluZGluZ3MvSmF2YS9wYXJhbWV0ZXJzL0RlZmluZWREcml2ZXJLZXljb2Rlc1BhcmFtZXRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFmNGI0YzkKLS0tIC9kZXYvbnVsbAorKysgYi9CaW5kaW5ncy9KYXZhL3BhcmFtZXRlcnMvRGVmaW5lZERyaXZlcktleWNvZGVzUGFyYW1ldGVyLmphdmEKQEAgLTAsMCArMSw0MyBAQAorLyoKKyAqIGxpYmJybGFwaSAtIEEgbGlicmFyeSBwcm92aWRpbmcgYWNjZXNzIHRvIGJyYWlsbGUgdGVybWluYWxzIGZvciBhcHBsaWNhdGlvbnMuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMjMgYnkKKyAqICAgU2FtdWVsIFRoaWJhdWx0IDxTYW11ZWwuVGhpYmF1bHRAZW5zLWx5b24ub3JnPgorICogICBTw6liYXN0aWVuIEhpbmRlcmVyIDxTZWJhc3RpZW4uSGluZGVyZXJAZW5zLWx5b24ub3JnPgorICoKKyAqIGxpYmJybGFwaSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorICoKKyAqIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyAqLworCitwYWNrYWdlIG9yZy5hMTF5LmJybGFwaS5wYXJhbWV0ZXJzOworCitpbXBvcnQgb3JnLmExMXkuYnJsYXBpLio7CisKK3B1YmxpYyBjbGFzcyBEZWZpbmVkRHJpdmVyS2V5Y29kZXNQYXJhbWV0ZXIgZXh0ZW5kcyBHbG9iYWxQYXJhbWV0ZXIgeworICBwdWJsaWMgRGVmaW5lZERyaXZlcktleWNvZGVzUGFyYW1ldGVyIChDb25uZWN0aW9uQmFzZSBjb25uZWN0aW9uKSB7CisgICAgc3VwZXIoY29ubmVjdGlvbik7CisgIH0KKworICBAT3ZlcnJpZGUKKyAgcHVibGljIGZpbmFsIGludCBnZXRQYXJhbWV0ZXIgKCkgeworICAgIHJldHVybiBDb25zdGFudHMuUEFSQU1fREVGSU5FRF9EUklWRVJfS0VZQ09ERVM7CisgIH0KKworICBAT3ZlcnJpZGUKKyAgcHVibGljIGJvb2xlYW4gaXNIaWRhYmxlICgpIHsKKyAgICByZXR1cm4gdHJ1ZTsKKyAgfQorCisgIEBPdmVycmlkZQorICBwdWJsaWMgZmluYWwgbG9uZ1tdIGdldCAoKSB7CisgICAgcmV0dXJuIGFzTG9uZ0FycmF5KGdldFZhbHVlKCkpOworICB9Cit9CmRpZmYgLS1naXQgYS9CaW5kaW5ncy9KYXZhL3BhcmFtZXRlcnMvRGV2aWNlQ2VsbFNpemVQYXJhbWV0ZXIuamF2YSBiL0JpbmRpbmdzL0phdmEvcGFyYW1ldGVycy9EZXZpY2VDZWxsU2l6ZVBhcmFtZXRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM1ODkwOTYKLS0tIC9kZXYvbnVsbAorKysgYi9CaW5kaW5ncy9KYXZhL3BhcmFtZXRlcnMvRGV2aWNlQ2VsbFNpemVQYXJhbWV0ZXIuamF2YQpAQCAtMCwwICsxLDM4IEBACisvKgorICogbGliYnJsYXBpIC0gQSBsaWJyYXJ5IHByb3ZpZGluZyBhY2Nlc3MgdG8gYnJhaWxsZSB0ZXJtaW5hbHMgZm9yIGFwcGxpY2F0aW9ucy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAyMyBieQorICogICBTYW11ZWwgVGhpYmF1bHQgPFNhbXVlbC5UaGliYXVsdEBlbnMtbHlvbi5vcmc+CisgKiAgIFPDqWJhc3RpZW4gSGluZGVyZXIgPFNlYmFzdGllbi5IaW5kZXJlckBlbnMtbHlvbi5vcmc+CisgKgorICogbGliYnJsYXBpIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKK3BhY2thZ2Ugb3JnLmExMXkuYnJsYXBpLnBhcmFtZXRlcnM7CisKK2ltcG9ydCBvcmcuYTExeS5icmxhcGkuKjsKKworcHVibGljIGNsYXNzIERldmljZUNlbGxTaXplUGFyYW1ldGVyIGV4dGVuZHMgR2xvYmFsUGFyYW1ldGVyIHsKKyAgcHVibGljIERldmljZUNlbGxTaXplUGFyYW1ldGVyIChDb25uZWN0aW9uQmFzZSBjb25uZWN0aW9uKSB7CisgICAgc3VwZXIoY29ubmVjdGlvbik7CisgIH0KKworICBAT3ZlcnJpZGUKKyAgcHVibGljIGZpbmFsIGludCBnZXRQYXJhbWV0ZXIgKCkgeworICAgIHJldHVybiBDb25zdGFudHMuUEFSQU1fREVWSUNFX0NFTExfU0laRTsKKyAgfQorCisgIEBPdmVycmlkZQorICBwdWJsaWMgZmluYWwgQnl0ZSBnZXQgKCkgeworICAgIHJldHVybiBhc0J5dGUoZ2V0VmFsdWUoKSk7CisgIH0KK30KZGlmZiAtLWdpdCBhL0JpbmRpbmdzL0phdmEvcGFyYW1ldGVycy9EZXZpY2VJZGVudGlmaWVyUGFyYW1ldGVyLmphdmEgYi9CaW5kaW5ncy9KYXZhL3BhcmFtZXRlcnMvRGV2aWNlSWRlbnRpZmllclBhcmFtZXRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM3NzA2MWIKLS0tIC9kZXYvbnVsbAorKysgYi9CaW5kaW5ncy9KYXZhL3BhcmFtZXRlcnMvRGV2aWNlSWRlbnRpZmllclBhcmFtZXRlci5qYXZhCkBAIC0wLDAgKzEsMzggQEAKKy8qCisgKiBsaWJicmxhcGkgLSBBIGxpYnJhcnkgcHJvdmlkaW5nIGFjY2VzcyB0byBicmFpbGxlIHRlcm1pbmFscyBmb3IgYXBwbGljYXRpb25zLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNi0yMDIzIGJ5CisgKiAgIFNhbXVlbCBUaGliYXVsdCA8U2FtdWVsLlRoaWJhdWx0QGVucy1seW9uLm9yZz4KKyAqICAgU8OpYmFzdGllbiBIaW5kZXJlciA8U2ViYXN0aWVuLkhpbmRlcmVyQGVucy1seW9uLm9yZz4KKyAqCisgKiBsaWJicmxhcGkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorICoKKyAqIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyAqCisgKiBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisgKi8KKworcGFja2FnZSBvcmcuYTExeS5icmxhcGkucGFyYW1ldGVyczsKKworaW1wb3J0IG9yZy5hMTF5LmJybGFwaS4qOworCitwdWJsaWMgY2xhc3MgRGV2aWNlSWRlbnRpZmllclBhcmFtZXRlciBleHRlbmRzIEdsb2JhbFBhcmFtZXRlciB7CisgIHB1YmxpYyBEZXZpY2VJZGVudGlmaWVyUGFyYW1ldGVyIChDb25uZWN0aW9uQmFzZSBjb25uZWN0aW9uKSB7CisgICAgc3VwZXIoY29ubmVjdGlvbik7CisgIH0KKworICBAT3ZlcnJpZGUKKyAgcHVibGljIGZpbmFsIGludCBnZXRQYXJhbWV0ZXIgKCkgeworICAgIHJldHVybiBDb25zdGFudHMuUEFSQU1fREVWSUNFX0lERU5USUZJRVI7CisgIH0KKworICBAT3ZlcnJpZGUKKyAgcHVibGljIGZpbmFsIFN0cmluZyBnZXQgKCkgeworICAgIHJldHVybiBhc1N0cmluZyhnZXRWYWx1ZSgpKTsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvQmluZGluZ3MvSmF2YS9wYXJhbWV0ZXJzL0RldmljZU1vZGVsUGFyYW1ldGVyLmphdmEgYi9CaW5kaW5ncy9KYXZhL3BhcmFtZXRlcnMvRGV2aWNlTW9kZWxQYXJhbWV0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OWMxNDhhCi0tLSAvZGV2L251bGwKKysrIGIvQmluZGluZ3MvSmF2YS9wYXJhbWV0ZXJzL0RldmljZU1vZGVsUGFyYW1ldGVyLmphdmEKQEAgLTAsMCArMSwzOCBAQAorLyoKKyAqIGxpYmJybGFwaSAtIEEgbGlicmFyeSBwcm92aWRpbmcgYWNjZXNzIHRvIGJyYWlsbGUgdGVybWluYWxzIGZvciBhcHBsaWNhdGlvbnMuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMjMgYnkKKyAqICAgU2FtdWVsIFRoaWJhdWx0IDxTYW11ZWwuVGhpYmF1bHRAZW5zLWx5b24ub3JnPgorICogICBTw6liYXN0aWVuIEhpbmRlcmVyIDxTZWJhc3RpZW4uSGluZGVyZXJAZW5zLWx5b24ub3JnPgorICoKKyAqIGxpYmJybGFwaSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorICoKKyAqIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyAqLworCitwYWNrYWdlIG9yZy5hMTF5LmJybGFwaS5wYXJhbWV0ZXJzOworCitpbXBvcnQgb3JnLmExMXkuYnJsYXBpLio7CisKK3B1YmxpYyBjbGFzcyBEZXZpY2VNb2RlbFBhcmFtZXRlciBleHRlbmRzIEdsb2JhbFBhcmFtZXRlciB7CisgIHB1YmxpYyBEZXZpY2VNb2RlbFBhcmFtZXRlciAoQ29ubmVjdGlvbkJhc2UgY29ubmVjdGlvbikgeworICAgIHN1cGVyKGNvbm5lY3Rpb24pOworICB9CisKKyAgQE92ZXJyaWRlCisgIHB1YmxpYyBmaW5hbCBpbnQgZ2V0UGFyYW1ldGVyICgpIHsKKyAgICByZXR1cm4gQ29uc3RhbnRzLlBBUkFNX0RFVklDRV9NT0RFTDsKKyAgfQorCisgIEBPdmVycmlkZQorICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldCAoKSB7CisgICAgcmV0dXJuIGFzU3RyaW5nKGdldFZhbHVlKCkpOworICB9Cit9CmRpZmYgLS1naXQgYS9CaW5kaW5ncy9KYXZhL3BhcmFtZXRlcnMvRGV2aWNlT25saW5lUGFyYW1ldGVyLmphdmEgYi9CaW5kaW5ncy9KYXZhL3BhcmFtZXRlcnMvRGV2aWNlT25saW5lUGFyYW1ldGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDRhMWQ5NAotLS0gL2Rldi9udWxsCisrKyBiL0JpbmRpbmdzL0phdmEvcGFyYW1ldGVycy9EZXZpY2VPbmxpbmVQYXJhbWV0ZXIuamF2YQpAQCAtMCwwICsxLDM4IEBACisvKgorICogbGliYnJsYXBpIC0gQSBsaWJyYXJ5IHByb3ZpZGluZyBhY2Nlc3MgdG8gYnJhaWxsZSB0ZXJtaW5hbHMgZm9yIGFwcGxpY2F0aW9ucy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAyMyBieQorICogICBTYW11ZWwgVGhpYmF1bHQgPFNhbXVlbC5UaGliYXVsdEBlbnMtbHlvbi5vcmc+CisgKiAgIFPDqWJhc3RpZW4gSGluZGVyZXIgPFNlYmFzdGllbi5IaW5kZXJlckBlbnMtbHlvbi5vcmc+CisgKgorICogbGliYnJsYXBpIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKK3BhY2thZ2Ugb3JnLmExMXkuYnJsYXBpLnBhcmFtZXRlcnM7CisKK2ltcG9ydCBvcmcuYTExeS5icmxhcGkuKjsKKworcHVibGljIGNsYXNzIERldmljZU9ubGluZVBhcmFtZXRlciBleHRlbmRzIEdsb2JhbFBhcmFtZXRlciB7CisgIHB1YmxpYyBEZXZpY2VPbmxpbmVQYXJhbWV0ZXIgKENvbm5lY3Rpb25CYXNlIGNvbm5lY3Rpb24pIHsKKyAgICBzdXBlcihjb25uZWN0aW9uKTsKKyAgfQorCisgIEBPdmVycmlkZQorICBwdWJsaWMgZmluYWwgaW50IGdldFBhcmFtZXRlciAoKSB7CisgICAgcmV0dXJuIENvbnN0YW50cy5QQVJBTV9ERVZJQ0VfT05MSU5FOworICB9CisKKyAgQE92ZXJyaWRlCisgIHB1YmxpYyBmaW5hbCBCb29sZWFuIGdldCAoKSB7CisgICAgcmV0dXJuIGFzQm9vbGVhbihnZXRWYWx1ZSgpKTsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvQmluZGluZ3MvSmF2YS9wYXJhbWV0ZXJzL0RldmljZVNwZWVkUGFyYW1ldGVyLmphdmEgYi9CaW5kaW5ncy9KYXZhL3BhcmFtZXRlcnMvRGV2aWNlU3BlZWRQYXJhbWV0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44Y2ZhMDk0Ci0tLSAvZGV2L251bGwKKysrIGIvQmluZGluZ3MvSmF2YS9wYXJhbWV0ZXJzL0RldmljZVNwZWVkUGFyYW1ldGVyLmphdmEKQEAgLTAsMCArMSwzOCBAQAorLyoKKyAqIGxpYmJybGFwaSAtIEEgbGlicmFyeSBwcm92aWRpbmcgYWNjZXNzIHRvIGJyYWlsbGUgdGVybWluYWxzIGZvciBhcHBsaWNhdGlvbnMuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMjMgYnkKKyAqICAgU2FtdWVsIFRoaWJhdWx0IDxTYW11ZWwuVGhpYmF1bHRAZW5zLWx5b24ub3JnPgorICogICBTw6liYXN0aWVuIEhpbmRlcmVyIDxTZWJhc3RpZW4uSGluZGVyZXJAZW5zLWx5b24ub3JnPgorICoKKyAqIGxpYmJybGFwaSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorICoKKyAqIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyAqLworCitwYWNrYWdlIG9yZy5hMTF5LmJybGFwaS5wYXJhbWV0ZXJzOworCitpbXBvcnQgb3JnLmExMXkuYnJsYXBpLio7CisKK3B1YmxpYyBjbGFzcyBEZXZpY2VTcGVlZFBhcmFtZXRlciBleHRlbmRzIEdsb2JhbFBhcmFtZXRlciB7CisgIHB1YmxpYyBEZXZpY2VTcGVlZFBhcmFtZXRlciAoQ29ubmVjdGlvbkJhc2UgY29ubmVjdGlvbikgeworICAgIHN1cGVyKGNvbm5lY3Rpb24pOworICB9CisKKyAgQE92ZXJyaWRlCisgIHB1YmxpYyBmaW5hbCBpbnQgZ2V0UGFyYW1ldGVyICgpIHsKKyAgICByZXR1cm4gQ29uc3RhbnRzLlBBUkFNX0RFVklDRV9TUEVFRDsKKyAgfQorCisgIEBPdmVycmlkZQorICBwdWJsaWMgZmluYWwgSW50ZWdlciBnZXQgKCkgeworICAgIHJldHVybiBhc0ludChnZXRWYWx1ZSgpKTsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvQmluZGluZ3MvSmF2YS9wYXJhbWV0ZXJzL0Rpc3BsYXlTaXplUGFyYW1ldGVyLmphdmEgYi9CaW5kaW5ncy9KYXZhL3BhcmFtZXRlcnMvRGlzcGxheVNpemVQYXJhbWV0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZGE1MjQzCi0tLSAvZGV2L251bGwKKysrIGIvQmluZGluZ3MvSmF2YS9wYXJhbWV0ZXJzL0Rpc3BsYXlTaXplUGFyYW1ldGVyLmphdmEKQEAgLTAsMCArMSwzOCBAQAorLyoKKyAqIGxpYmJybGFwaSAtIEEgbGlicmFyeSBwcm92aWRpbmcgYWNjZXNzIHRvIGJyYWlsbGUgdGVybWluYWxzIGZvciBhcHBsaWNhdGlvbnMuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMjMgYnkKKyAqICAgU2FtdWVsIFRoaWJhdWx0IDxTYW11ZWwuVGhpYmF1bHRAZW5zLWx5b24ub3JnPgorICogICBTw6liYXN0aWVuIEhpbmRlcmVyIDxTZWJhc3RpZW4uSGluZGVyZXJAZW5zLWx5b24ub3JnPgorICoKKyAqIGxpYmJybGFwaSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorICoKKyAqIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyAqLworCitwYWNrYWdlIG9yZy5hMTF5LmJybGFwaS5wYXJhbWV0ZXJzOworCitpbXBvcnQgb3JnLmExMXkuYnJsYXBpLio7CisKK3B1YmxpYyBjbGFzcyBEaXNwbGF5U2l6ZVBhcmFtZXRlciBleHRlbmRzIEdsb2JhbFBhcmFtZXRlciB7CisgIHB1YmxpYyBEaXNwbGF5U2l6ZVBhcmFtZXRlciAoQ29ubmVjdGlvbkJhc2UgY29ubmVjdGlvbikgeworICAgIHN1cGVyKGNvbm5lY3Rpb24pOworICB9CisKKyAgQE92ZXJyaWRlCisgIHB1YmxpYyBmaW5hbCBpbnQgZ2V0UGFyYW1ldGVyICgpIHsKKyAgICByZXR1cm4gQ29uc3RhbnRzLlBBUkFNX0RJU1BMQVlfU0laRTsKKyAgfQorCisgIEBPdmVycmlkZQorICBwdWJsaWMgZmluYWwgRGlzcGxheVNpemUgZ2V0ICgpIHsKKyAgICByZXR1cm4gYXNEaXNwbGF5U2l6ZShnZXRWYWx1ZSgpKTsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvQmluZGluZ3MvSmF2YS9wYXJhbWV0ZXJzL0RyaXZlckNvZGVQYXJhbWV0ZXIuamF2YSBiL0JpbmRpbmdzL0phdmEvcGFyYW1ldGVycy9Ecml2ZXJDb2RlUGFyYW1ldGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjZiMzMzZAotLS0gL2Rldi9udWxsCisrKyBiL0JpbmRpbmdzL0phdmEvcGFyYW1ldGVycy9Ecml2ZXJDb2RlUGFyYW1ldGVyLmphdmEKQEAgLTAsMCArMSwzOCBAQAorLyoKKyAqIGxpYmJybGFwaSAtIEEgbGlicmFyeSBwcm92aWRpbmcgYWNjZXNzIHRvIGJyYWlsbGUgdGVybWluYWxzIGZvciBhcHBsaWNhdGlvbnMuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMjMgYnkKKyAqICAgU2FtdWVsIFRoaWJhdWx0IDxTYW11ZWwuVGhpYmF1bHRAZW5zLWx5b24ub3JnPgorICogICBTw6liYXN0aWVuIEhpbmRlcmVyIDxTZWJhc3RpZW4uSGluZGVyZXJAZW5zLWx5b24ub3JnPgorICoKKyAqIGxpYmJybGFwaSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorICoKKyAqIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyAqLworCitwYWNrYWdlIG9yZy5hMTF5LmJybGFwaS5wYXJhbWV0ZXJzOworCitpbXBvcnQgb3JnLmExMXkuYnJsYXBpLio7CisKK3B1YmxpYyBjbGFzcyBEcml2ZXJDb2RlUGFyYW1ldGVyIGV4dGVuZHMgR2xvYmFsUGFyYW1ldGVyIHsKKyAgcHVibGljIERyaXZlckNvZGVQYXJhbWV0ZXIgKENvbm5lY3Rpb25CYXNlIGNvbm5lY3Rpb24pIHsKKyAgICBzdXBlcihjb25uZWN0aW9uKTsKKyAgfQorCisgIEBPdmVycmlkZQorICBwdWJsaWMgZmluYWwgaW50IGdldFBhcmFtZXRlciAoKSB7CisgICAgcmV0dXJuIENvbnN0YW50cy5QQVJBTV9EUklWRVJfQ09ERTsKKyAgfQorCisgIEBPdmVycmlkZQorICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldCAoKSB7CisgICAgcmV0dXJuIGFzU3RyaW5nKGdldFZhbHVlKCkpOworICB9Cit9CmRpZmYgLS1naXQgYS9CaW5kaW5ncy9KYXZhL3BhcmFtZXRlcnMvRHJpdmVyS2V5Y29kZU5hbWVQYXJhbWV0ZXIuamF2YSBiL0JpbmRpbmdzL0phdmEvcGFyYW1ldGVycy9Ecml2ZXJLZXljb2RlTmFtZVBhcmFtZXRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc5NmEyZGUKLS0tIC9kZXYvbnVsbAorKysgYi9CaW5kaW5ncy9KYXZhL3BhcmFtZXRlcnMvRHJpdmVyS2V5Y29kZU5hbWVQYXJhbWV0ZXIuamF2YQpAQCAtMCwwICsxLDM4IEBACisvKgorICogbGliYnJsYXBpIC0gQSBsaWJyYXJ5IHByb3ZpZGluZyBhY2Nlc3MgdG8gYnJhaWxsZSB0ZXJtaW5hbHMgZm9yIGFwcGxpY2F0aW9ucy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAyMyBieQorICogICBTYW11ZWwgVGhpYmF1bHQgPFNhbXVlbC5UaGliYXVsdEBlbnMtbHlvbi5vcmc+CisgKiAgIFPDqWJhc3RpZW4gSGluZGVyZXIgPFNlYmFzdGllbi5IaW5kZXJlckBlbnMtbHlvbi5vcmc+CisgKgorICogbGliYnJsYXBpIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKK3BhY2thZ2Ugb3JnLmExMXkuYnJsYXBpLnBhcmFtZXRlcnM7CisKK2ltcG9ydCBvcmcuYTExeS5icmxhcGkuKjsKKworcHVibGljIGNsYXNzIERyaXZlcktleWNvZGVOYW1lUGFyYW1ldGVyIGV4dGVuZHMgR2xvYmFsUGFyYW1ldGVyIHsKKyAgcHVibGljIERyaXZlcktleWNvZGVOYW1lUGFyYW1ldGVyIChDb25uZWN0aW9uQmFzZSBjb25uZWN0aW9uKSB7CisgICAgc3VwZXIoY29ubmVjdGlvbik7CisgIH0KKworICBAT3ZlcnJpZGUKKyAgcHVibGljIGZpbmFsIGludCBnZXRQYXJhbWV0ZXIgKCkgeworICAgIHJldHVybiBDb25zdGFudHMuUEFSQU1fRFJJVkVSX0tFWUNPREVfTkFNRTsKKyAgfQorCisgIEBPdmVycmlkZQorICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldCAobG9uZyBjb2RlKSB7CisgICAgcmV0dXJuIGFzU3RyaW5nKGdldFZhbHVlKGNvZGUpKTsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvQmluZGluZ3MvSmF2YS9wYXJhbWV0ZXJzL0RyaXZlcktleWNvZGVTdW1tYXJ5UGFyYW1ldGVyLmphdmEgYi9CaW5kaW5ncy9KYXZhL3BhcmFtZXRlcnMvRHJpdmVyS2V5Y29kZVN1bW1hcnlQYXJhbWV0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYThjZDlmCi0tLSAvZGV2L251bGwKKysrIGIvQmluZGluZ3MvSmF2YS9wYXJhbWV0ZXJzL0RyaXZlcktleWNvZGVTdW1tYXJ5UGFyYW1ldGVyLmphdmEKQEAgLTAsMCArMSwzOCBAQAorLyoKKyAqIGxpYmJybGFwaSAtIEEgbGlicmFyeSBwcm92aWRpbmcgYWNjZXNzIHRvIGJyYWlsbGUgdGVybWluYWxzIGZvciBhcHBsaWNhdGlvbnMuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMjMgYnkKKyAqICAgU2FtdWVsIFRoaWJhdWx0IDxTYW11ZWwuVGhpYmF1bHRAZW5zLWx5b24ub3JnPgorICogICBTw6liYXN0aWVuIEhpbmRlcmVyIDxTZWJhc3RpZW4uSGluZGVyZXJAZW5zLWx5b24ub3JnPgorICoKKyAqIGxpYmJybGFwaSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorICoKKyAqIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyAqLworCitwYWNrYWdlIG9yZy5hMTF5LmJybGFwaS5wYXJhbWV0ZXJzOworCitpbXBvcnQgb3JnLmExMXkuYnJsYXBpLio7CisKK3B1YmxpYyBjbGFzcyBEcml2ZXJLZXljb2RlU3VtbWFyeVBhcmFtZXRlciBleHRlbmRzIEdsb2JhbFBhcmFtZXRlciB7CisgIHB1YmxpYyBEcml2ZXJLZXljb2RlU3VtbWFyeVBhcmFtZXRlciAoQ29ubmVjdGlvbkJhc2UgY29ubmVjdGlvbikgeworICAgIHN1cGVyKGNvbm5lY3Rpb24pOworICB9CisKKyAgQE92ZXJyaWRlCisgIHB1YmxpYyBmaW5hbCBpbnQgZ2V0UGFyYW1ldGVyICgpIHsKKyAgICByZXR1cm4gQ29uc3RhbnRzLlBBUkFNX0RSSVZFUl9LRVlDT0RFX1NVTU1BUlk7CisgIH0KKworICBAT3ZlcnJpZGUKKyAgcHVibGljIGZpbmFsIFN0cmluZyBnZXQgKGxvbmcgY29kZSkgeworICAgIHJldHVybiBhc1N0cmluZyhnZXRWYWx1ZShjb2RlKSk7CisgIH0KK30KZGlmZiAtLWdpdCBhL0JpbmRpbmdzL0phdmEvcGFyYW1ldGVycy9Ecml2ZXJOYW1lUGFyYW1ldGVyLmphdmEgYi9CaW5kaW5ncy9KYXZhL3BhcmFtZXRlcnMvRHJpdmVyTmFtZVBhcmFtZXRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI5OThmM2MKLS0tIC9kZXYvbnVsbAorKysgYi9CaW5kaW5ncy9KYXZhL3BhcmFtZXRlcnMvRHJpdmVyTmFtZVBhcmFtZXRlci5qYXZhCkBAIC0wLDAgKzEsMzggQEAKKy8qCisgKiBsaWJicmxhcGkgLSBBIGxpYnJhcnkgcHJvdmlkaW5nIGFjY2VzcyB0byBicmFpbGxlIHRlcm1pbmFscyBmb3IgYXBwbGljYXRpb25zLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNi0yMDIzIGJ5CisgKiAgIFNhbXVlbCBUaGliYXVsdCA8U2FtdWVsLlRoaWJhdWx0QGVucy1seW9uLm9yZz4KKyAqICAgU8OpYmFzdGllbiBIaW5kZXJlciA8U2ViYXN0aWVuLkhpbmRlcmVyQGVucy1seW9uLm9yZz4KKyAqCisgKiBsaWJicmxhcGkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorICoKKyAqIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyAqCisgKiBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisgKi8KKworcGFja2FnZSBvcmcuYTExeS5icmxhcGkucGFyYW1ldGVyczsKKworaW1wb3J0IG9yZy5hMTF5LmJybGFwaS4qOworCitwdWJsaWMgY2xhc3MgRHJpdmVyTmFtZVBhcmFtZXRlciBleHRlbmRzIEdsb2JhbFBhcmFtZXRlciB7CisgIHB1YmxpYyBEcml2ZXJOYW1lUGFyYW1ldGVyIChDb25uZWN0aW9uQmFzZSBjb25uZWN0aW9uKSB7CisgICAgc3VwZXIoY29ubmVjdGlvbik7CisgIH0KKworICBAT3ZlcnJpZGUKKyAgcHVibGljIGZpbmFsIGludCBnZXRQYXJhbWV0ZXIgKCkgeworICAgIHJldHVybiBDb25zdGFudHMuUEFSQU1fRFJJVkVSX05BTUU7CisgIH0KKworICBAT3ZlcnJpZGUKKyAgcHVibGljIGZpbmFsIFN0cmluZyBnZXQgKCkgeworICAgIHJldHVybiBhc1N0cmluZyhnZXRWYWx1ZSgpKTsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvQmluZGluZ3MvSmF2YS9wYXJhbWV0ZXJzL0RyaXZlclZlcnNpb25QYXJhbWV0ZXIuamF2YSBiL0JpbmRpbmdzL0phdmEvcGFyYW1ldGVycy9Ecml2ZXJWZXJzaW9uUGFyYW1ldGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzdmNWZhOQotLS0gL2Rldi9udWxsCisrKyBiL0JpbmRpbmdzL0phdmEvcGFyYW1ldGVycy9Ecml2ZXJWZXJzaW9uUGFyYW1ldGVyLmphdmEKQEAgLTAsMCArMSwzOCBAQAorLyoKKyAqIGxpYmJybGFwaSAtIEEgbGlicmFyeSBwcm92aWRpbmcgYWNjZXNzIHRvIGJyYWlsbGUgdGVybWluYWxzIGZvciBhcHBsaWNhdGlvbnMuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMjMgYnkKKyAqICAgU2FtdWVsIFRoaWJhdWx0IDxTYW11ZWwuVGhpYmF1bHRAZW5zLWx5b24ub3JnPgorICogICBTw6liYXN0aWVuIEhpbmRlcmVyIDxTZWJhc3RpZW4uSGluZGVyZXJAZW5zLWx5b24ub3JnPgorICoKKyAqIGxpYmJybGFwaSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorICoKKyAqIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyAqLworCitwYWNrYWdlIG9yZy5hMTF5LmJybGFwaS5wYXJhbWV0ZXJzOworCitpbXBvcnQgb3JnLmExMXkuYnJsYXBpLio7CisKK3B1YmxpYyBjbGFzcyBEcml2ZXJWZXJzaW9uUGFyYW1ldGVyIGV4dGVuZHMgR2xvYmFsUGFyYW1ldGVyIHsKKyAgcHVibGljIERyaXZlclZlcnNpb25QYXJhbWV0ZXIgKENvbm5lY3Rpb25CYXNlIGNvbm5lY3Rpb24pIHsKKyAgICBzdXBlcihjb25uZWN0aW9uKTsKKyAgfQorCisgIEBPdmVycmlkZQorICBwdWJsaWMgZmluYWwgaW50IGdldFBhcmFtZXRlciAoKSB7CisgICAgcmV0dXJuIENvbnN0YW50cy5QQVJBTV9EUklWRVJfVkVSU0lPTjsKKyAgfQorCisgIEBPdmVycmlkZQorICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldCAoKSB7CisgICAgcmV0dXJuIGFzU3RyaW5nKGdldFZhbHVlKCkpOworICB9Cit9CmRpZmYgLS1naXQgYS9CaW5kaW5ncy9KYXZhL3BhcmFtZXRlcnMvTGl0ZXJhcnlCcmFpbGxlUGFyYW1ldGVyLmphdmEgYi9CaW5kaW5ncy9KYXZhL3BhcmFtZXRlcnMvTGl0ZXJhcnlCcmFpbGxlUGFyYW1ldGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2JmODM3NwotLS0gL2Rldi9udWxsCisrKyBiL0JpbmRpbmdzL0phdmEvcGFyYW1ldGVycy9MaXRlcmFyeUJyYWlsbGVQYXJhbWV0ZXIuamF2YQpAQCAtMCwwICsxLDQzIEBACisvKgorICogbGliYnJsYXBpIC0gQSBsaWJyYXJ5IHByb3ZpZGluZyBhY2Nlc3MgdG8gYnJhaWxsZSB0ZXJtaW5hbHMgZm9yIGFwcGxpY2F0aW9ucy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAyMyBieQorICogICBTYW11ZWwgVGhpYmF1bHQgPFNhbXVlbC5UaGliYXVsdEBlbnMtbHlvbi5vcmc+CisgKiAgIFPDqWJhc3RpZW4gSGluZGVyZXIgPFNlYmFzdGllbi5IaW5kZXJlckBlbnMtbHlvbi5vcmc+CisgKgorICogbGliYnJsYXBpIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKK3BhY2thZ2Ugb3JnLmExMXkuYnJsYXBpLnBhcmFtZXRlcnM7CisKK2ltcG9ydCBvcmcuYTExeS5icmxhcGkuKjsKKworcHVibGljIGNsYXNzIExpdGVyYXJ5QnJhaWxsZVBhcmFtZXRlciBleHRlbmRzIEdsb2JhbFBhcmFtZXRlciBpbXBsZW1lbnRzIFBhcmFtZXRlci5Cb29sZWFuU2V0dGFibGUgeworICBwdWJsaWMgTGl0ZXJhcnlCcmFpbGxlUGFyYW1ldGVyIChDb25uZWN0aW9uQmFzZSBjb25uZWN0aW9uKSB7CisgICAgc3VwZXIoY29ubmVjdGlvbik7CisgIH0KKworICBAT3ZlcnJpZGUKKyAgcHVibGljIGZpbmFsIGludCBnZXRQYXJhbWV0ZXIgKCkgeworICAgIHJldHVybiBDb25zdGFudHMuUEFSQU1fTElURVJBUllfQlJBSUxMRTsKKyAgfQorCisgIEBPdmVycmlkZQorICBwdWJsaWMgZmluYWwgQm9vbGVhbiBnZXQgKCkgeworICAgIHJldHVybiBhc0Jvb2xlYW4oZ2V0VmFsdWUoKSk7CisgIH0KKworICBAT3ZlcnJpZGUKKyAgcHVibGljIGZpbmFsIHZvaWQgc2V0IChib29sZWFuIHllcykgeworICAgIHNldFZhbHVlKG5ldyBib29sZWFuW10ge3llc30pOworICB9Cit9CmRpZmYgLS1naXQgYS9CaW5kaW5ncy9KYXZhL3BhcmFtZXRlcnMvTGl0ZXJhcnlCcmFpbGxlVGFibGVQYXJhbWV0ZXIuamF2YSBiL0JpbmRpbmdzL0phdmEvcGFyYW1ldGVycy9MaXRlcmFyeUJyYWlsbGVUYWJsZVBhcmFtZXRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjMWI1OGUKLS0tIC9kZXYvbnVsbAorKysgYi9CaW5kaW5ncy9KYXZhL3BhcmFtZXRlcnMvTGl0ZXJhcnlCcmFpbGxlVGFibGVQYXJhbWV0ZXIuamF2YQpAQCAtMCwwICsxLDQzIEBACisvKgorICogbGliYnJsYXBpIC0gQSBsaWJyYXJ5IHByb3ZpZGluZyBhY2Nlc3MgdG8gYnJhaWxsZSB0ZXJtaW5hbHMgZm9yIGFwcGxpY2F0aW9ucy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAyMyBieQorICogICBTYW11ZWwgVGhpYmF1bHQgPFNhbXVlbC5UaGliYXVsdEBlbnMtbHlvbi5vcmc+CisgKiAgIFPDqWJhc3RpZW4gSGluZGVyZXIgPFNlYmFzdGllbi5IaW5kZXJlckBlbnMtbHlvbi5vcmc+CisgKgorICogbGliYnJsYXBpIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKK3BhY2thZ2Ugb3JnLmExMXkuYnJsYXBpLnBhcmFtZXRlcnM7CisKK2ltcG9ydCBvcmcuYTExeS5icmxhcGkuKjsKKworcHVibGljIGNsYXNzIExpdGVyYXJ5QnJhaWxsZVRhYmxlUGFyYW1ldGVyIGV4dGVuZHMgR2xvYmFsUGFyYW1ldGVyIGltcGxlbWVudHMgUGFyYW1ldGVyLlN0cmluZ1NldHRhYmxlIHsKKyAgcHVibGljIExpdGVyYXJ5QnJhaWxsZVRhYmxlUGFyYW1ldGVyIChDb25uZWN0aW9uQmFzZSBjb25uZWN0aW9uKSB7CisgICAgc3VwZXIoY29ubmVjdGlvbik7CisgIH0KKworICBAT3ZlcnJpZGUKKyAgcHVibGljIGZpbmFsIGludCBnZXRQYXJhbWV0ZXIgKCkgeworICAgIHJldHVybiBDb25zdGFudHMuUEFSQU1fTElURVJBUllfQlJBSUxMRV9UQUJMRTsKKyAgfQorCisgIEBPdmVycmlkZQorICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldCAoKSB7CisgICAgcmV0dXJuIGFzU3RyaW5nKGdldFZhbHVlKCkpOworICB9CisKKyAgQE92ZXJyaWRlCisgIHB1YmxpYyBmaW5hbCB2b2lkIHNldCAoU3RyaW5nIG5hbWUpIHsKKyAgICBzZXRWYWx1ZShuYW1lKTsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvQmluZGluZ3MvSmF2YS9wYXJhbWV0ZXJzL01lc3NhZ2VMb2NhbGVQYXJhbWV0ZXIuamF2YSBiL0JpbmRpbmdzL0phdmEvcGFyYW1ldGVycy9NZXNzYWdlTG9jYWxlUGFyYW1ldGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODc5Yjc5ZgotLS0gL2Rldi9udWxsCisrKyBiL0JpbmRpbmdzL0phdmEvcGFyYW1ldGVycy9NZXNzYWdlTG9jYWxlUGFyYW1ldGVyLmphdmEKQEAgLTAsMCArMSw0MyBAQAorLyoKKyAqIGxpYmJybGFwaSAtIEEgbGlicmFyeSBwcm92aWRpbmcgYWNjZXNzIHRvIGJyYWlsbGUgdGVybWluYWxzIGZvciBhcHBsaWNhdGlvbnMuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMjMgYnkKKyAqICAgU2FtdWVsIFRoaWJhdWx0IDxTYW11ZWwuVGhpYmF1bHRAZW5zLWx5b24ub3JnPgorICogICBTw6liYXN0aWVuIEhpbmRlcmVyIDxTZWJhc3RpZW4uSGluZGVyZXJAZW5zLWx5b24ub3JnPgorICoKKyAqIGxpYmJybGFwaSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorICoKKyAqIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyAqLworCitwYWNrYWdlIG9yZy5hMTF5LmJybGFwaS5wYXJhbWV0ZXJzOworCitpbXBvcnQgb3JnLmExMXkuYnJsYXBpLio7CisKK3B1YmxpYyBjbGFzcyBNZXNzYWdlTG9jYWxlUGFyYW1ldGVyIGV4dGVuZHMgR2xvYmFsUGFyYW1ldGVyIGltcGxlbWVudHMgUGFyYW1ldGVyLlN0cmluZ1NldHRhYmxlIHsKKyAgcHVibGljIE1lc3NhZ2VMb2NhbGVQYXJhbWV0ZXIgKENvbm5lY3Rpb25CYXNlIGNvbm5lY3Rpb24pIHsKKyAgICBzdXBlcihjb25uZWN0aW9uKTsKKyAgfQorCisgIEBPdmVycmlkZQorICBwdWJsaWMgZmluYWwgaW50IGdldFBhcmFtZXRlciAoKSB7CisgICAgcmV0dXJuIENvbnN0YW50cy5QQVJBTV9NRVNTQUdFX0xPQ0FMRTsKKyAgfQorCisgIEBPdmVycmlkZQorICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldCAoKSB7CisgICAgcmV0dXJuIGFzU3RyaW5nKGdldFZhbHVlKCkpOworICB9CisKKyAgQE92ZXJyaWRlCisgIHB1YmxpYyBmaW5hbCB2b2lkIHNldCAoU3RyaW5nIGxvY2FsZSkgeworICAgIHNldFZhbHVlKGxvY2FsZSk7CisgIH0KK30KZGlmZiAtLWdpdCBhL0JpbmRpbmdzL0phdmEvcGFyYW1ldGVycy9SZW5kZXJlZENlbGxzUGFyYW1ldGVyLmphdmEgYi9CaW5kaW5ncy9KYXZhL3BhcmFtZXRlcnMvUmVuZGVyZWRDZWxsc1BhcmFtZXRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI0Nzc2NzUKLS0tIC9kZXYvbnVsbAorKysgYi9CaW5kaW5ncy9KYXZhL3BhcmFtZXRlcnMvUmVuZGVyZWRDZWxsc1BhcmFtZXRlci5qYXZhCkBAIC0wLDAgKzEsNDggQEAKKy8qCisgKiBsaWJicmxhcGkgLSBBIGxpYnJhcnkgcHJvdmlkaW5nIGFjY2VzcyB0byBicmFpbGxlIHRlcm1pbmFscyBmb3IgYXBwbGljYXRpb25zLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNi0yMDIzIGJ5CisgKiAgIFNhbXVlbCBUaGliYXVsdCA8U2FtdWVsLlRoaWJhdWx0QGVucy1seW9uLm9yZz4KKyAqICAgU8OpYmFzdGllbiBIaW5kZXJlciA8U2ViYXN0aWVuLkhpbmRlcmVyQGVucy1seW9uLm9yZz4KKyAqCisgKiBsaWJicmxhcGkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorICoKKyAqIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyAqCisgKiBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisgKi8KKworcGFja2FnZSBvcmcuYTExeS5icmxhcGkucGFyYW1ldGVyczsKKworaW1wb3J0IG9yZy5hMTF5LmJybGFwaS4qOworCitwdWJsaWMgY2xhc3MgUmVuZGVyZWRDZWxsc1BhcmFtZXRlciBleHRlbmRzIExvY2FsUGFyYW1ldGVyIHsKKyAgcHVibGljIFJlbmRlcmVkQ2VsbHNQYXJhbWV0ZXIgKENvbm5lY3Rpb25CYXNlIGNvbm5lY3Rpb24pIHsKKyAgICBzdXBlcihjb25uZWN0aW9uKTsKKyAgfQorCisgIEBPdmVycmlkZQorICBwdWJsaWMgZmluYWwgaW50IGdldFBhcmFtZXRlciAoKSB7CisgICAgcmV0dXJuIENvbnN0YW50cy5QQVJBTV9SRU5ERVJFRF9DRUxMUzsKKyAgfQorCisgIEBPdmVycmlkZQorICBwdWJsaWMgYm9vbGVhbiBpc0hpZGFibGUgKCkgeworICAgIHJldHVybiB0cnVlOworICB9CisKKyAgQE92ZXJyaWRlCisgIHB1YmxpYyBmaW5hbCBieXRlW10gZ2V0ICgpIHsKKyAgICByZXR1cm4gYXNCeXRlQXJyYXkoZ2V0VmFsdWUoKSk7CisgIH0KKworICBAT3ZlcnJpZGUKKyAgcHVibGljIFN0cmluZyB0b1N0cmluZyAoKSB7CisgICAgcmV0dXJuIGFzRG90cyhnZXQoKSk7CisgIH0KK30KZGlmZiAtLWdpdCBhL0JpbmRpbmdzL0phdmEvcGFyYW1ldGVycy9SZXRhaW5Eb3RzUGFyYW1ldGVyLmphdmEgYi9CaW5kaW5ncy9KYXZhL3BhcmFtZXRlcnMvUmV0YWluRG90c1BhcmFtZXRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU0NGNhYTcKLS0tIC9kZXYvbnVsbAorKysgYi9CaW5kaW5ncy9KYXZhL3BhcmFtZXRlcnMvUmV0YWluRG90c1BhcmFtZXRlci5qYXZhCkBAIC0wLDAgKzEsNDMgQEAKKy8qCisgKiBsaWJicmxhcGkgLSBBIGxpYnJhcnkgcHJvdmlkaW5nIGFjY2VzcyB0byBicmFpbGxlIHRlcm1pbmFscyBmb3IgYXBwbGljYXRpb25zLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNi0yMDIzIGJ5CisgKiAgIFNhbXVlbCBUaGliYXVsdCA8U2FtdWVsLlRoaWJhdWx0QGVucy1seW9uLm9yZz4KKyAqICAgU8OpYmFzdGllbiBIaW5kZXJlciA8U2ViYXN0aWVuLkhpbmRlcmVyQGVucy1seW9uLm9yZz4KKyAqCisgKiBsaWJicmxhcGkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorICoKKyAqIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyAqCisgKiBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisgKi8KKworcGFja2FnZSBvcmcuYTExeS5icmxhcGkucGFyYW1ldGVyczsKKworaW1wb3J0IG9yZy5hMTF5LmJybGFwaS4qOworCitwdWJsaWMgY2xhc3MgUmV0YWluRG90c1BhcmFtZXRlciBleHRlbmRzIExvY2FsUGFyYW1ldGVyIGltcGxlbWVudHMgUGFyYW1ldGVyLkJvb2xlYW5TZXR0YWJsZSB7CisgIHB1YmxpYyBSZXRhaW5Eb3RzUGFyYW1ldGVyIChDb25uZWN0aW9uQmFzZSBjb25uZWN0aW9uKSB7CisgICAgc3VwZXIoY29ubmVjdGlvbik7CisgIH0KKworICBAT3ZlcnJpZGUKKyAgcHVibGljIGZpbmFsIGludCBnZXRQYXJhbWV0ZXIgKCkgeworICAgIHJldHVybiBDb25zdGFudHMuUEFSQU1fUkVUQUlOX0RPVFM7CisgIH0KKworICBAT3ZlcnJpZGUKKyAgcHVibGljIGZpbmFsIEJvb2xlYW4gZ2V0ICgpIHsKKyAgICByZXR1cm4gYXNCb29sZWFuKGdldFZhbHVlKCkpOworICB9CisKKyAgQE92ZXJyaWRlCisgIHB1YmxpYyBmaW5hbCB2b2lkIHNldCAoYm9vbGVhbiB5ZXMpIHsKKyAgICBzZXRWYWx1ZShuZXcgYm9vbGVhbltdIHt5ZXN9KTsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvQmluZGluZ3MvSmF2YS9wYXJhbWV0ZXJzL1NlcnZlclZlcnNpb25QYXJhbWV0ZXIuamF2YSBiL0JpbmRpbmdzL0phdmEvcGFyYW1ldGVycy9TZXJ2ZXJWZXJzaW9uUGFyYW1ldGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzA0YjQ3OQotLS0gL2Rldi9udWxsCisrKyBiL0JpbmRpbmdzL0phdmEvcGFyYW1ldGVycy9TZXJ2ZXJWZXJzaW9uUGFyYW1ldGVyLmphdmEKQEAgLTAsMCArMSwzOCBAQAorLyoKKyAqIGxpYmJybGFwaSAtIEEgbGlicmFyeSBwcm92aWRpbmcgYWNjZXNzIHRvIGJyYWlsbGUgdGVybWluYWxzIGZvciBhcHBsaWNhdGlvbnMuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMjMgYnkKKyAqICAgU2FtdWVsIFRoaWJhdWx0IDxTYW11ZWwuVGhpYmF1bHRAZW5zLWx5b24ub3JnPgorICogICBTw6liYXN0aWVuIEhpbmRlcmVyIDxTZWJhc3RpZW4uSGluZGVyZXJAZW5zLWx5b24ub3JnPgorICoKKyAqIGxpYmJybGFwaSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorICoKKyAqIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyAqLworCitwYWNrYWdlIG9yZy5hMTF5LmJybGFwaS5wYXJhbWV0ZXJzOworCitpbXBvcnQgb3JnLmExMXkuYnJsYXBpLio7CisKK3B1YmxpYyBjbGFzcyBTZXJ2ZXJWZXJzaW9uUGFyYW1ldGVyIGV4dGVuZHMgR2xvYmFsUGFyYW1ldGVyIHsKKyAgcHVibGljIFNlcnZlclZlcnNpb25QYXJhbWV0ZXIgKENvbm5lY3Rpb25CYXNlIGNvbm5lY3Rpb24pIHsKKyAgICBzdXBlcihjb25uZWN0aW9uKTsKKyAgfQorCisgIEBPdmVycmlkZQorICBwdWJsaWMgZmluYWwgaW50IGdldFBhcmFtZXRlciAoKSB7CisgICAgcmV0dXJuIENvbnN0YW50cy5QQVJBTV9TRVJWRVJfVkVSU0lPTjsKKyAgfQorCisgIEBPdmVycmlkZQorICBwdWJsaWMgZmluYWwgSW50ZWdlciBnZXQgKCkgeworICAgIHJldHVybiBhc0ludChnZXRWYWx1ZSgpKTsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvQmluZGluZ3MvSmF2YS9wYXJhbWV0ZXJzL1NraXBJZGVudGljYWxMaW5lc1BhcmFtZXRlci5qYXZhIGIvQmluZGluZ3MvSmF2YS9wYXJhbWV0ZXJzL1NraXBJZGVudGljYWxMaW5lc1BhcmFtZXRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjViMjgwMWUKLS0tIC9kZXYvbnVsbAorKysgYi9CaW5kaW5ncy9KYXZhL3BhcmFtZXRlcnMvU2tpcElkZW50aWNhbExpbmVzUGFyYW1ldGVyLmphdmEKQEAgLTAsMCArMSw0MyBAQAorLyoKKyAqIGxpYmJybGFwaSAtIEEgbGlicmFyeSBwcm92aWRpbmcgYWNjZXNzIHRvIGJyYWlsbGUgdGVybWluYWxzIGZvciBhcHBsaWNhdGlvbnMuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMjMgYnkKKyAqICAgU2FtdWVsIFRoaWJhdWx0IDxTYW11ZWwuVGhpYmF1bHRAZW5zLWx5b24ub3JnPgorICogICBTw6liYXN0aWVuIEhpbmRlcmVyIDxTZWJhc3RpZW4uSGluZGVyZXJAZW5zLWx5b24ub3JnPgorICoKKyAqIGxpYmJybGFwaSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorICoKKyAqIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyAqLworCitwYWNrYWdlIG9yZy5hMTF5LmJybGFwaS5wYXJhbWV0ZXJzOworCitpbXBvcnQgb3JnLmExMXkuYnJsYXBpLio7CisKK3B1YmxpYyBjbGFzcyBTa2lwSWRlbnRpY2FsTGluZXNQYXJhbWV0ZXIgZXh0ZW5kcyBHbG9iYWxQYXJhbWV0ZXIgaW1wbGVtZW50cyBQYXJhbWV0ZXIuQm9vbGVhblNldHRhYmxlIHsKKyAgcHVibGljIFNraXBJZGVudGljYWxMaW5lc1BhcmFtZXRlciAoQ29ubmVjdGlvbkJhc2UgY29ubmVjdGlvbikgeworICAgIHN1cGVyKGNvbm5lY3Rpb24pOworICB9CisKKyAgQE92ZXJyaWRlCisgIHB1YmxpYyBmaW5hbCBpbnQgZ2V0UGFyYW1ldGVyICgpIHsKKyAgICByZXR1cm4gQ29uc3RhbnRzLlBBUkFNX1NLSVBfSURFTlRJQ0FMX0xJTkVTOworICB9CisKKyAgQE92ZXJyaWRlCisgIHB1YmxpYyBmaW5hbCBCb29sZWFuIGdldCAoKSB7CisgICAgcmV0dXJuIGFzQm9vbGVhbihnZXRWYWx1ZSgpKTsKKyAgfQorCisgIEBPdmVycmlkZQorICBwdWJsaWMgZmluYWwgdm9pZCBzZXQgKGJvb2xlYW4geWVzKSB7CisgICAgc2V0VmFsdWUobmV3IGJvb2xlYW5bXSB7eWVzfSk7CisgIH0KK30KZGlmZiAtLWdpdCBhL0JpbmRpbmdzL0phdmEvcHJvZ3JhbXMvVmVyc2lvblByb2dyYW0uamF2YSBiL0JpbmRpbmdzL0phdmEvcHJvZ3JhbXMvVmVyc2lvblByb2dyYW0uamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MTJhMGE0Ci0tLSAvZGV2L251bGwKKysrIGIvQmluZGluZ3MvSmF2YS9wcm9ncmFtcy9WZXJzaW9uUHJvZ3JhbS5qYXZhCkBAIC0wLDAgKzEsMzUgQEAKKy8qCisgKiBsaWJicmxhcGkgLSBBIGxpYnJhcnkgcHJvdmlkaW5nIGFjY2VzcyB0byBicmFpbGxlIHRlcm1pbmFscyBmb3IgYXBwbGljYXRpb25zLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNi0yMDIzIGJ5CisgKiAgIFNhbXVlbCBUaGliYXVsdCA8U2FtdWVsLlRoaWJhdWx0QGVucy1seW9uLm9yZz4KKyAqICAgU8OpYmFzdGllbiBIaW5kZXJlciA8U2ViYXN0aWVuLkhpbmRlcmVyQGVucy1seW9uLm9yZz4KKyAqCisgKiBsaWJicmxhcGkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorICoKKyAqIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyAqCisgKiBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisgKi8KKworcGFja2FnZSBvcmcuYTExeS5icmxhcGkucHJvZ3JhbXM7CisKK2ltcG9ydCBvcmcuYTExeS5icmxhcGkuKjsKKworcHVibGljIGNsYXNzIFZlcnNpb25Qcm9ncmFtIGV4dGVuZHMgUHJvZ3JhbSB7CisgIHB1YmxpYyBWZXJzaW9uUHJvZ3JhbSAoU3RyaW5nLi4uIGFyZ3VtZW50cykgeworICAgIHN1cGVyKGFyZ3VtZW50cyk7CisgIH0KKworICBAT3ZlcnJpZGUKKyAgcHJvdGVjdGVkIGZpbmFsIHZvaWQgcnVuUHJvZ3JhbSAoKSB7CisgICAgcHJpbnRmKAorICAgICAgIiVkLiVkLiVkXG4iLCBBUElWZXJzaW9uLk1BSk9SLCBBUElWZXJzaW9uLk1JTk9SLCBBUElWZXJzaW9uLlJFVklTSU9OCisgICAgKTsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvQmluZGluZ3MvTGlzcC9NYWtlZmlsZS5pbiBiL0JpbmRpbmdzL0xpc3AvTWFrZWZpbGUuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjFiMWI3ZgotLS0gL2Rldi9udWxsCisrKyBiL0JpbmRpbmdzL0xpc3AvTWFrZWZpbGUuaW4KQEAgLTAsMCArMSwyOSBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBsaWJicmxhcGkgLSBBIGxpYnJhcnkgcHJvdmlkaW5nIGFjY2VzcyB0byBicmFpbGxlIHRlcm1pbmFscyBmb3IgYXBwbGljYXRpb25zLgorIworIyBDb3B5cmlnaHQgKEMpIDIwMDYtMjAyMyBieSBNYXJpbyBMYW5nIDxtbGFuZ0BkZWx5c2lkLm9yZz4KKyMKKyMgbGliYnJsYXBpIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitpbmNsdWRlICQoU1JDX1RPUCliaW5kaW5ncy5taworCithbGw6CisKK2luc3RhbGw6IGFsbAorCit1bmluc3RhbGw6CisKK2Rpc3RjbGVhbjo6CisJLXJtIC1mIGJybGFwaS5hc2QKKwktcm0gLWYgYnJsYXBpX2NvbmZpZy5saXNwCisKZGlmZiAtLWdpdCBhL0JpbmRpbmdzL0xpc3AvYXBpc2V0dXAubGlzcCBiL0JpbmRpbmdzL0xpc3AvYXBpc2V0dXAubGlzcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iY2FhM2VhCi0tLSAvZGV2L251bGwKKysrIGIvQmluZGluZ3MvTGlzcC9hcGlzZXR1cC5saXNwCkBAIC0wLDAgKzEsMzggQEAKKzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OzsKKzsgbGliYnJsYXBpIC0gQSBsaWJyYXJ5IHByb3ZpZGluZyBhY2Nlc3MgdG8gYnJhaWxsZSB0ZXJtaW5hbHMgZm9yIGFwcGxpY2F0aW9ucy4KKzsKKzsgQ29weXJpZ2h0IChDKSAyMDA2LTIwMjMgYnkgTWFyaW8gTGFuZyA8bWxhbmdAZGVseXNpZC5vcmc+Cis7Cis7IGxpYmJybGFwaSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCis7Cis7IFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKzsgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKzsgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorOyBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKzsKKzsgV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworOworOyBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OzsKKworKHJlcXVpcmUgJ2FzZGYpCisocmVxdWlyZSAnc2ItcG9zaXgpCisKKyhkZWZ1biBjdXJyZW50LWRpcmVjdG9yeSAoKQorICAiVGhlIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkgYXMgYSBkaXJlY3RvcnkgcGF0aC4iCisgIChjb25jYXRlbmF0ZSAnc3RyaW5nIChzYi1wb3NpeDpnZXRjd2QpICIvIikKKykKKworKGRlZnVuIGFkZC1wYWNrYWdlLWRpcmVjdG9yeSAocGF0aCkKKyAgIkFkZCBhIGRpcmVjdG9yeSBmcm9tIHdoaWNoIHBhY2thZ2VzIGNhbiBiZSBsb2FkZWQuIgorICAocHVzaG5ldyBwYXRoIGFzZGY6KmNlbnRyYWwtcmVnaXN0cnkqIDp0ZXN0ICMnZXF1YWwpCispCisKKyhkZWZ1biBsb2FkLXBhY2thZ2UgKG5hbWUpCisgICJMb2FkIGEgcGFja2FnZS4iCisgIChhc2RmOm9wZXJhdGUgJ2FzZGY6bG9hZC1vcCBuYW1lKQorKQorCisoYWRkLXBhY2thZ2UtZGlyZWN0b3J5IChjdXJyZW50LWRpcmVjdG9yeSkpCisobG9hZC1wYWNrYWdlICdicmxhcGkpCisKZGlmZiAtLWdpdCBhL0JpbmRpbmdzL0xpc3AvYXBpdGVzdCBiL0JpbmRpbmdzL0xpc3AvYXBpdGVzdApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5iNWEwMjQzCi0tLSAvZGV2L251bGwKKysrIGIvQmluZGluZ3MvTGlzcC9hcGl0ZXN0CkBAIC0wLDAgKzEsMjEgQEAKKyMhL2Jpbi9zaAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBsaWJicmxhcGkgLSBBIGxpYnJhcnkgcHJvdmlkaW5nIGFjY2VzcyB0byBicmFpbGxlIHRlcm1pbmFscyBmb3IgYXBwbGljYXRpb25zLgorIworIyBDb3B5cmlnaHQgKEMpIDIwMDYtMjAyMyBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+CisjCisjIGxpYmJybGFwaSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisjCisjIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyMgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorIyBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyMKKyMgV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworIworIyBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworLiAiJHswJS8qfS8uLi8uLi9hcGl0ZXN0LnNoIgorZXhlYyBzYmNsIC0tc2NyaXB0ICIke3Byb2dyYW1EaXJlY3Rvcnl9L2FwaXRlc3QubGlzcCIgIiR7QH0iCitleGl0ICIkez99IgpkaWZmIC0tZ2l0IGEvQmluZGluZ3MvTGlzcC9hcGl0ZXN0Lmxpc3AgYi9CaW5kaW5ncy9MaXNwL2FwaXRlc3QubGlzcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZmU1ODdkCi0tLSAvZGV2L251bGwKKysrIGIvQmluZGluZ3MvTGlzcC9hcGl0ZXN0Lmxpc3AKQEAgLTAsMCArMSw5MCBAQAorOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OworOyBsaWJicmxhcGkgLSBBIGxpYnJhcnkgcHJvdmlkaW5nIGFjY2VzcyB0byBicmFpbGxlIHRlcm1pbmFscyBmb3IgYXBwbGljYXRpb25zLgorOworOyBDb3B5cmlnaHQgKEMpIDIwMDYtMjAyMyBieSBNYXJpbyBMYW5nIDxtbGFuZ0BkZWx5c2lkLm9yZz4KKzsKKzsgbGliYnJsYXBpIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKzsKKzsgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorOyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorOyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55Cis7IGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorOworOyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCis7Cis7IFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OworCisobG9hZCAiYXBpc2V0dXAubGlzcCIpCisKKyhkZWZ1biBicmxhcGktdGVzdC10dHkgKG91dHB1dCBzZXNzaW9uICZrZXkgdHR5IHRpbWVvdXQpCisgICJQZXJmb3JtIGEgdGVzdCBvZiBCcmxBUEkncyBpbnB1dCBmdW5jdGlvbnMuIgorCisgIChzZXRmIHR0eSAoaWYgdHR5ICAocGFyc2UtaW50ZWdlciB0dHkpIC0xKSkKKyAgKHNldGYgdGltZW91dCAoaWYgdGltZW91dCAgKHBhcnNlLWludGVnZXIgdGltZW91dCkgMTApKQorCisgIChicmxhcGk6ZW50ZXItdHR5LW1vZGUgc2Vzc2lvbiB0dHkpCisgIChicmxhcGk6d3JpdGUtdGV4dCBzZXNzaW9uIChmb3JtYXQgbmlsICJwcmVzcyBrZXlzICh0aW1lb3V0IGlzIH5EIHNlY29uZHMpIiB0aW1lb3V0KSkKKworICAobG9vcAorICAgIHdpdGggY29kZQorICAgIHdpdGggdGV4dAorICAgIHdoaWxlIChzZXRmIGNvZGUgKGJybGFwaTpyZWFkLWtleS13aXRoLXRpbWVvdXQgc2Vzc2lvbiB0aW1lb3V0KSkKKyAgICBkbyAoc2V0ZiB0ZXh0CisgICAgICAgICAoYXBwbHkgIydmb3JtYXQgbmlsCisgICAgICAgICAgICJjb2RlPTBYflggdHlwZT1+QSBjbWQ9fkEgYXJnPX5EIGZsZz1+e35Bfl4sfn0iCisgICAgICAgICAgIChsaXN0KiBjb2RlIChicmxhcGk6ZGVzY3JpYmUta2V5LWNvZGUgY29kZSkpKSkKKyAgICAgICAoZm9ybWF0IG91dHB1dCAiS2V5OiB+QX4lIiB0ZXh0KQorICAgICAgIChicmxhcGk6d3JpdGUtdGV4dCBzZXNzaW9uIHRleHQpCisgICkKKyAgKGJybGFwaTpsZWF2ZS10dHktbW9kZSBzZXNzaW9uKQorKQorCisoZGVmdW4gYnJsYXBpLXRlc3QgKCZrZXkgaG9zdCBhdXRoIHR0eSB0aW1lb3V0KQorICAiUGVyZm9ybSBhIHRlc3Qgb2YgdmFyaW91cyBCcmxBUEkgZnVuY3RpaW5zLiIKKworICAobGV0ICgKKyAgICAgIChvdXRwdXQgKnN0YW5kYXJkLW91dHB1dCopCisgICAgICAoc2Vzc2lvbiAoYnJsYXBpOm9wZW4tY29ubmVjdGlvbiA6YXV0aCBhdXRoIDpob3N0IGhvc3QpKQorICAgICkKKworICAgIChsb29wCisgICAgICBmb3IgKG5hbWUgdmFsdWUgZm9ybWF0KSBpbiAoYnJsYXBpOnByb3BlcnR5LWxpc3Qgc2Vzc2lvbikgYnkgIydjZHIKKyAgICAgIGRvIChmb3JtYXQgb3V0cHV0ICJ+QTogfkA/fiUiIG5hbWUgZm9ybWF0IHZhbHVlKQorICAgICkKKworICAgIChpZiAoYnJsYXBpOmlzLWNvbm5lY3RlZCBzZXNzaW9uKQorICAgICAgKHByb2duCisgICAgICAgIChpZiAob3IgdHR5IHRpbWVvdXQpCisgICAgICAgICAgKGJybGFwaS10ZXN0LXR0eSBvdXRwdXQgc2Vzc2lvbiA6dHR5IHR0eSA6dGltZW91dCB0aW1lb3V0KSkKKyAgICAgICkKKyAgICAgIChmb3JtYXQgb3V0cHV0ICJjb25uZWN0aW9uIGZhaWx1cmU6IH5BfiUiIChicmxhcGk6ZXJyb3ItbWVzc2FnZSkpCisgICAgKQorCisgICAgKGJybGFwaTpjbG9zZS1jb25uZWN0aW9uIHNlc3Npb24pCisgICkKKykKKworKGRlZnVuIHByb2dyYW0tYXJndW1lbnRzICgpCisgICJUaGUgY29tbWFuZC1saW5lIGFyZ3VtZW50cy4iCisKKyAgc2ItZXh0Oipwb3NpeC1hcmd2KgorKQorCisoZGVmdW4gc3RyaW5nLT5rZXl3b3JkIChzdHJpbmcpCisgICJDb252ZXJ0IGEgc3RyaW5nIHRvIGEga2V5d29yZC4iCisKKyAgKHZhbHVlcyAoaW50ZXJuIHN0cmluZyAiS0VZV09SRCIpKQorKQorCisoZGVmdW4gYXJndW1lbnRzLT5rZXl3b3JkLW9wdGlvbnMgKGFyZ3VtZW50cykKKyAgIkNvbnZlcnQgYSBsaXN0IG9mIGFyZ3VtZW50IHN0cmluZ3MgaW50byBhIGxpc3Qgb2Yga2V5d29yZCBvcHRpb25zLiIKKworICAobG9vcAorICAgIGZvciAob3B0aW9uIHZhbHVlKSBvbiBhcmd1bWVudHMgYnkgIydjZGRyCisgICAgYXBwZW5kIChsaXN0IChzdHJpbmctPmtleXdvcmQgKHN0cmluZy11cGNhc2Ugb3B0aW9uKSkgdmFsdWUpCisgICkKKykKKworKGFwcGx5ICMnYnJsYXBpLXRlc3QgKGFyZ3VtZW50cy0+a2V5d29yZC1vcHRpb25zIChjZHIgKHByb2dyYW0tYXJndW1lbnRzKSkpKQorKGV4aXQpCmRpZmYgLS1naXQgYS9CaW5kaW5ncy9MaXNwL2JpbmRpbmdzLm00IGIvQmluZGluZ3MvTGlzcC9iaW5kaW5ncy5tNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOGNjMjU1Ci0tLSAvZGV2L251bGwKKysrIGIvQmluZGluZ3MvTGlzcC9iaW5kaW5ncy5tNApAQCAtMCwwICsxLDIxIEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIGxpYmJybGFwaSAtIEEgbGlicmFyeSBwcm92aWRpbmcgYWNjZXNzIHRvIGJyYWlsbGUgdGVybWluYWxzIGZvciBhcHBsaWNhdGlvbnMuCisjCisjIENvcHlyaWdodCAoQykgMjAwNi0yMDIzIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4KKyMKKyMgbGliYnJsYXBpIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitBQ19ERUZVTihbQlJMVFRZX0xJU1BfQklORElOR1NdLCBbZG5sCitMSVNQX09LPXRydWUKK0FDX1NVQlNUKFtMSVNQX09LXSkKK10pCmRpZmYgLS1naXQgYS9CaW5kaW5ncy9MaXNwL2JybGFwaS5hc2QuaW4gYi9CaW5kaW5ncy9MaXNwL2JybGFwaS5hc2QuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjI0ZmU0NwotLS0gL2Rldi9udWxsCisrKyBiL0JpbmRpbmdzL0xpc3AvYnJsYXBpLmFzZC5pbgpAQCAtMCwwICsxLDMzIEBACis7Ozs7IEBjb25maWd1cmVfaW5wdXRACisKKzs7OzsgbGliYnJsYXBpIC0gQSBsaWJyYXJ5IHByb3ZpZGluZyBhY2Nlc3MgdG8gYnJhaWxsZSB0ZXJtaW5hbHMgZm9yIGFwcGxpY2F0aW9ucy4KKzs7OzsKKzs7OzsgQ29weXJpZ2h0IChDKSAyMDA2LTIwMjMgYnkgTWFyaW8gTGFuZyA8bWxhbmdAYmxpbmQuZ3VydT4KKzs7OzsKKzs7OzsgbGliYnJsYXBpIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKzs7OzsKKzs7OzsgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorOzs7OyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorOzs7OyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55Cis7Ozs7IGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorOzs7OworOzs7OyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCis7Ozs7Cis7Ozs7IFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorCis7Ozs7ICogQnJsQVBJIFN5c3RlbSBEZWZpbml0aW9uCisKKyhhc2RmOmRlZnN5c3RlbSA6YnJsYXBpCisgIDpuYW1lICJicmxhcGkiCisgIDp2ZXJzaW9uICJAYXBpX3JlbGVhc2VAIgorICA6ZGVzY3JpcHRpb24gIkJybEFQSSBjbGllbnQgYmluZGluZ3MgZm9yIENvbW1vbiBMaXNwLiIKKyAgOmhvbWVwYWdlICJAUEFDS0FHRV9VUkxAIgorICA6bWFpbHRvICJAUEFDS0FHRV9CVUdSRVBPUlRAIgorICA6YXV0aG9yICJNYXJpbyBMYW5nIDxNTGFuZ0BibGluZC5ndXJ1PiIKKyAgOmRlcGVuZHMtb24gKDpjZmZpKQorICA6c2VyaWFsIHQKKyAgOmNvbXBvbmVudHMgKCg6ZmlsZSAiYnJsYXBpX3Byb2xvZ3VlIikKKyAgICAgICAgICAgICAgICg6ZmlsZSAiYnJsYXBpX2NvbmZpZyIgOmRlcGVuZHMtb24gKCJicmxhcGlfcHJvbG9ndWUiKSkKKyAgICAgICAgICAgICAgICg6ZmlsZSAiYnJsYXBpIiA6ZGVwZW5kcy1vbiAoImJybGFwaV9jb25maWciKSkpKQorCis7Ozs7QGluY2x1ZGUgImJybGFwaS5saXNwIgpkaWZmIC0tZ2l0IGEvQmluZGluZ3MvTGlzcC9icmxhcGkubGlzcCBiL0JpbmRpbmdzL0xpc3AvYnJsYXBpLmxpc3AKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjIyMDA2YQotLS0gL2Rldi9udWxsCisrKyBiL0JpbmRpbmdzL0xpc3AvYnJsYXBpLmxpc3AKQEAgLTAsMCArMSwzMjUgQEAKKzs7OzsgbGliYnJsYXBpIC0gQSBsaWJyYXJ5IHByb3ZpZGluZyBhY2Nlc3MgdG8gYnJhaWxsZSB0ZXJtaW5hbHMgZm9yIGFwcGxpY2F0aW9ucy4KKzs7OzsKKzs7OzsgQ29weXJpZ2h0IChDKSAyMDA2LTIwMjMgYnkgTWFyaW8gTGFuZyA8bWxhbmdAZGVseXNpZC5vcmc+Cis7Ozs7Cis7Ozs7IGxpYmJybGFwaSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCis7Ozs7Cis7Ozs7IFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKzs7OzsgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKzs7OzsgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorOzs7OyBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKzs7OzsKKzs7OzsgV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworOzs7OworOzs7OyBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKworKGV2YWwtd2hlbiAoOmNvbXBpbGUtdG9wbGV2ZWwpCisgIChkZWNsYWltIChvcHRpbWl6ZSAoc2FmZXR5IDMpIChkZWJ1ZyAzKSkpKQorCisoaW4tcGFja2FnZSA6YnJsYXBpKQorDAorOzs7OyAqIFRoZSBESVNQTEFZIGNsYXNzCisKKyhkZWZjbGFzcyBkaXNwbGF5ICgpCisgICgoaGFuZGxlIDppbml0YXJnIDpoYW5kbGUgOnJlYWRlciBjb25uZWN0aW9uLWhhbmRsZSkKKyAgIChmZCA6aW5pdGFyZyA6ZmQgOnJlYWRlciBmaWxlLWRlc2NyaXB0b3IpCisgICAoYXV0aCA6aW5pdGFyZyA6YXV0aCA6cmVhZGVyIHNlcnZlci1hdXRoKQorICAgKGhvc3QgOmluaXRhcmcgOmhvc3QgOnJlYWRlciBzZXJ2ZXItaG9zdCkKKyAgICh0dHkgOmluaXRmb3JtIG5pbCA6cmVhZGVyIGVudGVyZWQtdHR5KSkpCisKKyhkZWZtZXRob2QgcHJvcGVydHktbGlzdCAoKG9iaiBkaXNwbGF5KSkKKyAgIlJldHVybiB2YXJpb3VzIHByb3BlcnRpZXMgYXMgYSBsc2l0IG9mIHRocmVlLWVsZW1lbnQgbGlzdHMuCitUaGUgc3VibGlzdCBmb3IgZWFjaCByZXR1cm5lZCBwcm9wZXJ0eSBjb250YWlucywgaW4gb3JkZXIsIGl0cyBuYW1lLCBpdHMgdmFsdWUsIGFuZCBpdHMgZm9ybWF0IHN0cmluZy4iCisgIChsaXN0KgorICAgIChsaXN0ICJ2ZXJzaW9uIiAobXVsdGlwbGUtdmFsdWUtbGlzdCAobGlicmFyeS12ZXJzaW9uKSkgIn57fkR+Xi5+fSIpCisgICAgKGlmIChpcy1jb25uZWN0ZWQgb2JqKQorICAgICAgKG11bHRpcGxlLXZhbHVlLWJpbmQgKHdpZHRoIGhlaWdodCkgKGRpc3BsYXktc2l6ZSBvYmopCisgICAgICAgIChsaXN0CisgICAgICAgICAgKGxpc3QgImhvc3QiIChzZXJ2ZXItaG9zdCBvYmopICJ+QSIpCisgICAgICAgICAgKGxpc3QgImF1dGgiIChzZXJ2ZXItYXV0aCBvYmopICJ+QSIpCisgICAgICAgICAgKGxpc3QgImZkIiAoZmlsZS1kZXNjcmlwdG9yIG9iaikgIn5EIikKKyAgICAgICAgICAobGlzdCAiZHJpdmVyIiAoZHJpdmVyLW5hbWUgb2JqKSAifkEiKQorICAgICAgICAgIChsaXN0ICJtb2RlbCIgKG1vZGVsLWlkZW50aWZpZXIgb2JqKSAifkEiKQorICAgICAgICAgIChsaXN0ICJ3aWR0aCIgd2lkdGggIn5EIikKKyAgICAgICAgICAobGlzdCAiaGVpZ2h0IiBoZWlnaHQgIn5EIikKKyAgICAgICAgKQorICAgICAgKQorICAgICkKKyAgKQorKQorCisoZGVmbWV0aG9kIHByaW50LW9iamVjdCAoKG9iaiBkaXNwbGF5KSBzdHJlYW0pCisgIChwcmludC11bnJlYWRhYmxlLW9iamVjdCAob2JqIHN0cmVhbSA6dHlwZSB0KQorICAgIChmb3JtYXQgc3RyZWFtICJ+e35Bfl4gfn0iCisgICAgICAobG9vcAorICAgICAgICBmb3IgKG5hbWUgdmFsdWUgZm9ybWF0KSBpbiAocHJvcGVydHktbGlzdCBvYmopIGJ5ICMnY2RyCisgICAgICAgIGFwcGVuZCAobGlzdCAoZm9ybWF0IG5pbCAifkE9fkA/IiBuYW1lIGZvcm1hdCB2YWx1ZSkpCisgICAgICApCisgICAgKQorICApCispCisKKwwKKzs7OzsgKiBFcnJvciBoYW5kbGluZworCisoZGVmY3R5cGUgYnJsYXBpLWNvZGUgOmludCkKKyhkZWZpbmUtY29uZGl0aW9uIGJybGFwaS1lcnJvciAoZXJyb3IpCisgICgodGV4dCA6aW5pdGFyZyA6dGV4dCA6cmVhZGVyIGJybGFwaS1lcnJvci10ZXh0KSkKKyAgKDpyZXBvcnQgKGxhbWJkYSAoYyBzdHJlYW0pCisgICAgICAgICAgICAgKGZvcm1hdCBzdHJlYW0gImxpYmJybGFwaSBmdW5jdGlvbiByZXR1cm5lZCB+QSIKKyAgICAgICAgICAgICAgICAgICAgIChicmxhcGktZXJyb3ItdGV4dCBjKSkpKQorICAoOmRvY3VtZW50YXRpb24gIlNpZ25hbGxlZCB3aGVuIGEgbGliYnJsYXBpIGZ1bmN0aW9uIGFuc3dlcnMgd2l0aCAtMS4iKSkKKworKGRlZm1ldGhvZCBlcnJvci1tZXNzYWdlICgpCisgICJUaGUgbWVzc2FnZSBmb3IgdGhlIG1vc3QgcmVjZW50IGVycm9yLiIKKyAgKGZvcmVpZ24tZnVuY2FsbCAiYnJsYXBpX3N0cmVycm9yIgorICAgIDpwb2ludGVyIChmb3JlaWduLWZ1bmNhbGwgImJybGFwaV9lcnJvcl9sb2NhdGlvbiIgOnBvaW50ZXIpCisgICAgOnN0cmluZykKKykKKworKGRlZm1ldGhvZCB0cmFuc2xhdGUtZnJvbS1mb3JlaWduICh2YWx1ZSAobmFtZSAoZXFsICdicmxhcGktY29kZSkpKQorICAiUmFpc2UgYSBCUkxBUEktRVJST1IgaWYgVkFMVUUsIGEgYnJsYXBpLWNvZGUsIGlzIC0xLiIKKyAgKGRlY2xhcmUgKGludGVnZXIgdmFsdWUpKQorICAoaWYgKGVxbCB2YWx1ZSAtMSkKKyAgICAgIChlcnJvciAnYnJsYXBpLWVycm9yIDp0ZXh0IChlcnJvci1tZXNzYWdlKSkKKyAgICAgIHZhbHVlKSkKKworDAorOzs7OyAqIENvbm5lY3Rpb24gbWFuYWdlbWVudAorCisoZGVmbWV0aG9kIGlzLWNvbm5lY3RlZCAoKG9iaiBkaXNwbGF5KSkKKyAgKGFuZAorICAgIG9iagorICAgIChsZXQKKyAgICAgICgoZmQgKGZpbGUtZGVzY3JpcHRvciBvYmopKSkKKyAgICAgIChhbmQgZmQgKG51bWJlcnAgZmQpIChub3QgKDwgZmQgMCkpKQorICAgICkKKyAgKQorKQorCisoZGVmY3N0cnVjdCBzZXR0aW5ncworICAiQ29ubmVjdGlvbiBzZXR0aW5nIHN0cnVjdHVyZS4iCisgIChhdXRoIDpzdHJpbmcpCisgIChob3N0IDpzdHJpbmcpKQorCisoZGVmdW4gb3Blbi1jb25uZWN0aW9uICgma2V5IGF1dGggaG9zdCkKKyAgIk9wZW4gYSBuZXcgY29ubmVjdGlvbiB0byBCUkxUVFkgb24gSE9TVCB1c25nIEFVVEggZm9yIGF1dGhvcml6YXRpb24uCitSZXR1cm4gYSBESVNQTEFZIG9iamVjdCB3aGljaCBjYW4gZnVydGhlciBiZSB1c2VkIHRvIGludGVyYWN0IHdpdGggQlJMVFRZLiIKKyAgKHdpdGgtZm9yZWlnbi1vYmplY3QgKHNldHRpbmdzICdzZXR0aW5ncykKKyAgICAoc2V0ZiAoZm9yZWlnbi1zbG90LXZhbHVlIHNldHRpbmdzICdzZXR0aW5ncyAnYXV0aCkKKyAgICAgICAgICAoaWYgKHN0cmluZ3AgYXV0aCkgYXV0aCAobnVsbC1wb2ludGVyKSkKKyAgICAgICAgICAoZm9yZWlnbi1zbG90LXZhbHVlIHNldHRpbmdzICdzZXR0aW5ncyAnaG9zdCkKKyAgICAgICAgICAoaWYgKHN0cmluZ3AgaG9zdCkgaG9zdCAobnVsbC1wb2ludGVyKSkpCisgICAgKGxldCogKChoYW5kbGUgKGZvcmVpZ24tYWxsb2MgOmNoYXIgOmNvdW50IChmb3JlaWduLWZ1bmNhbGwgImJybGFwaV9nZXRIYW5kbGVTaXplIiA6aW50KSkpCisgICAgICAgICAgIChmZCAoZm9yZWlnbi1mdW5jYWxsICJicmxhcGlfX29wZW5Db25uZWN0aW9uIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6cG9pbnRlciBoYW5kbGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOnBvaW50ZXIgc2V0dGluZ3MKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOnBvaW50ZXIgc2V0dGluZ3MKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJsYXBpLWNvZGUpKQorICAgICAgICAgICAoZGlzcGxheSAobWFrZS1pbnN0YW5jZSAnZGlzcGxheSA6aGFuZGxlIGhhbmRsZSA6ZmQgZmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOmF1dGggKGZvcmVpZ24tc2xvdC12YWx1ZSBzZXR0aW5ncyAnc2V0dGluZ3MgJ2F1dGgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDpob3N0IChmb3JlaWduLXNsb3QtdmFsdWUgc2V0dGluZ3MgJ3NldHRpbmdzICdob3N0KSkpKQorICAgICAgIytzYmNsIChzYi1leHQ6ZmluYWxpemUgZGlzcGxheSAobGFtYmRhICgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGZvcmVpZ24tZnVuY2FsbCAiYnJsYXBpX19jbG9zZUNvbm5lY3Rpb24iIDpwb2ludGVyIGhhbmRsZSA6dm9pZCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZm9yZWlnbi1mcmVlIGhhbmRsZSkpKQorICAgICAgZGlzcGxheSkpKQorCisoZGVmbWV0aG9kIGNsb3NlLWNvbm5lY3Rpb24gKChvYmogZGlzcGxheSkpCisgIChmb3JlaWduLWZ1bmNhbGwgImJybGFwaV9fY2xvc2VDb25uZWN0aW9uIiA6cG9pbnRlciAoY29ubmVjdGlvbi1oYW5kbGUgb2JqKSA6dm9pZCkKKyAgKHNldGYgKHNsb3QtdmFsdWUgb2JqICdmZCkgbmlsKQorICAoZm9yZWlnbi1mcmVlIChjb25uZWN0aW9uLWhhbmRsZSBvYmopKQorICAoc2V0ZiAoc2xvdC12YWx1ZSBvYmogJ2hhbmRsZSkgbmlsKSkKKworOzs7OyAqIFF1ZXJ5aW5nIHRoZSBkaXNwbGF5CisKKyhkZWZtZXRob2QgbGlicmFyeS12ZXJzaW9uICgpCisgICJSZXR1cm4gdGhlIHZlcnNpb24gb2YgdGhlIEFQSSBhcyBtdWx0aXBsZSB2YWx1ZXMgKG1ham9yLCBtaW5vciwgcmV2aXNpb24pLiIKKyAgKHdpdGgtZm9yZWlnbi1vYmplY3RzICgobWFqb3IgOmludCkgKG1pbm9yIDppbnQpIChyZXZpc2lvbiA6aW50KSkKKyAgICAoZm9yZWlnbi1mdW5jYWxsICJicmxhcGlfZ2V0TGlicmFyeVZlcnNpb24iCisgICAgICA6cG9pbnRlciBtYWpvciA6cG9pbnRlciBtaW5vciA6cG9pbnRlciByZXZpc2lvbgorICAgICAgOnZvaWQKKyAgICApCisgICAgKHZhbHVlcyAobWVtLXJlZiBtYWpvciA6aW50KSAobWVtLXJlZiBtaW5vciA6aW50KSAobWVtLXJlZiByZXZpc2lvbiA6aW50KSkKKyAgKQorKQorCisoZGVmbWV0aG9kIGRyaXZlci1uYW1lICgob2JqIGRpc3BsYXkpKQorICAiUmV0dXJuIHRoZSBjdXJyZW50bHkgdXNlZCBkcml2ZXIgbmFtZS4iCisgICh3aXRoLWZvcmVpZ24tcG9pbnRlci1hcy1zdHJpbmcgKChzdHIgc3RyLXNpemUpIDY0KQorICAgIChmb3JlaWduLWZ1bmNhbGwgImJybGFwaV9fZ2V0RHJpdmVyTmFtZSIgOnBvaW50ZXIgKGNvbm5lY3Rpb24taGFuZGxlIG9iaikKKyAgICAgICAgICAgICAgICAgICAgIDpzdHJpbmcgc3RyIDppbnQgc3RyLXNpemUgYnJsYXBpLWNvZGUpKSkKKworKGRlZm1ldGhvZCBtb2RlbC1pZGVudGlmaWVyICgob2JqIGRpc3BsYXkpKQorICAiUmV0dXJuIHRoZSBjdXJyZW50bHkgdXNlZCBkaXNwbGF5IG1vZGVsLiIKKyAgKHdpdGgtZm9yZWlnbi1wb2ludGVyLWFzLXN0cmluZyAoKHN0ciBzdHItc2l6ZSkgNjQpCisgICAgKGZvcmVpZ24tZnVuY2FsbCAiYnJsYXBpX19nZXRNb2RlbElkZW50aWZpZXIiIDpwb2ludGVyIChjb25uZWN0aW9uLWhhbmRsZSBvYmopCisgICAgICAgICAgICAgICAgICAgICA6c3RyaW5nIHN0ciA6aW50IHN0ci1zaXplIGJybGFwaS1jb2RlKSkpCisKKyhkZWZtZXRob2QgZGlzcGxheS1zaXplICgob2JqIGRpc3BsYXkpKQorICAiUmV0dXJuIHRoZSBkaW1lbnNpb25zIG9mIERJU1BMQVkgYXMgbXVsdGlwbGUgdmFsdWVzLgorVGhlIGZpcnN0IHZhbHVlIHJlcHJlc2VudHMgdGhlIHggZGltZW5zaW9uIGFuZCB0aGUgc2Vjb25kIHRoZSB5IGRpbWVuc2lvbi4iCisgICh3aXRoLWZvcmVpZ24tb2JqZWN0cyAoKHggOmludCkgKHkgOmludCkpCisgICAgKGZvcmVpZ24tZnVuY2FsbCAiYnJsYXBpX19nZXREaXNwbGF5U2l6ZSIgOnBvaW50ZXIgKGNvbm5lY3Rpb24taGFuZGxlIG9iaikgOnBvaW50ZXIgeCA6cG9pbnRlciB5IGJybGFwaS1jb2RlKQorICAgICh2YWx1ZXMgKG1lbS1yZWYgeCA6aW50KSAobWVtLXJlZiB5IDppbnQpKSkpCisMCis7Ozs7ICogVFRZIG1vZGUKKworKGRlZm1ldGhvZCBlbnRlci10dHktbW9kZSAoKG9iaiBkaXNwbGF5KSB0dHkgJm9wdGlvbmFsIChkcml2ZXIgIiIpKQorICAoZGVjbGFyZSAoaW50ZWdlciB0dHkpKQorICAoZGVjbGFyZSAoc3RyaW5nIGRyaXZlcikpCisgIChzZXRmIChzbG90LXZhbHVlIG9iaiAndHR5KSAoZm9yZWlnbi1mdW5jYWxsICJicmxhcGlfX2VudGVyVHR5TW9kZSIgOnBvaW50ZXIgKGNvbm5lY3Rpb24taGFuZGxlIG9iaikgOmludCB0dHkgOnN0cmluZyBkcml2ZXIgYnJsYXBpLWNvZGUpKSkKKworKGRlZm1ldGhvZCBsZWF2ZS10dHktbW9kZSAoKG9iaiBkaXNwbGF5KSkKKyAgKGZvcmVpZ24tZnVuY2FsbCAiYnJsYXBpX19sZWF2ZVR0eU1vZGUiIDpwb2ludGVyIChjb25uZWN0aW9uLWhhbmRsZSBvYmopIGJybGFwaS1jb2RlKQorICAoc2V0ZiAoc2xvdC12YWx1ZSBvYmogJ3R0eSkgbmlsKSkKKworDAorOzs7OyAqIE91dHB1dAorCisoZGVmbWV0aG9kIHdyaXRlLXRleHQgKChvYmogZGlzcGxheSkgdGV4dCAma2V5IChjdXJzb3IgLTEpKQorICAiV3JpdGUgVEVYVCAoYSBzdHJpbmcpIHRvIHRoZSBicmFpbGxlIGRpc3BsYXkuIgorICAoZGVjbGFyZSAoc3RyaW5nIHRleHQpKQorICAoZGVjbGFyZSAoaW50ZWdlciBjdXJzb3IpKQorICAoaWYgKGVxbCAoZm9yZWlnbi1mdW5jYWxsICJicmxhcGlfX3dyaXRlVGV4dCIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA6cG9pbnRlciAoY29ubmVjdGlvbi1oYW5kbGUgb2JqKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDppbnQgY3Vyc29yIDpzdHJpbmcgdGV4dAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJybGFwaS1jb2RlKQorICAgICAgICAgICAwKQorICAgICAgdGV4dCkpCisKKyhkZWZiaXRmaWVsZCAoZG90cyA6dWludDgpCisgICg6ZG90MSAjeDAxKSA6ZG90MiA6ZG90MyA6ZG90NCA6ZG90NSA6ZG90NiA6ZG90NyA6ZG90OCkKKyhkZWZtZXRob2Qgd3JpdGUtZG90cyAoKG9iaiBkaXNwbGF5KSAmcmVzdCBkb3RzLWxpc3QpCisgICJXcml0ZSB0aGUgZ2l2ZW4gZG90cyBsaXN0IHRvIHRoZSBkaXNwbGF5LiIKKyAgKHdpdGgtZm9yZWlnbi1vYmplY3QgKGRvdHMgJ2RvdHMgKGRpc3BsYXktc2l6ZSBvYmopKQorICAgIChsb29wIGZvciBpIGJlbG93IChtaW4gKGRpc3BsYXktc2l6ZSBvYmopIChsZW5ndGggZG90cy1saXN0KSkKKyAgICAgICAgICBkbyAoc2V0ZiAobWVtLWFyZWYgZG90cyAnZG90cyBpKQorICAgICAgICAgICAgICAgICAgIChmb3JlaWduLWJpdGZpZWxkLXZhbHVlICdkb3RzIChudGggaSBkb3RzLWxpc3QpKSkpCisgICAgKGxvb3AgZm9yIGkgZnJvbSAobGVuZ3RoIGRvdHMtbGlzdCkgYmVsb3cgKGRpc3BsYXktc2l6ZSBvYmopCisgICAgICAgICAgZG8gKHNldGYgKG1lbS1hcmVmIGRvdHMgJ2RvdHMgaSkgMCkpCisgICAgKGZvcmVpZ24tZnVuY2FsbCAiYnJsYXBpX193cml0ZURvdHMiIDpwb2ludGVyIChjb25uZWN0aW9uLWhhbmRsZSBvYmopIDpwb2ludGVyIGRvdHMgYnJsYXBpLWNvZGUpKSkKKworKGRlZmNzdHJ1Y3Qgd3JpdGUtc3RydWN0CisgIChkaXNwbGF5LW51bWJlciA6aW50KQorICAocmVnaW9uLWJlZ2luIDppbnQpCisgIChyZWdpb24tc2l6ZSA6aW50KQorICAodGV4dCA6cG9pbnRlcikKKyAgKGF0dHItYW5kIDpwb2ludGVyKQorICAoYXR0ci1vciA6cG9pbnRlcikKKyAgKGN1cnNvciA6aW50KQorICAoY2hhcnNldCA6c3RyaW5nKSkKKworKGRlZm1ldGhvZCB3cml0ZS1yZWdpb24gKChvYmogZGlzcGxheSkgdGV4dCAma2V5IChiZWdpbiAxKSBzaXplIChjdXJzb3IgLTEpIChkaXNwbGF5LW51bWJlciAtMSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhcnNldCAiIikgYXR0ci1hbmQgYXR0ci1vcikKKyAgIlVwZGF0ZSBhIHNwZWNpZmljIHJlZ2lvbiBvZiB0aGUgYnJhaWxsZSBkaXNwbGF5IGFuZCBhcHBseSBhbmQvb3IgbWFza3MuIgorICAobGV0ICgoc2l6ZSAob3Igc2l6ZSAobWluIChkaXNwbGF5LXNpemUgb2JqKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtYXggKGxlbmd0aCB0ZXh0KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxlbmd0aCBhdHRyLWFuZCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsZW5ndGggYXR0ci1vcikpKSkpKSAgICAKKyAgICAod2l0aC1mb3JlaWduLW9iamVjdHMgKCh3cyAnd3JpdGUtc3RydWN0KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgKHR4dCA6c3RyaW5nICgxKyBzaXplKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIChhdHRyYSAnZG90cyBzaXplKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgKGF0dHJvICdkb3RzIHNpemUpKQorICAgICAgKGxvb3AgZm9yIGkgYmVsb3cgc2l6ZQorICAgICAgICAgICAgZG8gKHNldGYgKG1lbS1hcmVmIHR4dCA6dWludDggaSkgKGNoYXItY29kZSAjXFNQQUNFKSkpCisgICAgICAoc2V0ZiAobWVtLWFyZWYgdHh0IDp1aW50OCBzaXplKSAwKQorICAgICAgKGxvb3AgZm9yIGkgYmVsb3cgKG1pbiBzaXplIChsZW5ndGggdGV4dCkpCisgICAgICAgICAgICBkbyAoc2V0ZiAobWVtLWFyZWYgdHh0IDp1aW50OCBpKSAoY2hhci1jb2RlIChhcmVmIHRleHQgaSkpKSkKKyAgICAgIChsb29wIGZvciBpIGJlbG93IHNpemUKKyAgICAgICAgICAgIGRvIChzZXRmIChtZW0tYXJlZiBhdHRyYSA6dWludDggaSkgI1hGRiAobWVtLWFyZWYgYXR0cm8gOnVpbnQ4IGkpIDApKQorICAgICAgKGxvb3AgZm9yIGkgYmVsb3cgKG1pbiBzaXplIChsZW5ndGggYXR0ci1hbmQpKQorICAgICAgICAgICAgZG8gKHNldGYgKG1lbS1hcmVmIGF0dHJhIDp1aW50OCBpKSAoZm9yZWlnbi1iaXRmaWVsZC12YWx1ZSAnZG90cyAobnRoIGkgYXR0ci1hbmQpKSkpCisgICAgICAobG9vcCBmb3IgaSBiZWxvdyAobWluIHNpemUgKGxlbmd0aCBhdHRyLW9yKSkKKyAgICAgICAgICAgIGRvIChzZXRmIChtZW0tYXJlZiBhdHRybyA6dWludDggaSkgKGZvcmVpZ24tYml0ZmllbGQtdmFsdWUgJ2RvdHMgKG50aCBpIGF0dHItb3IpKSkpCisgICAgICAoc2V0ZiAoZm9yZWlnbi1zbG90LXZhbHVlIHdzICd3cml0ZS1zdHJ1Y3QgJ2Rpc3BsYXktbnVtYmVyKSBkaXNwbGF5LW51bWJlcgorICAgICAgICAgICAgKGZvcmVpZ24tc2xvdC12YWx1ZSB3cyAnd3JpdGUtc3RydWN0ICdjdXJzb3IpIGN1cnNvcgorICAgICAgICAgICAgKGZvcmVpZ24tc2xvdC12YWx1ZSB3cyAnd3JpdGUtc3RydWN0ICdyZWdpb24tYmVnaW4pIGJlZ2luCisgICAgICAgICAgICAoZm9yZWlnbi1zbG90LXZhbHVlIHdzICd3cml0ZS1zdHJ1Y3QgJ3JlZ2lvbi1zaXplKSBzaXplCisgICAgICAgICAgICAoZm9yZWlnbi1zbG90LXZhbHVlIHdzICd3cml0ZS1zdHJ1Y3QgJ2NoYXJzZXQpIGNoYXJzZXQKKyAgICAgICAgICAgIChmb3JlaWduLXNsb3QtdmFsdWUgd3MgJ3dyaXRlLXN0cnVjdCAndGV4dCkgdHh0CisgICAgICAgICAgICAoZm9yZWlnbi1zbG90LXZhbHVlIHdzICd3cml0ZS1zdHJ1Y3QgJ2F0dHItb3IpIGF0dHJvCisgICAgICAgICAgICAoZm9yZWlnbi1zbG90LXZhbHVlIHdzICd3cml0ZS1zdHJ1Y3QgJ2F0dHItYW5kKSBhdHRyYSkKKyAgICAgIChlcWwgKGZvcmVpZ24tZnVuY2FsbCAiYnJsYXBpX193cml0ZSIgOnBvaW50ZXIgKGNvbm5lY3Rpb24taGFuZGxlIG9iaikgOnBvaW50ZXIgd3MgYnJsYXBpLWNvZGUpIDApKSkpCisKKwwKKzs7OzsgKiBJbnB1dAorCisoZGVmY3R5cGUga2V5LWNvZGUgOnVpbnQ2NCkKKyhkZWZtZXRob2QgcmVhZC1rZXkgKChvYmogZGlzcGxheSkgJm9wdGlvbmFsIGJsb2NrKQorICAod2l0aC1mb3JlaWduLW9iamVjdCAoa2V5ICdrZXktY29kZSkKKyAgICAoY2FzZSAoZm9yZWlnbi1mdW5jYWxsICJicmxhcGlfX3JlYWRLZXkiIDpwb2ludGVyIChjb25uZWN0aW9uLWhhbmRsZSBvYmopIDpib29sZWFuIGJsb2NrIDpwb2ludGVyIGtleSBicmxhcGktY29kZSkKKyAgICAgICgwIG5pbCkKKyAgICAgICgxIChtZW0tcmVmIGtleSAna2V5LWNvZGUpKSkpKQorCisoZGVmbWV0aG9kIHJlYWQta2V5LXdpdGgtdGltZW91dCAoKG9iaiBkaXNwbGF5KSAmb3B0aW9uYWwgKHRpbWVvdXQgLTEpKQorICAod2l0aC1mb3JlaWduLW9iamVjdCAoa2V5ICdrZXktY29kZSkKKyAgICAoY2FzZSAoZm9yZWlnbi1mdW5jYWxsICJicmxhcGlfX3JlYWRLZXlXaXRoVGltZW91dCIgOnBvaW50ZXIgKGNvbm5lY3Rpb24taGFuZGxlIG9iaikgOmludCAoKiB0aW1lb3V0IDEwMDApIDpwb2ludGVyIGtleSBicmxhcGktY29kZSkKKyAgICAgICgwIG5pbCkKKyAgICAgICgxIChtZW0tcmVmIGtleSAna2V5LWNvZGUpKSkpKQorCisoZGVmY3N0cnVjdCBleHBhbmRlZC1rZXktY29kZQorICAiQSBrZXkgY29kZSBicm9rZW4gZG93biBpbnRvIGl0cyBpbmRpdmlkdWFsIGZpZWxkcy4iCisgICh0eXBlIDppbnQpCisgIChjb21tYW5kIDppbnQpCisgIChhcmd1bWVudCA6aW50KQorICAoZmxhZ3MgOmludCkKKykKKworKGRlZmNzdHJ1Y3Qga2V5LWNvZGUtZGVzY3JpcHRpb24KKyAgIlRoZSBkZXNjcmlwdGlvbiBvZiBhIGtleSBjb2RlLiIKKyAgKHR5cGUtbmFtZSA6c3RyaW5nKQorICAoY29tbWFuZC1uYW1lIDpzdHJpbmcpCisgIChhcmd1bWVudC12YWx1ZSA6aW50KQorICAoZmxhZy1jb3VudCA6aW50KQorICAoZmxhZy1uYW1lcyA6c3RyaW5nIDpjb3VudCAzMikKKyAgKGZpZWxkLXZhbHVlcyBleHBhbmRlZC1rZXktY29kZSkKKykKKworKGRlZnVuIGV4cGFuZC1rZXktY29kZSAoY29kZSkKKyAgIlJldHVybiB0aGUgaW5kaXZpZHVhbCBmaWVsZHMgb2YgYSBrZXkgY29kZSBhcyBhIGxpc3Qgb2YgbnVtZXJpYyB2YWx1ZXMuCitUaGUgbGlzdCBjb250YWlucywgaW4gb3JkZXIsIHRoZSB0eXBlLCBjb21tYW5kLCBhcmd1bWVudCwgYW5kIGZsYWdzLiIKKworICAod2l0aC1mb3JlaWduLW9iamVjdCAoZXhwYW5zaW9uICdleHBhbmRlZC1rZXktY29kZSkKKyAgICAoZm9yZWlnbi1mdW5jYWxsICJicmxhcGlfZXhwYW5kS2V5Q29kZSIga2V5LWNvZGUgY29kZSA6cG9pbnRlciBleHBhbnNpb24gOmludCkKKyAgICAod2l0aC1mb3JlaWduLXNsb3RzCisgICAgICAoKHR5cGUgY29tbWFuZCBhcmd1bWVudCBmbGFncykgZXhwYW5zaW9uIGV4cGFuZGVkLWtleS1jb2RlKQorICAgICAgKGxpc3QgdHlwZSBjb21tYW5kIGFyZ3VtZW50IGZsYWdzKQorICAgICkKKyAgKQorKQorCisoZGVmdW4gZGVzY3JpYmUta2V5LWNvZGUgKGNvZGUpCisgICJSZXR1cm4gdGhlIGluZGl2aWR1YWwgZmllbGRzIG9mIHRoZSBrZXkgY29kZSBhcyBhIGxpc3QuCitUaGUgbGlzdCBjb250YWluczoKKyAgMDogdHlwZSAoYSBzdHJpbmcpCisgIDE6IGNvbW1hbmQgKGEgc3RyaW5nKQorICAyOiBhcmd1bWVudCAoYSBub24tbmVnYXRpdmUgaW50ZWdlcikKKyAgMzogZmxhZ3MgKGEgbGlzdCBvZiBzdHJpbmdzKSIKKworICAod2l0aC1mb3JlaWduLW9iamVjdCAoZGVzY3JpcHRpb24gJ2tleS1jb2RlLWRlc2NyaXB0aW9uKQorICAgIChmb3JlaWduLWZ1bmNhbGwgImJybGFwaV9kZXNjcmliZUtleUNvZGUiIGtleS1jb2RlIGNvZGUgOnBvaW50ZXIgZGVzY3JpcHRpb24gOmludCkKKyAgICAod2l0aC1mb3JlaWduLXNsb3RzCisgICAgICAoKHR5cGUtbmFtZSBjb21tYW5kLW5hbWUgYXJndW1lbnQtdmFsdWUgZmxhZy1jb3VudCBmbGFnLW5hbWVzKSBkZXNjcmlwdGlvbiBrZXktY29kZS1kZXNjcmlwdGlvbikKKworICAgICAgKGxpc3QgCisgICAgICAgIHR5cGUtbmFtZSBjb21tYW5kLW5hbWUgYXJndW1lbnQtdmFsdWUKKyAgICAgICAgKGxvb3AKKyAgICAgICAgICBmb3IgaW5kZXggYmVsb3cgZmxhZy1jb3VudAorICAgICAgICAgIGNvbGxlY3QgKG1lbS1hcmVmIChmb3JlaWduLXNsb3QtcG9pbnRlciBkZXNjcmlwdGlvbiAna2V5LWNvZGUtZGVzY3JpcHRpb24gJ2ZsYWctbmFtZXMpIDpzdHJpbmcgaW5kZXgpKQorICAgICAgKQorICAgICkKKyAgKQorKQorCis7Ozs7ICogRXhhbXBsZSB1c2FnZQorCisoZGVmdW4gZXhhbXBsZSAoJm9wdGlvbmFsICh0dHkgLTEpKQorICAiQSBiYXNpYyBleGFtcGxlLiIKKyAgKGxldCAoKGRpc3BsYXkgKG9wZW4tY29ubmVjdGlvbikpKQorICAgIChlbnRlci10dHktbW9kZSBkaXNwbGF5IHR0eSkKKyAgICAod3JpdGUtdGV4dCBkaXNwbGF5ICJQcmVzcyBhbnkga2V5IHRvIGNvbnRpbnVlLi4uIikKKyAgICAoYXBwbHkgIydmb3JtYXQgdCAiOyBDb21tYW5kOiB+QSwgYXJndW1lbnQ6IH5ELCBmbGFnczogfkQiCisgICAgICAgICAgIChtdWx0aXBsZS12YWx1ZS1saXN0IChleHBhbmQta2V5LWNvZGUgKHJlYWQta2V5IGRpc3BsYXkgdCkpKSkKKyAgICAobGVhdmUtdHR5LW1vZGUgZGlzcGxheSkKKyAgICAoY2xvc2UtY29ubmVjdGlvbiBkaXNwbGF5KSkpCisKZGlmZiAtLWdpdCBhL0JpbmRpbmdzL0xpc3AvYnJsYXBpX2NvbmZpZy5saXNwLmluIGIvQmluZGluZ3MvTGlzcC9icmxhcGlfY29uZmlnLmxpc3AuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWU5ZTU2OAotLS0gL2Rldi9udWxsCisrKyBiL0JpbmRpbmdzL0xpc3AvYnJsYXBpX2NvbmZpZy5saXNwLmluCkBAIC0wLDAgKzEsMjkgQEAKKzs7OzsgQGNvbmZpZ3VyZV9pbnB1dEAKKworOzs7OyBsaWJicmxhcGkgLSBBIGxpYnJhcnkgcHJvdmlkaW5nIGFjY2VzcyB0byBicmFpbGxlIHRlcm1pbmFscyBmb3IgYXBwbGljYXRpb25zLgorOzs7OworOzs7OyBDb3B5cmlnaHQgKEMpIDIwMDYtMjAyMyBieSBNYXJpbyBMYW5nIDxtbGFuZ0BkZWx5c2lkLm9yZz4KKzs7OzsKKzs7OzsgbGliYnJsYXBpIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKzs7OzsKKzs7OzsgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorOzs7OyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorOzs7OyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55Cis7Ozs7IGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorOzs7OworOzs7OyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCis7Ozs7Cis7Ozs7IFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorCisoZXZhbC13aGVuICg6Y29tcGlsZS10b3BsZXZlbCkKKyAgKGRlY2xhaW0gKG9wdGltaXplIChzYWZldHkgMykgKGRlYnVnIDMpKSkpCisKKyhpbi1wYWNrYWdlIDpicmxhcGkpCisMCis7Ozs7ICogQyBCcmxBUEkgTGlicmFyeSBsb2FkaW5nCisKKyhkZWZpbmUtZm9yZWlnbi1saWJyYXJ5IGxpYmJybGFwaQorICAoOnVuaXggKDpvciAibGliYnJsYXBpLkBsaWJyYXJ5X2V4dGVuc2lvbkAuQGFwaV9yZWxlYXNlQCIgImxpYmJybGFwaS5AbGlicmFyeV9leHRlbnNpb25ALkBhcGlfdmVyc2lvbkAiKSkKKyAgKHQgKDpkZWZhdWx0ICJsaWJicmxhcGkiKSkpCisodXNlLWZvcmVpZ24tbGlicmFyeSBsaWJicmxhcGkpCisKZGlmZiAtLWdpdCBhL0JpbmRpbmdzL0xpc3AvYnJsYXBpX3Byb2xvZ3VlLmxpc3AgYi9CaW5kaW5ncy9MaXNwL2JybGFwaV9wcm9sb2d1ZS5saXNwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY5OTMyMmYKLS0tIC9kZXYvbnVsbAorKysgYi9CaW5kaW5ncy9MaXNwL2JybGFwaV9wcm9sb2d1ZS5saXNwCkBAIC0wLDAgKzEsMzQgQEAKKzs7OzsgbGliYnJsYXBpIC0gQSBsaWJyYXJ5IHByb3ZpZGluZyBhY2Nlc3MgdG8gYnJhaWxsZSB0ZXJtaW5hbHMgZm9yIGFwcGxpY2F0aW9ucy4KKzs7OzsKKzs7OzsgQ29weXJpZ2h0IChDKSAyMDA2LTIwMjMgYnkgTWFyaW8gTGFuZyA8bWxhbmdAZGVseXNpZC5vcmc+Cis7Ozs7Cis7Ozs7IGxpYmJybGFwaSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCis7Ozs7Cis7Ozs7IFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKzs7OzsgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKzs7OzsgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorOzs7OyBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKzs7OzsKKzs7OzsgV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworOzs7OworOzs7OyBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKworKGV2YWwtd2hlbiAoOmNvbXBpbGUtdG9wbGV2ZWwpCisgIChkZWNsYWltIChvcHRpbWl6ZSAoc2FmZXR5IDMpIChkZWJ1ZyAzKSkpKQorDAorOzs7OyAqIFBhY2thZ2UgZGVmaW5pdGlvbgorCisoZGVmcGFja2FnZSA6YnJsYXBpCisgICg6dXNlIDpjb21tb24tbGlzcCA6Y2ZmaSkKKyAgKDpleHBvcnQgIzpvcGVuLWNvbm5lY3Rpb24gIzpjbG9zZS1jb25uZWN0aW9uICM6aXMtY29ubmVjdGVkCisgICAgICAgICAgICM6cHJvcGVydHktbGlzdCAjOnByaW50LW9iamVjdAorICAgICAgICAgICAjOmxpYnJhcnktdmVyc2lvbgorCSAgICM6ZHJpdmVyLW5hbWUgIzptb2RlbC1pZGVudGlmaWVyICM6ZGlzcGxheS1zaXplCisgICAgICAgICAgICM6ZW50ZXItdHR5LW1vZGUgIzpsZWF2ZS10dHktbW9kZQorICAgICAgICAgICAjOndyaXRlLXRleHQgIzp3cml0ZS1kb3RzICM6d3JpdGUtcmVnaW9uCisgICAgICAgICAgICM6cmVhZC1rZXkgcmVhZC1rZXktd2l0aC10aW1lb3V0CisgICAgICAgICAgICM6ZXhwYW5kLWtleS1jb2RlICM6ZGVzY3JpYmUta2V5LWNvZGUKKyAgICAgICAgICAgIzplcnJvci1tZXNzYWdlKSkKKworKGluLXBhY2thZ2UgOmJybGFwaSkKKwwKZGlmZiAtLWdpdCBhL0JpbmRpbmdzL0x1YS9NYWtlZmlsZS5pbiBiL0JpbmRpbmdzL0x1YS9NYWtlZmlsZS5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMzQ2ZTUzCi0tLSAvZGV2L251bGwKKysrIGIvQmluZGluZ3MvTHVhL01ha2VmaWxlLmluCkBAIC0wLDAgKzEsNTEgQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgbGliYnJsYXBpIC0gQSBsaWJyYXJ5IHByb3ZpZGluZyBhY2Nlc3MgdG8gYnJhaWxsZSB0ZXJtaW5hbHMgZm9yIGFwcGxpY2F0aW9ucy4KKyMKKyMgQ29weXJpZ2h0IChDKSAyMDA2LTIwMjMgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPgorIworIyBsaWJicmxhcGkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorIworIyBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisjIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyMgbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisjCisjIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK2luY2x1ZGUgJChTUkNfVE9QKWJpbmRpbmdzLm1rCisKK0xVQV9PSyA9IEBMVUFfT0tACitMVUEgPSBATFVBQAorCitMVUFfSU5DTFVERVMgPSBAbHVhX2luY2x1ZGVzQAorTFVBX0FQSV9ESVJFQ1RPUlkgPSAkKElOU1RBTExfUk9PVClATFVBX0xJQlJBUllfRElSRUNUT1JZQAorCitMVUFfQVBJX05BTUUgPSAkKEFQSV9OQU1FKQorTFVBX0FQSV9PQkpFQ1QgPSBiaW5kaW5ncy4kTworTFVBX0FQSV9MSUJSQVJZID0gJChMVUFfQVBJX05BTUUpLiQoTElCX0VYVCkKK0xVQV9DT01NQU5EU19IRUFERVI9Y21kLmF1dG8uaAorCithbGw6ICQoTFVBX0FQSV9MSUJSQVJZKQorCiskKExVQV9BUElfTElCUkFSWSk6ICQoTFVBX0FQSV9PQkpFQ1QpCisJJChNS0xJQjo8bmFtZT49JChMVUFfQVBJX0xJQlJBUlkpLiQoQVBJX1ZFUlNJT04pKSAkQCAkKExVQV9BUElfT0JKRUNUKSAkKEFQSV9MREZMQUdTKQorCiskKExVQV9BUElfT0JKRUNUKTogJChMVUFfQ09NTUFORFNfSEVBREVSKSB8ICQoQVBJX05BTUUpCisJJChDQykgJChMSUJDRkxBR1MpICQoTFVBX0lOQ0xVREVTKSAtbyAkQCAtYyAkKFNSQ19ESVIpL2JpbmRpbmdzLmMKKworJChMVUFfQ09NTUFORFNfSEVBREVSKTogJChDT05TVEFOVFNfREVQRU5ERU5DSUVTKQorCSQoQVdLKSA+JEAgJChDT05TVEFOVFNfQVJHVU1FTlRTKQorCitjbGVhbjo6CisJLXJtIC1mIC0tICQoTFVBX0FQSV9MSUJSQVJZKQorCitpbnN0YWxsOiBhbGwKKwkkKElOU1RBTExfRElSRUNUT1JZKSAkKExVQV9BUElfRElSRUNUT1JZKQorCSQoSU5TVEFMTF9QUk9HUkFNKSAkKExVQV9BUElfTElCUkFSWSkgJChMVUFfQVBJX0RJUkVDVE9SWSkKKwordW5pbnN0YWxsOgorCS1ybSAtZiAkKExVQV9BUElfRElSRUNUT1JZKS8kKExVQV9BUElfTElCUkFSWSkKKwpkaWZmIC0tZ2l0IGEvQmluZGluZ3MvTHVhL2FwaXRlc3QgYi9CaW5kaW5ncy9MdWEvYXBpdGVzdApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5jNzllMGExCi0tLSAvZGV2L251bGwKKysrIGIvQmluZGluZ3MvTHVhL2FwaXRlc3QKQEAgLTAsMCArMSwyMiBAQAorIyEvYmluL2Jhc2gKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgbGliYnJsYXBpIC0gQSBsaWJyYXJ5IHByb3ZpZGluZyBhY2Nlc3MgdG8gYnJhaWxsZSB0ZXJtaW5hbHMgZm9yIGFwcGxpY2F0aW9ucy4KKyMKKyMgQ29weXJpZ2h0IChDKSAyMDA2LTIwMjMgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPgorIworIyBsaWJicmxhcGkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorIworIyBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisjIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyMgbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisjCisjIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKy4gIiR7MCUvKn0vLi4vLi4vYXBpdGVzdC5zaCIKK2V4cG9ydCBMVUFfUEFUSD0iJHtwcm9ncmFtRGlyZWN0b3J5fS8uLi8uLi8/Lmx1YTs7IgorZXhlYyBsdWEgIiR7cHJvZ3JhbURpcmVjdG9yeX0vJHtwcm9ncmFtTmFtZX0ubHVhIiAtLSAiJHtAfSIKK2V4aXQgIiR7P30iCmRpZmYgLS1naXQgYS9CaW5kaW5ncy9MdWEvYXBpdGVzdC5sdWEgYi9CaW5kaW5ncy9MdWEvYXBpdGVzdC5sdWEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTA3ZWU2OQotLS0gL2Rldi9udWxsCisrKyBiL0JpbmRpbmdzL0x1YS9hcGl0ZXN0Lmx1YQpAQCAtMCwwICsxLDgyIEBACistLVtbCisgIGxpYmJybGFwaSAtIEEgbGlicmFyeSBwcm92aWRpbmcgYWNjZXNzIHRvIGJyYWlsbGUgdGVybWluYWxzIGZvciBhcHBsaWNhdGlvbnMuCisgCisgIENvcHlyaWdodCAoQykgMjAwNi0yMDIzIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4KKyAKKyAgbGliYnJsYXBpIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAKKyAgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIAorICBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisgCisgIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorXV0KKworbG9jYWwgYnJsYXBpID0gcmVxdWlyZSgiYnJsYXBpIikKK3JlcXVpcmUoIi4uLy4uL2JybHR0eS1wcm9sb2d1ZSIpCisKK2xvY2FsIGZ1bmN0aW9uIHNob3dQcm9wZXJ0eSAobmFtZSwgdmFsdWUpCisgIGlvLnN0ZG91dDp3cml0ZShzdHJpbmcuZm9ybWF0KCIlczogJXNcbiIsIG5hbWUsIHRvc3RyaW5nKHZhbHVlKSkpCitlbmQKKworbG9jYWwgZnVuY3Rpb24gcGVyZm9ybVRlc3RzICgpCisgIHNob3dQcm9wZXJ0eSgiQnJsQVBJIFZlcnNpb24iLCBicmxhcGkudmVyc2lvbikKKyAgaWYgYnJsYXBpLnZlcnNpb24gPCB7bWFqb3I9MCwgbWlub3I9OCwgcmV2aXNpb249M30gdGhlbgorICAgIGVycm9yICJCcmxBUEkgaXMgdG9vIG9sZCIKKyAgZW5kCisKKyAgbG9jYWwgYnJsIDxjbG9zZT4gPSBicmxhcGkub3BlbkNvbm5lY3Rpb24oYXJnWzJdLCBhcmdbM10pCisKKyAgc2hvd1Byb3BlcnR5KCJGaWxlIERlc2NyaXB0b3IiLCBicmw6Z2V0RmlsZURlc2NyaXB0b3IoKSkKKyAgc2hvd1Byb3BlcnR5KCJEcml2ZXIgTmFtZSIsIGJybDpnZXREcml2ZXJOYW1lKCkpCisgIHNob3dQcm9wZXJ0eSgiRHJpdmVyIENvZGUiLCBicmw6Z2V0RHJpdmVyQ29kZSgpKQorICBzaG93UHJvcGVydHkoIkRyaXZlciBWZXJzaW9uIiwgYnJsOmdldERyaXZlclZlcnNpb24oKSkKKyAgc2hvd1Byb3BlcnR5KCJNb2RlbCBJZGVudGlmaWVyIiwgYnJsOmdldE1vZGVsSWRlbnRpZmllcigpKQorCisgIGRvCisgICAgbG9jYWwgY29sdW1ucywgcm93cyA9IGJybDpnZXREaXNwbGF5U2l6ZSgpCisgICAgc2hvd1Byb3BlcnR5KCJEaXNwbGF5IFNpemUiLCBzdHJpbmcuZm9ybWF0KCIlZHglZCIsIGNvbHVtbnMsIHJvd3MpKQorICBlbmQKKworICBzaG93UHJvcGVydHkoIkRldmljZSBPbmxpbmUiLCBicmw6Z2V0RGV2aWNlT25saW5lKCkpCisgIHNob3dQcm9wZXJ0eSgiQXVkaWJsZSBBbGVydHMiLCBicmw6Z2V0QXVkaWJsZUFsZXJ0cygpKQorICBzaG93UHJvcGVydHkoIkNvbXB1dGVyIEJyYWlsbGUgVGFibGUiLCBicmw6Z2V0Q29tcHV0ZXJCcmFpbGxlVGFibGUoKSkKKyAgc2hvd1Byb3BlcnR5KCJMaXRlcmFyeSBCcmFpbGxlIFRhYmxlIiwgYnJsOmdldExpdGVyYXJ5QnJhaWxsZVRhYmxlKCkpCisgIHNob3dQcm9wZXJ0eSgiTWVzc2FnZSBMb2NhbGUiLCBicmw6Z2V0TWVzc2FnZUxvY2FsZSgpKQorCisgIGRvCisgICAgbG9jYWwgY29tbWFuZEtleWNvZGVzID0gYnJsOmdldEJvdW5kQ29tbWFuZEtleWNvZGVzKCk7CisgICAgbG9jYWwgc3RyaW5nID0gIiIKKyAgICBmb3IgaSA9IDEsICNjb21tYW5kS2V5Y29kZXMsIDEgZG8KKyAgICAgIHN0cmluZyA9IHN0cmluZyAuLiBicmw6Z2V0Q29tbWFuZEtleWNvZGVOYW1lKGNvbW1hbmRLZXljb2Rlc1tpXSkKKyAgICAgIGlmIGkgPCAjY29tbWFuZEtleWNvZGVzIHRoZW4KKyAgICAgICAgc3RyaW5nID0gc3RyaW5nIC4uICIsICIKKyAgICAgIGVuZAorICAgIGVuZAorICAgIHNob3dQcm9wZXJ0eSgiQm91bmQgQ29tbWFuZCBLZXljb2RlIE5hbWVzIiwgc3RyaW5nKQorICBlbmQKKworICBkbworICAgIGxvY2FsIGRyaXZlcktleWNvZGVzID0gYnJsOmdldERlZmluZWREcml2ZXJLZXljb2RlcygpOworICAgIGxvY2FsIHN0cmluZyA9ICIiCisgICAgZm9yIGkgPSAxLCAjZHJpdmVyS2V5Y29kZXMsIDEgZG8KKyAgICAgIHN0cmluZyA9IHN0cmluZyAuLiBicmw6Z2V0RHJpdmVyS2V5Y29kZU5hbWUoZHJpdmVyS2V5Y29kZXNbaV0pCisgICAgICBpZiBpIDwgI2RyaXZlcktleWNvZGVzIHRoZW4gc3RyaW5nID0gc3RyaW5nIC4uICIsICIgZW5kCisgICAgZW5kCisgICAgc2hvd1Byb3BlcnR5KCJEZWZpbmVkIERyaXZlciBLZXljb2RlIE5hbWVzIiwgc3RyaW5nKQorICBlbmQKK2VuZAorCitkbworICBsb2NhbCBvaywgZXJyb3IgPSBwY2FsbChwZXJmb3JtVGVzdHMpCisKKyAgaWYgbm90IG9rIHRoZW4KKyAgICB3cml0ZVByb2dyYW1NZXNzYWdlKGVycm9yKQorICAgIG9zLmV4aXQoOSkKKyAgZW5kCitlbmQKKworb3MuZXhpdCgpCmRpZmYgLS1naXQgYS9CaW5kaW5ncy9MdWEvYmluZGluZ3MuYyBiL0JpbmRpbmdzL0x1YS9iaW5kaW5ncy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMyOTRkYjYKLS0tIC9kZXYvbnVsbAorKysgYi9CaW5kaW5ncy9MdWEvYmluZGluZ3MuYwpAQCAtMCwwICsxLDY2MCBAQAorLyoKKyAqIGxpYmJybGFwaSAtIEEgbGlicmFyeSBwcm92aWRpbmcgYWNjZXNzIHRvIGJyYWlsbGUgdGVybWluYWxzIGZvciBhcHBsaWNhdGlvbnMuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMjMgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPgorICoKKyAqIGxpYmJybGFwaSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorICoKKyAqIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyAqLworCisjZGVmaW5lIEJSTEFQSV9OT19TSU5HTEVfU0VTU0lPTiAxCisjaW5jbHVkZSAicHJvbG9ndWUuaCIKKyNpbmNsdWRlIDxicmxhcGkuaD4KKyNpbmNsdWRlIDxicmxfY21kcy5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8bHVhLmg+CisjaW5jbHVkZSA8bGF1eGxpYi5oPgorCitzdGF0aWMgY29uc3QgY2hhciAqaGFuZGxlX3QgPSAiYnJsYXBpIjsKKyNkZWZpbmUgY2hlY2toYW5kbGUoTCwgYXJnKSAoYnJsYXBpX2hhbmRsZV90ICopbHVhTF9jaGVja3VkYXRhKEwsIChhcmcpLCBoYW5kbGVfdCkKKworc3RhdGljIHZvaWQgZXJyb3IobHVhX1N0YXRlICpMKSB7CisgIGx1YV9wdXNoc3RyaW5nKEwsIGJybGFwaV9zdHJlcnJvcigmYnJsYXBpX2Vycm9yKSk7CisgIGx1YV9lcnJvcihMKTsKK30KKworc3RhdGljIGludCBvcGVuQ29ubmVjdGlvbihsdWFfU3RhdGUgKkwpIHsKKyAgY29uc3QgYnJsYXBpX2Nvbm5lY3Rpb25TZXR0aW5nc190IGRlc2lyZWRTZXR0aW5ncyA9IHsKKyAgICAuaG9zdCA9IGx1YUxfb3B0c3RyaW5nKEwsIDEsIE5VTEwpLCAuYXV0aCA9IGx1YUxfb3B0c3RyaW5nKEwsIDIsIE5VTEwpCisgIH07CisgIGJybGFwaV9jb25uZWN0aW9uU2V0dGluZ3NfdCBhY3R1YWxTZXR0aW5nczsKKyAgYnJsYXBpX2hhbmRsZV90ICpjb25zdCBoYW5kbGUgPSAoYnJsYXBpX2hhbmRsZV90ICopbHVhX25ld3VzZXJkYXRhdXYoCisgICAgTCwgYnJsYXBpX2dldEhhbmRsZVNpemUoKSwgMAorICApOworICBsdWFMX3NldG1ldGF0YWJsZShMLCBoYW5kbGVfdCk7CisKKyAgaWYgKGJybGFwaV9fb3BlbkNvbm5lY3Rpb24oaGFuZGxlLCAmZGVzaXJlZFNldHRpbmdzLCAmYWN0dWFsU2V0dGluZ3MpID09IC0xKQorICAgIGVycm9yKEwpOworCisgIGx1YV9wdXNoc3RyaW5nKEwsIGFjdHVhbFNldHRpbmdzLmhvc3QpOworICBsdWFfcHVzaHN0cmluZyhMLCBhY3R1YWxTZXR0aW5ncy5hdXRoKTsgICAgCisKKyAgcmV0dXJuIDM7Cit9CisKK3N0YXRpYyBpbnQgZ2V0RmlsZURlc2NyaXB0b3IobHVhX1N0YXRlICpMKSB7CisgIGNvbnN0IGludCBmaWxlRGVzY3JpcHRvciA9IGJybGFwaV9fZ2V0RmlsZURlc2NyaXB0b3IoY2hlY2toYW5kbGUoTCwgMSkpOworCisgIGlmIChmaWxlRGVzY3JpcHRvciA9PSBCUkxBUElfSU5WQUxJRF9GSUxFX0RFU0NSSVBUT1IpIGVycm9yKEwpOworCisgIGx1YV9wdXNoaW50ZWdlcihMLCBmaWxlRGVzY3JpcHRvcik7CisKKyAgcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQgY2xvc2VDb25uZWN0aW9uKGx1YV9TdGF0ZSAqTCkgeworICBicmxhcGlfX2Nsb3NlQ29ubmVjdGlvbihjaGVja2hhbmRsZShMLCAxKSk7CisKKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZ2V0RHJpdmVyTmFtZShsdWFfU3RhdGUgKkwpIHsKKyAgY2hhciBuYW1lW0JSTEFQSV9NQVhOQU1FTEVOR1RIICsgMV07CisKKyAgaWYgKGJybGFwaV9fZ2V0RHJpdmVyTmFtZShjaGVja2hhbmRsZShMLCAxKSwgbmFtZSwgc2l6ZW9mKG5hbWUpKSA9PSAtMSkKKyAgICBlcnJvcihMKTsKKworICBsdWFfcHVzaHN0cmluZyhMLCBuYW1lKTsKKworICByZXR1cm4gMTsKK30KKworc3RhdGljIGludCBnZXRNb2RlbElkZW50aWZpZXIobHVhX1N0YXRlICpMKSB7CisgIGJybGFwaV9oYW5kbGVfdCAqY29uc3QgaGFuZGxlID0gY2hlY2toYW5kbGUoTCwgMSk7CisgIGNoYXIgaWRlbnRbQlJMQVBJX01BWE5BTUVMRU5HVEggKyAxXTsKKworICBpZiAoYnJsYXBpX19nZXRNb2RlbElkZW50aWZpZXIoaGFuZGxlLCBpZGVudCwgc2l6ZW9mKGlkZW50KSkgPT0gLTEpIGVycm9yKEwpOworCisgIGx1YV9wdXNoc3RyaW5nKEwsIGlkZW50KTsKKworICByZXR1cm4gMTsKK30KKworc3RhdGljIGludCBnZXREaXNwbGF5U2l6ZShsdWFfU3RhdGUgKkwpIHsKKyAgdW5zaWduZWQgaW50IHgsIHk7CisKKyAgaWYgKGJybGFwaV9fZ2V0RGlzcGxheVNpemUoY2hlY2toYW5kbGUoTCwgMSksICZ4LCAmeSkgPT0gLTEpIGVycm9yKEwpOworCisgIGx1YV9wdXNoaW50ZWdlcihMLCB4KSwgbHVhX3B1c2hpbnRlZ2VyKEwsIHkpOworCisgIHJldHVybiAyOworfQorCitzdGF0aWMgaW50IGVudGVyVHR5TW9kZShsdWFfU3RhdGUgKkwpIHsKKyAgY29uc3QgaW50IHJlc3VsdCA9IGJybGFwaV9fZW50ZXJUdHlNb2RlKGNoZWNraGFuZGxlKEwsIDEpLAorICAgIGx1YUxfb3B0aW50ZWdlcihMLCAyLCBCUkxBUElfVFRZX0RFRkFVTFQpLCBsdWFMX29wdHN0cmluZyhMLCAzLCBOVUxMKQorICApOworCisgIGlmIChyZXN1bHQgPT0gLTEpIGVycm9yKEwpOworCisgIGx1YV9wdXNoaW50ZWdlcihMLCByZXN1bHQpOworCisgIHJldHVybiAxOworfQorCitzdGF0aWMgaW50IGxlYXZlVHR5TW9kZShsdWFfU3RhdGUgKkwpIHsKKyAgaWYgKGJybGFwaV9fbGVhdmVUdHlNb2RlKGNoZWNraGFuZGxlKEwsIDEpKSA9PSAtMSkgZXJyb3IoTCk7CisKKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2V0Rm9jdXMobHVhX1N0YXRlICpMKSB7CisgIGlmIChicmxhcGlfX3NldEZvY3VzKGNoZWNraGFuZGxlKEwsIDEpLCBsdWFMX2NoZWNraW50ZWdlcihMLCAyKSkgPT0gLTEpCisgICAgZXJyb3IoTCk7CisKKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgd3JpdGVUZXh0KGx1YV9TdGF0ZSAqTCkgeworICBicmxhcGlfaGFuZGxlX3QgKmNvbnN0IGhhbmRsZSA9IGNoZWNraGFuZGxlKEwsIDEpOworICBjb25zdCBpbnQgY3Vyc29yID0gbHVhTF9jaGVja2ludGVnZXIoTCwgMik7CisgIGNvbnN0IGNoYXIgKmNvbnN0IHRleHQgPSBsdWFMX2NoZWNrc3RyaW5nKEwsIDMpOworCisgIGlmIChicmxhcGlfX3dyaXRlVGV4dChoYW5kbGUsIGN1cnNvciwgdGV4dCkgPT0gLTEpIGVycm9yKEwpOworCisgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50IHdyaXRlRG90cyhsdWFfU3RhdGUgKkwpIHsKKyAgYnJsYXBpX2hhbmRsZV90ICpjb25zdCBoYW5kbGUgPSBjaGVja2hhbmRsZShMLCAxKTsKKyAgY29uc3QgdW5zaWduZWQgY2hhciAqY29uc3QgZG90cyA9IChjb25zdCB1bnNpZ25lZCBjaGFyICopbHVhTF9jaGVja3N0cmluZyhMLCAyKTsKKworICBpZiAoYnJsYXBpX193cml0ZURvdHMoaGFuZGxlLCBkb3RzKSA9PSAtMSkgZXJyb3IoTCk7CisKKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcmVhZEtleShsdWFfU3RhdGUgKkwpIHsKKyAgYnJsYXBpX2hhbmRsZV90ICpjb25zdCBoYW5kbGUgPSBjaGVja2hhbmRsZShMLCAxKTsKKyAgY29uc3QgaW50IHdhaXQgPSBsdWFfdG9ib29sZWFuKEwsIDIpOworICBicmxhcGlfa2V5Q29kZV90IGtleUNvZGU7CisgIGludCByZXN1bHQ7CisKKyAgZG8geworICAgIHJlc3VsdCA9IGJybGFwaV9fcmVhZEtleShoYW5kbGUsIHdhaXQsICZrZXlDb2RlKTsKKyAgfSB3aGlsZSAocmVzdWx0ID09IC0xICYmCisgICAgICAgICAgIGJybGFwaV9lcnJubyA9PSBCUkxBUElfRVJST1JfTElCQ0VSUiAmJiBicmxhcGlfbGliY2Vycm5vID09IEVJTlRSKTsKKworICBzd2l0Y2ggKHJlc3VsdCkgeworICBjYXNlIC0xOgorICAgIGVycm9yKEwpOworICAgIGJyZWFrOyAvKiBuZXZlciByZWFjaGVkICovCisgIGNhc2UgMDoKKyAgICBicmVhazsKKyAgY2FzZSAxOgorICAgIGx1YV9wdXNoaW50ZWdlcihMLCAobHVhX0ludGVnZXIpa2V5Q29kZSk7CisgICAKKyAgICByZXR1cm4gMTsKKyAgfQorCisgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50IHJlYWRLZXlXaXRoVGltZW91dChsdWFfU3RhdGUgKkwpIHsKKyAgYnJsYXBpX2hhbmRsZV90ICpjb25zdCBoYW5kbGUgPSBjaGVja2hhbmRsZShMLCAxKTsKKyAgY29uc3QgaW50IHRpbWVvdXRfbXMgPSBsdWFMX2NoZWNraW50ZWdlcihMLCAyKTsKKyAgYnJsYXBpX2tleUNvZGVfdCBrZXlDb2RlOworICBpbnQgcmVzdWx0OworCisgIGRvIHsKKyAgICByZXN1bHQgPSBicmxhcGlfX3JlYWRLZXlXaXRoVGltZW91dChoYW5kbGUsIHRpbWVvdXRfbXMsICZrZXlDb2RlKTsKKyAgfSB3aGlsZSAocmVzdWx0ID09IC0xICYmCisgICAgICAgICAgIGJybGFwaV9lcnJubyA9PSBCUkxBUElfRVJST1JfTElCQ0VSUiAmJiBicmxhcGlfbGliY2Vycm5vID09IEVJTlRSKTsKKworICBzd2l0Y2ggKHJlc3VsdCkgeworICBjYXNlIC0xOgorICAgIGVycm9yKEwpOworICAgIGJyZWFrOyAvKiBuZXZlciByZWFjaGVkICovCisgIGNhc2UgMDoKKyAgICBicmVhazsKKyAgY2FzZSAxOgorICAgIGx1YV9wdXNoaW50ZWdlcihMLCAobHVhX0ludGVnZXIpa2V5Q29kZSk7CisgCisgICAgcmV0dXJuIDE7CisgIH0KKworICByZXR1cm4gMDsKK30KKworc3RhdGljIGludCBleHBhbmRLZXlDb2RlKGx1YV9TdGF0ZSAqTCkgeworICBicmxhcGlfa2V5Q29kZV90IGtleUNvZGUgPSAoYnJsYXBpX2tleUNvZGVfdClsdWFMX2NoZWNraW50ZWdlcihMLCAxKTsKKyAgYnJsYXBpX2V4cGFuZGVkS2V5Q29kZV90IGV4cGFuc2lvbjsKKworICBicmxhcGlfZXhwYW5kS2V5Q29kZShrZXlDb2RlLCAmZXhwYW5zaW9uKTsKKyAgbHVhX3B1c2hpbnRlZ2VyKEwsIGV4cGFuc2lvbi50eXBlKSwKKyAgbHVhX3B1c2hpbnRlZ2VyKEwsIGV4cGFuc2lvbi5jb21tYW5kKSwKKyAgbHVhX3B1c2hpbnRlZ2VyKEwsIGV4cGFuc2lvbi5hcmd1bWVudCksCisgIGx1YV9wdXNoaW50ZWdlcihMLCBleHBhbnNpb24uZmxhZ3MpOworCisgIHJldHVybiA0OworfQorCitzdGF0aWMgaW50IGRlc2NyaWJlS2V5Q29kZShsdWFfU3RhdGUgKkwpIHsKKyAgYnJsYXBpX2tleUNvZGVfdCBrZXlDb2RlID0gKGJybGFwaV9rZXlDb2RlX3QpbHVhTF9jaGVja2ludGVnZXIoTCwgMSk7CisgIGJybGFwaV9kZXNjcmliZWRLZXlDb2RlX3QgZGVzY3JpcHRpb247CisKKyAgYnJsYXBpX2Rlc2NyaWJlS2V5Q29kZShrZXlDb2RlLCAmZGVzY3JpcHRpb24pOworCisgIGx1YV9wdXNoc3RyaW5nKEwsIGRlc2NyaXB0aW9uLnR5cGUpLAorICBsdWFfcHVzaHN0cmluZyhMLCBkZXNjcmlwdGlvbi5jb21tYW5kKSwKKyAgbHVhX3B1c2hpbnRlZ2VyKEwsIGRlc2NyaXB0aW9uLmFyZ3VtZW50KTsKKyAgbHVhX2NyZWF0ZXRhYmxlKEwsIGRlc2NyaXB0aW9uLmZsYWdzLCAwKTsKKyAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBkZXNjcmlwdGlvbi5mbGFnczsgaSArPSAxKSB7CisgICAgbHVhX3B1c2hzdHJpbmcoTCwgZGVzY3JpcHRpb24uZmxhZ1tpXSk7CisgICAgbHVhX3Jhd3NldGkoTCwgLTIsIGkgKyAxKTsKKyAgfQorCisgIHJldHVybiA0OworfQorCitzdGF0aWMgaW50IGVudGVyUmF3TW9kZShsdWFfU3RhdGUgKkwpIHsKKyAgYnJsYXBpX2hhbmRsZV90ICpjb25zdCBoYW5kbGUgPSBjaGVja2hhbmRsZShMLCAxKTsKKyAgY29uc3QgY2hhciAqY29uc3QgZHJpdmVyTmFtZSA9IGx1YUxfY2hlY2tzdHJpbmcoTCwgMik7CisKKyAgaWYgKGJybGFwaV9fZW50ZXJSYXdNb2RlKGhhbmRsZSwgZHJpdmVyTmFtZSkgPT0gLTEpIGVycm9yKEwpOworCisgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50IGxlYXZlUmF3TW9kZShsdWFfU3RhdGUgKkwpIHsKKyAgYnJsYXBpX2hhbmRsZV90ICpjb25zdCBoYW5kbGUgPSBjaGVja2hhbmRsZShMLCAxKTsKKworICBpZiAoYnJsYXBpX19sZWF2ZVJhd01vZGUoaGFuZGxlKSA9PSAtMSkgZXJyb3IoTCk7CisKKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgY2hhbmdlS2V5cygKKyAgbHVhX1N0YXRlICpMLAorICBpbnQgQlJMQVBJX1NURENBTEwgKCpjaGFuZ2UpIChicmxhcGlfaGFuZGxlX3QgKiwgYnJsYXBpX3JhbmdlVHlwZV90LCBjb25zdCBicmxhcGlfa2V5Q29kZV90W10sIHVuc2lnbmVkIGludCkKKykgeworICBicmxhcGlfaGFuZGxlX3QgKmNvbnN0IGhhbmRsZSA9IGNoZWNraGFuZGxlKEwsIDEpOworICBzdGF0aWMgY29uc3QgY2hhciAqcmFuZ2VOYW1lc1tdID0geworICAgICJhbGwiLCAiY29kZSIsICJjb21tYW5kIiwgImtleSIsICJ0eXBlIiwgTlVMTAorICB9OworICBzdGF0aWMgY29uc3QgYnJsYXBpX3JhbmdlVHlwZV90IHJhbmdlVHlwZXNbXSA9IHsKKyAgICBicmxhcGlfcmFuZ2VUeXBlX2FsbCwKKyAgICBicmxhcGlfcmFuZ2VUeXBlX2NvZGUsCisgICAgYnJsYXBpX3JhbmdlVHlwZV9jb21tYW5kLAorICAgIGJybGFwaV9yYW5nZVR5cGVfa2V5LAorICAgIGJybGFwaV9yYW5nZVR5cGVfdHlwZQorICB9OworICBjb25zdCBicmxhcGlfcmFuZ2VUeXBlX3QgcmFuZ2UgPSByYW5nZVR5cGVzWworICAgIGx1YUxfY2hlY2tvcHRpb24oTCwgMiwgTlVMTCwgcmFuZ2VOYW1lcykKKyAgXTsKKworICBpZiAocmFuZ2UgPT0gYnJsYXBpX3JhbmdlVHlwZV9hbGwpIHsKKyAgICBpZiAoY2hhbmdlKGhhbmRsZSwgcmFuZ2UsIE5VTEwsIDApID09IC0xKSBlcnJvcihMKTsKKworICAgIHJldHVybiAwOworICB9CisKKyAgbHVhTF9jaGVja3R5cGUoTCwgMywgTFVBX1RUQUJMRSk7CisgIGx1YV9sZW4oTCwgMyk7CisKKyAgeworICAgIGNvbnN0IHNpemVfdCBjb3VudCA9IGx1YV90b2ludGVnZXIoTCwgLTEpOworICAgIGJybGFwaV9rZXlDb2RlX3Qga2V5c1tjb3VudF07CisgICAgbHVhX3BvcChMLCAxKTsKKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY291bnQ7IGkgKz0gMSkgeworICAgICAgbHVhX2dldGkoTCwgMywgaSArIDEpOworICAgICAga2V5c1tpXSA9IChicmxhcGlfa2V5Q29kZV90KWx1YUxfY2hlY2tpbnRlZ2VyKEwsIC0xKTsKKyAgICAgIGx1YV9wb3AoTCwgMSk7CisgICAgfQorCisgICAgaWYgKGNoYW5nZShoYW5kbGUsIHJhbmdlLCBrZXlzLCBjb3VudCkgPT0gLTEpIGVycm9yKEwpOworICB9CisgCisgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50IGFjY2VwdEtleXMobHVhX1N0YXRlICpMKSB7CisgIHJldHVybiBjaGFuZ2VLZXlzKEwsIGJybGFwaV9fYWNjZXB0S2V5cyk7Cit9CisKK3N0YXRpYyBpbnQgaWdub3JlS2V5cyhsdWFfU3RhdGUgKkwpIHsKKyAgcmV0dXJuIGNoYW5nZUtleXMoTCwgYnJsYXBpX19pZ25vcmVLZXlzKTsKK30KKworc3RhdGljIGludCBhY2NlcHRBbGxLZXlzKGx1YV9TdGF0ZSAqTCkgeworICBpZiAoYnJsYXBpX19hY2NlcHRBbGxLZXlzKGNoZWNraGFuZGxlKEwsIDEpKSA9PSAtMSkgZXJyb3IoTCk7CisKKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgaWdub3JlQWxsS2V5cyhsdWFfU3RhdGUgKkwpIHsKKyAgaWYgKGJybGFwaV9faWdub3JlQWxsS2V5cyhjaGVja2hhbmRsZShMLCAxKSkgPT0gLTEpIGVycm9yKEwpOworCisgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50IHN1c3BlbmREcml2ZXIobHVhX1N0YXRlICpMKSB7CisgIGJybGFwaV9oYW5kbGVfdCAqY29uc3QgaGFuZGxlID0gY2hlY2toYW5kbGUoTCwgMSk7CisgIGNvbnN0IGNoYXIgKmNvbnN0IGRyaXZlck5hbWUgPSBsdWFMX2NoZWNrc3RyaW5nKEwsIDIpOworCisgIGlmIChicmxhcGlfX3N1c3BlbmREcml2ZXIoaGFuZGxlLCBkcml2ZXJOYW1lKSA9PSAtMSkgZXJyb3IoTCk7CisKKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcmVzdW1lRHJpdmVyKGx1YV9TdGF0ZSAqTCkgeworICBpZiAoYnJsYXBpX19yZXN1bWVEcml2ZXIoY2hlY2toYW5kbGUoTCwgMSkpID09IC0xKSBlcnJvcihMKTsKKworICByZXR1cm4gMDsKK30KKworc3RhdGljIGludCBwYXVzZV8obHVhX1N0YXRlICpMKSB7CisgIGJybGFwaV9oYW5kbGVfdCAqY29uc3QgaGFuZGxlID0gY2hlY2toYW5kbGUoTCwgMSk7CisgIGNvbnN0IGludCB0aW1lb3V0X21zID0gbHVhTF9jaGVja2ludGVnZXIoTCwgMik7CisgIGludCByZXN1bHQ7CisKKyAgZG8geworICAgIHJlc3VsdCA9IGJybGFwaV9fcGF1c2UoaGFuZGxlLCB0aW1lb3V0X21zKTsKKyAgfSB3aGlsZSAodGltZW91dF9tcyA9PSAtMSAmJiByZXN1bHQgPT0gLTEgJiYKKyAgICAgICAgICAgYnJsYXBpX2Vycm5vID09IEJSTEFQSV9FUlJPUl9MSUJDRVJSICYmIGJybGFwaV9saWJjZXJybm8gPT0gRUlOVFIpOworCisgIGlmIChyZXN1bHQgPT0gLTEpIGVycm9yKEwpOworCisgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50IGdldEJvb2xlYW5QYXJhbWV0ZXIobHVhX1N0YXRlICpMLCBicmxhcGlfcGFyYW1fdCBwYXJhbSkgeworICBicmxhcGlfcGFyYW1fYm9vbF90IHZhbHVlOworICBjb25zdCBpbnQgcmVzdWx0ID0gYnJsYXBpX19nZXRQYXJhbWV0ZXIoY2hlY2toYW5kbGUoTCwgMSksCisgICAgcGFyYW0sIDAsIEJSTEFQSV9QQVJBTUZfR0xPQkFMLCAmdmFsdWUsIHNpemVvZih2YWx1ZSkKKyAgKTsKKworICBpZiAocmVzdWx0ID09IC0xKSBlcnJvcihMKTsKKworICBsdWFfcHVzaGJvb2xlYW4oTCwgdmFsdWUpOworCisgIHJldHVybiAxOworfQorCitzdGF0aWMgaW50IHNldEJvb2xlYW5QYXJhbWV0ZXIobHVhX1N0YXRlICpMLCBicmxhcGlfcGFyYW1fdCBwYXJhbSkgeworICBicmxhcGlfaGFuZGxlX3QgKmNvbnN0IGhhbmRsZSA9IGNoZWNraGFuZGxlKEwsIDEpOworICBjb25zdCBicmxhcGlfcGFyYW1fZmxhZ3NfdCBmbGFncyA9IEJSTEFQSV9QQVJBTUZfR0xPQkFMOworICBjb25zdCBicmxhcGlfcGFyYW1fYm9vbF90IHZhbHVlID0gbHVhX3RvYm9vbGVhbihMLCAyKTsKKworICBpZiAoYnJsYXBpX19zZXRQYXJhbWV0ZXIoaGFuZGxlLCBwYXJhbSwgMCwgZmxhZ3MsICZ2YWx1ZSwgc2l6ZW9mKHZhbHVlKSkgPT0gLTEpCisgICAgZXJyb3IoTCk7CisKKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZ2V0U3RyaW5nUGFyYW1ldGVyKAorICBsdWFfU3RhdGUgKkwsCisgIGJybGFwaV9wYXJhbV90IHBhcmFtLCBicmxhcGlfcGFyYW1fc3VicGFyYW1fdCBzdWJwYXJhbQorKSB7CisgIHNpemVfdCBjb3VudDsKKyAgY2hhciAqc3RyaW5nID0gYnJsYXBpX19nZXRQYXJhbWV0ZXJBbGxvYyhjaGVja2hhbmRsZShMLCAxKSwKKyAgICBwYXJhbSwgc3VicGFyYW0sIEJSTEFQSV9QQVJBTUZfR0xPQkFMLCAmY291bnQKKyAgKTsKKworICBpZiAoc3RyaW5nID09IE5VTEwpIGVycm9yKEwpOworCisgIGx1YV9wdXNobHN0cmluZyhMLCBzdHJpbmcsIGNvdW50KTsKKyAgZnJlZShzdHJpbmcpOworCisgIHJldHVybiAxOworfQorCitzdGF0aWMgaW50IHNldFN0cmluZ1BhcmFtZXRlcigKKyAgbHVhX1N0YXRlICpMLAorICBicmxhcGlfcGFyYW1fdCBwYXJhbSwgYnJsYXBpX3BhcmFtX3N1YnBhcmFtX3Qgc3VicGFyYW0KKykgeworICBicmxhcGlfaGFuZGxlX3QgKmNvbnN0IGhhbmRsZSA9IGNoZWNraGFuZGxlKEwsIDEpOworICBzaXplX3QgbGVuZ3RoOworICBjb25zdCBicmxhcGlfcGFyYW1fZmxhZ3NfdCBmbGFncyA9IEJSTEFQSV9QQVJBTUZfR0xPQkFMOworICBjb25zdCBjaGFyICpzdHJpbmcgPSBsdWFMX2NoZWNrbHN0cmluZyhMLCAyLCAmbGVuZ3RoKTsKKworICBpZiAoYnJsYXBpX19zZXRQYXJhbWV0ZXIoaGFuZGxlLCBwYXJhbSwgc3VicGFyYW0sIGZsYWdzLCBzdHJpbmcsIGxlbmd0aCkgPT0gLTEpCisgICAgZXJyb3IoTCk7CisKKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZ2V0RHJpdmVyQ29kZShsdWFfU3RhdGUgKkwpIHsKKyAgcmV0dXJuIGdldFN0cmluZ1BhcmFtZXRlcihMLCBCUkxBUElfUEFSQU1fRFJJVkVSX0NPREUsIDApOworfQorCitzdGF0aWMgaW50IGdldERyaXZlclZlcnNpb24obHVhX1N0YXRlICpMKSB7CisgIHJldHVybiBnZXRTdHJpbmdQYXJhbWV0ZXIoTCwgQlJMQVBJX1BBUkFNX0RSSVZFUl9WRVJTSU9OLCAwKTsKK30KKworc3RhdGljIGludCBnZXREZXZpY2VPbmxpbmUobHVhX1N0YXRlICpMKSB7CisgIHJldHVybiBnZXRCb29sZWFuUGFyYW1ldGVyKEwsIEJSTEFQSV9QQVJBTV9ERVZJQ0VfT05MSU5FKTsKK30KKworc3RhdGljIGludCBnZXRBdWRpYmxlQWxlcnRzKGx1YV9TdGF0ZSAqTCkgeworICByZXR1cm4gZ2V0Qm9vbGVhblBhcmFtZXRlcihMLCBCUkxBUElfUEFSQU1fQVVESUJMRV9BTEVSVFMpOworfQorCitzdGF0aWMgaW50IHNldEF1ZGlibGVBbGVydHMobHVhX1N0YXRlICpMKSB7CisgIHJldHVybiBzZXRCb29sZWFuUGFyYW1ldGVyKEwsIEJSTEFQSV9QQVJBTV9BVURJQkxFX0FMRVJUUyk7Cit9CisKK3N0YXRpYyBpbnQgZ2V0Q2xpcGJvYXJkQ29udGVudChsdWFfU3RhdGUgKkwpIHsKKyAgcmV0dXJuIGdldFN0cmluZ1BhcmFtZXRlcihMLCBCUkxBUElfUEFSQU1fQ0xJUEJPQVJEX0NPTlRFTlQsIDApOworfQorCitzdGF0aWMgaW50IHNldENsaXBib2FyZENvbnRlbnQobHVhX1N0YXRlICpMKSB7CisgIHJldHVybiBzZXRTdHJpbmdQYXJhbWV0ZXIoTCwgQlJMQVBJX1BBUkFNX0NMSVBCT0FSRF9DT05URU5ULCAwKTsKK30KKworc3RhdGljIGludCBnZXRDb21wdXRlckJyYWlsbGVUYWJsZShsdWFfU3RhdGUgKkwpIHsKKyAgcmV0dXJuIGdldFN0cmluZ1BhcmFtZXRlcihMLCBCUkxBUElfUEFSQU1fQ09NUFVURVJfQlJBSUxMRV9UQUJMRSwgMCk7Cit9CisKK3N0YXRpYyBpbnQgc2V0Q29tcHV0ZXJCcmFpbGxlVGFibGUobHVhX1N0YXRlICpMKSB7CisgIHJldHVybiBzZXRTdHJpbmdQYXJhbWV0ZXIoTCwgQlJMQVBJX1BBUkFNX0NPTVBVVEVSX0JSQUlMTEVfVEFCTEUsIDApOworfQorCitzdGF0aWMgaW50IGdldExpdGVyYXJ5QnJhaWxsZVRhYmxlKGx1YV9TdGF0ZSAqTCkgeworICByZXR1cm4gZ2V0U3RyaW5nUGFyYW1ldGVyKEwsIEJSTEFQSV9QQVJBTV9MSVRFUkFSWV9CUkFJTExFX1RBQkxFLCAwKTsKK30KKworc3RhdGljIGludCBzZXRMaXRlcmFyeUJyYWlsbGVUYWJsZShsdWFfU3RhdGUgKkwpIHsKKyAgcmV0dXJuIHNldFN0cmluZ1BhcmFtZXRlcihMLCBCUkxBUElfUEFSQU1fTElURVJBUllfQlJBSUxMRV9UQUJMRSwgMCk7Cit9CisKK3N0YXRpYyBpbnQgZ2V0TWVzc2FnZUxvY2FsZShsdWFfU3RhdGUgKkwpIHsKKyAgcmV0dXJuIGdldFN0cmluZ1BhcmFtZXRlcihMLCBCUkxBUElfUEFSQU1fTUVTU0FHRV9MT0NBTEUsIDApOworfQorCitzdGF0aWMgaW50IHNldE1lc3NhZ2VMb2NhbGUobHVhX1N0YXRlICpMKSB7CisgIHJldHVybiBzZXRTdHJpbmdQYXJhbWV0ZXIoTCwgQlJMQVBJX1BBUkFNX01FU1NBR0VfTE9DQUxFLCAwKTsKK30KKworc3RhdGljIGludCBnZXRCb3VuZENvbW1hbmRLZXljb2RlcyhsdWFfU3RhdGUgKkwpIHsKKyAgc2l6ZV90IGNvdW50OworICBicmxhcGlfa2V5Q29kZV90ICpjb2RlcyA9IGJybGFwaV9fZ2V0UGFyYW1ldGVyQWxsb2MoY2hlY2toYW5kbGUoTCwgMSksCisgICAgQlJMQVBJX1BBUkFNX0JPVU5EX0NPTU1BTkRfS0VZQ09ERVMsIDAsIEJSTEFQSV9QQVJBTUZfR0xPQkFMLCAmY291bnQKKyAgKTsKKworICBpZiAoY29kZXMgPT0gTlVMTCkgZXJyb3IoTCk7CisKKyAgY291bnQgLz0gc2l6ZW9mKGJybGFwaV9rZXlDb2RlX3QpOworCisgIGx1YV9uZXd0YWJsZShMKTsKKyAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjb3VudDsgaSArPSAxKSB7CisgICAgbHVhX3B1c2hpbnRlZ2VyKEwsIChsdWFfSW50ZWdlciljb2Rlc1tpXSk7CisgICAgbHVhX3Jhd3NldGkoTCwgLTIsIGkgKyAxKTsKKyAgfQorCisgIGZyZWUoY29kZXMpOworCisgIHJldHVybiAxOworfQorCitzdGF0aWMgaW50IGdldENvbW1hbmRLZXljb2RlTmFtZShsdWFfU3RhdGUgKkwpIHsKKyAgY29uc3QgYnJsYXBpX2tleUNvZGVfdCBrZXlDb2RlID0gKGJybGFwaV9rZXlDb2RlX3QpbHVhTF9jaGVja2ludGVnZXIoTCwgMik7CisgIHJldHVybiBnZXRTdHJpbmdQYXJhbWV0ZXIoTCwgQlJMQVBJX1BBUkFNX0NPTU1BTkRfS0VZQ09ERV9OQU1FLCBrZXlDb2RlKTsKK30KKworc3RhdGljIGludCBnZXRDb21tYW5kS2V5Y29kZVN1bW1hcnkobHVhX1N0YXRlICpMKSB7CisgIGNvbnN0IGJybGFwaV9rZXlDb2RlX3Qga2V5Q29kZSA9IChicmxhcGlfa2V5Q29kZV90KWx1YUxfY2hlY2tpbnRlZ2VyKEwsIDIpOworICByZXR1cm4gZ2V0U3RyaW5nUGFyYW1ldGVyKEwsIEJSTEFQSV9QQVJBTV9DT01NQU5EX0tFWUNPREVfU1VNTUFSWSwga2V5Q29kZSk7Cit9CisKK3N0YXRpYyBpbnQgZ2V0RGVmaW5lZERyaXZlcktleWNvZGVzKGx1YV9TdGF0ZSAqTCkgeworICBzaXplX3QgY291bnQ7CisgIGJybGFwaV9rZXlDb2RlX3QgKmNvZGVzID0gYnJsYXBpX19nZXRQYXJhbWV0ZXJBbGxvYyhjaGVja2hhbmRsZShMLCAxKSwKKyAgICBCUkxBUElfUEFSQU1fREVGSU5FRF9EUklWRVJfS0VZQ09ERVMsIDAsIEJSTEFQSV9QQVJBTUZfR0xPQkFMLCAmY291bnQKKyAgKTsKKworICBpZiAoY29kZXMgPT0gTlVMTCkgZXJyb3IoTCk7CisKKyAgY291bnQgLz0gc2l6ZW9mKGJybGFwaV9rZXlDb2RlX3QpOworCisgIGx1YV9uZXd0YWJsZShMKTsKKyAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjb3VudDsgaSArPSAxKSB7CisgICAgbHVhX3B1c2hpbnRlZ2VyKEwsIChsdWFfSW50ZWdlciljb2Rlc1tpXSk7CisgICAgbHVhX3Jhd3NldGkoTCwgLTIsIGkgKyAxKTsKKyAgfQorCisgIGZyZWUoY29kZXMpOworCisgIHJldHVybiAxOworfQorCitzdGF0aWMgaW50IGdldERyaXZlcktleWNvZGVOYW1lKGx1YV9TdGF0ZSAqTCkgeworICBjb25zdCBicmxhcGlfa2V5Q29kZV90IGtleUNvZGUgPSAoYnJsYXBpX2tleUNvZGVfdClsdWFMX2NoZWNraW50ZWdlcihMLCAyKTsKKyAgcmV0dXJuIGdldFN0cmluZ1BhcmFtZXRlcihMLCBCUkxBUElfUEFSQU1fRFJJVkVSX0tFWUNPREVfTkFNRSwga2V5Q29kZSk7Cit9CisKK3N0YXRpYyBpbnQgZ2V0RHJpdmVyS2V5Y29kZVN1bW1hcnkobHVhX1N0YXRlICpMKSB7CisgIGNvbnN0IGJybGFwaV9rZXlDb2RlX3Qga2V5Q29kZSA9IChicmxhcGlfa2V5Q29kZV90KWx1YUxfY2hlY2tpbnRlZ2VyKEwsIDIpOworICByZXR1cm4gZ2V0U3RyaW5nUGFyYW1ldGVyKEwsIEJSTEFQSV9QQVJBTV9EUklWRVJfS0VZQ09ERV9TVU1NQVJZLCBrZXlDb2RlKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgdmVyc2lvbkdldEZpZWxkKGx1YV9TdGF0ZSAqTCwgY29uc3QgY2hhciAqbmFtZSkgeworICBpZiAobHVhX2dldGZpZWxkKEwsIDEsIG5hbWUpID09IExVQV9UTlVNQkVSKSB7CisgICAgaWYgKGx1YV9nZXRmaWVsZChMLCAyLCBuYW1lKSA9PSBMVUFfVE5VTUJFUikgeworICAgICAgcmV0dXJuIDE7CisgICAgfQorICB9CisKKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdmVyc2lvbkNvbXBhcmUobHVhX1N0YXRlICpMLCBpbnQgb3ApIHsKKyAgaW50IHJlc3VsdCA9IDA7CisKKyAgaWYgKHZlcnNpb25HZXRGaWVsZChMLCAibWFqb3IiKSkgeworICAgIGlmIChsdWFfY29tcGFyZShMLCAtMiwgLTEsIExVQV9PUExUKSkgeworICAgICAgcmVzdWx0ID0gMTsKKyAgICB9IGVsc2UgaWYgKGx1YV9jb21wYXJlKEwsIC0yLCAtMSwgTFVBX09QRVEpKSB7CisgICAgICBpZiAodmVyc2lvbkdldEZpZWxkKEwsICJtaW5vciIpKSB7CisJaWYgKGx1YV9jb21wYXJlKEwsIC0yLCAtMSwgTFVBX09QTFQpKSB7CisJICByZXN1bHQgPSAxOworCX0gZWxzZSBpZiAobHVhX2NvbXBhcmUoTCwgLTIsIC0xLCBMVUFfT1BFUSkpIHsKKwkgIGlmICh2ZXJzaW9uR2V0RmllbGQoTCwgInJldmlzaW9uIikpIHsKKwkgICAgaWYgKGx1YV9jb21wYXJlKEwsIC0yLCAtMSwgb3ApKSB7CisJICAgICAgcmVzdWx0ID0gMTsKKwkgICAgfQorCSAgfQorCX0KKyAgICAgIH0KKyAgICB9CisgIH0KKworICBsdWFfcHVzaGJvb2xlYW4oTCwgcmVzdWx0KTsKKyAgcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQgdmVyc2lvbkxUKGx1YV9TdGF0ZSAqTCkgeworICByZXR1cm4gdmVyc2lvbkNvbXBhcmUoTCwgTFVBX09QTFQpOworfQorCitzdGF0aWMgaW50IHZlcnNpb25MRShsdWFfU3RhdGUgKkwpIHsKKyAgcmV0dXJuIHZlcnNpb25Db21wYXJlKEwsIExVQV9PUExFKTsKK30KKworc3RhdGljIGludCB2ZXJzaW9uU3RyaW5nKGx1YV9TdGF0ZSAqTCkgeworICBzdGF0aWMgY29uc3QgY2hhciAqc2VwYXJhdG9yID0gIi4iOworCisgIGx1YV9nZXRmaWVsZChMLCAxLCAibWFqb3IiKTsKKyAgbHVhX3B1c2hzdHJpbmcoTCwgc2VwYXJhdG9yKTsKKyAgbHVhX2dldGZpZWxkKEwsIDEsICJtaW5vciIpOworICBsdWFfcHVzaHN0cmluZyhMLCBzZXBhcmF0b3IpOworICBsdWFfZ2V0ZmllbGQoTCwgMSwgInJldmlzaW9uIik7CisKKyAgbHVhX2NvbmNhdChMLCA1KTsKKworICByZXR1cm4gMTsKK30KKworc3RhdGljIGNvbnN0IGx1YUxfUmVnIHZlcnNpb25fbWV0YVtdID0geworICB7ICJfX2x0IiwgdmVyc2lvbkxUIH0sCisgIHsgIl9fbGUiLCB2ZXJzaW9uTEUgfSwKKyAgeyAiX190b3N0cmluZyIsIHZlcnNpb25TdHJpbmcgfSwKKyAgeyBOVUxMLCBOVUxMIH0KK307CisKK3N0YXRpYyBjb25zdCBsdWFMX1JlZyBtZXRhW10gPSB7CisgIHsgIl9fY2xvc2UiLCBjbG9zZUNvbm5lY3Rpb24gfSwKKyAgeyBOVUxMLCBOVUxMIH0KK307CisKK3N0YXRpYyBjb25zdCBsdWFMX1JlZyBmdW5jc1tdID0geworICB7ICJvcGVuQ29ubmVjdGlvbiIsIG9wZW5Db25uZWN0aW9uIH0sCisgIHsgImdldEZpbGVEZXNjcmlwdG9yIiwgZ2V0RmlsZURlc2NyaXB0b3IgfSwKKyAgeyAiY2xvc2VDb25uZWN0aW9uIiwgY2xvc2VDb25uZWN0aW9uIH0sCisgIHsgImdldERyaXZlck5hbWUiLCBnZXREcml2ZXJOYW1lIH0sCisgIHsgImdldE1vZGVsSWRlbnRpZmllciIsIGdldE1vZGVsSWRlbnRpZmllciB9LAorICB7ICJnZXREaXNwbGF5U2l6ZSIsIGdldERpc3BsYXlTaXplIH0sCisgIHsgImVudGVyVHR5TW9kZSIsIGVudGVyVHR5TW9kZSB9LAorICB7ICJsZWF2ZVR0eU1vZGUiLCBsZWF2ZVR0eU1vZGUgfSwKKyAgeyAic2V0Rm9jdXMiLCBzZXRGb2N1cyB9LAorICB7ICJ3cml0ZVRleHQiLCB3cml0ZVRleHQgfSwKKyAgeyAid3JpdGVEb3RzIiwgd3JpdGVEb3RzIH0sCisgIHsgInJlYWRLZXkiLCByZWFkS2V5IH0sCisgIHsgInJlYWRLZXlXaXRoVGltZW91dCIsIHJlYWRLZXlXaXRoVGltZW91dCB9LAorICB7ICJleHBhbmRLZXlDb2RlIiwgZXhwYW5kS2V5Q29kZSB9LAorICB7ICJkZXNjcmliZUtleUNvZGUiLCBkZXNjcmliZUtleUNvZGUgfSwKKyAgeyAiZW50ZXJSYXdNb2RlIiwgZW50ZXJSYXdNb2RlIH0sCisgIHsgImxlYXZlUmF3TW9kZSIsIGxlYXZlUmF3TW9kZSB9LAorICB7ICJhY2NlcHRLZXlzIiwgYWNjZXB0S2V5cyB9LAorICB7ICJpZ25vcmVLZXlzIiwgaWdub3JlS2V5cyB9LAorICB7ICJhY2NlcHRBbGxLZXlzIiwgYWNjZXB0QWxsS2V5cyB9LAorICB7ICJpZ25vcmVBbGxLZXlzIiwgaWdub3JlQWxsS2V5cyB9LAorICB7ICJzdXNwZW5kRHJpdmVyIiwgc3VzcGVuZERyaXZlciB9LAorICB7ICJyZXN1bWVEcml2ZXIiLCByZXN1bWVEcml2ZXIgfSwKKyAgeyAicGF1c2UiLCBwYXVzZV8gfSwKKyAgeyAiZ2V0RHJpdmVyQ29kZSIsIGdldERyaXZlckNvZGUgfSwKKyAgeyAiZ2V0RHJpdmVyVmVyc2lvbiIsIGdldERyaXZlclZlcnNpb24gfSwKKyAgeyAiZ2V0RGV2aWNlT25saW5lIiwgZ2V0RGV2aWNlT25saW5lIH0sCisgIHsgImdldEF1ZGlibGVBbGVydHMiLCBnZXRBdWRpYmxlQWxlcnRzIH0sCisgIHsgInNldEF1ZGlibGVBbGVydHMiLCBzZXRBdWRpYmxlQWxlcnRzIH0sCisgIHsgImdldENsaXBib2FyZENvbnRlbnQiLCBnZXRDbGlwYm9hcmRDb250ZW50IH0sCisgIHsgInNldENsaXBib2FyZENvbnRlbnQiLCBzZXRDbGlwYm9hcmRDb250ZW50IH0sCisgIHsgImdldENvbXB1dGVyQnJhaWxsZVRhYmxlIiwgZ2V0Q29tcHV0ZXJCcmFpbGxlVGFibGUgfSwKKyAgeyAic2V0Q29tcHV0ZXJCcmFpbGxlVGFibGUiLCBzZXRDb21wdXRlckJyYWlsbGVUYWJsZSB9LAorICB7ICJnZXRMaXRlcmFyeUJyYWlsbGVUYWJsZSIsIGdldExpdGVyYXJ5QnJhaWxsZVRhYmxlIH0sCisgIHsgInNldExpdGVyYXJ5QnJhaWxsZVRhYmxlIiwgc2V0TGl0ZXJhcnlCcmFpbGxlVGFibGUgfSwKKyAgeyAiZ2V0TWVzc2FnZUxvY2FsZSIsIGdldE1lc3NhZ2VMb2NhbGUgfSwKKyAgeyAic2V0TWVzc2FnZUxvY2FsZSIsIHNldE1lc3NhZ2VMb2NhbGUgfSwKKyAgeyAiZ2V0Qm91bmRDb21tYW5kS2V5Y29kZXMiLCBnZXRCb3VuZENvbW1hbmRLZXljb2RlcyB9LAorICB7ICJnZXRDb21tYW5kS2V5Y29kZU5hbWUiLCBnZXRDb21tYW5kS2V5Y29kZU5hbWUgfSwKKyAgeyAiZ2V0Q29tbWFuZEtleWNvZGVTdW1tYXJ5IiwgZ2V0Q29tbWFuZEtleWNvZGVTdW1tYXJ5IH0sCisgIHsgImdldERlZmluZWREcml2ZXJLZXljb2RlcyIsIGdldERlZmluZWREcml2ZXJLZXljb2RlcyB9LAorICB7ICJnZXREcml2ZXJLZXljb2RlTmFtZSIsIGdldERyaXZlcktleWNvZGVOYW1lIH0sCisgIHsgImdldERyaXZlcktleWNvZGVTdW1tYXJ5IiwgZ2V0RHJpdmVyS2V5Y29kZVN1bW1hcnkgfSwKKyAgeyBOVUxMLCBOVUxMIH0KK307CisKK3N0YXRpYyB2b2lkIGNyZWF0ZWNtZHRhYmxlKGx1YV9TdGF0ZSAqTCkgeworICBsdWFfbmV3dGFibGUoTCk7CisjZGVmaW5lIENNRChuYW1lLCB2YWx1ZSkgbHVhX3B1c2hpbnRlZ2VyKEwsIChsdWFfSW50ZWdlcil2YWx1ZSksIGx1YV9zZXRmaWVsZChMLCAtMiwgU1RSSU5HSUZZKG5hbWUpKTsKKyNpbmNsdWRlICJjbWQuYXV0by5oIgorI3VuZGVmIENNRAorfQorCitpbnQgbHVhb3Blbl9icmxhcGkobHVhX1N0YXRlICpMKSB7CisgIGx1YUxfbmV3bWV0YXRhYmxlKEwsIGhhbmRsZV90KTsKKyAgbHVhTF9zZXRmdW5jcyhMLCBtZXRhLCAwKTsKKyAgbHVhTF9uZXdsaWIoTCwgZnVuY3MpOworCisgIHsKKyAgICBpbnQgbWFqb3IsIG1pbm9yLCByZXZpc2lvbjsKKworICAgIGJybGFwaV9nZXRMaWJyYXJ5VmVyc2lvbigmbWFqb3IsICZtaW5vciwgJnJldmlzaW9uKTsKKworICAgIGx1YV9jcmVhdGV0YWJsZShMLCAwLCAzKTsKKyAgICBsdWFfcHVzaGludGVnZXIoTCwgbWFqb3IpLCBsdWFfc2V0ZmllbGQoTCwgLTIsICJtYWpvciIpOworICAgIGx1YV9wdXNoaW50ZWdlcihMLCBtaW5vciksIGx1YV9zZXRmaWVsZChMLCAtMiwgIm1pbm9yIik7CisgICAgbHVhX3B1c2hpbnRlZ2VyKEwsIHJldmlzaW9uKSwgbHVhX3NldGZpZWxkKEwsIC0yLCAicmV2aXNpb24iKTsKKyAgICBsdWFMX25ld21ldGF0YWJsZShMLCAidmVyc2lvbiIpOworICAgIGx1YUxfc2V0ZnVuY3MoTCwgdmVyc2lvbl9tZXRhLCAwKTsKKyAgICBsdWFfc2V0bWV0YXRhYmxlKEwsIC0yKTsKKyAgICBsdWFfc2V0ZmllbGQoTCwgLTIsICJ2ZXJzaW9uIik7CisgIH0KKworICBjcmVhdGVjbWR0YWJsZShMKTsKKyAgbHVhX3NldGZpZWxkKEwsIC0yLCAiQ01EIik7CisKKyAgLyogU2V0IGZ1bmN0aW9uIHRhYmxlIGFzIG1ldGF0YWJsZSBfX2luZGV4ICovCisgIGx1YV9wdXNodmFsdWUoTCwgLTEpLCBsdWFfc2V0ZmllbGQoTCwgLTMsICJfX2luZGV4Iik7CisKKyAgcmV0dXJuIDE7Cit9CmRpZmYgLS1naXQgYS9CaW5kaW5ncy9MdWEvYmluZGluZ3MubTQgYi9CaW5kaW5ncy9MdWEvYmluZGluZ3MubTQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzIwNzY1YQotLS0gL2Rldi9udWxsCisrKyBiL0JpbmRpbmdzL0x1YS9iaW5kaW5ncy5tNApAQCAtMCwwICsxLDUxIEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIGxpYmJybGFwaSAtIEEgbGlicmFyeSBwcm92aWRpbmcgYWNjZXNzIHRvIGJyYWlsbGUgdGVybWluYWxzIGZvciBhcHBsaWNhdGlvbnMuCisjCisjIENvcHlyaWdodCAoQykgMjAwNi0yMDIzIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4KKyMKKyMgbGliYnJsYXBpIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitBQ19ERUZVTihbQlJMVFRZX0xVQV9CSU5ESU5HU10sIFtkbmwKK0xVQV9PSz1mYWxzZQorTFVBPSIiCitMVUFfTElCUkFSWV9ESVJFQ1RPUlk9IiIKKworQlJMVFRZX0hBVkVfUEFDS0FHRShbbHVhXSwgW2x1YTUuNCBsdWFdLCBbZG5sCisgICBBQ19QQVRIX1BST0dTKFtMVUFdLCBbbHVhNS40IGx1YV0pCisKKyAgIGlmIHRlc3QgLW4gIiR7TFVBfSIKKyAgIHRoZW4KKyAgICAgIEFDX01TR19OT1RJQ0UoW0x1YSBzaGVsbDogJHtMVUF9XSkKKyAgICAgIEJSTFRUWV9MVUFfUVVFUlkoW0xVQV9MSUJSQVJZX0RJUkVDVE9SWV0sIFtsaWJkaXJdKQorCisgICAgICBpZiB0ZXN0IC1uICIke0xVQV9MSUJSQVJZX0RJUkVDVE9SWX0iCisgICAgICB0aGVuCisgICAgICAgICBBQ19NU0dfTk9USUNFKFtMdWEgbGlicmFyeSBkaXJlY3Rvcnk6ICR7TFVBX0xJQlJBUllfRElSRUNUT1JZfV0pCisgICAgICAgICBMVUFfT0s9dHJ1ZQorICAgICAgZWxzZQorICAgICAgICAgQUNfTVNHX1dBUk4oW0x1YSBsaWJyYXJ5IGRpcmVjdG9yeSBub3QgZm91bmRdKQorICAgICAgZmkKKyAgIGVsc2UKKyAgICAgIEFDX01TR19XQVJOKFtMdWEgc2hlbGwgbm90IGZvdW5kXSkKKyAgICAgIExVQT0iTFVBX1NIRUxMX05PVF9GT1VORF9CWV9DT05GSUdVUkUiCisgICBmaQorXSkKKworQUNfU1VCU1QoW0xVQV9PS10pCitBQ19TVUJTVChbTFVBXSkKK0FDX1NVQlNUKFtMVUFfTElCUkFSWV9ESVJFQ1RPUlldKQorXSkKKworQUNfREVGVU4oW0JSTFRUWV9MVUFfUVVFUlldLCBbZG5sCisgICAkMT1gIiR7c3JjZGlyfS9Ub29scy9sdWFjbWQiICQyYAorXSkKZGlmZiAtLWdpdCBhL0JpbmRpbmdzL0x1YS9jb25zdGFudHMuYXdrIGIvQmluZGluZ3MvTHVhL2NvbnN0YW50cy5hd2sKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWRiZGRhYQotLS0gL2Rldi9udWxsCisrKyBiL0JpbmRpbmdzL0x1YS9jb25zdGFudHMuYXdrCkBAIC0wLDAgKzEsNTMgQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgbGliYnJsYXBpIC0gQSBsaWJyYXJ5IHByb3ZpZGluZyBhY2Nlc3MgdG8gYnJhaWxsZSB0ZXJtaW5hbHMgZm9yIGFwcGxpY2F0aW9ucy4KKyMKKyMgQ29weXJpZ2h0IChDKSAyMDA2LTIwMjMgYnkKKyMgICBTYW11ZWwgVGhpYmF1bHQgPFNhbXVlbC5UaGliYXVsdEBlbnMtbHlvbi5vcmc+CisjICAgU8OpYmFzdGllbiBIaW5kZXJlciA8U2ViYXN0aWVuLkhpbmRlcmVyQGVucy1seW9uLm9yZz4KKyMKKyMgbGliYnJsYXBpIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitmdW5jdGlvbiBicmxDb21tYW5kKG5hbWUsIHN5bWJvbCwgdmFsdWUsIGhlbHApIHsKKyAgcHJpbnQgIiAgQ01EKCIgbmFtZSAiLCAiIHN5bWJvbCAiKSIKK30KKworZnVuY3Rpb24gYnJsQmxvY2sobmFtZSwgc3ltYm9sLCB2YWx1ZSwgaGVscCkgeworfQorCitmdW5jdGlvbiBicmxLZXkobmFtZSwgc3ltYm9sLCB2YWx1ZSwgaGVscCkgeworfQorCitmdW5jdGlvbiBicmxGbGFnKG5hbWUsIHN5bWJvbCwgdmFsdWUsIGhlbHApIHsKK30KKworZnVuY3Rpb24gYnJsRG90KG51bWJlciwgc3ltYm9sLCB2YWx1ZSwgaGVscCkgeworfQorCitmdW5jdGlvbiBhcGlDb25zdGFudChuYW1lLCBzeW1ib2wsIHZhbHVlLCBoZWxwKSB7Cit9CisKK2Z1bmN0aW9uIGFwaU1hc2sobmFtZSwgc3ltYm9sLCB2YWx1ZSwgaGVscCkgeworfQorCitmdW5jdGlvbiBhcGlTaGlmdChuYW1lLCBzeW1ib2wsIHZhbHVlLCBoZWxwKSB7Cit9CisKK2Z1bmN0aW9uIGFwaVR5cGUobmFtZSwgc3ltYm9sLCB2YWx1ZSwgaGVscCkgeworfQorCitmdW5jdGlvbiBhcGlLZXkobmFtZSwgc3ltYm9sLCB2YWx1ZSwgaGVscCkgeworfQorCitmdW5jdGlvbiBhcGlSYW5nZVR5cGUobmFtZSwgc3ltYm9sLCB2YWx1ZSwgaGVscCkgeworfQorCmRpZmYgLS1naXQgYS9CaW5kaW5ncy9PQ2FtbC9NRVRBIGIvQmluZGluZ3MvT0NhbWwvTUVUQQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNGMzYWMwCi0tLSAvZGV2L251bGwKKysrIGIvQmluZGluZ3MvT0NhbWwvTUVUQQpAQCAtMCwwICsxLDUgQEAKK3JlcXVpcmVzID0gInVuaXgiCitkZXNjcmlwdGlvbiA9ICJCaW5kaW5ncyBmb3IgdGhlIGxpYmJybGFwaSBicmFpbGxlIGVuYWJsaW5nIGxpYnJhcnkiCithcmNoaXZlKGJ5dGUpID0gImJybGFwaS5jbWEiCithcmNoaXZlKG5hdGl2ZSkgPSAiYnJsYXBpLmNteGEiCit2ZXJzaW9uID0gIjAuMSIKZGlmZiAtLWdpdCBhL0JpbmRpbmdzL09DYW1sL01ha2VmaWxlLmluIGIvQmluZGluZ3MvT0NhbWwvTWFrZWZpbGUuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTUwM2ZhNAotLS0gL2Rldi9udWxsCisrKyBiL0JpbmRpbmdzL09DYW1sL01ha2VmaWxlLmluCkBAIC0wLDAgKzEsMTIwIEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisjICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorIworIyBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisjCisjIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisjCisjIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyMgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorIyBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyMKKyMgV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworIworIyBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworaW5jbHVkZSAkKFNSQ19UT1ApYmluZGluZ3MubWsKKworT0NBTUxfT0sgPSBAT0NBTUxfT0tACitPQ0FNTEMgPSBAT0NBTUxDQAorT0NBTUxPUFQgPSBAT0NBTUxPUFRACitPQ0FNTE1LTElCID0gQE9DQU1MTUtMSUJACitPQ0FNTE1LTElCX0ZMQUdTID0gLWRsbGliIGRsbCQoQVBJX05BTUUpX3N0dWJzLnNvIC1jY2xpYiAtbCQoQVBJX05BTUUpX3N0dWJzIC1jY2xpYiAtbCQoQVBJX05BTUUpCitPQ0FNTE1LTElCT1BUX0ZMQUdTID0gLWNjbGliIC1sJChBUElfTkFNRSlfc3R1YnMgLWNjbGliIC1sJChBUElfTkFNRSkKK09DQU1MQkVTVCA9IEBPQ0FNTEJFU1RACitPQ0FNTFZFUlNJT04gPSBAT0NBTUxWRVJTSU9OQAorT0NBTUxMSUIgPSBAT0NBTUxMSUJACitPQ0FNTFdJTjMyID0gQE9DQU1MV0lOMzJACitPQ0FNTEZJTkQgPSBAT0NBTUxGSU5EQAorT0NBTUxfSU5TVEFMTF9UQVJHRVQgPSBAT0NBTUxfSU5TVEFMTF9UQVJHRVRACitPQ0FNTF9VTklOU1RBTExfVEFSR0VUID0gQE9DQU1MX1VOSU5TVEFMTF9UQVJHRVRACisKK09DQU1MX0xJQiA9ICQoQVBJX05BTUUpCitPQ0FNTF9CQ0xJQiA9ICQoT0NBTUxfTElCKS5jbWEKK09DQU1MX05DTElCID0gQE9DQU1MX05DTElCQAorCitPQ0FNTF9NSVNDID0gJChTUkNfRElSKS9NRVRBIGJybGFwaS5tbGkgYnJsYXBpLmNtaQorCitPQ0FNTF9DTElCUyA9IEBPQ0FNTF9DTElCU0AKKworT0NBTUxfREVTVERJUiA9ICQoSU5TVEFMTF9ST09UKSQoT0NBTUxMSUIpCitPQ0FNTF9QS0dESVIgPSAkKE9DQU1MX0RFU1RESVIpLyQoT0NBTUxfTElCKQorT0NBTUxfU1RVQkRJUiA9ICQoT0NBTUxfREVTVERJUikvc3R1YmxpYnMKK09DQU1MX1NUVUIgPSBkbGwkKE9DQU1MX0xJQilfc3R1YnMuc28KK09DQU1MX09XTkVSID0gJChPQ0FNTF9TVFVCKS5vd25lcgorCitPQ0FNTF9GSUxFUyA9ICQoT0NBTUxfTUlTQykgJChPQ0FNTF9DTElCUykgJChPQ0FNTF9CQ0xJQikgJChPQ0FNTF9OQ0xJQikKKworLlBIT05ZOiBhbGwgY2xlYW4KKy5QSE9OWTogaW5zdGFsbCBpbnN0YWxsLXdpdGgtZmluZGxpYiBpbnN0YWxsLXdpdGhvdXQtZmluZGxpYgorLlBIT05ZOiB1bmluc3RhbGwgdW5pbnN0YWxsLXdpdGgtZmluZGxpYiB1bmluc3RhbGwtd2l0aG91dC1maW5kbGliCisKK2FsbDogJChPQ0FNTF9GSUxFUykKKworJChPQ0FNTF9DTElCUyk6IGJybGFwaV9zdHVicy4kTyB8IGJybGFwaQorCSQoT0NBTUxNS0xJQikgLWxkb3B0ICIkKExERkxBR1MpIiAkKEFQSV9MREZMQUdTKSAtb2MgJChPQ0FNTF9MSUIpX3N0dWJzIGJybGFwaV9zdHVicy4kTworCiskKE9DQU1MX0JDTElCKTogJChPQ0FNTF9DTElCUykgYnJsYXBpLmNtbworCSQoT0NBTUxDKSAtYSAkKE9DQU1MTUtMSUJfRkxBR1MpIC1vICQoT0NBTUxfTElCKS5jbWEgYnJsYXBpLmNtbworCiskKE9DQU1MX05DTElCKTogJChPQ0FNTF9DTElCUykgYnJsYXBpLmNteAorCSQoT0NBTUxNS0xJQikgLWxkb3B0ICIkKExERkxBR1MpIiAkKE9DQU1MTUtMSUJPUFRfRkxBR1MpIC1vICQoT0NBTUxfTElCKSBicmxhcGkuY214CisKK2JybGFwaS5jbWk6IGJybGFwaS5tbGkKKwkkKE9DQU1MQykgLWNjICQoQ0MpIC1jY29wdCAiJChMSUJDRkxBR1MpIiAtbyAkQCAtYyBicmxhcGkubWxpCisKK2JybGFwaS5jbW86IGJybGFwaS5tbCBicmxhcGkuY21pCisJJChPQ0FNTEMpIC1jYyAkKENDKSAtY2NvcHQgIiQoTElCQ0ZMQUdTKSIgLW8gJEAgLWMgYnJsYXBpLm1sCisKK2JybGFwaS5jbXg6IGJybGFwaS5tbCBicmxhcGkuY21pCisJJChPQ0FNTE9QVCkgLWNjICQoQ0MpIC1jY29wdCAiJChMSUJDRkxBR1MpIiAtbyAkQCAtYyBicmxhcGkuY214IGJybGFwaS5tbAorCiticmxhcGlfc3R1YnMuJE86ICQoU1JDX0RJUikvYnJsYXBpX3N0dWJzLmMKKwkkKE9DQU1MQykgLWNjICQoQ0MpIC1jY29wdCAiJChMSUJDRkxBR1MpIiAtSSAkKEJMRF9UT1ApJChQR01fRElSKSAtSSAkKFNSQ19UT1ApJChQR01fRElSKSAtYyAkKFNSQ19ESVIpL2JybGFwaV9zdHVicy5jCisKK2JybGFwaS5tbGk6ICQoU1JDX0RJUikvbWFpbi5tbGkgY29uc3RhbnRzLm1saQorCWNhdCAkKFNSQ19ESVIpL21haW4ubWxpIGNvbnN0YW50cy5tbGkgPiAkQAorCiticmxhcGkubWw6ICQoU1JDX0RJUikvbWFpbi5tbCBjb25zdGFudHMubWwKKwljYXQgJChTUkNfRElSKS9tYWluLm1sIGNvbnN0YW50cy5tbCA+ICRACisKK2NvbnN0YW50cy5tbGk6IGNvbnN0YW50cy5tbAorCSQoT0NBTUxDKSAtbyAvZGV2L251bGwgLWMgLWkgY29uc3RhbnRzLm1sID4gJEAKKworY29uc3RhbnRzLm1sOiAkKENPTlNUQU5UU19ERVBFTkRFTkNJRVMpCisJJChBV0spICQoQ09OU1RBTlRTX0FSR1VNRU5UUykgPiRACisKK2NsZWFuOjoKKwktcm0gLWYgLS0gKi5jbSogKi5hICouc28gY29uc3RhbnRzLm1sKiBicmxhcGkubWwqCisKK2luc3RhbGw6IGFsbCAkKE9DQU1MX0lOU1RBTExfVEFSR0VUKQorCitpbnN0YWxsLXdpdGhvdXQtZmluZGxpYjoKKwkkKElOU1RBTExfRElSRUNUT1JZKSAkKE9DQU1MX1BLR0RJUikKKwlmb3IgZmlsZSBpbiAkKE9DQU1MX0ZJTEVTKTsgZG8gJChJTlNUQUxMKSAkJGZpbGUgJChPQ0FNTF9QS0dESVIpOyBkb25lCisJJChJTlNUQUxMX0RJUkVDVE9SWSkgJChPQ0FNTF9TVFVCRElSKQorCVsgISAtZiAiJChPQ0FNTF9QS0dESVIpLyQoT0NBTUxfU1RVQikiIF0gfHwgbXYgJChPQ0FNTF9QS0dESVIpLyQoT0NBTUxfU1RVQikgJChPQ0FNTF9TVFVCRElSKQorCWVjaG8gPiQoT0NBTUxfU1RVQkRJUikvJChPQ0FNTF9PV05FUikgJChPQ0FNTF9MSUIpCisKK09DQU1MX0xEQ09ORiA9ICQoT0NBTUxfREVTVERJUikvbGQuY29uZgoraW5zdGFsbC13aXRoLWZpbmRsaWI6CisJJChJTlNUQUxMX0RJUkVDVE9SWSkgJChPQ0FNTF9ERVNURElSKQorCVsgISAtZCAiJChPQ0FNTF9ERVNURElSKS8kKE9DQU1MX0xJQikiIF0gfHwgXAorCSQoT0NBTUxGSU5EKSByZW1vdmUgLWRlc3RkaXIgIiQoT0NBTUxfREVTVERJUikiICQoT0NBTUxfTElCKQorCXNldCAtLSAtZGVzdGRpciAiJChPQ0FNTF9ERVNURElSKSI7IFwKKwlbIC1mICIkKE9DQU1MX0xEQ09ORikiIF0gJiYgc2V0IC0tICIkJHtAfSIgLWxkY29uZiAiJChPQ0FNTF9MRENPTkYpIiB8fCBzZXQgLS0gIiQke0B9IiAtbGRjb25mIGlnbm9yZTsgXAorCSQoT0NBTUxGSU5EKSBpbnN0YWxsICIkJHtAfSIgJChPQ0FNTF9MSUIpICQoT0NBTUxfRklMRVMpIAorCit1bmluc3RhbGw6ICQoT0NBTUxfVU5JTlNUQUxMX1RBUkdFVCkKKwordW5pbnN0YWxsLXdpdGhvdXQtZmluZGxpYjoKKwktcm0gLWYgLXIgLS0gJChPQ0FNTF9QS0dESVIpCisJLXJtIC1mIC0tICQoT0NBTUxfU1RVQkRJUikvJChPQ0FNTF9TVFVCKQorCS1ybSAtZiAtLSAkKE9DQU1MX1NUVUJESVIpLyQoT0NBTUxfT1dORVIpCisKK3VuaW5zdGFsbC13aXRoLWZpbmRsaWI6CisJLSQoT0NBTUxGSU5EKSByZW1vdmUgLWRlc3RkaXIgIiQoT0NBTUxfREVTVERJUikiICQoT0NBTUxfTElCKQorCmRpZmYgLS1naXQgYS9CaW5kaW5ncy9PQ2FtbC9iaW5kaW5ncy5tNCBiL0JpbmRpbmdzL09DYW1sL2JpbmRpbmdzLm00Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIyMDRiZWMKLS0tIC9kZXYvbnVsbAorKysgYi9CaW5kaW5ncy9PQ2FtbC9iaW5kaW5ncy5tNApAQCAtMCwwICsxLDE1NiBAQAorIyBhdXRvY29uZiBpbnB1dCBmb3IgT2JqZWN0aXZlIENhbWwgcHJvZ3JhbXMKKyMgQ29weXJpZ2h0IChDKSAyMDAxIEplYW4tQ2hyaXN0b3BoZSBGaWxsacOidHJlCisjICAgZnJvbSBhIGZpcnN0IHNjcmlwdCBieSBHZW9yZ2VzIE1hcmlhbm8gCisjIAorIyBNb2RpZmllZCB0byBiZSBhbiBhdXRvY29uZiBtNCBmdW5jdGlvbiBpbiAyMDA2CisjIGZvciBCUkxUVFkgW2h0dHA6Ly9icmx0dHkuYXBwL10KKyMgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPgorIyAKKyMgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorIyBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworIyBMaWNlbnNlIHZlcnNpb24gMiwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjIAorIyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgorIyAKKyMgU2VlIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBmb3IgbW9yZSBkZXRhaWxzCisjIChlbmNsb3NlZCBpbiB0aGUgZmlsZSBMR1BMKS4KKworIyB0aGUgc2NyaXB0IGdlbmVyYXRlZCBieSBhdXRvY29uZiBmcm9tIHRoaXMgaW5wdXQgd2lsbCBzZXQgdGhlIGZvbGxvd2luZworIyB2YXJpYWJsZXM6CisjICAgT0NBTUxDICAgICAgICAib2NhbWxjIiBpZiBwcmVzZW50IGluIHRoZSBwYXRoLCBvciBhIGZhaWx1cmUKKyMgICAgICAgICAgICAgICAgIG9yICJvY2FtbGMub3B0IiBpZiBwcmVzZW50IHdpdGggc2FtZSB2ZXJzaW9uIG51bWJlciBhcyBvY2FtbGMKKyMgICBPQ0FNTE9QVCAgICAgICJvY2FtbG9wdCIgKG9yICJvY2FtbG9wdC5vcHQiIGlmIHByZXNlbnQpLCBvciAibm8iCisjICAgT0NBTUxNS0xJQiAgICAgICJvY2FtbGttbGliIiwgb3IgIm5vIgorIyAgIE9DQU1MQkVTVCAgICAgZWl0aGVyICJieXRlIiBpZiBubyBuYXRpdmUgY29tcGlsZXIgd2FzIGZvdW5kLCAKKyMgICAgICAgICAgICAgICAgIG9yICJvcHQiIG90aGVyd2lzZQorIyAgIE9DQU1MREVQICAgICAgIm9jYW1sZGVwIgorIyAgIE9DQU1MTEVYICAgICAgIm9jYW1sbGV4IiAob3IgIm9jYW1sbGV4Lm9wdCIgaWYgcHJlc2VudCkKKyMgICBPQ0FNTFlBQ0MgICAgICJvY2FtbHlhYyIKKyMgICBPQ0FNTExJQiAgICAgIHRoZSBwYXRoIHRvIHRoZSBvY2FtbCBzdGFuZGFyZCBsaWJyYXJ5CisjICAgT0NBTUxWRVJTSU9OICB0aGUgb2NhbWwgdmVyc2lvbiBudW1iZXIKKyMgICBPQ0FNTFdFQiAgICAgICJvY2FtbHdlYiIgKG5vdCBtYW5kYXRvcnkpCisjICAgT0NBTUxXSU4zMiAgICAieWVzIi8ibm8iIGRlcGVuZGluZyBvbiBTeXMub3NfdHlwZSA9ICJXaW4zMiIKKworQUNfREVGVU4oW0JSTFRUWV9PQ0FNTF9CSU5ESU5HU10sIFtkbmwKKyMgQ2hlY2sgZm9yIE9jYW1sIGNvbXBpbGVycworCisjIHdlIGZpcnN0IGxvb2sgZm9yIG9jYW1sYyBpbiB0aGUgcGF0aDsgaWYgbm90IHByZXNlbnQsIHdlIGZhaWwKK0FDX0NIRUNLX1BST0coT0NBTUxDLG9jYW1sYyxvY2FtbGMsbm8pCitpZiB0ZXN0ICIkT0NBTUxDIiA9IG5vIDsgdGhlbgorICAgIEFDX01TR19XQVJOKFtDYW5ub3QgZmluZCBvY2FtbGMuXSkKKyAgICBPQ0FNTF9PSz1mYWxzZQorZWxzZQorICAgICMgY2hlY2tpbmcgZm9yIG9jYW1sbWtsaWIKKyAgICBBQ19DSEVDS19QUk9HKE9DQU1MTUtMSUIsb2NhbWxta2xpYixvY2FtbG1rbGliLG5vKQorICAgIGlmIHRlc3QgIiRPQ0FNTE1LTElCIiA9IG5vIDsgdGhlbgorICAgICAgICBBQ19NU0dfV0FSTihbQ2Fubm90IGZpbmQgb2NhbWxta2xpYi5dKQorICAgICAgICBPQ0FNTF9PSz1mYWxzZQorICAgIGVsc2UgICAgCisgICAgICAgIE9DQU1MX09LPXRydWUKKyAgICAgICAgIyB3ZSBleHRyYWN0IE9jYW1sIHZlcnNpb24gbnVtYmVyIGFuZCBsaWJyYXJ5IHBhdGgKKyAgICAgICAgT0NBTUxWRVJTSU9OPWAkT0NBTUxDIC12ZXJzaW9uYAorICAgICAgICBBQ19NU0dfTk9USUNFKFtPQ2FtbCB2ZXJzaW9uIGlzICRPQ0FNTFZFUlNJT05dKQorCisgICAgICAgIE9DQU1MTElCPWAkT0NBTUxDIC13aGVyZWAKKyAgICAgICAgQUNfTVNHX05PVElDRShbT0NhbWwgbGlicmFyeSBwYXRoIGlzICRPQ0FNTExJQl0pCisKKyAgICAgICAgIyB0aGVuIHdlIGxvb2sgZm9yIG9jYW1sb3B0OyBpZiBub3QgcHJlc2VudCwgd2UgaXNzdWUgYSB3YXJuaW5nCisgICAgICAgICMgaWYgdGhlIHZlcnNpb24gaXMgbm90IHRoZSBzYW1lLCB3ZSBhbHNvIGRpc2NhcmQgaXQKKyAgICAgICAgIyB3ZSBzZXQgT0NBTUxCRVNUIHRvICJvcHQiIG9yICJieXRlIiwgd2hldGhlciBvY2FtbG9wdCBpcyBhdmFpbGFibGUgb3Igbm90CisgICAgICAgIEFDX0NIRUNLX1BST0coT0NBTUxPUFQsb2NhbWxvcHQsb2NhbWxvcHQsbm8pCisgICAgICAgIE9DQU1MQkVTVD1ieXRlCisgICAgICAgIE9DQU1MX05DTElCPQorICAgICAgICBpZiB0ZXN0ICIkT0NBTUxPUFQiID0gbm8gOyB0aGVuCisgICAgICAgICAgICBBQ19NU0dfV0FSTihbQ2Fubm90IGZpbmQgb2NhbWxvcHQ7IGJ5dGVjb2RlIGNvbXBpbGF0aW9uIG9ubHkuXSkKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgQUNfTVNHX0NIRUNLSU5HKG9jYW1sb3B0IHZlcnNpb24pCisgICAgICAgICAgICBUTVBWRVJTSU9OPWAkT0NBTUxPUFQgLXYgfCBzZWQgLW4gLWUgJ3N8Lip2ZXJzaW9uICpcKC4qXCkkfFwxfHAnIGAKKyAgICAgICAgICAgIGlmIHRlc3QgIiRUTVBWRVJTSU9OIiAhPSAiJE9DQU1MVkVSU0lPTiIgOyB0aGVuCisgICAgICAgICAgICAgICAgQUNfTVNHX1JFU1VMVChkaWZmZXJzIGZyb20gb2NhbWxjOyBvY2FtbG9wdCBkaXNjYXJkZWQuKQorICAgICAgICAgICAgICAgIE9DQU1MT1BUPW5vCisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgQUNfTVNHX1JFU1VMVChvaykKKyAgICAgICAgICAgICAgICBPQ0FNTEJFU1Q9b3B0CisgICAgICAgICAgICAgICAgT0NBTUxfTkNMSUI9IlwkKE9DQU1MX0xJQikuY214YSIKKyAgICAgICAgICAgIGZpCisgICAgICAgIGZpCisKKyAgICAgICAgIyBjaGVja2luZyBmb3Igb2NhbWxjLm9wdAorICAgICAgICBBQ19DSEVDS19QUk9HKE9DQU1MQ0RPVE9QVCxvY2FtbGMub3B0LG9jYW1sYy5vcHQsbm8pCisgICAgICAgIGlmIHRlc3QgIiRPQ0FNTENET1RPUFQiICE9IG5vIDsgdGhlbgorICAgICAgICAgICAgQUNfTVNHX0NIRUNLSU5HKG9jYW1sYy5vcHQgdmVyc2lvbikKKyAgICAgICAgICAgIFRNUFZFUlNJT049YCRPQ0FNTENET1RPUFQgLXYgfCBzZWQgLW4gLWUgJ3N8Lip2ZXJzaW9uICpcKC4qXCkkfFwxfHAnIGAKKyAgICAgICAgICAgIGlmIHRlc3QgIiRUTVBWRVJTSU9OIiAhPSAiJE9DQU1MVkVSU0lPTiIgOyB0aGVuCisgICAgICAgICAgICAgICAgQUNfTVNHX1JFU1VMVChkaWZmZXJzIGZyb20gb2NhbWxjOyBvY2FtbGMub3B0IGRpc2NhcmRlZC4pCisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgQUNfTVNHX1JFU1VMVChvaykKKyAgICAgICAgICAgICAgICBPQ0FNTEM9JE9DQU1MQ0RPVE9QVAorICAgICAgICAgICAgZmkKKyAgICAgICAgZmkKKworICAgICAgICAjIGNoZWNraW5nIGZvciBvY2FtbG9wdC5vcHQKKyAgICAgICAgaWYgdGVzdCAiJE9DQU1MT1BUIiAhPSBubyA7IHRoZW4KKyAgICAgICAgICAgIEFDX0NIRUNLX1BST0coT0NBTUxPUFRET1RPUFQsb2NhbWxvcHQub3B0LG9jYW1sb3B0Lm9wdCxubykKKyAgICAgICAgICAgIGlmIHRlc3QgIiRPQ0FNTE9QVERPVE9QVCIgIT0gbm8gOyB0aGVuCisgICAgICAgICAgICAgICAgQUNfTVNHX0NIRUNLSU5HKG9jYW1sYy5vcHQgdmVyc2lvbikKKyAgICAgICAgICAgICAgICBUTVBWRVI9YCRPQ0FNTE9QVERPVE9QVCAtdiB8IHNlZCAtbiAtZSAnc3wuKnZlcnNpb24gKlwoLipcKSR8XDF8cCcgYAorICAgICAgICAgICAgICAgIGlmIHRlc3QgIiRUTVBWRVIiICE9ICIkT0NBTUxWRVJTSU9OIiA7IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgQUNfTVNHX1JFU1VMVChkaWZmZXJzIGZyb20gb2NhbWxjOyBvY2FtbG9wdC5vcHQgZGlzY2FyZGVkLikKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIEFDX01TR19SRVNVTFQob2spCisgICAgICAgICAgICAgICAgICAgIE9DQU1MT1BUPSRPQ0FNTE9QVERPVE9QVAorICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICBmaQorICAgICAgICBmaQorCisgICAgICAgICMgcGxhdGZvcm0KKyAgICAgICAgQUNfTVNHX0NIRUNLSU5HKHBsYXRmb3JtKQorICAgICAgICBpZiBlY2hvICJsZXQgXyA9IFN5cy5vc190eXBlOzsiIHwgb2NhbWwgfCBncmVwIC1xIFdpbjMyOyB0aGVuCisgICAgICAgICAgICBBQ19NU0dfUkVTVUxUKFdpbjMyKQorICAgICAgICAgICAgT0NBTUxXSU4zMj15ZXMKKyAgICAgICAgICAgIE9DQU1MX0NMSUJTPWxpYmJybGFwaV9zdHVicy5hCisgICAgICAgIGVsaWYgZWNobyAibGV0IF8gPSBTeXMub3NfdHlwZTs7IiB8IG9jYW1sIHwgZ3JlcCAtcSBDeWd3aW47IHRoZW4KKyAgICAgICAgICAgIEFDX01TR19SRVNVTFQoQ3lnd2luKQorICAgICAgICAgICAgT0NBTUxXSU4zMj15ZXMKKyAgICAgICAgICAgIE9DQU1MX0NMSUJTPWxpYmJybGFwaV9zdHVicy5hCisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIEFDX01TR19SRVNVTFQoVW5peCkKKyAgICAgICAgICAgIE9DQU1MV0lOMzI9bm8KKyAgICAgICAgICAgIE9DQU1MX0NMSUJTPSJsaWJicmxhcGlfc3R1YnMuYSBkbGxicmxhcGlfc3R1YnMuc28iCisgICAgICAgIGZpCisgICAgCisgICAgICAgICMgY2hlY2tpbmcgZm9yIG9jYW1sZmluZGxpYgorICAgICAgICBBQ19DSEVDS19QUk9HKE9DQU1MRklORCxvY2FtbGZpbmQsb2NhbWxmaW5kLG5vKQorICAgICAgICBpZiB0ZXN0ICIkT0NBTUxGSU5EIiA9IG9jYW1sZmluZDsgdGhlbgorICAgICAgICAgICAgT0NBTUxDPSdvY2FtbGZpbmQgb2NhbWxjJworICAgICAgICAgICAgaWYgdGVzdCAiJE9DQU1MT1BUIiA9IG9jYW1sb3B0OyB0aGVuCisgICAgICAgICAgICAgICAgT0NBTUxPUFQ9J29jYW1sZmluZCBvY2FtbG9wdCcKKyAgICAgICAgICAgIGZpCisgICAgICAgICAgICBPQ0FNTF9JTlNUQUxMX1RBUkdFVD1pbnN0YWxsLXdpdGgtZmluZGxpYgorICAgICAgICAgICAgT0NBTUxfVU5JTlNUQUxMX1RBUkdFVD11bmluc3RhbGwtd2l0aG91dC1maW5kbGliCisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIE9DQU1MX0lOU1RBTExfVEFSR0VUPWluc3RhbGwtd2l0aG91dC1maW5kbGliCisgICAgICAgICAgICBPQ0FNTF9VTklOU1RBTExfVEFSR0VUPXVuaW5zdGFsbC13aXRob3V0LWZpbmRsaWIKKyAgICAgICAgICAgIEFDX01TR19XQVJOKFtDYW5ub3QgZmluZCBvY2FtbGZpbmQuXSkKKyAgICAgICAgZmkKKyAgICBmaQorZmkKKworIyBzdWJzdGl0dXRpb25zIHRvIHBlcmZvcm0KK0FDX1NVQlNUKE9DQU1MQykKK0FDX1NVQlNUKE9DQU1MT1BUKQorQUNfU1VCU1QoT0NBTUxNS0xJQikKK0FDX1NVQlNUKE9DQU1MQkVTVCkKK0FDX1NVQlNUKE9DQU1MVkVSU0lPTikKK0FDX1NVQlNUKE9DQU1MTElCKQorQUNfU1VCU1QoT0NBTUxXSU4zMikKK0FDX1NVQlNUKE9DQU1MX0NMSUJTKQorQUNfU1VCU1QoT0NBTUxfTkNMSUIpCitBQ19TVUJTVChPQ0FNTEZJTkQpCitBQ19TVUJTVChPQ0FNTF9JTlNUQUxMX1RBUkdFVCkKK0FDX1NVQlNUKE9DQU1MX1VOSU5TVEFMTF9UQVJHRVQpCisKK0FDX1NVQlNUKFtPQ0FNTF9PS10pCitdKQpkaWZmIC0tZ2l0IGEvQmluZGluZ3MvT0NhbWwvYnJsYXBpX3N0dWJzLmMgYi9CaW5kaW5ncy9PQ2FtbC9icmxhcGlfc3R1YnMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OTRiODI2Ci0tLSAvZGV2L251bGwKKysrIGIvQmluZGluZ3MvT0NhbWwvYnJsYXBpX3N0dWJzLmMKQEAgLTAsMCArMSw1MTAgQEAKKy8qCisgKiBsaWJicmxhcGkgLSBBIGxpYnJhcnkgcHJvdmlkaW5nIGFjY2VzcyB0byBicmFpbGxlIHRlcm1pbmFscyBmb3IgYXBwbGljYXRpb25zLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNS0yMDIzIGJ5CisgKiAgIFPDqWJhc3RpZW4gSGluZGVyZXIgPFNlYmFzdGllbi5IaW5kZXJlckBlbnMtbHlvbi5vcmc+CisgKiAgIFNhbXVlbCBUaGliYXVsdCA8U2FtdWVsLlRoaWJhdWx0QGVucy1seW9uLm9yZz4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogbGliYnJsYXBpIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0ZGRlZi5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisKKyNkZWZpbmUgQ0FNTF9OQU1FX1NQQUNFIC8qIERvbid0IGltcG9ydCBvbGQgbmFtZXMgKi8KKyNpbmNsdWRlIDxjYW1sL21sdmFsdWVzLmg+IC8qIGRlZmluaXRpb24gb2YgdGhlIHZhbHVlIHR5cGUsIGFuZCBjb252ZXJzaW9uIG1hY3JvcyAqLworI2luY2x1ZGUgPGNhbWwvbWVtb3J5Lmg+IC8qIG1pc2NlbGxhbmVvdXMgbWVtb3J5LXJlbGF0ZWQgZnVuY3Rpb25zIGFuZCBtYWNyb3MgKGZvciBHQyBpbnRlcmZhY2UsIGluLXBsYWNlIG1vZGlmaWNhdGlvbiBvZiBzdHJ1Y3R1cmVzLCBldGMpLiAqLworI2luY2x1ZGUgPGNhbWwvYWxsb2MuaD4gLyogYWxsb2NhdGlvbiBmdW5jdGlvbnMgKHRvIGNyZWF0ZSBzdHJ1Y3R1cmVkIENhbWwgb2JqZWN0cykgKi8KKyNpbmNsdWRlIDxjYW1sL2ZhaWwuaD4gLyogZnVuY3Rpb25zIGZvciByYWlzaW5nIGV4Y2VwdGlvbnMgKi8KKyNpbmNsdWRlIDxjYW1sL2NhbGxiYWNrLmg+IC8qIGNhbGxiYWNrIGZyb20gQyB0byBDYW1sICovCisjaW5jbHVkZSA8Y2FtbC9jdXN0b20uaD4gLyogb3BlcmF0aW9ucyBvbiBjdXN0b20gYmxvY2tzICovCisjaW5jbHVkZSA8Y2FtbC9pbnRleHQuaD4gLyogb3BlcmF0aW9ucyBmb3Igd3JpdGluZyB1c2VyLWRlZmluZWQgc2VyaWFsaXphdGlvbiBhbmQgZGVzZXJpYWxpemF0aW9uIGZ1bmN0aW9ucyBmb3IgY3VzdG9tIGJsb2NrcyAqLworI2RlZmluZSBCUkxBUElfTk9fREVQUkVDQVRFRAorI2luY2x1ZGUgImJybGFwaS5oIgorI2luY2x1ZGUgImJybGFwaV9wcm90b2NvbC5oIgorCisjaWZuZGVmIE1JTgorI2RlZmluZSBNSU4oeCwgeSkgKHg8eSk/KHgpOih5KQorI2VuZGlmIC8qIE1JTiAqLworCitleHRlcm4gdmFsdWUgdW5peF9lcnJvcl9vZl9jb2RlIChpbnQgZXJyY29kZSk7IC8qIFRPIEJFIFJFTU9WRUQgKi8KKworLyogVGhlIGZvbGxvd2luZyBtYWNyb3MgY2FsbCBhIEJybEFQSSBmdW5jdGlvbiAqLworLyogVGhlIGZpcnN0IG9uZSBqdXN0IGNhbGxzIHRoZSBmdW5jdGlvbiwgd2hlcmVhcyAqLworLyogdGhlIHNlY29uZCBvbmUgYWxzbyBjaGVja3MgdGhlIGZ1bmN0aW9uJ3MgcmV0dXJuIGNvZGUgYW5kIHJhaXNlcyAqLworLyogYW4gZXhjZXB0aW9uIGlmIHRoaXMgY29kZSBpcyAtMSAqLworLyogVGhlIG1hY3JvcyBkZWNpZGUgd2hpY2ggdmVyc2lvbiBvZiBhIGJybGFwaSBmdW5jdGlvbiBzaG91bGQgYmUgY2FsbGVkICovCisvKiBkZXBlbmRpbmcgb24gd2hldGhlciB0aGUgaGFuZGxlIHZhbHVlIGlzIE5vbmUgb3IgU29tZSByZWFsSGFuZGxlICovCisKKyNkZWZpbmUgYnJsYXBpKGZ1bmN0aW9uLCAuLi4pIFwKK2RvIHsgXAorICBpZiAoSXNfbG9uZyhoYW5kbGUpKSBicmxhcGlfICMjIGZ1bmN0aW9uIChfX1ZBX0FSR1NfXyk7IFwKKyAgZWxzZSBicmxhcGlfXyAjIyBmdW5jdGlvbiAoKGJybGFwaV9oYW5kbGVfdCAqKSBEYXRhX2N1c3RvbV92YWwoRmllbGQoaGFuZGxlLCAwKSksICMjIF9fVkFfQVJHU19fKTsgXAorfSB3aGlsZSAoMCkKKworI2RlZmluZSBicmxhcGlDaGVja0Vycm9yKGZ1bmN0aW9uLCAuLi4pIFwKK2RvIHsgXAorICBpbnQgcmVzXzsgXAorICBpZiAoSXNfbG9uZyhoYW5kbGUpKSByZXNfID0gYnJsYXBpXyAjI2Z1bmN0aW9uIChfX1ZBX0FSR1NfXyk7IFwKKyAgZWxzZSByZXNfID0gYnJsYXBpX18gIyNmdW5jdGlvbiAoKGJybGFwaV9oYW5kbGVfdCAqKSBEYXRhX2N1c3RvbV92YWwoRmllbGQoaGFuZGxlLCAwKSksICMjIF9fVkFfQVJHU19fKTsgXAorICBpZiAocmVzXz09LTEpIHJhaXNlX2JybGFwaV9lcnJvcigpOyBcCit9IHdoaWxlICgwKQorCisjZGVmaW5lIGJybGFwaUNoZWNrRXJyb3JXaXRoQ29kZShmdW5jdGlvbiwgcmV0LCAuLi4pIFwKK2RvIHsgXAorICBpbnQgcmVzXzsgXAorICBpZiAoSXNfbG9uZyhoYW5kbGUpKSByZXNfID0gYnJsYXBpXyAjI2Z1bmN0aW9uIChfX1ZBX0FSR1NfXyk7IFwKKyAgZWxzZSByZXNfID0gYnJsYXBpX18gIyNmdW5jdGlvbiAoKGJybGFwaV9oYW5kbGVfdCAqKSBEYXRhX2N1c3RvbV92YWwoRmllbGQoaGFuZGxlLCAwKSksICMjIF9fVkFfQVJHU19fKTsgXAorICBpZiAocmVzXz09LTEpIHJhaXNlX2JybGFwaV9lcnJvcigpOyBcCisgICgqKGludCAqKXJldCkgPSByZXNfOyBcCit9IHdoaWxlICgwKQorCitzdGF0aWMgaW50IGNvbXBhcmVIYW5kbGUodmFsdWUgaDEsIHZhbHVlIGgyKQoreworICBDQU1McGFyYW0yKGgxLCBoMik7CisgIENBTUxyZXR1cm4obWVtY21wKERhdGFfY3VzdG9tX3ZhbChoMSksIERhdGFfY3VzdG9tX3ZhbChoMiksIGJybGFwaV9nZXRIYW5kbGVTaXplKCkpKTsKK30KKworc3RhdGljIHN0cnVjdCBjdXN0b21fb3BlcmF0aW9ucyBjdXN0b21PcGVyYXRpb25zID0geworICAuaWRlbnRpZmllciA9ICJCcmxBUEkgaGFuZGxlIiwKKyAgLmZpbmFsaXplID0gY3VzdG9tX2ZpbmFsaXplX2RlZmF1bHQsCisgIC5jb21wYXJlID0gY29tcGFyZUhhbmRsZSwKKyAgLmhhc2ggPSBjdXN0b21faGFzaF9kZWZhdWx0LCAvKiBGSVhNRTogcHJvdmlkZSBhIGdlbnVpbmUgaGFzaGluZyBmdW5jdGlvbiAqLworICAuc2VyaWFsaXplID0gY3VzdG9tX3NlcmlhbGl6ZV9kZWZhdWx0LAorICAuZGVzZXJpYWxpemUgPSBjdXN0b21fZGVzZXJpYWxpemVfZGVmYXVsdCwKK307CisKKy8qIEZ1bmN0aW9uIDogY29uc3RyQ2FtbEVycm9yICovCisvKiBDb252ZXJ0cyBhIGJybGFwaV9lcnJvcl90IGludG8gaXRzIENhbWwgcmVwcmVzZW50YXRpb24gKi8KK3N0YXRpYyB2YWx1ZSBjb25zdHJDYW1sRXJyb3IoY29uc3QgYnJsYXBpX2Vycm9yX3QgKmVycikKK3sKKyAgdmFsdWUgY2FtbEVycm9yOworICBjYW1sRXJyb3IgPSBjYW1sX2FsbG9jX3R1cGxlKDQpOworICBTdG9yZV9maWVsZChjYW1sRXJyb3IsIDAsIFZhbF9pbnQoZXJyLT5icmxlcnJubykpOworICBTdG9yZV9maWVsZChjYW1sRXJyb3IsIDEsIFZhbF9pbnQoZXJyLT5saWJjZXJybm8pKTsKKyAgU3RvcmVfZmllbGQoY2FtbEVycm9yLCAyLCBWYWxfaW50KGVyci0+Z2FpZXJybm8pKTsKKyAgaWYgKGVyci0+ZXJyZnVuIT1OVUxMKQorICAgIFN0b3JlX2ZpZWxkKGNhbWxFcnJvciwgMywgY2FtbF9jb3B5X3N0cmluZyhlcnItPmVycmZ1bikpOworICBlbHNlCisgICAgU3RvcmVfZmllbGQoY2FtbEVycm9yLCAzLCBjYW1sX2NvcHlfc3RyaW5nKCIiKSk7CisgIHJldHVybiBjYW1sRXJyb3I7Cit9CisKK0NBTUxwcmltIHZhbHVlIGJybGFwaW1sX2Vycm9yQ29kZV9vZl9lcnJvcih2YWx1ZSBjYW1sRXJyb3IpCit7CisgIENBTUxwYXJhbTEoY2FtbEVycm9yKTsKKyAgQ0FNTGxvY2FsMShyZXN1bHQpOworICBzd2l0Y2ggKEludF92YWwoRmllbGQoY2FtbEVycm9yLCAwKSkpIHsKKyAgICBjYXNlIEJSTEFQSV9FUlJPUl9OT01FTTogcmVzdWx0ID0gVmFsX2ludCgwKTsgYnJlYWs7CisgICAgY2FzZSBCUkxBUElfRVJST1JfVFRZQlVTWTogcmVzdWx0ID0gVmFsX2ludCgxKTsgYnJlYWs7CisgICAgY2FzZSBCUkxBUElfRVJST1JfREVWSUNFQlVTWTogcmVzdWx0ID0gVmFsX2ludCgyKTsgYnJlYWs7CisgICAgY2FzZSBCUkxBUElfRVJST1JfVU5LTk9XTl9JTlNUUlVDVElPTjogcmVzdWx0ID0gVmFsX2ludCgzKTsgYnJlYWs7CisgICAgY2FzZSBCUkxBUElfRVJST1JfSUxMRUdBTF9JTlNUUlVDVElPTjogcmVzdWx0ID0gVmFsX2ludCg0KTsgYnJlYWs7CisgICAgY2FzZSBCUkxBUElfRVJST1JfSU5WQUxJRF9QQVJBTUVURVI6IHJlc3VsdCA9IFZhbF9pbnQoNSk7IGJyZWFrOworICAgIGNhc2UgQlJMQVBJX0VSUk9SX0lOVkFMSURfUEFDS0VUOiByZXN1bHQgPSBWYWxfaW50KDYpOyBicmVhazsKKyAgICBjYXNlIEJSTEFQSV9FUlJPUl9DT05OUkVGVVNFRDogcmVzdWx0ID0gVmFsX2ludCg3KTsgYnJlYWs7CisgICAgY2FzZSBCUkxBUElfRVJST1JfT1BOT1RTVVBQOiByZXN1bHQgPSBWYWxfaW50KDgpOyBicmVhazsKKyAgICBjYXNlIEJSTEFQSV9FUlJPUl9HQUlFUlI6IHsKKyAgICAgIHJlc3VsdCA9IGNhbWxfYWxsb2MoMSwgMCk7CisgICAgICBTdG9yZV9maWVsZChyZXN1bHQsIDAsIFZhbF9pbnQoRmllbGQoY2FtbEVycm9yLCAyKSkpOworICAgIH07IGJyZWFrOworICAgIGNhc2UgQlJMQVBJX0VSUk9SX0xJQkNFUlI6IHsKKyAgICAgIHJlc3VsdCA9IGNhbWxfYWxsb2MoMSwgMSk7CisgICAgICBTdG9yZV9maWVsZChyZXN1bHQsIDAsIHVuaXhfZXJyb3Jfb2ZfY29kZShJbnRfdmFsKEZpZWxkKGNhbWxFcnJvciwgMSkpKSk7CisgICAgfTsgYnJlYWs7CisgICAgY2FzZSBCUkxBUElfRVJST1JfVU5LTk9XTlRUWTogcmVzdWx0ID0gVmFsX2ludCg5KTsgYnJlYWs7CisgICAgY2FzZSBCUkxBUElfRVJST1JfUFJPVE9DT0xfVkVSU0lPTjogcmVzdWx0ID0gVmFsX2ludCgxMCk7IGJyZWFrOworICAgIGNhc2UgQlJMQVBJX0VSUk9SX0VPRjogcmVzdWx0ID0gVmFsX2ludCgxMSk7IGJyZWFrOworICAgIGNhc2UgQlJMQVBJX0VSUk9SX0VNUFRZS0VZOiByZXN1bHQgPSBWYWxfaW50KDEyKTsgYnJlYWs7IAorICAgIGNhc2UgQlJMQVBJX0VSUk9SX0RSSVZFUkVSUk9SOiByZXN1bHQgPSBWYWxfaW50KDEzKTsgYnJlYWs7CisgICAgY2FzZSBCUkxBUElfRVJST1JfQVVUSEVOVElDQVRJT046IHJlc3VsdCA9IFZhbF9pbnQoMTQpOyBicmVhazsKKyAgICBkZWZhdWx0OiB7CisgICAgICByZXN1bHQgPSBjYW1sX2FsbG9jKDEsIDIpOworICAgICAgU3RvcmVfZmllbGQocmVzdWx0LCAwLCBWYWxfaW50KEZpZWxkKGNhbWxFcnJvciwgMCkpKTsKKyAgICB9CisgIH0KKyAgQ0FNTHJldHVybihyZXN1bHQpOworfQorCisvKiBGdW5jdGlvbiA6IHJhaXNlX2JybGFwaV9lcnJvciAqLworLyogUmFpc2VzIHRoZSBCcmxhcGlfZXJyb3IgZXhjZXB0aW9uICovCitzdGF0aWMgdm9pZCByYWlzZV9icmxhcGlfZXJyb3Iodm9pZCkKK3sKKyAgc3RhdGljIGNvbnN0IHZhbHVlICpleGNlcHRpb24gPSBOVUxMOworICBDQU1McGFyYW0wKCk7CisgIENBTUxsb2NhbDEocmVzKTsKKyAgaWYgKGV4Y2VwdGlvbj09TlVMTCkgZXhjZXB0aW9uID0gY2FtbF9uYW1lZF92YWx1ZSgiQnJsYXBpX2Vycm9yIik7CisgIHJlcyA9IGNhbWxfYWxsb2MoMiwwKTsKKyAgU3RvcmVfZmllbGQocmVzLCAwLCAqZXhjZXB0aW9uKTsKKyAgU3RvcmVfZmllbGQocmVzLCAxLCBjb25zdHJDYW1sRXJyb3IoJmJybGFwaV9lcnJvcikpOworICBjYW1sX3JhaXNlKHJlcyk7CisgIENBTUxyZXR1cm4wOworfQorCisvKiBGdW5jdGlvbiA6IHJhaXNlX2JybGFwaV9leGNlcHRpb24gKi8KKy8qIFJhaXNlcyBCcmxhcGlfZXhjZXB0aW9uICovCitzdGF0aWMgdm9pZCBCUkxBUElfU1REQ0FMTCByYWlzZV9icmxhcGlfZXhjZXB0aW9uKGludCBlcnIsIGJybGFwaV9wYWNrZXRUeXBlX3QgdHlwZSwgY29uc3Qgdm9pZCAqcGFja2V0LCBzaXplX3Qgc2l6ZSkKK3sKKyAgc3RhdGljIGNvbnN0IHZhbHVlICpleGNlcHRpb24gPSBOVUxMOworICBpbnQgaTsKKyAgQ0FNTHBhcmFtMCgpOworICBDQU1MbG9jYWwyKHN0ciwgcmVzKTsKKyAgc3RyID0gY2FtbF9hbGxvY19zdHJpbmcoc2l6ZSk7CisgIGZvciAoaT0wOyBpPHNpemU7IGkrKykgQnl0ZShzdHIsIGkpID0gKChjaGFyICopIHBhY2tldClbaV07CisgIGlmIChleGNlcHRpb249PU5VTEwpIGV4Y2VwdGlvbiA9IGNhbWxfbmFtZWRfdmFsdWUoIkJybGFwaV9leGNlcHRpb24iKTsKKyAgcmVzID0gY2FtbF9hbGxvYyAoNCwgMCk7CisgIFN0b3JlX2ZpZWxkKHJlcywgMCwgKmV4Y2VwdGlvbik7CisgIFN0b3JlX2ZpZWxkKHJlcywgMSwgVmFsX2ludChlcnIpKTsKKyAgU3RvcmVfZmllbGQocmVzLCAyLCBjYW1sX2NvcHlfaW50MzIodHlwZSkpOworICBTdG9yZV9maWVsZChyZXMsIDMsIHN0cik7CisgIGNhbWxfcmFpc2UocmVzKTsKKyAgQ0FNTHJldHVybjA7Cit9CisKKy8qIGZ1bmN0aW9uIHBhY2tEb3RzICovCisvKiBDb252ZXJ0cyBDYW1sIGRvdHMgaW4gYnJsdHR5IGRvdHMgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBwYWNrRG90cyh2YWx1ZSBjYW1sRG90cywgdW5zaWduZWQgY2hhciAqZG90cywgaW50IHNpemUpCit7CisgIHVuc2lnbmVkIGludCBpOworICBmb3IgKGk9MDsgaTxzaXplOyBpKyspCisgICAgZG90c1tpXSA9IEludF92YWwoRmllbGQoY2FtbERvdHMsIGkpKTsKK30KKworQ0FNTHByaW0gdmFsdWUgYnJsYXBpbWxfb3BlbkNvbm5lY3Rpb24odmFsdWUgc2V0dGluZ3MpCit7CisgIENBTUxwYXJhbTEoc2V0dGluZ3MpOworICBDQU1MbG9jYWwyKHMsIHBhaXIpOworICBpbnQgcmVzOworICBicmxhcGlfY29ubmVjdGlvblNldHRpbmdzX3QgYnJsYXBpU2V0dGluZ3M7CisgIGJybGFwaVNldHRpbmdzLmF1dGggPSBTdHJpbmdfdmFsKEZpZWxkKHNldHRpbmdzLCAwKSk7CisgIGJybGFwaVNldHRpbmdzLmhvc3QgPSBTdHJpbmdfdmFsKEZpZWxkKHNldHRpbmdzLCAxKSk7CisgIHJlcyA9IGJybGFwaV9vcGVuQ29ubmVjdGlvbigmYnJsYXBpU2V0dGluZ3MsICZicmxhcGlTZXR0aW5ncyk7CisgIGlmIChyZXM8MCkgcmFpc2VfYnJsYXBpX2Vycm9yKCk7CisgIHMgPSBjYW1sX2FsbG9jX3R1cGxlKDIpOworICBTdG9yZV9maWVsZChzLCAwLCBjYW1sX2NvcHlfc3RyaW5nKGJybGFwaVNldHRpbmdzLmF1dGgpKTsKKyAgU3RvcmVfZmllbGQocywgMSwgY2FtbF9jb3B5X3N0cmluZyhicmxhcGlTZXR0aW5ncy5ob3N0KSk7CisgIHBhaXIgPSBjYW1sX2FsbG9jX3R1cGxlKDIpOworICBTdG9yZV9maWVsZChwYWlyLCAwLCBWYWxfaW50KHJlcykpOworICBTdG9yZV9maWVsZChwYWlyLCAxLCBzKTsKKyAgQ0FNTHJldHVybihwYWlyKTsKK30KKworQ0FNTHByaW0gdmFsdWUgYnJsYXBpbWxfb3BlbkNvbm5lY3Rpb25XaXRoSGFuZGxlKHZhbHVlIHNldHRpbmdzKQoreworICBDQU1McGFyYW0xKHNldHRpbmdzKTsKKyAgQ0FNTGxvY2FsMShoYW5kbGUpOworICBicmxhcGlfY29ubmVjdGlvblNldHRpbmdzX3QgYnJsYXBpU2V0dGluZ3M7CisgIGJybGFwaVNldHRpbmdzLmF1dGggPSBTdHJpbmdfdmFsKEZpZWxkKHNldHRpbmdzLCAwKSk7CisgIGJybGFwaVNldHRpbmdzLmhvc3QgPSBTdHJpbmdfdmFsKEZpZWxkKHNldHRpbmdzLCAxKSk7CisgIGhhbmRsZSA9IGNhbWxfYWxsb2NfY3VzdG9tKCZjdXN0b21PcGVyYXRpb25zLCBicmxhcGlfZ2V0SGFuZGxlU2l6ZSgpLCAwLCAxKTsKKyAgaWYgKGJybGFwaV9fb3BlbkNvbm5lY3Rpb24oRGF0YV9jdXN0b21fdmFsKGhhbmRsZSksICZicmxhcGlTZXR0aW5ncywgJmJybGFwaVNldHRpbmdzKTwwKSByYWlzZV9icmxhcGlfZXJyb3IoKTsKKyAgQ0FNTHJldHVybihoYW5kbGUpOworfQorCitDQU1McHJpbSB2YWx1ZSBicmxhcGltbF9jbG9zZUNvbm5lY3Rpb24odmFsdWUgaGFuZGxlLCB2YWx1ZSB1bml0KQoreworICBDQU1McGFyYW0yKGhhbmRsZSwgdW5pdCk7CisgIGJybGFwaShjbG9zZUNvbm5lY3Rpb24pOworICBDQU1McmV0dXJuKFZhbF91bml0KTsKK30KKworQ0FNTHByaW0gdmFsdWUgYnJsYXBpbWxfZ2V0RHJpdmVyTmFtZSh2YWx1ZSBoYW5kbGUsIHZhbHVlIHVuaXQpCit7CisgIENBTUxwYXJhbTIoaGFuZGxlLCB1bml0KTsKKyAgY2hhciBuYW1lW0JSTEFQSV9NQVhOQU1FTEVOR1RIXTsKKyAgYnJsYXBpQ2hlY2tFcnJvcihnZXREcml2ZXJOYW1lLCBuYW1lLCBzaXplb2YobmFtZSkpOworICBDQU1McmV0dXJuKGNhbWxfY29weV9zdHJpbmcobmFtZSkpOworfQorCitDQU1McHJpbSB2YWx1ZSBicmxhcGltbF9nZXRNb2RlbElkZW50aWZpZXIodmFsdWUgaGFuZGxlLCB2YWx1ZSB1bml0KQoreworICBDQU1McGFyYW0yKGhhbmRsZSwgdW5pdCk7CisgIGNoYXIgaWRlbnRpZmllcltCUkxBUElfTUFYTkFNRUxFTkdUSF07CisgIGJybGFwaUNoZWNrRXJyb3IoZ2V0TW9kZWxJZGVudGlmaWVyLCBpZGVudGlmaWVyLCBzaXplb2YoaWRlbnRpZmllcikpOworICBDQU1McmV0dXJuKGNhbWxfY29weV9zdHJpbmcoaWRlbnRpZmllcikpOworfQorCitDQU1McHJpbSB2YWx1ZSBicmxhcGltbF9nZXREaXNwbGF5U2l6ZSh2YWx1ZSBoYW5kbGUsIHZhbHVlIHVuaXQpCit7CisgIENBTUxwYXJhbTIoaGFuZGxlLCB1bml0KTsKKyAgQ0FNTGxvY2FsMShzaXplKTsKKyAgdW5zaWduZWQgaW50IHgsIHk7CisgIGJybGFwaUNoZWNrRXJyb3IoZ2V0RGlzcGxheVNpemUsICZ4LCAmeSk7CisgIHNpemUgPSBjYW1sX2FsbG9jX3R1cGxlKDIpOworICBTdG9yZV9maWVsZChzaXplLCAwLCBWYWxfaW50KHgpKTsKKyAgU3RvcmVfZmllbGQoc2l6ZSwgMSwgVmFsX2ludCh5KSk7CisgIENBTUxyZXR1cm4oc2l6ZSk7Cit9CisKK0NBTUxwcmltIHZhbHVlIGJybGFwaW1sX2VudGVyVHR5TW9kZSh2YWx1ZSBoYW5kbGUsIHZhbHVlIHR0eSwgdmFsdWUgZHJpdmVyTmFtZSkKK3sKKyAgQ0FNTHBhcmFtMyhoYW5kbGUsIHR0eSwgZHJpdmVyTmFtZSk7CisgIGludCByZXM7CisgIGJybGFwaUNoZWNrRXJyb3JXaXRoQ29kZShlbnRlclR0eU1vZGUsICZyZXMsIEludF92YWwodHR5KSwgU3RyaW5nX3ZhbChkcml2ZXJOYW1lKSk7CisgIENBTUxyZXR1cm4oVmFsX2ludChyZXMpKTsKK30KKworQ0FNTHByaW0gdmFsdWUgYnJsYXBpbWxfZW50ZXJUdHlNb2RlV2l0aFBhdGgodmFsdWUgaGFuZGxlLCB2YWx1ZSB0dHlQYXRoQ2FtbCwgdmFsdWUgZHJpdmVyTmFtZSkKK3sKKyAgQ0FNTHBhcmFtMyhoYW5kbGUsIHR0eVBhdGhDYW1sLCBkcml2ZXJOYW1lKTsKKyAgaW50IGksIHNpemUgPSBXb3NpemVfdmFsKHR0eVBhdGhDYW1sKTsKKyAgaW50IHR0eVBhdGhbc2l6ZV07CisgIGZvciAoaT0wOyBpPHNpemU7IGkrKykgdHR5UGF0aFtpXSA9IEludF92YWwoRmllbGQodHR5UGF0aENhbWwsIGkpKTsKKyAgYnJsYXBpQ2hlY2tFcnJvcihlbnRlclR0eU1vZGVXaXRoUGF0aCwgdHR5UGF0aCwgc2l6ZSwgU3RyaW5nX3ZhbChkcml2ZXJOYW1lKSk7CisgIENBTUxyZXR1cm4oVmFsX3VuaXQpOworfQorCitDQU1McHJpbSB2YWx1ZSBicmxhcGltbF9sZWF2ZVR0eU1vZGUodmFsdWUgaGFuZGxlLCB2YWx1ZSB1bml0KQoreworICBDQU1McGFyYW0yKGhhbmRsZSwgdW5pdCk7CisgIGJybGFwaShsZWF2ZVR0eU1vZGUpOworICBDQU1McmV0dXJuKFZhbF91bml0KTsKK30KKworQ0FNTHByaW0gdmFsdWUgYnJsYXBpbWxfc2V0Rm9jdXModmFsdWUgaGFuZGxlLCB2YWx1ZSB0dHkpCit7CisgIENBTUxwYXJhbTIoaGFuZGxlLCB0dHkpOworICBicmxhcGlDaGVja0Vycm9yKHNldEZvY3VzLCBJbnRfdmFsKHR0eSkpOworICBDQU1McmV0dXJuKFZhbF91bml0KTsKK30KKworQ0FNTHByaW0gdmFsdWUgYnJsYXBpbWxfd3JpdGVUZXh0KHZhbHVlIGhhbmRsZSwgdmFsdWUgY3Vyc29yLCB2YWx1ZSB0ZXh0KQoreworICBDQU1McGFyYW0zKGhhbmRsZSwgY3Vyc29yLCB0ZXh0KTsKKyAgYnJsYXBpQ2hlY2tFcnJvcih3cml0ZVRleHQsIEludF92YWwoY3Vyc29yKSwgU3RyaW5nX3ZhbCh0ZXh0KSk7CisgIENBTUxyZXR1cm4oVmFsX3VuaXQpOworfQorCitDQU1McHJpbSB2YWx1ZSBicmxhcGltbF93cml0ZURvdHModmFsdWUgaGFuZGxlLCB2YWx1ZSBjYW1sRG90cykKK3sKKyAgQ0FNTHBhcmFtMihoYW5kbGUsIGNhbWxEb3RzKTsKKyAgaW50IHNpemUgPSBXb3NpemVfdmFsKGNhbWxEb3RzKTsKKyAgdW5zaWduZWQgY2hhciBkb3RzW3NpemVdOworICBwYWNrRG90cyhjYW1sRG90cywgZG90cywgc2l6ZSk7CisgIGJybGFwaUNoZWNrRXJyb3Iod3JpdGVEb3RzLCBkb3RzKTsKKyAgQ0FNTHJldHVybihWYWxfdW5pdCk7Cit9CisKK0NBTUxwcmltIHZhbHVlIGJybGFwaW1sX3dyaXRlKHZhbHVlIGhhbmRsZSwgdmFsdWUgd3JpdGVBcmd1bWVudHMpCit7CisgIENBTUxwYXJhbTIoaGFuZGxlLCB3cml0ZUFyZ3VtZW50cyk7CisgIGludCBhbmRTaXplID0gV29zaXplX3ZhbChGaWVsZCh3cml0ZUFyZ3VtZW50cywgNCkpOworICBpbnQgb3JTaXplID0gV29zaXplX3ZhbChGaWVsZCh3cml0ZUFyZ3VtZW50cywgNSkpOworICB1bnNpZ25lZCBjaGFyIGFuZE1hc2tbYW5kU2l6ZV0sIG9yTWFza1tvclNpemVdOworICBicmxhcGlfd3JpdGVBcmd1bWVudHNfdCB3YTsKKyAgd2EuZGlzcGxheU51bWJlciA9IFZhbF9pbnQoRmllbGQod3JpdGVBcmd1bWVudHMsIDApKTsKKyAgd2EucmVnaW9uQmVnaW4gPSBWYWxfaW50KEZpZWxkKHdyaXRlQXJndW1lbnRzLCAxKSk7CisgIHdhLnJlZ2lvblNpemUgPSBWYWxfaW50KEZpZWxkKHdyaXRlQXJndW1lbnRzLCAyKSk7CisgIHdhLnRleHQgPSAmQnl0ZShTdHJpbmdfdmFsKEZpZWxkKHdyaXRlQXJndW1lbnRzLCAzKSksIDApOworICBwYWNrRG90cyhGaWVsZCh3cml0ZUFyZ3VtZW50cywgNCksIGFuZE1hc2ssIGFuZFNpemUpOworICB3YS5hbmRNYXNrID0gYW5kTWFzazsKKyAgcGFja0RvdHMoRmllbGQod3JpdGVBcmd1bWVudHMsIDUpLCBvck1hc2ssIG9yU2l6ZSk7CisgIHdhLm9yTWFzayA9IG9yTWFzazsKKyAgd2EuY3Vyc29yID0gVmFsX2ludChGaWVsZCh3cml0ZUFyZ3VtZW50cywgNikpOworICB3YS5jaGFyc2V0ID0gJkJ5dGUoU3RyaW5nX3ZhbChGaWVsZCh3cml0ZUFyZ3VtZW50cywgNykpLCAwKTsKKyAgYnJsYXBpQ2hlY2tFcnJvcih3cml0ZSwgJndhKTsKKyAgQ0FNTHJldHVybihWYWxfdW5pdCk7Cit9CisKK0NBTUxwcmltIHZhbHVlIGJybGFwaW1sX3JlYWRLZXkodmFsdWUgaGFuZGxlLCB2YWx1ZSB1bml0KQoreworICBDQU1McGFyYW0yKGhhbmRsZSwgdW5pdCk7CisgIGludCByZXM7CisgIGJybGFwaV9rZXlDb2RlX3Qga2V5Q29kZTsKKyAgQ0FNTGxvY2FsMShyZXRWYWwpOworICBicmxhcGlDaGVja0Vycm9yV2l0aENvZGUocmVhZEtleSwgJnJlcywgMCwgJmtleUNvZGUpOworICBpZiAocmVzPT0wKSBDQU1McmV0dXJuKFZhbF9pbnQoMCkpOworICByZXRWYWwgPSBjYW1sX2FsbG9jKDEsIDEpOworICBTdG9yZV9maWVsZChyZXRWYWwsIDAsIGNhbWxfY29weV9pbnQ2NChrZXlDb2RlKSk7CisgIENBTUxyZXR1cm4ocmV0VmFsKTsKK30KKworQ0FNTHByaW0gdmFsdWUgYnJsYXBpbWxfcmVhZEtleVdpdGhUaW1lb3V0KHZhbHVlIGhhbmRsZSwgdmFsdWUgdGltZW91dF9tcykKK3sKKyAgQ0FNTHBhcmFtMihoYW5kbGUsIHRpbWVvdXRfbXMpOworICBpbnQgcmVzOworICBicmxhcGlfa2V5Q29kZV90IGtleUNvZGU7CisgIENBTUxsb2NhbDEocmV0VmFsKTsKKyAgYnJsYXBpQ2hlY2tFcnJvcldpdGhDb2RlKHJlYWRLZXlXaXRoVGltZW91dCwgJnJlcywgSW50X3ZhbCh0aW1lb3V0X21zKSwgJmtleUNvZGUpOworICBpZiAocmVzPT0wKSBDQU1McmV0dXJuKFZhbF9pbnQoMCkpOworICByZXRWYWwgPSBjYW1sX2FsbG9jKDEsIDEpOworICBTdG9yZV9maWVsZChyZXRWYWwsIDAsIGNhbWxfY29weV9pbnQ2NChrZXlDb2RlKSk7CisgIENBTUxyZXR1cm4ocmV0VmFsKTsKK30KKworQ0FNTHByaW0gdmFsdWUgYnJsYXBpbWxfd2FpdEtleSh2YWx1ZSBoYW5kbGUsIHZhbHVlIHVuaXQpCit7CisgIENBTUxwYXJhbTIoaGFuZGxlLCB1bml0KTsKKyAgYnJsYXBpX2tleUNvZGVfdCBrZXlDb2RlOworICBicmxhcGlDaGVja0Vycm9yKHJlYWRLZXksIDEsICZrZXlDb2RlKTsKKyAgQ0FNTHJldHVybihjYW1sX2NvcHlfaW50NjQoa2V5Q29kZSkpOworfQorCisjZGVmaW5lIGJybGFwaV9fZXhwYW5kS2V5Q29kZShoLHgseSkgYnJsYXBpX2V4cGFuZEtleUNvZGUoeCx5KQorCitDQU1McHJpbSB2YWx1ZSBicmxhcGltbF9leHBhbmRLZXlDb2RlKHZhbHVlIGhhbmRsZSwgdmFsdWUgY2FtbEtleUNvZGUpCit7CisgIENBTUxwYXJhbTIoaGFuZGxlLCBjYW1sS2V5Q29kZSk7CisgIENBTUxsb2NhbDEocmVzdWx0KTsKKyAgYnJsYXBpX2V4cGFuZGVkS2V5Q29kZV90IGVrYzsKKyAgYnJsYXBpQ2hlY2tFcnJvcihleHBhbmRLZXlDb2RlLCBJbnQ2NF92YWwoY2FtbEtleUNvZGUpLCAmZWtjKTsKKyAgcmVzdWx0ID0gY2FtbF9hbGxvY190dXBsZSg0KTsKKyAgU3RvcmVfZmllbGQocmVzdWx0LCAwLCBjYW1sX2NvcHlfaW50MzIoZWtjLnR5cGUpKTsKKyAgU3RvcmVfZmllbGQocmVzdWx0LCAxLCBjYW1sX2NvcHlfaW50MzIoZWtjLmNvbW1hbmQpKTsKKyAgU3RvcmVfZmllbGQocmVzdWx0LCAyLCBjYW1sX2NvcHlfaW50MzIoZWtjLmFyZ3VtZW50KSk7CisgIFN0b3JlX2ZpZWxkKHJlc3VsdCwgMiwgY2FtbF9jb3B5X2ludDMyKGVrYy5mbGFncykpOworICBDQU1McmV0dXJuKHJlc3VsdCk7Cit9CisKK0NBTUxwcmltIHZhbHVlIGJybGFwaW1sX2lnbm9yZUtleXModmFsdWUgaGFuZGxlLCB2YWx1ZSBydCwgdmFsdWUgY2FtbEtleXMpCit7CisgIENBTUxwYXJhbTMoaGFuZGxlLCBydCwgY2FtbEtleXMpOworICB1bnNpZ25lZCBpbnQgaSwgc2l6ZSA9IFdvc2l6ZV92YWwoY2FtbEtleXMpOworICBicmxhcGlfa2V5Q29kZV90IGtleXNbc2l6ZV07CisgIGZvciAoaT0wOyBpPHNpemU7IGkrKykga2V5c1tpXSA9IEludDY0X3ZhbChGaWVsZChjYW1sS2V5cywgaSkpOyAKKyAgYnJsYXBpQ2hlY2tFcnJvcihpZ25vcmVLZXlzLCBJbnRfdmFsKHJ0KSwga2V5cywgc2l6ZSk7CisgIENBTUxyZXR1cm4oVmFsX3VuaXQpOworfQorCitDQU1McHJpbSB2YWx1ZSBicmxhcGltbF9hY2NlcHRLZXlzKHZhbHVlIGhhbmRsZSwgdmFsdWUgcnQsIHZhbHVlIGNhbWxLZXlzKQoreworICBDQU1McGFyYW0zKGhhbmRsZSwgcnQsIGNhbWxLZXlzKTsKKyAgdW5zaWduZWQgaW50IGksIHNpemUgPSBXb3NpemVfdmFsKGNhbWxLZXlzKTsKKyAgYnJsYXBpX2tleUNvZGVfdCBrZXlzW3NpemVdOworICBmb3IgKGk9MDsgaTxzaXplOyBpKyspIGtleXNbaV0gPSBJbnQ2NF92YWwoRmllbGQoY2FtbEtleXMsIGkpKTsgCisgIGJybGFwaUNoZWNrRXJyb3IoYWNjZXB0S2V5cywgSW50X3ZhbChydCksIGtleXMsIHNpemUpOworICBDQU1McmV0dXJuKFZhbF91bml0KTsKK30KKworQ0FNTHByaW0gdmFsdWUgYnJsYXBpbWxfaWdub3JlQWxsS2V5cyh2YWx1ZSBoYW5kbGUsIHZhbHVlIHVuaXQpCit7CisgIENBTUxwYXJhbTIoaGFuZGxlLCB1bml0KTsKKyAgYnJsYXBpQ2hlY2tFcnJvcihpZ25vcmVBbGxLZXlzKTsKKyAgQ0FNTHJldHVybihWYWxfdW5pdCk7Cit9CisKK0NBTUxwcmltIHZhbHVlIGJybGFwaW1sX2FjY2VwdEFsbEtleXModmFsdWUgaGFuZGxlLCB2YWx1ZSB1bml0KQoreworICBDQU1McGFyYW0yKGhhbmRsZSwgdW5pdCk7CisgIGJybGFwaUNoZWNrRXJyb3IoYWNjZXB0QWxsS2V5cyk7CisgIENBTUxyZXR1cm4oVmFsX3VuaXQpOworfQorCitDQU1McHJpbSB2YWx1ZSBicmxhcGltbF9pZ25vcmVLZXlSYW5nZXModmFsdWUgaGFuZGxlLCB2YWx1ZSBjYW1sUmFuZ2VzKQoreworICBDQU1McGFyYW0yKGhhbmRsZSwgY2FtbFJhbmdlcyk7CisgIENBTUxsb2NhbDEocik7CisgIHVuc2lnbmVkIGludCBpLCBzaXplID0gV29zaXplX3ZhbChjYW1sUmFuZ2VzKTsKKyAgYnJsYXBpX3JhbmdlX3QgcmFuZ2VzW3NpemVdOworICBmb3IgKGk9MDsgaTxzaXplOyBpKyspIHsKKyAgICByID0gRmllbGQoY2FtbFJhbmdlcywgaSk7CisgICAgcmFuZ2VzW2ldLmZpcnN0ID0gSW50NjRfdmFsKEZpZWxkKHIsIDApKTsKKyAgICByYW5nZXNbaV0ubGFzdCA9IEludDY0X3ZhbChGaWVsZChyLCAxKSk7CisgIH0KKyAgYnJsYXBpQ2hlY2tFcnJvcihpZ25vcmVLZXlSYW5nZXMsIHJhbmdlcywgc2l6ZSk7CisgIENBTUxyZXR1cm4oVmFsX3VuaXQpOworfQorCitDQU1McHJpbSB2YWx1ZSBicmxhcGltbF9hY2NlcHRLZXlSYW5nZXModmFsdWUgaGFuZGxlLCB2YWx1ZSBjYW1sUmFuZ2VzKQoreworICBDQU1McGFyYW0yKGhhbmRsZSwgY2FtbFJhbmdlcyk7CisgIENBTUxsb2NhbDEocik7CisgIHVuc2lnbmVkIGludCBpLCBzaXplID0gV29zaXplX3ZhbChjYW1sUmFuZ2VzKTsKKyAgYnJsYXBpX3JhbmdlX3QgcmFuZ2VzW3NpemVdOworICBmb3IgKGk9MDsgaTxzaXplOyBpKyspIHsKKyAgICByID0gRmllbGQoY2FtbFJhbmdlcywgaSk7CisgICAgcmFuZ2VzW2ldLmZpcnN0ID0gSW50NjRfdmFsKEZpZWxkKHIsIDApKTsKKyAgICByYW5nZXNbaV0ubGFzdCA9IEludDY0X3ZhbChGaWVsZChyLCAxKSk7CisgIH0KKyAgYnJsYXBpQ2hlY2tFcnJvcihhY2NlcHRLZXlSYW5nZXMsIHJhbmdlcywgc2l6ZSk7CisgIENBTUxyZXR1cm4oVmFsX3VuaXQpOworfQorCitDQU1McHJpbSB2YWx1ZSBicmxhcGltbF9lbnRlclJhd01vZGUodmFsdWUgaGFuZGxlLCB2YWx1ZSBkcml2ZXJOYW1lKQoreworICBDQU1McGFyYW0yKGhhbmRsZSwgZHJpdmVyTmFtZSk7CisgIGJybGFwaUNoZWNrRXJyb3IoZW50ZXJSYXdNb2RlLCBTdHJpbmdfdmFsKGRyaXZlck5hbWUpKTsKKyAgQ0FNTHJldHVybihWYWxfdW5pdCk7Cit9CisKK0NBTUxwcmltIHZhbHVlIGJybGFwaW1sX2xlYXZlUmF3TW9kZSh2YWx1ZSBoYW5kbGUsIHZhbHVlIHVuaXQpCit7CisgIENBTUxwYXJhbTIoaGFuZGxlLCB1bml0KTsKKyAgYnJsYXBpKGxlYXZlUmF3TW9kZSk7CisgIENBTUxyZXR1cm4oVmFsX3VuaXQpOworfQorCitDQU1McHJpbSB2YWx1ZSBicmxhcGltbF9zZW5kUmF3KHZhbHVlIGhhbmRsZSwgdmFsdWUgc3RyKQoreworICBDQU1McGFyYW0yKGhhbmRsZSwgc3RyKTsKKyAgaW50IHJlczsKKyAgdW5zaWduZWQgY2hhciBwYWNrZXRbQlJMQVBJX01BWFBBQ0tFVFNJWkVdOworICBzc2l6ZV90IGksIHNpemUgPSBNSU4oc2l6ZW9mKHBhY2tldCksIGNhbWxfc3RyaW5nX2xlbmd0aChzdHIpKTsKKyAgZm9yIChpPTA7IGk8c2l6ZTsgaSsrKSBwYWNrZXRbaV0gPSBCeXRlKHN0ciwgaSk7CisgIGJybGFwaUNoZWNrRXJyb3JXaXRoQ29kZShzZW5kUmF3LCAmcmVzLCBwYWNrZXQsIHNpemUpOworICBDQU1McmV0dXJuKFZhbF9pbnQocmVzKSk7Cit9CisKK0NBTUxwcmltIHZhbHVlIGJybGFwaW1sX3JlY3ZSYXcodmFsdWUgaGFuZGxlLCB2YWx1ZSB1bml0KQoreworICBDQU1McGFyYW0yKGhhbmRsZSwgdW5pdCk7CisgIHVuc2lnbmVkIGNoYXIgcGFja2V0W0JSTEFQSV9NQVhQQUNLRVRTSVpFXTsKKyAgaW50IGksIHNpemU7CisgIENBTUxsb2NhbDEoc3RyKTsKKyAgYnJsYXBpQ2hlY2tFcnJvcldpdGhDb2RlKHJlY3ZSYXcsICZzaXplLCBwYWNrZXQsIHNpemVvZihwYWNrZXQpKTsKKyAgc3RyID0gY2FtbF9hbGxvY19zdHJpbmcoc2l6ZSk7CisgIGZvciAoaT0wOyBpPHNpemU7IGkrKykgQnl0ZShzdHIsIGkpID0gcGFja2V0W2ldOworICBDQU1McmV0dXJuKHN0cik7Cit9CisKK0NBTUxwcmltIHZhbHVlIGJybGFwaW1sX3N1c3BlbmREcml2ZXIodmFsdWUgaGFuZGxlLCB2YWx1ZSBkcml2ZXJOYW1lKQoreworICBDQU1McGFyYW0yKGhhbmRsZSwgZHJpdmVyTmFtZSk7CisgIGJybGFwaUNoZWNrRXJyb3Ioc3VzcGVuZERyaXZlciwgU3RyaW5nX3ZhbChkcml2ZXJOYW1lKSk7CisgIENBTUxyZXR1cm4oVmFsX3VuaXQpOworfQorCitDQU1McHJpbSB2YWx1ZSBicmxhcGltbF9yZXN1bWVEcml2ZXIodmFsdWUgaGFuZGxlLCB2YWx1ZSB1bml0KQoreworICBDQU1McGFyYW0yKGhhbmRsZSwgdW5pdCk7CisgIGJybGFwaShyZXN1bWVEcml2ZXIpOworICBDQU1McmV0dXJuKFZhbF91bml0KTsKK30KKworQ0FNTHByaW0gdmFsdWUgYnJsYXBpbWxfc3RyZXJyb3IodmFsdWUgY2FtbEVycm9yKQoreworICBDQU1McGFyYW0xKGNhbWxFcnJvcik7CisgIGJybGFwaV9lcnJvcl90IGVycm9yOworICBlcnJvci5icmxlcnJubyA9IEludF92YWwoRmllbGQoY2FtbEVycm9yLDApKTsKKyAgZXJyb3IubGliY2Vycm5vID0gSW50X3ZhbChGaWVsZChjYW1sRXJyb3IsMSkpOworICBlcnJvci5nYWllcnJubyA9IEludF92YWwoRmllbGQoY2FtbEVycm9yLDIpKTsKKyAgZXJyb3IuZXJyZnVuID0gU3RyaW5nX3ZhbChGaWVsZChjYW1sRXJyb3IsMykpOworICBzaXplX3Qgc2l6ZSA9IGJybGFwaV9zdHJlcnJvcl9yKCZlcnJvciwgTlVMTCwgMCk7CisgIGNoYXIgYnVmW3NpemUrMV07CisgIGJybGFwaV9zdHJlcnJvcl9yKCZlcnJvciwgYnVmLCBzaXplb2YoYnVmKSk7CisgIENBTUxyZXR1cm4oY2FtbF9jb3B5X3N0cmluZyhidWYpKTsKK30KKworLyogRnVuY3Rpb24gOiBzZXRFeGNlcHRpb25IYW5kbGVyICovCisvKiBTZXRzIGEgaGFuZGxlciB0aGF0IHJhaXNlcyBhIENhbWwgZXhjZXB0aW9uIGVhY2ggdGltZSBhIGJybGFwaSAqLworLyogZXhjZXB0aW9uIG9jY3VycyAqLworQ0FNTHByaW0gdmFsdWUgYnJsYXBpbWxfc2V0RXhjZXB0aW9uSGFuZGxlcih2YWx1ZSB1bml0KQoreworICBDQU1McGFyYW0xKHVuaXQpOworICBicmxhcGlfc2V0RXhjZXB0aW9uSGFuZGxlcihyYWlzZV9icmxhcGlfZXhjZXB0aW9uKTsKKyAgQ0FNTHJldHVybihWYWxfdW5pdCk7Cit9CmRpZmYgLS1naXQgYS9CaW5kaW5ncy9PQ2FtbC9jb25zdGFudHMuYXdrIGIvQmluZGluZ3MvT0NhbWwvY29uc3RhbnRzLmF3awpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mOGQyYjIxCi0tLSAvZGV2L251bGwKKysrIGIvQmluZGluZ3MvT0NhbWwvY29uc3RhbnRzLmF3awpAQCAtMCwwICsxLDExNCBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorIyAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyMKKyMgQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorIworIyBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorIworIyBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisjIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyMgbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisjCisjIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK0JFR0lOIHsKK30KKworRU5EIHsKK30KKworZnVuY3Rpb24gYnJsQ29tbWFuZChuYW1lLCBzeW1ib2wsIHZhbHVlLCBoZWxwKSB7CisgIHdyaXRlQ29tbWFuZERlZmluaXRpb24oImNtZF8iIG5hbWUsICJJbnQzMi5vZl9pbnQgIiB2YWx1ZSwgaGVscCkKK30KKworZnVuY3Rpb24gYnJsQmxvY2sobmFtZSwgc3ltYm9sLCB2YWx1ZSwgaGVscCkgeworICB3cml0ZUNvbW1hbmREZWZpbml0aW9uKCJibGtfIiBuYW1lLCAiSW50MzIub2ZfaW50ICgiIHZhbHVlICIgbHNsIGtleV9jbWRfYmxrX3NoaWZ0KSIsIGhlbHApCit9CisKK2Z1bmN0aW9uIGJybEtleShuYW1lLCBzeW1ib2wsIHZhbHVlLCBoZWxwKSB7CisjIG5vdCBpbXBsZW1lbnRlZCBmb3Igb3RoZXIgYmluZGluZ3MgZWl0aGVyCisjICBwcmludCAiYnJhaWxsZSBrZXk6IgorIyAgcHJpbnQgbmFtZSBzeW1ib2wgdmFsdWUKKyMgIHByaW50ICIoKiogIiBoZWxwICIgKikiCit9CisKK2Z1bmN0aW9uIGJybEZsYWcobmFtZSwgc3ltYm9sLCB2YWx1ZSwgaGVscCkgeworICBpZiAodmFsdWUgfiAvXjBbeFhdWzAtOWEtZkEtRl0rMDAwMCQvKSB7CisgICAgdmFsdWUgPSBoZXhhZGVjaW1hbFZhbHVlKHN1YnN0cih2YWx1ZSwgMSwgbGVuZ3RoKHZhbHVlKS00KSkKKyAgICBpZiAobmFtZSB+IC9eQ0hBUl8vKSB7CisgICAgICBuYW1lID0gc3Vic3RyKG5hbWUsIDYpCisgICAgfSBlbHNlIHsKKyAgICAgIHZhbHVlID0gdmFsdWUgIjAwIgorICAgIH0KKyAgfSBlbHNlIGlmICh2YWx1ZSB+IC9eXCgvKSB7CisgICAgcmV0dXJuCisgIH0gZWxzZSB7CisgICAgcmV0dXJuCisgIH0KKyAgd3JpdGVDYW1sQ29uc3RhbnQoImludDMyIiwgIktFWV9GTEdfIiBuYW1lLCAiSW50MzIub2ZfaW50ICIgdG9sb3dlcih2YWx1ZSksIGhlbHApCit9CisKK2Z1bmN0aW9uIGJybERvdChudW1iZXIsIHN5bWJvbCwgdmFsdWUsIGhlbHApIHsKKyAgd3JpdGVDYW1sQ29uc3RhbnQoImludCIsICJkb3QiIG51bWJlciwgdmFsdWUsIGhlbHApCit9CisKK2Z1bmN0aW9uIGFwaUNvbnN0YW50KG5hbWUsIHN5bWJvbCwgdmFsdWUsIGhlbHApIHsKKyAgd3JpdGVDYW1sQ29uc3RhbnQoImludCIsIG5hbWUsIHZhbHVlLCBoZWxwKTsKK30KKworZnVuY3Rpb24gYXBpTWFzayhuYW1lLCBzeW1ib2wsIHZhbHVlLCBoZWxwKSB7CisgIHdyaXRlQ2FtbENvbnN0YW50KCJpbnQ2NCIsICJrZXlfIiB0b2xvd2VyKG5hbWUpLCBoZXhhZGVjaW1hbFZhbHVlKHZhbHVlKSAiTCIpOworfQorCitmdW5jdGlvbiBhcGlTaGlmdChuYW1lLCBzeW1ib2wsIHZhbHVlLCBoZWxwKSB7CisgIHdyaXRlQ2FtbENvbnN0YW50KCJpbnQiLCAia2V5XyIgdG9sb3dlcihuYW1lKSwgaGV4YWRlY2ltYWxWYWx1ZSh2YWx1ZSkpOworfQorCitmdW5jdGlvbiBhcGlUeXBlKG5hbWUsIHN5bWJvbCwgdmFsdWUsIGhlbHApIHsKKyAgd3JpdGVDYW1sQ29uc3RhbnQoImludCIsICJrZXlfdHlwZV8iIHRvbG93ZXIobmFtZSksIGhleGFkZWNpbWFsVmFsdWUodmFsdWUpKTsKK30KKworZnVuY3Rpb24gYXBpS2V5KG5hbWUsIHN5bWJvbCwgdmFsdWUsIGhlbHApIHsKKyAgdmFsdWUgPSBoZXhhZGVjaW1hbFZhbHVlKHZhbHVlKQorCisgIGlmIChuYW1lID09ICJGVU5DVElPTiIpIHsKKyAgICBmb3IgKGk9MDsgaTwzNTsgKytpKSB7CisgICAgICB3cml0ZUtleURlZmluaXRpb24oIkYiIChpKzEpLCAiKCIgdmFsdWUgIiArICIgaSAiKSIpCisgICAgfQorICB9IGVsc2UgeworICAgIHdyaXRlS2V5RGVmaW5pdGlvbihuYW1lLCB2YWx1ZSkKKyAgfQorfQorCitmdW5jdGlvbiBhcGlSYW5nZVR5cGUobmFtZSwgc3ltYm9sLCB2YWx1ZSwgaGVscCkgeworICB3cml0ZUNhbWxDb25zdGFudCgiaW50IiwgInJhbmdlVHlwZV8iIG5hbWUsIHZhbHVlLCBoZWxwKQorfQorCitmdW5jdGlvbiB3cml0ZUNvbW1hbmREZWZpbml0aW9uKG5hbWUsIHZhbHVlLCBoZWxwKSB7CisgIHdyaXRlQ2FtbENvbnN0YW50KCJpbnQzMiIsIG5hbWUsIHZhbHVlLCBoZWxwKQorfQorCitmdW5jdGlvbiB3cml0ZUtleURlZmluaXRpb24obmFtZSwgdmFsdWUpIHsKKyAgd3JpdGVDYW1sQ29uc3RhbnQoImludDMyIiwgIktFWV9TWU1fIiBuYW1lLCAiSW50MzIub2ZfaW50ICIgdmFsdWUpCit9CisKK2Z1bmN0aW9uIHdyaXRlQ2FtbENvbnN0YW50KHR5cGUsIG5hbWUsIHZhbHVlLCBoZWxwKSB7CisgIHByaW50ICJsZXQgIiB0b2xvd2VyKG5hbWUpICIgOiAiIHR5cGUgIiA9ICIgdmFsdWUgIiAiIGNhbWxkb2NDb21tZW50KGhlbHApCit9CisKK2Z1bmN0aW9uIGNhbWxkb2NDb21tZW50KHRleHQpIHsKKyAgaWYgKGxlbmd0aCh0ZXh0KSA+IDApIHRleHQgPSAiKCoqICIgdGV4dCAiICopIjsKKyAgcmV0dXJuIHRleHQ7Cit9CisKK2Z1bmN0aW9uIGhleGFkZWNpbWFsVmFsdWUodmFsdWUpIHsKKyAgdmFsdWUgPSB0b2xvd2VyKHZhbHVlKQorICBnc3ViKCJ4MCsiLCAieCIsIHZhbHVlKQorICBnc3ViKCJ4JCIsICJ4MCIsIHZhbHVlKQorICByZXR1cm4gdmFsdWUKK30KZGlmZiAtLWdpdCBhL0JpbmRpbmdzL09DYW1sL21haW4ubWwgYi9CaW5kaW5ncy9PQ2FtbC9tYWluLm1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg3OWJiZjEKLS0tIC9kZXYvbnVsbAorKysgYi9CaW5kaW5ncy9PQ2FtbC9tYWluLm1sCkBAIC0wLDAgKzEsMjE3IEBACisoKgorICogbGliYnJsYXBpIC0gQSBsaWJyYXJ5IHByb3ZpZGluZyBhY2Nlc3MgdG8gYnJhaWxsZSB0ZXJtaW5hbHMgZm9yIGFwcGxpY2F0aW9ucy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDItMjAyMyBieQorICogICBTw6liYXN0aWVuIEhpbmRlcmVyIDxTZWJhc3RpZW4uSGluZGVyZXJAZW5zLWx5b24ub3JnPgorICogICBTYW11ZWwgVGhpYmF1bHQgPFNhbXVlbC5UaGliYXVsdEBlbnMtbHlvbi5vcmc+CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIGxpYmJybGFwaSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorICoKKyAqIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyAqKQorCisoKiBCcmxBUEkgSW50ZXJmYWNlIGZvciB0aGUgT0NhbWwgbGFuZ3VhZ2UgKikKKworbGV0IGRvdDEgPSAxIGxzbCAwCitsZXQgZG90MiA9IDEgbHNsIDEKK2xldCBkb3QzID0gMSBsc2wgMgorbGV0IGRvdDQgPSAxIGxzbCAzCitsZXQgZG90NSA9IDEgbHNsIDQKK2xldCBkb3Q2ID0gMSBsc2wgNQorbGV0IGRvdDcgPSAxIGxzbCA2CitsZXQgZG90OCA9IDEgbHNsIDcKKwordHlwZSBzZXR0aW5ncyA9IHsKKyAgYXV0aCA6IHN0cmluZzsKKyAgaG9zdCA6IHN0cmluZworfQorCitsZXQgc2V0dGluZ3NfaW5pdGlhbGl6ZXIgPSB7CisgIGF1dGggPSAiIjsKKyAgaG9zdCA9ICIiCit9CisKK3R5cGUgd3JpdGVBcmd1bWVudHMgPSB7CisgIG11dGFibGUgZGlzcGxheU51bWJlciA6IGludDsKKyAgbXV0YWJsZSByZWdpb25CZWdpbiA6IGludDsKKyAgbXV0YWJsZSByZWdpb25TaXplIDogaW50OworICB0ZXh0IDogc3RyaW5nOworICBhdHRyQW5kIDogaW50IGFycmF5OworICBhdHRyT3IgOiBpbnQgYXJyYXk7CisgIG11dGFibGUgY3Vyc29yIDogaW50OworICBtdXRhYmxlIGNoYXJzZXQgOiBzdHJpbmcKK30KKworbGV0IHdyaXRlQXJndW1lbnRzX2luaXRpYWxpemVyID0geworICBkaXNwbGF5TnVtYmVyID0gLTE7CisgIHJlZ2lvbkJlZ2luID0gMDsKKyAgcmVnaW9uU2l6ZSA9IDA7CisgIHRleHQgPSAiIjsKKyAgYXR0ckFuZCA9IFt8IHxdOworICBhdHRyT3IgPSBbfCB8XTsKKyAgY3Vyc29yID0gLTE7CisgIGNoYXJzZXQgPSAiIgorfQorCit0eXBlIGhhbmRsZQorCitsZXQgbWF4X3BhY2tldF9zaXplID0gNTEyCisKK3R5cGUgZXJyb3JDb2RlID0KKyAgfCBTVUNDRVNTCisgIHwgTk9NRU0KKyAgfCBUVFlCVVNZCisgIHwgREVWSUNFQlVTWQorICB8IFVOS05PV05fSU5TVFJVQ1RJT04KKyAgfCBJTExFR0FMX0lOU1RSVUNUSU9OCisgIHwgSU5WQUxJRF9QQVJBTUVURVIKKyAgfCBJTlZBTElEX1BBQ0tFVAorICB8IENPTk5SRUZVU0VECisgIHwgT1BOT1RTVVBQCisgIHwgR0FJRVJSIG9mIGludAorICB8IExJQkNFUlIgb2YgVW5peC5lcnJvcgorICB8IFVOS05PV05UVFkKKyAgfCBQUk9UT0NPTF9WRVJTSU9OCisgIHwgRU9GCisgIHwgRU1QVFlLRVkKKyAgfCBEUklWRVJFUlJPUgorICB8IEFVVEhFTlRJQ0FUSU9OCisgIHwgVW5rbm93biBvZiBpbnQKKwordHlwZSBlcnJvciA9IHsKKyAgYnJsZXJybm8gOiBpbnQ7CisgIGxpYmNlcnJubyA6IGludDsKKyAgZ2FpZXJybm8gOiBpbnQ7CisgIGVycmZ1biA6IHN0cmluZzsKK30KKworZXh0ZXJuYWwgZXJyb3JDb2RlX29mX2Vycm9yIDoKKyAgZXJyb3IgLT4gZXJyb3JDb2RlID0gImJybGFwaW1sX2Vycm9yQ29kZV9vZl9lcnJvciIKKworZXh0ZXJuYWwgc3RyZXJyb3IgOgorICBlcnJvciAtPiBzdHJpbmcgPSAiYnJsYXBpbWxfc3RyZXJyb3IiCisKK2V4Y2VwdGlvbiBCcmxhcGlfZXJyb3Igb2YgZXJyb3IKK2V4Y2VwdGlvbiBCcmxhcGlfZXhjZXB0aW9uIG9mIGVycm9yQ29kZSAqIGludDMyICogc3RyaW5nCisKK2V4dGVybmFsIG9wZW5Db25uZWN0aW9uIDoKKyAgc2V0dGluZ3MgLT4gVW5peC5maWxlX2Rlc2NyICogc2V0dGluZ3MgPSAiYnJsYXBpbWxfb3BlbkNvbm5lY3Rpb24iCitleHRlcm5hbCBvcGVuQ29ubmVjdGlvbldpdGhIYW5kbGUgOgorICBzZXR0aW5ncyAtPiBoYW5kbGUgPSAiYnJsYXBpbWxfb3BlbkNvbm5lY3Rpb25XaXRoSGFuZGxlIgorZXh0ZXJuYWwgY2xvc2VDb25uZWN0aW9uIDoKKyAgP2g6aGFuZGxlIC0+IHVuaXQgLT4gdW5pdCA9ICJicmxhcGltbF9jbG9zZUNvbm5lY3Rpb24iCitleHRlcm5hbCBnZXREcml2ZXJOYW1lIDoKKyAgP2g6aGFuZGxlIC0+IHVuaXQgLT4gc3RyaW5nID0gImJybGFwaW1sX2dldERyaXZlck5hbWUiCitleHRlcm5hbCBnZXRNb2RlbElkZW50aWZpZXIgOgorICA/aDpoYW5kbGUgLT4gdW5pdCAtPiBzdHJpbmcgPSAiYnJsYXBpbWxfZ2V0TW9kZWxJZGVudGlmaWVyIgorZXh0ZXJuYWwgZ2V0RGlzcGxheVNpemUgOgorICA/aDpoYW5kbGUgLT4gdW5pdCAtPiBpbnQgKiBpbnQgPSAiYnJsYXBpbWxfZ2V0RGlzcGxheVNpemUiCisKK2V4dGVybmFsIGVudGVyVHR5TW9kZSA6CisgID9oOmhhbmRsZSAtPiBpbnQgLT4gc3RyaW5nIC0+IGludCA9ICJicmxhcGltbF9lbnRlclR0eU1vZGUiCitleHRlcm5hbCBlbnRlclR0eU1vZGVXaXRoUGF0aCA6CisgID9oOmhhbmRsZSAtPiBpbnQgYXJyYXkgLT4gc3RyaW5nIC0+IGludCA9ICJicmxhcGltbF9lbnRlclR0eU1vZGVXaXRoUGF0aCIKK2V4dGVybmFsIGxlYXZlVHR5TW9kZSA6CisgID9oOmhhbmRsZSAtPiB1bml0IC0+IHVuaXQgPSAiYnJsYXBpbWxfbGVhdmVUdHlNb2RlIgorZXh0ZXJuYWwgc2V0Rm9jdXMgOgorICA/aDpoYW5kbGUgLT4gaW50IC0+IHVuaXQgPSAiYnJsYXBpbWxfc2V0Rm9jdXMiCisKK2V4dGVybmFsIHdyaXRlVGV4dCA6CisgID9oOmhhbmRsZSAtPiBpbnQgLT4gc3RyaW5nIC0+IHVuaXQgPSAiYnJsYXBpbWxfd3JpdGVUZXh0IgorZXh0ZXJuYWwgd3JpdGVEb3RzIDoKKyAgP2g6aGFuZGxlIC0+IGludCBhcnJheSAtPiB1bml0ID0gImJybGFwaW1sX3dyaXRlRG90cyIKK2V4dGVybmFsIHdyaXRlIDoKKyAgP2g6aGFuZGxlIC0+IHdyaXRlQXJndW1lbnRzIC0+IHVuaXQgPSAiYnJsYXBpbWxfd3JpdGUiCisKK2V4dGVybmFsIHJlYWRLZXkgOgorICA/aDpoYW5kbGUgLT4gdW5pdCAtPiBpbnQ2NCBvcHRpb24gPSAiYnJsYXBpbWxfcmVhZEtleSIKK2V4dGVybmFsIHdhaXRLZXkgOgorICA/aDpoYW5kbGUgLT4gdW5pdCAtPiBpbnQ2NCA9ICJicmxhcGltbF93YWl0S2V5IgorZXh0ZXJuYWwgcmVhZEtleVdpdGhUaW1lb3V0IDoKKyAgP2g6aGFuZGxlIC0+IGludCAtPiBpbnQ2NCBvcHRpb24gPSAiYnJsYXBpbWxfcmVhZEtleVdpdGhUaW1lb3V0IgorCit0eXBlIGV4cGFuZGVkS2V5Q29kZSA9IHsKKyAgdHlwZV8gOiBpbnQzMjsKKyAgY29tbWFuZCA6IGludDMyOworICBhcmd1bWVudCA6IGludDMyOworICBmbGFncyA6IGludDMyCit9CisKK2V4dGVybmFsIGV4cGFuZEtleUNvZGUgOgorICA/aDpoYW5kbGUgLT4gaW50NjQgLT4gZXhwYW5kZWRLZXlDb2RlID0gImJybGFwaW1sX2V4cGFuZEtleUNvZGUiCisKK3R5cGUgcmFuZ2VUeXBlID0KKyAgfCBSVF9hbGwKKyAgfCBSVF90eXBlCisgIHwgUlRfY29tbWFuZAorICB8IFJUX2tleQorICB8IFJUX2NvZGUKKworZXh0ZXJuYWwgaWdub3JlS2V5cyA6CisgID9oOmhhbmRsZSAtPiByYW5nZVR5cGUgLT4gaW50NjQgYXJyYXkgLT4gdW5pdCA9ICJicmxhcGltbF9pZ25vcmVLZXlzIgorZXh0ZXJuYWwgYWNjZXB0S2V5cyA6CisgID9oOmhhbmRsZSAtPiByYW5nZVR5cGUgLT4gaW50NjQgYXJyYXkgLT4gdW5pdCA9ICJicmxhcGltbF9hY2NlcHRLZXlzIgorZXh0ZXJuYWwgaWdub3JlQWxsS2V5cyA6CisgID9oOmhhbmRsZSAtPiB1bml0ID0gImJybGFwaW1sX2lnbm9yZUFsbEtleXMiCitleHRlcm5hbCBhY2NlcHRBbGxLZXlzIDoKKyAgP2g6aGFuZGxlIC0+IHVuaXQgPSAiYnJsYXBpbWxfYWNjZXB0QWxsS2V5cyIgIAorZXh0ZXJuYWwgaWdub3JlS2V5UmFuZ2VzIDoKKyAgP2g6aGFuZGxlIC0+IChpbnQ2NCAqIGludDY0KSBhcnJheSAtPiB1bml0ID0gImJybGFwaW1sX2lnbm9yZUtleVJhbmdlcyIKK2V4dGVybmFsIGFjY2VwdEtleVJhbmdlcyA6CisgID9oOmhhbmRsZSAtPiAoaW50NjQgKiBpbnQ2NCkgYXJyYXkgLT4gdW5pdCA9ICJicmxhcGltbF9hY2NlcHRLZXlSYW5nZXMiCisKK2V4dGVybmFsIGVudGVyUmF3TW9kZSA6CisgID9oOmhhbmRsZSAtPiBzdHJpbmcgLT4gdW5pdCA9ICJicmxhcGltbF9lbnRlclJhd01vZGUiCitleHRlcm5hbCBsZWF2ZVJhd01vZGUgOgorICA/aDpoYW5kbGUgLT4gdW5pdCAtPiB1bml0ID0gImJybGFwaW1sX2xlYXZlUmF3TW9kZSIKK2V4dGVybmFsIHNlbmRSYXcgOgorICA/aDpoYW5kbGUgLT4gc3RyaW5nIC0+IGludCA9ICJicmxhcGltbF9zZW5kUmF3IgorZXh0ZXJuYWwgcmVjdlJhdyA6CisgID9oOmhhbmRsZSAtPiB1bml0IC0+IHN0cmluZyA9ICJicmxhcGltbF9yZWN2UmF3IgorICAKK2V4dGVybmFsIHN1c3BlbmREcml2ZXIgOgorICA/aDpoYW5kbGUgLT4gc3RyaW5nIC0+IHVuaXQgPSAiYnJsYXBpbWxfc3VzcGVuZERyaXZlciIKK2V4dGVybmFsIHJlc3VtZURyaXZlciA6CisgID9oOmhhbmRsZSAtPiB1bml0IC0+IHVuaXQgPSAiYnJsYXBpbWxfcmVzdW1lRHJpdmVyIgorCittb2R1bGUgdHlwZSBLRVkgPSBzaWcKKyAgdHlwZSBrZXkKKyAgdmFsIGtleV9vZl9pbnQ2NCA6IGludDY0IC0+IGtleQorICB2YWwgaW50NjRfb2Zfa2V5IDoga2V5IC0+IGludDY0CitlbmQKKworbW9kdWxlIE1ha2VLZXlIYW5kbGVycyAoTTEgOiBLRVkpID0gc3RydWN0CisgIHR5cGUga2V5ID0gTTEua2V5CisgIGxldCByZWFkS2V5ID9oICgpID0gbWF0Y2ggcmVhZEtleSA/aCAoKSB3aXRoCisgICAgfCBOb25lIC0+IE5vbmUKKyAgICB8IFNvbWUgeCAtPiBTb21lIChNMS5rZXlfb2ZfaW50NjQgeCkKKworICBsZXQgd2FpdEtleSA/aCAoKSA9IE0xLmtleV9vZl9pbnQ2NCAod2FpdEtleSA/aCAoKSkgCisgIGxldCBpZ25vcmVLZXlzID9oIHQgYSA9IGlnbm9yZUtleXMgP2ggdCAoQXJyYXkubWFwIE0xLmludDY0X29mX2tleSBhKQorICBsZXQgYWNjZXB0S2V5cyA/aCB0IGEgPSBhY2NlcHRLZXlzID9oIHQgKEFycmF5Lm1hcCBNMS5pbnQ2NF9vZl9rZXkgYSkKKyAgbGV0IGYgKHgseSkgPSAoTTEuaW50NjRfb2Zfa2V5IHgsIE0xLmludDY0X29mX2tleSB5KQorICBsZXQgZyBhID0gQXJyYXkubWFwIGYgYQorICBsZXQgaWdub3JlS2V5UmFuZ2VzID9oIGEgPSBpZ25vcmVLZXlSYW5nZXMgP2ggKGcgYSkKKyAgbGV0IGFjY2VwdEtleVJhbmdlcyA/aCBhID0gYWNjZXB0S2V5UmFuZ2VzID9oIChnIGEpCitlbmQKKworICAKKworZXh0ZXJuYWwgc2V0RXhjZXB0aW9uSGFuZGxlciA6CisgIHVuaXQgLT4gdW5pdCA9ICJicmxhcGltbF9zZXRFeGNlcHRpb25IYW5kbGVyIgorCitsZXQgXyA9CisgIGxldCB4ID0geyBicmxlcnJubyA9IDA7IGxpYmNlcnJubyA9IDA7IGdhaWVycm5vID0gMDsgZXJyZnVuID0gIiIgfSBpbgorICBDYWxsYmFjay5yZWdpc3Rlcl9leGNlcHRpb24gIkJybGFwaV9lcnJvciIKKyAgICAoQnJsYXBpX2Vycm9yIHgpOworICBDYWxsYmFjay5yZWdpc3Rlcl9leGNlcHRpb24gIkJybGFwaV9leGNlcHRpb24iCisgICAgKEJybGFwaV9leGNlcHRpb24gKFNVQ0NFU1MsIDBsLCAiIikpOworICBzZXRFeGNlcHRpb25IYW5kbGVyKCkKZGlmZiAtLWdpdCBhL0JpbmRpbmdzL09DYW1sL21haW4ubWxpIGIvQmluZGluZ3MvT0NhbWwvbWFpbi5tbGkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmVlYjA1YgotLS0gL2Rldi9udWxsCisrKyBiL0JpbmRpbmdzL09DYW1sL21haW4ubWxpCkBAIC0wLDAgKzEsMjI2IEBACisoKgorICogbGliYnJsYXBpIC0gQSBsaWJyYXJ5IHByb3ZpZGluZyBhY2Nlc3MgdG8gYnJhaWxsZSB0ZXJtaW5hbHMgZm9yIGFwcGxpY2F0aW9ucy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDItMjAyMyBieQorICogICBTw6liYXN0aWVuIEhpbmRlcmVyIDxTZWJhc3RpZW4uSGluZGVyZXJAZW5zLWx5b24ub3JnPgorICogICBTYW11ZWwgVGhpYmF1bHQgPFNhbXVlbC5UaGliYXVsdEBlbnMtbHlvbi5vcmc+CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIGxpYmJybGFwaSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorICoKKyAqIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyAqKQorCisoKiBCcmxBUEkgSW50ZXJmYWNlIGZvciB0aGUgT0NhbWwgbGFuZ3VhZ2UgKikKKygqCitBam91dGVyIGRlcyBmaWNoaWVycyAuaW4KKyopCisKKygqCitCUkxBUElfUkVMRUFTRQorQlJMQVBJX01BSk9SCitCUkxBUElfTUlOT1IKK0JSTEFQSV9SRVZJU0lPTgorRmFpcmUgdW4gZmljaGllciAuaW46IEBWQVJAIGVzdCByZW1wbGFjw6kgcGFyIGxhIHZhbGV1ciBkZSBWQVIKK3RlbGxlIHF1ZSBkw6lmaW5pZSBkYW5zIGNvbmZpZ3VyZS5hYy4KKyopCisKKygqCitCUkxBUElfU09DS0VUUE9SVE5VTQorQlJMQVBJX1NPQ0tFVFBPUlQgKHN0cmluZykKK0JSTEFQSV9NQVhQQUNLRVRTSVpFCitCUkxBUElfTUFYTkFNRUxFTkdUSAorQlJMQVBJX1NPQ0tFVFBBVEgKK0JSTEFQSV9FVENESVIKK0JSTEFQSV9BVVRIS0VZRklMRQorQlJMQVBJX0RFRkFVVEgKK0lkZW0gcXVlIHByw6ljw6lkZW1tbWVudAorQydlc3QgZHUgbmk8ZWF1IHByb3RvLiBGYXV0LWlsIGJpbmRlciA/CisqKQorCit0eXBlIHNldHRpbmdzID0geworICBhdXRoIDogc3RyaW5nOworICBob3N0IDogc3RyaW5nCit9CisKK3ZhbCBzZXR0aW5nc19pbml0aWFsaXplciA6IHNldHRpbmdzCisKK3R5cGUgd3JpdGVBcmd1bWVudHMgPSB7CisgIG11dGFibGUgZGlzcGxheU51bWJlciA6IGludDsKKyAgbXV0YWJsZSByZWdpb25CZWdpbiA6IGludDsKKyAgbXV0YWJsZSByZWdpb25TaXplIDogaW50OworICB0ZXh0IDogc3RyaW5nOworICBhdHRyQW5kIDogaW50IGFycmF5OworICBhdHRyT3IgOiBpbnQgYXJyYXk7CisgIG11dGFibGUgY3Vyc29yIDogaW50OworICBtdXRhYmxlIGNoYXJzZXQgOiBzdHJpbmcKK30KKwordmFsIHdyaXRlQXJndW1lbnRzX2luaXRpYWxpemVyIDogd3JpdGVBcmd1bWVudHMKKwordHlwZSBoYW5kbGUKKwordmFsIG1heF9wYWNrZXRfc2l6ZSA6IGludAorCit0eXBlIGVycm9yQ29kZSA9CisgIHwgU1VDQ0VTUworICB8IE5PTUVNCisgIHwgVFRZQlVTWQorICB8IERFVklDRUJVU1kKKyAgfCBVTktOT1dOX0lOU1RSVUNUSU9OCisgIHwgSUxMRUdBTF9JTlNUUlVDVElPTgorICB8IElOVkFMSURfUEFSQU1FVEVSCisgIHwgSU5WQUxJRF9QQUNLRVQKKyAgfCBDT05OUkVGVVNFRAorICB8IE9QTk9UU1VQUAorICB8IEdBSUVSUiBvZiBpbnQKKyAgfCBMSUJDRVJSIG9mIFVuaXguZXJyb3IKKyAgfCBVTktOT1dOVFRZCisgIHwgUFJPVE9DT0xfVkVSU0lPTgorICB8IEVPRgorICB8IEVNUFRZS0VZCisgIHwgRFJJVkVSRVJST1IKKyAgfCBBVVRIRU5USUNBVElPTgorICB8IFVua25vd24gb2YgaW50CisKK3R5cGUgZXJyb3IgPSB7CisgIGJybGVycm5vIDogaW50OworICBsaWJjZXJybm8gOiBpbnQ7CisgIGdhaWVycm5vIDogaW50OworICBlcnJmdW4gOiBzdHJpbmc7Cit9CisKK2V4dGVybmFsIGVycm9yQ29kZV9vZl9lcnJvciA6CisgIGVycm9yIC0+IGVycm9yQ29kZSA9ICJicmxhcGltbF9lcnJvckNvZGVfb2ZfZXJyb3IiCisKK2V4dGVybmFsIHN0cmVycm9yIDoKKyAgZXJyb3IgLT4gc3RyaW5nID0gImJybGFwaW1sX3N0cmVycm9yIgorCitleGNlcHRpb24gQnJsYXBpX2Vycm9yIG9mIGVycm9yCitleGNlcHRpb24gQnJsYXBpX2V4Y2VwdGlvbiBvZiBlcnJvckNvZGUgKiBpbnQzMiAqIHN0cmluZworCitleHRlcm5hbCBvcGVuQ29ubmVjdGlvbiA6CisgIHNldHRpbmdzIC0+IFVuaXguZmlsZV9kZXNjciAqIHNldHRpbmdzID0gImJybGFwaW1sX29wZW5Db25uZWN0aW9uIgorZXh0ZXJuYWwgb3BlbkNvbm5lY3Rpb25XaXRoSGFuZGxlIDoKKyAgc2V0dGluZ3MgLT4gaGFuZGxlID0gImJybGFwaW1sX29wZW5Db25uZWN0aW9uV2l0aEhhbmRsZSIKK2V4dGVybmFsIGNsb3NlQ29ubmVjdGlvbiA6CisgID9oOmhhbmRsZSAtPiB1bml0IC0+IHVuaXQgPSAiYnJsYXBpbWxfY2xvc2VDb25uZWN0aW9uIgorKCoKK3ZhbCBleHBhbmRIb3N0IDogc3RyaW5nIC0+IHN0cmluZyAqIHN0cmluZworSWRlbTogcHJvdG8KKyopCitleHRlcm5hbCBnZXREcml2ZXJOYW1lIDoKKyAgP2g6aGFuZGxlIC0+IHVuaXQgLT4gc3RyaW5nID0gImJybGFwaW1sX2dldERyaXZlck5hbWUiCitleHRlcm5hbCBnZXRNb2RlbElkZW50aWZpZXIgOgorICA/aDpoYW5kbGUgLT4gdW5pdCAtPiBzdHJpbmcgPSAiYnJsYXBpbWxfZ2V0TW9kZWxJZGVudGlmaWVyIgorZXh0ZXJuYWwgZ2V0RGlzcGxheVNpemUgOgorICA/aDpoYW5kbGUgLT4gdW5pdCAtPiBpbnQgKiBpbnQgPSAiYnJsYXBpbWxfZ2V0RGlzcGxheVNpemUiCisKK2V4dGVybmFsIGVudGVyVHR5TW9kZSA6CisgID9oOmhhbmRsZSAtPiBpbnQgLT4gc3RyaW5nIC0+IGludCA9ICJicmxhcGltbF9lbnRlclR0eU1vZGUiCit2YWwgZW50ZXJUdHlNb2RlV2l0aFBhdGggOgorICA/aDpoYW5kbGUgLT4gaW50IGFycmF5IC0+IHN0cmluZyAtPiBpbnQKK2V4dGVybmFsIGxlYXZlVHR5TW9kZSA6CisgID9oOmhhbmRsZSAtPiB1bml0IC0+IHVuaXQgPSAiYnJsYXBpbWxfbGVhdmVUdHlNb2RlIgorZXh0ZXJuYWwgc2V0Rm9jdXMgOgorICA/aDpoYW5kbGUgLT4gaW50IC0+IHVuaXQgPSAiYnJsYXBpbWxfc2V0Rm9jdXMiCisKK2V4dGVybmFsIHdyaXRlVGV4dCA6CisgID9oOmhhbmRsZSAtPiBpbnQgLT4gc3RyaW5nIC0+IHVuaXQgPSAiYnJsYXBpbWxfd3JpdGVUZXh0IgorKCogQXJnIG9wdGlvbm5lbCBwb3VyIGN1cnNldXIgPyAqKQorZXh0ZXJuYWwgd3JpdGVEb3RzIDoKKyAgP2g6aGFuZGxlIC0+IGludCBhcnJheSAtPiB1bml0ID0gImJybGFwaW1sX3dyaXRlRG90cyIKK2V4dGVybmFsIHdyaXRlIDoKKyAgP2g6aGFuZGxlIC0+IHdyaXRlQXJndW1lbnRzIC0+IHVuaXQgPSAiYnJsYXBpbWxfd3JpdGUiCisKKygqCitCUkxBUElfS0VZQ09ERV9NQVgKK0xlcyBjb25zdGFudGVzIHBvdXIgdHJhdmFpbGxlciBzdXIgbGVzIGZsYWdzIGRlIHRvdWNoZXMgPworTGVzIEtFWV9TWU0gPworT3VpOiBwb3VyIMOqdHJlIGNvaMOpcmVudCBhdmVjIGxlIGZhaXQgZGUgZm91cm5pciBsZSBpbnQ2NAorRmxhZ3M6IGVudGllcnMuCisqKQorCisoKiB2YWwgZ2V0S2V5TmFtZSA6IGV4cGFuZGVkS2V5Q29kZSAtPiBzdHJpbmcgKikKKworKCoKK2JybGFwaV9kb3ROdW1iZXJUb0JpdAorYnJsYXBpX2RvdEJpdFRvTnVtYmVyCitVbmljb2RlID8KK091aSwgdXRpbGUgcG91ciBsZXMga2V5X3N5bQorKikKKworZXh0ZXJuYWwgcmVhZEtleSA6CisgID9oOmhhbmRsZSAtPiB1bml0IC0+IGludDY0IG9wdGlvbiA9ICJicmxhcGltbF9yZWFkS2V5IgorZXh0ZXJuYWwgd2FpdEtleSA6CisgID9oOmhhbmRsZSAtPiB1bml0IC0+IGludDY0ID0gImJybGFwaW1sX3dhaXRLZXkiCitleHRlcm5hbCByZWFkS2V5V2l0aFRpbWVvdXQgOgorICA/aDpoYW5kbGUgLT4gaW50IC0+IGludDY0IG9wdGlvbiA9ICJicmxhcGltbF9yZWFkS2V5V2l0aFRpbWVvdXQiCisKK3R5cGUgZXhwYW5kZWRLZXlDb2RlID0geworICB0eXBlXyA6IGludDMyOworICBjb21tYW5kIDogaW50MzI7CisgIGFyZ3VtZW50IDogaW50MzI7CisgIGZsYWdzIDogaW50MzIKK30KKworZXh0ZXJuYWwgZXhwYW5kS2V5Q29kZSA6CisgID9oOmhhbmRsZSAtPiBpbnQ2NCAtPiBleHBhbmRlZEtleUNvZGUgPSAiYnJsYXBpbWxfZXhwYW5kS2V5Q29kZSIKKwordHlwZSByYW5nZVR5cGUgPQorICB8IFJUX2FsbAorICB8IFJUX3R5cGUKKyAgfCBSVF9jb21tYW5kCisgIHwgUlRfa2V5CisgIHwgUlRfY29kZQorCitleHRlcm5hbCBpZ25vcmVLZXlzIDoKKyAgP2g6aGFuZGxlIC0+IHJhbmdlVHlwZSAtPiBpbnQ2NCBhcnJheSAtPiB1bml0ID0gImJybGFwaW1sX2lnbm9yZUtleXMiCitleHRlcm5hbCBhY2NlcHRLZXlzIDoKKyAgP2g6aGFuZGxlIC0+IHJhbmdlVHlwZSAtPiBpbnQ2NCBhcnJheSAtPiB1bml0ID0gImJybGFwaW1sX2FjY2VwdEtleXMiCitleHRlcm5hbCBpZ25vcmVBbGxLZXlzIDoKKyAgP2g6aGFuZGxlIC0+IHVuaXQgPSAiYnJsYXBpbWxfaWdub3JlQWxsS2V5cyIKK2V4dGVybmFsIGFjY2VwdEFsbEtleXMgOgorICA/aDpoYW5kbGUgLT4gdW5pdCA9ICJicmxhcGltbF9hY2NlcHRBbGxLZXlzIiAgCitleHRlcm5hbCBpZ25vcmVLZXlSYW5nZXMgOgorICA/aDpoYW5kbGUgLT4gKGludDY0ICogaW50NjQpIGFycmF5IC0+IHVuaXQgPSAiYnJsYXBpbWxfaWdub3JlS2V5UmFuZ2VzIgorZXh0ZXJuYWwgYWNjZXB0S2V5UmFuZ2VzIDoKKyAgP2g6aGFuZGxlIC0+IChpbnQ2NCAqIGludDY0KSBhcnJheSAtPiB1bml0ID0gImJybGFwaW1sX2FjY2VwdEtleVJhbmdlcyIKKworZXh0ZXJuYWwgZW50ZXJSYXdNb2RlIDoKKyAgP2g6aGFuZGxlIC0+IHN0cmluZyAtPiB1bml0ID0gImJybGFwaW1sX2VudGVyUmF3TW9kZSIKK2V4dGVybmFsIGxlYXZlUmF3TW9kZSA6CisgID9oOmhhbmRsZSAtPiB1bml0IC0+IHVuaXQgPSAiYnJsYXBpbWxfbGVhdmVSYXdNb2RlIgorZXh0ZXJuYWwgc2VuZFJhdyA6CisgID9oOmhhbmRsZSAtPiBzdHJpbmcgLT4gaW50ID0gImJybGFwaW1sX3NlbmRSYXciCitleHRlcm5hbCByZWN2UmF3IDoKKyAgP2g6aGFuZGxlIC0+IHVuaXQgLT4gc3RyaW5nID0gImJybGFwaW1sX3JlY3ZSYXciCisKK2V4dGVybmFsIHN1c3BlbmREcml2ZXIgOgorICA/aDpoYW5kbGUgLT4gc3RyaW5nIC0+IHVuaXQgPSAiYnJsYXBpbWxfc3VzcGVuZERyaXZlciIKK2V4dGVybmFsIHJlc3VtZURyaXZlciA6CisgID9oOmhhbmRsZSAtPiB1bml0IC0+IHVuaXQgPSAiYnJsYXBpbWxfcmVzdW1lRHJpdmVyIgorCittb2R1bGUgdHlwZSBLRVkgPSBzaWcKKyAgdHlwZSBrZXkKKyAgdmFsIGtleV9vZl9pbnQ2NCA6IGludDY0IC0+IGtleQorICB2YWwgaW50NjRfb2Zfa2V5IDoga2V5IC0+IGludDY0CitlbmQKKworbW9kdWxlIE1ha2VLZXlIYW5kbGVycyAoTTEgOiBLRVkpIDogc2lnCisgIHR5cGUga2V5ID0gTTEua2V5CisgIHZhbCByZWFkS2V5IDogP2g6aGFuZGxlIC0+IHVuaXQgLT4ga2V5IG9wdGlvbgorICB2YWwgd2FpdEtleSA6ID9oOmhhbmRsZSAtPiB1bml0IC0+IGtleQorCisgIHZhbCBpZ25vcmVLZXlzIDogP2g6aGFuZGxlIC0+IHJhbmdlVHlwZSAtPiBrZXkgYXJyYXkgLT4gdW5pdAorICB2YWwgYWNjZXB0S2V5cyA6ID9oOmhhbmRsZSAtPiByYW5nZVR5cGUgLT4ga2V5IGFycmF5IC0+IHVuaXQKKyAgdmFsIGlnbm9yZUtleVJhbmdlcyA6ID9oOmhhbmRsZSAtPiAoa2V5ICoga2V5KSBhcnJheSAtPiB1bml0CisgIHZhbCBhY2NlcHRLZXlSYW5nZXMgOiA/aDpoYW5kbGUgLT4gKGtleSAqIGtleSkgYXJyYXkgLT4gdW5pdAorZW5kCmRpZmYgLS1naXQgYS9CaW5kaW5ncy9QeXRob24vTWFrZWZpbGUuaW4gYi9CaW5kaW5ncy9QeXRob24vTWFrZWZpbGUuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzViY2Y2MgotLS0gL2Rldi9udWxsCisrKyBiL0JpbmRpbmdzL1B5dGhvbi9NYWtlZmlsZS5pbgpAQCAtMCwwICsxLDg0IEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIGxpYmJybGFwaSAtIEEgbGlicmFyeSBwcm92aWRpbmcgYWNjZXNzIHRvIGJyYWlsbGUgdGVybWluYWxzIGZvciBhcHBsaWNhdGlvbnMuCisjCisjIENvcHlyaWdodCAoQykgMjAwNS0yMDIzIGJ5CisjICAgQWxleGlzIFJvYmVydCA8YWxleGlzc29mdEBmcmVlLmZyPgorIyAgIFNhbXVlbCBUaGliYXVsdCA8U2FtdWVsLlRoaWJhdWx0QGVucy1seW9uLm9yZz4KKyMKKyMgbGliYnJsYXBpIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitpbmNsdWRlICQoU1JDX1RPUCliaW5kaW5ncy5taworCitQWVRIT05fT0sgPSBAUFlUSE9OX09LQAorUFlUSE9OID0gQFBZVEhPTkAKK1BZVEhPTl9WRVJTSU9OID0gQFBZVEhPTl9WRVJTSU9OQAorUFlUSE9OX0NQUEZMQUdTID0gQFBZVEhPTl9DUFBGTEFHU0AKK1BZVEhPTl9MSUJTID0gQFBZVEhPTl9MSUJTQAorUFlUSE9OX0VYVFJBX0xJQlMgPSBAUFlUSE9OX0VYVFJBX0xJQlNACitQWVRIT05fRVhUUkFfTERGTEFHUyA9IEBQWVRIT05fRVhUUkFfTERGTEFHU0AKK1BZVEhPTl9TSVRFX1BLRyA9IEBQWVRIT05fU0lURV9QS0dACisKK0NZVEhPTiA9IEBDWVRIT05ACitDWVRIT05fQ0ZMQUdTID0gQENZVEhPTl9DRkxBR1NACisKK1BZVEhPTl9ERVNURElSID0gJChJTlNUQUxMX1JPT1QpCitQWVRIT05fUFJFRklYID0KKworUFlUSE9OX01PRFVMRSA9ICQoQVBJX05BTUUpCitQWVRIT05fQVBJID0gJChQWVRIT05fTU9EVUxFKS4kKExJQl9FWFQpCisKK1Zfc2V0dXBfICA9ICQoVl9zZXR1cF8wKQorVl9zZXR1cF8wID0gLS1xdWlldAorVl9zZXR1cF8xID0gLS12ZXJib3NlCitWX3NldHVwICAgPSAkKFZfc2V0dXBfJChWKSkKKworSU5TVEFMTEVEX0ZJTEVTID0gaW5zdGFsbGVkLWZpbGVzCisKK2FsbDogJChQWVRIT05fQVBJKQorCiskKFBZVEhPTl9BUEkpOiBicmxhcGkuYXV0by5jICQoQVBJX0hEUlMpIHwgJChJTlNUQUxMRURfRklMRVMpIGJybGFwaQorCXNldCAtLSAkKFZfc2V0dXApIGJ1aWxkIC0tYnVpbGQtdGVtcCAuOyBcCisJWyAiQGhvc3Rfb3NAIiAhPSAibWluZ3czMiIgXSB8fCBzZXQgLS0gIiQke0B9IiAtLWNvbXBpbGVyIG1pbmd3MzI7IFwKKwkiJChQWVRIT04pIiAuL3NldHVwLnB5ICIkJHtAfSIKKwlbICJAaG9zdF9vc0AiICE9ICJtaW5ndzMyIiBdIHx8ICIkKFBZVEhPTikiIC4vc2V0dXAucHkgJChWX3NldHVwKSBiZGlzdF93aW5pbnN0IC0tc2tpcC1idWlsZAorCiskKElOU1RBTExFRF9GSUxFUyk6CisJdG91Y2ggJChJTlNUQUxMRURfRklMRVMpCisKK2JybGFwaS5hdXRvLmM6ICQoU1JDX0RJUikvYnJsYXBpLnB5eCAkKFNSQ19ESVIpL2NfYnJsYXBpLnB4ZCBjb25zdGFudHMuYXV0by5weXgKKwkiJChDWVRIT04pIiAtJChQWVRIT05fVkVSU0lPTikgLUkuIC1YIGVtYmVkc2lnbmF0dXJlPVRydWUgLW8gJEAgJChTUkNfRElSKS9icmxhcGkucHl4CisKK2NvbnN0YW50cy5hdXRvLnB5eDogJChDT05TVEFOVFNfREVQRU5ERU5DSUVTKQorCSQoQVdLKSAkKENPTlNUQU5UU19BUkdVTUVOVFMpID4kQAorCitkb2M6ICQoUFlUSE9OX0FQSSkKKwlMRF9QUkVMT0FEPSQoQVBJX0xJQikgIiQoUFlUSE9OKSIgJChTUkNfRElSKS9ta2RvYy5weSAkKFBZVEhPTl9NT0RVTEUpCisKK2luc3RhbGw6IGFsbAorCXNldCAtLSAkKFZfc2V0dXApIGluc3RhbGwgLS1za2lwLWJ1aWxkIC0tcmVjb3JkICIkKElOU1RBTExFRF9GSUxFUykiOyBcCisJWyAteiAiJChQWVRIT05fREVTVERJUikiIF0gfHwgc2V0IC0tICIkJHtAfSIgLS1yb290ICIkKFBZVEhPTl9ERVNURElSKSI7IFwKKwlbIC16ICIkKFBZVEhPTl9QUkVGSVgpIiBdIHx8IHNldCAtLSAiJCR7QH0iIC0tcHJlZml4ICIkKFBZVEhPTl9QUkVGSVgpIjsgXAorCSIkKFBZVEhPTikiIC4vc2V0dXAucHkgIiQke0B9IgorCS1ybSAtZiAtciAtLSBCcmxhcGkuZWdnLWluZm8KKwordW5pbnN0YWxsOgorCVsgISAtZiAiJChJTlNUQUxMRURfRklMRVMpIiBdIHx8IHJtIC1mIC0tIGAkKEFXSykgJ3twcmludGYgIiVzJXMgIiwgIiQoUFlUSE9OX0RFU1RESVIpIiwgJCQwfScgIiQoSU5TVEFMTEVEX0ZJTEVTKSJgCisKK2NsZWFuOjoKKwktcm0gLWYgLS0gJChQWVRIT05fQVBJKSAqLmF1dG8uKiAqLmh0bWwgIiQoSU5TVEFMTEVEX0ZJTEVTKSIKKwktcm0gLWYgLXIgLS0gYnVpbGQKKwktcm0gLWYgLXIgLS0gZGlzdAorCS1ybSAtZiAtciAtLSBSZWxlYXNlCisKK2Rpc3RjbGVhbjo6CisJLXJtIC1mIC0tIHNldHVwLnB5CmRpZmYgLS1naXQgYS9CaW5kaW5ncy9QeXRob24vYXBpdGVzdCBiL0JpbmRpbmdzL1B5dGhvbi9hcGl0ZXN0Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmQxODQ4ZTEKLS0tIC9kZXYvbnVsbAorKysgYi9CaW5kaW5ncy9QeXRob24vYXBpdGVzdApAQCAtMCwwICsxLDIxIEBACisjIS9iaW4vYmFzaAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBsaWJicmxhcGkgLSBBIGxpYnJhcnkgcHJvdmlkaW5nIGFjY2VzcyB0byBicmFpbGxlIHRlcm1pbmFscyBmb3IgYXBwbGljYXRpb25zLgorIworIyBDb3B5cmlnaHQgKEMpIDIwMDYtMjAyMyBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+CisjCisjIGxpYmJybGFwaSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisjCisjIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyMgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorIyBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyMKKyMgV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworIworIyBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworLiAiJHswJS8qfS8uLi8uLi9hcGl0ZXN0LnNoIgorZXhlYyBweXRob24gIiR7cHJvZ3JhbURpcmVjdG9yeX0vJHtwcm9ncmFtTmFtZX0ucHkiICIke0B9IgorZXhpdCAiJHs/fSIKZGlmZiAtLWdpdCBhL0JpbmRpbmdzL1B5dGhvbi9hcGl0ZXN0LnB5IGIvQmluZGluZ3MvUHl0aG9uL2FwaXRlc3QucHkKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMWM4ZDg3YwotLS0gL2Rldi9udWxsCisrKyBiL0JpbmRpbmdzL1B5dGhvbi9hcGl0ZXN0LnB5CkBAIC0wLDAgKzEsMTM1IEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisjICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorIworIyBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisjCisjIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisjCisjIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyMgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorIyBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyMKKyMgV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworIworIyBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworaW1wb3J0IGN0eXBlcworaW1wb3J0IG9zCitpbXBvcnQgc3lzCitpbXBvcnQgc3lzY29uZmlnCitpbXBvcnQgdGltZQorCitkZWYgZ2V0UHJvZ3JhbU5hbWUgKCk6CisgIHJldHVybiBvcy5wYXRoLmJhc2VuYW1lKHN5cy5hcmd2WzBdKQorCitkZWYgbG9nTWVzc2FnZSAobWVzc2FnZSwgZmlsZT1zeXMuc3RkZXJyLCBsYWJlbD1nZXRQcm9ncmFtTmFtZSgpKToKKyAgZmlsZS53cml0ZSgobGFiZWwgKyAiOiAiICsgbWVzc2FnZSArICJcbiIpKQorICBmaWxlLmZsdXNoKCkKKworZGVmIGdldEJ1aWxkRGlyZWN0b3J5IChkaXJlY3RvcnkpOgorICBuYW1lID0gIntwcmVmaXh9LntwbGF0Zm9ybX0te3ZlcnNpb25bMF19Lnt2ZXJzaW9uWzFdfSIuZm9ybWF0KAorICAgIHByZWZpeCA9IGRpcmVjdG9yeSwKKyAgICBwbGF0Zm9ybSA9IHN5c2NvbmZpZy5nZXRfcGxhdGZvcm0oKSwKKyAgICB2ZXJzaW9uID0gc3lzLnZlcnNpb25faW5mbworICApCisKKyAgcmV0dXJuIG9zLnBhdGguam9pbihvcy5nZXRjd2QoKSwgImJ1aWxkIiwgbmFtZSkKKworZGVmIGdldExpYnJhcnlEaXJlY3RvcnkgKCk6CisgIHJldHVybiBvcy5wYXRoLmpvaW4ob3MuZ2V0Y3dkKCksICIuLiIsICIuLiIsICJQcm9ncmFtcyIpCisKK2RlZiBsb2FkTGlicmFyeSAoZGlyZWN0b3J5LCBuYW1lKToKKyAgcGxhdGZvcm0gPSBzeXNjb25maWcuZ2V0X3BsYXRmb3JtKCkKKworICBpZiBwbGF0Zm9ybSA9PSAid2luMzIiOgorICAgIHBhdHRlcm4gPSBuYW1lICsgIi0qLmRsbCIKKworICAgIGltcG9ydCBmbm1hdGNoCisgICAgbmFtZXMgPSBbbmFtZQorICAgICAgZm9yIG5hbWUgaW4gb3MubGlzdGRpcihkaXJlY3RvcnkpCisgICAgICBpZiBmbm1hdGNoLmZubWF0Y2gobmFtZSwgcGF0dGVybikKKyAgICBdCisKKyAgICByZXR1cm4gY3R5cGVzLldpbkRMTChvcy5wYXRoLmpvaW4oZGlyZWN0b3J5LCBuYW1lc1swXSkpCisKKyAgcmV0dXJuIGN0eXBlcy5DRExMKG9zLnBhdGguam9pbihkaXJlY3RvcnksICgibGliIiArIG5hbWUgKyAiLnNvIikpKQorCitzeXMucGF0aC5pbnNlcnQoMCwgZ2V0QnVpbGREaXJlY3RvcnkoImxpYiIpKQorbGlicmFyeSA9IGxvYWRMaWJyYXJ5KGdldExpYnJhcnlEaXJlY3RvcnkoKSwgImJybGFwaSIpCitpbXBvcnQgYnJsYXBpCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgIGltcG9ydCBlcnJubworCisgIGRlZiB3cml0ZVByb3BlcnR5IChuYW1lLCB2YWx1ZSk6CisgICAgdHJ5OgorICAgICAgdmFsdWUgPSB2YWx1ZS5kZWNvZGUoInV0Zi04IikKKyAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICBwYXNzCisKKyAgICBzeXMuc3Rkb3V0LndyaXRlKG5hbWUgKyAiOiAiICsgdmFsdWUgKyAiXG4iKQorCisgIHdyaXRlUHJvcGVydHkoIkJybEFQSSBWZXJzaW9uIiwgIi4iLmpvaW4obWFwKHN0ciwgYnJsYXBpLmdldExpYnJhcnlWZXJzaW9uKCkpKSkKKworICB0cnk6CisgICAgYnJsID0gYnJsYXBpLkNvbm5lY3Rpb24oKQorCisgICAgdHJ5OgorICAgICAgd3JpdGVQcm9wZXJ0eSgiRmlsZSBEZXNjcmlwdG9yIiwgc3RyKGJybC5maWxlRGVzY3JpcHRvcikpCisgICAgICB3cml0ZVByb3BlcnR5KCJTZXJ2ZXIgSG9zdCIsIGJybC5ob3N0KQorICAgICAgd3JpdGVQcm9wZXJ0eSgiQXV0aG9yaXphdGlvbiBTY2hlbWVzIiwgYnJsLmF1dGgpCisgICAgICB3cml0ZVByb3BlcnR5KCJEcml2ZXIgTmFtZSIsIGJybC5kcml2ZXJOYW1lKQorICAgICAgd3JpdGVQcm9wZXJ0eSgiTW9kZWwgSWRlbnRpZmllciIsIGJybC5tb2RlbElkZW50aWZpZXIpCisgICAgICB3cml0ZVByb3BlcnR5KCJEaXNwbGF5IFdpZHRoIiwgc3RyKGJybC5kaXNwbGF5U2l6ZVswXSkpCisgICAgICB3cml0ZVByb3BlcnR5KCJEaXNwbGF5IEhlaWdodCIsIHN0cihicmwuZGlzcGxheVNpemVbMV0pKQorCisgICAgICBicmwuZW50ZXJUdHlNb2RlKCkKKyAgICAgIHRyeToKKyAgICAgICAgdGltZW91dCA9IDEwCisgICAgICAgIGJybC53cml0ZVRleHQoInByZXNzIGtleXMgKHRpbWVvdXQgaXMgJWQgc2Vjb25kcykiICUgKHRpbWVvdXQsICkpCisKKyAgICAgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgICBjb2RlID0gYnJsLnJlYWRLZXlXaXRoVGltZW91dCh0aW1lb3V0ICogMTAwMCkKKyAgICAgICAgICBpZiBub3QgY29kZTogYnJlYWsKKworICAgICAgICAgIHByb3BlcnRpZXMgPSBicmxhcGkuZGVzY3JpYmVLZXlDb2RlKGNvZGUpCisgICAgICAgICAgcHJvcGVydGllc1siY29kZSJdID0gIjBYJVgiICUgY29kZQorCisgICAgICAgICAgZm9yIG5hbWUgaW4gKCJmbGFncyIsICk6CisgICAgICAgICAgICBwcm9wZXJ0aWVzW25hbWVdID0gIiwiLmpvaW4ocHJvcGVydGllc1tuYW1lXSkKKworICAgICAgICAgIGZvciBwcm9wZXJ0eSBpbiAoCisgICAgICAgICAgICAoImNvbW1hbmQiICwgImNtZCIpLAorICAgICAgICAgICAgKCJhcmd1bWVudCIsICJhcmciKSwKKyAgICAgICAgICAgICgiZmxhZ3MiICAgLCAiZmxnIiksCisgICAgICAgICAgKToKKyAgICAgICAgICAgIChvbGROYW1lLCBuZXdOYW1lKSA9IHByb3BlcnR5CisgICAgICAgICAgICBwcm9wZXJ0aWVzW25ld05hbWVdID0gcHJvcGVydGllc1tvbGROYW1lXQorICAgICAgICAgICAgZGVsIHByb3BlcnRpZXNbb2xkTmFtZV0KKworICAgICAgICAgIG5hbWVzID0gKCJjb2RlIiwgInR5cGUiLCAiY21kIiwgImFyZyIsICJmbGciKQorICAgICAgICAgIHZhbHVlcyA9IG1hcChsYW1iZGEgbmFtZTogKCIlcz0lcyIgJSAobmFtZSwgc3RyKHByb3BlcnRpZXNbbmFtZV0pKSksIG5hbWVzKQorCisgICAgICAgICAgdGV4dCA9ICIgIi5qb2luKHZhbHVlcykKKyAgICAgICAgICBicmwud3JpdGVUZXh0KHRleHQpCisgICAgICAgICAgd3JpdGVQcm9wZXJ0eSgiS2V5IiwgdGV4dCk7CisKKyAgICAgIGZpbmFsbHk6CisgICAgICAgIGJybC5sZWF2ZVR0eU1vZGUoKQorICAgIGZpbmFsbHk6CisgICAgICBicmwuY2xvc2VDb25uZWN0aW9uKCkKKyAgZXhjZXB0IGJybGFwaS5Db25uZWN0aW9uRXJyb3IgYXMgZToKKyAgICBpZiBlLmJybGVycm5vID09IGJybGFwaS5FUlJPUl9DT05OUkVGVVNFRDoKKyAgICAgIGxvZ01lc3NhZ2UoIkNvbm5lY3Rpb24gdG8gJXMgcmVmdXNlZC4gQlJMVFRZIGlzIHRvbyBidXN5Li4uIiAlIGUuaG9zdCkKKyAgICBlbGlmIGUuYnJsZXJybm8gPT0gYnJsYXBpLkVSUk9SX0FVVEhFTlRJQ0FUSU9OOgorICAgICAgbG9nTWVzc2FnZSgiQXV0aGVudGljYXRpb24gd2l0aCAlcyBmYWlsZWQuIFBsZWFzZSBjaGVjayB0aGUgcGVybWlzc2lvbnMgb2YgJXMiICUgKGUuaG9zdCwgZS5hdXRoKSkKKyAgICBlbGlmIGUuYnJsZXJybm8gPT0gYnJsYXBpLkVSUk9SX0xJQkNFUlIgYW5kIChlLmxpYmNlcnJubyA9PSBlcnJuby5FQ09OTlJFRlVTRUQgb3IgZS5saWJjZXJybm8gPT0gZXJybm8uRU5PRU5UKToKKyAgICAgIGxvZ01lc3NhZ2UoIkNvbm5lY3Rpb24gdG8gJXMgZmFpbGVkLiBJcyBCUkxUVFkgcmVhbGx5IHJ1bm5pbmc/IiAlIChlLmhvc3QpKQorICAgIGVsc2U6CisgICAgICBsb2dNZXNzYWdlKCJDb25uZWN0aW9uIHRvIEJSTFRUWSBhdCAlcyBmYWlsZWQ6ICIgJSAoZS5ob3N0KSkKKyAgICBwcmludChlKQorICAgIHByaW50KGUuYnJsZXJybm8pCisgICAgcHJpbnQoZS5saWJjZXJybm8pCmRpZmYgLS1naXQgYS9CaW5kaW5ncy9QeXRob24vYmluZGluZ3MuYyBiL0JpbmRpbmdzL1B5dGhvbi9iaW5kaW5ncy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU1ZjIzMDQKLS0tIC9kZXYvbnVsbAorKysgYi9CaW5kaW5ncy9QeXRob24vYmluZGluZ3MuYwpAQCAtMCwwICsxLDE3MCBAQAorLyoKKyAqIGxpYmJybGFwaSAtIEEgbGlicmFyeSBwcm92aWRpbmcgYWNjZXNzIHRvIGJyYWlsbGUgdGVybWluYWxzIGZvciBhcHBsaWNhdGlvbnMuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMjMgYnkKKyAqICAgQWxleGlzIFJvYmVydCA8YWxleGlzc29mdEBmcmVlLmZyPgorICogICBTYW11ZWwgVGhpYmF1bHQgPFNhbXVlbC5UaGliYXVsdEBlbnMtbHlvbi5vcmc+CisgKgorICogbGliYnJsYXBpIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKKy8qIGJpbmRpbmdzLmMgcHJvdmlkZXMgaW5pdGlhbGl6ZWQgdmFyaWFibGVzIGFuZCBicmxhcGkgZXhjZXB0aW9uIGhhbmRsZXIgdG8KKyAqIHRoZSBQeXRob24gYmluZGluZ3MgKi8KKworCisvKiBpbmNsdWRlIFB5dGhvbi5oIGZpcnN0IGluIG9yZGVyIHRvIHByZXZlbnQgYSByZWRlZmluZSBvZiBfUE9TSVhfQ19TT1VSQ0UgKi8KKyNpbmNsdWRlIDxQeXRob24uaD4KKworI2luY2x1ZGUgImJybGFwaS5oIgorCisvKiBhIGtsdWRnZSB0byBnZXQgYXJvdW5kIGEgYnJva2VuIE1pbkdXIDxwdGhyZWFkLmg+IGhlYWRlciAqLworI2lmZGVmIF9fTUlOR1czMl9fCisjaWZkZWYgX19zdHJ1Y3RfdGltZXNwZWNfZGVmaW5lZAorI2lmbmRlZiBfVElNRVNQRUNfREVGSU5FRAorI2RlZmluZSBfVElNRVNQRUNfREVGSU5FRAorI2VuZGlmIC8qIF9USU1FU1BFQ19ERUZJTkVEICovCisjZW5kaWYgLyogX19zdHJ1Y3RfdGltZXNwZWNfZGVmaW5lZCAqLworI2VuZGlmIC8qIF9fTUlOR1czMl9fICovCisKKyNpbmNsdWRlIDxwdGhyZWFkLmg+CisKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworI2luY2x1ZGUgImJpbmRpbmdzLmgiCisKK2NvbnN0IGJybGFwaV93cml0ZUFyZ3VtZW50c190IGJybGFwaV93cml0ZUFyZ3VtZW50c19pbml0aWFsaXplZCA9IEJSTEFQSV9XUklURUFSR1VNRU5UU19JTklUSUFMSVpFUjsKKworc3RhdGljIHB0aHJlYWRfb25jZV90IGJybGFwaV9wcm90b2NvbEV4Y2VwdGlvbk9uY2UgPSBQVEhSRUFEX09OQ0VfSU5JVDsKK3N0YXRpYyBwdGhyZWFkX2tleV90IGJybGFwaV9wcm90b2NvbEV4Y2VwdGlvbktleTsKK3N0YXRpYyBjaGFyICpicmxhcGlfcHJvdG9jb2xFeGNlcHRpb25TaW5nbGVUaHJlYWQ7CisKKyNpZiBkZWZpbmVkKFdJTkRPV1MpCisKKyNlbGlmIGRlZmluZWQoX19HTlVDX18pIHx8IGRlZmluZWQoX19zdW5fXykKKyNwcmFnbWEgd2VhayBwdGhyZWFkX29uY2UKKyNwcmFnbWEgd2VhayBwdGhyZWFkX2tleV9jcmVhdGUKKyNwcmFnbWEgd2VhayBwdGhyZWFkX2dldHNwZWNpZmljCisjcHJhZ21hIHdlYWsgcHRocmVhZF9zZXRzcGVjaWZpYworI2VuZGlmIC8qIHdlYWsgZXh0ZXJuYWwgcmVmZXJlbmNlcyAqLworCitzdGF0aWMgdm9pZCBCUkxBUElfU1REQ0FMTCBicmxhcGlfcHl0aG9uRXhjZXB0aW9uSGFuZGxlcihicmxhcGlfaGFuZGxlX3QgKmhhbmRsZSwgaW50IGVycm9yLCBicmxhcGlfcGFja2V0VHlwZV90IHR5cGUsIGNvbnN0IHZvaWQgKnBhY2tldCwgc2l6ZV90IHNpemUpCit7CisgIGNoYXIgc3RyWzEyOF07CisKKyAgYnJsYXBpX19zdHJleGNlcHRpb24oaGFuZGxlLCBzdHIsIHNpemVvZihzdHIpLCBlcnJvciwgdHlwZSwgcGFja2V0LCBzaXplKTsKKyNpZm5kZWYgV0lORE9XUworICBpZiAoIShwdGhyZWFkX29uY2UgJiYgcHRocmVhZF9rZXlfY3JlYXRlKSkKKyAgICBicmxhcGlfcHJvdG9jb2xFeGNlcHRpb25TaW5nbGVUaHJlYWQgPSBzdHJkdXAoc3RyKTsKKyAgZWxzZQorI2VuZGlmCisgICAgcHRocmVhZF9zZXRzcGVjaWZpYyhicmxhcGlfcHJvdG9jb2xFeGNlcHRpb25LZXksIHN0cmR1cChzdHIpKTsKK30KKworY2hhciAqYnJsYXBpX3Byb3RvY29sRXhjZXB0aW9uKHZvaWQpCit7CisgIGNoYXIgKmV4Y2VwdGlvbjsKKyNpZm5kZWYgV0lORE9XUworICBpZiAoIShwdGhyZWFkX29uY2UgJiYgcHRocmVhZF9rZXlfY3JlYXRlKSkgeworICAgIGV4Y2VwdGlvbiA9IGJybGFwaV9wcm90b2NvbEV4Y2VwdGlvblNpbmdsZVRocmVhZDsKKyAgICBicmxhcGlfcHJvdG9jb2xFeGNlcHRpb25TaW5nbGVUaHJlYWQgPSBOVUxMOworICAgIHJldHVybiBleGNlcHRpb247CisgIH0gZWxzZQorI2VuZGlmCisgIHsKKyAgICBleGNlcHRpb24gPSBwdGhyZWFkX2dldHNwZWNpZmljKGJybGFwaV9wcm90b2NvbEV4Y2VwdGlvbktleSk7CisgICAgcHRocmVhZF9zZXRzcGVjaWZpYyhicmxhcGlfcHJvdG9jb2xFeGNlcHRpb25LZXksIE5VTEwpOworICAgIHJldHVybiBleGNlcHRpb247CisgIH0KK30KKworc3RhdGljIHZvaWQgZG9fYnJsYXBpX3Byb3RvY29sRXhjZXB0aW9uSW5pdCh2b2lkKQoreworICBwdGhyZWFkX2tleV9jcmVhdGUoJmJybGFwaV9wcm90b2NvbEV4Y2VwdGlvbktleSwgZnJlZSk7Cit9CisKK3ZvaWQgYnJsYXBpX3Byb3RvY29sRXhjZXB0aW9uSW5pdChicmxhcGlfaGFuZGxlX3QgKmhhbmRsZSkgeworI2lmbmRlZiBXSU5ET1dTCisgIGlmIChwdGhyZWFkX29uY2UgJiYgcHRocmVhZF9rZXlfY3JlYXRlKQorI2VuZGlmIC8qIFdJTkRPV1MgKi8KKyAgICBwdGhyZWFkX29uY2UoJmJybGFwaV9wcm90b2NvbEV4Y2VwdGlvbk9uY2UsIGRvX2JybGFwaV9wcm90b2NvbEV4Y2VwdGlvbkluaXQpOworCisgIGJybGFwaV9fc2V0RXhjZXB0aW9uSGFuZGxlcihoYW5kbGUsICZicmxhcGlfcHl0aG9uRXhjZXB0aW9uSGFuZGxlcik7Cit9CisKKy8qIGJybGFwaV9weXRob25fcGFyYW1ldGVyX2NhbGxiYWNrICovCisvKiBUaGlzIGlzIGNhbGxlZCBmcm9tIGJybGFwaSBmdW5jdGlvbnMgY2FsbGVkIGJ5IFB5dGhvbi4gV2UgcGFzcyB0aGUgY2FsbGJhY2sKKyAqIGRhdGEgYXMgc3VjaCBmb3IgYnJsYXBpLnB5eCcgY2FsbGJhY2sgdG8gdHJhbnNsYXRlIHRoZW0gaW50byBweXRob24gb2JqZWN0cworICovCitzdGF0aWMgdm9pZCBicmxhcGlfcHl0aG9uX3BhcmFtZXRlcl9jYWxsYmFjayhicmxhcGlfcGFyYW1fdCBwYXJhbWV0ZXIsIGJybGFwaV9wYXJhbV9zdWJwYXJhbV90IHN1YnBhcmFtLCBicmxhcGlfcGFyYW1fZmxhZ3NfdCBmbGFncywgdm9pZCAqcHJpdiwgY29uc3Qgdm9pZCAqZGF0YSwgc2l6ZV90IGxlbikKK3sKKyAgYnJsYXBpX3B5dGhvbl9wYXJhbUNhbGxiYWNrRGVzY3JpcHRvcl90ICpkZXNjciA9IHByaXY7CisgIFB5T2JqZWN0ICphcmdsaXN0LCAqcmVzdWx0OworICBQeUdJTFN0YXRlX1NUQVRFIGdzdGF0ZTsKKyAgYnJsYXBpX3B5dGhvbl9jYWxsYmFja0RhdGFfdCBjYWxsYmFja0RhdGEgPSB7CisgICAgLnBhcmFtZXRlciA9IHBhcmFtZXRlciwKKyAgICAuc3VicGFyYW0gPSBzdWJwYXJhbSwKKyAgICAuZmxhZ3MgPSBmbGFncywKKyAgICAuZGF0YSA9IGRhdGEsCisgICAgLmxlbiA9IGxlbiwKKyAgfTsKKworICBnc3RhdGUgPSBQeUdJTFN0YXRlX0Vuc3VyZSgpOworCisgIGFyZ2xpc3QgPSBQeV9CdWlsZFZhbHVlKCIoTCkiLCAobG9uZyBsb25nKSAodWludHB0cl90KSAmY2FsbGJhY2tEYXRhKTsKKworICByZXN1bHQgPSBQeU9iamVjdF9DYWxsT2JqZWN0KGRlc2NyLT5jYWxsYmFjaywgYXJnbGlzdCk7CisgIGlmIChyZXN1bHQgIT0gTlVMTCkKKyAgICBQeV9ERUNSRUYocmVzdWx0KTsKKworICBQeUdJTFN0YXRlX1JlbGVhc2UoZ3N0YXRlKTsKK30KKworYnJsYXBpX3B5dGhvbl9wYXJhbUNhbGxiYWNrRGVzY3JpcHRvcl90ICpicmxhcGlfcHl0aG9uX3dhdGNoUGFyYW1ldGVyKGJybGFwaV9oYW5kbGVfdCAqaGFuZGxlLCBicmxhcGlfcGFyYW1fdCBwYXJhbSwgYnJsYXBpX3BhcmFtX3N1YnBhcmFtX3Qgc3VicGFyYW0sIGJybGFwaV9wYXJhbV9mbGFnc190IGZsYWdzLCBQeU9iamVjdCAqZnVuYykKK3sKKyAgYnJsYXBpX3B5dGhvbl9wYXJhbUNhbGxiYWNrRGVzY3JpcHRvcl90ICpkZXNjcjsKKyAgYnJsYXBpX3BhcmFtQ2FsbGJhY2tEZXNjcmlwdG9yX3QgKmJybGFwaV9kZXNjcjsKKyAgUHlPYmplY3QgKnJlc3VsdDsKKworICBpZiAoIVB5Q2FsbGFibGVfQ2hlY2soZnVuYykpIHsKKyAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLCAicGFyYW1ldGVyIG11c3QgYmUgY2FsbGFibGUiKTsKKyAgICByZXR1cm4gTlVMTDsKKyAgfQorCisgIFB5X0lOQ1JFRihmdW5jKTsKKworICBkZXNjciA9IG1hbGxvYyhzaXplb2YoKmRlc2NyKSk7CisgIGRlc2NyLT5jYWxsYmFjayA9IGZ1bmM7CisKKyAgYnJsYXBpX2Rlc2NyID0gYnJsYXBpX193YXRjaFBhcmFtZXRlcihoYW5kbGUsIHBhcmFtLCBzdWJwYXJhbSwgZmxhZ3MsIGJybGFwaV9weXRob25fcGFyYW1ldGVyX2NhbGxiYWNrLCBkZXNjciwgTlVMTCwgMCk7CisKKyAgaWYgKCFicmxhcGlfZGVzY3IpIHsKKyAgICBmcmVlKGRlc2NyKTsKKyAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwgIndhdGNoaW5nIHBhcmFtZXRlciBmYWlsZWQiKTsKKyAgICByZXR1cm4gTlVMTDsKKyAgfQorCisgIGRlc2NyLT5icmxhcGlfZGVzY3IgPSBicmxhcGlfZGVzY3I7CisKKyAgcmV0dXJuIGRlc2NyOworfQorCitpbnQgYnJsYXBpX3B5dGhvbl91bndhdGNoUGFyYW1ldGVyKGJybGFwaV9oYW5kbGVfdCAqaGFuZGxlLCBicmxhcGlfcHl0aG9uX3BhcmFtQ2FsbGJhY2tEZXNjcmlwdG9yX3QgKmRlc2NyKQoreworICBpbnQgcmV0OworCisgIHJldCA9IGJybGFwaV9fdW53YXRjaFBhcmFtZXRlcihoYW5kbGUsIGRlc2NyLT5icmxhcGlfZGVzY3IpOworICBQeV9ERUNSRUYoZGVzY3ItPmNhbGxiYWNrKTsKKyAgZnJlZShkZXNjcik7CisKKyAgcmV0dXJuIHJldDsKK30KZGlmZiAtLWdpdCBhL0JpbmRpbmdzL1B5dGhvbi9iaW5kaW5ncy5oIGIvQmluZGluZ3MvUHl0aG9uL2JpbmRpbmdzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZThhNWE5NQotLS0gL2Rldi9udWxsCisrKyBiL0JpbmRpbmdzL1B5dGhvbi9iaW5kaW5ncy5oCkBAIC0wLDAgKzEsNDIgQEAKKy8qCisgKiBsaWJicmxhcGkgLSBBIGxpYnJhcnkgcHJvdmlkaW5nIGFjY2VzcyB0byBicmFpbGxlIHRlcm1pbmFscyBmb3IgYXBwbGljYXRpb25zLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNS0yMDIzIGJ5CisgKiAgIEFsZXhpcyBSb2JlcnQgPGFsZXhpc3NvZnRAZnJlZS5mcj4KKyAqICAgU2FtdWVsIFRoaWJhdWx0IDxTYW11ZWwuVGhpYmF1bHRAZW5zLWx5b24ub3JnPgorICoKKyAqIGxpYmJybGFwaSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorICoKKyAqIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyAqLworCisvKiBiaW5kaW5ncy5oIHByb3ZpZGVzIGluaXRpYWxpemVkIHZhcmlhYmxlcyB0byB0aGUgUHl0aG9uIGJpbmRpbmdzICovCisKKyNpbmNsdWRlICJicmxhcGkuaCIKKwordHlwZWRlZiBzdHJ1Y3QgeworICBicmxhcGlfcGFyYW1DYWxsYmFja0Rlc2NyaXB0b3JfdCBicmxhcGlfZGVzY3I7CisgIFB5T2JqZWN0ICpjYWxsYmFjazsKK30gYnJsYXBpX3B5dGhvbl9wYXJhbUNhbGxiYWNrRGVzY3JpcHRvcl90OworCit0eXBlZGVmIHN0cnVjdCB7CisgIGJybGFwaV9wYXJhbV90IHBhcmFtZXRlcjsKKyAgYnJsYXBpX3BhcmFtX3N1YnBhcmFtX3Qgc3VicGFyYW07CisgIGJybGFwaV9wYXJhbV9mbGFnc190IGZsYWdzOworICBjb25zdCB2b2lkICpkYXRhOworICBzaXplX3QgbGVuOworfSBicmxhcGlfcHl0aG9uX2NhbGxiYWNrRGF0YV90OworCitleHRlcm4gY29uc3QgYnJsYXBpX3dyaXRlQXJndW1lbnRzX3QgYnJsYXBpX3dyaXRlQXJndW1lbnRzX2luaXRpYWxpemVkOworZXh0ZXJuIGNoYXIgKmJybGFwaV9wcm90b2NvbEV4Y2VwdGlvbih2b2lkKTsKK2V4dGVybiB2b2lkIGJybGFwaV9wcm90b2NvbEV4Y2VwdGlvbkluaXQoYnJsYXBpX2hhbmRsZV90ICpoYW5kbGUpOworCitleHRlcm4gYnJsYXBpX3B5dGhvbl9wYXJhbUNhbGxiYWNrRGVzY3JpcHRvcl90ICpicmxhcGlfcHl0aG9uX3dhdGNoUGFyYW1ldGVyKGJybGFwaV9oYW5kbGVfdCAqaGFuZGxlLCBicmxhcGlfcGFyYW1fdCBwYXJhbSwgYnJsYXBpX3BhcmFtX3N1YnBhcmFtX3Qgc3VicGFyYW0sIGJybGFwaV9wYXJhbV9mbGFnc190IGZsYWdzLCBQeU9iamVjdCAqYXJncyk7CitleHRlcm4gaW50IGJybGFwaV9weXRob25fdW53YXRjaFBhcmFtZXRlcihicmxhcGlfaGFuZGxlX3QgKmhhbmRsZSwgYnJsYXBpX3B5dGhvbl9wYXJhbUNhbGxiYWNrRGVzY3JpcHRvcl90ICpkZXNjcik7CmRpZmYgLS1naXQgYS9CaW5kaW5ncy9QeXRob24vYmluZGluZ3MubTQgYi9CaW5kaW5ncy9QeXRob24vYmluZGluZ3MubTQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzlkMzdlMgotLS0gL2Rldi9udWxsCisrKyBiL0JpbmRpbmdzL1B5dGhvbi9iaW5kaW5ncy5tNApAQCAtMCwwICsxLDEyNiBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBsaWJicmxhcGkgLSBBIGxpYnJhcnkgcHJvdmlkaW5nIGFjY2VzcyB0byBicmFpbGxlIHRlcm1pbmFscyBmb3IgYXBwbGljYXRpb25zLgorIworIyBDb3B5cmlnaHQgKEMpIDIwMDUtMjAyMyBieQorIyAgIEFsZXhpcyBSb2JlcnQgPGFsZXhpc3NvZnRAZnJlZS5mcj4KKyMgICBTYW11ZWwgVGhpYmF1bHQgPFNhbXVlbC5UaGliYXVsdEBlbnMtbHlvbi5vcmc+CisjCisjIGxpYmJybGFwaSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisjCisjIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyMgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorIyBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyMKKyMgV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworIworIyBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworQUNfREVGVU4oW0JSTFRUWV9QWVRIT05fQklORElOR1NdLCBbZG5sCitQWVRIT05fT0s9dHJ1ZQorCisjIFN1cHByZXNzIGEgbmV3IHdhcm5pbmcgaW50cm9kdWNlZCBpbiBQeXRob24gMy42OgorIworIyAgICBQeXRob24gcnVudGltZSBpbml0aWFsaXplZCB3aXRoIExDX0NUWVBFPUMKKyMgICAgKGEgbG9jYWxlIHdpdGggZGVmYXVsdCBBU0NJSSBlbmNvZGluZyksCisjICAgIHdoaWNoIG1heSBjYXVzZSBVbmljb2RlIGNvbXBhdGliaWxpdHkgcHJvYmxlbXMuCisjICAgIFVzaW5nIEMuVVRGLTgsIEMudXRmOCwgb3IgVVRGLTggKGlmIGF2YWlsYWJsZSkKKyMgICAgYXMgYWx0ZXJuYXRpdmUgVW5pY29kZS1jb21wYXRpYmxlIGxvY2FsZXMgaXMgcmVjb21tZW5kZWQuCisjCitleHBvcnQgUFlUSE9OQ09FUkNFQ0xPQ0FMRT0wCisKK0FDX1BBVEhfUFJPR1MoW1BZVEhPTl0sIFtweXRob24zIHB5dGhvbiBweXRob24yXSwgW3B5dGhvbl0pCitpZiB0ZXN0IC1uICIke1BZVEhPTn0iCit0aGVuCisgICB0ZXN0IC1uICIke1BZVEhPTl9WRVJTSU9OfSIgfHwgeworICAgICAgQlJMVFRZX1BZVEhPTl9RVUVSWShbUFlUSE9OX1ZFUlNJT05dLCBbdmVyc2lvbl0pCisKKyAgICAgIHRlc3QgLW4gIiR7UFlUSE9OX1ZFUlNJT059IiB8fCB7CisgICAgICAgICBBQ19NU0dfV0FSTihbUHl0aG9uIHZlcnNpb24gbm90IGRlZmluZWRdKQorICAgICAgICAgUFlUSE9OX09LPWZhbHNlCisgICAgICB9CisgICB9CisgICBBQ19TVUJTVChbUFlUSE9OX1ZFUlNJT05dKQorCisgICB0ZXN0IC1uICIke1BZVEhPTl9DUFBGTEFHU30iIHx8IHsKKyAgICAgIEJSTFRUWV9QWVRIT05fUVVFUlkoW3B5dGhvbl9pbmNsdWRlX2RpcmVjdG9yeV0sIFtpbmNkaXJdKQorCisgICAgICBpZiB0ZXN0IC1uICIke3B5dGhvbl9pbmNsdWRlX2RpcmVjdG9yeX0iCisgICAgICB0aGVuCisgICAgICAgICBQWVRIT05fQ1BQRkxBR1M9Ii1JJHtweXRob25faW5jbHVkZV9kaXJlY3Rvcnl9IgorCisgICAgICAgICB0ZXN0IC1mICIke3B5dGhvbl9pbmNsdWRlX2RpcmVjdG9yeX0vUHl0aG9uLmgiIHx8IHsKKyAgICAgICAgICAgIEFDX01TR19XQVJOKFtQeXRob24gZGV2ZWxvcGVyIGVudmlyb25tZW50IG5vdCBpbnN0YWxsZWRdKQorICAgICAgICAgICAgUFlUSE9OX09LPWZhbHNlCisgICAgICAgICB9CisgICAgICBlbHNlCisgICAgICAgICBBQ19NU0dfV0FSTihbUHl0aG9uIGluY2x1ZGUgZGlyZWN0b3J5IG5vdCBmb3VuZF0pCisgICAgICAgICBQWVRIT05fT0s9ZmFsc2UKKyAgICAgIGZpCisgICB9CisgICBBQ19TVUJTVChbUFlUSE9OX0NQUEZMQUdTXSkKKworICAgdGVzdCAtbiAiJHtQWVRIT05fTElCU30iIHx8IHsKKyAgICAgIFBZVEhPTl9MSUJTPSItbHB5dGhvbiR7UFlUSE9OX1ZFUlNJT059IgorICAgICAgQlJMVFRZX1BZVEhPTl9RVUVSWShbcHl0aG9uX2xpYnJhcnlfZGlyZWN0b3J5XSwgW2xpYmRpcl0pCisKKyAgICAgIGlmIHRlc3QgLW4gIiR7cHl0aG9uX2xpYnJhcnlfZGlyZWN0b3J5fSIKKyAgICAgIHRoZW4KKyAgICAgICAgIFBZVEhPTl9MSUJTPSItTCR7cHl0aG9uX2xpYnJhcnlfZGlyZWN0b3J5fS9jb25maWcgJHtQWVRIT05fTElCU30iCisgICAgICBlbHNlCisgICAgICAgICBBQ19NU0dfV0FSTihbUHl0aG9uIGxpYnJhcnkgZGlyZWN0b3J5IG5vdCBmb3VuZF0pCisgICAgICAgICBQWVRIT05fT0s9ZmFsc2UKKyAgICAgIGZpCisgICB9CisgICBBQ19TVUJTVChbUFlUSE9OX0xJQlNdKQorCisgICB0ZXN0IC1uICIke1BZVEhPTl9FWFRSQV9MSUJTfSIgfHwgeworICAgICAgQlJMVFRZX1BZVEhPTl9RVUVSWShbUFlUSE9OX0VYVFJBX0xJQlNdLCBbbGlib3B0c10pCisgICB9CisgICBBQ19TVUJTVChbUFlUSE9OX0VYVFJBX0xJQlNdKQorCisgICB0ZXN0IC1uICIke1BZVEhPTl9FWFRSQV9MREZMQUdTfSIgfHwgeworICAgICAgQlJMVFRZX1BZVEhPTl9RVUVSWShbUFlUSE9OX0VYVFJBX0xERkxBR1NdLCBbbGlua29wdHNdKQorICAgfQorICAgQUNfU1VCU1QoW1BZVEhPTl9FWFRSQV9MREZMQUdTXSkKKworICAgdGVzdCAtbiAiJHtQWVRIT05fU0lURV9QS0d9IiB8fCB7CisgICAgICBCUkxUVFlfUFlUSE9OX1FVRVJZKFtQWVRIT05fU0lURV9QS0ddLCBbcGtnZGlyXSkKKworICAgICAgdGVzdCAtbiAiJHtQWVRIT05fU0lURV9QS0d9IiB8fCB7CisgICAgICAgICBBQ19NU0dfV0FSTihbUHl0aG9uIHBhY2thZ2VzIGRpcmVjdG9yeSBub3QgZm91bmRdKQorICAgICAgICAgUFlUSE9OX09LPWZhbHNlCisgICAgICB9CisgICB9CisgICBBQ19TVUJTVChbUFlUSE9OX1NJVEVfUEtHXSkKK2Vsc2UKKyAgIEFDX01TR19XQVJOKFtQeXRob24gaW50ZXJwcmV0ZXIgbm90IGZvdW5kXSkKKyAgIFBZVEhPTl9PSz1mYWxzZQorZmkKKworQUNfUEFUSF9QUk9HUyhbQ1lUSE9OXSwgW2N5dGhvbjMgY3l0aG9uXSkKK3Rlc3QgLW4gIiR7Q1lUSE9OfSIgfHwgeworICAgQUNfTVNHX1dBUk4oW0N5dGhvbiBjb21waWxlciBub3QgZm91bmRdKQorICAgUFlUSE9OX09LPWZhbHNlCit9CisKK2lmIHRlc3QgIiR7R0NDfSIgPSAieWVzIgordGhlbgorICAgQ1lUSE9OX0NGTEFHUz0iLVduby1wYXJlbnRoZXNlcyAtV25vLXVudXNlZCAtZm5vLXN0cmljdC1hbGlhc2luZyAtVV9QT1NJWF9DX1NPVVJDRSAtVV9YT1BFTl9TT1VSQ0UiCitlbHNlCisgICBjYXNlICIke2hvc3Rfb3N9IgorICAgaW4KKyAgICAgICopCisgICAgICAgICBDWVRIT05fQ0ZMQUdTPSIiCisgICAgICAgICA7OworICAgZXNhYworZmkKK0FDX1NVQlNUKFtDWVRIT05fQ0ZMQUdTXSkKKworQUNfU1VCU1QoW1BZVEhPTl9PS10pCitdKQorCitBQ19ERUZVTihbQlJMVFRZX1BZVEhPTl9RVUVSWV0sIFtkbmwKKyAgICQxPWAiJHtQWVRIT059IiAiJHtzcmNkaXJ9L1Rvb2xzL3B5dGhvbmNtZCIgJDJgCitdKQpkaWZmIC0tZ2l0IGEvQmluZGluZ3MvUHl0aG9uL2JybGFwaS5weXggYi9CaW5kaW5ncy9QeXRob24vYnJsYXBpLnB5eApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMTM2ODk1Ci0tLSAvZGV2L251bGwKKysrIGIvQmluZGluZ3MvUHl0aG9uL2JybGFwaS5weXgKQEAgLTAsMCArMSwxMTA5IEBACisiIiIKK1RoaXMgbW9kdWxlIGltcGxlbWVudHMgYSBzZXQgb2YgYmluZGluZ3MgZm9yIEJybEFQSSwgYSBicmFpbGxlIGJyaWRnZSBmb3IgYXBwbGljYXRpb25zLgorCitUaGUgcmVmZXJlbmNlIEMgQVBJIGRvY3VtZW50YXRpb24gaXMgYXZhaWxhYmxlIG9ubGluZSBodHRwOi8vYnJsdHR5LmFwcC9kb2MvQnJsQVBJcmVmLCBhcyB3ZWxsIGFzIGluIG1hbnVhbCBwYWdlcy4KKworVGhpcyBkb2N1bWVudGF0aW9uIGlzIG9ubHkgYSBweXRob24gaGVscGVyLCB5b3Ugc2hvdWxkIGFsc28gcmVhZCBDIG1hbnVhbCBwYWdlcy4KKworRXhhbXBsZSA6IAoraW1wb3J0IGJybGFwaQoraW1wb3J0IGVycm5vCitpbXBvcnQgWGxpYi5rZXlzeW1kZWYubWlzY2VsbGFueQordHJ5OgorICBiID0gYnJsYXBpLkNvbm5lY3Rpb24oKQorICBwcmludCgiU2VydmVyIHZlcnNpb24gIiArIHN0cihiLmdldFBhcmFtZXRlcihicmxhcGkuUEFSQU1fU0VSVkVSX1ZFUlNJT04sIDAsIGJybGFwaS5QQVJBTUZfR0xPQkFMKSkpCisgIHByaW50KCJEaXNwbGF5IHNpemUgIiArIHN0cihiLmdldFBhcmFtZXRlcihicmxhcGkuUEFSQU1fRElTUExBWV9TSVpFLCAwLCBicmxhcGkuUEFSQU1GX0dMT0JBTCkpKQorICBwcmludCgiRHJpdmVyICIgKyBiLmdldFBhcmFtZXRlcihicmxhcGkuUEFSQU1fRFJJVkVSX05BTUUsIDAsIGJybGFwaS5QQVJBTUZfR0xPQkFMKSkKKyAgcHJpbnQoIk1vZGVsICIgKyBiLmdldFBhcmFtZXRlcihicmxhcGkuUEFSQU1fREVWSUNFX01PREVMLCAwLCBicmxhcGkuUEFSQU1GX0dMT0JBTCkpCisKKyAgZm9yIGNtZCBpbiBiLmdldFBhcmFtZXRlcihicmxhcGkuUEFSQU1fQk9VTkRfQ09NTUFORF9LRVlDT0RFUywgMCwgYnJsYXBpLlBBUkFNRl9HTE9CQUwpOgorICAgIHByaW50KCJDb21tYW5kICV4IHNob3J0IG5hbWU6ICVzIiAlIChjbWQsIGIuZ2V0UGFyYW1ldGVyKGJybGFwaS5QQVJBTV9DT01NQU5EX0tFWUNPREVfTkFNRSwgY21kLCBicmxhcGkuUEFSQU1GX0dMT0JBTCkpKQorCisgIGZvciBrZXkgaW4gYi5nZXRQYXJhbWV0ZXIoYnJsYXBpLlBBUkFNX0RFRklORURfRFJJVkVSX0tFWUNPREVTLCAwLCBicmxhcGkuUEFSQU1GX0dMT0JBTCk6CisgICAgcHJpbnQoIktleSAleCBzaG9ydCBuYW1lOiAlcyIgJSAoa2V5LCBiLmdldFBhcmFtZXRlcihicmxhcGkuUEFSQU1fRFJJVkVSX0tFWUNPREVfTkFNRSwga2V5LCBicmxhcGkuUEFSQU1GX0dMT0JBTCkpKQorCisgICMgTWFrZSBvdXIgb3V0cHV0IG1vcmUgcHJpb3JpdGl6ZWQKKyAgYi5zZXRQYXJhbWV0ZXIoYnJsYXBpLlBBUkFNX0NMSUVOVF9QUklPUklUWSwgMCwgRmFsc2UsIDcwKQorCisgIGRlZiB1cGRhdGVfY2FsbGJhY2socGFyYW0sIHN1YnBhcmFtLCBmbGFncywgdmFsdWUpOgorICAgIHMgPSAiIgorICAgIGZvciBpIGluIHZhbHVlOgorICAgICAgcyArPSB1bmljaHIoMHgyODAwICsgb3JkKGkpKQorICAgIHByaW50KCJHb3Qgb3V0cHV0IHVwZGF0ZSAlcyIgJSBzKQorCisgIHAgPSBiLndhdGNoUGFyYW1ldGVyKGJybGFwaS5QQVJBTV9SRU5ERVJFRF9DRUxMUywgMCwgRmFsc2UsIHVwZGF0ZV9jYWxsYmFjaykKKworICBiLmVudGVyVHR5TW9kZSgpCisgIGIuaWdub3JlS2V5cyhicmxhcGkucmFuZ2VUeXBlX2FsbCxbMF0pCisKKyAgIyBBY2NlcHQgdGhlIGhvbWUsIHdpbmRvdyB1cCBhbmQgd2luZG93IGRvd24gYnJhaWxsZSBjb21tYW5kcworICBiLmFjY2VwdEtleXMoYnJsYXBpLnJhbmdlVHlwZV9jb21tYW5kLFticmxhcGkuS0VZX1RZUEVfQ01EfGJybGFwaS5LRVlfQ01EX0hPTUUsIGJybGFwaS5LRVlfVFlQRV9DTUR8YnJsYXBpLktFWV9DTURfV0lOVVAsIGJybGFwaS5LRVlfVFlQRV9DTUR8YnJsYXBpLktFWV9DTURfV0lORE5dKQorCisgICMgQWNjZXB0IHRoZSB0YWIga2V5CisgIGIuYWNjZXB0S2V5cyhicmxhcGkucmFuZ2VUeXBlX2tleSxbYnJsYXBpLktFWV9UWVBFX1NZTXxYbGliLmtleXN5bWRlZi5taXNjZWxsYW55LlhLX1RhYl0pCisKKyAgYi53cml0ZVRleHQoIlRyeWluZyB0byBnZXQgYSBrZXkgd2l0aGluIG9uZSBzZWNvbmQiKQorICBrZXkgPSBiLnJlYWRLZXlXaXRoVGltZW91dCgxMDAwKQorICBwcmludCgiZ290ICIgKyBzdHIoa2V5KSkKKworICBiLndyaXRlVGV4dCgiUHJlc3MgaG9tZSwgd2ludXAvZG4gb3IgdGFiIHRvIGNvbnRpbnVlIC4uLiDCpCIpCisgIGtleSA9IGIucmVhZEtleSgpCisKKyAgayA9IGJybGFwaS5leHBhbmRLZXlDb2RlKGtleSkKKyAgYi53cml0ZVRleHQoIktleSAlbGQgKCV4ICV4ICV4ICV4KSAhIiAlIChrZXksIGtbInR5cGUiXSwga1siY29tbWFuZCJdLCBrWyJhcmd1bWVudCJdLCBrWyJmbGFncyJdKSkKKyAgYi53cml0ZVRleHQoTm9uZSwxKQorICBiLmFjY2VwdEFsbEtleXMoKQorICBiLnJlYWRLZXkoKQorCisgIHVuZGVybGluZSA9IGNocihicmxhcGkuRE9UNyArIGJybGFwaS5ET1Q4KQorICAjIE5vdGU6IGNlbnRlcigpIGNhbiB0YWtlIHR3byBhcmd1bWVudHMgb25seSBzdGFydGluZyBmcm9tIHB5dGhvbiAyLjQKKyAgYi53cml0ZSgKKyAgICAgIHJlZ2lvbkJlZ2luID0gMSwKKyAgICAgIHJlZ2lvblNpemUgPSA0MCwKKyAgICAgIHRleHQgPSAiUHJlc3MgYW55IGtleSB0byBjb250aW51ZSAgICAgICAgICAgICAgICIsCisgICAgICBvck1hc2sgPSAyNSp1bmRlcmxpbmUgKyAxNSpjaHIoMCkpCisgIGIucmVhZEtleSgpCisKKyAgYi5hY2NlcHRBbGxLZXlzKCkKKyAgYi53cml0ZVRleHQoIlByZXNzIGFueSBrZXkiKQorICBrID0gYi5yZWFkS2V5KCkKKyAgayA9IGJybGFwaS5leHBhbmRLZXlDb2RlKGtleSkKKyAgYi53cml0ZVRleHQoIktleSAlbGQgKCV4ICV4ICV4ICV4KSAhIiAlIChrZXksIGtbInR5cGUiXSwga1siY29tbWFuZCJdLCBrWyJhcmd1bWVudCJdLCBrWyJmbGFncyJdKSkKKyAgYi5yZWFkS2V5KCkKKworICBiLmlnbm9yZUFsbEtleXMoKQorICBiLmFjY2VwdEtleVJhbmdlcyhbKGJybGFwaS5LRVlfVFlQRV9DTUR8YnJsYXBpLktFWV9DTURfUEFTU0RPVFMsIGJybGFwaS5LRVlfVFlQRV9DTUR8YnJsYXBpLktFWV9DTURfUEFTU0RPVFN8YnJsYXBpLktFWV9DTURfQVJHX01BU0spXSkKKyAgYi53cml0ZVRleHQoIlByZXNzIGEgZG90IGtleSIpCisgIGtleSA9IGIucmVhZEtleSgpCisgIGsgPSBicmxhcGkuZXhwYW5kS2V5Q29kZShrZXkpCisgIGIud3JpdGVUZXh0KCJLZXkgJWxkICgleCAleCAleCAleCkgISIgJSAoa2V5LCBrWyJ0eXBlIl0sIGtbImNvbW1hbmQiXSwga1siYXJndW1lbnQiXSwga1siZmxhZ3MiXSkpCisgIGIuYWNjZXB0QWxsS2V5cygpCisgIGIucmVhZEtleSgpCisKKyAgYi51bndhdGNoUGFyYW1ldGVyKHApCisgIGIubGVhdmVUdHlNb2RlKCkKKyAgYi5jbG9zZUNvbm5lY3Rpb24oKQorCitleGNlcHQgYnJsYXBpLkNvbm5lY3Rpb25FcnJvciBhcyBlOgorICBpZiBlLmJybGVycm5vID09IGJybGFwaS5FUlJPUl9DT05OUkVGVVNFRDoKKyAgICBwcmludCgiQ29ubmVjdGlvbiB0byAlcyByZWZ1c2VkLiBCUkxUVFkgaXMgdG9vIGJ1c3kuLi4iICUgZS5ob3N0KQorICBlbGlmIGUuYnJsZXJybm8gPT0gYnJsYXBpLkVSUk9SX0FVVEhFTlRJQ0FUSU9OOgorICAgIHByaW50KCJBdXRoZW50aWNhdGlvbiB3aXRoICVzIGZhaWxlZC4gUGxlYXNlIGNoZWNrIHRoZSBwZXJtaXNzaW9ucyBvZiAlcyIgJSAoZS5ob3N0LGUuYXV0aCkpCisgIGVsaWYgZS5icmxlcnJubyA9PSBicmxhcGkuRVJST1JfTElCQ0VSUiBhbmQgKGUubGliY2Vycm5vID09IGVycm5vLkVDT05OUkVGVVNFRCBvciBlLmxpYmNlcnJubyA9PSBlcnJuby5FTk9FTlQpOgorICAgIHByaW50KCJDb25uZWN0aW9uIHRvICVzIGZhaWxlZC4gSXMgQlJMVFRZIHJlYWxseSBydW5uaW5nPyIgJSAoZS5ob3N0KSkKKyAgZWxzZToKKyAgICBwcmludCgiQ29ubmVjdGlvbiB0byBCUkxUVFkgYXQgJXMgZmFpbGVkOiAiICUgKGUuaG9zdCkpCisgIHByaW50KGUpCisgIHByaW50KGUuYnJsZXJybm8pCisgIHByaW50KGUubGliY2Vycm5vKQorIiIiCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgbGliYnJsYXBpIC0gQSBsaWJyYXJ5IHByb3ZpZGluZyBhY2Nlc3MgdG8gYnJhaWxsZSB0ZXJtaW5hbHMgZm9yIGFwcGxpY2F0aW9ucy4KKyMKKyMgQ29weXJpZ2h0IChDKSAyMDA1LTIwMjMgYnkKKyMgICBBbGV4aXMgUm9iZXJ0IDxhbGV4aXNzb2Z0QGZyZWUuZnI+CisjICAgU2FtdWVsIFRoaWJhdWx0IDxTYW11ZWwuVGhpYmF1bHRAZW5zLWx5b24ub3JnPgorIworIyBsaWJicmxhcGkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorIworIyBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisjIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyMgbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisjCisjIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK2NpbXBvcnQgY19icmxhcGkKK2Zyb20gbGliYy5zdGRpbnQgY2ltcG9ydCB1aW50OF90LCB1aW50MTZfdCwgdWludDMyX3QsIHVpbnQ2NF90LCB1aW50cHRyX3QKK2ltcG9ydCBlcnJubworCitpbmNsdWRlICJjb25zdGFudHMuYXV0by5weXgiCisKK2RlZiBnZXRMaWJyYXJ5VmVyc2lvbigpOgorCSIiIkdldCB0aGUgQnJsQVBJIHZlcnNpb24gYXMgYSB0aHJlZS1lbGVtZW50IGxpc3QgKG1ham9yLCBtaW5vciwgcmV2aXNpb24pLgorCVNlZSBicmxhcGlfZ2V0TGlicmFyeVZlcnNpb24oMykuIiIiCisJY2RlZiBpbnQgbWFqb3IKKwljZGVmIGludCBtaW5vcgorCWNkZWYgaW50IHJldmlzaW9uCisJd2l0aCBub2dpbDoKKwkJY19icmxhcGkuYnJsYXBpX2dldExpYnJhcnlWZXJzaW9uKCZtYWpvciwgJm1pbm9yLCAmcmV2aXNpb24pCisJcmV0dXJuIChtYWpvciwgbWlub3IsIHJldmlzaW9uKQorCitkZWYgZXhwYW5kS2V5Q29kZShjb2RlKToKKwkiIiJFeHBhbmQgYSBrZXljb2RlIGludG8gaXRzIGluZGl2aWR1YWwgY29tcG9uZW50cy4KKwlTZWUgYnJsYXBpX2V4cGFuZEtleUNvZGUoMykuIiIiCisJY2RlZiBjX2JybGFwaS5icmxhcGlfZXhwYW5kZWRLZXlDb2RlX3QgZWtjCisJY2RlZiBpbnQgcmV0dmFsCisJcmV0dmFsID0gY19icmxhcGkuYnJsYXBpX2V4cGFuZEtleUNvZGUoY29kZSwgJmVrYykKKwlpZiByZXR2YWwgPT0gLTE6CisJCXJhaXNlIE9wZXJhdGlvbkVycm9yKCkKKwllbHNlOgorCQlyZXR1cm4geworCQkJInR5cGUiOiBla2MudHlwZSwKKwkJCSJjb21tYW5kIjogZWtjLmNvbW1hbmQsCisJCQkiYXJndW1lbnQiOiBla2MuYXJndW1lbnQsCisJCQkiZmxhZ3MiOiBla2MuZmxhZ3MKKwkJfQorCitkZWYgZGVzY3JpYmVLZXlDb2RlKGNvZGUpOgorCSIiIkRlc2NyaWJlIHRoZSBpbmRpdmlkdWFsIGNvbXBvbmVudHMgb2YgYSBrZXljb2RlIHN5bWJvbGljYWxseS4KKwlTZWUgYnJsYXBpX2Rlc2NyaWJlS2V5Q29kZSgzKS4iIiIKKwljZGVmIGNfYnJsYXBpLmJybGFwaV9kZXNjcmliZWRLZXlDb2RlX3QgZGtjCisJY2RlZiBpbnQgcmV0dmFsCisJcmV0dmFsID0gY19icmxhcGkuYnJsYXBpX2Rlc2NyaWJlS2V5Q29kZShjb2RlLCAmZGtjKQorCWlmIHJldHZhbCA9PSAtMToKKwkJcmFpc2UgT3BlcmF0aW9uRXJyb3IoKQorCWVsc2U6CisJCWZsYWdzID0gKCkKKwkJZm9yIGZsYWcgaW4gcmFuZ2UoZGtjLmZsYWdzKToKKwkJCWZsYWdzICs9IChka2MuZmxhZ1tmbGFnXSwgKQorCQlyZXR1cm4geworCQkJInR5cGUiOiBka2MudHlwZSwKKwkJCSJjb21tYW5kIjogZGtjLmNvbW1hbmQsCisJCQkiYXJndW1lbnQiOiBka2MuYXJndW1lbnQsCisJCQkiZmxhZ3MiOiBmbGFncworCQl9CisKK2NkZWYgb2JqZWN0IF9wYXJhbWV0ZXJUb1B5dGhvbihjX2JybGFwaS5icmxhcGlfcGFyYW1fdCBjX3BhcmFtLCBjb25zdCB2b2lkICpjX3ZhbHVlLCBzaXplX3Qgc2l6ZSk6CisJY2RlZiBjb25zdCBjX2JybGFwaS5icmxhcGlfcGFyYW1fcHJvcGVydGllc190ICpwcm9wcworCisJd2l0aCBub2dpbDoKKwkJcHJvcHMgPSBjX2JybGFwaS5icmxhcGlfZ2V0UGFyYW1ldGVyUHJvcGVydGllcyhjX3BhcmFtKQorCisJaWYgcHJvcHMgPT0gTlVMTDoKKwkJcmFpc2UgT3BlcmF0aW9uRXJyb3IoKQorCisJaWYgcHJvcHMudHlwZSA9PSBQQVJBTV9UWVBFX1NUUklORzoKKwkJc3RyaW5nID0gPGNoYXIgKj5jX3ZhbHVlCisJCXMgPSBzdHJpbmdbOnNpemVdCisJCXJldCA9IHMuZGVjb2RlKCJVVEYtOCIpCisJZWxpZiBwcm9wcy50eXBlID09IFBBUkFNX1RZUEVfQk9PTEVBTjoKKwkJdmFsdWVzOCA9IDx1aW50OF90ICo+Y192YWx1ZQorCQlyZXQgPSB2YWx1ZXM4WzBdICE9IDAKKwllbGlmIHByb3BzLnR5cGUgPT0gUEFSQU1fVFlQRV9VSU5UODoKKwkJaWYgcHJvcHMuaXNBcnJheToKKwkJCXZhbHVlczggPSA8dWludDhfdCAqPmNfdmFsdWUKKwkJCXJldCA9IHZhbHVlczhbOnNpemVdCisJCWVsc2U6CisJCQl2YWx1ZXM4ID0gPHVpbnQ4X3QgKj5jX3ZhbHVlCisJCQlyZXQgPSB2YWx1ZXM4WzBdCisJZWxpZiBwcm9wcy50eXBlID09IFBBUkFNX1RZUEVfVUlOVDE2OgorCQlpZiBwcm9wcy5pc0FycmF5OgorCQkJdmFsdWVzMTYgPSA8dWludDE2X3QgKj5jX3ZhbHVlCisJCQlyZXQgPSBbdmFsdWVzMTZbaV0gZm9yIGkgaW4gcmFuZ2Uoc2l6ZS8vMildCisJCWVsc2U6CisJCQl2YWx1ZXMxNiA9IDx1aW50MTZfdCAqPmNfdmFsdWUKKwkJCXJldCA9IHZhbHVlczE2WzBdCisJZWxpZiBwcm9wcy50eXBlID09IFBBUkFNX1RZUEVfVUlOVDMyOgorCQlpZiBwcm9wcy5pc0FycmF5OgorCQkJdmFsdWVzMzIgPSA8dWludDMyX3QgKj5jX3ZhbHVlCisJCQlyZXQgPSBbdmFsdWVzMzJbaV0gZm9yIGkgaW4gcmFuZ2Uoc2l6ZS8vNCldCisJCWVsc2U6CisJCQl2YWx1ZXMzMiA9IDx1aW50MzJfdCAqPmNfdmFsdWUKKwkJCXJldCA9IHZhbHVlczMyWzBdCisJZWxpZiBwcm9wcy50eXBlID09IFBBUkFNX1RZUEVfVUlOVDY0OgorCQlpZiBwcm9wcy5pc0FycmF5OgorCQkJdmFsdWVzNjQgPSA8dWludDY0X3QgKj5jX3ZhbHVlCisJCQlyZXQgPSBbdmFsdWVzNjRbaV0gZm9yIGkgaW4gcmFuZ2Uoc2l6ZS8vOCldCisJCWVsc2U6CisJCQl2YWx1ZXM2NCA9IDx1aW50NjRfdCAqPmNfdmFsdWUKKwkJCXJldCA9IHZhbHVlczY0WzBdCisJZWxzZToKKwkJcmFpc2UgVmFsdWVFcnJvcigiVW5zdXBwb3J0ZWQgcGFyYW1ldGVyIHR5cGUiKQorCisJcmV0dXJuIHJldAorCitjbGFzcyBPcGVyYXRpb25FcnJvcihFeGNlcHRpb24pOgorCSIiIkVycm9yIHdoaWxlIHBlcmZvcm1pbmcgc29tZSBvcGVyYXRpb24iIiIKKwlkZWYgX19pbml0X18oc2VsZik6CisJCWNkZWYgY2hhciAqZXhjZXB0aW9uCisJCWV4Y2VwdGlvbiA9IGNfYnJsYXBpLmJybGFwaV9wcm90b2NvbEV4Y2VwdGlvbigpCisJCWlmIChleGNlcHRpb24pOgorCQkJc2VsZi5leGNlcHRpb24gPSBleGNlcHRpb24KKwkJCWNfYnJsYXBpLmZyZWUoZXhjZXB0aW9uKQorCQllbHNlOgorCQkJc2VsZi5leGNlcHRpb24gPSBOb25lCisJCQlzZWxmLmJybGVycm5vID0gY19icmxhcGkuYnJsYXBpX2Vycm9yLmJybGVycm5vCisJCQlzZWxmLmxpYmNlcnJubyA9IGNfYnJsYXBpLmJybGFwaV9lcnJvci5saWJjZXJybm8KKwkJCXNlbGYuZ2FpZXJybm8gPSBjX2JybGFwaS5icmxhcGlfZXJyb3IuZ2FpZXJybm8KKwkJCWlmIChjX2JybGFwaS5icmxhcGlfZXJyb3IuZXJyZnVuKToKKwkJCQlzZWxmLmVycmZ1biA9IGNfYnJsYXBpLmJybGFwaV9lcnJvci5lcnJmdW4KKwkJCWVsc2U6CisJCQkJc2VsZi5lcnJmdW4gPSBiIiIKKworCWRlZiBfX3N0cl9fKHNlbGYpOgorCQljZGVmIGNfYnJsYXBpLmJybGFwaV9lcnJvcl90IGVycm9yCisJCWNkZWYgY19icmxhcGkuc2l6ZV90IHNpemUKKwkJY2RlZiBjaGFyICpidWYKKwkJaWYgc2VsZi5leGNlcHRpb246CisJCQlyZXR1cm4gc2VsZi5leGNlcHRpb24KKwkJZXJyb3IuYnJsZXJybm8gPSBzZWxmLmJybGVycm5vCisJCWVycm9yLmxpYmNlcnJubyA9IHNlbGYubGliY2Vycm5vCisJCWVycm9yLmdhaWVycm5vID0gc2VsZi5nYWllcnJubworCQlzdHIgPSBzZWxmLmVycmZ1bgorCQllcnJvci5lcnJmdW4gPSBzdHIKKwkJc2l6ZSA9IGNfYnJsYXBpLmJybGFwaV9zdHJlcnJvcl9yKCZlcnJvciwgTlVMTCwgMCkKKwkJYnVmID0gPGNoYXIqPmNfYnJsYXBpLm1hbGxvYyhzaXplKzEpCisJCWNfYnJsYXBpLmJybGFwaV9zdHJlcnJvcl9yKCZlcnJvciwgYnVmLCBzaXplKzEpCisJCXJldCA9IGJ1Zi5kZWNvZGUoIkFTQ0lJIiwgZXJyb3JzPSJyZXBsYWNlIikKKwkJY19icmxhcGkuZnJlZShidWYpCisJCXJldHVybiByZXQKKworY2xhc3MgQ29ubmVjdGlvbkVycm9yKE9wZXJhdGlvbkVycm9yKToKKwkiIiJFcnJvciB3aGlsZSBjb25uZWN0aW5nIHRvIEJybFRUWSIiIgorCisJZGVmIF9faW5pdF9fKHNlbGYsIGhvc3QsIGF1dGgpOgorCQlPcGVyYXRpb25FcnJvci5fX2luaXRfXyhzZWxmKQorCQlzZWxmLmhvc3QgPSBob3N0CisJCXNlbGYuYXV0aCA9IGF1dGgKKworCWRlZiBfX3N0cl9fKHNlbGYpOgorCQltc2cgPSAiY291bGRuJ3QgY29ubmVjdCB0byAlcyB3aXRoIGtleSAlczogJXMiICUgKHNlbGYuaG9zdCxzZWxmLmF1dGgsT3BlcmF0aW9uRXJyb3IuX19zdHJfXyhzZWxmKSkKKwkJbXNnID0gbXNnICsgIlxuKGJybGVycm5vICVkLCBsaWJjZXJybm8gJWQsIGdhaWVycm5vICVkKSIgJSAoc2VsZi5icmxlcnJubywgc2VsZi5saWJjZXJybm8sIHNlbGYuZ2FpZXJybm8pCisJCWlmIHNlbGYuYnJsZXJybm8gPT0gRVJST1JfQ09OTlJFRlVTRUQ6CisJCQltc2cgPSBtc2cgKyAiXG5CUkxUVFkgaXMgdG9vIGJ1c3kuLi4iCisJCWVsaWYgc2VsZi5icmxlcnJubyA9PSBFUlJPUl9BVVRIRU5USUNBVElPTjoKKwkJCW1zZyA9IG1zZyArICJcbkF1dGhlbnRpY2F0aW9uIGZhaWxlZC4gUGxlYXNlIGNoZWNrIHlvdSBjYW4gcmVhZCAlcyBhbmQgaXQgaXMgbm90IGVtcHR5LiIgJSBzZWxmLmF1dGgKKwkJZWxpZiBzZWxmLmJybGVycm5vID09IEVSUk9SX0xJQkNFUlIgYW5kIChzZWxmLmxpYmNlcnJubyA9PSBlcnJuby5FQ09OTlJFRlVTRUQgb3Igc2VsZi5saWJjZXJybm8gPT0gZXJybm8uRU5PRU5UKToKKwkJCW1zZyA9IG1zZyArICJcbklzIEJSTFRUWSByZWFsbHkgcnVubmluZz8iCisJCXJldHVybiBtc2cKKworCWRlZiBob3N0KHNlbGYpOgorCQkiIiJIb3N0IG9mIEJSTFRUWSBzZXJ2ZXIiIiIKKwkJcmV0dXJuIHNlbGYuc2V0dGluZ3MuaG9zdAorCisJZGVmIGF1dGgoc2VsZik6CisJCSIiIkF1dGhlbnRpY2F0aW9uIG1ldGhvZCB1c2VkIiIiCisJCXJldHVybiBzZWxmLnNldHRpbmdzLmF1dGgKKworY2RlZiBjbGFzcyBXcml0ZVN0cnVjdDoKKwkiIiJTdHJ1Y3R1cmUgY29udGFpbmluZyBhcmd1bWVudHMgdG8gYmUgZ2l2ZW4gdG8gQ29ubmVjdGlvbi53cml0ZSgpCisJU2VlIGJybGFwaV93cml0ZUFyZ3VtZW50c190KDMpLgorCQorCVRoaXMgaXMgREVQUkVDQVRFRC4gVXNlIHRoZSBuYW1lZCBwYXJhbWV0ZXJzIG9mIHdyaXRlKCkgaW5zdGVhZC4iIiIKKwljZGVmIGNfYnJsYXBpLmJybGFwaV93cml0ZUFyZ3VtZW50c190IHByb3BzCisKKwlkZWYgX19pbml0X18oc2VsZik6CisJCXNlbGYucHJvcHMgPSBjX2JybGFwaS5icmxhcGlfd3JpdGVBcmd1bWVudHNfaW5pdGlhbGl6ZWQKKworCXByb3BlcnR5IGRpc3BsYXlOdW1iZXI6CisJCSIiIkRpc3BsYXkgbnVtYmVyIERJU1BMQVlfREVGQVVMVCA9PSB1bnNwZWNpZmllZCIiIgorCQlkZWYgX19nZXRfXyhzZWxmKToKKwkJCXJldHVybiBzZWxmLnByb3BzLmRpc3BsYXlOdW1iZXIKKwkJZGVmIF9fc2V0X18oc2VsZiwgdmFsKToKKwkJCXNlbGYucHJvcHMuZGlzcGxheU51bWJlciA9IHZhbAorCisJcHJvcGVydHkgcmVnaW9uQmVnaW46CisJCSIiIlJlZ2lvbiBvZiBkaXNwbGF5IHRvIHVwZGF0ZSwgMXN0IGNoYXJhY3RlciBvZiBkaXNwbGF5IGlzIDEiIiIKKwkJZGVmIF9fZ2V0X18oc2VsZik6CisJCQlyZXR1cm4gc2VsZi5wcm9wcy5yZWdpb25CZWdpbgorCQlkZWYgX19zZXRfXyhzZWxmLCB2YWwpOgorCQkJc2VsZi5wcm9wcy5yZWdpb25CZWdpbiA9IHZhbAorCisJcHJvcGVydHkgcmVnaW9uU2l6ZToKKwkJIiIiTnVtYmVyIG9mIGNoYXJhY3RlcnMgaGVsZCBpbiB0ZXh0LCBhdHRyQW5kIGFuZCBhdHRyT3IuIEZvciBtdWx0aWJ5dGVzIHRleHQsIHRoaXMgaXMgdGhlIG51bWJlciBvZiBtdWx0aWJ5dGUgY2hhcmFjdGVycy4gQ29tYmluaW5nIGFuZCBkb3VibGUtd2lkdGggY2hhcmFjdGVycyBjb3VudCBmb3IgMSIiIgorCQlkZWYgX19nZXRfXyhzZWxmKToKKwkJCXJldHVybiBzZWxmLnByb3BzLnJlZ2lvblNpemUKKwkJZGVmIF9fc2V0X18oc2VsZiwgdmFsKToKKwkJCXNlbGYucHJvcHMucmVnaW9uU2l6ZSA9IHZhbAorCisJcHJvcGVydHkgdGV4dDoKKwkJIiIiVGV4dCB0byBkaXNwbGF5IiIiCisJCWRlZiBfX2dldF9fKHNlbGYpOgorCQkJaWYgKG5vdCBzZWxmLnByb3BzLnRleHQpOgorCQkJCXJldHVybiBOb25lCisJCQllbHNlOgorCQkJCXJldHVybiBzZWxmLnByb3BzLnRleHQKKwkJZGVmIF9fc2V0X18oc2VsZiwgdmFsKToKKwkJCWNkZWYgY19icmxhcGkuc2l6ZV90IHNpemUKKwkJCWNkZWYgY2hhciAqY192YWwKKwkJCWNkZWYgY2hhciAqdGV4dAorCQkJaWYgKHR5cGUodmFsKSA9PSB1bmljb2RlKToKKwkJCQl2YWwgPSB2YWwuZW5jb2RlKCdVVEYtOCcpCisJCQkJc2VsZi5jaGFyc2V0ID0gJ1VURi04Jy5lbmNvZGUoIkFTQ0lJIikKKwkJCWlmIChzZWxmLnByb3BzLnRleHQpOgorCQkJCWNfYnJsYXBpLmZyZWUoPGNoYXIqPnNlbGYucHJvcHMudGV4dCkKKwkJCWlmICh2YWwpOgorCQkJCXNpemUgPSBsZW4odmFsKQorCQkJCWNfdmFsID0gdmFsCisJCQkJdGV4dCA9IDxjaGFyKj5jX2JybGFwaS5tYWxsb2Moc2l6ZSsxKQorCQkJCWNfYnJsYXBpLm1lbWNweSg8dm9pZCo+dGV4dCw8dm9pZCo+Y192YWwsc2l6ZSkKKwkJCQl0ZXh0W3NpemVdID0gMAorCQkJCXNlbGYucHJvcHMudGV4dCA9IHRleHQKKwkJCQlzZWxmLnByb3BzLnRleHRTaXplID0gc2l6ZQorCQkJZWxzZToKKwkJCQlzZWxmLnByb3BzLnRleHQgPSBOVUxMCisKKwlwcm9wZXJ0eSBjdXJzb3I6CisJCSIiIkNVUlNPUl9MRUFWRSA9PSBkb24ndCB0b3VjaCwgQ1VSU09SX09GRiA9PSB0dXJuIG9mZiwgMSA9IDFzdCBjaGFyIG9mIGRpc3BsYXksIC4uLiIiIgorCQlkZWYgX19nZXRfXyhzZWxmKToKKwkJCXJldHVybiBzZWxmLnByb3BzLmN1cnNvcgorCQlkZWYgX19zZXRfXyhzZWxmLCB2YWwpOgorCQkJc2VsZi5wcm9wcy5jdXJzb3IgPSB2YWwKKworCXByb3BlcnR5IGNoYXJzZXQ6CisJCSIiIkNoYXJhY3RlciBzZXQgb2YgdGhlIHRleHQiIiIKKwkJZGVmIF9fZ2V0X18oc2VsZik6CisJCQlpZiAobm90IHNlbGYucHJvcHMuY2hhcnNldCk6CisJCQkJcmV0dXJuIE5vbmUKKwkJCWVsc2U6CisJCQkJcmV0dXJuIHNlbGYucHJvcHMuY2hhcnNldAorCQlkZWYgX19zZXRfXyhzZWxmLCB2YWwpOgorCQkJY2RlZiBjX2JybGFwaS5zaXplX3Qgc2l6ZQorCQkJY2RlZiBjaGFyICpjX3ZhbAorCQkJY2RlZiBjaGFyICpjaGFyc2V0CisJCQlpZiAoc2VsZi5wcm9wcy5jaGFyc2V0KToKKwkJCQljX2JybGFwaS5mcmVlKDxjaGFyKj5zZWxmLnByb3BzLmNoYXJzZXQpCisJCQlpZiAodmFsKToKKwkJCQlpZiAodHlwZSh2YWwpID09IHVuaWNvZGUpOgorCQkJCQl2YWwgPSB2YWwuZW5jb2RlKCdBU0NJSScpCisJCQkJc2l6ZSA9IGxlbih2YWwpCisJCQkJY192YWwgPSB2YWwKKwkJCQljaGFyc2V0ID0gPGNoYXIqPmNfYnJsYXBpLm1hbGxvYyhzaXplKzEpCisJCQkJY19icmxhcGkubWVtY3B5KDx2b2lkKj5jaGFyc2V0LDx2b2lkKj5jX3ZhbCxzaXplKQorCQkJCWNoYXJzZXRbc2l6ZV0gPSAwCisJCQkJc2VsZi5wcm9wcy5jaGFyc2V0ID0gY2hhcnNldAorCQkJZWxzZToKKwkJCQlzZWxmLnByb3BzLmNoYXJzZXQgPSBOVUxMCisKKwlwcm9wZXJ0eSBhdHRyQW5kOgorCQkiIiJBbmQgYXR0cmlidXRlczsgYXBwbGllZCBmaXJzdCIiIgorCQlkZWYgX19nZXRfXyhzZWxmKToKKwkJCWNkZWYgY2hhciAqY192YWwKKwkJCWlmIChub3Qgc2VsZi5wcm9wcy5hbmRNYXNrKToKKwkJCQlyZXR1cm4gTm9uZQorCQkJZWxzZToKKwkJCQljX3ZhbCA9IDxjaGFyKj5zZWxmLnByb3BzLmFuZE1hc2sKKwkJCQlyZXR1cm4gY192YWxbOnNlbGYucmVnaW9uU2l6ZV0KKwkJZGVmIF9fc2V0X18oc2VsZiwgdmFsKToKKwkJCWNkZWYgY19icmxhcGkuc2l6ZV90IHNpemUKKwkJCWNkZWYgY2hhciAqY192YWwKKwkJCWlmIChzZWxmLnByb3BzLmFuZE1hc2spOgorCQkJCWNfYnJsYXBpLmZyZWUoPGNoYXIqPnNlbGYucHJvcHMuYW5kTWFzaykKKwkJCWlmICh2YWwpOgorCQkJCWlmICh0eXBlKHZhbCkgPT0gdW5pY29kZSk6CisJCQkJCXZhbCA9IHZhbC5lbmNvZGUoJ2xhdGluMScpCisJCQkJc2l6ZSA9IGxlbih2YWwpCisJCQkJY192YWwgPSB2YWwKKwkJCQlzZWxmLnByb3BzLmFuZE1hc2sgPSA8dW5zaWduZWQgY2hhcio+Y19icmxhcGkubWFsbG9jKHNpemUpCisJCQkJY19icmxhcGkubWVtY3B5KDx2b2lkKj5zZWxmLnByb3BzLmFuZE1hc2ssPHZvaWQqPmNfdmFsLHNpemUpCisJCQllbHNlOgorCQkJCXNlbGYucHJvcHMuYW5kTWFzayA9IE5VTEwKKworCXByb3BlcnR5IGF0dHJPcjoKKwkJIiIiT3IgYXR0cmlidXRlczsgYXBwbGllZCBhZnRlciBBTkRpbmciIiIKKwkJZGVmIF9fZ2V0X18oc2VsZik6CisJCQljZGVmIGNoYXIgKmNfdmFsCisJCQlpZiAobm90IHNlbGYucHJvcHMub3JNYXNrKToKKwkJCQlyZXR1cm4gTm9uZQorCQkJZWxzZToKKwkJCQljX3ZhbCA9IDxjaGFyKj5zZWxmLnByb3BzLm9yTWFzaworCQkJCXJldHVybiBjX3ZhbFs6c2VsZi5yZWdpb25TaXplXQorCQlkZWYgX19zZXRfXyhzZWxmLCB2YWwpOgorCQkJY2RlZiBjX2JybGFwaS5zaXplX3Qgc2l6ZQorCQkJY2RlZiBjaGFyICpjX3ZhbAorCQkJaWYgKHNlbGYucHJvcHMub3JNYXNrKToKKwkJCQljX2JybGFwaS5mcmVlKDxjaGFyKj5zZWxmLnByb3BzLm9yTWFzaykKKwkJCWlmICh2YWwpOgorCQkJCWlmICh0eXBlKHZhbCkgPT0gdW5pY29kZSk6CisJCQkJCXZhbCA9IHZhbC5lbmNvZGUoJ2xhdGluMScpCisJCQkJc2l6ZSA9IGxlbih2YWwpCisJCQkJY192YWwgPSB2YWwKKwkJCQlzZWxmLnByb3BzLm9yTWFzayA9IDx1bnNpZ25lZCBjaGFyKj5jX2JybGFwaS5tYWxsb2Moc2l6ZSkKKwkJCQljX2JybGFwaS5tZW1jcHkoPHZvaWQqPnNlbGYucHJvcHMub3JNYXNrLDx2b2lkKj5jX3ZhbCxzaXplKQorCQkJZWxzZToKKwkJCQlzZWxmLnByb3BzLm9yTWFzayA9IE5VTEwKKworY2RlZiBjbGFzcyBDb25uZWN0aW9uOgorCSIiIkNsYXNzIHdoaWNoIG1hbmFnZXMgdGhlIGJyaWRnZSBiZXR3ZWVuIHlvdXIgcHJvZ3JhbSBhbmQgQnJsQVBJIiIiCisKKwljZGVmIGNfYnJsYXBpLmJybGFwaV9oYW5kbGVfdCAqaAorCWNkZWYgY19icmxhcGkuYnJsYXBpX2Nvbm5lY3Rpb25TZXR0aW5nc190IHNldHRpbmdzCisJY2RlZiBpbnQgZmQKKworCWRlZiBfX2luaXRfXyhzZWxmLCBob3N0ID0gTm9uZSwgYXV0aCA9IE5vbmUpOgorCQkiIiJDb25uZWN0IHlvdXIgcHJvZ3JhbSB0byBCcmxUVFkgdXNpbmcgc2V0dGluZ3MKKworCQlTZWUgYnJsYXBpX29wZW5Db25uZWN0aW9uKDMpCisJCQorCQlTZXR0aW5nIGhvc3QgdG8gTm9uZSBkZWZhdWx0cyBpdCB0byBsb2NhbGhvc3QsIHVzaW5nIHRoZSBsb2NhbCBpbnN0YWxsYXRpb24ncyBkZWZhdWx0IFRDUCBwb3J0LCBvciB0byB0aGUgY29udGVudCBvZiB0aGUgQlJMQVBJX0hPU1QgZW52aXJvbm1lbnQgdmFyaWFibGUsIGlmIGl0IGV4aXN0cy4KKwkJTm90ZTogUGxlYXNlIGNoZWNrIHRoYXQgcmVzb2x2aW5nIHRoaXMgbmFtZSB3b3JrcyBiZWZvcmUgY29tcGxhaW5pbmcuCisKKwkJU2V0dGluZyBhdXRoIHRvIE5vbmUgZGVmYXVsdHMgaXQgdG8gbG9jYWwgaW5zdGFsbGF0aW9uIHNldHVwIG9yIHRvIHRoZSBjb250ZW50IG9mIHRoZSBCUkxBUElfQVVUSCBlbnZpcm9ubWVudCB2YXJpYWJsZSwgaWYgaXQgZXhpc3RzLiIiIgorCQljZGVmIGNfYnJsYXBpLmJybGFwaV9jb25uZWN0aW9uU2V0dGluZ3NfdCBjbGllbnQKKworCQlpZiBhdXRoOgorCQkJY2xpZW50LmF1dGggPSBhdXRoCisJCWVsc2U6CisJCQljbGllbnQuYXV0aCA9IE5VTEwKKworCQlpZiBob3N0OgorCQkJY2xpZW50Lmhvc3QgPSBob3N0CisJCWVsc2U6CisJCQljbGllbnQuaG9zdCA9IE5VTEwKKworCQlzZWxmLmggPSA8Y19icmxhcGkuYnJsYXBpX2hhbmRsZV90Kj4gY19icmxhcGkubWFsbG9jKGNfYnJsYXBpLmJybGFwaV9nZXRIYW5kbGVTaXplKCkpCisKKwkJd2l0aCBub2dpbDoKKwkJCXNlbGYuZmQgPSA8aW50PmNfYnJsYXBpLmJybGFwaV9fb3BlbkNvbm5lY3Rpb24oc2VsZi5oLCAmY2xpZW50LCAmc2VsZi5zZXR0aW5ncykKKwkJY19icmxhcGkuYnJsYXBpX3Byb3RvY29sRXhjZXB0aW9uSW5pdChzZWxmLmgpCisJCWlmIHNlbGYuZmQgPT0gLTE6CisJCQljX2JybGFwaS5mcmVlKHNlbGYuaCkKKwkJCXJhaXNlIENvbm5lY3Rpb25FcnJvcihzZWxmLnNldHRpbmdzLmhvc3QsIHNlbGYuc2V0dGluZ3MuYXV0aCkKKworCWRlZiBjbG9zZUNvbm5lY3Rpb24oc2VsZik6CisJCSIiIkNsb3NlIHRoZSBCcmxBUEkgY29ubmVjdGlvbiIiIgorCQlpZiBzZWxmLmZkICE9IC0xOgorCQkJY19icmxhcGkuYnJsYXBpX19jbG9zZUNvbm5lY3Rpb24oc2VsZi5oKQorCQkJc2VsZi5mZCA9IC0xCisKKwlkZWYgX19kZWxfXyhzZWxmKToKKwkJIiIiUmVsZWFzZSByZXNvdXJjZXMgdXNlZCBieSB0aGUgY29ubmVjdGlvbiIiIgorCQlpZiBzZWxmLmZkICE9IC0xOgorCQkJY19icmxhcGkuYnJsYXBpX19jbG9zZUNvbm5lY3Rpb24oc2VsZi5oKQorCQljX2JybGFwaS5mcmVlKHNlbGYuaCkKKworCXByb3BlcnR5IGhvc3Q6CisJCSIiIlRvIGdldCBhdXRob3JpemVkIHRvIGNvbm5lY3QsIGxpYmJybGFwaSBoYXMgdG8gdGVsbCB0aGUgQnJsQVBJIHNlcnZlciBhIHNlY3JldCBrZXksIGZvciBzZWN1cml0eSByZWFzb25zLiBUaGlzIGlzIHRoZSBwYXRoIHRvIHRoZSBmaWxlIHdoaWNoIGhvbGRzIGl0OyBpdCB3aWxsIGhlbmNlIGhhdmUgdG8gYmUgcmVhZGFibGUgYnkgdGhlIGFwcGxpY2F0aW9uLiIiIgorCQlkZWYgX19nZXRfXyhzZWxmKToKKwkJCXJldHVybiBzZWxmLnNldHRpbmdzLmhvc3QKKworCXByb3BlcnR5IGF1dGg6CisJCSIiIlRoaXMgdGVsbHMgd2hlcmUgdGhlIEJybEFQSSBzZXJ2ZXIgcmVzaWRlcyA6IGl0IG1pZ2h0IGJlIGxpc3RlbmluZyBvbiBhbm90aGVyIGNvbXB1dGVyLCBvbiBhbnkgVENQIHBvcnQuIEl0IHNob3VsZCBsb29rIGxpa2UgImZvbzoxIiwgd2hpY2ggbWVhbnMgVENQIHBvcnQgbnVtYmVyIEJSTEFQSV9TT0NLRVRQT1JUTlVNKzEgb24gY29tcHV0ZXIgY2FsbGVkICJmb28iLiIiIgorCQlkZWYgX19nZXRfXyhzZWxmKToKKwkJCXJldHVybiBzZWxmLnNldHRpbmdzLmF1dGgKKworCXByb3BlcnR5IGZpbGVEZXNjcmlwdG9yOgorCQkiIiJSZXR1cm5zIHRoZSBVbml4IGZpbGUgZGVzY3JpcHRvciB0aGF0IHRoZSBjb25uZWN0aW9uIHVzZXMiIiIKKwkJZGVmIF9fZ2V0X18oc2VsZik6CisJCQlyZXR1cm4gc2VsZi5mZAorCisJcHJvcGVydHkgZGlzcGxheVNpemU6CisJCSIiIkdldCB0aGUgc2l6ZSBvZiB0aGUgYnJhaWxsZSBkaXNwbGF5CisJCVNlZSBicmxhcGlfZ2V0RGlzcGxheVNpemUoMykuIiIiCisJCWRlZiBfX2dldF9fKHNlbGYpOgorCQkJY2RlZiB1bnNpZ25lZCBpbnQgeAorCQkJY2RlZiB1bnNpZ25lZCBpbnQgeQorCQkJY2RlZiBpbnQgcmV0dmFsCisJCQl3aXRoIG5vZ2lsOgorCQkJCXJldHZhbCA9IGNfYnJsYXBpLmJybGFwaV9fZ2V0RGlzcGxheVNpemUoc2VsZi5oLCAmeCwgJnkpCisJCQlpZiByZXR2YWwgPT0gLTE6CisJCQkJcmFpc2UgT3BlcmF0aW9uRXJyb3IoKQorCQkJZWxzZToKKwkJCQlyZXR1cm4gKHgsIHkpCisJCisJcHJvcGVydHkgZHJpdmVyTmFtZToKKwkJIiIiR2V0IHRoZSBjb21wbGV0ZSBuYW1lIG9mIHRoZSBkcml2ZXIgdXNlZCBieSBCcmxUVFkKKwkJU2VlIGJybGFwaV9nZXREcml2ZXJOYW1lKDMpLiIiIgorCQlkZWYgX19nZXRfXyhzZWxmKToKKwkJCWNkZWYgY2hhciBuYW1lWzIxXQorCQkJY2RlZiBpbnQgcmV0dmFsCisJCQl3aXRoIG5vZ2lsOgorCQkJCXJldHZhbCA9IGNfYnJsYXBpLmJybGFwaV9fZ2V0RHJpdmVyTmFtZShzZWxmLmgsIG5hbWUsIHNpemVvZihuYW1lKSkKKwkJCWlmIHJldHZhbCA9PSAtMToKKwkJCQlyYWlzZSBPcGVyYXRpb25FcnJvcigpCisJCQllbHNlOgorCQkJCXJldHVybiBuYW1lCisKKwlwcm9wZXJ0eSBtb2RlbElkZW50aWZpZXI6CisJCSIiIkdldCB0aGUgaWRlbnRpZmllciBmb3IgdGhlIG1vZGVsIG9mIHRoZSBicmFpbGxlIGRpc3BsYXkKKwkJU2VlIGJybGFwaV9nZXRNb2RlbElkZW50aWZpZXIoMykuIiIiCisJCWRlZiBfX2dldF9fKHNlbGYpOgorCQkJY2RlZiBjaGFyIGlkZW50aWZpZXJbMjFdCisJCQljZGVmIGludCByZXR2YWwKKwkJCXdpdGggbm9naWw6CisJCQkJcmV0dmFsID0gY19icmxhcGkuYnJsYXBpX19nZXRNb2RlbElkZW50aWZpZXIoc2VsZi5oLCBpZGVudGlmaWVyLCBzaXplb2YoaWRlbnRpZmllcikpCisJCQlpZiByZXR2YWwgPT0gLTE6CisJCQkJcmFpc2UgT3BlcmF0aW9uRXJyb3IoKQorCQkJZWxzZToKKwkJCQlyZXR1cm4gaWRlbnRpZmllcgorCisJZGVmIGVudGVyVHR5TW9kZShzZWxmLCB0dHkgPSBUVFlfREVGQVVMVCwgZHJpdmVyID0gTm9uZSk6CisJCSIiIkFzayBmb3Igc29tZSB0dHksIHdpdGggc29tZSBrZXkgbWVjaGFuaXNtCisKKwkJU2VlIGJybGFwaV9lbnRlclR0eU1vZGUoMykuCisKKwkJKiB0dHkgOiBJZiB0dHkgPj0gMCwgYXBwbGljYXRpb24gdGFrZXMgY29udHJvbCBvZiB0aGUgc3BlY2lmaWVkIHR0eQorCQkJSWYgdHR5ID09IFRUWV9ERUZBVUxULCB0aGUgbGlicmFyeSBmaXJzdCB0cmllcyB0byBnZXQgdGhlIHR0eSBudW1iZXIgZnJvbSB0aGUgV0lORE9XSUQgZW52aXJvbm1lbnQgdmFyaWFibGUgKGZvcm0geHRlcm0gY2FzZSksIHRoZW4gdGhlIENPTlRST0xWVCB2YXJpYWJsZSwgYW5kIGF0IGxhc3QgcmVhZHMgL3Byb2Mvc2VsZi9zdGF0IChvbiBsaW51eCkKKwkJKiBkcml2ZXIgOiBUZWxscyBob3cgdGhlIGFwcGxpY2F0aW9uIHdhbnRzIHJlYWRLZXkoKSB0byByZXR1cm4ga2V5IHByZXNzZXMuIE5vbmUgb3IgIiIgbWVhbnMgQnJsVFRZIGNvbW1hbmRzIGFyZSByZXF1aXJlZCwgd2hlcmVhcyBhIGRyaXZlciBuYW1lIG1lYW5zIHRoYXQgcmF3IGtleSBjb2RlcyByZXR1cm5lZCBieSB0aGlzIGRyaXZlciBhcmUgZXhwZWN0ZWQuIiIiCisJCWNkZWYgaW50IHJldHZhbAorCQljZGVmIGludCBjX3R0eQorCQljZGVmIGNoYXIgKmNfZHJpdmVyCisJCWNfdHR5ID0gdHR5CisJCWlmIG5vdCBkcml2ZXI6CisJCQljX2RyaXZlciA9IE5VTEwKKwkJZWxzZToKKwkJCWlmICh0eXBlKGRyaXZlcikgPT0gdW5pY29kZSk6CisJCQkJZHJpdmVyID0gZHJpdmVyLmVuY29kZSgnQVNDSUknKQorCQkJY19kcml2ZXIgPSBkcml2ZXIKKwkJd2l0aCBub2dpbDoKKwkJCXJldHZhbCA9IGNfYnJsYXBpLmJybGFwaV9fZW50ZXJUdHlNb2RlKHNlbGYuaCwgY190dHksIGNfZHJpdmVyKQorCQlpZiByZXR2YWwgPT0gLTE6CisJCQlyYWlzZSBPcGVyYXRpb25FcnJvcigpCisJCWVsc2U6CisJCQlyZXR1cm4gcmV0dmFsCisKKwlkZWYgZW50ZXJUdHlNb2RlV2l0aFBhdGgoc2VsZiwgcGF0aCA9IFtdLCBkcml2ZXIgPSBOb25lKToKKwkJIiIiQXNrIGZvciBzb21lIHR0eSwgd2l0aCBzb21lIGtleSBtZWNoYW5pc20KKworCQlTZWUgYnJsYXBpX2VudGVyVHR5TW9kZVdpdGhQYXRoKDMpLgorCisJCSogdHR5IGlzIGFuIGFycmF5IG9mIHR0eXMgcmVwcmVzZW50aW5nIHRoZSB0dHkgcGF0aCB0byBiZSBnb3QuIENhbiBiZSBOb25lLgorCQkqIGRyaXZlciA6IGhhcyB0aGUgc2FtZSBtZWFuaW5nIGFzIGluIGVudGVyVHR5TW9kZS4KKwkJCisJCVByb3ZpZGluZyBhbiBlbXB0eSBhcnJheSBvciBOb25lIG1lYW5zIHRvIGdldCB0aGUgcm9vdC4iIiIKKwkJY2RlZiBpbnQgcmV0dmFsCisJCWNkZWYgaW50ICpjX3R0eXMKKwkJY2RlZiBpbnQgY19udHR5cworCQljZGVmIGNoYXIgKmNfZHJpdmVyCisJCWlmIG5vdCBwYXRoOgorCQkJY190dHlzID0gTlVMTAorCQkJY19udHR5cyA9IDAKKwkJZWxzZToKKwkJCWNfbnR0eXMgPSBsZW4ocGF0aCkKKwkJCWNfdHR5cyA9IDxpbnQqPmNfYnJsYXBpLm1hbGxvYyhjX250dHlzICogc2l6ZW9mKGludCkpCisJCQlmb3IgaSBmcm9tIDAgPD0gaSA8IGNfbnR0eXM6CisJCQkJY190dHlzW2ldID0gcGF0aFtpXQorCQlpZiBub3QgZHJpdmVyOgorCQkJY19kcml2ZXIgPSBOVUxMCisJCWVsc2U6CisJCQlpZiAodHlwZShkcml2ZXIpID09IHVuaWNvZGUpOgorCQkJCWRyaXZlciA9IGRyaXZlci5lbmNvZGUoJ0FTQ0lJJykKKwkJCWNfZHJpdmVyID0gZHJpdmVyCisJCXdpdGggbm9naWw6CisJCQlyZXR2YWwgPSBjX2JybGFwaS5icmxhcGlfX2VudGVyVHR5TW9kZVdpdGhQYXRoKHNlbGYuaCwgY190dHlzLCBjX250dHlzLCBjX2RyaXZlcikKKwkJaWYgKGNfdHR5cyk6CisJCQljX2JybGFwaS5mcmVlKGNfdHR5cykKKwkJaWYgcmV0dmFsID09IC0xOgorCQkJcmFpc2UgT3BlcmF0aW9uRXJyb3IoKQorCQllbHNlOgorCQkJcmV0dXJuIHJldHZhbAorCisJZGVmIGxlYXZlVHR5TW9kZShzZWxmKToKKwkJIiIiU3RvcCBjb250cm9sbGluZyB0aGUgdHR5CisJCVNlZSBicmxhcGlfbGVhdmVUdHlNb2RlKDMpLiIiIgorCQljZGVmIGludCByZXR2YWwKKwkJd2l0aCBub2dpbDoKKwkJCXJldHZhbCA9IGNfYnJsYXBpLmJybGFwaV9fbGVhdmVUdHlNb2RlKHNlbGYuaCkKKwkJaWYgcmV0dmFsID09IC0xOgorCQkJcmFpc2UgT3BlcmF0aW9uRXJyb3IoKQorCQllbHNlOgorCQkJcmV0dXJuIHJldHZhbAorCisJZGVmIHNldEZvY3VzKHNlbGYsIHR0eSk6CisJCSIiIlRlbGwgdGhlIGN1cnJlbnQgdHR5IHRvIGJybHR0eS4KKwkJU2VlIGJybGFwaV9zZXRGb2N1cygzKS4KKwkJVGhpcyBpcyBpbnRlbmRlZCBmb3IgZm9jdXMgdGVsbGVycywgc3VjaCBhcyBicmx0dHksIHhicmxhcGksIHNjcmVlbiwgLi4uIGVudGVyVHR5TW9kZSgpIG11c3QgaGF2ZSBiZWVuIGNhbGxlZCBiZWZvcmUgaGFuZCB0byB0ZWxsIHdoZXJlIHRoaXMgZm9jdXMgYXBwbGllcyBpbiB0aGUgdHR5IHRyZWUuIiIiCisJCWNkZWYgaW50IHJldHZhbAorCQljZGVmIGludCBjX3R0eQorCQljX3R0eSA9IHR0eQorCQl3aXRoIG5vZ2lsOgorCQkJcmV0dmFsID0gY19icmxhcGkuYnJsYXBpX19zZXRGb2N1cyhzZWxmLmgsIGNfdHR5KQorCQlpZiByZXR2YWwgPT0gLTE6CisJCQlyYWlzZSBPcGVyYXRpb25FcnJvcigpCisJCWVsc2U6CisJCQlyZXR1cm4gcmV0dmFsCisKKwkjIFRoZSB3cml0ZUFyZ3VtZW50cyBwYXJhbWV0ZXIgbXVzdCByZW1haW4gZmlyc3QgKGFmdGVyIHNlbGYpIGluIG9yZGVyCisJIyB0byBtYWludGFpbiBiYWNrd2FyZCBjb21wYXRpYmlsaXR5IHdpdGggb2xkIGNvZGUgd2hpY2ggcGFzc2VzIGl0CisJIyBieSBwb3NpdGlvbi4gTmV3IGNvZGUgc2hvdWxkIG5vdCB1c2UgaXQgc2luY2UgdGhlIHBsYW4gaXMgdG8gcmVtb3ZlCisJIyBpdCBvbmNlIGl0J3Mgbm8gbG9uZ2VyIGJlaW5nIHVzZWQuIE5ldyBjb2RlIHNob3VsZCBzdXBwbHkgYXR0cmlidXRlcworCSMgYnkgc3BlY2lmeWluZyB0aGUgcmVtYWluaW5nIHBhcmFtZXRlcnMsIGFzIG5lZWRlZCwgYnkgbmFtZS4KKwlkZWYgd3JpdGUoc2VsZiwgV3JpdGVTdHJ1Y3Qgd3JpdGVBcmd1bWVudHMgPSBOb25lLAorCQkJZGlzcGxheU51bWJlciA9IE5vbmUsCisJCQlyZWdpb25CZWdpbiA9IE5vbmUsCisJCQlyZWdpb25TaXplID0gTm9uZSwKKwkJCXRleHQgPSBOb25lLAorCQkJYW5kTWFzayA9IE5vbmUsCisJCQlvck1hc2sgPSBOb25lLAorCQkJY3Vyc29yID0gTm9uZSwKKwkJCWNoYXJzZXQgPSBOb25lKToKKwkJIiIiVXBkYXRlIGEgc3BlY2lmaWMgcmVnaW9uIG9mIHRoZSBicmFpbGxlIGRpc3BsYXkgYW5kIGFwcGx5IGFuZC9vciBtYXNrcy4KKwkJU2VlIGJybGFwaV93cml0ZSgzKS4KKwkJKiBzIDogZ2l2ZXMgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB0aGUgdXBkYXRlIiIiCisJCWNkZWYgaW50IHJldHZhbAorCQlpZiBub3Qgd3JpdGVBcmd1bWVudHM6CisJCQl3cml0ZUFyZ3VtZW50cyA9IFdyaXRlU3RydWN0KCkKKwkJaWYgZGlzcGxheU51bWJlciAhPSBOb25lOgorCQkJd3JpdGVBcmd1bWVudHMuZGlzcGxheU51bWJlciA9IGRpc3BsYXlOdW1iZXIKKwkJaWYgcmVnaW9uQmVnaW4gIT0gTm9uZToKKwkJCXdyaXRlQXJndW1lbnRzLnJlZ2lvbkJlZ2luID0gcmVnaW9uQmVnaW4KKwkJaWYgcmVnaW9uU2l6ZSAhPSBOb25lOgorCQkJd3JpdGVBcmd1bWVudHMucmVnaW9uU2l6ZSA9IHJlZ2lvblNpemUKKwkJaWYgdGV4dDoKKwkJCXdyaXRlQXJndW1lbnRzLnRleHQgPSB0ZXh0CisJCWlmIGFuZE1hc2s6CisJCQl3cml0ZUFyZ3VtZW50cy5hdHRyQW5kID0gYW5kTWFzaworCQlpZiBvck1hc2s6CisJCQl3cml0ZUFyZ3VtZW50cy5hdHRyT3IgPSBvck1hc2sKKwkJaWYgY3Vyc29yICE9IE5vbmU6CisJCQl3cml0ZUFyZ3VtZW50cy5jdXJzb3IgPSBjdXJzb3IKKwkJaWYgY2hhcnNldDoKKwkJCXdyaXRlQXJndW1lbnRzLmNoYXJzZXQgPSBjaGFyc2V0CisJCXdpdGggbm9naWw6CisJCQlyZXR2YWwgPSBjX2JybGFwaS5icmxhcGlfX3dyaXRlKHNlbGYuaCwgJndyaXRlQXJndW1lbnRzLnByb3BzKQorCQlpZiByZXR2YWwgPT0gLTE6CisJCQlyYWlzZSBPcGVyYXRpb25FcnJvcigpCisJCWVsc2U6CisJCQlyZXR1cm4gcmV0dmFsCisKKwlkZWYgd3JpdGVEb3RzKHNlbGYsIGRvdHMpOgorCQkiIiJXcml0ZSB0aGUgZ2l2ZW4gZG90cyBhcnJheSB0byB0aGUgZGlzcGxheS4KKwkJU2VlIGJybGFwaV93cml0ZURvdHMoMykuCisJCSogZG90cyA6IHBvaW50cyBvbiBhbiBhcnJheSBvZiBkb3QgaW5mb3JtYXRpb24sIG9uZSBwZXIgY2hhcmFjdGVyLiBJdHMgc2l6ZSBtdXN0IGhlbmNlIGJlIHRoZSBzYW1lIGFzIHdoYXQgZGlzcGxheXNpemUgcHJvdmlkZXMuIiIiCisJCWNkZWYgaW50IHJldHZhbAorCQljZGVmIGNoYXIgKmNfZG90cworCQljZGVmIHVuc2lnbmVkIGNoYXIgKmNfdWRvdHMKKwkJKHgsIHkpID0gc2VsZi5kaXNwbGF5U2l6ZQorCQlkaXNwU2l6ZSA9IHggKiB5CisJCWlmICh0eXBlKGRvdHMpID09IHVuaWNvZGUpOgorCQkJZG90cyA9IGRvdHMuZW5jb2RlKCdsYXRpbjEnKQorCQlpZiAobGVuKGRvdHMpIDwgZGlzcFNpemUpOgorCQkJZG90cyA9IGRvdHMgKyBiIiIuY2VudGVyKGRpc3BTaXplIC0gbGVuKGRvdHMpLCBiJ1wwJykKKwkJY19kb3RzID0gZG90cworCQljX3Vkb3RzID0gPHVuc2lnbmVkIGNoYXIgKj5jX2RvdHMKKwkJd2l0aCBub2dpbDoKKwkJCXJldHZhbCA9IGNfYnJsYXBpLmJybGFwaV9fd3JpdGVEb3RzKHNlbGYuaCwgY191ZG90cykKKwkJaWYgcmV0dmFsID09IC0xOgorCQkJcmFpc2UgT3BlcmF0aW9uRXJyb3IoKQorCQllbHNlOgorCQkJcmV0dXJuIHJldHZhbAorCisJZGVmIHdyaXRlVGV4dChzZWxmLCB0ZXh0LCBjdXJzb3IgPSBDVVJTT1JfT0ZGKToKKwkJIiIiV3JpdGUgdGhlIGdpdmVuIFwwLXRlcm1pbmF0ZWQgc3RyaW5nIHRvIHRoZSBicmFpbGxlIGRpc3BsYXkuCisJCVNlZSBicmxhcGlfd3JpdGVUZXh0KDMpLgorCQlJZiB0aGUgc3RyaW5nIGlzIHRvbyBsb25nLCBpdCBpcyBjdXQuIElmIGl0J3MgdG9vIHNob3J0LCBzcGFjZXMgYXJlIGFwcGVuZGVkLiBUaGUgY3VycmVudCBMQ19DVFlQRSBsb2NhbGUgaXMgY29uc2lkZXJlZCwgdW5sZXNzIGl0IGlzIGxlZnQgYXMgZGVmYXVsdCAiQyIsIGluIHdoaWNoIGNhc2UgdGhlIGNoYXJzZXQgaXMgYXNzdW1lZCB0byBiZSA4Yml0cywgYW5kIHRoZSBzYW1lIGFzIHRoZSBzZXJ2ZXIncy4KKworCQkqIGN1cnNvciA6IGdpdmVzIHRoZSBjdXJzb3IgcG9zaXRpb247IGlmIGVxdWFsIHRvIENVUlNPUl9PRkYsIG5vIGN1cnNvciBpcyBzaG93biBhdCBhbGw7IGlmIGN1cnNvciA9PSBDVVJTT1JfTEVBVkUsIHRoZSBjdXJzb3IgaXMgbGVmdCB3aGVyZSBpdCBpcworCQkqIHRleHQgOiBwb2ludHMgdG8gdGhlIHN0cmluZyB0byBiZSBkaXNwbGF5ZWQiIiIKKwkJdyA9IFdyaXRlU3RydWN0KCkKKwkJdy5jdXJzb3IgPSBjdXJzb3IKKwkJaWYgdGV4dCBpcyBub3QgTm9uZToKKwkJCSh4LCB5KSA9IHNlbGYuZGlzcGxheVNpemUKKwkJCWRpc3BTaXplID0geCAqIHkKKwkJCWlmIChsZW4odGV4dCkgPCBkaXNwU2l6ZSk6CisJCQkJdGV4dCA9IHRleHQgKyAiIi5jZW50ZXIoZGlzcFNpemUgLSBsZW4odGV4dCkpCisJCQl3LnJlZ2lvbkJlZ2luID0gMQorCQkJdy5yZWdpb25TaXplID0gZGlzcFNpemUKKwkJCXcudGV4dCA9IHRleHRbMCA6IGRpc3BTaXplXQorCQlyZXR1cm4gc2VsZi53cml0ZSh3KQorCisJZGVmIHJlYWRLZXkoc2VsZiwgd2FpdCA9IFRydWUpOgorCQkiIiJSZWFkIGEga2V5IGZyb20gdGhlIGJyYWlsbGUga2V5Ym9hcmQuCisJCVNlZSBicmxhcGlfcmVhZEtleSgzKS4KKworCQlUaGlzIGZ1bmN0aW9uIHJldHVybnMgb25lIGtleSBwcmVzcydzIGNvZGUuCisKKwkJSWYgTm9uZSBvciAiIiB3YXMgZ2l2ZW4gdG8gZW50ZXJUdHlQYXRoKCksIGEgYnJsdHR5IGNvbW1hbmQgaXMgcmV0dXJuZWQuIEl0IGlzIGhlbmNlIHByZXR0eSBkcml2ZXItaW5kZXBlbmRlbnQsIGFuZCBzaG91bGQgYmUgdXNlZCBieSBkZWZhdWx0IHdoZW4gbm8gb3RoZXIgb3B0aW9uIGlzIHBvc3NpYmxlLgorCisJCUJ5IGRlZmF1bHQsIGFsbCBjb21tYW5kcyBidXQgdGhvc2Ugd2hpY2ggcmVzdGFydCBkcml2ZXJzIGFuZCBzd2l0Y2ggdmlydHVhbCBhcmUgcmV0dXJuZWQgdG8gdGhlIGFwcGxpY2F0aW9uIGFuZCBub3QgdG8gYnJsdHR5LiBJZiB0aGUgYXBwbGljYXRpb24gZG9lc24ndCB3YW50IHRvIHNlZSBzb21lIGNvbW1hbmQgZXZlbnRzLCBpdCBzaG91bGQgY2FsbCBlaXRoZXIgaWdub3JlS2V5cygpIG9yIGlnbm9yZUtleVJhbmdlcygpLgorCisJCUlmIHNvbWUgZHJpdmVyIG5hbWUgd2FzIGdpdmVuIHRvIGVudGVyVHR5TW9kZSgpLCBhIHJhdyBrZXljb2RlIGlzIHJldHVybmVkLCBhcyBzcGVjaWZpZWQgYnkgdGhlIHRlcm1pbmFsIGRyaXZlci4gSXQgZ2VuZXJhbGx5IGNvcnJlc3BvbmRzIHRvIHRoZSB2ZXJ5IGNvZGUgdGhhdCB0aGUgdGVybWluYWwgdGVsbHMgdG8gdGhlIGRyaXZlci4gVGhpcyBzaG91bGQgb25seSBiZSB1c2VkIGJ5IGFwcGxpY2F0aW9ucyB3aGljaCBhcmUgZGVkaWNhdGVkIHRvIGEgcGFydGljdWxhciBicmFpbGxlIHRlcm1pbmFsLiBIZW5jZSwgY2hlY2tpbmcgdGhlIHRlcm1pbmFsIHR5cGUgdGhhbmtzIHRvIGEgY2FsbCB0byBkcml2ZXJuYW1lIGJlZm9yZSBnZXR0aW5nIHR0eSBjb250cm9sIGlzIGEgcHJldHR5IGdvb2QgaWRlYS4KKworCQlCeSBkZWZhdWx0LCBhbGwgdGhlIGtleXByZXNzZXMgd2lsbCBiZSBwYXNzZWQgdG8gdGhlIGNsaWVudCwgbm9uZSB3aWxsIGdvIHRocm91Z2ggYnJsdHR5LCBzbyB0aGUgYXBwbGljYXRpb24gd2lsbCBoYXZlIHRvIGhhbmRsZSBjb25zb2xlIHN3aXRjaGluZyBpdHNlbGYgZm9yIGluc3RhbmNlLiIiIgorCQljZGVmIGNfYnJsYXBpLmJybGFwaV9rZXlDb2RlX3QgY29kZQorCQljZGVmIGludCByZXR2YWwKKwkJY2RlZiBpbnQgY193YWl0CisJCWNfd2FpdCA9IHdhaXQKKworCQl3aGlsZSBUcnVlOgorCQkJd2l0aCBub2dpbDoKKwkJCQlyZXR2YWwgPSBjX2JybGFwaS5icmxhcGlfX3JlYWRLZXkoc2VsZi5oLCBjX3dhaXQsIDxjX2JybGFwaS5icmxhcGlfa2V5Q29kZV90Kj4mY29kZSkKKwkJCWlmIHJldHZhbCA9PSAtMSBhbmQgbm90IChjX2JybGFwaS5icmxhcGlfZXJyb3IuYnJsZXJybm8gPT0gRVJST1JfTElCQ0VSUiBhbmQgY19icmxhcGkuYnJsYXBpX2Vycm9yLmxpYmNlcnJubyA9PSBlcnJuby5FSU5UUik6CisJCQkJcmFpc2UgT3BlcmF0aW9uRXJyb3IoKQorCQkJZWxpZiByZXR2YWwgPD0gMDoKKwkJCQlpZiBub3Qgd2FpdDoKKwkJCQkJcmV0dXJuIE5vbmUKKwkJCWVsc2U6CisJCQkJcmV0dXJuIGNvZGUKKworCWRlZiByZWFkS2V5V2l0aFRpbWVvdXQoc2VsZiwgdGltZW91dF9tcyA9IC0xKToKKwkJIiIiUmVhZCBhIGtleSBmcm9tIHRoZSBicmFpbGxlIGtleWJvYXJkLgorCQlTZWUgYnJsYXBpX3JlYWRLZXlXaXRodGltZW91dCgzKS4KKworICAgICAgICAgICAgICAgIFRoaXMgZnVuY3Rpb24gd29ya3MgbGlrZSBicmxhcGlfcmVhZEtleSwgZXhjZXB0IHRoYXQgcGFyYW1ldGVyIHdhaXQgaXMgcmVwbGFjZWQgYnkgYSB0aW1lb3V0X21zIHBhcmFtZXRlci4iIiIKKwkJY2RlZiBjX2JybGFwaS5icmxhcGlfa2V5Q29kZV90IGNvZGUKKwkJY2RlZiBpbnQgcmV0dmFsCisJCWNkZWYgaW50IGNfdGltZW91dF9tcworCQljX3RpbWVvdXRfbXMgPSB0aW1lb3V0X21zCisKKwkJd2hpbGUgVHJ1ZToKKwkJCXdpdGggbm9naWw6CisJCQkJcmV0dmFsID0gY19icmxhcGkuYnJsYXBpX19yZWFkS2V5V2l0aFRpbWVvdXQoc2VsZi5oLCBjX3RpbWVvdXRfbXMsIDxjX2JybGFwaS5icmxhcGlfa2V5Q29kZV90Kj4mY29kZSkKKwkJCWlmIHJldHZhbCA9PSAtMSBhbmQgbm90IChjX2JybGFwaS5icmxhcGlfZXJyb3IuYnJsZXJybm8gPT0gRVJST1JfTElCQ0VSUiBhbmQgY19icmxhcGkuYnJsYXBpX2Vycm9yLmxpYmNlcnJubyA9PSBlcnJuby5FSU5UUik6CisJCQkJcmFpc2UgT3BlcmF0aW9uRXJyb3IoKQorCQkJZWxpZiByZXR2YWwgPD0gMDoKKwkJCQlpZiB0aW1lb3V0X21zID49IDA6CisJCQkJCXJldHVybiBOb25lCisJCQllbHNlOgorCQkJCXJldHVybiBjb2RlCisKKwlkZWYgZXhwYW5kS2V5Q29kZShzZWxmLCBjb2RlKToKKwkJIiIiRXhwYW5kIGEga2V5Y29kZSBpbnRvIGl0cyBpbmRpdmlkdWFsIGNvbXBvbmVudHMuCisJCVRoaXMgaXMgYSBzdHViIHRvIG1haW50YWluIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkuCisJCUNhbGwgYnJsYXBpLmV4cGFuZEtleUNvZGUoY29kZSkgaW5zdGVhZC4iIiIKKwkJcmV0dXJuIGV4cGFuZEtleUNvZGUoY29kZSkKKworCWRlZiBpZ25vcmVLZXlzKHNlbGYsIGtleV90eXBlLCBzZXQpOgorCQkiIiJJZ25vcmUgc29tZSBrZXkgcHJlc3NlcyBmcm9tIHRoZSBicmFpbGxlIGtleWJvYXJkLgorCQlTZWUgYnJsYXBpX2lnbm9yZUtleXMoMykuCisJCQorCQlUaGlzIGZ1bmN0aW9uIGFza3MgdGhlIHNlcnZlciB0byBnaXZlIHRoZSBwcm92aWRlZCBrZXlzIHRvIGJybHR0eSwgcmF0aGVyIHRoYW4gcmV0dXJuaW5nIHRoZW0gdG8gdGhlIGFwcGxpY2F0aW9uIHZpYSBicmxhcGlfcmVhZEtleSgpLgorCQkKKwkJVGhlIGdpdmVuIGNvZGVzIHNob3VsZCBiZSBicmx0dHkgY29tbWFuZHMgKG51bCBvciAiIiB3YXMgZ2l2ZW4gdG8gYnJsYXBpX2VudGVyVHR5TW9kZSgpKSIiIgorCQljZGVmIGludCByZXR2YWwKKwkJY2RlZiBjX2JybGFwaS5icmxhcGlfcmFuZ2VUeXBlX3QgY190eXBlCisJCWNkZWYgY19icmxhcGkuYnJsYXBpX2tleUNvZGVfdCAqY19zZXQKKwkJY2RlZiBsb25nIGNfbgorCQljX3R5cGUgPSBrZXlfdHlwZQorCQljX24gPSBsZW4oc2V0KQorCQljX3NldCA9IDxjX2JybGFwaS5icmxhcGlfa2V5Q29kZV90Kj5jX2JybGFwaS5tYWxsb2MoY19uICogc2l6ZW9mKGNfYnJsYXBpLmJybGFwaV9rZXlDb2RlX3QpKQorCQlmb3IgaSBmcm9tIDAgPD0gaSA8IGNfbjoKKwkJCWNfc2V0W2ldID0gc2V0W2ldCisJCXdpdGggbm9naWw6CisJCQlyZXR2YWwgPSBjX2JybGFwaS5icmxhcGlfX2lnbm9yZUtleXMoc2VsZi5oLCBjX3R5cGUsIGNfc2V0LCBjX24pCisJCWNfYnJsYXBpLmZyZWUoY19zZXQpCisJCWlmIHJldHZhbCA9PSAtMToKKwkJCXJhaXNlIE9wZXJhdGlvbkVycm9yKCkKKwkJZWxzZToKKwkJCXJldHVybiByZXR2YWwKKworCWRlZiBhY2NlcHRLZXlzKHNlbGYsIGtleV90eXBlLCBzZXQpOgorCQkiIiJBY2NlcHQgc29tZSBrZXkgcHJlc3NlcyBmcm9tIHRoZSBicmFpbGxlIGtleWJvYXJkLgorCQlTZWUgYnJsYXBpX2lnbm9yZUtleXMoMykuCisJCQorCQlUaGlzIGZ1bmN0aW9uIGFza3MgdGhlIHNlcnZlciB0byBnaXZlIHRoZSBwcm92aWRlZCBrZXlzIHRvIHRoZSBhcHBsaWNhdGlvbiwgYW5kIG5vdCBnaXZlIHRoZW0gdG8gYnJsdHR5LgorCisJCVRoZSBnaXZlbiBjb2RlcyBzaG91bGQgYmUgYnJsdHR5IGNvbW1hbmRzIChudWwgb3IgIiIgd2FzIGdpdmVuIHRvIGJybGFwaV9lbnRlclR0eU1vZGUoKSkiIiIKKwkJY2RlZiBpbnQgcmV0dmFsCisJCWNkZWYgY19icmxhcGkuYnJsYXBpX3JhbmdlVHlwZV90IGNfdHlwZQorCQljZGVmIGNfYnJsYXBpLmJybGFwaV9rZXlDb2RlX3QgKmNfc2V0CisJCWNkZWYgbG9uZyBjX24KKwkJY190eXBlID0ga2V5X3R5cGUKKwkJY19uID0gbGVuKHNldCkKKwkJY19zZXQgPSA8Y19icmxhcGkuYnJsYXBpX2tleUNvZGVfdCo+Y19icmxhcGkubWFsbG9jKGNfbiAqIHNpemVvZihjX2JybGFwaS5icmxhcGlfa2V5Q29kZV90KSkKKwkJZm9yIGkgZnJvbSAwIDw9IGkgPCBjX246CisJCQljX3NldFtpXSA9IHNldFtpXQorCQl3aXRoIG5vZ2lsOgorCQkJcmV0dmFsID0gY19icmxhcGkuYnJsYXBpX19hY2NlcHRLZXlzKHNlbGYuaCwgY190eXBlLCBjX3NldCwgY19uKQorCQljX2JybGFwaS5mcmVlKGNfc2V0KQorCQlpZiByZXR2YWwgPT0gLTE6CisJCQlyYWlzZSBPcGVyYXRpb25FcnJvcigpCisJCWVsc2U6CisJCQlyZXR1cm4gcmV0dmFsCisJCisJZGVmIGlnbm9yZUFsbEtleXMoc2VsZik6CisJCSIiIklnbm9yZSBhbGwga2V5IHByZXNzZXMgZnJvbSB0aGUgYnJhaWxsZSBrZXlib2FyZC4KKwkJU2VlIGJybGFwaV9pZ25vcmVBbGxLZXlzKDMpLgorCQkKKwkJVGhpcyBmdW5jdGlvbiBhc2tzIHRoZSBzZXJ2ZXIgdG8gZ2l2ZSBhbGwga2V5cyB0byBicmx0dHksIHJhdGhlciB0aGFuIHJldHVybmluZyB0aGVtIHRvIHRoZSBhcHBsaWNhdGlvbiB2aWEgYnJsYXBpX3JlYWRLZXkoKS4iIiIKKwkJY2RlZiBpbnQgcmV0dmFsCisJCXdpdGggbm9naWw6CisJCQlyZXR2YWwgPSBjX2JybGFwaS5icmxhcGlfX2lnbm9yZUFsbEtleXMoc2VsZi5oKQorCQlpZiByZXR2YWwgPT0gLTE6CisJCQlyYWlzZSBPcGVyYXRpb25FcnJvcigpCisJCWVsc2U6CisJCQlyZXR1cm4gcmV0dmFsCisJCisJZGVmIGFjY2VwdEFsbEtleXMoc2VsZik6CisJCSIiIkFjY2VwdCBhbGwga2V5IHByZXNzZXMgZnJvbSB0aGUgYnJhaWxsZSBrZXlib2FyZC4KKwkJU2VlIGJybGFwaV9hY2NlcHRBbGxLZXlzKDMpLgorCQkKKwkJVGhpcyBmdW5jdGlvbiBhc2tzIHRoZSBzZXJ2ZXIgdG8gZ2l2ZSBhbGwga2V5cyB0byB0aGUgYXBwbGljYXRpb24sIGFuZCBub3QgZ2l2ZSB0aGVtIHRvIGJybHR0eS4KKworCQlXYXJuaW5nOiBhZnRlciBjYWxsaW5nIHRoaXMgZnVuY3Rpb24sIG1ha2Ugc3VyZSB0byBjYWxsIGJybGFwaV9pZ25vcmVLZXlzKCkgZm9yIGlnbm9yaW5nIGltcG9ydGFudCBrZXlzIGxpa2UgQlJMX0NNRF9TV0lUQ0hWVF9QUkVWL05FWFQgYW5kIHN1Y2guIiIiCisJCWNkZWYgaW50IHJldHZhbAorCQl3aXRoIG5vZ2lsOgorCQkJcmV0dmFsID0gY19icmxhcGkuYnJsYXBpX19hY2NlcHRBbGxLZXlzKHNlbGYuaCkKKwkJaWYgcmV0dmFsID09IC0xOgorCQkJcmFpc2UgT3BlcmF0aW9uRXJyb3IoKQorCQllbHNlOgorCQkJcmV0dXJuIHJldHZhbAorCisJZGVmIGlnbm9yZUtleVJhbmdlcyhzZWxmLCBrZXlzKToKKwkJIiIiSWdub3JlIHNvbWUga2V5IHByZXNzZXMgZnJvbSB0aGUgYnJhaWxsZSBrZXlib2FyZC4KKwkJU2VlIGJybGFwaV9pZ25vcmVLZXlSYW5nZXMoMykuCisJCQorCQlUaGlzIGZ1bmN0aW9uIGFza3MgdGhlIHNlcnZlciB0byBnaXZlIHRoZSBwcm92aWRlZCBrZXkgcmFuZ2VzIHRvIGJybHR0eSwgcmF0aGVyIHRoYW4gcmV0dXJuaW5nIHRoZW0gdG8gdGhlIGFwcGxpY2F0aW9uIHZpYSBicmxhcGlfcmVhZEtleSgpLgorCQkKKwkJVGhlIGdpdmVuIGNvZGVzIHNob3VsZCBiZSByYXcga2V5Y29kZXMgKGkuZS4gc29tZSBkcml2ZXIgbmFtZSB3YXMgZ2l2ZW4gdG8gYnJsYXBpX2VudGVyVHR5TW9kZSgpKSAiIiIKKwkJY2RlZiBpbnQgcmV0dmFsCisJCWNkZWYgY19icmxhcGkuYnJsYXBpX3JhbmdlX3QgKmNfa2V5cworCQljZGVmIGxvbmcgY19uCisJCWNfbiA9IGxlbihrZXlzKQorCQljX2tleXMgPSA8Y19icmxhcGkuYnJsYXBpX3JhbmdlX3QqPmNfYnJsYXBpLm1hbGxvYyhjX24gKiBzaXplb2YoY19icmxhcGkuYnJsYXBpX3JhbmdlX3QpKQorCQlmb3IgaSBmcm9tIDAgPD0gaSA8IGNfbjoKKwkJCWNfa2V5c1tpXS5maXJzdCA9IGtleXNbaV1bMF0KKwkJCWNfa2V5c1tpXS5sYXN0ID0ga2V5c1tpXVsxXQorCQl3aXRoIG5vZ2lsOgorCQkJcmV0dmFsID0gY19icmxhcGkuYnJsYXBpX19pZ25vcmVLZXlSYW5nZXMoc2VsZi5oLCBjX2tleXMsIGNfbikKKwkJY19icmxhcGkuZnJlZShjX2tleXMpCisJCWlmIHJldHZhbCA9PSAtMToKKwkJCXJhaXNlIE9wZXJhdGlvbkVycm9yKCkKKwkJZWxzZToKKwkJCXJldHVybiByZXR2YWwKKworCWRlZiBhY2NlcHRLZXlSYW5nZXMoc2VsZiwga2V5cyk6CisJCSIiIkFjY2VwdCBzb21lIGtleSBwcmVzc2VzIGZyb20gdGhlIGJyYWlsbGUga2V5Ym9hcmQuCisJCVNlZSBicmxhcGlfYWNjZXB0S2V5UmFuZ2VzKDMpLgorCQkKKwkJVGhpcyBmdW5jdGlvbiBhc2tzIHRoZSBzZXJ2ZXIgdG8gcmV0dXJuIHRoZSBwcm92aWRlZCBrZXkgcmFuZ2VzIChpbmNsdXNpdmUpIHRvIHRoZSBhcHBsaWNhdGlvbiwgYW5kIG5vdCBnaXZlIHRoZW0gdG8gYnJsdHR5LgorCQkKKwkJVGhlIGdpdmVuIGNvZGVzIHNob3VsZCBiZSByYXcga2V5Y29kZXMgKGkuZS4gc29tZSBkcml2ZXIgbmFtZSB3YXMgZ2l2ZW4gdG8gYnJsYXBpX2VudGVyVHR5TW9kZSgpKSAiIiIKKwkJY2RlZiBpbnQgcmV0dmFsCisJCWNkZWYgY19icmxhcGkuYnJsYXBpX3JhbmdlX3QgKmNfa2V5cworCQljZGVmIGxvbmcgY19uCisJCWNfbiA9IGxlbihrZXlzKQorCQljX2tleXMgPSA8Y19icmxhcGkuYnJsYXBpX3JhbmdlX3QqPmNfYnJsYXBpLm1hbGxvYyhjX24gKiBzaXplb2YoY19icmxhcGkuYnJsYXBpX3JhbmdlX3QpKQorCQlmb3IgaSBmcm9tIDAgPD0gaSA8IGNfbjoKKwkJCWNfa2V5c1tpXS5maXJzdCA9IGtleXNbaV1bMF0KKwkJCWNfa2V5c1tpXS5sYXN0ID0ga2V5c1tpXVsxXQorCQl3aXRoIG5vZ2lsOgorCQkJcmV0dmFsID0gY19icmxhcGkuYnJsYXBpX19hY2NlcHRLZXlSYW5nZXMoc2VsZi5oLCBjX2tleXMsIGNfbikKKwkJY19icmxhcGkuZnJlZShjX2tleXMpCisJCWlmIHJldHZhbCA9PSAtMToKKwkJCXJhaXNlIE9wZXJhdGlvbkVycm9yKCkKKwkJZWxzZToKKwkJCXJldHVybiByZXR2YWwKKworCWRlZiBlbnRlclJhd01vZGUoc2VsZiwgZHJpdmVyKToKKwkJIiIiU3dpdGNoIHRvIFJhdyBtb2RlCisJCVNlZSBicmxhcGlfZW50ZXJSYXdNb2RlKDMpLgorCQkKKwkJKiBkcml2ZXIgOiBTcGVjaWZpZXMgdGhlIG5hbWUgb2YgdGhlIGRyaXZlciBmb3Igd2hpY2ggdGhlIHJhdyBjb21tdW5pY2F0aW9uIHdpbGwgYmUgZXN0YWJsaXNoZWQiIiIKKwkJY2RlZiBpbnQgcmV0dmFsCisJCWNkZWYgY2hhciAqY19kcml2ZXIKKwkJaWYgKHR5cGUoZHJpdmVyKSA9PSB1bmljb2RlKToKKwkJCWRyaXZlciA9IGRyaXZlci5lbmNvZGUoJ0FTQ0lJJykKKwkJY19kcml2ZXIgPSBkcml2ZXIKKwkJd2l0aCBub2dpbDoKKwkJCXJldHZhbCA9IGNfYnJsYXBpLmJybGFwaV9fZW50ZXJSYXdNb2RlKHNlbGYuaCwgY19kcml2ZXIpCisJCWlmIHJldHZhbCA9PSAtMToKKwkJCXJhaXNlIE9wZXJhdGlvbkVycm9yKCkKKwkJZWxzZToKKwkJCXJldHVybiByZXR2YWwKKworCWRlZiBsZWF2ZVJhd01vZGUoc2VsZik6CisJCSIiImxlYXZlIFJhdyBtb2RlCisJCVNlZSBicmxhcGlfbGVhdmVSYXdNb2RlKDMpLiIiIgorCQljZGVmIGludCByZXR2YWwKKwkJd2l0aCBub2dpbDoKKwkJCXJldHZhbCA9IGNfYnJsYXBpLmJybGFwaV9fbGVhdmVSYXdNb2RlKHNlbGYuaCkKKwkJaWYgcmV0dmFsID09IC0xOgorCQkJcmFpc2UgT3BlcmF0aW9uRXJyb3IoKQorCQllbHNlOgorCQkJcmV0dXJuIHJldHZhbAorCisJZGVmIGdldFBhcmFtZXRlcihzZWxmLCBwYXJhbSwgc3VicGFyYW0gPSAwLCBmbGFncyA9IDApOgorCQkiIiJHZXQgdGhlIHZhbHVlIG9mIGEgcGFyYW1ldGVyLgorCQlTZWUgYnJsYXBpX2dldFBhcmFtZXRlcigzKS4KKworCQlUaGlzIGdldHMgdGhlIGN1cnJlbnQgY29udGVudCBvZiBhIHBhcmFtZXRlciIiIgorCQljZGVmIGNfYnJsYXBpLmJybGFwaV9wYXJhbV90IGNfcGFyYW0KKwkJY2RlZiBjX2JybGFwaS5icmxhcGlfcGFyYW1fc3VicGFyYW1fdCBjX3N1YnBhcmFtCisJCWNkZWYgY19icmxhcGkuYnJsYXBpX3BhcmFtX2ZsYWdzX3QgY19mbGFncworCQljZGVmIHZvaWQgKmNfdmFsdWUKKwkJY2RlZiBzaXplX3Qgc2l6ZQorCQljZGVmIHNzaXplX3QgcmV0dmFsCisJCWNkZWYgdWludDY0X3QgKnZhbHVlczY0CisJCWNkZWYgdWludDMyX3QgKnZhbHVlczMyCisJCWNkZWYgdWludDE2X3QgKnZhbHVlczE2CisJCWNkZWYgdWludDhfdCAqdmFsdWVzOAorCQljZGVmIGNoYXIgKnN0cmluZworCisJCWNfcGFyYW0gPSBwYXJhbQorCQljX3N1YnBhcmFtID0gc3VicGFyYW0KKwkJY19mbGFncyA9IGZsYWdzCisKKwkJd2l0aCBub2dpbDoKKwkJCWNfdmFsdWUgPSBjX2JybGFwaS5icmxhcGlfX2dldFBhcmFtZXRlckFsbG9jKHNlbGYuaCwgY19wYXJhbSwgY19zdWJwYXJhbSwgY19mbGFncywgJnNpemUpCisJCWlmIGNfdmFsdWUgPT0gTlVMTDoKKwkJCXJhaXNlIE9wZXJhdGlvbkVycm9yKCkKKworCQl0cnk6CisJCQlyZXQgPSBfcGFyYW1ldGVyVG9QeXRob24oY19wYXJhbSwgY192YWx1ZSwgc2l6ZSkKKwkJZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOgorCQkJY19icmxhcGkuZnJlZShjX3ZhbHVlKQorCQkJcmFpc2UoZSkKKworCQljX2JybGFwaS5mcmVlKGNfdmFsdWUpCisJCXJldHVybiByZXQKKworCisJZGVmIHNldFBhcmFtZXRlcihzZWxmLCBwYXJhbSwgc3VicGFyYW0sIGZsYWdzLCB2YWx1ZSk6CisJCSIiIlNldCB0aGUgdmFsdWUgb2YgYSBwYXJhbWV0ZXIuCisJCVNlZSBicmxhcGlfc2V0UGFyYW1ldGVyKDMpLgorCisJCVRoaXMgc2V0cyB0aGUgY29udGVudCBvZiBhIHBhcmFtZXRlciIiIgorCQljZGVmIGNfYnJsYXBpLmJybGFwaV9wYXJhbV90IGNfcGFyYW0KKwkJY2RlZiBjX2JybGFwaS5icmxhcGlfcGFyYW1fc3VicGFyYW1fdCBjX3N1YnBhcmFtCisJCWNkZWYgY19icmxhcGkuYnJsYXBpX3BhcmFtX2ZsYWdzX3QgY19mbGFncworCQljZGVmIHZvaWQgKmNfdmFsdWUKKwkJY2RlZiB1aW50NjRfdCAqdmFsdWVzNjQKKwkJY2RlZiB1aW50MzJfdCAqdmFsdWVzMzIKKwkJY2RlZiB1aW50MTZfdCAqdmFsdWVzMTYKKwkJY2RlZiB1aW50OF90ICp2YWx1ZXM4CisJCWNkZWYgY2hhciAqc3RyaW5nCisJCWNkZWYgY29uc3QgY19icmxhcGkuYnJsYXBpX3BhcmFtX3Byb3BlcnRpZXNfdCAqcHJvcHMKKworCQljX3BhcmFtID0gcGFyYW0KKwkJY19zdWJwYXJhbSA9IHN1YnBhcmFtCisJCWNfZmxhZ3MgPSBmbGFncworCisJCXdpdGggbm9naWw6CisJCQlwcm9wcyA9IGNfYnJsYXBpLmJybGFwaV9nZXRQYXJhbWV0ZXJQcm9wZXJ0aWVzKGNfcGFyYW0pCisKKwkJaWYgcHJvcHMgPT0gTlVMTDoKKwkJCXJhaXNlIE9wZXJhdGlvbkVycm9yKCkKKworCQlpZiBwcm9wcy50eXBlID09IFBBUkFNX1RZUEVfU1RSSU5HOgorCQkJaWYgdHlwZSh2YWx1ZSkgIT0gdW5pY29kZSBhbmQgdHlwZSh2YWx1ZSkgIT0gc3RyOgorCQkJCXJhaXNlIFZhbHVlRXJyb3IoIlN0cmluZyB2YWx1ZSBleHBlY3RlZCIpCisKKwkJaWYgcHJvcHMudHlwZSA9PSBQQVJBTV9UWVBFX0JPT0xFQU46CisJCQlpZiBwcm9wcy5pc0FycmF5OgorCQkJCWlmIHR5cGUodmFsdWVbMF0pICE9IGJvb2w6CisJCQkJCXJhaXNlIFZhbHVlRXJyb3IoIkJvb2xlYW4gdmFsdWVzIGV4cGVjdGVkIikKKwkJCWVsc2U6CisJCQkJaWYgdHlwZSh2YWx1ZSkgIT0gYm9vbDoKKwkJCQkJcmFpc2UgVmFsdWVFcnJvcigiQm9vbGVhbiB2YWx1ZSBleHBlY3RlZCIpCisKKwkJaWYgcHJvcHMudHlwZSA9PSBQQVJBTV9UWVBFX1VJTlQ4IG9yIFwKKwkJICAgcHJvcHMudHlwZSA9PSBQQVJBTV9UWVBFX1VJTlQxNiBvciBcCisJCSAgIHByb3BzLnR5cGUgPT0gUEFSQU1fVFlQRV9VSU5UMzI6CisJCQlpZiBwcm9wcy5pc0FycmF5OgorCQkJCWlmIHR5cGUodmFsdWVbMF0pICE9IGludDoKKwkJCQkJcmFpc2UgVmFsdWVFcnJvcigiSW50ZWdlciB2YWx1ZXMgZXhwZWN0ZWQiKQorCQkJZWxzZToKKwkJCQlpZiB0eXBlKHZhbHVlKSAhPSBpbnQ6CisJCQkJCXJhaXNlIFZhbHVlRXJyb3IoIkludGVnZXIgdmFsdWUgZXhwZWN0ZWQiKQorCisJCWlmIHByb3BzLnR5cGUgPT0gUEFSQU1fVFlQRV9TVFJJTkc6CisJCQlpZiB0eXBlKHZhbHVlKSA9PSB1bmljb2RlOgorCQkJCXZhbHVlID0gdmFsdWUuZW5jb2RlKCdVVEYtOCcpCisJCQlzaXplID0gbGVuKHZhbHVlKQorCQkJY192YWx1ZSA9IDx2b2lkKj5jX2JybGFwaS5tYWxsb2Moc2l6ZSkKKwkJCXZhbHVlczggPSA8dWludDhfdCAqPmNfdmFsdWUKKwkJCXN0cmluZyA9IHZhbHVlCisJCQljX2JybGFwaS5tZW1jcHkoPHZvaWQqPnZhbHVlczgsPHZvaWQqPnN0cmluZyxzaXplKQorCQllbGlmIHByb3BzLnR5cGUgPT0gUEFSQU1fVFlQRV9CT09MRUFOIG9yIHByb3BzLnR5cGUgPT0gUEFSQU1fVFlQRV9VSU5UODoKKwkJCWlmIHByb3BzLmlzQXJyYXk6CisJCQkJc2l6ZSA9IDEgKiBsZW4odmFsdWUpCisJCQkJY192YWx1ZSA9IDx2b2lkKj5jX2JybGFwaS5tYWxsb2Moc2l6ZSkKKwkJCQl2YWx1ZXM4ID0gPHVpbnQ4X3QgKj5jX3ZhbHVlCisJCQkJZm9yIGkgaW4gbGVuKHZhbHVlKToKKwkJCQkJdmFsdWVzOFtpXSA9IHZhbHVlW2ldCisJCQllbHNlOgorCQkJCXNpemUgPSAxCisJCQkJY192YWx1ZSA9IDx2b2lkKj5jX2JybGFwaS5tYWxsb2Moc2l6ZSkKKwkJCQl2YWx1ZXM4ID0gPHVpbnQ4X3QgKj5jX3ZhbHVlCisJCQkJdmFsdWVzOFswXSA9IHZhbHVlCisJCWVsaWYgcHJvcHMudHlwZSA9PSBQQVJBTV9UWVBFX1VJTlQxNjoKKwkJCWlmIHByb3BzLmlzQXJyYXk6CisJCQkJc2l6ZSA9IDIgKiBsZW4odmFsdWUpCisJCQkJY192YWx1ZSA9IDx2b2lkKj5jX2JybGFwaS5tYWxsb2Moc2l6ZSkKKwkJCQl2YWx1ZXMxNiA9IDx1aW50MTZfdCAqPmNfdmFsdWUKKwkJCQlmb3IgaSBpbiBsZW4odmFsdWUpOgorCQkJCQl2YWx1ZXMxNltpXSA9IHZhbHVlW2ldCisJCQllbHNlOgorCQkJCXNpemUgPSAyCisJCQkJY192YWx1ZSA9IDx2b2lkKj5jX2JybGFwaS5tYWxsb2Moc2l6ZSkKKwkJCQl2YWx1ZXMxNiA9IDx1aW50MTZfdCAqPmNfdmFsdWUKKwkJCQl2YWx1ZXMxNlswXSA9IHZhbHVlCisJCWVsaWYgcHJvcHMudHlwZSA9PSBQQVJBTV9UWVBFX1VJTlQzMjoKKwkJCWlmIHByb3BzLmlzQXJyYXk6CisJCQkJc2l6ZSA9IDQgKiBsZW4odmFsdWUpCisJCQkJY192YWx1ZSA9IDx2b2lkKj5jX2JybGFwaS5tYWxsb2Moc2l6ZSkKKwkJCQl2YWx1ZXMzMiA9IDx1aW50MzJfdCAqPmNfdmFsdWUKKwkJCQlmb3IgaSBpbiBsZW4odmFsdWUpOgorCQkJCQl2YWx1ZXMzMltpXSA9IHZhbHVlW2ldCisJCQllbHNlOgorCQkJCXNpemUgPSA0CisJCQkJY192YWx1ZSA9IDx2b2lkKj5jX2JybGFwaS5tYWxsb2Moc2l6ZSkKKwkJCQl2YWx1ZXMzMiA9IDx1aW50MzJfdCAqPmNfdmFsdWUKKwkJCQl2YWx1ZXMzMlswXSA9IHZhbHVlCisJCWVsaWYgcHJvcHMudHlwZSA9PSBQQVJBTV9UWVBFX1VJTlQ2NDoKKwkJCWlmIHByb3BzLmlzQXJyYXk6CisJCQkJc2l6ZSA9IDQgKiBsZW4odmFsdWUpCisJCQkJY192YWx1ZSA9IDx2b2lkKj5jX2JybGFwaS5tYWxsb2Moc2l6ZSkKKwkJCQl2YWx1ZXM2NCA9IDx1aW50NjRfdCAqPmNfdmFsdWUKKwkJCQlmb3IgaSBpbiBsZW4odmFsdWUpOgorCQkJCQl2YWx1ZXM2NFtpXSA9IHZhbHVlW2ldCisJCQllbHNlOgorCQkJCXNpemUgPSA4CisJCQkJY192YWx1ZSA9IDx2b2lkKj5jX2JybGFwaS5tYWxsb2Moc2l6ZSkKKwkJCQl2YWx1ZXM2NCA9IDx1aW50NjRfdCAqPmNfdmFsdWUKKwkJCQl2YWx1ZXM2NFswXSA9IHZhbHVlCisJCWVsc2U6CisJCQlyYWlzZSBWYWx1ZUVycm9yKCJVbnN1cHBvcnRlZCBwYXJhbWV0ZXIgdHlwZSIpCisKKwkJd2l0aCBub2dpbDoKKwkJCXJldHZhbCA9IGNfYnJsYXBpLmJybGFwaV9fc2V0UGFyYW1ldGVyKHNlbGYuaCwgY19wYXJhbSwgY19zdWJwYXJhbSwgY19mbGFncywgY192YWx1ZSwgc2l6ZSkKKwkJaWYgcmV0dmFsID09IC0xOgorCQkJY19icmxhcGkuZnJlZShjX3ZhbHVlKQorCQkJcmFpc2UgT3BlcmF0aW9uRXJyb3IoKQorCQljX2JybGFwaS5mcmVlKGNfdmFsdWUpCisKKwlkZWYgd2F0Y2hQYXJhbWV0ZXIoc2VsZiwgcGFyYW0sIHN1YnBhcmFtLCBmbGFncywgZnVuYyk6CisJCSIiIlNldCBhIHBhcmFtZXRlciBjaGFuZ2UgY2FsbGJhY2suCisJCVNlZSBicmxhcGlfd2F0Y2hQYXJhbWV0ZXIoMykuCisKKwkJVGhpcyByZWdpc3RlcnMgYSBwYXJhbWV0ZXIgY2hhbmdlIGNhbGxiYWNrOiB3aGVuZXZlciB0aGUgZ2l2ZW4KKwkJcGFyYW1ldGVyIGNoYW5nZXMsIHRoZSBnaXZlbiBmdW5jdGlvbiBpcyBjYWxsZWQuCisKKwkJVGhpcyByZXR1cm5zIGFuIGVudHJ5IG9iamVjdCwgdG8gYmUgcGFzc2VkIHRvIHVud2F0Y2hQYXJhbWV0ZXIuIiIiCisJCWNkZWYgY19icmxhcGkuYnJsYXBpX3BhcmFtX3QgY19wYXJhbQorCQljZGVmIGNfYnJsYXBpLmJybGFwaV9wYXJhbV9zdWJwYXJhbV90IGNfc3VicGFyYW0KKwkJY2RlZiBjX2JybGFwaS5icmxhcGlfcGFyYW1fZmxhZ3NfdCBjX2ZsYWdzCisJCWNkZWYgY19icmxhcGkuYnJsYXBpX3B5dGhvbl9wYXJhbUNhbGxiYWNrRGVzY3JpcHRvcl90ICpkZXNjcgorCisJCWNfcGFyYW0gPSBwYXJhbQorCQljX3N1YnBhcmFtID0gc3VicGFyYW0KKwkJY19mbGFncyA9IGZsYWdzCisKKwkJZGVmIGNmdW5jKHBhcmFtKToKKwkJCWNkZWYgY19icmxhcGkuYnJsYXBpX3B5dGhvbl9jYWxsYmFja0RhdGFfdCAqY2FsbGJhY2tEYXRhCisJCQljYWxsYmFja0RhdGEgPSA8Y19icmxhcGkuYnJsYXBpX3B5dGhvbl9jYWxsYmFja0RhdGFfdCo+IDx1aW50cHRyX3Q+IHBhcmFtCisKKwkJCXBhcmFtZXRlciA9IGNhbGxiYWNrRGF0YS5wYXJhbWV0ZXIKKwkJCXN1YnBhcmFtID0gY2FsbGJhY2tEYXRhLnN1YnBhcmFtCisJCQlmbGFncyA9IGNhbGxiYWNrRGF0YS5mbGFncworCQkJZGF0YSA9IF9wYXJhbWV0ZXJUb1B5dGhvbihjYWxsYmFja0RhdGEucGFyYW1ldGVyLCBjYWxsYmFja0RhdGEuZGF0YSwgY2FsbGJhY2tEYXRhLmxlbikKKworCQkJZnVuYyhwYXJhbWV0ZXIsIHN1YnBhcmFtLCBmbGFncywgZGF0YSkKKworCQlkZXNjciA9IGNfYnJsYXBpLmJybGFwaV9weXRob25fd2F0Y2hQYXJhbWV0ZXIoc2VsZi5oLCBjX3BhcmFtLCBjX3N1YnBhcmFtLCBjX2ZsYWdzLCBjZnVuYykKKwkJcmV0dXJuIDx1aW50cHRyX3Q+ZGVzY3IKKworCWRlZiB1bndhdGNoUGFyYW1ldGVyKHNlbGYsIGVudHJ5KToKKwkJIiIiQ2xlYXIgYSBwYXJhbWV0ZXIgY2hhbmdlIGNhbGxiYWNrLgorCQlTZWUgYnJsYXBpX3Vud2F0Y2hQYXJhbWV0ZXIoMykuCisKKwkJVGhpcyB1bnJlZ2lzdGVycyBhIHBhcmFtZXRlciBjaGFuZ2UgY2FsbGJhY2s6IHRoZSBjYWxsYmFjaworCQlmdW5jdGlvbiBwcmV2aW91c2x5IHJlZ2lzdGVyZWQgd2l0aCBicmxhcGlfd2F0Y2hQYXJhbWV0ZXIKKwkJd2lsbCBub3QgYmUgY2FsbGVkIGFueSBtb3JlLiIiIgorCQljZGVmIHVpbnRwdHJfdCBkZXNjcgorCisJCWRlc2NyID0gZW50cnkKKwkJY19icmxhcGkuYnJsYXBpX3B5dGhvbl91bndhdGNoUGFyYW1ldGVyKHNlbGYuaCwgPGNfYnJsYXBpLmJybGFwaV9weXRob25fcGFyYW1DYWxsYmFja0Rlc2NyaXB0b3JfdCAqPmRlc2NyKQorCisJZGVmIHBhdXNlKHNlbGYsIHRpbWVvdXRfbXMpOgorCQkiIiJXYWl0IHVudGlsIGFuIGV2ZW50IGlzIHJlY2VpdmVkIGZyb20gdGhlIEJybEFQSSBzZXJ2ZXIuCisJCVNlZSBicmxhcGlfcGF1c2UoMykuCisJCSIiIgorCQljX2JybGFwaS5icmxhcGlfX3BhdXNlKHNlbGYuaCwgdGltZW91dF9tcykKKworCWRlZiBzeW5jKHNlbGYpOgorCQkiIiJTeW5jaHJvbml6ZSBhZ2FpbnN0IGFueSBwZW5kaW5nIGV4Y2VwdGlvbiwgYW5kIHJhaXNlIGl0LgorCQlTZWUgYnJsYXBpX3N5bmMoMykuCisJCSIiIgorCQljZGVmIGludCByZXR2YWwKKworCQl3aXRoIG5vZ2lsOgorCQkJcmV0dmFsID0gY19icmxhcGkuYnJsYXBpX19zeW5jKHNlbGYuaCkKKwkJaWYgcmV0dmFsID09IC0xOgorCQkJcmFpc2UgT3BlcmF0aW9uRXJyb3IoKQpkaWZmIC0tZ2l0IGEvQmluZGluZ3MvUHl0aG9uL2NfYnJsYXBpLnB4ZCBiL0JpbmRpbmdzL1B5dGhvbi9jX2JybGFwaS5weGQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTRkMTk5NAotLS0gL2Rldi9udWxsCisrKyBiL0JpbmRpbmdzL1B5dGhvbi9jX2JybGFwaS5weGQKQEAgLTAsMCArMSwxNzUgQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgbGliYnJsYXBpIC0gQSBsaWJyYXJ5IHByb3ZpZGluZyBhY2Nlc3MgdG8gYnJhaWxsZSB0ZXJtaW5hbHMgZm9yIGFwcGxpY2F0aW9ucy4KKyMKKyMgQ29weXJpZ2h0IChDKSAyMDA1LTIwMjMgYnkKKyMgICBBbGV4aXMgUm9iZXJ0IDxhbGV4aXNzb2Z0QGZyZWUuZnI+CisjICAgU2FtdWVsIFRoaWJhdWx0IDxTYW11ZWwuVGhpYmF1bHRAZW5zLWx5b24ub3JnPgorIworIyBsaWJicmxhcGkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorIworIyBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisjIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyMgbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisjCisjIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMgRmlsZSBiaW5kaW5nIEMgZnVuY3Rpb25zCisKK2Zyb20gbGliYy5zdGRpbnQgY2ltcG9ydCB1aW50OF90LCB1aW50MTZfdCwgdWludDMyX3QsIHVpbnQ2NF90CisKK2Zyb20gY3B5dGhvbi5yZWYgY2ltcG9ydCBQeU9iamVjdAorCitjZGVmIGV4dGVybiBmcm9tICJzeXMvdHlwZXMuaCI6CisJY3R5cGVkZWYgUHlfc3NpemVfdCBzaXplX3QKKwljdHlwZWRlZiBQeV9zc2l6ZV90IHNzaXplX3QKKworY2RlZiBleHRlcm4gZnJvbSAiUHJvZ3JhbXMvYnJsYXBpX3Byb3RvY29sLmgiOgorCWludCBCUkxBUElfTUFYUEFDS0VUU0laRQorCitjZGVmIGV4dGVybiBmcm9tICJQcm9ncmFtcy9icmxhcGkuaCI6CisJY3R5cGVkZWYgc3RydWN0IGJybGFwaV9jb25uZWN0aW9uU2V0dGluZ3NfdDoKKwkJY2hhciAqYXV0aAorCQljaGFyICpob3N0CisKKwljdHlwZWRlZiBzdHJ1Y3QgYnJsYXBpX3dyaXRlQXJndW1lbnRzX3Q6CisJCWludCBkaXNwbGF5TnVtYmVyCisJCXVuc2lnbmVkIGludCByZWdpb25CZWdpbgorCQlpbnQgcmVnaW9uU2l6ZQorCQljaGFyICp0ZXh0CisJCWludCB0ZXh0U2l6ZQorCQl1bnNpZ25lZCBjaGFyICphbmRNYXNrCisJCXVuc2lnbmVkIGNoYXIgKm9yTWFzaworCQlpbnQgY3Vyc29yCisJCWNoYXIgKmNoYXJzZXQKKworCWN0eXBlZGVmIHN0cnVjdCBicmxhcGlfZXhwYW5kZWRLZXlDb2RlX3Q6CisJCXVuc2lnbmVkIGludCB0eXBlCisJCXVuc2lnbmVkIGludCBjb21tYW5kCisJCXVuc2lnbmVkIGludCBhcmd1bWVudAorCQl1bnNpZ25lZCBpbnQgZmxhZ3MKKworCWN0eXBlZGVmIHN0cnVjdCBicmxhcGlfZGVzY3JpYmVkS2V5Q29kZV90OgorCQljaGFyICp0eXBlCisJCWNoYXIgKmNvbW1hbmQKKwkJdW5zaWduZWQgaW50IGFyZ3VtZW50CisJCXVuc2lnbmVkIGludCBmbGFncworCQljaGFyICpmbGFnWzMyXQorCQlicmxhcGlfZXhwYW5kZWRLZXlDb2RlX3QgdmFsdWVzCisKKwljdHlwZWRlZiBzdHJ1Y3QgYnJsYXBpX2Vycm9yX3Q6CisJCWludCBicmxlcnJubworCQlpbnQgbGliY2Vycm5vCisJCWludCBnYWllcnJubworCQljaGFyICplcnJmdW4KKworCWJybGFwaV9lcnJvcl90IGJybGFwaV9lcnJvcgorCisJY3R5cGVkZWYgc3RydWN0IGJybGFwaV9oYW5kbGVfdAorCisJY3R5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nIGJybGFwaV9rZXlDb2RlX3QKKworCXZvaWQgYnJsYXBpX2dldExpYnJhcnlWZXJzaW9uKGludCAqbWFqb3IsIGludCAqbWlub3IsIGludCAqcmV2aXNpb24pIG5vZ2lsCisJc2l6ZV90IGJybGFwaV9nZXRIYW5kbGVTaXplKCkKKwl2b2lkIGJybGFwaV9fY2xvc2VDb25uZWN0aW9uKGJybGFwaV9oYW5kbGVfdCAqKQorCWludCBicmxhcGlfX29wZW5Db25uZWN0aW9uKGJybGFwaV9oYW5kbGVfdCAqLCBicmxhcGlfY29ubmVjdGlvblNldHRpbmdzX3QqLCBicmxhcGlfY29ubmVjdGlvblNldHRpbmdzX3QqKSBub2dpbAorCisJaW50IGJybGFwaV9fZ2V0RGlzcGxheVNpemUoYnJsYXBpX2hhbmRsZV90ICosIHVuc2lnbmVkIGludCp4LCB1bnNpZ25lZCBpbnQgKnkpIG5vZ2lsCisJaW50IGJybGFwaV9fZ2V0RHJpdmVyTmFtZShicmxhcGlfaGFuZGxlX3QgKiwgY2hhciosIGludCkgbm9naWwKKwlpbnQgYnJsYXBpX19nZXRNb2RlbElkZW50aWZpZXIoYnJsYXBpX2hhbmRsZV90ICosIGNoYXIqLCBpbnQpIG5vZ2lsCisKKwlpbnQgYnJsYXBpX19lbnRlclR0eU1vZGUoYnJsYXBpX2hhbmRsZV90ICosIGludCwgY2hhciopIG5vZ2lsCisJaW50IGJybGFwaV9fZW50ZXJUdHlNb2RlV2l0aFBhdGgoYnJsYXBpX2hhbmRsZV90ICosIGludCAqLCBpbnQsIGNoYXIqKSBub2dpbAorCWludCBicmxhcGlfX2xlYXZlVHR5TW9kZShicmxhcGlfaGFuZGxlX3QgKikgbm9naWwKKwlpbnQgYnJsYXBpX19zZXRGb2N1cyhicmxhcGlfaGFuZGxlX3QgKiwgaW50KSBub2dpbAorCisJaW50IGJybGFwaV9fd3JpdGUoYnJsYXBpX2hhbmRsZV90ICosIGJybGFwaV93cml0ZUFyZ3VtZW50c190Kikgbm9naWwKKwlpbnQgYnJsYXBpX193cml0ZURvdHMoYnJsYXBpX2hhbmRsZV90ICosIHVuc2lnbmVkIGNoYXIqKSBub2dpbAorCWludCBicmxhcGlfX3dyaXRlVGV4dChicmxhcGlfaGFuZGxlX3QgKiwgaW50LCBjaGFyKikgbm9naWwKKworCWN0eXBlZGVmIGVudW0gYnJsYXBpX3JhbmdlVHlwZV90OgorCQlicmxhcGlfcmFuZ2VUeXBlX2FsbAorCQorCWN0eXBlZGVmIHN0cnVjdCBicmxhcGlfcmFuZ2VfdDoKKwkJYnJsYXBpX2tleUNvZGVfdCBmaXJzdAorCQlicmxhcGlfa2V5Q29kZV90IGxhc3QKKworCWludCBicmxhcGlfX2lnbm9yZUtleXMoYnJsYXBpX2hhbmRsZV90ICosIGJybGFwaV9yYW5nZVR5cGVfdCwgYnJsYXBpX2tleUNvZGVfdCAqLCB1bnNpZ25lZCBpbnQpIG5vZ2lsCisJaW50IGJybGFwaV9fYWNjZXB0S2V5cyhicmxhcGlfaGFuZGxlX3QgKiwgYnJsYXBpX3JhbmdlVHlwZV90LCBicmxhcGlfa2V5Q29kZV90ICosIHVuc2lnbmVkIGludCkgbm9naWwKKwlpbnQgYnJsYXBpX19pZ25vcmVBbGxLZXlzKGJybGFwaV9oYW5kbGVfdCAqKSBub2dpbAorCWludCBicmxhcGlfX2FjY2VwdEFsbEtleXMoYnJsYXBpX2hhbmRsZV90ICopIG5vZ2lsCisJaW50IGJybGFwaV9faWdub3JlS2V5UmFuZ2VzKGJybGFwaV9oYW5kbGVfdCAqLCBicmxhcGlfcmFuZ2VfdCAqLCB1bnNpZ25lZCBpbnQpIG5vZ2lsCisJaW50IGJybGFwaV9fYWNjZXB0S2V5UmFuZ2VzKGJybGFwaV9oYW5kbGVfdCAqLCBicmxhcGlfcmFuZ2VfdCAqLCB1bnNpZ25lZCBpbnQpIG5vZ2lsCisJaW50IGJybGFwaV9fcmVhZEtleShicmxhcGlfaGFuZGxlX3QgKiwgaW50LCBicmxhcGlfa2V5Q29kZV90Kikgbm9naWwKKwlpbnQgYnJsYXBpX19yZWFkS2V5V2l0aFRpbWVvdXQoYnJsYXBpX2hhbmRsZV90ICosIGludCwgYnJsYXBpX2tleUNvZGVfdCopIG5vZ2lsCisJaW50IGJybGFwaV9leHBhbmRLZXlDb2RlKGJybGFwaV9rZXlDb2RlX3QsIGJybGFwaV9leHBhbmRlZEtleUNvZGVfdCAqKQorCWludCBicmxhcGlfZGVzY3JpYmVLZXlDb2RlKGJybGFwaV9rZXlDb2RlX3QsIGJybGFwaV9kZXNjcmliZWRLZXlDb2RlX3QgKikKKworCWludCBicmxhcGlfX2VudGVyUmF3TW9kZShicmxhcGlfaGFuZGxlX3QgKiwgY2hhciopIG5vZ2lsCisJaW50IGJybGFwaV9fbGVhdmVSYXdNb2RlKGJybGFwaV9oYW5kbGVfdCAqKSBub2dpbAorCWludCBicmxhcGlfX3JlY3ZSYXcoYnJsYXBpX2hhbmRsZV90ICosIHZvaWQqLCBpbnQpCisJaW50IGJybGFwaV9fc2VuZFJhdyhicmxhcGlfaGFuZGxlX3QgKiwgdm9pZCosIGludCkKKworCWN0eXBlZGVmIGludCBicmxhcGlfcGFyYW1fdAorCWN0eXBlZGVmIHVpbnQ2NF90IGJybGFwaV9wYXJhbV9zdWJwYXJhbV90CisJY3R5cGVkZWYgdWludDMyX3QgYnJsYXBpX3BhcmFtX2ZsYWdzX3QKKwljdHlwZWRlZiB2b2lkICpicmxhcGlfcGFyYW1DYWxsYmFja0Rlc2NyaXB0b3JfdAorCisJY3R5cGVkZWYgaW50IGJybGFwaV9wYXJhbV90eXBlX3QKKwljdHlwZWRlZiBzdHJ1Y3QgYnJsYXBpX3BhcmFtX3Byb3BlcnRpZXNfdDoKKwkJYnJsYXBpX3BhcmFtX3R5cGVfdCB0eXBlCisJCXVpbnQxNl90IGFycmF5U2l6ZQorCQl1aW50MTZfdCBpc0FycmF5CisJCXVpbnQxNl90IGNhblJlYWQKKwkJdWludDE2X3QgY2FuV3JpdGUKKwkJdWludDE2X3QgY2FuV2F0Y2gKKwkJdWludDE2X3QgYWJpUGFkZGluZzEKKwkJdWludDE2X3QgaGFzU3VicGFyYW0KKworCXZvaWQgKmJybGFwaV9fZ2V0UGFyYW1ldGVyQWxsb2MoYnJsYXBpX2hhbmRsZV90ICosIGJybGFwaV9wYXJhbV90LCB1bnNpZ25lZCBsb25nIGxvbmcsIGJybGFwaV9wYXJhbV9mbGFnc190LCBzaXplX3QgKikgbm9naWwKKwlpbnQgYnJsYXBpX19zZXRQYXJhbWV0ZXIoYnJsYXBpX2hhbmRsZV90ICosIGJybGFwaV9wYXJhbV90LCB1bnNpZ25lZCBsb25nIGxvbmcsIGJybGFwaV9wYXJhbV9mbGFnc190LCB2b2lkKiwgc2l6ZV90KSBub2dpbAorCWNvbnN0IGJybGFwaV9wYXJhbV9wcm9wZXJ0aWVzX3QgKmJybGFwaV9nZXRQYXJhbWV0ZXJQcm9wZXJ0aWVzKGJybGFwaV9wYXJhbV90IHBhcmFtZXRlcikgbm9naWwKKwlicmxhcGlfcGFyYW1DYWxsYmFja0Rlc2NyaXB0b3JfdCBicmxhcGlfX3dhdGNoUGFyYW1ldGVyKGJybGFwaV9oYW5kbGVfdCAqLCBicmxhcGlfcGFyYW1fdCwgdWludDY0X3QsIGJybGFwaV9wYXJhbV9mbGFnc190LCBicmxhcGlfcGFyYW1DYWxsYmFja190LCB2b2lkICosIHZvaWQqLCBzaXplX3QpCisJaW50IGJybGFwaV9fdW53YXRjaFBhcmFtZXRlcihicmxhcGlfaGFuZGxlX3QgKiwgYnJsYXBpX3BhcmFtQ2FsbGJhY2tEZXNjcmlwdG9yX3QpCisKKwlpbnQgYnJsYXBpX19wYXVzZShicmxhcGlfaGFuZGxlX3QgKmhhbmRsZSwgaW50IHRpbWVvdXRfbXMpIG5vZ2lsCisJaW50IGJybGFwaV9fc3luYyhicmxhcGlfaGFuZGxlX3QgKmhhbmRsZSkgbm9naWwKKworCWJybGFwaV9lcnJvcl90KiBicmxhcGlfZXJyb3JfbG9jYXRpb24oKQorCXNpemVfdCBicmxhcGlfc3RyZXJyb3JfcihicmxhcGlfZXJyb3JfdCosIGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1ZmxlbikKKwlicmxhcGlfa2V5Q29kZV90IEJSTEFQSV9LRVlfTUFYCisJYnJsYXBpX2tleUNvZGVfdCBCUkxBUElfS0VZX0ZMQUdTX01BU0sKKwlicmxhcGlfa2V5Q29kZV90IEJSTEFQSV9LRVlfVFlQRV9NQVNLCisJYnJsYXBpX2tleUNvZGVfdCBCUkxBUElfS0VZX0NPREVfTUFTSworCWJybGFwaV9rZXlDb2RlX3QgQlJMQVBJX0tFWV9DTURfQkxLX01BU0sKKwlicmxhcGlfa2V5Q29kZV90IEJSTEFQSV9LRVlfQ01EX0FSR19NQVNLCisKK2NkZWYgZXh0ZXJuIGZyb20gImJpbmRpbmdzLmgiOgorCWJybGFwaV93cml0ZUFyZ3VtZW50c190IGJybGFwaV93cml0ZUFyZ3VtZW50c19pbml0aWFsaXplZAorCWNoYXIgKmJybGFwaV9wcm90b2NvbEV4Y2VwdGlvbigpCisJdm9pZCBicmxhcGlfcHJvdG9jb2xFeGNlcHRpb25Jbml0KGJybGFwaV9oYW5kbGVfdCAqKQorCisJY3R5cGVkZWYgc3RydWN0IGJybGFwaV9weXRob25fcGFyYW1DYWxsYmFja0Rlc2NyaXB0b3JfdDoKKwkJYnJsYXBpX3BhcmFtQ2FsbGJhY2tEZXNjcmlwdG9yX3QgYnJsYXBpX2Rlc2NyCisJCVB5T2JqZWN0ICpjYWxsYmFjaworCisJY3R5cGVkZWYgc3RydWN0IGJybGFwaV9weXRob25fY2FsbGJhY2tEYXRhX3Q6CisJCWJybGFwaV9wYXJhbV90IHBhcmFtZXRlcgorCQlicmxhcGlfcGFyYW1fc3VicGFyYW1fdCBzdWJwYXJhbQorCQlicmxhcGlfcGFyYW1fZmxhZ3NfdCBmbGFncworCQljb25zdCB2b2lkICpkYXRhCisJCXNpemVfdCBsZW4KKworCWJybGFwaV9weXRob25fcGFyYW1DYWxsYmFja0Rlc2NyaXB0b3JfdCAqYnJsYXBpX3B5dGhvbl93YXRjaFBhcmFtZXRlcihicmxhcGlfaGFuZGxlX3QgKiwgYnJsYXBpX3BhcmFtX3QsIHVpbnQ2NF90LCBpbnQsIG9iamVjdCkgZXhjZXB0IE5VTEwKKwlpbnQgYnJsYXBpX3B5dGhvbl91bndhdGNoUGFyYW1ldGVyKGJybGFwaV9oYW5kbGVfdCAqLCBicmxhcGlfcHl0aG9uX3BhcmFtQ2FsbGJhY2tEZXNjcmlwdG9yX3QgKikKKworY2RlZiBleHRlcm4gZnJvbSAic3RkbGliLmgiOgorCXZvaWQgKm1hbGxvYyhzaXplX3QpCisJdm9pZCBmcmVlKHZvaWQqKQorCWNoYXIgKnN0cmR1cChjaGFyICopCisKK2NkZWYgZXh0ZXJuIGZyb20gInN0cmluZy5oIjoKKwl2b2lkICptZW1jcHkodm9pZCAqLCB2b2lkICosIHNpemVfdCkKZGlmZiAtLWdpdCBhL0JpbmRpbmdzL1B5dGhvbi9jb25zdGFudHMuYXdrIGIvQmluZGluZ3MvUHl0aG9uL2NvbnN0YW50cy5hd2sKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmI2NWVkYwotLS0gL2Rldi9udWxsCisrKyBiL0JpbmRpbmdzL1B5dGhvbi9jb25zdGFudHMuYXdrCkBAIC0wLDAgKzEsMTA2IEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIGxpYmJybGFwaSAtIEEgbGlicmFyeSBwcm92aWRpbmcgYWNjZXNzIHRvIGJyYWlsbGUgdGVybWluYWxzIGZvciBhcHBsaWNhdGlvbnMuCisjCisjIENvcHlyaWdodCAoQykgMjAwNS0yMDIzIGJ5CisjICAgQWxleGlzIFJvYmVydCA8YWxleGlzc29mdEBmcmVlLmZyPgorIyAgIFNhbXVlbCBUaGliYXVsdCA8U2FtdWVsLlRoaWJhdWx0QGVucy1seW9uLm9yZz4KKyMKKyMgbGliYnJsYXBpIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitmdW5jdGlvbiBicmxDb21tYW5kKG5hbWUsIHN5bWJvbCwgdmFsdWUsIGhlbHApIHsKKyAgd3JpdGVDb21tYW5kRGVmaW5pdGlvbihuYW1lLCB2YWx1ZSwgaGVscCkKK30KKworZnVuY3Rpb24gYnJsQmxvY2sobmFtZSwgc3ltYm9sLCB2YWx1ZSwgaGVscCkgeworICBpZiAobmFtZSA9PSAiUEFTU0NIQVIiKSByZXR1cm4KKyAgaWYgKG5hbWUgPT0gIlBBU1NLRVkiKSByZXR1cm4KKworICB3cml0ZUNvbW1hbmREZWZpbml0aW9uKG5hbWUsICIoIiB2YWx1ZSIgPDwgS0VZX0NNRF9CTEtfU0hJRlQpIiwgaGVscCkKK30KKworZnVuY3Rpb24gYnJsS2V5KG5hbWUsIHN5bWJvbCwgdmFsdWUsIGhlbHApIHsKK30KKworZnVuY3Rpb24gYnJsRmxhZyhuYW1lLCBzeW1ib2wsIHZhbHVlLCBoZWxwKSB7CisgIGlmICh2YWx1ZSB+IC9eMFt4WF1bMC05YS1mQS1GXSswMDAwJC8pIHsKKyAgICB2YWx1ZSA9IHRvbG93ZXIoc3Vic3RyKHZhbHVlLCAxLCBsZW5ndGgodmFsdWUpLTQpKQorICAgIGlmIChuYW1lIH4gL15DSEFSXy8pIHsKKyAgICAgIG5hbWUgPSBzdWJzdHIobmFtZSwgNikKKyAgICB9IGVsc2UgeworICAgICAgdmFsdWUgPSB2YWx1ZSAiMDAiCisgICAgfQorICB9IGVsc2UgaWYgKHZhbHVlIH4gL15cKC8pIHsKKyAgICBnc3ViKCJCUkxfRkxHXyIsICJLRVlfRkxHXyIsIHZhbHVlKQorICB9IGVsc2UgeworICAgIHJldHVybgorICB9CisgIHdyaXRlUHl0aG9uQXNzaWdubWVudCgiS0VZX0ZMR18iIG5hbWUsIHZhbHVlLCBoZWxwKQorfQorCitmdW5jdGlvbiBicmxEb3QobnVtYmVyLCBzeW1ib2wsIHZhbHVlLCBoZWxwKSB7CisgIHdyaXRlUHl0aG9uQXNzaWdubWVudCgiRE9UIiBudW1iZXIsIHZhbHVlLCBoZWxwKQorfQorCitmdW5jdGlvbiBhcGlDb25zdGFudChuYW1lLCBzeW1ib2wsIHZhbHVlLCBoZWxwKSB7CisgIHdyaXRlUHl0aG9uQXNzaWdubWVudChuYW1lLCB2YWx1ZSwgaGVscCkKK30KKworZnVuY3Rpb24gYXBpTWFzayhuYW1lLCBzeW1ib2wsIHZhbHVlLCBoZWxwKSB7CisgIHdyaXRlUHl0aG9uQXNzaWdubWVudCgiS0VZXyIgbmFtZSwgImNfYnJsYXBpLiIgc3ltYm9sLCBoZWxwKQorfQorCitmdW5jdGlvbiBhcGlTaGlmdChuYW1lLCBzeW1ib2wsIHZhbHVlLCBoZWxwKSB7CisgIHZhbHVlID0gaGV4YWRlY2ltYWxWYWx1ZSh2YWx1ZSkKKyAgd3JpdGVQeXRob25Bc3NpZ25tZW50KCJLRVlfIiBuYW1lLCB2YWx1ZSwgaGVscCkKK30KKworZnVuY3Rpb24gYXBpVHlwZShuYW1lLCBzeW1ib2wsIHZhbHVlLCBoZWxwKSB7CisgIHZhbHVlID0gaGV4YWRlY2ltYWxWYWx1ZSh2YWx1ZSkKKyAgd3JpdGVQeXRob25Bc3NpZ25tZW50KCJLRVlfVFlQRV8iIG5hbWUsIHZhbHVlLCBoZWxwKQorfQorCitmdW5jdGlvbiBhcGlLZXkobmFtZSwgc3ltYm9sLCB2YWx1ZSwgaGVscCkgeworICB2YWx1ZSA9IGhleGFkZWNpbWFsVmFsdWUodmFsdWUpCisKKyAgaWYgKG5hbWUgPT0gIkZVTkNUSU9OIikgeworICAgIGZvciAoaT0wOyBpPDM1OyArK2kpIHsKKyAgICAgIGtleSA9ICJGIiAoaSsxKQorICAgICAgd3JpdGVLZXlEZWZpbml0aW9uKGtleSwgIigiIHZhbHVlICIgKyAiIGkgIikiLCAidGhlICIga2V5ICIga2V5IikKKyAgICB9CisgIH0gZWxzZSB7CisgICAgd3JpdGVLZXlEZWZpbml0aW9uKG5hbWUsIHZhbHVlLCBoZWxwKQorICB9Cit9CisKK2Z1bmN0aW9uIGFwaVJhbmdlVHlwZShuYW1lLCBzeW1ib2wsIHZhbHVlLCBoZWxwKSB7CisgIHdyaXRlUHl0aG9uQXNzaWdubWVudCgicmFuZ2VUeXBlXyIgbmFtZSwgdmFsdWUsIGhlbHApCit9CisKK2Z1bmN0aW9uIHdyaXRlQ29tbWFuZERlZmluaXRpb24obmFtZSwgdmFsdWUsIGhlbHApIHsKKyAgd3JpdGVQeXRob25Bc3NpZ25tZW50KCJLRVlfQ01EXyIgbmFtZSwgdmFsdWUsIGhlbHApCit9CisKK2Z1bmN0aW9uIHdyaXRlS2V5RGVmaW5pdGlvbihuYW1lLCB2YWx1ZSwgaGVscCkgeworICB3cml0ZVB5dGhvbkFzc2lnbm1lbnQoIktFWV9TWU1fIiBuYW1lLCB2YWx1ZSwgaGVscCkKK30KKworZnVuY3Rpb24gd3JpdGVQeXRob25Bc3NpZ25tZW50KG5hbWUsIHZhbHVlLCBoZWxwKSB7CisgIGlmIChsZW5ndGgoaGVscCkgPiAwKSBwcmludCAiIyMgIiBoZWxwCisgIHByaW50IG5hbWUgIiA9ICIgdmFsdWUKK30KKworZnVuY3Rpb24gaGV4YWRlY2ltYWxWYWx1ZSh2YWx1ZSkgeworICB2YWx1ZSA9IHRvbG93ZXIodmFsdWUpCisgIHJldHVybiB2YWx1ZQorfQorCmRpZmYgLS1naXQgYS9CaW5kaW5ncy9QeXRob24vbWtkb2MucHkgYi9CaW5kaW5ncy9QeXRob24vbWtkb2MucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjAyYjdkNAotLS0gL2Rldi9udWxsCisrKyBiL0JpbmRpbmdzL1B5dGhvbi9ta2RvYy5weQpAQCAtMCwwICsxLDI2IEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIGxpYmJybGFwaSAtIEEgbGlicmFyeSBwcm92aWRpbmcgYWNjZXNzIHRvIGJyYWlsbGUgdGVybWluYWxzIGZvciBhcHBsaWNhdGlvbnMuCisjCisjIENvcHlyaWdodCAoQykgMjAwNS0yMDIzIGJ5CisjICAgQWxleGlzIFJvYmVydCA8YWxleGlzc29mdEBmcmVlLmZyPgorIyAgIFNhbXVlbCBUaGliYXVsdCA8U2FtdWVsLlRoaWJhdWx0QGVucy1seW9uLm9yZz4KKyMKKyMgbGliYnJsYXBpIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitmcm9tIGRpc3R1dGlscy51dGlsIGltcG9ydCBnZXRfcGxhdGZvcm0KK2ltcG9ydCBweWRvYworaW1wb3J0IHN5cworCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHN5cy5wYXRoLmluc2VydCgxLCAnYnVpbGQvbGliLicgKyBnZXRfcGxhdGZvcm0oKSArICctJyArIHN5cy52ZXJzaW9uWzA6M10pCisgICAgcHlkb2Mud3JpdGVkb2MoJ2JybGFwaScpCmRpZmYgLS1naXQgYS9CaW5kaW5ncy9QeXRob24vc2V0dXAucHkuaW4gYi9CaW5kaW5ncy9QeXRob24vc2V0dXAucHkuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDg2MDM4NQotLS0gL2Rldi9udWxsCisrKyBiL0JpbmRpbmdzL1B5dGhvbi9zZXR1cC5weS5pbgpAQCAtMCwwICsxLDczIEBACisjIEBjb25maWd1cmVfaW5wdXRACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIGxpYmJybGFwaSAtIEEgbGlicmFyeSBwcm92aWRpbmcgYWNjZXNzIHRvIGJyYWlsbGUgdGVybWluYWxzIGZvciBhcHBsaWNhdGlvbnMuCisjCisjIENvcHlyaWdodCAoQykgMjAwNS0yMDIzIGJ5CisjICAgQWxleGlzIFJvYmVydCA8YWxleGlzc29mdEBmcmVlLmZyPgorIyAgIFNhbXVlbCBUaGliYXVsdCA8U2FtdWVsLlRoaWJhdWx0QGVucy1seW9uLm9yZz4KKyMKKyMgbGliYnJsYXBpIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitmcm9tIHNldHVwdG9vbHMgaW1wb3J0IHNldHVwLCBFeHRlbnNpb24KKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICBicmxhcGkgPSBFeHRlbnNpb24oImJybGFwaSIsCisgICAgICAgIGxhbmd1YWdlID0gImMiLAorCisgICAgICAgIHNvdXJjZXMgPSBbCisgICAgICAgICAgICAiYnJsYXBpLmF1dG8uYyIsCisgICAgICAgICAgICAiQHNyY2RpckAvYmluZGluZ3MuYyIKKyAgICAgICAgXSwKKworICAgICAgICBpbmNsdWRlX2RpcnMgPSBbCisgICAgICAgICAgICAiQGJ1aWxkZGlyQCIsCisgICAgICAgICAgICAiQHNyY2RpckAiLAorICAgICAgICAgICAgIkB0b3BfYnVpbGRkaXJAL1Byb2dyYW1zIiwKKyAgICAgICAgICAgICJAdG9wX3NyY2RpckAvUHJvZ3JhbXMiLAorICAgICAgICAgICAgIkB0b3BfYnVpbGRkaXJALyIsCisgICAgICAgICAgICAiQHRvcF9zcmNkaXJALyIKKyAgICAgICAgXSwKKworICAgICAgICBsaWJyYXJ5X2RpcnMgPSBbCisgICAgICAgICAgICAiLi9AdG9wX2J1aWxkZGlyQC9Qcm9ncmFtcyIKKyAgICAgICAgXSwKKworICAgICAgICBsaWJyYXJpZXMgPSBbCisgICAgICAgICAgICAiYnJsYXBpIiwKKyAgICAgICAgICAgICJwdGhyZWFkIgorICAgICAgICBdLAorCisgICAgICAgIGRlZmluZV9tYWNyb3MgPSBbCisgICAgICAgIF0sCisKKyAgICAgICAgZXh0cmFfY29tcGlsZV9hcmdzID0gIkBDWVRIT05fQ0ZMQUdTQCIuc3BsaXQoKQorICAgICkKKyAgICAKKyAgICBzZXR1cCgKKyAgICAgICAgemlwX3NhZmUgPSBGYWxzZSwKKworICAgICAgICBuYW1lID0gIkJybGFwaSIsCisgICAgICAgIHZlcnNpb24gPSAiQGFwaV9yZWxlYXNlQCIsCisgICAgICAgIGRlc2NyaXB0aW9uID0gIkJybEFQSSBDbGllbnQgQmluZGluZ3MgZm9yIFB5dGhvbiIsCisKKyAgICAgICAgYXV0aG9yID0gIkFsZXhpcyBSb2JlcnQiLAorICAgICAgICBhdXRob3JfZW1haWwgPSAiYWxleGlzc29mdEBmcmVlLmZyIiwKKworICAgICAgICBtYWludGFpbmVyID0gIlRoZSBCUkxUVFkgRGV2ZWxvcGVycyIsCisgICAgICAgIG1haW50YWluZXJfZW1haWwgPSAiQFBBQ0tBR0VfQlVHUkVQT1JUQCIsCisKKyAgICAgICAgbGljZW5zZSA9ICJMR1BMIDIuMSIsCisgICAgICAgIHVybCA9ICJAUEFDS0FHRV9VUkxAIiwKKworICAgICAgICBleHRfbW9kdWxlcyA9IFticmxhcGldCisgICAgKQpkaWZmIC0tZ2l0IGEvQmluZGluZ3MvVGNsL01ha2VmaWxlLmluIGIvQmluZGluZ3MvVGNsL01ha2VmaWxlLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcyMzY1NzMKLS0tIC9kZXYvbnVsbAorKysgYi9CaW5kaW5ncy9UY2wvTWFrZWZpbGUuaW4KQEAgLTAsMCArMSw2MCBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBsaWJicmxhcGkgLSBBIGxpYnJhcnkgcHJvdmlkaW5nIGFjY2VzcyB0byBicmFpbGxlIHRlcm1pbmFscyBmb3IgYXBwbGljYXRpb25zLgorIworIyBDb3B5cmlnaHQgKEMpIDIwMDYtMjAyMyBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+CisjCisjIGxpYmJybGFwaSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisjCisjIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyMgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorIyBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyMKKyMgV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworIworIyBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworaW5jbHVkZSAkKFNSQ19UT1ApYmluZGluZ3MubWsKKworVENMU0ggPSBAVENMU0hACitUQ0xfT0sgPSBAVENMX09LQAorVENMX0NQUEZMQUdTID0gQFRDTF9DUFBGTEFHU0AKK1RDTF9MSUJTID0gQFRDTF9MSUJTQAorVENMX0RJUiA9IEBUQ0xfRElSQAorCitUQ0xfQVBJX0RJUiA9ICQoSU5TVEFMTF9ST09UKSQoVENMX0RJUikvJChBUElfTkFNRSktJChBUElfUkVMRUFTRSkKK1RDTF9BUElfTElCID0gJChMSUJfUEZYKSQoQVBJX05BTUUpX3RjbC4kKExJQl9FWFQpCitUQ0xfSU5ERVhfU0NSSVBUID0gbWtpbmRleAorCithbGw6ICQoVENMX0FQSV9MSUIpIHwgbWFrZS1pbmRleC1zY3JpcHQKKworJChUQ0xfQVBJX0xJQik6IGJpbmRpbmdzLiRPIHwgJChBUElfTkFNRSkKKwkkKE1LTElCOjxuYW1lPj0kKFRDTF9BUElfTElCKS4kKEFQSV9WRVJTSU9OKSkgJEAgYmluZGluZ3MuJE8gJChUQ0xfTElCUykgJChBUElfTERGTEFHUykKKworUEFSQU1FVEVSU19IRUFERVIgPSBwYXJhbWV0ZXJzLmF1dG8uaAorQ09OU1RBTlRTX0hFQURFUlMgPSAkKFBBUkFNRVRFUlNfSEVBREVSKQorCiskKENPTlNUQU5UU19IRUFERVJTKTogJChDT05TVEFOVFNfREVQRU5ERU5DSUVTKQorCSQoQVdLKSAtdiBwYXJhbWV0ZXJzSGVhZGVyPSQoUEFSQU1FVEVSU19IRUFERVIpICQoQ09OU1RBTlRTX0FSR1VNRU5UUykKKworYmluZGluZ3MuJE86CisJJChDQykgJChUQ0xfQ1BQRkxBR1MpICQoTElCQ0ZMQUdTKSAtbyAkQCAtYyAkKFNSQ19ESVIpL2JpbmRpbmdzLmMKKworbWFrZS1pbmRleC1zY3JpcHQ6CisJZWNobyA+JChUQ0xfSU5ERVhfU0NSSVBUKSAncGtnX21rSW5kZXggJChUQ0xfQVBJX0RJUikgJChUQ0xfQVBJX0xJQiknCisKK2NsZWFuOjoKKwktcm0gLWYgLS0gJChUQ0xfQVBJX0xJQikgJChUQ0xfSU5ERVhfU0NSSVBUKQorCS1ybSAtZiAtLSAkKENPTlNUQU5UU19IRUFERVJTKQorCitpbnN0YWxsOiBhbGwKKwkkKElOU1RBTExfRElSRUNUT1JZKSAkKFRDTF9BUElfRElSKQorCSQoSU5TVEFMTF9QUk9HUkFNKSAkKFRDTF9BUElfTElCKSAkKFRDTF9BUElfRElSKQorCSQoVENMU0gpIC4vJChUQ0xfSU5ERVhfU0NSSVBUKQorCit1bmluc3RhbGw6CisJLXJtIC1mICQoVENMX0FQSV9ESVIpLyQoVENMX0FQSV9MSUIpCisJLXJtIC1mICQoVENMX0FQSV9ESVIpL3BrZ0luZGV4LnRjbAorCS1bIC1kICQoVENMX0FQSV9ESVIpIF0gJiYgcm1kaXIgJChUQ0xfQVBJX0RJUikKKwpkaWZmIC0tZ2l0IGEvQmluZGluZ3MvVGNsL2FwaXNoZWxsIGIvQmluZGluZ3MvVGNsL2FwaXNoZWxsCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmM4ZGQ4MjIKLS0tIC9kZXYvbnVsbAorKysgYi9CaW5kaW5ncy9UY2wvYXBpc2hlbGwKQEAgLTAsMCArMSwyMSBAQAorIyEvYmluL2Jhc2gKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgbGliYnJsYXBpIC0gQSBsaWJyYXJ5IHByb3ZpZGluZyBhY2Nlc3MgdG8gYnJhaWxsZSB0ZXJtaW5hbHMgZm9yIGFwcGxpY2F0aW9ucy4KKyMKKyMgQ29weXJpZ2h0IChDKSAyMDA2LTIwMjMgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPgorIworIyBsaWJicmxhcGkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorIworIyBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisjIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyMgbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisjCisjIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKy4gIiR7MCUvKn0vLi4vLi4vYXBpdGVzdC5zaCIKK2V4ZWMgdGNsc2ggIiR7QH0iCitleGl0ICIkez99IgpkaWZmIC0tZ2l0IGEvQmluZGluZ3MvVGNsL2FwaXRlc3QgYi9CaW5kaW5ncy9UY2wvYXBpdGVzdApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5mZTIxMDIxCi0tLSAvZGV2L251bGwKKysrIGIvQmluZGluZ3MvVGNsL2FwaXRlc3QKQEAgLTAsMCArMSwyMSBAQAorIyEvYmluL2Jhc2gKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgbGliYnJsYXBpIC0gQSBsaWJyYXJ5IHByb3ZpZGluZyBhY2Nlc3MgdG8gYnJhaWxsZSB0ZXJtaW5hbHMgZm9yIGFwcGxpY2F0aW9ucy4KKyMKKyMgQ29weXJpZ2h0IChDKSAyMDA2LTIwMjMgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPgorIworIyBsaWJicmxhcGkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorIworIyBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisjIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyMgbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisjCisjIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKy4gIiR7MCUvKn0vLi4vLi4vYXBpdGVzdC5zaCIKK2V4ZWMgdGNsc2ggIiR7cHJvZ3JhbURpcmVjdG9yeX0vJHtwcm9ncmFtTmFtZX0udGNsIiAiJHtAfSIKK2V4aXQgIiR7P30iCmRpZmYgLS1naXQgYS9CaW5kaW5ncy9UY2wvYXBpdGVzdC50Y2wgYi9CaW5kaW5ncy9UY2wvYXBpdGVzdC50Y2wKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYjdjMGY4NQotLS0gL2Rldi9udWxsCisrKyBiL0JpbmRpbmdzL1RjbC9hcGl0ZXN0LnRjbApAQCAtMCwwICsxLDEyNiBAQAorIyEvdXNyL2Jpbi9lbnYgdGNsc2gKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgbGliYnJsYXBpIC0gQSBsaWJyYXJ5IHByb3ZpZGluZyBhY2Nlc3MgdG8gYnJhaWxsZSB0ZXJtaW5hbHMgZm9yIGFwcGxpY2F0aW9ucy4KKyMKKyMgQ29weXJpZ2h0IChDKSAyMDA2LTIwMjMgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPgorIworIyBsaWJicmxhcGkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorIworIyBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisjIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyMgbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisjCisjIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK3NvdXJjZSBbZmlsZSBqb2luIFtmaWxlIGRpcm5hbWUgJGFyZ3YwXSBwcm9sb2d1ZS50Y2xdCisKK3Byb2MgcHV0UHJvcGVydGllcyB7bGFiZWwgcHJvcGVydGllc30geworICAgcHV0cyBzdGRvdXQgIiRsYWJlbDogJHByb3BlcnRpZXMiCit9CisKK3Byb2MgZm9ybWF0UHJvcGVydHkge25hbWUgdmFsdWV9IHsKKyAgIHJldHVybiAiJG5hbWU9JHZhbHVlIgorfQorCitwcm9jIGZvcm1hdFZhbHVlcyB7dmFsdWVzIGFyZ3N9IHsKKyAgIHNldCByZXN1bHQgIiIKKyAgIHNldCBkZWxpbWl0ZXIgIiIKKworICAgZm9yZWFjaCBuYW1lICRhcmdzIHZhbHVlICR2YWx1ZXMgeworICAgICAgYXBwZW5kIHJlc3VsdCAiJGRlbGltaXRlcltmb3JtYXRQcm9wZXJ0eSAkbmFtZSAkdmFsdWVdIgorICAgICAgc2V0IGRlbGltaXRlciAiICIKKyAgIH0KKworICAgcmV0dXJuICRyZXN1bHQKK30KKworcHJvYyB0dHlTaG93S2V5Q29kZSB7c2Vzc2lvbiBjb2RlfSB7CisgICBzZXQgcHJvcGVydGllcyBbbGlzdF0KKworICAgYnJsYXBpIGRlc2NyaWJlS2V5Q29kZSAkY29kZSBkZXNjcmlwdGlvbgorICAgc2V0IGRlc2NyaXB0aW9uKGNvZGUpIFtmb3JtYXQgIjBYJVgiICRjb2RlXQorCisgICBmb3JlYWNoIHByb3BlcnR5IHtmbGFnc30geworICAgICAgc2V0IGRlc2NyaXB0aW9uKCRwcm9wZXJ0eSkgW2pvaW4gJGRlc2NyaXB0aW9uKCRwcm9wZXJ0eSkgIiwiXQorICAgfQorCisgICBmb3JlYWNoIHtwcm9wZXJ0eSBuYW1lfSB7CisgICAgICBjb2RlICAgICBjb2RlCisgICAgICB0eXBlICAgICB0eXBlCisgICAgICBjb21tYW5kICBjbWQKKyAgICAgIGFyZ3VtZW50IGFyZworICAgICAgZmxhZ3MgICAgZmxnCisgICB9IHsKKyAgICAgIGxhcHBlbmQgcHJvcGVydGllcyBbZm9ybWF0UHJvcGVydHkgJG5hbWUgJGRlc2NyaXB0aW9uKCRwcm9wZXJ0eSldCisgICAgICB1bnNldCBkZXNjcmlwdGlvbigkcHJvcGVydHkpCisgICB9CisKKyAgIGZvcmVhY2ggcHJvcGVydHkgW2xzb3J0IFthcnJheSBuYW1lcyBkZXNjcmlwdGlvbl1dIHsKKyAgICAgIGxhcHBlbmQgcHJvcGVydGllcyBbZm9ybWF0UHJvcGVydHkgJHByb3BlcnR5ICRkZXNjcmlwdGlvbigkcHJvcGVydHkpXQorICAgfQorCisgICBzZXQgdGV4dCBbam9pbiAkcHJvcGVydGllcyAiICJdCisgICAkc2Vzc2lvbiB3cml0ZSAtdGV4dCAkdGV4dAorICAgcHV0UHJvcGVydGllcyBLZXkgJHRleHQKK30KKworcHJvYyB0dHlTaG93S2V5cyB7c2Vzc2lvbiB0aW1lb3V0fSB7CisgICAkc2Vzc2lvbiB3cml0ZSAtdGV4dCAicHJlc3Mga2V5cyAodGltZW91dCBpcyAkdGltZW91dCBzZWNvbmRzKSIKKworICAgd2hpbGUge1tzdHJpbmcgbGVuZ3RoIFtzZXQgY29kZSBbJHNlc3Npb24gcmVhZEtleVdpdGhUaW1lb3V0ICR0aW1lb3V0XV1dID4gMH0geworICAgICAgdHR5U2hvd0tleUNvZGUgJHNlc3Npb24gJGNvZGUKKyAgIH0KK30KKworcHJvYyBtYWluUHJvZ3JhbSB7fSB7CisgICBzZXQgb3B0aW9uRGVmaW5pdGlvbnMgeworICAgICAge2hvc3QgdW50eXBlZC5zZXJ2ZXIgICJ3aGljaCBzZXJ2ZXIgdG8gY29ubmVjdCB0byJ9CisgICAgICB7YXV0aCB1bnR5cGVkLnNjaGVtZXMgIndoaWNoIGF1dGhvcml6YXRpb24gc2NoZW1lcyB0byB1c2UifQorICAgICAge3R0eSAgdW50eXBlZC5udW1iZXIgICJ3aGljaCB2aXJ0dWFsIHRlcm1pbmFsIHRvIGNsYWltIn0KKyAgIH0KKworICAgcHJvY2Vzc1Byb2dyYW1Bcmd1bWVudHMgb3B0aW9uVmFsdWVzICRvcHRpb25EZWZpbml0aW9ucworCisgICBwdXRQcm9wZXJ0aWVzICJCcmxBUEkgVmVyc2lvbiIgW2JybGFwaSBnZXRWZXJzaW9uU3RyaW5nXQorCisgICBzZXQgY29ubmVjdGlvblNldHRpbmdzIFtsaXN0XQorICAgaWYge1tpbmZvIGV4aXN0cyBvcHRpb25WYWx1ZXMoaG9zdCldfSB7CisgICAgICBsYXBwZW5kIGNvbm5lY3Rpb25TZXR0aW5ncyAtaG9zdCAkb3B0aW9uVmFsdWVzKGhvc3QpCisgICB9CisgICBpZiB7W2luZm8gZXhpc3RzIG9wdGlvblZhbHVlcyhhdXRoKV19IHsKKyAgICAgIGxhcHBlbmQgY29ubmVjdGlvblNldHRpbmdzIC1hdXRoICRvcHRpb25WYWx1ZXMoYXV0aCkKKyAgIH0KKworICAgaWYge1tjYXRjaCBbbGlzdCBldmFsIGJybGFwaSBvcGVuQ29ubmVjdGlvbiAkY29ubmVjdGlvblNldHRpbmdzXSBzZXNzaW9uXSA9PSAwfSB7CisgICAgICBwdXRQcm9wZXJ0aWVzICJTZXNzaW9uIENvbW1hbmQiICRzZXNzaW9uCisgICAgICBwdXRQcm9wZXJ0aWVzICJTZXJ2ZXIgSG9zdCIgWyRzZXNzaW9uIGdldEhvc3RdCisgICAgICBwdXRQcm9wZXJ0aWVzICJBdXRob3JpemF0aW9uIFNjaGVtZXMiIFskc2Vzc2lvbiBnZXRBdXRoXQorICAgICAgcHV0UHJvcGVydGllcyAiRmlsZSBEZXNjcmlwdG9yIiBbJHNlc3Npb24gZ2V0RmlsZURlc2NyaXB0b3JdCisgICAgICBwdXRQcm9wZXJ0aWVzICJEcml2ZXIgTmFtZSIgWyRzZXNzaW9uIGdldERyaXZlck5hbWVdCisgICAgICBwdXRQcm9wZXJ0aWVzICJNb2RlbCBJZGVudGlmaWVyIiBbJHNlc3Npb24gZ2V0TW9kZWxJZGVudGlmaWVyXQorICAgICAgcHV0UHJvcGVydGllcyAiRGlzcGxheSBTaXplIiBbZm9ybWF0VmFsdWVzIFskc2Vzc2lvbiBnZXREaXNwbGF5U2l6ZV0gd2lkdGggaGVpZ2h0XQorCisgICAgICBpZiB7W2luZm8gZXhpc3RzIG9wdGlvblZhbHVlcyh0dHkpXX0geworICAgICAgICAgaWYge1tjYXRjaCBbbGlzdCAkc2Vzc2lvbiBlbnRlclR0eU1vZGUgLXR0eSAkb3B0aW9uVmFsdWVzKHR0eSldIHR0eV0gPT0gMH0geworICAgICAgICAgICAgcHV0UHJvcGVydGllcyAiVFRZIE51bWJlciIgJHR0eQorICAgICAgICAgICAgdHR5U2hvd0tleXMgJHNlc3Npb24gMTAKKyAgICAgICAgICAgICRzZXNzaW9uIGxlYXZlVHR5TW9kZQorICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHdyaXRlUHJvZ3JhbU1lc3NhZ2UgImludmFsaWQgdHR5OiAkdHR5IgorICAgICAgICAgfQorICAgICAgICAgdW5zZXQgdHR5CisgICAgICB9CisKKyAgICAgICRzZXNzaW9uIGNsb3NlQ29ubmVjdGlvbgorICAgfSBlbHNlIHsKKyAgICAgIHdyaXRlUHJvZ3JhbU1lc3NhZ2UgImNvbm5lY3Rpb24gZmFpbHVyZTogJHNlc3Npb24iCisgICB9CisgICB1bnNldCBzZXNzaW9uCit9CisKK21haW5Qcm9ncmFtCitleGl0IDAKZGlmZiAtLWdpdCBhL0JpbmRpbmdzL1RjbC9iaW5kaW5ncy5jIGIvQmluZGluZ3MvVGNsL2JpbmRpbmdzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTg1MjgwYQotLS0gL2Rldi9udWxsCisrKyBiL0JpbmRpbmdzL1RjbC9iaW5kaW5ncy5jCkBAIC0wLDAgKzEsMTY3MSBAQAorLyoKKyAqIGxpYmJybGFwaSAtIEEgbGlicmFyeSBwcm92aWRpbmcgYWNjZXNzIHRvIGJyYWlsbGUgdGVybWluYWxzIGZvciBhcHBsaWNhdGlvbnMuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMjMgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPgorICoKKyAqIGxpYmJybGFwaSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorICoKKyAqIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyAqLworCisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKyNkZWZpbmUgQlJMQVBJX05PX0RFUFJFQ0FURUQKKyNkZWZpbmUgQlJMQVBJX05PX1NJTkdMRV9TRVNTSU9OCisjaW5jbHVkZSAiYnJsYXBpLmgiCisKKyNpbmNsdWRlIDx0Y2wuaD4KKyNpbmNsdWRlICJicmxfZG90cy5oIgorCisjZGVmaW5lIGFsbG9jYXRlTWVtb3J5KHNpemUpICgodm9pZCAqKWNrYWxsb2MoKHNpemUpKSkKKyNkZWZpbmUgZGVhbGxvY2F0ZU1lbW9yeShhZGRyZXNzKSBja2ZyZWUoKHZvaWQgKikoYWRkcmVzcykpCisKKyNkZWZpbmUgVEVTVF9UQ0xfT0soZXhwcmVzc2lvbikgXAorZG8geyBcCisgIGludCB0Y2xSZXN1bHQgPSAoZXhwcmVzc2lvbik7IFwKKyAgaWYgKHRjbFJlc3VsdCAhPSBUQ0xfT0spIHJldHVybiB0Y2xSZXN1bHQ7IFwKK30gd2hpbGUgKDApCisKK3N0YXRpYyBpbnQKK3NldEFycmF5RWxlbWVudCAoVGNsX0ludGVycCAqaW50ZXJwLCBjb25zdCBjaGFyICphcnJheSwgY29uc3QgY2hhciAqZWxlbWVudCwgVGNsX09iaiAqdmFsdWUpIHsKKyAgaWYgKCF2YWx1ZSkgcmV0dXJuIFRDTF9FUlJPUjsKKyAgVGNsX0luY3JSZWZDb3VudCh2YWx1ZSk7CisgIFRjbF9PYmogKnJlc3VsdCA9IFRjbF9TZXRWYXIyRXgoaW50ZXJwLCBhcnJheSwgZWxlbWVudCwgdmFsdWUsIFRDTF9MRUFWRV9FUlJfTVNHKTsKKyAgVGNsX0RlY3JSZWZDb3VudCh2YWx1ZSk7CisgIHJldHVybiByZXN1bHQ/IFRDTF9PSzogVENMX0VSUk9SOworfQorCisjZGVmaW5lIFNFVF9BUlJBWV9FTEVNRU5UKGVsZW1lbnQsIG9iamVjdCkgXAorICBURVNUX1RDTF9PSyhzZXRBcnJheUVsZW1lbnQoaW50ZXJwLCBhcnJheSwgZWxlbWVudCwgb2JqZWN0KSkKKwordHlwZWRlZiBzdHJ1Y3QgeworICBicmxhcGlfY29ubmVjdGlvblNldHRpbmdzX3Qgc2V0dGluZ3M7CisgIGJybGFwaV9oYW5kbGVfdCAqaGFuZGxlOworICBicmxhcGlfZmlsZURlc2NyaXB0b3IgZmlsZURlc2NyaXB0b3I7CisKKyAgdW5zaWduZWQgaW50IGRpc3BsYXlXaWR0aDsKKyAgdW5zaWduZWQgaW50IGRpc3BsYXlIZWlnaHQ7CisKKyAgVGNsX0ludGVycCAqdGNsSW50ZXJwcmV0ZXI7CisgIFRjbF9Db21tYW5kIHRjbENvbW1hbmQ7Cit9IEJybGFwaVNlc3Npb247CisKK3N0YXRpYyB2b2lkCitzZXRJbnRSZXN1bHQgKFRjbF9JbnRlcnAgKmludGVycCwgaW50IHZhbHVlKSB7CisgIFRjbF9TZXRJbnRPYmooVGNsX0dldE9ialJlc3VsdChpbnRlcnApLCB2YWx1ZSk7Cit9CisKK3N0YXRpYyB2b2lkCitzZXRXaWRlSW50UmVzdWx0IChUY2xfSW50ZXJwICppbnRlcnAsIFRjbF9XaWRlSW50IHZhbHVlKSB7CisgIFRjbF9TZXRXaWRlSW50T2JqKFRjbF9HZXRPYmpSZXN1bHQoaW50ZXJwKSwgdmFsdWUpOworfQorCitzdGF0aWMgdm9pZAorc2V0U3RyaW5nUmVzdWx0IChUY2xfSW50ZXJwICppbnRlcnAsIGNvbnN0IGNoYXIgKnN0cmluZywgaW50IGxlbmd0aCkgeworICBUY2xfU2V0U3RyaW5nT2JqKFRjbF9HZXRPYmpSZXN1bHQoaW50ZXJwKSwgc3RyaW5nLCBsZW5ndGgpOworfQorCitzdGF0aWMgdm9pZAorc2V0U3RyaW5nc1Jlc3VsdCAoVGNsX0ludGVycCAqaW50ZXJwLCAuLi4pIHsKKyAgVGNsX1Jlc2V0UmVzdWx0KGludGVycCk7CisKKyAgdmFfbGlzdCBhcmd1bWVudHM7CisgIHZhX3N0YXJ0KGFyZ3VtZW50cywgaW50ZXJwKTsKKyAgVGNsX0FwcGVuZFN0cmluZ3NUb09ialZBKFRjbF9HZXRPYmpSZXN1bHQoaW50ZXJwKSwgYXJndW1lbnRzKTsKKyAgdmFfZW5kKGFyZ3VtZW50cyk7Cit9CisKK3N0YXRpYyB2b2lkCitzZXRCeXRlQXJyYXlSZXN1bHQgKFRjbF9JbnRlcnAgKmludGVycCwgY29uc3QgdW5zaWduZWQgY2hhciAqYnl0ZXMsIGludCBjb3VudCkgeworICBUY2xfU2V0Qnl0ZUFycmF5T2JqKFRjbF9HZXRPYmpSZXN1bHQoaW50ZXJwKSwgYnl0ZXMsIGNvdW50KTsKK30KKworc3RhdGljIHZvaWQKK3NldEJybGFwaUVycm9yIChUY2xfSW50ZXJwICppbnRlcnApIHsKKyAgc2l6ZV90IHNpemUgPSBicmxhcGlfc3RyZXJyb3JfcigmYnJsYXBpX2Vycm9yLCBOVUxMLCAwKTsKKyAgY2hhciB0ZXh0W3NpemUrMV07CisgIGNvbnN0IGNoYXIgKm5hbWU7CisgIGludCBudW1iZXI7CisKKyAgYnJsYXBpX3N0cmVycm9yX3IoJmJybGFwaV9lcnJvciwgdGV4dCwgc2l6ZW9mKHRleHQpKTsKKworICBzd2l0Y2ggKGJybGFwaV9lcnJvci5icmxlcnJubykgeworICAgIGNhc2UgQlJMQVBJX0VSUk9SX0xJQkNFUlI6CisgICAgICBuYW1lID0gIkxJQkMiOworICAgICAgbnVtYmVyID0gYnJsYXBpX2Vycm9yLmxpYmNlcnJubzsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBCUkxBUElfRVJST1JfR0FJRVJSOgorICAgICAgbmFtZSA9ICJHQUkiOworICAgICAgbnVtYmVyID0gYnJsYXBpX2Vycm9yLmdhaWVycm5vOworICAgICAgYnJlYWs7CisKKyAgICBkZWZhdWx0OgorICAgICAgbmFtZSA9ICJCUkwiOworICAgICAgbnVtYmVyID0gYnJsYXBpX2Vycm9yLmJybGVycm5vOworICAgICAgYnJlYWs7CisgIH0KKworICB7CisgICAgVGNsX09iaiAqY29uc3QgZWxlbWVudHNbXSA9IHsKKyAgICAgIFRjbF9OZXdTdHJpbmdPYmooIkJybEFQSSIsIC0xKSwKKyAgICAgIFRjbF9OZXdTdHJpbmdPYmoobmFtZSwgLTEpLAorICAgICAgVGNsX05ld0ludE9iaihudW1iZXIpLAorICAgICAgVGNsX05ld1N0cmluZ09iaih0ZXh0LCAtMSkKKyAgICB9OworCisgICAgVGNsX1NldE9iakVycm9yQ29kZShpbnRlcnAsIFRjbF9OZXdMaXN0T2JqKDQsIGVsZW1lbnRzKSk7CisgIH0KKworICBUY2xfT2JqICpyZXN1bHQgPSBUY2xfR2V0T2JqUmVzdWx0KGludGVycCk7CisgIFRjbF9TZXRTdHJpbmdPYmoocmVzdWx0LCAiQnJsQVBJIGVycm9yOiAiLCAtMSk7CisgIFRjbF9BcHBlbmRUb09iaihyZXN1bHQsIHRleHQsIC0xKTsKK30KKworI2RlZmluZSBURVNUX0JSTEFQSV9PSyhleHByZXNzaW9uKSBcCitkbyB7IFwKKyAgaWYgKChleHByZXNzaW9uKSA9PSAtMSkgeyBcCisgICAgc2V0QnJsYXBpRXJyb3IoaW50ZXJwKTsgXAorICAgIHJldHVybiBUQ0xfRVJST1I7IFwKKyAgfSBcCit9IHdoaWxlICgwKQorCitzdGF0aWMgaW50CitnZXREaXNwbGF5U2l6ZSAoVGNsX0ludGVycCAqaW50ZXJwLCBCcmxhcGlTZXNzaW9uICpzZXNzaW9uKSB7CisgIFRFU1RfQlJMQVBJX09LKGJybGFwaV9fZ2V0RGlzcGxheVNpemUoc2Vzc2lvbi0+aGFuZGxlLCAmc2Vzc2lvbi0+ZGlzcGxheVdpZHRoLCAmc2Vzc2lvbi0+ZGlzcGxheUhlaWdodCkpOworICByZXR1cm4gVENMX09LOworfQorCitzdGF0aWMgaW50CitnZXRDZWxsQ291bnQgKAorICBUY2xfSW50ZXJwICppbnRlcnAsIEJybGFwaVNlc3Npb24gKnNlc3Npb24sIHVuc2lnbmVkIGludCAqY291bnQKKykgeworICBpZiAoIShzZXNzaW9uLT5kaXNwbGF5V2lkdGggJiYgc2Vzc2lvbi0+ZGlzcGxheUhlaWdodCkpIHsKKyAgICBURVNUX1RDTF9PSyhnZXREaXNwbGF5U2l6ZShpbnRlcnAsIHNlc3Npb24pKTsKKyAgfQorCisgICpjb3VudCA9IHNlc3Npb24tPmRpc3BsYXlXaWR0aCAqIHNlc3Npb24tPmRpc3BsYXlIZWlnaHQ7CisgIHJldHVybiBUQ0xfT0s7Cit9CisKKyNkZWZpbmUgRlVOQ1RJT05fSEFORExFUl9SRVRVUk4gaW50CisjZGVmaW5lIEZVTkNUSU9OX0hBTkRMRVJfUEFSQU1FVEVSUyAoVGNsX0ludGVycCAqaW50ZXJwLCBUY2xfT2JqICpjb25zdCBvYmp2W10sIGludCBvYmpjLCB2b2lkICpkYXRhKQorI2RlZmluZSBGVU5DVElPTl9IQU5ETEVSX05BTUUoY29tbWFuZCxmdW5jdGlvbikgZnVuY3Rpb25IYW5kbGVyXyMjY29tbWFuZCMjXyMjZnVuY3Rpb24KKyNkZWZpbmUgRlVOQ1RJT05fSEFORExFUihjb21tYW5kLGZ1bmN0aW9uKSBcCisgIHN0YXRpYyBGVU5DVElPTl9IQU5ETEVSX1JFVFVSTiBcCisgIEZVTkNUSU9OX0hBTkRMRVJfTkFNRShjb21tYW5kLCBmdW5jdGlvbikgXAorICBGVU5DVElPTl9IQU5ETEVSX1BBUkFNRVRFUlMKK3R5cGVkZWYgRlVOQ1RJT05fSEFORExFUl9SRVRVUk4gKCpGdW5jdGlvbkhhbmRsZXIpIEZVTkNUSU9OX0hBTkRMRVJfUEFSQU1FVEVSUzsKKwordHlwZWRlZiBzdHJ1Y3QgeworICBjb25zdCBjaGFyICpuYW1lOworICBGdW5jdGlvbkhhbmRsZXIgaGFuZGxlcjsKK30gRnVuY3Rpb25FbnRyeTsKKworI2RlZmluZSBGVU5DVElPTihjb21tYW5kLGZ1bmN0aW9uKSBcCisgIHsgLm5hbWU9I2Z1bmN0aW9uLCAuaGFuZGxlciA9IEZVTkNUSU9OX0hBTkRMRVJfTkFNRShjb21tYW5kLCBmdW5jdGlvbikgfQorCisjZGVmaW5lIEJFR0lOX0ZVTkNUSU9OUyBzdGF0aWMgY29uc3QgRnVuY3Rpb25FbnRyeSBmdW5jdGlvbnNbXSA9IHsKKyNkZWZpbmUgRU5EX0ZVTkNUSU9OUyB7IC5uYW1lPU5VTEwgfX07CisKK3N0YXRpYyBpbnQKK3Rlc3RBcmd1bWVudENvdW50ICgKKyAgVGNsX0ludGVycCAqaW50ZXJwLCBUY2xfT2JqICpjb25zdCBvYmp2W10sIGludCBvYmpjLAorICBpbnQgc3RhcnQsIGludCByZXF1aXJlZCwgaW50IG9wdGlvbmFsLAorICBjb25zdCBjaGFyICpzeW50YXgKKykgeworICBpbnQgbWluaW11bSA9IHN0YXJ0ICsgcmVxdWlyZWQ7CisgIGludCBtYXhpbXVtID0gKG9wdGlvbmFsIDwgMCk/IG9iamM6IChtaW5pbXVtICsgb3B0aW9uYWwpOworCisgIGlmICgob2JqYyA+PSBtaW5pbXVtKSAmJiAob2JqYyA8PSBtYXhpbXVtKSkgcmV0dXJuIFRDTF9PSzsKKyAgVGNsX1dyb25nTnVtQXJncyhpbnRlcnAsIHN0YXJ0LCBvYmp2LCBzeW50YXgpOworICByZXR1cm4gVENMX0VSUk9SOworfQorCisjZGVmaW5lIFRFU1RfQVJHVU1FTlRfQ09VTlQoc3RhcnQscmVxdWlyZWQsb3B0aW9uYWwsc3ludGF4KSBcCisgIFRFU1RfVENMX09LKHRlc3RBcmd1bWVudENvdW50KGludGVycCwgb2Jqdiwgb2JqYywgKHN0YXJ0KSwgKHJlcXVpcmVkKSwgKG9wdGlvbmFsKSwgKHN5bnRheCkpKQorCisjZGVmaW5lIFRFU1RfRlVOQ1RJT05fQVJHVU1FTlRTKHJlcXVpcmVkLG9wdGlvbmFsLHN5bnRheCkgXAorICBURVNUX0FSR1VNRU5UX0NPVU5UKDIsIChyZXF1aXJlZCksIChvcHRpb25hbCksIChzeW50YXgpKQorCisjZGVmaW5lIFRFU1RfRlVOQ1RJT05fTk9fQVJHVU1FTlRTKCkgVEVTVF9GVU5DVElPTl9BUkdVTUVOVFMoMCwgMCwgTlVMTCkKKworc3RhdGljIGludAoraW52b2tlRnVuY3Rpb24gKFRjbF9JbnRlcnAgKmludGVycCwgVGNsX09iaiAqY29uc3Qgb2JqdltdLCBpbnQgb2JqYywgY29uc3QgRnVuY3Rpb25FbnRyeSAqZnVuY3Rpb25zLCB2b2lkICpkYXRhKSB7CisgIFRFU1RfQVJHVU1FTlRfQ09VTlQoMSwgMSwgLTEsICI8ZnVuY3Rpb24+IFs8YXJnPiAuLi5dIik7CisgIGNvbnN0IEZ1bmN0aW9uRW50cnkgKmZ1bmN0aW9uOworCisgIHsKKyAgICBpbnQgaW5kZXg7CisgICAgVEVTVF9UQ0xfT0soVGNsX0dldEluZGV4RnJvbU9ialN0cnVjdChpbnRlcnAsIG9ianZbMV0sIGZ1bmN0aW9ucywgc2l6ZW9mKCpmdW5jdGlvbnMpLCAiZnVuY3Rpb24iLCAwLCAmaW5kZXgpKTsKKyAgICBmdW5jdGlvbiA9IGZ1bmN0aW9ucyArIGluZGV4OworICB9CisKKyAgcmV0dXJuIGZ1bmN0aW9uLT5oYW5kbGVyKGludGVycCwgb2Jqdiwgb2JqYywgZGF0YSk7Cit9CisKKyNkZWZpbmUgT1BUSU9OX0hBTkRMRVJfUkVUVVJOIGludAorI2RlZmluZSBPUFRJT05fSEFORExFUl9QQVJBTUVURVJTIChUY2xfSW50ZXJwICppbnRlcnAsIFRjbF9PYmogKmNvbnN0IG9ianZbXSwgdm9pZCAqZGF0YSkKKyNkZWZpbmUgT1BUSU9OX0hBTkRMRVJfTkFNRShjb21tYW5kLGZ1bmN0aW9uLG9wdGlvbikgb3B0aW9uSGFuZGxlcl8jI2NvbW1hbmQjI18jI2Z1bmN0aW9uIyNfIyNvcHRpb24KKyNkZWZpbmUgT1BUSU9OX0hBTkRMRVIoY29tbWFuZCxmdW5jdGlvbixvcHRpb24pIFwKKyAgc3RhdGljIE9QVElPTl9IQU5ETEVSX1JFVFVSTiBcCisgIE9QVElPTl9IQU5ETEVSX05BTUUoY29tbWFuZCwgZnVuY3Rpb24sIG9wdGlvbikgXAorICBPUFRJT05fSEFORExFUl9QQVJBTUVURVJTCit0eXBlZGVmIE9QVElPTl9IQU5ETEVSX1JFVFVSTiAoKk9wdGlvbkhhbmRsZXIpIE9QVElPTl9IQU5ETEVSX1BBUkFNRVRFUlM7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgY29uc3QgY2hhciAqbmFtZTsKKyAgT3B0aW9uSGFuZGxlciBoYW5kbGVyOworICBpbnQgb3BlcmFuZHM7CisgIGNvbnN0IGNoYXIgKnN5bnRheDsKK30gT3B0aW9uRW50cnk7CisKK3N0YXRpYyBpbnQKK3Byb2Nlc3NPcHRpb25zICgKKyAgVGNsX0ludGVycCAqaW50ZXJwLCB2b2lkICpkYXRhLAorICBUY2xfT2JqICpjb25zdCBvYmp2W10sIGludCBvYmpjLAorICBpbnQgc3RhcnQsIGludCAqY29uc3VtZWQsCisgIGNvbnN0IE9wdGlvbkVudHJ5ICpvcHRpb25zCispIHsKKyAgKmNvbnN1bWVkID0gb2JqYzsKKyAgb2JqdiArPSBzdGFydDsKKyAgb2JqYyAtPSBzdGFydDsKKworICB3aGlsZSAob2JqYyA+IDApIHsKKyAgICBUY2xfT2JqICpuYW1lID0gb2JqdlswXTsKKworICAgIHsKKyAgICAgIGNvbnN0IGNoYXIgKnN0cmluZyA9IFRjbF9HZXRTdHJpbmcobmFtZSk7CisgICAgICBpZiAoIXN0cmluZykgcmV0dXJuIFRDTF9FUlJPUjsKKyAgICAgIGlmICgqc3RyaW5nICE9ICctJykgYnJlYWs7CisgICAgfQorCisgICAgaW50IGluZGV4OworICAgIFRFU1RfVENMX09LKFRjbF9HZXRJbmRleEZyb21PYmpTdHJ1Y3QoaW50ZXJwLCBuYW1lLCBvcHRpb25zLCBzaXplb2YoKm9wdGlvbnMpLCAib3B0aW9uIiwgMCwgJmluZGV4KSk7CisgICAgY29uc3QgT3B0aW9uRW50cnkgKm9wdGlvbiA9ICZvcHRpb25zW2luZGV4XTsKKworICAgIGludCBjb3VudCA9IG9wdGlvbi0+b3BlcmFuZHM7CisgICAgVEVTVF9BUkdVTUVOVF9DT1VOVCgxLCBjb3VudCwgLTEsIG9wdGlvbi0+c3ludGF4KTsKKyAgICBURVNUX1RDTF9PSyhvcHRpb24tPmhhbmRsZXIoaW50ZXJwLCBvYmp2LCBkYXRhKSk7CisKKyAgICBjb3VudCArPSAxOworICAgIG9ianYgKz0gY291bnQ7CisgICAgb2JqYyAtPSBjb3VudDsKKyAgfQorCisgICpjb25zdW1lZCAtPSBvYmpjOworICByZXR1cm4gVENMX09LOworfQorCisjZGVmaW5lIEJFR0lOX09QVElPTlMgeyBzdGF0aWMgY29uc3QgT3B0aW9uRW50cnkgb3B0aW9uVGFibGVbXSA9IHsKKyNkZWZpbmUgRU5EX09QVElPTlMoc3RhcnQscmVxdWlyZWQsb3B0aW9uYWwsc3ludGF4KSBcCisgICwgey5uYW1lID0gTlVMTH0gXAorICB9OyBcCisgIGludCBjb25zdW1lZDsgXAorICBURVNUX1RDTF9PSyhwcm9jZXNzT3B0aW9ucyhpbnRlcnAsICZvcHRpb25zLCBvYmp2LCBvYmpjLCAoc3RhcnQpLCAmY29uc3VtZWQsIG9wdGlvblRhYmxlKSk7IFwKKyAgb2JqdiArPSBjb25zdW1lZDsgXAorICBvYmpjIC09IGNvbnN1bWVkOyBcCisgIFRFU1RfQVJHVU1FTlRfQ09VTlQoMCwgKHJlcXVpcmVkKSwgKG9wdGlvbmFsKSwgKHN5bnRheCkpOyBcCit9CisjZGVmaW5lIE9QVElPTihjb21tYW5kLGZ1bmN0aW9uLG9wdGlvbikgXAorICAubmFtZSA9ICItIiAjb3B0aW9uLCAuaGFuZGxlciA9IE9QVElPTl9IQU5ETEVSX05BTUUoY29tbWFuZCwgZnVuY3Rpb24sIG9wdGlvbikKKyNkZWZpbmUgT1BFUkFORFMoY291bnQsdGV4dCkgXAorICAub3BlcmFuZHMgPSAoY291bnQpLCAuc3ludGF4ID0gKChjb3VudCk/ICh0ZXh0KTogTlVMTCkKKworc3RhdGljIGludAorZ2V0U2Vzc2lvblN0cmluZ1Byb3BlcnR5ICgKKyAgVGNsX0ludGVycCAqaW50ZXJwLCBCcmxhcGlTZXNzaW9uICpzZXNzaW9uLAorICBpbnQgQlJMQVBJX1NURENBTEwgKCpnZXRQcm9wZXJ0eSkgKGJybGFwaV9oYW5kbGVfdCAqaGFuZGxlLCBjaGFyICpidWZmZXIsIHNpemVfdCBzaXplKQorKSB7CisgIHNpemVfdCBzaXplID0gMFgxMDsKKworICB3aGlsZSAoMSkgeworICAgIGNoYXIgYnVmZmVyW3NpemVdOworICAgIGludCByZXN1bHQgPSBnZXRQcm9wZXJ0eShzZXNzaW9uLT5oYW5kbGUsIGJ1ZmZlciwgc2l6ZSk7CisgICAgVEVTVF9CUkxBUElfT0socmVzdWx0KTsKKworICAgIGlmIChyZXN1bHQgPD0gc2l6ZSkgeworICAgICAgc2V0U3RyaW5nUmVzdWx0KGludGVycCwgYnVmZmVyLCByZXN1bHQtMSk7CisgICAgICByZXR1cm4gVENMX09LOworICAgIH0KKworICAgIHNpemUgPSByZXN1bHQ7CisgIH0KK30KKworRlVOQ1RJT05fSEFORExFUihzZXNzaW9uLCBjbG9zZUNvbm5lY3Rpb24pIHsKKyAgQnJsYXBpU2Vzc2lvbiAqc2Vzc2lvbiA9IGRhdGE7CisgIFRFU1RfRlVOQ1RJT05fTk9fQVJHVU1FTlRTKCk7CisgIFRjbF9EZWxldGVDb21tYW5kRnJvbVRva2VuKGludGVycCwgc2Vzc2lvbi0+dGNsQ29tbWFuZCk7CisgIHJldHVybiBUQ0xfT0s7Cit9CisKK0ZVTkNUSU9OX0hBTkRMRVIoc2Vzc2lvbiwgZW50ZXJSYXdNb2RlKSB7CisgIEJybGFwaVNlc3Npb24gKnNlc3Npb24gPSBkYXRhOworICBURVNUX0ZVTkNUSU9OX0FSR1VNRU5UUygxLCAwLCAiPGRyaXZlcj4iKTsKKworICBjb25zdCBjaGFyICpkcml2ZXIgPSBUY2xfR2V0U3RyaW5nKG9ianZbMl0pOworICBpZiAoIWRyaXZlcikgcmV0dXJuIFRDTF9FUlJPUjsKKworICBURVNUX0JSTEFQSV9PSyhicmxhcGlfX2VudGVyUmF3TW9kZShzZXNzaW9uLT5oYW5kbGUsIGRyaXZlcikpOworICByZXR1cm4gVENMX09LOworfQorCit0eXBlZGVmIHN0cnVjdCB7CisgIGludCB0dHk7CisgIGNvbnN0IGNoYXIgKmRyaXZlcjsKK30gRW50ZXJUdHlNb2RlT3B0aW9uczsKKworT1BUSU9OX0hBTkRMRVIoc2Vzc2lvbiwgZW50ZXJUdHlNb2RlLCBjb21tYW5kcykgeworICBFbnRlclR0eU1vZGVPcHRpb25zICpvcHRpb25zID0gZGF0YTsKKyAgb3B0aW9ucy0+ZHJpdmVyID0gTlVMTDsKKyAgcmV0dXJuIFRDTF9PSzsKK30KKworT1BUSU9OX0hBTkRMRVIoc2Vzc2lvbiwgZW50ZXJUdHlNb2RlLCBrZXlzKSB7CisgIEVudGVyVHR5TW9kZU9wdGlvbnMgKm9wdGlvbnMgPSBkYXRhOworICByZXR1cm4gKG9wdGlvbnMtPmRyaXZlciA9IFRjbF9HZXRTdHJpbmcob2JqdlsxXSkpPyBUQ0xfT0s6IFRDTF9FUlJPUjsKK30KKworT1BUSU9OX0hBTkRMRVIoc2Vzc2lvbiwgZW50ZXJUdHlNb2RlLCB0dHkpIHsKKyAgRW50ZXJUdHlNb2RlT3B0aW9ucyAqb3B0aW9ucyA9IGRhdGE7CisgIFRjbF9PYmogKm9iaiA9IG9ianZbMV07CisKKyAgY29uc3QgY2hhciAqc3RyaW5nID0gVGNsX0dldFN0cmluZyhvYmopOworICBpZiAoIXN0cmluZykgcmV0dXJuIFRDTF9FUlJPUjsKKworICBpZiAoc3RyY21wKHN0cmluZywgImRlZmF1bHQiKSA9PSAwKSB7CisgICAgb3B0aW9ucy0+dHR5ID0gQlJMQVBJX1RUWV9ERUZBVUxUOworICB9IGVsc2UgeworICAgIFRFU1RfVENMX09LKFRjbF9HZXRJbnRGcm9tT2JqKGludGVycCwgb2JqLCAmb3B0aW9ucy0+dHR5KSk7CisgIH0KKworICByZXR1cm4gVENMX09LOworfQorCitGVU5DVElPTl9IQU5ETEVSKHNlc3Npb24sIGVudGVyVHR5TW9kZSkgeworICBCcmxhcGlTZXNzaW9uICpzZXNzaW9uID0gZGF0YTsKKworICBFbnRlclR0eU1vZGVPcHRpb25zIG9wdGlvbnMgPSB7CisgICAgLnR0eSA9IEJSTEFQSV9UVFlfREVGQVVMVCwKKyAgICAuZHJpdmVyID0gTlVMTAorICB9OworCisgIEJFR0lOX09QVElPTlMKKyAgICB7IE9QVElPTihzZXNzaW9uLCBlbnRlclR0eU1vZGUsIGNvbW1hbmRzKSwKKyAgICAgIE9QRVJBTkRTKDAsICIiKQorICAgIH0sCisKKyAgICB7IE9QVElPTihzZXNzaW9uLCBlbnRlclR0eU1vZGUsIGtleXMpLAorICAgICAgT1BFUkFORFMoMSwgIjxkcml2ZXI+IikKKyAgICB9LAorCisgICAgeyBPUFRJT04oc2Vzc2lvbiwgZW50ZXJUdHlNb2RlLCB0dHkpLAorICAgICAgT1BFUkFORFMoMSwgIntkZWZhdWx0IHwgPG51bWJlcj59IikKKyAgICB9CisgIEVORF9PUFRJT05TKDIsIDAsIDAsICIiKQorCisgIHsKKyAgICBpbnQgcmVzdWx0ID0gYnJsYXBpX19lbnRlclR0eU1vZGUoc2Vzc2lvbi0+aGFuZGxlLCBvcHRpb25zLnR0eSwgb3B0aW9ucy5kcml2ZXIpOworICAgIFRFU1RfQlJMQVBJX09LKHJlc3VsdCk7CisKKyAgICBzZXRJbnRSZXN1bHQoaW50ZXJwLCByZXN1bHQpOworICAgIHJldHVybiBUQ0xfT0s7CisgIH0KK30KKwordHlwZWRlZiBzdHJ1Y3QgeworICBUY2xfT2JqICpwYXRoOworICBjb25zdCBjaGFyICpkcml2ZXI7Cit9IEVudGVyVHR5TW9kZVdpdGhQYXRoT3B0aW9uczsKKworT1BUSU9OX0hBTkRMRVIoc2Vzc2lvbiwgZW50ZXJUdHlNb2RlV2l0aFBhdGgsIGNvbW1hbmRzKSB7CisgIEVudGVyVHR5TW9kZVdpdGhQYXRoT3B0aW9ucyAqb3B0aW9ucyA9IGRhdGE7CisgIG9wdGlvbnMtPmRyaXZlciA9IE5VTEw7CisgIHJldHVybiBUQ0xfT0s7Cit9CisKK09QVElPTl9IQU5ETEVSKHNlc3Npb24sIGVudGVyVHR5TW9kZVdpdGhQYXRoLCBrZXlzKSB7CisgIEVudGVyVHR5TW9kZVdpdGhQYXRoT3B0aW9ucyAqb3B0aW9ucyA9IGRhdGE7CisgIHJldHVybiAob3B0aW9ucy0+ZHJpdmVyID0gVGNsX0dldFN0cmluZyhvYmp2WzFdKSk/IFRDTF9PSzogVENMX0VSUk9SOworfQorCitPUFRJT05fSEFORExFUihzZXNzaW9uLCBlbnRlclR0eU1vZGVXaXRoUGF0aCwgcGF0aCkgeworICBFbnRlclR0eU1vZGVXaXRoUGF0aE9wdGlvbnMgKm9wdGlvbnMgPSBkYXRhOworICBvcHRpb25zLT5wYXRoID0gb2JqdlsxXTsKKyAgcmV0dXJuIFRDTF9PSzsKK30KKworRlVOQ1RJT05fSEFORExFUihzZXNzaW9uLCBlbnRlclR0eU1vZGVXaXRoUGF0aCkgeworICBCcmxhcGlTZXNzaW9uICpzZXNzaW9uID0gZGF0YTsKKworICBFbnRlclR0eU1vZGVXaXRoUGF0aE9wdGlvbnMgb3B0aW9ucyA9IHsKKyAgICAucGF0aCA9IE5VTEwsCisgICAgLmRyaXZlciA9IE5VTEwKKyAgfTsKKworICBCRUdJTl9PUFRJT05TCisgICAgeyBPUFRJT04oc2Vzc2lvbiwgZW50ZXJUdHlNb2RlV2l0aFBhdGgsIGNvbW1hbmRzKSwKKyAgICAgIE9QRVJBTkRTKDAsICIiKQorICAgIH0sCisKKyAgICB7IE9QVElPTihzZXNzaW9uLCBlbnRlclR0eU1vZGVXaXRoUGF0aCwga2V5cyksCisgICAgICBPUEVSQU5EUygxLCAiPGRyaXZlcj4iKQorICAgIH0sCisKKyAgICB7IE9QVElPTihzZXNzaW9uLCBlbnRlclR0eU1vZGVXaXRoUGF0aCwgcGF0aCksCisgICAgICBPUEVSQU5EUygxLCAiPGxpc3Q+IikKKyAgICB9CisgIEVORF9PUFRJT05TKDIsIDAsIDAsICIiKQorCisgIFRjbF9PYmogKiplbGVtZW50czsKKyAgaW50IGNvdW50OworCisgIGlmIChvcHRpb25zLnBhdGgpIHsKKyAgICBURVNUX1RDTF9PSyhUY2xfTGlzdE9iakdldEVsZW1lbnRzKGludGVycCwgb3B0aW9ucy5wYXRoLCAmY291bnQsICZlbGVtZW50cykpOworICB9IGVsc2UgeworICAgIGVsZW1lbnRzID0gTlVMTDsKKyAgICBjb3VudCA9IDA7CisgIH0KKworICBpZiAoY291bnQpIHsKKyAgICBpbnQgcGF0aFtjb3VudF07CisKKyAgICBmb3IgKGludCBpbmRleD0wOyBpbmRleDxjb3VudDsgaW5kZXgrPTEpIHsKKyAgICAgIFRFU1RfVENMX09LKFRjbF9HZXRJbnRGcm9tT2JqKGludGVycCwgZWxlbWVudHNbaW5kZXhdLCAmcGF0aFtpbmRleF0pKTsKKyAgICB9CisKKyAgICBURVNUX0JSTEFQSV9PSyhicmxhcGlfX2VudGVyVHR5TW9kZVdpdGhQYXRoKHNlc3Npb24tPmhhbmRsZSwgcGF0aCwgY291bnQsIG9wdGlvbnMuZHJpdmVyKSk7CisgIH0gZWxzZSB7CisgICAgVEVTVF9CUkxBUElfT0soYnJsYXBpX19lbnRlclR0eU1vZGVXaXRoUGF0aChzZXNzaW9uLT5oYW5kbGUsIE5VTEwsIDAsIG9wdGlvbnMuZHJpdmVyKSk7CisgIH0KKworICByZXR1cm4gVENMX09LOworfQorCitGVU5DVElPTl9IQU5ETEVSKHNlc3Npb24sIGdldEF1dGgpIHsKKyAgQnJsYXBpU2Vzc2lvbiAqc2Vzc2lvbiA9IGRhdGE7CisgIFRFU1RfRlVOQ1RJT05fTk9fQVJHVU1FTlRTKCk7CisKKyAgc2V0U3RyaW5nUmVzdWx0KGludGVycCwgc2Vzc2lvbi0+c2V0dGluZ3MuYXV0aCwgLTEpOworICByZXR1cm4gVENMX09LOworfQorCitGVU5DVElPTl9IQU5ETEVSKHNlc3Npb24sIGdldERpc3BsYXlTaXplKSB7CisgIEJybGFwaVNlc3Npb24gKnNlc3Npb24gPSBkYXRhOworICBURVNUX0ZVTkNUSU9OX05PX0FSR1VNRU5UUygpOworICBURVNUX1RDTF9PSyhnZXREaXNwbGF5U2l6ZShpbnRlcnAsIHNlc3Npb24pKTsKKworICBUY2xfT2JqICp3aWR0aCA9IFRjbF9OZXdJbnRPYmooc2Vzc2lvbi0+ZGlzcGxheVdpZHRoKTsKKyAgaWYgKCF3aWR0aCkgcmV0dXJuIFRDTF9FUlJPUjsKKworICBUY2xfT2JqICpoZWlnaHQgPSBUY2xfTmV3SW50T2JqKHNlc3Npb24tPmRpc3BsYXlIZWlnaHQpOworICBpZiAoIWhlaWdodCkgcmV0dXJuIFRDTF9FUlJPUjsKKworICBUY2xfT2JqICpjb25zdCBlbGVtZW50c1tdID0ge3dpZHRoLCBoZWlnaHR9OworICBUY2xfT2JqICpsaXN0ID0gVGNsX05ld0xpc3RPYmooMiwgZWxlbWVudHMpOworICBpZiAoIWxpc3QpIHJldHVybiBUQ0xfRVJST1I7CisKKyAgVGNsX1NldE9ialJlc3VsdChpbnRlcnAsIGxpc3QpOworICByZXR1cm4gVENMX09LOworfQorCitGVU5DVElPTl9IQU5ETEVSKHNlc3Npb24sIGdldERyaXZlck5hbWUpIHsKKyAgQnJsYXBpU2Vzc2lvbiAqc2Vzc2lvbiA9IGRhdGE7CisgIFRFU1RfRlVOQ1RJT05fTk9fQVJHVU1FTlRTKCk7CisgIHJldHVybiBnZXRTZXNzaW9uU3RyaW5nUHJvcGVydHkoaW50ZXJwLCBzZXNzaW9uLCBicmxhcGlfX2dldERyaXZlck5hbWUpOworfQorCitGVU5DVElPTl9IQU5ETEVSKHNlc3Npb24sIGdldEZpbGVEZXNjcmlwdG9yKSB7CisgIEJybGFwaVNlc3Npb24gKnNlc3Npb24gPSBkYXRhOworICBURVNUX0ZVTkNUSU9OX05PX0FSR1VNRU5UUygpOworCisgIHNldEludFJlc3VsdChpbnRlcnAsIHNlc3Npb24tPmZpbGVEZXNjcmlwdG9yKTsKKyAgcmV0dXJuIFRDTF9PSzsKK30KKworRlVOQ1RJT05fSEFORExFUihzZXNzaW9uLCBnZXRIb3N0KSB7CisgIEJybGFwaVNlc3Npb24gKnNlc3Npb24gPSBkYXRhOworICBURVNUX0ZVTkNUSU9OX05PX0FSR1VNRU5UUygpOworCisgIHNldFN0cmluZ1Jlc3VsdChpbnRlcnAsIHNlc3Npb24tPnNldHRpbmdzLmhvc3QsIC0xKTsKKyAgcmV0dXJuIFRDTF9PSzsKK30KKworRlVOQ1RJT05fSEFORExFUihzZXNzaW9uLCBnZXRNb2RlbElkZW50aWZpZXIpIHsKKyAgQnJsYXBpU2Vzc2lvbiAqc2Vzc2lvbiA9IGRhdGE7CisgIFRFU1RfRlVOQ1RJT05fTk9fQVJHVU1FTlRTKCk7CisgIHJldHVybiBnZXRTZXNzaW9uU3RyaW5nUHJvcGVydHkoaW50ZXJwLCBzZXNzaW9uLCBicmxhcGlfX2dldE1vZGVsSWRlbnRpZmllcik7Cit9CisKK0ZVTkNUSU9OX0hBTkRMRVIoc2Vzc2lvbiwgbGVhdmVSYXdNb2RlKSB7CisgIEJybGFwaVNlc3Npb24gKnNlc3Npb24gPSBkYXRhOworICBURVNUX0ZVTkNUSU9OX05PX0FSR1VNRU5UUygpOworCisgIFRFU1RfQlJMQVBJX09LKGJybGFwaV9fbGVhdmVSYXdNb2RlKHNlc3Npb24tPmhhbmRsZSkpOworICByZXR1cm4gVENMX09LOworfQorCitGVU5DVElPTl9IQU5ETEVSKHNlc3Npb24sIGxlYXZlVHR5TW9kZSkgeworICBCcmxhcGlTZXNzaW9uICpzZXNzaW9uID0gZGF0YTsKKyAgVEVTVF9GVU5DVElPTl9OT19BUkdVTUVOVFMoKTsKKworICBURVNUX0JSTEFQSV9PSyhicmxhcGlfX2xlYXZlVHR5TW9kZShzZXNzaW9uLT5oYW5kbGUpKTsKKyAgcmV0dXJuIFRDTF9PSzsKK30KKwordHlwZWRlZiBzdHJ1Y3QgeworICBUY2xfT2JqICp2YWx1ZTsKKyAgYnJsYXBpX3BhcmFtX2ZsYWdzX3QgZmxhZ3M7Cit9IFBhcmFtZXRlck9wdGlvbnM7CisKK09QVElPTl9IQU5ETEVSKHNlc3Npb24sIHBhcmFtZXRlciwgZWNobykgeworICBQYXJhbWV0ZXJPcHRpb25zICpvcHRpb25zID0gZGF0YTsKKyAgYnJsYXBpX3BhcmFtX2ZsYWdzX3QgZmxhZyA9IEJSTEFQSV9QQVJBTUZfU0VMRjsKKworICBpbnQgZWNobzsKKyAgVEVTVF9UQ0xfT0soVGNsX0dldEJvb2xlYW5Gcm9tT2JqKGludGVycCwgb2JqdlsxXSwgJmVjaG8pKTsKKworICBpZiAoZWNobykgeworICAgIG9wdGlvbnMtPmZsYWdzIHw9IGZsYWc7CisgIH0gZWxzZSB7CisgICAgb3B0aW9ucy0+ZmxhZ3MgJj0gfmZsYWc7CisgIH0KKworICByZXR1cm4gVENMX09LOworfQorCitPUFRJT05fSEFORExFUihzZXNzaW9uLCBwYXJhbWV0ZXIsIGdsb2JhbCkgeworICBQYXJhbWV0ZXJPcHRpb25zICpvcHRpb25zID0gZGF0YTsKKyAgYnJsYXBpX3BhcmFtX2ZsYWdzX3QgZmxhZyA9IEJSTEFQSV9QQVJBTUZfR0xPQkFMOworCisgIGludCBnbG9iYWw7CisgIFRFU1RfVENMX09LKFRjbF9HZXRCb29sZWFuRnJvbU9iaihpbnRlcnAsIG9ianZbMV0sICZnbG9iYWwpKTsKKworICBpZiAoZ2xvYmFsKSB7CisgICAgb3B0aW9ucy0+ZmxhZ3MgfD0gZmxhZzsKKyAgfSBlbHNlIHsKKyAgICBvcHRpb25zLT5mbGFncyAmPSB+ZmxhZzsKKyAgfQorCisgIHJldHVybiBUQ0xfT0s7Cit9CisKK09QVElPTl9IQU5ETEVSKHNlc3Npb24sIHBhcmFtZXRlciwgc2V0KSB7CisgIFBhcmFtZXRlck9wdGlvbnMgKm9wdGlvbnMgPSBkYXRhOworICBvcHRpb25zLT52YWx1ZSA9IG9ianZbMV07CisgIHJldHVybiBUQ0xfT0s7Cit9CisKK3N0YXRpYyBpbnQKK3BhcnNlUGFyYW1ldGVyTmFtZSAoVGNsX0ludGVycCAqaW50ZXJwLCBUY2xfT2JqICpuYW1lLCBicmxhcGlfcGFyYW1fdCAqcGFyYW1ldGVyKSB7CisgIHR5cGVkZWYgc3RydWN0IHsKKyAgICBjb25zdCBjaGFyICpuYW1lOworICAgIGJybGFwaV9wYXJhbV90IHZhbHVlOworICB9IFBhcmFtZXRlckVudHJ5OworCisgIHN0YXRpYyBjb25zdCBQYXJhbWV0ZXJFbnRyeSBwYXJhbWV0ZXJzW10gPSB7CisgICAgI2luY2x1ZGUgInBhcmFtZXRlcnMuYXV0by5oIgorICAgIHsgLm5hbWU9TlVMTCB9CisgIH07CisKKyAgaW50IGluZGV4OworICBURVNUX1RDTF9PSyhUY2xfR2V0SW5kZXhGcm9tT2JqU3RydWN0KGludGVycCwgbmFtZSwgcGFyYW1ldGVycywgc2l6ZW9mKCpwYXJhbWV0ZXJzKSwgInBhcmFtZXRlciBuYW1lIiwgMCwgJmluZGV4KSk7CisKKyAgKnBhcmFtZXRlciA9IHBhcmFtZXRlcnNbaW5kZXhdLnZhbHVlOworICByZXR1cm4gVENMX09LOworfQorCitGVU5DVElPTl9IQU5ETEVSKHNlc3Npb24sIHBhcmFtZXRlcikgeworICBCcmxhcGlTZXNzaW9uICpzZXNzaW9uID0gZGF0YTsKKworICBQYXJhbWV0ZXJPcHRpb25zIG9wdGlvbnMgPSB7CisgICAgLnZhbHVlID0gTlVMTCwKKyAgICAuZmxhZ3MgPSAwCisgIH07CisKKyAgQkVHSU5fT1BUSU9OUworICAgIHsgT1BUSU9OKHNlc3Npb24sIHBhcmFtZXRlciwgZWNobyksCisgICAgICBPUEVSQU5EUygxLCAiPGJvb2xlYW4+IikKKyAgICB9LAorCisgICAgeyBPUFRJT04oc2Vzc2lvbiwgcGFyYW1ldGVyLCBnbG9iYWwpLAorICAgICAgT1BFUkFORFMoMSwgIjxib29sZWFuPiIpCisgICAgfSwKKworICAgIHsgT1BUSU9OKHNlc3Npb24sIHBhcmFtZXRlciwgc2V0KSwKKyAgICAgIE9QRVJBTkRTKDEsICI8dmFsdWU+IikKKyAgICB9CisgIEVORF9PUFRJT05TKDIsIDEsIDEsICI8bmFtZT4gWzxzdWJwYXJhbT5dIikKKworICBUY2xfT2JqICpuYW1lID0gb2JqdlswXTsKKyAgYnJsYXBpX3BhcmFtX3QgcGFyYW1ldGVyOworICBURVNUX1RDTF9PSyhwYXJzZVBhcmFtZXRlck5hbWUoaW50ZXJwLCBuYW1lLCAmcGFyYW1ldGVyKSk7CisKKyAgY29uc3QgYnJsYXBpX3BhcmFtX3Byb3BlcnRpZXNfdCAqcHJvcGVydGllcyA9IGJybGFwaV9nZXRQYXJhbWV0ZXJQcm9wZXJ0aWVzKHBhcmFtZXRlcik7CisgIGlmICghcHJvcGVydGllcykgeworICAgIHNldFN0cmluZ3NSZXN1bHQoaW50ZXJwLCAiYmFkIHBhcmFtZXRlciBuYW1lIiwgVGNsX0dldFN0cmluZyhuYW1lKSwgTlVMTCk7CisgICAgcmV0dXJuIFRDTF9FUlJPUjsKKyAgfQorCisgIGludCBoYXZlU3VicGFyYW0gPSBvYmpjID4gMTsKKyAgYnJsYXBpX3BhcmFtX3N1YnBhcmFtX3Qgc3VicGFyYW07CisKKyAgaWYgKHByb3BlcnRpZXMtPmhhc1N1YnBhcmFtKSB7CisgICAgaWYgKCFoYXZlU3VicGFyYW0pIHsKKyAgICAgIHNldFN0cmluZ3NSZXN1bHQoaW50ZXJwLCAic3VicGFyYW0gbm90IHNwZWNpZmllZCBmb3IgXCIiLCBUY2xfR2V0U3RyaW5nKG5hbWUpLCAiXCIiLCBOVUxMKTsKKyAgICAgIHJldHVybiBUQ0xfRVJST1I7CisgICAgfQorCisgICAgVGNsX1dpZGVJbnQgdmFsdWU7CisgICAgVEVTVF9UQ0xfT0soVGNsX0dldFdpZGVJbnRGcm9tT2JqKGludGVycCwgb2JqdlsxXSwgJnZhbHVlKSk7CisgICAgc3VicGFyYW0gPSB2YWx1ZTsKKyAgfSBlbHNlIHsKKyAgICBpZiAoaGF2ZVN1YnBhcmFtKSB7CisgICAgICBzZXRTdHJpbmdzUmVzdWx0KGludGVycCwgInN1YnBhcmFtIHNwZWNpZmllZCBmb3IgXCIiLCBUY2xfR2V0U3RyaW5nKG5hbWUpLCAiXCIiLCBOVUxMKTsKKyAgICAgIHJldHVybiBUQ0xfRVJST1I7CisgICAgfQorCisgICAgc3VicGFyYW0gPSAwOworICB9CisKKyAgaWYgKG9wdGlvbnMudmFsdWUpIHsKKyAgICBUY2xfT2JqICp2YWx1ZSA9IG9wdGlvbnMudmFsdWU7CisKKyAgICBzd2l0Y2ggKHByb3BlcnRpZXMtPnR5cGUpIHsKKyAgICAgIGNhc2UgQlJMQVBJX1BBUkFNX1RZUEVfU1RSSU5HOiB7CisgICAgICAgIGNvbnN0IGNoYXIgKnN0cmluZyA9IFRjbF9HZXRTdHJpbmcodmFsdWUpOworCVRFU1RfQlJMQVBJX09LKGJybGFwaV9fc2V0UGFyYW1ldGVyKHNlc3Npb24tPmhhbmRsZSwgcGFyYW1ldGVyLCBzdWJwYXJhbSwgb3B0aW9ucy5mbGFncywgc3RyaW5nLCBzdHJsZW4oc3RyaW5nKSkpOworICAgICAgICBicmVhazsKKyAgICAgIH0KKworICAgICAgZGVmYXVsdDogeworICAgICAgICBUY2xfT2JqICoqZWxlbWVudHM7CisgICAgICAgIGludCBjb3VudDsKKyAgICAgICAgVEVTVF9UQ0xfT0soVGNsX0xpc3RPYmpHZXRFbGVtZW50cyhpbnRlcnAsIHZhbHVlLCAmY291bnQsICZlbGVtZW50cykpOworCisgICAgICAgIGlmIChjb3VudCkgeworICAgICAgICAgIHN3aXRjaCAocHJvcGVydGllcy0+dHlwZSkgeworICAgICAgICAgICAgY2FzZSBCUkxBUElfUEFSQU1fVFlQRV9CT09MRUFOOiB7CisgICAgICAgICAgICAgIGJybGFwaV9wYXJhbV9ib29sX3QgYnVmZmVyW2NvdW50XTsKKworICAgICAgICAgICAgICBmb3IgKGludCBpbmRleD0wOyBpbmRleDxjb3VudDsgaW5kZXgrPTEpIHsKKyAgICAgICAgICAgICAgICBpbnQgYm9vbGVhbjsKKyAgICAgICAgICAgICAgICBURVNUX1RDTF9PSyhUY2xfR2V0Qm9vbGVhbkZyb21PYmooaW50ZXJwLCBlbGVtZW50c1tpbmRleF0sICZib29sZWFuKSk7CisgICAgICAgICAgICAgICAgYnVmZmVyW2luZGV4XSA9ICEhYm9vbGVhbjsKKyAgICAgICAgICAgICAgfQorCisJICAgICAgVEVTVF9CUkxBUElfT0soYnJsYXBpX19zZXRQYXJhbWV0ZXIoc2Vzc2lvbi0+aGFuZGxlLCBwYXJhbWV0ZXIsIHN1YnBhcmFtLCBvcHRpb25zLmZsYWdzLCBidWZmZXIsIHNpemVvZihidWZmZXIpKSk7CisgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBjYXNlIEJSTEFQSV9QQVJBTV9UWVBFX1VJTlQ4OiB7CisgICAgICAgICAgICAgIHVpbnQ4X3QgYnVmZmVyW2NvdW50XTsKKworICAgICAgICAgICAgICBmb3IgKGludCBpbmRleD0wOyBpbmRleDxjb3VudDsgaW5kZXgrPTEpIHsKKyAgICAgICAgICAgICAgICBpbnQgaW50ZWdlcjsKKyAgICAgICAgICAgICAgICBURVNUX1RDTF9PSyhUY2xfR2V0SW50RnJvbU9iaihpbnRlcnAsIGVsZW1lbnRzW2luZGV4XSwgJmludGVnZXIpKTsKKyAgICAgICAgICAgICAgICBidWZmZXJbaW5kZXhdID0gaW50ZWdlcjsKKyAgICAgICAgICAgICAgfQorCisJICAgICAgVEVTVF9CUkxBUElfT0soYnJsYXBpX19zZXRQYXJhbWV0ZXIoc2Vzc2lvbi0+aGFuZGxlLCBwYXJhbWV0ZXIsIHN1YnBhcmFtLCBvcHRpb25zLmZsYWdzLCBidWZmZXIsIHNpemVvZihidWZmZXIpKSk7CisgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBjYXNlIEJSTEFQSV9QQVJBTV9UWVBFX1VJTlQxNjogeworICAgICAgICAgICAgICB1aW50MTZfdCBidWZmZXJbY291bnRdOworCisgICAgICAgICAgICAgIGZvciAoaW50IGluZGV4PTA7IGluZGV4PGNvdW50OyBpbmRleCs9MSkgeworICAgICAgICAgICAgICAgIGludCBpbnRlZ2VyOworICAgICAgICAgICAgICAgIFRFU1RfVENMX09LKFRjbF9HZXRJbnRGcm9tT2JqKGludGVycCwgZWxlbWVudHNbaW5kZXhdLCAmaW50ZWdlcikpOworICAgICAgICAgICAgICAgIGJ1ZmZlcltpbmRleF0gPSBpbnRlZ2VyOworICAgICAgICAgICAgICB9CisKKwkgICAgICBURVNUX0JSTEFQSV9PSyhicmxhcGlfX3NldFBhcmFtZXRlcihzZXNzaW9uLT5oYW5kbGUsIHBhcmFtZXRlciwgc3VicGFyYW0sIG9wdGlvbnMuZmxhZ3MsIGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlcikpKTsKKyAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGNhc2UgQlJMQVBJX1BBUkFNX1RZUEVfVUlOVDMyOiB7CisgICAgICAgICAgICAgIHVpbnQzMl90IGJ1ZmZlcltjb3VudF07CisKKyAgICAgICAgICAgICAgZm9yIChpbnQgaW5kZXg9MDsgaW5kZXg8Y291bnQ7IGluZGV4Kz0xKSB7CisgICAgICAgICAgICAgICAgaW50IGludGVnZXI7CisgICAgICAgICAgICAgICAgVEVTVF9UQ0xfT0soVGNsX0dldEludEZyb21PYmooaW50ZXJwLCBlbGVtZW50c1tpbmRleF0sICZpbnRlZ2VyKSk7CisgICAgICAgICAgICAgICAgYnVmZmVyW2luZGV4XSA9IGludGVnZXI7CisgICAgICAgICAgICAgIH0KKworCSAgICAgIFRFU1RfQlJMQVBJX09LKGJybGFwaV9fc2V0UGFyYW1ldGVyKHNlc3Npb24tPmhhbmRsZSwgcGFyYW1ldGVyLCBzdWJwYXJhbSwgb3B0aW9ucy5mbGFncywgYnVmZmVyLCBzaXplb2YoYnVmZmVyKSkpOworICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgY2FzZSBCUkxBUElfUEFSQU1fVFlQRV9VSU5UNjQ6IHsKKyAgICAgICAgICAgICAgdWludDY0X3QgYnVmZmVyW2NvdW50XTsKKworICAgICAgICAgICAgICBmb3IgKGludCBpbmRleD0wOyBpbmRleDxjb3VudDsgaW5kZXgrPTEpIHsKKyAgICAgICAgICAgICAgICBsb25nIGludGVnZXI7CisgICAgICAgICAgICAgICAgVEVTVF9UQ0xfT0soVGNsX0dldExvbmdGcm9tT2JqKGludGVycCwgZWxlbWVudHNbaW5kZXhdLCAmaW50ZWdlcikpOworICAgICAgICAgICAgICAgIGJ1ZmZlcltpbmRleF0gPSBpbnRlZ2VyOworICAgICAgICAgICAgICB9CisKKwkgICAgICBURVNUX0JSTEFQSV9PSyhicmxhcGlfX3NldFBhcmFtZXRlcihzZXNzaW9uLT5oYW5kbGUsIHBhcmFtZXRlciwgc3VicGFyYW0sIG9wdGlvbnMuZmxhZ3MsIGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlcikpKTsKKyAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKwkgIFRFU1RfQlJMQVBJX09LKGJybGFwaV9fc2V0UGFyYW1ldGVyKHNlc3Npb24tPmhhbmRsZSwgcGFyYW1ldGVyLCBzdWJwYXJhbSwgb3B0aW9ucy5mbGFncywgTlVMTCwgMCkpOworICAgICAgICB9CisKKyAgICAgICAgYnJlYWs7CisgICAgICB9CisgICAgfQorICB9IGVsc2UgeworICAgIHNpemVfdCBsZW5ndGg7CisgICAgdm9pZCAqdmFsdWUgPSBicmxhcGlfX2dldFBhcmFtZXRlckFsbG9jKHNlc3Npb24tPmhhbmRsZSwgcGFyYW1ldGVyLCBzdWJwYXJhbSwgb3B0aW9ucy5mbGFncywgJmxlbmd0aCk7CisKKyAgICBpZiAoIXZhbHVlKSB7CisgICAgICBzZXRCcmxhcGlFcnJvcihpbnRlcnApOworICAgICAgcmV0dXJuIFRDTF9FUlJPUjsKKyAgICB9CisKKyAgICBUY2xfT2JqICpyZXN1bHQgPSBUY2xfR2V0T2JqUmVzdWx0KGludGVycCk7CisKKyAgICBzd2l0Y2ggKHByb3BlcnRpZXMtPnR5cGUpIHsKKyAgICAgIGNhc2UgQlJMQVBJX1BBUkFNX1RZUEVfU1RSSU5HOiB7CisgICAgICAgIFRjbF9TZXRTdHJpbmdPYmoocmVzdWx0LCB2YWx1ZSwgLTEpOworICAgICAgICBicmVhazsKKyAgICAgIH0KKworICAgICAgZGVmYXVsdDogeworICAgICAgICBUY2xfU2V0TGlzdE9iaihyZXN1bHQsIDAsIE5VTEwpOworICAgICAgICBjb25zdCB2b2lkICplbmQgPSB2YWx1ZSArIGxlbmd0aDsKKworICAgICAgICBzd2l0Y2ggKHByb3BlcnRpZXMtPnR5cGUpIHsKKyAgICAgICAgICBjYXNlIEJSTEFQSV9QQVJBTV9UWVBFX0JPT0xFQU46IHsKKyAgICAgICAgICAgIGNvbnN0IGJybGFwaV9wYXJhbV9ib29sX3QgKmJvb2xlYW4gPSB2YWx1ZTsKKworICAgICAgICAgICAgd2hpbGUgKGJvb2xlYW4gPCAoY29uc3QgYnJsYXBpX3BhcmFtX2Jvb2xfdCAqKWVuZCkgeworICAgICAgICAgICAgICBUY2xfT2JqICplbGVtZW50ID0gVGNsX05ld0Jvb2xlYW5PYmooKmJvb2xlYW4pOworICAgICAgICAgICAgICBpZiAoIWVsZW1lbnQpIHJldHVybiBUQ0xfRVJST1I7CisgICAgICAgICAgICAgIFRFU1RfVENMX09LKFRjbF9MaXN0T2JqQXBwZW5kRWxlbWVudChpbnRlcnAsIHJlc3VsdCwgZWxlbWVudCkpOworICAgICAgICAgICAgICBib29sZWFuICs9IDE7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIH0KKworICAgICAgICAgIGNhc2UgQlJMQVBJX1BBUkFNX1RZUEVfVUlOVDg6IHsKKyAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKmludGVnZXIgPSB2YWx1ZTsKKworICAgICAgICAgICAgd2hpbGUgKGludGVnZXIgPCAoY29uc3QgdWludDhfdCAqKWVuZCkgeworICAgICAgICAgICAgICBUY2xfT2JqICplbGVtZW50ID0gVGNsX05ld0ludE9iaigqaW50ZWdlcik7CisgICAgICAgICAgICAgIGlmICghZWxlbWVudCkgcmV0dXJuIFRDTF9FUlJPUjsKKyAgICAgICAgICAgICAgVEVTVF9UQ0xfT0soVGNsX0xpc3RPYmpBcHBlbmRFbGVtZW50KGludGVycCwgcmVzdWx0LCBlbGVtZW50KSk7CisgICAgICAgICAgICAgIGludGVnZXIgKz0gMTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgfQorCisgICAgICAgICAgY2FzZSBCUkxBUElfUEFSQU1fVFlQRV9VSU5UMTY6IHsKKyAgICAgICAgICAgIGNvbnN0IHVpbnQxNl90ICppbnRlZ2VyID0gdmFsdWU7CisKKyAgICAgICAgICAgIHdoaWxlIChpbnRlZ2VyIDwgKGNvbnN0IHVpbnQxNl90ICopZW5kKSB7CisgICAgICAgICAgICAgIFRjbF9PYmogKmVsZW1lbnQgPSBUY2xfTmV3SW50T2JqKCppbnRlZ2VyKTsKKyAgICAgICAgICAgICAgaWYgKCFlbGVtZW50KSByZXR1cm4gVENMX0VSUk9SOworICAgICAgICAgICAgICBURVNUX1RDTF9PSyhUY2xfTGlzdE9iakFwcGVuZEVsZW1lbnQoaW50ZXJwLCByZXN1bHQsIGVsZW1lbnQpKTsKKyAgICAgICAgICAgICAgaW50ZWdlciArPSAxOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICB9CisKKyAgICAgICAgICBjYXNlIEJSTEFQSV9QQVJBTV9UWVBFX1VJTlQzMjogeworICAgICAgICAgICAgY29uc3QgdWludDMyX3QgKmludGVnZXIgPSB2YWx1ZTsKKworICAgICAgICAgICAgd2hpbGUgKGludGVnZXIgPCAoY29uc3QgdWludDMyX3QgKillbmQpIHsKKyAgICAgICAgICAgICAgVGNsX09iaiAqZWxlbWVudCA9IFRjbF9OZXdJbnRPYmooKmludGVnZXIpOworICAgICAgICAgICAgICBpZiAoIWVsZW1lbnQpIHJldHVybiBUQ0xfRVJST1I7CisgICAgICAgICAgICAgIFRFU1RfVENMX09LKFRjbF9MaXN0T2JqQXBwZW5kRWxlbWVudChpbnRlcnAsIHJlc3VsdCwgZWxlbWVudCkpOworICAgICAgICAgICAgICBpbnRlZ2VyICs9IDE7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIH0KKworICAgICAgICAgIGNhc2UgQlJMQVBJX1BBUkFNX1RZUEVfVUlOVDY0OiB7CisgICAgICAgICAgICBjb25zdCB1aW50NjRfdCAqaW50ZWdlciA9IHZhbHVlOworCisgICAgICAgICAgICB3aGlsZSAoaW50ZWdlciA8IChjb25zdCB1aW50NjRfdCAqKWVuZCkgeworICAgICAgICAgICAgICBUY2xfT2JqICplbGVtZW50ID0gVGNsX05ld1dpZGVJbnRPYmooKmludGVnZXIpOworICAgICAgICAgICAgICBpZiAoIWVsZW1lbnQpIHJldHVybiBUQ0xfRVJST1I7CisgICAgICAgICAgICAgIFRFU1RfVENMX09LKFRjbF9MaXN0T2JqQXBwZW5kRWxlbWVudChpbnRlcnAsIHJlc3VsdCwgZWxlbWVudCkpOworICAgICAgICAgICAgICBpbnRlZ2VyICs9IDE7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIH0KKworICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGJyZWFrOworICAgICAgfQorICAgIH0KKworICAgIGZyZWUodmFsdWUpOworICB9CisKKyAgcmV0dXJuIFRDTF9PSzsKK30KKworRlVOQ1RJT05fSEFORExFUihzZXNzaW9uLCByZWFkS2V5KSB7CisgIEJybGFwaVNlc3Npb24gKnNlc3Npb24gPSBkYXRhOworICBURVNUX0ZVTkNUSU9OX0FSR1VNRU5UUygxLCAwLCAiPHdhaXQ+Iik7CisKKyAgaW50IGxlbmd0aDsKKyAgY29uc3QgY2hhciAqb3BlcmFuZCA9IFRjbF9HZXRTdHJpbmdGcm9tT2JqKG9ianZbMl0sICZsZW5ndGgpOworICBpZiAoIW9wZXJhbmQpIHJldHVybiBUQ0xfRVJST1I7CisKKyAgaW50IHdhaXQ7CisgIFRFU1RfVENMX09LKFRjbF9HZXRCb29sZWFuKGludGVycCwgb3BlcmFuZCwgJndhaXQpKTsKKworICBicmxhcGlfa2V5Q29kZV90IGtleTsKKyAgaW50IHJlc3VsdCA9IGJybGFwaV9fcmVhZEtleShzZXNzaW9uLT5oYW5kbGUsIHdhaXQsICZrZXkpOworICBURVNUX0JSTEFQSV9PSyhyZXN1bHQpOworCisgIGlmIChyZXN1bHQgPT0gMSkgc2V0V2lkZUludFJlc3VsdChpbnRlcnAsIGtleSk7CisgIHJldHVybiBUQ0xfT0s7Cit9CisKK0ZVTkNUSU9OX0hBTkRMRVIoc2Vzc2lvbiwgcmVhZEtleVdpdGhUaW1lb3V0KSB7CisgIEJybGFwaVNlc3Npb24gKnNlc3Npb24gPSBkYXRhOworICBURVNUX0ZVTkNUSU9OX0FSR1VNRU5UUygxLCAwLCAie2luZmluaXRlIHwgPHNlY29uZHM+fSIpOworCisgIGludCBsZW5ndGg7CisgIGNvbnN0IGNoYXIgKm9wZXJhbmQgPSBUY2xfR2V0U3RyaW5nRnJvbU9iaihvYmp2WzJdLCAmbGVuZ3RoKTsKKyAgaWYgKCFvcGVyYW5kKSByZXR1cm4gVENMX0VSUk9SOworICBpbnQgdGltZW91dDsKKworICBpZiAoc3RyY21wKG9wZXJhbmQsICJpbmZpbml0ZSIpID09IDApIHsKKyAgICB0aW1lb3V0ID0gLTE7CisgIH0gZWxzZSB7CisgICAgaW50IHNlY29uZHM7CisgICAgVEVTVF9UQ0xfT0soVGNsX0dldEludChpbnRlcnAsIG9wZXJhbmQsICZzZWNvbmRzKSk7CisKKyAgICBpZiAoc2Vjb25kcyA8IDApIHsKKyAgICAgIHNldFN0cmluZ3NSZXN1bHQoaW50ZXJwLCAibmVnYXRpdmUgdGltZW91dCAiLCBvcGVyYW5kLCBOVUxMKTsKKyAgICAgIHJldHVybiBUQ0xfRVJST1I7CisgICAgfQorCisgICAgdGltZW91dCA9IHNlY29uZHMgKiAxMDAwOworICB9CisKKyAgYnJsYXBpX2tleUNvZGVfdCBjb2RlOworICBpbnQgcmVzdWx0ID0gYnJsYXBpX19yZWFkS2V5V2l0aFRpbWVvdXQoc2Vzc2lvbi0+aGFuZGxlLCB0aW1lb3V0LCAmY29kZSk7CisgIFRFU1RfQlJMQVBJX09LKHJlc3VsdCk7CisKKyAgaWYgKHJlc3VsdCA9PSAxKSBzZXRXaWRlSW50UmVzdWx0KGludGVycCwgY29kZSk7CisgIHJldHVybiBUQ0xfT0s7Cit9CisKK0ZVTkNUSU9OX0hBTkRMRVIoc2Vzc2lvbiwgcmVjdlJhdykgeworICBCcmxhcGlTZXNzaW9uICpzZXNzaW9uID0gZGF0YTsKKyAgVEVTVF9GVU5DVElPTl9BUkdVTUVOVFMoMSwgMCwgIjxtYXhpbXVtTGVuZ3RoPiIpOworCisgIGludCBzaXplOworICBURVNUX1RDTF9PSyhUY2xfR2V0SW50RnJvbU9iaihpbnRlcnAsIG9ianZbMl0sICZzaXplKSk7CisKKyAgdW5zaWduZWQgY2hhciBidWZmZXJbc2l6ZV07CisgIGludCByZXN1bHQgPSBicmxhcGlfX3JlY3ZSYXcoc2Vzc2lvbi0+aGFuZGxlLCBidWZmZXIsIHNpemUpOworICBURVNUX0JSTEFQSV9PSyhyZXN1bHQpOworCisgIHNldEJ5dGVBcnJheVJlc3VsdChpbnRlcnAsIGJ1ZmZlciwgcmVzdWx0KTsKKyAgcmV0dXJuIFRDTF9PSzsKK30KKworRlVOQ1RJT05fSEFORExFUihzZXNzaW9uLCByZXN1bWVEcml2ZXIpIHsKKyAgQnJsYXBpU2Vzc2lvbiAqc2Vzc2lvbiA9IGRhdGE7CisgIFRFU1RfRlVOQ1RJT05fTk9fQVJHVU1FTlRTKCk7CisKKyAgVEVTVF9CUkxBUElfT0soYnJsYXBpX19yZXN1bWVEcml2ZXIoc2Vzc2lvbi0+aGFuZGxlKSk7CisgIHJldHVybiBUQ0xfT0s7Cit9CisKK0ZVTkNUSU9OX0hBTkRMRVIoc2Vzc2lvbiwgc2VuZFJhdykgeworICBCcmxhcGlTZXNzaW9uICpzZXNzaW9uID0gZGF0YTsKKyAgVEVTVF9GVU5DVElPTl9BUkdVTUVOVFMoMSwgMCwgIjxwYWNrZXQ+Iik7CisKKyAgaW50IGNvdW50OworICBjb25zdCB1bnNpZ25lZCBjaGFyICpieXRlcyA9IFRjbF9HZXRCeXRlQXJyYXlGcm9tT2JqKG9ianZbMl0sICZjb3VudCk7CisKKyAgVEVTVF9CUkxBUElfT0soYnJsYXBpX19zZW5kUmF3KHNlc3Npb24tPmhhbmRsZSwgYnl0ZXMsIGNvdW50KSk7CisgIHJldHVybiBUQ0xfT0s7Cit9CisKK0ZVTkNUSU9OX0hBTkRMRVIoc2Vzc2lvbiwgc2V0Rm9jdXMpIHsKKyAgQnJsYXBpU2Vzc2lvbiAqc2Vzc2lvbiA9IGRhdGE7CisgIFRFU1RfRlVOQ1RJT05fQVJHVU1FTlRTKDEsIDAsICI8dHR5TnVtYmVyPiIpOworCisgIGludCB0dHk7CisgIFRFU1RfVENMX09LKFRjbF9HZXRJbnRGcm9tT2JqKGludGVycCwgb2JqdlsyXSwgJnR0eSkpOworCisgIFRFU1RfQlJMQVBJX09LKGJybGFwaV9fc2V0Rm9jdXMoc2Vzc2lvbi0+aGFuZGxlLCB0dHkpKTsKKyAgcmV0dXJuIFRDTF9PSzsKK30KKworRlVOQ1RJT05fSEFORExFUihzZXNzaW9uLCBzdXNwZW5kRHJpdmVyKSB7CisgIEJybGFwaVNlc3Npb24gKnNlc3Npb24gPSBkYXRhOworICBURVNUX0ZVTkNUSU9OX0FSR1VNRU5UUygxLCAwLCAiPGRyaXZlcj4iKTsKKworICBjb25zdCBjaGFyICpkcml2ZXIgPSBUY2xfR2V0U3RyaW5nKG9ianZbMl0pOworICBpZiAoIWRyaXZlcikgcmV0dXJuIFRDTF9FUlJPUjsKKworICBURVNUX0JSTEFQSV9PSyhicmxhcGlfX3N1c3BlbmREcml2ZXIoc2Vzc2lvbi0+aGFuZGxlLCBkcml2ZXIpKTsKKyAgcmV0dXJuIFRDTF9PSzsKK30KKwordHlwZWRlZiBzdHJ1Y3QgeworICBicmxhcGlfd3JpdGVBcmd1bWVudHNfdCBhcmd1bWVudHM7CisKKyAgVGNsX09iaiAqdGV4dE9iamVjdDsKKyAgaW50IHRleHRMZW5ndGg7CisKKyAgaW50IGFuZExlbmd0aDsKKyAgaW50IG9yTGVuZ3RoOworCisgIHVuc2lnbmVkIG51bWVyaWNDdXJzb3I6MTsKKyAgdW5zaWduZWQgbnVtZXJpY0Rpc3BsYXk6MTsKKyAgdW5zaWduZWQgcmVnaW9uU3BlY2lmaWVkOjE7Cit9IFdyaXRlT3B0aW9uczsKKworT1BUSU9OX0hBTkRMRVIoc2Vzc2lvbiwgd3JpdGUsIGFuZCkgeworICBXcml0ZU9wdGlvbnMgKm9wdGlvbnMgPSBkYXRhOworICBvcHRpb25zLT5hcmd1bWVudHMuYW5kTWFzayA9IFRjbF9HZXRCeXRlQXJyYXlGcm9tT2JqKG9ianZbMV0sICZvcHRpb25zLT5hbmRMZW5ndGgpOworICBpZiAoIW9wdGlvbnMtPmFuZExlbmd0aCkgb3B0aW9ucy0+YXJndW1lbnRzLmFuZE1hc2sgPSBOVUxMOworICByZXR1cm4gVENMX09LOworfQorCitPUFRJT05fSEFORExFUihzZXNzaW9uLCB3cml0ZSwgY3Vyc29yKSB7CisgIFdyaXRlT3B0aW9ucyAqb3B0aW9ucyA9IGRhdGE7CisgIGludCBpc051bWVyaWMgPSAwOworCisgIFRjbF9PYmogKm9iamVjdCA9IG9ianZbMV07CisgIGNvbnN0IGNoYXIgKm9wZXJhbmQgPSBUY2xfR2V0U3RyaW5nKG9iamVjdCk7CisgIGlmICghb3BlcmFuZCkgcmV0dXJuIFRDTF9FUlJPUjsKKworICBpZiAoc3RyY21wKG9wZXJhbmQsICJvZmYiKSA9PSAwKSB7CisgICAgb3B0aW9ucy0+YXJndW1lbnRzLmN1cnNvciA9IEJSTEFQSV9DVVJTT1JfT0ZGOworICB9IGVsc2UgaWYgKHN0cmNtcChvcGVyYW5kLCAibGVhdmUiKSA9PSAwKSB7CisgICAgb3B0aW9ucy0+YXJndW1lbnRzLmN1cnNvciA9IEJSTEFQSV9DVVJTT1JfTEVBVkU7CisgIH0gZWxzZSB7CisgICAgaW50IHBvc2l0aW9uOworICAgIFRFU1RfVENMX09LKFRjbF9HZXRJbnRGcm9tT2JqKGludGVycCwgb2JqZWN0LCAmcG9zaXRpb24pKTsKKworICAgIG9wdGlvbnMtPmFyZ3VtZW50cy5jdXJzb3IgPSBwb3NpdGlvbiArIDE7CisgICAgaXNOdW1lcmljID0gMTsKKyAgfQorCisgIG9wdGlvbnMtPm51bWVyaWNDdXJzb3IgPSBpc051bWVyaWM7CisgIHJldHVybiBUQ0xfT0s7Cit9CisKK09QVElPTl9IQU5ETEVSKHNlc3Npb24sIHdyaXRlLCBkaXNwbGF5KSB7CisgIFdyaXRlT3B0aW9ucyAqb3B0aW9ucyA9IGRhdGE7CisgIGludCBpc051bWVyaWMgPSAwOworCisgIFRjbF9PYmogKm9iamVjdCA9IG9ianZbMV07CisgIGNvbnN0IGNoYXIgKm9wZXJhbmQgPSBUY2xfR2V0U3RyaW5nKG9iamVjdCk7CisgIGlmICghb3BlcmFuZCkgcmV0dXJuIFRDTF9FUlJPUjsKKworICBpZiAoc3RyY21wKG9wZXJhbmQsICJkZWZhdWx0IikgPT0gMCkgeworICAgIG9wdGlvbnMtPmFyZ3VtZW50cy5kaXNwbGF5TnVtYmVyID0gQlJMQVBJX0RJU1BMQVlfREVGQVVMVDsKKyAgfSBlbHNlIHsKKyAgICBpbnQgbnVtYmVyOworICAgIFRFU1RfVENMX09LKFRjbF9HZXRJbnRGcm9tT2JqKGludGVycCwgb2JqZWN0LCAmbnVtYmVyKSk7CisKKyAgICBvcHRpb25zLT5hcmd1bWVudHMuZGlzcGxheU51bWJlciA9IG51bWJlcjsKKyAgICBpc051bWVyaWMgPSAxOworICB9CisKKyAgb3B0aW9ucy0+bnVtZXJpY0Rpc3BsYXkgPSBpc051bWVyaWM7CisgIHJldHVybiBUQ0xfT0s7Cit9CisKK09QVElPTl9IQU5ETEVSKHNlc3Npb24sIHdyaXRlLCBvcikgeworICBXcml0ZU9wdGlvbnMgKm9wdGlvbnMgPSBkYXRhOworICBvcHRpb25zLT5hcmd1bWVudHMub3JNYXNrID0gVGNsX0dldEJ5dGVBcnJheUZyb21PYmoob2JqdlsxXSwgJm9wdGlvbnMtPm9yTGVuZ3RoKTsKKyAgaWYgKCFvcHRpb25zLT5vckxlbmd0aCkgb3B0aW9ucy0+YXJndW1lbnRzLm9yTWFzayA9IE5VTEw7CisgIHJldHVybiBUQ0xfT0s7Cit9CisKK09QVElPTl9IQU5ETEVSKHNlc3Npb24sIHdyaXRlLCByZWdpb24pIHsKKyAgV3JpdGVPcHRpb25zICpvcHRpb25zID0gZGF0YTsKKworICBpbnQgc3RhcnQ7CisgIFRFU1RfVENMX09LKFRjbF9HZXRJbnRGcm9tT2JqKGludGVycCwgb2JqdlsxXSwgJnN0YXJ0KSk7CisgIG9wdGlvbnMtPmFyZ3VtZW50cy5yZWdpb25CZWdpbiA9IHN0YXJ0ICsgMTsKKworICBpbnQgc2l6ZTsKKyAgVEVTVF9UQ0xfT0soVGNsX0dldEludEZyb21PYmooaW50ZXJwLCBvYmp2WzJdLCAmc2l6ZSkpOworICBvcHRpb25zLT5hcmd1bWVudHMucmVnaW9uU2l6ZSA9IHNpemU7CisKKyAgb3B0aW9ucy0+cmVnaW9uU3BlY2lmaWVkID0gMTsKKyAgcmV0dXJuIFRDTF9PSzsKK30KKworT1BUSU9OX0hBTkRMRVIoc2Vzc2lvbiwgd3JpdGUsIHRleHQpIHsKKyAgV3JpdGVPcHRpb25zICpvcHRpb25zID0gZGF0YTsKKyAgb3B0aW9ucy0+dGV4dE9iamVjdCA9IG9ianZbMV07CisgIG9wdGlvbnMtPnRleHRMZW5ndGggPSBUY2xfR2V0Q2hhckxlbmd0aChvcHRpb25zLT50ZXh0T2JqZWN0KTsKKyAgaWYgKCFvcHRpb25zLT50ZXh0TGVuZ3RoKSBvcHRpb25zLT50ZXh0T2JqZWN0ID0gTlVMTDsKKyAgcmV0dXJuIFRDTF9PSzsKK30KKworRlVOQ1RJT05fSEFORExFUihzZXNzaW9uLCB3cml0ZSkgeworICBCcmxhcGlTZXNzaW9uICpzZXNzaW9uID0gZGF0YTsKKworICBXcml0ZU9wdGlvbnMgb3B0aW9ucyA9IHsKKyAgICAuYXJndW1lbnRzID0gQlJMQVBJX1dSSVRFQVJHVU1FTlRTX0lOSVRJQUxJWkVSCisgIH07CisKKyAgQkVHSU5fT1BUSU9OUworICAgIHsgT1BUSU9OKHNlc3Npb24sIHdyaXRlLCBhbmQpLAorICAgICAgT1BFUkFORFMoMSwgIjxkb3RzPiIpCisgICAgfSwKKworICAgIHsgT1BUSU9OKHNlc3Npb24sIHdyaXRlLCBjdXJzb3IpLAorICAgICAgT1BFUkFORFMoMSwgIntsZWF2ZSB8IG9mZiB8IDxvZmZzZXQ+fSIpCisgICAgfSwKKworICAgIHsgT1BUSU9OKHNlc3Npb24sIHdyaXRlLCBkaXNwbGF5KSwKKyAgICAgIE9QRVJBTkRTKDEsICJ7ZGVmYXVsdCB8IDxudW1iZXI+fSIpCisgICAgfSwKKworICAgIHsgT1BUSU9OKHNlc3Npb24sIHdyaXRlLCBvciksCisgICAgICBPUEVSQU5EUygxLCAiPGRvdHM+IikKKyAgICB9LAorCisgICAgeyBPUFRJT04oc2Vzc2lvbiwgd3JpdGUsIHJlZ2lvbiksCisgICAgICBPUEVSQU5EUygyLCAiPHN0YXJ0PiA8c2l6ZT4iKQorICAgIH0sCisKKyAgICB7IE9QVElPTihzZXNzaW9uLCB3cml0ZSwgdGV4dCksCisgICAgICBPUEVSQU5EUygxLCAiPHN0cmluZz4iKQorICAgIH0KKyAgRU5EX09QVElPTlMoMiwgMCwgMCwgIiIpCisKKyAgaWYgKG9wdGlvbnMubnVtZXJpY0Rpc3BsYXkpIHsKKyAgICBpZiAob3B0aW9ucy5hcmd1bWVudHMuZGlzcGxheU51bWJlciA8IDApIHsKKyAgICAgIHNldFN0cmluZ1Jlc3VsdChpbnRlcnAsICJkaXNwbGF5IG51bWJlciBvdXQgb2YgcmFuZ2UiLCAtMSk7CisgICAgICByZXR1cm4gVENMX0VSUk9SOworICAgIH0KKyAgfQorCisgIGludCBjaGFyYWN0ZXJDb3VudCA9IDA7CisgIHsKKyAgICB0eXBlZGVmIHN0cnVjdCB7CisgICAgICBjb25zdCBjaGFyICpuYW1lOworICAgICAgY29uc3Qgdm9pZCAqYWRkcmVzczsKKyAgICAgIGludCBsZW5ndGg7CisgICAgfSBMZW5ndGhFbnRyeTsKKworICAgIGNvbnN0IExlbmd0aEVudHJ5IGxlbmd0aHNbXSA9IHsKKyAgICAgIHsgLm5hbWUgPSAidGV4dCIsCisgICAgICAgIC5hZGRyZXNzID0gb3B0aW9ucy50ZXh0T2JqZWN0LAorICAgICAgICAubGVuZ3RoID0gb3B0aW9ucy50ZXh0TGVuZ3RoCisgICAgICB9LAorCisgICAgICB7IC5uYW1lID0gImFuZE1hc2siLAorICAgICAgICAuYWRkcmVzcyA9IG9wdGlvbnMuYXJndW1lbnRzLmFuZE1hc2ssCisgICAgICAgIC5sZW5ndGggPSBvcHRpb25zLmFuZExlbmd0aAorICAgICAgfSwKKworICAgICAgeyAubmFtZSA9ICJvck1hc2siLAorICAgICAgICAuYWRkcmVzcyA9IG9wdGlvbnMuYXJndW1lbnRzLm9yTWFzaywKKyAgICAgICAgLmxlbmd0aCA9IG9wdGlvbnMub3JMZW5ndGgKKyAgICAgIH0sCisKKyAgICAgIHsgLm5hbWUgPSBOVUxMIH0KKyAgICB9OworCisgICAgY29uc3QgTGVuZ3RoRW50cnkgKmN1cnJlbnQgPSBsZW5ndGhzOworICAgIGNvbnN0IExlbmd0aEVudHJ5ICpmaXJzdCA9IE5VTEw7CisKKyAgICB3aGlsZSAoY3VycmVudC0+bmFtZSkgeworICAgICAgaWYgKGN1cnJlbnQtPmFkZHJlc3MpIHsKKyAgICAgICAgaWYgKCFmaXJzdCkgeworICAgICAgICAgIGZpcnN0ID0gY3VycmVudDsKKyAgICAgICAgICBjaGFyYWN0ZXJDb3VudCA9IGN1cnJlbnQtPmxlbmd0aDsKKyAgICAgICAgfSBlbHNlIGlmIChjdXJyZW50LT5sZW5ndGggIT0gZmlyc3QtPmxlbmd0aCkgeworICAgICAgICAgIHNldFN0cmluZ3NSZXN1bHQoaW50ZXJwLCBmaXJzdC0+bmFtZSwgIi8iLCBjdXJyZW50LT5uYW1lLCAiIGxlbmd0aCBtaXNtYXRjaCIsIE5VTEwpOworICAgICAgICAgIHJldHVybiBUQ0xfRVJST1I7CisgICAgICAgIH0KKyAgICAgIH0KKworICAgICAgY3VycmVudCArPSAxOworICAgIH0KKyAgfQorCisgIHVuc2lnbmVkIGludCBjZWxsQ291bnQ7CisgIFRFU1RfVENMX09LKGdldENlbGxDb3VudChpbnRlcnAsIHNlc3Npb24sICZjZWxsQ291bnQpKTsKKworICBpZiAob3B0aW9ucy5udW1lcmljQ3Vyc29yKSB7CisgICAgaW50IHBvc2l0aW9uID0gb3B0aW9ucy5hcmd1bWVudHMuY3Vyc29yIC0gMTsKKworICAgIGlmICgocG9zaXRpb24gPCAwKSB8fCAocG9zaXRpb24gPj0gY2VsbENvdW50KSkgeworICAgICAgc2V0U3RyaW5nUmVzdWx0KGludGVycCwgImN1cnNvciBwb3NpdGlvbiBvdXQgb2YgcmFuZ2UiLCAtMSk7CisgICAgICByZXR1cm4gVENMX0VSUk9SOworICAgIH0KKyAgfQorCisgIGlmIChvcHRpb25zLnJlZ2lvblNwZWNpZmllZCkgeworICAgIGludCBiZWdpbiA9IG9wdGlvbnMuYXJndW1lbnRzLnJlZ2lvbkJlZ2luOworICAgIGludCBzaXplID0gb3B0aW9ucy5hcmd1bWVudHMucmVnaW9uU2l6ZTsKKworICAgIGlmICgoYmVnaW4gPCAxKSB8fCAoYmVnaW4gPj0gY2VsbENvdW50KSkgeworICAgICAgc2V0U3RyaW5nUmVzdWx0KGludGVycCwgImJlZ2lubmluZyBvZiByZWdpb24gb3V0IG9mIHJhbmdlIiwgLTEpOworICAgICAgcmV0dXJuIFRDTF9FUlJPUjsKKyAgICB9CisKKyAgICBpZiAoKHNpemUgPCAxKSB8fCAoKChiZWdpbiAtIDEpICsgc2l6ZSkgPiBjZWxsQ291bnQpKSB7CisgICAgICBzZXRTdHJpbmdSZXN1bHQoaW50ZXJwLCAic2l6ZSBvZiByZWdpb24gb3V0IG9mIHJhbmdlIiwgLTEpOworICAgICAgcmV0dXJuIFRDTF9FUlJPUjsKKyAgICB9CisKKyAgICBjZWxsQ291bnQgPSBzaXplOworICB9IGVsc2UgeworICAgIG9wdGlvbnMuYXJndW1lbnRzLnJlZ2lvbkJlZ2luID0gMTsKKyAgICBvcHRpb25zLmFyZ3VtZW50cy5yZWdpb25TaXplID0gY2VsbENvdW50OworICB9CisKKyAgdW5zaWduZWQgY2hhciBhbmRNYXNrW2NlbGxDb3VudF07CisgIHVuc2lnbmVkIGNoYXIgb3JNYXNrW2NlbGxDb3VudF07CisKKyAgaWYgKGNoYXJhY3RlckNvdW50IDwgY2VsbENvdW50KSB7CisgICAgaWYgKG9wdGlvbnMuYXJndW1lbnRzLmFuZE1hc2spIHsKKyAgICAgIG1lbXNldChhbmRNYXNrLCAwWEZGLCBjZWxsQ291bnQpOworICAgICAgbWVtY3B5KGFuZE1hc2ssIG9wdGlvbnMuYXJndW1lbnRzLmFuZE1hc2ssIGNoYXJhY3RlckNvdW50KTsKKyAgICAgIG9wdGlvbnMuYXJndW1lbnRzLmFuZE1hc2sgPSBhbmRNYXNrOworICAgIH0KKworICAgIGlmIChvcHRpb25zLmFyZ3VtZW50cy5vck1hc2spIHsKKyAgICAgIG1lbXNldChvck1hc2ssIDBYMDAsIGNlbGxDb3VudCk7CisgICAgICBtZW1jcHkob3JNYXNrLCBvcHRpb25zLmFyZ3VtZW50cy5vck1hc2ssIGNoYXJhY3RlckNvdW50KTsKKyAgICAgIG9wdGlvbnMuYXJndW1lbnRzLm9yTWFzayA9IG9yTWFzazsKKyAgICB9CisKKyAgICBpZiAob3B0aW9ucy50ZXh0T2JqZWN0KSB7CisgICAgICBpZiAoVGNsX0lzU2hhcmVkKG9wdGlvbnMudGV4dE9iamVjdCkpIHsKKyAgICAgICAgaWYgKCEob3B0aW9ucy50ZXh0T2JqZWN0ID0gVGNsX0R1cGxpY2F0ZU9iaihvcHRpb25zLnRleHRPYmplY3QpKSkgeworICAgICAgICAgIHJldHVybiBUQ0xfRVJST1I7CisgICAgICAgIH0KKyAgICAgIH0KKworICAgICAgZG8geworICAgICAgICBUY2xfQXBwZW5kVG9PYmoob3B0aW9ucy50ZXh0T2JqZWN0LCAiICIsIC0xKTsKKyAgICAgIH0gd2hpbGUgKFRjbF9HZXRDaGFyTGVuZ3RoKG9wdGlvbnMudGV4dE9iamVjdCkgPCBjZWxsQ291bnQpOworICAgIH0KKyAgfSBlbHNlIGlmIChjaGFyYWN0ZXJDb3VudCA+IGNlbGxDb3VudCkgeworICAgIGlmIChvcHRpb25zLnRleHRPYmplY3QpIHsKKyAgICAgIGlmICghKG9wdGlvbnMudGV4dE9iamVjdCA9IFRjbF9HZXRSYW5nZShvcHRpb25zLnRleHRPYmplY3QsIDAsIGNlbGxDb3VudC0xKSkpIHsKKyAgICAgICAgcmV0dXJuIFRDTF9FUlJPUjsKKyAgICAgIH0KKyAgICB9CisgIH0KKworICBpZiAob3B0aW9ucy50ZXh0T2JqZWN0KSB7CisgICAgb3B0aW9ucy5hcmd1bWVudHMuY2hhcnNldCA9ICJVVEYtOCI7CisgICAgb3B0aW9ucy50ZXh0TGVuZ3RoID0gVGNsX0dldENoYXJMZW5ndGgob3B0aW9ucy50ZXh0T2JqZWN0KTsKKworICAgIG9wdGlvbnMuYXJndW1lbnRzLnRleHQgPSBUY2xfR2V0U3RyaW5nKG9wdGlvbnMudGV4dE9iamVjdCk7CisgICAgaWYgKCFvcHRpb25zLmFyZ3VtZW50cy50ZXh0KSByZXR1cm4gVENMX0VSUk9SOworICB9CisKKyAgLy8gVENMIHVzZXMgQzAsODAgYXMgdGhlIFVURi04IHJlcHJlc2VudGF0aW9uIGZvciBOVUwuCisgIC8vIFRoaXMgY2F1c2VzIHByb2JsZW1zIGZvciBCcmxBUEkuCisgIHsKKyAgICBjb25zdCBjaGFyICp0ZXh0ID0gb3B0aW9ucy5hcmd1bWVudHMudGV4dDsKKyAgICBzaXplX3QgbGVuZ3RoID0gdGV4dD8gc3RybGVuKHRleHQpOiAwOworICAgIGNoYXIgYnVmZmVyW2xlbmd0aD8gbGVuZ3RoOiAxXTsKKworICAgIGlmICh0ZXh0KSB7CisgICAgICBjb25zdCBjaGFyICpmcm9tID0gdGV4dDsKKyAgICAgIGNoYXIgKnRvID0gYnVmZmVyOworCisgICAgICB3aGlsZSAoMSkgeworICAgICAgICBjb25zdCBjaGFyICpudWwgPSBzdHJzdHIoZnJvbSwgIlx4QzBceDgwIik7CisKKyAgICAgICAgaWYgKCFudWwpIHsKKyAgICAgICAgICBpZiAodG8gIT0gYnVmZmVyKSB7CisgICAgICAgICAgICBzdHJjcHkodG8sIGZyb20pOworICAgICAgICAgICAgb3B0aW9ucy5hcmd1bWVudHMudGV4dCA9IGJ1ZmZlcjsKKyAgICAgICAgICB9CisKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIHNpemVfdCBjb3VudCA9IG51bCAtIGZyb207CisgICAgICAgIG1lbWNweSh0bywgZnJvbSwgY291bnQpOworICAgICAgICB0byArPSBjb3VudDsKKyAgICAgICAgKnRvKysgPSAwOworICAgICAgICBmcm9tICs9IGNvdW50ICsgMjsKKyAgICAgICAgbGVuZ3RoIC09IDE7CisgICAgICB9CisgICAgfQorCisgICAgb3B0aW9ucy5hcmd1bWVudHMudGV4dFNpemUgPSBsZW5ndGg7CisgICAgVEVTVF9CUkxBUElfT0soYnJsYXBpX193cml0ZShzZXNzaW9uLT5oYW5kbGUsICZvcHRpb25zLmFyZ3VtZW50cykpOworICAgIHJldHVybiBUQ0xfT0s7CisgIH0KK30KKworRlVOQ1RJT05fSEFORExFUihzZXNzaW9uLCB3cml0ZURvdHMpIHsKKyAgQnJsYXBpU2Vzc2lvbiAqc2Vzc2lvbiA9IGRhdGE7CisgIFRFU1RfRlVOQ1RJT05fQVJHVU1FTlRTKDEsIDAsICI8ZG90cz4iKTsKKworICB1bnNpZ25lZCBpbnQgc2l6ZTsKKyAgVEVTVF9UQ0xfT0soZ2V0Q2VsbENvdW50KGludGVycCwgc2Vzc2lvbiwgJnNpemUpKTsKKworICB1bnNpZ25lZCBjaGFyIGJ1ZmZlcltzaXplXTsKKyAgaW50IGNvdW50OworICBjb25zdCB1bnNpZ25lZCBjaGFyICpjZWxscyA9IFRjbF9HZXRCeXRlQXJyYXlGcm9tT2JqKG9ianZbMl0sICZjb3VudCk7CisKKyAgaWYgKGNvdW50IDwgc2l6ZSkgeworICAgIG1lbWNweShidWZmZXIsIGNlbGxzLCBjb3VudCk7CisgICAgbWVtc2V0KCZidWZmZXJbY291bnRdLCAwLCBzaXplLWNvdW50KTsKKyAgICBjZWxscyA9IGJ1ZmZlcjsKKyAgfQorCisgIFRFU1RfQlJMQVBJX09LKGJybGFwaV9fd3JpdGVEb3RzKHNlc3Npb24tPmhhbmRsZSwgY2VsbHMpKTsKKyAgcmV0dXJuIFRDTF9PSzsKK30KKworc3RhdGljIGludAorY2hhbmdlS2V5cyAoCisgIFRjbF9JbnRlcnAgKmludGVycCwgVGNsX09iaiAqY29uc3Qgb2JqdltdLCBpbnQgb2JqYywgQnJsYXBpU2Vzc2lvbiAqc2Vzc2lvbiwKKyAgaW50IEJSTEFQSV9TVERDQUxMICgqY2hhbmdlKSAoYnJsYXBpX2hhbmRsZV90ICpoYW5kbGUsIGJybGFwaV9yYW5nZVR5cGVfdCB0eXBlLCBjb25zdCBicmxhcGlfa2V5Q29kZV90IGtleXNbXSwgdW5zaWduZWQgaW50IGNvdW50KQorKSB7CisgIFRFU1RfRlVOQ1RJT05fQVJHVU1FTlRTKDEsIDEsICI8cmFuZ2VUeXBlPiBbPGtleUNvZGVMaXN0Pl0iKTsKKworICBicmxhcGlfcmFuZ2VUeXBlX3QgcmFuZ2VUeXBlOworICB7CisgICAgc3RhdGljIGNvbnN0IGNoYXIgKnJhbmdlTmFtZXNbXSA9IHsKKyAgICAgICJhbGwiLAorICAgICAgImNvZGUiLAorICAgICAgImNvbW1hbmQiLAorICAgICAgImtleSIsCisgICAgICAidHlwZSIsCisgICAgICBOVUxMCisgICAgfTsKKworICAgIHN0YXRpYyBjb25zdCBicmxhcGlfcmFuZ2VUeXBlX3QgcmFuZ2VUeXBlc1tdID0geworICAgICAgYnJsYXBpX3JhbmdlVHlwZV9hbGwsCisgICAgICBicmxhcGlfcmFuZ2VUeXBlX2NvZGUsCisgICAgICBicmxhcGlfcmFuZ2VUeXBlX2NvbW1hbmQsCisgICAgICBicmxhcGlfcmFuZ2VUeXBlX2tleSwKKyAgICAgIGJybGFwaV9yYW5nZVR5cGVfdHlwZQorICAgIH07CisKKyAgICBpbnQgcmFuZ2VJbmRleDsKKyAgICBURVNUX1RDTF9PSyhUY2xfR2V0SW5kZXhGcm9tT2JqKGludGVycCwgb2JqdlsyXSwgcmFuZ2VOYW1lcywgInJhbmdlIHR5cGUiLCAwLCAmcmFuZ2VJbmRleCkpOworICAgIHJhbmdlVHlwZSA9IHJhbmdlVHlwZXNbcmFuZ2VJbmRleF07CisgIH0KKworICBUY2xfT2JqICpjb2RlTGlzdCA9IChvYmpjIDwgNCk/IE5VTEw6IG9ianZbM107CisKKyAgaWYgKHJhbmdlVHlwZSAhPSBicmxhcGlfcmFuZ2VUeXBlX2FsbCkgeworICAgIGlmICghY29kZUxpc3QpIHsKKyAgICAgIHNldFN0cmluZ1Jlc3VsdChpbnRlcnAsICJubyBrZXkgY29kZSBsaXN0IiwgLTEpOworICAgICAgcmV0dXJuIFRDTF9FUlJPUjsKKyAgICB9CisKKyAgICBUY2xfT2JqICoqY29kZUVsZW1lbnRzOworICAgIGludCBjb2RlQ291bnQ7CisgICAgVEVTVF9UQ0xfT0soVGNsX0xpc3RPYmpHZXRFbGVtZW50cyhpbnRlcnAsIGNvZGVMaXN0LCAmY29kZUNvdW50LCAmY29kZUVsZW1lbnRzKSk7CisKKyAgICBpZiAoY29kZUNvdW50KSB7CisgICAgICBicmxhcGlfa2V5Q29kZV90IGNvZGVzW2NvZGVDb3VudF07CisKKyAgICAgIGZvciAoaW50IGNvZGVJbmRleD0wOyBjb2RlSW5kZXg8Y29kZUNvdW50OyBjb2RlSW5kZXgrPTEpIHsKKyAgICAgICAgVGNsX1dpZGVJbnQgY29kZTsKKyAgICAgICAgVEVTVF9UQ0xfT0soVGNsX0dldFdpZGVJbnRGcm9tT2JqKGludGVycCwgY29kZUVsZW1lbnRzW2NvZGVJbmRleF0sICZjb2RlKSk7CisgICAgICAgIGNvZGVzW2NvZGVJbmRleF0gPSBjb2RlOworICAgICAgfQorCisgICAgICBURVNUX0JSTEFQSV9PSyhjaGFuZ2Uoc2Vzc2lvbi0+aGFuZGxlLCByYW5nZVR5cGUsIGNvZGVzLCBjb2RlQ291bnQpKTsKKyAgICAgIHJldHVybiBUQ0xfT0s7CisgICAgfQorICB9IGVsc2UgaWYgKGNvZGVMaXN0KSB7CisgICAgc2V0U3RyaW5nUmVzdWx0KGludGVycCwgInVuZXhwZWN0ZWQga2V5IGNvZGUgbGlzdCIsIC0xKTsKKyAgICByZXR1cm4gVENMX0VSUk9SOworICB9CisKKyAgVEVTVF9CUkxBUElfT0soY2hhbmdlKHNlc3Npb24tPmhhbmRsZSwgcmFuZ2VUeXBlLCBOVUxMLCAwKSk7CisgIHJldHVybiBUQ0xfT0s7Cit9CisKK0ZVTkNUSU9OX0hBTkRMRVIoc2Vzc2lvbiwgYWNjZXB0S2V5cykgeworICBCcmxhcGlTZXNzaW9uICpzZXNzaW9uID0gZGF0YTsKKyAgcmV0dXJuIGNoYW5nZUtleXMoaW50ZXJwLCBvYmp2LCBvYmpjLCBzZXNzaW9uLCBicmxhcGlfX2FjY2VwdEtleXMpOworfQorCitGVU5DVElPTl9IQU5ETEVSKHNlc3Npb24sIGlnbm9yZUtleXMpIHsKKyAgQnJsYXBpU2Vzc2lvbiAqc2Vzc2lvbiA9IGRhdGE7CisgIHJldHVybiBjaGFuZ2VLZXlzKGludGVycCwgb2Jqdiwgb2JqYywgc2Vzc2lvbiwgYnJsYXBpX19pZ25vcmVLZXlzKTsKK30KKworc3RhdGljIGludAorY2hhbmdlS2V5UmFuZ2VzICgKKyAgVGNsX0ludGVycCAqaW50ZXJwLCBUY2xfT2JqICpjb25zdCBvYmp2W10sIGludCBvYmpjLCBCcmxhcGlTZXNzaW9uICpzZXNzaW9uLAorICBpbnQgQlJMQVBJX1NURENBTEwgKCpjaGFuZ2UpIChicmxhcGlfaGFuZGxlX3QgKmhhbmRsZSwgY29uc3QgYnJsYXBpX3JhbmdlX3QgcmFuZ2VzW10sIHVuc2lnbmVkIGludCBjb3VudCkKKykgeworICBURVNUX0ZVTkNUSU9OX0FSR1VNRU5UUygxLCAwLCAiPGtleVJhbmdlTGlzdD4iKTsKKworICBUY2xfT2JqICoqcmFuZ2VFbGVtZW50czsKKyAgaW50IHJhbmdlQ291bnQ7CisgIFRFU1RfVENMX09LKFRjbF9MaXN0T2JqR2V0RWxlbWVudHMoaW50ZXJwLCBvYmp2WzJdLCAmcmFuZ2VDb3VudCwgJnJhbmdlRWxlbWVudHMpKTsKKworICBpZiAocmFuZ2VDb3VudCkgeworICAgIGJybGFwaV9yYW5nZV90IHJhbmdlc1tyYW5nZUNvdW50XTsKKworICAgIGZvciAoaW50IHJhbmdlSW5kZXg9MDsgcmFuZ2VJbmRleDxyYW5nZUNvdW50OyByYW5nZUluZGV4Kz0xKSB7CisgICAgICBicmxhcGlfcmFuZ2VfdCAqcmFuZ2UgPSAmcmFuZ2VzW3JhbmdlSW5kZXhdOworICAgICAgVGNsX09iaiAqKmNvZGVFbGVtZW50czsKKyAgICAgIGludCBjb2RlQ291bnQ7CisgICAgICBURVNUX1RDTF9PSyhUY2xfTGlzdE9iakdldEVsZW1lbnRzKGludGVycCwgcmFuZ2VFbGVtZW50c1tyYW5nZUluZGV4XSwgJmNvZGVDb3VudCwgJmNvZGVFbGVtZW50cykpOworCisgICAgICBpZiAoY29kZUNvdW50ICE9IDIpIHsKKyAgICAgICAgc2V0U3RyaW5nUmVzdWx0KGludGVycCwgImtleSByYW5nZSBlbGVtZW50IGlzIG5vdCBhIHR3by1lbGVtZW50IGxpc3QiLCAtMSk7CisgICAgICAgIHJldHVybiBUQ0xfRVJST1I7CisgICAgICB9CisKKyAgICAgIHsKKyAgICAgICAgVGNsX1dpZGVJbnQgY29kZXNbY29kZUNvdW50XTsKKworICAgICAgICBmb3IgKGludCBjb2RlSW5kZXg9MDsgY29kZUluZGV4PGNvZGVDb3VudDsgY29kZUluZGV4Kz0xKSB7CisgICAgICAgICAgVEVTVF9UQ0xfT0soVGNsX0dldFdpZGVJbnRGcm9tT2JqKGludGVycCwgY29kZUVsZW1lbnRzW2NvZGVJbmRleF0sICZjb2Rlc1tjb2RlSW5kZXhdKSk7CisgICAgICAgIH0KKworICAgICAgICByYW5nZS0+Zmlyc3QgPSBjb2Rlc1swXTsKKyAgICAgICAgcmFuZ2UtPmxhc3QgPSBjb2Rlc1sxXTsKKyAgICAgIH0KKyAgICB9CisKKyAgICBURVNUX0JSTEFQSV9PSyhjaGFuZ2Uoc2Vzc2lvbi0+aGFuZGxlLCByYW5nZXMsIHJhbmdlQ291bnQpKTsKKyAgICByZXR1cm4gVENMX09LOworICB9CisKKyAgVEVTVF9CUkxBUElfT0soY2hhbmdlKHNlc3Npb24tPmhhbmRsZSwgTlVMTCwgMCkpOworICByZXR1cm4gVENMX09LOworfQorCitGVU5DVElPTl9IQU5ETEVSKHNlc3Npb24sIGFjY2VwdEtleVJhbmdlcykgeworICBCcmxhcGlTZXNzaW9uICpzZXNzaW9uID0gZGF0YTsKKyAgcmV0dXJuIGNoYW5nZUtleVJhbmdlcyhpbnRlcnAsIG9ianYsIG9iamMsIHNlc3Npb24sIGJybGFwaV9fYWNjZXB0S2V5UmFuZ2VzKTsKK30KKworRlVOQ1RJT05fSEFORExFUihzZXNzaW9uLCBpZ25vcmVLZXlSYW5nZXMpIHsKKyAgQnJsYXBpU2Vzc2lvbiAqc2Vzc2lvbiA9IGRhdGE7CisgIHJldHVybiBjaGFuZ2VLZXlSYW5nZXMoaW50ZXJwLCBvYmp2LCBvYmpjLCBzZXNzaW9uLCBicmxhcGlfX2lnbm9yZUtleVJhbmdlcyk7Cit9CisKK3N0YXRpYyB2b2lkCitlbmRTZXNzaW9uIChDbGllbnREYXRhIGRhdGEpIHsKKyAgQnJsYXBpU2Vzc2lvbiAqc2Vzc2lvbiA9IGRhdGE7CisgIGJybGFwaV9fY2xvc2VDb25uZWN0aW9uKHNlc3Npb24tPmhhbmRsZSk7CisgIGRlYWxsb2NhdGVNZW1vcnkoc2Vzc2lvbi0+aGFuZGxlKTsKKyAgZGVhbGxvY2F0ZU1lbW9yeShzZXNzaW9uKTsKK30KKworc3RhdGljIHZvaWQKK2hhbmRsZUJybGFwaUV4Y2VwdGlvbiAoCisgIGJybGFwaV9oYW5kbGVfdCAqaGFuZGxlLAorICBpbnQgZXJyb3IsIGJybGFwaV9wYWNrZXRUeXBlX3QgdHlwZSwKKyAgY29uc3Qgdm9pZCAqcGFja2V0LCBzaXplX3Qgc2l6ZQorKSB7CisgIEJybGFwaVNlc3Npb24gKnNlc3Npb24gPSBicmxhcGlfX2dldENsaWVudERhdGEoaGFuZGxlKTsKKyAgVGNsX0ludGVycCAqaW50ZXJwID0gc2Vzc2lvbi0+dGNsSW50ZXJwcmV0ZXI7CisgIGNoYXIgbWVzc2FnZVswWDEwMF07CisKKyAgYnJsYXBpX19zdHJleGNlcHRpb24oCisgICAgaGFuZGxlLCBtZXNzYWdlLCBzaXplb2YobWVzc2FnZSksIGVycm9yLCB0eXBlLCBwYWNrZXQsIHNpemUKKyAgKTsKKworICBjb25zdCBjaGFyICpuYW1lID0gVGNsX0dldENvbW1hbmROYW1lKGludGVycCwgc2Vzc2lvbi0+dGNsQ29tbWFuZCk7CisgIGZwcmludGYoc3RkZXJyLCAiQnJsQVBJIHNlc3Npb24gZmFpbHVyZTogJXM6ICVzXG4iLCBuYW1lLCBtZXNzYWdlKTsKKyAgZXhpdCgxKTsKK30KKworc3RhdGljIGludAorYnJsYXBpU2Vzc2lvbkNvbW1hbmQgKENsaWVudERhdGEgZGF0YSwgVGNsX0ludGVycCAqaW50ZXJwLCBpbnQgb2JqYywgVGNsX09iaiAqY29uc3Qgb2JqdltdKSB7CisgIEJFR0lOX0ZVTkNUSU9OUworICAgIEZVTkNUSU9OKHNlc3Npb24sIGFjY2VwdEtleVJhbmdlcyksCisgICAgRlVOQ1RJT04oc2Vzc2lvbiwgYWNjZXB0S2V5cyksCisgICAgRlVOQ1RJT04oc2Vzc2lvbiwgY2xvc2VDb25uZWN0aW9uKSwKKyAgICBGVU5DVElPTihzZXNzaW9uLCBlbnRlclJhd01vZGUpLAorICAgIEZVTkNUSU9OKHNlc3Npb24sIGVudGVyVHR5TW9kZSksCisgICAgRlVOQ1RJT04oc2Vzc2lvbiwgZW50ZXJUdHlNb2RlV2l0aFBhdGgpLAorICAgIEZVTkNUSU9OKHNlc3Npb24sIGdldEF1dGgpLAorICAgIEZVTkNUSU9OKHNlc3Npb24sIGdldERpc3BsYXlTaXplKSwKKyAgICBGVU5DVElPTihzZXNzaW9uLCBnZXREcml2ZXJOYW1lKSwKKyAgICBGVU5DVElPTihzZXNzaW9uLCBnZXRGaWxlRGVzY3JpcHRvciksCisgICAgRlVOQ1RJT04oc2Vzc2lvbiwgZ2V0SG9zdCksCisgICAgRlVOQ1RJT04oc2Vzc2lvbiwgZ2V0TW9kZWxJZGVudGlmaWVyKSwKKyAgICBGVU5DVElPTihzZXNzaW9uLCBpZ25vcmVLZXlSYW5nZXMpLAorICAgIEZVTkNUSU9OKHNlc3Npb24sIGlnbm9yZUtleXMpLAorICAgIEZVTkNUSU9OKHNlc3Npb24sIGxlYXZlUmF3TW9kZSksCisgICAgRlVOQ1RJT04oc2Vzc2lvbiwgbGVhdmVUdHlNb2RlKSwKKyAgICBGVU5DVElPTihzZXNzaW9uLCBwYXJhbWV0ZXIpLAorICAgIEZVTkNUSU9OKHNlc3Npb24sIHJlYWRLZXkpLAorICAgIEZVTkNUSU9OKHNlc3Npb24sIHJlYWRLZXlXaXRoVGltZW91dCksCisgICAgRlVOQ1RJT04oc2Vzc2lvbiwgcmVjdlJhdyksCisgICAgRlVOQ1RJT04oc2Vzc2lvbiwgcmVzdW1lRHJpdmVyKSwKKyAgICBGVU5DVElPTihzZXNzaW9uLCBzZW5kUmF3KSwKKyAgICBGVU5DVElPTihzZXNzaW9uLCBzZXRGb2N1cyksCisgICAgRlVOQ1RJT04oc2Vzc2lvbiwgc3VzcGVuZERyaXZlciksCisgICAgRlVOQ1RJT04oc2Vzc2lvbiwgd3JpdGUpLAorICAgIEZVTkNUSU9OKHNlc3Npb24sIHdyaXRlRG90cyksCisgIEVORF9GVU5DVElPTlMKKworICByZXR1cm4gaW52b2tlRnVuY3Rpb24oaW50ZXJwLCBvYmp2LCBvYmpjLCBmdW5jdGlvbnMsIGRhdGEpOworfQorCitGVU5DVElPTl9IQU5ETEVSKGdlbmVyYWwsIGRlc2NyaWJlS2V5Q29kZSkgeworICBURVNUX0ZVTkNUSU9OX0FSR1VNRU5UUygyLCAwLCAiPGtleUNvZGU+IDxhcnJheU5hbWU+Iik7CisKKyAgVGNsX1dpZGVJbnQga2V5Q29kZTsKKyAgVEVTVF9UQ0xfT0soVGNsX0dldFdpZGVJbnRGcm9tT2JqKGludGVycCwgb2JqdlsyXSwgJmtleUNvZGUpKTsKKworICBjb25zdCBjaGFyICphcnJheSA9IFRjbF9HZXRTdHJpbmcob2JqdlszXSk7CisgIGlmICghYXJyYXkpIHJldHVybiBUQ0xfRVJST1I7CisKKyAgYnJsYXBpX2Rlc2NyaWJlZEtleUNvZGVfdCBka2M7CisgIFRFU1RfQlJMQVBJX09LKGJybGFwaV9kZXNjcmliZUtleUNvZGUoa2V5Q29kZSwgJmRrYykpOworCisgIFNFVF9BUlJBWV9FTEVNRU5UKCJ0eXBlIiwgVGNsX05ld1N0cmluZ09iaihka2MudHlwZSwgLTEpKTsKKyAgU0VUX0FSUkFZX0VMRU1FTlQoImNvbW1hbmQiLCBUY2xfTmV3U3RyaW5nT2JqKGRrYy5jb21tYW5kLCAtMSkpOworICBTRVRfQVJSQVlfRUxFTUVOVCgiYXJndW1lbnQiLCBUY2xfTmV3SW50T2JqKGRrYy5hcmd1bWVudCkpOworCisgIHsKKyAgICBUY2xfT2JqICpmbGFncyA9IFRjbF9OZXdMaXN0T2JqKDAsIE5VTEwpOworICAgIFNFVF9BUlJBWV9FTEVNRU5UKCJmbGFncyIsIGZsYWdzKTsKKworICAgIGZvciAoaW50IGluZGV4PTA7IGluZGV4PGRrYy5mbGFnczsgaW5kZXgrPTEpIHsKKyAgICAgIFRjbF9PYmogKmZsYWcgPSBUY2xfTmV3U3RyaW5nT2JqKGRrYy5mbGFnW2luZGV4XSwgLTEpOworICAgICAgaWYgKCFmbGFnKSByZXR1cm4gVENMX0VSUk9SOworICAgICAgVEVTVF9UQ0xfT0soVGNsX0xpc3RPYmpBcHBlbmRFbGVtZW50KGludGVycCwgZmxhZ3MsIGZsYWcpKTsKKyAgICB9CisgIH0KKworICByZXR1cm4gVENMX09LOworfQorCitGVU5DVElPTl9IQU5ETEVSKGdlbmVyYWwsIGV4cGFuZEtleUNvZGUpIHsKKyAgVEVTVF9GVU5DVElPTl9BUkdVTUVOVFMoMiwgMCwgIjxrZXlDb2RlPiA8YXJyYXlOYW1lPiIpOworCisgIFRjbF9XaWRlSW50IGtleUNvZGU7CisgIFRFU1RfVENMX09LKFRjbF9HZXRXaWRlSW50RnJvbU9iaihpbnRlcnAsIG9ianZbMl0sICZrZXlDb2RlKSk7CisKKyAgY29uc3QgY2hhciAqYXJyYXkgPSBUY2xfR2V0U3RyaW5nKG9ianZbM10pOworICBpZiAoIWFycmF5KSByZXR1cm4gVENMX0VSUk9SOworCisgIGJybGFwaV9leHBhbmRlZEtleUNvZGVfdCBla2M7CisgIFRFU1RfQlJMQVBJX09LKGJybGFwaV9leHBhbmRLZXlDb2RlKGtleUNvZGUsICZla2MpKTsKKworICBTRVRfQVJSQVlfRUxFTUVOVCgidHlwZSIsIFRjbF9OZXdJbnRPYmooZWtjLnR5cGUpKTsKKyAgU0VUX0FSUkFZX0VMRU1FTlQoImNvbW1hbmQiLCBUY2xfTmV3SW50T2JqKGVrYy5jb21tYW5kKSk7CisgIFNFVF9BUlJBWV9FTEVNRU5UKCJhcmd1bWVudCIsIFRjbF9OZXdJbnRPYmooZWtjLmFyZ3VtZW50KSk7CisgIFNFVF9BUlJBWV9FTEVNRU5UKCJmbGFncyIsIFRjbF9OZXdJbnRPYmooZWtjLmZsYWdzKSk7CisgIHJldHVybiBUQ0xfT0s7Cit9CisKK0ZVTkNUSU9OX0hBTkRMRVIoZ2VuZXJhbCwgZ2V0SGFuZGxlU2l6ZSkgeworICBURVNUX0ZVTkNUSU9OX05PX0FSR1VNRU5UUygpOworICBzZXRJbnRSZXN1bHQoaW50ZXJwLCBicmxhcGlfZ2V0SGFuZGxlU2l6ZSgpKTsKKyAgcmV0dXJuIFRDTF9PSzsKK30KKworRlVOQ1RJT05fSEFORExFUihnZW5lcmFsLCBnZXRWZXJzaW9uTnVtYmVycykgeworICBURVNUX0ZVTkNUSU9OX05PX0FSR1VNRU5UUygpOworCisgIGludCBtYWpvck51bWJlciwgbWlub3JOdW1iZXIsIHJldmlzaW9uTnVtYmVyOworICBicmxhcGlfZ2V0TGlicmFyeVZlcnNpb24oJm1ham9yTnVtYmVyLCAmbWlub3JOdW1iZXIsICZyZXZpc2lvbk51bWJlcik7CisKKyAgVGNsX09iaiAqbWFqb3JPYmplY3QgPSBUY2xfTmV3SW50T2JqKG1ham9yTnVtYmVyKTsKKyAgaWYgKCFtYWpvck9iamVjdCkgcmV0dXJuIFRDTF9FUlJPUjsKKworICBUY2xfT2JqICptaW5vck9iamVjdCA9IFRjbF9OZXdJbnRPYmoobWlub3JOdW1iZXIpOworICBpZiAoIW1pbm9yT2JqZWN0KSByZXR1cm4gVENMX0VSUk9SOworCisgIFRjbF9PYmogKnJldmlzaW9uT2JqZWN0ID0gVGNsX05ld0ludE9iaihyZXZpc2lvbk51bWJlcik7CisgIGlmICghcmV2aXNpb25PYmplY3QpIHJldHVybiBUQ0xfRVJST1I7CisKKyAgVGNsX09iaiAqY29uc3QgZWxlbWVudHNbXSA9IHttYWpvck9iamVjdCwgbWlub3JPYmplY3QsIHJldmlzaW9uT2JqZWN0fTsKKyAgVGNsX09iaiAqbGlzdCA9IFRjbF9OZXdMaXN0T2JqKDMsIGVsZW1lbnRzKTsKKyAgaWYgKCFsaXN0KSByZXR1cm4gVENMX0VSUk9SOworCisgIFRjbF9TZXRPYmpSZXN1bHQoaW50ZXJwLCBsaXN0KTsKKyAgcmV0dXJuIFRDTF9PSzsKK30KKworRlVOQ1RJT05fSEFORExFUihnZW5lcmFsLCBnZXRWZXJzaW9uU3RyaW5nKSB7CisgIFRFU1RfRlVOQ1RJT05fTk9fQVJHVU1FTlRTKCk7CisKKyAgc2V0U3RyaW5nUmVzdWx0KGludGVycCwgQlJMQVBJX1JFTEVBU0UsIC0xKTsKKyAgcmV0dXJuIFRDTF9PSzsKK30KKworRlVOQ1RJT05fSEFORExFUihnZW5lcmFsLCBtYWtlRG90cykgeworICBURVNUX0ZVTkNUSU9OX0FSR1VNRU5UUygxLCAwLCAiPGRvdE51bWJlcnNMaXN0PiIpOworCisgIFRjbF9PYmogKiplbGVtZW50czsKKyAgaW50IGVsZW1lbnRDb3VudDsKKyAgVEVTVF9UQ0xfT0soVGNsX0xpc3RPYmpHZXRFbGVtZW50cyhpbnRlcnAsIG9ianZbMl0sICZlbGVtZW50Q291bnQsICZlbGVtZW50cykpOworCisgIGlmIChlbGVtZW50Q291bnQpIHsKKyAgICBCcmxEb3RzIGNlbGxzW2VsZW1lbnRDb3VudF07CisKKyAgICBmb3IgKGludCBlbGVtZW50SW5kZXg9MDsgZWxlbWVudEluZGV4PGVsZW1lbnRDb3VudDsgZWxlbWVudEluZGV4Kz0xKSB7CisgICAgICBUY2xfT2JqICplbGVtZW50ID0gZWxlbWVudHNbZWxlbWVudEluZGV4XTsKKyAgICAgIEJybERvdHMgKmNlbGwgPSAmY2VsbHNbZWxlbWVudEluZGV4XTsKKyAgICAgICpjZWxsID0gMDsKKworICAgICAgaW50IG51bWJlckNvdW50OworICAgICAgY29uc3QgY2hhciAqbnVtYmVycyA9IFRjbF9HZXRTdHJpbmdGcm9tT2JqKGVsZW1lbnQsICZudW1iZXJDb3VudCk7CisgICAgICBpZiAoIW51bWJlcnMpIHJldHVybiBUQ0xfRVJST1I7CisKKyAgICAgIGlmICgobnVtYmVyQ291bnQgIT0gMSkgfHwgKG51bWJlcnNbMF0gIT0gJzAnKSkgeworICAgICAgICBmb3IgKGludCBudW1iZXJJbmRleD0wOyBudW1iZXJJbmRleDxudW1iZXJDb3VudDsgbnVtYmVySW5kZXgrPTEpIHsKKyAgICAgICAgICBjaGFyIG51bWJlciA9IG51bWJlcnNbbnVtYmVySW5kZXhdOworICAgICAgICAgIEJybERvdHMgZG90ID0gYnJsTnVtYmVyVG9Eb3QobnVtYmVyKTsKKworICAgICAgICAgIGlmICghZG90KSB7CisgICAgICAgICAgICBzZXRTdHJpbmdSZXN1bHQoaW50ZXJwLCAiaW52YWxpZCBkb3QgbnVtYmVyIiwgLTEpOworICAgICAgICAgICAgcmV0dXJuIFRDTF9FUlJPUjsKKyAgICAgICAgICB9CisKKyAgICAgICAgICBpZiAoKmNlbGwgJiBkb3QpIHsKKyAgICAgICAgICAgIHNldFN0cmluZ1Jlc3VsdChpbnRlcnAsICJkdXBsaWNhdGUgZG90IG51bWJlciIsIC0xKTsKKyAgICAgICAgICAgIHJldHVybiBUQ0xfRVJST1I7CisgICAgICAgICAgfQorCisgICAgICAgICAgKmNlbGwgfD0gZG90OworICAgICAgICB9CisgICAgICB9CisgICAgfQorCisgICAgc2V0Qnl0ZUFycmF5UmVzdWx0KGludGVycCwgY2VsbHMsIGVsZW1lbnRDb3VudCk7CisgIH0gZWxzZSB7CisgICAgc2V0Qnl0ZUFycmF5UmVzdWx0KGludGVycCwgTlVMTCwgZWxlbWVudENvdW50KTsKKyAgfQorCisgIHJldHVybiBUQ0xfT0s7Cit9CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgYnJsYXBpX2Nvbm5lY3Rpb25TZXR0aW5nc190IHNldHRpbmdzOworfSBPcGVuQ29ubmVjdGlvbk9wdGlvbnM7CisKK09QVElPTl9IQU5ETEVSKGdlbmVyYWwsIG9wZW5Db25uZWN0aW9uLCBhdXRoKSB7CisgIE9wZW5Db25uZWN0aW9uT3B0aW9ucyAqb3B0aW9ucyA9IGRhdGE7CisgIHJldHVybiAob3B0aW9ucy0+c2V0dGluZ3MuYXV0aCA9IFRjbF9HZXRTdHJpbmcob2JqdlsxXSkpPyBUQ0xfT0s6IFRDTF9FUlJPUjsKK30KKworT1BUSU9OX0hBTkRMRVIoZ2VuZXJhbCwgb3BlbkNvbm5lY3Rpb24sIGhvc3QpIHsKKyAgT3BlbkNvbm5lY3Rpb25PcHRpb25zICpvcHRpb25zID0gZGF0YTsKKyAgcmV0dXJuIChvcHRpb25zLT5zZXR0aW5ncy5ob3N0ID0gVGNsX0dldFN0cmluZyhvYmp2WzFdKSk/IFRDTF9PSzogVENMX0VSUk9SOworfQorCitGVU5DVElPTl9IQU5ETEVSKGdlbmVyYWwsIG9wZW5Db25uZWN0aW9uKSB7CisgIE9wZW5Db25uZWN0aW9uT3B0aW9ucyBvcHRpb25zID0geworICAgIC5zZXR0aW5ncyA9IEJSTEFQSV9TRVRUSU5HU19JTklUSUFMSVpFUgorICB9OworCisgIEJFR0lOX09QVElPTlMKKyAgICB7IE9QVElPTihnZW5lcmFsLCBvcGVuQ29ubmVjdGlvbiwgYXV0aCksCisgICAgICBPUEVSQU5EUygxLCAie25vbmUgfCA8c2NoZW1lPiwuLi59IikKKyAgICB9LAorCisgICAgeyBPUFRJT04oZ2VuZXJhbCwgb3BlbkNvbm5lY3Rpb24sIGhvc3QpLAorICAgICAgT1BFUkFORFMoMSwgIls8aG9zdD5dWzo8cG9ydD5dIikKKyAgICB9CisgIEVORF9PUFRJT05TKDIsIDAsIDAsICIiKQorCisgIEJybGFwaVNlc3Npb24gKnNlc3Npb24gPSBhbGxvY2F0ZU1lbW9yeShzaXplb2YoKnNlc3Npb24pKTsKKyAgaWYgKHNlc3Npb24pIHsKKyAgICBtZW1zZXQoc2Vzc2lvbiwgMCwgc2l6ZW9mKCpzZXNzaW9uKSk7CisgICAgc2Vzc2lvbi0+dGNsSW50ZXJwcmV0ZXIgPSBpbnRlcnA7CisKKyAgICBpZiAoKHNlc3Npb24tPmhhbmRsZSA9IGFsbG9jYXRlTWVtb3J5KGJybGFwaV9nZXRIYW5kbGVTaXplKCkpKSkgeworICAgICAgaW50IHJlc3VsdCA9IGJybGFwaV9fb3BlbkNvbm5lY3Rpb24oc2Vzc2lvbi0+aGFuZGxlLCAmb3B0aW9ucy5zZXR0aW5ncywgJnNlc3Npb24tPnNldHRpbmdzKTsKKworICAgICAgaWYgKHJlc3VsdCAhPSAtMSkgeworICAgICAgICBzZXNzaW9uLT5maWxlRGVzY3JpcHRvciA9IHJlc3VsdDsKKworICAgICAgICBicmxhcGlfX3NldENsaWVudERhdGEoc2Vzc2lvbi0+aGFuZGxlLCBzZXNzaW9uKTsKKyAgICAgICAgYnJsYXBpX19zZXRFeGNlcHRpb25IYW5kbGVyKHNlc3Npb24tPmhhbmRsZSwgaGFuZGxlQnJsYXBpRXhjZXB0aW9uKTsKKworICAgICAgICBjaGFyIG5hbWVbMFgyMF07CisgICAgICAgIHsKKyAgICAgICAgICBzdGF0aWMgdW5zaWduZWQgaW50IHN1ZmZpeCA9IDA7CisgICAgICAgICAgc25wcmludGYobmFtZSwgc2l6ZW9mKG5hbWUpLCAiYnJsYXBpJXUiLCBzdWZmaXgrKyk7CisgICAgICAgICAgc2Vzc2lvbi0+dGNsQ29tbWFuZCA9IFRjbF9DcmVhdGVPYmpDb21tYW5kKGludGVycCwgbmFtZSwgYnJsYXBpU2Vzc2lvbkNvbW1hbmQsIHNlc3Npb24sIGVuZFNlc3Npb24pOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHNlc3Npb24tPnRjbENvbW1hbmQpIHsKKyAgICAgICAgICBzZXRTdHJpbmdSZXN1bHQoaW50ZXJwLCBuYW1lLCAtMSk7CisgICAgICAgICAgcmV0dXJuIFRDTF9PSzsKKyAgICAgICAgfQorICAgICAgfSBlbHNlIHsKKyAgICAgICAgc2V0QnJsYXBpRXJyb3IoaW50ZXJwKTsKKyAgICAgIH0KKworICAgICAgZGVhbGxvY2F0ZU1lbW9yeShzZXNzaW9uLT5oYW5kbGUpOworICAgIH0KKworICAgIGRlYWxsb2NhdGVNZW1vcnkoc2Vzc2lvbik7CisgIH0KKworICByZXR1cm4gVENMX0VSUk9SOworfQorCitzdGF0aWMgaW50CiticmxhcGlHZW5lcmFsQ29tbWFuZCAoQ2xpZW50RGF0YSBkYXRhLCBUY2xfSW50ZXJwICppbnRlcnAsIGludCBvYmpjLCBUY2xfT2JqICpjb25zdCBvYmp2W10pIHsKKyAgQkVHSU5fRlVOQ1RJT05TCisgICAgRlVOQ1RJT04oZ2VuZXJhbCwgZGVzY3JpYmVLZXlDb2RlKSwKKyAgICBGVU5DVElPTihnZW5lcmFsLCBleHBhbmRLZXlDb2RlKSwKKyAgICBGVU5DVElPTihnZW5lcmFsLCBnZXRIYW5kbGVTaXplKSwKKyAgICBGVU5DVElPTihnZW5lcmFsLCBnZXRWZXJzaW9uTnVtYmVycyksCisgICAgRlVOQ1RJT04oZ2VuZXJhbCwgZ2V0VmVyc2lvblN0cmluZyksCisgICAgRlVOQ1RJT04oZ2VuZXJhbCwgbWFrZURvdHMpLAorICAgIEZVTkNUSU9OKGdlbmVyYWwsIG9wZW5Db25uZWN0aW9uKSwKKyAgRU5EX0ZVTkNUSU9OUworCisgIHJldHVybiBpbnZva2VGdW5jdGlvbihpbnRlcnAsIG9ianYsIG9iamMsIGZ1bmN0aW9ucywgZGF0YSk7Cit9CisKK2ludAorQnJsYXBpX3RjbF9Jbml0IChUY2xfSW50ZXJwICppbnRlcnApIHsKKyAgaW50IHJlc3VsdCA9IFRDTF9FUlJPUjsKKyAgVGNsX0NvbW1hbmQgY29tbWFuZCA9IFRjbF9DcmVhdGVPYmpDb21tYW5kKGludGVycCwgImJybGFwaSIsIGJybGFwaUdlbmVyYWxDb21tYW5kLCBOVUxMLCBOVUxMKTsKKworICBpZiAoY29tbWFuZCkgeworICAgIHJlc3VsdCA9IFRjbF9Qa2dQcm92aWRlKGludGVycCwgIkJybGFwaSIsIEJSTEFQSV9SRUxFQVNFKTsKKyAgICBpZiAocmVzdWx0ICE9IFRDTF9PSykgVGNsX0RlbGV0ZUNvbW1hbmRGcm9tVG9rZW4oaW50ZXJwLCBjb21tYW5kKTsKKyAgfQorCisgIHJldHVybiByZXN1bHQ7Cit9CmRpZmYgLS1naXQgYS9CaW5kaW5ncy9UY2wvYmluZGluZ3MubTQgYi9CaW5kaW5ncy9UY2wvYmluZGluZ3MubTQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzU4ZjBkYgotLS0gL2Rldi9udWxsCisrKyBiL0JpbmRpbmdzL1RjbC9iaW5kaW5ncy5tNApAQCAtMCwwICsxLDgwIEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIGxpYmJybGFwaSAtIEEgbGlicmFyeSBwcm92aWRpbmcgYWNjZXNzIHRvIGJyYWlsbGUgdGVybWluYWxzIGZvciBhcHBsaWNhdGlvbnMuCisjCisjIENvcHlyaWdodCAoQykgMjAwNi0yMDIzIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4KKyMKKyMgbGliYnJsYXBpIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitBQ19ERUZVTihbQlJMVFRZX1RDTF9CSU5ESU5HU10sIFtkbmwKK0FDX1BBVEhfUFJPR1MoW1RDTFNIXSwgW3RjbHNoIHRjbHNoOC41IHRjbHNoOC42IHRjbHNoOC43XSwgW10pCisKK1RDTF9PSz1mYWxzZQorVENMX0NQUEZMQUdTPSIiCitUQ0xfTElCUz0iIgorVENMX0RJUj0iIgorCitpZiB0ZXN0IC1uICIke1RDTFNIfSIKK3RoZW4KKyAgIEFDX01TR19OT1RJQ0UoW1RjbCBzaGVsbDogJHtUQ0xTSH1dKQorICAgQlJMVFRZX1RDTF9RVUVSWShbdGNsX2NvbmZpZ3VyYXRpb25fc2NyaXB0XSwgW2NvbmZpZ10pCisKKyAgIGlmIHRlc3QgLW4gIiR7dGNsX2NvbmZpZ3VyYXRpb25fc2NyaXB0fSIKKyAgIHRoZW4KKyAgICAgIEFDX01TR19OT1RJQ0UoW1RjbCBjb25maWd1cmF0aW9uIHNjcmlwdDogJHt0Y2xfY29uZmlndXJhdGlvbl9zY3JpcHR9XSkKKworICAgICAgaWYgdGVzdCAhIC1yICIke3RjbF9jb25maWd1cmF0aW9uX3NjcmlwdH0iCisgICAgICB0aGVuCisgICAgICAgICBBQ19NU0dfV0FSTihbVGNsIGNvbmZpZ3VyYXRpb24gc2NyaXB0IG5vdCByZWFkYWJsZTogJHt0Y2xfY29uZmlndXJhdGlvbl9zY3JpcHR9XSkKKyAgICAgIGVsaWYgLiAiJHt0Y2xfY29uZmlndXJhdGlvbl9zY3JpcHR9IgorICAgICAgdGhlbgorICAgICAgICAgVENMX09LPXRydWUKKyAgICAgICAgIFRDTF9DUFBGTEFHUz0iJHtUQ0xfSU5DTFVERV9TUEVDfSIKKyAgICAgICAgIFRDTF9MSUJTPSIke1RDTF9MSUJfU1BFQ30iCisgICAgICBmaQorICAgZWxzZQorICAgICAgQUNfTVNHX1dBUk4oW1RjbCBjb25maWd1cmF0aW9uIHNjcmlwdCBub3QgZm91bmRdKQorICAgZmkKK2Vsc2UKKyAgIEFDX01TR19XQVJOKFtUY2wgc2hlbGwgbm90IGZvdW5kXSkKKyAgIFRDTFNIPSJUQ0xfU0hFTExfTk9UX0ZPVU5EX0JZX0NPTkZJR1VSRSIKK2ZpCisKKyR7VENMX09LfSAmJiB7CisgICB0ZXN0IC1uICIke1RDTF9QQUNLQUdFX1BBVEh9IiAmJiB7CisgICAgICBmb3IgZGlyZWN0b3J5IGluICR7VENMX1BBQ0tBR0VfUEFUSH0KKyAgICAgIGRvCisgICAgICAgICB0ZXN0IGBleHByICIke2RpcmVjdG9yeX0iIDogJy4qL2xpYidgIC1lcSAwIHx8IHsKKyAgICAgICAgICAgIFRDTF9ESVI9IiR7ZGlyZWN0b3J5fSIKKyAgICAgICAgICAgIGJyZWFrCisgICAgICAgICB9CisgICAgICBkb25lCisgICB9CisKKyAgIGlmIHRlc3QgLW4gIiR7VENMX0RJUn0iCisgICB0aGVuCisgICAgICBBQ19NU0dfTk9USUNFKFtUY2wgcGFja2FnZXMgZGlyZWN0b3J5OiAke1RDTF9ESVJ9XSkKKyAgIGVsc2UKKyAgICAgIEFDX01TR19XQVJOKFtUY2wgcGFja2FnZXMgZGlyZWN0b3J5IG5vdCBmb3VuZF0pCisgICAgICBUQ0xfRElSPSJUQ0xfUEFDS0FHRVNfRElSRUNUT1JZX05PVF9GT1VORF9CWV9DT05GSUdVUkUiCisgICBmaQorfQorCitBQ19TVUJTVChbVENMX09LXSkKK0FDX1NVQlNUKFtUQ0xfQ1BQRkxBR1NdKQorQUNfU1VCU1QoW1RDTF9MSUJTXSkKK0FDX1NVQlNUKFtUQ0xfRElSXSkKK10pCisKK0FDX0RFRlVOKFtCUkxUVFlfVENMX1FVRVJZXSwgW2RubAorICAgJDE9YCIke1RDTFNIfSIgIiR7c3JjZGlyfS9Ub29scy90Y2xjbWQiICQyYAorXSkKZGlmZiAtLWdpdCBhL0JpbmRpbmdzL1RjbC9icmxhcGkudHh0IGIvQmluZGluZ3MvVGNsL2JybGFwaS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzRjY2QwMwotLS0gL2Rldi9udWxsCisrKyBiL0JpbmRpbmdzL1RjbC9icmxhcGkudHh0CkBAIC0wLDAgKzEsNTggQEAKK2JybGFwaSA8ZnVuY3Rpb24+IFs8YXJnPiAuLi5dCisgICBnZXRWZXJzaW9uU3RyaW5nCisgICBnZXRWZXJzaW9uTnVtYmVycworICAgb3BlbkNvbm5lY3Rpb24gWzxvcHRpb24+IC4uLl0KKyAgICAgIC1ob3N0IFs8aG9zdD5dWzo8cG9ydD5dCisgICAgICAtYXV0aCB7bm9uZSB8IDxzY2hlbWU+LC4uLn0KKyAgICAgICAgIGtleWZpbGU6PGZpbGU+CisgICAgICAgICB1c2VyOjxuYW1lPgorICAgICAgICAgZ3JvdXA6PG5hbWU+CisgICAgICAgICBwb2xraXQKKyAgIGV4cGFuZEtleUNvZGUgPGtleUNvZGU+IDxhcnJheU5hbWU+CisgICBkZXNjcmliZUtleUNvZGUgPGtleUNvZGU+IDxhcnJheU5hbWU+CisgICBtYWtlRG90cyA8ZG90TnVtYmVyc0xpc3Q+CisgICBnZXRIYW5kbGVTaXplCisKK2JybGFwaTxzZXNzaW9uTnVtYmVyPiBmdW5jdGlvbiBbYXJnIC4uLl0KKyAgIGdldEhvc3QKKyAgIGdldEF1dGgKKyAgIGdldEZpbGVEZXNjcmlwdG9yCisgICBnZXREcml2ZXJOYW1lCisgICBnZXRNb2RlbElkZW50aWZpZXIKKyAgIGdldERpc3BsYXlTaXplCisgICBwYXJhbWV0ZXIgWzxvcHRpb24+IC4uLl0gPG5hbWU+IFs8c3VicGFyYW0+XQorICAgICAgLWVjaG8gPGJvb2xlYW4+CisgICAgICAtZ2xvYmFsIDxib29sZWFuPgorICAgICAgLXNldCA8dmFsdWU+CisgICBlbnRlclR0eU1vZGUgWzxvcHRpb24+IC4uLl0KKyAgICAgIC10dHkge2RlZmF1bHQgfCA8bnVtYmVyPn0KKyAgICAgIC1jb21tYW5kcworICAgICAgLWtleXMgPGRyaXZlcj4KKyAgIGVudGVyVHR5TW9kZVdpdGhQYXRoIFs8b3B0aW9uPiAuLi5dCisgICAgICAtcGF0aCA8bGlzdD4KKyAgICAgIC1jb21tYW5kcworICAgICAgLWtleXMgPGRyaXZlcj4KKyAgIGxlYXZlVHR5TW9kZQorICAgc2V0Rm9jdXMgPHR0eU51bWJlcj4KKyAgIHJlYWRLZXkgPHdhaXQ+CisgICByZWFkS2V5V2l0aFRpbWVvdXQge2luZmluaXRlIHwgPHNlY29uZHM+fQorICAgYWNjZXB0S2V5cyA8cmFuZ2VUeXBlPiBbPGtleUNvZGVMaXN0Pl0KKyAgIGlnbm9yZUtleXMgPHJhbmdlVHlwZT4gWzxrZXlDb2RlTGlzdD5dCisgICBhY2NlcHRLZXlSYW5nZXMgPGtleVJhbmdlTGlzdD4KKyAgIGlnbm9yZUtleVJhbmdlcyA8a2V5UmFuZ2VMaXN0PgorICAgd3JpdGUgWzxvcHRpb24+IC4uLl0KKyAgICAgIC10ZXh0IDxzdHJpbmc+CisgICAgICAtYW5kIDxkb3RzPgorICAgICAgLW9yIDxkb3RzPgorICAgICAgLXJlZ2lvbiA8c3RhcnQ+IDxzaXplPgorICAgICAgLWN1cnNvciB7bGVhdmUgfCBvZmYgfCA8b2Zmc2V0Pn0KKyAgICAgIC1kaXNwbGF5IHtkZWZhdWx0IHwgPG51bWJlcj59CisgICB3cml0ZURvdHMgPGRvdHM+CisgICBlbnRlclJhd01vZGUgPGRyaXZlcj4KKyAgIGxlYXZlUmF3TW9kZQorICAgcmVjdlJhdyA8bWF4aW11bUxlbmd0aD4KKyAgIHNlbmRSYXcgPHBhY2tldD4KKyAgIHN1c3BlbmREcml2ZXIgPGRyaXZlcj4KKyAgIHJlc3VtZURyaXZlcgorICAgY2xvc2VDb25uZWN0aW9uCisKZGlmZiAtLWdpdCBhL0JpbmRpbmdzL1RjbC9jb25zdGFudHMuYXdrIGIvQmluZGluZ3MvVGNsL2NvbnN0YW50cy5hd2sKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTZiMThiZQotLS0gL2Rldi9udWxsCisrKyBiL0JpbmRpbmdzL1RjbC9jb25zdGFudHMuYXdrCkBAIC0wLDAgKzEsNjYgQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgbGliYnJsYXBpIC0gQSBsaWJyYXJ5IHByb3ZpZGluZyBhY2Nlc3MgdG8gYnJhaWxsZSB0ZXJtaW5hbHMgZm9yIGFwcGxpY2F0aW9ucy4KKyMKKyMgQ29weXJpZ2h0IChDKSAyMDA2LTIwMjMgYnkKKyMgICBTYW11ZWwgVGhpYmF1bHQgPFNhbXVlbC5UaGliYXVsdEBlbnMtbHlvbi5vcmc+CisjICAgU8OpYmFzdGllbiBIaW5kZXJlciA8U2ViYXN0aWVuLkhpbmRlcmVyQGVucy1seW9uLm9yZz4KKyMKKyMgbGliYnJsYXBpIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitCRUdJTiB7Cit9CisKK0VORCB7Cit9CisKK2Z1bmN0aW9uIGJybENvbW1hbmQobmFtZSwgc3ltYm9sLCB2YWx1ZSwgaGVscCkgeworfQorCitmdW5jdGlvbiBicmxCbG9jayhuYW1lLCBzeW1ib2wsIHZhbHVlLCBoZWxwKSB7Cit9CisKK2Z1bmN0aW9uIGJybEtleShuYW1lLCBzeW1ib2wsIHZhbHVlLCBoZWxwKSB7Cit9CisKK2Z1bmN0aW9uIGJybEZsYWcobmFtZSwgc3ltYm9sLCB2YWx1ZSwgaGVscCkgeworfQorCitmdW5jdGlvbiBicmxEb3QobnVtYmVyLCBzeW1ib2wsIHZhbHVlLCBoZWxwKSB7Cit9CisKK2Z1bmN0aW9uIGFwaUNvbnN0YW50KG5hbWUsIHN5bWJvbCwgdmFsdWUsIGhlbHApIHsKKyAgaWYgKGdzdWIoIl5QQVJBTV8iLCAiIiwgbmFtZSkpIHsKKyAgICBpZiAobmFtZSA9PSAiQ09VTlQiKSByZXR1cm4KKyAgICBpZiAoZ3N1YigiXlRZUEVfIiwgIiIsIG5hbWUpKSByZXR1cm4KKworICAgIGdzdWIoIl8iLCAiLSIsIG5hbWUpCisgICAgbmFtZSA9IHRvbG93ZXIobmFtZSkKKyAgICBwcmludCAieyBcIiIgbmFtZSAiXCIsICIgc3ltYm9sICIgfSwiID5wYXJhbWV0ZXJzSGVhZGVyCisgIH0KK30KKworZnVuY3Rpb24gYXBpTWFzayhuYW1lLCBzeW1ib2wsIHZhbHVlLCBoZWxwKSB7Cit9CisKK2Z1bmN0aW9uIGFwaVNoaWZ0KG5hbWUsIHN5bWJvbCwgdmFsdWUsIGhlbHApIHsKK30KKworZnVuY3Rpb24gYXBpVHlwZShuYW1lLCBzeW1ib2wsIHZhbHVlLCBoZWxwKSB7Cit9CisKK2Z1bmN0aW9uIGFwaUtleShuYW1lLCBzeW1ib2wsIHZhbHVlLCBoZWxwKSB7Cit9CisKK2Z1bmN0aW9uIGFwaVJhbmdlVHlwZShuYW1lLCBzeW1ib2wsIHZhbHVlLCBoZWxwKSB7Cit9CisKZGlmZiAtLWdpdCBhL0JpbmRpbmdzL1RjbC9wcm9sb2d1ZS50Y2wgYi9CaW5kaW5ncy9UY2wvcHJvbG9ndWUudGNsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUyYjYxZDUKLS0tIC9kZXYvbnVsbAorKysgYi9CaW5kaW5ncy9UY2wvcHJvbG9ndWUudGNsCkBAIC0wLDAgKzEsMTkgQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgbGliYnJsYXBpIC0gQSBsaWJyYXJ5IHByb3ZpZGluZyBhY2Nlc3MgdG8gYnJhaWxsZSB0ZXJtaW5hbHMgZm9yIGFwcGxpY2F0aW9ucy4KKyMKKyMgQ29weXJpZ2h0IChDKSAyMDA2LTIwMjMgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPgorIworIyBsaWJicmxhcGkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorIworIyBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisjIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyMgbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisjCisjIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK3NvdXJjZSBbZXZhbCBmaWxlIGpvaW4gW2xyZXBsYWNlIFtmaWxlIHNwbGl0IFtpbmZvIHNjcmlwdF1dIGVuZC0yIGVuZC0xXV0KK2xvYWQgbGliYnJsYXBpX3RjbC5zbwpkaWZmIC0tZ2l0IGEvQm9vdGRpc2tzL1JFQURNRS5EZWJpYW4gYi9Cb290ZGlza3MvUkVBRE1FLkRlYmlhbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MDZhMjc2Ci0tLSAvZGV2L251bGwKKysrIGIvQm9vdGRpc2tzL1JFQURNRS5EZWJpYW4KQEAgLTAsMCArMSwzNSBAQAorRGViaWFuIEluc3RhbGxlciBmZWF0LiBCUkxUVFkKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0RlYmlhbiBJbnN0YWxsZXIgbmF0aXZlbHkgc3VwcG9ydHMgQlJMVFRZIHNpbmNlIGl0cyBiZXRhIDMgZm9yIERlYmlhbgorRXRjaCwgc2VlIG9mZmljaWFsIGFubm91bmNlbWVudCBhdCBbMV0uICBJZiB5b3VyIEJyYWlsbGUgZGlzcGxheSBpcworY29ubmVjdGVkIGJ5IFVTQiwgc2ltcGx5IHByZXNzIEVOVEVSIGF0IHN5c2xpbnV4IHByb21wdCAoYXQgdGhlIHZlcnkKK2JlZ2lubmluZyBvZiB0aGUgaW5zdGFsbGF0aW9uIHByb2Nlc3MpLCB5b3VyIGRpc3BsYXkgc2hvdWxkIGJlCithdXRvZGV0ZWN0ZWQuICBPdGhlcndpc2UsIGlmIGVpdGhlciB5b3VyIGRpc3BsYXkgaXMgY29ubmVjdGVkIGJ5CitzZXJpYWwgcG9ydCBvciB5b3Ugd2FudCB0byBzZXQgYSBwYXJ0aWN1bGFyIEJyYWlsbGUgdGFibGUsIGdpdmUgdGhlCitmb2xsb3dpbmcgbGluZSBhdCBzeXNsaW51eCBwcm9tcHQgYmVmb3JlIHByZXNzaW5nIEVOVEVSICh5b3UgbWF5IGJlCitjYXJlZnVsIGFzIHRoZSBrZXlib2FyZCBsYXlvdXQgaXMgcXdlcnR5IGF0IHRoaXMgc3RlcCk6CisKK2luc3RhbGwgYnJsdHR5PWRydixkZXYsdGJsCisKKyJkcnYiIHN0YW5kcyBmb3IgdGhlIEJSTFRUWSBjb2RlIG9mIHlvdXIgQnJhaWxsZSBkaXNwbGF5LCAiZGV2IiBzdGFuZHMKK2ZvciB0aGUgZGV2aWNlIHlvdXIgQnJhaWxsZSBkaXNwbGF5IGlzIGNvbm5lY3RlZCB0byAoZS5nLiB0dHlTMCwgdXNiOiwKKy4uLikgIGFuZCAidGJsIiBzdGFuZHMgZm9yIHRoZSBjb2RlIG9mIHRoZSBCcmFpbGxlIHRhYmxlIHRvIGJlIHNldC4KK0ZvciBleGFtcGxlLCB0aGlzIGlzIHRoZSBsaW5lIHRoYXQgZW5hYmxlcyBCUkxUVFkgZm9yIGEgQkFVTQorU3VwZXJWYXJpbyA0MCBCcmFpbGxlIGRpc3BsYXkgY29ubmVjdGVkIGJ5IFVTQiB3aXRoIGRlZmF1bHQgQnJhaWxsZQordGFibGU6CisKK2luc3RhbGwgYnJsdHR5PWJtLHVzYjoKKworU3VwcG9ydGVkIEJyYWlsbGUgZGlzcGxheXMgYW5kIEJyYWlsbGUgdGFibGVzIGFyZSBsaXN0ZWQgYWxvbmcgd2l0aAorY29ycmVzcG9uZGluZyBjb2RlcyBpbiB0aGUgQlJMVFRZIG1hbnVhbCwgc2VlIFsyXS4gIERldGFpbHMgYWJvdXQKK2luc3RhbGxpbmcgRGViaWFuIGFyZSBhdmFpbGFibGUgYXQgWzNdLiAgUGxlYXNlIGFsc28gY29uc2lkZXIgam9pbmluZworRGViaWFuIEFjY2Vzc2liaWxpdHkgbWFpbGluZyBsaXN0IGF0IFs0XS4KKworRm9vdG5vdGVzOgorWzFdICBodHRwOi8vd3d3LmRlYmlhbi5vcmcvZGV2ZWwvZGViaWFuLWluc3RhbGxlci9OZXdzLzIwMDYvMjAwNjA4MTEKK1syXSAgaHR0cDovL2JybHR0eS5hcHAvZG9jL01hbnVhbC1CUkxUVFkvRW5nbGlzaC9CUkxUVFkuaHRtbAorWzNdICBodHRwOi8vd3d3LmRlYmlhbi5vcmcvcmVsZWFzZXMvc3RhYmxlL2luc3RhbGxtYW51YWwKK1s0XSAgaHR0cDovL2xpc3RzLmRlYmlhbi5vcmcvZGViaWFuLWFjY2Vzc2liaWxpdHkvCisKKyAtLSBCb3JpcyBEYWl4IDxCb3Jpcy5EYWl4QGFseXNzZS5vcmc+ICBTdW4sIDI3IEF1ZyAyMDA2IDIzOjEwOjE1ICswMjAwCmRpZmYgLS1naXQgYS9Cb290ZGlza3MvUkVBRE1FLlJlZEhhdC5jZCBiL0Jvb3RkaXNrcy9SRUFETUUuUmVkSGF0LmNkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE5Y2Q0NmEKLS0tIC9kZXYvbnVsbAorKysgYi9Cb290ZGlza3MvUkVBRE1FLlJlZEhhdC5jZApAQCAtMCwwICsxLDE1OSBAQAorQWRkaW5nIEJSTFRUWSB0byBhIFJlZCBIYXQgTGludXggSW5zdGFsbCBDRAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitXcml0dGVuIGR1cmluZyBBcHJpbCwgMjAwNCwgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKworCitRdWljayBTdGFydAorLS0tLS0tLS0tLS0KKworVGhlIHNjcmlwdCAicmhta2lzbyIgY2FuIGJlIHVzZWQgdG8gYWRkIEJSTFRUWSB0byBhIFJlZEhhdCBvciBGZWRvcmEgaW5zdGFsbAorQ0QuIEhlcmUncyBob3cgdG8gdXNlIGl0LgorCitGaXJzdDogTG9nIGluIGFzIChvciBzdSB0bykgcm9vdC4gVGhpcyBpcyBiZWNhdXNlIHRoZSBzY3JpcHQgdXNlcyBhIGxvb3BiYWNrCittb3VudC4gWW91J2xsIHByb2JhYmx5IGFsc28gbmVlZCB0byBiZSByb290IGluIG9yZGVyIHRvIHdyaXRlIHRoZSByZXN1bHRhbnQKK2ltYWdlIHRvIGEgQ0QgYXMgd2VsbC4KKworU2Vjb25kOiBDcmVhdGUgYW4gZW1wdHkgZGlyZWN0b3J5IGFuZCBjaGFuZ2UgdG8gaXQuCisKKyAgIG1rZGlyIHdvcmsKKyAgIGNkIHdvcmsKKworVGhpcmQ6IENvcHkgb3IgZG93bmxvYWQgdGhlIGltYWdlIG9mIHRoZSBpbnN0YWxsZXIgQ0QgKCJib290LmlzbyIpIGZvciB0aGUKK2Rlc2lyZWQgUmVkSGF0IG9yIEZlZG9yYSByZWxlYXNlLCBvciB0aGUgaW1hZ2UgZm9yIHRoZSBmaXJzdCBDRCBvZiB0aGUgZnVsbAoraW5zdGFsbGF0aW9uIHNldCAoImRpc2MxLmlzbyIpLCBpbnRvIHRoZSBjdXJyZW50IGRpcmVjdG9yeS4KKworICAgY3AgL3BhdGgvdG8vYm9vdC5pc28gLgorCitGb3VydGg6IENvcHkgb3IgZG93bmxvYWQgdGhlIHRhcmJhbGwgZm9yIHRoZSBkZXNpcmVkIEJSTFRUWSByZWxlYXNlIGludG8gdGhlCitjdXJyZW50IGRpcmVjdG9yeS4KKworICAgY3AgL3BhdGgvdG8vYnJsdHR5LTMuNS50YXIuZ3ogLgorCitGaWZ0aDogUnVuIHRoZSAicmhta2lzbyIgc2NyaXB0IHdpdGggbm8gb3B0aW9ucyBvciBwYXJhbWV0ZXJzLgorCisgICByaG1raXNvCisKK1NpeHRoOiBZb3Ugc2hvdWxkIG5vdyBoYXZlIGEgbmV3IGZpbGUsICJicmx0dHkuaXNvIiwgaW4gdGhlIGN1cnJlbnQgZGlyZWN0b3J5LiAKK1dyaXRlIHRoaXMgbW9kaWZpZWQgaW1hZ2UgdG8gYSBDRC4KKworICAgY2RyZWNvcmQgLXYgZGV2PTAsMCwwIC1kYXRhIGJybHR0eS5pc28KKworSWYgeW91J3JlIHVzaW5nIGEgcmV3cml0YWJsZSBDRCB0aGVuIHlvdSBzaG91bGQgZXJhc2UgaXQgZmlyc3QuCisKKyAgIGNkcmVjb3JkIC12IGRldj0wLDAsMCBibGFuaz1mYXN0CisKK0ZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHdyaXRpbmcgdG8gYSBDRCwgcGxlYXNlIGNoZWNrIHRoZSBDRC1Xcml0aW5nIEhPV1RPIGF0OgorCisgICBodHRwOi8vdGxkcC5vcmcvSE9XVE8vQ0QtV3JpdGluZy1IT1dUTy5odG1sCisKK1NldmVudGg6IEJvb3QgZnJvbSB0aGUgQ0QgeW91J3ZlIGp1c3Qgd3JpdHRlbiwgYW5kIHdhaXQgYSBmZXcgc2Vjb25kcyBhZnRlciBpdAorYmVnaW5zIHRvIHNwaW4gaW4gb3JkZXIgdG8gZ2l2ZSB0aGUgYm9vdCBsb2FkZXIgZW5vdWdoIHRpbWUgdG8gZ2V0IHN0YXJ0ZWQgYW5kCit0byBwcmVzZW50IGl0cyBpbml0aWFsIHByb21wdC4gVGhlbiBlbnRlcjoKKworICAgdGV4dCBicmx0dHk9PGRyaXZlcj4sPGRldmljZT4sPHRhYmxlPgorZS5nLgorICAgdGV4dCBicmx0dHk9aHQsdHR5UzEsZGUKKworWW91IGNhbiBvbWl0IGFueSBvcGVyYW5kLCBhbGxvd2luZyBpdCB0byBkZWZhdWx0LCBzaW1wbHkgYnkgbm90IHNwZWNpZnlpbmcgaXQuIAorWW91IGFsc28gbmVlZG4ndCBzcGVjaWZ5IGFueSB0cmFpbGluZyBjb21tYXMgcmVzdWx0aW5nIGZyb20gb21pdHRlZCBvcGVyYW5kcy4KKworICAgdGV4dCBicmx0dHk9aHQsdHR5UzEsCisgICB0ZXh0IGJybHR0eT1odCx0dHlTMQorICAgdGV4dCBicmx0dHk9aHQsCisgICB0ZXh0IGJybHR0eT1odAorICAgdGV4dCBicmx0dHk9aHQsLGRlCisgICB0ZXh0IGJybHR0eT1odCwsCisKK1RoZSA8ZHJpdmVyPiBvcGVyYW5kIGlzIHRoZSB0d28tbGV0dGVyIGlkZW50aWZpZXIgb2YgdGhlIGRyaXZlciBmb3IgeW91cgorYnJhaWxsZSBkaXNwbGF5LiBJdCdzIHRoZSBvbmx5IHJlcXVpcmVkIG9wZXJhbmQuIFNlZSB0aGUgLWIgb3B0aW9uIChiZWxvdykgZm9yCitmdXJ0aGVyIGRldGFpbHMuCisKK1RoZSA8ZGV2aWNlPiBvcGVyYW5kIGlzIHRoZSBkZXZpY2UgdG8gd2hpY2ggeW91ciBicmFpbGxlIGRpc3BsYXkgaXMgY29ubmVjdGVkLiAKK0l0J3Mgb3B0aW9uYWwsIGFuZCBkZWZhdWx0cyB0byB0aGUgcHJpbWFyeSBzZXJpYWwgcG9ydCAoIi9kZXYvdHR5UzAiKS4gSWYgeW91cgorZGlzcGxheSBpcyBjb25uZWN0ZWQgdG8gYSBzZXJpYWwgcG9ydCB0aGVuIHNwZWNpZnkgZWl0aGVyIHRoZSBuYW1lIChlLmcuCisidHR5UzEiKSBvZiBvciB0aGUgcGF0aCAoZS5nLiAiL2Rldi90dHlTMSIpIHRvIHRoZSBjb3JyZXNwb25kaW5nIGRldmljZS4gSWYKK2l0J3MgY29ubmVjdGVkIHRvIHRoZSBVU0IgdGhlbiBzcGVjaWZ5ICJ1c2I6IiAodGhlIHRyYWlsaW5nIGNvbG9uIGlzCitpbXBvcnRhbnQpLgorCitUaGUgPHRhYmxlPiBvcGVyYW5kIGlzIHRoZSB0ZXh0IHRyYW5zbGF0aW9uIHRhYmxlIHlvdSB3aXNoIHRvIHVzZS4gSXQncworb3B0aW9uYWwsIGFuZCBkZWZhdWx0cyB0byAibmFiY2MiIChOb3J0aCBBbWVyaWNhbiBCcmFpbGxlIENvbXB1dGVyIENvZGUpLiBTZWUKK3RoZSAidGV4dC4qLnRibCIgZmlsZXMgaW4gdGhlICJCcmFpbGxlVGFibGVzIiBzdWJkaXJlY3Rvcnkgb2YgQlJMVFRZJ3Mgc291cmNlCit0cmVlIGZvciBhbHRlcm5hdGl2ZXMuIFNlZSB0aGUgLXQgb3B0aW9uIChiZWxvdykgZm9yIGZ1cnRoZXIgZGV0YWlscy4KKworCitUaGUgRGV0YWlscworLS0tLS0tLS0tLS0KKworVGhlICJyaG1raXNvIiBzY3JpcHQgY2FuIGFkZCBCUkxUVFkgdG8gZWl0aGVyIGEgUmVkSGF0IG9yIGEgRmVkb3JhIGluc3RhbGwgQ0QuIAorSXQgY2FuIGJlIGFwcGxpZWQgZWl0aGVyIHRvIHRoZSBiYXNpYyBpbnN0YWxsZXIgQ0Qgb3IgdG8gdGhlIGZpcnN0IENEIG9mIHRoZQorZnVsbCBpbnN0YWxsYXRpb24gc2V0LCBhbmQgbWFrZXMgdGhlIGZvbGxvd2luZyBtb2RpZmljYXRpb25zIHRvIHRoZSBpbWFnZToKKyogIEJSTFRUWSBpcyBhZGRlZCAoYWxsIGRyaXZlcnMsIGFsbCB0YWJsZXMpLgorKiAgVGhlIHRpbWVvdXQgZm9yIHRoZSBpbml0aWFsIGJvb3QgbG9hZGVyIHByb21wdCBpcyBkaXNhYmxlZC4KKyogIFRoZSBkZWZhdWx0IGtlcm5lbCBjb25maWd1cmF0aW9uIHRvIGJlIGJvb3RlZCBpcyBjaGFuZ2VkIHRvICJ0ZXh0Ii4KKyogIFRoZSB1c2Ugb2YgZnJhbWUgYnVmZmVycyBmb3IgdGhlICJ0ZXh0IiBjb25zb2xlcyBpcyBkaXNhYmxlZC4KKworRm9yIHJlc2N1ZSBpbWFnZXMsIHRoZSBmb2xsb3dpbmcgYWRkaXRpb25hbCBtb2RpZmljYXRpb25zIGFyZSBtYWRlOgorKiAgVGV4dCBjb25zb2xlcyBhcmUgdXNlZCB3aGVuICJyZXNjdWUiIGlzIHNlbGVjdGVkLgorKiAgVGhlIHVzZSBvZiBmcmFtZSBidWZmZXJzIGZvciB0aGUgInJlc2N1ZSIgY29uc29sZXMgaXMgZGlzYWJsZWQuCisKK0FsdGhvdWdoIGl0cyBkZWZhdWx0cyBhcmUgd2hhdCB1c3VhbGx5IG5lZWRzIHRvIGJlIGRvbmUsIHRoZSAicmhta2lzbyIgc2NyaXB0CitvZmZlcnMgYSBudW1iZXIgb2Ygb3B0aW9ucyBzbyB0aGF0IHlvdSBjYW4gY3VzdG9taXplIHdoYXQgaXQgZG9lcy4gSXQncyBnZW5lcmFsCitpbnZvY2F0aW9uIHN5bnRheCBpczoKKworICAgcmhta2lzbyBbLW9wdGlvbiAuLi5dCisKK1RoZSBmb2xsb3dpbmcgb3B0aW9ucyBhcmUgcHJvdmlkZWQ6CisgICAtaSBmaWxlICAgICAgICAgVGhlIG9yaWdpbmFsIChpbnB1dCkgaW1hZ2UgKGRlZmF1bHQ6IGJvb3QuaXNvKS4KKyAgIC1vIGZpbGUgICAgICAgICBUaGUgbW9kaWZpZWQgKG91dHB1dCkgaW1hZ2UgKGRlZmF1bHQ6IGJybHR0eS5pc28pLgorICAgLWEgZmlsZSAgICAgICAgIFRoZSBCUkxUVFkgYXJjaGl2ZSAoZGVmYXVsdDogY2hlY2sgY3VycmVudCBkaXJlY3RvcnkpLgorICAgLWIgZHJpdmVyLC4uLiAgIFRoZSBicmFpbGxlIGRyaXZlcihzKSB0byBpbmNsdWRlIChkZWZhdWx0OiBhbGwpLgorICAgLXQgZmlsZSAgICAgICAgIFRoZSB0ZXh0IHRyYW5zbGF0aW9uIHRhYmxlIHRvIGJ1aWxkIGluIChkZWZhdWx0OiBuYWJjYykuCisgICAtcyAgICAgICAgICAgICAgSW52b2tlIGFuIGludGVyYWN0aXZlIHNoZWxsIHRvIGluc3BlY3QgdGhlIG1vZGlmaWVkIGltYWdlLgorICAgLWggICAgICAgICAgICAgIERpc3BsYXkgdXNhZ2UgaW5mb3JtYXRpb24gYW5kIGV4aXQuCisKK1RoZSAtaSBvcHRpb24gc3BlY2lmaWVzIHRoZSBsb2NhdGlvbiBvZiB0aGUgZGlzdHJpYnV0aW9uLXN1cHBsaWVkIG9yaWdpbmFsCisoaW5wdXQpIGltYWdlIHdoaWNoIGlzIHRvIGJlIG1vZGlmaWVkLiBFaXRoZXIgYSByZWxhdGl2ZSBvciBhbiBhYnNvbHV0ZSBwYXRoCittYXkgYmUgc3VwcGxpZWQuIEl0IGRlZmF1bHRzIHRvICJib290LmlzbyIgKHRoZSB1c3VhbCBuYW1lIGZvciB0aGUgYmFzaWMKK2luc3RhbGxlciBDRCBpbWFnZSkuCisKK1RoZSAtbyBvcHRpb24gc3BlY2lmaWVzIHRoZSBsb2NhdGlvbiBvZiB0aGUgZmlsZSB3aGljaCBpcyB0byBjb250YWluIHRoZQorbW9kaWZpZWQgKG91dHB1dCkgaW1hZ2Ugd2hpY2ggdGhlIHNjcmlwdCB3aWxsIGNyZWF0ZS4gRWl0aGVyIGEgcmVsYXRpdmUgb3IgYW4KK2Fic29sdXRlIHBhdGggbWF5IGJlIHN1cHBsaWVkLiBJdCBkZWZhdWx0cyB0byAiYnJsdHR5LmlzbyIuCisKK1RoZSAtYiBvcHRpb24gc3BlY2lmaWVzIHdoaWNoIGJyYWlsbGUgZGlzcGxheSBkcml2ZXJzIHdpbGwgYmUgbGlua2VkIGludG8gdGhlCiticmx0dHkgZXhlY3V0YWJsZSBhcyBvcHBvc2VkIHRvIGJlaW5nIGJ1aWx0IGFzIGR5bmFtaWNhbGx5IGxvYWRhYmxlIHNoYXJlZAorb2JqZWN0cy4gSWYgbW9yZSB0aGFuIG9uZSBkcml2ZXIgaXMgc3BlY2lmaWVkIHRoZW4gdGhlaXIgc3BlY2lmaWVycyBtdXN0IGJlCitzZXBhcmF0ZWQgZnJvbSBvbmUgYW5vdGhlciBieSBhIGNvbW1hLiBFaXRoZXIgdGhlIHR3by1sZXR0ZXIgaWRlbnRpZmllciBvciB0aGUKK3Byb3BlciBuYW1lIChmdWxsIG9yIGFiYnJldmlhdGVkKSBmb3IgZWFjaCBkcml2ZXIgbXVzdCBiZSBzdXBwbGllZC4gSWYgYSBkcml2ZXIKK3NwZWNpZmllciBpcyBwcmVmaXhlZCBieSBhIG1pbnVzIHNpZ24gKC0pIHRoZW4gdGhhdCBkcml2ZXIgaXMgZXhjbHVkZWQgZnJvbSB0aGUKK2J1aWxkLiBUaGUgZmlyc3Qgbm9uLWV4Y2x1ZGVkIGRyaXZlciBpbiB0aGUgbGlzdCBpcyB0aGUgZGVmYXVsdCBkcml2ZXIuIFRoZQord29yZCAiYWxsIiwgaWYgdXNlZCBpbnN0ZWFkIG9mIGEgZHJpdmVyIHNwZWNpZmllciBhcyB0aGUgbGFzdCBpdGVtIGluIHRoZSBsaXN0LAorY2F1c2VzIGFsbCB0aGUgcmVtYWluaW5nIGRyaXZlcnMgdG8gYmUgaW1wbGljaXRseSBhcHBlbmRlZCB0byB0aGUgbGlzdCBpbiBubworc3BlY2lmaWMgb3JkZXIgKG9yLCBpZiBwcmVjZWRlZCBieSBhIG1pbnVzIHNpZ24sIHRvIGJlIGV4Y2x1ZGVkIGZyb20gdGhlCitidWlsZCkuIFRoZSBkZWZhdWx0IGlzICJhbGwiLCBpLmUuIGFsbCBvZiB0aGUgZHJpdmVycyAoaW4gbm8gcGFydGljdWxhciBvcmRlcgorc28gdGhlIGRlZmF1bHQgaXMgdW5wcmVkaWN0YWJsZSkgYXJlIGxpbmtlZCBpbi4KKworVGhlIC10IG9wdGlvbiBzcGVjaWZpZXMgd2hpY2ggdGV4dCB0cmFuc2xhdGlvbiB0YWJsZSBpcyB0byBiZSBidWlsdCBpbnRvIHRoZQorYnJsdHR5IGV4ZWN1dGFibGUuIElmIGEgcmVsYXRpdmUgcGF0aCBpcyBzdXBwbGllZCB0aGVuIGl0J3MgYW5jaG9yZWQgYXQgdGhlCisiQnJhaWxsZVRhYmxlcyIgc3ViZGlyZWN0b3J5IHdpdGhpbiBCUkxUVFkncyBzb3VyY2UgdHJlZS4gU2luY2UgYW55IG9mIEJSTFRUWSdzCitvd24gdGFibGVzIGNhbiBhbHNvIGJlIHNwZWNpZmllZCB3aGVuIHRoZSBpbWFnZSBpcyBib290ZWQsIHRoZSBwcmltYXJ5IHVzZSBvZgordGhpcyBvcHRpb24gaXMgdG8gc3BlY2lmeSB0aGUgYWJzb2x1dGUgcGF0aCB0byBhIHVzZXItZGVmaW5lZCB0YWJsZSBvdXRzaWRlCitCUkxUVFkncyBzb3VyY2UgdHJlZS4gVGhlICIudGJsIiBleHRlbnNpb24gaXMgb3B0aW9uYWwuIElmIGEgc2ltcGxlIGZpbGUgbmFtZSwKK2kuZS4gb25lIG9mIEJSTFRUWSdzIG93biB0YWJsZXMsIGlzIGJlaW5nIHN1cHBsaWVkIHRoZW4gdGhlICJ0ZXh0LiIgcHJlZml4IGlzCithbHNvIG9wdGlvbmFsLiBUaGUgZGVmYXVsdCBpcyAibmFiY2MiIChOb3J0aCBBbWVyaWNhbiBCcmFpbGxlIENvbXB1dGVyIENvZGUpLgorCitUaGUgLXMgb3B0aW9uIGNhdXNlcyBhbiBpbnRlcmFjdGl2ZSBzaGVsbCB0byBiZSBpbnZva2VkIGFmdGVyIGFsbCBvZiB0aGUKK21vZGlmaWNhdGlvbnMgdG8gdGhlIGZpbGVzIHdpdGhpbiB0aGUgaW1hZ2UgaGF2ZSBiZWVuIG1hZGUgYnV0IGJlZm9yZSB0aGUgQ0QKK2ltYWdlIGlzIGNyZWF0ZWQuIFRoaXMgZ2l2ZXMgeW91IGFuIG9wcG9ydHVuaXR5IHRvIGluc3BlY3Qgd2hhdCB0aGUgc2NyaXB0IGhhcworZG9uZS4gWW91ciBsb2dpbiBzaGVsbCwgaS5lLiB0aGUgb25lIHBvaW50ZWQgdG8gYnkgdGhlICRTSEVMTCBlbnZpcm9ubWVudAordmFyaWFibGUsIGlzIHVzZWQ7IGlmIGl0J3Mgbm90IHNldCB0aGVuICIvYmluL3NoIiBpcyBhc3N1bWVkLiAKKworVGhlIHNjcmlwdCB1c2VzIGEgbG90IG9mIHRlbXBvcmFyeSBmaWxlIHNwYWNlIHRvIGRvIGl0cyBqb2IsIGVzcGVjaWFsbHkgaWYgdGhlCitmaXJzdCBDRCBvZiB0aGUgZnVsbCBpbnN0YWxsYXRpb24gc2V0IGlzIGJlaW5nIHVzZWQuIFRoaXMgaXMgYmVjYXVzZSBpdCBuZWVkcwordG8gd29yayB3aXRoIGEgY29tcGxldGUgZXh0cmFjdGVkIGNvcHkgb2YgdGhlIGZpbGVzIHdpdGhpbiB0aGUgaW1hZ2UuIElmCit0aGVyZSdzIG5vdCBlbm91Z2ggc3BhY2UgaW4gIi90bXAiIHRoZW4geW91IGNhbiBkaXJlY3QgdGhlIHNjcmlwdCB0byB1c2UKK2Fub3RoZXIgZGlyZWN0b3J5IHZpYSB0aGUgJFRNUERJUiBlbnZpcm9ubWVudCB2YXJpYWJsZS4KKworVGhlIHNjcmlwdCB1c2VzIGEgbG9vcGJhY2sgbW91bnQgdG8gYWNjZXNzIHRoZSBmaWxlcyB3aXRoaW4gdGhlIG9yaWdpbmFsIENECitpbWFnZS4gVGhpcyBtZWFucyB0aGF0IGl0IG11c3QgYmUgcnVuIGFzIHJvb3QuCmRpZmYgLS1naXQgYS9Cb290ZGlza3MvUkVBRE1FLlJlZEhhdC5mZCBiL0Jvb3RkaXNrcy9SRUFETUUuUmVkSGF0LmZkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEwYTcwNjYKLS0tIC9kZXYvbnVsbAorKysgYi9Cb290ZGlza3MvUkVBRE1FLlJlZEhhdC5mZApAQCAtMCwwICsxLDIwOSBAQAorQWRkaW5nIEJSTFRUWSB0byBhIFJlZCBIYXQgTGludXggSW5zdGFsbCBGbG9wcHkKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1dyaXR0ZW4gb24gQXByaWwgNywgMjAwMgorCitIZXJlIGlzIGFuIG91dGxpbmUgb2YgYSBwcm9jZWR1cmUgZm9yIGFkYXB0aW5nIHRoZSBSZWRIYXQgKG9yIHNpbWlsYXIpCitpbnN0YWxsYXRpb24gYm9vdCBkaXNrIHNvIHRoYXQgQlJMVFRZIGNhbiBiZSB1c2VkIGR1cmluZyB0aGUgaW5zdGFsbGF0aW9uCitwcm9jZXNzLgorCitIaXN0b3J5OgorLUluaXRpYWwgZHJhZnQgZnJvbSBTdOlwaGFuZSBEb3lvbiA8cy5kb3lvbkB2aWRlb3Ryb24uY2E+CistQWRkaXRpb25zIGZyb20gTmljb2xhcyBQaXRyZSA8bmljb0BmbHV4bmljLm5ldD4KKy1BcHJpbCA3LCAyMDAyOiBNb3N0bHkgcmV3cml0dGVuIGJ5IFN06XBoYW5lIERveW9uIHRvIHRha2UgaW50byBhY2NvdW50CisgICB0aGUgSU5JVF9QQVRIIGhhY2sKKy1TZXB0ZW1iZXIgMjYsIDIwMDI6IEFtZW5kZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPiBkdWUgdG8gY2hhbmdlIGZyb20KKyAgIG1ha2UgZmlsZSBlZGl0aW5nIHRvIGF1dG9jb25mIGluIDMuMS4KKworVE9ETzoKKy1GaWd1cmUgb3V0IGhvdyB0byB1c2Ugc2hhcmVkIGxpYnJhcmllcyBmcm9tIGEgc3RhdGljYWxseSBsaW5rZWQKKyAgIGV4ZWN1dGFibGUsIHdoZW4gdGhlIGxpYiByZWZlcmVuY2VzIHN5bWJvbHMgZnJvbSB0aGUgbWFpbgorICAgcHJvZ3JhbS4gV2l0aCB0aGF0IHdlIGNvdWxkIGRvIGdlbmVyaWMgYm9vdGRpc2sgd2l0aCBkeW5hbWljIHNlbGVjdGlvbgorICAgb2YgYnJhaWxsZSBkcml2ZXIuCistR2l2ZSB3b3JraW5nIGluc3RydWN0aW9ucyBvbiBob3cgdG8gbWFrZSBoaWdoZXIgc2l6ZWQgZmxvcHBpZXMgZm9yIGEKKyAgIG9uZS1mbG9wcHkgc29sdXRpb24uCisKK1lvdSBuZWVkIGFuIGFscmVhZHkgd29ya2luZyBMaW51eCBzdGF0aW9uIHRvIHBlcmZvcm0gdGhpcy4gQSBjZXJ0YWluCitsZXZlbCBvZiBMaW51eC9Vbml4IGV4cGVydGlzZSBpcyBhbHNvIHJlcXVpcmVkLiBQbGVhc2UgcmVhZCB0byB0aGUgZW5kCitiZWZvcmUgZG9pbmcgYW55dGhpbmcuIFlvdSdsbCBwcm9iYWJseSBlbmQgdXAgYXNraW5nIGZvciBzaWdodGVkIGhlbHAgYXQKK3NvbWUgcG9pbnQgKHN1Y2ggYXMgdG8ga25vdyB3aHkgaXQgd29uJ3QgYm9vdCwgb3IgdG8gaGVscCBpbnN0YWxsIEJSTFRUWQorb24gdGhlIG5ldyBtYWNoaW5lKSwgYnV0IGlmIHlvdSBjYW4gZ2V0IHRoaXMgdG8gd29yayB0aGVuIHlvdSdsbCBiZSBmcmVlCit0byBzcGVuZCBhbiBob3VyIG9uIHlvdXIgb3duIGNob29zaW5nIHdoaWNoIHBhY2thZ2VzIHlvdSB3YW50IGluc3RhbGxlZC4KKworVGhpcyB3YXMgbGFzdCB0cmllZCB3aXRoIFJlZEhhdCA3LjIuCisKK0ZpcnN0IHN0ZXAgaXMgY29tcGlsaW5nIEJSTFRUWS4gVGhlIGJvb3RkaXNrIHdpbGwgdXNlIG9uZSBhbmQgb25seSBvbmUKK0JSTFRUWSBkcml2ZXIsIHNvIHlvdSBtdXN0IGNob29zZSB3aWNoLiBEbzoKKworbWFrZSBkaXN0Y2xlYW4KKy4vY29uZmlndXJlIC0tZW5hYmxlLXN0YW5kYWxvbmUtcHJvZ3JhbXMgLS13aXRoLWluaXQtcGF0aAorICAgICAgICAgICAgLS13aXRoLWJyYWlsbGUtZHJpdmVyPTxkcml2ZXI+IC0td2l0aC10ZXh0LXRhYmxlPTx0YWJsZT4gCittYWtlCit3aGVyZSA8ZHJpdmVyPiBpcyB0aGUgZHJpdmVyIHRvIGJ1aWxkIGludG8gQlJMVFRZIChvbmUgb2YgdGhlIHBvc3NpYmxlIHZhbHVlcworbGlzdGVkIHVuZGVyIC0td2l0aC1icmFpbGxlLWRyaXZlciBpbiB0aGUgb3V0cHV0IGZyb20gLi9jb25maWd1cmUgLS1oZWxwKSBhbmQKKzx0YWJsZT4gaXMgdGhlIHRleHQgdHJhbnNsYXRpb24gdGFibGUgdG8gdXNlIChzdWNoIGFzIHRleHQuZnJlbmNoLnRibCwKK3RleHQuZ2VybWFuLnRibCwgLi4uKSAoc2VlIHRoZSB0aGUgQnJhaWxsZVRhYmxlcy8gc3ViZGlyZWN0b3J5KS4KKworVGhpcyB3aWxsIGJ1aWxkIEJSTFRUWSB3aXRoIHRoZSBjaG9zZW4gZGlzcGxheSBkcml2ZXIgYnVpbHQtaW4sIGFuZCB3aWxsCitsaW5rIHRoZSBCUkxUVFkgZXhlY3V0YWJsZSBzdGF0aWNhbGx5IHNvIHRoYXQgaXQgZG9lc24ndCBkZXBlbmQgb24gYW55CitzaGFyZWQgbGlicmFyaWVzLgorCitJZiB5b3VyIGRpc3BsYXkgaXMgb24gdGhlIHNlY29uZCBzZXJpYWwgcG9ydCBpbnN0ZWFkIG9mIHRoZSBmaXJzdCwKK3lvdSB3aWxsIG5lZWQgdG8gYWRkICItLXdpdGgtYnJhaWxsZS1kZXZpY2U9L2Rldi90dHlTMSIuCisKK1lvdSBzaG91bGQgZ2V0IGFuIGV4ZWN1dGFibGUgY2FsbGVkICJicmx0dHkiIChpbiB0aGUgIlByb2dyYW1zLyIgIHN1YmRpcmVjdG9yeSkKK3dob3NlIHNpemUgaXMgYXJvdW5kIDU3MEssIGRlcGVuZGluZyBvbiB0aGUgZHJpdmVyIHlvdSBjaG9zZS4gSWYgeW91IGRvOgorCisJZmlsZSBQcm9ncmFtcy9icmx0dHkKKworaXQgc2hvdWxkIHNheSwgYW1vbmcgb3RoZXIgdGhpbmdzLCAic3RhdGljYWxseSBsaW5rZWQiLgorCitUaGUgUmVkIEhhdCBpbnN0YWxsYXRpb24gYm9vdCBkaXNrIGlzIGEgRE9TIGRpc2sgdGhhdCBjb250YWlucyBhIGJvb3QKK2xvYWRlciAoY2FsbGVkIHN5c2xpbnV4KSwgYSBrZXJuZWwgKGNhbGxlZCB2bWxpbnV6KSwgYW5kIGFuIGluaXRpYWwgcmFtZGlzaworKGNhbGxlZCBpbml0cmQuaW1nKS4gVGhpcyBpbml0aWFsIHJhbWRpc2sgaXMgdGhlIGluaXRpYWwgcm9vdCBmaWxlc3lzdGVtCitjb250YWluaW5nIGEgYm9vdHN0cmFwIGluc3RhbGxhdGlvbiBwcm9ncmFtOiAvc2Jpbi9pbml0LiBXZSdsbCBqdXN0IHB1dAorYnJsdHR5IG9uIHRoYXQgcmFtZGlzayBpbWFnZSBhbmQgbWFrZSBzdXJlIGl0IGlzIHN0YXJ0ZWQgYmVmb3JlIGFueXRoaW5nCitlbHNlLiBIb3dldmVyLCBiZWNhdXNlIHRoZSBzdGF0aWNhbGx5IGxpbmtlZCBicmx0dHkgZXhlY3V0YWJsZSBpcyBzbworbGFyZ2UsIHdlIHdpbGwgaGF2ZSB0byBwdXQgdGhlIHJhbWRpc2sgaW1hZ2Ugb24gYSBzZWNvbmQgZmxvcHB5LCBiZWNhdXNlCitpdCB3b24ndCBmaXQgb24gdGhlIG9yaWdpbmFsIHNpbmdsZSBib290IGZsb3BweSAod2l0aCB0aGUga2VybmVsKS4KKworU28gbm93IHdlIG11c3QgaGFjayBmbG9wcGllcy4gTWFrZSBhIHRlbXBvcmFyeSB3b3JrIGRpcmVjdG9yeS4gV2Ugd2lsbAorY2FsbCBpdCAiLi4uL3dvcmsiLCBjb3VsZCBiZSAifi93b3JrIi4KKworbWtkaXIgLi4uL3dvcmsKK21rZGlyIC4uLi93b3JrL2V0Y2JybHR0eQorCitOb3cgY29weSByZWxldmFudCBmaWxlcyBmcm9tIHlvdXIgQlJMVFRZIGJ1aWxkLiBDb3B5IHRoZSBleGVjdXRhYmxlLCB0aGUKK3RyYW5zbGF0aW9uIHRhYmxlLCB0aGUgY29udHJhY3Rpb24gdGFibGUgKGlmIHlvdSB3YW50IGl0KSwgYW5kIHRoZSBoZWxwIGZpbGUocykKK3RvIHlvdXIgd29yayBkaXJlY3RvcnkuCisKK2NwIFByb2dyYW1zL2JybHR0eSAuLi4vd29yaworY3AgQnJhaWxsZVRhYmxlcy8qLnRibCAuLi4vd29yay9ldGNicmx0dHkKK2NwIENvbnRyYWN0aW9uVGFibGVzLyouY3RiIC4uLi93b3JrL2V0Y2JybHR0eQorY3AgaGVscC8qIC4uLi93b3JrL2V0Y2JybHR0eQorCisoWW91IGNhbiBhbHNvIGNvcHkgYWx0ZXJuYXRpdmUgdHJhbnNsYXRpb24gdGFibGVzIGZyb20gQnJhaWxsZVRhYmxlcy8KK3RvIC4uLi93b3JrL2V0Y2JybHR0eS4gVGhlc2UgQ0FOIGJlIGxvYWRlZCBkeW5hbWljYWxseS4pCisKK05vdyBjaGFuZ2UgdG8gdGhlIHdvcmsgZGlyZWN0b3J5OgorCitjZCAuLi4vd29yaworCitUaGUgZXhlY3V0YWJsZSBpcyB3YXkgdG9vIGxhcmdlIGZvciBhIGJvb3QgZGlzayBiZWNhdXNlIGl0IGNvbnRhaW5zIGxvdHMgb2YKK3VubmVlZGVkIHN5bWJvbCB0YWJsZSBhbmQgZGVidWdnaW5nIGluZm9ybWF0aW9uLiAgUmVtb3ZlIHRoaXMgZXhjZXNzIGRhdGEgaW4KK29yZGVyIHRvIG1ha2UgdGhlIGV4ZWN1dGFibGUgYXMgc21hbGwgYXMgcG9zc2libGUuCisKK3N0cmlwIGJybHR0eQorCitOZXh0IHN0ZXAgaXMgdG8gc2VsZWN0IGFuIGluc3RhbGxhdGlvbiBib290IGZsb3BweSBpbWFnZSBmcm9tIHlvdXIKK2Rpc3RyaWJ1dGlvbi4gVGhpcyBjb3VsZCBiZSBpbWFnZXMvYm9vdC5pbWcgb3IgaW1hZ2VzL2Jvb3RuZXQuaW1nIGZyb20gYW4KK1JIIENEUk9NLiBDb25zaWRlciBjaGVja2luZyB0aGUgdXBkYXRlcyBzaXRlIGZvciB5b3VyIGRpc3RyaWJ1dGlvbiBpbgorY2FzZSB0aGV5IGhhdmUgdXBkYXRlZCBpbnN0YWxsYXRpb24gZGlzayBpbWFnZXMuIElmIHdoYXQgeW91IGhhdmUgaXMgYW4KK2FjdHVhbCBmbG9wcHksIHVzZSAiZGQgaWY9L2Rldi9mZDAgb2Y9Ym9vdC5pbWcgYnM9NTEyIiB0byBtYWtlIGFuIGltYWdlCitmaWxlIGZyb20gaXQuCisKK0NvcHkgdGhlIGNob3NlbiBpbWFnZSB0byB5b3VyIHdvcmsgZGlyZWN0b3J5IGFuZCBpZiBuZWNlc3NhcnkgcmVuYW1lIGl0Cit0byBib290LmltZy4KKworU28gbm93IHRoZSBjdXJyZW50IGRpcmVjdG9yeSBzaG91bGQgY29udGFpbiBib290LmltZywgYnJsdHR5LCBhbmQKK2V0Y2JybHR0eS8uCisKK05vdyBydW4gdGhlIHJobWtib3Qgc2NyaXB0ICh3aGljaCBpcyBsb2NhdGVkIGluIHRoZSBzYW1lIGRpcmVjdG9yeSBhcyB0aGlzCitSRUFETUUpLiBJdCB3aWxsIGNvcHkgYm9vdC5pbWcgdG8gbXlib290LmltZywgYW5kIGl0IHdpbGwgbW9kaWZ5IHRoZQorc3lzbGludXguY2ZnOiBpdCB3aWxsIGFkZCBhIG5ldyBib290IGVudHJ5IGNhbGxlZCAiYnJsdHR5Ii4gVGhhdCBlbnRyeSB3aWxsCitoYXZlIG9wdGlvbnMgdG8gY2F1c2Ugc3lzbGludXggdG8gbG9hZCBhIHJhbWRpc2sgZnJvbSBhIHNlY29uZCBmbG9wcHksIGluc3RlYWQKK29mIHVzaW5nIHRoZSBpbml0cmQuaW1nIG9uIHRoZSBmaXJzdCBmbG9wcHkuIFRoZSBicmx0dHkgZW50cnkgaGFzIHRoZSAidGV4dCIKK2tleXdvcmQgcGFyYW1ldGVyIHRvIHRyaWdnZXIgdGhlIHRleHQtbW9kZSBpbnN0YWxsLiByaG1rYm90IGFsc28gbWFrZXMgdGhpcyBuZXcKK2VudHJ5IHRoZSBkZWZhdWx0IGJvb3QgZW50cnkuCisKK05vdyBydW4gdGhlIHJobWtyb290IHNjcmlwdC4gSXQgd2lsbCBnZXQgaW5pdHJkLmltZyAodGhlIGluaXRpYWwgcmFtZGlzaykKK2Zyb20gYm9vdC5pbWcgYW5kIGNhbGwgaXQgbXlyb290LmltZy4gSXQgd2lsbCBtb2RpZnkgdGhhdCBpbWFnZToKKy1SZW5hbWUgL3NiaW4vaW5pdCB0byAvc2Jpbi9pbml0X3JlYWwsCistQ29weSBicmx0dHkgdG8gL3NiaW4vYnJsdHR5LAorLUxpbmsgL3NiaW4vaW5pdCB0byAvc2Jpbi9icmx0dHkKKy1Db3B5IGZpbGVzIGZyb20gZXRjYnJsdHR5IHRvIC9ldGMvYnJsdHR5LAorLVRyeSB0byBtYWtlIHN1cmUgbmVjZXNzYXJ5IGRldmljZXMgc3VjaCBhcyB2Y3NhLCBzZXJpYWwgcG9ydHMsIGFuZAorICAgY29uc29sZSBkZXZpY2UgZXhpc3QgaW4gL2Rldi4gKHZjc2EgaXMgdXN1YWxseSBtaXNzaW5nLikKKworSWYgaXQgdHVybnMgb3V0IHRoYXQgdGhlIGJybHR0eSBleGVjdXRhYmxlIGlzIHRvbyBsYXJnZSwgZG8gIi4vY29uZmlndXJlCistLWhlbHAiIGFuZCBjaGVjayBvdXQgdGhlIHZhcmlvdXMgIi0tZGlzYWJsZS0uLi4iIG9wdGlvbnMuIEVhY2ggcmVtb3ZlcyBhCitzcGVjaWZpYyBmZWF0dXJlIGZyb20gQlJMVFRZLCBhbmQgcmVzdWx0cyBpbiBhIGNvcnJlc3BvbmRpbmcgZGVjcmVhc2UgaW4gdGhlCitzaXplIG9mIHRoZSBleGVjdXRhYmxlLiBSZWNvbW1lbmRlZCBwb3NzaWJpbGl0aWVzIGluY2x1ZGU6CisKKyAgIC0tZGlzYWJsZS10YWJsZS1zZWxlY3Rpb24gLS1kaXNhYmxlLWxlYXJuLW1vZGUgLS1kaXNhYmxlLWNvbnRyYWN0ZWQtYnJhaWxsZQorICAgLS1kaXNhYmxlLXBjbS1zdXBwb3J0IC0tZGlzYWJsZS1taWRpLXN1cHBvcnQgLS1kaXNhYmxlLWZtLXN1cHBvcnQKKyAgIC0tZGlzYWJsZS1hcGkgLS1kaXNhYmxlLWdwbQorICAgLS1kaXNhYmxlLXNwZWVjaC1zdXBwb3J0IC0td2l0aG91dC14CisKK0lmIGJ1aWxkaW5nIHRoZSBQYXBlbm1laWVyIGRyaXZlciwgdGhlbiBhbHNvIGNvbnNpZGVyOgorCisgICAtLWRpc2FibGUtcG0tY29uZmlnZmlsZQorCitSZW1lbWJlciB0byBkbyAibWFrZSBkaXN0Y2xlYW4iIGlmIHlvdSBuZWVkIHRvIHJlY29uZmlndXJlIEJSTFRUWS4KKworQXNzdW1pbmcgdGhlcmUgYXJlIG5vIGVycm9ycywgdGhlIG5leHQgc3RlcCBpcyB0byBhY3R1YWxseSB3cml0ZSB0aGUKK2Zsb3BwaWVzLgorCitTbyBnZXQgdHdvIGZvcm1hdHRlZCBmbG9wcGllcy4gT25lIHdpbGwgYmUgdGhlIGJvb3QgZmxvcHB5LCB0aGUgb3RoZXIgdGhlCityYW1kaXNrIGZsb3BweS4gVG8gd3JpdGUgdGhlIGJvb3QgZmxvcHB5IGRvOgorCitkZCBpZj1teWJvb3QuaW1nIG9mPS9kZXYvZmQwIGJzPTUxMgorCitUbyB3cml0ZSB0aGUgcmFtZGlzayBmbG9wcHkgZG86CisKK2RkIGlmPW15cm9vdC5pbWcgb2Y9L2Rldi9mZDAgYnM9NTEyCisKK1RoYXQncyBpdCEKKworU28gbm93IGJvb3QgdGhlIGJvb3QgZmxvcHB5IG9uIHRoZSBtYWNoaW5lIHlvdSB3YW50IHRvIGluc3RhbGwuIEF0IHRoZQorcHJvbXB0IHlvdSBjYW4gcHJlc3MgRU5URVIgdG8gY2hvb3NlIHRoZSBicmx0dHkgZW50cnkuIAorCitJZiB5b3Ugd2FudCB0byBzcGVjaWZ5IGJvb3QgcGFyYW1ldGVycywgcmVtZW1iZXIgdG8gdXNlIHRoZSBsYWJlbAorImJybHR0eSIgaW5zdGVhZCBvZiAibGludXgiLgorCitZb3UgY2FuIHBhc3Mgb3B0aW9ucyB0byBCUkxUVFkgZnJvbSB0aGUgYm9vdCBwcm9tcHQgYnkgdXNpbmcgb3B0aW9uIG5hbWVzCitzaW1pbGFyIHRvIHRob3NlIGluIHRoZSBicmx0dHkuY29uZiBmaWxlOiB1c2Ugb25seSB1cHBlcmNhc2UsIHVzZSB1bmRlcnNjb3JlcworaW5zdGVhZCBvZiBtaW51cyBzaWducywgYW5kIHByZWZpeCB3aXRoIEJSTFRUWV8uIEZvciBleGFtcGxlOgorCiticmx0dHkgQlJMVFRZX0JSQUlMTEVfREVWSUNFPS9kZXYvdHR5UzEKKworV2hlbiB5b3UgcHJlc3MgRU5URVIsIHN5c2xpbnV4IHdpbGwgbG9hZCB0aGUga2VybmVsLiBXaGVuIHRoZSBmbG9wcHkKK3N0b3BzIHNwaW5uaW5nIHRoZSBrZXJuZWwgd2lsbCBzdGFydCB0byBydW4gYW5kIHdpbGwgcHJvbXB0IHlvdSBmb3IgdGhlCityYW1kaXNrIGZsb3BweS4gUHV0IHRoZSBzZWNvbmQgZmxvcHB5IGluIGFuZCBwcmVzcyBFTlRFUi4gVGhlIGtlcm5lbCB3aWxsCitsb2FkIHRoZSByYW1kaXNrLiBXaGVuIHRoZSBmbG9wcHkgc3RvcHMgc3Bpbm5pbmcsIEJSTFRUWSBTSE9VTEQKKyhob3BlZnVsbFkpIGNvbWUgb24gYW5kIHRoZSBpbnN0YWxsYXRpb24gcHJvZ3JhbSBzaG91bGQgc3RhcnQuCisKK09uZSBvZiB0aGUgcHJvYmxlbXMgeW91IG1heSBoYXZlIGR1cmluZyB0aGUgaW5zdGFsbGF0aW9uIHByb2Nlc3MgaXMgdGhhdAorc29tZSBhdXRvY29uZmlndXJhdGlvbiBwcm9ncmFtcyBtYXkgcGxheSBhcm91bmQgd2l0aCB0aGUgc2VyaWFsIHBvcnRzIHRvCit0cnkgdG8gYXV0b2RldGVjdCBoYXJkd2FyZSwgdGhlcmVieSB1cHNldHRpbmcgdGhlbSBhbmQgY2F1c2luZyBCUkxUVFkgdG8KK3N0b3Agd29ya2luZy4gVGhpcyBjYW4gYWxzbyBvY2N1ciB3aGVuIHRoZSBzeXN0ZW0gaXRzZWxmIGJvb3RzLiBNb3JlCityZWNlbnQgUmVkSGF0IHZlcnNpb25zIGFyZSBsZXNzIGFnZ3Jlc3NpdmUgdGhvdWdoLiBUd28gdHJpY2tzIGlmIHlvdSBoYXZlCitwcm9ibGVtczoKKy1JZiBrdWR6dSBydW5zIHdoZW4geW91ciBzeXN0ZW0gYm9vdHMgYW5kIHVwc2V0cyBCUkxUVFksIGVpdGhlciBkaXNhYmxlCit0aGF0IHNlcnZpY2UgKHVzaW5nIGNoa2NvbmZpZyBvciBudHN5c3YpIG9yIG1vZGlmeSAvZXRjL3N5c2NvbmZpZy9rdWR6dQorb3IgdGhlIHNjcmlwdCB0aGF0IHVzZXMga3VkenUgdG8gbWFrZSBpdCB1c2UgdGhlIC0tc2FmZSBvcHRpb24uCistVG8gZ2V0IHRoZSBpbnN0YWxsYXRpb24gcHJvZ3JhbSB0byBsZWF2ZSBhIHNlcmlhbCBwb3J0IGFsb25lLCB5b3UgbWlnaHQKK3RyeSB0byBtb2RpZnkgdGhlIHJhbWRpc2sgdG8gY2hhbmdlIC9kZXYvdHR5UzAgdG8gc2F5IC9kZXYvdHR5U215b3duLCBhbmQKK3RlbGwgQlJMVFRZIHRvIHVzZSB0aGF0IGFzIGl0J3Mgc2VyaWFsIHBvcnQuIFRoaXMgbWlnaHQgaGF2ZSB0aGUgZWZmZWN0CitvZiBoaWRpbmcgdGhlIHNlcmlhbCBwb3J0IGZyb20gYmFkIGFwcGxpY2F0aW9ucy4KKworTm90ZSB0aGF0IHlvdSBtdXN0IGFsc28gaW5zdGFsbCBCUkxUVFkgb24geW91ciBuZXcgbWFjaGluZS4gV2hlbiBpdCB3aWxsIGJvb3QKK0xpbnV4IGFmdGVyIHRoZSBpbnN0YWxsYXRpb24sIEJSTFRUWSB3aWxsIG5vdCBiZSBpbnN0YWxsZWQgYW5kIHRoZSBtYWNoaW5lIHdpbGwKK2JlIGluYWNjZXNzaWJsZS4gT25lIHdheSB0byBzaW1wbGlmeSB0aGluZ3MgaXMgdG8gdXNlIHRoZSBzdGF0aWNhbGx5IGxpbmtlZAorYnJsdHR5IHlvdSBjb21waWxlZCBmb3IgdGhlIGluc3RhbGxhdGlvbiBkaXNrLCBhcyBpdCBpcyBmYWlybHkgc2VsZi1jb250YWluZWQuCitPbmNlIGl0J3MgcnVubmluZywgdGhlbiB5b3UgY2FuIGJ1aWxkIHlvdXJzZWxmIGEgc2hhcmVkIHZlcnNpb24gYW5kIG1vZGlmeSB5b3VyCitib290IHNjcmlwdHMgb3IgaW5pdHRhYiB0byBoYXZlIEJSTFRUWSBzdGFydCBhdXRvbWF0aWNhbGx5LiBBIG5pY2Ugd2F5IHRvIGdldAorYnJsdHR5IG9udG8geW91ciBuZXcgbWFjaGluZSBpcyB0aGlzOiBkdXJpbmcgdGhlIGluc3RhbGxhdGlvbiBwcm9jZXNzLCBhZnRlcgoreW91ciB0YXJnZXQgcGFydGl0aW9uIGhhcyBiZWVuIGZvcm1hdHRlZCwgaXQgaXMgKGF0IGxlYXN0IHdpdGggdGhlIGN1cnJlbnQgUkgKK2luc3RhbGxhdGlvbiBwcm9ncmFtKSBtb3VudGVkIHVuZGVyIC9tbnQvc3lzaW1hZ2UuIFlvdSBjYW4gdGVtcG9yYXJpbHkgcHV0Cithc2lkZSB0aGUgaW5zdGFsbGF0aW9uIHByb2dyYW0gYW5kIGdldCBhIHNoZWxsIGJ5IGdvaW5nIHRvIHRoZSBzZWNvbmQgdmlydHVhbAorY29uc29sZSAoYWx0LUYyKS4gVGhlcmUgeW91IGNhbiBkbzoKKworY3AgL3NiaW4vYnJsdHR5IC9tbnQvc3lzaW1hZ2UvYmluLworCitJIGFtIG5vdCBzdXJlIGlmIGF0IHRoYXQgcG9pbnQgaXQgaXMgcG9zc2libGUgdG8gZWRpdCBpbml0dGFiIG9yIHN0YXJ0dXAKK3NjcmlwdHMuIE90aGVyd2lzZSBvbiB5b3VyIGZpcnN0IGJvb3QsIHlvdSBqdXN0IGhhdmUgdG8gbG9nIGluIGFzIHJvb3QKKyh3aXRob3V0IGJyYWlsbGUgc3VwcG9ydCkgYW5kIHR5cGUgIi9iaW4vYnJsdHR5IiBhbmQgaWYgYWxsIHdlbnQgd2VsbAorQlJMVFRZIHNob3VsZCBjb21lIG9uLgorCitHb29kIGx1Y2shCmRpZmYgLS1naXQgYS9Cb290ZGlza3MvYnAyY2YgYi9Cb290ZGlza3MvYnAyY2YKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMTkyNjZlNwotLS0gL2Rldi9udWxsCisrKyBiL0Jvb3RkaXNrcy9icDJjZgpAQCAtMCwwICsxLDI2MiBAQAorIyEvYmluL3NoCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisjICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorIworIyBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisjCisjIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisjCisjIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyMgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorIyBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyMKKyMgV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworIworIyBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIyBDb252ZXJ0IHRoZSBib290IHBhcmFtZXRlciB0byBjb25maWd1cmF0aW9uIGZpbGUgZGlyZWN0aXZlcy4KKyMgSWYgL3Byb2MgaXMgbW91bnRlZCB0aGVuIHVzZSB0aGUgYnJsdHR5PSBib290IHBhcmFtZXRlciBpbiAvcHJvYy9jbWRsaW5lLgorIyBJZiAvcHJvYyBpcyBub3QgbW91bnRlZCB0aGVuIHVzZSB0aGUgYnJsdHR5IGVudmlyb25tZW50IHZhcmlhYmxlLgorIyBJbnZva2Ugd2l0aCAtaCBmb3IgdXNhZ2UgaW5mb3JtYXRpb24uCisKK3Byb2dyYW1OYW1lPSIkezAjIyovfSIKK3Byb2dyYW1NZXNzYWdlKCkKK3sKKyAgIGVjaG8gMj4mMSAiJHtwcm9ncmFtTmFtZX06ICR7MX0iCit9CitzeW50YXhFcnJvcigpCit7CisgICBwcm9ncmFtTWVzc2FnZSAiJHsxfSIKKyAgIGV4aXQgMgorfQoraW50ZXJuYWxFcnJvcigpCit7CisgICBwcm9ncmFtTWVzc2FnZSAiJHsxfSIKKyAgIGV4aXQgMworfQorCitjb25maWd1cmF0aW9uRmlsZT0iIgorcmVxdWVzdGVkQWN0aW9uPWNyZWF0ZQorZGV2aWNlVHJhbnNsYXRpb249bm9uZQorcmVxdWVzdGVkUGFyYW1ldGVyPSIiCitPUFRJTkQ9MQord2hpbGUgZ2V0b3B0cyAiOmY6Y3VuZG9wOmgiIG9wdGlvbgorZG8KKyAgIGNhc2UgIiR7b3B0aW9ufSIKKyAgIGluCisgICAgICBmKSBjb25maWd1cmF0aW9uRmlsZT0iJHtPUFRBUkd9Ijs7CisgICAgICBjKSByZXF1ZXN0ZWRBY3Rpb249Y3JlYXRlOzsKKyAgICAgIHUpIHJlcXVlc3RlZEFjdGlvbj11cGRhdGU7OworICAgICAgbikgZGV2aWNlVHJhbnNsYXRpb249bm9uZTs7CisgICAgICBkKSBkZXZpY2VUcmFuc2xhdGlvbj1kZXZmczs7CisgICAgICBvKSBkZXZpY2VUcmFuc2xhdGlvbj1vbGQ7OworICAgICAgcCkgcmVxdWVzdGVkUGFyYW1ldGVyPSIke09QVEFSR30iOzsKKyAgICAgIGgpCisgICAgICAgICBjYXQgPDxFT0YKK1VzYWdlOiAke3Byb2dyYW1OYW1lfSBbb3B0aW9uIC4uLl0KKy1mIGZpbGUgIFRoZSBjb25maWd1cmF0aW9uIGZpbGUgdG8gY3JlYXRlL3VwZGF0ZS4KKy1jICAgICAgIENyZWF0ZSB0aGUgY29uZmlndXJhdGlvbiBmaWxlICh3cml0ZSB0byBzdGRvdXQgaWYgbm8gLWYpLgorLXUgICAgICAgVXBkYXRlIHRoZSBjb25maWd1cmF0aW9uIGZpbGUgKGNvcHlpbmcgZnJvbSBzdGRpbiB0byBzdGRvdXQgaWYgbm8gLWYpLgorLW4gICAgICAgRG8gbm90IHRyYW5zbGF0ZSBkZXZpY2UgcGF0aHMuCistZCAgICAgICBEbyBvbGQtc3R5bGUgdG8gZGV2ZnMgZGV2aWNlIHBhdGggdHJhbnNsYXRpb24uCistbyAgICAgICBEbyBkZXZmcyB0byBvbGQtc3R5bGUgZGV2aWNlIHBhdGggdHJhbnNsYXRpb24uCistcCBbZHJpdmVyXVssW2RldmljZV1bLFt0YWJsZV1dXQorICAgICAgICAgRXhwbGljaXRseSBzcGVjaWZ5IHRoZSBib290IHBhcmFtZXRlci4KKy1oICAgICAgIERpc3BsYXkgdGhpcyB1c2FnZSBzdW1tYXJ5LgorRU9GCisgICAgICAgICBleGl0IDAKKyAgICAgICAgIDs7CisgICAgIFw/KSBzeW50YXhFcnJvciAidW5rbm93biBvcHRpb246IC0ke09QVEFSR30iOzsKKyAgICAgIDopIHN5bnRheEVycm9yICJtaXNzaW5nIHZhbHVlOiAtJHtPUFRBUkd9Ijs7CisgICAgICAqKSBpbnRlcm5hbEVycm9yICJ1bmltcGxlbWVudGVkIG9wdGlvbjogLSR7b3B0aW9ufSI7OworICAgZXNhYworZG9uZQorc2hpZnQgImBleHByICRPUFRJTkQgLSAxYCIKK1sgIiR7I30iIC1lcSAwIF0gfHwgc3ludGF4RXJyb3IgInRvbyBtYW55IHBhcmFtZXRlcnMuIgorCitjYXNlICIke3JlcXVlc3RlZEFjdGlvbn0iCitpbgorICAgY3JlYXRlKQorICAgICAgcHV0Q29uZmlndXJhdGlvbkxpbmUoKQorICAgICAgeworICAgICAgICAgZWNobyAiJHsxfSIgfHwgZXhpdCA0CisgICAgICB9CisgICAgICBzdGFydENvbmZpZ3VyYXRpb25GaWxlKCkKKyAgICAgIHsKKyAgICAgICAgIFsgLW4gIiR7Y29uZmlndXJhdGlvbkZpbGV9IiBdICYmIGV4ZWMgPiIke2NvbmZpZ3VyYXRpb25GaWxlfSIKKyAgICAgICAgIHB1dENvbmZpZ3VyYXRpb25MaW5lICJgbWFrZUhlYWRlckxpbmUgQ3JlYXRlZGAiCisgICAgICAgICBwdXRDb25maWd1cmF0aW9uTGluZSAiYG1ha2VQYXJhbWV0ZXJMaW5lYCIKKyAgICAgICAgIHB1dENvbmZpZ3VyYXRpb25MaW5lICIiCisgICAgICB9CisgICAgICBwdXRDb25maWd1cmF0aW9uRGlyZWN0aXZlKCkKKyAgICAgIHsKKyAgICAgICAgIHB1dENvbmZpZ3VyYXRpb25MaW5lICIkezF9ICR7Mn0iCisgICAgICB9CisgICAgICBmaW5hbGl6ZUNvbmZpZ3VyYXRpb25GaWxlKCkKKyAgICAgIHsKKyAgICAgICAgIDoKKyAgICAgIH0KKyAgICAgIDs7CisgICB1cGRhdGUpCisgICAgICBwdXRTZWRDb21tYW5kKCkKKyAgICAgIHsKKyAgICAgICAgIHNlZFNjcmlwdD0iJHtzZWRTY3JpcHR9CiskezF9IgorICAgICAgfQorICAgICAgc3RhcnRDb25maWd1cmF0aW9uRmlsZSgpCisgICAgICB7CisgICAgICAgICBpZiBbIC1uICIke2NvbmZpZ3VyYXRpb25GaWxlfSIgXQorICAgICAgICAgdGhlbgorICAgICAgICAgICAgWyAtZSAiJHtjb25maWd1cmF0aW9uRmlsZX0iIF0gfHwgc3ludGF4RXJyb3IgImZpbGUgbm90IGZvdW5kOiAke2NvbmZpZ3VyYXRpb25GaWxlfSIKKyAgICAgICAgICAgIFsgLWYgIiR7Y29uZmlndXJhdGlvbkZpbGV9IiBdIHx8IHN5bnRheEVycm9yICJub3QgYSBmaWxlOiAke2NvbmZpZ3VyYXRpb25GaWxlfSIKKyAgICAgICAgICAgIFsgLXIgIiR7Y29uZmlndXJhdGlvbkZpbGV9IiBdIHx8IHN5bnRheEVycm9yICJmaWxlIG5vdCByZWFkYWJsZTogJHtjb25maWd1cmF0aW9uRmlsZX0iCisgICAgICAgICAgICBbIC13ICIke2NvbmZpZ3VyYXRpb25GaWxlfSIgXSB8fCBzeW50YXhFcnJvciAiZmlsZSBub3Qgd3JpdGFibGU6ICR7Y29uZmlndXJhdGlvbkZpbGV9IgorICAgICAgICAgICAgb3V0cHV0RmlsZT0iJHtjb25maWd1cmF0aW9uRmlsZX0ubmV3IgorICAgICAgICAgICAgZXhlYyA8IiR7Y29uZmlndXJhdGlvbkZpbGV9IiA+IiR7b3V0cHV0RmlsZX0iCisgICAgICAgICBmaQorICAgICAgICAgc2VkU2NyaXB0PSIiCisgICAgICAgICBwdXRTZWRDb21tYW5kICJcJGFcXAorXFwKK2BtYWtlSGVhZGVyTGluZSBVcGRhdGVkYFxcCitgbWFrZVBhcmFtZXRlckxpbmVgXFwKKyIKKyAgICAgIH0KKyAgICAgIHB1dENvbmZpZ3VyYXRpb25EaXJlY3RpdmUoKQorICAgICAgeworICAgICAgICAgdmFsdWU9ImBlY2hvICIkezJ9IiB8IHNlZCAtZSAncyVcXChbL1xcXVxcKSVcXFxcXFwxJWcnYCIKKyAgICAgICAgIHB1dFNlZENvbW1hbmQgIi9eW1s6c3BhY2U6XV0qJHsxfVtbOnNwYWNlOl1dL3MvXi8jLyIKKyAgICAgICAgIHB1dFNlZENvbW1hbmQgIlwkYSR7MX0gJHt2YWx1ZX0iCisgICAgICB9CisgICAgICBmaW5hbGl6ZUNvbmZpZ3VyYXRpb25GaWxlKCkKKyAgICAgIHsKKyAgICAgICAgIHNlZCAtZSAiJHtzZWRTY3JpcHR9IgorICAgICAgICAgWyAtbiAiJHtvdXRwdXRGaWxlfSIgXSAmJiBtdiAtZiAiJHtvdXRwdXRGaWxlfSIgIiR7Y29uZmlndXJhdGlvbkZpbGV9IgorICAgICAgfQorICAgICAgOzsKKyAgICopIGludGVybmFsRXJyb3IgInVuaW1wbGVtZW50ZWQgYWN0aW9uOiAke3JlcXVlc3RlZEFjdGlvbn0iOzsKK2VzYWMKKwordHJhbnNsYXRlRGV2aWNlX25vbmUoKQoreworICAgOgorfQordHJhbnNsYXRlRGV2aWNlX2RldmZzKCkKK3sKKyAgIG1pbm9yPSIke2RldmljZSN0dHlTfSIKKyAgIGlmIFsgIiR7bWlub3J9IiAhPSAiJHtkZXZpY2V9IiBdCisgICB0aGVuCisgICAgICBkZXZpY2U9InR0cy8ke21pbm9yfSIKKyAgICAgIHJldHVybiAwCisgICBmaQorICAgbWlub3I9IiR7ZGV2aWNlI2xwfSIKKyAgIGlmIFsgIiR7bWlub3J9IiAhPSAiJHtkZXZpY2V9IiBdCisgICB0aGVuCisgICAgICBkZXZpY2U9InByaW50ZXJzLyR7bWlub3J9IgorICAgICAgcmV0dXJuIDAKKyAgIGZpCisgICBwcm9ncmFtTWVzc2FnZSAidW5zdXBwb3J0ZWQgb2xkLXN0eWxlIGRldmljZTogJHtkZXZpY2V9IgorfQordHJhbnNsYXRlRGV2aWNlX29sZCgpCit7CisgICBtYWpvcj0iJHtkZXZpY2UlJS8qfSIgCisgICBpZiBbICIke21ham9yfSIgIT0gIiR7ZGV2aWNlfSIgXQorICAgdGhlbgorICAgICAgbWlub3I9IiR7ZGV2aWNlIyovfSIKKyAgICAgIGNhc2UgIiR7bWFqb3J9IgorICAgICAgaW4KKyAgICAgICAgIHR0cykgZGV2ZnM9InR0eVMke21pbm9yfSI7OworICAgICAgICAgcHJpbnRlcnMpIGRldmZzPSJscCR7bWlub3J9Ijs7CisgICAgICBlc2FjCisgICBmaQorICAgaWYgWyAtbiAiJHtkZXZmc30iIF0KKyAgIHRoZW4KKyAgICAgIGRldmljZT0iJHtkZXZmc30iCisgICBlbHNlCisgICAgICBwcm9ncmFtTWVzc2FnZSAidW5zdXBwb3J0ZWQgZGV2ZnMgZGV2aWNlOiAke2RldmljZX0iCisgICBmaQorfQorCittYWtlSGVhZGVyTGluZSgpCit7CisgICBlY2hvICIjICR7MX0gYnkgYnJsdHR5LWJwMmNmYGRhdGUgKycgb24gJVktJW0tJWQgYXQgJUg6JU06JVMgJVogKFVUQyV6KSdgLiIKK30KK21ha2VQYXJhbWV0ZXJMaW5lKCkKK3sKKyAgIGVjaG8gIiMgQm9vdCBQYXJhbWV0ZXI6JHtib290UGFyYW1ldGVyfSIKK30KK3B1dENvbmZpZ3VyYXRpb25GaWxlKCkKK3sKKyAgIHN0YXJ0Q29uZmlndXJhdGlvbkZpbGUKKyAgIFsgLW4gIiR7YnJhaWxsZURyaXZlcn0iIF0gJiYgcHV0Q29uZmlndXJhdGlvbkRpcmVjdGl2ZSAiYnJhaWxsZS1kcml2ZXIiICIke2JyYWlsbGVEcml2ZXJ9IgorICAgWyAtbiAiJHticmFpbGxlRGV2aWNlfSIgXSAmJiB7CisgICAgICBkZXZpY2U9ImBlY2hvICIke2JyYWlsbGVEZXZpY2V9IiB8IHNlZCAtZSAncyUvLyolLyVnJyAtZSAncyVeL2Rldi8lJSdgIgorICAgICAgaWYgWyAiJHtkZXZpY2UjL30iID0gIiR7ZGV2aWNlfSIgXQorICAgICAgdGhlbgorICAgICAgICAgdHJhbnNsYXRlRGV2aWNlXyR7ZGV2aWNlVHJhbnNsYXRpb259CisgICAgICBmaQorICAgICAgcHV0Q29uZmlndXJhdGlvbkRpcmVjdGl2ZSAiYnJhaWxsZS1kZXZpY2UiICIke2RldmljZX0iCisgICB9CisgICBbIC1uICIke3RleHRUYWJsZX0iIF0gJiYgcHV0Q29uZmlndXJhdGlvbkRpcmVjdGl2ZSAidGV4dC10YWJsZSIgIiR7dGV4dFRhYmxlfSIKKyAgIGZpbmFsaXplQ29uZmlndXJhdGlvbkZpbGUKK30KK3BhcnNlQm9vdFBhcmFtZXRlcigpCit7CisgICBib290UGFyYW1ldGVyPSIke2Jvb3RQYXJhbWV0ZXJ9ICR7MX0iCisgICBudW1iZXI9MQorICAgd2hpbGUgWyAiJHtudW1iZXJ9IiAtbGUgMyBdCisgICBkbworICAgICAgY3V0PSJjdXQgLWQsIC1mJHtudW1iZXJ9IgorICAgICAgWyAiJHtudW1iZXJ9IiAtZ3QgMSBdICYmIGN1dD0iJHtjdXR9IC1zIgorICAgICAgb3BlcmFuZD0iYGVjaG8gJHsxfSB8ICR7Y3V0fWAiCisgICAgICBpZiBbIC1uICIke29wZXJhbmR9IiBdCisgICAgICB0aGVuCisgICAgICAgICBjYXNlICIke251bWJlcn0iCisgICAgICAgICBpbgorICAgICAgICAgICAgMSkgYnJhaWxsZURyaXZlcj0iJHtvcGVyYW5kfSI7OworICAgICAgICAgICAgMikgYnJhaWxsZURldmljZT0iJHtvcGVyYW5kfSI7OworICAgICAgICAgICAgMykgdGV4dFRhYmxlPSIke29wZXJhbmR9Ijs7CisgICAgICAgICBlc2FjCisgICAgICBmaQorICAgICAgbnVtYmVyPSJgZXhwciAke251bWJlcn0gKyAxYCIKKyAgIGRvbmUKK30KK3B1dEJvb3RQYXJhbWV0ZXIoKQoreworICAgcGFyc2VCb290UGFyYW1ldGVyICIkezF9IgorICAgcHV0Q29uZmlndXJhdGlvbkZpbGUKK30KK3BhcnNlQm9vdENvbW1hbmQoKQoreworICAgZm91bmQ9ZmFsc2UKKyAgIHdoaWxlIFsgIiR7I30iIC1ndCAwIF0KKyAgIGRvCisgICAgICBjYXNlICIkezF9IgorICAgICAgaW4KKyAgICAgICAgICJicmx0dHk9IiopCisgICAgICAgICAgICBmb3VuZD10cnVlCisgICAgICAgICAgICBwYXJzZUJvb3RQYXJhbWV0ZXIgIiR7MSMqPX0iCisgICAgICAgICAgICA7OworICAgICAgZXNhYworICAgICAgc2hpZnQKKyAgIGRvbmUKKyAgICIke2ZvdW5kfSIgJiYgcHV0Q29uZmlndXJhdGlvbkZpbGUKK30KKworYnJhaWxsZURyaXZlcj0iIgorYnJhaWxsZURldmljZT0iIgordGV4dFRhYmxlPSIiCitib290Q29tbWFuZEZpbGU9Ii9wcm9jL2NtZGxpbmUiCitpZiBbIC1uICIke3JlcXVlc3RlZFBhcmFtZXRlcn0iIF0KK3RoZW4KKyAgIHB1dEJvb3RQYXJhbWV0ZXIgIiR7cmVxdWVzdGVkUGFyYW1ldGVyfSIKK2VsaWYgWyAtZiAiJHtib290Q29tbWFuZEZpbGV9IiBdCit0aGVuCisgICBwYXJzZUJvb3RDb21tYW5kIGBjYXQgIiR7Ym9vdENvbW1hbmRGaWxlfSJgCitlbGlmIFsgLW4gIiR7YnJsdHR5fSIgXQordGhlbgorICAgcHV0Qm9vdFBhcmFtZXRlciAiJHticmx0dHl9IgorZmkKK2V4aXQgMApkaWZmIC0tZ2l0IGEvQm9vdGRpc2tzL3JobWtib290IGIvQm9vdGRpc2tzL3JobWtib290Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjIwZTkwZGUKLS0tIC9kZXYvbnVsbAorKysgYi9Cb290ZGlza3Mvcmhta2Jvb3QKQEAgLTAsMCArMSwyMCBAQAorIyEvYmluL3NoCisKK3NldCAtZQorCisjIE1ha2UgbG9jYWwgbW91bnQgcG9pbnRzCitta2RpciAtcCBtbnQxIG1udDIKKworIyBXb3JrIG9uIGEgY29weSBvZiBib290ZGlzayBpbWFnZQorY3AgLWYgYm9vdC5pbWcgbXlib290LmltZworbW91bnQgbXlib290LmltZyBtbnQxIC1vIGxvb3AgLXQgbXNkb3MKKworIyBNb2RpZnkgc3lzbGludXguY2ZnCitjYXQgPmNmZyA8PEVPRgorbGFiZWwgYnJsdHR5CisgIGtlcm5lbCB2bWxpbnV6CisgIGFwcGVuZCByb290PS9kZXYvZmQwIGxvYWRfcmFtZGlzaz0xIHByb21wdF9yYW1kaXNrPTEgbGFuZz0gdGV4dCBkZXZmcz1ub21vdW50IHJhbWRpc2tfc2l6ZT05MjE2CitFT0YKK2NhdCBtbnQxL3N5c2xpbnV4LmNmZyB8c2VkICdzL2RlZmF1bHQgbGludXgvZGVmYXVsdCBicmx0dHkvJyA+PmNmZworY3AgY2ZnIG1udDEvc3lzbGludXguY2ZnCit1bW91bnQgbW50MQpkaWZmIC0tZ2l0IGEvQm9vdGRpc2tzL3JobWtpc28gYi9Cb290ZGlza3Mvcmhta2lzbwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi44MDUyNDYyCi0tLSAvZGV2L251bGwKKysrIGIvQm9vdGRpc2tzL3JobWtpc28KQEAgLTAsMCArMSwzMzMgQEAKKyMhL2Jpbi9iYXNoIC1wCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisjICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorIworIyBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisjCisjIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisjCisjIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyMgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorIyBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyMKKyMgV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworIworIyBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworcHJvZ3JhbU5hbWU9IiR7MCMjKi99IgorcHJvZ3JhbU1lc3NhZ2UoKSB7CisgICBlY2hvID4mMiAiJHtwcm9ncmFtTmFtZX06ICR7MX0iCit9Citwcm9ncmFtRXJyb3IoKSB7CisgICBbIC1uICIkezF9IiBdICYmIHByb2dyYW1NZXNzYWdlICIkezF9IgorICAgZXhpdCAiJHsyOi0zfSIKK30KK3N5bnRheEVycm9yKCkgeworICAgcHJvZ3JhbUVycm9yICIkezF9IiAyCit9CisKK21vdW50X2V4dDIoKSB7CisgICBtb3VudCAtbyBsb29wIC10IGV4dDIgIiR7Mn0iICIkezF9IgorfQordW5tb3VudF9leHQyKCkgeworICAgdW1vdW50ICIkezF9IgorfQorY2hlY2tfZXh0MigpIHsKKyAgIHNldCAtLSAkKHN0YXQgLWMgJyVhICVzJyAtZiAtLSAiJHtpbml0cmRSb290fSIpCisgICBpbml0cmRBdmFpbGFibGVCbG9ja3M9IiR7MX0iCisgICBpbml0cmRCbG9ja1NpemU9IiR7Mn0iCisgICBzZXQgLS0gJChkdSAtLWJsb2NrLXNpemU9IiR7aW5pdHJkQmxvY2tTaXplfSIgLXMgIiR7YnJsdHR5SW5zdGFsbFJvb3R9IikKKyAgIGJybHR0eUluc3RhbGxCbG9ja3M9IiR7MX0iCisgICBzZXQgLS0gJChzdGF0IC1jICclcycgLS0gIiR7aW5pdHJkSW1hZ2V9IikKKyAgIGluaXRyZEltYWdlQnl0ZXM9IiR7MX0iCisgICBpbml0cmRJbWFnZUJsb2Nrcz0kKCggKGluaXRyZEltYWdlQnl0ZXMgKyBpbml0cmRCbG9ja1NpemUgLSAxKSAvIGluaXRyZEJsb2NrU2l6ZSApKQorICAgaW5pdHJkUGFkQmxvY2tzPSQoKCBicmx0dHlJbnN0YWxsQmxvY2tzIC0gaW5pdHJkQXZhaWxhYmxlQmxvY2tzICkpCisgICAoKCAoaW5pdHJkUGFkQmxvY2tzICs9IDIwMCkgPiAwICkpICYmIHsKKyAgICAgIGluaXRyZE1vdW50ZWQ9ZmFsc2UKKyAgICAgICJ1bm1vdW50XyR7aW5pdHJkVHlwZX0iICIke2luaXRyZFJvb3R9IiAiJHtpbml0cmRJbWFnZX0iCisKKyAgICAgIGRkIGJzPSIke2luaXRyZEJsb2NrU2l6ZX0iIGNvdW50PSIke2luaXRyZFBhZEJsb2Nrc30iIGlmPSIvZGV2L3plcm8iIG9mPSIke2luaXRyZEltYWdlfSIgc2Vlaz0iJHtpbml0cmRJbWFnZUJsb2Nrc30iCisgICAgICBlMmZzY2sgLXkgLWYgIiR7aW5pdHJkSW1hZ2V9IiAmJiByZXNpemUyZnMgIiR7aW5pdHJkSW1hZ2V9IiB8fCB7CisgICAgICAgICBuZXdJbWFnZT0iJHt0ZW1wb3JhcnlEaXJlY3Rvcnl9L25ldy4ke2luaXRyZFR5cGV9IgorICAgICAgICAgY3AgLVJwUGQgLS0gIiR7aW5pdHJkSW1hZ2V9IiAiJHtuZXdJbWFnZX0iCisgICAgICAgICBta2UyZnMgLXEgLWIgIiR7aW5pdHJkQmxvY2tTaXplfSIgLUYgIiR7bmV3SW1hZ2V9IgorCisgICAgICAgICBuZXdSb290PSIke3RlbXBvcmFyeURpcmVjdG9yeX0vbmV3IgorICAgICAgICAgbWtkaXIgIiR7bmV3Um9vdH0iCisKKyAgICAgICAgICJtb3VudF8ke2luaXRyZFR5cGV9IiAiJHtuZXdSb290fSIgIiR7bmV3SW1hZ2V9IgorICAgICAgICAgbmV3TW91bnRlZD10cnVlCisKKyAgICAgICAgICJtb3VudF8ke2luaXRyZFR5cGV9IiAiJHtpbml0cmRSb290fSIgIiR7aW5pdHJkSW1hZ2V9IgorICAgICAgICAgaW5pdHJkTW91bnRlZD10cnVlCisgICAgICAgICBjcCAtUnBQZCAtLSAiJHtpbml0cmRSb290fS8uIiAiJHtuZXdSb290fSIKKyAgICAgICAgIGluaXRyZE1vdW50ZWQ9ZmFsc2UKKyAgICAgICAgICJ1bm1vdW50XyR7aW5pdHJkVHlwZX0iICIke2luaXRyZFJvb3R9IiAiJHtpbml0cmRJbWFnZX0iCisKKyAgICAgICAgIG5ld01vdW50ZWQ9ZmFsc2UKKyAgICAgICAgICJ1bm1vdW50XyR7aW5pdHJkVHlwZX0iICIke25ld1Jvb3R9IiAiJHtuZXdJbWFnZX0iCisKKyAgICAgICAgIGNwIC0tICIke25ld0ltYWdlfSIgIiR7aW5pdHJkSW1hZ2V9IgorICAgICAgfQorCisgICAgICAibW91bnRfJHtpbml0cmRUeXBlfSIgIiR7aW5pdHJkUm9vdH0iICIke2luaXRyZEltYWdlfSIKKyAgICAgIGluaXRyZE1vdW50ZWQ9dHJ1ZQorICAgfQorfQorCittb3VudF9jcGlvKCkgeworICAgY2QgIiR7MX0iCisgICBjcGlvIC0tcXVpZXQgLWkgLUkgIiR7Mn0iCisgICBjZCAiJHt3b3JraW5nRGlyZWN0b3J5fSIKK30KK3VubW91bnRfY3BpbygpIHsKKyAgIGNkICIkezF9IgorICAgWyAtbiAiJHsyfSIgXSAmJiB7CisgICAgICBmaW5kIC4gLXByaW50IHwKKyAgICAgIHNlZCAtZSAnL15cLiQvZCcgLWUgJ3MvXlwuXC8vLycgfAorICAgICAgY3BpbyAtLXF1aWV0IC1vIC1IIG5ld2MgLU8gIiR7Mn0iCisgICB9CisgICBybSAtZiAtciAtLSAkKGxzIC0xIC1BKQorICAgY2QgIiR7d29ya2luZ0RpcmVjdG9yeX0iCit9CitjaGVja19jcGlvKCkgeworICAgOgorfQorCitvcmlnaW5hbEltYWdlPSJib290LmlzbyIKK21vZGlmaWVkSW1hZ2U9ImJybHR0eS5pc28iCiticmx0dHlQYXR0ZXJuPSJicmx0dHktKiIKK2JyYWlsbGVEcml2ZXJzPSJhbGwiCit0ZXh0VGFibGU9ImVuLW5hYmNjIgoraW52b2tlU2hlbGw9ZmFsc2UKKworc2hvd1VzYWdlKCkgeworICAgY2F0IDw8RU9GCitVc2FnZTogJHtwcm9ncmFtTmFtZX0gWy1vcHRpb24gLi4uXQorVGhlIGZvbGxvd2luZyBvcHRpb25zIGFyZSBzdXBwb3J0ZWQ6CistaSBmaWxlICAgICAgICAgVGhlIG9yaWdpbmFsIChpbnB1dCkgaW1hZ2UgKGRlZmF1bHQ6ICR7b3JpZ2luYWxJbWFnZX0pLgorLW8gZmlsZSAgICAgICAgIFRoZSBtb2RpZmllZCAob3V0cHV0KSBpbWFnZSAoZGVmYXVsdDogJHttb2RpZmllZEltYWdlfSkuCistYSBmaWxlICAgICAgICAgVGhlIEJSTFRUWSBhcmNoaXZlIChkZWZhdWx0OiAke2JybHR0eVBhdHRlcm59KS4KKy1iIGRyaXZlciwuLi4gICBUaGUgYnJhaWxsZSBkcml2ZXIocykgdG8gaW5jbHVkZSAoZGVmYXVsdDogJHticmFpbGxlRHJpdmVyc30pLgorLXQgZmlsZSAgICAgICAgIFRoZSB0ZXh0IHRhYmxlIHRvIGJ1aWxkIGluIChkZWZhdWx0OiAke3RleHRUYWJsZX0pLgorLXMgICAgICAgICAgICAgIEludm9rZSBhbiBpbnRlcmFjdGl2ZSBzaGVsbCB0byBpbnNwZWN0IHRoZSBtb2RpZmllZCBpbWFnZS4KKy1oICAgICAgICAgICAgICBEaXNwbGF5IHVzYWdlIGluZm9ybWF0aW9uIGFuZCBleGl0LgorRU9GCisgICBleGl0IDAKK30KKword2hpbGUgZ2V0b3B0cyAiOmk6bzphOmI6dDpzaCIgb3B0aW9uCitkbworICAgY2FzZSAiJHtvcHRpb259IgorICAgaW4KKyAgICAgIGkpIG9yaWdpbmFsSW1hZ2U9IiR7T1BUQVJHfSI7OworICAgICAgbykgbW9kaWZpZWRJbWFnZT0iJHtPUFRBUkd9Ijs7CisgICAgICBhKSBicmx0dHlQYXR0ZXJuPSIke09QVEFSR30iOzsKKyAgICAgIGIpIGJyYWlsbGVEcml2ZXJzPSIke09QVEFSR30iOzsKKyAgICAgIHQpIHRleHRUYWJsZT0iJHtPUFRBUkd9Ijs7CisgICAgICBzKSBpbnZva2VTaGVsbD10cnVlOzsKKyAgICAgIGgpIHNob3dVc2FnZTs7CisgICAgIFw/KSBzeW50YXhFcnJvciAidW5rbm93biBvcHRpb246IC0ke09QVEFSR30iOzsKKyAgICAgIDopIHN5bnRheEVycm9yICJtaXNzaW5nIG9wZXJhbmQ6IC0ke09QVEFSR30iOzsKKyAgICAgICopIHN5bnRheEVycm9yICJ1bmltcGxlbWVudGVkIG9wdGlvbjogLSR7b3B0aW9ufSI7OworICAgZXNhYworZG9uZQorc2hpZnQgJCgoT1BUSU5EIC0gMSkpCitbICIkeyN9IiAtZ3QgMCBdICYmIHN5bnRheEVycm9yICJ0b28gbWFueSBwYXJhbWV0ZXJzLiIKKworWyAtZiAiJHtvcmlnaW5hbEltYWdlfSIgXSB8fCBwcm9ncmFtRXJyb3IgIm9yaWdpbmFsIGltYWdlIG5vdCBmb3VuZDogJHtvcmlnaW5hbEltYWdlfSIKKworc2hvcHQgLXMgbnVsbGdsb2IgZXh0Z2xvYgorc2V0IC0tICRicmx0dHlQYXR0ZXJuCitbICIkeyN9IiAtZXEgMCBdICYmIHByb2dyYW1FcnJvciAiYnJsdHR5IGFyY2hpdmUgbm90IGZvdW5kOiAke2JybHR0eVBhdHRlcm59IgorWyAiJHsjfSIgLWd0IDEgXSAmJiB7CisgICBicmx0dHlBcmNoaXZlcz0iJChlY2hvICIkeyp9IiB8IHNlZCAtZSAncyUgJSwmJWcnKSIKKyAgIHByb2dyYW1FcnJvciAibW9yZSB0aGFuIG9uZSBicmx0dHkgYXJjaGl2ZTogJHticmx0dHlBcmNoaXZlc30iCit9Citicmx0dHlBcmNoaXZlPSIkezF9IgorCitjbGVhbnVwKCkgeworICAgc2V0ICtlCisgICBjZCAvCisgICAiJHtuZXdNb3VudGVkfSIgJiYgInVubW91bnRfJHtpbml0cmRUeXBlfSIgIiR7bmV3Um9vdH0iCisgICAiJHtpbml0cmRNb3VudGVkfSIgJiYgInVubW91bnRfJHtpbml0cmRUeXBlfSIgIiR7aW5pdHJkUm9vdH0iCisgICAiJHtvcmlnaW5hbE1vdW50ZWR9IiAmJiB1bW91bnQgIiR7b3JpZ2luYWxSb290fSIKKyAgIFsgLW4gIiR7dGVtcG9yYXJ5RGlyZWN0b3J5fSIgXSAmJiBybSAtciAiJHt0ZW1wb3JhcnlEaXJlY3Rvcnl9IgorfQorc2V0IC1lCitvcmlnaW5hbE1vdW50ZWQ9ZmFsc2UKK2luaXRyZE1vdW50ZWQ9ZmFsc2UKK25ld01vdW50ZWQ9ZmFsc2UKK3RyYXAgImNsZWFudXAiIDAKKword29ya2luZ0RpcmVjdG9yeT0iJHtQV0R9IgordGVtcG9yYXJ5RGlyZWN0b3J5PSIkKG1rdGVtcCAtZCAiJHtUTVBESVI6LS90bXB9LyR7cHJvZ3JhbU5hbWV9LlhYWFhYWCIpIgorCitvcmlnaW5hbFJvb3Q9IiR7dGVtcG9yYXJ5RGlyZWN0b3J5fS9vcmlnaW5hbCIKK21rZGlyICIke29yaWdpbmFsUm9vdH0iCittb3VudCAtbyBsb29wIC10IGlzbzk2NjAgIiR7b3JpZ2luYWxJbWFnZX0iICIke29yaWdpbmFsUm9vdH0iCitvcmlnaW5hbE1vdW50ZWQ9dHJ1ZQorCittb2RpZmllZFJvb3Q9IiR7dGVtcG9yYXJ5RGlyZWN0b3J5fS9tb2RpZmllZCIKK21rZGlyICIke21vZGlmaWVkUm9vdH0iCitjcCAtUnBQZCAtLSAiJHtvcmlnaW5hbFJvb3R9Ly4iICIke21vZGlmaWVkUm9vdH0iCisKK2xvYWRlckRpcmVjdG9yeT0iIgorZm9yIGRpcmVjdG9yeSBpbiBib290L2lzb2xpbnV4IGlzb2xpbnV4CitkbworICAgWyAtZCAiJHtvcmlnaW5hbFJvb3R9LyR7ZGlyZWN0b3J5fSIgXSAmJiB7CisgICAgICBsb2FkZXJEaXJlY3Rvcnk9IiR7ZGlyZWN0b3J5fSIKKyAgICAgIGJyZWFrCisgICB9Citkb25lCisKK2NvbmZpZ3VyYXRpb25GaWxlPSJpc29saW51eC5jZmciCitzZWQgLW4gLWUgJworMWlcCitwcm9tcHQgMVwKK3RpbWVvdXQgMFwKK2RlZmF1bHQgdGV4dFwKKworL14gKnByb21wdCAvZAorL14gKnRpbWVvdXQgL2QKKy9eICpkZWZhdWx0IC9kCisvXiAqbWVudSAgKmRlZmF1bHQgKiQvZAorL14gKmFwcGVuZC4qIHRleHQvcy8kLyBub2ZiLworL14gKmFwcGVuZC4qIHJlc2N1ZS9zLyQvIHRleHQgbm9mYi8KK3AKKycgPCIke29yaWdpbmFsUm9vdH0vJHtsb2FkZXJEaXJlY3Rvcnl9LyR7Y29uZmlndXJhdGlvbkZpbGV9IiA+IiR7bW9kaWZpZWRSb290fS8ke2xvYWRlckRpcmVjdG9yeX0vJHtjb25maWd1cmF0aW9uRmlsZX0iCisKKyMgYm9vdE1lc3NhZ2U9ImJvb3QubXNnIgorIyBlY2hvIC1uIC1lICdcYScgPiIke21vZGlmaWVkUm9vdH0vJHtsb2FkZXJEaXJlY3Rvcnl9LyR7Ym9vdE1lc3NhZ2V9IgorIyBjYXQgIiR7b3JpZ2luYWxSb290fS8ke2xvYWRlckRpcmVjdG9yeX0vJHtib290TWVzc2FnZX0iID4+IiR7bW9kaWZpZWRSb290fS8ke2xvYWRlckRpcmVjdG9yeX0vJHtib290TWVzc2FnZX0iCisKK2luaXRyZEltYWdlPSIke3RlbXBvcmFyeURpcmVjdG9yeX0vaW5pdHJkLmltZyIKK2luaXRyZFBhdGg9IiR7bW9kaWZpZWRSb290fS8ke2xvYWRlckRpcmVjdG9yeX0vaW5pdHJkLmltZyIKK2d1bnppcCAtYyAiJHtpbml0cmRQYXRofSIgPiIke2luaXRyZEltYWdlfSIKKworaW5pdHJkRGVzY3JpcHRpb249ImBmaWxlIC1iICIke2luaXRyZEltYWdlfSJgIgorY2FzZSAiJHtpbml0cmREZXNjcmlwdGlvbn0iCitpbgorICAgKiIgZXh0MiAiKikgaW5pdHJkVHlwZT1leHQyOzsKKyAgICoiIGNwaW8gIiopIGluaXRyZFR5cGU9Y3Bpbzs7CisgICAqKSBwcm9ncmFtRXJyb3IgInVuc3VwcG9ydGVkIGluaXRyZCBpbWFnZSBmb3JtYXQ6ICR7aW5pdHJkRGVzY3JpcHRpb259IgorZXNhYworCitpbml0cmRSb290PSIke3RlbXBvcmFyeURpcmVjdG9yeX0vaW5pdHJkIgorbWtkaXIgIiR7aW5pdHJkUm9vdH0iCisibW91bnRfJHtpbml0cmRUeXBlfSIgIiR7aW5pdHJkUm9vdH0iICIke2luaXRyZEltYWdlfSIKK2luaXRyZE1vdW50ZWQ9dHJ1ZQorCitmb3VuZD1mYWxzZQorZm9yIG5hbWUgaW4gbGludXhyYyBpbml0CitkbworICAgbGludXhyY1BhdGg9IiR7aW5pdHJkUm9vdH0vJHtuYW1lfSIKKyAgIGluaXRQYXRoPSIkKHJlYWRsaW5rICIke2xpbnV4cmNQYXRofSIpIiAmJiB7CisgICAgICBmb3VuZD10cnVlCisgICAgICBicmVhaworICAgfQorZG9uZQorIiR7Zm91bmR9IiB8fCBwcm9ncmFtRXJyb3IgImxpbnV4cmMgbm90IGZvdW5kLiIKK3JtICIke2xpbnV4cmNQYXRofSIKK2xuIC1zIC9iaW4vYnJsdHR5ICIke2xpbnV4cmNQYXRofSIKKworZGV2aWNlRGlyZWN0b3J5PSIke2luaXRyZFJvb3R9L2RldiIKK2Vuc3VyZURldmljZXMoKSB7CisgICB0eXBlc2V0IHR5cGU9IiR7MX0iCisgICB0eXBlc2V0IG1ham9yPSIkezJ9IgorICAgdHlwZXNldCBtaW5vcj0iJHszfSIKKyAgIHR5cGVzZXQgcHJlZml4PSIkezR9IgorICAgdHlwZXNldCBsYXN0PSIkezV9IgorICAgdHlwZXNldCBzdWZmaXg9IiR7Nn0iCisgICB0eXBlc2V0IG51bWJlcj0wCisgICB3aGlsZSAoKG51bWJlciA8PSBsYXN0KSkKKyAgIGRvCisgICAgICB0eXBlc2V0IHBhdGg9IiR7ZGV2aWNlRGlyZWN0b3J5fS8ke3ByZWZpeH0ke3N1ZmZpeH0iCisgICAgICBbIC1lICIke3BhdGh9IiBdIHx8IG1rbm9kIC1tIDYwMCAiJHtwYXRofSIgIiR7dHlwZX0iICIke21ham9yfSIgIiQoKG1pbm9yKyspKSIKKyAgICAgIHN1ZmZpeD0kKCgrK251bWJlcikpCisgICBkb25lCit9CitlbnN1cmVEZXZpY2VzIGMgNyAwIHZjcyAxMgorZW5zdXJlRGV2aWNlcyBjIDcgMTI4IHZjc2EgMTIKK2Vuc3VyZURldmljZXMgYyA1IDEgY29uc29sZSAwCitlbnN1cmVEZXZpY2VzIGMgNCAwIHR0eSAxMiAwCitlbnN1cmVEZXZpY2VzIGMgNCA2NCB0dHlTIDMgMAorZW5zdXJlRGV2aWNlcyBjIDE4OCAwIHR0eVVTQiAxIDAKKworY2FzZSAiJHticmx0dHlBcmNoaXZlfSIKK2luCisgICAqLnRhci5nenwqLnRneikKKyAgICAgIHRhciB4IC16IC1DICIke3RlbXBvcmFyeURpcmVjdG9yeX0iIC1mICIke2JybHR0eUFyY2hpdmV9IgorICAgICAgOzsKKworICAgKi50YXIpCisgICAgICB0YXIgeCAtQyAiJHt0ZW1wb3JhcnlEaXJlY3Rvcnl9IiAtZiAiJHticmx0dHlBcmNoaXZlfSIKKyAgICAgIDs7CisKKyAgICopCisgICAgICBwcm9ncmFtRXJyb3IgInVuc3VwcG9ydGVkIGJybHR0eSBhcmNoaXZlIG5hbWU6ICR7YnJsdHR5QXJjaGl2ZX0iCisgICAgICA7OworZXNhYworCitzaG9wdCAtcyBudWxsZ2xvYgorc2V0IC0tICR7dGVtcG9yYXJ5RGlyZWN0b3J5fS9icmx0dHkqCitbICIkeyN9IiAtZXEgMCBdICYmIHByb2dyYW1FcnJvciAiYnJsdHR5IGJ1aWxkIGRpcmVjdG9yeSBub3QgZm91bmQuIgorYnJsdHR5QnVpbGRSb290PSIkezF9IgorCiticmx0dHlJbnN0YWxsUm9vdD0iJHt0ZW1wb3JhcnlEaXJlY3Rvcnl9L2luc3RhbGwiCisoCisgICBzZXQgLWUKKyAgIHRyYXAgIiIgMAorICAgY2QgIiR7YnJsdHR5QnVpbGRSb290fSIKKworICAgc2hvcHQgLXMgbnVsbGdsb2IKKyAgIHNldCAtLSAuL2F1dG9nZW4qCisgICBmb3IgYXV0b2dlbgorICAgZG8KKyAgICAgIFsgLWYgIiR7YXV0b2dlbn0iIC1hIC1yICIke2F1dG9nZW59IiAgLWEgLXggIiR7YXV0b2dlbn0iIF0gICYmICIke2F1dG9nZW59IgorICAgZG9uZQorCisgICAuL2NvbmZpZ3VyZSAtLXF1aWV0IC0td2l0aC1pbnN0YWxsLXJvb3Q9IiR7YnJsdHR5SW5zdGFsbFJvb3R9IiBcCisJICAgICAgIC0td2l0aC1pbml0LXBhdGg9IiR7aW5pdFBhdGh9IiAtLXdpdGgtc3RkZXJyLXBhdGg9Ii9kZXYvdHR5NSIgXAorICAgICAgICAgICAgICAgLS13aXRoLXdyaXRhYmxlLWRpcmVjdG9yeT0iL3RtcCIgXAorICAgICAgICAgICAgICAgLS13aXRoLXNjcmVlbi1kcml2ZXI9Imx4LC1hbGwiIFwKKwkgICAgICAgLS13aXRoLWJyYWlsbGUtZHJpdmVyPSItdHQsLXZyLCR7YnJhaWxsZURyaXZlcnN9IiBcCisJICAgICAgIC0td2l0aC10ZXh0LXRhYmxlPSIke3RleHRUYWJsZX0iIFwKKwkgICAgICAgLS1kaXNhYmxlLXNwZWVjaC1zdXBwb3J0IC0td2l0aG91dC1saWJicmFpbGxlIC0td2l0aG91dC1jdXJzZXMgLS1kaXNhYmxlLXggXAorCSAgICAgICAtLWRpc2FibGUtcGNtLXN1cHBvcnQgLS1kaXNhYmxlLWZtLXN1cHBvcnQgLS1kaXNhYmxlLW1pZGktc3VwcG9ydCBcCisgICAgICAgICAgICAgICAtLWVuYWJsZS1zdGFuZGFsb25lLXByb2dyYW1zIC0tZGlzYWJsZS1hcGkgLS1kaXNhYmxlLWdwbSAtLWRpc2FibGUtaWN1CisgICBtYWtlIC1zIC1DIFByb2dyYW1zIGFsbAorICAgc3RyaXAgUHJvZ3JhbXMvYnJsdHR5CisgICBtYWtlIC1zIC1DIFByb2dyYW1zIGluc3RhbGwtcHJvZ3JhbXMgaW5zdGFsbC1kYXRhLWZpbGVzIGluc3RhbGwtdGFibGVzCispIHx8IGV4aXQgIiR7P30iCisKKyJjaGVja18ke2luaXRyZFR5cGV9IgorKAorICAgc2V0IC1lCisgICBjZCAiJHticmx0dHlJbnN0YWxsUm9vdH0iCisgICBjcCAtLXBhcmVudHMgLS0gJChmaW5kIC4gLXR5cGUgZiAtcHJpbnRmICclUCAnKSAiJHtpbml0cmRSb290fSIKKykgfHwgZXhpdCAxCisKKyIke2ludm9rZVNoZWxsfSIgJiYgKAorICAgc2V0ICtlCisgICB0cmFwICIiIDAKKworICAgY2QgIiR7dGVtcG9yYXJ5RGlyZWN0b3J5fSIKKyAgICIke1NIRUxMOi0vYmluL3NofSIKKyAgIGV4aXQgMAorKQorCitpbml0cmRNb3VudGVkPWZhbHNlCisidW5tb3VudF8ke2luaXRyZFR5cGV9IiAiJHtpbml0cmRSb290fSIgIiR7aW5pdHJkSW1hZ2V9IgorZ3ppcCAtYyAtOSAiJHtpbml0cmRJbWFnZX0iID4iJHtpbml0cmRQYXRofSIKKworaXNvVm9sdW1lSWRlbnRpZmllcj0iJChpc29pbmZvIC1kIC1pICIke29yaWdpbmFsSW1hZ2V9IiB8IGdyZXAgJ15Wb2x1bWUgaWQ6JyB8IGN1dCAtZCcgJyAtZjMtKSIKK2lzb0FwcGxpY2F0aW9uSWRlbnRpZmllcj0iJChpc29pbmZvIC1kIC1pICIke29yaWdpbmFsSW1hZ2V9IiB8IGdyZXAgJ15BcHBsaWNhdGlvbiBpZDonIHwgY3V0IC1kJyAnIC1mMy0pIgorbWtpc29mcyAtcXVpZXQgLUogLVIgLVQgLWJvb3QtbG9hZC1zaXplIDQgLWJvb3QtaW5mby10YWJsZSAtbm8tZW11bC1ib290IFwKKwktQSAiJHtpc29BcHBsaWNhdGlvbklkZW50aWZpZXJ9IiAtViAiJHtpc29Wb2x1bWVJZGVudGlmaWVyfSIgXAorCS1iICIke2xvYWRlckRpcmVjdG9yeX0vaXNvbGludXguYmluIiAtYyAiJHtsb2FkZXJEaXJlY3Rvcnl9L2Jvb3QuY2F0IiBcCisJLW8gIiR7bW9kaWZpZWRJbWFnZX0iICIke21vZGlmaWVkUm9vdH0iCitleGl0IDAKZGlmZiAtLWdpdCBhL0Jvb3RkaXNrcy9yaG1rcm9vdCBiL0Jvb3RkaXNrcy9yaG1rcm9vdApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi42OGY0MGY2Ci0tLSAvZGV2L251bGwKKysrIGIvQm9vdGRpc2tzL3JobWtyb290CkBAIC0wLDAgKzEsNjkgQEAKKyMhL2Jpbi9zaAorCitzZXQgLWUKKworIyBNYWtlIGxvY2FsIG1vdW50IHBvaW50cworbWtkaXIgLXAgbW50MSBtbnQyCisjIE1vdW50IGJvb3RkaXNrIGltYWdlIHJlYWQtb25seQorbW91bnQgYm9vdC5pbWcgbW50MSAtbyBsb29wLHJvIC10IG1zZG9zCisjIEdldCB0aGUgaW5pdGlhbCByYW1kaXNrIGl0IGNvbnRhaW5zCitjcCBtbnQxL2luaXRyZC5pbWcgLgorIyBGaW5pc2hlZCB3aXRoIGJvb3QgaW1hZ2UgZm9yIG5vdy4KK3Vtb3VudCBtbnQxCisjIFVuemlwIGFuZCBtb3VudCBpdAorbXYgaW5pdHJkLmltZyBpbml0cmQuZ3oKK2d1bnppcCBpbml0cmQuZ3oKKyMgUHJldmVudCB3YXJuaW5nIGFib3V0IGhhdmluZyB0byBjaGVjayB0aGUgZmlsZXN5c3RlbQordHVuZTJmcyAtYyAwIC1pIDAgaW5pdHJkID4vZGV2L251bGwKK21vdW50IGluaXRyZCBtbnQyIC1vIGxvb3AKKworIyBXb3JrIGluIGluaXRpYWwgcmFtZGlzaworIyBSZW5hbWUgaXQncyBpbml0CittdiBtbnQyL3NiaW4vaW5pdCBtbnQyL3NiaW4vaW5pdF9yZWFsCisjIFB1dCBCUkxUVFkgb24gaXQKK2NwIGJybHR0eSBtbnQyL3NiaW4KKyMgTmV3IGluaXQgaXMgYSBsaW5rIHRvIEJSTFRUWQorbG4gLXMgYnJsdHR5IG1udDIvc2Jpbi9pbml0CisjIEhlbHAgZmlsZXMgYW5kIHRhYmxlcyAoaWYgdGhlIHBlcnNvbiBpc24ndCBmYW1pbGlhci4uLikKK2lmIFsgLWQgZXRjYnJsdHR5IF07IHRoZW4KKyAgbWtkaXIgLXAgbW50Mi9ldGMvYnJsdHR5CisgIGluc3RhbGwgZXRjYnJsdHR5LyogbW50Mi9ldGMvYnJsdHR5CitmaQorIyBNYWtlIHN1cmUgc29tZSBuZWVkZWQgZGV2aWNlIGZpbGVzIGFyZSBwcmVzZW50CisjIHR0eVMwIHR0eVMxIHR0eTAKK2ZvciBpIGluIHR0eVMwIHR0eVMxIHR0eTA7IGRvCisgIGlmIFsgISAtZSBtbnQyL2Rldi8kaSBdOyB0aGVuCisgICAgY3AgLWEgL2Rldi8kaSBtbnQyL2Rldi8kaQorICAgIGNob3duIHJvb3Q6cm9vdCBtbnQyL2Rldi8kaQorICBmaQorZG9uZQorIyB2Y3NhIG9yIHZjc2EwCisjIE5CIHRoaXMgZG9lc24ndCBoYW5kbGUgZGV2ZnMuLi4KK2lmIFsgISAtZSBtbnQyL2Rldi92Y3NhIC1hICEgLWUgbW50Mi9kZXYvdmNzYTAgXTsgdGhlbgorICBmb3IgaSBpbiB2Y3NhIHZjc2EwOyBkbworICAgIGlmIFsgLWMgL2Rldi8kaSBdOyB0aGVuCisgICAgICBpZiBbIC1oIC9kZXYvJGkgXTsgdGhlbgorICAgICAgICB0Z3Q9ImByZWFkbGluayAvZGV2LyRpYCIKKyAgICAgICAgIyBUaGlzIGFzc3VtZXMgdGhlIGxpbmsgaXMgcmVsYXRpdmUuLi4KKyAgICAgICAgaWYgWyAtYyAvZGV2LyR0Z3QgXTsgdGhlbgorICAgICAgICAgIGNwIC1hIC9kZXYvJHRndCBtbnQyL2RldgorICAgICAgICBlbHNlCisgICAgICAgICAgZWNobyAiRmFpbGVkIHRvIGdldCBsaW5rIHRhcmdldCBvZiAvZGV2LyRpIgorICAgICAgICAgIGVjaG8gIkZhaWxlZCEhIgorICAgICAgICAgIGV4aXQgMQorICAgICAgICBmaQorICAgICAgZmkKKyAgICAgIGNwIC1hIC9kZXYvJGkgbW50Mi9kZXYKKyAgICBmaQorICBkb25lCitmaQoraWYgWyAhIC1lIG1udDIvZGV2L3Zjc2EgLWEgISAtZSBtbnQyL2Rldi92Y3NhMCBdOyB0aGVuCisgIGVjaG8gIkZhaWxlZCB0byBjcmVhdGUgbW50Mi9kZXYvdmNzYSIKKyAgZWNobyAiRmFpbGVkISIKKyAgZXhpdCAxCitmaQorCisjIERvbmUgd2l0aCBpbml0aWFsIHJhbWRpc2suIHdyYXAgaXQgdXAuCit1bW91bnQgbW50MgorZ3ppcCAtOSBpbml0cmQKK212IGluaXRyZC5neiBteXJvb3QuaW1nCmRpZmYgLS1naXQgYS9CdWlsZC9Mb2dzL0FuZHJvaWQubG9nIGIvQnVpbGQvTG9ncy9BbmRyb2lkLmxvZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hY2ViMDIyCi0tLSAvZGV2L251bGwKKysrIGIvQnVpbGQvTG9ncy9BbmRyb2lkLmxvZwpAQCAtMCwwICsxLDQ1IEBACitjZmctYW5kcm9pZDogcHJlcGFyaW5nIEFCSSBidWlsZCB0cmVlcworY2ZnLWFuZHJvaWQ6IGNvbmZpZ3VyaW5nIHRvcC1sZXZlbCBmb3IgYXJtZWFiaS12N2EKK2NmZy1hbmRyb2lkLWFiaTogaW5zdGFsbGluZyB0b29sIGNoYWluIGZvciBBQkk6IGFybWVhYmktdjdhCitUb29sY2hhaW4gaW5zdGFsbGVkIHRvIC4uLi9icmx0dHkvQW5kcm9pZC9BQkkvYXJtZWFiaS12N2EvVG9vbENoYWluLgorY2ZnLWFuZHJvaWQtYWJpOiBjb25maWd1cmluZyBidWlsZDogLi4uL2JybHR0eQorY29uZmlndXJlOiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQKK2NmZy1hbmRyb2lkLWFiaTogaW5zdGFsbGluZyB0b29sIGNoYWluIGZvciBBQkk6IGFybTY0LXY4YQorVG9vbGNoYWluIGluc3RhbGxlZCB0byAuLi4vYnJsdHR5L0FuZHJvaWQvQUJJL2FybTY0LXY4YS9Ub29sQ2hhaW4uCitjZmctYW5kcm9pZC1hYmk6IGNvbmZpZ3VyaW5nIGJ1aWxkOiAuLi4vYnJsdHR5L0FuZHJvaWQvQUJJL2FybTY0LXY4YQorY29uZmlndXJlOiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQKK2NmZy1hbmRyb2lkLWFiaTogY29uZmlndXJpbmcgYnVpbGQ6IC4uLi9icmx0dHkvQW5kcm9pZC9BQkkvYXJtZWFiaS12N2EKK2NvbmZpZ3VyZTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0CitjZmctYW5kcm9pZC1hYmk6IGluc3RhbGxpbmcgdG9vbCBjaGFpbiBmb3IgQUJJOiB4ODYKK1Rvb2xjaGFpbiBpbnN0YWxsZWQgdG8gLi4uL2JybHR0eS9BbmRyb2lkL0FCSS94ODYvVG9vbENoYWluLgorY2ZnLWFuZHJvaWQtYWJpOiBjb25maWd1cmluZyBidWlsZDogLi4uL2JybHR0eS9BbmRyb2lkL0FCSS94ODYKK2NvbmZpZ3VyZTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0CitjZmctYW5kcm9pZC1hYmk6IGluc3RhbGxpbmcgdG9vbCBjaGFpbiBmb3IgQUJJOiB4ODZfNjQKK1Rvb2xjaGFpbiBpbnN0YWxsZWQgdG8gLi4uL2JybHR0eS9BbmRyb2lkL0FCSS94ODZfNjQvVG9vbENoYWluLgorY2ZnLWFuZHJvaWQtYWJpOiBjb25maWd1cmluZyBidWlsZDogLi4uL2JybHR0eS9BbmRyb2lkL0FCSS94ODZfNjQKK2NvbmZpZ3VyZTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0CisuLi4vYnJsdHR5L1Byb2dyYW1zL21lbnUuYzo0MjoyOiB3YXJuaW5nOiBmaWxlIGdsb2JiaW5nIHN1cHBvcnQgbm90IGF2YWlsYWJsZSBvbiB0aGlzIHBsYXRmb3JtIFstVyN3YXJuaW5nc10KKyN3YXJuaW5nIGZpbGUgZ2xvYmJpbmcgc3VwcG9ydCBub3QgYXZhaWxhYmxlIG9uIHRoaXMgcGxhdGZvcm0KKyBeCisxIHdhcm5pbmcgZ2VuZXJhdGVkLgorLi4uL2JybHR0eS9Qcm9ncmFtcy9tZW51LmM6NDI6Mjogd2FybmluZzogZmlsZSBnbG9iYmluZyBzdXBwb3J0IG5vdCBhdmFpbGFibGUgb24gdGhpcyBwbGF0Zm9ybSBbLVcjd2FybmluZ3NdCisjd2FybmluZyBmaWxlIGdsb2JiaW5nIHN1cHBvcnQgbm90IGF2YWlsYWJsZSBvbiB0aGlzIHBsYXRmb3JtCisgXgorMSB3YXJuaW5nIGdlbmVyYXRlZC4KKy4uLi9icmx0dHkvUHJvZ3JhbXMvbWVudS5jOjQyOjI6IHdhcm5pbmc6IGZpbGUgZ2xvYmJpbmcgc3VwcG9ydCBub3QgYXZhaWxhYmxlIG9uIHRoaXMgcGxhdGZvcm0gWy1XI3dhcm5pbmdzXQorI3dhcm5pbmcgZmlsZSBnbG9iYmluZyBzdXBwb3J0IG5vdCBhdmFpbGFibGUgb24gdGhpcyBwbGF0Zm9ybQorIF4KKzEgd2FybmluZyBnZW5lcmF0ZWQuCisuLi4vYnJsdHR5L1Byb2dyYW1zL21lbnUuYzo0MjoyOiB3YXJuaW5nOiBmaWxlIGdsb2JiaW5nIHN1cHBvcnQgbm90IGF2YWlsYWJsZSBvbiB0aGlzIHBsYXRmb3JtIFstVyN3YXJuaW5nc10KKyN3YXJuaW5nIGZpbGUgZ2xvYmJpbmcgc3VwcG9ydCBub3QgYXZhaWxhYmxlIG9uIHRoaXMgcGxhdGZvcm0KKyBeCisxIHdhcm5pbmcgZ2VuZXJhdGVkLgorTm90ZTogU29tZSBpbnB1dCBmaWxlcyB1c2Ugb3Igb3ZlcnJpZGUgYSBkZXByZWNhdGVkIEFQSS4KK05vdGU6IFJlY29tcGlsZSB3aXRoIC1YbGludDpkZXByZWNhdGlvbiBmb3IgZGV0YWlscy4KK05vdGU6IFNvbWUgaW5wdXQgZmlsZXMgdXNlIHVuY2hlY2tlZCBvciB1bnNhZmUgb3BlcmF0aW9ucy4KK05vdGU6IFJlY29tcGlsZSB3aXRoIC1YbGludDp1bmNoZWNrZWQgZm9yIGRldGFpbHMuCitOb3RlOiBTb21lIGlucHV0IGZpbGVzIHVzZSBvciBvdmVycmlkZSBhIGRlcHJlY2F0ZWQgQVBJLgorTm90ZTogUmVjb21waWxlIHdpdGggLVhsaW50OmRlcHJlY2F0aW9uIGZvciBkZXRhaWxzLgorTm90ZTogU29tZSBpbnB1dCBmaWxlcyB1c2UgdW5jaGVja2VkIG9yIHVuc2FmZSBvcGVyYXRpb25zLgorTm90ZTogUmVjb21waWxlIHdpdGggLVhsaW50OnVuY2hlY2tlZCBmb3IgZGV0YWlscy4KK3JlYnVpbGQ6IGRvbmUKZGlmZiAtLWdpdCBhL0J1aWxkL0xvZ3MvRE9TLmxvZyBiL0J1aWxkL0xvZ3MvRE9TLmxvZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNjJkYjRhCi0tLSAvZGV2L251bGwKKysrIGIvQnVpbGQvTG9ncy9ET1MubG9nCkBAIC0wLDAgKzEsMjMgQEAKK21rZG9zYXJjOiBjb25maWd1cmluZyBidWlsZAorY29uZmlndXJlOiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQKK2NvbmZpZ3VyZTogV0FSTklORzogZnVuY3Rpb24gbm90IGF2YWlsYWJsZTogc3lzdGVtZDpzZF9zZXNzaW9uX2dldF92dCgpCitta2Rvc2FyYzogYnVpbGRpbmcgcHJvZ3JhbXMKKy4uLi9icmx0dHkvUHJvZ3JhbXMvbG9jay5jOjIxMzoyOiB3YXJuaW5nOiAjd2FybmluZyB0aHJlYWQgbG9jayBzdXBwb3J0IG5vdCBhdmFpbGFibGUgb24gdGhpcyBwbGF0Zm9ybQorSW4gZmlsZSBpbmNsdWRlZCBmcm9tIC4uLi9icmx0dHkvRHJpdmVycy9CcmFpbGxlL1RUWS9icmFpbGxlLmM6NDA6CisuLi4vYnJsdHR5L0hlYWRlcnMvZ2V0X2N1cnNlcy5oOjU0OjI6IHdhcm5pbmc6ICN3YXJuaW5nIGN1cnNlcyBwYWNrYWdlIGVpdGhlciB1bnNwZWNpZmllZCBvciB1bnN1cHBvcnRlZAorLi4uL2JybHR0eS9Qcm9ncmFtcy9pb19taXNjLmM6NDUyOjI6IHdhcm5pbmc6ICN3YXJuaW5nIHNvY2tldHMgbm90IHN1cHBvcnRlZCBvbiB0aGlzIHBsYXRmb3JtCitJbiBmaWxlIGluY2x1ZGVkIGZyb20gLi4uL2JybHR0eS9Qcm9ncmFtcy9icmx0dHktdHRiLmM6MTI5NDoKKy4uLi9icmx0dHkvSGVhZGVycy9nZXRfY3Vyc2VzLmg6NTQ6Mjogd2FybmluZzogI3dhcm5pbmcgY3Vyc2VzIHBhY2thZ2UgZWl0aGVyIHVuc3BlY2lmaWVkIG9yIHVuc3VwcG9ydGVkCitta2Rvc2FyYzogYnVpbGRpbmcgZG9jdW1lbnRhdGlvbgorUHJvY2Vzc2luZyBmaWxlIC4uLi9icmx0dHkvRG9jdW1lbnRzL01hbnVhbC1CUkxUVFkvRW5nbGlzaC9CUkxUVFkuc2dtbAorUHJvY2Vzc2luZyBmaWxlIC4uLi9icmx0dHkvRG9jdW1lbnRzL01hbnVhbC1CUkxUVFkvRW5nbGlzaC9CUkxUVFkuc2dtbAorUHJvY2Vzc2luZyBmaWxlIC4uLi9icmx0dHkvRG9jdW1lbnRzL01hbnVhbC1CUkxUVFkvRnJlbmNoL0JSTFRUWS5zZ21sCitQcm9jZXNzaW5nIGZpbGUgLi4uL2JybHR0eS9Eb2N1bWVudHMvTWFudWFsLUJSTFRUWS9GcmVuY2gvQlJMVFRZLnNnbWwKK1Byb2Nlc3NpbmcgZmlsZSAuLi4vYnJsdHR5L0RvY3VtZW50cy9NYW51YWwtQnJsQVBJL0VuZ2xpc2gvQnJsQVBJLnNnbWwKK1Byb2Nlc3NpbmcgZmlsZSAuLi4vYnJsdHR5L0RvY3VtZW50cy9NYW51YWwtQnJsQVBJL0VuZ2xpc2gvQnJsQVBJLnNnbWwKK21rZG9zYXJjOiBpbnN0YWxsaW5nIGZpbGVzCitta2Rvc2FyYzogdXBkYXRpbmcgZmlsZXMKK21rZG9zYXJjOiBjb252ZXJ0aW5nIHRleHQgZmlsZXMKK21rZG9zYXJjOiBjaGVja2luZyBmb3IgbmFtZSBjb2xsaXNpb25zCitta2Rvc2FyYzogY3JlYXRpbmcgYXJjaGl2ZQorbWtkb3NhcmM6IGRvbmUKZGlmZiAtLWdpdCBhL0J1aWxkL0xvZ3MvV2luZG93cy1saWJ1c2ItMS4wLmxvZyBiL0J1aWxkL0xvZ3MvV2luZG93cy1saWJ1c2ItMS4wLmxvZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMTQ0MjI1Ci0tLSAvZGV2L251bGwKKysrIGIvQnVpbGQvTG9ncy9XaW5kb3dzLWxpYnVzYi0xLjAubG9nCkBAIC0wLDAgKzEsNjkgQEAKK21rd2luOiByZXZpc2lvbiBpZGVudGlmaWVyOiBCUkxUVFktNi40LTI5MC1nYjcxMzA2MmVNCitta3dpbjogTWluR1cgY29tbWFuZCBub3QgZm91bmQ6IGxpbnV4ZG9jCitta3dpbjogY29weWluZyBzb3VyY2UgdHJlZQorbWt3aW46IGFwcGx5aW5nIHBhdGNoZXMKK3BhdGNoaW5nIGZpbGUgUHJvZ3JhbXMvdXNiX2xpYnVzYi0xLjAuYworcGF0Y2hpbmcgZmlsZSBQcm9ncmFtcy91c2JfbGlidXNiLmMKK21rd2luOiBjb25maWd1cmluZyBidWlsZAorbWt3aW46IGJ1aWxkaW5nIHByb2dyYW1zCitJbiBmaWxlIGluY2x1ZGVkIGZyb20gYzpcUHJvZ3JhbSBGaWxlcyAoeDg2KVxQeXRob24zOC0zMlxpbmNsdWRlL1B5dGhvbi5oOjg1LAorICAgICAgICAgICAgICAgICBmcm9tIGJybGFwaS5hdXRvLmM6NDoKK2M6XFByb2dyYW0gRmlsZXMgKHg4NilcUHl0aG9uMzgtMzJcaW5jbHVkZS9weXRpbWUuaDoxMjM6NTk6IHdhcm5pbmc6ICdzdHJ1Y3QgdGltZXZhbCcgZGVjbGFyZWQgaW5zaWRlIHBhcmFtZXRlciBsaXN0IHdpbGwgbm90IGJlIHZpc2libGUgb3V0c2lkZSBvZiB0aGlzIGRlZmluaXRpb24gb3IgZGVjbGFyYXRpb24KKyAgMTIzIHwgUHlBUElfRlVOQyhpbnQpIF9QeVRpbWVfRnJvbVRpbWV2YWwoX1B5VGltZV90ICp0cCwgc3RydWN0IHRpbWV2YWwgKnR2KTsKKyAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF5+fn5+fn4KK2M6XFByb2dyYW0gRmlsZXMgKHg4NilcUHl0aG9uMzgtMzJcaW5jbHVkZS9weXRpbWUuaDoxMzA6MTI6IHdhcm5pbmc6ICdzdHJ1Y3QgdGltZXZhbCcgZGVjbGFyZWQgaW5zaWRlIHBhcmFtZXRlciBsaXN0IHdpbGwgbm90IGJlIHZpc2libGUgb3V0c2lkZSBvZiB0aGlzIGRlZmluaXRpb24gb3IgZGVjbGFyYXRpb24KKyAgMTMwIHwgICAgIHN0cnVjdCB0aW1ldmFsICp0diwKKyAgICAgIHwgICAgICAgICAgICBefn5+fn5+CitjOlxQcm9ncmFtIEZpbGVzICh4ODYpXFB5dGhvbjM4LTMyXGluY2x1ZGUvcHl0aW1lLmg6MTM1OjEyOiB3YXJuaW5nOiAnc3RydWN0IHRpbWV2YWwnIGRlY2xhcmVkIGluc2lkZSBwYXJhbWV0ZXIgbGlzdCB3aWxsIG5vdCBiZSB2aXNpYmxlIG91dHNpZGUgb2YgdGhpcyBkZWZpbml0aW9uIG9yIGRlY2xhcmF0aW9uCisgIDEzNSB8ICAgICBzdHJ1Y3QgdGltZXZhbCAqdHYsCisgICAgICB8ICAgICAgICAgICAgXn5+fn5+fgorYnJsYXBpLmF1dG8uYzogSW4gZnVuY3Rpb24gJ19fUHl4X0ltcG9ydFR5cGUnOgorYnJsYXBpLmF1dG8uYzoyNDE1MToxMzogd2FybmluZzogdW5rbm93biBjb252ZXJzaW9uIHR5cGUgY2hhcmFjdGVyICd6JyBpbiBmb3JtYXQgWy1XZm9ybWF0PV0KKzI0MTUxIHwgICAgICAgICAgICAgIiVzLiVzIHNpemUgY2hhbmdlZCwgbWF5IGluZGljYXRlIGJpbmFyeSBpbmNvbXBhdGliaWxpdHkuICIKKyAgICAgIHwgICAgICAgICAgICAgXn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KK2JybGFwaS5hdXRvLmM6MjQxNTI6MjQ6IG5vdGU6IGZvcm1hdCBzdHJpbmcgaXMgZGVmaW5lZCBoZXJlCisyNDE1MiB8ICAgICAgICAgICAgICJFeHBlY3RlZCAlemQgZnJvbSBDIGhlYWRlciwgZ290ICV6ZCBmcm9tIFB5T2JqZWN0IiwKKyAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICBeCiticmxhcGkuYXV0by5jOjI0MTUxOjEzOiB3YXJuaW5nOiB1bmtub3duIGNvbnZlcnNpb24gdHlwZSBjaGFyYWN0ZXIgJ3onIGluIGZvcm1hdCBbLVdmb3JtYXQ9XQorMjQxNTEgfCAgICAgICAgICAgICAiJXMuJXMgc2l6ZSBjaGFuZ2VkLCBtYXkgaW5kaWNhdGUgYmluYXJ5IGluY29tcGF0aWJpbGl0eS4gIgorICAgICAgfCAgICAgICAgICAgICBefn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorYnJsYXBpLmF1dG8uYzoyNDE1Mjo0Nzogbm90ZTogZm9ybWF0IHN0cmluZyBpcyBkZWZpbmVkIGhlcmUKKzI0MTUyIHwgICAgICAgICAgICAgIkV4cGVjdGVkICV6ZCBmcm9tIEMgaGVhZGVyLCBnb3QgJXpkIGZyb20gUHlPYmplY3QiLAorICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXgorYnJsYXBpLmF1dG8uYzoyNDE1MToxMzogd2FybmluZzogdG9vIG1hbnkgYXJndW1lbnRzIGZvciBmb3JtYXQgWy1XZm9ybWF0LWV4dHJhLWFyZ3NdCisyNDE1MSB8ICAgICAgICAgICAgICIlcy4lcyBzaXplIGNoYW5nZWQsIG1heSBpbmRpY2F0ZSBiaW5hcnkgaW5jb21wYXRpYmlsaXR5LiAiCisgICAgICB8ICAgICAgICAgICAgIF5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CitJbiBmaWxlIGluY2x1ZGVkIGZyb20gYzpcUHJvZ3JhbSBGaWxlcyAoeDg2KVxQeXRob24zOC0zMlxpbmNsdWRlL1B5dGhvbi5oOjg1LAorICAgICAgICAgICAgICAgICBmcm9tIC4uLy4uLy4uL3NvdXJjZS9CaW5kaW5ncy9QeXRob24vYmluZGluZ3MuYzoyNToKK2M6XFByb2dyYW0gRmlsZXMgKHg4NilcUHl0aG9uMzgtMzJcaW5jbHVkZS9weXRpbWUuaDoxMjM6NTk6IHdhcm5pbmc6ICdzdHJ1Y3QgdGltZXZhbCcgZGVjbGFyZWQgaW5zaWRlIHBhcmFtZXRlciBsaXN0IHdpbGwgbm90IGJlIHZpc2libGUgb3V0c2lkZSBvZiB0aGlzIGRlZmluaXRpb24gb3IgZGVjbGFyYXRpb24KKyAgMTIzIHwgUHlBUElfRlVOQyhpbnQpIF9QeVRpbWVfRnJvbVRpbWV2YWwoX1B5VGltZV90ICp0cCwgc3RydWN0IHRpbWV2YWwgKnR2KTsKKyAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF5+fn5+fn4KK2M6XFByb2dyYW0gRmlsZXMgKHg4NilcUHl0aG9uMzgtMzJcaW5jbHVkZS9weXRpbWUuaDoxMzA6MTI6IHdhcm5pbmc6ICdzdHJ1Y3QgdGltZXZhbCcgZGVjbGFyZWQgaW5zaWRlIHBhcmFtZXRlciBsaXN0IHdpbGwgbm90IGJlIHZpc2libGUgb3V0c2lkZSBvZiB0aGlzIGRlZmluaXRpb24gb3IgZGVjbGFyYXRpb24KKyAgMTMwIHwgICAgIHN0cnVjdCB0aW1ldmFsICp0diwKKyAgICAgIHwgICAgICAgICAgICBefn5+fn5+CitjOlxQcm9ncmFtIEZpbGVzICh4ODYpXFB5dGhvbjM4LTMyXGluY2x1ZGUvcHl0aW1lLmg6MTM1OjEyOiB3YXJuaW5nOiAnc3RydWN0IHRpbWV2YWwnIGRlY2xhcmVkIGluc2lkZSBwYXJhbWV0ZXIgbGlzdCB3aWxsIG5vdCBiZSB2aXNpYmxlIG91dHNpZGUgb2YgdGhpcyBkZWZpbml0aW9uIG9yIGRlY2xhcmF0aW9uCisgIDEzNSB8ICAgICBzdHJ1Y3QgdGltZXZhbCAqdHYsCisgICAgICB8ICAgICAgICAgICAgXn5+fn5+fgorYzpcUHJvZ3JhbSBGaWxlcyAoeDg2KVxQeXRob24zOC0zMlxsaWJcc2l0ZS1wYWNrYWdlc1xzZXR1cHRvb2xzXGNvbW1hbmRcYmRpc3Rfd2luaW5zdC5weToyMDogU2V0dXB0b29sc0RlcHJlY2F0aW9uV2FybmluZzogYmRpc3Rfd2luaW5zdCBpcyBkZXByZWNhdGVkIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gYSBmdXR1cmUgdmVyc2lvbi4gVXNlIGJkaXN0X3doZWVsICh3aGVlbCBwYWNrYWdlcykgaW5zdGVhZC4KKyAgd2FybmluZ3Mud2FybigKK21rd2luOiBidWlsZGluZyBkb2N1bWVudHMKK2xpbnV4ZG9jIGlzIG5vdCBpbnN0YWxsZWQgLSBkb2N1bWVudCB3aWxsIG5vdCBiZSBtYWRlCitsaW51eGRvYyBpcyBub3QgaW5zdGFsbGVkIC0gZG9jdW1lbnQgd2lsbCBub3QgYmUgbWFkZQorbGludXhkb2MgaXMgbm90IGluc3RhbGxlZCAtIGRvY3VtZW50IHdpbGwgbm90IGJlIG1hZGUKK21rd2luOiBpbnN0YWxsaW5nIGZpbGVzCitjOlxQcm9ncmFtIEZpbGVzICh4ODYpXFB5dGhvbjM4LTMyXGxpYlxzaXRlLXBhY2thZ2VzXHNldHVwdG9vbHNcY29tbWFuZFxiZGlzdF93aW5pbnN0LnB5OjIwOiBTZXR1cHRvb2xzRGVwcmVjYXRpb25XYXJuaW5nOiBiZGlzdF93aW5pbnN0IGlzIGRlcHJlY2F0ZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiBhIGZ1dHVyZSB2ZXJzaW9uLiBVc2UgYmRpc3Rfd2hlZWwgKHdoZWVsIHBhY2thZ2VzKSBpbnN0ZWFkLgorICB3YXJuaW5ncy53YXJuKAorYzpcUHJvZ3JhbSBGaWxlcyAoeDg2KVxQeXRob24zOC0zMlxsaWJcc2l0ZS1wYWNrYWdlc1xzZXR1cHRvb2xzXGNvbW1hbmRcYmRpc3Rfd2luaW5zdC5weToyMDogU2V0dXB0b29sc0RlcHJlY2F0aW9uV2FybmluZzogYmRpc3Rfd2luaW5zdCBpcyBkZXByZWNhdGVkIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gYSBmdXR1cmUgdmVyc2lvbi4gVXNlIGJkaXN0X3doZWVsICh3aGVlbCBwYWNrYWdlcykgaW5zdGVhZC4KKyAgd2FybmluZ3Mud2FybigKK21rd2luOiB1cGRhdGluZyBmaWxlcworbWt3aW46IFVTQiBwYWNrYWdlOiBsaWJ1c2ItMS4wCitta3dpbjogaW5zdGFsbGluZyBwYWNrYWdlIGZpbGVzOiBMaWJVU0ItMS4wIChha2EgTGliVVNCeCkKK21rd2luOiBpbnN0YWxsaW5nIHBhY2thZ2UgZmlsZXM6IExpYlVTQi0xLjAgV2luVVNCIENvaW5zdGFsbGVycworICAgQ3JlYXRpbmcgbGlicmFyeSBicmxhcGkubGliIGFuZCBvYmplY3QgYnJsYXBpLmV4cAorbWt3aW46IGNyZWF0aW5nIGNvbmZpZ3VyYXRvcgorU3VjY2Vzc2Z1bGx5IGNvbXBpbGVkOiBDOlxVc2Vyc1xkYXZlXEFwcERhdGFcTG9jYWxcVGVtcFxicmx0dHktbWt3aW5caW5zdGFsbFxicmx0dHktd2luLTYuNC0yOTAtbGlidXNiLTEuMFxicmx0dHljbmYuZXhlCitta3dpbjogY29udmVydGluZyB0ZXh0IGZpbGVzCitta3dpbjogY3JlYXRpbmcgYXJjaGl2ZQorbWt3aW46IGNyZWF0aW5nIGluc3RhbGxlcgorbWt3aW46IGNsZWFuaW5nIHVwCitta3dpbjogZG9uZQpkaWZmIC0tZ2l0IGEvQnVpbGQvTG9ncy9XaW5kb3dzLWxpYnVzYi5sb2cgYi9CdWlsZC9Mb2dzL1dpbmRvd3MtbGlidXNiLmxvZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kOThhYWYxCi0tLSAvZGV2L251bGwKKysrIGIvQnVpbGQvTG9ncy9XaW5kb3dzLWxpYnVzYi5sb2cKQEAgLTAsMCArMSw2OCBAQAorbWt3aW46IHJldmlzaW9uIGlkZW50aWZpZXI6IEJSTFRUWS02LjQtMjkwLWdiNzEzMDYyZU0KK21rd2luOiBNaW5HVyBjb21tYW5kIG5vdCBmb3VuZDogbGludXhkb2MKK21rd2luOiBjb3B5aW5nIHNvdXJjZSB0cmVlCitta3dpbjogYXBwbHlpbmcgcGF0Y2hlcworcGF0Y2hpbmcgZmlsZSBQcm9ncmFtcy91c2JfbGlidXNiLTEuMC5jCitwYXRjaGluZyBmaWxlIFByb2dyYW1zL3VzYl9saWJ1c2IuYworbWt3aW46IGNvbmZpZ3VyaW5nIGJ1aWxkCitta3dpbjogYnVpbGRpbmcgcHJvZ3JhbXMKK0luIGZpbGUgaW5jbHVkZWQgZnJvbSBjOlxQcm9ncmFtIEZpbGVzICh4ODYpXFB5dGhvbjM4LTMyXGluY2x1ZGUvUHl0aG9uLmg6ODUsCisgICAgICAgICAgICAgICAgIGZyb20gYnJsYXBpLmF1dG8uYzo0OgorYzpcUHJvZ3JhbSBGaWxlcyAoeDg2KVxQeXRob24zOC0zMlxpbmNsdWRlL3B5dGltZS5oOjEyMzo1OTogd2FybmluZzogJ3N0cnVjdCB0aW1ldmFsJyBkZWNsYXJlZCBpbnNpZGUgcGFyYW1ldGVyIGxpc3Qgd2lsbCBub3QgYmUgdmlzaWJsZSBvdXRzaWRlIG9mIHRoaXMgZGVmaW5pdGlvbiBvciBkZWNsYXJhdGlvbgorICAxMjMgfCBQeUFQSV9GVU5DKGludCkgX1B5VGltZV9Gcm9tVGltZXZhbChfUHlUaW1lX3QgKnRwLCBzdHJ1Y3QgdGltZXZhbCAqdHYpOworICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXn5+fn5+fgorYzpcUHJvZ3JhbSBGaWxlcyAoeDg2KVxQeXRob24zOC0zMlxpbmNsdWRlL3B5dGltZS5oOjEzMDoxMjogd2FybmluZzogJ3N0cnVjdCB0aW1ldmFsJyBkZWNsYXJlZCBpbnNpZGUgcGFyYW1ldGVyIGxpc3Qgd2lsbCBub3QgYmUgdmlzaWJsZSBvdXRzaWRlIG9mIHRoaXMgZGVmaW5pdGlvbiBvciBkZWNsYXJhdGlvbgorICAxMzAgfCAgICAgc3RydWN0IHRpbWV2YWwgKnR2LAorICAgICAgfCAgICAgICAgICAgIF5+fn5+fn4KK2M6XFByb2dyYW0gRmlsZXMgKHg4NilcUHl0aG9uMzgtMzJcaW5jbHVkZS9weXRpbWUuaDoxMzU6MTI6IHdhcm5pbmc6ICdzdHJ1Y3QgdGltZXZhbCcgZGVjbGFyZWQgaW5zaWRlIHBhcmFtZXRlciBsaXN0IHdpbGwgbm90IGJlIHZpc2libGUgb3V0c2lkZSBvZiB0aGlzIGRlZmluaXRpb24gb3IgZGVjbGFyYXRpb24KKyAgMTM1IHwgICAgIHN0cnVjdCB0aW1ldmFsICp0diwKKyAgICAgIHwgICAgICAgICAgICBefn5+fn5+CiticmxhcGkuYXV0by5jOiBJbiBmdW5jdGlvbiAnX19QeXhfSW1wb3J0VHlwZSc6CiticmxhcGkuYXV0by5jOjI0MTUxOjEzOiB3YXJuaW5nOiB1bmtub3duIGNvbnZlcnNpb24gdHlwZSBjaGFyYWN0ZXIgJ3onIGluIGZvcm1hdCBbLVdmb3JtYXQ9XQorMjQxNTEgfCAgICAgICAgICAgICAiJXMuJXMgc2l6ZSBjaGFuZ2VkLCBtYXkgaW5kaWNhdGUgYmluYXJ5IGluY29tcGF0aWJpbGl0eS4gIgorICAgICAgfCAgICAgICAgICAgICBefn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorYnJsYXBpLmF1dG8uYzoyNDE1MjoyNDogbm90ZTogZm9ybWF0IHN0cmluZyBpcyBkZWZpbmVkIGhlcmUKKzI0MTUyIHwgICAgICAgICAgICAgIkV4cGVjdGVkICV6ZCBmcm9tIEMgaGVhZGVyLCBnb3QgJXpkIGZyb20gUHlPYmplY3QiLAorICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgIF4KK2JybGFwaS5hdXRvLmM6MjQxNTE6MTM6IHdhcm5pbmc6IHVua25vd24gY29udmVyc2lvbiB0eXBlIGNoYXJhY3RlciAneicgaW4gZm9ybWF0IFstV2Zvcm1hdD1dCisyNDE1MSB8ICAgICAgICAgICAgICIlcy4lcyBzaXplIGNoYW5nZWQsIG1heSBpbmRpY2F0ZSBiaW5hcnkgaW5jb21wYXRpYmlsaXR5LiAiCisgICAgICB8ICAgICAgICAgICAgIF5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CiticmxhcGkuYXV0by5jOjI0MTUyOjQ3OiBub3RlOiBmb3JtYXQgc3RyaW5nIGlzIGRlZmluZWQgaGVyZQorMjQxNTIgfCAgICAgICAgICAgICAiRXhwZWN0ZWQgJXpkIGZyb20gQyBoZWFkZXIsIGdvdCAlemQgZnJvbSBQeU9iamVjdCIsCisgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBeCiticmxhcGkuYXV0by5jOjI0MTUxOjEzOiB3YXJuaW5nOiB0b28gbWFueSBhcmd1bWVudHMgZm9yIGZvcm1hdCBbLVdmb3JtYXQtZXh0cmEtYXJnc10KKzI0MTUxIHwgICAgICAgICAgICAgIiVzLiVzIHNpemUgY2hhbmdlZCwgbWF5IGluZGljYXRlIGJpbmFyeSBpbmNvbXBhdGliaWxpdHkuICIKKyAgICAgIHwgICAgICAgICAgICAgXn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KK0luIGZpbGUgaW5jbHVkZWQgZnJvbSBjOlxQcm9ncmFtIEZpbGVzICh4ODYpXFB5dGhvbjM4LTMyXGluY2x1ZGUvUHl0aG9uLmg6ODUsCisgICAgICAgICAgICAgICAgIGZyb20gLi4vLi4vLi4vc291cmNlL0JpbmRpbmdzL1B5dGhvbi9iaW5kaW5ncy5jOjI1OgorYzpcUHJvZ3JhbSBGaWxlcyAoeDg2KVxQeXRob24zOC0zMlxpbmNsdWRlL3B5dGltZS5oOjEyMzo1OTogd2FybmluZzogJ3N0cnVjdCB0aW1ldmFsJyBkZWNsYXJlZCBpbnNpZGUgcGFyYW1ldGVyIGxpc3Qgd2lsbCBub3QgYmUgdmlzaWJsZSBvdXRzaWRlIG9mIHRoaXMgZGVmaW5pdGlvbiBvciBkZWNsYXJhdGlvbgorICAxMjMgfCBQeUFQSV9GVU5DKGludCkgX1B5VGltZV9Gcm9tVGltZXZhbChfUHlUaW1lX3QgKnRwLCBzdHJ1Y3QgdGltZXZhbCAqdHYpOworICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXn5+fn5+fgorYzpcUHJvZ3JhbSBGaWxlcyAoeDg2KVxQeXRob24zOC0zMlxpbmNsdWRlL3B5dGltZS5oOjEzMDoxMjogd2FybmluZzogJ3N0cnVjdCB0aW1ldmFsJyBkZWNsYXJlZCBpbnNpZGUgcGFyYW1ldGVyIGxpc3Qgd2lsbCBub3QgYmUgdmlzaWJsZSBvdXRzaWRlIG9mIHRoaXMgZGVmaW5pdGlvbiBvciBkZWNsYXJhdGlvbgorICAxMzAgfCAgICAgc3RydWN0IHRpbWV2YWwgKnR2LAorICAgICAgfCAgICAgICAgICAgIF5+fn5+fn4KK2M6XFByb2dyYW0gRmlsZXMgKHg4NilcUHl0aG9uMzgtMzJcaW5jbHVkZS9weXRpbWUuaDoxMzU6MTI6IHdhcm5pbmc6ICdzdHJ1Y3QgdGltZXZhbCcgZGVjbGFyZWQgaW5zaWRlIHBhcmFtZXRlciBsaXN0IHdpbGwgbm90IGJlIHZpc2libGUgb3V0c2lkZSBvZiB0aGlzIGRlZmluaXRpb24gb3IgZGVjbGFyYXRpb24KKyAgMTM1IHwgICAgIHN0cnVjdCB0aW1ldmFsICp0diwKKyAgICAgIHwgICAgICAgICAgICBefn5+fn5+CitjOlxQcm9ncmFtIEZpbGVzICh4ODYpXFB5dGhvbjM4LTMyXGxpYlxzaXRlLXBhY2thZ2VzXHNldHVwdG9vbHNcY29tbWFuZFxiZGlzdF93aW5pbnN0LnB5OjIwOiBTZXR1cHRvb2xzRGVwcmVjYXRpb25XYXJuaW5nOiBiZGlzdF93aW5pbnN0IGlzIGRlcHJlY2F0ZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiBhIGZ1dHVyZSB2ZXJzaW9uLiBVc2UgYmRpc3Rfd2hlZWwgKHdoZWVsIHBhY2thZ2VzKSBpbnN0ZWFkLgorICB3YXJuaW5ncy53YXJuKAorbWt3aW46IGJ1aWxkaW5nIGRvY3VtZW50cworbGludXhkb2MgaXMgbm90IGluc3RhbGxlZCAtIGRvY3VtZW50IHdpbGwgbm90IGJlIG1hZGUKK2xpbnV4ZG9jIGlzIG5vdCBpbnN0YWxsZWQgLSBkb2N1bWVudCB3aWxsIG5vdCBiZSBtYWRlCitsaW51eGRvYyBpcyBub3QgaW5zdGFsbGVkIC0gZG9jdW1lbnQgd2lsbCBub3QgYmUgbWFkZQorbWt3aW46IGluc3RhbGxpbmcgZmlsZXMKK2M6XFByb2dyYW0gRmlsZXMgKHg4NilcUHl0aG9uMzgtMzJcbGliXHNpdGUtcGFja2FnZXNcc2V0dXB0b29sc1xjb21tYW5kXGJkaXN0X3dpbmluc3QucHk6MjA6IFNldHVwdG9vbHNEZXByZWNhdGlvbldhcm5pbmc6IGJkaXN0X3dpbmluc3QgaXMgZGVwcmVjYXRlZCBhbmQgd2lsbCBiZSByZW1vdmVkIGluIGEgZnV0dXJlIHZlcnNpb24uIFVzZSBiZGlzdF93aGVlbCAod2hlZWwgcGFja2FnZXMpIGluc3RlYWQuCisgIHdhcm5pbmdzLndhcm4oCitjOlxQcm9ncmFtIEZpbGVzICh4ODYpXFB5dGhvbjM4LTMyXGxpYlxzaXRlLXBhY2thZ2VzXHNldHVwdG9vbHNcY29tbWFuZFxiZGlzdF93aW5pbnN0LnB5OjIwOiBTZXR1cHRvb2xzRGVwcmVjYXRpb25XYXJuaW5nOiBiZGlzdF93aW5pbnN0IGlzIGRlcHJlY2F0ZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiBhIGZ1dHVyZSB2ZXJzaW9uLiBVc2UgYmRpc3Rfd2hlZWwgKHdoZWVsIHBhY2thZ2VzKSBpbnN0ZWFkLgorICB3YXJuaW5ncy53YXJuKAorbWt3aW46IHVwZGF0aW5nIGZpbGVzCitta3dpbjogVVNCIHBhY2thZ2U6IGxpYnVzYgorbWt3aW46IGluc3RhbGxpbmcgcGFja2FnZSBmaWxlczogTGliVVNCIChha2EgTGliVVNCLVdpbjMyKQorICAgQ3JlYXRpbmcgbGlicmFyeSBicmxhcGkubGliIGFuZCBvYmplY3QgYnJsYXBpLmV4cAorbWt3aW46IGNyZWF0aW5nIGNvbmZpZ3VyYXRvcgorU3VjY2Vzc2Z1bGx5IGNvbXBpbGVkOiBDOlxVc2Vyc1xkYXZlXEFwcERhdGFcTG9jYWxcVGVtcFxicmx0dHktbWt3aW5caW5zdGFsbFxicmx0dHktd2luLTYuNC0yOTAtbGlidXNiXGJybHR0eWNuZi5leGUKK21rd2luOiBjb252ZXJ0aW5nIHRleHQgZmlsZXMKK21rd2luOiBjcmVhdGluZyBhcmNoaXZlCitta3dpbjogY3JlYXRpbmcgaW5zdGFsbGVyCitta3dpbjogY2xlYW5pbmcgdXAKK21rd2luOiBkb25lCmRpZmYgLS1naXQgYS9CdWlsZC9tay1hbmRyb2lkIGIvQnVpbGQvbWstYW5kcm9pZApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5iYzUyZDQ4Ci0tLSAvZGV2L251bGwKKysrIGIvQnVpbGQvbWstYW5kcm9pZApAQCAtMCwwICsxLDI4IEBACisjIS9iaW4vYmFzaAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorIyAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyMKKyMgQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorIworIyBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorIworIyBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisjIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyMgbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisjCisjIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKy4gImBkaXJuYW1lICIkezB9ImAvbWstcHJvbG9ndWUuc2giCitwYXJzZVByb2dyYW1Bcmd1bWVudHMgIiR7QH0iCisKK21rUGxhdGZvcm1OYW1lPSJBbmRyb2lkIgorbWtPbGRMb2dOYW1lPSJBbmRyb2lkIgorbWtOZXdMb2dOYW1lPSIke3Byb2dyYW1OYW1lfSIKKworbWtCdWlsZCAiJHtzb3VyY2VSb290fS9BbmRyb2lkL1Rvb2xzL3JlYnVpbGQiCitleGl0IDAKZGlmZiAtLWdpdCBhL0J1aWxkL21rLWRvcyBiL0J1aWxkL21rLWRvcwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi42NTg1NjI3Ci0tLSAvZGV2L251bGwKKysrIGIvQnVpbGQvbWstZG9zCkBAIC0wLDAgKzEsMjkgQEAKKyMhL2Jpbi9iYXNoCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisjICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorIworIyBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisjCisjIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisjCisjIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyMgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorIyBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyMKKyMgV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworIworIyBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworLiAiYGRpcm5hbWUgIiR7MH0iYC9tay1wcm9sb2d1ZS5zaCIKK3BhcnNlUHJvZ3JhbUFyZ3VtZW50cyAiJHtAfSIKKworbWtQbGF0Zm9ybU5hbWU9IkRPUyIKK21rT2xkTG9nTmFtZT0iRE9TIgorbWtOZXdMb2dOYW1lPSIke3Byb2dyYW1OYW1lfSIKKworZG9zRGlyZWN0b3J5PSIke3NvdXJjZVJvb3R9L0RPUyIKK21rQnVpbGQgIiR7ZG9zRGlyZWN0b3J5fS9ta2Rvc2FyYyIgLVQgIiR7ZG9zRGlyZWN0b3J5fS9Ub29sQ2hhaW4iIC1vIC0tICIke3NvdXJjZVJvb3R9IgorZXhpdCAwCmRpZmYgLS1naXQgYS9CdWlsZC9tay1wcm9sb2d1ZS5zaCBiL0J1aWxkL21rLXByb2xvZ3VlLnNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ1ZmU1ODkKLS0tIC9kZXYvbnVsbAorKysgYi9CdWlsZC9tay1wcm9sb2d1ZS5zaApAQCAtMCwwICsxLDUwIEBACisjIS9iaW4vYmFzaAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorIyAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyMKKyMgQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorIworIyBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorIworIyBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisjIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyMgbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisjCisjIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKy4gIiQoZGlybmFtZSAiJHtCQVNIX1NPVVJDRVswXX0iKS8uLi9wcm9sb2d1ZS5zaCIKK3NldFNvdXJjZVJvb3QKKworcmVhZG9ubHkgbWtMb2dGaWxlRXh0ZW5zaW9uPSJsb2ciCityZWFkb25seSBta0xvZ3NEaXJlY3Rvcnk9IiR7c291cmNlUm9vdH0vQnVpbGQvTG9ncyIKK21rRGlmZk9wdGlvbnM9KCkKKworbWtJZ25vcmVNaXNtYXRjaCgpIHsKKyAgIGxvY2FsIHBhdHRlcm49IiR7MX0iCisgICBta0RpZmZPcHRpb25zKz0oIC1JICIke3BhdHRlcm59IiApCit9CisKK21rQnVpbGQoKSB7CisgICBbIC1uICIke21rUGxhdGZvcm1OYW1lfSIgXSB8fCBpbnRlcm5hbEVycm9yICJwbGF0Zm9ybSBuYW1lIG5vdCBkZWZpbmVkIgorICAgWyAtbiAiJHtta09sZExvZ05hbWV9IiBdIHx8IGludGVybmFsRXJyb3IgIm9sZCBsb2cgbmFtZSBub3QgZGVmaW5lZCIKKyAgIFsgLW4gIiR7bWtOZXdMb2dOYW1lfSIgXSB8fCBpbnRlcm5hbEVycm9yICJuZXcgbG9nIG5hbWUgbm90IGRlZmluZWQiCisKKyAgIGxvZ01lc3NhZ2UgdGFzayAiYnVpbGRpbmcgZm9yICR7bWtQbGF0Zm9ybU5hbWV9IgorICAgbG9jYWwgbmV3TG9nRmlsZT0iJHtta05ld0xvZ05hbWV9LiR7bWtMb2dGaWxlRXh0ZW5zaW9ufSIKKyAgIGxvY2FsIG9sZExvZ0ZpbGU9IiR7bWtMb2dzRGlyZWN0b3J5fS8ke21rT2xkTG9nTmFtZX0uJHtta0xvZ0ZpbGVFeHRlbnNpb259IgorCisgICAiJHtAfSIgJj4iJHtuZXdMb2dGaWxlfSIgfHwgeworICAgICAgbG9jYWwgZXhpdFN0YXR1cz0iJHs/fSIKKyAgICAgIGxvZ0Vycm9yICJidWlsZCBmYWlsZWQgd2l0aCBleGl0IHN0YXR1cyAke2V4aXRTdGF0dXN9IC0gc2VlICR7bmV3TG9nRmlsZX0iCisgICAgICBleGl0IDEwCisgICB9CisKKyAgIGxvZ01lc3NhZ2UgdGFzayAiYnVpbGQgY29tcGxldGVkIHN1Y2Nlc3NmdWxseSIKKyAgIHNlZCAtZSAicyUke3NvdXJjZVJvb3R9JS4uLi9icmx0dHklZyIgLWkgIiR7bmV3TG9nRmlsZX0iCisgICBkaWZmICIke21rRGlmZk9wdGlvbnNbQF19IiAtLSAiJHtvbGRMb2dGaWxlfSIgIiR7bmV3TG9nRmlsZX0iCit9CmRpZmYgLS1naXQgYS9CdWlsZC9tay13aW5kb3dzIGIvQnVpbGQvbWstd2luZG93cwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5lOGU5N2IzCi0tLSAvZGV2L251bGwKKysrIGIvQnVpbGQvbWstd2luZG93cwpAQCAtMCwwICsxLDYwIEBACisjIS9iaW4vYmFzaAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorIyAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyMKKyMgQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorIworIyBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorIworIyBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisjIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyMgbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisjCisjIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKy4gImBkaXJuYW1lICIkezB9ImAvbWstcHJvbG9ndWUuc2giCit3aW5kb3dzRGlyZWN0b3J5PSIke3NvdXJjZVJvb3R9L1dpbmRvd3MiCisuICIke3dpbmRvd3NEaXJlY3Rvcnl9L21pbmd3LnNoIgorCityZWFkb25seSBkZWZhdWx0VXNiUGFja2FnZU5hbWVzPSggbGlidXNiIGxpYnVzYi0xLjAgKQorCitzaG93UHJvZ3JhbVVzYWdlTm90ZXMoKSB7CitjYXQgPDxFTkRfT0ZfUFJPR1JBTV9VU0FHRV9OT1RFUworVGhlIHBvc2l0aW9uYWwgcGFyYW1ldGVycyBhcmUgdGhlIG5hbWVzIG9mIFVTQiBwYWNrYWdlcy4gSWYgbm9uZSBhcmUKK3NwZWNpZmllZCwgdGhlIGRlZmF1bHQgaXM6ICR7ZGVmYXVsdFVzYlBhY2thZ2VOYW1lc1sqXX0KK0VORF9PRl9QUk9HUkFNX1VTQUdFX05PVEVTCit9CisKK3Byb2Nlc3NFeHRyYVByb2dyYW1QYXJhbWV0ZXJzKCkgeworICAgWyAiJHsjfSIgLWd0IDAgXSB8fCBzZXQgLS0gIiR7ZGVmYXVsdFVzYlBhY2thZ2VOYW1lc1tAXX0iCisgICB1c2JQYWNrYWdlTmFtZXM9KCAiJHtAfSIgKQorfQorCitvcHRpb25hbFByb2dyYW1QYXJhbWV0ZXJzCitwYXJzZVByb2dyYW1Bcmd1bWVudHMgIiR7QH0iCisKK21rSWdub3JlTWlzbWF0Y2ggIl5ta3dpbjogcmV2aXNpb24gaWRlbnRpZmllcjogIgorbWtJZ25vcmVNaXNtYXRjaCAiXiAqQ3JlYXRpbmcgbGlicmFyeSAiCitta0lnbm9yZU1pc21hdGNoICJeU3VjY2Vzc2Z1bGx5IGNvbXBpbGVkOiAiCisKK21rSWdub3JlTWlzbWF0Y2ggIl5kZWNsYXJlOiB1c2FnZTogIgorbWtJZ25vcmVNaXNtYXRjaCAiXi4qOiBkZWNsYXJlOiAtW25BXTogIgorCityZWFkIDwiJHt3aW5kb3dzRGlyZWN0b3J5fS9weXRob24tbG9jYXRpb24iIHB5dGhvbkxvY2F0aW9uIHx8IGV4aXQgIiR7P30iCitbIC1lICIke3B5dGhvbkxvY2F0aW9ufSIgXSB8fCBsb2dFcnJvciAiUHl0aG9uIG5vdCBmb3VuZDogJHtweXRob25Mb2NhdGlvbn0iCitbIC1kICIke3B5dGhvbkxvY2F0aW9ufSIgXSB8fCBsb2dFcnJvciAibm90IGEgZGlyZWN0b3J5OiAke3B5dGhvbkxvY2F0aW9ufSIKKworZm9yIHVzYlBhY2thZ2UgaW4gIiR7dXNiUGFja2FnZU5hbWVzW0BdfSIKK2RvCisgICBta1BsYXRmb3JtTmFtZT0iV2luZG93c1ske3VzYlBhY2thZ2V9XSIKKyAgIG1rT2xkTG9nTmFtZT0iV2luZG93cy0ke3VzYlBhY2thZ2V9IgorICAgbWtOZXdMb2dOYW1lPSIke3Byb2dyYW1OYW1lfS0ke3VzYlBhY2thZ2V9IgorICAgbWtCdWlsZCAiJHt3aW5kb3dzRGlyZWN0b3J5fS9ta3dpbiIgLVAgIiR7cHl0aG9uTG9jYXRpb259IiAtdSAiJHt1c2JQYWNrYWdlfSIgLS0gIiR7c291cmNlUm9vdH0iCitkb25lCisKK2V4aXQgMApkaWZmIC0tZ2l0IGEvRE9TL2N3c2RwbWkuZXhlIGIvRE9TL2N3c2RwbWkuZXhlCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjE3ZTMyMjAKLS0tIC9kZXYvbnVsbAorKysgYi9ET1MvY3dzZHBtaS5leGUKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvRE9TL21rZG9zYXJjIGIvRE9TL21rZG9zYXJjCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmJiN2MyNDkKLS0tIC9kZXYvbnVsbAorKysgYi9ET1MvbWtkb3NhcmMKQEAgLTAsMCArMSwyODggQEAKKyMhL2Jpbi9iYXNoCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisjICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorIworIyBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisjCisjIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisjCisjIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyMgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorIyBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyMKKyMgV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworIworIyBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworc2V0IC1lCitzaG9wdCAtcyBudWxsZ2xvYgorCitkZWZhdWx0QXJjaGl2ZU5hbWU9ImJybHR0eS1kb3MiCitkZWZhdWx0SW5zdGFsbERpcmVjdG9yeT0iQlJMVFRZIgorCisuICJgZGlybmFtZSAiJHswfSJgLy4uL3Byb2xvZ3VlLnNoIgorYWRkUHJvZ3JhbU9wdGlvbiBhIHN0cmluZy5uYW1lIGFyY2hpdmVOYW1lICJzcGVjaWZ5IGFyY2hpdmUgbmFtZSIgIiR7ZGVmYXVsdEFyY2hpdmVOYW1lfSIKK2FkZFByb2dyYW1PcHRpb24gaSBzdHJpbmcuZGlyZWN0b3J5IGluc3RhbGxEaXJlY3RvcnkgInNwZWNpZnkgaW5zdGFsbGF0aW9uIGRpcmVjdG9yeSBvbiB0YXJnZXQgc3lzdGVtIiAiJHtkZWZhdWx0SW5zdGFsbERpcmVjdG9yeX0iCithZGRQcm9ncmFtT3B0aW9uIG8gZmxhZyBvdmVyd3JpdGVBcmNoaXZlICJvdmVyd3JpdGUgZXhpc3RpbmcgYXJjaGl2ZSIKK2FkZFByb2dyYW1PcHRpb24gcyBmbGFnIGludm9rZVNoZWxsICJpbnZva2UgaW50ZXJhY3RpdmUgc2hlbGwgdG8gaW5zcGVjdC9tb2RpZnkgcmVzdWx0IgorYWRkUHJvZ3JhbU9wdGlvbiBUIHN0cmluZy5kaXJlY3RvcnkgdG9vbHNSb290ICJzcGVjaWZ5IHRvb2wgY2hhaW4gcm9vdCBkaXJlY3RvcnkiCithZGRQcm9ncmFtUGFyYW1ldGVyIHNvdXJjZSBzb3VyY2VEaXJlY3RvcnkgInRvcC1sZXZlbCBkaXJlY3Rvcnkgb2Ygc291cmNlIHRyZWUiCitwYXJzZVByb2dyYW1Bcmd1bWVudHMgIiR7QH0iCisKK1sgLW4gIiR7YXJjaGl2ZU5hbWV9IiBdIHx8IGFyY2hpdmVOYW1lPSIke2RlZmF1bHRBcmNoaXZlTmFtZX0iCitbIC1uICIke2luc3RhbGxEaXJlY3Rvcnl9IiBdIHx8IGluc3RhbGxEaXJlY3Rvcnk9IiR7ZGVmYXVsdEluc3RhbGxEaXJlY3Rvcnl9IgorWyAtbiAiJHt0b29sc1Jvb3R9IiBdICYmIGV4cG9ydCBET1NfVE9PTFNfUk9PVD0iJHt0b29sc1Jvb3R9IgorCitbIC1uICIke3NvdXJjZURpcmVjdG9yeX0iIF0gfHwgc291cmNlRGlyZWN0b3J5PSIuIgordmVyaWZ5SW5wdXREaXJlY3RvcnkgIiR7c291cmNlRGlyZWN0b3J5fSIgfHwgc2VtYW50aWNFcnJvcgorc291cmNlRGlyZWN0b3J5PSIkKHJlc29sdmVEaXJlY3RvcnkgIiR7c291cmNlRGlyZWN0b3J5fSIpIgorCithcmNoaXZlUGF0aD0iJHtpbml0aWFsRGlyZWN0b3J5fS8ke2FyY2hpdmVOYW1lfS56aXAiCitbICEgLWUgIiR7YXJjaGl2ZVBhdGh9IiBdIHx8IHsKKyAgICIke292ZXJ3cml0ZUFyY2hpdmV9IiBdIHx8IHNlbWFudGljRXJyb3IgImFyY2hpdmUgYWxyZWFkeSBleGlzdHM6ICR7YXJjaGl2ZVBhdGh9IgorICAgcm0gLWYgLXIgIiR7YXJjaGl2ZVBhdGh9IgorfQorCitmdW5jdGlvbiBjb252ZXJ0VGV4dEZpbGUgeworICAgbG9jYWwgZmlsZT0iJHsxfSIKKworICAgdW5peDJkb3MgLXEgLW8gIiR7ZmlsZX0iCit9CisKK2Z1bmN0aW9uIGluc3RhbGxGaWxlIHsKKyAgIGxvY2FsIHNvdXJjZUZpbGU9IiR7MX0iCisgICBsb2NhbCB0YXJnZXRGaWxlPSIkezJ9IgorCisgICB0YXJnZXRGaWxlPSIke2luc3RhbGxEaXJlY3Rvcnl9LyR7dGFyZ2V0RmlsZX0iCisgICBsb2NhbCB0YXJnZXREaXJlY3Rvcnk9IiR7dGFyZ2V0RmlsZSUvKn0iCisgICBta2RpciAtcCAiJHt0YXJnZXREaXJlY3Rvcnl9IgorICAgY3AgIiR7c291cmNlRmlsZX0iICIke3RhcmdldEZpbGV9IgorfQorCitmdW5jdGlvbiBpbnN0YWxsQ1NWIHsKKyAgIGxvY2FsIG9sZE5hbWU9IiR7MX0iCisgICBsb2NhbCBuZXdOYW1lPSIkezJ9IgorCisgICBsb2NhbCBleHRlbnNpb249ImNzdiIKKyAgIGluc3RhbGxGaWxlICIke3NvdXJjZURpcmVjdG9yeX0vJHtkb2N1bWVudHNTdWJkaXJlY3Rvcnl9LyR7b2xkTmFtZX0uJHtleHRlbnNpb259IiAiJHtkb2N1bWVudFN1YmRpcmVjdG9yeX0vJHtuZXdOYW1lfS4ke2V4dGVuc2lvbn0iCit9CisKK2Z1bmN0aW9uIGluc3RhbGxNYW51YWxGaWxlcyB7CisgICBsb2NhbCBkaXJlY3Rvcnk9IiR7MX0iCisKKyAgIGNkICIke2RpcmVjdG9yeX0vRG9jdW1lbnRzL01hbnVhbC1CUkxUVFkiCisKKyAgIGxvY2FsIG9sZEZpbGUKKyAgIGZvciBvbGRGaWxlIGluICQoZmluZCAuIC10eXBlIGYpCisgICBkbworICAgICAgbG9jYWwgbmV3RmlsZT0iJHtvbGRGaWxlfSIKKworICAgICAgbG9jYWwgc3ViZGlyZWN0b3J5PSIke29sZEZpbGUlLyp9IgorICAgICAgbG9jYWwgbmFtZT0iJHtvbGRGaWxlIyMqL30iCisKKyAgICAgIGxvY2FsIGV4dGVuc2lvbj0iJHtuYW1lIyMqLn0iCisgICAgICBuYW1lPSIke25hbWUlLip9IgorCisgICAgICBjYXNlICIke2V4dGVuc2lvbn0iCisgICAgICBpbgorICAgICAgICAgaHRtbCkKKyAgICAgICAgICAgIHNlZCAtciAtZSAncy8iKFtbOmFscGhhOl1dKykoLShbWzpkaWdpdDpdXSspKT9cLmh0bWwoWyIjXSkvIlwxXDMuaHRtXDQvZycgLWkgIiR7b2xkRmlsZX0iCisgICAgICAgICAgICBuZXdGaWxlPSIke3N1YmRpcmVjdG9yeX0vJHtuYW1lLy0vfS4ke2V4dGVuc2lvbjowOjN9IgorICAgICAgICAgICAgOzsKKworICAgICAgICAgdHh0IHwgaHRtIHwgZG9jIHwgcGRmKTs7CisgICAgICAgICAqKSBjb250aW51ZTs7CisgICAgICBlc2FjCisKKyAgICAgIGluc3RhbGxGaWxlICIke29sZEZpbGV9IiAiJHttYW51YWxTdWJkaXJlY3Rvcnl9LyR7bmV3RmlsZX0iCisgICBkb25lCit9CisKK25lZWRUZW1wb3JhcnlEaXJlY3RvcnkKKworYnVpbGREaXJlY3Rvcnk9IiR7dGVtcG9yYXJ5RGlyZWN0b3J5fS9idWlsZCIKK21rZGlyIC1wICIke2J1aWxkRGlyZWN0b3J5fSIKKworaW5zdGFsbERpcmVjdG9yeT0iJHt0ZW1wb3JhcnlEaXJlY3Rvcnl9L2ludGFsbC8ke2luc3RhbGxEaXJlY3Rvcnl9IgorbWtkaXIgLXAgIiR7aW5zdGFsbERpcmVjdG9yeX0iCitkb2N1bWVudFN1YmRpcmVjdG9yeT0iZG9jIgorbWFudWFsU3ViZGlyZWN0b3J5PSIke2RvY3VtZW50U3ViZGlyZWN0b3J5fS9NYW51YWwiCisKK2NkICIke2J1aWxkRGlyZWN0b3J5fSIKK2xvZ01lc3NhZ2UgdGFzayAiY29uZmlndXJpbmcgYnVpbGQiCisiJHtzb3VyY2VEaXJlY3Rvcnl9L2NmZy1kb3MiIC0tcHJlZml4PSIke2luc3RhbGxEaXJlY3Rvcnl9IgorCitsb2dNZXNzYWdlIHRhc2sgImJ1aWxkaW5nIHByb2dyYW1zIgorbWFrZSAtcyAtQyBQcm9ncmFtcyBhbGwtY29tbWFuZHMKKworbG9nTWVzc2FnZSB0YXNrICJidWlsZGluZyBkb2N1bWVudGF0aW9uIgorbWFrZSAtcyAtQyBEb2N1bWVudHMgYWxsCisKK2xvZ01lc3NhZ2UgdGFzayAiaW5zdGFsbGluZyBmaWxlcyIKK21ha2UgLXMgLUMgUHJvZ3JhbXMgaW5zdGFsbC1jb21tYW5kcyBpbnN0YWxsLXRhYmxlcworCitsb2dNZXNzYWdlIHRhc2sgInVwZGF0aW5nIGZpbGVzIgorCitjZCAiJHtpbnN0YWxsRGlyZWN0b3J5fS9iaW4iCittdiBicmx0dHktbHNjbWRzLmV4ZSBicmxsc2NtZC5leGUKK212IGJybHR0eS10cnR4dC5leGUgYnJsdHJ0eHQuZXhlCittdiBicmx0dHktdHRiLmV4ZSBicmx0dGIuZXhlCittdiBicmx0dHktY3RiLmV4ZSBicmxjdGIuZXhlCittdiBicmx0dHktYXRiLmV4ZSBicmxhdGIuZXhlCittdiBicmx0dHkta3RiLmV4ZSBicmxrdGIuZXhlCittdiBicmx0dHktdHVuZS5leGUgYnJsdHVuZS5leGUKK212IGJybHR0eS1tb3JzZS5leGUgYnJsbW9yc2UuZXhlCisKK2NkICIke3NvdXJjZURpcmVjdG9yeX0vRE9TIgoraW5zdGFsbEZpbGUgY3dzZHBtaS5leGUgImJpbi9jd3NkcG1pLmV4ZSIKKworY2QgIiR7c291cmNlRGlyZWN0b3J5fS9Ecml2ZXJzIgorbmFtZT1SRUFETUUKK2ZvciBkcml2ZXJUeXBlIGluIEJyYWlsbGUgU3BlZWNoCitkbworICAgY2QgIiR7ZHJpdmVyVHlwZX0iCisKKyAgIGZvciBkcml2ZXJOYW1lIGluICoKKyAgIGRvCisgICAgICBjZCAiJHtkcml2ZXJOYW1lfSIKKyAgICAgIHR5cGVzZXQgLXUgZHJpdmVyQ29kZT0iJChzZWQgLW4gLWUgJy9eICpEUklWRVJfQ09ERSAqPSAqL3MvXi4qPSAqLy9wJyAiTWFrZWZpbGUuaW4iKSIKKworICAgICAgZm9yIGZpbGUgaW4gIiR7bmFtZX0iKgorICAgICAgZG8KKyAgICAgICAgIGRvY3VtZW50PSIke2ZpbGUvIyR7bmFtZX0vJHtkcml2ZXJDb2RlfX0iCisgICAgICAgICBkb2N1bWVudD0iJHtkb2N1bWVudC8vLi8tfSIKKyAgICAgICAgIGluc3RhbGxGaWxlICIke2ZpbGV9IiAiJHtkb2N1bWVudFN1YmRpcmVjdG9yeX0vRHJpdmVycy8ke2RyaXZlclR5cGV9LyR7ZG9jdW1lbnR9LnR4dCIKKyAgICAgIGRvbmUKKworICAgICAgY2QgLi4KKyAgIGRvbmUKKworICAgY2QgLi4KK2RvbmUKKworY2QgIiR7c291cmNlRGlyZWN0b3J5fSIKK2luc3RhbGxGaWxlICJMSUNFTlNFLUxHUEwiICJMSUMtTEdQTC50eHQiCitpbnN0YWxsRmlsZSAiUkVBRE1FIiAiUkVBRE1FLnR4dCIKKworY2QgIiR7ZG9jdW1lbnRzU3ViZGlyZWN0b3J5fSIKK2luc3RhbGxGaWxlICJDaGFuZ2VMb2ciICIke2RvY3VtZW50U3ViZGlyZWN0b3J5fS9DSEctTE9HLnR4dCIKKworZm9yIGZpbGUgaW4gRE9TCitkbworICAgaW5zdGFsbEZpbGUgIlJFQURNRS4ke2ZpbGV9IiAiJHtkb2N1bWVudFN1YmRpcmVjdG9yeX0vJHtmaWxlfS50eHQiCitkb25lCisKK2ZvciBmaWxlIGluIEJVR1MgQ09OVFJJQlVUT1JTIEhJU1RPUlkgVE9ETworZG8KKyAgIGluc3RhbGxGaWxlICIke2ZpbGV9IiAiJHtkb2N1bWVudFN1YmRpcmVjdG9yeX0vJHtmaWxlfS50eHQiCitkb25lCisKK2luc3RhbGxDU1YgYnJhaWxsZS1kcml2ZXIgQlJMLURSVgoraW5zdGFsbENTViBzcGVlY2gtZHJpdmVyIFNQSy1EUlYKK2luc3RhbGxDU1Ygc2NyZWVuLWRyaXZlciBTQ1ItRFJWCisKK2luc3RhbGxDU1YgdGV4dC10YWJsZSBURVhULVRCTAoraW5zdGFsbENTViBjb250cmFjdGlvbi10YWJsZSBDT05ULVRCTAoraW5zdGFsbENTViBhdHRyaWJ1dGVzLXRhYmxlIEFUVFItVEJMCitpbnN0YWxsQ1NWIGtleWJvYXJkLXRhYmxlIEtCRC1UQkwKKworaW5zdGFsbE1hbnVhbEZpbGVzICIke3NvdXJjZURpcmVjdG9yeX0iCitpbnN0YWxsTWFudWFsRmlsZXMgIiR7YnVpbGREaXJlY3Rvcnl9IgorCitjZCAiJHtidWlsZERpcmVjdG9yeX0iCitpbnN0YWxsRmlsZSAiRG9jdW1lbnRzL2JybHR0eS5jb25mIiAiZXRjL2JybHR0eS5jZmciCitpbnN0YWxsRmlsZSAiUHJvZ3JhbXMvcmV2aXNpb25faWRlbnRpZmllci5hdXRvLmgiICJSRVZJU0lPTi50eHQiCitzZWQgLWUgJ3MvIi8vZycgLWkgIiR7aW5zdGFsbERpcmVjdG9yeX0vUkVWSVNJT04udHh0IgorCitsb2dNZXNzYWdlIHRhc2sgImNvbnZlcnRpbmcgdGV4dCBmaWxlcyIKK2NkICIke2luc3RhbGxEaXJlY3Rvcnl9IgorZmluZCAuIC1wcmludCB8CisgICB3aGlsZSByZWFkIHBhdGgKKyAgIGRvCisgICAgICBoYW5kbGU9IiR7cGF0aCMufSIKKyAgICAgIFsgLW4gIiR7aGFuZGxlfSIgXSB8fCBjb250aW51ZQorCisgICAgICBuYW1lPSIke3BhdGgjIyovfSIKKyAgICAgIGV4dGVuc2lvbj0iJHtuYW1lIyMqLn0iCisKKyAgICAgIGlmIFsgIiR7bmFtZSMqLioufSIgIT0gIiR7bmFtZX0iIF0KKyAgICAgIHRoZW4KKyAgICAgICAgIGxvZ1dhcm5pbmcgIm5hbWUgY29udGFpbnMgbW9yZSB0aGFuIG9uZSBkb3Q6ICR7aGFuZGxlfSIKKyAgICAgIGVsaWYgWyAiJHtuYW1lIy59IiAhPSAiJHtuYW1lfSIgXQorICAgICAgdGhlbgorICAgICAgICAgbG9nV2FybmluZyAibnVsbCBuYW1lOiAke2hhbmRsZX0iCisgICAgICBlbGlmIFsgIiR7bmFtZSUufSIgIT0gIiR7bmFtZX0iIF0KKyAgICAgIHRoZW4KKyAgICAgICAgIGxvZ1dhcm5pbmcgIm51bGwgZXh0ZW5zaW9uOiAke2hhbmRsZX0iCisgICAgICBlbGlmIFsgLWYgIiR7cGF0aH0iIF0KKyAgICAgIHRoZW4KKyAgICAgICAgIGlmIFsgIiR7ZXh0ZW5zaW9ufSIgPSAiJHtuYW1lfSIgXQorICAgICAgICAgdGhlbgorICAgICAgICAgICAgbG9nV2FybmluZyAiZmlsZSB3aXRob3V0IGFuIGV4dGVuc2lvbjogJHtoYW5kbGV9IgorICAgICAgICAgZWxzZQorICAgICAgICAgICAgY2FzZSAiJHtleHRlbnNpb259IgorICAgICAgICAgICAgaW4KKyAgICAgICAgICAgICAgIHR4dCB8IGh0bWwgfCBodG0gfCBjc3YgfCBjZmcgfCBbdGNha110W2JpXSB8IGgpIGNvbnZlcnRUZXh0RmlsZSAiJHtwYXRofSI7OworICAgICAgICAgICAgICAgZXhlIHwgcGRmIHwgZG9jKTs7CisgICAgICAgICAgICAgICAqKSBsb2dXYXJuaW5nICJ1bmV4cGVjdGVkIGZpbGUgZXh0ZW5zaW9uOiAke2hhbmRsZX0iOzsKKyAgICAgICAgICAgIGVzYWMKKyAgICAgICAgIGZpCisgICAgICBlbGlmIFsgLWQgIiR7cGF0aH0iIF0KKyAgICAgIHRoZW4KKyAgICAgICAgIGlmIFsgIiR7ZXh0ZW5zaW9ufSIgIT0gIiR7bmFtZX0iIF0KKyAgICAgICAgIHRoZW4KKyAgICAgICAgICAgIGxvZ1dhcm5pbmcgImRpcmVjdG9yeSB3aXRoIGFuIGV4dGVuc2lvbjogJHtoYW5kbGV9IgorICAgICAgICAgZmkKKyAgICAgIGVsc2UKKyAgICAgICAgIGxvZ1dhcm5pbmcgInVuc3VwcG9ydGVkIHNwZWNpYWwgZmlsZTogJHtoYW5kbGV9IgorICAgICAgZmkKKyAgIGRvbmUKKworbG9nTWVzc2FnZSB0YXNrICJjaGVja2luZyBmb3IgbmFtZSBjb2xsaXNpb25zIgorY2QgIiR7aW5zdGFsbERpcmVjdG9yeX0iCitmaW5kIC4gLXR5cGUgZCAtcHJpbnQgfAorICAgd2hpbGUgcmVhZCBkaXJlY3RvcnkKKyAgIGRvCisgICAgICBkZWNsYXJlIC1BIHNob3J0TmFtZXM9KCkKKworICAgICAgZm9yIGxvbmdOYW1lIGluICQobHMgLTEgLS1xdW90ZS1uYW1lIC0tcXVvdGluZy1zdHlsZT1zaGVsbCAiJHtkaXJlY3Rvcnl9IikKKyAgICAgIGRvCisgICAgICAgICBkZWxpbWl0ZXI9Ii4iCisgICAgICAgICBwcmVmaXg9IiR7bG9uZ05hbWUlJHtkZWxpbWl0ZXJ9Kn0iCisKKyAgICAgICAgIGlmIFsgIiR7cHJlZml4fSIgPSAiJHtsb25nTmFtZX0iIF0KKyAgICAgICAgIHRoZW4KKyAgICAgICAgICAgIHN1ZmZpeD0iIgorICAgICAgICAgICAgZGVsaW1pdGVyPSIiCisgICAgICAgICBlbHNlCisgICAgICAgICAgICBzdWZmaXg9IiR7bG9uZ05hbWU6JHsjcHJlZml4fSskeyNkZWxpbWl0ZXJ9fSIKKyAgICAgICAgIGZpCisKKyAgICAgICAgIHByZWZpeD0iJHtwcmVmaXg6MDo4fSIKKyAgICAgICAgIHN1ZmZpeD0iJHtzdWZmaXg6MDozfSIKKyAgICAgICAgIGRlY2xhcmUgLXUgc2hvcnROYW1lPSIke3ByZWZpeH0ke2RlbGltaXRlcn0ke3N1ZmZpeH0iCisKKyAgICAgICAgIGlmIFsgIiR7I3Nob3J0TmFtZXNbIiR7c2hvcnROYW1lfSJdfSIgLWVxIDAgXQorICAgICAgICAgdGhlbgorICAgICAgICAgICAgc2hvcnROYW1lc1siJHtzaG9ydE5hbWV9Il09IiR7bG9uZ05hbWV9IgorICAgICAgICAgZWxzZQorICAgICAgICAgICAgbG9nV2FybmluZyAibmFtZSBjb2xsaXNpb246ICR7ZGlyZWN0b3J5Iy59OiAke3Nob3J0TmFtZXNbIiR7c2hvcnROYW1lfSJdfSAmICR7bG9uZ05hbWV9IgorICAgICAgICAgZmkKKyAgICAgIGRvbmUKKyAgIGRvbmUKKworISAiJHtpbnZva2VTaGVsbH0iIHx8IHsKKyAgIGxvZ01lc3NhZ2UgdGFzayAiaW52b2tpbmcgc2hlbGwiCisgICBjZCAiJHtpbnN0YWxsRGlyZWN0b3J5fSIKKyAgICIke1NIRUxMOi0vYmluL3NofSIgfHwgOgorfQorCitsb2dNZXNzYWdlIHRhc2sgImNyZWF0aW5nIGFyY2hpdmUiCitjZCAiJHtpbnN0YWxsRGlyZWN0b3J5fS8uLiIKK3ppcCAtcSAtciAiJHthcmNoaXZlUGF0aH0iICIke2luc3RhbGxEaXJlY3RvcnkjIyovfSIKKworbG9nTWVzc2FnZSB0YXNrICJkb25lIgorZXhpdCAwCmRpZmYgLS1naXQgYS9ET1MvbWtkb3N0b29scyBiL0RPUy9ta2Rvc3Rvb2xzCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjU3M2RhN2YKLS0tIC9kZXYvbnVsbAorKysgYi9ET1MvbWtkb3N0b29scwpAQCAtMCwwICsxLDUzMiBAQAorIyEvYmluL2Jhc2ggLXAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyMgICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisjCisjIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyMKKyMgQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitzZXQgLWUKK3VtYXNrIDAyMgorc2hvcHQgLXMgbnVsbGdsb2IKKworcmVhZG9ubHkgYXV0b2NvbmZPbGRWZXJzaW9uPTIuMTMKK3JlYWRvbmx5IGF1dG9jb25mTmV3VmVyc2lvbj0yLjU5CityZWFkb25seSBhdXRvbWFrZVZlcnNpb249MS45LjYKK3JlYWRvbmx5IGNyeFZlcnNpb249Mi4wNAorCityZWFkb25seSBkZWZhdWx0QXJjaGl2ZXNTdWJkaXJlY3Rvcnk9IkFyY2hpdmVzIgorcmVhZG9ubHkgZGVmYXVsdEJ1aWxkU3ViZGlyZWN0b3J5PSJCdWlsZCIKK3JlYWRvbmx5IGRlZmF1bHRJbnN0YWxsU3ViZGlyZWN0b3J5PSJUb29scyIKK3JlYWRvbmx5IGRlZmF1bHRUYXJnZXRTeXN0ZW09Imk1ODYtcGMtbXNkb3NkamdwcCIKKworZnVuY3Rpb24gc2V0VmFyaWFibGUgeworICAgbG9jYWwgdmFyaWFibGU9IiR7MX0iCisgICBsb2NhbCB2YWx1ZT0iJHsyfSIKKworICAgZXZhbCAiJHt2YXJpYWJsZX0iJz0iJHt2YWx1ZX0iJworfQorCitmdW5jdGlvbiBzZXRBcnJheUVsZW1lbnQgeworICAgbG9jYWwgYXJyYXk9IiR7MX0iCisgICBsb2NhbCBpbmRleD0iJHsyfSIKKyAgIGxvY2FsIHZhbHVlPSIkezN9IgorCisgICBzZXRWYXJpYWJsZSAiJHthcnJheX1bJHtpbmRleH1dIiAiJHt2YWx1ZX0iCit9CisKK2Z1bmN0aW9uIGRlZmluZUVudW1lcmF0aW9uIHsKKyAgIGxvY2FsIGFycmF5PSIkezF9IgorICAgc2hpZnQgMQorCisgICBkZWNsYXJlIC1nIC1pIC1BICIke2FycmF5fSIKKyAgIGxvY2FsIHZhbHVlPTAKKworICAgd2hpbGUgWyAiJHsjfSIgLWd0IDAgXQorICAgZG8KKyAgICAgIHNldEFycmF5RWxlbWVudCAiJHthcnJheX0iICIkezF9IiAkKCh2YWx1ZSsrKSkKKyAgICAgIHNoaWZ0IDEKKyAgIGRvbmUKKworICAgcmVhZG9ubHkgIiR7YXJyYXl9IgorfQorCityZWFkb25seSBwcm9ncmFtTmFtZT0iJHswIyMqL30iCityZWFkb25seSBwcm9ncmFtRGlyZWN0b3J5PSIkKHJlYWxwYXRoICIkKGRpcm5hbWUgIiR7MH0iKSIpIgorCitmdW5jdGlvbiBwcm9ncmFtTWVzc2FnZSB7CisgICBsb2NhbCBtZXNzYWdlPSIkezF9IgorCisgICBlY2hvID4mMiAiJHtwcm9ncmFtTmFtZX06ICR7bWVzc2FnZX0iCit9CisKK2RlZmluZUVudW1lcmF0aW9uIGxvZ0xldmVscyBlcnJvciB3YXJuaW5nIHRhc2sgc3RlcCBkZXRhaWwKK2RlY2xhcmUgLWkgbG9nTGV2ZWw9IiR7bG9nTGV2ZWxzW3Rhc2tdfSIKKworZnVuY3Rpb24gbG9nTW9yZSB7CisgICAoKGxvZ0xldmVsICs9IDEpKSB8fCA6Cit9CisKK2Z1bmN0aW9uIGxvZ0xlc3MgeworICAgKChsb2dMZXZlbCAtPSAxKSkgfHwgOgorfQorCitmdW5jdGlvbiBsb2dNZXNzYWdlIHsKKyAgIGxvY2FsIGxldmVsPSIkezF9IgorICAgbG9jYWwgbWVzc2FnZT0iJHsyfSIKKworICAgbG9jYWwgdmFsdWU9IiR7bG9nTGV2ZWxzWyRsZXZlbF19IgorCisgICBbIC1uICIke3ZhbHVlfSIgXSB8fCB7CisgICAgICBsb2dXYXJuaW5nICJ1bmRlZmluZWQgbG9nIGxldmVsOiAke2xldmVsfSIKKyAgICAgIHZhbHVlPTAKKyAgIH0KKworICAgWyAiJHt2YWx1ZX0iIC1ndCAiJHtsb2dMZXZlbH0iIF0gfHwgcHJvZ3JhbU1lc3NhZ2UgIiR7bWVzc2FnZX0iCit9CisKK2Z1bmN0aW9uIHN5bnRheEVycm9yIHsKKyAgIGxvY2FsIG1lc3NhZ2U9IiR7MX0iCisKKyAgIGxvZ0Vycm9yICIke21lc3NhZ2V9IgorICAgZXhpdCAyCit9CisKK2Z1bmN0aW9uIHNlbWFudGljRXJyb3IgeworICAgbG9jYWwgbWVzc2FnZT0iJHsxfSIKKworICAgbG9nRXJyb3IgIiR7bWVzc2FnZX0iCisgICBleGl0IDMKK30KKworZnVuY3Rpb24gZXh0ZXJuYWxFcnJvciB7CisgICBsb2NhbCBtZXNzYWdlPSIkezF9IgorCisgICBsb2dFcnJvciAiJHttZXNzYWdlfSIKKyAgIGV4aXQgNAorfQorCitmdW5jdGlvbiBzaG93VXNhZ2UgeworICAgY2F0IDw8LUVORC1PRi1VU0FHRQorCXVzYWdlOiAke3Byb2dyYW1OYW1lfSBbLW9wdGlvbiAuLi5dCisJLWggICAgICAgICAgICBkaXNwbGF5IGEgdXNhZ2Ugc3VtbWFyeSAodGhpcyB0ZXh0KSwgYW5kIHRoZW4gZXhpdAorCS1xICAgICAgICAgICAgZGVjcmVhc2Ugb3V0cHV0IHZlcmJvc2l0eSAobWF5IGJlIHNwZWNpZmllZCBtb3JlIHRoYW4gb25jZSkKKwktdiAgICAgICAgICAgIGluY3JlYXNlIG91dHB1dCB2ZXJib3NpdHkgKG1heSBiZSBzcGVjaWZpZWQgbW9yZSB0aGFuIG9uY2UpCisJLWQgZGlyZWN0b3J5ICBzcGVjaWZ5IHRoZSBST09UIGRpcmVjdG9yeSAoZGVmYXVsdCBpcyB0aGUgY3VycmVudCBkaXJlY3RvcnkpCisJLWEgZGlyZWN0b3J5ICBzcGVjaWZ5IHRoZSBhcmNoaXZlcyBkaXJlY3RvcnkgKGRlZmF1bHQgaXMgUk9PVC8ke2RlZmF1bHRBcmNoaXZlc1N1YmRpcmVjdG9yeX0pCisJLWIgZGlyZWN0b3J5ICBzcGVjaWZ5IHRoZSBidWlsZCBkaXJlY3RvcnkgKGRlZmF1bHQgaXMgUk9PVC8ke2RlZmF1bHRCdWlsZFN1YmRpcmVjdG9yeX0pCisJLWkgZGlyZWN0b3J5ICBzcGVjaWZ5IHRoZSBpbnN0YWxsIGRpcmVjdG9yeSAoZGVmYXVsdCBpcyBST09ULyR7ZGVmYXVsdEluc3RhbGxTdWJkaXJlY3Rvcnl9KQorCS10IHN5c3RlbSAgICAgc3BlY2lmeSB0aGUgdGFyZ2V0IHN5c3RlbSAoZGVmYXVsdCBpcyAke2RlZmF1bHRUYXJnZXRTeXN0ZW19KQorCS1nIHZlcnNpb24gICAgdGhlIGdjYyB2ZXJzaW9uIHRvIGJ1aWxkIChkZWZhdWx0cyBpZiBvbmx5IG9uZSBpcyBhcmNoaXZlZCkKKwlFTkQtT0YtVVNBR0UKKworICAgZXhpdCAwCit9CisKK2Z1bmN0aW9uIGhhbmRsZURpcmVjdG9yeU9wdGlvbiB7CisgICBsb2NhbCB2YXJpYWJsZT0iJHsxfSIKKyAgIGxvY2FsIGRlZmF1bHQ9IiR7Mn0iCisgICBsb2NhbCBuYW1lPSIkezN9IgorCisgICBbIC1uICIkeyF2YXJpYWJsZX0iIF0gfHwgc2V0VmFyaWFibGUgIiR7dmFyaWFibGV9IiAiJHtkZWZhdWx0fSIKKyAgIHNldFZhcmlhYmxlICIke3ZhcmlhYmxlfSIgIiQocmVhbHBhdGggIiR7IXZhcmlhYmxlfSIpIgorICAgcmVhZG9ubHkgIiR7dmFyaWFibGV9IgorCisgICBbIC16ICIke25hbWV9IiBdIHx8IGxvZ01lc3NhZ2UgZGV0YWlsICIke25hbWV9IGRpcmVjdG9yeTogJHshdmFyaWFibGV9IgorfQorCitmdW5jdGlvbiBsb2dBcnJheUVsZW1lbnRzIHsKKyAgIGxvY2FsIGFycmF5PSIkezF9IgorICAgbG9jYWwgbmFtZT0iJHsyfSIKKworICAgbWVzc2FnZT0iJHtuYW1lfSBwcm9wZXJ0aWVzOiIKKworICAgZXZhbCBsb2NhbCAnaW5kZWNlcz0iJHshJyIke2FycmF5fSInWypdfSInCisgICBsb2NhbCBpbmRleAorCisgICBmb3IgaW5kZXggaW4gJHtpbmRlY2VzfQorICAgZG8KKyAgICAgIGxvY2FsIHZhcmlhYmxlPSIke2FycmF5fVske2luZGV4fV0iCisgICAgICBtZXNzYWdlKz0iICR7aW5kZXh9PSR7IXZhcmlhYmxlfSIKKyAgIGRvbmUKKworICAgbG9nTWVzc2FnZSBkZXRhaWwgIiR7bWVzc2FnZX0iCit9CisKK2Z1bmN0aW9uIGZpbmRIb3N0Q29tbWFuZCB7CisgICBsb2NhbCB2YXJpYWJsZT0iJHsxfSIKKyAgIHNoaWZ0IDEKKworICAgbG9jYWwgY29tbWFuZAorICAgZm9yIGNvbW1hbmQKKyAgIGRvCisgICAgICBsb2NhbCBwYXRoPSIkKHR5cGUgLXAgIiR7Y29tbWFuZH0iKSIKKworICAgICAgWyAteiAiJHtwYXRofSIgXSB8fCB7CisgICAgICAgICBzZXRWYXJpYWJsZSAiJHt2YXJpYWJsZX0iICIke3BhdGh9IgorICAgICAgICAgZXhwb3J0ICIke3ZhcmlhYmxlfSIKKyAgICAgICAgIGxvZ01lc3NhZ2UgZGV0YWlsICJob3N0IGNvbW1hbmQgbG9jYXRpb246ICR7dmFyaWFibGV9IC0+ICR7IXZhcmlhYmxlfSIKKyAgICAgICAgIHJldHVybiAwCisgICAgICB9CisgICBkb25lCisKKyAgIHNlbWFudGljRXJyb3IgImhvc3QgY29tbWFuZCBub3QgZm91bmQ6ICR7dmFyaWFibGV9ICgkeyp9KSIKK30KKworZnVuY3Rpb24gcGF0aENoYW5nZSB7CisgICBsb2NhbCBuZXdQYXRoPSIkezF9IgorCisgICBleHBvcnQgUEFUSD0iJHtuZXdQYXRofSIKKyAgIGxvZ01lc3NhZ2UgZGV0YWlsICJob3N0IGNvbW1hbmQgc2VhcmNoIHBhdGg6ICR7UEFUSH0iCit9CisKK2Z1bmN0aW9uIHBhdGhQcmVwZW5kIHsKKyAgIGxvY2FsIGRpcmVjdG9yeT0iJHsxfSIKKworICAgcGF0aENoYW5nZSAiJHtkaXJlY3Rvcnl9OiR7UEFUSH0iCit9CisKK2Z1bmN0aW9uIG1ha2VEaXJlY3RvcnkgeworICAgbG9jYWwgcGF0aD0iJHsxfSIKKworICAgbWtkaXIgLXAgIiR7cGF0aH0iCit9CisKK2Z1bmN0aW9uIGVtcHR5RGlyZWN0b3J5IHsKKyAgIGxvY2FsIHBhdGg9IiR7MX0iCisKKyAgIHJtIC1mIC1yICIke3BhdGh9LyIqCit9CisKK2Z1bmN0aW9uIGluaXRpYWxpemVEaXJlY3RvcnkgeworICAgbG9jYWwgcGF0aD0iJHsxfSIKKworICAgbWFrZURpcmVjdG9yeSAiJHtwYXRofSIKKyAgIGVtcHR5RGlyZWN0b3J5ICIke3BhdGh9IgorfQorCitmdW5jdGlvbiB2ZXJpZnlBcmNoaXZlIHsKKyAgIGxvY2FsIGFycmF5PSIkezF9IgorICAgbG9jYWwgdHlwZT0iJHsyfSIKKyAgIGxvY2FsIHByZWZpeD0iJHszfSIKKyAgIGxvY2FsIHN1ZmZpeD0iJHs0fSIKKyAgIGxvY2FsIHZlcnNpb249IiR7NX0iCisKKyAgIGRlY2xhcmUgLWcgLUEgIiR7YXJyYXl9IgorICAgc2V0QXJyYXlFbGVtZW50ICIke2FycmF5fSIgdHlwZSAiJHt0eXBlfSIKKyAgIHNldEFycmF5RWxlbWVudCAiJHthcnJheX0iIHByZWZpeCAiJHtwcmVmaXh9IgorICAgc2V0QXJyYXlFbGVtZW50ICIke2FycmF5fSIgc3VmZml4ICIke3N1ZmZpeH0iCisKKyAgIGxvY2FsIG5hbWU9IiR7cHJlZml4JS19IgorICAgc2V0QXJyYXlFbGVtZW50ICIke2FycmF5fSIgbmFtZSAiJHtuYW1lfSIKKworICAgbG9jYWwgb3JpZ2luYWxEaXJlY3Rvcnk9IiR7UFdEfSIKKyAgIGNkICIke2FyY2hpdmVzRGlyZWN0b3J5fSIKKyAgIGlmIFsgLW4gIiR7dmVyc2lvbn0iIF0KKyAgIHRoZW4KKyAgICAgIGxvY2FsIGZpbGU9IiR7cHJlZml4fSR7dmVyc2lvbn0ke3N1ZmZpeH0iCisgICAgICBbIC1mICIke2ZpbGV9IiBdIHx8IHNlbWFudGljRXJyb3IgIiR7dHlwZX0gYXJjaGl2ZSBub3QgZm91bmQ6ICR7ZmlsZX0iCisgICBlbHNlCisgICAgICBsb2NhbCBmaWxlcz0oIiR7cHJlZml4fSIqIiR7c3VmZml4fSIpCisgICAgICBsb2NhbCBjb3VudD0iJHsjZmlsZXNbKl19IgorICAgICAgKChjb3VudCA+IDApKSB8fCBzZW1hbnRpY0Vycm9yICIke3R5cGV9IGFyY2hpdmUgbm90IGZvdW5kOiAke25hbWV9IgorICAgICAgKChjb3VudCA9PSAxKSkgfHwgc2VtYW50aWNFcnJvciAiJHt0eXBlfSBwYWNrYWdlIHdpdGggbXVsdGlwbGUgYXJjaGl2ZXM6ICR7ZmlsZXNbKl19IgorCisgICAgICBsb2NhbCBmaWxlPSIke2ZpbGVzWzBdfSIKKyAgICAgIHZlcnNpb249IiR7ZmlsZSUke3N1ZmZpeH19IgorICAgICAgdmVyc2lvbj0iJHt2ZXJzaW9uOiR7I3ByZWZpeH19IgorICAgZmkKKyAgIGNkICIke29yaWdpbmFsRGlyZWN0b3J5fSIKKworICAgW1sgIiR7dmVyc2lvbn0iID1+IF5bMC05XXszfSQgXV0gJiYgdmVyc2lvbj0iJHt2ZXJzaW9uOjA6MX0uJHt2ZXJzaW9uOjF9IgorICAgc2V0QXJyYXlFbGVtZW50ICIke2FycmF5fSIgdmVyc2lvbiAiJHt2ZXJzaW9ufSIgCisKKyAgIHNldEFycmF5RWxlbWVudCAiJHthcnJheX0iIGZpbGUgIiR7ZmlsZX0iCisgICBzZXRBcnJheUVsZW1lbnQgIiR7YXJyYXl9IiBwYXRoICIke2FyY2hpdmVzRGlyZWN0b3J5fS8ke2ZpbGV9IgorCisgICBsb2NhbCBzb3VyY2U9IiR7bmFtZX0tJHt2ZXJzaW9ufSIKKyAgIHNldEFycmF5RWxlbWVudCAiJHthcnJheX0iIHNvdXJjZSAiJHtzb3VyY2V9IgorCisgICByZWFkb25seSAiJHthcnJheX0iCisgICBsb2dBcnJheUVsZW1lbnRzICIke2FycmF5fSIgImFyY2hpdmUiCit9CisKK2Z1bmN0aW9uIGdudVZlcmlmeUFyY2hpdmUgeworICAgbG9jYWwgYXJyYXk9IiR7MX0iCisgICBsb2NhbCBuYW1lPSIkezJ9IgorICAgbG9jYWwgdmVyc2lvbj0iJHszfSIKKworICAgdmVyaWZ5QXJjaGl2ZSAiJHthcnJheX0iIEdudSAiJHtuYW1lfS0iICIudGFyLmd6IiAiJHt2ZXJzaW9ufSIKK30KKworZnVuY3Rpb24gZGpncHBWZXJpZnlBcmNoaXZlIHsKKyAgIGxvY2FsIGFycmF5PSIkezF9IgorICAgbG9jYWwgbmFtZT0iJHsyfSIKKyAgIGxvY2FsIHR5cGU9IiR7M30iCisgICBsb2NhbCB2ZXJzaW9uPSIkezR9IgorCisgICB2ZXJpZnlBcmNoaXZlICIke2FycmF5fSIgREpHUFAgIiR7bmFtZX0iICIke3R5cGV9LnppcCIgIiR7dmVyc2lvbi8vLi99IgorfQorCitmdW5jdGlvbiBsb2dQYWNrYWdlVGFzayB7CisgICBsb2NhbCBhcnJheT0iJHsxfSIKKyAgIGxvY2FsIHRhc2s9IiR7Mn0iCisKKyAgIGxvY2FsIG5hbWVWYXJpYWJsZT0iJHthcnJheX1bbmFtZV0iCisgICBsb2NhbCB2ZXJzaW9uVmFyaWFibGU9IiR7YXJyYXl9W3ZlcnNpb25dIgorICAgbG9nTWVzc2FnZSB0YXNrICIke3Rhc2t9OiAkeyFuYW1lVmFyaWFibGV9LSR7IXZlcnNpb25WYXJpYWJsZX0iCit9CisKK2Z1bmN0aW9uIHVucGFja0FyY2hpdmUgeworICAgbG9jYWwgYXJyYXk9IiR7MX0iCisKKyAgIGxvY2FsIHR5cGVWYXJpYWJsZT0iJHthcnJheX1bdHlwZV0iCisgICBsb2NhbCBwYXRoVmFyaWFibGU9IiR7YXJyYXl9W3BhdGhdIgorCisgICBsb2dQYWNrYWdlVGFzayAiJHthcnJheX0iICJ1bnBhY2tpbmcgJHshdHlwZVZhcmlhYmxlfSBhcmNoaXZlIgorICAgInVucGFja0FyY2hpdmVfJHshdHlwZVZhcmlhYmxlfSIgIiR7IXBhdGhWYXJpYWJsZX0iCit9CisKK2Z1bmN0aW9uIHVucGFja0FyY2hpdmVfR251IHsKKyAgIGxvY2FsIHBhdGg9IiR7MX0iCisKKyAgIHRhciB4ZnogIiR7cGF0aH0iCit9CisKK2Z1bmN0aW9uIHVucGFja0FyY2hpdmVfREpHUFAgeworICAgbG9jYWwgcGF0aD0iJHsxfSIKKworICAgdW56aXAgLXEgLWEgIiR7cGF0aH0iCit9CisKK2Z1bmN0aW9uIGNoYW5nZVNjcmlwdFZhcmlhYmxlIHsKKyAgIGxvY2FsIHNjcmlwdD0iJHsxfSIKKyAgIGxvY2FsIHZhcmlhYmxlPSIkezJ9IgorICAgbG9jYWwgdmFsdWU9IiR7M30iCisKKyAgIHNlZCAtZSAiL14gKiR7dmFyaWFibGV9ICo9L3MlPS4qJT0nJHt2YWx1ZX0nJSIgLWkgIiR7c2NyaXB0fSIKK30KKworZnVuY3Rpb24gbG9nQnVpbGREaXJlY3RvcnkgeworICAgbG9nTm90ZSAiYnVpbGQgZGlyZWN0b3J5OiAke1BXRH0iCit9CisKK2Z1bmN0aW9uIHJ1bkJ1aWxkQ29tbWFuZCB7CisgICBsb2NhbCBsb2dGaWxlPSIkezF9IgorICAgc2hpZnQgMQorCisgICBsb2dOb3RlICJidWlsZCBjb21tYW5kOiAkeyp9IgorICAgIiR7QH0iID4mIiR7bG9nRmlsZX0iIHx8IGV4dGVybmFsRXJyb3IgImJ1aWxkIGVycm9yOiBmb3IgZGV0YWlscywgc2VlICR7UFdEfS8ke2xvZ0ZpbGV9IgorfQorCitmdW5jdGlvbiBjb25maWd1cmVQYWNrYWdlIHsKKyAgIGxvY2FsIHNvdXJjZT0iJHsxfSIKKyAgIHNoaWZ0IDEKKworICAgcnVuQnVpbGRDb21tYW5kIGNvbmZpZ3VyZS5sb2cgIiR7c291cmNlfS9jb25maWd1cmUiICIke0B9IgorfQorCitmdW5jdGlvbiBtYWtlUGFja2FnZSB7CisgICBydW5CdWlsZENvbW1hbmQgbWFrZS5sb2cgbWFrZSAiJHtAfSIKK30KKworZnVuY3Rpb24gaW5zdGFsbFBhY2thZ2UgeworICAgcnVuQnVpbGRDb21tYW5kIGluc3RhbGwubG9nIG1ha2UgaW5zdGFsbCAiJHtAfSIKK30KKworZnVuY3Rpb24gYnVpbGRIb3N0UGFja2FnZSB7CisgICBsb2NhbCBhcnJheT0iJHsxfSIKKyAgIHNoaWZ0IDEKKworICAgbG9nUGFja2FnZVRhc2sgIiR7YXJyYXl9IiAiYnVpbGRpbmcgaG9zdCBwYWNrYWdlIgorCisgICBsb2NhbCBzb3VyY2VWYXJpYWJsZT0iJHthcnJheX1bc291cmNlXSIKKyAgIGxvY2FsIGJ1aWxkPSIkeyFzb3VyY2VWYXJpYWJsZX0taG9zdCIKKyAgIGxvY2FsIHByZWZpeD0iJChyZWFscGF0aCAiJHshc291cmNlVmFyaWFibGV9LWluc3RhbGwiKSIKKworICAgbWFrZURpcmVjdG9yeSAiJHtidWlsZH0iCisgICBjZCAiJHtidWlsZH0iCisgICBsb2dCdWlsZERpcmVjdG9yeQorICAgY29uZmlndXJlUGFja2FnZSAiLi4vJHshc291cmNlVmFyaWFibGV9IiAtLXByZWZpeD0iJHtwcmVmaXh9IgorICAgbWFrZVBhY2thZ2UKKyAgIGluc3RhbGxQYWNrYWdlCisgICBjZCAuLgorCisgICBsb2NhbCBiaW49IiR7cHJlZml4fS9iaW4iCisgICBwYXRoUHJlcGVuZCAiJHtiaW59IgorCisgICB3aGlsZSBbICIkeyN9IiAtZ3QgMCBdCisgICBkbworICAgICAgbG9jYWwgY29tbWFuZD0iJHsxfSIKKyAgICAgIGxvY2FsIHZhcmlhYmxlPSIkezJ9IgorICAgICAgc2hpZnQgMgorCisgICAgICBjaGFuZ2VTY3JpcHRWYXJpYWJsZSAiJHtnY2NVbnBhY2tTY3JpcHR9IiAiJHt2YXJpYWJsZX0iICIke2Jpbn0vJHtjb21tYW5kfSIKKyAgIGRvbmUKK30KKworZnVuY3Rpb24gYnVpbGRIb3N0QXJjaGl2ZSB7CisgICBsb2NhbCBhcnJheT0iJHsxfSIKKyAgIHNoaWZ0IDEKKworICAgdW5wYWNrQXJjaGl2ZSAiJHthcnJheX0iCisgICBidWlsZEhvc3RQYWNrYWdlICIke2FycmF5fSIgIiR7QH0iCit9CisKK2Z1bmN0aW9uIGJ1aWxkSG9zdEF1dG9jb25mIHsKKyAgIGxvY2FsIGFycmF5PSIkezF9IgorICAgbG9jYWwgYXV0b2NvbmZWYXJpYWJsZT0iJHsyfSIKKyAgIGxvY2FsIGF1dG9oZWFkZXJWYXJpYWJsZT0iJHszfSIKKworICAgYnVpbGRIb3N0QXJjaGl2ZSAiJHthcnJheX0iIGF1dG9jb25mICIke2F1dG9jb25mVmFyaWFibGV9IiBhdXRvaGVhZGVyICIke2F1dG9oZWFkZXJWYXJpYWJsZX0iCit9CisKK2Z1bmN0aW9uIGNvbmZpZ3VyZVRhcmdldFBhY2thZ2UgeworICAgbG9jYWwgYXJyYXk9IiR7MX0iCisgICBzaGlmdCAxCisKKyAgIGxvY2FsIHNvdXJjZVZhcmlhYmxlPSIke2FycmF5fVtzb3VyY2VdIgorICAgY29uZmlndXJlUGFja2FnZSAiLi4vJHshc291cmNlVmFyaWFibGV9IiBcCisgICAgICAiLS1wcmVmaXg9JHtpbnN0YWxsRGlyZWN0b3J5fSIgXAorICAgICAgIi0tdGFyZ2V0PSR7dGFyZ2V0U3lzdGVtfSIgXAorICAgICAgIiR7QH0iCit9CisKK2Z1bmN0aW9uIGJ1aWxkVGFyZ2V0UGFja2FnZSB7CisgICBsb2NhbCBhcnJheT0iJHsxfSIKKyAgIHNoaWZ0IDEKKworICAgbG9nUGFja2FnZVRhc2sgIiR7YXJyYXl9IiAiYnVpbGRpbmcgdGFyZ2V0IHBhY2thZ2UiCisKKyAgIGNkIGdudQorICAgbG9jYWwgc291cmNlVmFyaWFibGU9IiR7YXJyYXl9W3NvdXJjZV0iCisgICBsb2NhbCBidWlsZD0iJHshc291cmNlVmFyaWFibGV9LXRhcmdldCIKKyAgIG1ha2VEaXJlY3RvcnkgIiR7YnVpbGR9IgorICAgY2QgIiR7YnVpbGR9IgorICAgbG9nQnVpbGREaXJlY3RvcnkKKyAgIGNvbmZpZ3VyZVRhcmdldFBhY2thZ2UgIiR7YXJyYXl9IiAiJHtAfSIKKyAgIG1ha2VQYWNrYWdlCisgICBpbnN0YWxsUGFja2FnZQorICAgY2QgLi4vLi4KK30KKworcm9vdERpcmVjdG9yeT0iIgorYXJjaGl2ZXNEaXJlY3Rvcnk9IiIKK2J1aWxkRGlyZWN0b3J5PSIiCitpbnN0YWxsRGlyZWN0b3J5PSIiCisKK3RhcmdldFN5c3RlbT0iIgorZ2NjVmVyc2lvbj0iIgorCit3aGlsZSBnZXRvcHRzICI6aHF2ZDphOmI6aTp0Omc6IiBvcHRpb24KK2RvCisgICBjYXNlICIke29wdGlvbn0iCisgICBpbgorICAgICAgaCkgc2hvd1VzYWdlOzsKKworICAgICAgcSkgbG9nTGVzczs7CisgICAgICB2KSBsb2dNb3JlOzsKKworICAgICAgZCkgcm9vdERpcmVjdG9yeT0iJHtPUFRBUkd9Ijs7CisgICAgICBhKSBhcmNoaXZlc0RpcmVjdG9yeT0iJHtPUFRBUkd9Ijs7CisgICAgICBiKSBidWlsZERpcmVjdG9yeT0iJHtPUFRBUkd9Ijs7CisgICAgICBpKSBpbnN0YWxsRGlyZWN0b3J5PSIke09QVEFSR30iOzsKKworICAgICAgdCkgdGFyZ2V0U3lzdGVtPSIke09QVEFSR30iOzsKKyAgICAgIGcpIGdjY1ZlcnNpb249IiR7T1BUQVJHfSI7OworCisgICAgICA6KSBzeW50YXhFcnJvciAibWlzc2luZyBvb3BlcmFuZDogLSR7T1BUQVJHfSI7OworICAgICBcPykgc3ludGF4RXJyb3IgInVua25vd24gb3B0aW9uOiAtJHtPUFRBUkd9Ijs7CisgICAgICAqKSBzeW50YXhFcnJvciAidW5pbXBsZW1lbnRlZCBvcHRpb246IC0ke29wdGlvbn0iOzsKKyAgIGVzYWMKK2RvbmUKKworc2hpZnQgJCgoT1BUSU5EIC0gMSkpCitbICIkeyN9IiAtZXEgMCBdIHx8IHN5bnRheEVycm9yICJ0b28gbWFueSBwYXJhbWV0ZXJzIgorCitoYW5kbGVEaXJlY3RvcnlPcHRpb24gcm9vdERpcmVjdG9yeSAiJHtQV0R9IiAicm9vdCIKK2hhbmRsZURpcmVjdG9yeU9wdGlvbiBhcmNoaXZlc0RpcmVjdG9yeSAiJHtyb290RGlyZWN0b3J5fS8ke2RlZmF1bHRBcmNoaXZlc1N1YmRpcmVjdG9yeX0iICJhcmNoaXZlcyIKK2hhbmRsZURpcmVjdG9yeU9wdGlvbiBidWlsZERpcmVjdG9yeSAiJHtyb290RGlyZWN0b3J5fS8ke2RlZmF1bHRCdWlsZFN1YmRpcmVjdG9yeX0iICJidWlsZCIKK2hhbmRsZURpcmVjdG9yeU9wdGlvbiBpbnN0YWxsRGlyZWN0b3J5ICIke3Jvb3REaXJlY3Rvcnl9LyR7ZGVmYXVsdEluc3RhbGxTdWJkaXJlY3Rvcnl9IiAiaW5zdGFsbCIKKworWyAtbiAiJHt0YXJnZXRTeXN0ZW19IiBdIHx8IHRhcmdldFN5c3RlbT0iJHtkZWZhdWx0VGFyZ2V0U3lzdGVtfSIKK3JlYWRvbmx5IHRhcmdldFN5c3RlbQorCitwYXRoQ2hhbmdlICIkKGdldGNvbmYgUEFUSCkiCit1bnNldCBNQUtFRkxBR1MKKworbG9nTWVzc2FnZSB0YXNrICJmaW5kaW5nIGhvc3QgY29tbWFuZHMiCitmaW5kSG9zdENvbW1hbmQgQ0MgY2MgZ2NjCitmaW5kSG9zdENvbW1hbmQgQ1hYIGMrKyBnKysgY3h4IGd4eAorZmluZEhvc3RDb21tYW5kIExJQlRPT0wgbGlidG9vbAorCitsb2dNZXNzYWdlIHRhc2sgInZlcmlmeWluZyBhcmNoaXZlcyIKK2dudVZlcmlmeUFyY2hpdmUgZ251QXV0b2NvbmZPbGQgYXV0b2NvbmYgIiR7YXV0b2NvbmZPbGRWZXJzaW9ufSIKK2dudVZlcmlmeUFyY2hpdmUgZ251QXV0b2NvbmZOZXcgYXV0b2NvbmYgIiR7YXV0b2NvbmZOZXdWZXJzaW9ufSIKK2dudVZlcmlmeUFyY2hpdmUgZ251QXV0b21ha2UgYXV0b21ha2UgIiR7YXV0b21ha2VWZXJzaW9ufSIKK2dudVZlcmlmeUFyY2hpdmUgZ251QmludXRpbHMgYmludXRpbHMKK2dudVZlcmlmeUFyY2hpdmUgZ251R2NjIGdjYyAiJHtnY2NWZXJzaW9ufSIKK2RqZ3BwVmVyaWZ5QXJjaGl2ZSBkamdwcEdjYyBnY2MgczIgIiR7Z251R2NjW3ZlcnNpb25dfSIKK2RqZ3BwVmVyaWZ5QXJjaGl2ZSBkamdwcENyeCBkamNyeCAiIiAiJHtjcnhWZXJzaW9ufSIKKworbG9nTWVzc2FnZSB0YXNrICJwcmVwYXJpbmcgYnVpbGQgZGlyZWN0b3J5IgoraW5pdGlhbGl6ZURpcmVjdG9yeSAiJHtidWlsZERpcmVjdG9yeX0iCitjZCAiJHtidWlsZERpcmVjdG9yeX0iCisKK3VucGFja0FyY2hpdmUgZGpncHBDcngKK3VucGFja0FyY2hpdmUgZGpncHBHY2MKKworZ2NjVW5wYWNrU2NyaXB0PSJ1bnBhY2stZ2NjLnNoIgorYnVpbGRIb3N0QXV0b2NvbmYgZ251QXV0b2NvbmZPbGQgQVVUT0NPTkZfT0xEIEFVVE9IRUFERVJfT0xECitidWlsZEhvc3RBdXRvY29uZiBnbnVBdXRvY29uZk5ldyBBVVRPQ09ORiBBVVRPSEVBREVSCitidWlsZEhvc3RBcmNoaXZlIGdudUF1dG9tYWtlCisKK2xvZ01lc3NhZ2UgdGFzayAicGF0Y2hpbmcgZ2NjIHNvdXJjZSIKK2xvZ0J1aWxkRGlyZWN0b3J5CitjaG1vZCB1PXJ3eCxnbz1yICIke2djY1VucGFja1NjcmlwdH0iCitydW5CdWlsZENvbW1hbmQgdW5wYWNrLWdjYy5sb2cgIi4vJHtnY2NVbnBhY2tTY3JpcHR9IiAiJChyZWFscGF0aCAtLXJlbGF0aXZlLXRvPS4gIiR7Z251R2NjWyJwYXRoIl19IikiCisKK2NkIGdudQordW5wYWNrQXJjaGl2ZSBnbnVCaW51dGlscworY2QgLi4KKworbG9nTWVzc2FnZSB0YXNrICJwcmVwYXJpbmcgaW5zdGFsbCBkaXJlY3RvcnkiCitpbml0aWFsaXplRGlyZWN0b3J5ICIke2luc3RhbGxEaXJlY3Rvcnl9IgorcGF0aFByZXBlbmQgIiQke2luc3RhbGxEaXJlY3Rvcnl9L2JpbiIKK3JlYWRvbmx5IHRhcmdldERpcmVjdG9yeT0iJHtpbnN0YWxsRGlyZWN0b3J5fS8ke3RhcmdldFN5c3RlbX0iCittYWtlRGlyZWN0b3J5ICIke3RhcmdldERpcmVjdG9yeX0iCittYWtlRGlyZWN0b3J5ICIke3RhcmdldERpcmVjdG9yeX0vYmluIgorY3AgLXIgbGliICIke3RhcmdldERpcmVjdG9yeX0iCitjcCAtciBpbmNsdWRlICIke3RhcmdldERpcmVjdG9yeX0iCisKK2xvZ01lc3NhZ2UgdGFzayAiYnVpbGRpbmcgc3R1YmlmeSIKK2NkIHNyYy9zdHViCitsb2dCdWlsZERpcmVjdG9yeQorcnVuQnVpbGRDb21tYW5kIGNvbXBpbGUubG9nICIke0NDfSIgLU8yIHN0dWJpZnkuYyAtbyAiJHt0YXJnZXREaXJlY3Rvcnl9L2Jpbi9zdHViaWZ5IgorY2QgLi4vLi4KKworYnVpbGRUYXJnZXRQYWNrYWdlIGdudUJpbnV0aWxzCitidWlsZFRhcmdldFBhY2thZ2UgZGpncHBHY2MgLS13aXRoLWhlYWRlcnM9IiR7dGFyZ2V0RGlyZWN0b3J5fS9pbmNsdWRlIgorCitsb2dNZXNzYWdlIHRhc2sgImNyZWF0aW5nIHN5bWJvbGljIGxpbmtzIgorY2QgIiR7dGFyZ2V0RGlyZWN0b3J5fS9saWIiCitsbiAtcyBsaWJzdGRjKysuYSBsaWJzdGRjeHguYQorbG4gLXMgbGlic3VwYysrLmEgbGlic3VwY3h4LmEKKworbG9nTWVzc2FnZSB0YXNrICJjbGVhbmluZyB1cCIKK2NkIC8KK2VtcHR5RGlyZWN0b3J5ICIke2J1aWxkRGlyZWN0b3J5fSIKKworbG9nTWVzc2FnZSB0YXNrICJkb25lIgorZXhpdCAwCmRpZmYgLS1naXQgYS9Eb2N1bWVudHMvQlVHUyBiL0RvY3VtZW50cy9CVUdTCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA3NGIxYWYKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudHMvQlVHUwpAQCAtMCwwICsxLDIgQEAKK3N5c3RlbWQgcmVzdGFydCBvZiBhIHBhdGggdW5pdCBkb2Vzbid0IHdvcmsKK1NFTEVDVFZUIGRvZXNuJ3QgcmVkaXJlY3QgaW5wdXQKZGlmZiAtLWdpdCBhL0RvY3VtZW50cy9CcmxBUElyZWYuZG94eS5pbiBiL0RvY3VtZW50cy9CcmxBUElyZWYuZG94eS5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZjJlODA1Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRzL0JybEFQSXJlZi5kb3h5LmluCkBAIC0wLDAgKzEsMTA5OCBAQAorIyBEb3h5ZmlsZSAxLjMuOS4xCisjIEBjb25maWd1cmVfaW5wdXRACisKKyMgVGhpcyBmaWxlIGRlc2NyaWJlcyB0aGUgc2V0dGluZ3MgdG8gYmUgdXNlZCBieSB0aGUgZG9jdW1lbnRhdGlvbiBzeXN0ZW0KKyMgZG94eWdlbiAod3d3LmRveHlnZW4ub3JnKSBmb3IgYSBwcm9qZWN0CisjCisjIEFsbCB0ZXh0IGFmdGVyIGEgaGFzaCAoIykgaXMgY29uc2lkZXJlZCBhIGNvbW1lbnQgYW5kIHdpbGwgYmUgaWdub3JlZAorIyBUaGUgZm9ybWF0IGlzOgorIyAgICAgICBUQUcgPSB2YWx1ZSBbdmFsdWUsIC4uLl0KKyMgRm9yIGxpc3RzIGl0ZW1zIGNhbiBhbHNvIGJlIGFwcGVuZGVkIHVzaW5nOgorIyAgICAgICBUQUcgKz0gdmFsdWUgW3ZhbHVlLCAuLi5dCisjIFZhbHVlcyB0aGF0IGNvbnRhaW4gc3BhY2VzIHNob3VsZCBiZSBwbGFjZWQgYmV0d2VlbiBxdW90ZXMgKCIgIikKKworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBQcm9qZWN0IHJlbGF0ZWQgY29uZmlndXJhdGlvbiBvcHRpb25zCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyMgVGhlIFBST0pFQ1RfTkFNRSB0YWcgaXMgYSBzaW5nbGUgd29yZCAob3IgYSBzZXF1ZW5jZSBvZiB3b3JkcyBzdXJyb3VuZGVkIAorIyBieSBxdW90ZXMpIHRoYXQgc2hvdWxkIGlkZW50aWZ5IHRoZSBwcm9qZWN0LgorCitQUk9KRUNUX05BTUUgICAgICAgICAgID0gQnJsQVBJCisKKyMgVGhlIFBST0pFQ1RfTlVNQkVSIHRhZyBjYW4gYmUgdXNlZCB0byBlbnRlciBhIHByb2plY3Qgb3IgcmV2aXNpb24gbnVtYmVyLiAKKyMgVGhpcyBjb3VsZCBiZSBoYW5keSBmb3IgYXJjaGl2aW5nIHRoZSBnZW5lcmF0ZWQgZG9jdW1lbnRhdGlvbiBvciAKKyMgaWYgc29tZSB2ZXJzaW9uIGNvbnRyb2wgc3lzdGVtIGlzIHVzZWQuCisKK1BST0pFQ1RfTlVNQkVSICAgICAgICAgPSBAYXBpX3ZlcnNpb25ACisKKyMgVGhlIE9VVFBVVF9ESVJFQ1RPUlkgdGFnIGlzIHVzZWQgdG8gc3BlY2lmeSB0aGUgKHJlbGF0aXZlIG9yIGFic29sdXRlKSAKKyMgYmFzZSBwYXRoIHdoZXJlIHRoZSBnZW5lcmF0ZWQgZG9jdW1lbnRhdGlvbiB3aWxsIGJlIHB1dC4gCisjIElmIGEgcmVsYXRpdmUgcGF0aCBpcyBlbnRlcmVkLCBpdCB3aWxsIGJlIHJlbGF0aXZlIHRvIHRoZSBsb2NhdGlvbiAKKyMgd2hlcmUgZG94eWdlbiB3YXMgc3RhcnRlZC4gSWYgbGVmdCBibGFuayB0aGUgY3VycmVudCBkaXJlY3Rvcnkgd2lsbCBiZSB1c2VkLgorCitPVVRQVVRfRElSRUNUT1JZICAgICAgID0gQGJ1aWxkZGlyQAorCisjIElmIHRoZSBDUkVBVEVfU1VCRElSUyB0YWcgaXMgc2V0IHRvIFlFUywgdGhlbiBkb3h5Z2VuIHdpbGwgY3JlYXRlIAorIyA0MDk2IHN1Yi1kaXJlY3RvcmllcyAoaW4gMiBsZXZlbHMpIHVuZGVyIHRoZSBvdXRwdXQgZGlyZWN0b3J5IG9mIGVhY2ggb3V0cHV0IAorIyBmb3JtYXQgYW5kIHdpbGwgZGlzdHJpYnV0ZSB0aGUgZ2VuZXJhdGVkIGZpbGVzIG92ZXIgdGhlc2UgZGlyZWN0b3JpZXMuIAorIyBFbmFibGluZyB0aGlzIG9wdGlvbiBjYW4gYmUgdXNlZnVsIHdoZW4gZmVlZGluZyBkb3h5Z2VuIGEgaHVnZSBhbW91bnQgb2Ygc291cmNlIAorIyBmaWxlcywgd2hlcmUgcHV0dGluZyBhbGwgZ2VuZXJhdGVkIGZpbGVzIGluIHRoZSBzYW1lIGRpcmVjdG9yeSB3b3VsZCBvdGhlcndpc2UgCisjIGNhdXNlIHBlcmZvcm1hbmNlIHByb2JsZW1zIGZvciB0aGUgZmlsZSBzeXN0ZW0uCisKK0NSRUFURV9TVUJESVJTICAgICAgICAgPSBOTworCisjIFRoZSBPVVRQVVRfTEFOR1VBR0UgdGFnIGlzIHVzZWQgdG8gc3BlY2lmeSB0aGUgbGFuZ3VhZ2UgaW4gd2hpY2ggYWxsIAorIyBkb2N1bWVudGF0aW9uIGdlbmVyYXRlZCBieSBkb3h5Z2VuIGlzIHdyaXR0ZW4uIERveHlnZW4gd2lsbCB1c2UgdGhpcyAKKyMgaW5mb3JtYXRpb24gdG8gZ2VuZXJhdGUgYWxsIGNvbnN0YW50IG91dHB1dCBpbiB0aGUgcHJvcGVyIGxhbmd1YWdlLiAKKyMgVGhlIGRlZmF1bHQgbGFuZ3VhZ2UgaXMgRW5nbGlzaCwgb3RoZXIgc3VwcG9ydGVkIGxhbmd1YWdlcyBhcmU6IAorIyBCcmF6aWxpYW4sIENhdGFsYW4sIENoaW5lc2UsIENoaW5lc2UtVHJhZGl0aW9uYWwsIENyb2F0aWFuLCBDemVjaCwgRGFuaXNoLCAKKyMgRHV0Y2gsIEZpbm5pc2gsIEZyZW5jaCwgR2VybWFuLCBHcmVlaywgSHVuZ2FyaWFuLCBJdGFsaWFuLCBKYXBhbmVzZSwgCisjIEphcGFuZXNlLWVuIChKYXBhbmVzZSB3aXRoIEVuZ2xpc2ggbWVzc2FnZXMpLCBLb3JlYW4sIEtvcmVhbi1lbiwgTm9yd2VnaWFuLCAKKyMgUG9saXNoLCBQb3J0dWd1ZXNlLCBSb21hbmlhbiwgUnVzc2lhbiwgU2VyYmlhbiwgU2xvdmFrLCBTbG92ZW5lLCBTcGFuaXNoLCAKKyMgU3dlZGlzaCwgYW5kIFVrcmFpbmlhbi4KKworT1VUUFVUX0xBTkdVQUdFICAgICAgICA9IEVuZ2xpc2gKKworIyBJZiB0aGUgQlJJRUZfTUVNQkVSX0RFU0MgdGFnIGlzIHNldCB0byBZRVMgKHRoZSBkZWZhdWx0KSBEb3h5Z2VuIHdpbGwgCisjIGluY2x1ZGUgYnJpZWYgbWVtYmVyIGRlc2NyaXB0aW9ucyBhZnRlciB0aGUgbWVtYmVycyB0aGF0IGFyZSBsaXN0ZWQgaW4gCisjIHRoZSBmaWxlIGFuZCBjbGFzcyBkb2N1bWVudGF0aW9uIChzaW1pbGFyIHRvIEphdmFEb2MpLiAKKyMgU2V0IHRvIE5PIHRvIGRpc2FibGUgdGhpcy4KKworQlJJRUZfTUVNQkVSX0RFU0MgICAgICA9IFlFUworCisjIElmIHRoZSBSRVBFQVRfQlJJRUYgdGFnIGlzIHNldCB0byBZRVMgKHRoZSBkZWZhdWx0KSBEb3h5Z2VuIHdpbGwgcHJlcGVuZCAKKyMgdGhlIGJyaWVmIGRlc2NyaXB0aW9uIG9mIGEgbWVtYmVyIG9yIGZ1bmN0aW9uIGJlZm9yZSB0aGUgZGV0YWlsZWQgZGVzY3JpcHRpb24uIAorIyBOb3RlOiBpZiBib3RoIEhJREVfVU5ET0NfTUVNQkVSUyBhbmQgQlJJRUZfTUVNQkVSX0RFU0MgYXJlIHNldCB0byBOTywgdGhlIAorIyBicmllZiBkZXNjcmlwdGlvbnMgd2lsbCBiZSBjb21wbGV0ZWx5IHN1cHByZXNzZWQuCisKK1JFUEVBVF9CUklFRiAgICAgICAgICAgPSBOTworCisjIFRoaXMgdGFnIGltcGxlbWVudHMgYSBxdWFzaS1pbnRlbGxpZ2VudCBicmllZiBkZXNjcmlwdGlvbiBhYmJyZXZpYXRvciAKKyMgdGhhdCBpcyB1c2VkIHRvIGZvcm0gdGhlIHRleHQgaW4gdmFyaW91cyBsaXN0aW5ncy4gRWFjaCBzdHJpbmcgCisjIGluIHRoaXMgbGlzdCwgaWYgZm91bmQgYXMgdGhlIGxlYWRpbmcgdGV4dCBvZiB0aGUgYnJpZWYgZGVzY3JpcHRpb24sIHdpbGwgYmUgCisjIHN0cmlwcGVkIGZyb20gdGhlIHRleHQgYW5kIHRoZSByZXN1bHQgYWZ0ZXIgcHJvY2Vzc2luZyB0aGUgd2hvbGUgbGlzdCwgaXMgdXNlZCAKKyMgYXMgdGhlIGFubm90YXRlZCB0ZXh0LiBPdGhlcndpc2UsIHRoZSBicmllZiBkZXNjcmlwdGlvbiBpcyB1c2VkIGFzLWlzLiBJZiBsZWZ0IAorIyBibGFuaywgdGhlIGZvbGxvd2luZyB2YWx1ZXMgYXJlIHVzZWQgKCIkbmFtZSIgaXMgYXV0b21hdGljYWxseSByZXBsYWNlZCB3aXRoIHRoZSAKKyMgbmFtZSBvZiB0aGUgZW50aXR5KTogIlRoZSAkbmFtZSBjbGFzcyIgIlRoZSAkbmFtZSB3aWRnZXQiICJUaGUgJG5hbWUgZmlsZSIgCisjICJpcyIgInByb3ZpZGVzIiAic3BlY2lmaWVzIiAiY29udGFpbnMiICJyZXByZXNlbnRzIiAiYSIgImFuIiAidGhlIgorCitBQkJSRVZJQVRFX0JSSUVGICAgICAgID0gCisKKyMgSWYgdGhlIEFMV0FZU19ERVRBSUxFRF9TRUMgYW5kIFJFUEVBVF9CUklFRiB0YWdzIGFyZSBib3RoIHNldCB0byBZRVMgdGhlbiAKKyMgRG94eWdlbiB3aWxsIGdlbmVyYXRlIGEgZGV0YWlsZWQgc2VjdGlvbiBldmVuIGlmIHRoZXJlIGlzIG9ubHkgYSBicmllZiAKKyMgZGVzY3JpcHRpb24uCisKK0FMV0FZU19ERVRBSUxFRF9TRUMgICAgPSBZRVMKKworIyBJZiB0aGUgSU5MSU5FX0lOSEVSSVRFRF9NRU1CIHRhZyBpcyBzZXQgdG8gWUVTLCBkb3h5Z2VuIHdpbGwgc2hvdyBhbGwgaW5oZXJpdGVkIAorIyBtZW1iZXJzIG9mIGEgY2xhc3MgaW4gdGhlIGRvY3VtZW50YXRpb24gb2YgdGhhdCBjbGFzcyBhcyBpZiB0aG9zZSBtZW1iZXJzIHdlcmUgCisjIG9yZGluYXJ5IGNsYXNzIG1lbWJlcnMuIENvbnN0cnVjdG9ycywgZGVzdHJ1Y3RvcnMgYW5kIGFzc2lnbm1lbnQgb3BlcmF0b3JzIG9mIAorIyB0aGUgYmFzZSBjbGFzc2VzIHdpbGwgbm90IGJlIHNob3duLgorCitJTkxJTkVfSU5IRVJJVEVEX01FTUIgID0gTk8KKworIyBJZiB0aGUgRlVMTF9QQVRIX05BTUVTIHRhZyBpcyBzZXQgdG8gWUVTIHRoZW4gRG94eWdlbiB3aWxsIHByZXBlbmQgdGhlIGZ1bGwgCisjIHBhdGggYmVmb3JlIGZpbGVzIG5hbWUgaW4gdGhlIGZpbGUgbGlzdCBhbmQgaW4gdGhlIGhlYWRlciBmaWxlcy4gSWYgc2V0IAorIyB0byBOTyB0aGUgc2hvcnRlc3QgcGF0aCB0aGF0IG1ha2VzIHRoZSBmaWxlIG5hbWUgdW5pcXVlIHdpbGwgYmUgdXNlZC4KKworRlVMTF9QQVRIX05BTUVTICAgICAgICA9IE5PCisKKyMgSWYgdGhlIEZVTExfUEFUSF9OQU1FUyB0YWcgaXMgc2V0IHRvIFlFUyB0aGVuIHRoZSBTVFJJUF9GUk9NX1BBVEggdGFnIAorIyBjYW4gYmUgdXNlZCB0byBzdHJpcCBhIHVzZXItZGVmaW5lZCBwYXJ0IG9mIHRoZSBwYXRoLiBTdHJpcHBpbmcgaXMgCisjIG9ubHkgZG9uZSBpZiBvbmUgb2YgdGhlIHNwZWNpZmllZCBzdHJpbmdzIG1hdGNoZXMgdGhlIGxlZnQtaGFuZCBwYXJ0IG9mIAorIyB0aGUgcGF0aC4gVGhlIHRhZyBjYW4gYmUgdXNlZCB0byBzaG93IHJlbGF0aXZlIHBhdGhzIGluIHRoZSBmaWxlIGxpc3QuIAorIyBJZiBsZWZ0IGJsYW5rIHRoZSBkaXJlY3RvcnkgZnJvbSB3aGljaCBkb3h5Z2VuIGlzIHJ1biBpcyB1c2VkIGFzIHRoZSAKKyMgcGF0aCB0byBzdHJpcC4KKworU1RSSVBfRlJPTV9QQVRIICAgICAgICA9IAorCisjIFRoZSBTVFJJUF9GUk9NX0lOQ19QQVRIIHRhZyBjYW4gYmUgdXNlZCB0byBzdHJpcCBhIHVzZXItZGVmaW5lZCBwYXJ0IG9mIAorIyB0aGUgcGF0aCBtZW50aW9uZWQgaW4gdGhlIGRvY3VtZW50YXRpb24gb2YgYSBjbGFzcywgd2hpY2ggdGVsbHMgCisjIHRoZSByZWFkZXIgd2hpY2ggaGVhZGVyIGZpbGUgdG8gaW5jbHVkZSBpbiBvcmRlciB0byB1c2UgYSBjbGFzcy4gCisjIElmIGxlZnQgYmxhbmsgb25seSB0aGUgbmFtZSBvZiB0aGUgaGVhZGVyIGZpbGUgY29udGFpbmluZyB0aGUgY2xhc3MgCisjIGRlZmluaXRpb24gaXMgdXNlZC4gT3RoZXJ3aXNlIG9uZSBzaG91bGQgc3BlY2lmeSB0aGUgaW5jbHVkZSBwYXRocyB0aGF0IAorIyBhcmUgbm9ybWFsbHkgcGFzc2VkIHRvIHRoZSBjb21waWxlciB1c2luZyB0aGUgLUkgZmxhZy4KKworU1RSSVBfRlJPTV9JTkNfUEFUSCAgICA9IAorCisjIElmIHRoZSBTSE9SVF9OQU1FUyB0YWcgaXMgc2V0IHRvIFlFUywgZG94eWdlbiB3aWxsIGdlbmVyYXRlIG11Y2ggc2hvcnRlciAKKyMgKGJ1dCBsZXNzIHJlYWRhYmxlKSBmaWxlIG5hbWVzLiBUaGlzIGNhbiBiZSB1c2VmdWwgaXMgeW91ciBmaWxlIHN5c3RlbXMgCisjIGRvZXNuJ3Qgc3VwcG9ydCBsb25nIG5hbWVzIGxpa2Ugb24gRE9TLCBNYWMsIG9yIENELVJPTS4KKworU0hPUlRfTkFNRVMgICAgICAgICAgICA9IE5PCisKKyMgSWYgdGhlIEpBVkFET0NfQVVUT0JSSUVGIHRhZyBpcyBzZXQgdG8gWUVTIHRoZW4gRG94eWdlbiAKKyMgd2lsbCBpbnRlcnByZXQgdGhlIGZpcnN0IGxpbmUgKHVudGlsIHRoZSBmaXJzdCBkb3QpIG9mIGEgSmF2YURvYy1zdHlsZSAKKyMgY29tbWVudCBhcyB0aGUgYnJpZWYgZGVzY3JpcHRpb24uIElmIHNldCB0byBOTywgdGhlIEphdmFEb2MgCisjIGNvbW1lbnRzIHdpbGwgYmVoYXZlIGp1c3QgbGlrZSB0aGUgUXQtc3R5bGUgY29tbWVudHMgKHRodXMgcmVxdWlyaW5nIGFuIAorIyBleHBsaWNpdCBAYnJpZWYgY29tbWFuZCBmb3IgYSBicmllZiBkZXNjcmlwdGlvbi4KKworSkFWQURPQ19BVVRPQlJJRUYgICAgICA9IE5PCisKKyMgVGhlIE1VTFRJTElORV9DUFBfSVNfQlJJRUYgdGFnIGNhbiBiZSBzZXQgdG8gWUVTIHRvIG1ha2UgRG94eWdlbiAKKyMgdHJlYXQgYSBtdWx0aS1saW5lIEMrKyBzcGVjaWFsIGNvbW1lbnQgYmxvY2sgKGkuZS4gYSBibG9jayBvZiAvLyEgb3IgLy8vIAorIyBjb21tZW50cykgYXMgYSBicmllZiBkZXNjcmlwdGlvbi4gVGhpcyB1c2VkIHRvIGJlIHRoZSBkZWZhdWx0IGJlaGF2aW91ci4gCisjIFRoZSBuZXcgZGVmYXVsdCBpcyB0byB0cmVhdCBhIG11bHRpLWxpbmUgQysrIGNvbW1lbnQgYmxvY2sgYXMgYSBkZXRhaWxlZCAKKyMgZGVzY3JpcHRpb24uIFNldCB0aGlzIHRhZyB0byBZRVMgaWYgeW91IHByZWZlciB0aGUgb2xkIGJlaGF2aW91ciBpbnN0ZWFkLgorCitNVUxUSUxJTkVfQ1BQX0lTX0JSSUVGID0gTk8KKworIyBJZiB0aGUgSU5IRVJJVF9ET0NTIHRhZyBpcyBzZXQgdG8gWUVTICh0aGUgZGVmYXVsdCkgdGhlbiBhbiB1bmRvY3VtZW50ZWQgCisjIG1lbWJlciBpbmhlcml0cyB0aGUgZG9jdW1lbnRhdGlvbiBmcm9tIGFueSBkb2N1bWVudGVkIG1lbWJlciB0aGF0IGl0IAorIyByZS1pbXBsZW1lbnRzLgorCitJTkhFUklUX0RPQ1MgICAgICAgICAgID0gWUVTCisKKyMgSWYgbWVtYmVyIGdyb3VwaW5nIGlzIHVzZWQgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kIHRoZSBESVNUUklCVVRFX0dST1VQX0RPQyAKKyMgdGFnIGlzIHNldCB0byBZRVMsIHRoZW4gZG94eWdlbiB3aWxsIHJldXNlIHRoZSBkb2N1bWVudGF0aW9uIG9mIHRoZSBmaXJzdCAKKyMgbWVtYmVyIGluIHRoZSBncm91cCAoaWYgYW55KSBmb3IgdGhlIG90aGVyIG1lbWJlcnMgb2YgdGhlIGdyb3VwLiBCeSBkZWZhdWx0IAorIyBhbGwgbWVtYmVycyBvZiBhIGdyb3VwIG11c3QgYmUgZG9jdW1lbnRlZCBleHBsaWNpdGx5LgorCitESVNUUklCVVRFX0dST1VQX0RPQyAgID0gTk8KKworIyBUaGUgVEFCX1NJWkUgdGFnIGNhbiBiZSB1c2VkIHRvIHNldCB0aGUgbnVtYmVyIG9mIHNwYWNlcyBpbiBhIHRhYi4gCisjIERveHlnZW4gdXNlcyB0aGlzIHZhbHVlIHRvIHJlcGxhY2UgdGFicyBieSBzcGFjZXMgaW4gY29kZSBmcmFnbWVudHMuCisKK1RBQl9TSVpFICAgICAgICAgICAgICAgPSA4CisKKyMgVGhpcyB0YWcgY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSBhIG51bWJlciBvZiBhbGlhc2VzIHRoYXQgYWN0cyAKKyMgYXMgY29tbWFuZHMgaW4gdGhlIGRvY3VtZW50YXRpb24uIEFuIGFsaWFzIGhhcyB0aGUgZm9ybSAibmFtZT12YWx1ZSIuIAorIyBGb3IgZXhhbXBsZSBhZGRpbmcgInNpZGVlZmZlY3Q9XHBhciBTaWRlIEVmZmVjdHM6XG4iIHdpbGwgYWxsb3cgeW91IHRvIAorIyBwdXQgdGhlIGNvbW1hbmQgXHNpZGVlZmZlY3QgKG9yIEBzaWRlZWZmZWN0KSBpbiB0aGUgZG9jdW1lbnRhdGlvbiwgd2hpY2ggCisjIHdpbGwgcmVzdWx0IGluIGEgdXNlci1kZWZpbmVkIHBhcmFncmFwaCB3aXRoIGhlYWRpbmcgIlNpZGUgRWZmZWN0czoiLiAKKyMgWW91IGNhbiBwdXQgXG4ncyBpbiB0aGUgdmFsdWUgcGFydCBvZiBhbiBhbGlhcyB0byBpbnNlcnQgbmV3bGluZXMuCisKK0FMSUFTRVMgICAgICAgICAgICAgICAgPSAKKworIyBTZXQgdGhlIE9QVElNSVpFX09VVFBVVF9GT1JfQyB0YWcgdG8gWUVTIGlmIHlvdXIgcHJvamVjdCBjb25zaXN0cyBvZiBDIHNvdXJjZXMgCisjIG9ubHkuIERveHlnZW4gd2lsbCB0aGVuIGdlbmVyYXRlIG91dHB1dCB0aGF0IGlzIG1vcmUgdGFpbG9yZWQgZm9yIEMuIAorIyBGb3IgaW5zdGFuY2UsIHNvbWUgb2YgdGhlIG5hbWVzIHRoYXQgYXJlIHVzZWQgd2lsbCBiZSBkaWZmZXJlbnQuIFRoZSBsaXN0IAorIyBvZiBhbGwgbWVtYmVycyB3aWxsIGJlIG9taXR0ZWQsIGV0Yy4KKworT1BUSU1JWkVfT1VUUFVUX0ZPUl9DICA9IFlFUworCisjIFNldCB0aGUgT1BUSU1JWkVfT1VUUFVUX0pBVkEgdGFnIHRvIFlFUyBpZiB5b3VyIHByb2plY3QgY29uc2lzdHMgb2YgSmF2YSBzb3VyY2VzIAorIyBvbmx5LiBEb3h5Z2VuIHdpbGwgdGhlbiBnZW5lcmF0ZSBvdXRwdXQgdGhhdCBpcyBtb3JlIHRhaWxvcmVkIGZvciBKYXZhLiAKKyMgRm9yIGluc3RhbmNlLCBuYW1lc3BhY2VzIHdpbGwgYmUgcHJlc2VudGVkIGFzIHBhY2thZ2VzLCBxdWFsaWZpZWQgc2NvcGVzIAorIyB3aWxsIGxvb2sgZGlmZmVyZW50LCBldGMuCisKK09QVElNSVpFX09VVFBVVF9KQVZBICAgPSBOTworCisjIFNldCB0aGUgU1VCR1JPVVBJTkcgdGFnIHRvIFlFUyAodGhlIGRlZmF1bHQpIHRvIGFsbG93IGNsYXNzIG1lbWJlciBncm91cHMgb2YgCisjIHRoZSBzYW1lIHR5cGUgKGZvciBpbnN0YW5jZSBhIGdyb3VwIG9mIHB1YmxpYyBmdW5jdGlvbnMpIHRvIGJlIHB1dCBhcyBhIAorIyBzdWJncm91cCBvZiB0aGF0IHR5cGUgKGUuZy4gdW5kZXIgdGhlIFB1YmxpYyBGdW5jdGlvbnMgc2VjdGlvbikuIFNldCBpdCB0byAKKyMgTk8gdG8gcHJldmVudCBzdWJncm91cGluZy4gQWx0ZXJuYXRpdmVseSwgdGhpcyBjYW4gYmUgZG9uZSBwZXIgY2xhc3MgdXNpbmcgCisjIHRoZSBcbm9zdWJncm91cGluZyBjb21tYW5kLgorCitTVUJHUk9VUElORyAgICAgICAgICAgID0gWUVTCisKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgQnVpbGQgcmVsYXRlZCBjb25maWd1cmF0aW9uIG9wdGlvbnMKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworIyBJZiB0aGUgRVhUUkFDVF9BTEwgdGFnIGlzIHNldCB0byBZRVMgZG94eWdlbiB3aWxsIGFzc3VtZSBhbGwgZW50aXRpZXMgaW4gCisjIGRvY3VtZW50YXRpb24gYXJlIGRvY3VtZW50ZWQsIGV2ZW4gaWYgbm8gZG9jdW1lbnRhdGlvbiB3YXMgYXZhaWxhYmxlLiAKKyMgUHJpdmF0ZSBjbGFzcyBtZW1iZXJzIGFuZCBzdGF0aWMgZmlsZSBtZW1iZXJzIHdpbGwgYmUgaGlkZGVuIHVubGVzcyAKKyMgdGhlIEVYVFJBQ1RfUFJJVkFURSBhbmQgRVhUUkFDVF9TVEFUSUMgdGFncyBhcmUgc2V0IHRvIFlFUworCitFWFRSQUNUX0FMTCAgICAgICAgICAgID0gWUVTIAorCisjIElmIHRoZSBFWFRSQUNUX1BSSVZBVEUgdGFnIGlzIHNldCB0byBZRVMgYWxsIHByaXZhdGUgbWVtYmVycyBvZiBhIGNsYXNzIAorIyB3aWxsIGJlIGluY2x1ZGVkIGluIHRoZSBkb2N1bWVudGF0aW9uLgorCitFWFRSQUNUX1BSSVZBVEUgICAgICAgID0gTk8KKworIyBJZiB0aGUgRVhUUkFDVF9TVEFUSUMgdGFnIGlzIHNldCB0byBZRVMgYWxsIHN0YXRpYyBtZW1iZXJzIG9mIGEgZmlsZSAKKyMgd2lsbCBiZSBpbmNsdWRlZCBpbiB0aGUgZG9jdW1lbnRhdGlvbi4KKworRVhUUkFDVF9TVEFUSUMgICAgICAgICA9IE5PCisKKyMgSWYgdGhlIEVYVFJBQ1RfTE9DQUxfQ0xBU1NFUyB0YWcgaXMgc2V0IHRvIFlFUyBjbGFzc2VzIChhbmQgc3RydWN0cykgCisjIGRlZmluZWQgbG9jYWxseSBpbiBzb3VyY2UgZmlsZXMgd2lsbCBiZSBpbmNsdWRlZCBpbiB0aGUgZG9jdW1lbnRhdGlvbi4gCisjIElmIHNldCB0byBOTyBvbmx5IGNsYXNzZXMgZGVmaW5lZCBpbiBoZWFkZXIgZmlsZXMgYXJlIGluY2x1ZGVkLgorCitFWFRSQUNUX0xPQ0FMX0NMQVNTRVMgID0gTk8KKworIyBUaGlzIGZsYWcgaXMgb25seSB1c2VmdWwgZm9yIE9iamVjdGl2ZS1DIGNvZGUuIFdoZW4gc2V0IHRvIFlFUyBsb2NhbCAKKyMgbWV0aG9kcywgd2hpY2ggYXJlIGRlZmluZWQgaW4gdGhlIGltcGxlbWVudGF0aW9uIHNlY3Rpb24gYnV0IG5vdCBpbiAKKyMgdGhlIGludGVyZmFjZSBhcmUgaW5jbHVkZWQgaW4gdGhlIGRvY3VtZW50YXRpb24uIAorIyBJZiBzZXQgdG8gTk8gKHRoZSBkZWZhdWx0KSBvbmx5IG1ldGhvZHMgaW4gdGhlIGludGVyZmFjZSBhcmUgaW5jbHVkZWQuCisKK0VYVFJBQ1RfTE9DQUxfTUVUSE9EUyAgPSBOTworCisjIElmIHRoZSBISURFX1VORE9DX01FTUJFUlMgdGFnIGlzIHNldCB0byBZRVMsIERveHlnZW4gd2lsbCBoaWRlIGFsbCAKKyMgdW5kb2N1bWVudGVkIG1lbWJlcnMgb2YgZG9jdW1lbnRlZCBjbGFzc2VzLCBmaWxlcyBvciBuYW1lc3BhY2VzLiAKKyMgSWYgc2V0IHRvIE5PICh0aGUgZGVmYXVsdCkgdGhlc2UgbWVtYmVycyB3aWxsIGJlIGluY2x1ZGVkIGluIHRoZSAKKyMgdmFyaW91cyBvdmVydmlld3MsIGJ1dCBubyBkb2N1bWVudGF0aW9uIHNlY3Rpb24gaXMgZ2VuZXJhdGVkLiAKKyMgVGhpcyBvcHRpb24gaGFzIG5vIGVmZmVjdCBpZiBFWFRSQUNUX0FMTCBpcyBlbmFibGVkLgorCitISURFX1VORE9DX01FTUJFUlMgICAgID0gWUVTCisKKyMgSWYgdGhlIEhJREVfVU5ET0NfQ0xBU1NFUyB0YWcgaXMgc2V0IHRvIFlFUywgRG94eWdlbiB3aWxsIGhpZGUgYWxsIAorIyB1bmRvY3VtZW50ZWQgY2xhc3NlcyB0aGF0IGFyZSBub3JtYWxseSB2aXNpYmxlIGluIHRoZSBjbGFzcyBoaWVyYXJjaHkuIAorIyBJZiBzZXQgdG8gTk8gKHRoZSBkZWZhdWx0KSB0aGVzZSBjbGFzc2VzIHdpbGwgYmUgaW5jbHVkZWQgaW4gdGhlIHZhcmlvdXMgCisjIG92ZXJ2aWV3cy4gVGhpcyBvcHRpb24gaGFzIG5vIGVmZmVjdCBpZiBFWFRSQUNUX0FMTCBpcyBlbmFibGVkLgorCitISURFX1VORE9DX0NMQVNTRVMgICAgID0gTk8KKworIyBJZiB0aGUgSElERV9GUklFTkRfQ09NUE9VTkRTIHRhZyBpcyBzZXQgdG8gWUVTLCBEb3h5Z2VuIHdpbGwgaGlkZSBhbGwgCisjIGZyaWVuZCAoY2xhc3N8c3RydWN0fHVuaW9uKSBkZWNsYXJhdGlvbnMuIAorIyBJZiBzZXQgdG8gTk8gKHRoZSBkZWZhdWx0KSB0aGVzZSBkZWNsYXJhdGlvbnMgd2lsbCBiZSBpbmNsdWRlZCBpbiB0aGUgCisjIGRvY3VtZW50YXRpb24uCisKK0hJREVfRlJJRU5EX0NPTVBPVU5EUyAgPSBOTworCisjIElmIHRoZSBISURFX0lOX0JPRFlfRE9DUyB0YWcgaXMgc2V0IHRvIFlFUywgRG94eWdlbiB3aWxsIGhpZGUgYW55IAorIyBkb2N1bWVudGF0aW9uIGJsb2NrcyBmb3VuZCBpbnNpZGUgdGhlIGJvZHkgb2YgYSBmdW5jdGlvbi4gCisjIElmIHNldCB0byBOTyAodGhlIGRlZmF1bHQpIHRoZXNlIGJsb2NrcyB3aWxsIGJlIGFwcGVuZGVkIHRvIHRoZSAKKyMgZnVuY3Rpb24ncyBkZXRhaWxlZCBkb2N1bWVudGF0aW9uIGJsb2NrLgorCitISURFX0lOX0JPRFlfRE9DUyAgICAgID0gTk8KKworIyBUaGUgSU5URVJOQUxfRE9DUyB0YWcgZGV0ZXJtaW5lcyBpZiBkb2N1bWVudGF0aW9uIAorIyB0aGF0IGlzIHR5cGVkIGFmdGVyIGEgXGludGVybmFsIGNvbW1hbmQgaXMgaW5jbHVkZWQuIElmIHRoZSB0YWcgaXMgc2V0IAorIyB0byBOTyAodGhlIGRlZmF1bHQpIHRoZW4gdGhlIGRvY3VtZW50YXRpb24gd2lsbCBiZSBleGNsdWRlZC4gCisjIFNldCBpdCB0byBZRVMgdG8gaW5jbHVkZSB0aGUgaW50ZXJuYWwgZG9jdW1lbnRhdGlvbi4KKworSU5URVJOQUxfRE9DUyAgICAgICAgICA9IE5PCisKKyMgSWYgdGhlIENBU0VfU0VOU0VfTkFNRVMgdGFnIGlzIHNldCB0byBOTyB0aGVuIERveHlnZW4gd2lsbCBvbmx5IGdlbmVyYXRlIAorIyBmaWxlIG5hbWVzIGluIGxvd2VyLWNhc2UgbGV0dGVycy4gSWYgc2V0IHRvIFlFUyB1cHBlci1jYXNlIGxldHRlcnMgYXJlIGFsc28gCisjIGFsbG93ZWQuIFRoaXMgaXMgdXNlZnVsIGlmIHlvdSBoYXZlIGNsYXNzZXMgb3IgZmlsZXMgd2hvc2UgbmFtZXMgb25seSBkaWZmZXIgCisjIGluIGNhc2UgYW5kIGlmIHlvdXIgZmlsZSBzeXN0ZW0gc3VwcG9ydHMgY2FzZSBzZW5zaXRpdmUgZmlsZSBuYW1lcy4gV2luZG93cyAKKyMgYW5kIE1hYyB1c2VycyBhcmUgYWR2aXNlZCB0byBzZXQgdGhpcyBvcHRpb24gdG8gTk8uCisKK0NBU0VfU0VOU0VfTkFNRVMgICAgICAgPSBZRVMKKworIyBJZiB0aGUgSElERV9TQ09QRV9OQU1FUyB0YWcgaXMgc2V0IHRvIE5PICh0aGUgZGVmYXVsdCkgdGhlbiBEb3h5Z2VuIAorIyB3aWxsIHNob3cgbWVtYmVycyB3aXRoIHRoZWlyIGZ1bGwgY2xhc3MgYW5kIG5hbWVzcGFjZSBzY29wZXMgaW4gdGhlIAorIyBkb2N1bWVudGF0aW9uLiBJZiBzZXQgdG8gWUVTIHRoZSBzY29wZSB3aWxsIGJlIGhpZGRlbi4KKworSElERV9TQ09QRV9OQU1FUyAgICAgICA9IE5PCisKKyMgSWYgdGhlIFNIT1dfSU5DTFVERV9GSUxFUyB0YWcgaXMgc2V0IHRvIFlFUyAodGhlIGRlZmF1bHQpIHRoZW4gRG94eWdlbiAKKyMgd2lsbCBwdXQgYSBsaXN0IG9mIHRoZSBmaWxlcyB0aGF0IGFyZSBpbmNsdWRlZCBieSBhIGZpbGUgaW4gdGhlIGRvY3VtZW50YXRpb24gCisjIG9mIHRoYXQgZmlsZS4KKworU0hPV19JTkNMVURFX0ZJTEVTICAgICA9IFlFUworCisjIElmIHRoZSBJTkxJTkVfSU5GTyB0YWcgaXMgc2V0IHRvIFlFUyAodGhlIGRlZmF1bHQpIHRoZW4gYSB0YWcgW2lubGluZV0gCisjIGlzIGluc2VydGVkIGluIHRoZSBkb2N1bWVudGF0aW9uIGZvciBpbmxpbmUgbWVtYmVycy4KKworSU5MSU5FX0lORk8gICAgICAgICAgICA9IFlFUworCisjIElmIHRoZSBTT1JUX01FTUJFUl9ET0NTIHRhZyBpcyBzZXQgdG8gWUVTICh0aGUgZGVmYXVsdCkgdGhlbiBkb3h5Z2VuIAorIyB3aWxsIHNvcnQgdGhlIChkZXRhaWxlZCkgZG9jdW1lbnRhdGlvbiBvZiBmaWxlIGFuZCBjbGFzcyBtZW1iZXJzIAorIyBhbHBoYWJldGljYWxseSBieSBtZW1iZXIgbmFtZS4gSWYgc2V0IHRvIE5PIHRoZSBtZW1iZXJzIHdpbGwgYXBwZWFyIGluIAorIyBkZWNsYXJhdGlvbiBvcmRlci4KKworU09SVF9NRU1CRVJfRE9DUyAgICAgICA9IFlFUworCisjIElmIHRoZSBTT1JUX0JSSUVGX0RPQ1MgdGFnIGlzIHNldCB0byBZRVMgdGhlbiBkb3h5Z2VuIHdpbGwgc29ydCB0aGUgCisjIGJyaWVmIGRvY3VtZW50YXRpb24gb2YgZmlsZSwgbmFtZXNwYWNlIGFuZCBjbGFzcyBtZW1iZXJzIGFscGhhYmV0aWNhbGx5IAorIyBieSBtZW1iZXIgbmFtZS4gSWYgc2V0IHRvIE5PICh0aGUgZGVmYXVsdCkgdGhlIG1lbWJlcnMgd2lsbCBhcHBlYXIgaW4gCisjIGRlY2xhcmF0aW9uIG9yZGVyLgorCitTT1JUX0JSSUVGX0RPQ1MgICAgICAgID0gTk8KKworIyBJZiB0aGUgU09SVF9CWV9TQ09QRV9OQU1FIHRhZyBpcyBzZXQgdG8gWUVTLCB0aGUgY2xhc3MgbGlzdCB3aWxsIGJlIAorIyBzb3J0ZWQgYnkgZnVsbHktcXVhbGlmaWVkIG5hbWVzLCBpbmNsdWRpbmcgbmFtZXNwYWNlcy4gSWYgc2V0IHRvIAorIyBOTyAodGhlIGRlZmF1bHQpLCB0aGUgY2xhc3MgbGlzdCB3aWxsIGJlIHNvcnRlZCBvbmx5IGJ5IGNsYXNzIG5hbWUsIAorIyBub3QgaW5jbHVkaW5nIHRoZSBuYW1lc3BhY2UgcGFydC4gCisjIE5vdGU6IFRoaXMgb3B0aW9uIGlzIG5vdCB2ZXJ5IHVzZWZ1bCBpZiBISURFX1NDT1BFX05BTUVTIGlzIHNldCB0byBZRVMuCisjIE5vdGU6IFRoaXMgb3B0aW9uIGFwcGxpZXMgb25seSB0byB0aGUgY2xhc3MgbGlzdCwgbm90IHRvIHRoZSAKKyMgYWxwaGFiZXRpY2FsIGxpc3QuCisKK1NPUlRfQllfU0NPUEVfTkFNRSAgICAgPSBOTworCisjIFRoZSBHRU5FUkFURV9UT0RPTElTVCB0YWcgY2FuIGJlIHVzZWQgdG8gZW5hYmxlIChZRVMpIG9yIAorIyBkaXNhYmxlIChOTykgdGhlIHRvZG8gbGlzdC4gVGhpcyBsaXN0IGlzIGNyZWF0ZWQgYnkgcHV0dGluZyBcdG9kbyAKKyMgY29tbWFuZHMgaW4gdGhlIGRvY3VtZW50YXRpb24uCisKK0dFTkVSQVRFX1RPRE9MSVNUICAgICAgPSBZRVMKKworIyBUaGUgR0VORVJBVEVfVEVTVExJU1QgdGFnIGNhbiBiZSB1c2VkIHRvIGVuYWJsZSAoWUVTKSBvciAKKyMgZGlzYWJsZSAoTk8pIHRoZSB0ZXN0IGxpc3QuIFRoaXMgbGlzdCBpcyBjcmVhdGVkIGJ5IHB1dHRpbmcgXHRlc3QgCisjIGNvbW1hbmRzIGluIHRoZSBkb2N1bWVudGF0aW9uLgorCitHRU5FUkFURV9URVNUTElTVCAgICAgID0gWUVTCisKKyMgVGhlIEdFTkVSQVRFX0JVR0xJU1QgdGFnIGNhbiBiZSB1c2VkIHRvIGVuYWJsZSAoWUVTKSBvciAKKyMgZGlzYWJsZSAoTk8pIHRoZSBidWcgbGlzdC4gVGhpcyBsaXN0IGlzIGNyZWF0ZWQgYnkgcHV0dGluZyBcYnVnIAorIyBjb21tYW5kcyBpbiB0aGUgZG9jdW1lbnRhdGlvbi4KKworR0VORVJBVEVfQlVHTElTVCAgICAgICA9IFlFUworCisjIFRoZSBHRU5FUkFURV9ERVBSRUNBVEVETElTVCB0YWcgY2FuIGJlIHVzZWQgdG8gZW5hYmxlIChZRVMpIG9yIAorIyBkaXNhYmxlIChOTykgdGhlIGRlcHJlY2F0ZWQgbGlzdC4gVGhpcyBsaXN0IGlzIGNyZWF0ZWQgYnkgcHV0dGluZyAKKyMgXGRlcHJlY2F0ZWQgY29tbWFuZHMgaW4gdGhlIGRvY3VtZW50YXRpb24uCisKK0dFTkVSQVRFX0RFUFJFQ0FURURMSVNUPSBZRVMKKworIyBUaGUgRU5BQkxFRF9TRUNUSU9OUyB0YWcgY2FuIGJlIHVzZWQgdG8gZW5hYmxlIGNvbmRpdGlvbmFsIAorIyBkb2N1bWVudGF0aW9uIHNlY3Rpb25zLCBtYXJrZWQgYnkgXGlmIHNlY3Rpb25uYW1lIC4uLiBcZW5kaWYuCisKK0VOQUJMRURfU0VDVElPTlMgICAgICAgPSAKKworIyBUaGUgTUFYX0lOSVRJQUxJWkVSX0xJTkVTIHRhZyBkZXRlcm1pbmVzIHRoZSBtYXhpbXVtIG51bWJlciBvZiBsaW5lcyAKKyMgdGhlIGluaXRpYWwgdmFsdWUgb2YgYSB2YXJpYWJsZSBvciBkZWZpbmUgY29uc2lzdHMgb2YgZm9yIGl0IHRvIGFwcGVhciBpbiAKKyMgdGhlIGRvY3VtZW50YXRpb24uIElmIHRoZSBpbml0aWFsaXplciBjb25zaXN0cyBvZiBtb3JlIGxpbmVzIHRoYW4gc3BlY2lmaWVkIAorIyBoZXJlIGl0IHdpbGwgYmUgaGlkZGVuLiBVc2UgYSB2YWx1ZSBvZiAwIHRvIGhpZGUgaW5pdGlhbGl6ZXJzIGNvbXBsZXRlbHkuIAorIyBUaGUgYXBwZWFyYW5jZSBvZiB0aGUgaW5pdGlhbGl6ZXIgb2YgaW5kaXZpZHVhbCB2YXJpYWJsZXMgYW5kIGRlZmluZXMgaW4gdGhlIAorIyBkb2N1bWVudGF0aW9uIGNhbiBiZSBjb250cm9sbGVkIHVzaW5nIFxzaG93aW5pdGlhbGl6ZXIgb3IgXGhpZGVpbml0aWFsaXplciAKKyMgY29tbWFuZCBpbiB0aGUgZG9jdW1lbnRhdGlvbiByZWdhcmRsZXNzIG9mIHRoaXMgc2V0dGluZy4KKworTUFYX0lOSVRJQUxJWkVSX0xJTkVTICA9IDMwCisKKyMgU2V0IHRoZSBTSE9XX1VTRURfRklMRVMgdGFnIHRvIE5PIHRvIGRpc2FibGUgdGhlIGxpc3Qgb2YgZmlsZXMgZ2VuZXJhdGVkIAorIyBhdCB0aGUgYm90dG9tIG9mIHRoZSBkb2N1bWVudGF0aW9uIG9mIGNsYXNzZXMgYW5kIHN0cnVjdHMuIElmIHNldCB0byBZRVMgdGhlIAorIyBsaXN0IHdpbGwgbWVudGlvbiB0aGUgZmlsZXMgdGhhdCB3ZXJlIHVzZWQgdG8gZ2VuZXJhdGUgdGhlIGRvY3VtZW50YXRpb24uCisKK1NIT1dfVVNFRF9GSUxFUyAgICAgICAgPSBZRVMKKworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBjb25maWd1cmF0aW9uIG9wdGlvbnMgcmVsYXRlZCB0byB3YXJuaW5nIGFuZCBwcm9ncmVzcyBtZXNzYWdlcworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisjIFRoZSBRVUlFVCB0YWcgY2FuIGJlIHVzZWQgdG8gdHVybiBvbi9vZmYgdGhlIG1lc3NhZ2VzIHRoYXQgYXJlIGdlbmVyYXRlZCAKKyMgYnkgZG94eWdlbi4gUG9zc2libGUgdmFsdWVzIGFyZSBZRVMgYW5kIE5PLiBJZiBsZWZ0IGJsYW5rIE5PIGlzIHVzZWQuCisKK1FVSUVUICAgICAgICAgICAgICAgICAgPSBZRVMKKworIyBUaGUgV0FSTklOR1MgdGFnIGNhbiBiZSB1c2VkIHRvIHR1cm4gb24vb2ZmIHRoZSB3YXJuaW5nIG1lc3NhZ2VzIHRoYXQgYXJlIAorIyBnZW5lcmF0ZWQgYnkgZG94eWdlbi4gUG9zc2libGUgdmFsdWVzIGFyZSBZRVMgYW5kIE5PLiBJZiBsZWZ0IGJsYW5rIAorIyBOTyBpcyB1c2VkLgorCitXQVJOSU5HUyAgICAgICAgICAgICAgID0gWUVTCisKKyMgSWYgV0FSTl9JRl9VTkRPQ1VNRU5URUQgaXMgc2V0IHRvIFlFUywgdGhlbiBkb3h5Z2VuIHdpbGwgZ2VuZXJhdGUgd2FybmluZ3MgCisjIGZvciB1bmRvY3VtZW50ZWQgbWVtYmVycy4gSWYgRVhUUkFDVF9BTEwgaXMgc2V0IHRvIFlFUyB0aGVuIHRoaXMgZmxhZyB3aWxsIAorIyBhdXRvbWF0aWNhbGx5IGJlIGRpc2FibGVkLgorCitXQVJOX0lGX1VORE9DVU1FTlRFRCAgID0gTk8KKworIyBJZiBXQVJOX0lGX0RPQ19FUlJPUiBpcyBzZXQgdG8gWUVTLCBkb3h5Z2VuIHdpbGwgZ2VuZXJhdGUgd2FybmluZ3MgZm9yIAorIyBwb3RlbnRpYWwgZXJyb3JzIGluIHRoZSBkb2N1bWVudGF0aW9uLCBzdWNoIGFzIG5vdCBkb2N1bWVudGluZyBzb21lIAorIyBwYXJhbWV0ZXJzIGluIGEgZG9jdW1lbnRlZCBmdW5jdGlvbiwgb3IgZG9jdW1lbnRpbmcgcGFyYW1ldGVycyB0aGF0IAorIyBkb24ndCBleGlzdCBvciB1c2luZyBtYXJrdXAgY29tbWFuZHMgd3JvbmdseS4KKworV0FSTl9JRl9ET0NfRVJST1IgICAgICA9IFlFUworCisjIFRoZSBXQVJOX0ZPUk1BVCB0YWcgZGV0ZXJtaW5lcyB0aGUgZm9ybWF0IG9mIHRoZSB3YXJuaW5nIG1lc3NhZ2VzIHRoYXQgCisjIGRveHlnZW4gY2FuIHByb2R1Y2UuIFRoZSBzdHJpbmcgc2hvdWxkIGNvbnRhaW4gdGhlICRmaWxlLCAkbGluZSwgYW5kICR0ZXh0IAorIyB0YWdzLCB3aGljaCB3aWxsIGJlIHJlcGxhY2VkIGJ5IHRoZSBmaWxlIGFuZCBsaW5lIG51bWJlciBmcm9tIHdoaWNoIHRoZSAKKyMgd2FybmluZyBvcmlnaW5hdGVkIGFuZCB0aGUgd2FybmluZyB0ZXh0LgorCitXQVJOX0ZPUk1BVCAgICAgICAgICAgID0gIiRmaWxlOiRsaW5lOiAkdGV4dCIKKworIyBUaGUgV0FSTl9MT0dGSUxFIHRhZyBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IGEgZmlsZSB0byB3aGljaCB3YXJuaW5nIAorIyBhbmQgZXJyb3IgbWVzc2FnZXMgc2hvdWxkIGJlIHdyaXR0ZW4uIElmIGxlZnQgYmxhbmsgdGhlIG91dHB1dCBpcyB3cml0dGVuIAorIyB0byBzdGRlcnIuCisKK1dBUk5fTE9HRklMRSAgICAgICAgICAgPSAKKworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBjb25maWd1cmF0aW9uIG9wdGlvbnMgcmVsYXRlZCB0byB0aGUgaW5wdXQgZmlsZXMKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworIyBUaGUgSU5QVVQgdGFnIGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkgdGhlIGZpbGVzIGFuZC9vciBkaXJlY3RvcmllcyB0aGF0IGNvbnRhaW4gCisjIGRvY3VtZW50ZWQgc291cmNlIGZpbGVzLiBZb3UgbWF5IGVudGVyIGZpbGUgbmFtZXMgbGlrZSAibXlmaWxlLmNwcCIgb3IgCisjIGRpcmVjdG9yaWVzIGxpa2UgIi91c3Ivc3JjL215cHJvamVjdCIuIFNlcGFyYXRlIHRoZSBmaWxlcyBvciBkaXJlY3RvcmllcyAKKyMgd2l0aCBzcGFjZXMuCisKK0lOUFVUICAgICAgICAgICAgICAgICAgPSBAdG9wX2J1aWxkZGlyQC9Qcm9ncmFtcy9icmxhcGkuaCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgQHRvcF9zcmNkaXJAL1Byb2dyYW1zL2JybGFwaV9rZXljb2Rlcy5oIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICBAdG9wX3NyY2RpckAvUHJvZ3JhbXMvYnJsYXBpX3BhcmFtLmggXAorICAgICAgICAgICAgICAgICAgICAgICAgIEB0b3BfYnVpbGRkaXJAL1Byb2dyYW1zL2JybGFwaV9jb25zdGFudHMuaCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgQHRvcF9zcmNkaXJAL1Byb2dyYW1zL2JybGFwaV9wcm90b2NvbC5oCisKKyMgSWYgdGhlIHZhbHVlIG9mIHRoZSBJTlBVVCB0YWcgY29udGFpbnMgZGlyZWN0b3JpZXMsIHlvdSBjYW4gdXNlIHRoZSAKKyMgRklMRV9QQVRURVJOUyB0YWcgdG8gc3BlY2lmeSBvbmUgb3IgbW9yZSB3aWxkY2FyZCBwYXR0ZXJuIChsaWtlICouY3BwIAorIyBhbmQgKi5oKSB0byBmaWx0ZXIgb3V0IHRoZSBzb3VyY2UtZmlsZXMgaW4gdGhlIGRpcmVjdG9yaWVzLiBJZiBsZWZ0IAorIyBibGFuayB0aGUgZm9sbG93aW5nIHBhdHRlcm5zIGFyZSB0ZXN0ZWQ6IAorIyAqLmMgKi5jYyAqLmN4eCAqLmNwcCAqLmMrKyAqLmphdmEgKi5paSAqLml4eCAqLmlwcCAqLmkrKyAqLmlubCAqLmggKi5oaCAqLmh4eCAqLmhwcCAKKyMgKi5oKysgKi5pZGwgKi5vZGwgKi5jcyAqLnBocCAqLnBocDMgKi5pbmMgKi5tICoubW0KKworRklMRV9QQVRURVJOUyAgICAgICAgICA9IAorCisjIFRoZSBSRUNVUlNJVkUgdGFnIGNhbiBiZSB1c2VkIHRvIHR1cm4gc3BlY2lmeSB3aGV0aGVyIG9yIG5vdCBzdWJkaXJlY3RvcmllcyAKKyMgc2hvdWxkIGJlIHNlYXJjaGVkIGZvciBpbnB1dCBmaWxlcyBhcyB3ZWxsLiBQb3NzaWJsZSB2YWx1ZXMgYXJlIFlFUyBhbmQgTk8uIAorIyBJZiBsZWZ0IGJsYW5rIE5PIGlzIHVzZWQuCisKK1JFQ1VSU0lWRSAgICAgICAgICAgICAgPSBOTworCisjIFRoZSBFWENMVURFIHRhZyBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IGZpbGVzIGFuZC9vciBkaXJlY3RvcmllcyB0aGF0IHNob3VsZCAKKyMgZXhjbHVkZWQgZnJvbSB0aGUgSU5QVVQgc291cmNlIGZpbGVzLiBUaGlzIHdheSB5b3UgY2FuIGVhc2lseSBleGNsdWRlIGEgCisjIHN1YmRpcmVjdG9yeSBmcm9tIGEgZGlyZWN0b3J5IHRyZWUgd2hvc2Ugcm9vdCBpcyBzcGVjaWZpZWQgd2l0aCB0aGUgSU5QVVQgdGFnLgorCitFWENMVURFICAgICAgICAgICAgICAgID0gCisKKyMgVGhlIEVYQ0xVREVfU1lNTElOS1MgdGFnIGNhbiBiZSB1c2VkIHNlbGVjdCB3aGV0aGVyIG9yIG5vdCBmaWxlcyBvciBkaXJlY3RvcmllcyAKKyMgdGhhdCBhcmUgc3ltYm9saWMgbGlua3MgKGEgVW5peCBmaWxlc3lzdGVtIGZlYXR1cmUpIGFyZSBleGNsdWRlZCBmcm9tIHRoZSBpbnB1dC4KKworRVhDTFVERV9TWU1MSU5LUyAgICAgICA9IE5PCisKKyMgSWYgdGhlIHZhbHVlIG9mIHRoZSBJTlBVVCB0YWcgY29udGFpbnMgZGlyZWN0b3JpZXMsIHlvdSBjYW4gdXNlIHRoZSAKKyMgRVhDTFVERV9QQVRURVJOUyB0YWcgdG8gc3BlY2lmeSBvbmUgb3IgbW9yZSB3aWxkY2FyZCBwYXR0ZXJucyB0byBleGNsdWRlIAorIyBjZXJ0YWluIGZpbGVzIGZyb20gdGhvc2UgZGlyZWN0b3JpZXMuCisKK0VYQ0xVREVfUEFUVEVSTlMgICAgICAgPSAKKworIyBUaGUgRVhBTVBMRV9QQVRIIHRhZyBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IG9uZSBvciBtb3JlIGZpbGVzIG9yIAorIyBkaXJlY3RvcmllcyB0aGF0IGNvbnRhaW4gZXhhbXBsZSBjb2RlIGZyYWdtZW50cyB0aGF0IGFyZSBpbmNsdWRlZCAoc2VlIAorIyB0aGUgXGluY2x1ZGUgY29tbWFuZCkuCisKK0VYQU1QTEVfUEFUSCAgICAgICAgICAgPSAKKworIyBJZiB0aGUgdmFsdWUgb2YgdGhlIEVYQU1QTEVfUEFUSCB0YWcgY29udGFpbnMgZGlyZWN0b3JpZXMsIHlvdSBjYW4gdXNlIHRoZSAKKyMgRVhBTVBMRV9QQVRURVJOUyB0YWcgdG8gc3BlY2lmeSBvbmUgb3IgbW9yZSB3aWxkY2FyZCBwYXR0ZXJuIChsaWtlICouY3BwIAorIyBhbmQgKi5oKSB0byBmaWx0ZXIgb3V0IHRoZSBzb3VyY2UtZmlsZXMgaW4gdGhlIGRpcmVjdG9yaWVzLiBJZiBsZWZ0IAorIyBibGFuayBhbGwgZmlsZXMgYXJlIGluY2x1ZGVkLgorCitFWEFNUExFX1BBVFRFUk5TICAgICAgID0gCisKKyMgSWYgdGhlIEVYQU1QTEVfUkVDVVJTSVZFIHRhZyBpcyBzZXQgdG8gWUVTIHRoZW4gc3ViZGlyZWN0b3JpZXMgd2lsbCBiZSAKKyMgc2VhcmNoZWQgZm9yIGlucHV0IGZpbGVzIHRvIGJlIHVzZWQgd2l0aCB0aGUgXGluY2x1ZGUgb3IgXGRvbnRpbmNsdWRlIAorIyBjb21tYW5kcyBpcnJlc3BlY3RpdmUgb2YgdGhlIHZhbHVlIG9mIHRoZSBSRUNVUlNJVkUgdGFnLiAKKyMgUG9zc2libGUgdmFsdWVzIGFyZSBZRVMgYW5kIE5PLiBJZiBsZWZ0IGJsYW5rIE5PIGlzIHVzZWQuCisKK0VYQU1QTEVfUkVDVVJTSVZFICAgICAgPSBOTworCisjIFRoZSBJTUFHRV9QQVRIIHRhZyBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IG9uZSBvciBtb3JlIGZpbGVzIG9yIAorIyBkaXJlY3RvcmllcyB0aGF0IGNvbnRhaW4gaW1hZ2UgdGhhdCBhcmUgaW5jbHVkZWQgaW4gdGhlIGRvY3VtZW50YXRpb24gKHNlZSAKKyMgdGhlIFxpbWFnZSBjb21tYW5kKS4KKworSU1BR0VfUEFUSCAgICAgICAgICAgICA9IAorCisjIFRoZSBJTlBVVF9GSUxURVIgdGFnIGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkgYSBwcm9ncmFtIHRoYXQgZG94eWdlbiBzaG91bGQgCisjIGludm9rZSB0byBmaWx0ZXIgZm9yIGVhY2ggaW5wdXQgZmlsZS4gRG94eWdlbiB3aWxsIGludm9rZSB0aGUgZmlsdGVyIHByb2dyYW0gCisjIGJ5IGV4ZWN1dGluZyAodmlhIHBvcGVuKCkpIHRoZSBjb21tYW5kIDxmaWx0ZXI+IDxpbnB1dC1maWxlPiwgd2hlcmUgPGZpbHRlcj4gCisjIGlzIHRoZSB2YWx1ZSBvZiB0aGUgSU5QVVRfRklMVEVSIHRhZywgYW5kIDxpbnB1dC1maWxlPiBpcyB0aGUgbmFtZSBvZiBhbiAKKyMgaW5wdXQgZmlsZS4gRG94eWdlbiB3aWxsIHRoZW4gdXNlIHRoZSBvdXRwdXQgdGhhdCB0aGUgZmlsdGVyIHByb2dyYW0gd3JpdGVzIAorIyB0byBzdGFuZGFyZCBvdXRwdXQuICBJZiBGSUxURVJfUEFUVEVSTlMgaXMgc3BlY2lmaWVkLCB0aGlzIHRhZyB3aWxsIGJlIAorIyBpZ25vcmVkLgorCitJTlBVVF9GSUxURVIgICAgICAgICAgID0gCisKKyMgVGhlIEZJTFRFUl9QQVRURVJOUyB0YWcgY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSBmaWx0ZXJzIG9uIGEgcGVyIGZpbGUgcGF0dGVybiAKKyMgYmFzaXMuICBEb3h5Z2VuIHdpbGwgY29tcGFyZSB0aGUgZmlsZSBuYW1lIHdpdGggZWFjaCBwYXR0ZXJuIGFuZCBhcHBseSB0aGUgCisjIGZpbHRlciBpZiB0aGVyZSBpcyBhIG1hdGNoLiAgVGhlIGZpbHRlcnMgYXJlIGEgbGlzdCBvZiB0aGUgZm9ybTogCisjIHBhdHRlcm49ZmlsdGVyIChsaWtlICouY3BwPW15X2NwcF9maWx0ZXIpLiBTZWUgSU5QVVRfRklMVEVSIGZvciBmdXJ0aGVyIAorIyBpbmZvIG9uIGhvdyBmaWx0ZXJzIGFyZSB1c2VkLiBJZiBGSUxURVJfUEFUVEVSTlMgaXMgZW1wdHksIElOUFVUX0ZJTFRFUiAKKyMgaXMgYXBwbGllZCB0byBhbGwgZmlsZXMuCisKK0ZJTFRFUl9QQVRURVJOUyAgICAgICAgPSAKKworIyBJZiB0aGUgRklMVEVSX1NPVVJDRV9GSUxFUyB0YWcgaXMgc2V0IHRvIFlFUywgdGhlIGlucHV0IGZpbHRlciAoaWYgc2V0IHVzaW5nIAorIyBJTlBVVF9GSUxURVIpIHdpbGwgYmUgdXNlZCB0byBmaWx0ZXIgdGhlIGlucHV0IGZpbGVzIHdoZW4gcHJvZHVjaW5nIHNvdXJjZSAKKyMgZmlsZXMgdG8gYnJvd3NlIChpLmUuIHdoZW4gU09VUkNFX0JST1dTRVIgaXMgc2V0IHRvIFlFUykuCisKK0ZJTFRFUl9TT1VSQ0VfRklMRVMgICAgPSBOTworCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIHNvdXJjZSBicm93c2luZworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisjIElmIHRoZSBTT1VSQ0VfQlJPV1NFUiB0YWcgaXMgc2V0IHRvIFlFUyB0aGVuIGEgbGlzdCBvZiBzb3VyY2UgZmlsZXMgd2lsbCAKKyMgYmUgZ2VuZXJhdGVkLiBEb2N1bWVudGVkIGVudGl0aWVzIHdpbGwgYmUgY3Jvc3MtcmVmZXJlbmNlZCB3aXRoIHRoZXNlIHNvdXJjZXMuIAorIyBOb3RlOiBUbyBnZXQgcmlkIG9mIGFsbCBzb3VyY2UgY29kZSBpbiB0aGUgZ2VuZXJhdGVkIG91dHB1dCwgbWFrZSBzdXJlIGFsc28gCisjIFZFUkJBVElNX0hFQURFUlMgaXMgc2V0IHRvIE5PLgorCitTT1VSQ0VfQlJPV1NFUiAgICAgICAgID0gTk8KKworIyBTZXR0aW5nIHRoZSBJTkxJTkVfU09VUkNFUyB0YWcgdG8gWUVTIHdpbGwgaW5jbHVkZSB0aGUgYm9keSAKKyMgb2YgZnVuY3Rpb25zIGFuZCBjbGFzc2VzIGRpcmVjdGx5IGluIHRoZSBkb2N1bWVudGF0aW9uLgorCitJTkxJTkVfU09VUkNFUyAgICAgICAgID0gTk8KKworIyBTZXR0aW5nIHRoZSBTVFJJUF9DT0RFX0NPTU1FTlRTIHRhZyB0byBZRVMgKHRoZSBkZWZhdWx0KSB3aWxsIGluc3RydWN0IAorIyBkb3h5Z2VuIHRvIGhpZGUgYW55IHNwZWNpYWwgY29tbWVudCBibG9ja3MgZnJvbSBnZW5lcmF0ZWQgc291cmNlIGNvZGUgCisjIGZyYWdtZW50cy4gTm9ybWFsIEMgYW5kIEMrKyBjb21tZW50cyB3aWxsIGFsd2F5cyByZW1haW4gdmlzaWJsZS4KKworU1RSSVBfQ09ERV9DT01NRU5UUyAgICA9IFlFUworCisjIElmIHRoZSBSRUZFUkVOQ0VEX0JZX1JFTEFUSU9OIHRhZyBpcyBzZXQgdG8gWUVTICh0aGUgZGVmYXVsdCkgCisjIHRoZW4gZm9yIGVhY2ggZG9jdW1lbnRlZCBmdW5jdGlvbiBhbGwgZG9jdW1lbnRlZCAKKyMgZnVuY3Rpb25zIHJlZmVyZW5jaW5nIGl0IHdpbGwgYmUgbGlzdGVkLgorCitSRUZFUkVOQ0VEX0JZX1JFTEFUSU9OID0gWUVTCisKKyMgSWYgdGhlIFJFRkVSRU5DRVNfUkVMQVRJT04gdGFnIGlzIHNldCB0byBZRVMgKHRoZSBkZWZhdWx0KSAKKyMgdGhlbiBmb3IgZWFjaCBkb2N1bWVudGVkIGZ1bmN0aW9uIGFsbCBkb2N1bWVudGVkIGVudGl0aWVzIAorIyBjYWxsZWQvdXNlZCBieSB0aGF0IGZ1bmN0aW9uIHdpbGwgYmUgbGlzdGVkLgorCitSRUZFUkVOQ0VTX1JFTEFUSU9OICAgID0gWUVTCisKKyMgSWYgdGhlIFZFUkJBVElNX0hFQURFUlMgdGFnIGlzIHNldCB0byBZRVMgKHRoZSBkZWZhdWx0KSB0aGVuIERveHlnZW4gCisjIHdpbGwgZ2VuZXJhdGUgYSB2ZXJiYXRpbSBjb3B5IG9mIHRoZSBoZWFkZXIgZmlsZSBmb3IgZWFjaCBjbGFzcyBmb3IgCisjIHdoaWNoIGFuIGluY2x1ZGUgaXMgc3BlY2lmaWVkLiBTZXQgdG8gTk8gdG8gZGlzYWJsZSB0aGlzLgorCitWRVJCQVRJTV9IRUFERVJTICAgICAgID0gWUVTCisKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgY29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gdGhlIGFscGhhYmV0aWNhbCBjbGFzcyBpbmRleAorIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisjIElmIHRoZSBBTFBIQUJFVElDQUxfSU5ERVggdGFnIGlzIHNldCB0byBZRVMsIGFuIGFscGhhYmV0aWNhbCBpbmRleCAKKyMgb2YgYWxsIGNvbXBvdW5kcyB3aWxsIGJlIGdlbmVyYXRlZC4gRW5hYmxlIHRoaXMgaWYgdGhlIHByb2plY3QgCisjIGNvbnRhaW5zIGEgbG90IG9mIGNsYXNzZXMsIHN0cnVjdHMsIHVuaW9ucyBvciBpbnRlcmZhY2VzLgorCitBTFBIQUJFVElDQUxfSU5ERVggICAgID0gTk8KKworIyBJbiBjYXNlIGFsbCBjbGFzc2VzIGluIGEgcHJvamVjdCBzdGFydCB3aXRoIGEgY29tbW9uIHByZWZpeCwgYWxsIAorIyBjbGFzc2VzIHdpbGwgYmUgcHV0IHVuZGVyIHRoZSBzYW1lIGhlYWRlciBpbiB0aGUgYWxwaGFiZXRpY2FsIGluZGV4LiAKKyMgVGhlIElHTk9SRV9QUkVGSVggdGFnIGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkgb25lIG9yIG1vcmUgcHJlZml4ZXMgdGhhdCAKKyMgc2hvdWxkIGJlIGlnbm9yZWQgd2hpbGUgZ2VuZXJhdGluZyB0aGUgaW5kZXggaGVhZGVycy4KKworSUdOT1JFX1BSRUZJWCAgICAgICAgICA9IAorCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIHRoZSBIVE1MIG91dHB1dAorIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisjIElmIHRoZSBHRU5FUkFURV9IVE1MIHRhZyBpcyBzZXQgdG8gWUVTICh0aGUgZGVmYXVsdCkgRG94eWdlbiB3aWxsIAorIyBnZW5lcmF0ZSBIVE1MIG91dHB1dC4KKworR0VORVJBVEVfSFRNTCAgICAgICAgICA9IFlFUworCisjIFRoZSBIVE1MX09VVFBVVCB0YWcgaXMgdXNlZCB0byBzcGVjaWZ5IHdoZXJlIHRoZSBIVE1MIGRvY3Mgd2lsbCBiZSBwdXQuIAorIyBJZiBhIHJlbGF0aXZlIHBhdGggaXMgZW50ZXJlZCB0aGUgdmFsdWUgb2YgT1VUUFVUX0RJUkVDVE9SWSB3aWxsIGJlIAorIyBwdXQgaW4gZnJvbnQgb2YgaXQuIElmIGxlZnQgYmxhbmsgYGh0bWwnIHdpbGwgYmUgdXNlZCBhcyB0aGUgZGVmYXVsdCBwYXRoLgorCitIVE1MX09VVFBVVCAgICAgICAgICAgID0gQnJsQVBJcmVmL2h0bWwKKworIyBUaGUgSFRNTF9GSUxFX0VYVEVOU0lPTiB0YWcgY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSB0aGUgZmlsZSBleHRlbnNpb24gZm9yIAorIyBlYWNoIGdlbmVyYXRlZCBIVE1MIHBhZ2UgKGZvciBleGFtcGxlOiAuaHRtLC5waHAsLmFzcCkuIElmIGl0IGlzIGxlZnQgYmxhbmsgCisjIGRveHlnZW4gd2lsbCBnZW5lcmF0ZSBmaWxlcyB3aXRoIC5odG1sIGV4dGVuc2lvbi4KKworSFRNTF9GSUxFX0VYVEVOU0lPTiAgICA9IC5odG1sCisKKyMgVGhlIEhUTUxfSEVBREVSIHRhZyBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IGEgcGVyc29uYWwgSFRNTCBoZWFkZXIgZm9yIAorIyBlYWNoIGdlbmVyYXRlZCBIVE1MIHBhZ2UuIElmIGl0IGlzIGxlZnQgYmxhbmsgZG94eWdlbiB3aWxsIGdlbmVyYXRlIGEgCisjIHN0YW5kYXJkIGhlYWRlci4KKworSFRNTF9IRUFERVIgICAgICAgICAgICA9IAorCisjIFRoZSBIVE1MX0ZPT1RFUiB0YWcgY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSBhIHBlcnNvbmFsIEhUTUwgZm9vdGVyIGZvciAKKyMgZWFjaCBnZW5lcmF0ZWQgSFRNTCBwYWdlLiBJZiBpdCBpcyBsZWZ0IGJsYW5rIGRveHlnZW4gd2lsbCBnZW5lcmF0ZSBhIAorIyBzdGFuZGFyZCBmb290ZXIuCisKK0hUTUxfRk9PVEVSICAgICAgICAgICAgPSAKKworIyBUaGUgSFRNTF9TVFlMRVNIRUVUIHRhZyBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IGEgdXNlci1kZWZpbmVkIGNhc2NhZGluZyAKKyMgc3R5bGUgc2hlZXQgdGhhdCBpcyB1c2VkIGJ5IGVhY2ggSFRNTCBwYWdlLiBJdCBjYW4gYmUgdXNlZCB0byAKKyMgZmluZS10dW5lIHRoZSBsb29rIG9mIHRoZSBIVE1MIG91dHB1dC4gSWYgdGhlIHRhZyBpcyBsZWZ0IGJsYW5rIGRveHlnZW4gCisjIHdpbGwgZ2VuZXJhdGUgYSBkZWZhdWx0IHN0eWxlIHNoZWV0LiBOb3RlIHRoYXQgZG94eWdlbiB3aWxsIHRyeSB0byBjb3B5IAorIyB0aGUgc3R5bGUgc2hlZXQgZmlsZSB0byB0aGUgSFRNTCBvdXRwdXQgZGlyZWN0b3J5LCBzbyBkb24ndCBwdXQgeW91ciBvd24gCisjIHN0eWxlc2hlZXQgaW4gdGhlIEhUTUwgb3V0cHV0IGRpcmVjdG9yeSBhcyB3ZWxsLCBvciBpdCB3aWxsIGJlIGVyYXNlZCEKKworSFRNTF9TVFlMRVNIRUVUICAgICAgICA9IAorCisjIElmIHRoZSBHRU5FUkFURV9IVE1MSEVMUCB0YWcgaXMgc2V0IHRvIFlFUywgYWRkaXRpb25hbCBpbmRleCBmaWxlcyAKKyMgd2lsbCBiZSBnZW5lcmF0ZWQgdGhhdCBjYW4gYmUgdXNlZCBhcyBpbnB1dCBmb3IgdG9vbHMgbGlrZSB0aGUgCisjIE1pY3Jvc29mdCBIVE1MIGhlbHAgd29ya3Nob3AgdG8gZ2VuZXJhdGUgYSBjb21wcmVzc2VkIEhUTUwgaGVscCBmaWxlICguY2htKSAKKyMgb2YgdGhlIGdlbmVyYXRlZCBIVE1MIGRvY3VtZW50YXRpb24uCisKK0dFTkVSQVRFX0hUTUxIRUxQICAgICAgPSBOTworCisjIElmIHRoZSBHRU5FUkFURV9IVE1MSEVMUCB0YWcgaXMgc2V0IHRvIFlFUywgdGhlIENITV9GSUxFIHRhZyBjYW4gCisjIGJlIHVzZWQgdG8gc3BlY2lmeSB0aGUgZmlsZSBuYW1lIG9mIHRoZSByZXN1bHRpbmcgLmNobSBmaWxlLiBZb3UgCisjIGNhbiBhZGQgYSBwYXRoIGluIGZyb250IG9mIHRoZSBmaWxlIGlmIHRoZSByZXN1bHQgc2hvdWxkIG5vdCBiZSAKKyMgd3JpdHRlbiB0byB0aGUgaHRtbCBvdXRwdXQgZGlyZWN0b3J5LgorCitDSE1fRklMRSAgICAgICAgICAgICAgID0gCisKKyMgSWYgdGhlIEdFTkVSQVRFX0hUTUxIRUxQIHRhZyBpcyBzZXQgdG8gWUVTLCB0aGUgSEhDX0xPQ0FUSU9OIHRhZyBjYW4gCisjIGJlIHVzZWQgdG8gc3BlY2lmeSB0aGUgbG9jYXRpb24gKGFic29sdXRlIHBhdGggaW5jbHVkaW5nIGZpbGUgbmFtZSkgb2YgCisjIHRoZSBIVE1MIGhlbHAgY29tcGlsZXIgKGhoYy5leGUpLiBJZiBub24tZW1wdHkgZG94eWdlbiB3aWxsIHRyeSB0byBydW4gCisjIHRoZSBIVE1MIGhlbHAgY29tcGlsZXIgb24gdGhlIGdlbmVyYXRlZCBpbmRleC5oaHAuCisKK0hIQ19MT0NBVElPTiAgICAgICAgICAgPSAKKworIyBJZiB0aGUgR0VORVJBVEVfSFRNTEhFTFAgdGFnIGlzIHNldCB0byBZRVMsIHRoZSBHRU5FUkFURV9DSEkgZmxhZyAKKyMgY29udHJvbHMgaWYgYSBzZXBhcmF0ZSAuY2hpIGluZGV4IGZpbGUgaXMgZ2VuZXJhdGVkIChZRVMpIG9yIHRoYXQgCisjIGl0IHNob3VsZCBiZSBpbmNsdWRlZCBpbiB0aGUgbWFzdGVyIC5jaG0gZmlsZSAoTk8pLgorCitHRU5FUkFURV9DSEkgICAgICAgICAgID0gTk8KKworIyBJZiB0aGUgR0VORVJBVEVfSFRNTEhFTFAgdGFnIGlzIHNldCB0byBZRVMsIHRoZSBCSU5BUllfVE9DIGZsYWcgCisjIGNvbnRyb2xzIHdoZXRoZXIgYSBiaW5hcnkgdGFibGUgb2YgY29udGVudHMgaXMgZ2VuZXJhdGVkIChZRVMpIG9yIGEgCisjIG5vcm1hbCB0YWJsZSBvZiBjb250ZW50cyAoTk8pIGluIHRoZSAuY2htIGZpbGUuCisKK0JJTkFSWV9UT0MgICAgICAgICAgICAgPSBOTworCisjIFRoZSBUT0NfRVhQQU5EIGZsYWcgY2FuIGJlIHNldCB0byBZRVMgdG8gYWRkIGV4dHJhIGl0ZW1zIGZvciBncm91cCBtZW1iZXJzIAorIyB0byB0aGUgY29udGVudHMgb2YgdGhlIEhUTUwgaGVscCBkb2N1bWVudGF0aW9uIGFuZCB0byB0aGUgdHJlZSB2aWV3LgorCitUT0NfRVhQQU5EICAgICAgICAgICAgID0gTk8KKworIyBUaGUgRElTQUJMRV9JTkRFWCB0YWcgY2FuIGJlIHVzZWQgdG8gdHVybiBvbi9vZmYgdGhlIGNvbmRlbnNlZCBpbmRleCBhdCAKKyMgdG9wIG9mIGVhY2ggSFRNTCBwYWdlLiBUaGUgdmFsdWUgTk8gKHRoZSBkZWZhdWx0KSBlbmFibGVzIHRoZSBpbmRleCBhbmQgCisjIHRoZSB2YWx1ZSBZRVMgZGlzYWJsZXMgaXQuCisKK0RJU0FCTEVfSU5ERVggICAgICAgICAgPSBOTworCisjIFRoaXMgdGFnIGNhbiBiZSB1c2VkIHRvIHNldCB0aGUgbnVtYmVyIG9mIGVudW0gdmFsdWVzIChyYW5nZSBbMS4uMjBdKSAKKyMgdGhhdCBkb3h5Z2VuIHdpbGwgZ3JvdXAgb24gb25lIGxpbmUgaW4gdGhlIGdlbmVyYXRlZCBIVE1MIGRvY3VtZW50YXRpb24uCisKK0VOVU1fVkFMVUVTX1BFUl9MSU5FICAgPSA0CisKKyMgSWYgdGhlIEdFTkVSQVRFX1RSRUVWSUVXIHRhZyBpcyBzZXQgdG8gWUVTLCBhIHNpZGUgcGFuZWwgd2lsbCBiZQorIyBnZW5lcmF0ZWQgY29udGFpbmluZyBhIHRyZWUtbGlrZSBpbmRleCBzdHJ1Y3R1cmUgKGp1c3QgbGlrZSB0aGUgb25lIHRoYXQgCisjIGlzIGdlbmVyYXRlZCBmb3IgSFRNTCBIZWxwKS4gRm9yIHRoaXMgdG8gd29yayBhIGJyb3dzZXIgdGhhdCBzdXBwb3J0cyAKKyMgSmF2YVNjcmlwdCwgREhUTUwsIENTUyBhbmQgZnJhbWVzIGlzIHJlcXVpcmVkIChmb3IgaW5zdGFuY2UgTW96aWxsYSAxLjArLCAKKyMgTmV0c2NhcGUgNi4wKywgSW50ZXJuZXQgZXhwbG9yZXIgNS4wKywgb3IgS29ucXVlcm9yKS4gV2luZG93cyB1c2VycyBhcmUgCisjIHByb2JhYmx5IGJldHRlciBvZmYgdXNpbmcgdGhlIEhUTUwgaGVscCBmZWF0dXJlLgorCitHRU5FUkFURV9UUkVFVklFVyAgICAgID0gTk8KKworIyBJZiB0aGUgdHJlZXZpZXcgaXMgZW5hYmxlZCAoc2VlIEdFTkVSQVRFX1RSRUVWSUVXKSB0aGVuIHRoaXMgdGFnIGNhbiBiZSAKKyMgdXNlZCB0byBzZXQgdGhlIGluaXRpYWwgd2lkdGggKGluIHBpeGVscykgb2YgdGhlIGZyYW1lIGluIHdoaWNoIHRoZSB0cmVlIAorIyBpcyBzaG93bi4KKworVFJFRVZJRVdfV0lEVEggICAgICAgICA9IDI1MAorCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIHRoZSBMYVRlWCBvdXRwdXQKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworIyBJZiB0aGUgR0VORVJBVEVfTEFURVggdGFnIGlzIHNldCB0byBZRVMgKHRoZSBkZWZhdWx0KSBEb3h5Z2VuIHdpbGwgCisjIGdlbmVyYXRlIExhdGV4IG91dHB1dC4KKworR0VORVJBVEVfTEFURVggICAgICAgICA9IE5PCisKKyMgVGhlIExBVEVYX09VVFBVVCB0YWcgaXMgdXNlZCB0byBzcGVjaWZ5IHdoZXJlIHRoZSBMYVRlWCBkb2NzIHdpbGwgYmUgcHV0LiAKKyMgSWYgYSByZWxhdGl2ZSBwYXRoIGlzIGVudGVyZWQgdGhlIHZhbHVlIG9mIE9VVFBVVF9ESVJFQ1RPUlkgd2lsbCBiZSAKKyMgcHV0IGluIGZyb250IG9mIGl0LiBJZiBsZWZ0IGJsYW5rIGBsYXRleCcgd2lsbCBiZSB1c2VkIGFzIHRoZSBkZWZhdWx0IHBhdGguCisKK0xBVEVYX09VVFBVVCAgICAgICAgICAgPSBsYXRleAorCisjIFRoZSBMQVRFWF9DTURfTkFNRSB0YWcgY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSB0aGUgTGFUZVggY29tbWFuZCBuYW1lIHRvIGJlIAorIyBpbnZva2VkLiBJZiBsZWZ0IGJsYW5rIGBsYXRleCcgd2lsbCBiZSB1c2VkIGFzIHRoZSBkZWZhdWx0IGNvbW1hbmQgbmFtZS4KKworTEFURVhfQ01EX05BTUUgICAgICAgICA9IGxhdGV4CisKKyMgVGhlIE1BS0VJTkRFWF9DTURfTkFNRSB0YWcgY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSB0aGUgY29tbWFuZCBuYW1lIHRvIAorIyBnZW5lcmF0ZSBpbmRleCBmb3IgTGFUZVguIElmIGxlZnQgYmxhbmsgYG1ha2VpbmRleCcgd2lsbCBiZSB1c2VkIGFzIHRoZSAKKyMgZGVmYXVsdCBjb21tYW5kIG5hbWUuCisKK01BS0VJTkRFWF9DTURfTkFNRSAgICAgPSBtYWtlaW5kZXgKKworIyBJZiB0aGUgQ09NUEFDVF9MQVRFWCB0YWcgaXMgc2V0IHRvIFlFUyBEb3h5Z2VuIGdlbmVyYXRlcyBtb3JlIGNvbXBhY3QgCisjIExhVGVYIGRvY3VtZW50cy4gVGhpcyBtYXkgYmUgdXNlZnVsIGZvciBzbWFsbCBwcm9qZWN0cyBhbmQgbWF5IGhlbHAgdG8gCisjIHNhdmUgc29tZSB0cmVlcyBpbiBnZW5lcmFsLgorCitDT01QQUNUX0xBVEVYICAgICAgICAgID0gTk8KKworIyBUaGUgUEFQRVJfVFlQRSB0YWcgY2FuIGJlIHVzZWQgdG8gc2V0IHRoZSBwYXBlciB0eXBlIHRoYXQgaXMgdXNlZCAKKyMgYnkgdGhlIHByaW50ZXIuIFBvc3NpYmxlIHZhbHVlcyBhcmU6IGE0LCBsZXR0ZXIsIGxlZ2FsIGFuZCAKKyMgZXhlY3V0aXZlLiBJZiBsZWZ0IGJsYW5rIGE0IHdpbGwgYmUgdXNlZC4KKworUEFQRVJfVFlQRSAgICAgICAgICAgICA9IGE0CisKKyMgVGhlIEVYVFJBX1BBQ0tBR0VTIHRhZyBjYW4gYmUgdG8gc3BlY2lmeSBvbmUgb3IgbW9yZSBuYW1lcyBvZiBMYVRlWCAKKyMgcGFja2FnZXMgdGhhdCBzaG91bGQgYmUgaW5jbHVkZWQgaW4gdGhlIExhVGVYIG91dHB1dC4KKworRVhUUkFfUEFDS0FHRVMgICAgICAgICA9IAorCisjIFRoZSBMQVRFWF9IRUFERVIgdGFnIGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkgYSBwZXJzb25hbCBMYVRlWCBoZWFkZXIgZm9yIAorIyB0aGUgZ2VuZXJhdGVkIGxhdGV4IGRvY3VtZW50LiBUaGUgaGVhZGVyIHNob3VsZCBjb250YWluIGV2ZXJ5dGhpbmcgdW50aWwgCisjIHRoZSBmaXJzdCBjaGFwdGVyLiBJZiBpdCBpcyBsZWZ0IGJsYW5rIGRveHlnZW4gd2lsbCBnZW5lcmF0ZSBhIAorIyBzdGFuZGFyZCBoZWFkZXIuIE5vdGljZTogb25seSB1c2UgdGhpcyB0YWcgaWYgeW91IGtub3cgd2hhdCB5b3UgYXJlIGRvaW5nIQorCitMQVRFWF9IRUFERVIgICAgICAgICAgID0gCisKKyMgSWYgdGhlIFBERl9IWVBFUkxJTktTIHRhZyBpcyBzZXQgdG8gWUVTLCB0aGUgTGFUZVggdGhhdCBpcyBnZW5lcmF0ZWQgCisjIGlzIHByZXBhcmVkIGZvciBjb252ZXJzaW9uIHRvIHBkZiAodXNpbmcgcHMycGRmKS4gVGhlIHBkZiBmaWxlIHdpbGwgCisjIGNvbnRhaW4gbGlua3MgKGp1c3QgbGlrZSB0aGUgSFRNTCBvdXRwdXQpIGluc3RlYWQgb2YgcGFnZSByZWZlcmVuY2VzIAorIyBUaGlzIG1ha2VzIHRoZSBvdXRwdXQgc3VpdGFibGUgZm9yIG9ubGluZSBicm93c2luZyB1c2luZyBhIHBkZiB2aWV3ZXIuCisKK1BERl9IWVBFUkxJTktTICAgICAgICAgPSBOTworCisjIElmIHRoZSBVU0VfUERGTEFURVggdGFnIGlzIHNldCB0byBZRVMsIHBkZmxhdGV4IHdpbGwgYmUgdXNlZCBpbnN0ZWFkIG9mIAorIyBwbGFpbiBsYXRleCBpbiB0aGUgZ2VuZXJhdGVkIE1ha2VmaWxlLiBTZXQgdGhpcyBvcHRpb24gdG8gWUVTIHRvIGdldCBhIAorIyBoaWdoZXIgcXVhbGl0eSBQREYgZG9jdW1lbnRhdGlvbi4KKworVVNFX1BERkxBVEVYICAgICAgICAgICA9IE5PCisKKyMgSWYgdGhlIExBVEVYX0JBVENITU9ERSB0YWcgaXMgc2V0IHRvIFlFUywgZG94eWdlbiB3aWxsIGFkZCB0aGUgXFxiYXRjaG1vZGUuIAorIyBjb21tYW5kIHRvIHRoZSBnZW5lcmF0ZWQgTGFUZVggZmlsZXMuIFRoaXMgd2lsbCBpbnN0cnVjdCBMYVRlWCB0byBrZWVwIAorIyBydW5uaW5nIGlmIGVycm9ycyBvY2N1ciwgaW5zdGVhZCBvZiBhc2tpbmcgdGhlIHVzZXIgZm9yIGhlbHAuIAorIyBUaGlzIG9wdGlvbiBpcyBhbHNvIHVzZWQgd2hlbiBnZW5lcmF0aW5nIGZvcm11bGFzIGluIEhUTUwuCisKK0xBVEVYX0JBVENITU9ERSAgICAgICAgPSBOTworCisjIElmIExBVEVYX0hJREVfSU5ESUNFUyBpcyBzZXQgdG8gWUVTIHRoZW4gZG94eWdlbiB3aWxsIG5vdCAKKyMgaW5jbHVkZSB0aGUgaW5kZXggY2hhcHRlcnMgKHN1Y2ggYXMgRmlsZSBJbmRleCwgQ29tcG91bmQgSW5kZXgsIGV0Yy4pIAorIyBpbiB0aGUgb3V0cHV0LgorCitMQVRFWF9ISURFX0lORElDRVMgICAgID0gTk8KKworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBjb25maWd1cmF0aW9uIG9wdGlvbnMgcmVsYXRlZCB0byB0aGUgUlRGIG91dHB1dAorIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisjIElmIHRoZSBHRU5FUkFURV9SVEYgdGFnIGlzIHNldCB0byBZRVMgRG94eWdlbiB3aWxsIGdlbmVyYXRlIFJURiBvdXRwdXQgCisjIFRoZSBSVEYgb3V0cHV0IGlzIG9wdGltaXplZCBmb3IgV29yZCA5NyBhbmQgbWF5IG5vdCBsb29rIHZlcnkgcHJldHR5IHdpdGggCisjIG90aGVyIFJURiByZWFkZXJzIG9yIGVkaXRvcnMuCisKK0dFTkVSQVRFX1JURiAgICAgICAgICAgPSBOTworCisjIFRoZSBSVEZfT1VUUFVUIHRhZyBpcyB1c2VkIHRvIHNwZWNpZnkgd2hlcmUgdGhlIFJURiBkb2NzIHdpbGwgYmUgcHV0LiAKKyMgSWYgYSByZWxhdGl2ZSBwYXRoIGlzIGVudGVyZWQgdGhlIHZhbHVlIG9mIE9VVFBVVF9ESVJFQ1RPUlkgd2lsbCBiZSAKKyMgcHV0IGluIGZyb250IG9mIGl0LiBJZiBsZWZ0IGJsYW5rIGBydGYnIHdpbGwgYmUgdXNlZCBhcyB0aGUgZGVmYXVsdCBwYXRoLgorCitSVEZfT1VUUFVUICAgICAgICAgICAgID0gcnRmCisKKyMgSWYgdGhlIENPTVBBQ1RfUlRGIHRhZyBpcyBzZXQgdG8gWUVTIERveHlnZW4gZ2VuZXJhdGVzIG1vcmUgY29tcGFjdCAKKyMgUlRGIGRvY3VtZW50cy4gVGhpcyBtYXkgYmUgdXNlZnVsIGZvciBzbWFsbCBwcm9qZWN0cyBhbmQgbWF5IGhlbHAgdG8gCisjIHNhdmUgc29tZSB0cmVlcyBpbiBnZW5lcmFsLgorCitDT01QQUNUX1JURiAgICAgICAgICAgID0gTk8KKworIyBJZiB0aGUgUlRGX0hZUEVSTElOS1MgdGFnIGlzIHNldCB0byBZRVMsIHRoZSBSVEYgdGhhdCBpcyBnZW5lcmF0ZWQgCisjIHdpbGwgY29udGFpbiBoeXBlcmxpbmsgZmllbGRzLiBUaGUgUlRGIGZpbGUgd2lsbCAKKyMgY29udGFpbiBsaW5rcyAoanVzdCBsaWtlIHRoZSBIVE1MIG91dHB1dCkgaW5zdGVhZCBvZiBwYWdlIHJlZmVyZW5jZXMuIAorIyBUaGlzIG1ha2VzIHRoZSBvdXRwdXQgc3VpdGFibGUgZm9yIG9ubGluZSBicm93c2luZyB1c2luZyBXT1JEIG9yIG90aGVyIAorIyBwcm9ncmFtcyB3aGljaCBzdXBwb3J0IHRob3NlIGZpZWxkcy4gCisjIE5vdGU6IHdvcmRwYWQgKHdyaXRlKSBhbmQgb3RoZXJzIGRvIG5vdCBzdXBwb3J0IGxpbmtzLgorCitSVEZfSFlQRVJMSU5LUyAgICAgICAgID0gTk8KKworIyBMb2FkIHN0eWxlc2hlZXQgZGVmaW5pdGlvbnMgZnJvbSBmaWxlLiBTeW50YXggaXMgc2ltaWxhciB0byBkb3h5Z2VuJ3MgCisjIGNvbmZpZyBmaWxlLCBpLmUuIGEgc2VyaWVzIG9mIGFzc2lnbm1lbnRzLiBZb3Ugb25seSBoYXZlIHRvIHByb3ZpZGUgCisjIHJlcGxhY2VtZW50cywgbWlzc2luZyBkZWZpbml0aW9ucyBhcmUgc2V0IHRvIHRoZWlyIGRlZmF1bHQgdmFsdWUuCisKK1JURl9TVFlMRVNIRUVUX0ZJTEUgICAgPSAKKworIyBTZXQgb3B0aW9uYWwgdmFyaWFibGVzIHVzZWQgaW4gdGhlIGdlbmVyYXRpb24gb2YgYW4gcnRmIGRvY3VtZW50LiAKKyMgU3ludGF4IGlzIHNpbWlsYXIgdG8gZG94eWdlbidzIGNvbmZpZyBmaWxlLgorCitSVEZfRVhURU5TSU9OU19GSUxFICAgID0gCisKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgY29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gdGhlIG1hbiBwYWdlIG91dHB1dAorIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisjIElmIHRoZSBHRU5FUkFURV9NQU4gdGFnIGlzIHNldCB0byBZRVMgKHRoZSBkZWZhdWx0KSBEb3h5Z2VuIHdpbGwgCisjIGdlbmVyYXRlIG1hbiBwYWdlcworCitHRU5FUkFURV9NQU4gICAgICAgICAgID0gWUVTCisKKyMgVGhlIE1BTl9PVVRQVVQgdGFnIGlzIHVzZWQgdG8gc3BlY2lmeSB3aGVyZSB0aGUgbWFuIHBhZ2VzIHdpbGwgYmUgcHV0LiAKKyMgSWYgYSByZWxhdGl2ZSBwYXRoIGlzIGVudGVyZWQgdGhlIHZhbHVlIG9mIE9VVFBVVF9ESVJFQ1RPUlkgd2lsbCBiZSAKKyMgcHV0IGluIGZyb250IG9mIGl0LiBJZiBsZWZ0IGJsYW5rIGBtYW4nIHdpbGwgYmUgdXNlZCBhcyB0aGUgZGVmYXVsdCBwYXRoLgorCitNQU5fT1VUUFVUICAgICAgICAgICAgID0gQnJsQVBJcmVmL21hbgorCisjIFRoZSBNQU5fRVhURU5TSU9OIHRhZyBkZXRlcm1pbmVzIHRoZSBleHRlbnNpb24gdGhhdCBpcyBhZGRlZCB0byAKKyMgdGhlIGdlbmVyYXRlZCBtYW4gcGFnZXMgKGRlZmF1bHQgaXMgdGhlIHN1YnJvdXRpbmUncyBzZWN0aW9uIC4zKQorCitNQU5fRVhURU5TSU9OICAgICAgICAgID0gLjMKKworIyBJZiB0aGUgTUFOX0xJTktTIHRhZyBpcyBzZXQgdG8gWUVTIGFuZCBEb3h5Z2VuIGdlbmVyYXRlcyBtYW4gb3V0cHV0LCAKKyMgdGhlbiBpdCB3aWxsIGdlbmVyYXRlIG9uZSBhZGRpdGlvbmFsIG1hbiBmaWxlIGZvciBlYWNoIGVudGl0eSAKKyMgZG9jdW1lbnRlZCBpbiB0aGUgcmVhbCBtYW4gcGFnZShzKS4gVGhlc2UgYWRkaXRpb25hbCBmaWxlcyAKKyMgb25seSBzb3VyY2UgdGhlIHJlYWwgbWFuIHBhZ2UsIGJ1dCB3aXRob3V0IHRoZW0gdGhlIG1hbiBjb21tYW5kIAorIyB3b3VsZCBiZSB1bmFibGUgdG8gZmluZCB0aGUgY29ycmVjdCBwYWdlLiBUaGUgZGVmYXVsdCBpcyBOTy4KKworTUFOX0xJTktTICAgICAgICAgICAgICA9IFlFUworCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIHRoZSBYTUwgb3V0cHV0CisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyMgSWYgdGhlIEdFTkVSQVRFX1hNTCB0YWcgaXMgc2V0IHRvIFlFUyBEb3h5Z2VuIHdpbGwgCisjIGdlbmVyYXRlIGFuIFhNTCBmaWxlIHRoYXQgY2FwdHVyZXMgdGhlIHN0cnVjdHVyZSBvZiAKKyMgdGhlIGNvZGUgaW5jbHVkaW5nIGFsbCBkb2N1bWVudGF0aW9uLgorCitHRU5FUkFURV9YTUwgICAgICAgICAgID0gTk8KKworIyBUaGUgWE1MX09VVFBVVCB0YWcgaXMgdXNlZCB0byBzcGVjaWZ5IHdoZXJlIHRoZSBYTUwgcGFnZXMgd2lsbCBiZSBwdXQuIAorIyBJZiBhIHJlbGF0aXZlIHBhdGggaXMgZW50ZXJlZCB0aGUgdmFsdWUgb2YgT1VUUFVUX0RJUkVDVE9SWSB3aWxsIGJlIAorIyBwdXQgaW4gZnJvbnQgb2YgaXQuIElmIGxlZnQgYmxhbmsgYHhtbCcgd2lsbCBiZSB1c2VkIGFzIHRoZSBkZWZhdWx0IHBhdGguCisKK1hNTF9PVVRQVVQgICAgICAgICAgICAgPSB4bWwKKworIyBJZiB0aGUgWE1MX1BST0dSQU1MSVNUSU5HIHRhZyBpcyBzZXQgdG8gWUVTIERveHlnZW4gd2lsbCAKKyMgZHVtcCB0aGUgcHJvZ3JhbSBsaXN0aW5ncyAoaW5jbHVkaW5nIHN5bnRheCBoaWdobGlnaHRpbmcgCisjIGFuZCBjcm9zcy1yZWZlcmVuY2luZyBpbmZvcm1hdGlvbikgdG8gdGhlIFhNTCBvdXRwdXQuIE5vdGUgdGhhdCAKKyMgZW5hYmxpbmcgdGhpcyB3aWxsIHNpZ25pZmljYW50bHkgaW5jcmVhc2UgdGhlIHNpemUgb2YgdGhlIFhNTCBvdXRwdXQuCisKK1hNTF9QUk9HUkFNTElTVElORyAgICAgPSBZRVMKKworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIHRoZSBBdXRvR2VuIERlZmluaXRpb25zIG91dHB1dAorIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisjIElmIHRoZSBHRU5FUkFURV9BVVRPR0VOX0RFRiB0YWcgaXMgc2V0IHRvIFlFUyBEb3h5Z2VuIHdpbGwgCisjIGdlbmVyYXRlIGFuIEF1dG9HZW4gRGVmaW5pdGlvbnMgKHNlZSBhdXRvZ2VuLnNmLm5ldCkgZmlsZSAKKyMgdGhhdCBjYXB0dXJlcyB0aGUgc3RydWN0dXJlIG9mIHRoZSBjb2RlIGluY2x1ZGluZyBhbGwgCisjIGRvY3VtZW50YXRpb24uIE5vdGUgdGhhdCB0aGlzIGZlYXR1cmUgaXMgc3RpbGwgZXhwZXJpbWVudGFsIAorIyBhbmQgaW5jb21wbGV0ZSBhdCB0aGUgbW9tZW50LgorCitHRU5FUkFURV9BVVRPR0VOX0RFRiAgID0gTk8KKworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBjb25maWd1cmF0aW9uIG9wdGlvbnMgcmVsYXRlZCB0byB0aGUgUGVybCBtb2R1bGUgb3V0cHV0CisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyMgSWYgdGhlIEdFTkVSQVRFX1BFUkxNT0QgdGFnIGlzIHNldCB0byBZRVMgRG94eWdlbiB3aWxsIAorIyBnZW5lcmF0ZSBhIFBlcmwgbW9kdWxlIGZpbGUgdGhhdCBjYXB0dXJlcyB0aGUgc3RydWN0dXJlIG9mIAorIyB0aGUgY29kZSBpbmNsdWRpbmcgYWxsIGRvY3VtZW50YXRpb24uIE5vdGUgdGhhdCB0aGlzIAorIyBmZWF0dXJlIGlzIHN0aWxsIGV4cGVyaW1lbnRhbCBhbmQgaW5jb21wbGV0ZSBhdCB0aGUgCisjIG1vbWVudC4KKworR0VORVJBVEVfUEVSTE1PRCAgICAgICA9IE5PCisKKyMgSWYgdGhlIFBFUkxNT0RfTEFURVggdGFnIGlzIHNldCB0byBZRVMgRG94eWdlbiB3aWxsIGdlbmVyYXRlIAorIyB0aGUgbmVjZXNzYXJ5IE1ha2VmaWxlIHJ1bGVzLCBQZXJsIHNjcmlwdHMgYW5kIExhVGVYIGNvZGUgdG8gYmUgYWJsZSAKKyMgdG8gZ2VuZXJhdGUgUERGIGFuZCBEVkkgb3V0cHV0IGZyb20gdGhlIFBlcmwgbW9kdWxlIG91dHB1dC4KKworUEVSTE1PRF9MQVRFWCAgICAgICAgICA9IE5PCisKKyMgSWYgdGhlIFBFUkxNT0RfUFJFVFRZIHRhZyBpcyBzZXQgdG8gWUVTIHRoZSBQZXJsIG1vZHVsZSBvdXRwdXQgd2lsbCBiZSAKKyMgbmljZWx5IGZvcm1hdHRlZCBzbyBpdCBjYW4gYmUgcGFyc2VkIGJ5IGEgaHVtYW4gcmVhZGVyLiAgVGhpcyBpcyB1c2VmdWwgCisjIGlmIHlvdSB3YW50IHRvIHVuZGVyc3RhbmQgd2hhdCBpcyBnb2luZyBvbi4gIE9uIHRoZSBvdGhlciBoYW5kLCBpZiB0aGlzIAorIyB0YWcgaXMgc2V0IHRvIE5PIHRoZSBzaXplIG9mIHRoZSBQZXJsIG1vZHVsZSBvdXRwdXQgd2lsbCBiZSBtdWNoIHNtYWxsZXIgCisjIGFuZCBQZXJsIHdpbGwgcGFyc2UgaXQganVzdCB0aGUgc2FtZS4KKworUEVSTE1PRF9QUkVUVFkgICAgICAgICA9IFlFUworCisjIFRoZSBuYW1lcyBvZiB0aGUgbWFrZSB2YXJpYWJsZXMgaW4gdGhlIGdlbmVyYXRlZCBkb3h5cnVsZXMubWFrZSBmaWxlIAorIyBhcmUgcHJlZml4ZWQgd2l0aCB0aGUgc3RyaW5nIGNvbnRhaW5lZCBpbiBQRVJMTU9EX01BS0VWQVJfUFJFRklYLiAKKyMgVGhpcyBpcyB1c2VmdWwgc28gZGlmZmVyZW50IGRveHlydWxlcy5tYWtlIGZpbGVzIGluY2x1ZGVkIGJ5IHRoZSBzYW1lIAorIyBNYWtlZmlsZSBkb24ndCBvdmVyd3JpdGUgZWFjaCBvdGhlcidzIHZhcmlhYmxlcy4KKworUEVSTE1PRF9NQUtFVkFSX1BSRUZJWCA9IAorCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIENvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIHRoZSBwcmVwcm9jZXNzb3IgICAKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworIyBJZiB0aGUgRU5BQkxFX1BSRVBST0NFU1NJTkcgdGFnIGlzIHNldCB0byBZRVMgKHRoZSBkZWZhdWx0KSBEb3h5Z2VuIHdpbGwgCisjIGV2YWx1YXRlIGFsbCBDLXByZXByb2Nlc3NvciBkaXJlY3RpdmVzIGZvdW5kIGluIHRoZSBzb3VyY2VzIGFuZCBpbmNsdWRlIAorIyBmaWxlcy4KKworRU5BQkxFX1BSRVBST0NFU1NJTkcgICA9IFlFUworCisjIElmIHRoZSBNQUNST19FWFBBTlNJT04gdGFnIGlzIHNldCB0byBZRVMgRG94eWdlbiB3aWxsIGV4cGFuZCBhbGwgbWFjcm8gCisjIG5hbWVzIGluIHRoZSBzb3VyY2UgY29kZS4gSWYgc2V0IHRvIE5PICh0aGUgZGVmYXVsdCkgb25seSBjb25kaXRpb25hbCAKKyMgY29tcGlsYXRpb24gd2lsbCBiZSBwZXJmb3JtZWQuIE1hY3JvIGV4cGFuc2lvbiBjYW4gYmUgZG9uZSBpbiBhIGNvbnRyb2xsZWQgCisjIHdheSBieSBzZXR0aW5nIEVYUEFORF9PTkxZX1BSRURFRiB0byBZRVMuCisKK01BQ1JPX0VYUEFOU0lPTiAgICAgICAgPSBOTworCisjIElmIHRoZSBFWFBBTkRfT05MWV9QUkVERUYgYW5kIE1BQ1JPX0VYUEFOU0lPTiB0YWdzIGFyZSBib3RoIHNldCB0byBZRVMgCisjIHRoZW4gdGhlIG1hY3JvIGV4cGFuc2lvbiBpcyBsaW1pdGVkIHRvIHRoZSBtYWNyb3Mgc3BlY2lmaWVkIHdpdGggdGhlIAorIyBQUkVERUZJTkVEIGFuZCBFWFBBTkRfQVNfUFJFREVGSU5FRCB0YWdzLgorCitFWFBBTkRfT05MWV9QUkVERUYgICAgID0gTk8KKworIyBJZiB0aGUgU0VBUkNIX0lOQ0xVREVTIHRhZyBpcyBzZXQgdG8gWUVTICh0aGUgZGVmYXVsdCkgdGhlIGluY2x1ZGVzIGZpbGVzIAorIyBpbiB0aGUgSU5DTFVERV9QQVRIIChzZWUgYmVsb3cpIHdpbGwgYmUgc2VhcmNoIGlmIGEgI2luY2x1ZGUgaXMgZm91bmQuCisKK1NFQVJDSF9JTkNMVURFUyAgICAgICAgPSBZRVMKKworIyBUaGUgSU5DTFVERV9QQVRIIHRhZyBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IG9uZSBvciBtb3JlIGRpcmVjdG9yaWVzIHRoYXQgCisjIGNvbnRhaW4gaW5jbHVkZSBmaWxlcyB0aGF0IGFyZSBub3QgaW5wdXQgZmlsZXMgYnV0IHNob3VsZCBiZSBwcm9jZXNzZWQgYnkgCisjIHRoZSBwcmVwcm9jZXNzb3IuCisKK0lOQ0xVREVfUEFUSCAgICAgICAgICAgPSAKKworIyBZb3UgY2FuIHVzZSB0aGUgSU5DTFVERV9GSUxFX1BBVFRFUk5TIHRhZyB0byBzcGVjaWZ5IG9uZSBvciBtb3JlIHdpbGRjYXJkIAorIyBwYXR0ZXJucyAobGlrZSAqLmggYW5kICouaHBwKSB0byBmaWx0ZXIgb3V0IHRoZSBoZWFkZXItZmlsZXMgaW4gdGhlIAorIyBkaXJlY3Rvcmllcy4gSWYgbGVmdCBibGFuaywgdGhlIHBhdHRlcm5zIHNwZWNpZmllZCB3aXRoIEZJTEVfUEFUVEVSTlMgd2lsbCAKKyMgYmUgdXNlZC4KKworSU5DTFVERV9GSUxFX1BBVFRFUk5TICA9IAorCisjIFRoZSBQUkVERUZJTkVEIHRhZyBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IG9uZSBvciBtb3JlIG1hY3JvIG5hbWVzIHRoYXQgCisjIGFyZSBkZWZpbmVkIGJlZm9yZSB0aGUgcHJlcHJvY2Vzc29yIGlzIHN0YXJ0ZWQgKHNpbWlsYXIgdG8gdGhlIC1EIG9wdGlvbiBvZiAKKyMgZ2NjKS4gVGhlIGFyZ3VtZW50IG9mIHRoZSB0YWcgaXMgYSBsaXN0IG9mIG1hY3JvcyBvZiB0aGUgZm9ybTogbmFtZSAKKyMgb3IgbmFtZT1kZWZpbml0aW9uIChubyBzcGFjZXMpLiBJZiB0aGUgZGVmaW5pdGlvbiBhbmQgdGhlID0gYXJlIAorIyBvbWl0dGVkID0xIGlzIGFzc3VtZWQuIFRvIHByZXZlbnQgYSBtYWNybyBkZWZpbml0aW9uIGZyb20gYmVpbmcgCisjIHVuZGVmaW5lZCB2aWEgI3VuZGVmIG9yIHJlY3Vyc2l2ZWx5IGV4cGFuZGVkIHVzZSB0aGUgOj0gb3BlcmF0b3IgCisjIGluc3RlYWQgb2YgdGhlID0gb3BlcmF0b3IuCisKK1BSRURFRklORUQgICAgICAgICAgICAgPSAKKworIyBJZiB0aGUgTUFDUk9fRVhQQU5TSU9OIGFuZCBFWFBBTkRfT05MWV9QUkVERUYgdGFncyBhcmUgc2V0IHRvIFlFUyB0aGVuIAorIyB0aGlzIHRhZyBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IGEgbGlzdCBvZiBtYWNybyBuYW1lcyB0aGF0IHNob3VsZCBiZSBleHBhbmRlZC4gCisjIFRoZSBtYWNybyBkZWZpbml0aW9uIHRoYXQgaXMgZm91bmQgaW4gdGhlIHNvdXJjZXMgd2lsbCBiZSB1c2VkLiAKKyMgVXNlIHRoZSBQUkVERUZJTkVEIHRhZyBpZiB5b3Ugd2FudCB0byB1c2UgYSBkaWZmZXJlbnQgbWFjcm8gZGVmaW5pdGlvbi4KKworRVhQQU5EX0FTX0RFRklORUQgICAgICA9IAorCisjIElmIHRoZSBTS0lQX0ZVTkNUSU9OX01BQ1JPUyB0YWcgaXMgc2V0IHRvIFlFUyAodGhlIGRlZmF1bHQpIHRoZW4gCisjIGRveHlnZW4ncyBwcmVwcm9jZXNzb3Igd2lsbCByZW1vdmUgYWxsIGZ1bmN0aW9uLWxpa2UgbWFjcm9zIHRoYXQgYXJlIGFsb25lIAorIyBvbiBhIGxpbmUsIGhhdmUgYW4gYWxsIHVwcGVyY2FzZSBuYW1lLCBhbmQgZG8gbm90IGVuZCB3aXRoIGEgc2VtaWNvbG9uLiBTdWNoIAorIyBmdW5jdGlvbiBtYWNyb3MgYXJlIHR5cGljYWxseSB1c2VkIGZvciBib2lsZXItcGxhdGUgY29kZSwgYW5kIHdpbGwgY29uZnVzZSB0aGUgCisjIHBhcnNlciBpZiBub3QgcmVtb3ZlZC4KKworU0tJUF9GVU5DVElPTl9NQUNST1MgICA9IFlFUworCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIENvbmZpZ3VyYXRpb246OmFkZGl0aW9ucyByZWxhdGVkIHRvIGV4dGVybmFsIHJlZmVyZW5jZXMgICAKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworIyBUaGUgVEFHRklMRVMgb3B0aW9uIGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkgb25lIG9yIG1vcmUgdGFnZmlsZXMuIAorIyBPcHRpb25hbGx5IGFuIGluaXRpYWwgbG9jYXRpb24gb2YgdGhlIGV4dGVybmFsIGRvY3VtZW50YXRpb24gCisjIGNhbiBiZSBhZGRlZCBmb3IgZWFjaCB0YWdmaWxlLiBUaGUgZm9ybWF0IG9mIGEgdGFnIGZpbGUgd2l0aG91dCAKKyMgdGhpcyBsb2NhdGlvbiBpcyBhcyBmb2xsb3dzOiAKKyMgICBUQUdGSUxFUyA9IGZpbGUxIGZpbGUyIC4uLiAKKyMgQWRkaW5nIGxvY2F0aW9uIGZvciB0aGUgdGFnIGZpbGVzIGlzIGRvbmUgYXMgZm9sbG93czogCisjICAgVEFHRklMRVMgPSBmaWxlMT1sb2MxICJmaWxlMiA9IGxvYzIiIC4uLiAKKyMgd2hlcmUgImxvYzEiIGFuZCAibG9jMiIgY2FuIGJlIHJlbGF0aXZlIG9yIGFic29sdXRlIHBhdGhzIG9yIAorIyBVUkxzLiBJZiBhIGxvY2F0aW9uIGlzIHByZXNlbnQgZm9yIGVhY2ggdGFnLCB0aGUgaW5zdGFsbGRveCB0b29sIAorIyBkb2VzIG5vdCBoYXZlIHRvIGJlIHJ1biB0byBjb3JyZWN0IHRoZSBsaW5rcy4KKyMgTm90ZSB0aGF0IGVhY2ggdGFnIGZpbGUgbXVzdCBoYXZlIGEgdW5pcXVlIG5hbWUKKyMgKHdoZXJlIHRoZSBuYW1lIGRvZXMgTk9UIGluY2x1ZGUgdGhlIHBhdGgpCisjIElmIGEgdGFnIGZpbGUgaXMgbm90IGxvY2F0ZWQgaW4gdGhlIGRpcmVjdG9yeSBpbiB3aGljaCBkb3h5Z2VuIAorIyBpcyBydW4sIHlvdSBtdXN0IGFsc28gc3BlY2lmeSB0aGUgcGF0aCB0byB0aGUgdGFnZmlsZSBoZXJlLgorCitUQUdGSUxFUyAgICAgICAgICAgICAgID0gCisKKyMgV2hlbiBhIGZpbGUgbmFtZSBpcyBzcGVjaWZpZWQgYWZ0ZXIgR0VORVJBVEVfVEFHRklMRSwgZG94eWdlbiB3aWxsIGNyZWF0ZSAKKyMgYSB0YWcgZmlsZSB0aGF0IGlzIGJhc2VkIG9uIHRoZSBpbnB1dCBmaWxlcyBpdCByZWFkcy4KKworR0VORVJBVEVfVEFHRklMRSAgICAgICA9IAorCisjIElmIHRoZSBBTExFWFRFUk5BTFMgdGFnIGlzIHNldCB0byBZRVMgYWxsIGV4dGVybmFsIGNsYXNzZXMgd2lsbCBiZSBsaXN0ZWQgCisjIGluIHRoZSBjbGFzcyBpbmRleC4gSWYgc2V0IHRvIE5PIG9ubHkgdGhlIGluaGVyaXRlZCBleHRlcm5hbCBjbGFzc2VzIAorIyB3aWxsIGJlIGxpc3RlZC4KKworQUxMRVhURVJOQUxTICAgICAgICAgICA9IE5PCisKKyMgSWYgdGhlIEVYVEVSTkFMX0dST1VQUyB0YWcgaXMgc2V0IHRvIFlFUyBhbGwgZXh0ZXJuYWwgZ3JvdXBzIHdpbGwgYmUgbGlzdGVkIAorIyBpbiB0aGUgbW9kdWxlcyBpbmRleC4gSWYgc2V0IHRvIE5PLCBvbmx5IHRoZSBjdXJyZW50IHByb2plY3QncyBncm91cHMgd2lsbCAKKyMgYmUgbGlzdGVkLgorCitFWFRFUk5BTF9HUk9VUFMgICAgICAgID0gWUVTCisKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgQ29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gdGhlIGRvdCB0b29sICAgCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyMgSWYgdGhlIENMQVNTX0RJQUdSQU1TIHRhZyBpcyBzZXQgdG8gWUVTICh0aGUgZGVmYXVsdCkgRG94eWdlbiB3aWxsIAorIyBnZW5lcmF0ZSBhIGluaGVyaXRhbmNlIGRpYWdyYW0gKGluIEhUTUwsIFJURiBhbmQgTGFUZVgpIGZvciBjbGFzc2VzIHdpdGggYmFzZSBvciAKKyMgc3VwZXIgY2xhc3Nlcy4gU2V0dGluZyB0aGUgdGFnIHRvIE5PIHR1cm5zIHRoZSBkaWFncmFtcyBvZmYuIE5vdGUgdGhhdCB0aGlzIAorIyBvcHRpb24gaXMgc3VwZXJzZWRlZCBieSB0aGUgSEFWRV9ET1Qgb3B0aW9uIGJlbG93LiBUaGlzIGlzIG9ubHkgYSBmYWxsYmFjay4gSXQgaXMgCisjIHJlY29tbWVuZGVkIHRvIGluc3RhbGwgYW5kIHVzZSBkb3QsIHNpbmNlIGl0IHlpZWxkcyBtb3JlIHBvd2VyZnVsIGdyYXBocy4KKworQ0xBU1NfRElBR1JBTVMgICAgICAgICA9IFlFUworCisjIElmIHNldCB0byBZRVMsIHRoZSBpbmhlcml0YW5jZSBhbmQgY29sbGFib3JhdGlvbiBncmFwaHMgd2lsbCBoaWRlIAorIyBpbmhlcml0YW5jZSBhbmQgdXNhZ2UgcmVsYXRpb25zIGlmIHRoZSB0YXJnZXQgaXMgdW5kb2N1bWVudGVkIAorIyBvciBpcyBub3QgYSBjbGFzcy4KKworSElERV9VTkRPQ19SRUxBVElPTlMgICA9IFlFUworCisjIElmIHlvdSBzZXQgdGhlIEhBVkVfRE9UIHRhZyB0byBZRVMgdGhlbiBkb3h5Z2VuIHdpbGwgYXNzdW1lIHRoZSBkb3QgdG9vbCBpcyAKKyMgYXZhaWxhYmxlIGZyb20gdGhlIHBhdGguIFRoaXMgdG9vbCBpcyBwYXJ0IG9mIEdyYXBodml6LCBhIGdyYXBoIHZpc3VhbGl6YXRpb24gCisjIHRvb2xraXQgZnJvbSBBVCZUIGFuZCBMdWNlbnQgQmVsbCBMYWJzLiBUaGUgb3RoZXIgb3B0aW9ucyBpbiB0aGlzIHNlY3Rpb24gCisjIGhhdmUgbm8gZWZmZWN0IGlmIHRoaXMgb3B0aW9uIGlzIHNldCB0byBOTyAodGhlIGRlZmF1bHQpCisKK0hBVkVfRE9UICAgICAgICAgICAgICAgPSBOTworCisjIElmIHRoZSBDTEFTU19HUkFQSCBhbmQgSEFWRV9ET1QgdGFncyBhcmUgc2V0IHRvIFlFUyB0aGVuIGRveHlnZW4gCisjIHdpbGwgZ2VuZXJhdGUgYSBncmFwaCBmb3IgZWFjaCBkb2N1bWVudGVkIGNsYXNzIHNob3dpbmcgdGhlIGRpcmVjdCBhbmQgCisjIGluZGlyZWN0IGluaGVyaXRhbmNlIHJlbGF0aW9ucy4gU2V0dGluZyB0aGlzIHRhZyB0byBZRVMgd2lsbCBmb3JjZSB0aGUgCisjIHRoZSBDTEFTU19ESUFHUkFNUyB0YWcgdG8gTk8uCisKK0NMQVNTX0dSQVBIICAgICAgICAgICAgPSBZRVMKKworIyBJZiB0aGUgQ09MTEFCT1JBVElPTl9HUkFQSCBhbmQgSEFWRV9ET1QgdGFncyBhcmUgc2V0IHRvIFlFUyB0aGVuIGRveHlnZW4gCisjIHdpbGwgZ2VuZXJhdGUgYSBncmFwaCBmb3IgZWFjaCBkb2N1bWVudGVkIGNsYXNzIHNob3dpbmcgdGhlIGRpcmVjdCBhbmQgCisjIGluZGlyZWN0IGltcGxlbWVudGF0aW9uIGRlcGVuZGVuY2llcyAoaW5oZXJpdGFuY2UsIGNvbnRhaW5tZW50LCBhbmQgCisjIGNsYXNzIHJlZmVyZW5jZXMgdmFyaWFibGVzKSBvZiB0aGUgY2xhc3Mgd2l0aCBvdGhlciBkb2N1bWVudGVkIGNsYXNzZXMuCisKK0NPTExBQk9SQVRJT05fR1JBUEggICAgPSBZRVMKKworIyBJZiB0aGUgVU1MX0xPT0sgdGFnIGlzIHNldCB0byBZRVMgZG94eWdlbiB3aWxsIGdlbmVyYXRlIGluaGVyaXRhbmNlIGFuZCAKKyMgY29sbGFib3JhdGlvbiBkaWFncmFtcyBpbiBhIHN0eWxlIHNpbWlsYXIgdG8gdGhlIE9NRydzIFVuaWZpZWQgTW9kZWxpbmcgCisjIExhbmd1YWdlLgorCitVTUxfTE9PSyAgICAgICAgICAgICAgID0gTk8KKworIyBJZiBzZXQgdG8gWUVTLCB0aGUgaW5oZXJpdGFuY2UgYW5kIGNvbGxhYm9yYXRpb24gZ3JhcGhzIHdpbGwgc2hvdyB0aGUgCisjIHJlbGF0aW9ucyBiZXR3ZWVuIHRlbXBsYXRlcyBhbmQgdGhlaXIgaW5zdGFuY2VzLgorCitURU1QTEFURV9SRUxBVElPTlMgICAgID0gWUVTCisKKyMgSWYgdGhlIEVOQUJMRV9QUkVQUk9DRVNTSU5HLCBTRUFSQ0hfSU5DTFVERVMsIElOQ0xVREVfR1JBUEgsIGFuZCBIQVZFX0RPVCAKKyMgdGFncyBhcmUgc2V0IHRvIFlFUyB0aGVuIGRveHlnZW4gd2lsbCBnZW5lcmF0ZSBhIGdyYXBoIGZvciBlYWNoIGRvY3VtZW50ZWQgCisjIGZpbGUgc2hvd2luZyB0aGUgZGlyZWN0IGFuZCBpbmRpcmVjdCBpbmNsdWRlIGRlcGVuZGVuY2llcyBvZiB0aGUgZmlsZSB3aXRoIAorIyBvdGhlciBkb2N1bWVudGVkIGZpbGVzLgorCitJTkNMVURFX0dSQVBIICAgICAgICAgID0gWUVTCisKKyMgSWYgdGhlIEVOQUJMRV9QUkVQUk9DRVNTSU5HLCBTRUFSQ0hfSU5DTFVERVMsIElOQ0xVREVEX0JZX0dSQVBILCBhbmQgCisjIEhBVkVfRE9UIHRhZ3MgYXJlIHNldCB0byBZRVMgdGhlbiBkb3h5Z2VuIHdpbGwgZ2VuZXJhdGUgYSBncmFwaCBmb3IgZWFjaCAKKyMgZG9jdW1lbnRlZCBoZWFkZXIgZmlsZSBzaG93aW5nIHRoZSBkb2N1bWVudGVkIGZpbGVzIHRoYXQgZGlyZWN0bHkgb3IgCisjIGluZGlyZWN0bHkgaW5jbHVkZSB0aGlzIGZpbGUuCisKK0lOQ0xVREVEX0JZX0dSQVBIICAgICAgPSBZRVMKKworIyBJZiB0aGUgQ0FMTF9HUkFQSCBhbmQgSEFWRV9ET1QgdGFncyBhcmUgc2V0IHRvIFlFUyB0aGVuIGRveHlnZW4gd2lsbCAKKyMgZ2VuZXJhdGUgYSBjYWxsIGRlcGVuZGVuY3kgZ3JhcGggZm9yIGV2ZXJ5IGdsb2JhbCBmdW5jdGlvbiBvciBjbGFzcyBtZXRob2QuIAorIyBOb3RlIHRoYXQgZW5hYmxpbmcgdGhpcyBvcHRpb24gd2lsbCBzaWduaWZpY2FudGx5IGluY3JlYXNlIHRoZSB0aW1lIG9mIGEgcnVuLiAKKyMgU28gaW4gbW9zdCBjYXNlcyBpdCB3aWxsIGJlIGJldHRlciB0byBlbmFibGUgY2FsbCBncmFwaHMgZm9yIHNlbGVjdGVkIAorIyBmdW5jdGlvbnMgb25seSB1c2luZyB0aGUgXGNhbGxncmFwaCBjb21tYW5kLgorCitDQUxMX0dSQVBIICAgICAgICAgICAgID0gTk8KKworIyBJZiB0aGUgR1JBUEhJQ0FMX0hJRVJBUkNIWSBhbmQgSEFWRV9ET1QgdGFncyBhcmUgc2V0IHRvIFlFUyB0aGVuIGRveHlnZW4gCisjIHdpbGwgZ3JhcGhpY2FsIGhpZXJhcmNoeSBvZiBhbGwgY2xhc3NlcyBpbnN0ZWFkIG9mIGEgdGV4dHVhbCBvbmUuCisKK0dSQVBISUNBTF9ISUVSQVJDSFkgICAgPSBZRVMKKworIyBUaGUgRE9UX0lNQUdFX0ZPUk1BVCB0YWcgY2FuIGJlIHVzZWQgdG8gc2V0IHRoZSBpbWFnZSBmb3JtYXQgb2YgdGhlIGltYWdlcyAKKyMgZ2VuZXJhdGVkIGJ5IGRvdC4gUG9zc2libGUgdmFsdWVzIGFyZSBwbmcsIGpwZywgb3IgZ2lmCisjIElmIGxlZnQgYmxhbmsgcG5nIHdpbGwgYmUgdXNlZC4KKworRE9UX0lNQUdFX0ZPUk1BVCAgICAgICA9IHBuZworCisjIFRoZSB0YWcgRE9UX1BBVEggY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSB0aGUgcGF0aCB3aGVyZSB0aGUgZG90IHRvb2wgY2FuIGJlIAorIyBmb3VuZC4gSWYgbGVmdCBibGFuaywgaXQgaXMgYXNzdW1lZCB0aGUgZG90IHRvb2wgY2FuIGJlIGZvdW5kIG9uIHRoZSBwYXRoLgorCitET1RfUEFUSCAgICAgICAgICAgICAgID0gCisKKyMgVGhlIERPVEZJTEVfRElSUyB0YWcgY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSBvbmUgb3IgbW9yZSBkaXJlY3RvcmllcyB0aGF0IAorIyBjb250YWluIGRvdCBmaWxlcyB0aGF0IGFyZSBpbmNsdWRlZCBpbiB0aGUgZG9jdW1lbnRhdGlvbiAoc2VlIHRoZSAKKyMgXGRvdGZpbGUgY29tbWFuZCkuCisKK0RPVEZJTEVfRElSUyAgICAgICAgICAgPSAKKworIyBUaGUgTUFYX0RPVF9HUkFQSF9ERVBUSCB0YWcgY2FuIGJlIHVzZWQgdG8gc2V0IHRoZSBtYXhpbXVtIGRlcHRoIG9mIHRoZSAKKyMgZ3JhcGhzIGdlbmVyYXRlZCBieSBkb3QuIEEgZGVwdGggdmFsdWUgb2YgMyBtZWFucyB0aGF0IG9ubHkgbm9kZXMgcmVhY2hhYmxlIAorIyBmcm9tIHRoZSByb290IGJ5IGZvbGxvd2luZyBhIHBhdGggdmlhIGF0IG1vc3QgMyBlZGdlcyB3aWxsIGJlIHNob3duLiBOb2RlcyB0aGF0IAorIyBsYXkgZnVydGhlciBmcm9tIHRoZSByb290IG5vZGUgd2lsbCBiZSBvbWl0dGVkLiBOb3RlIHRoYXQgc2V0dGluZyB0aGlzIG9wdGlvbiB0byAKKyMgMSBvciAyIG1heSBncmVhdGx5IHJlZHVjZSB0aGUgY29tcHV0YXRpb24gdGltZSBuZWVkZWQgZm9yIGxhcmdlIGNvZGUgYmFzZXMuIEFsc28gCisjIG5vdGUgdGhhdCBhIGdyYXBoIG1heSBiZSBmdXJ0aGVyIHRydW5jYXRlZCBpZiB0aGUgZ3JhcGgncyBpbWFnZSBkaW1lbnNpb25zIGFyZSAKKyMgbm90IHN1ZmZpY2llbnQgdG8gZml0IHRoZSBncmFwaCAoc2VlIE1BWF9ET1RfR1JBUEhfV0lEVEggYW5kIE1BWF9ET1RfR1JBUEhfSEVJR0hUKS4gCisjIElmIDAgaXMgdXNlZCBmb3IgdGhlIGRlcHRoIHZhbHVlICh0aGUgZGVmYXVsdCksIHRoZSBncmFwaCBpcyBub3QgZGVwdGgtY29uc3RyYWluZWQuCisKK01BWF9ET1RfR1JBUEhfREVQVEggICAgPSAwCisKKyMgSWYgdGhlIEdFTkVSQVRFX0xFR0VORCB0YWcgaXMgc2V0IHRvIFlFUyAodGhlIGRlZmF1bHQpIERveHlnZW4gd2lsbCAKKyMgZ2VuZXJhdGUgYSBsZWdlbmQgcGFnZSBleHBsYWluaW5nIHRoZSBtZWFuaW5nIG9mIHRoZSB2YXJpb3VzIGJveGVzIGFuZCAKKyMgYXJyb3dzIGluIHRoZSBkb3QgZ2VuZXJhdGVkIGdyYXBocy4KKworR0VORVJBVEVfTEVHRU5EICAgICAgICA9IFlFUworCisjIElmIHRoZSBET1RfQ0xFQU5VUCB0YWcgaXMgc2V0IHRvIFlFUyAodGhlIGRlZmF1bHQpIERveHlnZW4gd2lsbCAKKyMgcmVtb3ZlIHRoZSBpbnRlcm1lZGlhdGUgZG90IGZpbGVzIHRoYXQgYXJlIHVzZWQgdG8gZ2VuZXJhdGUgCisjIHRoZSB2YXJpb3VzIGdyYXBocy4KKworRE9UX0NMRUFOVVAgICAgICAgICAgICA9IFlFUworCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIENvbmZpZ3VyYXRpb246OmFkZGl0aW9ucyByZWxhdGVkIHRvIHRoZSBzZWFyY2ggZW5naW5lICAgCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyMgVGhlIFNFQVJDSEVOR0lORSB0YWcgc3BlY2lmaWVzIHdoZXRoZXIgb3Igbm90IGEgc2VhcmNoIGVuZ2luZSBzaG91bGQgYmUgCisjIHVzZWQuIElmIHNldCB0byBOTyB0aGUgdmFsdWVzIG9mIGFsbCB0YWdzIGJlbG93IHRoaXMgb25lIHdpbGwgYmUgaWdub3JlZC4KKworU0VBUkNIRU5HSU5FICAgICAgICAgICA9IE5PCmRpZmYgLS1naXQgYS9Eb2N1bWVudHMvQ09OVFJJQlVUT1JTIGIvRG9jdW1lbnRzL0NPTlRSSUJVVE9SUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42Zjk5NmZjCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRzL0NPTlRSSUJVVE9SUwpAQCAtMCwwICsxLDk4IEBACitBZGkgRGFzY2FsIDxhZEBiYXVtLnJvPgorQWRpIEt1c2huaXIgPGFkaWt1c2huaXJAZ21haWwuY29tPgorQWxhbiBDb29wZXJzbWl0aCA8YWxhbi5jb29wZXJzbWl0aEBvcmFjbGUuY29tPgorQWxleCBCZXJuaWVyIDxhbGV4LmJlcm5pZXJAZnJlZS5mcj4KK0FuZHJlYXMgR3Jvc3MgPGFuZGlAYW5kaS1iaWthLmRlPgorQW5nZWxhIEVuZ2VsIDxhbmdlbGEuZW5nZWxAZ214LmF0PgorQXJ0aHVyIEJyZXVuZXZhbCA8YXJ0aHVyLmJyZXVuZXZhbEB5YWhvby5mcj4KK0F0dGlsYSBIYW1tZXIgPGhhbW1lcmFAcGlja3VwLmh1PgorQXVndXN0IEjDtnJhbmRsIDxhdWd1c3QuaG9lcmFuZGxAZ214LmF0PgorQXVyYSBLZWxsb25pZW1pIDxrYXVyYS5kZXZAc2FuZ2UuZmk+CitCb3JpcyBEYWl4IDxCb3Jpcy5EYWl4QGluc2EtbHlvbi5mcj4KK0NoZXJ5bCBIb21pYWsgPGNhaDQxMTBAaWNsb3VkLmNvbT4KK0NocmlzIEJyYW5ub24gPGNocmlzQHRoZS1icmFubm9ucy5jb20+CitDaHJpc3RpYW4gQ29tYXNjaGkgPGNocmlzdGlhbl9jb21hc2NoaUBsaWJlcm8uaXQ+CitDaHJpc3RvcGgtU2ltb24gU2VuamFrIDxjaHJpc3RvcGguc2VuamFrQGdvb2dsZW1haWwuY29tPgorQ29zY2VsbCBLYW8gPGNvc2NlbGxAbW9sZXJhdC5uZXQ+CitEYW5pZWwgRGFsdG9uIDxkLmRhbHRvbkBpaW5ldC5uZXQuYXU+CitEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+CitEYXZpZCBTYXVlciA8c2F1ZXJAYnJhaWxjb20uY3o+CitEaWRpZXIgUG9pdG91IDxkLnBvaXRvdUBldXJvYnJhaWxsZS5mcj4KK0RpZXRtYXIgU2VnYmVydCA8ZGlldG1hcnNlZ2JlcnRAZ214LmRlPgorRG9taW5pYyBNYXp6b25pIDxkbWF6em9uaUBnb29nbGUuY29tPgorRW1pbGlvIFBvenVlbG8gTW9uZm9ydCA8ZW1pbGlvLnBvenVlbG9AdW0uZXM+CivDiXRpZW5uZSBDYXJyaWVyIDxldGllbm5lLmNhcnJpZXJAaHVtYW53YXJlLmNvbT4KK0hhbnMgU2Nob3UgPGNobG9yQHNjaG91LmRrPgorSGVsZ2UgSGF2bmVnamVyZGUgPGhlbGdlLmhhdm5lZ2plcmRlQGdldG1haWwubm8+CitIZXJtYW5uIEJlbmRlciA8bWVpbmVsaXN0ZW5Ab25saW5laG9tZS5kZT4KK0phbWVzIFRlaCA8amFtaWVAamFudHJpZC5uZXQ+CitKYW4gQnVjaGFsIDxidWNoYWxAYnJhaWxjb20ub3JnPgorSmFuaSBLaW5udW5lbiA8amFuaS5raW5udW5lbkB3aXBwaWVzLmZpPgorSmFyb3NsYXYgU2thcnZhZGEgPGpza2FydmFkQHJlZGhhdC5jb20+CitKZWFuLVBoaWxpcHBlIE1lbmd1YWwgPGpwbWVuZ3VhbEBkZWJpYW4ub3JnPgorSm9hbm1hcmllIERpZ2dzIDxqZGlnZ3NAaWdhbGlhLmNvbT4KK0pvaG4gSi4gQm95ZXIgPGpvaG4uYm95ZXJAampiLXNvZnR3YXJlLmNvbT4KK0pvemtvIEdyZWdvcmMgPGpvemtvLmdyZWdvcmNAZ3Vlc3QuYXJuZXMuc2k+CitKdWxpYW4gU2Fja21hbm4gPG1hc2Fja21hQG1pY3Jvc29mdC5jb20+CitLYXp1bm9yaSBNaW5hdGFuaSA8OTkxMTIwMDRAZ2FrdXNodWluLmFjLmpwPgorS2VpdGggV2Vzc2VsIDxrZWl0aEB3ZXNzZWwuY29tPgorTGFycyBCasO4cm5kYWwgPGxhcnMuYmpvcm5kYWxAYnJvYWRwYXJrLm5vPgorTGVlIE1hc2NobWV5ZXIgPGxlZW1lcjFAY29tY2FzdC5uZXQ+CitMdWtlIFllbGF2aWNoIDx0aGVtdXNvQHVidW50dS5jb20+CitNYXJpbyBMYW5nIDxtbGFuZ0BkZWx5c2lkLm9yZz4KK01hcmsgTWllbGtlIDxtYXJrQG1pZWxrZS5jYz4KK01hcmtvIExhbGljIDxtYXJrb2xhQG1pY3Jvc29mdC5jb20+CitNYXR0aGV3IE1pbGxlciA8bWF0dGRtQG1hdHRkbS5vcmc+CitNaWNoYWVsIEN1cnJhbiA8bWlja0BrdWxnYW4ubmV0PgorTWljaGVsIFN1Y2ggPG1pY2hlbC5zdWNoQGZyZWUuZnI+CitNaWtlIEdvcnNlIDxtZ29yc2VAYWx1bS53cGkuZWR1PgorTWlrZSBQZWRlcnNlbiA8bXBlZGVyc2VuQG1pbmRzcHJpbmcuY29tPgorTWlyYW5kYSBXb3Vkc3RyYSA8TWlyYW4uV291ZHN0cmFAZ21haWwuY29tPgorTmVhbCBHb21wYSAo44OL44O844Or44O744K044Oz44ORKSA8TkdvbXBhMTNAZ21haWwuY29tPgorTmljb2xhcyBQaXRyZSA8bmljb0BmbHV4bmljLm5ldD4KK05pa2l0YSBUc2V5a292ZXRzIDx0c2Vpa292ZXRzQHJhbWJsZXIucnU+CitPbGFmIEhlcmluZyA8b2xhZkBhZXBmbGUuZGU+CitPbGUgR3VsZGJlcmcgPG9sZUBvbWd3dGYuZGs+CitPbGl2aWVyIEJlcnQgPG9iZXJ0MDFAbWlzdGlncmkub3JnPgorT2xsaWUgTWFsbGFyZCA8bWFsbGFyZEBpbGdlcm9uZS5uZXQ+CitPbmTFmWVqIEx5c29uxJtrIDxPTHlzb25la0BSZWRIYXQuY29tPgorT3NjYXIgRmVybmFuZGV6IDxvZmFAb25jZS5lcz4KK1BldGUgRGUgVmFzdG8gPHBkZXZhc3RvQGluY3l0ZS5jb20+CitQZXRlciBMdW5kYmxhZCA8cGx1bmRibGFkQGdvb2dsZS5jb20+CitQZXRyIMWYZWjDoWsgPHJlaGFrQGFkYXB0ZWNoLmN6PgorUmFvdWwgTWVnZWxhcyA8cm1nbHNAZnJlZS5mcj4KK1JlZ2lhbmUgTWVuZG9uw6dhIFZpbGxlbGEgPHJlZ2lhbmV2aWxsZWxhQGdtYWlsLmNvbT4KK1JpY2ggQnVycmlkZ2UgPFJpY2guQnVycmlkZ2VAU3VuLkNPTT4KK1JpbWFzIEt1ZGVsaXMgPHJxQGFrbC5sdD4KK1JvYmVydCBQw7ZzZWwgPHJvYnllckBzZXpuYW0uY3o+CitSdWRvbGYgV2VlYmVyIDxSdWRvbGYuV2VlYmVyQGdteC5kZT4KK1NhbXVlbCBUaGliYXVsdCA8c2FtdWVsLnRoaWJhdWx0QGVucy1seW9uLm9yZz4KK1NhbXVlbCBZYW5nIDxtaXNvbkBiYnMuZWUubnR1LmVkdS50dz4KK1NlYmFzdGlhbm8gUGlzdG9yZSA8U2ViYXN0aWFub1Bpc3RvcmUuaW5mb0Bwcm90b25tYWlsLmNoPgorU8OpYmFzdGllbiBIaW5kZXJlciA8c2ViYXN0aWVuLmhpbmRlcmVyQGVucy1seW9uLm9yZz4KK1NlYmFzdGlhbiBLcmFobWVyIDxrcmFobWVyQHN1c2UuY29tPgorU8OpcmdpbyBOZXZlcyA8c2VyZ2lvbmV2ZXNzQGdtYWlsLmNvbT4KK1NpbW9uIEthaW56IDxzaW1vbkBmYW1pbGlla2FpbnouYXQ+CitTaW1vbiBNZWVycyA8ZHJtZWVyc0BnbWFpbC5jb20+CitTdGVwYW4gS2FzYWwgPGthc2FsQHVjdy5jej4KK1N0ZWZhbiBNb2lzZWkgPHZvcnRleDM3QGdtYWlsLmNvbT4KK1N0ZXBoYW5lIERhbHRvbiA8c2RhbHRvbkB2aWRlb3Ryb24uY2E+CitTdMOpcGhhbmUgRG95b24gPHMuZG95b25AdmlkZW90cm9uLmNhPgorVGFwaW8gS2VsbG9uaWVtaSA8dGFwaW8ua2VsbG9uaWVtaUB0aGFjay5vcmc+CitUaHUgVHJhbmcgPHBoYW10cmFuZzIwMDJAc29mdGhvbWUubmV0PgorVGltb3RoeSBTcGF1bGRpbmcgPHNwYXVsZGluZ0BpY2FuYnJldy5jb20+CitUaW1vIE1hdHNpbmVuIDxtYXRzaW5lbkBqeXUuZmk+CitUb20gc3BvdCBDYWxsYXdheSA8dGNhbGxhd2FAcmVkaGF0LmNvbT4KK1RvbcOhxaEgSmFub3XFoWVrIDx0b21pQG5vbWkuY3o+CitUb21hcyBNw6VyZHNqw7YgPHRvbWFzLm1hcmRzam9AaWNhcC5udT4KK1RvbW95dWtpIEt1ZG91IDxrdWRvdUBjeXBhYy5jby5qcD4KK1RvbnkgSGVybmFuZGV6IDx0b255aHNwZWFrc0BnbWFpbC5jb20+CitVbGYgQmVja21hbm4gPGJlY2ttYW5uQGZsdXNvZnQuZGU+CitWaWN0b3IgTW9udGFsdmFvIDx2aWNtb250QG1pY3Jvc29mdC5jb20+CitWaWN0b3IgVHNhcmFuIDx2dHNhcmFuQHlhaG9vLmNvbT4KK1ZpcHVsIEt1dGUgPHZpcHVsLmt1dGVAZ21haWwuY29tPgorV2lsbGkgTHV0emVuYmVyZ2VyIDx3aWxsdXR6QGdteC5uZXQ+CitXaWxsaWFtIEh1YmJzIDx3LmQuaHViYnNAZ21haWwuY29tPgorV29sZmdhbmcgQXN0bGVpdG5lciA8d29sZmdhbmcuYXN0bGVpdG5lckBsaXdlc3QuYXQ+CitZYWlyIEsuIDxjYWVzaXVtQGhvdHBvcC5jb20+CitZYW5uaWNrIFBsYXNzaWFyZCA8eWFuQG1pc3RpZ3JpLm9yZz4KZGlmZiAtLWdpdCBhL0RvY3VtZW50cy9DaGFuZ2VMb2cgYi9Eb2N1bWVudHMvQ2hhbmdlTG9nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFkZmE4YzYKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudHMvQ2hhbmdlTG9nCkBAIC0wLDAgKzEsMzg3NCBAQAorTm90ZTogdGhpcyBmaWxlIGlzIGluIHJldmVyc2VkIGNocm9ub2xvZ2ljYWwgb3JkZXIgKGJvdHRvbSB0byB0b3ApLgorCisKK0p1bHkgMjIsIDIwMjM6CisgLSBCUkxUVFkgNi42IHJlbGVhc2VkOgorICAgR2VuZXJhbCBjaGFuZ2VzOgorICAgICAgVGhlIC1IICh1cHBlcmNhc2UpIG9wdGlvbiBhbmQgdGhlIGNvbmNlcHQgb2YgaGlkZGVuIG9wdGlvbnMgaGF2ZSBiZWVuIHJlbW92ZWQuCisgICAgICBGb3IgY29uc2lzdGVuY3kgKHdpdGggLUEsIC1CLCAtUywgLVgpLCB0aGUgLXogYW5kIC1aIHNob3J0IG9wdGlvbnMgaGF2ZSBiZWVuIHN3YXBwZWQ6CisJIC16IGlzIG5vdyAtLXN0YXktcHJpdmlsZWdlZAorCSAtWiBpcyBub3cgLS1wcml2aWxlZ2UtcGFyYW1ldGVycworICAgICAgTXVsdGktbGluZSBjb250cmFjdGVkIGJyYWlsbGUgaXMgbm93IHN1cHBvcnRlZC4KKyAgICAgIFRoZSBjdXJzb3Igc3R5bGUgY2FuIG5vdyBiZSBzZXQgdG8gbm8gZG90cy4KKyAgICAgIEEgcmVjdGFuZ3VsYXIgYXBwZW5kIHRvIHRoZSBjbGlwYm9hcmQgbm93IGVuc3VyZXMgYSBsZWFkaW5nIG5ld2xpbmUuCisgICAgICBSRUFETUUuQ29tbWFuZFJlZmVyZW5jZSBoYXMgYmVlbiBhZGRlZC4KKyAgIFNwZWVjaCBjaGFuZ2VzOgorICAgICAgU3BlZWNoIGNhbiBub3cgYmUgaW50ZXJydXB0ZWQgd2hlbiB3cml0aW5nIG5ldyB0ZXh0IHRvIHRoZSBpbnB1dCBGSUZPLgorICAgICAgQXV0b3NwZWFrIG5vdyBwcm92aWRlcyBjb3JyZWN0IGNoYXJhY3RlciBoaWdobGlnaHRpbmcgdG8gdGhlIHNwZWVjaCBkcml2ZXIuCisgICAgICBBIHdvcmQgaXMgbm93IGEgd2hpdGVzcGFjZS1kZWxpbWl0ZWQgKHJhdGhlciB0aGFuIGFuIGFscGhhbnVtZXJpYykgc2VxdWVuY2Ugb2YgY2hhcmFjdGVycy4KKyAgICAgIFdvcmQgY29tcGxldGlvbiBmb3Igc2luZ2xlLWNoYXJhY3RlciB3b3JkcyBub3cgd29ya3MgY29ycmVjdGx5LgorICAgICAgVGhlIFJPVVRFX1NQRUVDSCBjb21tYW5kIChnbyB0byB0aGUgc3BlZWNoIGN1cnNvcikgaGFzIGJlZW4gYWRkZWQuCisgICAgICBUaGUgREVTQ19DVVJSX0NIQVIgY29tbWFuZCBub3cgc3BlYWtzIHBob25ldGljYWxseS4KKyAgIFByZWZlcmVuY2VzIE1lbnUgY2hhbmdlczoKKyAgICAgIFRoZSBQUkVGUkVTRVQgY29tbWFuZCBoYXMgYmVlbiBhZGRlZC4KKyAgICAgIFNwYWNlICsgcCArIERvdHMgNy04IGlzIGJvdW5kIHRvIHRoZSBuZXcgUFJFRlJFU0VUIGNvbW1hbmQuCisgICAgICBJZiB0aGUgcHJlZmVyZW5jZXMgZmlsZSBjYW4ndCBiZSBmb3VuZCB0aGVuIHRyeSBsb2FkaW5nIC9ldGMvYnJsdHR5L2RlZmF1bHQucHJlZnMuCisgICAgICBTYXZlIG9uIEV4aXQgbm93IGFsc28gc2F2ZXMgdGhlIHByZWZlcmVuY2VzIG9uIHByb2dyYW0gdGVybWluYXRpb24uCisgICAgICBUaGUgU3BlYWsgS2V5IENvbnRleHQgcHJlZmVyZW5jZSBoYXMgYmVlbiBhZGRlZC4KKyAgICAgIFRoZSBTcGVhayBNb2RpZmllciBLZXkgcHJlZmVyZW5jZSBoYXMgYmVlbiBhZGRlZC4KKyAgIEJhdW0gYnJhaWxsZSBkcml2ZXIgY2hhbmdlczoKKyAgICAgIE1vcmUgcmVjZW50IE9yYml0IFJlYWRlciBtb2RlbHMgaGF2ZSByb3V0aW5nIGtleXMuCisgICBCcmxBUEkgYnJhaWxsZSBkcml2ZXIgY2hhbmdlczoKKyAgICAgIFRoZSBzcGVlY2hDaGFuZ2VzIChubywgeWVzKSBwYXJhbWV0ZXIgaGFzIGJlZW4gYWRkZWQuCisgICBDb21iaUJyYWlsbGUgYnJhaWxsZSBkcml2ZXIgY2hhbmdlczoKKyAgICAgIFVwZ3JhZGVkIHRvIHVzZSBnZW5lcmljIChyYXRoZXIgdGhhbiBkaXJlY3Qgc2VyaWFsKSBJL08uCisgICAgICBUaGUgcm91dGluZyBrZXlzIGFyZSBub3cgc3VwcG9ydGVkLgorICAgRG90UGFkIGJyYWlsbGUgZHJpdmVyOgorICAgICAgTmV3IC0gaXRzIHR3by1sZXR0ZXIgZHJpdmVyIGNvZGUgaXMgZHAuCisgICAgICBBIG11bHRpLWxpbmUgdGV4dCBkaXNwbGF5IGlzIHN1cHBvcnRlZCB3aXRoaW4gaXRzIGdyYXBoaWMgYXJlYS4KKyAgIEZyZWVkb20gU2NpZW50aWZpYyBicmFpbGxlIGRyaXZlciBjaGFuZ2VzOgorICAgICAgTWlub3IgRm9jdXMga2V5IGJpbmRpbmcgY2hhbmdlczoKKwkgTGVmdFNoaWZ0ICsgUm91dGluZ0tleSAtPiBTRVRMRUZUCisJIFJpZ2h0U2hpZnQgKyBSb3V0aW5nS2V5IC0+IFNXSVRDSFZUCisJIExlZnRTZWxlY3RvciArIE5hdnJvd0tleSAtPiBQUkRJRkNIQVIKKwkgUmlnaHRTZWxlY3RvciArIE5hdnJvd0tleSAtPiBOWERJRkNIQVIKKyAgIEhhbmR5VGVjaCBicmFpbGxlIGRyaXZlciBjaGFuZ2VzOgorICAgICAgQmx1ZXRvb3RoIHNlcnZpY2UgZGlzY292ZXJ5IG5vdyBuZWVkcyB0byBiZSBwZXJmb3JtZWQgKGZvciBuZXdlciBtb2RlbHMpLgorICAgRXh0ZXJuYWwgU3BlZWNoIHNwZWVjaCBkcml2ZXIgY2hhbmdlczoKKyAgICAgIFRoZSB2b2x1bWUgYW5kIHBpdGNoIGNhbiBub3cgYmUgc2V0LgorICAgICAgTm93IGRpc2Nvbm5lY3RzIGZyb20gdGhlIHNlcnZlciB3aGVuIGEgd3JpdGUgZXJyb3Igb3IgdGltZW91dCBvY2N1cnMuCisgICAgICBOb3cgdHJpZXMgdG8gcmVjb25uZWN0IHRvIHRoZSBzZXJ2ZXIgaWYgZGlzY29ubmVjdGVkLgorICAgICAgTm93IGNvcnJlY3RseSBoYW5kbGVzIHRoZSByZWNlaXB0IG9mIHRyYWNraW5nIGRhdGEuCisgICBBdFNwaTIgc2NyZWVuIGRyaXZlciBjaGFuZ2VzOgorICAgICAgQSBwb3RlbnRpYWwgY3Jhc2ggb24gcmVjZWlwdCBvZiBhIGN1cnNvciByb3V0aW5nIHJlcXVlc3QgaGFzIGJlZW4gcmVzb2x2ZWQuCisgICBGaWxlIFZpZXdlciBzY3JlZW4gZHJpdmVyOgorICAgICAgTmV3LiBJdHMgdHdvLWxldHRlciBkcml2ZXIgY29kZSBpcyBmdi4KKyAgICAgIEEgdmlydHVhbCBzY3JlZW4gcHJlc2VudHMgdGhlIHNwZWNpZmllZCBmaWxlICh2aWEgaXRzIGZpbGUgcGFyYW1ldGVyKS4KKyAgICAgIFRoZSBoZWlnaHQgb2YgdGhlIHNjcmVlbiBpcyB0aGUgbnVtYmVyIG9mIGxpbmVzIHdpdGhpbiB0aGUgZmlsZS4KKyAgICAgIFRoZSB3aWR0aCBvZiB0aGUgc2NyZWVuIGlzIHRoZSBsZW5ndGggb2YgdGhlIGZpbGUncyBsb25nZXN0IGxpbmUuCisgICBMaW51eCBzY3JlZW4gZHJpdmVyIGNoYW5nZXM6CisgICAgICBBIG1lc3NhZ2UgaXMgc2hvd24gb24gdGhlIGJyYWlsbGUgZGlzcGxheSBpZiBjaGFyYWN0ZXIgaW5qZWN0aW9uIChUSU9DU1RJKSBpcyBkaXNhYmxlZC4KKyAgIFRlcm1pbmFsIEVtdWxhdG9yIHNjcmVlbiBkcml2ZXI6CisgICAgICBOZXcuIEl0cyB0d28tbGV0dGVyIGRyaXZlciBjb2RlIGlzIGVtLgorICAgICAgSXQgbW9uaXRvcnMgYSBzaGFyZWQgbWVtb3J5IHNlZ21lbnQgbWFpbnRhaW5lZCBieSBhIHRlcm1pbmFsIGVtdWxhdG9yCisgICAgICBmb3Igc2NyZWVuIGNvbnRlbnQgYW5kIHNpemUsIGN1cnNvciBwb3NpdGlvbiwgZXRjLgorICAgICAgSXQgdXNlcyBhIG1lc3NhZ2UgcXVldWUgdG8ga25vdyB3aGVuIHRoZSBzZWdtZW50IGhhcyBiZWVuIHVwZGF0ZWQKKyAgICAgIGFuZCB0byBzZW5kIGlucHV0IHR5cGVkIG9uIHRoZSBicmFpbGxlIGRldmljZSB0byB0aGUgdGVybWluYWwgZW11bGF0b3IuCisgICAgICBCUkxUVFkncyBwcm92aWRlZCB0ZXJtaW5hbCBlbXVsYXRvciBpcyB0aGUgbmV3IGJybHR0eS1wdHkgY29tbWFuZCAoaW4gbGliZXhlYy9icmx0dHkvKS4KKyAgICAgIFRoZSBuZXcgYnJsdHR5LXRlcm0gY29tbWFuZCBydW5zIGEgc2hlbGwgb3IgdGVybWluYWwgbWFuYWdlciB2aWEgYnJsdHR5LXB0eSwKKyAgICAgIGFuZCBhbHNvIHJ1bnMgQlJMVFRZIHdpdGggaXRzIFRlcm1pbmFsIEVtdWxhdG9yIHNjcmVlbiBkcml2ZXIgdG8gaW50ZXJhY3Qgd2l0aCBpdC4KKyAgIEJybEFQSSBjaGFuZ2VzOgorICAgICAgVGhlIHZlcnNpb24gaXMgbm93IDAuOC41IChpdCB3YXMgMC44LjQpLgorICAgICAgRnV6emluZyBzdXBwb3J0IGhhcyBiZWVuIGFkZGVkIHRvIHRoZSBzZXJ2ZXIgKHNlZSBSRUFETUUuQVBJRnV6emluZykuCisgICAgICBWYXJpb3VzIGZ1enplci1kZXRlY3RlZCBpc3N1ZXMgaGF2ZSBiZWVuIHJlc29sdmVkLgorICAgQ29udHJhY3Rpb24gdGFibGVzOgorICAgICAgVGhlIGVuLXVlYi1nMSAoRW5nbGlzaCwgVW5pZmllZCwgR3JhZGUgMSkgY29udHJhY3Rpb24gdGFibGUgaGFzIGJlZW4gYWRkZWQuCisgICBLZXkgdGFibGVzOgorICAgICAgQSBwb3NzaWJsZSBzdGFjayBvdmVyZmxvdyBkdXJpbmcgdGFibGUgY29tcGlsYXRpb24gaGFzIGJlZW4gcmVzb2x2ZWQuCisgICAgICBUaGUgcnVuIGRpcmVjdGl2ZSBoYXMgYmVlbiBhZGRlZC4KKyAgICAgIFRoZSBtYWNybyBkaXJlY3RpdmUgaGFzIGJlZW4gYWRkZWQuCisgICAgICBUaGUgaXNvbGF0ZWQgZGlyZWN0aXZlIGhhcyBiZWVuIGFkZGVkLgorICAgICAgVGhlIGt0YmNoZWNrIHRvb2wgaGFzIGJlZW4gYWRkZWQuCisgICBXaW5kb3dzIGNoYW5nZXM6CisgICAgICBUaGUgYmF0Y2ggc2NyaXB0cyBoYXZlIGJlZW4gaW1wcm92ZWQuCisgICAgICBUaGUgdGFza3MtYnJsdHR5LmJhdCBzY3JpcHQgaGFzIGJlZW4gYWRkZWQuCisgICAgICBUaGUgcmVncXVlcnktYnJsYXBpLmJhdCBzY3JpcHQgaGFzIGJlZW4gYWRkZWQuCisgICAgICBUaGUgYnVpbGQgbm93IGluY2x1ZGVzIHRoZSBEZWJ1Z1wgZGlyZWN0b3J5LCB3aGljaCBjb250YWluczoKKyAgICAgICAgIFRoZSBidWlsZCdzIGNvbmZpZy5oLCBjb25maWcubWssIGFuZCBjb25maWcubG9nIGZpbGVzLgorICAgICAgICAgVW5zdHJpcHBlZCBleGVjdXRhYmxlcyAoLmV4ZSkgYW5kIGxpYnJhcmllcyAoLmRsbCkuCisKK0p1bmUgOSwgMjAyMjoKKyAtIEJSTFRUWSA2LjUgcmVsZWFzZWQ6CisgICBHZW5lcmFsIGNoYW5nZXM6CisgICAgICBIZWxwICgtaCkgb3V0cHV0IGxpbmVzIGFyZSBub3cgd3JhcHBlZCBhdCB0aGUgc2NyZWVuIHdpZHRoIChub3QgYXQgNzkpLgorICAgICAgUGFyYW1ldGVyIGVycm9ycyBubyBsb25nZXIgcHJldmVudCBhIGRyaXZlciBmcm9tIHN0YXJ0aW5nLgorICAgICAgV29yZCBXcmFwIHdoZW4gdXNpbmcgY29udHJhY3RlZCBicmFpbGxlIGhhcyBiZWVuIGZpeGVkLgorICAgICAgVGhlIFF1aWV0IHNldHRpbmcgY2FuIG5vdyBiZSBzcGVjaWZpZWQgd2l0aGluIGJybHR0eS5jb25mLgorICAgICAgSW4gZGF0YSBmaWxlcywgXFIgbm93IHJlcHJlc2VudHMgdGhlIFVuaWNvZGUgcmVwbGFjZW1lbnQgY2hhcmFjdGVyLgorICAgICAgQ2hvcmQtNi84IG5vdyB0b2dnbGUgYmV0d2VlbiA2LSBhbmQgOC1kb3QgY29tcHV0ZXIgYnJhaWxsZS4KKyAgICAgIEJpbmRpbmdzIGZvciB0aGUgRW1hY3MgZWRpdG9yIGhhdmUgYmVlbiBhZGRlZC4KKyAgICAgIEJpbmRpbmdzIGZvciB0aGUgTHVhIGxhbmd1YWdlIGhhdmUgYmVlbiBhZGRlZC4KKyAgICAgIEFuIEFyYWJpYyBtZXNzYWdlIGNhdGFsb2cgaGFzIGJlZW4gYWRkZWQuCisgICBMb2dnaW5nIGNoYW5nZXM6CisgICAgICBUaGUgaW5naW8gbG9nIGNhdGVnb3J5IGhhcyBiZWVuIHJlbmFtZWQgdG8gZ2lvLgorICAgICAgVGhlIGJsdWV0b290aCBsb2cgY2F0ZWdvcnkgaGFzIGJlZW4gcmVuYW1lZCB0byBidC4KKyAgICAgIFRoZSBoaWQgbG9nIGNhdGVnb3J5IGhhcyBiZWVuIGFkZGVkLgorICAgQmF1bSBicmFpbGxlIGRyaXZlciBjaGFuZ2VzOgorICAgICAgVGhlIE9yYml0IFJlYWRlciA0MCBpcyBub3cgc3VwcG9ydGVkLgorICAgQ2FudXRlIGJyYWlsbGUgZHJpdmVyIGNoYW5nZXM6CisgICAgICBEcml2ZXIgc3RhcnR1cCBpcyBub3cgbXVjaCBmYXN0ZXIuCisgICAgICBMaW5lcyB0aGF0IGhhdmVuJ3QgZWZmZWN0aXZlbHkgY2hhbmdlZCBhcmUgbm8gbG9uZ2VyIHJld3JpdHRlbi4KKyAgIEh1bWFuV2FyZSBicmFpbGxlIGRyaXZlciBjaGFuZ2VzOgorICAgICAgQW4gZWFzeSB3YXkgdG8gcmV2ZXJ0IHRvIHRoZSBsZWdhY3kgdGh1bWIga2V5IGJpbmRpbmdzIGhhcyBiZWVuIGFkZGVkLgorICAgICAgVGhlIG5ld2VyIG1vZGVscyBjYW4gbm93IGJlIHVzZWQgdmlhIEJsdWV0b290aCBvbiBMaW51eC4KKyAgIExpbnV4IHNjcmVlbiBkcml2ZXIgY2hhbmdlczoKKyAgICAgIFRoZSBXaWRlY2hhclBhZGRpbmc9IHBhcmFtZXRlciBoYXMgYmVlbiBhZGRlZC4KKyAgICAgIFRoZSBGaXhVbmljb2RlU3BhY2VzPSBwYXJhbWV0ZXIgaGFzIGJlZW4gcmVuYW1lZCB0byBScGlTcGFjZXNCdWc9LgorICAgQXRTcGkyIHNjcmVlbiBkcml2ZXIgY2hhbmdlczoKKyAgICAgIENvbnRyb2wgY2hhcmFjdGVycyBhcmUgbm93IG1hcHBlZCB0byB0aGVpciBjb3JyZXNwb25kaW5nIHNwZWNpYWwga2V5cy4KKyAgICAgIEJybHR0eSBpcyBub3cgc2h1dCBkb3duIGlmIHRoZSBkcml2ZXIgZmFpbHMgdG8gc3RhcnQuCisgICAgICBUaGUgZHJpdmVyIG5vIGxvbmdlciBjcmFzaGVzIHdoZW4gdGhlIFggc2VydmVyIGlzIHNodXQgZG93bi4KKyAgIEJybEFQSSBjaGFuZ2VzOgorICAgICAgVGhlIHZlcnNpb24gaXMgbm93IDAuOC40IChpdCB3YXMgMC44LjMpLgorICAgICAgVGhlIHBlcm1pc3Npb25zIG9uIGxvY2FsIHNlcnZlciBzb2NrZXRzIGFyZSBub3cgc2V0IGNvcnJlY3RseS4KKyAgICAgIFRoZSBjdXJzb3IgaXMgbm93IHJlcHJlc2VudGVkIGNvcnJlY3RseSB3aGVuIHVzaW5nIHNpeC1kb3QgY2VsbHMuCisgICAgICBTb21lIGxvY2tpbmcgaXNzdWVzIGhhdmUgYmVlbiByZXNvbHZlZC4KKyAgICAgIEEgdGV4dCBjb25zb2xlIGNhbiBub3cgY3JlYXRlIGl0cyBvd24gY2xpZW50IHNlc3Npb24uCisgICBUZXh0IHRhYmxlIGNoYW5nZXM6CisgICAgICBUaGUgUnVzc2lhbiAocnUpIHRhYmxlIGhhcyBiZWVuIHNpZ25pZmljYW50bHkgdXBkYXRlZC4KKyAgICAgIFRoZSBBcmFiaWMgKGFyKSB0YWJsZSBoYXMgYmVlbiBzaWduaWZpY2FudGx5IHVwZGF0ZWQuCisgICAgICBUeXBpbmcgd2hlbiB1c2luZyB0aGUgQXJhYmljIChhcikgdGFibGUgbm93IHlpZWxkcyBBcmFiaWMgKG5vdCBFbmdsaXNoKSBsZXR0ZXJzLgorICAgICAgVGhlIGlucHV0IGRpcmVjdGl2ZSBoYXMgYmVlbiBhZGRlZC4KKyAgIEtleSB0YWJsZSBjaGFuZ2VzOgorICAgICAgVGhlICtlc2NhcGVkIGNoYXJhY3RlciBtb2RpZmllciBoYXMgYmVlbiBhZGRlZC4KKyAgIFVkZXYgY2hhbmdlczoKKyAgICAgIFRoZSBydWxlcyBmb3IgY3VzdG9taXplZCBhbmQgZ2VuZXJpYyBkZXZpY2VzIGNhbiBub3cgYmUgaW5zdGFsbGVkIHNlcGFyYXRlbHkuCisgICAgICBUaGUgZGV2aWNlIGFuZCB1aW5wdXQgcnVsZXMgY2FuIG5vdyBiZSBpbnN0YWxsZWQgc2VwYXJhdGVseS4KKyAgICAgIEZpbHRlcmluZyBpcyBub3cgYWxzbyBkb25lIG9uIHRoZSBtYW51ZmFjdHVyZXIgYW5kIHByb2R1Y3Qgc3RyaW5ncy4KKyAgICAgIEZpbHRlcmluZyBvbiBhIHBhcmVudCBodWIncyB2ZW5kb3IvcHJvZHVjdCBpZGVudGlmaWVycyBpcyBub3cgc3VwcG9ydGVkLgorICAgICAgQSBISUQgcnVsZXMgZmlsZSBoYXMgYmVlbiBhZGRlZC4KKyAgICAgIFN5bWxpbmtzIGZvciBVU0ItY29ubmVjdGVkIGRldmljZXMgYXJlIG5vdyBpbiAvZGV2L2JybHR0eS8uCisgICBMaW51eCBjaGFuZ2VzOgorICAgICAgQmx1ZXRvb3RoIEhJRCBpcyBub3cgc3VwcG9ydGVkLgorICAgV2luZG93cyBjaGFuZ2VzOgorICAgICAgQnJsdHR5IG5vIGxvbmdlciBjcmFzaGVzIHdoZW4gc3RhcnRlZCBhcyBhIHNlcnZpY2UuCisgICBBbmRyb2lkIGNoYW5nZXM6CisgICAgICBOb3cgdGFyZ2V0aW5nIEFQSSBsZXZlbCAzMCBhbmQgc2V0dGluZyBpc0FjY2Vzc2liaWxpdHlUb29sLgorICAgICAgVGhlIEFjdGlvbnMgc2NyZWVuIG5vdyBzY3JvbGxzIHZlcnRpY2FsbHkuCisgICAgICBTZXR0aW5ncyAtPiBBY2Nlc3NpYmlsaXR5IC0+IEJSTFRUWSAtPiBTZXR0aW5ncyBub3cgZ29lcyB0byB0aGUgQWN0aW9ucyBzY3JlZW4uCisgICAgICBBcmFiaWMgc3RyaW5nIHRyYW5zbGF0aW9ucyBoYXZlIGJlZW4gYWRkZWQuCisgICBUb29sIGNoYW5nZXM6CisgICAgICBicmx0dHktY2xpcCBub3cgaGFzIGJldHRlciBsb25nIG9wdGlvbnMuCisgICAgICBicmx0dHktaGlkIGhhcyBiZWVuIGFkZGVkLgorICAgICAgYnJsdHR5LXR0eXNpemUgaGFzIGJlZW4gYWRkZWQuCisgICAgICB4YnJsYXBpIG5vdyBpZ25vcmVzIGtleWJvYXJkIHJlbWFwcGluZyBlcnJvcnMgZnJvbSB0aGUgWCBzZXJ2ZXIuCisgICBCdWlsZCBjaGFuZ2VzOgorICAgICAgVGhlIExELCBTVFJJUCwgYW5kIFJBTkxJQiBjb21tYW5kcyBhcmUgbm8gbG9uZ2VyIGhhcmQtY29kZWQuCisKK1NlcHRlbWJlciAyNCwgMjAyMToKKyAtIEJSTFRUWSA2LjQgcmVsZWFzZWQ6CisgICBHZW5lcmFsIGNoYW5nZXM6CisgICAgICBEeW5hbWljYWxseSBjaGFuZ2luZyB0aGUgdGV4dCB0YWJsZSB0byBhdXRvIG5vdyB3b3Jrcy4KKyAgICAgIFRoZSBrZXlib2FyZCB0YWJsZSBjYW4gbm93IGJlIGV4cGxpY2l0bHkgc2V0IHRvIG9mZi4KKyAgICAgIFZlcnRpY2FsIHNjcm9sbGluZyBmb3IgbXVsdGktbGluZSBkaXNwbGF5cyBoYXMgYmVlbiBpbXByb3ZlZC4KKyAgICAgIFRyYWlsaW5nIHdoaXRlc3BhY2UgKGV4Y2VwdCBmb3IgdGhlIGZpcnN0IG9uZSkgaXMgbm93IHRyaW1tZWQgd2hlbiBwYXN0aW5nLgorICAgICAgVGhlIGludGVybmF0aW9uYWxpemF0aW9uIG9mIGRhdGUgcGhyYXNlcyBoYXMgYmVlbiBpbXByb3ZlZC4KKyAgICAgIEVtb2ppIHVzaW5nIGNoYXJhY3RlcnMgbGlrZSB0aGUgaGFzaCAoIykgb3IgYXN0ZXJpc2sgKCopIGFyZSBub3cgaWdub3JlZC4KKyAgIFNsaWRpbmcgYnJhaWxsZSB3aW5kb3cgY2hhbmdlczoKKyAgICAgIEN1cnNvciB0cmFja2luZyBhbHdheXMgbW92ZXMgdGhlIHdpbmRvdyBhbGwgdGhlIHdheSB0byB0aGUgbGVmdAorICAgICAgaWYgdGhlIHdob2xlIGxpbmUgaXMgc2hvcnQgZW5vdWdoIHRvIGZpdCBvbiBpdC4KKyAgICAgIFNsaWRpbmcgdGhlIHdpbmRvdyB0cmlnZ2VycyB3aGVuIHRoZSBzY3JlZW4gY3Vyc29yIG1vdmVzIHRvCisgICAgICAocmF0aGVyIHRoYW4gYmV5b25kKSB0aGUgZmlyc3QvbGFzdCBjZWxsIG9mIHRoZSB0ZXh0IHBvcnRpb24gb2YgdGhlIGRpc3BsYXkuCisgICBDb250cmFjdGVkIGJyYWlsbGUgY2hhbmdlczoKKyAgICAgIENvbnRyYWN0aW9uIHRhYmxlIHN1cHBvcnQgY2FuIG5vIGxvbmdlciBiZSBleGNsdWRlZC4KKyAgICAgIEFuIGludGVybmFsIGNvbnRyYWN0aW9uIHRhYmxlIGNhbiBub3cgYmUgY29uZmlndXJlZC4KKyAgICAgIENvbnRyYWN0ZWQgYnJhaWxsZSBpcyBhdXRvbWF0aWNhbGx5IGVuYWJsZWQgb24gc3RhcnR1cCBpZjoKKyAgICAgICAgIFRoZSBjb250cmFjdGlvbiB0YWJsZSBoYXMgYmVlbiBlaXRoZXIgc3BlY2lmaWVkIG9yIGF1dG9tYXRpY2FsbHkgc2VsZWN0ZWQuCisgICAgICAgICBUaGUgdGV4dCB0YWJsZSBoYXNuJ3QgYmVlbiBlaXRoZXIgc3BlY2lmaWVkIG9yIGF1dG9tYXRpY2FsbHkgc2VsZWN0ZWQuCisgICAgICBDdXJzb3IgdHJhY2tpbmcgaGFzIGJlZW4gaW1wcm92ZWQuCisgICAgICBQYW5uaW5nIGxlZnQgd2hlbiB0aGVyZSBhcmUgd2lkZSBjaGFyYWN0ZXJzIGhhcyBiZWVuIGZpeGVkLgorICAgICAgQSBidWZmZXIgb3ZlcnJ1biB0aGF0IG9jY2FzaW9uYWxseSBjYXVzZWQgYSBjcmFzaCBoYXMgYmVlbiBmaXhlZC4KKyAgIFByZWZlcmVuY2VzIG1lbnUgY2hhbmdlczoKKyAgICAgIFRoZSBhdXRvc3BlYWsgc2V0dGluZ3MgaGF2ZSBiZWVuIG1vdmVkIGludG8gdGhlaXIgb3duIHN1Ym1lbnUuCisgICAgICBDb250cmFjdGVkIEJyYWlsbGUgYW5kIDYtZG90IENvbXB1dGVyIEJyYWlsbGUgYXJlIG5vdyBjb25maWd1cmVkIHNlcGFyYXRlbHkuCisgICAgICBCbGlua2luZyBwcm9wZXJ0aWVzIGFyZSBub3cgY29uZmlndXJlZCBieSBwZXJpb2QgYW5kIHBlcmNlbnQgdmlzaWJsZQorICAgICAgcmF0aGVyIHRoYW4gYnkgdmlzaWJsZSBhbmQgaW52aXNpYmxlIHRpbWVzLgorICAgICAgVGhlIFNwYWNlIHN0YXR1cyBmaWVsZCB0eXBlIGhhcyBiZWVuIGFkZGVkLgorICAgICAgVGhyZWUtZGlnaXQgc3RhdHVzIGZpZWxkIHR5cGVzIGhhdmUgYmVlbiBhZGRlZC4KKyAgIE5ldyBuYXZpZ2F0aW9uIGNvbW1hbmRzOgorICAgICAgU0FZX0FMTDogU3BlYWsgdGhlIGVudGlyZSBzY3JlZW4gKFNBWV9BQk9WRSArIFNBWV9CRUxPVykuCisgICAgICBMT1dFUiBhbmQgSElHSEVSOiBBZGp1c3QgdGhlIHNwZWVjaCBwaXRjaC4KKyAgICAgIENPTlRSQUNURUQ6IFRvZ2dsZSBiZXR3ZWVuIGNvbnRyYWN0ZWQgKG9uKSBhbmQgY29tcHV0ZXIgKG9mZikgYnJhaWxsZS4KKyAgICAgIENPTVBCUkw2OiBUb2dnbGUgYmV0d2VlbiBzaXgtIGFuZCBlaWdodC1kb3QgY29tcHV0ZXIgYnJhaWxsZS4KKyAgICAgIENob3JkLUcgKFNwYWNlICsgZG90cyAxMjQ1KSBpcyBib3VuZCB0byB0aGUgQ09OVFJBQ1RFRCB0b2dnbGUuCisgICBTdGF0dXMgc3VtbWFyeSAoaW5mbyBsaW5lKSBjaGFuZ2VzOgorICAgICAgSW5kaWNhdG9yIGNoYXJhY3RlciBjaGFuZ2VzOgorICAgICAgICAgYzogVGhlIHNjcmVlbiBjdXJzb3IgaXMgYmVpbmcgcmVuZGVyZWQuCisgICAgICAgICBzOiBUaGUgc3BlZWNoIGN1cnNvciBpcyBiZWluZyByZW5kZXJlZC4KKyAgICAgICAgIHQ6IEN1cnNvciB0cmFja2luZyBpcyBvbi4KKyAgICAgICAgIHU6IFRoZSBhdHRyaWJ1dGVzIHVuZGVybGluZSBpcyBiZWluZyByZW5kZXJlZC4KKwkgQnJhaWxsZSBkaXNwbGF5IGNvbnRlbnQ6CisJICAgIDY6IHNpeC1kb3QgY29tcHV0ZXIgYnJhaWxsZQorCSAgICA4OiBlaWdodC1kb3QgY29tcHV0ZXIgYnJhaWxsZQorCSAgICBjOiBjb250cmFjdGVkIGJyYWlsbGUKKwkgICAgYTogY2hhcmFjdGVyIGF0dHJpYnV0ZXMKKwkgQnJhaWxsZSBrZXlib2FyZCBtb2RlOgorCSAgICBzcGFjZTogdHlwaW5nIGluIHRleHQgbW9kZQorCSAgICBiOiB0eXBpbmcgaW4gVW5pY29kZSBicmFpbGxlIHBhdHRlcm5zIG1vZGUKKwkgICAgZDoga2V5Ym9hcmQgaXMgZGlzYWJsZWQKKyAgICAgIERvdCBpbmRpY2F0b3IgY2hhbmdlczoKKyAgICAgICAgIERvdDU6IHJlbmRlcmluZyB0aGUgYXR0cmlidXRlcyB1bmRlcmxpbmUgKHdhcyBjdXJzb3Igc3R5bGUpCisgICAgICAgICBEb3Q2OiB0eXBpbmcgVW5pY29kZSBicmFpbGxlIHBhdHRlcm5zICh3YXMgYmxpbmtpbmcgY3Vyc29yKQorICAgICAgICAgRG90ODogdGhlIGtleWJvYXJkIGlzIGVuYWJsZWQgKHdhcyBzbGlkaW5nIHdpbmRvdykKKyAgICAgIFNjcmVlbiBudW1iZXIgd2hlbiBvbiBhIHNwZWNpYWwgc2NyZWVuOgorICAgICAgICAgZjogZnJvemVuIGhvc3Qgc2NyZWVuCisgICAgICAgICBoOiBicmFpbGxlIGRldmljZSBvciBrZXlib2FyZCBoZWxwIHNjcmVlbgorICAgICAgICAgbTogcHJlZmVyZW5jZXMgbWVudQorICAgTmV3IGJyYWlsbGUgZGV2aWNlczoKKyAgICAgIFRoZSBOTFMgZVJlYWRlciBmcm9tIFpvb21heC4KKyAgICAgIFRoZSBCcmFpbGxpYW50IEJJIDIwWCBhbmQgNDBYIGZyb20gSHVtYW53YXJlLgorICAgICAgVGhlIEFjdGl2ZSBCcmFpbGxlIFMgZnJvbSBIZWxwIFRlY2guCisgICBGcmVlZG9tU2NpZW50aWZpYyBicmFpbGxlIGRyaXZlciBjaGFuZ2VzOgorICAgICAgRm9jdXMgbW9kZWxzOgorICAgICAgICAgTWFueSBiaW5kaW5ncyBmb3IgdGhlIGZyb250IGtleXMgaGF2ZSBiZWVuIGFkZGVkLgorICAgICAgICAgQmluZGluZ3MgZm9yIHNwZWVjaCBuYXZpZ2F0aW9uIGhhdmUgYmVlbiBhZGRlZC4KKyAgIEhhbmR5VGVjaCBicmFpbGxlIGRyaXZlciBjaGFuZ2VzOgorICAgICAgVmVyc2lvbiAxLjMgb2YgdGhlIEVhc3kgQnJhaWxsZSdzIFVTQi1ISUQgZmlybXdhcmUgaXMgbm93IHN1cHBvcnRlZC4KKyAgIEh1bWFuV2FyZSBicmFpbGxlIGRyaXZlciBjaGFuZ2VzOgorICAgICAgVGhlIG91dGVyIHRodW1iIGtleXMgbm93IG5hdmlnYXRlIHVwL2Rvd24gKHVzZWQgdG8gYmUgbGVmdC9yaWdodCkuCisgICAgICBUaGUgaW5uZXIgdGh1bWIga2V5cyBub3cgbmF2aWdhdGUgbGVmdC9yaWdodCAodXNlZCB0byBiZSB1cC9kb3duKS4KKyAgICAgIFN1cHBvcnQgZm9yIGZpcm13YXJlIHZlcnNpb24gMS4xIG9mIHRoZSBuZXdlciBtb2RlbHMgaGFzIGJlZW4gYWRkZWQuCisgICBCcmxBUEkgY2hhbmdlczoKKyAgICAgIFRoZSB2ZXJzaW9uIGlzIG5vdyAwLjguMyAoaXQgd2FzIDAuOC4yKS4KKyAgICAgIFRoZSBjdXJyZW50IGJyYWlsbGUgdHlwaW5nIG1vZGUgaXMgbm93IGhvbm91cmVkLgorICAgICAgVHlwaW5nIFVuaWNvZGUgYnJhaWxsZSBwYXR0ZXJucyBoYXMgYmVlbiBmaXhlZC4KKyAgICAgIFNlcnZlciB0ZXJtaW5hdGlvbiBkdXJpbmcgaW5pdGlhbGl6YXRpb24gbm8gbG9uZ2VyIGhhbmdzLgorICAgICAgTmV3IGNsaWVudCBmZWF0dXJlczoKKyAgICAgICAgIFdyaXRlcyBjYW4gYmUgYXV0b21hdGljYWxseSBwYWRkZWQvdHJ1bmNhdGVkICh1c2UgbmVnYXRpdmUgcmVnaW9uIHNpemUpLgorICAgICAgICAgVGhlIHRocmVhZC1zYWZlIGJybGFwaV9zdHJlcnJvcl9yKCkgZnVuY3Rpb24uCisgICAgICAgICBUaGUgYnJsYXBpX3N5bmMoKSBmdW5jdGlvbi4KKyAgICAgICAgIFRoZSBCUkxBUElfUEFSQU1fQ0xJRU5UX1BSSU9SSVRZX0RJU0FCTEUgY29uc3RhbnQuCisgICAgICBTZWN1cml0eSBmaXhlczoKKyAgICAgICAgIFVzZSBmY2htb2QgKG5vdCBjaG1vZCkgdG8gYWRqdXN0IGxvY2FsIHNvY2tldCBwZXJtaXNzaW9ucy4KKyAgICAgICAgIFRoZSBzdGlja3kgYml0IGlzIG5vdyBzZXQgb24gdGhlIGxvY2FsIHNvY2tldHMgZGlyZWN0b3J5LgorICAgQ29udHJhY3Rpb24gdGFibGUgY2hhbmdlczoKKyAgICAgIExvY2FsZS1iYXNlZCBhdXRvc2VsZWN0aW9uIChzZXQgdG8gYXV0bykgaXMgbm93IHN1cHBvcnRlZC4KKyAgICAgIEEgdGFibGUgZm9yIFJ1c3NpYW4gKHNldCB0byBydSkgaGFzIGJlZW4gYWRkZWQuCisgICAgICBVRUIgKFVuaWZpZWQgRW5nbGlzaCBCcmFpbGxlKSBjaGFuZ2VzOgorICAgICAgICAgVGhlIEdyZWVrIGxldHRlcnMgaGF2ZSBiZWVuIGRlZmluZWQuCisgICAgICAgICBTb21lIG1hdGggc3ltYm9scyBoYXZlIGJlZW4gYWRkZWQuCisgICAgICAgICBDb21tb24gYWNjZW50cyBhcmUgbm93IHN1cHBvcnRlZCAtIHRoZXkgYXJlIHRoZQorICAgICAgICAgYWN1dGUsIGNlZGlsbGEsIGNpcmN1bWZsZXgsIGRpYWVyZXNpcywgZ3JhdmUsIGFuZCByaW5nLgorICAgQW5kcm9pZCBjaGFuZ2VzOgorICAgICAgVGhlIGZvdXIgbWFpbiBhcmNoaXRlY3R1cmVzIChhcm0veDg2LCAzMi82NCBiaXRzKSBhcmUgbm93IHN1cHBvcnRlZC4KKyAgICAgIEJSTFRUWSBpcyBub3cgYW4gYXBwIG9uIEdvb2dsZSBQbGF5LgorICAgICAgVGhlIEphdmEgQnJsQVBJIGNsaWVudCBvYmplY3RzIGFyZSBub3cgYXZhaWxhYmxlIHZpYSBhIE1hdmVuIHJlcG9zaXRvcnkuCisgICAgICBBIGN1c3RvbWl6ZWQgYnJsdHR5LmNvbmYgY2FuIG5vdyBiZSBwbGFjZWQgaW4gdGhlIHByaW1hcnkgc3RvcmFnZSBhcmVhLgorICAgICAgVGhlIGRlZmF1bHQgY29udHJhY3Rpb24gdGFibGUgaGFzIGJlZW4gY2hhbmdlZCB0byBhdXRvIChmcm9tIGVuLXVzLWcyKS4KKyAgICAgIFJ1bGVzIHNwZWNpZnlpbmcgd2hpY2ggZGF0YSBmaWxlcyBzaG91bGQgYmUgYmFja2VkIHVwIGhhdmUgYmVlbiBhZGRlZC4KKyAgICAgIFdlYiBwYWdlIHJlbmRlcmluZyBjaGFuZ2VzOgorICAgICAgICAgV2lkZ2V0IHR5cGVzIGFyZSBubyBsb25nZXIgdW5uZWNlc3NhcmlseSBzaG93bi4KKyAgICAgICAgIEFubm90YXRpb25zIGZvciBsaXN0cyBhbmQgbGlzdCBpdGVtcyBoYXZlIGJlZW4gYWRkZWQuCisgICAgICAgICBMaW5rIGFubm90YXRpb25zIG5vIGxvbmdlciBjb250YWluIHRoZSBsaW5rJ3MgVVJMLgorICAgICAgVGhlIGFib3V0IGFwcGxpY2F0aW9uIHNjcmVlbiBub3cgY29udGFpbnM6CisgICAgICAgICBCUkxUVFkncyBhcHAgdmVyc2lvbi4KKyAgICAgICAgIFRoZSB2ZXJzaW9uIG9mIHRoZSBCcmxBUEkgc2VydmVyLgorICAgICAgICAgVGhlIGRhdGUgYW5kIHRpbWUgb2YgdGhlIGJ1aWxkLgorICAgICAgICAgVGhlIHJlcG9zaXRvcnkgcmV2aXNpb24gb2YgdGhlIHNvdXJjZSBjb2RlLgorICAgICAgICAgQSBsaW5rIHRvIEJSTFRUWSdzIHByaXZhY3kgcG9saWN5LgorICAgICAgICAgVGhlIGxpbmsgdG8gQlJMVFRZJ3MgYXBwIHBhZ2Ugb24gR29vZ2xlIFBsYXkuCisgICAgICBFbXVsYXRpbmcgRjE2IG5vdyBsb2dzIHRoZSBzY3JlZW4gdG8gYSBsb2NhbCBmaWxlIGZvciBkZXZlbG9wZXIgZGVidWdnaW5nLgorICAgV2luZG93cyBjaGFuZ2VzOgorICAgICAgVGhlIC5jc3YgZmlsZXMgaGF2ZSBiZWVuIGFkZGVkIHRvIHRoZSBldGMvIGRpcmVjdG9yeSBvZiB0aGUgYXJjaGl2ZS4KKyAgIE5ldyBjb21tYW5kIGxpbmUgb3B0aW9uczoKKyAgICAgIC0tYXV0b3NwZWFrLXRocmVzaG9sZD08c2NyZWVuLWNvbnRlbnQtcXVhbGl0eT4KKyAgIENvbmZpZ3VyZSBjaGFuZ2VzOgorICAgICAgVGhlIC0tZGlzYWJsZS1jb250cmFjdGVkLWJyYWlsbGUgb3B0aW9uIGhhcyBiZWVuIHJlbW92ZWQuCisgICAgICBUaGUgLS13aXRoLWNvbnRyYWN0aW9uLXRhYmxlIG9wdGlvbiBoYXMgYmVlbiBhZGRlZC4KKyAgICAgIFRoZSAtLXdpdGhvdXQtY29udHJhY3Rpb24tdGFibGUgb3B0aW9uIGhhcyBiZWVuIGFkZGVkLgorCitKYW51YXJ5IDI4LCAyMDIxOgorIC0gQlJMVFRZIDYuMyByZWxlYXNlZDoKKyAgIENvcmUgY2hhbmdlczoKKyAgICAgIFRoZSBDTElQX05FVyBjb21tYW5kIHdoZW4gcGVyZm9ybWVkIHZpYSBhIGtleWJvYXJkIHRhYmxlIG5vIGxvbmdlciBjcmFzaGVzLgorICAgICAgTWVzc2FnZSBsb2NhbGl6YXRpb24gbm93IHdvcmtzIG9uIFdpbmRvd3MgYW5kIEFuZHJvaWQuCisgICAgICBOb24tVVRGOCBjb25zb2xlcyBvbiBMaW51eCBhbmQgV2luZG93cyBhcmUgbm93IHN1cHBvcnRlZC4KKyAgIENvbW1hbmQgbGluZSBvcHRpb24gY2hhbmdlczoKKyAgICAgIC0tc3RhcnQtbWVzc2FnZSBubyBsb25nZXIgaGFzIGEgc2hvcnQgb3B0aW9uICh3YXMgLVkpLgorICAgICAgLS1zdG9wLW1lc3NhZ2Ugbm8gbG9uZ2VyIGhhcyBhIHNob3J0IG9wdGlvbiAod2FzIC1aKS4KKyAgICAgIC0tcHJvbXB0LXBhdHRlcm5zIG5vIGxvbmdlciBoYXMgYSBzaG9ydCBvcHRpb24gKHdhcyAteikuCisgICAgICBUaGUgc2hvcnQgb3B0aW9uIGZvciAtLXByaXZpbGVnZS1wYXJhbWV0ZXJzIGlzIG5vdyAteiAod2FzIC15KS4KKyAgICAgIFRoZSAtLXN0YXktcHJpdmlsZWdlZCBbLVpdIG9wdGlvbiBoYXMgYmVlbiBhZGRlZC4KKyAgICAgIFNldHRpbmcgdGhlIHVucHJpdmlsZWdlZCB1c2VyIHRvIDpTVEFZLVBSSVZJTEVHRUQ6IGlzIG5vIGxvbmdlciBzdXBwb3J0ZWQuCisgICAgICBUaGUgb3ZlcnJpZGUtcHJlZmVyZW5jZSBvcHRpb24gaGFzIGJlZW4gcmVuYW1lZCB0byBvdmVycmlkZS1wcmVmZXJlbmNlcy4KKyAgICAgIFRoZSAtLWxvY2FsZS1kaXJlY3Rvcnkgb3B0aW9uIGhhcyBiZWVuIGFkZGVkLgorICAgQnVpbGQgY2hhbmdlczoKKyAgICAgIFRoZSBTeXN0ZW1kIGFuZCBVZGV2IHdyYXBwZXIgc2NyaXB0cyBhcmUgbm93IGluIGxpYmV4ZWMvIChub3QgbGliL2JybHR0eS8pLgorICAgICAgQlJMVFRZIG5vdyBoYXMgYSAucGMgKHBrZ2NvbmZpZykgZmlsZS4KKyAgICAgIFRoZSByZXZpc2lvbiBpZGVudGlmaWVyIGZvciB0aGUgYnVpbGQgaXMgbm93IHN0b3JlZCB3aXRoaW4gdGhlIHRhcmJhbGwuCisgICBTeXN0ZW1kIGNoYW5nZXM6CisgICAgICBUaGUgYnJsYXBpIGdyb3VwIGlzIGNyZWF0ZWQgZHVyaW5nIGJvb3QgaWYgaXQgZG9lc24ndCBhbHJlYWR5IGV4aXN0LgorICAgRnJlZWRvbVNjaWVudGlmaWMgYnJhaWxsZSBkcml2ZXIgY2hhbmdlczoKKyAgICAgIEZvY3VzIG1vZGVsczogVGhlIFNFVE1BUksgYW4gR09UT01BUksgY29tbWFuZHMgaGF2ZSBiZWVuIGJvdW5kLgorICAgWFdpbmRvdyBicmFpbGxlIGRyaXZlciBjaGFuZ2VzOgorICAgICAgQSBiYWNrc3BhY2Uga2V5IGhhcyBiZWVuIGFkZGVkLgorICAgU3BlZWNoRGlzcGF0Y2hlciBzcGVlY2ggZHJpdmVyIGNoYW5nZXM6CisgICAgICBUaGUgbmFtZT0gcGFyYW1ldGVyIGhhcyBiZWVuIGFkZGVkLgorICAgQnJsQVBJIGNoYW5nZXM6CisgICAgICBUaGUgdmVyc2lvbiBpcyBub3cgMC44LjIgKGl0IHdhcyAwLjguMSkuCisgICAgICBTb21lIGxvY2tpbmcgaXNzdWVzIGhhdmUgYmVlbiByZXNvbHZlZC4KKyAgIENvbnRyYWN0aW9uIHRhYmxlIGNoYW5nZXM6CisgICAgICBUaGUgY2xkciBkaXJlY3RpdmUgaGFzIGJlZW4gcmVuYW1lZCB0byBlbW9qaS4KKyAgICAgIEVtb2ppIHRyYW5zbGF0aW9uIGlzIG5vIGxvbmdlciBhcHBsaWVkIHRvIChzb21lKSBub24tZW1vamkgY2hhcmFjdGVycy4KKyAgICAgIEEgKHJhcmUpIHByb2JsZW0gdGhhdCBjb3VsZCBjYXVzZSBhbiBpbmZpbml0ZSBsb29wIGhhcyBiZWVuIHJlc29sdmVkLgorICAgRGV2ZWxvcGVyIGNoYW5nZXM6CisgICAgICBUaGUgdmVyc2lvbmVkIHN5bWJvbGljIGxpbmsgZm9yIGxpYmJybGFwaS5zbyBpcyBub3cgY3JlYXRlZCBieSBtYWtlIGFwaS4KKyAgICAgIFRoZSBydW4tKiBzY3JpcHRzIG5vdyB3b3JrIHdoZW4gdGhlIGJ1aWxkIGFuZCBzb3VyY2UgdHJlZXMgYXJlbid0IHRoZSBzYW1lLgorICAgICAgVGhlIHJ1bi1icmx0dHkgc2NyaXB0IG5vdyB1c2VzIHRoZSBtZXNzYWdlIGNhdGFsb2dzIHdpdGhpbiB0aGUgYnVpbGQgdHJlZS4KKyAgICAgIFRoZSBtc2d0ZXN0IGNvbW1hbmQgaGFzIGJlZW4gYWRkZWQuCisKK0RlY2VtYmVyIDIzLCAyMDIwOgorIC0gQlJMVFRZIDYuMiByZWxlYXNlZDoKKyAgIEdlbmVyYWwgY2hhbmdlczoKKyAgICAgIFByb2JsZW1zIHJlbGF0ZWQgdG8gdGhlIHN5c3RlbSB3YWtpbmcgdXAgZnJvbSBzdXNwZW5kIGhhdmUgYmVlbiByZXNvbHZlZC4KKyAgICAgIFRoZSBmb3JtYXQgb2YgdGhlIERFU0NDSEFSIGNvbW1hbmQncyBvdXRwdXQgaGFzIGJlZW4gaW1wcm92ZWQuCisgICAgICBUaGUgcmVwcmVzZW50YXRpb24gb2YgYW55IFVuaWNvZGUgYnJhaWxsZSBwYXR0ZXJuIGNhbiBub3cgYmUgb3ZlcnJpZGRlbi4KKyAgICAgIFByb21wdCBwYXR0ZXJucyBubyBsb25nZXIgZmFsbCBiYWNrIHRvIHRoZSBkZWZhdWx0IGFsZ29yaXRobS4KKyAgICAgIFRoZSArcm91dGUgbW9kaWZpZXIgbm93IHdvcmtzIGZvciBibG9jayBjb21tYW5kcy4KKyAgICAgIFRoZSBTY3JvbGwtYXdhcmUgQ3Vyc29yIE5hdmlnYXRpb24gcHJlZmVyZW5jZSBoYXMgYmVlbiBhZGRlZC4KKyAgICAgIFRoZSBTdGFydCBTZWxlY3Rpb24gd2l0aCBSb3V0aW5nIEtleSBwcmVmZXJlbmNlIGhhcyBiZWVuIGFkZGVkLgorICAgICAgVGhlIEZyYW5rIEF1ZGlvZGF0YSBicmFpbGxlIGRldmljZSBpcyBub3cgc3VwcG9ydGVkLgorICAgICAgVGhlIEphdmEgYmluZGluZ3MgaGF2ZSBiZWVuIHNpZ25pZmljYW50bHkgZW5oYW5jZWQuCisgICBBbHZhIGJyYWlsbGUgZHJpdmVyIGNoYW5nZXM6CisgICAgICBTYXRlbGxpdGUgbW9kZWxzOgorICAgICAgICAgVGhlIExlZnQvUmlnaHQgcGFkcyBoYXZlIGJlZW4gcmVzcGVjdGl2ZWx5IHJlbmFtZWQgdG8gU3BlZWNoL05hdi4KKyAgICAgICAgIFRoZSBDTElQX0NPUFkgYW5kIENMSVBfQVBQRU5EIGNvbW1hbmRzIGhhdmUgYmVlbiBib3VuZC4KKyAgIEhlZG8gYnJhaWxsZSBkcml2ZXIgY2hhbmdlczoKKyAgICAgIERldGVjdGlvbiBvZiBUaGUgTW9iaWxMaW5lIG1vZGVsIHZpYSBVU0IgaGFzIGJlZW4gaW1wcm92ZWQuCisgICBTZWlrYSBicmFpbGxlIGRyaXZlciBjaGFuZ2VzOgorICAgICAgVGhlIGxlZnQgc3BhY2UgYmFyIGhhcyBiZWVuIHJlbWFwcGVkIHRvIGJlaW5nIHRoZSBNZXRhIChsZWZ0IGFsdCkga2V5LgorICAgWFdpbmRvdyBicmFpbGxlIGRyaXZlciBjaGFuZ2VzOgorICAgICAgWCBjbGlwYm9hcmQgc3VwcG9ydCBoYXMgYmVlbiBhZGRlZC4KKyAgIEF0U3BpMiBzY3JlZW4gZHJpdmVyIGNoYW5nZXM6CisgICAgICBDdXJzb3Igcm91dGluZyBwcm9ibGVtcyBoYXZlIGJlZW4gcmVzb2x2ZWQuCisgICBCcmxBUEkgY2hhbmdlczoKKyAgICAgIFRoZSB2ZXJzaW9uIGlzIG5vdyAwLjguMSAoaXQgd2FzIDAuOC4wKS4KKyAgICAgIEEgcHJvYmxlbSB3aXRoIHJlYWRpbmcgcmF3IGtleWNvZGVzIGhhcyBiZWVuIGZpeGVkLgorICAgICAgVGhlIHNlcnZlciBub3cgYWxzbyBsaXN0ZW5zIGZvciBsb2NhbGhvc3QgY29ubmVjdGlvbnMgdmlhIElQVjYuCisgICAgICBCeXRlIHJlb3JkZXJpbmcgaXMgbm93IGRvbmUgZm9yIHdhdGNoZWQgcGFyYW1ldGVyIHZhbHVlcy4KKyAgICAgIFNldHRpbmcgdGhlIGNvbXB1dGVyIGJyYWlsbGUgY2VsbCBzaXplIGlzIG5vIGxvbmdlciBzdHJpY3QuCisgICAgICBSZWFkaW5nIHRoZSBSRU5ERVJFRF9DRUxMUyBwYXJhbWV0ZXIgbm93IHdvcmtzLgorICAgICAgVGhlc2UgaGF2ZSBiZWVuIGFkZGVkIGZvciBnZXR0aW5nIHRoZSB1bmRlcmx5aW5nIGZpbGUgZGVzY3JpcHRvcjoKKyAgICAgICAgIGJybGFwaV9nZXRGaWxlRGVzY3JpcHRvcigpCisgICAgICAgICBicmxhcGlfX2dldEZpbGVEZXNjcmlwdG9yKGhhbmRsZSkKKyAgICAgICAgIEJSTEFQSV9JTlZBTElEX0ZJTEVfREVTQ1JJUFRPUgorICAgICAgVGhlc2UgcGFyYW1ldGVycyBoYXZlIGJlZW4gcmVuYW1lZDoKKyAgICAgICAgIEJSTEFQSV9QQVJBTV9CT1VORF9DT01NQU5EX0NPREVTIC0+IEJSTEFQSV9QQVJBTV9CT1VORF9DT01NQU5EX0tFWUNPREVTCisgICAgICAgICBCUkxBUElfUEFSQU1fQ09NTUFORF9TSE9SVF9OQU1FICAtPiBCUkxBUElfUEFSQU1fQ09NTUFORF9LRVlDT0RFX05BTUUKKyAgICAgICAgIEJSTEFQSV9QQVJBTV9DT01NQU5EX0xPTkdfTkFNRSAgIC0+IEJSTEFQSV9QQVJBTV9DT01NQU5EX0tFWUNPREVfU1VNTUFSWQorICAgICAgICAgQlJMQVBJX1BBUkFNX0RFVklDRV9LRVlfQ09ERVMgICAgLT4gQlJMQVBJX1BBUkFNX0RFRklORURfRFJJVkVSX0tFWUNPREVTCisgICAgICAgICBCUkxBUElfUEFSQU1fS0VZX1NIT1JUX05BTUUgICAgICAtPiBCUkxBUElfUEFSQU1fRFJJVkVSX0tFWUNPREVfTkFNRQorICAgICAgICAgQlJMQVBJX1BBUkFNX0tFWV9MT05HX05BTUUgICAgICAgLT4gQlJMQVBJX1BBUkFNX0RSSVZFUl9LRVlDT0RFX1NVTU1BUlkKKyAgICAgIEFuZCB0aGVpciBjb3JyZXNwb25kaW5nIHBhcmFtZXRlciB0eXBlcyBoYXZlIGFsc28gYmVlbiByZW5hbWVkOgorICAgICAgICAgYnJsYXBpX3BhcmFtX2NvbW1hbmRDb2RlX3QgICAgICAtPiBicmxhcGlfcGFyYW1fY29tbWFuZEtleWNvZGVfdAorICAgICAgICAgYnJsYXBpX3BhcmFtX2NvbW1hbmRTaG9ydE5hbWVfdCAtPiBicmxhcGlfcGFyYW1fY29tbWFuZEtleWNvZGVOYW1lX3QKKyAgICAgICAgIGJybGFwaV9wYXJhbV9jb21tYW5kTG9uZ05hbWVfdCAgLT4gYnJsYXBpX3BhcmFtX2NvbW1hbmRLZXljb2RlU3VtbWFyeV90CisgICAgICAgICBicmxhcGlfcGFyYW1fa2V5Q29kZV90ICAgICAgICAgIC0+IGJybGFwaV9wYXJhbV9kcml2ZXJLZXljb2RlX3QKKyAgICAgICAgIGJybGFwaV9wYXJhbV9rZXlTaG9ydE5hbWVfdCAgICAgLT4gYnJsYXBpX3BhcmFtX2RyaXZlcktleWNvZGVOYW1lX3QKKyAgICAgICAgIGJybGFwaV9wYXJhbV9rZXlMb25nTmFtZV90ICAgICAgLT4gYnJsYXBpX3BhcmFtX2RyaXZlcktleWNvZGVTdW1tYXJ5X3QKKyAgIExpbnV4IHNlY3VyaXR5IGVuaGFuY2VtZW50czoKKyAgICAgIEJSTFRUWSBjYW4gbm93IHJ1biBhcyBhbiB1bnByaXZpbGVnZWQgdXNlci4KKyAgICAgIFNvbWUgbmFtZXNwYWNlcyBhcmUgbm93IGJlaW5nIGlzb2xhdGVkLgorICAgICAgQSBzeXN0ZW0gY2FsbCBmaWx0ZXIgY2FuIGJlIGVuYWJsZWQuCisgICAgICBUaGUgLS1wcml2aWxlZ2UtcGFyYW1ldGVycyBjb21tYW5kIGxpbmUgb3B0aW9uIGhhcyBiZWVuIGFkZGVkLgorICAgICAgVGhlIHByaXZpbGVnZS1wYXJhbWV0ZXJzIGNvbmZpZ3VyYXRpb24gZmlsZSBkaXJlY3RpdmUgaGFzIGJlZW4gYWRkZWQuCisgICAgICBUaGUgLS13aXRoLXByaXZpbGVnZS1wYXJhbWV0ZXJzIGNvbmZpZ3VyZSBvcHRpb24gaGFzIGJlZW4gYWRkZWQuCisgICAgICBGdWxsIGRldGFpbHMgaW4gUkVBRE1FLkxpbnV4IChvbmxpbmUgYXQgaHR0cDovL2JybHR0eS5hcHAvZG9jL0xpbnV4Lmh0bWwpLgorICAgQW5kcm9pZCBjaGFuZ2VzOgorICAgICAgRmluZGluZyB1c2VyIGN1c3RvbWl6YXRpb24gZmlsZXMgaW4gL3NkY2FyZC9icmx0dHkvIGhhcyBiZWUgZml4ZWQuCisgICAgICBUZXh0IHNlbGVjdGlvbiBhbmQgaG9zdCBjbGlwYm9hcmQgaW50ZXJhY3Rpb25zIGhhdmUgYmVlbiBpbXBsZW1lbnRlZC4KKyAgICAgIFRoZSBzY3JlZW4gZWxlbWVudCBvcmRlcmluZyBhbGdvcml0aG0gaGFzIGJlZW4gaW1wcm92ZWQuCisgICAgICBTcGVlY2ggdHJhY2tpbmcgaGFzIGJlZW4gaW1wbGVtZW50ZWQuCisgICAgICBDb21tYW5kcyBmb3IgZWFjaCBvZiB0aGUgZ2xvYmFsIGFjdGlvbnMgaGF2ZSBiZWVuIGFkZGVkLgorICAgICAgR2xvYmFsIGFjdGlvbnMgY2FuIG5vdyBhbHNvIGJlIHBlcmZvcm1lZCB2aWEgY2hvcmRzLgorICAgICAgR2xvYmFsIGFjdGlvbnMgZm9yIG1vdmluZyB0byB0aGUgZmlyc3QvbGFzdCBzY3JlZW4gZWxlbWVudCBoYXZlIGJlZW4gYWRkZWQuCisgICAgICBOYXZpZ2F0aW9uIGFtb25nIHRoZSB2aXNpYmxlIHNjcmVlbiB3aW5kb3dzIGlzIG5vdyBzdXBwb3J0ZWQuCisgICAgICBBIGdsb2JhbCBhY3Rpb24gdG8gc2hvdyB0aGUgd2luZG93IHRpdGxlIGhhcyBiZWVuIGFkZGVkLgorICAgICAgQSBnbG9iYWwgYWN0aW9uIHRvIHNob3cgdmFyaW91cyBkZXZpY2Ugc3RhdHVzIGluZGljYXRvcnMgaGFzIGJlZW4gYWRkZWQuCisgICAgICBTdXBwb3J0IGZvciBzdHJ1Y3R1cmFsIHdlYiBwYWdlIG5hdmlnYXRpb24gaGFzIGJlZW4gYWRkZWQuCisgICBTeXN0ZW1kIG1hbmFnZW1lbnQgY2hhbmdlczoKKyAgICAgIFRoZSBicmx0dHktZGV2aWNlQC5zZXJ2aWNlIGluc3RhbmNlIHVuaXQgaGFzIGJlZW4gYWRkZWQuCisgICAgICBCUkxUVFkgaXMgbm93IHJ1biBhcyBhbiB1bnByaXZpbGVnZWQgdXNlciB3aXRoIHBlcmtzLgorICAgICAgVGhlIEJSTFRUWSBpbnN0YW5jZSBpcyBub3cgc3RvcHBlZCBjb3JyZWN0bHkgb24gVVNCIGRpc2Nvbm5lY3QuCisgICAgICBBIFVTQiBkZXZpY2UgbWFuYWdlbWVudCBwcm9ibGVtIGludHJvZHVjZWQgaW4gU3lzdGVtZCAyNDcgaGFzIGJlZW4gZml4ZWQuCisgICAgICBCUkxUVFkncyBuZWVkZWQgZGlyZWN0b3JpZXMgYXJlIG5vdyBjcmVhdGVkIChpZiBuZWNlc3NhcnkpLgorICAgICAgVGhlIGJybGFwaSBncm91cCBpcyBub3cgYXNzdW1lZCAoZS5nLiBmb3IgL2V0Yy9icmxhcGkua2V5IG93bmVyc2hpcCkuCisgICBVcHN0YXJ0IHVkZXYgcnVsZXMgY2hhbmdlczoKKyAgICAgIFRoZSBpbml0Y3RsIGNvbW1hbmQgKHJhdGhlciB0aGFuIHN0YXJ0IGFuZCBzdG9wKSBpcyBub3cgdXNlZC4KKyAgICAgIFRoZSAtLXF1aWV0IGFuZCAtLW5vLXdhaXQgb3B0aW9ucyBhcmUgbm93IHVzZWQuCisgICAgICBUaGUgdWRldiBydWxlcyBub3cgcmVzdGFydCB0aGUgam9iIG9uIGNvbm5lY3QgaWYgaXQncyBhbHJlYWR5IHJ1bm5pbmcuCisgICBQb2xraXQgY2hhbmdlczoKKyAgICAgIE1lbWJlcnMgb2YgdGhlIGJybGFwaSBncm91cCBhcmUgbm93IGF1dGhvcml6ZWQuCisgICAgICBUaGUgcnVsZXMvYWN0aW9ucyBjYW4gbm93IGJlICh1bilpbnN0YWxsZWQgdmlhIHRoZSBQb2xraXQgbWFrZSBmaWxlLgorICAgQ29tbWFuZCBpbnN0YWxsYXRpb24gY2hhbmdlczoKKyAgICAgIFRoZSBicmx0dHktY29uZmlnIHNjcmlwdCBoYXMgYmVlbiByZW5hbWVkIHRvIGJybHR0eS1jb25maWcuc2guCisgICAgICBUaGUgYnJsdHR5LXByb2xvZ3VlLnNoIHNjcmlwdCBpcyBub3cgaW5zdGFsbGVkLgorICAgICAgVGhlIGJybHR0eS1nZW5rZXkgc2NyaXB0IGlzIG5vdyBpbnN0YWxsZWQuCisKK0FwcmlsIDYsIDIwMjA6CisgLSBCUkxUVFkgNi4xIHJlbGVhc2VkOgorICAgTmV3IGNvbW1hbmRzOgorICAgICAgUkVGUkVTSDogcmV3cml0ZSB0aGUgd2hvbGUgYnJhaWxsZSBkaXNwbGF5IChzb21lIGRyaXZlcnMpLgorICAgICAgUkVGUkVTSF9MSU5FOiByZXdyaXRlIGEgc3BlY2lmaWMgYnJhaWxsZSBsaW5lIChzb21lIGRyaXZlcnMpLgorICAgICAgUk9VVEVfTElORTogYnJpbmcgdGhlIGN1cnNvciB0byBhIHNwZWNpZmljIGJyYWlsbGUgbGluZS4KKyAgIE5ldyBicmFpbGxlIGRyaXZlcnM6CisgICAgICBDYW51dGU6IEEgNDAgY29sdW1uLCA5IGxpbmUgZGlzcGxheSBmcm9tIEJyaXN0b2wgQnJhaWxsZS4KKyAgIEJybEFQSSBicmFpbGxlIGRyaXZlciBjaGFuZ2VzOgorICAgICAgVGhlIHZlcnNpb24gaXMgbm93IDAuOC4wIChpdCB3YXMgMC43LjApLgorICAgICAgSW5jcmVhc2UvZGVjcmVhc2UgdGhlIGNsaWVudCBwcmlvcml0eSBiYXNlZCBvbiB0aGUgc2NyZWVuIGNvbnRlbnQgcXVhbGl0eS4KKyAgICAgIEEgcXVhbGl0eSBvZiAiZ29vZCIgb3ZlcnJpZGVzIE9yY2EgcmVuZGVyaW5nIC0gbG93ZXIgb25lcyBkb24ndC4KKyAgIEhhbmR5VGVjaCBicmFpbGxlIGRyaXZlciBjaGFuZ2VzOgorICAgICAgQmFzaWMgQnJhaWxsZSBQbHVzIG1vZGVscyBhcmUgc3VwcG9ydGVkLgorICAgICAgVGhlIEVhc3kgQnJhaWxsZSBjYW4gYmUgYXV0b2RldGVjdGVkIHdoZW4gdXNpbmcgQmx1ZXRvb3RoLgorICAgSHVtYW5XYXJlIGJyYWlsbGUgZHJpdmVyIGNoYW5nZXM6CisgICAgICBUaGUgQnJhaWxsaWFudCBCSSAxNCBjYW4gYmUgYXV0b2RldGVjdGVkIHdoZW4gdXNpbmcgQmx1ZXRvb3RoLgorICAgICAgVGhlIHJvdXRpbmcga2V5cyBvZiB0aGUgQnJhaWxsaWFudCBCSSAxNCB3b3JrLgorICAgICAgRm91ciBuZXcgbW9kZWxzIGFyZSBzdXBwb3J0ZWQ6CisgICAgICAgICBIdW1hbldhcmUgQnJhaWxsZU9uZQorICAgICAgICAgQVBIIENoYW1lbGVvbiAyMAorICAgICAgICAgQVBIIE1hbnRpcyBRNDAKKyAgICAgICAgIE5MUyBlUmVhZGVyCisgICBJbmNlcHRvciAoQnJhaWxsZU1lKSBicmFpbGxlIGRyaXZlciBjaGFuZ2VzOgorICAgICAgQ3Vyc29yIHBvc2l0aW9uaW5nIGhhcyBiZWVuIGZpeGVkLgorICAgICAgVVNCIChOVkRBIG1vZGUpIGF1dG9kZXRlY3Rpb24gd29ya3MuCisgICAgICBVU0IgKE5WREEgbW9kZSkga2V5IGJpbmRpbmdzIGhhdmUgYmVlbiByYXRpb25hbGl6ZWQuCisgICAgICBCbHVldG9vdGggKEJyYWlsbGVCYWNrIG1vZGUpIGtleSBiaW5kaW5ncyBoYXZlIGJlZW4gcmF0aW9uYWxpemVkLgorICAgQXRTcGkyIHNjcmVlbiBkcml2ZXIgY2hhbmdlczoKKyAgICAgIFRoZSBCUkxUVFkgYW5kIFggY2xpcGJvYXJkcyBhcmUgc3luY2hyb25pemVkLgorICAgICAgSGlnaGxpZ2h0ZWQgc2NyZWVuIHJlZ2lvbnMgYXJlIHN1cHBvcnRlZC4KKyAgICAgIFdoZW4gYSB3aWRnZXQgZG9lc24ndCBoYXZlIHRleHQgdGhlbiBpdHMgYWNjZXNzaWJpbGl0eSBuYW1lIGlzIHJlbmRlcmVkLgorICAgICAgU2V0IHRoZSBzY3JlZW4gY29udGVudCBxdWFsaXR5IChmb3IgdGhlIEJybEFQSSBicmFpbGxlIGRyaXZlcikgYXMgZm9sbG93czoKKyAgICAgICAgIGdvb2Q6IHRlcm1pbmFsIHdpZGdldHMKKyAgICAgICAgIGZhaXI6IHRleHQgd2lkZ2V0cyAoZS5nLiBsYWJlbHMpCisgICAgICAgICBwb29yOiB3aWRnZXRzIHRoYXQgaGF2ZSBkZXNjcmlwdGl2ZSB0ZXh0CisgICAgICAgICBub25lOiB3aWRnZXRzIHRoYXQgZG9uJ3QgaGF2ZSBhIHRleHQgaW50ZXJmYWNlCisgICAgICBUaGUgdHlwZT0gcGFyYW1ldGVyIG5vdyBzcGVjaWZpZXMgd2hpY2ggd2lkZ2V0cyBvdmVycmlkZSBPcmNhIHJlbmRlcmluZy4KKyAgICAgIHR5cGU9ZGVmYXVsdCBoYXMgYmVlbiBhZGRlZCAoYW5kIGlzIHRoZSBuZXcgZGVmYXVsdCkuCisgICAgICBUaGUgZGVmYXVsdCBpcyB0byBkZWZlciB0byBPcmNhIGV4Y2VwdCBmb3IgdGVybWluYWwgd2lkZ2V0cy4KKyAgIExpbnV4IHNjcmVlbiBkcml2ZXIgY2hhbmdlczoKKyAgICAgIFRoZSBmYWxsYmFja1RleHQ9IHBhcmFtZXRlciBoYXMgYmVlbiBhZGRlZC4KKyAgICAgIEN1cnNvciByb3V0aW5nIHdoZW4gdGhlcmUgYXJlIHdpZGUgY2hhcmFjdGVycyBoYXMgYmVlbiBmaXhlZC4KKyAgICAgIEN1cnNvciBwb3NpdGlvbmluZyB3aGVuIHRoZXJlIGFyZSB3aWRlIGNoYXJhY3RlcnMgaGFzIGJlZW4gZml4ZWQuCisgICBCcmxBUEkgY2hhbmdlczoKKyAgICAgIFVURi04IGNoYXJhY3RlciBlbmNvZGluZyBpcyBoYW5kbGVkIGludGVybmFsbHkgKG5vIGxvbmdlciBuZWVkcyBpY29udikuCisgICAgICBMYXJnZSBmaWxlIGRlc2NyaXB0b3IgbnVtYmVycyBubyBsb25nZXIgY2F1c2UgYSBjbGllbnQgdG8gY3Jhc2guCisgICAgICBUaGUgY2xpZW50IGFuZCBzZXJ2ZXIgcHJvdG9jb2wgdmVyc2lvbnMgY2FuIGJlIGluY3JlYXNlZCBpbmRlcGVuZGVudGx5LgorICAgICAgUGFja2V0cyBjYW4gY29udGFpbiB1cCB0byA0MDk2IChyYXRoZXIgdGhhbiA1MTIpIGJ5dGVzLgorICAgICAgVGhlIGJybGFwaV9fcGF1c2UoKSBmdW5jdGlvbiBjYW4gYmUgdXNlZCB0byB3YWl0IGZvciBhbiBpbmNvbWluZyBldmVudC4KKyAgICAgIEEgZnJhbWV3b3JrIGZvciBzZXR0aW5nLCBnZXR0aW5nLCBhbmQgd2F0Y2hpbmcgcGFyYW1ldGVycyBoYXMgYmVlbiBhZGRlZDoKKyAgICAgICAgIGJybGFwaV9nZXRQYXJhbWV0ZXJQcm9wZXJ0aWVzKCkKKyAgICAgICAgIGJybGFwaV9fZ2V0UGFyYW1ldGVyKCkKKyAgICAgICAgIGJybGFwaV9fZ2V0UGFyYW1ldGVyQWxsb2MoKQorICAgICAgICAgYnJsYXBpX19zZXRQYXJhbWV0ZXIoKQorICAgICAgICAgYnJsYXBpX193YXRjaFBhcmFtZXRlcigpCisgICAgICAgICBicmxhcGlfX3Vud2F0Y2hQYXJhbWV0ZXIoKQorICAgICAgVGhlIGJybHR0eS1jbGlwIGNvbW1hbmQgY2FuIGJlIHVzZWQgdG8gZ2V0L3NldCB0aGUgY2xpcGJvYXJkIGNvbnRlbnQuCisgICB4YnJsYXBpIGNoYW5nZXM6CisgICAgICBOb3cgYmFja2dyb3VuZHMgYWZ0ZXIgc3VjY2Vzc2Z1bGx5IGVzdGFibGlzaGluZyB0aGUgQnJsQVBJIGNvbm5lY3Rpb24uCisgICAgICBUaGUgLW4gKC0tbm8tZGFlbW9uKSBvcHRpb24gZGlzYWJsZXMgYmFja2dyb3VuZGluZy4KKyAgICAgIFRoZSBCUkxUVFkgYW5kIFggY2xpcGJvYXJkcyBhcmUgc3luY2hyb25pemVkLgorICAgVGV4dCB0YWJsZSBjaGFuZ2VzOgorICAgICAgRGVmaW5pbmcgdGhlIFVuaWNvZGUgcmVwbGFjZW1lbnQgY2hhcmFjdGVyIChVK0ZGRkQpIHdvcmtzIHByb3Blcmx5LgorICAgICAgVGhlIGZyLXZzIHRhYmxlIHN1cHBvcnRzIHRoZSBtaWRkbGUgZG90IGNoYXJhY3Rlci4KKyAgIENvbnRyYWN0aW9uIHRhYmxlIGNoYW5nZXM6CisgICAgICBVbmRlZmluZWQgY2hhcmFjdGVycyBub3cgZmFsbCBiYWNrIHRvIHRoZWlyIHRleHQgdGFibGUgcmVwcmVzZW50YXRpb25zLgorICAgICAgVGhlIGVuLXVlYi1nMiB0YWJsZSBoYXMgYmVlbiB1cGRhdGVkLgorICAgICAgVGhlIHpoLXR3LXVjYiB0YWJsZSBoYXMgYmVlbiByZW1vdmVkLgorICAgICAgUmVuYW1lZCBGcmVuY2ggdGFibGVzOgorICAgICAgICAgZnItaW50ZWdyYWwgLT4gZnItZzEKKyAgICAgICAgIGZyLWFicmVnZSAtPiBmci1nMgorICAgICAgUmVuYW1lZCBHZXJtYW4gdGFibGVzOgorICAgICAgICAgZGUtYmFzaXMgLT4gZGUtZzAKKyAgICAgICAgIGRlLXZvbGxzY2hyaWZ0IC0+IGRlLWcxCisgICAgICAgICBkZS1rdXJ6c2NocmlmdCAtPiBkZS1nMgorICAgICAgICAgZGUta3VyenNjaHJpZnQtMTk5OCAtPiBkZS0xOTk4CisgICAgICAgICBkZS1rdXJ6c2NocmlmdC0yMDE1IC0+IGRlLTIwMTUKKyAgIExpbnV4IGNoYW5nZXM6CisgICAgICBUaGUgc3lzdGVtZCBhbmQgdWRldiB3cmFwcGVycyBhcmUgbm93IGluIC91c3IvbGliL2JybHR0eS8uCisgICBBbmRyb2lkIGNoYW5nZXM6CisgICAgICBUaGUgVXBkYXRlIEFwcGxpY2F0aW9uIGJ1dHRvbiBvbiB0aGUgQWN0aW9ucyBzY3JlZW4gd29ya3MuCisgICAgICBSb3V0aW5nIGtleSAjNyBwcmVzZW50cyB0aGUgQWNjZXNzaWJpbGl0eSBBY3Rpb25zIGZvciBhIHNjcmVlbiBlbGVtZW50LgorICAgV2luZG93cyBjaGFuZ2VzOgorICAgICAgQSBwb3RlbnRpYWwgQnJsQVBJIGNsaWVudC9zZXJ2ZXIgY29tbXVuaWNhdGlvbiBkZWFkbG9jayBoYXMgYmVlbiBmaXhlZC4KKyAgICAgIFNvbWUgLmJhdCBzY3JpcHRzIGhhdmUgYmVlbiByZW5hbWVkOgorICAgICAgICAgaW5zdGFsbC1icmx0dHkgLT4gZW5hYmxlLWJybGFwaQorICAgICAgICAgdW5pbnN0YWxsLWJybHR0eSAtPiBkaXNhYmxlLWJybGFwaQorICAgICAgICAgcnVuLWRlYnVnIC0+IGRlYnVnLWJybHR0eQorCitGZWJydWFyeSAyMiwgMjAxOToKKyAtIEJSTFRUWSA2LjAgcmVsZWFzZWQ6CisgICBHZW5lcmFsIGNoYW5nZXM6CisgICAgICBDaG9yZHMgRG90NCArIERvdDYgKyBEb3Q4L0RvdDcgdHVybiBvbi9vZmYgdHlwaW5nIFVuaWNvZGUgYnJhaWxsZSBwYXR0ZXJucy4KKyAgICAgIFdvcmQgd3JhcCB3aGVuIHBhbm5pbmcgdG8gdGhlIGxlZnQgbm93IHdvcmtzIHByb3Blcmx5LgorICAgICAgQ3Vyc29yIHRyYWNraW5nIHdoaWxlIHdvcmQgd3JhcCBpcyBvbiBoYXMgYmVlbiBmaXhlZC4KKyAgICAgIFN1cHBvcnQgZm9yIHNwZWFraW5nIHRoZSBjdXJyZW50IGxpbmUncyBpbmRlbnQgaGFzIGJlZW4gYWRkZWQuCisgICAgICBWZXJ0aWNhbCBzY3JlZW4gc2Nyb2xsIHRyYWNraW5nIGlzIG5vdyBzdXBwb3J0ZWQuCisgICAgICBDb21tYW5kIGV4ZWN1dGlvbiBjYW4gbm93IGJlIGRlbGF5ZWQgdGlsbCBhbGwgdGhlIGtleXMgaGF2ZSBiZWVuIHJlbGVhc2VkLgorICAgICAgUmVzb3VyY2VzIGFyZSBubyBsb25nZXIgd2FzdGVkIGNoZWNraW5nIG5vbi1icmFpbGxlIFVTQiBkZXZpY2VzLgorICAgICAgVGhlIGVTcGVhay1ORyBzcGVlY2ggZHJpdmVyIGhhcyBiZWVuIGFkZGVkLgorICAgICAgQlJMVFRZIGNhbiBub3cgcnVuIHdpdGhpbiBhbiBJbml0UmFtRlMgYXMgYSBkcmFjdXQgbW9kdWxlLgorICAgICAgVGhlIC1ZIFstLXN0YXJ0LW1lc3NhZ2U9XSBhbmQgLVogWy0tc3RvcC1tZXNzYWdlPV0gb3B0aW9ucyBoYXZlIGJlZW4gYWRkZWQuCisgICAgICBUaGUgcHJvbXB0LXBhdHRlcm4gY29uZmlndXJhdGlvbiBmaWxlIGRpcmVjdGl2ZSBoYXMgYmVlbiBhZGRlZC4KKyAgIEJhdW0gYnJhaWxsZSBkcml2ZXIgY2hhbmdlczoKKyAgICAgIFRoZSBCMkcga2V5IGJpbmRpbmdzIGhhdmUgYmVlbiBzaWduaWZpY2FudGx5IGltcHJvdmVkLgorICAgSGFuZHlUZWNoIGJyYWlsbGUgZHJpdmVyIGNoYW5nZXM6CisgICAgICBTdXBwb3J0IGZvciB0aGUgQWN0aXZhdG9yIGhhcyBiZWVuIGFkZGVkLgorICAgICAgS2V5IGJpbmRpbmdzIG5vdyB3b3JrIGNvcnJlY3RseSBhZnRlciByZXR1cm5pbmcgZnJvbSB0aGUgaW50ZXJuYWwgbW9kZS4KKyAgIEhlZG8gYnJhaWxsZSBkcml2ZXIgY2hhbmdlczoKKyAgICAgIE5ld2VyIE1vYmlsTGluZSBtb2RlbHMgYXJlIG5vdyBkZXRlY3RlZC4KKyAgIEhJTVMgYnJhaWxsZSBkcml2ZXIgY2hhbmdlczoKKyAgICAgIFNoaWZ0ZWQgcXdlcnR5IGtleWJvYXJkIGxldHRlcnMgYXJlIG5vdyBpbnRlcnByZXRlZCBjb3JyZWN0bHkuCisgICBIdW1hbldhcmUgYnJhaWxsZSBkcml2ZXIgY2hhbmdlczoKKyAgICAgIEJsdWV0b290aCBjb25uZWN0aW9uIHByb2JsZW1zIGhhdmUgYmVlbiByZXNvbHZlZC4KKyAgICAgIFVTQiBzZXNzaW9uIGluaXRpYWxpemF0aW9uIHByb2JsZW1zIGhhdmUgYmVlbiByZXNvbHZlZC4KKyAgICAgIFRoZSBCcmFpbGxlTm90ZSBUb3VjaCByb3V0aW5nIGtleXMgbm93IHdvcmsuCisgICAgICBUaGUgQkkgMzIgam95c3RpY2sgbm93IHdvcmtzLgorICAgICAgQkkgMTQgVVNCIGRldGVjdGlvbiBoYXMgYmVlbiBmaXhlZC4KKyAgIE1EViBicmFpbGxlIGRyaXZlciBjaGFuZ2VzOgorICAgICAgQmluZGluZyBjaGFuZ2VzIGhhdmUgYmVlbiBtYWRlIHNvIHRoYXQgRjEwIG5vdyBkb2VzIGV4aXQgdGhlIG1lbnUuCisgICBWaWFWb2ljZSBzcGVlY2ggZHJpdmVyIGNoYW5nZXM6CisgICAgICBUaGUgZHJpdmVyIGhhcyBmaW5hbGx5IGJlZW4gcmV2aXZlZC4KKyAgICAgIFNwZWVjaCB0cmFja2luZyBoYXMgYmVlbiBpbXBsZW1lbnRlZC4KKyAgICAgIFRoZSBjb25maWd1cmUgb3B0aW9uIC0td2l0aC12aWF2b2ljZSBoYXMgYmVlbiByZW1vdmVkLgorICAgTGludXggc2NyZWVuIGRyaXZlciBjaGFuZ2VzOgorICAgICAgRnVsbCBVbmljb2RlIHN1cHBvcnQgaXMgZmluYWxseSBhdmFpbGFibGUgKG5vIG1vcmUgNTEyIGNoYXJhY3RlciBsaW1pdCkuCisgICAgICBBbW9uZyBtYW55IG90aGVyIGJlbmVmaXRzLCBVbmljb2RlIGJyYWlsbGUgcGF0dGVybnMgbm93IGF1dG9tYXRpY2FsbHkgcmVuZGVyLgorICAgICAgVGhpcyBjYXBhYmlsaXR5IG9ubHkgd29ya3MgaWYgYSA0LjE5IChvciBsYXRlcikga2VybmVsIGlzIGJlaW5nIHVzZWQuCisgICAgICBUaGUgdW5pY29kZT1ubyBkcml2ZXIgcGFyYW1ldGVyIGNhbiBiZSB1c2VkIHRvIHJldmVydCB0byB0aGUgb2xkZXIgYmVoYXZpb3VyLgorICAgQXRTcGkyIHNjcmVlbiBkcml2ZXIgY2hhbmdlczoKKyAgICAgIFRoZSBkZWZhdWx0IGlzIG5vdyB0byBvbmx5IHJlYWQgdGVybWluYWwgc2NyZWVucy4KKyAgICAgIERldGVybWluaW5nIHdoaWNoIHdpZGdldCBpcyBjdXJyZW50bHkgYWN0aXZlIGhhcyBiZWVuIGZpeGVkLgorICAgICAgQlJMVFRZIGlzIG5vdyBhdXRvbWF0aWNhbGx5IHN0b3BwZWQgd2hlbiB0aGUgc2Vzc2lvbiBpcyBjbG9zZWQuCisgICBCcmxBUEkgY2hhbmdlczoKKyAgICAgIFRoZSB2ZXJzaW9uIGlzIG5vdyAwLjcuMCAoaXQgd2FzIDAuNi43KS4KKyAgICAgIFRoZSBzZXJ2ZXIgbm93IHN0YXJ0cyBpbW1lZGlhdGVseSByYXRoZXIgdGhhbiB3aGVuIHRoZSBicmFpbGxlIGRyaXZlciBzdGFydHMuCisgICAgICBUaGUgZm9sbG93aW5nIG5ldyBjbGllbnQgZnVuY3Rpb25zIGhhdmUgYmVlbiBhZGRlZDoKKyAgICAgICAgIHZvaWQgYnJsYXBpX2dldExpYnJhcnlWZXJzaW9uKGludCAqbWFqb3IsIGludCAqbWlub3IsIGludCAqcmV2aXNpb24pCisgICAgICAgICB2b2lkIGJybGFwaV9fc2V0Q2xpZW50RGF0YShicmxhcGlfaGFuZGxlX3QgKmhhbmRsZSwgdm9pZCAqZGF0YSkKKyAgICAgICAgIHZvaWQgKmJybGFwaV9fZ2V0Q2xpZW50RGF0YShicmxhcGlfaGFuZGxlX3QgKmhhbmRsZSkKKyAgICAgICAgIGludCBicmxhcGlfX3JlYWRLZXlXaXRoVGltZW91dChicmxhcGlfaGFuZGxlX3QgKmhhbmRsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbWlsbGlzZWNvbmRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJybGFwaV9rZXlDb2RlX3QgKmNvZGUpCisgICAgICB4YnJsYXBpIG5vdyBtYXBzIHVubWFwcGVkIGtleXN5bXMgdG8gdGVtcG9yYXJ5IGtleWNvZGVzLgorICAgVGV4dCB0YWJsZSBjaGFuZ2VzOgorICAgICAgVGhlIHNlIChOb3J0aGVybiBTYW1pKSB0YWJsZSBoYXMgYmVlbiBhZGRlZC4KKyAgICAgIE5ldyBkaXJlY3RpdmVzOiBpZkdseXBoLCBpZk5vdEdseXBoLCBpZkNlbGwsIGlmTm90Q2VsbAorICAgQ29udHJhY3Rpb24gdGFibGUgY2hhbmdlczoKKyAgICAgIEEgdGFibGUgZm9yIHRoZSBHZXJtYW4gMjAxNSBzdGFuZGFyZCBbZGUta3VyenNjaHJpZnQtMjAxNV0gaGFzIGJlZW4gYWRkZWQKKyAgICAgICh0aGUgZGUta3VyenNjaHJpZnQtMTk5OCB0YWJsZSBzaG91bGQgbm93IGJlIHVzZWQgZm9yIHRoZSAxOTk4IHN0YW5kYXJkKS4KKyAgICAgIE5ldyBkaXJlY3RpdmVzOiBjbGRyLCByZXBsYWNlCisgICAgICBUaGUgY2xkciBkaXJlY3RpdmUgaGFzIGJlZW4gYWRkZWQgdG8gdGFibGVzIGZvciBsYW5ndWFnZXMgdGhhdCBoYXZlIGRlZmluZWQKKyAgICAgIGFubm90YXRpb25zOiBhZiwgZGUsIGVuLCBlcywgZnIsIGtvLCBubCwgcHQsIHN3LCB0aCwgenUKKyAgICAgICh5b3UgYWxzbyBuZWVkIHRvIGluc3RhbGwgeW91ciBkaXN0cmlidXRpb24ncyBDTERSIGFubm90YXRpb25zIHBhY2thZ2UpLgorICAgQW5kcm9pZCBjaGFuZ2VzOgorICAgICAgVGhlIEFuZHJvaWQgZGV2aWNlIGlzIG5vdyBrZXB0IGF3YWtlIHdoaWxlIG5hdmlnYXRpbmcgaW50ZXJuYWwgc2NyZWVucworICAgICAgKGhlbHAsIHRoZSBwcmVmZXJlbmNlcyBtZW51LCBhIGZyb3plbiBzY3JlZW4sIGV0YykuCisgICAgICBOZXcgYnJhaWxsZS1mcmllbmRseSB3aWRnZXQgcmVwcmVzZW50YXRpb25zOgorICAgICAgICAgQ2hlY2sgQm94ZXM6IOKjjyDio7kgKG5vdCBjaGVja2VkKSwg4qOP4qC24qO5IChjaGVja2VkKQorICAgICAgICAgUmFkaW8gQnV0dG9uczog4qKOIOKhsSAobm90IHNlbGVjdGVkKSwg4qKO4qC24qGxIChzZWxlY3RlZCkKKyAgICAgICAgIFN3aXRjaGVzOiDiorjio63ioYcgKG9mZiksIOKiuOKjm+KhhyAob24pCisgICAgICBBIG5vdGlmaWNhdGlvbiBzaG93aW5nIHRoZSBicmFpbGxlIGRldmljZSBhbmQgaXRzIHN0YXRlIGhhcyBiZWVuIGFkZGVkLgorICAgICAgU3VwcG9ydCBmb3IgdGhlIEFjY2Vzc2liaWxpdHkgYnV0dG9uIChBbmRyb2lkIDggb3IgbGF0ZXIpIGhhcyBiZWVuIGFkZGVkLgorICAgICAgVGhlIEFjdGlvbnMgc2NyZWVuIGhhcyBiZWVuIGFkZGVkIC0geW91IGNhbiBnZXQgdG8gaXQgYnk6CisgICAgICAgICBHbG9iYWwgQWN0aW9uICM1IChlbXVsYXRlIHRoZSBGNSBrZXlib2FyZCBrZXkpCisgICAgICAgICBUYXBwaW5nIHRoZSAobmV3KSBub3RpZmljYXRpb24uCisgICAgICAgICBDbGlja2luZyB0aGUgKG5ldykgQWNjZXNzaWJpbGl0eSBidXR0b24uCisgICAgICBSb3V0aW5nIGtleXMgYmV5b25kIGFuIGVsZW1lbnQncyB0ZXh0IGFyZSBub3cgYXNzb2NpYXRlZCB3aXRoIHRoYXQgZWxlbWVudC4KKyAgICAgIFJvdXRpbmcga2V5ICM2IG5vdyBkb2VzIGEgY29udGV4dCBjbGljayAoZm9yIGVsZW1lbnRzIHRoYXQgc3VwcG9ydCBpdCkuCisgICAgICBUaGUgYWxnb3JpdGhtIHRoYXQgZGVjaWRlcyB3aGljaCBlbGVtZW50cyB0byByZW5kZXIgaGFzIGJlZW4gbXVjaCBpbXByb3ZlZC4KKyAgICAgIFRoZSBsaXN0IHJlbmRlcmVyIG5vdyBvcmRlcnMgZWxlbWVudHMgbXVjaCBtb3JlIHNlbnNpYmx5LgorICAgICAgVGhlIGFjY3VyYWN5IG9mIGxlZnQsIHJpZ2h0LCB1cCwgYW5kIGRvd24gbmF2aWdhdGlvbiBoYXMgYmVlbiBpbXByb3ZlZC4KKyAgICAgIFN1cHBvcnQgZm9yIHJhbmdlIGNvbnRyb2xzIGhhcyBiZWVuIGFkZGVkIChhZGp1c3Qgd2l0aCB0aGUgc2Nyb2xsIGFjdGlvbnMpLgorICAgICAgQmx1ZXRvb3RoIGNvbm5lY3Rpb25zIGFyZSBubyBsb25nZXIgdHJpZWQ6CisgICAgICAgICBJZiB0aGUgQW5kcm9pZCBkZXZpY2UgZG9lc24ndCBoYXZlIGEgQmx1ZXRvb3RoIGFkYXB0ZXIuCisgICAgICAgICBJZiB0aGUgQW5kcm9pZCBkZXZpY2UncyBCbHVldG9vdGggYWRhcHRlciBpcyBkaXNhYmxlZC4KKyAgICAgICAgIFdoaWxlIHRoZSBBbmRyb2lkIGRldmljZSBpcyBzZWFyY2hpbmcgZm9yIG5ldyBCbHVldG9vdGggZGV2aWNlcy4KKworRmVicnVhcnkgNSwgMjAxODoKKyAtIEJSTFRUWSA1LjYgcmVsZWFzZWQ6CisgICBHZW5lcmFsIHVwZGF0ZXM6CisgICAgICBCUkxUVFkgaGFzIGJlZW4gcmVsaWNlbnNlZCB0byB0aGUgTEdQTCAoZnJvbSB0aGUgR1BMKS4KKyAgICAgIEJldHRlciBjdXJzb3Igcm91dGluZyBoYW5kbGluZyBvZiBzdGF0dXMgbGluZSB1cGRhdGVzIGFuZCB2ZXJ0aWNhbCBzY3JvbGxpbmcuCisgICAgICBUaGUgVHJhY2sgU2NyZWVuIFNjcm9sbCBzZXR0aW5nIGhhcyBiZWVuIGFkZGVkLgorICAgICAgVGhlIFdvcmQgV3JhcCBzZXR0aW5nIGhhcyBiZWVuIGFkZGVkLgorICAgICAgUGFubmluZyBsZWZ0IHdoZW4gdXNpbmcgYSBjb250cmFjdGlvbiB0YWJsZSBub3cgd29yZCB3cmFwcy4KKyAgICAgIFR5cGluZyBkaXNtaXNzZXMgYW4gYWxlcnQgbWVzc2FnZS4KKyAgICAgIFRoZSB0ZXN0IGZvciB3aGVuIElORk8gZG9lcyB0ZXh0IG1heGltaXphdGlvbiBpbnN0ZWFkIGhhcyBiZWVuIGZpeGVkLgorICAgICAgT3ZlcnJpZGVzIGFyZSBub3cgYXBwbGllZCB3aGVuIHRoZSBwcmVmZXJlbmNlcyBoYXZlbid0IHlldCBiZWVuIHNhdmVkLgorICAgICAgVGhlIEluY2VwdG9yIGJyYWlsbGUgZHJpdmVyIChmcm9tIElubm92aXNpb24pIGhhcyBiZWVuIGFkZGVkLgorICAgVGhlIEJhdW0gYnJhaWxsZSBkcml2ZXI6CisgICAgICBPbiBtb2RlbHMgd2l0aCBCOSBhbmQgQjEwIGJ5IHRoZSBqb3lzdGljaywgYm90aCBhcmUgaW50ZXJwcmV0ZWQgYXMgU3BhY2UuCisgICAgICBJbnB1dCBwYWNrZXQgaGFuZGxpbmcgZm9yIFByb250byEgVjMgbW9kZWxzIGhhcyBiZWVuIGZpeGVkLgorICAgVGhlIEV1cm9CcmFpbGxlIGJyYWlsbGUgZHJpdmVyOgorICAgICAgSW1wcm92ZWQgYXV0b2RldGVjdGlvbiB3aGVuIHVzaW5nIEJsdWV0b290aC4KKyAgICAgIFRoZSBFc3l0aW1lIGJyYWlsbGUga2V5Ym9hcmQgY2FuIGJlIHVzZWQgb3ZlciBCbHVldG9vdGggYW5kIFVTQi4KKyAgICAgIEZvciBFc3l0aW1lIG1vZGVscywgQjUgaGFzIGJlZW4gcmVuYW1lZCB0byBCOC4KKyAgIFRoZSBISU1TIGJyYWlsbGUgZHJpdmVyOgorICAgICAgVGhlIFNtYXJ0IEJlZXRsZSBpcyBub3cgcmVjb2duaXplZCB3aGVuIHVzaW5nIEJsdWV0b290aC4KKyAgIFRoZSBIdW1hbldhcmUgYnJhaWxsZSBkcml2ZXI6CisgICAgICBUaGUgQnJhaWxsZU5vdGUgVG91Y2ggaXMgcmVjb2duaXplZCB3aGVuIHVzaW5nIFVTQi4KKyAgIEJybEFQSSBjaGFuZ2VzOgorICAgICAgVGhlIHZlcnNpb24gaXMgbm93IDAuNi43IChpdCB3YXMgMC42LjYpLgorICAgICAgVGhlIGJybGFwaV9nZXRNb2RlbElkZW50aWZpZXIoKSBmdW5jdGlvbiBoYXMgYmVlbiBhZGRlZCB0byB0aGUgQVBJLgorICAgICAgVGhlIGRlZmF1bHQgY2hhcmFjdGVyIHNldCBpcyBub3cgYmFzZWQgb24gdGhlIHVzZXIncyBsb2NhbGUuCisgICAgICBTZXNzaW9ucyB3b3VsZCBvY2Nhc2lvbmFsbHkgaGFuZyB3aGVuIGNvbm5lY3RpbmcuCisgICAgICBQb2xLaXQgYXV0aGVudGljYXRpb24gaXMgbm8gbG9uZ2VyIGF0dGVtcHRlZCB3aGVuIGl0IGlzbid0IGF2YWlsYWJsZS4KKyAgICAgIFJlYWRpbmcgcmF3IGtleSBjb2RlcyBubyBsb25nZXIgdXNlcyBrZXkgcmFuZ2VzLgorICAgVGV4dCB0YWJsZXM6CisgICAgICBUaGUgbHQgKExpdGh1YW5pYW4pIHRhYmxlIGhhcyBiZWVuIHVwZGF0ZWQuCisgICAgICBUaGUgdWsgKFVrcmFpbmlhbikgdGFibGUgaGFzIGJlZW4gYWRkZWQuCisgICBDb250cmFjdGlvbiB0YWJsZXM6CisgICAgICBUaGUgZnItYWJyZWdlIChGcmVuY2gpIHRhYmxlIGhhcyBiZWVuIHVwZGF0ZWQuCisgICAgICBUaGUgbHQgKExpdGh1YW5pYW4pIHRhYmxlIGhhcyBiZWVuIGFkZGVkLgorICAgICAgU3VwcG9ydCBoYXMgYmVlbiBhZGRlZCBmb3IgTGliTG91aXMgdGFibGVzLgorICAgICAgYnJsdHR5LWN0YidzIG91dHB1dCBpcyBub3cgVVRGLTggKHJhdGhlciB0aGFuIEFTQ0lJKS4KKyAgIEtleSB0YWJsZXM6CisgICAgICBUaGUgaWZQbGF0Zm9ybSBhbmQgaWZOb3RQbGF0Zm9ybSBkaXJlY3RpdmVzIGhhdmUgYmVlbiBhZGRlZC4KKyAgIFN5c3RlbWQgY2hhbmdlczoKKyAgICAgIFBhdGggKHJhdGhlciB0aGFuIHRhcmdldCkgdW5pdHMgYXJlIG5vdyB1c2VkIHRvIG1hbmFnZSBCUkxUVFkgaW5zdGFuY2VzLgorICAgQW5kcm9pZCBjaGFuZ2VzOgorICAgICAgRGFuaXNoIHRyYW5zbGF0aW9ucyBoYXZlIGJlZW4gYWRkZWQuCisgICBCdWlsZCBmZWF0dXJlczoKKyAgICAgIEFkZCB0aGUgcmVsb2FkIHRhcmdldCB0byB0aGUgbWFrZSBmaWxlcyBmb3IgU3lzdGVtZCBhbmQgVWRldi4KKyAgICAgIEEgbWFrZSBmaWxlIGZvciBpbnN0YWxsL3VuaW5zdGFsbCBvZiB0aGUgQXBwU3RyZWFtIHJ1bGVzIGhhcyBiZWVuIGFkZGVkLgorICAgICAgUHl0aG9uIDMuNiBpcyBzdXBwb3J0ZWQuCisKK0FwcmlsIDE4LCAyMDE3OgorIC0gQlJMVFRZIDUuNSByZWxlYXNlZDoKKyAgIEdlbmVyYWwgY2hhbmdlczoKKyAgICAgIFRoZSBicmFpbGxlIGFuZCBzcGVlY2ggYmFubmVycyBubyBsb25nZXIgaW5jbHVkZSB0aGUgcmV2aXNpb24gaWRlbnRpZmllci4KKyAgICAgIFRoZSAtbyAoLS1vdmVycmlkZS1wcmVmZXJlbmNlPSkgb3B0aW9uIGhhcyBiZWVuIGFkZGVkLgorICAgICAgcXVpZXQtaWYtbm8tYnJhaWxsZSBjYW4gYmUgc3BlY2lmaWVkIHZpYSB0aGUgY29uZmlndXJhdGlvbiBmaWxlLgorICAgICAgQ3Vyc29yIHJvdXRpbmcgaGFuZ3MgaGF2ZSBiZWVuIHJlc29sdmVkLgorICAgICAgVGhlIExvZyBNZXNzYWdlcyBzdWJtZW51IChmb3Igd2FybmluZ3MgYW5kIGVycm9ycykgaGFzIGJlZW4gYWRkZWQuCisgICAgICBTdXBwb3J0IGZvciBwYW5uaW5nIHdpdGhpbiBhIGxvbmcgYWxlcnQgbWVzc2FnZSBoYXMgYmVlbiBhZGRlZC4KKyAgICAgIEFsZXJ0IGJlZXBzIHdvcmsgb24gYSBMaW51eCBzZXJpYWwgY29uc29sZS4KKyAgICAgIFRoZSBHcmVlayB0ZXh0IHRhYmxlIGhhcyBiZWVuIGltcHJvdmVkLgorICAgQnJhaWxsZSBkZXZpY2UgY2hhbmdlczoKKyAgICAgIFRoZSBkZWZhdWx0IGlzIHRvIGNoZWNrIGJvdGggVVNCIGFuZCBCbHVldG9vdGggKG5vdCBqdXN0IFVTQikuCisgICAgICBTcGVjaWZ5aW5nIHRoZSBCbHVldG9vdGggYWRkcmVzcyBpcyBubyBsb25nZXIgbWFuZGF0b3J5LgorICAgICAgQSBwcmVmaXggb2YgYSBCbHVldG9vdGggZGV2aWNlJ3MgbmFtZSBjYW4gYmUgc3BlY2lmaWVkLgorICAgICAgQSBnZW5lcmljIFVTQiBzZXJpYWwgYWRhcHRlciBpcyBwcm9iZWQgb25seSBpZiBpdCdzIGJlZW4gY3VzdG9taXplZC4KKyAgIEJhdW0gYnJhaWxsZSBkcml2ZXIgY2hhbmdlczoKKyAgICAgIFN1cHBvcnQgZm9yIHRoZSBWYXJpbyBVbHRyYSBoYXMgYmVlbiBpbXByb3ZlZC4KKyAgICAgIFN1cHBvcnQgZm9yIHRoZSBPcmJpdCAyMCBoYXMgYmVlbiBhZGRlZC4KKyAgIEV1cm9CcmFpbGxlIGJyYWlsbGUgZHJpdmVyIGNoYW5nZXM6CisgICAgICBNb3JlIEVzeXRpbWUgYmluZGluZ3MgaGF2ZSBiZWVuIGFkZGVkLgorICAgICAgU3VwcG9ydCBoYXMgYmVlbiBhZGRlZCBmb3IgdGhlIEVzeXNMaWdodCA4MCBhbmQgdGhlIEVzeXRpbWUgRXZvbHV0aW9uLgorICAgSGFuZHlUZWNoIGJyYWlsbGUgZHJpdmVyIGNoYW5nZXM6CisgICAgICBTdXBwb3J0IGhhcyBiZWVuIGFkZGVkIGZvciB0aGUgQWN0aWxpbm8uCisgICAgICBUaGUgcm9ja2VyIGtleXMgY2FuIGJlIHVzZWQgZm9yIGVmZmljaWVudCBuYXZpZ2F0aW9uIG9mIHRoZSBtZW51LgorICAgICAgQjQrQjUgaGFzIGJlZW4gYm91bmQgdG8gQ29tbWFuZCBMZWFybiBNb2RlLgorICAgICAgVGhlIChub3cgcmVkdW5kYW50KSBrZXlwYWQgYmluZGluZyBmb3IgQ29tbWFuZCBMZWFybiBNb2RlIGhhcyBiZWVuIHJlbW92ZWQuCisgICAgICBUaGUgQmx1ZXRvb3RoIG5hbWVzIG9mIHRoZSBBY3RpdmUgU3RhciBhbmQgdGhlIEJyYWlsbGlubyBhcmUgcmVjb2duaXplZC4KKyAgIEhJTVMgYnJhaWxsZSBkcml2ZXIgY2hhbmdlczoKKyAgICAgIEZ1bmN0aW9uIGtleSBiaW5kaW5ncyBoYXZlIGJlZW4gYWRkZWQgZm9yIG1vZGVscyB3aXRoIGZvdXIgc2Nyb2xsIGtleXMuCisgICBUVFkgYnJhaWxsZSBkcml2ZXIgY2hhbmdlczoKKyAgICAgIFRoZSBicmFpbGxlIGNlbGxzIGFyZSBzaG93biAoaW4gYWRkaXRpb24gdG8gdGhlIHRleHQpLgorICAgSHVtYW5XYXJlIGJyYWlsbGUgZHJpdmVyIGNoYW5nZXM6CisgICAgICBUaGUgQnJhaWxsZSBOb3RlIGlzIGF1dG9kZXRlY3RlZCB3aGVuIHVzaW5nIFVTQi4KKyAgICAgIFN1cHBvcnQgaGFzIGJlZW4gYWRkZWQgZm9yIHRoZSBCcmFpbGxlIE5vdGUgVG91Y2guCisgICBQb2xraXQgY2hhbmdlczoKKyAgICAgIFRoZSBwb2xpY3kgZmlsZSBpcyBpbnN0YWxsZWQuCisgICAgICBUaGUgcG9saWN5IGhhcyBiZWVuIHJlbmFtZWQgdG8gb3JnLmExMXkuYnJsYXBpIChmcm9tIG9yZy5icmx0dHkpLgorICAgICAgSW5pdGlhbGl6YXRpb24gZG9lc24ndCBkZWxheSBCUkxUVFkgc3RhcnR1cC4KKyAgIFN5c3RlbWQgY2hhbmdlczoKKyAgICAgIFRoZSBkZWZhdWx0IGluc3RhbmNlIGlzIG5vdyBicmx0dHkudGFyZ2V0IChub3QgYnJsdHR5LnNlcnZpY2UpLgorICAgICAgTXVsdGlwbGUgaW5zdGFuY2VzIGNhbiBiZSBtYW5hZ2VkICh2aWEgYnJsdHR5QC50YXJnZXQgaW5zdGFuY2VzKS4KKyAgICAgIEEgbWFrZSBmaWxlIGhhcyBiZWVuIGFkZGVkIHRvIHNpbXBsaWZ5IHVuaXQgYW5kIHdyYXBwZXIgaW5zdGFsbGF0aW9uLgorICAgICAgQlJMVFRZIGlzbid0IHN0YXJ0ZWQgdW50aWwgVWRldiBoYXMgZmluaXNoZWQgaW5pdGlhbGl6aW5nLgorICAgICAgQlJMVFRZIGlzbid0IGF1dG9tYXRpY2FsbHkgcmVzdGFydGVkIGlmIGl0IHRlcm1pbmF0ZXMgY2xlYW5seS4KKyAgIFVkZXYgY2hhbmdlczoKKyAgICAgIEEgbWFrZSBmaWxlIGhhcyBiZWVuIGFkZGVkIHRvIHNpbXBsaWZ5IHJ1bGVzIGFuZCB3cmFwcGVyIGluc3RhbGxhdGlvbi4KKyAgIEJybEFQSSBjaGFuZ2VzOgorICAgICAgVGhlIHZlcnNpb24gaXMgbm93IDAuNi42IChpdCB3YXMgMC42LjUpLgorICAgICAgVGhlIHNlcnZlciBpc24ndCBzdGFydGVkIHVudGlsIHRoZSBicmFpbGxlIGRyaXZlciBoYXMgc3RhcnRlZC4KKyAgICAgIFNldmVyYWwgc21hbGwgZml4ZXMuCisgICB4YnJsYXBpIGNoYW5nZXM6CisgICAgICBUaGUgWDExIGFuZCBnZG0gYXV0b3N0YXJ0IGZpbGVzIGFyZSBpbnN0YWxsZWQuCisgICAgICBDb25zdGFudGx5IHRyeWluZyB0byBjb25uZWN0IHdoZW4gQlJMVFRZIGlzbid0IGF2YWlsYWJsZSBoYXMgYmVlbiBmaXhlZC4KKyAgICAgIFJlY29ubmVjdGlvbiBvbiBldmVyeSB3aW5kb3cgY2hhbmdlIGhhcyBiZWVuIGZpeGVkLgorICAgS2V5IHRhYmxlIGNoYW5nZXM6CisgICAgICBDb21tb24gY2hvcmRzIGZvciBhbGwgb2YgdGhlIHN0aWNreSBtb2RpZmllciBrZXlzIGhhdmUgYmVlbiBhZGRlZC4KKyAgICAgIExpc3RpbmdzIGNvbWJpbmUgZG90IGtleXMsIGUuZy4gRG90czEyIGluc3RlYWQgb2YgRG90MStEb3QyLgorICAgQW5kcm9pZCBjaGFuZ2VzOgorICAgICAgVGhlIGN1cnNvciBubyBsb25nZXIganVtcHMgYmFjayB0byB0aGUgc3RhcnQgd2hpbGUgc3BhY2VzIGFyZSBiZWluZyB0eXBlZC4KKyAgICAgIEN1c3RvbWl6YXRpb24gZmlsZXMgY2FuIGJlIGluIGludGVybmFsIHN0b3JhZ2UgYW5kL29yIG9uIHRoZSBTRCBjYXJkLgorICAgV2luZG93cyBjaGFuZ2VzOgorICAgICAgSW50ZXJhY3Rpb24gd2l0aCBOVkRBIGhhcyBiZWVuIHJldml2ZWQuCisgICAgICBMaWJVU0IgY2FuIGJlIHVzZWQgb24gYSA2NC1iaXQgc3lzdGVtLgorICAgICAgQnVpbGRzIGNhbiBiZSBkb25lIG9uIE1pbkdXNjQuCisgICBCdWlsZCBjaGFuZ2VzOgorICAgICAgQXBwU3RyZWFtIG1ldGFpbmZvIGlzIG1haW50YWluZWQgYW5kIGluc3RhbGxlZC4KKyAgICAgIFRoZSBuZXcgU3BlZWNoIERpc3BhdGNoZXIgaW5zdGFsbGF0aW9uIGxheW91dCBpcyBzdXBwb3J0ZWQuCisgICAgICBGaXhlcyB0byBzdXBwb3J0IGJ1aWxkaW5nIG9uIFNvbGFyaXMgMTAgYW5kIDExIHdpdGggQzk5LgorCitKdW5lIDI4LCAyMDE2OgorIC0gQlJMVFRZIDUuNCByZWxlYXNlZDoKKyAgIENvcmUgY2hhbmdlczoKKyAgICAgIFRoZSBEZWxheWVkIEN1cnNvciBUcmFja2luZyBmZWF0dXJlIChhbmQgcHJlZmVyZW5jZSkgaGFzIGJlZW4gYWRkZWQuCisgICAgICBTdHVjayBrZXlzIGFyZSBub3cgYXV0b21hdGljYWxseSByZWxlYXNlZCBhZnRlciBhIHNwZWNpZmlhYmxlIHRpbWVvdXQuCisgICAgICBUb3VjaCBldmVudHMgbm8gbG9uZ2VyIGludGVyZmVyZSB3aXRoIExlYXJuIE1vZGUuCisgICAgICBTdXBwb3J0IGZvciB0aGUgUG9sa2l0IGF1dGhvcml6YXRpb24gbWFuYWdlciBoYXMgYmVlbiBhZGRlZC4KKyAgICAgIEEgY291cGxlIG9mIG1lbW9yeSBjb3JydXB0aW9uIGlzc3VlcyBoYXZlIGJlZW4gcmVzb2x2ZWQuCisgICBVU0IgZml4ZXM6CisgICAgICBEZXZpY2UgZGlzY29ubmVjdCBkZXRlY3Rpb24gaGFzIGJlZW4gaW1wcm92ZWQuCisgICAgICBFeGNlc3NpdmUgQ1BVIGNvbnN1bXB0aW9uIGZvciBzb21lIG9sZGVyIHNlcmlhbCBhZGFwdGVycyBoYXMgYmVlbiByZXNvbHZlZC4KKyAgIEJhdW0gYnJhaWxsZSBkcml2ZXIgY2hhbmdlczoKKyAgICAgIE1vcmUgYmluZGluZ3MgaGF2ZSBiZWVuIGRlZmluZWQgZm9yIG1vZGVscyB0aGF0IGhhdmUgdGhlIEIxMSBrZXkuCisgICAgICBGYWxzZSByZXBvcnRpbmcgb2YgaW5wdXQgdGltZW91dHMgaGFzIGJlZW4gcmVzb2x2ZWQuCisgICAgICBIYW5kbGluZyBvZiB1bmtub3duIHBhY2tldCB0eXBlcyBoYXMgYmVlbiBpbXByb3ZlZC4KKyAgIEhhbmR5VGVjaCBicmFpbGxlIGRyaXZlciBjaGFuZ2VzOgorICAgICAgTW9kZWwgZGV0ZWN0aW9uIG9uIFdpbmRvd3MgaGFzIGJlZW4gZml4ZWQuCisgICAgICBPdXRwdXQgZXJyb3JzIG5vdyByZXN0YXJ0IHRoZSBkcml2ZXIuCisgICBISU1TIGJyYWlsbGUgZHJpdmVyIGNoYW5nZXM6CisgICAgICBTdXBwb3J0IGZvciB0aGUgU21hcnQgQmVldGxlIGhhcyBiZWVuIGFkZGVkLgorICAgICAgTmV3ZXIgZmlybXdhcmUgcmVzb2x1dGlvbiBvZiBxd2VydHkga2V5IGNvZGUgY29uZmxpY3RzIGlzIHN1cHBvcnRlZC4KKyAgIEh1bWFuV2FyZSBicmFpbGxlIGRyaXZlciBjaGFuZ2VzOgorICAgICAgU2V2ZXJhbCBVU0IgY29ubmVjdGlvbiBwcm9ibGVtcyBoYXZlIGJlZW4gcmVzb2x2ZWQuCisgICAgICBUaGUgbmV3ZXIgSElELWJhc2VkIFVTQiBwcm90b2NvbCBpcyBzdXBwb3J0ZWQuCisgICAgICBUaGUgQnJhaWxsaWFudCBCIDgwJ3MgQmx1ZXRvb3RoIGRldmljZSBuYW1lIGlzIHJlY29nbml6ZWQuCisgICBQYXBlbm1laWVyIGJyYWlsbGUgZHJpdmVyIGNoYW5nZXM6CisgICAgICBDbGlwYm9hcmQgYmluZGluZ3MgaGF2ZSBiZWVuIGFkZGVkIHRoYXQgd29yayBvbiBFTC1DIG1vZGVscy4KKyAgICAgIEJhciBiaW5kaW5ncyBmb3IgdGhlIG1lbnUgbm93IHdvcmsgb24gRUwgbW9kZWxzIHRoYXQgZG9uJ3QgaGF2ZSBzd2l0Y2hlcy4KKyAgICAgIEJpbmRpbmdzIG1heSBub3cgYmUgZGVmaW5lZCB0aGF0IHVzZSBhIHJvdXRpbmcga2V5IGFuZCBhbiBFTCBrZXkuCisgICBYV2luZG93IGJyYWlsbGUgZHJpdmVyIGNoYW5nZXM6CisgICAgICBGaXhlZC1zaXplIGZvbnQgcmVzdHJpY3Rpb25zIGhhdmUgYmVlbiByZW1vdmVkLgorICAgeGJybGFwaSBjaGFuZ2VzOgorICAgICAgQnJsdHR5IHJlc3RhcnRzIGFyZSBoYW5kbGVkLgorICAgICAgTG9ncyB3cml0dGVuIHRvIC54c2Vzc2lvbiBoYXZlIGJlZW4gaW1wcm92ZWQuCisgICBicmx0dHktdHJ0eHQgY2hhbmdlczoKKyAgICAgIFRoZSAtYiBbLS1uby1iYXNlLWNoYXJhY3RlcnNdIG9wdGlvbiBoYXMgYmVlbiBhZGRlZC4KKyAgIFN5c3RlbWQvVWRldiBjaGFuZ2VzOgorICAgICAgTXVsdGlwbGUgVVNCIGJyYWlsbGUgZGV2aWNlcyBhcmUgaGFuZGxlZCAtIGVhY2ggc3RhcnRzIGl0cyBvd24gYnJsdHR5LgorICAgICAgRGlzY29ubmVjdGluZyBhIFVTQiBicmFpbGxlIGRldmljZSBzdG9wcyB0aGUgYXNzb2NpYXRlZCBicmx0dHkuCisgICBVcGRhdGVkIFRhYmxlczoKKyAgICAgIFRoZSBlbl9DQSAoRW5nbGlzaCBDYW5hZGEpIHRleHQgdGFibGUuCisgICAgICBUaGUgemhfdHcgKENoaW5lc2UsIFRhaXdhbikgY29udHJhY3Rpb24gdGFibGUuCisKK0RlY2VtYmVyIDIyLCAyMDE1OgorIC0gQlJMVFRZIDUuMy4xIHJlbGVhc2VkOgorICAgTGludXggc2NyZWVuIGRyaXZlciBmaXg6CisgICAgICBTb21lIGNvbnNvbGVzIGNvdWxkbid0IGJlIGFjY2Vzc2VkIGR1ZSB0byBhbiBJL08gZXJyb3IuCisgICBBbmRyb2lkIGZpeDoKKyAgICAgIFRoZSBwcmVmZXJlbmNlIHNldHRpbmdzIGNhbiBiZSBzYXZlZC4KKyAgIEhJTVMgYnJhaWxsZSBkcml2ZXIgY2hhbmdlczoKKyAgICAgIEF1dG9kZXRlY3RpbmcgdGhlIGJyYWlsbGUgZGV2aWNlJ3MgbW9kZWwgaGFzIGJlZW4gaW1wcm92ZWQuCisgICAgICBLZXlzIHRoYXQgYSBtb2RlbCBkb2Vzbid0IGhhdmUgYXJlIG5vIGxvbmdlciBsaXN0ZWQgd2l0aGluIGl0cyBoZWxwIHRleHQuCisgICAgICBTdXBwb3J0IGZvciBxd2VydHkga2V5Ym9hcmRzIGhhcyBiZWVuIGltcHJvdmVkLgorICAgICAgVGhlIHNjcm9sbCBrZXkgYmluZGluZ3MgaGF2ZSBiZWVuIGhhcm1vbml6ZWQgYWNyb3NzIGFsbCBtb2RlbHMuCisgICBLZXkgdGFibGUgY2hhbmdlczoKKyAgICAgIFRoZSAtYSAoLS1hdWRpdCkgb3B0aW9uIGhhcyBiZWVuIGFkZGVkIHRvIGJybHR0eS1rdGIuCisgICAgICBEdXBsaWNhdGUga2V5IGJpbmRpbmdzIGhhdmUgYmVlbiByZW1vdmVkLgorICAgICAgVGhlICJ1cHBlcmNhc2UiIGNvbW1hbmQgbW9kaWZpZXIgaGFzIGJlZW4gcmVuYW1lZCB0byAidXBwZXIiLgorICAgICAgVGhlIGZvbGxvd2luZyBkaXJlY3RpdmVzIGhhdmUgYmVlbiBhZGRlZDoKKyAgICAgICAgIGJlZ2luVmFyaWFibGVzLCBlbmRWYXJpYWJsZXMsIGlnbm9yZSwgbGlzdFZhcmlhYmxlcworCitEZWNlbWJlciAxNSwgMjAxNToKKyAtIEJSTFRUWSA1LjMgcmVsZWFzZWQ6CisgICBHZW5lcmFsIGZpeGVzOgorICAgICAgVGhlIG1pc3Npbmcga2V5IGV2ZW50IChzdHVjayBrZXkpIHByb2JsZW0gaGFzIGJlZW4gcmVzb2x2ZWQuCisgICAgICBUaGUgYnJhaWxsZSBkaXNwbGF5IGlzIG5vdyBpbml0aWFsaXplZCB3aGVuIHRoZSAtcSAoLS1xdWlldCkgb3B0aW9uIGlzIHVzZWQuCisgICAgICBQbGF5aW5nIGFsZXJ0IHR1bmVzIGhhcyBiZWVuIG1vdmVkIHRvIGEgZGVkaWNhdGVkIHRocmVhZC4KKyAgICAgIFBDTSAoc291bmQgY2FyZCkgdG9uZSBnZW5lcmF0aW9uIGlzIG5vdyB3YXkgbW9yZSBlZmZpY2llbnQuCisgICAgICBQcm9ncmFtLXJlbGF0aXZlIHBhdGhzIGFyZSBubyBsb25nZXIgdXNlZCBmb3IgcmVsYXRpdmUgcGF0aHMgc3BlY2lmaWVkIHZpYQorICAgICAgICAgY29tbWFuZCBsaW5lIG9wdGlvbnMgb3IgY29uZmlndXJhdGlvbiBmaWxlIGRpcmVjdGl2ZXMuCisgICAgICBFeHBsaWNpdCBwYXRocyBmb3IgdGFibGVzIG5vIGxvbmdlciBjb25zaWRlciB0aGUgdGFibGVzIGRpcmVjdG9yeSBwYXRoLgorICAgICAgVGhlIC1VICgtLXVwZGF0YWJsZS1kaXJlY3RvcnkpIG9wdGlvbiBoYXMgYmVlbiBhZGRlZCAoaXQgdXNlZCB0byBiZQorICAgICAgICAgaGFyZC1jb2RlZCB0byAvdmFyL2xpYi9icmx0dHkvKS4KKyAgICAgIEJyYWlsbGUgZHJpdmVyIHBhcmFtZXRlcnMgbWF5IGJlIHNwZWNpZmllZCB2aWEgdGhlIGZvdXJ0aCBib290IHBhcmFtZXRlcgorICAgICAgICAgKHVzZSArIHRvIHNlcGFyYXRlIHRoZW0pLgorICAgICAgVGhlIHNwZWVjaCBGSUZPIG9uIExpbnV4IGhhcyBiZWVuIG1vdmVkIHRvIHRoZSB3cml0YWJsZSBkaXJlY3RvcnkgKHNlZSAtVyAtCisgICAgICAgICB0aGUgZGVmYXVsdCBpcyAvdmFyL3J1bi9icmx0dHkvKS4KKyAgICAgIFRoZSBDb25zb2xlIEJlbGwgQWxlcnQgcHJlZmVyZW5jZSBoYXMgYmVlbiBhZGRlZCAtIHdoZW4gZW5hYmxlZCwgYW5kIHdpdGgKKyAgICAgICAgIHRoZSB0dW5lIGRldmljZSBzZXQgdG8gUENNLCB0aGUgY29uc29sZSBiZWxsIGNhbiBiZSBoZWFyZCBldmVuIGlmIHRoZSBQQworICAgICAgICAgc3BlYWtlciBlaXRoZXIgZG9lc24ndCBleGlzdCBvciBpc24ndCBzdXBwb3J0ZWQuCisgICBOZXcgYW5kIGNoYW5nZWQgY29tbWFuZHM6CisgICAgICBUaGUgdG9MZWZ0IG1vZGlmaWVyIGNhbiBiZSBhcHBsaWVkIHRvIGFueSB2ZXJ0aWNhbCBtb3Rpb24gY29tbWFuZC4KKyAgICAgIFRoZSBBbHRHciAoUmlnaHQgQWx0KSBhbmQgR1VJIChXaW5kb3dzKSBrZXlzIGFyZSBzdXBwb3J0ZWQuCisgICAgICBUaGUgUFJQR1JQSCAoZ28gdG8gcHJldmlvdXMgcGFyYWdyYXBoKSBjb21tYW5kIG5hdmlnYXRlcyB0byB0aGUgZmlyc3QgbGluZQorICAgICAgICAgb2YgdGhlIGN1cnJlbnQgcGFyYWdyYXBoIChvciwgaWYgYWxyZWFkeSBvbiBpdCwgdG8gdGhlIGZpcnN0IGxpbmUgb2YgdGhlCisgICAgICAgICBwcmV2aW91cyBwYXJhZ3JhcGgpIHJhdGhlciB0aGFuIHRvIHRoZSBsYXN0IGxpbmUgb2YgdGhlIHByZXZpb3VzCisgICAgICAgICBwYXJhZ3JhcGguCisgICAgICBUaGUgc3BhY2UgYmFyIGlzIGEgcmVhbCBzcGFjZSAocmF0aGVyIHRoYW4gYSBicmFpbGxlIGNoYXJhY3RlciB3aXRoIG5vIGRvdHMpCisgICAgICAgICB3aGVuIHRoZSBrZXlib2FyZCBpcyBpbiBVbmljb2RlIGJyYWlsbGUgaW5wdXQgbW9kZS4KKyAgICAgIERpc2FibGluZyB0aGUgYnJhaWxsZSBrZXlib2FyZCBub3cgZGlzYWJsZXMgYWxsIGJyYWlsbGUgaW5wdXQgY29tbWFuZHMuCisgICAgICBOZXcgY29tbWFuZHMgdGhhdCBhbHdheXMgc2tpcCBmb3J3YXJkL2JhY2t3YXJkIHRvIGEgbm9uYmxhbmsgYnJhaWxsZSB3aW5kb3c6CisgICAgICAgICBOWE5CV0lOLCBQUk5CV0lOCisgICAgICBTdGlja3kgbW9kaWZpZXIgY29tbWFuZCBpbXByb3ZlbWVudHM6CisgICAgICAgICBDeWNsZSB0aHJvdWdoIG5leHQsb24sb2ZmIChyYXRoZXIgdGhhbiBqdXN0IG9uLG9mZikgLSBuZXh0IG1lYW5zIGp1c3QgZm9yCisgICAgICAgICB0aGUgbmV4dCB0eXBlZCBjaGFyYWN0ZXIsIGFuZCB0aW1lcyBvdXQgYWZ0ZXIgZml2ZSBzZWNvbmRzLgorICAgICAgTmV3IGNvbW1hbmRzIHRvIHN0YXJ0L3N0b3AgdGhlIGJyYWlsbGUsc3BlZWNoLHNjcmVlbiBkcml2ZXJzOgorICAgICAgICAgQlJMX1NUQVJULCBCUkxfU1RPUCwgU1BLX1NUQVJULCBTUEtfU1RPUCwgU0NSX1NUQVJULCBTQ1JfU1RPUAorICAgICAgTmV3IGNvbW1hbmRzIGZvciBhdHRhY2hpbmcgdG8gYSBzcGVjaWZpYyAobm90IG5lY2Vzc2FyaWx5IGN1cnJlbnQpIGNvbnNvbGU6CisgICAgICAgICBTRUxFQ1QsIFNFTEVDVF9ORVhULCBTRUxFQ1RfUFJFVgorICAgQWxiYXRyb3NzIGJyYWlsbGUgZHJpdmVyIGNoYW5nZXM6CisgICAgICBEZXRlY3Rpb24gb2Ygbm8gcGVuZGluZyBpbnB1dCBoYXMgYmVlbiBpbXByb3ZlZC4KKyAgICAgIFJlY29nbml6aW5nIGEgZmFpbGVkIGF1dG9kZXRlY3Rpb24gcHJvYmUgaGFzIGJlZW4gaW1wcm92ZWQuCisgICBBbHZhIGJyYWlsbGUgZHJpdmVyIGNoYW5nZXM6CisgICAgICBFc3RhYmxpc2hpbmcgYSBCbHVldG9vdGggY29ubmVjdGlvbiBpcyBub3cgc3VwcG9ydGVkIGZvciBtb3JlIG1vZGVscy4KKyAgIEJhdW0gYnJhaWxsZSBkcml2ZXIgY2hhbmdlczoKKyAgICAgIFRoZSBzdGFuZGFyZCBicmFpbGxlIGtleWJvYXJkIGNob3JkcyBhcmUgc3VwcG9ydGVkLgorICAgICAgVGhlIFJlZnJlc2hhYnJhaWxsZSBoYXMgYW4gaW1wcm92ZWQga2V5IHRhYmxlLgorICAgICAgVGhlIENvbm55IGhhcyBhbiBpbXByb3ZlZCBrZXkgdGFibGUuCisgICAgICBUaGUgMTItY2VsbCBWYXJpby9CcmFpbGxlQ29ubmVjdCBub3cgdXNlcyB0aGUgQ29ubnkga2V5IHRhYmxlLgorICAgICAgVGhlIHByb3RvY29scz0gcGFyYW1ldGVyIGhhcyBiZWVuIHJlbmFtZWQgdG8gcHJvdG9jb2w9IGFuZCBhY2NlcHRzIGEKKyAgICAgICAgIHNwZWNpZmljIHByb3RvY29sIG5hbWUgKGRlZmF1bHQsIGVzY2FwZSwgaGlkMSwgaGlkMiwgaHQsIHBiKS4KKyAgICAgIFN1cHBvcnQgZm9yIHRoZSBmb2xsb3dpbmcgbW9kZWxzIGhhcyBiZWVuIGFkZGVkOgorICAgICAgICAgVmFyaW9VbHRyYSwgUHJvbnRvISwgQnJhaWxsaWFudDIsIFN1cGVyVmFyaW8yLCBISUQgUmVmcmVzaGFicmFpbGxlIDE4CisgICBCcmFpbGxlTWVtbyBicmFpbGxlIGRyaXZlciBjaGFuZ2VzOgorICAgICAgTW9kZWwgYXV0b2RldGVjdGlvbiBoYXMgYmVlbiBpbXByb3ZlZC4KKyAgIEZyZWVkb21TY2llbnRpZmljIGJyYWlsbGUgZHJpdmVyIGNoYW5nZXM6CisgICAgICBUaGUga2V5IHRhYmxlcyBmb3IgbmV3ZXIgbW9kZWxzIHVzZSB0aGUgbmV3ZXIga2V5IG5hbWVzOgorICAgICAgICAgVGhlIHdoZWVscyBhcmUgY2FsbGVkIE5hdiBrZXlzLgorICAgICAgICAgVGhlIEdERiBrZXlzIGFyZSBjYWxsZWQgU2VsZWN0b3Iga2V5cy4KKyAgIEhhbmR5VGVjaCBicmFpbGxlIGRyaXZlciBjaGFuZ2VzOgorICAgICAgVG91Y2gtYmFzZWQgbmF2aWdhdGlvbiBoYXMgYmVlbiBpbXBsZW1lbnRlZCBmb3IgdGhlIGZvbGxvd2luZyBtb2RlbHM6CisgICAgICAgICBNb2R1bGFyIEV2b2x1dGlvbiwgQWN0aXZlIEJyYWlsbGUsIEFjdGl2ZSBTdGFyCisgICBISU1TIGJyYWlsbGUgZHJpdmVyIGNoYW5nZXM6CisgICAgICBGdW5jdGlvbiBrZXlzIGNhbiBiZSBlbXVsYXRlZCBieSBwcmVzc2luZyBzcGFjZSB3aXRoIGEgcm91dGluZyBrZXkuCisgICAgICBUaGUgQnJhaWxsZSBTZW5zZSBVMiBpcyByZWNvZ25pemVkLgorICAgICAgVGhlIEJyYWlsbGUgRWRnZSBzY3JvbGwga2V5cyBhcmUgbm93IG1hcHBlZCBjb3JyZWN0bHkuCisgICBIdW1hbldhcmUgYnJhaWxsZSBkcml2ZXIgY2hhbmdlczoKKyAgICAgIEJpbmRpbmdzIGZvciBhZGRpbmcgQWx0LCBDb250cm9sLCBvciBib3RoIHRvIGEgZnVuY3Rpb24ga2V5IGhhdmUgYmVlbiBhZGRlZC4KKyAgIE1EViBicmFpbGxlIGRyaXZlciBjaGFuZ2VzOgorICAgICAgVGhlIGJpbmRpbmdzIGFyZSBub3cgZGVmaW5lZCB3aXRoaW4ga2V5IHRhYmxlcy4KKyAgICAgIFN1cHBvcnQgZm9yIHRoZSBmb2xsb3dpbmcgbW9kZWxzIGhhcyBiZWVuIGFkZGVkOgorICAgICAgICAgTGlsbGkgQmx1LCBNQjI0OCwgTUI0MDgrCisgICBQYXBlbm1laWVyIGJyYWlsbGUgZHJpdmVyIGNoYW5nZXM6CisgICAgICBUaGUgc3RhdHVzIGtleSBiaW5kaW5ncyBoYXZlIGJlZW4gc3RhbmRhcmRpemVkIGFjcm9zcyB0aGUgdmFyaW91cyBtb2RlbHMuCisgICAgICBNaW5vciBjaGFuZ2VzIHRvIHRoZSBmcm9udCBrZXkgYmluZGluZ3MgKGZvciBtb2RlbHMgd2l0aCAxMykuCisgICAgICBYVCBrZXlib2FyZCBzdXBwb3J0IGhhcyBiZWVuIGZpeGVkLgorICAgWFdpbmRvdyBicmFpbGxlIGRyaXZlciBjaGFuZ2VzOgorICAgICAgU3VwcG9ydCBmb3IgdGhlIFVuaWNvZGUgYnJhaWxsZSBjaGFyYWN0ZXJzIGhhcyBiZWVuIGFkZGVkLgorICAgQXRTcGkyIHNjcmVlbiBkcml2ZXIgY2hhbmdlczoKKyAgICAgIFRoZSB3aWRnZXQgd2l0aCBmb2N1cyBvbiBzdGFydHVwIGlzIGRldGVybWluZWQgY29ycmVjdGx5LgorICAgICAgVGhlIGN1cnJlbnRseSBmb2N1c2VkIHdpZGdldCBpcyBjYWNoZWQgZm9yIGVmZmljaWVuY3kuCisgICAgICBUaGUgc2NyZWVuIHNpemUgaXMgaW1wbGljaXRseSBpbmNyZWFzZWQgYmFzZWQgb24gdGhlIGN1cnNvcidzIGxvY2F0aW9uLgorICAgICAgVGhlIHJlbGVhc2U9ICh5ZXMsIG5vKSBwYXJhbWV0ZXIgaGFzIGJlZW4gYWRkZWQuCisgICBMaW51eCBzY3JlZW4gZHJpdmVyIGNoYW5nZXM6CisgICAgICBWR0EgZm9yZWdyb3VuZCBhbmQgYmFja2dyb3VuZCBjb2xvdXJzIGFyZSBub3cgcmVwb3J0ZWQgY29ycmVjdGx5LgorICAgICAgQSBmb250IGNoYW5nZSBub3cgdHJpZ2dlcnMgYSBicmFpbGxlIGRpc3BsYXkgdXBkYXRlLgorICAgICAgVGhlIFZUPSAobnVtYmVyKSBwYXJhbWV0ZXIgaGFzIGJlZW4gYWRkZWQgLSAwIG1lYW5zIHRoZSBjdXJyZW50IGNvbnNvbGUuCisgICAgICBTeXN0ZW1kIGlzIG5vIGxvbmdlciBibG9ja2VkIGZyb20gc3RhcnRpbmcgYSBsb2dpbiBzZXNzaW9uIG9uIGFuIHVudXNlZCB0dHkuCisgICBTY3JlZW4gc2NyZWVuIGRyaXZlciBjaGFuZ2VzOgorICAgICAgQVNDSUkgY29udHJvbCBjaGFyYWN0ZXJzIGNhbiBub3cgYmUgZW50ZXJlZC4KKyAgIEJybEFQSSBjaGFuZ2VzOgorICAgICAgVGhlIHZlcnNpb24gaXMgbm93IDAuNi40IChpdCB3YXMgMC42LjMpLgorICAgICAgQ3Vyc29yIGJsaW5raW5nIGZpbmFsbHkgd29ya3MgYWdhaW4uCisgICAgICBUaGUgYnJhaWxsZSBkaXNwbGF5IGlzIHJlZnJlc2hlZCB3aGVuZXZlciBpdCBjb21lcyBiYWNrIG9ubGluZSBpZiB0aGUgY2xpZW50CisgICAgICAgICBoYXMgZm9jdXMuCisgICBMYW5ndWFnZSBwcm9maWxlIHN1cHBvcnQgZml4ZXM6CisgICAgICBUaGUgbGFuZ3VhZ2UgcHJvZmlsZSBjYW4gbm93IGJlIGNoYW5nZWQgd2hlbiB0aGVyZSdzIG5vIGJyYWlsbGUgZGV2aWNlLgorICAgICAgVGhlIGJyYWlsbGUgZGV2aWNlIGFuZCBrZXlib2FyZCBrZXkgdGFibGUgaGVscCB0ZXh0cyBhcmUgcmVnZW5lcmF0ZWQKKyAgICAgICAgIGFjY29yZGluZyB0byB0aGUgbmV3IGxvY2FsaXphdGlvbiB3aGVuIHRoZSBsYW5ndWFnZSBwcm9maWxlIGlzIGNoYW5nZWQuCisgICBUZXh0IHRhYmxlIGNoYW5nZXM6CisgICAgICBUaGUgZW5fQ0EgKEVuZ2xpc2ggQ2FuYWRhKSB0ZXh0IHRhYmxlIGhhcyBiZWVuIHVwZGF0ZWQuCisgICAgICBUaGUgZnItdnMgKFZpc2lvQnJhaWxsZSkgdGV4dCB0YWJsZSBoYXMgYmVlbiB1cGRhdGVkLgorICAgICAgVGhlIGFsaWFzIGRpcmVjdGl2ZSBoYXMgYmVlbiBhZGRlZC4KKyAgICAgIFN1cHBvcnQgZm9yIHRoZSB2YXJpYWJsZSBhbmQgY29uZGl0aW9uYWwgZGlyZWN0aXZlcyBoYXMgYmVlbiBhZGRlZC4KKyAgICAgIFRoZSAtdSAoLS11bmRlZmluZWQpIG9wdGlvbiBoYXMgYmVlbiBhZGRlZCB0byBicmx0dHktdHRiIC0gaXQgcmVwb3J0cworICAgICAgICAgdGhlIGNoYXJhY3RlcnMgaW4gdGhlIGN1cnJlbnQgc2NyZWVuIGZvbnQgdGhhdCBhcmVuJ3QgeWV0IGRlZmluZWQgaW4gdGhlCisgICAgICAgICB0ZXh0IHRhYmxlLgorICAgICAgYnJsdHR5LXR0YiBjYW4gd3JpdGUgQyBwcmVwcm9jZXNzb3IgZm9ybWF0IChjcHApIHRhYmxlcy4KKyAgIENvbnRyYWN0aW9uIHRhYmxlIGNoYW5nZXM6CisgICAgICBUaGUgVW5pY29kZSBicmFpbGxlIGNoYXJhY3RlcnMgYXJlIG5vdyBoYW5kbGVkIGludGVybmFsbHkuCisgICAgICBUaGUgZW4tdXMtZzIgKGdyYWRlIDIgVVMgRW5nbGlzaCkgY29udHJhY3Rpb24gdGFibGUgaGFzIGJlZW4gdXBkYXRlZC4KKyAgICAgIFRoZSB6aC10dyAoVGFpd2FuIENoaW5lc2UpIGNvbnRyYWN0aW9uIHRhYmxlIGhhcyBiZWVuIHVwZGF0ZWQuCisgICBLZXkgdGFibGUgY2hhbmdlczoKKyAgICAgIE1ham9yIGNob3JkcyBrZXkgc3VidGFibGUgY2hhbmdlczoKKyAgICAgICAgIFRhYiBpcyBub3cgU3BhY2UrRG90czQ1IChpdCB3YXMgU3BhY2UrRG90czIzNTYpLgorICAgICAgICAgQmFja3NwYWNlIGlzIG5vdyBqdXN0IERvdDcsIGFuZCBFbnRlciBpcyBub3cganVzdCBEb3Q4LgorICAgICAgICAgQWRkIFNwYWNlIHRvIGdldCBqdXN0IGRvdCA3IG9yIGp1c3QgZG90IDguCisgICAgICAgICBVbmNob3JkZWQgYmluZGluZ3MgaGF2ZSBiZWVuIGFkZGVkIGZvciBuYXZpZ2F0aW5nIHRoZSBwcmVmZXJlbmNlcyBtZW51OgorICAgICAgICAgICAgRG90MTogZ28gdG8gdGhlIHByZXZpb3VzIGl0ZW0KKyAgICAgICAgICAgIERvdDQ6IGdvIHRvIHRoZSBuZXh0IGl0ZW0KKyAgICAgICAgICAgIERvdDI6IGdvIHRvIHRoZSBmaXJzdCBpdGVtCisgICAgICAgICAgICBEb3Q1OiBnbyB0byB0aGUgbGFzdCBpdGVtCisgICAgICAgICAgICBEb3QzOiBzZWxlY3QgdGhlIHByZXZpb3VzIHNldHRpbmcgZm9yIHRoZSBjdXJyZW50IGl0ZW0KKyAgICAgICAgICAgIERvdDY6IHNlbGVjdCB0aGUgbmV4dCBzZXR0aW5nIGZvciB0aGUgY3VycmVudCBpdGVtCisgICAgICAgICAgICBEb3Q3OiBnbyBiYWNrIG9uZSBsZXZlbAorICAgICAgICAgICAgRG90ODogZXhpdCB0aGUgbWVudQorICAgICAgTWlub3IgY2hhbmdlcyB0byB0aGUga2V5cGFkIGtleWJvYXJkIHRhYmxlLgorICAgICAgVGhlIGFzc2lnbkRlZmF1bHQgZGlyZWN0aXZlIGhhcyBiZWVuIGFkZGVkLgorICAgICAgVGhlIC1yICgtLXJlU3RydWN0dXJlZFRleHQpIG9wdGlvbiBoYXMgYmVlbiBhZGRlZCB0byBicmx0dHkta3RiIC0gaXQgY2F1c2VzCisgICAgICAgICB0aGUgaGVscCB0ZXh0IHRvIGJlIGZvcm1hdHRlZCBhcyByZVN0cnVjdHVyZWRUZXh0LgorICAgICAgVGhlIGhlbHAgdGV4dCBoYXMgYmVlbiBpbXByb3ZlZDoKKyAgICAgICAgIFJlbGF0ZWQgYmluZGluZ3MgaGF2ZSBiZWVuIG9yZ2FuaXplZCBpbnRvIGZ1bmN0aW9uYWwgZ3JvdXBzLgorICAgICAgICAgRWFjaCBvZiB0aGVzZSBncm91cHMgaGFzIGEgZGVzY3JpcHRpdmUgaGVhZGVyLgorICAgICAgICAgVmFyaWFudHMgb2YgdGhlIHNhbWUgYmluZGluZyBhcmUgbGlzdGVkIHRvZ2V0aGVyLgorICAgICAgICAgVGhlIGJpbmRpbmdzIGZvciBIZWxwIGFuZCBMZWFybiBhcmUgaW50ZW50aW9uYWxseSBsaXN0ZWQgYXQgdGhlIHRvcC4KKyAgIEphdmEgYmluZGluZ3MgZml4ZXM6CisgICAgICBUaGUgSkRLIGhpZXJhcmNoeSBpcyBsb2NhdGVkIGV2ZW4gd2hlbiBzeW1ib2xpYyBsaW5rcyBwb2ludCB0byBpdC4KKyAgICAgIFRoZSBzdWJkaXJlY3RvcnkgY29udGFpbmluZyBtYWNoaW5lLWRlcGVuZGVudCBKTkkgZGVmaW5pdGlvbnMgaXMgaW5jbHVkZWQuCisgICBBbmRyb2lkIHVwZGF0ZXM6CisgICAgICBGOSBnb2VzIHRvIHRoZSBHbG9iYWwgQWN0aW9ucyAoUG93ZXIgT2ZmKSBkaWFsb2cgKExvbGxpcG9wIGFuZCBsYXRlcikuCisgICAgICBGMTAgaXMgdGhlIE1lbnUga2V5LgorICAgICAgVGhlIGJyYWlsbGUgZGlzcGxheSBzdGF5cyBpbiB0aGUgYWN0aXZlIHdpbmRvdyAobmV3IHByb2JsZW0gYXMgb2YgTG9sbGlwb3ApLgorICAgICAgVGhlIG9yZGVyIGluIHdoaWNoIHNjcmVlbiBlbGVtZW50cyBhcmUgcmVuZGVyZWQgaXMgbW9yZSBpbnR1aXRpdmUuCisgICAgICBDemVjaCB0cmFuc2xhdGlvbnMgaGF2ZSBiZWVuIGFkZGVkLgorICAgICAgRmlubmlzaCB0cmFuc2xhdGlvbnMgaGF2ZSBiZWVuIGFkZGVkLgorICAgV2luZG93cyB1cGRhdGVzOgorICAgICAgU3VwcG9ydCBmb3IgdGhlIFVuaWNvZGUgYnJhaWxsZSBjaGFyYWN0ZXJzIGhhcyBiZWVuIGFkZGVkLgorICAgYnJsdHR5LXR1bmUgKGZvcm1lcmx5IHR1bmV0ZXN0KSBjaGFuZ2VzOgorICAgICAgVGhlIHR1bmUgc3ludGF4IGhhcyBiZWVuIGNvbXBsZXRlbHkgY2hhbmdlZC4KKyAgICAgIFR1bmVzIGNhbiBiZSByZWFkIGZyb20gZmlsZXMuCisgICBCdWlsZCBjaGFuZ2VzOgorICAgICAgVGhlIGF1dG9jb25mIGRlcGVuZGVuY3kgaGFzIGJlZW4gdXBkYXRlZCB0byAyLjY0IChmcm9tIDIuNTMpLgorICAgICAgVGhlIGt0YnRlc3QgY29tbWFuZCBoYXMgYmVlbiByZW5hbWVkIHRvIGJybHR0eS1rdGIuCisgICAgICBUaGUgdHVuZXRlc3QgY29tbWFuZCBoYXMgYmVlbiByZW5hbWVkIHRvIGJybHR0eS10dW5lLgorICAgICAgVGhlIGJybHR0eS1hdGIsIGJybHR0eS1rdGIsIGFuZCBicmx0dHktdHVuZSBjb21tYW5kcyBhcmUgaW5zdGFsbGVkLgorICAgICAgS2V5IHRhYmxlIGhlbHAgdGV4dCBpcyByZW5kZXJlZCBpbiBIVE1MIChhcyB3ZWxsIGFzIGluIHBsYWluIHRleHQpLgorICAgICAgU3lzdGVtZCBzZXJ2aWNlIHJlYWR5IG5vdGlmaWNhdGlvbiAodmlhIHR5cGU9bm90aWZ5KSBpcyBzdXBwb3J0ZWQuCisgICAgICBta3dpbiBjb21tYW5kIHVwZGF0ZXM6CisgICAgICAgICBUaGUgLUMgKEN5Z3dpbiByb290IGRpcmVjdG9yeSkgb3B0aW9uIGhhcyBiZWVuIGFkZGVkLgorICAgICAgICAgQSBzYWZlLCByZWxhdGl2ZSBwYXRoIHRvIHRoZSBjb25maWd1cmUgc2NyaXB0IGNhbiBub3cgYmUgdXNlZC4KKworTm92ZW1iZXIgNiwgMjAxNDoKKyAtIEJSTFRUWSA1LjIgcmVsZWFzZWQ6CisgICBHZW5lcmFsIEZpeGVzOgorICAgICAgVW5leHBlY3RlZCBjdXJzb3IgdHJhY2tpbmcgd2hlbiBzd2l0Y2hpbmcgdmlydHVhbCBjb25zb2xlcyBoYXMgYmVlbiByZXNvbHZlZC4KKyAgICAgIFRoZSBQQVNTUFMyIGNvbW1hbmQgaGFzIChmaW5hbGx5KSBiZWVuIGltcGxlbWVudGVkLgorICAgICAgQW4gaW5mcmFzdHJ1Y3R1cmUgZm9yIGRlZmluaW5nIGN1c3RvbSBjb21tYW5kcyBoYXMgYmVlbiBhZGRlZC4KKyAgICAgIEEgYnJhaWxsZSB1cGRhdGUgaXMgbm93IGZvcmNlZCB3aGVuIHRoZSBicmFpbGxlIGRldmljZSBjb21lcyBiYWNrIG9ubGluZS4KKyAgICAgIEFsbCBzcGVlY2gtcmVsYXRlZCBkZWxheXMgaGF2ZSBiZWVuIHJlbW92ZWQuCisgICAgICBMYW5ndWFnZSBwcm9maWxlcyBoYXZlIGJlZW4gaW1wbGVtZW50ZWQgKHNlZSBSRUFETUUuUHJvZmlsZXMpLgorICAgICAgVGhlIGZvbGxvd2luZyBsb2cgY2F0ZWdvcmllcyBoYXZlIGJlZW4gYWRkZWQ6CisgICAgICAgICBicmxkcnYgIEJyYWlsbGUgRHJpdmVyIEV2ZW50cworICAgICAgICAgc3BrZHJ2ICBTcGVlY2ggRHJpdmVyIEV2ZW50cworICAgICAgICAgc2NyZHJ2ICBTY3JlZW4gRHJpdmVyIEV2ZW50cworICAgICAgICAgYWxsICAgICBhIHBzZXVkby1jYXRlZ29yeSB0aGF0IGVuYWJsZXMgYWxsIGNhdGVnb3JpZXMKKyAgICAgICAgIC1uYW1lICAgZGlzYWJsZSBhIGxvZyBjYXRlZ29yeSAoZXNwZWNpYWxseSB1c2VmdWwgYWZ0ZXIgc3BlY2lmeWluZyBhbGwpCisgICBOZXcgQ29tbWFuZHM6CisgICAgICBCUkxLQkQgICAgICAgICAgICAgICAgIFNldCB0aGUgYnJhaWxsZSBrZXlib2FyZCBlbmFibGVkL2Rpc2FibGVkLgorICAgICAgUEFTVEVfSElTVE9SWSAgICAgICAgICBwYXN0ZSBmcm9tIHRoZSBjbGlwYm9hcmQncyBoaXN0b3J5CisgICAgICBTRVRfVEVYVF9UQUJMRSAgICAgICAgIGRpcmVjdGx5IHNlbGVjdCBhIHRleHQgdGFibGUKKyAgICAgIFNFVF9BVFRSSUJVVEVTX1RBQkxFICAgZGlyZWN0bHkgc2VsZWN0IGFuIGF0dHJpYnV0ZXMgdGFibGUKKyAgICAgIFNFVF9DT05UUkFDVElPTl9UQUJMRSAgZGlyZWN0bHkgc2VsZWN0IGEgY29udHJhY3Rpb24gdGFibGUKKyAgICAgIFNFVF9LRVlCT0FSRF9UQUJMRSAgICAgZGlyZWN0bHkgc2VsZWN0IGEga2V5Ym9hcmQgdGFibGUKKyAgICAgIFNFVF9MQU5HVUFHRV9QUk9GSUxFICAgZGlyZWN0bHkgc2VsZWN0IGEgbGFuZ3VhZ2UgcHJvZmlsZQorICAgICAgQUxFUlQgICAgICAgICAgICAgICAgICBwbGF5IGEgc3BlY2lmaWMgYWxlcnQgdHVuZSAodXNlZCBpbnRlcm5hbGx5KQorICAgTmV3IEJyYWlsbGUgRHJpdmVyczoKKyAgICAgIFRoZSBIZWRvIFtoZF0gZHJpdmVyIGhhcyBiZWVuIGFkZGVkIChNb2JpbExpbmUgYW5kIFByb2ZpbExpbmUgbW9kZWxzKS4KKyAgIEFsdmEgQnJhaWxsZSBEcml2ZXI6CisgICAgICBUaGUgQkMncyBXaW5kb3dzIGtleSBoYXMgYmVlbiBib3VuZCB0byB0aGUgRXNjYXBlIGtleS4KKyAgICAgIEtleSBSZXBlYXQgYW5kIFNlY29uZGFyeSBDdXJzb3IgUm93IEVtdWxhdGlvbiBhcmUgbm93IGF1dG9tYXRpY2FsbHkgZGlzYWJsZWQuCisgICAgICBUaGUgZHJpdmVyIGhhcyBiZWVuIHVwZGF0ZWQgdG8gdXNlIG5ld2VyIGNvcmUgZmFjaWxpdGllcy4KKyAgIEJyYWlsbGVNZW1vIEJyYWlsbGUgRHJpdmVyOgorICAgICAgVGhlIGtleSBiaW5kaW5ncyBoYXZlIGJlZW4gY2hhbmdlZC4KKyAgICAgIFRoZSBCTSBTbWFydCBjYW4gbm93IGNvbm5lY3QgdmlhIFVTQi4KKyAgIEJyYWlsbGVOb3RlIEJyYWlsbGUgRHJpdmVyOgorICAgICAgVGhlIEFQRVggaXMgbm93IHJlY29nbml6ZWQgd2hlbiBjb25uZWN0ZWQgdmlhIFVTQi4KKyAgICAgIFRoZSBBUEVYIHJvdXRpbmcga2V5cyBhcmUgbm93IGhhbmRsZWQuCisgICAgICBUZXh0IGlucHV0IGluIElucHV0IE1vZGUgaXMgbm93IHN1cHBvcnRlZC4KKyAgIEV1cm9CcmFpbGxlIEJyYWlsbGUgRHJpdmVyOgorICAgICAgVGhlIFByb3RvY29sPSBwYXJhbWV0ZXIgbm93IHJlY29nbml6ZXMgImVzeXNpcmlzIi4KKyAgICAgIEEgbnVtYmVyIG9mIFVTQiBjb25uZWN0aXZpdHkgaXNzdWVzIGhhdmUgYmVlbiByZXNvbHZlZC4KKyAgIEZyZWVkb21TY2llbnRpZmljIEJyYWlsbGUgRHJpdmVyOgorICAgICAgQSBudW1iZXIgb2YgVVNCIGNvbm5lY3Rpdml0eSBpc3N1ZXMgaGF2ZSBiZWVuIHJlc29sdmVkLgorICAgSGFuZHlUZWNoIEJyYWlsbGUgRHJpdmVyOgorICAgICAgVGhlIGtleSBjb21iaW5hdGlvbiBMZWZ0U3BhY2UrRG90NyBoYXMgYmVlbiBib3VuZCB0byB0aGUgQmFja3NwYWNlIGtleS4KKyAgICAgIFN1cHBvcnQgZm9yIHRoZSBmb2xsb3dpbmcgbmV3IG1vZGVscyBoYXMgYmVlbiBhZGRlZDoKKyAgICAgICAgIEFjdGl2ZSBTdGFyIDQwLCBNb2R1bGFyIENvbm5lY3QgODgsIENvbm5lY3QgQnJhaWxsZSA0MAorICAgSXJpcyBCcmFpbGxlIERyaXZlcjoKKyAgICAgIEEgcG9zc2libGUgY3Jhc2ggd2hlbiB3b2tlbiB1cCBpbiBwYWNrZXQgZm9yd2FyZCBtb2RlIGhhcyBiZWVuIHJlc29sdmVkLgorICAgICAgS2V5IGJpbmRpbmdzIGhhdmUgYmVlbiBhZGRlZCBmb3IgdGhlIChuZXcpIFBBU1RFX0hJU1RPUlkgY29tbWFuZC4KKyAgICAgIFRoZSBMYXRjaERlbGF5PSBwYXJhbWV0ZXIgaGFzIGJlZW4gYWRkZWQuCisgICAgICBUaGUgZHJpdmVyIGhhcyBiZWVuIHVwZGF0ZWQgdG8gdXNlIG5ld2VyIGNvcmUgZmFjaWxpdGllcy4KKyAgIE1ldGVjIEJyYWlsbGUgRHJpdmVyOgorICAgICAgU3VwcG9ydCBmb3Igc3RhdHVzIGNlbGxzIGhhcyBiZWVuIGFkZGVkLgorICAgICAgVGhlIGRyaXZlciBoYXMgYmVlbiB1cGRhdGVkIHRvIHVzZSBuZXdlciBjb3JlIGZhY2lsaXRpZXMuCisgICBQYXBlbm1laWVyIEJyYWlsbGUgRHJpdmVyOgorICAgICAgU3VwcG9ydCBmb3IgdGhlIExpdmUgYW5kIExpdmUrIG1vZGVscyBoYXMgYmVlbiBhZGRlZC4KKyAgICAgIFN1cHBvcnQgZm9yIGtleWJvYXJkcyBpbiBXaW5kb3dzIG1vZGUgaGFzIGJlZW4gYWRkZWQuCisgICAgICBUaGUgdHdvIGJyYWlsbGUga2V5Ym9hcmQgdGh1bWIga2V5cyBoYXZlIGJlZW4gcmVtYXBwZWQ6CisgICAgICAgICBMZWZ0VGh1bWIgbm93IGZ1bmN0aW9ucyBhcyB0aGUgY29udHJvbCBrZXkuCisgICAgICAgICBSaWdodFRodW1iIG5vdyBmdW5jdGlvbnMgYXMgdGhlIGxlZnQgYWx0IGtleS4KKyAgIFRTSSBCcmFpbGxlIERyaXZlcjoKKyAgICAgIEtleSB0YWJsZXMgKHJhdGhlciB0aGFuIGhhcmQtY29kZWQgYmluZGluZ3MpIGFyZSBub3cgdXNlZC4KKyAgICAgIFRoZSByZXBlYXQgZGVsYXkgYW5kIHJhdGUgY2FuIG5vdyBiZSBjb250cm9sbGVkIGZyb20gdGhlIHByZWZlcmVuY2VzIG1lbnUuCisgICAgICBUaGUgSGlnaEJhdWQ9eWVzL25vIHBhcmFtZXRlciBoYXMgYmVlbiBhZGRlZC4KKyAgICAgIFRoZSBTZXRCYXVkPSBwYXJhbWV0ZXIgaGFzIGJlZW4gYWRkZWQuCisgICAgICBUaGUgZHJpdmVyIGhhcyBiZWVuIHVwZGF0ZWQgdG8gdXNlIG5ld2VyIGNvcmUgZmFjaWxpdGllcy4KKyAgIEJybEFQSSBVcGRhdGVzOgorICAgICAgTm93IGF0IHJlbGVhc2UgMC42LjMuCisgICAgICBTdXBwb3J0IGZvciB0aGUgWERHX1ZUTlIgZW52aXJvbm1lbnQgdmFyaWFibGUgaGFzIGJlZW4gYWRkZWQuCisgICBVU0IgVXBkYXRlczoKKyAgICAgIEFsbCBlbmRwb2ludCBJL08gaXMgbm93IGRlZmVycmVkIHVudGlsIGFmdGVyIHRoZSBzdHJpbmdzIGhhdmUgYmVlbiByZWFkLgorICAgICAgVGhlIHN0cmluZ3MgYXJlIG5vdyBlbmNvZGVkIGluIFVURi04IChyYXRoZXIgdGhhbiBpbiBMYXRpbjEpLgorICAgICAgQXN5bmNocm9ub3VzIGVuZHBvaW50IGlucHV0IGVycm9ycyBhcmUgbm93IGRldGVjdGVkLgorICAgICAgRGV0YWNoaW5nIHRoZSBrZXJuZWwncyBkcml2ZXIgdmlhIGxpYnVzYiBpcyBub3cgc3VwcG9ydGVkLgorICAgICAgRGV0YWNoaW5nIHRoZSBrZXJuZWwncyBkcml2ZXIgdmlhIGxpYnVzYi0xLjAgaXMgbm93IHN1cHBvcnRlZC4KKyAgICAgIFJlYWRpbmcgZnJvbSBhbiBlbmRwb2ludCB2aWEgbGlidXNiLTEuMCBub3cgd29ya3MgYWdhaW4uCisgICAgICBOYXRpdmUgTGludXggc3VwcG9ydCBub3cgd29ya3Mgb24gYmlnIGVuZGlhbiBwbGF0Zm9ybXMuCisgICAgICBUaGUgYnJhaWxsZSBkcml2ZXIgaXMgcmVzdGFydGVkIG9uIExpbnV4IGlmIHRoZSBzZXJpYWwgYWRhcHRlciBpcyB1bnBsdWdnZWQuCisgICBQcmVmZXJlbmNlcyBNZW51IENoYW5nZXM6CisgICAgICBUaGUgIlNhdmUgb24gRXhpdCIgc2VsZWN0b3IgaGFzIGJlZW4gbW92ZWQgYmFjayB0byB0aGUgdG9wIG9mIHRoZSByb290IG1lbnUuCisgICAgICBUaGUgTUVOVV9QUkVWX0xFVkVMIGNvbW1hbmQgd2hlbiBpbiB0aGUgcm9vdCBtZW51IG5vdyBleGl0cyB0aGUgbWVudS4KKyAgICAgIEZpbGUgZXh0ZW5zaW9ucyBhcmUgbm8gbG9uZ2VyIHNob3duIGluIHRoZSB0YWJsZSBzZWxlY3RvcnMuCisgICAgICBUaGUgS2V5Ym9hcmQgVGFibGUgc2VsZWN0b3IgaGFzIGJlZW4gYWRkZWQuCisgICAgICBUaGUgUHJvZmlsZXMgc3VibWVudSBoYXMgYmVlbiBhZGRlZC4KKyAgICAgIFRoZSBCdWlsZCBJbmZvcm1hdGlvbiBhZHZhbmNlZCBzdWJtZW51IGhhcyBiZWVuIGFkZGVkLgorICAgICAgVGhlIFRvb2xzIGFkdmFuY2VkIHN1Ym1lbnUgaGFzIGJlZW4gYWRkZWQuCisgICBUZXh0IFRhYmxlczoKKyAgICAgIG5vLW91YiAoTm9yd2VnaWFuKSBoYXMgYmVlbiByZW5hbWVkIHRvIG5vLW91cC4KKyAgICAgIG5vLW91cCBpcyBub3cgdGhlIGRlZmF1bHQgTm9yd2VnaWFuIHRhYmxlLgorICAgQ29udHJhY3Rpb24gVGFibGVzOgorICAgICAgVW5pY29kZSBjb21iaW5pbmcgY2hhcmFjdGVycyBhcmUgbm93IGhhbmRsZWQuCisgICAgICBCZXN0IGZpdCAocmF0aGVyIHRoYW4gZXhwbGljaXQpIGNoYXJhY3RlciBtYXRjaGluZyBpcyBub3cgZG9uZS4KKyAgICAgIFRoZSAiY29udHJhY3Rpb24iIG9wY29kZSBubyBsb25nZXIgYXBwbGllcyBpZiBldmVuIG9uZSBub24tcHVuY3R1YXRpb24KKyAgICAgICAgIGNoYXJhY3RlciBlaXRoZXIgcHJlY2VkZXMgb3IgZm9sbG93cyB0aGUgc2VxdWVuY2UuCisgICAgICBVcGRhdGVkIFRhYmxlczoKKyAgICAgICAgIGRlLWt1cnpzY2hyaWZ0IChHZXJtYW4pCisgICAgICAgICBlbi11cy1nMiAoRW5nbGlzaCBVUyBHcmFkZSAyKQorICAgS2V5IFRhYmxlczoKKyAgICAgIENvbnRleHRzIGNhbiBub3cgaGF2ZSBtZWFuaW5nZnVsIG5hbWVzLgorICAgICAgSW5jbHVkaW5nIGEgc3VidGFibGUgY2FuIG5vIGxvbmdlciBjaGFuZ2UgdGhlIGNvbnRleHQgb2YgdGhlIGluY2x1ZGluZyB0YWJsZS4KKyAgIEFuZHJvaWQgQ2hhbmdlczoKKyAgICAgIFRoZSB2ZXJzaW9uIGNvZGUgYW5kIHZlcnNpb24gbmFtZSBhcmUgbm93IHNldC4KKyAgICAgIFRoZSBvY2Nhc2lvbmFsIGNyYXNoIG9uIHNlcnZpY2Ugc3RhcnR1cCBoYXMgYmVlbiByZXNvbHZlZC4KKyAgICAgIEJsdWV0b290aCBkZXZpY2VzIHRoYXQgZG9uJ3QgaW1wbGVtZW50IHNlcnZpY2UgZGlzY292ZXJ5IGFyZSBub3cgc3VwcG9ydGVkLgorICAgRE9TIENoYW5nZXM6CisgICAgICBUaGUgY29uZmlndXJhdGlvbiBmaWxlIGhhcyBiZWVuIHJlbmFtZWQgdG8gYnJsdHR5LmNmZyAoZnJvbSBicmx0dHkuY29uKS4KKyAgICAgIFRoZSBsb2cgZmlsZSBpcyBub3cgY3JlYXRlZCBpbiBCUkxUVFkncyB0b3AtbGV2ZWwgZGlyZWN0b3J5LgorICAgICAgVGhlIGxvZyBmaWxlIGlzIG5vdyB3cml0dGVuIGNsZWFubHkuCisgICAgICBUaGUgInBhZ2UgZmF1bHQgb24gcHJvZ3JhbSB0ZXJtaW5hdGlvbiIgcHJvYmxlbSBoYXMgYmVlbiByZXNvbHZlZC4KKyAgICAgIFRoZSBta2Rvc2FyYyBhbmQgbWtkb3N0b29scyBzY3JpcHRzIGhhdmUgYmVlbiBhZGRlZC4KKyAgIFdpbmRvd3MgQ2hhbmdlczoKKyAgICAgIFRoZSBta3dpbiBzY3JpcHQgaGFzIGJlZW4gbWFkZSBtdWNoIG1vcmUgZmxleGlibGUuCisgICAgICBicmx0dHkuaW5mIGhhcyBiZWVuIHJlbmFtZWQgdG8gYnJsdHR5LWxpYnVzYi5pbmYuCisgICAgICBicmx0dHkubnNpIGhhcyBiZWVuIHJlbmFtZWQgdG8gbGlidXNiLm5zaS4KKyAgIEJ1aWxkIENoYW5nZXM6CisgICAgICBUaGUgLS13aXRoLWtleWJvYXJkLXBhY2thZ2Ugb3B0aW9uIGhhcyBiZWVuIHJlbmFtZWQgdG8gLS13aXRoLWtiZC1wYWNrYWdlLgorICAgICAgVGhlIFBLR19DT05GSUcgZW52aXJvbm1lbnQgdmFyaWFibGUgKHBrZy1jb25maWcgY29tbWFuZCBwYXRoKSBpcyBob25vdXJlZC4KKyAgICAgIEEgcGF0Y2ggZm9yIHNjcmVlbi00LjIuMSBoYXMgYmVlbiBhZGRlZC4KKyAgICAgIFRoZSB0YWJsZXMgaGF2ZSBiZWVuIG1vdmVkIGludG8gc2VwYXJhdGUgc3ViZGlyZWN0b3JpZXMgb2YgL2V0Yy9icmx0dHkvOgorICAgICAgICAgQXR0cmlidXRlcy8gICBhdHRyaWJ1dGVzIHRhYmxlcworICAgICAgICAgQ29udHJhY3Rpb24vICBjb250cmFjdGlvbiB0YWJsZXMKKyAgICAgICAgIElucHV0LyAgICAgICAgYnJhaWxsZSBkcml2ZXIgdGFibGVzCisgICAgICAgICBLZXlib2FyZC8gICAgIGtleWJvYXJkIHRhYmxlcworICAgICAgICAgVGV4dC8gICAgICAgICB0ZXh0IHRhYmxlcworCitNYXJjaCAyNywgMjAxNDoKKyAtIEJSTFRUWSA1LjEgcmVsZWFzZWQ6CisgICBHZW5lcmFsIENoYW5nZXM6CisgICAgICBBbiBhbGVydCAoMiBiZWVwcyBldmVyeSAzMCBzZWNvbmRzKSBpcyBub3cgcGxheWVkIHdoZW4gdGhlIHNjcmVlbiBpcyBmcm96ZW4uCisgICAgICBTYXZpbmcgdGhlIHByZWZlcmVuY2VzIGZpbGUgbm93IGFkZHMgY29tbWVudHMgc2hvd2luZyB0aGUgcG9zc2libGUgdmFsdWVzCisgICAgICAoYW5kIHRoZSBkZWZhdWx0IHZhbHVlKSBmb3IgZWFjaCBwcm9wZXJ0eS4KKyAgICAgIFVTQiBkZXZpY2UgaWRlbnRpZmllcnMgbm93IHN1cHBvcnQgdGhlIGdlbmVyaWNEZXZpY2VzPSAoeWVzLCBubykgcGFyYW1ldGVyLgorICAgQ29tbWFuZCBDaGFuZ2VzOgorICAgICAgVW5pY29kZSBicmFpbGxlIGRvdHMgaW5wdXQgaXMgbm93IHN1cHBvcnRlZDoKKyAgICAgICAgIFRoZSBCUkxVQ0RPVFMgdG9nZ2xlIGNvbW1hbmQgaGFzIGJlZW4gYWRkZWQuCisgICAgICAgICBUaGUgIkJyYWlsbGUgSW5wdXQgTW9kZSIgcHJlZmVyZW5jZSBoYXMgYmVlbiBhZGRlZCB0byAiSW5wdXQgT3B0aW9ucyIuCisgICAgICBTa2lwIEJsYW5rIFdpbmRvd3Mgbm93IHdvcmtzIGxpa2UgU2tpcCBJZGVudGljYWwgTGluZXM6CisgICAgICAgICBGV0lOTFQvRldJTlJUIGFyZSB1bmNoYW5nZWQ6CisgICAgICAgICAgICBJZiBTQlcgaXMgb2ZmIHRoZW4gZG9uJ3Qgc2tpcCBibGFuayB3aW5kb3dzLgorICAgICAgICAgICAgSWYgU0JXIGlzIG9uIHRoZW4gaG9ub3VyIFNraXAgQmxhbmsgV2luZG93cyBNb2RlLgorICAgICAgICAgRldJTkxUU0tJUC9GV0lOUlRTS0lQIG5vdyB3b3JrIGFzIGZvbGxvd3M6CisgICAgICAgICAgICBJZiBTQlcgaXMgb2ZmIHRoZW4gaG9ub3VyIFNraXAgQmxhbmsgV2luZG93cyBNb2RlLgorICAgICAgICAgICAgSWYgU0JXIGlzIG9uIHRoZW4gZG9uJ3Qgc2tpcCBibGFuayB3aW5kb3dzLgorICAgVGhlIEZyZWVkb21TY2llbnRpZmljIEJyYWlsbGUgRHJpdmVyOgorICAgICAgVmFyaW91cyBwcm9ibGVtcyB3aXRoIGRldGVjdGluZyBhIGNvbm5lY3Rpb24gZXJyb3IgaGF2ZSBiZWVuIHJlc29sdmVkLgorICAgICAgQSBwcm9ibGVtIGNhdXNpbmcgYSBicmFpbGxlIGRpc3BsYXkgZnJlZXplIGhhcyBiZWVuIHJlc29sdmVkLgorICAgVGhlIFBhcGVubWVpZXIgQnJhaWxsZSBEcml2ZXI6CisgICAgICBUaGUgZm9sbG93aW5nIGJpbmRpbmdzIGhhdmUgYmVlbiBhZGRlZCBmb3IgbW9kZWxzIHdpdGggMjIgc3RhdHVzIGNlbGxzOgorICAgICAgICAgQmluZGluZyAgICAgICAgQ29tbWFuZAorICAgICAgICAgU3RhdHVzMjAgICAgICAgQlJMVUNET1RTCisgICAgICAgICBEb3Q3K1N0YXR1czIwICBCUkxVQ0RPVFMrb2ZmCisgICAgICAgICBEb3Q4K1N0YXR1czIwICBCUkxVQ0RPVFMrb24KKyAgIFRoZSBBcHBsaWNhdGlvbiBQcm9ncmFtbWluZyBJbnRlcmZhY2UgKEJybEFQSSk6CisgICAgICBUaGUgdmVyc2lvbiBoYXMgYmVlbiBpbmNyZWFzZWQgdG8gMC42LjIgKGZyb20gMC42LjEpLgorICAgICAgVGhlIHJldGFpbkRvdHM9IHBhcmFtZXRlciBoYXMgYmVlbiByZW1vdmVkLgorICAgICAgVGhlIFBBU1NET1RTIGNvbW1hbmQgaXMgbm8gbG9uZ2VyIGltcGxpY2l0bHkgYWNjZXB0ZWQgYnkgZGVmYXVsdC4KKyAgICAgIEV4cGxpY2l0bHkgYWNjZXB0aW5nIFBBU1NET1RTIGJ5cGFzc2VzIHRoZSBjb252ZXJzaW9uIHRvIFBBU1NDSEFSLgorICAgRW52aXJvbm1lbnQgVmFyaWFibGVzOgorICAgICAgQlJMVFRZX05PX0FQSSAoeWVzLCBubykgaXMgbm93IHN1cHBvcnRlZC4KKyAgIFRoZSBDb25maWd1cmF0aW9uIEZpbGUgKGJybHR0eS5jb25mKToKKyAgICAgIG5vLWFwaSAoeWVzLCBubykgY2FuIG5vdyBiZSBzcGVjaWZpZWQuCisgICAgICBUaGUgZm9sbG93aW5nIGRpcmVjdGl2ZXMgaGF2ZSBiZWVuIGFkZGVkOgorICAgICAgICAgaW5jbHVkZSA8ZmlsZT4KKyAgICAgICAgIGlmU2V0IDxwcm9wZXJ0eT4gWzxzdGF0ZW1lbnQ+XQorICAgICAgICAgaWZOb3RTZXQgPHByb3BlcnR5PiBbPHN0YXRlbWVudD5dCisgICAgICAgICBhc3NpZ24gPHZhcmlhYmxlPiA8dmFsdWU+CisgICAgICAgICBpZlZhciA8dmFyaWFibGU+IFs8c3RhdGVtZW50Pl0KKyAgICAgICAgIGlmTm90VmFyIDx2YXJpYWJsZT4gWzxzdGF0ZW1lbnQ+XQorICAgICAgICAgZWxzZQorICAgICAgICAgZW5kSWYKKyAgICAgIFRoZSBzcGVjaWFsIHN5bnRheCBce3ZhcmlhYmxlfSBpcyBub3cgc3VwcG9ydGVkLgorICAgVGV4dCBUYWJsZXM6CisgICAgICBUaGUgSGVicmV3IHRleHQgdGFibGUgKGhlKSBoYXMgYmVlbiBtb2Rlcm5pemVkLgorICAgQ29udHJhY3Rpb24gVGFibGVzOgorICAgICAgVGhlIFVTIEVuZ2xpc2ggR3JhZGUgMiAoZW4tdXMtZzIpIGNvbnRyYWN0aW9uIHRhYmxlIGhhcyBiZWVuIHVwZGF0ZWQuCisgICBLZXkgVGFibGVzOgorICAgICAgVGhlIGZvbGxvd2luZyBiaW5kaW5nIGNoYW5nZXMgaGF2ZSBiZWVuIG1hZGUgdG8gdGhlICJrZXlwYWQiIGtleSB0YWJsZToKKyAgICAgICAgIEJpbmRpbmcgICAgICAgICAgIE9sZCAgICAgIE5ldworICAgICAgICAgS1AwK0tQTWludXMgICAgICAgU0lYRE9UUyAgU0lYRE9UUytvZmYKKyAgICAgICAgIEtQMCtLUFBsdXMgICAgICAgIC0gICAgICAgIFNJWERPVFMrb24KKyAgICAgICAgIEtQUGVyaW9kK0tQTWludXMgIEZSRUVaRSAgIEJSTFVDRE9UUytvZmYKKyAgICAgICAgIEtQUGVyaW9kK0tQUGx1cyAgIC0gICAgICAgIEJSTFVDRE9UUytvbgorICAgICAgICAgS1BNaW51cytLUDMgICAgICAgLSAgICAgICAgRlJFRVpFCisgICAgICBUaGUgPHN0YXRlbWVudD4gb3BlcmFuZCBvZiB0aGUgaWZLZXkgZGlyZWN0aXZlIGlzIG5vdyBvcHRpb25hbC4KKyAgICAgIFRoZSBmb2xsb3dpbmcgZGlyZWN0aXZlcyBoYXZlIGJlZW4gYWRkZWQ6CisgICAgICAgICBpZk5vdEtleSA8a2V5PiBbPHN0YXRlbWVudD5dCisgICAgICAgICBpZlZhciA8dmFyaWFibGU+IFs8c3RhdGVtZW50Pl0KKyAgICAgICAgIGlmTm90VmFyIDx2YXJpYWJsZT4gWzxzdGF0ZW1lbnQ+XQorICAgICAgICAgZWxzZQorICAgICAgICAgZW5kSWYKKyAgIERhdGEgRmlsZSBDdXN0b21pemF0aW9uOgorICAgICAgVGhlIFhERyBjb25maWd1cmF0aW9uIGZpbGUgcGFyYWRpZ20gaXMgbm93IHN1cHBvcnRlZC4KKyAgICAgIEEgbG9jYWwgdmVyc2lvbiBvZiBhbnkgZGF0YSBmaWxlIGNhbiBiZSBwbGFjZWQgaW4gIi9ldGMveGRnL2JybHR0eS8iLgorICAgICAgVGhlIFhER19DT05GSUdfSE9NRSBhbmQgWERHX0NPTkZJR19ESVJTIGVudmlyb25tZW50IHZhcmlhYmxlcyBhcmUgc3VwcG9ydGVkLgorICAgICAgU2VlICJSRUFETUUuQ3VzdG9taXplIiBmb3IgZnVsbCBkZXRhaWxzLgorICAgQnVpbGQgQ2hhbmdlczoKKyAgICAgIFRoZSBzb3VyY2UgaGFzIGJlZW4gbW92ZWQgZnJvbSBhbiBzdm4gcmVwb3NpdG9yeSB0byBhIGdpdCByZXBvc2l0b3J5IGF0OgorICAgICAgICAgImh0dHBzOi8vZ2l0aHViLmNvbS9icmx0dHkvYnJsdHR5LmdpdCIuCisgICAgICBUaGUgVVJMIG9mIHRoZSB3ZWIgc2l0ZSBoYXMgYmVlbiBjaGFuZ2VkIHRvICJodHRwOi8vYnJsdHR5LmNvbSIuCisgICAgICBNYW55IG9mIHRoZSBjb3JlIGhlYWRlcnMgYXJlIG5vdyBpbnN0YWxsZWQgKGluICIvdXNyL2luY2x1ZGUvYnJsdHR5LyIpLgorICAgICAgVGhlIGJybHR0eS1kZXZlbCBycG0gaXMgbm93IGNyZWF0ZWQuCisgICAgICBUaGUgLS13aXRoLWFwaS1zb2NrZXQtcGF0aD0gY29uZmlndXJlIG9wdGlvbiBoYXMgYmVlbiBhZGRlZC4KKworSmFudWFyeSAyNywgMjAxNDoKKyAtIEJSTFRUWSA1LjAgcmVsZWFzZWQ6CisgICBNYWpvciBDaGFuZ2VzOgorICAgICAgQ29udmVyc2lvbiBmcm9tIGZyZXF1ZW50IHJlZ3VsYXIgcG9sbGluZyB0byBldmVudC1iYXNlZCBzY2hlZHVsaW5nLgorICAgICAgVGhlIHNwZWVjaCBkcml2ZXIgbm93IHJ1bnMgaW4gaXRzIG93biB0aHJlYWQuCisgICBHZW5lcmFsIENoYW5nZXM6CisgICAgICBUaGUgLS1tZXNzYWdlLWRlbGF5IGJybHR0eSBvcHRpb24gaGFzIGJlZW4gcmVuYW1lZCB0byAtLW1lc3NhZ2UtdGltZW91dC4KKyAgICAgIFRoZSAtUSBbLS1xdWlldC1pZi1uby1icmFpbGxlXSBicmx0dHkgb3B0aW9uIGhhcyBiZWVuIGFkZGVkLgorICAgICAgVGhlIC1VIFstLXVwZGF0ZS1pbnRlcnZhbD1dIGJybHR0eSBvcHRpb24gaGFzIGJlZW4gcmVtb3ZlZC4KKyAgICAgIFRoZSBDTElQX1NBVkUgYW5kIENMSVBfUkVTVE9SRSBjb21tYW5kcyBoYXZlIGJlZW4gYWRkZWQuCisgICAgICBUaGUgUFdHRU4gY29tbWFuZCBoYXMgYmVlbiByZW1vdmVkLgorICAgICAgVGhlIEZSRUVaRSB0b2dnbGUgY2FuIG5vdyBiZSBleHBsaWNpdGx5IHNldCB0byBvbiBvciBvZmYuCisgICAgICBUaGUgY29uZmlybWF0aW9uIHR1bmUgaXMgcGxheWVkIHR3aWNlIGlmIGFuIGV4cGxpY2l0IHRvZ2dsZSBpcyBhbHJlYWR5IHNldC4KKyAgICAgIEJyYWlsbGUgZHJpdmVyIHNlbGVjdGlvbiB1c2luZyB0aGUgQmx1ZXRvb3RoIGRldmljZSBuYW1lIGlzIG5vdyBzdXBwb3J0ZWQuCisgICAgICBBIEJsdWV0b290aCBkZXZpY2UgYWRkcmVzcyBtYXkgbm93IGNvbnRhaW4gZGFzaGVzICgtKSBpbnN0ZWFkIG9mIGNvbG9ucyAoOikuCisgICAgICBUaGUgImJ0aDoiIGFuZCAiYmx1ZXo6IiBkZXZpY2UgcXVhbGlmaWVyIGFsaWFzZXMgYXJlIG5vIGxvbmdlciBzdXBwb3J0ZWQuCisgICAgICBCcmFpbGxlIGRldmljZSBpZGVudGlmaWVycyBtYXkgbm93IGNvbnRhaW4gcGFyYW1ldGVycyAoc2VlIFJFQURNRS5EZXZpY2VzKS4KKyAgICAgIExvdHMgb2YgaW1wcm92ZW1lbnRzIHRvIEFuZHJvaWQgc3VwcG9ydCBoYXZlIGJlZW4gbWFkZS4KKyAgIFByZWZlcmVuY2VzIE1lbnUgQ2hhbmdlczoKKyAgICAgIElucHV0IE9wdGlvbnMgU3VibWVudToKKyAgICAgICAgIFRoZSBBdXRvcmVwZWF0IERlbGF5IHNldHRpbmcgaGFzIGJlZW4gcmVuYW1lZCB0byBMb25nIFByZXNzIFRpbWUuCisgICAgICAgICBUaGUgQnJhaWxsZSBPcmllbnRhdGlvbiBzZXR0aW5nIGhhcyBiZWVuIGFkZGVkLgorICAgICAgSW50ZXJuYWwgUGFyYW1ldGVycyBTdWJtZW51OgorICAgICAgICAgVGhlIGxvZyBjYXRlZ29yaWVzIGhhdmUgYmVlbiBtb3ZlZCBkb3duIGludG8gdGhlaXIgb3duIHN1Ym1lbnUuCisgICBUaGUgZm9sbG93aW5nIGJyYWlsbGUgZHJpdmVycyBoYXZlIGJlZW4gYWRkZWQ6CisgICAgICBiZzogQjJHIG1vZGVscyAoZnJvbSBOQlApLgorICAgICAgbW06IEJyYWlsbGUgTWVtbyBtb2RlbHMgKGZyb20gS0dTKS4KKyAgIFNpZ25pZmljYW50IHVwZ3JhZGVzIGhhdmUgYmVlbiBtYWRlIHRvIHRoZSBmb2xsb3dpbmcgYnJhaWxsZSBkcml2ZXJzOgorICAgICAgQWx2YSwgQmF1bSwgIENlYnJhLCBGcmVlZG9tU2NpZW50aWZpYywgSGFuZHlUZWNoLCBIdW1hbldhcmUsCisgICAgICBQYXBlbm1laWVyLCBQZWdhc3VzLCBTZWlrYS4KKyAgIEFsdmEgQnJhaWxsZSBEcml2ZXIgQ2hhbmdlczoKKyAgICAgIFN1cHBvcnQgaGFzIGJlZW4gYWRkZWQgZm9yIHRoZSBuZXdlciBCcmFpbGxlIFBlbiBtb2RlbHMgKGZyb20gSGFycG8pLgorICAgICAgU3VwcG9ydCBoYXMgYmVlbiBhZGRlZCBmb3IgdGhlIEVhc3kgTGluayAxMiBUb3VjaCAoZnJvbSBPcHRlbGVjKS4KKyAgIEZyZWVkb21TY2llbnRpZmljIEJyYWlsbGUgRHJpdmVyIENoYW5nZXM6CisgICAgICBBbGwgb2YgdGhlIGJ1bXBlciBrZXlzIG5vdyBoYXZlIGJpbmRpbmdzLgorICAgICAgVGhlIHJvY2tlciBrZXlzIG9mIHRoZSBGb2N1cyA4MCBCbHVlIG5vdyBoYXZlIGJpbmRpbmdzLgorICAgICAgRm9yIEZvY3VzIG1vZGVsczoKKyAgICAgICAgIFRoZSBsZWZ0IHNoaWZ0IGtleSBub3cgZnVuY3Rpb25zIGFzIGEgY29udHJvbCBtb2RpZmllciBrZXkuCisgICAgICAgICBUaGUgcmlnaHQgc2hpZnQga2V5IG5vdyBmdW5jdGlvbnMgYXMgYSBtZXRhIChsZWZ0IGFsdCkgbW9kaWZpZXIga2V5LgorICAgICAgICAgVGhlIGxlZnQgR0RGIGtleSBwbHVzIHRoZSBsZWZ0IGJ1bXBlciBrZXlzIGdvZXMgdG8gdGhlIHRvcC9ib3R0b20gbGluZS4KKyAgICAgICAgIFRoZSByaWdodCBHREYga2V5IHBsdXMgdGhlIHJpZ2h0IGJ1bXBlciBrZXlzIGdvZXMgdG8gdGhlIHRvcC9ib3R0b20gbGluZS4KKyAgIEhhbmR5VGVjaCBCcmFpbGxlIERyaXZlciBDaGFuZ2VzOgorICAgICAgU3VwcG9ydCBoYXMgYmVlbiBhZGRlZCBmb3IgdGhlIEJhc2ljIEJyYWlsbGUgbW9kZWxzLgorICAgSElNUyBCcmFpbGxlIERyaXZlciBDaGFuZ2VzOgorICAgICAgU3VwcG9ydCBoYXMgYmVlbiBhZGRlZCBmb3IgdGhlIEJyYWlsbGUgU2Vuc2UgVTIuCisgICAgICBTdXBwb3J0IGhhcyBiZWVuIGFkZGVkIGZvciB1c2luZyBCcmFpbGxlIEVkZ2UgbW9kZWxzIHZpYSBCbHVldG9vdGguCisgICAgICBTdXBwb3J0IGZvciBtb2RlbHMgd2hpY2ggaGF2ZSBhIHF3ZXJ0eSBrZXlib2FyZCBoYXMgYmVlbiBpbXByb3ZlZC4KKyAgIFBhcGVubWVpZXIgQnJhaWxsZSBEcml2ZXIgQ2hhbmdlczoKKyAgICAgIFRoZSBzdGF0dXMga2V5IGJpbmRpbmdzIGZvciBtb2RlbHMgd2l0aCAyMiBzdGF0dXMga2V5cyBoYXZlIGJlZW4gcmV2aXNlZC4KKyAgIFNlaWthIEJyYWlsbGUgRHJpdmVyIENoYW5nZXM6CisgICAgICBUaGUgSzIsIEszLCBhbmQgSzQga2V5cyBvZiB0aGUgYnJhaWxsZSBkaXNwbGF5IG1vZGVscyBub3cgd29yay4KKyAgIFZveWFnZXIgQnJhaWxsZSBEcml2ZXIgQ2hhbmdlczoKKyAgICAgIFN1cHBvcnQgaGFzIGJlZW4gYWRkZWQgZm9yIHRoZSByb3V0aW5nIGtleXMgb24gbmV3ZXIgQnJhaWxsZSBQZW4gbW9kZWxzLgorICAgWFdpbmRvdyBCcmFpbGxlIERyaXZlciBDaGFuZ2VzOgorICAgICAgSXQgaXMgbm93IHVzYWJsZSB3aGVuIG9ubHkgdGhlIGRlZmF1bHQgZm9udHMgYXJlIGF2YWlsYWJsZS4KKyAgIEJybEFQSSBDaGFuZ2VzOgorICAgICAgVmVyc2lvbiB1cGRhdGVkIHRvIDAuNi4xLgorICAgICAgQVBJIHBhcmFtZXRlciBzeW50YXggcHJvYmxlbXMgYXJlIG5vdyBlcnJvcnMgKHJhdGhlciB0aGFuIHdhcm5pbmdzKS4KKyAgICAgIEF1dG9yZXBlYXQga2V5IGV2ZW50cyBhcmUgbm93IGJlaW5nIGRlbGl2ZXJlZCB0byBjbGllbnRzLgorICAgICAgQSBjcmFzaCB3aGVuIHZpc3VhbCB0ZXh0IHdhc24ndCBiZWluZyBzdXBwbGllZCBieSB0aGUgY29yZSBoYXMgYmVlbiBmaXhlZC4KKyAgICAgIE9yY2EgYnJhaWxsZSBvdXRwdXQgaXMgbm8gbG9uZ2VyIGJlaW5nIGhpZGRlbiBieSB4YnJsYXBpIG91dHB1dC4KKyAgICAgIGdkbSBzaG91bGQgbm93IGF1dG9tYXRpY2FsbHkgc3RhcnQgeGJybGFwaS4KKyAgIFRleHQgVGFibGUgQ2hhbmdlczoKKyAgICAgIFRoZSBTbG92ZW5pYW4gdGFibGUgKHNsKSBoYXMgYmVlbiBhZGRlZC4KKyAgICAgIFRoZSBmdWxsLXdpZHRoIExhdGluIGxldHRlcnMgbm93IGhhdmUgYnJhaWxsZSByZXByZXNlbnRhdGlvbnMuCisgICAgICBUaGUgZnVsbC13aWR0aCBMYXRpbiBkaWdpdHMgbm93IGhhdmUgYnJhaWxsZSByZXByZXNlbnRhdGlvbnMuCisgICAgICBicmx0dHktdHJ0eHQgbm93IHByZXNlcnZlcyBzcGFjZSBjaGFyYWN0ZXJzLgorICAgQXR0cmlidXRlcyBUYWJsZSBDaGFuZ2VzOgorICAgICAgVGhlIGV4aXN0aW5nIHRhYmxlcyBoYXZlIGJlZW4gZ2l2ZW4gbW9yZSBkZXNjcmlwdGl2ZSBuYW1lczoKKyAgICAgICAgIGF0dHJpYiAtPiBpbnZsZWZ0X3JpZ2h0CisgICAgICAgICBhdHRyaWJ1dGVzIC0+IGxlZnRfcmlnaHQKKyAgICAgIFRoZSB1cHBlcl9sb3dlciB0YWJsZSBoYXMgYmVlbiBhZGRlZC4KKyAgIENvbnRyYWN0aW9uIFRhYmxlIENoYW5nZXM6CisgICAgICBUaGUgVVMgRW5nbGlzaCBHcmFkZSAyIHRhYmxlIGhhcyBiZWVuIGltcHJvdmVkLgorICAgICAgVGhlIEdlcm1hbiB0YWJsZSBoYXMgYmVlbiBpbXByb3ZlZC4KKyAgICAgIFRoZSAtdiAoLS12ZXJpZmljYXRpb24tdGFibGU9KSBvcHRpb24gaGFzIGJlZW4gYWRkZWQgdG8gYnJsdHR5LWN0Yi4KKyAgIEtleSBUYWJsZSBDaGFuZ2VzOgorICAgICAgQSBiaW5kaW5nIGZvciBUSU1FIChLUDArVCkgaGFzIGJlZW4gYWRkZWQgdG8gdGhlIGRlc2t0b3Aga2V5IHRhYmxlLgorICAgICAgQSB0YWJsZSBmb3IgU3VuIHR5cGUgNiBrZXlib2FyZHMgKHN1bl90eXBlNikgaGFzIGJlZW4gYWRkZWQuCisgICAgICBTdXBwb3J0IGhhcyBiZWVuIGFkZGVkIGZvciBsb25nIGtleSBwcmVzcyBiaW5kaW5ncy4KKyAgICAgIFRoZSB2YWx1ZSBvZiBhbiBhc3NpZ24gc3RhdGVtZW50IG1heSBub3cgY29udGFpbiB2YXJpYWJsZSBleHBhbnNpb25zLgorICAgQnVpbGQgQ2hhbmdlczoKKyAgICAgIFRoZSBsaWJ1c2ItMS4wIHBhY2thZ2UgaXMgbm93IHByZWZlcnJlZCBvdmVyIHRoZSBsaWJ1c2IgcGFja2FnZS4KKyAgICAgIFRoZSBtZXNzYWdlIGNhdGFsb2dzIGFyZSBub3cgaW5zdGFsbGVkIGlmIHRoZSBuZWVkZWQgdG9vbHMgYXJlIGF2YWlsYWJsZS4KKyAgICAgIHB5cmV4YyBpcyBubyBsb25nZXIgYW4gYWx0ZXJuYXRlIGNvbXBpbGVyIGZvciB0aGUgUHl0aG9uIGJpbmRpbmdzLgorICAgICAgUGF0aHMgdG8gSmF2YSBidWlsZCBjb21tYW5kcyB3aGljaCBjb250YWluIGJsYW5rcyBhcmUgbm93IHN1cHBvcnRlZC4KKyAgICAgIE1hbnkgZml4ZXMgZm9yIGJ1aWxkaW5nIG9uIE1hYyBPUyBYIChEYXJ3aW4pIGhhdmUgYmVlbiBtYWRlLgorICAgICAgVGhlIGZvbGxvd2luZyB3cmFwcGVyIHNjcmlwdHMgZm9yIGEgbnVtYmVyIG9mIHBsYXRmb3JtcyBoYXZlIGJlZW4gYWRkZWQ6CisgICAgICAgICBjZmctYW5kcm9pZCwgY2ZnLWRhcndpbi4KKyAgICAgIFRoZSBldXRwIGNvbW1hbmQgKGZvciBFdXJvQnJhaWxsZSBmaWxlIHRyYW5zZmVyKSBoYXMgYmVlbiBhZGRlZC4KKworQXByaWwgMSwgMjAxMzoKKyAtIEJSTFRUWSA0LjUgcmVsZWFzZWQ6CisgICBHZW5lcmFsIEZpeGVzOgorICAgICAgVGhlIGN1cnNvciByb3V0aW5nIGFsZ29yaXRobSBpcyBub3cgdXN1YWxseSBhbG1vc3QgYXMgZmFzdCBhcyBpdCB1c2VkIHRvIGJlLgorICAgICAgU3BlZWNoIG5hdmlnYXRpb24gbm93IHdvcmtzIHdoZW4gYnJhaWxsZSBpcyBub3QgYmVpbmcgdXNlZC4KKyAgICAgIEF1dG9zcGVhayBpcyBub3cgZm9yY2VkIG9uIGlmIHNwZWVjaCBpcyBiZWluZyB1c2VkIHdpdGhvdXQgYnJhaWxsZS4KKyAgICAgIEF1dG9zcGVhayBubyBsb25nZXIgY29uc2lkZXJzIGEgc2luZ2xlIGNoYXJhY3RlciB0byBiZSBhIGNvbXBsZXRlZCB3b3JkLgorICAgICAgVGhlIGlucHV0IG1vZGlmaWVyIGNvbW1hbmRzIG5vdyBmdW5jdGlvbiBhcyByZWd1bGFyIHRvZ2dsZXMuCisgICAgICBIYW5ncyBjYW4gbm8gbG9uZ2VyIG9jY3VyIHdoZW4gdGhlIHN5c3RlbSBjbG9jayBpcyBhZGp1c3RlZCBiYWNrd2FyZC4KKyAgICAgIE9jY2FzaW9uYWwgZGVsYXllZCBpbnB1dCB3aXRoIHNvbWUgYnJhaWxsZSBkZXZpY2VzIGhhcyBiZWVuIHJlc29sdmVkLgorICAgICAgUG9vciByZXNwb25zZSB3aGVuIHVzaW5nIFVTQiB3aXRoIHNvbWUgYnJhaWxsZSBkZXZpY2VzIGhhcyBiZWVuIHJlc29sdmVkLgorICAgICAgQm9ndXMgQmx1ZXRvb3RoIGNvbm5lY3QgZXJyb3JzIChyZXNvdXJjZSBidXN5KSBoYXZlIGJlZW4gcmVzb2x2ZWQuCisgICBBbHZhIEJyYWlsbGUgRHJpdmVyOgorICAgICAgVGhlIGtleSBiaW5kaW5ncyBmb3IgdGhlIEJDIG1vZGVscyBoYXZlIGJlZW4gcmV3b3JrZWQuCisgICAgICBTZWNvbmRhcnkgcm91dGluZyBrZXlzIGFyZSBub3cgaW50ZXJwcmV0ZWQgYXMgdGhvdWdoIHRoZXkgd2VyZSBwcmltYXJ5IGtleXMuCisgICAgICBUaGUgU2Vjb25kYXJ5Um91dGluZ0tleUVtdWxhdGlvbj0gcGFyYW1ldGVyIGhhcyBiZWVuIGFkZGVkLgorICAgQmF1bSBCcmFpbGxlIERyaXZlcjoKKyAgICAgIFRoZSBSZWZyZXNoYUJyYWlsbGUga2V5IGJpbmRpbmdzIGhhdmUgYmVlbiBpbXByb3ZlZC4KKyAgIEJyYWlsbGVOb3RlIEJyYWlsbGUgRHJpdmVyOgorICAgICAgS2V5IGJpbmRpbmdzIGFyZSBub3cgZGVmaW5lZCB3aXRoaW4ga2V5IHRhYmxlcyByYXRoZXIgdGhhbiBiZWluZyBoYXJkLWNvZGVkLgorICAgQ2VicmEgQnJhaWxsZSBEcml2ZXI6CisgICAgICBCbHVldG9vdGggc3VwcG9ydCBoYXMgYmVlbiBhZGRlZC4KKyAgICAgIFN1cHBvcnQgZm9yIHRoZSBOb3ZlbSBicmFpbGxlIGtleWJvYXJkIGhhcyBiZWVuIGFkZGVkLgorICAgRnJlZWRvbVNjaWVudGlmaWMgQnJhaWxsZSBEcml2ZXI6CisgICAgICBTdXBwb3J0IGZvciB0aGUgRm9jdXMgMTQgaGFzIGJlZW4gYWRkZWQuCisgICAgICBBIGtleSBiaW5kaW5nIGZvciBDTElQX0NPUFkgaGFzIGJlZW4gYWRkZWQuCisgICAgICBUaGUgZGVmaW5pdGlvbnMgZm9yIHRoZSB0d28gRm9jdXMgNDAgcm9ja2VyIGtleXMgaGF2ZSBiZWVuIHN3YXBwZWQuCisgICBIYW5keVRlY2ggQnJhaWxsZSBEcml2ZXI6CisgICAgICBQb29yIHBlcmZvcm1hbmNlIHdoZW4gdXNpbmcgYW4gQWN0aXZlIEJyYWlsbGUgaGFzIGJlZW4gcmVzb2x2ZWQuCisgICBISU1TIEJyYWlsbGUgRHJpdmVyOgorICAgICAgVVNCIHN1cHBvcnQgZm9yIHRoZSBCcmFpbGxlIEVkZ2UgaGFzIGJlZW4gYWRkZWQuCisgICAgICBOZXdlciBCcmFpbGxlIFNlbnNlIG1vZGVscywgd2hlbiBjb25uZWN0ZWQgdmlhIFVTQiwgYXJlIG5vdyByZWNvZ25pemVkLgorICAgICAgTWFueSBrZXkgYmluZGluZ3MgZm9yIHRoZSBCcmFpbGxlIFNlbnNlIGFuZCBCcmFpbGxlIEVkZ2UgaGF2ZSBiZWVuIGFkZGVkLgorICAgSHVtYW5XYXJlIEJyYWlsbGUgRHJpdmVyOgorICAgICAgVVNCIGF1dG9kZXRlY3Rpb24gaXMgbm93IHN1cHBvcnRlZC4KKyAgIElyaXNMaW51eCBCcmFpbGxlIERyaXZlcjoKKyAgICAgIFJlbW92ZWQgLSBzdXBlcmNlZGVkIGJ5IHRoZSBJcmlzIGJyYWlsbGUgZHJpdmVyLgorICAgTmluZVBvaW50IEJyYWlsbGUgRHJpdmVyOgorICAgICAgQ2VicmEgZGV2aWNlcyBhcmUgbm93IHN1cHBvcnRlZCBieSB0aGUgbmV3IENlYnJhIGJyYWlsbGUgZHJpdmVyLgorICAgICAgVGhpcyBkcml2ZXIgbm93IHN1cHBvcnRzIHRoZSBOaW5lUG9pbnQgZGV2aWNlLgorICAgUGFwZW5tZWllciBCcmFpbGxlIERyaXZlcjoKKyAgICAgIEJsdWV0b290aCBpcyBub3cgc3VwcG9ydGVkLgorICAgICAgTW9kZWxzIEVMNDBjLCBFTDYwYywgYW5kIEVMODBjIGFyZSBub3cgc3VwcG9ydGVkLgorICAgU2Vpa2EgQnJhaWxsZSBEcml2ZXI6CisgICAgICBTdXBwb3J0IGZvciB0aGUgU2Vpa2EgODAgaGFzIGJlZW4gYWRkZWQuCisgICBWb3lhZ2VyIEJyYWlsbGUgRHJpdmVyOgorICAgICAgVGhlIGtleSBiaW5kaW5ncyBoYXZlIGJlZW4gcmV3b3JrZWQuCisgICBlU3BlYWsgU3BlZWNoIERyaXZlcjoKKyAgICAgIE5vdyBydW5zIGluIGEgc2VwYXJhdGUgdGhyZWFkIGluIG9yZGVyIHRvIGltcHJvdmUgY29yZSBwZXJmb3JtYW5jZS4KKyAgIEJybEFQSSBTZXJ2ZXI6CisgICAgICBUaGUgUmV0YWluRG90cz0gcGFyYW1ldGVyIGhhcyBiZWVuIGFkZGVkLgorICAgQnJsQVBJIENsaWVudDoKKyAgICAgIFZlcnNpb24gdXBkYXRlZCB0byAwLjYuMC4KKyAgICAgIFRoZSBicmxhcGlfd3JpdGVXVGV4dCgpIGZ1bmN0aW9uIGhhcyBiZWVuIGFkZGVkLgorICAgICAgVGhlIFB5dGhvbiBiaW5kaW5ncyBhcmUgbm93IGNvbXBpbGVkIGJ5IEN5dGhvbiAocmF0aGVyIHRoYW4gd2l0aCBQeXJleCkuCisgICAgICBQeXRob24gMyBpcyBub3cgc3VwcG9ydGVkLgorICAgICAgQSBmaWxlIGRlc2NyaXB0b3IgbGVhayBoYXMgYmVlbiByZXNvbHZlZC4KKyAgIFRleHQgVGFibGVzOgorICAgICAgVGhlIGZyLXZzIHRhYmxlIGhhcyBiZWVuIHVwZGF0ZWQuCisgICBDb250cmFjdGlvbiBUYWJsZXM6CisgICAgICBUaGUgZW4tdXMtZzIgdGFibGUgaGFzIGJlZW4gdXBkYXRlZC4KKyAgIEtleWJvYXJkIEtleSBUYWJsZXM6CisgICAgICBNYW55IGJpbmRpbmdzIGhhdmUgYmVlbiBhZGRlZCB0byB0aGUgbGFwdG9wIHRhYmxlLgorICAgQW5kcm9pZDoKKyAgICAgIEFuIGluaXRpYWwgaW1wbGVtZW50YXRpb24gaXMgbm93IGF2YWlsYWJsZS4KKyAgICAgIFJ1bnMgcG9vcmx5IG9uIDQuMCAoSUNTKSBidXQgcXVpdGUgd2VsbCBvbiA0LjEgKEpCKS4KKyAgICAgIFNjcmVlbiBuYXZpZ2F0aW9uIGlzIHN1cHBvcnRlZC4KKyAgICAgIFNlZSBEb2N1bWVudHMvUkVBRE1FLkFuZHJvaWQgZm9yIGRldGFpbHMuCisKK0p1bmUgNywgMjAxMjoKKyAtIEJSTFRUWSA0LjQgcmVsZWFzZWQ6CisgICBDaGFuZ2VzOgorICAgICAgRE9TIG9wdGlvbiBzeW50YXggKC9vcHRpb25bOnZhbHVlXSkgY2FuIG9ubHkgYmUgdXNlZCBvbiBET1Mgb3IgV2luZG93cy4KKyAgICAgIFRoZSBjbGlwYm9hcmQgZnVuY3Rpb25zIGhhdmUgYmVlbiByZW5hbWVkIHRvIGFjY3VyYXRlbHkgcmVmbGVjdCB3aGF0IHRoZXkgZG86CisgICAgICAgICBDVVRCRUdJTiAgLT4gQ0xJUF9ORVcKKyAgICAgICAgIENVVEFQUEVORCAtPiBDTElQX0FERAorICAgICAgICAgQ1VUTElORSAgIC0+IENPUFlfTElORQorICAgICAgICAgQ1VUUkVDVCAgIC0+IENPUFlfUkVDVAorICAgICAgICAgQ09QWUNIQVJTIC0+IENMSVBfQ09QWQorICAgICAgICAgQVBORENIQVJTIC0+IENMSVBfQVBQRU5ECisgICAgICBUaGUgQ2FtbCBiaW5kaW5ncyBmb3IgQnJsQVBJIGhhdmUgYmVlbiByZW5hbWVkIHRvIE9jYW1sLgorICAgICAgVGhlIHRibHRlc3QgcHJvZ3JhbSBoYXMgYmVlbiByZW5hbWVkIHRvIGJybHR0eS10dGIgYW5kIGlzIGluc3RhbGxlZC4KKyAgICAgIFRoZSBjdGJ0ZXN0IHByb2dyYW0gaGFzIGJlZW4gcmVuYW1lZCB0byBicmx0dHktY3RiIGFuZCBpcyBpbnN0YWxsZWQuCisgICAgICBUaGUgLS13aXRoLWNvbXBpbGVyLXByZWZpeD0gY29uZmlndXJlIG9wdGlvbiBoYXMgYmVlbiByZW1vdmVkLgorICAgRml4ZXM6CisgICAgICBCcmx0dHkga2V5Ym9hcmQga2V5IGJpbmRpbmdzIG5vIGxvbmdlciBpbnRlcmZlcmUgd2l0aCBPcmNhIGtleSBiaW5kaW5ncy4KKyAgICAgIFRoZSB1cGRhdGluZyBvZiBzdGF0dXMgbGluZXMgbm8gbG9uZ2VyIGNvbmZ1c2VzIHRoZSBjdXJzb3Igcm91dGluZyBhbGdvcml0aG0uCisgICAgICBUaGUgc2FtZSBVU0IgZGV2aWNlIGNhbiBubyBsb25nZXIgYmUgdXNlZCBieSBtb3JlIHRoYW4gb25lIGJybHR0eSBhdCBhIHRpbWUuCisgICBOZXcgRmVhdHVyZXM6CisgICAgICBUaGUgaGVscCBmdW5jdGlvbiBjeWNsZXMgdGhyb3VnaCBhbGwgcmVsZXZhbnQgcGFnZXMuCisgICAgICAgICBGb3IgZXhhbXBsZSwgaGVscCBmb3IgdGhlIGN1cnJlbnQga2V5Ym9hcmQga2V5IHRhYmxlIGlzIHZpZXdhYmxlLgorICAgICAgVGhlIGluZm8tbW9kZSBsaW5lIGNvbnRhaW5zIGEgY2xvY2suCisgICAgICBUaGUgcHJlZmVyZW5jZXMgbWVudSBoYXMgYmVlbiBkaXZpZGVkIGludG8gYSBzZXQgb2YgY2F0ZWdvcnktYmFzZWQgc3VibWVudXMuCisgICAgICAgICBPcGVuIGEgc3VibWVudSB3aXRoIGFueSBrZXkgdGhhdCB3b3VsZCBub3JtYWxseSBhbHRlciBhIHNldHRpbmcuCisgICAgICAgICBDbG9zZSBhIHN1Ym1lbnUgZWl0aGVyIGJ5IHNjcm9sbGluZyB0byBpdHMgQ2xvc2UgaXRlbSBhbmQgYWN0aXZhdGluZyBpdAorICAgICAgICAgb3IgdmlhIHRoZSBuZXcgTUVOVV9QUkVWX0xFVkVMIGZ1bmN0aW9uLgorICAgICAgVGhlIC1sIFstLWxvZy1sZXZlbD1dIG9wdGlvbiBvZiBicmx0dHkgYWNjZXB0cyBsb2cgY2F0ZWdvcnkgbmFtZXMuCisgICAgICAgICBUaGUgbmFtZXMgYXJlOiBpbmdpbywgaW5wa3RzLCBvdXRwa3RzLCBicmxrZXlzLCBrYmRrZXlzLCBjc3J0cmssIGNzcnJ0Zy4KKyAgICAgICAgIFNwZWNpZnkgdGhlIGxvZyBsZXZlbCBhbmQvb3IgY2F0ZWdvcnkgbmFtZXMgYXMgYSBjb21tYS1kZWxpbWl0ZWQgbGlzdC4KKyAgICAgIFRoZSAtQyBbLS1jYW5jZWwtZXhlY3V0aW9uXSBvcHRpb24gaGFzIGJlZW4gYWRkZWQgdG8gYnJsdHR5LgorICAgICAgICAgVGhlIHNhbWUgcGlkIGZpbGUgbXVzdCBiZSBzcGVjaWZpZWQgYnkgYm90aCB0aGUgY2FuY2VsbGluZyBhbmQgdGhlCisgICAgICAgICBhbHJlYWR5LXJ1bm5pbmcgYnJsdHR5LgorICAgICAgVGhlIHBpZCBmaWxlIG1heSBiZSBzcGVjaWZpZWQgd2l0aGluIHRoZSBjb25maWd1cmF0aW9uIGZpbGUgKGJybHR0eS5jb25mKS4KKyAgICAgIFRoZSBicmx0dHktdHJ0eHQgcHJvZ3JhbSBoYXMgYmVlbiBhZGRlZCBhbmQgaXMgaW5zdGFsbGVkLgorICAgTmV3IGZ1bmN0aW9uczoKKyAgICAgIE1FTlVfUFJFVl9MRVZFTDogQ2xvc2UgdGhlIGN1cnJlbnQgc3VibWVudS4KKyAgICAgIFRJTUU6IERpc3BsYXkgdGhlIGN1cnJlbnQgdGltZSAoZm9ybWF0IGNvbmZpZ3VyYWJsZSB2aWEgdGhlIG1lbnUpLgorICAgICAgUFdHRU46IFNldCB0aGUgY2xpcGJvYXJkIHRvIGEgcmFuZG9tIHBhc3N3b3JkIChsZW5ndGggc2V0IGJ5IHJvdXRpbmcga2V5KS4KKyAgICAgIFN0aWNreSBpbnB1dCBtb2RpZmllciBmdW5jdGlvbnM6CisgICAgICAgICBTSElGVDogQWRkIHRoZSBzaGlmdCBtb2RpZmllciB0byB0aGUgbmV4dCB0eXBlZCBjaGFyYWN0ZXIuCisgICAgICAgICBVUFBFUjogQWRkIHRoZSB1cHBlcmNhc2UgbW9kaWZpZXIgdG8gdGhlIG5leHQgdHlwZWQgY2hhcmFjdGVyLgorICAgICAgICAgQ09OVFJPTDogQWRkIHRoZSBjb250cm9sIG1vZGlmaWVyIHRvIHRoZSBuZXh0IHR5cGVkIGNoYXJhY3Rlci4KKyAgICAgICAgIE1FVEE6IEFkZCB0aGUgbWV0YSAobGVmdCBhbHQpIG1vZGlmaWVyIHRvIHRoZSBuZXh0IHR5cGVkIGNoYXJhY3Rlci4KKyAgICAgIEF1dG9zcGVhayBzdWJvcHRpb24gdG9nZ2xlczoKKyAgICAgICAgIEFTUEtfU0VMX0xJTkU6IFNldCBhdXRvc3BlYWsgc2VsZWN0ZWQgbGluZSBvbi9vZmYuCisgICAgICAgICBBU1BLX1NFTF9DSEFSOiBTZXQgYXV0b3NwZWFrIHNlbGVjdGVkIGNoYXJhY3RlciBvbi9vZmYuCisgICAgICAgICBBU1BLX0lOU19DSEFSUzogU2V0IGF1dG9zcGVhayBpbnNlcnRlZCBjaGFyYWN0ZXJzIG9uL29mZi4KKyAgICAgICAgIEFTUEtfREVMX0NIQVJTOiBTZXQgYXV0b3NwZWFrIGRlbGV0ZWQgY2hhcmFjdGVycyBvbi9vZmYuCisgICAgICAgICBBU1BLX1JFUF9DSEFSUzogU2V0IGF1dG9zcGVhayByZXBsYWNlZCBjaGFyYWN0ZXJzIG9uL29mZi4KKyAgICAgICAgIEFTUEtfQ01QX1dPUkRTOiBTZXQgYXV0b3NwZWFrIGNvbXBsZXRlZCB3b3JkcyBvbi9vZmYuCisgICAgICBNYW55IGZ1bmN0aW9ucyBzcGVjaWZpY2FsbHkgZm9yIHNwZWVjaCBuYXZpZ2F0aW9uOgorICAgICAgICAgU1BFQUtfQ1VSUl9DSEFSOiBTcGVhayBjdXJyZW50IGNoYXJhY3Rlci4KKyAgICAgICAgIFNQRUFLX1BSRVZfQ0hBUjogR28gdG8gYW5kIHNwZWFrIHByZXZpb3VzIGNoYXJhY3Rlci4KKyAgICAgICAgIFNQRUFLX05FWFRfQ0hBUjogR28gdG8gYW5kIHNwZWFrIG5leHQgY2hhcmFjdGVyLgorICAgICAgICAgU1BFQUtfQ1VSUl9XT1JEOiBTcGVhayBjdXJyZW50IHdvcmQuCisgICAgICAgICBTUEVBS19QUkVWX1dPUkQ6IEdvIHRvIGFuZCBzcGVhayBwcmV2aW91cyB3b3JkLgorICAgICAgICAgU1BFQUtfTkVYVF9XT1JEOiBHbyB0byBhbmQgc3BlYWsgbmV4dCB3b3JkLgorICAgICAgICAgU1BFQUtfQ1VSUl9MSU5FOiBTcGVhayBjdXJyZW50IGxpbmUuCisgICAgICAgICBTUEVBS19QUkVWX0xJTkU6IEdvIHRvIGFuZCBzcGVhayBwcmV2aW91cyBsaW5lLgorICAgICAgICAgU1BFQUtfTkVYVF9MSU5FOiBHbyB0byBhbmQgc3BlYWsgbmV4dCBsaW5lLgorICAgICAgICAgU1BFQUtfRlJTVF9DSEFSOiBHbyB0byBhbmQgc3BlYWsgZmlyc3Qgbm9uLWJsYW5rIGNoYXJhY3RlciBvbiBsaW5lLgorICAgICAgICAgU1BFQUtfTEFTVF9DSEFSOiBHbyB0byBhbmQgc3BlYWsgbGFzdCBub24tYmxhbmsgY2hhcmFjdGVyIG9uIGxpbmUuCisgICAgICAgICBTUEVBS19GUlNUX0xJTkU6IEdvIHRvIGFuZCBzcGVhayBmaXJzdCBub24tYmxhbmsgbGluZSBvbiBzY3JlZW4uCisgICAgICAgICBTUEVBS19MQVNUX0xJTkU6IEdvIHRvIGFuZCBzcGVhayBsYXN0IG5vbi1ibGFuayBsaW5lIG9uIHNjcmVlbi4KKyAgICAgICAgIERFU0NfQ1VSUl9DSEFSOiBEZXNjcmliZSBjdXJyZW50IGNoYXJhY3Rlci4KKyAgICAgICAgIFNQRUxMX0NVUlJfV09SRDogU3BlbGwgY3VycmVudCB3b3JkLgorICAgICAgICAgUk9VVEVfQ1VSUl9MT0NOOiBCcmluZyBjdXJzb3IgdG8gc3BlZWNoIGxvY2F0aW9uLgorICAgICAgICAgU1BFQUtfQ1VSUl9MT0NOOiBTcGVhayBzcGVlY2ggbG9jYXRpb24uCisgICAgICAgICBTSE9XX0NVUlJfTE9DTjogU2V0IHNwZWVjaCBsb2NhdGlvbiB2aXNpYmlsaXR5IG9uL29mZi4KKyAgIE5ldyBicmFpbGxlIGRyaXZlcnM6CisgICAgICBodzogSHVtYW5XYXJlCisgICAgICBpcjogSXJpcworICAgICAgbnA6IE5pbmVQb2ludCAoQ2VicmEpCisgICBCYXVtIGJyYWlsbGUgZHJpdmVyIGNoYW5nZXM6CisgICAgICBUaGUgSW5rYSBpcyBmdWxseSBzdXBwb3J0ZWQuCisgICAgICBOZXcga2V5IGJpbmRpbmdzIGZvciBtb2RlbHMgd2l0aCBzaXggZGlzcGxheSBrZXlzOgorICAgICAgICAgRGlzcGxheTErRGlzcGxheTUgZGlzcGxheXMgdGhlIGN1cnJlbnQgdGltZS4KKyAgIEV1cm9CcmFpbGxlIGJyYWlsbGUgZHJpdmVyIGNoYW5nZXM6CisgICAgICBUaGUgbGF0ZXN0IG1vZGVscyBhcmUgc3VwcG9ydGVkLgorICAgICAgS2V5IHRhYmxlcywgcmF0aGVyIHRoYW4gaGFyZC1jb2RlZCBiaW5kaW5ncywgYXJlIHVzZWQuCisgICAgICBUaGUgZGlzcGxheSBpcyB1cGRhdGVkIHdoZW4gcmV0dXJuaW5nIGZyb20gdGhlIGludGVybmFsIG1lbnUuCisgICAgICBUaGUgTENEICh2aXN1YWwgZGlzcGxheSkgaXMgc3VwcG9ydGVkLgorICAgICAgTGFyZ2UgZGlzcGxheXMgd29yayByZWxpYWJseSB3aGVuIGNvbm5lY3RlZCB2aWEgVVNCLgorICAgICAgVGhlIHByb3RvY29sPSBwYXJhbWV0ZXIgdGFrZXMgYSBtb2RlbCAocmF0aGVyIHRoYW4gYSBwcm90b2NvbCkgbmFtZS4KKyAgIEZyZWVkb21TY2llbnRpZmljIGJyYWlsbGUgZHJpdmVyIGNoYW5nZXM6CisgICAgICBOZXcga2V5IGJpbmRpbmdzOgorICAgICAgICAgTGVmdFJvY2tlclVwIGdvZXMgdXAgb25lIGxpbmUuCisgICAgICAgICBMZWZ0Um9ja2VyRG93biBnb2VzIGRvd24gb25lIGxpbmUuCisgICBIYW5keVRlY2ggYnJhaWxsZSBkcml2ZXIgY2hhbmdlczoKKyAgICAgIE5ldyBrZXkgYmluZGluZ3M6CisgICAgICAgICBCMitCMytCNStCNiBkaXNwbGF5cyB0aGUgY3VycmVudCB0aW1lLgorICAgICAgICAgQjErQjIrIVJvdXRpbmdLZXkgc2V0cyB0aGUgY2xpcGJvYXJkIHRvIGEgcmFuZG9tIHBhc3N3b3JkLgorICAgUGFwZW5tZWllciBicmFpbGxlIGRyaXZlciBjaGFuZ2VzOgorICAgICAgQSBzZXJpb3VzIFVTQiBwcm9ibGVtIGhhcyBiZWVuIGZpeGVkLgorICAgICAgTmV3IGtleSBiaW5kaW5ncyBmb3IgbW9kZWxzIHdpdGggMTMgZnJvbnQga2V5czoKKyAgICAgICAgIERvdDMsIHdoZW4gaW4gdGhlIG1lbnUsIGNsb3NlcyB0aGUgY3VycmVudCBzdWJtZW51LgorICAgICAgICAgRG90MStEb3QyK0RvdDMrRG90NiByb3V0ZXMgdGhlIGN1cnNvciB2ZXJ0aWNhbGx5LgorICAgICAgICAgRG90MStEb3QyK0RvdDMrRG90NitEb3Q3IHN3aXRjaGVzIHRvIHRoZSBwcmV2aW91cyB2aXJ0dWFsIGNvbnNvbGUuCisgICAgICAgICBEb3QxK0RvdDIrRG90MytEb3Q2K0RvdDggc3dpdGNoZXMgdG8gdGhlIG5leHQgdmlydHVhbCBjb25zb2xlLgorICAgICAgICAgRG90MStDb3QyK0RvdDMrRG90NyBkaXNwbGF5cyB0aGUgY3VycmVudCB0aW1lLgorICAgICAgICAgRG90MStEb3QyK0RvdDMrRG90NyshUm91dGluZ0tleTEgc2V0cyB0aGUgY2xpcGJvYXJkIHRvIGEgcmFuZG9tIHBhc3N3b3JkLgorICAgU2Vpa2EgYnJhaWxsZSBkcml2ZXIgY2hhbmdlczoKKyAgICAgIFRoZSBub3RldGFrZXIgbW9kZWxzIGFyZSBzdXBwb3J0ZWQuCisgICBlU3BlYWsgc3BlZWNoIGRyaXZlciBjaGFuZ2VzOgorICAgICAgVGhlIG1heHJhdGU9IHBhcmFtZXRlciBoYXMgYmVlbiBhZGRlZC4KKyAgIFRleHQgdGFibGVzOgorICAgICAgVGhlIGRlIChHZXJtYW4pIHRhYmxlIGhhcyBiZWVuIHVwZGF0ZWQuCisgICAgICBUaGUgaHUgKEh1bmdhcmlhbikgdGFibGUgaGFzIGJlZW4gdXBkYXRlZC4KKyAgICAgIFN1cHBvcnQgZm9yIHdyaXRpbmcgSkFXUyAoLmpidCkgdGV4dCB0YWJsZXMgaGFzIGJlZW4gYWRkZWQgdG8gYnJsdHR5LXR0Yi4KKyAgIENvbnRyYWN0aW9uIHRhYmxlczoKKyAgICAgIHRoZSBlbi11cy1nMiAoVVMgRW5nbGlzaCAtIEdyYWRlIDIpIHRhYmxlIGhhcyBiZWVuIHVwZGF0ZWQuCisgICAgICBBIHRhYmxlIG1heSBiZSBpbXBsZW1lbnRlZCBhcyBhbiBleGVjdXRhYmxlIHByb2dyYW0uCisgICAgICBUaGUgbGF0ZXgtYWNjZXNzIChicmFpbGxlIG1hdGgpIGV4ZWN1dGFibGUgdGFibGUgaGFzIGJlZW4gYWRkZWQuCisgICAgICBUaGUgLXIgWy0tcmVmb3JtYXQtaW5wdXRdIG9wdGlvbiBvZiBicmx0dHktY3RiIGhhbmRsZXMgcGFyYWdyYXBocyBiZXR0ZXIuCisgICBLZXlib2FyZCBrZXkgdGFibGVzOgorICAgICAgTWFueSBiaW5kaW5ncyBoYXZlIGJlZW4gYWRkZWQgdG8gdGhlIGtleXBhZCBhbmQgbGFwdG9wIHRhYmxlcy4KKyAgIERvY3VtZW50YXRpb246CisgICAgICBBIHBvcnR1Z3Vlc2UgdHJhbnNsYXRpb24gb2YgdGhlIG1hbnVhbCBoYXMgYmVlbiBhZGRlZC4KKworT2N0b2JlciAxMCwgMjAxMToKKyAtIEJSTFRUWSA0LjMgcmVsZWFzZWQ6CisgICBOZXcgb3B0aW9uczoKKyAgICAgIFRoZSAtRiBbLS1zcGVlY2gtZmlmbz1dIG9wdGlvbiBoYXMgYmVlbiByZW5hbWVkIHRvIC1pIFstLXNwZWVjaC1pbnB1dD1dLgorICAgICAgVGhlIC1GIFstLXByZWZlcmVuY2VzLWZpbGU9XSBvcHRpb24gc2V0cyB0aGUgcGF0aCB0byB0aGUgcHJlZmVyZW5jZXMgZmlsZS4KKyAgICAgIFRoZSAtTCBbLS1sb2ctZmlsZT1dIGJybHR0eSBvcHRpb24gd3JpdGVzIHRpbWVzdGFtcGVkIGxvZ3MgdG8gYSBmaWxlLgorICAgICAgVGhlIC1xIFstLXF1aWV0XSB4YnJsYXBpIG9wdGlvbiBzdXBwcmVzc2VzIHRoZSBkaXNwbGF5aW5nIG9mIHdpbmRvdyB0aXRsZXMuCisgICAgICBUaGUgLXIgWy0tcmVmb3JtYXQtdGV4dF0gY3RidGVzdCBvcHRpb24gam9pbnMgdW5pbmRlbnRlZCBpbnB1dCBsaW5lcy4KKyAgICAgIFRoZSBsb2cgbGV2ZWwgY2FuIG5vdyBiZSBzcGVjaWZpZWQgd2l0aGluIGJybHR0eS5jb25mLgorICAgTmV3IGRldmljZSBzdXBwb3J0OgorICAgICAgQSBicmFpbGxlIGRyaXZlciBmb3IgQnJhaWxDb21tIGRpc3BsYXlzIGhhcyBiZWVuIGFkZGVkLgorICAgICAgVGhlIEhhbmR5VGVjaCBicmFpbGxlIGRyaXZlciBub3cgc3VwcG9ydHMgdGhlIEFjdGl2ZSBCcmFpbGxlLgorICAgICAgVGhlIFZveWFnZXIgYnJhaWxsZSBkcml2ZXIgbm93IHN1cHBvcnRzIHRoZSBwYXJ0IDIzMiBzZXJpYWwgYWRhcHRlci4KKyAgICAgIFRoZSBWb3lhZ2VyIGJyYWlsbGUgZHJpdmVyIG5vdyBzdXBwb3J0cyB0aGUgQnJhaWxsZSBQZW4gKGFrYSBFYXN5IExpbmspLgorICAgUHJlZmVyZW5jZXMgbWVudSBjaGFuZ2VzOgorICAgICAgVGhlIHByZWZlcmVuY2Ugc2VsZWN0aW9ucyBub3cgYXBwbHkgdG8gdGhlIHByZWZlcmVuY2VzIG1lbnUgaXRzZWxmLCB0b28uCisgICAgICBLZXlib2FyZCBrZXkgYmluZGluZ3Mgbm93IHdvcmsgY29ycmVjdGx5IHdpdGhpbiB0aGUgcHJlZmVyZW5jZXMgbWVudS4KKyAgICAgIFRoZSAiVGV4dCBTdHlsZSIgcHJlZmVyZW5jZSBoYXMgbmV3IHNldHRpbmdzOgorICAgICAgICAgOC1Eb3QgQ29tcHV0ZXIgQnJhaWxsZSAoZm9ybWVybHkgOC1kb3QpCisgICAgICAgICBDb250cmFjdGVkIEJyYWlsbGUgKGZvcm1lcmx5IDYtZG90KQorICAgICAgICAgNi1Eb3QgQ29tcHV0ZXIgQnJhaWxsZQorICAgICAgVGhlICJFeHBhbmQgQ3VycmVudCBXb3JkIiBwcmVmZXJlbmNlIGhhcyBiZWVuIGFkZGVkLgorICAgICAgICAgSXQncyBvbmx5IHZpc2libGUgaWYgIlRleHQgU3R5bGUiIGlzIHNldCB0byAiQ29udHJhY3RlZCBCcmFpbGxlIi4KKyAgICAgICAgIEl0IGNhbiBiZSBzZXQgdG86CisgICAgICAgICAgICBZZXMgKGRvbid0IGNvbnRyYWN0IHRoZSB3b3JkIHRoZSBjdXJzb3IgaXMgb24pCisgICAgICAgICAgICBObyAoY29udHJhY3QgdGhlIHdob2xlIGxpbmUpCisgICAgICBUaGUgIkNhcGl0YWxpemF0aW9uIE1vZGUiIHByZWZlcmVuY2UgaGFzIGJlZW4gYWRkZWQuCisgICAgICAgICBJdCdzIG9ubHkgdmlzaWJsZSBpZiAiVGV4dCBTdHlsZSIgaXMgc2V0IHRvICJDb250cmFjdGVkIEJyYWlsbGUiLgorICAgICAgICAgSXQgY2FuIGJlIHNldCB0bzoKKyAgICAgICAgICAgIE5vIENhcGl0YWxpemF0aW9uCisgICAgICAgICAgICBVc2UgQ2FwaXRhbCBTaWduCisgICAgICAgICAgICBTdXBlcmltcG9zZSBEb3QgNworICAgR2VuZXJhbCBjaGFuZ2VzOgorICAgICAgSW50ZXJuYXRpb25hbGl6YXRpb24gc3VwcG9ydCBoYXMgYmVlbiBpbXByb3ZlZC4KKyAgICAgIEZyZW5jaCBhbmQgR2VybWFuIHRyYW5zbGF0aW9ucyBoYXZlIGJlZW4gYWRkZWQuCisgICAgICBTdXBwb3J0IGZvciBtdWx0aS1ieXRlIGxvY2FsIGNoYXJhY3RlciBzZXRzIGhhcyBiZWVuIGltcHJvdmVkLgorICAgICAgSG9yaXpvbnRhbCB3aW5kb3cgbW90aW9ucyBub3cgd29yayBjb3JyZWN0bHkgd2l0aCBjb250cmFjdGVkIGJyYWlsbGUuCisgICAgICBUaGUgaGFsZiB3aW5kb3cgbGVmdCBtb3Rpb24gbm8gbG9uZ2VyIGNhbiBtb3ZlIHRvIGEgYmFkIGxvY2F0aW9uLgorICAgICAgQWxlcnQgbWVzc2FnZXMgbm8gbG9uZ2VyIGRpc2FwcGVhciB1bmV4cGVjdGVkbHkuCisgICAgICBUaGUgc3BlZWNoIEZJRk8gaXMgbm93IGNyZWF0ZWQgcmVsYXRpdmUgdG8gdGhlIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkuCisgICAgICBTZXJpYWwgZmxvdyBjb250cm9sIGlzIG5vdyBlbmFibGVkIGJlZm9yZSBkZXZpY2UgcHJvYmluZy4KKyAgICAgIFRoZSBmb2xsb3dpbmcgZ2xvYmFsIHZhcmlhYmxlcyBmb3IgdXNlIHdpdGhpbiB0YWJsZXMgYXJlIG5vdyBwcmVkZWZpbmVkOgorICAgICAgICAgdGFibGVzRGlyZWN0b3J5CisgICAgICAgICB0YWJsZUV4dGVuc2lvbgorICAgICAgICAgc3VidGFibGVFeHRlbnNpb24KKyAgIEFsdmEgYnJhaWxsZSBkcml2ZXIgY2hhbmdlczoKKyAgICAgIFRoZSBCQyBrZXkgYmluZGluZ3MgaGF2ZSBiZWVuIGNoYW5nZWQgc2lnbmlmaWNhbnRseSBpbiBvcmRlciB0byBhZGQKKyAgICAgIG1vcmUgZnVuY3Rpb25zIGFuZCB0byBzdXBwb3J0IHRoZSBVU0I2NDAgKHdoaWNoIGhhcyBubyBzbWFydHBhZCkuCisgICAgICBUaGUgYnJhaWxsZSBrZXlib2FyZCBvZiB0aGUgQkMgRmVhdHVyZSBQYWNrIGlzIG5vdyBzdXBwb3J0ZWQuCisgICBCYXVtIGJyYWlsbGUgZHJpdmVyIGNoYW5nZXM6CisgICAgICBVcGRhdGluZyB0aGUgdGV4dCBhbmQgc3RhdHVzIGNlbGxzIG9mIHRoZSBWYXJpbyA4MCBoYXMgYmVlbiBmaXhlZC4KKyAgICAgIFRoZSBmcm9udCBhbmQgY29tbWFuZCBrZXlzIG9mIHRoZSBWYXJpbyA4MCBhcmUgbm93IHN1cHBvcnRlZC4KKyAgIEV1cm9CcmFpbGxlIGJyYWlsbGUgZHJpdmVyIGNoYW5nZXM6CisgICAgICBSZWFkaW5nIGtleXMgaXMgZmFzdGVyIGFuZCBubyBsb25nZXIgZ2VuZXJhdGVzIHNwdXJpb3VzIGlucHV0IGVycm9ycy4KKyAgIEhhbmR5VGVjaCBicmFpbGxlIGRyaXZlciBjaGFuZ2VzOgorICAgICAgU3VwcG9ydCBmb3IgdGhlIEFjdGl2ZSBCcmFpbGxlIGhhcyBiZWVuIGFkZGVkLgorICAgICAgVGhlIGhlbHAgc2NyZWVuIG5vdyBkZXNjcmliZXMgaG93IHRoZSBrZXlwYWQga2V5cyBhcmUgbmFtZWQuCisgICBQYXBlbm1laWVyIGJyYWlsbGUgZHJpdmVyIGNoYW5nZXM6CisgICAgICBUaGUgaW5pdGlhbCBzdGF0ZSBvZiB0aGUgc3dpdGNoZXMgYW5kIGtleXMgb2YgRUwgbW9kZWxzIGlzIGRldGVjdGVkLgorICAgU2Vpa2EgYnJhaWxsZSBkcml2ZXIgY2hhbmdlczoKKyAgICAgIFRoZSBoZWxwIHNjcmVlbiBub3cgZGVzY3JpYmVzIHRoZSBrZXkgbGF5b3V0LgorICAgVFRZIGJyYWlsbGUgZHJpdmVyIGNoYW5nZXM6CisgICAgICBBIGZldyBtb3JlIGtleSBiaW5kaW5ncyBoYXZlIGJlZW4gZGVmaW5lZC4KKyAgIFZveWFnZXIgYnJhaWxsZSBkcml2ZXIgY2hhbmdlczoKKyAgICAgIFNlcmlhbCBzdXBwb3J0IGhhcyBiZWVuIGFkZGVkLgorICAgICAgQmx1ZXRvb3RoIHN1cHBvcnQgaGFzIGJlZW4gYWRkZWQuCisgICAgICBTdXBwb3J0IGZvciB0aGUgcGFydCAyMzIgc2VyaWFsIGFkYXB0ZXIgaGFzIGJlZW4gYWRkZWQuCisgICAgICBTdXBwb3J0IGZvciB0aGUgQnJhaWxsZSBQZW4gKGFrYSBFYXN5IExpbmspIGhhcyBiZWVuIGFkZGVkLgorICAgWFdpbmRvdyBicmFpbGxlIGRyaXZlciBjaGFuZ2VzOgorICAgICAgTW9yZSBhbmQgbGVzcyByZXN0cmljdGl2ZSBmb250cyBhcmUgc3VwcG9ydGVkLgorICAgICAgSGFyZCBwcm9ncmFtIGV4aXRzIGhhdmUgYmVlbiByZW1vdmVkLgorICAgZVNwZWFrIHNwZWVjaCBkcml2ZXIgY2hhbmdlczoKKyAgICAgIFRoZSBmdWxsIGFkdmVydGl6ZWQgc3BlZWNoIHJhdGUgcmFuZ2UgY2FuIG5vdyBiZSB1c2VkLgorICAgRmVzdGl2YWxMaXRlIHNwZWVjaCBkcml2ZXIgY2hhbmdlczoKKyAgICAgIFRoZSBkZWZhdWx0IHZvaWNlIGhhcyBiZWVuIGNoYW5nZWQgdG8ga2FsIChmcm9tIGthbDE2KS4KKyAgIEF0U3BpIHNjcmVlbiBkcml2ZXIgY2hhbmdlczoKKyAgICAgIE5vIG1vcmUgYW5ub3lpbmcgd2FybmluZ3Mgd2hlbiBub3Qgb24gYW4gQXRTcGkgd2lkZ2V0LgorICAgQnJsQVBJIGZpeGVzOgorICAgICAgSVNPLTg4NTktMSBpcyBub3cgYWNjZXB0ZWQgYXMgYSBjaGFyYWN0ZXIgc2V0IHdoZW4gaWNvbnYgaXNuJ3QgYXZhaWxhYmxlLgorICAgICAgVGhlIGF1dG9yZXBlYXQgZmxhZ3MgYXJlIG5vdyBoYW5kbGVkIG9uIGEgcGVyIHNlc3Npb24gYmFzaXMuCisgICAgICBDb21tYW5kcyBhcmUgbm93IHByb2Nlc3NlZCB3aGVuIHRoZSBkZXZpY2UgaXMgcmVsZWFzZWQuCisgICBXaW5kb3dFeWVzIEJybEFQSSBkcml2ZXIgY2hhbmdlczoKKyAgICAgIFRlc3RpbmcgZm9yIEJybEFQSSBvcGVuIGVycm9ycyBoYXMgYmVlbiBpbXByb3ZlZC4KKyAgIFRleHQgdGFibGUgY2hhbmdlczoKKyAgICAgIEEgY29tbW9uIHN1YnRhYmxlIGZvciB0aGUgYmxvY2sgY2hhcmFjdGVycyBoYXMgYmVlbiBhZGRlZC4KKyAgICAgIFRoZSBnbHlwaCBkaXJlY3RpdmUgaGFzIGJlZW4gYWRkZWQuCisgICAgICBTZXZlcmFsIGFsdGVybmF0ZSBmb250cyBmb3IgdGhlIExhdGluIGxldHRlcnMgYXJlIG5vdyBkZWZpbmVkLgorICAgICAgSWYgYSBjaGFyYWN0ZXIgaXNuJ3QgZGVmaW5lZCB0aGVuIGNoZWNrIGZvciBhbiBhbHRlcm5hdGl2ZSB3aGljaCBpczoKKyAgICAgICAgIChpdHMgVW5pY29kZSBiYXNlIGNoYXJhY3RlciwgaXRzIGljb252LWRlZmluZWQgQVNDSUkgZXF1aXZhbGVudCwgZXRjKS4KKyAgICAgIFRoZSBlbl9VSyB0ZXh0IHRhYmxlIGhhcyBiZWVuIHJlbmFtZWQgdG8gZW5fR0IgKHRvIGNvbXBseSB3aXRoIElTTyAzMTY2KS4KKyAgICAgIFVwZGF0ZWQgdGV4dCB0YWJsZXM6CisgICAgICAgICBibyAoVGliZXRhbikKKyAgICAgICAgIGJyZjogZG90IDcgaXMgbm8gbG9uZ2VyIHByZXNlbnRlZAorICAgICAgICAgZnJfRlIgKEZyZW5jaCBGcmFuY2UpCisgICAgICAgICBmci12cyAoRnJlbmNoIHRhYmxlIHVzZWQgYnkgVmlzaW9CcmFpbGxlIGRldmljZXMpCisgICAgICAgICBpcyAoSWNlbGFuZGljKTogdXBkYXRlZCB0byB0aGUgbmV3bHkgYWRvcHRlZCBzdGFuZGFyZAorICAgQ29udHJhY3Rpb24gdGFibGUgY2hhbmdlczoKKyAgICAgIElmIGEgemVyby13aWR0aCBjaGFyYWN0ZXIgaXNuJ3QgZGVmaW5lZCB0aGVuIGRvbid0IHNob3cgaXQuCisgICAgICBVcGRhdGVkIHRhYmxlczoKKyAgICAgICAgIGRlLWt1cnpzY2hyaWZ0IChHZXJtYW4pCisgICAgICAgICBlbi11cy1nMiAoQW1lcmljYW4gRW5nbGlzaCkKKyAgICAgICAgIGVzIChTcGFuaXNoKQorICAgICAgICAgZnItYWJyZWdlIChGcmVuY2gpCisgICAgICAgICB6aC10dyAoVGFpd2FuZXNlIENoaW5lc2UpCisgICBLZXkgdGFibGUgY2hhbmdlczoKKyAgICAgIEEgc3BlY2lmaWMga2V5IHdpdGhpbiBhIHNldCBjYW4gbm93IGJlIHNwZWNpZmllZCBieSBudW1iZXIuCisgICAgICBBIGtleSBjb21iaW5hdGlvbiBjYW4gbm93IGluY2x1ZGUgc3BlY2lmaWMga2V5cyB3aGljaCBhcmVuJ3QgaW4gc2V0IDAuCisgICAgICBLZXlzIHdoaWNoIGFyZW4ndCBpbiBzZXQgMCBjYW4gbm93IGJlIG1hcHBlZCB0byBrZXlib2FyZCBmdW5jdGlvbnMuCisgICAgICBBIGtleSBzZXQgbmFtZSBjYW4gbm93IGJlIHVzZWQgdG8gZGVmaW5lIGEgaG90a2V5LgorICAgICAgVGhlIGhlbHAgdGV4dCBubyBsb25nZXIgaW5jbHVkZXMgaGlkZGVuIGhvdGtleXMuCisgICAgICBUaGUgaGVscCB0ZXh0IG5vdyBoYW5kbGVzIGNvbnRleHQtc3BlY2lmaWMgaG90a2V5cyBjb3JyZWN0bHkuCisgICAgICBUaGUgbm90ZSBkaXJlY3RpdmUgbm93IHN1cHBvcnRzIHRoZSB1c2Ugb2YgdmFyaWFibGVzLgorICAgV2luZG93cyBjaGFuZ2VzOgorICAgICAgU2VyaWFsIGRldmljZXMgYmV5b25kIENPTTkgbWF5IG5vdyBiZSBzcGVjaWZpZWQuCisgICAgICBUaGUgV2luZG93RXllcyBkcml2ZXIgaXMgbm93IGNvcGllZCBpbnRvIHRoZSBjb3JyZWN0IGluc3RhbGxhdGlvbiBkaXJlY3RvcnkuCisgICBCdWlsZCBjaGFuZ2VzOgorICAgICAgQnVpbGRpbmcgYW4gZXhwb3J0ZWQgKG5vdCBjaGVja2VkIG91dCkgY29weSBub3cgImtub3dzIiBpdHMgcmV2aXNpb24gbnVtYmVyLgorICAgICAgTWFrZSBzdXBwb3J0IGZvciBpbnN0YWxsL3VuaW5zdGFsbCBvZiAvdXNyL3NoYXJlL2RvYy9icmx0dHkgaGFzIGJlZW4gYWRkZWQuCisgICAgICBUaGUgbWFrZSB0YXJnZXRzIGZvciBzb3VyY2UgYXJjaGl2ZXMgYXJlIG5vdyBwcmVmaXhlZCB3aXRoICJzcmMtIi4KKyAgICAgIFRoZSBiaW4tdGFyLCBiaW4tdGFyLWd6aXAsIGFuZCBiaW4tdGFyLWJ6aXAyIG1ha2UgdGFyZ2V0cyBoYXZlIGJlZW4gYWRkZWQuCisgICAgICBTdXBwb3J0IGZvciB4eiBjb21wcmVzc2lvbiBvZiBiaW5hcnkgYW5kIHNvdXJjZSBhcmNoaXZlcyBoYXMgYmVlbiBhZGRlZC4KKyAgICAgIFRoZSBwcmVmZXJlbmNlcyBmaWxlIGhhcyBiZWVuIG1vdmVkIHRvIC92YXIvbGliL2JybHR0eS9icmx0dHkucHJlZnMuCisgICAgICBUaGVyZSdzIG5vdyBvbmx5IG9uZSBwcmVmZXJlbmNlcyBmaWxlIChpbnN0ZWFkIG9mIG9uZSBwZXIgYnJhaWxsZSBkcml2ZXIpLgorICAgICAgVGhlIHByZWZlcmVuY2VzIGZpbGUgaXMgbm93IHRleHQtYmFzZWQgKGluc3RlYWQgb2YgYmluYXJ5KS4KKyAgICAgIFRoZSAid3JpdGFibGUiIGRpcmVjdG9yeSBoYXMgYmVlbiBtb3ZlZCB0byAvdmFyL3J1bi9icmx0dHkuCisgICAgICBUaGUgImxpYnJhcnkiIGRpcmVjdG9yeSBpcyBub3cga25vd24gYXMgdGhlICJkcml2ZXJzIiBkaXJlY3RvcnkuCisgICAgICBUaGUgImRhdGEiIGRpcmVjdG9yeSBubyBsb25nZXIgaGFzIGEgdXNlIGFuZCBoYXMgYmVlbiByZW1vdmVkLgorICAgICAgU3VwcG9ydCBmb3IgdGhlICJnamFyIiBjb21tYW5kIGhhcyBiZWVuIGFkZGVkLgorCitNYXkgMTAsIDIwMTA6CisgLSBCUkxUVFkgNC4yIHJlbGVhc2VkOgorICAgRW5kaW5nIGEgY3V0IG9wZXJhdGlvbiBiZXlvbmQgdGhlIHJpZ2h0IGVkZ2Ugb2YgdGhlIHNjcmVlbiBoYXMgYmVlbiBmaXhlZC4KKyAgIEtleS9jaGFyYWN0ZXIgaW5zZXJ0aW9uIHdvcmtzIHdpdGggbmV3ZXIgdmVyc2lvbnMgb2YgWG9yZy4KKyAgIFRoZSBicmFpbGxlIGRyaXZlciBoZWxwIGZpbGVzIGhhdmUgYmVlbiBjb252ZXJ0ZWQgdG8gcGxhaW4gdGV4dC4KKyAgIE11bHRpcGxlIGluc3RhbmNlcyBvZiBicmx0dHkgbWF5IG5vdCB1c2UgdGhlIHNhbWUgUElEIGZpbGUuCisgICBUaGUga2V5cGFkIGtleWJvYXJkIGtleSB0YWJsZSBwcm92aWRlcyBhIGJyYWlsbGUgaW5wdXQgbW9kZS4KKyAgIFRoZSB3b3JraW5nIGRpcmVjdG9yeSBpcyBubyBsb25nZXIgc2V0IHRvIHRoZSBkYXRhIGRpcmVjdG9yeS4KKyAgIFRoZSB3cml0YWJsZSBkaXJlY3RvcnkgaXMgY3JlYXRlZCBpZiBpdCBkb2Vzbid0IGFscmVhZHkgZXhpc3QuCisgICBVU0IgSS9PIHZpYSBsaWJ1c2IxIGlzIHN1cHBvcnRlZC4KKyAgIFRoZSBNZXRlYyBicmFpbGxlIGRyaXZlciBoYXMgYmVlbiBhZGRlZC4KKyAgIFRoZSBlU3BlYWsgc3BlZWNoIGRyaXZlciBoYXMgYmVlbiBhZGRlZC4KKyAgIFRoZSBBdFNwaTIgc2NyZWVuIGRyaXZlciBoYXMgYmVlbiBhZGRlZC4KKyAgIEEgQnJsQVBJIGNsaWVudCBmb3IgV2luZG93LUV5ZXMgaGFzIGJlZW4gZGV2ZWxvcGVkLgorICAgQWxiYXRyb3NzIGJyYWlsbGUgZHJpdmVyIGNoYW5nZXM6CisgICAgICBDb252ZXJ0ZWQgdG8gdXNlIGtleSB0YWJsZXMuCisgICAgICBVU0Igc3VwcG9ydCBoYXMgYmVlbiBhZGRlZC4KKyAgIEFsdmEgYnJhaWxsZSBkcml2ZXIgY2hhbmdlczoKKyAgICAgIENvbnZlcnRlZCB0byB1c2Uga2V5IHRhYmxlcy4KKyAgIEJhdW0gYnJhaWxsZSBkcml2ZXIgY2hhbmdlczoKKyAgICAgIENvbnZlcnRlZCB0byB1c2Uga2V5IHRhYmxlcy4KKyAgICAgIFZhcmlvIFBybyB3aGVlbHMgYXJlIHN1cHBvcnRlZC4KKyAgICAgIEZvciBWYXJpbyBQcm8gbW9kZWxzLCBvbmx5IHVwZGF0ZSB0aGUgdGV4dCBjZWxscyB3aGljaCBoYXZlIGNoYW5nZWQuCisgICBDb21iaUJyYWlsbGUgYnJhaWxsZSBkcml2ZXIgY2hhbmdlczoKKyAgICAgIENvbnZlcnRlZCB0byB1c2Uga2V5IHRhYmxlcy4KKyAgIEZyZWVkb21TY2llbnRpZmljIGJyYWlsbGUgZHJpdmVyIGNoYW5nZXM6CisgICAgICBDb252ZXJ0ZWQgdG8gdXNlIGtleSB0YWJsZXMuCisgICAgICBCbHVldG9vdGggc3VwcG9ydCBoYXMgYmVlbiBhZGRlZC4KKyAgICAgIFRoZSBGb2N1cyBCbHVlIGlzIHN1cHBvcnRlZC4KKyAgICAgIFJvY2tlcnMgYW5kIGJ1bXBlciBiYXJzIGFyZSByZWNvZ25pemVkIGFzIGRpc3RpbmN0IGtleXMuCisgICBIYW5keVRlY2ggYnJhaWxsZSBkcml2ZXIgY2hhbmdlczoKKyAgICAgIENvbnZlcnRlZCB0byB1c2Uga2V5IHRhYmxlcy4KKyAgICAgIFByZXNzaW5nIHR3byByb3V0aW5nIGtleXMgc2ltdWx0YW5lb3VzbHkgaW1tZWRpYXRlbHkgY3V0cyB0aGUgc2VsZWN0ZWQgdGV4dC4KKyAgICAgIE5ld2VyIG1vZGVscyB3aGljaCB1c2UgdGhlIFVTQiBISUQgaW50ZXJmYWNlIGFyZSBzdXBwb3J0ZWQuCisgICAgICBUaGUgSW5wdXRNb2RlPSBwYXJhbWV0ZXIgaGFzIGJlZW4gcmVtb3ZlZC4KKyAgIEhJTVMgYnJhaWxsZSBkcml2ZXIgY2hhbmdlczoKKyAgICAgIENvbnZlcnRlZCB0byB1c2Uga2V5IHRhYmxlcy4KKyAgIFBhcGVubWVpZXIgYnJhaWxsZSBkcml2ZXIgY2hhbmdlczoKKyAgICAgIENvbnZlcnRlZCB0byB1c2Uga2V5IHRhYmxlcy4KKyAgICAgIFRoZSBEZWJ1Z1JlYWRzPSBhbmQgRGVidWdXcml0ZXM9IHBhcmFtZXRlcnMgaGF2ZSBiZWVuIHJlbW92ZWQuCisgICAgICBTdXBwb3J0IGZvciB0aGUgY29uZmlndXJhdGlvbiBmaWxlIGhhcyBiZWVuIHJlbW92ZWQgKG5vdyB1c2VzIGtleSB0YWJsZXMpLgorICAgUGVnYXN1cyBicmFpbGxlIGRyaXZlciBjaGFuZ2VzOgorICAgICAgQ29udmVydGVkIHRvIHVzZSBrZXkgdGFibGVzLgorICAgU2Vpa2EgYnJhaWxsZSBkcml2ZXIgY2hhbmdlczoKKyAgICAgIENvbnZlcnRlZCB0byB1c2Uga2V5IHRhYmxlcy4KKyAgIFZveWFnZXIgYnJhaWxsZSBkcml2ZXIgY2hhbmdlczoKKyAgICAgIENvbnZlcnRlZCB0byB1c2Uga2V5IHRhYmxlcy4KKyAgIEJybEFQSSBjaGFuZ2VzOgorICAgICAgS2V5IGV2ZW50IHN1cHBvcnQgaGFzIGJlZW4gYWRkZWQuCisgICAgICBWYXJpb3VzIGNsaWVudCBmaXhlcyBmb3IgdGhlIFdpbmRvd3MgZW52aXJvbm1lbnQuCisgICAgICBWYXJpb3VzIGZpeGVzIGZvciB3aGVuIHRocmVhZHMgYXJlbid0IGF2YWlsYWJsZS4KKyAgICAgIE5vIG1vcmUgZXh0cmFuZW91cyBjb25uZWN0aW9uIHRvIGxvY2FsaG9zdCB3aGVuIHVzaW5nIGEgVENQL0lQIGhvc3QgbmFtZS4KKyAgICAgIEEgZml4IHRvIGV4Y2VwdGlvbiBoYW5kbGluZyB3aXRoaW4gdGhlIFB5dGhvbiBiaW5kaW5ncy4KKyAgIEV4dGVybmFsU3BlZWNoIHNwZWVjaCBkcml2ZXIgY2hhbmdlczoKKyAgICAgIFR3by1sZXR0ZXIgZHJpdmVyIGlkZW50aWZpY2F0aW9uIGNvZGUgY2hhbmdlZCB0byAieHMiIChmcm9tICJlcyIpLgorICAgQXRTcGkgc2NyZWVuIGRyaXZlciBjaGFuZ2VzOgorICAgICAgU3RhdGljIGxpbmtpbmcgaXMgc3VwcG9ydGVkLgorICAgICAgQSBwcm9ibGVtIGNhdXNpbmcgY3Jhc2hlcyBvbiA2NC1iaXQgcGxhdGZvcm1zIGhhcyBiZWVuIHJlc29sdmVkLgorICAgV2luZG93cyBzY3JlZW4gZHJpdmVyIGNoYW5nZXM6CisgICAgICBTaWduaWZpY2FudCByZWR1Y3Rpb25zIGluIG1lbW9yeSB1c2FnZS4KKyAgICAgIEJldHRlciBoYW5kbGluZyBvZiB1bnJlYWRhYmxlIHNjcmVlbnMuCisgICAgICBCZXR0ZXIgaGFuZGxpbmcgb2YgdGhlIEFsdCtUYWIgd2luZG93LgorICAgRE9TIGNoYW5nZXM6CisgICAgICBMb2cgcmVjb3JkcyBhcmUgd3JpdHRlbiB0byB0aGUgZmlsZSAiYnJsdHR5LmxvZyIuCisgICAgICBUaGUgVFNJIGJyYWlsbGUgZHJpdmVyIHN0YXlzIGF0IDk2MDAgYmF1ZC4KKyAgIEtleSB0YWJsZSBjaGFuZ2VzOgorICAgICAgQWRkIHRoZSBmb2xsb3dpbmcgZGlyZWN0aXZlczoKKyAgICAgICAgIGFzc2lnbiwgY29udGV4dCwgaGlkZSwgaG90a2V5LCBpZmtleSwgbWFwLCBub3RlLCBzdXBlcmltcG9zZSwgdGl0bGUuCisgICAgICBBZGQgdGhlIFx7bmFtZX0gdmFyaWFibGUgbmFtZSBleHBhbnNpb24gc3ludGF4LgorICAgICAgQWRkIHRoZSAhIGltbWVkaWF0ZSBrZXkgc3ludGF4LgorICAgICAgQSBjb21tYW5kIG1heSBoYXZlIG1vcmUgdGhhbiBvbmUgbW9kaWZpZXIuCisgICAgICBUaGUgbGluZSBjb21tYW5kIG1vZGlmaWVycyBhcmUgc3VwcG9ydGVkLgorICAgICAgS2V5Ym9hcmQga2V5IHRhYmxlIG5hbWVzIGFyZSBub3cgcHJlZml4ZWQgd2l0aCAia2JkLSIuCisgICAgICBUaGUga3RidGVzdCB0b29sIGhhcyBiZWVuIGFkZGVkLgorICAgTGludXggY2hhbmdlczoKKyAgICAgIFVTQiBkZXZpY2UgaW5zcGVjdGlvbiBpcyBtb3JlIGVmZmljaWVudC4KKyAgICAgIEZpeGVzIHRvIGtleWJvYXJkIGNvbm5lY3QvZGlzY29ubmVjdCBtb25pdG9yaW5nLgorICAgICAgRml4ZXMgdG8ga2V5IGV2ZW50IGhhbmRsaW5nLgorICAgICAgUENNIGFuZCBNSURJIHN1cHBvcnQgZGVmYXVsdHMgdG8gQUxTQSAoaW5zdGVhZCBvZiB0byBPU1MpLgorICAgV2luZG93cyBjaGFuZ2VzOgorICAgICAgSW1wcm92ZWQgY29udmVyc2lvbiBvZiBXaW5kb3dzIGVycm9ycyB0byBzeXN0ZW0gZXJyb3JzIChlcnJubyB2YWx1ZXMpLgorICAgICAgQmx1ZXRvb3RoIHN1cHBvcnQgaGFzIGJlZW4gYWRkZWQuCisgICAgICBUZXh0IHRhYmxlIGF1dG9zZWxlY3Rpb24gaGFzIGJlZW4gZml4ZWQuCisgICAgICBUZXh0IHRhYmxlIGVkaXRpbmcgKHR0YnRlc3QgLWUpIGlzIHN1cHBvcnRlZC4KKyAgIEJ1aWxkIGNoYW5nZXM6CisgICAgICAtLWVuYWJsZS11c2Itc3VwcG9ydCBjaGFuZ2VkIHRvIC0td2l0aC11c2ItcGFja2FnZVs9cGFja2FnZSwuLi5dLgorICAgICAgLS1kaXNhYmxlLXVzYi1zdXBwb3J0IGNoYW5nZWQgdG8gLS13aXRob3V0LXVzYi1wYWNrYWdlLgorICAgICAgLS1lbmFibGUtYmx1ZXRvb3RoLXN1cHBvcnQgY2hhbmdlZCB0byAtLXdpdGgtYmx1ZXRvb3RoLXBhY2thZ2VbPXBhY2thZ2UsLi4uXS4KKyAgICAgIC0tZGlzYWJsZS1ibHVldG9vdGgtc3VwcG9ydCBjaGFuZ2VkIHRvIC0td2l0aG91dC1ibHVldG9vdGgtcGFja2FnZS4KKyAgIFRleHQgdGFibGVzIHVwZGF0ZWQ6CisgICAgICBodSwgc2suCisgICBDb250cmFjdGlvbiB0YWJsZXMgdXBkYXRlZDoKKyAgICAgIGRlLWt1cnpzY2hyaWZ0LCBlbi11cy1nMiwgemgtdHcuCitPY3RvYmVyIDgsIDIwMDk6CisgLSBCUkxUVFkgNC4xIHJlbGVhc2VkOgorICAgR2VuZXJhbCBDaGFuZ2VzOgorICAgICAgQlJMX0NNRF9XSU5VUCBjYW4gZ28gYWJvdmUgdGhlIHRvcCByb3cgb2YgdGhlIHNjcmVlbi4KKyAgICAgIFByb3RlY3QgYWdhaW5zdCBOVUxMIGJlaW5nIGdpdmVuIHRvIHNucHJpbnRmKCkgZm9yIGEgc3RyaW5nLgorICAgICAgQ2hhbmdlIHRoZSAiYnJhaWxsZSBkaXNwbGF5IG9mZmxpbmUvb25saW5lIiBsb2dzIHRvIERFQlVHIChmcm9tIE5PVElDRSkuCisgICAgICBGaXhlcyB0byBzdGF0dXMgZmllbGQgaW5pdGlhbGl6YXRpb24gZHVyaW5nIGEgcHJlZmVyZW5jZXMgZmlsZSB1cGdyYWRlLgorICAgICAgRGVmYXVsdCBzdGF0dXMgZmllbGQgc2VsZWN0aW9uIHNob3VsZCB0YWtlIGludG8gYWNjb3VudCA2Ni1jZWxsIGRpc3BsYXlzLgorICAgICAgUmVtb3ZlIHVzYlJlc2V0RW5kcG9pbnQoKS4KKyAgICAgIFJlc29sdmUgZ2NjLTQuNCB3YXJuaW5ncy4KKyAgICAgIFJlc29sdmUgNjQtYml0IHdhcm5pbmdzLgorICAgICAgQyBjb21waWxlcnMgbmVlZG4ndCBkZWFsbG9jYXRlIHZhcmlhYmxlLXNpemUgYXJyYXlzIHVudGlsIGZ1bmN0aW9uIHJldHVybi4KKyAgICAgIFVwZGF0ZXMgdG8gdGhlIEVuZ2xpc2ggR3JhZGUgMiBjb250cmFjdGlvbiB0YWJsZS4KKyAgICAgIFVwZGF0ZXMgdG8gdGhlIEdlcm1hbiBjb250cmFjdGlvbiB0YWJsZS4KKyAgICAgIENoYW5nZSBjdGJ0ZXN0IHRvIGV4cGVjdCBpbnB1dCBlbmNvZGVkIGluIFVURi04LgorICAgICAgbGlibG91aXMgdGFibGVzIHVzZSB5IGZvciA1LWRpZ2l0IGFuZCB6IGZvciA4LWRpZ2l0IGNoYXJhY3RlcnMuCisgICBCYXVtIEJyYWlsbGUgRHJpdmVyIENoYW5nZXM6CisgICAgICBGaXggdGhlIHN1cHBvcnQgZm9yIGRpc3BsYXkga2V5ICM2IGluIFBCMiBtb2RlLgorICAgRXVyb0JyYWlsbGUgQnJhaWxsZSBEcml2ZXIgQ2hhbmdlczoKKyAgICAgIFJlLWFkZCBzb21lIGJpbmRpbmdzIGZvcmdvdHRlbiBkdXJpbmcgdGhlIGRyaXZlciByZXdyaXRlIGZvciAzLjEwLgorICAgICAgUmV3b3JrIHRoZSBiaW5kaW5ncyBhIGJpdCBmb3IgZ3JlYXRlciBjb25zaXN0ZW5jeSBhbmQgZWFzaWVyIGxlYXJuaW5nLgorICAgICAgQWRkIG5ldyBiaW5kaW5ncyB0byBzdXBwb3J0IGFzIG1hbnkgY29tbWFuZHMgYXMgcG9zc2libGUuCisgICBQYXBlbm1laWVyIEJyYWlsbGUgRHJpdmVyIENoYW5nZXM6CisgICAgICBJbnRlcnByZXQgdGhlIEVMNjZTIEVhc3kgQWNjZXNzIEJhciBjb3JyZWN0bHkuCisgICBUU0kgQnJhaWxsZSBEcml2ZXIgQ2hhbmdlczoKKyAgICAgIEluY3JlYXNlIHRoZSB3cml0ZSBkZWxheSBhIGJpdC4KKyAgIExpbnV4IFNjcmVlbiBEcml2ZXIgQ2hhbmdlczoKKyAgICAgIEdpdmUgS0RfRk9OVF9PUF9HRVQgbWF4aW11bSAocmF0aGVyIHRoYW4gcmVhc29uYWJseSBoaWdoKSBmb250IGRpbWVuc2lvbnMuCisgICBKYXZhIEJpbmRpbmdzIENoYW5nZXM6CisgICAgICBEZWZpbmUgdGhlIERPVG4gY29uc3RhbnRzIGFzIGJ5dGVzIChyYXRoZXIgdGhhbiBhcyBjaGFycykuCisgICAgICBKTkkgZml4ZXMgZm9yIFN1bi1iYXNlZCBKVk1zLgorICAgICAgTG9hZCB0aGUgSk5JIHBhcnQgYXV0b21hdGljYWxseSBhdCBzdGFydHVwLgorICAgTGlzcCBCaW5kaW5ncyBDaGFuZ2VzOgorICAgICAgUmVmZXJlbmNlIHZlcnNpb24gMC41LjMgb2YgQnJsQVBJLgorICAgUHl0aG9uIEJpbmRpbmdzIENoYW5nZXM6CisgICAgICBQeXJleCBkb2Vzbid0IGF1dG9tYXRpY2FsbHkgY29udmVydCBDJ3MgTlVMTCB0byBQeXRob24ncyBOb25lLgorICAgICAgVHJhbnNsYXRlIEJybEFQSSBleGNlcHRpb25zIGludG8gUHl0aG9uIGV4Y2VwdGlvbnMuCisgICBCcmxBUEkgQ2hhbmdlczoKKyAgICAgIFJlbW92ZSBhbGwgbWVudGlvbiBvZiBrZXkgc2V0cy4KKyAgICAgIEhhbmRsZSB1bmJvdW5kIGtleSByYW5nZXMuCisgICAgICBGaXggYW4gaXNzdWUgd2l0aCBUQ1AvSVAgc29ja2V0IGNvbm5lY3Rpb24gb24gV2luZG93cy4KKyAgICAgIEhhbmRsZSB0aGUgcG9zc2liaWxpdHkgb2YgYSBkaWZmZXJlbnQgYnJhaWxsZSBkZXZpY2UgYWZ0ZXIgcmVzdW1pbmcuCisgICBXaW5kb3dzIENoYW5nZXM6CisgICAgICBGaXggYSBjb21waWxlIHByb2JsZW0uCisgICAgICBUaGUgc2NyZWVuIGRyaXZlciBzaG91bGQgcmVmZXIgdG8gImNvbnNvbGVzIiByYXRoZXIgdGhhbiB0byAidGVybWluYWxzIi4KKyAgIERvY3VtZW50YXRpb24gVXBkYXRlczoKKyAgICAgIFVwZGF0ZSB0aGUgRnJlbmNoIG1hbnVhbCBmcm9tIDMuMTAgdG8gNC4xLgorICAgICAgRG9jdW1lbnQgdGhhdCB0aGUgRXVyb0JyYWlsbGUgRXN5cyBpcyBzdXBwb3J0ZWQuCisgICAgICBVcGRhdGUgdGhlIHN1cHBvcnRlZCBGcmVlZG9tU2NpZW50aWZpYyBtb2RlbCBsaXN0cy4KKyAgICAgIENsYXJpZnkgdGhhdCAtLXdpdGgtKi10YWJsZSBzZXRzIHRoZSBmYWxsYmFjayAobm90IHRoZSBkZWZhdWx0KSB0YWJsZS4KKyAgICAgIENoYW5nZSBsb2cgZml4ZXMuCisgICAgICBVcGRhdGUgdGhlIFRTSSBicmFpbGxlIGRyaXZlcidzIFJFQURNRS4KKyAgICAgIEFkZCBSRUFETUUuQmx1ZXRvb3RoLgorICAgICAgVGhlIFJFQURNRSBmb3IgaG93IHRvIHVzZSBhIFNlaWthIHdpdGggdGhlIFRTSSBkcml2ZXIgaXMgbm8gbG9uZ2VyIG5lZWRlZC4KKyAgICAgIEUtbWFpbCBhZGRyZXNzIGNoYW5nZSBmb3IgTmljb2xhcyBQaXRyZS4KKyAgICAgIEUtbWFpbCBhZGRyZXNzIGNoYW5nZSBmb3IgSmVhbi1QaGlsaXBwZSBNZW5ndWFsLgorICAgQnVpbGQgQ2hhbmdlczoKKyAgICAgIFRoZSBBUEkgc29ja2V0IGRpcmVjdG9yeSBzaG91bGQgYmUgY3JlYXRlZCB1bmRlciB0aGUgaW5zdGFsbCByb290LgorICAgICAgQWRkIHRoZSAtLWRpc2FibGUtc3RyaXBwaW5nIGNvbmZpZ3VyZSBvcHRpb24uCisgICAgICBSZW1vdmUgdGhlIC0tZGlzYWJsZS1wcmVmZXJlbmNlcy1tZW51IGNvbmZpZ3VyZSBvcHRpb24uCisgICAgICBSZW1vdmUgdGhlIC0tZGlzYWJsZS10YWJsZS1zZWxlY3Rpb24gY29uZmlndXJlIG9wdGlvbi4KKyAgICAgIEZlZG9yYSBubyBsb25nZXIgY3JlYXRlcyAiL3Vzci9saWIvb2NhbWwvc3R1YmxpYnMvZGxsYnJsYXBpX3N0dWJzLioiLgorCitNYXkgMTUsIDIwMDk6CisgLSBCUkxUVFkgNC4wIHJlbGVhc2VkOgorICAgR2VuZXJhbCBDaGFuZ2VzOgorICAgICAgQWxsIHNjcmVlbiByZWFkaW5nLCBjaGFyYWN0ZXIgaGFuZGxpbmcsIGFuZCB0YWJsZXMgYXJlIG5vdyBVbmljb2RlLWJhc2VkLgorICAgICAgVGhlICI8bj4gc3RhcnR1cCBwcm9ibGVtcyIgbWVzc2FnZSBoYXMgYmVlbiByZW1vdmVkLgorICAgICAgQm9vdCBvcGVyYW5kcyBtYXkgY29udGFpbiBtdWx0aXBsZSBpdGVtcyBzZXBhcmF0ZWQgYnkgcGx1cyBzaWducy4KKyAgICAgIFVTQiBlbmhhbmNlbWVudHMgYW5kIGZpeGVzLgorICAgICAgV2luZG93cyBzZXJpYWwgSS9PIGZpeGVzLgorICAgICAgQSBVREVWIHJ1bGVzIGZpbGUgZm9yIGJybHR0eSBpcyBwcm92aWRlZC4KKyAgICAgIEFuIHVwc3RhcnQgam9iIGZvciBicmx0dHkgaXMgcHJvdmlkZWQuCisgICBTdGF0dXMgQ2VsbHM6CisgICAgICBIYXJkLWNvZGVkIHN0eWxlcyBoYXZlIGJlZW4gcmVwbGFjZWQgYnkgdXNlci1jb25maWd1cmFibGUgZmllbGRzLgorICAgICAgSWYgdGhlcmUgYXJlIG5vIHN0YXR1cyBjZWxscyB0aGVuIGEgdGV4dCByZWdpb24gbWF5IGJlIHJlc2VydmVkIGZvciB0aGVtLgorICAgICAgVGhlIElORk8gY29tbWFuZCB0b2dnbGVzIHRleHQgbWF4aW1pemF0aW9uIGlmIGEgdGV4dCByZWdpb24gaXMgYmVpbmcgdXNlZC4KKyAgIEJyYWlsbGUgRHJpdmVyczoKKyAgICAgIFRoZSBQZWdhc3VzIGFuZCBTZWlrYSBicmFpbGxlIGRyaXZlcnMgaGF2ZSBiZWVuIGFkZGVkLgorICAgICAgVGhlIEJyYWlsbGVTZW5zZSBicmFpbGxlIGRyaXZlciBoYXMgYmVlbiByZW5hbWVkIHRvIEhJTVMuCisgICBBbHZhIEJyYWlsbGUgRHJpdmVyOgorICAgICAgVGhlIEJDNm5uIHNlcmllcyBhcmUgc3VwcG9ydGVkLgorICAgQmF1bSBCcmFpbGxlIERyaXZlcjoKKyAgICAgIFRoZSBWYXJpb0Nvbm5lY3QsIEVjb1ZhcmlvLCBWYXJpb1BybywgYW5kIFJlZnJlc2hhYnJhaWxsZSBhcmUgc3VwcG9ydGVkLgorICAgQnJhaWxsZU5vdGUgQnJhaWxsZSBEcml2ZXI6CisgICAgICBUaGUgc3RhdHVzY2VsbHM9IHBhcmFtZXRlciBoYXMgYmVlbiByZW1vdmVkLgorICAgRXVyb0JyYWlsbGUgQnJhaWxsZSBEcml2ZXI6CisgICAgICBVU0Igc3VwcG9ydCBoYXMgYmVlbiBhZGRlZC4KKyAgICAgIFJvYnVzdG5lc3MgaGFzIGJlZW4gaW1wcm92ZWQuCisgICAgICBCaW5kaW5ncyBmb3IgdGhlIEVzeXMgaGF2ZSBiZWVuIGFkZGVkLgorICAgRnJlZWRvbVNjaWVudGlmaWMgQnJhaWxsZSBEcml2ZXI6CisgICAgICBUaGUgc3RhdHVzY2VsbHM9IHBhcmFtZXRlciBoYXMgYmVlbiByZW1vdmVkLgorICAgSGFuZHlUZWNoIEJyYWlsbGUgRHJpdmVyOgorICAgICAgVGhlIEV2b2x1dGlvbiBtb2RlbHMgaGF2ZSBiZWVuIHJlZGVmaW5lZCB0byBvbmx5IGhhdmUgdGV4dCBjZWxscy4KKyAgIEhJTVMgQnJhaWxsZSBEcml2ZXI6CisgICAgICBUaGUgQnJhaWxsZSBTZW5zZSBrZXkgYmluZGluZ3MgaGF2ZSBiZWVuIHJld29ya2VkLgorICAgICAgU3luY0JyYWlsbGUgc3VwcG9ydCBoYXMgYmVlbiBhZGRlZC4KKyAgICAgIEJsdWV0b290aCBzdXBwb3J0IGhhcyBiZWVuIGZpeGVkLgorICAgVFNJIEJyYWlsbGUgRHJpdmVyOgorICAgICAgVGhlIHdheSBTZWlrYSBkZXZpY2VzIGltcGxlbWVudCBQb3dlckJyYWlsbGUgZW11bGF0aW9uIGlzIHN1cHBvcnRlZC4KKyAgICAgIFRoZSBQb3dlckJyYWlsbGUgODEgaGFzIGJlZW4gcmVkZWZpbmVkIHRvIG9ubHkgaGF2ZSB0ZXh0IGNlbGxzLgorICAgICAgVGhlIGNvcmUncyBmbG93IGNvbnRyb2wgbWVjaGFuaXNtIGlzIHVzZWQgKHJhdGhlciB0aGFuIGhhcmQtY29kZWQgZGVsYXlzKS4KKyAgIFZveWFnZXIgQnJhaWxsZSBEcml2ZXI6CisgICAgICBUaGUgc3RhdHVzY2VsbHM9IHBhcmFtZXRlciBoYXMgYmVlbiByZW1vdmVkLgorICAgICAgS2V5IGJpbmRpbmcgY2hhbmdlczoKKyAgICAgICAgIENVVEFQUEVORC9DVVRMSU5FIG1vdmVkIHRvIENSdCMgKyBCL0MKKyAgICAgICAgIFBSSU5ERU5UL05YSU5ERU5UIG1vdmVkIHRvIENSdCMgKyBBK0IvQytECisgICBYV2luZG93IEJyYWlsbGUgRHJpdmVyOgorICAgICAgVGhlIGZvbnQ9IHBhcmFtZXRlciBoYXMgYmVlbiBhZGRlZC4KKyAgIFNwZWVjaERpc3BhdGNoZXIgU3BlZWNoIERyaXZlcjoKKyAgICAgIFNpbmdsZSBjaGFyYWN0ZXJzIGFyZSBub3cgc3Bva2VuIGNvcnJlY3RseS4KKyAgIEJybEFQSSBTZXJ2ZXI6CisgICAgICBUaGUgdmVyc2lvbiBoYXMgYmVlbiBjaGFuZ2VkIGZyb20gMC41LjIgdG8gMC41LjMuCisgICAgICBlbnRlclR0eU1vZGUoKSBub3cgd29ya3MgY29ycmVjdGx5IG9uIFdpbmRvd3MuCisgICAgICBQcm9ibGVtcyB3aGVuIG5vIGJyYWlsbGUgZGlzcGxheSBpcyBjb25uZWN0ZWQgYXQgc3RhcnR1cCBoYXZlIGJlZW4gcmVzb2x2ZWQuCisgICAgICBUaGUgY29yZSdzIG91dHB1dCBpcyBhdXRvbWF0aWNhbGx5IHJlc3RvcmVkIHdoZW4gdGhlIGxhc3QgY2xpZW50IGRpc2Nvbm5lY3RzLgorICAgICAgV3JpdGVzIHRvIHRoZSBkcml2ZXIgYXJlIG5vIGxvbmdlciBidWZmZXJlZC4KKyAgICAgIEJyYWlsbGUga2V5Ym9hcmQgaW5wdXQgaXMgbm93IGNvbnZlcnRlZCB0byBjaGFyYWN0ZXJzLgorICAgICAgT3V0cHV0IHRvIHRoZSBicmFpbGxlIGRpc3BsYXkgaXMgbm93IGRyYWluZWQgdGhlIHNhbWUgd2F5IHRoZSBjb3JlIGRvZXMuCisgICBMaXNwIEJpbmRpbmdzOgorICAgICAgTm93IGNvbXBhdGlibGUgd2l0aCBDRkZJIDAuMTAuMC4KKyAgIFRleHQgVGFibGVzOgorICAgICAgVGhlIGxpY2Vuc2UgaGFzIGJlZW4gY2hhbmdlZCBmcm9tIEdQTCB0byBMR1BMLgorICAgICAgRmlsZSBuYW1lcyBoYXZlIGJlZW4gY2hhbmdlZCBmcm9tICJ0ZXh0LioudGJsIiB0byAiKi50dGIiLgorICAgICAgVGhlIGZpbGUgZXh0ZW5zaW9uICIudHRpIiBpcyB1c2VkIGZvciB0ZXh0IHN1YnRhYmxlcy4KKyAgICAgIFRhYmxlcyBtdXN0IGJlIGVuY29kZWQgaW4gVVRGLTggKHJhdGhlciB0aGFuIGluIGEgbG9jYWwgY2hhcmFjdGVyIHNldCkuCisgICAgICBUaGUgImJ5dGUiIGtleXdvcmQgaXMgbm8gbG9uZ2VyIG9wdGlvbmFsLgorICAgICAgVGhlICJkb3QiIGRpcmVjdGl2ZSBpcyBubyBsb25nZXIgc3VwcG9ydGVkLgorICAgICAgVGhlICJjaGFyIiBhbmQgImluY2x1ZGUiIGRpcmVjdGl2ZXMgaGF2ZSBiZWVuIGFkZGVkLgorICAgICAgTGFuZ3VhZ2UtYmFzZWQgdGFibGVzIGluY2x1ZGUgY29tbW9uIHJlcHJlc2VudGF0aW9ucyBmb3IgYm94IGNoYXJhY3RlcnMuCisgICAgICBUYWJsZXMgZm9yIHNldmVyYWwgbGFuZ3VhZ2VzIGhhdmUgYmVlbiBhZGRlZC4KKyAgICAgIFRoZSBkZWZhdWx0IGlzIG5vdyB0byBzZWxlY3QgdGhlIHRhYmxlIGJhc2VkIG9uIHRoZSBsb2NhbGUncyBuYW1lLgorICAgICAgVGhlIHRibHRlc3QgdXRpbGl0eSBoYXMgYmVlbiByZW5hbWVkIHRvIHR0YnRlc3QuCisgICAgICBUaGUgY29tcHJlc3MsIGZpMiwgaWRlbnRpdHksIGFuZCBzaW1wbGUgdGFibGVzIGhhdmUgYmVlbiByZW1vdmVkLgorICAgICAgVGhlIGZvbGxvd2luZyB0YWJsZXMgaGF2ZSBiZWVuIHJlbmFtZWQgKG1vc3RseSBmb3IgSVNPIDYzOSBjb21wbGlhbmNlKToKKyAgICAgICAgIGN6ICAgICAtPiBjcworICAgICAgICAgZmkxICAgIC0+IGZpCisgICAgICAgICBuYWJjYyAgLT4gZW4tbmFiY2MKKyAgICAgICAgIHNlICAgICAtPiBzdgorICAgICAgICAgc2Utb2xkIC0+IHN2LTE5ODkKKyAgICAgICAgIHZpc2lvYiAtPiBmci12cworICAgICAgICAgdm5pICAgIC0+IHZpCisgICBBdHRyaWJ1dGVzIFRhYmxlczoKKyAgICAgIFRoZSBsaWNlbnNlIGhhcyBiZWVuIGNoYW5nZWQgZnJvbSBHUEwgdG8gTEdQTC4KKyAgICAgIEZpbGUgbmFtZXMgaGF2ZSBiZWVuIGNoYW5nZWQgZnJvbSAiYXR0cioudGJsIiB0byAiKi5hdGIiLgorICAgICAgVGhlIGZpbGUgZXh0ZW5zaW9uICIuYXRpIiBpcyB1c2VkIGZvciBhdHRyaWJ1dGVzIHN1YnRhYmxlcy4KKyAgICAgIFRhYmxlcyBtdXN0IGJlIGVuY29kZWQgaW4gVVRGLTggKHJhdGhlciB0aGFuIGluIExhdGluMSkuCisgICAgICBUaGUgImJ5dGUiIGRpcmVjdGl2ZSBpcyBubyBsb25nZXIgc3VwcG9ydGVkLgorICAgICAgVGhlICJpbmNsdWRlIiBkaXJlY3RpdmUgaGFzIGJlZW4gYWRkZWQuCisgICBDb250cmFjdGlvbiBUYWJsZXM6CisgICAgICBUaGUgbGljZW5zZSBoYXMgYmVlbiBjaGFuZ2VkIGZyb20gR1BMIHRvIExHUEwuCisgICAgICBUYWJsZXMgZm9yIHNldmVyYWwgbGFuZ3VhZ2VzIGhhdmUgYmVlbiBhZGRlZC4KKyAgICAgIFRoZSBmb2xsb3dpbmcgdGFibGVzIGhhdmUgYmVlbiByZW5hbWVkOgorICAgICAgICAgZW4tdWViYy1nMiAtPiBlbi11ZWItZzIKKyAgICAgIFRoZSBlbi11ZWItZzIsIGVuLXVzLWcyLCBhbmQgemgtdHcgdGFibGVzIGhhdmUgYmVlbiB1cGRhdGVkLgorICAgS2V5IHRhYmxlcyAoZm9yIGJpbmRpbmcga2V5Ym9hcmQga2V5cyB0byBicmx0dHkgY29tbWFuZHMpIGhhdmUgYmVlbiBhZGRlZDoKKyAgICAgIFRoZSBmaWxlIGV4dGVuc2lvbiAiLmt0YiIgaXMgdXNlZCBmb3Iga2V5IHRhYmxlcy4KKyAgICAgIFRoZSBmaWxlIGV4dGVuc2lvbiAiLmt0aSIgaXMgdXNlZCBmb3Iga2V5IHN1YnRhYmxlcy4KKyAgICAgIFRoZSBkZXNrdG9wLCBrZXlwYWQsIGFuZCBsYXB0b3Aga2V5IHRhYmxlcyBhcmUgcHJvdmlkZWQuCisgICAgICBUaGUgLWsgWy0ta2V5LXRhYmxlPV0gb3B0aW9uIGhhcyBiZWVuIGFkZGVkLgorICAgICAgVGhlIC1LIFstLWtleWJvYXJkLXByb3BlcnRpZXM9XSBvcHRpb24gaGFzIGJlZW4gYWRkZWQuCisgICBTb3VyY2UgVHJlZSBDaGFuZ2VzOgorICAgICAgVGhlIHRleHQgdGFibGVzIGhhdmUgYmVlbiBtb3ZlZCBmcm9tIEJyYWlsbGVUYWJsZXMvIHRvIFRhYmxlcy8uCisgICAgICBUaGUgYXR0cmlidXRlcyB0YWJsZXMgaGF2ZSBiZWVuIG1vdmVkIGZyb20gQnJhaWxsZVRhYmxlcy8gdG8gVGFibGVzLy4KKyAgICAgIFRoZSBjb250cmFjdGlvbiB0YWJsZXMgaGF2ZSBiZWVuIG1vdmVkIGZyb20gQ29udHJhY3Rpb25UYWJsZXMvIHRvIFRhYmxlcy8uCisgICAgICBUaGUgYnJhaWxsZSBkcml2ZXJzIGhhdmUgYmVlbiBtb3ZlZCBmcm9tIEJyYWlsbGVEcml2ZXJzLyB0byBEcml2ZXJzL0JyYWlsbGUvLgorICAgICAgVGhlIHNwZWVjaCBkcml2ZXJzIGhhdmUgYmVlbiBtb3ZlZCBmcm9tIFNwZWVjaERyaXZlcnMvIHRvIERyaXZlcnMvU3BlZWNoLy4KKyAgICAgIFRoZSBzY3JlZW4gZHJpdmVycyBoYXZlIGJlZW4gbW92ZWQgZnJvbSBTY3JlZW5Ecml2ZXJzLyB0byBEcml2ZXJzL1NjcmVlbi8uCisgICAgICBTb3VyY2UgZm9yIHRoZSBXaW5kb3dzIGluc3RhbGxlciBpcyBwcm92aWRlZC4KKworSnVseSAxNiwgMjAwODoKKyAtIEJSTFRUWSAzLjEwIHJlbGVhc2VkOgorICAgVGhlIGNvcmUgYW5kIGRyaXZlcnMgKGV4Y2x1ZGluZyB0ZXh0IHRhYmxlcykgYXJlIG5vdyBVbmljb2RlLWJhc2VkLgorICAgVGhlIERFU0NDSEFSIGZ1bmN0aW9uIG5vdyBzaG93cyAoaWYgcG9zc2libGUpIHRoZSBjaGFyYWN0ZXIncyBuYW1lLgorICAgTGluZWFyIGN1dHMgbm8gbG9uZ2VyIGluY2x1ZGUgbmV3bGluZSBjaGFyYWN0ZXJzLgorICAgU3BlY2lmeWluZyB0aGUgYnJhaWxsZSBkZXZpY2UgYXMgInNlcmlhbDoiIG5vdyBkZWZhdWx0cyB0byB0aGUgZmlyc3Qgc2VyaWFsIGRldmljZS4KKyAgIEFkZCBhIGRyaXZlciBmb3IgdGhlIEJyYWlsbGUgU2Vuc2UuCisgICBCcmluZyB0aGUgRnJlbmNoIG1hbnVhbCBmdWxseSB1cC10by1kYXRlICh3YXMgYXQgMy42KS4KKyAgIExpbnV4LXNwZWNpZmljIGNoYW5nZXM6CisgICAgICBEb24ndCB1bm5lY2Vzc2FyaWx5IHdha2UgdXAgVVNCIGRldmljZXMgd2hlbiBzZWFyY2hpbmcuCisgICBBbGJhdHJvc3MgYnJhaWxsZSBkcml2ZXIgY2hhbmdlczoKKyAgICAgIENvcnJlY3RseSBoYW5kbGUga2V5cyB3aGljaCBzZW5kIHRoZWlyIGNvZGUgb24gYm90aCBwcmVzcyBhbmQgcmVsZWFzZS4KKyAgIEJhdW0gYnJhaWxsZSBkcml2ZXIgY2hhbmdlczoKKyAgICAgIEJpbmQgVEwxK1RSMyB0byB0aGUgQkFDSyBmdW5jdDVpb24uCisgICBFdXJvQnJhaWxsZSBicmFpbGxlIGRyaXZlciBjaGFuZ2VzOgorICAgICAgUmV3cml0dGVuLgorICAgICAgQWRkIHN1cHBvcnQgZm9yIHRoZSBJcmlzIFBDIGtleWJvYXJkLgorICAgICAgQWRkIGtleSBiaW5kaW5nIHRvIGRvIFNoaWZ0K1RhYiBkaXJlY3RseSAoZG90cyAyMzUgKyBzcGFjZSkuCisgICAgICBOZXcgRXN5c0lyaXMga2V5IGJpbmRpbmdzOgorICAgICAgICAgVktfTDM0IC0+IEZSRUVaRQorICAgICAgICAgVktfTDY3IC0+IEhPTUUKKyAgIEZyZWVkb21TY2llbnRpZmljIGJyYWlsbGUgZHJpdmVyIGNoYW5nZXM6CisgICAgICBOZXcgUEFDIE1hdGUga2V5IGJpbmRpbmdzOgorICAgICAgICAgcm91dGluZyBrZXkgKyBsZWZ0IHdoZWVsIHByZXNzIC0+IFNFVExFRlQKKyAgICAgICAgIHJvdXRpbmcga2V5ICsgcmlnaHQgd2hlZWwgcHJlc3MgLT4gREVTQ0NIQVIKKyAgIEdlbmVyYWwgc3BlZWNoIHN1cHBvcnQgY2hhbmdlczoKKyAgICAgIEFkZCBhIHByZWZlcmVuY2UgZm9yIHNldHRpbmcgdGhlIHBpdGNoLgorICAgICAgQWRkIGEgcHJlZmVyZW5jZSBmb3Igc2V0dGluZyB0aGUgcHVuY3R1YXRpb24gbGV2ZWwuCisgICBTcGVlY2hEaXNwYXRjaGVyIHNwZWVjaCBkcml2ZXIgY2hhbmdlczoKKyAgICAgIENoYW5nZSB0aGUgY29ubmVjdGlvbiBuYW1lIHRvICJtYWluIiAoZnJvbSAiZHJpdmVyIikuCisgICAgICBTaW5nbGUgY2hhcmFjdGVyIGVudHJ5L2RlbGV0aW9uIG5vdyBhbHdheXMgc3BlYWtzLgorICAgICAgVHJ5IHRvIHJlb3BlbiB0aGUgY29ubmVjdGlvbiBpZiBhbiBlcnJvciBvY2N1cnMuCisgICAgICBTdXBwb3J0IHNldHRpbmcgcGl0Y2ggYW5kIHB1bmN0dWF0aW9uIGxldmVsLgorICAgVGhldGEgc3BlZWNoIGRyaXZlciBjaGFuZ2VzOgorICAgICAgSXQgd291bGRuJ3QgY29tcGlsZSB3aXRoIG5ld2VyIGdjY3MuCisgICBMaW51eCBzY3JlZW4gZHJpdmVyIGNoYW5nZXM6CisgICAgICBOb3cgd29ya3Mgb24gYmlnIGVuZGlhbiBhcmNoaXRlY3R1cmVzLgorICAgICAgQWRkIHN1cHBvcnQgZm9yIG11bHRpLWJ5dGUgY2hhcmFjdGVyIHNldHMuCisgICAgICBBZGQgdGhlIENoYXJzZXQ9IHBhcmFtZXRlci4KKyAgICAgIEFkZCBzdXBwb3J0IGZvciB0aGUgcmlnaHQgQWx0IGtleSAoQWx0R3IpLgorICAgUGNCaW9zIHNjcmVlbiBkcml2ZXIgY2hhbmdlczoKKyAgICAgIEFkZCBBVC9YVCBzY2FuY29kZSBzdXBwb3J0LgorICAgV2luZG93cyBzY3JlZW4gZHJpdmVyIGNoYW5nZXM6CisgICAgICBBZGQgdGhlIEZvbGxvd0ZvY3VzPSBwYXJhbWV0ZXIuCisgICAgICBBZGQgQVQvWFQgc2NhbmNvZGUgc3VwcG9ydC4KKyAgIFRleHQgdGFibGUgY2hhbmdlczoKKyAgICAgIFJlbmFtZSBuby1oIHRvIG5vLWdlbmVyaWMuCisgICAgICBSZW1vdmUgbm8tcC4KKyAgICAgIEFkZCBuby1vdWIgW09mZmVudGxpZyBVdHZhbGcgZm9yIEJsaW5kZXNrcmlmdF0uCisgICBDb250cmFjdGlvbiB0YWJsZSBjaGFuZ2VzOgorICAgICAgVW5pY29kZSBjaGFyYWN0ZXJzIGNhbiBiZSBzcGVjaWZpZWQgYnkgdmFsdWUgW1x1eHh4eF0uCisgICAgICBVbmljb2RlIGNoYXJhY3RlcnMgY2FuIGJlIHNwZWNpZmllZCBieSBuYW1lIFtcPG5hbWU+XS4KKyAgICAgIFdoZW4gdGhlIGN1cnNvciBpczoKKyAgICAgICogIE9uIGEgd29yZCAtIGl0IGlzIHVuY29udHJhY3RlZCAobm90IHJlbmRlcmVkIGluIGNvbXB1dGVyIGJyYWlsbGUpLgorICAgICAgKiAgQmV0d2VlbiB3b3JkcyAtIHRoZSBzcGFjZSBpcyBleHBhbmRlZC4KKyAgICAgIFJlbmFtZSB0aGUgb3Bjb2RlICJyZXBlYXRlZCIgdG8gInJlcGVhdGFibGUiLgorICAgICAgRml4ZXMgdG8gdGhlIEVuZ2xpc2ggR3JhZGUgMiBbZW4tdXMtZzJdIHRhYmxlLgorICAgICAgRml4IHRoZSBVRUIgW1VuaWZpZWQgRW5nbGlzaCBCcmFpbGxlXSBwZXJjZW50IHNpZ24uCisgICAgICBGaXhlcyB0byB0aGUgQ2hpbmVzZSBbemgtLi4uXSB0YWJsZXMuCisgICAgICBSZW5hbWUgemgtdHctYmlnNSB0byB6aC10dy4KKyAgICAgIFJlbW92ZSB6aC10dy1nYjIzMTIuCisgICAgICBSZW1vdmUgemgtdHctdXRmOC4KKyAgIEJybEFQSSBjaGFuZ2VzOgorICAgICAgTm93IGF0IHJlbGVhc2UgMC41LjIuCisgICAgICBQcmVzZW50IGEgYmxpbmtpbmcgY3Vyc29yIGlmIHRoYXQncyB3aGF0IHRoZSB1c2VyIGhhcyBjb25maWd1cmVkLgorICAgICAgSW5zdGFsbC91bmluc3RhbGwgIi92YXIvbGliL0JybEFQSS8iLgorICAgQ2FtbCBiaW5kaW5ncyBjaGFuZ2VzOgorICAgICAgSW5zdGFsbCBhbmQgdW5pbnN0YWxsIG5vdyB3b3JrIHByb3Blcmx5LgorICAgSmF2YSBiaW5kaW5ncyBjaGFuZ2VzOgorICAgICAgUGFja2FnZSB0aGUgY2xhc3NlcyBpbnRvIG9yZy5hMTF5LkJybEFQSS4KKyAgICAgIFJlbmFtZSB0aGUgY2xhc3NlcyB0byByZW1vdmUgdGhlIChub3cgcmVkdW5kYW50KSBCcmxhcGkgcHJlZml4LgorICAgUHl0aG9uIGJpbmRpbmdzIGNoYW5nZXM6CisgICAgICBJbXByb3ZlZCBlcnJvciBoYW5kbGluZyBmYWNpbGl0aWVzLgorICAgdGJsdGVzdCBjaGFuZ2VzOgorICAgICAgQWRkZWQgdGhlIC1lIFstLWVkaXRdIG9wdGlvbiBmb3IgZWRpdGluZyBhIHRleHQgdGFibGUuCisKK09jdG9iZXIgMTcsIDIwMDc6CisgLSBCUkxUVFkgMy45IHJlbGVhc2VkOgorICAgQ29yZSBjaGFuZ2VzOgorICAgICAgVGhlIHN0YXJ0dXAgbG9nIGFuZCBpbml0aWFsIGJyYWlsbGUgZGlzcGxheSBtZXNzYWdlIGNvbnRhaW4gdGhlIGJ1aWxkIHJldmlzaW9uLgorICAgICAgVGhlIC12IFstLXZlcmlmeV0gb3B0aW9uIGlkZW50aWZpZXMgdGhlIHNjcmVlbiBkcml2ZXIuCisgICAgICBGYWlsdXJlIG9mIHRoZSBicmFpbGxlIGFuZC9vciBzY3JlZW4gZHJpdmVyIHRvIHN0YXJ0IGlzbid0IGZhdGFsLgorICAgICAgUmVwZWF0ZWQgcmV0cmllcyBhcmUgc2NoZWR1bGVkIGZvciBlYWNoIGRyaXZlciB1bnRpbCBpdCBzdGFydHMuCisgICAgICBBdHRlbXB0cyB0byBjb25uZWN0IHRvIGdwbSBhcmUgb25seSBtYWRlIHdoZW4gaXQncyBhY3R1YWxseSBuZWVkZWQuCisgICAgICBTdGFuZGFsb25lIHByb2dyYW1zIG5vIGxvbmdlciBpbmNsdWRlIHN1cHBvcnQgZm9yIHNoYXJlZCBvYmplY3RzLgorICAgICAgVGhlIE1TRE9TIG9wZXJhdGluZyBzeXN0ZW0gaXMgc3VwcG9ydGVkLgorICAgICAgTVNET1Mgb3B0aW9uIHN5bnRheCAoL2ZsYWcgYW5kIC9uYW1lOnZhbHVlKSBpcyBzdXBwb3J0ZWQuCisgICAgICBUaGUgc3ludGF4ICt4IHRvIGNsZWFyIGEgc2hvcnQgb3B0aW9uIGZsYWcgaXMgc3VwcG9ydGVkLgorICAgICAgSGVscCBvdXRwdXQgZ3JvdXBzIG9wdGlvbnMgYnkgZnVuY3Rpb24gcmF0aGVyIHRoYW4gbGlzdHMgdGhlbSBhbHBoYWJldGljYWxseS4KKyAgICAgIE5lZWRlZCBidXQgbWlzc2luZyByZXNvdXJjZXMgYXJlIGNyZWF0ZWQgKGJ5IGRlZmF1bHQpIGluIC9saWIvYnJsdHR5L3J3LzoKKyAgICAgICAgIGNvbW1hbmQgbGluZSBvcHRpb246IC1XIFstLXdyaXRhYmxlLWRpcmVjdG9yeT1dCisgICAgICAgICBjb25maWd1cmF0aW9uIGZpbGUgZGlyZWN0aXZlOiB3cml0YWJsZS1kaXJlY3RvcnkKKyAgICAgICAgIGVudmlyb25tZW50IHZhcmlhYmxlOiBCUkxUVFlfV1JJVEFCTEVfRElSRUNUT1JZCisgICAgICAgICBjb25maWd1cmUgc2NyaXB0IG9wdGlvbjogLS13aXRoLXdyaXRhYmxlLWRpcmVjdG9yeT0KKyAgIEJybEFQSSBjaGFuZ2VzOgorICAgICAgVmVyc2lvbiB1cGRhdGVkIHRvIDAuNS4xLgorICAgICAgVENQIHNvY2tldHMgYXJlIG1vcmUgcmVzcG9uc2l2ZS4KKyAgICAgIFRoZSAtaCBbLS1ob3N0XSBvcHRpb24gb2YgeGJybGFwaSBoYXMgYmVlbiBjaGFuZ2VkIHRvIC1iIFstLWJybGFwaV0uCisgICBCYXVtIGJyYWlsbGUgZHJpdmVyIGNoYW5nZXM6CisgICAgICBUaGUgYXV0b3N1c3BlbmQgZmVhdHVyZSBvZiBMaW51eCBVU0IgZGV2aWNlcyBpcyBkaXNhYmxlZC4KKyAgICAgIERvbid0IHByb2JlIGZvciBlbXVsYXRpb24gbW9kZXMgaWYgYSBzZXJpYWwgZGV2aWNlIGlzIGJlaW5nIHVzZWQuCisgICAgICBBZGQgdGhlIHByb3RvY29sPSAoYWxsLCBuYXRpdmUpIHBhcmFtZXRlci4KKyAgIEhhbmR5VGVjaCBicmFpbGxlIGRyaXZlciBjaGFuZ2VzOgorICAgICAgVGhlIEVhc3kgQnJhaWxsZSBpcyBzdXBwb3J0ZWQuCisgICBQYXBlbm1laWVyIGJyYWlsbGUgZHJpdmVyIGNoYW5nZXM6CisgICAgICBUaGUgVHJpbyBtb2RlbHMgYXJlIHN1cHBvcnRlZC4KKyAgICAgIFRoZSBzZWNvbmQgc2V0IG9mIHZlcnRpY2FsIHN0YXR1cyBrZXlzIGRvZXMgdmVydGljYWwgcm91dGluZy4KKyAgIExpbnV4IGNoYW5nZXM6CisgICAgICBVU0IgZGV2aWNlcyBtYWludGFpbmVkIGJ5IHVkZXYgdW5kZXIgL2Rldi9idXMvdXNiLyBhcmUgc3VwcG9ydGVkLgorICAgQ3lnd2luIGNoYW5nZXM6CisgICAgICBUaGUgZW11bGF0aW9uIGxheWVyIChyYXRoZXIgdGhhbiBXaW5kb3dzIGZ1bmN0aW9ucykgaXMgdXNlZC4KKyAgICAgIFNlcmlhbCBkZXZpY2VzIG5hbWVkIHR0eVNuIChyYXRoZXIgdGhhbiBDT01uKSBhcmUgdXNlZC4KKyAgIFdpbmRvd3MgY2hhbmdlczoKKyAgICAgIFdyaXRlIHRvIHRoZSBldmVudCBsb2cuCisgICAgICBUaGUgLUkgWy0taW5zdGFsbC1zZXJ2aWNlXSBhbmQgLVIgWy0tcmVtb3ZlLXNlcnZpY2VdIG9wdGlvbnMgaGF2ZSBiZWVuIGFkZGVkLgorICAgICAgVGhlIC1yIFstLXJlbGVhc2UtZGV2aWNlXSBvcHRpb24gZGVmYXVsdHMgdG8gIm9uIi4KKyAgIFRhYmxlIGNoYW5nZXM6CisgICAgICBDb3JyZWN0aW9ucyB0byBGaW5uaXNoIGJyYWlsbGUgW3RleHQuZmkxLnRibCwgdGV4dC5maTIudGJsXS4KKyAgICAgIENvcnJlY3Rpb25zIHRvIFBvcnR1Z3Vlc2UgYnJhaWxsZSBbdGV4dC5wdC50YmxdLgorICAgICAgQ29ycmVjdGlvbnMgdG8gQW1lcmljYW4gRW5nbGlzaCBncmFkZSAyIGJyYWlsbGUgW2VuLXVzLWcyLmN0Yl0uCisgICAgICBVbmlmaWVkIEVuZ2xpc2ggQnJhaWxsZSB0YWJsZSByZW5hbWU6IHVlYmMtZzIgLT4gZW4tdWViYy1nMgorICAgICAgQ2hpbmVzZSB0YWJsZSByZW5hbWVzOiBiaWc1IC0+IHpoLXR3LWJpZzUsIGdiMjMxMiAtPiB6aC10dy1nYjIzMTIKKyAgICAgIE5ldyBDaGluZXNlIHRhYmxlczogemgtdHctdXRmOCwgemgtdHctdWNiCisKK0p1bmUgNCwgMjAwNzoKKyAtIEJSTFRUWSAzLjggcmVsZWFzZWQ6CisgICBHZW5lcmFsIHVwZGF0ZXM6CisgICAgICBBZGQgdGhlIC1yIFstLXJlbGVhc2UtZGV2aWNlXSBjb21tYW5kIGxpbmUgb3B0aW9uLgorICAgICAgQWRkIHRoZSByZWxlYXNlLWRldmljZSBjb25maWd1cmF0aW9uIGRpcmVjdGl2ZS4KKyAgICAgIExvb2sgaW4gJEhPTUUvLmJybHR0eS8gZm9yIGJybHR0eS5jb25mLCB0cmFuc2xhdGlvbiB0YWJsZXMsIGNvbnRyYWN0aW9uIHRhYmxlcywgYW5kIHByZWZlcmVuY2VzIGZpbGVzLgorICAgICAgQWRkIHNjcmVlbiBzY3JvbGwgZGV0ZWN0aW9uIHRvIHRoZSBjdXJzb3Igcm91dGluZyBhbGdvcml0aG0uCisgICAgICBGaXggbGVmdC1wYW5uaW5nIHdoZW4gcHJlc2VudGluZyBjb250cmFjdGVkIGJyYWlsbGUuCisgICAgICBDaGFuZ2UgdGhlIGRlZmF1bHQgYnJhaWxsZSBhbmQgc3BlZWNoIGRyaXZlcnMgdG8gImF1dG8iLgorICAgICAgQ2hhbmdlIHRoZSBkZWZhdWx0IGJyYWlsbGUgZGV2aWNlIHRvICJ1c2I6Ii4KKyAgICAgIEltcHJvdmVkIEFUIGtleWJvYXJkIHNjYW5jb2RlIHN1cHBvcnQuCisgICAgICBBZGRlZCBYVCBrZXlib2FyZCBzY2FuY29kZSBzdXBwb3J0LgorICAgICAgVmVyaWZ5IHRoYXQgYSBkcml2ZXIncyB2ZXJzaW9uIG1hdGNoZXMgdGhhdCBvZiB0aGUgY29yZSB3aGVuIGxvYWRpbmcgaXQuCisgICAgICBJZiBhbnkgZHJpdmVycyBhcmUgYnVpbHQtaW4gdGhlbiBvbmx5IGF1dG9kZXRlY3QgZm9yIHRoZW0uCisgICAgICBMb2cgdW5leHBlY3RlZCBkYXRhIGZyb20gYnJhaWxsZSBkaXNwbGF5cyBhcyB3YXJuaW5ncy4KKyAgICAgIE5ldyBicmFpbGxlIGRyaXZlcnM6IElyaXhMaW51eAorICAgICAgTmV3IHNwZWVjaCBkcml2ZXJzOiBTcGVlY2hEaXNwYXRjaGVyCisgICAgICBOZXcgc2NyZWVuIGRyaXZlcnM6IFBDQklPUworICAgICAgTmV3IHN1cHBvcnRlZCBvcGVyYXRpbmcgc3lzdGVtczoga0ZyZWVCU0QsIE1TRE9TIChhbG1vc3QpCisgICBTdGFydHVwIHVwZGF0ZXM6CisgICAgICBPbmx5IGNvdW50IGNvbW1hbmQgbGluZSBvcHRpb24gYW5kIGNvbmZpZ3VyYXRpb24gZmlsZSBlcnJvcnMgYXMgcHJvYmxlbXMuCisgICAgICBQZXJpb2RpY2FsbHkgcmV0cnkgc3RhcnRpbmcgdGhlIHNwZWVjaCBkcml2ZXIuCisgICAgICBQZXJpb2RpY2FsbHkgcmV0cnkgY3JlYXRpbmcgdGhlIFBJRCBmaWxlLgorICAgQnJsQVBJIHVwZGF0ZXM6CisgICAgICBWZXJzaW9uIGNoYW5nZWQgdG8gMC41LjAuCisgICAgICBCYXNlIFRDUC9JUCBwb3J0IGNoYW5nZWQgZnJvbSAzNTc1MSB0byB0aGUgbmV3bHkgSUFOQS1hc3NpZ25lZCA0MTAxIFticmxwLTBdICg0IHBvcnRzKS4KKyAgICAgIE1vdmUgaGVhZGVycyBmcm9tICIvdXNyL2luY2x1ZGUvYnJsdHR5LyouaCIgdG8gIi91c3IvaW5jbHVkZS9icmxhcGlfKi5oIi4KKyAgICAgIExvdHMgb2YgZnVuY3Rpb24gYW5kIGNvbnN0YW50IHJlbmFtZXMgKHNlZSBtYW4gYnJsYXBpX2RlcHJlY2F0ZWQpLgorICAgICAgUmVtb3ZlIGJybGFwaV9nZXREcml2ZXJJZCgpLgorICAgICAgQWRkIGJybGFwaV9zdXNwZW5kRHJpdmVyKCkgYW5kIGJybGFwaV9yZXN1bWVEcml2ZXIoKS4KKyAgICAgIFJlZGVzaWduIHRoZSBwYXJhZGlnbSBmb3IgaWdub3JpbmcgYW5kIGFjY2VwdGluZyBrZXkgY29kZXMuCisgICAgICBBZGQgc3VwcG9ydCBmb3IgbXVsdGlwbGUgc2ltdWx0YW5lb3VzIHNlc3Npb25zLgorICAgICAgQWRkIHN1cHBvcnQgZm9yIHRoZSBhcHBsaWNhdGlvbi1kZWZpbmFibGUgQlJMQVBJX05PX0RFUFJFQ0FURUQgYW5kIEJSTEFQSV9OT19TSU5HTEVfU0VTU0lPTiBtYWNyb3MuCisgICAgICBJbXByb3ZlZCBVbmljb2RlIHN1cHBvcnQuCisgICAgICBSZW5hbWUgdGhlIFdJTkRPV1NQQVRIIGVudmlyb25tZW50IHZhcmlhYmxlIHRvIFdJTkRPV1BBVEguCisgICAgICBSZW5hbWUgdGhlIEJSTEFQSV9LRVlGSUxFIGVudmlyb25tZW50IHZhcmlhYmxlIHRvIEJSTEFQSV9BVVRILgorICAgICAgUmVuYW1lIHRoZSBLZXlGaWxlPSBwYXJhbWV0ZXIgdG8gQXV0aD0uCisgICAgICBBZGQgc3VwcG9ydCBmb3IgYXV0aGVudGljYXRpb24gYnkgdXNlciBhbmQvb3IgZ3JvdXAuCisgICAgICBJbXBsZW1lbnQgYmluZGluZ3MgZm9yIENhbWwsIEphdmEsIExpc3AsIFB5dGhvbiwgYW5kIFRjbC4KKyAgIFByZWZlcmVuY2VzIG1lbnUgdXBkYXRlczoKKyAgICAgIENoYW5nZSB0aGUgZGVmYXVsdCBmb3IgIkF1dG9yZXBlYXQiIGZyb20gIk5vIiB0byAiWWVzIi4KKyAgICAgIEFkZCAiQXV0b3JlcGVhdCBQYW5uaW5nIiBbTm8sIFllc10uCisgICAgICBBZGQgIkJyYWlsbGUgU2Vuc2l0aXZpdHkiIFtNaW5pbXVtLCBMb3csIE1lZGl1bSwgSGlnaCwgTWF4aW11bV0uCisgICAgICBSZW5hbWUgIlBvaW50ZXIgRm9sbG93cyBXaW5kb3ciIHRvICJIaWdobGlnaHQgV2luZG93Ii4KKyAgICAgIFRoZSAiSGlnaGxpZ2h0IFdpbmRvdyIgcHJlZmVyZW5jZSB3b3JrcyBldmVuIGlmIGdwbSBpc24ndCBhdmFpbGFibGUuCisgICAgICBPbmx5IGhpZ2hsaWdodCB0aGUgdXBwZXItbGVmdCBjaGFyYWN0ZXIgb2YgdGhlIHdpbmRvdyBpZiBhdHRyaWJ1dGUgdW5kZXJsaW5pbmcgaXMgb24uCisgICBBbHZhIGJyYWlsbGUgZHJpdmVyIHVwZGF0ZXM6CisgICAgICBBZGQgc3VwcG9ydCBmb3IgdGhlIEJyYWlsbGUgU3lzdGVtIDQwLgorICAgQmF1bSBicmFpbGxlIGRyaXZlciB1cGRhdGVzOgorICAgICAgU29tZSBrZXkgYmluZGluZyBjaGFuZ2VzLgorICAgICAgQWRkIGtleWJvYXJkIGlucHV0LgorICAgICAgQWRkIHRoZSBWYXJpb0tleXMgcGFyYW1ldGVyIGZvciB0aG9zZSB3aG8gcHJlZmVyIHRoZSBvbGQgVmFyaW8gZHJpdmVyIGJpbmRpbmdzLgorICAgTWluaUJyYWlsbGUgYnJhaWxsZSBkcml2ZXIgdXBkYXRlczoKKyAgICAgIEFkZCBmbG93IGNvbnRyb2wgc28gdGhhdCBpdCB3b3JrcyBvbiBmYXN0IENQVXMuCisgICAgICBTb21lIGtleSBiaW5kaW5nIGNoYW5nZXMuCisgICBIYW5keVRlY2ggYnJhaWxsZSBkcml2ZXIgdXBkYXRlczoKKyAgICAgIFN1cHBvcnQgdGhlIE1vZHVsYXIgRXZvbHV0aW9uIG1vZGVscyAoNjQgYW5kIDg4KS4KKyAgICAgIEFkZCBvbmUtaGFuZCBjb252ZW5pZW5jZSBiaW5kaW5ncyBmb3IgQnJhaWxsZVN0YXIgbmF2aWdhdGlvbiBmdW5jdGlvbnMuCisgICBQYXBlbm1laWVyIGJyYWlsbGUgZHJpdmVyIHVwZGF0ZXM6CisgICAgICBBZGQgc3VwcG9ydCBmb3IgdGhlIGxhdGVzdCBCcmFpbGxlWCBJSSBtb2RlbHMgKGV4Y2VwdCBmb3IgdGhlIFRyaW8gbGluZSkuCisgICAgICBBZGQgc3VwcG9ydCBmb3Igc2V0dGluZyBicmFpbGxlIGZpcm1uZXNzLgorICAgVmlzaW9CcmFpbGxlIGJyYWlsbGUgZHJpdmVyIHVwZGF0ZXM6CisgICAgICBTdXBwb3J0IHRoZSBub24tc3RhbmRhcmQgc2VyaWFsIGZsb3cgY29udHJvbCB1c2VkIGJ5IG9sZGVyIG1vZGVscy4KKyAgICAgIERpc3RyaWJ1dGUgdGhlIHZzdHAgKFZpc2lvQnJhaWxsZSBmaWxlIHRyYW5zZmVyKSBhcHBsaWNhdGlvbi4KKyAgIExpbnV4IHNjcmVlbiBkcml2ZXIgdXBkYXRlczoKKyAgICAgIEFkZCBzdXBwb3J0IGZvciBmcmFtZSBidWZmZXIgY29uc29sZXMuCisgICAgICBGaXggdGhlIGVtdWxhdGlvbiBvZiBrZXlzIEYxLUY1LgorICAgU2NyZWVuIHNjcmVlbiBkcml2ZXIgYW5kIHNjcmVlbiBwYXRjaCB1cGRhdGVzOgorICAgICAgRml4ZWQgY3Vyc29yIHJvdXRpbmcuCisgICAgICBBZGQgc3VwcG9ydCBmb3Iga2V5Ym9hcmQgZW11bGF0aW9uLgorICAgICAgRml4IHN1cHBvcnQgZm9yIHRoZSBzdGF0dXMgbGluZS4KKyAgICAgIEFkZCBzdXBwb3J0IGZvciB0aGUgaW5wdXQgbGluZS4KKyAgICAgIFNob3cgdGhlIGN1cnJlbnQgd2luZG93IG51bWJlciAocmF0aGVyIHRoYW4gMCkuCisgICAgICBTaG93IGNvcnJlY3QgY2hhcmFjdGVyIGhpZ2hsaWdodGluZy4KKyAgIFdpbmRvd3Mgc3VwcG9ydCB1cGRhdGVzOgorICAgICAgUmVjb2duaXplIHRoZSBDUi1MRiBzZXF1ZW5jZSBhcyBhIHRleHQgZmlsZSBpbnB1dCBsaW5lIHRlcm1pbmF0b3IuCisgICAgICBEb24ndCBtaXNpbnRlcnByZXQvY29ycnVwdCBwcmVmZXJlbmNlcyBmaWxlcyBieSB0cmVhdGluZyB0aGVtIGFzIHRleHQgZmlsZXMuCisgICAgICBQcmVzZW50IHRoZSBBbHRUYWJJbmZvIHdpbmRvdy4KKyAgICAgIFN1cHBvcnQga2V5Ym9hcmQgZW11bGF0aW9uIHdoZW4gaW4gYSBET1MgYm94IG9yIGEgbm9uLWNvbnNvbGUgYXBwbGljYXRpb24uCisgICAgICBEZXRlcm1pbmUgd2hpY2ggZmFjaWxpdGllcyBhcmUgYXZhaWxhYmxlIGF0IHJ1bi10aW1lIHJhdGhlciB0aGFuIGF0IGJ1aWxkLXRpbWUuCisgICAgICBSZW1vdmUgc3VwcG9ydCBmb3IgV2luZG93cyA5NS4KKyAgIFRleHQgdHJhbnNsYXRpb24gdGFibGUgdXBkYXRlczoKKyAgICAgIFJlbmFtZXM6IHVrLT5lbl9VSywgdXMtPmVuX1VTCisgICAgICBBZGQgYSB0YWJsZSBmb3IgU3dlZGlzaCAxOTk2LgorICAgICAgQWRkIGEgdGFibGUgZm9yIFVuaWZpZWQgRnJlbmNoIDIwMDcuCisgICAgICBBZGQgYSB0YWJsZSBmb3IgUG9ydHVndWVzZS4KKyAgICAgIEZpeCB0aGUgQ3plY2ggdGFibGUgdG8gc3VwcG9ydCBHZXJtYW4gc3ltYm9scyBpbiBhIHVuaWZvcm0gd2F5LgorICAgICAgU3VwcG9ydCB0YWJsZXMgaW4gdGhlIEdub21lIEJyYWlsbGUgZm9ybWF0LgorICAgICAgU3VwcG9ydCB0YWJsZXMgaW4gdGhlIHNibCAoU3VTRSBCbGludXgpIGZvcm1hdC4KKyAgIENvbnRyYWN0aW9uIHRhYmxlIHVwZGF0ZXM6CisgICAgICBTZXZlcmFsIGZpeGVzIHRvIGVuLXVzLWcyIChHcmFkZSAyIEFtZXJpY2FuIEVuZ2xpc2gpLgorICAgICAgVXBkYXRlcyB0byBiaWc1LgorICAgICAgQWRkIGEgdGFibGUgZm9yIEdCMjMxMiAoU2ltcGxpZmllZCBDaGluZXNlIEJyYWlsbGUpCisgICBCdWlsZCB1cGRhdGVzOgorICAgICAgVGhlIGF1dG9nZW4uc2ggc2NyaXB0IGhhcyBiZWVuIHJlbmFtZWQgdG8gYXV0b2dlbi4KKyAgICAgIEFkZCBzdXBwb3J0IGZvciBhIHJlbG9jYXRhYmxlIGluc3RhbGwgKHVzZWZ1bCBvbiBXaW5kb3dzKS4KKyAgICAgIENoYW5nZSB0aGUgZGVmYXVsdCBmb3IgZ3BtIHN1cHBvcnQgdG8gZW5hYmxlZC4KKyAgICAgIERlZmluZSBnZW5lcmFsIG1hY3JvcyBmb3IgYnJhaWxsZSBhcHBsaWNhdGlvbnMgaW4gIi91c3IvaW5jbHVkZS9pc29fMTE1NDgtMS5oIi4KKyAgICAgIEFkZCB0aGUgLS13aXRoLXN0ZGVyci1wYXRoIGNvbmZpZ3VyZSBzY3JpcHQgb3B0aW9uLgorICAgICAgQnJhaWxsaWZpZWQgaW5zdGFsbGVyIGltYWdlcyBsb2cgZXJyb3JzIHRvIHR0eTUuCisKK0RlY2VtYmVyIDI2LCAyMDA1OgorIC0gQlJMVFRZIDMuNy4yIHJlbGVhc2VkOgorICAgVGhlIEF0U3BpIHNjcmVlbiBkcml2ZXIgZG9lc24ndCBsb2FkIGR1ZSB0byBhIG1pc3NpbmcgWHQgZGVwZW5kZW5jeS4KKyAgIENoZWNrIGZvciBYMTEvZXh0ZW5zaW9ucy9YS0IuaC4KKyAgIFN3ZWRpc2ggdGV4dCB0cmFuc2xhdGlvbiB0YWJsZSBjaGFuZ2VzOgorICAgICAgQWRkIHRleHQuc2UudGJsICgxOTk2IHN0YW5kYXJkKS4KKyAgICAgIFJlbmFtZSB0ZXh0LnNlMi50YmwgdG8gdGV4dC5zZS1vbGQudGJsICgxOTg5IHN0YW5kYXJkKS4KKyAgICAgIFJlbW92ZSB0ZXh0LnNlMS50YmwgKG1vZGlmaWVkIGVuZ2xpc2ggdGFibGUpLgorICAgRW5nbGlzaCBncmFkZSAyIGNvbnRyYWN0aW9uIHRhYmxlIGNoYW5nZXM6CisgICAgICBUaGUgIm0tc3QiIGNvbnRyYWN0aW9uIHNob3VsZCBhbHdheXMgYmUgdXNlZCB3aGVuICJtdXN0IiBpcyB0aGUgcm9vdCB3b3JkLgorCitEZWNlbWJlciAxMiwgMjAwNToKKyAtIEJSTFRUWSAzLjcuMSByZWxlYXNlZDoKKyAgIChpc3x2YWxpZGF0ZSkoSW50ZWdlcnxGbG9hdCkgc2hvdWxkIG9ubHkgbW9kaWZ5ICp2YWx1ZSB3aGVuIHJldHVybmluZyB0cnVlLgorICAgdXNiV3JpdGVFbmRwb2ludCgpIGluIHVzYl9saWJ1c2IuYyBjYWxsZWQgdXNiR2V0SW5wdXRFbmRwb2ludCgpLgorICAgS0RHRVRNT0RFLCBLREdLQk1FVEEgYW5kIEtER0tCTU9ERSBuZWVkIGFuIGludCAobm90IGEgbG9uZykgb3BlcmFuZC4KKyAgIEFkZCB0aGUgQlJMX0JMS18oUFJ8TlgpRElGQ0hBUiBmdW5jdGlvbnMuCisgICBBbGxvdyB0aGUgZW5kIG9mIHRoZSBjdXQgcmVnaW9uIHRvIGJlIGNvcnJlY3RlZC4KKyAgIEZpeCBhIGNhbGwgdG8gYnJsYXBpX3BlcnJvcigpIHdpdGhpbiB4YnJsYXBpLgorICAgV2FpdGluZyBmb3Igb3V0cHV0IHRvIHVuYmxvY2sgd2Fzbid0IGJlaW5nIGRvbmUgY29ycmVjdGx5LgorICAgRW5nbGlzaCBncmFkZSAyIGNvbnRyYWN0aW9uIHRhYmxlIGNoYW5nZXM6CisgICAgICBEb24ndCB1c2UgYSBsZXR0ZXIgc2lnbiB3aGVuIGEgbGV0dGVyIGlzIGZvbGxvd2VkIGJ5IGEgcGVyaW9kLgorICAgICAgSGFuZGxlICJieS1hbmQtYnkiIGFzIGEgc3BlY2lhbCBjYXNlLgorICAgICAgRG9uJ3QgdXNlIGEgY29udHJhY3Rpb24gaWYgYSBjYXBpdGFsaXphdGlvbiBzdGF0ZSBjaGFuZ2Ugd2l0aGluIGl0IG5lZWRzIGNsYXJpZmljYXRpb24uCisgICAgICBVc2UgImVkIiBmb3IgInJlZG9sZW50Ii4KKyAgIEJhdW0gYnJhaWxsZSBkcml2ZXIgY2hhbmdlczoKKyAgICAgIEEgVmFyaW8gNDAgY2FuIHJldHVybiBkZXZpY2UgaWRlbnRpdHkgYnV0IG5vdCBjZWxsIGNvdW50LgorICAgICAgQWRkIGEgZmV3IG1vcmUgIndvcmRzIG9mIHdpc2RvbSIgdG8gUkVBRE1FLklua2EuCisgICAgICBCaW5kaW5nIGNoYW5nZXM6CisgICAgICAgICBGdW5jdGlvbiAgT2xkICAgICAgICAgTmV3CisgICAgICAgICBTRVRNQVJLICAgVEwxK1RMMitDUm4gVEwxK1RMMytDUm4KKyAgICAgICAgIEdPVE9NQVJLICBUTDIrVEwzK0NSbiBUUjErVFIzK0NSbgorICAgICAgICAgUFJJTkRFTlQgIFRSMitUUjErQ1JuIFRMMitUTDErQ1JuCisgICAgICAgICBOWElOREVOVCAgVFIyK1RSMytDUm4gVEwyK1RMMytDUm4KKyAgICAgICAgIFBSRElGQ0hBUiAtICAgICAgICAgICBUUjIrVFIxK0NSbgorICAgICAgICAgTlhESUZDSEFSIC0gICAgICAgICAgIFRSMitUUjMrQ1JuCisgICBBUEkgY2hhbmdlczoKKyAgICAgIENvcnJlY3QgdGhlIGRvY3VtZW50YXRpb24gZm9yIHRoZSBCUkxQQUNLRVRfV1JJVEUgcGFja2V0LgorICAgICAgUmVtb3ZlIHRoZSBwcm90b3R5cGUgb2YgYnJsYXBpX2dldERyaXZlckluZm8oKSBmcm9tIGFwaS5oLgorICAgICAgQW4gQVBJIGNsaWVudCBzaG91bGQgZm9yZ2V0IHRoZSBhdXRob3JpemF0aW9uIGtleSBhcyBzb29uIGFzIGl0J3MgYmVlbiBzZW50IHRvIHRoZSBzZXJ2ZXIuCisgICAgICBFbnN1cmUgdGhhdCB0aGUgVW5peC1kb21haW4gc29ja2V0IGlzIHJlbW92ZWQgYmVmb3JlIGJpbmRpbmcgdG8gaXQuCisgICAgICBGaXggdGhlIGJlaGF2aW91ciBvZiB0aGUgImFuZCIgZG90IG1hc2suCisgICBCdWlsZCBjaGFuZ2VzOgorICAgICAgQ2hlY2sgZm9yIC1sWHRzdCBhbmQgLWxYZXh0LgorICAgICAgTW92ZSB0aGUgWCBkZXBlbmRlbmNpZXMgZnJvbSB0aGUgZXhlY3V0YWJsZXMgdG8gdGhlIGNvbXBvbmVudHMgd2hpY2ggbmVlZCB0aGVtLgorICAgICAgTW92ZSB0aGUgY3Vyc2VzIGRlcGVuZGVuY3kgZnJvbSB0aGUgZXhlY3V0YWJsZXMgdG8gdGhlIFRUWSBicmFpbGxlIGRyaXZlci4KKyAgICAgIFNvbWUgc2hlbGxzIGRvbid0IGxpa2UgdGhlIHNlbWljb2xvbiBpbiAiZm9yIGk7IGRvIi4KKworU2VwdGVtYmVyIDE3LCAyMDA1OgorIC0gQlJMVFRZIDMuNyByZWxlYXNlZDoKKyAgIENoYW5nZSB0aGUgZG90LXRvLWJpdCBtYXBwaW5nIHRvIGNvbXBseSB3aXRoIElTTy9UUiAxMTU0OC0xLgorICAgTmV3IGN1cnNvciByb3V0aW5nIGFsZ29yaXRobSAod29ya3Mgd2l0aCBlZGl0b3JzIHdpdGggd3JhcHBlZCBsaW5lcykuCisgICBSZXBsYWNlIHRoZSAtTiBbLS1uby1zcGVlY2hdIG9wdGlvbiB3aXRoIC1OIFstLW5vLWFwaV0uCisgICBHZXQgdGhlIGZ1bGx5IHF1YWxpZmllZCBwYXRoIHRvIHRoZSBleGVjdXRhYmxlLgorICAgZ2V0V29ya2luZ0RpcmVjdG9yeSgpIHNob3VsZCB1c2UgcmVhbGxvY1dyYXBwZXIoKS4KKyAgIGhhc1RpbWVkT3V0KDApIHNob3VsZCByZXR1cm4gdHJ1ZSBpbiBvcmRlciB0byBoYW5kbGUgYSB0aW1lb3V0IG9mIDAuCisgICBDcmVhdGUgdGhlIHJlc2NhbGVJbnRlZ2VyKCkgZnVuY3Rpb24gZnJvbSBpbi1saW5lIHByZWZlcmVuY2VzIG1lbnUgY29kZS4KKyAgIERlZmluZSBhbmQgaW1wbGVtZW50IEJSTF9CTEtfR09UT0xJTkUuCisgICBOVUxzIGFyZSB3cml0dGVuIHRvIHRoZSBlbmQgb2YgdGhlIHZpc3VhbCBkaXNwbGF5IGlmIGl0J3Mgb2ZmIHRoZSBlbmQgb2YgdGhlIHNjcmVlbi4KKyAgIFRlcm1pbmF0aW9uIHNpZ25hbHMgc2hvdWxkIGp1c3Qgc2V0IGEgZmxhZyBhbmQgbGV0IGJybHR0eSB0ZXJtaW5hdGUgc2FmZWx5LgorICAgQ2hhbmdlIGFsbCAiYmx1ZXoiIHVzZXMgdG8gImJsdWV0b290aCIuCisgICBTcGxpdCB0aGUgYXV0b3JlcGVhdCBjb2RlIG91dCBpbnRvIGEgc2VwYXJhdGUgZnVuY3Rpb24uCisgICBBdXRvc3BlYWsgc29tZXRpbWVzIGRlY2lkZXMgdGhhdCBjaGFyYWN0ZXJzIGhhdmUgYmVlbiBkZWxldGVkIHdoZW4sIGluIGZhY3QsIHRoZXkndmUgYmVlbiByZXBsYWNlZC4KKyAgIEVuYWJsZSBhdXRvcmVwZWF0IGFuZCBhdXRvc3BlYWsgZm9yIHRoZSBwcmVmZXJlbmNlcyBtZW51LgorICAgV3JpdGUgZGVidWcgbG9ncyBmb3IgYnJhaWxsZSBhbmQgc3BlZWNoIHNldHRpbmcgY2hhbmdlcy4KKyAgIFRoZSBjb29yZGluYXRlcyBvbiB0aGUgc3RhdHVzIGxpbmUgc2hvdWxkIHN0YXJ0IGZyb20gMSByYXRoZXIgdGhhbiBmcm9tIDAuCisgICBHZW5lcmF0ZSBsb3dlciBzdGF0dXMgZGlnaXRzIHN5bWJvbGljYWxseSByYXRoZXIgdGhhbiBtYXRoZW1hdGljYWxseS4KKyAgIE9wZXJhdGUgc2VyaWFsIGRldmljZXMgaW4gdHJ1ZSBub25ibG9ja2luZyBtb2RlLgorICAgR2l2ZSBiZXR0ZXIgbmFtZXMgdG8gc2VyaWFsVGVzdExpbmVzKCkncyBhcmd1bWVudHMuCisgICBUZXh0IHRhYmxlIHJlbmFtZXM6IGZyIC0+IGZyX0NBLCBmci1pc28wMSAtPiBmcl9GUgorICAgRm9yY2UgT1NTIFBDTSBvdXRwdXQgdG8gYmUgYmxvY2tpbmcuCisgICAgICBUaGVyZSBhcHBlYXJzIHRvIGJlIGEgYnVnIGluIEFMU0EgT1NTIHNpbXVsYXRpb24uCisgICAgICBPdXRwdXQgaXMgbm9uYmxvY2tpbmcgaWYgc25kX3NlcV9vc3MgaXMgbG9hZGVkIHdpdGggbm9uYmxvY2tfb3Blbj0xLgorICAgICAgSW4gdGhpcyBjYXNlLCB3cml0ZSgpIGFsd2F5cyByZXR1cm5zIHRoZSBmdWxsIGNvdW50IGV2ZW4gdGhvdWdoCisgICAgICBsYXJnZSBjaHVua3Mgb2Ygc291bmQgYXJlIG1pc3NpbmcuCisgICBFbnN1cmUgdGhhdCB0aGUgUENNIEFMU0Egc3VwcG9ydCB1c2VzIGEgc2Vuc2libGUgc2FtcGxlIHJhdGUuCisgICBCeSBkZWZhdWx0LCB1c2UgdGhlIFBDTSBBTFNBIGRldmljZSAiZGVmYXVsdCIuCisgICBGaXggQUxTQSBNSURJIGV2ZW50IHRpbWluZyBhbmQgb3V0cHV0IGZsdXNoaW5nLgorICAgQWx2YSBicmFpbGxlIGRyaXZlciBjaGFuZ2VzOgorICAgICAgQWRkIGlucHV0L291dHB1dCBwYWNrZXQgbG9nZ2luZy4KKyAgICAgIFJlbW92ZSB0aGUgYXV0b2RldGVjdCBsb29wLgorICAgICAgUmVtb3ZlIHNvbWUgaGFyZC1jb2RlZCBkZWxheXMgZHVyaW5nIG9wZW4uCisgICAgICBFbnN1cmUgdGhhdCBhbGwgcGFja2V0IGJ1ZmZlcnMgYXJlIGFzIGxhcmdlIGFzIHRoZSBsYXJnZXN0IHBvc3NpYmxlIHBhY2tldC4KKyAgICAgIFdhaXQgZHVyaW5nIG9wZW4gdG8gc2VlIGlmIHRoZSBzdGF0dXMgY2VsbHMgaGF2ZSBiZWVuIHR1cm5lZCBvZmYuCisgICBCcmFpbGxlTGl0ZSBicmFpbGxlIGRyaXZlciBjaGFuZ2VzOgorICAgICAgUmVkZWZpbmUgdGhlIGtleS10by1kb3RzIHRhYmxlIGluIHRlcm1zIG9mIGJyYWlsbGUgZG90IGNvbnN0YW50cy4KKyAgICAgIFJlbW92ZSBvdGhlciBoYXJkLWNvZGVkIGRvdCB2YWx1ZXMuCisgICAgICBSZWRvIHRoZSBsYXlvdXQgb2YgdGhlIGJpbmRpbmdzIHRhYmxlIHRvIG1ha2UgaXQgZWFzaWVyIHRvIGVkaXQuCisgICBCcmFpbGxlTm90ZSBicmFpbGxlIGRyaXZlciBjaGFuZ2VzOgorICAgICAgUmVpbmRlbnQgdGhlIHNvdXJjZSB0byAyIChmb3JtIDMpLgorICAgICAgUmVtb3ZlIHRoZSBwcm9iZSBsb29wIGZyb20gYnJsX29wZW4oKS4KKyAgICAgIEFkZCBwYWNrZXQgSS9PLgorICAgICAgQWRkIG91dHB1dCBmbG93IGNvbnRyb2wuCisgICAgICBEZWZpbmUgYSBzdHJ1Y3R1cmUgZm9yIGlucHV0IHBhY2tldHMuCisgICBFdXJvQnJhaWxsZSBicmFpbGxlIGRyaXZlciBjaGFuZ2VzOgorICAgICAgVXNlIHN5bWJvbGljLCByYXRoZXIgdGhhbiBoYXJkLWNvZGVkLCBkb3QtdG8tYml0IG1hcHBpbmcuCisgICBGcmVlZG9tU2NpZW50aWZpYyBicmFpbGxlIGRyaXZlciBjaGFuZ2VzOgorICAgICAgUmVkdWNlIHRoZSBVU0IgcmV0cnkgY291bnQgZnJvbSA1IHRvIDMuCisgICAgICBSZW1vdmUgdGhlICJubyByZXNwb25zZSBmcm9tIGRpc3BsYXkiIHdhcm5pbmcuCisgICAgICBGaXggYSB0eXBvIGluIHRoZSBkZWZpbml0aW9uIG9mIHRoZSBGb2N1cyA0MCBicmFpbGxlIGRpc3BsYXkuCisgICBIYW5keVRlY2ggYnJhaWxsZSBkcml2ZXIgY2hhbmdlczoKKyAgICAgIFJlZHVjZSB0aGUgVVNCIHJldHJ5IGNvdW50IGZyb20gNSB0byAzLgorICAgICAgUmVtb3ZlIHRoZSAibm8gcmVzcG9uc2UgZnJvbSBkaXNwbGF5IiB3YXJuaW5nLgorICAgTG9nVGV4dCBicmFpbGxlIGRyaXZlciBjaGFuZ2VzOgorICAgICAgUmVkZWZpbmUgdGhlIG91dHB1dCBhbmQgaW5wdXQgdGFibGVzIGluIHRlcm1zIG9mIGJyYWlsbGUgZG90IGNvbnN0YW50cy4KKyAgICAgIERvbid0IHByZXBhcmUgdGhlIG91dHB1dCBhbmQgaW5wdXQgdGFibGVzIG1vcmUgdGhhbiBvbmNlLgorICAgTURWIGJyYWlsbGUgZHJpdmVyIGNoYW5nZXM6CisgICAgICBSZW1vdmUgdGhlIGF1dG9kZXRlY3QgbG9vcC4KKyAgIFBhcGVubWVpZXIgYnJhaWxsZSBkcml2ZXIgY2hhbmdlczoKKyAgICAgIFJlZHVjZSB0aGUgVVNCIHJldHJ5IGNvdW50IGZyb20gNSB0byAzLgorICAgICAgUmVtb3ZlIHRoZSAibm8gcmVzcG9uc2UgZnJvbSBkaXNwbGF5IiB3YXJuaW5nLgorICAgICAgQWRkIGF1dG9tYXRpYyBjdXJzb3Igcm91dGluZyB0byBob3Jpem9udGFsIGNvbWJpbmVkIG1vZGUgYmluZGluZ3MuCisgICAgICByZWFkX2NvbmZpZzoKKyAgICAgICAgIEluY2x1ZGUgcHJvbG9ndWUuaC4KKyAgICAgICAgIExpbmsgd2l0aCAkKExETElCUykuCisgICBUVFkgYnJhaWxsZSBkcml2ZXIgY2hhbmdlczoKKyAgICAgIFBvc2l0aW9uIHRoZSBjdXJzb3IgY29ycmVjdGx5LgorICAgICAgQnVpbGQgZXZlbiBpZiBubyBjdXJzZXMgcGFja2FnZSBpcyBhdmFpbGFibGUuCisgICBWaXJ0dWFsIGJyYWlsbGUgZHJpdmVyIGNoYW5nZXM6CisgICAgICBVc2UgUEZfTE9DQUwvQUZfTE9DQUwgaW5zdGVhZCBvZiBQRl9VTklYL0FGX1VOSVguCisgICAgICBEb24ndCBpbmRleCB0aGUgbmFtZXMgYXJyYXkgYmV5b25kIGl0cyBzaXplLgorICAgVmlzaW9CcmFpbGxlIGJyYWlsbGUgZHJpdmVyIGNoYW5nZXM6CisgICAgICBSZWRlZmluZSB0aGUgb3V0cHV0IHRhYmxlIGluIHRlcm1zIG9mIGJyYWlsbGUgZG90IGNvbnN0YW50cy4KKyAgIFZveWFnZXIgYnJhaWxsZSBkcml2ZXIgY2hhbmdlczoKKyAgICAgIFJlZm9ybWF0IHRoZSBkZWZpbml0aW9uIG9mIHRoZSBkb3RzIHRhYmxlLgorICAgWFdpbmRvdyBicmFpbGxlIGRyaXZlciBjaGFuZ2VzOgorICAgICAgUmVpbmRlbnQgc291cmNlLgorICAgICAgUmVuYW1lIHRoZSB4dHBhcm1zIHBhcmFtZXRlciB0byB0a3Bhcm1zLgorICAgICAgQWRkIHRoZSBpbnB1dD0gcGFyYW1ldGVyLgorICAgICAgQWRkIGEgbW9yZSBhZHZhbmNlZCBtb2RlbCAoYmFzZWQgb24gdGhlIFZpc2lvQnJhaWxsZSBtYXBwaW5nKS4KKyAgICAgIFhtIGlzbid0IGluaXRlcm5hdGlvbmFsaXplZC4KKyAgICAgIEFkZCBjdXJzb3Igcm91dGluZyBhbmQgZGlzcGxheWluZyBvZiBkb3RzLgorICAgICAgU2hvdyB0aGUgY3Vyc29yIHBvc2l0aW9uIHdpdGhpbiB0aGUgdmlzdWFsIGRpc3BsYXkuCisgICAgICBSaWdodC1jbGlja2luZyBvbiB0aGUgd2luZG93IHBvcHMgdXAgYSBtZW51IGluIHdoaWNoIG9uZSBjYW4KKyAgICAgIGNoYW5nZSB0aGUgc2l6ZSBhbmQgbW9kZWwgb2YgdGhlIGVtdWxhdGVkIGJyYWlsbGUgZGV2aWNlLgorICAgICAgS2VlcCB0aGUgd2luZG93IG9uIHRvcC4KKyAgICAgIEFkZCBhIHNldHVwIG1lbnUuCisgICAgICBBZGQgc3VwcG9ydCBmb3IgY29tbWFuZCBhdXRvcmVwZWF0aW5nLgorICAgICAgSW5jbHVkZSBYMTEvSW50cmluc2ljLmggaW4gbW9yZSBwbGFjZXMgdG8ga2VlcCBTb2xhcmlzIGhhcHB5LgorICAgRXh0ZXJuYWxTcGVlY2ggc3BlZWNoIGRyaXZlciBjaGFuZ2VzOgorICAgICAgQWxsb3cgbmFtZXMsIHJhdGhlciB0aGFuIGp1c3QgbnVtYmVycywgdG8gYmUgcGFzc2VkIHRvIHRoZSB1aWQvZ2lkIHBhcmFtZXRlcnMuCisgICBTd2lmdCBzcGVlY2ggZHJpdmVyIGNoYW5nZXM6CisgICAgICBBZGQgZGVidWcgbG9ncyBmb3IgdGhlIHNldHRpbmcgb2YgcGFyYW1ldGVycy4KKyAgIEFQSSBjaGFuZ2VzOgorICAgICAgQ2hhbmdlIEJybEFQSSdzIHJlbGVhc2UgdG8gMC40LjAuCisgICAgICBBZGQgdm9pZCB0byBhcmd1bWVudGxlc3Mgcm91dGluZSBwcm90b3R5cGVzIHdoZXJlIG1pc3NpbmcuCisgICAgICBNb3ZlIGJybGFwaV9mZF9tdXRleCBmcm9tIGFwaS5oIHRvIGFwaV9wcm90b2NvbC5oLgorICAgICAgTW92ZSBCUkxfS0VZQlVGX1NJWkUgZnJvbSBhcGkuaCB0byBhcGlfY2xpZW50LmMuCisgICAgICBEZWZpbmUgdGhlIEJSTEFQSV9NQVhLRVlTRVRTSVpFIGNvbnN0YW50IGFuZCB1c2UgaXQgaW4gYXBpX2NsaWVudC5jLgorICAgICAgYnJsYXBpX3JlYWRGaWxlKCkgYW5kIGJybGFwaV93cml0ZUZpbGUoKSBhcmUgb25seSB1c2VkIHdpdGhpbiBhcGlfY29tbW9uLmMuCisgICAgICBDbGVhbiB1cCB0aGUgQVBJIFRUWSBsaXN0IGluIGEgc2FmZSB3YXkuCisgICAgICBUaGUgQVBJIHNob3VsZCBhdXRvbWF0aWNhbGx5IGNsZWFuIHVwIGl0cyBUVFkgdHJlZS4KKyAgICAgIFJlbW92ZSB0aGUgYW5jZXN0b3IgbG9vcCBmcm9tIGJybGFwaV9nZXRDb250cm9sbGluZ1R0eSgpLgorICAgICAgUmVxdWlyZSBjbGllbnRzIHRvIGJlIG1vcmUgcHJlY2lzZSB3aGVuIGNsYWltaW5nIGEgdHR5IG9yIGVudGVyaW5nIHJhdyBtb2RlOgorICAgICAgICAgZ2V0UmF3KCkgaGFzIGFuIGFyZ3VtZW50IHRvIHNwZWNpZnkgdGhlIGRyaXZlciBvbmUgd2FudHMgdG8gZXhjaGFuZ2UgcGFja2V0cyB3aXRoLgorICAgICAgICAgVGhlIGludGVnZXIgYXJndW1lbnQgb2YgZ2V0VHR5KCkgdXNlZCB0byBzcGVjaWZ5IGVpdGhlciBCUkxfS0VZQ09ERVMgb3IgQlJMX0NPTU1BTkNTCisgICAgICAgICBoYXMgYmVlbiByZXBsYWNlZCBieSBhIHN0cmluZyBhcmd1bWVudC4KKyAgICAgICAgIElmIGVpdGhlciBOVUxMIG9yICIiIHRoZW4ga2V5cHJlc3NlcyBhcmUgZGVsaXZlcmVkIGFzIEJSTFRUWSBjb21tYW5kcy4KKyAgICAgICAgIElmIGEgZHJpdmVyIG5hbWUgdGhlbiB0aGUgc2VydmVyIHZlcmlmaWVzIHRoYXQgdGhhdCBkcml2ZXIgaXMgYmVpbmcgdXNlZCAKKyAgICAgICAgIGFuZCB0aGF0IGl0IGFjdHVhbGx5IHN1cHBvcnRzIHJhdyBrZXkgY29kZXMuCisgICAgICAgICBicmxhcGlfZ2V0UmF3KCkgc2hvdWxkIHJldHVybiBhbiBlcnJvciByYXRoZXIgdGhhbiBhbiBleGNlcHRpb24KKyAgICAgICAgIHdoZW4gdGhlIHJlcXVpcmVkIGRyaXZlciBpcyBub3QgdGhlIG9uZSB1c2VkIGJ5IEJSTFRUWS4KKyAgICAgIERlZmluZSBCUkxDT01NQU5EUyAoaW4gYXBpLmgpIGluIGEgYmFja3dhcmQgY29tcGF0aWJsZSB3YXkuCisgICAgICBWZXJpZnkgdGhlIHJlc3VsdCBvZiBnZXRob3N0YnluYW1lKCkuCisgICAgICBBZGQgY29uZGl0aW9uYWwgY29kZSBmb3IgUEZfTE9DQUwuCisgICAgICBVc2Ugc29ja2FkZHJfc3RvcmFnZSByYXRoZXIgdGhhbiBzb2NrYWRkci4KKyAgICAgIFNwbGl0IGJybGFwaV9yZWFkUGFja2V0KCkgaW50byBicmxhcGlfcmVhZFBhY2tldEhlYWRlcigpIGFuZCBicmxhcGlfcmVhZFBhY2tldENvbnRlbnQoKS4KKyAgICAgIFNwbGl0IHByb2Nlc3NSZXF1ZXN0KCkgaW50byBzZXZlcmFsIHNtYWxsZXIgZnVuY3Rpb25zLgorICAgICAgQ2hlY2sgY3Vyc29yIHZhbHVlIG1vcmUgY2FyZWZ1bGx5IGluIGJybGFwaV93cml0ZVRleHQoKS4KKyAgICAgIE9ubHkgcmVhbCBjb21tYW5kcyAobmVpdGhlciBOT09QIG5vciBFT0YpIHNob3VsZCBiZSBzZW50IHRvIGNsaWVudHMuCisgICAgICBUaGUgc2VydmVyIHNpZGUgb2YgdGhlIEFQSSBzaG91bGQgZG8gbm9uLWJsb2NrZWQgcmVhZHMuCisgICAgICBSZXBvcnQgcGFja2V0IHJlYWQgZXJyb3JzIHZpYSBlcnJubyByYXRoZXIgdGhhbiB2aWEgYnJsYXBpX2xpYmNlcnJuby4KKyAgICAgIFJlbmFtZSBlcnJvckhhbmRsZXIgdG8gZXhjZXB0aW9uSGFuZGxlci4KKyAgICAgIEFkZCB0aGUgYnJsYXBpX3N0cmV4Y2VwdGlvbigpIGZ1bmN0aW9uLgorICAgICAgTW9yZSBjbGVhcmx5IGRpc3Rpbmd1aXNoIGJldHdlZW4gZXJyb3JzIGFuZCBleGNlcHRpb25zLgorICAgICAgUHJvYmxlbXMgY2F1c2VkIGJ5IGdldFR0eSBhbmQgKHVuKWlnbm9yZUtleVNldCBzaG91bGQgYmUgcmVwb3J0ZWQgYXMgZXJyb3JzIHJhdGhlciB0aGFuIGFzIGV4Y2VwdGlvbnMuCisgICAgICBicmxhcGlfcGFja2V0VHlwZSgpIHNob3VsZCByZXR1cm4gYSBjb252ZW5pZW50IHN0cmluZyBmb3IgZXhjZXB0aW9uIHBhY2tldHMuCisgICAgICBDbGVhbiB1cCBlcnJvciBoYW5kbGluZyBieSBwdXR0aW5nIGFsbCBuZWNlc3NhcnkgaW5mb3JtYXRpb24gZm9yIHByaW50aW5nIGVycm9ycyBpbnRvIGEgc3RydWN0LgorICAgICAgQWRkIHRoZSBpbmZyYXN0cnVjdHVyZSBmb3IgaGFuZGxpbmcgZGlzcGxheSBzaXplIGNoYW5nZXMuCisgICAgICBIYW5kbGUgY2xpZW50J3MgY2hhcnNldCBhbmQgY29udmVydCBhcyBuZWVkZWQgaW4gdGhlIHNlcnZlci4KKyAgICAgIFJlY29nbml6ZSAtMSAocmF0aGVyIHRoYW4gMCkgYXMgdGhlICJubyBzY3JlZW4iIHZ0LgorICAgICAgU2V2ZXJhbCAocmFyZSkgcmFjZSBjb25kaXRpb24gZml4ZXMuCisgICAgICBBZGQgc3VwcG9ydCBmb3IgdGhlIFVuaWNvZGUgYnJhaWxsZSByb3cuCisgICAgICBJZiBzdXBwb3J0ZWQsIHJlZHVjZSB0aGUgdGhyZWFkIHN0YWNrIHNpemUgdG8gNjRLIChmcm9tIDhNKS4KKyAgICAgIEFkZCB0aGUgQVBJIHBhcmFtZXRlciBzdGFja3NpemU9LgorICAgICAgUmVtb3ZlIHRoZSBUT09SRUNVUlNFIGVycm9yIGNvZGUuCisgICAgICBSZXBsYWNlIGJvdGggUkFXTk9UU1VQUCBhbmQgS0VZU05PVFNVTVAgZXJyb3JzIGJ5IE9QTk9UU1VQUC4KKyAgICAgIFJldHVybiBPUE5PVFNVUFAgKHJhdGhlciB0aGFuIElOVkFMSURfUEFSQU1FVEVSKSB3aGVuIGEgY2hhcnNldCBpcyBzcGVjaWZpZWQgYW5kIGljb252IGlzIGFic2VudC4KKyAgICAgIFNpbXBsaWZ5IHRoZSByZXR1cm5pbmcgb2YgZXJyb3JzLgorICAgICAgRml4IHR0eSB0YWJsZSBleHRlbnNpb24uCisgICAgICBicmxhcGlfd3JpdGUoKSBzaG91bGQgdXNlIHRoZSBzcGVjaWZpZWQgbGVuZ3RoIHJhdGhlciB0aGFuIGNhbGwgc3RybGVuIHNpbmNlIHRoZSBkYXRhIGNvdWxkIGNvbnRhaW4gTlVMIGJ5dGVzLgorICAgICAgQWRkIHRoZSBicmxhcGlfZ2V0VHR5UGF0aCgpIGZ1bmN0aW9uLgorICAgICAgVXNlIHJlY3Vyc2l2ZSBsb2NraW5nIHNvIHRoYXQgYnJsX3JlYWRDb21tYW5kKCkgY2FuIGNhbGwgbWVzc2FnZSgpLgorICAgICAgQ2hhbmdlIHRoZSBwcm90b3R5cGVzIGZvciBicmxhcGlfKHNlbmR8cmVjdilSYXcoKSB0byB1c2UgInZvaWQgKiIgaW5zdGVhZCBvZiAidW5zaWduZWQgY2hhciAqIi4KKyAgICAgIEFsbG93IHRoZSBLZXlGaWxlPSBwYXJhbWV0ZXIgdG8gYWNjZXB0IHRoZSBzcGVjaWFsIHN0cmluZyAibm9uZSIuCisgICAgICBSZWplY3QgZW1wdHkga2V5IGZpbGVzLgorICAgICAgQWNjZXB0IGtleXMgbGFyZ2VyIHRoYW4gdGhlIGFsbG93ZWQga2V5IHNpemUuCisgICAgICBCeSBkZWZhdWx0LCB0aGUgY2xpZW50IHNob3VsZCBhbHNvIGNoZWNrIGZvciB0aGUgSVAgc29ja2V0LgorICAgICAgQ2hlY2sgZm9yIGFuIGFscmVhZHktcnVubmluZyBCcmxBUEkgc2VydmVyLgorICAgICAgUHJvdmlkZSBwdWJsaWMgYWNjZXNzIHRvIGJybGFwaV9zcGxpdEhvc3QoKS4KKyAgICAgIERvdCBtYXNrcyBzaG91bGQgYmUgdW5zaWduZWQuCisgICAgICBSZW1vdmUgdGhlIHRyYWlsaW5nIG5ld2xpbmUgZnJvbSB0aGUgIkJybEFQSSByZXNpemUiIGxvZy4KKyAgICAgICJjb2RlIiBoYXMgYWxyZWFkeSBiZWVuIGNvbnZlcnRlZCB0byBob3N0IGJ5dGUgb3JkZXIgYnkgdGhlIGNhbGxlci4KKyAgICAgIEFkZCBzb21lIHN5bmNocm9uaXNhdGlvbiBjbGVhbnVwcy4KKyAgICAgIEFsbG93IHVzZXJzIHRvIGNhbGwgYnJsYXBpX3dyaXRlKE5VTEwpLgorICAgICAgYXBpLmggc2hvdWxkIGludGVybmFsbHkgaW5jbHVkZSB3aGF0IGl0IGRlcGVuZHMgb24uCisgICAgICBQcmVwcm9jZXNzIHRoZSBhdXRvcmVwZWF0IGZsYWdzLgorICAgICAgTGV0IHRoZSBjbGllbnRzIHNlZSBCUkxfQ01EX05PT1AuCisgICBhcGl0ZXN0IGNoYW5nZXM6CisgICAgICBBZGQgdGhlIC1kIFstLWRvdHNdIG9wdGlvbi4KKyAgICAgIEV4aXQgc2hvdyBkb3RzIG1vZGUgd2hlbiBhIGJyYWlsbGUgZGlzcGxheSBrZXkgKHJhdGhlciB0aGFuIGEga2V5Ym9hcmQga2V5KSBpcyBwcmVzc2VkLgorICAgICAgTGVhcm4gTW9kZToKKyAgICAgICAgIEFubm91bmNlIGVudHJ5LgorICAgICAgICAgV3JpdGUgY29tbWFuZCBkZXNjcmlwdGlvbnMgdG8gc3RhbmRhcmQgZXJyb3IuCisgICAgICAgICBFbGltaW5hdGUgYm9ndXMgZXJyb3IgbWVzc2FnZSB3aGVuIGxlYXZpbmcuCisgICB4YnJsYXBpIGNoYW5nZXM6CisgICAgICBBZGQga2V5IGV2ZW50IHN1cHBvcnQuCisgICAgICBObyBsb25nZXIgdXNlIHRoZSBkZXByZWNhdGVkIEJSTENPTU1BTkRTIGNvbnN0YW50LgorICAgICAgQ2xvc2UgdGhlIGNvbm5lY3Rpb24gdmlhIGEgc2lnbmFsLXNhZmUgbWV0aG9kLgorICAgdGJsdGVzdCBjaGFuZ2VzOgorICAgICAgQWRkIHN1cHBvcnQgZm9yIHdyaXRpbmcgdGFibGVzLgorICAgICAgQWRkIHN1cHBvcnQgZm9yIC5hMmIgKEdub3Blcm5pY3VzKSBicmFpbGxlIHRhYmxlcy4KKyAgICAgIEludGVycHJldCAtIGFzIHN0YW5kYXJkIGlucHV0LgorICAgZW4tdXMtZzIgY29udHJhY3Rpb24gdGFibGUgZml4ZXM6CisgICAgICBbaGFkXXJpYW4sIGhpZFtlYV13YXksIHJbZXJdZWdpc3RlciwgdW5bY29uXWdlbmlhbC4KKyAgICAgIERvbid0IHJlbW92ZSBzcGFjZSBhZnRlciAiYSIgaWYgYmVmb3JlICJhbmQiLCAiZm9yIiwgIm9mIiwgInRoZSIsIG9yICJ3aXRoIi4KKyAgICAgIERvbid0IGNvbnRyYWN0IHRoZSB3b3JkICJpbiIgYWZ0ZXIgYSBkYXNoLgorICAgVVNCIGNoYW5nZXM6CisgICAgICBSZW1vdmUgdGhlIGFzc3VtcHRpb24gdGhhdCBhIFVTQiBkZXZpY2UgbWFwcyB0byBhIGZpbGUgc3lzdGVtIG9iamVjdC4KKyAgICAgIEEgZGV2aWNlIHNob3VsZCBwb2ludCB0byB0aGUgcHJvcGVyIGRlc2NyaXB0b3IgZm9yIHRoZSBjdXJyZW50IGludGVyZmFjZSBhbHRlcm5hdGl2ZS4KKyAgICAgIFVzZSBhIGNvbW1vbiBhbGdvcml0aG0gZm9yIGl0ZXJhdGluZyB0aHJvdWdoIHRoZSBjb25maWd1cmF0aW9uIGRlc2NyaXB0b3IgYmxvY2suCisgICAgICBPbmx5IHJlcmVhZCB0aGUgY29uZmlndXJhdGlvbiBkZXNjcmlwdG9yIGJsb2NrIGlmIHRoZSBmaXJzdCBidWZmZXIgaXMgdG9vIHNtYWxsLgorICAgICAgUHVibGljaXplIHRoZSBmdW5jdGlvbnMgZm9yIGdldHRpbmcgdGhlIGNvbmZpZ3VyYXRpb24gZGVzY3JpcHRvciBhbmQgaXRzIGNvbXBvbmVudHMuCisgICAgICBXaGVuIHNldHRpbmcgdGhlIGNvbmZpZ3VyYXRpb24sIGRlYWxsb2NhdGUgdGhlIGNhY2hlZCBjb3B5IG9mIHRoZSBvbGQgZGVzY3JpcHRvci4KKyAgICAgIEFkZCBhIGZ1bmN0aW9uIGZvciByZWFkaW5nIHRoZSBkZXZpY2UgZGVzY3JpcHRvciBmcm9tIHRoZSBkZXZpY2UgaXRzZWxmLgorICAgICAgQXV0b21hdGljYWxseSBjbG9zZSBhbiBvcGVuIGludGVyZmFjZSB3aGVuIGNoYW5naW5nIHRoZSBjb25maWd1cmF0aW9uLgorICAgICAgQWRkIGFuIGVuZHBvaW50IHBhcmFtZXRlciB0byB1c2JSZWFwUmVzcG9uc2UoKS4KKyAgICAgIEltcHJvdmUgdGhlIHRpbWVvdXQgdXNlZCBmb3IgaW4tbGluZSBlbmRwb2ludCByZWFkaW5nIHdoZW4gYXdhaXRpbmcgaW5wdXQuCisgICAgICBDYWxjdWxhdGUgdGltZW91dHMgbW9yZSBhY2N1cmF0ZWx5LgorICAgICAgTWFrZSBkZXZpY2UgY2xvc2luZyBtb3JlIHJvYnVzdC4KKyAgICAgIENoZWNrIGZvciBhIHNlcmlhbCBhZGFwdGVyIGV2ZW4gaWYgY29uZmlndXJhdGlvbiBkYXRhIGZvciBpdCBpc24ndCBzdXBwbGllZC4KKyAgICAgIEZpeCB0aGUgYnVsayBpbnB1dCBsb29wLgorICAgICAgQXN5bmNocm9ub3VzIGVycm9ycyBzaG91bGQgYWx3YXlzIGJlIHBhc3NlZCBiYWNrIHRvIHRoZSBjYWxsZXIuCisgICAgICBDb2RlIHJlc3RydWN0dXJpbmc6CisgICAgICAgICBSZW9yZGVyIHRoZSBwbGF0Zm9ybS1kZXBlbmRlbnQgZnVuY3Rpb24gZGVmaW5pdGlvbnMuCisgICAgICAgICBHcm91cCB0aGUgZ2xvYmFsIGludGVybmFsIGZ1bmN0aW9uIGRlZmluaXRpb25zIGJ5IHdoZXJlIHRoZXkgbmVlZCB0byBiZSBpbXBsZW1lbnRlZC4KKyAgICAgICAgIFJlbmFtZSB0aGUgY29uc3RhbnRzIHRvIGF2b2lkIGNvbmZsaWN0cyB3aXRoIGxpYnVzYi4KKyAgICAgIExpbnV4IGNoYW5nZXM6CisgICAgICAgICBBbGxvdyByZWFwaW5nIHRoZSBVUkIgZm9yIGEgc3BlY2lmaWMgZW5kcG9pbnQuCisgICAgICAgICBSZWFwIGEgVVJCIGFmdGVyIGRpc2NhcmRpbmcgaXQuCisgICAgICAgICBBZGQgc3VwcG9ydCBmb3IgaW5saW5lIHJlYWRpbmcgb2YgYW4gaW50ZXJydXB0IGVuZHBvaW50LgorICAgICAgICAgQWRkIHN1cHBvcnQgZm9yIGlubGluZSB3cml0aW5nIHRvIGFuIGludGVycnVwdCBlbmRwb2ludC4KKyAgICAgIEJTRCBjaGFuZ2VzOgorICAgICAgICAgQWRkIG1vcmUgcm9idXN0bmVzcyB0byBkZWFsbG9jYXRpbmcgZGV2aWNlIGFuZCBlbmRwb2ludCBleHRlbnNpb25zLgorICAgICAgRGFyd2luIGNoYW5nZXM6CisgICAgICAgICBBZGQgbW9yZSByb2J1c3RuZXNzIHRvIGRlYWxsb2NhdGluZyBhbiBlbmRwb2ludCBleHRlbnNpb24uCisgICAgICBBZGQgc3VwcG9ydCBmb3IgbGlidXNiLgorICAgR2VuZXJhbCBjb2RlIGNoYW5nZXM6CisgICAgICBVcGRhdGUgdGhlIGNvcHlyaWdodCBwcm9sb2d1ZXMgZnJvbSAyMDA0IHRvIDIwMDUuCisgICAgICBDaGFuZ2UgIkxpbnV4IGNvbnNvbGUiIHRvICJjb25zb2xlIHNjcmVlbiIgaW4gdGhlIGNvcHlyaWdodCBwcm9sb2d1ZXMuCisgICAgICBDaGFuZ2UgdGhlIG5lc3RlZCBpbmNsdXNpb24gcHJvdGVjdGlvbiBjb252ZW50aW9uIGZyb20gX05BTUVfSCB0byBCUkxUVFlfSU5DTFVERURfTkFNRS4KKyAgICAgIDxzeXMvdHlwZXMuaD4gbmVlZHMgdG8gYmUgaW5jbHVkZWQgYmVmb3JlIGFsbW9zdCBhbnkgb3RoZXIgaGVhZGVyICBvbiBzb21lIEJTRCBzeXN0ZW1zLgorICAgICAgZ2NjLTMuMyAoYXQgbGVhc3Qgb24gY3lnd2luKSBkb2Vzbid0IGxpa2UgYXBvc3Ryb3BoZXMgaW4gI2Vycm9yIGRpcmVjdGl2ZXMuCisgICAgICBnY2MtNCBkb2VzIGEgbG90IG1vcmUgY2hlY2tpbmcgZm9yIG1hdGNoaW5nIHNpZ25lZG5lc3MuCisgICAgICBnY2MtNCBkb2Vzbid0IGFsbG93IGEgdmFyaWFibGUgdG8gYmUgZGVjbGFyZWQgZ2xvYmFsIGFuZCB0aGVuIHN0YXRpYy4KKyAgICAgIFJlbW92ZSB0aGUgY2FzdHMgZnJvbSB0aGUgcmVzdWx0cyBvZiBtYWxsb2MoKSBjYWxscy4KKyAgICAgIENsZWFuIHVwIHRoZSBwYXNzaW5nIG9mIFRyYW5zbGF0aW9uVGFibGUgYW5kIERvdHNUYWJsZSBwYXJhbWV0ZXJzLgorICAgICAgTG9ncyB0byBzdGFuZGFyZCBlcnJvciBzaG91bGQgYmUgcHJlZml4ZWQgd2l0aCB0aGUgcHJvZ3JhbSdzIG5hbWUuCisgICAgICBVc2UgTG9nUHJpbnQoKSByYXRoZXIgdGhhbiBmcHJpbnRmKHN0ZGVycikgZm9yIG9wdGlvbiBwcm9jZXNzaW5nIGVycm9ycy4KKyAgICAgIFJlbmFtZSBjdGJfZGVmaW5pdGlvbnMuaCB0byBjdGJfaW50ZXJuYWwuaC4KKyAgICAgIFJlbW92ZSBkdW1teSB0aW1lem9uZSBwYXJhbWV0ZXJzIHRvIGdldHRpbWVvZmRheSgpLgorICAgICAgUmVuYW1lIGluZm1vZGUgdG8gaW5mb01vZGUuCisgICAgICBSZW1vdmUgdGVzdHMgZm9yIGFuZCBjYWxscyB0byBlbmRob3N0ZW50KCkgYW5kIGVuZHNlcnZlbnQoKS4KKyAgICAgIEVuc3VyZSB0aGF0IGFsbCBJL08gaGVhZGVycyBhcmUgcHJlZml4ZWQgd2l0aCAiaW9fIiAocHJpbWFyaWx5IGJlY2F1c2Ugb2YgPHVzYi5oPi4KKyAgIEdlbmVyYWwgZHJpdmVyIGNoYW5nZXM6CisgICAgICBEZWZpbmUgb3B0X3BjbURldmljZSBhcyBleHRlcm5hbCBmb3IgdGhvc2Ugc3BlZWNoIGRyaXZlcnMgd2hpY2ggbmVlZCBpdC4KKyAgICAgIENoYW5nZSB0aGUgc3BlZWNoIHJhdGUsdm9sdW1lIGhhbmRsZXJzIHRvIHRha2UgYSBmbG9hdGluZy1wb2ludCBtdWx0aXBsaWVyLgorICAgICAgUHJlZml4IGFsbCBkcml2ZXIgaWRlbnRpZmljYXRpb24gI2RlZmluZXMgd2l0aCB0aGUgZHJpdmVyIGNvZGUuCisgICAgICBVbmlmb3JtbHkgcmVmZXIgdG8gZHJpdmVyIGNvZGVzIGFzICJjb2RlcyIgcmF0aGVyIHRoYW4gYXMgImlkZW50aWZpZXJzIi4KKyAgICAgIEFkZCB0aGUgZHJpdmVyIGNvbW1lbnQgc3RyaW5nIHRvIHRoZSBkcml2ZXIgc3RydWN0dXJlLgorICAgICAgU3BsaXQgdGhlIGJyYWlsbGUgYW5kIHNwZWVjaCBkcml2ZXJzIGludG8gc2VwYXJhdGUgc3ViZGlyZWN0b3JpZXMuCisgICAgICBEb24ndCBjcmVhdGUgdGhlIC9saWIvYnJsdHR5L2JybHR0eS0/Pz8ubHN0IGZpbGVzLgorICAgICAgTWFrZSB0aGUgc2NyZWVuIGRyaXZlcnMgZHlhbWljYWxseSBsb2FkYWJsZS4KKyAgICAgIEFkZCBza2VsZXRvbiBicmFpbGxlLHNwZWVjaCxzY3JlZW4gZHJpdmVyIHNvdXJjZS4KKyAgIFNjcmVlbiBkcml2ZXIgY2hhbmdlczoKKyAgICAgIERlZmluZSBzY3JlZW4gZHJpdmVyIHBhcmFtZXRlcnMgaW4gYSBtb3JlIHN0YW5kYXJkIHdheS4KKyAgICAgIEFsbG93IHNjcmVlbiBkcml2ZXIgY29kZXMgdG8gYmUgdXNlZCBhcyBwYXJhbWV0ZXIgcXVhbGlmaWVycy4KKyAgICAgIE1ha2UgLS13aXRob3V0LXNjcmVlbi1kcml2ZXIgd29yay4KKyAgICAgIEFkZCB0aGUgc2NyZWVuLWRyaXZlciBjb25maWd1cmF0aW9uIGRpcmVjdGl2ZSBhbmQgLXggY29tbWFuZCBsaW5lIG9wdGlvbiB0byBCUkxUVFkuCisgICAgICBSZW1vdmUgaGFyZC1jb2RlZCBsaW1pdGF0aW9ucyBhbmQgYXNzdW1wdGlvbnMgZnJvbSB0aGUgc2NyZWVuIHN0YXRlIHRhYmxlLgorICAgICAgRG9uJ3Qga2VlcCB0d28gY29waWVzIG9mIHRoZSBjdXJyZW50IHNjcmVlbiBudW1iZXIuCisgICAgICBBbGwgc2NyZWVuIGRyaXZlcnMgc2hvdWxkIGRldGVybWluZSB0aGVpciB2dCMgaW4gb25seSBvbmUgcGxhY2UuCisgICAgICBDbGVhbiB1cCB0aGUgY29kZSB3aGljaCBzd2l0Y2hlcyBiZXR3ZWVuIHRoZSBsaXZlLGZyb3plbixoZWxwIHNjcmVlbnMuCisgICAgICBUaGUgcmVhZCgpIG1ldGhvZCBzaG91bGQgcmV0dXJuIGEgYm9vbGVhbiByYXRoZXIgdGhhbiB0aGUgYnVmZmVyLgorICAgICAgQWRkIHRoZSB1c2VydnQoKSBtZXRob2QgdG8gdGhlIE1haW5TY3JlZW4gb2JqZWN0LgorICAgICAgQWRkIHRoZSB1c2VydnQoKSBtZXRob2QgdG8gdGhlIFNjcmVlbiBzY3JlZW4gZHJpdmVyLgorICAgICAgQWRkIHRoZSBjdXJyZW50dnQoKSBtZXRob2QgdG8gdGhlIEZyb3plblNjcmVlbiBvYmplY3QuCisgICAgICBDb3JyZWN0bHkgZGV0ZWN0IHdoZW4gdGhlIExpbnV4IGNvbnNvbGUgc3dpdGNoZXMgYmV0d2VlbiB0ZXh0IGFuZCBncmFwaGljcyBtb2RlLgorICAgU29sYXJpcyBjaGFuZ2VzOgorICAgICAgRGVmaW5lIEFGX0xPQ0FMIHRvIGJlIEFGX0lORVQuCisgICAgICBEZWZpbmUgX1hPUEVOX1NPVVJDRT01MDAgYW5kIF9fRVhURU5TSU9OU19fLgorICAgICAgQWRkIG5hdGl2ZSBVU0Igc3VwcG9ydC4KKyAgICAgIFJlbW92ZSB0aGUgdXNlIG9mICJbZnJvbSAuLi4gdG9dID0iIGluaXRpYWxpemVycy4KKyAgICAgIFJlbW92ZSB0aGUgdXNlIG9mIHR5cGUtY2FzdGVkIHR1cGxlcy4KKyAgICAgIFJlbW92ZSB0aGUgdXNlIG9mIF9fbGFiZWxfXyBkZWNsYXJhdGlvbnMuCisgICAgICAiI3ByYWdtYSB3ZWFrIiwgcmF0aGVyIHRoYW4gIl9fYXR0cmlidXRlc19fKCh3ZWFrKSkiLCBpcyBuZWVkZWQgb24gU29sYXJpcy4KKyAgIEJ1aWxkIGNoYW5nZXM6CisgICAgICBnZW5kZXBzIGNoYW5nZXM6CisgICAgICAgICBSZW1vdmUgdGhlIG5lZWQgZm9yIFRjbFguCisgICAgICAgICBTZWFyY2ggZm9yIHRjbHNoIHJhdGhlciB0aGFuIGhhcmQtY29kZSBpdHMgcGF0aC4KKyAgICAgIFJlbmFtZSB0aGUgImF1eCIgc3ViZGlyZWN0b3J5IHRvICJhY2RpciIgKGZvciBDeWd3aW4pLgorICAgICAgRG9uJ3QgYnVpbGQgc3BrdGVzdCBhdXRvbWF0aWNhbGx5LgorICAgICAgQnVpbGQvaW5zdGFsbC91bmluc3RhbGwgeGJybGFwaS4KKyAgICAgIFBhc3MgdGhlIGxpc3Qgb2YgbmVlZGVkIGxpYnJhcmllcyB0byB0aGUgbGlua2luZyBvZiB0aGUgQVBJIHNlcnZlciBsaWJyYXJ5LgorICAgICAgTGluayB0aGUgQVBJIGNsaWVudCBsaWJyYXJ5IHdpdGggb25seSB0aG9zZSBkZXBlbmRlbmNpZXMgd2hpY2ggaXQgYWN0dWFsbHkgbmVlZHMuCisgICAgICBBZGQgYnVpbGQtdGltZSBkZXRlY3Rpb24gZm9yOiBwd2QuaCwgZ3JwLmgsIHJlZ2V4LmgsIGdhaV9zdHJlcnJvcigpLCBoc3RyZXJyb3IoKS4KKyAgICAgIEFkZCBjb21waWxlLXRpbWUgZGV0ZWN0aW9uIGZvcjogRVRJTUVET1VULCBFQUZOT1NVUE9SVC4KKyAgICAgIEV4cGxpY2l0bHkgdGVzdCBmb3IgbGliWDExLCBsaWJYdCwgYW5kIHRoZSB4dCB0b29sa2l0IGxpYnJhcnkuCisgICAgICBTZXBhcmF0ZSB0aGUgY29uY2VwdHMgb2YgZHluYW1pYyBsaWJyYXJ5IGFuZCBsb2FkYWJsZSBtb2R1bGUuCisgICAgICBVc2UgPE5BTUU+IHJhdGhlciB0aGFuIDxTT05BTUU+IGluIHRoZSBNS0xJQiBtYWNyby4KKyAgICAgIFVzZSBsaWJ1c2IsIGlmIGF2YWlsYWJsZSwgaWYgd2UgZG9uJ3QgcHJvdmllIG5hdGl2ZSBVU0Igc3VwcG9ydC4KKyAgICAgIFVwZ3JhZGUgdGhlIEJybEFQSXJlZiBkb3h5Z2VuIGNvbmZpZ3VyYXRpb24gZmlsZSB0byAxLjMuOS4xLgorICAgICAgQ2xlYW4gdXAgdGhlIHRvcC1sZXZlbCA8ZHJpdmVyLXR5cGU+Lm1rIGZpbGVzLgorICAgICAgQ29ycmVjdCB0aGUgZG9jdW1lbnRhdGlvbiByZWdhcmRpbmcgZGVmYXVsdCBpbnN0YWxsZWQgcGFja2FnZSBsb2NhdGlvbnMuCisgICAgICBSZW5hbWUgdGhlIGJybHR0eV9zZXR1cF9maWxlcyBtYWNybyB0byBicmx0dHlfbWFrZV9maWxlcy4KKyAgICAgIFJlbmFtZSBzZXR1cC5tay5pbiB0byBwcm9sb2d1ZS5tay5pbi4KKyAgICAgICJtYWtlIGNsZWFuL2Rpc3RjbGVhbiIgc2hvdWxkIHByb2Nlc3MgdGhlIGRpcmVjdG9yaWVzIGZvciBpbnRlcm5hbCBkcml2ZXJzLgorICAgICAgIm1ha2UgYWxsIiBpbiB0aGUgIkRvY3VtZW50cy8iIHN1YmRpcmVjdG9yeSBzaG91bGQgbWFrZSB0aGUgbWFuMyBmaWxlcy4KKyAgICAgIEFkZCB0aGUgbWFrZSBmaWxlIHRhcmdldHMgdGFyLGd6LGJ6MixycG0uCisgICAgICBGaXggdGhlIGhhcmQtY29kZWQgZGVwZW5kZW5jaWVzIHdoaWNoIGFsbG93IHRoZSBWaWRlb0JyYWlsbGUgYnJhaWxsZSBkcml2ZXIgdG8gYmUgYnVpbHQtaW4uCisgICAgICBTcGxpdCB0aGUgbm9uLWNvbmZpZyBwYXJ0cyBvZiBjb25maWcuaCBpbnRvIHByb2xvZ3VlLmggYW5kIGluY2x1ZGUgdGhlIGZvcm1lciBmcm9tIHRoZSBsYXR0ZXIuCisgICAgICBSZW1vdmUgdGhlIGxlYWRpbmcgLi8gZnJvbSBjb25maWcuaCBpbiBtYWtlIGZpbGUgZGVwZW5kZW5jeSBsaXN0cy4KKyAgICAgIFNvbWUgY29tcGlsZXJzIGRvbid0IGxpa2UgdHJhaWxpbmcgc2xhc2hlcyBvbiBkaXJlY3RvcnkgcGF0aHMuCisgICAgICBVc2UgdGhlIHNoZWxsIHZhcmlhYmxlICRSQU5ET00gYXMgYSBsYXN0IHJlc29ydCB3aGVuIGdlbmVyYXRpbmcgdGhlIEFQSSBrZXkuCisgICByaG1raXNvIGNoYWduZXM6CisgICAgICBCdWlsZCBpbiB0aGUgTGludXggc2NyZWVuIGRyaXZlciwgYW5kIGRvbid0IGJ1aWxkIGFueSBvdGhlciBzY3JlZW4gZHJpdmVycy4KKyAgICAgIEFkZCBzdXBwb3J0IGZvciBtYWtpbmcgYSBicmFpbGxpZmllZCBGZWRvcmEgQ29yZSA0IGluc3RhbGxlciBpbWFnZS4KKyAgIFJQTSBjaGFuZ2VzOgorICAgICAgVGhlIHNwZWMgZmlsZSByZWZlcmVuY2VkIGFuIG9sZCBzdWJzdGl0dXRpb24gZm9yIHRoZSBBUEkgdmVyc2lvbi4KKyAgICAgIERvbid0IGluY2x1ZGUgdGhlIFRUWSBicmFpbGxlIGRyaXZlci4KKyAgIEdub3Blcm5pY3VzIGNoYW5nZXM6CisgICAgICB0dHlicmwuYzoKKyAgICAgICAgIEltcHJvdmUgdGhlIEJSTFRUWSBjb21tYW5kIHRvIEdub3Blcm5pY3VzIGtleSBtYXBwaW5ncy4KKyAgICAgICAgIFVzZSBHbm9wZXJuaWN1cyBsYXllci1rZXkgY29kZXMgcmF0aGVyIHRoYW4gQmF1bSBrZXkgY29kZXMuCisgICAgICAgICBNb3ZlIGFsbCBrZXkgY29kZSBnZW5lcmF0aW9uIGludG8gYSBjb21tb24gcm91dGluZS4KKyAgICAgICAgIFJlbmFtZSBrZXkgdG8gYmxrIGFuZCBrZXlwcmVzcyB0byBrZXkuCisgICAgICAgICBJZ25vcmUgQlJMX0NNRF9OT09QLgorICAgICAgICAgSGFuZGxlIHRoZSBhdXRvcmVwZWF0IGZsYWdzLgorICAgICAgICAgQ2hlY2sgZm9yIGVycm9ycyBpbiB0aGUgY29tbWFuZCByZWFkIGxvb3AuCisgICAgICAgICBpZ25vcmVfaW5wdXQoKSBpcyBubyBsb25nZXIgbmVlZGVkIGJlY2F1c2UgZmxhZ3MgYXJlbid0IHRha2VuIGludG8gYWNjb3VudCB3aGVuIGlnbm9yaW5nIGNvbW1hbmRzLgorICAgICAgICAgQWRhcHQgdG8gQnJsQVBJIDAuNC4wLgorICAgICAgUkVBRE1FLkdub3Blcm5pY3VzOgorICAgICAgICAgQWRkIGEgbm90ZSBhYm91dCB1c2luZyBCUkxUVFkncyBQYXRjaGVzL3R0eWJybC5jLgorICAgICAgICAgRG9jdW1lbnQgdGhlIGxhdGVzdCBCUkxUVFkgY29tbWFuZCB0byBHbm9wZXJuaWN1cyBrZXkgbWFwcGluZ3MuCisgICAgICAgICBEb2N1bWVudCBob3cgdG8gZ2V0IHRoZSByb3V0aW5nIGtleXMgdG8gd29yay4KKyAgIEluaXRpYWwgc3VwcG9ydCBmb3IgdGhlIEh1cmQgcGxhdGZvcm0uCisgICBJbml0aWFsIHN1cHBvcnQgZm9yIHRoZSBNYWMgT1MgWCAoRGFyd2luKSBwbGF0Zm9ybS4KKyAgIEluaXRpYWwgc3VwcG9ydCBmb3IgdGhlIEN5Z3dpbiBwbGF0Zm9ybS4KKyAgIEluaXRpYWwgc3VwcG9ydCBmb3IgdGhlIE1pbkdXIHBsYXRmb3JtLgorICAgUmVtb3ZlIHRoZSBWYXJpbyBicmFpbGxlIGRyaXZlci4KKyAgIFJlbW92ZSB0aGUgVmFyaW9IVCBicmFpbGxlIGRyaXZlci4KKyAgIEFkZCB0aGUgQmF1bSBicmFpbGxlIGRyaXZlci4KKyAgIEFkZCB0aGUgQnJhdWRpIGJyYWlsbGUgZHJpdmVyLgorICAgQWRkIHRoZSBCcmxBUEkgYnJhaWxsZSBkcml2ZXIuCisgICBBZGQgdGhlIExpYmJyYWlsbGUgYnJhaWxsZSBkcml2ZXIuCisgICBBZGQgdGhlIFRlY2huaUJyYWlsbGUgYnJhaWxsZSBkcml2ZXIuCisgICBBZGQgdGhlIEF0U3BpIHNjcmVlbiBkcml2ZXIuCisgICBBZGQgdGhlIEh1cmQgc2NyZWVuIGRyaXZlci4KKyAgIEFkZCB0aGUgV2luZG93cyBzY3JlZW4gZHJpdmVyLgorICAgUmVuYW1lIHRoZSBzaG0gc2NyZWVuIGRyaXZlciB0byBTY3JlZW4uCisgICBBZGQgYWwsYm0sYm4saHQsbWQgdG8gdGhlIGJyYWlsbGUgZHJpdmVyIHNlcmlhbCBhdXRvZGV0ZWN0IGxpc3QuCisgICBBZGQgYm0gdG8gdGhlIGJyYWlsbGUgZHJpdmVyIFVTQiBhdXRvZGV0ZWN0IGxpc3QuCisgICBBZGQgYm0gdG8gdGhlIGJyYWlsbGUgZHJpdmVyIEJsdWV0b290aCBhdXRvZGV0ZWN0IGxpc3QuCisKK01heSA1LCAyMDA1OgorIC0gQlJMVFRZIDMuNi4yIHJlbGVhc2VkOgorICAgRnJlbmNoIGJyYWlsbGUgdXNlcyBkb3RzIDM0OCBmb3IgdGhlIGludmVydGVkIHF1ZXN0aW9uIG1hcmsuCisgICBEb24ndCBidWlsZCB0aGUgVFRZIGFuZCBYV2luZG93IGRyaXZlcnMgd2hlbiBicmFpbGxpZnlpbmcgYSBib290IGltYWdlLgorICAgSWYgbWNvb2tpZSBpc24ndCBhdmFpbGFibGUgdGhlbiB1c2UgL2Rldi91cmFuZG9tIG9yIC9kZXYvcmFuZG9tIHRvIGdlbmVyYXRlIHRoZSBBUEkga2V5LgorICAgVGhlIHNoYXJlZCBtZW1vcnkgc2NyZWVuIGRyaXZlciBzaG91bGQgcHJpbWFyaWx5IHVzZSBhIHBlciB1c2VyIHNlZ21lbnQuCisgICBVcGRhdGUgdGhlIHNjcmVlbiBwYXRjaCB0byBnZW5lcmF0ZSBhIHBlci11c2VyIHNoYXJlZCBtZW1vcnkga2V5LgorICAgU29tZSBwbGF0Zm9ybXMgZG9uJ3QgZGVmaW5lIFBGX0xPQ0FMLgorICAgQlJMX0NNRF9MTkVORCBpcyBicm9rZW4gd2hlbiB0aGUgZGlzcGxheSBzdGlja3Mgb3V0IHRvIHRoZSByaWdodCBvZiB0aGUgc2NyZWVuLgorICAgVXBkYXRlZCBiaWc1IGNvbnRyYWN0aW9uIHRhYmxlLgorICAgVGhlIGZlYXR1cmUgbGlzdCBub3cgc3RhdGVzIHRoYXQgRnJlbmNoIGNvbnRyYWN0ZWQgYnJhaWxsZSBpcyBwcm92aWRlZC4KKyAgIEFkZCB0aGUgU3dpZnQgc3BlZWNoIHN5bnRoZXNpemVyIGRyaXZlci4KKyAgIEJyYWlsbGVMaXRlIGJyYWlsbGUgZHJpdmVyIGNoYW5nZXM6CisgICAgICBDbGFyaWZ5IHRoZSBoZWxwIGZvciBhZHZhbmNlIGJhciBjb21iaW5hdGlvbnMgYW5kIHdoaXogd2hlZWxzLgorICAgRXVyb0JyYWlsbGUgYnJhaWxsZSBkcml2ZXIgY2hhbmdlczoKKyAgICAgIENvcnJlY3RlZCBzZXZlcmFsIGJ1Z3MgaW4gd3JpdGUvcmVhZCBvcGVyYXRpb25zLgorICAgICAgQ29ycmVjdGVkIHNldmVyYWwga2V5IGJ1Z3Mgb24gSXJpcyBtb2RlbHMuCisgICBGcmVlZG9tU2NpZW50aWZpYyBicmFpbGxlIGRyaXZlciBjaGFuZ2VzOgorICAgICAgQWRkIHN1cHBvcnQgZm9yIHRoZSBGb2N1cyAyIHNlcmllcyAoNDAgYW5kIDgwKS4KKyAgICAgIEFkZCBzdXBwb3J0IGZvciB0aGUgUGFjTWF0ZSA4MC4KKyAgIFBhcGVubWVpZXIgYnJhaWxsZSBkcml2ZXIgY2hhbmdlczoKKyAgICAgIEFkZCBzdXBwb3J0IGZvciB0aGUgRUwrIDgwLgorICAgICAgQWRkIHN1cHBvcnQgZm9yIHRoZSBzZWNvbmQgcm93IG9mIHJvdXRpbmcga2V5cy4KKyAgICAgIEdpdmUgdGhlIGZvdXIgcHJvdG9jb2wgSUkgbW9kZWxzIHdlIHN1cHBvcnQgdGhlaXIgcHJvcGVyIG5hbWVzLgorICAgVmlzaW9CcmFpbGxlIGJyYWlsbGUgZHJpdmVyIGNoYW5nZXM6CisgICAgICBSZXR1cm4gTk9PUCByYXRoZXIgdGhhbiBFT0Ygd2hlbiBDVFJMIG9yIEFMVCBpcyBwcmVzc2VkLgorICAgICAgQmluZCBhIGtleSB0byBCUkxfQ01EX0xFQVJOLgorICAgICAgRG9uJ3QgbG9nIHRpbWVvdXRzIHdoZW4gdGhlIGRpc3BsYXkgaXNuJ3QgY29ubmVjdGVkLgorICAgTWlrcm9wdWhlIHNwZWVjaCBkcml2ZXIgY2hhbmdlczoKKyAgICAgIExvY2sgdGhlIG11dGV4IHdoaWxlIGNhbGxpbmcgcHRocmVhZF9jb25kX3NpZ25hbCgpLgorICAgICAgQ2hlY2sgZm9yIGFscmVhZHkgZW5xdWV1ZWQgc3BlZWNoIGJlZm9yZSB0aGUgZmlyc3Qgd2FpdC4KKyAgICAgIFRoZSBtdXRlIG1ldGhvZCBjYW4gaGFuZyBicmx0dHkuCisgICBBUEkgY2hhbmdlczoKKyAgICAgIFRoZSBmbGFncyBhbmQgcHJvdG9jb2wgdmVyc2lvbiBmaWVsZHMgd2VyZW4ndCBiZWluZyBtYWludGFpbmVkIGluIG5ldHdvcmsgYnl0ZSBvcmRlci4KKyAgICAgIGJybGFwaV93cml0ZUZpbGUoKSBhbmQgYnJsYXBpX3JlYWRGaWxlKCkgYXJlIG9ubHkgZm9yIHVzZSB3aXRoaW4gYXBpX2NvbW1vbi5jLgorICAgTGludXggc2NyZWVuIGRyaXZlciBjaGFuZ2VzOgorICAgICAgSWYgS0RfRk9OVF9PUF9HRVQgZmFpbHMgb3IgcmV0dXJucyBhIGNoYXJhY3RlciBjb3VudCBvZiAwCisgICAgICB0aGVuIGNhbGN1bGF0ZSB0aGUgVkdBIGNoYXJhY3RlciBjb3VudCBmcm9tIHRoZSBzY3JlZW4gZm9udCBtYXAuCisgICAgICBPbmx5IHJlZXZhbHVhdGUgdGhlIFZHQSBjaGFyYWN0ZXIgY291bnQgd2hlbiBuZWNlc3NhcnkuCisgICBRdWV1ZSBmYWNpbGl0eSBjaGFuZ2VzOgorICAgICAgRG9uJ3QgZGVhbGxvY2F0ZSBkaXNjYXJkZWQgZWxlbWVudHMgd2hlbiBhIHF1ZXVlIGlzIGJlaW5nIGRlYWxsb2NhdGVkLgorICAgICAgSW5pdGlhbGl6ZSBxdWV1ZSBkYXRhIHRvIE5VTEwuCisgICAgICBEZWFsbG9jYXRlIGFuIGl0ZW0gYmVvcmUgZGlzY2FyZGluZyBpdHMgZWxlbWVudC4KKworRGVjZW1iZXIgMjIsIDIwMDQ6CisgLSBCUkxUVFkgMy42LjEgcmVsZWFzZWQ6CisgICBSZW1vdmUgdGhlICVwcmUgYW5kICVwb3N0IHNlY3Rpb25zIGZyb20gdGhlIHJwbSBmb3IgdGhlIHRpbWUgYmVpbmcuCisgICBSZW1vdmUgdXNlIG9mIFBBVEhfTUFYICh0aGUgSFVSRCBkb2Vzbid0IGhhdmUgaXQpLgorICAgZ2V0V29ya2luZ0RpcmVjdG9yeSgpIGNhbiBnb2JibGUgbWVtb3J5IG9uIGZhaWx1cmVzLgorICAgSWYgYXV0b2dlbi5zaCAgaXMgZ2l2ZW4gYXJndW1lbnRzIHRoZW4gcnVuIGNvbmZpZ3VyZSB3aXRoIHRoZW0uCisgICBBZGQgdGhlIC1EIFtkYXRhLWRpcmVjdG9yeT1dIG9wdGlvbiB0byB0Ymx0ZXN0IGFuZCBjdGJ0ZXN0LgorICAgdGJsdGVzdCBzaG91bGQgcmVwb3J0IHVudXNlZCBkb3QgY29tYmluYXRpb25zLgorICAgVXBkYXRlcyB0byB0aGUgZnItaXNvMDEgdGV4dCB0cmFuc2xhdGlvbiB0YWJsZS4KKyAgIEZyZWVkb20gU2NpZW50aWZpYyBkcml2ZXIgY2hhbmdlczoKKyAgICAgIEFzc3VtZSB0aGF0IHRoZSBzZXJpYWwgY2FibGUgaXMgZGlzY29ubmVjdGVkIGlmIG5vIEFDSyBhZnRlciAyLjUgc2Vjb25kcy4KKyAgIFRTSSBkcml2ZXIgY2hhbmdlczoKKyAgICAgIEZpeCBtZW1vcnkgY29ycnVwdGlvbiBpZiB0aGUgZGlzcGxheSBpcyBvZmYgb3IgZGlzY29ubmVjdGVkIGZvciBhbiBleHRlbmRlZCBwZXJpb2Qgb2YgdGltZS4KKyAgIEFQSSBjaGFuZ2VzOgorICAgICAgSW4gb25lIHBsYWNlIHNlbGVjdCgpIGlzIGNhbGxlZCB3aXRoIHRoZSB3cm9uZyBtYXNrIHNpemUuCisgICAgICBEaXNwbGF5IHRoZSBwYWNrZXQgY29ycmVjdGx5IGluIHRoZSBkZWZhdWx0IGVycm9yIGhhbmRsZXIuCisgICAgICBMb2cgdGhlIHJlYXNvbiB0aGF0IHRoZSBhdXRoZW50aWNhdGlvbiBrZXkgY2FuJ3QgYmUgbG9hZGVkLgorICAgICAgQ2hlY2sgdGhhdCB0aGUgd3JpdGVWaXN1YWwoKSBoYW5kbGVyIGV4aXN0cyBiZWZvcmUgY2FsbGluZyBpdC4KKyAgICAgIFJlbmFtZSBtdXRleCB2YXJpYWJsZXMgdG8gc3VpdCBjb3JlIGNvbnZlbnRpb25zLgorICAgICAgSW50cm9kdWNlIG5ldyBlcnJvciBjb2RlIEJSTEVSUl9EUklWRVJFUlJPUiBmb3IgYnJhaWxsZSBkcml2ZXIgcHJvYmxlbXMuCisgICBhcGl0ZXN0IGNoYW5nZXM6CisgICAgICBSZXBvcnQga2V5IHJlYWQgZXJyb3JzLgorICAgICAgUmVwb3J0IHRoZSBmaWxlIGRlc2NyaXB0b3Igb2YgdGhlIGNvbm5lY3Rpb24uCisgICByaG1raXNvIGNoYW5nZXM6CisgICAgICBBdXRvbWF0aWNhbGx5IGluY3JlYXNlIHRoZSBzaXplIG9mIHRoZSBpbml0cmQgYXMgbmVlZGVkLgorICAgICAgUmVtb3ZlIG5lZWRsZXNzIG1hbmlwdWxhdGlvbnMgb2Ygc2V0IC1lLgorICAgICAgT2xkIHZlcnNpb25zIG9mIHRhciBkb24ndCBwcmVzZXJ2ZSBiaW4gYXMgYSBzeW1ib2xpYyBsaW5rLgorICAgQ3Vyc2VzIHBhY2thZ2Ugc3VwcG9ydCBjaGFuZ2VzOgorICAgICAgVXNlIG5jdXJzZXN3IGlmIGF2YWlsYWJsZS4KKyAgICAgIEVuc3VyZSB0aGF0IHRoZSBjdXJzZXMgcnVuLXRpbWUgbGlicmFyeSBjYW4gYmUgZm91bmQuCisgICAgICBPbmx5IHVzZSBwbGFpbiBvbGQgY3Vyc2VzIGFzIGEgbGFzdCByZXNvcnQuCisgICBPcGVuQlNEIG9wZXJhdGluZyBzeXN0ZW0gc3VwcG9ydCBjaGFuZ2VzOgorICAgICAgQWxsIHNwZWNpYWwgc2VyaWFsIGNvbnRyb2wgY2hhcmFjdGVycyBtdXN0IGJlIHByb3Blcmx5IGRpc2FibGVkLgorICAgICAgaG9zdF9zeXMubyBkb2Vzbid0IG1ha2UuCisKK09jdG9iZXIgMTEsIDIwMDQ6CisgLSBCUkxUVFkgMy42IHJlbGVhc2VkOgorICAgQWRkIHN1cHBvcnQgZm9yIG9sZCBWaXNpb0JyYWlsbGUgaW5wdXQgZmxvdyBjb250cm9sIChQUk9NIHZlcnNpb24gPCA0KS4KKyAgIEFkZCByYXRlIHNldHRpbmcgdG8gdGhlIEV4dGVybmFsU3BlZWNoIGRyaXZlci4KKyAgIFJlbW92ZSB0eXBlLXB1bm5pbmcgd2FybmluZ3MgZnJvbSB0aGUgTWlrcm9wdWhlIGRyaXZlci4KKyAgIEFkZCBzdXBwb3J0IGZvciBtdWx0aS1ieXRlIGNoYXJhY3RlciBzZXRzIHRvIHRoZSBUVFkgZHJpdmVyLgorICAgUmVtb3ZlIHRoZSBuZWVkIGZvciAtdCBpZGVudGl0eSBmcm9tIHRoZSBUVFkgYW5kIFhXaW5kb3cgZHJpdmVycy4KKyAgIENvcnJlY3RseSBkZXRlcm1pbmUgdGhlIG9wdGlvbmFsaXR5IG9mIHRoZSBjb25maWd1cmF0aW9uIGZpbGUuCisgICBBbHdheXMgY2hhbmdlIHRoZSBtZW51IHNldHRpbmcgZXZlbiBpZiBhIHJvdXRpbmcga2V5IGRvZXNuJ3QgZXZhbHVhdGUgdG8gYSBuZXcgb25lLgorICAgUENNIEFMU0EgZml4ZXMuCisgICBBZGQgeGJybGFwaSAobm90IGluc3RhbGxlZCB5ZXQpLgorICAgVXBkYXRlIG91ciBjb3B5IG9mIEdub3Blcm5pY3VzJ3MgdHR5YnJsLmMuCisgICBBbHZhIHdvcmthcm91bmQgZm9yIGJ1ZyBleGhpYml0ZWQgYnkgYXQgbGVhc3Qgb25lIEFCVDM0MDoKKyAgICAgIEEgYm9ndXMgcm91dGluZyBrZXkgcHJlc3MgZXZlbnQgaXMgZ2VuZXJhdGVkIGZvciByb3V0aW5nIGtleXMgMjUtMjkKKyAgICAgIHdoZW4gYXQgbGVhc3QgdHdvIGZyb250IGtleXMgYXJlIGFscmVhZHkgcHJlc3NlZC4KKyAgIFBhcGVubWVpZXIgZHJpdmVyIHVwZGF0ZXM6CisgICAgICBUaGUgInF1ZXJ5IHN3aXRjaGVzIiBjb21tYW5kIHNob3VsZCBzaG93ICJib3RoIiByYXRoZXIgdGhhbiAiPyIuCisgICAgICBBZGQgYmluZGluZ3MgZm9yIGJhciBtb3Rpb24gd2l0aCB0aGUgcmlnaHQgZnJvbnQga2V5IHByZXNzZWQuCisgICAgICBSZXN5bmNocm9uaXplIHRoZSBzd2l0Y2hlcyBhbmQga2V5cyB3aGVuZXZlciB0aGUgYmFyIGlzIG1vdmVkLgorICAgQVBJIHVwZGF0ZXM6CisgICAgICBBZGQgcHJvcGVyIHN1cHBvcnQgZm9yIGJybF93cml0ZVZpc3VhbCgpLgorICAgICAgQ29ycmVjdCBhIGJ1ZyB3aGljaCBvY2N1cnMgd2hlbiB0aGUgZGlzcGxheSBpcyBvbmx5IHBhcnRpYWxseSB1cGRhdGVkLgorICAgICAgQWRkIGEgbWlzc2luZyBicmxhcGlfbGliY2Vycm5vIGFzc2lnbm1lbnQgdG8gdGhlIGNsaWVudCBjb2RlLgorICAgICAgQWRkIHN1cHBvcnQgZm9yIFVuaXggZG9tYWluIHNvY2tldHMuCisgICBCdWlsZCB1cGRhdGVzOgorICAgICAgTWFrZSBjbGVhbiBzaG91bGRuJ3QgcmVtb3ZlIHRoZSB0ZXh0IGNvcHkgb2YgdGhlIEJyYWlsbGVMaXRlIGhlbHAgZmlsZXMuCisgICAgICBUaGUgdGV4dCBjb3B5IG9mIHRoZSBWb3lhZ2VyIGhlbHAgZmlsZXMgc2hvdWxkIGJlIGNyZWF0ZWQgaW4gdGhlIHNvdXJjZSB0cmVlLgorICAgRG9jdW1lbnRhdGlvbiB1cGRhdGVzOgorICAgICAgQnJpbmcgdGhlIGRvY3VtZW50YXRpb24gdXAtdG8tZGF0ZS4KKyAgICAgIE1lcmdlIHRoZSBkb2N1bWVudGF0aW9uIG9mIHJlY2lwcm9jYWwgY29tbWFuZHMsIGUuZy4gTE5VUC9MTkROLgorICAgICAgRml4IGUtbWFpbCBhZGRyZXNzZXMgYW5kIHNvbWUgZXhhbXBsZXMgaW4gQnJsQVBJJ3MgbWFudWFsLgorICAgICAgUmVtb3ZlIG9sZCBzY3JlZW4gcGF0Y2hlcy4KKyAgIENvZGUgdXBkYXRlczoKKyAgICAgIE1vdmUgYSBmZXcgcm91dGluZXMgdG8gbW9yZSBsb2dpY2FsIHBsYWNlcy4KKyAgICAgIFNoYXJlIHRoZSBjb21tb24gY29kZSBmb3IgbW92aW5nIHVwL2Rvd24gdG8gYSBsaW5lIHdpdGggZGlmZmVyZW50IGNvbnRlbnQuCisgICAgICBSZWluZGVudCB0aGUgcmVzdCBvZiBjb25maWcuYyBhbmQgbWFpbi5jIGFjY29yZGluZyB0byBjb252ZW50aW9ucy4KKyAgICAgIFVzZSBvdXIgb3duIGRlbGF5IG1lY2hhbmlzbSByYXRoZXIgdGhhbiBzbGVlcCgpLgorICAgICAgUmVkbyBzcGxpdFN0cmluZygpIHRvIGFsbG93IGZvciB0aGUgZWFzeSBhZGRpbmcgb2Ygb3B0aW9ucy4KKyAgICAgIFNwbGl0IGNvbW1hbmQgbGluZSBvcHRpb24gcHJvY2Vzc2luZyBpbnRvIGEgc2VwYXJhdGUgcm91dGluZS4KKyAgIEZpeGVzIHRvIHRoZSBoYW5kbGluZyBvZiBjb3VudGVyIChleHRlbmRhYmxlIGZsYWcpIG9wdGlvbnM6CisgICAgICBXYXJuIGlmIHRoZSBzYW1lIG9wdGlvbiBpcyBzcGVjaWZpZWQgbW9yZSB0aGFuIG9uY2UgaW4gdGhlIGNvbmZpZ3VyYXRpb24gZmlsZS4KKyAgICAgIEFsbG93IGEgbm9uLW5lZ2F0aXZlIGludGVnZXIgZm9yIG5vbi1jb21tYW5kLWxpbmUgc3BlY2lmaWNhdGlvbnMuCisKK1NlcHRlbWJlciA0LCAyMDA0OgorIC0gQlJMVFRZIDMuNnByZTMgcmVsZWFzZWQ6CisgICBSZXN0YXJ0aW5nIGRyaXZlcnMgY2F1c2VkIHN0cmFuZ2UgY29ycnVwdGlvbnMuCisgICBFbGltaW5hdGUgc29tZSBjb21waWxlIHdhcm5pbmdzIHdoZW4gbWFueSBmZWF0dXJlcyBhcmUgZGlzYWJsZWQuCisgICBNYWtlIHRoZSBlbnRpcmUgb3B0aW9ucyBtZWNoYW5pc20gYmUgd2hvbGx5IHRhYmxlIGRyaXZlbi4KKyAgIFNwZWNpZnlpbmcgYW4gaW52YWxpZCBvcHRpb24geWllbGRzIGEgYm9ndXMgZXhjZXNzIHBhcmFtZXRlciBlcnJvci4KKyAgIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGUgbG9uZyBvcHRpb25zIHRvIHNldCBmbGFncyB0byAwLgorICAgQWJicmV2aWF0aW9uIHRlc3RzIHZpYSBzdHJuY2FzZWNtcCgpIGRvbid0IHJlcXVpcmUgYW4gZXh0cmEgbGVuZ3RoIGNoZWNrLgorICAgZmluZFNoYXJlZFN5bWJvbCgpIG5lZWRzIHRvIGFjY2VwdCB0aGUgYWRkcmVzcyBvZiBhbnkga2luZCBvZiBwb2ludGVyLgorICAgR28gYmFjayB0byBPU1MgYmVpbmcgdGhlIGRlZmF1bHQgb24gTGludXggZXZlbiBpZiBBTFNBIGlzIGF2YWlsYWJsZS4KKyAgIFJlbW92ZSB0aGUgbGluayBkZXBlbmRlbmN5IG9uIGxpYmFzb3VuZCBmcm9tIHRoZSBQQ00vTUlESSBBTFNBIGNvZGUuCisgICBGaXggYW4gQWx2YSBkcml2ZXIgYnVmZmVyIGluZGV4aW5nIG92ZXJmbG93LgorICAgUHJldmVudCB0aGUgQ2xpb05vdGVCcmFpbGxlIChFdXJvQnJhaWxsZSBkcml2ZXIpIGZyb20gcmVpZGVudGlmeWluZyBhZnRlciBlYWNoIGZyYW1lIGlzIHNlbnQuCisgICBBZGQgYSBIT1dUTyBmb3IgcmVhZGluZyBDaGluZXNlIGJpZzUuCisgICBNb3JlIE5lbWV0aCBDb2RlIGNoYW5nZXMgdG8gdGhlIGJpZzUgY29udHJhY3Rpb24gdGFibGUuCisgICBNb3ZlIHRoZSBwcmVmZXJlbmNlcyBmaWxlcyBmcm9tIHRoZSBkYXRhIGRpcmVjdG9yeSB0byB0aGUgY29uZmlndXJhdGlvbiBkaXJlY3RvcnkgdG8gcHJldmVudCBsb3NzLgorICAgSW1wbGljaXRseSBkaXNhYmxlIGF1dG9zcGVhayBkdXJpbmcgc3BlZWNoIHRyYWNraW5nLgorICAgUHJvdGVjdCBzZXJpYWwgcG9ydCBkcmFpbmluZyBmcm9tIHN5c3RlbSBjYWxsIGludGVycnVwdGlvbnMuCisgICBJbml0aWFsIGNoYW5nZXMgdG8gc3VwcG9ydCBRTlguCisKK0F1Z3VzdCAyMSwgMjAwNDoKKyAtIEJSTFRUWSAzLjZwcmUyIHJlbGVhc2VkOgorICAgRGVmYXVsdCBQQ00gYW5kL29yIE1JREkgc3VwcG9ydCBvbiBMaW51eCB0byBBTFNBIGlmIHRoYXQgc2VlbXMgdG8gbWFrZSBzZW5zZS4KKyAgIEFkZCB0aGUgLXAgWy0tcGNtLWRldmljZT1dIGFuZCB0aGUgLW0gWy0tbWlkaS1kZXZpY2U9XSBvcHRpb25zLgorICAgc3BsaXRTdHJpbmcoKSBjYW4gbm93IG9wdGlvbmFsbHkgcmV0dXJuIHRoZSBjb3VudC4KKyAgIE1vdmUgdGhlIHNlcmlhbCBwYXJpdHkvZmxvdyBjb25zdGFudHMgdG8gYSBjb21tb24gcGxhY2UgKGlvZGVmcy5oKS4KKyAgIE1vdmUgbG93LWxldmVsIEkvTyByb3V0aW5lcyBmcm9tIG1pc2MuW2NoXSB0byBpb21pc2MuW2NoXS4KKyAgIENvbnZlcnQgc2VyaWFsIGRldmljZXMgZnJvbSBmaWxlIGRlc2NyaXB0b3JzIChpbnRzKSB0byBhbiBvcGFxdWUgdHlwZS4KKyAgIGRyYWluQnJhaWxsZU91dHB1dCgpIHNob3VsZCBhbGxvdyBmb3IgdGhlIGRyaXZlciB0byBoYXZlIHJvdW5kZWQgZG93bi4KKyAgIFdhaXQgZm9yIGFsbCBvdXRwdXQgdG8gdGhlIGJyYWlsbGUgZGlzcGxheSB0byBiZSBkcmFpbmVkIGJlZm9yZSBjbG9zaW5nIHRoZSBkcml2ZXIuCisgICBSZXBsYWNlIHRoZSBEaXNwbGF5PSBhbmQgVGVybT0gcGFyYW1ldGVycyBvZiB0aGUgWFdpbmRvdyBkcml2ZXIgd2l0aCBYdFBhcm1zPS4KKyAgIEV1cm9CcmFpbGxlIGRyaXZlciBmaXggZm9yIGVudGVyaW5nL2xlYXZpbmcgUEMgbW9kZS4KKyAgIEhhbmR5VGVjaCBkcml2ZXIgY2hhbmdlczoKKyAgICAgIFNpbXBsaWZ5IHRoZSBibHVldG9vdGggcmVhZCByb3V0aW5lLgorICAgICAgQWRkIHRoZSBJbnB1dE1vZGU9IHBhcmFtZXRlci4KKyAgIEdlbmVyYWwgZHJpdmVyIGNoYW5nZXM6CisgICAgICBDbGVhbiB1cCBpbmNsdWRlIGxzaXRzLgorICAgICAgR2l2ZSBzdGFuZGFyZGl6ZWQgbmFtZXMgdG8gZXh0ZXJuYWwgc3ltYm9scy4KKyAgIEF1dG9kZXRlY3Rpb24gY2hhbmdlczoKKyAgICAgIENoYW5nZSB0aGUgc2hvcnQgZm9ybSBvZiB0aGUgLS12ZXJzaW9uIG9wdGlvbiB0byAtVi4KKyAgICAgIENoYW5nZSB0aGUgLXYgb3B0aW9uIHRvIC0tdmVyaWZ5LgorICAgICAgLWIgYW5kIC1zIGJvdGggYWNjZXB0IGEgY29tbWEtZGVsaW1pdGVkIGxpc3Qgb2YgZHJpdmVycy4KKyAgICAgIC1zIGFjY2VwdHMgImF1dG8iLgorICAgICAgT25seSBhdXRvZGV0ZWN0IGlmIG1vcmUgdGhhbiBvbmUgZHJpdmVyIG9yIGRldmljZSBpcyBzcGVjaWZpZWQuCisgICAgICBSZXN0YXJ0aW5nIGEgYnJhaWxsZS9zcGVlY2ggZHJpdmVyIHJlLWF1dG9kZXRlY3RzLgorICAgICAgRG9uJ3QgZW5hYmxlIGZsb3cgY29udHJvbCB1bnRpbCBhZnRlciBzdWNjZXNzZnVsbHkgZGV0ZWN0aW5nIHRoZSBkaXNwbGF5LgorICAgICAgSW1wcm92ZSB0aGUgb3JkZXIgb2YgdGhlIGxvZ3MuCisgICAgICBSZW1vdmUgdGhlICJkcml2ZXIgZ2l2aW5nIHVwIiB3YXJuaW5ncy4KKyAgIE1JREkgQUxTQSBjaGFuZ2VzOgorICAgICAgRW5zdXJlIHRoYXQgIk1pZGkiIG9jY3VycyBpbiBldmVyeSByb3V0aW5lIG5hbWUuCisgICAgICBTaW1wbGlmeSBkdXJhdGlvbiBzY2hlZHVsaW5nLgorICAgICAgU3VwcG9ydCBwYXVzZXMgYmV0d2VlbiBub3Rlcy4KKyAgIEFQSSBjaGFuZ2VzOgorICAgICAgTW92ZSB0aGUgbXVsdGlwbGUgc2V0dGluZ3Mgb2YgdGhlIHJvb3QgdHR5IGludG8gc2V0Q3VycmVudFJvb3RUdHkoKS4KKyAgICAgIEZpeCBwcm9ibGVtcyB3aGljaCBvY2N1ciB3aGVuIHRoZSBudWxsIHNjcmVlbiBkcml2ZXIgaXMgYmVpbmcgdXNlZC4KKworQXVndXN0IDEyLCAyMDA0OgorIC0gQlJMVFRZIDMuNnByZTEgcmVsZWFzZWQ6CisgICBDbGFyaWZ5IHRoZSBjb3B5cmlnaHQgc3RhdGVtZW50IGluIHRoZSB0b3AtbGV2ZWwgUkVBRE1FLgorICAgUmVvcmdhbml6ZSB0aGUgc3RhcnR1cCBsb2dzLgorICAgQWRkIHN1cHBvcnQgZm9yIGJyYWlsbGUgZGlzcGxheSBhdXRvZGV0ZWN0aW9uICgtYiBhdXRvKS4KKyAgIEFsbG93IG1vcmUgdGhhbiBvbmUgYnJhaWxsZSBkZXZpY2UgdG8gYmUgc3BlY2lmaWVkLgorICAgQWNjZXNzIHRoZSBkcml2ZXIgZGlyZWN0bHkgaWYgdGhlIEFQSSBmYWlscyB0byBzdGFydC4KKyAgIENvbnZlcnQgUENNIGFuZCBNSURJIGRldmljZXMgZnJvbSBmaWxlIGRlc2NyaXB0b3JzIGludG8gb3BhcXVlIHR5cGVzLgorICAgQWRkIEFMU2Egc3VwcG9ydCBmb3IgUENNIGFuZCBNSURJIGRldmljZXMuCisgICBJbnRyb2R1Y2UgY29tbW9uIHNlcmlhbCBkZXZpY2UgYWNjZXNzIHJvdXRpbmVzLgorICAgQSB2YV9saXN0IChzdGRhcmcpIG11c3QgYmUgcmVzZXQgYmVmb3JlIGJlaW5nIHJldXNlZCBvbiBzb21lIHBsYXRmb3Jtcy4KKyAgIFVzZSB0aGUgdHlwZSBTY3JlZW5LZXkgcmF0aGVyIHRoYW4gdW5zaWduZWQgc2hvcnQgZm9yIHNjcmVlbiBrZXkgaW5zZXJ0aW9uLgorICAgRml4IHRoZSBoYW5kbGluZyBvZiBjb250cm9sIGNoYXJhY3RlcnMgd2hlbiB1c2luZyBzY2FuIGNvZGVzLgorICAgTW92ZSB0aGUgaGFuZGxpbmcgb2YgbWV0YSBjaGFyYWN0ZXIgaW5wdXQgZW50aXJlbHkgaW50byB0aGUgc2NyZWVuIGRyaXZlci4KKyAgIEltcGxlbWVudCBMaW51eC1zcGVjaWZpYyBBVDIgc3VwcG9ydC4KKyAgIEZhaWx1cmUgdG8gbG9hZCB0aGUgc3BlY2lmaWVkIHRleHQgdGFibGUgcmVzdWx0cyBpbiBhbiB1bmluaXRpYWxpemVkIHJldmVyc2UgdGV4dCB0YWJsZS4KKyAgIEFkZCBhbiBpbml0aWFsIHRpbWVvdXQgcGFyYW1ldGVyIHRvIHJlYWRDaHVuaygpLgorICAgSW1wbGVtZW50IGNoYW5nZU9wZW5GbGFncygpLCBzZXRPcGVuRmxhZ3MoKSwgYW5kIHNldEJsb2NraW5nSW8oKS4KKyAgIENvbnZlcnQgbGVhcm4gbW9kZSB0byB1c2UgYSBiZXR0ZXIgdGltZW91dCBtZWNoYW5pc20uCisgICBTcGxpdCBkZXNjcmliZUNvbW1hbmQoKSBvdXQgb2YgbGVhcm5Nb2RlKCkuCisgICBUaGUgdmVydGljYWwgd2luZG93IHNoaWZ0IHNob3VsZCBiZSB0aGUgbnVtYmVyIG9mIGxpbmVzIG9uIHRoZSBkaXNwbGF5IGlmIGdyZWF0ZXIgdGhhbiAxLgorICAgQWRkIHRoZSBUVFkgYnJhaWxsZSBkcml2ZXIuCisgICBBZGQgdGhlIFhXaW5kb3cgYnJhaWxsZSBkcml2ZXIuCisgICBBZGQgQVNDSUkgY2hhcmFjdGVycyAwWDYwLDBYN0ItMFg3RiB0byB0ZXh0LmJyZi50YmwuCisgICBTdXBwb3J0IFxzIChzcGFjZSkgZm9yIHRyYW5zbGF0aW9uIHRhYmxlcy4KKyAgIFVwZGF0ZSB0aGUgU3BhbmlzaCB0ZXh0IHRhYmxlIHRvIHRoZSBPLk4uQy5FLiBzdGFuZGFyZC4KKyAgIFVwZGF0ZWQgYmlnNSBjb250cmFjdGlvbiB0YWJsZS4KKyAgIFN1cHBvcnQgRnJlZUJTRCBpbnN0YWxsYXRpb25zIHdoaWNoIGRvbid0IGhhdmUgc3BlYWtlciBzdXBwb3J0LgorICAgQWRkIHN1cHBvcnQgZm9yIE5ldEJTRC4KKyAgIFN1cHBvcnQgY29tcGlsYXRpb24gb24gT1NGLgorICAgQWRkIGNvbXBpbGUtdGltZSB3YXJuaW5ncyBmb3IgZmVhdHVyZXMgd2hpY2ggYXJlbid0IGF2YWlsYWJsZS4KKyAgIFNhdmUgb3VyIGxhdGVzdCBjb3B5IG9mIEdub3Blcm5pY3VzJ3MgYnJsdHR5IGRyaXZlciAodHR5YnJsLmMpLgorICAgQVBJIGNoYW5nZXM6CisgICAgICBVcGRhdGUgdmVyc2lvbiB0byAwLjMuMC4KKyAgICAgIEluY3JlbWVudCBwcm90b2NvbCBudW1iZXIuCisgICAgICBDaGFuZ2UgdGhlIGxpY2Vuc2UgZm9yIGFsbCBjbGllbnQtc2lkZSBmaWxlcyB0byB0aGUgTEdQTC4KKyAgICAgIFByZWZpeCBkZWZpbml0aW9ucyBpbiBicmxkZWZzLmggd2l0aCBCUkxfLgorICAgICAgUmVtb3ZlIGZyb20gYnJsZGVmcy5oIHdoYXQgc2hvdWxkbid0IGJlIGluIHRoZXJlLgorICAgICAgU3BsaXQgcHJvdG9jb2wtc3BlY2lmaWMgZGVmaW5pdGlvbnMgZnJvbSBhcGkuaCBvdXQgaW50byBhcGlfcHJvdG9jb2wuaC4KKyAgICAgIEFkZGVkIHR3byBwYWNrZXQgdHlwZXMgZm9yICh1bilpZ25vcmluZyBrZXkgc2V0cy4KKyAgICAgIFJlbmFtZWQgYnJsYXBpXyh1bilpZ25vcmVLZXlzIHRvIGJybGFwaV8odW4paWdub3JlS2V5UmFuZ2UuCisgICAgICBBZGRlZCB0aGUgYnJsYXBpXyh1bilpZm5vcmVLZXlTZXQgZnVuY3Rpb25zLgorICAgICAgRm9yICh1bilpZ25vcmUsIG9ubHkgY29uc2lkZXIgdGhlIGJsayBhbmQgYXJnIGZpZWxkcyBvZiBhIGNvbW1hbmQuCisgICAgICBQcm90b2NvbCBlbmhhbmNlbWVudHMgKHNvbWUgcGFja2V0cyByZW1vdmVkLCBjZXJ0YWluIG9wZXJhdGlvbnMgZmFzdGVyKS4KKyAgICAgIEVycm9yIG1hbmFnZW1lbnQgaXMgbm93IHBhcnRseSBhc3luY2hyb25vdXMuCisgICAgICBTZXJ2ZXIgcGFydGlhbGx5IHJld3JpdHRlbiB0byB1c2Ugc2VsZWN0KCkgc3lzdGVtIGNhbGwuCisgICAgICBOb3cgb25seSB0d28gdGhyZWFkczogb25lIGZvciBicmx0dHksIG9uZSBmb3IgaW5jb21pbmcgY29ubmVjdGlvbnMuCisgICAgICBEZWZhdWx0IGNsaWVudCBlcnJvciBoYW5kbGVyIHdpdGggY2FwYWJpbGl0eSB0byBkZWZpbmUgYW5vdGhlciBvbmUuCisgICAgICBTb21lIGZ1bmN0aW9ucyByZW5hbWVkLgorICAgICAgYXBpdGVzdCBhZGRlZC4KKyAgICAgIERvbid0IGxvb2sgYXQgJFdJTkRPVyB0byBkZXRlcm1pbmUgdGhlIHR0eSAoeWV0KS4KKyAgICAgIEFkZCBzdXBwb3J0IGZvciBkcml2ZXJzIHdpdGggYnJsX3dyaXRlVmlzdWFsKCkuCisgICAgICBJbXBsZW1lbnQgcmVjdXJzaXZlIHdpbmRvd3MuCisgICAgICBEZXByZWNhdGUgYnJsYXBpX3JlYWRDb21tYW5kKCkgYW5kIHJlcGxhY2UgaXQgd2l0aCBicmxhcGlfcmVhZEtleSgpLgorICAgICAgUmVwbGFjZSB1c2VzIG9mIHVpbnQzMl90IHdpdGggdW5zaWduZWQgaW50IHdoZXJlIHBvc3NpYmxlLgorICAgICAgUmVuYW1lIEJSTEFQSV9FWFRXUklURVNUUlVDVF9JTklUSUFMSVpFUiB0byBCUkxBUElfV1JJVEVTVFJVQ1RfSU5JVElBTElaRVIuCisgICBVU0IgZml4ZXM6CisgICAgICBBbGxvdyB1c2JCZWdpbklucHV0KCkgdG8gYmUgY2FsbGVkIG1vcmUgdGhhbiBvbmNlIG9uIHRoZSBzYW1lIGVuZHBvaW50LgorICAgICAgU2V0IHRoZSBjb25maWd1cmF0aW9uIGJlZm9yZSBjbGFpbWluZyB0aGUgaW50ZXJmYWNlLgorICAgICAgQ29uZmlndXJhdGlvbiBkZXNjcmlwdG9ycyBtdXN0IGJlIHJlYWQgYnkgbnVtYmVyIHJhdGhlciB0aGFuIGJ5IHZhbHVlLgorICAgICAgdXNiQ2FuY2VsUmVxdWVzdCgpIHNob3VsZG4ndCBkZWFsbG9jYXRlIGEgY29tcGxldGVkIHJlcXVlc3QuCisgICAgICBCU0Qgc3lzdGVtcyBvbmx5IGFsbG93IHNob3J0IHRyYW5zZmVyIHRvIGJlIHNldCBmb3IgaW5wdXQgZW5kcG9pbnRzLgorICAgICAgT3BlbkJTRCBlbmRwb2ludCByZWFkIHRpbWVvdXRzIHNob3VsZCBiZSBzaWxlbnQgYW5kIG5vbi1mYXRhbC4KKyAgIEhhbmR5VGVjaCBkcml2ZXIgY2hhbmdlczoKKyAgICAgIFJlbW92ZSB0aGUgbm8gbG9uZ2VyIG5lZWRlZCAocmVhZHx3cml0ZSlCeXRlcygpIHJvdXRpbmVzLgorICAgICAgVHVybiBicmxfKHJlYWR8d3JpdGUpUGFja2V0KCkgaW50byBzdGFuZGFsb25lIHJvdXRpbmVzIGZvciBsYXRlciBlbmhhbmNlbWVudC4KKyAgICAgIEFkZCBibHVldG9vdGggc3VwcG9ydC4KKyAgICAgIEFkZCBzdXBwb3J0IGZvciBrZXlib2FyZCBpbnB1dC4KKyAgIFBhcGVubWVpZXIgZHJpdmVyIGNoYW5nZXM6CisgICAgICBDaGFuZ2Ugc29tZSBCcmFpbGxlWCAyRCBTY3JlZW4ga2V5IGJpbmRpbmdzLgorICAgICAgSW1wbGVtZW50IHNpbXVsYXRlZCBFTCBzd2l0Y2hlcyBmb3IgdGhvc2UgbW9kZWxzIHdoaWNoIGRvbid0IGhhdmUgdGhlbS4KKyAgICAgIFNpbXBsaWZ5IHRoZSBFTCBjb21tYW5kIGdlbmVyYXRpb24gbWFjcm9zLgorICAgICAgUmVkdWNlIHRoZSB2b2x1bWUgb2Ygb3V0cHV0IGxvZ2dpbmcuCisgICAgICBMb2cgdGhlIGJhdWQgYXQgd2hpY2ggdGhlIGRyaXZlciBpcyBwcm9iaW5nLgorICAgICAgTWFrZSBwcm90b2NvbCBJIGlucHV0IHBhY2tldCBsb2dnaW5nIG1vcmUgc3RhbmRhcmQuCisgICAgICBGaXggdGhlIGNvdW50IGZvciBjb3B5aW5nIGdlbmVyaWMgc3RhdHVzIGNlbGwgZGF0YSBmcm9tIHRoZSBjb3JlLXN1cHBsaWVkIGJ1ZmZlci4KKyAgICAgIFJlbW92ZSB1bnVzZWQgZGVmaW5pdGlvbnMgZnJvbSB0aGUgaGVhZGVyLgorICAgICAgTW92ZSBwcm90b2NvbCBJIGRlZmluaXRpb25zIGZyb20gdGhlIGhlYWRlciBpbnRvIHRoZSBwcm90b2NvbCBJIHNlY3Rpb24gb2YgdGhlIGltcGxlbWVudGF0aW9uLgorICAgICAgQ29tcGxldGUgdGhlIGltcGxlbWVudGF0aW9uIG9mIHByb3RvY29sIElJLgorICAgICAgU3VwcG9ydCB0aGUgRUwgNDAvNjYvODAgU2xpbWxpbmUgbW9kZWxzLgorICAgICAgUmVtb3ZlIG91dC1vZi1kYXRlIGRlYnVnZ2luZyB1dGlsaXRpZXMuCisgICBUU0kgZHJpdmVyIGNoYW5nZXM6CisgICAgICBSZW1vdmUgQ1RTIGNoZWNraW5nLgorICAgICAgUmVtb3ZlIHRoZSB3YWl0LWZvci1jb25uZWN0IGxvb3AuCisgICBWaXNpb0JyYWlsbGUgZHJpdmVyIGNoYW5nZXM6CisgICAgICBQcmVmaXggcHVibGljIGNvbnN0YW50cyB3aXRoIEJSTF9WUy4KKyAgICAgIFJlaW5kZW50IHRoZSBzb3VyY2UgdG8gY29yZSBjb252ZW50aW9ucy4KKyAgICAgIERvbid0IHJlbWVtYmVyIGRpc3BsYXkgY29udGVudCB1bnRpbCBzdWNjZXNzZnVsbHkgd3JpdHRlbi4KKyAgIFZveWFnZXIgZHJpdmVyIGNoYW5nZXM6CisgICAgICBGaXggYW4gdXBwZXIgYm91bmQgZXJyb3IgaW4gYnJsX3dyaXRlV2luZG93KCkuCisgICAgICBSZW1vdmUgdGhlIHdyaXRlIHJldHJ5IGxvb3BzLgorICAgICAgU2ltcGxpZnkgdGhlIGNvbnRyb2wgcmVxdWVzdCByZXRyeSBhbGdvcml0aG0uCisgICAgICBBY3Qgb24gZmlyc3Qga2V5IHJlbGVhc2UgcmF0aGVyIHRoYW4gYWZ0ZXIgYWxsIGtleXMgYXJlIHJlbGVhc2VkLgorICAgICAgQWRkIHN1cHBvcnQgZm9yIHRoZSBwYXJ0MjMyIHNlcmlhbCBpbnRlcmZhY2UuCisgICAgICBSZW1vdmUga25vd2xlZGdlIG9mIFVTQiBzdHJpbmcgZW5jb2RpbmcuCisgICAgICBSZW5hbWUgdGhlIEJybElucHV0PSBwYXJhbWV0ZXIgdG8gSW5wdXRNb2RlPS4KKyAgICAgIENoYW5nZSB0aGUgZGVmYXVsdCBmb3IgSW5wdXRNb2RlPSB0byBuby4KKyAgICAgIENoYW5nZSBJbnB1dE1vZGU9bm8gdG8gbWVhbiBkb24ndCByZXF1aXJlIGNob3JkaW5nLgorICAgICAgQWRkIHRoZSBTdGF0dXNDZWxscz0gcGFyYW1ldGVyLgorICAgICAgU2ltcGxpZnkgdGhlIGhlbHAgZ2VuZXJhdGlvbiBtYWNyb3MuCisgICAgICBSZW9yZ2FuaXplIHRoZSBoZWxwIHRlbXBsYXRlLgorICAgQnVpbGQgY2hhbmdlczoKKyAgICAgIFJlbmFtZSAtLWRpc2FibGUtdXNiIHRvIC0tZGlzYWJsZS11c2Itc3VwcG9ydC4KKyAgICAgIEFkZCAtLWRpc2FibGUtYmx1ZXRvb3RoLXN1cHBvcnQuCisgICAgICBSZW5hbWUgLS1kaXNhYmxlLS4uLi10dW5lcyB0byAtLWRpc2FibGUtLi4uLXN1cHBvcnQuCisgICAgICBBZGQgLS13aXRoLWN1cnNlcz0uCisgICAgICBBZGQgLS13aXRoLXh0LXRvb2xraXQ9LgorICAgICAgUmVvcmRlciB0aGUgYXJndW1lbnRzIHRvIEJSTFRUWV9BUkdfRU5BQkxFL0RJU0FCTEUuCisgICAgICBEZXRlY3QgaWYgTGludXgtc3BlY2lmaWMgQVQyIHN1cHBvcnQgY2FuIGJlIHVzZWQuCisgICAgICBDaGVjayBmb3IgaWNvbnYuaC4KKyAgICAgIENoZWNrIGZvciA8c3lzL3NlbGVjdC5oPi4KKyAgICAgIERldGVjdCBpZiBfX2F0dHJpYnV0ZV9fKChmb3JtYXQocHJpbnRmKSkpIGlzIHN1cHBvcnRlZC4KKyAgICAgIERldGVjdCBpZiBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSBpcyBzdXBwb3J0ZWQuCisgICAgICBEZXRlY3QgaWYgX19hdHRyaWJ1dGVfXygodW51c2VkKSkgaXMgc3VwcG9ydGVkLgorICAgICAgRGV0ZWN0IGlmIHRoZSBfX2FsaWdub2ZfXyBvcGVyYXRvciBpcyBzdXBwb3J0ZWQuCisgICAgICBBYm9ydCB0aGUgY29uZmlndXJlIGlmIGxkIGZsYWdzIGFyZW4ndCBrbm93bi4KKyAgICAgIENvbXBsZXRlbHkgcmV3cml0ZSBpbnN0YWxsLXNoIHRvIHN1cHBvcnQgbW9yZSB0aGFuIG9uZSBzb3VyY2Ugb3BlcmFuZC4KKyAgICAgIEhhcmQtY29kZSAiYXIiIGluIHRoZSBtYWtlIGZpbGUgc2luY2UgSFAtVVggZG9lc24ndCBzZXQgIiQoQVIpIi4KKyAgICAgIFRoZSBGZXN0aXZhbExpdGUgZHJpdmVyIG5lZWRzIC1sbS4KKyAgICAgIERvbid0IGJ1aWxkIHRoZSBBUEkgb3IgdGhlIE1pa3JvcHVoZSBkcml2ZXIgaWYgcHRocmVhZHMgaXNuJ3QgYXZhaWxhYmxlLgorCitKdW5lIDEyLCAyMDA0OgorIC0gQlJMVFRZIDMuNSByZWxlYXNlZDoKKyAgIERvbid0IGluY2x1ZGUgdGhlIE1pa3JvcHVoZSBzcGVlY2ggZHJpdmVyIGluIHRoZSBSUE0uIChkbSkKKyAgIEZpeCB1cCB0aGUgbGlzdHMgb2Ygc3VwcG9ydGVkIFBhcGVubWVpZXIgbW9kZWxzLiAoZG0pCisgICBVcGRhdGUgYnJsdHR5J3MgTFNNIChMaW51eCBTb2Z0d2FyZSBNYXApIGZvciAzLjUuIChkbSkKKyAgIERvY3VtZW50YXRpb24gdXBkYXRlczogKGRtKQorICAgICAgTW92ZSB0aGUgbGFzdCBzZWN0aW9uICgiRXBpbG9ndWUiKSB0byB0aGUgYmVnaW5uaW5nIChhcyAiRm9ybWFsaXRpZXMiKS4KKyAgICAgIExldHRlciAocmF0aGVyIHRoYW4gbnVtYmVyKSB0aGUgYXBwZW5kaWNlcy4KKyAgICAgIENvbnZlcnQgc29tZSBkZXNjcmlwdGl2ZSBsaXN0cyBpbnRvIHRhYmxlcy4KKyAgICAgIEFkZCBzb21lIG1vcmUgYWxlcnQgdHVuZSBldmVudHMuCisgICAgICBEZXNjcmliZSB0aGUgQnJhaWxsZSBGaXJtbmVzcyBmZWF0dXJlLgorICAgICAgUmVtb3ZlIHRoZSBtZW50aW9uIG9mIFVTQiBmcm9tIHRoZSBWb3lhZ2VyIGRyaXZlci4KKyAgICAgIFJvdXRpbmcga2V5cyBub3cgZnVuY3Rpb24gYXMgYSBzY3JvbGwgYmFyIGZvciBudW1lcmljIHByZWZlcmVuY2VzLgorICAgRG9jdW1lbnQgdGhlIHNwZWVjaCBGSUZPOiAoZG0pCisgICAgICAtRiAoLS1zcGVlY2gtZmlmbz0pIGNvbW1hbmQgbGluZSBvcHRpb24KKyAgICAgIHNwZWVjaC1maWZvIGNvbmZpZ3VyYXRpb24gZmlsZSBkaXJlY3RpdmUKKyAgICAgIEJSTFRUWV9TUEVFQ0hfRklGTyBlbnZpcm9ubWVudCB2YXJpYWJsZQorICAgRG9jdW1lbnQgdGhlIGZhY3QgdGhhdCBpZGVudGlmaWNhdGlvbiBieSBVU0Igc2VyaWFsIG51bWJlciBtYXkgbm90IHdvcmsuIChkbSkKKyAgIFJlc3RvcmUgdGhlIGRlZmF1bHQgc3RhdHVzIGNlbGwgc3R5bGUgZm9yIHRoZSBIYW5keVRlY2ggZHJpdmVyIHRvICJBbHZhIi4gKGRtKQorICAgQnJpbmcgdGhlIGNoYW5nZSBsb2cgdXAtdG8tZGF0ZSAoMy40LjEgdG8gMy41KS4gKGRtKQorICAgT25seSByZWZlciB0byBsaWJwdGhyZWFkIGlmIG5lY2Vzc2FyeS4gKGRtKQorCitKdW5lIDgsIDIwMDQ6CisgLSBCUkxUVFkgMy41cHJlNCByZWxlYXNlZDoKKyAgIEluY3JlYXNlIHRoZSBWb3lhZ2VyIGRyaXZlcidzIFNUQUxMX1RSSUVTIHNldHRpbmcgZnJvbSAzIHRvIDcuIChzZCkKKyAgIFNwbGl0IHVzYkNvbnRyb2xUcmFuc2ZlcigpIGludG8gdXNiQ29udHJvbFJlYWQoKSBhbmQgdXNiQ29udHJvbFdyaXRlKCkuIChkbSkKKyAgIEFkZCByZXRyeSBsb2dpYyB0byB0aGUgVm95YWdlciBkcml2ZXIncyBjYWxsIHRvIHVzYkJlZ2luSW5wdXQoKS4gKGRtKQorICAgVGhlIFVTQiBzZXJpYWwgYWRhcHRlciBoYW5kbGVycyBzaG91bGQgcmV0dXJuIGEgYm9vbGVhbiBzdWNjZXNzIHZhbHVlLiAobWwsZG0pCisgICBnY2MgMy4zIHJlcG9ydHMgIi1sZ2NjX3Mgbm90IGZvdW5kIiB3aGVuIGxpbmtpbmcgc3RhdGljYWxseS4gKGRtKQorICAgUmVtb3ZlIHRoZSBCcmFpbGxlTGl0ZSBkcml2ZXIncyBkZXRlY3Rpb24gbG9vcCBzaW5jZSB0aGUgY29yZSBub3cgbG9vcHMuIChkbSkKKyAgIERpc2FibGluZyBzcGVlY2ggc3VwcG9ydCBicmVha3MgdGhlIGNvbXBpbGUuIChtbCkKKyAgIExvZyB0aGUgVVNCIGxhbmd1YWdlLiAoZG0pCisgICBNb3ZlIHRoZSBVU0IgZGV2aWNlIG9wZW4gYWxnb3JpdGhtIGludG8gdGhlIGNvcmUuIChkbSkKKyAgIEludHJvY3VjZSBVU0JfSVNfUFJPRFVDVCgpLiAobWwsZG0pCisgICBSZW1vdmUgdW5yZWFjaGFibGUgY29kZS4gKG1sKQorICAgUmVwYWNrIHRoZSBGcmVlZG9tIFNjaWVudGlmaWMgbW9kZWwgZW50cnkgc3RydWN0dXJlLiAobWwpCisgICBJbXByb3ZlIHRoZSB3YXkgdGhlIG51bGwgYnJhaWxsZSBhbmQgc3BlZWNoIGRyaXZlcnMgd29yay4gKGRtKQorICAgRml4IGEgcG9pbnRlciBlcnJvci4gKHN0KS4KKyAgIE1vc3Qgb2YgdGhlIHByZXZpb3VzL25leHQgc2V0dGluZyBjb2RlIGlzIGNvbW1vbi4gKGRtKQorICAgRml4IHRoZSBjb21tZW50cyBmb3IgYW5kIGFkanVzdCB0aGUgbmFtZXMgb2YgdGhlIGZpZWxkcyBvZiB0aGUgTWVudUl0ZW0gc3RydWN0dXJlLiAoZG0pCisgICBDaGFuZ2UgdGhlIHJvdXRpbmcga2V5cyBpbiB0aGUgcHJlZmVyZW5jZXMgbWVudSBmcm9tIGEgc2V0IG9mIGRlc2NyZXRlIHZhbHVlcyB0byBhIHNjcm9sbCBiYXIuIChkbSxucCkKKyAgIEZpeCBhIGJ1ZmZlciBvdmVyZmxvdyBwcm9ibGVtIGluIHVwZGF0ZVByZWZlcmVuY2VzKCkuIChucCxkbSkKKyAgIEJ1aWxkaW5nIHRoZSBCcmxBUEkgcmVmZXJlbmNlIG1hbnVhbCBmYWlscyB3aGVuIG5vdCBidWlsZGluZyBpbiB0aGUgc291cmNlIHRyZWUuIChtbCkKKyAgIEFkZCB0aGUgZmlybW5lc3MgaGFuZGxlciB0byB0aGUgQWx2YSBkcml2ZXIgZm9yIHRoZSBTYXRlbGxpdGUgZGlzcGxheXMuIChkbSkKKyAgIFByZXBhcmUgZm9yIHJlYWRpbmcgVVNCIGlucHV0IG9uIHN5c3RlbXMgd2hpY2ggZG9uJ3Qgc3VwcG9ydCBVUkJzLiAoZG0pCisgICBHZXQgcmlkIG9mIHRoZSBpbGxlZ2FsIHR5cGUtcHVubmluZyB3YXJuaW5nLiAoZG0pCisgICBQcmVwYXJlIHRoZSBQYXBlbm1laWVyIGRyaXZlciBmb3IgcHJvdG9jb2wtc3BlY2lmaWMgaGFuZGxlcnMuIChkbSkKKyAgIFN1cHBvcnQgdGhlIEhhbmR5VGVjaCBGVERJIFVTQjwtPnNlcmlhbCBhZGFwdGVyLiAobWwpCisgICBBZGQgYSBVU0IgaW5wdXQgcGFja2V0IGZpbHRlcmluZyBtZWNoYW5pc20gYW5kIHVzZSBpdCBmb3IgRlRESSBVU0I8LT5zZXJpYWwgYWRhcHRlcnMuIChkbSkKKyAgIEFkZCB0aGUgYmFzZSBmb3IgUGFwZW5tZWllciBVU0Igc3VwcG9ydC4gKG1sLGRtKQorICAgUGFyc2UgY29udHJhY3Rpb24gdGFibGUgaW5wdXQgd2l0aCB1bnNpZ25lZSBjaGFycy4gKGRtKQorICAgUGFyc2UgdHJhbnNsYXRpb24gdGFibGVzIHdpdGggdW5zaWduZWQgY2hhcnMuIChkbSkKKyAgIEZpeCBzb21lIHByb2JsZW1zIHdpdGggU29sYXJpcyBhbmQgSFAtVVggYnVpbGRzLiAoZG0pCisgICAtLXdpdGgtc2NyZWVuLWRyaXZlcj1ubyBuZWVkcyByb3V0ZS5vLiAoZG0pCisgICBTb2xhcmlzIGFuZCBPcGVuQlNEIHNoYXJlIHRoZSBzYW1lIFBDTSBjb2RlLiAoZG0pCisgICBJbmNsdWRlIHN5c18uLi5fbm9uZS5oIGZpbGVzIHdoZXJlIGFwcHJvcHJpYXRlLiAoZG0pCisgICBTb2xhcmlzIHJlcXVpcmVzIC1sc29ja2V0LiAoZG0pCisgICBMaW51eCwgU29sYXJpcywgT3BlbkJTRCwgYW5kIEZyZWVCU0QgYWxsIHVzZSA8ZGxmY24uaD4uIChkbSkKKyAgIExpbnV4IGFuZCBGcmVlQlNEIHVzZSB0aGUgc2FtZSBQQ00gY29kZS4gKGRtKQorICAgTWFrZSBCUkxUVFkgYnVpbGRhYmxlIG9uIEZyZWVCU0QuIChkbSkKKyAgIFJlbmFtZSB1c2JCdWxrKFJlYWR8V3JpdGUpKCkgdG8gdXNiKFJlYWR8V3JpdGUpRW5kcG9pbnQoKS4gKGRtKQorICAgQWRkIFVTQiBzdXBwb3J0IGZvciBPcGVuQlNEIChpbmNvbXBsZXRlKS4gKGRtKQorICAgVGhlIE1pa3JvcHVoZSBkcml2ZXIncyBkZWFsbG9jYXRlU3BlZWNoSXRlbSgpIHJvdXRpbmUgbmVlZHMgdGhlIG5ldyBkYXRhIGFyZ3VtZW50LiAoZG0pCisgICBFdXJvQnJhaWxsZSB1cGRhdGU6ICh5cCkKKyAgICAgIE1vcmUgQnJsQVBJIGNvbXBsaWFudC4KKyAgICAgIFVwZGF0ZSBsb2dnZWQgdmVyc2lvbiBudW1iZXIuCisgICBJbmNsdWRlIDx1bmlzdGQuaD4gd2l0aGluIGVhY2ggaGVhZGVyIGZpbGUgd2hpY2ggdXNlcyBzaXplX3QuIChzZCkKKyAgIFVzZSBtZXNzYWdlKCkgdG8gcmVwb3J0IFRTSSBsb3cgYmF0dGVyeSBjb25kaXRpb24uIChzZCkKKyAgIFVzZSBhIHF1ZXVlIHRvIGxpbmsgdGhlIHBlbmRpbmcgVVNCIGlucHV0IHJlcXVlc3RzLiAoZG0pCisgICBTb21lIG1vcmUgdGlkeWluZyB1cCBvZiB0aGUgVVNCIGRlY2xhcmF0aW9ucy4gKGRtKQorICAgSGFuZHlUZWNoIGRpc3BsYXkgaWRlbnRpZmljYXRpb24gdmlhIFVTQiB3YXMgdW5yZWxpYWJsZSBvbiBhIGZhc3QgbWFjaGluZS4gKGRtKQorICAgTWFpbnRhaW4gZW5kcG9pbnQtc3BlY2lmaWMgZGF0YS4gKGRtKQorICAgVGhlIHByZWZlcmVuY2VzIG1lbnUgY3Jhc2hlcyBpZiB0aGUgY29udHJhY3Rpb24gdGFibGVzIGRpcmVjdG9yeSBpcyBiYWQuIChkbSkKKyAgIFRoZSAiZXIiIGluICJzdXJnZXJ5IiBkb2Vzbid0IGdldCBjb250cmFjdGVkIChlbi11cy1nMikuIChqYikKKyAgIGJybF9yZWFkUGFja2V0KCkgYW5kIGJybF93cml0ZVBhY2tldCgpIG5vdyB1c2UgdGhlIHNpemVfdCBhbmQgc3NpemVfdCB0eXBlcy4gKHN0KQorICAgQ29ycmVjdCB0aGUgQnJsQVBJIGNsaWVudCBydW4tdGltZSBkaXNjb3Zlcnkgb2YgbGlicHRocmVhZCB1c2UuIChzdCkKKyAgIEJybEFQSSBmaXhlczogKG1sKQorICAgICAgUmVtb3ZlIGR1cGxpY2F0ZSBkZWNsYXJhdGlvbnMgYWxyZWFkeSBpbiBwdGhyZWFkLmguCisgICAgICBzdHJuZHVwKCkgaXMgYSBnbGliYyBzcGVjaWZpYyBHTlUgZXh0ZW5zaW9uIHdoaWNoIGlzbid0IGF2YWlsYWJsZSBvbiBzb21lIHBsYXRmb3JtcywgZS5nLiBPcGVuQlNELgorICAgICAgImludCB2dCIgd2FzIGRlY2xhcmVkIG91dHNpZGUgdGhlIExpbnV4IHNwZWNpZmljIGJsb2NrLCBjYXVzaW5nIGEgY29tcGlsZXIgd2FybmluZyBhYm91dCBhbiB1bnVzZWQgdmFyaWFibGUuCisgICBicmx0dHktaW5zdGFsbCBhbmQgYnJsZGVmcy5oIGRpZG4ndCBpbnN0YWxsIGNvcnJlY3RseSB3aGVuIG5vdCBidWlsZGluZyBpbiB0aGUgc291cmNlIHRyZWUuIChtbCkKKyAgIFRoZSBWb3lhZ2VyIGRyaXZlciBzaG91bGQgbm8gbG9uZ2VyIGJlIExpbnV4LWRlcGVuZGVudC4gKG1sKQorICAgT2NjYXNpb25hbGx5IHRoZSByZXN0IG9mIHRoZSBsaW5lLCByYXRoZXIgdGhhbiBqdXN0IHRoZSBjdXJyZW50IHdvcmQsIGJlY29tZXMgdW5jb250cmFjdGVkLiAoZG0pCisgICBSZWFycmFuZ2UgdGhlIHB1YmxpYyBVU0IgY29uc3RhbnRzIGEgYml0LiAoZG0pCisgICBBZGQgdGhlIEZUREkgY2hpcCB1c2VkIGJ5IEhhbmR5VGVjaC4gKG1sKQorICAgUmVtb3ZlIHRoZSByZWZlcmVuY2UgdG8gLWxtLiAoZG0pCisgICBSZW1vdmUgaW5jbHVzaW9uIG9mIDxtYXRoLmg+LiAoZG0pCisgICBDaGFuZ2UgYWxsIGRvdWJsZXMgdG8gZmxvYXRzLiAobnAsZG0pCisgICBHZW5lcmF0ZSB0cmlhbmdsZSAocmF0aGVyIHRoYW4gc2luZSkgd2F2ZXMgd2hlbiBwbGF5aW5nIHR1bmVzIHZpYSB0aGUgcGNtLiAobnApCisgICBJbXBsZW1lbnQgdGhlICJCcmFpbGxlIEZpcm1uZXNzIiBwcmVmZXJlbmNlLiAoZG0pCisgICBBZGQgIkJyYWlsbGUgRmlybW5lc3MiIGNhcGFiaWxpdHkgdG8gdGhlIFZveWFnZXIgYW5kIEZyZWVkb21TY2llbnRpZmljIGRyaXZlcnMuIChkbSkKKyAgIE1vdmUgdXNiQnVsayhSZWFkfFdyaXRlKSBvdXQgb2YgdGhlIHBvcnRhYmxlIHBhcnQgb2YgdGhlIFVTQiBjb3JlLiAoZG0pCisgICBPcGVuQlNEIG5lZWRzIG1pc2MuYyB0byBpbmNsdWRlIDxzeXMvc3RhdC55aD4uIChtbCkKKyAgIEVuc3VyZSB0aGF0IGFsbCBkZWNsYXJhdGlvbnMgYXJlIGF0IHRoZSBiZWdpbm5pbmdzIG9mIHRoZWlyIGJsb2Nrcy4gKG1sKSgKKyAgIFJlbW92ZSBkb3VibGUgc2VtaWNvbG9ucy4gKGRtKQorICAgQWRkIGEgInJvdXRpbmcgc3RhcnRlZCIgdHVuZSwgY2hhbmdlIHRoZSAicm91dGluZyBzdWNjZWVkZWQiIHR1bmUuIChzZCkKKyAgIERvbid0IHdyaXRlIHRoZSBpbml0aWFsICJhcHBsaWNhdGlvbiBjaGFyYWN0ZXIgbWFwIGNoYW5nZWQiIGxvZy4gKGRtKQorCitBcHJpbCAxMywgMjAwNDoKKyAtIEJSTFRUWSAzLjVwcmUzIHJlbGVhc2VkOgorICAgUmVuYW1lIHRoZSBrZXkvY2VsbCBvZmZzZXQvYWRkcmVzcyB2YXJpYWJsZXMgaW4gdGhlIFBhcGVubWVpZXIgZHJpdmVyLiAoZG0pCisgICBSZW1vdmUgYWRsaWIgZGVidWcgbG9ncy4gKGRtKQorICAgVXBkYXRlcyB0byB0aGUgUGFwZW5tZWllciBpbml0aWFsaXphdGlvbiBkZWJ1ZyBsb2dzLiAoZG0pCisgICBWb3lhZ2VyIGRyaXZlciBjaGFuZ2VzOiAoZG0pCisgICAgICBSZW1vdmUgZmFpbHVyZSBvbiBlcnJvciBmb3Igbm9uLWNyaXRpY2FsIG9wZXJhdGlvbnMgKXRoZSBwbHVzLWJveCBkb2Vzbid0IHN1cHBvcnQgdGhlbSBhbGwpLgorICAgICAgQ2FsbCB1c2JDb250cm9sVHJhbmZlcigpIHdpdGggcHJvcGVyIGNvbnN0YW50cy4KKyAgIFJlYXJyYW5nZSBwYXJhbWV0ZXJzIHRvIHVzYkNvbnRyb2xUcmFuc2ZlcigpLiAoZG0pCisgICBBZGQgdGhlICRYIHN1ZmZpeCB0byB0aGUgZXhlY3V0YWJsZXMgaW4gdGhlIFBhcGVubWVpZXIgbWFrZSBmaWxlOiAoZG0pCisgICBQYXBlbm1laWVyIGNvbmZpZ3VyYXRpb24gZmlsZSBwcm9jZXNzaW5nIGNoYW5nZXM6IChkbSkKKyAgICAgIE1ha2UgcGFyc2VyIGVycm9ycyBtb3JlIGluZm9ybWF0aXZlLgorICAgICAgQWRkIG1vcmUgZXJyb3IgY2hlY2tpbmcuCisgICBBZGQgc3VwcG9ydCBmb3IgcmVzY3VlIGltYWdlcyB0byByaG1raXNvLiAoZG0pCisgICBQcmVmZXJlbmNlcyBtZW51IGJpbmRpbmcgY2hhbmdlczogKGRtKQorICAgICAgVGhlIGhvbWUvZW5kIGtleXMgYXJlIGRpc2NhcmQvZXhpdC4KKyAgICAgIFRoZSBlc2NhcGUvcmV0dXJuIGtleXMgYXJlIGV4aXQvc2F2ZS4KKyAgICAgIFRoZSBiYWNrIGNvbW1hbmQgaXMgcHJldmlvdXMgc2V0dGluZy4KKyAgIFNwZWVkIHVwIHRoZSBQYXBlbm1laWVyIGNvbW1hbmQgcmVzb2x1dGlvbiBhbGdvcml0aG0uIChkbSkKKyAgIFBhcGVubWVpZXIgY29uZmlndXJhdGlvbiBmaWxlIHByb2Nlc3NpbmcgY2hhbmdlczogKGRtKQorICAgICAgUmVtb3ZlIGNvbW1hbmQgYW5kIG1vZGlmaWVyIHRhYmxlIHNpemUgbGltaXRzLgorICAgICAgQWxsb2NhdGUgdGFibGVzIG9ubHkgYXMgYmlnIGFzIHRoZXkgbmVlZCB0byBiZSBmb3IgZWFjaCBtb2RlbC4KKyAgICAgIEFsbG93IHByb2Nlc3NpbmcgdG8gY29udGludWUgd2hlbiBhbiBlcnJvciBpcyBlbmNvdW50ZXJlZC4KKyAgIEltcHJvdmUgdGhlIFBhcGVubWVpZXIgaGVscCBkZXNjcmlwdGlvbnMuIChkbSkKKyAgIFRpZHkgdXAgdGhlIFBhcGVubWVpZXIgY29uZmlndXJhdGlvbiBmaWxlIHBhcnNlciBkZWNsYXJhdGlvbnMuIChkbSkKKyAgIEZpeCBkZXNjcmVwYW5jaWVzIGluIHRoZSBQYXBlbm1laWVyIHN0YXR1cyBrZXkgdG9nZ2xlIGNvbW1hbmRzLiAoZG0pCisgICBSZW1vdmUgdGhlIHBhZGRpbmcgb2YgaGVscCBwYWdlIHdpZHRocyB0byBtdWx0aXBsZXMgb2YgNDAuIChkbSkKKyAgIEFsbG93IGEgaGVscCBwYWdlIHRvIGhhdmUgbW9yZSB0aGFuIDI1NSBsaW5lcy4gKGRtKQorICAgUGFwZW5tZWllciBkcml2ZXIgY2hhbmdlczogKGRtKQorICAgICAgUmVtb3ZlIHRoZSBvcGVuIHJldHJ5IGxvb3AuCisgICAgICBJbXByb3ZlIHNvbWUgY29uZmlndXJhdGlvbiBmaWxlIGVycm9yIG1lc3NhZ2RzLgorICAgICAgQWxsb3cgdGhlIGtleSB0byBiZSBiZXR3ZWVuIG9yIGFmdGVyIHRoZSBtb2RpZmllcnMuCisgICAgICBMaXN0IHRoZSBrZXkgYWZ0ZXIsIHJhdGhlciB0aGFuIGJlZm9yZSwgdGhlIG1vZGlmaWVycy4KKyAgICAgIENoZWNrIGZvciBkdXBsaWNhdGUgbW9kaWZpZXJzLgorICAgUmVwb3J0IHRoZSB1c2Ugb2YgYSBub24tb3B0aW9uIGFyZ3VtZW50IHdoZW4gaW52b2tpbmcgYnJsdHR5LiAoZG0pCisgICBMb2cgKGRlYnVnKSBrZXlzIGFuZCBjb21tYW5kcyBpbiBjb21tYW5kIGxlYXJuIG1vZGUuIChkbSkKKyAgIEZpeCB0aGUgbGVhcm5pbmcgb2Ygbm9uLWluaXRpYWwgcmVwZWF0aW5nIGNvbW1hbmRzLiAoZG0pCisgICBEb24ndCBsb2cgUGFwZW5tZWllciBub24tbW9kaWZpZXIga2V5IHJlbGVhc2VzLiAoZG0pCisgICBSZW1vdmUgc29tZSBkb3VibGUgc3BhY2VzIHdpdGhpbiB0aGUgUGFwZW5tZWllciBjb25maWd1cmF0aW9uIGZpbGUuIChkbSkKKyAgIEFkZCBhIFBhcGVubWVpZXIgRUwgbW9kZSBmb3IgdGhlIHByZWZlcmVuY2VzIG1lbnUuIChkbSkKKyAgIFN1cHBvcnQgdGhlIFBhcGVubWVpZXIgRUw0MCBiZXR0ZXIgYXMgaXQgaGFzIG5vIHJpZ2h0IGtleS4gKGRtKQorICAgQWRkIHRoZSAtYSBvcHRpb24gdG8gcmhta2lzby4gKGRtKQorICAgQ2hhbmdlIHRoZSByaG1raXNvIGltYWdlIHBhcmFtZXRlcnMgaW50byB0aGUgLWkgYW5kIC1vIG9wdGlvbnMuIChkbSkKKyAgIEZpeCBwcm9ibGVtcyB3aXRoIEhhbmR5VGVjaCBpbml0aWFsaXphdGlvbiBhZnRlciB0aGUgbG9vcCB3YXMgcmVtb3ZlZC4gKGRtKQorICAgcmhta2lzbyBzaG91bGQgbG9vayBmb3IgdGhlIGRpcmVjdG9yeSB0aGUgc2FtZSB3YXkgaXNvbGludXggZG9lcy4gKGRtKQorICAgQWRkIGEgUkVBRE1FIChSRUFETUUuUmVkSGF0LmNkKSBmb3Igcmhta2lzby4gKGRtKQorICAgUmV3b3JrIHRoZSBQYXBlbm1laWVyIHN3aXRjaC9rZXkgYmluZGluZ3MuIChkbSkKKyAgIE5hbWUgdGhlIHN3aXRjaGVzIGFuZCBrZXlzIGNvcnJlY3RseSBpbiB0aGUgUGFwZW5tZWllciBjb25maWd1cmF0aW9uIGZpbGUuIChkbSkKKyAgIFRoZSBzaG9ydCBpbmZvIGRpc3BsYXkgY29udGFpbnMgc3RyYXkgZG90cy4gKGRtKQorICAgUmVtb3ZlIHRoZSBUZWxldm94IGRyaXZlci4gKG5wKQorICAgSGFuZHlUZWNoIGRyaXZlciBjaGFuZ2VzOiAoZG0pCisgICAgICBDaGVjayBmb3IgZXJyb3JzIGFmdGVyIGF3YWl0SW5wdXQoKS4KKyAgICAgIE9ubHkgY2hlY2sgZm9yIHRoZSBkaXNwbGF5IG9uY2Ugd2hlbiBvcGVuaW5nIGl0LgorICAgYXdhaXRJbnB1dCgpIHNob3VsZCBzZXQgRUFHQUlOIG9uIGEgdGltZW91dC4gKGRtKQorICAgRm9yIEJybEFQSTogUmVtb3ZlIHRoZSBWYXJpbyBkcml2ZXIncyBjaGVjayB0aGF0IGl0cyBpbnRlcm5hbCBidWZmZXIgaXMgYmVpbmcgdXNlZC4gKG1tKQorICAgQWRkIGZvcmNlUGNtT3V0cHV0KCkgYW5kIGF3YWl0UGNtT3V0cHV0KCkuIChkbSkKKyAgIEdlbmVyYXRlIHRoZSBkZXBlbmRlbmNpZXMgYmVmb3JlIGRvaW5nICJtYWtlIGRpc3RjbGVhbiIuIChkbSkKKyAgIFRpZHkgdXAgdGhlIE1pa3JvcHVoZSBzYW1wbGUgd2lkdGggc2V0dGluZyBjb2RlLiAoZG0pCisgICBUaGUgTWlrcm9wdWhlIGRyaXZlciBzaG91bGQgY2xvc2UgdGhlIHNvdW5kIGRldmljZSBhZnRlciBhIGZldyBzZWNvbmRzIG9mIGluYWN0aXZpdHkuIChkbSkKKyAgIFRoZSBNaWtyb3B1aGUgbXV0ZSBmdW5jdGlvbiBzaG91bGQgc3RvcCB0aGUgYXVkaW8gZGV2aWNlIGltbWVkaWF0ZWx5LiAoZG0pCisgICBNaWtyb3B1aGUgZHJpdmVyIGVuaGFuY2VtZW50czogKGRtKQorICAgICAgU3ludGhlc2l6ZSBhbmQgc3BlYWsgaW4gYSBzZXBhcmF0ZSB0aHJlYWQuCisgICAgICBJbXBsZW1lbnQgdGhlIG11dGUgZnVuY3Rpb24uCisgICBDb3JlIGF1dG9yZXBlYXQgc3VwcG9ydCBmb2lsZWQgbGVhdmluZyBjb21tYW5kIGxlYXJuIG1vZGUgZm9yIHNvbWUgZGlzcGxheXMuIChkbSkKKyAgIExvb2sgZm9yIGV4dGVybmFsIHBhY2thZ2VzIGluIGEgZmV3IG1vcmUgcGxhY2VzLiAoZG0pCisgICBSZWFycmFuZ2UgY29kZS9kZWNsYXJhdGlvbnMgcGVydGFpbmluZyB0byBjb21tYW5kIGxpbmUgb3B0aW9ucy4gKGRtKQorICAgQWRkIHRoZSBzcGVlY2ggcGFzcy10aHJvdWdoIEZJRk8uIChucCkKKyAgIERvbid0IGNhbGwgZ2V0dGltZW9mZGF5KCkgaWYgdGhlcmUncyBubyByZXdyaXRlIGludGVydmFsLiAobnApCisgICBVc2UgbWFsbG9jV3JhcHBlcigpIGluIHRoZSBDb21iaUJyYWlsbGUgZHJpdmVyLiAobWwpCisgICBGaXggdGhlIHdheSBpbiB3aGljaCB0aGUgQWx2YSBkcml2ZXIgY2FsY3VsYXRlcyBpdHMgcmV3cml0ZSBpbnRlcnZhbC4gKGRtKQorICAgQ2hhbmdlIHRoZSB3YXkgdGhlIEhhbmR5VGVjaCBkcml2ZXIgZGV0ZWN0cyB0aW1lb3V0cy4gKGRtKQorICAgUmV3cml0dGVuIFZpc2lvQnJhaWxsZSBSRUFETUUuIChzaCkKKyAgIEFkZCB0aGUgLXQgKGJ1aWx0LWluIHRleHQgdGFibGUpIG9wdGlvbiB0byByaG1raXNvLiAobnApCisgICBDTURfUkVUVVJOIHNob3VsZCBiZWhhdmUganVzdCBsaWtlIENNRF9IT01FIGluIHRoZSByZWZlcmVuY2VzIG1lbnUuIChucCkKKyAgIEFkZCB0aGUgZGlzcGxheXNpemU9IHBhcmFtZXRlciB0byB0aGUgVmlzaW9CcmFpbGxlIGRyaXZlci4gKHNoKQorICAgYmlnNSB1cGRhdGVzLiAoY2spCisgICBUaGUgRW5nbGlzaCB3b3JkICJJIiBzaG91bGRuJ3QgaGF2ZSBhIGxldHRlciBzaWduIGluIGZyb250IG9mIGl0LiAoZG0pCisgICBNb3ZlZCBBUEkgYXV0aGVudGljYXRpb24gYmVmb3JlIGFueSBhbGxvY2F0aW9uIG9yIHRocmVhZCBjcmVhdGlvbi4gKHN0KQorICAgRG9uJ3QgbG9nIGFuIEFsdmEgZGlzcGxheSBwYXJhbWV0ZXJzIHBhY2tldCBhcyB1bmV4cGVjdGVkLiAoZG0pCisgICBTZXQgZXJybm8gdG8gRUFHQUlOIGlmIHJlYWRDaHVuaygpIHRpbWVzIG91dC4gKGRtKQorICAgQWRkIHVzYkF3YWl0SW5wdXQoKS4gKGRtKQorICAgVVNCX0RJUl8oSU58T1VUKSBoYXZlIGJlZW4gcmVuYW1lZCB0byBVU0JfRElSRUNUSU9OXyhJTnxPVVQpUFVULiAoZG0pCisgICBNYWtlIHRoZSBzZXR0YWJsZSBWaWFWb2ljZSByYXRlcyBhbmQgdm9sdW1lcyBtb3JlIHNlbnNpYmxlLiAoZG0pCisgICBBZGQgc2VyaWFsIGFkYXB0ZXIgc3VwcG9ydCB0byB0aGUgVVNCIGNvcmUuIChkbSkKKyAgIEFsbG93IC0td2l0aC0odGV4dHxhdHRyaWJ1dGVzKS10YWJsZT0gdG8gdGFrZSBhbiBhYnNvbHV0ZSBwYXRoLiAoZG0pCisgICBBZGQgVVNCIHN1cHBvcnQgdG8gdGhlIEhhbmR5VGVjaCBkcml2ZXIuIChtbCkKKyAgIEFkZCB0aGUgLXMgKHN0YXJ0IHNoZWxsIGZvciBpbnNwZWN0aW9uKSBvcHRpb24gdG8gcmhta2lzby4gKGRtKQorICAgQWRkIHJobWtpc28gY29tbWFuZCBsaW5lIGFyZ3VtZW50IHBhcnNpbmc6IChkbSkKKyAgICAgIEEgcGFyYW1ldGVyIHRvIHNwZWNpZnkgdGhlIG9yaWdpbmFsIChpbnB1dCkgaW1hZ2UuCisgICAgICBBIHBhcmFtZXRlciB0byBzcGVjaWZ5IHRoZSBtb2RpZmllZCAob3V0cHV0KSBpbWFnZS4KKyAgICAgIEFuIG9wdGlvbiB0byBzcGVjaWZ5IHRoZSBicmFpbGxlIGRyaXZlcihzKS4KKyAgICAgIEFuIG9wdGlvbiB0byBkaXNwbGF5IGNvbW1hbmQgdXNhZ2UuCisgICByaG1raXNvIGVuaGFuY2VtZW50czogKG5wKQorICAgICAgQ29weSB0aGUgZW50aXJlIGZpbGUgc3RydWN0dXJlIHJhdGhlciB0aGFuIGp1c3QgdGhlIGlzb2xpbnV4IGRpcmVjdG9yeS4KKyAgICAgIENvcHkgdGhlIHZvbHVtZSBhbmQgYXBwbGljYXRpb24gaWRlbnRpZmllcnMuCisgICAgICBDcmVhdGUgdGhlIGRlc3RpbmF0aW9uIGltYWdlIHdpdGggSm9saWV0IHN1cHBvcnQuCisgICAgICBNYWtlIGl0IGVhc2llciB0byBjb25maWd1cmUgYSBzcGVjaWZpYyBicmFpbGxlIGRyaXZlci4KKyAgIEJybEFQSSBmaXhlczogKHN0ZXQKKyAgICAgIFNvbWUgYmxhbmtzIHJlbW92ZWQuCisgICAgICBicmxhcGlfc3BsaXRIb3N0KCkgbm93IHNoYXJlZCBiZXR3ZWVuIHNlcnZlciBhbmQgY2xpZW50LgorICAgICAgU2VydmVyIG5vdyBkZWZhdWx0cyB0byBsaXN0ZW5pbmcgb24gbG9jYWwgaW50ZXJmYWNlIG9ubHkgZm9yIHNlY3VyaXR5LgorICAgICAgUmVhZCBhbmQgd3JpdGUgZnVuY3Rpb25zIG5vdyByZXR1cm4gc2l6ZV90LgorICAgICAgUmVhZCBhbmQgd3JpdGUgZnVuY3Rpb25zIG5vdyBkZWZpbmUgYnJsYXBpX2Vycm5vIHRoZW1zZWx2ZXMgb24gZXJyb3IuCisgICAgICBicmxhcGlfZ2V0VHR5KCkgbm93IHJldHVybnMgdGhlIG51bWJlciBvZiB0aGUgdHR5IGl0IGdvdC4KKyAgIFJldmVyc2UgdGhlIGZ1bmN0aW9ucyBvZiB0aGUgQnJhaWxsZUxpdGUgTWlsbGVubml1bSB3aGl6IHdoZWVscy4gKGRtKQorICAgUmVuYW1lIG1rcmhpc28gdG8gcmhta2lzbzogKGRtKQorICAgICAgVXNlIG5vZmIgcmF0aGVyIHRoYW4gdmlkZW89dmM6MTMuCisgICAgICBTdHJpcCB0aGUgYnJsdHR5IGV4ZWN1dGFibGUgYmVmb3JlIGluc3RhbGxpbmcgaXQuCisgICAgICBEb24ndCBpbnZva2UgdGhlIGludGVyYWN0aXZlIHNoZWxsLgorICAgSW1wbGVtZW50IHRoZSBGcmVlZG9tU2NpZW50aWZpYyAoZnMpIGJyYWlsbGUgZHJpdmVyLiAoZG0pCisgICBBbGxvdyB0aGUgVVNCIGlucHV0IHRyYW5zZmVyIG1vZGUgdG8gYmUgc3BlY2lmaWVkLiAoZG0pCisKK01hcmNoIDExLCAyMDA0OgorIC0gQlJMVFRZIDMuNXByZTIgcmVsZWFzZWQ6CisgICBCcmluZyBkZXZpY2UgZXhhbXBsZXMgaW4gYnJsdHR5LmNvbmYgdGVtcGxhdGUgdXAtdG8tZGF0ZS4gKGRtKQorICAgUmV3b3JrIGtleSBiaW5kaW5ncyBhIGJpdCBmb3IgQWx2YSAzbm4gYW5kIDRubiBtb2RlbHMuIChucCkKKyAgIEFkZCB0aGUgUkVUVVJOIGNvbW1hbmQuIChkbSkKKyAgIEFkZCB0aGUgcHJmd29yZCBjb250cmFjdGlvbiB0YWJsZSBvcGNvZGUuIChkbSkKKyAgIEJSTFRUWSBNYW51YWwgdXBkYXRlOiAobnAsZG0pCisgICAgICBSZW1vdmUgZG9jdW1lbnRhdGlvbiBmb3IgdGJsMmhleCBhbmQgdHh0MmhscC4KKyAgICAgIE1vdmUgIkNvbnRyYWN0ZWQgQnJhaWxsZSIgdG8gaXRzIG93biB0b3AtbGV2ZWwgc2VjdGlvbi4KKyAgICAgIFNvbWUgbWlub3IgY29ycmVjdGlvbnMuCisgICBNb3JlIGZpeGVzIHRvIGZyLWFicmVnZS5jdGIuIChucCkKKyAgIEZpeCB0aGUgImVyIiBjb250cmFjdGlvbiBpbiB0aGUgRnJlbmNoIHRhYmxlLiAobnApCisgICBBZGQgYSBzY3JpcHQgKG1rcmhpc28pIHRvIG1ha2UgYSBSZWRIYXQvRmVkb3JhIGJvb3QgQ0QuIChkbSkKKyAgIFNpbmdsZSBjaGFyYWN0ZXIgY29udHJhY3Rpb24gdGFibGUgbWF0Y2hlcyBzaG91bGQgYmUgY2FzZSBpbnNlbnNpdGl2ZS4gKGRtKQorICAgR2l2ZSB0aGUgImFsd2F5cyIgY29udHJhY3Rpb24gdGFibGUgb3Bjb2RlIGEgbG93ZXIgcHJpb3JpdHkgZm9yIG1hdGNoaW5nLiAoZG0pCisgICBBbGxvdyBhIGNvbnRyYWN0ZWQgYnJhaWxsZSBtYXRjaCBzdHJpbmcgdG8gY29udGFpbiBzcGFjZXMuIChkbSkKKyAgIEZpeCB0aGUgZGVwZW5kZW5jaWVzIGZvciB0aGUgaG9zdF8uLi4gb2JqZWN0cy4gKG5wKQorICAgQWRkIGVudHJpZXMgZm9yIHRoZSBGcmVuY2ggd29yZHMgYSwgw6AsIGFuZCB5LiAobnApCisKK01hcmNoIDgsIDIwMDQ6CisgLSBCUkxUVFkgMy41cHJlMSByZWxlYXNlZDoKKyAgIHRibDJoZXgsIHRibHRlc3QgYW5kIGN0YnRlc3Qgc2hvdWxkIGNoZWNrIGZvciBtaXNzaW5nIHBhcmFtZXRlcnMuIChucCxkbSkKKyAgIEFkZCB0ZXh0LmJyZi50YmwuIChucCkKKyAgIEZpeCB0aGUgaW5zdGFsbC1hcGktbWFucGFnZXMgbWFrZSB0YXJnZXQgdG8gZGV0ZWN0IGluc3RhbGxhdGlvbiBlcnJvcnMuIChkbSkKKyAgIEFkZCB0aGUgZnItYWJyZWdlIGNvbnRyYWN0aW9uIHRhYmxlLiAobnApCisgICBBZGQgY3RidGVzdC4gKGRtKQorICAgSW5zdGFsbGluZyBCUkxUVFkgc2hvdWxkbid0IHJlcXVpcmUgdGhhdCBCcmxBUEkncyBtYW4gcGFnZXMgYmUgYnVpbHQuIChkbSkKKyAgIFZveWFnZXIgZHJpdmVyIGVuaGFuY2VtZW50czogKHNkKQorICAgICAgUmVtb3ZlIGludGVybmFsIHN1cHBvcnQgZm9yIGF1dG9yZXBlYXQgYW5kIHVzZSB0aGUgY29yZSdzIGZhY2lsaXR5LgorICAgICAgQWRkIHRoZSBicmxpbnB1dD0gZHJpdmVyIHBhcmFtZXRlci4KKyAgIEFkZCB0aGUgY2xhc3MsIGFmdGVyIGFuZCBiZWZvcmUgY29udHJhY3Rpb24gdGFibGUgb3Bjb2Rlcy4gKGRtKQorICAgQWRkIHRoZSBiZWdtaWR3b3JkIGNvbnRyYWN0aW9uIHRhYmxlIG9wY29kZS4gKGRtKQorICAgSGFyZC1jb2RlIGFuZCBsb2dpY2FsbHkgZ3JvdXAgdGhlIGNvbnRyYWN0aW9uIHRhYmxlIG9wY29kZSBuYW1lcy4gKGRtKQorICAgQWxsb3cgYnJhaWxsZS9zcGVlY2ggZHJpdmVyIHBhcmFtZXRlcnMgdG8gYmUgcXVhbGlmaWVkIHdpdGggYSBkcml2ZXIgaWRlbnRpZmllci4gKGRtKQorICAgQWRkIC0td2l0aC0oYnJhaWxsZXxzcGVlY2h8c2NyZWVufGFwaSktcGFyYW1ldGVycz0uIChkbSkKKyAgIEFkZCBjb21tZW50IGRlc2NyaWJpbmcgcmVhc29uIGZvciBzZWxlY3RlZCBkb3QtdG8tYml0IG1hcHBpbmcuIChucCkKKyAgIEJybEFQSSBlbmhhbmNlbWVudHM6IChzaCkKKyAgICAgIGJybGFwaV9nZXREcml2ZXJJZCBhbmQgYnJsYXBpX2dldERyaXZlck5hbWUgbm93IHVzZSBzbnByaW50ZigpLgorICAgICAgUmVtb3ZlIEJSQVBJX1BBQ0tFVFdSSVRFLgorICAgICAgUmV3cml0ZSBicmxhcGlfd3JpdGVCcmwoKSB0byB1c2UgdGhlIG5ldyBleHRlbmRlZCB3cml0ZSBwYWNrZXQuCisgICAgICBQcm90b2NvbCB2ZXJzaW9uIGlzIG5vdyAyLgorICAgRW5oYW5jZSB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIHN0YW5kYXJkIGRvdCBudW1iZXJpbmcgY29udmVudGlvbi4gKGRtKQorICAgUmVuYW1lIGJybGFwaS5oIHRvIGFwaS5oLiAoZG0pCisgICBEb2N1bWVudCB0aGUgLS13aXRoLW1pa3JvcHVoZSBidWlsZCBvcHRpb24uIChkbSkKKyAgIENvcnJlY3QgdGhlIGRlc2NyaXB0aW9ucyBvZiB0aGUgdHdvIHN1cHBsaWVkIGF0dHJpYnV0ZXMgdHJhbnNsYXRpb24gdGFibGVzLiAoZG0pCisgICBSZW1vdmUgdGhlIGRvY3VtZW50YXRpb24gZm9yIHRibDJ0YmwsIHRibDJ0eHQsIGFuZCB0eHQydGJsLiAoZG0pCisgICBCcmxBUEkgZW5oYW5jZW1lbnRzOiAoc2gpCisgICAgICBQcm90b2NvbDoKKyAgICAgICAgIEFkZCBwcm90b2NvbCB2ZXJzaW9uIHRvIHRoZSBhdXRoZW50aWNhdGlvbiBwYWNrZXQuCisgICAgICAgICBBZGQgZXh0cmEgc2VydmVyLXNpZGUgdmVyaWZpY2F0aW9ucyB0byByZWNvZ25pemUgYSBwYWNrZXQgY29udGFpbmluZyBhCisgICAgICAgICAgICB2YWxpZCBhdXRoZW50aWNhdGlvbiBrZXkgYnV0IG5vIHByb3RvY29sIHZlcnNpb24gKGFuIG9sZC1zdHlsZSBwYWNrZXQpLAorICAgICAgICAgICAgYW5kIHRvIHJlcG9ydCBhbiBhY2N1cmF0ZSBlcnJvciBtZXNzYWdlIGluIHRoaXMgc2l0dWF0aW9uLgorICAgICAgYXBpX3NlcnZlci5jOgorICAgICAgICAgTG93ZXItY2FzZSBmaXJzdCBsZXR0ZXIgb2YgZnVuY3Rpb24gbmFtZXMgdG8gYmUgY2xvc2VyIHRvIGNvcmUncyBjb2Rpbmcgc3R5bGUuCisgICAgICAgICBNYWtlIGFsbCBwcml2YXRlIGZ1b2N0aW9ucyBzdGF0aWMuCisgICBWaXNpb0JyYWlsbGUgZHJpdmVyIGVuaGFuY2VtZW50czogKHNoKQorICAgICAgQWRkIHN1cHBvcnQgZm9yIHR5cGluZyB1cHBlci1jYXNlIGMgd2l0aCBjZWRpbGxhIGFuZCB1cHBlci1jYXNlIGEgd2l0aCBncmF2ZS4KKyAgICAgIEtleSBjb21iaW5hdGlvbnMgb2YgdGhlIGZvcm0gQy1NLWNoYXIgY2FuIG5vdyBiZSBnaXZlbiBmcm9tIHRoZSBicmFpbGxlIGtleWJvYXJkLgorICAgICAgQ29kZSBjbGVhbi11cCBhbmQgaW5zdHJ1Y3Rpb24gcmVvcmRlcmluZy4KKyAgICAgIEFkZCBkZWJ1ZyBmYWNpbGl0aWVzIGZvciBkZWFsaW5nIHdpdGggdW5rbm93biBQUk9Ncy4KKyAgIEFkZCB0Ymx0ZXN0LiAoZG0pCisgICBCcmxBUEkgZW5oYW5jZW1lbnRzOiAoc2gpCisgICAgICBBZGQgbW9yZSBleHBsYW5hdGlvbiB0byBjb21tZW50cyBmb3IgZmllbGRzIG9mIGJybGFwaV9leHRXcml0ZVN0cnVjdC4KKyAgICAgIENoZWNrIGJ1ZmZlciBzaXplIGluIGJybGFwaV9nZXREcml2ZXJJZCgpIGFuZGJybGFwaV9nZXREcml2ZXJOYW1lKCkuCisgICBBZGQgdGhlIGZyLWlzbzAxIHRleHQgdHJhbnNsYXRpb24gdGFibGUuICh5cCkKKyAgIEJybEFQSSBlbmhhbmNlbWVudHM6IChzaCxzdCkKKyAgICAgIGJybGFwaV9leHRXcml0ZSgpIG5vdyB0YWtlcyBvbmx5IG9uZSBhcmd1bWVudCAob2YgdHlwZSBicmxhcGlfZXhqV3JpdGVTdHJ1Y3QpLgorICAgICAgQlJMQVBJX0VYVFdSSVRFU1RSVUNUX0lOSVRJQUxJWkVSIG1hY3JvIGFkZGVkICh0byBpbml0aWFsaXplIGJybGFwaV9leHRXcml0ZVN0cnVjdCkuCisgICAgICBGaWVsZHMgaW4gcGFja2V0IGFuZCBjb3JyZXNwb25kaW5nIGJpdHMgaW4gZmxhZ3MgaGF2ZSBiZWVuIHJlb3JkZXJlZC4KKyAgICAgIFN0YXRpYyB2YXJpYWJsZXMgaW5zaWRlIGNsaWVudCBmdW5jdGlvbnMgaGF2ZSBiZWVuIHJlbW92ZWQuCisgICAgICBicmxhcGlfd3JpdGVEb3RzKCkgbm93IGFjY2VwdHMgInVuc2lnbmVkIGNoYXIicyAocmF0aGVyIHRoYW4gImNoYXIicykuCisgICAgICBSZXR1cm4gMCBhbmQgZG8gbm90aGluZyBpZiByZWdpb24ncyBiZWdpbiBleGNlZWRzIGl0cyBlbmQuCisgICAgICBTZXJ2ZXIgcmVmdXNlcyBpbnZhbGlkIGN1cnNvciBwb3NpdGlvbi4KKyAgIEV1cm9CcmFpbGxlIGRyaXZlciB2ZXJzaW9uIDEuMy4yLiAoeXApCisgICBBZGQgYSBkZXNjcmlwdGlvbiB0byB0aGUgVmlzaW9CcmFpbGxlIHRleHQgdHJhbnNsYXRpb24gdGFibGUuIChzaCkKKyAgIEFkZCBGaW5uaXNoIHRleHQgdHJhbnNsYXRpb24gdGFibGVzLiAodG0sZG0pCisgICBSZW1vdmUgcGVyc29uYWwgdGV4dCB0cmFuc2xhdGlvbiB0YWJsZXMuIChkbSkKKyAgIFRoZSB0ZXh0L2F0dHJpYnV0ZXMgdHJhbnNsYXRpb24gdGFibGVzIGFyZSBub3cgZWRpdGFibGUgdGV4dCByYXRoZXIgdGhhbiBiaW5hcnkuIChucCxkbSkKKyAgIFZpYVZvaWNlIGRyaXZlciBlbmhhbmNlbWVudHM6IChkbSkKKyAgICAgIFRoZSBzcGVlZD0gYW5kIHZvbHVtZT0gZHJpdmVyIHBhcmFtZXRlcnMgYXJlIG5vdyBoYW5kbGVkIGJ5IHRoZSBwcmVmZXJlbmNlcyBtZW51LgorICAgQWRkIGEgc2tlbGV0b24gc2V0UGNtQW1wbGl0dWRlRm9ybWF0IHRvIHRoZSBzdXBwb3J0IGZvciBlYWNoIG5vbi1MaW51eCBwbGF0Zm9ybS4gKGRtKQorICAgQWRkIGEgdGFibGUgZm9yIHVuY29udHJhY3RlZCB1bmlmaWVkIEZyZW5jaCBicmFpbGxlLiAobnApCisgICBJbnRyb2R1Y2UgdGhlIHVzZXItc3BhY2UgVm95YWdlciBkcml2ZXIuIChzZCkKKyAgIE1hcCB0aGUgQWx2YSBTYXRlbGxpdGUncyB0dW1ibGVyIGtleXMuIChkbSkKKyAgIEFkZCB0aGUgY3Vyc29yRG90cygpIGZ1bmN0aW9uLiAoc2gsZG0pCisgICBBZGQgdGhlIGV4dGVuZGVkIHdyaXRlIGZlYXR1cmUgdG8gQnJsQVBJLiAoc2gpCisgICBBdXRvbWF0aWNhbGx5IHR1cm4gb2ZmIHRoZSBBbHZhIFNhdGVsbGl0ZSdzIFBST0cga2V5IHNpbXVsYXRpb24uIChkbSkKKyAgIEFkZCBhIHJvdXRpbmcgc3VjY2VlZGVkIHR1bmUuIChzZCkKKyAgIEltcGxlbWVudCB0aGUgTWlrcm9wdWhlIHNwZWVjaCBkcml2ZXIuIChkbSkKKyAgIE5vcm1hbGl6ZSB0aGUgdHVuZSBuYW1lcy4gKGRtKQorICAgRml4IHRoZSBjdXJzb3Igcm91dGluZyB0aW1lb3V0IGxvZ2ljLiAoZG0pCisgICBQbGF5IGEgdHVuZSB3aGVuIHJvdXRpbmcgZmFpbHMuIChkbSkKKyAgIGJybGFwaS5oIGRvY3VtZW50YXRpb24gZW5oYW5jZW1lbnRzOiAoc2gpCisgICAgICBDb3JyZWN0IHRoZSBleGFtcGxlIGZvciBicmxhcGlfaW5pdGlhbGl6ZUNvbm5lY3Rpb24oKS4KKyAgICAgIElsbHVzdHJhdGUgdGhlIHVzZSBvZiBicmxhcGlfc3RyZXJyb3IoKS4KKyAgIFRpZHkgdXAgdGhlIGN1cnNvciByb3V0aW5nIGNvZGUuIChkbSkKKyAgIENsZWFyIGFsbCBwZW5kaW5nIHBpZHMgd2hlbiBhIHNpbmdsZSBTSUdDSExEIGlzIHJlY2VpdmVkLiAoZG0pCisgICBNb2R1bGFyaXplIHRoZSBzdGF0dXMgY2VsbCBzZXR0aW5nIGNvZGUuIChkbSkKKyAgIEFsd2F5cyByZWNoZWNrIHRoZSBWR0EgY2hhcmFjdGVyIGNvdW50LiAoZG0pCisgICBGaXggaWZkZWYgcGxhY2VtZW50IGVycm9ycyBmb3IgZGlzYWJsaW5nIHNwZWVjaCBzdXBwb3J0LiAoZG0pCisgICBEb24ndCBpbnN0YWxsIHRoZSBBUEkncyBtYW4gcGFnZXMgd2hlbiBBUEkgaXMgZGlzYWJsZWQuIChkbSkKKyAgIENvbmZpZ3VyZSdzIG9wdGlvbiBzdW1tYXJ5IG91dHB1dCBzaG91bGQgYmUgc3ViamVjdCB0byB0aGUgLS1xdWlldCBmbGFnLiAoZG0pCisgICBJbmNsdWRlIGludHR5cGVzIHJhdGhlciB0aGFuIHN0ZGludC4gKGRtKQorICAgQWRkIGNvcmUtc3VwcG9ydGVkIG91dHB1dCBvdmVyZmxvdyBwcm90ZWN0aW9uIHRvIEFsdmEgc2VyaWFsIG91dHB1dC4gKGRtKQorICAgQWRkIHN1cHBvcnQgZm9yIHRoZSBCcmFpbGxlTGl0ZSBNMjAuIChkbSkKKyAgIEluY3JlbWVudCBCcmxBUEkncyB2ZXJzaW9uIG51bWJlciBmcm9tIDAuMS4yIHRvIDAuMi4wLiAoZG0pCisgICBBZGQgLXBpcGUgdG8gdGhlIGdjYy9nKysgY29tcGlsZSBvcHRpb25zLiAoZG0pCisgICBCcmxBUEkgZml4ZXM6IChzdCkKKyAgICAgIEdldCByaWQgb2YgYmluZGluZ3MsIDRrIGZyZWVkIGZyb20gdGhlIGxpYnJhcnkuCisgICAgICBSZW1vdmUgYnJsYXBpX2dldENvbnRyb2xsaW5nVHR5IGF2YWlsYWJpbGl0eSAoZ2V0VHR5IGRvZXMgaXQpLgorICAgICAgQWRkIHN1cHBvcnQgZm9yIFdJTkRPV0lEIChmb3IgbXVsdGlwbGV4ZXIgd2hlbiBhbiBhcHBsaWNhdGlvbiBpcyBydW5uaW5nIGluIGFuIHh0ZXJtKS4KKyAgICAgICJ1aW50MzJfdCIgLT4gImludCIgZm9yIGN1cnNvciAodG8gYWxsb3cgLTEgc3BlY2lhbCB2YWx1ZSkuCisgICAgICAidW5zaWduZWQgY2hhciJzIGZvciB3cml0ZUJybERvdHMoKS4KKyAgICAgIEFkZCBicmxhcGlfc3RyZXJyb3IoKS4KKyAgICAgIEEgc21hbGwgYnV0IGltcG9ydGFudCBmaXggaW4gYnJsYXBpX2Vycm5vX2xvY2F0aW9uKCkuCisgICAgICBSZW5hbWUgQlJMQVBJX0FVVEhOQU1FIHRvIEJSTEFQSV9BVVRIUEFUSC4KKyAgIERvY3VtZW50IHRoZSBCcmFpbGxlTm90ZSBrZXkgY29tYmluYXRpb24gZm9yIGNvbW1hbmQgbGVhcm4gbW9kZS4gKGRtKQorICAgQWRkIGF1dG9yZXBlYXQgdG8gdGhlIFBhcGVubWVpZXIgZHJpdmVyLiAoZG0pCisgICBHcm91cCB0aGUgUGFwZW5tZWllciBzdGF0dXMga2V5cyBtb3JlIHVuaWZvcm1seSBhbmQgY29udmVuaWVudGx5LiAoZG0pCisgICBBZGQgdGhlIENNRF9BVVRPUkVQRUFUIGNvbW1hbmQuIChkbSkKKyAgIERvbid0IGluY2x1ZGUgc2F2ZVByZWZlcmVuY2VzIGlmIC0tZGlzYWJsZS1wcmVmZXJlbmNlcy1tZW51IGlzIHNwZWNpZmllZC4gKGRtKQorICAgV2hlbiBpbiBsZWFybiBtb2RlIHdyaXRlICJscm4iIHRvIHRoZSBzdGF0dXMgY2VsbHMuIChkbSkKKyAgIFdoZW4gaW4gdGhlIHByZWZlcmVuY2VzIG1lbnUgd3JpdGUgInByZiIgcmF0aGVyIHRoYW4gInByZWZzIiB0byB0aGUgc3RhdHVzIGNlbGxzLiAoZG0pCisgICBFbmhhbmNlIGF1dG9zcGVhayB0byByZXNwb25kIHRvIHVzZXIgaW5wdXQgYW5kIGN1cnNvciBtb3Rpb24uIChkbSkKKyAgIFRoZSBtdXRlIGZ1bmN0aW9ucyBvZiB0aGUgRmVzdGl2YWxMaXRlIGFuZCBUaGV0YSBkcml2ZXJzIHNob3VsZCB3YWl0IHRpbGwgcmVzb3VyY2VzIGFyZSBmcmVlZC4gKGRtKQorICAgU2F5IHNwZWVjaCByYXRlL3ZvbHVtZSBjaGFuZ2VzIGFzIHRoZXkgYXJlIG1hZGUuIChkbSkKKyAgIEZlc3RpdmFsTGl0ZSBkcml2ZXI6IHJlcGxhY2Ugd3BtPSB3aXRoIHNwa19yYXRlKCkuIChkbSkKKyAgIFRoZXRhIGRyaXZlcjogcmVwbGFjZSByYXRlPSB3aXRoIHNwa19yYXRlKCkuIChkbSkKKyAgIEFkZCB0aGUgU3BlZWNoIFZvbHVtZSBwcmVmZXJlbmNlLiAoZG0pCisgICBBZGQgdGhlIENNRF9TQVlfU09GVEVSIGFuZCBDTURfU0FZX0xPVURFUiBjb21tYW5kcy4gKGRtKQorICAgQWRkIHNwa192b2x1bWUoKSB0byB0aGUgVGhldGEgZHJpdmVyLiAoZG0pCisgICBGaXgga2V5IGJpbmRpbmdzIGZvciBzcGVlY2ggY29tbWFuZHMgZm9yIFBCODAuIChzZCkKKyAgIEFkZCBzcGtfcmF0ZSgpIHRvIHRoZSBGZXN0aXZhbCBkcml2ZXIuIChkbSkKKyAgIEFkZCB0aGUgQ01EX1NBWV9TTE9XRVIgYW5kIENNRF9TQVlfRkFTVEVSIGNvbW1hbmRzLiAoZG0pCisgICBBZGQgIlNwZWVjaCBSYXRlIiB0byB0aGUgcHJlZmVyZW5jZXMgbWVudS4gKGRtKQorICAgQnJsQVBJIGZpeGVzOiAoc2gpCisgICAgICBBZGQgYnJhY2VzIHRvIGNsYXJpZnkgYW4gYW1iaWd1b3VzIGVsc2UgY2xhdXNlLgorICAgICAgQ2FsbCB0aGUgZHJpdmVyJ3MgcmVzZXQoKSBoYW5kbGVyIHdoZW4gcmF3IG1vZGUgaXMgbGVmdCBpbXByb3Blcmx5LgorICAgQ29ycmVjdCB0aGUgcmVwcmVzZW50YXRpb24gb2YgMFhDNyAodXBwZXJjYXNlIEMgd2l0aCBjZWRpbGxhKS4gKHNoKQorICAgUmVtb3ZlIHRoZSBzcHVyaW91cyAjZGVmaW5lIG9mIFBSRUZTVFlMRSBmb3IgdGhlIG51bGwgYnJhaWxsZSBkcml2ZXIuIChkbSkKKyAgIGJybF9yZXNldCgpIHNob3VsZCByZXR1cm4gYSBib29sZWFuLiAoZG0pCisgICBFdXJvQnJhaWxsZSBkcml2ZXIgdmVyc2lvbiAxLjMuMjogKHlwKQorICAgICAgUmVtYWRlIGJybF9SZWFkUGFja2V0IGFuZCBicmxfV3JpdGVQYWNrZXQgdG8gYWxsb3cgd3JpdHRpbmcgb2YgbG93LWxldmVsIHBhY2tldHMgYW5kIGVycm9yIGNvZGUgcmV0cmlldmluZy4KKyAgICAgIEZ1bGwgSXJpcyBzdXBwb3J0LgorICAgICAgSW1wbGVtZW50IGJybF9yZXNldC4KKyAgIE1vdmUgdGhlIGF1dG9yZXBlYXQgc2V0dGluZ3MgZnJvbSBjb21tYW5kIGxpbmUgb3B0aW9ucyB0byB0aGUgcHJlZmVyZW5jZXMgbWVudS4gKGRtKQorICAgQ29udmVydCBibGlua2luZyBzZXR0aW5ncyBmcm9tIHVwZGF0ZSBpbnRlcnZhbHMgdG8gZWxhcHNlZCB0aW1lLiAoZG0pCisgICBDb21tYW5kIGxlYXJuIG1vZGUgc2hvdWxkbid0IGFubm91bmNlIENNRF9OT09QLiAoZG0pCisgICBDZW50cmFsaXplIHRoZSBrbm93bGVkZ2Ugb2Ygd2hpY2ggY29tbWFuZHMgY2FuIGF1dG9yZXBlYXQuIChkbSkKKyAgIENsZWFuIHVwIHRoZSB0b2dnbGUgY29kZS4gKGRtKQorICAgYmlnNSBlbmhhbmNlbWVudHMgKGluY2x1ZGluZyBOZW1ldGggQ29kZXMpLiAoY2spCisgICBUaGUgbW9kZSBwb2ludGVyIGluIHRoZSB2aXJ0dWFsIGRyaXZlciBzaG91bGRuJ3QgYmUgZXh0ZXJuYWxseSB2aXNpYmxlLiAoZG0pCisgICBMb2cgZWFjaCBjb21tYW5kIGFzIHNvb24gYXMgaXQncyByZWNlaXZlZCBmcm9tIHRoZSBkcml2ZXIuIChkbSkKKyAgIExvZyB1bnJlY29nbml6ZWQgYW5kIHRydW5jYXRlZCBBbHZhIGlucHV0IHBhY2tldHMuIChkbSkKKyAgIEVuc3VyZSB0aGF0IGFsbCB0b2dnbGUgZGVzY3JpcHRpb25zIGFyZSBmb3JtYXR0ZWQgY29ycmVjdGx5IGZvciBsZWFybiBtb2RlLiAoZG0pCisgICBSZW5hbWUgdGhlICJWQUxfU1dJVENILi4uIiBjb25zdGFudHMgdG8gIlZBTF9UT0dHTEVfLi4uIi4gKGRtKQorICAgQ2hhbmdlIHRoZSBIYW5keVRlY2ggZHJpdmVyIHRvIHVzZSB0aGUgY29yZSdzIGF1dG9yZXBlYXQgZmFjaWxpdHkuIChkbSkKKyAgIExvZyB0aGUgY29tcGlsYXRpb24gZGF0ZSBhbmQgdGltZSBmb3IgZWFjaCBkcml2ZXIuIChkbSkKKyAgIENoYW5nZSBhbGwgZHJpdmVycyB0byByZWNvZ25pemUgcXVhbGlmaWVkIGRldmljZXMgKHNlcmlhbDosIHVzYjosIGNsaWVudDosIHNlcnZlcjopLiAoZG0pCisgICBCUkxUVFkgY29tbWFuZC1saW5lIG9wdGlvbnMgY2hhbmdlczogKGRtKQorICAgICAgUmVuYW1lIC1SICgtLXJlZnJlc2gtaW50ZXJ2YWw9KSB0byAtVSAoLS11cGRhdGUtaW50ZXJ2YWw9KS4KKyAgICAgIEFkZCAtUiAoLS1hdXRvcmVwZWF0LWRlbGF5PSkuCisgICAgICBBZGQgLXIgKC0tYXV0b3JlcGVhdC1pbnRlcnZhbD0pLgorICAgQ2hhbmdlIHRoZSBBbHZhIGRyaXZlciB0byB1c2UgdGhlIGNvcmUncyBhdXRvcmVwZWF0IHN1cHBvcnQuIChkbSkKKyAgIEFkZCBhdXRvcmVwZWF0IHN1cG9ydCB0byB0aGUgY29yZS4gKGRtKQorICAgQWx2YXMgYXV0b21hdGljYWxseSBzZW5kIGFuIGlkZW50aWZpY2F0aW9uIHBhY2tldCB3aGVuIERUUiBpcyBhc2NlcnRlZC4gKGRtKQorICAgQXJiaXRyYXJpbHkgcmV3cml0ZSB0aGUgQWx2YSBkaXNwbGF5IHdoZW5ldmVyIGEgY29uZmlndXJhdGlvbiBjaGFuZ2Ugb2NjdXJzLiAoZG0pCisgICBMb2cgdW5leHBlY3RlZCBBbHZhIGlucHV0IHBhY2tldHMuIChkbSkKKyAgIEFsdmEgU2F0ZWxsaXRlcyBjYW4gY2hhbmdlIGRpbWVuc2lvbnMgb24tdGhlLWZseS4gKGRtKQorICAgRm9yY2UgdGhlIGRlZmF1bHQgY2hvaWNlIHdoZW4gYW4gaW52YWxpZCBjaG9pY2UgaXMgbWFkZS4gKGRtKQorICAgUmVpZGVudGlmeSBhbiBBbHZhIGRpc3BsYXkgd2l0aG91dCByZXN0YXJ0aW5nIHRoZSBkcml2ZXIuIChkbSkKKyAgIERlZmluZSBmcm9udCBhbmQgdG9wIGtleSBiaW5kaW5ncyBmb3IgdGhlIEFsdmEgU2F0ZWxsaXRlIG1vZGVscy4gKGRtKQorICAgRGVmaW5lIHRoZSBhbHRlcm5hdGUgQWx2YSByb3V0aW5nIGFuZCBzdGF0dXMga2V5cy4gKGRtKQorICAgQWRkIFVTQiBzdXBwb3J0IHRvIHRoZSBBbHZhIGRyaXZlci4gKGRtKQorICAgQWRkIFVTQiBzdXBwb3J0IHRvIHRoZSBjb3JlLiAoZG0pCisgICBJbXBsZW1lbnQgdGhlIEFsYmF0cm9zcyBkcml2ZXIuIChkbSkKKyAgIENoYW5nZSB0aGUgY29weXJpZ2h0IGVuZCB5ZWFyIGZyb20gMjAwMyB0byAyMDA0LiAoZG0pCisKK0phbnVhcnkgMTUsIDIwMDQ6CisgLSBCUkxUVFkgMy40LjEgcmVsZWFzZWQ6CisgICBGaXggYW4gaW52YWxpZCBhZGRyZXNzIGNvbnZlcnNpb24uIChkbSkKKyAgIGFjY2VwdCgpIGNhbiByZXR1cm4gMC4gKHN0KQorICAgUmVzZXQgdGhlIGFkZHJlc3MgbGVuZ3RoIGJlZm9yZSBjYWxsaW5nIGFjY2VwdCgpLiAoc3QpCisgICBQYXN0aW5nIGFjY2VudGVkIGNoYXJhY3RlcnMgZG9lc24ndCB3b3JrLiAoZG0pCisgICBPbmx5IHJlbW92ZSBicmx0dHktY29uZmlnIGZyb20gUHJvZ3JhbXMgZHVyaW5nIGRpc3RjbGVhbi4gKGFoKQorCitEZWNlbWJlciAzMSwgMjAwMzoKKyAtIEJSTFRUWSAzLjQgcmVsZWFzZWQ6CisgICBBbGxvdyAtLXdpdGgtLi4uLWRyaXZlcj0gaWRlbnRpZmllcnMgdG8gYmUgcHJlZml4ZWQgd2l0aCBhIG1pbnVzIHNpZ24uIChkbSkKKyAgIFJlbW92ZSBkdXBsaWNhdGUgZmlsZXMgZnJvbSBzY3JlZW4tMy45LjExIHBhdGNoLiAoVEspCisgICBBZGQgbW9yZSBidWlsZCBvcHRpb25zIHRvIHNwZWNpZnkgZGlyZWN0b3JpZXMuIChkbSkKKyAgICAgIC0td2l0aC1wcm9ncmFtLWRpcmVjdG9yeQorICAgICAgLS13aXRoLWxpYnJhcnktZGlyZWN0b3J5CisgICAgICAtLXdpdGgtZGF0YS1kaXJlY3RvcnkKKyAgICAgIC0td2l0aC1tYW5wYWdlLWRpcmVjdG9yeQorICAgICAgLS13aXRoLWluY2x1ZGUtZGlyZWN0b3J5CisgICBTd2FwIEhhbmR5VGVjaCdzICJmcmVlemUgc2NyZWVuIiBbQjddIGFuZCAic2l4LWRvdCBicmFpbGxlIiBbQjYgQjhdIGJpbmRpbmdzLiAoZG0pCisgICBTdXBwb3J0IEhhbmR5VGVjaCBNb2R1bGFyIGFuZCBCcmFpbGxlIFN0YXIgODAga2V5cGFkLiAobWwpCisgICBPcHRpb25hbCBwYWNrYWdlcyBhcmUgYWxzbyBsb29rZWQgZm9yIGluIC9vcHQvPHBhY2thZ2UtbmFtZT4uIChkbSkKKyAgIENvbmZpZ3VyZSBzaG91bGRuJ3QgbGlzdCBleHRlcm5hbCBkcml2ZXJzIHdoZW4gbGlua2luZyBzdGF0aWNhbGx5LiAoZG0pCisgICBTdGFuZGFyZGl6ZSB0aGUgc29mdHdhcmUgc3BlZWNoIGRyaXZlciBpZGVudGlmaWNhdGlvbiBub3RpY2VzLiAoZG0pCisgICBTdXBwb3J0IGR5bmFtaWMgZXh0ZXJuYWwsIGR5bmFtaWMgaW50ZXJuYWwsIGFuZCBzdGF0aWMgbGlua2luZyBmb3IgZHJpdmVycyB3aXRoIGV4dGVybmFsIGRlcGVuZGVuY2llcy4gKGRtKQorICAgc3BrX29wZW4oKSBzaG91bGQgcmV0dXJuIGEgYm9vbGVhbiBpbmRpY2F0aW5nIHN1Y2Nlc3Mgb3IgZmFpbHVyZS4gKGRtKQorICAgQWRkIHNwa3Rlc3QuIChkbSkKKyAgIFN1cHBvcnQgdGhlIFRoZXRhIHRleHQgdG8gc3BlZWNoIGVuZ2luZS4gKGRtKQorICAgQWRkIHRoZSA0KGh1bmRyZWQpIHRvIHRoZSBuYW1lcyBvZiB0aGUgQWx2YSBEZWxwaGkgbW9kZWxzLiAoZG0pCisgICBHZXQgcmlkIG9mIC0tZGlzYWJsZS10YWludGVkLWNvbXBvbmVudHMgYnVpbGQgb3B0aW9uLiAoZG0pCisgICBBZGQgdGhlIC0td2l0aFtvdXRdLXZpYXZvaWNlIGJ1aWxkIG9wdGlvbnMuIChkbSkKKyAgIFJlbW92ZSBzZXZlcmFsIHVuc2lnbmVkL3NpZ25lZCBjaGFyIGNvbmZsaWN0cy4gKGRtKQorICAgQzkwIGRvZXNuJ3QgcGVybWl0IEMrKy1zdHlsZSAvLyBjb21tZW50cy4gKG1sLGRtKQorICAgU3VwcG9ydCB0aGUgRmVzdGl2YWwgTGl0ZSB0ZXh0IHRvIHNwZWVjaCBlbmdpbmUuIChtbCkKKyAgIEFsbG93IHRoZSAtLXdpdGgtLi4uLWRyaXZlcj0gb3B0aW9ucyB0byB0YWtlICJhbGwiIG9yIGEgY29tbWEtZGVsaW1pdGVkIGxpc3QuIChkbSkKKyAgIFRoZSBBbHZhIGRyaXZlciBzaG91bGRuJ3Qgc2V0IENSVFNDVFMgYXMgaXQgcHJldmVudHMgc29tZSBtb2RlbHMgZnJvbSBkaXNwbGF5aW5nIG91dHB1dC4gKGRtKQorICAgU3BsaXQgb3V0IEhhbmR5VGVjaCBtb2RlbCBpZGVudGlmaWNhdGlvbiBpbiBwcmVwYXJhdGlvbiBmb3IgYnVmZmVyIHJlc2l6ZSBzdXBwb3J0LiAoZG0pCisgICBCcmFpbGxlIGRyaXZlcnMgcHJvdmlkaW5nIHBhY2tldCBJL08gbXVzdCBub3cgaW1wbGVtZW50IGJybF9yZXNldCgpLiAoZG0pCisgICBBbGxvdyB0aGUgLnRibCBleHRlbnNpb24gZm9yIGF0dHJpYnV0ZXMgdHJhbnNsYXRpb24gdGFibGVzIHRvIGJlIG9wdGlvbmFsLiAoZG0pCisgICBBbGxvdyB0aGUgLmN0YiBleHRlbnNpb24gZm9yIGNvbnRyYWN0aW9uIHRhYmxlcyB0byBiZSBvcHRpb25hbC4gKGRtKQorICAgU3VwcG9ydCBkZWZhdWx0IHRhYmxlIGV4dGVuc2lvbnMgYW5kIHByZWZpeGVzIHdoZW4gY29uZmlndXJpbmcuIChkbSkKKyAgIERpc2FibGluZyBjb250cmFjdGVkIGJyYWlsbGUgZG9lc24ndCBmdWxseSBkaXNhYmxlIGl0LiAoc2QsZG0pCisgICBObyBsb25nZXIgc3VwcG9ydCBsaWJyYXJ5IG5hbWVzIGFuZCBwYXRocyBmb3IgZHJpdmVycy4gKGRtKQorICAgTWFrZSBwcml2YXRlIGdsb2JhbHMgc3RhdGljIChNaW5pQnJhaWxsZSwgUGFwZW5tZWllciwgVmlzaW9CcmFpbGxlKS4gKGRtKQorICAgUmVkdWNlIHNpemUgb2YgQlJMUEFSQU1TIHN0cnVjdHVyZSBpbiBBdmxhIGRyaXZlciB0byBzYXZlIHNwYWNlLiAobWwpCisgICBJZ25vcmUgRUlOVFIgaW50ZXJydXB0aW9uIGluIEFsdmEncyBTZW5kVG9BbHZhKCkgcm91dGluZS4gKG1sKQorICAgTWFrZSBtb3JlIHByaXZhdGUgZ2xvYmFscyBzdGF0aWMgaW4gTXVsdGlCcmFpbGxlIGRyaXZlci4gKG1sKQorICAgVXNlIHRoZSBUcmFuc2xhdGlvblRhYmxlIHR5cGVkZWYgaW4gdGhlIExvZ1RleHQgZHJpdmVyLiAobWwpCisgICBFdXJvQnJhaWxsZSBkcml2ZXIgMS4zLjE6CisgICAgICBDb3JyZWN0ZWQgQXplckJyYWlsbGUgNDAgUHJvZ3JhbW1pbmcga2V5cyBidWdzLgorICAgICAgQWRkZWQgYSBMT0dfSU8gZGVmaW5lIHRvIGxvZyBpbi9vdXQgcGFja2V0cyB0byBhIGZpbGUuCisgICAgICBTdGFydGVkIHRvIGRlYnVnIElyaXMgaWRlbnRpZmljYXRpb24gZmFpbHVyZXMgKHN0aWxsIG5vdCB3b3JraW5nIHBlcmZlY3RseSkuCisgICBNYWtlIHByaXZhdGUgZ2xvYmFscyBzdGF0aWMgKENvbWJpQnJhaWxsZSwgTXVsdGlCcmFpbGxlKS4gKG1sKQorICAgTWFrZSBwcml2YXRlIGdsb2JhbHMgc3RhdGljIChFdXJvQnJhaWxsZSwgTXVsdGlCcmFpbGxlLCBWaWRlb0JyYWlsbGUpLiAobWwpCisgICBBcHBlbmQgdGhlIGRyaXZlciBjb2RlIHRvIHRoZSBkcml2ZXIgc3ltYm9sIG5hbWUuIChkbSkKKyAgIENvbnZlcnQgdGhlIFZpZGVvQnJhaWxsZSBkcml2ZXIgdG8gdXNlIG1ha2VPdXRwdXRUYWJsZS4gKGRtKQorICAgUmV2aXZlIHRoZSBWYXJpb0hUIGRyaXZlci4gKGRtKQorICAgRml4IGhhbmdpbmcgb2YgVmFyaW8gZHJpdmVyIHdoZW4gZGlzcGxheSBpcyB0dXJuZWQgb2ZmIGFuZCBvbiBhZ2Fpbi4gKG1sKQorICAgRml4IGhhbmdpbmcgb2YgVFNJIGRyaXZlciB3aGVuIGZhbGxpbmcgYmFjayB0byA5NjAwIGJhdWQuIChkbSkKKyAgIENvbnZlcnQgdGhlIEVjb0JyYWlsbGUgZHJpdmVyIHRvIHVzZSBtYWtlT3V0cHV0VGFibGUsIG9wZW5TZXJpYWxEZXZpY2UgYW5kIHJlc2V0U2VyaWFsRGV2aWNlLiAoZG0pCisgICBSZWFycmFuZ2UgdGhlIHRfa2V5IHN0cnVjdHVyZSBpbiB0aGUgRXVyb0JyYWlsbGUgZHJpdmVyIHRvIHNhdmUgc3BhY2UuIChtbCkKKyAgIENvbnZlcnQgdGhlIE1pbmlCcmFpbGxlIGRyaXZlciB0byB1c2UgbWFrZU91dHB1dFRhYmxlIGFuZCBvcGVuU2VyaWFsRGV2aWNlLiAoZG0pCisgICBDb252ZXJ0IHRoZSBCcmFsbGVOb3RlIGRyaXZlciB0byB1c2UgbWFrZU91dHB1dFRhYmxlLiAoZG0pCisgICBDb252ZXJ0IE11bHRpQnJhaWxsZSBkcml2ZXIgdG8gdXNlIG1ha2VPdXRwdXRUYWJsZSwgb3BlblNlcmlhbERldmljZSBhbmQgcmVzZXRTZXJpYWxEZXZpY2UuIChtbCxkbSkKKyAgIFN0YXJ0aW5nIHRoZSBIYW5keVRlY2ggZHJpdmVyIGdvYmJsZXMgYSBmaWxlIGRlc2NyaXB0b3IgaWY6CisgICAgICBtb2RlbCBkZXRlY3Rpb24gZmFpbHMgKG1sKQorICAgICAgcmVzZXR0aW5nIHRoZSBkZXZpY2UgZmFpbHMgKGRtKQorICAgQ29udmVydCB0aGUgTURWIGRyaXZlciB0byB1c2Ugb3BlblNlcmlhbERldmljZSBhbmQgcmVzZXRTZXJpYWxEZXZpY2UuIChtbCxkbSkKKyAgIENvbnZlcnQgdGhlIFZpc2lvQnJhaWxsZSBkcml2ZXIgdG8gdXNlIG9wZW5TZXJpYWxEZXZpY2UgYW5kIHJlc2V0U2VyaWFsRGV2aWNlLiAobWwsZG0pCisgICBUaGUgT19OT0NUVFkgZmxhZyBzaG91bGRuJ3QgYmUgdXNlZCB3aGVuIG9wZW5pbmcgdGhlIFZveWFnZXIgZGV2aWNlLiAoZG0pCisgICBDb252ZXJ0IHRoZSBFdXJvQnJhaWxsZSBkcml2ZXIgdG8gdXNlIG9wZW5TZXJpYWxEZXZpY2UgYW5kIHJlc2V0U2VyaWFsRGV2aWNlLiAobWwpCisgICBDb252ZXJ0IHRoZSBBbHZhIGRyaXZlciB0byB1c2Ugb3BlblNlcmlhbERldmljZSBhbmQgcmVzZXRTZXJpYWxEZXZpY2UuIChtbCxkbSkKKyAgIENvbnZlcnQgdGhlIFZhcmlvIGRyaXZlciB0byB1c2Ugb3BlblNlcmlhbERldmljZSBhbmQgcmVzZXRTZXJpYWxEZXZpY2UuIChtbCxkbSkKKyAgIENvbnZlcnQgdGhlIEJyYWlsbGVMaXRlIGRyaXZlciB0byB1c2Ugb3BlblNlcmlhbERldmljZSBhbmQgcmVzZXRTZXJpYWxEZXZpY2UuIChkbSkKKyAgIFJlcGxhY2UgaW50ZXJuYWwgVFNJIGRyaXZlciBTZXRTcGVlZCgpIHJvdXRpbmUgd2l0aCByZXNldFNlcmlhbERldmljZSgpLiAobWwpCisgICBPcGVuaW5nIGEgc2VyaWFsIGRldmljZSBzaG91bGRuJ3QgaGFuZyBpZiBDTE9DQUwgaXNuJ3Qgc2V0LiAoZG0pCisgICBDb252ZXJ0IHRoZSBUU0kgZHJpdmVyIHRvIHVzZSBvcGVuU2VyaWFsRGV2aWNlKCkuIChkbSkKKyAgIFVwZGF0ZSBiaWc1LmN0Yi4gKGNrKQorICAgQWRkIHRoZSBwYXRjaCBmb3Igc2NyZWVuLTQuMC4xLiAocmIpCisgICBBZGQgcGFja2V0IEkvTyB0byB0aGUgSGFuZHlUZWNoIGRyaXZlci4gKGRtKQorICAgQ2hhbmdlcyB0byBzdXBwb3J0IE9wZW5CU0QuIChtbCxkbSkKKyAgIEFkZCBzdXBwb3J0IGZvciBIYW5keVRlY2gncyBCcmFpbGxpbm8uIChtbCxkbSkKKyAgIEFkZCBhIGZ1bGwgbGlzdCBvZiBjb3VudHJ5IGNvZGVzIHRvIGVuLXVzLWcyLmN0YiBhcyBsaXRlcmFsLiAobWwpCisgICBJbXBsZW1lbnQgY29udHJhY3Rpb24gdGFibGUgb3Bjb2RlIDI2IChsb2NhbGUpLiAoZG0pCisgICBEb2N1bWVudCBob3cgdG8gdXNlIHN0b3cgdG8gbWFpbnRhaW4gbXVsdGlwbGUgcmVsZWFzZXMgb2YgQlJMVFRZLiAoYmQpCisgICBicmxhcGlfZ2V0Q29udHJvbGxpbmdUdHkoKSBub3cgY2hlY2tzIGJhY2sgdGhyb3VnaCBwYXJlbnQgcHJvY2Vzc2VzIHVudGlsIGEgcmVhbCB0dHkgaXMgZm91bmQuIChtbCxkbSkKKyAgIEFkZCB0YXJnZXRzIGZvciBjb21waWxpbmcgYW5kIHVuY29tcGlsaW5nIHRleHQgdHJhbnNsYXRpb24gdGFibGVzLiAobWwpCisgICBBc3N1bWUgYSBkaXJlY3QtdGhyb3VnaCBtYXBwaW5nIGlmIHRoZXJlIGlzIG5vIHNjcmVlbiBmb250IG1hcC4gKG1sLGRtKQorICAgRW5oYW5jZSB0aGUgSU5JVF9QQVRIIG1lY2hhbmlzbTogKG5wKQorICAgICAgSGFuZGxlIGJlaW5nIGludm9rZWQgYXMgbGludXhyYy4KKyAgICAgIEhhbmRsZSBvdGhlciBjb21tYW5kcywgZS5nLiB0ZWxpbml0LCBiZWluZyB3YXlzIHRvIGludm9rZSBpbml0LgorICAgRXVyb0JyYWlsbGUgZHJpdmVyIDEuMzogKHlwKQorICAgICAgUmVkdWNlZCBjb2RlIHNpemUuCisgICAgICBCcmxBUEkgY29tcGF0aWJsZS4KKyAgICAgIFRyYW5zZmVyIHJvdXRpbmVzIG1vdmVkIHRvIHNlcGFyYXRlIHByb2dyYW0uCisgICAgICBDb3JyZWN0ZWQgYnVncyB3aGVuIHVzaW5nIGFuIElyaXMtNDAgKHN0aWxsIG5vdCBwZXJmZWN0KS4KKyAgIENoYW5nZSB0aGUgY29uZmlndXJlIGRlZmF1bHQgZm9yIEJybEFQSSB0byBlbmFibGVkLiAoZG0pCisgICBQdXQgJWNvbmZpZyBhbmQgJXZlcmlmeSBmb3IgYnJsdHR5LmNvbmYgb24gdGhlIHNhbWUgbGluZSBpbiB0aGUgcnBtIHNwZWMgZmlsZS4gKGRtKQorICAgRGVsYXkgYWZ0ZXIgcmVjZWl2aW5nIGEgUGFwZW5tZWllciBpZGVudGl0eSBwYWNrZXQgdG8gYWxsb3cgdGhlIGRpc3BsYXkgdGltZSB0byBiZWNvbWUgZnVsbHkgcmVhZHkuIChkbSkKKyAgIEFkZCB0aGUgdmlydHVhbCBicmFpbGxlIGRpc3BsYXkgZHJpdmVyLiAobWwpCisgICBJbnRyb2R1Y2UgYnJsdHR5LWNvbmZpZyBhbmQgdXNlIGl0IGZyb20gYnJsdHR5LWluc3RhbGwuIChkbSkKKyAgIEFkZCBDTURfTEVBUk4gdG8gdGhlIFBhcGVubWVpZXIgZHJpdmVyLiAoZG0pCisgICBBbGxvdyBQUkRJRkxOL05YRElGTE4gdG8gbW92ZSB1cC9kb3duIGluIHRoZSBwcmVmZXJlbmNlcyBtZW51LiAoZG0pCisgICBEb24ndCByZXBvcnQgbm9uLWV4aXN0ZW50IGRpcmVjdG9yaWVzIHdoZW4gdW5pbnN0YWxsaW5nLiAoZG0pCisgICBSZWR1Y2UgdGhlIGxvZyBmb3IgZmFpbHVyZSB0byBzZXQgdGhlIHdvcmtpbmcgZGlyZWN0b3J5IHRvIGEgd2FybmluZy4gKGRtKQorICAgQWRkIC8gYXMgYW4gYWRkaXRpb25hbCBiYWNrdXAgd29ya2luZyBkaXJlY3RvcnkuIChkbSkKKyAgIE1ha2UgdGhlIGRpcmVjdG9yeSBmb3IgZHJpdmVyIGhlbHAsIGRyaXZlciBjb25maWd1cmF0aW9uLCBhbmQgZHJpdmVyIGxpc3RzIHNwZWNpZmlhYmxlLiAoZG0pCisgICAgICB0aGUgLUQgKC0tZGF0YS1kaXJlY3Rvcnk9KSBjb21tYW5kIGxpbmUgb3B0aW9uCisgICAgICB0aGUgZGF0YS1kaXJlY3RvcnkgY29uZmlndXJhdGlvbiBmaWxlIGRpcmVjdGl2ZQorICAgICAgdGhlIEJSTFRUWV9EQVRBX0RJUkVDVE9SWSBlbnZpcm9ubWVudCB2YXJpYWJsZQorICAgTWFrZSB0aGUgZGlyZWN0b3J5IGZvciB0ZXh0IGFuZCBhdHRyaWJ1dGVzIHRhYmxlcyBzcGVjaWZpYWJsZS4gKGRtKQorICAgICAgdGhlIC1UICgtLXRhYmxlcy1kaXJlY3Rvcnk9KSBjb21tYW5kIGxpbmUgb3B0aW9uCisgICAgICB0aGUgdGFibGVzLWRpcmVjdG9yeSBjb25maWd1cmF0aW9uIGZpbGUgZGlyZWN0aXZlCisgICAgICB0aGUgQlJMVFRZX1RBQkxFU19ESVJFQ1RPUlkgZW52aXJvbm1lbnQgdmFyaWFibGUKKyAgIE1ha2UgdGhlIGRpcmVjdG9yeSBmb3IgY29udHJhY3Rpb24gdGFibGVzIHNwZWNpZmlhYmxlLiAoZG0pCisgICAgICB0aGUgLUMgKC0tY29udHJhY3Rpb25zLWRpcmVjdG9yeT0pIGNvbW1hbmQgbGluZSBvcHRpb24KKyAgICAgIHRoZSBjb250cmFjdGlvbnMtZGlyZWN0b3J5IGNvbmZpZ3VyYXRpb24gZmlsZSBkaXJlY3RpdmUKKyAgICAgIHRoZSBCUkxUVFlfQ09OVFJBQ1RJT05TX0RJUkVDVE9SWSBlbnZpcm9ubWVudCB2YXJpYWJsZQorICAgVGhlICJicmFpbGxlIGRyaXZlciBpbml0aWFsaXphdGlvbiBmYWlsZWQiIGxvZyBmaWxscyAvdmFyIHdoZW4gdGhlIGRpc3BsYXkgaXNuJ3QgY29ubmVjdGVkLiAoZG0pCisKK1NlcHRlbWJlciAxLCAyMDAzOgorIC0gQlJMVFRZIDMuMy4xIHJlbGVhc2VkOgorICAgQ29ycmVjdCB0aGUgZGVzY3JpcHRpb24gb2Ygd2hpY2ggY29tbWFuZHMgYXJlIHVubWFza2VkIGJ5IGRlZmF1bHQuIChzdCkKKyAgIEJ1aWxkIGZhaWxzIHdpdGggc3RhbmRhbG9uZS1wcm9ncmFtcyBhbmQgYnJhaWxsZS1kcml2ZXI9dmQsdmguIChkbSkKKyAgIExvZyAiYnJhaWxsZSBkcml2ZXIgaW5pdGlhbGl6YXRpb24gZmFpbGVkIiBmaWxscyAvdmFyIHdoZW4gZGlzcGxheSBub3QgY29ubmVjdGVkLiAoZG0pCisKK0F1Z3VzdCA0LCAyMDAzOgorIC0gQlJMVFRZIDMuMyByZWxlYXNlZDoKKyAgIExldCBycG0gZGV0ZXJtaW5lIHJlcXVpcmVtZW50cy4gKGRtKQorICAgUGFwZW5tZWllciBkcml2ZXIgZW5oYW5jZW1lbnRzOiAoZG0sYmQpCisgICAgICBXcml0ZSBwYWNrZXQgYXMgc2luZ2xlIG9wZXJhdGlvbiByYXRoZXIgdGhhbiBpbiAzIHBhcnRzIChoZWFkZXIsIGRhdGEsIHRyYWlsZXIpLgorICAgICAgTG9nIG91dHB1dCBwYWNrZXRzLgorICAgICAgTG9nIGZ1bGwgaWRlbnRpdHkgcGFja2V0IHJhdGhlciB0aGFuIGp1c3QgZmlyc3QgNCBieXRlcy4KKyAgIENvbmZpZ3VyaW5nIHdpdGggLS13aXRob3V0LXNjcmVlbi1kcml2ZXIgbm93IHVzZXMgc2NyX251bGwuIChkbSkKKyAgIFJlbW92ZSB0aGUgdXNlIG9mIHNjaGVkX3lpZWxkKCkgdG8gcmVzdG9yZSB0b25lIGxlbmd0aCBhY2N1cmFjeS4gKG5wKQorICAgQWRkIHRoZSAiU2F5LUxpbmUgTW9kZSIgKEltbWVkaWF0ZSwgRW5xdWV1ZSkgcHJlZmVyZW5jZS4gKG5wLGRtKQorICAgUmVuYW1lIHRoZSBkZWZhdWx0IGZvciB0aGUgTGludXggc2NyZWVuIGRyaXZlciBvcHRpb24gYWNtIGZyb20gZGVmYXVsdCB0byBhdXRvLiAoZG0pCisgICBObyBsb25nZXIgc3RyaXAgZXhlY3V0YWJsZXMgaW4gdGhlIGJ1aWxkIHRyZWUuIChkbSkKKyAgIENvbXBpbGUgYWxsIGRyaXZlcnMgZXZlbiBpZiBidWlsdC1pbiBvbmVzIGFyZSBjb25maWd1cmVkLiAoZG0pCisgICBBZGQgdGhlIC1MICgtLWxpYnJhcnktZGlyZWN0b3J5PSkgb3B0aW9uIHRvIGJybHR0eSBhbmQgYnJsdGVzdC4gKGRtKQorICAgV3JhcCBsb25nIG91dHB1dCBsaW5lcyBmcm9tIGNvbmZpZ3VyZSAtLWhlbHAuIChkbSkKKyAgIEVuaGFuY2VtZW50cyB0byBlbi11cy1nMiBjb250cmFjdGlvbiB0YWJsZS4gKGpiKQorICAgQnJhaWxsZSBMaXRlIGRyaXZlciBlbmhhbmNlbWVudHM6IChkbSkKKyAgICAgIFNvbWUgaW5pdGlhbGl6YXRpb24gZmFpbHVyZXMgZ29iYmxlIHJlc291cmNlcy4KKyAgICAgIEFkZCBNaWxsZW5uaXVtIHN1cHBvcnQgKHdoaXogd2hlZWxzLCBhZHZhbmNlIGJhciBjb21iaW5hdGlvbnMpLgorICAgICAgQ2hhbmdlIGtleWJvYXJkIGVtdWxhdGlvbiBtb2RlIGRlZmF1bHQgZnJvbSBvZmYgdG8gb24uCisgICAgICBBbGxvdyBjaG9yZGVkIGtleWJvYXJkIGlucHV0IHdoZW4gbm90IGluIGtleWJvYXJkIGVtdWxhdGlvbiBtb2RlLgorICAgQ2hlY2sgZm9yIHRoZSBwb3coKSBmdW5jdGlvbiBkdXJpbmcgYXV0b2NvbmYuIChkbSkKKyAgIFRoZSBnbG9iYWwgdmFyaWFibGUgbGFuZ3VhZ2VDb3VudCBpbiB0aGUgVmlhVm9pY2Ugc3BlZWNoIGRyaXZlciBpc24ndCB1c2VkLiAoZG0pCisgICBBZGQgYmFzaWMgc3VwcG9ydCBmb3IgR25vcGVybmljdXMuIChtbCkKKyAgIGF1dG9nZW4uc2ggaW52b2tlcyBhdXRvY29uZiAob3ZlcnJpZGFibGUgYnkgJEJSTFRUWV9BVVRPQ09ORikgaW5zdGVhZCBvZiBhdXRvY29uZi0yLjUzLiAoZG0pCisgICBDbGVhbiB1cCB0aGUgbWFrZSBmaWxlIGluIHRoZSBEb2N1bWVudHMgc3ViZGlyZWN0b3J5LiAoZG0pCisgICBSZW1vdmUgdGhlIEdlcm1hbiBCUkxUVFkgbWFudWFsIHNpbmNlIGl0J3Mgc28gb3V0LW9mLWRhdGUuIChkbSkKKyAgIFN0YXJ0IGltcGxlbWVudGluZyB0aGUgQXV0b3NwZWFrIHByZWZlcmVuY2UuIChkbSkKKyAgIFJFQURNRS5EZWJpYW4gc3RpbGwgaGFkIHJlZmVyZW5jZXMgdG8gL3NiaW4vYnJsdHR5IChub3cgaW4gL2JpbikuIChzaCkKKyAgIE1ha2UgdGhlIHRpbWluZyByb3V0aW5lcyBtb3JlIHJvYnVzdC4gKGRtKQorICAgU3RvcCBjb25zb2xlIHRvbmVzIGF1dG9tYXRpY2FsbHkgaWYgdGhlIHN5c3RlbSBpcyB0b28gc2xvdy4gKGRtKQorICAgQ29udmVydCB0aGUgc2NyZWVuIGRyaXZlcnMgZnJvbSBDKysgdG8gQy4gKGRtKQorICAgQWRkIHRoZSAtbiwgLWQgYW5kIC1vIG9wdGlvbnMgdG8gYnAyY2YgZm9yIGRldmljZSBwYXRoIHRyYW5zbGF0aW9uLiAoZG0pCisgICBBIGZldyBjaGFuZ2VzIHRvIHRleHQuZGEtMTI1Mi50YmwgYnkgU3ZlbmQgYW5kIGhpcyBncm91cC4gKGhzKQorICAgUmVkdWNlIEhhbmR5VGVjaCBkcml2ZXIgZGF0YSBzZWdtZW50IHNpemUuIChtbCkKKyAgIFJlZHVjZSBQYXBlbm1laWVyIGRyaXZlciBkYXRhIHNlZ21lbnQgc2l6ZSB3aGVuIGNvbmZpZ3VyYXRpb24gZmlsZSBzdXBwb3J0IG5vdCBpbmNsdWRlZC4gKG1sKQorICAgYnAyY2Ygbm93IHJlY29yZHMgdGhlIGJvb3QgcGFyYW1ldGVyIGluIHRoZSBjb25maWd1cmF0aW9uIGZpbGUgaGVhZGVyLiAoZG0pCisgICBJbnN0YWxsaW5nIHRoZSBycG0gbm93IHVwZGF0ZXMgYnJsdHR5LmNvbmYgYWNjb3JkaW5nIHRvIHRoZSBib290IHBhcmFtZXRlci4gKGRtKQorICAgYnAyY2YgaW50ZXJwcmV0ZWQgdGhlIGJvb3QgcGFyYW1ldGVyIGluY29ycmVjdGx5IGlmIGl0IGNvbnRhaW5lZCBubyBjb21tYXMuIChkbSkKKyAgIEFkZCB0aGUgLWYsIC1jLCAtdSwgLXAsIGFuZCAtaCBvcHRpb25zIHRvIGJwMmNmLiAoZG0pCisgICBNb3ZlIHRoZSBkZWZhdWx0IGluc3RhbGwgbG9jYXRpb24gZm9yIHRoZSBBUEkgbGlicmFyeSBmcm9tIC9saWIgdG8gL3Vzci9saWIuIChkbSkKKyAgIEltcHJvdmUgYnJsdHR5LWluc3RhbGwncyBwcm9ncmVzcyBtZXNzYWdlcy4gKGRtKQorICAgYnJsdHR5LWluc3RhbGwgbm93IGNvcGllcyBicmx0dHkuY29uZiBpZiBpdCBleGlzdHMuIChkbSkKKyAgIENsZWFuIHVwIHRoZSBycG0gc3BlYyBmaWxlLiAoZG0pCisgICBNb3ZlIGRlZmF1bHQgaW5zdGFsbCBkaXJlY3RvcnkgZm9yIG1hbiBwYWdlcyBmcm9tIC9tYW4gdG8gL3Vzci9zaGFyZS9tYW4uIChkbSkKKyAgIFJlbmFtZSBpbnN0YWxsLWJybHR0eSB0byBicmx0dHktaW5zdGFsbC4gKGRtKQorICAgRXVyb0JyYWlsbGUgZHJpdmVyIGVuaGFuY2VtZW50czogWWFubmljayBQbGFzc2lhcmQgPHBsYXNzaV95QGVwaXRhLmZyPgorICAgICAgRG9jdW1lbnQgY3V0JnBhc3RlIGluIFJFQURNRS4KKyAgICAgIEluaXRpYWwgc3VwcG9ydCBmb3IgZmlsZSB0cmFuc2Zlci4KKyAgICAgIFNldmVyYWwgYnVnIGZpeGVzLgorICAgSW1wbGVtZW50IGJybGFwaS4gU8OpYmFzdGllbiBIaW5kZXJlciA8U2ViYXN0aWVuLkhpbmRlcmVyQGVucy1seW9uLmZyPiArIFNhbXVlbCBUaGliYXVsdCA8U2FtdWVsLlRoaWJhdWx0QGVucy1seW9uLmZyPgorICAgQ29yZSBjaGFuZ2VzIHRvIHN1cHBvcnQgYmlnNS5jdGI6IChkbSkKKyAgICAgIENoYW5nZSBjdGIgb3Bjb2RlICJpZ25vcmUiIHRvICJyZXBsYWNlIi4KKyAgIEFkZCB0YWJsZSBmb3IgQ2hpbmVzZSBiaWc1IGNoYXJhY3RlciBzZXQgKGJpZzUuY3RiKS4gU2FtdWVsIFlhbmcgPG1pc29uQGJicy5lZS5udHUuZWR1LnR3PgorICAgQWRkIEN6ZWNoIHRleHQgdGFibGUgKHRleHQuY3oudGJsKS4gSmFuIEJ1Y2hhbCA8YnVjaGFsQGJyYWlsY29tLm9yZz4KKyAgIEFkZCBhbGVydCBtZXNzYWdlcyBwcmVmZXJlbmNlLiAoZG0pCisgICBWaXNpb0JyYWlsbGUgZHJpdmVyIGVuaGFuY2VtZW50cy4gU8OpYmFzdGllbiBIaW5kZXJlciA8U2ViYXN0aWVuLkhpbmRlcmVyQGVucy1seW9uLmZyPgorICAgSUE2NCBzaXplb2YgcmV0dXJucyBhIGxvbmcgYW5kIG5lZWRzIGEgbG9uZyBwcmludGYgZm9ybWF0LiAoZG0pCisgICBNYWtlIGluc3RhbGwgbm8gbG9uZ2VyIGluc3RhbGxzIHVubmVlZGVkIHRhYmxlcy4gKGRtKQorICAgICAgKC0td2l0aG91dC10ZXh0LXRhYmxlLCAtLXdpdGhvdXQtYXR0cmlidXRlcy10YWJsZSwgLS1kaXNhYmxlLWNvbnRyYWN0ZWQtYnJhaWxsZSkKKyAgIENoYW5nZSB0ZXh0LXRhYmxlIGRlZmF1bHQgZnJvbSB1cyB0byBuYWJjYyBpbiBicmx0dHkuY29uZi4gKGRtKQorCitGZWJydWFyeSAzLCAyMDAzOgorIC0gQlJMVFRZIDMuMiByZWxlYXNlZDoKKyAgIFJ1c3NpYW4gdGV4dCB0YWJsZSAodGV4dC5ydS50YmwpIGJhc2VkIG9uIGtvaTgtci4gSGFucyBTY2hvdSA8Y2hsb3JAc2Nob3UuZGs+CisgICBNYW4gcGFnZSAoYnJsdHR5LjEpLiAoZG0pCisgICBGaXhlZCBQYXBlbm1laWVyIGVhc3kgYWNjZXNzIGJhciBzdXBwb3J0LiAoZG0pCisgICBTcGVlY2ggY2hhbmdlczogKGRtKQorICAgICAgQ01EX1NBWSByZW5hbWVkIHRvIENNRF9TQVlfTElORS4KKyAgICAgIENNQ0RfU0FZQUxMIHJlbmFtZWQgdG8gQ01EX1NBWV9CRUxPVy4KKyAgICAgIENNRF9TQVlfQUJPVkUgYWRkZWQuCisgICBQYXBlbm1laWVyIGRyaXZlciByb2J1c3RuZXNzIGVuaGFuY2VtZW50cy4gKGRtKQorICAgVHlwZSBjaGFyIGlzIHVuc2lnbmVkIG9uIGFybSwgcG93ZXJwYyBhbmQgczM5MC4gKGRtKQorICAgICAgSGFuZHlUZWNoL2JyYWlsbGUuYyAoa2V5cy5jb2x1bW4sIGtleXMuc3RhdHVzKQorICAgICAgVmlkZW9CcmFpbGxlL3ZibG93LmMgKEJyQnV0dG9ucykKKyAgIEFkZGVkIC0tZGlzYWJsZS1zcGVlY2gtc3VwcG9ydC4gKGRtKQorICAgQWRkZWQgLS1kaXNhYmxlLXRhaW50ZWQtY29tcG9uZW50cy4gKGRtKQorICAgVXBkYXRlZCBjb25maWcuZ3Vlc3MgYW5kIGNvbmZpZy5zdWIgKGZyb20gYXV0b21ha2UtMS41KS4gKGRtKQorICAgVXBkYXRlZCBWaXNpb0JyYWlsbGUgZHJpdmVyLiBTw6liYXN0aWVuIEhpbmRlcmVyIDxTZWJhc3RpZW4uSGluZGVyZXJAZW5zLWx5b24uZnI+CisgICBTdXBwb3J0IGJ1aWxkaW5nIGluIGFub3RoZXIgZGlyZWN0b3J5LiAoZG0pCisgICBGaXggTGludXggTUlESSBkZXZpY2UgaW5pdGlhbGl6YXRpb24uIChkbSkKKyAgIEFkZCBjb3JlIHN1cHBvcnQgZm9yIHZpc3VhbCBkaXNwbGF5cy4gKGRtKQorICAgUmVuYW1lZCBoZWxwIHNvdXJjZSBmcm9tIGJybHR0eWgqLnR4dCB0byBoZWxwKi50eHQuIChkbSkKKyAgIEFkZGVkIC0tZGlzYWJsZS1wbS1jb25maWdmaWxlLiAoZG0pCisgICBBZGRlZCBicmFpbGxlIGRpc3BsYXkgcmVzaXplIG1lY2hhbmlzbS4gKGRtKQorICAgTW92ZWQgYnJsLT5idWZmZXIgYWxsb2NhdGlvbiBmcm9tIGRyaXZlciB0byBjb3JlLiAoZG0sc2QpCisgICAgICAoYWxsIGJ1dDogTG9nVGV4dCwgVmFyaW8pCisgICBCcmFpbGxlIGRyaXZlciBjaGFuZ2VzLiAoZG0pCisgICAgICBSZW5hbWVkIHR5cGUgYnJsZGltIHRvIEJyYWlsbGVEaXNwbGF5LgorICAgICAgUmVuYW1lZCBmaWVsZCBicmwtPmRpc3AgdG8gYnJsLT5idWZmZXIuCisgICAgICBSZW5hbWVkIHJvdXRpbmUgYnJsX2luaXRpYWxpemUgdG8gYnJsX29wZW4uCisgICAgICBSZW5hbWVkIHJvdXRpbmUgYnJsX3JlYWQgdG8gYnJsX3JlYWRDb21tYW5kLgorICAgICAgYnJsX29wZW4gc3VjY2VzcyBub3cgZGV0ZXJtaW5lZCBieSByZXR1cm5lZCBib29sZWFuLgorICAgICAgUmVvcmRlcmVkIGJybF9vcGVuIHBhcmFtZXRlcnMgdG8gcHV0IEJyYWlsbGVEaXNwbGF5IGZpcnN0LgorICAgICAgVXNlIGJybC0+aGVscFBhZ2UgaW5zdGVhZCBvZiBzZXRIZWxwUGFnZU51bWJlcigpLgorICAgICAgUGFzcyBCcmFpbGxlRGlzcGxheSB0byByZWFkQ29tbWFuZCBhbmQgd3JpdGVTdGF0dXMuCisgICBTdXBwb3J0IGJvb3QgcGFyYW1ldGVycyAoYnJsdHR5PWRyaXZlcixkZXZpY2UsdGFibGUpLgorICAgQWxsb3cgb3B0aW9uIG9wZXJhbmQgc2hvcnRjdXRzLiAoZG0pCisgICAgICBSZWxhdGl2ZSBkZXZpY2UgcGF0aHMgYXJlIGFuY2hvcmVkIGF0IC9kZXYuCisgICAgICBUaGUgLnRibCB0YWJsZSBleHRlbnNpb24gaXMgb3B0aW9uYWwuCisgICAgICBUaGUgdGV4dC4gdGV4dCB0YWJsZSBwcmVmaXggaXMgb3B0aW9uYWwgd2l0aCBubyBkaXJlY3RvcnkuCisgICBOb3JtYWxpemUgdHJhbnNsYXRpb24gdGFibGUgbmFtZXMuIChkbSkKKyAgICAgIGZyZW5jaC0+ZnIgZ2VybWFuLT5kZSBwbC1pc28wMi0+cGwgc3dlZGVuPXNlMSBzd2VkaXNoPXNlMgorICAgQWRkZWQgTG9nVGV4dCBkcml2ZXIgaGVscCBmaWxlLiBIYW5zIFNjaG91IDxjaGxvckBzY2hvdS5kaz4KKyAgIEZpeGVkIExvZ1RleHQgaW5wdXQvb3V0cHV0IHRyYW5zbGF0aW9uIGZvciBibGFuaywgTlVMLCBhbmQgMFhGRi4gSGFucyBTY2hvdSA8Y2hsb3JAc2Nob3UuZGs+CisgICBCZXR0ZXIgRGFuaXNoIHRyYW5zbGF0aW9uIHRhYmxlcy4gSGFucyBTY2hvdSA8Y2hsb3JAc2Nob3UuZGs+CisgICBSUE0gbm93IGNvcnJlY3RseSBidWlsZHMgYnkgbm9uLXJvb3QgdXNlci4gTWF0dGhldyBNaWxsZXIgPG1hdHRkbUBtYXR0ZG0ub3JnPgorICAgRGVmaW5lIG1vcmUgQWx2YSBtb2RlbHMuIChkbSkKKyAgICAgIERlbHBoaSA0MjAsIDQ0MCBEZXNrdG9wOyBTYXRlbGxpdGUgNTg0IFBybywgNTQ0IFRyYXZlbGxlcgorICAgTW92ZSBkZXZpY2UgY3JlYXRpb24gZnJvbSB0aGUgbWFrZSBmaWxlIHRvIHRoZSBMaW51eCBzY3JlZW4gZHJpdmVyLiAoZG0pCisgICBSZW1vdmUgdGhlIC0td2l0aC1zY3JlZW4tZGV2aWNlIGJ1aWxkIG9wdGlvbi4gKGRtKQorICAgV2l0aCBkZXZmcywgL2Rldi90dHkwIGlzIC9kZXYvdmMvMC4gKGRtKSArIFRhcGlvIEtlbGxvbmllbWkKKyAgIFZlcmlmeSB0aGF0IC9kZXYvdmNzYSAob3IgZXF1aXZhbGVudCkgaXMgY2hhcmFjdGVyIHNwZWNpYWwuIChkbSkKKyAgIFZlcnNpb24gMS4yIG9mIHRoZSBFdXJvQnJhaWxsZSBkcml2ZXIuIFlhbm5pY2sgUExBU1NJQVJEIDxwbGFzc2lfeUBlcGl0ZWNoLm5ldD4KKyAgICAgIChjb2RlIGNsZWFudXAsIG5ldyBtb2RlbHMsIExDRCBkaXNwbGF5KQorICAgQWRkIGNiaWZzIHRleHQgdGFibGUuIFlhbm5pY2sgUExBU1NJQVJEIDxwbGFzc2lfeUBlcGl0ZWNoLm5ldD4KKyAgIEFkZCBhIHNldHRpbmdzIHN1bW1hcnkgdG8gdGhlIGVuZCBvZiB0aGUgLi9jb25maWd1cmUgb3V0cHV0LiAoZG0sc2QpCisgICBJbXBsZW1lbnQgYSBzZXBhcmF0ZSBzZXR0YWJsZSB2b2x1bWUgbGV2ZWwgZm9yIGVhY2ggdHVuZSBkZXZpY2UuIChkbSkKKyAgIExvZyB0dW5lIGRldmljZSBvcGVuIGVycm9ycyB3aXRoIExPR19ERUJVRy4gKGRtLHNkKQorICAgSW4gdGhlIHByZWZlcmVuY2VzIG1lbnUsIHNob3cgZWFjaCAtLWRpc2FibGUtZWQgdHVuZSBkZXZpY2UgYXMgInVuc3VwcG9ydGVkIi4gKGRtLHNkKQorICAgU3BsaXQgc2NyX2Jhc2UuaC9jYyBpbnRvIGEgc2VwYXJhdGUgaGVhZGVyIGFuZCBzb3VyY2UgZm9yIGVhY2ggY2xhc3MuIChkbSkKKyAgIENvbXBsZXRlIHRoZSBjb252ZXJzaW9uIGZyb20gdG9uZXMgdG8gbm90ZXMuIChkbSkKKyAgIFJhdGlvbmFsaXplL25vcm1hbGl6ZSB0aGUgdHVuZSBkZXZpY2UgbmFtZXMuIChkbSxzZCkKKyAgICAgIHNwZWFrZXItPmJlZXBlciBkYWMtPnBjbSBhZGxpYi0+Zm0KKyAgIEVuaGFuY2VtZW50cyB0byBlbi11cy1nMiBjb250cmFjdGlvbiB0YWJsZS4gSm9obiBCb3llciA8ZGlyZWN0b3JAY2hwaS5vcmc+CisKK09jdG9iZXIgMzAsIDIwMDI6CisgLSBCUkxUVFkgMy4xIHJlbGVhc2VkIChub3RlIG1vdmUgZnJvbSAvc2JpbiB0byAvYmluKToKKyAgIFNpZ25pZmljYW50bHkgcmVkdWNlZCBzY3JlZW4tMy45LjExIHBhdGNoIHNpemUuIFJpY2ggQnVycmlkZ2UgPFJpY2guQnVycmlkZ2VAU3VuLkNPTT4KKyAgIFVzZSAoaW50KSBpbnN0ZWFkIG9mIHJpbnQoKSB0byBlbGltaW5hdGUgdGhlIG5lZWQgZm9yIERPX0M5OV9NQVRICisgICAgICB3aGVuIGJ1aWxkaW5nIGFnYWluc3QgdUNsaWJjLiAobnApICsgKGRtKQorICAgSG9yaXpvbnRhbCB3aW5kb3cgcGxhY2VtZW50IGR1cmluZyBjdXJzb3IgdHJhY2tpbmcgd2l0aCBzbGlkaW5nIHdpbmRvdyBvZmYKKyAgICAgIHNob3VsZCBiZSByZWxhdGl2ZSByYXRoZXIgdGhhbiBhYnNvbHV0ZS4gKGRtKQorICAgQWRkIHRleHQgdHJhbnNsYXRpb24gdGFibGUgZm9yIHZuaSAoVmlldG5hbWVzZSkuIFRodSBUcmFuZyA8cGhhbXRyYW5nMjAwMkBzb2Z0aG9tZS5uZXQ+CisgICBJbXBsZW1lbnQgYXR0cmlidXRlIHZpZXdpbmcgYW5kIGF0dHJpYnV0ZSB1bmRlcmxpbmluZyBmb3IgY29udHJhY3RlZCBicmFpbGxlLiAoZG0pCisgICBMb2FkIGRyaXZlcnMgZnJvbSBiYWNrZ3JvdW5kIHByb2Nlc3MuIChkbSkKKyAgICAgIChWaWFWb2ljZSB3b3VsZG4ndCBydW4gd2hlbiBsb2FkZWQgaW4gZm9yZWdyb3VuZCBidXQgc3RhcnRlZCBpbiBiYWNrZ3JvdW4pCisgICBTdXBwb3J0IDUxMi1jaGFyYWN0ZXIgZm9udHMuIChkbSkgKyBUYXBpbyBLZWxsb25pZW1pCisgICBGaXggY29sb3VyIGFycmF5IGZvciBDUl9ERVNDQ0hBUi4gVGFwaW8gS2VsbG9uaWVtaQorICAgRXhwZXJpbWVudGFsIGdwbSAobW91c2UpIHN1cHBvcnQuIChkbSkKKyAgIEhhbmR5VGVjaCBkcml2ZXIgaW1wcm92ZW1lbnRzLiAoZG0pICsgTWFyaW8gTGFuZyA8bWxhbmdAZGVseXNpZC5vcmc+CisgICAgICBNZXJnZSBCb29rd29ybSdzIHN0YXR1cyBtYWludGVuYW5jZSBpbnRvIG1haW4gcmVhZCBsb29wLgorICAgICAgUGFzdGUgY2hhbmdlZCBmcm9tIEI0K0I1IHRvIFVQK0ROIChub3cgYWNjZXNzaWJsZSBmcm9tIGlucHV0IG1vZGUpLgorICAgICAgQ29udHJvbCBhbmQgbWV0YSBtb2RpZmllcnMgYWRkZWQgdG8gaW5wdXQgbW9kZS4KKyAgICAgIEJyYWlsbGVTdGFyIGNvbW1hbmQgZW5oYW5jZW1lbnRzLgorICAgICAgQnJhaWxsZVN0YXIgVVNCIElEcyBhZGRlZCBpbnRvIExpbnV4IGtlcm5lbCAoMi40LjIwKS4KKyAgIENvbnZlcnNpb24gb2YgQWx2YSBhbmQgSGFuZHlUZWNoIGRyaXZlcnMgZnJvbSBDKysgdG8gQy4gKGRtKQorICAgUmVtb3ZhbCBvZiBjbG9zZWQgc291cmNlIGxpYnJhcnkgZm9yIEFsdmEgcGFyYWxsZWwgcG9ydCBzdXBwb3J0LiAoZG0sbnApCisgICBJbnRyb2R1Y2UgLS1kaXNhYmxlLS4uLiBvcHRpb25zIHRvIHJlZHVjZSB0aGUgc2l6ZSBvZiB0aGUgZXhlY3V0YWJsZS4gKGRtKQorICAgICAgcHJlZmVyZW5jZXMtbWVudSBsZWFybi1tb2RlIGNvbnRyYWN0ZWQtYnJhaWxsZQorICAgICAgc3BlYWtlci10dW5lcyBkYWMtdHVuZXMgbWlkaS10dW5lcyBhZGxpYi10dW5lcworICAgWWllbGQgZHVyaW5nIGJ1c3kgbG9vcHMuIChkbSkKKyAgIEhlbHAgZmlsZSBjb2RlIG1hZGUgZW5kaWFuaXNtLWluZGVwZW5kZW50LiAoZG0pCisgICBBbGwgY29yZSBoZWFkZXIgZmlsZXMgbWFkZSBDKysgaW5jbHVkYWJsZS4gKGRtKQorICAgSW5zdGFsbCBwcm9ncmFtcyBpbiAvYmluIGluc3RlYWQgb2YgaW4gL3NiaW4uIChkbSkKKyAgIFNvbGFyaXMgc3VwcG9ydC4gKGRtKSArIFJpY2ggQnVycmlkZ2UgPFJpY2guQnVycmlkZ2VAU3VuLkNPTT4KKyAgIENoYW5nZXMgdG8gc2NydGVzdCBzeW50YXguIChkbSkKKyAgIEhlbHAgb3B0aW9uICgtaCwgLS1oZWxwKSBhZGRlZCB0byB0ZXN0IGFuZCB1dGlsaXR5IHByb2dyYW1zLiAoZG0pCisgICBWYXJpby1IVCByZW5hbWVkIHRvIFZhcmlvSFQuIChkbSkKKyAgIEF1dG9jb25mIHN1cHBvcnQgYW5kIHBvcnRhYmlsaXphdGlvbi4gKGRtKQorICAgRHJpdmVyIGxvYWRpbmcgbm8gbG9uZ2VyIHJlbGllcyBvbiBzdGF0aWMgZGF0YS4gKGRtKQorICAgVXNlIGNwIHJhdGhlciB0aGFuIG12IGluIG1rYmQgc28gYXMgdG8gbm90IGFsdGVyIHRoZSBmaWxlIHRhYmxlIGxheW91dC4gKGRtKQorICAgRGViaWFuIGJvdGRpc2sgbm90ZXMuIEJvcmlzIERhaXggPEJvcmlzLkRhaXhAaW5zYS1seW9uLmZyPgorICAgQ2hhbmdlcyB0byBzdXBwb3J0IGdjYyAzLiAoZG0pICsgTWFyayBNaWVsa2UgPG1hcmtAbWllbGtlLmNjPiArIE1hcmlvIExhbmcgPG1sYW5nQGRlbHlzaWQub3JnPgorICAgICAgVXNlIC1sc3VwYysrIHdoZW4gbGlua2luZyB3aXRoIGdjYzMuCisgICAgICBVc2UgdGhlIEMrKyBsaW5rZXIgaWYgdGhlIEMgbGlua2VyIGNhbid0IGRvIHRoZSBqb2IKKyAgICAgICAgIChicmx0dHksYnJsdGVzdCxzY3J0ZXN0IGdhaW4gYSBydW4tdGltZSBkZXBlbmRlbmN5IG9uIGxpYnN0ZGMrKykuCisgICAgICBSZW1vdmUgaW5saW5lIGF0dHJpYnV0ZSBmcm9tIGFsbCAuY2MgaW1wbGVtZW50YXRpb25zIChzY3JfYmFzZSwgc2NyX3NobSkuCisgICAgICBFeHRlcm4gY29uc3QgKGJybC5oW25vQnJhaWxsZV0sIHNway5oW25vU3BlZWNoXSkgZm9sbG93ZWQgYnkgbm9uLWNvbnN0CisgICAgICAgICBkZWNsYXJhdGlvbiAoYnJsX2RyaXZlciwgc3BrX2RyaXZlcikgbm8gbG9uZ2VyIGFsbG93ZWQuCisgICBFbmhhbmNlbWVudHMgdG8gZW4tdXMtZzIgY29udHJhY3Rpb24gdGFibGUuIEpvaG4gQm95ZXIgPGRpcmVjdG9yQGNocGkub3JnPgorCitKdWx5IDEzLCAyMDAyOgorIC0gQlJMVFRZIDMuMCByZWxlYXNlZDoKKyAgIE5ldyBCb290ZGlzayBIYWNraW5nIE1pbmktSG93VG8uIChzZCkKKyAgIFVwZGF0ZWQgc2NyZWVuIHBhdGNoIChmb3IgMy45LjExKSBwcm92aWRlZC4gUnVkb2xmIFdlZWJlciA8UnVkb2xmLldlZWJlckBnbXguZGU+CisgICBJbXBsZW1lbnQgaW4tbGluZSBjb250cmFjdGVkIGJyYWlsbGUgZmFjaWxpdHkuIEpvaG4gQm95ZXIgPGRpcmVjdG9yQGNocGkub3JnPgorICAgRGV2ZWxvcCBjb250cmFjdGlvbiB0YWJsZSBmb3IgZ3JhZGUgMiBVUyBFbmdsaXNoIGJyYWlsbGUuIEpvaG4gQm95ZXIgPGRpcmVjdG9yQGNocGkub3JnPgorICAgSW1wbGVtZW50IGdlbmVyaWMgZHJpdmVyIHBhcmFtZXRlcnMgZmFjaWxpdHkuIChkbSxzZCkKKyAgIFJlc29sdmUgY29uZmxpY3QgYmV0d2VlbiAuZGF0IGFuZCAuY29uZiBib3RoIGJlaW5nIGNhbGxlZCBjb25maWd1cmF0aW9uIGZpbGVzLiAoZG0pCisgICAgICBEZWZhdWx0IGZpbGUgZXh0ZW5zaW9uIC5kYXQgYmVjb21lcyAucHJlZnMuCisgICAgICBDTURfQ09ORk1FTlUgLT4gQ01EX1BSRUZNRU5VCisgICAgICBDTURfU0FWRUNPTkYgLT4gQ01EX1BSRUZTQVZFCisgICAgICBDTURfUkVTRVQgLT4gQ01EX1BSRUZMT0FECisgICBOb3JtYWxpemUgc2hvcnQgb3B0aW9ucy4gKGRtKQorICAgICAgLXAgYmVjb21lcyAtUworICAgICAgLWMgYmVjb21lcyAtcAorICAgTm9ybWFsaXplIGxvbmcgb3B0aW9ucy4gKGRtKQorICAgICAgLS1icmFpbGxlIGJlY29tZXMgLS1icmFpbGxlLWRyaXZlcgorICAgICAgLS1jb25maWcgYmVjb21lcyAtLXByZWZlcmVuY2VzLWZpbGUKKyAgICAgIC0tZGV2aWNlIGJlY29tZXMgLS1icmFpbGxlLWRldmljZQorICAgICAgLS1sb2cgYmVjb21lcyAtLWxvZy1sZXZlbAorICAgICAgLS1zcGVlY2ggYmVjb21lcyAtLXNwZWVjaC1kcml2ZXIKKyAgICAgIC0tc3BlZWNocGFybSBiZWNvbWVzIC0tc3BlZWNoLXBhcmFtZXRlcnMKKyAgICAgIC0tdGFibGUgYmVjb21lcyAtLXRleHQtdGFibGUKKyAgIG5vcm1hbGl6ZSBicmx0dHkuY29uZiBkaXJlY3RpdmVzLiAoZG0pCisgICAgICBicmFpbGxlLWNvbmZpZ3VyYXRpb24gYmVjb21lcyBwcmVmZXJlbmNlcy1maWxlCisgICAgICBkb3QtdHJhbnNsYXRpb24gYmVjb21lcyB0ZXh0LXRhYmxlCisgICAgICBzcGVlY2gtZHJpdmVycGFybSBiZWNvbWVzIHNwZWVjaC1wYXJhbWV0ZXJzCisgICBBZGQgLWMgKC0tY29udHJhY3Rpb24tdGFibGU9KSBvcHRpb24gdG8gc3BlY2lmeSBzaXgtZG90IGJyYWlsbGUgdHJhbnNsYXRpb24uIChkbSkKKyAgIEFkZCAtZSAoLS1zdGFuZGFyZC1lcnJvcikgb3B0aW9uIHRvIGxvZyB0byBzdGFuZGFyZCBlcnJvciByYXRoZXIgdGhhbiB2aWEgc3lzbG9nLiAoZG0sc2QpCisgICBBZGQgLWYgKC0tY29uZmlndXJhdGlvbi1maWxlPSkgb3B0aW9uIHRvIHNwZWNpZnkgZGVmYXVsdCBwYXJhbWV0ZXJzIGZpbGUgKGJybHR0eS5jb25mKS4gKGRtKQorICAgUmVjb2duaXplIGxldmVsIG5hbWVzIChhbmQgYWJicmV2aWF0aW9ucyB0aGVyZW9mKSBmb3IgLWwgKC0tbG9nLWxldmVsPSkgb3B0aW9uLiAoZG0pCisgICAgICAoZW1lcmdlbmN5LCBhbGVydCwgY3JpdGljYWwsIGVycm9yLCB3YXJuaW5nLCBub3RpY2UsIGluZm9ybWF0aW9uLCBkZWJ1ZykKKyAgIEFkZCAtbiAoLS1uby1kYWVtb24pIG9wdGlvbiB0byBtYWtlIGRlYnVnZ2luZyBlYXNpZXIgYW5kIHRvIHBlcm1pdCBpbnZvY2F0aW9uIGZyb20gaW5pdHRhYi4gKGRtLHNkKQorICAgQWRkIC1CICgtLWJyYWlsbGUtcGFyYW1ldGVycz0pIG9wdGlvbiwgYW5kIHRoZSBicmFpbGxlLXBhcmFtZXRlcnMgYnJsdHR5LmNvbmYgZGlyZWN0aXZlLiAoZG0pCisgICBBZGQgLUUgKC0tZW52aXJvbm1lbnQtdmFyaWFibGVzKSBvcHRpb24gdG8gYWxsb3cgYm9vdCBwYXJhbWV0ZXJzLiAoZG0sc2QpCisgICBJbXBsZW1lbnQgdXNlci1zZXR0YWJsZSBhdHRyaWJ1dGVzIHRyYW5zbGF0aW9uIHRhYmxlLiAoZG0pCisgICAgICBJbnRyb2R1Y2Ugc2hvcnQgb3B0aW9uIC1hLgorICAgICAgSW50cm9kdWNlIGxvbmcgb3B0aW9uIC0tYXR0cmlidXRlcy10YWJsZT0uCisgICAgICBJbnRyb2R1Y2UgYnJsdHR5LmNvbmYgZGlyZWN0aXZlIGF0dHJpYnV0ZXMtdGFibGUuCisgICBBZGQgLU0gKC0tbWVzc2FnZS1kZWxheT0pIG9wdGlvbi4gKGRtKQorICAgQWRkIC1OICgtLW5vLXNwZWVjaCkgb3B0aW9uLiAoZG0pCisgICBBZGQgLVAgKC0tcGlkLWZpbGU9KSBvcHRpb24uIChkbSkKKyAgIEFkZCAtUiAoLS1yZWZyZXNoLWludGVydmFsPSkgb3B0aW9uLiAoZG0pCisgICBBZGQgLVggKC0tc2NyZWVuLXBhcmFtZXRlcnM9KSBvcHRpb24uIChkbSkKKyAgIEFkZCB0aGUgYWNtPSAoZGVmYXVsdCwgaXNvMDEsIHZ0MTAwLCBjcDQzNywgdXNlcikgc2NyZWVuIHBhcmFtZXRlci4gKGRtKQorICAgSW1wbGVtZW50IEJyYWlsbGVOb3RlIGRyaXZlci4gKGRtKSB3aXRoIGhlbHAgZnJvbSBNaWtlIFBlZGVyc2VuIDxtcGVkZXJzZW5AbWluZHNwcmluZy5jb20+CisgICBJbXBsZW1lbnQgSGFuZHlUZWNoIGRyaXZlci4gQW5kcmVhcyBHcm9zcyA8YW5kaUBhbmRpLWJpa2EuZGU+CisgICBBZGQgQm9va3dvcm0gc3VwcG9ydC4gKGRtKQorICAgSW1wbGVtZW50IExvZ1RleHQgZHJpdmVyLiAoZG0pIHdpdGggaGVscCBmcm9tIEhhbnMgU2Nob3UgPGNobG9yQHNjaG91LmRrPgorICAgSW1wbGVtZW50IFZveWFnZXIgZHJpdmVyLiAoc2QpIHdpdGggaGVscCBmcm9tIFN0ZXBoYW5lIERhbHRvbiA8c2RhbHRvbkB2aWRlb3Ryb24uY2E+CisgICBCcmFpbGxlTGl0ZSBkcml2ZXIgZW5oYW5jZW1lbnRzLiAoc2QpCisgICAgICBBdXRvLWRldGVjdCAxOCB2ZXJzZXMgNDAuCisgICAgICBBZGQgREVURUNUX0ZPUkVWRVIgb3B0aW9uLgorICAgICAgQWRkIFVTRV9URVhUVFJBTlMgb3B0aW9uLgorICAgICAgQWRkIGJpbmRpbmdzIGZvciBzZWFyY2ggYmFja3dhcmQvZm9yd2FyZC4KKyAgICAgIEFkZCBiaW5kaW5ncyBmb3IgbW92ZSB0byBwcmV2aW91cy9uZXh0IHBhcmFncmFwaC4KKyAgICAgIEFkZCBiaW5kaW5ncyBmb3Igc3dpdGNoIHRvIHByZXZpb3VzL25leHQgdmlydHVhbCB0ZXJtaW5hbC4KKyAgICAgIENoYW5nZSBiaW5kaW5nIGZvciByZXN0YXJ0IGRyaXZlciB0byBhIHNhZmVyIGNvbWJpbmF0aW9uLgorICAgICAgQWRkIHNob3J0Y3V0IGZvciBvbmUtZGlnaXQgcmVwZWF0IGNvdW50LgorICAgICAgRml4IGJ1ZyBjYXVzaW5nIGludGVybmFsIGN1cnNvciB0byBnbyBvZmYgZGlzcGxheSBkdXJpbmcgZy1jaG9yZCB3aXRoIGFkdmFuY2UgYmFyIGxlZnQuCisgICAgICBGaXggay1jaG9yZCB0byB0b2dnbGUgb2ZmIGtleWJvYXJkIGVtdWxhdGlvbi4KKyAgICAgIEZpeCBkYXktb25lIHN0YXJ0dXAgc2VnZmF1bHQgYnVnLgorICAgICAgQWRkIGJhdWRyYXRlIHBhcmFtZXRlci4KKyAgICAgIEFkZCBrYmVtdSBwYXJhbWV0ZXIuCisgICAgICBQb3J0YWJpbGl0eSBmaXhlcy4KKyAgIFBhcGVubWVpZXIgZHJpdmVyIGVuaGFuY2VtZW50czoKKyAgICAgIFJlbW92ZSBzcGVjaWFsLWNhc2UgY29kZSBmb3Igcm91dGluZyBrZXlzLiAoYWgpCisgICAgICBSZWNvZ25pemUga2V5ICJyb3V0aW5nIiBpbiBjb25maWd1cmF0aW9uIGZpbGUuIChhaCkKKyAgICAgIEFsbG93IHJvdXRpbmcga2V5cyB0byBiZSBib3VuZCB0byBtb2RpZmllciBrZXlzLiAoYWgpCisgICAgICBSZWNvZ25pemUgdG9nZ2xlIG1vZGlmaWVycyAib24iIGFuZCAib2ZmIiBpbiBjb25maWd1cmF0aW9uIGZpbGUuIChhaCkKKyAgICAgIEFkZCBvbi9vZmYgY2FwYWJpbGl0eSB0byBleGlzdGluZyB0b2dnbGUga2V5IGRlZmluaXRpb25zLiAoYWgpCisgICAgICBBbGxvdyBjb21tYW5kIHRvIGJlIGJvdW5kIHRvIGp1c3QgbW9kaWZpZXIga2V5cy4gKGFoKQorICAgICAgSW1wbGVtZW50IGlucHV0IG1vZGUgYW5kIHNwZWNpYWwga2V5IHN1cHBvcnQuIChhaCxkbSkKKyAgICAgIFJlbW92ZSB5YWNjIG5vaXNlIGZyb20gbWFrZS4gKGRtLGFoKQorICAgICAgQ2xlYW4gdXAgbG9nIG1lc3NhZ2VzLiAoZG0pCisgICAgICBMb2cgZGlzcGxheSB0eXBlIGV2ZW4gaWYgdW5rbm93bi4gKGRtKQorICAgICAgRm9yIGRpc3BsYXlzIHdpdGggYW4gZWFzeSBhY2Nlc3MgYmFyOiAoZG0pCisgICAgICAgICBDaGFuZ2UgbGVmdDIgZnJvbSBIT01FIHRvIEJBQ0suCisgICAgICBGb3IgZGlzcGxheXMgd2l0aCA5IGZyb250IGtleXM6IChkbSkKKyAgICAgICAgIENoYW5nZSAxKzMgZnJvbSBUT1AgdG8gVE9QX0xFRlQuCisgICAgICAgICBDaGFuZ2UgMSs3IGZyb20gQk9UIHRvIEJPVF9MRUZULgorICAgICAgICAgTW92ZSBjdXQgYmVnaW4vZW5kIGZyb20gMi84IHRvIDEvOS4KKyAgICAgICAgIEFkZCBwYXN0ZSBhcyAxKzkgKGZvciBkaXNwbGF5cyB3aXRoIGxlc3MgdGhhbiAxMyBzdGF0dXMgY2VsbHMpLgorICAgICAgICAgTW92ZSBoYWxmIHdpbmRvdyBsZWZ0L3JpZ2h0IGZyb20gMSs1LzkrNSB0byAyLzguCisgICAgICAgICBTd2l0Y2ggbG51cC9sbmRuIHRvIDMvNyBhbmQgd2ludXAvd2luZG4gdG8gNC82LgorICAgICAgICAgQWRkIG1vcmUgaG9yaXpvbnRhbCBtb3Rpb24gY29tbWFuZHMuCisgICAgICBGb3IgZGlzcGxheXMgd2l0aCAxMyBmcm9udCBrZXlzOiAoZG0pCisgICAgICAgICBEZWZpbmUga2V5cyAxLTQgYW5kIDEwLTEzIGFzIG1vZGlmaWVycy4KKyAgICAgICAgIERlZmluZSAxKzEzIGFzIHBhc3RlLgorICAgICAgICAgQWRkIG1hbnkgbW9yZSBjb21tYW5kcy4KKyAgICAgIEZvciBkaXNwbGF5cyB3aXRoIDIyIHN0YXR1cyBrZXlzOiAoZG0pCisgICAgICAgICBGaXgga2V5IGFzc2lnbm1lbnRzOiA1LTggLT4gNi05LgorICAgICAgICAgRGVmaW5lIDQgYXMgYmFjay4KKyAgICAgICAgIE1vdmUgaW5mbyBmcm9tIDggdG8gNS4KKyAgICAgICAgIERlZmluZSA4IGFzIGlucHV0IG1vZGUgdG9nZ2xlLgorICAgICAgICAgRGlzcGxheSBjdXJyZW50IHZpcnR1YWwgc2NyZWVuIG51bWJlciBpbiAxMS4KKyAgICAgIERlZmluZSBzdGF0dXMga2V5IGNvbW1hbmRzIGZvciBkaXNwbGF5cyB3aXRoIDQgc3RhdHVzIGNlbGxzLiAoZG0pCisgICAgICBSZW5hbWUgZW52aXJvbm1lbnQgdmFyaWFibGUgQlJMVFRZX0NPTkYgdG8gQlJMVFRZX1BNX0NPTkYuIChkbSkKKyAgICAgIEtleSByZWxlYXNlcyBubyBsb25nZXIgaW50ZXJydXB0IG1lc3NhZ2Ugd2FpdHMuIChkbSkKKyAgICAgIFJlbW92ZSBjb25kaXRpb25hbCBjb21waWxpbmcgZm9yIGRlYnVnZ2luZy4gKGRtKQorICAgICAgQWRkIGRyaXZlciBwYXJhbWV0ZXJzOiBjb25maWdmaWxlLCBkZWJ1Z3JlYWRzLCBkZWJ1Z3dyaXRlcywgZGVidWdrZXlzLiAoZG0pCisgICAgICBXYWl0IGluZGVmaW5pdGVseSBmb3IgYnJhaWxsZSBkaXNwbGF5IHRvIGJlIGNvbm5lY3RlZC4gKGRtKQorICAgVFNJIGRyaXZlciBlbmhhbmNlbWVudHMuIChzZCkKKyAgICAgIEFkZCBiaW5kaW5ncyBmb3IgZ28gdG8gYmVnaW5uaW5nL2VuZCBvZiBjdXJyZW50IGxpbmUuCisgICBDbGVhbiB1cCBBbHZhIHBhcmFsbGVsIHBvcnQgYnVpbGQuIChkbSkgKyBBbmRyZWFzIEdyb3NzIDxhbmRpQGFuZGktYmlrYS5kZT4KKyAgIFZlcnNpb24gMS4wIG9mIHRoZSBFdXJvQnJhaWxsZSBkcml2ZXIuIFlhbm5pY2sgUGxhc3NpYXJkIDxZYW5uaWNrLlBsYXNzaWFyZEBmcmVlLmZyPgorICAgRml4IE1pbmlCcmFpbGxlIGRlbGF5IGFmdGVyIHdyaXRlLiAoZG0pCisgICBWYXJpbyBkcml2ZXIgY2FuIG5vdyBiZSBzdGF0aWNhbGx5IGxpbmtlZC4gKGRtKQorICAgQWRkIGN1dC1hbmQtcGFzdGUgZm9yIFZpZGVvQnJhaWxsZS4gQ2hyaXN0aWFuIENvbWFzY2hpIDxjaHJpc3RpYW5fY29tYXNjaGlAbGliZXJvLml0PgorICAgQWRkIGlkZW50aWZpY2F0aW9uIG91dHB1dCB0byBWaXNpb0JyYWlsbGUgZHJpdmVyLiAoZG0pCisgICBBZGQgc3VwcG9ydCBmb3IgNS4wIFBST00gZmFtaWx5IHRvIFZpc2lvQnJhaWxsZSBkcml2ZXIuIFPDqWJhc3RpZW4gSGluZGVyZXIgPFNlYmFzdGllbi5IaW5kZXJlckBlbnMtbHlvbi5mcj4KKyAgIEFkZCBwcm9ncmFtLCB1aWQsIGFuZCBnaWQgcGFyYW1ldGVycyB0byBFeHRlcm5hbFNwZWVjaCBkcml2ZXIuIChzZCkKKyAgIFN0b3AgR2VuZXJpY1NheSBmcm9tIHJlYW5ub3VuY2luZyBCUkxUVFkgdmVyc2lvbiBkdXJpbmcgY3Vyc29yIHJvdXRpbmcuIChkbSkKKyAgIEFkZCBjb21tYW5kIHBhcmFtZXRlciB0byBHZW5lcmljU2F5IGRyaXZlci4gKGRtKQorICAgSW1wbGVtZW50IFZpYVZvaWNlIGRyaXZlci4gKGRtKQorICAgTGlzdCB0cmFuc2xhdGlvbiB0YWJsZXMgaW4gbWFrZSBmaWxlLiAoZG0pCisgICBBZGQgY3Jvc3MtY29tcGlsZSBzdXBwb3J0IHRvIG1ha2UgZmlsZS4gKHNkLGRtKQorICAgQWRkIElOU1RBTExfUk9PVCBzdXBwb3J0IHRvIG1ha2UgZmlsZS4gKGRtKQorICAgQWRkIERhbmlzaCB0ZXh0IHRyYW5zbGF0aW9uIHRhYmxlLiBIYW5zIFNjaG91IDxjaGxvckBzY2hvdS5kaz4KKyAgIEFkZCAtYyAoLS1jb2RlLXBhZ2U9KSBvcHRpb24gdG8gdGJsMnR4dC4gKGRtKQorICAgICAgSW5pdGlhbCBjb2RlIGFuZCB0YWJsZXMgc3VwcGxpZWQgYnkgSGFucyBTY2hvdSA8Y2hsb3JAc2Nob3UuZGs+LgorICAgQ2xlYW4gdXAgc2NyZWVuIGRldmljZSBjcmVhdGlvbiBpbiBtYWtlIGZpbGUuIChkbSkKKyAgIE1ha2UgcHJlZmVyZW5jZXMgbWVudSBtb3JlIHVzZXItZnJpZW5kbHkuIChkbSxzZCkKKyAgICAgIENob2ljZXMgYXJlIHdvcmRzIHJhdGhlciB0aGFuIG51bWJlcnMuCisgICAgICBPbmx5IHByZXNlbnQgcmVsZXZhbnQgaXRlbXMuCisgICBDaGFuZ2UgbGVmdC9yaWdodCBhcnJvdyBpbiBwcmVmcyBtZW51IGZyb20gcHJldi9uZXh0IGl0ZW0gdG8gcHJldi9uZXh0IGNob2ljZS4gKGRtKQorICAgQWRkIHN1cHBvcnQgZm9yIHR1bmVzIHZpYSBzb3VuZCBjYXJkICgvZGV2L2RzcCkuIChkbSxucCkKKyAgIEFkZCBzdXBwb3J0IGZvciB0dW5lcyB2aWEgTUlESSAoL2Rldi9zZXF1ZW5jZXIpLiAoZG0pCisgICBBZGQgc3VwcG9ydCBmb3IgdHVuZXMgdmlhIEFkTGliL09QTDMvU0ItRk0uIChkbSkKKyAgIFNsaWRpbmcgd2luZG93IGVuaGFuY2VtZW50cy4gKHNkKQorICAgUmVwbGFjZSBza2lwIGJsYW5rIGVuZC1vZi1saW5lcyB3aXRoIGNvbmZpZ3VyYWJsZSBza2lwIGJsYW5rIHdpbmRvd3MgbW9kZS4gKGRtKQorICAgSW1wbGVtZW50IGhvcml6b250YWwgd2luZG93IHNjcm9sbCBvdmVybGFwLiAoZG0pCisgICAgICBGdWxsIHdpbmRvdyByaWdodCBubyBsb25nZXIgZG9lcyBwYXJ0aWFsIG1vdmUgdG8gcGljayB1cCBlbmQgb2YgbGluZS4KKyAgICAgIFNpbmdsZSBjaGFyYWN0ZXIgcmlnaHQgbGV0cyBsZWZ0IGVuZCBvZiB3aW5kb3cgbW92ZSB0byBsYXN0IGNvbHVtbiBvZiBsaW5lLgorICAgICAgV3JhcCB1cCBhdCBsZWZ0IG9mIGxpbmUgZ29lcyB0byBtdWx0aXBsZSBvZiB3aW5kb3cgd2lkdGggYXQgcmlnaHQgb2YgcHJldmlvdXMgbGluZS4KKyAgIERpc3BsYXkgbWVzc2FnZSB3aGVuIHNvdW5kIGlzIG9mZiBmb3IgY3JpdGljYWwgb3BlcmF0aW9ucyBsaWtlIGZyZWV6ZS91bmZyZWV6ZS4gKHNkKQorICAgQWxsb3cgYnJhaWxsZSBkaXNwbGF5IHRvIHN0aWNrIG91dCB0byB0aGUgcmlnaHQgb2YgdGhlIHNjcmVlbi4gKHNkKQorICAgQWRkIGNvbW1hbmRzIHRvIHN3aXRjaCB0byB0aGUgbmV4dCBhbmQgcHJldmlvdXMgdmlydHVhbCB0ZXJtaW5hbHMuIChzZCkKKyAgIEltcGxlbWVudCBDTURfQkFDSyAodG8gZ28gYmFjayBhZnRlciBhIGN1cnNvciB0cmFja2luZyBtb3Rpb24pLiAoZG0pCisgICAgICBBZGQgdG8gQWx2YSBkcml2ZXIuIChucCkKKyAgICAgIEFkZCB0byBCcmFpbGxlTGl0ZSBkcml2ZXIuIChzZCkKKyAgICAgIEFkZCB0byBCcmFpbGxlTm90ZSBkcml2ZXIuIChkbSkKKyAgICAgIEFkZCB0byBQYXBlbm1laWVyIGRyaXZlci4gKGRtKQorICAgICAgQWRkIHRvIFRTSSBkcml2ZXIuIChzZCkKKyAgIEltcGxlbWVudCBDUl9ERVNDQ0hBUiAoZGVzY3JpYmUgY2hhcmFjdGVyIGF0IHJvdXRpbmcga2V5KS4gKGRtKQorICAgSW1wbGVtZW50IENSX1NFVExFRlQgKGxlZnQgb2Ygd2luZG93IHRvIHJvdXRpbmcga2V5KS4gKGRtKQorICAgUmVuYW1lIENSX1JPVVRFT0ZGU0VUIHRvIENSX1JPVVRFLiAoZG0pCisgICBSZW5hbWUgQ1JfQkVHQkxLT0ZGU0VUIHRvIENSX0NVVEJFR0lOLiAoZG0pCisgICBSZW5hbWUgQ1JfRU5EQkxLT0ZGU0VUIHRvIENSX0NVVFJFQ1QuIChkbSkKKyAgIEltcGxlbWVudCBDUl9DVVRMSU5FIChsaW5lZWFyIGN1dCB0byBjaGFyYWN0ZXIpLiAoZG0pCisgICBJbXBsZW1lbnQgQ1JfQ1VUQVBQRU5EIChzdGFydCBjdXQgYXJlYSB3aXRob3V0IGNsZWFyaW5nIGN1dCBidWZmZXIpLiAoZG0pCisgICBJbXBsZW1lbnQgQ1JfU0VUTUFSSyAocmVtZW1iZXIgd2luZG93IHBvc2l0aW9uKS4gKGRtKQorICAgSW1wbGVtZW50IENSX0dPVE9NQVJLIChyZXR1cm4gdG8gcmVtZW1iZXJlZCB3aW5kb3cgcG9zaXRpb24pLiAoZG0pCisgICBJbXBsZW1lbnQgQ01EX3tQUixOWH1QUk9NUFQgKGZpbmQgcHJldmlvdXMvbmV4dCBjb21tYW5kIHByb21wdCkuIChkbSkKKyAgIEltcGxlbWVudCBDTURfTEVBUk4gKGNvbW1hbmQgbGVhcm4gbW9kZSkuIChkbSkKKyAgIFJlbW92ZSBzcGVjaWFsIGNvbW1hbmRzIGZvciBkaXNwbGF5cyB3aXRob3V0IHJvdXRpbmcga2V5czogKGRtLHNkKQorICAgICAgVXNlIENSX1JPVVRFIGluc3RlYWQgb2YgQ01EX0NTUkpNUC4KKyAgICAgIFVzZSBDUl9DVVRCRUdJTiBpbnN0ZWFkIG9mIENNRF9DVVRfQkVHLgorICAgICAgVXNlIENSX0NVVFJFQ1QgaW5zdGVhZCBvZiBDTURfQ1VUX0VORC4KKyAgIEFkZCByZXZlcnNlIHRleHQgdHJhbnNsYXRpb24gdGFibGUgZm9yIGlucHV0IGZyb20gYnJhaWxsZSBkaXNwbGF5LiAoZG0sc2QpCisgICBHZXQgZm9udCBkYXRhIGZyb20ga2VybmVsIHJhdGhlciB0aGFuIGd1ZXNzIGF0IGl0IGJ5IHByb2JpbmcuIChzZCkKKyAgIEhhbmRsZSBmb250IGNoYW5nZSBhbmQgc2NyZWVuIHNpemUgY2hhbmdlLiAoc2QpCisgICBNYWtlIGN1cnNvciByb3V0aW5nIHdvcmsgd2hlbiBrZXlib2FyZCBpcyBpbiByYXcgbW9kZS4gKGRtKQorICAgU2VhcmNoIGxpc3Qgb2Yga25vd24gc2NyZWVuIGRldmljZSBuYW1lcyAoL2Rldi92Y3NhMCAvZGV2L3Zjc2EgL2Rldi92Y2MvYSkKKyAgICAgIHJhdGhlciB0aGFuIGp1c3QgY2hlY2sgZm9yIC9kZXYvdmNzYTAuIChkbSkKKyAgIE1vdmUga2V5IGluc2VydGlvbiwgY3Vyc29yIHJvdXRpbmcsIGFuZCB2aXJ0dWFsIHRlcm1pbmFsIHN3aXRjaGluZyBpbnRvIHNjcmVlbiBjbGFzcy4gKGRtKQorICAgQWRkIGN1cnNvciByb3V0aW5nLCBjdXJzb3IgbW90aW9uLCBhbmQgcGFnZSBzd2l0Y2hpbmcgdG8gaGVscCBzY3JlZW4uIChkbSkKKyAgIEFsbG93IGEgc2NyZWVuIGRyaXZlciB0byBzZWxlY3RpdmVseSBvdmVycmlkZSBjb21tYW5kcy4gKGRtKQorICAgRml4IGhvbGVzIGluIHNpZ25hbCBibG9ja2luZyBkdXJpbmcgY3Vyc29yIHJvdXRpbmcuIChkbSkKKyAgIERvbid0IHVzZSBMT0dfQ09OUyBvcHRpb24gb2Ygc3lzbG9nIHVodGlsIGluIHRoZSBiYWNrZ3JvdW5kLiAoZG0pCisgICBDb252ZXJ0IENNRF8gZnJvbSBkZWZpbmVzIHRvIGVudW0uIChkbSkKKyAgICAgIENvbWJpQnJhaWxsZTogdGFibGVzLmggY29udmVydGVkIHRvIGNtZHRyYW5zLmgsIGFyZ3RyYW5zIHJlbW92ZWQuCisgICBDb252ZXJ0IENNRF9LRVlfLi4uIGNvbW1hbmRzIHRvIFZBTF9QQVNTS0VZK1ZQS18uLi4gbWVjaGFuaXNtLiAoZG0pCisgICAgICBCcmFpbGxlTGl0ZSBjbWR0cmFuc1tdIGFuZCBibGtleS5jbWQgY2hhbmdlZCBmcm9tIHVuc2lnbmVkIGNoYXIgdG8gaW50LgorICAgUmVuYW1lIFZBTF9QQVNTVEhSVSB0byBWQUxfUEFTU0NIQVIuIChkbSkKKyAgIFJlbmFtZSBWQUxfQlJMS0VZIHRvIFZBTF9QQVNTRE9UUy4gKGRtKQorICAgQWRkIHRoZSBmb2xsb3dpbmcgZmxhZ3MgZm9yIFZBTF9QQVNTQ0hBUiBhbmQgVkFMX1BBU1NET1RTOiAoZG0pCisgICAgICBWUENfQ09OVFJPTCwgVlBDX01FVEEsIFZQQ19TSElGVCwgVlBDX1VQUEVSCisgICBJbmZvcm0gcmVhZGJybCBvZiB0aGUgY3VycmVudCBjb21tYW5kIGNvbnRleHQuIChkbSkKKyAgIFJlbW92ZSBUQkxfQ01EIGFuZCBUQkxfQVJHLiAoZG0pCisgICBMb2cgY29tbWFuZCBsaW5lIHN5bnRheCBlcnJvcnMgdG8gc3lzbG9nLiAoZG0pCisgICBNYWtlIG1lc3NhZ2UgZGVsYXkgYnkgZGVmYXVsdDsgYWRkIE1TR19OT0RFTEFZIGZsYWcuIChzZCkKKyAgIEZpeCBwcm9ibGVtcyB3aXRoIHRoZSBza2lwcGluZyBvZiBibGFuayB3aW5kb3dzIGFuZCBlbmRzIG9mIGxpZW5zLiAoc2QpCisgICBDaGFuZ2UgZGlyZWN0b3J5IHRvIHJpZ2h0IHBsYWNlIGlmIFBSRUZJWCBpcyBzZXQuIChkbSkKKyAgIERpc2FibGUgc3BlZWNoIHRyYWNraW5nIHdoZW4gQ01EX1NBWSBpcyB1c2VkLiAobnApCisgICBNZXJnZSBMb2dBbmRTdGRlcnIgaW50byBMb2hQcmludC4gKGRtKQorICAgQ2xlYW5seSB3cmFwIGxvbmcgaGVscCAoLWgpIG91dHB1dCBsaW5lcy4gKGRtKQorICAgSW5jcmVhc2UgZGVmYXVsdCBtZXNzYWdlIGRlbGF5IGZyb20gMiB0byA0IHNlY29uZHMuIChkbSkKKyAgIE1lc3NhZ2UgZGVsYXkgaXMgbm93IGludGVycnVwdGFibGUgYnkgcHJlc3Npbmcga2V5IG9uIGJyYWlsbGUgZGlzcGxheS4gKGRtKQorICAgU3RhcnR1cCBhbmQgZXhpdGluZyBtZXNzYWdlcyBub3cgZml0IHdpdGhpbiAxOCBjaGFyYWN0ZXJzLiAoZG0sc2QpCisgICBBZGQgbWVzc2FnZSB0byBhbGVydCB1c2VyIHRvIHByZXNlbmNlIG9mIHN0YXJ0dXAgZXJyb3JzLiAoZG0pCisgICBXYXJuIGlmIGEgY29uZmlndXJhdGlvbiBmaWxlIGRpcmVjdGl2ZSBpcyBzcGVjaWZpZWQgbW9yZSB0aGFuIG9uY2UuIChkbSkKKyAgIEFkZCBtb3JlIG1lbW9yeSBhbGxvY2F0aW9uIGFuZCBJL08gZXJyb3IgY2hlY2tzLiAoZG0pCisgICBDb250cm9sLUMgbm93IHVzYWJsZSBkdXJpbmcgc3RhcnR1cCBhbmQgZHJpdmVyIHJlc3RhcnQuIChkbSxzZCkKKyAgIEF1ZGl0IGFsbCBicmFpbGxlIGFuZCBzcGVlY2ggZHJpdmVycy4gKGRtKQorICAgICAgUmVtb3ZlIHByaW50aW5nIHZpYSBzdGRpby4KKyAgICAgIEVuc3VyZSB0aGF0IGZpcnN0IGxpbmUgb2YgaWRlbnRpZmljYXRpb24gb3V0cHV0IHVzZXMgTE9HX05PVElDRS4KKyAgICAgIEVuc3VyZSB0aGF0IHN1YnNlcXVlbnQgbGluZXMgb2YgaWRlbnRpZmljYXRpb24gb3V0cHV0IHVzZSBMT0dfSU5GTy4KKyAgICAgIFJlbW92ZSBuZXctbGluZXMgZnJvbSBsb2dnZWQgbWVzc2FnZXMuCisgICAgICBFbnN1cmUgdGhhdCBhbGwgb3V0cHV0IHRvIGJyYWlsbGUgZGlzcGxheSBpcyBkcmFpbmVkIGJlZm9yZSBjbG9zaW5nLiAKKyAgIFVwZGF0ZWQgbWFudWFsLiAoZG0pIHdpdGggaGVscCBmcm9tIENoZXJ5bCBIb21pYWsgPGNob21pYWtAc2hlbGx3b3JsZC5uZXQ+CisKK0p1bmUgMjYsIDIwMDE6CisgLSBCUkxUVFkgMi45OCByZWxlYXNlZDoKKyAtIGZpeGVzIHRvIHRoZSBUU0kgZHJpdmVyIGZvciBOYXZpZ2F0b3IgODAsIGJ5IFN0w6lwaGFuZSBEb3lvbgorIC0gYWRkZWQgZHJpdmVyIGZvciBNaW5pQnJhaWxsZSBkaXNwbGF5cywgYnkgRGF2aWQgU2F1ZXIgPHNhdWVyQGJyYWlsY29tLmN6PgorIC0gYWRkZWQgZHJpdmVyIGZvciBWaWRlb2JyYWlsbGUgZGlzcGxheXMsIGJ5IENocmlzdGlhbiBDb21hc2NoaQorICAgPGNocmlzdGlhbl9jb21hc2NoaUBsaWJlcm8uaXQ+CisgLSBhZGRlZCBkcml2ZXIgZm9yIFZpc2lvQnJhaWxsZSBkaXNwbGF5cywgYnkgU8OpYmFzdGllbiBIaW5kZXJlcgorICAgPGpyZjNAd2FuYWRvby5mcj4KKyAtIGF1dG9kZXRlY3Rpb24gb2YgQnJhaWxsZUxpdGUgMTggdnMgNDAsIGJ5IFdpbGxpIEx1dHplbmJlcmdlciAKKyAgIDx3aWxsdXR6QGdteC5uZXQ+CisgLSBzdXBwb3J0IGZvciBBbHZhIEFTNTcwIGZyb20gV2lsbGkgTHV0emVuYmVyZ2VyIDx3aWxsdXR6QGdteC5uZXQ+CisKK01hcmNoIDIwMDE6CisgLSB2ZXJzaW9uIDIuOTcgKGJldGEpOgorIC0gQ29kZSBjbGVhbnVwIGkuZS4gdGhlIGJpZyBtZXNzIHRoYXQgYnJsdHR5LmMgd2FzIGlzIG5vdyBicm9rZW4gaW50bworICAgbXVsdGlwbGUgZmlsZXMuCisgLSBDb21tYW5kIGFuZCBwYXJhbWV0ZXIgdG8gc2tpcCBibGFuayB3aW5kb3dzLgorIC0gQ29tbWFuZCB0byBzd2l0Y2ggdmlydHVhbCB0ZXJtaW5hbC4KKyAtIENvbW1hbmQgdG8gZmluZCB0aGUgbmV4dC9wcmV2IGxpbmUgaW5kZW50ZWQgbm90IG1vcmUgdGhhbiBhIGNlcnRhaW4gcG9pbnQuCisgLSBDb21tYW5kIHRvIGZpbmQgbmV4dC9wcmV2IGxpbmUgZm9sbG93aW5nIGJsYW5rIGxpbmVzIChuZXh0L3ByZXYgcGFyYWdyYXBoKS4KKyAtIENvbW1hbmQgdG8gc2VhcmNoIGZvciBzb21lIHRleHQgb24gdGhlIHNjcmVlbi4gVGV4dCBpcyB0YWtlbiBmcm9tCisgICBjdXRfYnVmZmVyLgorIC0gRml4ZXMgdG8gRXh0ZXJuYWxTcGVlY2ggZHJpdmVyLiBDYW4gbm93IHBhc3MgdWlkIHRocm91Z2ggc3BlZWNoIGRyaXZlcgorICAgcGFyYW1ldGVyLgorCisyNiBOb3YgMjAwMDoKKyAtIHZlcnNpb24gMi45NiAoYmV0YSk6CisgLSBWYXJpbyBzdXBwb3J0IHVwZGF0ZXMgZnJvbSBNYXJpbyBMYW5nIDxtbGFuZ0Bob21lLmRlbHlzaWQub3JnPgorIC0gQUxWQSBTYXRlbGxpdGUgNTQ0IHN1cHBvcnQgZnJvbSBLYXp1bm9yaSBNSU5BVEFOSSA8OTkxMTIwMDRAZ2FrdXNodWluLmFjLmpwPgorIC0gVmFyaW91cyBwaWVjZXMgZnJvbSBTdMOpcGhhbmUgRG95b24sIG1vc3Qgbm90YWJseToKKyAgIC0gY3Vyc29yIHJvdXRpbmcgcmFjZSBmaXggdGhhdCBzaG93ZWQgYXMgYSBCUkxUVFkgZnJlZXplIHdpdGgKKyAgICAgbGF0ZXN0IDIuNC4wLXRlc3QqIExpbnV4IGtlcm5lbHM7CisgICAtIEJSTFRUWSBub3cgZG9lc24ndCBleGl0IG9uIHN0YXJ0dXAgd2hlbiBtaW5vciBpLmUuIG5vbi1mYXRhbAorICAgICBlcnJvcnMgb2NjdXI7CisgICAtIGxvZ2xldmVsIGxvd2VyZWQgb24gbGVzcyBpbXBvcnRhbnQgbWVzc2FnZXMgdG8gcmVkdWNlIG5vaXNlOworICAgLSBmaXhlcyB0byB0aGUgbW9kdWxlIGZvciBleHRlcm5hbCBzcGVlY2ggcHJvZ3JhbSBzdXBwb3J0OworICAgLSBUU0kgZHJpdmVyIHVwZGF0ZXMKKyAgIC0gbXVsdGlwbGUgbmV3IGNvbW1hbmQgYmluZGluZ3MgZm9yIHNwZWVjaDsKKyAgIC0gc3BlZWNoIHRyYWNraW5nOworICAgLSB2YXJpb3VzIGNsZWFudXAuCisKKzE2IFNlcCAyMDAwOgorIC0gdmVyc2lvbiAyLjk1IChiZXRhKToKKyAtIEVjb0JyYWlsbGUgZHJpdmVyIHVwZGF0ZSBmcm9tIE9zY2FyIEZlcm5hbmRleiA8b2ZhQG9uY2UuZXM+CisgLSBBdHRyaWJ1dGUgdHJhY2tpbmcgdHVuaW5nIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4KKyAtIEV1cm9CcmFpbGxlIGRyaXZlciB1cGRhdGUgZnJvbSBZYW5uaWNrIFBsYXNzaWFyZCA8WWFubmljay5QbGFzc2lhcmRAZnJlZS5mcj4KKyAtIEFkZGVkIEV4dGVybmFsU3BlZWNoIHNwZWVjaCBkcml2ZXI6IGZvciBzZW5kaW5nIHNwZWVjaCB0byBhbiBleHRlcm5hbAorICAgcHJvZ3JhbSB3aXRoIG91ciBjdXN0b20gcHJvdG9jb2wuIEludGVuZGVkIGZvciBhIGJpdCBtb3JlIHNvcGhpc3RpY2F0ZWQKKyAgIHNwZWVjaCBmZWF0dXJlczogc3BlZWNoIHRyYWNraW5nLCBhbmQgcGFzc2luZyB2aWRlbyBhdHRyaWJ1dGVzLiAKKyAgIEZpcnN0IGludGVuZGVkIGZvciB1c2Ugd2l0aCBJQk0ncyBWaWF2b2ljZSBUVFMgQUtBIFZpYXZvaWNlIE91dExvdWQuCisgICBUaGUgZXh0ZXJuYWwgc3BlZWNoIHByb2dyYW0gd2lsbCBiZSByZWxlYXNlZCBzZXBhcmF0ZWx5LgorIC0gQWRkZWQgc3VwcG9ydCBmb3Igc3BlZWNoIHRyYWNraW5nIChmb3Igc3ludGhzIHRoYXQgcHJvdmlkZSB3b3JkIGluZGV4aW5nKS4KKyAtIEFkZGVkIG9wdGlvbiB0byBza2lwIGRpcmVjdGx5IHRvIG5leHQvcHJldiBsaW5lIG9uIEZXSU5SVC9MVCB3aGVuIHRoZQorICAgcmVzdCBvZiB0aGUgbGluZSBpcyBibGFuay4KKyAtIE1EViBicmFpbGxlIGRyaXZlciB1cGRhdGUuCisKKzIzIE1heSAyMDAwOgorIC0gdmVyc2lvbiAyLjkwIChiZXRhKToKKyAtIFRpZW1hbiBNdWx0aUJyYWlsbGUgZHJpdmVyLCBjb250cmlidXRlZCBieSBXb2xmZ2FuZyBBc3RsZWl0bmVyCisgICA8d29sZmdhbmcuYXN0bGVpdG5lckBsaXdlc3QuYXQ+CisgLSBQdXQgc3RhcnRicmwoKSBiYWNrIGFmdGVyIGRhZW1vbml6ZWQgYmVjYXVzZSBzb21lIGRyaXZlcnMgZXhwZWN0IHRvIGhhdmUKKyAgIGFsbCBsaWZlIHRpbWUgdG8gcHJvYmUgZm9yIGEgdGVybWluYWwuICBDcmVhdGVkIGluaXRobHBzY3IoKSBpbnN0ZWFkLgorIC0gUmVwbGFjZWQgJ2crKycgYnkgJ2djYycgaW4gdGhlIE1ha2VmaWxlIGVsaW1pbmF0aW5nIGRlcGVuZGVuY2llcyAKKyAgIHdpdGggbGlic3RkYysrCisKKzI0IEFwcmlsIDIwMDA6CisgLSB2ZXJzaW9uIDIuNTEgKGJldGEpOgorIC0gYWRkZWQgbmV3IGRyaXZlciBmb3IgYWxsIFBhcGVubWVpZXIgdGVybWluYWxzIChBSCkKKyAgICAtIGF1dG9kZXRlY3Rpb24KKyAgICAtIGNvbmZpZ3VyYXRpb24gdmlhIGNvbmZpZyBmaWxlCisKKyAtIGNoYW5nZWQgdGhlIHN0YXJ0dXAgb3JkZXIgKEFIKSAtIG5ldyBvcmRlcjoKKyAgICAgbG9hZGNvbmZpZygpCisgICAgIHN0YXJ0YnJsKCkgICAgIC0tIHBtOiBhdXRvZGV0ZWN0aW9uLCBjaGFuZ2VzIG5hbWUgb2YgaGVscCBmaWxlCisgICAgIGludHNjcihoZWxwZmlsZSkKKworMDggQXByaWwgMjAwMDoKKyAgLSBSZWxlYXNlZCBCUkxUVFkgMi41MCAoYmV0YSkKKyAgLSBBZGRlZCBJbnN0YWxsYXRpb24gQm9vdGRpc2sgSGFja2luZyBNaW5pLUhvd1RvIChTRCwgTlApCisgIC0gRml4ZWQgQnJhaWxsZUxpdGUgc3BlZWNoIGxvYWRpbmcgKGFkZGVkIFJUTERfR0xPQkFMIHRvIGRsb3BlbigpIGZsYWdzKSAoTlApCisgIC0gVFNJIGRyaXZlciB1cGRhdGVzIChTRCkKKyAgLSBCcmFpbGxlTGl0ZSBhZHZhbmNlIGJhciBiaW5kaW5nIGltcHJvdmVtZW50cyBmcm9tIFBldGUgRGUgVmFzdG8gCisgICAgPHBkZXZhc3RvQGluY3l0ZS5jb20+CisgIC0gQXBwbHkgdGhlIC1xIG9wdGlvbiB0byBhbGwgbG9nIG1lc3NhZ2VzLiBOZXZlciBwcmludCBkZWJ1ZyBtZXNzYWdlcy4KKyAgICAgIElmIC1xIGlzIHNwZWNpZmllZCB0aGVuIGRvbid0IHByaW50IGluZm9ybWF0aW9uIG1lc3NhZ2VzIGFuZAorICAgICAgbm90aWNlcy4gKERNKQorICAtIENoYW5nZSB0aGUgZGVmYXVsdCBvZiB0aGUgLWwgb3B0aW9uIGZyb20gNCAoTE9HX1dBUk5JTkcpIHRvIDUgKExPR19OT1RJQ0UpLiAoRE0pCisgIC0gU3RhbmRhcmRpemVkIHRoZSB3YXkgaW4gd2hpY2ggZHJpdmVycyBpZGVudGlmeSB0aGVtc2VsdmVzOgorICAgICAgTE9HX05PVElDRSBmb3IgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiwgTE9HX0lORk8gZm9yIGNvcHlyaWdodC4KKyAgICAgIEZpcnN0IGxpbmUgbm8gaW5kZW50LCBzdWJzZXF1ZW50IGxpbmVzIGluZGVudGVkIDMgc3BhY2VzLiAoRE0pCisgIC0gQWRkZWQgUGFwZW5tZWllciBmdW5jdGlvbnM6IENNRF9TQVkgdG8gc3RhdHVzIGtleSA1LCBDTURfTVVURSB0bworICAgICAgc3RhdHVzIGtleSA0LiAoRE0pCisgIC0gUGFwZW5tZWllciBzdGF0dXMgY2VsbHMgZGlkIG5vdCBzYXkgIkluZm8gIiB3aGVuIGluIGluZm8gbW9kZS4gRml4ZWQuIChETSkKKyAgLSBUaGUgZGVmYXVsdCBuYW1lIG9mIHRoZSBjb25maWd1cmF0aW9uIHNhdmUvcmVzdG9yZSBmaWxlIGlzIG5vdworICAgICAgZHJpdmVyLWRlcGVuZGVudC4gUmVuYW1lZCBmcm9tICIvZXRjL2JybHR0eS9icmx0dHljb25mLmRhdCIgdG8KKyAgICAgICIvZXRjL2JybHR0eS9icmx0dHktWFguZGF0Iiwgd2hlcmUgIlhYIiBpcyB0aGUgdHdvLWxldHRlcgorICAgICAgaWRlbnRpZmllciBvZiB0aGUgYnJhaWxsZSBkcml2ZXIuIFRvIHByZXNlcnZlIGN1cnJlbnQgc2V0dGluZ3MKKyAgICAgIHdoZW4gdXBncmFkaW5nLCBwcmVzZXJ2ZSBhbmQgcmVuYW1lIG9sZCBmaWxlLiAoRE0pCisgIC0gVXNlIGdldG9wdF9sb25nLCBpZiB0aGUgaW5zdGFsbGF0aW9uIGhhcyBpdCwgdG8gZ2l2ZSBldmVyeSBvcHRpb24gYQorICAgICAgbG9uZyAoLS1rZXl3b3JkIG9yIC0ta2V5d29yZD12YWx1ZSkgbmFtZS4gKERNKQorICAtIEFkZCBzdXBwb3J0IGZvciAiL2V0Yy9icmx0dHkuY29uZiIgKHdpdGggc2FtcGxlIGZpbGUgaW4gRE9DUworICAgICAgc3ViZGlyZWN0b3J5KS4gKERNKQorICAtIFBhcGVubWVpZXIgZHJpdmVyIG5vdyB1c2VzIHNhZmUgcmVhZCBhbmQgd3JpdGUgcm91dGluZXMuIChETSkKKyAgLSBTYWZlIHJlYWQgYW5kIHdyaXRlIHJvdXRpbmVzIG5vdyBhdmFpbGFibGUgZm9yIGRyaXZlcnMgc28gdGhhdAorICAgICAgc2lnbmFscyB3b24ndCBpbnRlcmZlcmUgd2l0aCB0aGVpciBJL08gb3BlcmF0aW9ucy4gKERNKQorICAtIEZ1bGwgbGlzdCBvZiBzcGVlY2ggZHJpdmVycyBub3cgZGlzcGxheWVkIGlmIGJhZCBkcml2ZXIgc3BlY2lmaWVkLiAoRE0pCisgIC0gQWRkIG1vcmUgb3B0aW9ucyB0byB0aGUgR2VuZXJpY1NheSBBY2NlbnRTQSBoZWxwZXIgc2NyaXB0LiAoRE0pCisgIC0gQ3Vyc29yIHJvdXRpbmcgaGFzIGJlZW4gYnJva2VuIC0tIGZpeGVkICAoTlApCisgIC0gQmV0dGVyIGZpeCBmb3IgY3Vyc29yIHJvdXRpbmcgd2hpY2ggaGFwcGVuZWQgdG8gcmUtb3BlbiBhbmQgcmVkZXRlY3QgCisgICAgc2NyZWVuIGZvbnQsIGFuZCBpbmNpZGVudGFsbHkgd3JpdGluZyB0byBzdGRlcnIuICBGaXhlZCAgKE5QKQorICAtIEZpeGVkIGNvbXBpbGF0aW9uIHdhcm5pbmdzICAoTlApCisKKzAxIEFwcmlsIDIwMDA6CisgIC0gUmVsZWFzZWQgQlJMVFRZIDIuNDAgKGJldGEpCisgIC0gV29yayBmcm9tIERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz46CisgICAgLSBBZGRlZCBoZWxwZXIgc2NyaXB0IGZvciBBY2NlbnQvU0EgdG8gR2VuZXJpY1NheS4KKyAgICAtIEdlbmVyaWNTYXkgbm93IGNsb3NlcyBwaXBlIHRvIHNpZ25hbCBtdXRlIGZ1bmN0aW9uLgorICAgIC0gR2VuZXJpY1NheSBjb21tYW5kIGNoYW5nZWQgdG8gL3Vzci9sb2NhbC9iaW4vc2F5IGZyb20gL3Vzci9iaW4vc2F5LgorICAgIC0gR2VuZXJpYy1zYXkgcmVuYW1lZCB0byBHZW5lcmljU2F5LgorICAgIC0gU3BlZWNoIGRyaXZlciBhcmUgZHluYW1pY2FsbHkgbG9hZGFibGUuCisgICAgLSBCUkxUVFkgbm93IGhhcyB0aGUgYWJpbGl0eSB0byBkZXRlcm1pbmUgdGhlIGNoYXJhY3RlciBzZXQgdXNlZCBieSAKKyAgICAgIHRoZSBzY3JlZW4gZm9udHMuCisgIC0gQ3JlZGl0cyBvd25lciBmb3IgdGhlIHByZXZpb3VzIGl0ZW0gY29ycmVjdGVkICh0aGV5IGFjdHVhbGx5IHNob3VsZCBnbyB0bworICAgIEF1Z3VzdCBIw7ZyYW5kbCkuCisgIC0gQWxsIHBvc3NpYmxlIGR5bmFtaWMgbG9hZGFibGUgYnJhaWxsZSBkcml2ZXJzIGFyZSBsaXN0ZWQgaWYgdGhlcmUgaXMgbm8KKyAgICB2YWxpZCBzZWxlY3Rpb24gcHJvdmlkZWQuICAoTlApCisKKzI4IE1hcmNoIDIwMDA6CisgIC0gUmVsZWFzZWQgQlJMVFRZIDIuMzAgKGJldGEpCisgIC0gQnJhaWxsZSB0ZXJtaW5hbCBkcml2ZXJzIGFyZSBub3cgZHluYW1pY2FsbHkgbG9hZGFibGUuICBUaGlzIGlzIGEgYmlnCisgICAgY2hhbmdlLiBDcmVkaXRzIGdvIHRvOgorICAgICAgQXVndXN0IEjDtnJhbmRsIDxhdWd1c3QuaG9lcmFuZGxAZ214LmF0PgorICAgICAgICBPcmlnaW5hbCB3b3JrCisgICAgICBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+CisgICAgICAgIFJlc3luY2hpbmcgd2l0aCBjdXJyZW50IEJSTFRUWSB2ZXJzaW9uLCBjbGVhbnVwLCBldGMuCisKKzAxIEphbnVhcnkgMjAwMDoKKyAgLSBSZWxlYXNlZCBCUkxUVFkgMi4yMSAoYmV0YSkKKworRGVjZW1iZXIgMTk5OToKKyAgLSBDb250cmlidXRpb24gb2YgYSBkcml2ZXIgZm9yIEJBVU0gVmFyaW8gKGVtdWxhdGlvbiBtb2RlIDIgLyBIVC1Qcm90b2NvbCkKKyAgICArIGEgU3dlZGlzaCBicmFpbGxlIHRhYmxlIGZyb20gUGVyIExlam9udGFuZCA8cGVyQGFjYy51bXUuc2U+ICh3aXRoCisgICAgYXNzaXN0YW5jZSBmcm9tIE5pa2xhcyBFZG11bmRzc29uIDxuaWtrZUBhY2MudW11LnNlPikuIEJSTFRUWSBiZXRhCisgICAgdmVyc2lvbiAyLjIwIHdpbGwgYmUgY2lyY3VsYXRlZCBzbyB0aGF0IHRoaXMgZHJpdmVyIGNhbiBiZSB0ZXN0ZWQuCisKK09jdG9iZXIgMTk5OToKKyAgLSBUU0kgZHJpdmVyOiBXb3JrYXJvdW5kIGZvciBxdWlya3Mgb2YgVFNJIGVtdWxhdG9ycyBzdWNoIGFzIFZhcmlvLgorCitKdW5lIDE5OTk6CisgIC0gQ29tcGxldGVkIGZpcnN0IHN0YWJsZSBiZXRhIHZlcnNpb24gb2YgTURWIGRyaXZlci4KKworMjEgSnVuZSAxOTk5OgorICAtIFJlbGVhc2VkIEJSTFRUWSAyLjExIChiZXRhKQorICAtIEFkZGVkIHN1cHBvcnQgZm9yIEJyYWlsbGVMaXRlIDQwIChOUCkuCisgIC0gQWRkZWQgYXV0b2RldGVjdGlvbiBvZiBzb21lIGV4dHJhIENvbWJpQnJhaWxsZSBtb2RlbHMuICBUaGFua3MgdG8KKyAgICBXaWxsaWFtIEJsb2tsYW5kIDxXaWxsaWFtX0Jsb2tsYW5kQHRpZW1hbi5ubD4uCisgIC0gQWRkZWQgQWx2YSBEZWxwaGkgODAgc3VwcG9ydC4gIFRoYW5rcyB0byA/Pz8gPGNzdHJvYmVsQGNyb3NzbGluay5uZXQ+LgorCisyMyBNYXJjaCAxOTk5OgorICAtIEJSTFRUWSAyLjEgcmVsZWFzZWQuCisgIC0gQ29tcGxldGVkIHVwZGF0ZXMgdG8gdGhlIG1hbnVhbCAoZW5nbGlzaCB2ZXJzaW9uIG9ubHkpIGZvciAyLjEuCisgIC0gbWlzc2luZyBlcnJuby5oIGZvciBzb21lIGRyaXZlcnMgd2hlbiBjb21waWxpbmcgb24gbXkgUmVkSGF0IChnbGliYyksCisgICAgSSBhZGRlZCB0aGUgaW5jbHVkZSB0byBtaXNjLmguCisgIC0gV29yay1hcm91bmQgZm9yIGJ1ZyBpbiBMaW51eCBrZXJuZWwgMi4wLjM1OiBiZWVwcyB3b3VsZG4ndCBzdG9wLi4uCisgIC0gd3JpdGVicmwoKSBhbmQgY2xvc2VicmwoKSBub3cgcmVjZWl2ZSBhIHBvaW50ZXIgb24gdGhlIGJybGRpbSBzdHJ1Y3R1cmUsCisgICAgbGlrZSBpbmlicmwoKS4KKyAgLSBSZW1vdmVkIHN5c2xvZyB3YXJuaW5nIHdoZW4gdGhlIGRlZmF1bHQgY29uZmlnIGZpbGUgZG9lc24ndCBleGlzdC4KKyAgLSBBZGRlZCBFY29CcmFpbGxlIHN1cHBvcnQuICBUaGFua3MgdG8gT3NjYXIgRmVybmFuZGV6IDxvZmFAb25jZS5lcz4uCisgIC0gTWlub3IgdXBkYXRlIHRvIFRTSSBkcml2ZXIgKDIuMSkuCisgIC0gQWRkZWQgc29tZSBiaW5kaW5ncyBmb3Igc3dpdGNoaW5nIHNldHRpbmdzIGluIGNvbmZpZyBtZW51LiBRdWlja2x5CisgICAgZml4ZWQgdGhlIG1hbnVhbC4gUmVnZW5lcmF0ZWQgdGhlIGdlcm1hbiBtYW51YWwgdXNpbmcgbGF0aW4tMSBzb3VyY2UKKyAgICB0aG91Z2ggbm90IHdpdGggYWxsIHN1Z2dlc3RlZCBvcHRpb25zLgorICAtIFNvbWUgdHdlYWtzIHRvIHRoZSBCcmFpbGxlTGl0ZSBkcml2ZXIgKE5QKQorICAtIFJld29yayBvZiB0aGUgY29uZmlnIG1lbnUgc28gc21hbGwgYnJhaWxsZSBkaXNwbGF5cyBjYW4gdXNlIGl0LgorICAtIEFsdmEgRGVscGhpIHN1cHBvcnQgYWRkZWQgKHRoYW5rcyB0byBUZXJyeSBCYXJuYWJ5IAorICAgIDx0ZXJyeUBiZWFtLmRlbW9uLmNvLnVrPikuCisgICAgTm93IEFsdmFfQUJUMyBpcyBjYWxsZWQgQWx2YS4KKyAgLSBBbHZhIHBhcmFsbGVsIHBvcnQgc3VwcG9ydCBhZGRlZCB1c2luZyBKLiBsZW1tZW5zIAorICAgIDxqbGVtbWVuc0BpbnRlci5ubC5uZXQ+ICdzIGxpYnJhcnkuCisKKzIyIERlY2VtYmVyIDE5OTg6CisgIC0gQnJhaWxsZUxpdGUgMTggYW5kIEZlc3RpdmFsIHN1cHBvcnQgZnJvbSBOaWtoaWwgYWRkZWQuCisgICAgQWxzbyBlbGltaW5hdGVkIHRoZSBuZWVkIGZvciBhIGZpeGVkIG1lbnUgaXRlbSBsZW5ndGgKKyAgICBhbmQgaXQncyBub3cgcG9zc2libGUgdG8gdXNlIGEgZGlzcGxheSBzbWFsbGVyIHRoYW4gYW55IG1lbnUgaXRlbSBpLmUuCisgICAgdGhlIEJyYWlsbGVMaXRlIDE4LgorICAtIENvbnRyaWJ1dGlvbiBvZiBOb3J3ZWdpYW4gYnJhaWxsZSB0YWJsZXMgYW5kIGlibTg1MHRvaXNvIGZyb20gCisgICAgSGVsZ2UgSGF2bmVnamVyZGUgPGhlbGdlLmhhdm5lZ2plcmRlQGMyaS5uZXQ+CisKKzIyIEp1bHkgMTk5ODogQlJMVFRZIDIuMCByZWxlYXNlZCEKKyAgLSBBbm90aGVyIGZpeCB0byB0aGUgY3Vyc29yIHJvdXRpbmcgYWxnb3JpdGhtCisgIC0gV2ViIHBhZ2VzIG9ubGluZSBhdCBodHRwOi8vd3d3LmNhbS5vcmcvfm5pY28vYnJsdHR5CisgIC0gRml4ZXMgdG8gY29tcGlsZSB3aXRoIGVnY3MgYW5kIGdsaWJjIChSSDUuMSkKKyAgLSBGaXhlZCBDb21iaWJyYWlsbGUgc3BlZWNoIHN1cHBvcnQgKGJyb2tlbiB3aGVuIEJSTFRUWSBtb3ZlZCB0byAKKyAgICBJU08tODg1OS0xIGJhc2UgY2hhcnNldCB3aGlsZSB0aGUgQ29tYmlicmFpbGxlIGV4cGVjdHMgYW4gSUJNIENQNDM3CisgICAgY2hhcnNldCkuCisgIC0gVXBkYXRlZCBtYW51YWwsIEZBUSBhbmQgVE9ETy4KKyAgLSBGaXhlcyAoaG9wZWZ1bGx5KSB0byB0aGUgY3Vyc29yIHJvdXRpbmcgYWxnb3JpdGhtIGluIGNzcmptcF9zdWIuCisgIC0gQWRkZWQgc3lzbG9nIHN1cHBvcnQgZnVuY3Rpb25zLCBhbmQgbWVzc2FnZXMgaW4gYnJsdHR5LmMuCisgIC0gQWRkZWQgQ01EX1JFU1RBUlRCUkwgY29tbWFuZCB0byByZWluaXRpYWxpemUgYnJhaWxsZSBkcml2ZXIgd2hlbgorICAgIHRoZSBicmFpbGxlIGRpc3BsYXkgaXMgdHVybmVkIG9mZi4KKyAgLSAgQWRkaXRpb25zIHRvIFRTSSBkcml2ZXI6IHN1cHBvcnQgZm9yIFBCNjUvODAsIHN1cHBvcnQgZm9yIGFsbCBQQiBtb2RlbHMKKyAgICAgYXQgMTkyMDBiYXVkLCBkZXRlY3RzIHdoZW4gZGlzcGxheSBpcyB0dXJuZWQgb2ZmIGFuZCByZWluaXRpYWxpemVzIGl0c2VsZi4KKyAgLSAgUGFwZW5tZWllciBkcml2ZXIgdXBkYXRlLgorICAtICBFdXJvQnJhaWxsZSBkcml2ZXIgZml4ZXMuCisgIC0gQWRkZWQgQ01EX0NTUkpNUF9WRVJUIGNvbW1hbmQgd2hpY2ggcm91dGVzIHRoZSBjdXJzb3IgdG8gdGhlIGN1cnJlbnQgbGluZQorICAgIGJ1dCBkb2VzIG5vdCB0cnkgdG8gY2hhbmdlIHRoZSBob3Jpem9udGFsIHBvc2l0aW9uLiBIb3BlZnVsbHkgd2lsbCBiZQorICAgIHVzZWZ1bCBpbiBseW54IQorICAtICBBZGRlZCBhdHRyaWJ1dGUgdW5kZXJsaW5pbmcvYmxpbmtpbmcgZnVuY3Rpb25zIChleHBlcmltZW50YWwpLgorICAtICBJbmNvcnBvcmF0ZWQgUGFwZW5tZWllciBicmFpbGxlIHRlcm1pbmFsIGRyaXZlciArIEdlcm1hbiBtYW51YWwuCisgICAgIFRoYW5rcyB0byBBdWd1c3QgSMO2cmFuZGwgPGhvZXJhbmRsQGVsaW5hLmh0bHcxLmFjLmF0PiBhbmQgaGlzIHRlYW0hCisgIC0gIEFsdmEgZHJpdmVyIGZpeGVzLgorCisKKzA3IEFwcmlsIDE5OTg6IEJSTFRUWSAxLjkuMCBwcmUtcmVsZWFzZS4KKyAgLSAgQWRkZWQgYWJzb2x1dGUgdG9nZ2xlcyAoT04vT0ZGKSBmbGFncyB0byBmdW5jdGlvbiBkZWZpbmVzLgorICAtICBNb3ZlZCBicmFpbGxlIHRhYmxlcyBhbmQgdG9vbHMgdG8gdGhlIEJyYWlsbGVUYWJsZXMgZGlyZWN0b3J5LgorICAtICBBZGRlZCBFdXJvYnJhaWxsZSB0ZXJtaW5hbCBzZXJpZXMgZHJpdmVyLgorICAtICBOb3cgQlJMVFRZIGtub3dzIHdoaWNoIHZpcnR1YWwgY29uc29sZSBpcyBhY3RpdmUgYW5kIHByZXNlcnZlcyBzZXBhcmF0ZQorICAgICBpbmZvcm1hdGlvbiBzdHJ1Y3R1cmVzIGZvciBlYWNoIG9mIHRoZW0uICBUaGlzIG1lYW5zIHByZXNlcnZpbmcgCisgICAgIGN1cnJlbnQgd2luZG93IHBvc2l0aW9uLCB0cmFja2luZyBhbmQgZGlzcGxheSBtb2RlcyBhcyB5b3Ugc3dpdGNoCisgICAgIGZyb20gYSB2aXJ0dWFsIGNvbnNvbGUgdG8gYW5vdGhlci4gCisgIC0gIE5pY29sYXMgUGl0cmUgbm93IGFzc3VtZXMgbWFpbnRlbmFuY2Ugb2YgQlJMVFRZIHNpbmNlIE5pa2hpbCBOYWlyCisgICAgIHNlZW1zIHRvIGJlIHVucmVhY2hhYmxlIGZvciBxdWl0ZSBhIGxvbmcgdGltZS4KKyAgLSAgTW9kdWxhcml6ZWQgc2NyZWVuIGRyaXZlcnMsIGFkZGVkIGV4cGVyaW1lbnRhbCBzY3JlZW4gZHJpdmVyIHRvIGdldAorICAgICBzY3JlZW4gaW1hZ2UgZnJvbSB0aGUgInNjcmVlbiIgcHJvZ3JhbS4gIEEgcGF0Y2ggZm9yICJzY3JlZW4iIGlzIHByb3ZpZGVkCisgICAgIGluIHRoZSBQYXRjaGVzIGRpcmVjdG9yeS4KKyAgLSAgTWFkZSBhbGwgZGlmZmVyZW50IG1ldGhvZHMgb2YgaGFuZGxpbmcgc3RhdHVzIGNlbGxzIGF2YWlsYWJsZQorICAgICB3aXRoaW4gdGhlIGNvbmZpZ3VyYXRpb24gbWVudS4gIFRoZSBkZWZhdWx0IGlzIGRldGVybWluZWQgYnkKKyAgICAgdGhlIGNvbXBpbGVkIGluIGJyYWlsbGUgZHJpdmVyLgorICAtICBJbmNvcnBvcmF0ZWQgcGF0Y2ggZnJvbSBKb2VyZyBLb3JpbmVrIDxrb3JpbmVrQGlyYS51a2EuZGU+IHdoaWNoIGxldHMKKyAgICAgdGhlIG1haW4gQlJMVFRZIHByb2Nlc3MgY29udGludWUgd2hpbGUgY3Vyc29yIHJvdXRpbmcgaXMgaW4gcHJvZ3Jlc3MuCisgICAgIFRoYW5rcyEKKyAgLSAgQWRkZWQgc29tZSBuZXcgZnVuY3Rpb25zIHRvIHNjci5jYywgd2hpY2ggYWRkIGEgbmV3IGB0aHJlYWQnIG9mCisgICAgIHNjcmVlbiByZWFkaW5nLiAgVGhpcyBpcyB1c2VkIGJ5IGNzcmptcF9zdWIoKSwgdG8gYXZvaWQgcmFjZSBjb25kaXRpb25zLgorICAgICBbVGhlIHByb2JsZW0gd2FzIHRoYXQgYSBmb3JrZWQgc3VicHJvY2VzcyBzaGFyZXMgZmlsZWRlc2NyaXB0b3JzIHdpdGgKKyAgICAgdGhlIHBhcmVudCwgYW5kIGBjbG9uZSAoMCwgU0lHQ0hMRCB8IENPUFlWTSB8IENPUFlGRCknIChhcyBkb2N1bWVudGVkCisgICAgIGluIGNsb25lKDIpKSB3b3VsZG4ndCBjb21waWxlLl0KKyAgLSAgQ1VSU09SIFJPVVRJTkcgTk9XIEFQUEVBUlMgVE8gQkUgU1RBQkxFISEhCisgIC0gIEJSTFRUWSBwbGFjZWQgdW5kZXIgQ1ZTIHJldmlzaW9uIGNvbnRyb2wgLSBJZCBoZWFkZXJzIGFkZGVkIHRvIG1hbnkKKyAgICAgZmlsZXMuCisgIC0gIEN1cnNvciByb3V0aW5nIHRpbWVvdXQgbWFkZSBhbiBpZGxlIHRpbWVvdXQgb2YgMiBzZWNvbmRzOiByb3V0aW5nCisgICAgIGNvbnRpbnVlcyB1bnRpbCB0aGUgY3Vyc29yIGlzIGlkbGUgZm9yIHRoaXMgbGVuZ3RoIG9mIHRpbWUuCisgIC0gIEFkZGVkIENNRF9TS1BJRExOUy4KKyAgLSAgU3BlZWNoIHN1cHBvcnQgbW9kdWxhcmlzZWQuICBBZGRlZCBzcGVlY2guaCwgYXMgd2VsbCBhcyBTUEtfVEFSR0VUIGluCisgICAgIHRoZSBNYWtlZmlsZSBhbmQgY29ycmVzcG9uZGluZyBkaXJlY3Rvcmllcy4KKyAgLSAgQWRkZWQgdmVyeSBzaW1wbGUgc3BlZWNoIGludGVyZmFjZSBhbmQgZmV3IHNwZWVjaCBkcml2ZXJzLgorICAtICBTdGF0dXMgY2VsbHMgc3RhbmRhcmRpc2VkOiB0d28gdHlwZXMgKEFsdmEvVGllbWFuKSBvciBub25lLCBzd2l0Y2ggaW4KKyAgICAgY29uZmlndXJhdGlvbiBtZW51LiAgSGVuY2UgYW5vdGhlciBuZXcgY29uZmlnIGZpbGUgZm9ybWF0IDotKC4KKyAgLSAgQSBmZXcgYnVnZml4ZXMuCisgIC0gIFNvbWUgam9iIGNvbnRyb2wgZmluZXR1bmluZyBpbiBjc3JqbXAoKSBhbmQgY3Nyam1wX3N1YigpIC0gbm93IHVzZQorICAgICBTSUdVU1IxIHRvIGtpbGwgY2hpbGQgcHJvY2VzcyBiZWZvcmUgYW5vdGhlciBjaGlsZCBpcyBmb3JrZWQ7IGNoaWxkCisgICAgIGJsb2NrcyB0aGlzIHNpZ25hbCBmb3IgbW9zdCBvZiB0aGUgdGltZS4KKyAgLSAgQWRkZWQgc3VwcG9ydCBmb3IgKG9wdGlvbmFsKSBNYWtlZmlsZXMgaW4gZHJpdmVyIHN1YmRpcmVjdG9yaWVzLgorCisKKzE3IFNlcHRlbWJlciAxOTk2OiBCUkxUVFkgMS4wLjIgcmVsZWFzZWQuCisgIC0gIEluY29ycG9yYXRlZCBza2lwcGluZyBvZiBpZGVudGljYWwgbGluZXMuICBBZGFwdGVkIHRvIG1ha2UgYSBsaW5lCisgICAgIGNvbnRhaW5pbmcgdGhlIGN1cnNvciBkaWZmZXJlbnQgdG8gYW55IG90aGVyLgorICAtICBDb25maWcgZmlsZSBmb3JtYXQgdXBkYXRlZCwgc28gb2xkIGNvbmZpZyBmaWxlcyB3b24ndCB3b3JrIGFueSBtb3JlLgorICAtICBTb21lIHRpZHlpbmcgdXAgb2YgdGhlIGFyY2hpdmUgYW5kIG9mIHRoZSBkb2N1bWVudGF0aW9uLgorCisKKzEzIFNlcHRlbWJlciAxOTk2OiBCUkxUVFkgMS4wLjEgcmVsZWFzZWQuCisgIC0gIFNwZWVjaCBzdXBwb3J0IGFkZGVkIGZvciBDb21iaUJyYWlsbGUuCisgIC0gIERvY3VtZW50YXRpb24gYnJvdWdodCB1cCB0byBkYXRlLgorCisKKzMgU2VwdGVtYmVyIDE5OTY6IHByZXJlbGVhc2Ugb2YgQlJMVFRZIDEuMC4xLgorICAtICBTY3JlZW4gcmVhZGluZyBsaWJyYXJ5IHJld3JpdHRlbiBmcm9tIHNjcmF0Y2gsIGluIEMrKyAoYnV0IHdpdGhvdXQKKyAgICAgdXNpbmcgYW55IGNsYXNzIGxpYnJhcmllcywgc28gbm8gZXh0cmEgc2hhcmVkIGxpYnJhcmllcyBhcmUgbmVlZGVkKS4KKyAgICAgSW4gcGFydGljdWxhciwgdGhlIGRlcGVuZGVuY2Ugb24gdGhlIExpbnV4IHZjc2EgZm9ybWF0IGlzIGdvbmU6IHRoZXJlCisgICAgIGlzIGEgbmV3IGhlbHAgZmlsZSBmb3JtYXQgd2hpY2ggaXMgZmFyIG1vcmUgY29tcGFjdCB0aGFuIHRoZSBvbGQgb25lCisgICAgICh0eHQyaGxwIHJlcGxhY2VzIHR4dDJzY3JuLCBicmx0dHlkZXYuaGxwIHJlcGxhY2VzIGJybHR0eWhlbHAuc2NyKSwKKyAgICAgYW5kIGZyZWV6ZSBtb2RlIHdvcmtzIHByb3Blcmx5LCBieSB1c2luZyBhIGR5bmFtaWNhbGx5IGFsbG9jYXRlZAorICAgICBtZW1vcnkgYnVmZmVyIGluc3RlYWQgb2YgdGhlIG9sZCAvdG1wL3Zjc2EuZnJ6IGhhY2suCisgIC0gIEJSTFRUWSBjYW4gbm93IHN1cnZpdmUgYXMgYSBzdGFuZC1hbG9uZSBleGVjdXRhYmxlLCB3aXRoIGFic29sdXRlbHkgbm8KKyAgICAgZGF0YSBmaWxlcyAtIGV2ZW4gaWYgL2V0Yy9icmx0dHkvIGlzIG5vdCBmb3VuZC4gIFRoaXMgaXMgZG9uZSBieQorICAgICBjb21waWxpbmcgaW4gdGhlIGRlZmF1bHQgdGV4dCB0cmFuc2xhdGlvbiB0YWJsZSAobm93IHNlbGVjdGVkIGluIHRoZQorICAgICBNYWtlZmlsZSkgYW5kIHRoZSBhdHRyaWJ1dGUgdHJhbnNsYXRpb24gdGFibGUuICBUaGUgY29tcGlsYXRpb24gaXMgZG9uZQorICAgICBieSB1c2luZyB0aGUgbmV3IGZpbHRlciBjb21wdGFibGUgdG8gZ2VuZXJhdGUgdGV4dC5hdXRvLmggYW5kCisgICAgIGF0dHJpYi5hdXRvLmguICBBIHRleHQgdHJhbnNsYXRpb24gdGFibGUgaXMgbm93IG9ubHkgbG9hZGVkIGlmIHRoZQorICAgICAtdCBvcHRpb24gaXMgc3BlY2lmaWVkLgorICAtICAtcXwtLXF1aWV0IG5vdyBzdXJwcmVzc2VzIHRoZSBzdGFydC11cCBtZXNzYWdlIG9uIHRoZSBCcmFpbGxlIGRpc3BsYXkuCisKKyAgKERvY3VtZW50YXRpb24gc3RpbGwgdG8gYmUgdXBkYXRlZCAuLi4pCisgICAgIAorCisyOCBKdWx5IDE5OTY6IEJSTFRUWSAxLjAgcmVsZWFzZWQuCmRpZmYgLS1naXQgYS9Eb2N1bWVudHMvSElTVE9SWSBiL0RvY3VtZW50cy9ISVNUT1JZCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc4NmEyNjIKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudHMvSElTVE9SWQpAQCAtMCwwICsxLDM2IEBACitUaGUgQlJMVFRZIHByb2plY3Qgc3RhcnRlZCBpbiBKdWx5LCAxOTk1LiBUaGUgaW5pdGlhbCB0ZWFtIGNvbnNpc3RlZCBvZiBOaWtoaWwKK05haXIgYW5kIEphbWVzIEJvd2Rlbi4KKworVGhlIGZpcnN0IHZlcnNpb24gcmFuIHdpdGggQmxhemllIEVuZ2luZWVyaW5nJ3MgQnJhaWxsZSBMaXRlLiBTaW5jZSwgYXQgdGhhdAordGltZSwgdGhlIEJyYWlsbGUgTGl0ZSB3YXNuJ3QgZGVzaWduZWQgdG8gYmUgYSBkZWRpY2F0ZWQgcmVmcmVzaGFibGUgYnJhaWxsZQorZGlzcGxheSBmb3IgYSBjb21wdXRlciwgaXRzIHJlc3BvbnNlIHRpbWUgd2FzIGZhciB0b28gc2xvdy4gVGhpcyBzaXR1YXRpb24gaGFzCitub3cgYmVlbiBjb3JyZWN0ZWQuCisKK1RoZSBzZWNvbmQgdmVyc2lvbiwgQlJMVFRZLTAuMjItQkVUQSwgd2FzIHJlbGVhc2VkIGluIFNlcHRlbWJlciBvZiAxOTk1LiBJdCB3YXMKK3RoZSBmaXJzdCB0byBiZSByZWxlYXNlZCBwdWJsaWNseS4gQXMgd2VsbCBhcyB0aGUgQnJhaWxsZSBMaXRlLCBpdCBhbHNvCitzdXBwb3J0ZWQgVGllbWFuIEIuVi4ncyBDb21iaUJyYWlsbGUgc2VyaWVzLgorCitKYW1lcyBCb3dkZW4gc3RvcHBlZCBiZWluZyBhbiBhY3RpdmUgZGV2ZWxvcGVyLCBhbHRob3VnaCBoaXMgY29udGludWVkIGhlbHAgaW4KK290aGVyIGFyZWFzIChpbmNsdWRpbmcgZG9jdW1lbnRhdGlvbikgd2FzIG11Y2ggYXBwcmVjaWF0ZWQuIFR3byBuZXcgbWVtYmVycywKK05pY29sYXMgUGl0cmUgYW5kIFN0w6lwaGFuZSBEb3lvbiwgam9pbmVkIHRoZSB0ZWFtLiBUaGV5IGFkZGVkIHN1cHBvcnQgZm9yIEFsdmEKK2FuZCBUZWxlc2Vuc29yeSBTeXN0ZW1zIEluYy4gZGlzcGxheXMsIGFzIHdlbGwgYXMgbWFueSBleGNlbGxlbnQgZmVhdHVyZXMgZm9yCit0aGUgc3lzdGVtIGFzIGEgd2hvbGUuCisKK0Egc3RhYmxlIHZlcnNpb24gKDEuMCkgd2FzIHJlbGVhc2VkIHNvbWV0aW1lIGFyb3VuZCB0aGUgZW5kIG9mIDE5OTYuCisKK1N1cHBvcnQgZm9yIFBhcGVubWVpZXIgZGlzcGxheXMgd2FzIGNvbnRyaWJ1dGVkIGJ5IGEgdGVhbSBmcm9tIFRoZSBUZWNobmljYWwKK0hpZ2ggU2Nob29sLCBEZXBhcnRtZW50IG9mIEVsZWN0cmljYWwgRW5naW5lZXJpbmcsIFZpZW5uYSwgQXVzdHJpYS4gU3VwcG9ydCBmb3IKK3RoZSBUU0kgZGlzcGxheXMgd2FzIGNvbXBsZXRlZCwgYW5kIHN1cHBvcnQgZm9yIHRoZSBFdXJvQnJhaWxsZSBicmFuZCB3YXMKK2FkZGVkLiBOZXcgZmVhdHVyZXMgd2VyZSBhbHNvIGNvbnRpbnVhbGx5IGJlaW5nIGFkZGVkIHRvIHRoZSBzeXN0ZW0uCisKK1JlZ3JldGFibHksIE5pa2hpbCBOYWlyIHN0b3BwZWQgd29ya2luZyBvbiB0aGUgQlJMVFRZIHByb2plY3QuIE5pY29sYXMgUGl0cmUKK2Fzc3VtZWQgdGhlIGpvYiBvZiBtYWludGFpbmVyLgorCitWZXJzaW9uIDIuMCB3YXMgcmVsZWFzZWQgZHVyaW5nIHRoZSBzdW1tZXIgb2YgMTk5OCwgYW5kIHZlcnNpb24gMi4xIHdhcworcmVsZWFzZWQgaW4gTWFyY2ggb2YgMTk5OS4gSXQgYWRkZWQgc3VwcG9ydCBmb3IgRWNvQnJhaWxsZSAodGhhbmtzIHRvIE9zY2FyCitGZXJuYW5kZXopLCBBbHZhIERlbHBoaSAodGhhbmtzIHRvIFRlcnJ5IEJhcm5hYnkpLCBhbmQgQnJhaWxsZSBMaXRlIDE4IChmcm9tCitOaWtoaWwgTmFpciksIGFzIHdlbGwgYXMgU29tZSBzbWFsbCBpbXByb3ZlbWVudHMgYW5kIGZpeGVzLgorCitEYXZlIE1pZWxrZSBiZWdhbiB0byBzdWJtaXQgZml4ZXMgYW5kIGVuaGFuY2VtZW50cyBkdXJpbmcgMjAwMCwKK2FuZCBqb2luZWQgdGhlIHRlYW0gYXMgdGhlIG5leHQgbWFpbnRhaW5lciBpbiBKdW5lIG9mIDIwMDEuCisKZGlmZiAtLWdpdCBhL0RvY3VtZW50cy9NYWtlZmlsZS5pbiBiL0RvY3VtZW50cy9NYWtlZmlsZS5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lODJiOTJkCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRzL01ha2VmaWxlLmluCkBAIC0wLDAgKzEsNTMgQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyMgICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisjCisjIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyMKKyMgQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitjbGVhbiBkaXN0Y2xlYW46OgorCWZvciBkaXJlY3RvcnkgaW4gJChNQU5VQUxfRElSRUNUT1JJRVMpOyBkbyAoY2QgJChCTERfVE9QKSQkZGlyZWN0b3J5ICYmICQoTUFLRSkgJEApIHx8IGV4aXQgMTsgZG9uZQorCithbGw6OiAkKEFMTF9BUEkpCisJZm9yIGRpcmVjdG9yeSBpbiAkKE1BTlVBTF9ESVJFQ1RPUklFUyk7IGRvIChjZCAkKEJMRF9UT1ApJCRkaXJlY3RvcnkgJiYgJChNQUtFKSAkQC1AY2FuX21ha2VfbWFudWFsQCkgfHwgZXhpdCAxOyBkb25lCisKK2FsbC1hcGkgbWFuMzogQnJsQVBJcmVmLUBjYW5fbWFrZV9CcmxBUElyZWZACisKK0JybEFQSXJlZi1ubzoKKwlAZWNobyBkb3h5Z2VuIGlzIG5vdCBpbnN0YWxsZWQgLSBCcmxBUEkgcmVmZXJlbmNlIGRvY3VtZW50YXRpb24gd2lsbCBub3QgYmUgbWFkZQorCitCcmxBUElyZWYteWVzOiBCcmxBUElyZWYubWFkZQorQnJsQVBJcmVmLm1hZGU6IEJybEFQSXJlZiAkKEJMRF9UT1ApJChQR01fRElSKS9icmxhcGkuaCAkKEJMRF9UT1ApJChQR01fRElSKS9icmxhcGlfY29uc3RhbnRzLmggJChTUkNfVE9QKSQoUEdNX0RJUikvYnJsYXBpX2tleWNvZGVzLmggJChTUkNfVE9QKSQoUEdNX0RJUikvYnJsYXBpX3BhcmFtLmggJChTUkNfVE9QKSQoUEdNX0RJUikvYnJsYXBpX3Byb3RvY29sLmggQnJsQVBJcmVmLmRveHkKKwkkKERPWFlHRU4pIEJybEFQSXJlZi5kb3h5CisJdG91Y2ggJEAKKworQnJsQVBJcmVmOgorCW1rZGlyIEJybEFQSXJlZgorCislLmg6CisJY2QgJChARCkgJiYgJChNQUtFKSAkKEBGKQorCislLmh0bWw6ICQoU1JDX0RJUikvUkVBRE1FLiUKKwlyc3QyaHRtbCAtLWNvbmZpZyAiJChTUkNfVE9QKWRvY3V0aWxzLmNvbmYiICQ8ICRACisKKyUudHh0OiAkKFNSQ19ESVIpL1JFQURNRS4lCisJcnN0MnR4dCAtLWNvbmZpZyAiJChTUkNfVE9QKWRvY3V0aWxzLmNvbmYiICQ8ICRACisKK2NsZWFuOjoKKwktcm0gLWYgKi5tYWRlICouaHRtbAorCS1ybSAtZiAtciBCcmxBUElyZWYKKworZGlzdGNsZWFuOjoKKwktcm0gLWYgYnJsdHR5LmNvbmYgKi4xIEJybEFQSXJlZi5kb3h5CisKZGlmZiAtLWdpdCBhL0RvY3VtZW50cy9NYW51YWwtQlJMVFRZL0VuZ2xpc2gvQlJMVFRZLnNnbWwgYi9Eb2N1bWVudHMvTWFudWFsLUJSTFRUWS9FbmdsaXNoL0JSTFRUWS5zZ21sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIzNTJkODkKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudHMvTWFudWFsLUJSTFRUWS9FbmdsaXNoL0JSTFRUWS5zZ21sCkBAIC0wLDAgKzEsNTg5OSBAQAorPCFkb2N0eXBlIGxpbnV4ZG9jIHN5c3RlbSBbCisKKzwhRU5USVRZIERyaXZlckNvZGVzIFNZU1RFTSAiZHJpdmVyLWNvZGVzLnNnbWwiPgorPCFFTlRJVFkgQnJhaWxsZURyaXZlcnMgU1lTVEVNICJicmFpbGxlLWRyaXZlcnMuc2dtbCI+Cis8IUVOVElUWSBTcGVlY2hEcml2ZXJzIFNZU1RFTSAic3BlZWNoLWRyaXZlcnMuc2dtbCI+Cis8IUVOVElUWSBUZXh0VGFibGVzIFNZU1RFTSAidGV4dC10YWJsZXMuc2dtbCI+Cis8IUVOVElUWSBDb250cmFjdGlvblRhYmxlcyBTWVNURU0gImNvbnRyYWN0aW9uLXRhYmxlcy5zZ21sIj4KKworXT4KKzxhcnRpY2xlPgorCis8dGl0bGVwYWc+CisgIDx0aXRsZT5CUkxUVFkgUmVmZXJlbmNlIE1hbnVhbAorICAgIDxzdWJ0aXRsZT5BY2Nlc3MgdG8gdGhlIENvbnNvbGUgU2NyZWVuIGZvciBCbGluZCBQZXJzb25zIHVzaW5nIFJlZnJlc2hhYmxlIEJyYWlsbGUgRGlzcGxheXMKKyAgPGF1dGhvcj4KKyAgICA8bmFtZT5OaWtoaWwgTmFpciA8dHQ+PGh0bWx1cmwgdXJsPSJtYWlsdG86bm4yMDFAY3VzLmNhbS5hYy51ayIgbmFtZT0iJmx0O25uMjAxQGN1cy5jYW0uYWMudWsmZ3Q7Ij48L3R0PgorICA8YW5kPgorICAgIDxuYW1lPk5pY29sYXMgUGl0cmUgPHR0PjxodG1sdXJsIHVybD0ibWFpbHRvOm5pY29AZmx1eG5pYy5uZXQiIG5hbWU9IiZsdDtuaWNvQGZsdXhuaWMubmV0Jmd0OyI+PC90dD4KKyAgPGFuZD4KKyAgICA8bmFtZT5TdOlwaGFuZSBEb3lvbiA8dHQ+PGh0bWx1cmwgdXJsPSJtYWlsdG86cy5kb3lvbkB2aWRlb3Ryb24uY2EiIG5hbWU9IiZsdDtzLmRveW9uQHZpZGVvdHJvbi5jYSZndDsiPjwvdHQ+CisgIDxhbmQ+CisgICAgPG5hbWU+RGF2ZSBNaWVsa2UgPHR0PjxodG1sdXJsIHVybD0ibWFpbHRvOmRhdmVAbWllbGtlLmNjIiBuYW1lPSImbHQ7ZGF2ZUBtaWVsa2UuY2MmZ3Q7Ij48L3R0PgorICA8ZGF0ZT5WZXJzaW9uIDYuNiwgSnVseSAyMDIzCisgIDxhYnN0cmFjdD4KKyAgICBDb3B5cmlnaHQgJmNvcHk7IDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisgICAgQlJMVFRZIGlzIGZyZWUgc29mdHdhcmUsCisgICAgYW5kIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAgICBJdCBpcyBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHZlcnNpb24gMiBvciBsYXRlciBvZgorICAgIDxiZi9UaGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UvCisgICAgYXMgcHVibGlzaGVkIGJ5CisgICAgPGJmL1RoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24vLgorICA8L2Fic3RyYWN0PgorPC90aXRsZXBhZz4KKworPHRvYz4KKzxsb2Y+Cis8bG90PgorCis8c2VjdD5Gb3JtYWxpdGllczxwPgorCis8c2VjdDE+TGljZW5zZTxwPgorVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmUuCitZb3UgbWF5IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZgorPGh0bWx1cmwgdXJsPSJodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvbGljZW5zZXMuaHRtbCNMR1BMIiBuYW1lPSJUaGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIj4KK2FzIHB1Ymxpc2hlZCBieSA8aHRtbHVybCB1cmw9Imh0dHA6Ly93d3cuZ251Lm9yZy9mc2YvZnNmLmh0bWwiIG5hbWU9IlRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24iPi4KK1ZlcnNpb24gMi4xIChvciBhbnkgbGF0ZXIgdmVyc2lvbikgb2YgdGhlIGxpY2Vuc2UgbWF5IGJlIHVzZWQuCisKK1lvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIGxpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uCitJdCBzaG91bGQgYmUgaW4gdGhlIGZpbGUgPHR0L0xJQ0VOU0UtTEdQTC8gaW4gdGhlIHRvcC1sZXZlbCBkaXJlY3RvcnkuCitJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gSW5jLiwKKzY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorCis8c2VjdDE+RGlzY2xhaW1lcjxwPgorVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCitidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFkgLSBub3QgZXZlbgordGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgorU2VlIHRoZSA8YmYvR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UvIGZvciBtb3JlIGRldGFpbHMuCisKKzxzZWN0MT5Db250YWN0IEluZm9ybWF0aW9uPGxhYmVsIGlkPSJjb250YWN0Ij48cD4KK0JSTFRUWSByZXByZXNlbnRzIHRoZSB3b3JrIG9mIGEgdGVhbS4KK0ZvciB1cC10by1kYXRlIGluZm9ybWF0aW9uLCBzZWUgQlJMVFRZJ3Mgd2ViIHBhZ2UgYXQKK1s8aHRtbHVybCB1cmw9Imh0dHA6Ly9icmx0dHkuYXBwLyIgbmFtZT0iaHR0cDovL2JybHR0eS5hcHAvIj5dLgorQXMgb2YgdGhpcyB3cml0aW5nLCB0aGUgdGVhbSBpbmNsdWRlczoKKzxpdGVtaXplPgorICA8aXRlbT4KKyAgICBEYXZlIE1pZWxrZSAobWFpbnRhaW5lciwgYWN0aXZlKQorICAgIDxkZXNjcmlwPgorICAgICAgPHRhZy9XZWIvPGh0bWx1cmwgdXJsPSJodHRwOi8vbWllbGtlLmNjLyIgbmFtZT0iaHR0cDovL21pZWxrZS5jYy8iPgorICAgICAgPHRhZy9FLU1haWwvPGh0bWx1cmwgdXJsPSJtYWlsdG86ZGF2ZUBtaWVsa2UuY2MiIG5hbWU9IiZsdDtkYXZlQG1pZWxrZS5jYyZndDsiPgorICAgIDwvZGVzY3JpcD4KKyAgPGl0ZW0+CisgICAgU2FtdWVsIFRoaWJhdWx0IChhY3RpdmUpCisgICAgPGRlc2NyaXA+CisgICAgICA8dGFnL1dlYi88aHRtbHVybCB1cmw9Imh0dHA6Ly9kZXB0LWluZm8ubGFicmkuZnIvfnRoaWJhdWx0LyIgbmFtZT0iaHR0cDovL2RlcHQtaW5mby5sYWJyaS5mci9+dGhpYmF1bHQvIj4KKyAgICAgIDx0YWcvRS1NYWlsLzxodG1sdXJsIHVybD0ibWFpbHRvOnNhbXVlbC50aGliYXVsdEBlbnMtbHlvbi5vcmciIG5hbWU9IiZsdDtzYW11ZWwudGhpYmF1bHRAZW5zLWx5b24ub3JnJmd0OyI+CisgICAgPC9kZXNjcmlwPgorICA8aXRlbT4KKyAgICBNYXJpbyBMYW5nIChhY3RpdmUpCisgICAgPGRlc2NyaXA+CisgICAgICA8dGFnL1dlYi88aHRtbHVybCB1cmw9Imh0dHA6Ly9kZWx5c2lkLm9yZy8iIG5hbWU9Imh0dHA6Ly9kZWx5c2lkLm9yZy8iPgorICAgICAgPHRhZy9FLU1haWwvPGh0bWx1cmwgdXJsPSJtYWlsdG86bWxhbmdAZGVseXNpZC5vcmciIG5hbWU9IiZsdDttbGFuZ0BkZWx5c2lkLm9yZyZndDsiPgorICAgIDwvZGVzY3JpcD4KKyAgPGl0ZW0+CisgICAgTmljb2xhcyBQaXRyZQorICAgIDxkZXNjcmlwPgorICAgICAgPHRhZy9XZWIvPGh0bWx1cmwgdXJsPSJodHRwOi8vd3d3LmZsdXhuaWMubmV0LyIgbmFtZT0iaHR0cDovL3d3dy5mbHV4bmljLm5ldC8iPgorICAgICAgPHRhZy9FLU1haWwvPGh0bWx1cmwgdXJsPSJtYWlsdG86bmljb0BmbHV4bmljLm5ldCIgbmFtZT0iJmx0O25pY29AZmx1eG5pYy5uZXQmZ3Q7Ij4KKyAgICA8L2Rlc2NyaXA+CisgIDxpdGVtPgorICAgIFN06XBoYW5lIERveW9uCisgICAgPGRlc2NyaXA+CisgICAgICA8dGFnL1dlYi88aHRtbHVybCB1cmw9Imh0dHA6Ly9wYWdlcy5pbmZpbml0Lm5ldC9zZG95b24vIiBuYW1lPSJodHRwOi8vcGFnZXMuaW5maW5pdC5uZXQvc2RveW9uLyI+CisgICAgICA8dGFnL0UtTWFpbC88aHRtbHVybCB1cmw9Im1haWx0bzpzLmRveW9uQHZpZGVvdHJvbi5jYSIgbmFtZT0iJmx0O3MuZG95b25AdmlkZW90cm9uLmNhJmd0OyI+CisgICAgPC9kZXNjcmlwPgorICA8aXRlbT4KKyAgICBOaWtoaWwgTmFpciAgKGF1dGhvcikKKyAgICA8ZGVzY3JpcD4KKyAgICAgIDx0YWcvRS1NYWlsLzxodG1sdXJsIHVybD0ibWFpbHRvOm5uMjAxQGN1cy5jYW0uYWMudWsiIG5hbWU9IiZsdDtubjIwMUBjdXMuY2FtLmFjLnVrJmd0OyI+CisgICAgPC9kZXNjcmlwPgorPC9pdGVtaXplPgorCitRdWVzdGlvbnMsIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgY3JpdGljaXNtcywgYW5kIGNvbnRyaWJ1dGlvbnMgYXJlIGFsbCB3ZWxjb21lLgorRXZlbiB0aG91Z2ggb3VyIGUtbWFpbCBhZGRyZXNzZXMgYXJlIGxpc3RlZCBhYm92ZSwKK3RoZSBiZXN0IHdheSB0byBjb250YWN0IHVzIGlzIHZpYSBCUkxUVFkncyBtYWlsaW5nIGxpc3QuCitZb3UgY2FuIHBvc3QgdG8gdGhlIGxpc3QgYnkgc2VuZGluZyBlLW1haWwgdG8KKzxodG1sdXJsIHVybD0ibWFpbHRvOkJSTFRUWUBtaWVsa2UuY2MiIG5hbWU9IiZsdDtCUkxUVFlAbWllbGtlLmNjJmd0OyI+LgorSWYgeW91IGFyZW4ndCBzdWJzY3JpYmVkIHRvIHRoZSBsaXN0Cit0aGVuIHlvdXIgcG9zdHMgd2lsbCBiZSBoZWxkIGZvciBtb2RlcmF0b3IgYXBwcm92YWwuCitUbyBzdWJzY3JpYmUsIHVuc3Vic2NyaWJlLCBjaGFuZ2Ugc2V0dGluZ3MsIHZpZXcgYXJjaGl2ZXMsIGV0YywKK2dvIHRvIHRoZSBsaXN0J3MgaW5mb3JtYXRpb24gcGFnZSBhdAorPGh0bWx1cmwgdXJsPSJodHRwOi8vbWllbGtlLmNjL21haWxtYW4vbGlzdGluZm8vYnJsdHR5IiBuYW1lPSJodHRwOi8vbWllbGtlLmNjL21haWxtYW4vbGlzdGluZm8vYnJsdHR5Ij4uCisKKzxzZWN0PkludHJvZHVjdGlvbjxwPgorQlJMVFRZIGdpdmVzIGEgYnJhaWxsZSB1c2VyIGFjY2VzcyB0byB0aGUgdGV4dCBjb25zb2xlcyBvZiBhIExpbnV4L1VuaXggc3lzdGVtLgorSXQgcnVucyBhcyBhIGJhY2tncm91bmQgcHJvY2VzcyAoZGFlbW9uKQord2hpY2ggb3BlcmF0ZXMgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXksCithbmQgY2FuIGJlIHN0YXJ0ZWQgdmVyeSBlYXJseSBpbiB0aGUgc3lzdGVtIGJvb3Qgc2VxdWVuY2UuCitJdCBlbmFibGVzIGEgYnJhaWxsZSB1c2VyLCB0aGVyZWZvcmUsIHRvIGVhc2lseSBpbmRlcGVuZGVudGx5IGhhbmRsZQorYXNwZWN0cyBvZiBzeXN0ZW0gYWRtaW5pc3RyYXRpb24gc3VjaCBhcworc2luZ2xlIHVzZXIgbW9kZSBlbnRyeSwKK2ZpbGUgc3lzdGVtIHJlY292ZXJ5LAorYW5kIGJvb3QgcHJvYmxlbSBhbmFseXNpcy4KK0l0IGV2ZW4gZ3JlYXRseSBlYXNlcyBzdWNoIHJvdXRpbmUgdGFza3MgYXMgbG9nZ2luZyBpbi4KKworQlJMVFRZIHJlcHJvZHVjZXMgYSByZWN0YW5ndWxhciBwb3J0aW9uIG9mIHRoZSBzY3JlZW4KKyhyZWZlcnJlZCB0byB3aXRoaW4gdGhpcyBkb2N1bWVudCBhcyBgdGhlIHdpbmRvdycpCithcyBicmFpbGxlIHRleHQgb24gdGhlIGRpc3BsYXkuCitDb250cm9scyBvbiB0aGUgZGlzcGxheSBjYW4gYmUgdXNlZCB0bworbW92ZSB0aGUgd2luZG93IGFyb3VuZCBvbiB0aGUgc2NyZWVuLAordG8gZW5hYmxlIGFuZCBkaXNhYmxlIHZhcmlvdXMgdmlld2luZyBvcHRpb25zLAorYW5kIHRvIHBlcmZvcm0gc3BlY2lhbCBmdW5jdGlvbnMuCisKKzxzZWN0MT5GZWF0dXJlIFN1bW1hcnk8cD4KK0JSTFRUWSBwcm92aWRlcyB0aGUgZm9sbG93aW5nIGNhcGFiaWxpdGllczoKKzxpdGVtaXplPgorICA8aXRlbT4KKyAgICBGdWxsIGltcGxlbWVudGF0aW9uIG9mIHRoZSB1c3VhbCBzY3JlZW4gcmV2aWV3IGZhY2lsaXRpZXMuCisgIDxpdGVtPgorICAgIENob2ljZSBiZXR3ZWVuIDx0dC9ibG9jay8sIDx0dC91bmRlcmxpbmUvLCBvciA8dHQvbm8vIGN1cnNvci4KKyAgPGl0ZW0+CisgICAgT3B0aW9uYWwgPHR0L3VuZGVybGluZS8gdG8gaW5kaWNhdGUgc3BlY2lhbGx5IGhpZ2hsaWdodGVkIHRleHQuCisgIDxpdGVtPgorICAgIE9wdGlvbmFsIHVzZSBvZiA8dHQvYmxpbmtpbmcvIChyYXRlcyBpbmRpdmlkdWFsbHkgc2V0dGFibGUpIGZvcgorICAgIGN1cnNvciwgc3BlY2lhbCBoaWdobGlnaHRpbmcgdW5kZXJsaW5lLCBhbmQvb3IgY2FwaXRhbCBsZXR0ZXJzLgorICA8aXRlbT4KKyAgICBTY3JlZW4gZnJlZXppbmcgZm9yIGxlaXN1cmVseSByZXZpZXcuCisgIDxpdGVtPgorICAgIEludGVsbGlnZW50IGN1cnNvciByb3V0aW5nLCBhbGxvd2luZyBlYXN5IGZldGNoaW5nIG9mIGN1cnNvciB3aXRoaW4KKyAgICB0ZXh0IGVkaXRvcnMsIHdlYiBicm93c2VycywgZXRjLiwKKyAgICB3aXRob3V0IG1vdmluZyBvbmVzIGhhbmRzIGZyb20gdGhlIGJyYWlsbGUgZGlzcGxheS4KKyAgPGl0ZW0+CisgICAgQSBjdXQtYW5kLXBhc3RlIGZ1bmN0aW9uIChsaW5lYXIgb3IgcmVjdGFuZ3VsYXIpIHdoaWNoIGlzIHBhcnRpY3VsYXJseSB1c2VmdWwgZm9yCisgICAgY29weWluZyBsb25nIGZpbGUgbmFtZXMsCisgICAgY29weWluZyB0ZXh0IGJldHdlZW4gdmlydHVhbCB0ZXJtaW5hbHMsCisgICAgZW50ZXJpbmcgY29tcGxpY2F0ZWQgY29tbWFuZHMsCisgICAgZXRjLgorICA8aXRlbT4KKyAgICBUYWJsZSBkcml2ZW4gaW4tbGluZSBjb250cmFjdGVkIGJyYWlsbGUgKEVuZ2xpc2ggYW5kIEZyZW5jaCBwcm92aWRlZCkuCisgIDxpdGVtPgorICAgIFN1cHBvcnQgZm9yIG11bHRpcGxlIGJyYWlsbGUgY29kZXMuCisgIDxpdGVtPgorICAgIEFiaWxpdHkgdG8gaWRlbnRpZnkgYW4gdW5rbm93biBjaGFyYWN0ZXIuCisgIDxpdGVtPgorICAgIEFiaWxpdHkgdG8gaW5zcGVjdCBjaGFyYWN0ZXIgaGlnaGxpZ2h0aW5nLgorICA8aXRlbT4KKyAgICBBbiBvbi1saW5lIGhlbHAgZmFjaWxpdHkgZm9yIGJyYWlsbGUgZGlzcGxheSBjb21tYW5kcy4KKyAgPGl0ZW0+CisgICAgQSBwcmVmZXJlbmNlcyBtZW51LgorICA8aXRlbT4KKyAgICBCYXNpYyBzcGVlY2ggc3VwcG9ydC4KKyAgPGl0ZW0+CisgICAgTW9kdWxhciBkZXNpZ24gYWxsb3dpbmcgcmVsYXRpdmVseSBlYXN5IGFkZGl0aW9uIG9mCisgICAgZHJpdmVycyBmb3Igb3RoZXIgYnJhaWxsZSBkaXNwbGF5cyBhbmQgc3BlZWNoIHN5bnRoZXNpemVycy4KKyAgPGl0ZW0+CisgICAgQW4gQXBwbGljYXRpb24gUHJvZ3JhbW1pbmcgSW50ZXJmYWNlLgorPC9pdGVtaXplPgorCis8c2VjdDE+U3lzdGVtIFJlcXVpcmVtZW50czxwPgorVG8gZGF0ZSwgQlJMVFRZIHJ1bnMgdW5kZXIgTGludXgsIFNvbGFyaXMsIE9wZW5CU0QsIEZyZWVCU0QsIE5ldEJTRCwgYW5kIFdpbmRvd3MuCitXaGlsZSBwb3J0cyB0byBvdGhlciBVbml4LWxpa2Ugb3BlcmF0aW5nIHN5c3RlbXMgYXJlbid0IGN1cnJlbnRseSBwbGFubmVkLAord2UgZG8gd2VsY29tZSBhbnkgaW50ZXJlc3QgaW4gc3VjaCBwcm9qZWN0cy4KKworPGRlc2NyaXA+CisgIDx0YWcvTGludXgvCisgICAgVGhpcyBzb2Z0d2FyZSBoYXMgYmVlbiB0ZXN0ZWQgb24gYSB2YXJpZXR5IG9mIExpbnV4IHN5c3RlbXM6CisgICAgPGl0ZW1pemU+CisgICAgICA8aXRlbT4KKyAgICAgICAgRGVza3RvcHMsIGxhcHRvcHMsIGFuZCBzb21lIFBEQXMuCisgICAgICA8aXRlbT4KKyAgICAgICAgUHJvY2Vzc29ycyBmcm9tIGEgMzg2U1gyMCB0byBhIFBlbnRpdW0uCisgICAgICA8aXRlbT4KKyAgICAgICAgQSBodWdlIHJhbmdlIG9mIG1lbW9yeSBzaXplcy4KKyAgICAgIDxpdGVtPgorICAgICAgICBTZXZlcmFsIGRpc3RyaWJ1dGlvbnMgaW5jbHVkaW5nIERlYmlhbiwgUmVkIEhhdCwgU2xhY2t3YXJlLCBhbmQgU3VTRS4KKyAgICAgIDxpdGVtPgorICAgICAgICBNYW55IGtlcm5lbHMsIGluY2x1ZGluZyAxLjIuMTMsIDIuMCwgMi4yLCBhbmQgMi40LgorICAgIDwvaXRlbWl6ZT4KKyAgPHRhZy9Tb2xhcmlzLworICAgIFRoaXMgc29mdHdhcmUgaGFzIGJlZW4gdGVzdGVkIG9uIHRoZSBmb2xsb3dpbmcgU29sYXJpcyBzeXN0ZW1zOgorICAgIDxpdGVtaXplPgorICAgICAgPGl0ZW0+CisgICAgICAgIFRoZSBTcGFyYyBhcmNoaXRlY3R1cmUgKHJlbGVhc2VzIDcsIDgsIGFuZCA5KS4KKyAgICAgIDxpdGVtPgorICAgICAgICBUaGUgSW50ZWwgYXJjaGl0ZWN0dXJlIChyZWxlYXNlIDkpLgorICAgIDwvaXRlbWl6ZT4KKyAgPHRhZy9PcGVuQlNELworICAgIFRoaXMgc29mdHdhcmUgaGFzIGJlZW4gdGVzdGVkIG9uIHRoZSBmb2xsb3dpbmcgT3BlbkJTRCBzeXN0ZW1zOgorICAgIDxpdGVtaXplPgorICAgICAgPGl0ZW0+CisgICAgICAgIFRoZSBJbnRlbCBhcmNoaXRlY3R1cmUgKHJlbGVhc2UgMy40KS4KKyAgICA8L2l0ZW1pemU+CisgIDx0YWcvRnJlZUJTRC8KKyAgICBUaGlzIHNvZnR3YXJlIGhhcyBiZWVuIHRlc3RlZCBvbiB0aGUgZm9sbG93aW5nIEZyZWVCU0Qgc3lzdGVtczoKKyAgICA8aXRlbWl6ZT4KKyAgICAgIDxpdGVtPgorICAgICAgICBUaGUgSW50ZWwgYXJjaGl0ZWN0dXJlIChyZWxlYXNlIDUuMSkuCisgICAgPC9pdGVtaXplPgorICA8dGFnL05ldEJTRC8KKyAgICBUaGlzIHNvZnR3YXJlIGhhcyBiZWVuIHRlc3RlZCBvbiB0aGUgZm9sbG93aW5nIE5ldEJTRCBzeXN0ZW1zOgorICAgIDxpdGVtaXplPgorICAgICAgPGl0ZW0+CisgICAgICAgIFRoZSBJbnRlbCBhcmNoaXRlY3R1cmUgKHJlbGVhc2UgMS42KS4KKyAgICA8L2l0ZW1pemU+CisgIDx0YWcvV2luZG93cy8KKyAgICBUaGlzIHNvZnR3YXJlIGhhcyBiZWVuIHRlc3RlZCBvbiBXaW5kb3dzIDk1LCA5OCwgYW5kIFhQLgorPC9kZXNjcmlwPgorCitPbiBMaW51eCwgQlJMVFRZIGNhbiBpbnNwZWN0IHRoZSBjb250ZW50IG9mIHRoZSBzY3JlZW4KK2NvbXBsZXRlbHkgaW5kZXBlbmRlbnRseSBvZiBhbnkgbG9nZ2VkIGluIHVzZXIuCitJdCBkb2VzIHRoaXMgYnkgdXNpbmcgYSBzcGVjaWFsIGRldmljZQord2hpY2ggcHJvdmlkZXMgZWFzeSBhY2Nlc3MgdG8gdGhlIGNvbnRlbnRzIG9mIHRoZSBjdXJyZW50IHZpcnR1YWwgY29uc29sZS4gIAorVGhpcyBkZXZpY2Ugd2FzIGludHJvZHVjZWQgaW4gdmVyc2lvbiAxLjEuOTIgb2YgdGhlIExpbnV4IGtlcm5lbCwKK2FuZCBpcyBub3JtYWxseSBjYWxsZWQgZWl0aGVyIDx0dD4vZGV2L3Zjc2E8Lz4gb3IgPHR0Pi9kZXYvdmNzYTA8Lz4KKyhvbiBzeXN0ZW1zIHdpdGggPHR0L2RldmZzLyBpdCdzIGNhbGxlZCA8dHQ+L2Rldi92Y2MvYTwvPikuCitGb3IgdGhpcyByZWFzb24sIExpbnV4IGtlcm5lbCAxLjEuOTIgb3IgbGF0ZXIgaXMgcmVxdWlyZWQKK2lmIEJSTFRUWSBpcyB0byBiZSB1c2VkIGluIHRoaXMgd2F5LgorVGhpcyBjYXBhYmlsaXR5OgorPGl0ZW1pemU+CisgIDxpdGVtPgorICAgIEFsbG93cyBCUkxUVFkgdG8gYmUgc3RhcnRlZCB2ZXJ5IGVhcmx5IGluIHRoZSBzeXN0ZW0gYm9vdCBzZXF1ZW5jZS4KKyAgPGl0ZW0+CisgICAgRW5hYmxlcyB0aGUgYnJhaWxsZSBkaXNwbGF5IHRvIGJlIGZ1bGx5IG9wZXJhdGlvbmFsIGR1cmluZyB0aGUgbG9naW4gcHJvbXB0LgorICA8aXRlbT4KKyAgICBNYWtlcyBpdCBtdWNoIGVhc2llciBmb3IgYSBicmFpbGxlIHVzZXIgdG8gcGVyZm9ybSBib290LXRpbWUgc3lzdGVtIGFkbWluaXN0cmF0aW9uIHRhc2tzLgorPC9pdGVtaXplPgorCitBIHBhdGNoIGZvciB0aGUgPHR0L3NjcmVlbi8gcHJvZ3JhbSBpcyBwcm92aWRlZAorKHNlZSB0aGUgPHR0L1BhdGNoZXMvIHN1YmRpcmVjdG9yeSkuCitJdCBhbGxvd3MgQlJMVFRZIHRvIGFjY2VzcyA8dHQvc2NyZWVuLydzIHNjcmVlbiBpbWFnZSB2aWEgc2hhcmVkIG1lbW9yeSwKK2FuZCwgdGhlcmVmb3JlLCBhbGxvd3MgQlJMVFRZIHRvIGJlIHVzZWQgcXVpdGUgZWZmZWN0aXZlbHkgb24gcGxhdGZvcm1zCit3aGljaCBkb24ndCBoYXZlIHRoZWlyIG93biBzY3JlZW4gY29udGVudCBpbnNwZWN0aW9uIGZhY2lsaXR5LgorVGhlIG1haW4gd2Vha25lc3Mgb2YgdGhlIDx0dC9zY3JlZW4vIGFwcHJvYWNoIGlzIHRoYXQgCitCUkxUVFkgY2FuJ3QgYmUgc3RhcnRlZCB1bnRpbCB0aGUgdXNlciBoYXMgbG9nZ2VkIGluLgorCitCUkxUVFkgb25seSB3b3JrcyB3aXRoIHRleHQtYmFzZWQgY29uc29sZXMgYW5kIGFwcGxpY2F0aW9ucy4KK0l0IGNhbiBiZSB1c2VkIHdpdGggPHR0L2N1cnNlcy8tYmFzZWQgYXBwbGljYXRpb25zLAorYnV0IG5vdCB3aXRoIGFueSBhcHBsaWNhdGlvbiB3aGljaAorZWl0aGVyIHVzZXMgc3BlY2lhbCBWR0EgZmVhdHVyZXMKK29yIHJlcXVpcmVzIGEgZ3JhcGhpY3MgY29uc29sZSAobGlrZSB0aGUgWCBXaW5kb3cgc3lzdGVtKS4KKworWW91IG11c3QgYWxzbywgb2YgY291cnNlLCBwb3NzZXNzIGEgc3VwcG9ydGVkIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheQorKHNlZSBzZWN0aW9uIDxyZWYgaWQ9ImRpc3BsYXlzIiBuYW1lPSJTdXBwb3J0ZWQgQnJhaWxsZSBEaXNwbGF5cyI+IGZvciB0aGUgY29tcGxldGUgbGlzdCkuCitXZSBob3BlIHRoYXQgYWRkaXRpb25hbCBkaXNwbGF5cyB3aWxsIGJlIHN1cHBvcnRlZCBpbiB0aGUgZnV0dXJlLCBzbywKK2lmIHlvdSBoYXZlIGFueSB2YWd1ZWx5IHRlY2huaWNhbCBwcm9ncmFtbWluZyBpbmZvcm1hdGlvbgorZm9yIGEgZGV2aWNlIHdoaWNoIHlvdSdkIGxpa2UgdG8gc2VlIHN1cHBvcnRlZCwKK3RoZW4gcGxlYXNlIGxldCB1cyBrbm93IChzZWUgc2VjdGlvbiA8cmVmIGlkPSJjb250YWN0IiBuYW1lPSJDb250YWN0IEluZm9ybWF0aW9uIj4pLgorCitGaW5hbGx5LCB5b3UgbmVlZCB0b29scyB0byBidWlsZCB0aGUgZXhlY3V0YWJsZSBmcm9tIGl0cyBzb3VyY2U6Cis8dHQvbWFrZS8sIDx0dC9DLyBhbmQgPHR0L0MrKy8gY29tcGlsZXJzLCA8dHQveWFjYy8sIDx0dC9hd2svLCBldGMuCitUaGUgZGV2ZWxvcG1lbnQgdG9vbHMgcHJvdmlkZWQgd2l0aCBzdGFuZGFyZCBVbml4IGRpc3RyaWJ1dGlvbnMgc2hvdWxkIHN1ZmZpY2UuCitJZiB5b3UgaGF2ZSBwcm9ibGVtcywKK3RoZW4gY29udGFjdCB1cyBhbmQgd2UnbGwgY29tcGlsZSBhIGJpbmFyeSBmb3IgeW91LgorCis8c2VjdD5UaGUgQnVpbGQgUHJvY2VkdXJlPHA+CitCUkxUVFkgY2FuIGJlIGRvd25sb2FkZWQgZnJvbSBpdHMgd2ViIHNpdGUKKyhzZWUgc2VjdGlvbiA8cmVmIGlkPSJjb250YWN0IiBuYW1lPSJDb250YWN0IEluZm9ybWF0aW9uIj4gZm9yIGl0cyBsb2NhdGlvbikuCitBbGwgcmVsZWFzZXMgYXJlIHByb3ZpZGVkIGFzIGNvbXByZXNzZWQgPHJlZiBpZD0idGFyIiBuYW1lPSJ0YXIgYmFsbHMiPi4KK05ld2VyIHJlbGVhc2VzIGFyZSBhbHNvIHByb3ZpZGVkIGFzIDxyZWYgaWQ9InJwbSIgbmFtZT0iUlBNIj4gKFJlZEhhdCBQYWNrYWdlIE1hbmFnZXIpIGZpbGVzLgorCitUaGF0IHRpZGJpdCBvZiBpbmZvcm1hdGlvbiBoYXMgcHJvYmFibHkgcGVha2VkIHlvdXIgY3VyaW9zaXR5LAorYW5kIG5vdyB5b3UganVzdCBjYW4ndCB3YWl0IHRvIGdldCBzdGFydGVkLgorSXQncyBhIGdvb2QgaWRlYSwgdGhvdWdoLAordG8gZmlyc3QgYmVjb21lIGZhbWlsaWFyIHdpdGggdGhlIGZpbGVzIHdoaWNoIHdpbGwgdWx0aW1hdGVseSBiZSBpbnN0YWxsZWQuCisKKzxzZWN0MT5JbnN0YWxsZWQgRmlsZSBIaWVyYXJjaHk8bGFiZWwgaWQ9ImhpZXJhcmNoeSI+PHA+CitUaGUgYnVpbGQgcHJvY2VkdXJlIHNob3VsZCByZXN1bHQgaW4gdGhlIGluc3RhbGxhdGlvbiBvZiB0aGUgZm9sbG93aW5nIGZpbGVzOgorPGRlc2NyaXA+CisgIDx0YWc+L2Jpbi88Lz4KKyAgICA8ZGVzY3JpcD4KKyAgICAgIDx0YWc+YnJsdHR5PC90YWc+CisgICAgICAgIFRoZSBCUkxUVFkgcHJvZ3JhbS4KKyAgICAgIDx0YWc+PHJlZiBpZD0idXRpbGl0eS1icmx0dHktaW5zdGFsbCIgbmFtZT0iYnJsdHR5LWluc3RhbGwiPjwvdGFnPgorICAgICAgICBBIHV0aWxpdHkgZm9yIGNvcHlpbmcgQlJMVFRZJ3MKKyAgICAgICAgPHJlZiBpZD0iaGllcmFyY2h5IiBuYW1lPSJpbnN0YWxsZWQgZmlsZSBoaWVyYXJjaHkiPgorICAgICAgICBmcm9tIG9uZSBsb2NhdGlvbiB0byBhbm90aGVyLgorICAgICAgPHRhZz48cmVmIGlkPSJ1dGlsaXR5LWJybHR0eS1jb25maWciIG5hbWU9ImJybHR0eS1jb25maWciPjwvdGFnPgorICAgICAgICBBIHV0aWxpdHkgd2hpY2ggc2V0cyBhIG51bWJlciBvZiBlbnZpcm9ubWVudCB2YXJpYWJsZXMgdG8gdmFsdWVzCisgICAgICAgIHdoaWNoIHJlZmxlY3QgdGhlIGN1cnJlbnQgaW5zdGFsbGF0aW9uIG9mIEJSTFRUWS4KKyAgICA8L2Rlc2NyaXA+CisgIDx0YWc+L2xpYi88Lz4KKyAgICA8ZGVzY3JpcD4KKyAgICAgIDx0YWcvbGliYnJsYXBpLmEvCisgICAgICAgIFN0YXRpYyBhcmNoaXZlIG9mIHRoZSBBcHBsaWNhdGlvbiBQcm9ncmFtbWluZyBJbnRlcmZhY2UuCisgICAgICA8dGFnL2xpYmJybGFwaS5zby8KKyAgICAgICAgRHluYW1pY2FsbHkgbG9hZGFibGUgb2JqZWN0IGZvciB0aGUgQXBwbGljYXRpb24gUHJvZ3JhbW1pbmcgSW50ZXJmYWNlLgorICAgIDwvZGVzY3JpcD4KKyAgPHRhZz4vbGliL2JybHR0eS88Lz4KKyAgICBZb3VyIGluc3RhbGxhdGlvbiBvZiBCUkxUVFkgbWF5IG5vdCBoYXZlIGFsbCBvZiB0aGUgZm9sbG93aW5nIHR5cGVzIG9mIGZpbGVzLgorICAgIFRoZXkncmUgb25seSBjcmVhdGVkIGFzIG5lZWRlZCBiYXNlZCBvbiB0aGUgYnVpbGQgb3B0aW9ucyB5b3Ugc2VsZWN0CisgICAgKHNlZSA8cmVmIGlkPSJidWlsZCIgbmFtZT0iQnVpbGQgT3B0aW9ucyI+KS4KKyAgICA8ZGVzY3JpcD4KKyAgICAgIDx0YWcvYnJsdHR5LWJybC5sc3QvCisgICAgICAgIEEgbGlzdCBvZiB0aGUgYnJhaWxsZSBkaXNwbGF5IGRyaXZlcnMgd2hpY2ggaGF2ZSBiZWVuIGJ1aWx0CisgICAgICAgIGFzIGR5bmFtaWNhbGx5IGxvYWRhYmxlIHNoYXJlZCBvYmplY3RzLAorICAgICAgICBhbmQsIHRoZXJlZm9yZSwgd2hpY2ggY2FuIGJlIHNlbGVjdGVkIGF0IHJ1bi10aW1lLgorICAgICAgICBFYWNoIGxpbmUgY29uc2lzdHMgb2YKKyAgICAgICAgdGhlIHR3by1sZXR0ZXIgaWRlbnRpZmljYXRpb24gY29kZSBmb3IgYSBkcml2ZXIsCisgICAgICAgIGEgdGFiIGNoYXJhY3RlciwKKyAgICAgICAgYW5kIGEgZGVzY3JpcHRpb24gb2YgdGhlIGJyYWlsbGUgZGlzcGxheSB3aGljaCB0aGF0IGRyaXZlciBpcyBmb3IuCisgICAgICA8dGFnPmxpYmJybHR0eWI8ZW0vZHJpdmVyLy5zby4xPC90YWc+CisgICAgICAgIFRoZSBkeW5hbWljYWxseSBsb2FkYWJsZSBkcml2ZXIgZm9yIGEgYnJhaWxsZSBkaXNwbGF5LAorICAgICAgICB3aGVyZSA8ZW0vZHJpdmVyLyBpcyB0aGUgdHdvLWxldHRlciA8cmVmIGlkPSJkcml2ZXJzIiBuYW1lPSJkcml2ZXIgaWRlbnRpZmljYXRpb24gY29kZSI+LgorICAgICAgPHRhZy9icmx0dHktc3BrLmxzdC8KKyAgICAgICAgQSBsaXN0IG9mIHRoZSBzcGVlY2ggc3ludGhlc2l6ZXIgZHJpdmVycyB3aGljaCBoYXZlIGJlZW4gYnVpbHQKKyAgICAgICAgYXMgZHluYW1pY2FsbHkgbG9hZGFibGUgc2hhcmVkIG9iamVjdHMsCisgICAgICAgIGFuZCwgdGhlcmVmb3JlLCB3aGljaCBjYW4gYmUgc2VsZWN0ZWQgYXQgcnVuLXRpbWUuCisgICAgICAgIEVhY2ggbGluZSBjb25zaXN0cyBvZgorICAgICAgICB0aGUgdHdvLWxldHRlciBpZGVudGlmaWNhdGlvbiBjb2RlIGZvciBhIGRyaXZlciwKKyAgICAgICAgYSB0YWIgY2hhcmFjdGVyLAorICAgICAgICBhbmQgYSBkZXNjcmlwdGlvbiBvZiB0aGUgc3BlZWNoIHN5bnRoZXNpemVyIHdoaWNoIHRoYXQgZHJpdmVyIGlzIGZvci4KKyAgICAgIDx0YWc+bGliYnJsdHR5czxlbS9kcml2ZXIvLnNvLjE8L3RhZz4KKyAgICAgICAgVGhlIGR5bmFtaWNhbGx5IGxvYWRhYmxlIGRyaXZlciBmb3IgYSBzcGVlY2ggc3ludGhlc2l6ZXIsCisgICAgICAgIHdoZXJlIDxlbS9kcml2ZXIvIGlzIHRoZSB0d28tbGV0dGVyIDxyZWYgaWQ9ImRyaXZlcnMiIG5hbWU9ImRyaXZlciBpZGVudGlmaWNhdGlvbiBjb2RlIj4uCisgICAgPC9kZXNjcmlwPgorICA8dGFnPi9saWIvYnJsdHR5L3J3LzwvPgorICAgIEZpbGVzIGNyZWF0ZWQgYXQgcnVuLXRpbWUsIGUuZy4gbmVlZGVkIGJ1dCBtaXNzaW5nIHN5c3RlbSByZXNvdXJjZXMuCisgIDx0YWc+L2V0Yy88Lz4KKyAgICA8ZGVzY3JpcD4KKyAgICAgIDx0YWcvYnJsdHR5LmNvbmYvCisgICAgICAgIFN5c3RlbSBkZWZhdWx0cyBmb3IgQlJMVFRZLgorICAgICAgPHRhZy9icmxhcGkua2V5LworICAgICAgICBUaGUgYWNjZXNzIGtleSBmb3IgQnJsQVBJLgorICAgIDwvZGVzY3JpcD4KKyAgPHRhZz4vZXRjL2JybHR0eS88Lz4KKyAgICBZb3VyIGluc3RhbGxhdGlvbiBvZiBCUkxUVFkgbWF5IG5vdCBoYXZlIGFsbCBvZiB0aGUgZm9sbG93aW5nIHR5cGVzIG9mIGZpbGVzLgorICAgIFRoZXkncmUgb25seSBjcmVhdGVkIGFzIG5lZWRlZCBiYXNlZCBvbiB0aGUgYnVpbGQgb3B0aW9ucyB5b3Ugc2VsZWN0CisgICAgKHNlZSA8cmVmIGlkPSJidWlsZCIgbmFtZT0iQnVpbGQgT3B0aW9ucyI+KS4KKyAgICA8ZGVzY3JpcD4KKyAgICAgIDx0YWcvKi5jb25mLworICAgICAgICBEcml2ZXItc3BlY2lmaWMgY29uZmlndXJhdGlvbiBkYXRhLgorICAgICAgICBUaGVpciBuYW1lcyBsb29rIG1vcmUgb3IgbGVzcyBsaWtlIDx0dC9icmx0dHktLzxlbS9kcml2ZXIvPHR0Ly5jb25mLywKKyAgICAgICAgd2hlcmUgPGVtL2RyaXZlci8gaXMgdGhlIHR3by1sZXR0ZXIgPHJlZiBpZD0iZHJpdmVycyIgbmFtZT0iZHJpdmVyIGlkZW50aWZpY2F0aW9uIGNvZGUiPi4KKyAgICAgIDx0YWcvKi5hdGIvCisgICAgICAgIEF0dHJpYnV0ZXMgdGFibGVzCisgICAgICAgIChzZWUgc2VjdGlvbiA8cmVmIGlkPSJ0YWJsZS1hdHRyaWJ1dGVzIiBuYW1lPSJBdHRyaWJ1dGVzIFRhYmxlcyI+IGZvciBkZXRhaWxzKS4KKyAgICAgICAgVGhlaXIgbmFtZXMgbG9vayBsaWtlIDxlbS9uYW1lLzx0dC8uYXRiLy4KKyAgICAgIDx0YWcvKi5hdGkvCisgICAgICAgIEluY2x1ZGUgZmlsZXMgZm9yIGF0dHJpYnV0ZXMgdGFibGVzLgorICAgICAgPHRhZy8qLmN0Yi8KKyAgICAgICAgQ29udHJhY3Rpb24gdGFibGVzCisgICAgICAgIChzZWUgc2VjdGlvbiA8cmVmIGlkPSJ0YWJsZS1jb250cmFjdGlvbiIgbmFtZT0iQ29udHJhY3Rpb24gVGFibGVzIj4gZm9yIGRldGFpbHMpLgorICAgICAgICBUaGVpciBuYW1lcyBsb29rIGxpa2UgPGVtL2xhbmd1YWdlLzx0dC8tLzxlbS9jb3VudHJ5Lzx0dC8tLzxlbS9sZXZlbC88dHQvLmN0Yi8uCisgICAgICA8dGFnLyouY3RpLworICAgICAgICBJbmNsdWRlIGZpbGVzIGZvciBjb250cmFjdGlvbiB0YWJsZXMuCisgICAgICA8dGFnLyoua3RiLworICAgICAgICBLZXkgdGFibGVzCisgICAgICAgIChzZWUgc2VjdGlvbiA8cmVmIGlkPSJ0YWJsZS1rZXkiIG5hbWU9IktleSBUYWJsZXMiPiBmb3IgZGV0YWlscykuCisgICAgICAgIFRoZWlyIG5hbWVzIGxvb2sgbGlrZSA8ZW0vbmFtZS88dHQvLmt0Yi8uCisgICAgICA8dGFnLyoua3RpLworICAgICAgICBJbmNsdWRlIGZpbGVzIGZvciBrZXkgdGFibGVzLgorICAgICAgPHRhZy8qLnR0Yi8KKyAgICAgICAgVGV4dCB0YWJsZXMKKyAgICAgICAgKHNlZSBzZWN0aW9uIDxyZWYgaWQ9InRhYmxlLXRleHQiIG5hbWU9IlRleHQgVGFibGVzIj4gZm9yIGRldGFpbHMpLgorICAgICAgICBUaGVpciBuYW1lcyBsb29rIGxpa2UgPGVtL2xhbmd1YWdlLzx0dC8udHRiLy4KKyAgICAgIDx0YWcvKi50dGkvCisgICAgICAgIEluY2x1ZGUgZmlsZXMgZm9yIHRleHQgdGFibGVzLgorICAgICAgPHRhZy8qLmhscC8KKyAgICAgICAgRHJpdmVyLXNwZWNpZmljIGhlbHAgcGFnZXMuCisgICAgICAgIFRoZWlyIG5hbWVzIGxvb2sgbW9yZSBvciBsZXNzIGxpa2UgPHR0L2JybHR0eS0vPGVtL2RyaXZlci88dHQvLmhscC8sCisgICAgICAgIHdoZXJlIDxlbS9kcml2ZXIvIGlzIHRoZSB0d28tbGV0dGVyIDxyZWYgaWQ9ImRyaXZlcnMiIG5hbWU9ImRyaXZlciBpZGVudGlmaWNhdGlvbiBjb2RlIj4uCisgICAgPC9kZXNjcmlwPgorICA8dGFnPi92YXIvbGliL0JybEFQSS88Lz4KKyAgICBMb2NhbCBzb2NrZXRzIGZvciBjb25uZWN0aW5nIHRvIHRoZSBBcHBsaWNhdGlvbiBQcm9ncmFtbWluZyBJbnRlcmZhY2UuCisgIDx0YWc+L2luY2x1ZGUvPC8+CisgICAgQyBoZWFkZXIgZmlsZXMgZm9yIHRoZSBBcHBsaWNhdGlvbiBQcm9ncmFtbWluZyBJbnRlcmZhY2UuCisgICAgVGhlaXIgbmFtZXMgbG9vayBsaWtlIDx0dC9icmxhcGktLzxlbS9mdW5jdGlvbi88dHQvLmgvLgorICAgIFRoZSBtYWluIGhlYWRlciBpcyA8dHQvYnJsYXBpLmgvLgorICA8dGFnPi9pbmNsdWRlL2JybHR0eS88Lz4KKyAgICBDIGhlYWRlciBmaWxlcyBmb3IgYWNjZXNzaW5nIGJyYWlsbGUgaGFyZHdhcmUuCisgICAgVGhlaXIgbmFtZXMgbG9vayBsaWtlIDx0dC9icmxkZWZzLS88ZW0vZHJpdmVyLzx0dC8uaC8KKyAgICAod2hlcmUgPGVtL2RyaXZlci8gaXMgdGhlIHR3by1sZXR0ZXIgPHJlZiBpZD0iZHJpdmVycyIgbmFtZT0iZHJpdmVyIGlkZW50aWZpY2F0aW9uIGNvZGUiPikuCisgICAgVGhlIGhlYWRlcnMgPHR0L2JybGRlZnMuaC8gYW5kIDx0dC9hcGkuaC8gYXJlIHByb3ZpZGVkCisgICAgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgYW5kIHNob3VsZG4ndCBiZSB1c2VkLgorICA8dGFnPi9tYW4vPC8+CisgICAgTWFuIHBhZ2VzLgorICAgIDxkZXNjcmlwPgorICAgICAgPHRhZz5tYW4xLzxlbS9uYW1lLy4xPC90YWc+CisgICAgICAgIE1hbiBwYWdlcyBmb3IgQlJMVFRZLXJlbGF0ZWQgdXNlciBjb21tYW5kcy4KKyAgICAgIDx0YWc+bWFuMy88ZW0vbmFtZS8uMzwvdGFnPgorICAgICAgICBNYW4gcGFnZXMgZm9yIEFwcGxpY2F0aW9uIFByb2dyYW1taW5nIEludGVyZmFjZSBsaWJyYXJ5IHJvdXRpbmVzLgorICAgIDwvZGVzY3JpcD4KKzwvZGVzY3JpcD4KKworU29tZSBvcHRpb25hbCBmaWxlcyB3aGljaCB5b3Ugc2hvdWxkIGJlIGF3YXJlIG9mLAorYWx0aG91Z2ggdGhleSBhcmVuJ3QgcGFydCBvZiB0aGUgaW5zdGFsbGVkIGZpbGUgaGllcmFyY2h5LCBhcmU6Cis8ZGVzY3JpcD4KKyAgPHRhZz4vZXRjL2JybHR0eS5jb25mPC90YWc+CisgICAgVGhlIHN5c3RlbSBkZWZhdWx0cyBjb25maWd1cmF0aW9uIGZpbGUuCisgICAgSXQncyBjcmVhdGVkIGJ5IHRoZSBzeXN0ZW0gYWRtaW5pc3RyYXRvci4KKyAgICBTZWUgPHJlZiBpZD0iY29uZmlndXJlIiBuYW1lPSJUaGUgQ29uZmlndXJhdGlvbiBGaWxlIj4gZm9yIGRldGFpbHMuCisgIDx0YWc+L2V0Yy9icmx0dHktPGVtL2RyaXZlci8ucHJlZnM8L3RhZz4KKyAgICBUaGUgc2F2ZWQgcHJlZmVyZW5jZXMgc2V0dGluZ3MgZmlsZQorICAgICg8ZW0vZHJpdmVyLyBpcyBhIHR3by1sZXR0ZXIgPHJlZiBpZD0iZHJpdmVycyIgbmFtZT0iZHJpdmVyIGlkZW50aWZpY2F0aW9uIGNvZGUiPikuCisgICAgSXQncyBjcmVhdGVkIGJ5IHRoZSA8cmVmIGlkPSJjb21tYW5kLVBSRUZTQVZFIiBuYW1lPSJQUkVGU0FWRSI+IGNvbW1hbmQuCisgICAgU2VlIDxyZWYgaWQ9InByZWZlcmVuY2VzIiBuYW1lPSJQcmVmZXJlbmNlcyBTZXR0aW5ncyI+IGZvciBkZXRhaWxzLgorPC9kZXNjcmlwPgorCis8c2VjdDE+SW5zdGFsbGluZyBmcm9tIGEgVEFSIEJhbGw8bGFiZWwgaWQ9InRhciI+PHA+CitIZXJlJ3Mgd2hhdCB0byBkbyBpZiB5b3UganVzdCB3YW50IHRvIGluc3RhbGwgQlJMVFRZIGFzIHF1aWNrbHkgYXMgcG9zc2libGUsCit0cnVzdGluZyB0aGF0IGFsbCBvZiBvdXIgZGVmYXVsdHMgYXJlIGNvcnJlY3QuCis8ZW51bT4KKyAgPGl0ZW0+CisgICAgRG93bmxvYWQgdGhlIHNvdXJjZS4KKyAgICBJdCdsbCBiZSBhIGZpbGUgbmFtZWQKKyAgICA8dHQvYnJsdHR5LS88ZW0vcmVsZWFzZS88dHQvLnRhci5nei8sCisgICAgZS5nLiA8dHQvYnJsdHR5LTMuMC50YXIuZ3ovLgorICA8aXRlbT4KKyAgICBVbnBhY2sgdGhlIHNvdXJjZSBpbnRvIGl0cyBuYXRpdmUgaGllcmFyY2hpY2FsIHN0cnVjdHVyZS4KKyAgICA8dHNjcmVlbj50YXIgeHpmIGJybHR0eS08ZW0vcmVsZWFzZS8udGFyLmd6PC90c2NyZWVuPgorICAgIFRoaXMgc2hvdWxkIGNyZWF0ZSB0aGUgZGlyZWN0b3J5IDx0dC9icmx0dHktLzxlbS9yZWxlYXNlLy4KKyAgPGl0ZW0+CisgICAgQ2hhbmdlIHRvIHRoZSBzb3VyY2UgZGlyZWN0b3J5LCBjb25maWd1cmUsIGNvbXBpbGUsIGFuZCBpbnN0YWxsIEJSTFRUWS4KKyAgICA8dHNjcmVlbj4KKyAgICAgIGNkIGJybHR0eS08ZW0vcmVsZWFzZS8KKyAgICAgIDxuZXdsaW5lPgorICAgICAgLi9jb25maWd1cmUKKyAgICAgIDxuZXdsaW5lPgorICAgICAgbWFrZSBpbnN0YWxsCisgICAgPC90c2NyZWVuPgorICAgIFRoaXMgc2hvdWxkIGJlIGRvbmUgYXMgPGJmL3Jvb3QvLgorPC9lbnVtPgorCitUbyB1bmluc3RhbGwgQlJMVFRZLCBkbzoKKzx0c2NyZWVuPgorICBjZCBicmx0dHktPGVtL3JlbGVhc2UvCisgIDxuZXdsaW5lPgorICBtYWtlIHVuaW5zdGFsbAorPC90c2NyZWVuPgorCitUaGF0J3MgYWxsIHRoZXJlJ3MgdG8gaXQuCitOb3csIGZvciB0aG9zZSB3aG8gcmVhbGx5IHdhbnQgdG8ga25vdyB3aGF0J3MgZ29pbmcgb24sIGhlcmUgYXJlIHRoZSBkZXRhaWxzLgorCis8c2VjdDI+QnVpbGQgT3B0aW9uczxsYWJlbCBpZD0iYnVpbGQiPjxwPgorVGhlIGZpcnN0IHN0ZXAgaW4gYnVpbGRpbmcgQlJMVFRZIGlzIHRvIGNvbmZpZ3VyZSBpdAorZm9yIHlvdXIgc3lzdGVtIGFuZC9vciBmb3IgeW91ciBwZXJzb25hbCBuZWVkcy4KK1RoaXMgaXMgZG9uZSBieSBydW5uaW5nIHRoZSA8dHQvY29uZmlndXJlLyBzY3JpcHQgaW4gQlJMVFRZJ3MgdG9wLWxldmVsIGRpcmVjdG9yeS4KK1dlJ3ZlIHRyaWVkIHRvIG1ha2UgdGhlIGRlZmF1bHRzIGZpdCB0aGUgbW9zdCBjb21tb24gY2FzZSwgc28sCithc3N1bWluZyB0aGF0IHlvdSdyZSBub3QgYXR0ZW1wdGluZyB0byBkbyBhbnl0aGluZyBvdXQgb2YgdGhlIG9yZGluYXJ5LAoreW91IG1heSBub3QgbmVlZCB0byBkbyBhbnl0aGluZyBtb3JlIGNvbXBsaWNhdGVkIHRoYW4KK2ludm9rZSB0aGlzIHNjcmlwdCB3aXRob3V0IHNwZWNpZnlpbmcgYW55IG9wdGlvbnMgYXQgYWxsLgorPHRzY3JlZW4+Li9jb25maWd1cmU8L3RzY3JlZW4+CitJZiwgaG93ZXZlciwgeW91IGhhdmUgc29tZSBzcGVjaWFsIHJlcXVpcmVtZW50cywKK29yIGV2ZW4gaWYgeW91J3JlIGp1c3QgYWR2ZW50dXJvdXMsCit5b3Ugc2hvdWxkIGZpbmQgb3V0IHdoYXQgeW91ciBjaG9pY2VzIGFyZS4KKzx0c2NyZWVuPi4vY29uZmlndXJlIC0taGVscDwvdHNjcmVlbj4KK1lvdSBzaG91bGQgYWxzbyBjaGVjayBvdXQgdGhlIDx0dC9SRUFETUUvIGZpbGUgaW4gdGhlIHN1YmRpcmVjdG9yeQorY29udGFpbmluZyB0aGUgZHJpdmVyIGZvciB5b3VyIGJyYWlsbGUgZGlzcGxheQorZm9yIGFueSBhZGRpdGlvbmFsIGRpc3BsYXktc3BlY2lmaWMgaW5zdHJ1Y3Rpb25zLgorCis8c2VjdDM+U3lzdGVtIERlZmF1bHRzPGxhYmVsIGlkPSJidWlsZC1kZWZhdWx0cyI+PHA+Cis8ZGVzY3JpcD4KKyAgPHRhZz48dHQvLS13aXRoLWJyYWlsbGUtZHJpdmVyPS88ZW0vZHJpdmVyLzxsYWJlbCBpZD0iYnVpbGQtYnJhaWxsZS1kcml2ZXIiPjwvdGFnPgorICAgIFNwZWNpZnkgdGhlIGJyYWlsbGUgZGlzcGxheSBkcml2ZXJzCisgICAgd2hpY2ggYXJlIHRvIGJlIGxpbmtlZCBpbnRvIHRoZSBCUkxUVFkgYmluYXJ5LgorICAgIFRob3NlIGRyaXZlcnMgd2hpY2ggYXJlbid0IGxpc3RlZCB2aWEgdGhpcyBvcHRpb24KKyAgICBhcmUgYnVpbHQgYXMgZHluYW1pY2FsbHkgbG9hZGFibGUgc2hhcmVkIG9iamVjdHMKKyAgICBhbmQgY2FuIHN0aWxsIGJlIHNlbGVjdGVkIGF0IHJ1bi10aW1lLgorICAgIEVhY2ggZHJpdmVyIG11c3QgYmUgaWRlbnRpZmllZAorICAgIGVpdGhlciBieSBpdHMgdHdvLWxldHRlciA8cmVmIGlkPSJkcml2ZXJzIiBuYW1lPSJkcml2ZXIgaWRlbnRpZmljYXRpb24gY29kZSI+CisgICAgb3IgYnkgaXRzIHByb3BlciBuYW1lIChmdWxsIG9yIGFiYnJldmlhdGVkKS4KKyAgICBUaGUgZHJpdmVyIGlkZW50aWZpZXJzIG11c3QgYmUKKyAgICBzZXBhcmF0ZWQgZnJvbSBvbmUgYW5vdGhlciBieSBhIHNpbmdsZSBjb21tYS4KKyAgICBJZiBhIGRyaXZlciBpZGVudGlmaWVyIGlzIHByZWZpeGVkIGJ5IGEgbWludXMgc2lnbiAoPHR0Ly0vKSwKKyAgICB0aGVuIHRoYXQgZHJpdmVyIGlzIGV4Y2x1ZGVkIGZyb20gdGhlIGJ1aWxkLgorICAgIEFueSBvZiB0aGUgZm9sbG93aW5nIHdvcmRzIGNhbiBhbHNvIGJlIHVzZWQgYXMgdGhlIG9wZXJhbmQgb2YgdGhpcyBvcHRpb246CisgICAgPGRlc2NyaXA+CisgICAgICA8dGFnL2FsbC8KKyAgICAgICAgTGluayBhbGwgb2YgdGhlIGRyaXZlcnMgaW50byB0aGUgYmluYXJ5LgorICAgICAgICBEb24ndCBidWlsZCBhbnkgb2YgdGhlbSBhcyBkeW5hbWljYWxseSBsb2FkYWJsZSBzaGFyZWQgb2JqZWN0cy4KKyAgICAgICAgVGhpcyB3b3JkIG1heSBhbHNvIGJlIHNwZWNpZmllZCBhcyB0aGUgZmluYWwgZWxlbWVudCBvZiBhIGRyaXZlciBsaXN0LgorICAgICAgICBUaGlzIGlzIGhvdyB0byBzcGVjaWZ5IHRoZSBkZWZhdWx0IGRyaXZlciB3aGVuIGFsbCB0aGUgZHJpdmVycyBhcmUgdG8gYmUgbGlua2VkIGluLgorICAgICAgPHRhZy8tYWxsLworICAgICAgICBPbmx5IGJ1aWxkIHRob3NlIGRyaXZlcnMgd2hpY2ggaGF2ZSBiZWVuIGV4cGxpY2l0bHkgaW5jbHVkZWQgdmlhIHRoaXMgb3B0aW9uLgorICAgICAgPHRhZy9uby8KKyAgICAgICAgRG9uJ3QgYnVpbGQgYW55IGRyaXZlcnMgYXQgYWxsLgorICAgICAgICBUaGlzIGlzIGVxdWl2YWxlbnQgdG8gc3BlY2lmeWluZyA8dHQvLS13aXRob3V0LWJyYWlsbGUtZHJpdmVyLy4KKyAgICAgIDx0YWcveWVzLworICAgICAgICBCdWlsZCBhbGwgb2YgdGhlIGRyaXZlcnMgYXMgZHluYW1pY2FsbHkgbG9hZGFibGUgc2hhcmVkIG9iamVjdHMuCisgICAgICAgIERvbid0IGxpbmsgYW55IG9mIHRoZW0gaW50byB0aGUgYmluYXJ5LgorICAgICAgICBUaGlzIGlzIGVxdWl2YWxlbnQgdG8gc3BlY2lmeWluZyA8dHQvLS13aXRoLWJyYWlsbGUtZHJpdmVyLy4KKyAgICA8L2Rlc2NyaXA+CisgICAgU2VlIHRoZSA8cmVmIGlkPSJjb25maWd1cmUtYnJhaWxsZS1kcml2ZXIiIG5hbWU9ImJyYWlsbGUtZHJpdmVyIj4gY29uZmlndXJhdGlvbiBmaWxlIGRpcmVjdGl2ZQorICAgIGFuZCB0aGUgPHJlZiBpZD0ib3B0aW9ucy1icmFpbGxlLWRyaXZlciIgbmFtZT0iLWIiPiBjb21tYW5kIGxpbmUgb3B0aW9uCisgICAgZm9yIHJ1bi10aW1lIHNlbGVjdGlvbi4KKyAgPHRhZz48dHQvLS13aXRoLWJyYWlsbGUtcGFyYW1ldGVycz0vWzxlbS9kcml2ZXIvPHR0LzovXTxlbS9uYW1lLzx0dC89LzxlbS92YWx1ZS88dHQvLC8uLi48bGFiZWwgaWQ9ImJ1aWxkLWJyYWlsbGUtcGFyYW1ldGVycyI+PC90YWc+CisgICAgU3BlY2lmeSB0aGUgZGVmYXVsdCBwYXJhbWV0ZXIgc2V0dGluZ3MgZm9yIHRoZSBicmFpbGxlIGRpc3BsYXkgZHJpdmVycy4KKyAgICBJZiB0aGUgc2FtZSBwYXJhbWV0ZXIgaXMgc3BlY2lmaWVkIG1vcmUgdGhhbiBvbmNlLAorICAgIHRoZW4gaXRzIHJpZ2h0bW9zdCBhc3NpZ25tZW50IGlzIHVzZWQuCisgICAgSWYgYSBwYXJhbWV0ZXIgbmFtZSBpcyBxdWFsaWZpZWQgYnkgYSBkcml2ZXIKKyAgICAoc2VlIHNlY3Rpb24gPHJlZiBpZD0iZHJpdmVycyIgbmFtZT0iRHJpdmVyIElkZW50aWZpY2F0aW9uIENvZGVzIj4pCisgICAgdGhlbiB0aGF0IHNldHRpbmcgb25seSBhcHBsaWVzIHRvIHRoYXQgZHJpdmVyOworICAgIGlmIGl0IGlzbid0IHRoZW4gaXQgYXBwbGllcyB0byBhbGwgZHJpdmVycy4KKyAgICBGb3IgYSBkZXNjcmlwdGlvbiBvZiB0aGUgcGFyYW1ldGVycyBhY2NlcHRlZCBieSBhIHNwZWNpZmljIGRyaXZlciwKKyAgICBwbGVhc2Ugc2VlIHRoZSBkb2N1bWVudGF0aW9uIGZvciB0aGF0IGRyaXZlci4KKyAgICBTZWUgdGhlIDxyZWYgaWQ9ImNvbmZpZ3VyZS1icmFpbGxlLXBhcmFtZXRlcnMiIG5hbWU9ImJyYWlsbGUtcGFyYW1ldGVycyI+IGNvbmZpZ3VyYXRpb24gZmlsZSBkaXJlY3RpdmUKKyAgICBhbmQgdGhlIDxyZWYgaWQ9Im9wdGlvbnMtYnJhaWxsZS1wYXJhbWV0ZXJzIiBuYW1lPSItQiI+IGNvbW1hbmQgbGluZSBvcHRpb24KKyAgICBmb3IgcnVuLXRpbWUgc2VsZWN0aW9uLgorICA8dGFnPjx0dC8tLXdpdGgtYnJhaWxsZS1kZXZpY2U9LzxlbS9kZXZpY2UvPHR0LywvLi4uPGxhYmVsIGlkPSJidWlsZC1icmFpbGxlLWRldmljZSI+PC90YWc+CisgICAgU3BlY2lmeSB0aGUgZGVmYXVsdCBkZXZpY2UgdG8gd2hpY2ggdGhlIGJyYWlsbGUgZGlzcGxheSBpcyBjb25uZWN0ZWQKKyAgICAoc2VlIHNlY3Rpb24gPHJlZiBpZD0ib3BlcmFuZC1icmFpbGxlLWRldmljZSIgbmFtZT0iQnJhaWxsZSBEZXZpY2UgU3BlY2lmaWNhdGlvbiI+KS4KKyAgICBJZiB0aGlzIG9wdGlvbiBpc24ndCBzcGVjaWZpZWQgdGhlbgorICAgIDx0dC91c2I6LyBpcyBhc3N1bWVkIGlmIFVTQiBzdXBwb3J0IGlzIGF2YWlsYWJsZSwKKyAgICA8dHQvYmx1ZXRvb3RoOi8gaXMgYXNzdW1lZCBpZiBCbHVldG9vdGggc3VwcG9ydCBpcyBhdmFpbGFibGUsCisgICAgYW5kIDx0dC91c2I6LGJsdWV0b290aDovIGlzIGFzc3VtZWQgaWYgYm90aCBhcmUgYXZhaWxhYmxlLgorICAgIElmIG5laXRoZXIgVVNCIG5vciBCbHVldG9vdGggc3VwcG9ydCBpcyBhdmFpbGFibGUgdGhlbgorICAgIGFuIG9wZXJhdGluZyBzeXN0ZW0gYXBwcm9wcmlhdGUgcGF0aAorICAgIGZvciB0aGUgcHJpbWFyeSAoZmlyc3QpIHNlcmlhbCBwb3J0IChkZXZpY2UpIGlzIGFzc3VtZWQuCisgICAgU2VlIHRoZSA8cmVmIGlkPSJjb25maWd1cmUtYnJhaWxsZS1kZXZpY2UiIG5hbWU9ImJyYWlsbGUtZGV2aWNlIj4gY29uZmlndXJhdGlvbiBmaWxlIGRpcmVjdGl2ZQorICAgIGFuZCB0aGUgPHJlZiBpZD0ib3B0aW9ucy1icmFpbGxlLWRldmljZSIgbmFtZT0iLWQiPiBjb21tYW5kIGxpbmUgb3B0aW9uCisgICAgZm9yIHJ1bi10aW1lIHNlbGVjdGlvbi4KKyAgPHRhZz48dHQvLS13aXRoLWxpYmJyYWlsbGU9LzxlbS9kaXJlY3RvcnkvPGxhYmVsIGlkPSJidWlsZC1saWJicmFpbGxlIj48L3RhZz4KKyAgICBTcGVjaWZ5IHRoZSBpbnN0YWxsZWQgbG9jYXRpb24gb2YgdGhlIExpYmJyYWlsbGUgcGFja2FnZSwKKyAgICBhbmQgYnVpbGQgdGhlIExpYmJyYWlsbGUgYnJhaWxsZSBkaXNwbGF5IGRyaXZlcgorICAgIChzZWUgPHJlZiBpZD0icmVzdHJpY3Rpb25zLWxpYmJyYWlsbGUiIG5hbWU9IkJ1aWxkIFJlc3RyaWN0aW9ucyI+KS4KKyAgICBBbnkgb2YgdGhlIGZvbGxvd2luZyB3b3JkcyBjYW4gYWxzbyBiZSB1c2VkIGFzIHRoZSBvcGVyYW5kIG9mIHRoaXMgb3B0aW9uOgorICAgIDxkZXNjcmlwPgorICAgICAgPHRhZy9uby8KKyAgICAgICAgRG9uJ3QgYnVpbGQgdGhlIGRyaXZlci4KKyAgICAgICAgVGhpcyBpcyBlcXVpdmFsZW50IHRvIHNwZWNpZnlpbmcgPHR0Ly0td2l0aG91dC1saWJicmFpbGxlLy4KKyAgICAgIDx0YWcveWVzLworICAgICAgICBCdWlsZCB0aGUgZHJpdmVyIGlmIHRoZSBwYWNrYWdlIGNhbiBiZSBmb3VuZCBpbgorICAgICAgICA8dHQ+L3VzcjwvPiwKKyAgICAgICAgPHR0Pi91c3IvbG9jYWw8Lz4sCisgICAgICAgIDx0dD4vdXNyL2xvY2FsL0xpYmJyYWlsbGU8Lz4sCisgICAgICAgIDx0dD4vdXNyL2xvY2FsL2xpYmJyYWlsbGU8Lz4sCisgICAgICAgIDx0dD4vb3B0L0xpYmJyYWlsbGU8Lz4sCisgICAgICAgIG9yIDx0dD4vb3B0L2xpYmJyYWlsbGU8Lz4uCisgICAgICAgIFRoaXMgaXMgZXF1aXZhbGVudCB0byBzcGVjaWZ5aW5nIDx0dC8tLXdpdGgtbGliYnJhaWxsZS8uCisgICAgPC9kZXNjcmlwPgorICA8dGFnPjx0dC8tLXdpdGgtdGV4dC10YWJsZT0vPGVtL2ZpbGUvPGxhYmVsIGlkPSJidWlsZC10ZXh0LXRhYmxlIj48L3RhZz4KKyAgICBTcGVjaWZ5IHRoZSBidWlsdC1pbiAoZmFsbGJhY2spIHRleHQgdGFibGUKKyAgICAoc2VlIHNlY3Rpb24gPHJlZiBpZD0idGFibGUtdGV4dCIgbmFtZT0iVGV4dCBUYWJsZXMiPiBmb3IgZGV0YWlscykuCisgICAgVGhlIHNwZWNpZmllZCB0YWJsZSBpcyBsaW5rZWQgaW50byB0aGUgQlJMVFRZIGJpbmFyeSwgYW5kIGlzIHVzZWQKKyAgICBlaXRoZXIgaWYgbG9jYWxlLWJhc2VkIGF1dG9zZWxlY3Rpb24gZmFpbHMKKyAgICBvciBpZiB0aGUgcmVxdWVzdGVkIHRhYmxlIGNhbid0IGJlIGxvYWRlZC4KKyAgICBUaGUgYWJzb2x1dGUgcGF0aCB0byBhIHRhYmxlIG91dHNpZGUgdGhlIHNvdXJjZSB0cmVlIG1heSBiZSBzcGVjaWZpZWQuCisgICAgVGhlIDx0dC8udHRiLyBleHRlbnNpb24gaXMgb3B0aW9uYWwuCisgICAgSWYgdGhpcyBvcHRpb24gaXNuJ3Qgc3BlY2lmaWVkLAorICAgIHRoZW4gPHR0L2VuLW5hYmNjLywKKyAgICBhIGNvbW1vbmx5IChpbiBOb3J0aCBBbWVyaWNhKSB1c2VkIDgtZG90IHZhcmlhbnQgb2YgdGhlCisgICAgPHJlZiBpZD0ibmFiY2MiIG5hbWU9Ik5vcnRoIEFtZXJpY2FuIEJyYWlsbGUgQ29tcHV0ZXIgQ29kZSI+LAorICAgIGlzIGFzc3VtZWQuCisgICAgU2VlIHRoZSA8cmVmIGlkPSJjb25maWd1cmUtdGV4dC10YWJsZSIgbmFtZT0idGV4dC10YWJsZSI+IGNvbmZpZ3VyYXRpb24gZmlsZSBkaXJlY3RpdmUKKyAgICBhbmQgdGhlIDxyZWYgaWQ9Im9wdGlvbnMtdGV4dC10YWJsZSIgbmFtZT0iLXQiPiBjb21tYW5kIGxpbmUgb3B0aW9uCisgICAgZm9yIHJ1bi10aW1lIHNlbGVjdGlvbi4KKyAgICBUaGlzIHNldHRpbmcgY2FuIGJlIGNoYW5nZWQgd2l0aCB0aGUKKyAgICA8cmVmIGlkPSJwcmVmZXJlbmNlLXRleHQtdGFibGUiIG5hbWU9IlRleHQgVGFibGUiPiBwcmVmZXJlbmNlLgorICA8dGFnPjx0dC8tLXdpdGgtYXR0cmlidXRlcy10YWJsZT0vPGVtL2ZpbGUvPGxhYmVsIGlkPSJidWlsZC1hdHRyaWJ1dGVzLXRhYmxlIj48L3RhZz4KKyAgICBTcGVjaWZ5IHRoZSBidWlsdC1pbiAoZmFsbGJhY2spIGF0dHJpYnV0ZXMgdGFibGUKKyAgICAoc2VlIHNlY3Rpb24gPHJlZiBpZD0idGFibGUtYXR0cmlidXRlcyIgbmFtZT0iQXR0cmlidXRlcyBUcmFuc2xhdGlvbiI+IGZvciBkZXRhaWxzKS4KKyAgICBUaGUgc3BlY2lmaWVkIHRhYmxlIGlzIGxpbmtlZCBpbnRvIHRoZSBCUkxUVFkgYmluYXJ5LCBhbmQgaXMgdXNlZAorICAgIGlmIHRoZSByZXF1ZXN0ZWQgdGFibGUgY2FuJ3QgYmUgbG9hZGVkLgorICAgIFRoZSBhYnNvbHV0ZSBwYXRoIHRvIGEgdGFibGUgb3V0c2lkZSB0aGUgc291cmNlIHRyZWUgbWF5IGJlIHNwZWNpZmllZC4KKyAgICBUaGUgPHR0Ly5hdGIvIGV4dGVuc2lvbiBpcyBvcHRpb25hbC4KKyAgICBJZiB0aGlzIG9wdGlvbiBpc24ndCBzcGVjaWZpZWQsCisgICAgdGhlbiA8dHQvbGVmdF9yaWdodC8gaXMgYXNzdW1lZC4KKyAgICBDaGFuZ2UgaXQgdG8gPHR0L2ludmxlZnRfcmlnaHQvIGlmIHlvdSdkIGxpa2UgaXQgZG9uZSB0aGUgb2xkIHdheS4KKyAgICBTZWUgdGhlIDxyZWYgaWQ9ImNvbmZpZ3VyZS1hdHRyaWJ1dGVzLXRhYmxlIiBuYW1lPSJhdHRyaWJ1dGVzLXRhYmxlIj4gY29uZmlndXJhdGlvbiBmaWxlIGRpcmVjdGl2ZQorICAgIGFuZCB0aGUgPHJlZiBpZD0ib3B0aW9ucy1hdHRyaWJ1dGVzLXRhYmxlIiBuYW1lPSItYSI+IGNvbW1hbmQgbGluZSBvcHRpb24KKyAgICBmb3IgcnVuLXRpbWUgc2VsZWN0aW9uLgorICAgIFRoaXMgc2V0dGluZyBjYW4gYmUgY2hhbmdlZCB3aXRoIHRoZQorICAgIDxyZWYgaWQ9InByZWZlcmVuY2UtYXR0cmlidXRlcy10YWJsZSIgbmFtZT0iQXR0cmlidXRlcyBUYWJsZSI+IHByZWZlcmVuY2UuCisgIDx0YWc+PHR0Ly0td2l0aC1zcGVlY2gtZHJpdmVyPS88ZW0vZHJpdmVyLzxsYWJlbCBpZD0iYnVpbGQtc3BlZWNoLWRyaXZlciI+PC90YWc+CisgICAgU3BlY2lmeSB0aGUgc3BlZWNoIHN5bnRoZXNpemVyIGRyaXZlcnMKKyAgICB3aGljaCBhcmUgdG8gYmUgbGlua2VkIGludG8gdGhlIEJSTFRUWSBiaW5hcnkuCisgICAgVGhvc2UgZHJpdmVycyB3aGljaCBhcmVuJ3QgbGlzdGVkIHZpYSB0aGlzIG9wdGlvbgorICAgIGFyZSBidWlsdCBhcyBkeW5hbWljYWxseSBsb2FkYWJsZSBzaGFyZWQgb2JqZWN0cworICAgIGFuZCBjYW4gc3RpbGwgYmUgc2VsZWN0ZWQgYXQgcnVuLXRpbWUuCisgICAgRWFjaCBkcml2ZXIgbXVzdCBiZSBpZGVudGlmaWVkCisgICAgZWl0aGVyIGJ5IGl0cyB0d28tbGV0dGVyIDxyZWYgaWQ9ImRyaXZlcnMiIG5hbWU9ImRyaXZlciBpZGVudGlmaWNhdGlvbiBjb2RlIj4KKyAgICBvciBieSBpdHMgcHJvcGVyIG5hbWUgKGZ1bGwgb3IgYWJicmV2aWF0ZWQpLgorICAgIFRoZSBkcml2ZXIgaWRlbnRpZmllcnMgbXVzdCBiZQorICAgIHNlcGFyYXRlZCBmcm9tIG9uZSBhbm90aGVyIGJ5IGEgc2luZ2xlIGNvbW1hLgorICAgIElmIGEgZHJpdmVyIGlkZW50aWZpZXIgaXMgcHJlZml4ZWQgYnkgYSBtaW51cyBzaWduICg8dHQvLS8pLAorICAgIHRoZW4gdGhhdCBkcml2ZXIgaXMgZXhjbHVkZWQgZnJvbSB0aGUgYnVpbGQuCisgICAgQW55IG9mIHRoZSBmb2xsb3dpbmcgd29yZHMgY2FuIGFsc28gYmUgdXNlZCBhcyB0aGUgb3BlcmFuZCBvZiB0aGlzIG9wdGlvbjoKKyAgICA8ZGVzY3JpcD4KKyAgICAgIDx0YWcvYWxsLworICAgICAgICBMaW5rIGFsbCBvZiB0aGUgZHJpdmVycyBpbnRvIHRoZSBiaW5hcnkuCisgICAgICAgIERvbid0IGJ1aWxkIGFueSBvZiB0aGVtIGFzIGR5bmFtaWNhbGx5IGxvYWRhYmxlIHNoYXJlZCBvYmplY3RzLgorICAgICAgICBUaGlzIHdvcmQgbWF5IGFsc28gYmUgc3BlY2lmaWVkIGFzIHRoZSBmaW5hbCBlbGVtZW50IG9mIGEgZHJpdmVyIGxpc3QuCisgICAgICAgIFRoaXMgaXMgaG93IHRvIHNwZWNpZnkgdGhlIGRlZmF1bHQgZHJpdmVyIHdoZW4gYWxsIHRoZSBkcml2ZXJzIGFyZSB0byBiZSBsaW5rZWQgaW4uCisgICAgICA8dGFnLy1hbGwvCisgICAgICAgIE9ubHkgYnVpbGQgdGhvc2UgZHJpdmVycyB3aGljaCBoYXZlIGJlZW4gZXhwbGljaXRseSBpbmNsdWRlZCB2aWEgdGhpcyBvcHRpb24uCisgICAgICA8dGFnL25vLworICAgICAgICBEb24ndCBidWlsZCBhbnkgZHJpdmVycyBhdCBhbGwuCisgICAgICAgIFRoaXMgaXMgZXF1aXZhbGVudCB0byBzcGVjaWZ5aW5nIDx0dC8tLXdpdGhvdXQtc3BlZWNoLWRyaXZlci8uCisgICAgICA8dGFnL3llcy8KKyAgICAgICAgQnVpbGQgYWxsIG9mIHRoZSBkcml2ZXJzIGFzIGR5bmFtaWNhbGx5IGxvYWRhYmxlIHNoYXJlZCBvYmplY3RzLgorICAgICAgICBEb24ndCBsaW5rIGFueSBvZiB0aGVtIGludG8gdGhlIGJpbmFyeS4KKyAgICAgICAgVGhpcyBpcyBlcXVpdmFsZW50IHRvIHNwZWNpZnlpbmcgPHR0Ly0td2l0aC1zcGVlY2gtZHJpdmVyLy4KKyAgICA8L2Rlc2NyaXA+CisgICAgU2VlIHRoZSA8cmVmIGlkPSJjb25maWd1cmUtc3BlZWNoLWRyaXZlciIgbmFtZT0ic3BlZWNoLWRyaXZlciI+IGNvbmZpZ3VyYXRpb24gZmlsZSBkaXJlY3RpdmUKKyAgICBhbmQgdGhlIDxyZWYgaWQ9Im9wdGlvbnMtc3BlZWNoLWRyaXZlciIgbmFtZT0iLXMiPiBjb21tYW5kIGxpbmUgb3B0aW9uCisgICAgZm9yIHJ1bi10aW1lIHNlbGVjdGlvbi4KKyAgPHRhZz48dHQvLS13aXRoLXNwZWVjaC1wYXJhbWV0ZXJzPS9bPGVtL2RyaXZlci88dHQvOi9dPGVtL25hbWUvPHR0Lz0vPGVtL3ZhbHVlLzx0dC8sLy4uLjxsYWJlbCBpZD0iYnVpbGQtc3BlZWNoLXBhcmFtZXRlcnMiPjwvdGFnPgorICAgIFNwZWNpZnkgdGhlIGRlZmF1bHQgcGFyYW1ldGVyIHNldHRpbmdzIGZvciB0aGUgc3BlZWNoIHN5bnRoZXNpemVyIGRyaXZlcnMuCisgICAgSWYgdGhlIHNhbWUgcGFyYW1ldGVyIGlzIHNwZWNpZmllZCBtb3JlIHRoYW4gb25jZSwKKyAgICB0aGVuIGl0cyByaWdodG1vc3QgYXNzaWdubWVudCBpcyB1c2VkLgorICAgIElmIGEgcGFyYW1ldGVyIG5hbWUgaXMgcXVhbGlmaWVkIGJ5IGEgZHJpdmVyCisgICAgKHNlZSBzZWN0aW9uIDxyZWYgaWQ9ImRyaXZlcnMiIG5hbWU9IkRyaXZlciBJZGVudGlmaWNhdGlvbiBDb2RlcyI+KQorICAgIHRoZW4gdGhhdCBzZXR0aW5nIG9ubHkgYXBwbGllcyB0byB0aGF0IGRyaXZlcjsKKyAgICBpZiBpdCBpc24ndCB0aGVuIGl0IGFwcGxpZXMgdG8gYWxsIGRyaXZlcnMuCisgICAgRm9yIGEgZGVzY3JpcHRpb24gb2YgdGhlIHBhcmFtZXRlcnMgYWNjZXB0ZWQgYnkgYSBzcGVjaWZpYyBkcml2ZXIsCisgICAgcGxlYXNlIHNlZSB0aGUgZG9jdW1lbnRhdGlvbiBmb3IgdGhhdCBkcml2ZXIuCisgICAgU2VlIHRoZSA8cmVmIGlkPSJjb25maWd1cmUtc3BlZWNoLXBhcmFtZXRlcnMiIG5hbWU9InNwZWVjaC1wYXJhbWV0ZXJzIj4gY29uZmlndXJhdGlvbiBmaWxlIGRpcmVjdGl2ZQorICAgIGFuZCB0aGUgPHJlZiBpZD0ib3B0aW9ucy1zcGVlY2gtcGFyYW1ldGVycyIgbmFtZT0iLVMiPiBjb21tYW5kIGxpbmUgb3B0aW9uCisgICAgZm9yIHJ1bi10aW1lIHNlbGVjdGlvbi4KKyAgPHRhZz48dHQvLS13aXRoLWZsaXRlPS88ZW0vZGlyZWN0b3J5LzxsYWJlbCBpZD0iYnVpbGQtZmxpdGUiPjwvdGFnPgorICAgIFNwZWNpZnkgdGhlIGluc3RhbGxlZCBsb2NhdGlvbiBvZiB0aGUgRmVzdGl2YWxMaXRlIHRleHQtdG8tc3BlZWNoIHBhY2thZ2UsCisgICAgYW5kIGJ1aWxkIHRoZSBGZXN0aXZhbExpdGUgc3BlZWNoIHN5bnRoZXNpemVyIGRyaXZlcgorICAgIChzZWUgPHJlZiBpZD0icmVzdHJpY3Rpb25zLWZsaXRlIiBuYW1lPSJCdWlsZCBSZXN0cmljdGlvbnMiPikuCisgICAgQW55IG9mIHRoZSBmb2xsb3dpbmcgd29yZHMgY2FuIGFsc28gYmUgdXNlZCBhcyB0aGUgb3BlcmFuZCBvZiB0aGlzIG9wdGlvbjoKKyAgICA8ZGVzY3JpcD4KKyAgICAgIDx0YWcvbm8vCisgICAgICAgIERvbid0IGJ1aWxkIHRoZSBkcml2ZXIuCisgICAgICAgIFRoaXMgaXMgZXF1aXZhbGVudCB0byBzcGVjaWZ5aW5nIDx0dC8tLXdpdGhvdXQtZmxpdGUvLgorICAgICAgPHRhZy95ZXMvCisgICAgICAgIEJ1aWxkIHRoZSBkcml2ZXIgaWYgdGhlIHBhY2thZ2UgY2FuIGJlIGZvdW5kIGluCisgICAgICAgIDx0dD4vdXNyPC8+LAorICAgICAgICA8dHQ+L3Vzci9sb2NhbDwvPiwKKyAgICAgICAgPHR0Pi91c3IvbG9jYWwvRmVzdGl2YWxMaXRlPC8+LAorICAgICAgICA8dHQ+L3Vzci9sb2NhbC9mbGl0ZTwvPiwKKyAgICAgICAgPHR0Pi9vcHQvRmVzdGl2YWxMaXRlPC8+LAorICAgICAgICBvciA8dHQ+L29wdC9mbGl0ZTwvPi4KKyAgICAgICAgVGhpcyBpcyBlcXVpdmFsZW50IHRvIHNwZWNpZnlpbmcgPHR0Ly0td2l0aC1mbGl0ZS8uCisgICAgPC9kZXNjcmlwPgorICA8dGFnPjx0dC8tLXdpdGgtZmxpdGUtbGFuZ3VhZ2U9LzxlbS9sYW5ndWFnZS88bGFiZWwgaWQ9ImJ1aWxkLWZsaXRlLWxhbmd1YWdlIj48L3RhZz4KKyAgICBTcGVjaWZ5IHRoZSBsYW5ndWFnZSB3aGljaCB0aGUgRmVzdGl2YWxMaXRlIHRleHQgdG8gc3BlZWNoIGVuZ2luZSBpcyB0byB1c2UuCisgICAgVGhlIGRlZmF1bHQgbGFuZ3VhZ2UgaXMgPHR0L3VzZW5nbGlzaC8uCisgIDx0YWc+PHR0Ly0td2l0aC1mbGl0ZS1sZXhpY29uPS88ZW0vbGV4aWNvbi88bGFiZWwgaWQ9ImJ1aWxkLWZsaXRlLWxleGljb24iPjwvdGFnPgorICAgIFNwZWNpZnkgdGhlIGxleGljb24gd2hpY2ggdGhlIEZlc3RpdmFsTGl0ZSB0ZXh0IHRvIHNwZWVjaCBlbmdpbmUgaXMgdG8gdXNlLgorICAgIFRoZSBkZWZhdWx0IGxleGljb24gaXMgPHR0L2NtdWxleC8uCisgIDx0YWc+PHR0Ly0td2l0aC1mbGl0ZS12b2ljZT0vPGVtL3ZvaWNlLzxsYWJlbCBpZD0iYnVpbGQtZmxpdGUtdm9pY2UiPjwvdGFnPgorICAgIFNwZWNpZnkgdGhlIHZvaWNlIHdoaWNoIHRoZSBGZXN0aXZhbExpdGUgdGV4dCB0byBzcGVlY2ggZW5naW5lIGlzIHRvIHVzZS4KKyAgICBUaGUgZGVmYXVsdCB2b2ljZSBpcyA8dHQvY211X3VzX2thbDE2Ly4KKyAgPHRhZz48dHQvLS13aXRoLW1pa3JvcHVoZT0vPGVtL2RpcmVjdG9yeS88bGFiZWwgaWQ9ImJ1aWxkLW1pa3JvcHVoZSI+PC90YWc+CisgICAgU3BlY2lmeSB0aGUgaW5zdGFsbGVkIGxvY2F0aW9uIG9mIHRoZSBNaWtyb3B1aGUgdGV4dC10by1zcGVlY2ggcGFja2FnZSwKKyAgICBhbmQgYnVpbGQgdGhlIE1pa3JvcHVoZSBzcGVlY2ggc3ludGhlc2l6ZXIgZHJpdmVyCisgICAgKHNlZSA8cmVmIGlkPSJyZXN0cmljdGlvbnMtbWlrcm9wdWhlIiBuYW1lPSJCdWlsZCBSZXN0cmljdGlvbnMiPikuCisgICAgQW55IG9mIHRoZSBmb2xsb3dpbmcgd29yZHMgY2FuIGFsc28gYmUgdXNlZCBhcyB0aGUgb3BlcmFuZCBvZiB0aGlzIG9wdGlvbjoKKyAgICA8ZGVzY3JpcD4KKyAgICAgIDx0YWcvbm8vCisgICAgICAgIERvbid0IGJ1aWxkIHRoZSBkcml2ZXIuCisgICAgICAgIFRoaXMgaXMgZXF1aXZhbGVudCB0byBzcGVjaWZ5aW5nIDx0dC8tLXdpdGhvdXQtbWlrcm9wdWhlLy4KKyAgICAgIDx0YWcveWVzLworICAgICAgICBCdWlsZCB0aGUgZHJpdmVyIGlmIHRoZSBwYWNrYWdlIGNhbiBiZSBmb3VuZCBpbgorICAgICAgICA8dHQ+L3VzcjwvPiwKKyAgICAgICAgPHR0Pi91c3IvbG9jYWw8Lz4sCisgICAgICAgIDx0dD4vdXNyL2xvY2FsL01pa3JvcHVoZTwvPiwKKyAgICAgICAgPHR0Pi91c3IvbG9jYWwvbWlrcm9wdWhlPC8+LAorICAgICAgICA8dHQ+L29wdC9NaWtyb3B1aGU8Lz4sCisgICAgICAgIG9yIDx0dD4vb3B0L21pa3JvcHVoZTwvPi4KKyAgICAgICAgVGhpcyBpcyBlcXVpdmFsZW50IHRvIHNwZWNpZnlpbmcgPHR0Ly0td2l0aC1taWtyb3B1aGUvLgorICAgIDwvZGVzY3JpcD4KKyAgPHRhZz48dHQvLS13aXRoLXNwZWVjaGQ9LzxlbS9kaXJlY3RvcnkvPGxhYmVsIGlkPSJidWlsZC1zcGVlY2hkIj48L3RhZz4KKyAgICBTcGVjaWZ5IHRoZSBpbnN0YWxsZWQgbG9jYXRpb24gb2YgdGhlIHNwZWVjaC1kaXNwYXRjaGVyIHRleHQtdG8tc3BlZWNoIHBhY2thZ2UsCisgICAgYW5kIGJ1aWxkIHRoZSBzcGVlY2gtZGlzcGF0Y2hlciBzcGVlY2ggc3ludGhlc2l6ZXIgZHJpdmVyLgorICAgIEFueSBvZiB0aGUgZm9sbG93aW5nIHdvcmRzIGNhbiBhbHNvIGJlIHVzZWQgYXMgdGhlIG9wZXJhbmQgb2YgdGhpcyBvcHRpb246CisgICAgPGRlc2NyaXA+CisgICAgICA8dGFnL25vLworICAgICAgICBEb24ndCBidWlsZCB0aGUgZHJpdmVyLgorICAgICAgICBUaGlzIGlzIGVxdWl2YWxlbnQgdG8gc3BlY2lmeWluZyA8dHQvLS13aXRob3V0LXNwZWVjaGQvLgorICAgICAgPHRhZy95ZXMvCisgICAgICAgIEJ1aWxkIHRoZSBkcml2ZXIgaWYgdGhlIHBhY2thZ2UgY2FuIGJlIGZvdW5kIGluCisgICAgICAgIDx0dD4vdXNyPC8+LAorICAgICAgICA8dHQ+L3Vzci9sb2NhbDwvPiwKKyAgICAgICAgPHR0Pi91c3IvbG9jYWwvc3BlZWNoLWRpc3BhdGNoZXI8Lz4sCisgICAgICAgIDx0dD4vdXNyL2xvY2FsL3NwZWVjaGQ8Lz4sCisgICAgICAgIDx0dD4vb3B0L3NwZWVjaC1kaXNwYXRjaGVyPC8+LAorICAgICAgICBvciA8dHQ+L29wdC9zcGVlY2hkPC8+LgorICAgICAgICBUaGlzIGlzIGVxdWl2YWxlbnQgdG8gc3BlY2lmeWluZyA8dHQvLS13aXRoLXNwZWVjaGQvLgorICAgIDwvZGVzY3JpcD4KKyAgPHRhZz48dHQvLS13aXRoLXN3aWZ0PS88ZW0vZGlyZWN0b3J5LzxsYWJlbCBpZD0iYnVpbGQtc3dpZnQiPjwvdGFnPgorICAgIFNwZWNpZnkgdGhlIGluc3RhbGxlZCBsb2NhdGlvbiBvZiB0aGUgU3dpZnQgdGV4dC10by1zcGVlY2ggcGFja2FnZSwKKyAgICBhbmQgYnVpbGQgdGhlIFN3aWZ0IHNwZWVjaCBzeW50aGVzaXplciBkcml2ZXIuCisgICAgQW55IG9mIHRoZSBmb2xsb3dpbmcgd29yZHMgY2FuIGFsc28gYmUgdXNlZCBhcyB0aGUgb3BlcmFuZCBvZiB0aGlzIG9wdGlvbjoKKyAgICA8ZGVzY3JpcD4KKyAgICAgIDx0YWcvbm8vCisgICAgICAgIERvbid0IGJ1aWxkIHRoZSBkcml2ZXIuCisgICAgICAgIFRoaXMgaXMgZXF1aXZhbGVudCB0byBzcGVjaWZ5aW5nIDx0dC8tLXdpdGhvdXQtc3dpZnQvLgorICAgICAgPHRhZy95ZXMvCisgICAgICAgIEJ1aWxkIHRoZSBkcml2ZXIgaWYgdGhlIHBhY2thZ2UgY2FuIGJlIGZvdW5kIGluCisgICAgICAgIDx0dD4vdXNyPC8+LAorICAgICAgICA8dHQ+L3Vzci9sb2NhbDwvPiwKKyAgICAgICAgPHR0Pi91c3IvbG9jYWwvU3dpZnQ8Lz4sCisgICAgICAgIDx0dD4vdXNyL2xvY2FsL3N3aWZ0PC8+LAorICAgICAgICA8dHQ+L29wdC9Td2lmdDwvPiwKKyAgICAgICAgb3IgPHR0Pi9vcHQvc3dpZnQ8Lz4uCisgICAgICAgIFRoaXMgaXMgZXF1aXZhbGVudCB0byBzcGVjaWZ5aW5nIDx0dC8tLXdpdGgtc3dpZnQvLgorICAgIDwvZGVzY3JpcD4KKyAgPHRhZz48dHQvLS13aXRoLXRoZXRhPS88ZW0vZGlyZWN0b3J5LzxsYWJlbCBpZD0iYnVpbGQtdGhldGEiPjwvdGFnPgorICAgIFNwZWNpZnkgdGhlIGluc3RhbGxlZCBsb2NhdGlvbiBvZiB0aGUgVGhldGEgdGV4dC10by1zcGVlY2ggcGFja2FnZSwKKyAgICBhbmQgYnVpbGQgdGhlIFRoZXRhIHNwZWVjaCBzeW50aGVzaXplciBkcml2ZXIKKyAgICAoc2VlIDxyZWYgaWQ9InJlc3RyaWN0aW9ucy10aGV0YSIgbmFtZT0iQnVpbGQgUmVzdHJpY3Rpb25zIj4pLgorICAgIEFueSBvZiB0aGUgZm9sbG93aW5nIHdvcmRzIGNhbiBhbHNvIGJlIHVzZWQgYXMgdGhlIG9wZXJhbmQgb2YgdGhpcyBvcHRpb246CisgICAgPGRlc2NyaXA+CisgICAgICA8dGFnL25vLworICAgICAgICBEb24ndCBidWlsZCB0aGUgZHJpdmVyLgorICAgICAgICBUaGlzIGlzIGVxdWl2YWxlbnQgdG8gc3BlY2lmeWluZyA8dHQvLS13aXRob3V0LXRoZXRhLy4KKyAgICAgIDx0YWcveWVzLworICAgICAgICBCdWlsZCB0aGUgZHJpdmVyIGlmIHRoZSBwYWNrYWdlIGNhbiBiZSBmb3VuZCBpbgorICAgICAgICA8dHQ+L3VzcjwvPiwKKyAgICAgICAgPHR0Pi91c3IvbG9jYWw8Lz4sCisgICAgICAgIDx0dD4vdXNyL2xvY2FsL1RoZXRhPC8+LAorICAgICAgICA8dHQ+L3Vzci9sb2NhbC90aGV0YTwvPiwKKyAgICAgICAgPHR0Pi9vcHQvVGhldGE8Lz4sCisgICAgICAgIG9yIDx0dD4vb3B0L3RoZXRhPC8+LgorICAgICAgICBUaGlzIGlzIGVxdWl2YWxlbnQgdG8gc3BlY2lmeWluZyA8dHQvLS13aXRoLXRoZXRhLy4KKyAgICA8L2Rlc2NyaXA+CisgIDx0YWc+PHR0Ly0td2l0aC1zY3JlZW4tZHJpdmVyPS88ZW0vZHJpdmVyLzxsYWJlbCBpZD0iYnVpbGQtc2NyZWVuLWRyaXZlciI+PC90YWc+CisgICAgU3BlY2lmeSB0aGUgc2NyZWVuIGRyaXZlcnMKKyAgICB3aGljaCBhcmUgdG8gYmUgbGlua2VkIGludG8gdGhlIEJSTFRUWSBiaW5hcnkuCisgICAgVGhvc2UgZHJpdmVycyB3aGljaCBhcmVuJ3QgbGlzdGVkIHZpYSB0aGlzIG9wdGlvbgorICAgIGFyZSBidWlsdCBhcyBkeW5hbWljYWxseSBsb2FkYWJsZSBzaGFyZWQgb2JqZWN0cworICAgIGFuZCBjYW4gc3RpbGwgYmUgc2VsZWN0ZWQgYXQgcnVuLXRpbWUuCisgICAgRWFjaCBkcml2ZXIgbXVzdCBiZSBpZGVudGlmaWVkCisgICAgZWl0aGVyIGJ5IGl0cyB0d28tbGV0dGVyIGRyaXZlciBpZGVudGlmaWNhdGlvbiBjb2RlCisgICAgKHNlZSBzZWN0aW9uIDxyZWYgaWQ9InNjcmVlbiIgbmFtZT0iU3VwcG9ydGVkIFNjcmVlbiBEcml2ZXJzIj4pCisgICAgb3IgYnkgaXRzIHByb3BlciBuYW1lIChmdWxsIG9yIGFiYnJldmlhdGVkKS4KKyAgICBUaGUgZHJpdmVyIGlkZW50aWZpZXJzIG11c3QgYmUKKyAgICBzZXBhcmF0ZWQgZnJvbSBvbmUgYW5vdGhlciBieSBhIHNpbmdsZSBjb21tYS4KKyAgICBJZiBhIGRyaXZlciBpZGVudGlmaWVyIGlzIHByZWZpeGVkIGJ5IGEgbWludXMgc2lnbiAoPHR0Ly0vKSwKKyAgICB0aGVuIHRoYXQgZHJpdmVyIGlzIGV4Y2x1ZGVkIGZyb20gdGhlIGJ1aWxkLgorICAgIEFueSBvZiB0aGUgZm9sbG93aW5nIHdvcmRzIGNhbiBhbHNvIGJlIHVzZWQgYXMgdGhlIG9wZXJhbmQgb2YgdGhpcyBvcHRpb246CisgICAgPGRlc2NyaXA+CisgICAgICA8dGFnL2FsbC8KKyAgICAgICAgTGluayBhbGwgb2YgdGhlIGRyaXZlcnMgaW50byB0aGUgYmluYXJ5LgorICAgICAgICBEb24ndCBidWlsZCBhbnkgb2YgdGhlbSBhcyBkeW5hbWljYWxseSBsb2FkYWJsZSBzaGFyZWQgb2JqZWN0cy4KKyAgICAgICAgVGhpcyB3b3JkIG1heSBhbHNvIGJlIHNwZWNpZmllZCBhcyB0aGUgZmluYWwgZWxlbWVudCBvZiBhIGRyaXZlciBsaXN0LgorICAgICAgICBUaGlzIGlzIGhvdyB0byBzcGVjaWZ5IHRoZSBkZWZhdWx0IGRyaXZlciB3aGVuIGFsbCB0aGUgZHJpdmVycyBhcmUgdG8gYmUgbGlua2VkIGluLgorICAgICAgPHRhZy8tYWxsLworICAgICAgICBPbmx5IGJ1aWxkIHRob3NlIGRyaXZlcnMgd2hpY2ggaGF2ZSBiZWVuIGV4cGxpY2l0bHkgaW5jbHVkZWQgdmlhIHRoaXMgb3B0aW9uLgorICAgICAgPHRhZy9uby8KKyAgICAgICAgRG9uJ3QgYnVpbGQgYW55IGRyaXZlcnMgYXQgYWxsLgorICAgICAgICBUaGlzIGlzIGVxdWl2YWxlbnQgdG8gc3BlY2lmeWluZyA8dHQvLS13aXRob3V0LXNjcmVlbi1kcml2ZXIvLgorICAgICAgPHRhZy95ZXMvCisgICAgICAgIEJ1aWxkIGFsbCBvZiB0aGUgZHJpdmVycyBhcyBkeW5hbWljYWxseSBsb2FkYWJsZSBzaGFyZWQgb2JqZWN0cy4KKyAgICAgICAgRG9uJ3QgbGluayBhbnkgb2YgdGhlbSBpbnRvIHRoZSBiaW5hcnkuCisgICAgICAgIFRoaXMgaXMgZXF1aXZhbGVudCB0byBzcGVjaWZ5aW5nIDx0dC8tLXdpdGgtc2NyZWVuLWRyaXZlci8uCisgICAgPC9kZXNjcmlwPgorICAgIFRoZSBmaXJzdCBub24tZXhjbHVkZWQgZHJpdmVyIGJlY29tZXMgdGhlIGRlZmF1bHQgZHJpdmVyLgorICAgIElmIHRoaXMgb3B0aW9uIGlzbid0IHNwZWNpZmllZCwKKyAgICBvciBpZiBubyBkcml2ZXIgaXMgc3BlY2lmaWNhbGx5IGluY2x1ZGVkLAorICAgIHRoZW4gYW4gb3BlcmF0aW5nIHN5c3RlbSBhcHByb3ByaWF0ZSBkZWZhdWx0IGlzIHNlbGVjdGVkLgorICAgIElmIGEgbmF0aXZlIGRyaXZlciBmb3IgdGhlIGN1cnJlbnQgb3BlcmF0aW5nIHN5c3RlbSBpcyBhdmFpbGFibGUsCisgICAgdGhlbiB0aGF0IGRyaXZlciBpcyBzZWxlY3RlZDsKKyAgICBpZiBub3QsIHRoZW4gPHR0L3NjLyBpcyBzZWxlY3RlZC4KKyAgICBTZWUgdGhlIDxyZWYgaWQ9ImNvbmZpZ3VyZS1zY3JlZW4tZHJpdmVyIiBuYW1lPSJzY3JlZW4tZHJpdmVyIj4gY29uZmlndXJhdGlvbiBmaWxlIGRpcmVjdGl2ZQorICAgIGFuZCB0aGUgPHJlZiBpZD0ib3B0aW9ucy1zY3JlZW4tZHJpdmVyIiBuYW1lPSIteCI+IGNvbW1hbmQgbGluZSBvcHRpb24KKyAgICBmb3IgcnVuLXRpbWUgc2VsZWN0aW9uLgorICA8dGFnPjx0dC8tLXdpdGgtc2NyZWVuLXBhcmFtZXRlcnM9L1s8ZW0vZHJpdmVyLzx0dC86L108ZW0vbmFtZS88dHQvPS88ZW0vdmFsdWUvPHR0LywvLi4uPGxhYmVsIGlkPSJidWlsZC1zY3JlZW4tcGFyYW1ldGVycyI+PC90YWc+CisgICAgU3BlY2lmeSB0aGUgZGVmYXVsdCBwYXJhbWV0ZXIgc2V0dGluZ3MgZm9yIHRoZSBzY3JlZW4gZHJpdmVycy4KKyAgICBJZiB0aGUgc2FtZSBwYXJhbWV0ZXIgaXMgc3BlY2lmaWVkIG1vcmUgdGhhbiBvbmNlLAorICAgIHRoZW4gaXRzIHJpZ2h0bW9zdCBhc3NpZ25tZW50IGlzIHVzZWQuCisgICAgSWYgYSBwYXJhbWV0ZXIgbmFtZSBpcyBxdWFsaWZpZWQgYnkgYSBkcml2ZXIKKyAgICAoc2VlIHNlY3Rpb24gPHJlZiBpZD0ic2NyZWVuIiBuYW1lPSJTdXBwb3J0ZWQgU2NyZWVuIERyaXZlcnMiPikKKyAgICB0aGVuIHRoYXQgc2V0dGluZyBvbmx5IGFwcGxpZXMgdG8gdGhhdCBkcml2ZXI7CisgICAgaWYgaXQgaXNuJ3QgdGhlbiBpdCBhcHBsaWVzIHRvIGFsbCBkcml2ZXJzLgorICAgIEZvciBhIGRlc2NyaXB0aW9uIG9mIHRoZSBwYXJhbWV0ZXJzIGFjY2VwdGVkIGJ5IGEgc3BlY2lmaWMgZHJpdmVyLAorICAgIHBsZWFzZSBzZWUgdGhlIGRvY3VtZW50YXRpb24gZm9yIHRoYXQgZHJpdmVyLgorICAgIFNlZSB0aGUgPHJlZiBpZD0iY29uZmlndXJlLXNjcmVlbi1wYXJhbWV0ZXJzIiBuYW1lPSJzY3JlZW4tcGFyYW1ldGVycyI+IGNvbmZpZ3VyYXRpb24gZmlsZSBkaXJlY3RpdmUKKyAgICBhbmQgdGhlIDxyZWYgaWQ9Im9wdGlvbnMtc2NyZWVuLXBhcmFtZXRlcnMiIG5hbWU9Ii1YIj4gY29tbWFuZCBsaW5lIG9wdGlvbgorICAgIGZvciBydW4tdGltZSBzZWxlY3Rpb24uCisgIDx0YWc+PHR0Ly0td2l0aC11c2ItcGFja2FnZT0vPGVtL3BhY2thZ2UvPHR0LywvLi4uPGxhYmVsIGlkPSJidWlsZC11c2ItcGFja2FnZSI+PC90YWc+CisgICAgU3BlY2lmeSB0aGUgcGFja2FnZSB3aGljaCBpcyB0byBiZSB1c2VkIGZvciBVU0IgSS9PLgorICAgIFRoZSBwYWNrYWdlIG5hbWVzIG11c3QgYmUgc2VwYXJhdGVkIGZyb20gb25lIGFub3RoZXIgYnkgYSBzaW5nbGUgY29tbWEsCisgICAgYW5kIGFyZSBwcm9jZXNzZWQgZnJvbSBsZWZ0IHRvIHJpZ2h0LgorICAgIFRoZSBmaXJzdCBvbmUgd2hpY2ggaXMgaW5zdGFsbGVkIG9uIHRoZSBzeXN0ZW0gaXMgc2VsZWN0ZWQuCisgICAgVGhlIGZvbGxvd2luZyBwYWNrYWdlcyBhcmUgc3VwcG9ydGVkOgorICAgIDxlbnVtPgorICAgICAgPGl0ZW0+bGlidXNiCisgICAgICA8aXRlbT5saWJ1c2ItMS4wCisgICAgPC9lbnVtPgorICAgIEFueSBvZiB0aGUgZm9sbG93aW5nIHdvcmRzIGNhbiBhbHNvIGJlIHVzZWQgYXMgdGhlIG9wZXJhbmQgb2YgdGhpcyBvcHRpb246CisgICAgPGRlc2NyaXA+CisgICAgICA8dGFnL25vLworICAgICAgICBEb24ndCBzdXBwb3J0IFVTQiBJL08uCisgICAgICAgIFRoaXMgaXMgZXF1aXZhbGVudCB0byBzcGVjaWZ5aW5nIDx0dC8tLXdpdGhvdXQtdXNiLXBhY2thZ2UvLgorICAgICAgPHRhZy95ZXMvCisgICAgICAgIFVzZSBuYXRpdmUgc3VwcG9ydCBmb3IgVVNCIEkvTy4KKyAgICAgICAgSWYgbmF0aXZlIHN1cHBvcnQgaXNuJ3QgYXZhaWxhYmxlIGZvciB0aGUgY3VycmVudCBwbGF0Zm9ybQorICAgICAgICB0aGVuIHVzZSB0aGUgZmlyc3QgYXZhaWxhYmxlIHN1cHBvcnRlZCBwYWNrYWdlCisgICAgICAgIChhcyBwZXIgdGhlIG9yZGVyIHNwZWNpZmllZCBhYm92ZSkuCisgICAgICAgIFRoaXMgaXMgZXF1aXZhbGVudCB0byBzcGVjaWZ5aW5nIDx0dC8tLXdpdGgtdXNiLXBhY2thZ2UvLgorICAgIDwvZGVzY3JpcD4KKyAgPHRhZz48dHQvLS13aXRoLWJsdWV0b290aC1wYWNrYWdlPS88ZW0vcGFja2FnZS88dHQvLC8uLi48bGFiZWwgaWQ9ImJ1aWxkLWJsdWV0b290aC1wYWNrYWdlIj48L3RhZz4KKyAgICBTcGVjaWZ5IHRoZSBwYWNrYWdlIHdoaWNoIGlzIHRvIGJlIHVzZWQgZm9yIEJsdWV0b290aCBJL08uCisgICAgVGhlIHBhY2thZ2UgbmFtZXMgbXVzdCBiZSBzZXBhcmF0ZWQgZnJvbSBvbmUgYW5vdGhlciBieSBhIHNpbmdsZSBjb21tYSwKKyAgICBhbmQgYXJlIHByb2Nlc3NlZCBmcm9tIGxlZnQgdG8gcmlnaHQuCisgICAgVGhlIGZpcnN0IG9uZSB3aGljaCBpcyBpbnN0YWxsZWQgb24gdGhlIHN5c3RlbSBpcyBzZWxlY3RlZC4KKyAgICBUaGUgZm9sbG93aW5nIHBhY2thZ2VzIGFyZSBzdXBwb3J0ZWQ6CisgICAgPGVudW0+CisgICAgICA8aXRlbT4obm8gcGFja2FnZXMgYXJlIGN1cnJlbnRseSBzdXBwb3J0ZWQpCisgICAgPC9lbnVtPgorICAgIEFueSBvZiB0aGUgZm9sbG93aW5nIHdvcmRzIGNhbiBhbHNvIGJlIHVzZWQgYXMgdGhlIG9wZXJhbmQgb2YgdGhpcyBvcHRpb246CisgICAgPGRlc2NyaXA+CisgICAgICA8dGFnL25vLworICAgICAgICBEb24ndCBzdXBwb3J0IEJsdWV0b290aCBJL08uCisgICAgICAgIFRoaXMgaXMgZXF1aXZhbGVudCB0byBzcGVjaWZ5aW5nIDx0dC8tLXdpdGhvdXQtYmx1ZXRvb3RoLXBhY2thZ2UvLgorICAgICAgPHRhZy95ZXMvCisgICAgICAgIFVzZSBuYXRpdmUgc3VwcG9ydCBmb3IgQmx1ZXRvb3RoIEkvTy4KKyAgICAgICAgSWYgbmF0aXZlIHN1cHBvcnQgaXNuJ3QgYXZhaWxhYmxlIGZvciB0aGUgY3VycmVudCBwbGF0Zm9ybQorICAgICAgICB0aGVuIHVzZSB0aGUgZmlyc3QgYXZhaWxhYmxlIHN1cHBvcnRlZCBwYWNrYWdlCisgICAgICAgIChhcyBwZXIgdGhlIG9yZGVyIHNwZWNpZmllZCBhYm92ZSkuCisgICAgICAgIFRoaXMgaXMgZXF1aXZhbGVudCB0byBzcGVjaWZ5aW5nIDx0dC8tLXdpdGgtYmx1ZXRvb3RoLXBhY2thZ2UvLgorICAgIDwvZGVzY3JpcD4KKzwvZGVzY3JpcD4KKworPHNlY3QzPkRpcmVjdG9yeSBTcGVjaWZpY2F0aW9uPGxhYmVsIGlkPSJidWlsZC1kaXJlY3RvcmVpcyI+PHA+Cis8ZGVzY3JpcD4KKyAgPHRhZz48dHQvLS13aXRoLWV4ZWN1dGUtcm9vdD0vPGVtL2RpcmVjdG9yeS88bGFiZWwgaWQ9ImJ1aWxkLWV4ZWN1dGUtcm9vdCI+PC90YWc+CisgICAgU3BlY2lmeSB0aGUgZGlyZWN0b3J5IGF0IHdoaWNoIHRoZQorICAgIDxyZWYgaWQ9ImhpZXJhcmNoeSIgbmFtZT0iaW5zdGFsbGVkIGZpbGUgaGllcmFyY2h5Ij4KKyAgICBpcyB0byBiZSByb290ZWQgYXQgcnVuLXRpbWUuCisgICAgVGhlIGFic29sdXRlIHBhdGggc2hvdWxkIGJlIHN1cHBsaWVkLgorICAgIElmIHRoaXMgb3B0aW9uIGlzbid0IHNwZWNpZmllZCwKKyAgICB0aGVuIHRoZSBzeXN0ZW0ncyByb290IGRpcmVjdG9yeSBpcyBhc3N1bWVkLgorICAgIFVzZSB0aGlzIG9wdGlvbiBpZiB5b3UgbmVlZCB0byBpbnN0YWxsCisgICAgQlJMVFRZJ3MgcnVuLXRpbWUgZmlsZXMgaW4gYSBub24tc3RhbmRhcmQgbG9jYXRpb24uCisgICAgWW91IG5lZWQgdG8gdXNlIHRoaXMgZmVhdHVyZSwgZm9yIGV4YW1wbGUsIGlmIHlvdSdkIGxpa2UgdG8gaGF2ZQorICAgIG1vcmUgdGhhbiBvbmUgdmVyc2lvbiBvZiBCUkxUVFkgaW5zdGFsbGVkIGF0IHRoZSBzYW1lIHRpbWUKKyAgICAoc2VlIHNlY3Rpb24gPHJlZiBpZD0ibXVsdGlwbGUiIG5hbWU9Ikluc3RhbGxpbmcgTXVsdGlwbGUgVmVyc2lvbnMiPgorICAgIGZvciBhbiBleGFtcGxlIG9mIGhvdyB0byBkbyB0aGlzKS4KKyAgPHRhZz48dHQvLS13aXRoLWluc3RhbGwtcm9vdD0vPGVtL2RpcmVjdG9yeS88bGFiZWwgaWQ9ImJ1aWxkLWluc3RhbGwtcm9vdCI+PC90YWc+CisgICAgU3BlY2lmeSB0aGUgZGlyZWN0b3J5IGJlbmVhdGggd2hpY2ggdGhlCisgICAgPHJlZiBpZD0iaGllcmFyY2h5IiBuYW1lPSJpbnN0YWxsZWQgZmlsZSBoaWVyYXJjaHkiPgorICAgIGlzIHRvIGJlIGluc3RhbGxlZC4KKyAgICBUaGUgYWJzb2x1dGUgcGF0aCBzaG91bGQgYmUgc3VwcGxpZWQuCisgICAgSWYgdGhpcyBvcHRpb24gaXNuJ3Qgc3BlY2lmaWVkLAorICAgIHRoZW4gdGhlIHJ1bi10aW1lIHBhY2thZ2Ugcm9vdAorICAgIChzZWUgdGhlIDxyZWYgaWQ9ImJ1aWxkLWV4ZWN1dGUtcm9vdCIgbmFtZT0iLS13aXRoLWV4ZWN1dGUtcm9vdCI+IGJ1aWxkIG9wdGlvbikKKyAgICBpcyBhc3N1bWVkLgorICAgIFRoaXMgZGlyZWN0b3J5IGlzIG9ubHkgdXNlZCBieQorICAgIDxyZWYgaWQ9Im1ha2UtaW5zdGFsbCIgbmFtZT0ibWFrZSBpbnN0YWxsIj4KKyAgICBhbmQgPHJlZiBpZD0ibWFrZS11bmluc3RhbGwiIG5hbWU9Im1ha2UgdW5pbnN0YWxsIj4uCisgICAgVXNlIHRoaXMgb3B0aW9uIGlmIHlvdSBuZWVkIHRvIGluc3RhbGwgQlJMVFRZIGluIGEgZGlmZmVyZW50IGxvY2F0aW9uCisgICAgdGhhbiB0aGUgb25lIGZyb20gd2hpY2ggaXQnbGwgdWx0aW1hdGVseSBiZSBleGVjdXRlZC4KKyAgICBZb3UgbmVlZCB0byB1c2UgdGhpcyBmZWF0dXJlLCBmb3IgZXhhbXBsZSwKKyAgICBpZiB5b3UncmUgYnVpbGRpbmcgQlJMVFRZIG9uIG9uZSBzeXN0ZW0gZm9yIHVzZSBvbiBhbm90aGVyLgorICA8dGFnPjx0dC8tLXByZWZpeD0vPGVtL2RpcmVjdG9yeS88bGFiZWwgaWQ9ImJ1aWxkLXBvcnRhYmxlLXJvb3QiPjwvdGFnPgorICAgIFNwZWNpZnkgdGhlIGRpcmVjdG9yeSB3aXRoaW4gdGhlCisgICAgPHJlZiBpZD0iaGllcmFyY2h5IiBuYW1lPSJpbnN0YWxsZWQgZmlsZSBoaWVyYXJjaHkiPgorICAgIHdoZXJlIHRoZSBkZWZhdWx0IGRpcmVjdG9yaWVzIGZvciB0aGUgYXJjaGl0ZWN0dXJlLWluZGVwZW5kZW50IGZpbGVzCisgICAgYXJlIHRvIGJlIHJvb3RlZC4KKyAgICBUaGVzZSBkaXJlY3RvcmllcyBpbmNsdWRlOgorICAgIDxpdGVtaXplPgorICAgICAgPGl0ZW0+dGhlIDxyZWYgaWQ9ImJ1aWxkLXdyaXRhYmxlLWRpcmVjdG9yeSIgbmFtZT0id3JpdGFibGUgZGlyZWN0b3J5Ij4KKyAgICAgIDxpdGVtPnRoZSA8cmVmIGlkPSJidWlsZC1kYXRhLWRpcmVjdG9yeSIgbmFtZT0iZGF0YSBkaXJlY3RvcnkiPgorICAgICAgPGl0ZW0+dGhlIDxyZWYgaWQ9ImJ1aWxkLWNvbmZpZ3VyYXRpb24tZGlyZWN0b3J5IiBuYW1lPSJjb25maWd1cmF0aW9uIGRpcmVjdG9yeSI+CisgICAgICA8aXRlbT50aGUgPHJlZiBpZD0iYnVpbGQtbWFucGFnZS1kaXJlY3RvcnkiIG5hbWU9Im1hbnBhZ2UgZGlyZWN0b3J5Ij4KKyAgICAgIDxpdGVtPnRoZSA8cmVmIGlkPSJidWlsZC1pbmNsdWRlLWRpcmVjdG9yeSIgbmFtZT0iaW5jbHVkZSBkaXJlY3RvcnkiPgorICAgIDwvaXRlbWl6ZT4KKyAgICBUaGUgYWJzb2x1dGUgcGF0aCBzaG91bGQgYmUgc3VwcGxpZWQuCisgICAgSWYgdGhpcyBvcHRpb24gaXNuJ3Qgc3BlY2lmaWVkLAorICAgIHRoZW4gdGhlIHN5c3RlbSdzIHJvb3QgZGlyZWN0b3J5IGlzIGFzc3VtZWQuCisgICAgVGhpcyBkaXJlY3RvcnkgaXMgcm9vdGVkIGF0IHRoZSBkaXJlY3Rvcnkgc3BlY2lmaWVkIGJ5IHRoZQorICAgIDxyZWYgaWQ9ImJ1aWxkLWV4ZWN1dGUtcm9vdCIgbmFtZT0iLS13aXRoLWV4ZWN1dGUtcm9vdCI+IGJ1aWxkIG9wdGlvbi4KKyAgPHRhZz48dHQvLS1leGVjLXByZWZpeD0vPGVtL2RpcmVjdG9yeS88bGFiZWwgaWQ9ImJ1aWxkLWFyY2hpdGVjdHVyZS1yb290Ij48L3RhZz4KKyAgICBTcGVjaWZ5IHRoZSBkaXJlY3Rvcnkgd2l0aGluIHRoZQorICAgIDxyZWYgaWQ9ImhpZXJhcmNoeSIgbmFtZT0iaW5zdGFsbGVkIGZpbGUgaGllcmFyY2h5Ij4KKyAgICB3aGVyZSB0aGUgZGVmYXVsdCBkaXJlY3RvcmllcyBmb3IgdGhlIGFyY2hpdGVjdHVyZS1kZXBlbmRlbnQgZmlsZXMKKyAgICBhcmUgdG8gYmUgcm9vdGVkLgorICAgIFRoZXNlIGRpcmVjdG9yaWVzIGluY2x1ZGU6CisgICAgPGl0ZW1pemU+CisgICAgICA8aXRlbT50aGUgPHJlZiBpZD0iYnVpbGQtcHJvZ3JhbS1kaXJlY3RvcnkiIG5hbWU9InByb2dyYW0gZGlyZWN0b3J5Ij4KKyAgICAgIDxpdGVtPnRoZSA8cmVmIGlkPSJidWlsZC1saWJyYXJ5LWRpcmVjdG9yeSIgbmFtZT0ibGlicmFyeSBkaXJlY3RvcnkiPgorICAgICAgPGl0ZW0+dGhlIDxyZWYgaWQ9ImJ1aWxkLWFwaS1kaXJlY3RvcnkiIG5hbWU9IkFQSSBkaXJlY3RvcnkiPgorICAgIDwvaXRlbWl6ZT4KKyAgICBUaGUgYWJzb2x1dGUgcGF0aCBzaG91bGQgYmUgc3VwcGxpZWQuCisgICAgSWYgdGhpcyBvcHRpb24gaXNuJ3Qgc3BlY2lmaWVkLAorICAgIHRoZW4gdGhlIGRpcmVjdG9yeSBzcGVjaWZpZWQgdmlhIHRoZQorICAgIDxyZWYgaWQ9ImJ1aWxkLXBvcnRhYmxlLXJvb3QiIG5hbWU9Ii0tcHJlZml4Ij4KKyAgICBidWlsZCBvcHRpb24gaXMgYXNzdW1lZC4KKyAgICBUaGlzIGRpcmVjdG9yeSBpcyByb290ZWQgYXQgdGhlIGRpcmVjdG9yeSBzcGVjaWZpZWQgYnkgdGhlCisgICAgPHJlZiBpZD0iYnVpbGQtZXhlY3V0ZS1yb290IiBuYW1lPSItLXdpdGgtZXhlY3V0ZS1yb290Ij4gYnVpbGQgb3B0aW9uLgorICA8dGFnPjx0dC8tLWxpYmRpcj0vPGVtL2RpcmVjdG9yeS88bGFiZWwgaWQ9ImJ1aWxkLWFwaS1kaXJlY3RvcnkiPjwvdGFnPgorICAgIFNwZWNpZnkgdGhlIGRpcmVjdG9yeSB3aXRoaW4gdGhlCisgICAgPHJlZiBpZD0iaGllcmFyY2h5IiBuYW1lPSJpbnN0YWxsZWQgZmlsZSBoaWVyYXJjaHkiPgorICAgIHdoZXJlIHRoZSBzdGF0aWMgYXJjaGl2ZSBhbmQgdGhlIGR5bmFtaWNhbGx5IGxvYWRhYmxlIG9iamVjdAorICAgIGZvciB0aGUgQXBwbGljYXRpb24gUHJvZ3JhbW1pbmcgSW50ZXJmYWNlIGFyZSB0byBiZSBpbnN0YWxsZWQuCisgICAgVGhlIGFic29sdXRlIHBhdGggc2hvdWxkIGJlIHN1cHBsaWVkLgorICAgIElmIHRoaXMgb3B0aW9uIGlzbid0IHNwZWNpZmllZCwKKyAgICB0aGVuIHRoZSBkaXJlY3RvcnkKKyAgICBzcGVjaWZpZWQgdmlhIHRoZSBzdGFuZGFyZCBjb25maWd1cmUgb3B0aW9uIDx0dC8tLWxpYmRpci8KKyAgICAod2hpY2ggZGVmYXVsdHMgdG8gPHR0Pi9saWI8Lz4gcm9vdGVkIGF0IHRoZSBkaXJlY3Rvcnkgc3BlY2lmaWVkIGJ5IHRoZQorICAgIDxyZWYgaWQ9ImJ1aWxkLWFyY2hpdGVjdHVyZS1yb290IiBuYW1lPSItLWV4ZWMtcHJlZml4Ij4gYnVpbGQgb3B0aW9uKQorICAgIGlzIGFzc3VtZWQuCisgICAgVGhlIGRpcmVjdG9yeSBpcyBjcmVhdGVkIGlmIGl0IGRvZXNuJ3QgZXhpc3QuCisgIDx0YWc+PHR0Ly0tc3lzY29uZmRpcj0vPGVtL2RpcmVjdG9yeS88bGFiZWwgaWQ9ImJ1aWxkLWNvbmZpZ3VyYXRpb24tZGlyZWN0b3J5Ij48L3RhZz4KKyAgICBTcGVjaWZ5IHRoZSBkaXJlY3Rvcnkgd2l0aGluIHRoZQorICAgIDxyZWYgaWQ9ImhpZXJhcmNoeSIgbmFtZT0iaW5zdGFsbGVkIGZpbGUgaGllcmFyY2h5Ij4KKyAgICB3aGVyZSB0aGUgY29uZmlndXJhdGlvbiBmaWxlcyBhcmUgdG8gYmUgaW5zdGFsbGVkLgorICAgIFRoZSBhYnNvbHV0ZSBwYXRoIHNob3VsZCBiZSBzdXBwbGllZC4KKyAgICBJZiB0aGlzIG9wdGlvbiBpc24ndCBzcGVjaWZpZWQsCisgICAgdGhlbiB0aGUgZGlyZWN0b3J5CisgICAgc3BlY2lmaWVkIHZpYSB0aGUgc3RhbmRhcmQgY29uZmlndXJlIG9wdGlvbiA8dHQvLS1zeXNjb25mZGlyLworICAgICh3aGljaCBkZWZhdWx0cyB0byA8dHQ+L2V0YzwvPiByb290ZWQgYXQgdGhlIGRpcmVjdG9yeSBzcGVjaWZpZWQgYnkgdGhlCisgICAgPHJlZiBpZD0iYnVpbGQtcG9ydGFibGUtcm9vdCIgbmFtZT0iLS1wcmVmaXgiPiBidWlsZCBvcHRpb24pCisgICAgaXMgYXNzdW1lZC4KKyAgICBUaGUgZGlyZWN0b3J5IGlzIGNyZWF0ZWQgaWYgaXQgZG9lc24ndCBleGlzdC4KKyAgPHRhZz48dHQvLS13aXRoLXByb2dyYW0tZGlyZWN0b3J5PS88ZW0vZGlyZWN0b3J5LzxsYWJlbCBpZD0iYnVpbGQtcHJvZ3JhbS1kaXJlY3RvcnkiPjwvdGFnPgorICAgIFNwZWNpZnkgdGhlIGRpcmVjdG9yeSB3aXRoaW4gdGhlCisgICAgPHJlZiBpZD0iaGllcmFyY2h5IiBuYW1lPSJpbnN0YWxsZWQgZmlsZSBoaWVyYXJjaHkiPgorICAgIHdoZXJlIHRoZSBydW5uYWJsZSBwcm9ncmFtcyAoYmluYXJpZXMsIGV4ZWN1dGFibGVzKSBhcmUgdG8gYmUgaW5zdGFsbGVkLgorICAgIFRoZSBhYnNvbHV0ZSBwYXRoIHNob3VsZCBiZSBzdXBwbGllZC4KKyAgICBJZiB0aGlzIG9wdGlvbiBpc24ndCBzcGVjaWZpZWQsCisgICAgdGhlbiB0aGUgZGlyZWN0b3J5CisgICAgc3BlY2lmaWVkIHZpYSB0aGUgc3RhbmRhcmQgY29uZmlndXJlIG9wdGlvbiA8dHQvLS1iaW5kaXIvCisgICAgKHdoaWNoIGRlZmF1bHRzIHRvIDx0dD4vYmluPC8+IHJvb3RlZCBhdCB0aGUgZGlyZWN0b3J5IHNwZWNpZmllZCBieSB0aGUKKyAgICA8cmVmIGlkPSJidWlsZC1hcmNoaXRlY3R1cmUtcm9vdCIgbmFtZT0iLS1leGVjLXByZWZpeCI+IGJ1aWxkIG9wdGlvbikKKyAgICBpcyBhc3N1bWVkLgorICAgIFRoZSBkaXJlY3RvcnkgaXMgY3JlYXRlZCBpZiBpdCBkb2Vzbid0IGV4aXN0LgorICA8dGFnPjx0dC8tLXdpdGgtbGlicmFyeS1kaXJlY3Rvcnk9LzxlbS9kaXJlY3RvcnkvPGxhYmVsIGlkPSJidWlsZC1saWJyYXJ5LWRpcmVjdG9yeSI+PC90YWc+CisgICAgU3BlY2lmeSB0aGUgZGlyZWN0b3J5IHdpdGhpbiB0aGUKKyAgICA8cmVmIGlkPSJoaWVyYXJjaHkiIG5hbWU9Imluc3RhbGxlZCBmaWxlIGhpZXJhcmNoeSI+CisgICAgd2hlcmUgdGhlIGRyaXZlcnMgYW5kIG90aGVyIGFyY2hpdGVjdHVyZS1kZXBlbmRlbnQgZmlsZXMgYXJlIHRvIGJlIGluc3RhbGxlZC4KKyAgICBUaGUgYWJzb2x1dGUgcGF0aCBzaG91bGQgYmUgc3VwcGxpZWQuCisgICAgSWYgdGhpcyBvcHRpb24gaXNuJ3Qgc3BlY2lmaWVkLAorICAgIHRoZW4gdGhlIDx0dC9icmx0dHkvIHN1YmRpcmVjdG9yeSBvZiB0aGUgZGlyZWN0b3J5CisgICAgc3BlY2lmaWVkIHZpYSB0aGUgc3RhbmRhcmQgY29uZmlndXJlIG9wdGlvbiA8dHQvLS1saWJkaXIvCisgICAgKHdoaWNoIGRlZmF1bHRzIHRvIDx0dD4vbGliPC8+IHJvb3RlZCBhdCB0aGUgZGlyZWN0b3J5IHNwZWNpZmllZCBieSB0aGUKKyAgICA8cmVmIGlkPSJidWlsZC1hcmNoaXRlY3R1cmUtcm9vdCIgbmFtZT0iLS1leGVjLXByZWZpeCI+IGJ1aWxkIG9wdGlvbikKKyAgICBpcyBhc3N1bWVkLgorICAgIFRoZSBkaXJlY3RvcnkgaXMgY3JlYXRlZCBpZiBpdCBkb2Vzbid0IGV4aXN0LgorICA8dGFnPjx0dC8tLXdpdGgtd3JpdGFibGUtZGlyZWN0b3J5PS88ZW0vZGlyZWN0b3J5LzxsYWJlbCBpZD0iYnVpbGQtd3JpdGFibGUtZGlyZWN0b3J5Ij48L3RhZz4KKyAgICBTcGVjaWZ5IHRoZSBkaXJlY3Rvcnkgd2l0aGluIHRoZQorICAgIDxyZWYgaWQ9ImhpZXJhcmNoeSIgbmFtZT0iaW5zdGFsbGVkIGZpbGUgaGllcmFyY2h5Ij4KKyAgICB3aGljaCBtYXkgYmUgd3JpdHRlbiB0by4KKyAgICBUaGUgYWJzb2x1dGUgcGF0aCBzaG91bGQgYmUgc3VwcGxpZWQuCisgICAgQW55IG9mIHRoZSBmb2xsb3dpbmcgd29yZHMgY2FuIGFsc28gYmUgdXNlZCBhcyB0aGUgb3BlcmFuZCBvZiB0aGlzIG9wdGlvbjoKKyAgICA8ZGVzY3JpcD4KKyAgICAgIDx0YWcvbm8vCisgICAgICAgIERvbid0IGRlZmluZSBhIHdyaXRhYmxlIGRpcmVjdG9yeS4KKyAgICAgICAgVGhpcyBpcyBlcXVpdmFsZW50IHRvIHNwZWNpZnlpbmcgPHR0Ly0td2l0aG91dC13cml0YWJsZS1kaXJlY3RvcnkvLgorICAgICAgPHRhZy95ZXMvCisgICAgICAgIFVzZSB0aGUgZGVmYXVsdCBsb2NhdGlvbi4KKyAgICAgICAgVGhpcyBpcyBlcXVpdmFsZW50IHRvIHNwZWNpZnlpbmcgPHR0Ly0td2l0aC13cml0YWJsZS1kaXJlY3RvcnkvLgorICAgIDwvZGVzY3JpcD4KKyAgICBJZiB0aGlzIG9wdGlvbiBpc24ndCBzcGVjaWZpZWQsCisgICAgdGhlbiB0aGUgPHR0PnJ3PC8+IHN1YmRpcmVjdG9yeSBvZiB0aGUgZGlyZWN0b3J5IHNwZWNpZmllZCB2aWEgdGhlCisgICAgPHJlZiBpZD0iYnVpbGQtbGlicmFyeS1kaXJlY3RvcnkiIG5hbWU9Ii0td2l0aC1saWJyYXJ5LWRpcmVjdG9yeSI+IGJ1aWxkIG9wdGlvbgorICAgIGlzIGFzc3VtZWQuCisgICAgVGhlIGRpcmVjdG9yeSBpcyBjcmVhdGVkIGlmIGl0IGRvZXNuJ3QgZXhpc3QuCisgIDx0YWc+PHR0Ly0td2l0aC1kYXRhLWRpcmVjdG9yeT0vPGVtL2RpcmVjdG9yeS88bGFiZWwgaWQ9ImJ1aWxkLWRhdGEtZGlyZWN0b3J5Ij48L3RhZz4KKyAgICBTcGVjaWZ5IHRoZSBkaXJlY3Rvcnkgd2l0aGluIHRoZQorICAgIDxyZWYgaWQ9ImhpZXJhcmNoeSIgbmFtZT0iaW5zdGFsbGVkIGZpbGUgaGllcmFyY2h5Ij4KKyAgICB3aGVyZSB0aGUgdGFibGVzLCBoZWxwIHBhZ2VzLAorICAgIGFuZCBvdGhlciBhcmNoaXRlY3R1cmUtaW5kZXBlbmRlbnQgZmlsZXMgYXJlIHRvIGJlIGluc3RhbGxlZC4KKyAgICBUaGUgYWJzb2x1dGUgcGF0aCBzaG91bGQgYmUgc3VwcGxpZWQuCisgICAgSWYgdGhpcyBvcHRpb24gaXNuJ3Qgc3BlY2lmaWVkLAorICAgIHRoZW4gdGhlIDx0dC9icmx0dHkvIHN1YmRpcmVjdG9yeSBvZiB0aGUgZGlyZWN0b3J5CisgICAgc3BlY2lmaWVkIHZpYSB0aGUgc3RhbmRhcmQgY29uZmlndXJlIG9wdGlvbiA8dHQvLS1zeXNjb25mZGlyLworICAgICh3aGljaCBkZWZhdWx0cyB0byA8dHQ+L2V0YzwvPiByb290ZWQgYXQgdGhlIGRpcmVjdG9yeSBzcGVjaWZpZWQgYnkgdGhlCisgICAgPHJlZiBpZD0iYnVpbGQtcG9ydGFibGUtcm9vdCIgbmFtZT0iLS1wcmVmaXgiPiBidWlsZCBvcHRpb24pCisgICAgaXMgYXNzdW1lZC4KKyAgICBUaGUgZGlyZWN0b3J5IGlzIGNyZWF0ZWQgaWYgaXQgZG9lc24ndCBleGlzdC4KKyAgPHRhZz48dHQvLS13aXRoLW1hbnBhZ2UtZGlyZWN0b3J5PS88ZW0vZGlyZWN0b3J5LzxsYWJlbCBpZD0iYnVpbGQtbWFucGFnZS1kaXJlY3RvcnkiPjwvdGFnPgorICAgIFNwZWNpZnkgdGhlIGRpcmVjdG9yeSB3aXRoaW4gdGhlCisgICAgPHJlZiBpZD0iaGllcmFyY2h5IiBuYW1lPSJpbnN0YWxsZWQgZmlsZSBoaWVyYXJjaHkiPgorICAgIHdoZXJlIHRoZSBtYW4gcGFnZXMgYXJlIHRvIGJlIGluc3RhbGxlZC4KKyAgICBUaGUgYWJzb2x1dGUgcGF0aCBzaG91bGQgYmUgc3VwcGxpZWQuCisgICAgSWYgdGhpcyBvcHRpb24gaXNuJ3Qgc3BlY2lmaWVkLAorICAgIHRoZW4gdGhlIGRpcmVjdG9yeQorICAgIHNwZWNpZmllZCB2aWEgdGhlIHN0YW5kYXJkIGNvbmZpZ3VyZSBvcHRpb24gPHR0Ly0tbWFuZGlyLworICAgICh3aGljaCBkZWZhdWx0cyB0byA8dHQ+L21hbjwvPiByb290ZWQgYXQgdGhlIGRpcmVjdG9yeSBzcGVjaWZpZWQgYnkgdGhlCisgICAgPHJlZiBpZD0iYnVpbGQtcG9ydGFibGUtcm9vdCIgbmFtZT0iLS1wcmVmaXgiPiBidWlsZCBvcHRpb24pCisgICAgaXMgYXNzdW1lZC4KKyAgICBUaGUgZGlyZWN0b3J5IGlzIGNyZWF0ZWQgaWYgaXQgZG9lc24ndCBleGlzdC4KKyAgPHRhZz48dHQvLS13aXRoLWluY2x1ZGUtZGlyZWN0b3J5PS88ZW0vZGlyZWN0b3J5LzxsYWJlbCBpZD0iYnVpbGQtaW5jbHVkZS1kaXJlY3RvcnkiPjwvdGFnPgorICAgIFNwZWNpZnkgdGhlIGRpcmVjdG9yeSB3aXRoaW4gdGhlCisgICAgPHJlZiBpZD0iaGllcmFyY2h5IiBuYW1lPSJpbnN0YWxsZWQgZmlsZSBoaWVyYXJjaHkiPgorICAgIHdoZXJlIHRoZSBDIGhlYWRlciBmaWxlcyBmb3IgdGhlIEFwcGxpY2F0aW9uIFByb2dyYW1taW5nIEludGVyZmFjZQorICAgIGFyZSB0byBiZSBpbnN0YWxsZWQuCisgICAgVGhlIGFic29sdXRlIHBhdGggc2hvdWxkIGJlIHN1cHBsaWVkLgorICAgIElmIHRoaXMgb3B0aW9uIGlzbid0IHNwZWNpZmllZCwKKyAgICB0aGVuIHRoZSA8dHQvYnJsdHR5LyBzdWJkaXJlY3Rvcnkgb2YgdGhlIGRpcmVjdG9yeQorICAgIHNwZWNpZmllZCB2aWEgdGhlIHN0YW5kYXJkIGNvbmZpZ3VyZSBvcHRpb24gPHR0Ly0taW5jbHVkZWRpci8KKyAgICAod2hpY2ggZGVmYXVsdHMgdG8gPHR0Pi9pbmNsdWRlPC8+IHJvb3RlZCBhdCB0aGUgZGlyZWN0b3J5IHNwZWNpZmllZCBieSB0aGUKKyAgICA8cmVmIGlkPSJidWlsZC1wb3J0YWJsZS1yb290IiBuYW1lPSItLXByZWZpeCI+IGJ1aWxkIG9wdGlvbikKKyAgICBpcyBhc3N1bWVkLgorICAgIFRoZSBkaXJlY3RvcnkgaXMgY3JlYXRlZCBpZiBpdCBkb2Vzbid0IGV4aXN0LgorPC9kZXNjcmlwPgorCis8c2VjdDM+QnVpbGQgRmVhdHVyZXM8bGFiZWwgaWQ9ImJ1aWxkLWZlYXR1cmVzIj48cD4KK1RoZXNlIG9wdGlvbnMgYXJlIHByaW1hcmlseSB1c2VmdWwgd2hlbiBidWlsZGluZyBCUkxUVFkgZm9yIHVzZSBvbiBhIGJvb3QgZGlzay4KKzxkZXNjcmlwPgorICA8dGFnPjx0dC8tLWVuYWJsZS1zdGFuZGFsb25lLXByb2dyYW1zLzxsYWJlbCBpZD0iYnVpbGQtc3RhbmRhbG9uZS1wcm9ncmFtcyI+PC90YWc+CisgICAgQ3JlYXRlIHN0YXRpY2FsbHkgbGlua2VkLCByYXRoZXIgdGhhbiBkeW5hbWljYWxseSBsaW5rZWQsIHByb2dyYW1zLgorICAgIFRoaXMgb3B0aW9uIHJlbW92ZXMgYWxsIGRlcGVuZGVuY2llcyBvbiBzaGFyZWQgb2JqZWN0cyBhdCBydW4tdGltZS4KKyAgICBPbmx5IHRoZSBkZWZhdWx0IGRyaXZlcnMgKHNlZSB0aGUKKyAgICA8cmVmIGlkPSJidWlsZC1icmFpbGxlLWRyaXZlciIgbmFtZT0iLS13aXRoLWJyYWlsbGUtZHJpdmVyIj4sCisgICAgPHJlZiBpZD0iYnVpbGQtc3BlZWNoLWRyaXZlciIgbmFtZT0iLS13aXRoLXNwZWVjaC1kcml2ZXIiPiwKKyAgICBhbmQgPHJlZiBpZD0iYnVpbGQtc2NyZWVuLWRyaXZlciIgbmFtZT0iLS13aXRoLXNjcmVlbi1kcml2ZXIiPgorICAgIGJ1aWxkIG9wdGlvbnMpIGFyZSBjb21waWxlZC4KKyAgPHRhZz48dHQvLS1lbmFibGUtcmVsb2NhdGFibGUtaW5zdGFsbC88bGFiZWwgaWQ9ImJ1aWxkLXJlbG9jYXRhYmxlLWluc3RhbGwiPjwvdGFnPgorICAgIElmIHRoaXMgZmVhdHVyZSBpcyBlbmFibGVkIHRoZW4gYWxsIGludGVybmFsIHBhdGhzCisgICAgYXJlIHJlY2FsY3VsYXRlZCB0byBiZSByZWxhdGl2ZSB0byB0aGUgcHJvZ3JhbSBkaXJlY3RvcnkuCisgICAgSWYgaXQncyBkaXNhYmxlZCB0aGVuIGFsbCBpbnRlcm5hbCBwYXRocyBhcmUgYWJzb2x1dGUuCisgICAgVGhpcyBmZWF0dXJlIGFsbG93cyB0aGUgZW50aXJlIGluc3RhbGxlZCBmaWxlIGhpZXJhcmNoeQorICAgIHRvIGJlIGNvcGllZCBvciBtb3ZlZCwgaW4gdGFjdCwgZnJvbSBvbmUgcGxhY2UgdG8gYW5vdGhlciwKKyAgICBhbmQgaXMgcHJpbWFyaWx5IGludGVuZGVkIGZvciB1c2Ugb24gV2luZG93cyBwbGF0Zm9ybXMuCisgIDx0YWc+PHR0Ly0tZGlzYWJsZS1zdHJpcHBpbmcvPGxhYmVsIGlkPSJidWlsZC1zdHJpcHBpbmciPjwvdGFnPgorICAgIERvbid0IHJlbW92ZSB0aGUgc3ltYm9sIHRhYmxlcyBmcm9tIGV4ZWN1dGFibGVzIGFuZCBzaGFyZWQgb2JqZWN0cyB3aGVuIGluc3RhbGxpbmcgdGhlbS4KKyAgPHRhZz48dHQvLS1kaXNhYmxlLWxlYXJuLW1vZGUvPGxhYmVsIGlkPSJidWlsZC1sZWFybi1tb2RlIj48L3RhZz4KKyAgICBSZWR1Y2UgcHJvZ3JhbSBzaXplIGJ5IGV4Y2x1ZGluZyBjb21tYW5kIGxlYXJuIG1vZGUKKyAgICAoc2VlIHNlY3Rpb24gPHJlZiBpZD0ibGVhcm4iIG5hbWU9IkNvbW1hbmQgTGVhcm4gTW9kZSI+KS4KKyAgPHRhZz48dHQvLS1kaXNhYmxlLWNvbnRyYWN0ZWQtYnJhaWxsZS88bGFiZWwgaWQ9ImJ1aWxkLWNvbnRyYWN0ZWQtYnJhaWxsZSI+PC90YWc+CisgICAgUmVkdWNlIHByb2dyYW0gc2l6ZSBieSBleGNsdWRpbmcgc3VwcG9ydCBmb3IgY29udHJhY3RlZCBicmFpbGxlCisgICAgKHNlZSBzZWN0aW9uIDxyZWYgaWQ9InRhYmxlLWNvbnRyYWN0aW9uIiBuYW1lPSJDb250cmFjdGlvbiBUYWJsZXMiPikuCisgIDx0YWc+PHR0Ly0tZGlzYWJsZS1zcGVlY2gtc3VwcG9ydC88bGFiZWwgaWQ9ImJ1aWxkLXNwZWVjaC1zdXBwb3J0Ij48L3RhZz4KKyAgICBSZWR1Y2UgcHJvZ3JhbSBzaXplIGJ5IGV4Y2x1ZGluZyBzdXBwb3J0IGZvciBzcGVlY2ggc3ludGhlc2l6ZXJzLgorICA8dGFnPjx0dC8tLWRpc2FibGUtaWNvbnYvPGxhYmVsIGlkPSJidWlsZC1pY29udiI+PC90YWc+CisgICAgUmVkdWNlIHByb2dyYW0gc2l6ZSBieSBleGNsdWRpbmcgc3VwcG9ydCBmb3IKKyAgICBjaGFyYWN0ZXIgc2V0IGNvbnZlcnNpb24uCisgIDx0YWc+PHR0Ly0tZGlzYWJsZS1pY3UvPGxhYmVsIGlkPSJidWlsZC1pY3UiPjwvdGFnPgorICAgIFJlZHVjZSBwcm9ncmFtIHNpemUgYnkgZXhjbHVkaW5nIHN1cHBvcnQgZm9yCisgICAgVW5pY29kZS1iYXNlZCBpbnRlcm5hdGlvbmFsaXphdGlvbi4KKyAgPHRhZz48dHQvLS1kaXNhYmxlLXgvPGxhYmVsIGlkPSJidWlsZC14Ij48L3RhZz4KKyAgICBSZWR1Y2UgcHJvZ3JhbSBzaXplIGJ5IGV4Y2x1ZGluZyBzdXBwb3J0IGZvcgorICAgIFgxMS4KKyAgPHRhZz48dHQvLS1kaXNhYmxlLWJlZXBlci1zdXBwb3J0LzxsYWJlbCBpZD0iYnVpbGQtYmVlcGVyLXN1cHBvcnQiPjwvdGFnPgorICAgIFJlZHVjZSBwcm9ncmFtIHNpemUgYnkgZXhjbHVkaW5nIHN1cHBvcnQgZm9yCisgICAgdGhlIGNvbnNvbGUgdG9uZSBnZW5lcmF0b3IuCisgIDx0YWc+PHR0Ly0tZGlzYWJsZS1wY20tc3VwcG9ydC88bGFiZWwgaWQ9ImJ1aWxkLXBjbS1zdXBwb3J0Ij48L3RhZz4KKyAgICBSZWR1Y2UgcHJvZ3JhbSBzaXplIGJ5IGV4Y2x1ZGluZyBzdXBwb3J0IGZvcgorICAgIHRoZSBkaWdpdGFsIGF1ZGlvIGludGVyZmFjZSBvbiB0aGUgc291bmQgY2FyZC4KKyAgPHRhZz48dHQvLS1lbmFibGUtcGNtLXN1cHBvcnQ9LzxlbS9pbnRlcmZhY2UvPC90YWc+CisgICAgSWYgYSBwbGF0Zm9ybSBwcm92aWRlcyBtb3JlIHRoYW4gb25lIGRpZ2l0YWwgYXVkaW8gaW50ZXJmYWNlCisgICAgdGhlbiB0aGUgb25lIHdoaWNoIGlzIHRvIGJlIHVzZWQgbWF5IGJlIHNwZWNpZmllZC4KKyAgICA8dGFibGUgbG9jPSJoIj4KKyAgICAgIDx0YWJ1bGFyIGNhPSJsbGwiPgorICAgICAgICBQbGF0Zm9ybXxJbnRlcmZhY2V8RGVzY3JpcHRpb25APGhsaW5lPgorICAgICAgICBMaW51eAorICAgICAgICAgIHxvc3N8T3BlbiBTb3VuZCBTeXN0ZW1ACisgICAgICAgICAgfGFsc2F8QWR2YW5jZWQgTGludXggU291bmQgQXJjaGl0ZWN0dXJlQAorICAgICAgPC90YWJ1bGFyPgorICAgIDwvdGFibGU+CisgIDx0YWc+PHR0Ly0tZGlzYWJsZS1taWRpLXN1cHBvcnQvPGxhYmVsIGlkPSJidWlsZC1taWRpLXN1cHBvcnQiPjwvdGFnPgorICAgIFJlZHVjZSBwcm9ncmFtIHNpemUgYnkgZXhjbHVkaW5nIHN1cHBvcnQgZm9yCisgICAgdGhlIE11c2ljYWwgSW5zdHJ1bWVudCBEaWdpdGFsIEludGVyZmFjZSBvZiB0aGUgc291bmQgY2FyZC4KKyAgPHRhZz48dHQvLS1lbmFibGUtbWlkaS1zdXBwb3J0PS88ZW0vaW50ZXJmYWNlLzwvdGFnPgorICAgIElmIGEgcGxhdGZvcm0gcHJvdmlkZXMgbW9yZSB0aGFuIG9uZSBNdXNpY2FsIEluc3RydW1lbnQgRGlnaXRhbCBJbnRlcmZhY2UKKyAgICB0aGVuIHRoZSBvbmUgd2hpY2ggaXMgdG8gYmUgdXNlZCBtYXkgYmUgc3BlY2lmaWVkLgorICAgIDx0YWJsZSBsb2M9ImgiPgorICAgICAgPHRhYnVsYXIgY2E9ImxsbCI+CisgICAgICAgIFBsYXRmb3JtfEludGVyZmFjZXxEZXNjcmlwdGlvbkA8aGxpbmU+CisgICAgICAgIExpbnV4CisgICAgICAgICAgfG9zc3xPcGVuIFNvdW5kIFN5c3RlbUAKKyAgICAgICAgICB8YWxzYXxBZHZhbmNlZCBMaW51eCBTb3VuZCBBcmNoaXRlY3R1cmVACisgICAgICA8L3RhYnVsYXI+CisgICAgPC90YWJsZT4KKyAgPHRhZz48dHQvLS1kaXNhYmxlLWZtLXN1cHBvcnQvPGxhYmVsIGlkPSJidWlsZC1mbS1zdXBwb3J0Ij48L3RhZz4KKyAgICBSZWR1Y2UgcHJvZ3JhbSBzaXplIGJ5IGV4Y2x1ZGluZyBzdXBwb3J0IGZvcgorICAgIHRoZSBGTSBzeW50aGVzaXplciBvbiBhbiBBZExpYiwgT1BMMywgU291bmQgQmxhc3Rlciwgb3IgZXF1aXZhbGVudCBzb3VuZCBjYXJkLgorICA8dGFnPjx0dC8tLWRpc2FibGUtcG0tY29uZmlnZmlsZS88bGFiZWwgaWQ9ImJ1aWxkLXBtLWNvbmZpZ2ZpbGUiPjwvdGFnPgorICAgIFJlZHVjZSBwcm9ncmFtIHNpemUgYnkgZXhjbHVkaW5nIHN1cHBvcnQgZm9yCisgICAgdGhlIFBhcGVubWVpZXIgZHJpdmVyJ3MgY29uZmlndXJhdGlvbiBmaWxlLgorICA8dGFnPjx0dC8tLWRpc2FibGUtZ3BtLzxsYWJlbCBpZD0iYnVpbGQtZ3BtIj48L3RhZz4KKyAgICBSZWR1Y2UgcHJvZ3JhbSBzaXplIGJ5IGV4Y2x1ZGluZworICAgIHRoZSBpbnRlcmZhY2UgdG8gdGhlIDx0dC9ncG0vIGFwcGxpY2F0aW9uCisgICAgd2hpY2ggYWxsb3dzIEJSTFRUWSB0byBpbnRlcmFjdCB3aXRoIHRoZSBwb2ludGVyIChtb3VzZSkgZGV2aWNlCisgICAgKHNlZSBzZWN0aW9uIDxyZWYgaWQ9ImdwbSIgbmFtZT0iUG9pbnRlciAoTW91c2UpIFN1cHBvcnQgdmlhIEdQTSI+KS4KKyAgPHRhZz48dHQvLS1kaXNhYmxlLWFwaS88bGFiZWwgaWQ9ImJ1aWxkLWFwaSI+PC90YWc+CisgICAgUmVkdWNlIHByb2dyYW0gc2l6ZSBieSBleGNsdWRpbmcKKyAgICB0aGUgQXBwbGljYXRpb24gUHJvZ3JhbW1pbmcgSW50ZXJmYWNlLgorICA8dGFnPjx0dC8tLXdpdGgtYXBpLXBhcmFtZXRlcnM9LzxlbS9uYW1lLzx0dC89LzxlbS92YWx1ZS88dHQvLC8uLi48bGFiZWwgaWQ9ImJ1aWxkLWFwaS1wYXJhbWV0ZXJzIj48L3RhZz4KKyAgICBTcGVjaWZ5IHRoZSBkZWZhdWx0IHBhcmFtZXRlciBzZXR0aW5ncyBmb3IgdGhlIEFwcGxpY2F0aW9uIFByb2dyYW1taW5nIEludGVyZmFjZS4KKyAgICBJZiB0aGUgc2FtZSBwYXJhbWV0ZXIgaXMgc3BlY2lmaWVkIG1vcmUgdGhhbiBvbmNlLAorICAgIHRoZW4gaXRzIHJpZ2h0bW9zdCBhc3NpZ25tZW50IGlzIHVzZWQuCisgICAgRm9yIGEgZGVzY3JpcHRpb24gb2YgdGhlIHBhcmFtZXRlcnMgYWNjZXB0ZWQgYnkgdGhlIGludGVyZmFjZSwKKyAgICBwbGVhc2Ugc2VlIHRoZSA8YmYvQnJsQVBJLyByZWZlcmVuY2UgbWFudWFsLgorICAgIFNlZSB0aGUgPHJlZiBpZD0iY29uZmlndXJlLWFwaS1wYXJhbWV0ZXJzIiBuYW1lPSJhcGktcGFyYW1ldGVycyI+IGNvbmZpZ3VyYXRpb24gZmlsZSBkaXJlY3RpdmUKKyAgICBhbmQgdGhlIDxyZWYgaWQ9Im9wdGlvbnMtYXBpLXBhcmFtZXRlcnMiIG5hbWU9Ii1BIj4gY29tbWFuZCBsaW5lIG9wdGlvbgorICAgIGZvciBydW4tdGltZSBzZWxlY3Rpb24uCisgIDx0YWc+PHR0Ly0tZGlzYWJsZS1jYW1sLWJpbmRpbmdzLzxsYWJlbCBpZD0iYnVpbGQtY2FtbC1iaW5kaW5ncyI+PC90YWc+CisgICAgRG9uJ3QgYnVpbGQgdGhlIENhbWwgYmluZGluZ3MgZm9yIHRoZSBBcHBsaWNhdGlvbiBQcm9ncmFtbWluZyBJbnRlcmZhY2UuCisgIDx0YWc+PHR0Ly0tZGlzYWJsZS1qYXZhLWJpbmRpbmdzLzxsYWJlbCBpZD0iYnVpbGQtamF2YS1iaW5kaW5ncyI+PC90YWc+CisgICAgRG9uJ3QgYnVpbGQgdGhlIEphdmEgYmluZGluZ3MgZm9yIHRoZSBBcHBsaWNhdGlvbiBQcm9ncmFtbWluZyBJbnRlcmZhY2UuCisgIDx0YWc+PHR0Ly0tZGlzYWJsZS1saXNwLWJpbmRpbmdzLzxsYWJlbCBpZD0iYnVpbGQtbGlzcC1iaW5kaW5ncyI+PC90YWc+CisgICAgRG9uJ3QgYnVpbGQgdGhlIExpc3AgYmluZGluZ3MgZm9yIHRoZSBBcHBsaWNhdGlvbiBQcm9ncmFtbWluZyBJbnRlcmZhY2UuCisgIDx0YWc+PHR0Ly0tZGlzYWJsZS1weXRob24tYmluZGluZ3MvPGxhYmVsIGlkPSJidWlsZC1weXRob24tYmluZGluZ3MiPjwvdGFnPgorICAgIERvbid0IGJ1aWxkIHRoZSBQeXRob24gYmluZGluZ3MgZm9yIHRoZSBBcHBsaWNhdGlvbiBQcm9ncmFtbWluZyBJbnRlcmZhY2UuCisgIDx0YWc+PHR0Ly0tZGlzYWJsZS10Y2wtYmluZGluZ3MvPGxhYmVsIGlkPSJidWlsZC10Y2wtYmluZGluZ3MiPjwvdGFnPgorICAgIERvbid0IGJ1aWxkIHRoZSBUY2wgYmluZGluZ3MgZm9yIHRoZSBBcHBsaWNhdGlvbiBQcm9ncmFtbWluZyBJbnRlcmZhY2UuCisgIDx0YWc+PHR0Ly0td2l0aC10Y2wtY29uZmlnPS88ZW0vcGF0aC88bGFiZWwgaWQ9ImJ1aWxkLXRjbC1jb25maWciPjwvdGFnPgorICAgIFNwZWNpZnkgdGhlIGxvY2F0aW9uIG9mIHRoZSBUY2wgY29uZmlndXJhdGlvbiBzY3JpcHQgKDx0dC90Y2xDb25maWcuc2gvKS4KKyAgICBFaXRoZXIgdGhlIHBhdGggdG8gdGhlIHNjcmlwdCBpdHNlbGYKKyAgICBvciB0byB0aGUgZGlyZWN0b3J5IGNvbnRhaW5pbmcgaXQKKyAgICBtYXkgYmUgc3VwcGxpZWQuCisgICAgQW55IG9mIHRoZSBmb2xsb3dpbmcgd29yZHMgY2FuIGFsc28gYmUgdXNlZCBhcyB0aGUgb3BlcmFuZCBvZiB0aGlzIG9wdGlvbjoKKyAgICA8ZGVzY3JpcD4KKyAgICAgIDx0YWcvbm8vCisgICAgICAgIFVzZSBvdGhlciBtZWFucyB0byBndWVzcyBpZiBUY2wgaXMgYXZhaWxhYmxlLCBhbmQsIGlmIHNvLCB3aGVyZSBpdCBoYXMgYmVlbiBpbnN0YWxsZWQuCisgICAgICAgIFRoaXMgaXMgZXF1aXZhbGVudCB0byBzcGVjaWZ5aW5nIDx0dC8tLXdpdGhvdXQtdGNsLWNvbmZpZy8uCisgICAgICA8dGFnL3llcy8KKyAgICAgICAgU2VhcmNoIGZvciB0aGUgc2NyaXB0IGluIGEgZmV3IGNvbW1vbmx5IHVzZWQgZGlyZWN0b3JpZXMuCisgICAgICAgIFRoaXMgaXMgZXF1aXZhbGVudCB0byBzcGVjaWZ5aW5nIDx0dC8tLXdpdGgtdGNsLWNvbmZpZy8uCisgICAgPC9kZXNjcmlwPgorPC9kZXNjcmlwPgorCis8c2VjdDM+TWlzY2VsbGFuZW91cyBPcHRpb25zPGxhYmVsIGlkPSJidWlsZC1taXNjZWxsYW5lb3VzIj48cD4KKzxkZXNjcmlwPgorICA8dGFnPjx0dC8tLXdpdGgtaW5pdC1wYXRoPS88ZW0vcGF0aC88bGFiZWwgaWQ9ImJ1aWxkLWluaXQtcGF0aCI+PC90YWc+CisgICAgU3BlY2lmeSB0aGUgcGF0aCB0byB0aGUgcmVhbCA8dHQvaW5pdC8gcHJvZ3JhbSBmb3IgdGhlIHN5c3RlbS4KKyAgICBUaGUgYWJzb2x1dGUgcGF0aCBzaG91bGQgYmUgc3VwcGxpZWQuCisgICAgSWYgdGhpcyBvcHRpb24gaXMgc3BlY2lmaWVkLCB0aGVuOgorICAgIDxlbnVtPgorICAgICAgPGl0ZW0+CisgICAgICAgIFRoZSA8dHQvaW5pdC8gcHJvZ3JhbSBzaG91bGQgYmUgbW92ZWQgdG8gYSBuZXcgbG9jYXRpb24uCisgICAgICA8aXRlbT4KKyAgICAgICAgPHR0L2JybHR0eS8gc2hvdWxkIGJlIG1vdmVkIHRvIHRoZSA8dHQvaW5pdC8gcHJvZ3JhbSdzIG9yaWdpbmFsIGxvY2F0aW9uLgorICAgICAgPGl0ZW0+CisgICAgICAgIFdoZW4gdGhlIHN5c3RlbSBydW5zIDx0dC9pbml0LyBhdCBzdGFydHVwLAorICAgICAgICA8dHQvYnJsdHR5LyBpcyBhY3R1YWxseSBydW4uCisgICAgICAgIEl0IHB1dHMgaXRzZWxmIGludG8gdGhlIGJhY2tncm91bmQsCisgICAgICAgIGFuZCBydW5zIHRoZSByZWFsIDx0dC9pbml0LyBpbiB0aGUgZm9yZWdyb3VuZC4KKyAgICAgICAgVGhpcyBpcyBvbmUgKHNvbWV3aGF0IHNuZWFreSkgd2F5IHRvIGhhdmUgYnJhaWxsZSByaWdodCBhdCB0aGUgb3V0c2V0LgorICAgICAgICBJdCdzIGVzcGVjaWFsbHkgdXNlZnVsIGZvciBzb21lIGluc3RhbGwvcmVzY3VlIGRpc2tzLgorICAgIDwvZW51bT4KKyAgICBJZiB0aGlzIG9wdGlvbiBpc24ndCBzcGVjaWZpZWQsIHRoZW4gdGhpcyBmZWF0dXJlIGlzbid0IGFjdGl2YXRlZC4KKyAgICBUaGlzIG9wdGlvbiBpcyBwcmltYXJpbHkgaW50ZW5kZWQgZm9yIGJ1aWxkaW5nIGEgYnJhaWxsaWZpZWQgaW5zdGFsbGVyIGltYWdlLgorICA8dGFnPjx0dC8tLXdpdGgtc3RkZXJyLXBhdGg9LzxlbS9wYXRoLzxsYWJlbCBpZD0iYnVpbGQtc3RkZXJyLXBhdGgiPjwvdGFnPgorICAgIFNwZWNpZnkgdGhlIHBhdGggdG8gdGhlIGZpbGUgb3IgZGV2aWNlIHdoZXJlIHN0YW5kYXJkIGVycm9yIG91dHB1dCBpcyB0byBiZSB3cml0dGVuLgorICAgIFRoZSBhYnNvbHV0ZSBwYXRoIHNob3VsZCBiZSBzdXBwbGllZC4KKyAgICBJZiB0aGlzIG9wdGlvbiBpc24ndCBzcGVjaWZpZWQsIHRoZW4gdGhpcyBmZWF0dXJlIGlzbid0IGFjdGl2YXRlZC4KKyAgICBUaGlzIG9wdGlvbiBpcyBwcmltYXJpbHkgaW50ZW5kZWQgZm9yIGJ1aWxkaW5nIGEgYnJhaWxsaWZpZWQgaW5zdGFsbGVyIGltYWdlLgorPC9kZXNjcmlwPgorCis8c2VjdDI+TWFrZSBGaWxlIFRhcmdldHM8bGFiZWwgaWQ9Im1ha2UiPjxwPgorT25jZSBCUkxUVFkgaGFzIGJlZW4gY29uZmlndXJlZCwKK3RoZSBuZXh0IHN0ZXBzIGFyZSB0byBjb21waWxlIGFuZCB0byBpbnN0YWxsIGl0LgorVGhlc2UgYXJlIGRvbmUgYnkgYXBwbHlpbmcgdGhlIHN5c3RlbSdzIDx0dC9tYWtlLyBjb21tYW5kCit0byBCUkxUVFkncyBtYWluIG1ha2UgZmlsZSAoPHR0L01ha2VmaWxlLyBpbiB0aGUgdG9wLWxldmVsIGRpcmVjdG9yeSkuCitCUkxUVFkncyBtYWtlIGZpbGUgc3VwcG9ydHMgbW9zdCBvZiB0aGUgY29tbW9uIGFwcGxpY2F0aW9uIG1haW50ZW5hbmNlIHRhcmdldHMuCitUaGV5IGluY2x1ZGU6Cis8ZGVzY3JpcD4KKyAgPHRhZy9tYWtlLworICAgIEEgc2hvcnRjdXQgZm9yIDx0dC9tYWtlIGFsbC8uCisgIDx0YWc+bWFrZSBhbGw8bGFiZWwgaWQ9Im1ha2UtYWxsIj48L3RhZz4KKyAgICBDb21waWxlIGFuZCBsaW5rIHRoZSBCUkxUVFkgZXhlY3V0YWJsZSwgaXRzIGRyaXZlcnMgYW5kIHRoZWlyIGhlbHAgcGFnZXMsCisgICAgaXRzIHRlc3QgcHJvZ3JhbXMsIGFuZCBhIGZldyBvdGhlciBzbWFsbCB1dGlsaXRpZXMuCisgIDx0YWc+bWFrZSBpbnN0YWxsPGxhYmVsIGlkPSJtYWtlLWluc3RhbGwiPjwvdGFnPgorICAgIENvbXBsZXRlIHRoZSBjb21waWxlIGFuZCBsaW5rIHBoYXNlCisgICAgKHNlZSA8cmVmIGlkPSJtYWtlLWFsbCIgbmFtZT0ibWFrZSBhbGwiPiksCisgICAgYW5kIHRoZW4gaW5zdGFsbCB0aGUgQlJMVFRZIGV4ZWN1dGFibGUsIGl0cyBkYXRhIGZpbGVzLCBkcml2ZXJzLCBhbmQgaGVscCBwYWdlcywKKyAgICBpbiB0aGUgY29ycmVjdCBwbGFjZXMgYW5kIHdpdGggdGhlIGNvcnJlY3QgcGVybWlzc2lvbnMuCisgIDx0YWc+bWFrZSB1bmluc3RhbGw8bGFiZWwgaWQ9Im1ha2UtdW5pbnN0YWxsIj48L3RhZz4KKyAgICBSZW1vdmUgdGhlIEJSTFRUWSBleGVjdXRhYmxlLCBpdHMgZGF0YSBmaWxlcywgZHJpdmVycywgYW5kIGhlbHAgcGFnZXMsCisgICAgZnJvbSB0aGUgc3lzdGVtLgorICA8dGFnPm1ha2UgY2xlYW48bGFiZWwgaWQ9Im1ha2UtY2xlYW4iPjwvdGFnPgorICAgIEVuc3VyZSB0aGF0IHRoZSBuZXh0IGNvbXBpbGUgYW5kIGxpbmsKKyAgICAoc2VlIDxyZWYgaWQ9Im1ha2UtYWxsIiBuYW1lPSJtYWtlIGFsbCI+KQorICAgIHdpbGwgYmUgZG9uZSBmcm9tIHNjcmF0Y2ggYnkgcmVtb3ZpbmcgdGhlIHJlc3VsdHMgb2YKKyAgICBjb21waWxpbmcsIGxpbmtpbmcsIGFuZCB0ZXN0aW5nIGZyb20gdGhlIHNvdXJjZSBkaXJlY3Rvcnkgc3RydWN0dXJlLgorICAgIFRoaXMgaW5jbHVkZXMgdGhlIHJlbW92YWwgb2Ygb2JqZWN0IGZpbGVzLCBleGVjdXRhYmxlcywKKyAgICBkeW5hbWljYWxseSBsb2FkYWJsZSBzaGFyZWQgb2JqZWN0cywgZHJpdmVyIGxpc3RzLCBoZWxwIHBhZ2VzLAorICAgIHRlbXBvcmFyeSBoZWFkZXIgZmlsZXMsIGFuZCBjb3JlIGZpbGVzLgorICA8dGFnPm1ha2UgZGlzdGNsZWFuPGxhYmVsIGlkPSJtYWtlLWRpc3RjbGVhbiI+PC90YWc+CisgICAgSW4gYWRkaXRpb24gdG8gcmVtb3ZpbmcgdGhlIHJlc3VsdHMgb2YgY29tcGlsaW5nIGFuZCBsaW5raW5nCisgICAgKHNlZSA8cmVmIGlkPSJtYWtlLWNsZWFuIiBuYW1lPSJtYWtlIGNsZWFuIj4pOgorICAgIDxpdGVtaXplPgorICAgICAgPGl0ZW0+CisgICAgICAgIFJlbW92ZSB0aGUgcmVzdWx0cyBvZiBCUkxUVFkgY29uZmlndXJhdGlvbgorICAgICAgICAoc2VlIDxyZWYgaWQ9ImJ1aWxkIiBuYW1lPSJCdWlsZCBPcHRpb25zIj4pLgorICAgICAgICBUaGlzIGluY2x1ZGVzIHRoZSByZW1vdmFsIG9mCisgICAgICAgIDx0dC9jb25maWcubWsvLCA8dHQvY29uZmlnLmgvLAorICAgICAgICA8dHQvY29uZmlnLmNhY2hlLywgPHR0L2NvbmZpZy5zdGF0dXMvLCBhbmQgPHR0L2NvbmZpZy5sb2cvLgorICAgICAgPGl0ZW0+CisgICAgICAgIFJlbW92ZSBvdGhlciBmaWxlcyBmcm9tIHRoZSBzb3VyY2UgZGlyZWN0b3J5IHN0cnVjdHVyZQorICAgICAgICB3aGljaCB0ZW5kIHRvIGFjY3VtdWxhdGUgb3ZlciB0aW1lIGJ1dCB3aGljaCBkb24ndCBiZWxvbmcgdGhlcmUuCisgICAgICAgIFRoaXMgaW5jbHVkZXMgdGhlIHJlbW92YWwgb2YKKyAgICAgICAgZWRpdG9yIGJhY2t1cCBmaWxlcywgdGVzdCBjYXNlIHJlc3VsdHMsCisgICAgICAgIHJlamVjdGVkIHBhdGNoIGh1bmtzLCBhbmQgY29waWVzIG9mIG9yaWdpbmFsIHNvdXJjZSBmaWxlcy4KKyAgICA8L2l0ZW1pemU+Cis8L2Rlc2NyaXA+CisKKzxzZWN0MT5UZXN0aW5nIEJSTFRUWTxwPgorQWZ0ZXIgY29tcGlsaW5nLCBsaW5raW5nLCBhbmQgaW5zdGFsbGluZyBCUkxUVFksCitpdCdzIGEgZ29vZCBpZGVhIHRvIGdpdmUgaXQgYSBxdWljayB0ZXN0IGJlZm9yZSBhY3RpdmF0aW5nIGl0IHBlcm1hbmVudGx5LgorVG8gZG8gc28sIGludm9rZSBpdCB3aXRoIHRoZSBjb21tYW5kOgorPHRzY3JlZW4+YnJsdHR5IC1iPGVtL2RyaXZlci8gLWQ8ZW0vZGV2aWNlLzwvdHNjcmVlbj4KK0ZvciA8ZW0vZHJpdmVyLywgc3BlY2lmeSB0aGUgdHdvLWxldHRlcgorPHJlZiBpZD0iZHJpdmVycyIgbmFtZT0iZHJpdmVyIGlkZW50aWZpY2F0aW9uIGNvZGUiPgorY29ycmVzcG9uZGluZyB0byB5b3VyIGJyYWlsbGUgZGlzcGxheS4KK0ZvciA8ZW0vZGV2aWNlLywgc3BlY2lmeSB0aGUgZnVsbCBwYXRoCitmb3IgdGhlIGRldmljZSB0byB3aGljaCB5b3VyIGJyYWlsbGUgZGlzcGxheSBpcyBjb25uZWN0ZWQuCisKK0lmIHlvdSBkb24ndCB3YW50IHRvIGV4cGxpY2l0bHkgaWRlbnRpZnkgdGhlIGRyaXZlciBhbmQgZGV2aWNlCitlYWNoIHRpbWUgeW91IHN0YXJ0IEJSTFRUWSwgdGhlbiB5b3UgY2FuIHRha2UgdHdvIGFwcHJvYWNoZXMuCitZb3UgY2FuIGVzdGFibGlzaCBzeXN0ZW0gZGVmYXVsdHMKK3ZpYSB0aGUgPHJlZiBpZD0iY29uZmlndXJlLWJyYWlsbGUtZHJpdmVyIiBuYW1lPSJicmFpbGxlLWRyaXZlciI+CithbmQgdGhlIDxyZWYgaWQ9ImNvbmZpZ3VyZS1icmFpbGxlLWRldmljZSIgbmFtZT0iYnJhaWxsZS1kZXZpY2UiPgorY29uZmlndXJhdGlvbiBmaWxlIGRpcmVjdGl2ZXMsCithbmQvb3IgY29tcGlsZSB5b3VyIG5lZWRzIHJpZ2h0IGludG8gQlJMVFRZCit2aWEgdGhlIDxyZWYgaWQ9ImJ1aWxkLWJyYWlsbGUtZHJpdmVyIiBuYW1lPSItLXdpdGgtYnJhaWxsZS1kcml2ZXIiPgorYW5kIHRoZSA8cmVmIGlkPSJidWlsZC1icmFpbGxlLWRldmljZSIgbmFtZT0iLS13aXRoLWJyYWlsbGUtZGV2aWNlIj4KK2J1aWxkIG9wdGlvbnMuCisKK0lmIGFsbCBpcyB3ZWxsLCBCUkxUVFkncyB2ZXJzaW9uIGlkZW50aWZpY2F0aW9uIG1lc3NhZ2UKK3Nob3VsZCBhcHBlYXIgb24gdGhlIGJyYWlsbGUgZGlzcGxheSBmb3IgYSBmZXcgc2Vjb25kcworKHNlZSB0aGUgPHJlZiBpZD0ib3B0aW9ucy1tZXNzYWdlLXRpbWVvdXQiIG5hbWU9Ii1NIj4gY29tbWFuZCBsaW5lIG9wdGlvbikuCitBZnRlciBpdCBnb2VzIGF3YXkgKHdoaWNoIHlvdSBjYW4gaGFzdGVuIGJ5IHByZXNzaW5nIGFueSBrZXkgb24gdGhlIGRpc3BsYXkpLAordGhlIGFyZWEgb2YgdGhlIHNjcmVlbiB3aGVyZSB0aGUgY3Vyc29yIGlzIHNob3VsZCBhcHBlYXIuCitUaGlzIG1lYW5zIHRoYXQgeW91IHNob3VsZCBleHBlY3QgdG8gc2VlIHlvdXIgc2hlbGwncyBjb21tYW5kIHByb21wdC4KK1RoZW4sIGFzIHlvdSBlbnRlciB5b3VyIG5leHQgY29tbWFuZCwKK2VhY2ggY2hhcmFjdGVyIHNob3VsZCBhcHBlYXIgb24gdGhlIGRpc3BsYXkgYXMgaXQncyB0eXBlZCBvbiB0aGUga2V5Ym9hcmQuCisKK0lmIHRoaXMgaXMgeW91ciBleHBlcmllbmNlLCB0aGVuIGxlYXZlIEJSTFRUWSBydW5uaW5nLCBhbmQgZW5qb3kgaXQuCitJZiB0aGlzIGlzbid0IHlvdXIgZXhwZXJpZW5jZSwgdGhlbiBpdCBtYXkgYmUgbmVjZXNzYXJ5Cit0byB0ZXN0IGVhY2ggZHJpdmVyIHNlcGFyYXRlbHkgaW4gb3JkZXIgdG8gaXNvbGF0ZSB0aGUgc291cmNlIG9mIHRoZSBwcm9ibGVtLgorVGhlIHNjcmVlbiBkcml2ZXIgY2FuIGJlIHRlc3RlZCB3aXRoIDxyZWYgaWQ9InV0aWxpdHktc2NydGVzdCIgbmFtZT0ic2NydGVzdCI+LAorYW5kIHRoZSBicmFpbGxlIGRpc3BsYXkgZHJpdmVyIGNhbiBiZSB0ZXN0ZWQgd2l0aCA8cmVmIGlkPSJ1dGlsaXR5LWJybHRlc3QiIG5hbWU9ImJybHRlc3QiPi4KKworSWYgeW91IGV4cGVyaWVuY2UgYSBwcm9ibGVtIHdoaWNoIHJlcXVpcmVzIGEgbG90IG9mIGRpZ2dpbmcsCit0aGVuIHlvdSBtYXkgd2lzaCB0byB1c2UgdGhlIGZvbGxvd2luZyA8dHQvYnJsdHR5LyBjb21tYW5kIGxpbmUgb3B0aW9uczoKKzxpdGVtaXplPgorICA8aXRlbT4KKyAgICA8cmVmIGlkPSJvcHRpb25zLWxvZy1sZXZlbCIgbmFtZT0iLWxkZWJ1ZyI+CisgICAgdG8gbG9nIGxvdHMgb2YgZGlhZ25vc3RpYyBtZXNzYWdlcy4KKyAgPGl0ZW0+CisgICAgPHJlZiBpZD0ib3B0aW9ucy1uby1kYWVtb24iIG5hbWU9Ii1uIj4KKyAgICB0byBrZWVwIEJSTFRUWSBpbiB0aGUgZm9yZWdyb3VuZC4KKyAgPGl0ZW0+CisgICAgPHJlZiBpZD0ib3B0aW9ucy1zdGFuZGFyZC1lcnJvciIgbmFtZT0iLWUiPgorICAgIHRvIGRpcmVjdCBkaWFnbm9zdGljIG1lc3NhZ2VzIHRvIHN0YW5kYXJkIGVycm9yCisgICAgcmF0aGVyIHRoYW4gdG8gdGhlIHN5c3RlbSBsb2cuCis8L2l0ZW1pemU+CisKKzxzZWN0MT5TdGFydGluZyBCUkxUVFk8cD4KK0JSTFRUWSwgd2hlbiBwcm9wZXJseSBpbnN0YWxsZWQsIGlzIGludm9rZWQgd2l0aCB0aGUgc2luZ2xlIGNvbW1hbmQgPHR0L2JybHR0eS8uCitBIGNvbmZpZ3VyYXRpb24gZmlsZQorKHNlZSBzZWN0aW9uIDxyZWYgaWQ9ImNvbmZpZ3VyZSIgbmFtZT0iVGhlIENvbmZpZ3VyYXRpb24gRmlsZSI+IGZvciBkZXRhaWxzKQorY2FuIGJlIGNyZWF0ZWQgaW4gb3JkZXIgdG8gZXN0YWJsaXNoIHN5c3RlbSBkZWZhdWx0cyBmb3Igc3VjaCB0aGluZ3MgYXMKK3RoZSBsb2NhdGlvbiBvZiB0aGUgcHJlZmVyZW5jZXMgZmlsZSwKK3RoZSBicmFpbGxlIGRpc3BsYXkgZHJpdmVyIHRvIGJlIHVzZWQsCit0aGUgZGV2aWNlIHRvIHdoaWNoIHRoZSBicmFpbGxlIGRpc3BsYXkgaXMgY29ubmVjdGVkLAorYW5kIHRoZSB0ZXh0IHRhYmxlIHRvIGJlIHVzZWQuCitNYW55IG9wdGlvbnMKKyhzZWUgc2VjdGlvbiA8cmVmIGlkPSJvcHRpb25zIiBuYW1lPSJDb21tYW5kIExpbmUgT3B0aW9ucyI+IGZvciBkZXRhaWxzKQorYWxsb3cgZXhwbGljaXQgcnVuLXRpbWUgc3BlY2lmaWNhdGlvbiBvZiBzdWNoIHRoaW5ncyBhcwordGhlIGxvY2F0aW9uIG9mIHRoZSBjb25maWd1cmF0aW9uIGZpbGUsCithbnkgZGVmYXVsdHMgZXN0YWJsaXNoZWQgd2l0aGluIHRoZSBjb25maWd1cmF0aW9uIGZpbGUsCithbmQgc29tZSBjaGFyYWN0ZXJpc3RpY3Mgd2hpY2ggaGF2ZSByZWFzb25hYmxlIGRlZmF1bHRzCitidXQgd2hpY2ggdGhvc2Ugd2hvIHRoaW5rIHRoZXkga25vdyB3aGF0IHRoZXkncmUgZG9pbmcgbWF5IHdpc2ggdG8gcGxheSB3aXRoLgorVGhlIDxyZWYgaWQ9Im9wdGlvbnMtaGVscCIgbmFtZT0iLWgiPiBvcHRpb24KK2Rpc3BsYXlzIGEgc3VtbWFyeSBvZiBhbGwgdGhlIG9wdGlvbnMuCitUaGUgPHJlZiBpZD0ib3B0aW9ucy12ZXJzaW9uIiBuYW1lPSItViI+IG9wdGlvbgorZGlzcGxheXMgdGhlIGN1cnJlbnQgdmVyc2lvbiBvZiB0aGUgcHJvZ3JhbSwgdGhlIEFQSSwgYW5kIHRoZSBzZWxlY3RlZCBkcml2ZXJzLgorVGhlIDxyZWYgaWQ9Im9wdGlvbnMtdmVyaWZ5IiBuYW1lPSItdiI+IG9wdGlvbgorZGlzcGxheXMgdGhlIHZhbHVlcyBvZiB0aGUgb3B0aW9ucyBhZnRlciBhbGwgc291cmNlcyBoYXZlIGJlZW4gY29uc2lkZXJlZC4KKworSXQncyBwcm9iYWJseSBiZXN0IHRvIGhhdmUgdGhlIHN5c3RlbSBhdXRvbWF0aWNhbGx5IHN0YXJ0IEJSTFRUWQorYXMgcGFydCBvZiB0aGUgYm9vdCBzZXF1ZW5jZQorc28gdGhhdCB0aGUgYnJhaWxsZSBkaXNwbGF5IGlzIGFscmVhZHkgdXAgYW5kIHJ1bm5pbmcgd2hlbiB0aGUgbG9naW4gcHJvbXB0IGFwcGVhcnMuCitNb3N0IChwcm9iYWJseSBhbGwpIGRpc3RyaWJ1dGlvbnMgcHJvdmlkZSBhIHNjcmlwdCB3aGVyZWluCit1c2VyLXN1cHBsaWVkIGFwcGxpY2F0aW9ucyBjYW4gYmUgc2FmZWx5IHN0YXJ0ZWQgbmVhciB0aGUgZW5kIG9mIHRoZSBib290IHNlcXVlbmNlLgorVGhlIG5hbWUgb2YgdGhpcyBzY3JpcHQgaXMgZGlzdHJpYnV0aW9uLWRlcGVuZGVudC4KK0hlcmUgYXJlIHRoZSBvbmVzIHdlIGtub3cgYWJvdXQgc28gZmFyOgorPGRlc2NyaXA+CisgIDx0YWcvUmVkIEhhdC8KKyAgICA8dHQ+L2V0Yy9yYy5kL3JjLmxvY2FsPC8+Cis8L2Rlc2NyaXA+CisKK1N0YXJ0aW5nIEJSTFRUWSBmcm9tIHRoaXMgc2NyaXB0IGlzIGEgZ29vZCBhcHByb2FjaCAoZXNwZWNpYWxseSBmb3IgbmV3IHVzZXJzKS4KK0p1c3QgYWRkIGEgc2V0IG9mIGxpbmVzIGxpa2UgdGhlc2U6Cis8dHNjcmVlbj48dmVyYj4KK2lmIFsgLXggL2Jpbi9icmx0dHkgLWEgLWYgL2V0Yy9icmx0dHkuY29uZiBdCit0aGVuCisgICAvYmluL2JybHR0eQorZmkKKzwvdmVyYj48L3RzY3JlZW4+CitUaGlzIGNhbiB1c3VhbGx5IGJlIGFiYnJldmlhdGVkIHRvIHRoZSBzb21ld2hhdCBsZXNzIHJlYWRhYmxlIGZvcm06Cis8dHNjcmVlbj48dmVyYj4KK1sgLXggL2Jpbi9icmx0dHkgLWEgLWYgL2V0Yy9icmx0dHkuY29uZiBdICYmIC9iaW4vYnJsdHR5Cis8L3ZlcmI+PC90c2NyZWVuPgorRG9uJ3QgYWRkIHRoZXNlIGxpbmVzIGJlZm9yZSB0aGUgZmlyc3QgbGluZQorKHdoaWNoIHVzdWFsbHkgbG9va3MgbGlrZSA8dHQ+Jm51bTshL2Jpbi9zaDwvPikuCisKK0lmIHRoZSBicmFpbGxlIGRpc3BsYXkgaXMgdG8gYmUgdXNlZCBieSBhIHN5c3RlbSBhZG1pbmlzdHJhdG9yLAordGhlbiBpdCBzaG91bGQgcHJvYmFibHkgYmUgc3RhcnRlZCBhcyBlYXJseSBhcyBwb3NzaWJsZSBkdXJpbmcgdGhlIGJvb3Qgc2VxdWVuY2UKKyhsaWtlIGJlZm9yZSB0aGUgZmlsZSBzeXN0ZW1zIGFyZSBjaGVja2VkKQorc28gdGhhdCB0aGUgZGlzcGxheSBpcyB1c2FibGUKK2luIHRoZSBldmVudCB0aGF0IHNvbWV0aGluZyBnb2VzIHdyb25nIGR1cmluZyB0aGVzZSBjaGVja3MKK2FuZCB0aGUgc3lzdGVtIGRyb3BzIGludG8gc2luZ2xlIHVzZXIgbW9kZS4KK0FnYWluLCBleGFjdGx5IHdoZXJlIGl0J3MgYmVzdCB0byBkbyB0aGlzIGlzIGRpc3RyaWJ1dGlvbi1kZXBlbmRlbnQuCitIZXJlIGFyZSB0aGUgcGxhY2VzIHdlIGtub3cgYWJvdXQgc28gZmFyOgorPGRlc2NyaXA+CisgIDx0YWc+RGViaWFuPC90YWc+CisgICAgPHR0Pi9ldGMvaW5pdC5kL2Jvb3Q8Lz4gKGZvciBvbGRlciByZWxlYXNlcykKKyAgICA8bmV3bGluZT4KKyAgICA8dHQ+L2V0Yy9pbml0LmQvPC8+IChmb3IgbmV3ZXIgcmVsZWFzZXMpCisgICAgPG5ld2xpbmU+CisgICAgQSA8dHQvYnJsdHR5LyBwYWNrYWdlIGlzIHByb3ZpZGVkCisgICAgKHNlZSBbPGh0bWx1cmwgdXJsPSJodHRwOi8vcGFja2FnZXMuZGViaWFuLm9yZy9icmx0dHkiIG5hbWU9Imh0dHA6Ly9wYWNrYWdlcy5kZWJpYW4ub3JnL2JybHR0eSI+XSkKKyAgICBhcyBvZiByZWxlYXNlIDx0dC8zLjAvICg8dHQvV29vZHkvKS4KKyAgICBTaW5jZSB0aGlzIHBhY2thZ2UgdGFrZXMgY2FyZSBvZiBzdGFydGluZyBCUkxUVFksCisgICAgdGhlcmUncyBubyBuZWVkIGZvciB1c2VyLXN1cHBsaWVkIGNvZGUgdG8gZG8gc28gaWYgaXQncyBpbnN0YWxsZWQuCisgICAgSWYgeW91IG5lZWQgdGhlIGRhZW1vbiB0byBydW4gd2l0aCBzb21lIGNvbW1hbmQtbGluZSBvcHRpb25zLAorICAgIHlvdSBjYW4gY2hhbmdlIHRoZSBjb250ZW50cyBiZXR3ZWVuIHF1b3RlcworICAgIG9uIHRoZSBkaXJlY3RpdmUgPHR0L0FSR1VNRU5UUy8KKyAgICBpbiB0aGUgPHR0Pi9ldGMvZGVmYXVsdC9icmx0dHk8Lz4gZmlsZS4KKyAgPHRhZz5SZWRIYXQ8L3RhZz4KKyAgICA8dHQ+L2V0Yy9yYy5kL3JjLnN5c2luaXQ8Lz4KKyAgICA8bmV3bGluZT4KKyAgICBCZXdhcmUgdGhhdCBsYXRlciByZWxlYXNlcywKKyAgICBpbiBvcmRlciB0byBzdXBwb3J0IGEgbW9yZSB1c2VyLW9yaWVudGVkIHN5c3RlbSBpbml0aWFsaXphdGlvbiBwcm9jZWR1cmUsCisgICAgaGF2ZSB0aGlzIHNjcmlwdCByZWludm9rZSBpdHNlbGYgc3VjaCB0aGF0CisgICAgaXQncyB1bmRlciB0aGUgY29udHJvbCBvZiA8dHQvaW5pdGxvZy8uCisgICAgTG9vaywgcHJvYmFibHkgcmlnaHQgdXAgbmVhciB0aGUgdG9wLCBmb3IgYSBzZXQgb2YgbGluZXMgbGlrZSB0aGVzZToKKyAgICA8dHNjcmVlbj48dmVyYj4KKyAgICAjIFJlcnVuIG91cnNlbHZlcyB0aHJvdWdoIGluaXRsb2cKKyAgICBpZiBbIC16ICIkSU5fSU5JVExPRyIgXTsgdGhlbgorICAgICAgWyAtZiAvc2Jpbi9pbml0bG9nIF0gJiYgZXhlYyAvc2Jpbi9pbml0bG9nICRJTklUTE9HX0FSR1MgLXIgL2V0Yy9yYy5zeXNpbml0CisgICAgZmkKKyAgICA8L3ZlcmI+PC90c2NyZWVuPgorICAgIFN0YXJ0aW5nIEJSTFRUWSBiZWZvcmUgdGhpcyByZWludm9jYXRpb24KKyAgICByZXN1bHRzIGluIHR3byBCUkxUVFkgcHJvY2Vzc2VzIHJ1bm5pbmcgYXQgdGhlIHNhbWUgdGltZSwKKyAgICBhbmQgdGhhdCdsbCBnaXZlIHlvdSBubyBlbmQgb2YgcHJvYmxlbXMuCisgICAgSWYgeW91ciB2ZXJzaW9uIG9mIHRoaXMgc2NyaXB0IGhhcyB0aGlzIGZlYXR1cmUsCisgICAgdGhlbiBtYWtlIHN1cmUgeW91IHN0YXJ0IEJSTFRUWSBhZnRlciB0aGUgbGluZXMgd2hpY2ggaW1wbGVtZW50IGl0LgorICA8dGFnPlNsYWNrd2FyZTwvdGFnPgorICAgIDx0dD4vZXRjL3JjLmQvcmMuUzwvPgorICA8dGFnPlN1U0U8L3RhZz4KKyAgICA8dHQ+L3NiaW4vaW5pdC5kL2Jvb3Q8Lz4KKzwvZGVzY3JpcD4KKworQW4gYWx0ZXJuYXRpdmUgaXMgdG8gc3RhcnQgQlJMVFRZIGZyb20gPHR0Pi9ldGMvaW5pdHRhYjwvPi4KK1lvdSBoYXZlIHR3byBjaG9pY2VzIGlmIHlvdSBjaG9vc2UgdGhpcyByb3V0ZS4KKzxpdGVtaXplPgorICA8aXRlbT4KKyAgICBJZiB5b3Ugd2FudCBpdCB0byBiZSBzdGFydGVkIHJlYWxseSBlYXJseQorICAgIGJ1dCBkb24ndCBuZWVkIGl0IHRvIGJlIGF1dG9tYXRpY2FsbHkgcmVzdGFydGVkIGlmIGl0IGRpZXMsCisgICAgdGhlbiBhZGQgYSBsaW5lIGxpa2UgdGhpcyBiZWZvcmUgdGhlIGZpcnN0IDx0dC86c3lzaW5pdDovIGxpbmUgd2hpY2ggaXMgYWxyZWFkeSBpbiB0aGVyZS4KKyAgICA8dHNjcmVlbj5icmw6OnN5c2luaXQ6L2Jpbi9icmx0dHk8L3RzY3JlZW4+CisgIDxpdGVtPgorICAgIElmIHlvdSBkb24ndCBtaW5kIGl0IGJlaW5nIHN0YXJ0ZWQgbGF0ZXIKKyAgICBidXQgZG8gd2FudCBpdCB0byBiZSBhdXRvbWF0aWNhbGx5IHJlc3RhcnRlZCBpZiBpdCBkaWVzLAorICAgIHRoZW4gYWRkIGEgbGluZSBsaWtlIHRoaXMgYW55d2hlcmUgd2l0aGluIHRoZSBmaWxlLgorICAgIDx0c2NyZWVuPmJybDoxMjM0NTpyZXNwYXduOi9iaW4vYnJsdHR5IC1uPC90c2NyZWVuPgorICAgIFRoZSA8cmVmIGlkPSJvcHRpb25zLW5vLWRhZW1vbiIgbmFtZT0iLW4iPiAoPHR0Ly0tbm9kYWVtb24vKSBvcHRpb24gaXMgdmVyeQorICAgIGltcG9ydGFudCB3aGVuIHJ1bm5pbmcgQlJMVFRZIHdpdGggPGJmL2luaXQvJ3MgPHR0L3Jlc3Bhd24vIGZhY2lsaXR5LgorICAgIFlvdSdsbCBlbmQgdXAgd2l0aCBodW5kcmVkcyBvZiBCUkxUVFkgcHJvY2Vzc2VzIGFsbCBydW5uaW5nIGF0IHRoZSBzYW1lIHRpbWUKKyAgICBpZiB5b3UgZm9yZ2V0IHRvIHNwZWNpZnkgaXQuCis8L2l0ZW1pemU+CitDaGVjayB0aGF0IHRoZSBpZGVudGlmaWVyICg8dHQvYnJsLyBpbiB0aGVzZSBleGFtcGxlcykKK2lzbid0IGFscmVhZHkgYmVpbmcgdXNlZCBieSBhbm90aGVyIGVudHJ5LAorYW5kLCBpZiBpdCBpcywgY2hvb3NlIGEgZGlmZmVyZW50IG9uZSB3aGljaCBpc24ndC4KKworTm90ZSB0aGF0IGEgY29tbWFuZCBsaWtlIDx0dC9raWxsIC1URVJNLworaXMgc3VmZmljaWVudCB0byBzdG9wIEJSTFRUWSBpbiBpdHMgdHJhY2tzLgorSWYgaXQgZGllcyBkdXJpbmcgZW50cnkgaW50byBzaW5nbGUgdXNlciBtb2RlLCBmb3IgZXhhbXBsZSwKK2l0IG1heSB3ZWxsIGJlIGR1ZSB0byBhIHByb2JsZW0gb2YgdGhpcyBuYXR1cmUuCisKK1NvbWUgc3lzdGVtcywgYXMgcGFydCBvZiB0aGUgYm9vdCBzZXF1ZW5jZSwgcHJvYmUgdGhlIHNlcmlhbCBwb3J0cworKHVzdWFsbHkgaW4gb3JkZXIgdG8gYXV0b21hdGljYWxseSBmaW5kIHRoZSBtb3VzZSBhbmQgZGVkdWNlIGl0cyB0eXBlKS4KK0lmIHlvdXIgYnJhaWxsZSBkaXNwbGF5IGlzIHVzaW5nIGEgc2VyaWFsIHBvcnQsCit0aGlzIGtpbmQgb2YgcHJvYmluZyBtYXkgYmUgZW5vdWdoIHRvIGdldCBpdCBjb25mdXNlZC4KK0lmIHRoaXMgaGFwcGVucyB0byB5b3UsIHRoZW4gdHJ5IHJlc3RhcnRpbmcgdGhlIGJyYWlsbGUgZHJpdmVyCisoc2VlIHRoZSA8cmVmIGlkPSJjb21tYW5kLVJFU1RBUlRCUkwiIG5hbWU9IlJFU1RBUlRCUkwiPiBjb21tYW5kKS4KK0JldHRlciB5ZXQsIHR1cm4gb2ZmIHRoZSBzZXJpYWwgcG9ydCBwcm9iaW5nLgorSGVyZSdzIHdoYXQgd2Uga25vdyBzbyBmYXIgYWJvdXQgaG93IHRvIGRvIHRoaXM6Cis8ZGVzY3JpcD4KKyAgPHRhZy9SZWQgSGF0LworICAgIFRoZSBwcm9iaW5nIGlzIGRvbmUgYnkgYSBzZXJ2aWNlIG5hbWVkIDx0dC9rdWR6dS8uCisgICAgVXNlIHRoZSBjb21tYW5kIDx0c2NyZWVuPmNoa2NvbmZpZyAtLWxpc3Qga3VkenU8L3RzY3JlZW4+IHRvIHNlZSBpZiBpdCdzIGJlZW4gZW5hYmxlZC4KKyAgICBVc2UgdGhlIGNvbW1hbmQgPHRzY3JlZW4+Y2hrY29uZmlnIGt1ZHp1IG9mZjwvdHNjcmVlbj4gdG8gZGlzYWJsZSBpdC4KKyAgICBMYXRlciByZWxlYXNlcyBhbGxvdyB5b3UgdG8gbGV0IDx0dC9rdWR6dS8gcnVuCisgICAgd2l0aG91dCBwcm9iaW5nIHRoZSBzZXJpYWwgcG9ydHMuCisgICAgVG8gZG8gdGhpcywgZWRpdCB0aGUgZmlsZSA8dHQ+L2V0Yy9zeXNjb25maWcva3VkenU8Lz4sCisgICAgYW5kIHNldCA8dHQvU0FGRS8gdG8gPHR0L3llcy8uCis8L2Rlc2NyaXA+CisKK0lmIHlvdSB3YW50IHRvIHN0YXJ0IEJSTFRUWSBiZWZvcmUgYW55IGZpbGUgc3lzdGVtcyBhcmUgbW91bnRlZCwgdGhlbgorZW5zdXJlIHRoYXQgYWxsIG9mIGl0cyBjb21wb25lbnRzIGFyZSBpbnN0YWxsZWQgd2l0aGluIHRoZSByb290IGZpbGUgc3lzdGVtLgorU2VlIHRoZSA8cmVmIGlkPSJidWlsZC1leGVjdXRlLXJvb3QiIG5hbWU9Ii0td2l0aC1leGVjdXRlLXJvb3QiPiwKKzxyZWYgaWQ9ImJ1aWxkLXByb2dyYW0tZGlyZWN0b3J5IiBuYW1lPSItLWJpbmRpciI+LAorPHJlZiBpZD0iYnVpbGQtbGlicmFyeS1kaXJlY3RvcnkiIG5hbWU9Ii0tbGliZGlyIj4sCis8cmVmIGlkPSJidWlsZC13cml0YWJsZS1kaXJlY3RvcnkiIG5hbWU9Ii0td2l0aC13cml0YWJsZS1kaXJlY3RvcnkiPiwKK2FuZCA8cmVmIGlkPSJidWlsZC1kYXRhLWRpcmVjdG9yeSIgbmFtZT0iLS13aXRoLWRhdGEtZGlyZWN0b3J5Ij4KK2J1aWxkIG9wdGlvbnMuCisKKzxzZWN0MT5TZWN1cml0eSBDb25zaWRlcmF0aW9uczxwPgorQlJMVFRZIG5lZWRzIHRvIHJ1biB3aXRoIHJvb3QgcHJpdmlsZWdlcyBiZWNhdXNlIGl0IG5lZWRzCityZWFkIGFuZCB3cml0ZSBhY2Nlc3MgZm9yIHRoZSBwb3J0IHRvIHdoaWNoIHRoZSBicmFpbGxlIGRpc3BsYXkgaXMgY29ubmVjdGVkLAorcmVhZCBhY2Nlc3MgdG8gPHR0Pi9kZXYvdmNzYTwvPiBvciBlcXVpdmFsZW50CisodG8gcXVlcnkgdGhlIHNjcmVlbiBkaW1lbnNpb25zIGFuZCB0aGUgY3Vyc29yIHBvc2l0aW9uLAorYW5kIHRvIHJldmlldyB0aGUgY3VycmVudCBzY3JlZW4gY29udGVudCBhbmQgaGlnaGxpZ2h0aW5nKSwKK2FuZCByZWFkIGFuZCB3cml0ZSBhY2Nlc3MgdG8gdGhlIHN5c3RlbSBjb25zb2xlCisoZm9yIGFycm93IGtleSBlbnRyeSBkdXJpbmcgY3Vyc29yIHJvdXRpbmcsCitmb3IgaW5wdXQgY2hhcmFjdGVyIGluc2VydGlvbiBkdXJpbmcgcGFzdGUsCitmb3Igc3BlY2lhbCBrZXkgc2ltdWxhdGlvbiB1c2luZyBrZXlzIG9uIHRoZSBicmFpbGxlIGRpc3BsYXksCitmb3IgcmV0cmlldmluZyBvdXRwdXQgY2hhcmFjdGVyIHRyYW5zbGF0aW9uIGFuZCBzY3JlZW4gZm9udCBtYXBwaW5nIHRhYmxlcywKK2FuZCBmb3IgYWN0aXZhdGlvbiBvZiB0aGUgaW50ZXJuYWwgYmVlcGVyKS4KK0FjY2VzcyB0byB0aGUgbmVlZGVkIGRldmljZXMgY2FuLCBvZiBjb3Vyc2UsIGJlIGdyYW50ZWQgdG8gYSBub24tcm9vdCB1c2VyCitieSBjaGFuZ2luZyB0aGUgZmlsZSBwZXJtaXNzaW9ucyBhc3NvY2lhdGVkIHdpdGggdGhlIGRldmljZXMuCitNZXJlbHkgaGF2aW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSwgaG93ZXZlciwgaXNuJ3QgZW5vdWdoIGJlY2F1c2UKK2FjdGl2YXRpbmcgdGhlIGludGVybmFsIGJlZXBlciBhbmQgc2ltdWxhdGluZyBrZXkgc3Ryb2tlcyBzdGlsbCByZXF1aXJlIHJvb3QgcHJpdmlsZWdlLgorU28sIGlmIHlvdSdyZSB3aWxsaW5nIHRvIGdpdmUgdXAgY3Vyc29yIHJvdXRpbmcsIGN1dCZhbXA7cGFzdGUsIGJlZXBzLAorYW5kIGFsbCB0aGF0LCB5b3UgY2FuIHJ1biBCUkxUVFkgd2l0aG91dCByb290IHByaXZpbGVkZ2UuCisKKzxzZWN0MT5CdWlsZCBhbmQgUnVuLVRpbWUgUmVzdHJpY3Rpb25zPHA+Cis8ZGVzY3JpcD4KKyAgPHRhZy9BbGVydCBUdW5lcy88bGFiZWwgaWQ9InJlc3RyaWN0aW9ucy10dW5lcyI+CisgICAgU29tZSBwbGF0Zm9ybXMgZG9uJ3Qgc3VwcG9ydCBhbGwgb2YgdGhlIHR1bmUgZGV2aWNlcy4KKyAgICBTZWUgdGhlIDxyZWYgaWQ9InByZWZlcmVuY2UtdHVuZS1kZXZpY2UiIG5hbWU9IlR1bmUgRGV2aWNlIj4KKyAgICBwcmVmZXJlbmNlIGZvciBkZXRhaWxzLgorICA8dGFnL0Zlc3RpdmFsTGl0ZSBTcGVlY2ggU3ludGhlc2l6ZXIgRHJpdmVyLzxsYWJlbCBpZD0icmVzdHJpY3Rpb25zLWZsaXRlIj4KKyAgICBUaGUgZHJpdmVyIGZvciB0aGUgRmVzdGl2YWxMaXRlIHRleHQgdG8gc3BlZWNoIGVuZ2luZQorICAgIGlzIG9ubHkgYnVpbHQgaWYgdGhhdCBwYWNrYWdlIGhhcyBiZWVuIGluc3RhbGxlZC4KKworICAgIFRoaXMgZHJpdmVyIGFuZCB0aGUgZHJpdmVyIGZvciB0aGUgVGhldGEgdGV4dCB0byBzcGVlY2ggZW5naW5lCisgICAgKHNlZSB0aGUgPHJlZiBpZD0iYnVpbGQtdGhldGEiIG5hbWU9Ii0td2l0aC10aGV0YSI+IGJ1aWxkIG9wdGlvbikKKyAgICBjYW5ub3QgYmUgc2ltdWx0YW5lb3VzbHkgbGlua2VkIGludG8gdGhlIEJSTFRUWSBiaW5hcnkKKyAgICAoc2VlIHRoZSA8cmVmIGlkPSJidWlsZC1zcGVlY2gtZHJpdmVyIiBuYW1lPSItLXdpdGgtc3BlZWNoLWRyaXZlciI+IGJ1aWxkIG9wdGlvbikKKyAgICBiZWNhdXNlIHRoZWlyIHJ1bi10aW1lIGxpYnJhcmllcyBjb250YWluIGNvbmZsaWN0aW5nIHN5bWJvbHMuCisgIDx0YWcvTGliYnJhaWxsZSBCcmFpbGxlIERpc3BsYXkgRHJpdmVyLzxsYWJlbCBpZD0icmVzdHJpY3Rpb25zLWxpYmJyYWlsbGUiPgorICAgIFRoZSBkcml2ZXIgZm9yIHRoZSBMaWJicmFpbGxlIHBhY2thZ2UKKyAgICBpcyBvbmx5IGJ1aWx0IGlmIHRoYXQgcGFja2FnZSBoYXMgYmVlbiBpbnN0YWxsZWQuCisgIDx0YWcvTWlrcm9wdWhlIFNwZWVjaCBTeW50aGVzaXplciBEcml2ZXIvPGxhYmVsIGlkPSJyZXN0cmljdGlvbnMtbWlrcm9wdWhlIj4KKyAgICBUaGUgZHJpdmVyIGZvciB0aGUgTWlrcm9wdWhlIHRleHQgdG8gc3BlZWNoIGVuZ2luZQorICAgIGlzIG9ubHkgYnVpbHQgaWYgdGhhdCBwYWNrYWdlIGhhcyBiZWVuIGluc3RhbGxlZC4KKworICAgIFRoaXMgZHJpdmVyIGNhbm5vdCBiZSBpbmNsdWRlZCBpZiB0aGUgQlJMVFRZIGJpbmFyeSBpcyBzdGF0aWNhbGx5IGxpbmtlZAorICAgIChzZWUgdGhlIDxyZWYgaWQ9ImJ1aWxkLXN0YW5kYWxvbmUtcHJvZ3JhbXMiIG5hbWU9Ii0tZW5hYmxlLXN0YW5kYWxvbmUtcHJvZ3JhbXMiPiBidWlsZCBvcHRpb24pCisgICAgYmVjYXVzZSBhIHN0YXRpYyBhcmNoaXZlIGlzbid0IGluY2x1ZGVkIHdpdGggdGhlIHBhY2thZ2UuCisgIDx0YWcvVGhldGEgU3BlZWNoIFN5bnRoZXNpemVyIERyaXZlci88bGFiZWwgaWQ9InJlc3RyaWN0aW9ucy10aGV0YSI+CisgICAgVGhlIGRyaXZlciBmb3IgdGhlIFRoZXRhIHRleHQgdG8gc3BlZWNoIGVuZ2luZQorICAgIGlzIG9ubHkgYnVpbHQgaWYgdGhhdCBwYWNrYWdlIGhhcyBiZWVuIGluc3RhbGxlZC4KKworICAgIFRoaXMgZHJpdmVyIGFuZCB0aGUgZHJpdmVyIGZvciB0aGUgRmVzdGl2YWxMaXRlIHRleHQgdG8gc3BlZWNoIGVuZ2luZQorICAgIChzZWUgdGhlIDxyZWYgaWQ9ImJ1aWxkLWZsaXRlIiBuYW1lPSItLXdpdGgtZmxpdGUiPiBidWlsZCBvcHRpb24pCisgICAgY2Fubm90IGJlIHNpbXVsdGFuZW91c2x5IGxpbmtlZCBpbnRvIHRoZSBCUkxUVFkgYmluYXJ5CisgICAgKHNlZSB0aGUgPHJlZiBpZD0iYnVpbGQtc3BlZWNoLWRyaXZlciIgbmFtZT0iLS13aXRoLXNwZWVjaC1kcml2ZXIiPiBidWlsZCBvcHRpb24pCisgICAgYmVjYXVzZSB0aGVpciBydW4tdGltZSBsaWJyYXJpZXMgY29udGFpbiBjb25mbGljdGluZyBzeW1ib2xzLgorCisgICAgSWYgdGhpcyBkcml2ZXIgaXMgYnVpbHQgYXMgYSBkeW5hbWljYWxseSBsb2FkYWJsZSBzaGFyZWQgb2JqZWN0CisgICAgdGhlbiA8dHQ+JFRIRVRBX0hPTUUvbGliPC8+IG11c3QgYmUgYWRkZWQKKyAgICB0byB0aGUgPHR0L0xEX0xJQlJBUllfUEFUSC8gZW52aXJvbm1lbnQgdmFyaWFibGUKKyAgICBiZWZvcmUgQlJMVFRZIGlzIGludm9rZWQKKyAgICBiZWNhdXNlIHRoZSBzaGFyZWQgb2JqZWN0cyB3aXRoaW4gdGhlIHBhY2thZ2UgZG9uJ3QgY29udGFpbgorICAgIHJ1bi10aW1lIHNlYXJjaCBwYXRocyBmb3IgdGhlaXIgZGVwZW5kZW5jaWVzLgorICA8dGFnL1ZpYVZvaWNlIFNwZWVjaCBTeW50aGVzaXplciBEcml2ZXIvPGxhYmVsIGlkPSJyZXN0cmljdGlvbnMtdmlhdm9pY2UiPgorICAgIFRoZSBkcml2ZXIgZm9yIHRoZSBWaWFWb2ljZSB0ZXh0IHRvIHNwZWVjaCBlbmdpbmUKKyAgICBpcyBvbmx5IGJ1aWx0IGlmIHRoYXQgcGFja2FnZSBoYXMgYmVlbiBpbnN0YWxsZWQuCisKKyAgICBUaGlzIGRyaXZlciBjYW5ub3QgYmUgaW5jbHVkZWQgaWYgdGhlIEJSTFRUWSBiaW5hcnkgaXMgc3RhdGljYWxseSBsaW5rZWQKKyAgICAoc2VlIHRoZSA8cmVmIGlkPSJidWlsZC1zdGFuZGFsb25lLXByb2dyYW1zIiBuYW1lPSItLWVuYWJsZS1zdGFuZGFsb25lLXByb2dyYW1zIj4gYnVpbGQgb3B0aW9uKQorICAgIGJlY2F1c2UgYSBzdGF0aWMgYXJjaGl2ZSBpc24ndCBpbmNsdWRlZCB3aXRoIHRoZSBwYWNrYWdlLgorICA8dGFnL1ZpZGVvQnJhaWxsZSBCcmFpbGxlIERpc3BsYXkgRHJpdmVyLzxsYWJlbCBpZD0icmVzdHJpY3Rpb25zLXZpZGVvYnJhaWxsZSI+CisgICAgVGhlIGRyaXZlciBmb3IgdGhlIFZpZGVvQnJhaWxsZSBicmFpbGxlIGRpc3BsYXkgaXMgYnVpbHQgb24gYWxsIHN5c3RlbXMsCisgICAgYnV0IG9ubHkgd29ya3Mgb24gTGludXguCis8L2Rlc2NyaXA+CisKKzxzZWN0MT5JbnN0YWxsaW5nIGZyb20gYW4gUlBNIEZpbGU8bGFiZWwgaWQ9InJwbSI+PHA+CitUbyBpbnN0YWxsIEJSTFRUWSBmcm9tIGFuIFJQTSAoUmVkSGF0IFBhY2thZ2UgTWFuYWdlcikgZmlsZSwgZG8gdGhlIGZvbGxvd2luZzoKKzxlbnVtPgorICA8aXRlbT4KKyAgICBEb3dubG9hZCB0aGUgYmluYXJ5IHBhY2thZ2Ugd2hpY2ggY29ycmVzcG9uZHMgdG8geW91ciBoYXJkd2FyZS4KKyAgICBJdCdsbCBiZSBhIGZpbGUgbmFtZWQKKyAgICA8dHQvYnJsdHR5LS88ZW0vcmVsZWFzZS88dHQvLS88ZW0vdmVyc2lvbi88dHQvLi88ZW0vYXJjaGl0ZWN0dXJlLzx0dC8ucnBtLywKKyAgICBlLmcuIDx0dC9icmx0dHktMy4wLTEuaTM4Ni5ycG0vLgorICA8aXRlbT4KKyAgICBJbnN0YWxsIHRoZSBwYWNrYWdlLgorICAgIDx0c2NyZWVuPnJwbSAtVXZoIGJybHR0eS08ZW0vcmVsZWFzZS8tPGVtL3ZlcnNpb24vLjxlbS9hcmNoaXRlY3R1cmUvLnJwbTwvdHNjcmVlbj4KKyAgICBUaGlzIHNob3VsZCBiZSBkb25lIGFzIDxiZi9yb290Ly4KKyAgICBTdHJpY3RseSBzcGVha2luZywgdGhlIDx0dC8tVS8gKHVwZGF0ZSkgb3B0aW9uIGlzIHRoZSBvbmx5IG9uZSB3aGljaCBpcyBuZWNlc3NhcnkuCisgICAgVGhlIDx0dC8tdi8gKHZlcmJvc2UpIG9wdGlvbiBkaXNwbGF5cyB0aGUgbmFtZSBvZiB0aGUgcGFja2FnZSBhcyBpdCdzIGJlaW5nIGluc3RhbGxlZC4KKyAgICBUaGUgPHR0Ly1oLyAoaGFzaGVzKSBvcHRpb24gZGlzcGxheXMgYSBwcm9ncmVzcyBtZXRlciAodXNpbmcgaGFzaCBzaWducykuCis8L2VudW0+CitGb3IgdGhlIGJyYXZlLAord2UgYWxzbyBwcm92aWRlIHRoZSBzb3VyY2UgUlBNICg8dHQvLnNyYy5ycG0vKSBmaWxlLAorYnV0IHRoYXQncyBiZXlvbmQgdGhlIHNjb3BlIG9mIHRoaXMgZG9jdW1lbnQuCisKK1RvIHVuaW5zdGFsbCBCUkxUVFksIGRvOgorPHRzY3JlZW4+cnBtIC1lIGJybHR0eTwvdHNjcmVlbj4KKworPHNlY3QxPk90aGVyIFV0aWxpdGllczxwPgorQnVpbGRpbmcgQlJMVFRZIGFsc28gcmVzdWx0cyBpbiB0aGUgYnVpbGRpbmcgb2YKK2EgZmV3IHNtYWxsIGhlbHBlciBhbmQgZGlhZ25vc3RpYyB1dGlsaXRpZXMuCisKKzxzZWN0Mj5icmx0dHktY29uZmlnPGxhYmVsIGlkPSJ1dGlsaXR5LWJybHR0eS1jb25maWciPjxwPgorVGhpcyB1dGlsaXR5IHNldHMgYSBudW1iZXIgb2YgZW52aXJvbm1lbnQgdmFyaWFibGVzIHRvIHZhbHVlcword2hpY2ggcmVmbGVjdCB0aGUgY3VycmVudCBpbnN0YWxsYXRpb24gb2YgQlJMVFRZCisoc2VlIDxyZWYgaWQ9ImJ1aWxkIiBuYW1lPSJCdWlsZCBPcHRpb25zIj4pLgorSXQgc2hvdWxkIGJlIGV4ZWN1dGVkIHdpdGhpbiBhbiBleGlzdGluZyBzaGVsbCBlbnZpcm9ubWVudCwKK2kuZS4gbm90IGFzIGEgY29tbWFuZCBpbiBpdHMgb3duIHJpZ2h0LAorYW5kIGNhbiBvbmx5IGJlIHVzZWQgYnkgc2NyaXB0cyB3aGljaCBzdXBwb3J0IDxiZi9Cb3VybmUgU2hlbGwvIHN5bnRheC4KKzx0c2NyZWVuPi4gYnJsdHR5LWNvbmZpZzwvdHNjcmVlbj4KKworVGhlIGZvbGxvd2luZyBlbnZpcm9ubWVudCB2YXJpYWJsZXMgYXJlIHNldDoKKzxkZXNjcmlwPgorICA8dGFnL0JSTFRUWV9WRVJTSU9OLworICAgIFRoZSB2ZXJzaW9uIG51bWJlciBvZiB0aGUgQlJMVFRZIHBhY2thZ2UuCisgIDx0YWcvQlJMVFRZX0VYRUNVVEVfUk9PVC8KKyAgICBSdW4tdGltZSByb290IGZvciB0aGUgaW5zdGFsbGVkIHBhY2thZ2UuCisgICAgQ29uZmlndXJlZCB2aWEgdGhlIDxyZWYgaWQ9ImJ1aWxkLWV4ZWN1dGUtcm9vdCIgbmFtZT0iLS13aXRoLWV4ZWN1dGUtcm9vdCI+IGJ1aWxkIG9wdGlvbi4KKyAgPHRhZy9CUkxUVFlfUFJPR1JBTV9ESVJFQ1RPUlkvCisgICAgRGlyZWN0b3J5IGZvciBydW5uYWJsZSBwcm9ncmFtcyAoYmluYXJpZXMsIGV4ZWN1dGFibGVzKS4KKyAgICBDb25maWd1cmVkIHZpYSB0aGUgPHJlZiBpZD0iYnVpbGQtcHJvZ3JhbS1kaXJlY3RvcnkiIG5hbWU9Ii0td2l0aC1wcm9ncmFtLWRpcmVjdG9yeSI+IGJ1aWxkIG9wdGlvbi4KKyAgPHRhZy9CUkxUVFlfTElCUkFSWV9ESVJFQ1RPUlkvCisgICAgRGlyZWN0b3J5IGZvciBkcml2ZXJzLgorICAgIENvbmZpZ3VyZWQgdmlhIHRoZSA8cmVmIGlkPSJidWlsZC1saWJyYXJ5LWRpcmVjdG9yeSIgbmFtZT0iLS13aXRoLWxpYnJhcnktZGlyZWN0b3J5Ij4gYnVpbGQgb3B0aW9uLgorICA8dGFnL0JSTFRUWV9XUklUQUJMRV9ESVJFQ1RPUlkvCisgICAgRGlyZWN0b3J5IHdoaWNoIGNhbiBiZSB3cml0dGVuIHRvLgorICAgIENvbmZpZ3VyZWQgdmlhIHRoZSA8cmVmIGlkPSJidWlsZC13cml0YWJsZS1kaXJlY3RvcnkiIG5hbWU9Ii0td2l0aC13cml0YWJsZS1kaXJlY3RvcnkiPiBidWlsZCBvcHRpb24uCisgIDx0YWcvQlJMVFRZX0RBVEFfRElSRUNUT1JZLworICAgIERpcmVjdG9yeSBmb3IgdGFibGVzIGFuZCBoZWxwIHBhZ2VzLgorICAgIENvbmZpZ3VyZWQgdmlhIHRoZSA8cmVmIGlkPSJidWlsZC1kYXRhLWRpcmVjdG9yeSIgbmFtZT0iLS13aXRoLWRhdGEtZGlyZWN0b3J5Ij4gYnVpbGQgb3B0aW9uLgorICA8dGFnL0JSTFRUWV9NQU5QQUdFX0RJUkVDVE9SWS8KKyAgICBEaXJlY3RvcnkgZm9yIG1hbnVhbCBwYWdlcy4KKyAgICBDb25maWd1cmVkIHZpYSB0aGUgPHJlZiBpZD0iYnVpbGQtbWFucGFnZS1kaXJlY3RvcnkiIG5hbWU9Ii0td2l0aC1tYW5wYWdlLWRpcmVjdG9yeSI+IGJ1aWxkIG9wdGlvbi4KKyAgPHRhZy9CUkxUVFlfSU5DTFVERV9ESVJFQ1RPUlkvCisgICAgRGlyZWN0b3J5IGZvciBCcmxBUEkncyBDIGhlYWRlciBmaWxlcy4KKyAgICBDb25maWd1cmVkIHZpYSB0aGUgPHJlZiBpZD0iYnVpbGQtaW5jbHVkZS1kaXJlY3RvcnkiIG5hbWU9Ii0td2l0aC1pbmNsdWRlLWRpcmVjdG9yeSI+IGJ1aWxkIG9wdGlvbi4KKyAgPHRhZy9CUkxBUElfVkVSU0lPTi8KKyAgICBUaGUgdmVyc2lvbiBudW1iZXIgb2YgQnJsQVBJIChCUkxUVFkncyBBcHBsaWNhdGlvbiBQcm9ncmFtbWluZyBJbnRlcmZhY2UpLgorICA8dGFnL0JSTEFQSV9SRUxFQVNFLworICAgIFRoZSBmdWxsIHJlbGVhc2UgbnVtYmVyIG9mIEJybEFQSS4KKyAgPHRhZy9CUkxBUElfQVVUSC8KKyAgICBUaGUgbmFtZSBvZiBCcmxBUEkncyBrZXkgZmlsZS4KKzwvZGVzY3JpcD4KKworSW4gYWRkaXRpb24sIHRoZSBmb2xsb3dpbmcgc3RhbmRhcmQgPGJmL2F1dG9jb25mLyBlbnZpcm9ubWVudCB2YXJpYWJsZXMgYXJlIGFsc28gc2V0OgorPGRlc2NyaXA+CisgIDx0YWcvcHJlZml4LworICAgIFN1YnJvb3QgZm9yIGFyY2hpdGVjdHVyZS1pbmRlcGVuZGVudCBmaWxlcy4KKyAgICBDb25maWd1cmVkIHZpYSB0aGUgPHJlZiBpZD0iYnVpbGQtcG9ydGFibGUtcm9vdCIgbmFtZT0iLS1wcmVmaXgiPiBidWlsZCBvcHRpb24uCisgIDx0YWcvZXhlY19wcmVmaXgvCisgICAgU3Vicm9vdCBmb3IgYXJjaGl0ZWN0dXJlLWRlcGVuZGVudCBmaWxlcy4KKyAgICBDb25maWd1cmVkIHZpYSB0aGUgPHJlZiBpZD0iYnVpbGQtYXJjaGl0ZWN0dXJlLXJvb3QiIG5hbWU9Ii0tZXhlYy1wcmVmaXgiPiBidWlsZCBvcHRpb24uCisgIDx0YWcvYmluZGlyLworICAgIERlZmF1bHQgbG9jYXRpb24gZm9yIDxyZWYgaWQ9ImJ1aWxkLXByb2dyYW0tZGlyZWN0b3J5IiBuYW1lPSJwcm9ncmFtIGRpcmVjdG9yeSI+LgorICAgIENvbmZpZ3VyZWQgdmlhIHRoZSA8dHQvLS1iaW5kaXIvIGJ1aWxkIG9wdGlvbi4KKyAgPHRhZy9saWJkaXIvCisgICAgRGlyZWN0b3J5IGZvciBCcmxBUEkncyBzdGF0aWMgYXJjaGl2ZSBhbmQgZHluYW1pY2FsbHkgbG9hZGFibGUgb2JqZWN0LgorICAgIERlZmF1bHQgYW5jaG9yIGZvciA8cmVmIGlkPSJidWlsZC1saWJyYXJ5LWRpcmVjdG9yeSIgbmFtZT0ibGlicmFyeSBkaXJlY3RvcnkiPi4KKyAgICBDb25maWd1cmVkIHZpYSB0aGUgPHJlZiBpZD0iYnVpbGQtYXBpLWRpcmVjdG9yeSIgbmFtZT0iLS1saWJkaXIiPiBidWlsZCBvcHRpb24uCisgIDx0YWcvc3lzY29uZmRpci8KKyAgICBEaXJlY3RvcnkgZm9yIGNvbmZpZ3VyYXRpb24gZmlsZXMuCisgICAgRGVmYXVsdCBhbmNob3IgZm9yIDxyZWYgaWQ9ImJ1aWxkLWRhdGEtZGlyZWN0b3J5IiBuYW1lPSJkYXRhIGRpcmVjdG9yeSI+LgorICAgIENvbmZpZ3VyZWQgdmlhIHRoZSA8cmVmIGlkPSJidWlsZC1jb25maWd1cmF0aW9uLWRpcmVjdG9yeSIgbmFtZT0iLS1zeXNjb25mZGlyIj4gYnVpbGQgb3B0aW9uLgorICA8dGFnL21hbmRpci8KKyAgICBEZWZhdWx0IGxvY2F0aW9uIGZvciA8cmVmIGlkPSJidWlsZC1tYW5wYWdlLWRpcmVjdG9yeSIgbmFtZT0ibWFudWFsIHBhZ2VzIGRpcmVjdG9yeSI+LgorICAgIENvbmZpZ3VyZWQgdmlhIHRoZSA8dHQvLS1tYW5kaXIvIGJ1aWxkIG9wdGlvbi4KKyAgPHRhZy9pbmNsdWRlZGlyLworICAgIERlZmF1bHQgYW5jaG9yIGZvciA8cmVmIGlkPSJidWlsZC1pbmNsdWRlLWRpcmVjdG9yeSIgbmFtZT0iaGVhZGVyIGZpbGVzIGRpcmVjdG9yeSI+LgorICAgIENvbmZpZ3VyZWQgdmlhIHRoZSA8dHQvLS1pbmNsdWRlZGlyLyBidWlsZCBvcHRpb24uCis8L2Rlc2NyaXA+CisKKzxzZWN0Mj5icmx0dHktaW5zdGFsbDxsYWJlbCBpZD0idXRpbGl0eS1icmx0dHktaW5zdGFsbCI+PHA+CitUaGlzIHV0aWxpdHkgY29waWVzIEJSTFRUWSdzCis8cmVmIGlkPSJoaWVyYXJjaHkiIG5hbWU9Imluc3RhbGxlZCBmaWxlIGhpZXJhcmNoeSI+Citmcm9tIG9uZSBsb2NhdGlvbiB0byBhbm90aGVyLgorPHRzY3JlZW4+YnJsdHR5LWluc3RhbGwgPGVtL3RvLyAmbHNxYjs8ZW0vZnJvbS8mcnNxYjs8L3RzY3JlZW4+Cis8ZGVzY3JpcD4KKyAgPHRhZz48ZW0vdG8vPC90YWc+CisgICAgVGhlIGxvY2F0aW9uIHRvIHdoaWNoIHRoZQorICAgIDxyZWYgaWQ9ImhpZXJhcmNoeSIgbmFtZT0iaW5zdGFsbGVkIGZpbGUgaGllcmFyY2h5Ij4KKyAgICBpcyB0byBiZSBjb3BpZWQuCisgICAgSXQgbXVzdCBiZSBhbiBleGlzdGluZyBkaXJlY3RvcnkuCisgIDx0YWc+PGVtL2Zyb20vPC90YWc+CisgICAgVGhlIGxvY2F0aW9uIGZyb20gd2hpY2ggdGhlCisgICAgPHJlZiBpZD0iaGllcmFyY2h5IiBuYW1lPSJpbnN0YWxsZWQgZmlsZSBoaWVyYXJjaHkiPgorICAgIGlzIHRvIGJlIHRha2VuLgorICAgIElmIGl0J3Mgc3BlY2lmaWVkLCB0aGVuIGl0IG11c3QgYmUgYW4gZXhpc3RpbmcgZGlyZWN0b3J5LgorICAgIElmIGl0J3Mgbm90IHNwZWNpZmllZCwgdGhlbiB0aGUgbG9jYXRpb24gdXNlZCBmb3IgdGhlIGJ1aWxkIGlzIGFzc3VtZWQuCis8L2Rlc2NyaXA+CisKK1RoaXMgdXRpbGl0eSBjYW4gYmUgdXNlZCwgZm9yIGV4YW1wbGUsIHRvIGNvcHkgQlJMVFRZIHRvIGEgcm9vdCBkaXNrLgorSWYgYSByb290IGZsb3BweSBpcyBtb3VudGVkIGFzIDx0dD4vbW50PC8+LAorYW5kIEJSTFRUWSBpcyBpbnN0YWxsZWQgb24gdGhlIG1haW4gc3lzdGVtLAordGhlbiB0eXBpbmcgPHRzY3JlZW4+YnJsdHR5LWluc3RhbGwgL21udDwvdHNjcmVlbj4KK2NvcGllcyBCUkxUVFksIGFsb25nIHdpdGggYWxsIG9mIGl0cyBkYXRhIGFuZCBsaWJyYXJ5IGZpbGVzLAordG8gdGhlIHJvb3QgZmxvcHB5LgorCitTb21lIHByb2JsZW1zIGhhdmUgYmVlbiBleHBlcmllbmNlZCB3aGVuIGNvcHlpbmcgQlJMVFRZCitiZXR3ZWVuIHN5c3RlbXMgd2l0aCBkaWZmZXJlbnQgdmVyc2lvbnMgb2YgdGhlIHNoYXJlZCBDIGxpYnJhcnkuCitUaGlzIGlzIHdvcnRoIGludmVzdGlnYXRpbmcgaWYgeW91IGhhdmUgZGlmZmljdWx0aWVzLgorCis8c2VjdDI+YnJsdGVzdDxsYWJlbCBpZD0idXRpbGl0eS1icmx0ZXN0Ij48cD4KK1RoaXMgdXRpbGl0eSB0ZXN0cyBhIGJyYWlsbGUgZGlzcGxheSBkcml2ZXIsCithbmQgYWxzbyBwcm92aWRlcyBhbiBpbnRlcmFjdGl2ZSB3YXkgdG8gbGVhcm4KK3doYXQgdGhlIGtleXMgb24gdGhlIGJyYWlsbGUgZGlzcGxheSBkby4KK0l0IHNob3VsZCBiZSBydW4gYXMgcm9vdC4KKzx0c2NyZWVuPmJybHRlc3QgLTxlbS9vcHRpb24vIC4uLiBbPGVtL2RyaXZlci8gWzxlbS9uYW1lLz08ZW0vdmFsdWUvIC4uLl1dPC90c2NyZWVuPgorPGRlc2NyaXA+CisgIDx0YWc+PGVtL2RyaXZlci88L3RhZz4KKyAgICBUaGUgZHJpdmVyIGZvciB0aGUgYnJhaWxsZSBkaXNwbGF5LgorICAgIEl0IG11c3QgYmUgYSB0d28tbGV0dGVyIDxyZWYgaWQ9ImRyaXZlcnMiIG5hbWU9ImRyaXZlciBpZGVudGlmaWNhdGlvbiBjb2RlIj4uCisgICAgSWYgaXQncyBub3Qgc3BlY2lmaWVkLCB0aGVuIHRoZSBmaXJzdCBkcml2ZXIgY29uZmlndXJlZCB2aWEgdGhlCisgICAgPHJlZiBpZD0iYnVpbGQtYnJhaWxsZS1kcml2ZXIiIG5hbWU9Ii0td2l0aC1icmFpbGxlLWRyaXZlciI+IGJ1aWxkIG9wdGlvbgorICAgIGlzIGFzc3VtZWQuCisgIDx0YWc+PGVtL25hbWUvPHR0Lz0vPGVtL3ZhbHVlLzwvdGFnPgorICAgIFNldCBhIGJyYWlsbGUgZGlzcGxheSBkcml2ZXIgcGFyYW1ldGVyLgorICAgIEZvciBhIGRlc2NyaXB0aW9uIG9mIHRoZSBwYXJhbWV0ZXJzIGFjY2VwdGVkIGJ5IGEgc3BlY2lmaWMgZHJpdmVyLAorICAgIHBsZWFzZSBzZWUgdGhlIGRvY3VtZW50YXRpb24gZm9yIHRoYXQgZHJpdmVyLgorICA8dGFnPjx0dC8tZC88ZW0vZGV2aWNlLyA8dHQvLS1kZXZpY2U9LzxlbS9kZXZpY2UvPC90YWc+CisgICAgVGhlIGFic29sdXRlIHBhdGggZm9yIHRoZSBkZXZpY2UgdG8gd2hpY2ggdGhlIGJyYWlsbGUgZGlzcGxheSBpcyBjb25uZWN0ZWQuCisgICAgSWYgaXQncyBub3Qgc3BlY2lmaWVkLCB0aGVuIHRoZSBkZXZpY2UgY29uZmlndXJlZCB2aWEgdGhlCisgICAgPHJlZiBpZD0iYnVpbGQtYnJhaWxsZS1kZXZpY2UiIG5hbWU9Ii0td2l0aC1icmFpbGxlLWRldmljZSI+IGJ1aWxkIG9wdGlvbgorICAgIGlzIGFzc3VtZWQuCisgIDx0YWc+PHR0Ly1ELzxlbS9kaXJlY3RvcnkvIDx0dC8tLWRhdGEtZGlyZWN0b3J5PS88ZW0vZGlyZWN0b3J5LzwvdGFnPgorICAgIFRoZSBhYnNvbHV0ZSBwYXRoIGZvciB0aGUgZGlyZWN0b3J5IHdoZXJlaW4gdGhlIGRyaXZlciBkYXRhIGZpbGVzIHJlc2lkZS4KKyAgICBJZiBpdCdzIG5vdCBzcGVjaWZpZWQsIHRoZW4gdGhlIGRpcmVjdG9yeSBjb25maWd1cmVkIHZpYSB0aGUKKyAgICA8cmVmIGlkPSJidWlsZC1kYXRhLWRpcmVjdG9yeSIgbmFtZT0iLS13aXRoLWRhdGEtZGlyZWN0b3J5Ij4gYnVpbGQgb3B0aW9uCisgICAgaXMgYXNzdW1lZC4KKyAgPHRhZz48dHQvLUwvPGVtL2RpcmVjdG9yeS8gPHR0Ly0tbGlicmFyeS1kaXJlY3Rvcnk9LzxlbS9kaXJlY3RvcnkvPC90YWc+CisgICAgVGhlIGFic29sdXRlIHBhdGggZm9yIHRoZSBkaXJlY3Rvcnkgd2hlcmVpbiB0aGUgZHJpdmVycyByZXNpZGUuCisgICAgSWYgaXQncyBub3Qgc3BlY2lmaWVkLCB0aGVuIHRoZSBkaXJlY3RvcnkgY29uZmlndXJlZCB2aWEgdGhlCisgICAgPHJlZiBpZD0iYnVpbGQtbGlicmFyeS1kaXJlY3RvcnkiIG5hbWU9Ii0tbGliZGlyIj4gYnVpbGQgb3B0aW9uCisgICAgaXMgYXNzdW1lZC4KKyAgPHRhZz48dHQvLVcvPGVtL2RpcmVjdG9yeS8gPHR0Ly0td3JpdGFibGUtZGlyZWN0b3J5PS88ZW0vZGlyZWN0b3J5LzwvdGFnPgorICAgIFRoZSBhYnNvbHV0ZSBwYXRoIGZvciBhIGRpcmVjdG9yeSB3aGljaCBjYW4gYmUgd3JpdHRlbiB0by4KKyAgICBJZiBpdCdzIG5vdCBzcGVjaWZpZWQsIHRoZW4gdGhlIGRpcmVjdG9yeSBjb25maWd1cmVkIHZpYSB0aGUKKyAgICA8cmVmIGlkPSJidWlsZC13cml0YWJsZS1kaXJlY3RvcnkiIG5hbWU9Ii0td2l0aC13cml0YWJsZS1kaXJlY3RvcnkiPiBidWlsZCBvcHRpb24KKyAgICBpcyBhc3N1bWVkLgorICA8dGFnPjx0dC8taC8gPHR0Ly0taGVscC88L3RhZz4KKyAgICBEaXNwbGF5IGEgc3VtbWFyeSBvZiB0aGUgY29tbWFuZCBsaW5lIG9wdGlvbnMsIGFuZCB0aGVuIGV4aXQuCis8L2Rlc2NyaXA+CisKK1RoaXMgdXRpbGl0eSB1c2VzIEJSTFRUWSdzIDxyZWYgaWQ9ImxlYXJuIiBuYW1lPSJDb21tYW5kIExlYXJuIE1vZGUiPi4KK1RoZSBrZXkgcHJlc3MgdGltZW91dAorKGFmdGVyIHdoaWNoIHRoaXMgdXRpbGl0eSBleGl0cykKK2lzIDx0dC8xMC8gc2Vjb25kcy4KK1RoZSBtZXNzYWdlIGhvbGQgdGltZQorKHVzZWQgZm9yIG5vbi1maW5hbCBzZWdtZW50cyBvZiBsb25nIG1lc3NhZ2VzKQoraXMgPHR0LzQvIHNlY29uZHMuCisKKzxzZWN0Mj5zcGt0ZXN0PGxhYmVsIGlkPSJ1dGlsaXR5LXNwa3Rlc3QiPjxwPgorVGhpcyB1dGlsaXR5IHRlc3RzIGEgc3BlZWNoIHN5bnRoZXNpemVyIGRyaXZlci4KK0l0IG1heSBuZWVkIHRvIGJlIHJ1biBhcyByb290LgorPHRzY3JlZW4+c3BrdGVzdCAtPGVtL29wdGlvbi8gLi4uIFs8ZW0vZHJpdmVyLyBbPGVtL25hbWUvPTxlbS92YWx1ZS8gLi4uXV08L3RzY3JlZW4+Cis8ZGVzY3JpcD4KKyAgPHRhZz48ZW0vZHJpdmVyLzwvdGFnPgorICAgIFRoZSBkcml2ZXIgZm9yIHRoZSBzcGVlY2ggc3ludGhlc2l6ZXIuCisgICAgSXQgbXVzdCBiZSBhIHR3by1sZXR0ZXIgPHJlZiBpZD0iZHJpdmVycyIgbmFtZT0iZHJpdmVyIGlkZW50aWZpY2F0aW9uIGNvZGUiPi4KKyAgICBJZiBpdCdzIG5vdCBzcGVjaWZpZWQsIHRoZW4gdGhlIGZpcnN0IGRyaXZlciBjb25maWd1cmVkIHZpYSB0aGUKKyAgICA8cmVmIGlkPSJidWlsZC1zcGVlY2gtZHJpdmVyIiBuYW1lPSItLXdpdGgtc3BlZWNoLWRyaXZlciI+IGJ1aWxkIG9wdGlvbgorICAgIGlzIGFzc3VtZWQuCisgIDx0YWc+PGVtL25hbWUvPHR0Lz0vPGVtL3ZhbHVlLzwvdGFnPgorICAgIFNldCBhIHNwZWVjaCBzeW50aGVzaXplciBkcml2ZXIgcGFyYW1ldGVyLgorICAgIEZvciBhIGRlc2NyaXB0aW9uIG9mIHRoZSBwYXJhbWV0ZXJzIGFjY2VwdGVkIGJ5IGEgc3BlY2lmaWMgZHJpdmVyLAorICAgIHBsZWFzZSBzZWUgdGhlIGRvY3VtZW50YXRpb24gZm9yIHRoYXQgZHJpdmVyLgorICA8dGFnPjx0dC8tdC88ZW0vc3RyaW5nLyA8dHQvLS10ZXh0LXN0cmluZz0vPGVtL3N0cmluZy88L3RhZz4KKyAgICBUaGUgdGV4dCB0byBiZSBzcG9rZW4uCisgICAgSWYgaXQncyBub3Qgc3BlY2lmaWVkLCB0aGVuIHN0YW5kYXJkIGlucHV0IGlzIHJlYWQuCisgIDx0YWc+PHR0Ly1ELzxlbS9kaXJlY3RvcnkvIDx0dC8tLWRhdGEtZGlyZWN0b3J5PS88ZW0vZGlyZWN0b3J5LzwvdGFnPgorICAgIFRoZSBhYnNvbHV0ZSBwYXRoIGZvciB0aGUgZGlyZWN0b3J5IHdoZXJlaW4gdGhlIGRyaXZlciBkYXRhIGZpbGVzIHJlc2lkZS4KKyAgICBJZiBpdCdzIG5vdCBzcGVjaWZpZWQsIHRoZW4gdGhlIGRpcmVjdG9yeSBjb25maWd1cmVkIHZpYSB0aGUKKyAgICA8cmVmIGlkPSJidWlsZC1kYXRhLWRpcmVjdG9yeSIgbmFtZT0iLS13aXRoLWRhdGEtZGlyZWN0b3J5Ij4gYnVpbGQgb3B0aW9uCisgICAgaXMgYXNzdW1lZC4KKyAgPHRhZz48dHQvLUwvPGVtL2RpcmVjdG9yeS8gPHR0Ly0tbGlicmFyeS1kaXJlY3Rvcnk9LzxlbS9kaXJlY3RvcnkvPC90YWc+CisgICAgVGhlIGFic29sdXRlIHBhdGggZm9yIHRoZSBkaXJlY3Rvcnkgd2hlcmVpbiB0aGUgZHJpdmVycyByZXNpZGUuCisgICAgSWYgaXQncyBub3Qgc3BlY2lmaWVkLCB0aGVuIHRoZSBkaXJlY3RvcnkgY29uZmlndXJlZCB2aWEgdGhlCisgICAgPHJlZiBpZD0iYnVpbGQtbGlicmFyeS1kaXJlY3RvcnkiIG5hbWU9Ii0tbGliZGlyIj4gYnVpbGQgb3B0aW9uCisgICAgaXMgYXNzdW1lZC4KKyAgPHRhZz48dHQvLWgvIDx0dC8tLWhlbHAvPC90YWc+CisgICAgRGlzcGxheSBhIHN1bW1hcnkgb2YgdGhlIGNvbW1hbmQgbGluZSBvcHRpb25zLCBhbmQgdGhlbiBleGl0LgorPC9kZXNjcmlwPgorCis8c2VjdDI+c2NydGVzdDxsYWJlbCBpZD0idXRpbGl0eS1zY3J0ZXN0Ij48cD4KK1RoaXMgdXRpbGl0eSB0ZXN0cyB0aGUgc2NyZWVuIGRyaXZlci4KK0l0IG11c3QgYmUgcnVuIGFzIHJvb3QuCis8dHNjcmVlbj5zY3J0ZXN0IC08ZW0vb3B0aW9uLyAuLi4gWzxlbS9uYW1lLz08ZW0vdmFsdWUvIC4uLl08L3RzY3JlZW4+Cis8ZGVzY3JpcD4KKyAgPHRhZz48ZW0vbmFtZS88dHQvPS88ZW0vdmFsdWUvPC90YWc+CisgICAgU2V0IGEgc2NyZWVuIGRyaXZlciBwYXJhbWV0ZXIuCisgICAgRm9yIGEgZGVzY3JpcHRpb24gb2YgdGhlIHBhcmFtZXRlcnMgYWNjZXB0ZWQgYnkgYSBzcGVjaWZpYyBkcml2ZXIsCisgICAgcGxlYXNlIHNlZSB0aGUgZG9jdW1lbnRhdGlvbiBmb3IgdGhhdCBkcml2ZXIuCisgIDx0YWc+PHR0Ly1sLzxlbS9jb2x1bW4vIDx0dC8tLWxlZnQ9LzxlbS9jb2x1bW4vPC90YWc+CisgICAgU3BlY2lmeSB0aGUgc3RhcnRpbmcgKGxlZnQpIGNvbHVtbiAoemVyby1vcmlnaW4pIG9mIHRoZSByZWdpb24uCisgICAgSWYgdGhpcyB2YWx1ZSBpc24ndCBzdXBwbGllZCwKKyAgICB0aGVuIGEgZGVmYXVsdCB2YWx1ZSwgYmFzZWQgb24gdGhlIHNwZWNpZmllZCB3aWR0aCwKKyAgICBpcyBzZWxlY3RlZCBzdWNoIHRoYXQgdGhlIHJlZ2lvbiBpcyBob3Jpem9udGFsbHkgY2VudHJlZC4KKyAgPHRhZz48dHQvLWMvPGVtL2NvdW50LyA8dHQvLS1jb2x1bW5zPS88ZW0vY291bnQvPC90YWc+CisgICAgU3BlY2lmeSB0aGUgd2lkdGggb2YgdGhlIHJlZ2lvbiAoaW4gY29sdW1ucykuCisgICAgSWYgdGhpcyB2YWx1ZSBpc24ndCBzdXBwbGllZCwKKyAgICB0aGVuIGEgZGVmYXVsdCB2YWx1ZSwgYmFzZWQgb24gdGhlIHNwZWNpZmllZCBzdGFydGluZyBjb2x1bW4sCisgICAgaXMgc2VsZWN0ZWQgc3VjaCB0aGF0IHRoZSByZWdpb24gaXMgaG9yaXpvbnRhbGx5IGNlbnRyZWQuCisgIDx0YWc+PHR0Ly10LzxlbS9yb3cvIDx0dC8tLXRvcD0vPGVtL3Jvdy88L3RhZz4KKyAgICBTcGVjaWZ5IHRoZSBzdGFydGluZyAodG9wKSByb3cgKHplcm8tb3JpZ2luKSBvZiB0aGUgcmVnaW9uLgorICAgIElmIHRoaXMgdmFsdWUgaXNuJ3Qgc3VwcGxpZWQsCisgICAgdGhlbiBhIGRlZmF1bHQgdmFsdWUsIGJhc2VkIG9uIHRoZSBzcGVjaWZpZWQgaGVpZ2h0LAorICAgIGlzIHNlbGVjdGVkIHN1Y2ggdGhhdCB0aGUgcmVnaW9uIGlzIHZlcnRpY2FsbHkgY2VudHJlZC4KKyAgPHRhZz48dHQvLXIvPGVtL2NvdW50LyA8dHQvLS1yb3dzPS88ZW0vY291bnQvPC90YWc+CisgICAgU3BlY2lmeSB0aGUgaGVpZ2h0IG9mIHRoZSByZWdpb24gKGluIHJvd3MpLgorICAgIElmIHRoaXMgdmFsdWUgaXNuJ3Qgc3VwcGxpZWQsCisgICAgdGhlbiBhIGRlZmF1bHQgdmFsdWUsIGJhc2VkIG9uIHRoZSBzcGVjaWZpZWQgc3RhcnRpbmcgcm93LAorICAgIGlzIHNlbGVjdGVkIHN1Y2ggdGhhdCB0aGUgcmVnaW9uIGlzIHZlcnRpY2FsbHkgY2VudHJlZC4KKyAgPHRhZz48dHQvLWgvIDx0dC8tLWhlbHAvPC90YWc+CisgICAgRGlzcGxheSBhIHN1bW1hcnkgb2YgdGhlIGNvbW1hbmQgbGluZSBvcHRpb25zLCBhbmQgdGhlbiBleGl0LgorPC9kZXNjcmlwPgorCitOb3RlczoKKzxpdGVtaXplPgorICA8aXRlbT4KKyAgICBJZiBuZWl0aGVyIGEgc3RhcnRpbmcgY29sdW1uIG5vciBhIHJlZ2lvbiB3aWR0aCBpcyBzcGVjaWZpZWQsCisgICAgdGhlbiB0aGUgcmVnaW9uIGlzIGhvcml6b250YWxseS1jZW50cmVkIGFuZCBzdGFydHMgYXQgY29sdW1uIDUuCisgIDxpdGVtPgorICAgIElmIG5laXRoZXIgYSBzdGFydGluZyByb3cgbm9yIGEgcmVnaW9uIGhlaWdodCBpcyBzcGVjaWZpZWQsCisgICAgdGhlbiB0aGUgcmVnaW9uIGlzIHZlcnRpY2FsbHktY2VudHJlZCBhbmQgc3RhcnRzIGF0IHJvdyA1LgorPC9pdGVtaXplPgorCitUaGUgZm9sbG93aW5nIGlzIHdyaXR0ZW4gdG8gc3RhbmRhcmQgb3V0cHV0OgorPGVudW0+CisgIDxpdGVtPgorICAgIEEgbGluZSBkZXRhaWxpbmcgdGhlIGRpbWVuc2lvbnMgb2YgdGhlIHNjcmVlbi4KKyAgICA8dHNjcmVlbj5TY3JlZW46IDxlbS93aWR0aC94PGVtL2hlaWdodC88L3RzY3JlZW4+CisgIDxpdGVtPgorICAgIEEgbGluZSBkZXRhaWxpbmcgdGhlIHBvc2l0aW9uICh6ZXJvLW9yaWdpbikgb2YgdGhlIGN1cnNvci4KKyAgICA8dHNjcmVlbj5DdXJzb3I6ICZsc3FiOzxlbS9jb2x1bW4vLDxlbS9yb3cvJnJzcWI7PC90c2NyZWVuPgorICA8aXRlbT4KKyAgICBBIGxpbmUgZGV0YWlsaW5nIHRoZSBzaXplIG9mIHRoZSBzZWxlY3RlZCBzY3JlZW4gcmVnaW9uLAorICAgIGFuZCB0aGUgcG9zaXRpb24gKHplcm8tb3JpZ2luKSBvZiBpdHMgdG9wLWxlZnQgY29ybmVyLgorICAgIDx0c2NyZWVuPlJlZ2lvbjogPGVtL3dpZHRoL3g8ZW0vaGVpZ2h0L0AmbHNxYjs8ZW0vY29sdW1uLyw8ZW0vcm93LyZyc3FiOzwvdHNjcmVlbj4KKyAgPGl0ZW0+CisgICAgVGhlIGNvbnRlbnRzIG9mIHRoZSBzZWxlY3RlZCBzY3JlZW4gcmVnaW9uLgorICAgIFVucHJpbnRhYmxlIGNoYXJhY3RlcnMgYXJlIHdyaXR0ZW4gYXMgYmxhbmtzLgorPC9lbnVtPgorCis8c2VjdDI+dHRidGVzdDxsYWJlbCBpZD0idXRpbGl0eS10dGJ0ZXN0Ij48cD4KK1RoaXMgdXRpbGl0eSB0ZXN0cyBhIHRleHQgdGFibGUKKyhzZWUgc2VjdGlvbiA8cmVmIGlkPSJ0YWJsZS10ZXh0IiBuYW1lPSJUZXh0IFRhYmxlcyI+KS4KKzx0c2NyZWVuPnR0YnRlc3QgLTxlbS9vcHRpb24vIC4uLiA8ZW0vaW5wdXQtdGFibGUvIDxlbS9vdXRwdXQtdGFibGUvPC90c2NyZWVuPgorPGRlc2NyaXA+CisgIDx0YWc+PGVtL2lucHV0LXRhYmxlLzwvdGFnPgorICAgIFRoZSBmaWxlIHN5c3RlbSBwYXRoIHRvIHRoZSBpbnB1dCB0ZXh0IHRhYmxlLgorICAgIElmIGl0J3MgcmVsYXRpdmUgdGhlbiBpdCdzIGFuY2hvcmVkIGF0IHRoZSBkaXJlY3RvcnkgY29uZmlndXJlZCB2aWEgdGhlCisgICAgPHJlZiBpZD0iYnVpbGQtZGF0YS1kaXJlY3RvcnkiIG5hbWU9Ii0td2l0aC1kYXRhLWRpcmVjdG9yeSI+IGJ1aWxkIG9wdGlvbi4KKyAgPHRhZz48ZW0vb3V0cHV0LXRhYmxlLzwvdGFnPgorICAgIFRoZSBmaWxlIHN5c3RlbSBwYXRoIHRvIHRoZSBvdXRwdXQgdGV4dCB0YWJsZS4KKyAgICBJZiBpdCdzIHJlbGF0aXZlIHRoZW4gaXQncyBhbmNob3JlZCBhdCB0aGUgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeS4KKyAgICBJZiB0aGlzIHBhcmFtZXRlciBpc24ndCBzdXBwbGllZCB0aGVuIG5vIG91dHB1dCB0YWJsZSBpcyB3cml0dGVuLgorICA8dGFnPjx0dC8taS88ZW0vZm9ybWF0LyA8dHQvLS1pbnB1dC1mb3JtYXQ9LzxlbS9mb3JtYXQvPC90YWc+CisgICAgU3BlY2lmeSB0aGUgZm9ybWF0IG9mIHRoZSBpbnB1dCB0YWJsZS4KKyAgICBJZiB0aGlzIG9wdGlvbiBpc24ndCBzdXBwbGllZCB0aGVuIHRoZSBmb3JtYXQgb2YgdGhlIGlucHV0IHRhYmxlCisgICAgaXMgZGVkdWNlZCBmcm9tIHRoZSBleHRlbnNpb24gb2YgdGhlIGlucHV0IHRhYmxlJ3MgZmlsZSBuYW1lLgorICA8dGFnPjx0dC8tby88ZW0vZm9ybWF0LyA8dHQvLS1vdXRwdXQtZm9ybWF0PS88ZW0vZm9ybWF0LzwvdGFnPgorICAgIFNwZWNpZnkgdGhlIGZvcm1hdCBvZiB0aGUgb3V0cHV0IHRhYmxlLgorICAgIElmIHRoaXMgb3B0aW9uIGlzbid0IHN1cHBsaWVkIHRoZW4gdGhlIGZvcm1hdCBvZiB0aGUgb3V0cHV0IHRhYmxlCisgICAgaXMgZGVkdWNlZCBmcm9tIHRoZSBleHRlbnNpb24gb2YgdGhlIG91dHB1dCB0YWJsZSdzIGZpbGUgbmFtZS4KKyAgPHRhZz48dHQvLWMvPGVtL2NoYXJzZXQvIDx0dC8tLWNoYXJzZXQ9LzxlbS9jaGFyc2V0LzwvdGFnPgorICAgIFNwZWNpZnkgdGhlIG5hbWUgb2YgdGhlIDgtYml0IGNoYXJhY3RlciBzZXQgdG8gdXNlIHdoZW4gaW50ZXJwcmV0aW5nIHRoZSB0YWJsZXMuCisgICAgSWYgdGhpcyBvcHRpb24gaXNuJ3Qgc3VwcGxpZWQgdGhlbiB0aGUgaG9zdCdzIGNoYXJhY3RlciBzZXQgaXMgdXNlZC4KKyAgPHRhZz48dHQvLWUvIDx0dC8tLWVkaXQvPC90YWc+CisgICAgSW52b2tlIHRoZSB0ZXh0IHRhYmxlIGVkaXRvci4KKyAgICBJZiB0aGUgb3V0cHV0IHRhYmxlIGlzIHNwZWNpZmllZCB0aGVuIGNoYW5nZXMgYXJlIHdyaXR0ZW4gdG8gaXQuCisgICAgSWYgbm90IHRoZW4gdGhlIGlucHV0IHRhYmxlIGlzIHJld3JpdHRlbi4KKyAgPHRhZz48dHQvLWgvIDx0dC8tLWhlbHAvPC90YWc+CisgICAgRGlzcGxheSBhIHN1bW1hcnkgb2YgdGhlIGNvbW1hbmQgbGluZSBvcHRpb25zLCBhbmQgdGhlbiBleGl0LgorPC9kZXNjcmlwPgorCitJZiBubyBzcGVjaWFsIGFjdGlvbiBpcyByZXF1ZXN0ZWQgdGhlbiB0aGUgb3V0cHV0IHRhYmxlIGlzIG9wdGlvbmFsLgorSWYgaXQgaXMgbm90IHNwZWNpZmllZCB0aGVuIHRoZSBpbnB1dCB0YWJsZSBpcyBjaGVja2VkLgorSWYgaXQgaXMgc3BlY2lmaWVkIHRoZW4gdGhlIGlucHV0IHRhYmxlIGlzIGNvbnZlcnRlZC4KKworVGhlIGZvbGxvd2luZyB0YWJsZSBmb3JtYXRzIGFyZSBzdXBwb3J0ZWQ6Cis8ZGVzY3JpcD4KKyAgPHRhZy90dGIvQlJMVFRZCisgIDx0YWcvc2JsL1N1U0UgQmxpbnV4CisgIDx0YWcvYTJiL0dub3Blcm5pY3VzCisgIDx0YWcvZ25iL0dub21lIEJyYWlsbGUKKzwvZGVzY3JpcD4KKworPHNlY3QyPmN0YnRlc3Q8bGFiZWwgaWQ9InV0aWxpdHktY3RidGVzdCI+PHA+CitUaGlzIHV0aWxpdHkgdGVzdHMgYSBjb250cmFjdGlvbiB0YWJsZQorKHNlZSBzZWN0aW9uIDxyZWYgaWQ9InRhYmxlLWNvbnRyYWN0aW9uIiBuYW1lPSJDb250cmFjdGlvbiBUYWJsZXMiPikuCitUaGUgdGV4dCByZWFkIGZyb20gdGhlIGlucHV0IGZpbGVzIChvciBzdGFuZGFyZCBpbnB1dCkKK2lzIHJld3JpdHRlbiB0byBzdGFuZGFyZCBvdXRwdXQgYXMgY29udHJhY3RlZCBicmFpbGxlLgorPHRzY3JlZW4+Y3RidGVzdCAtPGVtL29wdGlvbi8gLi4uIDxlbS9pbnB1dC1maWxlLyAuLi48L3RzY3JlZW4+Cis8ZGVzY3JpcD4KKyAgPHRhZz48ZW0vaW5wdXQtZmlsZS88L3RhZz4KKyAgICBUaGUgbGlzdCBvZiBmaWxlcyB0byBiZSBwcm9jZXNzZWQuCisgICAgQW55IG51bWJlciBvZiBmaWxlcyBtYXkgYmUgc3BlY2lmaWVkLgorICAgIFRoZXkncmUgcHJvY2Vzc2VkIGZyb20gbGVmdCB0byByaWdodC4KKyAgICBUaGUgc3BlY2lhbCBmaWxlIG5hbWUgPHR0Ly0vIGlzIGludGVycHJldGVkIHRvIG1lYW4gc3RhbmRhcmQgaW5wdXQuCisgICAgSWYgbm8gZmlsZXMgYXJlIHNwZWNpZmllZCB0aGVuIHN0YW5kYXJkIGlucHV0IGlzIHByb2Nlc3NlZC4KKyAgPHRhZz48dHQvLWMvPGVtL2ZpbGUvIDx0dC8tLWNvbnRyYWN0aW9uLXRhYmxlPS88ZW0vZmlsZS88L3RhZz4KKyAgICBUaGUgZmlsZSBzeXN0ZW0gcGF0aCB0byB0aGUgY29udHJhY3Rpb24gdGFibGUuCisgICAgSWYgaXQncyByZWxhdGl2ZSB0aGVuIGl0J3MgYW5jaG9yZWQgYXQgdGhlIGRpcmVjdG9yeSBjb25maWd1cmVkIHZpYSB0aGUKKyAgICA8cmVmIGlkPSJidWlsZC1kYXRhLWRpcmVjdG9yeSIgbmFtZT0iLS13aXRoLWRhdGEtZGlyZWN0b3J5Ij4gYnVpbGQgb3B0aW9uLgorICAgIFRoZSA8dHQvLmN0Yi8gZXh0ZW5zaW9uIGlzIG9wdGlvbmFsLgorICAgIElmIHRoaXMgb3B0aW9uIGlzbid0IHN1cHBsaWVkIHRoZW4gPHR0L2VuLXVzLWcyLyBpcyBhc3N1bWVkLgorICA8dGFnPjx0dC8tdC88ZW0vZmlsZS98PHR0L2F1dG8vIDx0dC8tLXRleHQtdGFibGU9LzxlbS9maWxlL3w8dHQvYXV0by88L3RhZz4KKyAgICBTcGVjaWZ5IHRoZSB0ZXh0IHRhYmxlCisgICAgKHNlZSBzZWN0aW9uIDxyZWYgaWQ9InRhYmxlLXRleHQiIG5hbWU9IlRleHQgVGFibGVzIj4gZm9yIGRldGFpbHMpLgorICAgIElmIGEgcmVsYXRpdmUgcGF0aCBpcyBzdXBwbGllZCwgdGhlbiBpdCdzIGFuY2hvcmVkIGF0IDx0dD4vZXRjL2JybHR0eTwvPgorICAgIChzZWUgdGhlIDxyZWYgaWQ9ImJ1aWxkLWRhdGEtZGlyZWN0b3J5IiBuYW1lPSItLXdpdGgtZGF0YS1kaXJlY3RvcnkiPgorICAgIGFuZCB0aGUgPHJlZiBpZD0iYnVpbGQtZXhlY3V0ZS1yb290IiBuYW1lPSItLXdpdGgtZXhlY3V0ZS1yb290Ij4KKyAgICBidWlsZCBvcHRpb25zIGZvciBtb3JlIGRldGFpbHMpLgorICAgIFRoZSA8dHQvLnR0Yi8gZXh0ZW5zaW9uIGlzIG9wdGlvbmFsLgorICAgIFNlZSB0aGUgPHJlZiBpZD0iY29uZmlndXJlLXRleHQtdGFibGUiIG5hbWU9InRleHQtdGFibGUiPgorICAgIGNvbmZpZ3VyYXRpb24gZmlsZSBkaXJlY3RpdmUgZm9yIHRoZSBkZWZhdWx0IHJ1bi10aW1lIHNldHRpbmcuCisgICAgVGhpcyBzZXR0aW5nIGNhbiBiZSBjaGFuZ2VkIHdpdGggdGhlCisgICAgPHJlZiBpZD0icHJlZmVyZW5jZS10ZXh0LXRhYmxlIiBuYW1lPSJUZXh0IFRhYmxlIj4gcHJlZmVyZW5jZS4KKyAgPHRhZz48dHQvLXcvPGVtL2NvbHVtbnMvIDx0dC8tLW91dHB1dC13aWR0aD0vPGVtL2NvbHVtbnMvPC90YWc+CisgICAgVGhlIG1heGltdW0gbGVuZ3RoIG9mIGFuIG91dHB1dCBsaW5lLgorICAgIEVhY2ggY29udHJhY3RlZCBpbnB1dCBsaW5lIGlzIHdyYXBwZWQgaW50byBhcyBtYW55IG91dHB1dCBsaW5lcyBhcyBuZWNlc3NhcnkuCisgICAgSWYgdGhpcyBvcHRpb24gaXNuJ3Qgc3BlY2lmaWVkIHRoZW4gdGhlcmUncyBubyBsaW1pdCwKKyAgICBhbmQgdGhlcmUncyBhIG9uZS10by1vbmUgY29ycmVzcG9uZGVuY2UgYmV0d2VlbiBpbnB1dCBhbmQgb3V0cHV0IGxpbmVzLgorICA8dGFnPjx0dC8taC8gPHR0Ly0taGVscC88L3RhZz4KKyAgICBEaXNwbGF5IGEgc3VtbWFyeSBvZiB0aGUgY29tbWFuZCBsaW5lIG9wdGlvbnMsIGFuZCB0aGVuIGV4aXQuCis8L2Rlc2NyaXA+CisKK1RoZSB0ZXh0IHRhYmxlIGlzIHVzZWQ6Cis8aXRlbWl6ZT4KKyAgPGl0ZW0+CisgICAgVG8gZGVmaW5lIHRoZSBvdXRwdXQgY2hhcmFjdGVyIHNldCBzbyB0aGF0CisgICAgdGhlIGNvbnRyYWN0ZWQgYnJhaWxsZSB3aWxsIGJlIGRpc3BsYXllZCBjb3JyZWN0bHkuCisgICAgVGhlIHNhbWUgdGFibGUgYXMgd2lsbCBiZSB1c2VkIGJ5IEJSTFRUWSB3aGVuIHRoZSBvdXRwdXQgaXMgcmVhZCBzaG91bGQgYmUgc3BlY2lmaWVkLgorICA8aXRlbT4KKyAgICBUbyBkZWZpbmUgdGhlIGJyYWlsbGUgcmVwcmVzZW50YXRpb25zIG9mIHRob3NlIGNoYXJhY3RlcnMKKyAgICBkZWZpbmVkIHdpdGhpbiB0aGUgY29udHJhY3Rpb24gdGFibGUgYXMgPHR0Lz0vCisgICAgKHNlZSBzZWN0aW9uIDxyZWYgaWQ9ImNvbnRyYWN0aW9uLW9wY29kZXMtdHJhbnNsYXRpb24iIG5hbWU9IkNoYXJhY3RlciBUcmFuc2xhdGlvbiI+KS4KKzwvaXRlbWl6ZT4KKworVGhlIDx0dC9icmYudHRiLyB0ZXh0IHRhYmxlIGlzIHByb3ZpZGVkIGZvciB1c2Ugd2l0aCB0aGlzIHV0aWxpdHkuCitJdCBkZWZpbmVzIHRoZSBmb3JtYXQgdXNlZCB3aXRoaW4gPHR0Ly5icmYvIGZpbGVzLiAKK1RoaXMgaXMgYWxzbyB0aGUgcHJlZmVycmVkIGZvcm1hdCB1c2VkCitieSBtb3N0IGJyYWlsbGUgcHJpbnRlcnMKK2FuZCB3aXRoaW4gZWxlY3Ryb25pY2FsbHkgZGlzdHJpYnV0ZWQgYnJhaWxsZSBkb2N1bWVudHMuCitUaGlzIHRhYmxlIGVmZmVjdGl2ZWx5IGFsbG93cyB0aGlzIHV0aWxpdHkgdG8gYmUgdXNlZCBhcyBhIHRleHQgdG8gYnJhaWxsZSB0cmFuc2xhdG9yLgorCis8c2VjdDI+dHVuZXRlc3Q8bGFiZWwgaWQ9InV0aWxpdHktdHVuZXRlc3QiPjxwPgorVGhpcyB1dGlsaXR5IHRlc3RzIHRoZSBhbGVydCB0dW5lcyBmYWNpbGl0eSwKK2FuZCBhbHNvIHByb3ZpZGVzIGFuIGVhc3kgd2F5IHRvIGNvbXBvc2UgbmV3IHR1bmVzLgorSXQgbWF5IG5lZWQgdG8gYmUgcnVuIGFzIHJvb3QuCis8dHNjcmVlbj50dW5ldGVzdCAtPGVtL29wdGlvbi8gLi4uIHs8ZW0vbm90ZS8gPGVtL2R1cmF0aW9uL30gLi4uPC90c2NyZWVuPgorPGRlc2NyaXA+CisgIDx0YWc+PGVtL25vdGUvPC90YWc+CisgICAgQSBzdGFuZGFyZCA8dHQvTUlESS8gbm90ZSBudW1iZXIuCisgICAgSXQgbXVzdCBiZSBhbiBpbnRlZ2VyIGZyb20gPHR0LzEvIHRocm91Z2ggPHR0LzEyNy8sCisgICAgd2l0aCA8dHQvNjAvIHJlcHJlc2VudGluZyA8dHQvTWlkZGxlIEMvLgorICAgIEVhY2ggdmFsdWUgcmVwcmVzZW50cyBhIHN0YW5kYXJkIGNocm9tYXRpYyBzZW1pLXRvbmUsCisgICAgd2l0aCB0aGUgbmV4dCBsb3dlciBhbmQgaGlnaGVyIHZhbHVlcworICAgIHJlcHJlc2VudGluZywgcmVzcGVjdGl2ZWx5LCB0aGUgbmV4dCBsb3dlciBhbmQgaGlnaGVyIG5vdGVzLgorICAgIFRoZSBsb3dlc3QgdmFsdWUgKDx0dC8xLykgcmVwcmVzZW50cworICAgIHRoZSBmaWZ0aCA8dHQvQy1TaGFycC8gYmVsb3cgPHR0L01pZGRsZSBDLywKKyAgICBhbmQgdGhlIGhpZ2hlc3QgdmFsdWUgKDx0dC8xMjcvKSByZXByZXNlbnRzCisgICAgdGhlIHNpeHRoIDx0dC9HLyBhYm92ZSA8dHQvTWlkZGxlIEMvLgorICA8dGFnPjxlbS9kdXJhdGlvbi88L3RhZz4KKyAgICBUaGUgZHVyYXRpb24gb2YgdGhlIG5vdGUgaW4gbWlsbGlzZWNvbmRzLgorICAgIEl0IG11c3QgYmUgYW4gaW50ZWdlciBmcm9tIDx0dC8xLyB0aHJvdWdoIDx0dC8yNTUvLgorICA8dGFnPjx0dC8tZC88ZW0vZGV2aWNlLyA8dHQvLS1kZXZpY2U9LzxlbS9kZXZpY2UvPC90YWc+CisgICAgVGhlIGRldmljZSBvbiB3aGljaCB0byBwbGF5IHRoZSB0dW5lLgorICAgIDxkZXNjcmlwPgorICAgICAgPHRhZy9iZWVwZXIvCisgICAgICAgIFRoZSBpbnRlcm5hbCBiZWVwZXIgKGNvbnNvbGUgdG9uZSBnZW5lcmF0b3IpLgorICAgICAgPHRhZy9wY20vCisgICAgICAgIFRoZSBkaWdpdGFsIGF1ZGlvIGludGVyZmFjZSBvbiB0aGUgc291bmQgY2FyZC4KKyAgICAgIDx0YWcvbWlkaS8KKyAgICAgICAgVGhlIE11c2ljYWwgSW5zdHJ1bWVudCBEaWdpdGFsIEludGVyZmFjZSBvbiB0aGUgc291bmQgY2FyZC4KKyAgICAgIDx0YWcvZm0vCisgICAgICAgIFRoZSBGTSBzeW50aGVzaXplciBvbiBhbgorICAgICAgICBBZExpYiwgT1BMMywgU291bmQgQmxhc3Rlciwgb3IgZXF1aXZhbGVudCBzb3VuZCBjYXJkLgorICAgIDwvZGVzY3JpcD4KKyAgICBUaGUgZGV2aWNlIG5hbWUgbWF5IGJlIGFiYnJldmlhdGVkLgorICAgIFNlZSB0aGUgPHJlZiBpZD0icHJlZmVyZW5jZS10dW5lLWRldmljZSIgbmFtZT0iVHVuZSBEZXZpY2UiPiBwcmVmZXJlbmNlCisgICAgZm9yIGRldGFpbHMgcmVnYXJkaW5nIHRoZSBkZWZhdWx0IGRldmljZSBhbmQgcGxhdGZvcm0gcmVzdHJpY3Rpb25zLgorICA8dGFnPjx0dC8tdi88ZW0vbG91ZG5lc3MvIDx0dC8tLXZvbHVtZT0vPGVtL2xvdWRuZXNzLzwvdGFnPgorICAgIFNwZWNpZnkgdGhlIG91dHB1dCB2b2x1bWUgKGxvdWRuZXNzKSBhcyBhIHBlcmNlbnRhZ2Ugb2YgdGhlIG1heGltdW0uCisgICAgVGhlIGRlZmF1bHQgb3V0cHV0IHZvbHVtZSBpcyA8dHQvNTAvLgorICA8dGFnPjx0dC8tcC88ZW0vZGV2aWNlLyA8dHQvLS1wY20tZGV2aWNlPS88ZW0vZGV2aWNlLzwvdGFnPgorICAgIFNwZWNpZnkgdGhlIGRldmljZSB0byB1c2UgZm9yIGRpZ2l0YWwgYXVkaW8KKyAgICAoc2VlIHNlY3Rpb24gPHJlZiBpZD0ib3BlcmFuZC1wY20tZGV2aWNlIiBuYW1lPSJQQ00gRGV2aWNlIFNwZWNpZmljYXRpb24iPikuCisgICAgVGhpcyBvcHRpb24gaXNuJ3QgYXZhaWxhYmxlIGlmIHRoZQorICAgIDxyZWYgaWQ9ImJ1aWxkLXBjbS1zdXBwb3J0IiBuYW1lPSItLWRpc2FibGUtcGNtLXN1cHBvcnQiPiBidWlsZCBvcHRpb24gd2FzIHNwZWNpZmllZC4KKyAgPHRhZz48dHQvLW0vPGVtL2RldmljZS8gPHR0Ly0tbWlkaS1kZXZpY2U9LzxlbS9kZXZpY2UvPC90YWc+CisgICAgU3BlY2lmeSB0aGUgZGV2aWNlIHRvIHVzZSBmb3IgdGhlIE11c2ljYWwgSW5zdHJ1bWVudCBEaWdpdGFsIEludGVyZmFjZQorICAgIChzZWUgc2VjdGlvbiA8cmVmIGlkPSJvcGVyYW5kLW1pZGktZGV2aWNlIiBuYW1lPSJNSURJIERldmljZSBTcGVjaWZpY2F0aW9uIj4pLgorICAgIFRoaXMgb3B0aW9uIGlzbid0IGF2YWlsYWJsZSBpZiB0aGUKKyAgICA8cmVmIGlkPSJidWlsZC1taWRpLXN1cHBvcnQiIG5hbWU9Ii0tZGlzYWJsZS1taWRpLXN1cHBvcnQiPiBidWlsZCBvcHRpb24gd2FzIHNwZWNpZmllZC4KKyAgPHRhZz48dHQvLWkvPGVtL2luc3RydW1lbnQvIDx0dC8tLWluc3RydW1lbnQ9LzxlbS9pbnN0cnVtZW50LzwvdGFnPgorICAgIFRoZSBpbnN0cnVtZW50IHRvIHVzZSBpZiB0aGUgc2VsZWN0ZWQgZGV2aWNlIGlzIDx0dC9taWRpLy4KKyAgICBGb3IgdGhlIGNvbXBsZXRlIGxpc3Qgb2YgaW5zdHJ1bWVudHMsCisgICAgc2VlIHRoZSA8cmVmIGlkPSJtaWRpIiBuYW1lPSJNSURJIEluc3RydW1lbnQgVGFibGUiPi4KKyAgICBUaGUgZGVmYXVsdCBpbnN0cnVtZW50IGlzIGFuIDx0dC9hY291c3RpYyBncmFuZCBwaWFuby8uCisgICAgVGhlIHdvcmRzIGNvbXByaXNpbmcgdGhlIGluc3RydW1lbnQgbmFtZSBtdXN0IGJlIHNlcGFyYXRlZCBmcm9tIG9uZSBhbm90aGVyCisgICAgYnkgYSBzaW5nbGUgbWludXMgc2lnbiByYXRoZXIgdGhhbiBieSBzcGFjZXMsCisgICAgYW5kIGFueSBvZiB0aGUgd29yZHMgbWF5IGJlIGFiYnJldmlhdGVkLgorICAgIEFuIDx0dC9hY291c3RpYyBncmFuZCBwaWFuby8sIGZvciBleGFtcGxlLCBtYXkgYmUgc3BlY2lmaWVkIGFzIDx0dC9hLWdyYS1waS8uCisgIDx0YWc+PHR0Ly1oLyA8dHQvLS1oZWxwLzwvdGFnPgorICAgIERpc3BsYXkgYSBzdW1tYXJ5IG9mIHRoZSBjb21tYW5kIGxpbmUgb3B0aW9ucywgYW5kIHRoZW4gZXhpdC4KKzwvZGVzY3JpcD4KKworPHNlY3Q+VXNpbmcgQlJMVFRZPHA+CitCZWZvcmUgc3RhcnRpbmcgQlJMVFRZLCB5b3UgbmVlZCB0byBzZXQgdXAgeW91ciBicmFpbGxlIGRpc3BsYXkuCitJbiBtb3N0IGNhc2VzIHRoaXMgaXMgZG9uZSBzaW1wbHkKK2J5IGNvbm5lY3RpbmcgaXQgdG8gYW4gYXZhaWxhYmxlIHNlcmlhbCBwb3J0LAorYW5kIHRoZW4gdHVybmluZyBpdCBvbi4KK0FmdGVyIHlvdXIgZGlzcGxheSBoYXMgYmVlbiBzZXQgdXAsCitydW4gQlJMVFRZIHNpbXBseSBieSB0eXBpbmcgdGhlIGNvbW1hbmQgPHR0L2JybHR0eS8gYXQgYSBzaGVsbCBwcm9tcHQKKyh0aGlzIG11c3QgYmUgZG9uZSBhcyByb290KS4KK0NoZWNrIHRoZQorPHJlZiBpZD0ib3B0aW9ucy1icmFpbGxlLWRldmljZSIgbmFtZT0iLWQiPiBjb21tYW5kIGxpbmUgb3B0aW9uLAordGhlIDxyZWYgaWQ9ImNvbmZpZ3VyZS1icmFpbGxlLWRldmljZSIgbmFtZT0iYnJhaWxsZS1kZXZpY2UiPiBjb25maWd1cmF0aW9uIGZpbGUgZGlyZWN0aXZlLAorYW5kIHRoZSA8cmVmIGlkPSJidWlsZC1icmFpbGxlLWRldmljZSIgbmFtZT0iLS13aXRoLWJyYWlsbGUtZGV2aWNlIj4gYnVpbGQgb3B0aW9uCitmb3IgYWx0ZXJuYXRpdmVzIHJlZ2FyZGluZyBob3cgdG8gdGVsbCBCUkxUVFkgd2hpY2ggZGV2aWNlIHlvdXIgZGlzcGxheSBpcyBjb25uZWN0ZWQgdG8uCitDaGVjayB0aGUKKzxyZWYgaWQ9Im9wdGlvbnMtYnJhaWxsZS1kcml2ZXIiIG5hbWU9Ii1iIj4gY29tbWFuZCBsaW5lIG9wdGlvbiwKK3RoZSA8cmVmIGlkPSJjb25maWd1cmUtYnJhaWxsZS1kcml2ZXIiIG5hbWU9ImJyYWlsbGUtZHJpdmVyIj4gY29uZmlndXJhdGlvbiBmaWxlIGRpcmVjdGl2ZSwKK2FuZCB0aGUgPHJlZiBpZD0iYnVpbGQtYnJhaWxsZS1kcml2ZXIiIG5hbWU9Ii0td2l0aC1icmFpbGxlLWRyaXZlciI+IGJ1aWxkIG9wdGlvbgorZm9yIGFsdGVybmF0aXZlcyByZWdhcmRpbmcgaG93IHRvIHRlbGwgQlJMVFRZIHdoaWNoIGtpbmQgb2YgYnJhaWxsZSBkaXNwbGF5IHlvdSBoYXZlLgorQ2hlY2sgdGhlCis8cmVmIGlkPSJvcHRpb25zLWJyYWlsbGUtcGFyYW1ldGVycyIgbmFtZT0iLUIiPiBjb21tYW5kIGxpbmUgb3B0aW9uLAorYW5kIHRoZSA8cmVmIGlkPSJjb25maWd1cmUtYnJhaWxsZS1wYXJhbWV0ZXJzIiBuYW1lPSJicmFpbGxlLXBhcmFtZXRlcnMiPiBjb25maWd1cmF0aW9uIGZpbGUgZGlyZWN0aXZlCitmb3IgYWx0ZXJuYXRpdmVzIHJlZ2FyZGluZyBob3cgdG8gcGFzcyBwYXJhbWV0ZXJzIHRvIHRoZSBkcml2ZXIgZm9yIHlvdXIgYnJhaWxsZSBkaXNwbGF5LgorCitBIG1lc3NhZ2UgZ2l2aW5nIHRoZSBwcm9ncmFtIG5hbWUgKEJSTFRUWSkgYW5kIGl0cyB2ZXJzaW9uIG51bWJlcgord2lsbCBhcHBlYXIgYnJpZWZseQorKHNlZSB0aGUgPHJlZiBpZD0ib3B0aW9ucy1tZXNzYWdlLXRpbWVvdXQiIG5hbWU9Ii1NIj4gY29tbWFuZCBsaW5lIG9wdGlvbikKK29uIHRoZSBicmFpbGxlIGRpc3BsYXkuCitUaGUgZGlzcGxheSB3aWxsIHRoZW4gc2hvdyBhIHNtYWxsIGFyZWEgb2YgdGhlIHNjcmVlbiBpbmNsdWRpbmcgdGhlIGN1cnNvci4KK0J5IGRlZmF1bHQsIHRoZSBjdXJzb3IgaXMgcmVwcmVzZW50ZWQgYXMKK2RvdHMgNyBhbmQgOCBzdXBlcmltcG9zZWQgb24gdGhlIGNoYXJhY3RlciBpdCBpcyBvbi4KKworQW55IHNjcmVlbiBhY3Rpdml0eSB3aWxsIGJlIHJlZmxlY3RlZCBvbiB0aGUgYnJhaWxsZSBkaXNwbGF5LgorVGhlIGRpc3BsYXkgd2lsbCBhbHNvIGZvbGxvdyB0aGUgcHJvZ3Jlc3Mgb2YgdGhlIGN1cnNvciBvbiB0aGUgc2NyZWVuLiAgCitUaGlzIGZlYXR1cmUgaXMga25vd24gYXMgPGJmL2N1cnNvciB0cmFja2luZy8uCisKK0p1c3QgdHlwaW5nIG9uIHRoZSBrZXlib2FyZCBhbmQgcmVhZGluZyB0aGUgZGlzcGxheSwgaG93ZXZlciwgaXNuJ3QgZW5vdWdoLgorVHJ5IGVudGVyaW5nIGEgY29tbWFuZCB3aGljaCB3aWxsIGNhdXNlIGFuIGVycm9yLCBhbmQgcHJlc3NpbmcgPGJmL2VudGVyLy4gIAorVGhlIGVycm9yIGFwcGVhcnMgb24gdGhlIHNjcmVlbiwgYnV0LCB1bmxlc3MgeW91IGhhdmUgYSBtdWx0aS1saW5lIGRpc3BsYXksCit0aGUgY2hhbmNlcyBhcmUgdGhhdCBpdCBpc24ndCB2aXNpYmxlIG9uIHRoZSBicmFpbGxlIGRpc3BsYXkuCitBbGwgeW91IHNlZSB0aGVyZW9uIGlzIGFub3RoZXIgc2hlbGwgcHJvbXB0LgorV2hhdCdzIG5lZWRlZCwgdGhlbiwgaXMgc29tZSB3YXkgdG8gbW92ZQordGhlIGJyYWlsbGUgPGVtL3dpbmRvdy8gYXJvdW5kIHRoZSBzY3JlZW4uCitUaGUga2V5cyBvbiB0aGUgYnJhaWxsZSBkaXNwbGF5IGl0c2VsZiBjYW4gYmUgdXNlZCB0byBzZW5kIGNvbW1hbmRzIHRvIEJSTFRUWQord2hpY2gsIGluIGFkZGl0aW9uIHRvIGEgbG90IG9mIG90aGVyIHRoaW5ncywgY2FuIGFsc28gZG8gZXhhY3RseSB0aGF0LgorCis8c2VjdDE+Q29tbWFuZHM8bGFiZWwgaWQ9ImNvbW1hbmRzIj48cD4KK1VuZm9ydHVuYXRlbHksIHRoZSB2YXJpb3VzIGJyYWlsbGUgZGlzcGxheXMgZG9uJ3Qgb2ZmZXIgYSBzdGFuZGFyZCBzZXQgb2YgY29udHJvbHMuCitTb21lIGhhdmUgdGhlIHNpeCBzdGFuZGFyZCBkb3Qga2V5cywgc29tZSBoYXZlIGVpZ2h0LCBhbmQgb3RoZXJzIGhhdmUgbm9uZS4KK1NvbWUgaGF2ZSB0aHVtYiBrZXlzLCBidXQgdGhlcmUncyBubyBzdGFuZGFyZCBudW1iZXIgb2YgdGhlbS4KK1NvbWUgaGF2ZSBhIGJ1dHRvbiBhYm92ZSBlYWNoIGJyYWlsbGUgY2VsbC4KK1NvbWUgaGF2ZSByb2NrZXIgc3dpdGNoZXMuCitTb21lIGhhdmUgYW4gZWFzeS10by1yZWFjaCBiYXIgd2hpY2ggd29ya3MgbXVjaCBsaWtlIGEgam95c3RpY2suCitNb3N0IGhhdmUgdmFyeWluZyBjb21iaW5hdGlvbnMgb2YgdGhlIGFib3ZlLgorQmVjYXVzZSB0aGUgbmF0dXJlIGFuZCBsYXlvdXQgb2YgZWFjaCBkaXNwbGF5IGlzIHNvIGRpZmZlcmVudCwKK3BsZWFzZSByZWZlciB0byB0aGUgZG9jdW1lbnRhdGlvbiBmb3IgeW91ciBwYXJ0aWN1bGFyIGRpc3BsYXkKK2luIG9yZGVyIHRvIGZpbmQgb3V0IGV4YWN0bHkgd2hhdCBpdHMga2V5cyBkby4KKworQlJMVFRZIGNvbW1hbmRzIGFyZSByZWZlcnJlZCB0byBieSBuYW1lIHdpdGhpbiB0aGlzIG1hbnVhbC4KK0lmIHlvdSBmb3JnZXQgd2hpY2gga2V5KHMpIG9uIHlvdXIgYnJhaWxsZSBkaXNwbGF5IHRvIHVzZQorZm9yIGEgcGFydGljdWxhciBjb21tYW5kLCB0aGVuIHJlZmVyIHRvIGl0cyBkcml2ZXIncyBoZWxwIHBhZ2UuCitUaGUgbWFpbiBrZXkgeW91IHNob3VsZCBpbW1lZGlhdGVseSBjb21taXQgdG8gbWVtb3J5LCB0aGVyZWZvcmUsIGlzIHRoZSBvbmUKK2ZvciB0aGUgPHJlZiBpZD0iY29tbWFuZC1IRUxQIiBuYW1lPSJIRUxQIj4gY29tbWFuZC4KK1VzZSB0aGUgcmVndWxhciBtb3Rpb24ga2V5cyAoYXMgZGVzY3JpYmVkIGJlbG93KSB0byBuYXZpZ2F0ZSB0aGUgaGVscCBwYWdlLAorYW5kIHByZXNzIHRoZSA8dHQvaGVscC8ga2V5IGFnYWluIHRvIHF1aXQuCisKKzxzZWN0Mj5WZXJ0aWNhbCBNb3Rpb248bGFiZWwgaWQ9InZlcnRpY2FsLW1vdGlvbiI+PHA+CitTZWUgYWxzbwordGhlIDxyZWYgaWQ9ImNvbW1hbmQtUFJJTkRFTlQtTlhJTkRFTlQiIG5hbWU9IlBSSU5ERU5UL05YSU5ERU5UIj4sCithbmQgdGhlIDxyZWYgaWQ9ImNvbW1hbmQtUFJESUZDSEFSLU5YRElGQ0hBUiIgbmFtZT0iUFJESUZDSEFSL05YRElGQ0hBUiI+Cityb3V0aW5nIGtleSBjb21tYW5kcy4KKzxkZXNjcmlwPgorICA8dGFnPkxOVVAvTE5ETjxsYWJlbCBpZD0iY29tbWFuZC1MTlVQLUxORE4iPjwvdGFnPgorICAgIEdvIHVwL2Rvd24gb25lIGxpbmUuCisgICAgSWYgaWRlbnRpY2FsIGxpbmUgc2tpcHBpbmcgaGFzIGJlZW4gYWN0aXZhdGVkCisgICAgKHNlZSB0aGUgPHJlZiBpZD0iY29tbWFuZC1TS1BJRExOUyIgbmFtZT0iU0tQSURMTlMiPiBjb21tYW5kKSwKKyAgICB0aGVuIHRoZXNlIGNvbW1hbmRzLCByYXRoZXIgdGhhbiBtb3ZpbmcgZXhhY3RseSBvbmUgbGluZSwKKyAgICBhcmUgYWxpYXNlcyBmb3IgdGhlIDxyZWYgaWQ9ImNvbW1hbmQtUFJESUZMTi1OWERJRkxOIiBuYW1lPSJQUkRJRkxOL05YRElGTE4iPiBjb21tYW5kcy4KKyAgPHRhZz5XSU5VUC9XSU5ETjxsYWJlbCBpZD0iY29tbWFuZC1XSU5VUC1XSU5ETiI+PC90YWc+CisgICAgR28gdXAvZG93biBvbmUgd2luZG93LgorICAgIElmIHRoZSB3aW5kb3cgaXMgb25seSAxIGxpbmUgaGlnaCB0aGVuIG1vdmUgNSBsaW5lcy4KKyAgPHRhZz5QUkRJRkxOL05YRElGTE48bGFiZWwgaWQ9ImNvbW1hbmQtUFJESUZMTi1OWERJRkxOIj48L3RhZz4KKyAgICBHbyB1cC9kb3duIHRvIHRoZSBuZWFyZXN0IGxpbmUgd2l0aCBkaWZmZXJlbnQgY29udGVudC4KKyAgICBJZiBpZGVudGljYWwgbGluZSBza2lwcGluZyBoYXMgYmVlbiBhY3RpdmF0ZWQKKyAgICAoc2VlIHRoZSA8cmVmIGlkPSJjb21tYW5kLVNLUElETE5TIiBuYW1lPSJTS1BJRExOUyI+IGNvbW1hbmQpLAorICAgIHRoZW4gdGhlc2UgY29tbWFuZHMsIHJhdGhlciB0aGFuIHNraXBwaW5nIGlkZW50aWNhbCBsaW5lcywKKyAgICBhcmUgYWxpYXNlcyBmb3IgdGhlIDxyZWYgaWQ9ImNvbW1hbmQtTE5VUC1MTkROIiBuYW1lPSJMTlVQL0xORE4iPiBjb21tYW5kcy4KKyAgPHRhZz5BVFRSVVAvQVRUUkROPGxhYmVsIGlkPSJjb21tYW5kLUFUVFJVUC1BVFRSRE4iPjwvdGFnPgorICAgIEdvIHVwL2Rvd24gdG8gdGhlIG5lYXJlc3QgbGluZSB3aXRoIGRpZmZlcmVudCBhdHRyaWJ1dGVzIChjaGFyYWN0ZXIgaGlnaGxpZ2h0aW5nKS4KKyAgPHRhZz5UT1AvQk9UPGxhYmVsIGlkPSJjb21tYW5kLVRPUC1CT1QiPjwvdGFnPgorICAgIEdvIHRvIHRoZSB0b3AvYm90dG9tIGxpbmUuCisgIDx0YWc+VE9QX0xFRlQvQk9UX0xFRlQ8bGFiZWwgaWQ9ImNvbW1hbmQtVE9QX0xFRlQtQk9UX0xFRlQiPjwvdGFnPgorICAgIEdvIHRvIHRoZSB0b3AtbGVmdC9ib3R0b20tbGVmdCBjb3JuZXIuCisgIDx0YWc+UFJQR1JQSC9OWFBHUlBIPGxhYmVsIGlkPSJjb21tYW5kLVBSUEdSUEgtTlhQR1JQSCI+PC90YWc+CisgICAgR28gdG8gdGhlIG5lYXJlc3QgbGluZSBvZiB0aGUgcHJldmlvdXMvbmV4dCBwYXJhZ3JhcGgKKyAgICAodGhlIGZpcnN0IG5vbi1ibGFuayBsaW5lIGJleW9uZCB0aGUgbmVhcmVzdCBibGFuayBsaW5lKS4KKyAgICBUaGUgY3VycmVudCBsaW5lIGlzIGluY2x1ZGVkIHdoZW4gc2VhcmNoaW5nIGZvciB0aGUgaW50ZXItcGFyYWdyYXBoIHNwYWNlLgorICA8dGFnPlBSUFJPTVBUL05YUFJPTVBUPGxhYmVsIGlkPSJjb21tYW5kLVBSUFJPTVBULU5YUFJPTVBUIj48L3RhZz4KKyAgICBHbyB0byB0aGUgcHJldmlvdXMvbmV4dCBjb21tYW5kIHByb21wdC4KKyAgPHRhZz5QUlNFQVJDSC9OWFNFQVJDSDxsYWJlbCBpZD0iY29tbWFuZC1QUlNFQVJDSC1OWFNFQVJDSCI+PC90YWc+CisgICAgU2VhcmNoIGJhY2t3YXJkL2ZvcndhcmQgZm9yIHRoZSBuZWFyZXN0IG9jY3VycmVuY2UKKyAgICBvZiB0aGUgY2hhcmFjdGVyIHN0cmluZyB3aXRoaW4gdGhlIGN1dCBidWZmZXIKKyAgICAoc2VlIDxyZWYgaWQ9ImN1dCIgbmFtZT0iQ3V0IGFuZCBQYXN0ZSI+KQorICAgIHdoaWNoIGlzbid0IHdpdGhpbiB0aGUgYnJhaWxsZSB3aW5kb3cuCisgICAgVGhlIHNlYXJjaCBwcm9jZWVkcyB0byB0aGUgbGVmdC9yaWdodCwKKyAgICBzdGFydGluZyBhdCB0aGUgY2hhcmFjdGVyIGltbWVkaWF0ZWx5IHRvIHRoZSBsZWZ0L3JpZ2h0IG9mIHRoZSB3aW5kb3csCisgICAgYW5kIHdyYXBwaW5nIGF0IHRoZSBlZGdlIG9mIHRoZSBzY3JlZW4uCisgICAgVGhlIHNlYXJjaCBpc24ndCBjYXNlIHNlbnNpdGl2ZS4KKzwvZGVzY3JpcD4KKworPHNlY3QyPkhvcml6b250YWwgTW90aW9uPGxhYmVsIGlkPSJob3Jpem9udGFsLW1vdGlvbiI+PHA+CitTZWUgYWxzbyB0aGUgPHJlZiBpZD0iY29tbWFuZC1TRVRMRUZUIiBuYW1lPSJTRVRMRUZUIj4gcm91dGluZyBrZXkgY29tbWFuZC4KKzxkZXNjcmlwPgorICA8dGFnPkNIUkxUL0NIUlJUPGxhYmVsIGlkPSJjb21tYW5kLUNIUkxULUNIUlJUIj48L3RhZz4KKyAgICBHbyBsZWZ0L3JpZ2h0IG9uZSBjaGFyYWN0ZXIuCisgIDx0YWc+SFdJTkxUL0hXSU5SVDxsYWJlbCBpZD0iY29tbWFuZC1IV0lOTFQtSFdJTlJUIj48L3RhZz4KKyAgICBHbyBsZWZ0L3JpZ2h0IGhhbGYgYSB3aW5kb3cuCisgIDx0YWc+RldJTkxUL0ZXSU5SVDxsYWJlbCBpZD0iY29tbWFuZC1GV0lOTFQtRldJTlJUIj48L3RhZz4KKyAgICBHbyBsZWZ0L3JpZ2h0IG9uZSB3aW5kb3cuCisgICAgVGhlc2UgY29tbWFuZHMgYXJlIHBhcnRpY3VsYXJseSB1c2VmdWwKKyAgICBiZWNhdXNlIHRoZXkgYXV0b21hdGljYWxseSB3cmFwIHdoZW4gdGhleSByZWFjaCB0aGUgZWRnZSBvZiB0aGUgc2NyZWVuLgorICAgIE90aGVyIGZlYXR1cmVzLCBsaWtlIHRoZWlyIGFiaWxpdHkgdG8gc2tpcCBibGFuayB3aW5kb3dzCisgICAgKHNlZSB0aGUgPHJlZiBpZD0iY29tbWFuZC1TS1BCTE5LV0lOUyIgbmFtZT0iU0tQQkxOS1dJTlMiPiBjb21tYW5kKSwKKyAgICBmdXJ0aGVyIGVuaGFuY2UgdGhlaXIgdXNlZnVsbmVzcy4KKyAgPHRhZz5GV0lOTFRTS0lQL0ZXSU5SVFNLSVA8bGFiZWwgaWQ9ImNvbW1hbmQtRldJTkxUU0tJUC1GV0lOUlRTS0lQIj48L3RhZz4KKyAgICBHbyBsZWZ0L3JpZ2h0IHRvIHRoZSBuZWFyZXN0IG5vbi1ibGFuayB3aW5kb3cuCisgIDx0YWc+TE5CRUcvTE5FTkQ8bGFiZWwgaWQ9ImNvbW1hbmQtTE5CRUctTE5FTkQiPjwvdGFnPgorICAgIEdvIHRvIHRoZSBiZWdpbm5pbmcvZW5kIG9mIHRoZSBsaW5lLgorPC9kZXNjcmlwPgorCis8c2VjdDI+SW1wbGljaXQgTW90aW9uPGxhYmVsIGlkPSJpbXBsaWNpdC1tb3Rpb24iPjxwPgorU2VlIGFsc28gdGhlIDxyZWYgaWQ9ImNvbW1hbmQtR09UT01BUksiIG5hbWU9IkdPVE9NQVJLIj4gcm91dGluZyBrZXkgY29tbWFuZC4KKzxkZXNjcmlwPgorICA8dGFnPkhPTUU8bGFiZWwgaWQ9ImNvbW1hbmQtSE9NRSI+PC90YWc+CisgICAgR28gdG8gd2hlcmUgdGhlIGN1cnNvciBpcy4KKyAgPHRhZz5CQUNLPGxhYmVsIGlkPSJjb21tYW5kLUJBQ0siPjwvdGFnPgorICAgIEdvIGJhY2sgdG8gd2hlcmUgdGhlIG1vc3QgcmVjZW50IG1vdGlvbiBjb21tYW5kIHB1dCB0aGUgYnJhaWxsZSB3aW5kb3cuCisgICAgVGhpcyBpcyBhbiBlYXN5IHdheSB0byBnZXQgcmlnaHQgYmFjayB0byB3aGVyZSB5b3Ugd2VyZSByZWFkaW5nCisgICAgYWZ0ZXIgYW4gdW5leHBlY3RlZCBldmVudCAobGlrZSBjdXJzb3IgdHJhY2tpbmcpCisgICAgbW92ZXMgdGhlIGJyYWlsbGUgd2luZG93IGF0IGFuIGlub3Bwb3J0dW5lIG1vbWVudC4KKyAgPHRhZz5SRVRVUk48bGFiZWwgaWQ9ImNvbW1hbmQtUkVUVVJOIj48L3RhZz4KKyAgICA8aXRlbWl6ZT4KKyAgICAgIDxpdGVtPgorICAgICAgICBJZiB0aGUgbW9zdCByZWNlbnQgbW90aW9uIG9mIHRoZSBicmFpbGxlIHdpbmRvdyB3YXMgYXV0b21hdGljLAorICAgICAgICBlLmcuIGFzIGEgcmVzdWx0IG9mIGN1cnNvciB0cmFja2luZywKKyAgICAgICAgdGhlbiBnbyBiYWNrIHRvIHdoZXJlIHRoZSBtb3N0IHJlY2VudCBtb3Rpb24gY29tbWFuZCBwdXQgaXQKKyAgICAgICAgKHNlZSB0aGUgPHJlZiBpZD0iY29tbWFuZC1CQUNLIiBuYW1lPSJCQUNLIj4gY29tbWFuZCkuCisgICAgICA8aXRlbT4KKyAgICAgICAgSWYgdGhlIGN1cnNvciBpc24ndCB3aXRoaW4gdGhlIGJyYWlsbGUgd2luZG93CisgICAgICAgIHRoZW4gZ28gdG8gd2hlcmUgdGhlIGN1cnNvciBpcworICAgICAgICAoc2VlIHRoZSA8cmVmIGlkPSJjb21tYW5kLUhPTUUiIG5hbWU9IkhPTUUiPiBjb21tYW5kKS4KKyAgICA8L2l0ZW1pemU+Cis8L2Rlc2NyaXA+CisKKzxzZWN0Mj5GZWF0dXJlIEFjdGl2YXRpb248bGFiZWwgaWQ9ImZlYXR1cmUtYWN0aXZhdGlvbiI+PHA+CitFYWNoIG9mIHRoZXNlIGNvbW1hbmRzIGhhcyB0aHJlZSBmb3JtczoKKzxiZi9hY3RpdmF0ZS8gKHR1cm4gdGhlIGZlYXR1cmUgb24pLAorPGJmL2RlYWN0aXZhdGUvICh0dXJuIHRoZSBmZWF0dXJlIG9mZiksCithbmQgPGJmL3RvZ2dsZS8gKGlmIGl0J3Mgb2ZmIHRoZW4gdHVybiBpdCBvbiwgYW5kIGlmIGl0J3Mgb24gdGhlbiB0dXJuIGl0IG9mZikuCitVbmxlc3Mgc3BlY2lmaWNhbGx5IG5vdGVkLCBlYWNoIG9mIHRoZXNlIGZlYXR1cmVzCitpcyBpbml0aWFsbHkgPGJmL29mZi8sIGFuZCwgd2hlbiA8YmYvb24vLCBhZmZlY3RzIEJSTFRUWSdzIG9wZXJhdGlvbiBhcyBhIHdob2xlLgorVGhlIGluaXRpYWwgc2V0dGluZyBvZiBzb21lIG9mIHRoZXNlIGZlYXR1cmVzIGNhbiBiZSBjaGFuZ2VkCit2aWEgdGhlIDxyZWYgaWQ9InByZWZlcmVuY2VzLW1lbnUiIG5hbWU9InByZWZlcmVuY2VzIG1lbnUiPi4KKzxkZXNjcmlwPgorICA8dGFnPkZSRUVaRTxsYWJlbCBpZD0iY29tbWFuZC1GUkVFWkUiPjwvdGFnPgorICAgIEZyZWV6ZSB0aGUgc2NyZWVuIGltYWdlLgorICAgIEJSTFRUWSBtYWtlcyBhIGNvcHkgb2YgdGhlIHNjcmVlbiAoY29udGVudCBhbmQgYXR0cmlidXRlcykKKyAgICBhcyBvZiB0aGUgbW9tZW50IHdoZW4gdGhlIHNjcmVlbiBpbWFnZSBpcyBmcm96ZW4sCisgICAgYW5kIHRoZW4gaWdub3JlcyBhbGwgdXBkYXRpbmcgb2YgdGhlIHNjcmVlbiB1bnRpbCBpdCdzIHVuZnJvemVuLgorICAgIFRoaXMgZmVhdHVyZSBtYWtlcyBpdCBlYXN5LCBmb3IgZXhhbXBsZSwKKyAgICB0byBzYW1wbGUgdGhlIG91dHB1dCBvZiBhbiBhcHBsaWNhdGlvbiB3aGljaCB3cml0ZXMgdG9vIG11Y2ggdG9vIHF1aWNrbHkuCisgIDx0YWc+RElTUE1EPGxhYmVsIGlkPSJjb21tYW5kLURJU1BNRCI+PC90YWc+CisgICAgU2hvdyB0aGUgaGlnaGxpZ2h0aW5nICh0aGUgYXR0cmlidXRlcykKKyAgICBvZiBlYWNoIGNoYXJhY3RlciB3aXRoaW4gdGhlIGJyYWlsbGUgd2luZG93LAorICAgIHJhdGhlciB0aGFuIHRoZSBjaGFyYWN0ZXJzIHRoZW1zZWx2ZXMgKHRoZSBjb250ZW50KS4KKyAgICBUaGlzIGZlYXR1cmUgaXMgdXNlZnVsLCBmb3IgZXhhbXBsZSwKKyAgICB3aGVuIHlvdSBuZWVkIHRvIGxvY2F0ZSBhIGhpZ2hsaWdodGVkIGl0ZW0uCisgICAgV2hlbiBzaG93aW5nIHNjcmVlbiBjb250ZW50LCB0aGUgdGV4dCB0YWJsZSBpcyB1c2VkCisgICAgKHNlZSB0aGUgPHJlZiBpZD0ib3B0aW9ucy10ZXh0LXRhYmxlIiBuYW1lPSItdCI+IGNvbW1hbmQgbGluZSBvcHRpb24sCisgICAgdGhlIDxyZWYgaWQ9ImNvbmZpZ3VyZS10ZXh0LXRhYmxlIiBuYW1lPSJ0ZXh0LXRhYmxlIj4gY29uZmlndXJhdGlvbiBmaWxlIGRpcmVjdGl2ZSwKKyAgICBhbmQgdGhlIDxyZWYgaWQ9ImJ1aWxkLXRleHQtdGFibGUiIG5hbWU9Ii0td2l0aC10ZXh0LXRhYmxlIj4gYnVpbGQgb3B0aW9uKS4KKyAgICBXaGVuIHNob3dpbmcgc2NyZWVuIGF0dHJpYnV0ZXMsIHRoZSBhdHRyaWJ1dGVzIHRhYmxlIGlzIHVzZWQKKyAgICAoc2VlIHRoZSA8cmVmIGlkPSJvcHRpb25zLWF0dHJpYnV0ZXMtdGFibGUiIG5hbWU9Ii1hIj4gY29tbWFuZCBsaW5lIG9wdGlvbiwKKyAgICB0aGUgPHJlZiBpZD0iY29uZmlndXJlLWF0dHJpYnV0ZXMtdGFibGUiIG5hbWU9ImF0dHJpYnV0ZXMtdGFibGUiPiBjb25maWd1cmF0aW9uIGZpbGUgZGlyZWN0aXZlLAorICAgIGFuZCB0aGUgPHJlZiBpZD0iYnVpbGQtYXR0cmlidXRlcy10YWJsZSIgbmFtZT0iLS13aXRoLWF0dHJpYnV0ZXMtdGFibGUiPiBidWlsZCBvcHRpb24pLgorICAgIFRoaXMgZmVhdHVyZSBvbmx5IGFmZmVjdHMgdGhlIGN1cnJlbnQgdmlydHVhbCB0ZXJtaW5hbC4KKyAgPHRhZz5TSVhET1RTPGxhYmVsIGlkPSJjb21tYW5kLVNJWERPVFMiPjwvdGFnPgorICAgIFNob3cgY2hhcmFjdGVycyB1c2luZyA2LWRvdCwgcmF0aGVyIHRoYW4gOC1kb3QsIGJyYWlsbGUuCisgICAgRG90cyA3IGFuZCA4IGFyZSBzdGlsbCB1c2VkIGJ5IG90aGVyIGZlYXR1cmVzCisgICAgbGlrZSBjdXJzb3IgcmVwcmVzZW50YXRpb24gYW5kIGhpZ2hsaWdodGVkIGNoYXJhY3RlciB1bmRlcmxpbmluZy4KKyAgICBJZiBhIGNvbnRyYWN0aW9uIHRhYmxlIGhhcyBiZWVuIHNlbGVjdGVkCisgICAgKHNlZSB0aGUgPHJlZiBpZD0ib3B0aW9ucy1jb250cmFjdGlvbi10YWJsZSIgbmFtZT0iLWMiPiBjb21tYW5kIGxpbmUgb3B0aW9uCisgICAgYW5kIHRoZSA8cmVmIGlkPSJjb25maWd1cmUtY29udHJhY3Rpb24tdGFibGUiIG5hbWU9ImNvbnRyYWN0aW9uLXRhYmxlIj4gY29uZmlndXJhdGlvbiBmaWxlIGRpcmVjdGl2ZSksCisgICAgdGhlbiBpdCBpcyB1c2VkLgorICAgIFRoaXMgc2V0dGluZyBjYW4gYWxzbyBiZSBjaGFuZ2VkIHdpdGggdGhlCisgICAgPHJlZiBpZD0icHJlZmVyZW5jZS10ZXh0LXN0eWxlIiBuYW1lPSJUZXh0IFN0eWxlIj4gcHJlZmVyZW5jZS4KKyAgPHRhZz5TTElERVdJTjxsYWJlbCBpZD0iY29tbWFuZC1TTElERVdJTiI+PC90YWc+CisgICAgSWYgY3Vyc29yIHRyYWNraW5nCisgICAgKHNlZSB0aGUgPHJlZiBpZD0iY29tbWFuZC1DU1JUUksiIG5hbWU9IkNTUlRSSyI+IGNvbW1hbmQpCisgICAgaXMgPGJmL29uLywgdGhlbiwKKyAgICB3aGVuZXZlciB0aGUgY3Vyc29yIG1vdmVzIHRvbyBjbG9zZSB0byAob3IgYmV5b25kKQorICAgIGVpdGhlciBlbmQgb2YgdGhlIGJyYWlsbGUgd2luZG93LAorICAgIGhvcml6b250YWxseSByZXBvc2l0aW9uIHRoZSB3aW5kb3cgc3VjaCB0aGF0IHRoZSBjdXJzb3IsCisgICAgd2hpbGUgcmVtYWluaW5nIG9uIHRoYXQgc2lkZSwgaXMgbmVhcmVyIHRoZSBjZW50cmUuCisgICAgSWYgdGhpcyBmZWF0dXJlIGlzIDxiZi9vZmYvLAorICAgIHRoZW4gdGhlIGJyYWlsbGUgd2luZG93IGlzIGFsd2F5cyBwb3NpdGlvbmVkIHN1Y2ggdGhhdAorICAgIGl0cyBsZWZ0IGVuZCBpcyBhIG11bHRpcGxlIG9mIGl0cyB3aWR0aCBmcm9tIHRoZSBsZWZ0IGVkZ2Ugb2YgdGhlIHNjcmVlbi4KKyAgICBUaGlzIHNldHRpbmcgY2FuIGFsc28gYmUgY2hhbmdlZCB3aXRoIHRoZQorICAgIDxyZWYgaWQ9InByZWZlcmVuY2Utc2xpZGluZy13aW5kb3ciIG5hbWU9IlNsaWRpbmcgV2luZG93Ij4gcHJlZmVyZW5jZS4KKyAgPHRhZz5TS1BJRExOUzxsYWJlbCBpZD0iY29tbWFuZC1TS1BJRExOUyI+PC90YWc+CisgICAgUmF0aGVyIHRoYW4gZXhwbGljaXRseSBtb3ZpbmcgZXhhY3RseSBvbmUgbGluZSBlaXRoZXIgdXAgb3IgZG93biwKKyAgICBza2lwIHBhc3QgbGluZXMgd2hpY2ggaGF2ZSB0aGUgc2FtZSBjb250ZW50IGFzIHRoZSBjdXJyZW50IGxpbmUuCisgICAgVGhpcyBmZWF0dXJlIGFmZmVjdHMKKyAgICB0aGUgPHJlZiBpZD0iY29tbWFuZC1MTlVQLUxORE4iIG5hbWU9IkxOVVAvTE5ETiI+IGNvbW1hbmRzLAorICAgIGFzIHdlbGwgYXMgdGhlIGxpbmUgd3JhcHBpbmcgZmVhdHVyZSBvZgorICAgIHRoZSA8cmVmIGlkPSJjb21tYW5kLUZXSU5MVC1GV0lOUlQiIG5hbWU9IkZXSU5MVC9GV0lOUlQiPgorICAgIGFuZCA8cmVmIGlkPSJjb21tYW5kLUZXSU5MVFNLSVAtRldJTlJUU0tJUCIgbmFtZT0iRldJTkxUU0tJUC9GV0lOUlRTS0lQIj4gY29tbWFuZHMuCisgICAgVGhpcyBzZXR0aW5nIGNhbiBhbHNvIGJlIGNoYW5nZWQgd2l0aCB0aGUKKyAgICA8cmVmIGlkPSJwcmVmZXJlbmNlLXNraXAtaWRlbnRpY2FsLWxpbmVzIiBuYW1lPSJTa2lwIElkZW50aWNhbCBMaW5lcyI+IHByZWZlcmVuY2UuCisgIDx0YWc+U0tQQkxOS1dJTlM8bGFiZWwgaWQ9ImNvbW1hbmQtU0tQQkxOS1dJTlMiPjwvdGFnPgorICAgIFNraXAgcGFzdCBibGFuayB3aW5kb3dzIHdoZW4gcmVhZGluZyBlaXRoZXIgZm9yd2FyZCBvciBiYWNrd2FyZC4KKyAgICBUaGlzIGZlYXR1cmUgYWZmZWN0cyB0aGUgPHJlZiBpZD0iY29tbWFuZC1GV0lOTFQtRldJTlJUIiBuYW1lPSJGV0lOTFQvRldJTlJUIj4gY29tbWFuZHMuCisgICAgVGhpcyBzZXR0aW5nIGNhbiBhbHNvIGJlIGNoYW5nZWQgd2l0aCB0aGUKKyAgICA8cmVmIGlkPSJwcmVmZXJlbmNlLXNraXAtYmxhbmstd2luZG93cyIgbmFtZT0iU2tpcCBCbGFuayBXaW5kb3dzIj4gcHJlZmVyZW5jZS4KKyAgPHRhZz5DU1JWSVM8bGFiZWwgaWQ9ImNvbW1hbmQtQ1NSVklTIj48L3RhZz4KKyAgICBTaG93IHRoZSBjdXJzb3IgYnkgc3VwZXJpbXBvc2luZyBhIGRvdCBwYXR0ZXJuCisgICAgKHNlZSB0aGUgPHJlZiBpZD0iY29tbWFuZC1DU1JTSVpFIiBuYW1lPSJDU1JTSVpFIj4gY29tbWFuZCkKKyAgICBvbiB0b3Agb2YgdGhlIGNoYXJhY3RlciB3aGVyZSBpdCBpcy4KKyAgICBUaGlzIGZlYXR1cmUgaXMgaW5pdGlhbGx5IDxiZi9vbi8uCisgICAgVGhpcyBzZXR0aW5nIGNhbiBhbHNvIGJlIGNoYW5nZWQgd2l0aCB0aGUKKyAgICA8cmVmIGlkPSJwcmVmZXJlbmNlLXNob3ctY3Vyc29yIiBuYW1lPSJTaG93IEN1cnNvciI+IHByZWZlcmVuY2UuCisgIDx0YWc+Q1NSSElERTxsYWJlbCBpZD0iY29tbWFuZC1DU1JISURFIj48L3RhZz4KKyAgICBIaWRlIHRoZSBjdXJzb3IgKHNlZSB0aGUgPHJlZiBpZD0iY29tbWFuZC1DU1JWSVMiIG5hbWU9IkNTUlZJUyI+IGNvbW1hbmQpCisgICAgaW4gb3JkZXIgdG8gYWNjdXJhdGVseSByZWFkIHRoZSBjaGFyYWN0ZXIgYmVuZWF0aCBpdC4KKyAgICBUaGlzIGZlYXR1cmUgb25seSBhZmZlY3RzIHRoZSBjdXJyZW50IHZpcnR1YWwgdGVybWluYWwuCisgIDx0YWc+Q1NSVFJLPGxhYmVsIGlkPSJjb21tYW5kLUNTUlRSSyI+PC90YWc+CisgICAgVHJhY2sgKGZvbGxvdykgdGhlIGN1cnNvci4KKyAgICBJZiB0aGUgY3Vyc29yIG1vdmVzIHRvIGEgbG9jYXRpb24gd2hpY2ggaXNuJ3Qgd2l0aGluIHRoZSBicmFpbGxlIHdpbmRvdywKKyAgICB0aGVuIGF1dG9tYXRpY2FsbHkgbW92ZSB0aGUgYnJhaWxsZSB3aW5kb3cgdG8gdGhlIGN1cnNvcidzIG5ldyBsb2NhdGlvbi4KKyAgICBZb3UnbGwgdXN1YWxseSB3YW50IHRoaXMgZmVhdHVyZSB0dXJuZWQgb24KKyAgICBzaW5jZSBpdCBtaW5pbWl6ZXMgdGhlIGVmZmVjdHMgb2Ygc2NyZWVuIHNjcm9sbGluZywKKyAgICBhbmQgc2luY2UsIGR1cmluZyBpbnB1dCwgdGhlIHJlZ2lvbiB3aGVyZWluIHlvdSdyZSBjdXJyZW50bHkgdHlwaW5nIGlzIGFsd2F5cyB2aXNpYmxlLgorICAgIElmIHRoaXMgZmVhdHVyZSBjYXVzZXMgdGhlIGJyYWlsbGUgd2luZG93IHRvIGp1bXAgYXQgYW4gaW5vcHBvcnR1bmUgbW9tZW50LAorICAgIHRoZW4gdXNlIHRoZSA8cmVmIGlkPSJjb21tYW5kLUJBQ0siIG5hbWU9IkJBQ0siPiBjb21tYW5kCisgICAgdG8gZ2V0IGJhY2sgdG8gd2hlcmUgeW91IHdlcmUgcmVhZGluZy4KKyAgIFlvdSBtYXkgbmVlZCB0byB0dXJuIHRoaXMgZmVhdHVyZSBvZmYgd2hlbiB1c2luZyBhbiBhcHBsaWNhdGlvbiB3aGljaAorICAgY29udGludWFsbHkgdXBkYXRlcyB0aGUgc2NyZWVuIHdoaWxlIG1haW50YWluaW5nIGEgZml4ZWQgZGF0YSBsYXlvdXQuCisgICAgVGhpcyBmZWF0dXJlIGlzIGluaXRpYWxseSA8YmYvb24vLgorICAgIFRoaXMgZmVhdHVyZSBvbmx5IGFmZmVjdHMgdGhlIGN1cnJlbnQgdmlydHVhbCB0ZXJtaW5hbC4KKyAgPHRhZz5DU1JTSVpFPGxhYmVsIGlkPSJjb21tYW5kLUNTUlNJWkUiPjwvdGFnPgorICAgIFJlcHJlc2VudCB0aGUgY3Vyc29yIHdpdGggYWxsIGVpZ2h0IGRvdHMgKGEgc29saWQgYmxvY2spLAorICAgIHJhdGhlciB0aGFuIHdpdGgganVzdCBkb3RzIDcgYW5kIDggKGFuIHVuZGVybGluZSkuCisgICAgVGhpcyBzZXR0aW5nIGNhbiBhbHNvIGJlIGNoYW5nZWQgd2l0aCB0aGUKKyAgICA8cmVmIGlkPSJwcmVmZXJlbmNlLWN1cnNvci1zdHlsZSIgbmFtZT0iQ3Vyc29yIFN0eWxlIj4gcHJlZmVyZW5jZS4KKyAgPHRhZz5DU1JCTElOSzxsYWJlbCBpZD0iY29tbWFuZC1DU1JCTElOSyI+PC90YWc+CisgICAgQmxpbmsgKHR1cm4gb24gYW5kIG9mZiBhY2NvcmRpbmcgdG8gYSBwcmVkZWZpbmVkIGludGVydmFsKQorICAgIHRoZSBzeW1ib2wgcmVwcmVzZW50aW5nIHRoZSBjdXJzb3IKKyAgICAoc2VlIHRoZSA8cmVmIGlkPSJjb21tYW5kLUNTUlZJUyIgbmFtZT0iQ1NSVklTIj4gY29tbWFuZCkuCisgICAgVGhpcyBzZXR0aW5nIGNhbiBhbHNvIGJlIGNoYW5nZWQgd2l0aCB0aGUKKyAgICA8cmVmIGlkPSJwcmVmZXJlbmNlLWJsaW5raW5nLWN1cnNvciIgbmFtZT0iQmxpbmtpbmcgQ3Vyc29yIj4gcHJlZmVyZW5jZS4KKyAgPHRhZz5BVFRSVklTPGxhYmVsIGlkPSJjb21tYW5kLUFUVFJWSVMiPjwvdGFnPgorICAgIFVuZGVybGluZSAod2l0aCBjb21iaW5hdGlvbnMgb2YgZG90cyA3IGFuZCA4KSBoaWdobGlnaHRlZCBjaGFyYWN0ZXJzLgorICAgIDxkZXNjcmlwPgorICAgICAgPHRhZy9ubyB1bmRlcmxpbmUvCisgICAgICAgIFdoaXRlIG9uIGJsYWNrIChub3JtYWwpLAorICAgICAgICBncmF5IG9uIGJsYWNrLAorICAgICAgICB3aGl0ZSBvbiBibHVlLAorICAgICAgICBibGFjayBvbiBjeWFuLgorICAgICAgPHRhZy9kb3RzIDcgYW5kIDgvCisgICAgICAgIEJsYWNrIG9uIHdoaXRlIChyZXZlcnNlIHZpZGVvKS4KKyAgICAgIDx0YWcvZG90IDgvCisgICAgICAgIEV2ZXJ5dGhpbmcgZWxzZS4KKyAgICA8L2Rlc2NyaXA+CisgICAgVGhpcyBzZXR0aW5nIGNhbiBhbHNvIGJlIGNoYW5nZWQgd2l0aCB0aGUKKyAgICA8cmVmIGlkPSJwcmVmZXJlbmNlLXNob3ctYXR0cmlidXRlcyIgbmFtZT0iU2hvdyBBdHRyaWJ1dGVzIj4gcHJlZmVyZW5jZS4KKyAgPHRhZz5BVFRSQkxJTks8bGFiZWwgaWQ9ImNvbW1hbmQtQVRUUkJMSU5LIj48L3RhZz4KKyAgICBCbGluayAodHVybiBvbiBhbmQgb2ZmIGFjY29yZGluZyB0byBhIHByZWRlZmluZWQgaW50ZXJ2YWwpCisgICAgdGhlIGF0dHJpYnV0ZSB1bmRlcmxpbmUKKyAgICAoc2VlIHRoZSA8cmVmIGlkPSJjb21tYW5kLUFUVFJWSVMiIG5hbWU9IkFUVFJWSVMiPiBjb21tYW5kKS4KKyAgICBUaGlzIGZlYXR1cmUgaXMgaW5pdGlhbGx5IDxiZi9vbi8uCisgICAgVGhpcyBzZXR0aW5nIGNhbiBhbHNvIGJlIGNoYW5nZWQgd2l0aCB0aGUKKyAgICA8cmVmIGlkPSJwcmVmZXJlbmNlLWJsaW5raW5nLWF0dHJpYnV0ZXMiIG5hbWU9IkJsaW5raW5nIEF0dHJpYnV0ZXMiPiBwcmVmZXJlbmNlLgorICA8dGFnPkNBUEJMSU5LPGxhYmVsIGlkPSJjb21tYW5kLUNBUEJMSU5LIj48L3RhZz4KKyAgICBCbGluayAodHVybiBvbiBhbmQgb2ZmIGFjY29yZGluZyB0byBhIHByZWRlZmluZWQgaW50ZXJ2YWwpCisgICAgY2FwaXRhbCAodXBwZXJjYXNlKSBsZXR0ZXJzLgorICAgIFRoaXMgc2V0dGluZyBjYW4gYWxzbyBiZSBjaGFuZ2VkIHdpdGggdGhlCisgICAgPHJlZiBpZD0icHJlZmVyZW5jZS1ibGlua2luZy1jYXBpdGFscyIgbmFtZT0iQmxpbmtpbmcgQ2FwaXRhbHMiPiBwcmVmZXJlbmNlLgorICA8dGFnPlRVTkVTPGxhYmVsIGlkPSJjb21tYW5kLVRVTkVTIj48L3RhZz4KKyAgICBQbGF5IGEgc2hvcnQgcHJlZGVmaW5lZCB0dW5lIChzZWUgPHJlZiBpZD0idHVuZXMiIG5hbWU9IkFsZXJ0IFR1bmVzIj4pCisgICAgd2hlbmV2ZXIgYSBzaWduaWZpY2FudCBldmVudCBvY2N1cnMuCisgICAgVGhpcyBmZWF0dXJlIGlzIGluaXRpYWxseSA8YmYvb24vLgorICAgIFRoaXMgc2V0dGluZyBjYW4gYWxzbyBiZSBjaGFuZ2VkIHdpdGggdGhlCisgICAgPHJlZiBpZD0icHJlZmVyZW5jZS1hbGVydC10dW5lcyIgbmFtZT0iQWxlcnQgVHVuZXMiPiBwcmVmZXJlbmNlLgorICA8dGFnPkFVVE9SRVBFQVQ8bGFiZWwgaWQ9ImNvbW1hbmQtQVVUT1JFUEVBVCI+PC90YWc+CisgICAgQXV0b21hdGljYWxseSByZXBlYXQgYSBjb21tYW5kIGF0IGEgcmVndWxhciBpbnRlcnZhbAorICAgIGFmdGVyIGFuIGluaXRpYWwgZGVsYXkKKyAgICB3aGlsZSBpdHMga2V5IChjb21iaW5hdGlvbikgcmVtYWlucyBwcmVzc2VkLgorICAgIE9ubHkgc29tZSBkcml2ZXJzIHN1cHBvcnQgdGhpcyBmdW5jdGlvbmFsaXR5LAorICAgIHRoZSBwcmltYXJ5IGxpbWl0YXRpb24gYmVpbmcgdGhhdCBtYW55IGJyYWlsbGUgZGlzcGxheXMKKyAgICBkb24ndCBzaWduYWwga2V5IHByZXNzZXMgYW5kIGtleSByZWxlYXNlcyBhcyBkaXN0aW5jdGx5IHNlcGFyYXRlIGV2ZW50cy4KKyAgICBUaGlzIGZlYXR1cmUgaXMgaW5pdGlhbGx5IDxiZi9vbi8uCisgICAgVGhpcyBzZXR0aW5nIGNhbiBhbHNvIGJlIGNoYW5nZWQgd2l0aCB0aGUKKyAgICA8cmVmIGlkPSJwcmVmZXJlbmNlLWF1dG9yZXBlYXQiIG5hbWU9IkF1dG9yZXBlYXQiPiBwcmVmZXJlbmNlLgorICA8dGFnPkFVVE9TUEVBSzxsYWJlbCBpZD0iY29tbWFuZC1BVVRPU1BFQUsiPjwvdGFnPgorICAgIEF1dG9tYXRpY2FsbHkgc3BlYWs6CisgICAgPGl0ZW1pemU+CisgICAgICA8aXRlbT50aGUgbmV3IGxpbmUgd2hlbiB0aGUgYnJhaWxsZSB3aW5kb3cgaXMgbW92ZWQgdmVydGljYWxseS4KKyAgICAgIDxpdGVtPmNoYXJhY3RlcnMgd2hpY2ggYXJlIGVudGVyZWQgb3IgZGVsZXRlZC4KKyAgICAgIDxpdGVtPnRoZSBjaGFyYWN0ZXIgdG8gd2hpY2ggdGhlIGN1cnNvciBpcyBtb3ZlZC4KKyAgICA8L2l0ZW1pemU+CisgICAgVGhpcyBmZWF0dXJlIGlzIGluaXRpYWxseSA8YmYvb2ZmLy4KKyAgICBUaGlzIHNldHRpbmcgY2FuIGFsc28gYmUgY2hhbmdlZCB3aXRoIHRoZQorICAgIDxyZWYgaWQ9InByZWZlcmVuY2UtYXV0b3NwZWFrIiBuYW1lPSJBdXRvc3BlYWsiPiBwcmVmZXJlbmNlLgorPC9kZXNjcmlwPgorCis8c2VjdDI+TW9kZSBTZWxlY3Rpb248bGFiZWwgaWQ9Im1vZGUtc2VsZWN0aW9uIj48cD4KKzxkZXNjcmlwPgorICA8dGFnPkhFTFA8bGFiZWwgaWQ9ImNvbW1hbmQtSEVMUCI+PC90YWc+CisgICAgU3dpdGNoIHRvIHRoZSBicmFpbGxlIGRpc3BsYXkgZHJpdmVyJ3MgaGVscCBwYWdlLgorICAgIFRoaXMgaXMgd2hlcmUgeW91IGNhbiBmaW5kIGFuIG9uLWxpbmUgc3VtbWFyeSBvZiB0aGluZ3MgbGlrZQorICAgIHdoYXQgeW91ciBicmFpbGxlIGRpc3BsYXkncyBrZXlzIGRvLAorICAgIGFuZCBob3cgdG8gaW50ZXJwcmV0IGl0cyBzdGF0dXMgY2VsbHMuCisgICAgVXNlIHRoZSByZWd1bGFyIDxyZWYgaWQ9InZlcnRpY2FsLW1vdGlvbiIgbmFtZT0idmVydGljYWwiPgorICAgIGFuZCA8cmVmIGlkPSJob3Jpem9udGFsLW1vdGlvbiIgbmFtZT0iaG9yaXpvbnRhbCI+IG1vdGlvbiBjb21tYW5kcworICAgIHRvIG5hdmlnYXRlIHRoZSBoZWxwIHBhZ2UuCisgICAgSW52b2tlIHRoZSA8dHQvaGVscC8gY29tbWFuZCBhZ2FpbiB0byByZXR1cm4gdG8gdGhlIHNjcmVlbi4KKyAgPHRhZz5JTkZPPGxhYmVsIGlkPSJjb21tYW5kLUlORk8iPjwvdGFnPgorICAgIFN3aXRjaCB0byB0aGUgc3RhdHVzIGRpc3BsYXkKKyAgICAoc2VlIHNlY3Rpb24gPHJlZiBpZD0ic3RhdHVzIiBuYW1lPSJUaGUgU3RhdHVzIERpc3BsYXkiPiBmb3IgZnVsbCBkZXRhaWxzKS4KKyAgICBJdCBwcmVzZW50cyBhIHN1bW1hcnkgaW5jbHVkaW5nCisgICAgdGhlIHBvc2l0aW9uIG9mIHRoZSBjdXJzb3IsCisgICAgdGhlIHBvc2l0aW9uIG9mIHRoZSBicmFpbGxlIHdpbmRvdywKKyAgICBhbmQgdGhlIHN0YXRlcyBvZiBhIG51bWJlciBvZiBCUkxUVFkncyBmZWF0dXJlcy4KKyAgICBJbnZva2UgdGhpcyBjb21tYW5kIGFnYWluIHRvIHJldHVybiB0byB0aGUgc2NyZWVuLgorICA8dGFnPkxFQVJOPGxhYmVsIGlkPSJjb21tYW5kLUxFQVJOIj48L3RhZz4KKyAgICBTd2l0Y2ggdG8gY29tbWFuZCBsZWFybiBtb2RlCisgICAgKHNlZSBzZWN0aW9uIDxyZWYgaWQ9ImxlYXJuIiBuYW1lPSJDb21tYW5kIExlYXJuIE1vZGUiPiBmb3IgZnVsbCBkZXRhaWxzKS4KKyAgICBUaGlzIGlzIGhvdyB5b3UgY2FuIGludGVyYWN0aXZlbHkgbGVhcm4gd2hhdCB5b3VyIGJyYWlsbGUgZGlzcGxheSdzIGtleXMgZG8uCisgICAgSW52b2tlIHRoaXMgY29tbWFuZCBhZ2FpbiB0byByZXR1cm4gdG8gdGhlIHNjcmVlbi4KKyAgICBUaGlzIGNvbW1hbmQgaXNuJ3QgYXZhaWxhYmxlIGlmIHRoZQorICAgIDxyZWYgaWQ9ImJ1aWxkLWxlYXJuLW1vZGUiIG5hbWU9Ii0tZGlzYWJsZS1sZWFybi1tb2RlIj4gYnVpbGQgb3B0aW9uIHdhcyBzcGVjaWZpZWQuCis8L2Rlc2NyaXA+CisKKzxzZWN0Mj5QcmVmZXJlbmNlIE1haW50ZW5hbmNlPGxhYmVsIGlkPSJwcmVmZXJlbmNlLW1haW50ZW5hbmNlIj48cD4KKzxkZXNjcmlwPgorICA8dGFnPlBSRUZNRU5VPGxhYmVsIGlkPSJjb21tYW5kLVBSRUZNRU5VIj48L3RhZz4KKyAgICBTd2l0Y2ggdG8gdGhlIHByZWZlcmVuY2VzIG1lbnUKKyAgICAoc2VlIDxyZWYgaWQ9InByZWZlcmVuY2VzLW1lbnUiIG5hbWU9IlRoZSBQcmVmZXJlbmNlcyBNZW51Ij4gZm9yIGZ1bGwgZGV0YWlscykuCisgICAgSW52b2tlIHRoaXMgY29tbWFuZCBhZ2FpbiB0byByZXR1cm4gdG8gbm9ybWFsIG9wZXJhdGlvbi4KKyAgPHRhZz5QUkVGU0FWRTxsYWJlbCBpZD0iY29tbWFuZC1QUkVGU0FWRSI+PC90YWc+CisgICAgU2F2ZSB0aGUgY3VycmVudCBwcmVmZXJlbmNlcyBzZXR0aW5ncworICAgIChzZWUgPHJlZiBpZD0icHJlZmVyZW5jZXMiIG5hbWU9IlByZWZlcmVuY2VzIj4gZm9yIGZ1bGwgZGV0YWlscykuCisgIDx0YWc+UFJFRkxPQUQ8bGFiZWwgaWQ9ImNvbW1hbmQtUFJFRkxPQUQiPjwvdGFnPgorICAgIFJlc3RvcmUgdGhlIG1vc3QgcmVjZW50bHkgc2F2ZWQgcHJlZmVyZW5jZXMgc2V0dGluZ3MKKyAgICAoc2VlIDxyZWYgaWQ9InByZWZlcmVuY2VzIiBuYW1lPSJQcmVmZXJlbmNlcyI+IGZvciBmdWxsIGRldGFpbHMpLgorPC9kZXNjcmlwPgorCis8c2VjdDI+TWVudSBOYXZpZ2F0aW9uPGxhYmVsIGlkPSJtZW51LW5hdmlnYXRpb24iPjxwPgorPGRlc2NyaXA+CisgIDx0YWc+TUVOVV9GSVJTVF9JVEVNL01FTlVfTEFTVF9JVEVNPGxhYmVsIGlkPSJjb21tYW5kLU1FTlVfRklSU1RfSVRFTS1NRU5VX0xBU1RfSVRFTSI+PC90YWc+CisgICAgR28gdG8gdGhlIGZpcnN0L2xhc3QgaXRlbSBpbiB0aGUgbWVudS4KKyAgPHRhZz5NRU5VX1BSRVZfSVRFTU1FTlVfTkVYVF9JVEVNLzxsYWJlbCBpZD0iY29tbWFuZC1NRU5VX1BSRVZfSVRFTS1NRU5VX05FWFRfSVRFTSI+PC90YWc+CisgICAgR28gdG8gdGhlIHByZXZpb3VzL25leHQgaXRlbSBpbiB0aGUgbWVudS4KKyAgPHRhZz5NRU5VX1BSRVZfU0VUVElORy9NRU5VX05FWFRfU0VUVElORzxsYWJlbCBpZD0iY29tbWFuZC1NRU5VX1BSRVZfU0VUVElORy1NRU5VX05FWFRfU0VUVElORyI+PC90YWc+CisgICAgRGVjcmVtZW50L2luY3JlbWVudCB0aGUgY3VycmVudCBtZW51IGl0ZW0ncyBzZXR0aW5nLgorPC9kZXNjcmlwPgorCis8c2VjdDI+U3BlZWNoIENvbnRyb2xzPGxhYmVsIGlkPSJzcGVlY2gtY29udHJvbHMiPjxwPgorPGRlc2NyaXA+CisgIDx0YWc+U0FZX0xJTkU8bGFiZWwgaWQ9ImNvbW1hbmQtU0FZX0xJTkUiPjwvdGFnPgorICAgIFNwZWFrIHRoZSBjdXJyZW50IGxpbmUuCisgICAgVGhlIDxyZWYgaWQ9InByZWZlcmVuY2Utc2F5bGluZS1tb2RlIiBuYW1lPSJTYXktTGluZSBNb2RlIj4gcHJlZmVyZW5jZQorICAgIGRldGVybWluZXMgaWYgcGVuZGluZyBzcGVlY2ggaXMgZGlzY2FyZGVkIGZpcnN0LgorICA8dGFnPlNBWV9BQk9WRTxsYWJlbCBpZD0iY29tbWFuZC1TQVlfQUJPVkUiPjwvdGFnPgorICAgIFNwZWFrIHRoZSB0b3AgcG9ydGlvbiBvZiB0aGUgc2NyZWVuIChlbmRpbmcgd2l0aCB0aGUgY3VycmVudCBsaW5lKS4KKyAgPHRhZz5TQVlfQkVMT1c8bGFiZWwgaWQ9ImNvbW1hbmQtU0FZX0JFTE9XIj48L3RhZz4KKyAgICBTcGVhayB0aGUgYm90dG9tIHBvcnRpb24gb2YgdGhlIHNjcmVlbiAoc3RhcnRpbmcgd2l0aCB0aGUgY3VycmVudCBsaW5lKS4KKyAgPHRhZz5NVVRFPGxhYmVsIGlkPSJjb21tYW5kLU1VVEUiPjwvdGFnPgorICAgIFN0b3Agc3BlYWtpbmcgaW1tZWRpYXRlbHkuCisgIDx0YWc+U1BLSE9NRTxsYWJlbCBpZD0iY29tbWFuZC1TUEtIT01FIj48L3RhZz4KKyAgICBHbyB0byB3aGVyZSB0aGUgc3BlZWNoIGN1cnNvciBpcy4KKyAgPHRhZz5TQVlfU0xPV0VSL1NBWV9GQVNURVI8bGFiZWwgaWQ9ImNvbW1hbmQtU0FZX1NMT1dFUi1TQVlfRkFTVEVSIj48L3RhZz4KKyAgICBEZWNyZWFzZS9pbmNyZWFzZSB0aGUgc3BlZWNoIHJhdGUKKyAgICAoc2VlIGFsc28gdGhlIDxyZWYgaWQ9InByZWZlcmVuY2Utc3BlZWNoLXJhdGUiIG5hbWU9IlNwZWVjaCBSYXRlIj4gcHJlZmVyZW5jZSkuCisgICAgVGhpcyBjb21tYW5kIGlzIG9ubHkgYXZhaWxhYmxlIGlmIGEgZHJpdmVyIHdoaWNoIHN1cHBvcnRzIGl0IGlzIGJlaW5nIHVzZWQuCisgIDx0YWc+U0FZX1NPRlRFUi9TQVlfTE9VREVSPGxhYmVsIGlkPSJjb21tYW5kLVNBWV9TT0ZURVItU0FZX0xPVURFUiI+PC90YWc+CisgICAgRGVjcmVhc2UvaW5jcmVhc2UgdGhlIHNwZWVjaCB2b2x1bWUKKyAgICAoc2VlIGFsc28gdGhlIDxyZWYgaWQ9InByZWZlcmVuY2Utc3BlZWNoLXZvbHVtZSIgbmFtZT0iU3BlZWNoIFZvbHVtZSI+IHByZWZlcmVuY2UpLgorICAgIFRoaXMgY29tbWFuZCBpcyBvbmx5IGF2YWlsYWJsZSBpZiBhIGRyaXZlciB3aGljaCBzdXBwb3J0cyBpdCBpcyBiZWluZyB1c2VkLgorPC9kZXNjcmlwPgorCis8c2VjdDI+U3BlZWNoIE5hdmlnYXRpb248bGFiZWwgaWQ9InNwZWVjaC1uYXZpZ2F0aW9uIj48cD4KKzxkZXNjcmlwPgorICA8dGFnL1NQRUFLX0NVUlJfQ0hBUi9hCis8L2Rlc2NyaXA+CisKKzxzZWN0Mj5WaXJ0dWFsIFRlcm1pbmFsIFN3aXRjaGluZzxwPgorU2VlIGFsc28gdGhlIDxyZWYgaWQ9ImNvbW1hbmQtU1dJVENIVlQiIG5hbWU9IlNXSVRDSFZUIj4gcm91dGluZyBrZXkgY29tbWFuZC4KKzxkZXNjcmlwPgorICA8dGFnPlNXSVRDSFZUX1BSRVYvU1dJVENIVlRfTkVYVDxsYWJlbCBpZD0iY29tbWFuZC1TV0lUQ0hWVF9QUkVWLVNXSVRDSFZUX05FWFQiPjwvdGFnPgorICAgIFN3aXRjaCB0byB0aGUgcHJldmlvdXMvbmV4dCB2aXJ0dWFsIHRlcm1pbmFsLgorPC9kZXNjcmlwPgorCis8c2VjdDI+T3RoZXIgQ29tbWFuZHM8cD4KKzxkZXNjcmlwPgorICA8dGFnPkNTUkpNUF9WRVJUPGxhYmVsIGlkPSJjb21tYW5kLUNTUkpNUF9WRVJUIj48L3RhZz4KKyAgICBSb3V0ZSAoYnJpbmcpIHRoZSBjdXJzb3IgdG8gYW55d2hlcmUgb24gdGhlIHRvcCBsaW5lIG9mIHRoZSBicmFpbGxlIHdpbmRvdworICAgIChzZWUgPHJlZiBpZD0icm91dGluZyIgbmFtZT0iQ3Vyc29yIFJvdXRpbmciPiBmb3IgZnVsbCBkZXRhaWxzKS4KKyAgICBUaGUgY3Vyc29yIGlzIG1vdmVkIGJ5IHNpbXVsYXRpbmcgdmVydGljYWwgYXJyb3cta2V5IHByZXNzZXMuCisgICAgVGhpcyBjb21tYW5kIGRvZXNuJ3QgYWx3YXlzIHdvcmsgYmVjYXVzZSBzb21lIGFwcGxpY2F0aW9ucworICAgIGVpdGhlciBtb3ZlIHRoZSBjdXJzb3Igc29tZXdoYXQgdW5wcmVkaWN0YWJseQorICAgIG9yIHVzZSB0aGUgYXJyb3cga2V5cyBmb3IgcHVycG9zZXMgb3RoZXIgdGhhbiBjdXJzb3IgbW90aW9uLgorICAgIEl0J3Mgc29tZXdoYXQgc2FmZXIgdGhhbiB0aGUgb3RoZXIgY3Vyc29yIHJvdXRpbmcgY29tbWFuZHMsIHRob3VnaCwKKyAgICBiZWNhdXNlIGl0IG1ha2VzIG5vIGF0dGVtcHQgdG8gc2ltdWxhdGUgdGhlIGxlZnQtIGFuZCByaWdodC1hcnJvd3MuCisgIDx0YWc+UEFTVEU8bGFiZWwgaWQ9ImNvbW1hbmQtUEFTVEUiPjwvdGFnPgorICAgIEluc2VydCB0aGUgY2hhcmFjdGVycyB3aXRoaW4gdGhlIGN1dCBidWZmZXIgYXQgdGhlIGN1cnJlbnQgY3Vyc29yIGxvY2F0aW9uCisgICAgKHNlZSA8cmVmIGlkPSJjdXQiIG5hbWU9IkN1dCBhbmQgUGFzdGUiPiBmb3IgZnVsbCBkZXRhaWxzKS4KKyAgPHRhZz5SRVNUQVJUQlJMPGxhYmVsIGlkPSJjb21tYW5kLVJFU1RBUlRCUkwiPjwvdGFnPgorICAgIFN0b3AsIGFuZCB0aGVuIHJlc3RhcnQgdGhlIGJyYWlsbGUgZGlzcGxheSBkcml2ZXIuCisgIDx0YWc+UkVTVEFSVFNQRUVDSDxsYWJlbCBpZD0iY29tbWFuZC1SRVNUQVJUU1BFRUNIIj48L3RhZz4KKyAgICBTdG9wLCBhbmQgdGhlbiByZXN0YXJ0IHRoZSBzcGVlY2ggc3ludGhlc2l6ZXIgZHJpdmVyLgorPC9kZXNjcmlwPgorCis8c2VjdDI+Q2hhcmFjdGVyIENvbW1hbmRzPGxhYmVsIGlkPSJjb21tYW5kcy1jaGFyYWN0ZXJzIj48cD4KKzxkZXNjcmlwPgorICA8dGFnPlJPVVRFPGxhYmVsIGlkPSJjb21tYW5kLVJPVVRFIj48L3RhZz4KKyAgICBSb3V0ZSAoYnJpbmcpIHRoZSBjdXJzb3IgdG8gdGhlIGNoYXJhY3RlcgorICAgIGFzc29jaWF0ZWQgd2l0aCB0aGUgcm91dGluZyBrZXkKKyAgICAoc2VlIDxyZWYgaWQ9InJvdXRpbmciIG5hbWU9IkN1cnNvciBSb3V0aW5nIj4gZm9yIGZ1bGwgZGV0YWlscykuCisgICAgVGhlIGN1cnNvciBpcyBtb3ZlZCBieSBzaW11bGF0aW5nIGFycm93LWtleSBwcmVzc2VzLgorICAgIFRoaXMgY29tbWFuZCBkb2Vzbid0IGFsd2F5cyB3b3JrIGJlY2F1c2Ugc29tZSBhcHBsaWNhdGlvbnMKKyAgICBlaXRoZXIgbW92ZSB0aGUgY3Vyc29yIHNvbWV3aGF0IHVucHJlZGljdGFibHkKKyAgICBvciB1c2UgdGhlIGFycm93IGtleXMgZm9yIHB1cnBvc2VzIG90aGVyIHRoYW4gY3Vyc29yIG1vdGlvbi4KKyAgPHRhZz5DVVRCRUdJTjxsYWJlbCBpZD0iY29tbWFuZC1DVVRCRUdJTiI+PC90YWc+CisgICAgQW5jaG9yIHRoZSBzdGFydCBvZiB0aGUgY3V0IGJsb2NrIGF0IHRoZSBjaGFyYWN0ZXIKKyAgICBhc3NvY2lhdGVkIHdpdGggdGhlIHJvdXRpbmcga2V5CisgICAgKHNlZSA8cmVmIGlkPSJjdXQiIG5hbWU9IkN1dCBhbmQgUGFzdGUiPiBmb3IgZnVsbCBkZXRhaWxzKS4KKyAgICBUaGlzIGNvbW1hbmQgY2xlYXJzIHRoZSBjdXQgYnVmZmVyLgorICA8dGFnPkNVVEFQUEVORDxsYWJlbCBpZD0iY29tbWFuZC1DVVRBUFBFTkQiPjwvdGFnPgorICAgIEFuY2hvciB0aGUgc3RhcnQgb2YgdGhlIGN1dCBibG9jayBhdCB0aGUgY2hhcmFjdGVyCisgICAgYXNzb2NpYXRlZCB3aXRoIHRoZSByb3V0aW5nIGtleQorICAgIChzZWUgPHJlZiBpZD0iY3V0IiBuYW1lPSJDdXQgYW5kIFBhc3RlIj4gZm9yIGZ1bGwgZGV0YWlscykuCisgICAgVGhpcyBjb21tYW5kIGRvZXNuJ3QgY2xlYXIgdGhlIGN1dCBidWZmZXIuCisgIDx0YWc+Q1VUUkVDVDxsYWJlbCBpZD0iY29tbWFuZC1DVVRSRUNUIj48L3RhZz4KKyAgICBBbmNob3IgdGhlIGVuZCBvZiB0aGUgY3V0IGJsb2NrIGF0IHRoZSBjaGFyYWN0ZXIKKyAgICBhc3NvY2lhdGVkIHdpdGggdGhlIHJvdXRpbmcga2V5LAorICAgIGFuZCBhcHBlbmQgdGhlIHJlY3Rhbmd1bGFyIHJlZ2lvbiB0byB0aGUgY3V0IGJ1ZmZlcgorICAgIChzZWUgPHJlZiBpZD0iY3V0IiBuYW1lPSJDdXQgYW5kIFBhc3RlIj4gZm9yIGZ1bGwgZGV0YWlscykuCisgIDx0YWc+Q1VUTElORTxsYWJlbCBpZD0iY29tbWFuZC1DVVRMSU5FIj48L3RhZz4KKyAgICBBbmNob3IgdGhlIGVuZCBvZiB0aGUgY3V0IGJsb2NrIGF0IHRoZSBjaGFyYWN0ZXIKKyAgICBhc3NvY2lhdGVkIHdpdGggdGhlIHJvdXRpbmcga2V5LAorICAgIGFuZCBhcHBlbmQgdGhlIGxpbmVhciByZWdpb24gdG8gdGhlIGN1dCBidWZmZXIKKyAgICAoc2VlIDxyZWYgaWQ9ImN1dCIgbmFtZT0iQ3V0IGFuZCBQYXN0ZSI+IGZvciBmdWxsIGRldGFpbHMpLgorICA8dGFnPkNPUFlDSEFSUzxsYWJlbCBpZD0iY29tbWFuZC1DT1BZQ0hBUlMiPjwvdGFnPgorICAgIENvcHkgdGhlIGNoYXJhY3RlciBibG9jaworICAgIGFuY2hvcmVkIGJ5IHRoZSB0d28gcm91dGluZyBrZXlzCisgICAgdG8gdGhlIGN1dCBidWZmZXIKKyAgICAoc2VlIDxyZWYgaWQ9ImN1dCIgbmFtZT0iQ3V0IGFuZCBQYXN0ZSI+IGZvciBmdWxsIGRldGFpbHMpLgorICA8dGFnPkFQTkRDSEFSUzxsYWJlbCBpZD0iY29tbWFuZC1BUE5EQ0hBUlMiPjwvdGFnPgorICAgIEFwcGVuZCB0aGUgY2hhcmFjdGVyIGJsb2NrCisgICAgYW5jaG9yZWQgYnkgdGhlIHR3byByb3V0aW5nIGtleXMKKyAgICB0byB0aGUgY3V0IGJ1ZmZlcgorICAgIChzZWUgPHJlZiBpZD0iY3V0IiBuYW1lPSJDdXQgYW5kIFBhc3RlIj4gZm9yIGZ1bGwgZGV0YWlscykuCisgIDx0YWc+UFJJTkRFTlQvTlhJTkRFTlQ8bGFiZWwgaWQ9ImNvbW1hbmQtUFJJTkRFTlQtTlhJTkRFTlQiPjwvdGFnPgorICAgIEdvIHVwL2Rvd24gdG8gdGhlIG5lYXJlc3QgbGluZSB3aGljaCBpc24ndCBpbmRlbnRlZAorICAgIG1vcmUgdGhhbiB0aGUgY29sdW1uIGFzc29jaWF0ZWQgd2l0aCB0aGUgcm91dGluZyBrZXkuCisgIDx0YWc+REVTQ0NIQVI8bGFiZWwgaWQ9ImNvbW1hbmQtREVTQ0NIQVIiPjwvdGFnPgorICAgIE1vbWVudGFyaWx5IChzZWUgdGhlIDxyZWYgaWQ9Im9wdGlvbnMtbWVzc2FnZS10aW1lb3V0IiBuYW1lPSItTSI+IGNvbW1hbmQgbGluZSBvcHRpb24pCisgICAgZGlzcGxheSBhIG1lc3NhZ2UgZGVzY3JpYmluZyB0aGUgY2hhcmFjdGVyIGFzc29jaWF0ZWQgd2l0aCB0aGUgcm91dGluZyBrZXkuCisgICAgSXQgcmV2ZWFscworICAgIHRoZSBkZWNpbWFsIGFuZCBoZXhhZGVjaW1hbCB2YWx1ZXMgb2YgdGhlIGNoYXJhY3RlciwKKyAgICB0aGUgZm9yZWdyb3VuZCBhbmQgYmFja2dyb3VuZCBjb2xvdXJzLAorICAgIGFuZCwgd2hlbiBwcmVzZW50LCBzcGVjaWFsIGF0dHJpYnV0ZXMgKDx0dC9icmlnaHQvIGFuZCA8dHQvYmxpbmsvKS4KKyAgICBUaGUgbWVzc2FnZSBsb29rcyBsaWtlIHRoaXM6CisgICAgPHRzY3JlZW4+Y2hhciA2NSAoMHg0MSk6IHdoaXRlIG9uIGJsYWNrIGJyaWdodCBibGluazwvdHNjcmVlbj4KKyAgPHRhZz5TRVRMRUZUPGxhYmVsIGlkPSJjb21tYW5kLVNFVExFRlQiPjwvdGFnPgorICAgIEhvcml6b250YWxseSByZXBvc2l0aW9uIHRoZSBicmFpbGxlIHdpbmRvdyBzbyB0aGF0CisgICAgaXRzIGxlZnQgZWRnZSBpcyBhdCB0aGUgY29sdW1uIGFzc29jaWF0ZWQgd2l0aCB0aGUgcm91dGluZyBrZXkuCisgICAgVGhpcyBmZWF0dXJlIG1ha2VzIGl0IHZlcnkgZWFzeSB0byBwdXQgdGhlIHdpbmRvdyBleGFjdGx5IHdoZXJlIGl0J3MgbmVlZGVkLAorICAgIGFuZCwgdGhlcmVmb3JlLCBmb3IgZGlzcGxheXMgd2hpY2ggaGF2ZSByb3V0aW5nIGtleXMsCisgICAgYWxtb3N0IGVsaW1pbmF0ZXMgdGhlIG5lZWQgZm9yIGEgbG90IG9mIGVsZW1lbnRhcnkgd2luZG93IG1vdGlvbgorICAgIChsaWtlCisgICAgdGhlIDxyZWYgaWQ9ImNvbW1hbmQtQ0hSTFQtQ0hSUlQiIG5hbWU9IkNIUkxUL0NIUlJUIj4KKyAgICBhbmQgPHJlZiBpZD0iY29tbWFuZC1IV0lOTFQtSFdJTlJUIiBuYW1lPSJIV0lOTFQvSFdJTlJUIj4KKyAgICBjb21tYW5kcykuCisgIDx0YWc+UFJESUZDSEFSL05YRElGQ0hBUjxsYWJlbCBpZD0iY29tbWFuZC1QUkRJRkNIQVItTlhESUZDSEFSIj48L3RhZz4KKyAgICBHbyB1cC9kb3duIHRvIHRoZSBuZWFyZXN0IGxpbmUgd2hpY2ggaGFzIGEgZGlmZmVyZW50IGNoYXJhY3RlcgorICAgIGluIHRoZSBjb2x1bW4gYXNzb2NpYXRlZCB3aXRoIHRoZSByb3V0aW5nIGtleS4KKzwvZGVzY3JpcD4KKworPHNlY3QyPkJhc2UgQ29tbWFuZHM8bGFiZWwgaWQ9ImNvbW1hbmRzLWJhc2UiPjxwPgorPGRlc2NyaXA+CisgIDx0YWc+U1dJVENIVlQ8bGFiZWwgaWQ9ImNvbW1hbmQtU1dJVENIVlQiPjwvdGFnPgorICAgIFN3aXRjaCB0byB0aGUgdmlydHVhbCB0ZXJtaW5hbCB3aG9zZSBudW1iZXIKKyAgICAoY291bnRpbmcgZnJvbSAxKSBtYXRjaGVzIHRoYXQgb2YgdGhlIHJvdXRpbmcga2V5LgorICAgIFNlZSBhbHNvIHRoZSA8cmVmIGlkPSJjb21tYW5kLVNXSVRDSFZUX1BSRVYtU1dJVENIVlRfTkVYVCIgbmFtZT0iU1dJVENIVlRfUFJFVi9TV0lUQ0hWVF9ORVhUIj4gdmlydHVhbCB0ZXJtaW5hbCBzd2l0Y2hpbmcgY29tbWFuZHMuCisgIDx0YWc+U0VUTUFSSzxsYWJlbCBpZD0iY29tbWFuZC1TRVRNQVJLIj48L3RhZz4KKyAgICBNYXJrIChyZW1lbWJlcikgdGhlIGN1cnJlbnQgcG9zaXRpb24gb2YgdGhlIGJyYWlsbGUgd2luZG93CisgICAgaW4gYSByZWdpc3RlciBhc3NvY2lhdGVkIHdpdGggdGhlIHJvdXRpbmcga2V5LgorICAgIFNlZSB0aGUgPHJlZiBpZD0iY29tbWFuZC1HT1RPTUFSSyIgbmFtZT0iR09UT01BUksiPiBjb21tYW5kLgorICAgIFRoaXMgZmVhdHVyZSBvbmx5IGFmZmVjdHMgdGhlIGN1cnJlbnQgdmlydHVhbCB0ZXJtaW5hbC4KKyAgPHRhZz5HT1RPTUFSSzxsYWJlbCBpZD0iY29tbWFuZC1HT1RPTUFSSyI+PC90YWc+CisgICAgTW92ZSB0aGUgYnJhaWxsZSB3aW5kb3cgdG8gdGhlIHBvc2l0aW9uIGZvcm1lcmx5IG1hcmtlZAorICAgIChzZWUgdGhlIDxyZWYgaWQ9ImNvbW1hbmQtU0VUTUFSSyIgbmFtZT0iU0VUTUFSSyI+IGNvbW1hbmQpCisgICAgd2l0aCB0aGUgc2FtZSByb3V0aW5nIGtleS4KKyAgICBUaGlzIGZlYXR1cmUgb25seSBhZmZlY3RzIHRoZSBjdXJyZW50IHZpcnR1YWwgdGVybWluYWwuCis8L2Rlc2NyaXA+CisKKzxzZWN0MT5UaGUgQ29uZmlndXJhdGlvbiBGaWxlPGxhYmVsIGlkPSJjb25maWd1cmUiPjxwPgorU3lzdGVtIGRlZmF1bHRzIGZvciBtYW55IHNldHRpbmdzIG1heSBiZSBlc3RhYmxpc2hlZCB3aXRoaW4gYSBjb25maWd1cmF0aW9uIGZpbGUuCitUaGUgZGVmYXVsdCBuYW1lIGZvciB0aGlzIGZpbGUgaXMgPHR0Pi9ldGMvYnJsdHR5LmNvbmY8L3R0PiwKK2FsdGhvdWdoIGl0IG1heSBiZSBvdmVycmlkZGVuIHdpdGggdGhlCis8cmVmIGlkPSJvcHRpb25zLWNvbmZpZ3VyYXRpb24tZmlsZSIgbmFtZT0iLWYiPiBjb21tYW5kIGxpbmUgb3B0aW9uLgorSXQgZG9lc24ndCBuZWVkIHRvIGV4aXN0LgorQSB0ZW1wbGF0ZSBmb3IgaXQgY2FuIGJlIGZvdW5kIHdpdGhpbiB0aGUgPHR0L0RvY3VtZW50cy8gc3ViZGlyZWN0b3J5LgorCitCbGFuayBsaW5lcyBhcmUgaWdub3JlZC4KK0EgY29tbWVudCBiZWdpbiB3aXRoIGEgbnVtYmVyIHNpZ24gKDx0dC8mbnVtOy8pLAorYW5kIGNvbnRpbnVlcyB0byB0aGUgZW5kIG9mIHRoZSBsaW5lLgorVGhlIGZvbGxvd2luZyBkaXJlY3RpdmVzIGFyZSByZWNvZ25pemVkOgorPGRlc2NyaXA+CisgIDx0YWc+PHR0L2FwaS1wYXJhbWV0ZXJzLyA8ZW0vbmFtZS88dHQvPS88ZW0vdmFsdWUvPHR0LywvLi4uPGxhYmVsIGlkPSJjb25maWd1cmUtYXBpLXBhcmFtZXRlcnMiPjwvdGFnPgorICAgIFNwZWNpZnkgcGFyYW1ldGVycyBmb3IgdGhlIEFwcGxpY2F0aW9uIFByb2dyYW1taW5nIEludGVyZmFjZS4KKyAgICBJZiB0aGUgc2FtZSBwYXJhbWV0ZXIgaXMgc3BlY2lmaWVkIG1vcmUgdGhhbiBvbmNlLAorICAgIHRoZW4gaXRzIHJpZ2h0bW9zdCBhc3NpZ25tZW50IGlzIHVzZWQuCisgICAgRm9yIGEgZGVzY3JpcHRpb24gb2YgdGhlIHBhcmFtZXRlcnMgYWNjZXB0ZWQgYnkgdGhlIGludGVyZmFjZSwKKyAgICBwbGVhc2Ugc2VlIHRoZSA8YmYvQnJsQVBJLyByZWZlcmVuY2UgbWFudWFsLgorICAgIFNlZSB0aGUgPHJlZiBpZD0iYnVpbGQtYXBpLXBhcmFtZXRlcnMiIG5hbWU9Ii0td2l0aC1hcGktcGFyYW1ldGVycyI+CisgICAgYnVpbGQgb3B0aW9uIGZvciB0aGUgZGVmYXVsdHMgZXN0YWJsaXNoZWQgZHVyaW5nIHRoZSBidWlsZCBwcm9jZWR1cmUuCisgICAgVGhpcyBkaXJlY3RpdmUgY2FuIGJlIG92ZXJyaWRkZW4gd2l0aCB0aGUKKyAgICA8cmVmIGlkPSJvcHRpb25zLWFwaS1wYXJhbWV0ZXJzIiBuYW1lPSItQSI+IGNvbW1hbmQgbGluZSBvcHRpb24uCisgIDx0YWc+PHR0L2F0dHJpYnV0ZXMtdGFibGUvIDxlbS9maWxlLzxsYWJlbCBpZD0iY29uZmlndXJlLWF0dHJpYnV0ZXMtdGFibGUiPjwvdGFnPgorICAgIFNwZWNpZnkgdGhlIGF0dHJpYnV0ZXMgdGFibGUKKyAgICAoc2VlIHNlY3Rpb24gPHJlZiBpZD0idGFibGUtYXR0cmlidXRlcyIgbmFtZT0iQXR0cmlidXRlcyBUYWJsZXMiPiBmb3IgZGV0YWlscykuCisgICAgSWYgYSByZWxhdGl2ZSBwYXRoIGlzIHN1cHBsaWVkLCB0aGVuIGl0J3MgYW5jaG9yZWQgYXQgPHR0Pi9ldGMvYnJsdHR5PC8+CisgICAgKHNlZSB0aGUgPHJlZiBpZD0iYnVpbGQtZGF0YS1kaXJlY3RvcnkiIG5hbWU9Ii0td2l0aC1kYXRhLWRpcmVjdG9yeSI+CisgICAgYW5kIHRoZSA8cmVmIGlkPSJidWlsZC1leGVjdXRlLXJvb3QiIG5hbWU9Ii0td2l0aC1leGVjdXRlLXJvb3QiPgorICAgIGJ1aWxkIG9wdGlvbnMgZm9yIG1vcmUgZGV0YWlscykuCisgICAgVGhlIDx0dC8uYXRiLyBleHRlbnNpb24gaXMgb3B0aW9uYWwuCisgICAgVGhlIGRlZmF1bHQgaXMgdG8gdXNlIHRoZSBidWlsdC1pbiB0YWJsZQorICAgIChzZWUgdGhlIDxyZWYgaWQ9ImJ1aWxkLWF0dHJpYnV0ZXMtdGFibGUiIG5hbWU9Ii0td2l0aC1hdHRyaWJ1dGVzLXRhYmxlIj4gYnVpbGQgb3B0aW9uKS4KKyAgICBUaGlzIGRpcmVjdGl2ZSBjYW4gYmUgb3ZlcnJpZGRlbiB3aXRoIHRoZQorICAgIDxyZWYgaWQ9Im9wdGlvbnMtYXR0cmlidXRlcy10YWJsZSIgbmFtZT0iLWEiPiBjb21tYW5kIGxpbmUgb3B0aW9uLgorICA8dGFnPjx0dC9icmFpbGxlLWRldmljZS8gPGVtL2RldmljZS88dHQvLC8uLi48bGFiZWwgaWQ9ImNvbmZpZ3VyZS1icmFpbGxlLWRldmljZSI+PC90YWc+CisgICAgU3BlY2lmeSB0aGUgZGV2aWNlIHRvIHdoaWNoIHRoZSBicmFpbGxlIGRpc3BsYXkgaXMgY29ubmVjdGVkCisgICAgKHNlZSBzZWN0aW9uIDxyZWYgaWQ9Im9wZXJhbmQtYnJhaWxsZS1kZXZpY2UiIG5hbWU9IkJyYWlsbGUgRGV2aWNlIFNwZWNpZmljYXRpb24iPikuCisgICAgU2VlIHRoZSA8cmVmIGlkPSJidWlsZC1icmFpbGxlLWRldmljZSIgbmFtZT0iLS13aXRoLWJyYWlsbGUtZGV2aWNlIj4KKyAgICBidWlsZCBvcHRpb24gZm9yIHRoZSBkZWZhdWx0IGVzdGFibGlzaGVkIGR1cmluZyB0aGUgYnVpbGQgcHJvY2VkdXJlLgorICAgIFRoaXMgZGlyZWN0aXZlIGNhbiBiZSBvdmVycmlkZGVuIHdpdGggdGhlCisgICAgPHJlZiBpZD0ib3B0aW9ucy1icmFpbGxlLWRldmljZSIgbmFtZT0iLWQiPiBjb21tYW5kIGxpbmUgb3B0aW9uLgorICA8dGFnPjx0dC9icmFpbGxlLWRyaXZlci8gPGVtL2RyaXZlci88dHQvLC8uLi58PHR0L2F1dG8vPGxhYmVsIGlkPSJjb25maWd1cmUtYnJhaWxsZS1kcml2ZXIiPjwvdGFnPgorICAgIFNwZWNpZnkgdGhlIGJyYWlsbGUgZGlzcGxheSBkcml2ZXIKKyAgICAoc2VlIHNlY3Rpb24gPHJlZiBpZD0ib3BlcmFuZC1kcml2ZXIiIG5hbWU9IkRyaXZlciBTcGVjaWZpY2F0aW9uIj4pLgorICAgIFRoZSBkZWZhdWx0IGlzIHRvIHBlcmZvcm0gYXV0b2RldGVjdGlvbi4KKyAgICBUaGlzIGRpcmVjdGl2ZSBjYW4gYmUgb3ZlcnJpZGRlbiB3aXRoIHRoZQorICAgIDxyZWYgaWQ9Im9wdGlvbnMtYnJhaWxsZS1kcml2ZXIiIG5hbWU9Ii1iIj4gY29tbWFuZCBsaW5lIG9wdGlvbi4KKyAgPHRhZz48dHQvYnJhaWxsZS1wYXJhbWV0ZXJzLyBbPGVtL2RyaXZlci88dHQvOi9dPGVtL25hbWUvPHR0Lz0vPGVtL3ZhbHVlLzx0dC8sLy4uLjxsYWJlbCBpZD0iY29uZmlndXJlLWJyYWlsbGUtcGFyYW1ldGVycyI+PC90YWc+CisgICAgU3BlY2lmeSBwYXJhbWV0ZXJzIGZvciB0aGUgYnJhaWxsZSBkaXNwbGF5IGRyaXZlcnMuCisgICAgSWYgdGhlIHNhbWUgcGFyYW1ldGVyIGlzIHNwZWNpZmllZCBtb3JlIHRoYW4gb25jZSwKKyAgICB0aGVuIGl0cyByaWdodG1vc3QgYXNzaWdubWVudCBpcyB1c2VkLgorICAgIElmIGEgcGFyYW1ldGVyIG5hbWUgaXMgcXVhbGlmaWVkIGJ5IGEgZHJpdmVyCisgICAgKHNlZSBzZWN0aW9uIDxyZWYgaWQ9ImRyaXZlcnMiIG5hbWU9IkRyaXZlciBJZGVudGlmaWNhdGlvbiBDb2RlcyI+KQorICAgIHRoZW4gdGhhdCBzZXR0aW5nIG9ubHkgYXBwbGllcyB0byB0aGF0IGRyaXZlcjsKKyAgICBpZiBpdCBpc24ndCB0aGVuIGl0IGFwcGxpZXMgdG8gYWxsIGRyaXZlcnMuCisgICAgRm9yIGEgZGVzY3JpcHRpb24gb2YgdGhlIHBhcmFtZXRlcnMgYWNjZXB0ZWQgYnkgYSBzcGVjaWZpYyBkcml2ZXIsCisgICAgcGxlYXNlIHNlZSB0aGUgZG9jdW1lbnRhdGlvbiBmb3IgdGhhdCBkcml2ZXIuCisgICAgU2VlIHRoZSA8cmVmIGlkPSJidWlsZC1icmFpbGxlLXBhcmFtZXRlcnMiIG5hbWU9Ii0td2l0aC1icmFpbGxlLXBhcmFtZXRlcnMiPgorICAgIGJ1aWxkIG9wdGlvbiBmb3IgdGhlIGRlZmF1bHRzIGVzdGFibGlzaGVkIGR1cmluZyB0aGUgYnVpbGQgcHJvY2VkdXJlLgorICAgIFRoaXMgZGlyZWN0aXZlIGNhbiBiZSBvdmVycmlkZGVuIHdpdGggdGhlCisgICAgPHJlZiBpZD0ib3B0aW9ucy1icmFpbGxlLXBhcmFtZXRlcnMiIG5hbWU9Ii1CIj4gY29tbWFuZCBsaW5lIG9wdGlvbi4KKyAgPHRhZz48dHQvY29udHJhY3Rpb24tdGFibGUvIDxlbS9maWxlLzxsYWJlbCBpZD0iY29uZmlndXJlLWNvbnRyYWN0aW9uLXRhYmxlIj48L3RhZz4KKyAgICBTcGVjaWZ5IHRoZSBjb250cmFjdGlvbiB0YWJsZQorICAgIChzZWUgc2VjdGlvbiA8cmVmIGlkPSJ0YWJsZS1jb250cmFjdGlvbiIgbmFtZT0iQ29udHJhY3Rpb24gVGFibGVzIj4gZm9yIGRldGFpbHMpLgorICAgIElmIGEgcmVsYXRpdmUgcGF0aCBpcyBzdXBwbGllZCwgdGhlbiBpdCdzIGFuY2hvcmVkIGF0IDx0dD4vZXRjL2JybHR0eTwvPgorICAgIChzZWUgdGhlIDxyZWYgaWQ9ImJ1aWxkLWRhdGEtZGlyZWN0b3J5IiBuYW1lPSItLXdpdGgtZGF0YS1kaXJlY3RvcnkiPgorICAgIGFuZCB0aGUgPHJlZiBpZD0iYnVpbGQtZXhlY3V0ZS1yb290IiBuYW1lPSItLXdpdGgtZXhlY3V0ZS1yb290Ij4KKyAgICBidWlsZCBvcHRpb25zIGZvciBtb3JlIGRldGFpbHMpLgorICAgIFRoZSA8dHQvLmN0Yi8gZXh0ZW5zaW9uIGlzIG9wdGlvbmFsLgorICAgIFRoZSBjb250cmFjdGlvbiB0YWJsZSBpcyB1c2VkIHdoZW4gdGhlIDYtZG90IGJyYWlsbGUgZmVhdHVyZSBpcyBhY3RpdmF0ZWQKKyAgICAoc2VlIHRoZSA8cmVmIGlkPSJjb21tYW5kLVNJWERPVFMiIG5hbWU9IlNJWERPVFMiPiBjb21tYW5kCisgICAgYW5kIHRoZSA8cmVmIGlkPSJwcmVmZXJlbmNlLXRleHQtc3R5bGUiIG5hbWU9IlRleHQgU3R5bGUiPiBwcmVmZXJlbmNlKS4KKyAgICBUaGUgZGVmYXVsdCBpcyB0byBkaXNwbGF5IHVuY29udHJhY3RlZCA2LWRvdCBicmFpbGxlLgorICAgIFRoaXMgZGlyZWN0aXZlIGNhbiBiZSBvdmVycmlkZGVuIHdpdGggdGhlCisgICAgPHJlZiBpZD0ib3B0aW9ucy1jb250cmFjdGlvbi10YWJsZSIgbmFtZT0iLWMiPiBjb21tYW5kIGxpbmUgb3B0aW9uLgorICAgIEl0IGlzbid0IGF2YWlsYWJsZSBpZiB0aGUKKyAgICA8cmVmIGlkPSJidWlsZC1jb250cmFjdGVkLWJyYWlsbGUiIG5hbWU9Ii0tZGlzYWJsZS1jb250cmFjdGVkLWJyYWlsbGUiPiBidWlsZCBvcHRpb24gd2FzIHNwZWNpZmllZC4KKyAgPHRhZz48dHQva2V5Ym9hcmQtdGFibGUvIDxlbS9maWxlL3w8dHQvYXV0by88bGFiZWwgaWQ9ImNvbmZpZ3VyZS1rZXlib2FyZC10YWJsZSI+PC90YWc+CisgICAgU3BlY2lmeSB0aGUga2V5Ym9hcmQgdGFibGUKKyAgICAoc2VlIHNlY3Rpb24gPHJlZiBpZD0idGFibGUta2V5IiBuYW1lPSJLZXkgVGFibGVzIj4gZm9yIGRldGFpbHMpLgorICAgIElmIGEgcmVsYXRpdmUgcGF0aCBpcyBzdXBwbGllZCwgdGhlbiBpdCdzIGFuY2hvcmVkIGF0IDx0dD4vZXRjL2JybHR0eTwvPgorICAgIChzZWUgdGhlIDxyZWYgaWQ9ImJ1aWxkLWRhdGEtZGlyZWN0b3J5IiBuYW1lPSItLXdpdGgtZGF0YS1kaXJlY3RvcnkiPgorICAgIGFuZCB0aGUgPHJlZiBpZD0iYnVpbGQtZXhlY3V0ZS1yb290IiBuYW1lPSItLXdpdGgtZXhlY3V0ZS1yb290Ij4KKyAgICBidWlsZCBvcHRpb25zIGZvciBtb3JlIGRldGFpbHMpLgorICAgIFRoZSA8dHQvLmt0Yi8gZXh0ZW5zaW9uIGlzIG9wdGlvbmFsLgorICAgIFRoZSBkZWZhdWx0IGlzIG5vdCB0byB1c2UgYSBrZXlib2FyZCB0YWJsZS4KKyAgICBUaGlzIGRpcmVjdGl2ZSBjYW4gYmUgb3ZlcnJpZGRlbiB3aXRoIHRoZQorICAgIDxyZWYgaWQ9Im9wdGlvbnMta2V5Ym9hcmQtdGFibGUiIG5hbWU9Ii1rIj4gY29tbWFuZCBsaW5lIG9wdGlvbi4KKyAgPHRhZz48dHQva2V5Ym9hcmQtcHJvcGVydGllcy8gPGVtL25hbWUvPHR0Lz0vPGVtL3ZhbHVlLzx0dC8sLy4uLjxsYWJlbCBpZD0iY29uZmlndXJlLWtleWJvYXJkLXByb3BlcnRpZXMiPjwvdGFnPgorICAgIFNwZWNpZnkgdGhlIHByb3BlcnRpZXMgb2YgdGhlIGtleWJvYXJkKHMpIHRvIGJlIG1vbml0b3JlZC4KKyAgICBJZiB0aGUgc2FtZSBwcm9wZXJ0eSBpcyBzcGVjaWZpZWQgbW9yZSB0aGFuIG9uY2UsCisgICAgdGhlbiBpdHMgcmlnaHRtb3N0IGFzc2lnbm1lbnQgaXMgdXNlZC4KKyAgICBTZWUgc2VjdGlvbiA8cmVmIGlkPSJrZXlib2FyZC1wcm9wZXJ0aWVzIiBuYW1lPSJLZXlib2FyZCBQcm9wZXJ0aWVzIj4KKyAgICBmb3IgYSBsaXN0IG9mIHRoZSBwcm9wZXJ0aWVzIHdoaWNoIG1heSBiZSBzcGVjaWZpZWQuCisgICAgVGhlIGRlZmF1bHQgaXMgdG8gbW9uaXRvciBhbGwga2V5Ym9hcmRzLgorICAgIFRoaXMgZGlyZWN0aXZlIGNhbiBiZSBvdmVycmlkZGVuIHdpdGggdGhlCisgICAgPHJlZiBpZD0ib3B0aW9ucy1rZXlib2FyZC1wcm9wZXJ0aWVzIiBuYW1lPSItSyI+IGNvbW1hbmQgbGluZSBvcHRpb24uCisgIDx0YWc+PHR0L21pZGktZGV2aWNlLyA8ZW0vZGV2aWNlLzxsYWJlbCBpZD0iY29uZmlndXJlLW1pZGktZGV2aWNlIj48L3RhZz4KKyAgICBTcGVjaWZ5IHRoZSBkZXZpY2UgdG8gdXNlIGZvciB0aGUgTXVzaWNhbCBJbnN0cnVtZW50IERpZ2l0YWwgSW50ZXJmYWNlCisgICAgKHNlZSBzZWN0aW9uIDxyZWYgaWQ9Im9wZXJhbmQtbWlkaS1kZXZpY2UiIG5hbWU9Ik1JREkgRGV2aWNlIFNwZWNpZmljYXRpb24iPikuCisgICAgVGhpcyBkaXJlY3RpdmUgY2FuIGJlIG92ZXJyaWRkZW4gd2l0aCB0aGUKKyAgICA8cmVmIGlkPSJvcHRpb25zLW1pZGktZGV2aWNlIiBuYW1lPSItbSI+IGNvbW1hbmQgbGluZSBvcHRpb24uCisgICAgSXQgaXNuJ3QgYXZhaWxhYmxlIGlmIHRoZQorICAgIDxyZWYgaWQ9ImJ1aWxkLW1pZGktc3VwcG9ydCIgbmFtZT0iLS1kaXNhYmxlLW1pZGktc3VwcG9ydCI+IGJ1aWxkIG9wdGlvbiB3YXMgc3BlY2lmaWVkLgorICA8dGFnPjx0dC9wY20tZGV2aWNlLyA8ZW0vZGV2aWNlLzxsYWJlbCBpZD0iY29uZmlndXJlLXBjbS1kZXZpY2UiPjwvdGFnPgorICAgIFNwZWNpZnkgdGhlIGRldmljZSB0byB1c2UgZm9yIGRpZ2l0YWwgYXVkaW8KKyAgICAoc2VlIHNlY3Rpb24gPHJlZiBpZD0ib3BlcmFuZC1wY20tZGV2aWNlIiBuYW1lPSJQQ00gRGV2aWNlIFNwZWNpZmljYXRpb24iPikuCisgICAgVGhpcyBkaXJlY3RpdmUgY2FuIGJlIG92ZXJyaWRkZW4gd2l0aCB0aGUKKyAgICA8cmVmIGlkPSJvcHRpb25zLXBjbS1kZXZpY2UiIG5hbWU9Ii1wIj4gY29tbWFuZCBsaW5lIG9wdGlvbi4KKyAgICBJdCBpc24ndCBhdmFpbGFibGUgaWYgdGhlCisgICAgPHJlZiBpZD0iYnVpbGQtcGNtLXN1cHBvcnQiIG5hbWU9Ii0tZGlzYWJsZS1wY20tc3VwcG9ydCI+IGJ1aWxkIG9wdGlvbiB3YXMgc3BlY2lmaWVkLgorICA8dGFnPjx0dC9wcmVmZXJlbmNlcy1maWxlLyA8ZW0vZmlsZS88bGFiZWwgaWQ9ImNvbmZpZ3VyZS1wcmVmZXJlbmNlcy1maWxlIj48L3RhZz4KKyAgICBTcGVjaWZ5IHRoZSBsb2NhdGlvbiBvZiB0aGUgZmlsZSB3aGljaCBpcyB0byBiZSB1c2VkCisgICAgZm9yIHRoZSBzYXZpbmcgYW5kIGxvYWRpbmcgb2YgdXNlciBwcmVmZXJlbmNlcy4KKyAgICBJZiBhIHJlbGF0aXZlIHBhdGggaXMgc3VwcGxpZWQsIHRoZW4gaXQncyBhbmNob3JlZCBhdCA8dHQ+L3Zhci9saWIvYnJsdHR5PC8+LgorICAgIFRoZSBkZWZhdWx0IGlzIHRvIHVzZSA8dHQvYnJsdHR5LnByZWZzLy4KKyAgICBUaGlzIGRpcmVjdGl2ZSBjYW4gYmUgb3ZlcnJpZGRlbiB3aXRoIHRoZQorICAgIDxyZWYgaWQ9Im9wdGlvbnMtcHJlZmVyZW5jZXMtZmlsZSIgbmFtZT0iLUYiPiBjb21tYW5kIGxpbmUgb3B0aW9uLgorICA8dGFnPjx0dC9yZWxlYXNlLWRldmljZS8gPGVtL2Jvb2xlYW4vPGxhYmVsIGlkPSJjb25maWd1cmUtcmVsZWFzZS1kZXZpY2UiPjwvdGFnPgorICAgIFdoZXRoZXIgb3Igbm90IHRvIHJlbGVhc2UgdGhlIGRldmljZSB0byB3aGljaCB0aGUgYnJhaWxsZSBkaXNwbGF5IGlzIGNvbm5lY3RlZAorICAgIHdoZW4gdGhlIGN1cnJlbnQgc2NyZWVuIG9yIHdpbmRvdyBjYW4ndCBiZSByZWFkLgorICAgIDxkZXNjcmlwPgorICAgICAgPHRhZy9vbi9SZWxlYXNlIHRoZSBkZXZpY2UuCisgICAgICA8dGFnL29mZi9Eb24ndCByZWxlYXNlIHRoZSBkZXZpY2UuCisgICAgPC9kZXNjcmlwPgorICAgIFRoZSBkZWZhdWx0IHNldHRpbmcgaXMgPHR0L29uLyBvbiBXaW5kb3dzIHBsYXRmb3JtcworICAgIGFuZCA8dHQvb2ZmLyBvbiBhbGwgb3RoZXIgcGxhdGZvcm1zLgorICAgIFRoaXMgZGlyZWN0aXZlIGNhbiBiZSBvdmVycmlkZGVuIHdpdGggdGhlCisgICAgPHJlZiBpZD0ib3B0aW9ucy1yZWxlYXNlLWRldmljZSIgbmFtZT0iLXIiPiBjb21tYW5kIGxpbmUgb3B0aW9uLgorICA8dGFnPjx0dC9zY3JlZW4tZHJpdmVyLyA8ZW0vZHJpdmVyLzxsYWJlbCBpZD0iY29uZmlndXJlLXNjcmVlbi1kcml2ZXIiPjwvdGFnPgorICAgIFNwZWNpZnkgdGhlIHNjcmVlbiBkcml2ZXIKKyAgICAoc2VlIHNlY3Rpb24gPHJlZiBpZD0ic2NyZWVuIiBuYW1lPSJTdXBwb3J0ZWQgU2NyZWVuIERyaXZlcnMiPikuCisgICAgU2VlIHRoZSA8cmVmIGlkPSJidWlsZC1zY3JlZW4tZHJpdmVyIiBuYW1lPSItLXdpdGgtc2NyZWVuLWRyaXZlciI+CisgICAgYnVpbGQgb3B0aW9uIGZvciB0aGUgZGVmYXVsdCBlc3RhYmxpc2hlZCBkdXJpbmcgdGhlIGJ1aWxkIHByb2NlZHVyZS4KKyAgICBUaGlzIGRpcmVjdGl2ZSBjYW4gYmUgb3ZlcnJpZGRlbiB3aXRoIHRoZQorICAgIDxyZWYgaWQ9Im9wdGlvbnMtc2NyZWVuLWRyaXZlciIgbmFtZT0iLXgiPiBjb21tYW5kIGxpbmUgb3B0aW9uLgorICA8dGFnPjx0dC9zY3JlZW4tcGFyYW1ldGVycy8gWzxlbS9kcml2ZXIvPHR0LzovXTxlbS9uYW1lLzx0dC89LzxlbS92YWx1ZS88dHQvLC8uLi48bGFiZWwgaWQ9ImNvbmZpZ3VyZS1zY3JlZW4tcGFyYW1ldGVycyI+PC90YWc+CisgICAgU3BlY2lmeSBwYXJhbWV0ZXJzIGZvciB0aGUgc2NyZWVuIGRyaXZlcnMuCisgICAgSWYgdGhlIHNhbWUgcGFyYW1ldGVyIGlzIHNwZWNpZmllZCBtb3JlIHRoYW4gb25jZSwKKyAgICB0aGVuIGl0cyByaWdodG1vc3QgYXNzaWdubWVudCBpcyB1c2VkLgorICAgIElmIGEgcGFyYW1ldGVyIG5hbWUgaXMgcXVhbGlmaWVkIGJ5IGEgZHJpdmVyCisgICAgKHNlZSBzZWN0aW9uIDxyZWYgaWQ9InNjcmVlbiIgbmFtZT0iU3VwcG9ydGVkIFNjcmVlbiBEcml2ZXJzIj4pCisgICAgdGhlbiB0aGF0IHNldHRpbmcgb25seSBhcHBsaWVzIHRvIHRoYXQgZHJpdmVyOworICAgIGlmIGl0IGlzbid0IHRoZW4gaXQgYXBwbGllcyB0byBhbGwgZHJpdmVycy4KKyAgICBGb3IgYSBkZXNjcmlwdGlvbiBvZiB0aGUgcGFyYW1ldGVycyBhY2NlcHRlZCBieSBhIHNwZWNpZmljIGRyaXZlciwKKyAgICBwbGVhc2Ugc2VlIHRoZSBkb2N1bWVudGF0aW9uIGZvciB0aGF0IGRyaXZlci4KKyAgICBTZWUgdGhlIDxyZWYgaWQ9ImJ1aWxkLXNjcmVlbi1wYXJhbWV0ZXJzIiBuYW1lPSItLXdpdGgtc2NyZWVuLXBhcmFtZXRlcnMiPgorICAgIGJ1aWxkIG9wdGlvbiBmb3IgdGhlIGRlZmF1bHRzIGVzdGFibGlzaGVkIGR1cmluZyB0aGUgYnVpbGQgcHJvY2VkdXJlLgorICAgIFRoaXMgZGlyZWN0aXZlIGNhbiBiZSBvdmVycmlkZGVuIHdpdGggdGhlCisgICAgPHJlZiBpZD0ib3B0aW9ucy1zY3JlZW4tcGFyYW1ldGVycyIgbmFtZT0iLVgiPiBjb21tYW5kIGxpbmUgb3B0aW9uLgorICA8dGFnPjx0dC9zcGVlY2gtZHJpdmVyLyA8ZW0vZHJpdmVyLzx0dC8sLy4uLnw8dHQvYXV0by88bGFiZWwgaWQ9ImNvbmZpZ3VyZS1zcGVlY2gtZHJpdmVyIj48L3RhZz4KKyAgICBTcGVjaWZ5IHRoZSBzcGVlY2ggc3ludGhlc2l6ZXIgZHJpdmVyCisgICAgKHNlZSBzZWN0aW9uIDxyZWYgaWQ9Im9wZXJhbmQtZHJpdmVyIiBuYW1lPSJEcml2ZXIgU3BlY2lmaWNhdGlvbiI+KS4KKyAgICBUaGUgZGVmYXVsdCBpcyB0byBwZXJmb3JtIGF1dG9kZXRlY3Rpb24uCisgICAgVGhpcyBkaXJlY3RpdmUgY2FuIGJlIG92ZXJyaWRkZW4gd2l0aCB0aGUKKyAgICA8cmVmIGlkPSJvcHRpb25zLXNwZWVjaC1kcml2ZXIiIG5hbWU9Ii1zIj4gY29tbWFuZCBsaW5lIG9wdGlvbi4KKyAgICBJdCBpc24ndCBhdmFpbGFibGUgaWYgdGhlCisgICAgPHJlZiBpZD0iYnVpbGQtc3BlZWNoLXN1cHBvcnQiIG5hbWU9Ii0tZGlzYWJsZS1zcGVlY2gtc3VwcG9ydCI+IGJ1aWxkIG9wdGlvbiB3YXMgc3BlY2lmaWVkLgorICA8dGFnPjx0dC9zcGVlY2gtaW5wdXQvIDxlbS9uYW1lLzxsYWJlbCBpZD0iY29uZmlndXJlLXNwZWVjaC1pbnB1dCI+PC90YWc+CisgICAgU3BlY2lmeSB0aGUgbmFtZSBvZiB0aGUgZmlsZSBzeXN0ZW0gb2JqZWN0CisgICAgKEZJRk8sIG5hbWVkIHBpcGUsIG5hbWVkIHNvY2tldCwgZXRjKQorICAgIHdoaWNoIGNhbiBiZSB1c2VkIGJ5IG90aGVyIGFwcGxpY2F0aW9ucworICAgIGZvciB0ZXh0LXRvLXNwZWVjaCBjb252ZXJzaW9uIHZpYSBCUkxUVFkncyBzcGVlY2ggZHJpdmVyLgorICAgIFRoaXMgZGlyZWN0aXZlIGNhbiBiZSBvdmVycmlkZGVuIHdpdGggdGhlCisgICAgPHJlZiBpZD0ib3B0aW9ucy1zcGVlY2gtaW5wdXQiIG5hbWU9Ii1pIj4gY29tbWFuZCBsaW5lIG9wdGlvbi4KKyAgICBJdCBpc24ndCBhdmFpbGFibGUgaWYgdGhlCisgICAgPHJlZiBpZD0iYnVpbGQtc3BlZWNoLXN1cHBvcnQiIG5hbWU9Ii0tZGlzYWJsZS1zcGVlY2gtc3VwcG9ydCI+IGJ1aWxkIG9wdGlvbiB3YXMgc3BlY2lmaWVkLgorICA8dGFnPjx0dC9zcGVlY2gtcGFyYW1ldGVycy8gWzxlbS9kcml2ZXIvPHR0LzovXTxlbS9uYW1lLzx0dC89LzxlbS92YWx1ZS88dHQvLC8uLi48bGFiZWwgaWQ9ImNvbmZpZ3VyZS1zcGVlY2gtcGFyYW1ldGVycyI+PC90YWc+CisgICAgU3BlY2lmeSBwYXJhbWV0ZXJzIGZvciB0aGUgc3BlZWNoIHN5bnRoZXNpemVyIGRyaXZlcnMuCisgICAgSWYgdGhlIHNhbWUgcGFyYW1ldGVyIGlzIHNwZWNpZmllZCBtb3JlIHRoYW4gb25jZSwKKyAgICB0aGVuIGl0cyByaWdodG1vc3QgYXNzaWdubWVudCBpcyB1c2VkLgorICAgIElmIGEgcGFyYW1ldGVyIG5hbWUgaXMgcXVhbGlmaWVkIGJ5IGEgZHJpdmVyCisgICAgKHNlZSBzZWN0aW9uIDxyZWYgaWQ9ImRyaXZlcnMiIG5hbWU9IkRyaXZlciBJZGVudGlmaWNhdGlvbiBDb2RlcyI+KQorICAgIHRoZW4gdGhhdCBzZXR0aW5nIG9ubHkgYXBwbGllcyB0byB0aGF0IGRyaXZlcjsKKyAgICBpZiBpdCBpc24ndCB0aGVuIGl0IGFwcGxpZXMgdG8gYWxsIGRyaXZlcnMuCisgICAgRm9yIGEgZGVzY3JpcHRpb24gb2YgdGhlIHBhcmFtZXRlcnMgYWNjZXB0ZWQgYnkgYSBzcGVjaWZpYyBkcml2ZXIsCisgICAgcGxlYXNlIHNlZSB0aGUgZG9jdW1lbnRhdGlvbiBmb3IgdGhhdCBkcml2ZXIuCisgICAgU2VlIHRoZSA8cmVmIGlkPSJidWlsZC1zcGVlY2gtcGFyYW1ldGVycyIgbmFtZT0iLS13aXRoLXNwZWVjaC1wYXJhbWV0ZXJzIj4KKyAgICBidWlsZCBvcHRpb24gZm9yIHRoZSBkZWZhdWx0cyBlc3RhYmxpc2hlZCBkdXJpbmcgdGhlIGJ1aWxkIHByb2NlZHVyZS4KKyAgICBUaGlzIGRpcmVjdGl2ZSBjYW4gYmUgb3ZlcnJpZGRlbiB3aXRoIHRoZQorICAgIDxyZWYgaWQ9Im9wdGlvbnMtc3BlZWNoLXBhcmFtZXRlcnMiIG5hbWU9Ii1TIj4gY29tbWFuZCBsaW5lIG9wdGlvbi4KKyAgPHRhZz48dHQvdGV4dC10YWJsZS8gPGVtL2ZpbGUvfDx0dC9hdXRvLzxsYWJlbCBpZD0iY29uZmlndXJlLXRleHQtdGFibGUiPjwvdGFnPgorICAgIFNwZWNpZnkgdGhlIHRleHQgdGFibGUKKyAgICAoc2VlIHNlY3Rpb24gPHJlZiBpZD0idGFibGUtdGV4dCIgbmFtZT0iVGV4dCBUYWJsZXMiPiBmb3IgZGV0YWlscykuCisgICAgSWYgYSByZWxhdGl2ZSBwYXRoIGlzIHN1cHBsaWVkLCB0aGVuIGl0J3MgYW5jaG9yZWQgYXQgPHR0Pi9ldGMvYnJsdHR5PC8+CisgICAgKHNlZSB0aGUgPHJlZiBpZD0iYnVpbGQtZGF0YS1kaXJlY3RvcnkiIG5hbWU9Ii0td2l0aC1kYXRhLWRpcmVjdG9yeSI+CisgICAgYW5kIHRoZSA8cmVmIGlkPSJidWlsZC1leGVjdXRlLXJvb3QiIG5hbWU9Ii0td2l0aC1leGVjdXRlLXJvb3QiPgorICAgIGJ1aWxkIG9wdGlvbnMgZm9yIG1vcmUgZGV0YWlscykuCisgICAgVGhlIDx0dC8udHRiLyBleHRlbnNpb24gaXMgb3B0aW9uYWwuCisgICAgVGhlIGRlZmF1bHQgaXMgdG8gcGVyZm9ybSBsb2NhbGUtYmFzZWQgYXV0b3NlbGVjdGlvbiwKKyAgICB3aXRoIGZhbGxiYWNrIHRvIHRoZSBidWlsdC1pbiB0YWJsZQorICAgIChzZWUgdGhlIDxyZWYgaWQ9ImJ1aWxkLXRleHQtdGFibGUiIG5hbWU9Ii0td2l0aC10ZXh0LXRhYmxlIj4gYnVpbGQgb3B0aW9uKS4KKyAgICBUaGlzIGRpcmVjdGl2ZSBjYW4gYmUgb3ZlcnJpZGRlbiB3aXRoIHRoZQorICAgIDxyZWYgaWQ9Im9wdGlvbnMtdGV4dC10YWJsZSIgbmFtZT0iLXQiPiBjb21tYW5kIGxpbmUgb3B0aW9uLgorPC9kZXNjcmlwPgorCis8c2VjdDE+Q29tbWFuZCBMaW5lIE9wdGlvbnM8bGFiZWwgaWQ9Im9wdGlvbnMiPjxwPgorTWFueSBzZXR0aW5ncyBjYW4gYmUgZXhwbGljaXRseSBzcGVjaWZpZWQgd2hlbiBpbnZva2luZyBCUkxUVFkuCitUaGUgPHR0L2JybHR0eS8gY29tbWFuZCBhY2NlcHRzIHRoZSBmb2xsb3dpbmcgb3B0aW9uczoKKzxkZXNjcmlwPgorICA8dGFnPjx0dC8tYS88ZW0vZmlsZS8gPHR0Ly0tYXR0cmlidXRlcy10YWJsZT0vPGVtL2ZpbGUvPGxhYmVsIGlkPSJvcHRpb25zLWF0dHJpYnV0ZXMtdGFibGUiPjwvdGFnPgorICAgIFNwZWNpZnkgdGhlIGF0dHJpYnV0ZXMgdGFibGUKKyAgICAoc2VlIHNlY3Rpb24gPHJlZiBpZD0idGFibGUtYXR0cmlidXRlcyIgbmFtZT0iQXR0cmlidXRlcyBUYWJsZXMiPiBmb3IgZGV0YWlscykuCisgICAgSWYgYSByZWxhdGl2ZSBwYXRoIGlzIHN1cHBsaWVkLCB0aGVuIGl0J3MgYW5jaG9yZWQgYXQgPHR0Pi9ldGMvYnJsdHR5PC8+CisgICAgKHNlZSB0aGUgPHJlZiBpZD0iYnVpbGQtZGF0YS1kaXJlY3RvcnkiIG5hbWU9Ii0td2l0aC1kYXRhLWRpcmVjdG9yeSI+CisgICAgYW5kIHRoZSA8cmVmIGlkPSJidWlsZC1leGVjdXRlLXJvb3QiIG5hbWU9Ii0td2l0aC1leGVjdXRlLXJvb3QiPgorICAgIGJ1aWxkIG9wdGlvbnMgZm9yIG1vcmUgZGV0YWlscykuCisgICAgVGhlIDx0dC8uYXRiLyBleHRlbnNpb24gaXMgb3B0aW9uYWwuCisgICAgU2VlIHRoZSA8cmVmIGlkPSJjb25maWd1cmUtYXR0cmlidXRlcy10YWJsZSIgbmFtZT0iYXR0cmlidXRlcy10YWJsZSI+CisgICAgY29uZmlndXJhdGlvbiBmaWxlIGRpcmVjdGl2ZSBmb3IgdGhlIGRlZmF1bHQgcnVuLXRpbWUgc2V0dGluZy4KKyAgICBUaGlzIHNldHRpbmcgY2FuIGJlIGNoYW5nZWQgd2l0aCB0aGUKKyAgICA8cmVmIGlkPSJwcmVmZXJlbmNlLWF0dHJpYnV0ZXMtdGFibGUiIG5hbWU9IkF0dHJpYnV0ZXMgVGFibGUiPiBwcmVmZXJlbmNlLgorICA8dGFnPjx0dC8tYi88ZW0vZHJpdmVyLzx0dC8sLy4uLnw8dHQvYXV0by8gPHR0Ly0tYnJhaWxsZS1kcml2ZXI9LzxlbS9kcml2ZXIvPHR0LywvLi4ufDx0dC9hdXRvLzxsYWJlbCBpZD0ib3B0aW9ucy1icmFpbGxlLWRyaXZlciI+PC90YWc+CisgICAgU3BlY2lmeSB0aGUgYnJhaWxsZSBkaXNwbGF5IGRyaXZlcgorICAgIChzZWUgc2VjdGlvbiA8cmVmIGlkPSJvcGVyYW5kLWRyaXZlciIgbmFtZT0iRHJpdmVyIFNwZWNpZmljYXRpb24iPikuCisgICAgU2VlIHRoZSA8cmVmIGlkPSJjb25maWd1cmUtYnJhaWxsZS1kcml2ZXIiIG5hbWU9ImJyYWlsbGUtZHJpdmVyIj4KKyAgICBjb25maWd1cmF0aW9uIGZpbGUgZGlyZWN0aXZlIGZvciB0aGUgZGVmYXVsdCBydW4tdGltZSBzZXR0aW5nLgorICA8dGFnPjx0dC8tYy88ZW0vZmlsZS8gPHR0Ly0tY29udHJhY3Rpb24tdGFibGU9LzxlbS9maWxlLzxsYWJlbCBpZD0ib3B0aW9ucy1jb250cmFjdGlvbi10YWJsZSI+PC90YWc+CisgICAgU3BlY2lmeSB0aGUgY29udHJhY3Rpb24gdGFibGUKKyAgICAoc2VlIHNlY3Rpb24gPHJlZiBpZD0idGFibGUtY29udHJhY3Rpb24iIG5hbWU9IkNvbnRyYWN0aW9uIFRhYmxlcyI+IGZvciBkZXRhaWxzKS4KKyAgICBJZiBhIHJlbGF0aXZlIHBhdGggaXMgc3VwcGxpZWQsIHRoZW4gaXQncyBhbmNob3JlZCBhdCA8dHQ+L2V0Yy9icmx0dHk8Lz4KKyAgICAoc2VlIHRoZSA8cmVmIGlkPSJidWlsZC1kYXRhLWRpcmVjdG9yeSIgbmFtZT0iLS13aXRoLWRhdGEtZGlyZWN0b3J5Ij4KKyAgICBhbmQgdGhlIDxyZWYgaWQ9ImJ1aWxkLWV4ZWN1dGUtcm9vdCIgbmFtZT0iLS13aXRoLWV4ZWN1dGUtcm9vdCI+CisgICAgYnVpbGQgb3B0aW9ucyBmb3IgbW9yZSBkZXRhaWxzKS4KKyAgICBUaGUgPHR0Ly5jdGIvIGV4dGVuc2lvbiBpcyBvcHRpb25hbC4KKyAgICBUaGUgY29udHJhY3Rpb24gdGFibGUgaXMgdXNlZCB3aGVuIHRoZSA2LWRvdCBicmFpbGxlIGZlYXR1cmUgaXMgYWN0aXZhdGVkCisgICAgKHNlZSB0aGUgPHJlZiBpZD0iY29tbWFuZC1TSVhET1RTIiBuYW1lPSJTSVhET1RTIj4gY29tbWFuZAorICAgIGFuZCB0aGUgPHJlZiBpZD0icHJlZmVyZW5jZS10ZXh0LXN0eWxlIiBuYW1lPSJUZXh0IFN0eWxlIj4gcHJlZmVyZW5jZSkuCisgICAgU2VlIHRoZSA8cmVmIGlkPSJjb25maWd1cmUtY29udHJhY3Rpb24tdGFibGUiIG5hbWU9ImNvbnRyYWN0aW9uLXRhYmxlIj4KKyAgICBjb25maWd1cmVhdGlvbiBmaWxlIGRpcmVjdGl2ZSBmb3IgdGhlIGRlZmF1bHQgcnVuLXRpbWUgc2V0dGluZy4KKyAgICBUaGlzIHNldHRpbmcgY2FuIGJlIGNoYW5nZWQgd2l0aCB0aGUKKyAgICA8cmVmIGlkPSJwcmVmZXJlbmNlLWNvbnRyYWN0aW9uLXRhYmxlIiBuYW1lPSJDb250cmFjdGlvbiBUYWJsZSI+IHByZWZlcmVuY2UuCisgICAgVGhpcyBvcHRpb24gaXNuJ3QgYXZhaWxhYmxlIGlmIHRoZQorICAgIDxyZWYgaWQ9ImJ1aWxkLWNvbnRyYWN0ZWQtYnJhaWxsZSIgbmFtZT0iLS1kaXNhYmxlLWNvbnRyYWN0ZWQtYnJhaWxsZSI+IGJ1aWxkIG9wdGlvbiB3YXMgc3BlY2lmaWVkLgorICA8dGFnPjx0dC8tZC88ZW0vZGV2aWNlLzx0dC8sLy4uLiA8dHQvLS1icmFpbGxlLWRldmljZT0vPGVtL2RldmljZS88dHQvLC8uLi48bGFiZWwgaWQ9Im9wdGlvbnMtYnJhaWxsZS1kZXZpY2UiPjwvdGFnPgorICAgIFNwZWNpZnkgdGhlIGRldmljZSB0byB3aGljaCB0aGUgYnJhaWxsZSBkaXNwbGF5IGlzIGNvbm5lY3RlZAorICAgIChzZWUgc2VjdGlvbiA8cmVmIGlkPSJvcGVyYW5kLWJyYWlsbGUtZGV2aWNlIiBuYW1lPSJCcmFpbGxlIERldmljZSBTcGVjaWZpY2F0aW9uIj4pLgorICAgIFNlZSB0aGUgPHJlZiBpZD0iY29uZmlndXJlLWJyYWlsbGUtZGV2aWNlIiBuYW1lPSJicmFpbGxlLWRldmljZSI+CisgICAgY29uZmlndXJhdGlvbiBmaWxlIGRpcmVjdGl2ZSBmb3IgdGhlIGRlZmF1bHQgcnVuLXRpbWUgc2V0dGluZy4KKyAgPHRhZz48dHQvLWUvIDx0dC8tLXN0YW5kYXJkLWVycm9yLzxsYWJlbCBpZD0ib3B0aW9ucy1zdGFuZGFyZC1lcnJvciI+PC90YWc+CisgICAgV3JpdGUgZGlhZ25vc3RpYyBtZXNzYWdlcyB0byBzdGFuZGFyZCBlcnJvci4KKyAgICBUaGUgZGVmYXVsdCBpcyB0byByZWNvcmQgdGhlbSB2aWEgPHR0L3N5c2xvZy8uCisgIDx0YWc+PHR0Ly1mLzxlbS9maWxlLyA8dHQvLS1jb25maWd1cmF0aW9uLWZpbGU9LzxlbS9maWxlLzxsYWJlbCBpZD0ib3B0aW9ucy1jb25maWd1cmF0aW9uLWZpbGUiPjwvdGFnPgorICAgIFNwZWNpZnkgdGhlIGxvY2F0aW9uIG9mIHRoZSA8cmVmIGlkPSJjb25maWd1cmUiIG5hbWU9ImNvbmZpZ3VyYXRpb24gZmlsZSI+CisgICAgd2hpY2ggaXMgdG8gYmUgdXNlZCBmb3IgdGhlIGVzdGFibGlzaGluZyBvZiBkZWZhdWx0IHJ1bi10aW1lIHNldHRpbmdzLgorICA8dGFnPjx0dC8taC8gPHR0Ly0taGVscC88bGFiZWwgaWQ9Im9wdGlvbnMtaGVscCI+PC90YWc+CisgICAgRGlzcGxheSBhIHN1bW1hcnkgb2YgdGhlIGNvbW1hbmQgbGluZSBvcHRpb25zIGFjY2VwdGVkIGJ5IEJSTFRUWSwKKyAgICBhbmQgdGhlbiBleGl0LgorICA8dGFnPjx0dC8taS88ZW0vbmFtZS8gPHR0Ly0tc3BlZWNoLWlucHV0PS88ZW0vbmFtZS88bGFiZWwgaWQ9Im9wdGlvbnMtc3BlZWNoLWlucHV0Ij48L3RhZz4KKyAgICBTcGVjaWZ5IHRoZSBuYW1lIG9mIHRoZSBmaWxlIHN5c3RlbSBvYmplY3QKKyAgICAoRklGTywgbmFtZWQgcGlwZSwgbmFtZWQgc29ja2V0LCBldGMpCisgICAgd2hpY2ggY2FuIGJlIHVzZWQgYnkgb3RoZXIgYXBwbGljYXRpb25zCisgICAgZm9yIHRleHQtdG8tc3BlZWNoIGNvbnZlcnNpb24gdmlhIEJSTFRUWSdzIHNwZWVjaCBkcml2ZXIuCisgICAgSWYgbm90IHNwZWNpZmllZCwgdGhlIGZpbGUgc3lzdGVtIG9iamVjdCBpcyBub3QgY3JlYXRlZC4KKyAgICBTZWUgdGhlIDxyZWYgaWQ9ImNvbmZpZ3VyZS1zcGVlY2gtaW5wdXQiIG5hbWU9InNwZWVjaC1pbnB1dCI+CisgICAgY29uZmlndXJhdGlvbiBmaWxlIGRpcmVjdGl2ZSBmb3IgdGhlIGRlZmF1bHQgcnVuLXRpbWUgc2V0dGluZy4KKyAgICBUaGlzIG9wdGlvbiBpc24ndCBhdmFpbGFibGUgaWYgdGhlCisgICAgPHJlZiBpZD0iYnVpbGQtc3BlZWNoLXN1cHBvcnQiIG5hbWU9Ii0tZGlzYWJsZS1zcGVlY2gtc3VwcG9ydCI+IGJ1aWxkIG9wdGlvbiB3YXMgc3BlY2lmaWVkLgorICA8dGFnPjx0dC8tay88ZW0vZmlsZS8gPHR0Ly0ta2V5Ym9hcmQtdGFibGU9LzxlbS9maWxlLzxsYWJlbCBpZD0ib3B0aW9ucy1rZXlib2FyZC10YWJsZSI+PC90YWc+CisgICAgU3BlY2lmeSB0aGUga2V5Ym9hcmQgdGFibGUKKyAgICAoc2VlIHNlY3Rpb24gPHJlZiBpZD0idGFibGUta2V5IiBuYW1lPSJLZXkgVGFibGVzIj4gZm9yIGRldGFpbHMpLgorICAgIElmIGEgcmVsYXRpdmUgcGF0aCBpcyBzdXBwbGllZCwgdGhlbiBpdCdzIGFuY2hvcmVkIGF0IDx0dD4vZXRjL2JybHR0eTwvPgorICAgIChzZWUgdGhlIDxyZWYgaWQ9ImJ1aWxkLWRhdGEtZGlyZWN0b3J5IiBuYW1lPSItLXdpdGgtZGF0YS1kaXJlY3RvcnkiPgorICAgIGFuZCB0aGUgPHJlZiBpZD0iYnVpbGQtZXhlY3V0ZS1yb290IiBuYW1lPSItLXdpdGgtZXhlY3V0ZS1yb290Ij4KKyAgICBidWlsZCBvcHRpb25zIGZvciBtb3JlIGRldGFpbHMpLgorICAgIFRoZSA8dHQvLmt0Yi8gZXh0ZW5zaW9uIGlzIG9wdGlvbmFsLgorICAgIFNlZSB0aGUgPHJlZiBpZD0iY29uZmlndXJlLWtleWJvYXJkLXRhYmxlIiBuYW1lPSJrZXlib2FyZC10YWJsZSI+CisgICAgY29uZmlndXJlYXRpb24gZmlsZSBkaXJlY3RpdmUgZm9yIHRoZSBkZWZhdWx0IHJ1bi10aW1lIHNldHRpbmcuCisgICAgVGhpcyBzZXR0aW5nIGNhbiBiZSBjaGFuZ2VkIHdpdGggdGhlCisgICAgPHJlZiBpZD0icHJlZmVyZW5jZS1rZXlib2FyZC10YWJsZSIgbmFtZT0iS2V5Ym9hcmQgVGFibGUiPiBwcmVmZXJlbmNlLgorICA8dGFnPjx0dC8tbC88ZW0vbGV2ZWwvIDx0dC8tLWxvZy1sZXZlbD0vPGVtL2xldmVsLzxsYWJlbCBpZD0ib3B0aW9ucy1sb2ctbGV2ZWwiPjwvdGFnPgorICAgIFNwZWNpZnkgdGhlIHNldmVyaXR5IHRocmVzaG9sZCBmb3IgZGlhZ25vc3RpYyBtZXNzYWdlIGdlbmVyYXRpb24uCisgICAgVGhlIGZvbGxvd2luZyBsZXZlbHMgYXJlIHJlY29nbml6ZWQuCisgICAgPGRlc2NyaXA+CisgICAgICA8dGFnLzAvZW1lcmdlbmN5CisgICAgICA8dGFnLzEvYWxlcnQKKyAgICAgIDx0YWcvMi9jcml0aWNhbAorICAgICAgPHRhZy8zL2Vycm9yCisgICAgICA8dGFnLzQvd2FybmluZworICAgICAgPHRhZy81L25vdGljZQorICAgICAgPHRhZy82L2luZm9ybWF0aW9uCisgICAgICA8dGFnLzcvZGVidWcKKyAgICA8L2Rlc2NyaXA+CisgICAgRWl0aGVyIHRoZSBudW1iZXIgb3IgdGhlIG5hbWUgbWF5IGJlIHN1cHBsaWVkLAorICAgIGFuZCB0aGUgbmFtZSBtYXkgYmUgYWJicmV2aWF0ZWQuCisgICAgSWYgbm90IHNwZWNpZmllZCwKKyAgICB0aGVuIDx0dC9pbmZvcm1hdGlvbi8gaXMgYXNzdW1lZAorICAgIChzZWUgdGhlIDxyZWYgaWQ9Im9wdGlvbnMtcXVpZXQiIG5hbWU9Ii1xIj4gb3B0aW9uIGZvciBtb3JlIGRldGFpbHMpLgorICA8dGFnPjx0dC8tbS88ZW0vZGV2aWNlLyA8dHQvLS1taWRpLWRldmljZT0vPGVtL2RldmljZS88bGFiZWwgaWQ9Im9wdGlvbnMtbWlkaS1kZXZpY2UiPjwvdGFnPgorICAgIFNwZWNpZnkgdGhlIGRldmljZSB0byB1c2UgZm9yIHRoZSBNdXNpY2FsIEluc3RydW1lbnQgRGlnaXRhbCBJbnRlcmZhY2UKKyAgICAoc2VlIHNlY3Rpb24gPHJlZiBpZD0ib3BlcmFuZC1taWRpLWRldmljZSIgbmFtZT0iTUlESSBEZXZpY2UgU3BlY2lmaWNhdGlvbiI+KS4KKyAgICBTZWUgdGhlIDxyZWYgaWQ9ImNvbmZpZ3VyZS1taWRpLWRldmljZSIgbmFtZT0ibWlkaS1kZXZpY2UiPgorICAgIGNvbmZpZ3VyYXRpb24gZmlsZSBkaXJlY3RpdmUgZm9yIHRoZSBkZWZhdWx0IHJ1bi10aW1lIHNldHRpbmcuCisgICAgVGhpcyBvcHRpb24gaXNuJ3QgYXZhaWxhYmxlIGlmIHRoZQorICAgIDxyZWYgaWQ9ImJ1aWxkLW1pZGktc3VwcG9ydCIgbmFtZT0iLS1kaXNhYmxlLW1pZGktc3VwcG9ydCI+IGJ1aWxkIG9wdGlvbiB3YXMgc3BlY2lmaWVkLgorICA8dGFnPjx0dC8tbi8gPHR0Ly0tbm8tZGFlbW9uLzxsYWJlbCBpZD0ib3B0aW9ucy1uby1kYWVtb24iPjwvdGFnPgorICAgIFNwZWNpZnkgdGhhdCBCUkxUVFkgaXMgdG8gcmVtYWluIGluIHRoZSBmb3JlZ3JvdW5kLgorICAgIElmIG5vdCBzcGVjaWZpZWQsIHRoZW4gQlJMVFRZIGJlY29tZXMgYSBiYWNrZ3JvdW5kIHByb2Nlc3MgKGRhZW1vbikKKyAgICBhZnRlciBpbml0aWFsaXppbmcgaXRzZWxmIGJ1dCBiZWZvcmUgc3RhcnRpbmcgYW55IG9mIHRoZSBzZWxlY3RlZCBkcml2ZXJzLgorICA8dGFnPjx0dC8tcC88ZW0vZGV2aWNlLyA8dHQvLS1wY20tZGV2aWNlPS88ZW0vZGV2aWNlLzxsYWJlbCBpZD0ib3B0aW9ucy1wY20tZGV2aWNlIj48L3RhZz4KKyAgICBTcGVjaWZ5IHRoZSBkZXZpY2UgdG8gdXNlIGZvciBkaWdpdGFsIGF1ZGlvCisgICAgKHNlZSBzZWN0aW9uIDxyZWYgaWQ9Im9wZXJhbmQtcGNtLWRldmljZSIgbmFtZT0iUENNIERldmljZSBTcGVjaWZpY2F0aW9uIj4pLgorICAgIFNlZSB0aGUgPHJlZiBpZD0iY29uZmlndXJlLXBjbS1kZXZpY2UiIG5hbWU9InBjbS1kZXZpY2UiPgorICAgIGNvbmZpZ3VyYXRpb24gZmlsZSBkaXJlY3RpdmUgZm9yIHRoZSBkZWZhdWx0IHJ1bi10aW1lIHNldHRpbmcuCisgICAgVGhpcyBvcHRpb24gaXNuJ3QgYXZhaWxhYmxlIGlmIHRoZQorICAgIDxyZWYgaWQ9ImJ1aWxkLXBjbS1zdXBwb3J0IiBuYW1lPSItLWRpc2FibGUtcGNtLXN1cHBvcnQiPiBidWlsZCBvcHRpb24gd2FzIHNwZWNpZmllZC4KKyAgPHRhZz48dHQvLXEvIDx0dC8tLXF1aWV0LzxsYWJlbCBpZD0ib3B0aW9ucy1xdWlldCI+PC90YWc+CisgICAgTG9nIGxlc3MgaW5mb3JtYXRpb24uCisgICAgVGhpcyBvcHRpb24gY2hhbmdlcyB0aGUgZGVmYXVsdCBsb2cgbGV2ZWwKKyAgICAoc2VlIHRoZSA8cmVmIGlkPSJvcHRpb25zLWxvZy1sZXZlbCIgbmFtZT0iLWwiPiBvcHRpb24pCisgICAgdG8gPHR0L25vdGljZS8gaWYKKyAgICBlaXRoZXIgdGhlIDxyZWYgaWQ9Im9wdGlvbnMtdmVyaWZ5IiBuYW1lPSItdiI+CisgICAgb3IgdGhlIDxyZWYgaWQ9Im9wdGlvbnMtdmVyc2lvbiIgbmFtZT0iLVYiPgorICAgIG9wdGlvbiBpcyBzcGVjaWZpZWQsIGFuZCB0byA8dHQvd2FybmluZy8gb3RoZXJ3aXNlLgorICA8dGFnPjx0dC8tci8gPHR0Ly0tcmVsZWFzZS1kZXZpY2UvPGxhYmVsIGlkPSJvcHRpb25zLXJlbGVhc2UtZGV2aWNlIj48L3RhZz4KKyAgICBSZWxlYXNlIHRoZSBkZXZpY2UgdG8gd2hpY2ggdGhlIGJyYWlsbGUgZGlzcGxheSBpcyBjb25uZWN0ZWQKKyAgICB3aGVuIHRoZSBjdXJyZW50IHNjcmVlbiBvciB3aW5kb3cgY2FuJ3QgYmUgcmVhZC4KKyAgICBTZWUgdGhlIDxyZWYgaWQ9ImNvbmZpZ3VyZS1yZWxlYXNlLWRldmljZSIgbmFtZT0icmVsZWFzZS1kZXZpY2UiPgorICAgIGNvbmZpZ3VyYXRpb24gZmlsZSBkaXJlY3RpdmUgZm9yIHRoZSBkZWZhdWx0IHJ1bi10aW1lIHNldHRpbmcuCisgIDx0YWc+PHR0Ly1zLzxlbS9kcml2ZXIvPHR0LywvLi4ufDx0dC9hdXRvLyA8dHQvLS1zcGVlY2gtZHJpdmVyPS88ZW0vZHJpdmVyLzx0dC8sLy4uLnw8dHQvYXV0by88bGFiZWwgaWQ9Im9wdGlvbnMtc3BlZWNoLWRyaXZlciI+PC90YWc+CisgICAgU3BlY2lmeSB0aGUgc3BlZWNoIHN5bnRoZXNpemVyIGRyaXZlcgorICAgIChzZWUgc2VjdGlvbiA8cmVmIGlkPSJvcGVyYW5kLWRyaXZlciIgbmFtZT0iRHJpdmVyIFNwZWNpZmljYXRpb24iPikuCisgICAgU2VlIHRoZSA8cmVmIGlkPSJjb25maWd1cmUtc3BlZWNoLWRyaXZlciIgbmFtZT0ic3BlZWNoLWRyaXZlciI+CisgICAgY29uZmlndXJhdGlvbiBmaWxlIGRpcmVjdGl2ZSBmb3IgdGhlIGRlZmF1bHQgcnVuLXRpbWUgc2V0dGluZy4KKyAgICBUaGlzIG9wdGlvbiBpc24ndCBhdmFpbGFibGUgaWYgdGhlCisgICAgPHJlZiBpZD0iYnVpbGQtc3BlZWNoLXN1cHBvcnQiIG5hbWU9Ii0tZGlzYWJsZS1zcGVlY2gtc3VwcG9ydCI+IGJ1aWxkIG9wdGlvbiB3YXMgc3BlY2lmaWVkLgorICA8dGFnPjx0dC8tdC88ZW0vZmlsZS8gPHR0Ly0tdGV4dC10YWJsZT0vPGVtL2ZpbGUvPGxhYmVsIGlkPSJvcHRpb25zLXRleHQtdGFibGUiPjwvdGFnPgorICAgIFNwZWNpZnkgdGhlIHRleHQgdGFibGUKKyAgICAoc2VlIHNlY3Rpb24gPHJlZiBpZD0idGFibGUtdGV4dCIgbmFtZT0iVGV4dCBUYWJsZXMiPiBmb3IgZGV0YWlscykuCisgICAgSWYgYSByZWxhdGl2ZSBwYXRoIGlzIHN1cHBsaWVkLCB0aGVuIGl0J3MgYW5jaG9yZWQgYXQgPHR0Pi9ldGMvYnJsdHR5PC8+CisgICAgKHNlZSB0aGUgPHJlZiBpZD0iYnVpbGQtZGF0YS1kaXJlY3RvcnkiIG5hbWU9Ii0td2l0aC1kYXRhLWRpcmVjdG9yeSI+CisgICAgYW5kIHRoZSA8cmVmIGlkPSJidWlsZC1leGVjdXRlLXJvb3QiIG5hbWU9Ii0td2l0aC1leGVjdXRlLXJvb3QiPgorICAgIGJ1aWxkIG9wdGlvbnMgZm9yIG1vcmUgZGV0YWlscykuCisgICAgVGhlIDx0dC8udHRiLyBleHRlbnNpb24gaXMgb3B0aW9uYWwuCisgICAgU2VlIHRoZSA8cmVmIGlkPSJjb25maWd1cmUtdGV4dC10YWJsZSIgbmFtZT0idGV4dC10YWJsZSI+CisgICAgY29uZmlndXJlYXRpb24gZmlsZSBkaXJlY3RpdmUgZm9yIHRoZSBkZWZhdWx0IHJ1bi10aW1lIHNldHRpbmcuCisgICAgVGhpcyBzZXR0aW5nIGNhbiBiZSBjaGFuZ2VkIHdpdGggdGhlCisgICAgPHJlZiBpZD0icHJlZmVyZW5jZS10ZXh0LXRhYmxlIiBuYW1lPSJUZXh0IFRhYmxlIj4gcHJlZmVyZW5jZS4KKyAgPHRhZz48dHQvLXYvIDx0dC8tLXZlcmlmeS88bGFiZWwgaWQ9Im9wdGlvbnMtdmVyaWZ5Ij48L3RhZz4KKyAgICBEaXNwbGF5IHRoZSBjdXJyZW50IHZlcnNpb25zCisgICAgb2YgQlJMVFRZIGl0c2VsZiwKKyAgICBvZiB0aGUgc2VydmVyIHNpZGUgb2YgaXRzIGFwcGxpY2F0aW9uIHByb2dyYW1taW5nIGludGVyZmFjZSwKKyAgICBhbmQgb2YgdGhlIHNlbGVjdGVkIGJyYWlsbGUgYW5kIHNwZWVjaCBkcml2ZXJzLAorICAgIGFuZCB0aGVuIGV4aXQuCisgICAgSWYgdGhlIDxyZWYgaWQ9Im9wdGlvbnMtcXVpZXQiIG5hbWU9Ii1xIj4gb3B0aW9uIGlzbid0IHNwZWNpZmllZCwKKyAgICB0aGVuIGFsc28gZGlzcGxheSB0aGUgdmFsdWVzIG9mIHRoZSBvcHRpb25zIGFmdGVyIGFsbCBzb3VyY2VzIGhhdmUgYmVlbiBjb25zaWRlcmVkLgorICAgIElmIG1vcmUgdGhhbiBvbmUgYnJhaWxsZSBkcml2ZXIKKyAgICAoc2VlIHRoZSA8cmVmIGlkPSJvcHRpb25zLWJyYWlsbGUtZHJpdmVyIiBuYW1lPSItYiI+IGNvbW1hbmQgbGluZSBvcHRpb24pCisgICAgYW5kL29yIG1vcmUgdGhhbiBvbmUgYnJhaWxsZSBkZXZpY2UKKyAgICAoc2VlIHRoZSA8cmVmIGlkPSJvcHRpb25zLWJyYWlsbGUtZGV2aWNlIiBuYW1lPSItZCI+IGNvbW1hbmQgbGluZSBvcHRpb24pCisgICAgaGFzIGJlZW4gc3BlY2lmaWVkIHRoZW4gYnJhaWxsZSBkaXNwbGF5IGF1dG9kZXRlY3Rpb24gaXMgcGVyZm9ybWVkLgorICAgIElmIG1vcmUgdGhhbiBvbmUgc3BlZWNoIGRyaXZlcgorICAgIChzZWUgdGhlIDxyZWYgaWQ9Im9wdGlvbnMtc3BlZWNoLWRyaXZlciIgbmFtZT0iLXMiPiBjb21tYW5kIGxpbmUgb3B0aW9uKQorICAgIGhhcyBiZWVuIHNwZWNpZmllZCB0aGVuIHNwZWVjaCBzeW50aGVzaXplciBhdXRvZGV0ZWN0aW9uIGlzIHBlcmZvcm1lZC4KKyAgPHRhZz48dHQvLXgvPGVtL2RyaXZlci8gPHR0Ly0tc2NyZWVuLWRyaXZlcj0vPGVtL2RyaXZlci88bGFiZWwgaWQ9Im9wdGlvbnMtc2NyZWVuLWRyaXZlciI+PC90YWc+CisgICAgU3BlY2lmeSB0aGUgc2NyZWVuIGRyaXZlcgorICAgIChzZWUgc2VjdGlvbiA8cmVmIGlkPSJzY3JlZW4iIG5hbWU9IlN1cHBvcnRlZCBTY3JlZW4gRHJpdmVycyI+KS4KKyAgICBTZWUgdGhlIDxyZWYgaWQ9ImNvbmZpZ3VyZS1zY3JlZW4tZHJpdmVyIiBuYW1lPSJzY3JlZW4tZHJpdmVyIj4KKyAgICBjb25maWd1cmF0aW9uIGZpbGUgZGlyZWN0aXZlIGZvciB0aGUgZGVmYXVsdCBydW4tdGltZSBzZXR0aW5nLgorICA8dGFnPjx0dC8tQS88ZW0vbmFtZS88dHQvPS88ZW0vdmFsdWUvPHR0LywvLi4uIDx0dC8tLWFwaS1wYXJhbWV0ZXJzPS88ZW0vbmFtZS88dHQvPS88ZW0vdmFsdWUvPHR0LywvLi4uPGxhYmVsIGlkPSJvcHRpb25zLWFwaS1wYXJhbWV0ZXJzIj48L3RhZz4KKyAgICBTcGVjaWZ5IHBhcmFtZXRlcnMgZm9yIHRoZSBBcHBsaWNhdGlvbiBQcm9ncmFtbWluZyBJbnRlcmZhY2UuCisgICAgSWYgdGhlIHNhbWUgcGFyYW1ldGVyIGlzIHNwZWNpZmllZCBtb3JlIHRoYW4gb25jZSwKKyAgICB0aGVuIGl0cyByaWdodG1vc3QgYXNzaWdubWVudCBpcyB1c2VkLgorICAgIEZvciBhIGRlc2NyaXB0aW9uIG9mIHRoZSBwYXJhbWV0ZXJzIGFjY2VwdGVkIGJ5IHRoZSBpbnRlcmZhY2UsCisgICAgcGxlYXNlIHNlZSB0aGUgPGJmL0JybEFQSS8gcmVmZXJlbmNlIG1hbnVhbC4KKyAgICBTZWUgdGhlIDxyZWYgaWQ9ImNvbmZpZ3VyZS1hcGktcGFyYW1ldGVycyIgbmFtZT0iYXBpLXBhcmFtZXRlcnMiPgorICAgIGNvbmZpZ3VyYXRpb24gZmlsZSBkaXJlY3RpdmUgZm9yIHRoZSBkZWZhdWx0IHJ1bi10aW1lIHNldHRpbmdzLgorICA8dGFnPjx0dC8tQi9bPGVtL2RyaXZlci88dHQvOi9dPGVtL25hbWUvPHR0Lz0vPGVtL3ZhbHVlLzx0dC8sLy4uLiA8dHQvLS1icmFpbGxlLXBhcmFtZXRlcnM9L1s8ZW0vZHJpdmVyLzx0dC86L108ZW0vbmFtZS88dHQvPS88ZW0vdmFsdWUvPHR0LywvLi4uPGxhYmVsIGlkPSJvcHRpb25zLWJyYWlsbGUtcGFyYW1ldGVycyI+PC90YWc+CisgICAgU3BlY2lmeSBwYXJhbWV0ZXJzIGZvciB0aGUgYnJhaWxsZSBkaXNwbGF5IGRyaXZlcnMuCisgICAgSWYgdGhlIHNhbWUgcGFyYW1ldGVyIGlzIHNwZWNpZmllZCBtb3JlIHRoYW4gb25jZSwKKyAgICB0aGVuIGl0cyByaWdodG1vc3QgYXNzaWdubWVudCBpcyB1c2VkLgorICAgIElmIGEgcGFyYW1ldGVyIG5hbWUgaXMgcXVhbGlmaWVkIGJ5IGEgZHJpdmVyCisgICAgKHNlZSBzZWN0aW9uIDxyZWYgaWQ9ImRyaXZlcnMiIG5hbWU9IkRyaXZlciBJZGVudGlmaWNhdGlvbiBDb2RlcyI+KQorICAgIHRoZW4gdGhhdCBzZXR0aW5nIG9ubHkgYXBwbGllcyB0byB0aGF0IGRyaXZlcjsKKyAgICBpZiBpdCBpc24ndCB0aGVuIGl0IGFwcGxpZXMgdG8gYWxsIGRyaXZlcnMuCisgICAgRm9yIGEgZGVzY3JpcHRpb24gb2YgdGhlIHBhcmFtZXRlcnMgYWNjZXB0ZWQgYnkgYSBzcGVjaWZpYyBkcml2ZXIsCisgICAgcGxlYXNlIHNlZSB0aGUgZG9jdW1lbnRhdGlvbiBmb3IgdGhhdCBkcml2ZXIuCisgICAgU2VlIHRoZSA8cmVmIGlkPSJjb25maWd1cmUtYnJhaWxsZS1wYXJhbWV0ZXJzIiBuYW1lPSJicmFpbGxlLXBhcmFtZXRlcnMiPgorICAgIGNvbmZpZ3VyYXRpb24gZmlsZSBkaXJlY3RpdmUgZm9yIHRoZSBkZWZhdWx0IHJ1bi10aW1lIHNldHRpbmdzLgorICA8dGFnPjx0dC8tRS8gPHR0Ly0tZW52aXJvbm1lbnQtdmFyaWFibGVzLzxsYWJlbCBpZD0ib3B0aW9ucy1lbnZpcm9ubWVudC12YXJpYWJsZXMiPjwvdGFnPgorICAgIFJlY29nbml6ZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgd2hlbiBkZXRlcm1pbmluZworICAgIHRoZSBkZWZhdWx0IHNldHRpbmdzIGZvciB1bnNwZWNpZmllZCBjb21tYW5kIGxpbmUgb3B0aW9ucworICAgIChzZWUgc2VjdGlvbiA8cmVmIGlkPSJvcHRpb25zIiBuYW1lPSJDb21tYW5kIExpbmUgT3B0aW9ucyI+KS4KKyAgICBJZiB0aGlzIG9wdGlvbiBpcyBzcGVjaWZpZWQsIAorICAgIGFuZCBpZiB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgYXNzb2NpYXRlZCB3aXRoIGFuIHVuc3BlY2lmaWVkIG9wdGlvbiBpcyBkZWZpbmVkLAorICAgIHRoZW4gdGhlIHZhbHVlIG9mIHRoYXQgZW52aXJvbm1lbnQgdmFyaWFibGUgaXMgdXNlZC4KKyAgICBUaGUgbmFtZXMgb2YgdGhlc2UgZW52aXJvbm1lbnQgdmFyaWFibGVzIGFyZSBiYXNlZCBvbgorICAgIHRoZSBsb25nIG5hbWVzIG9mIHRoZSBvcHRpb25zIHRoZXkgY29ycmVzcG9uZCB0bzoKKyAgICA8aXRlbWl6ZT4gICAKKyAgICAgIDxpdGVtPkFsbCBsZXR0ZXJzIGFyZSBpbiB1cHBlciBjYXNlLgorICAgICAgPGl0ZW0+VW5kZXJzY29yZXMgKDx0dC9fLykgYXJlIHVzZWQgaW5zdGVhZCBvZiBtaW51cyBzaWducyAoPHR0Ly0vKS4KKyAgICAgIDxpdGVtPlRoZSBwcmVmaXggPHR0L0JSTFRUWV8vIGlzIGFkZGVkLgorICAgIDwvaXRlbWl6ZT4gICAKKyAgICBUaGlzIG9wdGlvbiBpcyBwYXJ0aWN1bGFybHkgdXNlZnVsIG9uIHRoZSBMaW51eCBvcGVyYXRpbmcgc3lzdGVtCisgICAgYXMgaXQgYWxsb3dzIGRlZmF1bHQgc2V0dGluZ3MgdG8gYmUgcGFzc2VkIHRvIEJSTFRUWSB2aWEgYm9vdCBwYXJhbWV0ZXJzLgorICAgIFRoZSBmb2xsb3dpbmcgZW52aXJvbm1lbnQgdmFyaWFibGVzIGFyZSBzdXBwb3J0ZWQ6CisgICAgPGRlc2NyaXA+CisgICAgICA8dGFnPjx0dC9CUkxUVFlfQVBJX1BBUkFNRVRFUlMvPC90YWc+CisgICAgICAgIFBhcmFtZXRlcnMgZm9yIHRoZSBBcHBsaWNhdGlvbiBQcm9ncmFtbWluZyBJbnRlcmZhY2UKKyAgICAgICAgKHNlZSB0aGUgPHJlZiBpZD0ib3B0aW9ucy1hcGktcGFyYW1ldGVycyIgbmFtZT0iLUEiPiBjb21tYW5kIGxpbmUgb3B0aW9uKS4KKyAgICAgIDx0YWc+PHR0L0JSTFRUWV9BVFRSSUJVVEVTX1RBQkxFLzwvdGFnPgorICAgICAgICBUaGUgYXR0cmlidXRlcyB0YWJsZQorICAgICAgICAoc2VlIHRoZSA8cmVmIGlkPSJvcHRpb25zLWF0dHJpYnV0ZXMtdGFibGUiIG5hbWU9Ii1hIj4gY29tbWFuZCBsaW5lIG9wdGlvbikuCisgICAgICA8dGFnPjx0dC9CUkxUVFlfQlJBSUxMRV9ERVZJQ0UvPC90YWc+CisgICAgICAgIFRoZSBicmFpbGxlIGRpc3BsYXkgZGV2aWNlCisgICAgICAgIChzZWUgdGhlIDxyZWYgaWQ9Im9wdGlvbnMtYnJhaWxsZS1kZXZpY2UiIG5hbWU9Ii1kIj4gY29tbWFuZCBsaW5lIG9wdGlvbikuCisgICAgICA8dGFnPjx0dC9CUkxUVFlfQlJBSUxMRV9EUklWRVIvPC90YWc+CisgICAgICAgIFRoZSBicmFpbGxlIGRpc3BsYXkgZHJpdmVyCisgICAgICAgIChzZWUgdGhlIDxyZWYgaWQ9Im9wdGlvbnMtYnJhaWxsZS1kcml2ZXIiIG5hbWU9Ii1iIj4gY29tbWFuZCBsaW5lIG9wdGlvbikuCisgICAgICA8dGFnPjx0dC9CUkxUVFlfQlJBSUxMRV9QQVJBTUVURVJTLzwvdGFnPgorICAgICAgICBQYXJhbWV0ZXJzIGZvciB0aGUgYnJhaWxsZSBkaXNwbGF5IGRyaXZlcgorICAgICAgICAoc2VlIHRoZSA8cmVmIGlkPSJvcHRpb25zLWJyYWlsbGUtcGFyYW1ldGVycyIgbmFtZT0iLUIiPiBjb21tYW5kIGxpbmUgb3B0aW9uKS4KKyAgICAgIDx0YWc+PHR0L0JSTFRUWV9DT05GSUdVUkFUSU9OX0ZJTEUvPC90YWc+CisgICAgICAgIFRoZSBjb25maWd1cmF0aW9uIGZpbGUKKyAgICAgICAgKHNlZSB0aGUgPHJlZiBpZD0ib3B0aW9ucy1jb25maWd1cmF0aW9uLWZpbGUiIG5hbWU9Ii1mIj4gY29tbWFuZCBsaW5lIG9wdGlvbikuCisgICAgICA8dGFnPjx0dC9CUkxUVFlfQ09OVFJBQ1RJT05fVEFCTEUvPC90YWc+CisgICAgICAgIFRoZSBjb250cmFjdGlvbiB0YWJsZQorICAgICAgICAoc2VlIHRoZSA8cmVmIGlkPSJvcHRpb25zLWNvbnRyYWN0aW9uLXRhYmxlIiBuYW1lPSItYyI+IGNvbW1hbmQgbGluZSBvcHRpb24pLgorICAgICAgPHRhZz48dHQvQlJMVFRZX0tFWUJPQVJEX1RBQkxFLzwvdGFnPgorICAgICAgICBUaGUga2V5Ym9hcmQgdGFibGUKKyAgICAgICAgKHNlZSB0aGUgPHJlZiBpZD0ib3B0aW9ucy1rZXlib2FyZC10YWJsZSIgbmFtZT0iLWsiPiBjb21tYW5kIGxpbmUgb3B0aW9uKS4KKyAgICAgIDx0YWc+PHR0L0JSTFRUWV9LRVlCT0FSRF9QUk9QRVJUSUVTLzwvdGFnPgorICAgICAgICBUaGUga2V5Ym9hcmQgcHJvcGVydGllcworICAgICAgICAoc2VlIHRoZSA8cmVmIGlkPSJvcHRpb25zLWtleWJvYXJkLXByb3BlcnRpZXMiIG5hbWU9Ii1LIj4gY29tbWFuZCBsaW5lIG9wdGlvbikuCisgICAgICA8dGFnPjx0dC9CUkxUVFlfTUlESV9ERVZJQ0UvPC90YWc+CisgICAgICAgIFRoZSBNdXNpY2FsIEluc3RydW1lbnQgRGlnaXRhbCBJbnRlcmZhY2UgZGV2aWNlCisgICAgICAgIChzZWUgdGhlIDxyZWYgaWQ9Im9wdGlvbnMtbWlkaS1kZXZpY2UiIG5hbWU9Ii1tIj4gY29tbWFuZCBsaW5lIG9wdGlvbikuCisgICAgICA8dGFnPjx0dC9CUkxUVFlfUENNX0RFVklDRS88L3RhZz4KKyAgICAgICAgVGhlIGRpZ2l0YWwgYXVkaW8gZGV2aWNlCisgICAgICAgIChzZWUgdGhlIDxyZWYgaWQ9Im9wdGlvbnMtcGNtLWRldmljZSIgbmFtZT0iLXAiPiBjb21tYW5kIGxpbmUgb3B0aW9uKS4KKyAgICAgIDx0YWc+PHR0L0JSTFRUWV9QUkVGRVJFTkNFU19GSUxFLzwvdGFnPgorICAgICAgICBUaGUgbG9jYXRpb24gb2YgdGhlIGZpbGUgd2hpY2ggaXMgdG8gYmUgdXNlZAorICAgICAgICBmb3IgdGhlIHNhdmluZyBhbmQgbG9hZGluZyBvZiB1c2VyIHByZWZlcmVuY2VzCisgICAgICAgIChzZWUgdGhlIDxyZWYgaWQ9Im9wdGlvbnMtcHJlZmVyZW5jZXMtZmlsZSIgbmFtZT0iLUYiPiBjb21tYW5kIGxpbmUgb3B0aW9uKS4KKyAgICAgIDx0YWc+PHR0L0JSTFRUWV9SRUxFQVNFX0RFVklDRS88L3RhZz4KKyAgICAgICAgV2hldGhlciBvciBub3QgdG8gcmVsZWFzZSB0aGUgZGV2aWNlIHRvIHdoaWNoIHRoZSBicmFpbGxlIGRpc3BsYXkgaXMgY29ubmVjdGVkCisgICAgICAgIHdoZW4gdGhlIGN1cnJlbnQgc2NyZWVuIG9yIHdpbmRvdyBjYW4ndCBiZSByZWFkCisgICAgICAgIChzZWUgdGhlIDxyZWYgaWQ9Im9wdGlvbnMtcmVsZWFzZS1kZXZpY2UiIG5hbWU9Ii1yIj4gY29tbWFuZCBsaW5lIG9wdGlvbikuCisgICAgICA8dGFnPjx0dC9CUkxUVFlfU0NSRUVOX1BBUkFNRVRFUlMvPC90YWc+CisgICAgICAgIFBhcmFtZXRlcnMgZm9yIHRoZSBzY3JlZW4gZHJpdmVyCisgICAgICAgIChzZWUgdGhlIDxyZWYgaWQ9Im9wdGlvbnMtc2NyZWVuLXBhcmFtZXRlcnMiIG5hbWU9Ii1YIj4gY29tbWFuZCBsaW5lIG9wdGlvbikuCisgICAgICA8dGFnPjx0dC9CUkxUVFlfU1BFRUNIX0RSSVZFUi88L3RhZz4KKyAgICAgICAgVGhlIHNwZWVjaCBzeW50aGVzaXplciBkcml2ZXIKKyAgICAgICAgKHNlZSB0aGUgPHJlZiBpZD0ib3B0aW9ucy1zcGVlY2gtZHJpdmVyIiBuYW1lPSItcyI+IGNvbW1hbmQgbGluZSBvcHRpb24pLgorICAgICAgPHRhZz48dHQvQlJMVFRZX1NQRUVDSF9JTlBVVC88L3RhZz4KKyAgICAgICAgVGhlIG5hbWUgb2YgdGhlIGZpbGUgc3lzdGVtIG9iamVjdAorICAgICAgICB3aGljaCBjYW4gYmUgdXNlZCBieSBvdGhlciBhcHBsaWNhdGlvbnMKKyAgICAgICAgZm9yIHRleHQtdG8tc3BlZWNoIGNvbnZlcnNpb24gdmlhIEJSTFRUWSdzIHNwZWVjaCBkcml2ZXIKKyAgICAgICAgKHNlZSB0aGUgPHJlZiBpZD0ib3B0aW9ucy1zcGVlY2gtaW5wdXQiIG5hbWU9Ii1pIj4gY29tbWFuZCBsaW5lIG9wdGlvbikuCisgICAgICA8dGFnPjx0dC9CUkxUVFlfU1BFRUNIX1BBUkFNRVRFUlMvPC90YWc+CisgICAgICAgIFBhcmFtZXRlcnMgZm9yIHRoZSBzcGVlY2ggc3ludGhlc2l6ZXIgZHJpdmVyCisgICAgICAgIChzZWUgdGhlIDxyZWYgaWQ9Im9wdGlvbnMtc3BlZWNoLXBhcmFtZXRlcnMiIG5hbWU9Ii1TIj4gY29tbWFuZCBsaW5lIG9wdGlvbikuCisgICAgICA8dGFnPjx0dC9CUkxUVFlfVEVYVF9UQUJMRS88L3RhZz4KKyAgICAgICAgVGhlIHRleHQgdGFibGUKKyAgICAgICAgKHNlZSB0aGUgPHJlZiBpZD0ib3B0aW9ucy10ZXh0LXRhYmxlIiBuYW1lPSItdCI+IGNvbW1hbmQgbGluZSBvcHRpb24pLgorICAgIDwvZGVzY3JpcD4KKyAgPHRhZz48dHQvLUYvPGVtL2ZpbGUvIDx0dC8tLXByZWZlcmVuY2VzLWZpbGU9LzxlbS9maWxlLzxsYWJlbCBpZD0ib3B0aW9ucy1wcmVmZXJlbmNlcy1maWxlIj48L3RhZz4KKyAgICBTcGVjaWZ5IHRoZSBsb2NhdGlvbiBvZiB0aGUgZmlsZSB3aGljaCBpcyB0byBiZSB1c2VkCisgICAgZm9yIHRoZSBzYXZpbmcgYW5kIGxvYWRpbmcgb2YgdXNlciBwcmVmZXJlbmNlcy4KKyAgICBJZiBhIHJlbGF0aXZlIHBhdGggaXMgc3VwcGxpZWQsIHRoZW4gaXQncyBhbmNob3JlZCBhdCA8dHQ+L3Zhci9saWIvYnJsdHR5PC8+LgorICAgIFNlZSB0aGUgPHJlZiBpZD0iY29uZmlndXJlLXByZWZlcmVuY2VzLWZpbGUiIG5hbWU9InByZWZlcmVuY2VzLWZpbGUiPgorICAgIGNvbmZpZ3VyYXRpb24gZmlsZSBkaXJlY3RpdmUgZm9yIHRoZSBkZWZhdWx0IHJ1bi10aW1lIHNldHRpbmcuCisgIDx0YWc+PHR0Ly1JLyA8dHQvLS1pbnN0YWxsLXNlcnZpY2UvPGxhYmVsIGlkPSJvcHRpb25zLWluc3RhbGwtc2VydmljZSI+PC90YWc+CisgICAgSW5zdGFsbCBCUkxUVFkgYXMgdGhlIEJybEFQSSBzZXJ2aWNlLgorICAgIFRoaXMgbWVhbnMgdGhhdDoKKyAgICA8aXRlbWl6ZT4KKyAgICAgIDxpdGVtPkJSTFRUWSB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgc3RhcnRlZCB3aGVuIHRoZSBzeXN0ZW0gaXMgYm9vdGVkLgorICAgICAgPGl0ZW0+QXBwbGljYXRpb25zIGNhbiBrbm93IHRoYXQgYSBCcmxBUEkgc2VydmVyIGlzIHJ1bm5pbmcuCisgICAgPC9pdGVtaXplPgorICAgIFRoaXMgb3B0aW9uIGlzIG9ubHkgc3VwcG9ydGVkIG9uIHRoZSBXaW5kb3dzIHBsYXRmb3JtLgorICA8dGFnPjx0dC8tSy88ZW0vbmFtZS88dHQvPS88ZW0vdmFsdWUvPHR0LywvLi4uIDx0dC8tLWtleWJvYXJkLXByb3BlcnRpZXM9LzxlbS9uYW1lLzx0dC89LzxlbS92YWx1ZS88dHQvLC8uLi48bGFiZWwgaWQ9Im9wdGlvbnMta2V5Ym9hcmQtcHJvcGVydGllcyI+PC90YWc+CisgICAgU3BlY2lmeSB0aGUgcHJvcGVydGllcyBvZiB0aGUga2V5Ym9hcmQocykgdG8gYmUgbW9uaXRvcmVkLgorICAgIElmIHRoZSBzYW1lIHByb3BlcnR5IGlzIHNwZWNpZmllZCBtb3JlIHRoYW4gb25jZSwKKyAgICB0aGVuIGl0cyByaWdodG1vc3QgYXNzaWdubWVudCBpcyB1c2VkLgorICAgIFNlZSBzZWN0aW9uIDxyZWYgaWQ9ImtleWJvYXJkLXByb3BlcnRpZXMiIG5hbWU9IktleWJvYXJkIFByb3BlcnRpZXMiPgorICAgIGZvciBhIGxpc3Qgb2YgdGhlIHByb3BlcnRpZXMgd2hpY2ggbWF5IGJlIHNwZWNpZmllZC4KKyAgICBTZWUgdGhlIDxyZWYgaWQ9ImNvbmZpZ3VyZS1rZXlib2FyZC1wcm9wZXJ0aWVzIiBuYW1lPSJrZXlib2FyZC1wcm9wZXJ0aWVzIj4KKyAgICBjb25maWd1cmF0aW9uIGZpbGUgZGlyZWN0aXZlIGZvciB0aGUgZGVmYXVsdCBydW4tdGltZSBzZXR0aW5ncy4KKyAgPHRhZz48dHQvLU0vPGVtL2NzZWNzLyA8dHQvLS1tZXNzYWdlLXRpbWVvdXQ9LzxlbS9jc2Vjcy88bGFiZWwgaWQ9Im9wdGlvbnMtbWVzc2FnZS10aW1lb3V0Ij48L3RhZz4KKyAgICBTcGVjaWZ5IHRoZSBhbW91bnQgb2YgdGltZSAoaW4gaHVuZHJlZHRocyBvZiBhIHNlY29uZCkKKyAgICB0aGF0IEJSTFRUWSBrZWVwcyBpdHMgb3duIGludGVybmFsbHkgZ2VuZXJhdGVkIG1lc3NhZ2VzIG9uIHRoZSBicmFpbGxlIGRpc3BsYXkuCisgICAgSWYgbm90IHNwZWNpZmllZCwgdGhlbiA8dHQvNDAwLyAoNCBzZWNvbmRzKSBpcyBhc3N1bWVkLgorICA8dGFnPjx0dC8tTi8gPHR0Ly0tbm8tYXBpLzxsYWJlbCBpZD0ib3B0aW9ucy1uby1hcGkiPjwvdGFnPgorICAgIERpc2FibGUgdGhlIGFwcGxpY2F0aW9uIHByb2dyYW1taW5nIGludGVyZmFjZS4KKyAgPHRhZz48dHQvLVAvPGVtL2ZpbGUvIDx0dC8tLXBpZC1maWxlPS88ZW0vZmlsZS88bGFiZWwgaWQ9Im9wdGlvbnMtcGlkLWZpbGUiPjwvdGFnPgorICAgIFNwZWNpZnkgdGhlIGZpbGUgd2hlcmVpbiBCUkxUVFkgaXMgdG8gd3JpdGUgaXRzIHByb2Nlc3MgaWRlbnRpZmllciAocGlkKS4KKyAgICBJZiBub3Qgc3BlY2lmaWVkLCBCUkxUVFkgZG9lc24ndCB3cml0ZSBpdHMgcHJvY2VzcyBpZGVudGlmaWVyIGFueXdoZXJlLgorICA8dGFnPjx0dC8tUi8gPHR0Ly0tcmVtb3ZlLXNlcnZpY2UvPGxhYmVsIGlkPSJvcHRpb25zLXJlbW92ZS1zZXJ2aWNlIj48L3RhZz4KKyAgICBSZW1vdmUgdGhlIEJybEFQSSBzZXJ2aWNlLgorICAgIFRoaXMgbWVhbnMgdGhhdDoKKyAgICA8aXRlbWl6ZT4KKyAgICAgIDxpdGVtPkJSTFRUWSB3aWxsIG5vdCBiZSBhdXRvbWF0aWNhbGx5IHN0YXJ0ZWQgd2hlbiB0aGUgc3lzdGVtIGlzIGJvb3RlZC4KKyAgICAgIDxpdGVtPkFwcGxpY2F0aW9ucyBjYW4ga25vdyB0aGF0IG5vIEJybEFQSSBzZXJ2ZXIgaXMgcnVubmluZy4KKyAgICA8L2l0ZW1pemU+CisgICAgVGhpcyBvcHRpb24gaXMgb25seSBzdXBwb3J0ZWQgb24gdGhlIFdpbmRvd3MgcGxhdGZvcm0uCisgIDx0YWc+PHR0Ly1TL1s8ZW0vZHJpdmVyLzx0dC86L108ZW0vbmFtZS88dHQvPS88ZW0vdmFsdWUvPHR0LywvLi4uIDx0dC8tLXNwZWVjaC1wYXJhbWV0ZXJzPS9bPGVtL2RyaXZlci88dHQvOi9dPGVtL25hbWUvPHR0Lz0vPGVtL3ZhbHVlLzx0dC8sLy4uLjxsYWJlbCBpZD0ib3B0aW9ucy1zcGVlY2gtcGFyYW1ldGVycyI+PC90YWc+CisgICAgU3BlY2lmeSBwYXJhbWV0ZXJzIGZvciB0aGUgc3BlZWNoIHN5bnRoZXNpemVyIGRyaXZlcnMuCisgICAgSWYgdGhlIHNhbWUgcGFyYW1ldGVyIGlzIHNwZWNpZmllZCBtb3JlIHRoYW4gb25jZSwKKyAgICB0aGVuIGl0cyByaWdodG1vc3QgYXNzaWdubWVudCBpcyB1c2VkLgorICAgIElmIGEgcGFyYW1ldGVyIG5hbWUgaXMgcXVhbGlmaWVkIGJ5IGEgZHJpdmVyCisgICAgKHNlZSBzZWN0aW9uIDxyZWYgaWQ9ImRyaXZlcnMiIG5hbWU9IkRyaXZlciBJZGVudGlmaWNhdGlvbiBDb2RlcyI+KQorICAgIHRoZW4gdGhhdCBzZXR0aW5nIG9ubHkgYXBwbGllcyB0byB0aGF0IGRyaXZlcjsKKyAgICBpZiBpdCBpc24ndCB0aGVuIGl0IGFwcGxpZXMgdG8gYWxsIGRyaXZlcnMuCisgICAgRm9yIGEgZGVzY3JpcHRpb24gb2YgdGhlIHBhcmFtZXRlcnMgYWNjZXB0ZWQgYnkgYSBzcGVjaWZpYyBkcml2ZXIsCisgICAgcGxlYXNlIHNlZSB0aGUgZG9jdW1lbnRhdGlvbiBmb3IgdGhhdCBkcml2ZXIuCisgICAgU2VlIHRoZSA8cmVmIGlkPSJjb25maWd1cmUtc3BlZWNoLXBhcmFtZXRlcnMiIG5hbWU9InNwZWVjaC1wYXJhbWV0ZXJzIj4KKyAgICBjb25maWd1cmF0aW9uIGZpbGUgZGlyZWN0aXZlIGZvciB0aGUgZGVmYXVsdCBydW4tdGltZSBzZXR0aW5ncy4KKyAgPHRhZz48dHQvLVYvIDx0dC8tLXZlcnNpb24vPGxhYmVsIGlkPSJvcHRpb25zLXZlcnNpb24iPjwvdGFnPgorICAgIERpc3BsYXkgdGhlIGN1cnJlbnQgdmVyc2lvbnMKKyAgICBvZiBCUkxUVFkgaXRzZWxmLAorICAgIG9mIHRoZSBzZXJ2ZXIgc2lkZSBvZiBpdHMgYXBwbGljYXRpb24gcHJvZ3JhbW1pbmcgaW50ZXJmYWNlLAorICAgIGFuZCBvZiB0aG9zZSBkcml2ZXJzIHdoaWNoIGhhdmUgYmVlbiBsaW5rZWQgaW50byBpdHMgYmluYXJ5LAorICAgIGFuZCB0aGVuIGV4aXQuCisgICAgSWYgdGhlIDxyZWYgaWQ9Im9wdGlvbnMtcXVpZXQiIG5hbWU9Ii1xIj4gb3B0aW9uIGlzbid0IHNwZWNpZmllZCwKKyAgICB0aGVuIGFsc28gZGlzcGxheSBjb3B5cmlnaHQgaW5mb3JtYXRpb24uCisgIDx0YWc+PHR0Ly1YL1s8ZW0vZHJpdmVyLzx0dC86L108ZW0vbmFtZS88dHQvPS88ZW0vdmFsdWUvPHR0LywvLi4uIDx0dC8tLXNjcmVlbi1wYXJhbWV0ZXJzPS9bPGVtL2RyaXZlci88dHQvOi9dPGVtL25hbWUvPHR0Lz0vPGVtL3ZhbHVlLzx0dC8sLy4uLjxsYWJlbCBpZD0ib3B0aW9ucy1zY3JlZW4tcGFyYW1ldGVycyI+PC90YWc+CisgICAgU3BlY2lmeSBwYXJhbWV0ZXJzIGZvciB0aGUgc2NyZWVuIGRyaXZlcnMuCisgICAgSWYgdGhlIHNhbWUgcGFyYW1ldGVyIGlzIHNwZWNpZmllZCBtb3JlIHRoYW4gb25jZSwKKyAgICB0aGVuIGl0cyByaWdodG1vc3QgYXNzaWdubWVudCBpcyB1c2VkLgorICAgIElmIGEgcGFyYW1ldGVyIG5hbWUgaXMgcXVhbGlmaWVkIGJ5IGEgZHJpdmVyCisgICAgKHNlZSBzZWN0aW9uIDxyZWYgaWQ9InNjcmVlbiIgbmFtZT0iU3VwcG9ydGVkIFNjcmVlbiBEcml2ZXJzIj4pCisgICAgdGhlbiB0aGF0IHNldHRpbmcgb25seSBhcHBsaWVzIHRvIHRoYXQgZHJpdmVyOworICAgIGlmIGl0IGlzbid0IHRoZW4gaXQgYXBwbGllcyB0byBhbGwgZHJpdmVycy4KKyAgICBGb3IgYSBkZXNjcmlwdGlvbiBvZiB0aGUgcGFyYW1ldGVycyBhY2NlcHRlZCBieSBhIHNwZWNpZmljIGRyaXZlciwKKyAgICBwbGVhc2Ugc2VlIHRoZSBkb2N1bWVudGF0aW9uIGZvciB0aGF0IGRyaXZlci4KKyAgICBTZWUgdGhlIDxyZWYgaWQ9ImNvbmZpZ3VyZS1zY3JlZW4tcGFyYW1ldGVycyIgbmFtZT0ic2NyZWVuLXBhcmFtZXRlcnMiPgorICAgIGNvbmZpZ3VyYXRpb24gZmlsZSBkaXJlY3RpdmUgZm9yIHRoZSBkZWZhdWx0IHJ1bi10aW1lIHNldHRpbmdzLgorPC9kZXNjcmlwPgorCis8c2VjdD5GZWF0dXJlIERlc2NyaXB0aW9uczxwPgorCis8c2VjdDE+Q3Vyc29yIFJvdXRpbmc8bGFiZWwgaWQ9InJvdXRpbmciPjxwPgorV2hlbiBtb3ZpbmcgdGhlIGJyYWlsbGUgd2luZG93IGFyb3VuZCB0aGUgc2NyZWVuCit3aGlsZSBleGFtaW5pbmcgdGhlIHRleHQsIHNheSwgaW4gYW4gZWRpdG9yLAoreW91IG9mdGVuIG5lZWQgdG8gYnJpbmcgdGhlIGN1cnNvcgordG8gYSBzcGVjaWZpYyBjaGFyYWN0ZXIgd2l0aGluIHRoZSBicmFpbGxlIHdpbmRvdy4KK1lvdSdsbCBwcm9iYWJseSBmaW5kIHRoaXMgdG8gYmUgYSByYXRoZXIgZGlmZmljdWx0IHRhc2sgZm9yIGEgbnVtYmVyIG9mIHJlYXNvbnMuCitPbmUgaXMgdGhhdCB5b3UgbWF5IG5vdCBrbm93IHdoZXJlIHRoZSBjdXJzb3IgaXMsCithbmQgdGhhdCB5b3UgbWF5IGxvc2UgeW91ciBwbGFjZSB3aGlsZSB0cnlpbmcgdG8gZmluZCBpdC4KK0Fub3RoZXIgaXMgdGhhdCB0aGUgY3Vyc29yIG1heSBtb3ZlIHVucHJlZGljdGFibHkgYXMgdGhlIGFycm93IGtleXMgYXJlIHByZXNzZWQKKyhzb21lIGVkaXRvcnMsIGZvciBleGFtcGxlLCBkb24ndCBhbGxvdyB0aGUgY3Vyc29yIHRvIGJlCittb3JlIHRvIHRoZSByaWdodCB0aGFuIHRoZSBlbmQgb2YgdGhlIGxpbmUgaXQncyBvbikuCitDdXJzb3Igcm91dGluZyBwcm92aWRlcyBqdXN0IHN1Y2ggYSBjYXBhYmlsaXR5CitieSBrbm93aW5nIHdoZXJlIHRoZSBjdXJzb3IgaXMsCitieSBzaW11bGF0aW5nIHRoZSBzYW1lIGFycm93LWtleSBwcmVzc2VzIHdoaWNoIHlvdSdkIGhhdmUgdG8gZW50ZXIgbWFudWFsbHksCithbmQgYnkgbW9uaXRvcmluZyB0aGUgcHJvZ3Jlc3Mgb2YgdGhlIGN1cnNvciBhcyBpdCBtb3Zlcy4KKworU29tZSBicmFpbGxlIGRpc3BsYXlzIGhhdmUgYSBidXR0b24sIGtub3duIGFzIGEgcm91dGluZyBrZXksIGFib3ZlIGVhY2ggY2VsbC4KK1RoZXNlIGtleXMgdXNlIHRoZSA8cmVmIGlkPSJjb21tYW5kLVJPVVRFIiBuYW1lPSJST1VURSI+IGNvbW1hbmQKK3RvIHJvdXRlIHRoZSBjdXJzb3IgcmlnaHQgdG8gdGhlIGRlc2lyZWQgbG9jYXRpb24uCisKK0N1cnNvciByb3V0aW5nLCB3aGlsZSB2ZXJ5IGNvbnZlbmllbnQgYW5kIGVmZmVjdGl2ZSwKK2lzLCBzdHJpY3RseSBzcGVha2luZywgbm90IGNvbXBsZXRlbHkgcmVsaWFibGUuCitPbmUgcmVhc29uIGZvciB0aGlzIGlzIHRoYXQgaXRzIGN1cnJlbnQgaW1wbGVtZW50YXRpb24gYXNzdW1lcworVlQxMDAgY3Vyc29yIGtleSBlc2NhcGUgc2VxdWVuY2VzLgorQW5vdGhlciBpcyB0aGF0IHNvbWUgYXBwbGljYXRpb25zIGRvIG5vbi1zdGFuZGFyZCB0aGluZ3MKK2luIHJlc3BvbnNlIHRvIGRldGVjdGluZyB0aGF0IGEgY3Vyc29yIGtleSBoYXMgYmVlbiBwcmVzc2VkLgorQSBtaW5vciBwcm9ibGVtIGZvdW5kIHdpdGhpbiBzb21lIGVkaXRvcnMgKGxpa2UgPHR0L3ZpLyksCithcyBhbHJlYWR5IG1lbnRpb25lZCBhYm92ZSwKK2lzIHRoYXQgdGhleSB0aHJvdyBpbiBzb21lIHVucHJlZGljdGFibGUgaG9yaXpvbnRhbCBtb3Rpb24KK3doZW4gdmVydGljYWwgbW90aW9uIGlzIHJlcXVlc3RlZAorYmVjYXVzZSB0aGV5IGRvbid0IGFsbG93IHRoZSBjdXJzb3IgdG8gYmUgdG8gdGhlIHJpZ2h0IG9mIHRoZSBlbmQgb2YgYSBsaW5lLgorQSBtYWpvciBwcm9ibGVtIGZvdW5kIHdpdGhpbiBzb21lIHdlYiBicm93c2VycyAobGlrZSA8dHQvbHlueC8pCitpcyB0aGF0IHRoZSB1cC0gYW5kIGRvd24tYXJyb3cga2V5cyBhcmUgdXNlZCB0byBtb3ZlIGFtb25nIHRoZSBsaW5rcworKHdoaWNoIG1heSBza2lwIGxpbmVzIGFuZC9vciBtb3ZlIHRoZSBjdXJzb3IgaG9yaXpvbnRhbGx5LAorYnV0IHdoaWNoIHJhcmVseSBqdXN0IG1vdmVzIHRoZSBjdXJzb3Igb25lIGxpbmUgaW4gdGhlIGRlc2lyZWQgZGlyZWN0aW9uKSwKK2FuZCB0aGF0IHRoZSBsZWZ0LSBhbmQgcmlnaHQtYXJyb3cga2V5cyBhcmUgdXNlZCB0byBzZWxlY3QgbGlua3MKKyh3aGljaCBoYXMgYWJzb2x1dGVseSBub3RoaW5nIHRvIGRvIHdpdGggYW55IGZvcm0gb2YgY3Vyc29yIG1vdGlvbiB3aGF0c29ldmVyLAorYW5kIHdoaWNoIGV2ZW4gdG90YWxseSBjaGFuZ2VzIHRoZSBzY3JlZW4gY29udGVudCkuCisKK0N1cnNvciByb3V0aW5nIG1heSBub3Qgd29yayB2ZXJ5IHdlbGwgb24gYSBoZWF2aWx5IGxvYWRlZCBzeXN0ZW0sCithbmQgZGVmaW5pdGVseSBkb2Vzbid0IHdvcmsgdmVyeSB3ZWxsIHdoZW4gd29ya2luZyBvbiBhIHJlbW90ZSBzeXN0ZW0gb3ZlciBhIHNsb3cgbGluay4KK1RoaXMgaXMgc28gYmVjYXVzZSBvZiBhbGwgb2YgdGhlIGNoZWNrcyB3aGljaCBtdXN0IGJlIG1hZGUgYWxvbmcgdGhlIHdheQoraW4gb3JkZXIgdG8gZGVhbCB3aXRoIHVucHJlZGljdGFibGUgY3Vyc29yIG1vdGlvbgorYW5kIGluIG9yZGVyIHRvIGVuc3VyZSB0aGF0IGFueSBtaXN0YWtlIGhhcyBhdCBsZWFzdCBhIGZpZ2h0aW5nIGNoYW5jZSB0byBiZSB1bmRvbmUuCitFdmVuICB0aG91Z2ggQlJMVFRZIHRyaWVzIHRvIGJlIGZhaXJseSBjbGV2ZXIsCitpdCBtdXN0IHN0aWxsIGVzc2VudGlhbGx5IHdhaXQgdG8gc2VlIHdoYXQgaGFwcGVucyBhZnRlciBlYWNoIHNpbXVsYXRlZCBhcnJvdy1rZXkgcHJlc3MuCisKK09uY2UgYSBjdXJzb3Igcm91dGluZyByZXF1ZXN0IGhhcyBiZWVuIG1hZGUsCitCUkxUVFkga2VlcHMgdHJ5aW5nIHRvIHJvdXRlIHRoZSBjdXJzb3IgdG8gdGhlIGRlc2lyZWQgbG9jYXRpb24gdW50aWwKK2EgdGltZW91dCBleHBpcmVzIGJlZm9yZSB0aGUgY3Vyc29yIHJlYWNoZXMgdGhhdCBsb2NhdGlvbiwKK3RoZSBjdXJzb3Igc2VlbXMgdG8gYmUgbW92aW5nIGluIHRoZSB3cm9uZyBkaXJlY3Rpb24sCitvciB5b3Ugc3dpdGNoIHRvIGEgZGlmZmVyZW50IHZpcnR1YWwgdGVybWluYWwuCitBbiBhdHRlbXB0IGlzIGZpcnN0IG1hZGUgdG8gdXNlIHZlcnRpY2FsIG1vdGlvbgordG8gYnJpbmcgdGhlIGN1cnNvciB0byB0aGUgcmlnaHQgbGluZSwKK2FuZCwgb25seSBpZiB0aGF0IHN1Y2NlZWRzLCBhbiBhdHRlbXB0IGlzIHRoZW4gbWFkZQordG8gdXNlIGhvcml6b250YWwgbW90aW9uIHRvIGJyaW5nIHRoZSBjdXJzb3IgdG8gdGhlIHJpZ2h0IGNvbHVtbi4KK0lmIGFub3RoZXIgcmVxdWVzdCBpcyBtYWRlIHdoaWxlIG9uZSBpcyBzdGlsbCBpbiBwcm9ncmVzcywKK3RoZW4gdGhlIGZpcnN0IG9uZSBpcyBhYm9ydGVkIGFuZCB0aGUgc2Vjb25kIG9uZSBpcyBpbml0aWF0ZWQuCisKK0Egc2FmZXIgYnV0IGxlc3MgcG93ZXJmdWwgY3Vyc29yIHJvdXRpbmcgY29tbWFuZCwKKzxyZWYgaWQ9ImNvbW1hbmQtQ1NSSk1QX1ZFUlQiIG5hbWU9IkNTUkpNUF9WRVJUIj4sCit1c2VzIGp1c3QgdmVydGljYWwgbW90aW9uIHRvIGJyaW5nIHRoZSBjdXJzb3IKK3RvIGFueXdoZXJlIG9uIHRoZSB0b3AgbGluZSBvZiB0aGUgYnJhaWxsZSB3aW5kb3cuCitJdCdzIGVzcGVjaWFsbHkgdXNlZnVsIGluIGNvbmp1bmN0aW9uIHdpdGggYXBwbGljYXRpb25zIChsaWtlIDx0dC9seW54LykKK3doZXJlaW4gaG9yaXpvbnRhbCBjdXJzb3IgbW90aW9uIG11c3QgbmV2ZXIgYmUgYXR0ZW1wdGVkLgorCis8c2VjdDE+Q3V0IGFuZCBQYXN0ZTxsYWJlbCBpZD0iY3V0Ij48cD4KK1RoaXMgZmVhdHVyZSBlbmFibGVzIHlvdSB0byBncmFiIHNvbWUgdGV4dCB3aGljaCBpcyBhbHJlYWR5IG9uIHRoZSBzY3JlZW4gCithbmQgcmUtZW50ZXIgaXQgYXQgdGhlIGN1cnJlbnQgY3Vyc29yIHBvc2l0aW9uLgorVXNpbmcgaXQgc2F2ZXMgdGltZSBhbmQgYXZvaWRzIGVycm9ycword2hlbiBhIGxvbmcgYW5kL29yIGNvbXBsaWNhdGVkIHBpZWNlIG9mIHRleHQgbmVlZHMgdG8gYmUgY29waWVkLAorYW5kIGV2ZW4gd2hlbiB0aGUgc2FtZSBzaG9ydCBhbmQgc2ltcGxlIHBpZWNlIG9mIHRleHQgbmVlZHMgdG8gYmUgY29waWVkIG1hbnkgdGltZXMuCitJdCdzIHBhcnRpY3VsYXJseSB1c2VmdWwgZm9yIHRoaW5ncyBsaWtlCitsb25nIGZpbGUgbmFtZXMsCitjb21wbGljYXRlZCBjb21tYW5kIGxpbmVzLAorRS1tYWlsIGFkZHJlc3NlcywKK2FuZCBVUkxzLiBDdXR0aW5nIGFuZCBwYXN0aW5nIHRleHQgaW52b2x2ZXMgdGhyZWUgc2ltcGxlIHN0ZXBzOgorPGVudW0+CisgIDxpdGVtPgorICAgIE1hcmsgZWl0aGVyIHRoZSB0b3AtbGVmdCBjb3JuZXIgb2YgdGhlIHJlY3Rhbmd1bGFyIGFyZWEKKyAgICBvciB0aGUgYmVnaW5uaW5nIG9mIHRoZSBsaW5lYXIgYXJlYQorICAgIG9uIHRoZSBzY3JlZW4gd2hpY2ggaXMgdG8gYmUgZ3JhYmJlZCAoY3V0KS4KKyAgICBJZiB5b3VyIGRpc3BsYXkgaGFzIHJvdXRpbmcga2V5cywKKyAgICB0aGVuIG1vdmUgdGhlIGJyYWlsbGUgd2luZG93IHNvIHRoYXQKKyAgICB0aGUgZmlyc3QgY2hhcmFjdGVyIHRvIGJlIGN1dCBhcHBlYXJzIGFueXdoZXJlIHdpdGhpbiBpdCwgYW5kIHRoZW46CisgICAgPGl0ZW1pemU+CisgICAgICA8aXRlbT4KKyAgICAgICAgaW52b2tlIHRoZSA8cmVmIGlkPSJjb21tYW5kLUNVVEJFR0lOIiBuYW1lPSJDVVRCRUdJTiI+IGNvbW1hbmQKKyAgICAgICAgdG8gc3RhcnQgYSBuZXcgY3V0IGJ1ZmZlcgorICAgICAgPGl0ZW0+CisgICAgICAgIGludm9rZSB0aGUgPHJlZiBpZD0iY29tbWFuZC1DVVRBUFBFTkQiIG5hbWU9IkNVVEFQUEVORCI+IGNvbW1hbmQKKyAgICAgICAgdG8gYXBwZW5kIHRvIHRoZSBleGlzdGluZyBjdXQgYnVmZmVyCisgICAgPC9pdGVtaXplPgorICAgIGJ5IHByZXNzaW5nIHRoZSBrZXkocykgYXNzb2NpYXRlZCB3aXRoIGl0CisgICAgYW5kIHRoZW4gcHJlc3NpbmcgdGhlIHJvdXRpbmcga2V5IGFzc29jaWF0ZWQgd2l0aCB0aGUgY2hhcmFjdGVyLgorICA8aXRlbT4KKyAgICBNYXJrIGVpdGhlciB0aGUgYm90dG9tLXJpZ2h0IGNvcm5lciBvZiB0aGUgcmVjdGFuZ3VsYXIgYXJlYQorICAgIG9yIHRoZSBlbmQgb2YgdGhlIGxpbmVhciBhcmVhCisgICAgb24gdGhlIHNjcmVlbiB3aGljaCBpcyB0byBiZSBncmFiYmVkIChjdXQpLgorICAgIElmIHlvdXIgZGlzcGxheSBoYXMgcm91dGluZyBrZXlzLAorICAgIHRoZW4gbW92ZSB0aGUgYnJhaWxsZSB3aW5kb3cgc28gdGhhdAorICAgIHRoZSBsYXN0IGNoYXJhY3RlciB0byBiZSBjdXQgYXBwZWFycyBhbnl3aGVyZSB3aXRoaW4gaXQsIGFuZCB0aGVuCisgICAgPGl0ZW1pemU+CisgICAgICA8aXRlbT4KKyAgICAgICAgaW52b2tlIHRoZSA8cmVmIGlkPSJjb21tYW5kLUNVVFJFQ1QiIG5hbWU9IkNVVFJFQ1QiPiBjb21tYW5kCisgICAgICAgIHRvIGN1dCBhIHJlY3Rhbmd1bGFyIGFyZWEKKyAgICAgIDxpdGVtPgorICAgICAgICBpbnZva2UgdGhlIDxyZWYgaWQ9ImNvbW1hbmQtQ1VUTElORSIgbmFtZT0iQ1VUTElORSI+IGNvbW1hbmQKKyAgICAgICAgdG8gY3V0IGEgbGluZWFyIGFyZWEKKyAgICA8L2l0ZW1pemU+CisgICAgYnkgcHJlc3NpbmcgdGhlIGtleShzKSBhc3NvY2lhdGVkIHdpdGggaXQKKyAgICBhbmQgdGhlbiBwcmVzc2luZyB0aGUgcm91dGluZyBrZXkgYXNzb2NpYXRlZCB3aXRoIHRoZSBjaGFyYWN0ZXIuCisgICAgTWFya2luZyB0aGUgZW5kIG9mIHRoZSBjdXQgYXJlYQorICAgIGFwcGVuZHMgdGhlIHNlbGVjdGVkIHNjcmVlbiBjb250ZW50IHRvIHRoZSBjdXQgYnVmZmVyLgorICAgIEV4Y2VzcyB3aGl0ZS1zcGFjZSBpcyByZW1vdmVkIGZyb20gdGhlIGVuZCBvZiBlYWNoIGxpbmUgaW4gdGhlIGN1dCBidWZmZXIKKyAgICBzbyB0aGF0IHVud2FudGVkIHRyYWlsaW5nIHNwYWNlcyB3b24ndCBiZSBwYXN0ZWQgYmFjayBpbi4KKyAgICBDb250cm9sIGNoYXJhY3RlcnMgYXJlIHJlcGxhY2VkIHdpdGggYmxhbmtzLgorICA8aXRlbT4KKyAgICBJbnNlcnQgKHBhc3RlKSB0aGUgdGV4dCB3aGVyZSBpdCdzIG5lZWRlZC4KKyAgICBQbGFjZSB0aGUgY3Vyc29yIG92ZXIgdGhlIGNoYXJhY3RlciB3aGVyZSB0aGUgdGV4dCBpcyB0byBiZSBwYXN0ZWQsCisgICAgYW5kIGludm9rZSB0aGUgPHJlZiBpZD0iY29tbWFuZC1QQVNURSIgbmFtZT0iUEFTVEUiPiBjb21tYW5kLgorICAgIFlvdSBjYW4gcGFzdGUgdGhlIHNhbWUgdGV4dCBhbnkgbnVtYmVyIG9mIHRpbWVzIHdpdGhvdXQgcmVjdXR0aW5nIGl0LgorICAgIFRoaXMgZGVzY3JpcHRpb24gYXNzdW1lcyB0aGF0IHlvdSdyZSBhbHJlYWR5IGluIHNvbWUgc29ydCBvZiBpbnB1dCBtb2RlLgorICAgIElmIHlvdSBwYXN0ZSB3aGVuIHlvdSdyZSBpbiBzb21lIG90aGVyIGtpbmQgb2YgbW9kZQorICAgIChsaWtlIDx0dC92aS8ncyBjb21tYW5kIG1vZGUpLAorICAgIHRoZW4geW91J2QgYmV0dGVyIGJlIGF3YXJlIG9mIHdoYXQgdGhlIGNoYXJhY3RlcnMgaW4gdGhlIGN1dCBidWZmZXIgd2lsbCBkby4KKzwvZW51bT4KKworVGhlIGN1dCBidWZmZXIgaXMgYWxzbyB1c2VkIGJ5Cit0aGUgPHJlZiBpZD0iY29tbWFuZC1QUlNFQVJDSC1OWFNFQVJDSCIgbmFtZT0iUFJTRUFSQ0gvTlhTRUFSQ0giPiBjb21tYW5kcy4KKworPHNlY3QxPlBvaW50ZXIgKE1vdXNlKSBTdXBwb3J0IHZpYSBHUE08bGFiZWwgaWQ9ImdwbSI+PHA+CitJZiBCUkxUVFkgaXMgY29uZmlndXJlZCB3aXRoIHRoZSA8cmVmIGlkPSJidWlsZC1ncG0iIG5hbWU9Ii0tZW5hYmxlLWdwbSI+IGJ1aWxkIG9wdGlvbgorb24gYSBzeXN0ZW0gd2hlcmUgdGhlIDx0dC9ncG0vIGFwcGxpY2F0aW9uIGhhcyBiZWVuIGluc3RhbGxlZCwKK3RoZW4gaXQnbGwgaW50ZXJhY3Qgd2l0aCB0aGUgcG9pbnRlciAobW91c2UpLgorCitNb3ZpbmcgdGhlIHBvaW50ZXIgZHJhZ3MgdGhlIGJyYWlsbGUgd2luZG93Cisoc2VlIHRoZSA8cmVmIGlkPSJwcmVmZXJlbmNlLXdpbmRvdy1mb2xsb3dzLXBvaW50ZXIiIG5hbWU9IldpbmRvdyBGb2xsb3dzIFBvaW50ZXIiPiBwcmVmZXJlbmNlKS4KK1doZW5ldmVyIHRoZSBwb2ludGVyIGlzIG1vdmVkIGJleW9uZCB0aGUgZWRnZSBvZiB0aGUgYnJhaWxsZSB3aW5kb3csCit0aGUgYnJhaWxsZSB3aW5kb3cgaXMgZHJhZ2dlZCBhbG9uZyAob25lIGNoYXJhY3RlciBhdCBhIHRpbWUpLgorVGhpcyBnaXZlcyB0aGUgYnJhaWxsZSB1c2VyIGFub3RoZXIgdHdvLWRpbWVuc2lvbmFsIHdheQordG8gaW5zcGVjdCB0aGUgc2NyZWVuIGNvbnRlbnQKK29yIHRvIHF1aWNrbHkgbW92ZSB0aGUgYnJhaWxsZSB3aW5kb3cgdG8gYSBkZXNpcmVkIGxvY2F0aW9uLgorSXQgYWxzbyBnaXZlcyBhIHNpZ2h0ZWQgb2JzZXJ2ZXIgYW4gZWFzeSB3YXkgdG8gbW92ZSB0aGUgYnJhaWxsZSB3aW5kb3cKK3RvIHNvbWV0aGluZyBoZSdkIGxpa2UgdGhlIGJyYWlsbGUgdXNlciB0byByZWFkLgorCis8dHQvZ3BtLyB1c2VzIHJldmVyc2UgdmlkZW8gdG8gc2hvdyB3aGVyZSB0aGUgcG9pbnRlciBpcy4KK1VuZGVybGluaW5nIG9mIGhpZ2hsaWdodGVkIGNoYXJhY3RlcnMKKyhzZWUgdGhlIDxyZWYgaWQ9ImNvbW1hbmQtQVRUUlZJUyIgbmFtZT0iQVRUUlZJUyI+IGNvbW1hbmQgZm9yIGRldGFpbHMpCitzaG91bGQgYmUgdHVybmVkIG9uLCB0aGVyZWZvcmUsIHdoZW4gdGhlIGJyYWlsbGUgdXNlciB3aXNoZXMgdG8gdXNlIHRoZSBwb2ludGVyLgorCitUaGlzIGZlYXR1cmUgYWxzbyBnaXZlcyB0aGUgYnJhaWxsZSB1c2VyIGFjY2VzcyB0byA8dHQvZ3BtLydzIGN1dC1hbmQtcGFzdGUgY2FwYWJpbGl0eS4KK0FsdGhvdWdoIHlvdSBzaG91bGQgcmVhZCA8dHQvZ3BtLydzIG93biBkb2N1bWVudGF0aW9uLAoraGVyZSBhcmUgc29tZSBub3RlcyBvbiBob3cgaXQgd29ya3MuCis8aXRlbWl6ZT4KKyAgPGl0ZW0+CisgICAgQ29weSB0aGUgY3VycmVudCBjaGFyYWN0ZXIgdG8gdGhlIGN1dCBidWZmZXIKKyAgICBieSBzaW5nbGUtY2xpY2tpbmcgdGhlIGxlZnQgYnV0dG9uLgorICA8aXRlbT4KKyAgICBDb3B5IHRoZSBjdXJyZW50IHdvcmQgKHNwYWNlLWRlbGltaXRlZCkgdG8gdGhlIGN1dCBidWZmZXIKKyAgICBieSBkb3VibGUtY2xpY2tpbmcgdGhlIGxlZnQgYnV0dG9uLgorICA8aXRlbT4KKyAgICBDb3B5IHRoZSBjdXJyZW50IGxpbmUgdG8gdGhlIGN1dCBidWZmZXIKKyAgICBieSB0cmlwcGxlLWNsaWNraW5nIHRoZSBsZWZ0IGJ1dHRvbi4KKyAgPGl0ZW0+CisgICAgQ29weSBhIGxpbmVhciByZWdpb24gdG8gdGhlIGN1dCBidWZmZXIgYXMgZm9sbG93czoKKyAgICA8ZW51bT4KKyAgICAgIDxpdGVtPgorICAgICAgICBQbGFjZSB0aGUgcG9pbnRlciBvbiB0aGUgZmlyc3QgY2hhcmFjdGVyIG9mIHRoZSByZWdpb24uCisgICAgICA8aXRlbT4KKyAgICAgICAgUHJlc3MgKGFuZCBob2xkKSB0aGUgbGVmdCBidXR0b24uCisgICAgICA8aXRlbT4KKyAgICAgICAgTW92ZSB0aGUgcG9pbnRlciB0byB0aGUgbGFzdCBjaGFyYWN0ZXIgb2YgdGhlIHJlZ2lvbgorICAgICAgICAoYWxsIGN1cnJlbnRseSBzZWxlY3RlZCBjaGFyYWN0ZXJzIGFyZSBoaWdobGlnaHRlZCkuCisgICAgICA8aXRlbT4KKyAgICAgICAgUmVsZWFzZSB0aGUgbGVmdCBidXR0b24uCisgICAgPC9lbnVtPgorICA8aXRlbT4KKyAgICBQYXN0ZSAoaW5wdXQpIHRoZSBjdXJyZW50IGNvbnRlbnRzIG9mIHRoZSBjdXQgYnVmZmVyCisgICAgYnkgY2xpY2tpbmcgdGhlIG1pZGRsZSBidXR0b24gb2YgYSB0aHJlZS1idXR0b24gbW91c2UKKyAgICBvciBieSBjbGlja2luZyB0aGUgcmlnaHQgYnV0dG9uIG9mIGEgdHdvLWJ1dHRvbiBtb3VzZS4KKyAgPGl0ZW0+CisgICAgQXBwZW5kIHRvIHRoZSBjdXQgYnVmZmVyCisgICAgYnkgdXNpbmcgdGhlIHJpZ2h0IGJ1dHRvbiBvZiBhIHRocmVlLWJ1dHRvbiBtb3VzZS4KKzwvaXRlbWl6ZT4KKworPHNlY3QxPkFsZXJ0IFR1bmVzPGxhYmVsIGlkPSJ0dW5lcyI+PHA+CitCUkxUVFkgYWxlcnRzIHlvdSB0byB0aGUgb2NjdXJyZW5jZSBvZiBzaWduaWZpY2FudCBldmVudHMKK2J5IHBsYXlpbmcgc2hvcnQgcHJlZGVmaW5lZCB0dW5lcy4KK1RoaXMgZmVhdHVyZSBjYW4gYmUgYWN0aXZhdGVkIGFuZCBkZWFjdGl2YXRlZCB3aXRoCitlaXRoZXIgdGhlIDxyZWYgaWQ9ImNvbW1hbmQtVFVORVMiIG5hbWU9IlRVTkVTIj4gY29tbWFuZAorb3IgdGhlIDxyZWYgaWQ9InByZWZlcmVuY2UtYWxlcnQtdHVuZXMiIG5hbWU9IkFsZXJ0IFR1bmVzIj4gcHJlZmVyZW5jZS4KK1RoZSB0dW5lcyBhcmUgcGxheWVkIHZpYSB0aGUgaW50ZXJuYWwgYmVlcGVyIGJ5IGRlZmF1bHQsCitidXQgb3RoZXIgYWx0ZXJuYXRpdmVzIGNhbiBiZSBzZWxlY3RlZAord2l0aCB0aGUgPHJlZiBpZD0icHJlZmVyZW5jZS10dW5lLWRldmljZSIgbmFtZT0iVHVuZSBEZXZpY2UiPiBwcmVmZXJlbmNlLgorCitFYWNoIHNpZ25pZmljYW50IGV2ZW50IGlzIGFzc29jaWF0ZWQsIGZyb20gaGlnaGVzdCB0byBsb3dlc3QgcHJpb3JpdHksCit3aXRoIG9uZSBvciBtb3JlIG9mIHRoZSBmb2xsb3dpbmc6Cis8ZGVzY3JpcD4KKyAgPHRhZy9hIHR1bmUvCisgICAgSWYgYSB0dW5lIGhhcyBiZWVuIGFzc29jaWF0ZWQgd2l0aCB0aGUgZXZlbnQsCisgICAgaWYgdGhlIDxyZWYgaWQ9InByZWZlcmVuY2UtYWxlcnQtdHVuZXMiIG5hbWU9IkFsZXJ0IFR1bmVzIj4gcHJlZmVyZW5jZQorICAgIChzZWUgYWxzbyB0aGUgPHJlZiBpZD0iY29tbWFuZC1UVU5FUyIgbmFtZT0iVFVORVMiPiBjb21tYW5kKQorICAgIGlzIGFjdGl2ZSwKKyAgICBhbmQgaWYgdGhlIHNlbGVjdGVkIHR1bmUgZGV2aWNlCisgICAgKHNlZSB0aGUgPHJlZiBpZD0icHJlZmVyZW5jZS10dW5lLWRldmljZSIgbmFtZT0iVHVuZSBEZXZpY2UiPiBwcmVmZXJlbmNlKQorICAgIGNhbiBiZSBvcGVuZWQsCisgICAgdGhlbiB0aGUgdHVuZSBpcyBwbGF5ZWQuCisgIDx0YWcvYSBkb3QgcGF0dGVybi8KKyAgICBJZiBhIGRvdCBwYXR0ZXJuIGhhcyBiZWVuIGFzc29jaWF0ZWQgd2l0aCB0aGUgZXZlbnQsCisgICAgYW5kIGlmIHRoZSA8cmVmIGlkPSJwcmVmZXJlbmNlLWFsZXJ0LWRvdHMiIG5hbWU9IkFsZXJ0IERvdHMiPiBwcmVmZXJlbmNlIGlzIGFjdGl2ZSwKKyAgICB0aGVuIHRoZSBkb3QgcGF0dGVybiBpcyBicmllZmx5IGRpc3BsYXllZCBvbiBldmVyeSBicmFpbGxlIGNlbGwuCisgICAgU29tZSBicmFpbGxlIGRpc3BsYXlzIGRvbid0IHJlc3BvbmQgcXVpY2tseSBlbm91Z2gKKyAgICBmb3IgdGhpcyBtZWNoYW5pc20gdG8gd29yayBlZmZlY3RpdmVseS4KKyAgPHRhZy9hIG1lc3NhZ2UvCisgICAgSWYgYSBtZXNzYWdlIGhhcyBiZWVuIGFzc29jaWF0ZWQgd2l0aCB0aGUgZXZlbnQsCisgICAgYW5kIGlmIHRoZSA8cmVmIGlkPSJwcmVmZXJlbmNlLWFsZXJ0LW1lc3NhZ2VzIiBuYW1lPSJBbGVydCBNZXNzYWdlcyI+IHByZWZlcmVuY2UgaXMgYWN0aXZlLAorICAgIHRoZW4gaXQgaXMgZGlzcGxheWVkIGZvciBhIGZldyBzZWNvbmRzCisgICAgKHNlZSB0aGUgPHJlZiBpZD0ib3B0aW9ucy1tZXNzYWdlLXRpbWVvdXQiIG5hbWU9Ii1NIj4gY29tbWFuZCBsaW5lIG9wdGlvbikuCis8L2Rlc2NyaXA+CisKK1RoZXNlIGV2ZW50cyBpbmNsdWRlOgorPGl0ZW1pemU+CisgIDxpdGVtPgorICAgIFdoZW4gdGhlIGJyYWlsbGUgZGlzcGxheSBkcml2ZXIgc3RhcnRzIG9yIHN0b3BzLgorICA8aXRlbT4KKyAgICBXaGVuIGEgbGVuZ3RoeSBjb21tYW5kIGNvbXBsZXRlcy4KKyAgPGl0ZW0+CisgICAgV2hlbiBhIGNvbW1hbmQgY2Fubm90IGJlIGV4ZWN1dGVkLgorICA8aXRlbT4KKyAgICBXaGVuIGEgbWFyayBpcyBzZXQuCisgIDxpdGVtPgorICAgIFdoZW4gdGhlIHN0YXJ0IG9yIGVuZCBvZiB0aGUgY3V0IGJsb2NrIGlzIHNldC4KKyAgPGl0ZW0+CisgICAgV2hlbiBhIGZlYXR1cmUgaXMgYWN0aXZhdGVkIG9yIGRlYWN0aXZhdGVkLgorICA8aXRlbT4KKyAgICBXaGVuIGN1cnNvciB0cmFja2luZyBpcyB0dXJuZWQgb24gb3Igb2ZmLgorICA8aXRlbT4KKyAgICBXaGVuIHRoZSBzY3JlZW4gaW1hZ2UgaXMgZnJvemVuIG9yIHVuZnJvemVuLgorICA8aXRlbT4KKyAgICBXaGVuIHRoZSBicmFpbGxlIHdpbmRvdyB3cmFwcworICAgIGVpdGhlciBkb3duIHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlIG5leHQgbGluZQorICAgIG9yIHVwIHRvIHRoZSBlbmQgb2YgdGhlIHByZXZpb3VzIGxpbmUuCisgIDxpdGVtPgorICAgIFdoZW4gaWRlbnRpY2FsIGxpbmVzIGFyZSBza2lwcGVkLgorICA8aXRlbT4KKyAgICBXaGVuIGEgcmVxdWVzdGVkIG1vdGlvbiBjYW5ub3QgYmUgcGVyZm9ybWVkLgorICA8aXRlbT4KKyAgICBXaGVuIGN1cnNvciByb3V0aW5nIHN0YXJ0cywgZmluaXNoZXMsIG9yIGZhaWxzLgorPC9pdGVtaXplPgorCis8c2VjdDE+UHJlZmVyZW5jZXMgU2V0dGluZ3M8bGFiZWwgaWQ9InByZWZlcmVuY2VzIj48cD4KK1doZW4gQlJMVFRZIHN0YXJ0cywgaXQgbG9hZHMgYSBmaWxlIHdoaWNoIGNvbnRhaW5zIHlvdXIgcHJlZmVyZW5jZXMgc2V0dGluZ3MuCitUaGUgZmlsZSBkb2Vzbid0IG5lZWQgdG8gZXhpc3QsCithbmQgaXMgY3JlYXRlZCB0aGUgZmlyc3QgdGltZSB0aGUgc2V0dGluZ3MgYXJlIHNhdmVkCit3aXRoIHRoZSA8cmVmIGlkPSJjb21tYW5kLVBSRUZTQVZFIiBuYW1lPSJQUkVGU0FWRSI+IGNvbW1hbmQuCitUaGUgbW9zdCByZWNlbnRseSBzYXZlZCBzZXR0aW5ncyBjYW4gYmUgcmVzdG9yZWQgYXQgYW55IHRpbWUKK3dpdGggdGhlIDxyZWYgaWQ9ImNvbW1hbmQtUFJFRkxPQUQiIG5hbWU9IlBSRUZMT0FEIj4gY29tbWFuZC4KKworVGhlIG5hbWUgZm9yIHRoaXMgZmlsZSBpcyA8dHQ+L2V0Yy9icmx0dHktPC90dD48ZW0vZHJpdmVyLzx0dC8ucHJlZnMvLgord2hlcmUgPGVtL2RyaXZlci8gaXMgdGhlIHR3by1sZXR0ZXIgPHJlZiBpZD0iZHJpdmVycyIgbmFtZT0iZHJpdmVyIGlkZW50aWZpY2F0aW9uIGNvZGUiPi4KKworPHNlY3QyPlRoZSBQcmVmZXJlbmNlcyBNZW51PGxhYmVsIGlkPSJwcmVmZXJlbmNlcy1tZW51Ij48cD4KK1RoZSBwcmVmZXJlbmNlcyBzZXR0aW5ncyBhcmUgc2F2ZWQgYXMgYmluYXJ5IGRhdGEKK3doaWNoLCB0aGVyZWZvcmUsIGNhbid0IGJlIGVkaXRlZCBieSBoYW5kLgorQlJMVFRZLCBob3dldmVyLCBoYXMgYSBzaW1wbGUgbWVudSBmcm9tIHdoaWNoIHlvdSBjYW4gZWFzaWx5IGNoYW5nZSB0aGVtLgorCitUaGUgbWVudSBpcyBhY3RpdmF0ZWQgYnkgdGhlIDxyZWYgaWQ9ImNvbW1hbmQtUFJFRk1FTlUiIG5hbWU9IlBSRUZNRU5VIj4gY29tbWFuZC4KK1RoZSBicmFpbGxlIGRpc3BsYXkgYnJpZWZseQorKHNlZSB0aGUgPHJlZiBpZD0ib3B0aW9ucy1tZXNzYWdlLXRpbWVvdXQiIG5hbWU9Ii1NIj4gY29tbWFuZCBsaW5lIG9wdGlvbikKK3Nob3dzIHRoZSBtZW51IHRpdGxlLAorYW5kIHRoZW4gcHJlc2VudHMgdGhlIGN1cnJlbnQgaXRlbSBhbmQgaXRzIGN1cnJlbnQgc2V0dGluZy4KKworPFNlY3QzPk5hdmlnYXRpbmcgdGhlIE1lbnU8cD4KK1NlZSA8cmVmIGlkPSJtZW51LW5hdmlnYXRpb24iIG5hbWU9Ik1lbnUgTmF2aWdhdGlvbiBDb21tYW5kcyI+IGZvciB0aGUgZnVsbCBsaXN0IG9mCitjb21tYW5kcyB3aGljaCBlbmFibGUgeW91IHRvIHNlbGVjdCBpdGVtcyBhbmQgY2hhbmdlIHNldHRpbmdzIHdpdGhpbiB0aGUgbWVudS4KK0ZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5IHdpdGggb2xkIGRyaXZlcnMsIHRoZSB3aW5kb3cgbW90aW9uIGNvbW1hbmRzLAord2hpY2ggaGF2ZSBtb2RpZmllZCBtZWFuaW5ncyBpbiB0aGlzIGNvbnRleHQsIGNhbiBhbHNvIGJlIHVzZWQuCis8ZGVzY3JpcD4KKyAgPHRhZz48dHQvVE9QLy88dHQvQk9ULywgPHR0L1RPUF9MRUZULy88dHQvQk9UX0xFRlQvLCA8dHQvUEFHRV9VUC8vPHR0L1BBR0VfRE9XTi88L3RhZz4KKyAgICBHbyB0byB0aGUgZmlyc3QvbGFzdCBpdGVtIGluIHRoZSBtZW51CisgICAgKHNhbWUgYXMgPHJlZiBpZD0iY29tbWFuZC1NRU5VX0ZJUlNUX0lURU0tTUVOVV9MQVNUX0lURU0iIG5hbWU9Ik1FTlVfRklSU1RfSVRFTS9NRU5VX0xBU1RfSVRFTSI+KS4KKyAgPHRhZz48dHQvTE5VUC8vPHR0L0xORE4vLCA8dHQvUFJESUZMTi8vPHR0L05YRElGTE4vLCA8dHQvQ1VSU09SX1VQLy88dHQvQ1VSU09SX0RPV04vPC90YWc+CisgICAgR28gdG8gdGhlIHByZXZpb3VzL25leHQgaXRlbSBpbiB0aGUgbWVudQorICAgIChzYW1lIGFzIDxyZWYgaWQ9ImNvbW1hbmQtTUVOVV9QUkVWX0lURU0tTUVOVV9ORVhUX0lURU0iIG5hbWU9Ik1FTlVfUFJFVl9JVEVNL01FTlVfTkVYVF9JVEVNIj4pLgorICA8dGFnPjx0dC9XSU5VUC8vPHR0L1dJTkROLywgPHR0L0NIUkxULy88dHQvQ0hSUlQvLCA8dHQvQ1VSU09SX0xFRlQvLzx0dC9DVVJTT1JfUklHSFQvLCA8dHQvQkFDSy8vPHR0L0hPTUUvPC90YWc+CisgICAgRGVjcmVtZW50L2luY3JlbWVudCB0aGUgY3VycmVudCBtZW51IGl0ZW0ncyBzZXR0aW5nCisgICAgKHNhbWUgYXMgPHJlZiBpZD0iY29tbWFuZC1NRU5VX1BSRVZfU0VUVElORy1NRU5VX05FWFRfU0VUVElORyIgbmFtZT0iTUVOVV9QUkVWX1NFVFRJTkcvTUVOVV9ORVhUX1NFVFRJTkciPikuCis8L2Rlc2NyaXA+CisKK05vdGVzOgorPGl0ZW1pemU+CisgIDxpdGVtPgorICAgIFRoZSByb3V0aW5nIGtleXMgY2FuIGFsc28gYmUgdXNlZCB0byBzZWxlY3QgYSBzZXR0aW5nIGZvciB0aGUgY3VycmVudCBpdGVtLgorICAgIElmIHRoZSBpdGVtIGhhcyBudW1lcmljIHNldHRpbmdzLAorICAgIHRoZW4gdGhlIGVudGlyZSByb3cgb2Ygcm91dGluZyBrZXlzIGFjdHMgYXMgYSBzY3JvbGwgYmFyCisgICAgd2hpY2ggY292ZXJzIHRoZSBmdWxsIHJhbmdlIG9mIHZhbGlkIHZhbHVlcy4KKyAgICBJZiB0aGUgaXRlbSBoYXMgbmFtZWQgc2V0dGluZ3MsCisgICAgdGhlbiB0aGUgcm91dGluZyBrZXlzIGNvcnJlc3BvbmQgb3JkaW5hbGx5IHdpdGggdGhlIHNldHRpbmdzLgorICA8aXRlbT4KKyAgICBVc2UgdGhlIDx0dC9QUkVGTE9BRC8gY29tbWFuZCB0byB1bmRvIGFsbCBvZiB0aGUgY2hhbmdlcworICAgIHdoaWNoIHdlcmUgbWFkZSBzaW5jZSBlbnRlcmluZyB0aGUgbWVudS4KKyAgPGl0ZW0+CisgICAgVXNlIHRoZSA8dHQvUFJFRk1FTlUvIGNvbW1hbmQgKGFnYWluKSB0byBsZWF2ZSB0aGUgbmV3IHNldHRpbmdzIGluIGVmZmVjdCwKKyAgICBleGl0IHRoZSBtZW51LCBhbmQgcmVzdW1lIG5vcm1hbCBvcGVyYXRpb24uCisgICAgSWYgdGhlIDxzcS9TYXZlIFNldHRpbmdzIG9uIEV4aXQvIGl0ZW0gaXMgc2V0LCB0aGVuLCBpbiBhZGRpdGlvbiwKKyAgICB0aGUgbmV3IHNldHRpbmdzIGFyZSB3cml0dGVuIHRvIHRoZSBwcmVmZXJlbmNlcyBzZXR0aW5ncyBmaWxlLgorICAgIEFueSBjb21tYW5kIG5vdCByZWNvZ25pemVkIGJ5IHRoZSBtZW51IHN5c3RlbSBhbHNvIGRvZXMgdGhlc2Ugc2FtZSB0aGluZ3MuCis8L2l0ZW1pemU+CisKKzxzZWN0Mz5UaGUgTWVudSBJdGVtczxwPgorPGRlc2NyaXA+CisgIDx0YWc+U2F2ZSBvbiBFeGl0PGxhYmVsIGlkPSJwcmVmZXJlbmNlLXNhdmUtb24tZXhpdCI+PC90YWc+CisgICAgV2hlbiBleGl0aW5nIHRoZSBwcmVmZXJlbmNlcyBtZW51OgorICAgIDxkZXNjcmlwPgorICAgICAgPHRhZy9Oby8KKyAgICAgICAgRG9uJ3QgYXV0b21hdGljYWxseSBzYXZlIHRoZSBwcmVmZXJlbmNlcyBzZXR0aW5ncy4KKyAgICAgIDx0YWcvWWVzLworICAgICAgICBBdXRvbWF0aWNhbGx5IHNhdmUgdGhlIHByZWZlcmVuY2VzIHNldHRpbmdzLgorICAgIDwvZGVzY3JpcD4KKyAgICBUaGUgaW5pdGlhbCBzZXR0aW5nIGlzIDx0dC9Oby8uCisgIDx0YWc+VGV4dCBTdHlsZTxsYWJlbCBpZD0icHJlZmVyZW5jZS10ZXh0LXN0eWxlIj48L3RhZz4KKyAgICBXaGVuIGRpc3BsYXlpbmcgc2NyZWVuIGNvbnRlbnQKKyAgICAoc2VlIHRoZSA8cmVmIGlkPSJjb21tYW5kLURJU1BNRCIgbmFtZT0iRElTUE1EIj4gY29tbWFuZCksCisgICAgc2hvdyBjaGFyYWN0ZXJzOgorICAgIDxkZXNjcmlwPgorICAgICAgPHRhZy84LWRvdC8KKyAgICAgICAgV2l0aCBhbGwgZWlnaHQgZG90cy4KKyAgICAgIDx0YWcvNi1kb3QvCisgICAgICAgIFdpdGggb25seSBkb3RzIDEgdGhyb3VnaCA2LgorICAgICAgICBJZiBhIGNvbnRyYWN0aW9uIHRhYmxlIGhhcyBiZWVuIHNlbGVjdGVkCisgICAgICAgIChzZWUgdGhlIDxyZWYgaWQ9Im9wdGlvbnMtY29udHJhY3Rpb24tdGFibGUiIG5hbWU9Ii1jIj4gY29tbWFuZCBsaW5lIG9wdGlvbgorICAgICAgICBhbmQgdGhlIDxyZWYgaWQ9ImNvbmZpZ3VyZS1jb250cmFjdGlvbi10YWJsZSIgbmFtZT0iY29udHJhY3Rpb24tdGFibGUiPiBjb25maWd1cmF0aW9uIGZpbGUgZGlyZWN0aXZlKSwKKyAgICAgICAgdGhlbiBpdCBpcyB1c2VkLgorICAgIDwvZGVzY3JpcD4KKyAgICBUaGlzIHNldHRpbmcgY2FuIGFsc28gYmUgY2hhbmdlZCB3aXRoIHRoZQorICAgIDxyZWYgaWQ9ImNvbW1hbmQtU0lYRE9UUyIgbmFtZT0iU0lYRE9UUyI+IGNvbW1hbmQuCisgIDx0YWc+U2tpcCBJZGVudGljYWwgTGluZXM8bGFiZWwgaWQ9InByZWZlcmVuY2Utc2tpcC1pZGVudGljYWwtbGluZXMiPjwvdGFnPgorICAgIFdoZW4gbW92aW5nIGVpdGhlciB1cCBvciBkb3duIGV4YWN0bHkgb25lIGxpbmUgd2l0aAorICAgIHRoZSA8cmVmIGlkPSJjb21tYW5kLUxOVVAtTE5ETiIgbmFtZT0iTE5VUC9MTkROIj4gY29tbWFuZHMsCisgICAgYXMgd2VsbCBhcyB0aGUgbGluZSB3cmFwcGluZyBmZWF0dXJlIG9mCisgICAgdGhlIDxyZWYgaWQ9ImNvbW1hbmQtRldJTkxULUZXSU5SVCIgbmFtZT0iRldJTkxUL0ZXSU5SVCI+CisgICAgYW5kIDxyZWYgaWQ9ImNvbW1hbmQtRldJTkxUU0tJUC1GV0lOUlRTS0lQIiBuYW1lPSJGV0lOTFRTS0lQL0ZXSU5SVFNLSVAiPiBjb21tYW5kczoKKyAgICA8ZGVzY3JpcD4KKyAgICAgIDx0YWcvTm8vCisgICAgICAgIERvbid0IHNraXAgcGFzdCBsaW5lcyB3aGljaCBoYXZlIHRoZSBzYW1lIGNvbnRlbnQgYXMgdGhlIGN1cnJlbnQgbGluZS4KKyAgICAgIDx0YWcvWWVzLworICAgICAgICBTa2lwIHBhc3QgbGluZXMgd2hpY2ggaGF2ZSB0aGUgc2FtZSBjb250ZW50IGFzIHRoZSBjdXJyZW50IGxpbmUuCisgICAgPC9kZXNjcmlwPgorICAgIFRoaXMgc2V0dGluZyBjYW4gYWxzbyBiZSBjaGFuZ2VkIHdpdGggdGhlCisgICAgPHJlZiBpZD0iY29tbWFuZC1TS1BJRExOUyIgbmFtZT0iU0tQSURMTlMiPiBjb21tYW5kLgorICA8dGFnPlNraXAgQmxhbmsgV2luZG93czxsYWJlbCBpZD0icHJlZmVyZW5jZS1za2lwLWJsYW5rLXdpbmRvd3MiPjwvdGFnPgorICAgIFdoZW4gbW92aW5nIGVpdGhlciBsZWZ0IG9yIHJpZ2h0IHdpdGgKKyAgICB0aGUgPHJlZiBpZD0iY29tbWFuZC1GV0lOTFQtRldJTlJUIiBuYW1lPSJGV0lOTFQvRldJTlJUIj4gY29tbWFuZHM6CisgICAgPGRlc2NyaXA+CisgICAgICA8dGFnL05vLworICAgICAgICBEb24ndCBza2lwIHBhc3QgYmxhbmsgd2luZG93cy4KKyAgICAgIDx0YWcvWWVzLworICAgICAgICBTa2lwIHBhc3QgYmxhbmsgd2luZG93cy4KKyAgICA8L2Rlc2NyaXA+CisgICAgVGhpcyBzZXR0aW5nIGNhbiBhbHNvIGJlIGNoYW5nZWQgd2l0aCB0aGUKKyAgICA8cmVmIGlkPSJjb21tYW5kLVNLUEJMTktXSU5TIiBuYW1lPSJTS1BCTE5LV0lOUyI+IGNvbW1hbmQuCisgIDx0YWc+V2hpY2ggQmxhbmsgV2luZG93czxsYWJlbCBpZD0icHJlZmVyZW5jZS13aGljaC1ibGFuay13aW5kb3dzIj48L3RhZz4KKyAgICBJZiBibGFuayB3aW5kb3dzIGFyZSB0byBiZSBza2lwcGVkOgorICAgIDxkZXNjcmlwPgorICAgICAgPHRhZy9BbGwvCisgICAgICAgIFNraXAgYWxsIG9mIHRoZW0uCisgICAgICA8dGFnL0VuZCBvZiBMaW5lLworICAgICAgICBPbmx5IHNraXAgdGhvc2Ugd2hpY2ggYXJlIGF0IHRoZSBlbmQgKG9uIHRoZSByaWdodCBzaWRlKSBvZiBhIGxpbmUuCisgICAgICA8dGFnL1Jlc3Qgb2YgTGluZS8KKyAgICAgICAgT25seSBza2lwIHRob3NlIHdoaWNoIGFyZQorICAgICAgICBhdCB0aGUgZW5kIChvbiB0aGUgcmlnaHQgc2lkZSkgb2YgYSBsaW5lIHdoZW4gcmVhZGluZyBmb3J3YXJkLAorICAgICAgICBhbmQgYXQgdGhlIGJlZ2lubmluZyAob24gdGhlIGxlZnQgc2lkZSkgb2YgYSBsaW5lIHdoZW4gcmVhZGluZyBiYWNrd2FyZC4KKyAgICA8L2Rlc2NyaXA+CisgIDx0YWc+U2xpZGluZyBXaW5kb3c8bGFiZWwgaWQ9InByZWZlcmVuY2Utc2xpZGluZy13aW5kb3ciPjwvdGFnPgorICAgIElmIHRoZSBjdXJzb3IgaXMgYmVpbmcgdHJhY2tlZAorICAgIChzZWUgdGhlIDxyZWYgaWQ9ImNvbW1hbmQtQ1NSVFJLIiBuYW1lPSJDU1JUUksiPiBjb21tYW5kKSwKKyAgICBhbmQgdGhlIGN1cnNvciBtb3ZlcyB0b28gY2xvc2UgdG8gKG9yIGJleW9uZCkKKyAgICBlaXRoZXIgZW5kIG9mIHRoZSBicmFpbGxlIHdpbmRvdzoKKyAgICA8ZGVzY3JpcD4KKyAgICAgIDx0YWcvTm8vCisgICAgICAgIEhvcml6b250YWxseSByZXBvc2l0aW9uIHRoZSB3aW5kb3cgc3VjaCB0aGF0IGl0cyBsZWZ0IGVuZAorICAgICAgICBpcyBhIG11bHRpcGxlIG9mIGl0cyB3aWR0aCBmcm9tIHRoZSBsZWZ0IGVkZ2Ugb2YgdGhlIHNjcmVlbi4KKyAgICAgIDx0YWcvWWVzLworICAgICAgICBIb3Jpem9udGFsbHkgcmVwb3NpdGlvbiB0aGUgd2luZG93IHN1Y2ggdGhhdCB0aGUgY3Vyc29yLAorICAgICAgICB3aGlsZSByZW1haW5pbmcgb24gdGhhdCBzaWRlIG9mIHRoZSB3aW5kb3csIGlzIG5lYXJlciB0aGUgY2VudHJlLgorICAgIDwvZGVzY3JpcD4KKyAgICBUaGlzIHNldHRpbmcgY2FuIGFsc28gYmUgY2hhbmdlZCB3aXRoIHRoZQorICAgIDxyZWYgaWQ9ImNvbW1hbmQtU0xJREVXSU4iIG5hbWU9IlNMSURFV0lOIj4gY29tbWFuZC4KKyAgPHRhZz5FYWdlciBTbGlkaW5nIFdpbmRvdzxsYWJlbCBpZD0icHJlZmVyZW5jZS1lYWdlci1zbGlkaW5nLXdpbmRvdyI+PC90YWc+CisgICAgSWYgdGhlIGJyYWlsbGUgd2luZG93IGlzIHRvIHNsaWRlOgorICAgIDxkZXNjcmlwPgorICAgICAgPHRhZy9Oby8KKyAgICAgICAgUmVwb3NpdGlvbiBpdCB3aGVuZXZlciB0aGUgY3Vyc29yIG1vdmVzIGJleW9uZCBlaXRoZXIgZW5kLgorICAgICAgPHRhZy9ZZXMvCisgICAgICAgIFJlcG9zaXRpb24gaXQgd2hlbmV2ZXIgdGhlIGN1cnNvciBtb3ZlcyB0b28gY2xvc2UgdG8gZWl0aGVyIGVuZC4KKyAgICA8L2Rlc2NyaXA+CisgICAgVGhlIGluaXRpYWwgc2V0dGluZyBpcyA8dHQvTm8vLgorICA8dGFnPldpbmRvdyBPdmVybGFwPGxhYmVsIGlkPSJwcmVmZXJlbmNlLXdpbmRvdy1vdmVybGFwIj48L3RhZz4KKyAgICBXaGVuIG1vdmluZyBlaXRoZXIgbGVmdCBvciByaWdodCB3aXRoCisgICAgdGhlIDxyZWYgaWQ9ImNvbW1hbmQtRldJTkxULUZXSU5SVCIgbmFtZT0iRldJTkxUL0ZXSU5SVCI+IGNvbW1hbmRzLAorICAgIHRoaXMgc2V0dGluZyBzcGVjaWZpZXMgaG93IG1hbnkgY2hhcmFjdGVycworICAgIGhvcml6b250YWxseSBhZGphY2VudCBicmFpbGxlIHdpbmRvd3Mgc2hvdWxkIG92ZXJsYXAgZWFjaCBvdGhlciBieS4KKyAgICBUaGUgaW5pdGlhbCBzZXR0aW5nIGlzIDx0dC8wLy4KKyAgPHRhZz5BdXRvcmVwZWF0PGxhYmVsIGlkPSJwcmVmZXJlbmNlLWF1dG9yZXBlYXQiPjwvdGFnPgorICAgIFdoaWxlIHRoZSBrZXkgKGNvbWJpbmF0aW9uKSBmb3IgYSBjb21tYW5kIHJlbWFpbnMgcHJlc3NlZDoKKyAgICA8ZGVzY3JpcD4KKyAgICAgIDx0YWcvTm8vCisgICAgICAgIERvbid0IGF1dG9tYXRpY2FsbHkgcmVwZWF0IHRoZSBjb21tYW5kLgorICAgICAgPHRhZy9ZZXMvCisgICAgICAgIEF1dG9tYXRpY2FsbHkgcmVwZWF0IHRoZSBjb21tYW5kIGF0IGEgcmVndWxhciBpbnRlcnZhbCBhZnRlciBhbiBpbml0aWFsIGRlbGF5LgorICAgIDwvZGVzY3JpcD4KKyAgICBUaGUgZm9sbG93aW5nIGNvbW1hbmRzIGFyZSBlbGlnaWJsZSBmb3IgYXV0b3JlcGVhdGluZzoKKyAgICA8aXRlbWl6ZT4KKyAgICAgIDxpdGVtPgorICAgICAgICBUaGUgPHJlZiBpZD0iY29tbWFuZC1MTlVQLUxORE4iIG5hbWU9IkxOVVAvTE5ETiI+IGNvbW1hbmRzLgorICAgICAgPGl0ZW0+CisgICAgICAgIFRoZSA8cmVmIGlkPSJjb21tYW5kLVBSRElGTE4tTlhESUZMTiIgbmFtZT0iUFJESUZMTi9OWERJRkxOIj4gY29tbWFuZHMuCisgICAgICA8aXRlbT4KKyAgICAgICAgVGhlIDxyZWYgaWQ9ImNvbW1hbmQtQ0hSTFQtQ0hSUlQiIG5hbWU9IkNIUkxUL0NIUlJUIj4gY29tbWFuZHMuCisgICAgICA8aXRlbT4KKyAgICAgICAgQnJhaWxsZSB3aW5kb3cgcGFubmluZyBvcGVyYXRpb25zCisgICAgICAgIChzZWUgdGhlIDxyZWYgaWQ9InByZWZlcmVuY2UtYXV0b3JlcGVhdC1wYW5uaW5nIiBuYW1lPSJBdXRvcmVwZWF0IFBhbm5pbmciPiBwcmVmZXJlbmNlKS4KKyAgICAgIDxpdGVtPgorICAgICAgICBUaGUgUGFnZS1VcCBhbmQgUGFnZS1Eb3duIG9wZXJhdGlvbnMuCisgICAgICA8aXRlbT4KKyAgICAgICAgVGhlIEN1cnNvci1VcCBhbmQgQ3Vyc29yLURvd24gb3BlcmF0aW9ucy4KKyAgICAgIDxpdGVtPgorICAgICAgICBUaGUgQ3Vyc29yLUxlZnQgYW5kIEN1cnNvci1SaWdodCBvcGVyYXRpb25zLgorICAgICAgPGl0ZW0+CisgICAgICAgIFRoZSBCYWNrc3BhY2UgYW5kIERlbGV0ZSBvcGVyYXRpb25zLgorICAgICAgPGl0ZW0+CisgICAgICAgIENoYXJhY3RlciBlbnRyeS4KKyAgICA8L2l0ZW1pemU+CisgICAgT25seSBzb21lIGRyaXZlcnMgc3VwcG9ydCB0aGlzIGZ1bmN0aW9uYWxpdHksCisgICAgdGhlIHByaW1hcnkgbGltaXRhdGlvbiBiZWluZyB0aGF0IG1hbnkgYnJhaWxsZSBkaXNwbGF5cworICAgIGRvbid0IHNpZ25hbCBib3RoIGtleSBwcmVzc2VzIGFuZCBrZXkgcmVsZWFzZXMgYXMgZGlzdGluY3RseSBzZXBhcmF0ZSBldmVudHMuCisgICAgVGhpcyBzZXR0aW5nIGNhbiBhbHNvIGJlIGNoYW5nZWQgd2l0aCB0aGUKKyAgICA8cmVmIGlkPSJjb21tYW5kLUFVVE9SRVBFQVQiIG5hbWU9IkFVVE9SRVBFQVQiPiBjb21tYW5kLgorICAgIFRoZSBpbml0aWFsIHNldHRpbmcgaXMgPHR0L1llcy8uCisgIDx0YWc+QXV0b3JlcGVhdCBQYW5uaW5nPGxhYmVsIGlkPSJwcmVmZXJlbmNlLWF1dG9yZXBlYXQtcGFubmluZyI+PC90YWc+CisgICAgV2hlbiB0aGUgPHJlZiBpZD0icHJlZmVyZW5jZS1hdXRvcmVwZWF0IiBuYW1lPSJBdXRvcmVwZWF0Ij4gcHJlZmVyZW5jZSBpcyBlbmFibGVkOgorICAgIDxkZXNjcmlwPgorICAgICAgPHRhZy9Oby8KKyAgICAgICAgRG9uJ3QgYXV0b3JlcGVhdCBicmFpbGxlIHdpbmRvdyBwYW5uaW5nIG9wZXJhdGlvbnMuCisgICAgICA8dGFnL1llcy8KKyAgICAgICAgQXV0b3JlcGVhdCBicmFpbGxlIHdpbmRvdyBwYW5uaW5nIG9wZXJhdGlvbnMuCisgICAgPC9kZXNjcmlwPgorICAgIFRoaXMgcHJlZmVyZW5jZSBhZmZlY3RzIHRoZSA8cmVmIGlkPSJjb21tYW5kLUZXSU5MVC1GV0lOUlQiIG5hbWU9IkZXSU5MVC9GV0lOUlQiPiBjb21tYW5kcy4KKyAgICBUaGUgaW5pdGlhbCBzZXR0aW5nIGlzIDx0dC9Oby8uCisgIDx0YWc+QXV0b3JlcGVhdCBEZWxheTxsYWJlbCBpZD0icHJlZmVyZW5jZS1hdXRvcmVwZWF0LWRlbGF5Ij48L3RhZz4KKyAgICBXaGVuIGEgY2hhcmFjdGVyIGlzIHRvIGJlIGF1dG9yZXBlYXRlZCwKKyAgICB0aGlzIHNldHRpbmcgc3BlY2lmaWVzIHRoZSBhbW91bnQgb2YgdGltZQorICAgIChzZWUgdGhlIG5vdGUgb24gPHJlZiBpZD0idGltZS1zZXR0aW5ncyIgbmFtZT0idGltZSBzZXR0aW5ncyI+IGJlbG93KQorICAgIHdoaWNoIG11c3QgcGFzcyBiZWZvcmUgYXV0b3JlcGVhdGluZyBiZWdpbnMuCisgICAgVGhlIGluaXRpYWwgc2V0dGluZyBpcyA8dHQvNTAvLgorICA8dGFnPkF1dG9yZXBlYXQgSW50ZXJ2YWw8bGFiZWwgaWQ9InByZWZlcmVuY2UtYXV0b3JlcGVhdC1pbnRlcnZhbCI+PC90YWc+CisgICAgV2hlbiBhIGNoYXJhY3RlciBpcyBiZWluZyBhdXRvcmVwZWF0ZWQsCisgICAgdGhpcyBzZXR0aW5nIHNwZWNpZmllcyB0aGUgYW1vdW50IG9mIHRpbWUKKyAgICAoc2VlIHRoZSBub3RlIG9uIDxyZWYgaWQ9InRpbWUtc2V0dGluZ3MiIG5hbWU9InRpbWUgc2V0dGluZ3MiPiBiZWxvdykKKyAgICBiZXR3ZWVuIGVhY2ggcmVleGVjdXRpb24uCisgICAgVGhlIGluaXRpYWwgc2V0dGluZyBpcyA8dHQvMTAvLgorICA8dGFnPlNob3cgQ3Vyc29yPGxhYmVsIGlkPSJwcmVmZXJlbmNlLXNob3ctY3Vyc29yIj48L3RhZz4KKyAgICBXaGVuIGRpc3BsYXlpbmcgc2NyZWVuIGNvbnRlbnQKKyAgICAoc2VlIHRoZSA8cmVmIGlkPSJjb21tYW5kLURJU1BNRCIgbmFtZT0iRElTUE1EIj4gY29tbWFuZCk6CisgICAgPGRlc2NyaXA+CisgICAgICA8dGFnL05vLworICAgICAgICBEb24ndCBzaG93IHRoZSBjdXJzb3IuCisgICAgICA8dGFnL1llcy8KKyAgICAgICAgU2hvdyB0aGUgY3Vyc29yLgorICAgIDwvZGVzY3JpcD4KKyAgICBUaGlzIHNldHRpbmcgY2FuIGFsc28gYmUgY2hhbmdlZCB3aXRoIHRoZQorICAgIDxyZWYgaWQ9ImNvbW1hbmQtQ1NSVklTIiBuYW1lPSJDU1JWSVMiPiBjb21tYW5kLgorICAgIFRoZSBpbml0aWFsIHNldHRpbmcgaXMgPHR0L1llcy8uCisgIDx0YWc+Q3Vyc29yIFN0eWxlPGxhYmVsIGlkPSJwcmVmZXJlbmNlLWN1cnNvci1zdHlsZSI+PC90YWc+CisgICAgV2hlbiBzaG93aW5nIHRoZSBjdXJzb3IsIHJlcHJlc2VudCBpdDoKKyAgICA8ZGVzY3JpcD4KKyAgICAgIDx0YWcvVW5kZXJsaW5lLworICAgICAgICBXaXRoIGRvdHMgNyBhbmQgOC4KKyAgICAgIDx0YWcvQmxvY2svCisgICAgICAgIFdpdGggYWxsIGVpZ2h0IGRvdHMuCisgICAgPC9kZXNjcmlwPgorICAgIFRoaXMgc2V0dGluZyBjYW4gYWxzbyBiZSBjaGFuZ2VkIHdpdGggdGhlCisgICAgPHJlZiBpZD0iY29tbWFuZC1DU1JTSVpFIiBuYW1lPSJDU1JTSVpFIj4gY29tbWFuZC4KKyAgPHRhZz5CbGlua2luZyBDdXJzb3I8bGFiZWwgaWQ9InByZWZlcmVuY2UtYmxpbmtpbmctY3Vyc29yIj48L3RhZz4KKyAgICBXaGVuIHRoZSBjdXJzb3IgaXMgdG8gYmUgc2hvd246CisgICAgPGRlc2NyaXA+CisgICAgICA8dGFnL05vLworICAgICAgICBMZWF2ZSBpdCB2aXNpYmxlIGFsbCB0aGUgdGltZS4KKyAgICAgIDx0YWcvWWVzLworICAgICAgICBNYWtlIGl0IGFsdGVybmF0ZWx5IHZpc2libGUgYW5kIGludmlzaWJsZQorICAgICAgICBhY2NvcmRpbmcgdG8gYSBwcmVkZWZpbmVkIGludGVydmFsLgorICAgIDwvZGVzY3JpcD4KKyAgICBUaGlzIHNldHRpbmcgY2FuIGFsc28gYmUgY2hhbmdlZCB3aXRoIHRoZQorICAgIDxyZWYgaWQ9ImNvbW1hbmQtQ1NSQkxJTksiIG5hbWU9IkNTUkJMSU5LIj4gY29tbWFuZC4KKyAgPHRhZz5DdXJzb3IgVmlzaWJsZSBUaW1lPGxhYmVsIGlkPSJwcmVmZXJlbmNlLWN1cnNvci12aXNpYmxlLXRpbWUiPjwvdGFnPgorICAgIFdoZW4gdGhlIGN1cnNvciBpcyB0byBiZSBibGlua2VkLCB0aGlzIHNldHRpbmcgc3BlY2lmaWVzIHRoZSBsZW5ndGggb2YgdGltZQorICAgIChzZWUgdGhlIG5vdGUgb24gPHJlZiBpZD0idGltZS1zZXR0aW5ncyIgbmFtZT0idGltZSBzZXR0aW5ncyI+IGJlbG93KQorICAgIGR1cmluZyBlYWNoIGN5Y2xlIHRoYXQgaXQgaXMgdG8gYmUgdmlzaWJsZS4KKyAgICBUaGUgaW5pdGlhbCBzZXR0aW5nIGlzIDx0dC80MC8uCisgIDx0YWc+Q3Vyc29yIEludmlzaWJsZSBUaW1lPGxhYmVsIGlkPSJwcmVmZXJlbmNlLWN1cnNvci1pbnZpc2libGUtdGltZSI+PC90YWc+CisgICAgV2hlbiB0aGUgY3Vyc29yIGlzIHRvIGJlIGJsaW5rZWQsIHRoaXMgc2V0dGluZyBzcGVjaWZpZXMgdGhlIGxlbmd0aCBvZiB0aW1lCisgICAgKHNlZSB0aGUgbm90ZSBvbiA8cmVmIGlkPSJ0aW1lLXNldHRpbmdzIiBuYW1lPSJ0aW1lIHNldHRpbmdzIj4gYmVsb3cpCisgICAgZHVyaW5nIGVhY2ggY3ljbGUgdGhhdCBpdCBpcyB0byBiZSBpbnZpc2libGUuCisgICAgVGhlIGluaXRpYWwgc2V0dGluZyBpcyA8dHQvNDAvLgorICA8dGFnPlNob3cgQXR0cmlidXRlczxsYWJlbCBpZD0icHJlZmVyZW5jZS1zaG93LWF0dHJpYnV0ZXMiPjwvdGFnPgorICAgIFdoZW4gZGlzcGxheWluZyBzY3JlZW4gY29udGVudAorICAgIChzZWUgdGhlIDxyZWYgaWQ9ImNvbW1hbmQtRElTUE1EIiBuYW1lPSJESVNQTUQiPiBjb21tYW5kKToKKyAgICA8ZGVzY3JpcD4KKyAgICAgIDx0YWcvTm8vCisgICAgICAgIERvbid0IHVuZGVybGluZSBoaWdobGlnaHRlZCBjaGFyYWN0ZXJzLgorICAgICAgPHRhZy9ZZXMvCisgICAgICAgIFVuZGVybGluZSBoaWdobGlnaHRlZCBjaGFyYWN0ZXJzLgorICAgIDwvZGVzY3JpcD4KKyAgICBUaGlzIHNldHRpbmcgY2FuIGFsc28gYmUgY2hhbmdlZCB3aXRoIHRoZQorICAgIDxyZWYgaWQ9ImNvbW1hbmQtQVRUUlZJUyIgbmFtZT0iQVRUUlZJUyI+IGNvbW1hbmQuCisgIDx0YWc+QmxpbmtpbmcgQXR0cmlidXRlczxsYWJlbCBpZD0icHJlZmVyZW5jZS1ibGlua2luZy1hdHRyaWJ1dGVzIj48L3RhZz4KKyAgICBXaGVuIGhpZ2hsaWdodGVkIGNoYXJhY3RlcnMgYXJlIHRvIGJlIHVuZGVybGluZWQ6CisgICAgPGRlc2NyaXA+CisgICAgICA8dGFnL05vLworICAgICAgICBMZWF2ZSB0aGUgaW5kaWNhdG9yIHZpc2libGUgYWxsIHRoZSB0aW1lLgorICAgICAgPHRhZy9ZZXMvCisgICAgICAgIE1ha2UgdGhlIGluZGljYXRvciBhbHRlcm5hdGVseSB2aXNpYmxlIGFuZCBpbnZpc2libGUKKyAgICAgICAgYWNjb3JkaW5nIHRvIGEgcHJlZGVmaW5lZCBpbnRlcnZhbC4KKyAgICA8L2Rlc2NyaXA+CisgICAgVGhpcyBzZXR0aW5nIGNhbiBhbHNvIGJlIGNoYW5nZWQgd2l0aCB0aGUKKyAgICA8cmVmIGlkPSJjb21tYW5kLUFUVFJCTElOSyIgbmFtZT0iQVRUUkJMSU5LIj4gY29tbWFuZC4KKyAgPHRhZz5BdHRyaWJ1dGVzIFZpc2libGUgVGltZTxsYWJlbCBpZD0icHJlZmVyZW5jZS1hdHRyaWJ1dGVzLXZpc2libGUtdGltZSI+PC90YWc+CisgICAgV2hlbiB0aGUgaGlnaGxpZ2h0ZWQgY2hhcmFjdGVyIHVuZGVybGluZSBpcyB0byBiZSBibGlua2VkLAorICAgIHRoaXMgc2V0dGluZyBzcGVjaWZpZXMgdGhlIGxlbmd0aCBvZiB0aW1lCisgICAgKHNlZSB0aGUgbm90ZSBvbiA8cmVmIGlkPSJ0aW1lLXNldHRpbmdzIiBuYW1lPSJ0aW1lIHNldHRpbmdzIj4gYmVsb3cpCisgICAgZHVyaW5nIGVhY2ggY3ljbGUgdGhhdCBpdCBpcyB0byBiZSB2aXNpYmxlLgorICAgIFRoZSBpbml0aWFsIHNldHRpbmcgaXMgPHR0LzIwLy4KKyAgPHRhZz5BdHRyaWJ1dGVzIEludmlzaWJsZSBUaW1lPGxhYmVsIGlkPSJwcmVmZXJlbmNlLWF0dHJpYnV0ZXMtaW52aXNpYmxlLXRpbWUiPjwvdGFnPgorICAgIFdoZW4gdGhlIGhpZ2hsaWdodGVkIGNoYXJhY3RlciB1bmRlcmxpbmUgaXMgdG8gYmUgYmxpbmtlZCwKKyAgICB0aGlzIHNldHRpbmcgc3BlY2lmaWVzIHRoZSBsZW5ndGggb2YgdGltZQorICAgIChzZWUgdGhlIG5vdGUgb24gPHJlZiBpZD0idGltZS1zZXR0aW5ncyIgbmFtZT0idGltZSBzZXR0aW5ncyI+IGJlbG93KQorICAgIGR1cmluZyBlYWNoIGN5Y2xlIHRoYXQgaXQgaXMgdG8gYmUgaW52aXNpYmxlLgorICAgIFRoZSBpbml0aWFsIHNldHRpbmcgaXMgPHR0LzYwLy4KKyAgPHRhZz5CbGlua2luZyBDYXBpdGFsczxsYWJlbCBpZD0icHJlZmVyZW5jZS1ibGlua2luZy1jYXBpdGFscyI+PC90YWc+CisgICAgV2hlbiBkaXNwbGF5aW5nIHNjcmVlbiBjb250ZW50CisgICAgKHNlZSB0aGUgPHJlZiBpZD0iY29tbWFuZC1ESVNQTUQiIG5hbWU9IkRJU1BNRCI+IGNvbW1hbmQpOgorICAgIDxkZXNjcmlwPgorICAgICAgPHRhZy9Oby8KKyAgICAgICAgTGVhdmUgY2FwaXRhbCBsZXR0ZXJzIHZpc2libGUgYWxsIHRoZSB0aW1lLgorICAgICAgPHRhZy9ZZXMvCisgICAgICAgIE1ha2UgY2FwaXRhbCBsZXR0ZXJzIGFsdGVybmF0ZWx5IHZpc2libGUgYW5kIGludmlzaWJsZQorICAgICAgICBhY2NvcmRpbmcgdG8gYSBwcmVkZWZpbmVkIGludGVydmFsLgorICAgIDwvZGVzY3JpcD4KKyAgICBUaGlzIHNldHRpbmcgY2FuIGFsc28gYmUgY2hhbmdlZCB3aXRoIHRoZQorICAgIDxyZWYgaWQ9ImNvbW1hbmQtQ0FQQkxJTksiIG5hbWU9IkNBUEJMSU5LIj4gY29tbWFuZC4KKyAgPHRhZz5DYXBpdGFscyBWaXNpYmxlIFRpbWU8bGFiZWwgaWQ9InByZWZlcmVuY2UtY2FwaXRhbHMtdmlzaWJsZS10aW1lIj48L3RhZz4KKyAgICBXaGVuIGNhcGl0YWwgbGV0dGVycyBhcmUgdG8gYmUgYmxpbmtlZCwKKyAgICB0aGlzIHNldHRpbmcgc3BlY2lmaWVzIHRoZSBsZW5ndGggb2YgdGltZQorICAgIChzZWUgdGhlIG5vdGUgb24gPHJlZiBpZD0idGltZS1zZXR0aW5ncyIgbmFtZT0idGltZSBzZXR0aW5ncyI+IGJlbG93KQorICAgIGR1cmluZyBlYWNoIGN5Y2xlIHRoYXQgdGhleSdyZSB0byBiZSB2aXNpYmxlLgorICAgIFRoZSBpbml0aWFsIHNldHRpbmcgaXMgPHR0LzYwLy4KKyAgPHRhZz5DYXBpdGFscyBJbnZpc2libGUgVGltZTxsYWJlbCBpZD0icHJlZmVyZW5jZS1jYXBpdGFscy1pbnZpc2libGUtdGltZSI+PC90YWc+CisgICAgV2hlbiBjYXBpdGFsIGxldHRlcnMgYXJlIHRvIGJlIGJsaW5rZWQsCisgICAgdGhpcyBzZXR0aW5nIHNwZWNpZmllcyB0aGUgbGVuZ3RoIG9mIHRpbWUKKyAgICAoc2VlIHRoZSBub3RlIG9uIDxyZWYgaWQ9InRpbWUtc2V0dGluZ3MiIG5hbWU9InRpbWUgc2V0dGluZ3MiPiBiZWxvdykKKyAgICBkdXJpbmcgZWFjaCBjeWNsZSB0aGF0IHRoZXkncmUgdG8gYmUgaW52aXNpYmxlLgorICAgIFRoZSBpbml0aWFsIHNldHRpbmcgaXMgPHR0LzIwLy4KKyAgPHRhZz5CcmFpbGxlIEZpcm1uZXNzPGxhYmVsIGlkPSJwcmVmZXJlbmNlLWJyYWlsbGUtZmlybW5lc3MiPjwvdGFnPgorICAgIEFkanVzdCB0aGUgZmlybW5lc3MgKG9yIHN0aWZmbmVzcykgb2YgdGhlIGJyYWlsbGUgZG90cy4KKyAgICBJdCBjYW4gYmUgc2V0IHRvOgorICAgIDxpdGVtaXplPgorICAgICAgPGl0ZW0+TWF4aW11bQorICAgICAgPGl0ZW0+SGlnaAorICAgICAgPGl0ZW0+TWVkaXVtCisgICAgICA8aXRlbT5Mb3cKKyAgICAgIDxpdGVtPk1pbmltdW0KKyAgICA8L2l0ZW1pemU+CisgICAgVGhpcyBwcmVmZXJlbmNlIGlzIG9ubHkgYXZhaWxhYmxlIGlmIGEgZHJpdmVyIHdoaWNoIHN1cHBvcnRzIGl0IGlzIGJlaW5nIHVzZWQuCisgICAgVGhlIGluaXRpYWwgc2V0dGluZyBpcyA8dHQvTWVkaXVtLy4KKyAgPHRhZz5CcmFpbGxlIFNlbnNpdGl2aXR5PGxhYmVsIGlkPSJwcmVmZXJlbmNlLWJyYWlsbGUtc2Vuc2l0aXZpdHkiPjwvdGFnPgorICAgIEFkanVzdCB0aGUgc2Vuc2l0aXZpdHkgb2YgdGhlIGJyYWlsbGUgZG90cyB0byB0b3VjaC4KKyAgICBJdCBjYW4gYmUgc2V0IHRvOgorICAgIDxpdGVtaXplPgorICAgICAgPGl0ZW0+TWF4aW11bQorICAgICAgPGl0ZW0+SGlnaAorICAgICAgPGl0ZW0+TWVkaXVtCisgICAgICA8aXRlbT5Mb3cKKyAgICAgIDxpdGVtPk1pbmltdW0KKyAgICA8L2l0ZW1pemU+CisgICAgVGhpcyBwcmVmZXJlbmNlIGlzIG9ubHkgYXZhaWxhYmxlIGlmIGEgZHJpdmVyIHdoaWNoIHN1cHBvcnRzIGl0IGlzIGJlaW5nIHVzZWQuCisgICAgVGhlIGluaXRpYWwgc2V0dGluZyBpcyA8dHQvTWVkaXVtLy4KKyAgPHRhZz5XaW5kb3cgRm9sbG93cyBQb2ludGVyPGxhYmVsIGlkPSJwcmVmZXJlbmNlLXdpbmRvdy1mb2xsb3dzLXBvaW50ZXIiPjwvdGFnPgorICAgIFdoZW4gbW92aW5nIHRoZSBwb2ludGVyIGRldmljZSAobW91c2UpOgorICAgIDxkZXNjcmlwPgorICAgICAgPHRhZy9Oby8KKyAgICAgICAgRG9uJ3QgZHJhZyB0aGUgYnJhaWxsZSB3aW5kb3cuCisgICAgICA8dGFnL1llcy8KKyAgICAgICAgRHJhZyB0aGUgYnJhaWxsZSB3aW5kb3cuCisgICAgPC9kZXNjcmlwPgorICAgIFRoaXMgcHJlZmVyZW5jZSBpcyBvbmx5IHByZXNlbnRlZCBpZiB0aGUKKyAgICA8cmVmIGlkPSJidWlsZC1ncG0iIG5hbWU9Ii0tZW5hYmxlLWdwbSI+IGJ1aWxkIG9wdGlvbiB3YXMgc3BlY2lmaWVkLgorICA8dGFnPkhpZ2hsaWdodCBXaW5kb3c8bGFiZWwgaWQ9InByZWZlcmVuY2UtaGlnaGxpZ2h0LXdpbmRvdyI+PC90YWc+CisgICAgV2hlbiBtb3ZpbmcgdGhlIGJyYWlsbGUgd2luZG93OgorICAgIDxkZXNjcmlwPgorICAgICAgPHRhZy9Oby8KKyAgICAgICAgRG9uJ3QgaGlnaGxpZ2h0IHRoZSBuZXcgc2NyZWVuIGFyZWEuCisgICAgICA8dGFnL1llcy8KKyAgICAgICAgSGlnaGxpZ2h0IHRoZSBuZXcgc2NyZWVuIGFyZWEuCisgICAgPC9kZXNjcmlwPgorICAgIFRoaXMgZmVhdHVyZSBlbmFibGVzIGEgc2lnaHRlZCBvYnNlcnZlciB0byBzZWUgd2hlcmUgdGhlIGJyYWlsbGUgd2luZG93IGlzLAorICAgIGFuZCwgdGhlcmVmb3JlLCB0byBrbm93IHdoYXQgdGhlIGJyYWlsbGUgdXNlciBpcyByZWFkaW5nLgorICAgIEFueSBtb3Rpb24gb2YgdGhlIGJyYWlsbGUgd2luZG93IChtYW51YWwsIGN1cnNvciB0cmFja2luZywgZXRjLiksCisgICAgb3RoZXIgdGhhbiB3aGVuIGl0IG1vdmVzIGluIHJlc3BvbnNlIHRvIHBvaW50ZXIgKG1vdXNlKSBtb3Rpb24KKyAgICAoc2VlIHRoZSA8cmVmIGlkPSJwcmVmZXJlbmNlLXdpbmRvdy1mb2xsb3dzLXBvaW50ZXIiIG5hbWU9IldpbmRvdyBGb2xsb3dzIFBvaW50ZXIiPiBwcmVmZXJlbmNlKSwKKyAgICBjYXVzZXMgdGhlIGFyZWEgb2YgdGhlIHNjcmVlbiBjb3JyZXNwb25kaW5nIHRvCisgICAgdGhlIG5ldyBsb2NhdGlvbiBvZiB0aGUgYnJhaWxsZSB3aW5kb3cgdG8gYmUgaGlnaGxpZ2h0ZWQuCisgICAgSWYgdGhlIDxyZWYgaWQ9InByZWZlcmVuY2Utc2hvdy1hdHRyaWJ1dGVzIiBuYW1lPSJTaG93IEF0dHJpYnV0ZXMiPiBwcmVmZXJlbmNlIGlzIGVuYWJsZWQKKyAgICB0aGVuIG9ubHkgdGhlIGNoYXJhY3RlciBjb3JyZXNwb25kaW5nIHRvIHRoZSB1cHBlci1sZWZ0IGNvcm5lciBvZiB0aGUgYnJhaWxsZSB3aW5kb3cgaXMgaGlnaGxpZ2h0ZWQuCisgIDx0YWc+QWxlcnQgVHVuZXM8bGFiZWwgaWQ9InByZWZlcmVuY2UtYWxlcnQtdHVuZXMiPjwvdGFnPgorICAgIFdoZW5ldmVyIGEgc2lnbmlmaWNhbnQgZXZlbnQgd2l0aCBhbiBhc3NvY2lhdGVkIHR1bmUgb2NjdXJzCisgICAgKHNlZSA8cmVmIGlkPSJ0dW5lcyIgbmFtZT0iQWxlcnQgVHVuZXMiPik6CisgICAgPGRlc2NyaXA+CisgICAgICA8dGFnL05vLworICAgICAgICBEb24ndCBwbGF5IHRoZSB0dW5lLgorICAgICAgPHRhZy9ZZXMvCisgICAgICAgIFBsYXkgdGhlIHR1bmUuCisgICAgPC9kZXNjcmlwPgorICAgIFRoaXMgc2V0dGluZyBjYW4gYWxzbyBiZSBjaGFuZ2VkIHdpdGggdGhlCisgICAgPHJlZiBpZD0iY29tbWFuZC1UVU5FUyIgbmFtZT0iVFVORVMiPiBjb21tYW5kLgorICAgIFRoZSBpbml0aWFsIHNldHRpbmcgaXMgPHR0L1llcy8uCisgIDx0YWc+VHVuZSBEZXZpY2U8bGFiZWwgaWQ9InByZWZlcmVuY2UtdHVuZS1kZXZpY2UiPjwvdGFnPgorICAgIFBsYXkgYWxlcnQgdHVuZXMgdmlhOgorICAgIDxkZXNjcmlwPgorICAgICAgPHRhZy9CZWVwZXIvCisgICAgICAgIFRoZSBpbnRlcm5hbCBiZWVwZXIgKGNvbnNvbGUgdG9uZSBnZW5lcmF0b3IpLgorICAgICAgICBUaGlzIHNldHRpbmcgaXMgc3VwcG9ydGVkCisgICAgICAgIG9uIExpbnV4LAorICAgICAgICBvbiBPcGVuQlNELAorICAgICAgICBvbiBGcmVlQlNELAorICAgICAgICBhbmQgb24gTmV0QlNELgorICAgICAgICBJdCdzIGFsd2F5cyBzYWZlIHRvIHVzZSwKKyAgICAgICAgYWx0aG91Z2ggaXQgbWF5IGJlIHNvbWV3aGF0IHNvZnQuCisgICAgICAgIFRoaXMgZGV2aWNlIGlzbid0IGF2YWlsYWJsZSBpZiB0aGUKKyAgICAgICAgPHJlZiBpZD0iYnVpbGQtYmVlcGVyLXN1cHBvcnQiIG5hbWU9Ii0tZGlzYWJsZS1iZWVwZXItc3VwcG9ydCI+IGJ1aWxkIG9wdGlvbiB3YXMgc3BlY2lmaWVkLgorICAgICAgPHRhZy9QQ00vCisgICAgICAgIFRoZSBkaWdpdGFsIGF1ZGlvIGludGVyZmFjZSBvbiB0aGUgc291bmQgY2FyZC4KKyAgICAgICAgVGhpcyBzZXR0aW5nIGlzIHN1cHBvcnRlZAorICAgICAgICBvbiBMaW51eCAodmlhIDx0dD4vZGV2L2RzcDwvPiksCisgICAgICAgIG9uIFNvbGFyaXMgKHZpYSA8dHQ+L2Rldi9hdWRpbzwvPiksCisgICAgICAgIG9uIE9wZW5CU0QgKHZpYSA8dHQ+L2Rldi9hdWRpbzA8Lz4pLAorICAgICAgICBvbiBGcmVlQlNEICh2aWEgPHR0Pi9kZXYvZHNwPC8+KSwKKyAgICAgICAgYW5kIG9uIE5ldEJTRCAodmlhIDx0dD4vZGV2L2F1ZGlvMDwvPikuCisgICAgICAgIEl0IGRvZXNuJ3Qgd29yayB3aGVuIHRoaXMgZGV2aWNlIGlzIGFscmVhZHkgYmVpbmcgdXNlZAorICAgICAgICBieSBhbm90aGVyIGFwcGxpY2F0aW9uLgorICAgICAgICBUaGlzIGRldmljZSBpc24ndCBhdmFpbGFibGUgaWYgdGhlCisgICAgICAgIDxyZWYgaWQ9ImJ1aWxkLXBjbS1zdXBwb3J0IiBuYW1lPSItLWRpc2FibGUtcGNtLXN1cHBvcnQiPiBidWlsZCBvcHRpb24gd2FzIHNwZWNpZmllZC4KKyAgICAgIDx0YWcvTUlESS8KKyAgICAgICAgVGhlIE11c2ljYWwgSW5zdHJ1bWVudCBEaWdpdGFsIEludGVyZmFjZSBvbiB0aGUgc291bmQgY2FyZAorICAgICAgICBUaGlzIHNldHRpbmcgaXMgc3VwcG9ydGVkCisgICAgICAgIG9uIExpbnV4ICh2aWEgPHR0Pi9kZXYvc2VxdWVuY2VyPC8+KS4KKyAgICAgICAgSXQgZG9lc24ndCB3b3JrIHdoZW4gdGhpcyBkZXZpY2UgaXMgYWxyZWFkeSBiZWluZyB1c2VkCisgICAgICAgIGJ5IGFub3RoZXIgYXBwbGljYXRpb24uCisgICAgICAgIFRoaXMgZGV2aWNlIGlzbid0IGF2YWlsYWJsZSBpZiB0aGUKKyAgICAgICAgPHJlZiBpZD0iYnVpbGQtbWlkaS1zdXBwb3J0IiBuYW1lPSItLWRpc2FibGUtbWlkaS1zdXBwb3J0Ij4gYnVpbGQgb3B0aW9uIHdhcyBzcGVjaWZpZWQuCisgICAgICA8dGFnL0ZNLworICAgICAgICBUaGUgRk0gc3ludGhlc2l6ZXIgb24gYW4KKyAgICAgICAgQWRMaWIsIE9QTDMsIFNvdW5kIEJsYXN0ZXIsIG9yIGVxdWl2YWxlbnQgc291bmQgY2FyZC4KKyAgICAgICAgVGhpcyBzZXR0aW5nIGlzIHN1cHBvcnRlZAorICAgICAgICBvbiBMaW51eC4KKyAgICAgICAgSXQgd29ya3MgZXZlbiBpZiB0aGUgRk0gc3ludGhlc2l6ZXIKKyAgICAgICAgaXMgYWxyZWFkeSBiZWluZyB1c2VkIGJ5IGFub3RoZXIgYXBwbGljYXRpb24uCisgICAgICAgIFRoZSByZXN1bHRzIGFyZSB1bnByZWRpY3RhYmxlLCBhbmQgcG90ZW50aWFsbHkgbm90IHZlcnkgZ29vZCwKKyAgICAgICAgaWYgaXQncyB1c2VkIHdpdGggYSBzb3VuZCBjYXJkIHdoaWNoIGRvZXNuJ3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCisgICAgICAgIFRoaXMgZGV2aWNlIGlzbid0IGF2YWlsYWJsZSBpZiB0aGUKKyAgICAgICAgPHJlZiBpZD0iYnVpbGQtZm0tc3VwcG9ydCIgbmFtZT0iLS1kaXNhYmxlLWZtLXN1cHBvcnQiPiBidWlsZCBvcHRpb24gd2FzIHNwZWNpZmllZC4KKyAgICA8L2Rlc2NyaXA+CisgICAgVGhlIGluaXRpYWwgc2V0dGluZyBpcyA8dHQvQmVlcGVyLyBvbiB0aG9zZSBwbGF0Zm9ybXMgd2hpY2ggc3VwcG9ydCBpdCwKKyAgICBhbmQgPHR0L1BDTS8gb24gdGhvc2UgcGxhdGZvcm1zIHdoaWNoIGRvbid0LgorICA8dGFnPlBDTSBWb2x1bWU8bGFiZWwgaWQ9InByZWZlcmVuY2UtcGNtLXZvbHVtZSI+PC90YWc+CisgICAgSWYgdGhlIGRpZ2l0YWwgYXVkaW8gaW50ZXJmYWNlIG9mIHRoZSBzb3VuZCBjYXJkCisgICAgaXMgYmVpbmcgdXNlZCB0byBwbGF5IHRoZSBhbGVydCB0dW5lcywKKyAgICB0aGlzIHNldHRpbmcgc3BlY2lmaWVzIHRoZSBsb3VkbmVzcworICAgIChhcyBhIHBlcmNlbnRhZ2Ugb2YgdGhlIG1heGltdW0pCisgICAgYXQgd2hpY2ggdGhleSBhcmUgdG8gYmUgcGxheWVkLgorICAgIFRoZSBpbml0aWFsIHNldHRpbmcgaXMgPHR0LzcwLy4KKyAgPHRhZz5NSURJIFZvbHVtZTxsYWJlbCBpZD0icHJlZmVyZW5jZS1taWRpLXZvbHVtZSI+PC90YWc+CisgICAgSWYgdGhlIE11c2ljYWwgSW5zdHJ1bWVudCBEaWdpdGFsIEludGVyZmFjZSAoTUlESSkgb2YgdGhlIHNvdW5kIGNhcmQKKyAgICBpcyBiZWluZyB1c2VkIHRvIHBsYXkgdGhlIGFsZXJ0IHR1bmVzLAorICAgIHRoaXMgc2V0dGluZyBzcGVjaWZpZXMgdGhlIGxvdWRuZXNzCisgICAgKGFzIGEgcGVyY2VudGFnZSBvZiB0aGUgbWF4aW11bSkKKyAgICBhdCB3aGljaCB0aGV5IGFyZSB0byBiZSBwbGF5ZWQuCisgICAgVGhlIGluaXRpYWwgc2V0dGluZyBpcyA8dHQvNzAvLgorICA8dGFnPk1JREkgSW5zdHJ1bWVudDxsYWJlbCBpZD0icHJlZmVyZW5jZS1taWRpLWluc3RydW1lbnQiPjwvdGFnPgorICAgIElmIHRoZSBNdXNpY2FsIEluc3RydW1lbnQgRGlnaXRhbCBJbnRlcmZhY2UgKE1JREkpIG9mIHRoZSBzb3VuZCBjYXJkCisgICAgaXMgYmVpbmcgdXNlZCB0byBwbGF5IHRoZSBhbGVydCB0dW5lcywKKyAgICB0aGlzIHNldHRpbmcgc3BlY2lmaWVzIHdoaWNoIGluc3RydW1lbnQgaXMgdG8gYmUgdXNlZAorICAgIChzZWUgdGhlIDxyZWYgaWQ9Im1pZGkiIG5hbWU9Ik1JREkgSW5zdHJ1bWVudCBUYWJsZSI+KS4KKyAgICBUaGUgaW5pdGlhbCBzZXR0aW5nIGlzIDx0dC9BY291c3RpYyBHcmFuZCBQaWFuby8uCisgIDx0YWc+Rk0gVm9sdW1lPGxhYmVsIGlkPSJwcmVmZXJlbmNlLWZtLXZvbHVtZSI+PC90YWc+CisgICAgSWYgdGhlIEZNIHN5bnRoZXNpemVyIG9mIHRoZSBzb3VuZCBjYXJkCisgICAgaXMgYmVpbmcgdXNlZCB0byBwbGF5IHRoZSBhbGVydCB0dW5lcywKKyAgICB0aGlzIHNldHRpbmcgc3BlY2lmaWVzIHRoZSBsb3VkbmVzcworICAgIChhcyBhIHBlcmNlbnRhZ2Ugb2YgdGhlIG1heGltdW0pCisgICAgYXQgd2hpY2ggdGhleSBhcmUgdG8gYmUgcGxheWVkLgorICAgIFRoZSBpbml0aWFsIHNldHRpbmcgaXMgPHR0LzcwLy4KKyAgPHRhZz5BbGVydCBEb3RzPGxhYmVsIGlkPSJwcmVmZXJlbmNlLWFsZXJ0LWRvdHMiPjwvdGFnPgorICAgIFdoZW5ldmVyIGEgc2lnbmlmaWNhbnQgZXZlbnQgd2l0aCBhbiBhc3NvY2lhdGVkIGRvdCBwYXR0ZXJuIG9jY3VycworICAgIChzZWUgPHJlZiBpZD0idHVuZXMiIG5hbWU9IkFsZXJ0IFR1bmVzIj4pOgorICAgIDxkZXNjcmlwPgorICAgICAgPHRhZy9Oby8KKyAgICAgICAgRG9uJ3QgZGlzcGxheSB0aGUgZG90IHBhdHRlcm4uCisgICAgICA8dGFnL1llcy8KKyAgICAgICAgQnJpZWZseSBkaXNwbGF5IHRoZSBkb3QgcGF0dGVybi4KKyAgICA8L2Rlc2NyaXA+CisgICAgSWYgYWxlcnQgdHVuZXMgYXJlIHRvIGJlIHBsYXllZAorICAgIChzZWUgdGhlIDxyZWYgaWQ9ImNvbW1hbmQtVFVORVMiIG5hbWU9IlRVTkVTIj4gY29tbWFuZAorICAgIGFuZCB0aGUgPHJlZiBpZD0icHJlZmVyZW5jZS1hbGVydC10dW5lcyIgbmFtZT0iQWxlcnQgVHVuZXMiPiBwcmVmZXJlbmNlKSwKKyAgICBpZiBhIHR1bmUgaGFzIGJlZW4gYXNzb2NpYXRlZCB3aXRoIHRoZSBldmVudCwKKyAgICBhbmQgaWYgdGhlIHNlbGVjdGVkIHR1bmUgZGV2aWNlIGNhbiBiZSBvcGVuZWQsCisgICAgdGhlbiwgcmVnYXJkbGVzcyBvZiB0aGUgc2V0dGluZyBvZiB0aGlzIHByZWZlcmVuY2UsIHRoZSBkb3QgcGF0dGVybiBpc24ndCBkaXNwbGF5ZWQuCisgIDx0YWc+QWxlcnQgTWVzc2FnZXM8bGFiZWwgaWQ9InByZWZlcmVuY2UtYWxlcnQtbWVzc2FnZXMiPjwvdGFnPgorICAgIFdoZW5ldmVyIGEgc2lnbmlmaWNhbnQgZXZlbnQgd2l0aCBhbiBhc3NvY2lhdGVkIG1lc3NhZ2Ugb2NjdXJzCisgICAgKHNlZSA8cmVmIGlkPSJ0dW5lcyIgbmFtZT0iQWxlcnQgVHVuZXMiPik6CisgICAgPGRlc2NyaXA+CisgICAgICA8dGFnL05vLworICAgICAgICBEb24ndCBkaXNwbGF5IHRoZSBtZXNzYWdlLgorICAgICAgPHRhZy9ZZXMvCisgICAgICAgIERpc3BsYXkgdGhlIG1lc3NhZ2UuCisgICAgPC9kZXNjcmlwPgorICAgIElmIGFsZXJ0IHR1bmVzIGFyZSB0byBiZSBwbGF5ZWQKKyAgICAoc2VlIHRoZSA8cmVmIGlkPSJjb21tYW5kLVRVTkVTIiBuYW1lPSJUVU5FUyI+IGNvbW1hbmQKKyAgICBhbmQgdGhlIDxyZWYgaWQ9InByZWZlcmVuY2UtYWxlcnQtdHVuZXMiIG5hbWU9IkFsZXJ0IFR1bmVzIj4gcHJlZmVyZW5jZSksCisgICAgaWYgYSB0dW5lIGhhcyBiZWVuIGFzc29jaWF0ZWQgd2l0aCB0aGUgZXZlbnQsCisgICAgYW5kIGlmIHRoZSBzZWxlY3RlZCB0dW5lIGRldmljZSBjYW4gYmUgb3BlbmVkLAorICAgIG9yIGlmIGFsZXJ0IGRvdCBwYXR0ZXJucyBhcmUgdG8gYmUgZGlzcGxheWVkCisgICAgKHNlZSB0aGUgPHJlZiBpZD0icHJlZmVyZW5jZS1hbGVydC1kb3RzIiBuYW1lPSJBbGVydCBEb3RzIj4gcHJlZmVyZW5jZSkKKyAgICBhbmQgaWYgYSBkb3QgcGF0dGVybiBoYXMgYmVlbiBhc3NvY2lhdGVkIHdpdGggdGhlIGV2ZW50LAorICAgIHRoZW4sIHJlZ2FyZGxlc3Mgb2YgdGhlIHNldHRpbmcgb2YgdGhpcyBwcmVmZXJlbmNlLCB0aGUgbWVzc2FnZSBpc24ndCBkaXNwbGF5ZWQuCisgIDx0YWc+U2F5LUxpbmUgTW9kZTxsYWJlbCBpZD0icHJlZmVyZW5jZS1zYXlsaW5lLW1vZGUiPjwvdGFnPgorICAgIFdoZW4gdXNpbmcgdGhlIDxyZWYgaWQ9ImNvbW1hbmQtU0FZX0xJTkUiIG5hbWU9IlNBWV9MSU5FIj4gY29tbWFuZDoKKyAgICA8ZGVzY3JpcD4KKyAgICAgIDx0YWcvSW1tZWRpYXRlLworICAgICAgICBEaXNjYXJkIHBlbmRpbmcgc3BlZWNoLgorICAgICAgPHRhZy9FbnF1ZXVlLworICAgICAgICBEb24ndCBkaXNjYXJkIHBlbmRpbmcgc3BlZWNoLgorICAgIDwvZGVzY3JpcD4KKyAgICBUaGUgaW5pdGlhbCBzZXR0aW5nIGlzIDx0dC9JbW1lZGlhdGUvLgorICA8dGFnPkF1dG9zcGVhazxsYWJlbCBpZD0icHJlZmVyZW5jZS1hdXRvc3BlYWsiPjwvdGFnPgorICAgIDxkZXNjcmlwPgorICAgICAgPHRhZy9Oby8KKyAgICAgICAgT25seSBzcGVhayB3aGVuIGV4cGxpY2l0bHkgcmVxdWVzdGVkIHRvIGRvIHNvLgorICAgICAgPHRhZy9ZZXMvCisgICAgICAgIEF1dG9tYXRpY2FsbHkgc3BlYWs6CisgICAgICAgIDxpdGVtaXplPgorICAgICAgICAgIDxpdGVtPnRoZSBuZXcgbGluZSB3aGVuIHRoZSBicmFpbGxlIHdpbmRvdyBpcyBtb3ZlZCB2ZXJ0aWNhbGx5LgorICAgICAgICAgIDxpdGVtPmNoYXJhY3RlcnMgd2hpY2ggYXJlIGVudGVyZWQgb3IgZGVsZXRlZC4KKyAgICAgICAgICA8aXRlbT50aGUgY2hhcmFjdGVyIHRvIHdoaWNoIHRoZSBjdXJzb3IgaXMgbW92ZWQuCisgICAgICAgIDwvaXRlbWl6ZT4KKyAgICA8L2Rlc2NyaXA+CisgICAgVGhpcyBzZXR0aW5nIGNhbiBhbHNvIGJlIGNoYW5nZWQgd2l0aCB0aGUKKyAgICA8cmVmIGlkPSJjb21tYW5kLUFVVE9TUEVBSyIgbmFtZT0iQVVUT1NQRUFLIj4gY29tbWFuZC4KKyAgICBUaGUgaW5pdGlhbCBzZXR0aW5nIGlzIDx0dC9Oby8uCisgIDx0YWc+U3BlZWNoIFJhdGU8bGFiZWwgaWQ9InByZWZlcmVuY2Utc3BlZWNoLXJhdGUiPjwvdGFnPgorICAgIEFkanVzdCB0aGUgc3BlZWNoIHJhdGUKKyAgICAoPHR0LzAvIGlzIHRoZSBzbG93ZXN0LCA8dHQvMjAvIGlzIHRoZSBmYXN0ZXN0KS4KKyAgICBUaGlzIHByZWZlcmVuY2UgaXMgb25seSBhdmFpbGFibGUgaWYgYSBkcml2ZXIgd2hpY2ggc3VwcG9ydHMgaXQgaXMgYmVpbmcgdXNlZC4KKyAgICBUaGlzIHNldHRpbmcgY2FuIGFsc28gYmUgY2hhbmdlZCB3aXRoCisgICAgdGhlIDxyZWYgaWQ9ImNvbW1hbmQtU0FZX1NMT1dFUi1TQVlfRkFTVEVSIiBuYW1lPSJTQVlfU0xPV0VSL1NBWV9GQVNURVIiPiBjb21tYW5kcy4KKyAgICBUaGUgaW5pdGlhbCBzZXR0aW5nIGlzIDx0dC8xMC8uCisgIDx0YWc+U3BlZWNoIFZvbHVtZTxsYWJlbCBpZD0icHJlZmVyZW5jZS1zcGVlY2gtdm9sdW1lIj48L3RhZz4KKyAgICBBZGp1c3QgdGhlIHNwZWVjaCB2b2x1bWUKKyAgICAoPHR0LzAvIGlzIHRoZSBzb2Z0ZXN0LCA8dHQvMjAvIGlzIHRoZSBsb3VkZXN0KS4KKyAgICBUaGlzIHByZWZlcmVuY2UgaXMgb25seSBhdmFpbGFibGUgaWYgYSBkcml2ZXIgd2hpY2ggc3VwcG9ydHMgaXQgaXMgYmVpbmcgdXNlZC4KKyAgICBUaGlzIHNldHRpbmcgY2FuIGFsc28gYmUgY2hhbmdlZCB3aXRoCisgICAgdGhlIDxyZWYgaWQ9ImNvbW1hbmQtU0FZX1NPRlRFUi1TQVlfTE9VREVSIiBuYW1lPSJTQVlfU09GVEVSL1NBWV9MT1VERVIiPiBjb21tYW5kcy4KKyAgICBUaGUgaW5pdGlhbCBzZXR0aW5nIGlzIDx0dC8xMC8uCisgIDx0YWc+U3BlZWNoIFBpdGNoPGxhYmVsIGlkPSJwcmVmZXJlbmNlLXNwZWVjaC1waXRjaCI+PC90YWc+CisgICAgQWRqdXN0IHRoZSBzcGVlY2ggcGl0Y2gKKyAgICAoPHR0LzAvIGlzIHRoZSBsb3dlc3QsIDx0dC8yMC8gaXMgdGhlIGhpZ2hlc3QpLgorICAgIFRoaXMgcHJlZmVyZW5jZSBpcyBvbmx5IGF2YWlsYWJsZSBpZiBhIGRyaXZlciB3aGljaCBzdXBwb3J0cyBpdCBpcyBiZWluZyB1c2VkLgorICAgIFRoZSBpbml0aWFsIHNldHRpbmcgaXMgPHR0LzEwLy4KKyAgPHRhZz5TcGVlY2ggUHVuY3R1YXRpb248bGFiZWwgaWQ9InByZWZlcmVuY2Utc3BlZWNoLXB1bmN0dWF0aW9uIj48L3RhZz4KKyAgICBBZGp1c3QgdGhlIGFtb3VudCBvZiBwdW5jdHVhdGlvbiB3aGljaCBpcyBzcG9rZW4uCisgICAgSXQgY2FuIGJlIHNldCB0bzoKKyAgICA8aXRlbWl6ZT4KKyAgICAgIDxpdGVtPk5vbmUKKyAgICAgIDxpdGVtPlNvbWUKKyAgICAgIDxpdGVtPkFsbAorICAgIDwvaXRlbWl6ZT4KKyAgICBUaGlzIHByZWZlcmVuY2UgaXMgb25seSBhdmFpbGFibGUgaWYgYSBkcml2ZXIgd2hpY2ggc3VwcG9ydHMgaXQgaXMgYmVpbmcgdXNlZC4KKyAgICBUaGUgaW5pdGlhbCBzZXR0aW5nIGlzIDx0dC9Tb21lLy4KKyAgPHRhZz5TdGF0dXMgU3R5bGU8bGFiZWwgaWQ9InByZWZlcmVuY2Utc3RhdHVzLXN0eWxlIj48L3RhZz4KKyAgICBUaGlzIHNldHRpbmcgc3BlY2lmaWVzIHRoZSB3YXkgdGhhdCB0aGUgc3RhdHVzIGNlbGxzIGFyZSB0byBiZSB1c2VkLgorICAgIFlvdSBzaG91bGRuJ3Qgbm9ybWFsbHkgbmVlZCB0byBwbGF5IHdpdGggaXQuCisgICAgSXQgZW5hYmxlcyBCUkxUVFkncyBkZXZlbG9wZXJzIHRvIHRlc3Qgc3RhdHVzIGNlbGwgY29uZmlndXJhdGlvbnMKKyAgICBmb3IgYnJhaWxsZSBkaXNwbGF5cyB3aGljaCB0aGV5IGRvbid0IGFjdHVhbGx5IGhhdmUuCisgICAgPGRlc2NyaXA+CisgICAgICA8dGFnL05vbmUvCisgICAgICAgIERvbid0IHVzZSB0aGUgc3RhdHVzIGNlbGxzLgorICAgICAgICBUaGlzIHNldHRpbmcgaXMgYWx3YXlzIHNhZmUsIGJ1dCBpdCdzIGFsc28gcXVpdGUgdXNlbGVzcy4KKyAgICAgIDx0YWcvQWx2YS8KKyAgICAgICAgVGhlIHN0YXR1cyBjZWxscyBjb250YWluOgorICAgICAgICA8ZGVzY3JpcD4KKyAgICAgICAgICA8dGFnLzEvCisgICAgICAgICAgICBUaGUgbG9jYXRpb24gb2YgdGhlIGN1cnNvciAoc2VlIGJlbG93KS4KKyAgICAgICAgICA8dGFnLzIvCisgICAgICAgICAgICBUaGUgbG9jYXRpb24gb2YgdGhlIHRvcC1sZWZ0IGNvcm5lciBvZiB0aGUgYnJhaWxsZSB3aW5kb3cgKHNlZSBiZWxvdykuCisgICAgICAgICAgPHRhZy8zLworICAgICAgICAgICAgQSBsZXR0ZXIgaW5kaWNhdGluZyBCUkxUVFkncyBzdGF0ZS4KKyAgICAgICAgICAgIEluIG9yZGVyIG9mIHByZWNlZGVuY2U6CisgICAgICAgICAgICA8ZGVzY3JpcD4KKyAgICAgICAgICAgICAgPHRhZy9hLworICAgICAgICAgICAgICAgIFNjcmVlbiBhdHRyaWJ1dGVzIGFyZSBiZWluZyBzaG93bgorICAgICAgICAgICAgICAgIChzZWUgdGhlIDxyZWYgaWQ9ImNvbW1hbmQtRElTUE1EIiBuYW1lPSJESVNQTUQiPiBjb21tYW5kKS4KKyAgICAgICAgICAgICAgPHRhZy9mLworICAgICAgICAgICAgICAgIFRoZSBzY3JlZW4gaW1hZ2UgaXMgZnJvemVuCisgICAgICAgICAgICAgICAgKHNlZSB0aGUgPHJlZiBpZD0iY29tbWFuZC1GUkVFWkUiIG5hbWU9IkZSRUVaRSI+IGNvbW1hbmQpLgorICAgICAgICAgICAgICA8dGFnL2YvCisgICAgICAgICAgICAgICAgVGhlIGN1cnNvciBpcyBiZWluZyB0cmFja2VkCisgICAgICAgICAgICAgICAgKHNlZSB0aGUgPHJlZiBpZD0iY29tbWFuZC1DU1JUUksiIG5hbWU9IkNTUlRSSyI+IGNvbW1hbmQpLgorICAgICAgICAgICAgICA8dGFnPjxlbS9ibGFuay88L3RhZz4KKyAgICAgICAgICAgICAgICBOb3RoaW5nIHNwZWNpYWwuCisgICAgICAgICAgICA8L2Rlc2NyaXA+CisgICAgICAgIDwvZGVzY3JpcD4KKyAgICAgICAgVGhlIGxvY2F0aW9ucyBvZiB0aGUgY3Vyc29yIGFuZCB0aGUgYnJhaWxsZSB3aW5kb3cKKyAgICAgICAgYXJlIHByZXNlbnRlZCBpbiBhbiBpbnRlcmVzdGluZyB3YXkuCisgICAgICAgIERvdHMgMSB0aHJvdWdoIDYgcmVwcmVzZW50IHRoZSBsaW5lIG51bWJlciB3aXRoIGEgbGV0dGVyCisgICAgICAgIGZyb20gPHR0L2EvIChmb3IgMSkgdGhyb3VnaCA8dHQveS8gKGZvciAyNSkuCisgICAgICAgIERvdHMgNyBhbmQgOCAodGhlIGV4dHJhIHR3byBhdCB0aGUgYm90dG9tKQorICAgICAgICByZXByZXNlbnQgdGhlIGhvcml6b250YWwgYnJhaWxsZSB3aW5kb3cgbnVtYmVyIGFzIGZvbGxvd3M6CisgICAgICAgIDxkZXNjcmlwPgorICAgICAgICAgIDx0YWcvTm8gRG90cy9UaGUgZmlyc3QgKGxlZnRtb3N0KSB3aW5kb3cuCisgICAgICAgICAgPHRhZy9Eb3QgNy9UaGUgc2Vjb25kIHdpbmRvdy4KKyAgICAgICAgICA8dGFnL0RvdCA4L1RoZSB0aGlyZCB3aW5kb3cuCisgICAgICAgICAgPHRhZy9Eb3RzIDcgYW5kIDgvVGhlIGZvdXJ0aCB3aW5kb3cuCisgICAgICAgIDwvZGVzY3JpcD4KKyAgICAgICAgSW4gYm90aCBjYXNlcywgdGhlIGluZGljYXRvcnMgd3JhcDoKKyAgICAgICAgbGluZSAyNiBpcyByZXByZXNlbnRlZCBieSB0aGUgbGV0dGVyIDx0dC9hLywgYW5kIHRoZSBmaWZ0aCBob3Jpem9udGFsCisgICAgICAgIGJyYWlsbGUgd2luZG93IGlzIHJlcHJlc2VudGVkIGJ5IG5vIGRvdHMgYXQgdGhlIGJvdHRvbS4KKyAgICAgIDx0YWcvVGllbWFuLworICAgICAgICBUaGUgc3RhdHVzIGNlbGxzIGNvbnRhaW46CisgICAgICAgIDxkZXNjcmlwPgorICAgICAgICAgIDx0YWcvMS0yLworICAgICAgICAgICAgVGhlIGNvbHVtbnMgKGNvdW50aW5nIGZyb20gMSkgb2YgdGhlIGN1cnNvcgorICAgICAgICAgICAgKHNob3duIGluIHRoZSB0b3AgaGFsZiBvZiB0aGUgY2VsbHMpCisgICAgICAgICAgICBhbmQgdGhlIHRvcC1sZWZ0IGNvcm5lciBvZiB0aGUgYnJhaWxsZSB3aW5kb3cKKyAgICAgICAgICAgIChzaG93biBpbiB0aGUgYm90dG9tIGhhbGYgb2YgdGhlIGNlbGxzKS4KKyAgICAgICAgICA8dGFnLzMtNC8KKyAgICAgICAgICAgIFRoZSByb3dzIChjb3VudGluZyBmcm9tIDEpIG9mIHRoZSBjdXJzb3IKKyAgICAgICAgICAgIChzaG93biBpbiB0aGUgdG9wIGhhbGYgb2YgdGhlIGNlbGxzKQorICAgICAgICAgICAgYW5kIHRoZSB0b3AtbGVmdCBjb3JuZXIgb2YgdGhlIGJyYWlsbGUgd2luZG93CisgICAgICAgICAgICAoc2hvd24gaW4gdGhlIGJvdHRvbSBoYWxmIG9mIHRoZSBjZWxscykuCisgICAgICAgICAgPHRhZy81LworICAgICAgICAgICAgRWFjaCBkb3QgaW5kaWNhdGVzIGlmIGEgZmVhdHVyZSBpcyB0dXJuZWQgb24gYXMgZm9sbG93czoKKyAgICAgICAgICAgIDxkZXNjcmlwPgorICAgICAgICAgICAgICA8dGFnL0RvdCAxLworICAgICAgICAgICAgICAgIFRoZSBzY3JlZW4gaW1hZ2UgaXMgZnJvemVuCisgICAgICAgICAgICAgICAgKHNlZSB0aGUgPHJlZiBpZD0iY29tbWFuZC1GUkVFWkUiIG5hbWU9IkZSRUVaRSI+IGNvbW1hbmQpLgorICAgICAgICAgICAgICA8dGFnL0RvdCAyLworICAgICAgICAgICAgICAgIFNjcmVlbiBhdHRyaWJ1dGVzIGFyZSBiZWluZyBkaXNwbGF5ZWQKKyAgICAgICAgICAgICAgICAoc2VlIHRoZSA8cmVmIGlkPSJjb21tYW5kLURJU1BNRCIgbmFtZT0iRElTUE1EIj4gY29tbWFuZCkuCisgICAgICAgICAgICAgIDx0YWcvRG90IDMvCisgICAgICAgICAgICAgICAgQWxlcnQgdHVuZXMgYXJlIGJlaW5nIHBsYXllZAorICAgICAgICAgICAgICAgIChzZWUgdGhlIDxyZWYgaWQ9ImNvbW1hbmQtVFVORVMiIG5hbWU9IlRVTkVTIj4gY29tbWFuZCkuCisgICAgICAgICAgICAgIDx0YWcvRG90IDQvCisgICAgICAgICAgICAgICAgVGhlIGN1cnNvciBpcyBiZWluZyBzaG93bgorICAgICAgICAgICAgICAgIChzZWUgdGhlIDxyZWYgaWQ9ImNvbW1hbmQtQ1NSVklTIiBuYW1lPSJDU1JWSVMiPiBjb21tYW5kKS4KKyAgICAgICAgICAgICAgPHRhZy9Eb3QgNS8KKyAgICAgICAgICAgICAgICBUaGUgY3Vyc29yIGlzIGEgc29saWQgYmxvY2sKKyAgICAgICAgICAgICAgICAoc2VlIHRoZSA8cmVmIGlkPSJjb21tYW5kLUNTUlNJWkUiIG5hbWU9IkNTUlNJWkUiPiBjb21tYW5kKS4KKyAgICAgICAgICAgICAgPHRhZy9Eb3QgNi8KKyAgICAgICAgICAgICAgICBUaGUgY3Vyc29yIGlzIGJsaW5raW5nCisgICAgICAgICAgICAgICAgKHNlZSB0aGUgPHJlZiBpZD0iY29tbWFuZC1DU1JCTElOSyIgbmFtZT0iQ1NSQkxJTksiPiBjb21tYW5kKS4KKyAgICAgICAgICAgICAgPHRhZy9Eb3QgNy8KKyAgICAgICAgICAgICAgICBUaGUgY3Vyc29yIGlzIGJlaW5nIHRyYWNrZWQKKyAgICAgICAgICAgICAgICAoc2VlIHRoZSA8cmVmIGlkPSJjb21tYW5kLUNTUlRSSyIgbmFtZT0iQ1NSVFJLIj4gY29tbWFuZCkuCisgICAgICAgICAgICAgIDx0YWcvRG90IDgvCisgICAgICAgICAgICAgICAgVGhlIGJyYWlsbGUgd2luZG93IHdpbGwgc2xpZGUKKyAgICAgICAgICAgICAgICAoc2VlIHRoZSA8cmVmIGlkPSJjb21tYW5kLVNMSURFV0lOIiBuYW1lPSJTTElERVdJTiI+IGNvbW1hbmQpLgorICAgICAgICAgICAgPC9kZXNjcmlwPgorICAgICAgICA8L2Rlc2NyaXA+CisgICAgICA8dGFnL1Bvd2VyQnJhaWxsZSA4MC8KKyAgICAgICAgVGhlIHN0YXR1cyBjZWxscyBjb250YWluOgorICAgICAgICA8ZGVzY3JpcD4KKyAgICAgICAgICA8dGFnLzEvCisgICAgICAgICAgICBUaGUgcm93IChjb3VudGluZyBmcm9tIDEpIGNvcnJlc3BvbmRpbmcKKyAgICAgICAgICAgIHRvIHRoZSB0b3Agb2YgdGhlIGJyYWlsbGUgd2luZG93LgorICAgICAgICAgICAgVGhlIHRlbnMgZGlnaXQgaXMgc2hvd24gaW4gdGhlIHRvcCBoYWxmIG9mIHRoZSBjZWxsLAorICAgICAgICAgICAgYW5kIHRoZSB1bml0cyBkaWdpdCBpcyBzaG93biBpbiB0aGUgYm90dG9tIGhhbGYgb2YgdGhlIGNlbGwuCisgICAgICAgIDwvZGVzY3JpcD4KKyAgICAgIDx0YWcvR2VuZXJpYy8KKyAgICAgICAgVGhpcyBzZXR0aW5nIHBhc3NlcyBhIGxvdCBvZiBpbmZvcm1hdGlvbiB0byB0aGUgYnJhaWxsZSBkcml2ZXIsCisgICAgICAgIGFuZCB0aGUgZHJpdmVyIGl0c2VsZiBkZWNpZGVzIGhvdyB0byBwcmVzZW50IGl0LgorICAgICAgPHRhZy9NRFYvCisgICAgICAgIFRoZSBzdGF0dXMgY2VsbHMgY29udGFpbjoKKyAgICAgICAgPGRlc2NyaXA+CisgICAgICAgICAgPHRhZy8xLTIvCisgICAgICAgICAgICBUaGUgbG9jYXRpb24gb2YgdGhlIHRvcC1sZWZ0IGNvcm5lciBvZiB0aGUgYnJhaWxsZSB3aW5kb3cuCisgICAgICAgICAgICBUaGUgcm93IChjb3VudGluZyBmcm9tIDEpIGlzIHNob3duIGluIHRoZSB0b3AgaGFsZiBvZiB0aGUgY2VsbHMsCisgICAgICAgICAgICBhbmQgdGhlIGNvbHVtbiAoY291bnRpbmcgZnJvbSAxKSBpcyBzaG93biBpbiB0aGUgYm90dG9tIGhhbGYgb2YgdGhlIGNlbGxzLgorICAgICAgICA8L2Rlc2NyaXA+CisgICAgICA8dGFnL1ZveWFnZXIvCisgICAgICAgIFRoZSBzdGF0dXMgY2VsbHMgY29udGFpbjoKKyAgICAgICAgPGRlc2NyaXA+CisgICAgICAgICAgPHRhZy8xLworICAgICAgICAgICAgVGhlIHJvdyAoY291bnRpbmcgZnJvbSAxKSBjb3JyZXNwb25kaW5nIHRvCisgICAgICAgICAgICB0aGUgdG9wIG9mIHRoZSBicmFpbGxlIHdpbmRvdyAoc2VlIGJlbG93KS4KKyAgICAgICAgICA8dGFnLzIvCisgICAgICAgICAgICBUaGUgcm93IChjb3VudGluZyBmcm9tIDEpIHdoZXJlb24gdGhlIGN1cnNvciBpcyAoc2VlIGJlbG93KS4KKyAgICAgICAgICA8dGFnLzMvCisgICAgICAgICAgICBJZiB0aGUgc2NyZWVuIGlzIGZyb3plbgorICAgICAgICAgICAgKHNlZSB0aGUgPHJlZiBpZD0iY29tbWFuZC1GUkVFWkUiIG5hbWU9IkZSRUVaRSI+IGNvbW1hbmQpLAorICAgICAgICAgICAgdGhlbiB0aGUgbGV0dGVyIDx0dC9GLy4KKyAgICAgICAgICAgIElmIGl0IGlzbid0LCB0aGVuCisgICAgICAgICAgICB0aGUgY29sdW1uIChjb3VudGluZyBmcm9tIDEpIHdoZXJlaW4gdGhlIGN1cnNvciBpcyAoc2VlIGJlbG93KS4KKyAgICAgICAgPC9kZXNjcmlwPgorICAgICAgICBSb3cgYW5kIGNvbHVtbiBudW1iZXJzIGFyZSBzaG93biBhcyB0d28gZGlnaXRzIHdpdGhpbiBhIHNpbmdsZSBjZWxsLgorICAgICAgICBUaGUgdGVucyBkaWdpdCBpcyBzaG93biBpbiB0aGUgdG9wIGhhbGYgb2YgdGhlIGNlbGwsCisgICAgICAgIGFuZCB0aGUgdW5pdHMgZGlnaXQgaXMgc2hvd24gaW4gdGhlIGJvdHRvbSBoYWxmIG9mIHRoZSBjZWxsLgorICAgIDwvZGVzY3JpcD4KKyAgICBUaGUgaW5pdGlhbCBzZXR0aW5nIGlzIGJyYWlsbGUgZGlzcGxheSBkcml2ZXIgZGVwZW5kZW50LgorICA8dGFnPlRleHQgVGFibGU8bGFiZWwgaWQ9InByZWZlcmVuY2UtdGV4dC10YWJsZSI+PC90YWc+CisgICAgU2VsZWN0IHRoZSB0ZXh0IHRhYmxlLgorICAgIFNlZSBzZWN0aW9uIDxyZWYgaWQ9InRhYmxlLXRleHQiIG5hbWU9IlRleHQgVGFibGVzIj4gZm9yIGRldGFpbHMuCisgICAgU2VlIHRoZSA8cmVmIGlkPSJvcHRpb25zLXRleHQtdGFibGUiIG5hbWU9Ii10Ij4gY29tbWFuZCBsaW5lIG9wdGlvbiBmb3IgdGhlIGluaXRpYWwgc2V0dGluZy4KKyAgICBUaGlzIHByZWZlcmVuY2UgaXNuJ3Qgc2F2ZWQuCisgIDx0YWc+QXR0cmlidXRlcyBUYWJsZTxsYWJlbCBpZD0icHJlZmVyZW5jZS1hdHRyaWJ1dGVzLXRhYmxlIj48L3RhZz4KKyAgICBTZWxlY3QgdGhlIGF0dHJpYnV0ZXMgdGFibGUuCisgICAgU2VlIHNlY3Rpb24gPHJlZiBpZD0idGFibGUtYXR0cmlidXRlcyIgbmFtZT0iQXR0cmlidXRlcyBUYWJsZXMiPiBmb3IgZGV0YWlscy4KKyAgICBTZWUgdGhlIDxyZWYgaWQ9Im9wdGlvbnMtYXR0cmlidXRlcy10YWJsZSIgbmFtZT0iLWEiPiBjb21tYW5kIGxpbmUgb3B0aW9uIGZvciB0aGUgaW5pdGlhbCBzZXR0aW5nLgorICAgIFRoaXMgcHJlZmVyZW5jZSBpc24ndCBzYXZlZC4KKyAgPHRhZz5Db250cmFjdGlvbiBUYWJsZTxsYWJlbCBpZD0icHJlZmVyZW5jZS1jb250cmFjdGlvbi10YWJsZSI+PC90YWc+CisgICAgU2VsZWN0IHRoZSBjb250cmFjdGlvbiB0YWJsZS4KKyAgICBTZWUgc2VjdGlvbiA8cmVmIGlkPSJ0YWJsZS1jb250cmFjdGlvbiIgbmFtZT0iQ29udHJhY3Rpb24gVGFibGVzIj4gZm9yIGRldGFpbHMuCisgICAgU2VlIHRoZSA8cmVmIGlkPSJvcHRpb25zLWNvbnRyYWN0aW9uLXRhYmxlIiBuYW1lPSItYyI+IGNvbW1hbmQgbGluZSBvcHRpb24gZm9yIHRoZSBpbml0aWFsIHNldHRpbmcuCisgICAgVGhpcyBwcmVmZXJlbmNlIGlzbid0IHNhdmVkLgorICA8dGFnPktleWJvYXJkIFRhYmxlPGxhYmVsIGlkPSJwcmVmZXJlbmNlLWtleWJvYXJkLXRhYmxlIj48L3RhZz4KKyAgICBTZWxlY3QgdGhlIGtleWJvYXJkIHRhYmxlLgorICAgIFNlZSBzZWN0aW9uIDxyZWYgaWQ9InRhYmxlLWtleSIgbmFtZT0iS2V5IFRhYmxlcyI+IGZvciBkZXRhaWxzLgorICAgIFNlZSB0aGUgPHJlZiBpZD0ib3B0aW9ucy1rZXlib2FyZC10YWJsZSIgbmFtZT0iLWsiPiBjb21tYW5kIGxpbmUgb3B0aW9uIGZvciB0aGUgaW5pdGlhbCBzZXR0aW5nLgorICAgIFRoaXMgcHJlZmVyZW5jZSBpc24ndCBzYXZlZC4KKzwvZGVzY3JpcD4KKworTm90ZXM6Cis8aXRlbWl6ZT4KKyAgPGl0ZW0+PGxhYmVsIGlkPSJ0aW1lLXNldHRpbmdzIj4KKyAgICBBbGwgdGltZSBzZXR0aW5ncyBhcmUgaW4gaHVuZHJlZHRocyBvZiBhIHNlY29uZC4KKyAgICBUaGV5IGFyZSBtdWx0aXBsZXMgb2YgNCB3aXRoaW4gdGhlIHJhbmdlIDEgdGhyb3VnaCAxMDAuCis8L2l0ZW1pemU+CisKKzxzZWN0MT5UaGUgU3RhdHVzIERpc3BsYXk8bGFiZWwgaWQ9InN0YXR1cyI+PHA+CitUaGUgc3RhdHVzIGRpc3BsYXkgaXMgYSBzdW1tYXJ5IG9mIEJSTFRUWSdzIGN1cnJlbnQgc3RhdGUKK3doaWNoIGZpdHMgY29tcGxldGVseSB3aXRoaW4gdGhlIGJyYWlsbGUgd2luZG93LgorU29tZSBicmFpbGxlIGRpc3BsYXlzIGhhdmUgYSBzZXQgb2Ygc3RhdHVzIGNlbGxzCit3aGljaCBhcmUgdXNlZCB0byBwZXJtYW5lbnRseSBkaXNwbGF5IHNvbWUgb2YgdGhpcyBpbmZvcm1hdGlvbiBhcyB3ZWxsCisoc2VlIHRoZSBkb2N1bWVudGF0aW9uIGZvciB5b3VyIGRpc3BsYXkncyBkcml2ZXIpLgorVGhlIGRhdGEgcHJlc2VudGVkIGJ5IHRoaXMgZGlzcGxheSBpc24ndCBzdGF0aWMsIGFuZCBtYXkgY2hhbmdlIGF0IGFueSB0aW1lCitpbiByZXNwb25zZSB0byBzY3JlZW4gdXBkYXRlcyBhbmQvb3IgQlJMVFRZIGNvbW1hbmRzLgorCitVc2UgdGhlIDxyZWYgaWQ9ImNvbW1hbmQtSU5GTyIgbmFtZT0iSU5GTyI+IGNvbW1hbmQKK3RvIHN3aXRjaCB0byB0aGUgc3RhdHVzIGRpc3BsYXksCithbmQgdXNlIGl0IGFnYWluIHRvIHJldHVybiB0byB0aGUgc2NyZWVuLgorVGhlIGxheW91dCBvZiB0aGUgaW5mb3JtYXRpb24gY29udGFpbmVkIHRoZXJlaW4KK2lzIGRlcGVuZGVudCBvbiB0aGUgc2l6ZSBvZiB0aGUgYnJhaWxsZSB3aW5kb3cuCisKKzxzZWN0Mj5EaXNwbGF5cyB3aXRoIDIxIENlbGxzIG9yIE1vcmU8cD4KK1Nob3J0IHBuZXVtb25pY3MgaGF2ZSBiZWVuIHVzZWQsIGV2ZW4gdGhvdWdoIHRoZXkncmUgcmF0aGVyIGNyeXB0aWMsCitpbiBvcmRlciB0byBzaG93IHRoZSBwcmVjaXNlIGNvbHVtbiBsYXlvdXQuCis8dHNjcmVlbj48ZW0vd3gvOjxlbS93eS8gPGVtL2N4Lzo8ZW0vY3kvIDxlbS92dC8gPGVtL3RjbWZkdS88L3RzY3JlZW4+Cis8ZGVzY3JpcD4KKyAgPHRhZz48ZW0vd3gvPHR0LzovPGVtL3d5LzwvdGFnPgorICAgIFRoZSBjb2x1bW4gYW5kIHJvdyAoY291bnRpbmcgZnJvbSAxKSBvbiB0aGUgc2NyZWVuIGNvcnJlc3BvbmRpbmcKKyAgICB0byB0aGUgdG9wLWxlZnQgY29ybmVyIG9mIHRoZSBicmFpbGxlIHdpbmRvdy4KKyAgPHRhZz48ZW0vY3gvPHR0LzovPGVtL2N5LzwvdGFnPgorICAgIFRoZSBjb2x1bW4gYW5kIHJvdyAoY291bnRpbmcgZnJvbSAxKSBvbiB0aGUgc2NyZWVuIGNvcnJlc3BvbmRpbmcKKyAgICB0byB0aGUgcG9zaXRpb24gb2YgdGhlIGN1cnNvci4KKyAgPHRhZz48ZW0vdnQvPC90YWc+CisgICAgVGhlIG51bWJlciAoY291bnRpbmcgZnJvbSAxKSBvZiB0aGUgY3VycmVudCB2aXJ0dWFsIHRlcm1pbmFsLgorICA8dGFnPjxlbS90LzwvdGFnPgorICAgIFRoZSBzdGF0ZSBvZiB0aGUgY3Vyc29yIHRyYWNraW5nIGZlYXR1cmUKKyAgICAoc2VlIHRoZSA8cmVmIGlkPSJjb21tYW5kLUNTUlRSSyIgbmFtZT0iQ1NSVFJLIj4gY29tbWFuZCkuCisgICAgPGRlc2NyaXA+CisgICAgICA8dGFnPmJsYW5rPC90YWc+Q3Vyc29yIHRyYWNraW5nIGlzIG9mZi4KKyAgICAgIDx0YWc+PHR0L3QvPC90YWc+Q3Vyc29yIHRyYWNraW5nIGlzIG9uLgorICAgIDwvZGVzY3JpcD4KKyAgPHRhZz48ZW0vYy88L3RhZz4KKyAgICBUaGUgc3RhdGUgb2YgdGhlIGN1cnNvciB2aXNpYmlsaXR5IGZlYXR1cmVzCisgICAgKHNlZSB0aGUgPHJlZiBpZD0iY29tbWFuZC1DU1JWSVMiIG5hbWU9IkNTUlZJUyI+CisgICAgYW5kIDxyZWYgaWQ9ImNvbW1hbmQtQ1NSQkxJTksiIG5hbWU9IkNTUkJMSU5LIj4gY29tbWFuZHMpLgorICAgIDxkZXNjcmlwPgorICAgICAgPHRhZz5ibGFuazwvdGFnPlRoZSBjdXJzb3IgaXNuJ3QgdmlzaWJsZSwgYW5kIHdvbid0IGJsaW5rIHdoZW4gbWFkZSB2aXNpYmxlLgorICAgICAgPHRhZz48dHQvYi88L3RhZz5UaGUgY3Vyc29yIGlzbid0IHZpc2libGUsIGFuZCB3aWxsIGJsaW5rIHdoZW4gbWFkZSB2aXNpYmxlLgorICAgICAgPHRhZz48dHQvdi88L3RhZz5UaGUgY3Vyc29yIGlzIHZpc2libGUsIGFuZCBpc24ndCBibGlua2luZy4KKyAgICAgIDx0YWc+PHR0L0IvPC90YWc+VGhlIGN1cnNvciBpcyB2aXNpYmxlLCBhbmQgaXMgYmxpbmtpbmcuCisgICAgPC9kZXNjcmlwPgorICA8dGFnPjxlbS9tLzwvdGFnPgorICAgIFRoZSBjdXJyZW50IGRpc3BsYXkgbW9kZQorICAgIChzZWUgdGhlIDxyZWYgaWQ9ImNvbW1hbmQtRElTUE1EIiBuYW1lPSJESVNQTUQiPiBjb21tYW5kKS4KKyAgICA8ZGVzY3JpcD4KKyAgICAgIDx0YWc+PHR0L3QvPC90YWc+U2NyZWVuIGNvbnRlbnQgKHRleHQpIGlzIGJlaW5nIGRpc3BsYXllZC4KKyAgICAgIDx0YWc+PHR0L2EvPC90YWc+U2NyZWVuIGhpZ2hsaWdodGluZyAoYXR0cmlidXRlcykgaXMgYmVpbmcgZGlzcGxheWVkLgorICAgIDwvZGVzY3JpcD4KKyAgPHRhZz48ZW0vZi88L3RhZz4KKyAgICBUaGUgc3RhdGUgb2YgdGhlIGZyb3plbiBzY3JlZW4gZmVhdHVyZQorICAgIChzZWUgdGhlIDxyZWYgaWQ9ImNvbW1hbmQtRlJFRVpFIiBuYW1lPSJGUkVFWkUiPiBjb21tYW5kKS4KKyAgICA8ZGVzY3JpcD4KKyAgICAgIDx0YWc+Ymxhbms8L3RhZz5UaGUgc2NyZWVuIGlzbid0IGZyb3plbi4KKyAgICAgIDx0YWc+PHR0L2YvPC90YWc+VGhlIHNjcmVlbiBpcyBmcm96ZW4uCisgICAgPC9kZXNjcmlwPgorICA8dGFnPjxlbS9kLzwvdGFnPgorICAgIFRoZSBudW1iZXIgb2YgYnJhaWxsZSBkb3RzIGJlaW5nIHVzZWQgdG8gZGlzcGxheSBlYWNoIGNoYXJhY3RlcgorICAgIChzZWUgdGhlIDxyZWYgaWQ9ImNvbW1hbmQtU0lYRE9UUyIgbmFtZT0iU0lYRE9UUyI+IGNvbW1hbmQpLgorICAgIDxkZXNjcmlwPgorICAgICAgPHRhZz48dHQvOC88L3RhZz5BbGwgZWlnaHQgZG90cyBhcmUgYmVpbmcgdXNlZC4KKyAgICAgIDx0YWc+PHR0LzYvPC90YWc+T25seSBkb3RzIDEgdGhyb3VnaCA2IGFyZSBiZWluZyB1c2VkLgorICAgIDwvZGVzY3JpcD4KKyAgPHRhZz48ZW0vdS88L3RhZz4KKyAgICBUaGUgc3RhdGUgb2YgdGhlIHVwcGVyY2FzZSAoY2FwaXRhbCBsZXR0ZXIpIGRpc3BsYXkgZmVhdHVyZXMKKyAgICAoc2VlIHRoZSA8cmVmIGlkPSJjb21tYW5kLUNBUEJMSU5LIiBuYW1lPSJDQVBCTElOSyI+IGNvbW1hbmQpLgorICAgIDxkZXNjcmlwPgorICAgICAgPHRhZz5ibGFuazwvdGFnPlVwcGVyY2FzZSBsZXR0ZXJzIGRvbid0IGJsaW5rLgorICAgICAgPHRhZz48dHQvQi88L3RhZz5VcHBlcmNhc2UgbGV0dGVycyBibGluay4KKyAgICA8L2Rlc2NyaXA+Cis8L2Rlc2NyaXA+CisKKzxzZWN0Mj5EaXNwbGF5cyB3aXRoIDIwIENlbGxzIG9yIExlc3M8cD4KK1Nob3J0IHBuZXVtb25pY3MgaGF2ZSBiZWVuIHVzZWQsIGV2ZW4gdGhvdWdoIHRoZXkncmUgcmF0aGVyIGNyeXB0aWMsCitpbiBvcmRlciB0byBzaG93IHRoZSBwcmVjaXNlIGNvbHVtbiBsYXlvdXQuCis8dHNjcmVlbj48ZW0veHgvPGVtL3l5LzxlbS9zLyA8ZW0vdnQvIDxlbS90Y21mZHUvPC90c2NyZWVuPgorPGRlc2NyaXA+CisgIDx0YWc+PGVtL3h4LzwvdGFnPgorICAgIFRoZSBjb2x1bW5zIChjb3VudGluZyBmcm9tIDEpIG9uIHRoZSBzY3JlZW4gY29ycmVzcG9uZGluZworICAgIHRvIHRoZSBwb3NpdGlvbiBvZiB0aGUgY3Vyc29yIChzaG93biBpbiB0aGUgdG9wIGhhbGYgb2YgdGhlIGNlbGxzKQorICAgIGFuZCB0byB0aGUgdG9wLWxlZnQgY29ybmVyIG9mIHRoZSBicmFpbGxlIHdpbmRvdyAoc2hvd24gaW4gdGhlIGJvdHRvbSBoYWxmIG9mIHRoZSBjZWxscykuCisgIDx0YWc+PGVtL3l5LzwvdGFnPgorICAgIFRoZSByb3dzIChjb3VudGluZyBmcm9tIDEpIG9uIHRoZSBzY3JlZW4gY29ycmVzcG9uZGluZworICAgIHRvIHRoZSBwb3NpdGlvbiBvZiB0aGUgY3Vyc29yIChzaG93biBpbiB0aGUgdG9wIGhhbGYgb2YgdGhlIGNlbGxzKQorICAgIGFuZCB0byB0aGUgdG9wLWxlZnQgY29ybmVyIG9mIHRoZSBicmFpbGxlIHdpbmRvdyAoc2hvd24gaW4gdGhlIGJvdHRvbSBoYWxmIG9mIHRoZSBjZWxscykuCisgIDx0YWc+PGVtL3MvPC90YWc+CisgICAgVGhlIHNldHRpbmdzIG9mIHNvbWUgb2YgQlJMVFRZJ3MgZmVhdHVyZXMuCisgICAgQSBmZWF0dXJlIGlzIHR1cm5lZCBvbiBpZiBpdHMgY29ycmVzcG9uZGluZyBkb3QgaXMgcmFpc2VkLgorICAgIDxkZXNjcmlwPgorICAgICAgPHRhZy9Eb3QgMS8KKyAgICAgICAgRnJvemVuIHNjcmVlbiBpbWFnZQorICAgICAgICAoc2VlIHRoZSA8cmVmIGlkPSJjb21tYW5kLUZSRUVaRSIgbmFtZT0iRlJFRVpFIj4gY29tbWFuZCkuCisgICAgICA8dGFnL0RvdCAyLworICAgICAgICBEaXNwbGF5IGF0dHJpYnV0ZXMKKyAgICAgICAgKHNlZSB0aGUgPHJlZiBpZD0iY29tbWFuZC1ESVNQTUQiIG5hbWU9IkRJU1BNRCI+IGNvbW1hbmQpLgorICAgICAgPHRhZy9Eb3QgMy8KKyAgICAgICAgQWxlcnQgdHVuZXMKKyAgICAgICAgKHNlZSB0aGUgPHJlZiBpZD0iY29tbWFuZC1UVU5FUyIgbmFtZT0iVFVORVMiPiBjb21tYW5kKS4KKyAgICAgIDx0YWcvRG90IDQvCisgICAgICAgIFZpc2libGUgY3Vyc29yCisgICAgICAgIChzZWUgdGhlIDxyZWYgaWQ9ImNvbW1hbmQtQ1NSVklTIiBuYW1lPSJDU1JWSVMiPiBjb21tYW5kKS4KKyAgICAgIDx0YWcvRG90IDUvCisgICAgICAgIEJsb2NrIGN1cnNvcgorICAgICAgICAoc2VlIHRoZSA8cmVmIGlkPSJjb21tYW5kLUNTUlNJWkUiIG5hbWU9IkNTUlNJWkUiPiBjb21tYW5kKS4KKyAgICAgIDx0YWcvRG90IDYvCisgICAgICAgIEJsaW5raW5nIGN1cnNvcgorICAgICAgICAoc2VlIHRoZSA8cmVmIGlkPSJjb21tYW5kLUNTUkJMSU5LIiBuYW1lPSJDU1JCTElOSyI+IGNvbW1hbmQpLgorICAgICAgPHRhZy9Eb3QgNy8KKyAgICAgICAgQ3Vyc29yIHRyYWNraW5nCisgICAgICAgIChzZWUgdGhlIDxyZWYgaWQ9ImNvbW1hbmQtQ1NSVFJLIiBuYW1lPSJDU1JUUksiPiBjb21tYW5kKS4KKyAgICAgIDx0YWcvRG90IDgvCisgICAgICAgIFNsaWRpbmcgd2luZG93CisgICAgICAgIChzZWUgdGhlIDxyZWYgaWQ9ImNvbW1hbmQtU0xJREVXSU4iIG5hbWU9IlNMSURFV0lOIj4gY29tbWFuZCkuCisgICAgPC9kZXNjcmlwPgorICA8dGFnPjxlbS92dC88L3RhZz4KKyAgICBUaGUgbnVtYmVyIChjb3VudGluZyBmcm9tIDEpIG9mIHRoZSBjdXJyZW50IHZpcnR1YWwgdGVybWluYWwuCisgIDx0YWc+PGVtL3QvPC90YWc+CisgICAgVGhlIHN0YXRlIG9mIHRoZSBjdXJzb3IgdHJhY2tpbmcgZmVhdHVyZQorICAgIChzZWUgdGhlIDxyZWYgaWQ9ImNvbW1hbmQtQ1NSVFJLIiBuYW1lPSJDU1JUUksiPiBjb21tYW5kKS4KKyAgICA8ZGVzY3JpcD4KKyAgICAgIDx0YWc+Ymxhbms8L3RhZz5DdXJzb3IgdHJhY2tpbmcgaXMgb2ZmLgorICAgICAgPHRhZz48dHQvdC88L3RhZz5DdXJzb3IgdHJhY2tpbmcgaXMgb24uCisgICAgPC9kZXNjcmlwPgorICA8dGFnPjxlbS9jLzwvdGFnPgorICAgIFRoZSBzdGF0ZSBvZiB0aGUgY3Vyc29yIHZpc2liaWxpdHkgZmVhdHVyZXMKKyAgICAoc2VlIHRoZSA8cmVmIGlkPSJjb21tYW5kLUNTUlZJUyIgbmFtZT0iQ1NSVklTIj4KKyAgICBhbmQgPHJlZiBpZD0iY29tbWFuZC1DU1JCTElOSyIgbmFtZT0iQ1NSQkxJTksiPiBjb21tYW5kcykuCisgICAgPGRlc2NyaXA+CisgICAgICA8dGFnPmJsYW5rPC90YWc+VGhlIGN1cnNvciBpc24ndCB2aXNpYmxlLCBhbmQgd29uJ3QgYmxpbmsgd2hlbiBtYWRlIHZpc2libGUuCisgICAgICA8dGFnPjx0dC9iLzwvdGFnPlRoZSBjdXJzb3IgaXNuJ3QgdmlzaWJsZSwgYW5kIHdpbGwgYmxpbmsgd2hlbiBtYWRlIHZpc2libGUuCisgICAgICA8dGFnPjx0dC92LzwvdGFnPlRoZSBjdXJzb3IgaXMgdmlzaWJsZSwgYW5kIGlzbid0IGJsaW5raW5nLgorICAgICAgPHRhZz48dHQvQi88L3RhZz5UaGUgY3Vyc29yIGlzIHZpc2libGUsIGFuZCBpcyBibGlua2luZy4KKyAgICA8L2Rlc2NyaXA+CisgIDx0YWc+PGVtL20vPC90YWc+CisgICAgVGhlIGN1cnJlbnQgZGlzcGxheSBtb2RlCisgICAgKHNlZSB0aGUgPHJlZiBpZD0iY29tbWFuZC1ESVNQTUQiIG5hbWU9IkRJU1BNRCI+IGNvbW1hbmQpLgorICAgIDxkZXNjcmlwPgorICAgICAgPHRhZz48dHQvdC88L3RhZz5TY3JlZW4gY29udGVudCAodGV4dCkgaXMgYmVpbmcgZGlzcGxheWVkLgorICAgICAgPHRhZz48dHQvYS88L3RhZz5TY3JlZW4gaGlnaGxpZ2h0aW5nIChhdHRyaWJ1dGVzKSBpcyBiZWluZyBkaXNwbGF5ZWQuCisgICAgPC9kZXNjcmlwPgorICA8dGFnPjxlbS9mLzwvdGFnPgorICAgIFRoZSBzdGF0ZSBvZiB0aGUgZnJvemVuIHNjcmVlbiBmZWF0dXJlCisgICAgKHNlZSB0aGUgPHJlZiBpZD0iY29tbWFuZC1GUkVFWkUiIG5hbWU9IkZSRUVaRSI+IGNvbW1hbmQpLgorICAgIDxkZXNjcmlwPgorICAgICAgPHRhZz5ibGFuazwvdGFnPlRoZSBzY3JlZW4gaXNuJ3QgZnJvemVuLgorICAgICAgPHRhZz48dHQvZi88L3RhZz5UaGUgc2NyZWVuIGlzIGZyb3plbi4KKyAgICA8L2Rlc2NyaXA+CisgIDx0YWc+PGVtL2QvPC90YWc+CisgICAgVGhlIG51bWJlciBvZiBicmFpbGxlIGRvdHMgYmVpbmcgdXNlZCB0byBkaXNwbGF5IGVhY2ggY2hhcmFjdGVyCisgICAgKHNlZSB0aGUgPHJlZiBpZD0iY29tbWFuZC1TSVhET1RTIiBuYW1lPSJTSVhET1RTIj4gY29tbWFuZCkuCisgICAgPGRlc2NyaXA+CisgICAgICA8dGFnPjx0dC84LzwvdGFnPkFsbCBlaWdodCBkb3RzIGFyZSBiZWluZyB1c2VkLgorICAgICAgPHRhZz48dHQvNi88L3RhZz5Pbmx5IGRvdHMgMSB0aHJvdWdoIDYgYXJlIGJlaW5nIHVzZWQuCisgICAgPC9kZXNjcmlwPgorICA8dGFnPjxlbS91LzwvdGFnPgorICAgIFRoZSBzdGF0ZSBvZiB0aGUgdXBwZXJjYXNlIChjYXBpdGFsIGxldHRlcikgZGlzcGxheSBmZWF0dXJlcworICAgIChzZWUgdGhlIDxyZWYgaWQ9ImNvbW1hbmQtQ0FQQkxJTksiIG5hbWU9IkNBUEJMSU5LIj4gY29tbWFuZCkuCisgICAgPGRlc2NyaXA+CisgICAgICA8dGFnPmJsYW5rPC90YWc+VXBwZXJjYXNlIGxldHRlcnMgZG9uJ3QgYmxpbmsuCisgICAgICA8dGFnPjx0dC9CLzwvdGFnPlVwcGVyY2FzZSBsZXR0ZXJzIGJsaW5rLgorICAgIDwvZGVzY3JpcD4KKzwvZGVzY3JpcD4KKworPHNlY3QxPkNvbW1hbmQgTGVhcm4gTW9kZTxsYWJlbCBpZD0ibGVhcm4iPjxwPgorQ29tbWFuZCBsZWFybiBtb2RlIGlzIGFuIGludGVyYWN0aXZlIHdheSB0byBsZWFybgord2hhdCB0aGUga2V5cyBvbiB0aGUgYnJhaWxsZSBkaXNwbGF5IGRvLgorSXQgY2FuIGJlIGFjY2Vzc2VkCitlaXRoZXIgYnkgdGhlIDxyZWYgaWQ9ImNvbW1hbmQtTEVBUk4iIG5hbWU9IkxFQVJOIj4gY29tbWFuZAorb3IgdmlhIHRoZSA8cmVmIGlkPSJ1dGlsaXR5LWJybHRlc3QiIG5hbWU9ImJybHRlc3QiPiB1dGlsaXR5LgorVGhpcyBmZWF0dXJlIGlzbid0IGF2YWlsYWJsZSBpZiB0aGUKKzxyZWYgaWQ9ImJ1aWxkLWxlYXJuLW1vZGUiIG5hbWU9Ii0tZGlzYWJsZS1sZWFybi1tb2RlIj4gYnVpbGQgb3B0aW9uIHdhcyBzcGVjaWZpZWQuCisKK1doZW4gdGhpcyBtb2RlIGlzIGVudGVyZWQsCit0aGUgbWVzc2FnZSA8dHQvY29tbWFuZCBsZWFybiBtb2RlLyBpcyB3cml0dGVuIHRvIHRoZSBicmFpbGxlIGRpc3BsYXkuCitUaGVuLCBhcyBlYWNoIGtleSAob3Iga2V5IGNvbWJpbmF0aW9uKSBvbiB0aGUgZGlzcGxheSBpcyBwcmVzc2VkLAorYSBzaG9ydCBtZXNzYWdlIGRlc2NyaWJpbmcgaXRzIEJSTFRUWSBmdW5jdGlvbiBpcyB3cml0dGVuLgorVGhpcyBtb2RlIGV4aXRzIGltbWVkaWF0ZWx5IGlmIHRoZSBrZXkgKG9yIGtleSBjb21iaW5hdGlvbikKK2ZvciB0aGUgPHJlZiBpZD0iY29tbWFuZC1MRUFSTiIgbmFtZT0iTEVBUk4iPiBjb21tYW5kIGlzIHByZXNzZWQuCitJdCBleGl0cyBhdXRvbWF0aWNhbGx5LCBhbmQgdGhlIG1lc3NhZ2UgPHR0L2RvbmUvIGlzIHdyaXR0ZW4sCitpZiB0ZW4gc2Vjb25kcyBlbGFwc2Ugd2l0aG91dCBhbnkga2V5IG9uIHRoZSBkaXNwbGF5IGJlaW5nIHByZXNzZWQuCitOb3RlIHRoYXQgc29tZSBkaXNwbGF5cyBkb24ndCBzaWduYWwgdGhlIGRyaXZlcgorYW5kL29yIHNvbWUgZHJpdmVycyBkb24ndCBzaWduYWwgQlJMVFRZCit1bnRpbCBhbGwgdGhlIGtleXMgYXJlIHJlbGVhc2VkLgorCitJZiBhIG1lc3NhZ2UgaXMgbG9uZ2VyIHRoYW4gdGhlIGJyYWlsbGUgZGlzcGxheSBpcyB3aWRlLAordGhlbiBpdCdzIGRpc3BsYXllZCBpbiBzZWdtZW50cy4KK1RoZSBsZW5ndGggb2YgZWFjaCBzZWdtZW50IGJ1dCB0aGUgbGFzdCBpcyBvbmUgbGVzcyB0aGFuIHRoZSBkaXNwbGF5J3Mgd2lkdGgsCit3aXRoIHRoZSByaWdodG1vc3QgY2hhcmFjdGVyIG9uIHRoZSBkaXNwbGF5IGJlaW5nIHNldCB0byBhIG1pbnVzIHNpZ24uCitFYWNoIHN1Y2ggc2VnbWVudCByZW1haW5zIG9uIHRoZSBkaXNwbGF5CitlaXRoZXIgZm9yIGEgZmV3IHNlY29uZHMKKyhzZWUgdGhlIDxyZWYgaWQ9Im9wdGlvbnMtbWVzc2FnZS10aW1lb3V0IiBuYW1lPSItTSI+IGNvbW1hbmQgbGluZSBvcHRpb24pCitvciB1bnRpbCBhbnkga2V5IG9uIHRoZSBkaXNwbGF5IGlzIHByZXNzZWQuCisKKzxzZWN0PlRhYmxlczxsYWJlbCBpZD0idGFibGVzIj48cD4KKworPHNlY3QxPlRleHQgVGFibGVzPGxhYmVsIGlkPSJ0YWJsZS10ZXh0Ij48cD4KK0ZpbGVzIHdpdGggbmFtZXMgb2YgdGhlIGZvcm0gPHR0LyoudHRiLyBhcmUgdGV4dCB0YWJsZXMsCithbmQgd2l0aCBuYW1lcyBvZiB0aGUgZm9ybSA8dHQvKi50dGkvIGFyZSB0ZXh0IHN1YnRhYmxlcy4KK1RoZXkgYXJlIHVzZWQgYnkgQlJMVFRZIHRvIHRyYW5zbGF0ZSB0aGUgY2hhcmFjdGVycyBvbiB0aGUgc2NyZWVuCitpbnRvIHRoZWlyIGNvcnJlc3BvbmRpbmcgOC1kb3QgY29tcHV0ZXIgYnJhaWxsZSByZXByZXNlbnRhdGlvbnMuCisKK0JSTFRUWSBpcyBpbml0aWFsbHkgY29uZmlndXJlZCB0byB1c2UgdGhlCis8cmVmIGlkPSJuYWJjYyIgbmFtZT0iTm9ydGggQW1lcmljYW4gQnJhaWxsZSBDb21wdXRlciBDb2RlIj4KKyhOQUJDQykgdGV4dCB0YWJsZS4KK0luIGFkZGl0aW9uIHRvIHRoaXMgZGVmYXVsdCwKK3RoZSBmb2xsb3dpbmcgYWx0ZXJuYXRpdmVzIGFyZSBwcm92aWRlZDoKKzx0YWJsZSBsb2M9ImgiPgorICA8dGFidWxhciBjYT0ibGwiPgorICAgIE5hbWV8TGFuZ3VhZ2VACisgICAgJlRleHRUYWJsZXMKKyAgPC90YWJ1bGFyPgorPC90YWJsZT4KK1NlZSB0aGUgPHJlZiBpZD0ib3B0aW9ucy10ZXh0LXRhYmxlIiBuYW1lPSItdCI+IGNvbW1hbmQgbGluZSBvcHRpb24sCit0aGUgPHJlZiBpZD0iY29uZmlndXJlLXRleHQtdGFibGUiIG5hbWU9InRleHQtdGFibGUiPiBjb25maWd1cmF0aW9uIGZpbGUgZGlyZWN0aXZlLAorYW5kIHRoZSA8cmVmIGlkPSJidWlsZC10ZXh0LXRhYmxlIiBuYW1lPSItLXdpdGgtdGV4dC10YWJsZSI+IGJ1aWxkIG9wdGlvbgorZm9yIGRldGFpbHMgcmVnYXJkaW5nIGhvdyB0byB1c2UgYW4gYWx0ZXJuYXRlIHRleHQgdGFibGUuCisKKzxzZWN0Mj5UZXh0IFRhYmxlIEZvcm1hdDxwPgorQSB0ZXh0IHRhYmxlIGNvbnNpc3RzIG9mIGEgc2VxdWVuY2Ugb2YgZGlyZWN0aXZlcywgb25lIHBlciBsaW5lLAord2hpY2ggZGVmaW5lIGhvdyBlYWNoIGNoYXJhY3RlciBpcyB0byBiZSByZXByZXNlbnRlZCBpbiBicmFpbGxlLgorPHR0L1VURi04LyBjaGFyYWN0ZXIgZW5jb2RpbmcgbXVzdCBiZSB1c2VkLgorV2hpdGUtc3BhY2UgKGJsYW5rcywgdGFicykgYXQgdGhlIGJlZ2lubmluZyBvZiBhIGxpbmUsIAorYXMgd2VsbCBhcyBiZWZvcmUgYW5kL29yIGFmdGVyIGFueSBvcGVyYW5kIG9mIGFueSBkaXJlY3RpdmUsCitpcyBpZ25vcmVkLgorTGluZXMgY29udGFpbmluZyBvbmx5IHdoaXRlLXNwYWNlIGFyZSBpZ25vcmVkLgorSWYgdGhlIGZpcnN0IG5vbi13aGl0ZS1zcGFjZSBjaGFyYWN0ZXIgb2YgYSBsaW5lIGlzICImbnVtOyIKK3RoZW4gdGhhdCBsaW5lIGlzIGEgY29tbWVudCBhbmQgaXMgaWdub3JlZC4KKworPHNlY3QyPlRleHQgVGFibGUgRGlyZWN0aXZlczxwPgorVGhlIGZvbGxvd2luZyBkaXJlY3RpdmVzIGFyZSBwcm92aWRlZDoKKzxkZXNjcmlwPgorICA8dGFnPjx0dC9jaGFyLyA8ZW0vY2hhcmFjdGVyLyA8ZW0vZG90cy8gJm51bTsgPGVtL2NvbW1lbnQvPC90YWc+CisgICAgVXNlIHRoZSA8dHQvY2hhci8gZGlyZWN0aXZlIHRvIHNwZWNpZnkKKyAgICBob3cgYSBVbmljb2RlIGNoYXJhY3RlciBpcyB0byBiZSByZXByZXNlbnRlZCBpbiBicmFpbGxlLgorICAgIENoYXJhY3RlcnMgZGVmaW5lZCB3aXRoIHRoaXMgZGlyZWN0aXZlCisgICAgY2FuIGFsc28gYmUgZW50ZXJlZCBmcm9tIGEgYnJhaWxsZSBrZXlib2FyZC4KKyAgICBJZiBzZXZlcmFsIGNoYXJhY3RlcnMgaGF2ZSB0aGUgc2FtZSBicmFpbGxlIHJlcHJlc2VudGF0aW9uCisgICAgdGhlbiBvbmx5IG9uZSBvZiB0aGVtIHNob3VsZCBiZSBkZWZpbmVkIHdpdGggdGhlIDx0dC9jaGFyLyBkaXJlY3RpdmUgLQorICAgIHRoZSBvdGhlcnMgc2hvdWxkIGJlIGRlZmluZWQgd2l0aCB0aGUgPHR0L2dseXBoLyBkaXJlY3RpdmUKKyAgICAod2hpY2ggaGFzIHRoZSBzYW1lIHN5bnRheCkuCisgICAgSWYgbW9yZSB0aGFuIG9uZSBjaGFyYWN0ZXIgd2l0aCB0aGUgc2FtZSBicmFpbGxlIHJlcHJlc2VudGF0aW9uCisgICAgaXMgZGVmaW5lZCB3aXRoIHRoZSA8dHQvY2hhci8gZGlyZWN0aXZlCisgICAgKHdoaWNoIGlzIGN1cnJlbnRseSBhbGxvd2VkIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5KQorICAgIHRoZW4gdGhlIGZpcnN0IG9uZSBpcyBzZWxlY3RlZC4KKworICAgIDxkZXNjcmlwPgorICAgICAgPHRhZz48ZW0vY2hhcmFjdGVyLzwvdGFnPgorICAgICAgICBUaGUgVW5pY29kZSBjaGFyYWN0ZXIgYmVpbmcgZGVmaW5lZC4KKyAgICAgICAgSXQgbWF5IGJlOgorICAgICAgICA8aXRlbWl6ZT4KKyAgICAgICAgICA8aXRlbT4KKyAgICAgICAgICAgIEFueSBzaW5nbGUgY2hhcmFjdGVyIG90aGVyIHRoYW4gYSBiYWNrc2xhc2ggb3IgYSB3aGl0ZS1zcGFjZSBjaGFyYWN0ZXIuCisgICAgICAgICAgPGl0ZW0+CisgICAgICAgICAgICBBIGJhY2tzbGFzaC1wcmVmaXhlZCBzcGVjaWFsIGNoYXJhY3Rlci4KKyAgICAgICAgICAgIFRoZXNlIGFyZToKKyAgICAgICAgICAgIDxkZXNjcmlwPgorICAgICAgICAgICAgLSA8dGFnL1xiL1RoZSBiYWNrc3BhY2UgY2hhcmFjdGVyLgorICAgICAgICAgICAgLSA8dGFnL1xmL1RoZSBmb3JtZmVlZCBjaGFyYWN0ZXIuCisgICAgICAgICAgICAtIDx0YWcvXG4vVGhlIG5ld2xpbmUgY2hhcmFjdGVyLgorICAgICAgICAgICAgLSA8dGFnL1xvJm51bTsmbnVtOyZudW07L1RoZSB0aHJlZS1kaWdpdCBvY3RhbCByZXByZXNlbnRhdGlvbiBvZiBhIGNoYXJhY3Rlci4KKyAgICAgICAgICAgIC0gPHRhZy9cci9UaGUgY2FycmlhZ2UgcmV0dXJuIGNoYXJhY3Rlci4KKyAgICAgICAgICAgIC0gPHRhZy9ccy9UaGUgc3BhY2UgY2hhcmFjdGVyLgorICAgICAgICAgICAgLSA8dGFnL1x0L1RoZSBob3Jpem9udGFsIHRhYiBjaGFyYWN0ZXIuCisgICAgICAgICAgICAtIDx0YWcvXHUmbnVtOyZudW07Jm51bTsmbnVtOy9UaGUgZm91ci1kaWdpdCBoZXhhZGVjaW1hbCByZXByZXNlbnRhdGlvbiBvZiBhIGNoYXJhY3Rlci4KKyAgICAgICAgICAgIC0gPHRhZy9cVSZudW07Jm51bTsmbnVtOyZudW07Jm51bTsmbnVtOyZudW07Jm51bTsvVGhlIGVpZ2h0LWRpZ2l0IGhleGFkZWNpbWFsIHJlcHJlc2VudGF0aW9uIG9mIGEgY2hhcmFjdGVyLgorICAgICAgICAgICAgLSA8dGFnL1x2L1RoZSB2ZXJ0aWNhbCB0YWIgY2hhcmFjdGVyLgorICAgICAgICAgICAgLSA8dGFnL1x4Jm51bTsmbnVtOy9UaGUgdHdvLWRpZ2l0IGhleGFkZWNpbWFsIHJlcHJlc2VudGF0aW9uIG9mIGEgY2hhcmFjdGVyLgorICAgICAgICAgICAgLSA8dGFnL1xYJm51bTsmbnVtOy8uLi4gKHRoZSBjYXNlIG9mIHRoZSBYIGFuZCBvZiB0aGUgZGlnaXRzIGlzbid0IHNpZ25pZmljYW50KQorICAgICAgICAgICAgLSA8dGFnL1wmbnVtOy9BIGxpdGVyYWwgbnVtYmVyIHNpZ24uCisgICAgICAgICAgICAtIDx0YWcvXCZsdDtuYW1lJmd0Oy9UaGUgVW5pY29kZSBuYW1lIG9mIGEgY2hhcmFjdGVyICh1c2UgXyBmb3Igc3BhY2UpLgorICAgICAgICAgICAgLSA8dGFnL1xcL0EgbGl0ZXJhbCBiYWNrc2xhc2guCisgICAgICAgICAgICA8L2Rlc2NyaXA+CisgICAgICAgIDwvaXRlbWl6ZT4KKyAgICAgIDx0YWc+PGVtL2RvdHMvPC90YWc+CisgICAgICAgIFRoZSBicmFpbGxlIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBVbmljb2RlIGNoYXJhY3Rlci4KKyAgICAgICAgSXQgaXMgYSBzZXF1ZW5jZSBvZiBvbmUgdG8gZWlnaHQgZG90IG51bWJlcnMuCisgICAgICAgIElmIHRoZSBkb3QgbnVtYmVyIHNlcXVlbmNlIGlzIGVuY2xvc2VkIHdpdGhpbiBwYXJlbnRoZXNlcworICAgICAgICB0aGVuIHRoZSBkb3QgbnVtYmVycyBtYXkgYmUgc2VwYXJhdGVkIGZyb20gb25lIGFub3RoZXIgYnkgd2hpdGUtc3BhY2UuCisgICAgICAgIEEgZG90IG51bWJlciBpcyBhIGRpZ2l0IHdpdGhpbiB0aGUgcmFuZ2UgPHR0LzEvLTx0dC84LyBhcyBkZWZpbmVkIGJ5IHRoZQorICAgICAgICA8cmVmIGlkPSJkb3RzIiBuYW1lPSJTdGFuZGFyZCBCcmFpbGxlIERvdCBOdW1iZXJpbmcgQ29udmVudGlvbiI+LgorICAgICAgICBUaGUgc3BlY2lhbCBkb3QgbnVtYmVyIDx0dC8wLyBpcyByZWNvZ25pemVkCisgICAgICAgIHdoZW4gbm90IGVuY2xvc2VkIHdpdGhpbiBwYXJlbnRoZXNlcywKKyAgICAgICAgYW5kIG1lYW5zIG5vIGRvdHM7CisgICAgICAgIGl0IG1heSBub3QgYmUgdXNlZCBpbiBjb25qdW5jdGlvbiB3aXRoIGFueSBvdGhlciBkb3QgbnVtYmVyLgorICAgIDwvZGVzY3JpcD4KKworICAgIEV4YW1wbGVzOgorICAgIDxpdGVtaXplPgorICAgICAgPGl0ZW0+PHR0L2NoYXIgYSAxLworICAgICAgPGl0ZW0+PHR0L2NoYXIgYiAoMTIpLworICAgICAgPGl0ZW0+PHR0L2NoYXIgYyAoIDQgIDEgICApLworICAgICAgPGl0ZW0+PHR0L2NoYXIgXFwgMTI1NjcvCisgICAgICA8aXRlbT48dHQvY2hhciBccyAwLworICAgICAgPGl0ZW0+PHR0L2NoYXIgXHgyMCAoKS8KKyAgICAgIDxpdGVtPjx0dC9jaGFyIFwmbHQ7TEFUSU5fU01BTExfTEVUVEVSX0QmZ3Q7IDE0NS8KKyAgICA8L2l0ZW1pemU+CisgIDx0YWc+PHR0L2dseXBoLyA8ZW0vY2hhcmFjdGVyLyA8ZW0vZG90cy8gJm51bTsgPGVtL2NvbW1lbnQvPC90YWc+CisgICAgVXNlIHRoZSA8dHQvZ2x5cGgvIGRpcmVjdGl2ZSB0byBzcGVjaWZ5CisgICAgaG93IGEgVW5pY29kZSBjaGFyYWN0ZXIgaXMgdG8gYmUgcmVwcmVzZW50ZWQgaW4gYnJhaWxsZS4KKyAgICBDaGFyYWN0ZXJzIGRlZmluZWQgd2l0aCB0aGlzIGRpcmVjdGl2ZSBhcmUgb3V0cHV0LW9ubHkuIAorICAgIFRoZXkgY2Fubm90IGJlIGVudGVyZWQgZnJvbSBhIGJyYWlsbGUga2V5Ym9hcmQuCisKKyAgICBTZWUgdGhlIDx0dC9jaGFyLyBkaXJlY3RpdmUgZm9yIHN5bnRheCBkZXRhaWxzIGFuZCBmb3IgZXhhbXBsZXMuCisgIDx0YWc+PHR0L2J5dGUvIDxlbS9ieXRlLyA8ZW0vZG90cy8gJm51bTsgPGVtL2NvbW1lbnQvPC90YWc+CisgICAgVXNlIHRoZSA8dHQvYnl0ZS8gZGlyZWN0aXZlIHRvIHNwZWNpZnkgaG93CisgICAgYSBjaGFyYWN0ZXIgaW4gdGhlIGxvY2FsIGNoYXJhY3RlciBzZXQgCisgICAgaXMgdG8gYmUgcmVwcmVzZW50ZWQgaW4gYnJhaWxsZS4KKyAgICBJdCBoYXMgYmVlbiByZXRhaW5lZCBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSBidXQgc2hvdWxkIG5vdCBiZSB1c2VkLgorICAgIFVuaWNvZGUgY2hhcmFjdGVycyBzaG91bGQgYmUgZGVmaW5lZAorICAgICh2aWEgdGhlIDx0dC9jaGFyLyBkaXJlY3RpdmUpCisgICAgc28gdGhhdCB0aGUgdGV4dCB0YWJsZSByZW1haW5zIHZhbGlkCisgICAgcmVnYXJkbGVzcyBvZiB3aGF0IHRoZSBsb2NhbCBjaGFyYWN0ZXIgc2V0IGlzLgorCisgICAgPGRlc2NyaXA+CisgICAgICA8dGFnPjxlbS9ieXRlLzwvdGFnPgorICAgICAgICBUaGUgbG9jYWwgY2hhcmFjdGVyIGJlaW5nIGRlZmluZWQuCisgICAgICAgIEl0IG1heSBiZSBzcGVjaWZpZWQgaW4gdGhlIHNhbWUgd2F5cworICAgICAgICBhcyB0aGUgPGVtL2NoYXJhY3Rlci8gb3BlcmFuZCBvZiB0aGUgPHR0L2NoYXIvIGRpcmVjdGl2ZSAKKyAgICAgICAgZXhjZXB0IHRoYXQgdGhlIFVuaWNvZGUtc3BlY2lmaWMgZm9ybXMKKyAgICAgICAgKFx1LCBcVSwgXCZsdDspCisgICAgICAgIG1heSBub3QgYmUgdXNlZC4KKyAgICAgIDx0YWc+PGVtL2RvdHMvPC90YWc+CisgICAgICAgIFRoZSBicmFpbGxlIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBsb2NhbCBjaGFyYWN0ZXIuCisgICAgICAgIEl0IG1heSBiZSBzcGVjaWZpZWQgaW4gdGhlIHNhbWUgd2F5cworICAgICAgICBhcyB0aGUgPGVtL2RvdHMvIG9wZXJhbmQgb2YgdGhlIDx0dC9jaGFyLyBkaXJlY3RpdmUuCisgICAgPC9kZXNjcmlwPgorICA8dGFnPjx0dC9pbmNsdWRlLyA8ZW0vZmlsZS8gJm51bTsgPGVtL2NvbW1lbnQvPC90YWc+CisgICAgVXNlIHRoZSA8dHQvaW5jbHVkZS8gZGlyZWN0aXZlIHRvIGluY2x1ZGUgdGhlIGNvbnRlbnQgb2YgYSB0ZXh0IHN1YnRhYmxlLgorICAgIEl0IGlzIHJlY3Vyc2l2ZSwgd2hpY2ggbWVhbnMgdGhhdAorICAgIGFueSB0ZXh0IHN1YnRhYmxlIGNhbiBpdHNlbGYgaW5jbHVkZSB5ZXQgYW5vdGhlciB0ZXh0IHN1YnRhYmxlLgorICAgIENhcmUgbXVzdCBiZSB0YWtlbiB0byBlbnN1cmUgdGhhdCBhbiAiaW5jbHVkZSBsb29wIiBpcyBub3QgY3JlYXRlZC4KKworICAgIDxkZXNjcmlwPgorICAgICAgPHRhZz48ZW0vZmlsZS88L3RhZz4KKyAgICAgICAgVGhlIGZpbGUgdG8gYmUgaW5jbHVkZWQuCisgICAgICAgIEl0IG1heSBiZSBlaXRoZXIgYSByZWxhdGl2ZSBvciBhbiBhYnNvbHV0ZSBwYXRoLgorICAgICAgICBJZiByZWxhdGl2ZSwgaXQgaXMgYW5jaG9yZWQgYXQgdGhlIGRpcmVjdG9yeSBjb250YWluaW5nIHRoZSBpbmNsdWRpbmcgZmlsZS4KKyAgICA8L2Rlc2NyaXA+Cis8L2Rlc2NyaXA+CisKKzxzZWN0MT5BdHRyaWJ1dGVzIFRhYmxlczxsYWJlbCBpZD0idGFibGUtYXR0cmlidXRlcyI+PHA+CitGaWxlcyB3aXRoIG5hbWVzIG9mIHRoZSBmb3JtICouYXRiIGFyZSBhdHRyaWJ1dGVzIHRhYmxlcywKK2FuZCB3aXRoIG5hbWVzIG9mIHRoZSBmb3JtICouYXRpIGFyZSBhdHRyaWJ1dGVzIHN1YnRhYmxlcy4KK1RoZXkgYXJlIHVzZWQgd2hlbiBCUkxUVFkKK2lzIGRpc3BsYXlpbmcgc2NyZWVuIGF0dHJpYnV0ZXMgcmF0aGVyIHRoYW4gc2NyZWVuIGNvbnRlbnQKKyhzZWUgdGhlIDxyZWYgaWQ9ImNvbW1hbmQtRElTUE1EIiBuYW1lPSJESVNQTUQiPiBjb21tYW5kKS4KK0VhY2ggb2YgdGhlIGVpZ2h0IGJyYWlsbGUgZG90cyByZXByZXNlbnRzCitvbmUgb2YgdGhlIGVpZ2h0IDx0dC9WR0EvIGF0dHJpYnV0ZSBiaXRzLgorCitUaGUgZm9sbG93aW5nIGF0dHJpYnV0ZXMgdGFibGVzIGFyZSBwcm92aWRlZDoKKzxkZXNjcmlwPgorICA8dGFnL2xlZnRfcmlnaHQvCisgICAgVGhlIGxlZnRoYW5kIGNvbHVtbiByZXByZXNlbnRzIHRoZSBmb3JlZ3JvdW5kIGNvbG91cnM6CisgICAgPGRlc2NyaXA+CisgICAgICA8dGFnL0RvdCAxL0JsdWUKKyAgICAgIDx0YWcvRG90IDIvR3JlZW4KKyAgICAgIDx0YWcvRG90IDMvUmVkCisgICAgICA8dGFnL0RvdCA3L0JyaWdodAorICAgIDwvZGVzY3JpcD4KKyAgICBUaGUgcmlnaHRoYW5kIGNvbHVtbiByZXByZXNlbnRzIHRoZSBiYWNrZ3JvdW5kIGNvbG91cnM6CisgICAgPGRlc2NyaXA+CisgICAgICA8dGFnL0RvdCA0L0JsdWUKKyAgICAgIDx0YWcvRG90IDUvR3JlZW4KKyAgICAgIDx0YWcvRG90IDYvUmVkCisgICAgICA8dGFnL0RvdCA4L0JsaW5rCisgICAgPC9kZXNjcmlwPgorICAgIEEgZG90IGlzIHJhaXNlZCB3aGVuIGl0cyBjb3JyZXNwb25kaW5nIGF0dHJpYnV0ZSBiaXQgaXMgb24uCisgICAgVGhpcyBpcyB0aGUgZGVmYXVsdCBhdHRyaWJ1dGVzIHRhYmxlCisgICAgYmVjYXVzZSBpdCdzIHRoZSBtb3N0IGludHVpdGl2ZS4KKyAgICBPbmUgb2YgaXRzIHByb2JsZW1zLCB0aG91Z2gsIGlzIHRoYXQgaXQncyBkaWZmaWN1bHQgdG8gZGlzY2VybgorICAgIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gbm9ybWFsICh3aGl0ZSBvbiBibGFjaykKKyAgICBhbmQgcmV2ZXJzZSAoYmxhY2sgb24gd2hpdGUpIHZpZGVvLgorICA8dGFnL2ludmxlZnRfcmlnaHQvCisgICAgVGhlIGxlZnRoYW5kIGNvbHVtbiByZXByZXNlbnRzIHRoZSBmb3JlZ3JvdW5kIGNvbG91cnM6CisgICAgPGRlc2NyaXA+CisgICAgICA8dGFnL0RvdCAxL0JsdWUKKyAgICAgIDx0YWcvRG90IDIvR3JlZW4KKyAgICAgIDx0YWcvRG90IDMvUmVkCisgICAgICA8dGFnL0RvdCA3L0JyaWdodAorICAgIDwvZGVzY3JpcD4KKyAgICBUaGUgcmlnaHRoYW5kIGNvbHVtbiByZXByZXNlbnRzIHRoZSBiYWNrZ3JvdW5kIGNvbG91cnM6CisgICAgPGRlc2NyaXA+CisgICAgICA8dGFnL0RvdCA0L0JsdWUKKyAgICAgIDx0YWcvRG90IDUvR3JlZW4KKyAgICAgIDx0YWcvRG90IDYvUmVkCisgICAgICA8dGFnL0RvdCA4L0JsaW5rCisgICAgPC9kZXNjcmlwPgorICAgIEEgYmFja2dyb3VuZCBiaXQgYmVpbmcgb24gdHJpZ2dlcnMgaXRzIGNvcnJlc3BvbmRpbmcgZG90LAorICAgIHdoZXJlYXMgYSBmb3JlZ3JvdW5kIGJpdCBiZWluZyBvZmYgdHJpZ2dlcnMgaXRzIGNvcnJlc3BvbmRpbmcgZG90LgorICAgIFRoaXMgdW5pbnR1aXRpdmUgbG9naWMgYWN0dWFsbHkgbWFrZXMgaXQgZWFzaWVyCisgICAgdG8gcmVhZCB0aGUgbW9zdCBjb21tb25seSB1c2VkIGF0dHJpYnV0ZSBjb21iaW5hdGlvbnMuCisgIDx0YWcvdXBwZXJfbG93ZXIvCisgICAgVGhlIHVwcGVyIHNxdWFyZSByZXByZXNlbnRzIHRoZSBmb3JlZ3JvdW5kIGNvbG91cnM6CisgICAgPGRlc2NyaXA+CisgICAgICA8dGFnL0RvdCAxL1JlZAorICAgICAgPHRhZy9Eb3QgNC9HcmVlbgorICAgICAgPHRhZy9Eb3QgMi9CbHVlCisgICAgICA8dGFnL0RvdCA1L0JyaWdodAorICAgIDwvZGVzY3JpcD4KKyAgICBUaGUgbG93ZXIgc3F1YXJlIHJlcHJlc2VudHMgdGhlIGJhY2tncm91bmQgY29sb3VyczoKKyAgICA8ZGVzY3JpcD4KKyAgICAgIDx0YWcvRG90IDMvUmVkCisgICAgICA8dGFnL0RvdCA2L0dyZWVuCisgICAgICA8dGFnL0RvdCA3L0JsdWUKKyAgICAgIDx0YWcvRG90IDgvQmxpbmsKKyAgICA8L2Rlc2NyaXA+CisgICAgQSBkb3QgaXMgcmFpc2VkIHdoZW4gaXRzIGNvcnJlc3BvbmRpbmcgYXR0cmlidXRlIGJpdCBpcyBvbi4KKzwvZGVzY3JpcD4KK1NlZSB0aGUgPHJlZiBpZD0ib3B0aW9ucy1hdHRyaWJ1dGVzLXRhYmxlIiBuYW1lPSItYSI+IGNvbW1hbmQgbGluZSBvcHRpb24sCit0aGUgPHJlZiBpZD0iY29uZmlndXJlLWF0dHJpYnV0ZXMtdGFibGUiIG5hbWU9ImF0dHJpYnV0ZXMtdGFibGUiPiBjb25maWd1cmF0aW9uIGZpbGUgZGlyZWN0aXZlLAorYW5kIHRoZSA8cmVmIGlkPSJidWlsZC1hdHRyaWJ1dGVzLXRhYmxlIiBuYW1lPSItLXdpdGgtYXR0cmlidXRlcy10YWJsZSI+IGJ1aWxkIG9wdGlvbgorZm9yIGRldGFpbHMgcmVnYXJkaW5nIGhvdyB0byB1c2UgYW4gYWx0ZXJuYXRlIGF0dHJpYnV0ZXMgdGFibGUuCisKKzxzZWN0Mj5BdHRyaWJ1dGVzIFRhYmxlIEZvcm1hdDxwPgorQW4gYXR0cmlidXRlcyB0YWJsZSBjb25zaXN0cyBvZiBhIHNlcXVlbmNlIG9mIGRpcmVjdGl2ZXMsIG9uZSBwZXIgbGluZSwKK3doaWNoIGRlZmluZSBob3cgY29tYmluYXRpb25zIG9mIDx0dC9WR0EvIGF0dHJpYnV0ZXMKK2FyZSB0byBiZSByZXByZXNlbnRlZCBpbiBicmFpbGxlLiAKKzx0dC9VVEYtOC8gY2hhcmFjdGVyIGVuY29kaW5nIG11c3QgYmUgdXNlZC4KK1doaXRlLXNwYWNlIChibGFua3MsIHRhYnMpIGF0IHRoZSBiZWdpbm5pbmcgb2YgYSBsaW5lLAorYXMgd2VsbCBhcyBiZWZvcmUgYW5kL29yIGFmdGVyIGFueSBvcGVyYW5kIG9mIGFueSBkaXJlY3RpdmUsCitpcyBpZ25vcmVkLgorTGluZXMgY29udGFpbmluZyBvbmx5IHdoaXRlLXNwYWNlIGFyZSBpZ25vcmVkLgorSWYgdGhlIGZpcnN0IG5vbi13aGl0ZS1zcGFjZSBjaGFyYWN0ZXIgb2YgYSBsaW5lIGlzICImbnVtOyIKK3RoZW4gdGhhdCBsaW5lIGlzIGEgY29tbWVudCBhbmQgaXMgaWdub3JlZC4KKworPHNlY3QyPkF0dHJpYnV0ZXMgVGFibGUgRGlyZWN0aXZlczxwPgorVGhlIGZvbGxvd2luZyBkaXJlY3RpdmVzIGFyZSBwcm92aWRlZDoKKzxkZXNjcmlwPgorICA8dGFnPjx0dC9kb3QvIDxlbS9kb3QvIDxlbS9zdGF0ZS8gJm51bTsgPGVtL2NvbW1lbnQvPC90YWc+CisgICAgVXNlIHRoZSA8dHQvZG90LyBkaXJlY3RpdmUgdG8gc3BlY2lmeQorICAgIHdoYXQgYSBzcGVjaWZpYyBkb3QgcmVwcmVzZW50cy4KKworICAgIDxkZXNjcmlwPgorICAgICAgPHRhZz48ZW0vZG90LzwvdGFnPgorICAgICAgICBUaGUgZG90IGJlaW5nIGRlZmluZWQuCisgICAgICAgIEl0IGlzIGEgc2luZ2xlIGRpZ2l0IHdpdGhpbiB0aGUgcmFuZ2UgPHR0LzEvLTx0dC84LyBhcyBkZWZpbmVkIGJ5IHRoZQorICAgICAgICA8cmVmIGlkPSJkb3RzIiBuYW1lPSJTdGFuZGFyZCBCcmFpbGxlIERvdCBOdW1iZXJpbmcgQ29udmVudGlvbiI+LgorICAgICAgPHRhZz48ZW0vc3RhdGUvPC90YWc+CisgICAgICAgIFdoYXQgdGhlIGRvdCByZXByZXNlbnRzLgorICAgICAgICBJdCBtYXkgYmU6CisgICAgICAgIDxkZXNjcmlwPgorICAgICAgICAgIDx0YWc+PHR0Lz0vPGVtL2F0dHJpYnV0ZS88L3RhZz5UaGUgZG90IGlzIHJhaXNlZCBpZiB0aGUgbmFtZWQgYXR0cmlidXRlIGlzIG9uLgorICAgICAgICAgIDx0YWc+PHR0LyZ0aWxkZTsvPGVtL2F0dHJpYnV0ZS88L3RhZz5UaGUgZG90IGlzIHJhaXNlZCBpZiB0aGUgbmFtZWQgYXR0cmlidXRlIGlzIG9mZi4KKyAgICAgICAgPC9kZXNjcmlwPgorCisgICAgICAgIFRoZSBuYW1lcyBvZiB0aGUgYXR0cmlidXRlIGJpdHMgYXJlOgorICAgICAgICA8ZGVzY3JpcD4KKyAgICAgICAgICA8dGFnLzBYMDEvPHR0L2ZnLWJsdWUvCisgICAgICAgICAgPHRhZy8wWDAyLzx0dC9mZy1ncmVlbi8KKyAgICAgICAgICA8dGFnLzBYMDQvPHR0L2ZnLXJlZC8KKyAgICAgICAgICA8dGFnLzBYMDgvPHR0L2ZnLWJyaWdodC8KKyAgICAgICAgICA8dGFnLzBYMTAvPHR0L2JnLWJsdWUvCisgICAgICAgICAgPHRhZy8wWDIwLzx0dC9iZy1ncmVlbi8KKyAgICAgICAgICA8dGFnLzBYNDAvPHR0L2JnLXJlZC8KKyAgICAgICAgICA8dGFnLzBYODAvPHR0L2JsaW5rLworICAgICAgICA8L2Rlc2NyaXA+CisgICAgPC9kZXNjcmlwPgorCisgICAgRXhhbXBsZXM6CisgICAgPGl0ZW1pemU+CisgICAgICA8aXRlbT48dHQvZG90IDEgPWZnLXJlZC8KKyAgICAgIDxpdGVtPjx0dC9kb3QgMiAmdGlsZGU7YmctYmx1ZS8KKyAgICA8L2l0ZW1pemU+CisgIDx0YWc+PHR0L2luY2x1ZGUvIDxlbS9maWxlLyAmbnVtOyA8ZW0vY29tbWVudC88L3RhZz4KKyAgICBVc2UgdGhlIDx0dC9pbmNsdWRlLyBkaXJlY3RpdmUgdG8gaW5jbHVkZSB0aGUgY29udGVudCBvZiBhbiBhdHRyaWJ1dGVzIHN1YnRhYmxlLgorICAgIEl0IGlzIHJlY3Vyc2l2ZSwgd2hpY2ggbWVhbnMgdGhhdAorICAgIGFueSBhdHRyaWJ1dGVzIHN1YnRhYmxlIGNhbiBpdHNlbGYgaW5jbHVkZSB5ZXQgYW5vdGhlciBhdHRyaWJ1dGVzIHN1YnRhYmxlLgorICAgIENhcmUgbXVzdCBiZSB0YWtlbiB0byBlbnN1cmUgdGhhdCBhbiAiaW5jbHVkZSBsb29wIiBpcyBub3QgY3JlYXRlZC4KKworICAgIDxkZXNjcmlwPgorICAgICAgPHRhZz48ZW0vZmlsZS88L3RhZz4KKyAgICAgICAgVGhlIGZpbGUgdG8gYmUgaW5jbHVkZWQuCisgICAgICAgIEl0IG1heSBiZSBlaXRoZXIgYSByZWxhdGl2ZSBvciBhbiBhYnNvbHV0ZSBwYXRoLgorICAgICAgICBJZiByZWxhdGl2ZSwgaXQgaXMgYW5jaG9yZWQgYXQgdGhlIGRpcmVjdG9yeSBjb250YWluaW5nIHRoZSBpbmNsdWRpbmcgZmlsZS4KKyAgICA8L2Rlc2NyaXA+Cis8L2Rlc2NyaXA+CisKKzxzZWN0MT5Db250cmFjdGlvbiBUYWJsZXM8bGFiZWwgaWQ9InRhYmxlLWNvbnRyYWN0aW9uIj48cD4KK0ZpbGVzIHdpdGggbmFtZXMgb2YgdGhlIGZvcm0gPHR0LyouY3RiLyBhcmUgY29udHJhY3Rpb24gdGFibGVzLAorYW5kIHdpdGggbmFtZXMgb2YgdGhlIGZvcm0gPHR0LyouY3RpLyBhcmUgY29udHJhY3Rpb24gc3VidGFibGVzLgorVGhleSBhcmUgdXNlZCBieSBCUkxUVFkgdG8gdHJhbnNsYXRlIGNoYXJhY3RlciBzZXF1ZW5jZXMgb24gdGhlIHNjcmVlbgoraW50byB0aGVpciBjb3JyZXNwb25kaW5nIGNvbnRyYWN0ZWQgYnJhaWxsZSByZXByZXNlbnRhdGlvbnMuCisKK0JSTFRUWSBwcmVzZW50cyBjb250cmFjdGVkIGJyYWlsbGUgaWY6Cis8aXRlbWl6ZT4KKyAgPGl0ZW0+CisgICAgQSBjb250cmFjdGlvbiB0YWJsZSBoYXMgYmVlbiBzZWxlY3RlZC4KKyAgICBTZWUgdGhlIDxyZWYgaWQ9Im9wdGlvbnMtY29udHJhY3Rpb24tdGFibGUiIG5hbWU9Ii1jIj4gY29tbWFuZCBsaW5lIG9wdGlvbgorICAgIGFuZCB0aGUgPHJlZiBpZD0iY29uZmlndXJlLWNvbnRyYWN0aW9uLXRhYmxlIiBuYW1lPSJjb250cmFjdGlvbi10YWJsZSI+IGNvbmZpZ3VyYXRpb24gZmlsZSBkaXJlY3RpdmUKKyAgICBmb3IgZGV0YWlscy4KKyAgPGl0ZW0+CisgICAgVGhlIDYtZG90IGJyYWlsbGUgZmVhdHVyZSBoYXMgYmVlbiBhY3RpdmF0ZWQuCisgICAgU2VlIHRoZSA8cmVmIGlkPSJjb21tYW5kLVNJWERPVFMiIG5hbWU9IlNJWERPVFMiPiBjb21tYW5kCisgICAgYW5kIHRoZSA8cmVmIGlkPSJwcmVmZXJlbmNlLXRleHQtc3R5bGUiIG5hbWU9IlRleHQgU3R5bGUiPiBwcmVmZXJlbmNlCisgICAgZm9yIGRldGFpbHMuCis8L2l0ZW1pemU+CitUaGlzIGZlYXR1cmUgaXNuJ3QgYXZhaWxhYmxlIGlmIHRoZQorPHJlZiBpZD0iYnVpbGQtY29udHJhY3RlZC1icmFpbGxlIiBuYW1lPSItLWRpc2FibGUtY29udHJhY3RlZC1icmFpbGxlIj4gYnVpbGQgb3B0aW9uIHdhcyBzcGVjaWZpZWQuCisKK1RoZSBmb2xsb3dpbmcgY29udHJhY3Rpb24gdGFibGVzIGFyZSBwcm92aWRlZDoKKzx0YWJsZSBsb2M9ImgiPgorICA8dGFidWxhciBjYT0ibGwiPgorICAgIE5hbWV8TGFuZ3VhZ2VACisgICAgJkNvbnRyYWN0aW9uVGFibGVzCisgIDwvdGFidWxhcj4KKzwvdGFibGU+CitTZWUgdGhlIDxyZWYgaWQ9Im9wdGlvbnMtY29udHJhY3Rpb24tdGFibGUiIG5hbWU9Ii1jIj4gY29tbWFuZCBsaW5lIG9wdGlvbiwKK2FuZCB0aGUgPHJlZiBpZD0iY29uZmlndXJlLWNvbnRyYWN0aW9uLXRhYmxlIiBuYW1lPSJjb250cmFjdGlvbi10YWJsZSI+IGNvbmZpZ3VyYXRpb24gZmlsZSBkaXJlY3RpdmUKK2ZvciBkZXRhaWxzIHJlZ2FyZGluZyBob3cgdG8gdXNlIGEgY29udHJhY3Rpb24gdGFibGUuCisKKzxzZWN0Mj5Db250cmFjdGlvbiBUYWJsZSBGb3JtYXQ8cD4KK0EgY29udHJhY3Rpb24gdGFibGUgY29uc2lzdHMgb2YgYSBzZXF1ZW5jZSBvZiBlbnRyaWVzLCBvbmUgcGVyIGxpbmUsCit3aGljaCBkZWZpbmUgaG93IGNoYXJhY3RlciBzZXF1ZW5jZXMgYXJlIHRvIGJlIHJlcHJlc2VudGVkIGluIGJyYWlsbGUuCis8dHQvVVRGLTgvIGNoYXJhY3RlciBlbmNvZGluZyBtdXN0IGJlIHVzZWQuCitXaGl0ZS1zcGFjZSAoYmxhbmtzLCB0YWJzKSBhdCB0aGUgYmVnaW5uaW5nIG9mIGEgbGluZSwKK2FzIHdlbGwgYXMgYmVmb3JlIGFuZC9vciBhZnRlciBhbnkgb3BlcmFuZCwKK2lzIGlnbm9yZWQuCitMaW5lcyBjb250YWluaW5nIG9ubHkgd2hpdGUtc3BhY2UgYXJlIGlnbm9yZWQuCitJZiB0aGUgZmlyc3Qgbm9uLXdoaXRlLXNwYWNlIGNoYXJhY3RlciBvZiBhIGxpbmUgaXMgIiZudW07IgordGhlbiB0aGF0IGxpbmUgaXMgYSBjb21tZW50IGFuZCBpcyBpZ25vcmVkLgorCitUaGUgZm9ybWF0IG9mIGEgY29udHJhY3Rpb24gdGFibGUgZW50cnkgaXM6Cis8dHNjcmVlbj48ZW0vZGlyZWN0aXZlLyA8ZW0vb3BlcmFuZC8gLi4uIFs8ZW0vY29tbWVudC9dPC90c2NyZWVuPgorRWFjaCBkaXJlY3RpdmUgaGFzIGEgc3BlY2lmaWMgbnVtYmVyIG9mIG9wZXJhbmRzLgorQW55IHRleHQgYmV5b25kIHRoZSBsYXN0IG9wZXJhbmQgb2YgYSBkaXJlY3RpdmUgaXMgaW50ZXJwcmV0ZWQgYXMgYSBjb21tZW50LgorVGhlIG9yZGVyIG9mIHRoZSBlbnRyaWVzIHdpdGhpbiBhIGNvbnRyYWN0aW9uIHRhYmxlIGlzLCBpbiBnZW5lcmFsLAorYW55dGhpbmcgdGhhdCBpcyBjb252ZW5pZW50IGZvciBpdHMgbWFpbnRhaW5lcihzKS4KK0FuIGVudHJ5IHdoaWNoIGRlZmluZXMgYW4gZW50aXR5LCBlLmcuIDx0dC9jbGFzcy8sCittdXN0IHByZWNlZGUgYWxsIHJlZmVyZW5jZXMgdG8gdGhhdCBlbnRpdHkuCisKK0VudHJpZXMgd2hpY2ggbWF0Y2ggY2hhcmFjdGVyIHNlcXVlbmNlcworYXJlIGF1dG9tYXRpY2FsbHkgcmVhcnJhbmdlZCBmcm9tIGxvbmdlc3QgdG8gc2hvcnRlc3QKK3NvIHRoYXQgbG9uZ2VyIG1hdGNoZXMgYXJlIGFsd2F5cyBwcmVmZXJyZWQuCitJZiBtb3JlIHRoYW4gb25lIGVudHJ5IG1hdGNoZXMgdGhlIHNhbWUgY2hhcmFjdGVyIHNlcXVlbmNlCit0aGVuIHRoZWlyIG9yaWdpbmFsIHRhYmxlIG9yZGVyaW5nIGlzIG1haW50YWluZWQuCitUaHVzLCB0aGUgc2FtZSBzZXF1ZW5jZSBtYXkgYmUgdHJhbnNsYXRlZCBkaWZmZXJlbnRseSB1bmRlciBkaWZmZXJlbnQgY2lyY3Vtc3RhbmNlcy4KKworPHNlY3QyPkNvbnRyYWN0aW9uIFRhYmxlIE9wZXJhbmRzPHA+Cis8ZGVzY3JpcD4KKyAgPHRhZz48ZW0vY2hhcmFjdGVycy88L3RhZz4KKyAgICBUaGUgZmlyc3Qgb3BlcmFuZCBvZiBhIGNoYXJhY3RlciBzZXF1ZW5jZSBtYXRjaGluZyBkaXJlY3RpdmUKKyAgICBpcyB0aGUgY2hhcmFjdGVyIHNlcXVlbmNlIHRvIGJlIG1hdGNoZWQuCisgICAgRWFjaCBjaGFyYWN0ZXIgd2l0aGluIHRoZSBzZXF1ZW5jZSBtYXkgYmU6CisgICAgPGl0ZW1pemU+CisgICAgICA8aXRlbT4KKyAgICAgICAgQW55IHNpbmdsZSBjaGFyYWN0ZXIgb3RoZXIgdGhhbiBhIGJhY2tzbGFzaCBvciBhIHdoaXRlLXNwYWNlIGNoYXJhY3Rlci4KKyAgICAgIDxpdGVtPgorICAgICAgICBBIGJhY2tzbGFzaC1wcmVmaXhlZCBzcGVjaWFsIGNoYXJhY3Rlci4KKyAgICAgICAgVGhlc2UgYXJlOgorICAgICAgICA8ZGVzY3JpcD4KKyAgICAgICAgLSA8dGFnL1xiL1RoZSBiYWNrc3BhY2UgY2hhcmFjdGVyLgorICAgICAgICAtIDx0YWcvXGYvVGhlIGZvcm1mZWVkIGNoYXJhY3Rlci4KKyAgICAgICAgLSA8dGFnL1xuL1RoZSBuZXdsaW5lIGNoYXJhY3Rlci4KKyAgICAgICAgLSA8dGFnL1xvJm51bTsmbnVtOyZudW07L1RoZSB0aHJlZS1kaWdpdCBvY3RhbCByZXByZXNlbnRhdGlvbiBvZiBhIGNoYXJhY3Rlci4KKyAgICAgICAgLSA8dGFnL1xyL1RoZSBjYXJyaWFnZSByZXR1cm4gY2hhcmFjdGVyLgorICAgICAgICAtIDx0YWcvXHMvVGhlIHNwYWNlIGNoYXJhY3Rlci4KKyAgICAgICAgLSA8dGFnL1x0L1RoZSBob3Jpem9udGFsIHRhYiBjaGFyYWN0ZXIuCisgICAgICAgIC0gPHRhZy9cdSZudW07Jm51bTsmbnVtOyZudW07L1RoZSBmb3VyLWRpZ2l0IGhleGFkZWNpbWFsIHJlcHJlc2VudGF0aW9uIG9mIGEgY2hhcmFjdGVyLgorICAgICAgICAtIDx0YWcvXFUmbnVtOyZudW07Jm51bTsmbnVtOyZudW07Jm51bTsmbnVtOyZudW07L1RoZSBlaWdodC1kaWdpdCBoZXhhZGVjaW1hbCByZXByZXNlbnRhdGlvbiBvZiBhIGNoYXJhY3Rlci4KKyAgICAgICAgLSA8dGFnL1x2L1RoZSB2ZXJ0aWNhbCB0YWIgY2hhcmFjdGVyLgorICAgICAgICAtIDx0YWcvXHgmbnVtOyZudW07L1RoZSB0d28tZGlnaXQgaGV4YWRlY2ltYWwgcmVwcmVzZW50YXRpb24gb2YgYSBjaGFyYWN0ZXIuCisgICAgICAgIC0gPHRhZy9cWCZudW07Jm51bTsvLi4uICh0aGUgY2FzZSBvZiB0aGUgWCBhbmQgb2YgdGhlIGRpZ2l0cyBpc24ndCBzaWduaWZpY2FudCkKKyAgICAgICAgLSA8dGFnL1wmbnVtOy9BIGxpdGVyYWwgbnVtYmVyIHNpZ24uCisgICAgICAgIC0gPHRhZy9cJmx0O25hbWUmZ3Q7L1RoZSBVbmljb2RlIG5hbWUgb2YgYSBjaGFyYWN0ZXIgKHVzZSBfIGZvciBzcGFjZSkuCisgICAgICAgIC0gPHRhZy9cXC9BIGxpdGVyYWwgYmFja3NsYXNoLgorICAgICAgICA8L2Rlc2NyaXA+CisgICAgPC9pdGVtaXplPgorICA8dGFnPjxlbS9yZXByZXNlbnRhdGlvbi88L3RhZz4KKyAgICBUaGUgc2Vjb25kIG9wZXJhbmQgb2YgdGhvc2UgY2hhcmFjdGVyIHNlcXVlbmNlIG1hdGNoaW5nIGRpcmVjdGl2ZXMgd2hpY2ggaGF2ZSBvbmUKKyAgICBpcyB0aGUgYnJhaWxsZSByZXByZXNlbnRhdGlvbiBvZiB0aGUgc2VxdWVuY2UuCisgICAgRWFjaCBicmFpbGxlIGNlbGwgaXMgc3BlY2lmaWVkIGFzIGEgc2VxdWVuY2Ugb2Ygb25lIHRvIGVpZ2h0IGRvdCBudW1iZXJzLgorICAgIEEgZG90IG51bWJlciBpcyBhIGRpZ2l0IHdpdGhpbiB0aGUgcmFuZ2UgPHR0LzEvLTx0dC84LyBhcyBkZWZpbmVkIGJ5IHRoZQorICAgIDxyZWYgaWQ9ImRvdHMiIG5hbWU9IlN0YW5kYXJkIEJyYWlsbGUgRG90IE51bWJlcmluZyBDb252ZW50aW9uIj4uCisgICAgVGhlIHNwZWNpYWwgZG90IG51bWJlciA8dHQvMC8sCisgICAgd2hpY2ggbWF5IG5vdCBiZSB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGggYW55IG90aGVyIGRvdCBudW1iZXIsCisgICAgbWVhbnMgbm8gZG90cy4KKzwvZGVzY3JpcD4KKworPHNlY3QyPk9wY29kZXM8bGFiZWwgaWQ9ImNvbnRyYWN0aW9uLW9wY29kZXMiPjxwPgorQW4gb3Bjb2RlIGlzIGEga2V5d29yZCB3aGljaCB0ZWxscyB0aGUgdHJhbnNsYXRvciBob3cgdG8gaW50ZXJwcmV0IHRoZSBvcGVyYW5kcy4KK1RoZSBvcGNvZGVzIGFyZSBncm91cGVkIGhlcmUgYnkgZnVuY3Rpb24uCisKKzxzZWN0Mz5UYWJsZSBBZG1pbmlzdHJhdGlvbjxsYWJlbCBpZD0iY29udHJhY3Rpb24tb3Bjb2Rlcy1hZG1pbmlzdHJhdGlvbiI+PHA+CitUaGVzZSBvcGNvZGVzIG1ha2UgaXQgZWFzaWVyIHRvIHdyaXRlIGNvbnRyYWN0aW9uIHRhYmxlcy4KK1RoZXkgaGF2ZSBubyBkaXJlY3QgZWZmZWN0IG9uIHRoZSBjaGFyYWN0ZXIgdHJhbnNsYXRpb24uCis8ZGVzY3JpcD4KKyAgPHRhZz48dHQvaW5jbHVkZS8gPGVtL3BhdGgvPGxhYmVsIGlkPSJjb250cmFjdGlvbi1vcGNvZGUtaW5jbHVkZSI+PC90YWc+CisgICAgSW5jbHVkZSB0aGUgY29udGVudHMgb2YgYW5vdGhlciBmaWxlLgorICAgIE5lc3RpbmcgY2FuIGJlIHRvIGFueSBkZXB0aC4KKyAgICBSZWxhdGl2ZSBwYXRocyBhcmUgYW5jaG9yZWQgYXQgdGhlIGRpcmVjdG9yeSBvZiB0aGUgaW5jbHVkaW5nIGZpbGUuCisgIDx0YWc+PHR0L2xvY2FsZS8gPGVtL2xvY2FsZS88bGFiZWwgaWQ9ImNvbnRyYWN0aW9uLW9wY29kZS1sb2NhbGUiPjwvdGFnPgorICAgIERlZmluZSB0aGUgbG9jYWxlIGZvciBjaGFyYWN0ZXIgaW50ZXJwcmV0YXRpb24KKyAgICAobG93ZXJjYXNlLCB1cHBlcmNhc2UsIG51bWVyaWMsIGV0Yy4pLgorICAgIFRoZSBsb2NhbGUgbWF5IGJlIHNwZWNpZmllZCBhczoKKyAgICA8ZGVzY3JpcD4KKyAgICAgIDx0YWc+PGVtL2xhbmd1YWdlL1s8dHQvXy88ZW0vY291bnRyeS9dWzx0dC8uLzxlbS9jaGFyc2V0L11bPHR0L0AvPGVtL21vZGlmaWVyL108L3RhZz4KKyAgICAgICAgVGhlIDxlbS9sYW5ndWFnZS8gY29tcG9uZW50IGlzIHJlcXVpcmVkIGFuZCBzaG91bGQgYmUgYSB0d28tbGV0dGVyIDx0dC9JU08tNjM5LyBsYW5ndWFnZSBjb2RlLgorICAgICAgICBUaGUgPGVtL2NvdW50cnkvIGNvbXBvbmVudCBpcyBvcHRpb25hbCBhbmQgc2hvdWxkIGJlIGEgdHdvLWxldHRlciA8dHQvSVNPLTMxNjYvIGNvdW50cnkgY29kZS4KKyAgICAgICAgVGhlIDxlbS9jaGFyc2V0LyBjb21wb25lbnQgaXMgb3B0aW9uYWwgYW5kIHNob3VsZCBiZSBhIGNoYXJhY3RlciBzZXQgbmFtZSwgZS5nLiA8dHQvSVNPLTg4NTktMS8uCisgICAgICA8dGFnL0MvCisgICAgICAgIDctYml0IEFTQ0lJLgorICAgICAgPHRhZy8tLworICAgICAgICBObyBsb2NhbGUuCisgICAgPC9kZXNjcmlwPgorICAgIFRoZSBsYXN0IGxvY2FsZSBzcGVjaWZpY2F0aW9uIGFwcGxpZXMgdG8gdGhlIGVudGlyZSB0YWJsZS4KKyAgICBJZiB0aGlzIG9wY29kZSBpc24ndCB1c2VkIHRoZW4gdGhlIDx0dC9DLyBsb2NhbGUgaXMgYXNzdW1lZC4KKzwvZGVzY3JpcD4KKworPHNlY3QzPlNwZWNpYWwgU3ltYm9sIERlZmluaXRpb248bGFiZWwgaWQ9ImNvbnRyYWN0aW9uLW9wY29kZXMtc3ltYm9scyI+PHA+CitUaGVzZSBvcGNvZGVzIGRlZmluZSBzcGVjaWFsIHN5bWJvbHMgd2hpY2ggbXVzdCBiZQoraW5zZXJ0ZWQgaW50byB0aGUgYnJhaWxsZSB0ZXh0IGluIG9yZGVyIHRvIGNsYXJpZnkgaXQuCis8ZGVzY3JpcD4KKyAgPHRhZz48dHQvY2Fwc2lnbi8gPGVtL2RvdHMvPGxhYmVsIGlkPSJjb250cmFjdGlvbi1vcGNvZGUtY2Fwc2lnbiI+PC90YWc+CisgICAgVGhlIHN5bWJvbCB3aGljaCBjYXBpdGFsaXplcyBhIHNpbmdsZSBsZXR0ZXIuCisgIDx0YWc+PHR0L2JlZ2NhcHMvIDxlbS9kb3RzLzxsYWJlbCBpZD0iY29udHJhY3Rpb24tb3Bjb2RlLWJlZ2NhcHMiPjwvdGFnPgorICAgIFRoZSBzeW1ib2wgd2hpY2ggYmVnaW5zIGEgYmxvY2sgb2YgY2FwaXRhbCBsZXR0ZXJzIHdpdGhpbiBhIHdvcmQuCisgIDx0YWc+PHR0L2VuZGNhcHMvIDxlbS9kb3RzLzxsYWJlbCBpZD0iY29udHJhY3Rpb24tb3Bjb2RlLWVuZGNhcHMiPjwvdGFnPgorICAgIFRoZSBzeW1ib2wgd2hpY2ggZW5kcyBhIGJsb2NrIG9mIGNhcGl0YWwgbGV0dGVycyB3aXRoaW4gYSB3b3JkLgorICA8dGFnPjx0dC9sZXRzaWduLyA8ZW0vZG90cy88bGFiZWwgaWQ9ImNvbnRyYWN0aW9uLW9wY29kZS1sZXRzaWduIj48L3RhZz4KKyAgICBUaGUgc3ltYm9sIHdoaWNoIG1hcmtzIGEgbGV0dGVyIHdoaWNoIGlzbid0IHBhcnQgb2YgYSB3b3JkLgorICA8dGFnPjx0dC9udW1zaWduLyA8ZW0vZG90cy88bGFiZWwgaWQ9ImNvbnRyYWN0aW9uLW9wY29kZS1udW1zaWduIj48L3RhZz4KKyAgICBUaGUgc3ltYm9sIHdoaWNoIG1hcmtzIHRoZSBiZWdpbm5pbmcgb2YgYSBudW1iZXIuCis8L2Rlc2NyaXA+CisKKzxzZWN0Mz5DaGFyYWN0ZXIgVHJhbnNsYXRpb248bGFiZWwgaWQ9ImNvbnRyYWN0aW9uLW9wY29kZXMtdHJhbnNsYXRpb24iPjxwPgorVGhlc2Ugb3Bjb2RlcyBkZWZpbmUgdGhlIGJyYWlsbGUgcmVwcmVzZW50YXRpb25zIGZvciBjaGFyYWN0ZXIgc2VxdWVuY2VzLgorRWFjaCBvZiB0aGVtIGRlZmluZXMgYW4gZW50cnkgd2l0aGluIHRoZSBjb250cmFjdGlvbiB0YWJsZS4KK1RoZXNlIGVudHJpZXMgbWF5IGJlIGRlZmluZWQgaW4gYW55IG9yZGVyIGV4Y2VwdCwgYXMgbm90ZWQgYmVsb3csCit3aGVuIHRoZXkgZGVmaW5lIGFsdGVybmF0ZSByZXByZXNlbnRhdGlvbnMgZm9yIHRoZSBzYW1lIGNoYXJhY3RlciBzZXF1ZW5jZS4KKworRWFjaCBvZiB0aGVzZSBvcGNvZGVzIGhhcworYSA8ZW0vY2hhcmFjdGVycy8gb3BlcmFuZCAod2hpY2ggbXVzdCBiZSBzcGVjaWZpZWQgYXMgYSA8ZW0vc3RyaW5nLyksCithbmQgYSBidWlsdC1pbiBjb25kaXRpb24gZ292ZXJuaW5nIGl0cyBlbGlnaWJpbGl0eSBmb3IgdXNlLgorVGhlIHRleHQgaXMgcHJvY2Vzc2VkIHN0cmljdGx5IGZyb20gbGVmdCB0byByaWdodCwgY2hhcmFjdGVyIGJ5IGNoYXJhY3RlciwKK3dpdGggdGhlIG1vc3QgZWxpZ2libGUgZW50cnkgZm9yIGVhY2ggcG9zaXRpb24gYmVpbmcgdXNlZC4KK0lmIHRoZXJlJ3MgbW9yZSB0aGFuIG9uZSBlbGlnaWJsZSBlbnRyeSBmb3IgYSBnaXZlbiBwb3NpdGlvbiwKK3RoZW4gdGhlIG9uZSB3aXRoIHRoZSBsb25nZXN0IGNoYXJhY3RlciBzdHJpbmcgaXMgdXNlZC4KK0lmIHRoZXJlJ3MgbW9yZSB0aGFuIG9uZSBlbGlnaWJsZSBlbnRyeSBmb3IgdGhlIHNhbWUgY2hhcmFjdGVyIHN0cmluZywKK3RoZW4gdGhlIG9uZSBkZWZpbmVkIG5lYXJlc3QgdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgdGFibGUgaXMgdXNlZAorKHRoaXMgaXMgdGhlIG9ubHkgb3JkZXIgZGVwZW5kZW5jeSkuCisKK01hbnkgb2YgdGhlc2Ugb3Bjb2RlcyBoYXZlIGEgPGVtL2RvdHMvIG9wZXJhbmQKK3doaWNoIGRlZmluZXMgdGhlIGJyYWlsbGUgcmVwcmVzZW50YXRpb24gZm9yIGl0cyA8ZW0vY2hhcmFjdGVycy8gb3BlcmFuZC4KK0l0IG1heSBhbHNvIGJlIHNwZWNpZmllZCBhcyBhbiBlcXVhbHMgc2lnbiAoPHR0Lz0vKSwKK2luIHdoaWNoIGNhc2UgaXQgbWVhbnMgb25lIG9mIHR3byB0aGluZ3MuCitJZiB0aGUgZW50cnkgaXMgZm9yIGEgc2luZ2xlIGNoYXJhY3RlciwKK3RoZW4gaXQgbWVhbnMgdGhhdCB0aGUgY3VycmVudGx5IHNlbGVjdGVkIGNvbXB1dGVyIGJyYWlsbGUgcmVwcmVzZW50YXRpb24KKyhzZWUgdGhlIDxyZWYgaWQ9Im9wdGlvbnMtdGV4dC10YWJsZSIgbmFtZT0iLXQiPiBjb21tYW5kIGxpbmUgb3B0aW9uCithbmQgdGhlIDxyZWYgaWQ9ImNvbmZpZ3VyZS10ZXh0LXRhYmxlIiBuYW1lPSJ0ZXh0LXRhYmxlIj4gY29uZmlndXJhdGlvbiBmaWxlIGRpcmVjdGl2ZSkKK2ZvciB0aGF0IGNoYXJhY3RlciBpcyB0byBiZSB1c2VkLgorSWYgaXQncyBmb3IgYSBtdWx0aS1jaGFyYWN0ZXIgc2VxdWVuY2UsCit0aGVuIHRoZSBkZWZhdWx0IHJlcHJlc2VudGF0aW9uIGZvciBlYWNoIGNoYXJhY3RlcgorKHNlZSA8cmVmIGlkPSJjb250cmFjdGlvbi1vcGNvZGUtYWx3YXlzIiBuYW1lPSJhbHdheXMiPikKK3dpdGhpbiB0aGUgc2VxdWVuY2UgaXMgdG8gYmUgdXNlZC4KKworU29tZSBzcGVjaWFsIHRlcm1zIGFyZSB1c2VkIHdpdGhpbiB0aGUgZGVzY3JpcHRpb25zIG9mIHRoZXNlIG9wY29kZXMuCis8ZGVzY3JpcD4KKyAgPHRhZy93b3JkLworICAgIEEgbWF4aW1hbCBzZXF1ZW5jZSBvZiBvbmUgb3IgbW9yZSBjb25zZWN1dGl2ZSBsZXR0ZXJzLgorPC9kZXNjcmlwPgorCitOb3csIGZpbmFsbHksIGhlcmUgYXJlIHRoZSBvcGNvZGUgZGVzY3JpcHRpb25zIHRoZW1zZWx2ZXM6Cis8ZGVzY3JpcD4KKyAgPHRhZz48dHQvbGl0ZXJhbC8gPGVtL2NoYXJhY3RlcnMvPGxhYmVsIGlkPSJjb250cmFjdGlvbi1vcGNvZGUtbGl0ZXJhbCI+PC90YWc+CisgICAgVHJhbnNsYXRlIHRoZSBlbnRpcmUgd2hpdGUtc3BhY2UtYm91bmRlZCBjb250YWluaW5nIGNoYXJhY3RlciBzZXF1ZW5jZSBpbnRvIGNvbXB1dGVyIGJyYWlsbGUKKyAgICAoc2VlIHRoZSA8cmVmIGlkPSJvcHRpb25zLXRleHQtdGFibGUiIG5hbWU9Ii10Ij4gY29tbWFuZCBsaW5lIG9wdGlvbgorICAgIGFuZCB0aGUgPHJlZiBpZD0iY29uZmlndXJlLXRleHQtdGFibGUiIG5hbWU9InRleHQtdGFibGUiPiBjb25maWd1cmF0aW9uIGZpbGUgZGlyZWN0aXZlKS4KKyAgPHRhZz48dHQvcmVwbGFjZS8gPGVtL2NoYXJhY3RlcnMvIDxlbS9jaGFyYWN0ZXJzLzxsYWJlbCBpZD0iY29udHJhY3Rpb24tb3Bjb2RlLXJlcGxhY2UiPjwvdGFnPgorICAgIFJlcGxhY2UgdGhlIGZpcnN0IHNldCBvZiBjaGFyYWN0ZXJzLCBubyBtYXR0ZXIgd2hlcmUgdGhleSBhcHBlYXIsIHdpdGggdGhlIHNlY29uZC4KKyAgICBUaGUgcmVwbGFjZWQgY2hhcmFjdGVycyBhcmVuJ3QgcmVwcm9jZXNzZWQuCisgIDx0YWc+PHR0L2Fsd2F5cy8gPGVtL2NoYXJhY3RlcnMvIDxlbS9kb3RzLzxsYWJlbCBpZD0iY29udHJhY3Rpb24tb3Bjb2RlLWFsd2F5cyI+PC90YWc+CisgICAgVHJhbnNsYXRlIHRoZSBjaGFyYWN0ZXJzIG5vIG1hdHRlciB3aGVyZSB0aGV5IGFwcGVhci4KKyAgICBJZiB0aGVyZSdzIG9ubHkgb25lIGNoYXJhY3RlciwgdGhlbiwgaW4gYWRkaXRpb24sCisgICAgZGVmaW5lIHRoZSBkZWZhdWx0IHJlcHJlc2VudGF0aW9uIGZvciB0aGF0IGNoYXJhY3Rlci4KKyAgPHRhZz48dHQvcmVwZWF0YWJsZS8gPGVtL2NoYXJhY3RlcnMvIDxlbS9kb3RzLzxsYWJlbCBpZD0iY29udHJhY3Rpb24tb3Bjb2RlLXJlcGVhdGFibGUiPjwvdGFnPgorICAgIFRyYW5zbGF0ZSB0aGUgY2hhcmFjdGVycyBubyBtYXR0ZXIgd2hlcmUgdGhleSBhcHBlYXIuCisgICAgSWdub3JlIGFueSBjb25zZWN1dGl2ZSByZXBldGl0aW9ucyBvZiB0aGUgc2FtZSBzZXF1ZW5jZS4KKyAgPHRhZz48dHQvbGFyZ2VzaWduLyA8ZW0vY2hhcmFjdGVycy8gPGVtL2RvdHMvPGxhYmVsIGlkPSJjb250cmFjdGlvbi1vcGNvZGUtbGFyZ2VzaWduIj48L3RhZz4KKyAgICBUcmFuc2xhdGUgdGhlIGNoYXJhY3RlcnMgbm8gbWF0dGVyIHdoZXJlIHRoZXkgYXBwZWFyLgorICAgIFJlbW92ZSB3aGl0ZS1zcGFjZSBiZXR3ZWVuIGNvbnNlY3V0aXZlIHdvcmRzIG1hdGNoZWQgYnkgdGhpcyBvcGNvZGUuCisgIDx0YWc+PHR0L2xhc3RsYXJnZXNpZ24vIDxlbS9jaGFyYWN0ZXJzLyA8ZW0vZG90cy88bGFiZWwgaWQ9ImNvbnRyYWN0aW9uLW9wY29kZS1sYXN0bGFyZ2VzaWduIj48L3RhZz4KKyAgICBUcmFuc2xhdGUgdGhlIGNoYXJhY3RlcnMgbm8gbWF0dGVyIHdoZXJlIHRoZXkgYXBwZWFyLgorICAgIFJlbW92ZSBwcmVjZWRpbmcgd2hpdGUtc3BhY2UgaWYgdGhlIHByZXZpb3VzIHdvcmQgd2FzIG1hdGNoZWQgYnkgdGhlCisgICAgPHJlZiBpZD0iY29udHJhY3Rpb24tb3Bjb2RlLWxhcmdlc2lnbiIgbmFtZT0ibGFyZ2VzaWduIj4gb3Bjb2RlLgorICA8dGFnPjx0dC93b3JkLyA8ZW0vY2hhcmFjdGVycy8gPGVtL2RvdHMvPGxhYmVsIGlkPSJjb250cmFjdGlvbi1vcGNvZGUtd29yZCI+PC90YWc+CisgICAgVHJhbnNsYXRlIHRoZSBjaGFyYWN0ZXJzIGlmIHRoZXkncmUgYSB3b3JkLgorICA8dGFnPjx0dC9qb2lud29yZC8gPGVtL2NoYXJhY3RlcnMvIDxlbS9kb3RzLzxsYWJlbCBpZD0iY29udHJhY3Rpb24tb3Bjb2RlLWpvaW53b3JkIj48L3RhZz4KKyAgICBUcmFuc2xhdGUgdGhlIGNoYXJhY3RlcnMgaWYgdGhleSdyZSBhIHdvcmQuCisgICAgUmVtb3ZlIHRoZSBmb2xsb3dpbmcgd2hpdGUtc3BhY2UgaWYgdGhlIGZpcnN0IGNoYXJhY3RlciBhZnRlciBpdCBpcyBhIGxldHRlci4KKyAgPHRhZz48dHQvbG93d29yZC8gPGVtL2NoYXJhY3RlcnMvIDxlbS9kb3RzLzxsYWJlbCBpZD0iY29udHJhY3Rpb24tb3Bjb2RlLWxvd3dvcmQiPjwvdGFnPgorICAgIFRyYW5zbGF0ZSB0aGUgY2hhcmFjdGVycyBpZiB0aGV5J3JlIGEgd2hpdGUtc3BhY2UtYm91bmRlZCB3b3JkLgorICA8dGFnPjx0dC9jb250cmFjdGlvbi8gPGVtL2NoYXJhY3RlcnMvPGxhYmVsIGlkPSJjb250cmFjdGlvbi1vcGNvZGUtY29udHJhY3Rpb24iPjwvdGFnPgorICAgIFByZWZpeCB0aGUgY2hhcmFjdGVycyB3aXRoIGEgbGV0dGVyIHNpZ24KKyAgICAoc2VlIDxyZWYgaWQ9ImNvbnRyYWN0aW9uLW9wY29kZS1sZXRzaWduIiBuYW1lPSJsZXRzaWduIj4pCisgICAgaWYgdGhleSdyZSBhIHdvcmQuCisgIDx0YWc+PHR0L3N1ZndvcmQvIDxlbS9jaGFyYWN0ZXJzLyA8ZW0vZG90cy88bGFiZWwgaWQ9ImNvbnRyYWN0aW9uLW9wY29kZS1zdWZ3b3JkIj48L3RhZz4KKyAgICBUcmFuc2xhdGUgdGhlIGNoYXJhY3RlcnMgaWYgdGhleSdyZSBlaXRoZXIgYSB3b3JkIG9yIGF0IHRoZSBiZWdpbm5pbmcgb2YgYSB3b3JkLgorICA8dGFnPjx0dC9wcmZ3b3JkLyA8ZW0vY2hhcmFjdGVycy8gPGVtL2RvdHMvPGxhYmVsIGlkPSJjb250cmFjdGlvbi1vcGNvZGUtcHJmd29yZCI+PC90YWc+CisgICAgVHJhbnNsYXRlIHRoZSBjaGFyYWN0ZXJzIGlmIHRoZXkncmUgZWl0aGVyIGEgd29yZCBvciBhdCB0aGUgZW5kIG9mIGEgd29yZC4KKyAgPHRhZz48dHQvYmVnd29yZC8gPGVtL2NoYXJhY3RlcnMvIDxlbS9kb3RzLzxsYWJlbCBpZD0iY29udHJhY3Rpb24tb3Bjb2RlLWJlZ3dvcmQiPjwvdGFnPgorICAgIFRyYW5zbGF0ZSB0aGUgY2hhcmFjdGVycyBpZiB0aGV5J3JlIGF0IHRoZSBiZWdpbm5pbmcgb2YgYSB3b3JkLgorICA8dGFnPjx0dC9iZWdtaWR3b3JkLyA8ZW0vY2hhcmFjdGVycy8gPGVtL2RvdHMvPGxhYmVsIGlkPSJjb250cmFjdGlvbi1vcGNvZGUtYmVnbWlkd29yZCI+PC90YWc+CisgICAgVHJhbnNsYXRlIHRoZSBjaGFyYWN0ZXJzIGlmIHRoZXkncmUgZWl0aGVyIGF0IHRoZSBiZWdpbm5pbmcgb3IgaW4gdGhlIG1pZGRsZSBvZiBhIHdvcmQuCisgIDx0YWc+PHR0L21pZHdvcmQvIDxlbS9jaGFyYWN0ZXJzLyA8ZW0vZG90cy88bGFiZWwgaWQ9ImNvbnRyYWN0aW9uLW9wY29kZS1taWR3b3JkIj48L3RhZz4KKyAgICBUcmFuc2xhdGUgdGhlIGNoYXJhY3RlcnMgaWYgdGhleSdyZSBpbiB0aGUgbWlkZGxlIG9mIGEgd29yZC4KKyAgPHRhZz48dHQvbWlkZW5kd29yZC8gPGVtL2NoYXJhY3RlcnMvIDxlbS9kb3RzLzxsYWJlbCBpZD0iY29udHJhY3Rpb24tb3Bjb2RlLW1pZGVuZHdvcmQiPjwvdGFnPgorICAgIFRyYW5zbGF0ZSB0aGUgY2hhcmFjdGVycyBpZiB0aGV5J3JlIGVpdGhlciBpbiB0aGUgbWlkZGxlIG9yIGF0IHRoZSBlbmQgb2YgYSB3b3JkLgorICA8dGFnPjx0dC9lbmR3b3JkLyA8ZW0vY2hhcmFjdGVycy8gPGVtL2RvdHMvPGxhYmVsIGlkPSJjb250cmFjdGlvbi1vcGNvZGUtZW5kd29yZCI+PC90YWc+CisgICAgVHJhbnNsYXRlIHRoZSBjaGFyYWN0ZXJzIGlmIHRoZXkncmUgYXQgdGhlIGVuZCBvZiBhIHdvcmQuCisgIDx0YWc+PHR0L3ByZXB1bmMvIDxlbS9jaGFyYWN0ZXJzLyA8ZW0vZG90cy88bGFiZWwgaWQ9ImNvbnRyYWN0aW9uLW9wY29kZS1wcmVwdW5jIj48L3RhZz4KKyAgICBUcmFuc2xhdGUgdGhlIGNoYXJhY3RlcnMgaWYgdGhleSdyZSBwYXJ0IG9mIHB1bmN0dWF0aW9uIGF0IHRoZSBiZWdpbm5pbmcgb2YgYSB3b3JkLgorICA8dGFnPjx0dC9wb3N0cHVuYy8gPGVtL2NoYXJhY3RlcnMvIDxlbS9kb3RzLzxsYWJlbCBpZD0iY29udHJhY3Rpb24tb3Bjb2RlLXBvc3RwdW5jIj48L3RhZz4KKyAgICBUcmFuc2xhdGUgdGhlIGNoYXJhY3RlcnMgaWYgdGhleSdyZSBwYXJ0IG9mIHB1bmN0dWF0aW9uIGF0IHRoZSBlbmQgb2YgYSB3b3JkLgorICA8dGFnPjx0dC9iZWdudW0vIDxlbS9jaGFyYWN0ZXJzLyA8ZW0vZG90cy88bGFiZWwgaWQ9ImNvbnRyYWN0aW9uLW9wY29kZS1iZWdudW0iPjwvdGFnPgorICAgIFRyYW5zbGF0ZSB0aGUgY2hhcmFjdGVycyBpZiB0aGV5J3JlIGF0IHRoZSBiZWdpbm5pbmcgb2YgYSBudW1iZXIuCisgIDx0YWc+PHR0L21pZG51bS8gPGVtL2NoYXJhY3RlcnMvIDxlbS9kb3RzLzxsYWJlbCBpZD0iY29udHJhY3Rpb24tb3Bjb2RlLW1pZG51bSI+PC90YWc+CisgICAgVHJhbnNsYXRlIHRoZSBjaGFyYWN0ZXJzIGlmIHRoZXkncmUgaW4gdGhlIG1pZGRsZSBvZiBhIG51bWJlci4KKyAgPHRhZz48dHQvZW5kbnVtLyA8ZW0vY2hhcmFjdGVycy8gPGVtL2RvdHMvPGxhYmVsIGlkPSJjb250cmFjdGlvbi1vcGNvZGUtZW5kbnVtIj48L3RhZz4KKyAgICBUcmFuc2xhdGUgdGhlIGNoYXJhY3RlcnMgaWYgdGhleSdyZSBhdCB0aGUgZW5kIG9mIGEgbnVtYmVyLgorPC9kZXNjcmlwPgorCis8c2VjdDM+Q2hhcmFjdGVyIENsYXNzZXM8bGFiZWwgaWQ9ImNvbnRyYWN0aW9uLW9wY29kZXMtY2xhc3NlcyI+PHA+CitUaGVzZSBvcGNvZGVzIGRlZmluZSBhbmQgdXNlIGNoYXJhY3RlciBjbGFzc2VzLgorQSBjaGFyYWN0ZXIgY2xhc3MgYXNzb2NpYXRlcyBhIHNldCBvZiBjaGFyYWN0ZXJzIHdpdGggYSBuYW1lLgorVGhlIG5hbWUgdGhlbiByZWZlcnMgdG8gYW55IGNoYXJhY3RlciB3aXRoaW4gdGhlIGNsYXNzLgorQSBjaGFyYWN0ZXIgbWF5IGJlbG9uZyB0byBtb3JlIHRoYW4gb25lIGNsYXNzLgorCitUaGUgZm9sbG93aW5nIGNoYXJhY3RlciBjbGFzc2VzIGFyZSBhdXRvbWF0aWNhbGx5IHByZWRlZmluZWQKK2Jhc2VkIG9uIHRoZSBzZWxlY3RlZCBsb2NhbGU6Cis8ZGVzY3JpcD4KKyAgPHRhZy9kaWdpdC8KKyAgICBOdW1lcmljIGNoYXJhY3RlcnMuCisgIDx0YWcvbGV0dGVyLworICAgIEJvdGggdXBwZXJjYXNlIGFuZCBsb3dlcmNhc2UgYWxwaGFiZXRpYyBjaGFyYWN0ZXJzLgorICAgIFNvbWUgbG9jYWxlcyBoYXZlIGFkZGl0aW9uYWwgbGV0dGVycyB3aGljaCBhcmUgbmVpdGhlciB1cHBlcmNhc2Ugbm9yIGxvd2VyY2FzZS4KKyAgPHRhZy9sb3dlcmNhc2UvCisgICAgTG93ZXJjYXNlIGFscGhhYmV0aWMgY2hhcmFjdGVycy4KKyAgPHRhZy9wdW5jdHVhdGlvbi8KKyAgICBQcmludGFibGUgY2hhcmFjdGVycyB3aGljaCBhcmUgbmVpdGhlciB3aGl0ZS1zcGFjZSBub3IgYWxwaGFudW1lcmljLgorICA8dGFnL3NwYWNlLworICAgIFdoaXRlLXNwYWNlIGNoYXJhY3RlcnMuCisgICAgSW4gdGhlIGRlZmF1bHQgbG9jYWxlIHRoZXNlIGFyZToKKyAgICBzcGFjZSwgaG9yaXpvbnRhbCB0YWIsIHZlcnRpY2FsIHRhYiwgY2FycmlhZ2UgcmV0dXJuLCBuZXcgbGluZSwgZm9ybSBmZWVkLgorICA8dGFnL3VwcGVyY2FzZS8KKyAgICBVcHBlcmNhc2UgYWxwaGFiZXRpYyBjaGFyYWN0ZXJzLgorPC9kZXNjcmlwPgorCitUaGUgb3Bjb2RlcyB3aGljaCBkZWZpbmUgYW5kIHVzZSBjaGFyYWN0ZXIgY2xhc3NlcyBhcmU6Cis8ZGVzY3JpcD4KKyAgPHRhZz48dHQvY2xhc3MvIDxlbS9uYW1lLyA8ZW0vY2hhcmFjdGVycy88bGFiZWwgaWQ9ImNvbnRyYWN0aW9uLW9wY29kZS1jbGFzcyI+PC90YWc+CisgICAgRGVmaW5lIGEgbmV3IGNoYXJhY3RlciBjbGFzcy4KKyAgICBUaGUgPGVtL2NoYXJhY3RlcnMvIG9wZXJhbmQgbXVzdCBiZSBzcGVjaWZpZWQgYXMgYSA8ZW0vc3RyaW5nLy4KKyAgICBBIGNoYXJhY3RlciBjbGFzcyBtYXkgbm90IGJlIHVzZWQgdW50aWwgaXQncyBiZWVuIGRlZmluZWQuCisgIDx0YWc+PHR0L2FmdGVyLyA8ZW0vY2xhc3MvIDxlbS9vcGNvZGUvIC4uLjxsYWJlbCBpZD0iY29udHJhY3Rpb24tb3Bjb2RlLWFmdGVyIj48L3RhZz4KKyAgICBUaGUgc3BlY2lmaWVkIG9wY29kZSBpcyBmdXJ0aGVyIGNvbnN0cmFpbmVkIGluIHRoYXQKKyAgICB0aGUgbWF0Y2hlZCBjaGFyYWN0ZXIgc2VxdWVuY2UgbXVzdCBiZSBpbW1lZGlhdGVseSBwcmVjZWRlZCBieQorICAgIGEgY2hhcmFjdGVyIGJlbG9uZ2luZyB0byB0aGUgc3BlY2lmaWVkIGNsYXNzLgorICAgIElmIHRoaXMgb3Bjb2RlIGlzIHVzZWQgbW9yZSB0aGFuIG9uY2Ugb24gdGhlIHNhbWUgbGluZQorICAgIHRoZW4gdGhlIHVuaW9uIG9mIHRoZSBjaGFyYWN0ZXJzIGluIGFsbCB0aGUgY2xhc3NlcyBpcyB1c2VkLgorICA8dGFnPjx0dC9iZWZvcmUvIDxlbS9jbGFzcy8gPGVtL29wY29kZS8gLi4uPGxhYmVsIGlkPSJjb250cmFjdGlvbi1vcGNvZGUtYmVmb3JlIj48L3RhZz4KKyAgICBUaGUgc3BlY2lmaWVkIG9wY29kZSBpcyBmdXJ0aGVyIGNvbnN0cmFpbmVkIGluIHRoYXQKKyAgICB0aGUgbWF0Y2hlZCBjaGFyYWN0ZXIgc2VxdWVuY2UgbXVzdCBiZSBpbW1lZGlhdGVseSBmb2xsb3dlZCBieQorICAgIGEgY2hhcmFjdGVyIGJlbG9uZ2luZyB0byB0aGUgc3BlY2lmaWVkIGNsYXNzLgorICAgIElmIHRoaXMgb3Bjb2RlIGlzIHVzZWQgbW9yZSB0aGFuIG9uY2Ugb24gdGhlIHNhbWUgbGluZQorICAgIHRoZW4gdGhlIHVuaW9uIG9mIHRoZSBjaGFyYWN0ZXJzIGluIGFsbCB0aGUgY2xhc3NlcyBpcyB1c2VkLgorPC9kZXNjcmlwPgorCis8c2VjdDE+S2V5IFRhYmxlczxsYWJlbCBpZD0idGFibGUta2V5Ij48cD4KK0ZpbGVzIHdpdGggbmFtZXMgb2YgdGhlIGZvcm0gPHR0Lyoua3RiLyBhcmUga2V5IHRhYmxlcywKK2FuZCB3aXRoIG5hbWVzIG9mIHRoZSBmb3JtIDx0dC8qLmt0aS8gYXJlIGtleSBzdWJ0YWJsZXMuCitUaGV5IGFyZSB1c2VkIGJ5IEJSTFRUWSB0byBiaW5kCiticmFpbGxlIGRpc3BsYXkgYW5kIGtleWJvYXJkIGtleSBjb21iaW5hdGlvbnMKK3RvIEJSTFRUWSBjb21tYW5kcy4KKworVGhlIG5hbWVzIG9mIGJyYWlsbGUgZGlzcGxheSBrZXkgdGFibGUgZmlsZXMgYmVnaW4gd2l0aCA8dHQvYnJsLS88ZW0veHgvPHR0Ly0vIiwKK3doZXJlIDxlbS94eC8gaXMgdGhlIHR3by1sZXR0ZXIKKzxyZWYgaWQ9ImRyaXZlcnMiIG5hbWU9ImRyaXZlciBpZGVudGlmaWNhdGlvbiBjb2RlIj4uCitUaGUgcmVzdCBvZiB0aGUgbmFtZSBpZGVudGlmaWVzIHRoZSBtb2RlbChzKQorZm9yIHdoaWNoIHRoZSBrZXkgdGFibGUgaXMgdXNlZC4KKworVGhlIG5hbWVzIG9mIGtleWJvYXJkIHRhYmxlIGZpbGVzIGJlZ2luIHdpdGggPHR0L2tiZC0vLgorVGhlIHJlc3Qgb2YgdGhlIG5hbWUgZGVzY3JpYmVzIHRoZSBraW5kIG9mIGtleWJvYXJkCitmb3Igd2hpY2ggdGhlIGtleWJvYXJkIHRhYmxlIGhhcyBiZWVuIGRlc2lnbmVkLgorCitUaGUgZm9sbG93aW5nIGtleWJvYXJkIHRhYmxlcyBhcmUgcHJvdmlkZWQ6Cis8ZGVzY3JpcD4KKyAgPHRhZy9icmFpbGxlL2JpbmRpbmdzIGZvciBicmFpbGxlIGtleWJvYXJkcworICA8dGFnL2Rlc2t0b3AvYmluZGluZ3MgZm9yIGZ1bGwga2V5Ym9hcmRzCisgIDx0YWcva2V5cGFkL2JpbmRpbmdzIGZvciBrZXlwYWQtYmFzZWQgbmF2aWdhdGlvbgorICA8dGFnL2xhcHRvcC9iaW5kaW5ncyBmb3Iga2V5Ym9hcmRzIHdpdGhvdXQgYSBrZXlwYWQKKyAgPHRhZy9zdW5fdHlwZTYvYmluZGluZ3MgZm9yIFN1biBUeXBlIDYga2V5Ym9hcmRzCis8L2Rlc2NyaXA+CitTZWUgdGhlIDxyZWYgaWQ9Im9wdGlvbnMta2V5Ym9hcmQtdGFibGUiIG5hbWU9Ii1rIj4gY29tbWFuZCBsaW5lIG9wdGlvbiwKK2FuZCB0aGUgPHJlZiBpZD0iY29uZmlndXJlLWtleWJvYXJkLXRhYmxlIiBuYW1lPSJrZXlib2FyZC10YWJsZSI+IGNvbmZpZ3VyYXRpb24gZmlsZSBkaXJlY3RpdmUKK2ZvciBkZXRhaWxzIHJlZ2FyZGluZyBob3cgdG8gc2VsZWN0IGEga2V5Ym9hcmQgdGFibGUuCisKKzxzZWN0Mj5LZXkgVGFibGUgRGlyZWN0aXZlczxwPgorQSBrZXkgdGFibGUgY29uc2lzdHMgb2YgYSBzZXF1ZW5jZSBvZiBkaXJlY3RpdmVzLCBvbmUgcGVyIGxpbmUsCit3aGljaCBkZWZpbmUgaG93IGtleXMgYW5kIGtleSBjb21iaW5hdGlvbnMgYXJlIHRvIGJlIGludGVycHJldGVkLgorPHR0L1VURi04LyBjaGFyYWN0ZXIgZW5jb2RpbmcgbXVzdCBiZSB1c2VkLgorV2hpdGUtc3BhY2UgKGJsYW5rcywgdGFicykgYXQgdGhlIGJlZ2lubmluZyBvZiBhIGxpbmUsCithcyB3ZWxsIGFzIGJlZm9yZSBhbmQvb3IgYWZ0ZXIgYW55IG9wZXJhbmQsCitpcyBpZ25vcmVkLgorTGluZXMgY29udGFpbmluZyBvbmx5IHdoaXRlLXNwYWNlIGFyZSBpZ25vcmVkLgorSWYgdGhlIGZpcnN0IG5vbi13aGl0ZS1zcGFjZSBjaGFyYWN0ZXIgb2YgYSBsaW5lIGlzIGEgbnVtYmVyICg8dHQvJm51bTsvKSBzaWduCit0aGVuIHRoYXQgbGluZSBpcyBhIGNvbW1lbnQgYW5kIGlzIGlnbm9yZWQuCisKK1RoZSBwcmVjZWRlbmNlIGZvciByZXNvbHZpbmcgZWFjaCBrZXkgcHJlc3MvcmVsZWFzZSBldmVudCBpcyBhcyBmb2xsb3dzOgorPGVudW0+CisgIDxpdGVtPgorICAgIEEgaG90a2V5IHByZXNzIG9yIHJlbGVhc2UgZGVmaW5lZCB3aXRoaW4gdGhlIGN1cnJlbnQgY29udGV4dC4KKyAgICBTZWUgdGhlCisgICAgPHJlZiBpZD0ia2V5LXRhYmxlLWhvdGtleSIgbmFtZT0iaG90a2V5Ij4KKyAgICBkaXJlY3RpdmUgZm9yIGRldGFpbHMuCisgIDxpdGVtPgorICAgIEEga2V5IGNvbWJpbmF0aW9uIGRlZmluZWQgd2l0aGluIHRoZSBjdXJyZW50IGNvbnRleHQuCisgICAgU2VlIHRoZQorICAgIDxyZWYgaWQ9ImtleS10YWJsZS1iaW5kIiBuYW1lPSJiaW5kIj4KKyAgICBkaXJlY3RpdmUgZm9yIGRldGFpbHMuCisgIDxpdGVtPgorICAgIEEgYnJhaWxsZSBrZXlib2FyZCBjb21tYW5kIGRlZmluZWQgd2l0aGluIHRoZSBjdXJyZW50IGNvbnRleHQuCisgICAgU2VlIHRoZQorICAgIDxyZWYgaWQ9ImtleS10YWJsZS1tYXAiIG5hbWU9Im1hcCI+CisgICAgYW5kCisgICAgPHJlZiBpZD0ia2V5LXRhYmxlLXN1cGVyaW1wb3NlIiBuYW1lPSJzdXBlcmltcG9zZSI+CisgICAgZGlyZWN0aXZlcyBmb3IgZGV0YWlscy4KKyAgPGl0ZW0+CisgICAgQSBrZXkgY29tYmluYXRpb24gZGVmaW5lZCB3aXRoaW4gdGhlIGRlZmF1bHQgY29udGV4dC4KKyAgICBTZWUgdGhlCisgICAgPHJlZiBpZD0ia2V5LXRhYmxlLWJpbmQiIG5hbWU9ImJpbmQiPgorICAgIGRpcmVjdGl2ZSBmb3IgZGV0YWlscy4KKzwvZW51bT4KKworVGhlIGZvbGxvd2luZyBkaXJlY3RpdmVzIGFyZSBwcm92aWRlZDoKKworPHNlY3QzPlRoZSBBc3NpZ24gRGlyZWN0aXZlPGxhYmVsIGlkPSJrZXktdGFibGUtYXNzaWduIj48cD4KK0NyZWF0ZSBvciB1cGRhdGUgYSB2YXJpYWJsZSBhc3NvY2lhdGVkIHdpdGggdGhlIGN1cnJlbnQgaW5jbHVkZSBsZXZlbC4KK1RoZSB2YXJpYWJsZSBpcyB2aXNpYmxlIHRvIHRoZSBjdXJyZW50IGFuZCB0byBsb3dlciBpbmNsdWRlIGxldmVscywKK2J1dCBub3QgdG8gaGlnaGVyIGluY2x1ZGUgbGV2ZWxzLgorCis8dHQvYXNzaWduLyA8ZW0vdmFyaWFibGUvIFs8ZW0vdmFsdWUvXQorPGRlc2NyaXA+CisgIDx0YWc+PGVtL3ZhcmlhYmxlLzwvdGFnPgorICAgIFRoZSBuYW1lIG9mIHRoZSB2YXJpYWJsZS4KKyAgICBJZiB0aGUgdmFyaWFibGUgZG9lc24ndCBhbHJlYWR5IGV4aXN0IGF0IHRoZSBjdXJyZW50IGluY2x1ZGUgbGV2ZWwKKyAgICB0aGVuIGl0IGlzIGNyZWF0ZWQuCisgIDx0YWc+PGVtL3ZhbHVlLzwvdGFnPgorICAgIFRoZSB2YWx1ZSB3aGljaCBpcyB0byBiZSBhc3NpZ25lZCB0byB0aGUgdmFyaWFibGUuCisgICAgSWYgaXQncyBub3Qgc3VwcGxpZWQgdGhlbiBhIHplcm8tbGVuZ3RoIChudWxsKSB2YWx1ZSBpcyBhc3NpZ25lZC4KKzwvZGVzY3JpcD4KKworVGhlIGVzY2FwZSBzZXF1ZW5jZSBce3ZhcmlhYmxlfSBpcyBzdWJzdGl0dXRlZAord2l0aCB0aGUgdmFsdWUgb2YgdGhlIHZhcmlhYmxlIG5hbWVkIHdpdGhpbiB0aGUgYnJhY2VzLgorVGhlIHZhcmlhYmxlIG11c3QgaGF2ZSBiZWVuIGRlZmluZWQKK2F0IHRoZSBjdXJyZW50IG9yIGF0IGEgaGlnaGVyIGluY2x1ZGUgbGV2ZWwuCisKK0V4YW1wbGVzOgorPGl0ZW1pemU+CisgIDxpdGVtPjx0dC9hc3NpZ24gbnVsbFZhbHVlLworICA8aXRlbT48dHQvYXNzaWduIFJldHVybktleSBLZXkxLworICA8aXRlbT48dHQvYmluZCBce1JldHVybktleX0gUkVUVVJOLworPC9pdGVtaXplPgorCis8c2VjdDM+VGhlIEJpbmQgRGlyZWN0aXZlPGxhYmVsIGlkPSJrZXktdGFibGUtYmluZCI+PHA+CitEZWZpbmUgd2hpY2ggQlJMVFRZIGNvbW1hbmQgaXMgZXhlY3V0ZWQKK3doZW4gYSBwYXJ0aWN1bGFyIGNvbWJpbmF0aW9uIG9mIG9uZSBvciBtb3JlIGtleXMgaXMgcHJlc3NlZC4KK1RoZSBiaW5kaW5nIGlzIGRlZmluZWQgd2l0aGluIHRoZSBjdXJyZW50IGNvbnRleHQuCisKKzx0dC9iaW5kLyA8ZW0va2V5cy8gPGVtL2NvbW1hbmQvCis8ZGVzY3JpcD4KKyAgPHRhZz48ZW0va2V5cy88L3RhZz4KKyAgICBUaGUga2V5IGNvbWJpbmF0aW9uIHdoaWNoIGlzIHRvIGJlIGJvdW5kLgorICAgIEl0J3MgYSBzZXF1ZW5jZSBvZiBvbmUgb3IgbW9yZSBrZXkgbmFtZXMKKyAgICBzZXBhcmF0ZWQgYnkgcGx1cyAoPHR0LysvKSBzaWducy4KKyAgICBUaGUgZmluYWwgKG9yIG9ubHkpIGtleSBuYW1lIG1heSBiZSBvcHRpb25hbGx5IHByZWZpeGVkCisgICAgd2l0aCBhbiBleGNsYW1hdGlvbiAoPHR0LyEvKSBwb2ludC4KKyAgICBUaGUga2V5cyBtYXkgYmUgcHJlc3NlZCBpbiBhbnkgb3JkZXIsIHdpdGggdGhlIGV4Y2VwdGlvbiB0aGF0CisgICAgaWYgdGhlIGZpbmFsIGtleSBuYW1lIGlzIHByZWZpeGVkIHdpdGggYW4gZXhjbGFtYXRpb24gcG9pbnQKKyAgICB0aGVuIGl0IG11c3QgYmUgcHJlc3NlZCBsYXN0LgorICAgIFRoZSBleGNsYW1hdGlvbiBwb2ludCBwcmVmaXggbWVhbnMgdGhhdAorICAgIHRoZSBjb21tYW5kIGlzIGV4ZWN1dGVkIGFzIHNvb24gYXMgdGhhdCBrZXkgaXMgcHJlc3NlZC4KKyAgICBJZiBub3QgdXNlZCwKKyAgICB0aGUgY29tbWFuZCBpcyBleGVjdXRlZCBhcyBzb29uIGFzIGFueSBvZiB0aGUga2V5cyBpcyByZWxlYXNlZC4KKyAgPHRhZz48ZW0vY29tbWFuZC88L3RhZz4KKyAgICBUaGUgbmFtZSBvZiBhIEJSTFRUWSBjb21tYW5kLgorICAgIE9uZSBvciBtb3JlIG1vZGlmaWVycyBtYXkgYmUgb3B0aW9uYWxseSBhcHBlbmRlZCB0byB0aGUgY29tbWFuZCBuYW1lCisgICAgYnkgdXNpbmcgYSBwbHVzICg8dHQvKy8pIHNpZ24gYXMgdGhlIHNlcGFyYXRvci4KKyAgICA8aXRlbWl6ZT4KKyAgICAgIDxpdGVtPgorICAgICAgICBGb3IgY29tbWFuZHMgd2hpY2ggZW5hYmxlL2Rpc2FibGUgYSBmZWF0dXJlOgorICAgICAgICA8aXRlbWl6ZT4KKyAgICAgICAgICA8aXRlbT4KKyAgICAgICAgICAgIElmIHRoZSBtb2RpZmllciA8dHQvK29uLyBpcyBzcGVjaWZpZWQKKyAgICAgICAgICAgIHRoZW4gdGhlIGZlYXR1cmUgaXMgZW5hYmxlZC4KKyAgICAgICAgICA8aXRlbT4KKyAgICAgICAgICAgIElmIHRoZSBtb2RpZmllciA8dHQvK29mZi8gaXMgc3BlY2lmaWVkCisgICAgICAgICAgICB0aGVuIHRoZSBmZWF0dXJlIGlzIGRpc2FibGVkLgorICAgICAgICAgIDxpdGVtPgorICAgICAgICAgICAgSWYgbmVpdGhlciA8dHQvK29uLyBub3IgPHR0LytvZmYvIGlzIHNwZWNpZmllZAorICAgICAgICAgICAgdGhlbiB0aGUgc3RhdGUgb2YgdGhlIGZlYXR1cmUgaXMgdG9nZ2xlZCBvbi9vZmYuCisgICAgICAgIDwvaXRlbWl6ZT4KKyAgICAgIDxpdGVtPgorICAgICAgICBGb3IgY29tbWFuZHMgd2hpY2ggbW92ZSB0aGUgYnJhaWxsZSB3aW5kb3c6CisgICAgICAgIDxpdGVtaXplPgorICAgICAgICAgIDxpdGVtPgorICAgICAgICAgICAgSWYgdGhlIG1vZGlmaWVyIDx0dC8rcm91dGUvIGlzIHNwZWNpZmllZAorICAgICAgICAgICAgdGhlbiwgaWYgbmVjZXNzYXJ5LCB0aGUgY3Vyc29yIGlzIGF1dG9tYXRpY2FsbHkgcm91dGVkCisgICAgICAgICAgICBzbyB0aGF0IGl0J3MgYWx3YXlzIHZpc2libGUgb24gdGhlIGJyYWlsbGUgZGlzcGxheS4KKyAgICAgICAgPC9pdGVtaXplPgorICAgICAgPGl0ZW0+CisgICAgICAgIEZvciBjb21tYW5kcyB3aGljaCBtb3ZlIHRoZSBicmFpbGxlIHdpbmRvdyB0byBhIHNwZWNpZmljIGxpbmUgb24gdGhlIHNjcmVlbjoKKyAgICAgICAgPGl0ZW1pemU+CisgICAgICAgICAgPGl0ZW0+CisgICAgICAgICAgICBJZiB0aGUgbW9kaWZpZXIgPHR0Lyt0b2xlZnQvIGlzIHNwZWNpZmllZAorICAgICAgICAgICAgdGhlbiB0aGUgYnJhaWxsZSB3aW5kb3cgaXMgYWxzbyBtb3ZlZAorICAgICAgICAgICAgdG8gdGhlIGJlZ2lubmluZyBvZiB0aGF0IGxpbmUuCisgICAgICAgICAgPGl0ZW0+CisgICAgICAgICAgICBJZiB0aGUgbW9kaWZpZXIgPHR0LytzY2FsZWQvIGlzIHNwZWNpZmllZAorICAgICAgICAgICAgdGhlbiB0aGUgc2V0IG9mIGtleXMgYm91bmQgdG8gdGhlIGNvbW1hbmQKKyAgICAgICAgICAgIGlzIGludGVycHJldGVkIGFzIHRob3VnaCBpdCB3ZXJlIGEgc2Nyb2xsIGJhci4KKyAgICAgICAgICAgIElmIGl0IGlzbid0LAorICAgICAgICAgICAgdGhlbiB0aGVyZSdzIGEgb25lLXRvLW9uZSBjb3JyZXNwb25kZW5jZQorICAgICAgICAgICAgYmV0d2VlbiBrZXlzIGFuZCBsaW5lcy4KKyAgICAgICAgPC9pdGVtaXplPgorICAgICAgPGl0ZW0+CisgICAgICAgIEZvciBjb21tYW5kcyB3aGljaCByZXF1aXJlIGFuIG9mZnNldDoKKyAgICAgICAgPGl0ZW1pemU+CisgICAgICAgICAgPGl0ZW0+CisgICAgICAgICAgICBUaGUgbW9kaWZpZXIgKzxlbS9vZmZzZXQvLAorICAgICAgICAgICAgd2hlcmUgPGVtL29mZnNldC8gaXMgYSBub24tbmVnYXRpdmUgaW50ZWdlciwKKyAgICAgICAgICAgIG1heSBiZSBzcGVjaWZpZWQuCisgICAgICAgICAgICBJZiBpdCBpc24ndCBzdXBwbGllZCB0aGVuIDx0dC8rMC8gaXMgYXNzdW1lZC4KKyAgICAgICAgPC9pdGVtaXplPgorICAgIDwvaXRlbWl6ZT4KKzwvZGVzY3JpcD4KKworRXhhbXBsZXM6Cis8aXRlbWl6ZT4KKyAgPGl0ZW0+PHR0L2JpbmQgS2V5MSBDU1JUUksvCisgIDxpdGVtPjx0dC9iaW5kIEtleTErS2V5MiBDU1JUUksrb2ZmLworICA8aXRlbT48dHQvYmluZCBLZXkxK0tleTMgQ1NSVFJLK29uLworICA8aXRlbT48dHQvYmluZCBLZXk0IFRPUC8KKyAgPGl0ZW0+PHR0L2JpbmQgS2V5NSBUT1Arcm91dGUvCisgIDxpdGVtPjx0dC9iaW5kIFZlcnRpY2FsU2Vuc29yIEdPVE9MSU5FK3RvbGVmdCtzY2FsZWQvCisgIDxpdGVtPjx0dC9iaW5kIEtleTYgQ09OVEVYVCsxLworPC9pdGVtaXplPgorCis8c2VjdDM+VGhlIENvbnRleHQgRGlyZWN0aXZlPGxhYmVsIGlkPSJrZXktdGFibGUtY29udGV4dCI+PHA+CitEZWZpbmUgYWx0ZXJuYXRlIHdheXMgdG8gaW50ZXJwcmV0IGNlcnRhaW4ga2V5IGV2ZW50cyBhbmQvb3IgY29tYmluYXRpb25zLgorQSBjb250ZXh0IGNvbnRhaW5zIGRlZmluaXRpb25zIGNyZWF0ZWQgYnkgdGhlCis8cmVmIGlkPSJrZXktdGFibGUtYmluZCIgbmFtZT0iYmluZCI+LCAKKzxyZWYgaWQ9ImtleS10YWJsZS1ob3RrZXkiIG5hbWU9ImhvdGtleSI+LAorPHJlZiBpZD0ia2V5LXRhYmxlLWlnbm9yZSIgbmFtZT0iaWdub3JlIj4sCis8cmVmIGlkPSJrZXktdGFibGUtbWFwIiBuYW1lPSJtYXAiPiwKK2FuZAorPHJlZiBpZD0ia2V5LXRhYmxlLXN1cGVyaW1wb3NlIiBuYW1lPSJzdXBlcmltcG9zZSI+CitkaXJlY3RpdmVzLgorCis8dHQvY29udGV4dC8gPGVtL25hbWUvIFs8ZW0vdGl0bGUvXQorPGRlc2NyaXA+CisgIDx0YWc+PGVtL25hbWUvPC90YWc+CisgICAgV2hpY2ggY29udGV4dCBzdWJzZXF1ZW50IGRlZmluaXRpb25zIGFyZSB0byBiZSBjcmVhdGVkIHdpdGhpbi4KKyAgICBUaGVzZSBzcGVjaWFsIGNvbnRleHRzIGFyZSBwcmVkZWZpbmVkOgorICAgIDxkZXNjcmlwPgorICAgICAgPHRhZy9kZWZhdWx0LworICAgICAgICBUaGUgZGVmYXVsdCBjb250ZXh0LgorICAgICAgICBJZiBhIGtleSBjb21iaW5hdGlvbiBoYXNuJ3QgYmVlbiBkZWZpbmVkIHdpdGhpbiB0aGUgY3VycmVudCBjb250ZXh0CisgICAgICAgIHRoZW4gaXRzIGRlZmluaXRpb24gd2l0aGluIHRoZSBkZWZhdWx0IGNvbnRleHQgaXMgdXNlZC4KKyAgICAgICAgVGhpcyBvbmx5IGFwcGxpZXMgdG8gZGVmaW5pdGlvbnMgY3JlYXRlZCBieQorICAgICAgICB0aGUgPHJlZiBpZD0ia2V5LXRhYmxlLWJpbmQiIG5hbWU9ImJpbmQiPiBkaXJlY3RpdmUuCisgICAgICA8dGFnL21lbnUvCisgICAgICAgIFRoaXMgY29udGV4dCBpcyB1c2VkIHdoZW4gd2l0aGluIEJSTFRUWSdzIHByZWZlcmVuY2VzIG1lbnUuCisgICAgPC9kZXNjcmlwPgorICA8dGFnPjxlbS90aXRsZS88L3RhZz4KKyAgICBBIHBlcnNvbi1yZWFkYWJsZSBkZXNjcmlwdGlvbiBvZiB0aGUgY29udGV4dC4KKyAgICBJdCBtYXkgY29udGFpbiBzcGFjZXMsCisgICAgYW5kIHN0YW5kYXJkIGNhcGl0YWxpemF0aW9uIGNvbnZlbnRpb25zIHNob3VsZCBiZSB1c2VkLiAKKyAgICBUaGlzIG9wZXJhbmQgaXMgb3B0aW9uYWwuCisgICAgSWYgc3VwcGxpZWQgd2hlbiBzZWxlY3RpbmcgYSBjb250ZXh0IHdoaWNoIGFscmVhZHkgaGFzIGEgdGl0bGUKKyAgICB0aGVuIHRoZSB0d28gbXVzdCBtYXRjaC4KKyAgICBTcGVjaWFsIGNvbnRleHRzIGFscmVhZHkgaGF2ZSBpbnRlcm5hbGx5LWFzc2lnbmVkIHRpdGxlcy4KKzwvZGVzY3JpcD4KKworQSBjb250ZXh0IGlzIGNyZWF0ZWQgdGhlIGZpcnN0IHRpbWUgaXQncyBzZWxlY3RlZC4KK0l0IG1heSBiZSByZXNlbGVjdGVkIGFueSBudW1iZXIgb2YgdGltZXMgdGhlcmVhZnRlci4KKworQWxsIHN1YnNlcXVlbnQgZGVmaW5pdGlvbnMgdW50aWwKK2VpdGhlciB0aGUgbmV4dCA8cmVmIGlkPSJrZXktdGFibGUtY29udGV4dCIgbmFtZT0iY29udGV4dCI+IGRpcmVjdGl2ZQorb3IgdGhlIGVuZCBvZiB0aGUgY3VycmVudCBpbmNsdWRlIGxldmVsCithcmUgY3JlYXRlZCB3aXRoaW4gdGhlIHNlbGVjdGVkIGNvbnRleHQuCitUaGUgaW5pdGlhbCBjb250ZXh0IG9mIHRoZSB0b3AtbGV2ZWwga2V5IHRhYmxlIGlzIDx0dC9kZWZhdWx0Ly4KK1RoZSBpbml0aWFsIGNvbnRleHQgb2YgYW4gaW5jbHVkZWQga2V5IHN1YnRhYmxlCitpcyB0aGUgY29udGV4dCB3aGljaCB3YXMgc2VsZWN0ZWQgd2hlbiBpdCB3YXMgaW5jbHVkZWQuCitDb250ZXh0IGNoYW5nZXMgd2l0aGluIGluY2x1ZGVkIGtleSBzdWJ0YWJsZXMKK2Rvbid0IGFmZmVjdCB0aGUgY29udGV4dCBvZiB0aGUgaW5jbHVkaW5nIGtleSB0YWJsZSBvciBzdWJ0YWJsZS4KKworSWYgYSBjb250ZXh0IGhhcyBhIHRpdGxlCit0aGVuIGl0IGlzIHBlcnNpc3RlbnQuCitXaGVuIGEga2V5IGV2ZW50IGNhdXNlcyBhIHBlcnNpc3RlbnQgY29udGV4dCB0byBiZSBhY3RpdmF0ZWQsCit0aGF0IGNvbnRleHQgcmVtYWlucyBjdXJyZW50IHVudGlsIGEgc3Vic2VxdWVudCBrZXkgZXZlbnQKK2NhdXNlcyBhIGRpZmZlcmVudCBwZXJzaXN0ZW50IGNvbnRleHQgdG8gYmUgYWN0aXZhdGVkLgorCitJZiBhIGNvbnRleHQgZG9lc24ndCBoYXZlIGEgdGl0bGUKK3RoZW4gaXQgaXMgdGVtcG9yYXJ5LgorV2hlbiBhIGtleSBldmVudCBjYXVzZXMgYSB0ZW1wb3JhcnkgY29udGV4dCB0byBiZSBhY3RpdmF0ZWQsCit0aGF0IGNvbnRleHQgaXMgb25seSB1c2VkIHRvIGludGVycHJldCB0aGUgdmVyeSBuZXh0IGtleSBldmVudC4KKworRXhhbXBsZXM6Cis8aXRlbWl6ZT4KKyAgPGl0ZW0+PHR0L2NvbnRleHQgbWVudS8KKyAgPGl0ZW0+PHR0L2NvbnRleHQgYnJhaWxsZSBCcmFpbGxlIElucHV0LworICA8aXRlbT48dHQvY29udGV4dCBERVNDQ0hBUi8KKzwvaXRlbWl6ZT4KKworPHNlY3QzPlRoZSBIaWRlIERpcmVjdGl2ZTxsYWJlbCBpZD0ia2V5LXRhYmxlLWhpZGUiPjxwPgorU3BlY2lmeSB3aGV0aGVyIG9yIG5vdCBjZXJ0YWluIGRlZmluaXRpb25zIChzZWUgdGhlIAorPHJlZiBpZD0ia2V5LXRhYmxlLWJpbmQiIG5hbWU9ImJpbmQiPiwKKzxyZWYgaWQ9ImtleS10YWJsZS1ob3RrZXkiIG5hbWU9ImhvdGtleSI+LAorPHJlZiBpZD0ia2V5LXRhYmxlLW1hcCIgbmFtZT0ibWFwIj4sCithbmQKKzxyZWYgaWQ9ImtleS10YWJsZS1zdXBlcmltcG9zZSIgbmFtZT0ic3VwZXJpbXBvc2UiPgorZGlyZWN0aXZlcykgYW5kIG5vdGVzIChzZWUgdGhlIAorPHJlZiBpZD0ia2V5LXRhYmxlLW5vdGUiIG5hbWU9Im5vdGUiPgorZGlyZWN0aXZlKSBhcmUgaW5jbHVkZWQgd2l0aGluIHRoZSBrZXkgdGFibGUncyBoZWxwIHRleHQuCisKKzx0dC9oaWRlLyA8ZW0vc3RhdGUvCis8ZGVzY3JpcD4KKyAgPHRhZz48ZW0vc3RhdGUvPC90YWc+CisgICAgT25lIG9mIHRoZXNlIGtleXdvcmRzOgorICAgIDxkZXNjcmlwPgorICAgICAgPHRhZy9vbi9UaGV5J3JlIGV4Y2x1ZGVkLgorICAgICAgPHRhZy9vZmYvVGhleSdyZSBpbmNsdWRlZC4KKyAgICA8L2Rlc2NyaXA+Cis8L2Rlc2NyaXA+CisKK1RoZSBzcGVjaWZpZWQgc3RhdGUgYXBwbGllcyB0byBhbGwgc3Vic2VxdWVudCBkZWZpbml0aW9ucyBhbmQgbm90ZXMKK3VudGlsIGVpdGhlciB0aGUgbmV4dCA8dHQvaGlkZS8gZGlyZWN0aXZlCitvciB0aGUgZW5kIG9mIHRoZSBjdXJyZW50IGluY2x1ZGUgbGV2ZWwuCitUaGUgaW5pdGlhbCBzdGF0ZSBvZiB0aGUgdG9wLWxldmVsIGtleSB0YWJsZSBpcyA8dHQvb2ZmLy4KK1RoZSBpbml0aWFsIHN0YXRlIG9mIGFuIGluY2x1ZGVkIGtleSBzdWJ0YWJsZQoraXMgdGhlIHN0YXRlIHdoaWNoIHdhcyBzZWxlY3RlZCB3aGVuIGl0IHdhcyBpbmNsdWRlZC4gCitTdGF0ZSBjaGFuZ2VzIHdpdGhpbiBpbmNsdWRlZCBrZXkgc3VidGFibGVzCitkb24ndCBhZmZlY3QgdGhlIHN0YXRlIG9mIHRoZSBpbmNsdWRpbmcga2V5IHRhYmxlIG9yIHN1YnRhYmxlLgorCitFeGFtcGxlczoKKzxpdGVtaXplPgorICA8aXRlbT48dHQvaGlkZSBvbi8KKzwvaXRlbWl6ZT4KKworPHNlY3QzPlRoZSBIb3RrZXkgRGlyZWN0aXZlPGxhYmVsIGlkPSJrZXktdGFibGUtaG90a2V5Ij48cD4KK0JpbmQgdGhlIHByZXNzIGFuZCByZWxlYXNlIGV2ZW50cyBvZiBhIHNwZWNpZmljIGtleQordG8gdHdvIHNlcGFyYXRlIEJSTFRUWSBjb21tYW5kcy4KK1RoZSBiaW5kaW5ncyBhcmUgZGVmaW5lZCB3aXRoaW4gdGhlIGN1cnJlbnQgY29udGV4dC4KKworPHR0L2hvdGtleS8gPGVtL2tleS8gPGVtL3ByZXNzLyA8ZW0vcmVsZWFzZS8KKzxkZXNjcmlwPgorICA8dGFnPjxlbS9rZXkvPC90YWc+CisgICAgVGhlIG5hbWUgb2YgdGhlIGtleSB3aGljaCBpcyB0byBiZSBib3VuZC4KKyAgPHRhZz48ZW0vcHJlc3MvPC90YWc+CisgICAgVGhlIG5hbWUgb2YgdGhlIEJSTFRUWSBjb21tYW5kCisgICAgd2hpY2ggaXMgdG8gYmUgZXhlY3V0ZWQgd2hlbmV2ZXIgdGhlIGtleSBpcyBwcmVzc2VkLgorICA8dGFnPjxlbS9yZWxlYXNlLzwvdGFnPgorICAgIFRoZSBuYW1lIG9mIHRoZSBCUkxUVFkgY29tbWFuZAorICAgIHdoaWNoIGlzIHRvIGJlIGV4ZWN1dGVkIHdoZW5ldmVyIHRoZSBrZXkgaXMgcmVsZWFzZWQuCis8L2Rlc2NyaXA+CisKK01vZGlmaWVycyBtYXkgYmUgYXBwZW5kZWQgdG8gdGhlIGNvbW1hbmQgbmFtZXMuCitTZWUgdGhlIDxlbS9jb21tYW5kLyBvcGVyYW5kCitvZiB0aGUgPHJlZiBpZD0ia2V5LXRhYmxlLWJpbmQiIG5hbWU9ImJpbmQiPiBkaXJlY3RpdmUKK2ZvciBkZXRhaWxzLgorCitTcGVjaWZ5IDx0dC9OT09QLyBpZiBubyBjb21tYW5kIGlzIHRvIGJlIGV4ZWN1dGVkLgorU3BlY2lmeWluZyA8dHQvTk9PUC8gZm9yIGJvdGggY29tbWFuZHMKK2VmZmVjdGl2ZWx5IGRpc2FibGVzIHRoZSBrZXkuCisKK0V4YW1wbGVzOgorPGl0ZW1pemU+CisgIDxpdGVtPjx0dC9ob3RrZXkgS2V5MSBDU1JWSVMrb2ZmIENTUlZJUytvbi8KKyAgPGl0ZW0+PHR0L2hvdGtleSBLZXkyIE5PT1AgTk9PUC8KKzwvaXRlbWl6ZT4KKworPHNlY3QzPlRoZSBJZktleSBEaXJlY3RpdmU8bGFiZWwgaWQ9ImtleS10YWJsZS1pZmtleSI+PHA+CitDb25kaXRpb25hbGx5IHByb2Nlc3MgYSBrZXkgdGFibGUgZGlyZWN0aXZlCitvbmx5IGlmIHRoZSBkZXZpY2UgaGFzIGEgcGFydGljdWxhciBrZXkuCisKKzx0dC9pZmtleS8gPGVtL2tleS8gPGVtL2RpcmVjdGl2ZS8KKzxkZXNjcmlwPgorICA8dGFnPjxlbS9rZXkvPC90YWc+CisgICAgVGhlIG5hbWUgb2YgdGhlIGtleSB3aG9zZSBhdmFpbGFiaWxpdHkgaXMgdG8gYmUgdGVzdGVkLgorICA8dGFnPjxlbS9kaXJlY3RpdmUvPC90YWc+CisgICAgVGhlIGtleSB0YWJsZSBkaXJlY3RpdmUgd2hpY2ggaXMgdG8gYmUgY29uZGl0aW9uYWxseSBwcm9jZXNzZWQuCis8L2Rlc2NyaXA+CisKK0V4YW1wbGVzOgorPGl0ZW1pemU+CisgIDxpdGVtPjx0dC9pZmtleSBLZXkxIGlma2V5IEtleTIgYmluZCBLZXkxK0tleTIgSE9NRS8KKzwvaXRlbWl6ZT4KKworPHNlY3QzPlRoZSBJbmNsdWRlIERpcmVjdGl2ZTxsYWJlbCBpZD0ia2V5LXRhYmxlLWluY2x1ZGUiPjxwPgorUHJvY2VzcyB0aGUgZGlyZWN0aXZlcyB3aXRoaW4gYSBrZXkgc3VidGFibGUuCitJdCdzIHJlY3Vyc2l2ZSwgd2hpY2ggbWVhbnMgdGhhdAorYW55IGtleSBzdWJ0YWJsZSBjYW4gaXRzZWxmIGluY2x1ZGUgeWV0IGFub3RoZXIga2V5IHN1YnRhYmxlLgorQ2FyZSBtdXN0IGJlIHRha2VuIHRvIGVuc3VyZSB0aGF0IGFuICJpbmNsdWRlIGxvb3AiIGlzIG5vdCBjcmVhdGVkLgorCis8dHQvaW5jbHVkZS8gPGVtL2ZpbGUvCis8ZGVzY3JpcD4KKyAgPHRhZz48ZW0vZmlsZS88L3RhZz4KKyAgICBUaGUga2V5IHN1YnRhYmxlIHdoaWNoIGlzIHRvIGJlIGluY2x1ZGVkLgorICAgIEl0IG1heSBiZSBlaXRoZXIgYSByZWxhdGl2ZSBvciBhbiBhYnNvbHV0ZSBwYXRoLgorICAgIElmIHJlbGF0aXZlLCBpdCdzIGFuY2hvcmVkIGF0CisgICAgdGhlIGRpcmVjdG9yeSBjb250YWluaW5nIHRoZSBpbmNsdWRpbmcga2V5IHRhYmxlIG9yIHN1YnRhYmxlLgorPC9kZXNjcmlwPgorCitFeGFtcGxlczoKKzxpdGVtaXplPgorICA8aXRlbT48dHQvaW5jbHVkZSBjb21tb24ua3RpLworICA8aXRlbT48dHQ+aW5jbHVkZSAvcGF0aC90by9teS9rZXlzLmt0aTwvdHQ+Cis8L2l0ZW1pemU+CisKKzxzZWN0Mz5UaGUgSWdub3JlIERpcmVjdGl2ZTxsYWJlbCBpZD0ia2V5LXRhYmxlLWlnbm9yZSI+PHA+CitJZ25vcmUgYSBzcGVjaWZpYyBrZXkgd2hpbGUgd2l0aGluIHRoZSBjdXJyZW50IGNvbnRleHQuCisKKzx0dC9pZ25vcmUvIDxlbS9rZXkvCis8ZGVzY3JpcD4KKyAgPHRhZz48ZW0va2V5LzwvdGFnPgorICAgIFRoZSBuYW1lIG9mIHRoZSBrZXkgd2hpY2ggaXMgdG8gYmUgaWdub3JlZC4KKzwvZGVzY3JpcD4KKworRXhhbXBsZXM6Cis8aXRlbWl6ZT4KKyAgPGl0ZW0+PHR0L2lnbm9yZSBLZXkxLworPC9pdGVtaXplPgorCis8c2VjdDM+VGhlIE1hcCBEaXJlY3RpdmU8bGFiZWwgaWQ9ImtleS10YWJsZS1tYXAiPjxwPgorTWFwIGEga2V5IHRvIGEgYnJhaWxsZSBrZXlib2FyZCBmdW5jdGlvbi4KK1RoZSBtYXBwaW5nIGlzIGRlZmluZWQgd2l0aGluIHRoZSBjdXJyZW50IGNvbnRleHQuCisKKzx0dC9tYXAvIDxlbS9rZXkvIDxlbS9mdW5jdGlvbi8KKzxkZXNjcmlwPgorICA8dGFnPjxlbS9rZXkvPC90YWc+CisgICAgVGhlIG5hbWUgb2YgdGhlIGtleSB3aGljaCBpcyB0byBiZSBtYXBwZWQuCisgICAgTW9yZSB0aGFuIG9uZSBrZXkgbWF5IGJlIG1hcHBlZCB0byB0aGUgc2FtZSBicmFpbGxlIGtleWJvYXJkIGZ1bmN0aW9uLgorICA8dGFnPjxlbS9mdW5jdGlvbi88L3RhZz4KKyAgICBUaGUgbmFtZSBvZiB0aGUgYnJhaWxsZSBrZXlib2FyZCBmdW5jdGlvbi4KKyAgICBJdCBtYXkgYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcga2V5d29yZHM6CisgICAgPGRlc2NyaXA+CisgICAgICA8dGFnL0RPVDEvVGhlIHVwcGVyLWxlZnQgc3RhbmRhcmQgYnJhaWxsZSBkb3QuCisgICAgICA8dGFnL0RPVDIvVGhlIG1pZGRsZS1sZWZ0IHN0YW5kYXJkIGJyYWlsbGUgZG90LgorICAgICAgPHRhZy9ET1QzL1RoZSBsb3dlci1sZWZ0IHN0YW5kYXJkIGJyYWlsbGUgZG90LgorICAgICAgPHRhZy9ET1Q0L1RoZSB1cHBlci1yaWdodCBzdGFuZGFyZCBicmFpbGxlIGRvdC4KKyAgICAgIDx0YWcvRE9UNS9UaGUgbWlkZGxlLXJpZ2h0IHN0YW5kYXJkIGJyYWlsbGUgZG90LgorICAgICAgPHRhZy9ET1Q2L1RoZSBsb3dlci1yaWdodCBzdGFuZGFyZCBicmFpbGxlIGRvdC4KKyAgICAgIDx0YWcvRE9UNy9UaGUgbG93ZXItbGVmdCBjb21wdXRlciBicmFpbGxlIGRvdC4KKyAgICAgIDx0YWcvRE9UOC9UaGUgbG93ZXItcmlnaHQgY29tcHV0ZXIgYnJhaWxsZSBkb3QuCisgICAgICA8dGFnL1NQQUNFL1RoZSBzcGFjZSBiYXIuCisgICAgICA8dGFnL1NISUZUL1RoZSBzaGlmdCBrZXkuCisgICAgICA8dGFnL1VQUEVSLworICAgICAgICBJZiBhIGxvd2VyY2FzZSBsZXR0ZXIgaXMgYmVpbmcgZW50ZXJlZAorICAgICAgICB0aGVuIHRyYW5zbGF0ZSBpdCB0byBpdHMgdXBwZXJjYXNlIGVxdWl2YWxlbnQuCisgICAgICA8dGFnL0NPTlRST0wvVGhlIGNvbnRyb2wga2V5LgorICAgICAgPHRhZy9NRVRBL1RoZSBsZWZ0IGFsdCBrZXkuCisgICAgPC9kZXNjcmlwPgorPC9kZXNjcmlwPgorCitJZiBhIGtleSBjb21iaW5hdGlvbiBjb25zaXN0cyBvbmx5IG9mIGtleXMKK3doaWNoIGhhdmUgYmVlbiBtYXBwZWQgdG8gYnJhaWxsZSBrZXlib2FyZCBmdW5jdGlvbnMsCithbmQgaWYgdGhvc2UgZnVuY3Rpb25zIHdoZW4gY29tYmluZWQgZm9ybSBhIHZhbGlkIGJyYWlsbGUga2V5Ym9hcmQgY29tbWFuZCwKK3RoZW4gdGhhdCBjb21tYW5kIGlzIGV4ZWN1dGVkIGFzIHNvb24gYXMgYW55IG9mIHRoZSBrZXlzIGlzIHJlbGVhc2VkLgorQSB2YWxpZCBicmFpbGxlIGtleWJvYXJkIGNvbW1hbmQgbXVzdCBpbmNsdWRlCitlaXRoZXIgYW55IGNvbWJpbmF0aW9uIG9mIGRvdCBrZXlzIG9yIHRoZSBzcGFjZSBiYXIgKGJ1dCBub3QgYm90aCkuCitJZiBhdCBsZWFzdCBvbmUgZG90IGtleSBpcyBpbmNsdWRlZAordGhlbiB0aGUgYnJhaWxsZSBrZXlib2FyZCBmdW5jdGlvbnMgc3BlY2lmaWVkIGJ5IHRoZQorPHJlZiBpZD0ia2V5LXRhYmxlLXN1cGVyaW1wb3NlIiBuYW1lPSJzdXBlcmltcG9zZSI+CitkaXJlY3RpdmVzIHdpdGhpbiB0aGUgc2FtZSBjb250ZXh0IGFyZSBhbHNvIGltcGxpY2l0bHkgaW5jbHVkZWQuCisKK0V4YW1wbGVzOgorPGl0ZW1pemU+CisgIDxpdGVtPjx0dC9tYXAgS2V5MSBET1QxLworPC9pdGVtaXplPgorCis8c2VjdDM+VGhlIE5vdGUgRGlyZWN0aXZlPGxhYmVsIGlkPSJrZXktdGFibGUtbm90ZSI+PHA+CitBZGQgYSBwZXJzb24tcmVhZGFibGUgZXhwbGFuYXRpb24gdG8gdGhlIGtleSB0YWJsZSdzIGhlbHAgdGV4dC4KK05vdGVzIGFyZSBjb21tb25seSB1c2VkLCBmb3IgZXhhbXBsZSwKK3RvIGRlc2NyaWJlIHRoZSBwbGFjZW1lbnQsIHNpemVzLCBhbmQgc2hhcGVzIG9mIHRoZSBrZXlzIG9uIHRoZSBkZXZpY2UuCisKKzx0dC9ub3RlLyA8ZW0vdGV4dC8KKzxkZXNjcmlwPgorICA8dGFnPjxlbS90ZXh0LzwvdGFnPgorICAgIFRoZSBleHBsYW5hdGlvbiB3aGljaCBpcyB0byBiZSBhZGRlZC4KKyAgICBJdCBtYXkgY29udGFpbiBzcGFjZXMsCisgICAgYW5kIHNob3VsZCBiZSBncmFtbWF0aWNhbGx5IGNvcnJlY3QuCis8L2Rlc2NyaXA+CisKK0VhY2ggbm90ZSBzcGVjaWZpZXMgZXhhY3RseSBvbmUgbGluZSBvZiBleHBsYW5hdG9yeSB0ZXh0LgorTGVhZGluZyBzcGFjZSBpcyBpZ25vcmVkIHNvIGluZGVudGF0aW9uIGNhbm5vdCBiZSBzcGVjaWZpZWQuCisKK1RoZXJlJ3Mgbm8gbGltaXQgdG8gdGhlIG51bWJlciBvZiBub3RlcyB3aGljaCBtYXkgYmUgc3BlY2lmaWVkLgorQWxsIG9mIHRoZW0gYXJlIGdhdGhlcmVkIHRvZ2V0aGVyCithbmQgcHJlc2VudGVkIGluIGEgc2luZ2xlIGJsb2NrCithdCB0aGUgc3RhcnQgb2YgdGhlIGtleSB0YWJsZSdzIGhlbHAgdGV4dC4KKworRXhhbXBsZXM6Cis8aXRlbWl6ZT4KKyAgPGl0ZW0+PHR0L25vdGUgS2V5MSBpcyB0aGUgcm91bmQga2V5IGF0IHRoZSBmYXIgbGVmdCBvbiB0aGUgZnJvbnQgc3VyZmFjZS4vCis8L2l0ZW1pemU+CisKKzxzZWN0Mz5UaGUgU3VwZXJpbXBvc2UgRGlyZWN0aXZlPGxhYmVsIGlkPSJrZXktdGFibGUtc3VwZXJpbXBvc2UiPjxwPgorSW1wbGljaXRseSBpbmNsdWRlIGEgYnJhaWxsZSBrZXlib2FyZCBmdW5jdGlvbiB3aGVuZXZlcgorYSBicmFpbGxlIGtleWJvYXJkIGNvbW1hbmQgY29uc2lzdGluZyBvZiBhdCBsZWFzdCBvbmUgZG90IGlzIGV4ZWN1dGVkLgorVGhlIGltcGxpY2l0IGluY2x1c2lvbiBpcyBkZWZpbmVkIHdpdGhpbiB0aGUgY3VycmVudCBjb250ZXh0LgorQW55IG51bWJlciBvZiB0aGVtIG1heSBiZSBzcGVjaWZpZWQuCisKKzx0dC9zdXBlcmltcG9zZS8gPGVtL2Z1bmN0aW9uLworPGRlc2NyaXA+CisgIDx0YWc+PGVtL2Z1bmN0aW9uLzwvdGFnPgorICAgIFRoZSBuYW1lIG9mIHRoZSBicmFpbGxlIGtleWJvYXJkIGZ1bmN0aW9uLgorICAgIFNlZSB0aGUgPGVtL2Z1bmN0aW9uLyBvcGVyYW5kCisgICAgb2YgdGhlIDxyZWYgaWQ9ImtleS10YWJsZS1tYXAiIG5hbWU9Im1hcCI+IGRpcmVjdGl2ZQorICAgIGZvciBkZXRhaWxzLgorPC9kZXNjcmlwPgorCitFeGFtcGxlczoKKzxpdGVtaXplPgorICA8aXRlbT48dHQvc3VwZXJpbXBvc2UgRE9UNy8KKzwvaXRlbWl6ZT4KKworPHNlY3QzPlRoZSBUaXRsZSBEaXJlY3RpdmU8bGFiZWwgaWQ9ImtleS10YWJsZS10aXRsZSI+PHA+CitQcm92aWRlIGEgcGVyc29uLXJlYWRhYmxlIHN1bW1hcnkgb2YgdGhlIGtleSB0YWJsZSdzIHB1cnBvc2UuCisKKzx0dC90aXRsZS8gPGVtL3RleHQvCis8ZGVzY3JpcD4KKyAgPHRhZz48ZW0vdGV4dC88L3RhZz4KKyAgICBBIG9uZS1saW5lIHN1bW1hcnkgb2Ygd2hhdCB0aGUga2V5IHRhYmxlIGlzIHVzZWQgZm9yLgorICAgIEl0IG1heSBjb250YWluIHNwYWNlcywKKyAgICBhbmQgc3RhbmRhcmQgY2FwaXRhbGl6YXRpb24gY29udmVudGlvbnMgc2hvdWxkIGJlIHVzZWQuCis8L2Rlc2NyaXA+CisKK1RoZSB0aXRsZSBvZiB0aGUga2V5IHRhYmxlIG1heSBiZSBzcGVjaWZpZWQgb25seSBvbmNlLgorCitFeGFtcGxlczoKKzxpdGVtaXplPgorICA8aXRlbT48dHQvdGl0bGUgQmluZGluZ3MgZm9yIEtleXBhZC1iYXNlZCBOYXZpZ2F0aW9uLworPC9pdGVtaXplPgorCis8c2VjdDI+S2V5Ym9hcmQgUHJvcGVydGllczxsYWJlbCBpZD0ia2V5Ym9hcmQtcHJvcGVydGllcyI+PHA+CitUaGUgZGVmYXVsdCBpcyB0aGF0IGFsbCBrZXlib2FyZHMgYXJlIG1vbml0b3JlZC4KK0Egc3Vic2V0IG9mIHRoZSBrZXlib2FyZHMgbWF5IGJlIHNlbGVjdGVkIGJ5IHNwZWNpZnlpbmcgb25lIG9yIG1vcmUgb2YgdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzCisoc2VlIHRoZSA8cmVmIGlkPSJvcHRpb25zLWtleWJvYXJkLXByb3BlcnRpZXMiIG5hbWU9Ii1LIj4gY29tbWFuZCBsaW5lIG9wdGlvbiwKK2FuZCB0aGUgPHJlZiBpZD0iY29uZmlndXJlLWtleWJvYXJkLXByb3BlcnRpZXMiIG5hbWU9ImtleWJvYXJkLXByb3BlcnRpZXMiPiBjb25maWd1cmF0aW9uIGZpbGUgZGlyZWN0aXZlKToKKzxkZXNjcmlwPgorICA8dGFnL3R5cGUvCisgICAgVGhlIGJ1cyB0eXBlLCBzcGVjaWZpZWQgYXMgb25lIG9mIHRoZSBmb2xsb3dpbmcga2V5d29yZHM6CisgICAgICA8dHQvYW55LywKKyAgICAgIDx0dC9wczIvLAorICAgICAgPHR0L3VzYi8sCisgICAgICA8dHQvYmx1ZXRvb3RoLy4KKyAgPHRhZy92ZW5kb3IvCisgICAgVGhlIHZlbmRvciBpZGVudGlmaWVyLCBzcGVjaWZpZWQgYXMgYSAxNi1iaXQgdW5zaWduZWQgaW50ZWdlci4KKyAgPHRhZy9wcm9kdWN0LworICAgIFRoZSBwcm9kdWN0IGlkZW50aWZpZXIsIHNwZWNpZmllZCBhcyBhIDE2LWJpdCB1bnNpZ25lZCBpbnRlZ2VyLgorPC9kZXNjcmlwPgorCitUaGUgdmVuZG9yIGFuZCBwcm9kdWN0IGlkZW50aWZpZXJzIG1heSBiZSBzcGVjaWZpZWQgaW4KK2RlY2ltYWwgKG5vIHByZWZpeCksCitvY3RhbCAocHJlZml4ZWQgYnkgPHR0LzAvKSwKK29yIGhleGFkZWNpbWFsIChwcmVmaXhlZCBieSA8dHQvMHgvKS4KK1NwZWNpZnlpbmcgPHR0LzAvIG1lYW5zIG1hdGNoIGFueSB2YWx1ZQorKGFzIGlmIHRoZSBwcm9wZXJ0eSB3ZXJlbid0IHNwZWNpZmllZCkuCisKKzxzZWN0PkFkdmFuY2VkIFRvcGljczxwPgorCis8c2VjdDE+SW5zdGFsbGluZyBNdWx0aXBsZSBWZXJzaW9uczxsYWJlbCBpZD0ibXVsdGlwbGUiPjxwPgorSXQncyBlYXN5IHRvIGhhdmUgbW9yZSB0aGFuIG9uZSB2ZXJzaW9uIG9mIEJSTFRUWQoraW5zdGFsbGVkIG9uIHRoZSBzYW1lIHN5c3RlbSBhdCB0aGUgc2FtZSB0aW1lLgorVGhpcyBjYXBhYmlsaXR5IGFsbG93cyB5b3UgdG8gdGVzdCBhIG5ldyB2ZXJzaW9uIGJlZm9yZSByZW1vdmluZyB0aGUgb2xkIG9uZS4KKworVGhlIDxyZWYgaWQ9ImJ1aWxkLWV4ZWN1dGUtcm9vdCIgbmFtZT0iLS13aXRoLWV4ZWN1dGUtcm9vdCI+IGJ1aWxkIG9wdGlvbiBhbGxvd3MgeW91Cit0byBpbnN0YWxsIHRoZSBjb21wbGV0ZSA8cmVmIGlkPSJoaWVyYXJjaHkiIG5hbWU9Imluc3RhbGxlZCBmaWxlIGhpZXJhcmNoeSI+Cithbnl3aGVyZSB5b3Ugd2FudCBzdWNoIHRoYXQgaXQncyBlbnRpcmVseSBzZWxmLWNvbnRhaW5lZC4KK1JlbWVtYmVyaW5nIHRoYXQgaXQncyBiZXN0IHRvIGtlZXAgYWxsIG9mIEJSTFRUWSdzIGNvbXBvbmVudHMKK3dpdGhpbiB0aGUgcm9vdCBmaWxlIHN5c3RlbSwgeW91IGNhbiBidWlsZCBpdCBsaWtlIHRoaXM6Cis8dHNjcmVlbj48dmVyYj4KKy4vY29uZmlndXJlIC0td2l0aC1leGVjdXRlLXJvb3Q9L2JybHR0eS0zLjEKK21ha2UgaW5zdGFsbAorPC92ZXJiPjwvdHNjcmVlbj4KK1lvdSBjYW4gdGhlbiBydW4gaXQgbGlrZSB0aGlzOgorPHRzY3JlZW4+L2JybHR0eS0zLjEvYmluL2JybHR0eTwvdHNjcmVlbj4KK1doZW4gdmVyc2lvbiAzLjIgaXMgcmVsZWFzZWQsIGp1c3QgaW5zdGFsbCBpdCBpbiBhIGRpZmZlcmVudCBsb2NhdGlvbgorYW5kIHJ1biB0aGUgbmV3IGV4ZWN1dGFibGUgZnJvbSB0aGVyZS4KKzx0c2NyZWVuPjx2ZXJiPgorLi9jb25maWd1cmUgLS13aXRoLWV4ZWN1dGUtcm9vdD0vYnJsdHR5LTMuMgorbWFrZSBpbnN0YWxsCisvYnJsdHR5LTMuMi9iaW4vYnJsdHR5Cis8L3ZlcmI+PC90c2NyZWVuPgorCitTbyBmYXIsIHRoaXMgcGFyYWRpZ20gaXMgc29tZXdoYXQgYXdrd2FyZCBmb3IgYXQgbGVhc3QgdHdvIHJlYXNvbnMuCitPbmUgaXMgdGhhdCB0aGVzZSBsb25nIHBhdGggbmFtZXMgYXJlIHRvbyBoYXJkIHRvIHR5cGUsCithbmQgdGhlIG90aGVyIGlzIHRoYXQgeW91IGRvbid0IHdhbnQgdG8gZmlkZGxlIHdpdGggeW91ciBzeXN0ZW0ncyBib290IHNlcXVlbmNlCitlYWNoIHRpbWUgeW91IHdhbnQgdG8gc3dpdGNoIHRvIGEgZGlmZmVyZW50IHZlcnNpb24gb2YgQlJMVFRZLgorVGhlc2UgcHJvYmxlbXMgYXJlIGVhc2lseSBzb2x2ZWQgYnkgYWRkaW5nIGEgc3ltYm9saWMgbGluayBmb3IgdGhlIGV4ZWN1dGFibGUuCis8dHNjcmVlbj5sbiAtcyAvYnJsdHR5LTMuMS9iaW4vYnJsdHR5IC9iaW4vYnJsdHR5PC90c2NyZWVuPgorV2hlbiBpdCdzIHRpbWUgdG8gc3dpdGNoIHRvIHRoZSBuZXdlciB2ZXJzaW9uLCBqdXN0IHJlcG9pbnQgdGhlIHN5bWJvbGljIGxpbmsuCis8dHNjcmVlbj5sbiAtcyAvYnJsdHR5LTMuMi9iaW4vYnJsdHR5IC9iaW4vYnJsdHR5PC90c2NyZWVuPgorCitJZiB5b3UnZCBsaWtlIHRvIGdldCByZWFsbHkgZmFuY3ksIHRoZW4gaW50cm9kdWNlIGFub3RoZXIgbGV2ZWwgb2YgaW5kaXJlY3Rpb24KK2luIG9yZGVyIHRvIG1ha2UgYWxsIG9mIEJSTFRUWSdzIGZpbGVzIGZvciBhbnkgZ2l2ZW4gdmVyc2lvbgorbG9vayBsaWtlIHRoZXkncmUgaW4gYWxsIG9mIHRoZSBzdGFuZGFyZCBwbGFjZXMuCitGaXJzdCwgY3JlYXRlIGEgc3ltYm9saWMgbGluayB0aHJvdWdoIGEgY29tbW9uIHJlcG9pbnRhYmxlIGxvY2F0aW9uCitmcm9tIGVhY2ggb2YgQlJMVFRZJ3Mgc3RhbmRhcmQgbG9jYXRpb25zLgorPHRzY3JlZW4+PHZlcmI+CitsbiAtcyAvYnJsdHR5L2Jpbi9icmx0dHkgL2Jpbi9icmx0dHkKK2xuIC1zIC9icmx0dHkvZXRjL2JybHR0eSAvZXRjL2JybHR0eQorbG4gLXMgL2JybHR0eS9saWIvYnJsdHR5IC9saWIvYnJsdHR5Cis8L3ZlcmI+PC90c2NyZWVuPgorVGhlbiBhbGwgeW91IG5lZWQgdG8gZG8gaXMgdG8gcG9pbnQgPHR0Pi9icmx0dHk8Lz4gdG8gdGhlIGRlc2lyZWQgdmVyc2lvbi4KKzx0c2NyZWVuPmxuIC1zIC9icmx0dHktMy4xIC9icmx0dHk8L3RzY3JlZW4+CisKKzxzZWN0MT5JbnN0YWxsYXRpb24vUmVzY3VlIFJvb3QgRGlza3MgZm9yIExpbnV4PHA+CitCUkxUVFkgY2FuIHJ1biBhcyBhIHN0YW5kLWFsb25lIGV4ZWN1dGFibGUuCitFdmVyeXRoaW5nIGl0IG5lZWRzIHRvIGtub3cgY2FuIGJlIGV4cGxpY2l0bHkgY29uZmlndXJlZCBhdCBidWlsZC10aW1lCisoc2VlIDxyZWYgaWQ9ImJ1aWxkIiBuYW1lPSJCdWlsZCBPcHRpb25zIj4pLgorSWYgdGhlIGRhdGEgZGlyZWN0b3J5Cisoc2VlIHRoZSA8cmVmIGlkPSJidWlsZC1kYXRhLWRpcmVjdG9yeSIgbmFtZT0iLS13aXRoLWRhdGEtZGlyZWN0b3J5Ij4KK2FuZCA8cmVmIGlkPSJidWlsZC1leGVjdXRlLXJvb3QiIG5hbWU9Ii0td2l0aC1leGVjdXRlLXJvb3QiPiBidWlsZCBvcHRpb25zKQorZG9lc24ndCBleGlzdCwgdGhlbiBCUkxUVFkgbG9va3MgaW4gPHR0Pi9ldGM8Lz4gZm9yIHRoZSBmaWxlcyBpdCBuZWVkcy4KK0V2ZW4gaWYgYW55IG9mIHRoZXNlIGZpbGVzIGRvbid0IGV4aXN0IGF0IGFsbCwgQlJMVFRZIHN0aWxsIHdvcmtzIQorCitJZiwgZm9yIHNvbWUgcmVhc29uLCB5b3UgZXZlciBjcmVhdGUgdGhlIGRhdGEgZGlyZWN0b3J5CisodXN1YWxseSA8dHQ+L2V0Yy9icmx0dHk8Lz4pIGJ5IGhhbmQsIGl0J3MgaW1wb3J0YW50Cit0byBzZXQgaXRzIHBlcm1pc3Npb25zIHNvIHRoYXQgb25seSByb290IGNhbiBjcmVhdGUgZmlsZXMgd2l0aGluIGl0LgorPHRzY3JlZW4+Y2htb2QgNzU1IC9ldGMvYnJsdHR5PC90c2NyZWVuPgorCitUaGUgc2NyZWVuIGNvbnRlbnQgaW5zcGVjdGlvbiBkZXZpY2UgKHVzdWFsbHkgPHR0Pi9kZXYvdmNzYTwvPikgaXMgcmVxdWlyZWQuCitJdCBzaG91bGQgYWxyZWFkeSBleGlzdCB1bmxlc3MgeW91ciBMaW51eCBkaXN0cmlidXRpb24gaXMgcXVpdGUgb2xkLgorSWYgbmVjZXNzYXJ5LCB5b3UgY2FuIGNyZWF0ZSBpdCB3aXRoOgorPHRzY3JlZW4+PHZlcmI+Citta25vZCAvZGV2L3Zjc2EgYyA3IDEyOAorY2htb2QgNjYwIC9kZXYvdmNzYQorY2hvd24gcm9vdC50dHkgL2Rldi92Y3NhCis8L3ZlcmI+PC90c2NyZWVuPgorCitPbmUgcHJvYmxlbSBvZnRlbiBlbmNvdW50ZXJlZCB3aGVuIHRyeWluZyB0byB1c2UgQlJMVFRZCitpbiBhbiB1bmNlcnRhaW4gZW52aXJvbm1lbnQgbGlrZSBhIHJvb3QgZGlzayBvciBhbiBpbmNvbXBsZXRlIHN5c3RlbSBpcwordGhhdCBpdCBtaWdodCBub3QgZmluZCB0aGUgc2hhcmVkIGxpYnJhcmllcyAob3IgcGFydHMgdGhlcmVvZikgd2hpY2ggaXQgbmVlZHMuCitSb290IGRpc2tzIG9mdGVuIHVzZSBzdWJzZXQgYW5kL29yIG91dGRhdGVkIHZlcnNpb25zIG9mIHRoZSBsaWJyYXJpZXMKK3doaWNoIG1heSBiZSBpbmFkZXF1YXRlLgorVGhlIHNvbHV0aW9uIGlzIHRvIGNvbmZpZ3VyZSBCUkxUVFkgd2l0aCB0aGUKKzxyZWYgaWQ9ImJ1aWxkLXN0YW5kYWxvbmUtcHJvZ3JhbXMiIG5hbWU9Ii0tZW5hYmxlLXN0YW5kYWxvbmUtcHJvZ3JhbXMiPiBidWlsZCBvcHRpb24uCitUaGlzIHJlbW92ZXMgYWxsIGRlcGVuZGVuY2llcyBvbiBzaGFyZWQgbGlicmFyaWVzLAorYnV0LCB1bmZvcnR1bmF0ZWx5LCBhbHNvIGNyZWF0ZXMgYSBsYXJnZXIgZXhlY3V0YWJsZS4KK1RoZXJlIGFyZSBhIG51bWJlciBvZiBidWlsZCBvcHRpb25zIHdoaWNoIGNhbiBiZSB1c2VkCit0byBzZWxlY3RpdmVseSByZW1vdmUgdW5uZWVkZWQgZmVhdHVyZXMgZnJvbSBCUkxUVFkKK2luIG9yZGVyIHRvIHNvbWV3aGF0IG1pdGlnYXRlIHRoaXMgcHJvYmxlbQorKHNlZSBzZWN0aW9uIDxyZWYgaWQ9ImJ1aWxkLWZlYXR1cmVzIiBuYW1lPSJCdWlsZCBGZWF0dXJlcyI+KS4KKworVGhlIGV4ZWN1dGFibGUgaXMgc3RyaXBwZWQgZHVyaW5nIHRoZSA8cmVmIGlkPSJtYWtlLWluc3RhbGwiIG5hbWU9Im1ha2UgaW5zdGFsbCI+LgorVGhpcyBzaWduaWZpY2FudGx5IHJlZHVjZXMgaXRzIHNpemUgYnkgcmVtb3ZpbmcgaXRzIHN5bWJvbCB0YWJsZS4KK1lvdSdsbCBnZXQgYSBtdWNoIHNtYWxsZXIgZXhlY3V0YWJsZSwgdGhlcmVmb3JlLAoraWYgeW91IGNvbXBsZXRlIHRoZSBmdWxsIGJ1aWxkIHByb2NlZHVyZSwKK2FuZCB0aGVuIGNvcHkgaXQgZnJvbSBpdHMgaW5zdGFsbGVkIGxvY2F0aW9uLgorSWYsIGhvd2V2ZXIsIHlvdSBjb3B5IGl0IGZyb20gdGhlIGJ1aWxkIGRpcmVjdG9yeSwgaXQnbGwgYmUgd2F5IHRvbyBiaWcuCitEb24ndCBmb3JnZXQgdG8gc3RyaXAgaXQuCis8dHNjcmVlbj5zdHJpcCBicmx0dHk8L3RzY3JlZW4+CisKKzxzZWN0MT5GdXR1cmUgRW5oYW5jZW1lbnRzPHA+CitBcGFydCBmcm9tIGZpeGluZyBidWdzIGFuZCBzdXBwb3J0aW5nIG1vcmUgdHlwZXMgb2YgYnJhaWxsZSBkaXNwbGF5cywKK3dlIGhvcGUsIHRpbWUgcGVybWl0dGluZywgdG8gd29yayBvbiB0aGUgZm9sbG93aW5nOgorPGRlc2NyaXA+CisgIDx0YWcvQmV0dGVyIEF0dHJpYnV0ZSBIYW5kbGluZy8KKyAgICA8aXRlbWl6ZT4KKyAgICAgIDxpdGVtPkF0dHJpYnV0ZSB0cmFja2luZy4KKyAgICAgIDxpdGVtPk1peGVkIHRleHQgYW5kIGF0dHJpYnV0ZSBtb2RlLgorICAgIDwvaXRlbWl6ZT4KKyAgPHRhZy9TY3JvbGwgVHJhY2tpbmcvCisgICAgTG9ja2luZyB0aGUgYnJhaWxsZSB3aW5kb3cgdG8gb25lIGxpbmUgYXMgaXQgc2Nyb2xscyBvbiB0aGUgc2NyZWVuLgorICA8dGFnL0JldHRlciBTcGVlY2ggU3VwcG9ydC8KKyAgICA8aXRlbWl6ZT4KKyAgICAgIDxpdGVtPk1peGVkIGJyYWlsbGUgYW5kIHNwZWVjaCBmb3IgZmFzdGVyIHJlYWRpbmcgb2YgdGV4dC4KKyAgICAgIDxpdGVtPkJldHRlciBzcGVlY2ggbmF2aWdhdGlvbi4KKyAgICAgIDxpdGVtPk1vcmUgc3BlZWNoIHN5bnRoZXNpemVycy4KKyAgICA8L2l0ZW1pemU+CisgIDx0YWcvU2NyZWVuIFN1YnJlZ2lvbnMvCisgICAgSWdub3JlIGN1cnNvciBtb3Rpb24gb3V0c2lkZSB0aGUgcmVnaW9uLAorICAgIGFuZCBzZXQgc29mdCBuYXZpZ2F0aW9uYWwgYm91bmRhcmllcyBhdCB0aGUgZWRnZXMgb2YgdGhlIHJlZ2lvbi4KKzwvZGVzY3JpcD4KK1NlZSB0aGUgZmlsZSA8dHQvVE9ETy8gZm9yIGEgbW9yZSBjb21wbGV0ZSBsaXN0LgorCis8c2VjdDE+S25vd24gQnVnczxwPgorQXQgdGhlIHRpbWUgb2Ygd3JpdGluZyAoRGVjZW1iZXIgMjAwMSksIHRoZSBmb2xsb3dpbmcgcHJvYmxlbXMgYXJlIGtub3duOgorCitDdXJzb3Igcm91dGluZyBpcyBpbXBsZW1lbnRlZCBhcyBhIGxvb3Bpbmcgc3ViLXByb2Nlc3MKK3doaWNoIHJ1bnMgYXQgcmVkdWNlZCBwcmlvcml0eSB0byBhdm9pZCB1c2luZyB0b28gbXVjaCBjcHUgdGltZS4KK0RpZmZlcmVudCBzeXN0ZW0gbG9hZHMgcmVxdWlyZSBkaWZmZXJlbnQgc2V0dGluZ3Mgb2YgaXRzIHBhcmFtZXRlcnMuCitUaGUgZGVmYXVsdHMgd29yayB2ZXJ5IHdlbGwKK2luIGEgdHlwaWNhbCBVbml4IGVkaXRvciBvbiBhIGZhaXJseSBsaWdodGx5IGxvYWRlZCBzeXN0ZW0sCitidXQgdmVyeSBwb29ybHkgaW4gc29tZSBvdGhlciBzaXR1YXRpb25zLAorZS5nLiBvdmVyIGEgc2xvdyBzZXJpYWwgbGluayB0byBhIHJlbW90ZSBob3N0LgorCis8YXBwZW5kaXg+CisKKzxzZWN0PlN1cHBvcnRlZCBCcmFpbGxlIERpc3BsYXlzPGxhYmVsIGlkPSJkaXNwbGF5cyI+PHA+CitCUkxUVFkgc3VwcG9ydHMgdGhlIGZvbGxvd2luZyBicmFpbGxlIGRpc3BsYXlzOgorPHRhYmxlIGxvYz0iaCI+CisgIDx0YWJ1bGFyIGNhPSJsbCI+CisgICAgTmFtZXxNb2RlbHNAPGhsaW5lPgorICAgICZCcmFpbGxlRHJpdmVycworICA8L3RhYnVsYXI+Cis8L3RhYmxlPgorCis8c2VjdD5TdXBwb3J0ZWQgU3BlZWNoIFN5bnRoZXNpemVyczxsYWJlbCBpZD0ic3ludGhlc2l6ZXJzIj48cD4KK0JSTFRUWSBzdXBwb3J0cyB0aGUgZm9sbG93aW5nIHNwZWVjaCBzeW50aGVzaXplcnM6Cis8dGFibGUgbG9jPSJoIj4KKyAgPHRhYnVsYXIgY2E9ImxsIj4KKyAgICBOYW1lfE1vZGVsc0A8aGxpbmU+CisgICAgJlNwZWVjaERyaXZlcnMKKyAgPC90YWJ1bGFyPgorPC90YWJsZT4KKworPHNlY3Q+RHJpdmVyIElkZW50aWZpY2F0aW9uIENvZGVzPGxhYmVsIGlkPSJkcml2ZXJzIj48cD4KKzx0YWJsZSBsb2M9ImgiPgorICA8dGFidWxhciBjYT0ibGwiPgorICAgIENvZGV8TmFtZUA8aGxpbmU+CisgICAgJkRyaXZlckNvZGVzCisgIDwvdGFidWxhcj4KKzwvdGFibGU+CisKKzxzZWN0PlN1cHBvcnRlZCBTY3JlZW4gRHJpdmVyczxsYWJlbCBpZD0ic2NyZWVuIj48cD4KK0JSTFRUWSBzdXBwb3J0cyB0aGUgZm9sbG93aW5nIHNjcmVlbiBkcml2ZXJzOgorPGRlc2NyaXA+CisgIDx0YWcvYXMvCisgICAgQVQtU1BJCisgIDx0YWcvaGQvCisgICAgVGhpcyBkcml2ZXIgcHJvdmlkZXMgZGlyZWN0IGFjY2VzcyB0byB0aGUgSHVyZCBjb25zb2xlIHNjcmVlbi4KKyAgICBJdCdzIG9ubHkgc2VsZWN0YWJsZSwgYW5kIGlzIHRoZSBkZWZhdWx0LCBvbiBIdXJkIHN5c3RlbXMuCisgIDx0YWcvbHgvCisgICAgVGhpcyBkcml2ZXIgcHJvdmlkZXMgZGlyZWN0IGFjY2VzcyB0byB0aGUgTGludXggY29uc29sZSBzY3JlZW4uCisgICAgSXQncyBvbmx5IHNlbGVjdGFibGUsIGFuZCBpcyB0aGUgZGVmYXVsdCwgb24gTGludXggc3lzdGVtcy4KKyAgPHRhZy9zYy8KKyAgICBUaGlzIGRyaXZlciBwcm92aWRlcyBhY2Nlc3MgdG8gdGhlIDx0dC9zY3JlZW4vIHByb2dyYW0uCisgICAgSXQncyBzZWxlY3RhYmxlIG9uIGFsbCBzeXN0ZW1zLAorICAgIGFuZCBpcyB0aGUgZGVmYXVsdCBpZiBubyBuYXRpdmUgc2NyZWVuIGRyaXZlciBpcyBhdmFpbGFibGUuCisgICAgVGhlIHBhdGNoIGZvciA8dHQvc2NyZWVuLyB3aGljaCB3ZSBwcm92aWRlCisgICAgKHNlZSB0aGUgPHR0L1BhdGNoZXMvIHN1YmRpcmVjdG9yeSkKKyAgICBtdXN0IGJlIGFwcGxpZWQuCisgICAgVXNlIG9mIHRoaXMgZHJpdmVyLAorICAgIGR1ZSB0byB0aGUgZmFjdCB0aGF0IDx0dC9zY3JlZW4vIG11c3QgYmUgY29uY3VycmVudGx5IHJ1bm5pbmcsCisgICAgbWFrZXMgQlJMVFRZIGVmZmVjdGl2ZWx5IHVzZWZ1bCBvbmx5IGFmdGVyIHRoZSB1c2VyIGhhcyBsb2dnZWQgaW4uCisgIDx0YWcvd24vCisgICAgVGhpcyBkcml2ZXIgcHJvdmlkZXMgZGlyZWN0IGFjY2VzcyB0byB0aGUgV2luZG93cyBjb25zb2xlIHNjcmVlbi4KKyAgICBJdCdzIG9ubHkgc2VsZWN0YWJsZSwgYW5kIGlzIHRoZSBkZWZhdWx0LCBvbiBXaW5kb3dzL0N5Z3dpbiBzeXN0ZW1zLgorPC9kZXNjcmlwPgorCis8c2VjdD5PcGVyYW5kIFN5bnRheDxwPgorCis8c2VjdDE+RHJpdmVyIFNwZWNpZmljYXRpb248bGFiZWwgaWQ9Im9wZXJhbmQtZHJpdmVyIj48cD4KK0EgYnJhaWxsZSBkaXNwbGF5IG9yIHNwZWVjaCBzeW50aGVzaXplciBkcml2ZXIgbXVzdCBiZSBzcGVjaWZpZWQKK3ZpYSBpdHMgdHdvLWxldHRlciA8cmVmIGlkPSJkcml2ZXJzIiBuYW1lPSJkcml2ZXIgaWRlbnRpZmljYXRpb24gY29kZSI+LgorCitBIGNvbW1hLWRlbGltaXRlZCBsaXN0IG9mIGRyaXZlcnMgbWF5IGJlIHNwZWNpZmllZC4KK0lmIHRoaXMgaXMgZG9uZSB0aGVuIGF1dG9kZXRlY3Rpb24gaXMgcGVyZm9ybWVkIHVzaW5nIGVhY2ggbGlzdGVkIGRyaXZlciBpbiBzZXF1ZW5jZS4KK1lvdSBtYXkgbmVlZCB0byBleHBlcmltZW50IGluIG9yZGVyIHRvIGRldGVybWluZSB0aGUgbW9zdCByZWxpYWJsZSBvcmRlcgorc2luY2Ugc29tZSBkcml2ZXJzIGF1dG9kZXRlY3QgYmV0dGVyIHRoYW4gb3RoZXJzLgorCitJZiB0aGUgc2luZ2xlIHdvcmQgPHR0L2F1dG8vIGlzIHNwZWNpZmllZCB0aGVuIGF1dG9kZXRlY3Rpb24gaXMgcGVyZm9ybWVkCit1c2luZyBvbmx5IHRob3NlIGRyaXZlcnMgd2hpY2ggYXJlIGtub3duIHRvIGJlIHJlbGlhYmxlIGZvciB0aGlzIHB1cnBvc2UuCisKKzxzZWN0MT5CcmFpbGxlIERldmljZSBTcGVjaWZpY2F0aW9uPGxhYmVsIGlkPSJvcGVyYW5kLWJyYWlsbGUtZGV2aWNlIj48cD4KK1RoZSBnZW5lcmFsIGZvcm0gb2YgYSBicmFpbGxlIGRldmljZSBzcGVjaWZpY2F0aW9uCisoc2VlIHRoZSA8cmVmIGlkPSJvcHRpb25zLWJyYWlsbGUtZGV2aWNlIiBuYW1lPSItZCI+IGNvbW1hbmQgbGluZSBvcHRpb24sCit0aGUgPHJlZiBpZD0iY29uZmlndXJlLWJyYWlsbGUtZGV2aWNlIiBuYW1lPSJicmFpbGxlLWRldmljZSI+IGNvbmZpZ3VyYXRpb24gZmlsZSBkaXJlY3RpdmUsCithbmQgdGhlIDxyZWYgaWQ9ImJ1aWxkLWJyYWlsbGUtZGV2aWNlIiBuYW1lPSItLXdpdGgtYnJhaWxsZS1kZXZpY2UiPiBidWlsZCBvcHRpb24pCitpcyA8dHQvcXVhbGlmaWVyOi88ZW0vZGF0YS8uCitGb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSB3aXRoIGVhcmxpZXIgcmVsZWFzZXMsCitpZiB0aGUgcXVhbGlmaWVyIGlzIG9taXR0ZWQgdGhlbiA8dHQvc2VyaWFsOi8gaXMgYXNzdW1lZC4KKworVGhlIGZvbGxvd2luZyBkZXZpY2UgdHlwZXMgYXJlIHN1cHBvcnRlZDoKKzxkZXNjcmlwPgorICA8dGFnL0JsdWV0b290aC8KKyAgICBGb3IgYSBibHVldG9vdGggZGV2aWNlLCBzcGVjaWZ5IDx0dC9ibHVldG9vdGg6LzxlbS9hZGRyZXNzLy4KKyAgICBUaGUgYWRkcmVzcyBtdXN0IGJlIHNpeCB0d28tZGlnaXQgaGV4YWRlY2ltYWwgbnVtYmVycyBzZXBhcmF0ZWQgYnkgY29sb25zLAorICAgIGUuZy4gPHR0LzAxOjIzOjQ1OjY3Ojg5OkFCLy4KKyAgPHRhZy9TZXJpYWwvCisgICAgRm9yIGEgc2VyaWFsIGRldmljZSwgc3BlY2lmeSA8dHQvc2VyaWFsOi88ZW0+L3BhdGgvdG8vZGV2aWNlPC8+LgorICAgIFRoZSA8dHQvc2VyaWFsOi8gcXVhbGlmaWVyIGlzIG9wdGlvbmFsIChmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSkuCisgICAgSWYgYSByZWxhdGl2ZSBwYXRoIGlzIGdpdmVuIHRoZW4gaXQncyBhbmNob3JlZCBhdCA8dHQ+L2RldjwvPgorICAgICh0aGUgdXN1YWwgbG9jYXRpb24gd2hlcmUgZGV2aWNlcyBhcmUgZGVmaW5lZCBvbiBhIFVuaXgtbGlrZSBzeXN0ZW0pLgorICAgIFRoZSBmb2xsb3dpbmcgZGV2aWNlIHNwZWNpZmljYXRpb25zIGFsbCByZWZlcgorICAgIHRvIHRoZSBmaXJzdCBzZXJpYWwgZGV2aWNlIG9uIExpbnV4OgorICAgIDxpdGVtaXplPgorICAgICAgPGl0ZW0+PHR0PnNlcmlhbDovZGV2L3R0eVMwPC8+CisgICAgICA8aXRlbT48dHQ+c2VyaWFsOnR0eVMwPC8+CisgICAgICA8aXRlbT48dHQ+L2Rldi90dHlTMDwvPgorICAgICAgPGl0ZW0+PHR0PnR0eVMwPC8+CisgICAgPC9pdGVtaXplPgorICA8dGFnL1VTQi8KKyAgICBGb3IgYSBVU0IgZGV2aWNlLCBzcGVjaWZ5IDx0dC91c2I6Ly4KKyAgICBCUkxUVFkgd2lsbCBzZWFyY2ggZm9yIHRoZSBmaXJzdCBVU0IgZGV2aWNlIHdoaWNoCisgICAgbWF0Y2hlcyB0aGUgYnJhaWxsZSBkaXNwbGF5IGRyaXZlciBiZWluZyB1c2VkLgorICAgIElmIHRoaXMgaXMgaW5hZGVxdWF0ZSwKKyAgICBlLmcuIGlmIHlvdSBoYXZlIG1vcmUgdGhhbiBvbmUgVVNCIGJyYWlsbGUgZGlzcGxheSB3aGljaCByZXF1aXJlcyB0aGUgc2FtZSBkcml2ZXIsCisgICAgdGhlbiB5b3UgY2FuIHJlZmluZSB0aGUgZGV2aWNlIHNwZWNpZmljYXRpb24KKyAgICBieSBhcHBlbmRpbmcgdGhlIHNlcmlhbCBudW1iZXIgb2YgdGhlIGRpc3BsYXkgdG8gaXQsCisgICAgZS5nLiA8dHQvdXNiOjEyMzQ1Ly4KKyAgICBOLkIuOiBUaGUgImlkZW50aWZpY2F0aW9uIGJ5IHNlcmlhbCBudW1iZXIiIGZlYXR1cmUKKyAgICBkb2Vzbid0IHdvcmsgZm9yIHNvbWUgbW9kZWxzIGJlY2F1c2Ugc29tZSBtYW51ZmFjdHVyZXJzCisgICAgZWl0aGVyIGRvbid0IHNldCB0aGUgVVNCIHNlcmlhbCBudW1iZXIgZGVzY3JpcHRvciBhdCBhbGwKKyAgICBvciBkbyBzZXQgaXQgYnV0IG5vdCB0byBhIHVuaXF1ZSB2YWx1ZS4KKzwvZGVzY3JpcD4KKworQSBjb21tYS1kZWxpbWl0ZWQgbGlzdCBvZiBicmFpbGxlIGRldmljZXMgbWF5IGJlIHNwZWNpZmllZC4KK0lmIHRoaXMgaXMgZG9uZSB0aGVuIGF1dG9kZXRlY3Rpb24gaXMgcGVyZm9ybWVkIG9uIGVhY2ggbGlzdGVkIGRldmljZSBpbiBzZXF1ZW5jZS4KK1RoaXMgZmVhdHVyZSBpcyBwYXJ0aWN1bGFybHkgdXNlZnVsIGlmIHlvdSBoYXZlCithIGJyYWlsbGUgZGlzcGxheSB3aXRoIG1vcmUgdGhhbiBvbmUgaW50ZXJmYWNlLAorZS5nLiBib3RoIGEgc2VyaWFsIGFuZCBhIFVTQiBwb3J0LgorSW4gdGhpcyBjYXNlIGl0J3MgdXN1YWxseSBiZXR0ZXIgdG8gbGlzdCB0aGUgVVNCIHBvcnQgZmlyc3QsCitlLmcuIDx0dD51c2I6LHNlcmlhbDovZGV2L3R0eVMwPC90dD4sCitzaW5jZSB0aGUgZm9ybWVyIHRlbmRzIHRvIGF1dG9kZXRlY3QgbW9yZSByZWxpYWJseSB0aGFuIHRoZSBsYXR0ZXIuCisKKzxzZWN0MT5QQ00gRGV2aWNlIFNwZWNpZmljYXRpb248bGFiZWwgaWQ9Im9wZXJhbmQtcGNtLWRldmljZSI+PHA+CitJbiBtb3N0IGNhc2VzIHRoZSBQQ00gZGV2aWNlIGlzCit0aGUgZnVsbCBwYXRoIHRvIGFuIGFwcHJvcHJpYXRlIHN5c3RlbSBkZXZpY2UuCitFeGNlcHRpb25zIGFyZToKKzxkZXNjcmlwPgorICA8dGFnL0FMU0EvCisgICAgVGhlIG5hbWUgb2YgYW5kIGFyZ3VtZW50cyBmb3IgdGhlIHBoeXNpY2FsIG9yIGxvZ2ljYWwgZGV2aWNlLAorICAgIGkuZS4gPGVtL25hbWUvWzx0dC86LzxlbS9hcmd1bWVudC88dHQvLC8uLi5dLgorPC9kZXNjcmlwPgorCitUaGUgZGVmYXVsdCBQQ00gZGV2aWNlIGlzOgorPHRhYmxlIGxvYz0iaCI+CisgIDx0YWJ1bGFyIGNhPSJsbCI+CisgICAgUGxhdGZvcm18RGV2aWNlQDxobGluZT4KKyAgICBGcmVlQlNEfC9kZXYvZHNwQAorICAgIExpbnV4L0FMU0F8aHc6MCwwQAorICAgIExpbnV4L09TU3wvZGV2L2RzcEAKKyAgICBOZXRCU0R8L2Rldi9hdWRpb0AKKyAgICBPcGVuQlNEfC9kZXYvYXVkaW9ACisgICAgUW54fHByZWZlcnJlZCBQQ00gb3V0cHV0IGRldmljZUAKKyAgICBTb2xhcmlzfC9kZXYvYXVkaW9ACisgIDwvdGFidWxhcj4KKzwvdGFibGU+CisKKzxzZWN0MT5NSURJIERldmljZSBTcGVjaWZpY2F0aW9uPGxhYmVsIGlkPSJvcGVyYW5kLW1pZGktZGV2aWNlIj48cD4KK0luIG1vc3QgY2FzZXMgdGhlIE1JREkgZGV2aWNlIGlzCit0aGUgZnVsbCBwYXRoIHRvIGFuIGFwcHJvcHJpYXRlIHN5c3RlbSBkZXZpY2UuCitFeGNlcHRpb25zIGFyZToKKzxkZXNjcmlwPgorICA8dGFnL0FMU0EvCisgICAgVGhlIGNsaWVudCBhbmQgcG9ydCBzZXBhcmF0ZWQgYnkgYSBjb2xvbiwKKyAgICBpLmUuIDxlbS9jbGllbnQvPHR0LzovPGVtL3BvcnQvLgorICAgIEVhY2ggbWF5IGJlIHNwZWNpZmllZAorICAgIGVpdGhlciBhcyBhIG51bWJlcgorICAgIG9yIGFzIGEgY2FzZS1zZW5zaXRpdmUgc3Vic3RyaW5nIG9mIGl0cyBuYW1lLgorPC9kZXNjcmlwPgorCitUaGUgZGVmYXVsdCBNSURJIGRldmljZSBpczoKKzx0YWJsZSBsb2M9ImgiPgorICA8dGFidWxhciBjYT0ibGwiPgorICAgIFBsYXRmb3JtfERldmljZUA8aGxpbmU+CisgICAgTGludXgvQUxTQXx0aGUgZmlyc3QgYXZhaWxhYmxlIE1JREkgb3V0cHV0IHBvcnRACisgICAgTGludXgvT1NTfC9kZXYvc2VxdWVuY2VyQAorICA8L3RhYnVsYXI+Cis8L3RhYmxlPgorCis8c2VjdD5TdGFuZGFyZCBCcmFpbGxlIERvdCBOdW1iZXJpbmcgQ29udmVudGlvbjxsYWJlbCBpZD0iZG90cyI+PHA+CitBIHN0YW5kYXJkIGJyYWlsbGUgY2VsbCBjb25zaXN0cyBvZiBzaXggZG90cworYXJyYW5nZWQgaW4gdGhyZWUgcm93cyBhbmQgdHdvIGNvbHVtbnMuCitFYWNoIGRvdCBjYW4gYmUgc3BlY2lmaWNhbGx5IGlkZW50aWZpZWQgYnkgaXRzIG51bWJlciBhcyBmb2xsb3dzOgorPGRlc2NyaXA+CisgIDx0YWcvMS9Ub3AtbGVmdCAocm93IDEsIGNvbHVtbiAxKS4KKyAgPHRhZy8yL01pZGRsZS1sZWZ0IChyb3cgMiwgY29sdW1uIDEpLgorICA8dGFnLzMvQm90dG9tLWxlZnQgKHJvdyAzLCBjb2x1bW4gMSkuCisgIDx0YWcvNC9Ub3AtcmlnaHQgKHJvdyAxLCBjb2x1bW4gMikuCisgIDx0YWcvNS9NaWRkbGUtcmlnaHQgKHJvdyAyLCBjb2x1bW4gMikuCisgIDx0YWcvNi9Cb3R0b20tcmlnaHQgKHJvdyAzLCBjb2x1bW4gMikuCis8L2Rlc2NyaXA+CisKK0NvbXB1dGVyIGJyYWlsbGUgaGFzIGludHJvZHVjZWQgYSBmb3VydGggcm93IGF0IHRoZSBib3R0b20uCis8ZGVzY3JpcD4KKyAgPHRhZy83L0JlbG93LWxlZnQgKHJvdyA0LCBjb2x1bW4gMSkuCisgIDx0YWcvOC9CZWxvdy1yaWdodCAocm93IDQsIGNvbHVtbiAyKS4KKzwvZGVzY3JpcD4KKworUGVyaGFwcyBhIHBpY3R1cmUgd2lsbCBtYWtlIHRoaXMgbnVtYmVyaW5nIGNvbnZlbnRpb24gZWFzaWVyIHRvIHVuZGVyc3RhbmQuCis8dHNjcmVlbj48dmVyYj4KKzEgbyBvIDQKKzIgbyBvIDUKKzMgbyBvIDYKKzcgbyBvIDgKKzwvdmVyYj48L3RzY3JlZW4+CisKKzxzZWN0Pk5vcnRoIEFtZXJpY2FuIEJyYWlsbGUgQ29tcHV0ZXIgQ29kZTxsYWJlbCBpZD0ibmFiY2MiPjxwPgorPHRzY3JlZW4+PHZlcmI+CisgIE51bSBIZXggICAgIERvdHMgICAgIERlc2NyaXB0aW9uCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8ICAgMCAgMDAgIFs3ICAgNCAgOF0gIE5VTCAobnVsbCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgMSAgMDEgIFs3ICAxICAgOF0gIFNPSCAoc3RhcnQgb2YgaGVhZGVyKSAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgMiAgMDIgIFs3IDIxICAgOF0gIFNUWCAoc3RhcnQgb2YgdGV4dCkgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgMyAgMDMgIFs3ICAxNCAgOF0gIEVUWCAoZW5kIG9mIHRleHQpICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgNCAgMDQgIFs3ICAxNDUgOF0gIEVPVCAoZW5kIG9mIHRyYW5zbWlzc2lvbikgICAgICAgICAgICAgICAgICB8Cit8ICAgNSAgMDUgIFs3ICAxIDUgOF0gIEVOUSAoZW5xdWlyeSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgNiAgMDYgIFs3IDIxNCAgOF0gIEFDSyAoYWNrbm93bGVkZ2UpICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgNyAgMDcgIFs3IDIxNDUgOF0gIEJFTCAoYmVsbCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgOCAgMDggIFs3IDIxIDUgOF0gIEJTIChiYWNrIHNwYWNlKSAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgOSAgMDkgIFs3IDIgNCAgOF0gIEhUIChob3Jpem9udGFsIHRhYikgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAxMCAgMEEgIFs3IDIgNDUgOF0gIExGIChsaW5lIGZlZWQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAxMSAgMEIgIFs3MyAxICAgOF0gIFZUICh2ZXJ0aWNhbCB0YWIpICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAxMiAgMEMgIFs3MzIxICAgOF0gIEZGIChmb3JtIGZlZWQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAxMyAgMEQgIFs3MyAxNCAgOF0gIENSIChjYXJyaWFnZSByZXR1cm4pICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAxNCAgMEUgIFs3MyAxNDUgOF0gIFNPIChzaGlmdCBvdXQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAxNSAgMEYgIFs3MyAxIDUgOF0gIFNJIChzaGlmdCBpbikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAxNiAgMTAgIFs3MzIxNCAgOF0gIERMRSAoZGF0YSBsaW5rIGVzY2FwZSkgICAgICAgICAgICAgICAgICAgICB8Cit8ICAxNyAgMTEgIFs3MzIxNDUgOF0gIERDMSAoZGlyZWN0IGNvbnRyb2wgMSkgICAgICAgICAgICAgICAgICAgICB8Cit8ICAxOCAgMTIgIFs3MzIxIDUgOF0gIERDMiAoZGlyZWN0IGNvbnRyb2wgMikgICAgICAgICAgICAgICAgICAgICB8Cit8ICAxOSAgMTMgIFs3MzIgNCAgOF0gIERDMyAoZGlyZWN0IGNvbnRyb2wgMykgICAgICAgICAgICAgICAgICAgICB8Cit8ICAyMCAgMTQgIFs3MzIgNDUgOF0gIERDNCAoZGlyZWN0IGNvbnRyb2wgNCkgICAgICAgICAgICAgICAgICAgICB8Cit8ICAyMSAgMTUgIFs3MyAxICA2OF0gIE5BSyAobmVnYXRpdmUgYWNrbm93bGVkZ2UpICAgICAgICAgICAgICAgICB8Cit8ICAyMiAgMTYgIFs3MzIxICA2OF0gIFNZTiAoc3luY2hyb25pemUpICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAyMyAgMTcgIFs3IDIgNDU2OF0gIEVUQiAoZW5kIG9mIHRleHQgYmxvY2spICAgICAgICAgICAgICAgICAgICB8Cit8ICAyNCAgMTggIFs3MyAxNCA2OF0gIENBTiAoY2FuY2VsKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAyNSAgMTkgIFs3MyAxNDU2OF0gIEVNIChlbmQgb2YgbWVkaXVtKSAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAyNiAgMUEgIFs3MyAxIDU2OF0gIFNVQiAoc3Vic3RpdHV0ZSkgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAyNyAgMUIgIFs3IDIgNCA2OF0gIEVTQyAoZXNjYXBlKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAyOCAgMUMgIFs3IDIxIDU2OF0gIEZTIChmaWxlIHNlcGFyYXRvcikgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAyOSAgMUQgIFs3IDIxNDU2OF0gIEdTIChncm91cCBzZXBhcmF0b3IpICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAzMCAgMUUgIFs3ICAgNDUgOF0gIFJTIChyZWNvcmQgc2VwYXJhdG9yKSAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAzMSAgMUYgIFs3ICAgNDU2OF0gIFVTICh1bml0IHNlcGFyYXRvcikgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAzMiAgMjAgIFsgICAgICAgIF0gIHNwYWNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAzMyAgMjEgIFsgMzIgNCA2IF0gIGV4Y2xhbWF0aW9uIHBvaW50ICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAzNCAgMjIgIFsgICAgIDUgIF0gIHF1b3RhdGlvbiBtYXJrICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAzNSAgMjMgIFsgMyAgNDU2IF0gIG51bWJlciBzaWduICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAzNiAgMjQgIFsgIDIxNCA2IF0gIGRvbGxhciBzaWduICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAzNyAgMjUgIFsgICAxNCA2IF0gIHBlcmNlbnQgc2lnbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAzOCAgMjYgIFsgMzIxNCA2IF0gIGFtcGVyc2FuZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAzOSAgMjcgIFsgMyAgICAgIF0gIGFjdXRlIGFjY2VudCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICA0MCAgMjggIFsgMzIxIDU2IF0gIGxlZnQgcGFyZW50aGVzaXMgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgNCAgMjkxICBbIDMyIDQ1NiApIHJpZ2h0IHBhcmVudGhlc2lzICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICA0MiAgMkEgIFsgICAxICA2IF0gIGFzdGVyaXNrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICA0MyAgMkIgIFsgMyAgNCA2IF0gIHBsdXMgc2lnbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICA0NCAgMkMgIFsgICAgICA2IF0gIGNvbW1hICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICA0NSAgMkQgIFsgMyAgICA2IF0gIG1pbnVzIHNpZ24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICA0NiAgMkUgIFsgICAgNCA2IF0gIHBlcmlvZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICA0NyAgMkYgIFsgMyAgNCAgIF0gIGZvcndhcmQgc2xhc2ggICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICA0OCAgMzAgIFsgMyAgIDU2IF0gIHplcm8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICA0OSAgMzEgIFsgIDIgICAgIF0gIG9uZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICA1MCAgMzIgIFsgMzIgICAgIF0gIHR3byAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICA1MSAgMzMgIFsgIDIgIDUgIF0gIHRocmVlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICA1MiAgMzQgIFsgIDIgIDU2IF0gIGZvdXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICA1MyAgMzUgIFsgIDIgICA2IF0gIGZpdmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICA1NCAgMzYgIFsgMzIgIDUgIF0gIHNpeCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICA1NSAgMzcgIFsgMzIgIDU2IF0gIHNldmVuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICA1NiAgMzggIFsgMzIgICA2IF0gIGVpZ2h0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICA1NyAgMzkgIFsgMyAgIDUgIF0gIG5pbmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICA1OCAgM0EgIFsgICAxIDU2IF0gIGNvbG9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICA1OSAgM0IgIFsgICAgIDU2IF0gIHNlbWljb2xvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICA2MCAgM0MgIFsgIDIxICA2IF0gIGxlc3MtdGhhbiBzaWduICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICA2MSAgM0QgIFsgMzIxNDU2IF0gIGVxdWFscyBzaWduICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICA2MiAgM0UgIFsgMyAgNDUgIF0gIGdyZWF0ZXItdGhhbiBzaWduICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICA2MyAgM0YgIFsgICAxNDU2IF0gIHF1ZXN0aW9uIG1hcmsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICA2NCAgNDAgIFs3ICAgNCAgIF0gIGNvbW1lcmNpYWwgYXQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICA2NSAgNDEgIFs3ICAxICAgIF0gIGNhcGl0YWwgYSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICA2NiAgNDIgIFs3IDIxICAgIF0gIGNhcGl0YWwgYiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICA2NyAgNDMgIFs3ICAxNCAgIF0gIGNhcGl0YWwgYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICA2OCAgNDQgIFs3ICAxNDUgIF0gIGNhcGl0YWwgZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICA2OSAgNDUgIFs3ICAxIDUgIF0gIGNhcGl0YWwgZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICA3MCAgNDYgIFs3IDIxNCAgIF0gIGNhcGl0YWwgZiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICA3MSAgNDcgIFs3IDIxNDUgIF0gIGNhcGl0YWwgZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICA3MiAgNDggIFs3IDIxIDUgIF0gIGNhcGl0YWwgaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICA3MyAgNDkgIFs3IDIgNCAgIF0gIGNhcGl0YWwgaSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICA3NCAgNEEgIFs3IDIgNDUgIF0gIGNhcGl0YWwgaiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICA3NSAgNEIgIFs3MyAxICAgIF0gIGNhcGl0YWwgayAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICA3NiAgNEMgIFs3MzIxICAgIF0gIGNhcGl0YWwgbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICA3NyAgNEQgIFs3MyAxNCAgIF0gIGNhcGl0YWwgbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICA3OCAgNEUgIFs3MyAxNDUgIF0gIGNhcGl0YWwgbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICA3OSAgNEYgIFs3MyAxIDUgIF0gIGNhcGl0YWwgbyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICA4MCAgNTAgIFs3MzIxNCAgIF0gIGNhcGl0YWwgcCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICA4MSAgNTEgIFs3MzIxNDUgIF0gIGNhcGl0YWwgcSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICA4MiAgNTIgIFs3MzIxIDUgIF0gIGNhcGl0YWwgciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICA4MyAgNTMgIFs3MzIgNCAgIF0gIGNhcGl0YWwgcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICA4NCAgNTQgIFs3MzIgNDUgIF0gIGNhcGl0YWwgdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICA4NSAgNTUgIFs3MyAxICA2IF0gIGNhcGl0YWwgdSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICA4NiAgNTYgIFs3MzIxICA2IF0gIGNhcGl0YWwgdiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICA4NyAgNTcgIFs3IDIgNDU2IF0gIGNhcGl0YWwgdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICA4OCAgNTggIFs3MyAxNCA2IF0gIGNhcGl0YWwgeCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICA4OSAgNTkgIFs3MyAxNDU2IF0gIGNhcGl0YWwgeSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICA5MCAgNUEgIFs3MyAxIDU2IF0gIGNhcGl0YWwgeiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICA5MSAgNUIgIFs3IDIgNCA2IF0gIGxlZnQgYnJhY2tldCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICA5MiAgNUMgIFs3IDIxIDU2IF0gIGJhY2t3YXJkIHNsYXNoICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICA5MyAgNUQgIFs3IDIxNDU2IF0gIHJpZ2h0IGJyYWNrZXQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICA5NCAgNUUgIFs3ICAgNDUgIF0gIGNpcmN1bWZsZXggYWNjZW50ICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICA5NSAgNUYgIFsgICAgNDU2IF0gIHVuZGVyc2NvcmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICA5NiAgNjAgIFsgICAgNCAgIF0gIGdyYXZlIGFjY2VudCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICA5NyAgNjEgIFsgICAxICAgIF0gIHNtYWxsIGEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICA5OCAgNjIgIFsgIDIxICAgIF0gIHNtYWxsIGIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICA5OSAgNjMgIFsgICAxNCAgIF0gIHNtYWxsIGMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8IDEwMCAgNjQgIFsgICAxNDUgIF0gIHNtYWxsIGQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8IDEwMSAgNjUgIFsgICAxIDUgIF0gIHNtYWxsIGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8IDEwMiAgNjYgIFsgIDIxNCAgIF0gIHNtYWxsIGYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8IDEwMyAgNjcgIFsgIDIxNDUgIF0gIHNtYWxsIGcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8IDEwNCAgNjggIFsgIDIxIDUgIF0gIHNtYWxsIGggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8IDEwNSAgNjkgIFsgIDIgNCAgIF0gIHNtYWxsIGkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8IDEwNiAgNkEgIFsgIDIgNDUgIF0gIHNtYWxsIGogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8IDEwNyAgNkIgIFsgMyAxICAgIF0gIHNtYWxsIGsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8IDEwOCAgNkMgIFsgMzIxICAgIF0gIHNtYWxsIGwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8IDEwOSAgNkQgIFsgMyAxNCAgIF0gIHNtYWxsIG0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8IDExMCAgNkUgIFsgMyAxNDUgIF0gIHNtYWxsIG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8IDExMSAgNkYgIFsgMyAxIDUgIF0gIHNtYWxsIG8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8IDExMiAgNzAgIFsgMzIxNCAgIF0gIHNtYWxsIHAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8IDExMyAgNzEgIFsgMzIxNDUgIF0gIHNtYWxsIHEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8IDExNCAgNzIgIFsgMzIxIDUgIF0gIHNtYWxsIHIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8IDExNSAgNzMgIFsgMzIgNCAgIF0gIHNtYWxsIHMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8IDExNiAgNzQgIFsgMzIgNDUgIF0gIHNtYWxsIHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8IDExNyAgNzUgIFsgMyAxICA2IF0gIHNtYWxsIHUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8IDExOCAgNzYgIFsgMzIxICA2IF0gIHNtYWxsIHYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8IDExOSAgNzcgIFsgIDIgNDU2IF0gIHNtYWxsIHcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8IDEyMCAgNzggIFsgMyAxNCA2IF0gIHNtYWxsIHggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8IDEyMSAgNzkgIFsgMyAxNDU2IF0gIHNtYWxsIHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8IDEyMiAgN0EgIFsgMyAxIDU2IF0gIHNtYWxsIHogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8IDEyMyAgN0IgIFsgIDIgNCA2IF0gIGxlZnQgYnJhY2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8IDEyNCAgN0MgIFsgIDIxIDU2IF0gIHZlcnRpY2FsIGJhciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8IDEyNSAgN0QgIFsgIDIxNDU2IF0gIHJpZ2h0IGJyYWNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8IDEyNiAgN0UgIFsgICAgNDUgIF0gIHRpbGRlIGFjY2VudCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8IDEyNyAgN0YgIFs3ICAgNDU2IF0gIERFTCAoZGVsZXRlKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8IDEyOCAgODAgIFsgICAgNCAgOF0gIDxjb250cm9sPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8IDEyOSAgODEgIFsgICAxICAgOF0gIDxjb250cm9sPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8IDEzMCAgODIgIFsgIDIxICAgOF0gIEJQSCAoYnJlYWsgcGVybWl0dGVkIGhlcmUpICAgICAgICAgICAgICAgICB8Cit8IDEzMSAgODMgIFsgICAxNCAgOF0gIE5CSCAobm8gYnJlYWsgaGVyZSkgICAgICAgICAgICAgICAgICAgICAgICB8Cit8IDEzMiAgODQgIFsgICAxNDUgOF0gIDxjb250cm9sPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8IDEzMyAgODUgIFsgICAxIDUgOF0gIE5MIChuZXh0IGxpbmUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8IDEzNCAgODYgIFsgIDIxNCAgOF0gIFNTQSAoc3RhcnQgb2Ygc2VsZWN0ZWQgYXJlYSkgICAgICAgICAgICAgICB8Cit8IDEzNSAgODcgIFsgIDIxNDUgOF0gIEVTQSAoZW5kIG9mIHNlbGVjdGVkIGFyZWEpICAgICAgICAgICAgICAgICB8Cit8IDEzNiAgODggIFsgIDIxIDUgOF0gIENUUyAoY2hhcmFjdGVyIHRhYnVsYXRpb24gc2V0KSAgICAgICAgICAgICB8Cit8IDEzNyAgODkgIFsgIDIgNCAgOF0gIENUSiAoY2hhcmFjdGVyIHRhYnVsYXRpb24ganVzdGlmaWNhdGlvbikgICB8Cit8IDEzOCAgOEEgIFsgIDIgNDUgOF0gIExUUyAobGluZSB0YWJ1bGF0aW9uIHNldCkgICAgICAgICAgICAgICAgICB8Cit8IDEzOSAgOEIgIFsgMyAxICAgOF0gIFBMRCAocGFydGlhbCBsaW5lIGRvd24pICAgICAgICAgICAgICAgICAgICB8Cit8IDE0MCAgOEMgIFsgMzIxICAgOF0gIFBMVSAocGFydGlhbCBsaW5lIHVwKSAgICAgICAgICAgICAgICAgICAgICB8Cit8IDE0MSAgOEQgIFsgMyAxNCAgOF0gIFJMRiAocmV2ZXJzZSBsaW5lIGZlZWQpICAgICAgICAgICAgICAgICAgICB8Cit8IDE0MiAgOEUgIFsgMyAxNDUgOF0gIFNTMiAoc2luZ2xlIHNoaWZ0IHR3bykgICAgICAgICAgICAgICAgICAgICB8Cit8IDE0MyAgOEYgIFsgMyAxIDUgOF0gIFNTMyAoc2luZ2xlIHNoaWZ0IHRocmVlKSAgICAgICAgICAgICAgICAgICB8Cit8IDE0NCAgOTAgIFsgMzIxNCAgOF0gIERDUyAoZGV2aWNlIGNvbnRyb2wgc3RyaW5nKSAgICAgICAgICAgICAgICB8Cit8IDE0NSAgOTEgIFsgMzIxNDUgOF0gIFBVMSAocHJpdmF0ZSB1c2Ugb25lKSAgICAgICAgICAgICAgICAgICAgICB8Cit8IDE0NiAgOTIgIFsgMzIxIDUgOF0gIFBVMiAocHJpdmF0ZSB1c2UgdHdvKSAgICAgICAgICAgICAgICAgICAgICB8Cit8IDE0NyAgOTMgIFsgMzIgNCAgOF0gIFNUUyAoc2V0IHRyYW5zbWl0IHN0YXRlKSAgICAgICAgICAgICAgICAgICB8Cit8IDE0OCAgOTQgIFsgMzIgNDUgOF0gIENDIChjYW5jZWwgY2hhcmFjdGVyKSAgICAgICAgICAgICAgICAgICAgICB8Cit8IDE0OSAgOTUgIFsgMyAxICA2OF0gIE1XIChtZXNzYWdlIHdhaXRpbmcpICAgICAgICAgICAgICAgICAgICAgICB8Cit8IDE1MCAgOTYgIFsgMzIxICA2OF0gIFNHQSAoc3RhcnQgb2YgZ3VhcmRlZCBhcmVhKSAgICAgICAgICAgICAgICB8Cit8IDE1MSAgOTcgIFsgIDIgNDU2OF0gIEVHQSAoZW5kIG9mIGd1YXJkZWQgYXJlYSkgICAgICAgICAgICAgICAgICB8Cit8IDE1MiAgOTggIFsgMyAxNCA2OF0gIFNTIChzdGFydCBvZiBzdHJpbmcpICAgICAgICAgICAgICAgICAgICAgICB8Cit8IDE1MyAgOTkgIFsgMyAxNDU2OF0gIDxjb250cm9sPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8IDE1NCAgOUEgIFsgMyAxIDU2OF0gIFNDSSAoc2luZ2xlIGNoYXJhY3RlciBpbnRyb2R1Y2VyKSAgICAgICAgICB8Cit8IDE1NSAgOUIgIFsgIDIgNCA2OF0gIENTSSAoY29udHJvbCBzZXF1ZW5jZSBpbnRyb2R1Y2VyKSAgICAgICAgICB8Cit8IDE1NiAgOUMgIFsgIDIxIDU2OF0gIFNUIChzdHJpbmcgdGVybWluYXRvcikgICAgICAgICAgICAgICAgICAgICB8Cit8IDE1NyAgOUQgIFsgIDIxNDU2OF0gIE9TQyAob3BlcmF0aW5nIHN5c3RlbSBjb21tYW5kKSAgICAgICAgICAgICB8Cit8IDE1OCAgOUUgIFsgICAgNDUgOF0gIFBNIChwcml2YWN5IG1lc3NhZ2UpICAgICAgICAgICAgICAgICAgICAgICB8Cit8IDE1OSAgOUYgIFsgICAgNDU2OF0gIEFQQyAoYXBwbGljYXRpb24gcHJvZ3JhbSBjb21tYW5kKSAgICAgICAgICB8Cit8IDE2MCAgQTAgIFs3ICAgICAgOF0gIG5vLWJyZWFrIHNwYWNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8IDE2MSAgQTEgIFs3MzIgNCA2IF0gIGludmVydGVkIGV4Y2xhbWF0aW9uIG1hcmsgICAgICAgICAgICAgICAgICB8Cit8IDE2MiAgQTIgIFs3IDIxNCA2IF0gIGNlbnQgc2lnbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8IDE2MyAgQTMgIFs3MyAgNDU2IF0gIHBvdW5kIHNpZ24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8IDE2NCAgQTQgIFs3ICAxNCA2IF0gIGN1cnJlbmN5IHNpZ24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8IDE2NSAgQTUgIFs3MzIxNCA2IF0gIHllbiBzaWduICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8IDE2NiAgQTYgIFs3ICAxIDU2IF0gIGJyb2tlbiBiYXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8IDE2NyAgQTcgIFs3MyAgIDUgIF0gIHNlY3Rpb24gc2lnbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8IDE2OCAgQTggIFs3ICAgIDUgIF0gIGRpYWVyZXNpcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8IDE2OSAgQTkgIFs3MzIgIDU2IF0gIGNvcHlyaWdodCBzaWduICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8IDE3MCAgQUEgIFsgICAgICAgOF0gIGZlbWluaW5lIG9yZGluYWwgaW5kaWNhdG9yICAgICAgICAgICAgICAgICB8Cit8IDE3MSAgQUIgIFs3IDIxICA2IF0gIGxlZnQtcG9pbnRpbmcgZG91YmxlIGFuZ2xlIHF1b3RhdGlvbiBtYXJrICB8Cit8IDE3MiAgQUMgIFs3IDIgIDU2IF0gIG5vdCBzaWduICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8IDE3MyAgQUQgIFs3MyAgICA2IF0gIHNvZnQgaHlwaGVuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8IDE3NCAgQUUgIFs3MzIgICA2IF0gIHJlZ2lzdGVyZWQgc2lnbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8IDE3NSAgQUYgIFs3IDIgICA2IF0gIG1hY3JvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8IDE3NiAgQjAgIFs3MyAgIDU2IF0gIGRlZ3JlZSBzaWduICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8IDE3NyAgQjEgIFs3MyAgNCA2IF0gIHBsdXMtbWludXMgc2lnbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8IDE3OCAgQjIgIFs3MzIgICAgIF0gIHN1cGVyc2NyaXB0IHR3byAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8IDE3OSAgQjMgIFs3IDIgIDUgIF0gIHN1cGVyc2NyaXB0IHRocmVlICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8IDE4MCAgQjQgIFs3MyAgICAgIF0gIGFjdXRlIGFjY2VudCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8IDE4MSAgQjUgIFs3ICAgIDU2IF0gIG1pY3JvIHNpZ24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8IDE4MiAgQjYgIFs3MzIgIDUgIF0gIHBpbGNyb3cgc2lnbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8IDE4MyAgQjcgIFs3ICAgNCA2IF0gIG1pZGRsZSBkb3QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8IDE4NCAgQjggIFs3ICAgICA2IF0gIGNlZGlsbGEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8IDE4NSAgQjkgIFs3IDIgICAgIF0gIHN1cGVyc2NyaXB0IG9uZSAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8IDE4NiAgQkEgIFs3ICAgICAgIF0gIG1hc2N1bGluZSBvcmRpbmFsIGluZGljYXRvciAgICAgICAgICAgICAgICB8Cit8IDE4NyAgQkIgIFs3MyAgNDUgIF0gIHJpZ2h0LXBvaW50aW5nIGRvdWJsZSBhbmdsZSBxdW90YXRpb24gbWFyayB8Cit8IDE4OCAgQkMgIFs3MzIxIDU2IF0gIHZ1bGdhciBmcmFjdGlvbiBvbmUgcXVhcnRlciAgICAgICAgICAgICAgICB8Cit8IDE4OSAgQkQgIFs3MzIxNDU2IF0gIHZ1bGdhciBmcmFjdGlvbiBvbmUgaGFsZiAgICAgICAgICAgICAgICAgICB8Cit8IDE5MCAgQkUgIFs3MzIgNDU2IF0gIHZ1bGdhciBmcmFjdGlvbiB0aHJlZSBxdWFydGVycyAgICAgICAgICAgICB8Cit8IDE5MSAgQkYgIFs3ICAxNDU2IF0gIGludmVydGVkIHF1ZXN0aW9uIG1hcmsgICAgICAgICAgICAgICAgICAgICB8Cit8IDE5MiAgQzAgIFs3MzIgIDUgOF0gIGNhcGl0YWwgYSBncmF2ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8IDE5MyAgQzEgIFs3ICAxICA2OF0gIGNhcGl0YWwgYSBhY3V0ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8IDE5NCAgQzIgIFs3IDIgICAgOF0gIGNhcGl0YWwgYSBjaXJjdW1mbGV4ICAgICAgICAgICAgICAgICAgICAgICB8Cit8IDE5NSAgQzMgIFs3ICAgIDUgOF0gIGNhcGl0YWwgYSB0aWxkZSAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8IDE5NiAgQzQgIFs3MzIxNCA2OF0gIGNhcGl0YWwgYSBkaWFlcmVzaXMgICAgICAgICAgICAgICAgICAgICAgICB8Cit8IDE5NyAgQzUgIFs3MyAgNDUgOF0gIGNhcGl0YWwgYSByaW5nIGFib3ZlICAgICAgICAgICAgICAgICAgICAgICB8Cit8IDE5OCAgQzYgIFs3MyAgICAgOF0gIGNhcGl0YWwgYWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8IDE5OSAgQzcgIFs3MyAgNCA2OF0gIGNhcGl0YWwgYyBjZWRpbGxhICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8IDIwMCAgQzggIFs3MzIgIDU2OF0gIGNhcGl0YWwgZSBncmF2ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8IDIwMSAgQzkgIFs3IDIxICA2OF0gIGNhcGl0YWwgZSBhY3V0ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8IDIwMiAgQ0EgIFs3MzIgICAgOF0gIGNhcGl0YWwgZSBjaXJjdW1mbGV4ICAgICAgICAgICAgICAgICAgICAgICB8Cit8IDIwMyAgQ0IgIFs3MzIxNDU2OF0gIGNhcGl0YWwgZSBkaWFlcmVzaXMgICAgICAgICAgICAgICAgICAgICAgICB8Cit8IDIwNCAgQ0MgIFs3MzIgICA2OF0gIGNhcGl0YWwgaSBncmF2ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8IDIwNSAgQ0QgIFs3ICAxNCA2OF0gIGNhcGl0YWwgaSBhY3V0ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8IDIwNiAgQ0UgIFs3IDIgIDUgOF0gIGNhcGl0YWwgaSBjaXJjdW1mbGV4ICAgICAgICAgICAgICAgICAgICAgICB8Cit8IDIwNyAgQ0YgIFs3MzIxIDU2OF0gIGNhcGl0YWwgaSBkaWFlcmVzaXMgICAgICAgICAgICAgICAgICAgICAgICB8Cit8IDIwOCAgRDAgIFs3ICAgICA2OF0gIGNhcGl0YWwgZXRoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8IDIwOSAgRDEgIFs3ICAgNCA2OF0gIGNhcGl0YWwgbiB0aWxkZSAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8IDIxMCAgRDIgIFs3MyAgIDUgOF0gIGNhcGl0YWwgbyBncmF2ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8IDIxMSAgRDMgIFs3ICAxNDU2OF0gIGNhcGl0YWwgbyBhY3V0ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8IDIxMiAgRDQgIFs3IDIgIDU2OF0gIGNhcGl0YWwgbyBjaXJjdW1mbGV4ICAgICAgICAgICAgICAgICAgICAgICB8Cit8IDIxMyAgRDUgIFs3ICAgIDU2OF0gIGNhcGl0YWwgbyB0aWxkZSAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8IDIxNCAgRDYgIFs3MzIgNCA2OF0gIGNhcGl0YWwgbyBkaWFlcmVzaXMgICAgICAgICAgICAgICAgICAgICAgICB8Cit8IDIxNSAgRDcgIFs3ICAxICA2IF0gIG11bHRpcGxpY2F0aW9uIHNpZ24gICAgICAgICAgICAgICAgICAgICAgICB8Cit8IDIxNiAgRDggIFs3MyAgNCAgOF0gIGNhcGl0YWwgbyBzdHJva2UgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8IDIxNyAgRDkgIFs3MyAgIDU2OF0gIGNhcGl0YWwgdSBncmF2ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8IDIxOCAgREEgIFs3ICAxIDU2OF0gIGNhcGl0YWwgdSBhY3V0ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8IDIxOSAgREIgIFs3IDIgICA2OF0gIGNhcGl0YWwgdSBjaXJjdW1mbGV4ICAgICAgICAgICAgICAgICAgICAgICB8Cit8IDIyMCAgREMgIFs3MzIgNDU2OF0gIGNhcGl0YWwgdSBkaWFlcmVzaXMgICAgICAgICAgICAgICAgICAgICAgICB8Cit8IDIyMSAgREQgIFs3IDIxNCA2OF0gIGNhcGl0YWwgeSBhY3V0ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8IDIyMiAgREUgIFs3MyAgICA2OF0gIGNhcGl0YWwgdGhvcm4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8IDIyMyAgREYgIFs3MyAgNDU2OF0gIHNtYWxsIHNoYXJwIHMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8IDIyNCAgRTAgIFsgMzIgIDUgOF0gIHNtYWxsIGEgZ3JhdmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8IDIyNSAgRTEgIFsgICAxICA2OF0gIHNtYWxsIGEgYWN1dGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8IDIyNiAgRTIgIFsgIDIgICAgOF0gIHNtYWxsIGEgY2lyY3VtZmxleCAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8IDIyNyAgRTMgIFsgICAgIDUgOF0gIHNtYWxsIGEgdGlsZGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8IDIyOCAgRTQgIFsgMzIxNCA2OF0gIHNtYWxsIGEgZGlhZXJlc2lzICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8IDIyOSAgRTUgIFsgMyAgNDUgOF0gIHNtYWxsIGEgcmluZyBhYm92ZSAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8IDIzMCAgRTYgIFsgMyAgICAgOF0gIHNtYWxsIGFlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8IDIzMSAgRTcgIFsgMyAgNCA2OF0gIHNtYWxsIGMgY2VkaWxsYSAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8IDIzMiAgRTggIFsgMzIgIDU2OF0gIHNtYWxsIGUgZ3JhdmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8IDIzMyAgRTkgIFsgIDIxICA2OF0gIHNtYWxsIGUgYWN1dGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8IDIzNCAgRUEgIFsgMzIgICAgOF0gIHNtYWxsIGUgY2lyY3VtZmxleCAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8IDIzNSAgRUIgIFsgMzIxNDU2OF0gIHNtYWxsIGUgZGlhZXJlc2lzICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8IDIzNiAgRUMgIFsgMzIgICA2OF0gIHNtYWxsIGkgZ3JhdmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8IDIzNyAgRUQgIFsgICAxNCA2OF0gIHNtYWxsIGkgYWN1dGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8IDIzOCAgRUUgIFsgIDIgIDUgOF0gIHNtYWxsIGkgY2lyY3VtZmxleCAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8IDIzOSAgRUYgIFsgMzIxIDU2OF0gIHNtYWxsIGkgZGlhZXJlc2lzICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8IDI0MCAgRjAgIFsgICAgICA2OF0gIHNtYWxsIGV0aCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8IDI0MSAgRjEgIFsgICAgNCA2OF0gIHNtYWxsIG4gdGlsZGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8IDI0MiAgRjIgIFsgMyAgIDUgOF0gIHNtYWxsIG8gZ3JhdmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8IDI0MyAgRjMgIFsgICAxNDU2OF0gIHNtYWxsIG8gYWN1dGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8IDI0NCAgRjQgIFsgIDIgIDU2OF0gIHNtYWxsIG8gY2lyY3VtZmxleCAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8IDI0NSAgRjUgIFsgICAgIDU2OF0gIHNtYWxsIG8gdGlsZGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8IDI0NiAgRjYgIFsgMzIgNCA2OF0gIHNtYWxsIG8gZGlhZXJlc2lzICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8IDI0NyAgRjcgIFs3MyAgNCAgIF0gIGRpdmlzaW9uIHNpZ24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8IDI0OCAgRjggIFsgMyAgNCAgOF0gIHNtYWxsIG8gc3Ryb2tlICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8IDI0OSAgRjkgIFsgMyAgIDU2OF0gIHNtYWxsIHUgZ3JhdmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8IDI1MCAgRkEgIFsgICAxIDU2OF0gIHNtYWxsIHUgYWN1dGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8IDI1MSAgRkIgIFsgIDIgICA2OF0gIHNtYWxsIHUgY2lyY3VtZmxleCAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8IDI1MiAgRkMgIFsgMzIgNDU2OF0gIHNtYWxsIHUgZGlhZXJlc2lzICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8IDI1MyAgRkQgIFsgIDIxNCA2OF0gIHNtYWxsIHkgYWN1dGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8IDI1NCAgRkUgIFsgMyAgICA2OF0gIHNtYWxsIHRob3JuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8IDI1NSAgRkYgIFsgMyAgNDU2OF0gIHNtYWxsIHkgZGlhZXJlc2lzICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCis8L3ZlcmI+PC90c2NyZWVuPgorCis8c2VjdD5NSURJIEluc3RydW1lbnQgVGFibGU8bGFiZWwgaWQ9Im1pZGkiPjxwPgorPHRhYmxlIGxvYz0iaCI+CisgIDx0YWJ1bGFyIGNhPSJscmwiPgorICAgIDxobGluZT5QaWFubworICAgICAgfDB8QWNvdXN0aWMgR3JhbmQgUGlhbm9ACisgICAgICB8MXxCcmlnaHQgQWNvdXN0aWMgUGlhbm9ACisgICAgICB8MnxFbGVjdHJpYyBHcmFuZCBQaWFub0AKKyAgICAgIHwzfEhvbmt5dG9uayBQaWFub0AKKyAgICAgIHw0fEVsZWN0cmljIFBpYW5vIDFACisgICAgICB8NXxFbGVjdHJpYyBQaWFubyAyQAorICAgICAgfDZ8SGFycHNpY2hvcmRACisgICAgICB8N3xDbGF2aUAKKyAgICA8aGxpbmU+Q2hyb21hdGljIFBlcmN1c3Npb24KKyAgICAgIHw4fENlbGVzdGFACisgICAgICB8OXxHbG9ja2Vuc3BpZWxACisgICAgICB8MTB8TXVzaWMgQm94QAorICAgICAgfDExfFZpYnJhcGhvbmVACisgICAgICB8MTJ8TWFyaW1iYUAKKyAgICAgIHwxM3xYeWxvcGhvbmVACisgICAgICB8MTR8VHVidWxhciBCZWxsc0AKKyAgICAgIHwxNXxEdWxjaW1lckAKKyAgICA8aGxpbmU+T3JnYW4KKyAgICAgIHwxNnxEcmF3YmFyIE9yZ2FuQAorICAgICAgfDE3fFBlcmN1c3NpdmUgT3JnYW5ACisgICAgICB8MTh8Um9jayBPcmdhbkAKKyAgICAgIHwxOXxDaHVyY2ggT3JnYW5ACisgICAgICB8MjB8UmVlZCBPcmdhbkAKKyAgICAgIHwyMXxBY2NvcmRpb25ACisgICAgICB8MjJ8SGFybW9uaWNhQAorICAgICAgfDIzfFRhbmdvIEFjY29yZGlvbkAKKyAgICA8aGxpbmU+R3VpdGFyCisgICAgICB8MjR8Tnlsb24gQWNvdXN0aWMgR3VpdGFyQAorICAgICAgfDI1fFN0ZWVsIEFjb3VzdGljIEd1aXRhckAKKyAgICAgIHwyNnxKYXp6IEVsZWN0cmljIEd1aXRhckAKKyAgICAgIHwyN3xDbGVhbiBFbGVjdHJpYyBHdWl0YXJACisgICAgICB8Mjh8TXV0ZWQgRWxlY3RyaWMgR3VpdGFyQAorICAgICAgfDI5fE92ZXJkcml2ZW4gR3VpdGFyQAorICAgICAgfDMwfERpc3RvcnRpb24gR3VpdGFyQAorICAgICAgfDMxfEd1aXRhciBIYXJtb25pY3NACisgICAgPGhsaW5lPkJhc3MKKyAgICAgIHwzMnxBY291c3RpYyBCYXNzQAorICAgICAgfDMzfEZpbmdlciBFbGVjdHJpYyBCYXNzQAorICAgICAgfDM0fFBpY2sgRWxlY3RyaWMgQmFzc0AKKyAgICAgIHwzNXxGcmV0bGVzcyBCYXNzQAorICAgICAgfDM2fFNsYXAgQmFzcyAxQAorICAgICAgfDM3fFNsYXAgQmFzcyAyQAorICAgICAgfDM4fFN5bnRoIEJhc3MgMUAKKyAgICAgIHwzOXxTeW50aCBCYXNzIDJACisgICAgPGhsaW5lPlN0cmluZ3MKKyAgICAgIHw0MHxWaW9saW5ACisgICAgICB8NDF8VmlvbGFACisgICAgICB8NDJ8Q2VsbG9ACisgICAgICB8NDN8Q29udHJhYmFzc0AKKyAgICAgIHw0NHxUcmVtb2xvIFN0cmluZ3NACisgICAgICB8NDV8UGl6emljYXRvIFN0cmluZ3NACisgICAgICB8NDZ8T3JjaGVzdHJhbCBIYXJwQAorICAgICAgfDQ3fFRpbXBhbmlACisgICAgPGhsaW5lPkVuc2VtYmxlCisgICAgICB8NDh8U3RyaW5nIEVuc2VtYmxlIDFACisgICAgICB8NDl8U3RyaW5nIEVuc2VtYmxlIDJACisgICAgICB8NTB8U3ludGggU3RyaW5ncyAxQAorICAgICAgfDUxfFN5bnRoIFN0cmluZ3MgMkAKKyAgICAgIHw1MnxDaG9pciBBYWhzQAorICAgICAgfDUzfFZvaWNlIE9vaHNACisgICAgICB8NTR8U3ludGggVm9pY2VACisgICAgICB8NTV8T3JjaGVzdHJhIEhpdEAKKyAgICA8aGxpbmU+QnJhc3MKKyAgICAgIHw1NnxUcnVtcGV0QAorICAgICAgfDU3fFRyb21ib25lQAorICAgICAgfDU4fFR1YmFACisgICAgICB8NTl8TXV0ZWQgVHJ1bXBldEAKKyAgICAgIHw2MHxGcmVuY2ggSG9ybkAKKyAgICAgIHw2MXxCcmFzcyBTZWN0aW9uQAorICAgICAgfDYyfFN5bnRoIEJyYXNzIDFACisgICAgICB8NjN8U3ludGggQnJhc3MgMkAKKyAgICA8aGxpbmU+UmVlZAorICAgICAgfDY0fFNvcHJhbm8gU2F4b3Bob25lQAorICAgICAgfDY1fEFsdG8gU2F4b3Bob25lQAorICAgICAgfDY2fFRlbm9yIFNheG9waG9uZUAKKyAgICAgIHw2N3xCYXJpdG9uZSBTYXhvcGhvbmVACisgICAgICB8Njh8T2JvZUAKKyAgICAgIHw2OXxFbmdsaXNoIEhvcm5ACisgICAgICB8NzB8QmFzc29vbkAKKyAgICAgIHw3MXxDbGFyaW5ldEAKKyAgICA8aGxpbmU+UGlwZQorICAgICAgfDcyfFBpY2NvbG9ACisgICAgICB8NzN8Rmx1dGVACisgICAgICB8NzR8UmVjb3JkZXJACisgICAgICB8NzV8UGFuIEZsdXRlQAorICAgICAgfDc2fEJsb3duIEJvdHRsZUAKKyAgICAgIHw3N3xTaGFrdWhhY2hpQAorICAgICAgfDc4fFdoaXN0bGVACisgICAgICB8Nzl8T2NhcmluYUAKKyAgICA8aGxpbmU+U3ludGggTGVhZAorICAgICAgfDgwfExlYWQgMSAoc3F1YXJlKUAKKyAgICAgIHw4MXxMZWFkIDIgKHNhd3Rvb3RoKUAKKyAgICAgIHw4MnxMZWFkIDMgKGNhbGxpb3BlKUAKKyAgICAgIHw4M3xMZWFkIDQgKGNoaWZmKUAKKyAgICAgIHw4NHxMZWFkIDUgKGNoYXJhbmcpQAorICAgICAgfDg1fExlYWQgNiAodm9pY2UpQAorICAgICAgfDg2fExlYWQgNyAoZmlmdGhzKUAKKyAgICAgIHw4N3xMZWFkIDggKGJhc3MgKyBsZWFkKUAKKyAgICA8aGxpbmU+U3ludGggUGFkCisgICAgICB8ODh8UGFkIDEgKG5ldyBhZ2UpQAorICAgICAgfDg5fFBhZCAyICh3YXJtKUAKKyAgICAgIHw5MHxQYWQgMyAocG9seXN5bnRoKUAKKyAgICAgIHw5MXxQYWQgNCAoY2hvaXIpQAorICAgICAgfDkyfFBhZCA1IChib3dlZClACisgICAgICB8OTN8UGFkIDYgKG1ldGFsbGljKUAKKyAgICAgIHw5NHxQYWQgNyAoaGFsbylACisgICAgICB8OTV8UGFkIDggKHN3ZWVwKUAKKyAgICA8aGxpbmU+U3ludGggRk0KKyAgICAgIHw5NnxGWCAxIChyYWluKUAKKyAgICAgIHw5N3xGWCAyIChzb3VuZHRyYWNrKUAKKyAgICAgIHw5OHxGWCAzIChjcnlzdGFsKUAKKyAgICAgIHw5OXxGWCA0IChhdG1vc3BoZXJlKUAKKyAgICAgIHwxMDB8RlggNSAoYnJpZ2h0bmVzcylACisgICAgICB8MTAxfEZYIDYgKGdvYmxpbnMpQAorICAgICAgfDEwMnxGWCA3IChlY2hvZXMpQAorICAgICAgfDEwM3xGWCA4IChzY2llbmNlLWZpY3Rpb24pQAorICAgIDxobGluZT5FdGhuaWMKKyAgICAgIHwxMDR8U2l0YXJACisgICAgICB8MTA1fEJhbmpvQAorICAgICAgfDEwNnxTaGFtaXNlbkAKKyAgICAgIHwxMDd8S290b0AKKyAgICAgIHwxMDh8S2FsaW1iYUAKKyAgICAgIHwxMDl8QmFnIFBpcGVACisgICAgICB8MTEwfEZpZGRsZUAKKyAgICAgIHwxMTF8U2hhbmFpQAorICAgIDxobGluZT5QZXJjdXNzaXZlCisgICAgICB8MTEyfFRpbmtsZSBCZWxsQAorICAgICAgfDExM3xBZ29nb0AKKyAgICAgIHwxMTR8U3RlZWwgRHJ1bUAKKyAgICAgIHwxMTV8V29vZGVuIEJsb2NrQAorICAgICAgfDExNnxUYWlrbyBEcnVtQAorICAgICAgfDExN3xNZWxvZGljIFRvbUAKKyAgICAgIHwxMTh8U3ludGggRHJ1bUAKKyAgICAgIHwxMTl8UmV2ZXJzZSBDeW1iYWxACisgICAgPGhsaW5lPlNvdW5kIEVmZmVjdHMKKyAgICAgIHwxMjB8R3VpdGFyIEZyZXQgTm9pc2VACisgICAgICB8MTIxfEJyZWF0aCBOb2lzZUAKKyAgICAgIHwxMjJ8U2Vhc2hvcmVACisgICAgICB8MTIzfEJpcmQgVHdlZXRACisgICAgICB8MTI0fFRlbGVwaG9uZSBSaW5nQAorICAgICAgfDEyNXxIZWxpY29wdGVyQAorICAgICAgfDEyNnxBcHBsYXVzZUAKKyAgICAgIHwxMjd8R3Vuc2hvdEAKKyAgPC90YWJ1bGFyPgorPC90YWJsZT4KKworPC9hcnRpY2xlPgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRzL01hbnVhbC1CUkxUVFkvRW5nbGlzaC9NYWtlZmlsZS5pbiBiL0RvY3VtZW50cy9NYW51YWwtQlJMVFRZL0VuZ2xpc2gvTWFrZWZpbGUuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGYxMTU3NQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50cy9NYW51YWwtQlJMVFRZL0VuZ2xpc2gvTWFrZWZpbGUuaW4KQEAgLTAsMCArMSwyMSBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorIyAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyMKKyMgQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorIworIyBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorIworIyBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisjIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyMgbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisjCisjIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK0RPQ1VNRU5UX05BTUUgPSBCUkxUVFkKK0RPQ1VNRU5UX0xBTkdVQUdFID0gZW5nbGlzaAoraW5jbHVkZSAkKFNSQ19UT1ApZG9jdW1lbnQubWsKZGlmZiAtLWdpdCBhL0RvY3VtZW50cy9NYW51YWwtQlJMVFRZL0VuZ2xpc2gvYnJhaWxsZS1kcml2ZXJzLnNnbWwgYi9Eb2N1bWVudHMvTWFudWFsLUJSTFRUWS9FbmdsaXNoL2JyYWlsbGUtZHJpdmVycy5zZ21sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlkYWFmYjIKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudHMvTWFudWFsLUJSTFRUWS9FbmdsaXNoL2JyYWlsbGUtZHJpdmVycy5zZ21sCkBAIC0wLDAgKzEsMTU1IEBACitBbGJhdHJvc3MKKyAgfDQ2LzgwQAorQWx2YQorICB8QUJUICgzbm4pQAorICB8RGVscGhpICg0bm4pQAorICB8U2F0ZWxsaXRlICg1bm4pQAorICB8QnJhaWxsZSBTeXN0ZW0gNDBACisgIHxCcmFpbGxlIENvbnRyb2xsZXIgNjQwLzY4MEAKKyAgfEVhc3kgTGluayAxMkAKK0JhdW0KKyAgfEJyYWlsbGVDb25uZWN0IDEyLzI0LzMyLzQwLzY0LzgwQAorICB8QnJhaWxsaWFudCAyNC8zMi80MC82NC84MEAKKyAgfENvbm55IDEyQAorICB8RE04MCBQbHVzQAorICB8RWNvVmFyaW8gMjQvMzIvNDAvNjQvODBACisgIHxJbmthQAorICB8TkxTIGVSZWFkZXIgWm9vbWF4QAorICB8T3JiaXQgUmVhZGVyIDIwLzQwQAorICB8UG9ja2V0VmFyaW8gMjRACisgIHxQcm9udG8hIFYzIDE4LzQwQAorICB8UHJvbnRvISBWNCAxOC80MEAKKyAgfFJCVCA0MC84MEAKKyAgfFJlZnJlc2hhYnJhaWxsZSAxOEAKKyAgfFN1cGVyVmFyaW8gMzIvNDAvNjQvODBACisgIHxWYXJpbyA0MC84MEAKKyAgfFZhcmlvQ29ubmVjdCAxMi8yNC8zMi80MC82NC84MEAKKyAgfFZhcmlvUHJvIDQwLzY0LzgwQAorICB8VmFyaW9VbHRyYSAyMC8zMi80MEAKK0JyYWlsQ29tbQorICB8SUlJQAorQnJhaWxsZUxpdGUKKyAgfDE4LzQwL00yMC9NNDBACitCcmFpbGxlTWVtbworICB8UG9ja2V0ICgxNilACisgIHxTbWFydCAoMTYpQAorICB8MzJACisgIHw0MEAKK0JyYWlsbGVOb3RlCisgIHwxOC8zMkAKKyAgfEFwZXhACitCcmF1ZGlACitCcmxBUElACitDYW51dGUKKyAgfDM2MCAoNDB4OSlACitDZWJyYQorICB8MjAvNDAvNjAvODAvMTAwLzEyMC8xNDBACitDb21iaUJyYWlsbGUKKyAgfDI1LzQ1Lzg1QAorRG90UGFkQAorRWNvQnJhaWxsZQorICB8MjAvNDAvODBACitFdXJvQnJhaWxsZQorICB8QXplckJyYWlsbGVACisgIHxDbGlvQAorICB8RXN5c0AKKyAgfElyaXNACisgIHxOb3RlQnJhaWxsZUAKKyAgfFNjcmliYUAKK0ZyYW5rQXVkaW9kYXRhCisgIHxCMks4NEAKK0ZyZWVkb21TY2llbnRpZmljCisgIHxGb2N1cyAxIDQ0LzcwLzg0QAorICB8Rm9jdXMgMiA0MC84MEAKKyAgfEZvY3VzIEJsdWUgMTQvNDAvODBACisgIHxQQUMgTWF0ZSAyMC80MEAKK0hhbmR5VGVjaAorICB8TW9kdWxhciAyMC80MC84MEAKKyAgfE1vZHVsYXIgRXZvbHV0aW9uIDY0Lzg4QAorICB8TW9kdWxhciBDb25uZWN0IDg4QAorICB8QWN0aXZlIEJyYWlsbGVACisgIHxBY3RpdmUgQnJhaWxsZSBTQAorICB8QWN0aXZlIFN0YXIgNDBACisgIHxBY3RpbGlub0AKKyAgfEFjdGl2YXRvckAKKyAgfEJhc2ljIEJyYWlsbGUgMTYvMjAvMzIvNDAvNDgvNjQvODBACisgIHxCcmFpbGxpbm9ACisgIHxCcmFpbGxlIFdhdmVACisgIHxFYXN5IEJyYWlsbGVACisgIHxCcmFpbGxlIFN0YXIgNDAvODBACisgIHxDb25uZWN0IEJyYWlsbGUgNDBACisgIHxCb29rd29ybUAKK0hlZG8KKyAgfFByb2ZpTGluZUAKKyAgfE1vYmlsTGluZUAKK0hJTVMKKyAgfEJyYWlsbGUgU2Vuc2VACisgIHxTeW5jQnJhaWxsZUAKKyAgfEJyYWlsbGUgRWRnZUAKKyAgfFNtYXJ0IEJlZXRsZUAKKyAgfFFCcmFpbGxlWExACitIdW1hbldhcmUKKyAgfEJyYWlsbGlhbnQgQkkgMTQvMzIvNDBACisgIHxCcmFpbGxpYW50IEJJIDIwWC80MFhACisgIHxCcmFpbGxpYW50IEIgODBACisgIHxCcmFpbGxlTm90ZSBUb3VjaEAKKyAgfEJyYWlsbGVPbmVACisgIHxBUEggQ2hhbWVsZW9uIDIwQAorICB8QVBIIE1hbnRpcyBRNDBACisgIHxOTFMgZVJlYWRlckAKK0luY2VwdG9yCisgIHxCcmFpbGxlTWUgKDIwKUAKK0lyaXNACitMaWJicmFpbGxlQAorTG9nVGV4dAorICB8MzJACitNRFYKKyAgfE1CMjA4QAorICB8TUIyNDhACisgIHxNQjQwOExACisgIHxNQjQwOEwrQAorICB8TGlsbGkgQmx1QAorTWV0ZWMKKyAgfEJELTQwQAorTWluaUJyYWlsbGUKKyAgfDIwQAorTXVsdGlCcmFpbGxlCisgIHxNQjEyNUNSQAorICB8TUIxNDVDUkAKKyAgfE1CMTg1Q1JACitOaW5lUG9pbnQKKyAgfDhACitQYXBlbm1laWVyCisgIHxDb21wYWN0IDQ4NkAKKyAgfENvbXBhY3QvVGlueUAKKyAgfElCIDgwIENSIFNvZnRACisgIHwyRCBMaXRlIChwbHVzKUAKKyAgfDJEIFNjcmVlbiBTb2Z0QAorICB8RUwgODBACisgIHxFTCAyRCA0MC82Ni84MEAKKyAgfEVMIDQwLzY2LzcwLzgwIFNACisgIHxFTCA0MC82MC84MCBDQAorICB8RUwgMkQgODAgU0AKKyAgfEVMIDQwIFBACisgIHxFTCA4MCBJSUAKKyAgfEVsYmEgMjAvMzJACisgIHxUcmlvIDQwL0VsYmEyMC9FbGJhMzJACisgIHxMaXZlIDIwLzQwQAorUGVnYXN1cworICB8MjAvMjcvNDAvODBACitTZWlrYQorICB8My80LzUgKDQwKUAKKyAgfDgwQAorICB8TWluaSAoMTYpQAorVGVjaG5pQnJhaWxsZUAKK1RTSQorICB8TmF2aWdhdG9yIDIwLzQwLzgwQAorICB8UG93ZXJCcmFpbGxlIDQwLzY1LzgwQAorVmlkZW9CcmFpbGxlCisgIHw0MEAKK1Zpc2lvQnJhaWxsZQorICB8MjAvNDBACitWb3lhZ2VyCisgIHw0NC83MEAKKyAgfFBhcnQyMzIgKHNlcmlhbCBhZGFwdGVyKUAKKyAgfEJyYWlsbGVQZW4vRWFzeUxpbmtACmRpZmYgLS1naXQgYS9Eb2N1bWVudHMvTWFudWFsLUJSTFRUWS9FbmdsaXNoL2NvbnRyYWN0aW9uLXRhYmxlcy5zZ21sIGIvRG9jdW1lbnRzL01hbnVhbC1CUkxUVFkvRW5nbGlzaC9jb250cmFjdGlvbi10YWJsZXMuc2dtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MmEyMmJjCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRzL01hbnVhbC1CUkxUVFkvRW5nbGlzaC9jb250cmFjdGlvbi10YWJsZXMuc2dtbApAQCAtMCwwICsxLDM4IEBACithdXRvfGxvY2FsZS1iYXNlZCBhdXRvc2VsZWN0aW9uQAorYWZ8QWZyaWthYW5zIChjb250cmFjdGVkKUAKK2FtfEFtaGFyaWMgKHVuY29udHJhY3RlZClACitkZXxHZXJtYW5ACitkZS1nMHxHZXJtYW4gKHVuY29udHJhY3RlZClACitkZS1nMXxHZXJtYW4gKGJhc2ljIGNvbnRyYWN0aW9ucylACitkZS1nMnxHZXJtYW4gKGNvbnRyYWN0ZWQpQAorZGUtMTk5OHxHZXJtYW4gKGNvbnRyYWN0ZWQgLSAxOTk4IHN0YW5kYXJkKUAKK2RlLTIwMTV8R2VybWFuIChjb250cmFjdGVkIC0gMjAxNSBzdGFuZGFyZClACitlbnxFbmdsaXNoQAorZW4mbG93YmFyO1VTfEVuZ2xpc2ggKFVuaXRlZCBTdGF0ZXMpQAorZW4tdWViLWcxfEVuZ2xpc2ggKFVuaWZpZWQgRW5nbGlzaCBCcmFpbGxlLCBncmFkZSAxKUAKK2VuLXVlYi1nMnxFbmdsaXNoIChVbmlmaWVkIEVuZ2xpc2ggQnJhaWxsZSwgZ3JhZGUgMilACitlbi11cy1nMnxFbmdsaXNoIChVUywgZ3JhZGUgMilACitlc3xTcGFuaXNoIChncmFkZSAyKUAKK2ZyfEZyZW5jaEAKK2ZyLWcxfEZyZW5jaCAodW5jb250cmFjdGVkKUAKK2ZyLWcyfEZyZW5jaCAoY29udHJhY3RlZClACitoYXxIYXVzYSAoY29udHJhY3RlZClACitpZHxJbmRvbmVzaWFuIChjb250cmFjdGVkKUAKK2lwYXxJbnRlcm5hdGlvbmFsIFBob25ldGljIEFscGhhYmV0QAoramF8SmFwYW5lc2UgKHVuY29udHJhY3RlZClACitrb3xLb3JlYW5ACitrby1nMHxLb3JlYW4gKHVuY29udHJhY3RlZClACitrby1nMXxLb3JlYW4gKGdyYWRlIDEpQAora28tZzJ8S29yZWFuIChncmFkZSAyKUAKK2x0fExpdHVhbmlhbkAKK21nfE1hbGFnYXN5IChjb250cmFjdGVkKUAKK211bnxNdW5kYSAoY29udHJhY3RlZClACitubHxEdXRjaCAoY29udHJhY3RlZClACitueXxDaGljaGV3YSAoY29udHJhY3RlZClACitwdHxQb3J0dWd1ZXNlIChncmFkZSAyKUAKK3J1fFJ1c3NpYW4gKGdyYWRlIDEpQAorc2l8U2luaGFsZXNlICh1bmNvbnRyYWN0ZWQpQAorc3d8U3dhaGlsaSAoY29udHJhY3RlZClACit0aHxUaGFpIChjb250cmFjdGVkKUAKK3poJmxvd2JhcjtUV3xDaGluZXNlIChUYWl3YW4sIHVuY29udHJhY3RlZClACit6dXxadWx1IChjb250cmFjdGVkKUAKZGlmZiAtLWdpdCBhL0RvY3VtZW50cy9NYW51YWwtQlJMVFRZL0VuZ2xpc2gvZHJpdmVyLWNvZGVzLnNnbWwgYi9Eb2N1bWVudHMvTWFudWFsLUJSTFRUWS9FbmdsaXNoL2RyaXZlci1jb2Rlcy5zZ21sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBlODRhYzUKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudHMvTWFudWFsLUJSTFRUWS9FbmdsaXNoL2RyaXZlci1jb2Rlcy5zZ21sCkBAIC0wLDAgKzEsNTUgQEAKK2FsfEFsdmFACithbnxBbmRyb2lkQAorYXR8QWxiYXRyb3NzQAorYmF8QnJsQVBJQAorYmN8QnJhaWxDb21tQAorYmR8QnJhdWRpQAorYmd8QjJHQAorYmx8QnJhaWxsZUxpdGVACitibXxCYXVtIChOYXRpdmUsIEhULCBQQjEsIFBCMilACitibnxCcmFpbGxlTm90ZUAKK2NifENvbWJpQnJhaWxsZUAKK2NlfENlYnJhQAorY258Q2FudXRlQAorZHB8RG90UGFkQAorZWN8RWNvQnJhaWxsZUAKK2VufGVTcGVhay1OR0AKK2VzfGVTcGVha0AKK2V1fEV1cm9CcmFpbGxlQAorZmF8RnJhbmtBdWRpb2RhdGFACitmbHxGZXN0aXZhbExpdGVACitmc3xGcmVlZG9tU2NpZW50aWZpY0AKK2Z2fEZlc3RpdmFsQAorZ3N8R2VuZXJpY1NheUAKK2hkfEhlZG9ACitobXxISU1TQAoraHR8SGFuZHlUZWNoQAoraHd8SHVtYW5XYXJlQAoraWN8SW5jZXB0b3JACitpcnxJcmlzQAorbGJ8TGliYnJhaWxsZUAKK2x0fExvZ1RleHRACittYnxNdWx0aUJyYWlsbGVACittZHxNRFZACittbXxCcmFpbGxlTWVtb0AKK21ufE1pbmlCcmFpbGxlQAorbXB8TWlrcm9wdWhlQAorbXR8TWV0ZWNACitub3xubyBkcml2ZXJACitucHxOaW5lUG9pbnRACitwZ3xQZWdhc3VzQAorcG18UGFwZW5tZWllckAKK3NkfFNwZWVjaERpc3BhdGNoZXJACitza3xTZWlrYUAKK3N3fFN3aWZ0QAordGh8VGhldGFACit0bnxUZWNobmlCcmFpbGxlQAordHN8VGVsZXNlbnNvcnkgU3lzdGVtcyBJbmMuQAordHR8VFRZQAordmR8VmlkZW9CcmFpbGxlQAordm98Vm95YWdlckAKK3ZyfFZpcnR1YWxACit2c3xWaXNpb0JyYWlsbGVACit2dnxWaWFWb2ljZUAKK3hzfEV4dGVybmFsU3BlZWNoQAoreHd8WFdpbmRvd0AKZGlmZiAtLWdpdCBhL0RvY3VtZW50cy9NYW51YWwtQlJMVFRZL0VuZ2xpc2gvc3BlZWNoLWRyaXZlcnMuc2dtbCBiL0RvY3VtZW50cy9NYW51YWwtQlJMVFRZL0VuZ2xpc2gvc3BlZWNoLWRyaXZlcnMuc2dtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NmM2NmU4Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRzL01hbnVhbC1CUkxUVFkvRW5nbGlzaC9zcGVlY2gtZHJpdmVycy5zZ21sCkBAIC0wLDAgKzEsMjggQEAKK0FsdmEKKyAgfERlbHBoaSAoNG5uKUAKK0FuZHJvaWQKKyAgfHRleHQgdG8gc3BlZWNoIGVuZ2luZUAKK0JyYWlsbGVMaXRlCisgIHxACitDb21iaUJyYWlsbGUKKyAgfEAKK2VTcGVhaworICB8dGV4dCB0byBzcGVlY2ggZW5naW5lQAorZVNwZWFrLU5HCisgIHx0ZXh0IHRvIHNwZWVjaCBlbmdpbmVACitFeHRlcm5hbFNwZWVjaAorICB8cnVucyAvdXNyL2xvY2FsL2Jpbi9leHRlcm5hbHNwZWVjaEAKK0Zlc3RpdmFsCisgIHx0ZXh0IHRvIHNwZWVjaCBlbmdpbmVACitGZXN0aXZhbExpdGUKKyAgfHRleHQgdG8gc3BlZWNoIGVuZ2luZUAKK0dlbmVyaWNTYXkKKyAgfHBpcGVzIHRvIC91c3IvbG9jYWwvYmluL3NheUAKK01pa3JvcHVoZQorICB8dGV4dCB0byBzcGVlY2ggZW5naW5lQAorU3dpZnQKKyAgfHRleHQgdG8gc3BlZWNoIGVuZ2luZUAKK1RoZXRhCisgIHx0ZXh0IHRvIHNwZWVjaCBlbmdpbmVACitWaWFWb2ljZQorICB8dGV4dCB0byBzcGVlY2ggZW5naW5lQApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRzL01hbnVhbC1CUkxUVFkvRW5nbGlzaC90ZXh0LXRhYmxlcy5zZ21sIGIvRG9jdW1lbnRzL01hbnVhbC1CUkxUVFkvRW5nbGlzaC90ZXh0LXRhYmxlcy5zZ21sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJjOWUzNzUKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudHMvTWFudWFsLUJSTFRUWS9FbmdsaXNoL3RleHQtdGFibGVzLnNnbWwKQEAgLTAsMCArMSw5MCBAQAorYXV0b3xsb2NhbGUtYmFzZWQgYXV0b3NlbGVjdGlvbkAKK2FyfEFyYWJpYyAoZ2VuZXJpYylACithc3xBc3NhbWVzZUAKK2F3YXxBd2FkaGlACitiZ3xCdWxnYXJpYW5ACitiaHxCaWhhcmlACitibnxCZW5nYWxpQAorYm98VGliZXRhbkAKK2JyYXxCcmFqQAorYnJmfEJyYWlsbGUgUmVhZHkgRm9ybWF0QAorfChmb3Igdmlld2luZyAuYnJmIGZpbGVzIHdpdGhpbiBhbiBlZGl0b3Igb3IgcGFnZXIpQAorY3N8Q3plY2hACitjeXxXZWxzaEAKK2RhfERhbmlzaEAKK2RhLTEyNTJ8RGFuaXNoIChTdmVuZCBUaG91Z2FhcmQsIDIwMDItMTEtMTgpQAorZGEtbHR8RGFuaXNoIChMb2dUZXh0KUAKK2RlfEdlcm1hbkAKK2RyYXxEcmF2aWRpYW5ACitlbHxHcmVla0AKK2VufEVuZ2xpc2hACitlbiZsb3diYXI7Q0F8RW5nbGlzaCAoQ2FuYWRhKUAKK2VuJmxvd2JhcjtHQnxFbmdsaXNoIChVbml0ZWQgS2luZ2RvbSlACitlbiZsb3diYXI7VVN8RW5nbGlzaCAoVW5pdGVkIFN0YXRlcylACitlbi1uYWJjY3xFbmdsaXNoIChOb3J0aCBBbWVyaWNhbiBCcmFpbGxlIENvbXB1dGVyIENvZGUpQAorZW98RXNwZXJhbnRvQAorZXN8U3BhbmlzaEAKK2V0fEVzdG9uaWFuQAorZml8RmlubmlzaEAKK2ZyfEZyZW5jaEAKK2ZyJmxvd2JhcjtDQXxGcmVuY2ggKENhbmFkYSlACitmciZsb3diYXI7RlJ8RnJlbmNoIChGcmFuY2UpQAorZnItMjAwN3xGcmVuY2ggKHVuaWZpZWQgMjAwNylACitmci1jYmlmc3xGcmVuY2ggKENvZGUgQnJhaWxsZSBJbmZvcm1hdGlxdWUgRnJhbsOnYWlzIFN0YW5kYXJkKUAKK2ZyLXZzfEZyZW5jaCAoVmlzaW9CcmFpbGxlKUAKK2dhfElyaXNoQAorZ2R8R2FlbGljQAorZ29ufEdvbmRpQAorZ3V8R3VqYXJhdGlACitoZXxIZWJyZXdACitoaXxIaW5kaUAKK2hyfENyb2F0aWFuQAoraHV8SHVuZ2FyaWFuQAoraHl8QXJtZW5pYW5ACitpc3xJY2VsYW5kaWNACitpdHxJdGFsaWFuQAora2hhfEtoYXNpQAora258S2FubmFkYUAKK2tva3xLb25rYW5pQAora3J1fEt1cnVraEAKK2x0fExpdHVhbmlhbkAKK2x2fExhdHZpYW5ACittZ3xNYWxhZ2FzeUAKK21pfE1hb3JpQAorbWx8TWFsYXlhbGFtQAorbW5pfE1hbmlwdXJpQAorbXJ8TWFyYXRoaUAKK210fE1hbHRlc2VACittdW58TXVuZGFACittd3J8TWFyd2FyaUAKK25lfE5lcGFsaUAKK25ld3xOZXdhcmlACitubHxEdXRjaEAKK25sJmxvd2JhcjtCRXxEdXRjaCAoQmVsZ2l1bSlACitubCZsb3diYXI7Tkx8RHV0Y2ggKE5ldGhlcmxhbmRzKUAKK25vfE5vcndlZ2lhbkAKK25vLWdlbmVyaWN8Tm9yd2VnaWFuICh3aXRoIHN1cHBvcnQgZm9yIG90aGVyIGxhbmd1YWdlcylACituby1vdXB8Tm9yd2VnaWFuIChPZmZlbnRsaWcgdXR2YWxnIGZvciBwdW5rdHNrcmlmdClACitud2N8TmV3YXJpIChvbGQpQAorb3J8T3JpeWFACitwYXxQYW5qYWJpQAorcGl8UGFsaUAKK3BsfFBvbGlzaEAKK3B0fFBvcnR1Z3Vlc2VACityb3xSb21hbmlhbkAKK3J1fFJ1c3NpYW5ACitzYXxTYW5za3JpdEAKK3NhdHxTYW50YWxpQAorc2R8U2luZGhpQAorc2V8U2FtaSAoTm9ydGhlcm4pQAorc2t8U2xvdmFrQAorc2x8U2xvdmVuaWFuQAorc3Z8U3dlZGlzaEAKK3N2LTE5ODl8U3dlZGlzaCAoMTk4OSBzdGFuZGFyZClACitzdi0xOTk2fFN3ZWRpc2ggKDE5OTYgc3RhbmRhcmQpQAorc3d8U3dhaGlsaUAKK3RhfFRhbWlsQAordGV8VGVsdWd1QAordHJ8VHVya2lzaEAKK3VrfFVrcmFpbmlhbkAKK3ZpfFZpZXRuYW1lc2VACmRpZmYgLS1naXQgYS9Eb2N1bWVudHMvTWFudWFsLUJSTFRUWS9GcmVuY2gvQWR2YW5jZWQuc2dtbCBiL0RvY3VtZW50cy9NYW51YWwtQlJMVFRZL0ZyZW5jaC9BZHZhbmNlZC5zZ21sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJmNmIyNTAKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudHMvTWFudWFsLUJSTFRUWS9GcmVuY2gvQWR2YW5jZWQuc2dtbApAQCAtMCwwICsxLDEzNSBAQAorPHNlY3Q+U3VqZXRzIGF2YW5j6XM8cD4KKworPHNlY3QxPkluc3RhbGxhdGlvbiBkZSBwbHVzaWV1cnMgdmVyc2lvbnM8bGFiZWwgaWQ9Im11bHRpcGxlIj48cD4KK0lsIGVzdCBmYWNpbGUgZCdhdm9pciBwbHVzIGQndW5lIHZlcnNpb24gZGUgQlJMVFRZIGluc3RhbGzpZSBzdXIgIGxlIG3qbWUKK3N5c3TobWUgZW4gbeptZSB0ZW1wcy4gQ2V0dGUgcG9zc2liaWxpdOkgdm91cyBwZXJtZXQgZGUgdGVzdGVyIHVuZSBub3V2ZWxsZQordmVyc2lvbiBhdmFudCBkZSBzdXBwcmltZXIgbCdhbmNpZW5uZS4KKworTCdvcHRpb24gZGUgY29tcGlsYXRpb24gPHJlZiBpZD0iYnVpbGQtZXhlY3V0ZS1yb290IiBuYW1lPSItLXdpdGgtZXhlY3V0ZS1yb290Ij4KK3ZvdXMgcGVybWV0IGQnaW5zdGFsbGVyIGxhIDxyZWYgaWQ9ImhpZXJhcmNoeSIgbmFtZT0iaGnpcmFyY2hpZSBkZXMgZmljaGllcnMgaW5zdGFsbOlzIj4gY29tcGzodGUgbOAgb/kKK3ZvdXMgbGUgdm91bGV6IGRlIHNvcnRlIHF1J2VsbGUgc29pdCB0b3RhbGVtZW50IGF1dG9ub21lIGRhbnMgc29uIGNvbnRlbnUuCitUb3V0IGVuIHZvdXMgcmFwcGVsYW50IHF1J2lsIHZhdXQgbWlldXggcHJlbmRyZSB0b3VzIGxlcyBjb21wb3NhbnRzIGRlCitCUkxUVFkgZGFucyBsZSBzeXN06G1lIGRlIGZpY2hpZXIgcmFjaW5lLCB2b3VzIHBvdXZleiBsZSBjb21waWxlciBhaW5zaToKKzx0c2NyZWVuPjx2ZXJiPgorLi9jb25maWd1cmUgLS13aXRoLWV4ZWN1dGUtcm9vdD0vYnJsdHR5LTMuMQorbWFrZSBpbnN0YWxsCis8L3ZlcmI+PC90c2NyZWVuPgorVm91cyBwb3V2ZXogYWxvcnMgbCdleOljdXRlciBhaW5zaToKKzx0c2NyZWVuPi9icmx0dHktMy4xL2Jpbi9icmx0dHk8L3RzY3JlZW4+CitRdWFuZCB2b3VzIGF2ZXogZmFpdCBsYSB2ZXJzaW9uIDMuMiwgaW5zdGFsbGV6LWxhIHNpbXBsZW1lbnQgZGFucyB1bgorZW1wbGFjZW1lbnQgZGlmZulyZW50IGV0IGV46WN1dGV6IGxlIG5vdXZlbCBleOljdXRhYmxlIOAgcGFydGlyIGRlIGzgLgorPHRzY3JlZW4+PHZlcmI+CisuL2NvbmZpZ3VyZSAtLXdpdGgtZXhlY3V0ZS1yb290PS9icmx0dHktMy4yCittYWtlIGluc3RhbGwKKy9icmx0dHktMy4yL2Jpbi9icmx0dHkKKzwvdmVyYj48L3RzY3JlZW4+CisKK0p1c3F1ZS1s4CwgdG91dCBjZWxhIGVzdCBxdWVscXVlIHBldSBtYWxhZHJvaXQgcG91ciBhdSBtb2lucyBkZXV4IHJhaXNvbnMuCitMYSBwcmVtaehyZSBlc3QgcXVlIGNlcyBsb25ncyBjaGVtaW5zIHNvbnQgdHJvcCBkaWZmaWNpbGVzIOAgdGFwZXIsIGV0IGwnYXV0cmUKK2VzdCBxdWUgdm91cyBuZSB2b3VsZXogcGFzIGJyaWNvbGVyIGF2ZWMKK2xhIHPpcXVlbmNlIGRlIGTpbWFycmFnZSBkZSB2b3RyZSBzeXN06G1lIGNoYXF1ZSBmb2lzIHF1ZSB2b3VzIHNvdWhhaXRleiBhbGxlcgor4CB1bmUgdmVyc2lvbiBkaWZm6XJlbnRlIGRlIEJSTFRUWS4KK0NlcyBwcm9ibOhtZXMgc2Ugculzb2x2ZW50IGZhY2lsZW1lbnQgZW4gYWpvdXRhbnQgdW4gbGllbiBzeW1ib2xpcXVlIHBvdXIKK2wnZXjpY3V0YWJsZS4KKzx0c2NyZWVuPmxuIC1zIC9icmx0dHktMy4xL2Jpbi9icmx0dHkgL2Jpbi9icmx0dHk8L3RzY3JlZW4+CitRdWFuZCBpbCBlc3QgdGVtcHMgZCd1dGlsaXNlciBsYSB2ZXJzaW9uIGxhIHBsdXMgculjZW50ZSwgcG9pbnRleiBkZSBub3V2ZWF1CitzaW1wbGVtZW50IGxlIGxpZW4gc3ltYm9saXF1ZS4KKzx0c2NyZWVuPmxuIC1zIC9icmx0dHktMy4yL2Jpbi9icmx0dHkgL2Jpbi9icmx0dHk8L3RzY3JlZW4+CisKK1NpIHZvdXMgYWltZXogdnJhaW1lbnQgZmFpcmUgZGUgbGEgZmFudGFpc2llLCBpbnRyb2R1aXNleiB1biBhdXRyZSBuaXZlYXUKK2RlIHJlZGlyZWN0aW9uIGRlIGZh529uIOAgcmVuZHJlIHRvdXMgbGVzIGZpY2hpZXJzIGRlIGNoYXF1ZSB2ZXJzaW9uIGRlIEJSTFRUWQordGVscyBxdSdpbHMgc29udCBkYW5zIHRvdXMgbGVzIGVtcGxhY2VtZW50cyBzdGFuZGFyZHMuCitEJ2Fib3JkLCBjculleiB1biBsaWVuIHN5bWJvbGlxdWUg4CB0cmF2ZXJzIHVuIGVtcGxhY2VtZW50IG/5IG9uIHBldXQKK3JlcG9pbnRlciBhaXPpbWVudCDgIHBhcnRpciBkZSBjaGFjdW4gZGVzIGVtcGxhY2VtZW50cyBzdGFuZGFyZHMgZGUgQlJMVFRZLgorPHRzY3JlZW4+PHZlcmI+CitsbiAtcyAvYnJsdHR5L2Jpbi9icmx0dHkgL2Jpbi9icmx0dHkKK2xuIC1zIC9icmx0dHkvZXRjL2JybHR0eSAvZXRjL2JybHR0eQorbG4gLXMgL2JybHR0eS9saWIvYnJsdHR5IC9saWIvYnJsdHR5Cis8L3ZlcmI+PC90c2NyZWVuPgorRW5zdWl0ZSwgdG91dCBjZSBxdWUgdm91cyBkZXZleiBmYWlyZSBlc3QgZGUgcG9pbnRlciA8dHQ+L2JybHR0eTwvdHQ+IHZlcnMgbGEKK3ZlcnNpb24gZOlzaXLpZS4KKzx0c2NyZWVuPmxuIC1zIC9icmx0dHktMy4xIC9icmx0dHk8L3RzY3JlZW4+CisKKzxzZWN0MT5EaXNxdWVzIHJhY2luZXMgZCdJbnN0YWxsYXRpb24vU2Vjb3VycyBwb3VyIExpbnV4PHA+CitCUkxUVFkgcGV1dCBzJ2V46WN1dGVyIGNvbW1lIHVuIHNldWwgZXjpY3V0YWJsZS4gVG91dCBjZSBxdSdpbCBhIGJlc29pbiBkZQorc2F2b2lyIHBldXQg6nRyZSBjb25maWd1cukgZXhwbGljaXRlbWVudCBsb3JzIGRlIGxhIGNvbXBpbGF0aW9uICh2b2lyCis8cmVmIGlkPSJidWlsZCIgbmFtZT0iT3B0aW9ucyBkZSBjb21waWxhdGlvbiI+KS4KK1NpIGxlIHLpcGVydG9pcmUgZGUgZG9ubullcyAodm9pciBsZXMgb3B0aW9ucyBkZSBjb21waWxhdGlvbgorPHJlZiBpZD0iYnVpbGQtZGF0YS1kaXJlY3RvcnkiIG5hbWU9Ii0td2l0aC1kYXRhLWRpcmVjdG9yeSI+IGV0Cis8cmVmIGlkPSJidWlsZC1leGVjdXRlLXJvb3QiIG5hbWU9Ii0td2l0aC1leGVjdXRlLXJvb3QiPikgbidleGlzdGUgcGFzLCBCUkxUVFkKK2NoZXJjaGUgZGFucyA8dHQ+L2V0YzwvdHQ+IGxlcyBmaWNoaWVycyBkb250IGlsIGEgYmVzb2luLgorTeptZSBzaSB1biBkZSBjZXMgZmljaGllcnMgbidleGlzdGUgcGFzLCBCUkxUVFkgZm9uY3Rpb25uZSBlbmNvcmUhCisKK1NpLCBwb3VyIHVuZSByYWlzb24gcXVlbGNvbnF1ZSwgdm91cyBhdmV6IGTpauAgY3Lp6SBsZSBy6XBlcnRvaXJlIGRlIGRvbm7pZXMKKyhoYWJpdHVlbGxlbWVudCwgPHR0Pi9ldGMvYnJsdHR5PC90dD4pIOAgbGEgbWFpbiwgaWwgZXN0IGltcG9ydGFudCBkZSBy6WdsZXIKK3NlcyBwZXJtaXNzaW9ucyBkZSB0ZWxsZSBzb3J0ZSBxdWUgc2V1bCBsZSBzdXBlci11dGlsaXNhdGV1ciBwdWlzc2UgeSBjcullciBkZXMKK2ZpY2hpZXJzLgorPHRzY3JlZW4+Y2htb2QgNzU1IC9ldGMvYnJsdHR5PC90c2NyZWVuPgorCitMZSBw6XJpcGjpcmlxdWUgZCdpbnNwZWN0aW9uIGR1IGNvbnRlbnUgZGUgbCfpY3JhbiAoaGFiaXR1ZWxsZW1lbnQKKzx0dD4vZGV2L3Zjc2E8L3R0PikgZXN0IG7pY2Vzc2FpcmUuIElsIGRldnJhaXQgZOlq4CBleGlzdGVyLCDgIG1vaW5zIHF1ZSB2b3RyZQorZGlzdHJpYnV0aW9uIGRlIExpbnV4IG5lIHNvaXQgdHJvcCB2aWVpbGxlLiBTaSBu6WNlc3NhaXJlLCB2b3VzIHBvdXZleiBsZSBjcullcgorYXZlYzoKKzx0c2NyZWVuPjx2ZXJiPgorbWtub2QgL2Rldi92Y3NhIGMgNyAxMjgKK2NobW9kIDY2MCAvZGV2L3Zjc2EKK2Nob3duIHJvb3QudHR5IC9kZXYvdmNzYQorPC92ZXJiPjwvdHNjcmVlbj4KKworVW4gcHJvYmzobWUgc291dmVudCByZW5jb250cukgbG9yc3F1J29uIGVzc2FpZSBkJ3V0aWxpc2VyIEJSTFRUWSBkYW5zIHVuCitlbnZpcm9ubmVtZW50IGluc3RhYmxlLCBjb21tZSB1biBkaXNxdWUgcmFjaW5lIG91IHVuIHN5c3TobWUgaW5jb21wbGV0LCBlc3QKK3F1J2lsIHBvdXJyYWl0IG5lIHBhcyB0cm91dmVyIGxlcyBiaWJsaW90aOhxdWVzIHBhcnRhZ+llcyAob3UgZGVzIHBhcnRpZXMKK2RlIGNlbGxlcy1jaSkgZG9udCBpbCBhIGJlc29pbi4KK0xlcyBkaXNxdWVzIHJhY2luZXMgdXRpbGlzZW50IHNvdXZlbnQgZGVzIHZlcnNpb25zIGRlcyBiaWJsaW90aOhxdWVzCitzb3VzLXBhcmFt6XRy6WVzIGV0L291IG5vbiDgIGpvdXIgcXVpIHBldXZlbnQg6nRyZSBpbmFk6XF1YXRlcy4gTGEgc29sdXRpb24gZXN0IGRlIGNvbmZpZ3VyZXIgQlJMVFRZIGF2ZWMgbCdvcHRmb24gZGUKK2NvbXBpbGF0aW9uIDxyZWYgaWQ9ImJ1aWxkLXN0YW5kYWxvbmUtcHJvZ3JhbXMiIG5hbWU9Ii0tZW5hYmxlLXN0YW5kYWxvbmUtcHJvZ3JhbXMiPi4KK0NlbGEgc3VwcHJpbWUgdG91dGVzIGxlcyBk6XBlbmRhbmNlcyBkZXMgYmlibGlvdGjocXVlcyBwYXJ0YWfpZXMsIG1haXMKK21hbGhldXJldXNlbWVudCwgY3LpZSBhdXNzaSB1biBleOljdXRhYmxlIHBsdXMgZ3Jvcy4KK0lsIHkgYSB1biBjZXJ0YWluIG5vbWJyZSBkJ29wdGlvbnMgZGUgY29tcGlsYXRpb24gcXVlIHZvdXMgcG91dmV6IHV0aWxpc2VyCitwb3VyIHN1cHByaW1lciBkZSBmYedvbiBz6WxlY3RpdmUgbGVzIHBvc3NpYmlsaXTpcyBkZSBCUkxUVFkgZG9udCB2b3VzIG4nYXZleiBwYXMKK2Jlc29pbiBkZSBmYedvbiDgIGF0dOludWVyIGNlIHByb2Js6G1lICh2b2lyIGxhIHNlY3Rpb24KKzxyZWYgaWQ9ImJ1aWxkLWZlYXR1cmVzIiBuYW1lPSJwb3NzaWJpbGl06elzIGRlIGxhIGNvbXBpbGF0aW9uIj4pLgorCitMJ2V46WN1dGFibGUgZXN0IG5ldHRveekgcGVuZGFudCBsZQorPHJlZiBpZD0ibWFrZS1pbnN0YWxsIiBuYW1lPSJtYWtlIGluc3RhbGwiPi4gQ2VsYSBy6WR1aXQgZGUgZmHnb24KK3NpZ25pZmljYXRpdmUgc2EgdGFpbGxlIGVuIHN1cHByaW1hbnQgc2EgdGFibGUgZGUgc3ltYm9sZXMuCitWb3VzIG9idGllbmRyZXogdW4gZXjpY3V0YWJsZSBiZWF1Y291cCBwbHVzIHBldGl0LCBwdWlzIGNvcGllei1sZSBkZSBzb24gZW1wbGFjZW1lbnQKK2QnaW5zdGFsbGF0aW9uLgorQ2VwZW5kYW50LCBzaSB2b3VzIGxlIGNvcGlleiBkZXB1aXMgbGUgculwZXJ0b2lyZSBkZSBjb21waWxhdGlvbiwgbidvdWJsaWV6IHBhcyBkZSBsZSBuZXR0b3llci4KKzx0c2NyZWVuPnN0cmlwIGJybHR0eTwvdHNjcmVlbj4KKworPHNlY3QxPkF2YW5j6WVzIGZ1dHVyZXM8cD4KK091dHJlIGxhIHLpcGFyYXRpb24gZGUgYnVncyBldCBsZSBzdXBwb3J0IGRlIHBsdXMgZGUgdHlwZXMgZCdhZmZpY2hldXJzCiticmFpbGxlcywgbm91cyBlc3Dpcm9ucywgc2kgbGUgdGVtcHMgbm91cyBsZSBwZXJtZXQsIHRyYXZhaWxsZXIgc3VyOgorPGRlc2NyaXA+CisgIDx0YWc+TWVpbGxldXJlIHByaXNlIGVuIGNoYXJnZSBkZXMgYXR0cmlidXRzPC90YWc+CisgICAgPGl0ZW1pemU+CisgICAgICA8aXRlbT5Qb3Vyc3VpdGUgZGVzIGF0dHJpYnV0cy4KKyAgICAgIDxpdGVtPk1vZGUgbWl4dGUgdGV4dGUgZXQgYXR0cmlidXRzLgorICAgIDwvaXRlbWl6ZT4KKyAgPHRhZz5Qb3Vyc3VpdGUgZHUgZOlmaWxlbWVudDwvdGFnPgorICAgICBBbGlnbmVtZW50IGRlIGxhIHBsYWdlIGJyYWlsbGUgc3VyIHVuZSBsaWduZSBhbG9ycyBxdSdlbGxlIGTpZmlsZSDgCisgICAgIGwn6WNyYW4uCisgIDx0YWc+TWVpbGxldXIgc3VwcG9ydCBkZSB2b2l4PC90YWc+CisgICAgPGl0ZW1pemU+CisgICAgICA8aXRlbT5CcmFpbGxlIGV0IHZvaXggbelsYW5n6XMgcG91ciB1bmUgbGVjdHVyZSBwbHVzIHJhcGlkZSBkdSB0ZXh0ZS4KKyAgICAgIDxpdGVtPk1laWxsZXVyIG5hdmlnYXRpb24gdm9jYWxlLgorICAgICAgPGl0ZW0+UGx1cyBkZSBzeW50aOhzZXMgdm9jYWxlcy4KKyAgICA8L2l0ZW1pemU+CisgIDx0YWc+U291cy1y6Wdpb25zIHN1ciBsJ+ljcmFuPC90YWc+CisgICAgSWdub3JlciBsZSBk6XBsYWNlbWVudCBkdSBjdXJzZXVyIGhvcnMgZGUgbGEgculnaW9uLCBldCByZW5kcmUgZmx1aWRlIGxlcworICAgIGxpbWl0ZXMgZGUgbmF2aWdhdGlvbiBhdXggYm9yZHMgZGUgbGEgculnaW9uLgorPC9kZXNjcmlwPgorVm9pciBsZSBmaWNoaWVyIDx0dD5UT0RPPC90dD4gcG91ciB1bmUgbGlzdGUgcGx1cyBjb21wbOh0ZS4KKworPHNlY3QxPkJvZ3VlcyBjb25udXM8cD4KK0EgbCdoZXVyZSBv+SBub3VzIOljcml2b25zIChk6WNlbWJyZSAyMDAxKSwgbGVzIHByb2Js6G1lcyBzdWl2YW50cyBzb250Citjb25udXMuCisKK0xhIHJvdXRpbmUtY3Vyc2V1ciBlc3QgY29uc2lk6XLpZSBjb21tZSB1biBzb3VzLXByb2Nlc3N1cyBlbiBib3VjbGUgcXVpIHMnZXjpY3V0ZQorYXZlYyB1bmUgcHJpb3JpdOkgculkdWl0ZSBwb3VyIOl2aXRlciBkZSB0cm9wIHV0aWxpc2VyIGxlIHRlbXBzIGR1IHByb2Nlc3NldXIuCitMZXMgY2hhcmdlbWVudHMgZGUgc3lzdOhtZXMgZGlmZulyZW50cyBu6WNlc3NpdGVudCBkZXMgculnbGFnZXMgZGlmZulyZW50cyBkZQorc2VzIHBhcmFt6HRyZXMuIENldXggcGFyIGTpZmF1dCBmb25jdGlvbm5lbnQgdHLocyBiaWVuIGRhbnMgdW4g6WRpdGV1ciBVbml4CitjbGFzc2lxdWUgc3VyIHVuIHN5c3TobWUgY2hhcmfpIG5vcm1hbGVtZW50LCBtYWlzIHRy6HMgbWFsIGRhbnMgZCdhdXRyZXMKK3NpdHVhdGlvbnMsIHBhciBleGVtcGxlIHN1ciB1bmUgbGlhaXNvbiBz6XJpZSBsZW50ZSB2ZXJzIHVuIG5vbSBkZSBtYWNoaW5lCitzdXBwcmlt6S4KZGlmZiAtLWdpdCBhL0RvY3VtZW50cy9NYW51YWwtQlJMVFRZL0ZyZW5jaC9CUkxUVFkuc2dtbCBiL0RvY3VtZW50cy9NYW51YWwtQlJMVFRZL0ZyZW5jaC9CUkxUVFkuc2dtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MjM1MmJjCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRzL01hbnVhbC1CUkxUVFkvRnJlbmNoL0JSTFRUWS5zZ21sCkBAIC0wLDAgKzEsMTUwIEBACis8IWRvY3R5cGUgbGludXhkb2Mgc3lzdGVtWworCis8IUVOVElUWSBpbnRyb2R1Y3Rpb24gCVNZU1RFTSAiSW50cm9kdWN0aW9uLnNnbWwiPgorPCFFTlRJVFkgY29tcGlsYXRpb24gCVNZU1RFTSAiQ29tcGlsYXRpb24uc2dtbCI+Cis8IUVOVElUWSB1dGlsaXNhdGlvbiAJU1lTVEVNICJVdGlsaXNhdGlvbi5zZ21sIj4KKzwhRU5USVRZIGZlYXR1cmVzIAlTWVNURU0gIkZlYXR1cmVzLnNnbWwiPgorPCFFTlRJVFkgdHJhbnNsYXRpb24gCVNZU1RFTSAiVHJhbnNsYXRpb24uc2dtbCI+Cis8IUVOVElUWSBhZHZhbmNlZCAJU1lTVEVNICJBZHZhbmNlZC5zZ21sIj4KKzwhRU5USVRZIGRpc3BsYXlzIAlTWVNURU0gIkRpc3BsYXlzLnNnbWwiPgorPCFFTlRJVFkgc3ludGhlc2l6ZXJzIAlTWVNURU0gIlN5bnRoZXNpemVycy5zZ21sIj4KKzwhRU5USVRZIGRyaXZlcnMgCVNZU1RFTSAiRHJpdmVycy5zZ21sIj4KKzwhRU5USVRZIHNjcmVlbiAgICAgICAgIFNZU1RFTSAiU2NyZWVuLnNnbWwiPgorPCFFTlRJVFkgc3ludGF4ZSAJU1lTVEVNICJTeW50YXguc2dtbCI+Cis8IUVOVElUWSBkb3RzIAkJU1lTVEVNICJEb3RzLnNnbWwiPgorPCFFTlRJVFkgbmFiY2MgICAgICAgICAgU1lTVEVNICJuYWJjYy5zZ21sIj4KKzwhRU5USVRZIGZyMjAwNyAgICAgICAgICBTWVNURU0gImZyLTIwMDcuc2dtbCI+Cis8IUVOVElUWSBtaWRpIAkJU1lTVEVNICJNaWRpLnNnbWwiPgorCis8IUVOVElUWSBEcml2ZXJDb2RlcyBTWVNURU0gImRyaXZlci1jb2Rlcy5zZ21sIj4KKzwhRU5USVRZIEJyYWlsbGVEcml2ZXJzIFNZU1RFTSAiYnJhaWxsZS1kcml2ZXJzLnNnbWwiPgorPCFFTlRJVFkgU3BlZWNoRHJpdmVycyBTWVNURU0gInNwZWVjaC1kcml2ZXJzLnNnbWwiPgorPCFFTlRJVFkgVGV4dFRhYmxlcyBTWVNURU0gInRleHQtdGFibGVzLnNnbWwiPgorPCFFTlRJVFkgQ29udHJhY3Rpb25UYWJsZXMgU1lTVEVNICJjb250cmFjdGlvbi10YWJsZXMuc2dtbCI+CisKK10+Cis8YXJ0aWNsZT4KKworPHRpdGxlcGFnPgorICA8dGl0bGU+TWFudWVsIGRlIHLpZulyZW5jZSBkZSBCUkxUVFkKKyAgICA8c3VidGl0bGU+QWNj6HMg4CBsJ+ljcmFuIGQndW5lIGNvbnNvbGUgcG91ciBsZXMgcGVyc29ubmVzIG5vbi12b3lhbnRlcyB1dGlsaXNhbnQgZGVzIGFmZmljaGV1cnMgYnJhaWxsZQorICA8YXV0aG9yPgorICAgIDxuYW1lPk5pa2hpbCBOYWlyIDx0dD48aHRtbHVybCB1cmw9Im1haWx0bzpubjIwMUBjdXMuY2FtLmFjLnVrIiBuYW1lPSImbHQ7bm4yMDFAY3VzLmNhbS5hYy51ayZndDsiPjwvdHQ+CisgIDxhbmQ+CisgICAgPG5hbWU+Tmljb2xhcyBQaXRyZSA8dHQ+PGh0bWx1cmwgdXJsPSJtYWlsdG86bmljb0BmbHV4bmljLm5ldCIgbmFtZT0iJmx0O25pY29AZmx1eG5pYy5uZXQmZ3Q7Ij48L3R0PgorICA8YW5kPgorICAgIDxuYW1lPlN06XBoYW5lIERveW9uIDx0dD48aHRtbHVybCB1cmw9Im1haWx0bzpzLmRveW9uQHZpZGVvdHJvbi5jYSIgbmFtZT0iJmx0O3MuZG95b25AdmlkZW90cm9uLmNhJmd0OyI+PC90dD4KKyAgPGFuZD4KKyAgICA8bmFtZT5EYXZlIE1pZWxrZSA8dHQ+PGh0bWx1cmwgdXJsPSJtYWlsdG86ZGF2ZUBtaWVsa2UuY2MiIG5hbWU9IiZsdDtkYXZlQG1pZWxrZS5jYyZndDsiPjwvdHQ+CisgIDxhbmQ+CisgICAgPG5hbWU+VHJhZHVjdGlvbiBmcmFu52Fpc2UKKyAgPGFuZD4KKyAgICA8bmFtZT4KKyAgICAgIEplYW4tUGhpbGlwcGUgTWVuZ3VhbAorICAgICAgICA8dHQ+PGh0bWx1cmwgdXJsPSJtYWlsdG86dGV4b3VAYWNjZWxpYnJlaW5mby5ldSIgbmFtZT0iJmx0O3RleG91QGFjY2VsaWJyZWluZm8uZXUmZ3Q7Ij48L3R0PgorICAgICAgcG91cgorICAgICAgICA8dHQ+PGh0bWx1cmwgdXJsPSJodHRwOi8vd3d3LnRyYWR1Yy5vcmcvIiBuYW1lPSJUcmFkdWMub3JnIj48L3R0PgorICA8ZGF0ZT5WZXJzaW9uIDYuNiwganVpbGxldCAyMDIzCisgIDxhYnN0cmFjdD4KKyAgICBDb3B5cmlnaHQgJmNvcHk7IDE5OTUtMjAyMyBieSBMZXMgROl2ZWxvcHBldXJzIGRlIEJSTFRUWS4KKyAgICBCUkxUVFkgZXN0IHVuIGxvZ2ljaWVsIGxpYnJlLCBldCBuJ2VzdCBmb3VybmkgYXZlYyBBVUNVTkUKKyAgICBHQVJBTlRJRS4gSWwgZXN0IHBsYWPpIHNvdXMgbGVzIHRlcm1lcyBkZSBsYSB2ZXJzaW9uIDIgb3UKKyAgICB1bHTpcmlldXJlIGRlIGxhIDxiZj5HTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZTwvYmY+IHB1Ymxp6WUgcGFyCisgICAgPGJmPlRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb248L2JmPi4KKyAgPC9hYnN0cmFjdD4KKzwvdGl0bGVwYWc+CisKKzx0b2M+Cis8bG9mPgorPGxvdD4KKworPHNlY3Q+UHLpYW1idWxlPHA+CisKKzxzZWN0MT5MaWNlbmNlPHA+CitDZSBwcm9ncmFtbWUgZXN0IHVuIGxvZ2ljaWVsIGxpYnJlLiBWb3VzIHBvdXZleiBsZSByZWRpc3RyaWJ1ZXIgZXQvb3UKK2xlIG1vZGlmaWVyIHNvdXMgbGVzIHRlcm1lcyBkZSBsYSA8aHRtbHVybCB1cmw9Imh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9saWNlbnNlcy5odG1sI0xHUEwiIG5hbWU9IkdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSI+CitzdGlwdWzpZSBwYXIgbGEgPGh0bWx1cmwgdXJsPSJodHRwOi8vd3d3LmdudS5vcmcvZnNmL2ZzZi5odG1sIiBuYW1lPSJGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24iPi4gVm91cyBwb3V2ZXogdXRpbGlzZXIgdW5lIHZlcnNpb24gMiwxIChvdSBzdXDpcmlldXJlKSBkZSBsYSBsaWNlbmNlLgorCitWb3VzIGRldnJpZXogYXZvaXIgcmXndSB1bmUgY29waWUgZGUgbGEgbGljZW5jZSBhdmVjIGxlCitwcm9ncmFtbWUuIEVsbGUgZGV2cmFpdCDqdHJlIGRhbnMgbGUgZmljaGllciA8dHQvTElDRU5TRS1MR1BMLyBkdQorculwZXJ0b2lyZSBwcmluY2lwYWwuIFNpIGNlIG4nZXN0IHBhcyBsZSBjYXMsIOljcml2ZXog4CBsYSBGcmVlIFNvZnR3YXJlCitGb3VuZGF0aW9uIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorCis8c2VjdDE+TWlzZSBlbiBnYXJkZTxwPgorQ2UgcHJvZ3JhbW1lIGVzdCBkaXN0cmlidekgYXZlYyBsJ2VzcG9pciBkJ+p0cmUgdXRpbGUsIG1haXMgU0FOUworQVVDVU5FIEdBUkFOVElFLCBt6m1lIHBhcyBjZWxsZSBkJ+p0cmUgQ09NTUVSQ0lBTElTQUJMRSBvdQorZGUgQ09OVkVOSVIgwCBVTkUgRklOQUxJVMkgRU4gUEFSVElDVUxJRVIuIFZvaXIgbGEgPGJmPkdOVSBHZW5lcmFsCitQdWJsaWMgTGljZW5zZTwvYmY+IHBvdXIgcGx1cyBkZSBk6XRhaWxzLgorCis8c2VjdDE+Q29udGFjdHM8bGFiZWwgaWQ9ImNvbnRhY3QiPjxwPgorQlJMVFRZIGVzdCBsZSB0cmF2YWlsIGQndW5lIOlxdWlwZS4gUG91ciBkZXMgaW5mb3JtYXRpb25zIGFjdHVhbGlz6WVzLAordm95ZXogbGEgcGFnZSBXZWIgZGUgQlJMVFRZIHN1ciBbPGh0bWx1cmwgdXJsPSJodHRwOi8vYnJsdHR5LmFwcC8iIG5hbWU9Imh0dHA6Ly9icmx0dHkuYXBwLyI+XS4gT250CitwYXJ0aWNpcOkg4CBjZSBkb2N1bWVudCBldCBhdSBsb2dpY2llbDoKKworPGl0ZW1pemU+CisgIDxpdGVtPgorICAgIERhdmUgTWllbGtlIChyZXNwb25zYWJsZSwgYWN0aWYpCisgICAgPGRlc2NyaXA+CisgICAgICA8dGFnL1dlYi88aHRtbHVybCB1cmw9Imh0dHA6Ly9taWVsa2UuY2MvIiBuYW1lPSJodHRwOi8vbWllbGtlLmNjLyI+CisgICAgICA8dGFnL0UtTWFpbC88aHRtbHVybCB1cmw9Im1haWx0bzpkYXZlQG1pZWxrZS5jYyIgbmFtZT0iJmx0O2RhdmVAbWllbGtlLmNjJmd0OyI+CisgICAgPC9kZXNjcmlwPgorICA8aXRlbT4KKyAgICBTYW11ZWwgVGhpYmF1bHQgKGFjdGlmKQorICAgIDxkZXNjcmlwPgorICAgICAgPHRhZy9XZWIvPGh0bWx1cmwgdXJsPSJodHRwOi8vZGVwdC1pbmZvLmxhYnJpLmZyL350aGliYXVsdC8iIG5hbWU9Imh0dHA6Ly9kZXB0LWluZm8ubGFicmkuZnIvfnRoaWJhdWx0LyI+CisgICAgICA8dGFnL0UtTWFpbC88aHRtbHVybCB1cmw9Im1haWx0bzpzYW11ZWwudGhpYmF1bHRAZW5zLWx5b24ub3JnIiBuYW1lPSImbHQ7c2FtdWVsLnRoaWJhdWx0QGVucy1seW9uLm9yZyZndDsiPgorICAgIDwvZGVzY3JpcD4KKyAgPGl0ZW0+CisgICAgTWFyaW8gTGFuZyAoYWN0aWYpCisgICAgPGRlc2NyaXA+CisgICAgICA8dGFnL1dlYi88aHRtbHVybCB1cmw9Imh0dHA6Ly9kZWx5c2lkLm9yZy8iIG5hbWU9Imh0dHA6Ly9kZWx5c2lkLm9yZy8iPgorICAgICAgPHRhZy9FLU1haWwvPGh0bWx1cmwgdXJsPSJtYWlsdG86bWxhbmdAZGVseXNpZC5vcmciIG5hbWU9IiZsdDttbGFuZ0BkZWx5c2lkLm9yZyZndDsiPgorICAgIDwvZGVzY3JpcD4KKyAgPGl0ZW0+CisgICAgTmljb2xhcyBQaXRyZQorICAgIDxkZXNjcmlwPgorICAgICAgPHRhZy9XZWIvPGh0bWx1cmwgdXJsPSJodHRwOi8vd3d3LmZsdXhuaWMubmV0LyIgbmFtZT0iaHR0cDovL3d3dy5mbHV4bmljLm5ldC8iPgorICAgICAgPHRhZy9FLU1haWwvPGh0bWx1cmwgdXJsPSJtYWlsdG86bmljb0BmbHV4bmljLm5ldCIgbmFtZT0iJmx0O25pY29AZmx1eG5pYy5uZXQmZ3Q7Ij4KKyAgICA8L2Rlc2NyaXA+CisgIDxpdGVtPgorICAgIFN06XBoYW5lIERveW9uCisgICAgPGRlc2NyaXA+CisgICAgICA8dGFnL1dlYi88aHRtbHVybCB1cmw9Imh0dHA6Ly9wYWdlcy5pbmZpbml0Lm5ldC9zZG95b24vIiBuYW1lPSJodHRwOi8vcGFnZXMuaW5maW5pdC5uZXQvc2RveW9uLyI+CisgICAgICA8dGFnL0UtTWFpbC88aHRtbHVybCB1cmw9Im1haWx0bzpzLmRveW9uQHZpZGVvdHJvbi5jYSIgbmFtZT0iJmx0O3MuZG95b25AdmlkZW90cm9uLmNhJmd0OyI+CisgICAgPC9kZXNjcmlwPgorICA8aXRlbT4KKyAgICBOaWtoaWwgTmFpciAgKGF1dGV1cikKKyAgICA8ZGVzY3JpcD4KKyAgICAgIDx0YWcvRS1NYWlsLzxodG1sdXJsIHVybD0ibWFpbHRvOm5uMjAxQGN1cy5jYW0uYWMudWsiIG5hbWU9IiZsdDtubjIwMUBjdXMuY2FtLmFjLnVrJmd0OyI+CisgICAgPC9kZXNjcmlwPgorCis8L2l0ZW1pemU+CisKK1RvdXRlIHF1ZXN0aW9uLCB0b3V0IGNvbW1lbnRhaXJlLCB0b3V0ZSBzdWdnZXN0aW9ucywgY3JpdGlxdWVzIGV0IGNvbnRyaWJ1dGlvbnMgCitzb250IGxlcyBiaWVudmVudXMuIE3qbWUgc2kgbm9zIGFkcmVzc2VzIGRlIG1lc3NhZ2VyaWUgc29udCBsaXN06WVzIGNpLWRlc3N1cywKK2xlIG1laWxsZXVyIG1veWVuIGRlIG5vdXMgY29udGFjdGVyIGVzdCBsYSBsaXN0ZSBkZSBkaWZmdXNpb24gQlJMVFRZLiBWb3VzCitwb3V2ZXogcG9zdGVyIHN1ciBsYSBsaXN0ZSBlbiBlbnZveWFudCB2b3RyZSBtZXNzYWdlIOAKKzxodG1sdXJsIHVybD0ibWFpbHRvOkJSTFRUWUBtaWVsa2UuY2MiIG5hbWU9IiZsdDtCUkxUVFlAbWllbGtlLmNjJmd0OyI+LiBTaQordm91cyBuJ+p0ZXMgcGFzIGFib25u6SDgIGxhIGxpc3RlLCB2b3MgbWVzc2FnZXMgc2Vyb250IHNvdW1pcyDgIGwnYXBwcm9iYXRpb24KK2R1IG1vZOlyYXRldXIuIFBvdXIgdm91cyBhYm9ubmVyLCB2b3VzIGTpc2Fib25uZXIsIG1vZGlmaWVyIGxlcyBwYXJhbeh0cmVzIGRlCit2b2lyIGxlcyBhcmNoaXZlcywgZXRjLCByZW5kZXotdm91cyBzdXIgbGEgcGFnZSBkJ2luZm9ybWF0aW9uIGRlIGxhIGxpc3RlLCBzdXIKKzxodG1sdXJsIHVybD0iaHR0cDovL21pZWxrZS5jYy9tYWlsbWFuL2xpc3RpbmZvL2JybHR0eSIgbmFtZT0iaHR0cDovL21pZWxrZS5jYy9tYWlsbWFuL2xpc3RpbmZvL2JybHR0eSI+LgorCismaW50cm9kdWN0aW9uCismY29tcGlsYXRpb24KKyZ1dGlsaXNhdGlvbgorJmZlYXR1cmVzCismdHJhbnNsYXRpb24KKyZhZHZhbmNlZAorCismZGlzcGxheXMKKyZzeW50aGVzaXplcnMKKyZkcml2ZXJzCismc2NyZWVuCismc3ludGF4ZQorJmRvdHMKKyZuYWJjYworJmZyMjAwNworJm1pZGkKKworPC9hcnRpY2xlPgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRzL01hbnVhbC1CUkxUVFkvRnJlbmNoL0NvbXBpbGF0aW9uLnNnbWwgYi9Eb2N1bWVudHMvTWFudWFsLUJSTFRUWS9GcmVuY2gvQ29tcGlsYXRpb24uc2dtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZTZmNDY3Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRzL01hbnVhbC1CUkxUVFkvRnJlbmNoL0NvbXBpbGF0aW9uLnNnbWwKQEAgLTAsMCArMSwxNjQ4IEBACis8c2VjdD5MYSBwcm9j6WR1cmUgZGUgY29tcGlsYXRpb248cD4KK09uIHBldXQgdOls6WNoYXJnZXIgQlJMVFRZIGRlcHVpcyBzb24gc2l0ZSBXZWIgKHZvaXIgbGEgc2VjdGlvbiA8cmVmCitpZD0iY29udGFjdCIgbmFtZT0iQ29udGFjdHMiPiBwb3VyIHNvbiBhZHJlc3NlKS4gIFRvdXRlcyBsZXMgdmVyc2lvbnMKK3NvbnQgZm91cm5pZXMgZW4gPHJlZiBpZD0idGFyIiBuYW1lPSJhcmNoaXZlcyB0YXIiPiBjb21wcmVzc+lzLiBMZXMKK3ZlcnNpb25zIHLpY2VudGVzIHNvbnQgYXVzc2kgZm91cm5pZXMgZW4gZmljaGllcnMgPHJlZiBpZD0icnBtIgorbmFtZT0iUlBNIj4gKFJlZEhhdCBwYXF1ZXQgTWFuYWdlcikuCisKK0NlcyBpbmZvcm1hdGlvbiDpcGFyc2VzIG9udCBwcm9iYWJsZW1lbnQgcGlxdekgdm90cmUKK2N1cmlvc2l06SBldCB2b3VzIOp0ZXMgaW1wYXRpZW50IGRlIGTpbWFycmVyLgorQ2VwZW5kYW50LCBub3VzIHZvdXMgcmVjb21tYW5kb25zIGRlIHZvdXMgZmFtaWxpYXJpc2VyIGQnYWJvcmQKK2F2ZWMgbGVzIGZpY2hpZXJzIHF1aSBzZXJvbnQgZmluYWxlbWVudCBpbnN0YWxs6XMuCisKKzxzZWN0MT5IaelyYXJjaGllIGRlcyBmaWNoaWVycyBpbnN0YWxs6XM8bGFiZWwgaWQ9ImhpZXJhY2h5Ij48cD4KK0xhIHByb2PpZHVyZSBkZSBjb21waWxhdGlvbiBkZXZyYWl0IGFib3V0aXIg4CBsJ2luc3RhbGxhdGlvbiBkZXMKK2ZpY2hpZXJzIHN1aXZhbnRzOgorPGRlc2NyaXA+CisgIDx0YWc+L2Jpbi88L3RhZz4KKyAgICA8ZGVzY3JpcD4KKyAgICAgIDx0YWc+YnJsdHR5PC90YWc+CisgICAgICAgIExlIHByb2dyYW1tZSBCUkxUVFkuCisgICAgICA8dGFnPjxyZWYgaWQ9InV0aWxpdHktYnJsdHR5LWluc3RhbGwiIG5hbWU9ImJybHR0eS1pbnN0YWxsIj48L3RhZz4KKyAgICAgICAgVW4gb3V0aWwgcG91ciBsYSBjb3BpZSBkZSBsYSA8cmVmIGlkPSJoaWVyYXJjaHkiCisgICAgICAgIG5hbWU9Imhp6XJhcmNoaWUgZGVzIGZpY2hpZXJzIGluc3RhbGzpcyI+IGRlIEJSTFRUWSBkJ3VuIGVtcGxhY2VtZW50IOAKKyAgICAgICAgdW4gYXV0cmUuLi4KKyAgICAgIDx0YWc+PHJlZiBpZD0idXRpbGl0eS1icmx0dHktY29uZmlnIiBuYW1lPSJicmx0dHktY29uZmlnIj48L3RhZz4KKyAgICAgICAgVW4gb3V0aWwgcXVpIGFzc2lnbmUgdW4gY2VydGFpbiBub21icmUgZGUgdmFyaWFibGVzCisgICAgICAgIGQnZW52aXJvbm5lbWVudCDgIGRlcyB2YWxldXJzIHJlZmzpdGFudCBsJ2luc3RhbGxhdGlvbgorICAgICAgICBjb3VyYW50ZSBkZSBCUkxUVFkuCisgICAgPC9kZXNjcmlwPgorICA8dGFnPi9saWIvYnJsdHR5L3J3LzwvdGFnPgorICAgIEZpY2hpZXJzIGNy6elzIGxvcnMgZGUgbCdleOljdXRpb24sIGNvbW1lIGNldXggbuljZXNzYWlyZXMgbWFpcyBhYnNlbnRzCisgICAgZHUgc3lzdOhtZS4KKyAgPHRhZz4vZXRjLzwvdGFnPgorICAgIDxkZXNjcmlwPgorICAgICAgPHRhZz5icmx0dHkuY29uZjwvdGFnPgorICAgICAgICBQYXJhbeh0cmVzIHN5c3TobWUgcGFyIGTpZmF1dCBwb3VyIEJSTFRUWS4KKyAgICAgIDx0YWc+YnJsYXBpLmtleTwvdGFnPgorICAgICAgICBDbOlzIGQnYWNj6HMgcG91ciBCcmxBUEkuCisgICAgPC9kZXNjcmlwPgorICA8dGFnPi9ldGMvYnJsdHR5LzwvdGFnPgorICAgIElsIHNlIHBldXQgcXVlIHZvdHJlIGluc3RhbGxhdGlvbiBkZSBCUkxUVFkgbidhaXQgcGFzIHRvdXMgbGVzCisgICAgdHlwZXMgZGUgZmljaGllcnMgc3VpdmFudHMuIElscyBuZSBzb250IGNy6elzIHF1J2VuIGZvbmN0aW9uIGRlcworICAgIGJlc29pbnMgZOlkdWl0cyBkZXMgb3B0aW9ucyBkZSBjb21waWxhdGlvbiBxdWUgdm91cyBz6WxlY3Rpb25uZXoKKyAgICAodm9pciA8cmVmIGlkPSJidWlsZCIgbmFtZT0iT3B0aW9ucyBkZSBjb21waWxhdGlvbiI+KS4KKyAgICA8ZGVzY3JpcD4KKyAgICAgIDx0YWc+Ki5jb25mPC90YWc+CisgICAgICAgIEJhc2UgZGUgY29uZmlndXJhdGlvbiBzcOljaWZpcXVlIGF1IHBpbG90ZS4gTGV1ciBub20gcmVzc2VtYmxlCisgICAgICAgIHBsdXMgb3UgbW9pbnMg4CA8dHQ+YnJsdHR5LTwvdHQ+PGVtPnBpbG90ZTwvZW0+PHR0Pi5jb25mPC90dD4sIG/5CisgICAgICAgIDxlbT5waWxvdGU8L2VtPiBjb3JyZXNwb25kIGF1eCBkZXV4IGxldHRyZXMgZHUgPHJlZiBpZD0iZHJpdmVycyIKKyAgICAgICAgbmFtZT0iY29kZSBkJ2lkZW50aWZpY2F0aW9uIGR1IHBpbG90ZSI+LgorICAgICAgPHRhZy8qLmF0Yi8KKyAgICAgICAgVGFibGVzIGQnYXR0cmlidXRzCisgICAgICAgICh2b2lyIGxhIHNlY3Rpb24gPHJlZiBpZD0idGFibGUtYXR0cmlidXRlcyIgbmFtZT0iVGFibGVzIGQnYXR0cmlidXRzIj4gcG91ciBwbHVzIGRlIGTpdGFpbHMpLgorICAgICAgICBMZXVyIG5vbSByZXNzZW1ibGUg4CA8ZW0vbmFtZS88dHQvLmF0Yi8uCisgICAgICA8dGFnLyouYXRpLworICAgICAgICBGaWNoaWVycyBpbmNsdWRlIHBvdXIgbGVzIHRhYmxlcyBkJ2F0dHJpYnV0cy4KKworICAgICAgPHRhZz4qLmN0YjwvdGFnPgorICAgICAgICBUYWJsZXMgZGUgYnJhaWxsZSBhYnLpZ+kgKHZvaXIgPHJlZiBpZD10YWJsZS1jb250cmFjdGlvbiBuYW1lPSJUYWJsZXMKKyAgICAgICAgZGUgYnJhaWxsZSBhYnLpZ+kiPiBwb3VyIHBsdXMgZGUgZOl0YWlscykuICBMZXVyIG5vbSByZXNzZW1ibGUgcGx1cyBvdQorICAgICAgICBtb2lucyDgCisgICAgICAgIDxlbT5sYW5ndWU8L2VtPjx0dD4tPC90dD48ZW0+cGF5czwvZW0+PHR0Pi08L3R0PjxlbT5uaXZlYXU8L2VtPjx0dD4uY3RiPC90dD4uCisgICAgICA8dGFnPiouY3RpPC90YWc+CisgICAgICAgIEZpY2hpZXJzIGluY2x1ZGUgcG91ciBsZXMgdGFibGVzIGRlIHRyYWR1Y3Rpb24uCisgICAgICA8dGFnLyoua3RiLworICAgICAgICBUYWJsZXMgZGUgdG91Y2hlcworICAgICAgICAodm9pciBsYSBzZWN0aW9uIDxyZWYgaWQ9InRhYmxlLWtleSIgbmFtZT0iVGFibGVzIGRlIHRvdWNoZXMiPiBwb3VyIHBsdXMgZGUgZOl0YWlscykuCisgICAgICAgIExldXJzIG5vbXMgcmVzc2VtYmxlIOAgPGVtL25hbWUvPHR0Ly5rdGIvLgorICAgICAgPHRhZy8qLmt0aS8KKyAgICAgICAgRmljaGllcnMgSW5jbHVkZSBwb3VyIGxlcyB0YWJsZXMgZGUgdG91Y2hlcy4KKyAgICAgIDx0YWcvKi50dGIvCisgICAgICAgIFRhYmxlcyBkZSB0ZXh0ZQorICAgICAgICAodm9pciBsYSBzZWN0aW9uIDxyZWYgaWQ9InRhYmxlLXRleHQiIG5hbWU9IlRhYmxlcyBkZSB0ZXh0ZSI+IHBvdXIgcGx1cyBkZSBk6XRhaWxzKS4KKyAgICAgICAgTGV1cnMgbm9tcyByZXNzZW1ibGUg4CA8ZW0vbGFuZ3VhZ2UvPHR0Ly50dGIvLgorICAgICAgPHRhZy8qLnR0aS8KKyAgICAgICAgRmljaGllcnMgSW5jbHVkZSBwb3VyIGxlcyB0YWJsZXMgZGUgdGV4dGUuCisgICAgICA8dGFnPiouaGxwPC90YWc+CisgICAgICAgIFBhZ2VzIGQnYWlkZSBzcOljaWZpcXVlcyDgIGNoYXF1ZSBwaWxvdGUuIExldXIgbm9tIHJlc3NlbWJsZQorICAgICAgICBwbHVzIG91IG1vaW5zIOAgPHR0PmJybHR0eS08L3R0PjxlbT5waWxvdGU8L2VtPjx0dD4uaGxwPC90dD4sIG/5CisgICAgICAgIDxlbT5waWxvdGU8L2VtPiBjb3JyZXNwb25kIGF1eCBkZXV4IGxldHRyZXMgZHUgPHJlZiBpZD0iZHJpdmVycyIKKyAgICAgICAgbmFtZT0iY29kZSBkJ2lkZW50aWZpY2F0aW9uIGR1IHBpbG90ZSI+LgorICAgIDwvZGVzY3JpcD4KKyAgPHRhZz4vdmFyL2xpYi88L3RhZz4KKyAgICBTb2NrZXRzIGxvY2F1eCBwb3VyIGxhIGNvbm5leGlvbiDgIGwnaW50ZXJmYWNlIGRlIHByb2dyYW1tYXRpb24gZGUKKyAgICBsJ2FwcGxpY2F0aW9uLgorICA8dGFnPi9pbmNsdWRlLzwvdGFnPgorICAgIExlcyBmaWNoaWVycyBkJ2VuLXTqdGUgQyBwb3VyIGwnaW50ZXJmYWNlIGRlIHByb2dyYW1tYXRpb24gZGUKKyAgICBsJ2FwcGxpY2F0aW9uLiBMZXVycyBub21zIHJlc3NlbWJsZW50IOAgPGVtPmJybGFwaS1mb25jdGlvbjwvZW0+PHR0Pi5oPC90dD4uCisgICAgTCdlbi106nRlIHByaW5jaXBhbGUgZXN0IGJybGFwaS5oLgorICA8dGFnPi9pbmNsdWRlL2JybHR0eS88L3RhZz4KKyAgICBMZXMgZmljaGllcnMgZCdlbi106nRlIEMgcG91ciBsJ2ludGVyZmFjZSBkZSBwcm9ncmFtbWF0aW9uIGRlCisgICAgbCdhcHBsaWNhdGlvbi4gTGV1cnMgbm9tcyByZXNzZW1ibGVudCDgIDxlbT5icmxkZWZzLXBpbG90ZTwvZW0+PHR0Pi5oPC90dD4gb/kKKyAgICA8ZW0+cGlsb3RlPC9lbT48dHQ+LTwvdHQ+PGVtPnBpbG90ZTwvZW0+PHR0Pi5oPC90dD4gKG/5IDxlbT5waWxvdGU8L2VtPiBjb3JyZXNwb25kCisgICAgYXV4IGRldXggbGV0dHJlcyBkdSA8cmVmIGlkPSJkcml2ZXJzIiBuYW1lPSJDb2RlIGQnaWRlbnRpZmljYXRpb24KKyAgICAgZHUgcGlsb3RlIj4pLiBMZXMgZW4tdOp0ZXMgYnJsZGVmcy5oIGV0IGFwaS5oIHNvbnQgZm91cm5pZXMgcG91ciB1bmUKKyAgICAgY29tcGF0aWJpbGl06SBhdmVjIGRlcyB2ZXJzaW9uIHBy6WPpZGVudGVzIGV0IG5lIGRldnJhaWVudCBwYXMg6nRyZQorICAgICB1dGlsaXPpZXMuCisgICAgIAorICA8dGFnPi9saWIvPC90YWc+CisgICAgPGRlc2NyaXA+CisgICAgICA8dGFnPmxpYmJybGFwaS5hPC90YWc+CisgICAgICAgIGJpYmxpb3Ro6HF1ZSBzdGF0aXF1ZSBkZSBsJ2ludGVyZmFjZSBkZSBwcm9ncmFtbWF0aW9uIGRlCisgICAgICAgIGwnYXBwbGljYXRpb24gKEFwcGxpY2F0aW9uIFByb2dyYW1taW5nIEludGVyZmFjZSkuCisgICAgICA8dGFnPmxpYmJybGFwaS5zbzwvdGFnPgorICAgICAgICBiaWJsaW90aOhxdWUgZHluYW1pcXVlIHBvdXIgbCdpbnRlcmZhY2UgZGUgcHJvZ3JhbW1hdGlvbiBkZQorICAgICAgICBsJ2FwcGxpY2F0aW9uLgorICAgIDwvZGVzY3JpcD4KKyAgPHRhZz4vbGliL2JybHR0eS88L3RhZz4KKyAgICBJbCBzZSBwZXV0IHF1ZSB2b3RyZSBpbnN0YWxsYXRpb24gZGUgQlJMVFRZIG4nYWl0IHBhcyB0b3VzIGxlcworICAgIHR5cGVzIGRlIGZpY2hpZXJzIHN1aXZhbnRzLiBJbHMgbmUgc29udCBjcunpcyBxdSdlbiBmb25jdGlvbiBkZXMKKyAgICBiZXNvaW5zIGTpZHVpdHMgZGVzIG9wdGlvbnMgZGUgY29tcGlsYXRpb24gcXVlIHZvdXMgc+lsZWN0aW9ubmV6CisgICAgKHZvaXIgPHJlZiBpZD0iYnVpbGQiIG5hbWU9Ik9wdGlvbnMgZGUgY29tcGlsYXRpb24iPikuCisgICAgPGRlc2NyaXA+CisgICAgICA8dGFnPmJybHR0eS1icmwubHN0PC90YWc+CisgICAgICAgIFVuZSBsaXN0ZSBkZXMgcGlsb3RlcyBkZXMgYWZmaWNoZXVycyBicmFpbGxlIHF1aSBvbnQg6XTpCisgICAgICAgIGNvbXBpbOlzIGVuIHRhbnQgcXUnb2JqZXRzIGR5bmFtaXF1ZXMgZXQsIGFpbnNpLCBxdWkgcGV1dmVudAorICAgICAgICDqdHJlIHV0aWxpc+lzLiBDaGFxdWUgbGlnbmUgY29udGllbnQgbGVzIGRldXggbGV0dHJlcworICAgICAgICBkdSBjb2RlIGQnaWRlbnRpZmljYXRpb24gcG91ciB1biBwaWxvdGUsIHVuZSB0YWJ1bGF0aW9uLCBldAorICAgICAgICB1bmUgZGVzY3JpcHRpb24gZGUgbCdhZmZpY2hldXIgYnJhaWxsZSBwb3VyIGxlcXVlbCBjZSBwaWxvdGUKKyAgICAgICAgZXhpc3RlLgorICAgICAgPHRhZz5saWJicmx0dHliPGVtPnBpbG90ZTwvZW0+LnNvLjE8L3RhZz4KKyAgICAgICAgTGUgcGlsb3RlIGR5bmFtaXF1ZSBwb3VyIHVuIGFmZmljaGV1ciBicmFpbGxlLCBv+SA8ZW0+cGlsb3RlPC9lbT4KKyAgICAgICAgY29ycmVzcG9uZCBhdXggZGV1eCBsZXR0cmVzIGR1IDxyZWYgaWQ9ImRyaXZlcnMiIG5hbWU9ImNvZGUKKyAgICAgICAgZCdpZGVudGlmaWNhdGlvbiBkdSBwaWxvdGUiPi4KKyAgICAgIDx0YWc+YnJsdHR5LXNway5sc3Q8L3RhZz4KKyAgICAgICAgVW5lIGxpc3RlIGRlcyBwaWxvdGVzIGRlIHN5bnRo6HNlIHZvY2FsZSBxdWkgb250IOl06QorICAgICAgICBjb21waWzpcyBlbiB0YW50IHF1J29iamV0cyBkeW5hbWlxdWVzLCBldCwgYWluc2ksIHF1aSBwZXV2ZW50CisgICAgICAgIOp0cmUgdXRpbGlz6XMuIENoYXF1ZSBsaWduZSBjb250aWVudCBsZXMgZGV1eCBsZXR0cmVzCisgICAgICAgIGR1IGNvZGUgZCdpZGVudGlmaWNhdGlvbiBwb3VyIHVuIHBpbG90ZSwgdW5lIHRhYnVsYXRpb24sIGV0CisgICAgICAgIHVuZSBkZXNjcmlwdGlvbiBkZSBsYSBzeW50aOhzZSB2b2NhbGUgcG91ciBsYXF1ZWxsZSBjZSBwaWxvdGUKKyAgICAgICAgZXhpc3RlLgorICAgICAgPHRhZz5saWJicmx0dHlzPGVtPnBpbG90ZTwvZW0+LnNvLjE8L3RhZz4KKyAgICAgICAgTGUgcGlsb3RlIGR5bmFtaXF1ZSBwb3VyIHVuZSBzeW50aOhzZSB2b2NhbGUsIG/5IDxlbT5waWxvdGU8L2VtPgorICAgICAgICBjb3JyZXNwb25kIGF1eCBkZXV4IGxldHRyZXMgZHUgPHJlZiBpZD0iZHJpdmVycyIgbmFtZT0iQ29kZQorICAgICAgICBkJ2lkZW50aWZpY2F0aW9uIGR1IHBpbG90ZSI+LgorICAgIDwvZGVzY3JpcD4KKworICA8dGFnPi9tYW4vPC90YWc+CisgICAgUGFnZXMgZGUgbWFudWVsLgorICAgIDxkZXNjcmlwPgorICAgICAgPHRhZz5tYW4xLzxlbT5ub208L2VtPi4xPC90YWc+CisgICAgICAgIFBhZ2VzIGRlIG1hbnVlbCBwb3VyIGxlcyBjb21tYW5kZXMgdXRpbGlzYXRldXIgbGnpZXMg4AorICAgICAgICBCUkxUVFkuCisgICAgICA8dGFnPm1hbjMvPGVtPm5vbTwvZW0+LjM8L3RhZz4KKyAgICAgICAgUGFnZXMgZGUgbWFudWVsIHBvdXIgbGEgYmlibGlvdGjocXVlIGRlCisgICAgICAgIGwnaW50ZXJmYWNlIGRlIHByb2dyYW1tYXRpb24gZGUgbCdhcHBsaWNhdGlvbi4KKyAgICA8L2Rlc2NyaXA+Cis8L2Rlc2NyaXA+CisKK0QnYXV0cmVzIGZpY2hpZXJzIG9wdGlvbm5lbHMgcXVlIHZvdXMgZGV2cmlleiBjb25uYe50cmUsIGJpZW4gcXUnaWxzIG5lCitmYXNzZW50IHBhcyBwYXJ0aWUgZGUgbGEgaGnpcmFyY2hpZSBkZXMgZmljaGllcnMgaW5zdGFsbOlzLCBzb250IDoKKzxkZXNjcmlwPgorICA8dGFnPi9ldGMvYnJsdHR5LmNvbmY8L3RhZz4KKyAgICBMZSBmaWNoaWVyIGRlcyBwYXJhbeh0cmVzIHN5c3TobWUgcGFyIGTpZmF1dC4gSWwgZXN0IGNy6ekgcGFyCisgICAgbCdhZG1pbmlzdHJhdGV1ciBzeXN06G1lLiBWb2lyIDxyZWYgaWQ9ImNvbmZpZ3VyZSIgbmFtZT0iTGUKKyAgICBmaWNoaWVyIGRlIGNvbmZpZ3VyYXRpb24iPiBwb3VyIHBsdXMgZGUgZOl0YWlscy4KKyAgPHRhZz4vZXRjL2JybHR0eS08ZW0+cGlsb3RlPC9lbT4ucHJlZnM8L3RhZz4KKyAgICBMZSBmaWNoaWVyIGRlIHNhdXZlZ2FyZGUgZGVzIHBhcmFt6HRyZXMgZGUgcHLpZulyZW5jZSAoPGVtPnBpbG90ZTwvZW0+CisgICAgY29ycmVzcG9uZCBhdXggZGV1eCBsZXR0cmVzIGR1IDxyZWYgaWQ9ImRyaXZlcnMiIG5hbWU9ImNvZGUKKyAgICBkJ2lkZW50aWZpY2F0aW9uIGRlIHBpbG90ZSI+KS4gSWwgZXN0IGNy6ekgcGFyIGxhIGNvbW1hbmRlIDxyZWYKKyAgICBpZD0iY29tbWFuZC1QUkVGU0FWRSIgbmFtZT0iUFJFRlNBVkUiPi4gIFZvaXIgPHJlZgorICAgIGlkPSJwcmVmZXJlbmNlcyIgbmFtZT0iUGFyYW3odHJlcyBkZSBQculm6XJlbmNlcyI+IHBvdXIgcGx1cyBkZQorICAgIGTpdGFpbHMuCis8L2Rlc2NyaXA+CisKKzxzZWN0MT5JbnN0YWxsYXRpb24g4CBwYXJ0aXIgZCd1biBUQVIgQmFsbDxsYWJlbCBpZD0idGFyIj48cD4KK1ZvaWNpIGNlIHF1ZSB2b3VzIGF2ZXog4CBmYWlyZSBzaSB2b3VzIHZvdWxleiBzZXVsZW1lbnQgaW5zdGFsbGVyCitCUkxUVFkg4CB0b3V0ZSB2aXRlc3NlLCBlbiBlc3DpcmFudCBxdWUgdG91cworbm9zIHBhcmFt6HRyZXMgcGFyIGTpZmF1dCBzb2llbnQgY29ycmVjdHMuCis8ZW51bT4KKyAgPGl0ZW0+CisgICAgVOls6WNoYXJnZXogbGVzIHNvdXJjZXMuIElsIHMnYWdpcmEgZCd1biBmaWNoaWVyIG5vbW3pCisgICAgPHR0PmJybHR0eS08L3R0PjxlbT52ZXJzaW9uPC9lbT48dHQ+LnRhci5nejwvdHQ+LCBwYXIgZXhlbXBsZQorICAgIDx0dD5icmx0dHktMy4wLnRhci5nejwvdHQ+LgorICA8aXRlbT4KKyAgICBE6WNvbXByZXNzZXogbGVzIHNvdXJjZXMgZGFucyB1bmUgc3RydWN0dXJlIGhp6XJhcmNoaXF1ZSBuYXRpdmUuCisgICAgPHRzY3JlZW4+dGFyIHh6ZiBicmx0dHktPGVtPnZlcnNpb248L2VtPi50YXIuZ3o8L3RzY3JlZW4+CisgICAgQ2VsYSBkZXZyYWl0IGNy6WVyIGxlIHLpcGVydG9pcmUgPHR0PmJybHR0eS08L3R0PjxlbT52ZXJzaW9uPC9lbT4uCisgIDxpdGVtPgorICAgIEFsbGV6IGRhbnMgbGUgculwZXJ0b2lyZSBkZXMgc291cmNlcywgY29uZmlndXJleiwgY29tcGlsZXogZXQgaW5zdGFsbGV6IEJSTFRUWS4KKyAgICA8dHNjcmVlbj4KKyAgICAgIGNkIGJybHR0eS08ZW0+dmVyc2lvbjwvZW0+CisgICAgICA8bmV3bGluZT4KKyAgICAgIC4vY29uZmlndXJlCisgICAgICA8bmV3bGluZT4KKyAgICAgIG1ha2UKKyAgICAgIDxuZXdsaW5lPgorICAgICAgbWFrZSBpbnN0YWxsCisgICAgPC90c2NyZWVuPgorICAgIFZvdXMgZGV2ZXogZWZmZWN0dWVyIGNldHRlIGRlcm5p6HJlIGNvbW1hbmRlIGVuIHRhbnQgcXVlIDxiZi9yb290Ly4KKzwvZW51bT4KKworUG91ciBk6XNpbnN0YWxsZXIgQlJMVFRZLCBmYWl0ZXMgOgorPHRzY3JlZW4+CisgIGNkIGJybHR0eS08ZW0+dmVyc2lvbjwvZW0+CisgIDxuZXdsaW5lPgorICBtYWtlIHVuaW5zdGFsbAorPC90c2NyZWVuPgorCitDJ2VzdCB0b3V0IGNlIHF1ZSB2b3VzIGF2ZXog4CBmYWlyZS4KK1BvdXIgY2V1eCBxdWkgdmV1bGVudCB2cmFpbWVudCBzYXZvaXIgY2UgcXVpIHNlIHBhc3NlLCB2b2ljaQorbWFpbnRlbmFudCBsZXMgZOl0YWlscy4KKworPHNlY3QyPk9wdGlvbnMgZGUgY29tcGlsYXRpb248bGFiZWwgaWQ9ImJ1aWxkIj48cD4KK0xhIHByZW1p6HJlIOl0YXBlIGRhbnMgbGEgY29tcGlsYXRpb24gZGUgQlJMVFRZIGVzdCBkZSBsZSBjb25maWd1cmVyCitlbiBmb25jdGlvbiBkZSB2b3RyZSBzeXN06G1lIGV0L291IGRlIHZvcyBiZXNvaW5zIHBlcnNvbm5lbHMuIENlbGEgc2UKK2ZhaXQgcGFyIGwnZXjpY3V0aW9uIGR1IHNjcmlwdCBkZSA8dHQ+Y29uZmlndXJhdGlvbjwvdHQ+IGRhbnMgbGUKK3LpcGVydG9pcmUgcmFjaW5lIGRlIEJSTFRUWS4gTm91cyBhdm9ucyB0ZW506SBkZSBmYWlyZSBjb3JyZXNwb25kcmUgbGVzIHBhcmFt6HRyZXMKK3BhciBk6WZhdXQgc3VmZmlzYW50cyDgIGxhIHBsdXBhcnQgZGVzIGNhcyBjb21tdW5zLCBkb25jLCBlbgorc3VwcG9zYW50IHF1ZSB2b3VzIG5lIHRlbnRleiBwYXMgZGUgZmFpcmUgcXVlbHF1ZSBjaG9zZSBzb3J0YW50IGRlCitsJ29yZGluYWlyZSwgaWwgc2UgcGV1dCBxdWUgdm91cyBuJ2F5ZXogcmllbiBiZXNvaW4gZCdhdXRyZQorcXVlIGQnYXBwZWxlciBjZSBzY3JpcHQgc2FucyBzcOljaWZpZXIgZCdvcHRpb25zLgorPHRzY3JlZW4+Li9jb25maWd1cmU8L3RzY3JlZW4+CitTaSB0b3V0ZWZvaXMgdm91cyBhdmV6IGRlcyBiZXNvaW5zIHBhcnRpY3VsaWVycywgb3Ugc2kgdm91cwor6nRlcyBzaW1wbGVtZW50IHVuIGF2ZW50dXJpZXIsIHZvdXMgZGV2cmlleiB0cm91dmVyIHBsdXMgbG9pbiBxdWVscyBzb250Cit2b3MgY2hvaXguCis8dHNjcmVlbj4uL2NvbmZpZ3VyZSAtLWhlbHA8L3RzY3JlZW4+CitWb3VzIGRldnJpZXogYXVzc2kgbGlyZSBsZSBmaWNoaWVyIFJFQURNRSBkYW5zIGxlIHNvdXMtculwZXJ0b2lyZQorY29udGVuYW50IGxlIHBpbG90ZSBwb3VyIHZvdHJlIGFmZmljaGV1ciBicmFpbGxlIHBvdXIgdG91dGVzIGxlcworaW5zdHJ1Y3Rpb25zIHN1cHBs6W1lbnRhaXJlcyBzcOljaWZpcXVlcy4KKworPHNlY3QzPlBhcmFt6HRyZXMgc3lzdOhtZSBwYXIgZOlmYXV0PGxhYmVsIGlkPSJidWlsZC1kZWZhdWx0cyI+PHA+Cis8ZGVzY3JpcD4KKyAgPHRhZz48dHQ+LS13aXRoLWJyYWlsbGUtZHJpdmVyPTwvdHQ+PGVtPnBpbG90ZTwvZW0+PGxhYmVsIGlkPSJidWlsZC1icmFpbGxlLWRyaXZlciI+PC90YWc+CisgICAgU3DpY2lmaWUgbGVzIHBpbG90ZXMgZGVzIHRlcm1pbmF1eCBicmFpbGxlIHF1ZSB2b3VzIHZvdWxleiBsaWVyIOAKKyAgICBsJ2V46WN1dGFibGUgZGUgQlJMVFRZLiBMZXMgcGlsb3RlcyBxdWkgbmUgZmlndXJlcm9udCBwYXMgZGFucyBsYQorICAgIGxpc3RlIGRlIGNldHRlIG9wdGlvbiBzZXJvbnQgY29tcGls6XMgZW4gdGFudCBxdSdvYmpldHMgZHluYW1pcXVlcworICAgIGV0IHBvdXJyb250IHRvdWpvdXJzIOp0cmUgc+lsZWN0aW9ubulzIGF1IG1vbWVudCBkZSBsJ2V46WN1dGlvbi4gQ2hhcXVlCisgICAgcGlsb3RlIGRvaXQg6nRyZSBpZGVudGlmaekgc29pdCBwYXIgbGVzIDIgbGV0dHJlcyBkZSBzb24gPHJlZiBpZD0iZHJpdmVycyIgbmFtZT0iY29kZQorICAgIGQnaWRlbnRpZmljYXRpb24gZGUgcGlsb3RlIj4gb3UgcGFyIHNvbiB2cmFpIG5vbSAoY29tcGxldCBvdQorICAgIGFiculn6SkuIENlcyBub21zIGV0L291IGlkZW50aWZpYW50cyBkZSBwaWxvdGVzIGRvaXZlbnQg6nRyZSBz6XBhculzIGxlcyB1bnMgZGVzCisgICAgYXV0cmVzIHBhciB1bmUgc2ltcGxlIHZpcmd1bGUuIFNpIHVuIGlkZW50aWZpYW50IGRlIHBpbG90ZSBlc3QKKyAgICBwculj6WTpIGR1IHNpZ25lIG1vaW5zICg8dHQ+LTwvdHQ+KSwgY2UgcGlsb3RlIGVzdCBhbG9ycyBleGNsdSBkZSBsYQorICAgIGNvbXBpbGF0aW9uLiBMZSBwcmVtaWVyIHBpbG90ZSBub24tZXhjbHUgZGV2aWVudCBsZSBwaWxvdGUgcGFyCisgICAgZOlmYXV0LiBJbCBuJ3kgYSBwYXMgZGUgcGlsb3RlIHBhciBk6WZhdXQgc2kgdm91cyBuJ3V0aWxpc2V6IHBhcworICAgIGNldHRlIG9wdGlvbi4gVW4gZGVzIG1vdHMgc3VpdmFudHMgcGV1dCDqdHJlIGF1c3NpIHV0aWxpc+kgY29tbWUKKyAgICBvcOlyYXRldXIgcG91ciBsJ29wdGlvbjoKKworKDx0dD4tPC90dD4pLAorICAgIDxkZXNjcmlwPgorICAgICAgPHRhZz5hbGw8L3RhZz4KKyAgICAgICAgTGllIHRvdXMgbGVzIHBpbG90ZXMg4CBsJ2V46WN1dGFibGUuIE5lIGxlcyBjb21waWxlIHBhcyBlbgorICAgICAgICB0YW50IHF1J29iamV0cyBkeW5hbWlxdWVzLiBWb3VzIHBvdXZleiBzcOljaWZpZXIgY2UgbW90IGNvbW1lCisgICAgICAgIOls6W1lbnQgdGVybWluYW50IHVuZSBsaXN0ZSBkZSBwaWxvdGVzLiBDJ2VzdCB1bmUgZmHnb24gZGUKKyAgICAgICAgc3DpY2lmaWVyIHVuIHBpbG90ZSBwYXIgZOlmYXV0IHF1YW5kIHRvdXMgbGVzIHBpbG90ZXMgc2Vyb250CisgICAgICAgIGNvbXBpbOlzLgorICAgICAgPHRhZz4tYWxsPC90YWc+CisgICAgICAgIE5lIGNvbXBpbGUgcXVlIGxlcyBwaWxvdGVzIHF1aSBvbnQg6XTpIGV4cGxpY2l0ZW1lbnQgaW5jbHVzCisgICAgICAgIHBhciBjZXR0ZSBvcHRpb24uCisgICAgICA8dGFnPm5vPC90YWc+CisgICAgICAgIE5lIGNvbXBpbGUgYXVjdW4gcGlsb3RlLiBDZWxhIHJldmllbnQg4CBzcOljaWZpZXIKKyAgICAgICAgPHR0Pi0td2l0aG91dC1icmFpbGxlLWRyaXZlcjwvdHQ+LgorICAgICAgPHRhZz55ZXM8L3RhZz4KKyAgICAgICAgQ29tcGlsZSB0b3VzIGxlcyBwaWxvdGVzIGVuIHRhbnQgcXUnb2JqZXRzIGR5bmFtaXF1ZXMuIE5lIGxlcworICAgICAgICBsaWUgcGFzIOAgbCdleOljdXRhYmxlLiBDZWxhIHJldmllbnQg4CBzcOljaWZpZXIKKyAgICAgICAgPHR0Pi0td2l0aC1icmFpbGxlLWRyaXZlcjwvdHQ+LgorICAgIDwvZGVzY3JpcD4KKyAgICBWb2lyIGxhIGxpZ25lIDxyZWYgaWQ9ImNvbmZpZ3VyZS1icmFpbGxlLWRyaXZlciIgbmFtZT0iYnJhaWxsZS1kcml2ZXIiPiBkdSBmaWNoaWVyIGRlIGNvbmZpZ3VyYXRpb24KKyAgICBldCBsJ29wdGlvbiA8cmVmIGlkPSJvcHRpb25zLWJyYWlsbGUtZHJpdmVyIiBuYW1lPSItYiI+IGRlIGxhIGxpZ25lIGRlIGNvbW1hbmRlIHBvdXIgdW5lIHPpbGVjdGlvbiDgIGwnZXjpY3V0aW9uLgorICA8dGFnPjx0dD4tLXdpdGgtYnJhaWxsZS1wYXJhbWV0ZXJzPTwvdHQ+WzxlbT5waWxvdGU8L2VtPjx0dD46PC90dD5dPGVtPm5vbTwvZW0+PHR0Pj08L3R0PjxlbT52YWxldXI8L2VtPjx0dD4sPC90dD4uLi48bGFiZWwgaWQ9ImJ1aWxkLWJyYWlsbGUtcGFyYW1ldGVycyI+PC90YWc+CisgICAgU3DpY2lmaWUgbGVzIHBhcmFt6HRyZXMgcGFyIGTpZmF1dCBwb3VyIGxlcyBwaWxvdGVzIGRlcyBhZmZpY2hldXJzCisgICAgYnJhaWxsZS4gU2kgdW4gbeptZSBwYXJhbeh0cmUgZXN0IHNw6WNpZmnpIHBsdXMgZCd1bmUgZm9pcywgc2EKKyAgICB2YWxldXIgbGEgcGx1cyDgIGRyb2l0ZSBlc3QgcHJpc2UgZW4gY29tcHRlLiBTaSBsZSBub20gZCd1bgorICAgIHBhcmFt6HRyZSBlc3Qgc3DpY2lmaXF1ZSDgIHVuIHBpbG90ZSwgKHZvaXIgbGEgc2VjdGlvbgorICAgIDxyZWYgaWQ9ImRyaXZlcnMiIG5hbWU9IkNvZGVzIGQnaWRlbnRpZmljYXRpb24gZGUgcGlsb3RlcyI+KSBjZXR0ZQorICAgIHZhbGV1ciBuZSBzJ2FwcGxpcXVlIHF1J+AgY2UgcGlsb3RlOyBzaW5vbiwgaWwKKyAgICBzJ2FwcGxpcXVlIOAgdG91cyBsZXMgcGlsb3Rlcy4gUG91ciB1bmUgZGVzY3JpcHRpb24gZGVzIHBhcmFt6HRyZXMKKyAgICBhY2NlcHTpcyBwYXIgdW4gcGlsb3RlIHBhcnRpY3VsaWVyLCByZXBvcnRlei12b3VzIOAgbGEKKyAgICBkb2N1bWVudGF0aW9uIGRlIGNlIHBpbG90ZS4gVm9pciBsYSBsaWduZSA8cmVmCisgICAgaWQ9ImNvbmZpZ3VyZS1icmFpbGxlLXBhcmFtZXRlcnMiIG5hbWU9ImJyYWlsbGUtcGFyYW1ldGVycyI+IGR1CisgICAgZmljaGllciBkZSBjb25maWd1cmF0aW9uIGV0IGwnb3B0aW9uIDxyZWYKKyAgICBpZD0ib3B0aW9ucy1icmFpbGxlLXBhcmFtZXRlcnMiIG5hbWU9Ii1CIj4gZGUgbGEgbGlnbmUgZGUgY29tbWFuZGUKKyAgICBwb3VyIGxhIHPpbGVjdGlvbiDgIGwnZXjpY3V0aW9uLgorICA8dGFnPjx0dD4tLXdpdGgtYnJhaWxsZS1kZXZpY2U9PC90dD48ZW0+cGlsb3RlPC9lbT48dHQ+LDwvdHQ+Li4uPGxhYmVsIGlkPSJidWlsZC1icmFpbGxlLWRldmljZSI+PC90YWc+CisgICAgU3DpY2lmaWUgbGUgcG9ydCBwYXIgZOlmYXV0IGF1cXVlbCBsJ2FmZmljaGV1ciBicmFpbGxlIGVzdCByZWxp6QorICAgICh2b2lyIGxhIHNlY3Rpb24gPHJlZiBpZD0ib3BlcmFuZC1icmFpbGxlLWRldmljZSIKKyAgICBuYW1lPSJTcOljaWZpY2F0aW9uIGR1IHBvcnQgYnJhaWxsZSI+KS4gU2kgdm91cyBuZSBzcOljaWZpZXogcGFzCisgICAgY2V0dGUgb3B0aW9uLCB1c2I6IGVzdCBzdXBwb3PpIHNpIGxlIHN1cHBvcnQgVVNCIGVzdCBkaXNwb25pYmxlLAorICAgIGJsdWV0b290aDogZXN0IHN1cHBvc+kgc2kgbGUgc3VwcG9ydCBCbHVldG9vdGggZXN0IGRpc3BvbmlibGUsIGV0CisgICAgdXNiOixibHVldG9vdGg6IGVzdCBzdXBwb3PpIHNpIGxlcyBkZXV4IHNvbnQgZGlzcG9uaWJsZXMuIFNpIG5pIGxlIHN1cHBvcnQKKyAgICBVU0IgbmkgbGUgc3VwcG9ydCBCbHVldG9vdGggbmUgc29udCBkaXNwb25pYmxlcywgdW4KKyAgICBjaGVtaW4gYXBwcm9wcmnpIHBvdXIgbGUgcOlyaXBo6XJpcXVlIGR1IHBvcnQgc+lyaWUgcHJpbWFpcmUgY29ycmVzcG9uZGFudCBhdSBzeXN06G1lCisgICAgZCdleHBsb2l0YXRpb24gZXN0IHN1cHBvc+kuIFZvaXIgbGEgbGlnbmUKKyAgICA8cmVmIGlkPSJjb25maWd1cmUtYnJhaWxsZS1kZXZpY2UiIG5hbWU9ImJyYWlsbGUtZGV2aWNlIj4gZHUKKyAgICBmaWNoaWVyIGRlIGNvbmZpZ3VyYXRpb24gZXQgbCdvcHRpb24gPHJlZgorICAgIGlkPSJvcHRpb25zLWJyYWlsbGUtZGV2aWNlIiBuYW1lPSItZCI+IGRlIGxhIGxpZ25lIGRlIGNvbW1hbmRlCisgICAgcG91ciBsYSBz6WxlY3Rpb24g4CBsJ2V46WN1dGlvbi4KKyAgPHRhZz48dHQ+LS13aXRoLWxpYmJyYWlsbGU9PC90dD48ZW0+culwZXJ0b2lyZTwvZW0+CisgICAgU3DpY2lmaWUgbCdlbmRyb2l0IG/5IHNlIHRyb3V2ZSBsZSBwYXF1ZXQgbGliYnJhaWxsZSwgZXQgY29tcGlsZSBsZSBwaWxvdGUKKyAgICBwb3VyIGwnYWZmaWNoZXVyIGJyYWlsbGUgbGliYnJhaWxsZSAodm9pcgorICAgIDxyZWYgaWQ9InJlc3RyaWN0aW9ucy1mbGl0ZSIgbmFtZT0iUmVzdHJpY3Rpb25zIGRhbnMgbGEgY29tcGlsYXRpb24iPikuCisgICAgVW4gZGVzIG1vdHMgc3VpdmFudHMgcGV1dCDqdHJlIGF1c3NpIHV0aWxpc+kgY29tbWUKKyAgICBvcOlyYXRldXIgcG91ciBsJ29wdGlvbjoKKworKDx0dD4tPC90dD4pLAorICAgIDxkZXNjcmlwPgorICAgICAgPHRhZz5ubzwvdGFnPgorICAgICAgICBOZSBjb21waWxlIHBhcyBsZSBwaWxvdGUuIENlbGEgcmV2aWVudCDgIHNw6WNpZmllcgorICAgICAgICA8dHQ+LS13aXRob3V0LWxpYmJyYWlsbGU8L3R0Pi4KKyAgICAgICAgCisgICAgICA8dGFnPnllczwvdGFnPgorICAgICAgICBDb21waWxlIGxlIHBpbG90ZSBzaSBsZSBwYXF1ZXQgZXN0IHBy6XNlbnQgZGFucyA8dHQ+L3VzcjwvdHQ+LCAKKyAgICAgICAgPHR0Pi91c3IvbG9jYWw8L3R0PiwgPHR0Pi91c3IvbG9jYWwvTGliYnJhaWxsZTwvdHQ+LAorICAgICAgICA8dHQ+L3Vzci9sb2NhbC9saWJicmFpbGxlPC90dD4sIDx0dD4vb3B0L0xpYmJyYWlsbGU8L3R0Piwgb3UKKyAgICAgICAgPHR0Pi9vcHQvbGliYnJhaWxsZTwvdHQ+LiBDZWxhIHJldmllbnQg4CDgIHNw6WNpZmllciA8dHQ+LS13aXRoLWxpYmJyYWlsbGU8L3R0Pi4KKyAgICA8L2Rlc2NyaXA+CisgIDx0YWc+PHR0Pi0td2l0aC10ZXh0LXRhYmxlPTwvdHQ+PGVtPmZpY2hpZXI8L2VtPjxsYWJlbCBpZD0iYnVpbGQtdGV4dC10YWJsZSI+PC90YWc+CisgICAgU3DpY2lmaWUgbGEgdGFibGUgZGUgdHJhZHVjdGlvbiBkZSB0ZXh0ZSBjb21waWzpZSBlbiBkdXIgKGNlbGxlIHBhciBk6WZhdXQpICh2b2lyIGxhIHNlY3Rpb24gPHJlZgorICAgIGlkPSJ0YWJsZS10ZXh0IiBuYW1lPSJUYWJsZXMgZGUgdGV4dGUiPiBwb3VyIHBsdXMgZGUKKyAgICBk6XRhaWxzKS4gTGEgdGFibGUgc3DpY2lmaellIGVzdCBsaellIGF1IGJpbmFpcmUgQlJMVFRZIGV0IGVsbGUgZXN0IHV0aWxpc+llCisgICAgYXUgY2FzIG/5IGxhIHPpbGVjdGlvbiBhdXRvbWF0aXF1ZSDgIHBhcnRpciBkZSBsYSBsb2NhbGUg6WNob3VlIG91IHNpIGxhIHRhYmxlCisgICAgZGVtYW5k6WUgbmUgcGV1dCBwYXMg6nRyZSBjaGFyZ+llLgorICAgIFZvdXMgcG91dmV6IGZvdXJuaXIgbGUgY2hlbWluIGFic29sdSBkJ3VuZSB0YWJsZSBob3JzIGRlCisgICAgbCdhcmJvcmVzY2VuY2Ugc291cmNlLiBMJ2V4dGVuc2lvbiA8dHQvLnR0Yi8gZXN0IGZhY3VsdGF0aXZlLiBQb3VyIHVuCisgICAgbm9tIGRlIGZpY2hpZXIgc2ltcGxlLCBsZSBwculmaXhlIDx0dD50ZXh0LjwvdHQ+IGVzdCBmYWN1bHRhdGlmLiBTaQorICAgIHZvdXMgbmUgc3DpY2lmaWV6IHBhcyBjZXR0ZSBvcHRpb24sIDx0dC9lbi1uYWJjYy8sIHVuZSB0YWJsZSBjb21tdW5lIChlbgorICAgIEFt6XJpcXVlIGR1IE5vcmQpIHV0aWxpc2FudCBsYSB2YXJpYW50ZSA4IHBvaW50cyBkdSAKKyAgICA8cmVmIGlkPSJuYWJjYyIgbmFtZT0iTm9ydGggQW1lcmljYW4gQnJhaWxsZSBDb21wdXRlciBDb2RlIj4sIGVzdAorICAgIHV0aWxpc+llLiBWb2lyIGxhIGxpZ25lIDxyZWYgaWQ9ImNvbmZpZ3VyZS10ZXh0LXRhYmxlIgorICAgIG5hbWU9InRleHQtdGFibGUiPiBkdSBmaWNoaWVyIGRlIGNvbmZpZ3VyYXRpb24gZXQgbCdvcHRpb24gPHJlZgorICAgIGlkPSJvcHRpb25zLXRleHQtdGFibGUiIG5hbWU9Ii10Ij4gZW4gbGlnbmUgZGUgY29tbWFuZGUgcG91ciBsYQorICAgIHPpbGVjdGlvbiDgIGwnZXjpY3V0aW9uLiBDZSBwYXJhbeh0cmUgcGV1dCDqdHJlIG1vZGlmaekgcGFyIGxhCisgICAgcHLpZulyZW5jZSA8cmVmIGlkPSJwcmVmZXJlbmNlLXRleHQtdGFibGUiIG5hbWU9IlRleHQgVGFibGUiPi4KKyAgPHRhZz48dHQ+LS13aXRoLWF0dHJpYnV0ZXMtdGFibGU9PC90dD48ZW0+ZmljaGllcjwvZW0+PGxhYmVsIGlkPSJidWlsZC1hdHRyaWJ1dGVzLXRhYmxlIj48L3RhZz4KKyAgICBTcOljaWZpZSBsYSB0YWJsZSBkZXMgYXR0cmlidXRzIGNvbXBpbOllIGVuIGR1ciAoY2VsbGUgcGFyIGTpZmF1dCkgKHZvaXIgbGEgc2VjdGlvbgorICAgIDxyZWYgaWQ9InRhYmxlLWF0dHJpYnV0ZXMiIG5hbWU9IlRhYmxlcyBkJ2F0dHJpYnV0cyI+CisgICAgcG91ciBwbHVzIGRlIGTpdGFpbHMpLiBMYSB0YWJsZSBzcOljaWZp6WUgZXN0IGxp6WUgYXUgYmluYWlyZSBCUkxUVFkgZXQgZWxsZSBlc3QgdXRpbGlz6WUKKyAgICBhdSBjYXMgb/kgbGEgc+lsZWN0aW9uIGF1dG9tYXRpcXVlIOAgcGFydGlyIGRlIGxhIGxvY2FsZSDpY2hvdWUgb3Ugc2kgbGEgdGFibGUKKyAgICBkZW1hbmTpZSBuZSBwZXV0IHBhcyDqdHJlIGNoYXJn6WUuCisgICAgVm91cyBwb3V2ZXogZm91cm5pciBsZSBjaGVtaW4gYWJzb2x1IGQndW5lCisgICAgdGFibGUgaG9ycyBkZSBsJ2FyYm9yZXNjZW5jZSBzb3VyY2UuICBMJ2V4dGVuc2lvbiA8dHQ+LmF0YjwvdHQ+IGVzdAorICAgIGZhY3VsdGF0aXZlLiBTaSB2b3VzIG5lIHNw6WNpZmlleiBwYXMgY2V0dGUgb3B0aW9uLAorICAgIDx0dD5hdHRyaWJ1dGVzPC90dD4gZXN0IGFsb3JzIHV0aWxpc+kuIENoYW5nZXogY2V0dGUgb3B0aW9uIGVuCisgICAgPHR0PmF0dHJpYjwvdHQ+IHBvdXIgbWFpbnRlbmlyIGwnYW5jaWVubmUgZm9ybWUuIFZvaXIgbGEgbGlnbmUKKyAgICA8cmVmIGlkPSJjb25maWd1cmUtYXR0cmlidXRlcy10YWJsZSIgbmFtZT0iYXR0cmlidXRlcy10YWJsZSI+IGR1CisgICAgZmljaGllciBkZSBjb25maWd1cmF0aW9uIGV0IGwnb3B0aW9uIDxyZWYKKyAgICBpZD0ib3B0aW9ucy1hdHRyaWJ1dGVzLXRhYmxlIiBuYW1lPSItYSI+IGVuIGxpZ25lIGRlIGNvbW1hbmRlIHBvdXIKKyAgICBsYSBz6WxlY3Rpb24g4CBsJ2V46WN1dGlvbi4gQ2UgcGFyYW3odHJlIHBldXQg6nRyZSBtb2RpZmnpIHBhciBsYQorICAgIHBy6WbpcmVuY2UgPHJlZiBpZD0icHJlZmVyZW5jZS1hdHRyaWJ1dGVzLXRhYmxlIiBuYW1lPSJBdHRyaWJ1dGVzCisgICAgVGFibGUiPi4KKyAgPHRhZz48dHQ+LS13aXRoLXNwZWVjaC1kcml2ZXI9PC90dD48ZW0+cGlsb3RlPC9lbT48bGFiZWwgaWQ9ImJ1aWxkLXNwZWVjaC1kcml2ZXIiPjwvdGFnPgorICAgIFNw6WNpZmllIGxlcyBwaWxvdGVzIGRlIHN5bnRo6HNlIHZvY2FsZSBxdWUgdm91cyB2b3VsZXogbGllciDgCisgICAgbCdleOljdXRhYmxlIGRlIEJSTFRUWS4gTGVzIHBpbG90ZXMgcXVpIG5lIGZpZ3VyZXJvbnQgcGFzIGRhbnMgbGEKKyAgICBsaXN0ZSBkZSBjZXR0ZSBvcHRpb24gc2Vyb250IGNvbXBpbOlzIGVuIHRhbnQgcXUnb2JqZXRzIGR5bmFtaXF1ZXMKKyAgICBldCBwb3Vycm9udCB0b3Vqb3VycyDqdHJlIHPpbGVjdGlvbm7pcyDgIGwnZXjpY3V0aW9uLiBDaGFxdWUKKyAgICBwaWxvdGUgZG9pdCDqdHJlIGlkZW50aWZp6SBzb2l0IHBhciBsZXMgMiBsZXR0cmVzIGRlIHNvbiA8cmVmCisgICAgaWQ9ImRyaXZlcnMiIG5hbWU9ImNvZGUgZCdpZGVudGlmaWNhdGlvbiBkZSBwaWxvdGUiPiBvdSBwYXIgc29uCisgICAgdnJhaSBub20gKGNvbXBsZXQgb3UgYWJy6WfpKS4gQ2VzIG5vbXMgZXQvb3UgbGVzIGlkZW50aWZpYW50cyBkZSBwaWxvdGVzIGRvaXZlbnQg6nRyZQorICAgIHPpcGFy6XMgbGVzIHVucyBkZXMgYXV0cmVzIHBhciB1bmUgc2ltcGxlIHZpcmd1bGUuIFNpIHVuCisgICAgaWRlbnRpZmlhbnQgZGUgcGlsb3RlIGVzdCBwculj6WTpIGR1IHNpZ25lIG1vaW5zICg8dHQ+LTwvdHQ+KSwgY2UKKyAgICBwaWxvdGUgZXN0IGFsb3JzIGV4Y2x1IGRlIGxhIGNvbXBpbGF0aW9uLiBVbiBkZXMgbW90cworICAgIHN1aXZhbnRzIHBldXQgYXVzc2kg6nRyZSB1dGlsaXPpIGNvbW1lIG9w6XJhdGV1ciBwb3VyIGwnb3B0aW9uOgorICAgIDxkZXNjcmlwPgorICAgICAgPHRhZz5hbGw8L3RhZz4KKyAgICAgICAgTGllIHRvdXMgbGVzIHBpbG90ZXMg4CBsJ2V46WN1dGFibGUuIE5lIGxlcyBjb21waWxlIHBhcyBlbgorICAgICAgICB0YW50IHF1J29iamV0cyBkeW5hbWlxdWVzLiBWb3VzIHBvdXZleiBzcOljaWZpZXIgY2UgbW90IGNvbW1lCisgICAgICAgIOls6W1lbnQgdGVybWluYW50IHVuZSBsaXN0ZSBkZSBwaWxvdGVzLiBDJ2VzdCB1bmUgZmHnb24gZGUKKyAgICAgICAgc3DpY2lmaWVyIHVuIHBpbG90ZSBwYXIgZOlmYXV0IHF1YW5kIHRvdXMgbGVzIHBpbG90ZXMgc2Vyb250CisgICAgICAgIGNvbXBpbOlzLgorICAgICAgPHRhZz4tYWxsPC90YWc+CisgICAgICAgIE5lIGNvbXBpbGUgcXVlIGxlcyBwaWxvdGVzIHF1aSBvbnQg6XTpIGV4cGxpY2l0ZW1lbnQgaW5jbHVzCisgICAgICAgIHBhciBjZXR0ZSBvcHRpb24uCisgICAgICA8dGFnPm5vPC90YWc+CisgICAgICAgIE5lIGNvbXBpbGUgYXVjdW4gcGlsb3RlLiBDZWxhIHJldmllbnQg4CBzcOljaWZpZXIKKyAgICAgICAgPHR0Pi0td2l0aG91dC1zcGVlY2gtZHJpdmVyPC90dD4uCisgICAgICA8dGFnPnllczwvdGFnPgorICAgICAgICBDb21waWxlIHRvdXMgbGVzIHBpbG90ZXMgZW4gdGFudCBxdSdvYmpldHMgZHluYW1pcXVlcy4gTmUgbGVzCisgICAgICAgIGxpZSBwYXMg4CBsJ2V46WN1dGFibGUuIENlbGEgcmV2aWVudCDgIHNw6WNpZmllcgorICAgICAgICA8dHQ+LS13aXRoLXNwZWVjaC1kcml2ZXI8L3R0Pi4KKyAgICA8L2Rlc2NyaXA+CisgICAgVm9pciBsYSBsaWduZSA8cmVmIGlkPSJjb25maWd1cmUtc3BlZWNoLWRyaXZlciIgbmFtZT0ic3BlZWNoLWRyaXZlciI+IGR1IGZpY2hpZXIgZGUgY29uZmlndXJhdGlvbiBldAorICAgIGwnb3B0aW9uIDxyZWYgaWQ9Im9wdGlvbnMtc3BlZWNoLWRyaXZlciIgbmFtZT0iLXMiPiBkZSBsYSBsaWduZSBkZSBjb21tYW5kZSBwb3VyIHVuZSBz6WxlY3Rpb24g4CBsJ2V46WN1dGlvbi4KKyAgPHRhZz48dHQ+LS13aXRoLXNwZWVjaC1wYXJhbWV0ZXJzPTwvdHQ+WzxlbT5waWxvdGU8L2VtPjx0dD46PC90dD5dPGVtPm5vbTwvZW0+PHR0Pj08L3R0PjxlbT52YWxldXI8L2VtPjx0dD4sPC90dD4uLi48bGFiZWwgaWQ9ImJ1aWxkLXNwZWVjaC1wYXJhbWV0ZXJzIj48L3RhZz4KKyAgICBTcOljaWZpZSBsZXMgcGFyYW3odHJlcyBwYXIgZOlmYXV0IHBvdXIgbGVzIHBpbG90ZXMgZGUgc3ludGjoc2UKKyAgICB2b2NhbGUuIFNpIHVuIG3qbWUgcGFyYW3odHJlIGVzdCBzcOljaWZp6SBwbHVzIGQndW5lIGZvaXMsIHNhCisgICAgdmFsZXVyIGxhIHBsdXMg4CBkcm9pdGUgZXN0IHByaXNlIGVuIGNvbXB0ZS4gU2kgbGUgbm9tIGQndW4KKyAgICBwYXJhbeh0cmUgZXN0IHNw6WNpZmlxdWUg4CB1biBwaWxvdGUsICh2b2lyIGxhIHNlY3Rpb24KKyAgICA8cmVmIGlkPSJkcml2ZXJzIiBuYW1lPSJDb2RlcyBkJ2lkZW50aWZpY2F0aW9uIGRlIHBpbG90ZXMiPikgY2V0dGUgdmFsZXVyIG5lIHMnYXBwbGlxdWUKKyAgICBxdSfgIGNlIHBpbG90ZTsgc2lub24sIGlsIHMnYXBwbGlxdWUg4CB0b3VzIGxlcworICAgIHBpbG90ZXMuIFBvdXIgdW5lIGRlc2NyaXB0aW9uIGRlcyBwYXJhbeh0cmVzIGFjY2VwdOlzIHBhciB1bgorICAgIHBpbG90ZSBzcOljaWZpcXVlLCByZXBvcnRlei12b3VzIOAgbGEgZG9jdW1lbnRhdGlvbiBkZSBjZQorICAgIHBpbG90ZS4gVm9pciBsYSBsaWduZSA8cmVmIGlkPSJjb25maWd1cmUtc3BlZWNoLXBhcmFtZXRlcnMiIG5hbWU9InNwZWVjaC1wYXJhbWV0ZXJzIj4gZHUgZmljaGllciBkZQorICAgIGNvbmZpZ3VyYXRpb24gZXQgbCdvcHRpb24gPHJlZiBpZD0ib3B0aW9ucy1zcGVlY2gtcGFyYW1ldGVycyIgbmFtZT0iLVMiPiBkZSBsYSBsaWduZSBkZSBjb21tYW5kZSBwb3VyIGxhCisgICAgc+lsZWN0aW9uIOAgbCdleOljdXRpb24uCisgIDx0YWc+PHR0Pi0td2l0aC1mbGl0ZT08L3R0PjxlbT5kaXJlY3Rvcnk8L2VtPjxsYWJlbCBpZD0iYnVpbGQtZmxpdGUiPjwvdGFnPgorICAgIFNw6WNpZmllIGwnZW1wbGFjZW1lbnQgZCdpbnN0YWxsYXRpb24gZGUgRmVzdGl2YWxMaXRlCisgICAgZXQgY29tcGlsZSBsZSBwaWxvdGUgcG91ciBjZXR0ZSBzeW50aOhzZSB2b2NhbGUKKyAgICAodm9pciA8cmVmIGlkPSJyZXN0cmljdGlvbnMtZmxpdGUiIG5hbWU9IlJlc3RyaWN0aW9ucyBkYW5zIGxhIGNvbXBpbGF0aW9uIj4gTCd1biBkZXMKKyAgICBtb3RzIHN1aXZhbnRzIHBldXQgYXVzc2kg6nRyZSB1dGlsaXPpIGNvbW1lIG9w6XJhdGV1ciBkZSBjZXR0ZQorICAgIG9wdGlvbjoKKyAgICA8ZGVzY3JpcD4KKyAgICAgIDx0YWc+bm88L3RhZz4KKyAgICAgICAgTmUgY29tcGlsZSBwYXMgbGUgcGlsb3RlLgorICAgICAgICBDZWxhIHJldmllbnQg4CBzcOljaWZpZXIgPHR0Pi0td2l0aG91dC1mbGl0ZTwvdHQ+LgorICAgICAgPHRhZz55ZXM8L3RhZz4KKyAgICAgICAgQ29tcGlsZSBsZSBwaWxvdGUgc2kgbGUgcGFxdWV0IGV4aXN0ZSBkYW5zIDx0dD4vdXNyPC90dD4sCisgICAgICAgIDx0dD4vdXNyL2xvY2FsPC90dD4sIDx0dD4vdXNyL2xvY2FsL0Zlc3RpdmFsTGl0ZTwvdHQ+LAorICAgICAgICA8dHQ+L3Vzci9sb2NhbC9mbGl0ZTwvdHQ+LCA8dHQ+L29wdC9GZXN0aXZhbExpdGU8L3R0PiBvdQorICAgICAgICA8dHQ+L29wdC9mbGl0ZTwvdHQ+LiBDZWxhIHJldmllbnQg4AorICAgICAgICBzcOljaWZpZXI8dHQ+LS13aXRoLWZsaXRlPC90dD4uCisgICAgPC9kZXNjcmlwPgorCisgIDx0YWc+PHR0Pi0td2l0aC1mbGl0ZS1sYW5ndWFnZT08L3R0PjxlbT5sYW5ndWFnZTwvZW0+PGxhYmVsIGlkPSJidWlsZC1mbGl0ZS1sYW5ndWFnZSI+PC90YWc+CisgICAgU3DpY2lmaWUgbGEgbGFuZ3VlIHF1J3V0aWxpc2VyYSBsZSBtb3RldXIgZGUgRmVzdGl2YWxMaXRlLgorICAgIExhIGxhbmd1ZSB1dGlsaXPpZSBwYXIgZOlmYXV0IGVzdCA8dHQ+bCdhbmdsYWlzPC90dD4uCisgIDx0YWc+PHR0Pi0td2l0aC1mbGl0ZS1sZXhpY29uPTwvdHQ+PGVtPmxleGljb248L2VtPjxsYWJlbCBpZD0iYnVpbGQtZmxpdGUtbGV4aWNvbiI+PC90YWc+CisgICAgU3DpY2lmaWUgbGUgZGljdGlvbm5haXJlIHF1ZSBsZSBtb3RldXIgZGUgRmVzdGl2YWxMaXRlCisgICAgdXRpbGlzZXJhLiBMZSBkaWN0aW9ubmFpcmUgcGFyIGTpZmF1dCBlc3QgPHR0PmNtdWxleDwvdHQ+LgorICA8dGFnPjx0dD4tLXdpdGgtZmxpdGUtdm9pY2U9PC90dD48ZW0+dm9pY2U8L2VtPjxsYWJlbCBpZD0iYnVpbGQtZmxpdGUtdm9pY2UiPjwvdGFnPgorICAgIFNw6WNpZmllIGxhIHBlcnNvbm5lIHF1ZSBsZSBtb3RldXIgZGUgRmVzdGl2YWxMaXRlIGRvaXQgdXRpbGlzZXIuCisgICAgTGEgdm9peCBwYXIgZOlmYXV0IGVzdCA8dHQ+Y211X3VzX2thbDE2PC90dD4uCisgIDx0YWc+PHR0Pi0td2l0aC1taWtyb3B1aGU9PC90dD48ZW0+ZGlyZWN0b3J5PC9lbT48bGFiZWwgaWQ9ImJ1aWxkLW1pa3JvcHVoZSI+PC90YWc+CisgICAgU3DpY2lmaWUgbCdlbXBsYWNlbWVudCBkJ2luc3RhbGxhdGlvbiBkdSBwYXF1ZXQKKyAgICBNaWNrcm9wdWhlIGV0IGNvbXBpbGUgbGUgcGlsb3RlIHBvdXIgbGEgc3ludGjoc2UKKyAgICB2b2NhbGUgTWlrcm9wdWhlICh2b2lyIDxyZWYgaWQ9InJlc3RyaWN0aW9ucy1taWtyb3B1aGUiIG5hbWU9IlJlc3RyaWN0aW9ucyBkYW5zIGxhIGNvbXBpbGF0aW9uIj4pLiBMJ3VuCisgICAgZGVzIG1vdHMgc3VpdmFudHMgcGV1dCBhdXNzaSDqdHJlIHV0aWxpc+kgY29tbWUgb3DpcmF0ZXVyIGRlIGNldHRlCisgICAgb3B0aW9uOgorICAgIDxkZXNjcmlwPgorICAgICAgPHRhZz5ubzwvdGFnPgorICAgICAgICBOZSBjb21waWxlIHBhcyBsZSBwaWxvdGUuCisgICAgICAgIENlbGEgcmV2aWVudCDgIHNw6WNpZmllciA8dHQ+LS13aXRob3V0LW1pa3JvcHVoZTwvdHQ+LgorICAgICAgPHRhZz55ZXM8L3RhZz4KKyAgICAgICAgQ29tcGlsZSBsZSBwaWxvdGUgc2kgbGUgcGFxdWV0IGV4aXN0ZSBkYW5zIDx0dD4vdXNyPC90dD4sIAorICAgICAgICA8dHQ+L3Vzci9sb2NhbDwvdHQ+LCA8dHQ+L3Vzci9sb2NhbDwvdHQ+LCA8dHQ+L3Vzci9sb2NhbC9NaWtyb3B1aGU8L3R0PiwKKyAgICAgICAgPHR0Pi91c3IvbG9jYWwvbWlrcm9wdWhlPC90dD4sIDx0dD4vb3B0L01pa3JvcHVoZTwvdHQ+IAorICAgICAgICBvdSA8dHQ+L29wdC9taWtyb3B1aGU8L3R0Pi4gQ2VsYSByZXZpZW50IOAgc3DpY2lmaWVyIAorICAgICAgICA8dHQ+LS13aXRoLW1pa3JvcHVoZTwvdHQ+LgorICAgIDwvZGVzY3JpcD4KKyAgPHRhZz48dHQ+LS13aXRoLXNwZWVjaGQ9PC90dD48ZW0+cmVwZXJ0b2lyZTwvZW0+PGxhYmVsIGlkPSJidWlsZC10aGV0YSI+PC90YWc+CisgICAgU3DpY2lmaWUgbCdlbmRyb2l0IG/5IGVzdCBpbnN0YWxs6SBsZSBwYXF1ZXQgZGUgbGEgc3ludGjoc2Ugdm9jYWxlIHNwZWVjaC1kaXNwYXRjaGVyCisgICAgKG11bHRpcGxleGV1ciBkZSBzeW50aOhzZSB2b2NhbGUpIGV0IGNvbXBpbGUgbGUgcGlsb3RlIHBvdXIgc3BlZWNoLWRpc3BhdGNoZXIuCisgICAgTCd1biBkZXMgbW90cyBzdWl2YW50cyBwZXV0IGF1c3NpIOp0cmUgdXRpbGlz6SBjb21tZSBvcOlyYXRldXIgZGUgY2V0dGUgCisgICAgb3B0aW9uOgorICAgIDxkZXNjcmlwPgorICAgICAgPHRhZz5ubzwvdGFnPgorICAgICAgICBOZSBjb21waWxlIHBhcyBsZSBwaWxvdGUuCisgICAgICAgIENlbGEgcmV2aWVudCDgIHNw6WNpZmllciA8dHQ+LS13aXRob3V0LXNwZWVjaGQ8L3R0Pi4KKyAgICAgIDx0YWc+eWVzPC90YWc+CisgICAgICAgIENvbXBpbGUgbGUgcGlsb3RlIHNpIGxlIHBhcXVldCBleGlzdGUgZGFucyA8dHQ+L3VzcjwvdHQ+LCA8dHQ+L3Vzci9sb2NhbDwvdHQ+LAorICAgICAgICA8dHQ+L3Vzci9sb2NhbC9zcGVlY2gtZGlzcGF0Y2hlcjwvdHQ+LCA8dHQ+L3Vzci9sb2NhbC9zcGVlY2hkPC90dD4sCisgICAgICAgIDx0dD4vb3B0L3NwZWVjaC1kaXNwYXRjaGVyPC90dD4sIG91IDx0dD4vb3B0L3NwZWVjaGQ8L3R0Pi4gQ2VsYSByZXZpZW50CisgICAgICAgIOAgc3DpY2lmaWVyIDx0dD4tLXdpdGgtc3BlZWNoZDwvdHQ+LgorICAgIDwvZGVzY3JpcD4gICAgCisgIDx0YWc+PHR0Pi0td2l0aC1zd2lmdD08L3R0PjxlbT5yZXBlcnRvaXJlPC9lbT48bGFiZWwgaWQ9ImJ1aWxkLXRoZXRhIj48L3RhZz4KKyAgICBTcOljaWZpZSBsJ2VuZHJvaXQgb/kgZXN0IGluc3RhbGzpIGxlIHBhcXVldCBkZSBsYSBzeW50aOhzZSB2b2NhbGUsIGV0CisgICAgY29tcGlsZSBsZSBwaWxvdGUgcG91ciBsYSBzeW50aOhzZSB2b2NhbGUgU3dpZnQuCisgICAgTCd1biBkZXMgbW90cyBzdWl2YW50cyBwZXV0IGF1c3NpIOp0cmUgdXRpbGlz6SBjb21tZSBvcOlyYXRldXIgZGUgY2V0dGUgCisgICAgb3B0aW9uOgorICAgIDxkZXNjcmlwPgorICAgICAgPHRhZz5ubzwvdGFnPgorICAgICAgICBOZSBjb21waWxlIHBhcyBsZSBwaWxvdGUuCisgICAgICAgIENlbGEgcmV2aWVudCDgIHNw6WNpZmllciA8dHQ+LS13aXRob3V0LXN3aWZ0PC90dD4uCisgICAgICA8dGFnPnllczwvdGFnPgorICAgICAgICBDb21waWxlIGxlIHBpbG90ZSBzaSBsZSBwYXF1ZXQgZXhpc3RlIGRhbnMgPHR0Pi91c3I8L3R0PiwgPHR0Pi91c3IvbG9jYWw8L3R0PiwKKyAgICAgICAgPHR0Pi91c3IvbG9jYWwvU3dpZnQ8L3R0PiwgPHR0Pi91c3IvbG9jYWwvc3dpZnQ8L3R0PiwKKyAgICAgICAgPHR0Pi9vcHQvU3dpZnQ8L3R0Piwgb3UgPHR0Pi9vcHQvc3dpZnQ8L3R0Pi4gQ2VsYSByZXZpZW50CisgICAgICAgIOAgc3DpY2lmaWVyIDx0dD4tLXdpdGgtc3dpZnQ8L3R0Pi4KKyAgICA8L2Rlc2NyaXA+ICAgIAorICA8dGFnPjx0dD4tLXdpdGgtdGhldGE9PC90dD48ZW0+cmVwZXJ0b2lyZTwvZW0+PGxhYmVsIGlkPSJidWlsZC10aGV0YSI+PC90YWc+CisgICAgU3DpY2lmaWUgbCdlbXBsYWNlbWVudCBkJ2luc3RhbGxhdGlvbiBkdSBwYXF1ZXQgVGhldGEKKyAgICBldCBjb21waWxlIGxlIHBpbG90ZSBwb3VyIGxhIHN5bnRo6HNlIHZvY2FsZSBUaGV0YQorICAgICh2b2lyIDxyZWYgaWQ9InJlc3RyaWN0aW9ucy10aGV0YSIgbmFtZT0iUmVzdHJpY3Rpb25zIGRhbnMgbGEgY29tcGlsYXRpb24iPikuIEwndW4gZGVzIG1vdHMKKyAgICBzdWl2YW50cyBwZXV0IGF1c3NpIOp0cmUgdXRpbGlz6SBjb21tZSBvcOlyYXRldXIgZGUgY2V0dGUgb3B0aW9uOgorICAgIDxkZXNjcmlwPgorICAgICAgPHRhZz5ubzwvdGFnPgorICAgICAgICBOZSBjb21waWxlIHBhcyBsZSBwaWxvdGUuCisgICAgICAgIENlbGEgcmV2aWVudCDgIHNw6WNpZmllciA8dHQ+LS13aXRob3V0LXRoZXRhPC90dD4uCisgICAgICA8dGFnPnllczwvdGFnPgorICAgICAgICBDb21waWxlIGxlIHBpbG90ZSBzaSBsZSBwYXF1ZXQgZXhpc3RlIGRhbnMgPHR0Pi91c3I8L3R0PiwgPHR0Pi91c3IvbG9jYWw8L3R0PiwKKyAgICAgICAgPHR0Pi91c3IvbG9jYWwvVGhldGE8L3R0PiwgPHR0Pi91c3IvbG9jYWwvdGhldGE8L3R0PiwKKyAgICAgICAgPHR0Pi9vcHQvVGhldGE8L3R0Piwgb3UgPHR0Pi9vcHQvdGhldGE8L3R0Pi4KKyAgICAgICAgQ2VsYSByZXZpZW50IOAgc3DpY2lmaWVyIDx0dD4tLXdpdGgtdGhldGE8L3R0Pi4KKyAgICA8L2Rlc2NyaXA+CisgIDx0YWc+PHR0Pi0td2l0aC1zY3JlZW4tZHJpdmVyPTwvdHQ+PGVtPnBpbG90ZTwvZW0+PGxhYmVsIGlkPSJidWlsZC1zY3JlZW4tZHJpdmVyIj48L3RhZz4KKyAgICBTcOljaWZpZSBsZXMgcGlsb3RlcyBwb3VyIGwn6WNyYW4gcXVpIHNlcm9udCBsaelzIOAgbCdleOljdXRhYmxlIEJSTFRUWS4gCisgICAgQ2V1eCBxdWkgbmUgc29udCBwYXMgbWVudGlvbm7pcyBkYW5zIGNldHRlIG9wdGlvbiBzb250IGNvbXBpbOlzIGVuIHRhbnQKKyAgICBxdSdvYmpldHMgZHluYW1pcXVlcyBldCBwZXV2ZW50IOp0cmUgY2hvaXNpcyBsb3JzIGRlCisgICAgbCdleOljdXRpb24uIENoYXF1ZSBwaWxvdGUgZG9pdCDqdHJlIGlkZW50aWZp6SBzb2l0IHBhciBsZXMgZGV1eCBsZXR0cmVzIGRlCisgICAgc29uIGNvZGUgZCdpZGVudGlmaWNhdGlvbiAodm9pciBsYSBzZWN0aW9uIEVjcmFucyBzdXBwb3J06XMpIHNvaXQgcGFyCisgICAgc29uIG5vbSAgKGNvbXBsZXQgb3UgYWJy6WfpKS4gVm91cyBkZXZleiBz6XBhcmVyIGxlcyBpZGVudGlmaWFudHMgZGVzCisgICAgcGlsb3RlcyBsZXMgdW5zIGRlcyBhdXRyZXMgcGFyIHVuZSB2aXJndWxlLiBTaSBsJ2lkZW50aWZpYW50IGQndW4gcGlsb3RlCisgICAgZXN0IHBy6WPpZOkgZHUgc2lnbmUgbW9pbnMgKDx0dD4tPC90dD4pLCBpbCBlc3QgZXhjbHUgZGUgbGEgY29tcGlsYXRpb24uCisgICAgVW4gZGVzIG1vdHMgc3VpdmFudHMgcGV1dCDqdHJlIGF1c3NpIHV0aWxpc+kgY29tbWUKKyAgICBvcOlyYXRldXIgcG91ciBsJ29wdGlvbjoKKworKDx0dD4tPC90dD4pLAorICAgIDxkZXNjcmlwPgorICAgICAgPHRhZz5hbGw8L3RhZz4KKyAgICAgICAgTGllIHRvdXMgbGVzIHBpbG90ZXMg4CBsJ2V46WN1dGFibGUuIE5lIGxlcyBjb21waWxlIHBhcyBlbgorICAgICAgICB0YW50IHF1J29iamV0cyBkeW5hbWlxdWVzLiBWb3VzIHBvdXZleiBzcOljaWZpZXIgY2UgbW90IGNvbW1lCisgICAgICAgIOls6W1lbnQgdGVybWluYW50IHVuZSBsaXN0ZSBkZSBwaWxvdGVzLiBDJ2VzdCBsYSBmYedvbiBkZQorICAgICAgICBzcOljaWZpZXIgdW4gcGlsb3RlIHBhciBk6WZhdXQgcXVhbmQgdG91cyBsZXMgcGlsb3RlcyBzZXJvbnQKKyAgICAgICAgY29tcGls6XMuCisgICAgICA8dGFnPi1hbGw8L3RhZz4KKyAgICAgICAgTmUgY29tcGlsZSBxdWUgbGVzIHBpbG90ZXMgcXVpIG9udCDpdOkgZXhwbGljaXRlbWVudCBpbmNsdXMKKyAgICAgICAgcGFyIGNldHRlIG9wdGlvbi4KKyAgICAgIDx0YWc+bm88L3RhZz4KKyAgICAgICAgTmUgY29tcGlsZSBhdWN1biBwaWxvdGUuIENlbGEgcmV2aWVudCDgIHNw6WNpZmllcgorICAgICAgICA8dHQ+LS13aXRob3V0LXNjcmVlbi1kcml2ZXI8L3R0Pi4KKyAgICAgIDx0YWc+eWVzPC90YWc+CisgICAgICAgIENvbXBpbGUgdG91cyBsZXMgcGlsb3RlcyBlbiB0YW50IHF1J29iamV0cyBkeW5hbWlxdWVzLiBOZSBsZXMKKyAgICAgICAgbGllIHBhcyDgIGwnZXjpY3V0YWJsZS4gQ2VsYSByZXZpZW50IOAgc3DpY2lmaWVyCisgICAgICAgIDx0dD4tLXdpdGgtYnJhaWxsZS1kcml2ZXI8L3R0Pi4KKyAgICA8L2Rlc2NyaXA+CisKKyAgICBMZSBwcmVtaWVyIHBpbG90ZSBub24gZXhjbHUgZGV2aWVudCBjZWx1aSBwYXIgZOlmYXV0LiAKKyAgICBTaSBjZXR0ZSBvcHRpb24gbidlc3QgcGFzIHNw6WNpZmnpZSwgdW5lIHPpbGVjdGlvbiBhZGFwdOllIGF1CisgICAgc3lzdOhtZSBkJ2V4cGxvaXRhdGlvbiBlc3QgZmFpdGUuIFNpIHVuIHBpbG90ZSBzcOljaWZpcXVlIGF1CisgICAgc3lzdOhtZSBkJ2V4cGxvaXRhdGlvbiBlbiBjb3VycyBlc3QgZmlhYmxlLCBpbCBlc3QgdXRpbGlz6S4gU2lub24sCisgICAgPHR0PnNjPC90dD4gZXN0IHV0aWxpc+kuCisgICAgCisgICAgVm9pciBsYSBsaWduZSA8cmVmIGlkPSJjb25maWd1cmUtc2NyZWVuLWRyaXZlciIgbmFtZT0ic2NyZWVuLWRyaXZlciI+IGR1IGZpY2hpZXIgZGUgY29uZmlndXJhdGlvbgorICAgIGV0IGwnb3B0aW9uIDxyZWYgaWQ9Im9wdGlvbnMtc2NyZWVuLWRyaXZlciIgbmFtZT0iLXgiPiBkZSBsYSBsaWduZSBkZSBjb21tYW5kZSBwb3VyIHVuZSBz6WxlY3Rpb24g4CBsJ2V46WN1dGlvbi4KKyAgPHRhZz48dHQ+LS13aXRoLXNjcmVlbi1wYXJhbWV0ZXJzPTwvdHQ+PGVtPm5hbWU8L2VtPjx0dD49PC90dD48ZW0+dmFsZXVyPC9lbT48dHQ+LDwvdHQ+Li4uPGxhYmVsIGlkPSJidWlsZC1zY3JlZW4tcGFyYW1ldGVycyI+PC90YWc+CisgICAgU3DpY2lmaWUgbGVzIHBhcmFt6HRyZXMgcGFyIGTpZmF1dCBwb3VyIGxlIHBpbG90ZSBkJ+ljcmFuLiBTaSBsZQorICAgIG3qbWUgcGFyYW3odHJlIGVzdCBzcOljaWZp6SBwbHVzIGQndW5lIGZvaXMsIGMnZXN0IHNhIHZhbGV1ciBsYQorICAgIHBsdXMg4CBkcm9pdGUgcXVpIGVzdCByZXRlbnVlLiBTaSBsZSBub20gZCd1biBwYXJhbeh0cmUgZXN0IGFmZmVjdOkg4CB1bgorICAgIHBpbG90ZSAodm9pciBzZWN0aW9uIFBpbG90ZXMgZCfpY3JhbiBzdXBwb3J06XMpIGFsb3JzIGNlIHBhcmFt6HRyZSBuZQorICAgIHMnYXBwbGlxdWUgcXUnYXUgcGlsb3RlOyBzaW5vbiBpbCBzJ2FwcGxpcXVlIOAgdG91cyBsZXMgcGlsb3Rlcy4KKyAgICBQb3VyIHVuZSBkZXNjcmlwdGlvbiBkZXMgcGFyYW3odHJlcworICAgIGFjY2VwdOlzIHBhciB1biBwaWxvdGUgc3DpY2lmaXF1ZSwgcmVwb3J0ZXotdm91cyDgIGxhCisgICAgZG9jdW1lbnRhdGlvbiBkZSBjZWx1aS1jaS4gVm9pciBsYSBsaWduZSA8cmVmIGlkPSJjb25maWd1cmUtc2NyZWVuLXBhcmFtZXRlcnMiIG5hbWU9InNjcmVlbi1wYXJhbWV0ZXJzIj4gZHUKKyAgICBmaWNoaWVyIGRlIGNvbmZpZ3VyYXRpb24gZXQgbCdvcHRpb24gPHJlZiBpZD0ib3B0aW9ucy1zY3JlZW4tcGFyYW1ldGVycyIgbmFtZT0iLVgiPiBlbiBsaWduZSBkZSBjb21tYW5kZQorICAgIHBvdXIgbGEgc+lsZWN0aW9uIOAgbCdleOljdXRpb24uCisKKyAgPHRhZz48dHQvLS13aXRoLXVzYi1wYXF1ZXQ9LzxlbS9wYXF1ZXQvPHR0LywvLi4uPGxhYmVsIGlkPSJidWlsZC11c2ItcGFxdWV0Ij48L3RhZz4KKyAgICBTcOljaWZpZSBsZSBwYXF1ZXQgcXVpIHNlcmEgdXRpbGlz6SBwb3VyIGwnRS9TIFVTQi4KKyAgICBWb3VzIGRldmV6IHNw6WFyZXIgbGVzIG5vbXMgZGUgcGFxdWV0cyBsZXMgdW5zIGRlcworICAgIGF1dHJlcyBwYXIgdW5lIHZpcmd1bGUsIGlscyBzb250IHRyYWl06XMgZGUgbGEgZ2F1Y2hlIHZlcnMgbGEgZHJvaXRlLgorICAgIExlIHByZW1pZXIgaW5zdGFsbOkgc3VyIGxlIHN5c3TobWUgZXN0IHPpbGVjdGlvbm7pLgorICAgIExlcyBwYXF1ZXRzIHN1aXZhbnRzIHNvbnQgc3VwcG9ydOlzOgorICAgIDxlbnVtPgorICAgICAgPGl0ZW0+bGlidXNiCisgICAgICA8aXRlbT5saWJ1c2ItMS4wCisgICAgPC9lbnVtPgorICAgIFVuIGRlcyBtb3RzIHN1aXZhbnRzIHBldXQg6nRyZSBhdXNzaSB1dGlsaXPpIGNvbW1lIG9w6XJhbmRlIHBvdXIgY2V0dGUKKyAgICBvcHRpb246CisgICAgPGRlc2NyaXA+CisgICAgICA8dGFnL25vLworICAgICAgICBOZSBzdXBwb3J0ZSBwYXMgbCdFL1MgVVNCLgorICAgICAgICBDZWxhIHJldmllbnQg4CBzcOljaWZpZXIgPHR0Ly0td2l0aG91dC11c2ItcGFxdWV0Ly4KKyAgICAgIDx0YWcveWVzLworICAgICAgICBVdGlsaXNlciBsZSBzdXBwb3J0IG5hdGlmIHBvdXIgbCdFL1MgVVNCLgorICAgICAgICBTaSB1biBzdXBwb3J0IG5hdGlmIG4nZXN0IHBhcyBkaXNwb25pYmxlIHBvdXIgbGEKKyAgICAgICAgcGxhdGVmb3JtZSBhY3R1ZWxsZSwgdXRpbGlzZXIgYWxvcnMgbGUgcHJlbWllciBwYXF1ZXQgc3VwcG9ydOkKKyAgICAgICAgZGlzcG9uaWJsZSAoY29tbWUgcG91ciBsJ29yZHJlIHNw6WNpZmnpIGNpLWRlc3N1cykuCisgICAgICAgIENlbGEgcmV2aWVudCDgIHNw6WNpZmllciA8dHQvLS13aXRoLXVzYi1wYXF1ZXQvLgorICAgIDwvZGVzY3JpcD4KKyAgPHRhZz48dHQvLS13aXRoLWJsdWV0b290aC1wYXF1ZXQ9LzxlbS9wYXF1ZXQvPHR0LywvLi4uPGxhYmVsIGlkPSJidWlsZC1ibHVldG9vdGgtcGFxdWV0Ij48L3RhZz4KKyAgICBTcOljaWZpZSBsZSBwYXF1ZXQgcXVpIHNlcmEgdXRpbGlz6SBwb3VyIGwnRS9TIEJsdWV0b290aC4KKyAgICBWb3VzIGRldmV6IHNw6WFyZXIgbGVzIG5vbXMgZGUgcGFxdWV0cyBsZXMgdW5zIGRlcworICAgIGF1dHJlcyBwYXIgdW5lIHZpcmd1bGUsIGlscyBzb250IHRyYWl06XMgZGUgbGEgZ2F1Y2hlIHZlcnMgbGEgZHJvaXRlLgorICAgIExlIHByZW1pZXIgaW5zdGFsbOkgc3VyIGxlIHN5c3TobWUgZXN0IHPpbGVjdGlvbm7pLgorICAgIExlcyBwYXF1ZXRzIHN1aXZhbnRzIHNvbnQgc3VwcG9ydOlzOgorICAgIDxlbnVtPgorICAgICAgPGl0ZW0+KGF1Y3VuIHBhcXVldCBuJ2VzdCBhY3R1ZWxsZW1lbnQgc3VwcG9ydOkpCisgICAgPC9lbnVtPgorICAgIFVuIGRlcyBtb3RzIHN1aXZhbnRzIHBldXQg6nRyZSBhdXNzaSB1dGlsaXPpIGNvbW1lIG9w6XJhbmRlIHBvdXIgY2V0dGUKKyAgICBvcHRpb246CisgICAgPGRlc2NyaXA+CisgICAgICA8dGFnL25vLworICAgICAgICBOZSBzdXBwb3J0ZSBwYXMgbCdFL1MgQmx1ZXRvb3RoLgorICAgICAgICBDZWxhIHJldmllbnQg4CBzcOljaWZpZXIgPHR0Ly0td2l0aG91dC1ibHVldG9vdGgtcGFxdWV0Ly4KKyAgICAgIDx0YWcveWVzLworICAgICAgICBVdGlsaXNlciBsZSBzdXBwb3J0IG5hdGlmIHBvdXIgbCdFL1MgQmx1ZXRvb3RoLgorICAgICAgICBTaSB1biBzdXBwb3J0IG5hdGlmIG4nZXN0IHBhcyBkaXNwb25pYmxlIHBvdXIgbGEKKyAgICAgICAgcGxhdGVmb3JtZSBhY3R1ZWxsZSwgdXRpbGlzZXIgYWxvcnMgbGUgcHJlbWllciBwYXF1ZXQgc3VwcG9ydOkKKyAgICAgICAgZGlzcG9uaWJsZSAoY29tbWUgcG91ciBsJ29yZHJlIHNw6WNpZmnpIGNpLWRlc3N1cykuCisgICAgICAgIENlbGEgcmV2aWVudCDgIHNw6WNpZmllciA8dHQvLS13aXRoLWJsdWV0b290aC1wYXF1ZXQvLgorICAgIDwvZGVzY3JpcD4KKworPC9kZXNjcmlwPgorCis8c2VjdDM+U3DpY2lmaWNhdGlvbiBkdSBy6XBlcnRvaXJlPGxhYmVsIGlkPSJoaWVyYXJjaHkiPjxwPgorPGRlc2NyaXA+CisgIDx0YWc+PHR0Pi0td2l0aC1leGVjdXRlLXJvb3Q9PC90dD48ZW0+cmVwZXJ0b2lyZTwvZW0+PGxhYmVsIGlkPSJidWlsZC1leGVjdXRlLXJvb3QiPjwvdGFnPgorICAgIFNw6WNpZmllIGxlIHLpcGVydG9pcmUgZGFucyBsZXF1ZWwgbGEgPHJlZiBpZD0iaGllcmFyY2h5IgorICAgIG5hbWU9Imhp6XJhcmNoaWUgZGVzIGZpY2hpZXJzIGluc3RhbGzpcyI+IGF1cmEgc2EgcmFjaW5lIGxvcnMgZGUKKyAgICBsJ2V46WN1dGlvbi4gVm91cyBkZXZyaWV6IGZvdXJuaXIgdW4gY2hlbWluIGFic29sdS4gU2kgY2V0dGUKKyAgICBvcHRpb24gbidlc3QgcGFzIHNw6WNpZmnpZSwgbGUgculwZXJ0b2lyZSByYWNpbmUgZHUgc3lzdOhtZSBlc3QKKyAgICB1dGlsaXPpLiBVdGlsaXNleiBjZXR0ZSBvcHRpb24gc2kgdm91cyBhdmV6IGJlc29pbiBkJ2luc3RhbGxlciBsZXMKKyAgICBleOljdXRhYmxlcyBkZSBCUkxUVFkgZGFucyB1biBlbXBsYWNlbWVudCBub24gc3RhbmRhcmQuIFBhcgorICAgIGV4ZW1wbGUsIHZvdXMgZGV2ZXogdXRpbGlzZXIgY2V0dGUgb3B0aW9uIHNpIHZvdXMgdm91bGV6IGF2b2lyCisgICAgcGx1c2lldXJzIHZlcnNpb25zIGRlIEJSTFRUWSBpbnN0YWxs6WVzIGVuIG3qbWUgdGVtcHMgKHZvaXIgbGEKKyAgICBzZWN0aW9uIDxyZWYgaWQ9Im11bHRpcGxlIiBuYW1lPSJJbnN0YWxsaWF0aW9uIGRlIHBsdXNpZXVycworICAgIHZlcnNpb25zIj4gcG91ciB1biBleGVtcGxlIGRlIGNldHRlIG9w6XJhdGlvbikuCisgIDx0YWc+PHR0Pi0td2l0aC1pbnN0YWxsLXJvb3Q9PC90dD48ZW0+cmVwZXJ0b2lyZTwvZW0+PGxhYmVsIGlkPSJidWlsZC1pbnN0YWxsLXJvb3QiPjwvdGFnPgorICAgIFNw6WNpZmllIGxlIHLpcGVydG9pcmUgb/kgbGEgPHJlZiBpZD0iaGllcmFyY2h5IiBuYW1lPSJoaelyYXJjaGllCisgICAgZGVzIGZpY2hpZXJzIGluc3RhbGzpcyI+IHNlcmEgaW5zdGFsbOllLiBWb3VzIGRldnJpZXoKKyAgICBmb3VybmlyIHVuIGNoZW1pbiBhYnNvbHUuIFNpIGNldHRlIG9wdGlvbiBuJ2VzdCBwYXMgc3DpY2lmaellLCBsYSByYWNpbmUKKyAgICBkJ2V46WN1dGlvbiBkdSBwYXF1ZXQgKHZvaXIgbCdvcHRpb24gZGUgY29tcGlsYXRpb24gPHJlZgorICAgIGlkPSJidWlsZC1leGVjdXRlLXJvb3QiIG5hbWU9Ii0td2l0aC1leGVjdXRlLXJvb3QiPikgZXN0CisgICAgdXRpbGlz6WUuIENlIHLpcGVydG9pcmUgbidlc3QgdXRpbGlz6SBxdWUgcGFyIDxyZWYgaWQ9Im1ha2UtaW5zdGFsbCIKKyAgICBuYW1lPSJtYWtlLWluc3RhbGwiPiBldCA8cmVmIGlkPSJtYWtlLXVuaW5zdGFsbCIgbmFtZT0ibWFrZS11bmluc3RhbGwiPi4KKyAgICBVdGlsaXNleiBjZXR0ZSBvcHRpb24gc2kgdm91cyBhdmV6IGJlc29pbiBkJ2luc3RhbGxlcgorICAgIEJSTFRUWSBkYW5zIHVuIHLpcGVydG9pcmUgZGlmZulyZW50IGRlIGNlbHVpIG/5IGlsIHNlcmEgZXjpY3V06SBlbgorICAgIGTpZmluaXRpdmUuIFBhciBleGVtcGxlLCB2b3VzIGF2ZXogYmVzb2luIGQndXRpbGlzZXIgY2V0dGUKKyAgICBjYXJhY3TpcmlzdGlxdWUgc2kgdm91cyBjb21waWxleiBCUkxUVFkgc3VyIHVuIHN5c3TobWUgcG91cgorICAgIGwndXRpbGlzZXIgc3VyIHVuIGF1dHJlLgorICA8dGFnPjx0dD4tLXByZWZpeD08L3R0PjxlbT5yZXBlcnRvaXJlPC9lbT48bGFiZWwgaWQ9ImJ1aWxkLXBvcnRhYmxlLXJvb3QiPjwvdGFnPgorICAgIEluZGlxdWUgbGUgculwZXJ0b2lyZSBkYW5zIGxlcXVlbCBsYSA8cmVmIGlkPSJoaWVyYXJjaHkiIG5hbWU9Imhp6XJhcmNoaWUgZGVzIGZpY2hpZXJzCisgICAgaW5zdGFsbOlzIj4gY29uc3RpdHVlIGxlIHLpcGVydG9pcmUgcGFyIGTpZmF1dCwgaW5k6XBlbmRhbnQgZGUKKyAgICBsJ2FyY2hpdGVjdHVyZSwgZXQgcXVpIHNlcmEgdXRpbGlz6SBjb21tZSBy6XBlcnRvaXJlCisgICAgcmFjaW5lLiBDZXMgc291cy1y6XBlcnRvaXJlcyBjb21wcmVubmVudCBsZXMgZG9zc2llcnM6CisgICAgPGl0ZW1pemU+CisgICAgICA8aXRlbT5sZSA8cmVmIGlkPSJidWlsZC1kYXRhLWRpcmVjdG9yeSIgbmFtZT0iculwZXJ0b2lyZSB3cml0YWJsZSI+CisgICAgICA8aXRlbT5sZSA8cmVmIGlkPSJidWlsZC1kYXRhLWRpcmVjdG9yeSIgbmFtZT0iculwZXJ0b2lyZSBkYXRhIj4KKyAgICAgIDxpdGVtPmxlIDxyZWYgaWQ9ImJ1aWxkLWNvbmZpZ3VyYXRpb24tZGlyZWN0b3J5IiBuYW1lPSJy6XBlcnRvaXJlIGNvbmZpZ3VyYXRpb24iPgorICAgICAgPGl0ZW0+bGUgPHJlZiBpZD0iYnVpbGQtbWFucGFnZS1kaXJlY3RvcnkiIG5hbWU9InLpcGVydG9pcmUgbWFucGFnZSI+CisgICAgICA8aXRlbT5sZSA8cmVmIGlkPSJidWlsZC1pbmNsdWRlLWRpcmVjdG9yeSIgbmFtZT0iculwZXJ0b2lyZSBpbmNsdWRlIj4KKyAgICA8L2l0ZW1pemU+CisgICAgVm91cyBkZXZyaWV6IGZvdXJuaXIgdW4gY2hlbWluIGFic29sdS4gU2kgdm91cyBuZSBzcOljaWZpZXogcGFzCisgICAgY2V0dGUgb3B0aW9uLCBjJ2VzdCBsZSBy6XBlcnRvaXJlIHJhY2luZSBkdSBzeXN06G1lIHF1aSBlc3QKKyAgICB1dGlsaXPpLiBDZSBy6XBlcnRvaXJlIGVzdCBsaekg4CBjZWx1aSBwculjaXPpIHBhciBsJ29wdGlvbiBkZQorICAgIGNvbXBpbGF0aW9uIDxyZWYgaWQ9ImJ1aWxkLWV4ZWN1dGUtcm9vdCIgbmFtZT0iLS13aXRoLWV4ZWN1dGUtcm9vdCI+LgorICA8dGFnPjx0dD4tLXdpdGgtd3JpdGFibGUtZGlyZWN0b3J5PTwvdHQ+PGVtPnLpcGVydG9pcmU8L2VtPjxsYWJlbCBpZD0iYnVpbGQtYXJjaGl0ZWN0dXJlLXJvb3QiPjwvdGFnPgorICAgIFNw6WNpZmllIGxlIHLpcGVydG9pcmUgZGFucyBsZXF1ZWwgbGEgPHJlZiBpZD0iaGllcmFyY2h5IiBuYW1lPSJoaelyYXJjaGllIGRlcyBmaWNoaWVycyBpbnN0YWxs6XMiPgorICAgIHBvdXJyYSDqdHJlIOljcml0ZS4gVm91cyBkZXZyaWV6IGZvdXJuaXIgdW4gY2hlbWluIGFic29sdS4gVW4gZGVzIG1vdHMKKyAgICBzdWl2YW50cyBwZXV0IOp0cmUgdXRpbGlz6SBjb21tZSBvcOlyYXRldXIgcG91ciBjZXR0ZSBvcHRpb24uCisKKyg8dHQ+LTwvdHQ+KSwKKyAgICA8ZGVzY3JpcD4KKyAgICAgIDx0YWc+bm88L3RhZz4KKyAgICAgICAgTmUgZOlmaW5pdCBwYXMgZGUgculwZXJ0b2lyZSBpbnNjcmlwdGlibGUgKHdyaXRhYmxlKS4gQ2VsYSByZXZpZW50IOAKKyAgICAgICAgc3DpY2lmaWVyCisgICAgICAgIDx0dD4tLXdpdGhvdXQtd3JpdGFibGUtZGlyZWN0b3J5PC90dD4uCisgICAgICA8dGFnPnllczwvdGFnPgorICAgICAgICBVdGlsaXNlIGwnZW5kcm9pdCBwYXIgZOlmYXV0LiBDZWxhIHJldmllbnQg4CBzcOljaWZpZXIKKyAgICAgICAgPHR0Pi0td2l0aC13cml0YWJsZS1kaXJlY3Rvcnk8L3R0Pi4KKyAgICA8L2Rlc2NyaXA+CisgICAgU2kgdm91cyBuZSBzcOljaWZpZXogcGFzIGNldHRlIG9wdGlvbiwgbGUgc291cy1y6XBlcnRvaXJlIGF1dG9yaXPpIGVuIHJ3CisgICAgKGxlY3R1cmUv6WNyaXR1cmUpIGRhbnMgbGUgZG9zc2llciBzcOljaWZp6SBwYXIgbCdvcHRpb24gLS13aXRoLWxpYnJhcnktZGlyZWN0b3J5CisgICAgZXN0IHN1cHBvc+kuIExlIHLpcGVydG9pcmUgZXN0IGNy6ekgcydpbCBuJ2V4aXN0ZSBwYXMuCisgICAgCisgIDx0YWc+PHR0Pi0tZXhlYy1wcmVmaXg9PC90dD48ZW0+culwZXJ0b2lyZTwvZW0+PGxhYmVsIGlkPSJidWlsZC1hcmNoaXRlY3R1cmUtcm9vdCI+PC90YWc+CisgICAgU3DpY2lmaWUgbGUgculwZXJ0b2lyZSBkZSBsYSA8cmVmIGlkPSJoaWVyYXJjaHkiIG5hbWU9Imhp6XJhcmNoaWUgZGVzIGZpY2hpZXJzIGluc3RhbGzpcyI+CisgICAgb/kgbGVzIHLpcGVydG9pcmVzIHBhciBk6WZhdXQgcG91ciBsZXMKKyAgICBmaWNoaWVycyBk6XBlbmRhbnQgZGUgbCdhcmNoaXRlY3R1cmUgZG9pdmVudCDqdHJlIHBsYWPpcy4KKyAgICBDZXMgculwZXJ0b2lyZXMgaW5jbHVlbnQ6CisgICAgPGl0ZW1pemU+CisgICAgICA8aXRlbT5sZSA8cmVmIGlkPSJidWlsZC1wcm9ncmFtLWRpcmVjdG9yeSIgbmFtZT0iculwZXJ0b2lyZSBwcm9ncmFtbWUiPgorICAgICAgPGl0ZW0+bGUgPHJlZiBpZD0iYnVpbGQtbGlicmFyeS1kaXJlY3RvcnkiIG5hbWU9InLpcGVydG9pcmUgZGVzIGJpYmxpb3Ro6HF1ZXMgY29tcGls6WVzIj4KKyAgICAgIDxpdGVtPmxlIDxyZWYgaWQ9ImJ1aWxkLWFwaS1kaXJlY3RvcnkiIG5hbWU9InLpcGVydG9pcmUgZCdBUEkgY29tcGls6SI+CisgICAgPC9pdGVtaXplPgorICAgIFZvdXMgZGV2cmlleiBmb3VybmlyIHVuIGNoZW1pbiBhYnNvbHUuIFNpIHZvdXMgbmUgc3DpY2lmaWV6IHBhcworICAgIGNldHRlIG9wdGlvbiwgYydlc3QgbGUgculwZXJ0b2lyZSBzcOljaWZp6SBwYXIgbCdvcHRpb24gZGUKKyAgICBjb21waWxhdGlvbiA8cmVmIGlkPSJidWlsZC1wb3J0YWJsZS1yb290IiBuYW1lPSItLXByZWZpeCI+IHF1aSBlc3QgdXRpbGlz6S4KKyAgICBDZSBy6XBlcnRvaXJlIGVzdCBsaekg4CBjZWx1aQorICAgIHNw6WNpZmnpIHBhciBsJ29wdGlvbiBkZSBjb21waWxhdGlvbiA8cmVmIGlkPSJidWlsZC1leGVjdXRlLXJvb3QiIG5hbWU9Ii0td2l0aC1leGVjdXRlLXJvb3QiPi4KKyAgPHRhZz48dHQ+LS1saWJkaXI9PC90dD48ZW0+cmVwZXJ0b2lyZTwvZW0+PGxhYmVsIGlkPSJidWlsZC1hcGktZGlyZWN0b3J5Ij48L3RhZz4KKyAgICBTcOljaWZpZSBsZSBy6XBlcnRvaXJlIHNpdHXpIGRhbnMgbGEgPHJlZiBpZD0iaGllcmFyY2h5IiBuYW1lPSJoaelyYXJjaGllIGRlcyBmaWNoaWVycyBpbnN0YWxs6XMiPgorICAgIG/5IGxlcyBtb2R1bGVzIHN0YXRpcXVlcyBldCBsZXMgb2JqZXRzIGNoYXJnZWFibGVzCisgICAgZHluYW1pcXVlbWVudCBwb3VyIGwnSW50ZXJmYWNlIFByb2dyYW1tYXRpcXVlIGRlIGwnQXBwbGljYXRpb24gc29udCDgIGNvcGllci4gTGUgY2hlbWluIGFic29sdSBkb2l0IOp0cmUKKyAgICBpbmRpcXXpLiBTaSBjZXR0ZSBvcHRpb24gZXN0IGFic2VudGUgbGUgculwZXJ0b2lyZSBpbmRpcXXpIGRhbnMKKyAgICBsJ29wdGlvbiA8dHQ+LS1saWJkaXI8L3R0PiAocXVpLCBwYXIgZOlmYXV0LCBlc3QgbGUgculwZXJ0b2lyZSByYWNpbmUgPHR0Pi9saWI8L3R0PgorICAgIGR1IHLpcGVydG9pcmUgc3DpY2lmaekgcGFyIGwnb3B0aW9uIGRlIGNvbnN0cnVjdGlvbgorICAgIDxyZWYgaWQ9ImJ1aWxkLWFyY2hpdGVjdHVyZS1yb290IiBuYW1lPSItLWV4ZWMtcHJlZml4Ij4pIGVzdCB1dGlsaXPpLiBMZSBy6XBlcnRvaXJlIGVzdCBjcunpIHMnaWwgbidleGlzdGUKKyAgICBwYXMuCisgIDx0YWc+PHR0Pi0tc3lzY29uZmRpcj08L3R0PjxlbT5kaXJlY3Rvcnk8L2VtPjxsYWJlbCBpZD0iYnVpbGQtY29uZmlndXJhdGlvbi1kaXJlY3RvcnkiPjwvdGFnPgorICAgIFNw6WNpZmllIGxlIHLpcGVydG9pcmUgc2l0dekgZGFucyBsYSA8cmVmIGlkPSJoaWVyYXJjaHkiIG5hbWU9Imhp6XJhcmNoaWUgZGVzIGZpY2hpZXJzIGluc3RhbGzpcyI+CisgICAgb/kgbGVzIGZpY2hpZXJzIGRlIGNvbmZpZ3VyYXRpb24gc29udCDgIGluc3RhbGxlci4gVm91cyBkZXZlegorICAgIGZvdXJuaXIgdW4gY2hlbWluIGFic29sdS4gU2kgdm91cyBuZSBzcOljaWZpZXogcGFzIGNldHRlIG9wdGlvbiwKKyAgICBjJ2VzdCBsZSBy6XBlcnRvaXJlIHNw6WNpZmnpIHBhciBsJ29wdGlvbiBkZSBjb25maWd1cmF0aW9uIHN0YW5kYXJkIDx0dD4tLXN5c2NvbmZkaXI8L3R0PgorICAgIChxdWksIHBhciBk6WZhdXQsIGVzdCBsZSBy6XBlcnRvaXJlIHJhY2luZSBkZSA8dHQ+L2V0YzwvdHQ+IHNw6WNpZmnpCisgICAgcGFyIGwnb3B0aW9uIGRlIGNvbXBpbGF0aW9uICA8cmVmIGlkPSJidWlsZC1wb3J0YWJsZS1yb290IgorICAgIG5hbWU9Ii0tcHJlZml4Ij4pIHF1aSBlc3QgdXRpbGlz6S4KKyAgICBMZSBy6XBlcnRvaXJlIGVzdCBjcunpIHMnaWwgbidleGlzdGUgcGFzLgorICA8dGFnPjx0dD4tLXdpdGgtcHJvZ3JhbS1kaXJlY3Rvcnk9PC90dD48ZW0+ZGlyZWN0b3J5PC9lbT48bGFiZWwgaWQ9ImJ1aWxkLXByb2dyYW0tZGlyZWN0b3J5Ij48L3RhZz4KKyAgICBTcOljaWZpZSBsZSBy6XBlcnRvaXJlIHNpdHXpIGRhbnMgbGEgPHJlZiBpZD0iaGllcmFyY2h5IgorICAgIG5hbWU9Imhp6XJhcmNoaWUgZGVzIGZpY2hpZXJzIGluc3RhbGzpcyI+IG/5IGxlcyBleOljdXRhYmxlcworICAgIChiaW5haXJlcywgZXjpY3V0YWJsZXMpLCBkb2l2ZW50IOp0cmUgaW5zdGFsbOlzLiBWb3VzIGRldmV6CisgICAgZm91cm5pciB1biBjaGVtaW4gYWJzb2x1LiBTaSBjZXR0ZSBvcHRpb24gbidlc3QgcGFzIHV0aWxpc+llLAorICAgIGMnZXN0IGxlIHLpcGVydG9pcmUgc3DpY2lmaekgcGFyIGwnb3B0aW9uIGRlIGNvbmZpZ3VyYXRpb24KKyAgICBzdGFuZGFyZCA8dHQ+LS1iaW5kaXI8L3R0PiAocXVpLCBwYXIgZOlmYXV0LCBlc3QgbGUgculwZXJ0b2lyZS1yYWNpbmUKKyAgICBzcOljaWZp6SBwYXIgbCdvcHRpb24gZGUgY29tcGlsYXRpb24gPHJlZgorICAgIGlkPSJidWlsZC1hcmNoaXRlY3R1cmUtcm9vdCIgbmFtZT0iLS1leGVjLXByZWZpeCI+KSBxdWkgZXN0IHV0aWxpc+kuCisgICAgTGUgculwZXJ0b2lyZSBlc3QgY3Lp6SBzJ2lsIG4nZXhpc3RlIHBhcy4KKyAgPHRhZz48dHQ+LS13aXRoLWxpYnJhcnktZGlyZWN0b3J5PTwvdHQ+PGVtPmRpcmVjdG9yeTwvZW0+PGxhYmVsIGlkPSJidWlsZC1saWJyYXJ5LWRpcmVjdG9yeSI+PC90YWc+CisgICAgU3DpY2lmaWUgbGUgculwZXJ0b2lyZSBzaXR16SBkYW5zIGxhIDxyZWYgaWQ9ImhpZXJhcmNoeSIKKyAgICBuYW1lPSJoaelyYXJjaGllIGRlcyBmaWNoaWVycyBpbnN0YWxs6XMiPiBv+SBsZXMgcGlsb3RlcyBldAorICAgIGQnYXV0cmVzIGZpY2hpZXJzIGluZOlwZW5kYW50cyBkZSBsJ2FyY2hpdGVjdHVyZSBkb2l2ZW50IOp0cmUgaW5zdGFsbOlzLiBWb3VzIGRldmV6CisgICAgZm91cm5pciB1biBjaGVtaW4gYWJzb2x1LiBTaSBjZXR0ZSBvcHRpb24gbidlc3QgcGFzIHNw6WNpZmnpZSwKKyAgICBjJ2VzdCBsZSBzb3VzLXLpcGVydG9pcmUgZHUgculwZXJ0b2lyZSA8dHQ+YnJsdHR5PC90dD4KKyAgICBzcOljaWZp6SBwYXIgbCdvcHRpb24gZGUgY29uZmlndXJhdGlvbiBzdGFuZGFyZCA8dHQ+LS1saWJkaXI8L3R0PgorICAgIChxdWkgcGFyIGTpZmF1dCBlc3QgbGUgculwZXJ0b2lyZSByYWNpbmUgc3DpY2lmaekgcGFyIGwnb3B0aW9uIGRlCisgICAgY29tcGlsYXRpb24gPHJlZiBpZD0iYnVpbGQtYXJjaGl0ZWN0dXJlLXJvb3QiIG5hbWU9Ii0tZXhlYy1wcmVmaXgiPikgcXVpIGVzdCB1dGlsaXPpLgorICAgIExlIHLpcGVydG9pcmUgZXN0IGNy6ekgcydpbCBuJ2V4aXN0ZSBwYXMuCisgIDx0YWc+PHR0Pi0td2l0aC1kYXRhLWRpcmVjdG9yeT08L3R0PjxlbT5kaXJlY3Rvcnk8L2VtPjxsYWJlbCBpZD0iYnVpbGQtZGF0YS1kaXJlY3RvcnkiPjwvdGFnPgorICAgIFNw6WNpZmllIGxlIHLpcGVydG9pcmUgc2l0dekgZGFucyBsYSA8cmVmIGlkPSJoaWVyYXJjaHkiCisgICAgbmFtZT0iaGnpcmFyY2hpZSBkZXMgZmljaGllcnMgaW5zdGFsbOlzIj4gb/kgbGVzIHRhYmxlcywgbGVzIHBhZ2VzCisgICAgZCdhaWRlIGV0IGQnYXV0cmVzIGZpY2hpZXJzIGluZOlwZW5kYW50cyBkZSBsJ2FyY2hpdGVjdHVyZSBkb2l2ZW50IOp0cmUKKyAgICBpbnN0YWxs6XMuIFZvdXMgZGV2ZXogZm91cm5pciB1biBjaGVtaW4gYWJzb2x1LiBTaSBjZXR0ZSBvcHRpb24KKyAgICBuJ2VzdCBwYXMgc3DpY2lmaellLCBjJ2VzdCBsZSBzb3VzLXLpcGVydG9pcmUgZHUKKyAgICBy6XBlcnRvaXJlIDx0dD5icmx0dHk8L3R0PiBzcOljaWZp6SBwYXIgbCdvcHRpb24gZGUgY29uZmlndXJhdGlvbgorICAgIHN0YW5kYXJkIDx0dD4tLXN5c2NvbmZkaXI8L3R0PiAocXVpIHBhciBk6WZhdXQgZXN0IGxlIHLpcGVydG9pcmUKKyAgICByYWNpbmUgPHR0Pi9ldGM8L3R0PiBzcOljaWZp6SBwYXIKKyAgICBsJ29wdGlvbiBkZSBjb21waWxhdGlvbiA8cmVmIGlkPSJidWlsZC1wb3J0YWJsZS1yb290IgorICAgIG5hbWU9Ii0tcHJlZml4Ij4pIHF1aSBlc3QgdXRpbGlz6S4gIExlIHLpcGVydG9pcmUgZXN0IGNy6ekKKyAgICBzJ2lsIG4nZXhpc3RlIHBhcy4KKyAgPHRhZz48dHQ+LS13aXRoLW1hbnBhZ2UtZGlyZWN0b3J5PTwvdHQ+PGVtPmRpcmVjdG9yeTwvZW0+PGxhYmVsIGlkPSJidWlsZC1tYW5wYWdlLWRpcmVjdG9yeSI+PC90YWc+CisgICAgU3DpY2lmaWUgbGUgculwZXJ0b2lyZSBzaXR16SBkYW5zIGxhIDxyZWYgaWQ9ImhpZXJhcmNoeSIKKyAgICBuYW1lPSJoaelyYXJjaGllIGRlcyBmaWNoaWVycyBpbnN0YWxs6XMiPiBv+SBsZXMgdGFibGVzIGV0IGxlcworICAgIHBhZ2VzIGRlIG1hbnVlbCBkb2l2ZW50IOp0cmUgaW5zdGFsbOllcy4gVm91cyBkZXZleiBmb3VybmlyIHVuCisgICAgY2hlbWluIGFic29sdS4gU2kgY2V0dGUgb3B0aW9uIG4nZXN0IHBhcyBzcOljaWZp6WUsIGMnZXN0IGxlCisgICAgc291cy1y6XBlcnRvaXJlIGR1IHLpcGVydG9pcmUgPHR0PmJybHR0eTwvdHQ+IHNw6WNpZmnpCisgICAgcGFyIGwnb3B0aW9uIGRlIGNvbmZpZ3VyYXRpb24gc3RhbmRhcmQgPHR0Pi0tbWFuZGlyPC90dD4gKHF1aSBwYXIKKyAgICBk6WZhdXQgZXN0IGxlIHLpcGVydG9pcmUgcmFjaW5lIDx0dD4vbWFuPC90dD4gc3DpY2lmaekgcGFyIGwnb3B0aW9uCisgICAgZGUgY29tcGlsYXRpb24gPHJlZiBpZD0iYnVpbGQtcG9ydGFibGUtcm9vdCIgbmFtZT0iLS1wcmVmaXgiPikgcXVpCisgICAgZXN0IHV0aWxpc+kuIExlIHLpcGVydG9pcmUgZXN0IGNy6ekgcydpbCBuJ2V4aXN0ZSBwYXMuCisgIDx0YWc+PHR0Pi0td2l0aC1pbmNsdWRlLWRpcmVjdG9yeT08L3R0PjxlbT5kaXJlY3Rvcnk8L2VtPjxsYWJlbCBpZD0iYnVpbGQtaW5jbHVkZS1kaXJlY3RvcnkiPjwvdGFnPgorICAgIFNw6WNpZmllIGxlIHLpcGVydG9pcmUgc2l0dekgZGFucyBsYSA8cmVmIGlkPSJoaWVyYXJjaHkiCisgICAgbmFtZT0iaGnpcmFyY2hpZSBkZXMgZmljaGllcnMgaW5zdGFsbOlzIj4gb/kgbGVzIGZpY2hpZXJzIGQnZW4tdOp0ZQorICAgIEMgcG91ciBsJ0ludGVyZmFjZSBQcm9ncmFtbWF0aXF1ZSBkZSBsJ0FwcGxpY2F0aW9uIGRvaXZlbnQg6nRyZQorICAgIGluc3RhbGzpcy4gVm91cyBkZXZleiBmb3VybmlyIHVuIGNoZW1pbiBhYnNvbHUuIFNpIGNldHRlIG9wdGlvbgorICAgIG4nZXN0IHBhcyBzcOljaWZp6WUsIGMnZXN0IGxlIHNvdXMtculwZXJ0b2lyZSBkdSBy6XBlcnRvaXJlIDx0dD5icmx0dHk8L3R0PiBzcOljaWZp6SBwYXIKKyAgICBsJ29wdGlvbiBkZSBjb25maWd1cmF0aW9uIHN0YW5kYXJkIDx0dD4tLWluY2x1ZGVkaXI8L3R0PiAocXVpIHBhcgorICAgIGTpZmF1dCBlc3QgbGUgculwZXJ0b2lyZSByYWNpbmUgPHR0Pi9pbmNsdWRlPC90dD4gc3DpY2lmaekgcGFyIGwnb3B0aW9uCisgICAgZGUgY29tcGlsYXRpb24gPHJlZiBpZD0iYnVpbGQtcG9ydGFibGUtcm9vdCIgbmFtZT0iLS1wcmVmaXgiPiBxdWkKKyAgICBlc3QgdXRpbGlz6S4gTGUgculwZXJ0b2lyZSBlc3QgY3Lp6SBzJ2lsIG4nZXhpc3RlIHBhcy4KKzwvZGVzY3JpcD4KKworPHNlY3QzPkNhcmFjdOlyaXN0aXF1ZXMgZGUgbGEgY29tcGlsYXRpb248bGFiZWwgaWQ9ImJ1aWxkLWZlYXR1cmVzIj48cD4KK0NlcyBvcHRpb25zIHNvbnQgc3VydG91dCB1dGlsZXMgcXVhbmQgdm91cyBjb21waWxleiBCUkxUVFkgcG91ciB1bmUKK2Rpc3F1ZXR0ZSBkZSBk6W1hcnJhZ2UuIEVsbGVzIHZpc2VudCDgIHLpZHVpcmUgbGEgdGFpbGxlIGRlcyBwcm9ncmFtbWVzIGVuIHN1cHByaW1hbnQKK2xlcyBmb25jdGlvbnMgaW51dGlsZXMuCis8ZGVzY3JpcD4KKyAgPHRhZz48dHQ+LS1lbmFibGUtc3RhbmRhbG9uZS1wcm9ncmFtczwvdHQ+PGxhYmVsIGlkPSJidWlsZC1zdGFuZGFsb25lLXByb2dyYW1zIj48L3RhZz4KKyAgICBDcullIGRlcyBwcm9ncmFtbWVzIGxp6XMgZGUgZmHnb24gc3RhdGlxdWUgcGx1dPR0IHF1ZSBkZSBmYedvbgorICAgIGR5bmFtaXF1ZS4gQ2V0dGUgb3B0aW9uIHN1cHByaW1lIHRvdXRlcyBsZXMgZOlwZW5kYW5jZXMgc3VyIGxlcworICAgIG9iamV0cyBwYXJ0YWfpcyDgIGwnZXjpY3V0aW9uLiBTZXVscyBsZXMgcGlsb3RlcyBwYXIgZOlmYXV0ICh2b2lyCisgICAgbGVzIG9wdGlvbnMgZGUgY29tcGlsYXRpb24gPHJlZiBpZD0iYnVpbGQtYnJhaWxsZS1kcml2ZXIiIG5hbWU9Ii0td2l0aC1icmFpbGxlLWRyaXZlciI+LAorICAgIDxyZWYgaWQ9ImJ1aWxkLXNwZWVjaC1kcml2ZXIiIG5hbWU9Ii0td2l0aC1zcGVlY2gtZHJpdmVyIj4gZXQKKyAgICA8cmVmIGlkPSJidWlsZC1zY3JlZW4tZHJpdmVyIiBuYW1lPSItLXdpdGgtc2NyZWVuLWRyaXZlciI+KSBzb250IGNvbXBpbOlzLgorICA8dGFnPjx0dC8tLWRpc2FibGUtc3RyaXBwaW5nLzxsYWJlbCBpZD0iYnVpbGQtc3RyaXBwaW5nIj48L3RhZz4KKyAgICBOZSBzdXBwcmltZSBwYXMgbGVzIHN5bWJvbGVzIGRlcyB0YWJsZXMgZGVzIGV46WN1dGFibGVzIGV0IGRlcyBvYmpldHMKKyAgICBwYXJ0YWfpcyBsb3JzIGRlIGxldXIgaW5zdGFsbGF0aW9uLgorICAgIAorICA8dGFnPjx0dD4tLWVuYWJsZS1yZWxvY2F0YWJsZS1pbnN0YWxsPC90dD48bGFiZWwgaWQ9ImJ1aWxkLXRhYmxlLXNlbGVjdGlvbiI+PC90YWc+CisgICAgU2kgY2V0dGUgZm9uY3Rpb25uYWxpdOkgZXN0IGFjdGl26WUsIHRvdXMgbGVzIGNoZW1pbnMgaW50ZXJuZXMgc29udAorICAgIHJlY2FsY3Vs6XMgYWZpbiBkJ2VuZ2xvYmVyIGxlIHLpcGVydG9pcmUgZHUgcHJvZ3JhbW1lLiBTaSBlbGxlIG4nZXN0IHBhcworICAgIHV0aWxpc+llLCB0b3VzIGxlcyBjaGVtaW5zIGludGVybmVzIHNvbnQgYWJzb2x1cy4gQ2V0dGUgZm9uY3Rpb25uYWxpdOkKKyAgICB2aXNlIOAgY2UgcXVlIHRvdXRlIGxhCisgICAgPHJlZiBpZD0iaGllcmFyY2h5IiBuYW1lPSJoaelyYXJjaGllIGRlcyBmaWNoaWVycyBpbnN0YWxs6XMiPiBzb2l0CisgICAgY29waellIG91IGTpcGxhY+llIHByb3ByZW1lbnQgZCd1biBlbmRyb2l0IOAgbCdhdXRyZSwgdG91dCBwYXJ0aWN1bGnocmVtZW50CisgICAgcG91ciB1biB1c2FnZSBzdXIgZGVzIHBsYXRlZm9ybWVzIFdpbmRvd3MuCisgIDx0YWc+PHR0Ly0tZGlzYWJsZS1zdHJpcHBpbmdsLzxsYWJlbCBpZD0iYnVpbGQtc3RyaXBwaW5nbCI+PC90YWc+CisgICAgTmUgc3VwcHJpbWUgcGFzIGxlcyB0YWJsZXMgZGUgc3ltYm9sZXMgZGVzIGV46WN1dGFibGVzIGV0IGRlcyBvYmpldHMKKyAgICBwYXJ0YWfpcyBsb3JzIGRlIGxldXIgaW5zdGFsbGF0aW9uLgorICA8dGFnPjx0dD4tLWRpc2FibGUtbGVhcm4tbW9kZTwvdHQ+PGxhYmVsIGlkPSJidWlsZC1sZWFybi1tb2RlIj48L3RhZz4KKyAgICBS6WR1aXQgbGEgdGFpbGxlIGR1IHByb2dyYW1tZSBlbiBleGNsdWFudCBsZSBtb2RlIGFwcHJlbnRpc3NhZ2UKKyAgICBkZXMgY29tbWFuZGVzICh2b2lyIGxhIHNlY3Rpb24gPHJlZiBpZD0ibGVhcm4iIG5hbWU9Ik1vZGUgYXBwcmVudGlzc2FnZQorICAgIGRlcyBjb21tYW5kZXMiPikuCisgIDx0YWc+PHR0Pi0tZGlzYWJsZS1jb250cmFjdGVkLWJyYWlsbGU8L3R0PjxsYWJlbCBpZD0iYnVpbGQtY29udHJhY3RlZC1icmFpbGxlIj48L3RhZz4KKyAgICBS6WR1aXQgbGEgdGFpbGxlIGR1IHByb2dyYW1tZSBlbiBleGNsdWFudCBsZSBzdXBwb3J0IHBvdXIgbGUKKyAgICBicmFpbGxlIGFiculn6SAodm9pciBsYSBzZWN0aW9uIDxyZWYgaWQ9dGFibGUtY29udHJhY3Rpb24KKyAgICBuYW1lPSJCcmFpbGxlIGFiculn6SI+KS4KKyAgPHRhZz48dHQ+LS1kaXNhYmxlLXNwZWVjaC1zdXBwb3J0PC90dD48bGFiZWwgaWQ9ImJ1aWxkLXNwZWVjaC1zdXBwb3J0Ij48L3RhZz4KKyAgICBS6WR1aXQgbGEgdGFpbGxlIGR1IHByb2dyYW1tZSBlbiBleGNsdWFudCBsZSBzdXBwb3J0IGRlcyBzeW50aOtzZXMgdm9jYWxlcy4KKyAgPHRhZz48dHQ+LS1kaXNhYmxlLWljb252PC90dD48bGFiZWwgaWQ9ImJ1aWxkLXRhYmxlLXNlbGVjdGlvbiI+PC90YWc+CisgICAgUulkdWl0IGxhIHRhaWxsZSBkdSBwcm9ncmFtbWUgZW4gZXhjbHVhbnQgbGUgc3VwcG9ydCBwb3VyIGxhIGNvbnZlcnNpb24KKyAgICBkZXMgY29kYWdlcy4KKyAgPHRhZz48dHQvLS1kaXNhYmxlLWljdS88bGFiZWwgaWQ9ImJ1aWxkLWljdSI+PC90YWc+CisgICAgUulkdWl0IGxhIHRhaWxsZSBkdSBwcm9ncmFtbWUgZW4gZXhjbHVhbnQgbGUgc3VwcG9ydCBwb3VyIAorICAgIGwnaW50ZXJuYXRpb25hbGlzYXRpb24gYmFz6WUgc3VyIGwnVW5pY29kZS4KKyAgPHRhZz48dHQvLS1kaXNhYmxlLXgvPGxhYmVsIGlkPSJidWlsZC14Ij48L3RhZz4KKyAgICBS6WR1aXQgbGEgdGFpbGxlIGR1IHByb2dyYW1tZSBlbiBleGNsdWFudCBsZSBzdXBwb3J0IHBvdXIgWDExLgorICA8dGFnPjx0dD4tLWRpc2FibGUtYmVlcGVyLXN1cHBvcnQ8L3R0PjxsYWJlbCBpZD0iYnVpbGQtYmVlcGVyLXN1cHBvcnQiPjwvdGFnPgorICAgIFLpZHVpdCBsYSB0YWlsbGUgZHUgcHJvZ3JhbW1lIGVuIGV4Y2x1YW50IGxlIHN1cHBvcnQgcG91ciBsZQorICAgIGfpbulyYXRldXIgZGVzICJub25lIiBlbiBjb25zb2xlLgorICA8dGFnPjx0dD4tLWRpc2FibGUtcGNtLXN1cHBvcnQ8L3R0PjxsYWJlbCBpZD0iYnVpbGQtcGNtLXN1cHBvcnQiPjwvdGFnPgorICAgIFLpZHVpdCBsYSB0YWlsbGUgZHUgcHJvZ3JhbW1lIGVuIGV4Y2x1YW50IGxlIHN1cHBvcnQgcG91cgorICAgIGwnaW50ZXJmYWNlIERpZ2l0YWwgQXVkaW8gc3VyIGxhIGNhcnRlIHNvbi4KKyAgPHRhZz48dHQ+LS1lbmFibGUtcGNtLXN1cHBvcnQ9PC90dD48ZW0+aW50ZXJmYWNlPC9lbT48L3RhZz4KKyAgICBTaSB1bmUgcGxhdGVmb3JtZSBwcm9wb3NlIHBsdXMgZCd1bmUgaW50ZXJmYWNlIERpZ2l0YWwgQXVkaW8sCisgICAgY2VsbGUgcXVpIHNlcmEgdXRpbGlz6WUgcGV1dCDqdHJlIHNw6WNpZmnpZS4KKyAgICA8dGFibGUgbG9jPSJoIj4KKyAgICAgIDx0YWJ1bGFyIGNhPSJsbGwiPgorICAgICAgICBQbGF0ZWZvcm1lfEludGVyZmFjZXxEZXNjcmlwdGlvbkA8aGxpbmU+CisgICAgICAgIExpbnV4CisgICAgICAgICAgfG9zc3xPcGVuIFNvdW5kIFN5c3RlbUAKKyAgICAgICAgICB8YWxzYXxBZHZhbmNlZCBMaW51eCBTb3VuZCBBcmNoaXRlY3R1cmVACisgICAgICA8L3RhYnVsYXI+CisgICAgPC90YWJsZT4KKyAgPHRhZz48dHQ+LS1kaXNhYmxlLW1pZGktc3VwcG9ydDwvdHQ+PGxhYmVsIGlkPSJidWlsZC1taWRpLXN1cHBvcnQiPjwvdGFnPgorICAgIFLpZHVpdCBsYSB0YWlsbGUgZHUgcHJvZ3JhbW1lIGVuIGV4Y2x1YW50IGxlIHN1cHBvcnQgcG91cgorICAgIGwnaW50ZXJmYWNlIG51belyaXF1ZSBkJ2luc3RydW1lbnRzIGRlIG11c2lxdWUgc3VyIGxhIGNhcnRlIHNvbi4KKyAgPHRhZz48dHQ+LS1lbmFibGUtbWlkaS1zdXBwb3J0PTwvdHQ+PGVtPmludGVyZmFjZTwvZW0+PC90YWc+CisgICAgU2kgdW5lIHBsYXRlZm9ybWUgcHJvcG9zZSBwbHVzIGQndW5lIGludGVyZmFjZSBudW3pcmlxdWUgZCdpbnN0cnVtZW50IGRlIAorICAgIG11c2lxdWUsIHZvdXMgcG91dmV6IHNw6WNpZmllciBjZWxsZSBxdWkgc2VyYSB1dGlsaXPpZS4KKyAgICA8dGFibGUgbG9jPSJoIj4KKyAgICAgIDx0YWJ1bGFyIGNhPSJsbGwiPgorICAgICAgICBQbGF0dGUtZm9ybWV8SW50ZXJmYWNlfERlc2NyaXB0aW9uQDxobGluZT4KKyAgICAgICAgTGludXgKKyAgICAgICAgICB8b3NzfE9wZW4gU291bmQgU3lzdGVtQAorICAgICAgICAgIHxhbHNhfEFkdmFuY2VkIExpbnV4IFNvdW5kIEFyY2hpdGVjdHVyZUAKKyAgICAgIDwvdGFidWxhcj4KKyAgICA8L3RhYmxlPgorICA8dGFnPjx0dD4tLWRpc2FibGUtZm0tc3VwcG9ydDwvdHQ+PGxhYmVsIGlkPSJidWlsZC1mbS1zdXBwb3J0Ij48L3RhZz4KKyAgICBS6WR1aXQgbGEgdGFpbGxlIGR1IHByb2dyYW1tZSBlbiBleGNsdWFudCBsZSBzdXBwb3J0IHBvdXIgbGUKKyAgICBzeW50aOl0aXNldXIgRk0gc3VyIHVuZSBjYXJ0ZSBzb24gQWRMaWIsIE9QTDMsIFNvdW5kIEJsYXN0ZXIsIG91CisgICAg6XF1aXZhbGVudC4KKyAgPHRhZz48dHQ+LS1kaXNhYmxlLXBtLWNvbmZpZ2ZpbGU8L3R0PjxsYWJlbCBpZD0iYnVpbGQtcG0tY29uZmlnZmlsZSI+PC90YWc+CisgICAgSW5jbHV0IHVuZSBpbnRlcmZhY2UgYXZlYyBsJ2FwcGxpY2F0aW9uIDx0dD5ncG08L3R0PiBkZSB0ZWxsZSBzb3J0ZSBxdWUsCisgICAgICAgIHN1ciBsZXMgc3lzdOhtZXMgcXVpIGxlIHN1cHBvcnRlbnQsIEJSTFRUWSBpbnRlcmFnaXNzZSBhdmVjIGxlCisgICAgICAgIHBpbG90ZSBkdSBwb2ludGV1ciAoc291cmlzKSAodm9pciBsYSBzZWN0aW9uIDxyZWYgaWQ9ImdwbSIKKyAgICBuYW1lPSJTdXBwb3J0IGR1IHBvaW50ZXVyIChzb3VyaXMpIHZpYSBHUE0iPikuCisgIDx0YWc+PHR0Pi0tZGlzYWJsZS1ncG08L3R0PjxsYWJlbCBpZD0iYnVpbGQtYXBpIj48L3RhZz4KKyAgICBS6WR1aXQgbGEgdGFpbGxlIGR1IHByb2dyYW1tZSBlbiBleGNsdWFudCBsJ2ludGVyZmFjZSBhdmVjIGwnYXBwbGljYXRpb24gZ3BtCisgICAgcXVpIHBlcm1ldCDgIEJSTFRUWSBkJ2ludGVyYWdpciBhdmVjIGxlIHDpcmlwaOlyaXF1ZSBkdSBwb2ludGV1ciAobGEgc291cmlzKQorICAgICh2b2lyIFN1cHBvcnQgZHUgcG9pbnRldXIgKHNvdXJpcykgIHBhciBHUE0pLgorICA8dGFnPjx0dD4tLWRpc2FibGUtYXBpPC90dD48bGFiZWwgaWQ9ImJ1aWxkLWFwaSI+PC90YWc+CisgICAgUulkdWl0IGxhIHRhaWxsZSBkdSBwcm9ncmFtbWUgZW4gZXhjbHVhbnQgbCdpbnRlcmZhY2UgZGUgcHJvZ3JhbW1hdGlvbiBkZSBsJ2FwcGxpY2F0aW9uLgorICA8dGFnPjx0dD4tLXdpdGgtYXBpLXBhcmFtZXRlcnM9PC90dD48ZW0+bmFtZTwvZW0+PHR0Pj08L3R0PjxlbT52YWxldXI8L2VtPjx0dD4sPC90dD4uLi48bGFiZWwgaWQ9ImJ1aWxkLWFwaS1wYXJhbWV0ZXJzIj48L3RhZz4KKyAgICBTcOljaWZpZSBsZXMgcGFyYW3odHJlcyBwYXIgZOlmYXV0IHBvdXIgbCdpbnRlcmZhY2UgZGUgcHJvZ3JhbW1hdGlvbgorICAgIGRlIGwnYXBwbGljYXRpb24uIFNpIGxlIG3qbWUgcGFyYW3odHJlIGVzdCBzcOljaWZp6SBwbHVzIGQndW5lCisgICAgZm9pcywgc2EgdmFsZXVyIGxhIHBsdXMg4CBkcm9pdGUgZXN0IHV0aWxpc+llLiBQb3VyIHVuZQorICAgIGRlc2NyaXB0aW9uIGRlcyBwYXJhbeh0cmVzIGFjY2VwdOlzIHBhciBsJ2ludGVyZmFjZSwgdm9pciBsZQorICAgIG1hbnVlbCBkZSBy6WbpcmVuY2UgZGUgPGJmPkJybEFQSTwvYmY+LiBWb2lyIGxhIGxpZ25lCisgICAgPHJlZiBpZD0iY29uZmlndXJlLWFwaS1wYXJhbWV0ZXJzIiBuYW1lPSJhcGktcGFyYW1ldGVycyI+IGR1CisgICAgZmljaGllciBkZSBjb25maWd1cmF0aW9uIGV0IGwnb3B0aW9uIDxyZWYKKyAgICBpZD0ib3B0aW9ucy1hcGktcGFyYW1ldGVycyIgbmFtZT0iLUEiPgorICAgIGVuIGxpZ25lIGRlIGNvbW1hbmRlIHBvdXIgbGEgc+lsZWN0aW9uIOAgbCdleOljdXRpb24uCisgIDx0YWc+PHR0Pi0tZGlzYWJsZS1jYW1sLWJpbmRpbmdzPTwvdHQ+PGVtPm5vbTwvZW0+PHR0Pj08L3R0PjxlbT52YWxldXI8L2VtPjx0dD4sPC90dD4uLi48bGFiZWwgaWQ9ImJ1aWxkLWFwaS1wYXJhbWV0ZXJzIj48L3RhZz4KKyAgICBOZSBjb21waWxlIHBhcyBsZXMgYmluZGluZ3MgQ2FtbCAoaW50ZXJmYWNlcyBkZSBwcm9ncmFtbWF0aW9uKSBwb3VyIGwnaW50ZXJmYWNlIGRlIHByb2dyYW1tYXRpb24gZGUgbCdhcHBsaWNhdGlvbi4KKyAgPHRhZz48dHQ+LS1kaXNhYmxlLWphdmEtYmluZGluZ3M9PC90dD48ZW0+bm9tPC9lbT48dHQ+PTwvdHQ+PGVtPnZhbGV1cjwvZW0+PHR0Piw8L3R0Pi4uLjxsYWJlbCBpZD0iYnVpbGQtYXBpLXBhcmFtZXRlcnMiPjwvdGFnPgorICAgIE5lIGNvbXBpbGUgcGFzIGxlcyBiaW5kaW5ncyBKYXZhIChpbnRlcmZhY2VzIGRlIHByb2dyYW1tYXRpb24pICBwb3VyIGwnaW50ZXJmYWNlIGRlIHByb2dyYW1tYXRpb24gZGUgbCdhcHBsaWNhdGlvbi4KKyAgPHRhZz48dHQ+LS1kaXNhYmxlLWxpc3AtYmluZGluZ3M9PC90dD48ZW0+bm9tPC9lbT48dHQ+PTwvdHQ+PGVtPnZhbGV1cjwvZW0+PHR0Piw8L3R0Pi4uLjxsYWJlbCBpZD0iYnVpbGQtYXBpLXBhcmFtZXRlcnMiPjwvdGFnPgorICAgIE5lIGNvbXBpbGUgcGFzIGxlcyBiaW5kaW5ncyBMaXNwIChpbnRlcmZhY2VzIGRlIHByb2dyYW1tYXRpb24pIHBvdXIgbCdpbnRlcmZhY2UgZGUgcHJvZ3JhbW1hdGlvbiBkZSBsJ2FwcGxpY2F0aW9uLgorICA8dGFnPjx0dD4tLWRpc2FibGUtcHl0aG9uLWJpbmRpbmdzPTwvdHQ+PGVtPm5vbTwvZW0+PHR0Pj08L3R0PjxlbT52YWxldXI8L2VtPjx0dD4sPC90dD4uLi48bGFiZWwgaWQ9ImJ1aWxkLWFwaS1wYXJhbWV0ZXJzIj48L3RhZz4KKyAgICBOZSBjb21waWxlIHBhcyBsZXMgYmluZGluZ3MgUHl0aG9uIChpbnRlcmZhY2VzIGRlIHByb2dyYW1tYXRpb24pIHBvdXIgbCdpbnRlcmZhY2UgZGUgcHJvZ3JhbW1hdGlvbiBkZSBsJ2FwcGxpY2F0aW9uLgorICA8dGFnPjx0dD4tLWRpc2FibGUtdGNsLWJpbmRpbmdzPTwvdHQ+PGVtPm5vbTwvZW0+PHR0Pj08L3R0PjxlbT52YWxldXI8L2VtPjx0dD4sPC90dD4uLi48bGFiZWwgaWQ9ImJ1aWxkLWFwaS1wYXJhbWV0ZXJzIj48L3RhZz4KKyAgICBOZSBjb21waWxlIHBhcyBsZXMgYmluZGluZ3MgVGNsIChpbnRlcmZhY2VzIGRlIHByb2dyYW1tYXRpb24pIHBvdXIgbCdpbnRlcmZhY2UgZGUgcHJvZ3JhbW1hdGlvbiBkZSBsJ2FwcGxpY2F0aW9uLgorICA8dGFnPjx0dD4tLXdpdGgtdGNsLWNvbmZpZz08L3R0PjxlbT5jaGVtaW48L2VtPgorICAgIFNw6WNpZmllIGwnZW5kcm9pdCBv+SBzZSB0cm91dmUgbGUgc2NyaXB0IGRlIGNvbmZpZ3VyYXRpb24gVGNsIAorICAgICh0Y2xDb25maWcuc2gpLiBWb3VzIHBvdXZleiBmb3VybmlyIGxlIGNoZW1pbiwgc29pdCB2ZXJzIGxlIHNjcmlwdCBsdWktbeptZSwKKyAgICBzb2l0IHZlcnMgbGUgculwZXJ0b2lyZSBv+SBpbCBzZSB0cm91dmUuIFVuIGRlcyBtb3RzIHN1aXZhbnRzIHBldXQg6nRyZSAKKyAgICBhdXNzaSB1dGlsaXPpIGNvbW1lIG9w6XJhdGV1ciBwb3VyIGwnb3B0aW9uOgorCisoPHR0Pi08L3R0PiksCisgICAgPGRlc2NyaXA+CisgICAgICA8dGFnPm5vPC90YWc+CisgICAgICAgIFV0aWxpc2UgZCdhdXRyZXMgbW95ZW5zIHBvdXIgc2F2b2lyIHNpIFRjbCBlc3QgZGlzcG9uaWJsZSBldCwgcydpbAorICAgICAgICBsJ2VzdCwgb/kgaWwgYSDpdOkgaW5zdGFsbOkuIENlbGEgcmV2aWVudCDgIHNw6WNpZmllcgorICAgICAgICA8dHQ+LS13aXRob3V0LXRjbC1jb25maWcuPC90dD4uCisgICAgICA8dGFnPnllczwvdGFnPgorICAgICAgICBDaGVyY2hlIGxlIHNjcmlwdCBkYW5zIHF1ZWxxdWVzIHLpcGVydG9pcmVzIGNvdXJhbW1lbnQgdXRpbGlz6XMuIAorICAgICAgICBDZWxhIHJldmllbnQg4CBzcOljaWZpZXIKKyAgICAgICAgPHR0Pi0td2l0aC10Y2wtY29uZmlnPC90dD4uCisgICAgPC9kZXNjcmlwPgorICAgIAorPC9kZXNjcmlwPgorCis8c2VjdDM+T3B0aW9ucyBkaXZlcnNlczxsYWJlbCBpZD0iYnVpbGQtbWlzY2VsbGFuZW91cyI+PHA+Cis8ZGVzY3JpcD4KKyAgPHRhZz48dHQ+LS13aXRoLWluaXQtcGF0aD08L3R0PjxlbT5wYXRoPC9lbT48bGFiZWwgaWQ9ImJ1aWxkLWluaXQtcGF0aCI+PC90YWc+CisgICAgU3DpY2lmaWUgbGUgY2hlbWluIGR1IHByb2dyYW1tZSBy6WVsIGRlIGTpbWFycmFnZSBwb3VyIGxlCisgICAgc3lzdOhtZS4gVm91cyBkZXZyaWV6IGZvdXJuaXIgbGUgY2hlbWluIGFic29sdS4gU2kgdm91cyBuZQorICAgIHNw6WNpZmlleiBwYXMgY2V0dGUgb3B0aW9uOgorICAgIDxlbnVtPgorICAgICAgPGl0ZW0+CisgICAgICAgIFZvdXMgZGV2cmlleiBk6XBsYWNlciBsZSBwcm9ncmFtbWUgPHR0PmluaXQ8L3R0PiBkYW5zIHVuIG5vdXZlbAorICAgICAgICBlbXBsYWNlbWVudC4KKyAgICAgIDxpdGVtPgorICAgICAgICBWb3VzIGRldnJpZXogZOlwbGFjZXIgPHR0PmJybHR0eTwvdHQ+IGRhbnMgbCdlbXBsYWNlbWVudCBvcmlnaW5hbAorICAgICAgICBkdSBwcm9ncmFtbWUuCisgICAgICA8aXRlbT4KKyAgICAgICAgRmluYWxlbWVudCwgcXVhbmQgbGUgc3lzdOhtZSBleOljdXRlIDx0dC9pbml0LyBhdSBk6W1hcnJhZ2UsCisgICAgICAgIDx0dD5icmx0dHk8L3R0PiBlc3QgZXjpY3V06S4gSWwgc2UgbWV0IGF1dG9tYXRpcXVlbWVudCBlbgorICAgICAgICBhcnJp6HJlLXBsYW4KKyAgICAgICAgZXQgZXjpY3V0ZSBsZSA8dHQ+aW5pdDwvdHQ+IHLpZWwgYXUgcHJlbWllciBwbGFuLiBDJ2VzdAorICAgICAgICBsJ3VuZSBkZXMgbWFuaehyZXMgcXVlbHF1ZSBwZXUgdG9yZHVlIGQnYXZvaXIgZHJvaXQgYXUgYnJhaWxsZSBk6HMgbGUKKyAgICAgICAgZOlidXQuIEMnZXN0IHN1cnRvdXQgdXRpbGUgcG91ciBjZXJ0YWlucyBkaXNxdWVzCisgICAgICAgIGQnaW5zdGFsbGF0aW9uL3NhdXZlZ2FyZGUuCisgICAgPC9lbnVtPgorICAgIFNpIHZvdXMgbmUgc3DpY2lmaWV6IHBhcyBjZXR0ZSBvcHRpb24sIGNldHRlIHBvc3NpYmlsaXTpIG4nZXN0IHBhcworICAgIGFjdGl26WUuIEVsbGUgdmlzZSB0b3V0IHBhcnRpY3VsaehyZW1lbnQgbGEgY29tcGlsYXRpb24gZCd1bmUgaW1hZ2UgcG91cgorICAgIHVuIGluc3RhbGxldXIgZW4gYnJhaWxsZS4KKyAgPHRhZz48dHQ+LS13aXRoLXN0ZGVyci1wYXRoPT08L3R0PjxlbT5jaGVtaW48L2VtPjxsYWJlbCBpZD0iYnVpbGQtaW5pdC1wYXRoIj48L3RhZz4KKyAgICBTcOljaWZpZSBsZSBjaGVtaW4gZHUgZmljaGllciBvdSBkdSBw6XJpcGjpcmlxdWUgb/kgbGEgc29ydGllIHN0YW5kYXJkCisgICAgZGVzIGVycmV1cnMgc2VyYSDpY3JpdGUuIFZvdXMgZGV2cmlleiBmb3VybmlyIHVuIGNoZW1pbiBhYnNvbHUuIFNpIHZvdXMKKyAgICBuZSBzcOljaWZpZXogcGFzIGNldHRlIG9wdGlvbiwgY2V0dGUgcG9zc2liaWxpdOkgbidlc3QgcGFzIGFjdGl26WUuCisgICAgQ2V0dGUgb3B0aW9uIHZpc2UgdG91dCBwYXJ0aWN1bGnocmVtZW50IGxhIGNvbXBpbGF0aW9uIGQndW5lIGltYWdlIHBvdXIKK3VuIGluc3RhbGxldXIgZW4gYnJhaWxsZS4KKzwvZGVzY3JpcD4KKworPHNlY3QyPlBy6XBhcmVyIGxlcyBjaWJsZXMgZGUgZmljaGllcjxsYWJlbCBpZD0ibWFrZSI+PHA+CitVbmUgZm9pcyBxdWUgQlJMVFRZIGEg6XTpIGNvbmZpZ3Vy6SwgbGVzIOl0YXBlcyBzdWl2YW50ZXMgY29uc2lzdGVudAorZW4gbGEgY29tcGlsYXRpb24gZXQgbCdpbnN0YWxsYXRpb24gZGUgY2UgZGVybmllci4gRWxsZXMgc29udAorZWZmZWN0dellcyBlbiBlbnRyYW50IGxhIGNvbW1hbmRlIG1ha2UgZHUgc3lzdOhtZSBkYW5zIGxlIGZpY2hpZXIgbWFrZQorcHJpbmNpcGFsIGRlIEJSTFRUWSAoPHR0Pk1ha2VmaWxlPC90dD4gZGFucyBsZSBy6XBlcnRvaXJlIHByaW5jaXBhbCkuIExlCitmaWNoaWVyIG1ha2UgZGUgQlJMVFRZIHN1cHBvcnRlIGxhIHBsdXBhcnQgZGVzIGNpYmxlcyBkZSBtYWludGVuYW5jZQorZCdhcHBsaWNhdGlvbiBjb3VyYW50cy4gSWxzIGluY2x1ZW50OgorPGRlc2NyaXA+CisgIDx0YWc+bWFrZTwvdGFnPgorICAgIFVuIHJhY2NvdXJjaSBwb3VyIHRvdXQgcHLpcGFyZXIuCisgIDx0YWc+bWFrZSBhbGw8bGFiZWwgaWQ9Im1ha2UtYWxsIj48L3RhZz4KKyAgICBDb21waWxlIGV0IGZhaXQgbCfpZGl0aW9uIGRlIGxpZW5zIHBvdXIgbCdleOljdXRhYmxlIEJSTFRUWSwgc2VzIHBpbG90ZXMgZXQgbGV1cnMgcGFnZXMKKyAgICBkZSBtYW51ZWwsIHNlcyBwcm9ncmFtbWVzIGRlIHRleHRlLCBldCBxdWVscXVlcyBhdXRyZXMgcGV0aXRzCisgICAgb3V0aWxzLgorICA8dGFnPm1ha2UgaW5zdGFsbDxsYWJlbCBpZD0ibWFrZS1pbnN0YWxsIj48L3RhZz4KKyAgICBDb21wbOh0ZSBsYSBjb21waWxhdGlvbiBldCBsYSBwaGFzZSBkJ+lkaXRpb24gZGUgbGllbnMgKHZvaXIgPHJlZiBpZD0ibWFrZS1hbGwiIG5hbWU9Im1ha2UgYWxsIj4pLCBldAorICAgIGluc3RhbGxlIGFsb3JzIGwnZXjpY3V0YWJsZSBCUkxUVFksIHNlcyBmaWNoaWVycyBkZSBkb25u6WVzCisgICAgKGRhdGEpLCBwaWxvdGVzIGV0IHBhZ2VzIGQnYWlkZSwgYXV4IGVtcGxhY2VtZW50cyBjb3JyZWN0cyBldCBhdmVjCisgICAgbGVzIGJvbm5lcyBwZXJtaXNzaW9ucy4KKyAgPHRhZz5tYWtlIHVuaW5zdGFsbDxsYWJlbCBpZD0ibWFrZS11bmluc3RhbGwiPjwvdGFnPgorICAgIEVubOh2ZSBkdSBzeXN06G1lIGwnZXjpY3V0YWJsZSBCUkxUVFksIHNlcyBmaWNoaWVycyBkZSBkb25u6WVzLAorICAgIHBpbG90ZXMgZXQgcGFnZXMgZGUgbWFudWVsLgorICA8dGFnPm1ha2UgY2xlYW48bGFiZWwgaWQ9Im1ha2UtY2xlYW4iPjwvdGFnPgorICAgIEdhcmFudGl0IHF1ZSBsYSBjb21waWxhdGlvbiDgIHZlbmlyIGV0IGwn6WRpdGlvbiBkZSBsaWVucyAodm9pciBzZWUgPHJlZgorICAgIGlkPSJtYWtlLWFsbCIgbmFtZT0ibWFrZSBhbGwiPikKKyAgICBzZSBmZXJvbnQg4CB2aWRlIGVuIGVubGV2YW50IGxlcyBy6XN1bHRhdHMgZGUgbGEKKyAgICBjb21waWxhdGlvbiBwculj6WRlbnRlLCBlbiBsaWFudCBldCBlbiB0ZXN0YW50IGRlcHVpcyBsYSBzdHJ1Y3R1cmUgZHUKKyAgICBy6XBlcnRvaXJlIHNvdXJjZS4gQ2VsYSBjb21wcmVuZCBsYSBzdXBwcmVzc2lvbiBkZXMgZmljaGllcnMKKyAgICBvYmpldHMsIGRlcyBleOljdXRhYmxlcywgZGVzIG9iamV0cyBkeW5hbWlxdWVzLCBkZXMgbGlzdGVzIGRlCisgICAgcGlsb3RlLCBkZXMgcGFnZXMgZGUgbWFudWVsLCBkZXMgZmljaGllcnMgZCdlbi106nRlIHRlbXBvcmFpcmVzLAorICAgIGV0IGRlcyBmaWNoaWVycyBsaelzLgorICA8dGFnPm1ha2UgZGlzdGNsZWFuPGxhYmVsIGlkPSJtYWtlLWRpc3RjbGVhbiI+PC90YWc+CisgICAgQXUtZGVs4CBkZSBsYSBzdXBwcmVzc2lvbiBkZXMgculzdWx0YXRzIGRlIGxhIGNvbXBpbGF0aW9uIHBy6WPpZGVudGUgZXQgZGUKKyAgICBsJ2VkaXRpb24gZGUgbGllbnMgKHZvaXIgPHJlZiBpZD0ibWFrZS1jbGVhbiIgbmFtZT0ibWFrZSBjbGVhbiI+KToKKyAgICA8aXRlbWl6ZT4KKyAgICAgIDxpdGVtPgorCisgICAgICAgIFN1cHByaW1lIGxlcyBy6XN1bHRhdHMgZGUgbGEgY29uZmlndXJhdGlvbiBkZSBCUkxUVFkgKHZvaXIKKyAgICAgICAgPHJlZiBpZD0iYnVpbGQiIG5hbWU9Ik9wdGlvbnMgZGUgY29tcGlsYXRpb24iPikuICBDZWxhIGluY2x1dCBsYSBzdXBwcmVzc2lvbiBkZQorICAgICAgICA8dHQ+Y29uZmlnLm1rPC90dD4sIDx0dD5jb25maWcuaDwvdHQ+LAorICAgICAgICA8dHQ+Y29uZmlnLmNhY2hlPC90dD4sIDx0dD5jb25maWcuc3RhdHVzPC90dD4sIGV0IDx0dD5jb25maWcubG9nPC90dD4uCisgICAgICA8aXRlbT4KKyAgICAgICAgU3VwcHJpbWUgbGVzIGF1dHJlcyBmaWNoaWVycyBkZSBsYSBzdHJ1Y3R1cmUgZHUgculwZXJ0b2lyZQorICAgICAgICBzb3VyY2UsIHF1aSBwcmVubmVudCBiZWF1Y291cCBkZSBwbGFjZSBtYWlzIHF1aSBuZSBsZXVyCisgICAgICAgIGFwcGFydGllbnQgcGFzLiBDZWxhIGluY2x1dCBsYSBzdXBwcmVzc2lvbiBkZSBmaWNoaWVycyDpZGl0ZXVyIGRlIHNhdXZlZ2FyZGUgKGJhY2t1cCksIHLpc3VsdGF0cyBkZSB0ZXN0LCBsZXMgcmVsaXF1YXRzIGR1IHBhdGNoLCBldCBjb3BpZXMgZGUgZmljaGllcnMgc291cmNlIG9yaWdpbmF1eC4KKyAgICA8L2l0ZW1pemU+Cis8L2Rlc2NyaXA+CisKKzxzZWN0MT5UZXN0ZXIgQlJMVFRZPHA+CitBcHLocyBsYSBjb21waWxhdGlvbiwgbCfpZGl0aW9uIGRlIGxpZW5zLCBldCBsJ2luc3RhbGxhdGlvbiBkZSBCUkxUVFksCitjJ2VzdCBwZXV0Lep0cmUgdW5lIGJvbm5lIGlk6WUgZGUgZmFpcmUgdW4gcGV0aXQgdGVzdCBhdmFudCBkZQorbCdhY3RpdmVyIGVuIHBlcm1hbmVuY2UuIFBvdXIgY2VsYSwgYXBwZWxlei1sZSBhdmVjOgorCis8dHNjcmVlbj5icmx0dHkgLWI8ZW0+cGlsb3RlPC9lbT4gLWQ8ZW0+cOlyaXBo6XJpcXVlPC9lbT48L3RzY3JlZW4+CitQb3VyIDxlbT5waWxvdGU8L2VtPiwgc3DpY2lmaWV6IGxlcyBkZXV4IGxldHRyZXMgZHUgPHJlZiBpZD0iZHJpdmVycyIKK25hbWU9ImNvZGUgZCdpZGVudGlmaWNhdGlvbiBkZSBwaWxvdGUiPiBjb3JyZXNwb25kYW50IOAgdm90cmUKK2FmZmljaGV1ciBicmFpbGxlLiBQb3VyIDxlbT5w6XJpcGjpcmlxdWU8L2VtPiwgc3DpY2lmaWV6IGxlIGNoZW1pbiBjb21wbGV0CitkdSBw6XJpcGjpcmlxdWUgYXVxdWVsIHZvdHJlIGFmZmljaGV1ciBicmFpbGxlIGVzdCBjb25uZWN06S4KKworU2kgdm91cyBuZSB2b3VsZXogcGFzIGlkZW50aWZpZXIgZXhwbGljaXRlbWVudCBsZSBwaWxvdGUgZXQgbGUKK3DpcmlwaOlyaXF1ZSDgIGNoYXF1ZSBmb2lzIHF1ZSB2b3VzIGTpbWFycmV6IEJSTFRUWSwgdm91cyBwb3V2ZXoKK3Byb2PpZGVyIGRlIGRldXggZmHnb25zLiBWb3VzIHBvdXZleiDpdGFibGlyIGRlcyBwYXJhbeh0cmVzIHN5c3TobWUKK3BhciBk6WZhdXQgdmlhIGxlcyBsaWduZXMgPHJlZiBpZD0iY29uZmlndXJlLWJyYWlsbGUtZHJpdmVyIiBuYW1lPSJicmFpbGxlLWRyaXZlciI+IGV0IDxyZWYgaWQ9ImNvbmZpZ3VyZS1icmFpbGxlLWRldmljZSIgbmFtZT0iYnJhaWxsZS1kZXZpY2UiPiBkdQorZmljaGllciBkZSBjb25maWd1cmF0aW9uLCBldC9vdSBjb21waWxlciB0b3V0IGNlIGRvbnQgdm91cyBhdmV6IGJlc29pbgorZGFucyBCUkxUVFkgdmlhIGxlcyBvcHRpb25zIGRlIGNvbXBpbGF0aW9uIDxyZWYgaWQ9ImJ1aWxkLWJyYWlsbGUtZHJpdmVyIiBuYW1lPSItLXdpdGgtYnJhaWxsZS1kcml2ZXIiPgorZXQgPHJlZiBpZD0iYnVpbGQtYnJhaWxsZS1kZXZpY2UiIG5hbWU9Ii0td2l0aC1icmFpbGxlLWRldmljZSI+LgorCitTaSB0b3V0IHZhIGJpZW4sIGxlIG1lc3NhZ2UgZCdpZGVudGlmaWNhdGlvbiBkZSBCUkxUVFkgZGV2cmFpdAorYXBwYXJh7nRyZSBzdXIgbCdhZmZpY2hldXIgYnJhaWxsZSBwZW5kYW50IHF1ZWxxdWVzIHNlY29uZGVzICh2b2lyCitsJ29wdGlvbiA8cmVmIGlkPSJvcHRpb25zLW1lc3NhZ2UtdGltZW91dCIgbmFtZT0iLU0iPiBkZSBsYSBsaWduZSBkZSBjb21tYW5kZSkuIEFwcuhzIHF1J2lsIGFpdCBkaXNwYXJ1LCAoY2UKK3F1ZSB2b3VzIHBvdXZleiBhY2PpbOlyZXIgZW4gYXBwdXlhbnQgc3VyIG4naW1wb3J0ZSBxdWVsbGUgdG91Y2hlIGRlCitsJ2FmZmljaGV1ciksIGxhIHpvbmUgZGUgbCfpY3JhbiBv+SBsZSBjdXJzZXVyIHNlIHNpdHVlIGRldnJhaXQKK2FwcGFyYe50cmUuIENlbGEgc2lnbmlmaWUgcXVlIHZvdXMgZGV2cmlleiB2b3VzIGF0dGVuZHJlIOAgdm9pcgorcydhZmZpY2hlciBsZXMgY29tbWFuZGUgZHUgc2hlbGwuIEFsb3JzLCBjb21tZSB2b3VzIGF2ZXogZW50cukgdm90cmUKK2NvbW1hbmRlIHBy6WPpZGVudGUsIGNoYXF1ZSBjYXJhY3TocmUgZGV2cmFpdCBhcHBhcmHudHJlIHN1cgorbCdhZmZpY2hldXIgZOhzIHF1J2lsIGVzdCB0YXDpIHN1ciBsZSBjbGF2aWVyLgorCitTaSBsZXMgY2hvc2VzIHNlIHBhc3NlbnQgYWluc2ksIGFycup0ZXogbCdleOljdXRpb24gZGUgQlJMVFRZLCBldAorculqb3Vpc3Nlei12b3VzLiBTaW5vbiwgaWwgcGV1dCDqdHJlIG7pY2Vzc2FpcmUgZGUgdGVzdGVyIGNoYXF1ZSBwaWxvdGUKK3PpcGFy6W1lbnQgZGUgZmHnb24g4CBpc29sZXIgbGEgc291cmNlIGR1IHByb2Js6G1lLiBWb3VzIHBvdXZleiB0ZXN0ZXIKK2xlIHBpbG90ZSBkZSBsJ+ljcmFuIHBhciA8cmVmIGlkPSJ1dGlsaXR5LXNjcnRlc3QiIG5hbWU9InNjcnRlc3QiPiwgZXQgY2VsdWkgZGUgbCdhZmZpY2hldXIgYnJhaWxsZQorcGFyIDxyZWYgaWQ9InV0aWxpdHktYnJsdGVzdCIgbmFtZT0iYnJsdGVzdCI+LgorCitTaSB2b3VzIHJlbmNvbnRyZXogdW4gcHJvYmzobWUgcXVpIG7pY2Vzc2l0ZSBkZSBmYXJmb3VpbGxlciwKK3ZvdXMgdm91ZHJleiBwZXV0Lep0cmUgZXjpY3V0ZXIgbGVzIG9wdGlvbnMgc3VpdmFudGVzIGRlIGxhIGxpZ25lIGRlIGNvbW1hbmRlIGRlCis8dHQ+YnJsdHR5PC90dD46Cis8aXRlbWl6ZT4KKyAgPGl0ZW0+CisgICAgLi4uPHJlZiBpZD0ib3B0aW9ucy1sb2ctbGV2ZWwiIG5hbWU9Ii1sZGVidWciPgorICAgIHBvdXIgbWV0dHJlIGRhbnMgdW4gam91cm5hbCBiZWF1Y291cCBkZSBtZXNzYWdlcyBkZSBkaWFnbm9zdGlxdWUuCisgIDxpdGVtPgorICAgIDxyZWYgaWQ9Im9wdGlvbnMtbm8tZGFlbW9uIiBuYW1lPSItbiI+CisgICAgcG91ciBtZXR0cmUgQlJMVFRZIGF1IHByZW1pZXIgcGxhbi4KKyAgPGl0ZW0+CisgICAgPHJlZiBpZD0ib3B0aW9ucy1zdGFuZGFyZC1lcnJvciIgbmFtZT0iLWUiPgorICAgIHBvdXIgZGlyaWdlciBsZXMgbWVzc2FnZXMgZGUgZGlhZ25vc3RpcXVlIHZlcnMgbCdlcnJldXIgc3RhbmRhcmQgZXQKKyAgICBub24gZGFucyBsZSBqb3VybmFsIHN5c3TobWUuCis8L2l0ZW1pemU+CisKKzxzZWN0MT5E6W1hcnJlciBCUkxUVFk8cD4KKworUXVhbmQgQlJMVFRZIGVzdCBjb3JyZWN0ZW1lbnQgaW5zdGFsbOksIG9uIGwnYXBwZWxsZSBwYXIgbGEgc2ltcGxlCitjb21tYW5kZSA8dHQ+YnJsdHR5PC90dD4uIFZvdXMgcG91dmV6IGNy6WVyIHVuIGZpY2hpZXIgZGUgY29uZmlndXJhdGlvbgorKHZvaXIgbGEgc2VjdGlvbiA8cmVmIGlkPSJjb25maWd1cmUiIG5hbWU9ImxlIGZpY2hpZXIgZGUgY29uZmlndXJhdGlvbiI+IHBvdXIgcGx1cyBkZSBk6XRhaWxzKQorYWZpbiBkZSBkJ+l0YWJsaXIgZGVzIHBhcmFt6HRyZXMgc3lzdOhtZSBwYXIgZOlmYXV0IHBvdXIgZGVzIGNob3NlcwordGVsbGVzIHF1ZSBsJ2VtcGxhY2VtZW50IGR1IGZpY2hpZXIgZGUgcHLpZulyZW5jZXMsIGxlIHBpbG90ZQorZCdhZmZpY2hldXIgYnJhaWxsZSDgIHV0aWxpc2VyLCBsZSBw6XJpcGjpcmlxdWUgYXVxdWVsIGwnYWZmaWNoZXVyCiticmFpbGxlIGVzdCBjb25uZWN06SwgZXQgbGEgdGFibGUgZGUgdGV4dGUg4CB1dGlsaXNlci4KK0JlYXVjb3VwIGQnb3B0aW9ucyAodm9pciBsYSBzZWN0aW9uIDxyZWYgaWQ9Im9wdGlvbnMiIG5hbWU9Ik9wdGlvbnMgZW4gbGlnbmUgZGUgY29tbWFuZGUiPgorcG91ciBwbHVzIGRlIGTpdGFpbHMpIHBlcm1ldHRlbnQgZGUgc3DpY2lmaWVyIGxvcnMgZGUgbCdleOljdXRpb24gZGVzCitjaG9zZXMgdGVsbGVzIHF1ZSBsZSBmaWNoaWVyIGRlIGNvbmZpZ3VyYXRpb24sIGxlcyBwYXJhbeh0cmVzIHBhcgorZOlmYXV0IGZpeOlzIGRhbnMgbGUgZmljaGllciBkZSBjb25maWd1cmF0aW9uLCBldCBxdWVscXVlcworY2FyYWN06XJpc3RpcXVlcyBxdWkgb250IGRlcyBwYXJhbeh0cmVzIHBhciBk6WZhdXQgcmFpc29ubmFibGVzIG1haXMKK2F2ZWMgbGVzcXVlbGxlcyBzZXVscyBjZXV4IHF1aSBwZW5zZW50IHNhdm9pciBjZSBxdSdpbHMgZm9udCBwZXV2ZW50Citzb3VoYWl0ZXIgbW9kaWZpZXIuIEwnb3B0aW9uIDxyZWYgaWQ9Im9wdGlvbnMtaGVscCIgbmFtZT0iLWgiPiBhZmZpY2hlIHVuIHLpc3Vt6SBkZSB0b3V0ZXMgbGVzCitvcHRpb25zLiBMJ29wdGlvbiA8cmVmIGlkPSJvcHRpb25zLXZlcnNpb24iIG5hbWU9Ii1WIj4gYWZmaWNoZSBsYSB2ZXJzaW9uIGNvdXJhbnRlIGR1IHByb2dyYW1tZSwKK2RlIGwnQVBJIGV0IGRlcyBwaWxvdGVzIHPpbGVjdGlvbm7pcy4gTCdvcHRpb24gYGAtdicnIGFmZmljaGUgbGVzIHZhbGV1cnMKK2RlcyBvcHRpb25zIGFwcuhzIHF1ZSB0b3V0ZXMgbGVzIHNvdXJjZXMgYWllbnQg6XTpIGV4YW1pbullcy4KKworQydlc3QgcHJvYmFibGVtZW50IG1pZXV4IGQnYXZvaXIgQlJMVFRZIGTpbWFycukgYXV0b21hdGlxdWVtZW50IHBhciBsZQorc3lzdOhtZSwgZOhzIGxhIHPpcXVlbmNlIGQnYW1vcudhZ2UsIGRlIGZh529uIOAgY2UKK3F1ZSBsJ2FmZmljaGV1ciBicmFpbGxlIHNvaXQgZOlq4CBwcup0IOAgZm9uY3Rpb25uZXIgcXVhbmQgbCdpbnZpdGUgZHUKK2xvZ2dpbmcgYXBwYXJh7nQuIExhIHBsdXBhcnQgKHByb2JhYmxlbWVudCB0b3V0ZXMpIGRlcyBkaXN0cmlidXRpb25zCitmb3Vybmlzc2VudCB1biBzY3JpcHQgZGFucyBsZXF1ZWwgbGVzIGFwcGxpY2F0aW9ucyBmb3VybmllcyBwYXIKK2wndXRpbGlzYXRldXIgcGV1dmVudCDqdHJlIGTpbWFycullcyBlbiBz6WN1cml06SwgcHJlc3F1J+AgbGEgZmluIGRlCitsYSBz6XF1ZW5jZSBkZSBib290LiBMZSBub20gZGUgY2Ugc2NyaXB0IGTpcGVuZCBkZSB2b3RyZQorZGlzdHJpYnV0aW9uLiBWb2ljaSBjZWxsZXMgcXVlIG5vdXMgY29ubmFpc3NvbnM6Cis8ZGVzY3JpcD4KKyAgPHRhZz5SZWQgSGF0PC90YWc+CisgICAgPHR0Pi9ldGMvcmMuZC9yYy5sb2NhbDwvdHQ+Cis8L2Rlc2NyaXA+CisKK0MnZXN0IHVuZSBib25uZSBpZOllIHF1ZSBkZSBk6W1hcnJlciBCUkxUVFkgZGVwdWlzIGNlIHNjcmlwdCAoc3VydG91dAorcG91ciBsZXMgbm91dmVhdXggdXRpbGlzYXRldXJzKS4gQWp1c3RleiBzaW1wbGVtZW50IGRlcyBsaWduZXMgZHUKK3R5cGU6Cis8dHNjcmVlbj48dmVyYj4KK2lmIFsgLXggL2Jpbi9icmx0dHkgLWEgLWYgL2V0Yy9icmx0dHkuY29uZiBdCit0aGVuCisgICAvYmluL2JybHR0eQorZmkKKzwvdmVyYj48L3RzY3JlZW4+CitOb3JtYWxlbWVudCwgY2VsYSBwZXV0IHMnYWJy6WdlciBlbiB1bmUgZm9ybWUgdW4gcGV1IG1vaW5zCitsaXNpYmxlIGR1IHR5cGU6Cis8dHNjcmVlbj48dmVyYj4gCitbIC14IC9iaW4vYnJsdHR5IC1hIC1mIC9ldGMvYnJsdHR5LmNvbmYgXSAmJiAvYmluL2JybHR0eQorPC92ZXJiPjwvdHNjcmVlbj4KK04nYWpvdXRleiBwYXMgY2VzIGxpZ25lcyBhdmFudCBsYSBwcmVtaehyZSBsaWduZSAocXVpIHJlc3NlbWJsZQorZ+lu6XJhbGVtZW50IOAgPHR0PiZudW07IS9iaW4vc2g8L3R0PikuCisKK1NpIGwnYWZmaWNoZXVyIGJyYWlsbGUgZG9pdCDqdHJlIHV0aWxpc+kgcGFyIHVuIGFkbWluaXN0cmF0ZXVyIHN5c3TobWUsIGlsCitkZXZyYWl0IHByb2JhYmxlbWVudCDqdHJlIGTpbWFycukgbGUgcGx1cyB09HQgcG9zc2libGUsIHBlbmRhbnQgbGEKK3PpcXVlbmNlIGRlIGJvb3QgKGNvbW1lIHBhciBleGVtcGxlIGF2YW50IHF1ZSBsZXMgc3lzdOhtZXMgZGUgZmljaGllcgorbmUgc29pZW50IHbpcmlmaelzKSBhZmluIHF1ZSBsJ2FmZmljaGV1ciBzb2l0IHV0aWxpc2FibGUgc2kgcXVlbHF1ZQorY2hvc2UgbmUgdmEgcGFzIGRhbnMgY2VzIHRlc3RzIGV0IHF1ZSBsZSBzeXN06G1lIGJhc2N1bGUgZW4gbW9kZQorbW9uby11dGlsaXNhdGV1ci4gRGUgbm91dmVhdSwgbOAgb/kgaWwgZXN0IGwnaWTpYWwgZGUgZmFpcmUgY2VsYQorZOlwZW5kIGRlIGxhIGRpc3RyaWJ1dGlvbi4gVm9pY2kgbGVzIGVtcGxhY2VtZW50cyBxdWUgbm91cyBjb25uYWlzc29uczoKKzxkZXNjcmlwPgorICA8dGFnPkRlYmlhbjwvdGFnPgorICAgIDx0dD4vZXRjL2luaXQuZC9ib290PC90dD4gKHBvdXIgbGVzIHZpZWlsbGVzIHZlcnNpb25zKQorICAgIDxuZXdsaW5lPgorICAgIDx0dD4vZXRjL2luaXQuZC88L3R0PiAocG91ciBsZXMgdmVyc2lvbnMgculjZW50ZXMpCisgICAgPG5ld2xpbmU+CisgICAgVW4gcGFxdWV0IDx0dD5icmx0dHk8L3R0PiBlc3QgZm91cm5pCisgICAgKHZvaXIgWzxodG1sdXJsIHVybD0iaHR0cDovL3BhcXVldHMuZGViaWFuLm9yZy9icmx0dHkiIG5hbWU9Imh0dHA6Ly9wYXF1ZXRzLmRlYmlhbi5vcmcvYnJsdHR5Ij5dKQorICAgIGVuIHRhbnQgcXVlIHZlcnNpb24gPHR0PjMuMDwvdHQ+ICg8dHQ+V29vZHk8L3R0PikuCisgICAgQ29tbWUgY2UgcGFxdWV0IHByZW5kIHNvaW4gZHUgZOltYXJyYWdlIGRlIEJSTFRUWSwgaWwgbid5IGEgcGFzCisgICAgYmVzb2luIHBvdXIgbCd1dGlsaXNhdGV1ciBkZSBmb3VybmlyIHF1b2lxdWUgY2Ugc29pdCwgcydpbCBlc3QKKyAgICBpbnN0YWxs6S4gU2kgdm91cyBhdmV6IGJlc29pbiBxdWUgbGUgZOltb24gc2UgbGFuY2UgYXZlYyBkZXMgb3B0aW9ucyBlbiBsaWduZQorICAgIGRlIGNvbW1hbmRlLCB2b3VzIHBvdXZleiBtb2RpZmllciBsZSBjb250ZW51IGVudHJlIGd1aWxsZW1ldHMgZHUgZmljaGllcgorICAgIDx0dD4vZXRjL2RlZmF1bHQvYnJsdHR5PC8+LiBTaSB2b3VzIGF2ZXogYmVzb2luIHF1ZSBsZSBk6W1vbiBzZSBsYW5jZSBhdmVjIAorICAgIGRlcyBvcHRpb25zIGVuIGxpZ25lIGRlIGNvbW1hbmRlLCB2b3VzIHBvdXZleiBtb2RpZmllciBsZSBjb250ZW51IGVudHJlIAorICAgIGd1aWxsZW1ldHMgZGUgbGEgbGlnbmUgPHR0L0FSR1VNRU5UUy8gZHUgZmljaGllciA8dHQ+L2V0Yy9kZWZhdWx0L2JybHR0eTwvPi4KKyAgPHRhZz5SZWRIYXQ8L3RhZz4KKyAgICA8dHQ+L2V0Yy9yYy5kL3JjLnN5c2luaXQ8L3R0PgorICAgIDxuZXdsaW5lPgorICAgIFNhY2hleiBxdWUgbGVzIHZlcnNpb25zIHLpY2VudGVzLCBhZmluIGRlIHN1cHBvcnRlciB1bmUgcHJvY+lkdXJlCisgICAgZCdpbml0aWFsaXNhdGlvbiBkdSBzeXN06G1lIHBsdXMgb3JpZW506WUgdmVycyBsZXMgdXRpbGlzYXRldXJzLAorICAgIGZvbnQgcmFwcGVsZXIgY2Ugc2NyaXB0IHBhciBsdWktbeptZSBkZSB0ZWxsZSBzb3J0ZSBxdSdpbCBzb2l0CisgICAgc291cyBsZSBjb250cvRsZSBkZSA8dHQ+aW5pdGxvZzwvdHQ+LiBSZWNoZXJjaGV6IGRlcyBsaWduZXMgY29tbWUgY2VsbGVzLWNpOgorICAgIDx0c2NyZWVuPjx2ZXJiPgorICAgICMgUmVydW4gb3Vyc2VsdmVzIHRocm91Z2ggaW5pdGxvZworICAgIGlmIFsgLXogIiRJTl9JTklUTE9HIiBdOyB0aGVuCisgICAgICBbIC1mIC9zYmluL2luaXRsb2cgXSAmJiBleGVjIC9zYmluL2luaXRsb2cgJElOSVRMT0dfQVJHUyAtciAvZXRjL3JjLnN5c2luaXQKKyAgICBmaQorICAgIDwvdmVyYj48L3RzY3JlZW4+CisgICAgROltYXJyZXIgQlJMVFRZIGF2YW50IGNlIHJhcHBlbCBkb25uZSBkZXV4IHByb2Nlc3N1cyBCUkxUVFkgZW4KKyAgICBt6m1lIHRlbXBzLCBldCBjZWxhIHZvdXMgY2F1c2VyYSBkZXMgZm91bGVzIGRlIHByb2Js6G1lcy4gU2kgdm90cmUKKyAgICB2ZXJzaW9uIGRlIGNlIHNjcmlwdCBhIGNldHRlIGNhcmFjdOlyaXN0aXF1ZSwgYXNzdXJlei12b3VzIGRlCisgICAgZOltYXJyZXIgQlJMVFRZIGFwcuhzIGxlcyBsaWduZXMgcXVpIGxlIG1ldHRlbnQgZW4gYWN0aW9uLgorICA8dGFnPlNsYWNrd2FyZTwvdGFnPgorICAgIDx0dD4vZXRjL3JjLmQvcmMuUzwvdHQ+CisgIDx0YWc+U3VTRTwvdGFnPgorICAgIDx0dD4vc2Jpbi9pbml0LmQvYm9vdDwvdHQ+Cis8L2Rlc2NyaXA+CisKK1VuZSBhdXRyZSBzb2x1dGlvbiBlc3QgZGUgZOltYXJyZXIgQlJMVFRZIGRlcHVpcyAvZXRjL2luaXR0YWIuIFNpIHZvdXMKK2Nob2lzaXNzZXogY2V0dGUgc29sdXRpb24sIHZvdXMgYXZleiBkZXV4IHBvc3NpYmlsaXTpcy4KKzxpdGVtaXplPgorICA8aXRlbT4KKyAgICBTaSB2b3VzIHZvdWxleiBxdSdpbCBk6W1hcnJlIHZyYWltZW50IHRy6HMgdPR0LCBtYWlzIHF1ZSB2b3VzCisgICAgbidhdmV6IHBhcyBiZXNvaW4gcXUnaWwgc29pdCByZWTpbWFycukgYXV0b21hdGlxdWVtZW50IHMnaWwKKyAgICDpY2hvdWUsIGFqb3V0ZXogdW5lIGxpZ25lIGNvbW1lIGxhIHN1aXZhbnRlIGF2YW50IGxhIHByZW1p6HJlCisgICAgbGlnbmUgPHR0PjpzeXNpbml0OjwvdHQ+IHF1aSBlc3QgZOlq4CBkYW5zIGxlIGZpY2hpZXIuCisgIDxpdGVtPgorICAgIFVuZSBhdXRyZSBzb2x1dGlvbiBlc3QgZGUgZOltYXJyZXIgQlJMVFRZIGRlcHVpcyAvZXRjL2luaXR0YWIuIFNpCisgICAgdm91cyBjaG9pc2lzc2V6IGNldHRlIHNvbHV0aW9uLCB2b3VzIGF2ZXogZGV1eCBwb3NzaWJpbGl06XMuIFNpCisgICAgdm91cyB2b3VsZXogcXUnaWwgZOltYXJyZSB2cmFpbWVudCB0cuhzIHT0dCwgbWFpcyBxdWUgdm91cyBuJ2F2ZXoKKyAgICBwYXMgYmVzb2luIHF1J2lsIHNvaXQgcmVk6W1hcnLpIGF1dG9tYXRpcXVlbWVudCBlbiBjYXMgZCfpY2hlYywKKyAgICBham91dGV6IHVuZSBsaWduZSBjb21tZSBsYSBzdWl2YW50ZSBhdmFudCBsYSBwcmVtaehyZSBsaWduZQorICAgIDpzeXNpbml0OiBxdWkgZXN0IGTpauAgZGFucyBsZSBmaWNoaWVyLgorICAgIDx0c2NyZWVuPmJybDoxMjM0NTpyZXNwYXduOi9iaW4vYnJsdHR5IC1uPC90c2NyZWVuPgorCisgICAgTCdvcHRpb24gPHJlZiBpZD0ib3B0aW9ucy1uby1kYWVtb24iIG5hbWU9Ii1uIj4gKC0tbm9kYWVtb24pIHF1YW5kIEJSTFRUWSBlc3QgZXjpY3V06SBhdmVjIGxhCisgICAgZmFjaWxpdOkgcmVzcGF3biBkZSBsJ2luaXR0YWIuIFNpIHZvdXMgb3VibGlleiBkZSBsYQorICAgIHNw6WNpZmllciwgdm91cyBhbGxleiB2b3VzIHJldHJvdXZlciBhdmVjIGRlcyBjZW50YWluZXMgZGUKKyAgICBwcm9jZXNzdXMgQlJMVFRZLCB0b3VzIGV46WN1dOlzIGVuIG3qbWUgdGVtcHMuCis8L2l0ZW1pemU+CitW6XJpZmlleiBxdWUgbCdpZGVudGlmaWNhdGV1ciAoPHR0L2JybC8gZGFucyBjZXMgZXhlbXBsZXMpIG4nZXN0IHBhcyBk6WrgCit1dGlsaXPpIHBhciB1bmUgYXV0cmUgZW50cullLCBldCwgc2kgYydlc3QgbGUgY2FzLCBjaG9pc2lzc2V6LWVuIHVuCithdXRyZS4KKworUmVtYXJxdWV6IHF1J3VuZSBjb21tYW5kZSB0ZWxsZSBxdWUgPHR0PmtpbGwgLVRFUk08L3R0PiBzdWZmaXQgcG91ciBhcnLqdGVyCitCUkxUVFkgZGFucyBzZXMgb3DpcmF0aW9ucy4gU2ksIHBhciBleGVtcGxlLCBpbCBtZXVydCBsb3JzIGRlCitsJ2VudHLpZSBlbiBtb2RlIG1vbm8tdXRpbGlzYXRldXIsIGlsIHNlIHBvdXJyYWl0IGJpZW4gcXVlIGNlbGEgdmllbm5lCitkJ3VuIHByb2Js6G1lIGRlIGNldHRlIG5hdHVyZS4KKworQ2VydGFpbnMgc3lzdOhtZXMgcmVuY29udHJlbnQgZGVzIHByb2Js6G1lcyBzaSB1bmUgYXBwbGljYXRpb24gdGVudGUKK2QndXRpbGlzZXIgbGUgc291cy1zeXN06G1lIHNvbiBkdSBub3lhdSBhdmFudCBxdSdpbCBhaXQg6XTpCitpbml0aWFsaXPpLiBTaSB2b3RyZSBzeXN06G1lIGVuIGZhaXQgcGFydGllLCB2b3VzIGF1cmV6IHBldXQt6nRyZQorYmVzb2luIGRlIGTpc2FjdGl2ZXIgbGUgZOltYXJyYWdlIGF1dG9tYXRpcXVlIGR1IHBpbG90ZSBkZSBsYSBzeW50aOhzZQordm9jYWxlIGF2ZWMgbCdvcHRpb24gPHJlZiBpZD0ib3B0aW9ucy1uby1zcGVlY2giIG5hbWU9Ii1OIj4uCisKK0NlcnRhaW5zIHN5c3TobWVzLCBkYW5zIHVuZSDpdGFwZSBkZSBsZXVyIHPpcXVlbmNlIGRlIGJvb3QsIHRlc3RlbnQKKyhwcm9iZSkgbGVzIHBvcnRzIHPpcmllIChub3JtYWxlbWVudCBhZmluIGRlIGTpdGVjdGVyIGF1dG9tYXRpcXVlbWVudAorbGEgc291cmlzIGV0IGTpZHVpcmUgc29uIHR5cGUpLiBTaSB2b3RyZSBhZmZpY2hldXIgYnJhaWxsZSB1dGlsaXNlIHVuCitwb3J0IHPpcmllLCBjZSBnZW5yZSBkZSBk6XRlY3Rpb24gcGV1dCBzdWZmaXIg4CBsZSBn6m5lci4gU2kgY2VsYSB2b3VzCithcnJpdmUsIGVzc2F5ZXogZGUgcmVk6W1hcnJlciBsZSBwaWxvdGUgYnJhaWxsZSAodm9pciBsYSBjb21tYW5kZQorPHJlZiBpZD0iY29tbWFuZC1SRVNUQVJUQlJMIiBuYW1lPSJSRVNUQVJUQlJMIj4pLiBPdSBtaWV1eCwgZOlzYWN0aXZlciBsZSB0ZXN0IGR1IHBvcnQgc+lyaWUuIFZvaWNpIGNlCitxdWUgbm91cyBzYXZvbnMgc3VyIGxhIG1hbmnocmUgZGUgculhbGlzZXIgY2VsYToKKzxkZXNjcmlwPgorICA8dGFnPlJlZCBIYXQ8L3RhZz4KKyAgICBMZSB0ZXN0IHNlIGZhaXQgcGFyIHVuIHNlcnZpY2UgYXBwZWzpIDx0dD5rdWR6dTwvdHQ+LiBVdGlsaXNleiBsYSBjb21tYW5kZQorICAgIDx0c2NyZWVuPmNoa2NvbmZpZyAtLWxpc3Qga3VkenU8L3RzY3JlZW4+IHBvdXIgdm9pciBzJ2lsIGEg6XTpIGFjdGl26S4KKyAgICBVdGlsaXNleiBsYSBjb21tYW5kZSA8dHNjcmVlbj5jaGtjb25maWcga3VkenUgb2ZmPC90c2NyZWVuPiBwb3VyIGxlIGTpc2FjdGl2ZXIuCisgICAgTGVzIGRlcm5p6HJlcyB2ZXJzaW9ucyBwZXJtZXR0ZW50IGRlIGxhaXNzZXIgPHR0Pmt1ZHp1PC90dD4gcydleOljdXRlciBzYW5zCisgICAgdGVzdGVyIGxlcyBwb3J0cyBz6XJpZS4KKyAgICBQb3VyIGNlbGEsIOlkaXRleiBsZSBmaWNoaWVyIDx0dD4vZXRjL3N5c2NvbmZpZy9rdWR6dTwvdHQ+LCwgZXQgculnbGV6IDx0dD5TQUZFPC90dD4g4CA8dHQ+eWVzPC90dD4uCis8L2Rlc2NyaXA+CisKK1NpIHZvdXMgdm91bGV6IGTpbWFycmVyIEJSTFRUWSBhdmFudCBxdWUgbGVzIHN5c3TobWVzIGRlIGZpY2hpZXJzIG5lCitzb2llbnQgbW9udOlzLCBhc3N1cmV6LXZvdXMgcXVlIHRvdXMgbGV1cnMgY29tcG9zYW50cyBzb250IGluc3RhbGzpcworZGFucyBsZSBmaWNoaWVyIHJhY2luZSBkdSBzeXN06G1lLiBWb2lyIGxlcyBvcHRpb25zIGRlIGNvbXBpbGF0aW9uCis8cmVmIGlkPSJidWlsZC1leGVjdXRlLXJvb3QiIG5hbWU9Ii0td2l0aC1leGVjdXRlLXJvb3QiPiwKKzxyZWYgaWQ9ImJ1aWxkLXByb2dyYW0tZGlyZWN0b3J5IiBuYW1lPSItLWJpbmRpciI+LAorPHJlZiBpZD0iYnVpbGQtZGF0YS1kaXJlY3RvcnkiIG5hbWU9Ii0td2l0aC1kYXRhLWRpcmVjdG9yeSI+LAorZXQgPHJlZiBpZD0iYnVpbGQtbGlicmFyeS1kaXJlY3RvcnkiIG5hbWU9Ii0tbGliZGlyIj4gcmVmIGlkPSJidWlsZC1leGVjdXRlLXJvb3QiIG5hbWU9Ii0td2l0aC13cml0YWJsZS1kaXJlY3RvcnkiPiBldCByZWYgaWQ9ImJ1aWxkLWV4ZWN1dGUtcm9vdCIgbmFtZT0iLS13aXRoLWRhdGEtZGlyZWN0b3J5JycgYnVpbGQiPi4KKworPHNlY3QxPkNvbnNpZOlyYXRpb25zIHN1ciBsYSBz6WN1cml06TxwPgorTCdleOljdXRpb24gZGUgQlJMVFRZIG7pY2Vzc2l0ZSBsZXMgcHJpdmls6GdlcyByb290IHBhcmNlIHF1ZSBsZQorcHJvZ3JhbW1lIGEgYmVzb2luLCBsb3JzcXUnaWwgcydleOljdXRlLCBkZXMgZHJvaXRzIGQnYWNj6HMgZGUgbGVjdHVyZQorZXQgZCfpY3JpdHVyZSBwb3VyIGxlIHBvcnQgYXVxdWVsIGwnYWZmaWNoZXVyIGJyYWlsbGUgZXN0IGNvbm5lY3TpLAorbGVzIGRyb2l0cyBkJ2FjY+hzIGVuIGxlY3R1cmUg4CAvZGV2L3Zjc2Egb3Ug6XF1aXZhbGVudCAocG91ciBhdm9pcgorbGVzIGRpbWVuc2lvbnMgZGUgbCfpY3JhbiBldCBsYSBwb3NpdGlvbiBkdSBjdXJzZXVyLCBldCBwb3VyIHJldm9pciBsZQorY29udGVudSBldCBsZXMgY2hvc2VzIG1pc2VzIGVuIHZhbGV1ciBzdXIgbCfpY3JhbiBjb3VyYW50KSwgYWluc2kgcXVlCitsZXMgYWNj6HMgZW4gbGVjdHVyZSBldCDpY3JpdHVyZSDgIGxhIGNvbnNvbGUgc3lzdOhtZSAocG91ciBsJ2VudHLpZQorZGVzIGZs6GNoZXMgZGUgZGlyZWN0aW9uIHBlbmRhbnQgbGUgZOlwbGFjZW1lbnQgZHUgY3Vyc2V1cikgcG91cgorbCdpbnNlcnRpb24gZGUgY2FyYWN06HJlcyBsb3JzIGR1IENvbGxlciwgcG91ciBsYSBzaW11bGF0aW9uIGRlCit0b3VjaGVzIHNw6WNpYWxlcyBlbiB1dGlsaXNhbnQgY2VsbGVzIGRlIGwnYWZmaWNoZXVyIGJyYWlsbGUsIHBvdXIgbGEKK3JlY2hlcmNoZSBkZSB0cmFkdWN0aW9uIGRlcyBjYXJhY3TocmVzIGVuIHNvcnRpZSBldCBsZXMgdGFibGVzIGZhaXNhbnQKK2xhIGNvcnJlc3BvbmRhbmNlIGRlcyBwb2xpY2VzIGRlIGwn6WNyYW4sIGV0IHBvdXIgbCdhY3RpdmF0aW9uCitkdSBiZWVwZXIgaW50ZXJuZSkuIFZvdXMgcG91dmV6LCBiaWVuIGVudGVuZHUsIGF1dG9yaXNlciBsZXMKK3V0aWxpc2F0ZXVycyBvcmRpbmFpcmVzIOAgYWNj6WRlciBhdXggcOlyaXBo6XJpcXVlcyBu6WNlc3NhaXJlcywgZW4KK2NoYW5nZWFudCBsZXMgcGVybWlzc2lvbnMgZHUgZmljaGllciBhc3NvY2npIGF1Citw6XJpcGjpcmlxdWUuIFRvdXRlZm9pcywgbGUgc2ltcGxlIGFjY+hzIOAgbGEgY29uc29sZSBuZSBzdWZmaXQgcGFzCitjYXIgbCdhY3RpdmF0aW9uIGR1IGJlZXBlciBpbnRlcm5lIGV0IGRlcyBmb25jdGlvbnMgZGUKK3NpbXVsYXRpb24gZHUgY2xhdmllciByZXF1aWVydCBsZXMgcHJpdmls6GdlcyByb290LiBBaW5zaSwgc2kgdm91cwordm91bGV6IGFycup0ZXIgbGUgZOlwbGFjZW1lbnQgZHUgY3Vyc2V1ciwgdXRpbGlzZXIgQ29waWVyL0NvbGxlciBsZXMKK2JlZXAgZXQgdG91dCBjZWxhLCB2b3VzIHBvdXZleiBleOljdXRlciBCUkxUVFkgc2FucyBsZXMgcHJpdmls6Gdlcworcm9vdC4KKworPHNlY3QxPlJlc3RyaWN0aW9ucyBhcHBsaWNhYmxlcyDgIGxhIGNvbXBpbGF0aW9uIGV0IOAgbCdleOljdXRpb248cD4KKzxkZXNjcmlwPgorICA8dGFnPmxlcyBiZWVwcyBkJ0FsZXJ0ZTwvdGFnPjxsYWJlbCBpZD0icmVzdHJpY3Rpb24tdHVuZXMiPgorICAgIENlcnRhaW5lcyBwbGF0ZWZvcm1lcyBuZSBzdXBwb3J0ZW50IHBhcyB0b3VzIGxlcyBw6XJpcGjpcmlxdWVzCisgICAgc29ub3Jlcy4gVm9pciA8cmVmIGlkPSJwcmVmZXJlbmNlLXR1bmUtZGV2aWNlIiBuYW1lPSJQ6XJpcGjpcmlxdWUgcG91ciBsZSBzb24iPiBwb3VyIHBsdXMgZGUgZOl0YWlscy4KKyAgPHRhZz5QaWxvdGUgcG91ciBsYSBzeW50aOhzZSBGZXN0aXZhbExpdGU8L3RhZz48bGFiZWwgaWQ9InJlc3RyaWN0aW9ucy1mbGl0ZSI+CisgICAgTGUgcGlsb3RlIHBvdXIgbGUgbW90ZXVyIEZlc3RpdmFsTGl0ZSBuJ2VzdCBjb21waWzpCisgICAgcXVlIHNpIGNlIHBhcXVldCBhIOl06SBpbnN0YWxs6S4KKworICAgIENlIHBpbG90ZSBldCBjZWx1aSBwb3VyIGxlIG1vdGV1ciBUaGV0YSAodm9pcgorICAgIGwnb3B0aW9uIGRlIGNvbXBpbGF0aW9uIGBgLS13aXRoLXRoZXRhJycpIG5lIHBldXZlbnQg6nRyZSBsaelzCisgICAgdG91cyBsZXMgZGV1eCDgIGwnZXjpY3V0YWJsZSBCUkxUVFkgKHZvaXIgbCdvcHRpb24gZGUgY29tcGlsYXRpb24KKyAgICA8cmVmIGlkPSJidWlsZC10aGV0YSIgbmFtZT0iLS13aXRoLXNwZWVjaC1kcml2ZXIiPikgY2FyIGxlcyBiaWJsaW90aOhxdWVzIG7pY2Vzc2FpcmVzIOAgbGV1cgorICAgIGV46WN1dGlvbiBjb250aWVubmVudCBkZXMg6WzpbWVudHMgY29uZmxpY3R1ZWxzLgorICA8dGFnPlBpbG90ZSBwb3VyIGwnYWZmaWNoZXVyIGJyYWlsbGUgTGliYnJhaWxsZTwvdGFnPjxsYWJlbCBpZD0icmVzdHJpY3Rpb25zLW1pa3JvcHVoZSI+CisgICAgTGUgcGlsb3RlIHBvdXIgbGUgcGFxdWV0IGxpYmJyYWlsbGUgbidlc3QgY29tcGls6SBxdWUgc2kgbGUgcGFxdWV0IGEKKyAgICDpdOkgaW5zdGFsbOkuICAgCisgIAorICA8dGFnPlBpbG90ZSBwb3VyIGxhIHN5bnRo6HNlIE1pa3JvcHVoZTwvdGFnPjxsYWJlbCBpZD0icmVzdHJpY3Rpb25zLW1pa3JvcHVoZSI+CisgICAgTGUgcGlsb3RlIHBvdXIgbGUgbW90ZXVyIE1pa3JvcHVoZSBuJ2VzdCBjb21waWzpCisgICAgcXVlIHNpIGNlIHBhcXVldCBhIOl06SBpbnN0YWxs6S4KKworICAgIFZvdXMgbmUgcG91dmV6IGluY2x1cmUgY2UgcGlsb3RlIHNpIGwnZXjpY3V0YWJsZSBCUkxUVFkgZXN0IGxp6QorICAgIHN0YXRpcXVlbWVudCAodm9pciBsJ29wdGlvbiBkZSBjb21waWxhdGlvbgorICAgIDxyZWYgaWQ9ImJ1aWxkLXN0YW5kYWxvbmUtcHJvZ3JhbXMiIG5hbWU9Ii0tZW5hYmxlLXN0YW5kYWxvbmUtcHJvZ3JhbXMiPikgY2FyIGxlIHBhcXVldCBuJ2luY2x1dCBwYXMKKyAgICBkZSBiaWJsaW90aOhxdWUgc3RhdGlxdWUuCisgIDx0YWc+TGUgcGlsb3RlIHBvdXIgbGEgc3ludGjoc2UgVGhldGE8L3RhZz48bGFiZWwgaWQ9InJlc3RyaWN0aW9ucy10aGV0YSI+CisgICAgTGUgcGlsb3RlIHBvdXIgbGUgbW90ZXVyIFRoZXRhIG4nZXN0IGNvbXBpbOkgcXVlIHNpCisgICAgY2UgcGFxdWV0IGEg6XTpIGluc3RhbGzpLgorCisgICAgQ2UgcGlsb3RlIGV0IGNlbHVpIHBvdXIgbGUgbW90ZXVyIEZlc3RpdmFsTGl0ZQorICAgICh2b2lyIGwnb3B0aW9uIGRlIGNvbXBpbGF0aW9uIDxyZWYgaWQ9ImJ1aWxkLWZsaXRlIiBuYW1lPSItLXdpdGgtZmxpdGUiPikgbmUgcGV1dmVudCDqdHJlCisgICAgbGnpcyB0b3VzIGxlcyBkZXV4IOAgbCdleOljdXRhYmxlIEJSTFRUWSAodm9pciBsJ29wdGlvbiBkZQorICAgIGNvbXBpbGF0aW9uIDxyZWYgaWQ9ImJ1aWxkLXNwZWVjaC1kcml2ZXIiIG5hbWU9Ii0td2l0aC1zcGVlY2gtZHJpdmVyIj4pIGNhciBsZXMgYmlibGlvdGjocXVlcworICAgIG7pY2Vzc2FpcmVzIOAgbGV1ciBleOljdXRpb24gY29udGllbm5lbnQgZGVzIOls6W1lbnRzIGNvbmZsaWN0dWVscy4KKworICAgIFNpIGNlIHBpbG90ZSBlc3QgY29tcGls6SBjb21tZSBvYmpldCBkeW5hbWlxdWUsIHZvdXMgZGV2ZXoKKyAgICByYWpvdXRlciA8dHQ+JFRIRVRBX0hPTUUvbGliPC90dD4g4CBsYSB2YXJpYWJsZSBkJ2Vudmlyb25uZW1lbnQKKyAgICA8dHQ+TERfTElCUkFSWV9QQVRIPC90dD4gYXZhbnQgcXVlIEJSTFRUWSBuZSBzb2l0IGFwcGVs6SwgY2FyIGxlcyBvYmpldHMg4AorICAgIGwnaW506XJpZXVyIGR1IHBhcXVldCBuZSBjb250aWVubmVudCBwYXMgbGVzIGNoZW1pbnMgZGUgcmVjaGVyY2hlCisgICAgcG91ciBsJ2V46WN1dGlvbiBldCBsZXVycyBk6XBlbmRhbmNlcy4KKyAgPHRhZz5WaWFWb2ljZSBTcGVlY2ggU3ludGhlc2l6ZXIgRHJpdmVyPC90YWc+PGxhYmVsIGlkPSJyZXN0cmljdGlvbnMtdmlhdm9pY2UiPgorICAgIExlIHBpbG90ZSBwb3VyIGxlIG1vdGV1ciBWaWFWb2ljZSBuJ2VzdCBjb21waWzpIHF1ZQorICAgIHNpIGNlIHBhcXVldCBhIOl06SBpbnN0YWxs6S4KKworICAgIFZvdXMgbmUgcG91dmV6IGluY2x1cmUgY2UgcGlsb3RlIHNpIGwnZXjpY3V0YWJsZSBCUkxUVFkgZXN0IGxp6QorICAgIHN0YXRpcXVlbWVudCAodm9pciBsJ29wdGlvbiBkZSBjb21waWxhdGlvbgorICAgIHRoZSA8cmVmIGlkPSJidWlsZC1zdGFuZGFsb25lLXByb2dyYW1zIiBuYW1lPSItLWVuYWJsZS1zdGFuZGFsb25lLXByb2dyYW1zIj4pIGNhciBsZSBwYXF1ZXQgbidpbmNsdXQgcGFzCisgICAgZGUgYmlibGlvdGjocXVlIHN0YXRpcXVlLgorICA8dGFnPlBpbG90ZSBwb3VyIGwnYWZmaWNoZXVyIGJyYWlsbGUgVmlkZW9CcmFpbGxlPC90YWc+PGxhYmVsIGlkPSJyZXN0cmljdGlvbnMtdmlkZW9icmFpbGxlIj4KKyAgICBMZSBwaWxvdGUgcG91ciBsJ2FmZmljaGV1ciBicmFpbGxlIFZpZGVvQnJhaWxsZSBlc3QgY29tcGls6SBzdXIKKyAgICB0b3VzIGxlcyBzeXN06G1lcywgbWFpcyBuZSBmb25jdGlvbm5lIHF1ZSBzdXIgTGludXguCis8L2Rlc2NyaXA+CisKKzxzZWN0MT5JbnN0YWxsYXRpb24g4CBwYXJ0aXIgZCd1biBmaWNoaWVyIFJQTTxsYWJlbCBpZD0icnBtIj48cD4KK1BvdXIgaW5zdGFsbGVyIEJSTFRUWSDgIHBhcnRpciBkJ3VuIGZpY2hpZXIgUlBNIChSZWRIYXQgcGFxdWV0CitNYW5hZ2VyKSwgcHJvY+lkZXIgY29tbWUgc3VpdDoKKzxlbnVtPgorICA8aXRlbT4KKyAgICBU6WzpY2hhcmdleiBsZSBwYXF1ZXQgZXjpY3V0YWJsZSBjb3JyZXNwb25kYW50IOAgdm90cmUKKyAgICBtYXTpcmllbC4gQ2Ugc2VyYSB1biBmaWNoaWVyIG5vbW3pCisgICAgPHR0PmJybHR0eS08L3R0PjxlbT52ZXJzaW9uPC9lbT48dHQ+LTwvdHQ+PGVtPnZlcnNpb248L2VtPjx0dD4uPC90dD48ZW0+YXJjaGl0ZWN0dXJlPC9lbT48dHQ+LnJwbTwvdHQ+LAorICAgIHBhciBleGVtcGxlLCA8dHQ+YnJsdHR5LTMuMC0xLmkzODYucnBtPC90dD4uCisgIDxpdGVtPgorICAgIEluc3RhbGxleiBsZSBwYXF1ZXQuCisgICAgPHRzY3JlZW4+cnBtIC1VdmggYnJsdHR5LTxlbT52ZXJzaW9uPC9lbT4tPGVtPnZlcnNpb248L2VtPi48ZW0+YXJjaGl0ZWN0dXJlPC9lbT4ucnBtPC90c2NyZWVuPgorICAgIFZvdXMgZGV2ZXogZmFpcmUgY2VsYSBlbiB0YW50IHF1ZSA8YmY+cm9vdDwvYmY+LgorCisgICAgQSBwcm9wcmVtZW50IHBhcmxlciwgbCdvcHRpb24gPHR0Pi1VPC90dD4gKFVwZGF0ZSkgZXN0IGxhIHNldWxlCisgICAgbuljZXNzYWlyZS4gTCdvcHRpb24gPHR0Pi12PC90dD4gKHZlcmJvc2UpIGFmZmljaGUgbGUgbm9tIGR1IHBhcXVldAorICAgIGxvcnNxdSdpbCB2YSDqdHJlIGluc3RhbGzpLiBMJ29wdGlvbiA8dHQ+LWg8L3R0PiAoaGFzaGVzKSBhZmZpY2hlIHVuZSBiYXJyZQorICAgIGRlIHByb2dyZXNzaW9uICh1dGlsaXNhbnQgZGVzIGhhY2h1cmVzKS4KKzwvZW51bT4KK1BvdXIgbGVzIGdlbnMgY291cmFnZXV4LCBub3VzIGZvdXJuaXNzb25zIGxlIGZpY2hpZXIgUlBNIHNvdXJjZQorKDx0dD4uc3JjLnJwbTwvdHQ+KSBtYWlzIGNlbGEgZOlwYXNzZSBsJ29iamVjdGlmIGRlIGNlIGRvY3VtZW50LgorCitQb3VyIGTpc2luc3RhbGxlciBCUkxUVFksIGZhaXRlczoKKzx0c2NyZWVuPnJwbSAtZSBicmx0dHk8L3RzY3JlZW4+CisKKzxzZWN0MT5BdXRyZXMgb3V0aWxzPHA+CitMYSBjb21waWxhdGlvbiBkZSBCUkxUVFkgZG9ubmUgYXVzc2kgY2VsbGUgZGUgcXVlbHF1ZXMgcGV0aXRzCitvdXRpbHMgZCdhaWRlIGV0IGRlIGRpYWdub3N0aWMuCisKKzxzZWN0Mj5icmx0dHktY29uZmlnPGxhYmVsIGlkPSJ1dGlsaXR5LWJybHR0eS1jb25maWciPjxwPgorQ2V0IG91dGlsIGFmZmVjdGUgdW4gY2VydGFpbiBub21icmUgZGUgdmFyaWFibGVzIGQnZW52aXJvbm5lbWVudAor4CBkZXMgdmFsZXVycyByZWZs6XRhbnQgbCdpbnN0YWxsYXRpb24gY291cmFudGUgZGUgQlJMVFRZICh2b2lyIGxlcworPHJlZiBpZD0iYnVpbGQiIG5hbWU9Im9wdGlvbnMgZGUgY29tcGlsYXRpb24iPikuIFZvdXMgZGV2cmlleiBsJ2V46WN1dGVyIGRhbnMgdW4KK2Vudmlyb25uZW1lbnQgc2hlbGwgZXhpc3RhbnQsIGRvbmMgY2Ugbidlc3QgcGFzIHVuZSB26XJpdGFibGUgY29tbWFuZGUsCitldCBzZXVscyBsZXMgc2NyaXB0cyBzdXBwb3J0YW50IGxhIHN5bnRheGUgPHR0PkJvdXJuZSBTaGVsbDwvdHQ+CitwZXV2ZW50IGwndXRpbGlzZXIuCis8dHNjcmVlbj4uIGJybHR0eS1jb25maWc8L3RzY3JlZW4+CisKK0xlcyB2YXJpYWJsZXMgZCdlbnZpcm9ubmVtZW50IHN1aXZhbnRlcyBzb250IGFmZmVjdOllczoKKzxkZXNjcmlwPgorICA8dGFnPkJSTFRUWV9WRVJTSU9OPC90YWc+CisgICAgTGUgbnVt6XJvIGRlIHZlcnNpb24gZHUgcGFxdWV0IEJSTFRUWS4KKyAgPHRhZz5CUkxUVFlfRVhFQ1VURV9ST09UPC90YWc+CisgICAgTGEgcmFjaW5lIGRlIGwnZXjpY3V0aW9uIGR1IHBhcXVldCBpbnN0YWxs6S4gQ29uZmlndXLpZSBwYXIKKyAgICBsJ29wdGlvbiBkZSBjb21waWxhdGlvbiA8cmVmIGlkPSJidWlsZC1leGVjdXRlLXJvb3QiIG5hbWU9Ii0td2l0aC1leGVjdXRlLXJvb3QiPi4KKyAgPHRhZz5CUkxUVFlfUFJPR1JBTV9ESVJFQ1RPUlk8L3RhZz4KKyAgICBS6XBlcnRvaXJlIGRlcyBwcm9ncmFtbWVzIGV46WN1dGFibGVzIChiaW5haXJlcworICAgIGV46WN1dGFibGVzKS4gQ29uZmlndXLpIHBhciBsJ29wdGlvbiBkZSBjb21waWxhdGlvbiA8cmVmIGlkPSJidWlsZC1wcm9ncmFtLWRpcmVjdG9yeSIgbmFtZT0iLS13aXRoLXByb2dyYW0tZGlyZWN0b3J5Ij4uCisgIDx0YWc+QlJMVFRZX0xJQlJBUllfRElSRUNUT1JZPC90YWc+CisgICAgUulwZXJ0b2lyZSBkZXMgcGlsb3Rlcy4gQ29uZmlndXLpIHBhciBsJ29wdGlvbiBkZSBjb21waWxhdGlvbiA8cmVmIGlkPSJidWlsZC1saWJyYXJ5LWRpcmVjdG9yeSIgbmFtZT0iLS13aXRoLWxpYnJhcnktZGlyZWN0b3J5Ij4uCisgIDx0YWc+QlJMVFRZX1dSSVRBQkxFX0RJUkVDVE9SWTwvdGFnPiAgICAKKyAgICBS6XBlcnRvaXJlIGRhbnMgbGVxdWVsIGlsIGVzdCBwb3NzaWJsZSBkJ+ljcmlyZS4gQ29uZmlndXLpIHBhciBsJ29wdGlvbgorICAgIGRlIGNvbXBpbGF0aW9uIDxyZWYgaWQ9ImJ1aWxkLXByb2dyYW0tZGlyZWN0b3J5IiBuYW1lPSItLXdpdGgtd3JpdGFibGUtZGlyZWN0b3J5Ij4uCisgIDx0YWc+QlJMVFRZX0RBVEFfRElSRUNUT1JZPC90YWc+CisgICAgUulwZXJ0b2lyZSBkZXMgdGFibGVzIGV0IGRlcyBwYWdlcyBkZSBtYW51ZWwuIENvbmZpZ3Vy6SBwYXIKKyAgICBsJ29wdGlvbiBkZSBjb21waWxhdGlvbiA8cmVmIGlkPSJidWlsZC1kYXRhLWRpcmVjdG9yeSIgbmFtZT0iLS13aXRoLWRhdGEtZGlyZWN0b3J5Ij4uCisgIDx0YWc+QlJMVFRZX01BTlBBR0VfRElSRUNUT1JZPC90YWc+CisgICAgUulwZXJ0b2lyZSBkZXMgcGFnZXMgZGUgbWFudWVsLiBDb25maWd1cukgcGFyIGwnb3B0aW9uIGRlCisgICAgY29tcGlsYXRpb24gPHJlZiBpZD0iYnVpbGQtbWFucGFnZS1kaXJlY3RvcnkiIG5hbWU9Ii0td2l0aC1tYW5wYWdlLWRpcmVjdG9yeSI+LgorICA8dGFnPkJSTFRUWV9JTkNMVURFX0RJUkVDVE9SWTwvdGFnPgorICAgIFLpcGVydG9pcmUgcG91ciBsZXMgZmljaGllcnMgZCdlbi106nRlIEMgZGUgQnJsQVBJLiBDb25maWd1cukKKyAgICBwYXIgbCdvcHRpb24gZGUgY29tcGlsYXRpb24gPHJlZiBpZD0iYnVpbGQtaW5jbHVkZS1kaXJlY3RvcnkiIG5hbWU9Ii0td2l0aC1pbmNsdWRlLWRpcmVjdG9yeSI+LgorICA8dGFnPkJSTEFQSV9WRVJTSU9OPC90YWc+CisgICAgTGUgbnVt6XJvIGRlIHZlcnNpb24gZGUgQnJsQVBJIChCUkxUVFkncyBBcHBsaWNhdGlvbgorICAgIFByb2dyYW1taW5nIEludGVyZmFjZSkuCisgIDx0YWc+QlJMQVBJX1JFTEVBU0U8L3RhZz4KKyAgICBMZSBudW3pcm8gZGUgdmVyc2lvbiBjb21wbGV0IGRlIEJybEFQSS4KKyAgPHRhZz5CUkxBUElfQVVUSDwvdGFnPgorICAgIExlIG5vbSBkdSBmaWNoaWVyIGRlIGNs6XMgZGUgQnJsQVBJLgorPC9kZXNjcmlwPgorCitFbiBwbHVzLCBsZXMgdmFyaWFibGVzIGQnZW52aXJvbm5lbWVudCBzdGFuZGFyZCA8dHQ+YXV0b2NvbmY8L3R0Pgorc3VpdmFudGVzIHNvbnQgYXVzc2kgYXNzaWdu6WVzOgorPGRlc2NyaXA+CisgIDx0YWc+cHJlZml4PC90YWc+CisgICAgU291cy1y6XBlcnRvaXJlIHBvdXIgbGVzIGZpY2hpZXJzIGluZOlwZW5kYW50cyBkZSBsJ2FyY2hpdGVjdHVyZS4KKyAgICBDb25maWd1cukgcGFyIGwnb3B0aW9uIGRlIGNvbXBpbGF0aW9uIDxyZWYgaWQ9ImJ1aWxkLXBvcnRhYmxlLXJvb3QiIG5hbWU9Ii0tcHJlZml4Ij4uCisgIDx0YWc+ZXhlY19wcmVmaXg8L3RhZz4KKyAgICBTb3VzLXLpcGVydG9pcmUgcG91ciBsZXMgZmljaGllcnMgZOlwZW5kYW50cyBkZSBsJ2FyY2hpdGVjdHVyZS4KKyAgICBDb25maWd1cukgcGFyIGwnb3B0aW9uIGRlIGNvbXBpbGF0aW9uIDxyZWYgaWQ9ImJ1aWxkLWFyY2hpdGVjdHVyZS1yb290IiBuYW1lPSItLWV4ZWMtcHJlZml4Ij4uCisgIDx0YWc+YmluZGlyPC90YWc+CisgICAgRW1wbGFjZW1lbnQgcGFyIGTpZmF1dCBkdSA8cmVmIGlkPSJidWlsZC1wcm9ncmFtLWRpcmVjdG9yeSIgbmFtZT0iculwZXJ0b2lyZSBkdSBwcm9ncmFtbWUiPi4KKyAgICBDb25maWd1cukgcGFyIGwnb3B0aW9uIGRlIGNvbXBpbGF0aW9uIDx0dD4tLWJpbmRpcjwvdHQ+LgorICA8dGFnPmxpYmRpcjwvdGFnPgorICAgIFLpcGVydG9pcmUgcG91ciBsZXMgb2JqZXRzIGR5bmFtaXF1ZXMgZXQgc3RhdGlxdWVzIGRlCisgICAgQnJsQVBJLCBsYSBsb2NhbGlzYXRpb24gcGFyIGTpZmF1dCBwb3VyIGxlIDxyZWYKKyAgICBpZD0iYnVpbGQtbGlicmFyeS1kaXJlY3RvcnkiIG5hbWU9InLpcGVydG9pcmUgZGVzCisgICAgYmlibGlvdGjocXVlcyI+LiBDb25maWd1cukgcGFyIGwnb3B0aW9uIGRlIGNvbXBpbGF0aW9uIDxyZWYKKyAgICBpZD0iYnVpbGQtYXBpLWRpcmVjdG9yeSIgbmFtZT0iLS1saWJkaXIiPi4KKyAgPHRhZz5zeXNjb25mZGlyPC90YWc+CisgICAgUulwZXJ0b2lyZSBkZXMgZmljaGllcnMgZGUgY29uZmlndXJhdGlvbiwgZW1wbGFjZW1lbnQgcGFyIGTpZmF1dCBkdSA8cmVmCisgICAgaWQ9ImJ1aWxkLWRhdGEtZGlyZWN0b3J5IiBuYW1lPSJy6XBlcnRvaXJlIGRlIGRvbm7pZXMiPi4gQ29uZmlndXLpIHBhcgorICAgIGwnb3B0aW9uIGRlIGNvbXBpbGF0aW9uIDxyZWYgaWQ9ImJ1aWxkLWNvbmZpZ3VyYXRpb24tZGlyZWN0b3J5IgorICAgIG5hbWU9Ii0tc3lzY29uZmRpciI+LgorICA8dGFnPm1hbmRpcjwvdGFnPgorICAgIEVtcGxhY2VtZW50IHBhciBk6WZhdXQgcG91ciBsZSA8cmVmIGlkPSJidWlsZC1tYW5wYWdlLWRpcmVjdG9yeSIgbmFtZT0iculwZXJ0b2lyZSBkZXMgcGFnZXMgZGUgbWFudWVsIj4uCisgICAgQ29uZmlndXLpIHBhciBsJ29wdGlvbiBkZSBjb21waWxhdGlvbiA8dHQ+LS1tYW5kaXI8L3R0Pi4KKyAgPHRhZz5pbmNsdWRlZGlyPC90YWc+CisgICAgRW1wbGFjZW1lbnQgcGFyIGTpZmF1dCBkdSA8cmVmIGlkPSJidWlsZC1pbmNsdWRlLWRpcmVjdG9yeSIgbmFtZT0iculwZXJ0b2lyZSBkZXMgZmljaGllcnMgZCdlbi106nRlIj4uCisgICAgQ29uZmlndXLpIHBhciBsJ29wdGlvbiBkZSBjb21waWxhdGlvbiA8dHQ+LS1pbmNsdWRlZGlyPC90dD4uCis8L2Rlc2NyaXA+CisKKzxzZWN0Mj5icmx0dHktaW5zdGFsbDxsYWJlbCBpZD0idXRpbGl0eS1icmx0dHktaW5zdGFsbCI+PHA+CitDZXQgb3V0aWwgY29waWUgbGEgPHJlZiBpZD0iaGllcmFyY2h5IiBuYW1lPSJoaelyYXJjaGllIGRlcyBmaWNoaWVycyBpbnN0YWxs6XMiPiBkZQorQlJMVFRZIGQndW4gZW1wbGFjZW1lbnQg4CB1biBhdXRyZS4KKzx0c2NyZWVuPmJybHR0eS1pbnN0YWxsIDxlbT5kZXN0aW5hdGlvbjwvZW0+ICZsc3FiOzxlbT5vcmlnaW5lPC9lbT4mcnNxYjs8L3RzY3JlZW4+Cis8ZGVzY3JpcD4KKyAgPHRhZz48ZW0+ZGVzdGluYXRpb248L2VtPjwvdGFnPgorICAgIEwnZW1wbGFjZW1lbnQgb/kgbGEgPHJlZiBpZD0iaGllcmFyY2h5IiBuYW1lPSJoaelyYXJjaGllIGRlcyBmaWNoaWVycyBpbnN0YWxs6XMiPgorICAgIHNlcmEgY29waellLiBDZWxhIGRvaXQg6nRyZSB1biBy6XBlcnRvaXJlIGV4aXN0YW50LgorICA8dGFnPjxlbT5mcm9tPC9lbT48L3RhZz4KKyAgICBMJ2VtcGxhY2VtZW50IOAgcGFydGlyIGR1cXVlbCBsYSA8cmVmIGlkPSJoaWVyYXJjaHkiIG5hbWU9Imhp6XJhcmNoaWUgZGVzIGZpY2hpZXJzIGluc3RhbGzpcyI+CisgICAgc2VyYSBjb3Bp6WUuIFMnaWwgZXN0IHNw6WNpZmnpLCBsZSBy6XBlcnRvaXJlIGRvaXQKKyAgICBleGlzdGVyLiBTJ2lsIG4nZXN0IHBhcyBzcOljaWZp6SwgbCdlbXBsYWNlbWVudCB1dGlsaXPpIHBvdXIgbGEKKyAgICBjb21waWxhdGlvbiBlc3QgdXRpbGlz6S4KKzwvZGVzY3JpcD4KK1BhciBleGVtcGxlLCB2b3VzIHBvdXZleiB1dGlsaXNlciBjZXR0ZSBvdXRpbCBwb3VyIGNvcGllciBCUkxUVFkKK+AgcGFydGlyIGQndW4gZGlzcXVlIHJhY2luZS4gU2kgdW5lIGRpc3F1ZXR0ZSByYWNpbmUgZXN0IG1vbnTpZSBkYW5zCis8dHQ+L21udDwvdHQ+LCBldCBxdWUgQlJMVFRZIGVzdCBpbnN0YWxs6SBzdXIgbGUgc3lzdOhtZSBwcmluY2lwYWwsIHRhcGVyIDx0c2NyZWVuPmJybHR0eS1pbnN0YWxsIC9tbnQ8L3RzY3JlZW4+Citjb3BpZSBCUkxUVFksIGVuIGVudGllciBhdmVjIHNlcyBmaWNoaWVycyBkZSBkb25u6WVzIGV0IHNlcyBiaWJsaW90aOhxdWVzLCBzdXIKK2xhIGRpc3F1ZXR0ZSByYWNpbmUuCisKK1F1ZWxxdWVzIHByb2Js6G1lcyBvbnQg6XTpIHJlbmNvbnRy6XMgZW4gY29waWFudCBCUkxUVFkgZW50cmUgZGVzCitzeXN06G1lcyBhdmVjIGRpZmbpcmVudGVzIHZlcnNpb25zIGRlIGxhIGJpYmxpb3Ro6HF1ZSBDLiBTaSB2b3VzIGF2ZXoKK2RlcyBkaWZmaWN1bHTpcywgY2VsYSB2YXV0IGxhIHBlaW5lIGQnZW5xdep0ZXIuCisKKzxzZWN0Mj5icmx0ZXN0PGxhYmVsIGlkPSJ1dGlsaXR5LWJybHRlc3QiPjxwPgorQ2V0IG91dGlsIHRlc3RlIHVuIHBpbG90ZSBkJ2FmZmljaGV1ciBicmFpbGxlLCBldCBmb3Vybml0IHByZXNxdWUKK3VuZSBmYedvbiBpbnRlcmFjdGl2ZSBkJ2FwcHJlbmRyZSBjZSBxdWUgZm9udCBsZXMgdG91Y2hlcyBkZQorbCdhZmZpY2hldXIgYnJhaWxsZS4gVm91cyBkZXZyaWV6IGwnZXjpY3V0ZXIgZW4gdGFudCBxdWUgcm9vdC4KKzx0c2NyZWVuPmJybHRlc3QgLTxlbT5vcHRpb248L2VtPiAuLi4gWzxlbT5waWxvdGU8L2VtPiBbPGVtPm5vbTwvZW0+PTxlbT52YWxldXI8L2VtPiAuLi5dXTwvdHNjcmVlbj4KKzxkZXNjcmlwPgorICA8dGFnPjxlbT5waWxvdGU8L2VtPjwvdGFnPgorICAgIExlIHBpbG90ZSBkZSBsJ2FmZmljaGV1ciBicmFpbGxlLiBEb2l0IOp0cmUgbGVzIGRldXggbGV0dHJlcyBkdQorICAgIDxyZWYgaWQ9ImRyaXZlcnMiIG5hbWU9ImNvZGUgZCdpZGVudGlmaWNhdGlvbiBkdSBwaWxvdGUiPi4gUydpbCBuJ2VzdCBwYXMgc3DpY2lmaeksIGxlCisgICAgcHJlbWllciBwaWxvdGUgY29uZmlndXLpIHBhciBsJ29wdGlvbiBkZSBjb21waWxhdGlvbgorICAgIDxyZWYgaWQ9ImJ1aWxkLWJyYWlsbGUtZHJpdmVyIiBuYW1lPSItLXdpdGgtYnJhaWxsZS1kcml2ZXIiPiBlc3QgdXRpbGlz6S4KKyAgPHRhZz48ZW0+bm9tPC9lbT48dHQ+PTwvdHQ+PGVtPnZhbGV1cjwvZW0+PC90YWc+CisgICAgQWZmZWN0ZSB1biBwYXJhbeh0cmUgZCdhZmZpY2hldXIgYnJhaWxsZS4gUG91ciB1bmUgZGVzY3JpcHRpb24gZGVzCisgICAgcGFyYW3odHJlcyBhY2NlcHTpcyBwYXIgdW4gcGlsb3RlIHNw6WNpZmlxdWUsIHZvaXIgbGEKKyAgICBkb2N1bWVudGF0aW9uIGRlIGNlIHBpbG90ZS4KKyAgPHRhZz48dHQ+LWQ8L3R0PjxlbT5kZXZpY2U8L2VtPiA8dHQ+LS1kZXZpY2U9PC90dD48ZW0+cOlyaXBo6XJpcXVlPC9lbT48L3RhZz4KKyAgICBMZSBjaGVtaW4gYWJzb2x1IHBvdXIgbGUgcOlyaXBo6XJpcXVlIGF1cXVlbCBsJ2FmZmljaGV1ciBicmFpbGxlCisgICAgZXN0IGNvbm5lY3TpLiBTJ2lsIG4nZXN0IHBhcyBzcOljaWZp6SwgYydlc3QgbGUgcOlyaXBo6XJpcXVlCisgICAgY29uZmlndXLpIHBhciBsJ29wdGlvbiBkZSBjb21waWxhdGlvbiA8cmVmCisgICAgaWQ9ImJ1aWxkLWJyYWlsbGUtZGV2aWNlIiBuYW1lPSItLXdpdGgtYnJhaWxsZS1kZXZpY2UiPiBxdWkgZXN0CisgICAgdXRpbGlz6S4KKyAgPHRhZz48dHQ+LUQ8L3R0PjxlbT5kaXJlY3Rvcnk8L2VtPiA8dHQ+LS1kYXRhLWRpcmVjdG9yeT08L3R0PjxlbT5y6XBlcnRvaXJlPC9lbT48L3RhZz4KKyAgICBWb3VzIGRldnJpZXogZm91cm5pciB1biBjaGVtaW4gYWJzb2x1IHBvdXIgbGUgculwZXJ0b2lyZSBv+SBsZXMKKyAgICBmaWNoaWVycyBkZSBkb25u6WVzIGRlcyBwaWxvdGVzIHNvbnQgcGxhY+lzLiBTJ2lsIG4nZXN0IHBhcyBzcOljaWZp6SwKKyAgICBjJ2VzdCBsZSBy6XBlcnRvaXJlIGNvbmZpZ3Vy6SBwYXIgbCdvcHRpb24gZGUgY29tcGlsYXRpb24KKyAgICA8cmVmIGlkPSJidWlsZC1kYXRhLWRpcmVjdG9yeSIgbmFtZT0iLS13aXRoLWRhdGEtZGlyZWN0b3J5Ij4gcXVpIGVzdCB1dGlsaXPpLgorICA8dGFnPjx0dD4tTDwvdHQ+PGVtPmRpcmVjdG9yeTwvZW0+IDx0dD4tLWxpYnJhcnktZGlyZWN0b3J5PTwvdHQ+PGVtPnJlcGVydG9pcmU8L2VtPjwvdGFnPgorICAgIExlIGNoZW1pbiBhYnNvbHUgcG91ciBsZSBy6XBlcnRvaXJlIGRhbnMgbGVxdWVsIHNvbnQgc2l0delzIGxlcworICAgIHBpbG90ZXMuIFMnaWwgbidlc3QgcGFzIHNw6WNpZmnpLCBjJ2VzdCBsZSBy6XBlcnRvaXJlIGNvbmZpZ3Vy6SBwYXIKKyAgICBsJ29wdGlvbiBkZSBjb21waWxhdGlvbiA8cmVmIGlkPSJidWlsZC1saWJyYXJ5LWRpcmVjdG9yeSIgbmFtZT0iLS1saWJkaXIiPiBxdWkgZXN0IHV0aWxpc+kuCisgIDx0YWc+PHR0Pi1XPC90dD48ZW0+culwZXJ0b2lyZTwvZW0+IDx0dD4tLXdyaXRhYmxlLWRpcmVjdG9yeT08L3R0PjxlbT5yZXBlcnRvaXJlPC9lbT48L3RhZz4KKyAgICBMZSBjaGVtaW4gYWJzb2x1IHZlcnMgdW4gculwZXJ0b2lyZSBv+SBpbCBlc3QgcG9zc2libGUgZCfpY3JpcmUuIFMnaWwKKyAgICBuJ2VzdCBwYXMgc3DpY2lmaeksIGxlIHLpcGVydG9pcmUgY29uZmlndXLpIGF2ZWMgbCdvcHRpb24gPmUgY29tcGlsYXRpb24gLS13aXRoLXdyaXRhYmxlLWRpcmVjdG9yeQorICAgIGVzdCB1dGlsaXPpLgorICA8dGFnPjx0dD4taDwvdHQ+IDx0dD4tLWhlbHA8L3R0PjwvdGFnPgorICAgIEFmZmljaGUgdW4gculzdW3pIGRlcyBvcHRpb25zIGRlIGxhIGxpZ25lIGRlIGNvbW1hbmRlLCBwdWlzIHF1aXR0ZS4KKzwvZGVzY3JpcD4KKworQ2V0IG91dGlsIHV0aWxpc2UgbGUgYGBtb2RlIGFwcHJlbnRpc3NhZ2UgZGVzIGNvbW1hbmRlcycnIGRlCitCUkxUVFkuIExlIGTpbGFpIGQnYXBwdWkgc3VyIHVuZSB0b3VjaGUgKGFwcuhzIGxlcXVlbCBjZXQgb3V0aWwKK3F1aXR0ZSkgZXN0IGRlIDEwIHNlY29uZGVzLiBMZSB0ZW1wcyBkJ2FmZmljaGFnZSBkdSBtZXNzYWdlICh1dGlsaXPpCitwb3VyIGxlcyBzZWdtZW50cyBub24tZmluYXV4IGRlIGxvbmdzIG1lc3NhZ2VzKSBlc3QgZGUgPHR0PjQ8L3R0PiBzZWNvbmRlcy4KKworPHNlY3QyPnNwa3Rlc3Q8bGFiZWwgaWQ9InV0aWxpdHktc3BrdGVzdCI+PHA+CitDZXQgb3V0aWwgdGVzdGUgdW4gcGlsb3RlIGRlIHN5bnRo6HNlIHZvY2FsZS4gSWwgc2UgcGV1dCBxdSdpbAorZG9pdmUg6nRyZSBleOljdXTpIGVuIHRhbnQgcXVlIHJvb3QuCis8dHNjcmVlbj5zcGt0ZXN0IC08ZW0+b3B0aW9uPC9lbT4gLi4uIFs8ZW0+cGlsb3RlPC9lbT4gWzxlbT5ub208L2VtPj08ZW0+dmFsdWU8L2VtPiAuLi5dXTwvdHNjcmVlbj4KKzxkZXNjcmlwPgorICA8dGFnPjxlbT5waWxvdGU8L2VtPjwvdGFnPgorCisgICAgTGUgcGlsb3RlIHBvdXIgbGEgc3ludGjoc2Ugdm9jYWxlLiBEb2l0IOp0cmUgbGVzIGRldXggbGV0dHJlcworICAgIGR1IDxyZWYgaWQ9ImRyaXZlcnMiIG5hbWU9ImNvZGUgZCdpZGVudGlmaWNhdGlvbiBkZSBwaWxvdGUiPi4gUydpbCBuJ2VzdCBwYXMgc3DpY2lmaeksCisgICAgYydlc3QgbGUgcHJlbWllciBwaWxvdGUgc3DpY2lmaekgcGFyIGwnb3B0aW9uIGRlIGNvbXBpbGF0aW9uCisgICAgPHJlZiBpZD0iYnVpbGQtc3BlZWNoLWRyaXZlciIgbmFtZT0iLS13aXRoLXNwZWVjaC1kcml2ZXIiPiBxdWkgZXN0IHV0aWxpc+kuCisgIDx0YWc+PGVtPm5vbTwvZW0+PHR0Pj08L3R0PjxlbT52YWxldXI8L2VtPjwvdGFnPgorICAgIFLoZ2xlIGxlIHBhcmFt6HRyZSBkdSBwaWxvdGUgZGUgbGEgc3ludGjoc2Ugdm9jYWxlLiBQb3VyIHVuZQorICAgIGRlc2NyaXB0aW9uIGRlcyBwYXJhbeh0cmVzIGFjY2VwdOlzIHBhciB1biBwaWxvdGUgc3DpY2lmaXF1ZSwKKyAgICB2b2lyIGxhIGRvY3VtZW50YXRpb24gZGUgY2UgcGlsb3RlLgorICA8dGFnPjx0dD4tdDwvdHQ+PGVtPnN0cmluZzwvZW0+IDx0dD4tLXRleHQtc3RyaW5nPTwvdHQ+PGVtPnN0cmluZzwvZW0+PC90YWc+CisgICAgTGUgdGV4dGUgcXVpIHNlcmEgZGl0LiBTJ2lsIG4nZXN0IHBhcyBzcOljaWZp6SwgYydlc3QgbCdlbnRy6WUKKyAgICBzdGFuZGFyZCAoc3RkaW4pIHF1aSBlc3QgbHVlLgorICA8dGFnPjx0dD4tRDwvdHQ+PGVtPnJlcGVydG9pcmU8L2VtPiA8dHQ+LS1kYXRhLWRpcmVjdG9yeT08L3R0PjxlbT5yZXBlcnRvaXJlPC9lbT48L3RhZz4KKyAgICBMZSBjaGVtaW4gYWJzb2x1IHBvdXIgbGUgculwZXJ0b2lyZSBkYW5zIGxlcXVlbCBzZSBzaXR1ZW50IGxlcworICAgIGZpY2hpZXJzIGRlIGRvbm7pZXMgZHUgcGlsb3RlLiBTJ2lsIG4nZXN0IHBhcyBzcOljaWZp6SwgYydlc3QgbGUKKyAgICBy6XBlcnRvaXJlIGNvbmZpZ3Vy6SBwYXIgbCdvcHRpb24gZGUgY29tcGlsYXRpb24KKyAgICA8cmVmIGlkPSJidWlsZC1kYXRhLWRpcmVjdG9yeSIgbmFtZT0iLS13aXRoLWRhdGEtZGlyZWN0b3J5Ij4gcXVpIGVzdCB1dGlsaXPpLgorICA8dGFnPjx0dD4tTDwvdHQ+PGVtPnJlcGVydG9pcmU8L2VtPiA8dHQ+LS1saWJyYXJ5LWRpcmVjdG9yeT08L3R0PjxlbT5yZXBlcnRvaXJlPC9lbT48L3RhZz4KKyAgICBMZSBjaGVtaW4gYWJzb2x1IGR1IHLpcGVydG9pcmUgb/kgc2Ugc2l0dWUgbGVzIHBpbG90ZXMuIFMnaWwgbidlc3QKKyAgICBwYXMgc3DpY2lmaeksIGMnZXN0IGxlIHLpcGVydG9pcmUgY29uZmlndXLpIHBhciBsJ29wdGlvbiBkZQorICAgIGNvbXBpbGF0aW9uIDxyZWYgaWQ9ImJ1aWxkLWxpYnJhcnktZGlyZWN0b3J5IiBuYW1lPSItLWxpYmRpciI+IHF1aSBlc3QgdXRpbGlz6S4KKyAgPHRhZz48dHQ+LWg8L3R0PiA8dHQ+LS1oZWxwPC90dD48L3RhZz4KKyAgICBBZmZpY2hlIHVuIHLpc3Vt6SBkZXMgb3B0aW9ucyBkZSBsYSBsaWduZSBkZSBjb21tYW5kZSwgcHVpcyBxdWl0dGUuCis8L2Rlc2NyaXA+CisKKzxzZWN0Mj5zY3J0ZXN0PGxhYmVsIGlkPSJ1dGlsaXR5LXNjcnRlc3QiPjxwPgorQ2V0IG91dGlsIHRlc3RlIGxlIHBpbG90ZSBkJ+ljcmFuLiBJbCBkb2l0IOp0cmUgZXjpY3V06SBlbiB0YW50CitxdWUgcm9vdC4KKzx0c2NyZWVuPnNjcnRlc3QgLTxlbT5vcHRpb248L2VtPiAuLi4gWzxlbT5ub208L2VtPj08ZW0+dmFsZXVyPC9lbT4gLi4uXTwvdHNjcmVlbj4KKzxkZXNjcmlwPgorICA8dGFnPjxlbT5ub208L2VtPjx0dD49PC90dD48ZW0+dmFsZXVyPC9lbT48L3RhZz4KKyAgICBS6GdsZSBsZSBwYXJhbeh0cmUgZHUgcGlsb3RlIGRlIGwn6WNyYW4uIFBvdXIgdW5lCisgICAgZGVzY3JpcHRpb24gZGVzIHBhcmFt6HRyZXMgYWNjZXB06XMgcGFyIHVuIHBpbG90ZSBzcOljaWZpcXVlCisgICAgdm9pciBsYSBkb2N1bWVudGF0aW9uIGRlIGNlIHBpbG90ZS4KKyAgPHRhZz48dHQ+LWw8L3R0PjxlbT5jb2xvbm5lPC9lbT4gPHR0Pi0tbGVmdD08L3R0PjxlbT5jb2xvbm5lPC9lbT48L3RhZz4KKyAgICBTcOljaWZpZSBsYSBjb2xvbm5lIGR1IGTpYnV0ICjgIGdhdWNoZSkgZGUgbCfpY3JhbiAob3JpZ2luZSDgCisgICAgeulybykuIFNpIHZvdXMgbmUgZm91cm5pc3NleiBwYXMgY2V0dGUgdmFsZXVyLCB1bmUgdmFsZXVyIHBhcgorICAgIGTpZmF1dCwgYmFz6WUgc3VyIGxhIGxhcmdldXIgc3DpY2lmaellLCBlc3Qgc+lsZWN0aW9ubullLCBkZSB0ZWxsZQorICAgIHNvcnRlIHF1ZSBsYSBmZW7qdHJlIHNvaXQgY2VudHLpZSDgIGwnaG9yaXpvbnRhbCwgZXN0IHV0aWxpc+llLgorICA8dGFnPjx0dD4tYzwvdHQ+PGVtPmNvb21wdGU8L2VtPiA8dHQ+LS1jb2x1bW5zPTwvdHQ+PGVtPmNvbXB0ZTwvZW0+PC90YWc+CisgICAgU3DpY2lmaWUgbGEgbGFyZ2V1ciBkZSBsYSBmZW7qdHJlIChlbiBjb2xvbm5lcykuIFNpIHZvdXMgbmUKKyAgICBmb3Vybmlzc2V6IHBhcyBjZXR0ZSB2YWxldXIsIHVuZSB2YWxldXIgcGFyIGTpZmF1dCwgYmFz6WUgc3VyIGxhCisgICAgY29sb25uZSBkZSBk6WJ1dCwgZXN0IHPpbGVjdGlvbm7pZSwgZGUgdGVsbGUgc29ydGUgcXVlIGxhIGZlbup0cmUKKyAgICBzb2l0IGNlbnRy6WUg4CBsJ2hvcnJpem9udGFsLgorICA8dGFnPjx0dD4tdDwvdHQ+PGVtPmxpZ25lPC9lbT4gPHR0Pi0tdG9wPTwvdHQ+PGVtPmxpZ25lPC9lbT48L3RhZz4KKyAgICBTcOljaWZpZSBsYSBsaWduZSBkZSBk6WJ1dCAoZW4gaGF1dCkgZGUgbCfpY3JhbiAob3JpZ2luZSDgCisgICAgeulybykuIFNpIHZvdXMgbmUgZm91cm5pc3NleiBwYXMgY2V0dGUgdmFsZXVyLCB1bmUgdmFsZXVyIHBhcgorICAgIGTpZmF1dCwgYmFz6WUgc3VyIGxhIGhhdXRldXIgc3DpY2lmaellLCBlc3Qgc+lsZWN0aW9ubullLCBkZSB0ZWxsZQorICAgIHNvcnRlIHF1ZSBsYSBmZW7qdHJlIHNvaXQgY2VudHLpZSDgIGxhIHZlcnRpY2FsZS4KKyAgPHRhZz48dHQ+LXI8L3R0PjxlbT5jb21wdGU8L2VtPiA8dHQ+LS1yb3dzPTwvdHQ+PGVtPmNvbXB0ZTwvZW0+PC90YWc+CisgICAgU3DpY2lmaWUgbGEgaGF1dGV1ciBkZSBsYSBmZW7qdHJlIChlbiBsaWduZXMpLiBTaSB2b3VzIG5lCisgICAgZm91cm5pc3NleiBwYXMgY2V0dGUgdmFsZXVyLCB1bmUgdmFsZXVyIHBhciBk6WZhdXQsIGJhc+llIHN1ciBsYQorICAgIHJhbmfpZSBkZSBk6WJ1dCBzcOljaWZp6WUsIGVzdCBz6WxlY3Rpb25u6WUsIGRlIHRlbGxlIHNvcnRlIHF1ZSBsYQorICAgIGZlbup0cmUgc29pdCBjZW50cullIOAgbGEgdmVydGljYWxlLgorICA8dGFnPjx0dD4taDwvdHQ+IDx0dD4tLWhlbHA8L3R0PjwvdGFnPgorICAgIEFmZmljaGUgdW4gculzdW3pIGRlcyBvcHRpb25zIGRlIGxhIGxpZ25lIGRlIGNvbW1hbmRlLCBwdWlzCisgICAgICAgIHF1aXR0ZS4KKzwvZGVzY3JpcD4KKworUmVtYXJxdWVzOgorPGl0ZW1pemU+CisgIDxpdGVtPgorICAgIFNpIHZvdXMgbmUgc3DpY2lmaWV6IG5pIGxhIGNvbG9ubmUgZGUgZOlidXQsIG5pIGxhIGxhcmdldXIgZGUgbGEKKyAgICBmZW7qdHJlLCBsYSBy6Wdpb24gZXN0IGNlbnRy6WUgaG9yaXpvbnRhbGVtZW50IGV0IGNvbW1lbmNlIOAgbGEKKyAgICBjb2xvbm5lIDUuCisgIDxpdGVtPgorICAgIFNpIHZvdXMgbmUgc3DpY2lmaWV6IG5pIGxhIHJhbmfpZSBkZSBk6WJ1dCwgbmkgbGEgaGF1dGV1ciBkZSBsYQorICAgIGZlbup0cmUsIGxhIHLpZ2lvbiBlc3QgY2VudHLpZSB2ZXJ0aWNhbGVtZW50IGV0IGNvbW1lbmNlIOAgbGEgbGlnbmUKKyAgICA1LgorPC9pdGVtaXplPgorCitMZXMg6WzpbWVudHMgc3VpdmFudHMgc29udCDpY3JpdHMgc3VyIGxhIHNvcnRpZSBzdGFuZGFyZCAoc3Rkb3V0KToKKzxlbnVtPgorICA8aXRlbT4KKyAgICBVbmUgbGlnbmUgZOl0YWlsbGFudCBsZXMgZGltZW5zaW9ucyBkZSBsJ+ljcmFuLgorICAgIDx0c2NyZWVuPlNjcmVlbjogPGVtPmxhcmdldXI8L2VtPng8ZW0+aGF1dGV1cjwvZW0+PC90c2NyZWVuPgorICA8aXRlbT4KKyAgICBVbmUgbGlnbmUgZOl0YWlsbGFudCBsYSBwb3NpdGlvbiAo4CBsJ29yaWdpbmUgeulybykgZHUgY3Vyc2V1ci4KKyAgICA8dHNjcmVlbj5DdXJzb3I6ICZsc3FiOzxlbT5jb2xvbm5lPC9lbT4sPGVtPmxpZ25lPC9lbT4mcnNxYjs8L3RzY3JlZW4+CisgIDxpdGVtPgorICAgIFVuZSBsaWduZSBk6XRhaWxsYW50IGxlcyBkaW1lbnNpb25zIGRlIGxhIHpvbmUgZCfpY3JhbgorICAgIHPpbGVjdGlvbm7pZSwgZXQgbGEgcG9zaXRpb24gKOAgbCdvcmlnaW5lIHrpcm8pIGRlIHNvbiBjb2luIGVuCisgICAgaGF1dCDgIGdhdWNoZS4KKyAgICA8dHNjcmVlbj5SZWdpb246IDxlbT5sYXJnZXVyPC9lbT54PGVtPmhhdXRldXI8L2VtPkAmbHNxYjs8ZW0+Y29sb25uZTwvZW0+LDxlbT5saWduZTwvZW0+JnJzcWI7PC90c2NyZWVuPgorICA8aXRlbT4KKyAgICBMZSBjb250ZW51IGRlIGxhIHLpZ2lvbiBkJ+ljcmFuIHPpbGVjdGlvbm7pZS4gTGVzIGNhcmFjdOhyZXMKKyAgICBub24taW1wcmltYWJsZXMgc29udCByZXBy6XNlbnTpcyBwYXIgZGVzIGVzcGFjZXMuCis8L2VudW0+CisKKzxzZWN0Mj50dGJ0ZXN0PGxhYmVsIGlkPSJ1dGlsaXR5LXR0YnRlc3QiPjxwPgorQ2V0IG91dGlsIHRlc3RlIHVuZSB0YWJsZSBkZSB0ZXh0ZSAoc2VjdGlvbiA8cmVmIGlkPSJ0YWJsZS10ZXh0IiBuYW1lPSJUYWJsZXMgZGUKK3RleHRlIj4pLgorPHRzY3JlZW4+dHRidGVzdCAtPGVtL29wdGlvbi8gLi4uIDxlbS9pbnB1dC10YWJsZS8gPGVtL291dHB1dC10YWJsZS88L3RzY3JlZW4+Cis8ZGVzY3JpcD4KKyAgPHRhZz48ZW0+dGFibGUtZW4tZW50cullPC9lbT48L3RhZz4KKyAgICBMZSBjaGVtaW4gZHUgZmljaGllciB2ZXJzIGxhIHRhYmxlIGRlIHRleHRlIGVuIGVudHLpZSBkdSB0ZXN0LiBTJ2lsCisgICAgZXN0IHJlbGF0aWYsIGlsIGVzdCBhbmNy6SBhdSBy6XBlcnRvaXJlIGNvbmZpZ3Vy6SBhdmVjIGwnb3B0aW9uIGRlCisgICAgY29tcGlsYXRpb24gLS13aXRoLWRhdGEtZGlyZWN0b3J5LgorICAgIAorICA8dGFnPjxlbT50YWJsZS1lbi1zb3J0aWU8L2VtPjwvdGFnPiAgCisgICAgTGUgY2hlbWluIGR1IGZpY2hpZXIgdmVycyBsYSB0YWJsZSBkZSB0ZXh0ZSBlbiBzb3J0aWUgZHUgdGVzdC4gUydpbAorICAgIGVzdCByZWxhdGlmLCBpbCBlc3QgYW5jcukgYXUgculwZXJ0b2lyZSBkZSB0cmF2YWlsICBjb3VyYW50LiBTaSB2b3VzIG5lCisgICAgZm91cm5pc3NleiBwYXMgY2UgcGFyYW3odHJlLCBhdWN1bmUgdGFibGUgZW4gc29ydGllIG5lICBzZXJhIOljcml0ZS4KKyAgPHRhZz48dHQ+LWk8L3R0PiA8dHQ+LS1pbnB1dC1mb3JtYXQ9PC90dD48ZW0+Zm9ybWF0PC9lbT48L3RhZz4KKyAgICBTcOljaWZpZSBsZSBmb3JtYXQgIGRlIGxhIHRhYmxlIGQnZW50cullLiBTJ2lsIHZvdXMgbmUgZm91cm5pc3NleiBwYXMgY2V0dGUKKyAgICBvcHRpb24sIGxlICBmb3JtYXQgZGUgbGEgdGFibGUgZW4gZW50cullIGVzdCBk6WR1aXQgZGUgbCdleHRlbnNpb24gZGUgc29uCisgICAgZmljaGllci4KKyAgPHRhZz48dHQ+LW88L3R0PiA8dHQ+LS1vdXRwdXQtZm9ybWF0PTwvdHQ+PGVtPmZvcm1hdDwvZW0+PC90YWc+CisgICAgU3DpY2lmaWUgbGUgZm9ybWF0ICBkZSBsYSB0YWJsZSBlbiBzb3J0aWUuIFMnaWwgdm91cyBuZSBmb3Vybmlzc2V6IHBhcyBjZXR0ZQorICAgIG9wdGlvbiwgbGUgIGZvcm1hdCBkZSBsYSB0YWJsZSBlbiBlbnRy6WUgZXN0IGTpZHVpdCBkZSBsJ2V4dGVuc2lvbiBkZSBzb24KKyAgICBmaWNoaWVyLgorICA8dGFnPjx0dC8tYy88ZW0vY2hhcnNldC8gPHR0Ly0tY2hhcnNldD0vPGVtL2NoYXJzZXQvPC90YWc+CisgICAgU3DpY2lmaWUgbGUgbm9tIGRlIGwnZW5jb2RhZ2UgOC1iaXQg4CB1dGlsaXNlciBsb3JzIGRlIGwnaW50ZXJwcul0YXRpb24gZGVzIAorICAgIHRhYmxlcy4gU2kgdm91cyBuZSBmb3Vybmlzc2V6IHBhcyBjZXR0ZSBvcHRpb24sIGxlIGNvZGFnZSBkZSBsJ2j0dGUgZXN0CisgICAgdXRpbGlz6S4KKyAgPHRhZz48dHQvLWUvIDx0dC8tLWVkaXQvPC90YWc+CisgICAgQXBwZWxsZSBsJ+lkaXRldXIgZGUgdGFibGVzIGRlIHRleHRlLiBTaSB2b3VzIHNw6WNpZmlleiB0YWJsZSBkZSBzb3J0aWUsCisgICAgbGVzIGNoYW5nZW1lbnRzIHNlcm9udCDpY3JpdHMgZGVzc3VzLiBTaW5vbiwgbGEgdGFibGUgZCdlbnRy6WUgZXQgcunpY3JpdGUuCisgIDx0YWc+PHR0Pi1oPC90dD4gPHR0Pi0taGVscDwvdHQ+PC90YWc+CisgICAgQWZmaWNoZSB1biBy6XN1bekgZGVzIG9wdGlvbnMgZW4gbGlnbmUgZGUgY29tbWFuZGUsIGV0IHF1aXR0ZS4KKzwvZGVzY3JpcD4KKworU2kgdm91cyBuZSBkZW1hbmRleiBhdWN1bmUgYWN0aW9uIGVuIHBhcnRpY3VsaWVyLCBsYSB0YWJsZSBkZSBzb3J0aWUgZXN0IAorZmFjdWx0YXRpdmUuIFNpIHZvdXMgbmUgbGEgc3DpY2lmaWV6IHBhcywgbGEgdGFibGUgZCdlbnRy6WUgZXN0IHbpcmlmaellLgorU2kgdm91cyBsYSBzcOljaWZpZXosIGxhIHRhYmxlIGQnZW50cullIGVzdCBjb252ZXJ0aWUuCitMZXMgZm9ybWF0cyBkZSB0YWJsZSBzdWl2YW50cyBzb250IHN1cHBvcnTpczoKKzxkZXNjcmlwPgorICA8dGFnL3R0Yi9CUkxUVFkKKyAgPHRhZy9zYmwvU3VTRSBCbGludXgKKyAgPHRhZy9hMmIvR25vcGVybmljdXMKKyAgPHRhZy9nbmIvQnJhaWxsZSBHbm9tZQorPC9kZXNjcmlwPgorCisKKzxzZWN0Mj5jdGJ0ZXN0PGxhYmVsIGlkPSJ1dGlsaXR5LWN0YnRlc3QiPjxwPgorQ2V0IG91dGlsIHRlc3RlIHVuZSB0YWJsZSBkZSBicmFpbGxlIGFiculn6SAoc2VjdGlvbiA8cmVmIGlkPSJ0YWJsZS1jb250cmFjdGlvbiIgbmFtZT0iVGFibGVzCitkZSBicmFpbGxlIGFiculn6SI+KS4gTGUgdGV4dGUgbHUg4CBwYXJ0aXIgZGUgbCdlbnRy6WUgc3RhbmRhcmQgKHN0ZGluKSBlc3QgcunpY3JpdCBzdXIKK2xhIHNvcnRpZSBzdGFuZGFyZCAoc3Rkb3V0KSBlbiBicmFpbGxlIGFiculn6S4KKzx0c2NyZWVuPmN0YnRlc3QgLTxlbT5maWNoaWVyLWVuLWVudHLpZTwvZW0+PC90c2NyZWVuPgorPGRlc2NyaXA+CisgIDx0YWc+PGVtPmZpY2hpZXItZW4tZW50cullPC9lbT48L3RhZz4KKyAgICBMYSBsaXN0ZSBkZXMgZmljaGllcnMg4CB0cmFpdGVyLiBWb3VzIHBvdXZleiBzcOljaWZpZXIgbidpbXBvcnRlIHF1ZWwKKyAgICBub21icmUgZGUgZmljaGllcnMuIElscyBzb250IHRyYWl06XMgZGUgbGEgZ2F1Y2hlIHZlcnMgbGEgZHJvaXRlLiBMZSAgbm9tCisgICAgZGUgZmljaGllciBzcOljaWFsIC0gZXN0IGludGVycHLpdOkgY29tbWUgbCdlbnRy6WUgc3RhbmRhcmQgKHN0ZGluKS4gU2kKKyAgICB2b3VzIG5lIHNw6WNpZmlleiBhdWN1biBmaWNoaWVyLCBsJ2VudHLpZSBzdGFuZGFyZCBlc3QgdHJhaXTpZS4KKyAgPHRhZz48dHQ+LWM8L3R0PjxlbT5maWNoaWVyPC9lbT4gPHR0Pi0tY29udHJhY3Rpb24tdGFibGU9PC90dD48ZW0+ZmljaGllcjwvZW0+PC90YWc+CisgICAgTGUgY2hlbWluIHZlcnMgbGUgZmljaGllciBkZSBsYSB0YWJsZSBkZSBicmFpbGxlIGFiculn6S4gUydpbCBlc3QgcmVsYXRpZiwgaWwKKyAgICBlc3QgYW5jcukgYXUgculwZXJ0b2lyZSBjb25maWd1cukgcGFyIGwnb3B0aW9uIGRlIGNvbXBpbGF0aW9uCisgICAgPHJlZiBpZD0iYnVpbGQtZGF0YS1kaXJlY3RvcnkiIG5hbWU9Ii0td2l0aC1kYXRhLWRpcmVjdG9yeSI+LgorICAgIEwnZXh0ZW5zaW9uIC5jdGIgZXN0IGZhY3VsdGF0aXZlLiBTaSB2b3VzIG5lIGZvdXJuaXNzZXogcGFzIGNldHRlIG9wdGlvbiwKKyAgICBlbi11cy1nMiBlc3Qgc3VwcG9z6S4KKyAgPHRhZz48dHQvLXQvPGVtL2ZpbGUvfDx0dC9hdXRvLyA8dHQvLS10ZXh0LXRhYmxlPS88ZW0vZmlsZS98PHR0L2F1dG8vPC90YWc+CisgICAgU3DpY2lmaWUgbGEgdGFibGUgZGUgdGV4dGUgKHZvaXIKKyAgICBsYSBzZWN0aW9uIDxyZWYgaWQ9InRhYmxlLXRleHQiIG5hbWU9IlRhYmxlcyBkZSB0ZXh0ZSI+IHBvdXIgbGVzIGTpdGFpbHMpLgorICAgIFNpIHZvdXMgZm91cm5pc3NleiB1biBjaGVtaW4gcmVsYXRpZiwgaWwgZXN0IGFuY3LpIOAKKyAgICA8dHQ+L2V0Yy9icmx0dHk8Lz4gKHZvaXIgbGVzIG9wdGlvbnMgZGUgY29tcGlsYXRpb24gPHJlZiBpZD0iYnVpbGQtZGF0YS1kaXJlY3RvcnkiIG5hbWU9Ii0td2l0aC1kYXRhLWRpcmVjdG9yeSI+IGV0CisgICAgPHJlZiBpZD0iYnVpbGQtZXhlY3V0ZS1yb290IiBuYW1lPSItLXdpdGgtZXhlY3V0ZS1yb290Ij4gcG91ciBwbHVzIGRlIGTpdGFpbHMpLgorICAgIEwnZXh0ZW5zaW9uIDx0dC8udHRiLyBlc3QgZmFjdWx0YXRpdmUuCisgICAgVm9pciBsYSBsaWduZSA8cmVmIGlkPSJjb25maWd1cmUtdGV4dC10YWJsZSIgbmFtZT0idGV4dC10YWJsZSI+CisgICAgZHUgZmljaGllciBkZSBjb25maWd1cmF0aW9uIHBvdXIgbGUgcGFyYW3pdHJhZ2UgcGFyIGTpZmF1dCBhdSBtb21lbnQgZGUgbCdleOljdXRpb24uIFZvdXMgcG91dmV6IG1vZGlmaWVyCisgICAgY2UgcGFyYW3odHJlIGF2ZWMgbGEgcHLpZulyZW5jZSAKKyAgICA8cmVmIGlkPSJwcmVmZXJlbmNlLXRleHQtdGFibGUiIG5hbWU9IlRleHQgVGFibGUiPi4KKyAgPHRhZz48dHQ+LXc8L3R0PjxlbT5jb2xvbm5lczwvZW0+IDx0dD4tLW91dHB1dC13aWR0aD09PC90dD48ZW0+Y29sb25uZXM8L2VtPjwvdGFnPgorICAgIExhIGxvbmd1ZXVyICBtYXhpbWFsZSBkJ3VuZSBsaWduZSBlbiBzb3J0aWUuIENoYXF1ZSBsaWduZSBkJ2VudHLpZSBlbgorICAgIGJyYWlsbGUgYWJy6WfpIGVzdCBk6XZlbG9wcOllIHN1ciAgYXV0YW50IGRlIGxpZ25lcyBxdWUgbuljZXNzYWlyZS4gU2kKKyAgICB2b3VzIG5lIHNw6WNpZmlleiAgcGFzIGNldHRlIG9wdGlvbiwgIGlsIG4neSBhICBwYXMgZGUgbGltaXRlcyBldCBzJ29w6HJlCisgICAgdW5lIGNvcnJlc3BvbmRhbmNlICBsaWduZSBwYXIgIGxpZ25lIGVudHJlIGxlcyAgbGlnbmVzIGVuIGVudHLpZSBldCBjZWxsZXMgIGVuCisgICAgc29ydGllLgorICA8dGFnPjx0dD4taDwvdHQ+IDx0dD4tLWhlbHA8L3R0PjwvdGFnPgorICAgIEFmZmljaGUgdW4gculzdW3pIGRlcyBvcHRpb25zIGVuIGxpZ25lIGRlIGNvbW1hbmRlLCBldCBxdWl0dGUuCis8L2Rlc2NyaXA+CisKK0xhIHRhYmxlIGRlIHRleHRlIGVzdCB1dGlsaXPpZToKKzxpdGVtaXplPgorICA8aXRlbT4KKyAgICBQb3VyIGTpZmluaXIgbCdlbmNvZGFnZSBkZSBzb3J0aWUgZGUgbWFuaehyZSDgIGNlIHF1ZSBsZQorICAgIGJyYWlsbGUgYWJy6WfpIHNvaXQgY29ycmVjdGVtZW50IGFmZmljaOkuIFZvdXMgZGV2cmlleiBzcOljaWZpZXIKKyAgICBsYSBt6m1lIHRhYmxlIGRldmFudCDqdHJlIHV0aWxpc+llIHBhciBCUkxUVFkgbG9yc3F1ZSBsYSBzb3J0aWUgc2VyYSBsdWUuCisgIDxpdGVtPgorICAgIFBvdXIgZOlmaW5pciBsZXMgcmVwculzZW50YXRpb25zIGJyYWlsbGUgZGUgY2VzIGNhcmFjdOhyZXMKKyAgICBk6WZpbmllcyBkYW5zIGxlIGJyYWlsbGUgYWJy6WfpICh2b2lyIGxhIHNlY3Rpb24KKyAgICA8cmVmIGlkPSJjb250cmFjdGlvbi1vcGNvZGVzLXRyYW5zbGF0aW9uIiBuYW1lPSJUcmFkdWN0aW9uIGRlIGNhcmFjdOhyZSI+KS4KKzwvaXRlbWl6ZT4KKworQydlc3QgbGEgdGFibGUgZGUgdHJhZHVjdGlvbiBkZSB0ZXh0ZSA8dHQ+dGV4dC5icmYudHRiPC90dD4gcXVpIGVzdAorZm91cm5pZSBwb3VyIGwndXRpbGlzYXRpb24gZGUgY2V0IG91dGlsLiBJbCBk6WZpbml0IGxlIGZvcm1hdAordXRpbGlz6SBkYW5zIGxlcyBmaWNoaWVycyAuYnJmLiBDJ2VzdCBhdXNzaSBsZSBmb3JtYXQgcXVlIHBy6WbocmVudAordXRpbGlzZXIgbGVzIGltcHJpbWFudGVzIGJyYWlsbGUgZXQgbGVzIGRvY3VtZW50cyBicmFpbGxlCivpbGVjdHJvbmlxdWVzLiBDZXR0ZSB0YWJsZSBwZXJtZXQg4CBjZXQgb3V0aWwgZCfqdHJlIHLpZWxsZW1lbnQKK3V0aWxpc+kgZW4gdGFudCBxdWUgdHJhZHVjdGV1ciBkZSBicmFpbGxlIGVuIHRleHRlLgorCis8c2VjdDI+dHVuZXRlc3Q8bGFiZWwgaWQ9InV0aWxpdHktdHVuZXRlc3QiPjxwPgorQ2V0IG91dGlsIHRlc3RlIGxhIGZhY2lsaXTpIGRlcyBzb25zIGQnYXZlcnRpc3NlbWVudCwgZXQgZm91cm5pdCBhdXNzaQordW4gbW95ZW4gZmFjaWxlIGRlIGNy6WVyIGRlIG5vdXZlYXV4IHNvbnMuIElsIHNlIHBldXQgcXVlIHZvdXMKK3NveWV6IG9ibGln6XMgZGUgbCdleOljdXRlciBlbiB0YW50IHF1ZSByb290LgorPHRzY3JlZW4+dHVuZXRlc3QgLTxlbT5vcHRpb248L2VtPiAuLi4gezxlbT5ub3RlPC9lbT4gPGVtPmR1cullPC9lbT59IC4uLjwvdHNjcmVlbj4KKzxkZXNjcmlwPgorICA8dGFnPjxlbT5ub3RlPC9lbT48L3RhZz4KKyAgICBVbiBudW3pcm8gZGUgbm90ZSBNSURJIHN0YW5kYXJkLiBJbCBkb2l0IOp0cmUgdW4gZW50aWVyIGRlIDx0dD4xPC90dD4g4CA8dHQ+MTI3PC90dD4sCisgICAgYXZlYyA2MCByZXBy6XNlbnRhbnQgbGEgdmFsZXVyIG1veWVubmUuIENoYXF1ZSB2YWxldXIgcmVwculzZW50ZSB1bgorICAgIGRlbWktdG9uIGNocm9tYXRpcXVlIHN0YW5kYXJkLCBkb25jIGRlcyBub3RlcyBsZXMKKyAgICBwbHVzIGJhc3NlcyBhdXggbm90ZXMgbGVzIHBsdXMgaGF1dGVzLiBMYSB2YWxldXIgbGEgcGx1cyBmYWlibGUgKDx0dD4xPC90dD4pCisgICAgcmVwculzZW50ZSBsZSBjaW5xdWnobWUgc291cyBNaWRkbGUgQywgZXQgbGEgdmFsZXVyIGxhIHBsdXMgaGF1dGUKKyAgICAoPHR0PjEyNzwvdHQ+KSByZXBy6XNlbnRlIGxlIHNpeGnobWUgRyBhdS1kZXNzdXMgZGUgTWlkZGxlIEMgKG5vdGF0aW9uIGFuZ2xvc2F4b25uZSkuCisgIDx0YWc+PGVtPmR1cullPC9lbT48L3RhZz4KKyAgICBMYSBkdXLpZSBkZSBsYSBub3RlIGVzdCBlbiBtaWxsaXNlY29uZGVzLiBFbGxlIGRvaXQg6nRyZSB1bgorICAgIGVudGllciBkZSA8dHQ+MTwvdHQ+IOAgPHR0PjI1NTwvdHQ+Li4KKyAgPHRhZz48dHQ+LWQ8L3R0PjxlbT5w6XJpcGjpcmlxdWU8L2VtPiA8dHQ+LS1kZXZpY2U9PC90dD48ZW0+cOlyaXBo6XJpcXVlPC9lbT48L3RhZz4KKyAgICBMZSBw6XJpcGjpcmlxdWUgc3VyIGxlcXVlbCBqb3VlciBsZSBzb24uCisgICAgPGRlc2NyaXA+CisgICAgICA8dGFnPmJlZXBlcjwvdGFnPgorICAgICAgICBMZSBiZWVwZXIgaW50ZXJuZSAoZ+lu6XJhdGV1ciBkZSBzb25zIGVuIGNvbnNvbGUpLgorICAgICAgPHRhZz5wY208L3RhZz4KKyAgICAgICAgTCdpbnRlcmZhY2UgZGlnaXRhbCBhdWRpbyBzdXIgbGEgY2FydGUgc29uLgorICAgICAgPHRhZz5taWRpPC90YWc+CisgICAgICAgIEwnaW50ZXJmYWNlIG51belyaXF1ZSBkJ2luc3RydW1lbnQgZGUgbXVzaXF1ZSBzdXIgbGEgY2FydGUKKyAgICAgICAgc29uLgorICAgICAgPHRhZz5mbTwvdGFnPgorICAgICAgICBMZSBzeW50aOl0aXNldXIgRk0gc3VyIHVuZSBjYXJ0ZSBzb24gQWRMaWIsIE9QTDMsIFNvdW5kCisgICAgICAgIEJsYXN0ZXIsIG91IOlxdWl2YWxlbnRlLgorICAgIDwvZGVzY3JpcD4KKyAgICBWb3VzIHBvdXZleiBhYnLpZ2VyIGxlIG5vbSBkdSBw6XJpcGjpcmlxdWUuIFZvaXIgbGEgcHLpZulyZW5jZQorICAgIDxyZWYgaWQ9InByZWZlcmVuY2UtdHVuZS1kZXZpY2UiIG5hbWU9IlR1bmUgRGV2aWNlIj4gcG91ciBwbHVzIGRlIGTpdGFpbHMgY29uY2VybmFudCBsZSBw6XJpcGjpcmlxdWUKKyAgICBwYXIgZOlmYXV0IGV0IGxlcyByZXN0cmljdGlvbnMgZGUgbGEgcGxhdGVmb3JtZS4KKyAgPHRhZz48dHQ+LXY8L3R0PjxlbT52b2x1bWU8L2VtPiA8dHQ+LS12b2x1bWU9PC90dD48ZW0+dm9sdW1lPC9lbT48L3RhZz4KKyAgICBTcOljaWZpZSBsZSB2b2x1bWUg4CBsYSBzb3J0aWUgKGludGVuc2l06Skgc291cyBsYSBmb3JtZSBkJ3VuCisgICAgcG91cmNlbnRhZ2UgZHUgbWF4aW11bS4gTGUgdm9sdW1lIGRlIHNvcnRpZSBwYXIgZOlmYXV0IGVzdCBkZSA8dHQ+NTA8L3R0Pi4KKyAgPHRhZz48dHQ+LXA8L3R0PjxlbT5kZXZpY2U8L2VtPiA8dHQ+LS1wY20tZGV2aWNlPTwvdHQ+PGVtPmRldmljZTwvZW0+PC90YWc+CisgICAgU3DpY2lmaWUgbGUgcOlyaXBo6XJpcXVlIOAgdXRpbGlzZXIgcG91ciBsZSBzb24gKHZvaXIgbGEKKyAgICBzZWN0aW9uIDxyZWYgaWQ9Im9wZXJhbmQtcGNtLWRldmljZSIgbmFtZT0ic3DpY2lmaWNhdGlvbiBkdSBw6XJpcGjpcmlxdWUgUENNIj4pLiBDZXR0ZSBvcHRpb24gbmUKKyAgICBmb25jdGlvbm5lIHBhcyBzaSB2b3VzIGF2ZXogc3DpY2lmaekgbCdvcHRpb24gZGUgY29tcGlsYXRpb24gCisgICAgPHJlZiBpZD0iYnVpbGQtcGNtLXN1cHBvcnQiIG5hbWU9Ii0tZGlzYWJsZS1wY20tc3VwcG9ydCI+LgorICA8dGFnPjx0dC9wcmVmZXJlbmNlcy1maWxlLyA8ZW0vZmlsZS88bGFiZWwgaWQ9ImNvbmZpZ3VyZS1wcmVmZXJlbmNlcy1maWxlIj48L3RhZz4KKyAgICBTcOljaWZpZSBsJ2VtcGxhY2VtZW50IGR1IGZpY2hpZXIgcXVpIGRvaXQg6nRyZSB1dGlsaXPpIHBvdXIgc2F1dmVnYXJkZXIKKyAgICBldCBjaGFyZ2VyIGxlcyBwculm6XJlbmNlcyBkZSBsJ3V0aWxpc2F0ZXVyLiBTaSB2b3VzIGZvdXJuaXNzZXogdW4gY2hlbWluCisgICAgcmVsYXRpZiwgaWwgZXN0IGFuY3LpIHN1ciA8dHQ+L3Zhci9saWIvYnJsdHR5PC8+LiBMZSBy6WdsYWdlIHBhciBk6WZhdXQKKyAgICBjb25zaXN0ZSDgIHV0aWxpc2VyIDx0dC9icmx0dHkucHJlZnMvLiBWb3VzIHBvdXZleiBvdXRyZS1wYXNzZXIgY2V0dGUKKyAgICBsaWduZSBhdmVjIGwnb3B0aW9uIDxyZWYgaWQ9Im9wdGlvbnMtcHJlZmVyZW5jZXMtZmlsZSIgbmFtZT0iLUYiPiBlbgorICAgIGxpZ25lIGRlIGNvbW1hbmRlLgorICA8dGFnPjx0dD4tbTwvdHQ+PGVtPnBlcmlwaGVyaXF1ZTwvZW0+IDx0dD4tLW1pZGktZGV2aWNlPTwvdHQ+PGVtPnBlcmlwaGVyaXF1ZTwvZW0+PC90YWc+CisgICAgU3DpY2lmaWUgbGUgcOlyaXBo6XJpcXVlIOAgdXRpbGlzZXIgcG91ciBsJ2ludGVyZmFjZSBudW3pcmlxdWUgZCdpbnN0cnVtZW50CisgICAgZGUgbXVzaXF1ZSAodm9pciBsYSBzZWN0aW9uIDxyZWYgaWQ9Im9wZXJhbmQtbWlkaS1kZXZpY2UiIG5hbWU9InNw6WNpZmljYXRpb24gZHUKKyAgICBw6XJpcGjpcmlxdWUgTUlESSI+KS4gQ2V0dGUgb3B0aW9uIG5lIGZvbmN0aW9ubmUgcGFzIHNpIHZvdXMgYXZlegorICAgIHNw6WNpZmnpIGwnb3B0aW9uIGRlIGNvbXBpbGF0aW9uIDxyZWYgaWQ9ImJ1aWxkLW1pZGktc3VwcG9ydCIgbmFtZT0iLS1kaXNhYmxlLW1pZGktc3VwcG9ydCI+LgorICA8dGFnPjx0dD4taTwvdHQ+PGVtPmluc3RydW1lbnQ8L2VtPiA8dHQ+LS1pbnN0cnVtZW50PTwvdHQ+PGVtPmluc3RydW1lbnQ8L2VtPjwvdGFnPgorICAgIEwnaW5zdHJ1bWVudCDgIHV0aWxpc2VyIHNpIGxlIHDpcmlwaOlyaXF1ZSBz6WxlY3Rpb25u6SBlc3QKKyAgICBtaWRpLiBQb3VyIGxhIGxpc3RlIGNvbXBs6HRlIGRlcyBpbnN0cnVtZW50cywgdm9pciBsYSA8cmVmIGlkPSJvcGVyYW5kLW1pZGktZGV2aWNlIiBuYW1lPSJUYWJsZSBkZXMKKyAgICBpbnN0cnVtZW50IE1JREkiPi4gTCdpbnN0cnVtZW50IHBhciBk6WZhdXQgZXN0IHVuIDx0dD5waWFubyBncmFuZAorICAgIGFjY291c3RpcXVlPC90dD4uIExlcyBtb3RzIGNvbXBvcnRhbnQgbGUgbm9tIGRlIGwnaW5zdHJ1bWVudCBkb2l2ZW50CisgICAg6nRyZSBz6XBhculzIGxlcyB1bnMgZGVzIGF1dHJlcyBwYXIgdW4gc2ltcGxlIHNpZ25lIG1vaW5zIHBsdXT0dAorICAgIHF1ZSBwYXIgZGVzIGVzcGFjZXMsIGV0IGNoYWN1biBkZXMgbW90cyBwZXV0IOp0cmUgYWJy6WfpLgorICA8dGFnPjx0dD4taDwvdHQ+IDx0dD4tLWhlbHA8L3R0PjwvdGFnPgorICAgIEFmZmljaGUgdW4gculzdW3pIGRlcyBvcHRpb25zIGRlIGxhIGxpZ25lIGRlIGNvbW1hbmRlLgorPC9kZXNjcmlwPgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRzL01hbnVhbC1CUkxUVFkvRnJlbmNoL0Rpc3BsYXlzLnNnbWwgYi9Eb2N1bWVudHMvTWFudWFsLUJSTFRUWS9GcmVuY2gvRGlzcGxheXMuc2dtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNGIyN2Y1Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRzL01hbnVhbC1CUkxUVFkvRnJlbmNoL0Rpc3BsYXlzLnNnbWwKQEAgLTAsMCArMSw4IEBACis8c2VjdD5BZmZpY2hldXJzIGJyYWlsbGUgc3VwcG9ydOlzPGxhYmVsIGlkPSJkaXNwbGF5cyI+PHA+CitCUkxUVFkgc3VwcG9ydGUgbGVzIGFmZmljaGV1cnMgYnJhaWxsZSBzdWl2YW50czoKKzx0YWJsZSBsb2M9ImgiPgorICA8dGFidWxhciBjYT0ibGwiPgorICAgIE5vbXxNb2TobGVzQDxobGluZT4KKyAgICAmQnJhaWxsZURyaXZlcnMKKyAgPC90YWJ1bGFyPgorPC90YWJsZT4KZGlmZiAtLWdpdCBhL0RvY3VtZW50cy9NYW51YWwtQlJMVFRZL0ZyZW5jaC9Eb3RzLnNnbWwgYi9Eb2N1bWVudHMvTWFudWFsLUJSTFRUWS9GcmVuY2gvRG90cy5zZ21sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUwNmFjNTMKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudHMvTWFudWFsLUJSTFRUWS9GcmVuY2gvRG90cy5zZ21sCkBAIC0wLDAgKzEsMjcgQEAKKzxzZWN0PkNvbnZlbnRpb24gc3RhbmRhcmQgZHUgbm9tYnJlIGRlIHBvaW50cyBicmFpbGxlczxsYWJlbCBpZD0iZG90cyI+PHA+CitVbmUgY2VsbHVsZSBicmFpbGxlIHN0YW5kYXJkIGNvbnNpc3RlIGVuIHNpeCBwb2ludHMgculwYXJ0aXMgZW4gdHJvaXMgbGlnbmVzCitldCBkZXV4IGNvbG9ubmVzLgorQ2hhcXVlIHBvaW50IHBldXQg6nRyZSBpZGVudGlmaekgcGFyIHNvbiBudW3pcm8sIGNvbW1lIHN1aXQ6Cis8ZGVzY3JpcD4KKyAgPHRhZz4xPC90YWc+RW4gaGF1dCDgIGdhdWNoZSAobGlnbmUgMSwgY29sb25uZSAxKS4KKyAgPHRhZz4yPC90YWc+TWlsaWV1IGdhdWNoZSAobGlnbmUgMiwgY29sb25uZSAxKS4KKyAgPHRhZz4zPC90YWc+QmFzIGdhdWNoZSAobGlnbmUgMywgY29sb25uZSAxKS4KKyAgPHRhZz40PC90YWc+RW4gaGF1dCBkcm9pdGUgKGxpZ25lIDEsIGNvbG9ubmUgMikuCisgIDx0YWc+NTwvdGFnPk1pbGlldSBkcm9pdGUgKGxpZ25lIDIsIGNvbG9ubmUgMikuCisgIDx0YWc+NjwvdGFnPkJhcyBkcm9pdGUgKGxpZ25lIDMsIGNvbG9ubmUgMikuCis8L2Rlc2NyaXA+CisKK0xlIGJyYWlsbGUgaW5mb3JtYXRpcXVlIGEgaW50cm9kdWl0IHVuZSBxdWF0cmnobWUgcmFuZ+llIGVuIGJhcy4KKzxkZXNjcmlwPgorICA8dGFnPjc8L3RhZz5EZXNzb3VzIGdhdWNoZSAobGlnbmUgNCwgY29sb25uZSAxKS4KKyAgPHRhZz44PC90YWc+RGVzc291cyBkcm9pdGUgKGxpZ25lIDQsIGNvbG9ubmUgMikuCis8L2Rlc2NyaXA+CisKK1BldXQt6nRyZSBxdSd1bmUgaW1hZ2UgcmVuZHJhIGNldHRlIGNvbnZlbnRpb24gbnVt6XJpcXVlIHBsdXMgZmFjaWxlIOAKK2NvbXByZW5kcmUuCis8dHNjcmVlbj48dmVyYj4KKzEgbyBvIDQKKzIgbyBvIDUKKzMgbyBvIDYKKzcgbyBvIDgKKzwvdmVyYj48L3RzY3JlZW4+CmRpZmYgLS1naXQgYS9Eb2N1bWVudHMvTWFudWFsLUJSTFRUWS9GcmVuY2gvRHJpdmVycy5zZ21sIGIvRG9jdW1lbnRzL01hbnVhbC1CUkxUVFkvRnJlbmNoL0RyaXZlcnMuc2dtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZWQ3NGEzCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRzL01hbnVhbC1CUkxUVFkvRnJlbmNoL0RyaXZlcnMuc2dtbApAQCAtMCwwICsxLDcgQEAKKzxzZWN0PkNvZGVzIGQnaWRlbnRpZmljYXRpb24gZGUgcGlsb3RlPGxhYmVsIGlkPSJkcml2ZXJzIj48cD4KKzx0YWJsZSBsb2M9ImgiPgorICA8dGFidWxhciBjYT0ibGwiPgorICAgIENvZGV8TmFtZUA8aGxpbmU+CisgICAgJkRyaXZlckNvZGVzCisgIDwvdGFidWxhcj4KKzwvdGFibGU+CmRpZmYgLS1naXQgYS9Eb2N1bWVudHMvTWFudWFsLUJSTFRUWS9GcmVuY2gvRmVhdHVyZXMuc2dtbCBiL0RvY3VtZW50cy9NYW51YWwtQlJMVFRZL0ZyZW5jaC9GZWF0dXJlcy5zZ21sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM5MmFlOGIKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudHMvTWFudWFsLUJSTFRUWS9GcmVuY2gvRmVhdHVyZXMuc2dtbApAQCAtMCwwICsxLDExNDggQEAKKzxzZWN0PkRlc2NyaXB0aW9uIGRlcyBwb3NzaWJpbGl06XM8cD4KKworPHNlY3QxPlJvdXRpbmUgY3Vyc2V1cjxsYWJlbCBpZD0icm91dGluZyI+PHA+CitMb3JzcXVlIHZvdXMgZOlwbGFjZXogbGEgcGxhZ2UgYnJhaWxsZSBzdXIgbCfpY3JhbiBlbiBleGFtaW5hbnQgbGUgdGV4dGUgZGFucyAKK3VuIOlkaXRldXIsIHZvdXMgYXZleiBzb3V2ZW50IGJlc29pbiBkJ2FtZW5lciBsZSBjdXJzZXVyIOAgdW4gY2FyYWN06HJlIGVuIAorcGFydGljdWxpZXIg4CBsJ2ludOlyaWV1ciBkZSBsYSBwbGFnZSBicmFpbGxlLgorVm91cyB0cm91dmVyZXogcXVlIGMnZXN0IHVuZSB04mNoZSBwbHV09HQgZGlmZmljaWxlIHBvdXIgdW4gY2VydGFpbiBub21icmUgZGUKK3JhaXNvbnMuIEwndW5lIGQnZW50cmUgZWxsZXMgZXN0IHF1J2lsIHNlIHBldXQgcXVlIHZvdXMgbmUgc2FjaGlleiBwYXMgb/kgc2UKK3Ryb3V2ZSBsZSBjdXJzZXVyLCBldCB2b3VzIGF2ZXogcGV1dC3qdHJlIHBlcmR1IHZvdHJlIHBvc2l0aW9uIGVuIGVzc2F5YW50IGRlIGxlCit0cm91dmVyLiAKK1VuZSBhdXRyZSBlc3QgcXVlIGxlIGN1cnNldXIgcGV1dCBzZSBk6XBsYWNlciBkZSBmYedvbiBpbXBy6XZpc2libGUgbG9yc3F1ZQordm91cyBhcHB1eWV6IHN1ciBsZXMgZmzoY2hlcyBkZSBkaXJlY3Rpb24gKGNlcnRhaW5zIOlkaXRldXJzLCBwYXIgZXhlbXBsZSwKK24nYXV0b3Jpc2VudCBwYXMgbGUgY3Vyc2V1ciDgIGFsbGVyIHBsdXMg4CBkcm9pdGUgcXVlIGxhIGZpbiBkZSBsYSBsaWduZSBv+SBpbAorc2UgdHJvdXZlKS4KK0xhIHJvdXRpbmUtY3Vyc2V1ciBmb3Vybml0IGNldHRlIHBvc3NpYmlsaXTpIGVuIHNhY2hhbnQgb/kgc2UgdHJvdXZlIGxlIGN1cnNldXIsCitlbiBzaW11bGFudCBsZXMgYXBwdWlzIHN1ciBsZXMgZmzoY2hlcyBkZSBkaXJlY3Rpb24gcXVlIHZvdXMgZGV2cmllegorZW50cmVyIG1hbnVlbGxlbWVudCwgZXQgZW4gYWZmaWNoYW50IGwn6XZvbHV0aW9uIGR1IGN1cnNldXIgcGVuZGFudCBxdSdpbCBzZQorZOlwbGFjZS4KKworQ2VydGFpbnMgYWZmaWNoZXVycyBicmFpbGxlIG9udCB1biBib3V0b24sIGFwcGVs6SByb3V0aW5lLWN1cnNldXIsIGF1LWRlc3N1cyBkZQorY2hhcXVlIGNlbGx1bGUuIENlcyB0b3VjaGVzIHV0aWxpc2VudCBsYSBjb21tYW5kZQorPHJlZiBpZD0iY29tbWFuZC1ST1VURSIgbmFtZT0iUk9VVEUiPiBwb3VyIGFtZW5lciBsZSBjdXJzZXVyIHBy6WNpc+ltZW50IOAgCitsJ2VtcGxhY2VtZW50IGTpc2ly6S4KKworTGEgcm91dGluZS1jdXJzZXVyLCBiaWVuIHF1ZSB0cuhzIHByYXRpcXVlIGV0IHRy6HMgZWZmaWNhY2UsIG4nZXN0IHBhcywKK+AgcHJvcHJlbWVudCBwYXJsZXIsIHRvdGFsZW1lbnQgZmlhYmxlLiBVbmUgZGVzIHJhaXNvbnMgZGUgY2VsYSBlc3QgcXVlIHNhCitjb25jZXB0aW9uIGFjdHVlbGxlIHV0aWxpc2UgZGVzIHPpcXVlbmNlcyBkJ+ljaGFwcGVtZW50IGRlIHRvdWNoZXMgZHUgY3Vyc2V1cgorVlQxMDAuCisKK1VuZSBhdXRyZSBlc3QgcXVlIGNlcnRhaW5lcyBhcHBsaWNhdGlvbnMgZm9udCBkZXMgY2hvc2VzIG5vbiBzdGFuZGFyZHMgcG91cgorculhZ2lyIGxvcnNxdSdlbGxlcyBk6XRlY3RlbnQgbCdhcHB1aSBzdXIgbGVzIHRvdWNoZXMgZHUgY3Vyc2V1ci4KK1VuIHByb2Js6G1lIG1pbmV1ciB0cm91dukg4CBsJ2ludOlyaWV1ciBkZSBjZXJ0YWlucyDpZGl0ZXVycyAoY29tbWUgPHR0PnZpPC90dD4pLAorY29tbWUgbWVudGlvbm7pIGNpLWRlc3N1cywgZXN0IHF1J2lscyBzZSBwculjaXBpdGVudCBkYW5zIHVuIGTpcGxhY2VtZW50Cit2ZXJ0aWNhbCBpbXBy6XZpc2libGUgbG9yc3F1ZSB2b3VzIGRlbWFuZGV6IHVuIGTpcGxhY2VtZW50IHZlcnRpY2FsLCBjYXIgZWxsZXMKK24nYXV0b3Jpc2VudCBwYXMgbGUgY3Vyc2V1ciDgIHNlIHBsYWNlciDgIGRyb2l0ZSBkZSBsYSBmaW4gZCd1bmUgbGlnbmUuCitVbiBwcm9ibOhtZSBtYWpldXIgdHJvdXbpIGRhbnMgY2VydGFpbnMgbmF2aWdhdGV1cnMgd2ViIChjb21tZQorPHR0Pmx5bng8L3R0PiksIGVzdCBxdWUgbGVzIGZs6GNoZXMgaGF1dCBldCBiYXMgc29udCB1dGlsaXPpZXMgcG91ciBzZSBk6XBsYWNlcgorcGFybWkgbGVzIGxpZW5zIChjZSBxdWkgcGV1dCBzYXV0ZXIgZGVzIGxpZ25lcyBldC9vdSBk6XBsYWNlciBob3Jpem9udGFsZW1lbnQKK2xlIGN1cnNldXIgbWFpcyByYXJlbWVudCBk6XBsYWNlciBsZSBjdXJzZXVyIGQndW5lIGxpZ25lIGRhbnMgbGEgZGlyZWN0aW9uCitk6XNpcullKSwgZXQgcXVlIGxlcyBmbOhjaGVzIGdhdWNoZSBldCBkcm9pdGUgc29udCB1dGlsaXPpZXMgcG91ciBz6WxlY3Rpb25uZXIKK2xlcyBsaWVucyAoY2UgcXVpIG4nYSBhYnNvbHVtZW50IHJpZW4g4CB2b2lyIGF2ZWMgdW5lIHF1ZWxjb25xdWUgZm9ybWUgZGUKK2TpcGxhY2VtZW50IGRlIGN1cnNldXIsIGV0IHF1aSBjaGFuZ2UgbeptZSB0b3RhbGVtZW50IGxlIGNvbnRlbnUgZGUgbCfpY3JhbikuCisKK0lsIHNlIHBldXQgcXVlIGxhIHJvdXRpbmUgY3Vyc2V1ciBuZSBmb25jdGlvbm5lIHBhcyB0cuhzIGJpZW4gc3VyIGxlcyBzeXN06G1lcworbG91cmRzIOAgc2UgY2hhcmdlciwgZXQgZWxsZSBuZSBmb25jdGlvbm5lcmEgY2VydGFpbmVtZW50IHBhcyB0cuhzIGJpZW4KK2xvcnNxdSdlbGxlIHRvdXJuZXJhIHNvdXMgdW4gdmlldXggc3lzdOhtZSBheWFudCBkZXMgbGlhaXNvbnMgbGVudGVzLiBJbCBlbiBlc3QKK2FpbnNpIGNhciB0b3VzIGxlcyB0ZXN0cyBxdWkgZG9pdmVudCDqdHJlIGZhaXRzIHBlbmRhbnQgbGUgcHJvY2Vzc3VzIGRlIGZh529uIOAKK3RyYWl0ZXIgbGVzIG1vdXZlbWVudHMgaW1wcul2aXNpYmxlcyBkdSBjdXJzZXVyIGV0IGFmaW4gZGUgcydhc3N1cmVyCitxdSd1bmUgZXJyZXVyIGEgYXUgbW9pbnMgdW5lIGNoYW5jZSBkJ+p0cmUgY29ycmln6WUuCitCaWVuIHF1ZSBCUkxUVFkgcydlZmZvcmNlIGQn6nRyZSBhc3NleiBpbnRlbGxpZ2VudCwgaWwgZG9pdCBhdHRlbmRyZSBlbmNvcmUKK2RlIHZvaXIgY2UgcXUnaWwgc2UgcGFzc2UgYXBy6HMgY2hhcXVlIGFwcHVpIHNpbXVs6SBzdXIgdW5lIGZs6GNoZSBkZSBkaXJlY3Rpb24uIAorCitVbmUgZm9pcyBxdSd1bmUgZGVtYW5kZSBkZSByb3V0aW5lLWN1cnNldXIgYSDpdOkgZmFpdGUsIEJSTFRUWSBlc3NhaWUgZCdhbWVuZXIKK2xlIGN1cnNldXIg4CBsYSBwb3NpdGlvbiBk6XNpcullIGR1cmFudCB1biBjZXJ0YWluIGTpbGFpIGF2YW50CitxdWUgbGUgY3Vyc2V1ciBuJ2F0dGVpZ25lIGNldHRlIHBvc2l0aW9uLCBsZSBjdXJzZXVyIHNlbWJsYW50IHNlIGTpcGxhY2VyIGRhbnMgbGEKK21hdXZhaXNlIGRpcmVjdGlvbiwgb3Ugdm91cyBwYXNzZXog4CB1biB0ZXJtaW5hbCBkaWZm6XJlbnQuCitFbiBwcmVtaWVyLCB1biBlZmZvcnQgZXN0IGZhaXQgcG91ciB1dGlsaXNlciBsZSBk6XBsYWNlbWVudCB2ZXJ0aWNhbCBwb3VyCithbWVuZXIgbGUgY3Vyc2V1ciDgIGxhIGJvbm5lIGxpZ25lLCBwdWlzLCB1bmlxdWVtZW50IHNpIGNlbGEgcul1c3NpdCwgdW4gZWZmb3J0Citlc3QgZmFpdCBwb3VyIHV0aWxpc2VyIGxlIGTpcGxhY2VtZW50IGhvcml6b250YWwgcG91ciBhbWVuZXIgbGUgY3Vyc2V1ciDgIGxhCitib25uZSBjb2xvbm5lLiBTaSB2b3VzIGZhaXRlcyB1bmUgYXV0cmUgZGVtYW5kZSBhbG9ycyBxdSd1bmUgcm91dGluZSBlc3QgZW4gdHJhaW4gZGUKK3MnZWZmZWN0dWVyLCBsYSBwcmVtaehyZSBlc3QgYW5udWzpZSBldCBsYSBkZXV4aehtZSBlc3QgZOltYXJy6WUuIAorCitVbmUgY29tbWFuZGUgZGUgcm91dGluZSBjdXJzZXVyIHBsdXMgc/tyZSBtYWlzIG1vaW5zIHB1aXNzYW50ZSwgCis8cmVmIGlkPSJjb21tYW5kLUNTUkpNUF9WRVJUIiBuYW1lPSJDU1JKTVBfVkVSVCI+LCB1dGlsaXNlIGxlIGTpcGxhY2VtZW50Cit2ZXJ0aWNhbCBwb3VyIGFtZW5lciBsZSBjdXJzZXVyIG4naW1wb3J0ZSBv+SBzdXIgbGEgcHJlbWnocmUgbGlnbmUgZGUgbGEKK3BsYWdlIGJyYWlsbGUuIEVsbGUgZXN0IHN1cnRvdXQgdXRpbGUsIGpvaW50ZSDgIGNlcnRhaW5lcyBhcHBsaWNhdGlvbnMKKyhjb21tZSA8dHQ+bHlueDwvdHQ+KSwgZGFucyBsZXNxdWVsbGVzIGxlIGTpcGxhY2VtZW50IGR1IGN1cnNldXIg4CBsJ2hvcml6b250YWwKK25lIGRvaXQgamFtYWlzIOp0cmUgdGVudOkuCisKKzxzZWN0MT5Db3BpZXItY29sbGVyPGxhYmVsIGlkPSJjdXQiPjxwPgorQ2V0dGUgcG9zc2liaWxpdOkgdm91cyBwZXJtZXQgZCdleHRyYWlyZSB1biB0ZXh0ZSBxdWkgZXN0IGTpauAgc3VyIGwn6WNyYW4KK2V0IGRlIGxlIHLpZW50cmVyIOAgbGEgcG9zaXRpb24gY291cmFudGUgZHUgY3Vyc2V1ci4gU29uIHV0aWxpc2F0aW9uIHZvdXMgZmFpdAorZ2FnbmVyIGR1IHRlbXBzIGV0IHBlcm1ldCBkJ+l2aXRlciBsZXMgZXJyZXVycyBsb3JzcXVlIHZvdXMgYXZleiBiZXNvaW4gZGUgY29waWVyIHVuCit0ZXh0ZSBsb25nIGV0L291IGNvbXBsaXF16SwgZXQgbeptZSBxdWFuZCB2b3VzIGF2ZXogYmVzb2luIGRlIGNvcGllciBwbHVzaWV1cnMKK2ZvaXMgbGUgbeptZSB0ZXh0ZSBjb3VydCBldCBzaW1wbGUuIEVsbGUgZXN0IHBhcnRpY3VsaehyZW1lbnQgdXRpbGUgcG91ciBkZXMKK2Nob3NlcyB0ZWxsZXMgcXVlIGxlcyBub21zIGRlIGZpY2hpZXIgbG9uZ3MsIGxlcyBsaWduZXMgZGUgY29tbWFuZGUgY29tcGxpcXXpZXMsCitsZXMgYWRyZXNzZXMgbWFpbCwgZXQgbGVzIFVSTFMuIENvcGllciBldCBjb2xsZXIgZHUgdGV4dGUgcGFzc2UgcGFyIHRyb2lzCivpdGFwZXMgc2ltcGxlczoKKzxlbnVtPgorICA8aXRlbT4KKyAgICBNYXJxdWVyIGxlIGNvaW4gZW4gaGF1dCDgIGdhdWNoZSBkZSBsYSB6b25lIHJlY3Rhbmd1bGFpcmUgb3UgbGUgZOlidXQgZGUgbGEKKyAgICB6b25lIGxpbulhaXJlIHN1ciBsJ+ljcmFuLCBxdWkgc2VyYSBleHRyYWl0ZSAoY29waellKS4gU2kgdm90cmUgYWZmaWNoZXVyIGEKKyAgICBkZXMgcm91dGluZXMtY3Vyc2V1ciwgZOlwbGFjZXogbGEgcGxhZ2UgYnJhaWxsZSBkZSBmYedvbiDgIGNlIHF1ZSBsZQorICAgIHByZW1pZXIgY2FyYWN06HJlIOAgY29waWVyIGFwcGFyYWlzc2UgcXVlbHF1ZSBwYXJ0IOAgbCdpbnTpcmlldXIsIHB1aXM6CisgICAgPGl0ZW1pemU+CisgICAgICA8aXRlbT4KKyAgICAgICAgYXBwZWxleiBsYSBjb21tYW5kZSA8cmVmIGlkPSJjb21tYW5kLUNVVEJFR0lOIiBuYW1lPSJDVVRCRUdJTiI+IHBvdXIKKwlk6W1hcnJlciB1biBub3V2ZWF1IHRhbXBvbgorICAgICAgPGl0ZW0+CisgICAgICAgIGFwcGVsZXogbGEgY29tbWFuZGUgPHJlZiBpZD0iY29tbWFuZC1DVVRBUFBFTkQiIG5hbWU9IkNVVEFQUEVORCI+IHBvdXIKKwltYXJxdWVyIGxlIHRhbXBvbiBjb3Bp6SBleGlzdGFudC4KKyAgICA8L2l0ZW1pemU+CisgICAgZW4gcHJlc3NhbnQgbGEvbGVzIHRvdWNoZShzKSBxdWkgeSBzb250IGFzc29jaellKHMpLCBwdWlzIGVuIGFwcHV5YW50IHN1ciBsYQorICAgIHJvdXRpbmUtY3Vyc2V1ciBhc3NvY2npZSBhdSBjYXJhY3TocmUKKyAgPGl0ZW0+CisgICAgTWFycXVlciBsZSBjb2luIGVuIGJhcyDgIGRyb2l0ZSBkZSBsYSB6b25lIHJlY3Rhbmd1bGFpcmUgb3UgbGEgZmluIGRlCisgICAgbGEgem9uZSBsaW7pYWlyZSBzdXIgbCfpY3JhbiBxdWkgZG9pdCDqdHJlIGV4dHJhaXRlIChjb3Bp6WUpLgorICAgIFNpIHZvdHJlIGFmZmljaGV1ciBhIGRlcyByb3V0aW5lcy1jdXJzZXVyLCBk6XBsYWNleiBsYSBwbGFnZSBicmFpbGxlCisgICAgZGUgdGVsbGUgc29ydGUgcXVlIGxlIGRlcm5pZXIgY2FyYWN06HJlIOAgY29waWVyIGFwcGFyYWlzc2UgcXVlbHF1ZSBwYXJ0CisgICAg4CBsJ2ludOlyaWV1ciwgcHVpcworICAgIDxpdGVtaXplPgorICAgICAgPGl0ZW0+CisgICAgICAgIGFwcGVsZXogbGEgY29tbWFuZGUgPHJlZiBpZD0iY29tbWFuZC1DVVRSRUNUIiBuYW1lPSJDVVRSRUNUIj4gcG91cgorCWNvcGllciB1bmUgem9uZSByZWN0YW5ndWxhaXJlLgorICAgICAgPGl0ZW0+CisgICAgICAgIGFwcGVsZXogbGEgY29tbWFuZGUgPHJlZiBpZD0iY29tbWFuZC1DVVRMSU5FIiBuYW1lPSJDVVRMSU5FIj4gcG91cgorCWNvcGllciB1bmUgem9uZSBsaW7pYWlyZS4KKyAgICA8L2l0ZW1pemU+CisgICAgZW4gcHJlc3NhbnQgbGVzL2xhIHRvdWNoZShzKSBhc3NvY2npZShzKSBwdWlzIGVuIHByZXNzYW50IGxhIHJvdXRpbmUtY3Vyc2V1cgorICAgIGFzc29jaellIGF1IGNhcmFjdOhyZS4gTGUgbWFycXVhZ2UKKyAgICBkZSBsYSBmaW4gZGUgbGEgculnaW9uIGNvcGnpZSBk6XBvc2UgbGUgY29udGVudSBkJ3VuIOljcmFuIGNvcGnpIGRhbnMgbGUKKyAgICBwcmVzc2UtcGFwaWVyLgorICAgIExlcyBlc3BhY2VzIHN1cGVyZmx1cyBzb250IHN1cHByaW3pcyBlbiBmaW4gZGUgY2hhcXVlIGxpZ25lIGRhbnMgbGUKKyAgICBwcmVzc2UtcGFwaWVyIGRlIGZh529uIOAgY2UgcXVlIGxlcyBlc3BhY2VzIG5vbiBk6XNpculzIHF1aSBlbiBk6WNvdWxlbnQgbmUKKyAgICBzb2llbnQgcGFzIGNvbGzpcy4KKyAgICBMZXMgY2FyYWN06HJlcyBkZSBjb250cvRsZSBzb250IHJlbXBsYWPpcyBwYXIgZGVzIGVzcGFjZXMuCisgIDxpdGVtPgorICAgIEluc+lyZXogKGNvbGxlcikgbGUgdGV4dGUgbOAgb/kgdm91cyBhdmV6IGJlc29pbi4gUGxhY2V6IGxlIGN1cnNldXIgYXBy6HMgbGUKKyAgICBjYXJhY3TocmUgb/kgbGUgdGV4dGUgZG9pdCDqdHJlIGluc+ly6SwgZXQgYXBwZWxleiBsYSBjb21tYW5kZQorICAgIDxyZWYgaWQ9ImNvbW1hbmQtUEFTVEUiIG5hbWU9IlBBU1RFIj4uIFZvdXMgcG91dmV6IGNvcGllciBsZSBt6m1lIHRleHRlCisgICAgYXV0YW50IGRlIGZvaXMgcXVlIHZvdXMgbGUgdm91bGV6IHNhbnMgbGUgY29waWVyIOAgbm91dmVhdS4KKyAgICBDZXR0ZSBkZXNjcmlwdGlvbiBzdXBwb3NlIHF1ZSB2b3VzIOp0ZXMgZOlq4CBkYW5zIHVuIG1vZGUgZCdlbnRy6WUuIFNpIHZvdXMKKyAgICBjb2xsZXogYWxvcnMgcXVlIHZvdXMg6nRlcyBkYW5zIHVuIGF1dHJlIHR5cGUgZGUgbW9kZSAoY29tbWUgbGUKKyAgICBtb2RlIGNvbW1hbmRlIGRlIDx0dD52aTwvdHQ+KSwgdm91cyBkZXZleiBhbG9ycyBiaWVuIOp0cmUgY29uc2NpZW50IGRlIGNlIHF1ZQorICAgIGxlcyBjYXJhY3TocmVzIGR1IHByZXNzZS1wYXBpZXIgcG91cnJvbnQgZmFpcmUuCisgICAgPC9lbnVtPgorCitMZSB0YW1wb24gY29waekgZXN0IHV0aWxpc+kgYXVzc2kgcGFyIGxlcyBjb21tYW5kZXMKKzxyZWYgaWQ9ImNvbW1hbmQtUFJTRUFSQ0gtTlhTRUFSQ0giIG5hbWU9IlBSU0VBUkNIL05YU0VBUkNIIj4uCisKKzxzZWN0MT5TdXBwb3J0IGR1IHBvaW50ZXVyIChzb3VyaXMpIHZpYSBHUE08bGFiZWwgaWQ9ImdwbSI+PHA+CitTaSBCUkxUVFkgZXN0IGNvbmZpZ3Vy6SBhdmVjIGwnb3B0aW9uIGRlIGNvbXBpbGF0aW9uCis8cmVmIGlkPSJncG0iIG5hbWU9Ii0tZW5hYmxlLWdwbSI+IHN1ciB1biBzeXN06G1lIG/5IGwnYXBwbGljYXRpb24KKzx0dD5ncG08L3R0PiBhIOl06SBpbnN0YWxs6WUsIGlsIHLpYWdpcmEgYXUgcG9pbnRldXIgKHNvdXJpcykuCisKK0xlIGZhaXQgZGUgYm91Z2VyIGxhIHBsYWdlIGJyYWlsbGUgZOlwbGFjZSBsZSBwb2ludGV1ciAodm9pciBsYSBwculm6XJlbmNlCis8cmVmIGlkPSJwcmVmZXJlbmNlLXBvaW50ZXItZm9sbG93cy13aW5kb3ciIG5hbWU9IkxlIHBvaW50ZXVyIHN1aXQgbGEgZmVu6nRyZSI+KS4KK0xlIGTpcGxhY2VtZW50IGRlIGxhIHBsYWdlIGJyYWlsbGUgKG1hbnVlbCwgcGFyIHJlY2hlcmNoZSBkdSBjdXJzZXVyIGV0Yy4pLAorZXN0IGFwcGxpcXXpIG5vbiBzZXVsZW1lbnQgcXVhbmQgaWwgc2UgZOlwbGFjZSBlbiBy6XBvbnNlIOAgdW4gbW91dmVtZW50IGR1IHBvaW50ZXVyLCBtYWlzIGlsCitk6XBsYWNlIGF1c3NpIGxlIHBvaW50ZXVyIGF1IGNhcmFjdOhyZSDgIGwn6WNyYW4gcXVpIGNvcnJlc3BvbmQgYXUgY29pbiBlbiBoYXV0IOAKK2dhdWNoZSBkZSBsYSBwbGFnZSBicmFpbGxlLiBDZWxhIHBlcm1ldCDgIHVuZSBwZXJzb25uZSB2b3lhbnRlIGRlIHZvaXIgb/kgc2UKK3Ryb3V2ZSBsYSBwbGFnZSBicmFpbGxlIGV0IGRvbmMsIGRlIHNhdm9pciBjZSBxdWUgbCd1dGlsaXNhdGV1ciBicmFpbGxpc3RlCitlc3QgZW4gdHJhaW4gZGUgbGlyZS4gQ2VsYSBy6WN1cOhyZSBhdXNzaSBsZSBwb2ludGV1ciBkYW5zIGxhIHBsYWdlCiticmFpbGxlIGRlIHNvcnRlIHF1ZSB2b3VzIHBvdXZleiBsZQordHJvdXZlciBmYWNpbGVtZW50IGV0IHF1ZSBsZSBw6XJpcGjpcmlxdWUgZHUgcG9pbnRldXIgcGV1dCB0b3Vqb3VycyDqdHJlCit1dGlsaXPpIGNvbW1lIHVuIGF1dHJlIG1veWVuIGRlIGTpcGxhY2VyIGxhIHBsYWdlIGJyYWlsbGUuIAorCitMZSBk6XBsYWNlbWVudCBkdSBwb2ludGV1ciBlbW3obmUgbGEgcGxhZ2UgYnJhaWxsZSAodm9pciBsYSBwculm6XJlbmNlCis8cmVmIGlkPSJwcmVmZXJlbmNlLXdpbmRvdy1mb2xsb3dzLXBvaW50ZXIiIG5hbWU9IkxhIGZlbup0cmUgc3VpdCBsZSBwb2ludGV1ciI+KS4KK0NoYXF1ZSBmb2lzIHF1ZSB2b3VzIGTpcGxhY2V6IGxlIHBvaW50ZXVyIGF1LWRlbOAgZHUgYm9yZCBkZSBsYSBwbGFnZQorYnJhaWxsZSwgbGEgcGxhZ2UgYnJhaWxsZSBlc3QgZW1tZW7pZSB0b3V0IGF1IGxvbmcgZHUgZOlwbGFjZW1lbnQgKHVuCitjYXJhY3TocmUg4CBsYSBmb2lzKS4KK0NlbGEgZG9ubmUg4CBsJ3V0aWxpc2F0ZXVyIGJyYWlsbGUgdW5lIGF1dHJlIG1hbmnocmUgZW4gZGV1eCBkaW1lbnNpb25zCitkJ2luc3BlY3RlciBsZSBjb250ZW51IGRlIGwn6WNyYW4gb3UgZGUgZOlwbGFjZXIgcmFwaWRlbWVudCBsYSBwbGFnZSBicmFpbGxlCivgIHVuIGVuZHJvaXQgZOlzaXLpLiBDZWxhIGRvbm5lIGF1c3NpIOAgbCd1dGlsaXNhdGV1ciB2b3lhbnQgdW5lIGZh529uCitzaW1wbGUgZGUgZOlwbGFjZXIgbGEgcGxhZ2UgYnJhaWxsZSBzdXIgcXVlbHF1ZSBjaG9zZSBxdSdpbCBhaW1lcmFpdCBxdWUKK2wndXRpbGlzYXRldXIgYnJhaWxsaXN0ZSBsaXNlLgorCis8dHQ+Z3BtPC90dD4gdXRpbGlzZSBsYSB2aWTpbyBpbnZlcnPpZSBwb3VyIG1vbnRyZXIgb/kgc2UgdHJvdXZlIGxlIHBvaW50ZXVyLgorTGUgc291bGlnbmVtZW50IGRlcyBjYXJhY3TocmVzIGVuIHN1cmJyaWxsYW5jZSBkZXZyYWl0IGRvbmMg6nRyZSBhY3RpdukgKHZvaXIKK2xhIGNvbW1hbmRlIDxyZWYgaWQ9ImNvbW1hbmQtQVRUUlZJUyIgbmFtZT0iQVRUUlZJUyI+IHBvdXIgZGVzICBk6XRhaWxzKSBxdWUgCitxdWFuZCBsJ3V0aWxpc2F0ZXVyIGJyYWlsbGlzdGUgdmV1dCB1dGlsaXNlciBsZSBwb2ludGV1ci4KKworQ2V0dGUgZm9uY3Rpb25uYWxpdOkgZG9ubmUgYXVzc2kg4CBsJ3V0aWxpc2F0ZXVyIGJyYWlsbGlzdGUgYWNj6HMg4CBsYQorZm9uY3Rpb24gY29waWVyLWNvbGxlciBkZSA8dHQ+Z3BtPC90dD4uIEJpZW4gcXVlIHZvdXMgZGV2cmlleiBsaXJlIGxhIGRvY3VtZW50YXRpb24KK3Nw6WNpZmlxdWUgZGUgPHR0PmdwbTwvdHQ+LCB2b2ljaSBxdWVscXVlcyByZW1hcnF1ZXMgc3VyIHNvbiBmb25jdGlvbm5lbWVudC4KKzxpdGVtaXplPgorICA8aXRlbT4KKyAgICBDb3BpZXogbGUgY2FyYWN06HJlIGNvdXJhbnQgZGFucyBsZSBwcmVzc2UtcGFwaWVyIHBhciB1biBzaW1wbGUgY2xpYyBzdXIgbGUKKyAgICBib3V0b24gZ2F1Y2hlLgorICA8aXRlbT4KKyAgICBDb3BpZXogbGUgbW90IGNvdXJhbnQgKGTpbGltaXTpIHBhciB1biBlc3BhY2UpIGRhbnMgbGUgcHJlc3NlLXBhcGllciBlbgorICAgIGNsaXF1YW50IGRldXggZm9pcyBzdXIgbGUgYm91dG9uIGdhdWNoZS4KKyAgPGl0ZW0+CisgICAgQ29waWV6IGxhIGxpZ25lIGNvdXJhbnRlIGRhbnMgbGUgcHJlc3NlIHBhcGllciBlbiBjbGlxdWFudCB0cm9pcyBmb2lzIHN1cgorICAgIGxlIGJvdXRvbiBnYXVjaGUuCisgIDxpdGVtPgorICAgIENvcGlleiB1bmUgculnaW9uIGxpbulhaXJlIHZlcnMgbGUgcHJlc3NlLXBhcGllciBjb21tZSBzdWl0OgorICAgIDxlbnVtPgorICAgICAgPGl0ZW0+CisgICAgICAgIFBsYWNleiBsZSBjdXJzZXVyIHN1ciBsZSBwcmVtaWVyIGNhcmFjdOhyZSBkZSBsYSBy6Wdpb24uCisgICAgICA8aXRlbT4KKyAgICAgICAgUHJlc3NleiAoZXQgbWFpbnRlbmV6KSBsZSBib3V0b24gZ2F1Y2hlLgorICAgICAgPGl0ZW0+CisgICAgICAgIETpcGxhY2V6IGxlIGN1cnNldXIgYXUgZGVybmllciBjYXJhY3TocmUgZGUgbGEgculnaW9uICh0b3VzIGxlcworCWNhcmFjdOhyZXMgc+lsZWN0aW9ubulzIHNvbnQgbWFpbnRlbmFudCBlbiBzdXJicmlsbGFuY2UpLgorICAgICAgPGl0ZW0+CisgICAgICAgIEziY2hleiBsZSBib3V0b24gZ2F1Y2hlLgorICAgIDwvZW51bT4KKyAgPGl0ZW0+CisgICAgQ29sbGV6IChpbnPpcmV6KSBsZSBjb250ZW51IGNvdXJhbnQgZHUgcHJlc3NlIHBhcGllciBlbiBjbGlxdWFudCBzdXIgbGUKKyAgICBib3V0b24gY2VudHJhbCBkJ3VuZSBzb3VyaXMg4CB0cm9pcyBib3V0b25zLCBvdSBlbiBjbGlxdWFudCBzdXIgbGUgYm91dG9uCisgICAgZHJvaXQgZCd1bmUgc291cmlzIOAgZGV1eCBib3V0b25zLgorICA8aXRlbT4KKyAgICBNYXJxdWV6IGxlIHByZXNzZS1wYXBpZXIgZW4gdXRpbGlzYW50IGxlIGJvdXRvbiBkcm9pdCBkJ3VuZSBzb3VyaXMg4CB0cm9pcworICAgIGJvdXRvbnMuCis8L2l0ZW1pemU+CisKKzxzZWN0MT5Tb25zIGQnYXZlcnRpc3NlbWVudDxsYWJlbCBpZD0idHVuZXMiPjxwPgorQlJMVFRZIHZvdXMgYXZlcnRpdCBkZSBsJ2V46WN1dGlvbiBkJ+l26W5lbWVudHMgc2lnbmlmaWNhdGlmcyBlbiBqb3VhbnQgdW4gc29uCiticmVmIHBy6WTpZmluaS4gQ2V0dGUgZm9uY3Rpb25hbGl06SBwZXV0IOp0cmUgYWN0aXbpZSBldCBk6XNhY3RpdullIGF2ZWMgbGEKK2NvbW1hbmRlCis8cmVmIGlkPSJjb21tYW5kLVRVTkVTIiBuYW1lPSJUVU5FUyI+IG91IGxhIHBy6WbpcmVuY2UKKzxyZWYgaWQ9InByZWZlcmVuY2UtYWxlcnQtdHVuZXMiIG5hbWU9IlNvbnMgZCdhdmVydGlzc2VtZW50Ij4uCitMZXMgc29ucyBzb250IGpvdelzIHBhciBsZSBzeW50aOl0aXNldXIgaW50ZXJuZSBwYXIgZOlmYXV0LCBtYWlzIHZvdXMgcG91dmV6Citz6WxlY3Rpb25uZXIgZCdhdXRyZXMgYWx0ZXJuYXRpdmVzIGF2ZWMgbGEgcHLpZulyZW5jZQorPHJlZiBpZD0icHJlZmVyZW5jZS10dW5lLWRldmljZSIgbmFtZT0iUOlyaXBo6XJpcXVlIHBvdXIgbGVzIHNvbnMiPi4KKworQ2hhcXVlIOl26W5lbWVudCBzaWduaWZpY2F0aWYgZXN0IGFzc29jaeksIGRlIGxhIHByaW9yaXTpIGxhIHBsdXMgaGF1dGUg4CBsYQorcGx1cyBmYWlibGUsIOAgdW4gb3UgcGx1c2lldXJzIGRlcyDpbOltZW50cyBzdWl2YW50czoKKzxkZXNjcmlwPgorICA8dGFnPnVuIHNvbjwvdGFnPgorICAgIFNpIHZvdXMgYXZleiBhc3NvY2npIHVuIG5vbSDgIGwn6XbpbmVtZW50LCBzaSBsYSBwculm6XJlbmNlCisgICAgPHJlZiBpZD0icHJlZmVyZW5jZS1hbGVydC10dW5lcyIgbmFtZT0iU29ucyBkJ2F2ZXJ0aXNzZW1lbnQiPiAodm9pciBhdXNzaSBsYQorICAgIGNvbW1hbmRlIDxyZWYgaWQ9ImNvbW1hbmQtVFVORVMiIG5hbWU9IlRVTkVTIj4pIGVzdCBhY3RpdmUsIGV0IHNpIGxlCisgICAgcOlyaXBo6XJpcXVlIGRlIHNvbiBz6WxlY3Rpb25u6SAodm9pciBsYSBwculm6XJlbmNlIDxyZWYgaWQ9InByZWZlcmVuY2UtdHVuZS1kZXZpY2UiIG5hbWU9IlDpcmlwaOlyaXF1ZSBkZSBzb24iPikKKyAgICBwZXV0IOp0cmUgb3V2ZXJ0LCBsZSBzb24gZXN0IGpvdekuCisgIDx0YWc+dW4gc2No6W1hIGRlIHBvaW50czwvdGFnPgorICAgIFNpIHVuIHR5cGUgZGUgc2lnbmUgYSDpdOkgYXNzb2Np6SDgIHVuIOl26W5lbWVudCwgZXQgc2kgbGEgcHLpZulyZW5jZQorICAgIDxyZWYgaWQ9InByZWZlcmVuY2UtYWxlcnQtZG90cyIgbmFtZT0iUG9pbnRzIGQnYXZlcnRpc3NlbWVudCI+IGVzdCBhY3RpdmUsIGxlIHNpZ25lCisgICAgZXN0IGJyaeh2ZW1lbnQgYWZmaWNo6SBzdXIgY2hhcXVlIGNlbGx1bGUgYnJhaWxsZS4KKyAgICBDZXJ0YWlucyBhZmZpY2hldXJzIGJyYWlsbGUgbmUgculhZ2lzc2VudCBwYXMgYXNzZXogdml0ZSBwb3VyIHF1ZSBjZQorICAgIHN5c3TobWUgZm9uY3Rpb25uZSBlZmZpY2FjZW1lbnQuCisgIDx0YWc+dW4gbWVzc2FnZTwvdGFnPgorICAgIFNpIHVuIG1lc3NhZ2UgYSDpdOkgYXNzb2Np6SDgIGwn6XbpbmVtZW50LCBldCBzaSBsYSBwculm6XJlbmNlCisgICAgPHJlZiBpZD0icHJlZmVyZW5jZS1hbGVydC1tZXNzYWdlcyIgbmFtZT0iTWVzc2FnZXMgZCdhdmVydGlzc2VtZW50Ij4gZXN0IGFjdGl2ZSwKKyAgICBpbCBlc3QgYWZmaWNo6SBwZW5kYW50IHF1ZWxxdWVzIHNlY29uZGVzICh2b2lyIGwnb3B0aW9uIDxyZWYgaWQ9Im9wdGlvbnMtbWVzc2FnZS10aW1lb3V0IiBuYW1lPSItTSI+CisgICAgZW4gbGlnbmUgZGUgY29tbWFuZGUuCis8L2Rlc2NyaXA+CisKK0NlcyDpduluZW1lbnRzIGluY2x1ZW50OgorPGl0ZW1pemU+CisgIDxpdGVtPgorICAgIExlIG1vbWVudCBv+SBsZSBwaWxvdGUgZGUgbCdhZmZpY2hldXIgYnJhaWxsZSBk6W1hcnJlIG91IHMnYXJy6nRlLgorICA8aXRlbT4KKyAgICBMZSBtb21lbnQgb/kgdW5lIGNvbW1hbmRlIGxvbmd1ZSBlc3QgdGVybWlu6WUuCisgIDxpdGVtPgorICAgIExlIG1vbWVudCBv+SB1bmUgY29tbWFuZGUgcGV1dCDqdHJlIGV46WN1dOllLgorICA8aXRlbT4KKyAgICBMZSBtb21lbnQgb/kgdW4gcmVw6HJlIGVzdCBwb3PpLgorICA8aXRlbT4KKyAgICBMZSBtb21lbnQgb/kgbGUgZOlidXQgb3UgbGEgZmluIGR1IHByZXNzZS1wYXBpZXIgZXN0IHBvc+kuCisgIDxpdGVtPgorICAgIExlIG1vbWVudCBv+SB1bmUgY2FyYWN06XJpc3RpcXVlIGVzdCBhY3RpdullIG91IGTpc2FjdGl26WUuCisgIDxpdGVtPgorICAgIExlIG1vbWVudCBv+SBsYSBwb3Vyc3VpdGUgZHUgY3Vyc2V1ciBlc3QgYWN0aXbpIG91IGTpc2FjdGl26S4KKyAgPGl0ZW0+CisgICAgTGUgbW9tZW50IG/5IGwnaW1hZ2UgZGUgbCfpY3JhbiBlc3QgZ2Vs6WUgb3UgcmFmcmHuY2hpZS4KKyAgPGl0ZW0+CisgICAgTGUgbW9tZW50IG/5IGxhIHBsYWdlIGJyYWlsbGUgZW50cmHubmUgbGEgcGxhZ2UgYnJhaWxsZSBlbiBiYXMgYXUgZOlidXQgZGUgbGEKKyAgICBsaWduZSBzdWl2YW50ZSwgb3UgZW4gaGF1dCDgIGxhIGZpbiBkZSBsYSBsaWduZSBwculj6WRlbnRlLgorICA8aXRlbT4KKyAgICBMZSBtb21lbnQgb/kgZGVzIGxpZ25lcyBpZGVudGlxdWVzIHNvbnQgc2F1dOllcy4KKyAgPGl0ZW0+CisgICAgTGUgbW9tZW50IG/5IHVuIGTpcGxhY2VtZW50IGRlbWFuZOkgbmUgcGV1dCBwYXMg6nRyZSBlZmZlY3R16S4KKyAgPGl0ZW0+CisgICAgTGUgbW9tZW50IG/5IGxhIHJvdXRpbmUtY3Vyc2V1ciBjb21tZW5jZSwgcydhY2jodmUgb3Ug6WNob3VlLgorPC9pdGVtaXplPgorCis8c2VjdDE+UGFyYW3odHJlcyBkZSBwculm6XJlbmNlPGxhYmVsIGlkPSJwcmVmZXJlbmNlcyI+PHA+CitRdWFuZCBCUkxUVFkgZOltYXJyZSwgaWwgY2hhcmdlIHVuIGZpY2hpZXIgcXVpIGNvbnRpZW50IHZvcyBwYXJhbeh0cmVzIGRlCitwculm6XJlbmNlLiBJbCBuJ2VzdCBwYXMgaW5kaXNwZW5zYWJsZSBxdWUgbGUgZmljaGllciBleGlzdGUsIGV0IGlsIGVzdCBjcunpIGxhCitwcmVtaehyZSBmb2lzIHF1ZSBsZXMgcGFyYW3odHJlcyBzb250IHNhdXZlZ2FyZOlzIGF2ZWMgbGEgY29tbWFuZGUKKzxyZWYgaWQ9ImNvbW1hbmQtUFJFRlNBVkUiIG5hbWU9IlBSRUZTQVZFIj4uCitMZXMgcGFyYW3odHJlcyBzYXV2ZWdhcmTpcyBsZSBwbHVzIHLpY2VtbWVudCBwZXV2ZW50IOp0cmUgcmVzdGF1culzIG4naW1wb3J0ZQorcXVhbmQgcGFyIGxhIGNvbW1hbmRlIDxyZWYgaWQ9ImNvbW1hbmQtUFJFRkxPQUQiIG5hbWU9IlBSRUZMT0FEIj4uCisKK0xlIG5vbSBkZSBjZSBmaWNoaWVyIGVzdCA8dHQ+L2V0Yy9icmx0dHktPC90dD48ZW0+cGlsb3RlPC9lbT48dHQ+LnByZWZzPC90dD4uCitv+SA8ZW0+cGlsb3RlPC9lbT4gY29ycmVzcG9uZCBhdXggZGV1eCBsZXR0cmVzIGR1Cis8cmVmIGlkPSJkcml2ZXJzIiBuYW1lPSJjb2RlIGQnaWRlbnRpZmljYXRpb24gZGUgcGlsb3RlIj4uCisKKzxzZWN0Mj5MZSBtZW51IHBy6WbpcmVuY2VzPGxhYmVsIGlkPSJwcmVmZXJlbmNlcy1tZW51Ij48cD4KK0xlcyBwYXJhbeh0cmVzIGRlIHBy6WbpcmVuY2Ugc29udCBzYXV2ZWdhcmTpcyBzb3VzIGZvcm1lIGRlIGRvbm7pZXMgYmluYWlyZXMKK3F1ZSB2b3VzIG5lIHBvdXZleiBkb25jIHBhcyDpZGl0ZXIg4CBsYSBtYWluLgorQ2VwZW5kYW50LCBCUkxUVFkgYSB1biBtZW51IHNpbXBsZSDgIHBhcnRpciBkdXF1ZWwgdm91cyBwb3V2ZXogZmFjaWxlbWVudCBsZXMKK2NoYW5nZXIuCisKK2xlIG1lbnUgZXN0IGFjdGl26SBwYXIgbGEgY29tbWFuZGUgPHJlZiBpZD0iY29tbWFuZC1QUkVGTUVOVSIgbmFtZT0iUFJFRk1FTlUiPi4KK0wnYWZmaWNoZXVyIGJyYWlsbGUgYWZmaWNoZSBicmnodmVtZW50ICh2b2lyIGwnb3B0aW9uCis8cmVmIGlkPSJvcHRpb25zLW1lc3NhZ2UtdGltZW91dCIgbmFtZT0iLU0iPiBlbiBsaWduZSBkZSBjb21tYW5kZSkgbGUgdGl0cmUgZHUKK21lbnUsIHB1aXMgcHLpc2VudGUgbCdpdGVtIGR1IHBhcmFt6HRyZSBhY3R1ZWwuCisKKzxTZWN0Mz5OYXZpZ2F0aW9uIGRhbnMgbGUgbWVudTxwPgorVm9pciA8cmVmIGlkPSJtZW51LW5hdmlnYXRpb24iIG5hbWU9IkNvbW1hbmRlcyBkZSBuYXZpZ2F0aW9uIGRhbnMgbGUgbWVudSI+IHBvdXIgbGEKK2xpc3RlIGRlcyBjb21tYW5kZXMgcXVpIHZvdXMgcGVybWV0dGVudCBkZSBz6WxlY3Rpb25uZXIgbCfpbOltZW50LCBldCBkZSBjaGFuZ2VyCitsYSB2YWxldXIgZGFucyBsZSBtZW51LgorUGFyIHNvdWNpIGRlIGNvbXBhdGliaWxpdOkgYXZlYyBsZXMgdmlldXggcGlsb3RlcywgbGVzIGNvbW1hbmRlcworZGUgZOlwbGFjZW1lbnQgZGFucyBsYSBmZW7qdHJlLCBxdWkgb250IGNoYW5n6SBkZSBzZW5zIGRhbnMgY2UgY29udGV4dGUsCitwZXV2ZW50IOp0cmUgYXVzc2kgdXRpbGlz6WVzLgorPGRlc2NyaXA+CisgIDx0YWc+PHR0PkTpYnV0PC90dD4vPHR0PkZpbjwvdHQ+LCA8dHQ+SGF1dC1HYXVjaGU8L3R0Pi88dHQ+QmFzLUdhdWNoZTwvdHQ+LCA8dHQ+UEFHRV9QUkVDRURFTlRFPC90dD4vPHR0PlBBR0VfU1VJVkFOVEU8L3R0PjwvdGFnPgorICAgIFZhIGF1IHByZW1pZXIvZGVybmllciDpbOltZW50IGR1IG1lbnUgKGNvbW1lIAorICAgIDxyZWYgaWQ9ImNvbW1hbmQtTUVOVV9GSVJTVF9JVEVNLU1FTlVfTEFTVF9JVEVNIiBuYW1lPSJNRU5VX0ZJUlNUX0lURU0vTUVOVV9MQVNUX0lURU0iPikuCisgIDx0YWc+PHR0PkZIPC90dD4vPHR0PkZCPC90dD4sIDx0dD5MSUdOUFJFQ0VERU5URTwvdHQ+Lzx0dD5MTlNVSVY8L3R0PiwgPHR0PkNVUlNFVVJfSEFVVDwvdHQ+Lzx0dD5DVVJTRVVSX0JBUzwvdHQ+PC90YWc+CisgICAgVmEg4CBsJ+ls6W1lbnQgcHLpY+lkZW50L3N1aXZhbnQgZHUgbWVudSAoY29tbWUKKyAgICA8cmVmIGlkPSJjb21tYW5kLU1FTlVfUFJFVl9JVEVNLU1FTlVfTkVYVF9JVEVNIiBuYW1lPSJNRU5VX1BSRVZfSVRFTS9NRU5VX05FWFRfSVRFTSI+KS4KKyAgPHRhZz48dHQ+RkVORVRSRV9QUkVDRURFTlRFPC90dD4vPHR0PkZFTlNVSVY8L3R0PiwgPHR0PkNBUkdBVUNIPC90dD4vPHR0PkNBRFJPSVRFPC90dD4sIDx0dD5DVVJTRVVSX0dBVUNIRTwvdHQ+Lzx0dD5DVVJTRVVSX0RST0lURTwvdHQ+LCA8dHQ+REVCVVQ8L3R0Pi88dHQ+SE9NRTwvdHQ+PC90YWc+CisgICAgROlyb3VsZSBvdSAiZW5yb3VsZSIgbGEgdmFsZXVyIGRlIGwn6WzpbWVudCBhY3R1ZWwgZGFucyBsZSBtZW51IChjb21tZQorICAgIDxyZWYgaWQ9ImNvbW1hbmQtTUVOVV9QUkVWX1NFVFRJTkctTUVOVV9ORVhUX1NFVFRJTkciIG5hbWU9Ik1FTlVfUFJFVl9TRVRUSU5HL01FTlVfTkVYVF9TRVRUSU5HIj4pLgorPC9kZXNjcmlwPgorCitSZW1hcnF1ZXM6Cis8aXRlbWl6ZT4KKyAgPGl0ZW0+CisgICAgVm91cyBwb3V2ZXogYXVzc2kgdXRpbGlzZXIgbGVzIHJvdXRpbmUtY3Vyc2V1ciBwb3VyIHPpbGVjdGlvbm5lciB1bmUgdmFsZXVyCisgICAgcG91ciBsJ+ls6W1lbnQgYWN0dWVsLiBTaSB1biDpbOltZW50IGEgZGVzIHZhbGV1cnMgbnVt6XJpcXVlcywgdG91dGUgbGEgbGlnbmUKKyAgICBkZSByb3V0aW5lcy1jdXJzZXVyIGFnaXQgY29tbWUgdW5lIGJhcnJlIGRlIGTpZmlsZW1lbnQgcXVpIGNvdXZyZSB0b3V0ZSBsYQorICAgIGdhbW1lIGRlcyB2YWxldXJzIHZhbGlkZXMuIFNpIHVuIOls6W1lbnQgYSB1bmUgdmFsZXVyIG5vbWluYWxlLAorICAgIGxlcyByb3V0aW5lcy1jdXJzZXVyIGNvcnJlc3BvbmRlbnQgbm9ybWFsZW1lbnQgYXV4IHZhbGV1cnMuCisgIDxpdGVtPgorICAgIFV0aWxpc2V6IGxhIGNvbW1hbmRlIDx0dD5QUkVGTE9BRDwvdHQ+IHBvdXIgYW5udWxlciB0b3VzIGxlcyBjaGFuZ2VtZW50cworICAgIHF1aSBvbnQg6XTpIGZhaXRzIGRlcHVpcyBxdWUgdm91cyDqdGVzIGRhbnMgbGUgbWVudS4KKyAgPGl0ZW0+CisgICAgVXRpbGlzZXogbGEgY29tbWFuZGUgPHR0PlBSRUZNRU5VPC90dD4gKGVuY29yZSkgcG91ciBkb25uZXIgZWZmZXQKKyAgICBhdXggbm91dmVsbGVzIHZhbGV1cnMsIHNvcnRpciBkdSBtZW51IGV0IGZhaXJlIGRlcworICAgIG9w6XJhdGlvbnMgbm9ybWFsZXMuIERlIHBsdXMsIHNpIHZvdXMgYXZleiBz6WxlY3Rpb25u6SBsJ29wdGlvbiA8dHQ+RW5yZWdpc3RyZXIgZW4gcXVpdHRhbnQ8L3R0PiwgbGVzCisgICAgbm91dmVsbGVzIHZhbGV1cnMgc29udCBzYXV2ZWdhcmTpZXMgZGFucyBsZSBmaWNoaWVyIGRlcyBwculm6XJlbmNlcy4KKyAgICBUb3V0ZSBjb21tYW5kZSBub24gcmVjb25udWUgcGFyIGxlIHN5c3TobWUgZHUgbWVudSBmYWl0IGxhIG3qbWUgY2hvc2UuCis8L2l0ZW1pemU+CisKKzxzZWN0Mz5MZXMg6WzpbWVudHMgZHUgbWVudTxwPgorPGRlc2NyaXA+CisgIDx0YWc+RW5yZWdpc3RyZXIgZW4gcXVpdHRhbnQ8bGFiZWwgaWQ9InByZWZlcmVuY2Utc2F2ZS1vbi1leGl0Ij48L3RhZz4KKyAgICAgIExvcnMgZGUgbGEgc29ydGllIGR1IG1lbnUgZGUgcHLpZulyZW5jZXM6CisgICAgPGRlc2NyaXA+CisgICAgICA8dGFnPk5vbjwvdGFnPgorICAgICAgICBOZSBzYXV2ZWdhcmRlIHBhcyBhdXRvbWF0aXF1ZW1lbnQgbGVzIHBhcmFt6HRyZXMgZGUgcHLpZulyZW5jZS4KKyAgICAgIDx0YWc+T3VpPC90YWc+CisgICAgICAgIFNhdXZlZ2FyZGUgYXV0b21hdGlxdWVtZW50IGxlcyBwYXJhbeh0cmVzIGRlIHBy6WbpcmVuY2UuCisgICAgPC9kZXNjcmlwPgorICAgIExlIHBhcmFt6HRyZSBwYXIgZOlmYXV0IGVzdCA8dHQ+Tm9uPC90dD4uCisgIDx0YWc+QXBwYXJlbmNlIGR1IHRleHRlPGxhYmVsIGlkPSJwcmVmZXJlbmNlLXRleHQtc3R5bGUiPjwvdGFnPgorICAgIExvcnMgZGUgbCdhZmZpY2hhZ2UgZHUgY29udGVudSBkZSBsJ+ljcmFuICh2b2lyIGxhIGNvbW1hbmRlCisgICAgPHJlZiBpZD0iY29tbWFuZC1ESVNQTUQiIG5hbWU9IkRJU1BNRCI+KSwgbW9udHJlIGxlcyBjYXJhY3TocmVzOgorICAgIDxkZXNjcmlwPgorICAgICAgPHRhZz44IHBvaW50czwvdGFnPgorICAgICAgICBBdmVjIGxlcyBodWl0IHBvaW50cy4KKyAgICAgIDx0YWc+NiBwb2ludHM8L3RhZz4KKyAgICAgICAgQXZlYyA2IHBvaW50cyBzZXVsZW1lbnQuCisJU2kgdm91cyBhdmV6IHPpbGVjdGlvbm7pIHVuZSB0YWJsZSBkZSBicmFpbGxlIGFiculn6SAodm9pciBsJ29wdGlvbgorCTxyZWYgaWQ9Im9wdGlvbnMtY29udHJhY3Rpb24tdGFibGUiIG5hbWU9Ii1jIj4gZW4gbGlnbmUgZGUgY29tbWFuZGUgZXQKKwlsYSBsaWduZSA8cmVmIGlkPSJjb25maWd1cmUtY29udHJhY3Rpb24tdGFibGUiIG5hbWU9ImNvbnRyYWN0aW9uLXRhYmxlIj4KKwlkdSBmaWNoaWVyIGRlIGNvbmZpZ3VyYXRpb24pLCBlbGxlIGVzdCB1dGlsaXPpZS4KKyAgICA8L2Rlc2NyaXA+CisgICAgVm91cyBwb3V2ZXogYXVzc2kgY2hhbmdlciBjZSBwYXJhbeh0cmUgcGFyIGxhIGNvbW1hbmRlCisgICAgPHJlZiBpZD0iY29tbWFuZC1TSVhET1RTIiBuYW1lPSJTSVhET1RTIj4uCisgIDx0YWc+UGFzc2VyIGxlcyBsaWduZXMgaWRlbnRpcXVlczxsYWJlbCBpZD0icHJlZmVyZW5jZS1za2lwLWlkZW50aWNhbC1saW5lcyI+PC90YWc+CisgICAgUXVhbmQgdm91cyB2b3VzIGTpcGxhY2V6IGRlIGxpZ25lIGVuIGxpZ25lIGVuIGhhdXQgb3UgZW4gYmFzIGF2ZWMgbGVzCisgICAgY29tbWFuZGVzIDxyZWYgaWQ9ImNvbW1hbmQtTE5VUC1MTkROIiBuYW1lPSJMTlVQL0xORE4iPiwKKyAgICBldCBsb3JzIGRlIGxhIGZvbmN0aW9uIGRlIGTpZmlsZW1lbnQgZGUgbGlnbmVzIGRlcyBjb21tYW5kZXMgCisgICAgPHJlZiBpZD0iY29tbWFuZC1GV0lOTFQtRldJTlJUIiBuYW1lPSJGV0lOTFQvRldJTlJUIj4gZXQKKyAgICA8cmVmIGlkPSJjb21tYW5kLUZXSU5MVFNLSVAtRldJTlJUU0tJUCIgbmFtZT0iRldJTkxUU0tJUC9GV0lOUlRTS0lQIj46CisgICAgPGRlc2NyaXA+CisgICAgICA8dGFnPk5vbjwvdGFnPgorICAgICAgICBOZSBwYXNzZSBwYXMgbGVzIGxpZ25lcyBxdWkgb250IGxlIG3qbWUgY29udGVudSBxdWUgbGEgbGlnbmUgYWN0dWVsbGUuCisgICAgICA8dGFnPk91aTwvdGFnPgorICAgICAgICBQYXNzZSBsZXMgbGlnbmVzIGTpauAgdnVlcyBxdWkgb250IGxlIG3qbWUgY29udGVudSBxdWUgbGEgbGlnbmUgYWN0dWVsbGUuCisgICAgPC9kZXNjcmlwPgorICAgIFZvdXMgcG91dmV6IGF1c3NpIGNoYW5nZXIgY2UgcGFyYW3odHJlIGF2ZWMgbGEgY29tbWFuZGUKKyAgICA8cmVmIGlkPSJjb21tYW5kLVNLUElETE5TIiBuYW1lPSJTS1BJRExOUyI+LgorICA8dGFnPlBhc3NlciBsZXMgbGlnbmVzIHZpZXJnZXM8bGFiZWwgaWQ9InByZWZlcmVuY2Utc2tpcC1ibGFuay13aW5kb3dzIj48L3RhZz4KKyAgICBMb3JzIGQndW4gZOlwbGFjZW1lbnQg4CBnYXVjaGUgb3Ug4CBkcm9pdGUgYXZlYyBsZXMgY29tbWFuZGVzCisgICAgPHJlZiBpZD0iY29tbWFuZC1GV0lOTFQtRldJTlJUIiBuYW1lPSJGV0lOTFQvRldJTlJUIj46CisgICAgPGRlc2NyaXA+CisgICAgICA8dGFnPk5vbjwvdGFnPgorICAgICAgICBOZSBwYXNzZSBwYXMgbGVzIGZlbup0cmVzIHZpZGVzIGTpauAgbHVlcy4KKyAgICAgIDx0YWc+T3VpPC90YWc+CisgICAgICAgIFBhc3NlIGxlcyBmZW7qdHJlcyB2aWRlcy4KKyAgICA8L2Rlc2NyaXA+CisgICAgVm91cyBwb3V2ZXogYXVzc2kgY2hhbmdlciBjZSBwYXJhbeh0cmUgYXZlYyBsYSBjb21tYW5kZQorICAgIDxyZWYgaWQ9ImNvbW1hbmQtU0tQQkxOS1dJTlMiIG5hbWU9IlNLUEJMTktXSU5TIj4uCisgIDx0YWc+UXVlbGxlcyBmZW7qdHJlcyB2aWVyZ2VzPGxhYmVsIGlkPSJwcmVmZXJlbmNlLXdoaWNoLWJsYW5rLXdpbmRvd3MiPjwvdGFnPgorICAgIFNpIGxlcyBmZW7qdHJlcyB2aWRlcyBkb2l2ZW50IOp0cmUgc2F1dOllczoKKyAgICA8ZGVzY3JpcD4KKyAgICAgIDx0YWc+VG91dGVzPC90YWc+CisgICAgICAgIExlcyBwYXNzZSB0b3V0ZXMuCisgICAgICA8dGFnPkZpbiBkZSBsaWduZTwvdGFnPgorICAgICAgICBOZSBwYXNzZSBxdWUgY2VsbGVzIHF1aSBzb250IOAgbGEgZmluIChzdXIgbGUgY/R06SBkcm9pdCkgZGUgbCfpY3Jhbi4KKyAgICAgIDx0YWc+UmVzdGUgZGUgbGEgbGlnbmU8L3RhZz4KKyAgICAgICAgTmUgcGFzc2UgcXVlIGNlbGxlcyBxdWkgc29udCDgIGxhIGZpbiAoc3VyIGxlIGP0dOkgZHJvaXQpIGQndW5lIGxpZ25lIGxvcnMgZCd1bmUgbGVjdHVyZQorCXZlcnMgbCdhdmFudCwgZXQgYXUgZOlidXQgKHN1ciBsZSBj9HTpIGdhdWNoZSkgZCd1bmUgbGlnbmUgbG9ycyBkJ3VuZQorCWxlY3R1cmUg4CByZWN1bG9ucy4KKyAgICA8L2Rlc2NyaXA+CisgIDx0YWc+RmFpcmUgZOlmaWxlciBsYSBmZW7qdHJlPGxhYmVsIGlkPSJwcmVmZXJlbmNlLXNsaWRpbmctd2luZG93Ij48L3RhZz4KKyAgICBTaSBsZSBjdXJzZXVyIGVzdCBwb3Vyc3VpdmkgKHZvaXIgbGEgY29tbWFuZGUKKyAgICA8cmVmIGlkPSJjb21tYW5kLUNTUlRSSyIgbmFtZT0iQ1NSVFJLIj4pCisgICAgZXQgcXVlIGxlIGN1cnNldXIgZXN0IHRyb3AgZW5mZXJt6SAob3UgdHJvcCDgIGwnZXh06XJpZXVyKSDgIGxhIGZpbiBkJ3VuZSBwbGFnZSBicmFpbGxlOgorICAgIDxkZXNjcmlwPgorICAgICAgPHRhZz5Ob248L3RhZz4KKyAgICAgICAgUmVwb3NpdGlvbm5lIGxhIHBsYWdlIGhvcml6b250YWxlbWVudCBkZSBzb3J0ZSBxdWUgc29uIGJvcmQgZ2F1Y2hlCisJc29pdCB1biBtdWx0aXBsZSBkZSBzYSBsYXJnZXVyIOAgcGFydGlyIGR1IGJvcmQgZ2F1Y2hlIGRlIGwn6WNyYW4uCisgICAgICA8dGFnPk91aTwvdGFnPgorICAgICAgICBSZXBvc2l0aW9ubmUgbGEgcGxhZ2UgaG9yaXpvbnRhbGVtZW50IGRlIGZh529uIOAgY2UgcXVlIGxlIGN1cnNldXIsCisJdG91dCBlbiByZXN0YW50IHN1ciBjZSBj9HTpIGRlIGxhIHBsYWdlLCBzb2l0IHBsdXMgcHJvY2hlIGR1IGNlbnRyZS4JCisgICAgPC9kZXNjcmlwPgorICAgIFZvdXMgcG91dmV6IGF1c3NpIGNoYW5nZXIgY2UgcGFyYW3odHJlIGF2ZWMgbGEgY29tbWFuZGUKKyAgICA8cmVmIGlkPSJjb21tYW5kLVNMSURFV0lOIiBuYW1lPSJTTElERVdJTiI+LgorICA8dGFnPkVhZ2VyIFNsaWRpbmcgV2luZG93PGxhYmVsIGlkPSJwcmVmZXJlbmNlLWVhZ2VyLXNsaWRpbmctd2luZG93Ij48L3RhZz4KKyAgICBTaSBsYSBwbGFnZSBicmFpbGxlIGRvaXQgZ2xpc3NlcjoKKyAgICA8ZGVzY3JpcD4KKyAgICAgIDx0YWc+Tm9uPC90YWc+CisgICAgICAgIExhIHJlcG9zaXRpb25uZSBjaGFxdWUgZm9pcyBxdWUgbGUgY3Vyc2V1ciB2YSBhdS1kZWzgIGRlIGxhIGZpbi4KKyAgICAgIDx0YWc+T3VpPC90YWc+CisgICAgICAgIExhIHJlcG9zaXRpb25uZSBjaGFxdWUgZm9pcyBxdWUgbGUgY3Vyc2V1ciB2YSB0cm9wIOAgbCdpbnTpcmlldXIgcHLocworCWRlIGxhIGZpbi4KKyAgICA8L2Rlc2NyaXA+CisgICAgTGUgcGFyYW3odHJlIGluaXRpYWwgZXN0IOAgPHR0Pm5vbjwvdHQ+LgorICA8dGFnPkNoZXZhdWNoZW1lbnQgZGUgZmVu6nRyZTxsYWJlbCBpZD0icHJlZmVyZW5jZS13aW5kb3ctb3ZlcmxhcCI+PC90YWc+CisgICAgTG9ycyBkJ3VuIGTpcGxhY2VtZW50IOAgZ2F1Y2hlIG91IOAgZHJvaXRlIGF2ZWMgbGVzIGNvbW1hbmRlcworICAgIDxyZWYgaWQ9ImNvbW1hbmQtRldJTkxULUZXSU5SVCIgbmFtZT0iRldJTkxUL0ZXSU5SVCI+LCBjZSBwYXJhbeh0cmUKKyAgICBzcOljaWZpZSBkZSBjb21iaWVuIGRlIGNhcmFjdOhyZXMgYWRqYWNlbnRzIGhvcml6b250YWxlbWVudCBkb2l0CisgICAgc2UgY291dnJpciBsYSBwbGFnZSBicmFpbGxlLgorICAgIExlIHBhcmFt6HRyZSBpbml0aWFsIGVzdCA8dHQ+MDwvdHQ+LgorICA8dGFnPlLpcOl0aXRpb24gYXV0b21hdGlxdWU8bGFiZWwgaWQ9InByZWZlcmVuY2UtYXV0b3JlcGVhdCI+PC90YWc+CisgICAgVGFuZGlzIHF1ZSBsYSB0b3VjaGUgKGxhIGNvbWJpbmFpc29uKSBkJ3VuZSBjb21tYW5kZSByZXN0ZSBhcHB1eellOgorICAgIDxkZXNjcmlwPgorICAgICAgPHRhZz5Ob248L3RhZz4KKyAgICAgICAgTmUgculw6HRlIHBhcyBhdXRvbWF0aXF1ZW1lbnQgbGEgY29tbWFuZGUuCisgICAgICA8dGFnPk91aTwvdGFnPgorICAgICAgICBS6XDodGUgYXV0b21hdGlxdWVtZW50IGxhIGNvbW1hbmRlIHNlbG9uIHVuIGludGVydmFsbGUgculndWxpZXIgYXBy6HMKKwl1biBk6WxhaSBpbml0aWFsLgorICAgIDwvZGVzY3JpcD4KKyAgICBMZXMgY29tbWFuZGVzIHN1aXZhbnRlcyBwZXV2ZW50IOp0cmUgculw6XTpZXMgYXV0b21hdGlxdWVtZW50OgorICAgIDxpdGVtaXplPgorICAgICAgPGl0ZW0+CisgICAgICAgIExlcyBjb21tYW5kZXMgPHJlZiBpZD0iY29tbWFuZC1MTlVQLUxORE4iIG5hbWU9IkxOVVAvTE5ETiI+LgorICAgICAgPGl0ZW0+CisgICAgICAgIExlcyBjb21tYW5kZXMgPHJlZiBpZD0iY29tbWFuZC1QUkRJRkxOLU5YRElGTE4iIG5hbWU9IlBSRElGTE4vTlhESUZMTiI+LgorICAgICAgPGl0ZW0+CisgICAgICAgIExlcyBjb21tYW5kZXMgPHJlZiBpZD0iY29tbWFuZC1DSFJMVC1DSFJSVCIgbmFtZT0iQ0hSTFQvQ0hSUlQiPi4KKyAgICAgIDxpdGVtPgorICAgICAgICBPcOlyYXRpb25zIGRlIGTpZmlsZW1lbnQgYXV0b21hdGlxdWUgZGUgbGEgcGxhZ2UgYnJhaWxsZSAodm9pcgorICAgICAgICBsYSBwculm6XJlbmNlICJS6XDpdGl0aW9uIGF1dG9tYXRpcXVlIGR1IGTpZmlsZW1lbnQiKS4KKyAgICAgIDxpdGVtPgorICAgICAgICBMZXMgb3DpcmF0aW9ucyBQYWdlIFBy6WPpZGVudGUgUGFnZSBzdWl2YW50ZS4KKyAgICAgIDxpdGVtPgorICAgICAgICBMZXMgb3DpcmF0aW9ucyBjdXJzZXVyIHN1ciBsaWduZSBwculj6WRlbnRlIGV0IGxpZ25lIHN1aXZhbnRlLgorICAgICAgPGl0ZW0+CisgICAgICAgIExlcyBvcOlyYXRpb25zIGN1cnNldXIg4CBnYXVjaGUgZXQgY3Vyc2V1ciDgIGRyb2l0ZS4KKyAgICAgIDxpdGVtPgorICAgICAgICBMZXMgb3DpcmF0aW9ucyBFZmZhY2VyIGV0IFN1cHByaW1lci4KKyAgICAgIDxpdGVtPgorICAgICAgICBMJ2VudHLpZSBkJ3VuIGNhcmFjdOhyZS4KKyAgICA8L2l0ZW1pemU+CisgICAgU2V1bHMgY2VydGFpbnMgcGlsb3RlcyBzdXBwb3J0ZW50IGNldHRlIGZvbmN0aW9ubmFsaXTpLCBsYSBwcmVtaehyZQorICAgIGxpbWl0ZSDpdGFudCBxdWUgYmVhdWNvdXAgZCdhZmZpY2hldXJzIGJyYWlsbGUgbmUgc2lnbmFsZW50IHBhcworICAgIGxlcyBhcHB1aXMgc3VyIHVuZSB0b3VjaGUgZXQgbGVzIGZvbmN0aW9ucyBkJ3VuZSB0b3VjaGUgY29tbWUgZGVzCisgICAg6XbpbmVtZW50cyBkaXN0aW5jdGVtZW50IHPpcGFy6XMuCisgICAgVm91cyBwb3V2ZXogYXVzc2kgY2hhbmdlciBjZSBwYXJhbeh0cmUgYXZlYyBsYSBjb21tYW5kZQorICAgIDxyZWYgaWQ9ImNvbW1hbmQtQVVUT1JFUEVBVCIgbmFtZT0iQVVUT1JFUEVBVCI+LgorICAgIExlIHBhcmFt6HRyZSBpbml0aWFsIGVzdCA8dHQ+b3VpPC90dD4uCisgIDx0YWc+Uulw6XRpdGlvbiBhdXRvbWF0aXF1ZSBkdSBk6WZpbGVtZW50PGxhYmVsIGlkPSJwcmVmZXJlbmNlLWF1dG9yZXBlYXQtZGVsYXkiPjwvdGFnPgorICAgIFF1YW5kIGxhIHBy6WbpcmVuY2UgIlLpcOl0aXRpb24gYXV0b21hdGlxdWUiIGVzdCBhY3RpdullOgorICAgIAorICAgIDxkZXNjcmlwPgorICAgICAgPHRhZz5Ob248L3RhZz4KKyAgICAgICAgTmUgculw6HRlIHBhcyBhdXRvbWF0aXF1ZW1lbnQgbGVzIG9w6XJhdGlvbnMgZGUgZOlmaWxlbWVudCAgZGUgbGEKKyAgICAgICAgcGxhZ2UgYnJhaWxsZS4KKyAgICAgIDx0YWc+T3VpPC90YWc+CisgICAgICAgIFLpcOh0ZSBhdXRvbWF0aXF1ZW1lbnQgbGVzIG9w6XJhdGlvbnMgZGUgZOlmaWxlbWVudCBkZSBsYSBwbGFnZSAKKyAgICAgICAgYnJhaWxsZS4KKyAgICA8L2Rlc2NyaXA+CisgICAgCisgICAgQ2UgcGFyYW3odHJlIG1vZGlmaWUgbGUgY29tcG9ydGVtZW50IGRlcyBjb21tYW5kZXMgIkZXSU5MVC9GV0lOUlQiLiBMZQorICAgIHBhcmFt6HRyZSBpbml0aWFsIGVzdCA8dHQ+bm9uPC90dD4uCisKKyAgPHRhZz5E6WxhaSBkZSBsYSBy6XDpdGl0aW9uIGF1dG9tYXRpcXVlPGxhYmVsIGlkPSJwcmVmZXJlbmNlLWF1dG9yZXBlYXQtZGVsYXkiPjwvdGFnPgorICAgIExvcnNxdSd1biBjYXJhY3TocmUgZG9pdCDqdHJlIHLpcOl06SBhdXRvbWF0aXF1ZW1lbnQsIGNlIHBhcmFt6HRyZSBzcOljaWZpZSBsYSB2YWxldXIKKyAgICBkZSBsZSBk6WxhaSAodm9pciBsYSByZW1hcnF1ZSBzdXIgPHJlZiBpZD0idGltZS1zZXR0aW5ncyIgbmFtZT0icGFyYW3odHJlcyBkZSB0ZW1wcyI+IGNpLWRlc3NvdXMpCisgICAgcXVpIGRvaXQgcyfpY291bGVyIGF2YW50IGRlIGNvbW1lbmNlciBsYSBy6XDpdGl0aW9uIGF1dG9tYXRpcXVlLgorICAgIExlIHBhcmFt6HRyZSBpbml0aWFsIGVzdCA8dHQ+NTA8L3R0Pi4KKyAgPHRhZz5JbnRlcnZhbGxlIGRlIGxhIHLpcOl0aXRpb24gYXV0b21hdGlxdWU8bGFiZWwgaWQ9InByZWZlcmVuY2UtYXV0b3JlcGVhdC1pbnRlcnZhbCI+PC90YWc+CisgICAgTG9yc3F1J3VuIGNhcmFjdOhyZSBkb2l0IOp0cmUgculw6XTpIGF1dG9tYXRpcXVlbWVudCwgY2UgcGFyYW3odHJlIHNw6WNpZmllIGxhIHZhbGV1cgorICAgIGRlIHRlbXBzICh2b2lyIGxhIHJlbWFycXVlIOAgcHJvcG9zIGRlIDxyZWYgaWQ9InRpbWUtc2V0dGluZ3MiIG5hbWU9InBhcmFt6HRyZXMgZGUgdGVtcHMiPiBjaS1kZXNzb3VzKQorICAgIGVudHJlIGNoYXF1ZSBy6WV46WN1dGlvbi4KKyAgICBMYSB2YWxldXIgaW5pdGlhbGUgZXN0IDx0dD4xMDwvdHQ+LgorICA8dGFnPkFmZmljaGVyIGxlIGN1cnNldXI8bGFiZWwgaWQ9InByZWZlcmVuY2Utc2hvdy1jdXJzb3IiPjwvdGFnPgorICAgIExvcnMgZGUgbCdhZmZpY2hhZ2UgZHUgY29udGVudSBkZSBsJ+ljcmFuICh2b2lyIGxhIGNvbW1hbmRlCisgICAgPHJlZiBpZD0iY29tbWFuZC1ESVNQTUQiIG5hbWU9IkRJU1BNRCI+KToKKyAgICA8ZGVzY3JpcD4KKyAgICAgIDx0YWc+Tm9uPC90YWc+CisgICAgICAgIE4nYWZmaWNoZSBwYXMgbGUgY3Vyc2V1ci4KKyAgICAgIDx0YWc+T3VpPC90YWc+CisgICAgICAgIEFmZmljaGUgbGUgY3Vyc2V1ci4KKyAgICA8L2Rlc2NyaXA+CisgICAgVm91cyBwb3V2ZXogYXVzc2kgY2hhbmdlciBjZSBwYXJhbeh0cmUgYXZlYyBsYSBjb21tYW5kZQorICAgIDxyZWYgaWQ9ImNvbW1hbmQtQ1NSVklTIiBuYW1lPSJDU1JWSVMiPi4KKyAgICBMYSB2YWxldXIgaW5pdGlhbGUgZXN0IDx0dD5PdWk8L3R0Pi4KKyAgPHRhZz5BcHBhcmVuY2UgZHUgY3Vyc2V1cjxsYWJlbCBpZD0icHJlZmVyZW5jZS1jdXJzb3Itc3R5bGUiPjwvdGFnPgorICAgIExvcnNxdWUgbGUgY3Vyc2V1ciBlc3QgYWZmaWNo6SwgaWwgZmF1dCBsZSByZXBy6XNlbnRlcjoKKyAgICA8ZGVzY3JpcD4KKyAgICAgIDx0YWc+U291bGlnbuk8L3RhZz4KKyAgICAgICAgKHNvdWxpZ27pKSBBdmVjIGxlcyBwb2ludHMgNyBldCA4LgorICAgICAgPHRhZz5QYXbpPC90YWc+CisgICAgICAodW4gcGF26SkgQXZlYyBsZXMgaHVpdCBwb2ludHMuCisgICAgPC9kZXNjcmlwPgorICAgIFZvdXMgcG91dmV6IGF1c3NpIGNoYW5nZXIgY2UgcGFyYW3odHJlIGF2ZWMgbGEgY29tbWFuZGUKKyAgICA8cmVmIGlkPSJjb21tYW5kLUNTUlNJWkUiIG5hbWU9IkNTUlNJWkUiPi4KKyAgPHRhZz5DbGlnbm90ZW1lbnQgZHUgY3Vyc2V1cjxsYWJlbCBpZD0icHJlZmVyZW5jZS1ibGlua2luZy1jdXJzb3IiPjwvdGFnPgorICAgIExvcnNxdWUgbGUgY3Vyc2V1ciBkb2l0IOp0cmUgYWZmaWNo6ToKKyAgICA8ZGVzY3JpcD4KKyAgICAgIDx0YWc+Tm9uPC90YWc+CisgICAgICAgIExlIHJlbmQgdmlzaWJsZSB0b3V0IGxlIHRlbXBzLgorICAgICAgPHRhZz5ZT3VpPC90YWc+CisgICAgICAgIExlIHJlbmQgYWx0ZXJuYXRpdmVtZW50IHZpc2libGUgZXQgaW52aXNpYmxlIHNlbG9uIHVuIGludGVydmFsbGUKKwlwculk6WZpbmkuCisgICAgPC9kZXNjcmlwPgorICAgIFZvdXMgcG91dmV6IGF1c3NpIGNoYW5nZXIgY2UgcGFyYW3odHJlIGF2ZWMgbGEgY29tbWFuZGUKKyAgICA8cmVmIGlkPSJjb21tYW5kLUNTUkJMSU5LIiBuYW1lPSJDU1JCTElOSyI+LgorICA8dGFnPkR1cullIGRlIHZpc2liaWxpdOkgZHUgY3Vyc2V1cjxsYWJlbCBpZD0icHJlZmVyZW5jZS1jdXJzb3ItdmlzaWJsZS10aW1lIj48L3RhZz4KKyAgICBRdWFuZCBsZSBjdXJzZXVyIGRvaXQgY2xpZ25vdGVyLCBjZSBwYXJhbeh0cmUgc3DpY2lmaWUgbGEgZHVy6WUgKHZvaXIKKyAgICBsYSByZW1hcnF1ZSDgIHByb3BvcyBkZXMgPHJlZiBpZD0idGltZS1zZXR0aW5ncyIgbmFtZT0icGFyYW3odHJlcyBkZSB0ZW1wcyI+CisgICAgY2ktZGVzc291cykgcGVuZGFudCBsYXF1ZWxsZSBpbCBlc3QgdmlzaWJpbGUgcGVuZGFudCBjaGFxdWUgY3ljbGUuCisgICAgTGEgdmFsZXVyIHBhciBk6WZhdXQgZXN0IDx0dD40MDwvdHQ+LgorICA8dGFnPkR1cullIGQnaW52aXNpYmlsaXTpIGR1IGN1cnNldXI8bGFiZWwgaWQ9InByZWZlcmVuY2UtY3Vyc29yLWludmlzaWJsZS10aW1lIj48L3RhZz4KKyAgICBMb3JzcXVlIGxlIGN1cnNldXIgZG9pdCBjbGlnbm90ZXIsIGNlIHBhcmFt6HRyZSBzcOljaWZpZSBsYSBkdXLpZSAodm9pcgorICAgIGxhIHJlbWFycXVlIOAgcHJvcG9zIGRlcyA8cmVmIGlkPSJ0aW1lLXNldHRpbmdzIiBuYW1lPSJwYXJhbeh0cmVzIGRlIHRlbXBzIj4KKyAgICBjaS1kZXNzb3VzKSBwZW5kYW50IGxhcXVlbGxlIGlsIGVzdCBpbnZpc2liaWxlIHBlbmRhbnQgY2hhcXVlIGN5Y2xlLgorICAgIExhIHZhbGV1ciBpbml0aWFsZSBlc3QgPHR0PjQwPC90dD4uCisgIDx0YWc+QWZmaWNoZXIgbGVzIGF0dHJpYnV0czxsYWJlbCBpZD0icHJlZmVyZW5jZS1zaG93LWF0dHJpYnV0ZXMiPjwvdGFnPgorICAgIExvcnMgZGUgbCdhZmZpY2hhZ2UgZHUgY29udGVudSBkZSBsJ+ljcmFuICh2b2lyIGxhIGNvbW1hbmRlCisgICAgPHJlZiBpZD0iY29tbWFuZC1ESVNQTUQiIG5hbWU9IkRJU1BNRCI+KToKKyAgICA8ZGVzY3JpcD4KKyAgICAgIDx0YWc+Tm9uPC90YWc+CisgICAgICAgIE5lIHNvdWxpZ25lIHBhcyBsZXMgY2FyYWN06HJlcyBlbiBzdXJicmlsbGFuY2UuCisgICAgICA8dGFnPk91aTwvdGFnPgorICAgICAgICBTb3VsaWduZSBsZXMgY2FyYWN06HJlcyBlbiBzdXJicmlsbGFuY2UuCisgICAgPC9kZXNjcmlwPgorICAgIFZvdXMgcG91dmV6IGF1c3NpIGNoYW5nZXIgY2UgcGFyYW3odHJlIGF2ZWMgbGEgY29tbWFuZGUKKyAgICA8cmVmIGlkPSJjb21tYW5kLUFUVFJWSVMiIG5hbWU9IkFUVFJWSVMiPi4KKyAgPHRhZz5DbGlnbm90dGVtZW50IGRlcyBhdHRyaWJ1dHM8bGFiZWwgaWQ9InByZWZlcmVuY2UtYmxpbmtpbmctYXR0cmlidXRlcyI+PC90YWc+CisgICAgTG9yc3F1ZSBsZXMgY2FyYWN06HJlcyBlbiBzdXJicmlsbGFuY2UgZG9pdmVudCBjbGlnbm90ZXI6CisgICAgPGRlc2NyaXA+CisgICAgICA8dGFnPk5vbjwvdGFnPgorICAgICAgICBMYWlzc2UgbCdpbmRpY2F0ZXVyIHZpc2libGUgdG91dCBsZSB0ZW1wcy4KKyAgICAgIDx0YWc+T3VpPC90YWc+CisgICAgICAgIFJlbmQgbCdpbmRpY2F0ZXVyIGFsdGVybmF0aXZlbWVudCB2aXNpYmxlIGV0IGludmlzaWJsZSBzZWxvbiB1bgorCWludGVydmFsbGUgcHLpZOlmaW5pLgorICAgIDwvZGVzY3JpcD4KKyAgICBWb3VzIHBvdXZleiBhdXNzaSBjaGFuZ2VyIGNlIHBhcmFt6HRyZSBhdmVjIGxhIGNvbW1hbmRlCisgICAgPHJlZiBpZD0iY29tbWFuZC1BVFRSQkxJTksiIG5hbWU9IkFUVFJCTElOSyI+LgorICA8dGFnPkR1cullIGRlIHZpc2liaWxpdOkgZGVzIGF0dHJpYnV0czxsYWJlbCBpZD0icHJlZmVyZW5jZS1hdHRyaWJ1dGVzLXZpc2libGUtdGltZSI+PC90YWc+CisgICAgUXVhbmQgbGUgc291bGlnbmVtZW50IGRlcyBjYXJhY3TocmVzIGVuIHN1cmJyaWxsYW5jZSBkb2l0IGNsaWdub3RlciwKKyAgICBjZSBwYXJhbeh0cmUgc3DpY2lmaWUgbGEgZHVy6WUgKHZvaXIgbGEgcmVtYXJxdWUg4CBwcm9wb3MgZGVzCisgICAgPHJlZiBpZD0idGltZS1zZXR0aW5ncyIgbmFtZT0icGFyYW3odHJlcyBkZSB0ZW1wcyI+IGNpLWRlc3NvdXMpIHBlbmRhbnQgCisgICAgbGFxdWVsbGUgaWwgZXN0IHZpc2liaWxlIHBlbmRhbnQgY2hhcXVlIGN5Y2xlLgorICAgIExhIHZhbGV1ciBpbml0aWFsZSBlc3QgPHR0PjIwPC90dD4uCisgIDx0YWc+RHVy6WUgZCdpbnZpc2liaWxpdOkgZGVzIGF0dHJpYnV0czxsYWJlbCBpZD0icHJlZmVyZW5jZS1hdHRyaWJ1dGVzLWludmlzaWJsZS10aW1lIj48L3RhZz4KKyAgICBRdWFuZCBsZSBzb3VsaWduZW1lbnQgZGVzIGNhcmFjdOhyZXMgZW4gc3VyYnJpbGxhbmNlIGRvaXQgY2xpZ25vdGVyLAorICAgIGNlIHBhcmFt6HRyZSBzcOljaWZpZSBsYSBkdXLpZSAodm9pciBsYSByZW1hcnF1ZSDgIHByb3BvcyBkZXMKKyAgICA8cmVmIGlkPSJ0aW1lLXNldHRpbmdzIiBuYW1lPSJwYXJhbeh0cmVzIGRlIHRlbXBzIj4gY2ktZGVzc291cykgcGVuZGFudCAKKyAgICBsYXF1ZWxsZSBpbCBlc3QgaW52aXNpYmlsZSBwZW5kYW50IGNoYXF1ZSBjeWNsZS4KKyAgICBMYSB2YWxldXIgaW5pdGlhbGUgZXN0IDx0dD42MDwvdHQ+LgorICA8dGFnPkNsaWdub3R0ZW1lbnQgZGVzIG1hanVzY3VsZXM8bGFiZWwgaWQ9InByZWZlcmVuY2UtYmxpbmtpbmctY2FwaXRhbHMiPjwvdGFnPgorICAgIExvcnMgZGUgbCdhZmZpY2hhZ2UgZHUgY29udGVudSBkZSBsJ+ljcmFuICh2b2lyIGxhIGNvbW1hbmRlCisgICAgPHJlZiBpZD0iY29tbWFuZC1ESVNQTUQiIG5hbWU9IkRJU1BNRCI+KToKKyAgICA8ZGVzY3JpcD4KKyAgICAgIDx0YWc+Tm9uPC90YWc+CisgICAgICAgIExhaXNzZSBsZXMgbGV0dHJlcyBlbiBtYWp1c2N1bGUgdmlzaWJsZXMgdG91dCBsZSB0ZW1wcy4KKyAgICAgIDx0YWc+T3VpPC90YWc+CisgICAgICAgIFJlbmQgbGVzIGxldHRyZXMgZW4gbWFqdXNjdWxlIGFsdGVybmF0aXZlbWVudCB2aXNpYmxlcyBldCBpbnZpc2libGVzCisJc2Vsb24gdW4gaW50ZXJ2YWxsZSBwculk6WZpbmkuCisgICAgPC9kZXNjcmlwPgorICAgIFZvdXMgcG91dmV6IGF1c3NpIGNoYW5nZXIgY2UgcGFyYW3odHJlIGF2ZWMgbGEgY29tbWFuZGUKKyAgICA8cmVmIGlkPSJjb21tYW5kLUNBUEJMSU5LIiBuYW1lPSJDQVBCTElOSyI+LgorICA8dGFnPkR1cullIGRlIHZpc2liaWxpdOkgZGVzIG1hanVzY3VsZXM8bGFiZWwgaWQ9InByZWZlcmVuY2UtY2FwaXRhbHMtdmlzaWJsZS10aW1lIj48L3RhZz4KKyAgICBMb3JzcXVlIGxlcyBsZXR0cmVzIGVuIG1hanVzY3VsZSBkb2l2ZW50IGNsaWdub3RlciwgY2UgcGFyYW3odHJlCisgICAgc3DpY2lmaWUgbGEgZHVy6WUgKHZvaXIgbGEgcmVtYXJxdWUg4CBwcm9wb3MgZGVzCisgICAgPHJlZiBpZD0idGltZS1zZXR0aW5ncyIgbmFtZT0icGFyYW3odHJlcyBkZSB0ZW1wcyI+IGNpLWRlc3NvdXMpIHBlbmRhbnQgCisgICAgbGFxdWVsbGUgZWxsZXMgc29udCB2aXNpYmlsZSBwZW5kYW50IGNoYXF1ZSBjeWNsZS4KKyAgICBMYSB2YWxldXIgcGFyIGTpZmF1dCBlc3QgPHR0PjYwPC90dD4uCisgIDx0YWc+RHVy6WUgZCdpbnZpc2liaWxpdOkgZGVzIG1hanVzY3VsZXM8bGFiZWwgaWQ9InByZWZlcmVuY2UtY2FwaXRhbHMtaW52aXNpYmxlLXRpbWUiPjwvdGFnPgorICAgIExvcnNxdWUgbGVzIGxldHRyZXMgZW4gbWFqdXNjdWxlIGRvaXZlbnQgY2xpZ25vdGVyLCBjZSBwYXJhbeh0cmUKKyAgICBzcOljaWZpZSBsYSBkdXLpZSAodm9pciBsYSByZW1hcnF1ZSDgIHByb3BvcyBkZXMgCisgICAgPHJlZiBpZD0idGltZS1zZXR0aW5ncyIgbmFtZT0icGFyYW3odHJlcyBkZSB0ZW1wcyI+IGNpLWRlc3NvdXMpIHBlbmRhbnQgCisgICAgbGFxdWVsbGUgZWxsZXMgc29udCBpbnZpc2liaWxlcyBwZW5kYW50IGNoYXF1ZSBjeWNsZS4KKyAgICBMYSB2YWxldXIgcGFyIGTpZmF1dCBlc3QgPHR0PjIwPC90dD4uCisgIDx0YWc+UnVnb3NpdOkgZHUgYnJhaWxsZTxsYWJlbCBpZD0icHJlZmVyZW5jZS1icmFpbGxlLWZpcm1uZXNzIj48L3RhZz4KKyAgICBS6GdsZSBsYSBydWdvc2l06SAob3UgbGEgcmlnaWRpdOkpIGRlcyBwb2ludHMgYnJhaWxsZS4KKyAgICBFbGxlIHBldXQg6nRyZSBy6Wds6WUg4DoKKyAgICA8aXRlbWl6ZT4KKyAgICAgIDxpdGVtPk1heGltdW0KKyAgICAgIDxpdGVtPkZvcnRlCisgICAgICA8aXRlbT5Nb3llbm5lCisgICAgICA8aXRlbT5GYWlibGUKKyAgICAgIDxpdGVtPk1pbmltdW0KKyAgICA8L2l0ZW1pemU+CisgICAgQ2V0dGUgcHLpZulyZW5jZSBuJ2VzdCBkaXNwb25pYmxlIHF1ZSBzaSB2b3VzIHV0aWxpc2V6IHVuIHBpbG90ZSBxdWkKKyAgICBsYSBzdXBwb3J0ZS4gTGEgdmFsZXVyIGluaXRpYWxlIGVzdCA8dHQ+TW95ZW5uZTwvdHQ+LgorICA8dGFnPlNlbnNpYmlsaXTpIGR1IGJyYWlsbGU8bGFiZWwgaWQ9InByZWZlcmVuY2UtYnJhaWxsZS1maXJtbmVzcyI+PC90YWc+CisgICAgUuhnbGUgbGEgc2Vuc2liaWxpdOkgZGVzIHBvaW50cyBicmFpbGxlIGF1IHRldWNoZXIuCisgICAgRWxsZSBwZXV0IOp0cmUgculnbOllIOA6CisgICAgPGl0ZW1pemU+CisgICAgICA8aXRlbT5NYXhpbXVtCisgICAgICA8aXRlbT5IYXV0ZQorICAgICAgPGl0ZW0+TW95ZW5uZQorICAgICAgPGl0ZW0+RmFpYmxlCisgICAgICA8aXRlbT5NaW5pbXVtCisgICAgPC9pdGVtaXplPgorICAgIENldHRlIHBy6WbpcmVuY2Ugbidlc3QgZGlzcG9uaWJsZSBxdWUgc2kgdm91cyB1dGlsaXNleiB1biBwaWxvdGUgcXVpCisgICAgbGEgc3VwcG9ydGUuIExhIHZhbGV1ciBpbml0aWFsZSBlc3QgPHR0Pk1veWVubmU8L3R0Pi4KKworICA8dGFnPkxhIGZlbup0cmUgc3VpdCBsZSBwb2ludGV1cjxsYWJlbCBpZD0icHJlZmVyZW5jZS13aW5kb3ctZm9sbG93cy1wb2ludGVyIj48L3RhZz4KKyAgICBMb3JzIGR1IGTpcGxhY2VtZW50IGR1IHBvaW50ZXVyIChzb3VyaXMpOgorICAgIDxkZXNjcmlwPgorICAgICAgPHRhZz5Ob248L3RhZz4KKyAgICAgICAgTidlbW3obmUgcGFzIGxhIHBsYWdlIGJyYWlsbGUuCisgICAgICA8dGFnPk91aTwvdGFnPgorICAgICAgICBFbW3obmUgbGEgcGxhZ2UgYnJhaWxsZS4KKyAgICA8L2Rlc2NyaXA+CisgICAgQ2V0dGUgcHLpZulyZW5jZSBuJ2VzdCBwculzZW506WUgcXVlIHNpIGwnb3B0aW9uIGRlIGNvbXBpbGF0aW9uCisgICAgPHJlZiBpZD0iZ3BtIiBuYW1lPSItLWVuYWJsZS1ncG0iPiBhIOl06SBzcOljaWZp6WUuCisgIDx0YWc+U3VybGlnbmVtZW50IGRlIGxhIGZlbup0cmU8bGFiZWwgaWQ9InByZWZlcmVuY2UtcG9pbnRlci1mb2xsb3dzLXdpbmRvdyI+PC90YWc+CisgICAgTG9ycyBkdSBk6XBsYWNlbWVudCBkZSBsYSBwbGFnZSBicmFpbGxlOgorICAgIDxkZXNjcmlwPgorICAgICAgPHRhZz5Ob248L3RhZz4KKyAgICAgICAgTmUgbWV0IHBhcyBlbiBzdXJicmlsbGFuY2UgbGEgbm91dmVsbGUgem9uZSBkZSBsJ/ljcmFuLgorICAgICAgPHRhZz5PdWk8L3RhZz4KKyAgICAgICAgQ2V0dGUgb3B0aW9uIGFjdGl2ZSB1biBtYXJxdWV1ciB2aXNpYmxlIG1vbnRyYW50IG/5IHNlIHNpdHVlIGxhCisgICAgICAgIHBsYWdlIGJyYWlsbGUsIGV0LCBwYXIgY29uc+lxdWVudCwgcGVybWV0dGFudCBkZSBzYXZvaXIgY2UgcXVlCisgICAgICAgIGwndXRpbGlzYXRldXIgYnJhaWxsaXN0ZSBlc3QgZW4gdHJhaW4gZGUgbGlyZS4gVG91dCBtb3V2ZW1lbnQgZGUgbGEKKyAgICAgICAgcGxhZ2UgYnJhaWxsZSAobWFudWVsLCBwb3Vyc3VpdGUgZHUgY3Vyc2V1ciwgZXRjLikgYXV0cmUgcXVlIGNldXgKKyAgICAgICAgculwb25kYW50IGF1IG1vdXZlbWVudCBkdSBwb2ludGV1ciAodm9pciBsYSBwculm6XJlbmNlIAorICAgICAgICA8cmVmIGlkPSJwcmVmZXJlbmNlLXdpbmRvdy1mb2xsb3dzLXBvaW50ZXIiIG5hbWU9IkxhIGZlbup0cmUgc3VpdCBsZSBwb2ludGV1ciI+KQorICAgICAgICBhIHBvdXIgY29uc+lxdWVuY2UgcXVlIGxhIHpvbmUgZGUgbCfpY3JhbiBjb3JyZXNwb25kYW50CisgICAgICAgIGF1IG5vdXZlbCBlbmRyb2l0IG/5IHNlIHRyb3V2ZSBsYSAgcGxhZ2UgYnJhaWxsZSBlc3QgbWlzZSBlbgorICAgICAgICBzdXJicmlsbGFuY2UuIFNpIGxhIHBy6WbpcmVuY2UgIkFmZmljaGVyIGxlcyBhdHRyaWJ1dHMiIGVzdCBhY3RpdullLCBzZXVsIGxlCisgICAgICAgIGNhcmFjdOhyZSBjb3JyZXNwb25kYW50IGF1IGNvaW4gZW4gaGF1dCDgIGdhdWNoZSBkZSBsYSBwbGFnZSBicmFpbGxlCisgICAgICAgIGVzdCBtaXMgZW4gc3VyYnJpbGxhbmNlLgorICAgIDwvZGVzY3JpcD4KKyAgICBDZXR0ZSBwculm6XJlbmNlIG4nZXN0IHBy6XNlbnTpZSBxdWUgc2kgbCdvcHRpb24gZGUgY29tcGlsYXRpb24gCisgICAgPHJlZiBpZD0iZ3BtIiBuYW1lPSItLWVuYWJsZS1ncG0iPiBhIOl06SBzcOljaWZp6WUuCisgIDx0YWc+U29ucyBkJ2F2ZXJ0aXNzZW1lbnQ8bGFiZWwgaWQ9InByZWZlcmVuY2UtYWxlcnQtdHVuZXMiPjwvdGFnPgorICAgIENoYXF1ZSBmb2lzIHF1J3VuIOl26W5lbWVudCBzaWduaWZpY2F0aWYgYXZlYyB1biBzb24gYXNzb2Np6SBzZSBwcm9kdWl0LAorICAgICh2b2lyIDxyZWYgaWQ9InR1bmVzIiBuYW1lPSJTb25zIGQnYXZlcnRpc3NlbWVudCI+KToKKyAgICA8ZGVzY3JpcD4KKyAgICAgIDx0YWc+Tm9uPC90YWc+CisgICAgICAgIE5lIGpvdWUgcGFzIGxlIHNvbi4KKyAgICAgIDx0YWc+T3VpPC90YWc+CisgICAgICAgIEpvdWUgbGUgc29uLgorICAgIDwvZGVzY3JpcD4KKyAgICBWb3VzIHBvdXZleiBhdXNzaSBjaGFuZ2VyIGNlIHBhcmFt6HRyZSBhdmVjIGxhIGNvbW1hbmRlCisgICAgPHJlZiBpZD0iY29tbWFuZC1UVU5FUyIgbmFtZT0iVFVORVMiPi4KKyAgICBMYSB2YWxldXIgaW5pdGlhbGUgZXN0IDx0dD5vdWk8L3R0Pi4KKyAgPHRhZz5Q6XJpcGjpcmlxdWUgZGUgc29uPGxhYmVsIGlkPSJwcmVmZXJlbmNlLXR1bmUtZGV2aWNlIj48L3RhZz4KKyAgICBKb3VlIGxlcyBzb24gZCdhdmVydGlzc2VtZW50IHZpYToKKyAgICA8ZGVzY3JpcD4KKyAgICAgIDx0YWc+QmVlcGVyPC90YWc+CisgICAgICAgIExlIGJlZXBlciBpbnRlcm5lIChn6W7pcmF0ZXVyIGRlIHNvbnMgZGUgbGEgY29uc29sZSkuCisJQ2V0dGUgdmFsZXVyIGVzdCBzdXBwb3J06WUgc3VyIExpbnV4LCBPcGVuQlNELCBGcmVlQlNELCBldAorCU5ldEJTRC4gRWxsZSBlc3QgdG91am91cnMgc/tyZSBkYW5zIHNvbiB1dGlsaXNhdGlvbiwgYmllbiBxdSdlbGxlCisJc29pdCBwZXV0Lep0cmUgcXVlbHF1ZSBwZXUgcnVzdGlxdWUuIENlIHDpcmlwaOlyaXF1ZSBuJ2VzdCBwYXMKKwlkaXNwb25pYmxlIHNpIHZvdXMgYXZleiBzcOljaWZp6SBsJ29wdGlvbiBkZSBjb21waWxhdGlvbgorICAgICAgICA8cmVmIGlkPSJidWlsZC1iZWVwZXItc3VwcG9ydCIgbmFtZT0iLS1kaXNhYmxlLWJlZXBlci1zdXBwb3J0Ij4uCisgICAgICA8dGFnPlBDTTwvdGFnPgorICAgICAgICBMJ2ludGVyZmFjZSBhdWRpbyBkZSBsYSBjYXJ0ZSBzb24uCisgICAgICAgIENldHRlIHZhbGV1ciBlc3Qgc3VwcG9ydOllIHNvdXMgTGludXggKHZpYSAgPHR0Pi9kZXYvZHNwPC90dD4pLAorCVNvbGFyaXMgKHZpYSA8dHQ+L2Rldi9hdWRpbzwvdHQ+KSwgT3BlbkJTRCAodmlhIDx0dD4vZGV2L2F1ZGlvMDwvdHQ+KSwKKyAgICAgICAgRnJlZUJTRCAodmlhIDx0dD4vZGV2L2RzcDwvdHQ+KSwgZXQgTmV0QlNECisJKHZpYSA8dHQ+L2Rldi9hdWRpbzA8L3R0PikuCisJTmUgZm9uY3Rpb25uZSBwYXMgcXVhbmQgY2UgcOlyaXBo6XJpcXVlIGRvaXQgZOlq4CDqdHJlIHV0aWxpc+kgcGFyCisJdW5lIGF1dHJlIGFwcGxpY2F0aW9uLgorCUNlIHDpcmlwaOlyaXF1ZSBuJ2VzdCBwYXMgZGlzcG9uaWJsZSBzaSB2b3VzIGF2ZXogc3DpY2lmaekgbCdvcHRpb24gZGUKKwljb21waWxhdGlvbiA8cmVmIGlkPSJidWlsZC1wY20tc3VwcG9ydCIgbmFtZT0iLS1kaXNhYmxlLXBjbS1zdXBwb3J0Ij4uCisgICAgICA8dGFnPk1JREk8L3RhZz4KKyAgICAgICAgTCdpbnRlcmZhY2UgTUlESSBkZSBsYSBjYXJ0ZSBzb24uIENldHRlIHZhbGV1cgorCWVzdCBzdXBwb3J06WUgc291cyBMaW51eCAodmlhIDx0dD4vZGV2L3NlcXVlbmNlcjwvdHQ+KS4KKwlOZSBmb25jdGlvbm5lIHBhcyBxdWFuZCBjZSBw6XJpcGjpcmlxdWUgZXN0IGTpauAgdXRpbGlz6SBwYXIgdW5lCisJYXV0cmUgYXBwbGljYXRpb24uCisgICAgICAgIENlIHDpcmlwaOlyaXF1ZSBuJ2VzdCBwYXMgZGlzcG9uaWJsZSBzaSB2b3VzIGF2ZXogc3DpY2lmaekgbCdvcHRpb24gZGUKKwljb21waWxhdGlvbiA8cmVmIGlkPSJidWlsZC1taWRpLXN1cHBvcnQiIG5hbWU9Ii0tZGlzYWJsZS1taWRpLXN1cHBvcnQiPi4KKyAgICAgIDx0YWc+Rk08L3RhZz4KKyAgICAgICAgTGEgc3ludGjoc2UgRk0gc3VyIHVuZSBjYXJ0ZSBzb24gQWRMaWIsIE9QTDMsIFNvdW5kIEJsYXN0ZXIsIG91CisJ6XF1aXZhbGVudGUuIENldHRlIHZhbGV1ciBlc3Qgc3VwcG9ydOllIHNvdXMgTGludXguIEVsbGUgZm9uY3Rpb25uZQorCW3qbWUgc2kgdW5lIHN5bnRo6HNlIEZNIGVzdCBk6WrgIHV0aWxpc+llIHBhciB1bmUgYXV0cmUgYXBwbGljYXRpb24uCisJTGVzIHLpc3VsdGF0cyBzb250IGltcHLpdmlzaWJsZXMsIGV0IHBldXZlbnQgbmUgcGFzIOp0cmUgYm9ucywgc2kgZWxsZQorCWVzdCB1dGlsaXPpZSBhdmVjIHVuZSBjYXJ0ZSBzb24gbmUgc3VwcG9ydGFudCBwYXMgY2V0dGUgY2FyYWN06XJpc3RpcXVlLgorICAgICAgICBDZSBw6XJpcGjpcmlxdWUgbidlc3QgcGFzIGRpc3BvbmlibGUgc2kgdm91cyBhdmV6IHNw6WNpZmnpIGwnb3B0aW9uIGRlCisJY29tcGlsYXRpb24gPHJlZiBpZD0iYnVpbGQtZm0tc3VwcG9ydCIgbmFtZT0iLS1kaXNhYmxlLWZtLXN1cHBvcnQiPi4KKyAgICA8L2Rlc2NyaXA+CisgICAgTGEgdmFsZXVyIGluaXRpYWxlIGVzdCA8dHQ+QmVlcGVyPC90dD4gc3VyIGxlcyBwbGF0ZWZvcm1lcyBzdXBwb3J0YW50IGNlbGEsCisgICAgZXQgPHR0PlBDTTwvdHQ+IHN1ciBsZXMgYXV0cmVzLgorICA8dGFnPlZvbHVtZSBQQ008bGFiZWwgaWQ9InByZWZlcmVuY2UtcGNtLWluc3RydW1lbnQiPjwvdGFnPgorICAgIFNpIHZvdXMgdXRpbGlzZXogbCdpbnRlcmZhY2UgYXVkaW8gbnVt6XJpcXVlIGRlIHZvdHJlIGNhcnRlIHNvbiBwb3VyCisgICAgam91ZXIgbGVzIHNvbnMgZCdhdmVydGlzc2VtZW50LCBjZSBwYXJhbeh0cmUgc3DpY2lmaWUgbGUgdm9sdW1lIChzb3VzIGxhIGZvcm1lIGQndW4KKyAgICBwb3VyY2VudGFnZSBkdSBtYXhpbXVtKSBhdXF1ZWwgaWxzIHNvbnQgam916XMuCisgIDx0YWc+Vm9sdW1lIE1JREk8bGFiZWwgaWQ9InByZWZlcmVuY2UtcGNtLWluc3RydW1lbnQiPjwvdGFnPgorICAgIFNpIHZvdXMgdXRpbGlzZXogbGEgTXVzaWNhbCBJbnN0cnVtZW50IERpZ2l0YWwgSW50ZXJmYWNlIChNSURJLCBpbnRlcmZhY2UKKyAgICBudW3pcmlxdWUgZCdpbnN0cnVtZW50cyBkZSBtdXNpcXVlKSBkZSB2b3RyZSBjYXJ0ZSBzb24gCisgICAgcG91ciBqb3VlciBsZXMgc29ucyBkJ2F2ZXJ0aXNzZW1lbnQsIGNlIHBhcmFt6HRyZSBzcOljaWZpZSBsZSB2b2x1bWUgKHNvdXMgbGEKKyAgICBmb3JtZSBkJ3VuIHBvdXJjZW50YWdlIGR1IG1heGltdW0pIGF1cXVlbCBpbHMgc29udCBqb3Xpcy4KKyAgICBMZSBwYXJhbeh0cmUgaW5pdGlhbCBlc3QgNzAuCisgIDx0YWc+SW5zdHJ1bWVudCBNSURJPGxhYmVsIGlkPSJwcmVmZXJlbmNlLW1pZGktaW5zdHJ1bWVudCI+PC90YWc+CisgICAgU2kgbCdpbnRlcmZhY2UgTUlESSBkZSBsYSBjYXJ0ZSBzb24gZXN0CisgICAgdXRpbGlz6WUgcG91ciBqb3VlciBsZXMgc29ucyBkJ2F2ZXJ0aXNzZW1lbnQsIGNlIHBhcmFt6HRyZSBzcOljaWZpZSBsJ2luc3RydW1lbnQgCisgICAgcXVpIGRvaXQg6nRyZSB1dGlsaXPpICh2b2lyIDxyZWYgaWQ9Im9wZXJhbmQtbWlkaS1kZXZpY2UiIG5hbWU9IlRhYmxlIGQnaW5zdHJ1bWVudHMgTUlESSI+KS4KKyAgICBMYSB2YWxldXIgaW5pdGlhbGUgZXN0IDx0dD5HcmFuZCBwaWFubyBhY291c3RpcXVlPC90dD4uCisgIDx0YWc+Vm9sdW1lIEZNPGxhYmVsIGlkPSJwcmVmZXJlbmNlLWFsZXJ0LWRvdHMiPjwvdGFnPgorICAgIFNpIHZvdXMgdXRpbGlzZXogbGUgc3ludGjpdGlzZXVyIEZNIGRlIHZvdHJlIGNhcnRlIHNvbiAKKyAgICBwb3VyIGpvdWVyIGxlcyBzb25zIGQnYXZlcnRpc3NlbWVudCwgY2UgcGFyYW3odHJlIHNw6WNpZmllIGxlIHZvbHVtZSAoc291cyBsYQorICAgIGZvcm1lIGQndW4gcG91cmNlbnRhZ2UgZHUgbWF4aW11bSkgYXVxdWVsIGlscyBzb250IGpvdelzLgorICA8dGFnPlBvaW50cyBkJ2F2ZXJ0aXNzZW1lbnQ8bGFiZWwgaWQ9InByZWZlcmVuY2UtYWxlcnQtZG90cyI+PC90YWc+CisgICAgQ2hhcXVlIGZvaXMgcXUndW4g6XbpbmVtZW50IGF2ZWMgdW4gdHlwZSBkZSBwb2ludCBhc3NvY2npIHNlIHByb2R1aXQgKHZvaXIKKyAgICA8cmVmIGlkPSJ0dW5lcyIgbmFtZT0iU29ucyBkJ2F2ZXJ0aXNzZW1lbnQiPik6CisgICAgPGRlc2NyaXA+CisgICAgICA8dGFnPk5vbjwvdGFnPgorICAgICAgICBOJ2FmZmljaGUgcGFzIGxlcyBwb2ludHMuCisgICAgICA8dGFnPk91aTwvdGFnPgorICAgICAgICBBZmZpY2hlIGJyaeh2ZW1lbnQgbGVzIHBvaW50cy4KKyAgICA8L2Rlc2NyaXA+CisgICAgU2kgbGVzIHNvbnMgZCdhdmVydGlzc2VtZW50IGRvaXZlbnQg6nRyZSBqb3XpcyAodm9pciBsYSBjb21tYW5kZQorICAgIDxyZWYgaWQ9ImNvbW1hbmQtVFVORVMiIG5hbWU9IlRVTkVTIj4gZXQgbGEgcHLpZulyZW5jZQorICAgIDxyZWYgaWQ9InByZWZlcmVuY2UtYWxlcnQtdHVuZXMiIG5hbWU9IlNvbnMgZCdhdmVydGlzc2VtZW50Ij4pLCBzaSB1biBzb24gYSDpdOkKKyAgICBhc3NvY2npIOAgbCfpduluZW1lbnQsIGV0IHNpIGxlIHDpcmlwaOlyaXF1ZSBkZSBzb24gc+lsZWN0aW9ubukgcGV1dCDqdHJlCisgICAgb3V2ZXJ0LCBhbG9ycyBzYW5zIHMnb2NjdXBlciBkZSBsYSB2YWxldXIgZGUgY2V0dGUgcHLpZulyZW5jZSwgbGVzIHBvaW50cyBuZSBzb250IHBhcyBhZmZpY2jpcy4KKyAgPHRhZz5NZXNzYWdlcyBkJ2F2ZXJ0aXNzZW1lbnQ8bGFiZWwgaWQ9InByZWZlcmVuY2UtYWxlcnQtbWVzc2FnZXMiPjwvdGFnPgorICAgIENoYXF1ZSBmb2lzIHF1J3VuIOl26W5lbWVudCBzaWduaWZpY2F0aWYgYXZlYyB1biBtZXNzYWdlIGFzc29jaekgc2UgcHJvZHVpdAorICAgICh2b2lyIDxyZWYgaWQ9InR1bmVzIiBuYW1lPSJTb25zIGQnYXZlcnRpc3NlbWVudCI+KToKKyAgICA8ZGVzY3JpcD4KKyAgICAgIDx0YWc+Tm9uPC90YWc+CisgICAgICAgIE4nYWZmaWNoZSBwYXMgbGUgbWVzc2FnZS4KKyAgICAgIDx0YWc+T3VpPC90YWc+CisgICAgICAgIEFmZmljaGUgbGUgbWVzc2FnZS4KKyAgICA8L2Rlc2NyaXA+CisgICAgU2kgZGVzIHNvbnMgZCdhdmVydGlzc2VtZW50IGRvaXZlbnQg6nRyZSBqb3XpcyAodm9pciBsYSBjb21tYW5kZQorICAgIDxyZWYgaWQ9ImNvbW1hbmQtVFVORVMiIG5hbWU9IlRVTkVTIj4sIGV0IGxhIHBy6WbpcmVuY2UKKyAgICA8cmVmIGlkPSJwcmVmZXJlbmNlLWFsZXJ0LXR1bmVzIiBuYW1lPSJTb25zIGQnYXZlcnRpc3NlbWVudCI+KSwgc2kgdW4gc29uIGEg6XTpCisgICAgYXNzb2Np6SDgIGwn6XbpbmVtZW50LCBldCBzaSBsZSBw6XJpcGjpcmlxdWUgZGUgc29uIHPpbGVjdGlvbm7pIHBldXQg6nRyZQorICAgIG91dmVydCwgb3Ugc2kgZGVzIHBvaW50cyBkJ2F2ZXJ0aXNzZW1lbnQgZG9pdmVudCDqdHJlIGFmZmljaOlzICh2b2lyIGxhIHBy6WbpcmVuY2UKKyAgICA8cmVmIGlkPSJwcmVmZXJlbmNlLWFsZXJ0LWRvdHMiIG5hbWU9IlBvaW50cyBkJ2F2ZXJ0aXNzZW1lbnQiPikgZXQgc2kgZGVzIHBvaW50cyBvbnQKKyAgICDpdOkgYXNzb2Np6XMg4CBsJ+l26W5lbWVudCwgc2FucyBzZSBzb3VjaWVyIGRlIGxhIHZhbGV1ciBkZSBjZXR0ZSBwculm6XJlbmNlLAorICAgIGxlIG1lc3NhZ2Ugbidlc3QgcGFzIGFmZmljaOkuCisgIDx0YWc+TW9kZSBEaXJlIGxhIGxpZ25lPGxhYmVsIGlkPSJwcmVmZXJlbmNlLXNheWxpbmUtbW9kZSI+PC90YWc+CisgICAgTG9ycyBkZSBsJ3V0aWxpc2F0aW9uIGRlIGxhIGNvbW1hbmRlIAorICAgIDxyZWYgaWQ9ImNvbW1hbmQtU0FZX0xJTkUiIG5hbWU9IlNBWV9MSU5FIj46CisgICAgPGRlc2NyaXA+CisgICAgICA8dGFnPkltbelkaWF0PC90YWc+CisgICAgICAgIFN1c3BlbmQgbGEgcGFyb2xlLgorICAgICAgPHRhZz5FbiBmaWxlPC90YWc+CisgICAgICAgIE5lIHN1c3BlbmQgcGFzIGxhIHBhcm9sZS4KKyAgICA8L2Rlc2NyaXA+CisgICAgTGEgdmFsZXVyIGluaXRpYWxlIGVzdCA8dHQ+SW1t6WRpYXQ8L3R0Pi4KKyAgPHRhZz5QYXJvbGUgYXV0b21hdGlxdWU8bGFiZWwgaWQ9InByZWZlcmVuY2UtYXV0b3NwZWFrIj48L3RhZz4KKyAgICA8ZGVzY3JpcD4KKyAgICAgIDx0YWc+SW5hY3RpZjwvdGFnPgorICAgICAgICBOZSBwYXJsZSBxdWUgcXVhbmQgdm91cyBsZSBkZW1hbmRleiBleHBsaWNpdGVtZW50LgorICAgICAgPHRhZz5BY3RpZjwvdGFnPgorICAgICAgICBEaXQgYXV0b21hdGlxdWVtZW50OgorICAgICAgICA8aXRlbWl6ZT4KKyAgICAgICAgICA8aXRlbT5sYSBub3V2ZWxsZSBsaWduZSBsb3JzcXVlIHZvdXMgZOlwbGFjZXogbGEgcGxhZ2UgYnJhaWxsZQorCSAgdmVydGljYWxlbWVudC4KKyAgICAgICAgICA8aXRlbT5sZXMgY2FyYWN06HJlcyBxdWkgc29udCBlbnRy6XMgb3UgZWZmYWPpcy4KKyAgICAgICAgICA8aXRlbT5sZSBjYXJhY3TocmUgc3VyIGxlcXVlbCB2b3VzIGTpcGxhY2V6IGxlIGN1cnNldXIuCisgICAgICAgIDwvaXRlbWl6ZT4KKyAgICA8L2Rlc2NyaXA+CisgICAgVm91cyBwb3V2ZXogYXVzc2kgY2hhbmdlciBjZSBwYXJhbeh0cmUgYXZlYyBsYSBjb21tYW5kZQorICAgIDxyZWYgaWQ9ImNvbW1hbmQtQVVUT1NQRUFLIiBuYW1lPSJBVVRPU1BFQUsiPi4KKyAgICBMYSB2YWxldXIgaW5pdGlhbGUgZXN0IDx0dD5pbmFjdGlmPC90dD4uCisgIDx0YWc+Vml0ZXNzZSBkZSBsYSBzeW50aOhzZTxsYWJlbCBpZD0icHJlZmVyZW5jZS1zcGVlY2gtcmF0ZSI+PC90YWc+CisgICAgQWp1c3RlIGxlIGTpYml0IGRlIHBhcm9sZSAoPHR0PjA8L3R0PiBlc3QgbGUgcGx1cyBsZW50LCA8dHQ+MjA8L3R0PiBlc3QgbGUgcGx1cworICAgIHJhcGlkZSkuIENldHRlIHBy6WbpcmVuY2Ugbidlc3QgZGlzcG9uaWJsZSBxdWUgc2kgdm91cyB1dGlsaXNleiB1biBwaWxvdGUKKyAgICBxdWkgbGEgc3VwcG9ydGUuCisgICAgVm91cyBwb3V2ZXogYXVzc2kgY2hhbmdlciBjZSBwYXJhbeh0cmUgYXZlYyBsYSBjb21tYW5kZQorICAgIDxyZWYgaWQ9ImNvbW1hbmQtU0FZX1NMT1dFUi1TQVlfRkFTVEVSIiBuYW1lPSJTQVlfU0xPV0VSL1NBWV9GQVNURVIiPi4KKyAgICBMYSB2YWxldXIgaW5pdGlhbGUgZXN0IDx0dD4xMDwvdHQ+LgorICA8dGFnPlZvbHVtZSBkZSBsYSBzeW50aOhzZTxsYWJlbCBpZD0icHJlZmVyZW5jZS1zcGVlY2gtdm9sdW1lIj48L3RhZz4KKyAgICBBanVzdGUgbGUgdm9sdW1lIGRlIGxhIHN5bnRo6HNlICg8dHQ+MDwvdHQ+IGVzdCBsZSBwbHVzIGJhcywgPHR0PjIwPC90dD4gbGUgcGx1cworICAgIGZvcnQpLiBDZXR0ZSBwculm6XJlbmNlIG4nZXN0IGRpc3BvbmlibGUgcXVlIHNpIHZvdXMgdXRpbGlzZXogdW4gcGlsb3RlCisgICAgcXVpIGxhIHN1cHBvcnRlLgorICAgIFZvdXMgcG91dmV6IGF1c3NpIGNoYW5nZXIgY2UgcGFyYW3odHJlIGF2ZWMgbGEgY29tbWFuZGUKKyAgICA8cmVmIGlkPSJjb21tYW5kLVNBWV9TT0ZURVItU0FZX0xPVURFUiIgbmFtZT0iU0FZX1NPRlRFUi9TQVlfTE9VREVSIj4uCisgICAgTGEgdmFsZXVyIGluaXRpYWxlIGVzdCA8dHQ+MTA8L3R0Pi4KKyAgPHRhZz5Ub24gZGUgbGEgdm9peDxsYWJlbCBpZD0icHJlZmVyZW5jZS1zcGVlY2gtcGl0Y2giPjwvdGFnPgorICAgIEFqdXN0ZSBsZSB2b2x1bWUgZGUgbGEgc3ludGjoc2UgKCg8dHQvMC8gZXN0IGxlIHBsdXMgYmFzLCA8dHQvMjAvIGVzdAorICAgIGxlIHBsdXMg6WxldukpLiBDZXR0ZSBwculm6XJlbmNlIG4nZXN0IGRpc3BvbmlibGUgcXVlIHNpIHZvdXMgdXRpbGlzZXoKKyAgICB1biBwaWxvdGUgcXVpIGxhIHN1cHBvcnRlLiBMZSBy6WdsYWdlIGluaXRpYWwgZXN0IDx0dC8xMC8uCisgIDx0YWc+UG9uY3R1YXRpb24gcG91ciBsYSBzeW50aOhzZTxsYWJlbCBpZD0icHJlZmVyZW5jZS1zcGVlY2gtcHVuY3R1YXRpb24iPjwvdGFnPgorICAgIEFqdXN0ZSBsYSBxdWFudGl06SBkZSBwb25jdHVhdGlvbiBwYXJs6WUuIEVsbGUgcGV1dCDqdHJlIGluaXRpYWxpc+llIOA6CisgICAgPGl0ZW1pemU+CisgICAgICA8aXRlbT5BdWN1bmUKKyAgICAgIDxpdGVtPlF1ZWxxdWVzCisgICAgICA8aXRlbT5Ub3V0ZXMKKyAgICA8L2l0ZW1pemU+CisgICAgCisgICAgQ2V0dGUgcHLpZulyZW5jZSBuJ2VzdCBkaXNwb25pYmxlIHF1ZSBzaSB2b3VzIHV0aWxpc2V6CisgICAgdW4gcGlsb3RlIHF1aSBsYSBzdXBwb3J0ZS4gTGUgculnbGFnZSBpbml0aWFsIGVzdCA8dHQvUXVlbHF1ZXMvLgorICA8dGFnPkFwcGFyZW5jZSBkZSBsJ+l0YXQ8bGFiZWwgaWQ9InByZWZlcmVuY2Utc3RhdHVzLXN0eWxlIj48L3RhZz4KKyAgICBDZSBwYXJhbeh0cmUgc3DpY2lmaWUgbGEgZmHnb24gZG9udCBsZXMgY2VsbHVsZXMgZCfpdGF0IGRvaXZlbnQg6nRyZQorICAgIHV0aWxpc+llcy4gTm9ybWFsZW1lbnQsIHZvdXMgbmUgZGV2cmlleiBwYXMgYXZvaXIgYmVzb2luIGRlIGpvdWVyIGF2ZWMg52EuCisgICAgQ2VsYSBwZXJtZXQgYXV4IGTpdmVsb3BwZXVycyBkZSBCUkxUVFkgZGUgdGVzdGVyIGxlcyBjb25maWd1cmF0aW9ucyBkZXMKKyAgICBjZWxsdWxlcyBkJ+l0YXQgcG91ciBsZXMgYWZmaWNoZXVycyBicmFpbGxlIHF1J2lscyBuJ29udCBwYXMgYXZlYyBldXguCisgICAgPGRlc2NyaXA+CisgICAgICA8dGFnPkF1Y3VuZTwvdGFnPgorICAgICAgICBOJ3V0aWxpc2UgcGFzIGxlcyBjZWxsdWxlcyBkZSBzdGF0dXQuCisJQ2V0dGUgdmFsZXVyIGVzdCB0b3Vqb3VycyBz+3JlLCBtYWlzIGVsbGUgZXN0IGF1c3NpIHRvdGFsZW1lbnQgaW51dGlsZS4KKyAgICAgIDx0YWc+QWx2YTwvdGFnPgorICAgICAgICBMZXMgY2VsbHVsZXMgZCfpdGF0IGNvbnRpZW5uZW50OgorICAgICAgICA8ZGVzY3JpcD4KKyAgICAgICAgICA8dGFnPjE8L3RhZz4KKyAgICAgICAgICAgIExhIHBsYWNlIGR1IGN1cnNldXIgKHZvaXIgY2ktZGVzc291cykuCisgICAgICAgICAgPHRhZz4yPC90YWc+CisgICAgICAgICAgICBMYSBwbGFjZSBkdSBjb2luIGVuIGhhdXQg4CBnYXVjaGUgZGUgbGEgcGxhZ2UgYnJhaWxsZSAodm9pcgorCSAgICBjaS1kZXNzb3VzKS4KKyAgICAgICAgICA8dGFnPjM8L3RhZz4KKyAgICAgICAgICAgIFVuZSBsZXR0cmUgaW5kaXF1YW50IGwn6XRhdCBkZSBCUkxUVFkuCisgICAgICAgICAgICBEYW5zIGwnb3JkcmUgZGUgcmFuZ2VtZW50OgorICAgICAgICAgICAgPGRlc2NyaXA+CisgICAgICAgICAgICAgIDx0YWc+YTwvdGFnPgorCSAgICAgICAgTGVzIGF0dHJpYnV0cyBkZSBsJ+ljcmFuIHNvbnQgYWZmaWNo6XMgKHZvaXIgbGEgY29tbWFuZGUKKwkJPHJlZiBpZD0iY29tbWFuZC1ESVNQTUQiIG5hbWU9IkRJU1BNRCI+KS4KKyAgICAgICAgICAgICAgPHRhZz5mPC90YWc+CisJICAgICAgICBMJ2ltYWdlIGRlIGwn6WNyYW4gZXN0IGdlbOllICh2b2lyIGxhIGNvbW1hbmRlCisJCTxyZWYgaWQ9ImNvbW1hbmQtRlJFRVpFIiBuYW1lPSJGUkVFWkUiPikuCisgICAgICAgICAgICAgIDx0YWc+ZjwvdGFnPgorCSAgICAgICAgTGUgY3Vyc2V1ciBlc3QgcG91cnN1aXZpICh2b2lyIGxhIGNvbW1hbmRlCisJCTxyZWYgaWQ9ImNvbW1hbmQtQ1NSVFJLIiBuYW1lPSJDU1JUUksiPikuCisgICAgICAgICAgICAgIDx0YWc+PGVtPnZpZXJnZTwvZW0+PC90YWc+CisgICAgICAgICAgICAgICAgUmllbiBkZSBzcOljaWFsLgorICAgICAgICAgICAgPC9kZXNjcmlwPgorICAgICAgICA8L2Rlc2NyaXA+CisJTGVzIGVtcGxhY2VtZW50cyBkdSBjdXJzZXVyIGV0IGRlIGxhIHBsYWdlIGJyYWlsbGUgc29udCBwculzZW506XMgZGUKKwlmYedvbiBpbnTpcmVzc2FudGUuIExlcyBwb2ludHMgMSDgIDYgcmVwculzZW50ZW50IGxlIG51belybyBkZSBsYSBsaWduZQorCWF2ZWMgdW5lIGxldHRyZSBkZSA8dHQ+YTwvdHQ+IChwb3VyIDEpIOAgPHR0Pnk8L3R0PiAocG91ciAyNSkuCisJTGVzIHBvaW50cyA3IGV0IDggKGxlcyBkZXV4IHBvaW50cyBzdXBwbOltZW50YWlyZXMgdG91dCBlbiBiYXMpCisJcmVwculzZW50ZW50IGxlIG51belybyBkZSBsYSBwbGFnZSBicmFpbGxlIGhvcnJpem9udGFsZSBjb21tZSBzdWl0OgorCTxkZXNjcmlwPgorICAgICAgICAgIDx0YWc+QXVjdW4gcG9pbnRzPC90YWc+TGEgcHJlbWnocmUgZmVu6nRyZSAobGEgcGx1cyDgIGdhdWNoZSkuCisgICAgICAgICAgPHRhZz5Qb2ludCA3PC90YWc+TGEgc2Vjb25kZSBmZW7qdHJlLgorICAgICAgICAgIDx0YWc+UG9pbnQgODwvdGFnPkxhIHRyb2lzaehtZSBmZW7qdHJlLgorICAgICAgICAgIDx0YWc+UG9pbnRzIDcgZXQgODwvdGFnPkxhIHF1YXRyaehtZSBmZW7qdHJlLgorICAgICAgICA8L2Rlc2NyaXA+CisJRGFucyBsZXMgZGV1eCBjYXMsIGxlcyBpbmRpY2F0ZXVycyBpbmNsdWVudDoKKwlsYSBsaWduZSAyNiBlc3QgcmVwculzZW506WUgcGFyIGxhIGxldHRyZSA8dHQ+YTwvdHQ+LCBldCBsYSBjaW5xdWnobWUKKwlwbGFnZSBicmFpbGxlIGhvcml6b250YWxlIGVzdCByZXBy6XNlbnTpZSBhdmVjIGF1Y3VuIHBvaW50IHRvdXQgZW4gYmFzLgorICAgICAgPHRhZz5UaWVtYW48L3RhZz4KKyAgICAgICAgTGVzIGNlbGx1bGVzIGQn6XRhdCBjb250aWVubmVudDoKKyAgICAgICAgPGRlc2NyaXA+CisgICAgICAgICAgPHRhZz4xLTI8L3RhZz4KKwkgICAgTGVzIGNvbG9ubmVzIChlbiBwYXJ0YW50IGRlIHVuKSBkdSBjdXJzZXVyIChtb250cullcyBkYW5zIGxhCisJICAgIG1vaXRp6SBzdXDpcmlldXJlIGRlcyBjZWxsdWxlcyBldCBkdSBjb2luIGhhdXQg4CBnYXVjaGUgZGUgbGEKKwkgICAgcGxhZ2UgYnJhaWxsZSAoYWZmaWNo6SBkYW5zIGxhIHBhcnRpZSBlbiBiYXMgZGVzIGNlbGx1bGVzKS4KKyAgICAgICAgICA8dGFnPjMtNDwvdGFnPgorCSAgICBMZXMgbGlnbmVzIChlbiBwYXJ0YW50IGRlIHVuKSBkdSBjdXJzZXVyIGFmZmljaOllcyBkYW5zIGxhCisJICAgIG1vaXRp6SBzdXDpcmlldXJlIGRlcyBjZWxsdWxlcyBldCBkdSBjb2luIGhhdXQg4CBnYXVjaGUgZGUgbGEKKwkgICAgcGxhZ2UgYnJhaWxsZSAoYWZmaWNo6SBkYW5zIGxhIHBhcnRpZSBiYXNzZSBkZXMgY2VsbHVsZXMpLgorICAgICAgICAgIDx0YWc+NTwvdGFnPgorCSAgICBDaGFxdWUgcG9pbnQgaW5kaXF1ZSBzaSB1bmUgY2FyYWN06XJpc3RpcXVlIGVzdCBhY3RpdmUgY29tbWUgc3VpdDoKKyAgICAgICAgICAgIDxkZXNjcmlwPgorICAgICAgICAgICAgICA8dGFnPnBvaW50IDE8L3RhZz4KKyAgICAgICAgICAgICAgICBMJ2ltYWdlIGRlIGwn6WNyYW4gZXN0IGdlbOllICh2b2lyIGxhIGNvbW1hbmRlCisJCTxyZWYgaWQ9ImNvbW1hbmQtRlJFRVpFIiBuYW1lPSJGUkVFWkUiPikuCisgICAgICAgICAgICAgIDx0YWc+UG9pbnQgMjwvdGFnPgorICAgICAgICAgICAgICAgIExlcyBhdHRyaWJ1dHMgZGUgbCfpY3JhbiBzb250IGFmZmljaOlzICh2b2lyIGxhIGNvbW1hbmRlCisgICAgICAgICAgICAgICAgPHJlZiBpZD0iY29tbWFuZC1ESVNQTUQiIG5hbWU9IkRJU1BNRCI+KS4KKyAgICAgICAgICAgICAgPHRhZz5Qb2ludCAzPC90YWc+CisgICAgICAgICAgICAgICAgTGVzIHNvbnMgZCdhdmVydGlzc2VtZW50IHNvbnQgam916XMgKHZvaXIgbGEgY29tbWFuZGUKKyAgICAgICAgICAgICAgICA8cmVmIGlkPSJjb21tYW5kLVRVTkVTIiBuYW1lPSJUVU5FUyI+KS4KKyAgICAgICAgICAgICAgPHRhZz5Qb2ludCA0PC90YWc+CisgICAgICAgICAgICAgICAgTGUgY3Vyc2V1ciBlc3QgYWZmaWNo6SAodm9pciBsYSBjb21tYW5kZQorICAgICAgICAgICAgICAgIDxyZWYgaWQ9ImNvbW1hbmQtQ1NSVklTIiBuYW1lPSJDU1JWSVMiPikuCisgICAgICAgICAgICAgIDx0YWc+UG9pbnQgNTwvdGFnPgorICAgICAgICAgICAgICAgIExlIGN1cnNldXIgZXN0IHVuIHBhdukgKHZvaXIgbGEgY29tbWFuZGUKKyAgICAgICAgICAgICAgICA8cmVmIGlkPSJjb21tYW5kLUNTUlNJWkUiIG5hbWU9IkNTUlNJWkUiPikuCisgICAgICAgICAgICAgIDx0YWc+UG9pbnQgNjwvdGFnPgorICAgICAgICAgICAgICAgIExlIGN1cnNldXIgZXN0IG1hc3F16SAodm9pciBsYSBjb21tYW5kZQorICAgICAgICAgICAgICAgIDxyZWYgaWQ9ImNvbW1hbmQtQ1NSQkxJTksiIG5hbWU9IkNTUkJMSU5LIj4pLgorICAgICAgICAgICAgICA8dGFnPlBvaW50IDc8L3RhZz4KKyAgICAgICAgICAgICAgICBMZSBjdXJzZXVyIGVzdCBwb3Vyc3VpdmkgKHZvaXIgbGEgY29tbWFuZGUKKyAgICAgICAgICAgICAgICA8cmVmIGlkPSJjb21tYW5kLUNTUlRSSyIgbmFtZT0iQ1NSVFJLIj4pLgorICAgICAgICAgICAgICA8dGFnPlBvaW50IDg8L3RhZz4KKyAgICAgICAgICAgICAgICBMYSBwbGFnZSBicmFpbGxlIGTpZmlsZXJhICh2b2lyIGxhIGNvbW1hbmRlCisgICAgICAgICAgICAgICAgPHJlZiBpZD0iY29tbWFuZC1TTElERVdJTiIgbmFtZT0iU0xJREVXSU4iPikuCisgICAgICAgICAgICA8L2Rlc2NyaXA+CisgICAgICAgIDwvZGVzY3JpcD4KKyAgICAgIDx0YWc+UG93ZXJCcmFpbGxlIDgwPC90YWc+CisgICAgICAgIExlcyBjZWxsdWxlcyBkJ+l0YXQgY29udGllbm5lbnQ6CisgICAgICAgIDxkZXNjcmlwPgorICAgICAgICAgIDx0YWc+MTwvdGFnPgorCSAgICBMYSBsaWduZSAoZW4gcGFydGFudCBkZSAxKSBjb3JyZXNwb25kYW50IGF1IGhhdXQgZGUgbGEgcGxhZ2UKKwkgICAgYnJhaWxsZS4gTGEgcGFydGllIGRlcyBkaXphaW5lcyBlc3QgbW9udHLpZSBkYW5zIGxhIG1vaXRp6SBzdXDpcmlldXJlCisJICAgIGRlIGxhIGNlbGx1bGUsIGV0IGNlbGxlIGRlcyB1bml06XMgZXN0IG1vbnRy6WUgZGFucyBsYSBtb2l0aekKKwkgICAgaW5m6XJpZXVyZSBkZSBsYSBjZWxsdWxlLgorICAgICAgICA8L2Rlc2NyaXA+CisgICAgICA8dGFnPkfpbulyaXF1ZTwvdGFnPgorICAgICAgICBDZSBwYXJhbeh0cmUgdHJhbnNtZXQgYmVhdWNvdXAgZCdpbmZvcm1hdGlvbnMgYXUgcGlsb3RlIGJyYWlsbGUsIGV0IGxlCisJcGlsb3RlIGx1aS1t6m1lIGTpY2lkZSBjb21tZW50IGxlcyBwculzZW50ZXIuCisgICAgICA8dGFnPk1EVjwvdGFnPgorICAgICAgICBMZXMgY2VsbHVsZXMgZGUgc3RhdHV0IGNvbnRpZW5uZW50OgorICAgICAgICA8ZGVzY3JpcD4KKyAgICAgICAgICA8dGFnPjEtMjwvdGFnPgorCSAgICBMJ2VtcGxhY2VtZW50IGR1IGNvaW4gZW4gaGF1dCDgIGdhdWNoZSBkZSBsYSBwbGFnZSBicmFpbGxlLgorCSAgICBMYSBsaWduZSAoZW4gcGFydGFudCBkZSAxKSBlc3QgYWZmaWNo6WUgZGFucyBsYSBtb2l0aekgc3Vw6XJpZXVyZQorCSAgICBkZXMgY2VsbHVsZXMsIGV0IGxhIGNvbG9ubmUgKGVuIHBhcnRhbnQgZGUgMSkgZXN0IG1vbnRy6WUgZGFucyBsYQorICAgIG1vaXRp6SBpbmbpcmlldXJlIGRlcyBjZWxsdWxlcy4KKyAgICAgICAgPC9kZXNjcmlwPgorICAgICAgPHRhZz5Wb3lhZ2VyPC90YWc+CisgICAgICAgIExlcyBjZWxsdWxlcyBkJ+l0YXQgY29udGllbm5lbnQ6CisgICAgICAgIDxkZXNjcmlwPgorICAgICAgICAgIDx0YWc+MTwvdGFnPgorCSAgICBMYSBsaWduZSAoZW4gcGFydGFudCBkZSAwKSBjb3JyZXNwb25kYW50IGF1IGhhdXQgZGUgbGEgcGxhZ2UKKwkgICAgYnJhaWxsZSAodm9pciBjaS1kZXNzb3VzKS4KKyAgICAgICAgICA8dGFnPjI8L3RhZz4KKyAgICAgICAgICAgIExhIGxpZ25lIChlbiBwYXJ0YW50IGRlIDEpIHN1ciBsYXF1ZWxsZSBzZSB0cm91dmUgbGUgY3Vyc2V1ciAodm9pcgorCSAgICBjaS1kZXNzb3VzKS4KKyAgICAgICAgICA8dGFnPjM8L3RhZz4KKwkgICAgU2kgbCfpY3JhbiBlc3QgZ2Vs6SAodm9pciBsYSBjb21tYW5kZQorCSAgICA8cmVmIGlkPSJjb21tYW5kLUZSRUVaRSIgbmFtZT0iRlJFRVpFIj4pLCBsYSBsZXR0cmUgPHR0PkY8L3R0Pi4KKyAgICAgICAgICAgIFNpbm9uLCBsYSBjb2xvbm5lIChlbiBwYXJ0YW50IGRlIDEpIGRhbnMgbGFxdWVsbGUgc2UgdHJvdXZlIGxlCisJICAgIGN1cnNldXIgKHZvaXIgY2ktZGVzc291cykuCisgICAgICAgIDwvZGVzY3JpcD4KKwlMZXMgbnVt6XJvcyBkZSBsaWduZSBldCBkZSBjb2xvbm5lIHNvbnQgbW9udHLpcyBjb21tZSBkZXV4IGNhc2VzIGRhbnMKKwl1bmUgc2V1bGUgY2VsbHVsZS4gTGVzIGRpemFpbmUgc29udCBhZmZpY2jpZXMgZGFucyBsYSBtb2l0aekgaGF1dGUgZGUgbGEKKwljZWxsdWxlLCBldCBsZXMgdW5pdOlzIHNvbnQgYWZmaWNo6WVzIGRhbnMgbGEgbW9pdGnpIGluZulyaWV1cmUgZGUgbGEKKwljZWxsdWxlLgorICAgIDwvZGVzY3JpcD4KKyAgICBMYSB2YWxldXIgaW5pdGlhbGUgZOlwZW5kIGR1IHBpbG90ZSBkZSBsJ2FmZmljaGV1ciBicmFpbGxlLgorICA8dGFnPlRhYmxlIGRlIHRleHRlPGxhYmVsIGlkPSJwcmVmZXJlbmNlLXRleHQtdGFibGUiPjwvdGFnPgorICAgIFPpbGVjdGlvbm5lIGxhIHRhYmxlIGRlIHRleHRlLiBWb2lyIGxhIHNlY3Rpb24KKyAgICA8cmVmIGlkPSJ0YWJsZS10ZXh0IiBuYW1lPSJUYWJsZSBkZSB0ZXh0ZSI+IHBvdXIgZGVzIGTpdGFpbHMuCisgICAgVm9pciBsJ29wdGlvbiA8cmVmIGlkPSJvcHRpb25zLXRleHQtdGFibGUiIG5hbWU9Ii10Ij4gZW4gbGlnbmUgZGUKKyAgICBjb21tYW5kZSBwb3VyIGxhIHZhbGV1ciBpbml0aWFsZS4KKyAgICBDZXR0ZSBwculm6XJlbmNlIG4nZXN0IHBhcyBzYXV2ZWdhcmTpZS4KKyAgPHRhZz5UYWJsZSBkJ2F0dHJpYnV0czxsYWJlbCBpZD0icHJlZmVyZW5jZS1hdHRyaWJ1dGVzLXRhYmxlIj48L3RhZz4KKyAgICBT6WxlY3Rpb25uZSBsYSB0YWJsZSBkJ2F0dHJpYnV0cy4gVm9pciBsYSBzZWN0aW9uCisgICAgPHJlZiBpZD0idGFibGUtYXR0cmlidXRlcyIgbmFtZT0iVGFibGVzIGQnYXR0cmlidXRzIj4gcG91cgorICAgIGRlcyBk6XRhaWxzLiBWb2lyIGwnb3B0aW9uIDxyZWYgaWQ9Im9wdGlvbnMtYXR0cmlidXRlcy10YWJsZSIgbmFtZT0iLWEiPgorICAgIGVuIGxpZ25lIGRlIGNvbW1hbmRlIHBvdXIgbGEgdmFsZXVyIGluaXRpYWxlLgorICAgIENldHRlIHBy6WbpcmVuY2Ugbidlc3QgcGFzIHNhdXZlZ2FyZOllLgorICA8dGFnPlRhYmxlIGRlIGJyYWlsbGUgYWJy6WfpPGxhYmVsIGlkPSJwcmVmZXJlbmNlLWNvbnRyYWN0aW9uLXRhYmxlIj48L3RhZz4KKyAgICBT6WxlY3Rpb25uZSBsYSB0YWJsZSBkZSBicmFpbGxlIGFiculn6S4gVm9pciBsYSBzZWN0aW9uCisgICAgPHJlZiBpZD0idGFibGUtY29udHJhY3Rpb24iIG5hbWU9IlRhYmxlcyBkJ2Ficuln6SI+IHBvdXIgZGVzIGTpdGFpbHMuIFZvaXIgbCdvcHRpb24KKyAgICA8cmVmIGlkPSJvcHRpb25zLWNvbnRyYWN0aW9uLXRhYmxlIiBuYW1lPSItYyI+IGVuIGxpZ25lIGRlIGNvbW1hbmRlCisgICAgcG91ciBsYSB2YWxldXIgaW5pdGlhbGUuCisgICAgQ2V0dGUgcHLpZulyZW5jZSBuJ2VzdCBwYXMgc2F1dmVnYXJk6WUuCisgIDx0YWc+IFRhYmUgZGUgdG91Y2hlczxsYWJlbCBpZD0icHJlZmVyZW5jZS1rZXktdGFibGUiPjwvdGFnPgorICAgIFPpbGVjdGlvbiBkZSBsYSB0YWJsZSBkZSB0b3VjaGVzLgorICAgIFZvaXIgbGEgc2VjdGlvbiA8cmVmIGlkPSJ0YWJsZS1rZXkiIG5hbWU9IlRhYmxlcyBkZSB0b3VjaGVzIj4gcG91ciBwbHVzIGRlIGTpdGFpbHMuCisgICAgVm9pciBsJ29wdGlvbiA8cmVmIGlkPSJvcHRpb25zLWtleS10YWJsZSIgbmFtZT0iLWsiPiBlbiBsaWduZSBkZSBjb21tYW5kZSAKKyAgICBwb3VyIGxlIHLpZ2xhZ2UgaW5pdGlhbC4KKyAgICBDZXR0ZSBwculm6XJlbmNlIG4nZXN0IHBhcyBzYXV2ZWdhcmTpZS4KKzwvZGVzY3JpcD4KKworUmVtYXJxdWVzOgorPGl0ZW1pemU+CisgIDxpdGVtPjxsYWJlbCBpZD0idGltZS1zZXR0aW5ncyI+CisgICAgVG91cyBsZXMgcGFyYW3odHJlcyBkZSB0ZW1wcyBzb250IGVuIGNlbnRp6G1lcyBkZSBzZWNvbmRlLiBDZSBzb250IGRlcworICAgIG11bHRpcGxlcyBkZSA0IGNvbXByaXMgZW50cmUgMSBldCAxMDAuCis8L2l0ZW1pemU+CisKKzxzZWN0MT5MJ2FmZmljaGFnZSBkZXMg6XRhdHM8bGFiZWwgaWQ9InN0YXR1cyI+PHA+CitMJ2FmZmljaGFnZSBkZXMg6XRhdHMgZXN0IHVuIHLpc3Vt6SBkZSBsJ+l0YXQgY291cmFudCBkZSBCUkxUVFkgcXVpIHMnYWRhcHRlCit0b3RhbGVtZW50IOAgbCdpbnTpcmlldXIgZGUgbGEgcGxhZ2UgYnJhaWxsZS4gQ2VydGFpbnMgYWZmaWNoZXVycyBicmFpbGxlIG9udAordW4gdHlwZSBkZSBjZWxsdWxlcyBkJ+l0YXQgcXVpIHNvbnQgdXRpbGlz6WVzIHBvdXIgYWZmaWNoZXIgZW4gcGVybWFuZW5jZQorY2VydGFpbmVzIGRlIGNlcyBpbmZvcm1hdGlvbnMgZGUgbGEgbeptZSBmYedvbiAodm9pciBsYSBkb2N1bWVudGF0aW9uIGR1CitwaWxvdGUgZGUgdm90cmUgYWZmaWNoZXVyKS4KK0xlcyBkb25u6WVzIHBy6XNlbnTpZXMgcGFyIGNldCBhZmZpY2hhZ2UgbmUgc29udCBwYXMgc3RhdGlxdWVzIGV0IHBldXZlbnQgY2hhbmdlcgor4CBuJ2ltcG9ydGUgcXVlbCBtb21lbnQsIGVuIHLpYWN0aW9uIGF1eCBtaXNlcyDgIGpvdXIgZGUgbCfpY3JhbiBldC9vdSBhdXgKK2NvbW1hbmRlcyBCUkxUVFkuCisKK1V0aWxpc2V6IGxhIGNvbW1hbmRlIDxyZWYgaWQ9ImNvbW1hbmQtSU5GTyIgbmFtZT0iSU5GTyI+IHBvdXIgYWxsZXIg4AorbCdhZmZpY2hhZ2UgZGVzIOl0YXRzLCBldCB1dGlsaXNlei1sYSBkZSBub3V2ZWF1IHBvdXIgcmV2ZW5pciDgIGwn6WNyYW4uCitMYSBwculzZW50YXRpb24gZGVzIGluZm9ybWF0aW9ucyBxdSdpbCBjb250aWVudCBk6XBlbmQgZGUgbGEgdGFpbGxlIGRlCitsYSBwbGFnZSBicmFpbGxlLgorCis8c2VjdDI+QWZmaWNoZXVycyBkZSAyMSBjZWxsdWxlcyBvdSBwbHVzPHA+CitEZSBjb3VydGVzIHN5bWJvbGlxdWVzIG9udCDpdOkgdXRpbGlz6WVzLCBiaWVuIHF1J2VsbGVzIHMnYXBwYXJlbnRlbnQg4CB1biBjb2RlCitjaGlmZnLpLCBkZSBmYedvbiDgIGFmZmljaGVyIGxhIHBy6XNlbnRhdGlvbiBlbiBjb2xvbm5lIHBy6WNpc2UuCis8dHNjcmVlbj48ZW0+d3g8L2VtPjo8ZW0+d3k8L2VtPiA8ZW0+Y3g8L2VtPjo8ZW0+Y3k8L2VtPiA8ZW0+dnQ8L2VtPiA8ZW0+dGNtZmR1PC9lbT48L3RzY3JlZW4+Cis8ZGVzY3JpcD4KKyAgPHRhZz48ZW0+d3g8L2VtPjx0dD46PC90dD48ZW0+d3k8L2VtPjwvdGFnPgorICAgIExhIGNvbG9ubmUgZXQgbGEgbGlnbmUgKGVuIHBhcnRhbnQgZGUgMSkgc3VyIGwn6WNyYW4gY29ycmVzcG9uZGFudCBhdQorICAgIGNvaW4gZW4gaGF1dCDgIGdhdWNoZSBkZSBsYSBwbGFnZSBicmFpbGxlLgorICA8dGFnPjxlbT5jeDwvZW0+PHR0Pjo8L3R0PjxlbT5jeTwvZW0+PC90YWc+CisgICAgTGEgY29sb25uZSBldCBsYSBsaWduZSAoZW4gcGFydGFudCBkZSAxKSBzdXIgbCfpY3JhbiBjb3JyZXNwb25kYW50IOAgbGEKKyAgICBwb3NpdGlvbiBkdSBjdXJzZXVyLgorICA8dGFnPjxlbT52dDwvZW0+PC90YWc+CisgICAgTGUgbnVt6XJvIChlbiBwYXJ0YW50IGRlIDEpIGRlIGxhIGNvbnNvbGUgdmlydHVlbGxlIGNvdXJhbnRlLgorICA8dGFnPjxlbT50PC9lbT48L3RhZz4KKyAgICBMJ+l0YXQgZGUgbGEgZm9uY3Rpb24gZGUgcG91cnN1aXRlIGR1IGN1cnNldXIgKHZvaXIgbGEgY29tbWFuZGUKKyAgICA8cmVmIGlkPSJjb21tYW5kLUNTUlRSSyIgbmFtZT0iQ1NSVFJLIj4gY29tbWFuZCkuCisgICAgPGRlc2NyaXA+CisgICAgICA8dGFnPnZpZGU8L3RhZz5MZSBzdWl2aSBkdSBjdXJzZXVyIGVzdCBpbmFjdGlmLgorICAgICAgPHRhZz48dHQ+dDwvdHQ+PC90YWc+TGUgc3VpdmkgZHUgY3Vyc2V1ciBlc3QgYWN0aWYuCisgICAgPC9kZXNjcmlwPgorICA8dGFnPjxlbT5jPC9lbT48L3RhZz4KKyAgICBMJ+l0YXQgZGVzIGNhcmFjdOlyaXN0aXF1ZXMgZGUgdmlzaWJpbGl06SBkdSBjdXJzZXVyICh2b2lyIGxlcyBjb21tYW5kZXMKKyAgICA8cmVmIGlkPSJjb21tYW5kLUNTUlZJUyIgbmFtZT0iQ1NSVklTIj4gZXQKKyAgICA8cmVmIGlkPSJjb21tYW5kLUNTUkJMSU5LIiBuYW1lPSJDU1JCTElOSyI+KS4KKyAgICA8ZGVzY3JpcD4KKyAgICAgIDx0YWc+dmlkZTwvdGFnPkxlIGN1cnNldXIgbidlc3QgcGFzIHZpc2libGUgZXQgbmUgY2xpZ25vdGVyYSBwYXMgcXVhbmQgaWwKKyAgICAgIHNlcmEgdmlzaWJsZS4KKyAgICAgIDx0YWc+PHR0PmI8L3R0PjwvdGFnPkxlIGN1cnNldXIgbidlc3QgcGFzIHZpc2libGUsIGV0IGNsaWdub3RlcmEgbG9yc3F1J2lsCisgICAgICBzZXJhIHZpc2libGUuCisgICAgICA8dGFnPjx0dD52PC90dD48L3RhZz5MZSBjdXJzZXVyIGVzdCB2aXNpYmxlIGV0IG5vbiBjbGlnbm90YW50LgorICAgICAgPHRhZz48dHQ+QjwvdHQ+PC90YWc+TGUgY3Vyc2V1ciBlc3QgdmlzaWJsZSBldCBjbGlnbm90YW50LgorICAgIDwvZGVzY3JpcD4KKyAgPHRhZz48ZW0+bTwvZW0+PC90YWc+CisgICAgTGUgbW9kZSBkJ2FmZmljaGFnZSBhY3R1ZWwgKHZvaXIgbGEgY29tbWFuZGUKKyAgICA8cmVmIGlkPSJjb21tYW5kLURJU1BNRCIgbmFtZT0iRElTUE1EIj4pLgorICAgIDxkZXNjcmlwPgorICAgICAgPHRhZz48dHQ+dDwvdHQ+PC90YWc+TGUgY29udGVudSBkZSBsJ+ljcmFuICh0ZXh0ZSkgZXN0IGFmZmljaOkuCisgICAgICA8dGFnPjx0dD5hPC90dD48L3RhZz5MYSBzdXJicmlsbGFuY2Ug4CBsJ+ljcmFuIChsZXMgYXR0cmlidXRzKSBlc3QgYWZmaWNo6WUuCisgICAgPC9kZXNjcmlwPgorICA8dGFnPjxlbT5mPC9lbT48L3RhZz4KKyAgICBMJ+l0YXQgZGUgbGEgZm9uY3Rpb24gZGUgZ2VsIGRlIGwn6WNyYW4gKHZvaXIgbGEgY29tbWFuZGUKKyAgICA8cmVmIGlkPSJjb21tYW5kLUZSRUVaRSIgbmFtZT0iRlJFRVpFIj4pLgorICAgIDxkZXNjcmlwPgorICAgICAgPHRhZz52aWRlPC90YWc+TCfpY3JhbiBuJ2VzdCBwYXMgZ2Vs6S4KKyAgICAgIDx0YWc+PHR0PmY8L3R0PjwvdGFnPkwn6WNyYW4gZXN0IGdlbOkuCisgICAgPC9kZXNjcmlwPgorICA8dGFnPjxlbT5kPC9lbT48L3RhZz4KKyAgICBMZSBub21icmUgZGUgcG9pbnRzIGJyYWlsbGUgdXRpbGlz6XMgcG91ciBhZmZpY2hlciBjaGFxdWUgY2FyYWN06HJlICh2b2lyCisgICAgbGEgY29tbWFuZGUgPHJlZiBpZD0iY29tbWFuZC1TSVhET1RTIiBuYW1lPSJTSVhET1RTIj4pLgorICAgIDxkZXNjcmlwPgorICAgICAgPHRhZz48dHQ+ODwvdHQ+PC90YWc+TGVzIGh1aXQgcG9pbnRzIHNvbnQgdXRpbGlz6XMuCisgICAgICA8dGFnPjx0dD42PC90dD48L3RhZz5TZXVscyA2IHBvaW50cyBzb250IHV0aWxpc+lzLgorICAgIDwvZGVzY3JpcD4KKyAgPHRhZz48ZW0+dTwvZW0+PC90YWc+CisgICAgTCfpdGF0IGRlcyBmb25jdGlvbnMgZCdhZmZpY2hhZ2UgZGVzIGxldHRyZXMgbWFqdXNjdWxlcyAodm9pciBsYQorICAgIGNvbW1hbmRlIDxyZWYgaWQ9ImNvbW1hbmQtQ0FQQkxJTksiIG5hbWU9IkNBUEJMSU5LIj4pLgorICAgIDxkZXNjcmlwPgorICAgICAgPHRhZz52aWRlPC90YWc+TGVzIGxldHRyZXMgZW4gbWFqdXNjdWxlIG5lIGNsaWdub3RlbnQgcGFzLgorICAgICAgPHRhZz48dHQ+QjwvdHQ+PC90YWc+TGVzIGxldHRyZXMgZW4gbWFqdXNjdWxlIGNsaWdub3RlbnQuCisgICAgPC9kZXNjcmlwPgorPC9kZXNjcmlwPgorCis8c2VjdDI+QWZmaWNoZXVycyDgIDIwIGNlbGx1bGVzIG91IG1vaW5zPHA+CitEZSBjb3VydGVzIHN5bWJvbGlxdWVzIG9udCDpdOkgdXRpbGlz6WVzLCBiaWVuIHF1J2VsbGVzIHMnYXBwYXJlbnRlbnQg4CB1biBjb2RlCitjaGlmZnLpLCBkZSBmYedvbiDgIG1vbnRyZXIgbGEgcHLpc2VudGF0aW9uIGVuIGNvbG9ubmUgcHLpY2lzZS4KKzx0c2NyZWVuPjxlbT54eDwvZW0+PGVtPnl5PC9lbT48ZW0+czwvZW0+IDxlbT52dDwvZW0+IDxlbT50Y21mZHU8L2VtPjwvdHNjcmVlbj4KKzxkZXNjcmlwPgorICA8dGFnPjxlbT54eDwvZW0+PC90YWc+CisgICAgTGVzIGNvbG9ubmVzIChlbiBwYXJ0YW50IGRlIDEpIHN1ciBsJ+ljcmFuIGNvcnJlc3BvbmRhbnQg4CBsYSBwb3NpdGlvbiBkdQorICAgIGN1cnNldXIgKGFmZmljaOkgZGFucyBsYSBtb2l0aekgc3Vw6XJpZXVyZSBkZXMgY2VsbHVsZXMpIGV0IGF1IGNvaW4gZW4KKyAgICBoYXV0IOAgZ2F1Y2hlIGRlIGwnYWZmaWNoZXVyIGJyYWlsbGUgKGFmZmljaOkgZGFucyBsYSBtb2l0aekgaW5m6XJpZXVyZSBkZXMKKyAgICBjZWxsdWxlcykuCisgIDx0YWc+PGVtPnl5PC9lbT48L3RhZz4KKyAgICBMZXMgbGlnbmVzIChlbiBwYXJ0YW50IGRlIDEpIHN1ciBsJ+ljcmFuIGNvcnJlc3BvbmRhbnQg4CBsYSBwb3NpdGlvbiBkdQorICAgIGN1cnNldXIgKGFmZmljaOllIGRhbnMgbGEgbW9pdGnpIHN1cOlyaWV1cmUgZGVzIGNlbGx1bGVzKSBldCBhdSBjb2luIGVuICAgIGhhdXQg4CBnYXVjaGUgZGUgbCdhZmZpY2hldXIgYnJhaWxsZSAobW9udHLpIGRhbnMgbGEgbW9pdGnpIGluZulyaWV1cmUgZGVzCisgICAgY2VsbHVsZXMpLgorICA8dGFnPjxlbT5zPC9lbT48L3RhZz4KKyAgICBMZXMgdmFsZXVycyBkZSBjZXJ0YWluZXMgZm9uY3Rpb25zIGRlIEJSTFRUWS4KKyAgICBVbmUgZm9uY3Rpb25hbGl06SBlc3QgYWN0aXZlIHNpIGxlIHBvaW50IGx1aSBjb3JyZXNwb25kYW50IGVzdCDpbGV26S4KKyAgICA8ZGVzY3JpcD4KKyAgICAgIDx0YWc+UG9pbnQgMTwvdGFnPgorICAgICAgICBMJ2ltYWdlIGRlIGwn6WNyYW4gZ2Vs6WUgKHZvaXIgbGEgY29tbWFuZGUKKwk8cmVmIGlkPSJjb21tYW5kLUZSRUVaRSIgbmFtZT0iRlJFRVpFIj4pLgorICAgICAgPHRhZz5Qb2ludCAyPC90YWc+CisgICAgICAgIEFmZmljaGFnZSBkZXMgYXR0cmlidXRzICh2b2lyIGxhIGNvbW1hbmRlCisJPHJlZiBpZD0iY29tbWFuZC1ESVNQTUQiIG5hbWU9IkRJU1BNRCI+KS4KKyAgICAgIDx0YWc+UG9pbnQgMzwvdGFnPgorICAgICAgICBMZXMgc29ucyBkJ2F2ZXJ0aXNzZW1lbnQgKHZvaXIgbGEgY29tbWFuZGUKKwk8cmVmIGlkPSJjb21tYW5kLVRVTkVTIiBuYW1lPSJUVU5FUyI+KS4KKyAgICAgIDx0YWc+UG9pbnQgNDwvdGFnPgorICAgICAgICBDdXJzZXVyIHZpc2libGUgKHZvaXIgbGEgY29tbWFuZGUKKwk8cmVmIGlkPSJjb21tYW5kLUNTUlZJUyIgbmFtZT0iQ1NSVklTIj4pLgorICAgICAgPHRhZz5Qb2ludCA1PC90YWc+CisgICAgICAgIEN1cnNldXIgZW4gcGF26SAodm9pciBsYSBjb21tYW5kZQorCTxyZWYgaWQ9ImNvbW1hbmQtQ1NSU0laRSIgbmFtZT0iQ1NSU0laRSI+KS4KKyAgICAgIDx0YWc+UG9pbnQgNjwvdGFnPgorICAgICAgICBDbGlnbm90ZW1lbnQgZHUgY3Vyc2V1ciAodm9pciBsYSBjb21tYW5kZQorCTxyZWYgaWQ9ImNvbW1hbmQtQ1NSQkxJTksiIG5hbWU9IkNTUkJMSU5LIj4pLgorICAgICAgPHRhZz5Qb2ludCA3PC90YWc+CisgICAgICAgIFBvdXJzdWl0ZSBkdSBjdXJzZXVyICh2b2lyIGxhIGNvbW1hbmRlCisJPHJlZiBpZD0iY29tbWFuZC1DU1JUUksiIG5hbWU9IkNTUlRSSyI+KS4KKyAgICAgIDx0YWc+UG9pbnQgODwvdGFnPgorICAgICAgICBHbGlzc2VtZW50IGRlIGxhIHBsYWdlICh2b2lyIGxhIGNvbW1hbmRlCisJPHJlZiBpZD0iY29tbWFuZC1TTElERVdJTiIgbmFtZT0iU0xJREVXSU4iPikuCisgICAgPC9kZXNjcmlwPgorICA8dGFnPjxlbT52dDwvZW0+PC90YWc+CisgICAgTGUgbnVt6XJvIChlbiBwYXJ0YW50IGRlIDEpIGRlIGxhIGNvbnNvbGUgdmlydHVlbGxlIGFjdHVlbGxlLgorICA8dGFnPjxlbT50PC9lbT48L3RhZz4KKyAgICBMJ+l0YXQgZGUgbGEgZm9uY3Rpb24gZGUgcG91cnN1aXRlIGR1IGN1cnNldXIgKHZvaXIgbGEgY29tbWFuZGUKKyAgICA8cmVmIGlkPSJjb21tYW5kLUNTUlRSSyIgbmFtZT0iQ1NSVFJLIj4gY29tbWFuZCkuCisgICAgPGRlc2NyaXA+CisgICAgICA8dGFnPnZpZGU8L3RhZz5MZSBzdWl2aSBkdSBjdXJzZXVyIGVzdCBpbmFjdGlmLgorICAgICAgPHRhZz48dHQ+dDwvdHQ+PC90YWc+TGUgc3VpdmkgZHUgY3Vyc2V1ciBlc3QgYWN0aWYuCisgICAgPC9kZXNjcmlwPgorICA8dGFnPjxlbT5jPC9lbT48L3RhZz4KKyAgICBMJ+l0YXQgZGVzIGZvbmN0aW9ucyBkZSB2aXNpYmlsaXTpIGR1IGN1cnNldXIgKHZvaXIgbGVzIGNvbW1hbmRlcworICAgIDxyZWYgaWQ9ImNvbW1hbmQtQ1NSVklTIiBuYW1lPSJDU1JWSVMiPiBldAorICAgIDxyZWYgaWQ9ImNvbW1hbmQtQ1NSQkxJTksiIG5hbWU9IkNTUkJMSU5LIj4pLgorICAgIDxkZXNjcmlwPgorICAgICAgPHRhZz52aWRlPC90YWc+TGUgY3Vyc2V1ciBuJ2VzdCBwYXMgdmlzaWJsZSBldCBuZSBjbGlnb250ZXJhIHBhcyBxdWFuZCBpbAorICAgICAgc2VyYSB2aXNpYmxlLgorICAgICAgPHRhZz48dHQ+YjwvdHQ+PC90YWc+TGUgY3Vyc2V1ciBuJ2VzdCBwYXMgdmlzaWJsZSwgZXQgY2xpZ25vdGVyYSBsb3JzcXUnaWwKKyAgICAgIHNlcmEgdmlzaWJsZS4KKyAgICAgIDx0YWc+PHR0PnY8L3R0PjwvdGFnPkxlIGN1cnNldXIgZXN0IHZpc2libGUgZXQgbm9uIGNsaWdub3RhbnQuCisgICAgICA8dGFnPjx0dD5CPC90dD48L3RhZz5MZSBjdXJzZXVyIGVzdCB2aXNpYmxlIGV0IGNsaWdub3RhbnQuCisgICAgPC9kZXNjcmlwPgorICA8dGFnPjxlbT5tPC9lbT48L3RhZz4KKyAgICBMZSBtb2RlIGQnYWZmaWNoYWdlIGFjdHVlbCAodm9pciBsYSBjb21tYW5kZQorICAgIDxyZWYgaWQ9ImNvbW1hbmQtRElTUE1EIiBuYW1lPSJESVNQTUQiPikuCisgICAgPGRlc2NyaXA+CisgICAgICA8dGFnPjx0dD50PC90dD48L3RhZz5MZSBjb250ZW51IGRlIGwn6WNyYW4gKHRleHRlKSBlc3QgYWZmaWNo6S4KKyAgICAgIDx0YWc+PHR0PmE8L3R0PjwvdGFnPkxhIHN1cmJyaWxsYW5jZSDgIGwn6WNyYW4gKGxlcyBhdHRyaWJ1dHMpIGVzdCBhZmZpY2jpZS4KKyAgICA8L2Rlc2NyaXA+CisgIDx0YWc+PGVtPmY8L2VtPjwvdGFnPgorICAgIEwn6XRhdCBkZSBsYSBmb25jdGlvbiBkZSBnZWwgZGUgbCfpY3JhbiAodm9pciBsYSBjb21tYW5kZQorICAgIDxyZWYgaWQ9ImNvbW1hbmQtRlJFRVpFIiBuYW1lPSJGUkVFWkUiPikuCisgICAgPGRlc2NyaXA+CisgICAgICA8dGFnPnZpZGU8L3RhZz5MJ+ljcmFuIG4nZXN0IHBhcyBnZWzpLgorICAgICAgPHRhZz48dHQ+ZjwvdHQ+PC90YWc+TCfpY3JhbiBlc3QgZ2Vs6S4KKyAgICA8L2Rlc2NyaXA+CisgIDx0YWc+PGVtPmQ8L2VtPjwvdGFnPgorICAgIExlIG5vbWJyZSBkZSBwb2ludHMgYnJhaWxsZSB1dGlsaXPpcyBwb3VyIGFmZmljaGVyIGNoYXF1ZSBjYXJhY3TocmUgKHZvaXIKKyAgICBsYSBjb21tYW5kZSA8cmVmIGlkPSJjb21tYW5kLVNJWERPVFMiIG5hbWU9IlNJWERPVFMiPikuCisgICAgPGRlc2NyaXA+CisgICAgICA8dGFnPjx0dD44PC90dD48L3RhZz5MZXMgaHVpdCBwb2ludHMgc29udCB1dGlsaXPpcy4KKyAgICAgIDx0YWc+PHR0PjY8L3R0PjwvdGFnPlNldWxzIDYgcG9pbnRzIHNvbnQgdXRpbGlz6XMuCisgICAgPC9kZXNjcmlwPgorICA8dGFnPjxlbT51PC9lbT48L3RhZz4KKyAgICBMJ+l0YXQgZGVzIGZvbmN0aW9ucyBkJ2FmZmljaGFnZSBkZXMgbGV0dHJlcyBtYWp1c2N1bGVzICh2b2lyIGxhCisgICAgY29tbWFuZGUgPHJlZiBpZD0iY29tbWFuZC1DQVBCTElOSyIgbmFtZT0iQ0FQQkxJTksiPikuCisgICAgPGRlc2NyaXA+CisgICAgICA8dGFnPnZpZGU8L3RhZz5MZXMgbGV0dHJlcyBlbiBtYWp1c2N1bGUgbmUgY2xpZ25vdGVudCBwYXMuCisgICAgICA8dGFnPjx0dD5CPC90dD48L3RhZz5MZXMgbGV0dHJlcyBlbiBtYWp1c2N1bGUgY2xpZ25vdGVudC4KKyAgICA8L2Rlc2NyaXA+Cis8L2Rlc2NyaXA+CisKKzxzZWN0MT5Nb2RlIEFwcHJlbnRpc3NhZ2UgZGVzIGNvbW1hbmRlczxsYWJlbCBpZD0ibGVhcm4iPjxwPgorTGUgTW9kZSBBcHByZW50aXNzYWdlIGRlcyBjb21tYW5kZXMgZXN0IHVuZSBmYedvbiBpbnRlcmFjdGl2ZSBkJ2FwcHJlbmRyZQorY2UgcXVlIGxlcyB0b3VjaGVzIGRlIGwnYWZmaWNoZXVyIGJyYWlsbGUgZm9udC4gVm91cyBwb3V2ZXogeSBhY2PpZGVyIHNvaXQKK3BhciBsYSBjb21tYW5kZSA8cmVmIGlkPSJjb21tYW5kLUxFQVJOIiBuYW1lPSJMRUFSTiI+IG91IHZpYSBsJ3V0aWxpdGFpcmUKKzxyZWYgaWQ9InV0aWxpdHktYnJsdGVzdCIgbmFtZT0iYnJsdGVzdCI+LgorQ2V0dGUgY2FyYWN06XJpc3RpcXVlIG4nZXN0IHBhcyBkaXNwb25pYmxlIHNpIHZvdXMgYXZleiBzcOljaWZp6SBsJ29wdGlvbiBkZQorY29tcGlsYXRpb24gPHJlZiBpZD0iYnVpbGQtbGVhcm4tbW9kZSIgbmFtZT0iLS1kaXNhYmxlLWxlYXJuLW1vZGUiPi4KKworTG9yc3F1ZSB2b3VzIOp0ZXMgZW50cukgZGFucyBjZSBtb2RlLCBsZSBtZXNzYWdlIDx0dD5Nb2RlIGFwcHJlbnRpc3NhZ2UgZGVzIGNvbW1hbmRlczwvdHQ+Citlc3Qg6WNyaXQgc3VyIGwnYWZmaWNoZXVyIGJyYWlsbGUuCitBbG9ycywgZOhzIHF1ZSB2b3VzIHByZXNzZXogdW5lIHRvdWNoZSAob3UgdW5lIGNvbWJpbmFpc29uIGRlIHRvdWNoZXMpIGRlCitsJ2FmZmljaGV1ciwgdW4gY291cnQgbWVzc2FnZSBk6WNyaXZhbnQgc2EgZm9uY3Rpb24gZGFucyBCUkxUVFkgZXN0IOljcml0LgorVm91cyBxdWl0dGVyZXogaW1t6WRpYXRlbWVudCBjZSBtb2RlIHNpIHZvdXMgcHJlc3NleiBsYSB0b3VjaGUgKG91IGxhCitjb21iaW5haXNvbiBkZSB0b3VjaGVzKSBwb3VyIGxhIGNvbW1hbmRlIDxyZWYgaWQ9ImNvbW1hbmQtTEVBUk4iIG5hbWU9IkxFQVJOIj4uCitWb3VzIHNvcnRleiBhdXRvbWF0aXF1ZW1lbnQsIGV0IGxlIG1lc3NhZ2UgPHR0PmRvbmU8L3R0PiBzJ2luc2NyaXQsIHNpIHVuCitkZSB0ZW1wcyBkZSAxMCBzZWNvbmRlcyBzJ+ljb3VsZSBzYW5zIHF1J3VuZSB0b3VjaGUgZGUgbCdhZmZpY2hldXIgbmUgc29pdAorcHJlc3PpZS4KK1JlbWFycXVleiBxdWUgY2VydGFpbnMgYWZmaWNoZXVycyBuZSBzZSBzaWduYWxlbnQgcGFzIGF1IHBpbG90ZSBldC9vdSBjZXJ0YWlucworYWZmaWNoZXVycyBuZSBzZSBzaWduYWxlbnQgcGFzIOAgQlJMVFRZIGp1c3F1J+AgY2UgcXVlIHRvdXRlcyBsZXMgdG91Y2hlcyBzb2llbnQKK2ZhaXRlcy4KKworU2kgdW4gbWVzc2FnZSBlc3QgcGx1cyBsb25nIHF1ZSBsYSBsYXJnZXVyIGRlIGwnYWZmaWNoZXVyIGJyYWlsbGUsIGlsIGVzdAorYWZmaWNo6SBlbiBzZWdtZW50cy4gTGEgbG9uZ3VldXIgZCd1biBzZWdtZW50IGVzdCBkZSB1biBzb3VzdHJhaXQg4AorbGEgbGFyZ2V1ciBkZSBsJ2FmZmljaGV1ciBicmFpbGxsZSwgYXZlYyBsZSBjYXJhY3TocmUgbGUgcGx1cyDgIGRyb2l0ZSBzdXIKK2wnYWZmaWNoZXVyIHF1aSBhZmZpY2hlIGxlIHNpZ25lIG1vaW5zLgorQ2hhcXVlIHNlZ21lbnQgcmVzdGUgc3VyIGwnYWZmaWNoZXVyLCBzb2l0IHBlbmRhbnQgcXVlbHF1ZXMgc2Vjb25kZXMgKHZvaXIKK2wnb3B0aW9uIDxyZWYgaWQ9Im9wdGlvbnMtbWVzc2FnZS10aW1lb3V0IiBuYW1lPSItTSI+IGVuIGxpZ25lIGRlIGNvbW1hbmRlKQorc29pdCBqdXNxdSfgIGNlIHF1J3VuZSB0b3VjaGUgZGUgbCdhZmZpY2hldXIgc29pdCBwcmVzc+llLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRzL01hbnVhbC1CUkxUVFkvRnJlbmNoL0ludHJvZHVjdGlvbi5zZ21sIGIvRG9jdW1lbnRzL01hbnVhbC1CUkxUVFkvRnJlbmNoL0ludHJvZHVjdGlvbi5zZ21sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMyYTRiNDkKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudHMvTWFudWFsLUJSTFRUWS9GcmVuY2gvSW50cm9kdWN0aW9uLnNnbWwKQEAgLTAsMCArMSwxNjYgQEAKKzxzZWN0PkludHJvZHVjdGlvbjxwPgorQlJMVFRZIGRvbm5lIOAgdW4gdXRpbGlzYXRldXIgYnJhaWxsaXN0ZSB1biBhY2PocyBhdXggY29uc29sZXMgdGV4dGUKK2QndW4gc3lzdOhtZSBMaW51eC9Vbml4LiBJbCBleOljdXRlIHVuIHByb2Nlc3N1cyBlbiBhcnJp6HJlLXBsYW4KKyhk6W1vbikgcXVpIGZhaXQgZm9uY3Rpb25uZXIgbCdhZmZpY2hldXIgYnJhaWxsZSwgZXQKK3BldXQg6nRyZSBk6W1hcnLpIHRy6HMgdPR0IGRhbnMgbGEgc+lxdWVuY2UgZGUgZOltYXJyYWdlIGR1CitzeXN06G1lLiBBaW5zaSwgaWwgcGVybWV0IOAgdW4gdXRpbGlzYXRldXIgYnJhaWxsaXN0ZSwgZGUgcHJlbmRyZSBlbiBtYWluCitmYWNpbGVtZW50IGV0IGRlIGZh529uIGluZOlwZW5kYW50ZSBkZXMgYXNwZWN0cyBkZSBsJ2FkbWluaXN0cmF0aW9uIGR1CitzeXN06G1lLCBjb21tZSBsJ2VudHLpZSBlbiBtb2RlIG1vbm8tdXRpbGlzYXRldXIsIGxhIHJlc3RhdXJhdGlvbiBkZSBzeXN06G1lcyBkZSBmaWNoaWVycywgZXQKK2wnYW5hbHlzZSBkZSBwcm9ibOhtZXMgZGUgZOltYXJyYWdlLiBJbCBmYWNpbGl0ZSBhdXNzaSBiZWF1Y291cCBkZXMKK29w6XJhdGlvbnMgZGUgYmFzZXMgdGVsbGVzIHF1ZSBsJ2lkZW50aWZpY2F0aW9uLgorCitCUkxUVFkgcmVwcm9kdWl0IHVuZSBwb3J0aW9uIHJlY3Rhbmd1bGFpcmUgZGUgbCfpY3JhbiAoYXBwZWzpZQorZGFucyBjZSBkb2N1bWVudCBgbGEgZmVu6nRyZScpIHNvdXMgZm9ybWUgZGUgdGV4dGUgYnJhaWxsZSBzdXIgbCdhZmZpY2hldXIuCitWb3VzIHBvdXZleiB1dGlsaXNlciBkZXMgY29udHL0bGVzIGRlIGwnYWZmaWNoYWdlIHBvdXIgZOlwbGFjZXIgbGEgZmVu6nRyZSBzdXIKK2wn6WNyYW4sIHBvdXIgYWN0aXZlciBldCBk6XNhY3RpdmVyIGRlcyBvcHRpb25zIGRlIHJldnVlCit2YXJp6WVzLCBldCBwb3VyIGV46WN1dGVyIGRlcyBmb25jdGlvbnMgc3DpY2lhbGVzLgorCis8c2VjdDE+UulzdW3pIGRlcyBwb3NzaWJpbGl06XM8cD4KK0JSTFRUWSBkb25uZSBsZXMgcG9zc2liaWxpdOlzIHN1aXZhbnRlczoKKzxpdGVtaXplPgorICA8aXRlbT4KKyAgICBUb3RhbGUgbWlzZSBlbiBvZXV2cmUgZGVzIGZhY2lsaXTpcyBkZSByZXZ1ZSBkJ+ljcmFuIGhhYml0dWVsbGVzLgorICA8aXRlbT4KKyAgICBDaG9peCBkJ3VuIGN1cnNldXIgZW4gZm9ybWUgZGUgPHR0PmJsb2M8L3R0PiwgPHR0PnNvdWxpZ27pPC90dD4sIG91Cis8dHQ+YXVjdW48L3R0Pi4KKyAgPGl0ZW0+CisgICAgPHR0PlNvdWxpZ25lbWVudDwvdHQ+IHBvc3NpYmxlIHBvdXIgaW5kaXF1ZXIgdW4gdGV4dGUgcGFydGljdWxp6HJlbWVudAorICAgIGVuIHN1cmJyaWxsYW5jZS4KKyAgPGl0ZW0+CisgICAgVXRpbGlzYXRpb24gcG9zc2libGUgZHUgPHR0PmNsaWdub3RlbWVudDwvdHQ+IChmculxdWVuY2VzIHLpZ2xhYmxlcworICAgIGluZGl2aWR1ZWxsZW1lbnQpIHBvdXIgbGUgY3Vyc2V1ciwgbGUgc291bGlnbmVtZW50IGRlcyBjYXJhY3TocmVzIGVuCisgICAgc3VyYnJpbGxhbmNlLCBldC9vdSBsZXMgbGV0dHJlcyBlbiBtYWp1c2N1bGUuCisgIDxpdGVtPgorICAgIEdlbCBkZSBsJ+ljcmFuIHBvdXIgZW4gZmFpcmUgdW5lIHJlbGVjdHVyZSBwbHVzIGxlbnRlLgorICA8aXRlbT4KKyAgICBSb3V0aW5lLWN1cnNldXIgaW50ZWxsaWdlbnRlLCBwZXJtZXR0YW50IHVuIHJhcGlkZQorICAgIHJhcGF0cmltZW50IGR1IGN1cnNldXIgZGFucyBsZXMg6WRpdGV1cnMgZGUgdGV4dGUsIGxlcyBuYXZpZ2F0ZXVycworICAgIHdlYiwgZXRjLiwgc2FucyBib3VnZXIgbGVzIG1haW5zIGRlIGwnYWZmaWNoZXVyIGJyYWlsbGUuCisgIDxpdGVtPgorICAgIFVuZSBmb25jdGlvbiBjb3BpZXItY29sbGVyIChsaW7pYWlyZSBvdSByZWN0YW5ndWxhaXJlKSBxdWkgZXN0CisgICAgcGFydGljdWxp6HJlbWVudCB1dGlsZSBwb3VyIGxhIGNvcGllIGRlIGxvbmdzIG5vbXMgZGUgZmljaGllciwgZGUKKyAgICB0ZXh0ZSBlbnRyZSBkZXMgdGVybWluYXV4IHZpcnR1ZWxzLCBsYSBzYWlzaWUgZGUgY29tbWFuZGVzCisgICAgY29tcGxpcXXpZXMsIGV0Yy4KKyAgPGl0ZW0+CisgICAgR2VzdGlvbiBkZXMgdGFibGVzIGRlIGJyYWlsbGUgYWJy6WfpIChmb3VybmllIGVuIGFuZ2xhaXMgZXQgZW4gZnJhbudhaXMpLgorICA8aXRlbT4KKyAgICBTdXBwb3J0IHBvdXIgZGUgbXVsdGlwbGVzIGNvZGVzIGJyYWlsbGUuCisgIDxpdGVtPgorICAgIFBvc3NpYmlsaXTpIGQnaWRlbnRpZmllciB1biBjYXJhY3TocmUgaW5jb25udS4KKyAgPGl0ZW0+CisgICAgUG9zc2liaWxpdOkgZCdpbnNwZWN0ZXIgdW4gY2FyYWN06HJlIGVuIHN1cmJyaWxsYW5jZS4KKyAgPGl0ZW0+CisgICAgVW5lIGZhY2lsaXTpIGRhbnMgbCdhaWRlIGVuIGxpZ25lIHBvdXIgbGVzIGNvbW1hbmRlcyBkZQorICAgIGwnYWZmaWNoZXVyIGJyYWlsbGUuCisgIDxpdGVtPgorICAgIFVuIG1lbnUgcHLpZulyZW5jZXMuCisgIDxpdGVtPgorICAgIFN1cHBvcnQgZGUgc3ludGjoc2VzIGJhc2lxdWVzLgorICA8aXRlbT4KKyAgICBVbmUgY29uY2VwdGlvbiBlbiBtb2R1bGVzIHBlcm1ldHRhbnQgZCdham91dGVyIHJlbGF0aXZlbWVudAorICAgIGZhY2lsZW1lbnQgZCdhdXRyZXMgYWZmaWNoZXVycyBicmFpbGxlIGV0IGQnYXV0cmVzIHN5bnRo6HNlcworICAgIHZvY2FsZXMuCisgIDxpdGVtPgorICAgIFVuZSBJbnRlcmZhY2UgZGUgcHJvZ3JhbW1hdGlvbiBkZSBsJ0FwcGxpY2F0aW9uLgorPC9pdGVtaXplPgorCis8c2VjdDE+U3lzdOhtZSByZXF1aXM8cD4KK0FjdHVlbGxlbWVudCwgQlJMVFRZIGZvbmN0aW9ubmUgc3VyIExpbnV4LCBTb2xhcmlzLCBPcGVuQlNELCBGcmVlQlNELAorTmV0QlNEIGV0IFdpbmRvd3MuIExlcyBwb3J0YWdlcyBzdXIgZCdhdXRyZXMgc3lzdOhtZXMgZCdleHBsb2l0YXRpb24KK2Tpcml26XMgZGUgVW5peCBuZSBzb250IHBhcyBlbmNvcmUgcHLpdnVlcywgbm91cyBhcHBy6WNpZXJpb25zIHZyYWltZW50Cit0b3V0IGludOly6nQgcG91ciBkZSB0ZWxzIHByb2pldHMuCisKKzxkZXNjcmlwPgorICA8dGFnPkxpbnV4PC90YWc+CisgICAgQ2UgbG9naWNpZWwgYSDpdOkgdGVzdOkgc3VyIHVuIGdyYW5kIG5vbWJyZSBkZSBzeXN06G1lcyBMaW51eDoKKyAgICA8aXRlbWl6ZT4KKyAgICAgIDxpdGVtPgorICAgICAgICBPcmRpbmF0ZXVycyBkZSBidXJlYXUsIHBvcnRhYmxlcywgZXQgcXVlbHF1ZXMgUERBcy4KKyAgICAgIDxpdGVtPgorICAgICAgICBEZXMgcHJvY2Vzc2V1cnMgMzg2U1gyMCDgIFBlbnRpdW0uCisgICAgICA8aXRlbT4KKyAgICAgICAgVW5lIGxhcmdlIOljaGVsbGUgZGUgY2FwYWNpdOkgZGUgbeltb2lyZS4KKyAgICAgIDxpdGVtPgorICAgICAgICBQbHVzaWV1cnMgZGlzdHJpYnV0aW9ucyBkb250IERlYmlhbiwgUmVkIEhhdCwgU2xhY2t3YXJlIGV0IFN1U0UuCisgICAgICA8aXRlbT4KKyAgICAgICAgTGEgcGx1cGFydCBkZXMgbm95YXV4LCBkb250IGxlcyAxLjIuMTMsIDIuMCwgMi4yLCBldCAyLjQuCisgICAgPC9pdGVtaXplPgorICA8dGFnPlNvbGFyaXM8L3RhZz4KKyAgICBDZSBsb2dpY2llbCBhIOl06SB0ZXN06SBzdXIgbGVzIHN5c3TobWVzIFNvbGFyaXMgc3VpdmFudHM6CisgICAgPGl0ZW1pemU+CisgICAgICA8aXRlbT4KKyAgICAgICAgTCdhcmNoaXRlY3R1cmUgU3BhcmMgKHZlcnNpb25zIDcsIDgsIGV0IDkpLgorICAgICAgPGl0ZW0+CisgICAgICAgIEwnYXJjaGl0ZWN0dXJlIEludGVsICh2ZXJzaW9uIDkpLgorICAgIDwvaXRlbWl6ZT4KKyAgPHRhZz5PcGVuQlNEPC90YWc+CisgICAgQ2UgbG9naWNpZWwgYSDpdOkgdGVzdOkgc3VyIGxlcyBzeXN06G1lcyBPcGVuQlNEIHN1aXZhbnRzOgorICAgIDxpdGVtaXplPgorICAgICAgPGl0ZW0+CisgICAgICAgIEwnYXJjaGl0ZWN0dXJlIEludGVsICh2ZXJzaW9uIDMuNCkuCisgICAgPC9pdGVtaXplPgorICA8dGFnPkZyZWVCU0Q8L3RhZz4KKyAgICBDZSBsb2dpY2llbCBhIOl06SB0ZXN06SBzdXIgbGVzIHN5c3TobWVzIEZyZWVCU0Qgc3VpdmFudHM6CisgICAgPGl0ZW1pemU+CisgICAgICA8aXRlbT4KKyAgICAgICAgTCdhcmNoaXRlY3R1cmUgSW50ZWwgKHZlcnNpb24gNS4xKS4KKyAgICA8L2l0ZW1pemU+CisgIDx0YWc+TmV0QlNEPC90YWc+CisgICAgQ2UgbG9naWNpZWwgYSDpdOkgdGVzdOkgc3VyIGxlcyBzeXN06G1lcyBOZXRCU0Qgc3VpdmFudHM6CisgICAgPGl0ZW1pemU+CisgICAgICA8aXRlbT4KKyAgICAgICAgTCdhcmNoaXRlY3R1cmUgSW50ZWwgKHZlcnNpb24gMS42KS4KKyAgICA8L2l0ZW1pemU+CisgIDx0YWc+V2luZG93czwvdGFnPgorICAgIENlIGxvZ2ljaWVsIGEg6XTpIHRlc3TpIHN1ciBXaW5kb3dzIDk1LCA5OCBldCBYUC4KKworPC9kZXNjcmlwPgorCitTdXIgTGludXgsIEJSTFRUWSBwZXV0IGluc3BlY3RlciBsZSBjb250ZW51IGRlIGwn6WNyYW4gZGUgZmHnb24KK3RvdGFsZW1lbnQgaW5k6XBlbmRhbnRlIGRlIGwndXRpbGlzYXRldXIuIENlbGEgZXN0IHBvc3NpYmxlCitncuJjZSDgIGwndXRpbGlzYXRpb24gZCd1biBw6XJpcGjpcmlxdWUgc3DpY2lhbCBvZmZyYW50IHVuIGFjY+hzCitmYWNpbGUgYXV4IGNvbnRlbnVzIGRlIGxhIGNvbnNvbGUgdmlydHVlbGxlIGNvdXJhbnRlLiBDZSBw6XJpcGjpcmlxdWUKK2Eg6XTpIGFqb3V06SDgIGxhIHZlcnNpb24gMS4xLjkyIGR1IG5veWF1IExpbnV4LCBldCBzJ2FwcGVsbGUKK25vcm1hbGVtZW50IDx0dD4vZGV2L3Zjc2E8L3R0PiBvdSA8dHQ+L2Rldi92Y3NhMDwvdHQ+IChzdXIgbGVzIHN5c3TobWVzCithdmVjIDx0dD5kZXZmczwvdHQ+LCBpbCBzJ2FwcGVsbGUgPHR0Pi9kZXYvdmNjL2E8L3R0PikuIEMnZXN0IHBvdXJxdW9pIGxlIG5veWF1CitMaW51eCAxLjEuOTIgb3Ugc3Vw6XJpZXVyIGVzdCBu6WNlc3NhaXJlIHNpIEJSTFRUWSBlc3QgdXRpbGlz6SBkZQorY2V0dGUgZmHnb24uIENldHRlIHBvc3NpYmlsaXTpOgorPGl0ZW1pemU+CisgIDxpdGVtPgorICAgIFBlcm1ldCDgIEJSTFRUWSBkJ+p0cmUgZOltYXJy6SB0cuhzIHT0dCBkYW5zIGxhIHPpcXVlbmNlIGRlCisgICAgZOltYXJyYWdlIGR1IHN5c3TobWUuCisgIDxpdGVtPgorICAgIEFjdGl2ZSBsJ2FmZmljaGV1ciBicmFpbGxlIHBvdXIgcXUnaWwgc29pdCB0b3RhbGVtZW50IG9w6XJhdGlvbm5lbAorICAgIOAgbCdpbnZpdGUgZGUgbG9nZ2luZy4KKyAgPGl0ZW0+CisgICAgRmFjaWxpdGUgZm9ydGVtZW50IHBvdXIgdW4gdXRpbGlzYXRldXIgYnJhaWxsaXN0ZQorICAgIGRlcyB04mNoZXMgZCdhZG1pbmlzdHJhdGlvbiBsb3JzIGR1IGTpbWFycmFnZS4KKzwvaXRlbWl6ZT4KKworVW4gY29ycmVjdGlmIHBvdXIgbGUgcHJvZ3JhbW1lIDx0dD5kJ+ljcmFuPC90dD4gZXN0IGZvdXJuaSAodm9pciBsZSBzb3VzLXLpcGVydG9pcmUKKzx0dD5QYXRjaGVzPC90dD4pLiBJbCBwZXJtZXQg4CBCUkxUVFkgZCdhY2PpZGVyIOAgbCdpbWFnZSBkJ3VuIOljcmFuCit2aWEgdW5lIG3pbW9pcmUgcGFydGFn6WUsIGV0LCBhaW5zaSwgcGVybWV0IOAgQlJMVFRZIGQn6nRyZSB1dGlsaXPpCitiZWF1Y291cCBwbHVzIGVmZmljYWNlbWVudCBzdXIgZGVzIHBsYXRlZm9ybWVzIHF1aSBuJ29udCBwYXMgbGV1cnMKK3Byb3ByZXMgZmFjaWxpdOkgZCdpbnNwZWN0aW9uIGR1IGNvbnRlbnUgZGUgbGV1ciDpY3Jhbi4gTGEgZmFpYmxlc3NlCitwcmluY2lwYWxlIGRlIGNldHRlIGFwcHJvY2hlIGRlIGwn6WNyYW4gZXN0IHF1ZSBCUkxUVFkgbmUgcGV1dCDqdHJlCitk6W1hcnLpIHRhbnQgcXVlIGwndXRpbGlzYXRldXIgbidlc3QgcGFzIGNvbm5lY3TpLgorCitCUkxUVFkgbmUgZm9uY3Rpb25uZSBxdSdhdmVjIGRlcyBjb25zb2xlcyBldCBkZXMgYXBwbGljYXRpb25zIGJhc+llcworc3VyIGR1IHRleHRlLiBJbCBwZXV0IOp0cmUgdXRpbGlz6SBhdmVjIGxlcyBhcHBsaWNhdGlvbnMgYmFz6WVzIHN1cgorPHR0PmN1cnNlczwvdHQ+LCBtYWlzIHBhcyBhdmVjIHVuZSBhcHBsaWNhdGlvbiB1dGlsaXNhbnQgZGVzIGNhcmFjdOlyaXN0aXF1ZXMKK3Nw6WNpYWxlcyBWR0Egb3UgcXVpIHJlcXVp6HJlbnQgdW5lIGNvbnNvbGUgZ3JhcGhpcXVlIChjb21tZSBsZSBzeXN06G1lIFgKK1dpbmRvdykuCisKK0JpZW4gZW50ZW5kdSwgdm91cyBkZXZleiBhdXNzaSBwb3Nz6WRlciB1biBhZmZpY2hldXIgYnJhaWxsZSBzdXBwb3J06QorKHZvaXIgbGEgc2VjdGlvbiA8cmVmIGlkPSJkaXNwbGF5cyIgbmFtZT0iQWZmaWNoZXVycyBicmFpbGxlCitzdXBwb3J06XMiPiBwb3VyIGxhIGxpc3RlIGNvbXBs6HRlKS4gTm91cyBlc3Dpcm9ucyBxdWUgZGVzIGFmZmljaGV1cnMKK3N1cHBs6W1lbnRhaXJlcyBzZXJvbnQgc3VwcG9ydOlzIGRhbnMgbGUgZnV0dXIsIGRvbmMgc2kgdm91cyBkaXNwb3NleiBkZSBxdWVscXVlcwordmFndWVzIGluZm9ybWF0aW9ucyBkZSBwcm9ncmFtbWF0aW9uIHRlY2huaXF1ZXMgcG91ciB1biBwaWxvdGUgcXVlCit2b3VzIGFpbWVyaWV6IHZvaXIgc3VwcG9ydOksIGZhaXRlcy1sZSBub3VzIHNhdm9pciAodm9pciBsYSBzZWN0aW9uCis8cmVmIGlkPSJjb250YWN0IiBuYW1lPSJDb250YWN0cyI+KS4KKworRW5maW4sIHZvdXMgYXZleiBiZXNvaW4gZCdvdXRpbHMgcG91ciBjb21waWxlciBsJ2V46WN1dGFibGUgZGVwdWlzIGxlCitzb3VyY2UsIDx0dD5tYWtlPC90dD4sIGxlcyBjb21waWxhdGV1cnMgPHR0PkM8L3R0PiBldCA8dHQ+QysrPC90dD4sIDx0dD55YWNjPC90dD4sCis8dHQ+YXdrPC90dD4sIGV0Yy4gTGVzIG91dGlscyBkZSBk6XZlbG9wcGVtZW50IGZvdXJuaXMgYXZlYyBsZXMKK2Rpc3RyaWJ1dGlvbnMgVW5peCBzdGFuZGFyZHMgZGV2cmFpZW50IHN1ZmZpcmUuIFNpIHZvdXMgcmVuY29udHJleiBkZXMKK3Byb2Js6G1lcywgY29udGFjdGV6LW5vdXMgZXQgbm91cyB2b3VzIGNvbXBpbGVyb25zIHVuIGV46WN1dGFibGUuCmRpZmYgLS1naXQgYS9Eb2N1bWVudHMvTWFudWFsLUJSTFRUWS9GcmVuY2gvTWFrZWZpbGUuaW4gYi9Eb2N1bWVudHMvTWFudWFsLUJSTFRUWS9GcmVuY2gvTWFrZWZpbGUuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmE3N2E1NgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50cy9NYW51YWwtQlJMVFRZL0ZyZW5jaC9NYWtlZmlsZS5pbgpAQCAtMCwwICsxLDIxIEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisjICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorIworIyBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisjCisjIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisjCisjIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyMgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorIyBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyMKKyMgV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworIworIyBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworRE9DVU1FTlRfTkFNRSA9IEJSTFRUWQorRE9DVU1FTlRfTEFOR1VBR0UgPSBmcmVuY2gKK2luY2x1ZGUgJChTUkNfVE9QKWRvY3VtZW50Lm1rCmRpZmYgLS1naXQgYS9Eb2N1bWVudHMvTWFudWFsLUJSTFRUWS9GcmVuY2gvTWlkaS5zZ21sIGIvRG9jdW1lbnRzL01hbnVhbC1CUkxUVFkvRnJlbmNoL01pZGkuc2dtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNzI2ZWVjCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRzL01hbnVhbC1CUkxUVFkvRnJlbmNoL01pZGkuc2dtbApAQCAtMCwwICsxLDE0OSBAQAorPHNlY3Q+VGFibGUgZCdpbnN0cnVtZW50cyBNSURJPGxhYmVsIGlkPSJtaWRpIj48cD4KKzx0YWJsZSBsb2M9ImgiPgorICA8dGFidWxhciBjYT0ibHJsIj4KKyAgICA8aGxpbmU+UGlhbm8KKyAgICAgIHwwfFBpYW5vIOAgcXVldWUgYWNjb3VzdGlxdWVACisgICAgICB8MXxQaWFubyBhY2NvdXN0aXF1ZSBicmlsbGFudEAKKyAgICAgIHwyfFBpYW5vIOAgcXVldWUg6WxlY3RyaXF1ZUAKKyAgICAgIHwzfFBpYW5vIGJhc3RyaW5ndWVACisgICAgICB8NHxQaWFubyAxQAorICAgICAgfDV8UGlhbm8g6WxlY3RyaXF1ZSAyQAorICAgICAgfDZ8Y2xhdmVjaW5ACisgICAgICB8N3xDbGF2aWVyc0AKKyAgICA8aGxpbmU+UGVyY3Vzc2lvbnMgY2hyb21hdGlxdWVzCisgICAgICB8OHxD6Wxlc3RhQAorICAgICAgfDl8R2xvY2tlbnNwaWVsQAorICAgICAgfDEwfEJv7nRlIOAgcnl0aG1lQAorICAgICAgfDExfFZpYnJhcGhvbmVACisgICAgICB8MTJ8TWFyaW1iYUAKKyAgICAgIHwxM3xYeWxvcGhvbmVACisgICAgICB8MTR8VHVidWxhciBCZWxsc0AKKyAgICAgIHwxNXxEdWxjaW1lckAKKyAgICA8aGxpbmU+T3JndWUKKyAgICAgIHwxNnxPcmd1ZSBkZSBiYXJiYXJpZUAKKyAgICAgIHwxN3xPcmd1ZSBwZXJjdXNzaXZlQAorICAgICAgfDE4fE9yZ3VlIHJvY2tACisgICAgICB8MTl8T3JndWUgZCfpZ2xpc2VACisgICAgICB8MjB8T3JndWUgZGUgaGFuY2hlQAorICAgICAgfDIxfEFjY29yZOlvbkAKKyAgICAgIHwyMnxIYXJtb25pY2FACisgICAgICB8MjN8QWNjb3Jk6W9uIGRlIHRhbmdvQAorICAgIDxobGluZT5HdWl0YXJlCisgICAgICB8MjR8R3VpdGFyZSBhY2NvdXN0aXF1ZSBOeWxvbkAKKyAgICAgIHwyNXxHdWl0YXJlIGFjY291c3RpcXVlIG3pdGFsQAorICAgICAgfDI2fEd1aXRhcmUg6WxlY3RyaXF1ZSBKYXp6QAorICAgICAgfDI3fEd1aXRhcmUg6WxlY3RyaXF1ZSBwcm9wcmVACisgICAgICB8Mjh8R3VpdGFyZSDpbGVjdHJpcXVlIGJvdWNo6WVACisgICAgICB8Mjl8R3VpdGFyZSBvdmVyZHJpdmVuQAorICAgICAgfDMwfERpc3RvcnRpb24gR3VpdGFyQAorICAgICAgfDMxfEhhcm1vbmlxdWVzIGRlIGd1aXRhcmVACisgICAgPGhsaW5lPkJhc3NlCisgICAgICB8MzJ8QmFzc2UgYWNjb3VzdGlxdWVACisgICAgICB8MzN8QmFzc2Ug6WxlY3RyaXF1ZSBhdSBkb2lndEAKKyAgICAgIHwzNHxQaWNrIEVsZWN0cmljIEJhc3NACisgICAgICB8MzV8RnJldGxlc3MgQmFzc0AKKyAgICAgIHwzNnxTbGFwIEJhc3MgMUAKKyAgICAgIHwzN3xTbGFwIEJhc3MgMkAKKyAgICAgIHwzOHxTeW50aCBCYXNzIDFACisgICAgICB8Mzl8U3ludGggQmFzcyAyQAorICAgIDxobGluZT5QaXN0b25zCisgICAgICB8NDB8VmlvbG9uQAorICAgICAgfDQxfEFsdG9ACisgICAgICB8NDJ8VmlvbG9uY2VsbGVACisgICAgICB8NDN8Q29udHJlYmFzc2VACisgICAgICB8NDR8UGlzdG9ucyBUcmVtb2xvQAorICAgICAgfDQ1fFBpc3N0b25zIHBpenppY2F0b0AKKyAgICAgIHw0NnxIYXJwZSBPcmNoZXN0cmFsZUAKKyAgICAgIHw0N3x0aW1iYWxlc0AKKyAgICA8aGxpbmU+RW5zZW1ibGUKKyAgICAgIHw0OHxTdHJpbmcgRW5zZW1ibGUgMUAKKyAgICAgIHw0OXxTdHJpbmcgRW5zZW1ibGUgMkAKKyAgICAgIHw1MHxTeW50aCBTdHJpbmdzIDFACisgICAgICB8NTF8U3ludGggU3RyaW5ncyAyQAorICAgICAgfDUyfEFhaHMgY2hvZXVyQAorICAgICAgfDUzfE9vaHMgdm9peEAKKyAgICAgIHw1NHxWb2ljZSBzeW50aOl0aXF1ZUAKKyAgICAgIHw1NXxPcmNoZXN0cmEgSGl0QAorICAgIDxobGluZT5DdWl2cmUKKyAgICAgIHw1NnxUcm9tcGV0dGVACisgICAgICB8NTd8VHJvbWJvbm5lQAorICAgICAgfDU4fFR1YmFACisgICAgICB8NTl8VHJvbXBldHRlIGJvdWNo6WVACisgICAgICB8NjB8Q29yIGZyYW7nYWlzQAorICAgICAgfDYxfFNlY3Rpb24gY3VpdnJlQAorICAgICAgfDYyfEN1aXZyZSBzeW50aOl0aXF1ZSAxQAorICAgICAgfDYzfEN1aXZyZSBzeW50aOl0aXF1ZSAyQAorICAgIDxobGluZT5BbmNoZQorICAgICAgfDY0fFNheG9waG9uZSBzb3ByYW5vQAorICAgICAgfDY1fFNheG9waG9uZSBBbHRvQAorICAgICAgfDY2fFNheG9waG9uZSBUZW5vckAKKyAgICAgIHw2N3xTYXhvcGhvbmUgQmFyaXRvbkAKKyAgICAgIHw2OHxIYXV0Ym9pc0AKKyAgICAgIHw2OXxDb3IgYW5nbGFpc0AKKyAgICAgIHw3MHxCYXNzb25ACisgICAgICB8NzF8Q2xhcmluZXR0ZUAKKyAgICA8aGxpbmU+VHV5YXUKKyAgICAgIHw3MnxQaWNjb2xvQAorICAgICAgfDczfEZs+3RlQAorICAgICAgfDc0fEZs+3RlIOAgYmVjQAorICAgICAgfDc1fEZs+3RlIGRlIHBhbkAKKyAgICAgIHw3NnxCbG93biBCb3R0bGVACisgICAgICB8Nzd8U2hha3VoYWNoaUAKKyAgICAgIHw3OHxTaWZmbGV0QAorICAgICAgfDc5fE9jYXJpbmFACisgICAgPGhsaW5lPlN5bnRoIExlYWQKKyAgICAgIHw4MHxMZWFkIDEgKHNxdWFyZSlACisgICAgICB8ODF8TGVhZCAyIChkZW50IGRlIHNjaWUpQAorICAgICAgfDgyfExlYWQgMyAoY2FsbGlvcGUpQAorICAgICAgfDgzfExlYWQgNCAoY2hpZmYpQAorICAgICAgfDg0fExlYWQgNSAoY2hhcmFuZylACisgICAgICB8ODV8TGVhZCA2ICh2b2l4KUAKKyAgICAgIHw4NnxMZWFkIDcgKGNpbnF1aehtZXMpQAorICAgICAgfDg3fExlYWQgOCAoYmFzc2UgKyBsZWFkKUAKKyAgICA8aGxpbmU+U3ludGggUGFkCisgICAgICB8ODh8UGFkIDEgKG5PdXZlbCDiZ2UpQAorICAgICAgfDg5fFBhZCAyIChjaGF1ZClACisgICAgICB8OTB8UGFkIDMgKHBvbHlzeW50aClACisgICAgICB8OTF8UGFkIDQgKGNob2V1cilACisgICAgICB8OTJ8UGFkIDUgKGJvd2VkKUAKKyAgICAgIHw5M3xQYWQgNiAobel0YWxpcXVlKUAKKyAgICAgIHw5NHxQYWQgNyAoaGFsbylACisgICAgICB8OTV8UGFkIDggKHN3ZWVwKUAKKyAgICA8aGxpbmU+U3ludGggRk0KKyAgICAgIHw5NnxGWCAxIChwbHVpZSlACisgICAgICB8OTd8RlggMiAoc291bmR0cmFjaylACisgICAgICB8OTh8RlggMyAoY3Jpc3RhbClACisgICAgICB8OTl8RlggNCAoYXRtb3NwaOhyZSlACisgICAgICB8MTAwfEZYIDUgKGJyaWdodG5lc3MpQAorICAgICAgfDEwMXxGWCA2IChnb2JsaW5zKUAKKyAgICAgIHwxMDJ8RlggNyAo6WNob3MpQAorICAgICAgfDEwM3xGWCA4IChzY2llbmNlLWZpY3Rpb24pQAorICAgIDxobGluZT5FdGhuaWMKKyAgICAgIHwxMDR8U2l0YXJACisgICAgICB8MTA1fEJhbmpvQAorICAgICAgfDEwNnxTaGFtaXNlbkAKKyAgICAgIHwxMDd8S290b0AKKyAgICAgIHwxMDh8S2FsaW1iYUAKKyAgICAgIHwxMDl8QmFnIFBpcGVACisgICAgICB8MTEwfEZpZGRsZUAKKyAgICAgIHwxMTF8U2hhbmFpQAorICAgIDxobGluZT5QZXJjdXNzaXZlCisgICAgICB8MTEyfFRpbmtsZSBCZWxsQAorICAgICAgfDExM3xBZ29nb0AKKyAgICAgIHwxMTR8U3RlZWwgRHJ1bUAKKyAgICAgIHwxMTV8V29vZGVuIEJsb2NrQAorICAgICAgfDExNnxUYWlrbyBEcnVtQAorICAgICAgfDExN3xNZWxvZGljIFRvbUAKKyAgICAgIHwxMTh8U3ludGggRHJ1bUAKKyAgICAgIHwxMTl8UmV2ZXJzZSBDeW1iYWxACisgICAgPGhsaW5lPkVmZmV0cyBzb25vcmVzCisgICAgICB8MTIwfEJydWl0IGRlIHRvdWNoZSBkZSBndWl0YXJlQAorICAgICAgfDEyMXxCcnVpdCBkZSBzb3VmZmxlQAorICAgICAgfDEyMnxCb3JkIGRlIG1lckAKKyAgICAgIHwxMjN8QnJ1aXQgZCdvaXNlYXVACisgICAgICB8MTI0fFNvbm5lcmllIGRlIHTpbHBob25lQAorICAgICAgfDEyNXxIZWxpY29wdOhyZUAKKyAgICAgIHwxMjZ8QXBwbGF1ZGlzc2VtZW50c0AKKyAgICAgIHwxMjd8R3Vuc2hvdEAKKyAgPC90YWJ1bGFyPgorPC90YWJsZT4KZGlmZiAtLWdpdCBhL0RvY3VtZW50cy9NYW51YWwtQlJMVFRZL0ZyZW5jaC9TY3JlZW4uc2dtbCBiL0RvY3VtZW50cy9NYW51YWwtQlJMVFRZL0ZyZW5jaC9TY3JlZW4uc2dtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MzA3MTE0Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRzL01hbnVhbC1CUkxUVFkvRnJlbmNoL1NjcmVlbi5zZ21sCkBAIC0wLDAgKzEsMjMgQEAKKzxzZWN0PlBpbG90ZXMgZCfpY3JhbiBzdXBwb3J06XMgPGxhYmVsIGlkPSJzY3JlZW4iPjxwPgorQlJMVFRZIHN1cHBvcnRlIGxlcyBwaWxvdGVzIGQn6WNyYW4gc3VpdmFudHM6Cis8ZGVzY3JpcD4KKyAgPHRhZy9hcy8KKyAgICBBVC1TUEkKKyAgPHRhZy9oZC8KKyAgICBDZSBwaWxvdGUgZm91cm5pdCB1biBhY2PocyBkaXJlY3Qg4CBsJ+ljcmFuIGQndW5lIGNvbnNvbGUgSHVyZC4KKyAgICBJbCBuJ2VzdCAgc+lsZWN0aW9ubmFibGUgZXQgcGFyIGTpZmF1dCBvcXVlIHN1ciBsZXMgc3lzdOhtZXMgSHVyZC4KKyAgPHRhZy9seC8KKyAgICBDZSBwaWxvdGUgZm91cm5pdCB1biBhY2PocyBkaXJlY3Qg4CBsJ+ljcmFuIGQndW5lIGNvbnNvbGUgTGludXgKKyAgICBJbCBuJ2VzdCAgc+lsZWN0aW9ubmFibGUgZXQgcGFyIGTpZmF1dCBvcXVlIHN1ciBsZXMgc3lzdOhtZXMgTGludXguCisgIDx0YWcvc2MvCisgICAgQ2UgcGlsb3RlIGZvdXJuaXQgdW4gYWNj6HMgZGlyZWN0IGF1IHByb2dyYW1tZSA8dHQvc2NyZWVuLy4KKyAgICBWb3VzIHBvdXZleiBsZSBz6WxlY3Rpb25uZXIgc3VyIHRvdXMgbGVzIHN5c3TobWVzLCBldCBpbCBsJ2VzdCBwYXIgZOlmYXV0CisgICAgc2kgYXVjdW4gcGlsb3RlIGQn6WNyYW4gZCdvcmlnaW5lIG4nZXN0IGRpc3BvbmlibGUuIFZvdXMgZGV2ZXogYXBwbGlxdWVyIGxlCisgICAgY29ycmVjdGlmIGRlIDx0dC9zY3JlZW4vIHF1ZSBub3VzIGZvdXJuaXNzb25zICh2b2lyIGxlIHNvdXMtculwZXJ0b2lyZQorICAgIDx0dC9QYXRjaGVzLyApLiBEdSBmYWl0IHF1ZSBzY3JlZW4gZG9pdCDqdHJlIGV46WN1dOkgc2ltdWx0YW7pbWVudCwKKyAgICBsJ3V0aWxpc2F0aW9uIGRlIGNlIHBpbG90ZSByZW5kIEJSTFRUWSBvcOlyYXRpb25uZWwgdW5pcXVlbWVudCBhcHLocyBxdWUKKyAgICBsJ3V0aWxpc2F0ZXVyIHMnZXN0IGlkZW50aWZp6S4KKyAgPHRhZy93bi8KKyAgICBDZSBwaWxvdGUgZm91cm5pdCB1biBhY2PocyBkaXJlY3Qg4CBsJ+ljcmFuIGQndW5lIGNvbnNvbGUgV2luZG93cy4KKyAgICBJbCBuJ2VzdCAgc+lsZWN0aW9ubmFibGUgZXQgcGFyIGTpZmF1dCBxdWUgc3VyIGxlcyBzeXN06G1lcyBXaW5kb3dzL0N5Z3dpbi4KKzwvZGVzY3JpcD4KZGlmZiAtLWdpdCBhL0RvY3VtZW50cy9NYW51YWwtQlJMVFRZL0ZyZW5jaC9TeW50YXguc2dtbCBiL0RvY3VtZW50cy9NYW51YWwtQlJMVFRZL0ZyZW5jaC9TeW50YXguc2dtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNmYzNjg2Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRzL01hbnVhbC1CUkxUVFkvRnJlbmNoL1N5bnRheC5zZ21sCkBAIC0wLDAgKzEsMTA5IEBACis8c2VjdD5TeW50YXhlIGRlcyBvcOlyYXRldXJzPHA+CisKKzxzZWN0MT5TcOljaWZpY2F0aW9uIGRlIHBpbG90ZTxsYWJlbCBpZD0ib3BlcmFuZC1kcml2ZXIiPjxwPgorVm91cyBkZXZleiBzcOljaWZpZXIgdW4gcGlsb3RlIHBvdXIgdW4gYWZmaWNoZXVyIGJyYWlsbGUgb3UgdW5lIHN5bnRo6HNlIHZvY2FsZQordmlhIGxlcyBkZXV4IGxldHRyZXMgZGUgc29uCis8cmVmIGlkPSJkcml2ZXJzIiBuYW1lPSJDb2RlIGQnaWRlbnRpZmljYXRpb24gZGUgcGlsb3RlIj4uCisKK1ZvdXMgcG91dmV6IHNw6WNpZmllciB1bmUgbGlzdGUgZGUgcGlsb3RlcyBk6WxpbWl06XMgcGFyIGRlcyB2aXJndWxlcy4gRGFucworY2UgY2FzLCB1bmUgZOl0ZWN0aW9uIGF1dG9tYXRpcXVlIHMnZWZmZWN0dWUgZW4gdXRpbGlzYW50IGNoYXF1ZSBwaWxvdGUgbGlzdOkgZGFucyBsYQorc+lxdWVuY2UuCitJbCBzZSBwZXV0IHF1ZSB2b3VzIHNveWV6IG9ibGln6SBkZSBmYWlyZSBkZXMgZXNzYWlzIGFmaW4gZGUgZOl0ZXJtaW5lciBsJ29yZHJlIGxlIHBsdXMKK2ZpYWJsZSwg6XRhbnQgZG9ubukgcXVlIGNlcnRhaW5zIHBpbG90ZXMgc2UgZOl0ZWN0ZW50IG1pZXV4IGF1dG9tYXRpcXVlbWVudCBxdWUgZCdhdXRyZXMuCisKK1NpIHZvdXMgbmUgc3DpY2lmaWV6IHF1ZSBsZSBtb3QgPHR0PmF1dG88L3R0PiwgbGEgZOl0ZWN0aW9uIGF1dG9tYXRpcXVlIHMnZWZmZWN0dWUKK2VuIG4ndXRpbGlzYW50IHF1ZSBsZXMgcGlsb3RlcyBjb25udXMgcG91ciBsZXVyIGZpYWJpbGl06SBkYW5zIGxlIGJ1dAorcmVjaGVyY2jpLgorCis8c2VjdDE+U3DpY2lmaWNhdGlvbiBkdSBw6XJpcGjpcmlxdWUgYnJhaWxsZTxsYWJlbCBpZD0ib3BlcmFuZC1icmFpbGxlLWRldmljZSI+PHA+CitMYSBmb3JtZSBn6W7pcmFsZSBkZSBsYSBzcOljaWZpY2F0aW9uIGQndW4gcOlyaXBo6XJpcXVlIGJyYWlsbGUgKHZvaXIgbCdvcHRpb24KKzxyZWYgaWQ9Im9wdGlvbnMtYnJhaWxsZS1kZXZpY2UiIG5hbWU9Ii1kIj4gZW4gbGlnbmUgZGUgY29tbWFuZGUsIGxhIGxpZ25lCis8cmVmIGlkPSJjb25maWd1cmUtYnJhaWxsZS1kZXZpY2UiIG5hbWU9ImJyYWlsbGUtZGV2aWNlIj4gZHUgZmljaGllciBkZQorY29uZmlndXJhdGlvbiwgZXQgbCdvcHRpb24gZGUgY29tcGlsYXRpb24KKzxyZWYgaWQ9ImJ1aWxkLWJyYWlsbGUtZGV2aWNlIiBuYW1lPSItLXdpdGgtYnJhaWxsZS1kZXZpY2UiPikgZXN0Cis8dHQ+cXVhbGlmaWNhdGV1cjo8L3R0PjxlbT5kb25u6WU8L2VtPi4KK1BhciBjb21wYXRpYmlsaXTpIGVudHJlIGQnYW5jaWVubmVzIHZlcnNpb25zIGV0IGxlcyBwbHVzIHLpY2VudGVzLCBzaSB2b3VzIG9tbWV0dGV6CitsZSBxdWFsaWZpY2F0ZXVyIGMnZXN0IDx0dD5zZXJpYWw6PC90dD4gcXVpIGVzdCB1dGlsaXPpLgorCitMZXMgdHlwZXMgZGUgcOlyaXBo6XJpcXVlIHN1aXZhbnRzIHNvbnQgc3VwcG9ydOlzOgorPGRlc2NyaXA+CisgIDx0YWc+Qmx1ZXRvb3RoPC90YWc+CisgICAgUG91ciB1biBw6XJpcGjpcmlxdWUgYmx1ZXRvb3RoLCBzcOljaWZpZXogPHR0PmJsdWV0b290aDo8L3R0PjxlbT5hZGRyZXNzZTwvZW0+LgorICAgIEwnYWRyZXNzZSBkb2l0IHNlIGNvbXBvc2VyIGRlIHNpeCBub21icmVzIGhleGFk6WNpbWF1eCDgIGRldXggY2hpZmZyZXMKKyAgICBz6XBhculzIHBhciBkZXMgImRldXgtcG9pbnRzIiwgcGFyIGV4ZW1wbGUgPHR0PjAxOjIzOjQ1OjY3Ojg5OkFCPC90dD4uCisgIDx0YWc+U+lyaWU8L3RhZz4KKyAgICBQb3VyIHVuIHDpcmlwaOlyaXF1ZSBlbiBwb3J0IHPpcmllLCBzcOljaWZpZXoKKyAgICA8dHQ+c2VyaWFsOjwvdHQ+PGVtPi9jaGVtaW4vdmVycy9wZXJpcGhlcmlxdWU8L2VtPi4gTGUgcXVhbGlmaWNhdGV1ciA8dHQ+c2VyaWFsOjwvdHQ+CisgICAgZXN0IGZhY3VsdGF0aWYgKHBvdXIgY29tcGF0aWJpbGl06SkuIFNpIHZvdXMgZG9ubmV6IHVuIGNoZW1pbgorICAgIHJlbGF0aWYsIGlsIGVzdCBk6XRlcm1pbukgcGFyIHJhcHBvcnQg4CA8dHQ+L2RldjwvdHQ+IChsJ2VtcGxhY2VtZW50IGhhYml0dWVsCisgICAgb/kgbGVzIHDpcmlwaOlyaXF1ZXMgc29udCBk6WZpbmlzIHN1ciB1biBzeXN06G1lIGRlIHR5cGUgVW5peCkuCisgICAgTGVzIHNw6WNpZmljYXRpb25zIGRlIHDpcmlwaOlyaXF1ZSBzdWl2YW50ZXMgc2Ugculm6HJlbnQgdG91dGVzIGF1IHBvcnQKKyAgICBz6XJpZSAxIHN1ciBMaW51eDoKKyAgICA8aXRlbWl6ZT4KKyAgICAgIDxpdGVtPjx0dD5zZXJpYWw6L2Rldi90dHlTMDwvdHQ+CisgICAgICA8aXRlbT48dHQ+c2VyaWFsOnR0eVMwPC90dD4KKyAgICAgIDxpdGVtPjx0dD4vZGV2L3R0eVMwPC90dD4KKyAgICAgIDxpdGVtPjx0dD50dHlTMDwvdHQ+CisgICAgPC9pdGVtaXplPgorICA8dGFnPlVTQjwvdGFnPgorICAgIFBvdXIgdW4gcOlyaXBo6XJpcXVlIFVTQiwgc3DpY2lmaWV6IDx0dD51c2I6PC90dD4uIEJSTFRUWSBjaGVyY2hlcmEgbGUgcHJlbWllcgorICAgIHDpcmlwaOlyaXF1ZSBVU0IgcXVpIGVudHJh7m5lIGwndXRpbGlzYXRpb24gZHUgcGlsb3RlIGQnYWZmaWNoZXVyIGJyYWlsbGUuCisgICAgUGFyIGV4ZW1wbGUsIHNpIHZvdXMgYXZleiBwbHVzIGQndW4gYWZmaWNoZXVyIGJyYWlsbGUgVVNCIG7pY2Vzc2l0YW50IGxlCisgICAgbeptZSBwaWxvdGUsIHZvdXMgcG91dmV6IGFmZmluZXIgbGEgc3DpY2lmaWNhdGlvbiBkZSBwaWxvdGUgZW4geSBhZmZlY3RhbnQKKyAgICBsZSBudW3pcm8gZGUgc+lyaWUgZGUgbCdhZmZpY2hldXIsIGNvbW1lIHBhciBleGVtcGxlIDx0dD51c2I6MTIzNDU8L3R0Pi4KKyAgICBOLkIuOiBMYSBwb3NzaWJpbGl06SAiaWRlbnRpZmljYXRpb24gcGFyIGxlIG51belybyBkZSBz6XJpZSIgbmUKKyAgICBmb25jdGlvbm5lIHBhcyBhdmVjIGNlcnRhaW5zIG1vZOhsZXMgY2FyIGNlcnRhaW5zIGZhYnJpY2FudHMsIHNvaXQKKyAgICBuJ2luZGlxdWVudCBwYXMgbGEgZGVzY3JpcHRpb24gZHUgbnVt6XJvIGRlIHPpcmllLCBzb2l0IGwnaW5kaXF1ZW50CisgICAgbWFpcyBwYXMgZW4gdW5lIHZhbGV1ciB1bmlxdWUuCis8L2Rlc2NyaXA+CisKK1ZvdXMgcG91dmV6IHNw6WNpZmllciB1bmUgbGlzdGUgZGUgcGlsb3RlcyBk6WxpbWl06XMgcGFyIGRlcyB2aXJndWxlcy4gRGFucworY2UgY2FzLCB1bmUgZOl0ZWN0aW9uIGF1dG9tYXRpcXVlIHMnZWZmZWN0dWUgZW4gdXRpbGlzYW50IGNoYXF1ZSBwaWxvdGUgbGlzdOkgZGFucyBsYQorc+lxdWVuY2UuIENldHRlIHBvc3NpYmlsaXTpIGVzdCBwYXJ0aWN1bGnocmVtZW50IHV0aWxlIHNpIHZvdXMgYXZleiB1bgorYWZmaWNoZXVyIGJyYWlsbGUg4CBwbHVzaWV1cnMgaW50ZXJmYWNlcywgcGFyIGV4ZW1wbGUgdW4gcG9ydCBz6XJpZSBldCB1biBVU0IuCitEYW5zIGNlIGNhcywgaWwgZXN0IGVuIGfpbulyYWwgcHLpZulyYWJsZSBkZSBsaXN0ZXIgZCdhYm9yZCBsZSBwb3J0IFVTQiwgY29tbWUKK3BhciBleGVtcGxlIDx0dD51c2I6LHNlcmlhbDovZGV2L3R0eVMwPC90dD4sIOl0YW50IGRvbm7pIHF1ZSBsJ2FuY2llbiBhCit0ZW5kYW5jZSDgIOp0cmUgbWlldXggZOl0ZWN06SBxdWUgbGUgcGx1cyBy6WNlbnQuCisKKzxzZWN0MT5TcOljaWZpY2F0aW9uIGQndW4gcOlyaXBo6XJpcXVlIFBDTTxsYWJlbCBpZD0ib3BlcmFuZC1wY20tZGV2aWNlIj48cD4KK0RhbnMgbGEgcGx1cGFydCBkZXMgY2FzLCBsZSBw6XJpcGjpcmlxdmUgUENNIGVzdCBsZSBjaGVtaW4gY29tcGxldCB2ZXJzIHVuCitw6XJpcGjpcmlxdWUgZHUgc3lzdOhtZSBhcHByb3ByaekuIExlcyBleGNlcHRpb25zIHNvbnQ6Cis8ZGVzY3JpcD4KKyAgPHRhZz5BTFNBPC90YWc+CisgICAgTGUgbm9tIGV0IHNlcyBhcmd1bWVudHMgcG91ciBsZSBw6XJpcGjpcmlxdWUgbG9naXF1ZSBvdSBwaHlzaXF1ZSwgY29tbWUKKyAgICA8ZW0+bm9tPC9lbT5bPHR0Pjo8L3R0PjxlbT5hcmd1bWVudDwvZW0+PHR0Piw8L3R0Pi4uLl0uCis8L2Rlc2NyaXA+CisKK0xlIHDpcmlwaOlyaXF1ZSBQQ00gcGFyIGTpZmF1dCBlc3Q6Cis8dGFibGUgbG9jPSJoIj4KKyAgPHRhYnVsYXIgY2E9ImxsIj4KKyAgICBQbGF0ZWZvcm1lfFDpcmlwaOlyaXF1ZUA8aGxpbmU+CisgICAgRnJlZUJTRHwvZGV2L2RzcEAKKyAgICBMaW51eC9BTFNBfGh3OjAsMEAKKyAgICBMaW51eC9PU1N8L2Rldi9kc3BACisgICAgTmV0QlNEfC9kZXYvYXVkaW9ACisgICAgT3BlbkJTRHwvZGV2L2F1ZGlvQAorICAgIFFueHxsZSBw6XJpcGjpcmlxdWUgZGUgc29ydGllIFBDTSBwculm6XLpQAorICAgIFNvbGFyaXN8L2Rldi9hdWRpb0AKKyAgPC90YWJ1bGFyPgorPC90YWJsZT4KKworPHNlY3QxPlNw6WNpZmljYXRpb24gZGUgcOlyaXBo6XJpcXVlIE1JREk8bGFiZWwgaWQ9Im9wZXJhbmQtbWlkaS1kZXZpY2UiPjxwPgorRGFucyBsYSBwbHVwYXJ0IGRlcyBjYXMsIGxlIHDpcmlwaOlyaXF1ZSBNSURJIGVzdCBsZSBjaGVtaW4gY29tcGxldCB2ZXJzIHVuCitw6XJpcGjpcmlxdWUgZHUgc3lzdOhtZSBhcHByb3ByaekuIExlcyBleGNlcHRpb25zIHNvbnQ6Cis8ZGVzY3JpcD4KKyAgPHRhZz5BTFNBPC90YWc+CisgICAgTGUgY2xpZW50IGV0IGxlIHBvcnQgc+lwYXLpcyBwYXIgImRldXgtcG9pbnRzIiB0ZWwgcXVlCisgICAgPGVtPmNsaWVudDwvZW0+PHR0Pjo8L3R0PjxlbT5wb3J0PC9lbT4uCisgICAgVm91cyBwb3V2ZXogc3DpY2lmaWVyIGNoYWN1biBzb2l0IGNvbW1lIHVuIG5vbWJyZSBzb2l0IGNvbW1lIHVuZQorICAgIHNvdXMtY2hh7m5lIHNlbnNpYmxlIOAgbGEgY2Fzc2UgZGUgc29uIG5vbS4KKzwvZGVzY3JpcD4KKworTGUgcOlyaXBo6XJpcXVlIE1JREkgcGFyIGTpZmF1dCBlc3Q6Cis8dGFibGUgbG9jPSJoIj4KKyAgPHRhYnVsYXIgY2E9ImxsIj4KKyAgICBQbGF0ZWZvcm1lfFDpcmlwaOlyaXF1ZUA8aGxpbmU+CisgICAgTGludXgvQUxTQXxsZSBwcmVtaWVyIHBvcnQgZGUgc29ydGllIE1JREkgZGlzcG9uaWJsZUAKKyAgICBMaW51eC9PU1N8L2Rldi9zZXF1ZW5jZXJACisgIDwvdGFidWxhcj4KKzwvdGFibGU+CmRpZmYgLS1naXQgYS9Eb2N1bWVudHMvTWFudWFsLUJSTFRUWS9GcmVuY2gvU3ludGhlc2l6ZXJzLnNnbWwgYi9Eb2N1bWVudHMvTWFudWFsLUJSTFRUWS9GcmVuY2gvU3ludGhlc2l6ZXJzLnNnbWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWQ3MWM3OQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50cy9NYW51YWwtQlJMVFRZL0ZyZW5jaC9TeW50aGVzaXplcnMuc2dtbApAQCAtMCwwICsxLDggQEAKKzxzZWN0PlN5bnRo6HNlcyB2b2NhbGVzIHN1cHBvcnTpZXM8bGFiZWwgaWQ9InN5bnRoZXNpemVycyI+PHA+CitCUkxUVFkgc3VwcG9ydGUgbGVzIHN5bnRo6HNlcyB2b2NhbGVzIHN1aXZhbnRlczoKKzx0YWJsZSBsb2M9ImgiPgorICA8dGFidWxhciBjYT0ibGwiPgorICAgIE5vbXxNb2TobGVAPGhsaW5lPgorICAgICZTcGVlY2hEcml2ZXJzCisgIDwvdGFidWxhcj4KKzwvdGFibGU+CmRpZmYgLS1naXQgYS9Eb2N1bWVudHMvTWFudWFsLUJSTFRUWS9GcmVuY2gvVHJhbnNsYXRpb24uc2dtbCBiL0RvY3VtZW50cy9NYW51YWwtQlJMVFRZL0ZyZW5jaC9UcmFuc2xhdGlvbi5zZ21sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFhOTk3NjUKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudHMvTWFudWFsLUJSTFRUWS9GcmVuY2gvVHJhbnNsYXRpb24uc2dtbApAQCAtMCwwICsxLDEwODYgQEAKKzxzZWN0PlRhYmxlczxsYWJlbCBpZD0idGFibGVzIj48cD4KKworPHNlY3QxPlRhYmxlcyBkZSB0ZXh0ZTxsYWJlbCBpZD0idGFibGUtdGV4dCI+PHA+CitMZXMgZmljaGllcnMgYXlhbnQgdW4gbm9tIHNvdXMgbGEgZm9ybWUgPHR0LyoudHRiLyBzb250IGRlcyB0YWJsZXMgZGUgdGV4dGUsCitldCBjZXV4IGF2ZWMgZGVzIG5vbXMgZGUgbGEgZm9ybWUgPHR0LyoudHRpLyBzb250IGRlcyBzb3VzLXRhYmxlcyBkZSB0ZXh0ZS4KK0VsbGVzIHNvbnQgdXRpbGlz6WVzIHBhciBCUkxUVFkgcG91ciB0cmFkdWlyZSBsZXMgY2FyYWN06HJlcyDgIGwn6WNyYW4KK2RhbnMgbGVzIHJlcHLpc2VudGF0aW9ucyBicmFpbGxlcyBxdWkgY29ycmVzcG9uZGVudCDgIGwnaW5mb3JtYXRpcXVlIDggcG9pbnRzLgorCitBdSBk6XBhcnQsIEJSTFRUWSBlc3QgY29uZmlndXLpIHBvdXIgdXRpbGlzZXIgbGEgdGFibGUgZGUgdGV4dGUKKzxyZWYgaWQ9Im5hYmNjIiBuYW1lPSJOb3J0aCBBbWVyaWNhbiBCcmFpbGxlIENvbXB1dGVyIENvZGUiPgorKE5BQkNDKSAoY29kZSBpbmZvcm1hdGlxdWUgYnJhaWxsZSBub3JkLWFt6XJpY2FpbikuCitFbiBwbHVzIGRlIGNlbGxlLWNpIHBhciBk6WZhdXQsIGxlcyBhbHRlcm5hdGl2ZXMgc3VpdmFudGVzIHNvbnQgZm91cm5pZXM6CisKKzx0YWJsZSBsb2M9ImgiPgorICA8dGFidWxhciBjYT0ibGwiPgorICAgIE5vbXxMYW5ndWVACisgICAgJlRleHRUYWJsZXMKKyAgPC90YWJ1bGFyPgorPC90YWJsZT4KKworVm9pciBsJ29wdGlvbiA8cmVmIGlkPSJvcHRpb25zLXRleHQtdGFibGUiIG5hbWU9Ii10Ij4gZW4gbGlnbmUgZGUgY29tbWFuZGUsCitsYSBsaWduZSA8cmVmIGlkPSJjb25maWd1cmUtdGV4dC10YWJsZSIgbmFtZT0idGV4dC10YWJsZSI+IGR1IGZpY2hpZXIgZGUKK2NvbmZpZ3VyYXRpb24sIGV0IGwnb3B0aW9uIGRlIGNvbXBpbGF0aW9uCis8cmVmIGlkPSJidWlsZC10ZXh0LXRhYmxlIiBuYW1lPSItLXdpdGgtdGV4dC10YWJsZSI+IHBvdXIgZGVzIGTpdGFpbHMKK2NvbmNlcm5hbnQgbGEgZmHnb24gZCd1dGlsaXNlciBldCBkZSBjaGFuZ2VyIGRlIHRhYmxlIGRlIHRleHRlLgorCis8c2VjdDI+Rm9ybWF0IGRlcyB0YWJsZXMgZGUgdGV4dGU8cD4KK1VuZSB0YWJsZSBkZSB0ZXh0ZSBjb25zaXN0ZSBlbiB1bmUgc+lxdWVuY2UgZCdpbnN0cnVjdGlvbnMsIHVuZSBwYXIgbGlnbmUsCitxdWkgZOlmaW5pdCBjb21tZW50IGNoYXF1ZSBjYXJhY3TocmUgZG9pdCDqdHJlIHJlcHLpc2VudOkgZW4gYnJhaWxsZSAKK1ZvdXMgZGV2ZXogdXRpbGlzZXIgbCdlbmNvZGFnZSA8dHQvVVRGLTgvLgorVW4gYmxhbmMgKGVzcGFjZXMsIHRhYnMpIHRhbnQgYXUgZOlidXQgZGUgbGEgbGlnbmUgcXUnYWF2YW50IGV0L291IGFwcuhzIAorbCdvcOlyYXRldXIgZCd1bmUgaW5zdHJ1Y3Rpb24sIGVzdCBpZ25vcukuCisKK0xlcyBsaWduZXMgbmUgY29udGVuYW50IHF1ZSBkZXMgYmxhbmNzIHNvbnQgaWdub3LpZXMuCitTaSBsZSBwcmVtaWVyIGNhcmFjdOhyZSBub24gYmxhbmMgZCd1bmUgbGlnbmUgZXN0ICImbnVtOyIsIGNldHRlIGxpZ25lIGVzdAordW4gY29tbWVudGFpcmUgZXQgZXN0IGlnbm9y6WUuCisKKzxzZWN0Mj5JbnN0cnVjdGlvbnMgZGVzIHRhYmxlcyBkZSB0ZXh0ZTxwPgorTGVzIGluc3RydWN0aW9ucyBzdWl2YW50ZXMgc29udCBmb3VybmllczoKKzxkZXNjcmlwPgorICA8dGFnPjx0dC9jaGFyLyA8ZW0vY2FyYWN06HJlLyA8ZW0vcG9pbnRzLyAmbnVtOyA8ZW0vY29tbWVudGFpcmUvPC90YWc+CisgICAgVXRpbGlzZSBsJ2luc3RydWN0aW9uIDx0dC9jaGFyLyBwb3VyIHNw6WNpZmllciBsYSBmYedvbiBkb250IHVuIGNhcmFjdOhyZSAKKyAgICBVbmljb2RlIHNlcmEgcmVwculzZW506SBlbiBicmFpbGxlLiBMZXMgY2FyYWN06HJlcyBk6WZpbmlzIHBhciBjZXR0ZQorICAgIGluc3RydWN0aW9uIHBldXZlbnQg6WdhbGVtZW50IOp0cmUgc2Fpc2llcyBhdSBjbGF2aWVyIGJyYWlsbGUuIFNpIHBsdXNpZXVycworICAgIGNhcmFjdOhyZXMgb250IGxhIG3qbWUgcmVwculzZW50YXRpb24gYnJhaWxsZSwgdm91cyBuZSBkZXZyaWV6IGVuIGTpZmluaXIKKyAgICBxdSd1biBhdmVjIGxhIGxpZ25lIDx0dC9jaGFyLyAtIHZvdXMgZGV2cmlleiBk6WZpbmlyIGwnYXV0cmUgYXZlYyBsYSBsaWduZQorICAgIDx0dC9nbHlwaC8gKGRvbnQgbGEgc3ludGF4ZSBlc3QgaWRlbnRpcXVlKS4gU2kgcGx1cyBkJ3VuIGNhcmFjdOhyZSBheWFudCBsYQorICAgIG3qbWUgcmVwculzZW50YXRpb24gYnJhaWxsZSBlc3QgZOlmaW5pIGF2ZWMgbCdpbnN0cnVjdGlvbiA8dHQvY2hhci8KKyAgICAoY2UgcXVpIGVzdCBhY3R1ZWxsZW1lbnQgcG9zc2libGUgcG91ciBkZXMgcXVlc3Rpb25zIGRlIHLpdHJvY29tcGF0aWJpbGl06SksCisgICAgYydlc3QgbGEgcHJlbWnocmUgcXVpIGVzdCBz6WxlY3Rpb25u6WUuIAorCisgICAgPGRlc2NyaXA+CisgICAgICA8dGFnPjxlbS9jYXJhY3TocmUvPC90YWc+CisgICAgICAgIExlIGNhcmFjdOhyZSBVbmljb2RlIHF1aSBzZXJhIGTpZmluaS4gQ2VsYSBwZXV0IOp0cmU6CisgICAgICAgIDxpdGVtaXplPgorICAgICAgICAgIDxpdGVtPgorICAgICAgICAgICAgVG91dCBjYXJhY3TocmUgZGlmZulyZW50IGQndW4gYW50aXNsYXNoIG91IGQndW4gY2FyYWN06HJlIGJsYW5jLgorICAgICAgICAgIDxpdGVtPgorICAgICAgICAgICAgVW4gY2FyYWN06HJlIHNw6WNpYWwgcHLpY+lk6SBkJ3VuIGFudGktc2xhc2guCisgICAgICAgICAgICBDZSBzb250OgorICAgICAgICAgICAgPGRlc2NyaXA+CisgICAgICAgICAgICAtIDx0YWcvXGIvTGUgY2FyYWN06HJlIEVmZmFjZW1lbnQKKyAgICAgICAgICAgIC0gPHRhZy9cZi9MZSBjYXJhY3TocmUgZm9ybWZlZWQKKyAgICAgICAgICAgIC0gPHRhZy9cbi9MZSBjYXJhY3TocmUgTm91dmVsbGUgbGlnbmUuCisgICAgICAgICAgICAtIDx0YWcvXG8mbnVtOyZudW07Jm51bTsvTGEgcmVwculzZW50YXRpb24gb2N0YWxlIOAgMyBjaGlmZnJlcyBkJ3VuIGNhcmFjdOhyZS4KKyAgICAgICAgICAgIC0gPHRhZy9cci9MZSBjYXJhY3TocmUgcmV0b3VyIGNoYXJpb3QKKyAgICAgICAgICAgIC0gPHRhZy9ccy9MZSBjYXJhY3TocmUgRXNwYWNlCisgICAgICAgICAgICAtIDx0YWcvXHQvTGUgY2FyYWN06HJlIFRhYiBob3Jpem9udGFsCisgICAgICAgICAgICAtIDx0YWcvXHUmbnVtOyZudW07Jm51bTsmbnVtOy9MYSByZXBy6XNlbnRhdGlvbiBoZXhhZOljaW1hbGUg4CBxdWF0cmUgY2hpZmZyZXMgZCd1biBjYXJhY3TocmUuCisgICAgICAgICAgICAtIDx0YWcvXFUmbnVtOyZudW07Jm51bTsmbnVtOyZudW07Jm51bTsmbnVtOyZudW07L0xhIHJlcHLpc2VudGF0aW9uIGhleGFk6WNpbWFsZSDgIGh1aXQgY2hpZmZyZXMgZCd1biBjYXJhY3TocmUuCisgICAgICAgICAgICAtIDx0YWcvXHYvTGUgY2FyYWN06HJlIHRhYiB2ZXJ0aWNhbAorICAgICAgICAgICAgLSA8dGFnL1x4Jm51bTsmbnVtOy9MYSByZXBy6XNlbnRhdGlvbiBoZXhhZOljaW1hbGUg4CBkZXV4IGNoaWZmcmVzIGQndW4gY2FyYWN06HJlLgorICAgICAgICAgICAgLSA8dGFnL1xYJm51bTsmbnVtOy8uLi4gKGxhIGNhc3NlIGR1IFggZXQgZGVzIGNoaWZmcmVzIG4nYSBwYXMgZGUgc2lnbmlmaWNhdGlvbikKKyAgICAgICAgICAgIC0gPHRhZy9cJm51bTsvU2lnbmUgZCd1biBub21icmUgbGl0dOlyYWwuCisgICAgICAgICAgICAtIDx0YWcvXCZsdDtuYW1lJmd0Oy9MZSBub20gVW5pY29kZSBkJ3VuIGNhcmFjdOhyZSAodXRpbGlzZXogXyBwb3VyIGwnZXNwYWNlKS4KKyAgICAgICAgICAgIC0gPHRhZy9cXC9VbiBhbnRpc2xhc2ggbGl0dOlyYWwuCisgICAgICAgICAgICA8L2Rlc2NyaXA+CisgICAgICAgIDwvaXRlbWl6ZT4KKyAgICAgIDx0YWc+PGVtL2RvdHMvPC90YWc+CisgICAgICAgIExhIHJlcHLpc2VudGF0aW9uIGJyYWlsbGUgZHUgY2FyYWN06HJlIFVuaWNvZGUuIEMnZXN0IHVuZSBz6XF1ZW5jZSBkJ3VuCisgICAgICAgIOAgaHVpdCBub21icmVzIGRlIHBvaW50cy4gU2kgbGEgc+lxdWVuY2UgZHUgbm9tYnJlIGRlIHBvaW50cyBlc3QgZW50b3Vy6WUKKyAgICAgICAgZGUgcGFyZW50aOhzZXMsIHZvdXMgcG91dmV6IHPpcGFyZXIgbGVzIG51belyb3MgZGVzIHBvaW50cyBsJ3VuIGRlIGwnYXV0cmUKKyAgICAgICAgcGFyIGRlcyBibGFuY3MuIFVuIG51belybyBkZSBwb2ludCBlc3QgdW4gY2hpZmZyZSBjb21wcmlzIGVudHJlIDx0dC8xLy08dHQvOC8gCisgICAgICAgIHRlbHMgcXVlIGTpZmluaXMgcGFyIGxhCisgICAgICAgIDxyZWYgaWQ9ImRvdHMiIG5hbWU9IlN0YW5kYXJkIEJyYWlsbGUgRG90IE51bWJlcmluZyBDb252ZW50aW9uIj4gKGNvbnZlbnRpb24KKyAgICAgICAgc3RhbmRhcmQgZGUgbnVt6XJvdGF0aW9uIGRlIHBvaW50cyBicmFpbGxlcykuIExlIG51belybyBkZSBwb2ludCBzcOljaWFsIDx0dC8wLworICAgICAgICBlc3QgcmVjb25udSBxdWFuZCBpbCBuJ2VzdCBwYXMgZW50b3Vy6SBkZSBwYXJlbnRo6HNlcywgZXQgaWwgc2lnbmlmaWUgYXVjdW4KKyAgICAgICAgcG9pbnQ7IGlsIG5lIHBldXQg6nRyZSB1dGlsaXPpIHBhcmFsbOhsZW1lbnQg4CB1biBhdXRyZSBudW3pcm8gZGUgcG9pbnQuCisgICAgPC9kZXNjcmlwPgorCisgICAgRXhlbXBsZXM6CisgICAgPGl0ZW1pemU+CisgICAgICA8aXRlbT48dHQvY2hhciBhIDEvCisgICAgICA8aXRlbT48dHQvY2hhciBiICgxMikvCisgICAgICA8aXRlbT48dHQvY2hhciBjICggNCAgMSAgICkvCisgICAgICA8aXRlbT48dHQvY2hhciBcXCAxMjU2Ny8KKyAgICAgIDxpdGVtPjx0dC9jaGFyIFxzIDAvCisgICAgICA8aXRlbT48dHQvY2hhciBceDIwICgpLworICAgICAgPGl0ZW0+PHR0L2NoYXIgXCZsdDtMQVRJTl9TTUFMTF9MRVRURVJfRCZndDsgMTQ1LworICAgIDwvaXRlbWl6ZT4KKyAgPHRhZz48dHQvZ2x5cGgvIDxlbS9jYXJhY3TocmUvIDxlbS9kb3RzLyAmbnVtOyA8ZW0vY29tbWVudC88L3RhZz4KKyAgICBVdGlsaXNleiBsJ2luc3RydWN0aW9uIDx0dC9nbHlwaC8gcG91ciBzcOljaWZpZXIgbGEgZmHnb24gZG9udCBkb2l0IOp0cmUKKyAgICByZXBy6XNlbnTpIGVuIGJyYWlsbGUgdW4gY2FyYWN06HJlIFVuaWNvZGUuIExlcyBjYXJhY3TocmVzIGTpZmluaXMgYXZlYworICAgIGNldHRlIGluc3RydWN0aW9uIHBldXZlbnQgdW5pcXVlbWVudCDqdHJlIGFmZmljaOlzLiBPbiBuZSBwZXV0IHBhcyBsZXMKKyAgICBzYWlzaXIgYXUgY2xhdmllciBicmFpbGxlLiBWb2lyIGxhIGxpZ25lIDx0dC9jaGFyLyBwb3VyIGxlcyBk6XRhaWxzIHN1cgorICAgIGxhIHN5bnRheGUgZXQgcG91ciBkZXMgZXhlbXBsZXMuCisgIDx0YWc+PHR0L2J5dGUvIDxlbS9ieXRlLyA8ZW0vcG9pbnRzLyAmbnVtOyA8ZW0vY29tbWVudGFpcmUvPC90YWc+CisgICAgVXRpbGlzZXogbCdpbnN0cnVjdGlvbiA8dHQvYnl0ZS8gcG91ciBzcOljaWZpZXIgY29tbWVudCB1biBjYXJhY3TocmUgZW4gZW5jb2RhZ2UgbG9jYWwKKyAgICBkb2l0IOp0cmUgcmVwculzZW506SBlbiBicmFpbGxlLiBJbCBhIOl06SByZXRlbnUgcG91ciBkZXMgcmFpc29ucyBkZQorICAgIGNvbXBhdGliaWxpdOkgbWFpcyBuZSBkZXZyYWl0IHBhcyDqdHJlIHV0aWxpc+kuCisKKyAgICBMZXMgY2FyYWN06HJlcyBVbmljb2RlIGRldnJhaWVudCDqdHJlIGTpZmluaXMKKyAgICAodmlhIGwnaW5zdHJ1Y3Rpb24gPHR0L2NoYXIvKSBkZSB0ZWxsZSBzb3J0ZSBxdWUgbGEgdGFibGUgZGUgdGV4dGUgZGVtZXVyZQorICAgIHZhbGlkZSBwYXIgcmFwcG9ydCDgIGwnZW5jb2RhZ2UgbG9jYWwuCisKKyAgICA8ZGVzY3JpcD4KKyAgICAgIDx0YWc+PGVtL2J5dGUvPC90YWc+CisgICAgICAgIExlIGNhcmFjdOhyZSBsb2NhbCBk6WZpbmkuIElsIHBldXQg6nRyZSBzcOljaWZp6SBkZSBsYSBt6m1lIG1hbmnocmUgcXVlCisgICAgICAgIGwnb3DpcmF0ZXVyIDxlbS9jYXJhY3TocmUvIGRlIGwnaW5zdHJ1Y3Rpb24gPHR0L2NoYXIvIHNhdWYgcXVlIGxlcyBmb3JtZXMKKyAgICAgICAgc3DpY2lmaXF1ZXMg4CBsJ1VuaWNvZGUgKFx1LCBcVSwgXCZsdDspIG5lIHBldXZlbnQgcGFzIOp0cmUgdXRpbGlz6WVzLgorICAgICAgPHRhZz48ZW0vcG9pbnRzLzwvdGFnPgorICAgICAgICBMYSByZXBy6XNlbnRhdGlvbiBicmFpbGxlIGR1IGNhcmFjdOhyZSBsb2NhbC4KKyAgICAgICAgSWwgcGV1dCDqdHJlIHNw6WNpZmnpIGRlIGxhIG3qbWUgbWFuaehyZSBxdWUKKyAgICAgICAgbCdvcOlyYXRldXIgPGVtL3BvaW50cy8gZGUgbCdpbnN0cnVjdGlvbiA8dHQvY2hhci8uCisgICAgPC9kZXNjcmlwPgorICA8dGFnPjx0dC9pbmNsdWRlLyA8ZW0vZmljaGllci8gJm51bTsgPGVtL2NvbW1lbnRhaXJlLzwvdGFnPgorICAgIFV0aWxpc2V6IGwnaW5zdHJ1Y3Rpb24gPHR0L2luY2x1ZGUvIHBvdXIgaW5jbHVyZSBsZSBjb250ZW51IGQndW5lIHNvdXMtdGFibGUgZGUKKyAgICB0ZXh0ZS4gRWxsZSBlc3QgculjdXJzaXZlLCBjZSBxdWkgc2lnbmlmaWUgcXVlIHRvdXRlIHNvdXMtdGFibGUgZGUgdGV4dGUgcGV1dAorICAgIGluY2x1cmUgZWxsZS1t6m1lIHVuZSBhdXRyZSBzb3VzLXRhYmxlIGRlIHRleHRlLiBQcmVuZXogc29pbiBkZSB2b3VzCisgICAgYXNzdXJlciBkZSBuZSBwYXMgY3LpZXIgdW5lICJpbmNsdXNpb24gZW4gYm91Y2xlIi4KKworICAgIDxkZXNjcmlwPgorICAgICAgPHRhZz48ZW0vZmljaGllci88L3RhZz4KKyAgICAgICAgTGUgZmljaGllciDgIGluY2x1cmUuIENlbGEgcGV1dCDqdHJlIHVuIGNoZW1pbiByZWxhdGlmIG91IGFic29sdS4gU2kgYydlc3QKKyAgICAgICAgcmVsYXRpZiwgaWwgZXN0IGFuY3LpIGF1IHLpcGVydG9pcmUgY29udGVuYW50IGxlIGZpY2hpZXIgcXVpIGluY2x1dC4KKyAgICA8L2Rlc2NyaXA+Cis8L2Rlc2NyaXA+CisKKzxzZWN0MT5UYWJsZXMgZCdhdHRyaWJ1dHM8bGFiZWwgaWQ9InRhYmxlLWF0dHJpYnV0ZXMiPjxwPgorTGVzIGZpY2hpZXJzIGF1eCBub21zIHNvdXMgbGEgZm9ybWUgKi5hdGIgc29udCBkZXMgdGFibGVzIGQnYXR0cmlidXRzIGV0IGNldXgKK2F1eCBub21zIHNvdXMgbGEgZm9ybWUgKi5hdGkgc29udCBkZXMgc291cy10YWJsZXMgZCdhdHRyaWJ1dHMuIElscyBzb250Cit1dGlsaXPpcyBxdWFuZCBCUkxUVFkgYWZmaWNoZSBsZXMKK2F0dHJpYnV0cyBkZSBsJ+ljcmFuIGF1IGxpZXUgZHUgY29udGVudSBkZSBsJ+ljcmFuICh2b2lyIGxhIGNvbW1hbmRlCis8cmVmIGlkPSJjb21tYW5kLURJU1BNRCIgbmFtZT0iRElTUE1EIj4pLgorQ2hhY3VuIGRlcyBodWl0IHBvaW50cyBicmFpbGxlIHJlcHLpc2VudGUgbCd1biBkZXMgaHVpdCBiaXRzIGQnYXR0cmlidXRzCis8dHQ+VkdBPC90dD4uCitMZXMgdGFibGVzIGQnYXR0cmlidXRzIHN1aXZhbnRlcyBzb250IGZvdXJuaWVzOgorPGRlc2NyaXA+CisgIDx0YWcvbGVmdF9yaWdodC8KKyAgICBMYSBjb2xvbm5lIOAgZ2F1Y2hlIHJlcHLpc2VudGUgbGVzIGNvdWxldXJzIGRlIHByZW1pZXIgcGxhbjoKKyAgICA8ZGVzY3JpcD4KKyAgICAgIDx0YWcvUG9pbnQgMS9CbGV1CisgICAgICA8dGFnL1BvaW50IDIvVmVydAorICAgICAgPHRhZy9Qb2ludCAzL1JvdWdlCisgICAgICA8dGFnL1BvaW50IDcvQnJpbGxhbnQKKyAgICA8L2Rlc2NyaXA+CisgICAgTGEgY29sb25uZSDgIGRyb2l0ZSByZXBy6XNlbnRlIGxlcyBjb3VsZXVycyBkZSBmb25kOgorICAgIDxkZXNjcmlwPgorICAgICAgPHRhZy9Qb2ludCA0L0JsZXUKKyAgICAgIDx0YWcvUG9pbnQgNS9WZXJ0CisgICAgICA8dGFnL1BvaW50IDYvUm91Z2UKKyAgICAgIDx0YWcvUG9pbnQgOC9DbGlnbm90YW50CisgICAgPC9kZXNjcmlwPgorICAgIFVuIHBvaW50IGVzdCBhZmZpY2jpIHF1YW5kIHNvbiBiaXQgZCdhdHRyaWJ1dCBjb3JyZXNwb25kYW50IGVzdCBhY3RpZi4KKyAgICBDJ2VzdCBsYSB0YWJsZSBkJ2F0dHJpYnV0cyBwYXIgZOlmYXV0IGNhciBjJ2VzdCBsYSBwbHVzCisgICAgaW50dWl0aXZlLiBDZXBlbmRhbnQsIGwndW4gZGUgc2VzIHByb2Js6G1lcyBlc3QgcXUnaWwgZXN0IGRpZmZpY2lsZSBkZQorICAgIGRpc3Rpbmd1ZXIgbGEgZGlmZulyZW5jZSBlbnRyZSBsYSB2aWTpbyBub3JtYWxlIChub2lyIHN1ciBibGFuYykgZXQgaW52ZXJz6WUKKyAgICAoYmxhbmMgc3VyIG5vaXIpLgorICA8dGFnL2ludmxlZnRfcmlnaHQvCisgICAgTGEgY29sb25uZSDgIGdhdWNoZSByZXBy6XNlbnRlIGxlcyBjb3VsZXVycyBkZSBwcmVtaWVyIHBsYW46IAorICAgIDxkZXNjcmlwPgorICAgICAgPHRhZy9Qb2ludCAxL0JsZXUKKyAgICAgIDx0YWcvUG9pbnQgMi9WZXJ0CisgICAgICA8dGFnL1BvaW50IDMvUm91Z2UKKyAgICAgIDx0YWcvUG9pbnQgNy9CcmlsbGFudAorICAgIDwvZGVzY3JpcD4KKyAgICBMYSBjb2xvbm5lIOAgZHJvaXRlIHJlcHLpc2VudGUgbGVzIGNvdWxldXJzIGRlIGZvbmQ6CisgICAgPGRlc2NyaXA+CisgICAgICA8dGFnL1BvaW50IDQvQmxldQorICAgICAgPHRhZy9Qb2ludCA1L1ZlcnQKKyAgICAgIDx0YWcvUG9pbnQgNi9Sb3VnZQorICAgICAgPHRhZy9Qb2ludCA4L0NsaWdub3RhbnQKKyAgICA8L2Rlc2NyaXA+CisgICAgVW4gYml0IGRlIGZvbmQgZXN0IGFjdGlmIHBvdXIgZ+lu6XJlciBzZXMgcG9pbnRzIGNvcnJlc3BvbmRhbnQsIHRhbmRpcworICAgIHF1J3VuIGJpdCBkZSBwcmVtaWVyIHBsYW4gZXN0IGluYWN0aWYgcG91ciBn6W7pcmVyIHNvbiBwb2ludCBjb3JyZXNwb25kYW50LgorICAgIENldHRlIGxvZ2lxdWUgbm9uIGludHVpdGl2ZSBmYWNpbGl0ZSBlbiBmYWl0IGxhIGxlY3R1cmUgZGUgbGEgcGx1cGFydCBkZXMKKyAgICBjb21iaW5haXNvbnMgZCdhdHRyaWJ1dHMgY29tbXVu6W1lbnQgdXRpbGlz6WVzLgorICA8dGFnL3VwcGVyX2xvd2VyLworICAgIExlIGNhcnLpIHN1cOlyaWV1ciByZXBy6XNlbnRlIGxlcyBjb3VsZXVycyBkZSBwcmVtaWVyIHBsYW46CisgICAgPGRlc2NyaXA+CisgICAgICA8dGFnL1BvaW50IDEvUm91Z2UKKyAgICAgIDx0YWcvUG9pbnQgNC9WZXJ0CisgICAgICA8dGFnL1BvaW50IDIvQmxldQorICAgICAgPHRhZy9Qb2ludCA1L0JyaWxsYW50CisgICAgPC9kZXNjcmlwPgorICAgIExlIGNhcnLpIGluZulyaWV1ciByZXBy6XNlbnRlIGxlcyBjb3VsZXVycyBkJ2FycmnocmUtcGxhbjoKKyAgICA8ZGVzY3JpcD4KKyAgICAgIDx0YWcvUG9pbnQgMy9Sb3VnZQorICAgICAgPHRhZy9Qb2ludCA2L1ZlcnQKKyAgICAgIDx0YWcvUG9pbnQgNy9CbGV1CisgICAgICA8dGFnL1BvaW50IDgvQ2xpZ25vdGFudAorICAgIDwvZGVzY3JpcD4KKyAgICBVbiBwb2ludCBzJ2FmZmljaGUgcXVhbmQgbGUgYml0IGRlIGwnYXR0cmlidXQgcXVpIHkgY29ycmVzcG9uZCBlc3QgYWN0aWYuCis8L2Rlc2NyaXA+CitWb2lyIGwnb3B0aW9uIDxyZWYgaWQ9Im9wdGlvbnMtYXR0cmlidXRlcy10YWJsZSIgbmFtZT0iLWEiPiBlbiBsaWduZSBkZQorY29tbWFuZGUsIGxhIGxpZ25lIDxyZWYgaWQ9ImNvbmZpZ3VyZS1hdHRyaWJ1dGVzLXRhYmxlIiBuYW1lPSJhdHRyaWJ1dGVzLXRhYmxlIj4KK2R1IGZpY2hpZXIgZGUgY29uZmlndXJhdGlvbiwgZXQgbCdvcHRpb24gZGUgY29tcGlsYXRpb24KKzxyZWYgaWQ9ImJ1aWxkLWF0dHJpYnV0ZXMtdGFibGUiIG5hbWU9Ii0td2l0aC1hdHRyaWJ1dGVzLXRhYmxlIj4gcG91ciBkZXMKK2TpdGFpbHMgY29uY2VybmFudCBsJ3V0aWxpc2F0aW9uIGV0IGxlIGNoYW5nZW1lbnQgZGUgdGFibGUKK2QnYXR0cmlidXRzLgorCis8c2VjdDI+Rm9ybWF0IGRlcyB0YWJsZXMgZCdhdHRyaWJ1dHM8cD4KK1VuZSB0YWJsZSBkJ2F0dHJpYnV0cyBlc3QgdW5lIHPpcXVlbmNlIGRlIGxpZ25lcyBkZSBjb21tYW5kZSwgYXZlYyB1bmUKK2NvbW1hbmRlIHBhciBsaWduZSwgcXVpIGTpZmluaXQgY29tbWVudCBkb2l0IOp0cmUgcmVwculzZW506SBlbiBicmFpbGxlIGxlcworY29tYmluYWlzb25zIGRlcyBhdHRyaWJ1dHMgPHR0L1ZHQS8uIFZvdXMgZGV2ZXogdXRpbGlzZXIgdW4gZW5jb2RhZ2UgZGUgY2FyYWN06HJlcworPHR0L1VURi04Ly4KK0xlcyBlc3BhY2VzIGJsYW5jcyAobGVzIHZpZGVzLCB0YWJ1bGF0aW9ucykgYXUgZOlidXQgZCd1bmUgbGlnbmUsIG91IGF2YW50CitldC9vdSBhcHLocyBsJ29w6XJhdGV1ciBkJ3VuZSBsaWduZSBkZSBjb21tYW5kZSwgc29udCBpZ25vculzLgorTGVzIGxpZ25lcyBuZSBjb250ZW5hbnQgcXVlIGRlcyBlc3BhY2VzIHNvbnQgaWdub3LpZXMuCitTaSBsZSBwcmVtaWVyIGNhcmFjdOhyZSBub24tYmxhbmMgZCd1bmUgbGlnbmUgZXN0ICImbnVtOyIgY2V0dGUgbGlnbmUgZXN0IHVuCitjb21tZW50YWlyZSBldCBlc3QgaWdub3LpZS4KKworPHNlY3QyPkxpZ25lcyBkZSBjb21tYW5kZSBkZXMgdGFibGVzIGQnYXR0cmlidXRzPHA+CitMZXMgbGlnbmVzIGRlIGNvbW1hbmRlIHN1aXZhbnRlcyBzb250IGZvdXJuaWVzOgorPGRlc2NyaXA+CisgIDx0YWc+PHR0PmRvdDwvdHQ+IDxlbT5wb2ludDwvZW0+IDxlbT5ldGF0PC9lbT4gJm51bTsgPGVtPmNvbW1lbnRhaXJlPC9lbT48L3RhZz4KKyAgICBVdGlsaXNleiBsJ2luc3RydWN0aW9uIDx0dD5kb3Q8L3R0PiBwb3VyIHNw6WNpZmllciBjZSBxdWUgcmVwculzZW50ZSB1biBwb2ludCAKKyAgICBwYXJ0aWN1bGllci4KKworICAgIDxkZXNjcmlwPgorICAgICAgPHRhZz48ZW0+cG9pbnQ8L2VtPjwvdGFnPgorICAgICAgICBMZSBwb2ludCBxdWkgZXN0IGTpZmluaS4gQydlc3QgdW5lIHNldWxlIGNhc2UgYWxsYW50IGRlIAorICAgICAgICA8dHQ+MTwvdHQ+IOAgPHR0Pjg8L3R0PiBjb21tZSBk6WZpbmkgcGFyIGxhCisJPHJlZiBpZD0iZG90cyIgbmFtZT0iQ29udmVudGlvbiBzdGFuZGFyZCBkdSBub21icmUgZGUgcG9pbnRzIGJyYWlsbGVzIj4uCisgICAgICA8dGFnPjxlbT7pdGF0PC9lbT48L3RhZz4KKyAgICAgICAgQ2UgcXVlIHJlcHLpc2VudGUgbGUgcG9pbnQuIElsIHBldXQgcydhZ2lyOgorICAgICAgICA8ZGVzY3JpcD4KKyAgICAgICAgICA8dGFnPjx0dD5vbjwvdHQ+PC90YWc+RCd1biBwb2ludCDpbGV26SBzaSBsJ2F0dHJpYnV0IG5vbW3pIGVzdCBhY3RpZi4KKyAgICAgICAgICA8dGFnPjx0dD5vZmY8L3R0PjwvdGFnPkQndW4gcG9pbnQgZW5mb25j6SBzaSBsJ2F0dHJpYnV0IG5vbW3pIGVzdCBpbmFjdGlmLgorICAgICAgICA8L2Rlc2NyaXA+CisKKyAgICAgICAgTGVzIG5vbXMgZGVzIGJpdHMgZGVzIGF0dHJpYnV0cyBzb250OgorICAgICAgICA8ZGVzY3JpcD4KKyAgICAgICAgICA8dGFnLzBYMDEvPHR0L2JsZXUgcHJlbWllciBwbGFuLworICAgICAgICAgIDx0YWcvMFgwMi88dHQvdmVydCBwcmVtaWVyIHBsYW4vLworICAgICAgICAgIDx0YWcvMFgwNC88dHQvcm91Z2UgcHJlbWllciBwbGFuLy8KKyAgICAgICAgICA8dGFnLzBYMDgvPHR0L2JyaWxsYW50IHByZW1pZXIgcGxhbi8vCisgICAgICAgICAgPHRhZy8wWDEwLzx0dC9mb25kIGJsZXUvCisgICAgICAgICAgPHRhZy8wWDIwLzx0dC9mb25kIHZlcnQvCisgICAgICAgICAgPHRhZy8wWDQwLzx0dC9mb25kIHJvdWdlLworICAgICAgICAgIDx0YWcvMFg4MC88dHQvZm9uZCBjbGlnbm90YW50LworICAgICAgICA8L2Rlc2NyaXA+CisgICAgPC9kZXNjcmlwPgorCisgICAgRXhlbXBsZXM6CisgICAgPGl0ZW1pemU+CisgICAgICA8aXRlbT48dHQvZG90IDEgPWZnLXJlZC8KKyAgICAgIDxpdGVtPjx0dC9kb3QgMiAmdGlsZGU7YmctYmx1ZS8KKyAgICA8L2l0ZW1pemU+CisKKyAgPHRhZz48dHQvaW5jbHVkZS8gPGVtL2ZpY2hpZXIvICZudW07IDxlbS9jb21tZW50YWlyZS88L3RhZz4KKyAgICBVdGlsaXNleiBsYSBsaWduZSAgPHR0L2luY2x1ZGUvIHBvdXIgaW5jbHVyZSBsZSBjb250ZW51IGQndW5lIHNvdXMtdGFibGUgZCdhdHRyaWJ1dHMuIAorICAgIElsIGVzdCBy6WN1cnNpZiwgY2UgcXVpIHNpZ25pZmllIHF1ZSB0b3V0ZSBzb3VzLXRhYmxlIGQnYXR0cmlidXRzIHBldXQKKyAgICBpbmNsdXJlIGVsbGUtbeptZSB1bmUgYXV0cmUgc291cy10YWJsZSBkJ2F0dHJpYnV0cy4gUHJlbmV6IHNvaW4gZGUgdm91cworICAgIGFzc3VyZXIgZGUgbmUgcGFzIGNy6WVyIHVuZSAiaW5jbHVzaW9uIGVuIGJvdWNsZSIuCisKKyAgICA8ZGVzY3JpcD4KKyAgICAgIDx0YWc+PGVtL2ZpY2hpZXIvPC90YWc+CisgICAgICAgIExlIGZpY2hpZXIg4CBpbmNsdXJlLiBDZWxhIHBldXQg6nRyZSB1biBjaGVtaW4gcmVsYXRpZiBvdSBhYnNvbHUuIFNpIGMnZXN0CisgICAgICAgIHJlbGF0aWYsIGlsIGVzdCBhbmNy6SBhdSBy6XBlcnRvaXJlIGNvbnRlbmFudCBsZSBmaWNoaWVyIHF1aSBpbmNsdXQuCisgICAgPC9kZXNjcmlwPgorPC9kZXNjcmlwPgorCis8c2VjdDE+VGFibGVzIGRlIGJyYWlsbGUgYWJy6WfpPGxhYmVsIGlkPSJ0YWJsZS1jb250cmFjdGlvbiI+PHA+CitMZXMgZmljaGllcnMgYXV4IG5vbXMgc291cyBsYSBmb3JtZSA8dHQvKi5jdGIvIHNvbnQgZGVzIHRhYmxlcyBkZSBicmFpbGxlIGFiculn6SAKK2V0IGNldXggYXV4IG5vbXMgc291cyBsYSBmb3JtZSA8dHQvKi5jdGkvIHNvbnQgZGVzIHNvdXMtdGFibGVzIGRlIGJyYWlsbGUgYWJy6WfpLiAKK0lscyBzb250IHV0aWxpc+lzIHBhciBCUkxUVFkgcG91ciB0cmFkdWlyZSBkZXMgc+lxdWVuY2VzIGRlIGNhcmFjdOhyZXMg4CBsJ+ljcmFuIAorZW4gbGV1cnMgcmVwculzZW50YXRpb25zIGNvcnJlc3BvbmRhbnRlcyBlbiBicmFpbGxlIGFiculn6S4gCisKK0JSTFRUWSBwculzZW50ZSBkdSBicmFpbGxlIGFiculn6SBzaToKKzxpdGVtaXplPgorICA8aXRlbT4KKyAgICBVbmUgdGFibGUgZGUgYnJhaWxsZSBhYnLpZ+kgYSDpdOkgc+lsZWN0aW9ubullLgorICAgIFZvaXIgbCdvcHRpb24gPHJlZiBpZD0ib3B0aW9ucy1jb250cmFjdGlvbi10YWJsZSIgbmFtZT0iLWMiPiBlbiBsaWduZQorICAgIGRlIGNvbW1hbmRlIGV0IGxhIGxpZ25lCisgICAgPHJlZiBpZD0iY29uZmlndXJlLWNvbnRyYWN0aW9uLXRhYmxlIiBuYW1lPSJjb250cmFjdGlvbi10YWJsZSI+IGR1CisgICAgZmljaGllciBkZSBjb25maWd1cmF0aW9uIHBvdXIgZGVzIGTpdGFpbHMuCisgIDxpdGVtPgorICAgIExhIGZvbmN0aW9uIGJyYWlsbGUgNiBwb2ludHMgYSDpdOkgYWN0aXbpZS4gVm9pciBsYSBjb21tYW5kZQorICAgIDxyZWYgaWQ9ImNvbW1hbmQtU0lYRE9UUyIgbmFtZT0iU0lYRE9UUyI+IGV0IGxhIHBy6WbpcmVuY2UKKyAgICA8cmVmIGlkPSJwcmVmZXJlbmNlLXRleHQtc3R5bGUiIG5hbWU9IlRleHQgU3R5bGUiPiBwb3VyIGRlcyBk6XRhaWxzLgorPC9pdGVtaXplPgorQ2V0dGUgcG9zc2liaWxpdOkgbidlc3QgcGFzIGRpc3BvbmlibGUgc2kgdm91cyBhdmV6IHNw6WNpZmnpIGwnb3B0aW9uIGRlCitjb21waWxhdGlvbgorPHJlZiBpZD0iYnVpbGQtY29udHJhY3RlZC1icmFpbGxlIiBuYW1lPSItLWRpc2FibGUtY29udHJhY3RlZC1icmFpbGxlIj4uCisKK0xlcyB0YWJsZXMgZCdhYnLpZ+kgc3VpdmFudGVzIHNvbnQgZm91cm5pZXM6CisKKzx0YWJsZSBsb2M9ImgiPgorICA8dGFidWxhciBjYT0ibGwiPgorICAgIE5vbXxMYW5ndWVACisgICAgJkNvbnRyYWN0aW9uVGFibGVzCisgPC90YWJ1bGFyPgorPC90YWJsZT4KK1ZvaXIgbCdvcHRpb24gPHJlZiBpZD0ib3B0aW9ucy1jb250cmFjdGlvbi10YWJsZSIgbmFtZT0iLWMiPiBlbiBsaWduZSBkZSBjb21tYW5kZQorZXQgbGEgbGlnbmUgPHJlZiBpZD0iY29uZmlndXJlLWNvbnRyYWN0aW9uLXRhYmxlIiBuYW1lPSJjb250cmFjdGlvbi10YWJsZSI+IGR1IGZpY2hpZXIgZGUgCitjb25maWd1cmF0aW9uIHBvdXIgZGVzIGTpdGFpbHMgc3VyIGxhIGZh529uIGQndXRpbGlzZXIgdW5lIHRhYmxlIGQnYWJy6WfpLgorCis8c2VjdDI+Rm9ybWF0IGRlcyB0YWJsZXMgZGUgYnJhaWxsZSBhYnLpZ+k8cD4KK1VuZSB0YWJsZSBkZSBicmFpbGxlIGFiculn6SBlc3QgdW5lIHPpcXVlbmNlIGRlIGxpZ25lcyBkZSBjb21tYW5kZSwgYXZlYyB1bmUKK2NvbW1hbmRlIHBhciBsaWduZSwgcXVpIGTpZmluaXQgY29tbWVudCBsZXMgc+lxdWVuY2VzIGRlIGNhcmFjdOhyZXMgdm9udCDqdHJlCityZXBy6XNlbnTpZXMgZW4gYnJhaWxsZS4gVm91cyBkZXZleiB1dGlsaXNlciB1biBlbmNvZGFnZSBkZSBjYXJhY3TocmVzCis8dHQvVVRGLTgvLgorCitMZXMgZXNwYWNlcyBibGFuY3MgKGxlcyB2aWRlcywgdGFidWxhdGlvbnMpIGF1IGTpYnV0IGQndW5lIGxpZ25lLCBvdSBhdmFudAorZXQvb3UgYXBy6HMgbCdvcOlyYXRldXIgZCd1bmUgbGlnbmUgZGUgY29tbWFuZGUsIHNvbnQgaWdub3Lpcy4KK0xlcyBsaWduZXMgbmUgY29udGVuYW50IHF1J+AgZGVzIGVzcGFjZXMgc29udCBpZ25vcullcy4KK1NpIGxlIHByZW1pZXIgY2FyYWN06HJlIG5vbi1ibGFuYyBkJ3VuZSBsaWduZSBlc3QgIiZudW07IiBjZXR0ZSBsaWduZSBlc3QgdW4KK2NvbW1lbnRhaXJlIGV0IGVzdCBpZ25vcullLgorCitMZSBmb3JtYXQgZCd1bmUgZW50cullIGRlIHRhYmxlIGRlIGJyYWlsbGUgYWJy6WfpIGVzdDoKKzx0c2NyZWVuPjxlbS9kaXJlY3RpdmUvIDxlbS9vcOlyYXRldXIvIC4uLiBbPGVtL2NvbW1lbnRhaXJlL108L3RzY3JlZW4+CitDaGFxdWUgbGlnbmUgYSB1biBub21icmUgZCdvcOlyYXRldXJzIHNw6WNpZmlxdWUuCitUb3V0IHRleHRlIGF1LWRlbOAgZHUgZGVybmllciBvcOlyYXRldXIgZCd1bmUgbGlnbmUgZXN0IGludGVycHLpdOkgY29tbWUgdW4gY29tbWVudGFpcmUuCitMJ29yZHJlIGRlcyBlbnRy6WVzIOAgbCdpbnTpcmlldXIgZGUgbGEgdGFibGUgZGUgYnJhaWxsZSBhYnLpZ+kgZXN0LCBlbiBn6W7pcmFsLCBzZWxvbiBsYQorY29udmVuYW5jZSBkZSBzb24vc2VzIG1haW50ZW5ldXIocykuCitVbmUgZW50cullIHF1aSBk6WZpbml0IHVuZSBlbnRpdOksIGNvbW1lIDx0dC9jbGFzcy8sCitkb2l0IHBy6WPpZGVyIHRvdXRlcyBsZXMgculm6XJlbmNlcyBkZSBjZXR0ZSBlbnRpdOkuCisKK0xlcyBlbnRy6WVzIHF1aSBjb3JyZXNwb25kZW50IOAgZGVzIHPpcXVlbmNlcyBkZSBjYXJhY3TocmVzIAorc29udCBhdXRvbWF0aXF1ZW1lbnQgculvcmdhbmlz6WVzIGRlIGxhIHBsdXMgbG9uZ3VlIOAgbGEgcGx1cyBjb3VydGUKK2FmaW4gcXVlIGRlcyBjb3JyZXNwb25kYW5jZXMgcGx1cyBsb25ndWVzIHNvaWVudCB0b3Vqb3VycyBwculm6XLpZXMuCitTaSBwbHVzIGQndW5lIGVudHLpZSBjb3JyZXNwb25kIOAgbGEgbeptZSBz6XF1ZW5jZSBkZSBjYXJhY3TocmVzLCAKK2xldXIgb3JnYW5pc2F0aW9uIGQnb3JpZ2luZSBkYW5zIGxhIHRhYmxlIGVzdCBtYWludGVudWUuIAorQWluc2ksIGxhIG3qbWUgc+lxdWVuY2UgcGV1dCDqdHJlIHRyYWR1aXRlIGRpZmbpcmVtbWVudCBkYW5zIGRlcyBjaXJjb25zdGFuY2VzCitkaWZm6XJlbnRlcy4gCisKKzxzZWN0Mj5PcOlyYXRldXJzIGRlcyB0YWJsZXMgZGUgYnJhaWxsZSBhYnLpZ+k8cD4KKzxkZXNjcmlwPgorICA8dGFnPjxlbS9jaGFyYWN0ZXJzLzwvdGFnPgorICAgIExlIHByZW1pZXIgb3DpcmF0ZXVyIGQndW5lIHPpcXVlbmNlIGRlIGNhcmFjdOhyZXMgY29ycmVzcG9uZGFudCDgIHVuZSBsaWduZQorICAgIGVzdCBsYSBz6XF1ZW5jZSBkZSBjYXJhY3TocmVzIOAgbGFxdWVsbGUgZWxsZSBkb2l0IGNvcnJlc3BvbmRyZS4KKyAgICBDaGFxdWUgY2FyYWN06HJlIGRhbnMgbGEgc+lxdWVuY2UgcGV1dCDqdHJlOgorICAgIDxpdGVtaXplPgorICAgICAgPGl0ZW0+CisgICAgICAgICAgICBUb3V0IGNhcmFjdOhyZSBkaWZm6XJlbnQgZCd1biBhbnRpc2xhc2ggKGJhcnJlIG9ibGlxdWUgaW52ZXJz6WUpIG91IGQndW4gY2FyYWN06HJlIGJsYW5jLgorICAgICAgICAgIDxpdGVtPgorICAgICAgICAgICAgVW4gY2FyYWN06HJlIHNw6WNpYWwgcHLpY+lk6SBkJ3VuZSBiYXJyZSBvYmxpcXVlIGludmVyc+llLgorICAgICAgICAgICAgQ2Ugc29udDoKKyAgICAgICAgICAgIDxkZXNjcmlwPgorICAgICAgICAgICAgLSA8dGFnL1xiL0xlIGNhcmFjdOhyZSBFZmZhY2VtZW50CisgICAgICAgICAgICAtIDx0YWcvXGYvTGUgY2FyYWN06HJlIGZvcm1mZWVkCisgICAgICAgICAgICAtIDx0YWcvXG4vTGUgY2FyYWN06HJlIE5vdXZlbGxlIGxpZ25lLgorICAgICAgICAgICAgLSA8dGFnL1xvJm51bTsmbnVtOyZudW07L0xhIHJlcHLpc2VudGF0aW9uIG9jdGFsZSDgIDMgY2hpZmZyZXMgZCd1biBjYXJhY3TocmUuCisgICAgICAgICAgICAtIDx0YWcvXHIvTGUgY2FyYWN06HJlIHJldG91ciBjaGFyaW90CisgICAgICAgICAgICAtIDx0YWcvXHMvTGUgY2FyYWN06HJlIEVzcGFjZQorICAgICAgICAgICAgLSA8dGFnL1x0L0xlIGNhcmFjdOhyZSBUYWIgaG9yaXpvbnRhbGUKKyAgICAgICAgICAgIC0gPHRhZy9cdSZudW07Jm51bTsmbnVtOyZudW07L0xhIHJlcHLpc2VudGF0aW9uIGhleGFk6WNpbWFsZSDgIHF1YXRyZSBjaGlmZnJlcyBkJ3VuIGNhcmFjdOhyZS4KKyAgICAgICAgICAgIC0gPHRhZy9cVSZudW07Jm51bTsmbnVtOyZudW07Jm51bTsmbnVtOyZudW07Jm51bTsvTGEgcmVwculzZW50YXRpb24gaGV4YWTpY2ltYWxlIOAgaHVpdCBjaGlmZnJlcyBkJ3VuIGNhcmFjdOhyZS4KKyAgICAgICAgICAgIC0gPHRhZy9cdi9MZSBjYXJhY3TocmUgdGFiIHZlcnRpY2FsZQorICAgICAgICAgICAgLSA8dGFnL1x4Jm51bTsmbnVtOy9MYSByZXBy6XNlbnRhdGlvbiBoZXhhZOljaW1hbGUg4CBkZXV4IGNoaWZmcmVzIGQndW4gY2FyYWN06HJlLgorICAgICAgICAgICAgLSA8dGFnL1xYJm51bTsmbnVtOy8uLi4gKGxhIGNhc3NlIGR1IFggZXQgZGVzIGNoaWZmcmVzIG4nYSBwYXMgZGUgc2lnbmlmaWNhdGlvbikKKyAgICAgICAgICAgIC0gPHRhZy9cJm51bTsvU2lnbmUgZCd1biBub21icmUgbGl0dOlyYWwuCisgICAgICAgICAgICAtIDx0YWcvXCZsdDtuYW1lJmd0Oy9MZSBub20gVW5pY29kZSBkJ3VuIGNhcmFjdOhyZSAodXRpbGlzZXogXyBwb3VyIGwnZXNwYWNlKS4KKyAgICAgICAgICAgIC0gPHRhZy9cXC9VbiBhbnRpc2xhc2ggbGl0dOlyYWwuCisgICAgICAgICAgICA8L2Rlc2NyaXA+CisgICAgICAgIDwvaXRlbWl6ZT4KKyAgPHRhZz48ZW0vcmVwcmVzZW50YXRpb24vPC90YWc+CisgICAgTGUgc2Vjb25kIG9w6XJhdGV1ciBkZSBjZXMgbGlnbmVzIGNvcnJlc3BvbmRhbnQg4CBsYSBz6XF1ZW5jZSBkZSBjYXJhY3TocmVzCisgICAgcXVpIGVuIGEgdW5lIGVzdCBsYSByZXBy6XNlbnRhdGlvbiBicmFpbGxlIGRlIGxhIHPpcXVlbmNlLgorICAgIENoYXF1ZSBjZWxsdWxlIGJyYWlsbGUgZXN0IHNw6WNpZmnpZSBjb21tZSB1bmUgc+lxdWVuY2UgZCd1biDgIGh1aXQgbnVt6XJvcworICAgIGRlIHBvaW50cy4gVW4gbnVt6XJvIGRlIHBvaW50IGVzdCB1biBjaGlmZnJlIGNvbXByaXMgZW50cmUgPHR0LzEvLTx0dC84LyAKKyAgICB0ZWxzIHF1ZSBk6WZpbmlzIHBhciBsYQorICAgIDxyZWYgaWQ9ImRvdHMiIG5hbWU9IlN0YW5kYXJkIEJyYWlsbGUgRG90IE51bWJlcmluZyBDb252ZW50aW9uIj4gKGNvbnZlbnRpb24gc3RhbmRhcmQKKyAgICBkZSBudW3pcm90YXRpb24gZGUgcG9pbnRzIGJyYWlsbGVzKS4gTGUgbnVt6XJvIGRlIHBvaW50IHNw6WNpYWwgPHR0LzAvCisgICAgZXN0IHJlY29ubnUgcXVhbmQgaWwgbidlc3QgcGFzIGVudG91cukgZGUgcGFyZW50aOhzZXMsIGV0IGlsIHNpZ25pZmllIGF1Y3VuCisgICAgcG9pbnQ7IGlsIG5lIHBldXQgcGFzIOp0cmUgdXRpbGlz6SBwYXJhbGzobGVtZW50IOAgdW4gYXV0cmUgbnVt6XJvIGRlIHBvaW50LgorPC9kZXNjcmlwPgorCis8c2VjdDI+T3Bjb2RlczxsYWJlbCBpZD0iY29udHJhY3Rpb24tb3Bjb2RlcyI+PHA+CitVbiBvcGNvZGUgZXN0IHVuIG1vdC1jbOkgcXVpIGRpdCBhdSB0cmFkdWN0ZXVyIGNvbW1lbnQgaW50ZXJwcul0ZXIgbGVzCitvcOlyYXRldXJzLiBMZXMgb3Bjb2RlcyBzb250IGdyb3Vw6XMgaWNpIHBhciBsZXVyIGZvbmN0aW9uLgorCis8c2VjdDM+QWRtaW5pc3RyYXRpb24gZGUgbGEgdGFibGU8bGFiZWwgaWQ9ImNvbnRyYWN0aW9uLW9wY29kZXMtYWRtaW5pc3RyYXRpb24iPjxwPgorQ2VzIG9w6XJhdGV1cnMgZmFjaWxpdGVudCBsJ+ljcml0dXJlIGRlcyB0YWJsZXMgZGUgYnJhaWxsZSBhYnLpZ+kuCitJbHMgbidvbnQgcGFzIGQnZWZmZXQgZGlyZWN0IHN1ciBsYSB0cmFkdWN0aW9uIGRlIGNhcmFjdOhyZS4KKzxkZXNjcmlwPgorICA8dGFnPjx0dD5pbmNsdWRlPC90dD4gPGVtPmNoZW1pbjwvZW0+PGxhYmVsIGlkPSJjb250cmFjdGlvbi1vcGNvZGUtaW5jbHVkZSI+PC90YWc+CisgICAgSW5jbHV0IGxlIGNvbnRlbnUgZCd1biBhdXRyZSBmaWNoaWVyLgorICAgIEwnaW5jbHVzaW9uIHBldXQgc2UgZmFpcmUg4CBuJ2ltcG9ydGUgcXVlbCBuaXZlYXUuCisgICAgTGVzIGNoZW1pbnMgcmVsYXRpZnMgc29udCBk6XRlcm1pbulzIHBhciByYXBwb3J0IGF1IHLpcGVydG9pcmUgZHUgZmljaGllciBpbmNsdS4KKyAgPHRhZz48dHQ+bG9jYWxlPC90dD4gPGVtPmxvY2FsZTwvZW0+PGxhYmVsIGlkPSJjb250cmFjdGlvbi1vcGNvZGUtbG9jYWxlIj48L3RhZz4KKyAgICBE6WZpbml0IGxhIGxvY2FsZSBwb3VyIGwnaW50ZXJwcul0YXRpb24gZCd1biBjYXJhY3TocmUgKG1pbnVzY3VsZSwKKyAgICBtYWp1c2N1bGUsIG51belyaXF1ZSwgZXRjKS4gTGEgbG9jYWxlIHBldXQg6nRyZSBk6WZpbmllIGNvbW1lOgorICAgIDxkZXNjcmlwPgorICAgICAgPHRhZz48ZW0+bGFuZ3VlPC9lbT5bPHR0Pl88L3R0PjxlbT5wYXlzPC9lbT5dWzx0dD4uPC90dD48ZW0+Y2hhcnNldDwvZW0+XVs8dHQ+QDwvdHQ+PGVtPm1vZGlmaWVyPC9lbT5dPC90YWc+CisgICAgICAgIExhIGNvbXBvc2FudGUgPGVtPmxhbmd1ZTwvZW0+IGVzdCByZXF1aXNlIGV0IGRldnJhaXQg6nRyZSB1biBjb2RlIGRlCisJbGFuZ3VlIOAgZGV1eCBsZXR0cmVzIDx0dD5JU08tNjM5PC90dD4uCisgICAgICAgIExhIGNvbXBvc2FudGUgPGVtPnBheXM8L2VtPiBlc3QgZmFjdWx0YXRpdmUgZXQgZGV2cmFpdCDqdHJlIHVuIGNvZGUgZGUKKwlwYXlzIOAgZGV1eCBsZXR0cmVzIDx0dD5JU08tMzE2NjwvdHQ+LgorICAgICAgICBMYSBjb21wb3NhbnRlIDxlbT5jaGFyc2V0PC9lbT4gZXN0IG9wdGlvbm5lbGxlIGV0IGRldnJhaXQg6nRyZSBsZSBub20KKwlkJ3VuZSB0YWJsZSBkZSBjYXJhY3TocmVzLCBjb21tZSA8dHQ+SVNPLTg4NTktMTwvdHQ+LgorICAgICAgPHRhZz5DPC90YWc+CisgICAgICAgIDctYml0IEFTQ0lJLgorICAgICAgPHRhZz4tPC90YWc+CisgICAgICAgIEF1Y3VuZSBsb2NhbGUuCisgICAgPC9kZXNjcmlwPgorICAgIExhIGRlcm5p6HJlIHNw6WNpZmljYXRpb24gZGUgbG9jYWxlIHMnYXBwbGlxdWUg4CB0b3V0ZSBsYSB0YWJsZS4gU2kKKyAgICB2b3VzIG4ndXRpbGlzZXogcGFzIGNldCBvcGNvZGUsIGxhIGxvY2FsZSA8dHQ+QzwvdHQ+IGVzdCB1dGlsaXPpZS4KKzwvZGVzY3JpcD4KKworPHNlY3QzPkTpZmluaXRpb24gZCd1biBzeW1ib2xlIHNw6WNpYWw8bGFiZWwgaWQ9ImNvbnRyYWN0aW9uLW9wY29kZXMtc3ltYm9scyI+PHA+CitDZXMgb3Bjb2RlcyBk6WZpbmlzc2VudCBsZXMgY2FyYWN06HJlcyBzcOljaWF1eCBxdWkgZG9pdmVudCDqdHJlIGluc+ly6XMgZGFucworbGUgdGV4dGUgYnJhaWxsZSBhZmluIGRlIGxlIHJlbmRyZSBwbHVzIGNsYWlyLgorPGRlc2NyaXA+CisgIDx0YWc+PHR0PmNhcHNpZ248L3R0PiA8ZW0+cG9pbnRzPC9lbT48bGFiZWwgaWQ9ImNvbnRyYWN0aW9uLW9wY29kZS1jYXBzaWduIj48L3RhZz4KKyAgICBMZSBzeW1ib2xlIHF1aSBtZXQgZW4gbWFqdXNjdWxlIHVuZSBzZXVsZSBsZXR0cmUuCisgIDx0YWc+PHR0PmJlZ2NhcHM8L3R0PiA8ZW0+cG9pbnRzPC9lbT48bGFiZWwgaWQ9ImNvbnRyYWN0aW9uLW9wY29kZS1iZWdjYXBzIj48L3RhZz4KKyAgICBMZSBzeW1ib2xlIHF1aSBjb21tZW5jZSB1biBibG9jIGRlIGxldHRyZXMgZW4gbWFqdXNjdWxlIOAgbCdpbnTpcmlldXIgZCd1bgorICAgIG1vdC4KKyAgPHRhZz48dHQ+ZW5kY2FwczwvdHQ+IDxlbT5wb2ludHM8L2VtPjxsYWJlbCBpZD0iY29udHJhY3Rpb24tb3Bjb2RlLWVuZGNhcHMiPjwvdGFnPgorICAgIExlIHN5bWJvbGUgcXVpIHRlcm1pbmUgdW4gYmxvYyBkZSBsZXR0cmVzIGVuIG1hanVzY3VsZXMg4CBsJ2ludOlyaWV1cgorICAgIGQndW4gbW90LgorICA8dGFnPjx0dD5sZXRzaWduPC90dD4gPGVtPnBvaW50czwvZW0+PGxhYmVsIGlkPSJjb250cmFjdGlvbi1vcGNvZGUtbGV0c2lnbiI+PC90YWc+CisgICAgTGUgc3ltYm9sZSBxdWkgZOlzaWduZSB1bmUgbGV0dHJlIG5lIGZhaXNhbnQgcGFzIHBhcnRpZSBkdSBtb3QuCisgIAorICA8dGFnPjx0dC9udW1zaWduLyA8ZW0vcG9pbnRzLzxsYWJlbCBpZD0iY29udHJhY3Rpb24tb3Bjb2RlLW51bXNpZ24iPjwvdGFnPiAgCisgICAgTGUgc3ltYm9sZSBtYXJxdWFudCBsZSBk6WJ1dCBkJ3VuIG5vbWJyZS4KKyAgPHRhZz48dHQ+bGFzdGxhcmdlc2lnbjwvdHQ+IDxlbT5wb2ludHM8L2VtPjxsYWJlbCBpZD0iY29udHJhY3Rpb24tb3Bjb2RlLW51bXNpZ24iPjwvdGFnPgorICAgIFRyYWR1aXQgbGVzIGNhcmFjdOhyZXMgcXVlbCBxdWUgc29pdCBsJ2VuZHJvaXQgb/kgaWxzIGFwcGFyYWlzc2VudC4KKyAgICBTdXBwcmltZSBsZXMgZXNwYWNlcyBxdWkgbGVzIHBy6WPoZGUgc2kgbGUgbW90IHBy6WPpZGVudCBhIOl06SBtYXJxdekKKyAgICBwYXIgbGUgY29kZSAibGFyZ2VzaWduIi4KKzwvZGVzY3JpcD4KKworPHNlY3QzPlRyYWR1Y3Rpb24gZGUgY2FyYWN06HJlPGxhYmVsIGlkPSJjb250cmFjdGlvbi1vcGNvZGVzLXRyYW5zbGF0aW9uIj48cD4KK0NlcyBvcGNvZGVzIGTpZmluaXNzZW50IGxlcyByZXBy6XNlbnRhdGlvbnMgYnJhaWxsZSBkZXMgc+lxdWVuY2VzIGRlIGNhcmFjdOhyZXMuCitDaGFjdW4gZCdldXggZOlmaW5pdCB1bmUgZW50cullIOAgbCdpbnTpcmlldXIgZGUgbGEgdGFibGUgZGUgYnJhaWxsZSBhYnLpZ+kuCitDZXMgZW50cullcyBwZXV2ZW50IOp0cmUgZOlmaW5pZXMgZGFucyBuJ2ltcG9ydGUgcXVlbCBvcmRyZSwgc2F1ZiwgY29tbWUKK3JlbWFycXXpIGNpLWRlc3NvdXMsIGxvcnNxdSdlbGxlcyBk6WZpbmlzc2VudCBkZXMgcmVwculzZW50YXRpb25zCithbHRlcm5hdGl2ZXMgZGUgbGEgbeptZSBz6XF1ZW5jZSBkZSBjYXJhY3TocmVzLgorCitDaGFjdW4gZGUgY2VzIG9wY29kZXMgYSB1biBvcOlyYXRldXJzIDxlbT5jYXJhY3TocmVzPC9lbT4gKHF1aSBkb2l0IOp0cmUKK3Nw6WNpZmnpIGNvbW1lIHVuZSA8ZW0+Y2hh7m5lPC9lbT4pLCBldCB1bmUgY29uZGl0aW9uIGRlIGNvbmZpZ3VyYXRpb24gZGlyaWdlYW50Citzb24gdXRpbGlzYXRpb24uCitMZSB0ZXh0ZSBlc3QgdHJhZHVpdCBzdHJpY3RlbWVudCBkZSBsYSBnYXVjaGUgdmVycyBsYSBkcm9pdGUsIGNhcmFjdOhyZSBwYXIKK2NhcmFjdOhyZSwgYXZlYyBsJ2VudHLpZSBsYSBwbHVzIGFjY2VwdGFibGUgcG91ciBjaGFxdWUgcG9zaXRpb24gdXRpbGlz6WUuCitTJ2lsIHkgYSBwbHVzIGQndW5lIGVudHLpZSBhY2NlcHRhYmxlIHBvdXIgdW5lIHBvc2l0aW9uIGRvbm7pZSwgY2VsbGUgYXlhbnQgbGEKK2NoYe5uZSBkZSBjYXJhY3TocmVzIGxhIHBsdXMgbG9uZ3VlIGVzdCB1dGlsaXPpZS4gUydpbCB5IGEgcGx1cyBkJ3VuZQorZW50cullIGFjY2VwdGFibGUgcG91ciBsYSBt6m1lIGNoYe5uZSBkZSBjYXJhY3TocmVzLCBjZWxsZSBk6WZpbmllIGxlIHBsdXMKK2F1IGTpYnV0IGRlIGxhIHRhYmxlIGVzdCB1dGlsaXPpZSAoYydlc3QgbGEgc2V1bGUgZOlwZW5kYW5jZSBkZSBsJ29yZHJlKS4KKworQmVhdWNvdXAgZGUgY2VzIG9wY29kZXMgb250IHVuIG9w6XJhdGV1ciA8ZW0+cG9pbnRzPC9lbT4gcXVpIGTpZmluaXQgbGEKK3JlcHLpc2VudGF0aW9uIGJyYWlsbGUgZGUgc29uIG9w6XJhdGV1ciA8ZW0+Y2FyYWN06HJlczwvZW0+LiBJbCBwZXV0CivqdHJlIGF1c3NpIHNw6WNpZmnpIGNvbW1lIHVuIHNpZ25lIOlnYWwgKDx0dD49PC90dD4pLCBhdSBxdWVsIGNhcyBpbAorc2lnbmlmaWUgbCd1bmUgZGVzIGRldXggY2hvc2VzLiBTaSBsJ2VudHLpZSBlc3QgcG91ciB1biBzZXVsIGNhcmFjdOhyZSwKK2NlbGEgc2lnbmlmaWUgcXVlIGxhIHJlcHLpc2VudGF0aW9uIGR1IGJyYWlsbGUgaW5mb3JtYXRpcXVlIHPpbGVjdGlvbm7pZQorKHZvaXIgbCdvcHRpb24gPHJlZiBpZD0ib3B0aW9ucy10ZXh0LXRhYmxlIiBuYW1lPSItdCI+IGVuIGxpZ25lIGRlCitjb21tYW5kZSBldCBsYSBsaWduZSA8cmVmIGlkPSJjb25maWd1cmUtdGV4dC10YWJsZSIgbmFtZT0idGV4dC10YWJsZSI+CitkdSBmaWNoaWVyIGRlIGNvbmZpZ3VyYXRpb24pIGRlIGNlIGNhcmFjdOhyZSBkb2l0IOp0cmUgdXRpbGlz6WUuIFNpCitjJ2VzdCBwb3VyIHVuZSBz6XF1ZW5jZSBtdWx0aS1jYXJhY3TocmVzLCBsYSByZXBy6XNlbnRhdGlvbiBwYXIgZOlmYXV0CitkZSBjaGFxdWUgY2FyYWN06HJlICh2b2lyIDxyZWYgaWQ9ImNvbnRyYWN0aW9uLW9wY29kZS1hbHdheXMiCituYW1lPSJhbHdheXMiPikgZGFucyB1bmUgc+lxdWVuY2UgZG9pdCDqdHJlIHV0aWxpc+llLgorCitDZXJ0YWlucyB0ZXJtZXMgc3DpY2lhdXggc29udCB1dGlsaXPpcyDgIGwnaW506XJpZXVyIGRlcyBkZXNjcmlwdGlvbnMgZGUgY2VzCitvcGNvZGVzLgorPGRlc2NyaXA+CisgIDx0YWc+d29yZDwvdGFnPgorICAgIFVuZSBz6XF1ZW5jZSBtYXhpbWFsZSBkJ3VuZSBvdSBwbHVzaWV1cnMgbGV0dHJlcyDgIGxhIHN1aXRlLgorPC9kZXNjcmlwPgorCitFbmZpbiwgdm9pY2kgbWFpbnRlbmFudCBsYSBkZXNjcmlwdGlvbiBkZXMgb3Bjb2RlcyBldXgtbeptZXM6Cis8ZGVzY3JpcD4KKyAgPHRhZz48dHQ+bGl0ZXJhbDwvdHQ+IDxlbT5jYXJhY3TocmVzPC9lbT48bGFiZWwgaWQ9ImNvbnRyYWN0aW9uLW9wY29kZS1saXRlcmFsIj48L3RhZz4KKyAgICBUcmFkdWl0IGNlIHF1aSBlc3QgbGnpIOAgbCdlc3BhY2UgZXQgcXVpIGNvbnRpZW50IHVuZSBz6XF1ZW5jZSBkZQorICAgIGNhcmFjdOhyZXMgZW4gYnJhaWxsZSBpbmZvcm1hdGlxdWUgKHZvaXIgbCdvcHRpb24KKyAgICA8cmVmIGlkPSJvcHRpb25zLXRleHQtdGFibGUiIG5hbWU9Ii10Ij4gZW4gbGlnbmUgZGUgY29tbWFuZGUgZXQgbGEgbGlnbmUKKyAgICA8cmVmIGlkPSJjb25maWd1cmUtdGV4dC10YWJsZSIgbmFtZT0idGV4dC10YWJsZSI+IGR1IGZpY2hpZXIgZGUKKyAgICAgY29uZmlndXJhdGlvbikuCisgIDx0YWc+PHR0PnJlcGxhY2U8L3R0PiA8ZW0+Y2FyYWN06HJlczwvZW0+IDxlbT5jYXJhY3TocmVzPC9lbT48bGFiZWwgaWQ9ImNvbnRyYWN0aW9uLW9wY29kZS1yZXBsYWNlIj48L3RhZz4KKyAgICBSZW1wbGFjZSBsYSBwcmVtaehyZSB2YWxldXIgZGVzIGNhcmFjdOhyZXMsIHF1ZWwgcXVlIHNvaXQgbCdlbmRyb2l0IG/5IGlscworICAgIGFwcGFyYWlzc2VudCwgcGFyIGxhIHNlY29uZGUuIExlcyBjYXJhY3TocmVzIHJlbXBsYWPpcyBuZSBzb250IHBhcworICAgIHLpaW5z6XLpcy4KKyAgPHRhZz48dHQ+YWx3YXlzPC90dD4gPGVtPmNhcmFjdOhyZXM8L2VtPiA8ZW0+cG9pbnRzPC9lbT48bGFiZWwgaWQ9ImNvbnRyYWN0aW9uLW9wY29kZS1hbHdheXMiPjwvdGFnPgorICAgIFRyYWR1aXQgbGVzIGNhcmFjdOhyZXMgcXVlbCBxdWUgc29pdCBsJ2VuZHJvaXQgb/kgaWxzIGFwcGFyYWlzc2VudC4KKyAgICBTJ2lsIG4neSBhIHF1J3VuIGNhcmFjdOhyZSwgYWxvcnMsIGVuIHBsdXMsIGTpZmluaXQgbGEgcmVwculzZW50YXRpb24gcGFyCisgICAgZOlmYXV0IGRlIGNlIGNhcmFjdOhyZS4KKyAgPHRhZz48dHQ+cmVwZWF0YWJsZTwvdHQ+IDxlbT5jYXJhY3TocmVzPC9lbT4gPGVtPnBvaW50czwvZW0+PGxhYmVsIGlkPSJjb250cmFjdGlvbi1vcGNvZGUtcmVwZWF0ZWQiPjwvdGFnPgorICAgIFRyYWR1aXQgbGVzIGNhcmFjdOhyZXMgcXVlbCBxdWUgc29pdCBsJ2VuZHJvaXQgb/kgaWxzIGFwcGFyYWlzc2VudC4gSWdub3JlIHRvdXRlCisgICAgculw6XRpdGlvbiBpbW3pZGlhdGUgZGUgbGEgbeptZSBz6XF1ZW5jZS4KKyAgPHRhZz48dHQ+bGFyZ2VzaWduPC90dD4gPGVtPmNhcmFjdOhyZXM8L2VtPiA8ZW0+cG9pbnRzPC9lbT48bGFiZWwgaWQ9ImNvbnRyYWN0aW9uLW9wY29kZS1sYXJnZXNpZ24iPjwvdGFnPgorICAgIFRyYWR1aXQgbGVzIGNhcmFjdOhyZXMgcXVlbCBxdWUgc29pdCBsJ2VuZHJvaXQgb/kgaWxzIGFwcGFyYWlzc2VudC4gU3VwcHJpbWUgbGVzCisgICAgZXNwYWNlcyBlbnRyZSBsZXMgbW90cyBxdWkgc2Ugc3VpdmVudCBldCBxdWkgc29udCBn6XLpcyBwYXIgY2V0IG9wY29kZS4KKyAgPHRhZz48dHQ+d29yZDwvdHQ+IDxlbT5jYXJhY3TocmVzPC9lbT4gPGVtPnBvaW50czwvZW0+PGxhYmVsIGlkPSJjb250cmFjdGlvbi1vcGNvZGUtd29yZCI+PC90YWc+CisgICAgVHJhZHVpdCBsZXMgY2FyYWN06HJlcyBzJ2lscyBmb3JtZW50IHVuIG1vdC4KKyAgPHRhZz48dHQ+am9pbndvcmQ8L3R0PiA8ZW0+Y2FyYWN06HJlczwvZW0+IDxlbT5wb2ludHM8L2VtPjxsYWJlbCBpZD0iY29udHJhY3Rpb24tb3Bjb2RlLWpvaW53b3JkIj48L3RhZz4KKyAgICBUcmFkdWl0IGxlcyBjYXJhY3TocmVzIHMnaWxzIGZvcm1lbnQgdW4gbW90LiBTdXBwcmltZSBsJ2VzcGFjZSBzdWl2YW50IHNpCisgICAgbGUgcHJlbWllciBjYXJhY3TocmUgcXVpIGxlIHN1aXQgZXN0IHVuZSBsZXR0cmUuCisgIDx0YWc+PHR0Pmxvd3dvcmQ8L3R0PiA8ZW0+Y2FyYWN06HJlczwvZW0+IDxlbT5wb2ludHM8L2VtPjxsYWJlbCBpZD0iY29udHJhY3Rpb24tb3Bjb2RlLWxvd3dvcmQiPjwvdGFnPgorICAgIFRyYWR1aXQgbGVzIGNhcmFjdOhyZXMgcydpbHMgZm9ybWVudCB1biBtb3QgbGnpIOAgdW4gZXNwYWNlLiAKKyAgPHRhZz48dHQ+Y29udHJhY3Rpb248L3R0PiA8ZW0+Y2FyYWN06HJlczwvZW0+PGxhYmVsIGlkPSJjb250cmFjdGlvbi1vcGNvZGUtY29udHJhY3Rpb24iPjwvdGFnPgorICAgIEZhaXQgcHLpY+lkZXIgbGVzIGNhcmFjdOhyZXMgZCd1biBzaWduZS1sZXR0cmUgKHZvaXIKKyAgICA8cmVmIGlkPSJjb250cmFjdGlvbi1vcGNvZGUtbGV0c2lnbiIgbmFtZT0ibGV0c2lnbiI+KSBzJ2lscyBmb3JtZW50IHVuIG1vdC4KKyAgPHRhZz48dHQ+c3Vmd29yZDwvdHQ+IDxlbT5jYXJhY3TocmVzPC9lbT4gPGVtPnBvaW50czwvZW0+PGxhYmVsIGlkPSJjb250cmFjdGlvbi1vcGNvZGUtc3Vmd29yZCI+PC90YWc+CisgICAgVHJhZHVpdCBsZXMgY2FyYWN06HJlcyBzJ2lscyBmb3JtZW50IHNvaXQgdW4gbW90LCBzb2l0IHMnaWxzIHNvbnQgYXUKKyAgICBk6WJ1dCBkJ3VuIG1vdC4KKyAgPHRhZz48dHQ+cHJmd29yZDwvdHQ+IDxlbT5jYXJhY3TocmVzPC9lbT4gPGVtPnBvaW50czwvZW0+PGxhYmVsIGlkPSJjb250cmFjdGlvbi1vcGNvZGUtcHJmd29yZCI+PC90YWc+CisgICAgVHJhZHVpdCBsZXMgY2FyYWN06HJlcyBzJ2lscyBmb3JtZW50IHNvaXQgdW4gbW90LCBzb2l0IHMnaWxzIHNvbnQg4CBsYQorICAgICAgICBmaW4gZCd1biBtb3QuCisgIDx0YWc+PHR0PmJlZ3dvcmQ8L3R0PiA8ZW0+Y2FyYWN06HJlczwvZW0+IDxlbT5wb2ludHM8L2VtPjxsYWJlbCBpZD0iY29udHJhY3Rpb24tb3Bjb2RlLWJlZ3dvcmQiPjwvdGFnPgorICAgIFRyYWR1aXQgbGVzIGNhcmFjdOhyZXMgcydpbHMgc29udCBhdSBk6WJ1dCBkJ3VuIG1vdC4KKyAgPHRhZz48dHQ+YmVnbWlkd29yZDwvdHQ+IDxlbT5jYXJhY3TocmVzPC9lbT4gPGVtPnBvaW50czwvZW0+PGxhYmVsIGlkPSJjb250cmFjdGlvbi1vcGNvZGUtYmVnbWlkd29yZCI+PC90YWc+CisgICAgVHJhZHVpdCBsZXMgY2FyYWN06HJlcyBzJ2lscyBzb250IGF1IGTpYnV0IG91IGF1IG1pbGlldSBkJ3VuIG1vdC4KKyAgPHRhZz48dHQ+bWlkd29yZDwvdHQ+IDxlbT5jYXJhY3TocmVzPC9lbT4gPGVtPnBvaW50czwvZW0+PGxhYmVsIGlkPSJjb250cmFjdGlvbi1vcGNvZGUtbWlkd29yZCI+PC90YWc+CisgICAgVHJhZHVpdCBsZXMgY2FyYWN06HJlcyBzJ2lscyBzb250IGF1IG1pbGlldSBkJ3VuIG1vdC4KKyAgPHRhZz48dHQ+bWlkZW5kd29yZDwvdHQ+IDxlbT5jYXJhY3TocmVzPC9lbT4gPGVtPnBvaW50czwvZW0+PGxhYmVsIGlkPSJjb250cmFjdGlvbi1vcGNvZGUtbWlkZW5kd29yZCI+PC90YWc+CisgICAgVHJhZHVpdCBsZXMgY2FyYWN06HJlcyBzJ2lscyBzb250IGF1IG1pbGlldSBvdSDgIGxhIGZpbiBkJ3VuIG1vdC4KKyAgPHRhZz48dHQ+ZW5kd29yZDwvdHQ+IDxlbT5jYXJhY3TocmVzPC9lbT4gPGVtPnBvaW50czwvZW0+PGxhYmVsIGlkPSJjb250cmFjdGlvbi1vcGNvZGUtZW5kd29yZCI+PC90YWc+CisgICAgVHJhZHVpdCBsZXMgY2FyYWN06HJlcyBzJ2lscyBzb250IOAgbGEgZmluIGQndW4gbW90LgorICA8dGFnPjx0dD5wcmVwdW5jPC90dD4gPGVtPmNhcmFjdOhyZXM8L2VtPiA8ZW0+cG9pbnRzPC9lbT48bGFiZWwgaWQ9ImNvbnRyYWN0aW9uLW9wY29kZS1wcmVwdW5jIj48L3RhZz4KKyAgICBUcmFkdWl0IGxlcyBjYXJhY3TocmVzIHMnaWxzIGZvbnQgcGFydGllIGRlIGxhIHBvbmN0dWF0aW9uIGF1IGTpYnV0IGQndW4KKyAgICBtb3QuCisgIDx0YWc+PHR0PnBvc3RwdW5jPC90dD4gPGVtPmNhcmFjdOhyZXM8L2VtPiA8ZW0+cG9pbnRzPC9lbT48bGFiZWwgaWQ9ImNvbnRyYWN0aW9uLW9wY29kZS1wb3N0cHVuYyI+PC90YWc+CisgICAgVHJhZHVpdCBsZXMgY2FyYWN06HJlcyBzJ2lscyBmb250IHBhcnRpZSBkZSBsYSBwb25jdHVhdGlvbiDgIGxhIGZpbiBkJ3VuCisgICAgbW90LgorICA8dGFnPjx0dD5iZWdudW08L3R0PiA8ZW0+Y2FyYWN06HJlczwvZW0+IDxlbT5wb2ludHM8L2VtPjxsYWJlbCBpZD0iY29udHJhY3Rpb24tb3Bjb2RlLWJlZ251bSI+PC90YWc+CisgICAgVHJhZHVpdCBsZXMgY2FyYWN06HJlcyBzJ2lscyBzb250IGF1IGTpYnV0IGQndW4gbm9tYnJlLgorICA8dGFnPjx0dD5taWRudW08L3R0PiA8ZW0+Y2FyYWN06HJlczwvZW0+IDxlbT5wb2ludHM8L2VtPjxsYWJlbCBpZD0iY29udHJhY3Rpb24tb3Bjb2RlLW1pZG51bSI+PC90YWc+CisgICAgVHJhZHVpdCBsZXMgY2FyYWN06HJlcyBzJ2lscyBzb250IGF1IG1pbGlldSBkJ3VuIG5vbWJyZS4KKyAgPHRhZz48dHQ+ZW5kbnVtPC90dD4gPGVtPmNhcmFjdOhyZXM8L2VtPiA8ZW0+cG9pbnRzPC9lbT48bGFiZWwgaWQ9ImNvbnRyYWN0aW9uLW9wY29kZS1lbmRudW0iPjwvdGFnPgorICAgIFRyYWR1aXQgbGVzIGNhcmFjdOhyZXMgcydpbHMgc29udCDgIGxhIGZpbiBkJ3VuIG5vbWJyZS4KKzwvZGVzY3JpcD4KKworPHNlY3QzPkNsYXNzZXMgZGUgY2FyYWN06HJlPGxhYmVsIGlkPSJjb250cmFjdGlvbi1vcGNvZGVzLWNsYXNzZXMiPjxwPgorQ2VzIG9wY29kZXMgZOlmaW5pc3NlbnQgZXQgdXRpbGlzZW50IGRlcyBjbGFzc2VzIGRlIGNhcmFjdOhyZXMuIFVuZSBjbGFzc2UgZGUKK2NhcmFjdOhyZXMgYXNzb2NpZSB1biB0eXBlIGRlIGNhcmFjdOhyZSDgIHVuIG5vbS4gTGUgbm9tIHNlIHLpZuhyZSBhbG9ycyDgCituJ2ltcG9ydGUgcXVlbCBjYXJhY3TocmUg4CBsJ2ludOlyaWV1ciBkZSBsYSBjbGFzc2UuIFVuIGNhcmFjdOhyZSBwZXV0CithcHBhcnRlbmlyIOAgcGx1cyBkJ3VuZSBjbGFzc2UuCisKK0xlcyBjbGFzc2VzIGRlIGNhcmFjdOhyZSBzdWl2YW50ZXMgc29udCBhdXRvbWF0aXF1ZW1lbnQgcHLpZOlmaW5pZXMsIGJhc+llcyBzdXIKK2xhIGxvY2FsZSBz6WxlY3Rpb25u6WUuCis8ZGVzY3JpcD4KKyAgPHRhZz5kaWdpdDwvdGFnPgorICAgIENhcmFjdOhyZXMgbnVt6XJpcXVlcy4KKyAgPHRhZz5sZXR0ZXI8L3RhZz4KKyAgICBMZXMgY2FyYWN06HJlcyBhbHBoYWLpdGlxdWVzIG1hanVzY3VsZSBvdSBtaW51c2N1bGUuCisgICAgQ2VydGFpbmVzIGxvY2FsZXMgb250IGRlcyBsZXR0cmVzIHN1cHBs6W1lbnRhaXJlcyBxdWkgbmUgc29udCBuaSBlbiBtYWp1c2N1bGUKKyAgICBuaSBlbiBtaW51c2N1bGUuCisgIDx0YWc+bG93ZXJjYXNlPC90YWc+CisgICAgTGVzIGNhcmFjdOhyZXMgYWxwaGFi6XRpcXVlcyBtaW51c2N1bGVzLgorICA8dGFnPnB1bmN0dWF0aW9uPC90YWc+CisgICAgQ2FyYWN06HJlcyBpbXByaW1hYmxlcyBxdWkgbmUgc29udCBuaSBkZXMgZXNwYWNlcyBuaSBhbHBoYW51belyaXF1ZXMuCisgIDx0YWc+c3BhY2U8L3RhZz4KKyAgICBDYXJhY3TocmVzIGQnZXNwYWNlbWVudC4KKyAgICBEYW5zIGxhIGxvY2FsZSBwYXIgZOlmYXV0LCBpbCBzJ2FnaXQgZGU6IGVzcGFjZSwgdGFidWxhdGlvbiBob3Jpem9udGFsZSwgdGFidWxhdGlvbgorICAgIHZlcnRpY2FsZSwgcmV0b3VyIGNoYXJpb3QsIG5vdXZlbGxlIGxpZ25lLCBzYXV0IGRlIHBhZ2UuCisgIDx0YWc+dXBwZXJjYXNlPC90YWc+CisgICAgQ2FyYWN06HJlcyBhbHBoYWLpdGlxdWVzIGVuIG1hanVzY3VsZXMuCis8L2Rlc2NyaXA+CisKK0xlcyBvcGNvZGVzIHF1aSBk6WZpbmlzc2VudCBldCB1dGlsaXNlbnQgZGVzIGNsYXNzZXMgZGUgY2FyYWN06HJlcyBzb250OgorPGRlc2NyaXA+CisgIDx0YWc+PHR0PmNsYXNzPC90dD4gPGVtPm5vbTwvZW0+IDxlbT5jYXJhY3TocmVzPC9lbT48bGFiZWwgaWQ9ImNvbnRyYWN0aW9uLW9wY29kZS1jbGFzcyI+PC90YWc+CisgICAgROlmaW5pdCB1bmUgbm91dmVsbGUgY2xhc3NlIGRlIGNhcmFjdOhyZS4gTCdvcOlyYXRldXIgPGVtPmNhcmFjdOhyZXM8L2VtPgorICAgIGRvaXQg6nRyZSBzcOljaWZp6SBjb21tZSB1bmUgPGVtPmNoYe5uZTwvZW0+LiBVbmUgY2xhc3NlIGRlIGNhcmFjdOhyZSBuZSBwZXV0CisgICAgcGFzIOp0cmUgdXRpbGlz6WUgdGFudCBxdSdlbGxlIG4nZXN0IHBhcyBk6WZpbmllLgorICA8dGFnPjx0dD5hZnRlcjwvdHQ+IDxlbT5jbGFzczwvZW0+IDxlbT5vcGNvZGU8L2VtPiAuLi48bGFiZWwgaWQ9ImNvbnRyYWN0aW9uLW9wY29kZS1hZnRlciI+PC90YWc+CisgICAgTCdvcGNvZGUgc3DpY2lmaekgZXN0IGFzc2V6IGNvbnRyYWludCBkYW5zIGxlIHNlbnMgb/kgbGEgc+lxdWVuY2UgZGUKKyAgICBjYXJhY3TocmVzIGFk6XF1YXQgZG9pdCDqdHJlIGltbelkaWF0ZW1lbnQgcHLpY+lk6WUgcGFyIHVuIGNhcmFjdOhyZQorICAgIGFwcGFydGVuYW50IOAgbGEgY2xhc3NlIHNw6WNpZmnpZS4KKyAgICBTaSB2b3VzIHV0aWxpc2V6IHBsdXMgZCd1bmUgZm9pcyBjZXQgb3Bjb2RlIHN1ciBsYSBt6m1lIGxpZ25lLCBsJ3VuaW9uIGRlcworICAgIGNhcmFjdOhyZXMgZGUgdG91dGUgbGEgY2xhc3NlIGVzdCB1dGlsaXPpZS4KKyAgPHRhZz48dHQ+YmVmb3JlPC90dD4gPGVtPmNsYXNzPC9lbT4gPGVtPm9wY29kZTwvZW0+IC4uLjxsYWJlbCBpZD0iY29udHJhY3Rpb24tb3Bjb2RlLWJlZm9yZSI+PC90YWc+CisgICAgTCdvcGNvZGUgc3DpY2lmaekgZXN0IGFzc2V6IGNvbnRyYWludCBkYW5zIGxlIHNlbnMgb/kgbGEgc+lxdWVuY2UgZGUKKyAgICBjYXJhY3TocmVzIGFk6XF1YXQgZG9pdCDqdHJlIGltbelkaWF0ZW1lbnQgc3VpdmllIHBhciB1biBjYXJhY3TocmUKKyAgICBhcHBhcnRlbmFudCDgIGxhIGNsYXNzZSBzcOljaWZp6WUuCisgICAgU2kgdm91cyB1dGlsaXNleiBwbHVzIGQndW5lIGZvaXMgY2V0IG9wY29kZSBzdXIgbGEgbeptZSBsaWduZSwgbCd1bmlvbiBkZXMKKyAgICBjYXJhY3TocmVzIGRlIHRvdXRlIGxhIGNsYXNzZSBlc3QgdXRpbGlz6WUuCis8L2Rlc2NyaXA+CisKKzxzZWN0MT5UYWJsZXMgZGUgdG91Y2hlczxsYWJlbCBpZD0idGFibGUta2V5Ij48cD4KK0xlcyBmaWNoaWVycyBhdXggbm9tcyBheWFudCBsYSBmb3JtZSA8dHQvKi5rdGIvIHNvbnQgZGVzIHRhYmxlcyBkZSB0b3VjaGVzLCBldCBjZXV4CithdXggbm9tcyBheWFudCBsYSBmb3JtZSA8dHQvKi5rdGkvIHNvbnQgZGVzIHNvdXMtdGFibGVzIGRlIHRvdWNoZXMuCitJbHMgc29udCB1dGlsaXPpcyBwYXIgQlJMVFRZIHBvdXIgYXNzb2NpZXIgZGVzIGNvbWJpbmFpc29ucyBkZSB0b3VjaGVzCitkZSBsJ2FmZmljaGV1ciBicmFpbGxlIGV0IGR1IGNsYXZpZXIg4CBkZXMgY29tbWFuZGVzIEJSTFRUWS4KKworTGVzIG5vbXMgZGUgZmljaGllciBkZSB0YWJsZSBkZSB0b3VjaGVzIGRlIGwnYWZmaWNoZXVyIGJyYWlsbGUgY29tbWVuY2VudCBwYXIKKzx0dC9icmwtLzxlbS94eC88dHQvLS8iLCBv+SA8ZW0veHgvIHJlcHLpc2VudGUgbGUKKzxyZWYgaWQ9ImRyaXZlcnMiIG5hbWU9ImNvZGUgZCdpZGVudGlmaWNhdGlvbiBkZSBwaWxvdGUiPiDgIGRldXggbGV0dHJlcy4gTGUgcmVzdGUKK2R1IG5vbSBpZGVudGlmaWUgbGUocykgbW9k6GxlKHMpIHBvdXIgbGUocylxdWVsKHMpIGxhIHRhYmxlIGRlIHRvdWNoZXMgZXN0Cit1dGlsaXPpZS4KKworTGVzIG5vbXMgZGUgZmljaGllciBkZSB0YWJsZSBkZSB0b3VjaGVzIGR1IGNsYXZpZXIgY29tbWVuY2VudCBwYXIgPHR0L2tiZC0vLgorTGUgcmVzdGUgZHUgbm9tIGTpY3JpdCBsZSB0eXBlIGRlIGNsYXZpZXIgcG91ciBsZXF1ZWwgYSDpdOkgY29u53VlIGxhIHRhYmxlCitkZSB0b3VjaGVzLgorCitMZXMgdGFibGVzIGRlIHRvdWNoZXMgc3VpdmFudGVzIHNvbnQgZm91cm5pZXM6Cis8ZGVzY3JpcD4KKyAgPHRhZy9icmFpbGxlL2Fzc29jaWF0aW9ucyBwb3VyIGxlcyBjbGF2aWVycyBicmFpbGxlCisgIDx0YWcvZGVza3RvcC9hc3NvY2lhdGlvbnMgcG91ciBsZXMgY2xhdmllcnMgY29tcGxldHMKKyAgPHRhZy9rZXlwYWQvYXNzb2NpYXRpb25zIHBvdXIgbGEgbmF2aWdhdGlvbiDgIHBhcnRpciBkdSBwYXbpIG51belyaXF1ZQorICA8dGFnL2xhcHRvcC9hc3NvY2lhdGlvbnMgcG91ciBsZXMgY2xhdmllcnMgc2FucyBwYXbpIG51belyaXF1ZQorICA8dGFnL3N1bl90eXBlNi9hc3NvY2lhdGlvbnMgcG91ciBsZXMgY2xhdmllcnMgU3VuIFR5cGUgNgorPC9kZXNjcmlwPgorICAgICAgVm9pciBsJ29wdGlvbiA8cmVmIGlkPSJvcHRpb25zLWtleS10YWJsZSIgbmFtZT0iLWsiPiBlbiBsaWduZSBkZSBjb21tYW5kZQorICAgICAgZXQgbGEgbGlnbmUgCisgICAgICA8cmVmIGlkPSJjb25maWd1cmUta2V5LXRhYmxlIiBuYW1lPSJrZXktdGFibGUiPiBkdSBmaWNoaWVyIGRlCisgICAgICBjb25maWd1cmF0aW9uIHBvdXIgcGx1cyBkZSBk6XRhaWxzIGNvbmNlcm5hbnQgbGEgbWFuaehyZSBkZSBz6WxlY3Rpb25uZXIKKyAgICAgIHVuZSB0YWJsZSBkZSB0b3VjaGVzIGRlIGNsYXZpZXIuCisgICAgICAKKyAgICAgIDxzZWN0Mj5Gb3JtYXQgZGVzIHRhYmxlcyBkZSB0b3VjaGVzPHA+CitVbmUgdGFibGUgZGUgdG91Y2hlcyBjb25zaXN0ZSBlbiB1bmUgc+lxdWVuY2UgZCdpbnN0cnVjdGlvbnMsIHVuZSBwYXIgbGlnbmUsCitxdWkgZOlmaW5pdCBjb21tZW50IGxlcyB0b3VjaGVzIGV0IGxlcyBjb21iaW5haXNvbnMgZGUgdG91Y2hlcyBzZXJvbnQgaW50ZXJwcul06WVzLgorVm91cyBkZXZleiB1dGlsaXNlciBsJ2VuY29kYWdlIDx0dC9VVEYtOC8uCitVbiBibGFuYyAoZXNwYWNlcywgdGFicykgdGFudCBhdSBk6WJ1dCBkZSBsYSBsaWduZSBxdSdhYXZhbnQgZXQvb3UgYXBy6HMgbidpbXBvcnRlIHF1ZWwgb3DpcmF0ZXVyLAorZXN0IGlnbm9y6S4KKworTGVzIGxpZ25lcyBuZSBjb250ZW5hbnQgcXVlIGRlcyBibGFuY3Mgc29udCBpZ25vcullcy4KK1NpIGxlIHByZW1pZXIgY2FyYWN06HJlIG5vbiBibGFuYyBkJ3VuZSBsaWduZSBlc3QgdW4gbm9tYnJlICgiJm51bTsiKSwgY2V0dGUgbGlnbmUgZXN0Cit1biBjb21tZW50YWlyZSBldCBlc3QgaWdub3LpZS4KKworTCdvcmRyZSBkZSBy6XNvbHV0aW9uIGRlIGNoYXF1ZSBhcHB1aSBkZSB0b3VjaGUv6XbpbmVtZW50IHF1aSBzZSBwcm9kdWl0Citlc3QgbGUgc3VpdmFudDoKKzxlbnVtPgorICA8aXRlbT4KKyAgICBVbiBhcHB1aSBzdXIgdW5lIHRvdWNoZSBkZSByYWNjb3VyY2kgb3UgdW5lIGFjdGlvbiBk6WZpbmllIGRhbnMgbGUgY29udGV4dGUgYWN0dWVsLgorICAgIFZvaXIgbGEgbGlnbmUgCisgICAgPHJlZiBpZD0ia2V5LXRhYmxlLWhvdGtleSIgbmFtZT0iaG90a2V5Ij4KKyAgICBwb3VyIGRlcyBk6XRhaWxzLgorICA8aXRlbT4KKyAgICBVbmUgY29tYmluYWlzb24gZGUgdG91Y2hlcyBk6WZpbmllIGRhbnMgbGUgY29udGV4dGUgYWN0dWVsLgorICAgIFZvaXIgbGEgbGlnbmUKKyAgICA8cmVmIGlkPSJrZXktdGFibGUtYmluZCIgbmFtZT0iYmluZCI+CisgICAgcG91ciBkZXMgZOl0YWlscy4KKyAgPGl0ZW0+CisgICAgVW5lIGNvbW1hbmRlIGR1IGNsYXZpZXIgYnJhaWxsZSBk6WZpbmllIGRhbnMgbGUgY29udGV4dGUgYWN0dWVsLgorICAgIFZvaXIgbGVzIGxpZ25lcworICAgIDxyZWYgaWQ9ImtleS10YWJsZS1tYXAiIG5hbWU9Im1hcCI+CisgICAgZXQKKyAgICA8cmVmIGlkPSJrZXktdGFibGUtc3VwZXJpbXBvc2UiIG5hbWU9InN1cGVyaW1wb3NlIj5kCisgICAgcG91ciBkZXMgZOl0YWlscy4KKyAgPGl0ZW0+CisgICAgVW5lIGNvbWJpbmFpc29uIGRlIHRvdWNoZXMgZOlmaW5pZSBkYW5zIGxlIGNvbnRleHRlIHBhciBk6WZhdXQuCisgICAgVm9pciBsYSBsaWduZQorICAgIDxyZWYgaWQ9ImtleS10YWJsZS1iaW5kIiBuYW1lPSJiaW5kIj4KKyAgICBwb3VyIGRlcyBk6XRhaWxzLgorPC9lbnVtPgorCisgICAgICBMZXMgbGlnbmVzIHN1aXZhbnRlcyBzb250IGZvdXJuaWVzOgorCis8c2VjdDM+TGEgbGlnbmUgQXNzaWduPGxhYmVsIGlkPSJrZXktdGFibGUtYXNzaWduIj48cD4KK0Ny6WUgb3UgbWV0IOAgam91ciB1bmUgdmFyaWFibGUgYXNzb2Np6WUgYXUgbml2ZWF1IGluY2x1ZGUgYWN0dWVsLgorTGEgdmFyaWFibGUgZXN0IHZpc2libGUgYXV4IG5pdmVhdXggaW5jbHVkZSBhY3R1ZWwgZXQgaW5m6XJpZXVyLCBtYWlzIHBhcyBhdXgKK25pdmVhdXggaW5jbHVkZSBzdXDpcmlldXJzLgorCis8dHQvYXNzaWduLyA8ZW0vdmFyaWFibGUvIFs8ZW0vdmFsZXVyL10KKyAgICAgIDxkZXNjcmlwPgorIDx0YWc+PGVtL3ZhcmlhYmxlLzwvdGFnPgorICAgIExlIG5vbSBkZSBsYSB2YXJpYWJsZS4KKyAgICBTaSBsYSB2YXJpYWJsZSBuJ2V4aXN0ZSBwYXMgZOlq4CBhdSBuaXZlYXUgaW5jbHVkZSBhY3R1ZWwsIGVsbGUgc2VyYSBjcunpZS4KKyAgPHRhZz48ZW0vdmFsZXVyLzwvdGFnPgorICAgIExhIHZhbGV1ciBxdWkgc2VyYSBhc3NvY2npZSDgIGxhIHZhcmlhYmxlLgorICAgIFNpIG9uIG5lIGxhIGZvdXJuaXQgcGFzLCB1bmUgdmFsZXVyIHrpcm8gKG51bGwpIGVzdCBhZmZlY3TpZS4KKzwvZGVzY3JpcD4KKworTGEgc+lxdWVuY2UgZCfpY2hhcHBlbWVudCBce3ZhcmlhYmxlfSBlc3QgcmVtcGxhY+llIHBhciBsYSB2YWxldXIgZGUgbGEKK3ZhcmlhYmxlIG5vbW3pZSBkYW5zIGxlcyBhY2NvbGFkZXMuIExhIHZhcmlhYmxlIGRvaXQg6nRyZSBk6WZpbmllIGF1IG5pdmVhdSAKK2luY2x1ZGUgYWN0dWVsIG91IHN1cOlyaWV1ci4KKworRXhlbXBsZXM6Cis8aXRlbWl6ZT4KKyAgPGl0ZW0+PHR0L2Fzc2lnbiBudWxsVmFsdWUvCisgIDxpdGVtPjx0dC9hc3NpZ24gUmV0dXJuS2V5IEtleTEvCisgIDxpdGVtPjx0dC9iaW5kIFx7UmV0dXJuS2V5fSBSRVRVUk4vCis8L2l0ZW1pemU+CisKKzxzZWN0Mz5MYSBsaWduZSBCaW5kPGxhYmVsIGlkPSJrZXktdGFibGUtYmluZCI+PHA+CitE6WZpbml0IGxhIGNvbW1hbmRlIHF1aSBlc3QgQlJMVFRZIGVzdCBleOljdXTpZSBxdWFuZCBvbiBhcHB1aWUgc3VyIHVuZSBvdSBwbHVzaWV1cnMKK2NvbWJpbmFpc29ucyBkZSB0b3VjaGVzIHBhcnRpY3VsaehyZXMuCitMJ2Fzc29jaWF0aW9uIGVzdCBk6WZpbmllIGRhbnMgbGUgY29udGV4dGUgYWN0dWVsLgorCisgICAgICAgIDx0dC9iaW5kLyA8ZW0vdG91Y2hlcy8gPGVtL2NvbW1hbmRlLworICAgICAgICAgICAgPGRlc2NyaXA+CisgICAgICAgICAgICAgIDx0YWc+PGVtL3RvdWNoZXMvPC90YWc+CisgICAgICAgICAgICAgICAgTGEgY29tYmluYWlzb24gZGUgdG91Y2hlcyDgIGFzc29jaWVyLgorICAgICAgICAgICAgICAgQydlc3QgdW5lIHPpcXVlbmNlIGQndW4gb3UgcGx1c2lldXJzIG5vbXMgZGUgdG91Y2hlcyBz6XBhculzIHBhciAKKyAgICAgICAgICAgICAgIGRlcyBzaWduZXMgcGx1cyAoPHR0LysvKS4gTGUgbm9tIGRlIHRvdWNoZSDgIGxhIGZpbiAob3Ugc2V1bGVtZW50KQorICAgICAgICAgICAgICAgcGV1dCDqdHJlIOl2ZW50dWVsbGVtZW50IHBy6WPpZOkgZCd1biBwb2ludCBkJ2V4Y2xhbWF0aW9uCisgICAgICAgICAgICAgICAoPHR0LyEvKS4gVm91cyBwb3V2ZXogYXBwdXllciBzdXIgbGVzIHRvdWNoZXMgZGFucworICAgICAgICAgICAgICAgbidpbXBvcnRlIHF1ZWwgb3JkcmUgc2F1ZiBzaSBsZSBub20gZGUgbGEgdG91Y2hlIOAgbGEgZmluIGVzdAorICAgICAgICAgICAgICAgcHLpY+lk6SBkJ3VuIHBvaW50IGQnZXhjbGFtYXRpb24sIGFsb3JzIG9uIGRvaXQgYXBwdXllciBkZXNzdXMKKyAgICAgICAgICAgICAgIGVuIGRlcm5pZXIuCisgICAgICAgICAgICAgICBMZSBwculmaXhlIGR1IHBvaW50IGQnZXhjbGFtYXRpb24gc2lnbmlmaWUgcXVlIGxhIGNvbW1hbmRlIGVzdAorICAgICAgICAgICAgICAgZXjpY3V06WUgZOhzIHF1J29uIGFwcHVpZSBzdXIgY2V0dGUgdG91Y2hlLiBTJ2lsIG4nZXN0IHBhcworICAgICAgICAgICAgICAgdXRpbGlz6SwgbGEgY29tbWFuZGUgZXN0IGV46WN1dOllIGTocyBxdSdvbiBlZmZlY3R1ZQorICAgICAgICAgICAgICAgdW5lIGRlcyB0b3VjaGVzLgorICAgICAgICAgICAgICA8dGFnPjxlbS9jb21tYW5kZS88L3RhZz4KKyAgICAgICAgICAgICAgICBMZSBub20gZCd1bmUgY29tbWFuZGUgQlJMVFRZLiBVbiBvdSBwbHVzaWV1cnMgbW9kaWZpY2F0ZXVycworICAgICAgICAgICAgICAgIHBldXZlbnQg6XZlbnR1ZWxsZW1lbnQg6nRyZSBhc3NvY2npIGF1IG5vbSBkZSBsYSBjb21tYW5kZSBlbiAKKyAgICAgICAgICAgICAgICB1dGlsaXNhbnQgdW4gc2lnbmUgcGx1cyAoPHR0LysvKSBjb21tZSBz6XBhcmF0ZXVyLgorICAgICAgICAgICAgICAgIDxpdGVtaXplPgorICAgICAgPGl0ZW0+CisgICAgICAgIFBvdXIgbGVzIGNvbW1hbmRlcyBxdWkgYWN0aXZlbnQvZOlzYWN0aXZlbnQgdW5lIGZvbmN0aW9ubmFsaXTpOgorICAgICAgICAgPGl0ZW1pemU+CisgICAgICAgICAgIDxpdGVtPgorICAgICAgICAgICAgU2kgdm91cyBzcOljaWZpZXogbGUgbW9kaWZpY2F0ZXVyIDx0dC8rb24vLCBsYSBmb25jdGlvbm5hbGl06SBlc3QKKyAgICAgICAgICAgIGFsb3JzIGFjdGl26WUuCisgICAgICAgICAgPGl0ZW0+CisgICAgICAgICAgICBTaSB2b3VzIHNw6WNpZmlleiBsZSBtb2RpZmljYXRldXIgPHR0LytvZmYvLCBsYSBmb25jdGlvbm5hbGl06SBlc3QKKyAgICAgICAgICAgIGFsb3JzIGTpc2FjdGl26WUuCisgICAgICAgICAgPGl0ZW0+CisgICAgICAgICAgICBTaSB2b3VzIG5lIHNw6WNpZmlleiBuaSA8dHQvK29uLyBuaSA8dHQvK29mZi8sIGwn6XRhdCBkZSBsYSBmb25jdGlvbm5hbGl06QorICAgICAgICAgICAgZXN0IGFjdGl2YWJsZS9k6XNhY3RpdmFibGUgZW4gYmFzY3VsZS4KKzwvaXRlbWl6ZT4KKyAgICAgIDxpdGVtPgorICAgICAgICBQb3VyIGxlcyBjb21tYW5kZXMgcXVpIGTpcGxhY2VudCBsYSBwbGFnZSBicmFpbGxlOgorICAgICAgICA8aXRlbWl6ZT4rICAgICAgICAgIDxpdGVtPgorICAgICAgICAgICAgU2kgdm91cyBzcOljaWZpZXogbGUgbW9kaWZpY2F0ZXVyIDx0dC8rcm91dGUvLCBzaSBu6WNlc3NhaXJlLAorICAgICAgICAgICAgbGUgY3Vyc2V1ciBlc3QgYXV0b21hdGlxdWVtZW50IHJvdXTpIGFmaW4gZCfqdHJlIHRvdWpvdXJzIHZpc2libGUKKyAgICAgICAgICAgIHN1ciBsJ2FmZmljaGV1ciBicmFpbGxlLgorICAgICAgICA8L2l0ZW1pemU+CisgICAgICA8aXRlbT4KKyAgICAgICAgUG91ciBsZXMgY29tbWFuZGVzIHF1aSBk6XBsYWNlbnQgbGEgcGxhZ2UgYnJhaWxsZSB2ZXJzIHVuZSBsaWduZQorICAgICAgICBzcOljaWZpcXVlIGRlIGwn6WNyYW46CisgICAgICAgIDxpdGVtaXplPgorICAgICAgICAgIDxpdGVtPgorICAgICAgICAgICAgU2kgdm91cyBzcOljaWZpZXogbGUgbW9kaWZpY2F0ZXVyIDx0dC8rdG9sZWZ0LywKKyAgICAgICAgICAgIGxhIHBsYWdlIGJyYWlsbGUgZXN0IGFsb3JzIOlnYWxlbWVudCBk6XBsYWPpZSBhdSBk6WJ1dCBkZSBjZXR0ZQorICAgICAgICAgICAgbGlnbmUuCisgICAgICAgICAgPGl0ZW0+CisgICAgICAgICAgICBTaSB2b3VzIHNw6WNpZmlleiBsZSBtb2RpZmljYXRldXIgPHR0LytzY2FsZWQvLCBsJ2Vuc2VtYmxlIGRlCisgICAgICAgICAgICB0b3VjaGVzIGFzc29jaekg4CBsYSBjb21tYW5kZSBlc3QgaW50ZXJwcul06SBjb21tZSBzaSBjJ+l0YWl0IHVuZQorICAgICAgICAgICAgYmFycmUgZGUgZOlmaWxlbWVudC4gU2kgdm91cyBuZSBsZSBzcOljaWZpZXogcGFzLCBpbCB5IGEgdW5lCisgICAgICAgICAgICBjb3JyZXNwb25kYW5jZSB1bmUg4CB1bmUgZW50cmUgbGVzIHRvdWNoZXMgZXQgbGVzIGxpZ25lcy4KKyAgICAgICAgPC9pdGVtaXplPgorICAgICAgPGl0ZW0+CisgICAgICAgIFBvdXIgbGVzIGNvbW1hbmRlcyBxdWkgZGVtYW5kZW50IHVuIGNvbXBs6W1lbnQgKG9mZnNldCk6CisgICAgICAgIDxpdGVtaXplPgorICAgICAgICAgIDxpdGVtPgorICAgICAgICAgICAgVm91cyBwb3V2ZXogc3DpY2lmaWVyIGxlIG1vZGlmaWNhdGV1ciArPGVtL29mZnNldC8sIG/5CisgICAgICAgICAgICA8ZW0vb2Zmc2V0LyBlc3QgdW4gZW50aWVyIG5vbiBu6WdhdGlmLgorICAgICAgICAgICAgU2kgdm91cyBuZSBsZSBmb3Vybmlzc2V6IHBhcywgPHR0LyswLyBlc3Qgc3VwcG9z6S4KKyAgICAgICAgPC9pdGVtaXplPgorICAgIDwvaXRlbWl6ZT4KKzwvZGVzY3JpcD4KKworRXhlbXBsZXM6Cis8aXRlbWl6ZT4KKyAgPGl0ZW0+PHR0L2JpbmQgS2V5MSBDU1JUUksvCisgIDxpdGVtPjx0dC9iaW5kIEtleTErS2V5MiBDU1JUUksrb2ZmLworICA8aXRlbT48dHQvYmluZCBLZXkxK0tleTMgQ1NSVFJLK29uLworICA8aXRlbT48dHQvYmluZCBLZXk0IFRPUC8KKyAgPGl0ZW0+PHR0L2JpbmQgS2V5NSBUT1Arcm91dGUvCisgIDxpdGVtPjx0dC9iaW5kIFZlcnRpY2FsU2Vuc29yIEdPVE9MSU5FK3RvbGVmdCtzY2FsZWQvCisgIDxpdGVtPjx0dC9iaW5kIEtleTYgQ09OVEVYVCsxLworPC9pdGVtaXplPgorCis8c2VjdDM+TGEgbGlnbmUgQ29udGV4dDxsYWJlbCBpZD0ia2V5LXRhYmxlLWNvbnRleHQiPjxwPgorROlmaW5pdCBkZXMgZmHnb25zIGFsdGVybmF0aXZlcyBkJ2ludGVycHLpdGVyIGNlcnRhaW5zIOl26W5lbWVudHMgZXQvb3UKK2NvbWJpbmFpc29ucyBkZSB0b3VjaGVzLiBVbiBjb250ZXh0ZSBjb250aWVudCBkZXMgZOlmaW5pdGlvbnMgY3Lp6WVzIGF2ZWMgbGVzCitsaWduZXMgCis8cmVmIGlkPSJrZXktdGFibGUtYmluZCIgbmFtZT0iYmluZCI+LCAKKzxyZWYgaWQ9ImtleS10YWJsZS1ob3RrZXkiIG5hbWU9ImhvdGtleSI+LAorPHJlZiBpZD0ia2V5LXRhYmxlLW1hcCIgbmFtZT0ibWFwIj4sCitldAorPHJlZiBpZD0ia2V5LXRhYmxlLXN1cGVyaW1wb3NlIiBuYW1lPSJzdXBlcmltcG9zZSI+LgorCis8dHQvY29udGV4dC8gPGVtL2lkZW50aWZpY2F0ZXVyLyBbPGVtL3RpdHJlL10KKzxkZXNjcmlwPgorICA8dGFnPjxlbS9pZGVudGlmaWNhdGV1ci88L3RhZz4KKyAgICDAIGwnaW506XJpZXVyIGR1IGNvbnRleHRlIHNvdXMtamFjZW50IGRhbnMgbGVxdWVsIGRvaXZlbnQg6nRyZSBjcunpZXMgbGVzIGTpZmluaXRpb25zLgorICAgIENlbGEgcGV1dCDqdHJlOgorCis8aXRlbWl6ZT4KKyAgICAgIDxpdGVtPgorICAgICAgICBVbiBkZSBjZXMgbm9tcyBzcOljaWF1eDoKKyAgICAgICAgPGRlc2NyaXA+CisgICAgICAgICAgPHRhZy9kZWZhdWx0LworICAgICAgICAgICAgTGUgY29udGV4dGUgcGFyIGTpZmF1dC4gU2kgdW5lIGNvbWJpbmFpc29uIGRlIHRvdWNoZXMgbidhIHBhcyDpdOkgZOlmaW5pZQorICAgICAgICAgICAgZGFucyBsZSBjb250ZXh0ZSBhY3R1ZWwsIGMnZXN0IGFsb3JzIHNhIGTpZmluaXRpb24gZGFucyBsZSBjb250ZXh0ZQorICAgICAgICAgICAgcGFyIGTpZmF1dCBxdWkgc2VyYSB1dGlsaXPpZS4gQ2VsYSBuZSBzJ2FwcGxpcXVlIHF1J2F1eCBk6WZpbml0aW9ucworICAgICAgICAgICAgY3Lp6WVzIHBhciBsYSBsaWduZQorICAgICAgICAgICAgPHJlZiBpZD0ia2V5LXRhYmxlLWJpbmQiIG5hbWU9ImJpbmQiPi4KKyAgICAgICAgICA8dGFnL21lbnUvCisgICAgICAgICAgICBDZSBjb250ZXh0ZSBlc3QgdXRpbGlz6SBxdWFuZCBvbiBlc3Qg4CBsJ2ludOlyaWV1ciBkdSBtZW51IGRlcworICAgICAgICAgICAgcHLpZulyZW5jZXMgZGUgQlJMVFRZLgorICAgICAgICA8L2Rlc2NyaXA+CisgICAgICA8aXRlbT4KKyAgICAgICAgVW4gZW50aWVyIGNvbXByaXMgZW50cmUgPHR0LzAvIGV0IDx0dC8yNTIvLgorICAgICAgICBMZSBjb250ZXh0ZSA8dHQvMC8gZXN0IHVuZSBmYedvbiBhbHRlcm5hdGl2ZSBkZSBzZSBy6WbpcmVyIGF1IGNvbnRleHRlCisgICAgICAgIHBhciBk6WZhdXQuIFZvdXMgZGV2cmlleiDpdml0ZXIgbGVzIG51belyb3MgZGUgY29udGV4dGUgc3Vw6XJpZXVycyBjYXIgCisgICAgICAgIGxlIG51belybyBsZSBwbHVzIOlsZXbpIGF1dG9yaXPpIGVzdCBzdXNjZXB0aWJsZSBkZSBjaGFuZ2VyIHNhbnMgc2lnbmFsZW1lbnQsCisgICAgICAgIHNpLCBwYXIgZXhlbXBsZSwgb24gYWpvdXRlIGRhdmFudGFnZSBkZSBjb250ZXh0ZXMgbm9tbelzLgorCisgICAgPC9pdGVtaXplPgorCisgIDx0YWc+PGVtL3RpdHJlLzwvdGFnPgorICAgIFVuZSBkZXNjcmlwdGlvbiBsaXNpYmxlIHBhciB1biBodW1haW4gZHUgIGNvbnRleHRlLgorICAgIElsIHBldXQgY29udGVuaXIgZGVzIGVzcGFjZXMgZXQgdm91cyBkZXZyaWV6IHV0aWxpc2VyIGxlcyBjb252ZW50aW9ucyBkZQorICAgIG1pc2UgZW4gbWFqdXNjdWxlcyBzdGFuZGFyZHMuIAorICAgIENldCBvcOlyYW5kZSBlc3QgZmFjdWx0YXRpZi4gU2kgb24gbGUgZm91cm5pdCBsb3JzIGRlIGxhIHPpbGVjdGlvbiBkJ3VuCisgICAgY29udGV4dGUgYXlhbnQgZOlq4CB1biB0aXRyZSwgbGVzIGRldXggZG9pdmVudCBjb3JyZXNwb25kcmUuCisgICAgTGVzIGNvbnRleHRlcyBub21t6XMgb250IGTpauAgZGVzIHRpdHJlcyBpbnRlcm5lcyBhdHRyaWJ16XMuCisgICAgCisgICAgTGVzIGNvbnRleHRlcyBudW3pcmlxdWVzIHNvbnQgY3Lp6XMgYXUgZOlwYXJ0IHNhbnMgdGl0cmVzLgorPC9kZXNjcmlwPgorCitVbiBjb250ZXh0ZSBlc3QgY3Lp6SBsYSBwcmVtaehyZSBmb2lzIHF1J2lsIGVzdCBz6WxlY3Rpb25u6S4KKworSWwgcGV1dCDqdHJlIGVuc3VpdGUgc+lsZWN0aW9ubukgYXV0YW50IGRlIGZvaXMgcXVlIG7pY2Vzc2FpcmUuCisKK1RvdXRlcyBsZXMgZOlmaW5pdGlvbnMgc291cy1qYWNlbnRlcyBqdXNxdSfgIGxhIHByb2NoYWluZSBsaWduZQorPHJlZiBpZD0ia2V5LXRhYmxlLWNvbnRleHQiIG5hbWU9ImNvbnRleHQiPiBvdSDgIGxhIGZpbiBkdSBuaXZlYXUgaW5jbHVkZQorYWN0dWVsIHNvbnQgY3Lp6WVzIOAgbCdpbnTpcmlldXIgZHUgY29udGV4dGUgc+lsZWN0aW9ubukuCisKK0xlIGNvbnRleHRlIGluaXRpYWwgZHUgcHJlbWllciBuaXZlYXUgZGUgbGEgdGFibGUgZGUgdG91Y2hlcyBlc3QgPHR0L2RlZmF1bHQvLgorTGUgY29udGV4dGUgaW5pdGlhbCBkJ3VuZSBzb3VzLXRhYmxlIGRlIHRvdWNoZXMgaW5jbHVzZSBlc3QgbGUgY29udGV4dGUgcXVpCithIOl06SBz6WxlY3Rpb25u6SBsb3JzcXUnaWwgYSDpdOkgaW5jbHUuCisKK0xlcyBjaGFuZ2VtZW50cyBkZSBjb250ZXh0ZSBkYW5zIGxlcyBzb3VzLXRhYmxlcyBkZSB0b3VjaGVzIGluY2x1c2VzIG4nYWZmZWN0ZW50CitwYXMgbGUgY29udGV4dGUgZGUgbGEgdGFibGUgZGUgdG91Y2hlcyBxdWkgaW5jbHV0IG91IGRlIGxhIHNvdXMtdGFibGUuCisKK1NpIHVuIGNvbnRleHRlIGEgdW4gdGl0cmUgKHRvdXMgbGVzIGNvbnRleHRlcyBub21t6XMgZXQgbGVzIGNvbnRleHRlcyBudW3pcmlxdWVzIAorcG91ciBsZXNxdWVscyBvbiBhIGZvdXJuaSBsJ29w6XJhbmRlIDxlbS90aXRsZS8pLCBpbCBkZW1ldXJlIGVuIHBsYWNlLgorCitRdWFuZCB1biDpduluZW1lbnQgZGUgdG91Y2hlcyBlbnRyYe5uZSBsJ2FjdGl2YXRpb24gZCd1biBjb250ZXh0ZSBwZXJtYW5lbnQsCitjZSBjb250ZXh0ZSByZXN0ZSBhY3R1ZWwganVzcXUn4CBjZSBxdSd1biDpduluZW1lbnQgZGUgdG91Y2hlcyBzdWJz6XF1ZW50CitlbnRyYe5uZSBsJ2FjdGl2YXRpb24gZCd1biBjb250ZXh0ZSBwZXJtYW5lbnQgZGlmZulyZW50LiAKKworU2kgdW4gY29udGV4dGUgbidhIHBhcyBkZSB0aXRyZSAobGVzIGNvbnRleHRlcyBudW3pcmlxdWVzIHBvdXIgbGVzcXVlbHMgb24gbidhCitwYXMgZm91cm5pIGwnb3DpcmFuZGUgPGVtL3RpdGxlLyksIGlsIGVzdCB0ZW1wb3JhaXJlLgorCitRdWFuZCB1biDpduluZW1lbnQgZGUgdG91Y2hlIHByb3ZvcXVlIGwnYWN0aXZhdGlvbiBkJ3VuIGNvbnRleHRlIHRlbXBvcmFpcmUsCitjZSBjb250ZXh0ZSBuJ2VzdCB1dGlsaXPpIHF1ZSBwb3VyIGludGVycHLpdGVyIGxlIHRvdXQgcHJvY2hhaW4g6XbpbmVtZW50IGRlCit0b3VjaGUuCisKK0V4ZW1wbGVzOgorPGl0ZW1pemU+CisgIDxpdGVtPjx0dC9jb250ZXh0IG1lbnUvCisgIDxpdGVtPjx0dC9jb250ZXh0IDEgQnJhaWxsZSBJbnB1dC8KKyAgPGl0ZW0+PHR0L2NvbnRleHQgMi8KKzwvaXRlbWl6ZT4KKworPHNlY3QzPkxhIGxpZ25lIEhpZGU8bGFiZWwgaWQ9ImtleS10YWJsZS1oaWRlIj48cD4KK1Nw6WNpZmllIHNpIGRlcyBk6WZpbml0aW9ucyAodm9pciBsZXMgbGlnbmVzCis8cmVmIGlkPSJrZXktdGFibGUtYmluZCIgbmFtZT0iYmluZCI+LAorPHJlZiBpZD0ia2V5LXRhYmxlLWhvdGtleSIgbmFtZT0iaG90a2V5Ij4sCis8cmVmIGlkPSJrZXktdGFibGUtbWFwIiBuYW1lPSJtYXAiPiwKK2V0Cis8cmVmIGlkPSJrZXktdGFibGUtc3VwZXJpbXBvc2UiIG5hbWU9InN1cGVyaW1wb3NlIj4pIGV0IGxlcyByZW1hcnF1ZXMgKHZvaXIKK2xhIGxpZ25lIDxyZWYgaWQ9ImtleS10YWJsZS1ub3RlIiBuYW1lPSJub3RlIj4pIHNvbnQgaW5jbHVzZXMgb3UgcGFzIAorZGFucyBsZSB0ZXh0ZSBkJ2FpZGUgZGUgbGEgdGFibGUgZGUgdG91Y2hlcy4KKyAKKzx0dC9oaWRlLyA8ZW0vc3RhdGUvCis8ZGVzY3JpcD4KKyAgPHRhZz48ZW0vc3RhdGUvPC90YWc+CisgICAgVW4gZGUgY2VzIG1vdHMtY2zpczoKKyAgICAgPGRlc2NyaXA+CisgICAgICA8dGFnL29uL0VsbGVzIHNvbnQgZXhjbHVlcy4KKyAgICAgIDx0YWcvb2ZmL0VsbGVzIHNvbnQgaW5jbHVzZXMuCisgICAgIDwvZGVzY3JpcD4KKzwvZGVzY3JpcD4KKworTCfpdGF0IHNw6WNpZmnpIHMnYXBwbGlxdWUg4CB0b3V0ZXMgbGVzIGTpZmluaXRpb25zIGV0IGxlcyBub3RlcyBxdWkgZW4gZOljb3VsZW50CitqdXNxdSfgIGxhIHByb2NoYWluZSBsaWduZSA8dHQvaGlkZS8gb3UganVzcXUn4CBsYSBmaW4gZHUgbml2ZWF1IGluY2x1ZGUgYWN0dWVsLgorTCfpdGF0IGluaXRpYWwgZHUgcHJlbWllciBuaXZlYXUgZGUgbGEgdGFibGUgZGUgdG91Y2hlcyBlc3QgPHR0L29mZi8uCitMJ+l0YXQgaW5pdGlhbCBkJ3VuZSBzb3VzLXRhYmxlIGRlIHRvdWNoZXMgaW5jbHVzZSBlc3QgbCfpdGF0IHF1aSBhIOl06Qorc+lsZWN0aW9ubukgcXVhbmQgZWxsZSBhIOl06SBpbmNsdXNlLiAKKworTGVzIGNoYW5nZW1lbnRzIGQn6XRhdCDgIGwnaW506XJpZXVyIGRlcyBzb3VzLXRhYmxlcyBkZSB0b3VjaGVzIGluY2x1c2VzCituJ2FmZmVjdGVudCBwYXMgbCfpdGF0IGRlIGxhIHRhYmxlIGRlIHRvdWNoZSBvdSBkZSBsYSBzb3VzLXRhYmxlIHF1aSBpbmNsdXQuCisKK0V4ZW1wbGVzOgorPGl0ZW1pemU+CisgIDxpdGVtPjx0dC9oaWRlIG9uLworPC9pdGVtaXplPgorCis8c2VjdDM+TGEgbGlnbmUgSG90a2V5PGxhYmVsIGlkPSJrZXktdGFibGUtaG90a2V5Ij48cD4KK0Fzc29jaWUgbCdhcHB1aSBvdSBsYSBzdXJ2ZW5hbmNlIGQndW4g6XbpbmVtZW50IGQndW5lIHRvdWNoZSBzcOljaWZpcXVlCivgIGRldXggY29tbWFuZGVzIEJSTFRUWSBkaXN0aW5jdGVzLgorCitMZXMgYXNzb2NpYXRpb25zIHNvbnQgZOlmaW5pZXMgZGFucyBsZSBjb250ZXh0ZSBhY3R1ZWwuCisKKzx0dC9ob3RrZXkvIDxlbS90b3VjaGUvIDxlbS9hcHB1aS8gPGVtL2VmZmVjdHVlci8KKzxkZXNjcmlwPgorICA8dGFnPjxlbS90b3VjaGUvPC90YWc+CisgICAgTGUgbm9tIGRlIGxhIHRvdWNoZSBxdWkgc2VyYSBhc3NvY2npZS4KKyAgPHRhZz48ZW0vYXBwdWkvPC90YWc+CisgICAgTGUgbm9tIGRlIGxhIGNvbW1hbmRlIEJSTFRUWSBxdWkgc2VyYSBleOljdXTpZSDgIGNoYXF1ZSBmb2lzIHF1J29uIGFwcHVpZXJhCisgICAgc3VyIGxhIHRvdWNoZS4gCisKKyAgPHRhZz48ZW0vRWZmZWN0dWVyLzwvdGFnPgorICAgIExlIG5vbSBkZSBsYSBjb21tYW5kZSBCUkxUVFkgcXVpIHNlcmEgZXjpY3V06WUg4CBjaGFxdWUgZm9pcyBxdSdvbiBlZmZlY3R1ZXJhCisgICAgbGEgdG91Y2hlLiAKKzwvZGVzY3JpcD4KKworT24gcGV1dCBjb2xsZXIgZGVzIG1vZGlmaWNhdGV1cnMgYXV4IG5vbXMgZGUgY29tbWFuZGUuCisKK1ZvaXIgbCdvcOlyYW5kZSA8ZW0vY29tbWFuZC8gZGUgbGEgbGlnbmUgCis8cmVmIGlkPSJrZXktdGFibGUtYmluZCIgbmFtZT0iYmluZCI+IHBvdXIgZGVzCitk6XRhaWxzLgorCitTcOljaWZpZXogPHR0L05PT1AvIHNpIGF1Y3VuZSBjb21tYW5kZSBuZSBzZXJhIGV46WN1dOllLgorU3DpY2lmaWVyIDx0dC9OT09QLyBwb3VyIGRldXggY29tbWFuZGVzIGTpc2FjdGl2ZSBsYSB0b3VjaGUgZGFucyBsZXMgZmFpdHMuCisKK0V4ZW1wbGVzOgorPGl0ZW1pemU+CisgIDxpdGVtPjx0dC9ob3RrZXkgS2V5MSBDU1JWSVMrb2ZmIENTUlZJUytvbi8KKyAgPGl0ZW0+PHR0L2hvdGtleSBLZXkyIE5PT1AgTk9PUC8KKzwvaXRlbWl6ZT4KKworPHNlY3QzPkxhIGxpZ25lIElmS2V5PGxhYmVsIGlkPSJrZXktdGFibGUtaWZrZXkiPjxwPgorQXBwbGlxdWUgdW5lIGxpZ25lIGRlIGxhIHRhYmxlIGRlIHRvdWNoZXMg4CBsYSBjb25kaXRpb24gcXVlCitsZSBw6XJpcGjpcmlxdWUgYWl0IHVuZSB0b3VjaGUgcGFydGljdWxp6HJlLgorCis8dHQvaWZrZXkvIDxlbS90b3VjaGUvIDxlbS9saWduZS8KKzxkZXNjcmlwPgorICA8dGFnPjxlbS90b3VjaGUvPC90YWc+CisgICAgTGUgbm9tIGRlIGxhIHRvdWNoZSBkb250IGxhIGRpc3BvbmliaWxpdOkgZG9pdCDqdHJlIHRlc3TpZS4KKyAgPHRhZz48ZW0vbGlnbmUvPC90YWc+CisgICAgTGEgbGlnbmUgZGUgbGEgdGFibGUgZGUgdG91Y2hlcyBxdWkgZG9pdCDqdHJlIGFwcGxpcXXpZSBzb3VzIGNvbmRpdGlvbi4KKzwvZGVzY3JpcD4KKworRXhlbXBsZXM6Cis8aXRlbWl6ZT4KKyAgPGl0ZW0+PHR0L2lma2V5IEtleTEgaWZrZXkgS2V5MiBiaW5kIEtleTErS2V5MiBIT01FLworPC9pdGVtaXplPgorCis8c2VjdDM+TGEgbGlnbmUgSW5jbHVkZTxsYWJlbCBpZD0ia2V5LXRhYmxlLWluY2x1ZGUiPjxwPgorRXjpY3V0ZSBsZXMgbGlnbmVzIOAgbCdpbnTpcmlldXIgZCd1bmUgc291cy10YWJsZSBkZSB0b3VjaGVzLgorCitDZWxhIGVzdCBy6WN1cnNpZiwgY2UgcXVpIHNpZ25pZmllIHF1ZSBuJ2ltcG9ydGUgcXVlbGxlIHRhYmxlIGRlIHRvdWNoZXMKK3BldXQgcydpbmNsdXJlIGVsbGUtbeptZSBkYW5zIHVuZSBhdXRyZSBzb3VzLXRhYmxlLgorCitJbCBmYXV0IGZhaXJlIGF0dGVudGlvbiDgIGJpZW4gcydhc3N1cmVyIHF1J3VuZSAiYm91Y2xlIGQnaW5jbHVzaW9uIiBuZSBzb2l0CitwYXMgY3Lp6WUuCisKKzx0dC9pbmNsdWRlLyA8ZW0vZmljaGllci8KKzxkZXNjcmlwPgorICA8dGFnPjxlbS9maWxlLzwvdGFnPgorICAgIExhIHNvdXMtdGFibGUgZGUgdG91Y2hlIHF1aSBkb2l0IOp0cmUgaW5jbHVzZS4KKyAgICBJbCBwZXV0IHMnYWdpciBkJ3VuIGNoZW1pbiBzb2l0IHJlbGF0aWYgc29pdCBhYnNvbHUuCisgICAgUydpbCBlc3QgcmVsYXRpZiwgaWwgZXN0IGFuY3LpIGF1IHLpcGVydG9pcmUgY29udGVuYW50IGxhIHRhYmxlIGRlIHRvdWNoZXMKKyAgICBxdWkgaW5jbHV0IG91IGxhIHNvdXMtdGFibGUuCis8L2Rlc2NyaXA+CisKK0V4ZW1wbGVzOgorPGl0ZW1pemU+CisgIDxpdGVtPjx0dC9pbmNsdWRlIGNvbW1vbi5rdGkvCisgIDxpdGVtPjx0dD5pbmNsdWRlIC9jaGVtaW4vdmVycy9tZXMvdG91Y2hlcy5rdGk8L3R0PgorPC9pdGVtaXplPgorCis8c2VjdDM+TGEgbGlnbmUgTWFwPGxhYmVsIGlkPSJrZXktdGFibGUtbWFwIj48cD4KK0ZhaXQgY29ycmVzcG9uZHJlIHVuZSB0b3VjaGUg4CB1bmUgZm9uY3Rpb24gZGUgY2xhdmllciBicmFpbGxlLgorTGEgY29ycmVzcG9uZGFuY2UgZXN0IGTpZmluaWUg4CBsJ2ludOlyaWV1ciBkdSBjb250ZXh0ZSBhY3R1ZWwuCisKKzx0dC9tYXAvIDxlbS90b3VjaGUvIDxlbS9mb25jdGlvbi8KKzxkZXNjcmlwPgorICA8dGFnPjxlbS90b3VjaGUvPC90YWc+CisgICAgTGUgbm9tIGRlIGxhIHRvdWNoZSBxdWkgZG9pdCDqdHJlIGFzc29jaellLiBWb3VzIHBvdXZleiBhc3NvY2llciBwbHVzIGQndW5lCisgICAgdG91Y2hlIOAgbGEgbeptZSBmb25jdGlvbiBkZSBjbGF2aWVyIGJyYWlsbGUuCisgIDx0YWc+PGVtL2ZvbmN0aW9uLzwvdGFnPgorICAgIExlIG5vbSBkZSBsYSBmb25jdGlvbiBkZSBjbGF2aWVyIGJyYWlsbGUuIENlbGEgcGV1dCDqdHJlIHVuIGRlcworICAgIG1vdHMtY2zpcyBzdWl2YW50czoKKyAgICA8ZGVzY3JpcD4KKyAgICAgIDx0YWcvRE9UMS9MZSBwb2ludCBicmFpbGxlIHN0YW5kYXJkIGVuIGhhdXQg4CBnYXVjaGUuCisgICAgICA8dGFnL0RPVDIvTGUgcG9pbnQgYnJhaWxsZSBzdGFuZGFyZCBhdSBtaWxpZXUg4CBnYXVjaGUKKyAgICAgIDx0YWcvRE9UMy9MZSBwb2ludCBicmFpbGxlIHN0YW5kYXJkIGVuIGJhcyDgIGdhdWNoZS4KKyAgICAgIDx0YWcvRE9UNC9MZSBwb2ludCBicmFpbGxlIHN0YW5kYXJkIGVuIGhhdXQg4CBkcm9pdGUuCisgICAgICA8dGFnL0RPVDUvTGUgcG9pbnQgYnJhaWxsZSBzdGFuZGFyZCBhdSBtaWxpZXUg4CBkcm9pdGUuCisgICAgICA8dGFnL0RPVDYvTGUgcG9pbnQgYnJhaWxsZSBzdGFuZGFyZCBlbiBiYXMg4CBkcm9pdGUuCisgICAgICA8dGFnL0RPVDcvTGUgcG9pbnQgYnJhaWxsZSBpbmZvcm1hdGlxdWUgZW4gYmFzIOAgZ2F1Y2hlLgorICAgICAgPHRhZy9ET1Q4L0xlIHBvaW50IGJyYWlsbGUgaW5mb3JtYXRpcXVlIGVuIGJhcyDgIGRyb2l0ZS4KKyAgICAgIDx0YWcvU1BBQ0UvTGEgYmFycmUgZCdlc3BhY2UuCisgICAgICA8dGFnL1NISUZUL0xhIHRvdWNoZSBzaGlmdC4KKyAgICAgIDx0YWcvVVBQRVJDQVNFLworICAgICAgICBTaSBvbiBkb2l0IGVudHJlciB1bmUgbGV0dHJlIG1pbnVzY3VsZSwgbGEgdHJhZHVpdCBhbG9ycyBkYW5zIHNvbgorICAgICAgICDpcXVpdmFsZW50IGVuIG1hanVzY3VsZS4KKyAgICAgIDx0YWcvQ09OVFJPTC9MYSB0b3VjaGUgY29udHL0bGUuCisgICAgICA8dGFnL01FVEEvTGEgdG91Y2hlIGFsdCBnYXVjaGUuCisgICAgPC9kZXNjcmlwPgorPC9kZXNjcmlwPgorCitTaSB1bmUgY29tYmluYWlzb24gZGUgdG91Y2hlcyBuZSBjb25zaXN0ZSBxdSdlbiBkZXMgdG91Y2hlcyBxdWkgb250IOl06QorYXNzb2Np6WVzIOAgZGVzIGZvbmN0aW9ucyBkdSBjbGF2aWVyIGJyYWlsbGUsIGV0IHNpIGNlcyBmb25jdGlvbnMsIGxvcnNxdSdlbGxlcworc29udCBjb21iaW7pZXMsIGNvbnN0aXR1ZW50IHVuZSBjb21tYW5kZSBkZSBjbGF2aWVyIGJyYWlsbGUgdmFsaWRlLCBsYSBjb21tYW5kZQorZXN0IGFsb3JzIGV46WN1dOllIGTocyBxdWUgbGVzIHRvdWNoZXMgc29udCB1dGlsaXPpZXMuCitVbmUgY29tbWFuZGUgZGUgY2xhdmllciBicmFpbGxlIHZhbGlkZSBkb2l0IGluY2x1cmUgc29pdCBuJ2ltcG9ydGUgcXVlbGxlCitjb21iaW5haXNvbiBkZSBwb2ludHMsIHNvaXQgbGEgYmFycmUgZCdlc3BhY2UgKG1haXMgcGFzIGxlcyBkZXV4KS4KK1NpIG9uIGluY2x1dCBhdSBtb2lucyB1biBwb2ludCBicmFpbGxlLCBsZXMgZm9uY3Rpb25zIGR1IGNsYXZpZXIgYnJhaWxsZQorc3DpY2lmaellIHBhciBsZXMgbGlnbmVzCis8cmVmIGlkPSJrZXktdGFibGUtc3VwZXJpbXBvc2UiIG5hbWU9InN1cGVyaW1wb3NlIj4KK2RhbnMgbGUgbeptZSBjb250ZXh0ZSBzb250IGF1c3NpIGluY2x1c2VzIGltcGxpY2l0ZW1lbnQuCisKK0V4ZW1wbGVzOgorPGl0ZW1pemU+CisgIDxpdGVtPjx0dC9tYXAgS2V5MSBET1QxLworPC9pdGVtaXplPgorCis8c2VjdDM+TGEgbGlnbmUgTm90ZTxsYWJlbCBpZD0ia2V5LXRhYmxlLW5vdGUiPjxwPgorCitBam91dGUgdW5lIGV4cGxpY2F0aW9uIGxpc2libGUgcGFyIHVuIGh1bWFpbiBhdSB0ZXh0ZSBkJ2FpZGUgZGUgbGEgdGFibGUgZGUKK3RvdWNoZXMuIAorCitMZXMgcmVtYXJxdWVzIHNvbnQgdXRpbGlz6WVzIGVuIGfpbulyYWwsIHBhciBleGVtcGxlLCBwb3VyIGTpY3JpcmUgbGEgcGxhY2UsCitsZXMgdGFpbGxlcyBldCBsZXMgZm9ybWVzIGRlcyB0b3VjaGVzIGQndW4gcOlyaXBo6XJpcXVlLgorCis8dHQvbm90ZS8gPGVtL3RleHRlLworPGRlc2NyaXA+CisgIDx0YWc+PGVtL3RleHRlLzwvdGFnPgorICAgIEwnZXhwbGljYXRpb24gcXVpIGRvaXQg6nRyZSBham91dOllLgorICAgIEVsbGUgcGV1dCBjb250ZW5pciBkZXMgZXNwYWNlcyBldCBkZXZyYWl0IOp0cmUgZ3JhbW1hdGljYWxlbWVudCBjb3JyZWN0ZS4KKzwvZGVzY3JpcD4KKworQ2hhcXVlIHJlbWFycXVlIGNvbXBvcnRlIGV4YWN0ZW1lbnQgdW5lIGxpZ25lIGRlIHRleHRlIGQnZXhwbGljYXRpb24uCitMZSBncmFuZCBlc3BhY2UgZXN0IGlnbm9y6SBkb25jIG9uIG5lIHBldXQgc3DpY2lmaWVyIGwnaW5kZW50YXRpb24uCisKK0lsIG4neSBhIHBhcyBkZSBsaW1pdGUgYXUgbm9tYnJlIGRlIHJlbWFycXVlcyBxdWUgdm91cyBwb3V2ZXogc3DpY2lmaWVyLgorVG91dGVzIHNvbnQgcmVncm91cOllcyBldCBwculzZW506WVzIGRhbnMgdW4gc2V1bCBibG9jIGF1IGTpYnV0IGR1IHRleHRlIGQnYWlkZQorZGUgbGEgdGFibGUgZGUgdG91Y2hlcy4KKworRXhlbXBsZXM6Cis8aXRlbWl6ZT4KKyAgPGl0ZW0+PHR0L25vdGUgS2V5MSBlc3QgbGEgdG91Y2hlIHJvbmRlIHRvdXQg4CBnYXVjaGUgZGUgbGEgcGFydGllIGZyb250YWxlLi8KKzwvaXRlbWl6ZT4KKworPHNlY3QzPkxhIGxpZ25lIFN1cGVyaW1wb3NlPGxhYmVsIGlkPSJrZXktdGFibGUtc3VwZXJpbXBvc2UiPjxwPgorSW5jbHV0IGltcGxpY2l0ZW1lbnQgdW5lIGZvbmN0aW9uIGRlIGNsYXZpZXIgYnJhaWxsZSDgIGNoYXF1ZSBmb2lzIHF1J3VuZQorY29tbWFuZGUgZGUgY2xhdmllciBicmFpbGxlIGQnYXUgbW9pbnMgdW4gcG9pbnQgZXNzdCBleOljdXTpZS4KKworTCdpbmNsdXNpb24gaW1wbGljaXRlIGVzdCBk6WZpbmllIGRhbnMgbGUgY29udGV4dGUgYWN0dWVsLgorCitWb3VzIHBvdXZleiBzcOljaWZpZXIgbidpbXBvcnRlIHF1ZWwgbnVt6XJvIHBhcm1pIGVsbGVzLgorCis8dHQvc3VwZXJpbXBvc2UvIDxlbS9mb25jdGlvbi8KKzxkZXNjcmlwPgorICA8dGFnPjxlbS9mb25jdGlvbi88L3RhZz4KKyAgICBMZSBub20gZGUgbGEgZm9uY3Rpb24gZGUgY2xhdmllciBicmFpbGxlLiBWb2lyIGwnb3DpcmFuZGUgPGVtL2Z1bmN0aW9uLworICAgIGRlIGxhIGxpZ25lIDxyZWYgaWQ9ImtleS10YWJsZS1tYXAiIG5hbWU9Im1hcCI+IHBvdXIgZGVzIGTpdGFpbHMuCis8L2Rlc2NyaXA+CisKK0V4ZW1wbGVzOgorPGl0ZW1pemU+CisgIDxpdGVtPjx0dC9zdXBlcmltcG9zZSBET1Q3LworPC9pdGVtaXplPgorCis8c2VjdDM+TGEgbGlnbmUgVGl0bGU8bGFiZWwgaWQ9ImtleS10YWJsZS10aXRsZSI+PHA+CitGb3Vybml0IHVuIHLpc3Vt6SBsaXNpYmxlIHBhciB1biBodW1haW4gZGUgbCdvYmplY3RpZiBkZSBsYSB0YWJsZSBkZSB0b3VjaGVzLgorCis8dHQvdGl0bGUvIDxlbS90ZXh0ZS8KKzxkZXNjcmlwPgorICA8dGFnPjxlbS90ZXh0ZS88L3RhZz4KKyAgIFVuIHLpc3Vt6SBkJ3VuZSBsaWduZSBkZSBsYSByYWlzb24gcG91ciBsYXF1ZWxsZSBlc3QgdXRpbGlz6WUgbGEgdGFibGUgZGUgCisgICB0b3VjaGVzLiBJbCBwZXV0IGNvbnRlbmlyIGRlcyBlc3BhY2VzIGV0IHZvdXMgZGV2cmlleiB1dGlsaXNlciBsZXMKKyAgIGNvbnZlbnRpb25zIGRlIG1pc2UgZW4gbWFqdXNjdWxlcyBzdGFuZGFyZHMuCisKKzwvZGVzY3JpcD4KKworTGUgdGl0cmUgZCd1bmUgdGFibGUgZGUgdG91Y2hlcyBuZSBwZXV0IOp0cmUgc3DpY2lmaekgcXUndW5lIGZvaXMuCisKK0V4ZW1wbGVzOgorPGl0ZW1pemU+CisgIDxpdGVtPjx0dC90aXRsZSBCaW5kaW5ncyBmb3IgS2V5cGFkLWJhc2VkIE5hdmlnYXRpb24vCis8L2l0ZW1pemU+CisKKzxzZWN0Mj5Qcm9wcmnpdOlzIGR1IGNsYXZpZXI8bGFiZWwgaWQ9ImtleWJvYXJkLXByb3BlcnRpZXMiPjxwPgorUGFyIGTpZmF1dCwgdG91cyBsZXMgY2xhdmllcnMgc29udCBwcmlzIGVuIGNoYXJnZS4gCitVbiBzb3VzLXBhcmFt6HRyZSBkZXMgY2xhdmllcnMgcGV1dCDqdHJlIHPpbGVjdGlvbm7pIGVuIHNw6WNpZmlhbnQgdW5lIG91IHBsdXNpZXVycyBkZXMKK3Byb3Byael06XMgc3VpdmFudGVzICh2b2lyIGwnb3B0aW9uIDxyZWYgaWQ9Im9wdGlvbnMta2V5Ym9hcmQtcHJvcGVydGllcyIgbmFtZT0iLUsiPgorZW4gbGlnbmUgZGUgY29tbWFuZGUgZXQgbGEgbGlnbmUgPHJlZiBpZD0iY29uZmlndXJlLWtleWJvYXJkLXByb3BlcnRpZXMiIG5hbWU9ImtleWJvYXJkLXByb3BlcnRpZXMiPiBkdSBmaWNoaWVyIGRlIGNvbmZpZ3VyYXRpb24pOgorPGRlc2NyaXA+Cis8dGFnL3R5cGUvCitMZSB0eXBlIGRlIGJ1cywgc3DpY2lmaekgZW4gdGFudCBxdWUgbW90cy1jbOlzICBwYXJtaSBjZXV4IHN1aXZhbnRzOgorPHR0L2FueS8sCis8dHQvcHMyLywKKzx0dC91c2IvLAorPHR0L2JsdWV0b290aC8uCis8dGFnL3ZlbmRvci8KK0wnaWRlbnRpZmljYXRldXIgZHUgdmVuZGV1ciwgc3DpY2lmaekgY29tbWUgdW5lIGVudGllciBub24tc2lnbukgMTYtYml0LgorPHRhZy9wcm9kdWN0LworTCdpZGVudGlmaWNhdGV1ciBkdSBwcm9kdWl0LCBzcOljaWZp6SBjb21tZSB1bmUgZW50aWVyIG5vbiBzaWdu6SAxNiBiaXRzLgorPC9kZXNjcmlwPgorCitMZXMgaWRlbnRpZmljYXRldXJzIGR1IHZlbmRldXIgZXQgZHUgcHJvZHVpdCBwZXV2ZW50IOp0cmUgc3DpY2lmaelzIGVuIGTpY2ltYWwKKyhwYXMgZGUgcHLpZml4ZSksIG9jdGFsIChwculmaXjpIHBhciA8dHQvMC8pLCBvdSBoZXhhY+ljaW1hbCAocHLpZml46SBwYXIgPHR0LzB4LykuCitMYSBzcOljaWZpY2F0aW9uIGRlIDx0dC8wLyBzaWduaWZpZSBxdWUgY2VsYSBjb3JyZXNwb25kIOAgdG91dGUgdmFsZXVyIChjb21tZSBzaQorbGEgcHJvcHJp6XTpIG4n6XRhaXQgcGFzIHNw6WNpZmnpZSkuCmRpZmYgLS1naXQgYS9Eb2N1bWVudHMvTWFudWFsLUJSTFRUWS9GcmVuY2gvVXRpbGlzYXRpb24uc2dtbCBiL0RvY3VtZW50cy9NYW51YWwtQlJMVFRZL0ZyZW5jaC9VdGlsaXNhdGlvbi5zZ21sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJhYzY3NjgKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudHMvTWFudWFsLUJSTFRUWS9GcmVuY2gvVXRpbGlzYXRpb24uc2dtbApAQCAtMCwwICsxLDEwMjYgQEAKKzxzZWN0PlV0aWxpc2F0aW9uIGRlIEJSTFRUWTxwPgorQXZhbnQgZGUgZOltYXJyZXIgQlJMVFRZLCB2b3VzIGF2ZXogYmVzb2luIGQnaW5zdGFsbGVyIHZvdHJlIGFmZmljaGV1cgorYnJhaWxsZS4gRGFucyBsYSBwbHVwYXJ0IGRlcyBjYXMsIGNlbGEgc2UgZmFpdCBzaW1wbGVtZW50IGVuIGxlCitjb25uZWN0YW50IHN1ciB1biBwb3J0IHPpcmllIGRpc3BvbmlibGUsIHB1aXMgZW4gbGUgbWV0dGFudCBzb3VzCit0ZW5zaW9uLiBBcHLocyBhdm9pciBpbnN0YWxs6SB2b3RyZSBhZmZpY2hldXIsIGV46WN1dGV6IHNpbXBsZW1lbnQKK0JSTFRUWSBlbiB0YXBhbnQgbGEgY29tbWFuZGUgQlJMVFRZIHN1ciB1bmUgaW52aXRlIGR1IHNoZWxsICh2b3VzCitkZXZleiBmYWlyZSBjZWxhIGVuIHRhbnQgcXVlIHJvb3QpLiBJbnTpcmVzc2V6LXZvdXMg4CBsJ29wdGlvbiA8cmVmIGlkPSJvcHRpb25zLWJyYWlsbGUtZGV2aWNlIiBuYW1lPSItZCI+CitlbiBsaWduZSBkZSBjb21tYW5kZSwg4CBsYSBsaWduZSA8cmVmIGlkPSJjb25maWd1cmUtYnJhaWxsZS1kZXZpY2UiIG5hbWU9ImJyYWlsbGUtZGV2aWNlIj4gZHUgZmljaGllciBkZQorY29uZmlndXJhdGlvbiwgZXQg4CBsJ29wdGlvbiBkZSBjb21waWxhdGlvbiA8cmVmIGlkPSJidWlsZC1icmFpbGxlLWRldmljZSIgbmFtZT0iLS13aXRoLWJyYWlsbGUtZGV2aWNlIj4KK3BvdXIgZCdhdXRyZXMgbW95ZW5zIGRlIGRpcmUg4CBCUkxUVFkg4CBxdWVsIHDpcmlwaOlyaXF1ZSB2b3RyZQorYWZmaWNoZXVyIGVzdCBjb25uZWN06S4gUmVnYXJkZXogbCdvcHRpb24gPHJlZiBpZD0ib3B0aW9ucy1icmFpbGxlLWRyaXZlciIgbmFtZT0iLWIiPiBlbiBsaWduZSBkZSBjb21tYW5kZSwKK2xhIGxpZ25lIDxyZWYgaWQ9ImNvbmZpZ3VyZS1icmFpbGxlLWRyaXZlciIgbmFtZT0iYnJhaWxsZS1kcml2ZXIiPiBkdSBmaWNoaWVyIGRlIGNvbmZpZ3VyYXRpb24sIGV0IGwnb3B0aW9uCitkZSBjb21waWxhdGlvbiA8cmVmIGlkPSJjb25maWd1cmUtYnJhaWxsZS1kcml2ZXIiIG5hbWU9Ii0td2l0aC1icmFpbGxlLWRyaXZlciI+IHBvdXIgZCdhdXRyZXMgcG9zc2liaWxpdOlzCitjb25jZXJuYW50IGxhIG1hbmnocmUgZCdpbmRpcXVlciDgIEJSTFRUWSBxdWVsIHR5cGUgZCdhZmZpY2hldXIgYnJhaWxsZQordm91cyBhdmV6LiBPYnNlcnZleiBsJ29wdGlvbiA8cmVmIGlkPSJvcHRpb25zLWJyYWlsbGUtcGFyYW1ldGVycyIgbmFtZT0iLUIiPiBlbiBsaWduZSBkZSBjb21tYW5kZSwgZXQgbGEgbGlnbmUKKzxyZWYgaWQ9ImNvbmZpZ3VyZS1icmFpbGxlLXBhcmFtZXRlcnMiIG5hbWU9ImJyYWlsbGUtcGFyYW1ldGVycyI+IGR1IGZpY2hpZXIgZGUgY29uZmlndXJhdGlvbiBwb3VyCitkJ2F1dHJlcyBwb3NzaWJpbGl06XMgY29uY2VybmFudCBsYSBtYW5p6HJlIGRlIHBhc3NlciBsZXMgcGFyYW3odHJlcworYXUgcGlsb3RlIGRlIHZvdHJlIGFmZmljaGV1ciBicmFpbGxlLiBVbiBtZXNzYWdlIGRvbm5hbnQgbGUgbm9tIGR1Citwcm9ncmFtbWUgKEJSTFRUWSkgZXQgc29uIG51belybyBkZSB2ZXJzaW9uIGFwcGFyYe50cmEgYnJp6HZlbWVudAorKHZvaXIgbCdvcHRpb24gPHJlZiBpZD0ib3B0aW9ucy1tZXNzYWdlLXRpbWVvdXQiIG5hbWU9Ii1NIj4gZW4gbGlnbmUgZGUgY29tbWFuZGUpIHN1ciBsJ2FmZmljaGV1ciBicmFpbGxlLgorTCdhZmZpY2hldXIgbW9udHJlcmEgYWxvcnMgdW5lIHBldGl0ZSB6b25lIGRlIGwn6WNyYW4gY29udGVuYW50IGxlCitjdXJzZXVyLiBQYXIgZOlmYXV0LCBsZSBjdXJzZXVyIGVzdCByZXBy6XNlbnTpIHBhciBsZXMgcG9pbnRzIDcgZXQgOAorc3VwZXJwb3PpcyBzdXIgbGUgY2FyYWN06HJlIG/5IGlsIGVzdC4KKworVG91dGUgYWN0aXZpdOkgZGUgbCfpY3JhbiBzZXJhIGFmZmljaOllIHN1ciBsJ2FmZmljaGV1cgorYnJhaWxsZS4gTCdhZmZpY2hldXIgc3VpdnJhIGF1c3NpIGxhIHByb2dyZXNzaW9uIGR1IGN1cnNldXIgc3VyCitsJ+ljcmFuLiBDZXR0ZSBjYXJhY3TpcmlzdGlxdWUgZXN0IGNvbm51ZSBlbiB0YW50IHF1ZSA8YmY+cG91cnN1aXRlIGR1IGN1cnNldXI8L2JmPi4KKworVG91dGVmb2lzLCBsZSBmYWl0IGRlIHNpbXBsZW1lbnQgdGFwZXIgc3VyIGxlIGNsYXZpZXIgZXQgbGlyZQorbCdhZmZpY2hldXIgbmUgc3VmZml0IHBhcy4gRXNzYXlleiBkJ2VudHJlciB1bmUgY29tbWFuZGUgcXVpCitwcm92b3F1ZXJhIHVuZSBlcnJldXIsIGV0IGRlIHRhcGVyIDx0dD5lbnRy6WU8L3R0Pi4gTCdlcnJldXIKK2FwcGFyYe50IHN1ciBsJ+ljcmFuIG1haXMsIHNhdWYgc2kgdm91cyBhdmV6IHVuIGFmZmljaGV1ciDgIHBsdXNpZXVycworbGlnbmVzLCBpbCB5IGEgZGVzIGNoYW5jZXMgcXUnZWxsZSBuZSBzb2l0IHBhcyB2aXNpYmxlIHN1ciBsJ2FmZmljaGV1cgorYnJhaWxsZS4gVm91cyBuJ3kgdm95ZXogcXVlIGwnaW52aXRlIGR1IHNoZWxsLiBWb3VzIGF2ZXogZG9uYyBiZXNvaW4sCivgIHBy6XNlbnQsIGQndW4gbW95ZW4gZGUgZOlwbGFjZXIgbGEgPHR0PnBsYWdlPC90dD4gYnJhaWxsZSDgCit0cmF2ZXJzIGwn6WNyYW4uIExlcyB0b3VjaGVzIGRlIGwnYWZmaWNoZXVyIGJyYWlsbGUgbHVpLW3qbWUgcGV1dmVudAor6nRyZSB1dGlsaXPpZXMgcG91ciBlbnZveWVyIGxlcyBjb21tYW5kZXMg4CBCUkxUVFkgcXVpLCBlbnRyZSBhdXRyZXMKK2Nob3NlcywgcGV1dCBzJ2VuIGNoYXJnZXIuCisKKzxzZWN0MT5Db21tYW5kZXM8bGFiZWwgaWQ9ImNvbW1hbmRzIj48cD4KK01hbGhldXJldXNlbWVudCwgbGVzIGRpZmbpcmVudHMgYWZmaWNoZXVycyBicmFpbGxlIG4nb2ZmcmVudCBwYXMgZGVzCit0b3VjaGVzIGRlIGNvbnRy9GxlIHN0YW5kYXJkLiBDZXJ0YWlucyBvbnQgZGVzIHRvdWNoZXMgc3RhbmRhcmQgc2l4Citwb2ludHMsIGNlcnRhaW5zIGVuIG9udCBodWl0LCBldCBkJ2F1dHJlcyBuJ2VuIG9udCBwYXMuIENlcnRhaW5zIG9udAorZGVzIHRvdWNoZXMgYXUgbml2ZWF1IGRlcyBwb3VjZXMsIG1haXMgaWwgbid5IGVuIGEgcGFzIGJlYXVjb3VwIGVuCitzdGFuZGFyZC4gQ2VydGFpbnMgb250IHVuIGJvdXRvbiBhdS1kZXNzdXMgZGUgY2hhcXVlIGNlbGx1bGUKK2JyYWlsbGUuIENlcnRhaW5zIG9udCBkZXMgYm91dG9ucyBxdSdpbCBmYXV0IHBvdXNzZXIuIEQnYXV0cmVzIG9udCB1bmUKK2JhcnJlIGZhY2lsZSBkJ2FjY+hzIGZvbmN0aW9ubmFudCBiZWF1Y291cCBjb21tZSB1bmUgbWFuZXR0ZSBkZQoramV1LiBMYSBwbHVwYXJ0IG9udCBkZXMgY29tYmluYWlzb25zIHZhcmnpZXMgZGVzIOls6W1lbnRzIGNpLWRlc3N1cy4gQQorY2F1c2UgZGUgbGEgbmF0dXJlIGV0IGRlIGxhIGRpc3Bvc2l0aW9uIHNpIGRpZmbpcmVudGUgZW50cmUgY2hhcXVlCithZmZpY2hldXIsIHJlcG9ydGV6LXZvdXMg4CBsYSBkb2N1bWVudGF0aW9uIGRlIHZvdHJlIGFmZmljaGV1cgorcGVyc29ubmVsIHBvdXIgdHJvdXZlciBjZSBxdWUgZmFpdCBleGFjdGVtZW50IGNoYXF1ZSB0b3VjaGUuCisKK0xlcyBjb21tYW5kZXMgZGUgQlJMVFRZIHNvbnQgaWRlbnRpZmnpZXMgcGFyIGxldXIgbm9tIGRhbnMgY2UKK21hbnVlbC4gU2kgdm91cyBvdWJsaWV6IGxhL2xlcyB0b3VjaGUocykgZGUgdm90cmUgYWZmaWNoZXVyIGJyYWlsbGUg4AordXRpbGlzZXIgcG91ciB1bmUgY29tbWFuZGUgcGFydGljdWxp6HJlLCByZXBvcnRlei12b3VzIOAgbGEgcGFnZQorZCdhaWRlIGRlIHNvbiBwaWxvdGUuIFBhciBjb25z6XF1ZW50LCBsYSB0b3VjaGUgcXVlIHZvdXMgZGV2cmlleiAKK23pbW9yaXNlciBpbW3pZGlhdGVtZW50IGVzdCBjZWxsZSBkZSBsYSBjb21tYW5kZQorPHJlZiBpZD0iY29tbWFuZC1IRUxQIiBuYW1lPSJIRUxQIj4uIFV0aWxpc2V6IGxlcyByb3V0aW5lcyBoYWJpdHVlbGxlcyAoY29tbWUKK2TpY3JpdCBjaS1kZXNzb3VzKSBwb3VyIG5hdmlndWVyIGRhbnMgbGEgcGFnZSBkJ2FpZGUsIHB1aXMgcHJlc3NleiBkZQorbm91dmVhdSBsYSB0b3VjaGUgZCdhaWRlIHBvdXIgcXVpdHRlci4KKworPHNlY3QyPkTpcGxhY2VtZW50IHZlcnRpY2FsPGxhYmVsIGlkPSJ2ZXJ0aWNhbC1tb3Rpb24iPjxwPgorVm9pciBhdXNzaSBsZXMgY29tbWFuZGVzIGRlIHJvdXRpbmVzIDxyZWYgaWQ9ImNvbW1hbmQtUFJJTkRFTlQtTlhJTkRFTlQiIG5hbWU9IlBSSU5ERU5UL05YSU5ERU5UIj4gZXQgPHJlZiBpZD0iY29tbWFuZC1QUkRJRkNIQVItTlhESUZDSEFSIiBuYW1lPSJQUkRJRkNIQVIvTlhESUZDSEFSIj4uCis8ZGVzY3JpcD4KKyAgPHRhZz5MTlVQL0xORE48bGFiZWwgaWQ9ImNvbW1hbmQtTE5VUC1MTkROIj48L3RhZz4KKyAgICBNb250ZS9kZXNjZW5kIGQndW5lIGxpZ25lLiBTaSBsZSBzYXV0IGRlcyBsaWduZXMgaWRlbnRpcXVlcyBhIOl06QorICAgIGFjdGl26SAodm9pciBsYSBjb21tYW5kZSA8cmVmIGlkPSJjb21tYW5kLVNLUElETE5TIiBuYW1lPSJTS1BJRExOUyI+KSwgY2VzIGNvbW1hbmRlcywgYXUgbGlldSBkZQorICAgIHNlIGTpcGxhY2VyIGV4YWN0ZW1lbnQgZCd1bmUgbGlnbmUg4CBsJ2F1dHJlLCBzb250IGRlcyBhbGlhcyBwb3VyCisgICAgbGVzIGNvbW1hbmRlcyA8cmVmIGlkPSJjb21tYW5kLVBSRElGTE4tTlhESUZMTiIgbmFtZT0iUFJESUZMTi9OWERJRkxOIj4uCisgIDx0YWc+V0lOVVAvV0lORE48bGFiZWwgaWQ9ImNvbW1hbmQtV0lOVVAtV0lORE4iPjwvdGFnPgorICAgIE1vbnRlL2Rlc2NlbmQgZCd1biDpY3Jhbi4gU2kgbCfpY3JhbiBuJ2VzdCBwYXMgcGx1cyBoYXV0IHF1J3VuZSBsaWduZSwKKyAgICBlbGxlIGTpcGxhY2UgYWxvcnMgZGUgNSBsaWduZXMuCisgIDx0YWc+UFJESUZMTi9OWERJRkxOPGxhYmVsIGlkPSJjb21tYW5kLVBSRElGTE4tTlhESUZMTiI+PC90YWc+CisgICAgTW9udGUvZGVzY2VuZCDgIGxhIGxpZ25lIGxhIHBsdXMgcHJvY2hlIGF5YW50IHVuIGNvbnRlbnUKKyAgICBkaWZm6XJlbnQuIFNpIGxlIHNhdXQgZGUgbGlnbmVzIGlkZW50aXF1ZXMgYSDpdOkgYWN0aXbpICh2b2lyIGxlcworICAgIGNvbW1hbmRlcyA8cmVmIGlkPSJjb21tYW5kLVNLUElETE5TIiBuYW1lPSJTS1BJRExOUyI+KSwgY2VzIGNvbW1hbmRlcywgcGx1dPR0IHF1ZSBkZSBzYXV0ZXIgZGVzCisgICAgbGlnbmVzIGlkZW50aXF1ZXMsIHNvbnQgZGVzIGFsaWFzIHBvdXIgbGVzIGNvbW1hbmRlcyA8cmVmIGlkPSJjb21tYW5kLUxOVVAtTE5ETiIgbmFtZT0iTE5VUC9MTkROIj4gY29tbWFuZHMuCisgIDx0YWc+QVRUUlVQL0FUVFJETjxsYWJlbCBpZD0iY29tbWFuZC1BVFRSVVAtQVRUUkROIj48L3RhZz4KKyAgICBNb250ZS9kZXNjZW5kIOAgbGEgbGlnbmUgbGEgcGx1cyBwcm9jaGUgYXZlYyBkZXMgYXR0cmlidXRzCisgICAgZGlmZulyZW50cyAobWlzZSBlbiB2YWxldXIgZGUgY2FyYWN06HJlKS4KKyAgPHRhZz5UT1AvQk9UPGxhYmVsIGlkPSJjb21tYW5kLVRPUC1CT1QiPjwvdGFnPgorICAgIFZhIGF1IGTpYnV0IG91IOAgbGEgZmluIGRlIGxhIGxpZ25lLgorICA8dGFnPlRPUF9MRUZUL0JPVF9MRUZUPGxhYmVsIGlkPSJjb21tYW5kLVRPUF9MRUZULUJPVF9MRUZUIj48L3RhZz4KKyAgICBWYSBhdSBjb2luIGVuIGhhdXQg4CBnYXVjaGUgb3UgZW4gYmFzIOAgZ2F1Y2hlLgorICA8dGFnPlBSUEdSUEgvTlhQR1JQSDxsYWJlbCBpZD0iY29tbWFuZC1QUlBHUlBILU5YUEdSUEgiPjwvdGFnPgorICAgIFZhIOAgbGEgbGlnbmUgbGEgcGx1cyBwcm9jaGUgZHUgcGFyYWdyYXBoZSBwculj6WRlbnQvc3VpdmFudCAobGEKKyAgICBwcmVtaehyZSBsaWduZSBub24gdmlkZSBhcHLocyBsYSBsaWduZSB2aWRlIGxhIHBsdXMgcHJvY2hlKS4gTGEKKyAgICBsaWduZSBjb3VyYW50ZSBlc3QgaW5jbHVzZSBkYW5zIGxhIHJlY2hlcmNoZSBkZSBsJ2VzcGFjZSBlbnRyZSBsZXMKKyAgICBwYXJhZ3JhcGhlcy4KKyAgPHRhZz5QUlBST01QVC9OWFBST01QVDxsYWJlbCBpZD0iY29tbWFuZC1QUlBST01QVC1OWFBST01QVCI+PC90YWc+CisgICAgVmEg4CBsJ2ludml0ZSBkZSBjb21tYW5kZSBzdWl2YW50L3By6WPpZGVudC4KKyAgPHRhZz5QUlNFQVJDSC9OWFNFQVJDSDxsYWJlbCBpZD0iY29tbWFuZC1QUlNFQVJDSC1OWFNFQVJDSCI+PC90YWc+CisgICAgUmVjaGVyY2hlIGF2YW50L2FycmnocmUgZGUgbCdvY2N1cnJlbmNlIGxhIHBsdXMgcHJvY2hlIGRlIGxhCisgICAgY2hh7m5lIGRlIGNhcmFjdOhyZXMgZHUgcHJlc3NlLXBhcGllciBjb2xs6SAodm9pciA8cmVmIGlkPSJjdXQiIG5hbWU9IkNvcGllci1jb2xsZXIiPikgcXVpCisgICAgbidlc3QgcGFzIGRhbnMgbGEgcGxhZ2UgYnJhaWxsZS4gTGEgcmVjaGVyY2hlIHNlIGZhaXQg4AorICAgIGdhdWNoZS9kcm9pdGUsIGV0IGNvbW1lbmNlIGF1IGNhcmFjdOhyZSBpbW3pZGlhdGVtZW50IOAKKyAgICBnYXVjaGUvZHJvaXRlIGRlIGxhIHBsYWdlLCBldCBlbiBlbmdsb2JhbnQgbGUgYm9yZCBkZQorICAgIGwn6WNyYW4uIExhIHJlY2hlcmNoZSBuZSB0aWVudCBwYXMgY29tcHRlIGRlIGxhIGNhc3NlLgorPC9kZXNjcmlwPgorCis8c2VjdDI+ROlwbGFjZW1lbnQgaG9yaXpvbnRhbDxsYWJlbCBpZD0iaG9yaXpvbnRhbC1tb3Rpb24iPjxwPgorVm9pciBhdXNzaSBsYSBjb21tYW5kZSBkZSBsYSByb3V0aW5lIDxyZWYgaWQ9ImNvbW1hbmQtU0VUTEVGVCIgbmFtZT0iU0VUTEVGVCI+LgorPGRlc2NyaXA+CisgIDx0YWc+Q0hSTFQvQ0hSUlQ8bGFiZWwgaWQ9ImNvbW1hbmQtQ0hSTFQtQ0hSUlQiPjwvdGFnPgorICAgIFZhIOAgZ2F1Y2hlL2Ryb2l0ZSBkJ3VuIGNhcmFjdOhyZS4KKyAgPHRhZz5IV0lOTFQvSFdJTlJUPGxhYmVsIGlkPSJjb21tYW5kLUhXSU5MVC1IV0lOUlQiPjwvdGFnPgorICAgIFZhIGQndW5lIGRlbWktZmVu6nRyZSDgIGdhdWNoZS9kcm9pdGUuCisgIDx0YWc+RldJTkxUL0ZXSU5SVDxsYWJlbCBpZD0iY29tbWFuZC1GV0lOTFQtRldJTlJUIj48L3RhZz4KKyAgICBWYSBkJ3VuZSBmZW7qdHJlIOAgZ2F1Y2hlL2Ryb2l0ZS4gQ2VzIGNvbW1hbmRlcyBzb250CisgICAgcGFydGljdWxp6HJlbWVudCB1dGlsZXMgcGFyY2UgcXUnZWxsZXMgZOlib3JkZW50IGF1dG9tYXRpcXVlbWVudAorICAgIHF1YW5kIGVsbGVzIGF0dGVpZ25lbnQgbGUgYm9yZCBkZSBsJ+ljcmFuLiBMZXMgYXV0cmVzCisgICAgY2FyYWN06XJpc3RpcXVlcywgY29tbWUgY2VsbGVzIGRlIHNhdXRlciBsZXMgZmVu6nRyZXMgdmlkZXMgKHZvaXIKKyAgICBsYSBjb21tYW5kZSA8cmVmIGlkPSJjb21tYW5kLVNLUEJMTktXSU5TIiBuYW1lPSJTS1BCTE5LV0lOUyI+KSwgYWNjcm9pc3NlbnQKKyAgICBsZXVyIG1hbmlhYmlsaXTpLgorICA8dGFnPkZXSU5MVFNLSVAvRldJTlJUU0tJUDxsYWJlbCBpZD0iY29tbWFuZC1GV0lOTFRTS0lQLUZXSU5SVFNLSVAiPjwvdGFnPgorICAgIFZhIOAgbGEgZmVu6nRyZSBub24tdmlkZSBsYSBwbHVzIHByb2NoZSDgIGdhdWNoZS9kcm9pdGUuCisgIDx0YWc+TE5CRUcvTE5FTkQ8bGFiZWwgaWQ9ImNvbW1hbmQtTE5CRUctTE5FTkQiPjwvdGFnPgorICAgIFZhIGF1IGTpYnV0L2ZpbiBkZSBsYSBsaWduZS4KKzwvZGVzY3JpcD4KKworPHNlY3QyPkTpcGxhY2VtZW50IGltcGxpY2l0ZTxsYWJlbCBpZD0iaW1wbGljaXQtbW90aW9uIj48cD4KK1ZvaXIgYXVzc2kgbGEgY29tbWFuZGUgZGUgcm91dGluZSA8cmVmIGlkPSJjb21tYW5kLUdPVE9NQVJLIiBuYW1lPSJHT1RPTUFSSyI+LgorPGRlc2NyaXA+CisgIDx0YWc+SE9NRTxsYWJlbCBpZD0iY29tbWFuZC1IT01FIj48L3RhZz4KKyAgICBWYSDgIGwnZW5kcm9pdCBv+SBzZSB0cm91dmUgbGUgY3Vyc2V1ciBkJ+ljcmFuLgorICA8dGFnPkJBQ0s8bGFiZWwgaWQ9ImNvbW1hbmQtQkFDSyI+PC90YWc+CisgICAgUmV2aWVudCBs4CBv+SBsYSBjb21tYW5kZSBkZSBk6XBsYWNlbWVudCBsYSBwbHVzIHLpY2VudGUgYSBtaXMgbGEKKyAgICBwbGFnZSBicmFpbGxlLiBDJ2VzdCB1bmUgZmHnb24gZmFjaWxlIGRlIHJldG91cm5lciDgIGRyb2l0ZSBkZSBs4AorICAgIG/5IHZvdXMgbGlzaWV6LCBhcHLocyB1biDpduluZW1lbnQgaW1wcul2dSAoY29tbWUgdW5lIHBvdXJzdWl0ZSBkdQorICAgIGN1cnNldXIpIHF1aSBk6XBsYWNlIGxhIHBsYWdlIGJyYWlsbGUg4CB1biBtb21lbnQgaW5hcHByb3ByaekuCisgIDx0YWc+UkVUVVJOPGxhYmVsIGlkPSJjb21tYW5kLVJFVFVSTiI+PC90YWc+CisgICAgPGl0ZW1pemU+CisgICAgICA8aXRlbT4KKyAgICAgICAgU2kgbGUgZOlwbGFjZW1lbnQgbGUgcGx1cyBy6WNlbnQgZGUgbGEgcGxhZ2UgYnJhaWxsZQorICAgICAgICDpdGFpdCBhdXRvbWF0aXF1ZSwgY29tbWUgbGUgculzdWx0YXQgZCd1bmUgcG91cnN1aXRlIGR1CisgICAgICAgIGN1cnNldXIsIHJldmllbnQgbOAgb/kgbGEgY29tbWFuZGUgZGUgZOlwbGFjZW1lbnQgbGEgcGx1cworICAgICAgICBy6WNlbnRlIGwnYSBtaXNlICh2b2lyIGxhIGNvbW1hbmRlIDxyZWYgaWQ9ImNvbW1hbmQtQkFDSyIgbmFtZT0iQkFDSyI+KS4KKyAgICAgIDxpdGVtPgorICAgICAgICBTaSBsZSBjdXJzZXVyIG4nZXN0IHBhcyBkYW5zIGxhIHBsYWdlIGJyYWlsbGUsIHZhIG/5IHNlCisgICAgICAgIHRyb3V2ZSBsZSBjdXJzZXVyICh2b2lyIGxhIGNvbW1hbmRlIDxyZWYgaWQ9ImNvbW1hbmQtSE9NRSIgbmFtZT0iSE9NRSI+KS4KKyAgICA8L2l0ZW1pemU+Cis8L2Rlc2NyaXA+CisKKzxzZWN0Mj5BY3RpdmF0aW9uIGRlIGZvbmN0aW9ubmFsaXTpczxsYWJlbCBpZD0iZmVhdHVyZS1hY3RpdmF0aW9uIj48cD4KK0NoYWN1bmUgZGUgY2VzIGNvbW1hbmRlcyBhIHRyb2lzIG1vZGVzOiA8YmY+YWN0aXbpZTwvYmY+CisoZOljbGVuY2hlIGxhIGZvbmN0aW9uKSwgPGJmPmTpc2FjdGl26WU8L2JmPiAoYW5udWxlIGxhIGZvbmN0aW9uKSwKK2V0IDxiZj7gIGJhc2N1bGU8L2JmPiAoc2kgbGEgZm9uY3Rpb24gZXN0IGluaGli6WUsIGxhIGTpY2xlbmNoZSwgZXQKK3ZpcyB2ZXJzYSkuIFNhdWYgc2kgY2VsYSBlc3QgZXhwbGljaXRlbWVudCBkaXQsIGNoYWN1bmUgZGUgY2VzCitmb25jdGlvbnMgZXN0IGluaXRpYWxlbWVudCDgIDx0dD5pbmFjdGlmPC90dD4sIGV0LCBxdWFuZCBlbGxlIGVzdAorPGJmPmFjdGl26WU8L2JmPiwgY2VsYSBhZ2l0IHN1ciBsJ2V46WN1dGlvbiBkZSBCUkxUVFkgdG91dCBlbnRpZXIuIExlCitwYXJhbeh0cmUgaW5pdGlhbCBkZSBjZXJ0YWluZXMgZGVzIGZvbmN0aW9ubmFsaXTpcyBwZXV0IOp0cmUgY2hhbmfpZQorcGFyIGxlIDxyZWYgaWQ9InByZWZlcmVuY2VzLW1lbnUiIG5hbWU9Im1lbnUgZGVzIHBy6WbpcmVuY2VzIj4uCis8ZGVzY3JpcD4KKyAgPHRhZz5GUkVFWkU8bGFiZWwgaWQ9ImNvbW1hbmQtRlJFRVpFIj48L3RhZz4KKyAgICBH6GxlIGwnaW1hZ2UgZGUgbCfpY3Jhbi4gQlJMVFRZIGZhaXQgdW5lIGNvcGllIGRlIGwn6WNyYW4gKGNvbnRlbnUKKyAgICBldCBhdHRyaWJ1dHMpIGF1IG1vbWVudCBv+SBsJ2ltYWdlIGRlIGwn6WNyYW4gZXN0CisgICAgcmFmZnJh7mNoaWUsIGV0IGlnbm9yZSBk6HMgbG9ycyB0b3V0ZSBtaXNlIOAgam91ciBkZSBsJ+ljcmFuCisgICAganVzcXUn4CBjZSBxdSdpbCBzb2l0IHLpYWN0dWFsaXPpLiBQYXIgZXhlbXBsZSwgY2V0dGUKKyAgICBmb25jdGlvbm5hbGl06SBmYWNpbGl0ZSBsYSBsZWN0dXJlIGRlIGxhIHNvcnRpZSBkJ3VuZSBhcHBsaWNhdGlvbgorICAgIHF1aSDpY3JpdCBiZWF1Y291cCB0cm9wIHJhcGlkZW1lbnQuCisgIDx0YWc+RElTUE1EPGxhYmVsIGlkPSJjb21tYW5kLURJU1BNRCI+PC90YWc+CisgICAgTW9udHJlIGxlcyBtaXNlcyBlbiByZWxpZWYgKGF0dHJpYnV0cykgZGUgY2hhcXVlIGNhcmFjdOhyZSBkYW5zIGxhCisgICAgcGxhZ2UgYnJhaWxsZSwgcGx1dPR0IHF1ZSBsZXMgY2FyYWN06HJlcyBldXgtbeptZXMgKGxlCisgICAgY29udGVudSkuIFBhciBleGVtcGxlLCBjZXR0ZSBmb25jdGlvbm5hbGl06SBlc3QgdXRpbGUgc2kgdm91cworICAgIGRldmV6IG1ldHRyZSBlbiB2YWxldXIgdW4gaXRlbS4gUXVhbmQgZWxsZSBtb250cmUgbGUgY29udGVudSBkZQorICAgIGwn6WNyYW4sIGxhIHRhYmxlIGRlIHRleHRlIGVzdCB1dGlsaXPpZSAodm9pcgorICAgIGwnb3B0aW9uIDxyZWYgaWQ9Im9wdGlvbnMtdGV4dC10YWJsZSIgbmFtZT0iLXQiPiBlbiBsaWduZSBkZSBjb21tYW5kZSwgbGEgbGlnbmUgPHJlZiBpZD0iY29uZmlndXJlLXRleHQtdGFibGUiIG5hbWU9InRleHQtdGFibGUiPiBkdQorICAgIGZpY2hpZXIgZGUgY29uZmlndXJhdGlvbiBldCBsJ29wdGlvbiBkZSBjb21waWxhdGlvbgorICAgIDxyZWYgaWQ9ImJ1aWxkLXRleHQtdGFibGUiIG5hbWU9Ii0td2l0aC10ZXh0LXRhYmxlIj4pLiAgUXVhbmQgZWxsZSBtb250cmUgbGVzIGF0dHJpYnV0cyBkZQorICAgIGwn6WNyYW4sIGxhIHRhYmxlIGQnYXR0cmlidXRzIGVzdCB1dGlsaXPpZSAodm9pcgorICAgIGwnb3B0aW9uIGBgLWEnJyBlbiBsaWduZSBkZSBjb21tYW5kZSwgbGEgbGlnbmUKKyAgICA8cmVmIGlkPSJidWlsZC1hdHRyaWJ1dGVzLXRhYmxlIiBuYW1lPSJhdHRyaWJ1dGVzLXRhYmxlIj4gZHUgZmljaGllciBkZSBjb25maWd1cmF0aW9uLCBldCBsJ29wdGlvbiBkZQorICAgIGNvbXBpbGF0aW9uIGBgLS13aXRoLWF0dHJpYnV0ZXMtdGFibGUnJykuICBDZXR0ZSBmb25jdGlvbm5hbGl06SBuZQorICAgIHMnYXBwbGlxdWUgcXUnYXUgdGVybWluYWwgdmlydHVlbCBjb3VyYW50LgorICA8dGFnPlNJWERPVFM8bGFiZWwgaWQ9ImNvbW1hbmQtU0lYRE9UUyI+PC90YWc+CisgICAgTW9udHJlIGxlcyBjYXJhY3TocmVzIGJyYWlsbGVzIHNvdXMgbGEgZm9ybWUgNi1wb2ludHMgZXQgbm9uCisgICAgOC1wb2ludHMuIExlcyBwb2ludHMgNyBldCA4IHNvbnQgZW5jb3JlIHV0aWxpc+lzIHBhciBkJ2F1dHJlcworICAgIGZvbmN0aW9ubmFsaXTpcyB0ZWxsZXMgcXVlIGxhIHJlcHLpc2VudGF0aW9uIGR1IGN1cnNldXIgZXQgbGUKKyAgICBzb3VsaWduZW1lbnQgZGVzIGNhcmFjdOhyZXMgbWlzIGVuIHJlbGllZi4gU2kgdW5lIHRhYmxlIGRlIGJyYWlsbGUKKyAgICBhYnLpZ+kgYSDpdOkgc+lsZWN0aW9ubullICh2b2lyIGwnb3B0aW9uIDxyZWYgaWQ9Im9wdGlvbnMtY29udHJhY3Rpb24tdGFibGUiIG5hbWU9Ii1jIj4gZW4gbGlnbmUgZGUKKyAgICBjb21tYW5kZSwgZXQgbGEgbGlnbmUgPHJlZiBpZD0iY29uZmlndXJlLWNvbnRyYWN0aW9uLXRhYmxlIiBuYW1lPSJjb250cmFjdGlvbi10YWJsZSI+IGR1IGZpY2hpZXIgZGUKKyAgICBjb25maWd1cmF0aW9uKSwgZWxsZSBlc3QgdXRpbGlz6WUuIFZvdXMgcG91dmV6IGF1c3NpIGNoYW5nZXIgY2UKKyAgICBwYXJhbeh0cmUgYXZlYyBsYSBwculm6XJlbmNlIDxyZWYgaWQ9InByZWZlcmVuY2UtdGV4dC1zdHlsZSIgbmFtZT0iQXBwYXJlbmNlCisgICAgZHUgdGV4dGUiPi4KKyAgPHRhZz5TTElERVdJTjxsYWJlbCBpZD0iY29tbWFuZC1TTElERVdJTiI+PC90YWc+CisgICAgU2kgbGEgcG91cnN1aXRlIGR1IGN1cnNldXIgKHZvaXIgbGEgY29tbWFuZGUgPHJlZgorICAgIGlkPSJjb21tYW5kLUNTUlRSSyIgbmFtZT0iQ1NSVFJLIj4pIGVzdCAgPGJmPm9uPC9iZj4sIGNoYXF1ZSBmb2lzIHF1ZQorICAgIGxlIGN1cnNldXIgc2UgZOlwbGFjZSBkZSBmYedvbiB0cm9wIGxpbWl06WUgKG91IHBhcyBhc3NleikgYXUtZGVs4AorICAgIGRlIGxhIGZpbiBkZSBsYSBwbGFnZSBicmFpbGxlLCBlbGxlIHJlcG9zaXRpb25uZQorICAgIGhvcml6b250YWxlbWVudCBsYSBwbGFnZSBicmFpbGxlLCBkZSBzb3J0ZSBxdWUgbGUgY3Vyc2V1ciwKKyAgICB0YW50IHF1J2lsIHJlc3RlIGRlIGNlIGP0dOksIHNvaXQgcGx1cyBwcm9jaGUgZHUgY2VudHJlLiBTaSBjZXR0ZQorICAgIGNhcmFjdOlyaXN0aXF1ZSBlc3QgPGJmPmluYWN0aXZlPC9iZj4sIGxhIHBsYWdlIGJyYWlsbGUgZXN0IHRvdWpvdXJzCisgICAgcG9zaXRpb25u6WUgZGUgZmHnb24g4CBjZSBxdWUgc29udCBj9HTpIGdhdWNoZSBzb2l0IHVuIG11bHRpcGxlIGRlCisgICAgc2EgbGFyZ2V1ciBkZXB1aXMgbGUgYm9yZCBnYXVjaGUgZGUgbCfpY3Jhbi4KKworICAgIFZvdXMgcG91dmV6IGF1c3NpIG1vZGlmaWVyIGNlIHBhcmFt6HRyZSBhdmVjIGxhIHBy6WbpcmVuY2UgCisgICAgPHJlZiBpZD0icHJlZmVyZW5jZS1zbGlkaW5nLXdpbmRvdyIgbmFtZT0iRmFpcmUgZOlmaWxlciBsYSBmZW7qdHJlIj4uCisgIDx0YWc+U0tQSURMTlM8bGFiZWwgaWQ9ImNvbW1hbmQtU0tQSURMTlMiPjwvdGFnPgorICAgIEF1IGxpZXUgZGUgZOlwbGFjZXIgZXhhY3RlbWVudCBkJ3VuZSBsaWduZSBlbiBoYXV0IG91IGVuIGJhcywKKyAgICBzYXV0ZSBsZXMgbGlnbmVzIGTpauAgbHVlcyBxdWkgb250IGxlIG3qbWUgY29udGVudSBxdWUgbGEgbGlnbmUKKyAgICBjb3VyYW50ZS4gQ2V0dGUgY2FyYWN06XJpc3RpcXVlcyBpbmZsdWVuY2UgbGVzIGNvbW1hbmRlcyA8cmVmIGlkPSJjb21tYW5kLUxOVVAtTE5ETiIgbmFtZT0iTE5VUC9MTkROIj4sCisgICAgYWluc2kgcXVlIGxlIGTpZmlsZW1lbnQgZGUgbGEgbGlnbmUgZXjpY3V06WUgcGFyIGxlcyBjb21tYW5kZXMKKyAgPHJlZiBpZD0iY29tbWFuZC1GV0lOTFQtRldJTlJUIiBuYW1lPSJGV0lOTFQvRldJTlJUIj4gZXQgPHJlZiBpZD0iY29tbWFuZC1GV0lOTFRTS0lQLUZXSU5SVFNLSVAiIG5hbWU9IkZXSU5MVFNLSVAvRldJTlJUU0tJUCI+LgorICAgIFZvdXMgcG91dmV6IGF1c3NpIGNoYW5nZXIgY2UgcGFyYW3odHJlIGF2ZWMgbGEgcHLpZulyZW5jZSAKKyAgICA8cmVmIGlkPSJwcmVmZXJlbmNlLXNraXAtaWRlbnRpY2FsLWxpbmVzIiBuYW1lPSJTYXV0ZXIgbGVzIGxpZ25lcyBpZGVudGlxdWVzIj4uCisgIDx0YWc+U0tQQkxOS1dJTlM8bGFiZWwgaWQ9ImNvbW1hbmQtU0tQQkxOS1dJTlMiPjwvdGFnPgorICAgIFNhdXRlIGxlcyBmZW7qdHJlcyB2aWRlcyBk6WrgIHBhc3PpZXMgbG9ycyBkJ3VuZSBsZWN0dXJlIGVuIGF2YW50IG91CisgICAgZW4gYXJyaehyZS4gQ2V0dGUgY2FyYWN06XJpc3RpcXVlIGluZmx1ZW5jZSBsZXMgY29tbWFuZGVzIDxyZWYgaWQ9ImNvbW1hbmQtRldJTkxULUZXSU5SVCIgbmFtZT0iRldJTkxUL0ZXSU5SVCI+LgorICAgIFZvdXMgcG91dmV6IGF1c3NpIGNoYW5nZXIgY2UgcGFyYW3odHJlIGF2ZWMgbGEgcHLpZulyZW5jZSAKKzxyZWYgaWQ9InByZWZlcmVuY2Utc2tpcC1ibGFuay13aW5kb3dzIiBuYW1lPSJTYXV0ZXIgbGVzIGZlbup0cmVzIHZpZXJnZXMiPi4KKyAgPHRhZz5DU1JWSVM8bGFiZWwgaWQ9ImNvbW1hbmQtQ1NSVklTIj48L3RhZz4KKyAgICBNb250cmUgbGUgY3Vyc2V1ciBlbiBzdXBlcnBvc2FudCB1biBtb2TobGUgZGUgcG9pbnQgKHZvaXIgbGEKKyAgICBjb21tYW5kZSA8cmVmIGlkPSJjb21tYW5kLUNTUlNJWkUiIG5hbWU9IkNTUlNJWkUiPikgYXUtZGVzc3VzIGR1CisgICAgY2FyYWN06HJlIG/5IGlsIHNlIHRyb3V2ZS4gQSBsJ29yaWdpbmUsIGNldHRlIGNhcmFjdOlyaXN0aXF1ZSBlc3QgPGJmPmFjdGl26WU8L2JmPi4KKyAgICBWb3VzIHBvdXZleiBhdXNzaSBjaGFuZ2VyIGNlIHBhcmFt6HRyZSBhdmVjIGxhIHBy6WbpcmVuY2UgCisgICAgPHJlZiBpZD0icHJlZmVyZW5jZS1zaG93LWN1cnNvciIgbmFtZT0iQWZmaWNoZXIgbGUgY3Vyc2V1ciI+LgorICA8dGFnPkNTUkhJREU8bGFiZWwgaWQ9ImNvbW1hbmQtQ1NSSElERSI+PC90YWc+CisgICAgUmVuZCBsZSBjdXJzZXVyIGludmlzaWJsZSAodm9pciBsYSBjb21tYW5kZSA8cmVmCisgICAgaWQ9ImNvbW1hbmQtQ1NSVklTIiBuYW1lPSJDU1JWSVMiPiApIGRlIGZh529uIOAgbGlyZSBwculjaXPpbWVudCBsZQorICAgIGNhcmFjdOhyZSBzb3VzIGx1aS4gQ2V0dGUgY2FyYWN06XJpc3RpcXVlIG4nYWZmZWN0ZSBxdWUgbGEgY29uc29sZQorICB2aXJ0dWVsbGUgY291cmFudGUuCisgIDx0YWc+Q1NSVFJLPGxhYmVsIGlkPSJjb21tYW5kLUNTUlRSSyI+PC90YWc+CisgICAgUG91cnN1aXRlIGR1IGN1cnNldXIuIFNpIGxlIGN1cnNldXIgc2UgZOlwbGFjZSDgIHVuCisgICAgZW5kcm9pdCBxdWkgbidlc3QgcGFzIOAgbCdpbnTpcmlldXIgZGUgbGEgcGxhZ2UgYnJhaWxsZSwgaWwKKyAgICBk6XBsYWNlIGF1dG9tYXRpcXVlbWVudCBsYSBwbGFnZSBicmFpbGxlIHZlcnMgbGEgbm91dmVsbGUKKyAgICBwb3NpdGlvbiBkdSBjdXJzZXVyLiBWb3VzIHZvdWRyZXogZW4gcHJpbmNpcGUgcXVlIGNldHRlCisgICAgY2FyYWN06XJpc3RpcXVlIHNvaXQgYWN0aXZlLCBwdWlzcXVlIGNlbGEgbWluaW1pc2UgbGVzIGVmZmV0cyBkdSBk6WZpbGVtZW50CisgICAgZGUgbCfpY3JhbiwgZXQgcHVpc3F1ZSwgbG9yc3F1ZSB2b3VzIGVudHJleiBxdWVscXVlIGNob3NlLCBsYQorICAgIHLpZ2lvbiDgIGwnaW506XJpZXVyIGRlIGxhcXVlbGxlIHZvdXMg6WNyaXZleiBhY3R1ZWxsZW1lbnQgZXN0CisgICAgdG91am91cnMgdmlzaWJsZS4gCisgICAgU2kgY2V0dGUgb3B0aW9uIGZhaXQgc2F1dGVyIGxhIHBsYWdlIGJyYWlsbGUg4CB1biBtb21lbnQKKyAgICBpbmFk6XF1YXQsIHV0aWxpc2V6IGxhIGNvbW1hbmRlIDxyZWYgaWQ9ImNvbW1hbmQtQkFDSyIgbmFtZT0iQkFDSyI+CisgICAgcG91ciByZXZlbmlyIGzgIG/5IHZvdXMg6XRpZXogZW4gdHJhaW4gZGUgbGlyZS4KKyAgICBJbCBzZSBwZXV0IHF1ZSB2b3VzIGRldmllegorICAgIGTpc2FjdGl2ZXIgY2V0dGUgb3B0aW9uIGxvcnNxdWUgdm91cyB1dGlsaXNleiB1bmUgYXBwbGljYXRpb24gcXVpCisgICAgcmFmZnJh7mNoaXQgZW4gcGVybWFuZW5jZSBsJ+ljcmFuIHRvdXQgZW4gbWFpbnRlbmFudCB1bmUgcHLpc2VudGF0aW9uIGZpeGUgCisgICAgZGVzIGRvbm7pZXMuIEEgbCdvcmlnaW5lLCBjZXR0ZSBjYXJhY3TpcmlzdGlxdWUgZXN0IDxiZj5hY3RpdmU8L2JmPi4KKyAgPHRhZz5DU1JTSVpFPGxhYmVsIGlkPSJjb21tYW5kLUNTUlNJWkUiPjwvdGFnPgorICAgIFJlcHLpc2VudGUgbGUgY3Vyc2V1ciBhdmVjIGxlcyBodWl0IHBvaW50cyAodW4gYmxvYyBjb21wbGV0KSwgYXUKKyAgICBsaWV1IGRlIG4nYWZmaWNoZXIgcXVlIGxlcyBwb2ludHMgNyBldCA4ICh1biBzb3VsaWduZW1lbnQpLiBWb3VzCisgIHBvdXZleiBhdXNzaSBjaGFuZ2VyIGNlIHBhcmFt6HRyZSBhdmVjIGxhIHBy6WbpcmVuY2UgCisgIDxyZWYgaWQ9InByZWZlcmVuY2UtY3Vyc29yLXN0eWxlIiBuYW1lPSJBcHBhcmVuY2UgZHUgY3Vyc2V1ciI+LgorICA8dGFnPkNTUkJMSU5LPGxhYmVsIGlkPSJjb21tYW5kLUNTUkJMSU5LIj48L3RhZz4KKyAgICBDYWNoZSAoYWN0aXZlIGV0IGTpc2FjdGl2ZSBlbiBmb25jdGlvbiBkJ3VuIGludGVydmFsbGUKKyAgICBwculk6WZpbmkpIGxlIHN5bWJvbGUgcmVwculzZW50YW50IGxlIGN1cnNldXIgKHZvaXIgbGEgY29tbWFuZGUgPHJlZiBpZD0iY29tbWFuZC1DU1JWSVMiIG5hbWU9IkNTUlZJUyI+KS4KKyAgICBWb3VzIHBvdXZleiBjaGFuZ2VyIGNlIHBhcmFt6HRyZSBhdmVjIGxhIHBy6WbpcmVuY2UgCisgICAgPHJlZiBpZD0icHJlZmVyZW5jZS1ibGlua2luZy1jdXJzb3IiIG5hbWU9IkN1cnNldXIgY2xpZ25vdGFudCI+LgorICA8dGFnPkFUVFJWSVM8bGFiZWwgaWQ9ImNvbW1hbmQtQVRUUlZJUyI+PC90YWc+CisgICAgU291bGlnbmUgKGF2ZWMgbGEgY29tYmluYWlzb24gZGVzIHBvaW50cyA3IGV0IDgpIGxlcyBjYXJhY3TocmVzIOAKKyAgICBtZXR0cmUgZW4g6XZpZGVuY2UuCisgICAgPGRlc2NyaXA+CisgICAgICA8dGFnPk5vbiBzb3VsaWdu6TwvdGFnPgorICAgICAgICBCbGFuYyBzdXIgbm9pciAobm9ybWFsKSwKKyAgICAgICAgR3JpcyBzdXIgbm9pciwKKyAgICAgICAgQmxhbmMgc3VyIGJsZXUsCisgICAgICAgIE5vaXIgc3VyIGN5YW4uCisgICAgICA8dGFnPnBvaW50cyA3IGV0IDg8L3RhZz4KKyAgICAgICAgTm9pciBzdXIgYmxhbmMgKHZpZOlvIGludmVyc+llKS4KKyAgICAgIDx0YWc+cG9pbnQgODwvdGFnPgorICAgICAgICBUb3V0IGxlIHJlc3RlLgorICAgIDwvZGVzY3JpcD4KKyAgICBWb3VzIHBvdXZleiBhdXNzaSBjaGFuZ2VyIGNlIHBhcmFt6HRyZSBhdmVjIGxhIHBy6WbpcmVuY2UgCisgICAgPHJlZiBpZD0icHJlZmVyZW5jZS1zaG93LWF0dHJpYnV0ZXMiIG5hbWU9IkFmZmljaGVyIGxlcyBhdHRyaWJ1dGVzIj4uCisgIDx0YWc+QVRUUkJMSU5LPGxhYmVsIGlkPSJjb21tYW5kLUFUVFJCTElOSyI+PC90YWc+CisgICAgTWFzcXVlIChhY3RpdmUgb3UgZOlzYWN0aXZlIHNlbG9uIHVuIGludGVydmFsbGUgcHLpZOlmaW5pKQorICAgIGwnYXR0cmlidXQgc291bGlnbukgKHZvaXIgbGEgY29tbWFuZGUgPHJlZiBpZD0iY29tbWFuZC1BVFRSVklTIiBuYW1lPSJBVFRSVklTIj4gY29tbWFuZCkuCisgICAgQSBsJ29yaWdpbmUsIGNldHRlIGNhcmFjdOlyaXN0aXF1ZSBlc3QgPGJmPmFjdGl26WU8L2JmPi4KKyAgICBWb3VzIHBvdXZleiBhdXNzaSBjaGFuZ2VyIGNlIHBhcmFt6HRyZSBhdmVjIGxhIHBy6WbpcmVuY2UgCisgICAgPHJlZiBpZD0icHJlZmVyZW5jZS1ibGlua2luZy1hdHRyaWJ1dGVzIiBuYW1lPSJBdHRyaWJ1dHMgY2xpZ25vdGFudHMiPi4KKyAgPHRhZz5DQVBCTElOSzxsYWJlbCBpZD0iY29tbWFuZC1DQVBCTElOSyI+PC90YWc+CisgICAgTWFzcXVlIChhY3RpdmUgb3UgZOlzYWN0aXZlIHNlbG9uIHVuIGludGVydmFsbGUgcHLpZOlmaW5pKSBsZXMKKyAgICBsZXR0cmVzIGVuIG1hanVzY3VsZS4gVm91cyBwb3V2ZXogYXVzc2kgY2hhbmdlciBjZSBwYXJhbeh0cmUgYXZlYworICAgIGxhIHBy6WbpcmVuY2UgPHJlZiBpZD0icHJlZmVyZW5jZS1ibGlua2luZy1jYXBpdGFscyIgbmFtZT0iTWFqdXNjdWxlcworICAgIGNsaWdub3RhbnRlcyI+LgorICA8dGFnPlRVTkVTPGxhYmVsIGlkPSJjb21tYW5kLVRVTkVTIj48L3RhZz4KKyAgICBKb3VlIHVuIHNvbiBjb3VydCBwculk6WZpbmkgKHZvaXIgPHJlZiBpZD0idHVuZXMiIG5hbWU9IlNvbnMgZCdhdmVydGlzc2VtZW50Ij4pCisgICAgY2hhcXVlIGZvaXMgcXUndW4g6XbpbmVtZW50IHNpZ25pZmljYXRpZiBzZSBwcm9kdWl0LiBBCisgICAgbCdvcmlnaW5lLCBjZXR0ZSBjYXJhY3TpcmlzdGlxdWUgZXN0IDxiZj5hY3RpdullPC9iZj4uCisgICAgVm91cyBwb3V2ZXogYXVzc2kgY2hhbmdlciBjZSBwYXJhbeh0cmUgYXZlYyBsYSBwculm6XJlbmNlIAorICAgIDxyZWYgaWQ9InByZWZlcmVuY2UtYWxlcnQtdHVuZXMiIG5hbWU9IlNvbnMgZCdhdmVydGlzc2VtZW50Ij4uCisgIDx0YWc+QVVUT1JFUEVBVDxsYWJlbCBpZD0iY29tbWFuZC1BVVRPUkVQRUFUIj48L3RhZz4KKyAgICBS6XDodGUgYXV0b21hdGlxdWVtZW50IHVuZSBjb21tYW5kZSDgIHVuIGludGVydmFsbGUgculndWxpZXIgYXBy6HMKKyAgICB1biBk6WxhaSBpbml0aWFsIHRhbnQgcXVlIHNhIHRvdWNoZSAoY29tYmluYWlzb24pIHJlc3RlCisgICAgYXBwdXnpZS4gU2V1bHMgY2VydGFpbnMgcGlsb3RlcyBzdXBwb3J0ZW50IGNldHRlIGZvbmN0aW9ubmFsaXTpLAorICAgIGxhIHByaW5jaXBhbGUgbGltaXRlIOl0YW50IHF1ZSBsYSBwbHVwYXJ0IGRlcyBhZmZpY2hldXJzIGJyYWlsbGVzCisgICAgbmUgc2lnbmFsZSBwYXMgZW4gbeptZSB0ZW1wcyBsZXMgdG91Y2hlcyBwcmVzc+llcyBldCBsZXMgdG91Y2hlcworICAgIGV46WN1dOllcyBjb21tZSBkZXMg6XbpbmVtZW50cyBkaXN0aW5jdGVtZW50IHPpcGFy6XMuIEEgbCdvcmlnaW5lLAorICAgIGNldHRlIGNhcmFjdOlyaXN0aXF1ZSBlc3QgPGJmPmFjdGl26WU8L2JmPi4KKyAgICBWb3VzIHBvdXZleiBhdXNzaSBjaGFuZ2VyIGNlIHBhcmFt6HRyZSBhdmVjIGxhIHBy6WbpcmVuY2UgCisgICAgPHJlZiBpZD0icHJlZmVyZW5jZS1hdXRvcmVwZWF0IiBuYW1lPSJS6XDpdGl0aW9uIGF1dG9tYXRpcXVlIj4uCisgIDx0YWc+QVVUT1NQRUFLPGxhYmVsIGlkPSJjb21tYW5kLUFVVE9TUEVBSyI+PC90YWc+CisgICAgRGl0IGF1dG9tYXRpcXVlbWVudDoKKyAgICA8aXRlbWl6ZT4KKyAgICAgIDxpdGVtPmxhIG5vdXZlbGxlIGxpZ25lIHF1YW5kIGxhIHBsYWdlIGJyYWlsbGUgZXN0IGTpcGxhY+llIHZlcnRpY2FsZW1lbnQKKyAgICAgIDxpdGVtPmxlcyBjYXJhY3TocmVzIHF1ZSB2b3VzIGVudHJleiBvdSBxdWUgdm91cyBlZmZhY2V6LgorICAgICAgPGl0ZW0+bGUgY2FyYWN06HJlIHZlcnMgbGVxdWVsIHZvdXMgZOlwbGFjZXogbGUgY3Vyc2V1ci4KKyAgICA8L2l0ZW1pemU+CisgICAgQSBsJ29yaWdpbmUsIGNldHRlIGNhcmFjdOlyaXN0aXF1ZSBlc3QgPGJmPmluYWN0aXZlPC9iZj4uCisgICAgVm91cyBwb3V2ZXogYXVzc2kgY2hhbmdlciBjZSBwYXJhbeh0cmUgYXZlYyBsYSBwculm6XJlbmNlIAorICAgIDxyZWYgaWQ9InByZWZlcmVuY2UtYXV0b3NwZWFrIiBuYW1lPSJQYXJvbGUgYXV0b21hdGlxdWUiPi4KKzwvZGVzY3JpcD4KKworPHNlY3QyPlPpbGVjdGlvbiBkZSBtb2RlPGxhYmVsIGlkPSJtb2RlLXNlbGVjdGlvbiI+PHA+Cis8ZGVzY3JpcD4KKyAgPHRhZz5IRUxQPGxhYmVsIGlkPSJjb21tYW5kLUhFTFAiPjwvdGFnPgorICAgIFNlIGTpcGxhY2Ug4CBsYSBwYWdlIGQnYWlkZSBkdSBwaWxvdGUgZCd1biBhZmZpY2hldXIgYnJhaWxsZS4gQydlc3QKKyAgICBs4CBxdWUgdm91cyBwb3V2ZXogdHJvdXZlciB1biBy6XN1bekgZW4gbGlnbmUgZGUgY2hvc2VzIHRlbGxlcyBxdWUKKyAgICBjZSBxdWUgZm9udCBsZXMgdG91Y2hlcyBkZSB2b3RyZSBhZmZpY2hldXIgYnJhaWxsZSwgZXQgY29tbWVudAorICAgIGludGVycHLpdGVyIHNlcyBjZWxsdWxlcyBkJ+l0YXQuCisgICAgVXRpbGlzZXogbGVzIGNvbW1hbmRlcyA8cmVmIGlkPSJ2ZXJ0aWNhbC1tb3Rpb24iIG5hbWU9InZlcnRpY2FsIj4KKyAgICBldCA8cmVmIGlkPSJob3Jpem9udGFsLW1vdGlvbiIgbmFtZT0iaG9yaXpvbnRhbCI+IHBvdXIgbmF2aWd1ZXIKKyAgICBkYW5zIGxhIHBhZ2UgZCdhaWRlLiBBcHBlbGV6IGxhIGNvbW1hbmRlIDx0dD5oZWxwPC90dD4gZGUgbm91dmVhdSBwb3VyCisgICAgcmV2ZW5pciDgIGwn6WNyYW4uCisgIDx0YWc+SU5GTzxsYWJlbCBpZD0iY29tbWFuZC1JTkZPIj48L3RhZz4KKyAgICBWYSDgIGwnYWZmaWNoYWdlIGRlcyDpdGF0cyAodm9pciBsYSBzZWN0aW9uIDxyZWYgaWQ9InN0YXR1cyIKKyAgICBuYW1lPSJBZmZpY2hhZ2UgZGUgbCfpdGF0Ij4gcG91ciBkZXMgZOl0YWlscyBjb21wbGV0cykuIENlbGEKKyAgICBwculzZW50ZSB1biBy6XN1bekgY29tcHJlbmFudCBsYSBwb3NpdGlvbiBkdSBjdXJzZXVyLCBsYSBwb3NpdGlvbgorICAgIGRlIGxhIHBsYWdlIGJyYWlsbGUsIGV0IGwn6XRhdCBkJ3VuIGNlcnRhaW4gbm9tYnJlIGRlCisgICAgY2FyYWN06XJpc3RpcXVlcyBkZSBCUkxUVFkuIEFwcGVsZXogZGUgbm91dmVhdQorICAgIGNldHRlIGNvbW1hbmRlIHBvdXIgcmV2ZW5pciDgIGwn6WNyYW4uCisgIDx0YWc+TEVBUk48bGFiZWwgaWQ9ImNvbW1hbmQtTEVBUk4iPjwvdGFnPgorICAgIEVudHJlIGRhbnMgbGUgbW9kZSBkJ2FwcHJlbnRpc3NhZ2UgZGUgY29tbWFuZGUgKHZvaXIgbGEgc2VjdGlvbiAKKyAgICA8cmVmIGlkPSJsZWFybiIKKyAgICBuYW1lPSJNb2RlIEFwcHJlbnRpc3NhZ2UgZGVzIGNvbW1hbmRlcyI+IHBvdXIgZGVzIGTpdGFpbHMgY29tcGxldHMpLiBDJ2VzdCBhaW5zaQorICAgIHF1ZSB2b3VzIHBvdXZleiBhcHByZW5kcmUgZGUgZmHnb24gaW50ZXJhY3RpdmUgY2UgcXVlIGZvbnQgbGVzCisgICAgdG91Y2hlcyBkZSB2b3RyZSBhZmZpY2hldXIgYnJhaWxsZS4gUmFwcGVsZXogY2V0dGUgY29tbWFuZGUgcG91cgorICAgIHJldmVuaXIg4CBsJ+ljcmFuLiBDZXR0ZSBjb21tYW5kZSBuJ2VzdCBwYXMgZGlzcG9uaWJsZSBzaSBsJ29wdGlvbgorICAgIGRlIGNvbXBpbGF0aW9uIDxyZWYgaWQ9ImJ1aWxkLWxlYXJuLW1vZGUiCisgICAgbmFtZT0iLS1kaXNhYmxlLWxlYXJuLW1vZGUiPiBhIOl06SBzcOljaWZp6WUuCis8L2Rlc2NyaXA+CisKKzxzZWN0Mj5NYWludGVuYW5jZSBkZXMgcHLpZulyZW5jZXM8bGFiZWwgaWQ9InByZWZlcmVuY2UtbWFpbnRlbmFuY2UiPjxwPgorPGRlc2NyaXA+CisgIDx0YWc+UFJFRk1FTlU8bGFiZWwgaWQ9ImNvbW1hbmQtUFJFRk1FTlUiPjwvdGFnPgorICAgIEFjY+hzIGF1IG1lbnUgZGVzIHBy6WbpcmVuY2VzICh2b2lyIDxyZWYgaWQ9InByZWZlcmVuY2VzLW1lbnUiIG5hbWU9IkxlCisgICAgTWVudSBkZXMgcHLpZulyZW5jZXMiPiBwb3VyIGRlcyBk6XRhaWxzIGNvbXBsZXRzKS4gUmFwcGVsZXogY2V0dGUKKyAgICBjb21tYW5kZSBwb3VyIHJldmVuaXIg4CBsJ+ljcmFuLgorICA8dGFnPlBSRUZTQVZFPGxhYmVsIGlkPSJjb21tYW5kLVBSRUZTQVZFIj48L3RhZz4KKyAgICBFbnJlZ2lzdHJlIGxlcyBwYXJhbeh0cmVzIGRlIHBy6WbpcmVuY2UgY291cmFudHMgKHZvaXIgPHJlZgorICAgIGlkPSJwcmVmZXJlbmNlcyIgbmFtZT0iUHJlZmVyZW5jZXMiPiBwb3VyIGRlcyBk6XRhaWxzIGNvbXBsZXRzKS4KKyAgPHRhZz5QUkVGTE9BRDxsYWJlbCBpZD0iY29tbWFuZC1QUkVGTE9BRCI+PC90YWc+CisgICAgUmVjaGFyZ2UgbGVzIGRlcm5pZXJzIHBhcmFt6HRyZXMgZGUgcHLpZulyZW5jZSBzYXV2ZWdhcmTpcworICAgICh2b2lyIDxyZWYgaWQ9InByZWZlcmVuY2VzIiBuYW1lPSJQcmVmZXJlbmNlcyI+IHBvdXIgZGVzCisgICAgZOl0YWlscyBjb21wbGV0cykuCis8L2Rlc2NyaXA+CisKKzxzZWN0Mj5OYXZpZ2F0aW9uIGRhbnMgbGUgbWVudTxsYWJlbCBpZD0ibWVudS1uYXZpZ2F0aW9uIj48cD4KKzxkZXNjcmlwPgorICA8dGFnPk1FTlVfRklSU1RfSVRFTS9NRU5VX0xBU1RfSVRFTTxsYWJlbCBpZD0iY29tbWFuZC1NRU5VX0ZJUlNUX0lURU0tTUVOVV9MQVNUX0lURU0iPjwvdGFnPgorICAgIFZhIGF1IHByZW1pZXIvZGVybmllciDpbOltZW50IGR1IG1lbnUuCisgIDx0YWc+TUVOVV9QUkVWX0lURU1NRU5VX05FWFRfSVRFTS88bGFiZWwgaWQ9ImNvbW1hbmQtTUVOVV9QUkVWX0lURU0tTUVOVV9ORVhUX0lURU0iPjwvdGFnPgorICAgIFZhIOAgbCfpbOltZW50IHBy6WPpZGVudC9zdWl2YW50IGR1IG1lbnUuCisgIDx0YWc+TUVOVV9QUkVWX1NFVFRJTkcvTUVOVV9ORVhUX1NFVFRJTkc8bGFiZWwgaWQ9ImNvbW1hbmQtTUVOVV9QUkVWX1NFVFRJTkctTUVOVV9ORVhUX1NFVFRJTkciPjwvdGFnPgorICAgIFJlbW9udGUvZGVzY2VuZCBsZSBwYXJhbeh0cmUgZGVzIOls6W1lbnRzIGR1IG1lbnUgY291cmFudC4KKzwvZGVzY3JpcD4KKworPHNlY3QyPkNvbnRy9GxlcyBkZSBsYSB2ZXJib3NpdOk8bGFiZWwgaWQ9InNwZWVjaC1jb250cm9scyI+PHA+Cis8ZGVzY3JpcD4KKyAgPHRhZz5TQVlfTElORTxsYWJlbCBpZD0iY29tbWFuZC1TQVlfTElORSI+PC90YWc+CisgICAgRGl0IGxhIGxpZ25lIGNvdXJhbnRlLiBMYSBwculm6XJlbmNlIDxyZWYKKyAgICBpZD0icHJlZmVyZW5jZS1zYXlsaW5lLW1vZGUiIG5hbWU9Ik1vZGUgRGlyZSBsYSBsaWduZSI+IGTpdGVybWluZSBzaSBsZQorICAgIG1lc3NhZ2UgZW4gYXR0ZW50ZSBlc3QgcHJvcG9z6SBlbiBwcmVtaWVyLgorICA8dGFnPlNBWV9BQk9WRTxsYWJlbCBpZD0iY29tbWFuZC1TQVlfQUJPVkUiPjwvdGFnPgorICAgIERpdCBsYSBwb3J0aW9uIHN1cOlyaWV1cmUgZGUgbCfpY3JhbiAocXVpIHMnYXJy6nRlIOAgbGEgbGlnbmUgYWN0dWVsbGUpLgorICA8dGFnPlNBWV9CRUxPVzxsYWJlbCBpZD0iY29tbWFuZC1TQVlfQkVMT1ciPjwvdGFnPgorICAgIERpdCBsYSBwb3J0aW9uIGluZulyaWV1cmUgZGUgbCfpY3JhbiAocXVpIGNvbW1lbmNlIOAgbGEgbGlnbmUgY291cmFudGUpLgorICA8dGFnPk1VVEU8bGFiZWwgaWQ9ImNvbW1hbmQtTVVURSI+PC90YWc+CisgICAgQXJy6nRlIGltbelkaWF0ZW1lbnQgbGEgcGFyb2xlLgorICA8dGFnPlNQS0hPTUU8bGFiZWwgaWQ9ImNvbW1hbmQtU1BLSE9NRSI+PC90YWc+CisgICAgVmEgb/kgc2UgdHJvdXZlIGxlIGN1cnNldXIgcGFybGFudC4KKyAgPHRhZz5TQVlfU0xPV0VSL1NBWV9GQVNURVI8bGFiZWwgaWQ9ImNvbW1hbmQtU0FZX1NMT1dFUi1TQVlfRkFTVEVSIj48L3RhZz4KKyAgICBEaW1pbnVlL2FjY+ls6HJlIGxlIGTpYml0IGRlIHBhcm9sZSAodm9pciBhdXNzaSBsYSBwculm6XJlbmNlIAorICAgIDxyZWYgaWQ9InByZWZlcmVuY2Utc3BlZWNoLXJhdGUiIG5hbWU9IlZpdGVzc2UgZGUgbGEgc3ludGjoc2UiPikuCisgICAgQ2V0dGUgY29tbWFuZGUgbidlc3QgZGlzcG9uaWJsZSBxdWUgc2kgdW4gcGlsb3RlIHF1aSBsYSBzdXBwb3J0ZSBlc3QgdXRpbGlz6S4KKyAgPHRhZz5TQVlfU09GVEVSL1NBWV9MT1VERVI8bGFiZWwgaWQ9ImNvbW1hbmQtU0FZX1NPRlRFUi1TQVlfTE9VREVSIj48L3RhZz4KKyAgICBEaW1pbnVlL2F1Z21lbnRlIGxlIHZvbHVtZSBkZSBsYSBwYXJvbGUgKHZvaXIgYXVzc2kgbGEgcHLpZulyZW5jZSAKKyAgICA8cmVmIGlkPSJwcmVmZXJlbmNlLXNwZWVjaC12b2x1bWUiIG5hbWU9IlZvbHVtZSBkZSBsYSBzeW50aOhzZSI+KS4KKyAgICBDZXR0ZSBjb21tYW5kZSBuJ2VzdCBkaXNwb25pYmxlIHF1ZSBzaSB1biBwaWxvdGUgcXVpIGxhIHN1cHBvcnRlIGVzdCB1dGlsaXPpLgorPC9kZXNjcmlwPgorCis8c2VjdDI+VmVyYm9zaWfpIGRhbnMgbGEgbmF2aWdhdGlvbjxsYWJlbCBpZD0ic3BlZWNoLW5hdmlnYXRpb24iPjxwPgorPGRlc2NyaXA+CisgPHRhZy9TUEVBS19DVVJSX0NIQVIvYQorPC9kZXNjcmlwPgorPHNlY3QyPkFsbGVyIOAgdW4gdGVybWluYWwgdmlydHVlbDxwPgorVm9pciBhdXNzaSBsYSBjb21tYW5kZSBkZSB0b3VjaGUgZGUgY2hlbWluIDxyZWYgaWQ9ImNvbW1hbmQtU1dJVENIVlQiIG5hbWU9IlNXSVRDSFZUIj4uCis8ZGVzY3JpcD4KKyAgPHRhZz5TV0lUQ0hWVF9QUkVWL1NXSVRDSFZUX05FWFQ8bGFiZWwgaWQ9ImNvbW1hbmQtU1dJVENIVlRfUFJFVi1TV0lUQ0hWVF9ORVhUIj48L3RhZz4KKyAgICBWYSDgIGxhIGNvbnNvbGUgcHLpY+lkZW50ZS9zdWl2YW50ZS4KKzwvZGVzY3JpcD4KKworPHNlY3QyPkF1dHJlcyBDb21tYW5kZXM8cD4KKzxkZXNjcmlwPgorICA8dGFnPkNTUkpNUF9WRVJUPGxhYmVsIGlkPSJjb21tYW5kLUNTUkpNUF9WRVJUIj48L3RhZz4KKyAgICBBbehuZSBsZSBjdXJzZXVyIG4naW1wb3J0ZSBv+SBzdXIgbGEgcHJlbWnocmUgbGlnbmUgZGUgbGEgcGxhZ2UKKyAgICBicmFpbGxlICh2b2lyIDxyZWYgaWQ9InJvdXRpbmciIG5hbWU9IkTpcGxhY2VtZW50IGR1IEN1cnNldXIiPiBwb3VyIGRlcyBk6XRhaWxzIGNvbXBsZXRzKS4KKyAgICBMZSBjdXJzZXVyIHNlIGTpcGxhY2UgZ3LiY2Ug4CBsYSBzaW11bGF0aW9uIGRlIGwnYXBwdWkgc3VyIGxlcyB0b3VjaGVzIGRlIGRpcmVjdGlvbiB2ZXJ0aWNhbGVzLgorICAgIENldHRlIGNvbW1hbmRlIG5lIGZvbmN0aW9ubmUgcGFzIHRvdWpvdXJzIGNhciBjZXJ0YWluZXMgYXBwbGljYXRpb25zLAorICAgIHNvaXQgZOlwbGFjZW50IGxlIGN1cnNldXIgc2FucyB2cmFpbWVudCBhdmVydGlyLCBzb2l0IHV0aWxpc2VudAorICAgIGxlcyBmbOhjaGVzIGRlIGRpcmVjdGlvbiDgIGQnYXV0cmVzIGZpbnMgcXVlIGxlIGTpcGxhY2VtZW50IGR1IGN1cnNldXIuCisgICAgQydlc3QgdG91dGVmb2lzIHVuIHBldSBwbHVzIHP7ciBxdWUgbGVzIGF1dHJlcyBjb21tYW5kZXMgZGUgZOlwbGFjZW1lbnQgZHUKKyAgICBjdXJzZXVyIGNhciBjZXR0ZSBjb21tYW5kZSBuZSB0ZW50ZSBwYXMgZGUgc2ltdWxlciBsZXMgZmzoY2hlcyBnYXVjaGUgZXQKKyAgICBkcm9pdGUuCisgIDx0YWc+UEFTVEU8bGFiZWwgaWQ9ImNvbW1hbmQtUEFTVEUiPjwvdGFnPgorICAgIEluc+hyZSBsZXMgY2FyYWN06HJlcyBkdSBwcmVzc2UtcGFwaWVyIOAgbCdlbXBsYWNlbWVudCBhY3R1ZWwgZHUgY3Vyc2V1ci4KKyAgICAodm9pciA8cmVmIGlkPSJjdXQiIG5hbWU9IkNvcGllci1jb2xsZXIiPiBwb3VyIGRlcyBk6XRhaWxzIGNvbXBsZXRzKS4KKyAgPHRhZz5SRVNUQVJUQlJMPGxhYmVsIGlkPSJjb21tYW5kLVJFU1RBUlRCUkwiPjwvdGFnPgorICAgIEFycup0ZSBwdWlzIHJlbGFuY2UgbGUgcGlsb3RlIGRlIGwnYWZmaWNoZXVyIGJyYWlsbGUuCisgIDx0YWc+UkVTVEFSVFNQRUVDSDxsYWJlbCBpZD0iY29tbWFuZC1SRVNUQVJUU1BFRUNIIj48L3RhZz4KKyAgICBBcnLqdGUgcHVpcyByZWxhbmNlIGxlIHBpbG90ZSBkZSBsYSBzeW50aOhzZSB2b2NhbGUuCis8L2Rlc2NyaXA+CisKKzxzZWN0Mj5Db21tYW5kZXMgZGUgY2FyYWN06HJlczxsYWJlbCBpZD0iY29tbWFuZHMtY2hhcmFjdGVycyI+PHA+Cis8ZGVzY3JpcD4KKyAgPHRhZz5ST1VURTxsYWJlbCBpZD0iY29tbWFuZC1ST1VURSI+PC90YWc+CisgICAgROlwbGFjZSBsZSBjdXJzZXVyIGF1IGNhcmFjdOhyZSBhc3NvY2npIOAgbGEgcm91dGluZQorICAgICh2b2lyIDxyZWYgaWQ9InJvdXRpbmciIG5hbWU9IkTpcGxhY2VtZW50IGR1IEN1cnNldXIiPiBwb3VyIGRlcworICAgIGTpdGFpbHMgY29tcGxldHMpLgorICAgIExlIGN1cnNldXIgc2UgZOlwbGFjZSBncuJjZSDgIGxhIHNpbXVsYXRpb24gZGUgbCdhcHB1aSBzdXIgbGVzIHRvdWNoZXMgZGUgZGlyZWN0aW9uIHZlcnRpY2FsZXMuCisgICAgQ2V0dGUgY29tbWFuZGUgbmUgZm9uY3Rpb25uZSBwYXMgdG91am91cnMgY2FyIGNlcnRhaW5lcyBhcHBsaWNhdGlvbnMsCisgICAgc29pdCBk6XBsYWNlbnQgbGUgY3Vyc2V1ciBzYW5zIHZyYWltZW50IGF2ZXJ0aXIsIHNvaXQgdXRpbGlzZW50CisgICAgbGVzIGZs6GNoZXMgZGUgZGlyZWN0aW9uIOAgZCdhdXRyZXMgZmlucyBxdWUgbGUgZOlwbGFjZW1lbnQgZHUgY3Vyc2V1ci4KKyAgPHRhZz5DVVRCRUdJTjxsYWJlbCBpZD0iY29tbWFuZC1DVVRCRUdJTiI+PC90YWc+CisgICAgUG9zaXRpb25uZSBsZSBk6WJ1dCBkdSBibG9jIOAgY29waWVyIGF1IGNhcmFjdOhyZSBhc3NvY2npIOAgbGEgcm91dGluZS1jdXJzZXVyLgorICAgICh2b2lyIDxyZWYgaWQ9ImN1dCIgbmFtZT0iQ29waWVyLWNvbGxlciI+IHBvdXIgZGVzIGTpdGFpbHMgY29tcGxldHMpLgorICAgIENldHRlIGNvbW1hbmRlIHZpZGUgbGUgcHJlc3NlLXBhcGllci4KKyAgPHRhZz5DVVRBUFBFTkQ8bGFiZWwgaWQ9ImNvbW1hbmQtQ1VUQVBQRU5EIj48L3RhZz4KKyAgICBQb3NpdGlvbm5lIGxlIGTpYnV0IGR1IGJsb2Mg4CBjb3BpZXIgYXUgY2FyYWN06HJlIGFzc29jaekg4CBsYSByb3V0aW5lCisgICAgKHZvaXIgPHJlZiBpZD0iY3V0IiBuYW1lPSJDb3BpZXItY29sbGVyIj4gcG91ciBkZXMgZOl0YWlscyBjb21wbGV0cykuCisgICAgQ2V0dGUgY29tbWFuZGUgbmUgdmlkZSBwYXMgbGUgcHJlc3NlLXBhcGllci4KKyAgPHRhZz5DVVRSRUNUPGxhYmVsIGlkPSJjb21tYW5kLUNVVFJFQ1QiPjwvdGFnPgorICAgIEZpeGUgbGEgZmluIGR1IGJsb2Mg4CBjb3BpZXIgYXUgY2FyYWN06HJlIGFzc29jaekg4CBsYSB0b3VjaGUgZGUgZGlyZWN0aW9uLAorICAgIGV0IG1ldCBsYSBmZW7qdHJlIHJlY3Rhbmd1bGFpcmUgZGFucyBsZSBwcmVzc2UtcGFwaWVyICh2b2lyCisgICAgPHJlZiBpZD0iY3V0IiBuYW1lPSJDb3BpZXIvQ29sbGVyIj4gcG91ciBkZXMgZOl0YWlscyBjb21wbGV0cykuCisgIDx0YWc+Q1VUTElORTxsYWJlbCBpZD0iY29tbWFuZC1DVVRMSU5FIj48L3RhZz4KKyAgICBGaXhlIGxhIGZpbiBkdSBibG9jIOAgY29waWVyIGF1IGNhcmFjdOhyZSBhc3NvY2npIOAgbGEgdG91Y2hlIGRlCisgICAgZGlyZWN0aW9uLCBldCBtZXQgbGEgZmVu6nRyZSBsaW7pYWlyZSBkYW5zIGxlIHByZXNzZS1wYXBpZXIgKHZvaXIKKyAgICA8cmVmIGlkPSJjdXQiIG5hbWU9IkN1dCBhbmQgUGFzdGUiPiBwb3VyIGRlcyBk6XRhaWxzIGNvbXBsZXRzKS4KKyAgPHRhZz5DT1BZQ0hBUlM8bGFiZWwgaWQ9ImNvbW1hbmQtQ09QWUNIQVJTIj48L3RhZz4KKyAgICBDb3BpZSBsZSBibG9jIGRlIGNhcmFjdOhyZXMgbWFycXXpIHBhciBsZXMgZGV1eCB0b3VjaGVzIGRlIHJvdXRpbmUKKyAgICBkYW5zIGxlIHByZXNzZS1wYXBpZXIgCisgICAgKHZvaXIgPHJlZiBpZD0iY3V0IiBuYW1lPSJDb3BpZXIgZXQgY29sbGVyIj4gcG91ciB0b3VzIGxlcyBk6XRhaWxzKS4KKyAgPHRhZz5BUE5EQ0hBUlM8bGFiZWwgaWQ9ImNvbW1hbmQtQVBORENIQVJTIj48L3RhZz4KKyAgICBJbnPocmUgbGUgYmxvYyBkZSBjYXJhY3TocmVzIG1hcnF16XMgcGFyIGxlcyBkZXV4IHRvdWNoZXMgZGUgcm91dGluZQorICAgIGRhbnMgbGUgcHJlc3NlLXBhcGllcgorICAgICh2b2lyIDxyZWYgaWQ9ImN1dCIgbmFtZT0iQ29waWVyIGV0IGNvbGxlciI+IHBvdXIgdG91cyBsZXMgZOl0YWlscykuCisgIDx0YWc+UFJJTkRFTlQvTlhJTkRFTlQ8bGFiZWwgaWQ9ImNvbW1hbmQtUFJJTkRFTlQtTlhJTkRFTlQiPjwvdGFnPgorICAgIE1vbnRlL2Rlc2NlbmQg4CBsYSBsaWduZSBsYSBwbHVzIHByb2NoZSBxdWkgbidlc3QgcGFzIGluZGVudOllIHBsdXMKKyAgICBxdWUgbGEgY29sb25uZSBhc3NvY2npZSDgIGxhIHJvdXRpbmUuCisgIDx0YWc+REVTQ0NIQVI8bGFiZWwgaWQ9ImNvbW1hbmQtREVTQ0NIQVIiPjwvdGFnPgorICAgIEFmZmljaGUgbW9tZW50YW7pbWVudCAodm9pciBsJ29wdGlvbiA8cmVmCisgICAgaWQ9Im9wdGlvbnMtbWVzc2FnZS10aW1lb3V0IiBuYW1lPSItTSI+CisgICAgZW4gbGlnbmUgZGUgY29tbWFuZGUpIHVuIG1lc3NhZ2UgZOljcml2YW50IGxlIGNhcmFjdOhyZSBhc3NvY2npIOAKKyAgICBsYSByb3V0aW5lLiBDZWxhIG1vbnRyZSBsZXMgdmFsZXVycyBk6WNpbWFsZXMgZXQKKyAgICBoZXhhZOljaW1hbGVzIGR1IGNhcmFjdOhyZSwgbGVzIGNvdWxldXJzIGRlIGZvbmQgZXQgZGUgcHJlbWllcgorICAgIHBsYW4sIGV0LCBsb3JzcXUnaWxzIHNvbnQgcHLpc2VudHMsIGxlcyBhdHRyaWJ1dHMgc3DpY2lhdXgKKyAgICAoPHR0PmJyaWdodDwvdHQ+IGV0IDx0dD5ibGluazwvdHQ+KS4gTGUgbWVzc2FnZSByZXNzZW1ibGUg4CBjZWxhOgorICAgIDx0c2NyZWVuPmNoYXIgNjUgKDB4NDEpOiB3aGl0ZSBvbiBibGFjayBicmlnaHQgYmxpbms8L3RzY3JlZW4+CisgIDx0YWc+U0VUTEVGVDxsYWJlbCBpZD0iY29tbWFuZC1TRVRMRUZUIj48L3RhZz4KKyAgICBSZXBsYWNlIGhvcnJpem9udGFsZW1lbnQgbGEgcGxhZ2UgYnJhaWxsZSBkZSBmYedvbiDgIGNlIHF1ZSBzb24KKyAgICBj9HTpIGdhdWNoZSBzb2l0IOAgbGEgY29sb25uZSBhc3NvY2npZSDgIGxhIHRvdWNoZSBkZQorICAgIGTpcGxhY2VtZW50LiBDZXR0ZSBjYXJhY3TpcmlzdGlxdWUgcmVuZCB0cuhzIGZhY2lsZSBsJ2FjdGlvbiBkZQorICAgIG1ldHRyZSBsYSBwbGFnZSBwculjaXPpbWVudCBs4CBv+SBpbCBmYXV0IGV0LCBkb25jLCBwb3VyIGxlcworICAgIGFmZmljaGV1cnMgcXVpIG9udCBkZXMgdG91Y2hlcyByb3V0aW5lcywg6WxpbWluZSBwcmVzcXVlIGxhCisgICAgbuljZXNzaXTpIHBvdXIgYmVhdWNvdXAgZGUgZOlwbGFjZW1lbnRzIOls6W1lbnRhaXJlcyBkZSBsYSBwbGFnZQorICAgIChjb21tZSBsZXMgY29tbWFuZGVzIDxyZWYgaWQ9ImNvbW1hbmQtQ0hSTFQtQ0hSUlQiCisgICAgbmFtZT0iQ0hSTFQvQ0hSUlQiPiBldCA8cmVmIGlkPSJjb21tYW5kLUhXSU5MVC1IV0lOUlQiIG5hbWU9IkhXSU5MVC9IV0lOUlQiPikuCisgIDx0YWc+UFJESUZDSEFSL05YRElGQ0hBUjxsYWJlbCBpZD0iY29tbWFuZC1QUkRJRkNIQVItTlhESUZDSEFSIj48L3RhZz4KKyAgICBNb250ZS9kZXNjZW5kIOAgbGEgbGlnbmUgbGEgcGx1cyBwcm9jaGUgY29udGVuYW50IHVuIGNhcmFjdOhyZSBkaWZm6XJlbnQgc3VyIGxhCisgICAgY29sb25uZSBhc3NvY2npZSDgIGxhIHJvdXRpbmUgY3Vyc2V1ci4KKzwvZGVzY3JpcD4KKworPHNlY3QyPkNvbW1hbmRlcyBkZSBiYXNlPGxhYmVsIGlkPSJjb21tYW5kcy1iYXNlIj48cD4KKzxkZXNjcmlwPgorICA8dGFnPlNXSVRDSFZUPGxhYmVsIGlkPSJjb21tYW5kLVNXSVRDSFZUIj48L3RhZz4KKyAgICBCYXNjdWxlIHZlcnMgbGUgdGVybWluYWwgdmlydHVlbCBkb250IGxlIG51belybyAoZW4gY29tbWVu52FudCDgIDEpCisgICAgY29ycmVzcG9uZCDgIGxhIHJvdXRpbmUgY3Vyc2V1ci4KKyAgICBWb2lyIGF1c3NpIGxlcyBjb21tYW5kZXMgZGUgYmFzY3VsZW1lbnQgZW50cmUgdGVybWluYXV4IHZpcnR1ZWxzCisgICAgPHJlZiBpZD0iY29tbWFuZC1TV0lUQ0hWVF9QUkVWLVNXSVRDSFZUX05FWFQiIG5hbWU9IlNXSVRDSFZUX1BSRVYvU1dJVENIVlRfTkVYVCI+LgorICA8dGFnPlNFVE1BUks8bGFiZWwgaWQ9ImNvbW1hbmQtU0VUTUFSSyI+PC90YWc+CisgICAgTWFycXVlIGxhIHBvc2l0aW9uIGNvdXJhbnRlIGRlIGxhIHBsYWdlIGJyYWlsbGUgZGFucworICAgIHVuZSBt6W1vaXJlIGFzc29jaellIOAgbGEgcm91dGluZS4gVm9pciBsYSBjb21tYW5kZSA8cmVmIGlkPSJjb21tYW5kLUdPVE9NQVJLIiBuYW1lPSJHT1RPTUFSSyI+LgorICAgIENldHRlIGNhcmFjdOlyaXN0aXF1ZSBuJ2FmZmVjdGUgcXVlIGxlIHRlcm1pbmFsIHZpcnR1ZWwgY291cmFudC4KKyAgPHRhZz5HT1RPTUFSSzxsYWJlbCBpZD0iY29tbWFuZC1HT1RPTUFSSyI+PC90YWc+CisgICAgROlwbGFjZSBsYSBwbGFnZSBicmFpbGxlIOAgbGEgcG9zaXRpb24gcHLpY+lkZW1tZW50IG1hcnF16WUKKyAgICAodm9pciBsYSBjb21tYW5kZSA8cmVmIGlkPSJjb21tYW5kLVNFVE1BUksiIG5hbWU9IlNFVE1BUksiPikgYXZlYworICAgIGxhIG3qbWUgcm91dGluZS4KKyAgICBDZXR0ZSBmb25jdGlvbiBuJ2FmZmVjdGUgcXVlIGxlIHRlcm1pbmFsIHZpcnR1ZWwgY291cmFudC4KKzwvZGVzY3JpcD4KKworPHNlY3QxPkxlIGZpY2hpZXIgZGUgY29uZmlndXJhdGlvbjxsYWJlbCBpZD0iY29uZmlndXJlIj48cD4KKworRGVzIHZhbGV1cnMgc3lzdOhtZSBwYXIgZOlmYXV0IHBvdXIgY2VydGFpbnMgcGFyYW3odHJlcyBwZXV2ZW50IOp0cmUKK+l0YWJsaWVzIGRhbnMgdW4gZmljaGllciBkZSBjb25maWd1cmF0aW9uLiBMZSBub20gcGFyIGTpZmF1dCBkZSBjZQorZmljaGllciBlc3QgPHR0Pi9ldGMvYnJsdHR5LmNvbmY8L3R0PiwgbeptZSBzJ2lsIHBldXQg6nRyZSBjb250b3VybukKK3BhciBsJ29wdGlvbiBlbiBsaWduZSBkZSBjb21tYW5kZSA8cmVmIGlkPSJvcHRpb25zLWNvbmZpZ3VyYXRpb24tZmlsZSIgbmFtZT0iLWYiPi4KK1NvbiBleGlzdGVuY2Ugbidlc3QgcGFzIGluZGlzcGVuc2FibGUuCitWb3VzIHBvdXZleiB0cm91dmVyIHVuIGZpY2hpZXIgdHlwZSBkYW5zIGxlIHNvdXMtculwZXJ0b2lyZQorPHR0PkRvY3VtZW50czwvdHQ+CisKK0xlcyBsaWduZXMgdmlkZXMgc29udCBpZ25vcullcy4KK1VuIGNvbW1lbnRhaXJlIGNvbW1lbmNlIHBhciB1biBzaWduZSBub21icmUgKDx0dD4mbnVtOzwvdHQ+KSwgZXQgY29udGludWUganVzcXUn4AorbGEgZmluIGRlIGxhIGxpZ25lLgorTGVzIGxpZ25lcyBkZSBjb21tYW5kZSBzdWl2YW50ZXMgc29udCByZWNvbm51ZXM6Cis8ZGVzY3JpcD4KKyAgPHRhZz48dHQ+YXBpLXBhcmFtZXRlcnM8L3R0PiA8ZW0+bmFtZTwvZW0+PHR0Pj08L3R0PjxlbT52YWxldXI8L2VtPjx0dD4sPC90dD4uLi48bGFiZWwgaWQ9ImNvbmZpZ3VyZS1hcGktcGFyYW1ldGVycyI+PC90YWc+CisgICAgU3DpY2lmaWUgbGVzIHBhcmFt6HRyZXMgcG91ciBsJ0FQSS4KKyAgICBTaSB2b3VzIHNw6WNpZmlleiBsZSBt6m1lIHBhcmFt6HRyZSBwbHVzIGQndW5lIGZvaXMsIHNhCisgICAgdmFsZXVyIHNpdHXpZSBsZSBwbHVzIOAgZHJvaXRlIGVzdCB1dGlsaXPpZS4gUG91ciB1bmUgZGVzY3JpcHRpb24KKyAgICBkZXMgcGFyYW3odHJlcyBhY2NlcHTpcyBwYXIgbCdpbnRlcmZhY2UsIHZveWV6IGxlIG1hbnVlbCBkZQorICAgIHLpZulyZW5jZSA8YmY+QnJsQVBJPC9iZj4uIFZvaXIgbCdvcHRpb24gZGUgY29tcGlsYXRpb24gPHJlZiBpZD0iYnVpbGQtYXBpLXBhcmFtZXRlcnMiIG5hbWU9Ii0td2l0aC1hcGktcGFyYW1ldGVycyI+CisgICAgcG91ciBsZXMgcGFyYW3odHJlcyBwYXIgZOlmYXV0IOl0YWJsaXMgbG9ycyBkZSBsYSBwcm9j6WR1cmUgZGUKKyAgICBjb21waWxhdGlvbi4gQ2V0dGUgbGlnbmUgZGUgY29tbWFuZGUgcGV1dCDqdHJlIOl2aXTpZSBhdmVjCisgICAgbCdvcHRpb24gZW4gbGlnbmUgZGUgY29tbWFuZGUgPHJlZiBpZD0ib3B0aW9ucy1hcGktcGFyYW1ldGVycyIgbmFtZT0iLUEiPi4KKzx0YWc+PHR0L2F0dHJpYnV0ZXMtdGFibGUvIDxlbS9maWxlLzxsYWJlbCBpZD0iY29uZmlndXJlLWF0dHJpYnV0ZXMtdGFibGUiPjwvdGFnPgorICAgIFNw6WNpZmllIGxhIHRhYmxlIGQnYXR0cmlidXRzICh2b2lyIGxhIHNlY3Rpb24KKyAgICA8cmVmIGlkPSJ0YWJsZS1hdHRyaWJ1dGVzIiBuYW1lPSJUYWJsZXMgZCdhdHRyaWJ1dHMiPiBwb3VyIGRlcyBk6XRhaWxzKS4KKyAgICBTaSB2b3VzIGZvdXJuaXNzZXogdW4gY2hlbWluIHJlbGF0aWYsIGlsIGVzdCBk6XRlcm1pbukgcGFyIHJhcHBvcnQg4CA8dHQ+L2V0Yy9icmx0dHk8L3R0PgorICAgICh2b2lyIGxlcyBvcHRpb25zIGRlIGNvbXBpbGF0aW9uIDxyZWYgaWQ9ImJ1aWxkLWRhdGEtZGlyZWN0b3J5IiBuYW1lPSItLXdpdGgtZGF0YS1kaXJlY3RvcnkiPgorICAgIGV0IDxyZWYgaWQ9ImJ1aWxkLWV4ZWN1dGUtcm9vdCIgbmFtZT0iLS13aXRoLWV4ZWN1dGUtcm9vdCI+CisgICAgcG91ciBwbHVzIGRlIGTpdGFpbHMpLgorICAgIEwnZXh0ZW5zaW9uIDx0dD4uYXRiPC90dD4gZXN0IGZhY3VsdGF0aXZlLgorICAgIExlIGNvbXBvcnRlbWVudCBwYXIgZOlmYXV0IGVzdCBkJ3V0aWxpc2VyIGxhIHRhYmxlIGNvbXBpbOllIGVuIGR1ciAodm9pciBsJ29wdGlvbiBkZQorICAgIGNvbXBpbGF0aW9uIDxyZWYgaWQ9ImJ1aWxkLWF0dHJpYnV0ZXMtdGFibGUiIG5hbWU9Ii0td2l0aC1hdHRyaWJ1dGVzLXRhYmxlIj4pLgorICAgIFZvdXMgcG91dmV6IHZvdXMgcGFzc2VyIGRlIGNldHRlIGxpZ25lIGRlIGNvbW1hbmRlIGF2ZWMgbCdvcHRpb24KKyAgICBlbiBsaWduZSBkZSBjb21tYW5kZSA8cmVmIGlkPSJvcHRpb25zLWF0dHJpYnV0ZXMtdGFibGUiIG5hbWU9Ii1hIj4uCisgIDx0YWc+PHR0PmJyYWlsbGUtZGV2aWNlPC90dD4gPGVtPmRldmljZTwvZW0+PHR0Piw8L3R0Pi4uLjxsYWJlbCBpZD0iY29uZmlndXJlLWJyYWlsbGUtZGV2aWNlIj48L3RhZz4KKyAgICBTcOljaWZpZSBsZSBw6XJpcGjpcmlxdWUgYXVxdWVsIGwnYWZmaWNoZXVyIGJyYWlsbGUgZXN0IGNvbm5lY3TpCisgICAgKHZvaXIgbGEgc2VjdGlvbiA8cmVmIGlkPSJvcGVyYW5kLWJyYWlsbGUtZGV2aWNlIiBuYW1lPSJTcOljaWZpY2F0aW9uIGR1IHDpcmlwaOlyaXF1ZSBicmFpbGxlIj4pLgorICAgIFZvaXIgbCdvcHRpb24gZGUgY29tcGlsYXRpb24gPHJlZiBpZD0iYnVpbGQtYnJhaWxsZS1kZXZpY2UiIG5hbWU9Ii0td2l0aC1icmFpbGxlLWRldmljZSI+CisgICAgcG91ciBsZXMgcGFyYW3odHJlcyBwYXIgZOlmYXV0IOl0YWJsaXMgZHVyYW50IGxhIHByb2PpZHVyZSBkZSBjb21waWxhdGlvbi4KKyAgICBWb3VzIHBvdXZleiB2b3VzIHBhc3NlciBkZSBjZXR0ZSBsaWduZSBkZSBjb21tYW5kZSBhdmVjCisgICAgbCdvcHRpb24gPHJlZiBpZD0ib3B0aW9ucy1icmFpbGxlLWRldmljZSIgbmFtZT0iLWQiPi4KKyAgPHRhZz48dHQ+YnJhaWxsZS1kcml2ZXI8L3R0PiA8ZW0+cGlsb3RlPC9lbT48dHQ+LDwvdHQ+Li4ufDx0dD5hdXRvPC90dD48bGFiZWwgaWQ9ImNvbmZpZ3VyZS1icmFpbGxlLWRyaXZlciI+PC90YWc+CisgICAgU3DpY2lmaWUgbGUgcGlsb3RlIGRlIGwnYWZmaWNoZXVyIGJyYWlsbGUgKHZvaXIgbGEgc2VjdGlvbgorICAgIDxyZWYgaWQ9Im9wZXJhbmQtZHJpdmVyIiBuYW1lPSJTcOljaWZpY2F0aW9uIGR1IHBpbG90ZSI+KS4gUGFyIGTpZmF1dCwgYydlc3QKKyAgICB1bmUgIGF1dG9k6XRlY3Rpb24gIHF1aSBlc3QgZWZmZWN0dellLgorICAgIFZvdXMgcG91dmV6IOl2aXRlciBjZXR0ZSBsaWduZSBhdmVjIGwnb3B0aW9uIGVuIGxpZ25lIGRlIGNvbW1hbmRlIAorICAgIDxyZWYgaWQ9Im9wdGlvbnMtYnJhaWxsZS1kcml2ZXIiIG5hbWU9Ii1iIj4uCisgIDx0YWc+PHR0PmJyYWlsbGUtcGFyYW1ldGVyczwvdHQ+IFs8ZW0+cGlsb3RlPC9lbT48dHQ+OjwvdHQ+XTxlbT5ub208L2VtPjx0dD49PC90dD48ZW0+dmFsZXVyPC9lbT48dHQ+LDwvdHQ+Li4uPGxhYmVsIGlkPSJjb25maWd1cmUtYnJhaWxsZS1wYXJhbWV0ZXJzIj48L3RhZz4KKyAgICBTcOljaWZpZSBsZXMgcGFyYW3odHJlcyBwb3VyIGxlcyBwaWxvdGVzIGRlIGwnYWZmaWNoZXVyCisgICAgYnJhaWxsZS4gU2kgdm91cyBzcOljaWZpZXogbGUgbeptZSBwYXJhbeh0cmUgcGx1cyBkJ3VuZSBmb2lzLAorICAgIGMnZXN0IHNhIHZhbGV1ciBwbGFj6WUgbGUgcGx1cyDgIGRyb2l0ZSBxdWkgZXN0IHV0aWxpc+llLiBTaSBsZQorICAgIG5vbSBkJ3VuIHBhcmFt6HRyZSBlc3QgcXVhbGlmaekgcGFyIGNlbHVpIGQndW4gcGlsb3RlICh2b2lyIGxhCisgICAgc2VjdGlvbiA8cmVmIGlkPSJkcml2ZXJzIiBuYW1lPSJDb2RlcyBkJ2lkZW50aWZpY2F0aW9uIGRlIHBpbG90ZSI+KQorICAgIGNlIHBhcmFt6HRyZSBuZSBzJ2FwcGxpcXVlIHF1J+AgY2UgcGlsb3RlOyBzaW5vbiBpbCBzJ2FwcGxpcXVlIOAKKyAgICB0b3VzIGxlcyBwaWxvdGVzLiBQYXIgZOlmYXV0LCBjJ2VzdCB1bmUgIGF1dG9k6XRlY3Rpb24gIHF1aSBlc3QgZWZmZWN0dellLgorICAgIFBvdXIgdW5lIGRlc2NyaXB0aW9uIGRlcyBwYXJhbeh0cmVzIGFjY2VwdOlzIHBhciB1biBwaWxvdGUgZW4KKyAgICBwYXJ0aWN1bGllciwgdm95ZXogbGEgZG9jdW1lbnRhdGlvbiBkZSBjZSBwaWxvdGUuCisgICAgVm9pciBsJ29wdGlvbiBkZSBjb21waWxhdGlvbiA8cmVmIGlkPSJidWlsZC1icmFpbGxlLXBhcmFtZXRlcnMiIG5hbWU9Ii0td2l0aC1icmFpbGxlLXBhcmFtZXRlcnMiPgorICAgIHBvdXIgbGVzIHBhcmFt6HRyZXMgcGFyIGTpZmF1dCDpdGFibGlzIGxvcnMgZGUgbGEgcHJvY+lkdXJlIGRlCisgICAgY29tcGlsYXRpb24uCisgICAgVm91cyBwb3V2ZXog6XZpdGVyIGNldHRlIGxpZ25lIGF2ZWMgbCdvcHRpb24gZW4gbGlnbmUgZGUgY29tbWFuZGUKKyAgICA8cmVmIGlkPSJvcHRpb25zLWJyYWlsbGUtcGFyYW1ldGVycyIgbmFtZT0iLUIiPi4KKyAgPHRhZz48dHQ+Y29udHJhY3Rpb24tdGFibGU8L3R0PiA8ZW0+ZmljaGllcjwvZW0+PGxhYmVsIGlkPSJjb25maWd1cmUtY29udHJhY3Rpb24tdGFibGUiPjwvdGFnPgorICAgIFNw6WNpZmllIGxhIHRhYmxlIGRlIGJyYWlsbGUgYWJy6WfpICh2b2lyIGxhIHNlY3Rpb24gPHJlZiBpZD0idGFibGUtY29udHJhY3Rpb24iCisgICAgbmFtZT0iQnJhaWxsZSBhYnLpZ+kiPiBwb3VyIGRlcyBk6XRhaWxzKS4KKyAgICBTaSB2b3VzIGZvdXJuaXNzZXogdW4gY2hlbWluIHJlbGF0aWYsIGlsIGVzdCBk6XRlcm1pbukgcGFyIHJhcHBvcnQg4CA8dHQ+L2V0Yy9icmx0dHk8L3R0PgorICAgICh2b2lyIGxlcyBvcHRpb25zIGRlIGNvbXBpbGF0aW9uIDxyZWYgaWQ9ImJ1aWxkLWRhdGEtZGlyZWN0b3J5IiBuYW1lPSItLXdpdGgtZGF0YS1kaXJlY3RvcnkiPgorICAgIGV0IDxyZWYgaWQ9ImJ1aWxkLWV4ZWN1dGUtcm9vdCIgbmFtZT0iLS13aXRoLWV4ZWN1dGUtcm9vdCI+IHBvdXIKKyAgICBwbHVzIGRlIGTpdGFpbHMuCisgICAgTCdleHRlbnNpb24gPHR0Pi5jdGI8L3R0PiBlc3QgZmFjdWx0YXRpdmUuCisgICAgTGEgdGFibGUgZGUgYnJhaWxsZSBhYnLpZ+kgZXN0IHV0aWxpc+llIHF1YW5kIGxhIGZvbmN0aW9uIGRlIGJyYWlsbGUKKyAgICA2IHBvaW50cyBlc3QgYWN0aXbpZSAodm9pciBsYSBjb21tYW5kZSA8cmVmIGlkPSJjb21tYW5kLVNJWERPVFMiIG5hbWU9IlNJWERPVFMiPgorICAgIGV0IGxhIHBy6WbpcmVuY2UgPHJlZiBpZD0icHJlZmVyZW5jZS10ZXh0LXN0eWxlIiBuYW1lPSJBcHBhcmVuY2UgZHUgdGV4dGUiPikuCisgICAgUGFyIGTpZmF1dCwgbCdhZmZpY2hhZ2UgZXN0IGVuIGJyYWlsbGUgNiBwb2ludHMgaW506WdyYWwuCisgICAgVm91cyBwb3V2ZXog6XZpdGVyIGNldHRlIGxpZ25lIGF2ZWMgbCdvcHRpb24gZW4gbGlnbmUgZGUgY29tbWFuZGUKKyAgICA8cmVmIGlkPSJvcHRpb25zLWNvbnRyYWN0aW9uLXRhYmxlIiBuYW1lPSItYyI+LgorICAgIEVsbGUgbidlc3QgcGFzIGRpc3BvbmlibGUgc2kgbCdvcHRpb24gZGUgY29tcGlsYXRpb24gPHJlZgorICAgIGlkPSJidWlsZC1jb250cmFjdGVkLWJyYWlsbGUiIG5hbWU9Ii0tZGlzYWJsZS1jb250cmFjdGVkLWJyYWlsbGUiPgorICAgIGEg6XTpIHNw6WNpZmnpZS4KKyAgPHRhZz48dHQva2V5LXRhYmxlLyA8ZW0vZmlsZS98PHR0L2F1dG8vPGxhYmVsIGlkPSJjb25maWd1cmUta2V5LXRhYmxlIj48L3RhZz4KKyAgICBTcOljaWZpZSBsYSB0YWJsZSBkZSB0b3VjaGVzCisgICAgKHZvaXIgbGEgc2VjdGlvbiA8cmVmIGlkPSJ0YWJsZS1rZXkiIG5hbWU9IlRhYmxlcyBkZSB0b3VjaGVzIj4gcG91ciBwbHVzIGRlIGTpdGFpbHMpLgorICAgIFNpIHZvdXMgZm91cm5pc3NleiB1biBjaGVtaW4gcmVsYXRpZiwgaWwgZXN0IGFuY3LpIHN1ciA8dHQ+L2V0Yy9icmx0dHk8Lz4KKyAgICAodm9pciBsZXMgb3B0aW9ucyBkZSBjb21waWxhdGlvbiA8cmVmIGlkPSJidWlsZC1kYXRhLWRpcmVjdG9yeSIgbmFtZT0iLS13aXRoLWRhdGEtZGlyZWN0b3J5Ij4KKyAgICBldCA8cmVmIGlkPSJidWlsZC1leGVjdXRlLXJvb3QiIG5hbWU9Ii0td2l0aC1leGVjdXRlLXJvb3QiPiBwb3VyIHBsdXMgZGUgCisgICAgZOl0YWlscykuCisgICAgTCdleHRlbnNpb24gPHR0Ly5rdGIvIGVzdCBmYWN1bHRhdGl2ZS4KKyAgICBQYXIgZOlmYXV0LCBhdWN1bmUgdGFibGUgZGUgdG91Y2hlcyBuJ2VzdCB1dGlsaXPpZS4KKyAgICBMJ2VmZmV0IGRlIGNldHRlIGluc3RydWN0aW9uIHBldXQg6nRyZSBhbm51bOkgcGFyIGwnb3B0aW9uIGVuIGxpZ25lIGRlCisgICAgY29tbWFuZGUKKyAgICA8cmVmIGlkPSJvcHRpb25zLWtleS10YWJsZSIgbmFtZT0iLWsiPi4KKyAgPHRhZz48dHQva2V5Ym9hcmQtcHJvcGVydGllcy8gPGVtL25hbWUvPHR0Lz0vPGVtL3ZhbHVlLzx0dC8sLy4uLjxsYWJlbCBpZD0iY29uZmlndXJlLWtleWJvYXJkLXByb3BlcnRpZXMiPjwvdGFnPgorICAgIFNw6WNpZmllIGxlcyBwcm9wcmnpdOlzIGR1L2RlcyBjbGF2aWVycyhzKSBxdWkgdm9udCDqdHJlIHN1cnZlaWxs6XMgKG1vbml0b3JlZCkuCisgICAgU2kgdm91cyBzcOljaWZpZXogcGx1cyBkJ3VuZSBmb2lzIGxhIG3qbWUgcHJvcHJp6XTpLCBzYSB2YWxldXIgbGEgcGx1cyDgIAorICAgIGRyb2l0ZSBlc3QgdXRpbGlz6WUuIAorICAgIFZvaXIgbGEgc2VjdGlvbiA8cmVmIGlkPSJrZXlib2FyZC1wcm9wZXJ0aWVzIiBuYW1lPSJQcm9wcmnpdOlzIGR1IGNsYXZpZXIiPgorICAgIHBvdXIgdW5lIGxpc3RlIGRlcyBwcm9wcmnpdOlzIHF1ZSB2b3VzIHBvdXZleiBzcOljaWZpZXIuIFBhciBk6WZhdXQsIG9uIGfocmUKKyAgICB0b3VzIGxlcyBjbGF2aWVycy4gVm91cyBwb3V2ZXogYW5udWxlciBsJ2VmZmV0IGRlIGNldHRlIGluc3RydWN0aW9uIGF2ZWMgCisgICAgbCdvcHRpb24gZW4gbGlnbmUgZGUgY29tbWFuZGUgCisgICAgPHJlZiBpZD0ib3B0aW9ucy1rZXlib2FyZC1wcm9wZXJ0aWVzIiBuYW1lPSItSyI+LgorCisgIDx0YWc+PHR0Pm1pZGktZGV2aWNlPC90dD4gPGVtPmRldmljZTwvZW0+PGxhYmVsIGlkPSJjb25maWd1cmUtbWlkaS1kZXZpY2UiPjwvdGFnPgorICAgIFNw6WNpZmllIGxlIHDpcmlwaOlyaXF1ZSDgIHV0aWxpc2VyIHBvdXIgbCdpbnRlcmZhY2UgTUlESQorICAgICh2b2lyIGxhIHNlY3Rpb24gPHJlZiBpZD0ib3BlcmFuZC1taWRpLWRldmljZSIKKyAgICBuYW1lPSJTcOljaWZpY2F0aW9uIGR1IHDpcmlwaOlyaXF1ZSBNSURJIj4pLgorICAgIFZvdXMgcG91dmV6IOl2aXRlciBjZXR0ZSBsaWduZSBhdmVjIGwnb3B0aW9uIGVuIGxpZ25lIGRlIGNvbW1hbmRlCisgICAgPHJlZiBpZD0ib3B0aW9ucy1taWRpLWRldmljZSIgbmFtZT0iLW0iPi4KKyAgICBFbGxlIG4nZXN0IHBhcyBkaXNwb25pYmxlIHNpIHZvdXMgYXZleiBzcOljaWZp6SBsJ29wdGlvbiBkZQorICAgIGNvbXBpbGF0aW9uIDxyZWYgaWQ9ImJ1aWxkLW1pZGktc3VwcG9ydCIgbmFtZT0iLS1kaXNhYmxlLW1pZGktc3VwcG9ydCI+LgorICA8dGFnPjx0dD5wY20tZGV2aWNlPC90dD4gPGVtPmRldmljZTwvZW0+PGxhYmVsIGlkPSJjb25maWd1cmUtcGNtLWRldmljZSI+PC90YWc+CisgICAgU3DpY2lmaWUgbGUgcOlyaXBo6XJpcXVlIOAgdXRpbGlzZXIgcG91ciBsZSBzb24gKHZvaXIgbGEKKyAgICBzZWN0aW9uIDxyZWYgaWQ9Im9wZXJhbmQtcGNtLWRldmljZSIgbmFtZT0iU3DpY2lmaWNhdGlvbiBkdQorICAgIHDpcmlwaOlyaXF1ZSBQQ00iPikuCisgICAgVm91cyBwb3V2ZXog6XZpdGVyIGNldHRlIGxpZ25lIGF2ZWMgbCdvcHRpb24gZW4gbGlnbmUgZGUgY29tbWFuZGUKKyAgICA8cmVmIGlkPSJvcHRpb25zLXBjbS1kZXZpY2UiIG5hbWU9Ii1wIj4uCisgICAgRWxsZSBuJ2VzdCBwYXMgZGlzcG9uaWJsZSBzaSB2b3VzIGF2ZXogc3DpY2lmaekgbCdvcHRpb24gZGUKKyAgICBjb21waWxhdGlvbiA8cmVmIGlkPSJidWlsZC1wY20tc3VwcG9ydCIgbmFtZT0iLS1kaXNhYmxlLXBjbS1zdXBwb3J0Ij4uCisgIDx0YWc+PHR0PnNjcmVlbi1wYXJhbWV0ZXJzPC90dD4gPGVtPm5hbWU8L2VtPjx0dD49PC90dD48ZW0+dmFsdWU8L2VtPjx0dD4sPC90dD4uLi48bGFiZWwgaWQ9ImNvbmZpZ3VyZS1zY3JlZW4tcGFyYW1ldGVycyI+PC90YWc+CisgICAgU3DpY2lmaWUgbGVzIHBhcmFt6HRyZXMgcG91ciBsZSBwaWxvdGUgZCfpY3Jhbi4KKyAgICBTaSBsZSBt6m1lIHBhcmFt6HRyZSBlc3Qgc3DpY2lmaekgcGx1cyBkJ3VuZSBmb2lzLCBzYSB2YWxldXIgbGEKKyAgICBwbHVzIOAgZHJvaXRlIGVzdCB1dGlsaXPpZS4gUG91ciB1bmUgZGVzY3JpcHRpb24gZGVzIHBhcmFt6HRyZXMKKyAgICBhY2NlcHTpcyBwYXIgdW4gcGlsb3RlIGVuIHBhcnRpY3VsaWVyLCB2b3lleiBsYSBkb2N1bWVudGF0aW9uIGRlCisgICAgY2UgcGlsb3RlLiBWb2lyIGwnb3B0aW9uIGRlIGNvbXBpbGF0aW9uIDxyZWYgaWQ9ImJ1aWxkLXNjcmVlbi1wYXJhbWV0ZXJzIiBuYW1lPSItLXdpdGgtc2NyZWVuLXBhcmFtZXRlcnMiPgorICAgIHBvdXIgbGVzIHBhcmFt6HRyZXMgcGFyIGTpZmF1dCDpdGFibGlzIHBlbmRhbnQgbGEgcHJvY+lkdXJlIGRlCisgICAgY29tcGlsYXRpb24uCisgICAgVm91cyBwb3V2ZXog6XZpdGVyIGNldHRlIGxpZ25lIGF2ZWMgbCdvcHRpb24gZW4gbGlnbmUgZGUgY29tbWFuZGUKKyAgICA8cmVmIGlkPSJvcHRpb25zLXNjcmVlbi1wYXJhbWV0ZXJzIiBuYW1lPSItWCI+LgorICA8dGFnPjx0dC9yZWxlYXNlLWRldmljZS8gPGVtL2Jvb2xlYW4vPGxhYmVsIGlkPSJjb25maWd1cmUtcmVsZWFzZS1kZXZpY2UiPjwvdGFnPgorICAgIENy6WUgb3Ugbm9uIGxlIHDpcmlwaOlyaXF1ZSBhdXF1ZWwgbCdhZmZpY2hldXIgYnJhaWxsZSBlc3QgY29ubmVjdOkgbG9yc3F1ZQorICAgIGwn6WNyYW4gb3UgbGEgZmVu6nRyZSBjb3VyYW50IG5lIHBldXZlbnQgcGFzIOp0cmUgbHVzLgorICAgIDxkZXNjcmlwPgorICAgICAgPHRhZy9vbi9DcullciBsZSBw6XJpcGjpcmlxdWUuCisgICAgICA8dGFnL29mZi9OZSBwYXMgY3LpZXIgbGUgcOlyaXBo6XJpcXVlLgorICAgIDwvZGVzY3JpcD4KKyAgICBQYXIgZOlmYXV0LCBsZSBy6WdsYWdlIGVzdCA8dHQvb24vIHN1ciBsZXMgcGxhdGVmb3JtZXMgV2luZG93cyBldAorICAgIDx0dC9vZmYvIG9uIHN1ciBsZXMgYXV0cmVzIHBsYXRlZm9ybWVzLiBWb3VzIHBvdXZleiBhbm51bGVyIGwnZWZmZXQgZGUKKyAgICBjZXR0ZSBpbnN0cnVjdGlvbiBhdmVjIGwnb3B0aW9uIGVuIGxpZ25lIGRlIGNvbW1hbmRlCisgICAgPHJlZiBpZD0ib3B0aW9ucy1yZWxlYXNlLWRldmljZSIgbmFtZT0iLXIiPi4KKyAgIDx0YWc+PHR0L3NjcmVlbi1kcml2ZXIvIDxlbS9kcml2ZXIvPGxhYmVsIGlkPSJjb25maWd1cmUtc2NyZWVuLWRyaXZlciI+PC90YWc+CisgICAgVm9pciBsJ29wdGlvbiBkZSBjb21waWxhdGlvbiA8cmVmIGlkPSJidWlsZC1icmFpbGxlLWRldmljZSIgbmFtZT0iLS13aXRoLXNjcmVlbi1kcml2ZXIiPi4KKyAgICBWb3VzIHBvdXZleiDpdml0ZXIgY2V0dGUgbGlnbmUgYXZlYyBsJ29wdGlvbiBlbiBsaWduZSBkZSBjb21tYW5kZQorICAgIDxyZWYgaWQ9Im9wdGlvbnMtc2NyZWVuLWRyaXZlciIgbmFtZT0iLXgiPi4KKyAgPHRhZz48dHQ+c2NyZWVuLXBhcmFtZXRlcnM8L3R0PiA8ZW0+cGlsb3RlPC9lbT48ZW0+bm9tPC9lbT48dHQ+PTwvdHQ+PGVtPnZhbGV1cjwvZW0+PHR0Piw8L3R0Pi4uLjxsYWJlbCBpZD0iY29uZmlndXJlLXNjcmVlbi1wYXJhbWV0ZXJzIj48L3RhZz4KKyAgICBTcOljaWZpZSBsZXMgcGFyYW3odHJlcyBwb3VyIGxlcyBwaWxvdGVzIGQn6WNyYW4uCisgICAgU2kgbGUgbeptZSBwYXJhbeh0cmUgZXN0IHNw6WNpaekgcGx1cyBkJ3VuZSBmb2lzLCBzYSB2YWxldXIgbGEKKyAgICBwbHVzIOAgZHJvaXRlIGVzdCB1dGlsaXPpZS4gU2kgdW4gbm9tIGRlIHBhcmFt6HRyZSBlc3QgYWZmZWN06SDgIHVuIHBpbG90ZQorICAgICh2b2lyIHNlY3Rpb24gUGlsb3RlcyBkJ+ljcmFuIHN1cHBvcnTpcyksIGNlIHBhcmFt6HRyZSBuZSBzJ2FwcGxpcXVlIHF1J2F1IAorICAgIHBpbG90ZTsgc2lub24gaWwgcydhcHBsaXF1ZSDgIHRvdXMgbGVzIHBpbG90ZXMuIFBvdXIgdW5lIGRlc2NyaXB0aW9uIGRlcyBwYXJhbeh0cmVzCisgICAgYWNjZXB06XMgcGFyIHVuIHBpbG90ZSBlbiBwYXJ0aWN1bGllciwgdm9pciBsYSBkb2N1bWVudGF0aW9uIGRlCisgICAgY2UgcGlsb3RlLiBWb2lyIGwnb3B0aW9uIGRlIGNvbXBpbGF0aW9uIDxyZWYgaWQ9ImJ1aWxkLXNjcmVlbi1wYXJhbWV0ZXJzIiBuYW1lPSItLXdpdGgtc2NyZWVuLXBhcmFtZXRlcnMiPgorICAgIHBvdXIgbGVzIHBhcmFt6HRyZXMgcGFyIGTpZmF1dCDpdGFibGlzIHBlbmRhbnQgbGEgcHJvY+lkdXJlIGRlCisgICAgY29tcGlsYXRpb24uCisgICAgVm91cyBwb3V2ZXog6XZpdGVyIGNldHRlIGxpZ25lIGF2ZWMgbCdvcHRpb24gZW4gbGlnbmUgZGUgY29tbWFuZGUKKyAgICA8cmVmIGlkPSJvcHRpb25zLXNjcmVlbi1wYXJhbWV0ZXJzIiBuYW1lPSItWCI+LgorCisgIDx0YWc+PHR0PnNwZWVjaC1kcml2ZXI8L3R0PiA8ZW0+ZHJpdmVyPC9lbT48dHQ+LDwvdHQ+Li4ufDx0dD5hdXRvPC90dD48bGFiZWwgaWQ9ImNvbmZpZ3VyZS1zcGVlY2gtZHJpdmVyIj48L3RhZz4KKyAgICBTcOljaWZpZSBsZSBwaWxvdGUgZGUgc3ludGjoc2Ugdm9jYWxlcyAodm9pciBsYSBzZWN0aW9uIAorICAgIDxyZWYgaWQ9Im9wZXJhbmQtZHJpdmVyIiBuYW1lPSJTcOljaWZpY2F0aW9uIGR1IHBpbG90ZSBkZSBzeW50aOhzZSI+KS4gUGFyCisgICAgZOlmYXV0LCB1bmUgYXV0b2TpdGVjdGlvbiBlc3QgZWZmZWN0dellLgorICAgIFZvdXMgcG91dmV6IOl2aXRlciBjZXR0ZSBsaWduZSBhdmVjIGwnb3B0aW9uIGVuIGxpZ25lIGRlIGNvbW1hbmRlCisgICAgPHJlZiBpZD0ib3B0aW9ucy1zcGVlY2gtZHJpdmVyIiBuYW1lPSItcyI+LgorICAgIEVsbGUgbidlc3QgcGFzIGRpc3BvbmlibGUgc2kgdm91cyBhdmV6IHNw6WNpZmnpIGwnb3B0aW9uIGRlCisgICAgY29tcGlsYXRpb24gPHJlZiBpZD0iYnVpbGQtc3BlZWNoLXN1cHBvcnQiIG5hbWU9Ii0tZGlzYWJsZS1zcGVlY2gtc3VwcG9ydCI+LgorICA8dGFnPjx0dD5zcGVlY2gtaW5wdXQ8L3R0PiA8ZW0+ZmlsZTwvZW0+PGxhYmVsIGlkPSJjb25maWd1cmUtc3BlZWNoLWlucHV0Ij48L3RhZz4KKyAgICBTcOljaWZpZSBsZSBub20gZGUgbCdvYmpldCBkdSBzeXN06G1lIGRlIGZpY2hpZXJzIChGSUZPLCB0dXlhdSAocGlwZSkKKyAgICBub21t6Swgc29ja2V0IG5vbW3pZSwgZXRjKSBxdWUgZCdhdXRyZXMgYXBwbGljYXRpb25zIHBldXZlbnQgdXRpbGlzZXIgcG91cgorICAgIGNvbnZlcnRpciBkdSB0ZXh0ZSBlbiBwYXJvbGUgYXZlYyBsZSBwaWxvdGUgZGUgc3ludGjoc2UgZGUgQlJMVFRZLgorICAgIFZvdXMgcG91dmV6IOl2aXRlciBjZXR0ZSBsaWduZSBhdmVjIGwnb3B0aW9uIGVuIGxpZ25lIGRlIGNvbW1hbmRlCisgICAgPHJlZiBpZD0ib3B0aW9ucy1zcGVlY2gtaW5wdXQiIG5hbWU9Ii1GIj4uCisgICAgRWxsZSBuJ2VzdCBwYXMgZGlzcG9uaWJsZSBzaSB2b3VzIGF2ZXogc3DpY2lmaekgPHJlZiBpZD0iYnVpbGQtc3BlZWNoLXN1cHBvcnQiIG5hbWU9Ii0tZGlzYWJsZS1zcGVlY2gtc3VwcG9ydCI+LgorICA8dGFnPjx0dD5zcGVlY2gtcGFyYW1ldGVyczwvdHQ+IFs8ZW0+ZHJpdmVyPC9lbT48dHQ+OjwvdHQ+XTxlbT5uYW1lPC9lbT48dHQ+PTwvdHQ+PGVtPnZhbHVlPC9lbT48dHQ+LDwvdHQ+Li4uPGxhYmVsIGlkPSJjb25maWd1cmUtc3BlZWNoLXBhcmFtZXRlcnMiPjwvdGFnPgorICAgIFNw6WNpZmllIGxlcyBwYXJhbeh0cmVzIHBvdXIgbGVzIHBpbG90ZXMgZGUgc3ludGjoc2Ugdm9jYWxlLiBTaQorICAgIHZvdXMgc3DpY2lmaWV6IHBsdXMgZCd1bmUgZm9pcyBsZSBwYXJhbeh0cmUsIGMnZXN0IHNhIHZhbGV1ciBsZQorICAgIHBsdXMg4CBkcm9pdGUgcXVpIGVzdCB1dGlsaXPpZS4gCisgICAgU2kgbGUgbm9tIGQndW4gcGFyYW3odHJlIGVzdCBxdWFsaWZp6SBwYXIgbGUgbm9tIGQndW4gcGlsb3RlICh2b2lyCisgICAgbGEgc2VjdGlvbiA8cmVmIGlkPSJkcml2ZXJzIiBuYW1lPSJDb2RlcyBkJ2lkZW50aWZpY2F0aW9uIGRlIHBpbG90ZSI+KQorICAgIGNlIHBhcmFt6HRyZSBzJ2FwcGxpcXVlIHNldWxlbWVudCDgIGNlIHBpbG90ZTsgc2lub24gaWwgcydhcHBsaXF1ZQorICAgIHBvdXIgdG91cyBsZXMgcGlsb3Rlcy4KKyAgICBQb3VyIHVuZSBkZXNjcmlwdGlvbiBkZXMgcGFyYW3odHJlcyBhY2NlcHTpcyBwYXIgdW4gcGlsb3RlIGVuCisgICAgcGFydGljdWxpZXIsIHZveWV6IGxhIGRvY3VtZW50YXRpb24gZGUgY2UgcGlsb3RlLiBWb2lyIGwnb3B0aW9uIGRlCisgICAgY29tcGlsYXRpb24gPHJlZiBpZD0iYnVpbGQtc3BlZWNoLXBhcmFtZXRlcnMiIG5hbWU9Ii0td2l0aC1zcGVlY2gtcGFyYW1ldGVycyI+CisgICAgcG91ciBsZXMgcGFyYW3odHJlcyBwYXIgZOlmYXV0IOl0YWJsaXMgZHVyYW50IGxhIHByb2PpZHVyZSBkZSBjb21waWxhdGlvbi4KKyAgICBWb3VzIHBvdXZleiDpdml0ZXIgY2V0dGUgbGlnbmUgYXZlYyBsJ29wdGlvbiBlbiBsaWduZSBkZSBjb21tYW5kZQorICAgIDxyZWYgaWQ9Im9wdGlvbnMtc3BlZWNoLXBhcmFtZXRlcnMiIG5hbWU9Ii1TIj4uCisgIDx0YWc+PHR0L3RleHQtdGFibGUvIDxlbS9maWxlL3w8dHQvYXV0by88bGFiZWwgaWQ9ImNvbmZpZ3VyZS10ZXh0LXRhYmxlIj48L3RhZz4KKyAgICBTcOljaWZpZSBsYSB0YWJsZSBkZSB0ZXh0ZSAodm9pciBsYSBzZWN0aW9uIDxyZWYKKyAgICBpZD0idGFibGUtdGV4dCIgbmFtZT0iVGFibGVzIGRlIHRleHRlIj4gcG91ciBsZXMgZOl0YWlscykuCisgICAgU2kgdm91cyBmb3Vybmlzc2V6IHVuIGNoZW1pbiByZWxhdGlmLCBpbCBlc3QgZOl0ZXJtaW7pIHBhciByYXBwb3J0IOAgPHR0Pi9ldGMvYnJsdHR5PC90dD4KKyAgICAodm9pciBsZXMgb3B0aW9ucyBkZSBjb21waWxhdGlvbiA8cmVmIGlkPSJidWlsZC1kYXRhLWRpcmVjdG9yeSIgbmFtZT0iLS13aXRoLWRhdGEtZGlyZWN0b3J5Ij4KKyAgICBldCA8cmVmIGlkPSJidWlsZC1leGVjdXRlLXJvb3QiIG5hbWU9Ii0td2l0aC1leGVjdXRlLXJvb3QiPi4KKyAgICBwb3VyIHBsdXMgZGUgZOl0YWlscykuCisgICAgTCdleHRlbnNpb24gPHR0Pi50dGI8L3R0PiBlc3QgZmFjdWx0YXRpdmUuCisgICAgUG91ciB1biBub20gZGUgZmljaGllciBzaW1wbGUsIGxlIHBy6WZpeGUgPHR0PnRleHQuPC90dD4gZXN0IGZhY3VsdGF0aWYuCisgICAgUGFyIGTpZmF1dCwgb24gculhbGlzZSB1bmUgYXV0by1z6WxlY3Rpb24g4CBwYXJ0aXIgZGUgbGEgbG9jYWxlCisgICAgYXZlYyB1dGlsaXNhdGlvbiBkZSBsYSB0YWJsZSBjb21waWzpZSBlbiBkdXIgZW4gY2FzIGRlIHByb2Js6G1lCisgICAgKHZvaXIgbCdvcHRpb24gZGUgY29tcGlsYXRpb24gPHJlZiBpZD0iYnVpbGQtdGV4dC10YWJsZSIgbmFtZT0iLS13aXRoLXRleHQtdGFibGUiPikuCisgICAgTCdlZmZldCBkZSBjZXR0ZSBpbnN0cnVjdGlvbiBwZXV0IOp0cmUgYW5udWzpIGF2ZWMgbCdvcHRpb24gZW4gbGlnbmUgZGUgY29tbWFuZGUKKyAgICA8cmVmIGlkPSJvcHRpb25zLXRleHQtdGFibGUiIG5hbWU9Ii10Ij4uCis8L2Rlc2NyaXA+CisKKzxzZWN0MT5PcHRpb25zIGVuIGxpZ25lIGRlIGNvbW1hbmRlPGxhYmVsIGlkPSJvcHRpb25zIj48cD4KK1VuIGdyYW5kIG5vbWJyZSBkZSBwYXJhbeh0cmVzIHBldXZlbnQg6nRyZSBzcOljaWZp6XMgZXhwbGljaXRlbWVudAorbG9yc3F1ZSB2b3VzIGFwcGVsZXogQlJMVFRZLiBMYSBjb21tYW5kZSA8dHQ+YnJsdHR5PC90dD4gYWNjZXB0ZSBsZXMgb3B0aW9ucworc3VpdmFudGVzOgorPGRlc2NyaXA+CisgICA8dGFnPjx0dC8tYS88ZW0vZmlsZS8gPHR0Ly0tYXR0cmlidXRlcy10YWJsZT0vPGVtL2ZpbGUvPGxhYmVsIGlkPSJvcHRpb25zLWF0dHJpYnV0ZXMtdGFibGUiPjwvdGFnPgorICAgIFNw6WNpZmllIGxhIHRhYmxlIGQnYXR0cmlidXRzICh2b2lyIGxhIHNlY3Rpb24KKyAgICA8cmVmIGlkPSJ0YWJsZS1hdHRyaWJ1dGVzIiBuYW1lPSJUYWJsZXMgZCdhdHRyaWJ1dHMiPiBwb3VyIGxlcyBk6XRhaWxzKS4KKyAgICBTaSB2b3VzIGZvdXJuaXNzZXogdW4gY2hlbWluIHJlbGF0aWYsIGlsIGVzdCBk6XRlcm1pbukgcGFyIHJhcHBvcnQg4CA8dHQ+L2V0Yy9icmx0dHk8L3R0PgorICAgICh2b2lyIGxlcyBvcHRpb25zIGRlIGNvbXBpbGF0aW9uIDxyZWYgaWQ9ImJ1aWxkLWRhdGEtZGlyZWN0b3J5IiBuYW1lPSItLXdpdGgtZGF0YS1kaXJlY3RvcnkiPgorICAgIGV0IDxyZWYgaWQ9ImJ1aWxkLWV4ZWN1dGUtcm9vdCIgbmFtZT0iLS13aXRoLWV4ZWN1dGUtcm9vdCI+CisgICAgcG91ciBwbHVzIGRlIGTpdGFpbHMpLgorICAgIEwnZXh0ZW5zaW9uIDx0dD4uYXRiPC90dD4gZXN0IGZhY3VsdGF0aXZlLiBTaSB2b3VzIG5lIHNw6WNpZmlleiBwYXMgY2V0dGUKKyAgICBvcHRpb24sIG9uIHN1cHBvc2UgcXVlIGMnZXN0IDx0dC9sZWZ0X3JpZ2h0Ly4gUGFzc2V6LWxhIOAgPHR0L2ludmxlZnRfcmlnaHQvCisgICAgc2kgdm91cyBzb3VoYWl0ZXogbCdhbmNpZW4gY29tcG9ydGVtZW50LgorICAgIFZvaXIgbGEgbGlnbmUgPHJlZiBpZD0iY29uZmlndXJlLWF0dHJpYnV0ZXMtdGFibGUiIG5hbWU9ImF0dHJpYnV0ZXMtdGFibGUiPgorICAgIGR1IGZpY2hpZXIgZGUgY29uZmlndXJhdGlvbiBwb3VyIGxhIHPpbGVjdGlvbiBkZXMgcGFyYW3odHJlcyBwYXIgZOlmYXV0CisgICAgbG9ycyBkZSBsJ2V46WN1dGlvbi4KKyAgICBWb3VzIHBvdXZleiBjaGFuZ2VyIGNlIHBhcmFt6HRyZSBhdmVjIGxhIHBy6WbpcmVuY2UgPHJlZiBpZD0icHJlZmVyZW5jZS1hdHRyaWJ1dGVzLXRhYmxlIiBuYW1lPSJUYWJsZSBkJ2F0dHJpYnV0cyI+LgorICA8dGFnPjx0dD4tYjwvdHQ+PGVtPmRyaXZlcjwvZW0+PHR0Piw8L3R0Pi4uLnw8dHQ+YXV0bzwvdHQ+IDx0dD4tLWJyYWlsbGUtZHJpdmVyPTwvdHQ+PGVtPmRyaXZlcjwvZW0+PHR0Piw8L3R0Pi4uLnw8dHQ+YXV0bzwvdHQ+PGxhYmVsIGlkPSJvcHRpb25zLWJyYWlsbGUtZHJpdmVyIj48L3RhZz4KKyAgICBTcOljaWZpZSBsZSBwaWxvdGUgZGUgbCdhZmZpY2hldXIgYnJhaWxsZSAodm9pciBsYSBzZWN0aW9uCisgICAgPHJlZiBpZD0ib3BlcmFuZC1kcml2ZXIiIG5hbWU9IlNw6WNpZmljYXRpb24gZHUgcGlsb3RlIj4pLgorICAgIFZvaXIgbGEgbGlnbmUgPHJlZiBpZD0iY29uZmlndXJlLWJyYWlsbGUtZHJpdmVyIiBuYW1lPSJicmFpbGxlLWRyaXZlciI+CisgICAgZHUgZmljaGllciBkZSBjb25maWd1cmF0aW9uIHBvdXIgbGVzIHBhcmFt6HRyZXMgcGFyIGTpZmF1dAorICAgIOAgbCdleOljdXRpb24uCisgIDx0YWc+PHR0Pi1jPC90dD48ZW0+ZmljaGllcjwvZW0+IDx0dD4tLWNvbnRyYWN0aW9uLXRhYmxlPTwvdHQ+PGVtPmZpY2hpZXI8L2VtPjxsYWJlbCBpZD0ib3B0aW9ucy1jb250cmFjdGlvbi10YWJsZSI+PC90YWc+CisgICAgU3DpY2lmaWUgbGEgdGFibGUgZGUgYnJhaWxsZSBhYnLpZ+kgKHZvaXIgbGEgc2VjdGlvbiA8cmVmIGlkPSJ0YWJsZS1jb250cmFjdGlvbiIgbmFtZT0iQnJhaWxsZSBhYnLpZ+kiPgorICAgIHBvdXIgbGVzIGTpdGFpbHMpLgorICAgIFNpIHZvdXMgZm91cm5pc3NleiB1biBjaGVtaW4gcmVsYXRpZiwgaWwgZXN0IHJhdHRhY2jpIOAgPHR0Pi9ldGMvYnJsdHR5PC90dD4uCisgICAgKHZvaXIgbGVzIG9wdGlvbnMgZGUgY29tcGlsYXRpb24gPHJlZiBpZD0iYnVpbGQtZGF0YS1kaXJlY3RvcnkiIG5hbWU9Ii0td2l0aC1kYXRhLWRpcmVjdG9yeSI+CisgICAgZXQgPHJlZiBpZD0iYnVpbGQtZXhlY3V0ZS1yb290IiBuYW1lPSItLXdpdGgtZXhlY3V0ZS1yb290Ij4gcG91ciBwbHVzIGRlCisgICAgZOl0YWlscykuCisgICAgTCdleHRlbnNpb24gPHR0Pi5jdGI8L3R0PiBlc3QgZmFjdWx0YXRpdmUuCisgICAgTGEgdGFibGUgZGUgYnJhaWxsZSBhYnLpZ+kgZXN0IHV0aWxpc+llIGxvcnNxdWUgbGEgcG9zc2liaWxpdOkgYnJhaWxsZSA2CisgICAgcG9pbnRzIGVzdCBhY3RpdullICh2b2lyIGxhIGNvbW1hbmRlIDxyZWYgaWQ9ImNvbW1hbmQtU0lYRE9UUyIgbmFtZT0iU0lYRE9UUyI+CisgICAgZXQgbGEgcHLpZulyZW5jZSA8cmVmIGlkPSJwcmVmZXJlbmNlLXRleHQtc3R5bGUiIG5hbWU9IkFwcGFyZW5jZSBkdSB0ZXh0ZSI+KS4KKyAgICBWb2lyIGxhIGxpZ25lIDxyZWYgaWQ9ImNvbmZpZ3VyZS1jb250cmFjdGlvbi10YWJsZSIgbmFtZT0iY29udHJhY3Rpb24tdGFibGUiPgorICAgIGR1IGZpY2hpZXIgZGUgY29uZmlndXJhdGlvbiBwb3VyIGxlcyBwYXJhbeh0cmVzIHBhciBk6WZhdXQg4CBsJ2V46WN1dGlvbi4KKyAgICBWb3VzIHBvdXZleiBjaGFuZ2VyIGNlIHBhcmFt6HRyZSBhdmVjCisgICAgbGEgcHLpZulyZW5jZSA8cmVmIGlkPSJwcmVmZXJlbmNlLWNvbnRyYWN0aW9uLXRhYmxlIiBuYW1lPSJUYWJsZSBkZSBicmFpbGxlIGFiculn6SI+LgorICAgIENldHRlIG9wdGlvbiBuJ2VzdCBwYXMgZGlzcG9uaWJsZSBzaSBsJ29wdGlvbiBkZSBjb21waWxhdGlvbiAKKyAgICA8cmVmIGlkPSJidWlsZC1jb250cmFjdGVkLWJyYWlsbGUiIG5hbWU9Ii0tZGlzYWJsZS1jb250cmFjdGVkLWJyYWlsbGUiPgorICAgIGEg6XTpIHNw6WNpZmnpZS4KKyAgPHRhZz48dHQ+LWQ8L3R0PjxlbT5wZXJpcGhlcmlxdWU8L2VtPjx0dD4sPC90dD4uLi4gPHR0Pi0tYnJhaWxsZS1kZXZpY2U9PC90dD48ZW0+ZGV2aWNlPC9lbT48dHQ+LDwvdHQ+Li4uPGxhYmVsIGlkPSJvcHRpb25zLWJyYWlsbGUtZGV2aWNlIj48L3RhZz4KKyAgICBTcOljaWZpZSBsZSBw6XJpcGjpcmlxdWUgYXVxdWVsIGwnYWZmaWNoZXVyIGJyYWlsbGUgZXN0IGNvbm5lY3TpICh2b2lyIGxhCisgICAgc2VjdGlvbiA8cmVmIGlkPSJvcGVyYW5kLWJyYWlsbGUtZGV2aWNlIiBuYW1lPSJTcOljaWZpY2F0aW9uIGR1IHDpcmlwaOlyaXF1ZSBicmFpbGxlIj4pLgorICAgIFZvaXIgbGEgbGlnbmUgPHJlZiBpZD0iY29uZmlndXJlLWJyYWlsbGUtZGV2aWNlIiBuYW1lPSJicmFpbGxlLWRldmljZSI+CisgICAgZHUgZmljaGllciBkZSBjb25maWd1cmF0aW9uIHBvdXIgbGVzIHBhcmFt6HRyZXMgcGFyIGTpZmF1dCDgCisgICAgbCdleOljdXRpb24uCisgIDx0YWc+PHR0Pi1lPC90dD4gPHR0Pi0tc3RhbmRhcmQtZXJyb3I8L3R0PjxsYWJlbCBpZD0ib3B0aW9ucy1zdGFuZGFyZC1lcnJvciI+PC90YWc+CisgICAgRWNyaXQgbGVzIG1lc3NhZ2VzIGRlIGRpYWdub3N0aWMgc3VyIGxhIGNvbnNvbGUgZCdlcnJldXIgc3RhbmRhcmQgKHN0ZGVycikuCisgICAgUGFyIGTpZmF1dCwgaWxzIHMnZW5yZWdpc3RyZW50IGRhbnMgPHR0PnN5c2xvZzwvdHQ+LgorICA8dGFnPjx0dD4tZjwvdHQ+PGVtPmZpY2hpZXI8L2VtPiA8dHQ+LS1jb25maWd1cmF0aW9uLWZpbGU9PC90dD48ZW0+ZmlsZTwvZW0+PGxhYmVsIGlkPSJvcHRpb25zLWNvbmZpZ3VyYXRpb24tZmlsZSI+PC90YWc+CisgICAgU3DpY2lmaWUgbCdlbXBsYWNlbWVudCBkdSA8cmVmIGlkPSJjb25maWd1cmUiIG5hbWU9ImZpY2hpZXIgZGUgY29uZmlndXJhdGlvbiI+CisgICAgcXVpIGRvaXQg6nRyZSB1dGlsaXPpIHBvdXIgbCfpdGFibGlzc2VtZW50IGRlcyBwYXJhbeh0cmVzIHBhciBk6WZhdXQg4CBsJ2V46WN1dGlvbi4KKyAgIDx0YWc+PHR0Ly1oLyA8dHQvLS1oZWxwLzxsYWJlbCBpZD0ib3B0aW9ucy1oZWxwIj48L3RhZz4KKyAgICBBZmZpY2hlIHVuIHLpc3Vt6SBkZXMgb3B0aW9ucyBlbiBsaWduZSBkZSBjb21tYW5kZSBhY2NlcHTpZXMgcGFyIEJSTFRUWSwKKyAgICBwdWlzIHF1aXR0ZS4KKyAgPHRhZz48dHQvLWkvPGVtL25vbS8gPHR0Ly0tc3BlZWNoLWlucHV0PS88ZW0vbm9tLzxsYWJlbCBpZD0ib3B0aW9ucy1zcGVlY2gtaW5wdXQiPjwvdGFnPgorICAgIFNw6WNpZmllIGxlIG5vbSBkZSBsJ29iamV0IGR1IHN5c3TobWUgZGUgZmljaGllcnMgKEZJRk8sIHR1eWF1IChwaXBlKSBub21t6SwKKyAgICBzb2NrZXQgbm9tbellLCBldGMpIHF1ZSBsZXMgYXBwbGljYXRpb25zIHBldXZlbnQgdXRpbGlzZXIgcG91ciBjb252ZXJ0aXIgZHUKKyAgICB0ZXh0ZSBlbiBwYXJvbGUgYXZlYyBsZSBwaWxvdGUgZGUgc3ludGjoc2UgZGUgQlJMVFRZLiBTaSBlbGxlIG4nZXN0IHBhcworICAgIHNw6WNpZmnpZSwgbCdvYmpldCBkdSBzeXN06G1lIGRlIGZpY2hpZXJzIG4nZXN0IHBhcyBjcunpLgorICAgIFZvaXIgbGEgbGlnbmUgPHJlZiBpZD0iY29uZmlndXJlLXNwZWVjaC1pbnB1dCIgbmFtZT0ic3BlZWNoLWlucHV0Ij4gZHUKKyAgICBmaWNoaWVyIGRlIGNvbmZpZ3VyYXRpb24gcG91ciBsZSBy6WdsYWdlIHBhciBk6WZhdXQgYXUgbW9tZW50IGRlIGwnZXjpY3V0aW9uLgorICAgIENldHRlIG9wdGlvbiBuJ2VzdCBwYXMgZGlzcG9uaWJsZSBzaSB2b3VzIGF2ZXogc3DpY2lmaekgbCdvcHRpb24gZGUKKyAgICBjb21waWxhdGlvbiA8cmVmIGlkPSJidWlsZC1zcGVlY2gtc3VwcG9ydCIgbmFtZT0iLS1kaXNhYmxlLXNwZWVjaC1zdXBwb3J0Ij4uCisgIDx0YWc+PHR0Ly1rLzxlbS9maWxlLyA8dHQvLS1rZXktdGFibGU9LzxlbS9maWxlLzxsYWJlbCBpZD0ib3B0aW9ucy1rZXktdGFibGUiPjwvdGFnPgorICAgIFNw6WNpZmllIGxhIHRhYmxlIGRlIHRvdWNoZXMKKyAgICAodm9pciBsYSBzZWN0aW9uIDxyZWYgaWQ9InRhYmxlLWtleSIgbmFtZT0iS2V5IFRhYmxlcyI+IHBvdXIgcGx1cyBkZSBk6XRhaWxzKS4KKyAgICBTaSB2b3VzIGZvdXJuaXNzZXogdW4gY2hlbWluIHJlbGF0aWYsIGlsIGVzdCBhbmNy6SDgIDx0dD4vZXRjL2JybHR0eTwvPgorICAgICh2b2lyIGxlcyBvcHRpb25zIGRlIGNvbXBpbGF0aW9uIDxyZWYgaWQ9ImJ1aWxkLWRhdGEtZGlyZWN0b3J5IiBuYW1lPSItLXdpdGgtZGF0YS1kaXJlY3RvcnkiPgorICAgIGV0IDxyZWYgaWQ9ImJ1aWxkLWV4ZWN1dGUtcm9vdCIgbmFtZT0iLS13aXRoLWV4ZWN1dGUtcm9vdCI+IHBvdXIgcGx1cyBkZSBk6XRhaWxzKS4KKyAgICBMJ2V4dGVuc2lvbiA8dHQvLmt0Yi8gZXN0IGZhY3VsdGF0aXZlLiBWb2lyIGwnaW5zdHJ1Y3Rpb24KKyAgICA8cmVmIGlkPSJjb25maWd1cmUta2V5LXRhYmxlIiBuYW1lPSJrZXktdGFibGUiPiBkdSBmaWNoaWVyIGRlCisgICAgY29uZmlndXJhdGlvbiBwb3VyIGxlIHBhcmFt6HRyZSBkJ2V46WN1dGlvbiBwYXIgZOlmYXV0LiBWb3VzIHBvdXZleiBtb2RpZmllcgorICAgIGNlIHBhcmFt6HRyZSBhdmVjIGxhIHBy6WbpcmVuY2UgCisgICAgPHJlZiBpZD0icHJlZmVyZW5jZS1rZXktdGFibGUiIG5hbWU9IlRhYmxlIGRlIHRvdWNoZXMiPi4KKworICA8dGFnPjx0dD4tbDwvdHQ+PGVtPm5pdmVhdTwvZW0+IDx0dD4tLWxvZy1sZXZlbD08L3R0PjxlbT5sZXZlbDwvZW0+PGxhYmVsIGlkPSJvcHRpb25zLWxvZy1sZXZlbCI+PC90YWc+CisgICAgU3DpY2lmaWUgbGUgbml2ZWF1IGRlIHPpY3VyaXTpIHBvdXIgbCfpbWlzc2lvbiBkZXMgbWVzc2FnZXMgZGUgZGlhZ25vc3RpcXVlLgorICAgIExlcyBuaXZlYXV4IHN1aXZhbnRzIHNvbnQgcmVjb25udXMuCisgICAgPGRlc2NyaXA+CisgICAgICA8dGFnPjA8L3RhZz5lbWVyZ2VuY3kgKHVyZ2VuY2UpCisgICAgICA8dGFnPjE8L3RhZz5hbGVydCAoYXZlcnRpc3NlbWVudCkKKyAgICAgIDx0YWc+MjwvdGFnPmNyaXRpY2FsIChjcml0aXF1ZSkKKyAgICAgIDx0YWc+MzwvdGFnPmVycm9yIChlcnJldXIpCisgICAgICA8dGFnPjQ8L3RhZz53YXJuaW5nIChhdHRlbnRpb24pCisgICAgICA8dGFnPjU8L3RhZz5ub3RpY2UgKG5vdGUpCisgICAgICA8dGFnPjY8L3RhZz5pbmZvcm1hdGlvbgorICAgICAgPHRhZz43PC90YWc+ZGVidWcgKGTpYm9nYWdlKQorICAgIDwvZGVzY3JpcD4KKyAgICBWb3VzIHBvdXZleiBmb3VybmlyIHNvaXQgbGUgbnVt6XJvIHNvaXQgbGUgbm9tLCBldCB2b3VzIHBvdXZleiBhYnLpZ2VyIGxlIG5vbS4KKyAgICBTaSB2b3VzIG5lIHNw6WNpZmlleiBwYXMgY2VsYSwgYydlc3QgPHR0PmluZm9ybWF0aW9uPC90dD4gcXVpIGVzdCB1dGlsaXPpCisgICAgKHZvaXIgbCdvcHRpb24gPHJlZiBpZD0ib3B0aW9ucy1xdWlldCIgbmFtZT0iLXEiPiBwb3VyIHBsdXMgZGUgZOl0YWlscykuCisgIDx0YWc+PHR0Pi1tPC90dD48ZW0+cOlyaXBo6XJpcXVlPC9lbT4gPHR0Pi0tbWlkaS1kZXZpY2U9PC90dD48ZW0+ZGV2aWNlPC9lbT48bGFiZWwgaWQ9Im9wdGlvbnMtbWlkaS1kZXZpY2UiPjwvdGFnPgorICAgIFNw6WNpZmllIGxlIHBpbG90ZSDgIHV0aWxpc2VyIHBvdXIgbCdpbnRlcmZhY2UgTUlESS4KKyAgICAodm9pciBsYSBzZWN0aW9uIDxyZWYgaWQ9Im9wZXJhbmQtbWlkaS1kZXZpY2UiIG5hbWU9IlNw6WNpZmljYXRpb24gZHUgcOlyaXBo6XJpcXVlIE1JREkiPikuCisgICAgVm9pciBsYSBsaWduZSA8cmVmIGlkPSJjb25maWd1cmUtbWlkaS1kZXZpY2UiIG5hbWU9Im1pZGktZGV2aWNlIj4KKyAgICBkdSBmaWNoaWVyIGRlIGNvbmZpZ3VyYXRpb24gcG91ciBsZXMgcGFyYW3odHJlcyBwYXIgZOlmYXV0IOAgbCdleOljdXRpb24uCisgICAgQ2V0dGUgb3B0aW9uIG4nZXN0IHBhcyBkaXNwb25pYmxlIHNpIHZvdXMgYXZleiBzcOljaWZp6SBsJ29wdGlvbiBkZQorICAgIGNvbXBpbGF0aW9uIDxyZWYgaWQ9ImJ1aWxkLW1pZGktc3VwcG9ydCIgbmFtZT0iLS1kaXNhYmxlLW1pZGktc3VwcG9ydCI+LgorICA8dGFnPjx0dD4tbjwvdHQ+IDx0dD4tLW5vLWRhZW1vbjwvdHQ+PGxhYmVsIGlkPSJvcHRpb25zLW5vLWRhZW1vbiI+PC90YWc+CisgICAgSW5kaXF1ZSDgIEJSTFRUWSBxdSdpbCBkb2l0IHJlc3RlciBhdSBwcmVtaWVyIHBsYW4uCisgICAgU2kgY2V0dGUgb3B0aW9uIG4nZXN0IHBhcyBzcOljaWZp6WUsIEJSTFRUWSBkZXZpZW50IHVuIHByb2Nlc3N1cyBlbgorICAgIHTiY2hlIGRlIGZvbmQgKGTpbW9uKSBhcHLocyBzJ+p0cmUgaW5pdGlhbGlz6SBtYWlzIGF2YW50IGRlIGTpbWFycmVyIHRvdXMKKyAgICBsZXMgcGlsb3RlcyBz6WxlY3Rpb25u6XMuCisgIDx0YWc+PHR0Pi1wPC90dD48ZW0+cOlyaXBo6XJpcXVlPC9lbT4gPHR0Pi0tcGNtLWRldmljZT08L3R0PjxlbT5kZXZpY2U8L2VtPjxsYWJlbCBpZD0ib3B0aW9ucy1wY20tZGV2aWNlIj48L3RhZz4KKyAgICBTcOljaWZpZSBsZSBw6XJpcGjpcmlxdWUg4CB1dGlsaXNlciBwb3VyIGxlIHNvbiAodm9pciBsYSBzZWN0aW9uCisgICAgKDxyZWYgaWQ9Im9wZXJhbmQtcGNtLWRldmljZSIgbmFtZT0iU3DpY2lmaWNhdGlvbiBkdSBw6XJpcGjpcmlxdWUgUENNIj4pLgorICAgIFZvaXIgbGEgbGlnbmUgPHJlZiBpZD0iY29uZmlndXJlLXBjbS1kZXZpY2UiIG5hbWU9InBjbS1kZXZpY2UiPgorICAgIGR1IGZpY2hpZXIgZGUgY29uZmlndXJhdGlvbiBwb3VyIGxlcyBwYXJhbeh0cmVzIHBhciBk6WZhdXQg4CBsJ2V46WN1dGlvbi4KKyAgICBDZXR0ZSBvcHRpb24gbidlc3QgcGFzIGRpc3BvbmlibGUgc2kgdm91cyBhdmV6IHNw6WNpZmnpIGwnb3B0aW9uIGRlIAorICAgIGNvbXBpbGF0aW9uIDxyZWYgaWQ9ImJ1aWxkLXBjbS1zdXBwb3J0IiBuYW1lPSItLWRpc2FibGUtcGNtLXN1cHBvcnQiPi4KKyAgPHRhZz48dHQ+LXE8L3R0PiA8dHQ+LS1xdWlldDwvdHQ+PGxhYmVsIGlkPSJvcHRpb25zLXF1aWV0Ij48L3RhZz4KKyAgICBNZXQgbW9pbnMgZCdpbmZvcm1hdGlvbnMgZGFucyBsZSBqb3VybmFsLiBDZXR0ZSBvcHRpb24gcGFzc2UgbGUgbml2ZWF1IGRlCisgICAgam91cm5hbGlzYXRpb24gKHZvaXIgbCdvcHRpb24gPHJlZiBpZD0ib3B0aW9ucy1sb2ctbGV2ZWwiIG5hbWU9Ii1sIj4KKyAgICDgIDx0dD5ub3RpY2U8L3R0PiBzaSB2b3VzIGF2ZXogc3DpY2lmaekgbCdvcHRpb24gPHJlZiBpZD0ib3B0aW9ucy12ZXJpZnkiIG5hbWU9Ii12Ij4KKyAgICBvdSA8cmVmIGlkPSJvcHRpb25zLXZlcnNpb24iIG5hbWU9Ii1WIj4sCisgICAgZXQsIHNpbm9uLCDgIDx0dD53YXJuaW5nPC90dD4uCisgIDx0YWc+PHR0Pi1yPC90dD4gPHR0Pi0tcmVsZWFzZS1kZXZpY2U9PC90dD4uLi58PHR0PmF1dG88L3R0PjxsYWJlbCBpZD0ib3B0aW9ucy1yZWxlYXNlLWRldmljZSI+PC90YWc+CisgICAgUHJlbmQgZW4gY29tcHRlIGxlIHDpcmlwaOlyaXF1ZSBhdXF1ZWwgZXN0IGNvbm5lY3TpIGwnYWZmaWNoZXVyIGJyYWlsbGUgCisgICAgbG9yc3F1ZSAgbCfpY3JhbiBjb3VyYW50IG91IGxhIGZlbup0cmUgIG5lIHBldXZlbnQgcGFzIOp0cmUgbHVzLgorICAgIFZvaXIgbGEgbGlnbmUgPHJlZiBpZD0iY29uZmlndXJlLXNwZWVjaC1kcml2ZXIiIG5hbWU9InJlbGVhc2UtZGV2aWNlIj4KKyAgICBkdSBmaWNoaWVyIGRlIGNvbmZpZ3VyYXRpb24gcG91ciBsZXMgcGFyYW3odHJlcyBwYXIgZOlmYXV0IOAgbCdleOljdXRpb24uCisgIDx0YWc+PHR0Pi1zPC90dD48ZW0+cOlyaXBo6XJpcXVlPC9lbT48dHQ+LDwvdHQ+Li4ufDx0dD5hdXRvPC90dD4gPHR0Pi0tc3BlZWNoLWRyaXZlcj08L3R0PjxlbT5waWxvdGU8L2VtPjx0dD4sPC90dD4uLi58PHR0PmF1dG88L3R0PjxsYWJlbCBpZD0ib3B0aW9ucy1zcGVlY2gtZHJpdmVyIj48L3RhZz4KKyAgICBTcOljaWZpZSBsZSBwaWxvdGUgZGUgbGEgc3ludGjoc2Ugdm9jYWxlICh2b2lyIGxhIHNlY3Rpb24gCisgICAgPHJlZiBpZD0ib3BlcmFuZC1kcml2ZXIiIG5hbWU9IlNw6WNpZmljYXRpb24gZGUgcGlsb3RlIj4pLgorICAgIFZvaXIgbGEgbGlnbmUgPHJlZiBpZD0iY29uZmlndXJlLXNwZWVjaC1kcml2ZXIiIG5hbWU9InNwZWVjaC1kcml2ZXIiPgorICAgIGR1IGZpY2hpZXIgZGUgY29uZmlndXJhdGlvbiBwb3VyIGxlcyBwYXJhbeh0cmVzIHBhciBk6WZhdXQg4CBsJ2V46WN1dGlvbi4KKyAgICBDZXR0ZSBvcHRpb24gbidlc3QgcGFzIGRpc3BvbmlibGUgc2kgdm91cyBhdmV6IHNw6WNpZmnpIGwnb3B0aW9uIGRlIGNvbXBpbGF0aW9uCisgICAgPHJlZiBpZD0iYnVpbGQtc3BlZWNoLXN1cHBvcnQiIG5hbWU9Ii0tZGlzYWJsZS1zcGVlY2gtc3VwcG9ydCI+LgorICAgPHRhZz48dHQvLXQvPGVtL2ZpbGUvIDx0dC8tLXRleHQtdGFibGU9LzxlbS9maWxlLzxsYWJlbCBpZD0ib3B0aW9ucy10ZXh0LXRhYmxlIj48L3RhZz4KKyAgICBTcOljaWZpZSBsYSB0YWJsZSBkZSB0ZXh0ZSAodm9pciBsYSBzZWN0aW9uCisgICAgPHJlZiBpZD0idGFibGUtdGV4dCIgbmFtZT0iVGFibGVzIGRlIHRleHRlIj4gcG91ciBsZXMgZOl0YWlscykuCisgICAgU2kgdm91cyBmb3Vybmlzc2V6IHVuIGNoZW1pbiByZWxhdGlmLCBpbCBlc3QgcmF0dGFjaOkg4CA8dHQ+L2V0Yy9icmx0dHk8L3R0PgorICAgICh2b2lyIGxlcyBvcHRpb25zIGRlIGNvbXBpbGF0aW9uIDxyZWYgaWQ9ImJ1aWxkLWRhdGEtZGlyZWN0b3J5IiBuYW1lPSItLXdpdGgtZGF0YS1kaXJlY3RvcnkiPgorICAgIGV0IDxyZWYgaWQ9ImJ1aWxkLWV4ZWN1dGUtcm9vdCIgbmFtZT0iLS13aXRoLWV4ZWN1dGUtcm9vdCI+IHBvdXIgcGx1cyBkZQorICAgIGTpdGFpbHMpLgorICAgIEwnZXh0ZW5zaW9uIDx0dD4udHRiPC90dD4gZXN0IGZhY3VsdGF0aXZlLgorICAgIFBvdXIgdW4gbm9tIGRlIGZpY2hpZXIgc2ltcGxlLCBsZSBw6WZpeGUgPHR0PnRleHQuPC90dD4gZXN0IGZhY3VsdGF0aWYuCisgICAgVm9pciBsYSBsaWduZSA8cmVmIGlkPSJjb25maWd1cmUtdGV4dC10YWJsZSIgbmFtZT0idGV4dC10YWJsZSI+CisgICAgZHUgZmljaGllciBkZSBjb25maWd1cmVhdGlvbiBwb3VyIGxlcyBwYXJhbeh0cmVzIHBhciBk6WZhdXQg4CBsJ2V46WN1dGlvbi4KKyAgICBWb3VzIHBvdXZleiBjaGFuZ2VyIGNlIHBhcmFt6HRyZSBhdmVjIGxhIHBy6WbpcmVuY2UgPHJlZiBpZD0icHJlZmVyZW5jZS10ZXh0LXRhYmxlIiBuYW1lPSJUYWJsZSBkZSB0ZXh0ZSI+LgorICA8dGFnPjx0dD4tdjwvdHQ+IDx0dD4tLXZlcmlmeTwvdHQ+PGxhYmVsIGlkPSJvcHRpb25zLXZlcmlmeSI+PC90YWc+CisgICAgQWZmaWNoZSBsZXMgdmVyc2lvbnMgY291cmFudGVzIGRlIEJSTFRUWSwgZHUgY/R06SBzZXJ2ZXVyIGRlIHNvbgorICAgIEFQSSwgZXQgZGVzIHBpbG90ZXMgZGUgc3ludGjoc2UKKyAgICBldCBkZSBicmFpbGxlIHPpbGVjdGlvbm7pcywgcHVpcyBxdWl0dGUuCisgICAgU2kgbCdvcHRpb24gPHJlZiBpZD0ib3B0aW9ucy1xdWlldCIgbmFtZT0iLXEiPiBuJ2VzdCBwYXMgc3DpY2lpZmnpZSwKKyAgICBhZmZpY2hlIGF1c3NpIGxlcyB2YWxldXJzIGRlcworICAgIG9wdGlvbnMgYXBy6HMgcXVlIHRvdXRlcyBsZXMgc291cmNlcyBhaWVudCDpdOkgZXhhbWlu6WVzLgorICAgIFNpIHZvdXMgYXZleiBzcOljaWZp6SBwbHVzIGQndW4gcGlsb3RlIGJyYWlsbGUgKHZvaXIgbCdvcHRpb24gZW4gbGlnbmUgZGUKKyAgICBjb21tYW5kZSA8cmVmIGlkPSJvcHRpb25zLWJyYWlsbGUtZHJpdmVyIiBuYW1lPSItYiI+KSBldC9vdSBwbHVzIGQndW4KKyAgICBw6XJpcGjpcmlxdWUgYnJhaWxsZSAodm9pciBsJ29wdGlvbiBlbiBsaWduZSBkZSBjb21tYW5kZSA8cmVmIGlkPSJvcHRpb25zLWJyYWlsbGUtZGV2aWNlIiBuYW1lPSItZCI+KSwKKyAgICB1bmUgYXV0b2TpdGVjdGlvbiBkZSBsJ2FmZmljaGV1ciBicmFpbGxlIGVzdCBlbnRyZXByaXNlLgorICAgIFNpIHZvdXMgYXZleiBzcOljaWZp6SBwbHVzIGQndW4gcGlsb3RlIGRlIHN5bnRo6HNlICh2b2lyIGwnb3B0aW9uIGVuIGxpZ25lCisgICAgZGUgY29tbWFuZGUgPHJlZiBpZD0ib3B0aW9ucy1zcGVlY2gtZHJpdmVyIiBuYW1lPSItcyI+KSwgdW5lIGF1dG9k6XRlY3Rpb24KKyAgICBkZSBsYSBzeW50aOhzZSB2b2NhbGUgZXN0IGVudHJlcHJpc2UuCisgIDx0YWc+PHR0Pi14PC90dD48ZW0+cGlsb3RlPC9lbT4gPHR0Pi0tc2NyZWVuLWRyaXZlcj08L3R0PjxlbT5waWxvdGU8L2VtPi4uLjxsYWJlbCBpZD0ib3B0aW9ucy1zY3JlZW4tZHJpdmVyIj48L3RhZz4KKyAgICBTcOljaWZpZSBsZSBwaWxvdGUgZCfpY3JhbiAodm9pciBsYSBzZWN0aW9uIFBpbG90ZXMgZCfpY3JhbiBzdXBwb3J06XMpLgorICAgIFZvaXIgbGEgbGlnbmUgPHJlZiBpZD0iY29uZmlndXJlLWJyYWlsbGUtZGV2aWNlIiBuYW1lPSJzY3JlZW4tZHJpdmVyIj4KKyAgICBkdSBmaWNoaWVyIGRlIGNvbmZpZ3VyYXRpb24gcG91ciBsZXMgcGFyYW3odHJlcyBwYXIgZOlmYXV0IOAKKyAgICBsJ2V46WN1dGlvbi4KKyAgPHRhZz48dHQ+LUE8L3R0PjxlbT5ub208L2VtPjx0dD49PC90dD48ZW0+dmFsZXVyPC9lbT48dHQ+LDwvdHQ+Li4uIDx0dD4tLWFwaS1wYXJhbWV0ZXJzPTwvdHQ+PGVtPm5hbWU8L2VtPjx0dD49PC90dD48ZW0+dmFsdWU8L2VtPjx0dD4sPC90dD4uLi48bGFiZWwgaWQ9Im9wdGlvbnMtYXBpLXBhcmFtZXRlcnMiPjwvdGFnPgorICAgIFNw6WNpZmllIGxlcyBwYXJhbeh0cmVzIHBvdXIgbCdBUEkuCisgICAgU2kgdm91cyBzcOljaWZpZXogbGUgbeptZSBwYXJhbeh0cmUgcGx1cyBkJ3VuZSBmb2lzLCBjJ2VzdCBzYSB2YWxldXIgbGEKKyAgICBwbHVzIOAgZHJvaXRlIHF1aSBlc3QgdXRpbGlz6WUuIFBvdXIgdW5lIGRlc2NyaXB0aW9uIGRlcyBwYXJhbeh0cmVzIGFjY2VwdOlzCisgICAgcGFyIGwnaW50ZXJmYWNlLCByZXBvcnRlei12b3VzIGF1IG1hbnVlbCBkZSBy6WbpcmVuY2UgPGJmPkJybEFQSTwvYmY+LgorICAgIFZvaXIgbGEgbGlnbmUgPHJlZiBpZD0iY29uZmlndXJlLWFwaS1wYXJhbWV0ZXJzIiBuYW1lPSJhcGktcGFyYW1ldGVycyI+CisgICAgZHUgZmljaGllciBkZSBjb25maWd1cmF0aW9uIHBvdXIgbGVzIHBhcmFt6HRyZXMgcGFyIGTpZmF1dCDgIGwnZXjpY3V0aW9uLgorICA8dGFnPjx0dD4tQjwvdHQ+WzxlbT5waWxvdGU8L2VtPjx0dD46PC90dD5dPGVtPm5vbTwvZW0+PHR0Pj08L3R0PjxlbT52YWxldXI8L2VtPjx0dD4uLi48L3R0PiA8dHQ+LS1icmFpbGxlLXBhcmFtZXRlcnM9PC90dD5bPGVtPnBpbG90ZTwvZW0+PHR0Pjo8L3R0Pl08ZW0+bm9tPC9lbT48dHQ+PTwvdHQ+PGVtPnZhbGV1cjwvZW0+PHR0Piw8L3R0Pi4uLjxsYWJlbCBpZD0ib3B0aW9ucy1icmFpbGxlLXBhcmFtZXRlcnMiPjwvdGFnPgorICAgIFNw6WNpZmllIGxlcyBwYXJhbeh0cmVzIHBvdXIgbGVzIHBpbG90ZXMgZGVzIGFmZmljaGV1cnMgYnJhaWxsZS4gCisgICAgU2kgdm91cyBzcOljaWZpZXogbGUgbeptZSBwYXJhbeh0cmUgcGx1cyBkJ3VuZSBmb2lzLCBjJ2VzdCBzYSB2YWxldXIgbGUKKyAgICBwbHVzIOAgZHJvaXRlIHF1aSBlc3QgdXRpbGlz6WUuIFNpIHZvdXMgcXVhbGlmaWV6IGxlIG5vbSBkJ3VuIHBhcmFt6HRyZSBwYXIgdW4gcGlsb3RlLCAodm9pcgorICAgIGxhIHNlY3Rpb24gPHJlZiBpZD0iZHJpdmVycyIgbmFtZT0iQ29kZXMgZCdpZGVudGlmaWNhdGlvbiBkZXMgcGlsb3RlcyI+KSBjZSBwYXJhbeh0cmUKKyAgICBuZSBzJ2FwcGxpcXVlIHF1J+AgY2UgcGlsb3RlOyBzaW5vbiBpbCBzJ2FwcGxpcXVlIOAgdG91cyBsZXMgcGlsb3Rlcy4KKyAgICBQb3VyIHVuZSBkZXNjcmlwdGlvbiBkZXMgcGFyYW3odHJlcyBhY2NlcHTpcyBwYXIgdW4gcGlsb3RlIGVuIHBhcnRpY3VsaWVyLAorICAgIHJlcG9ydGV6LXZvdXMg4CBsYSBkb2N1bWVudGF0aW9uIGRlIGNlIHBpbG90ZS4KKyAgICBWb2lyIGxhIGxpZ25lIDxyZWYgaWQ9ImNvbmZpZ3VyZS1icmFpbGxlLXBhcmFtZXRlcnMiIG5hbWU9ImJyYWlsbGUtcGFyYW1ldGVycyI+CisgICAgZHUgZmljaGllciBkZSBjb25maWd1cmF0aW9uIHBvdXIgbGVzIHBhcmFt6HRyZXMgcGFyIGTpZmF1dCDgIGwnZXjpY3V0aW9uLgorICA8dGFnPjx0dD4tRTwvdHQ+IDx0dD4tLWVudmlyb25tZW50LXZhcmlhYmxlczwvdHQ+PGxhYmVsIGlkPSJvcHRpb25zLWVudmlyb25tZW50LXZhcmlhYmxlcyI+PC90YWc+CisgICAgUmVjb25uYe50IGxlcyB2YXJpYWJsZXMgZCdlbnZpcm9ubmVtZW50IHF1YW5kIGxlcyBwYXJhbeh0cmVzIHBhciBk6WZhdXQKKyAgICBwb3VyIGRlcyBvcHRpb25zIGVuIGxpZ25lIGRlIGNvbW1hbmRlcyBub24gc3DpY2lmaellcyBzb250IGTpdGVybWlu6WVzCisgICAgKHZvaXIgbGEgc2VjdGlvbiA8cmVmIGlkPSJvcHRpb25zIiBuYW1lPSJPcHRpb25zIGVuIGxpZ25lIGRlIGNvbW1hbmRlIj4pLgorICAgIFNpIHZvdXMgc3DpY2lmaWV6IGNldHRlIG9wdGlvbiwgZXQgc2kgdm91cyBk6WZpbmlzc2V6IHVuZSB2YXJpYWJsZQorICAgIGQnZW52aXJvbm5lbWVudCBhc3NvY2npZSDgIHVuZSBvcHRpb24gbm9uIHNw6WNpZmnpZSwgYydlc3QgbGEgdmFsZXVyIGRlIGNldHRlIHZhcmlhYmxlIGQnZW52aXJvbm5lbWVudCBxdWkgZXN0CisgICAgdXRpbGlz6WUuIExlcyBub21zIGRlIGNlcyB2YXJpYWJsZXMgZCdlbnZpcm9ubmVtZW50IHNvbnQgYmFz6XMgc3VyIGxlcyBub21zCisgICAgbG9uZ3MgZGVzIG9wdGlvbnMgYXV4cXVlbGxlcyBlbGxlcyBjb3JyZXNwb25kZW50OgorICAgIDxpdGVtaXplPiAgIAorICAgICAgPGl0ZW0+VG91dGVzIGxlcyBsZXR0cmVzIHNvbnQgZW4gbWFqdXNjdWxlLgorICAgICAgPGl0ZW0+TGVzIHNvdWxpZ25lbWVudHMgKDx0dD5fPC90dD4pIHNvbnQgdXRpbGlz6XMgYXUgbGlldSBkdSBzaWduZSBtb2lucworICAgICAgKDx0dD4tPC90dD4pLgorICAgICAgPGl0ZW0+TGUgcHLpZml4ZSA8dHQ+QlJMVFRZXzwvdHQ+IGVzdCBham91dOkuCisgICAgPC9pdGVtaXplPiAgIAorICAgIENldHRlIG9wdGlvbiBlc3QgcGFydGljdWxp6HJlbWVudCB1dGlsZSBzdXIgbGVzIHN5c3TobWVzIGQnZXhwbG9pdGF0aW9uCisgICAgTGludXggZGFucyBsZSBzZW5zIG/5IGVsbGUgcGVybWV0IGRlIHBhc3NlciBkZXMgcGFyYW3odHJlcyBwYXIgZOlmYXV0IOAgQlJMVFRZCisgICAgdmlhIGxlcyBwYXJhbeh0cmVzIGR1IGJvb3QuIExlcyB2YXJpYWJsZXMgZCdlbnZpcm9ubmVtZW50IHN1aXZhbnRlcyBzb250CisgICAgc3VwcG9ydOllczoKKyAgICA8ZGVzY3JpcD4KKyAgICAgIDx0YWc+PHR0PkJSTFRUWV9BUElfUEFSQU1FVEVSUzwvdHQ+PC90YWc+CisgICAgICAgIFBhcmFt6HRyZXMgcG91ciBsJ0FQSSAodm9pciBsJ29wdGlvbgorICAgICAgICBlbiBsaWduZSBkZSBjb21tYW5kZSA8cmVmIGlkPSJvcHRpb25zLWFwaS1wYXJhbWV0ZXJzIiBuYW1lPSItQSI+KS4KKyAgICAgIDx0YWc+PHR0PkJSTFRUWV9BVFRSSUJVVEVTX1RBQkxFPC90dD48L3RhZz4KKyAgICAgICAgTGEgdGFibGUgZCdhdHRyaWJ1dHMgKHZvaXIgbCdvcHRpb24gZW4gbGlnbmUgZGUKKyAgICAgICAgY29tbWFuZGUgPHJlZiBpZD0ib3B0aW9ucy1hdHRyaWJ1dGVzLXRhYmxlIiBuYW1lPSItYSI+KS4KKyAgICAgIDx0YWc+PHR0PkJSTFRUWV9CUkFJTExFX0RFVklDRTwvdHQ+PC90YWc+CisgICAgICAgIExlIHDpcmlwaOlyaXF1ZSBkZSBsJ2FmZmljaGV1ciBicmFpbGxlICh2b2lyIGwnb3B0aW9uIGVuIGxpZ25lIGRlIGNvbW1hbmRlCisgICAgICAgIDxyZWYgaWQ9Im9wdGlvbnMtYnJhaWxsZS1kZXZpY2UiIG5hbWU9Ii1kIj4pLgorICAgICAgPHRhZz48dHQ+QlJMVFRZX0JSQUlMTEVfRFJJVkVSPC90dD48L3RhZz4KKyAgICAgICAgTGUgcGlsb3RlIGRlIGwnYWZmaWNoZXVyIGJyYWlsbGUgKHZvaXIgbCdvcHRpb24gZW4gbGlnbmUgZGUgY29tbWFuZGUKKyAgICAgICAgPHJlZiBpZD0ib3B0aW9ucy1icmFpbGxlLWRyaXZlciIgbmFtZT0iLWIiPikuCisgICAgICA8dGFnPjx0dD5CUkxUVFlfQlJBSUxMRV9QQVJBTUVURVJTPC90dD48L3RhZz4KKyAgICAgICAgUGFyYW3odHJlcyBwb3VyIGxlIHBpbG90ZSBkZSBsJ2FmZmljaGV1ciBicmFpbGxlICh2b2lyIGwnb3B0aW9uIGVuIGxpZ25lCisgICAgICAgIGRlIGNvbW1hbmRlIDxyZWYgaWQ9Im9wdGlvbnMtYnJhaWxsZS1wYXJhbWV0ZXJzIiBuYW1lPSItQiI+KS4KKyAgICAgIDx0YWc+PHR0PkJSTFRUWV9DT05GSUdVUkFUSU9OX0ZJTEU8L3R0PjwvdGFnPgorICAgICAgICBMZSBmaWNoaWVyIGRlIGNvbmZpZ3VyYXRpb24gKHZvaXIgbCdvcHRpb24gCisgICAgICAgIDxyZWYgaWQ9Im9wdGlvbnMtY29uZmlndXJhdGlvbi1maWxlIiBuYW1lPSItZiI+IGRlIGxhIGxpZ25lIGRlIGNvbW1hbmRlKS4KKyAgICAgIDx0YWc+PHR0L0JSTFRUWV9LRVlfVEFCTEUvPC90YWc+CisgICAgICAgIExhIHRhYmxlIGRlIHRvdWNoZXMKKyAgICAgICAgKHZvaXIgbCdvcHRpb24gZW4gbGlnbmUgZGUgY29tbWFuZGUgPHJlZiBpZD0ib3B0aW9ucy1rZXktdGFibGUiIG5hbWU9Ii1rIj4pLgorICAgICAgPHRhZz48dHQvQlJMVFRZX0tFWUJPQVJEX1BST1BFUlRJRVMvPC90YWc+CisgICAgICAgIExlcyBwcm9wcmnpdOlzIGR1IGNsYXZpZXIKKyAgICAgICAgKHZvaXIgbCdvcHRpb24gZW4gbGlnbmUgZGUgY29tbWFuZGUgPHJlZiBpZD0ib3B0aW9ucy1rZXlib2FyZC1wcm9wZXJ0aWVzIiBuYW1lPSItSyI+KS4KKyAgICAgIDx0YWc+PHR0PkJSTFRUWV9DT05UUkFDVElPTl9UQUJMRTwvdHQ+PC90YWc+CisgICAgICAgIExhIHRhYmxlIGRlIGJyYWlsbGUgYWJy6WfpICh2b2lyIGwnb3B0aW9uIDxyZWYgaWQ9Im9wdGlvbnMtY29udHJhY3Rpb24tdGFibGUiIG5hbWU9Ii1jIj4KKyAgICAgICBlbiBsaWduZSBkZSBjb21tYW5kZSkuCisgICAgICA8dGFnPjx0dD5CUkxUVFlfTUlESV9ERVZJQ0U8L3R0PjwvdGFnPgorICAgICAgICBMZSBw6XJpcGjpcmlxdWUgcG91ciBsJ2ludGVyZmFjZSBNSURJICh2b2lyIAorICAgICAgICBsJ29wdGlvbiA8cmVmIGlkPSJvcHRpb25zLW1pZGktZGV2aWNlIiBuYW1lPSItbSI+IGVuIGxpZ25lIGRlIGNvbW1hbmRlKS4KKyAgICAgIDx0YWc+PHR0PkJSTFRUWV9QQ01fREVWSUNFPC90dD48L3RhZz4KKyAgICAgICAgTGUgcOlyaXBo6XJpcXVlIGF1ZGlvICh2b2lyIGwnb3B0aW9uIDxyZWYgaWQ9Im9wdGlvbnMtcGNtLWRldmljZSIgbmFtZT0iLXAiPgorICAgICAgICBlbiBsaWduZSBkZSBjb21tYW5kZSkuCisgICAgICA8dGFnPjx0dC9CUkxUVFlfUFJFRkVSRU5DRVNfRklMRS88L3RhZz4KKyAgICAgICAgTCdlbXBsYWNlbWVudCBkdSBmaWNoaWVyIHF1aSBkb2l0IOp0cmUgdXRpbGlz6SBwb3VyIHNhdXZlZ2FyZGVyIGV0IGNoYXJnZXIKKyAgICAgICAgbGVzIHBy6WbpcmVuY2VzIGRlIGwndXRpbGlzYXRldXIuKHZvaXIgbCdvcHRpb24KKyAgICAgICAgPHJlZiBpZD0ib3B0aW9ucy1wcmVmZXJlbmNlcy1maWxlIiBuYW1lPSItRiI+IGVuIGxpZ25lIGRlIGNvbW1hbmRlKS4KKyAgICAgIDx0YWc+PHR0L0JSTFRUWV9SRUxFQVNFX0RFVklDRS88L3RhZz4KKyAgICAgICAgQ3LpZSBvdSBub24gbGUgcOlyaXBo6XJpcXVlIGF1cXVlbCBsJ2FmZmljaGV1ciBlc3QgY29ubmVjdOkgcXVhbmQgCisgICAgICAgIGwn6WNyYW4gb3UgbGEgZmVu6nRyZSBzdWl2YW50IG5lIHBldXZlbnQgcGFzIOp0cmUgbHVzIAorICAgICAgICAodm9pciBsJ29wdGlvbiA8cmVmIGlkPSJvcHRpb25zLXJlbGVhc2UtZGV2aWNlIiBuYW1lPSItciI+IGRlIGxhIGxpZ25lIGRlIGNvbW1hbmRlKS4KKyAgICAgIDx0YWc+PHR0PkJSTFRUWV9TQ1JFRU5fUEFSQU1FVEVSUzwvdHQ+PC90YWc+CisgICAgICAgIFBhcmFt6HRyZXMgcG91ciBsZSBwaWxvdGUgZCfpY3JhbiAodm9pciBsJ29wdGlvbiA8cmVmIGlkPSJvcHRpb25zLXNjcmVlbi1wYXJhbWV0ZXJzIiBuYW1lPSItWCI+CisgICAgICAgIGVuIGxpZ25lIGRlIGNvbW1hbmRlKS4KKyAgICAgIDx0YWc+PHR0PkJSTFRUWV9TUEVFQ0hfRFJJVkVSPC90dD48L3RhZz4KKyAgICAgICAgTGUgcGlsb3RlIGRlIGxhIHN5bnRo6HNlIHZvY2FsZSAodm9pciBsJ29wdGlvbiA8cmVmIGlkPSJvcHRpb25zLXNwZWVjaC1kcml2ZXIiIG5hbWU9Ii1zIj4KKyAgICAgICAgZW4gbGlnbmUgZGUgY29tbWFuZGUpLgorICAgICAgPHRhZz48dHQ+QlJMVFRZX1NQRUVDSF9JTlBVVDwvdHQ+PC90YWc+CisgICAgICAgIExlIG5vbSBkZSBsJ29iamV0IGR1IHN5c3TobWUgZGUgZmljaGllcnMgcXVlIGQnYXV0cmVzIGFwcGxpY2F0aW9ucworICAgICAgICBwZXV2ZW50IHV0aWxpc2VyIHBvdXIgY29udmVydGlyIGR1IHRleHRlIGVuIHBhcm9sZSBhdmVjIGxlIHBpbG90ZSBkZQorICAgICAgICBzeW50aOhzZSBkZSBCUkxUVFkgKHZvaXIgbCdvcHRpb24gPHJlZiBpZD0ib3B0aW9ucy1zcGVlY2gtaW5wdXQiIG5hbWU9Ii1pIj4KKyAgICAgICAgZW4gbGlnbmUgZGUgY29tbWFuZGUpLgorICAgICAgPHRhZz48dHQ+QlJMVFRZX1NQRUVDSF9QQVJBTUVURVJTPC90dD48L3RhZz4KKyAgICAgICAgUGFyYW3odHJlcyBwb3VyIGxlIHBpbG90ZSBkZSBsYSBzeW50aOhzZSB2b2NhbGUgKHZvaXIgbCdvcHRpb24gCisgICAgICAgIDxyZWYgaWQ9Im9wdGlvbnMtc3BlZWNoLXBhcmFtZXRlcnMiIG5hbWU9Ii1TIj4gZW4gbGlnbmUgZGUgY29tbWFuZGUpLgorICAgICAgPHRhZz48dHQvQlJMVFRZX1RFWFRfVEFCTEUvPC90YWc+CisgICAgICAgIExhIHRhYmxlIGRlIHRleHRlICh2b2lyIGwnb3B0aW9uCisgICAgICAgIDxyZWYgaWQ9Im9wdGlvbnMtdGV4dC10YWJsZSIgbmFtZT0iLWEiPiBlbiBsaWduZSBkZSBjb21tYW5kZSkuCisgICAgPC9kZXNjcmlwPgorICA8dGFnPjx0dC8tRi88ZW0vZmlsZS8gPHR0Ly0tcHJlZmVyZW5jZXMtZmlsZT0vPGVtL2ZpbGUvPGxhYmVsIGlkPSJvcHRpb25zLXByZWZlcmVuY2VzLWZpbGUiPjwvdGFnPgorICAgIFNw6WNpZmllIGwnZW1wbGFjZW1lbnQgZHUgZmljaGllciBxdWkgZG9pdCDqdHJlIHV0aWxpc+kgcG91ciBzYXV2ZWdhcmRlciBldAorICAgIGNoYXJnZXIgbGVzIGxlcyBwculm6XJlbmNlcyBkZSBsJ3V0aWxpc2F0ZXVyLiBTaSB2b3VzIHNw6WNpZmlleiB1biBjaGVtaW4KKyAgICByZWxhdGlmLCBpbCBlc3QgZW5jcukgc3VyIDx0dD4vdmFyL2xpYi9icmx0dHk8Lz4uIFZvaXIgbGEgbGlnbmUKKyAgICA8cmVmIGlkPSJjb25maWd1cmUtcHJlZmVyZW5jZXMtZmlsZSIgbmFtZT0icHJlZmVyZW5jZXMtZmlsZSI+IGR1IGZpY2hpZXIgZGUKKyAgICBjb25maWd1cmF0aW9uIHBvdXIgbGUgculnbGFnZSBwYXIgZOlmYXV0IGF1IG1vbWVudCBkZSBsJ2V46WN1dGlvbi4KKyAgICBxdWkgZG9pdCDqdHJlIHV0aWxpc+kgcGFyIGxlcyBhdXRyZXMgYXBwbGljYXRpb25zIHNvdWhhaXRhbnQgYXZvaXIKKyAgICBhY2PocyBhdSBwaWxvdGUgZGUgc3ludGjoc2UgZGUgQlJMVFRZLiBTaSBjZSBuJ2VzdCBwYXMgc3DpY2lmaeksCisgICAgYXVjdW4gRklGTyBuJ2VzdCBjcunpLiBWb2lyIGxhIGxpZ25lIAorICAgIDxyZWYgaWQ9ImNvbmZpZ3VyZS1zcGVlY2gtaW5wdXQiIG5hbWU9InNwZWVjaC1maWZvIj4gZHUgZmljaGllciBkZQorICAgIGNvbmZpZ3VyYXRpb24gcG91ciBsZXMgcGFyYW3odHJlcyBwYXIgZOlmYXV0IOAgbCdleOljdXRpb24uCisgICAgQ2V0dGUgb3B0aW9uIG4nZXN0IHBhcyBkaXNwb25pYmxlIHNpIHZvdXMgYXZleiBzcOljaWZp6SBsJ29wdGlvbgorICAgIGRlIGNvbXBpbGF0aW9uIAorICAgIDxyZWYgaWQ9ImJ1aWxkLXNwZWVjaC1zdXBwb3J0IiBuYW1lPSItLWRpc2FibGUtc3BlZWNoLXN1cHBvcnQiPi4KKyAgPHRhZz48dHQvLUkvIDx0dC8tLWluc3RhbGwtc2VydmljZS88bGFiZWwgaWQ9Im9wdGlvbnMtaW5zdGFsbC1zZXJ2aWNlIj48L3RhZz4KKyAgICBJbnN0YWxsZSBCUkxUVFkgZXQgbGUgc2VydmljZSBCcmxBUEkuCisgICAgQ2VsYSBzaWduaWZpZSBxdWU6CisgICAgPGl0ZW1pemU+CisgICAgICA8aXRlbT5CUkxUVFkgc2VyYSBsYW5j6SBhdXRvbWF0aXF1ZW1lbnQgcXVhbmQgbGUgc3lzdOhtZSBk6W1hcnJlcmEuCisgICAgICA8aXRlbT5MZXMgYXBwbGljYXRpb25zIHBldXZlbnQgc2F2b2lyIHF1J3VuIHNlcnZldXIgQnJsQVBJIGVzdCBsYW5j6S4KKyAgICA8L2l0ZW1pemU+CisgICAgQ2V0dGUgb3B0aW9uIG4nZXN0IHN1cHBvcnTpZSBxdWUgc3VyIGxhIHBsYXRlZm9ybWUgV2luZG93cy4KKyAgPHRhZz48dHQvLUsvPGVtL25hbWUvPHR0Lz0vPGVtL3ZhbHVlLzx0dC8sLy4uLiA8dHQvLS1rZXlib2FyZC1wcm9wZXJ0aWVzPS88ZW0vbmFtZS88dHQvPS88ZW0vdmFsdWUvPHR0LywvLi4uPGxhYmVsIGlkPSJvcHRpb25zLWtleWJvYXJkLXByb3BlcnRpZXMiPjwvdGFnPgorICAgIFNw6WNpZmllIGxlcyBwcm9wcmnpdOlzIGR1L2RlcyBjbGF2aWVyKHMpIOAgcHJlbmRyZSBlbiBjaGFyZ2UuIFNpIHZvdXMgc3DpY2lmaWV6CisgICAgbGEgbeptZSBwcm9wcmnpdOkgcGx1cyBkJ3VuZSBmb2lzLCBsYSB2YWxldXIgbGEgcGx1cyDgIGRyb2l0ZSBlc3QgdXRpbGlz6WUuCisgICAgVm9pciBsYSBzZWN0aW9uIDxyZWYgaWQ9ImtleWJvYXJkLXByb3BlcnRpZXMiIG5hbWU9IlByb3Byael06XMgZHUgY2xhdmllciI+CisgICAgcG91ciB1bmUgbGlzdGUgZGVzIHByb3Byael06XMgcXVlIHZvdXMgcG91dmV6IHNw6WNpZmllci4KKyAgICBWb2lyIGwnaW5zdHJ1Y3Rpb24gPHJlZiBpZD0iY29uZmlndXJlLWtleWJvYXJkLXByb3BlcnRpZXMiIG5hbWU9ImtleWJvYXJkLXByb3BlcnRpZXMiPgorICAgIGR1IGZpY2hpZXIgZGUgY29uZmlndXJhdGlvbiBwb3VyIGxlcyBwYXJhbeh0cmVzIGQnZXjpY3V0aW9uIHBhciBk6WZhdXQuCisgIDx0YWc+PHR0Pi1NPC90dD48ZW0+Y3NlY3M8L2VtPiA8dHQ+LS1tZXNzYWdlLXRpbWVvdXQ9PC90dD48ZW0+Y3NlY3M8L2VtPjxsYWJlbCBpZD0ib3B0aW9ucy1tZXNzYWdlLXRpbWVvdXQiPjwvdGFnPgorICAgIFNw6WNpZmllIGxlIHRlbXBzIChlbiBjZW50aehtZXMgZGUgc2Vjb25kZSkgcXVlIHByZW5kIEJSTFRUWSBwb3VyCisgICAgYWZmaWNoZXIgc2VzIHByb3ByZXMgbWVzc2FnZXMgaW50ZXJuZXMgc3VyIGwnYWZmaWNoZXVyIGJyYWlsbGUuIFNpCisgICAgY2Ugbidlc3QgcGFzIHNw6WNpZmnpLCBjJ2VzdCA8dHQ+NDAwPC90dD4gKDQgc2Vjb25kZXMpIHF1aSBlc3QgdXRsaXPpLgorICA8dGFnPjx0dD4tTjwvdHQ+IDx0dD4tLW5vLWFwaTwvdHQ+PGxhYmVsIGlkPSJvcHRpb25zLW5vLXNwZWVjaCI+PC90YWc+CisgICAgROlzYWN0aXZlIGwnaW50ZXJmYWNlIGRlIHByb2dyYW1tYXRpb24gZGUgbCdhcHBsaWNhdGlvbi4KKyAgIDx0YWc+PHR0Ly1QLzxlbS9maWxlLyA8dHQvLS1waWQtZmlsZT0vPGVtL2ZpbGUvPGxhYmVsIGlkPSJvcHRpb25zLXBpZC1maWxlIj48L3RhZz4KKyAgICBTcOljaWZpZSBsZSBmaWNoaWVyIOAgbCdpbnTpcmlldXIgZHVxdWVsIEJSTFRUWSBkb2l0IOljcmlyZSBzZXMKKyAgICBpZGVudGlmaWFudHMgZGUgcHJvY2Vzc3VzIChwaWQpLiBTaSBjZWxhIG4nZXN0IHBhcyBzcOljaWZp6SwKKyAgICBCUkxUVFkg6WNyaXQgc2VzIGlkZW50aWZpYW50cyBkZSBwcm9jZXNzdXMgbnVsbGUgcGFydC4KKyAgPHRhZz48dHQvLVIvIDx0dC8tLXJlbW92ZS1zZXJ2aWNlLzxsYWJlbCBpZD0ib3B0aW9ucy1yZW1vdmUtc2VydmljZSI+PC90YWc+CisgICAgU3VwcHJpbWUgbGUgc2VydmljZSBCcmxBUEkuCisgICAgQ2VsYSBzaWduaWZpZSBxdWU6CisgICAgPGl0ZW1pemU+CisgICAgICA8aXRlbT5CUkxUVFkgbmUgc2VyYSBwYXMgbGFuY+kgYXV0b21hdGlxdWVtZW50IHF1YW5kIGxlIHN5c3TobWUgZOltYXJyZXJhLgorICAgICAgPGl0ZW0+TGVzIGFwcGxpY2F0aW9ucyBwZXV2ZW50IHNhdm9pciBxdSdhdWN1biBzZXJ2ZXVyIEJybEFQSSBuJ2VzdCBsYW5j6S4KKyAgICA8L2l0ZW1pemU+CisgICAgQ2V0dGUgb3B0aW9uIG4nZXN0IHN1cHBvcnTpZSBxdWUgc3VyIGxhIHBsYXRlZm9ybWUgV2luZG93cy4KKyAgPHRhZz48dHQ+LVM8L3R0Pls8ZW0+ZHJpdmVyPC9lbT48dHQ+OjwvdHQ+XTxlbT5uYW1lPC9lbT48dHQ+PTwvdHQ+PGVtPnZhbHVlPC9lbT48dHQ+LDwvdHQ+Li4uCisgICA8dHQ+LS1zcGVlY2gtcGFyYW1ldGVycz08L3R0Pls8ZW0+ZHJpdmVyPC9lbT48dHQ+OjwvdHQ+XTxlbT5uYW1lPC9lbT48dHQ+PTwvdHQ+PGVtPnZhbHVlPC9lbT48dHQ+LDwvdHQ+Li4uPGxhYmVsIGlkPSJvcHRpb25zLXNwZWVjaC1wYXJhbWV0ZXJzIj48L3RhZz4KKyAgICBTcOljaWZpZSBsZXMgcGFyYW3odHJlcyBwb3VyIGxlcyBwaWxvdGVzIGRlIHN5bnRo6HNlIHZvY2FsZS4KKyAgICBTaSB2b3VzIHNw6WNpZmlleiBwbHVzIGQndW5lIGZvaXMgbGUgbeptZSBwYXJhbeh0cmUsIGMnZXN0IHNhCisgICAgdmFsZXVyIGxhIHBsdXMg4CBkcm9pdGUgcXVpIGVzdCB1dGlsaXPpZS4gU2kgdW4gbm9tIGRlIHBhcmFt6HRyZQorICAgIGVzdCBxdWFsaWZp6SBwYXIgdW4gcGlsb3RlICh2b2lyIGxhIHNlY3Rpb24KKyAgICA8cmVmIGlkPSJkcml2ZXJzIiBuYW1lPSJDb2RlIGQnaWRlbnRpZmljYXRpb24gZGUgcGlsb3RlIj4pCisgICAgY2UgcGFyYW3odHJlIG5lIHMnYXBwbGlxdWUgcXUn4CBjZSBwaWxvdGU7IHNpbm9uIGlsIHMnYXBwbGlxdWUg4AorICAgIHRvdXMgbGVzIHBpbG90ZXMuIFBvdXIgdW5lIGRlc2NyaXB0aW9uIGRlcyBwYXJhbeh0cmVzIGFjY2VwdOlzIHBhcgorICAgIHVuIHBpbG90ZSBlbiBwYXJ0aWN1bGllciwgdm95ZXogbGEgZG9jdW1lbnRhdGlvbiBkZSBjZSBwaWxvdGUuCisgICAgVm9pciBsYSBsaWduZSA8cmVmIGlkPSJjb25maWd1cmUtc3BlZWNoLXBhcmFtZXRlcnMiIG5hbWU9InNwZWVjaC1wYXJhbWV0ZXJzIj4KKyAgICBkdSBmaWNoaWVyIGRlIGNvbmZpZ3VyYXRpb24gcG91ciBsZXMgcGFyYW3odHJlcyBwYXIgZOlmYXV0IOAgbCdleOljdXRpb24uCisgIDx0YWc+PHR0Pi1WPC90dD4gPHR0Pi0tdmVyc2lvbjwvdHQ+PGxhYmVsIGlkPSJvcHRpb25zLXZlcnNpb24iPjwvdGFnPgorICAgIEFmZmljaGUgbGVzIHZlcnNpb25zIGNvdXJhbnRlcyBkZSBCUkxUVFkgbHVpLW3qbWUsIGRlIGxhIHBhcnRpZQorICAgIHNlcnZldXIgZGUgc29uIEFQSSwgZXQgZGVzCisgICAgcGlsb3RlcyBxdWkgb250IOl06SBsaelzIOAgc29uIGJpbmFpcmUsIHB1aXMgcXVpdHRlLiBTaSB2b3VzCisgICAgbmUgc3DpY2lmaWV6IHBhcyBsJ29wdGlvbiA8cmVmIGlkPSJvcHRpb25zLXF1aWV0IiBuYW1lPSItcSI+LAorICAgIGFmZmljaGUgYXVzc2kgbGVzIGluZm9ybWF0aW9ucyBs6WdhbGVzLgorICA8dGFnPjx0dD4tWDwvdHQ+PGVtPm5vbTwvZW0+PHR0Pj08L3R0PjxlbT52YWxldXI8L2VtPjx0dD4sPC90dD4uLi48dHQ+LS1zY3JlZW4tcGFyYW1ldGVycz08L3R0PjxlbT5waWxvdGU8L2VtPjx0dD49PC90dD48ZW0+bm9tPC9lbT48dHQ+dmFsZXVyPC90dD4uLi48bGFiZWwgaWQ9Im9wdGlvbnMtc2NyZWVuLXBhcmFtZXRlcnMiPjwvdGFnPgorICAgIFNw6WNpZmllIGxlcyBwYXJhbeh0cmVzIHBvdXIgbGVzIHBpbG90ZXMgZCfpY3Jhbi4gCisgICAgU2kgdm91cyBzcOljaWZpZXogcGx1cyBkJ3VuZSBmb2lzIGxlIG3qbWUgcGFyYW3odHJlLCBjJ2VzdCBzYQorICAgIHZhbGV1ciBsYSBwbHVzIOAgZHJvaXRlIHF1aSBlc3QgdXRpbGlz6WUuIFNpIHVuIHBhcmFt6HRyZSBlc3QgculzZXJ26QorICAgIOAgdW4gcGlsb3RlICh2b2lyIGxhIHNlY3Rpb24gUGlsb3RlcyBkJ+ljcmFuIHN1cHBvcnTpcyksIGNlIHBhcmFt6HRyZQorICAgIG5lIHMnYXBwbGlxdWUgcXUn4CBjZSBwaWxvdGU7IHNpbm9uIGlsIHMnYXBwbGlxdWUg4CB0b3VzIGxlcyBwaWxvdGVzLiAKKyAgICBQb3VyIHVuZSBkZXNjcmlwdGlvbiBkZXMgcGFyYW3odHJlcyBhY2NlcHTpcyBwYXIgdW4gcGlsb3RlIGVuIHBhcnRpY3VsaWVyLCAKKyAgICByZXBvcnRlei12b3VzIOAgc2EgZG9jdW1lbnRhdGlvbi4gVm9pciBsYSBsaWduZSA8cmVmIGlkPSJjb25maWd1cmUtc2NyZWVuLXBhcmFtZXRlcnMiIG5hbWU9InNjcmVlbi1wYXJhbWV0ZXJzIj4KKyAgICBkdSBmaWNoaWVyIGRlIGNvbmZpZ3VyYXRpb24gcG91ciBsYSBz6WxlY3Rpb24gZGVzIHBhcmFt6HRyZXMgcGFyCisgICAgZOlmYXV0IOAgbCdleOljdXRpb24uCis8L2Rlc2NyaXA+CmRpZmYgLS1naXQgYS9Eb2N1bWVudHMvTWFudWFsLUJSTFRUWS9GcmVuY2gvYnJhaWxsZS1kcml2ZXJzLnNnbWwgYi9Eb2N1bWVudHMvTWFudWFsLUJSTFRUWS9GcmVuY2gvYnJhaWxsZS1kcml2ZXJzLnNnbWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWRhYWZiMgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50cy9NYW51YWwtQlJMVFRZL0ZyZW5jaC9icmFpbGxlLWRyaXZlcnMuc2dtbApAQCAtMCwwICsxLDE1NSBAQAorQWxiYXRyb3NzCisgIHw0Ni84MEAKK0FsdmEKKyAgfEFCVCAoM25uKUAKKyAgfERlbHBoaSAoNG5uKUAKKyAgfFNhdGVsbGl0ZSAoNW5uKUAKKyAgfEJyYWlsbGUgU3lzdGVtIDQwQAorICB8QnJhaWxsZSBDb250cm9sbGVyIDY0MC82ODBACisgIHxFYXN5IExpbmsgMTJACitCYXVtCisgIHxCcmFpbGxlQ29ubmVjdCAxMi8yNC8zMi80MC82NC84MEAKKyAgfEJyYWlsbGlhbnQgMjQvMzIvNDAvNjQvODBACisgIHxDb25ueSAxMkAKKyAgfERNODAgUGx1c0AKKyAgfEVjb1ZhcmlvIDI0LzMyLzQwLzY0LzgwQAorICB8SW5rYUAKKyAgfE5MUyBlUmVhZGVyIFpvb21heEAKKyAgfE9yYml0IFJlYWRlciAyMC80MEAKKyAgfFBvY2tldFZhcmlvIDI0QAorICB8UHJvbnRvISBWMyAxOC80MEAKKyAgfFByb250byEgVjQgMTgvNDBACisgIHxSQlQgNDAvODBACisgIHxSZWZyZXNoYWJyYWlsbGUgMThACisgIHxTdXBlclZhcmlvIDMyLzQwLzY0LzgwQAorICB8VmFyaW8gNDAvODBACisgIHxWYXJpb0Nvbm5lY3QgMTIvMjQvMzIvNDAvNjQvODBACisgIHxWYXJpb1BybyA0MC82NC84MEAKKyAgfFZhcmlvVWx0cmEgMjAvMzIvNDBACitCcmFpbENvbW0KKyAgfElJSUAKK0JyYWlsbGVMaXRlCisgIHwxOC80MC9NMjAvTTQwQAorQnJhaWxsZU1lbW8KKyAgfFBvY2tldCAoMTYpQAorICB8U21hcnQgKDE2KUAKKyAgfDMyQAorICB8NDBACitCcmFpbGxlTm90ZQorICB8MTgvMzJACisgIHxBcGV4QAorQnJhdWRpQAorQnJsQVBJQAorQ2FudXRlCisgIHwzNjAgKDQweDkpQAorQ2VicmEKKyAgfDIwLzQwLzYwLzgwLzEwMC8xMjAvMTQwQAorQ29tYmlCcmFpbGxlCisgIHwyNS80NS84NUAKK0RvdFBhZEAKK0Vjb0JyYWlsbGUKKyAgfDIwLzQwLzgwQAorRXVyb0JyYWlsbGUKKyAgfEF6ZXJCcmFpbGxlQAorICB8Q2xpb0AKKyAgfEVzeXNACisgIHxJcmlzQAorICB8Tm90ZUJyYWlsbGVACisgIHxTY3JpYmFACitGcmFua0F1ZGlvZGF0YQorICB8QjJLODRACitGcmVlZG9tU2NpZW50aWZpYworICB8Rm9jdXMgMSA0NC83MC84NEAKKyAgfEZvY3VzIDIgNDAvODBACisgIHxGb2N1cyBCbHVlIDE0LzQwLzgwQAorICB8UEFDIE1hdGUgMjAvNDBACitIYW5keVRlY2gKKyAgfE1vZHVsYXIgMjAvNDAvODBACisgIHxNb2R1bGFyIEV2b2x1dGlvbiA2NC84OEAKKyAgfE1vZHVsYXIgQ29ubmVjdCA4OEAKKyAgfEFjdGl2ZSBCcmFpbGxlQAorICB8QWN0aXZlIEJyYWlsbGUgU0AKKyAgfEFjdGl2ZSBTdGFyIDQwQAorICB8QWN0aWxpbm9ACisgIHxBY3RpdmF0b3JACisgIHxCYXNpYyBCcmFpbGxlIDE2LzIwLzMyLzQwLzQ4LzY0LzgwQAorICB8QnJhaWxsaW5vQAorICB8QnJhaWxsZSBXYXZlQAorICB8RWFzeSBCcmFpbGxlQAorICB8QnJhaWxsZSBTdGFyIDQwLzgwQAorICB8Q29ubmVjdCBCcmFpbGxlIDQwQAorICB8Qm9va3dvcm1ACitIZWRvCisgIHxQcm9maUxpbmVACisgIHxNb2JpbExpbmVACitISU1TCisgIHxCcmFpbGxlIFNlbnNlQAorICB8U3luY0JyYWlsbGVACisgIHxCcmFpbGxlIEVkZ2VACisgIHxTbWFydCBCZWV0bGVACisgIHxRQnJhaWxsZVhMQAorSHVtYW5XYXJlCisgIHxCcmFpbGxpYW50IEJJIDE0LzMyLzQwQAorICB8QnJhaWxsaWFudCBCSSAyMFgvNDBYQAorICB8QnJhaWxsaWFudCBCIDgwQAorICB8QnJhaWxsZU5vdGUgVG91Y2hACisgIHxCcmFpbGxlT25lQAorICB8QVBIIENoYW1lbGVvbiAyMEAKKyAgfEFQSCBNYW50aXMgUTQwQAorICB8TkxTIGVSZWFkZXJACitJbmNlcHRvcgorICB8QnJhaWxsZU1lICgyMClACitJcmlzQAorTGliYnJhaWxsZUAKK0xvZ1RleHQKKyAgfDMyQAorTURWCisgIHxNQjIwOEAKKyAgfE1CMjQ4QAorICB8TUI0MDhMQAorICB8TUI0MDhMK0AKKyAgfExpbGxpIEJsdUAKK01ldGVjCisgIHxCRC00MEAKK01pbmlCcmFpbGxlCisgIHwyMEAKK011bHRpQnJhaWxsZQorICB8TUIxMjVDUkAKKyAgfE1CMTQ1Q1JACisgIHxNQjE4NUNSQAorTmluZVBvaW50CisgIHw4QAorUGFwZW5tZWllcgorICB8Q29tcGFjdCA0ODZACisgIHxDb21wYWN0L1RpbnlACisgIHxJQiA4MCBDUiBTb2Z0QAorICB8MkQgTGl0ZSAocGx1cylACisgIHwyRCBTY3JlZW4gU29mdEAKKyAgfEVMIDgwQAorICB8RUwgMkQgNDAvNjYvODBACisgIHxFTCA0MC82Ni83MC84MCBTQAorICB8RUwgNDAvNjAvODAgQ0AKKyAgfEVMIDJEIDgwIFNACisgIHxFTCA0MCBQQAorICB8RUwgODAgSUlACisgIHxFbGJhIDIwLzMyQAorICB8VHJpbyA0MC9FbGJhMjAvRWxiYTMyQAorICB8TGl2ZSAyMC80MEAKK1BlZ2FzdXMKKyAgfDIwLzI3LzQwLzgwQAorU2Vpa2EKKyAgfDMvNC81ICg0MClACisgIHw4MEAKKyAgfE1pbmkgKDE2KUAKK1RlY2huaUJyYWlsbGVACitUU0kKKyAgfE5hdmlnYXRvciAyMC80MC84MEAKKyAgfFBvd2VyQnJhaWxsZSA0MC82NS84MEAKK1ZpZGVvQnJhaWxsZQorICB8NDBACitWaXNpb0JyYWlsbGUKKyAgfDIwLzQwQAorVm95YWdlcgorICB8NDQvNzBACisgIHxQYXJ0MjMyIChzZXJpYWwgYWRhcHRlcilACisgIHxCcmFpbGxlUGVuL0Vhc3lMaW5rQApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRzL01hbnVhbC1CUkxUVFkvRnJlbmNoL2NvbnRyYWN0aW9uLXRhYmxlcy5zZ21sIGIvRG9jdW1lbnRzL01hbnVhbC1CUkxUVFkvRnJlbmNoL2NvbnRyYWN0aW9uLXRhYmxlcy5zZ21sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE1MTUxZTQKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudHMvTWFudWFsLUJSTFRUWS9GcmVuY2gvY29udHJhY3Rpb24tdGFibGVzLnNnbWwKQEAgLTAsMCArMSwzOCBAQAorYXV0b3xz6WxlY3Rpb24gYXV0b21hdGlxdWUgYmFz6WUgc3VyIGxhIGxvY2FsZUAKK2FmfEFmcmlrYWFucyAoYWJy6WfpKUAKK2FtfEFtaGFyaWMgKGTpc2Ficuln6SlACitkZXxBbGxlbWFuZEAKK2RlLWcwfEFsbGVtYW5kIChk6XNhYnLpZ+kpQAorZGUtZzF8QWxsZW1hbmQgKGFicul2aWF0aW9ucyBkZSBiYXNlKUAKK2RlLWcyfEFsbGVtYW5kIChhYnLpZ+kpQAorZGUtMTk5OHxBbGxlbWFuZCAoYWJy6WfpIC0gc3RhbmRhcmQgMTk5OClACitkZS0yMDE1fEFsbGVtYW5kIChhYnLpZ+kgLSBzdGFuZGFyZCAyMDE1KUAKK2VufEFuZ2xhaXNACitlbiZsb3diYXI7VVN8QW5nbGFpcyAoVVNBKUAKK2VuLXVlYi1nMXxBbmdsYWlzIChCcmFpbGxlIGFuZ2xhaXMgdW5pZmnpLCAxZXIgZGVncukpQAorZW4tdWViLWcyfEFuZ2xhaXMgKEJyYWlsbGUgYW5nbGFpcyB1bmlmaeksIDLobWUgZGVncukpQAorZW4tdXMtZzJ8QW5nbGFpcyAoVVNBLCAy6G1lIGRlZ3LpKUAKK2VzfEVzcGFnbm9sICgy6G1lIGRlZ3LpKUAKK2ZyfEZyYW7nYWlzQAorZnItZzF8RnJhbudhaXMgKGTpc2Ficuln6SlACitmci1nMnxGcmFu52FpcyAoYWJy6WfpKUAKK2hhfEhhdXNhIChhYnLpZ+kpQAoraWR8SW5kb27pc2llbiAoYWJy6WfpKUAKK2lwYXxBbHBoYWJldCBwaG9u6XRpcXVlIGludGVybmF0aW9uYWxACitqYXxKYXBvbmVhaXMgKGTpc2Ficuln6SlACitrb3xDb3LpZW5ACitrby1nMHxDb3LpZW4gKGTpc2Ficuln6SlACitrby1nMXxDb3LpZW4gKDFlciBkZWdy6SlACitrby1nMnxDb3LpZW4gKDLobWUgZGVncukpQAorbHR8TGl0dWFuaWVuQAorbWd8TWFsYWdhc2t5IChhYnLpZ+kpQAorbXVufE11bmRhIChhYnLpZ+kpQAorbmx8QXV0cmljaGllbiAoYWJy6WfpKUAKK255fENoaWNoZXdhIChhYnLpZ+kpQAorcHR8UG9ydHVndWFpcyAoMuhtZSBkZWdy6SlACitydXxSdXNzZSAoMWVyIGRlZ3LpKUAKK3NpfENpbmdhbGFpcyAoZOlzYWJy6WfpKUAKK3N3fFN3YWhpbGkgKGFiculn6SlACit0aHxUaGHvbGFuZGFpcyAoYWJy6WfpKUAKK3poJmxvd2JhcjtUV3xDaGlub2lzIChUYWl3YW4sIGTpc2Ficuln6SlACit6dXxab3Vsb3UgKGFiculn6SlACmRpZmYgLS1naXQgYS9Eb2N1bWVudHMvTWFudWFsLUJSTFRUWS9GcmVuY2gvZHJpdmVyLWNvZGVzLnNnbWwgYi9Eb2N1bWVudHMvTWFudWFsLUJSTFRUWS9GcmVuY2gvZHJpdmVyLWNvZGVzLnNnbWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGU4NGFjNQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50cy9NYW51YWwtQlJMVFRZL0ZyZW5jaC9kcml2ZXItY29kZXMuc2dtbApAQCAtMCwwICsxLDU1IEBACithbHxBbHZhQAorYW58QW5kcm9pZEAKK2F0fEFsYmF0cm9zc0AKK2JhfEJybEFQSUAKK2JjfEJyYWlsQ29tbUAKK2JkfEJyYXVkaUAKK2JnfEIyR0AKK2JsfEJyYWlsbGVMaXRlQAorYm18QmF1bSAoTmF0aXZlLCBIVCwgUEIxLCBQQjIpQAorYm58QnJhaWxsZU5vdGVACitjYnxDb21iaUJyYWlsbGVACitjZXxDZWJyYUAKK2NufENhbnV0ZUAKK2RwfERvdFBhZEAKK2VjfEVjb0JyYWlsbGVACitlbnxlU3BlYWstTkdACitlc3xlU3BlYWtACitldXxFdXJvQnJhaWxsZUAKK2ZhfEZyYW5rQXVkaW9kYXRhQAorZmx8RmVzdGl2YWxMaXRlQAorZnN8RnJlZWRvbVNjaWVudGlmaWNACitmdnxGZXN0aXZhbEAKK2dzfEdlbmVyaWNTYXlACitoZHxIZWRvQAoraG18SElNU0AKK2h0fEhhbmR5VGVjaEAKK2h3fEh1bWFuV2FyZUAKK2ljfEluY2VwdG9yQAoraXJ8SXJpc0AKK2xifExpYmJyYWlsbGVACitsdHxMb2dUZXh0QAorbWJ8TXVsdGlCcmFpbGxlQAorbWR8TURWQAorbW18QnJhaWxsZU1lbW9ACittbnxNaW5pQnJhaWxsZUAKK21wfE1pa3JvcHVoZUAKK210fE1ldGVjQAorbm98bm8gZHJpdmVyQAorbnB8TmluZVBvaW50QAorcGd8UGVnYXN1c0AKK3BtfFBhcGVubWVpZXJACitzZHxTcGVlY2hEaXNwYXRjaGVyQAorc2t8U2Vpa2FACitzd3xTd2lmdEAKK3RofFRoZXRhQAordG58VGVjaG5pQnJhaWxsZUAKK3RzfFRlbGVzZW5zb3J5IFN5c3RlbXMgSW5jLkAKK3R0fFRUWUAKK3ZkfFZpZGVvQnJhaWxsZUAKK3ZvfFZveWFnZXJACit2cnxWaXJ0dWFsQAordnN8VmlzaW9CcmFpbGxlQAordnZ8VmlhVm9pY2VACit4c3xFeHRlcm5hbFNwZWVjaEAKK3h3fFhXaW5kb3dACmRpZmYgLS1naXQgYS9Eb2N1bWVudHMvTWFudWFsLUJSTFRUWS9GcmVuY2gvZnItMjAwNy5zZ21sIGIvRG9jdW1lbnRzL01hbnVhbC1CUkxUVFkvRnJlbmNoL2ZyLTIwMDcuc2dtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kM2Q3MmZiCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRzL01hbnVhbC1CUkxUVFkvRnJlbmNoL2ZyLTIwMDcuc2dtbApAQCAtMCwwICsxLDI1NyBAQAorPHNlY3Q+VGFibGUgZnJhbudhaXNlIHVuaWZp6WU8bGFiZWwgaWQ9Im5hYmNjIj48cD4KKzx0c2NyZWVuPjx2ZXJiPgorICBOdW0gSGV4ICBQb2ludHMgICAgIERlc2NyaXB0aW9uCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgIDAgIDAwICAgWyAzMjE0NSA4XSBjb2RlIG51bCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgMSAgMDEgICBbNzMyMTQgNjhdIGTpYnV0IGRlIGxlY3R1cmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAyICAwMiAgIFsgIDIxIDUgOF0gZOlidXQgZGUgdGV4dGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgIDMgIDAzICAgWyAzMjE0IDY4XSBmaW4gZGUgdGV4dGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgNCAgMDQgICBbNyAgMTQ1IDhdIGZpbiBkZSB0cmFuc21pc3Npb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICA1ICAwNSAgIFsgICAxIDUgOF0gRU5RVUlSWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgIDYgIDA2ICAgWzcgMjE0ICA4XSBDb25uYWlzc2FuY2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgNyAgMDcgICBbICAyMTQ1IDhdIHNvbiAoYmVsbCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICA4ICAwOCAgIFs3IDIxIDUgOF0gZWZmYWNlbWVudCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgIDkgIDA5ICAgWzcgMjE0IDY4XSB0YWJ1bGF0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgMTAgMEEgICBbICAyIDQ1NjhdIExJTkUgRkVFRCAoTEYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAxMSAwQiAgIFsgMyAxICAgOF0gdGFidWxhdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgIDEyIDBDICAgWzczMjEgICA4XSBwaWVkIEZPUk0gRkVFRCAoRkYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgMTMgMEQgICBbNzMgMTQgIDhdIHJldG91ciBjaGFyaW90ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAxNCAwRSAgIFsgMyAxNDUgOF0gU0hJRlQgT1VUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgIDE1IDBGICAgWyAzMiAgIDY4XSBTSElGVCBJTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgMTYgMTAgICBbNzMyMTQgIDhdIOljaGFwcGVyIGxpZW4gbm9pciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAxNyAxMSAgIFs3MzIxNDUgOF0gY29udHL0bGUgZGUgcOlyaXBo6XJpcXVlIDEgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgIDE4IDEyICAgWzczMjEgNSA4XSBjb250cvRsZSBkZSBw6XJpcGjpcmlxdWUgMiAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgMTkgMTMgICBbNzMyIDQgIDhdIGNvbnRy9GxlIGRlIHDpcmlwaOlyaXF1ZSAzICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAyMCAxNCAgIFs3MzIgNDUgOF0gY29udHL0bGUgZGUgcOlyaXBo6XJpcXVlIDQgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgIDIxIDE1ICAgWzczIDEgNiA4XSBDb25uYWlzc2FuY2UgbulnYXRpdmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgMjIgMTYgICBbNzMyMSAgNjhdIFtTWU5DSFJPTk9VUyBJRExFXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAyMyAxNyAgIFs3IDIgNDU2OF0gZmluIGR1IGJsb2MgZGUgdHJhbnNtaXNzaW9uICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgIDI0IDE4ICAgWzczIDE0IDY4XSBhbm51bGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgIDI1IDE5ICAgWyAzMjEgIDY4XSBmaW4gZHUgbWlsaWV1ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgMjYgMUEgICBbNyAgMSA1NjhdIHJlbXBsYWNlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAyNyAxQiAgIFs3IDIxIDU2OF0g6WNoYXBwZW1lbnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgIDI4IDFDICAgWzcgIDE0IDY4XSBz6XBhcmF0ZXVyIDQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIAorfCAgMjkgMUQgICBbNyAyMSAgNjhdIHPpcGFyYXRldXIgMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAzMCAxRSAgIFs3MzIgIDUgIF0gc+lwYXJhdGV1ciAyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgIDMxIDFGICAgWzczMiAgIDYgXSBmbOhjaGUgZHJvaXRlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgMzIgMjAgICBbICAgICAgICBdIGVzcGFjZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAzMyAyMSAgIFsgMzIgIDUgIF0gcG9pbnQgZCdleGNsYW1hdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgIDM0IDIyICAgWyAzMiAgNTYgXSBndWlsbGVtZXQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgMzUgMjMgICBbIDMgIDQ1NjhdIGRp6HNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAzNiAyNCAgIFs3MyAgIDUgIF0gZG9sbGFyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgIDM3IDI1ICAgWyAzICA0IDY4XSBwb3VyIGNlbnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgMzggMjYgICBbIDMyMTQ1NjhdIGUgY29tbWVyY2lhbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAzOSAyNyAgIFsgMyAgICAgIF0gYXBvc3Ryb3BoZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgIDQwIDI4ICAgWyAzMiAgIDYgXSBwYXJlbnRo6HNlIG91dnJhbnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgNDEgMjkgICBbIDMgICA1NiBdIHBhcmVudGjoc2UgZmVybWFudCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICA0MiAyQSAgIFsgMyAgIDUgIF0gYXN06XJpc3F1ZSAo6XRvaWxlKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgIDQzIDJCICAgWzczMiAgNSA4XSBwbHVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgNDQgMkMgICBbICAyICAgICBdIHZpcmd1bGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgNDUgMkQgICBbIDMgICAgNiBdIHRpcmV0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICA0NiAyRSAgIFsgIDIgIDU2IF0gcG9pbnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgIDQ3IDJGICAgWyAzICA0ICAgXSBiYXJyZSBvYmxpcXVlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgNDggMzAgICBbIDMgIDQ1NiBdIHrpcm8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICA0OSAzMSAgIFsgICAxICA2IF0gdW4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgIDUwIDMyICAgWyAgMjEgIDYgXSBkZXV4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgNTEgMzMgICBbICAgMTQgNiBdIHRyb2lzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICA1MiAzNCAgIFsgICAxNDU2IF0gcXVhdHJlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgIDUzIDM1ICAgWyAgIDEgNTYgXSBjaW5xICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgNTQgMzYgICBbICAyMTQgNiBdIHNpeCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICA1NSAzNyAgIFsgIDIxNDU2IF0gc2VwdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgIDU2IDM4ICAgWyAgMjEgNTYgXSBodWl0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgNTcgMzkgICBbICAyIDQgNiBdIG5ldWYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICA1OCAzQSAgIFsgIDIgIDUgIF0gZGV1eC1wb2ludHMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgIDU5IDNCICAgWyAzMiAgICAgXSBpbmbpcmlldXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgNjAgM0MgICBbIDMyICAgIDhdIGluZulyaWV1ciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICA2MSAzRCAgIFs3MzIgIDU2OF0g6WdhbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgIDYyIDNFICAgWzcgICAgNTYgXSBzdXDpcmlldXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgNjMgM0YgICBbICAyICAgNiBdIHBvaW50IGQnaW50ZXJyb2dhdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICA2NCA0MCAgIFsgMyAgNDUgIF0gYXJyb2JhcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgIDY1IDQxICAgWzcgIDEgICAgXSBhIG1hanVzY3VsZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgNjYgNDIgICBbNyAyMSAgICBdIGIgbWFqdXNjdWxlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICA2NyA0MyAgIFs3ICAxNCAgIF0gYyBtYWp1c2N1bGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgIDY4IDQ0ICAgWzcgIDE0NSAgXSBkIG1hanVzY3VsZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgNjkgNDUgICBbNyAgMSA1ICBdIGUgbWFqdXNjdWxlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICA3MCA0NiAgIFs3IDIxNCAgIF0gZiBtYWp1c2N1bGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgIDcxIDQ3ICAgWzcgMjE0NSAgXSBnIG1hanVzY3VsZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgNzIgNDggICBbNyAyMSA1ICBdIGggbWFqdXNjdWxlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICA3MyA0OSAgIFs3IDIgNCAgIF0gaSBtYWp1c2N1bGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgIDc0IDRBICAgWzcgMiA0NSAgXSBqIG1hanVzY3VsZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgNzUgNEIgICBbNzMgMSAgICBdIGsgbWFqdXNjdWxlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICA3NiA0QyAgIFs3MzIxICAgIF0gbCBtYWp1c2N1bGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgIDc3IDREICAgWzczIDE0ICAgXSBtIG1hanVzY3VsZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgNzggNEUgICBbNzMgMTQ1ICBdIG4gbWFqdXNjdWxlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICA3OSA0RiAgIFs3MyAxIDUgIF0gbyBtYWp1c2N1bGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgIDgwIDUwICAgWzczMjE0ICAgXSBwIG1hanVzY3VsZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgODEgNTEgICBbNzMyMTQ1ICBdIHEgbWFqdXNjdWxlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICA4MiA1MiAgIFs3MzIxIDUgIF0gciBtYWp1c2N1bGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgIDgzIDUzICAgWzczMiA0ICAgXSBzIG1hanVzY3VsZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgODQgNTQgICBbNzMyIDQ1ICBdIHQgbWFqdXNjdWxlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICA4NSA1NSAgIFs3MyAxICA2IF0gdSBtYWp1c2N1bGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgIDg2IDU2ICAgWzczMjEgIDYgXSB2IG1hanVzY3VsZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgODcgNTcgICBbNyAyIDQ1NiBdIHcgbWFqdXNjdWxlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICA4OCA1OCAgIFs3MyAxNCA2IF0geCBtYWp1c2N1bGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgIDg5IDU5ICAgWzczIDE0NTYgXSB5IG1hanVzY3VsZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgOTAgNUEgICBbNzMgMSA1NiBdIHogbWFqdXNjdWxlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICA5MSA1QiAgIFs3MzIgICA2OF0gY3JvY2hldCBvdXZyYW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgIDkyIDVDICAgWyAzICA0ICA4XSBiYXJyZSBvYmxpcXVlIGludmVyc+llICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgOTMgNUQgICBbNzMgICA1NjhdIGNyb2NoZXQgZmVybWFudCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICA5NCA1RSAgIFsgICAgNCAgIF0gYWNjZW50IGNpcmNvbmZsZXhlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgIDk1IDVGICAgWzcgICAgNSA4XSBzb3VsaWdu6SAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgOTYgNjAgICBbICAgICAgNiBdIGFjY2VudCBncmF2ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICA5NyA2MSAgIFsgICAxICAgIF0gYSBtaW51c2N1bGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgIDk4IDYyICAgWyAgMjEgICAgXSBiIG1pbnVzY3VsZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgOTkgNjMgICBbICAgMTQgICBdIGMgbWludXNjdWxlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8IDEwMCA2NCAgIFsgICAxNDUgIF0gZCBtaW51c2N1bGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgMTAxIDY1ICAgWyAgIDEgNSAgXSBlIG1pbnVzY3VsZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAxMDIgNjYgICBbICAyMTQgICBdIGYgbWludXNjdWxlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8IDEwMyA2NyAgIFsgIDIxNDUgIF0gZyBtaW51c2N1bGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgMTA0IDY4ICAgWyAgMjEgNSAgXSBoIG1pbnVzY3VsZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAxMDUgNjkgICBbICAyIDQgICBdIGkgbWludXNjdWxlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8IDEwNiA2QSAgIFsgIDIgNDUgIF0gaiBtaW51c2N1bGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgMTA3IDZCICAgWyAzIDEgICAgXSBrIG1pbnVzY3VsZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAxMDggNkMgICBbIDMyMSAgICBdIGwgbWludXNjdWxlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8IDEwOSA2RCAgIFsgMyAxNCAgIF0gbSBtaW51c2N1bGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgMTEwIDZFICAgWyAzIDE0NSAgXSBuIG1pbnVzY3VsZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAxMTEgNkYgICBbIDMgMSA1ICBdIG8gbWludXNjdWxlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8IDExMiA3MCAgIFsgMzIxNCAgIF0gcCBtaW51c2N1bGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgMTEzIDcxICAgWyAzMjE0NSAgXSBxIG1pbnVzY3VsZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAxMTQgNzIgICBbIDMyMSA1ICBdIHIgbWludXNjdWxlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8IDExNSA3MyAgIFsgMzIgNCAgIF0gcyBtaW51c2N1bGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgMTE2IDc0ICAgWyAzMiA0NSAgXSB0IG1pbnVzY3VsZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAxMTcgNzUgICBbIDMgMSAgNiBdIHUgbWludXNjdWxlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8IDExOCA3NiAgIFsgMzIxICA2IF0gdiBtaW51c2N1bGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIAorfCAxMTkgNzcgICBbICAyIDQ1NiBdIHcgbWludXNjdWxlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8IDEyMCA3OCAgIFsgMyAxNCA2IF0geCBtaW51c2N1bGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgMTIxIDc5ICAgWyAzIDE0NTYgXSB5IG1pbnVzY3VsZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAxMjIgN0EgICBbIDMgMSA1NiBdIHogbWludXNjdWxlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8IDEyMyA3QiAgIFs3MzIgICAgOF0gb3V2cmUgYWNjb2xhZGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgMTI0IDdDICAgWyAgICA0NTY4XSBiYXJyZSB2ZXJ0aWNhbGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAxMjUgN0QgICBbNyAgICA1NjhdIGZlcm1lIGFjY29sYWRlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8IDEyNiA3RSAgIFsgMyAgICAgOF0gdGlsZGUgbWludXNjdWxlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgMTI3IDdGICAgWyAzMjEgICA4XSBlZmZhY2VtZW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAxMjggMjBBQyBbNyAgMSA1IDhdIGV1cm8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8IDEyOSAyMDFBIFs3ICAgICA2IF0gZ3VpbGxlbWV0IGJhcyBzaW1wbGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgMTMwIDAxOTIgWyAgMjE0ICA4XSBmbG9yaW4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAxMzEgMjAxRSBbICAgICA1NiBdIGd1aWxsZW1ldCBiYXMgZG91YmxlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8IDEzMiAyMDI2IFsgMyAgICA2OF0gcG9pbnRzIGRlIHN1c3BlbnNpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgMTMzIDIwMjAgWyAzICAgNTY4XSBvYmVsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAxMzQgMjAyMSBbNzMgICA1NiBdIGRvdWJsZSBvYmVsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IAorfCAxMzUgMkM2ICBbICAgIDQgIDhdIGNpcmNvbmZsZXhlIG1pbnVzY3VsZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8IDEzNiAyMDMwIFs3MyAgNCA2OF0gcG91ciBtaWxsZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgMTM3IDAxNjAgWzczMiA0IDY4XSBzIGNhcnJvbiBtYWp1c2N1bGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAxMzggMjAzOSBbNyAgICA1ICBdIGd1aWxsZW1ldCBmZXJtYW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8IDEzOSAwMTUyIFs3IDIgNCA2IF0gZSBkYW5zIG8gbWFqdXNjdWxlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgMTQwIDAxN0QgWzczIDEgNTY4XSB6IGNhcnJvbiBtYWp1c2N1bGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAxNDEgMjAxOCBbICAgICAgNjhdIGd1aWxsZW1ldCBzaW1wbGUgb3V2cmFudCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8IDE0MiAyMDE5IFs3MyAgICAgIF0gZ3VpbGxlbWV0IHNpbXBsZSBmZXJtYW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgMTQzIDIwMUMgWzczICAgICA4XSBndWlsbGVtZXQgZG91YmxlIG91dnJhbnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAxNDQgMjAxRCBbNyAgICAgNjhdIGd1aWxsZW1ldHQgZG91YmxlIGZlcm1hbnQgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8IDE0NSAyMDIyIFs3IDIxNDUgOF0gcHVjZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgMTQ2IDIwMTMgWzcgICA0ICA4XSB0aXJldCBjYWRyZSBhdHRlaW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAxNDcgMjAxNCBbNyAgIDQ1IDhdIHRpcmV0IEVNICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8IDE0OCAwMkRDIFs3ICAgNCA2IF0gdGlsZGUgbWludXNjdWxlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgMTQ5IDIxMjIgWyAzMiA0NSA4XSBtYXJxdWUgZOlwb3PpZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAxNTAgMDE2MSBbIDMyIDQgNjhdIHMgYXZlYyBjYXJyb24gbWludXNjdWxlICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8IDE1MSAyMDNBIFsgICAgIDUgOF0gZ3VpbGxlbWV0IG91dnJhbnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgMTUyIDAxNTMgWyAgMiA0IDY4XSBlIGRhbnMgbyBtaW51c2N1bGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAxNTMgMDE3RSBbNzMgMSA1NjhdIHogY2Fycm9uIG1pbnVzY3VsZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8IDE1NCAwMTc4IFs3ICAxNDU2OF0geSB0cultYSBtYWp1c2N1bGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgMTYwIEEwICAgWzcgICAgICAgXSBlc3BhY2UgaW5z6WNhYmxlIChmb3Jj6SkgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAxNjEgQTEgICBbIDMyICA1IDhdIHBvaW50IGQnZXhjbGFtYXRpb24gaW52ZXJz6SAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8IDE2MiBBMiAgIFs3ICAxNCAgOF0gY2VudCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgMTYzIEEzICAgWzczMiAgICAgXSBsaXZyZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAxNjQgQTQgICBbICAgIDQ1ICBdIGRldmlzZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8IDE2NSBBNSAgIFs3IDIgIDU2OF0geWVuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgMTY2IEE2ICAgWyAgICA0NSA4XSB0cmFpdCBjb3Vw6SB2ZXJ0aWNhbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAxNjcgQTcgICBbIDMyMTQgIDhdIHBhcmFncmFwaGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8IDE2OCBBOCAgIFsgICAgNCA2IF0gdHLpbWEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgMTY5IEE5ICAgWyAgIDE0ICA4XSBjb3B5cmlnaHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAxNzAgQUEgICBbNyAgMSAgNjhdIG9yZGluYWwgZultaW5pbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8IDE3MSBBQiAgIFsgMzIgIDU2OF0gZ3VpbGxlbWV0IGZyYW7nYWlzIG91dnJhbnQgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgMTcyIEFDICAgWzcgMiAgNTYgXSBu6WdhdGlvbiBsb2dpcXVlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAxNzMgQUQgICBbNyAgICAgIDhdIHRyYWl0IGQndW5pb24gY29uZGl0aW9ubmUgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8IDE3NCBBRSAgIFsgMzIxIDUgOF0gbWFycXVlIGTpcG9z6WUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgMTc1IEFGICAgWyAzIDE0ICA4XSBtYWNyb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAxNzYgQjAgICBbNyAyICAgNiBdIGRlZ3LpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8IDE3NyBCMSAgIFs3MyAgICA2OF0gcGx1cyBvdSBtb2lucyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgMTc4IEIyICAgWzcgICA0NSAgXSBjYXJy6SAocHVpc3NhbmNlIDIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAxNzkgQjMgICBbNyAgIDQ1NiBdIGN1YmUgKHB1aXNzYW5jZSAzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8IDE4MCBCNCAgIFsgICAgIDUgIF0gYWNjZW50IGFpZ3UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgMTgxIEI1ICAgWzcgMiAgNSAgXSBtaWNybyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAxODIgQjYgICBbNyAgIDQ1NjhdIHBpZWQgZGUgbW91Y2hlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8IDE4MyBCNyAgIFsgICAgICAgOF0gcG9pbnQgbelkaWFudCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgMTg0IEI4ICAgWyAgICA0NTYgXSBj6WRpbGxlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAxODUgQjkgICBbNyAgIDQgICBdIGV4cG9zYW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8IDE4NiBCQSAgIFs3IDIgICA2OF0gb3JkaW5hbCBtYXNjdWxpbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgMTg3IEJCICAgWzczMiAgNTYgXSBndWlsbGVtZXR0cyBmcmFu52FpcyBmZXJtYW50ICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAxODggQkMgICBbIDMgMSAgNjhdIHVuIHF1YXJ0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8IDE4OSBCRCAgIFsgICAgNCA2OF0gdW4gZGVtaSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgMTkwIEJFICAgWyAzIDE0IDY4XSB0cm9pcyBxdWFydCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAxOTEgQkYgICBbICAyICAgNjhdIHBvaW50IGQnaW50ZXJyb2dhdGlvbiBpbnZlcnPpICAgICAgICAgICAgICAgICAgICAgICB8Cit8IDE5MiBDMCAgIFs3MzIxIDU2IF0gYSBncmF2ZSBtYWp1c2N1bGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgMTkzIEMxICAgWzczMjEgNTY4XSBhIGFpZ3UgbWFqdXNjdWxlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAxOTQgQzIgICBbNyAgMSAgNiBdIGEgY2lyY29uZmxleGUgbWFqdXNjdWxlICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8IDE5NSBDMyAgIFs3ICAxICAgOF0gYSB0aWxkZSBtYWp1c2N1bGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgMTk2IEM0ICAgWzczICA0NTYgXSBhIHRy6W1hIG1hanVzY3VsZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAxOTcgQzUgICBbNyAyICAgICBdIGEgYXZlYyByb25kIGF1LWRlc3N1cyBtYWp1c2N1bGUgICAgICAgICAgICAgICAgICAgICB8Cit8IDE5OCBDNiAgIFs3MyAgNDUgIF0gYSBlIG1hanVzY3VsZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgMTk5IEM3ICAgWzczMjE0IDYgXSBjIGPpZGlsbGUgbWFqdXNjdWxlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAyMDAgQzggICBbNzMyIDQgNiBdIGUgZ3JhdmUgbWFqdXNjdWxlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8IDIwMSBDOSAgIFs3MzIxNDU2IF0gZSBhaWd1IG1hanVzY3VsZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgMjAyIENBICAgWzcgMjEgIDYgXSBlIGNpcmNvbmZsZXhlIG1hanVzY3VsZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAyMDMgQ0IgICBbNyAyMTQgNiBdIGUgdHLpbWEgbWFqdXNjdWxlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8IDIwNCBDQyAgIFs3IDIgNCAgOF0gaSBncmF2ZSBtYWp1c2N1bGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgMjA1IENEICAgWzczICA0ICAgXSBpIGFpZ3UgbWFqdXNjdWxlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAyMDYgQ0UgICBbNyAgMTQgNiBdIGkgY2lyY29uZmxleGUgbWFqdXNjdWxlICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8IDIwNyBDRiAgIFs3IDIxNDU2IF0gaSB0cultYSBtYWp1c2N1bGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgMjA4IEQwICAgWzcgMjEgICA4XSBFdGggbWFqdXNjdWxlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAyMDkgRDEgICBbNzMgMTQ1IDhdIG4gdGlsZGUgbWFqdXNjdWxlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8IDIxMCBEMiAgIFs3MyAxIDUgOF0gbyBncmF2ZSBtYWp1c2N1bGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgMjExIEQzICAgWzczICA0IDYgXSBvIGFpZ3UgbWFqdXNjdWxlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAyMTIgRDQgICBbNzMgMTQ1NiBdIG8gY2lyY29uZmxleGUgbWFqdXNjdWxlICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8IDIxMyBENSAgIFs3MyAxICAgOF0gbyB0aWxkZSBtYWp1c2N1bGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgMjE0IEQ2ICAgWzcgMiA0IDY4XSBvIHRy6W1hIG1hanVzY3VsZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAyMTUgRDcgICBbNzMgICA1IDhdIG11bHRpcGls6SBwYXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8IDIxNiBEOCAgIFs3MyAgNDU2OF0gbyBiYXJy6SBtYWp1c2N1bGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgMjE3IEQ5ICAgWzczMiA0NTYgXSB1IGdyYXZlIG1hanVzY3VsZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAyMTggREEgICBbNzMyIDQ1NjhdIHUgYWlndSBtYWp1c2N1bGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8IDIxOSBEQiAgIFs3ICAxIDU2IF0gdSBjaXJjb25mbGV4ZSBtYWp1c2N1bGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgMjIwIERDICAgWzcgMjEgNTYgXSB1IHRy6W1hIG1hanVzY3VsZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAyMjEgREQgICBbNzMgMTQ1NjhdIHkgYWlndSBtYWp1c2N1bGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8IDIyMiBERSAgIFsgIDIgNDUgOF0gVGhvcm4gbWFqdXNjdWxlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgMjIzIERGICAgWyAzMiA0ICA4XSBzemV0aCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAyMjQgRTAgICBbIDMyMSA1NiBdIGEgZ3JhdmUgbWludXNjdWxlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8IDIyNSBFMSAgIFsgMzIxIDU2OF0gYSBhaWd1IG1pbnVzY3VsZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgMjI2IEUyICAgWyAgIDEgIDY4XSBhIGNpcmNvbmZsZXhlIG1pbnVzY3VsZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAyMjcgRTMgICBbICAgMSAgIDhdIGEgcWlsZGUgbWludXNjdWxlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8IDIyOCBFNCAgIFs3MyAgNDUgOF0gYSB0cultYSBtaW51c2N1bGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgMjI5IEU1ICAgWyAgMiAgICA4XSBhIGF2ZWMgcm9uZCBlbiB06nRlIG1pbnVzY3VsZSAgICAgICAgICAgICAgICAgICAgICAgfAorfCAyMzAgRTYgICBbIDMgIDQ1IDhdIGEgZSBtaW51c2N1bGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8IDIzMSBFNyAgIFsgMzIxNCA2IF0gYyBj6WRpbGxlIG1pbnVzY3VsZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgMjMyIEU4ICAgWyAzMiA0IDYgXSBlIGdyYXZlIG1pbnVzY3VsZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAyMzMgRTkgICBbIDMyMTQ1NiBdIGUgYWlndSBtaW51c2N1bGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8IDIzNCBFQSAgIFsgIDIxICA2OF0gZSBjaXJjb25mbGV4ZSBtaW51c2N1bGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgMjM1IEVCICAgWyAgMjE0IDY4XSBlIHRy6W1hIG1pbnVzY3VsZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAKK3wgMjM2IEVDICAgWyAgMiA0ICA4XSBpIGdyYXZlIG1pbnVzY3VsZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAyMzcgRUQgICBbNzMgIDQgIDhdIGkgYWlndSBtaW51c2N1bGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8IDIzOCBFRSAgIFsgICAxNCA2OF0gaSBjaXJjb25mbGV4ZSBtaW51c2N1bGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgMjM5IEVGICAgWyAgMjE0NTY4XSBpIHRy6W1hIG1pbnVzY3VsZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAyNDAgRjAgICBbICAyMSAgIDhdIEV0aCBtaW51c2N1bGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8IDI0MSBGMSAgIFs3IDIxNDU2OF0gbiB0aWxkZSBtaW51c2N1bGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgMjQyIEYyICAgWyAzIDEgNSA4XSBvIGdyYXZlIG1pbnVzY3VsZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAyNDMgRjMgICBbIDMgIDQgNiBdIG8gYWlndSBtaW51c2N1bGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8IDI0NCBGNCAgIFsgICAxNDU2OF0gbyBjaXJjb25mbGV4ZSBtaW51c2N1bGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgMjQ1IEY1ICAgWzcgICA0IDY4XSBvIHRpbGRlIG1pbnVzY3VsZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAyNDYgRjYgICBbIDMgICA1IDhdIG8gdHLpbWEgbWludXNjdWxlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8IDI0NyBGNyAgIFs3IDIgIDUgOF0gZGl2aXPpIHBhciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgMjQ4IEY4ICAgWyAgICAgNTY4XSBvIGJhcnLpIG1pbnVzY3VsZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAyNDkgRjkgICBbIDMyIDQ1NiBdIHUgZ3JhdmUgbWludXNjdWxlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8IDI1MCBGQSAgIFsgMzIgNDU2OF0gdSBhaWd1IG1pbnVzY3VsZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgMjUxIEZCICAgWyAgIDEgNTY4XSB1IGNpcmNvbmZsZXhlIG1pbnVzY3VsZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAyNTIgRkMgICBbICAyMSA1NjhdIHUgdHLpbWEgbWludXNjdWxlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8IDI1MyBGRCAgIFsgMyAxNDU2OF0geSBhaWd1IG1pbnVzY3VsZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgMjU0IEZFICAgWyAgMiA0NSA4XSB0aG9ybiBtaW51c2N1bGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAyNTUgRkYgICBbICAyICA1NjhdIHkgdHLpbWEgbWludXNjdWxlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKzwvdmVyYj48L3RzY3JlZW4+CmRpZmYgLS1naXQgYS9Eb2N1bWVudHMvTWFudWFsLUJSTFRUWS9GcmVuY2gvbmFiY2Muc2dtbCBiL0RvY3VtZW50cy9NYW51YWwtQlJMVFRZL0ZyZW5jaC9uYWJjYy5zZ21sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY0NGMyYmQKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudHMvTWFudWFsLUJSTFRUWS9GcmVuY2gvbmFiY2Muc2dtbApAQCAtMCwwICsxLDI2MiBAQAorPHNlY3Q+Q29kZSBpbmZvcm1hdGlxdWUgYnJhaWxsZSBOb3JkIEFt6XJpY2FpbjxsYWJlbCBpZD0ibmFiY2MiPjxwPgorPHRzY3JlZW4+PHZlcmI+CisgIE51bSBIZXggICAgIFBvaW50cyAgICAgRGVzY3JpcHRpb24KKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgICAwICAwMCAgWzcgICA0ICA4XSAgTlVMIChudWxsKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAxICAwMSAgWzcgIDEgICA4XSAgU09IIChzdGFydCBvZiBoZWFkZXIpICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAyICAwMiAgWzcgMjEgICA4XSAgU1RYIChzdGFydCBvZiB0ZXh0KSAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAzICAwMyAgWzcgIDE0ICA4XSAgRVRYIChlbmQgb2YgdGV4dCkgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICA0ICAwNCAgWzcgIDE0NSA4XSAgRU9UIChlbmQgb2YgdHJhbnNtaXNzaW9uKSAgICAgICAgICAgICAgICAgIHwKK3wgICA1ICAwNSAgWzcgIDEgNSA4XSAgRU5RIChlbnF1aXJ5KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICA2ICAwNiAgWzcgMjE0ICA4XSAgQUNLIChhY2tub3dsZWRnZSkgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICA3ICAwNyAgWzcgMjE0NSA4XSAgQkVMIChiZWxsKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICA4ICAwOCAgWzcgMjEgNSA4XSAgQlMgKGJhY2sgc3BhY2UpICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICA5ICAwOSAgWzcgMiA0ICA4XSAgSFQgKGhvcml6b250YWwgdGFiKSAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgIDEwICAwQSAgWzcgMiA0NSA4XSAgTEYgKGxpbmUgZmVlZCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgIDExICAwQiAgWzczIDEgICA4XSAgVlQgKHZlcnRpY2FsIHRhYikgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgIDEyICAwQyAgWzczMjEgICA4XSAgRkYgKGZvcm0gZmVlZCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgIDEzICAwRCAgWzczIDE0ICA4XSAgQ1IgKGNhcnJpYWdlIHJldHVybikgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgIDE0ICAwRSAgWzczIDE0NSA4XSAgU08gKHNoaWZ0IG91dCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgIDE1ICAwRiAgWzczIDEgNSA4XSAgU0kgKHNoaWZ0IGluKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgIDE2ICAxMCAgWzczMjE0ICA4XSAgRExFIChkYXRhIGxpbmsgZXNjYXBlKSAgICAgICAgICAgICAgICAgICAgIHwKK3wgIDE3ICAxMSAgWzczMjE0NSA4XSAgREMxIChkaXJlY3QgY29udHJvbCAxKSAgICAgICAgICAgICAgICAgICAgIHwKK3wgIDE4ICAxMiAgWzczMjEgNSA4XSAgREMyIChkaXJlY3QgY29udHJvbCAyKSAgICAgICAgICAgICAgICAgICAgIHwKK3wgIDE5ICAxMyAgWzczMiA0ICA4XSAgREMzIChkaXJlY3QgY29udHJvbCAzKSAgICAgICAgICAgICAgICAgICAgIHwKK3wgIDIwICAxNCAgWzczMiA0NSA4XSAgREM0IChkaXJlY3QgY29udHJvbCA0KSAgICAgICAgICAgICAgICAgICAgIHwKK3wgIDIxICAxNSAgWzczIDEgIDY4XSAgTkFLIChuZWdhdGl2ZSBhY2tub3dsZWRnZSkgICAgICAgICAgICAgICAgIHwKK3wgIDIyICAxNiAgWzczMjEgIDY4XSAgU1lOIChzeW5jaHJvbml6ZSkgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgIDIzICAxNyAgWzcgMiA0NTY4XSAgRVRCIChlbmQgb2YgdGV4dCBibG9jaykgICAgICAgICAgICAgICAgICAgIHwKK3wgIDI0ICAxOCAgWzczIDE0IDY4XSAgQ0FOIChjYW5jZWwpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgIDI1ICAxOSAgWzczIDE0NTY4XSAgRU0gKGVuZCBvZiBtZWRpdW0pICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgIDI2ICAxQSAgWzczIDEgNTY4XSAgU1VCIChzdWJzdGl0dXRlKSAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgIDI3ICAxQiAgWzcgMiA0IDY4XSAgRVNDIChlc2NhcGUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgIDI4ICAxQyAgWzcgMjEgNTY4XSAgRlMgKGZpbGUgc2VwYXJhdG9yKSAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgIDI5ICAxRCAgWzcgMjE0NTY4XSAgR1MgKGdyb3VwIHNlcGFyYXRvcikgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgIDMwICAxRSAgWzcgICA0NSA4XSAgUlMgKHJlY29yZCBzZXBhcmF0b3IpICAgICAgICAgICAgICAgICAgICAgIHwKK3wgIDMxICAxRiAgWzcgICA0NTY4XSAgVVMgKHVuaXQgc2VwYXJhdG9yKSAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgIDMyICAyMCAgWyAgICAgICAgXSAgc3BhY2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgIDMzICAyMSAgWyAzMiA0IDYgXSAgZXhjbGFtYXRpb24gcG9pbnQgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgIDM0ICAyMiAgWyAgICAgNSAgXSAgcXVvdGF0aW9uIG1hcmsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgIDM1ICAyMyAgWyAzICA0NTYgXSAgbnVtYmVyIHNpZ24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgIDM2ICAyNCAgWyAgMjE0IDYgXSAgc2lnbmUgZG9sbGFyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAzNyAgMjUgIFsgICAxNCA2IF0gIHNpZ25lIHBvdXIgY2VudCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAzOCAgMjYgIFsgMzIxNCA2IF0gIGFtcGVyc2FuZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAzOSAgMjcgIFsgMyAgICAgIF0gIGFjY2VudCBhaWd1ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgIDQwICAyOCAgWyAzMjEgNTYgXSAgbGVmdCBwYXJlbnRoZXNpcyAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICA0ICAyOTEgIFsgMzIgNDU2ICkgcmlnaHQgcGFyZW50aGVzaXMgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgIDQyICAyQSAgWyAgIDEgIDYgXSAgYXN0ZXJpc2sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgIDQzICAyQiAgWyAzICA0IDYgXSAgcGx1cyBzaWduICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgIDQ0ICAyQyAgWyAgICAgIDYgXSAgY29tbWEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgIDQ1ICAyRCAgWyAzICAgIDYgXSAgbWludXMgc2lnbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgIDQ2ICAyRSAgWyAgICA0IDYgXSAgcGVyaW9kICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgIDQ3ICAyRiAgWyAzICA0ICAgXSAgZm9yd2FyZCBzbGFzaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgIDQ4ICAzMCAgWyAzICAgNTYgXSAgemVybyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgIDQ5ICAzMSAgWyAgMiAgICAgXSAgb25lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgIDUwICAzMiAgWyAzMiAgICAgXSAgdHdvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgIDUxICAzMyAgWyAgMiAgNSAgXSAgdGhyZWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgIDUyICAzNCAgWyAgMiAgNTYgXSAgZm91ciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgIDUzICAzNSAgWyAgMiAgIDYgXSAgZml2ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgIDU0ICAzNiAgWyAzMiAgNSAgXSAgc2l4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgIDU1ICAzNyAgWyAzMiAgNTYgXSAgc2V2ZW4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgIDU2ICAzOCAgWyAzMiAgIDYgXSAgZWlnaHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgIDU3ICAzOSAgWyAzICAgNSAgXSAgbmluZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgIDU4ICAzQSAgWyAgIDEgNTYgXSAgY29sb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgIDU5ICAzQiAgWyAgICAgNTYgXSAgc2VtaWNvbG9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgIDYwICAzQyAgWyAgMjEgIDYgXSAgbGVzcy10aGFuIHNpZ24gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgIDYxICAzRCAgWyAzMjE0NTYgXSAgZXF1YWxzIHNpZ24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgIDYyICAzRSAgWyAzICA0NSAgXSAgZ3JlYXRlci10aGFuIHNpZ24gICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgIDYzICAzRiAgWyAgIDE0NTYgXSAgcXVlc3Rpb24gbWFyayAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgIDY0ICA0MCAgWzcgICA0ICAgXSAgY29tbWVyY2lhbCBhdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgIDY1ICA0MSAgWzcgIDEgICAgXSAgY2FwaXRhbCBhICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgIDY2ICA0MiAgWzcgMjEgICAgXSAgY2FwaXRhbCBiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgIDY3ICA0MyAgWzcgIDE0ICAgXSAgY2FwaXRhbCBjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgIDY4ICA0NCAgWzcgIDE0NSAgXSAgY2FwaXRhbCBkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgIDY5ICA0NSAgWzcgIDEgNSAgXSAgY2FwaXRhbCBlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgIDcwICA0NiAgWzcgMjE0ICAgXSAgY2FwaXRhbCBmICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgIDcxICA0NyAgWzcgMjE0NSAgXSAgY2FwaXRhbCBnICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgIDcyICA0OCAgWzcgMjEgNSAgXSAgY2FwaXRhbCBoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgIDczICA0OSAgWzcgMiA0ICAgXSAgY2FwaXRhbCBpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgIDc0ICA0QSAgWzcgMiA0NSAgXSAgY2FwaXRhbCBqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgIDc1ICA0QiAgWzczIDEgICAgXSAgY2FwaXRhbCBrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgIDc2ICA0QyAgWzczMjEgICAgXSAgY2FwaXRhbCBsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgIDc3ICA0RCAgWzczIDE0ICAgXSAgY2FwaXRhbCBtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgIDc4ICA0RSAgWzczIDE0NSAgXSAgY2FwaXRhbCBuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgIDc5ICA0RiAgWzczIDEgNSAgXSAgY2FwaXRhbCBvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgIDgwICA1MCAgWzczMjE0ICAgXSAgY2FwaXRhbCBwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgIDgxICA1MSAgWzczMjE0NSAgXSAgY2FwaXRhbCBxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgIDgyICA1MiAgWzczMjEgNSAgXSAgY2FwaXRhbCByICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgIDgzICA1MyAgWzczMiA0ICAgXSAgY2FwaXRhbCBzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgIDg0ICA1NCAgWzczMiA0NSAgXSAgY2FwaXRhbCB0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgIDg1ICA1NSAgWzczIDEgIDYgXSAgY2FwaXRhbCB1ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgIDg2ICA1NiAgWzczMjEgIDYgXSAgY2FwaXRhbCB2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgIDg3ICA1NyAgWzcgMiA0NTYgXSAgY2FwaXRhbCB3ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgIDg4ICA1OCAgWzczIDE0IDYgXSAgY2FwaXRhbCB4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgIDg5ICA1OSAgWzczIDE0NTYgXSAgY2FwaXRhbCB5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgIDkwICA1QSAgWzczIDEgNTYgXSAgY2FwaXRhbCB6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgIDkxICA1QiAgWzcgMiA0IDYgXSAgbGVmdCBicmFja2V0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgIDkyICA1QyAgWzcgMjEgNTYgXSAgYmFja3dhcmQgc2xhc2ggICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgIDkzICA1RCAgWzcgMjE0NTYgXSAgcmlnaHQgYnJhY2tldCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgIDk0ICA1RSAgWzcgICA0NSAgXSAgY2lyY3VtZmxleCBhY2NlbnQgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgIDk1ICA1RiAgWyAgICA0NTYgXSAgdW5kZXJzY29yZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgIDk2ICA2MCAgWyAgICA0ICAgXSAgZ3JhdmUgYWNjZW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgIDk3ICA2MSAgWyAgIDEgICAgXSAgc21hbGwgYSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgIDk4ICA2MiAgWyAgMjEgICAgXSAgc21hbGwgYiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgIDk5ICA2MyAgWyAgIDE0ICAgXSAgc21hbGwgYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgMTAwICA2NCAgWyAgIDE0NSAgXSAgc21hbGwgZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgMTAxICA2NSAgWyAgIDEgNSAgXSAgc21hbGwgZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgMTAyICA2NiAgWyAgMjE0ICAgXSAgc21hbGwgZiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgMTAzICA2NyAgWyAgMjE0NSAgXSAgc21hbGwgZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgMTA0ICA2OCAgWyAgMjEgNSAgXSAgc21hbGwgaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgMTA1ICA2OSAgWyAgMiA0ICAgXSAgc21hbGwgaSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgMTA2ICA2QSAgWyAgMiA0NSAgXSAgc21hbGwgaiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgMTA3ICA2QiAgWyAzIDEgICAgXSAgc21hbGwgayAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgMTA4ICA2QyAgWyAzMjEgICAgXSAgc21hbGwgbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgMTA5ICA2RCAgWyAzIDE0ICAgXSAgc21hbGwgbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgMTEwICA2RSAgWyAzIDE0NSAgXSAgc21hbGwgbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgMTExICA2RiAgWyAzIDEgNSAgXSAgc21hbGwgbyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgMTEyICA3MCAgWyAzMjE0ICAgXSAgc21hbGwgcCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgMTEzICA3MSAgWyAzMjE0NSAgXSAgc21hbGwgcSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgMTE0ICA3MiAgWyAzMjEgNSAgXSAgc21hbGwgciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgMTE1ICA3MyAgWyAzMiA0ICAgXSAgc21hbGwgcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgMTE2ICA3NCAgWyAzMiA0NSAgXSAgc21hbGwgdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgMTE3ICA3NSAgWyAzIDEgIDYgXSAgc21hbGwgdSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgMTE4ICA3NiAgWyAzMjEgIDYgXSAgc21hbGwgdiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgMTE5ICA3NyAgWyAgMiA0NTYgXSAgc21hbGwgdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgMTIwICA3OCAgWyAzIDE0IDYgXSAgc21hbGwgeCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgMTIxICA3OSAgWyAzIDE0NTYgXSAgc21hbGwgeSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgMTIyICA3QSAgWyAzIDEgNTYgXSAgc21hbGwgeiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgMTIzICA3QiAgWyAgMiA0IDYgXSAgbGVmdCBicmFjZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgMTI0ICA3QyAgWyAgMjEgNTYgXSAgdmVydGljYWwgYmFyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgMTI1ICA3RCAgWyAgMjE0NTYgXSAgcmlnaHQgYnJhY2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgMTI2ICA3RSAgWyAgICA0NSAgXSAgdGlsZGUgYWNjZW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgMTI3ICA3RiAgWzcgICA0NTYgXSAgREVMIChkZWxldGUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgMTI4ICA4MCAgWyAgICA0ICA4XSAgPGNvbnRyb2w+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgMTI5ICA4MSAgWyAgIDEgICA4XSAgPGNvbnRyb2w+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgMTMwICA4MiAgWyAgMjEgICA4XSAgQlBIIChicmVhayBwZXJtaXR0ZWQgaGVyZSkgICAgICAgICAgICAgICAgIHwKK3wgMTMxICA4MyAgWyAgIDE0ICA4XSAgTkJIIChubyBicmVhayBoZXJlKSAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgMTMyICA4NCAgWyAgIDE0NSA4XSAgPGNvbnRyb2w+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgMTMzICA4NSAgWyAgIDEgNSA4XSAgTkwgKG5leHQgbGluZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgMTM0ICA4NiAgWyAgMjE0ICA4XSAgU1NBIChzdGFydCBvZiBzZWxlY3RlZCBhcmVhKSAgICAgICAgICAgICAgIHwKK3wgMTM1ICA4NyAgWyAgMjE0NSA4XSAgRVNBIChlbmQgb2Ygc2VsZWN0ZWQgYXJlYSkgICAgICAgICAgICAgICAgIHwKK3wgMTM2ICA4OCAgWyAgMjEgNSA4XSAgQ1RTIChjaGFyYWN0ZXIgdGFidWxhdGlvbiBzZXQpICAgICAgICAgICAgIHwKK3wgMTM3ICA4OSAgWyAgMiA0ICA4XSAgQ1RKIChjaGFyYWN0ZXIgdGFidWxhdGlvbiBqdXN0aWZpY2F0aW9uKSAgIHwKK3wgMTM4ICA4QSAgWyAgMiA0NSA4XSAgTFRTIChsaW5lIHRhYnVsYXRpb24gc2V0KSAgICAgICAgICAgICAgICAgIHwKK3wgMTM5ICA4QiAgWyAzIDEgICA4XSAgUExEIChwYXJ0aWFsIGxpbmUgZG93bikgICAgICAgICAgICAgICAgICAgIHwKK3wgMTQwICA4QyAgWyAzMjEgICA4XSAgUExVIChwYXJ0aWFsIGxpbmUgdXApICAgICAgICAgICAgICAgICAgICAgIHwKK3wgMTQxICA4RCAgWyAzIDE0ICA4XSAgUkxGIChyZXZlcnNlIGxpbmUgZmVlZCkgICAgICAgICAgICAgICAgICAgIHwKK3wgMTQyICA4RSAgWyAzIDE0NSA4XSAgU1MyIChzaW5nbGUgc2hpZnQgdHdvKSAgICAgICAgICAgICAgICAgICAgIHwKK3wgMTQzICA4RiAgWyAzIDEgNSA4XSAgU1MzIChzaW5nbGUgc2hpZnQgdGhyZWUpICAgICAgICAgICAgICAgICAgIHwKK3wgMTQ0ICA5MCAgWyAzMjE0ICA4XSAgRENTIChkZXZpY2UgY29udHJvbCBzdHJpbmcpICAgICAgICAgICAgICAgIHwKK3wgMTQ1ICA5MSAgWyAzMjE0NSA4XSAgUFUxIChwcml2YXRlIHVzZSBvbmUpICAgICAgICAgICAgICAgICAgICAgIHwKK3wgMTQ2ICA5MiAgWyAzMjEgNSA4XSAgUFUyIChwcml2YXRlIHVzZSB0d28pICAgICAgICAgICAgICAgICAgICAgIHwKK3wgMTQ3ICA5MyAgWyAzMiA0ICA4XSAgU1RTIChzZXQgdHJhbnNtaXQgc3RhdGUpICAgICAgICAgICAgICAgICAgIHwKK3wgMTQ4ICA5NCAgWyAzMiA0NSA4XSAgQ0MgKGNhbmNlbCBjaGFyYWN0ZXIpICAgICAgICAgICAgICAgICAgICAgIHwKK3wgMTQ5ICA5NSAgWyAzIDEgIDY4XSAgTVcgKG1lc3NhZ2Ugd2FpdGluZykgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgMTUwICA5NiAgWyAzMjEgIDY4XSAgU0dBIChzdGFydCBvZiBndWFyZGVkIGFyZWEpICAgICAgICAgICAgICAgIHwKK3wgMTUxICA5NyAgWyAgMiA0NTY4XSAgRUdBIChlbmQgb2YgZ3VhcmRlZCBhcmVhKSAgICAgICAgICAgICAgICAgIHwKK3wgMTUyICA5OCAgWyAzIDE0IDY4XSAgU1MgKHN0YXJ0IG9mIHN0cmluZykgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgMTUzICA5OSAgWyAzIDE0NTY4XSAgPGNvbnRyb2w+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgMTU0ICA5QSAgWyAzIDEgNTY4XSAgU0NJIChzaW5nbGUgY2hhcmFjdGVyIGludHJvZHVjZXIpICAgICAgICAgIHwKK3wgMTU1ICA5QiAgWyAgMiA0IDY4XSAgQ1NJIChjb250cm9sIHNlcXVlbmNlIGludHJvZHVjZXIpICAgICAgICAgIHwKK3wgMTU2ICA5QyAgWyAgMjEgNTY4XSAgU1QgKHN0cmluZyB0ZXJtaW5hdG9yKSAgICAgICAgICAgICAgICAgICAgIHwKK3wgMTU3ICA5RCAgWyAgMjE0NTY4XSAgT1NDIChvcGVyYXRpbmcgc3lzdGVtIGNvbW1hbmQpICAgICAgICAgICAgIHwKK3wgMTU4ICA5RSAgWyAgICA0NSA4XSAgUE0gKHByaXZhY3kgbWVzc2FnZSkgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgMTU5ICA5RiAgWyAgICA0NTY4XSAgQVBDIChhcHBsaWNhdGlvbiBwcm9ncmFtIGNvbW1hbmQpICAgICAgICAgIHwKK3wgMTYwICBBMCAgWzcgICAgICA4XSAgbm8tYnJlYWsgc3BhY2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgMTYxICBBMSAgWzczMiA0IDYgXSAgaW52ZXJ0ZWQgZXhjbGFtYXRpb24gbWFyayAgICAgICAgICAgICAgICAgIHwKK3wgMTYyICBBMiAgWzcgMjE0IDYgXSAgY2VudCBzaWduICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgMTYzICBBMyAgWzczICA0NTYgXSAgcG91bmQgc2lnbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgMTY0ICBBNCAgWzcgIDE0IDYgXSAgY3VycmVuY3kgc2lnbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgMTY1ICBBNSAgWzczMjE0IDYgXSAgeWVuIHNpZ24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgMTY2ICBBNiAgWzcgIDEgNTYgXSAgYnJva2VuIGJhciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgMTY3ICBBNyAgWzczICAgNSAgXSAgc2VjdGlvbiBzaWduICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgMTY4ICBBOCAgWzcgICAgNSAgXSAgZGlhZXJlc2lzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgMTY5ICBBOSAgWzczMiAgNTYgXSAgY29weXJpZ2h0IHNpZ24gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgMTcwICBBQSAgWyAgICAgICA4XSAgZmVtaW5pbmUgb3JkaW5hbCBpbmRpY2F0b3IgICAgICAgICAgICAgICAgIHwKK3wgMTcxICBBQiAgWzcgMjEgIDYgXSAgbGVmdC1wb2ludGluZyBkb3VibGUgYW5nbGUgcXVvdGF0aW9uIG1hcmsgIHwKK3wgMTcyICBBQyAgWzcgMiAgNTYgXSAgbm90IHNpZ24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgMTczICBBRCAgWzczICAgIDYgXSAgc29mdCBoeXBoZW4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgMTc0ICBBRSAgWzczMiAgIDYgXSAgcmVnaXN0ZXJlZCBzaWduICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgMTc1ICBBRiAgWzcgMiAgIDYgXSAgbWFjcm9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgMTc2ICBCMCAgWzczICAgNTYgXSAgZGVncmVlIHNpZ24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgMTc3ICBCMSAgWzczICA0IDYgXSAgcGx1cy1taW51cyBzaWduICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgMTc4ICBCMiAgWzczMiAgICAgXSAgc3VwZXJzY3JpcHQgdHdvICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgMTc5ICBCMyAgWzcgMiAgNSAgXSAgc3VwZXJzY3JpcHQgdGhyZWUgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgMTgwICBCNCAgWzczICAgICAgXSAgYWN1dGUgYWNjZW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgMTgxICBCNSAgWzcgICAgNTYgXSAgbWljcm8gc2lnbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgMTgyICBCNiAgWzczMiAgNSAgXSAgcGlsY3JvdyBzaWduICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgMTgzICBCNyAgWzcgICA0IDYgXSAgbWlkZGxlIGRvdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgMTg0ICBCOCAgWzcgICAgIDYgXSAgY2VkaWxsYSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgMTg1ICBCOSAgWzcgMiAgICAgXSAgc3VwZXJzY3JpcHQgb25lICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgMTg2ICBCQSAgWzcgICAgICAgXSAgbWFzY3VsaW5lIG9yZGluYWwgaW5kaWNhdG9yICAgICAgICAgICAgICAgIHwKK3wgMTg3ICBCQiAgWzczICA0NSAgXSAgcmlnaHQtcG9pbnRpbmcgZG91YmxlIGFuZ2xlIHF1b3RhdGlvbiBtYXJrIHwKK3wgMTg4ICBCQyAgWzczMjEgNTYgXSAgdnVsZ2FyIGZyYWN0aW9uIG9uZSBxdWFydGVyICAgICAgICAgICAgICAgIHwKK3wgMTg5ICBCRCAgWzczMjE0NTYgXSAgdnVsZ2FyIGZyYWN0aW9uIG9uZSBoYWxmICAgICAgICAgICAgICAgICAgIHwKK3wgMTkwICBCRSAgWzczMiA0NTYgXSAgdnVsZ2FyIGZyYWN0aW9uIHRocmVlIHF1YXJ0ZXJzICAgICAgICAgICAgIHwKK3wgMTkxICBCRiAgWzcgIDE0NTYgXSAgaW52ZXJ0ZWQgcXVlc3Rpb24gbWFyayAgICAgICAgICAgICAgICAgICAgIHwKK3wgMTkyICBDMCAgWzczMiAgNSA4XSAgY2FwaXRhbCBhIGdyYXZlICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgMTkzICBDMSAgWzcgIDEgIDY4XSAgY2FwaXRhbCBhIGFjdXRlICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgMTk0ICBDMiAgWzcgMiAgICA4XSAgY2FwaXRhbCBhIGNpcmN1bWZsZXggICAgICAgICAgICAgICAgICAgICAgIHwKK3wgMTk1ICBDMyAgWzcgICAgNSA4XSAgY2FwaXRhbCBhIHRpbGRlICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgMTk2ICBDNCAgWzczMjE0IDY4XSAgY2FwaXRhbCBhIGRpYWVyZXNpcyAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgMTk3ICBDNSAgWzczICA0NSA4XSAgY2FwaXRhbCBhIHJpbmcgYWJvdmUgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgMTk4ICBDNiAgWzczICAgICA4XSAgY2FwaXRhbCBhZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgMTk5ICBDNyAgWzczICA0IDY4XSAgY2FwaXRhbCBjIGNlZGlsbGEgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgMjAwICBDOCAgWzczMiAgNTY4XSAgY2FwaXRhbCBlIGdyYXZlICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgMjAxICBDOSAgWzcgMjEgIDY4XSAgY2FwaXRhbCBlIGFjdXRlICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgMjAyICBDQSAgWzczMiAgICA4XSAgY2FwaXRhbCBlIGNpcmN1bWZsZXggICAgICAgICAgICAgICAgICAgICAgIHwKK3wgMjAzICBDQiAgWzczMjE0NTY4XSAgY2FwaXRhbCBlIGRpYWVyZXNpcyAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgMjA0ICBDQyAgWzczMiAgIDY4XSAgY2FwaXRhbCBpIGdyYXZlICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgMjA1ICBDRCAgWzcgIDE0IDY4XSAgY2FwaXRhbCBpIGFjdXRlICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgMjA2ICBDRSAgWzcgMiAgNSA4XSAgY2FwaXRhbCBpIGNpcmN1bWZsZXggICAgICAgICAgICAgICAgICAgICAgIHwKK3wgMjA3ICBDRiAgWzczMjEgNTY4XSAgY2FwaXRhbCBpIGRpYWVyZXNpcyAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgMjA4ICBEMCAgWzcgICAgIDY4XSAgY2FwaXRhbCBldGggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgMjA5ICBEMSAgWzcgICA0IDY4XSAgY2FwaXRhbCBuIHRpbGRlICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgMjEwICBEMiAgWzczICAgNSA4XSAgY2FwaXRhbCBvIGdyYXZlICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgMjExICBEMyAgWzcgIDE0NTY4XSAgY2FwaXRhbCBvIGFjdXRlICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgMjEyICBENCAgWzcgMiAgNTY4XSAgY2FwaXRhbCBvIGNpcmN1bWZsZXggICAgICAgICAgICAgICAgICAgICAgIHwKK3wgMjEzICBENSAgWzcgICAgNTY4XSAgY2FwaXRhbCBvIHRpbGRlICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgMjE0ICBENiAgWzczMiA0IDY4XSAgY2FwaXRhbCBvIGRpYWVyZXNpcyAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgMjE1ICBENyAgWzcgIDEgIDYgXSAgbXVsdGlwbGljYXRpb24gc2lnbiAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgMjE2ICBEOCAgWzczICA0ICA4XSAgY2FwaXRhbCBvIHN0cm9rZSAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgMjE3ICBEOSAgWzczICAgNTY4XSAgY2FwaXRhbCB1IGdyYXZlICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgMjE4ICBEQSAgWzcgIDEgNTY4XSAgY2FwaXRhbCB1IGFjdXRlICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgMjE5ICBEQiAgWzcgMiAgIDY4XSAgY2FwaXRhbCB1IGNpcmN1bWZsZXggICAgICAgICAgICAgICAgICAgICAgIHwKK3wgMjIwICBEQyAgWzczMiA0NTY4XSAgY2FwaXRhbCB1IGRpYWVyZXNpcyAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgMjIxICBERCAgWzcgMjE0IDY4XSAgY2FwaXRhbCB5IGFjdXRlICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgMjIyICBERSAgWzczICAgIDY4XSAgY2FwaXRhbCB0aG9ybiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgMjIzICBERiAgWzczICA0NTY4XSAgc21hbGwgc2hhcnAgcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgMjI0ICBFMCAgWyAzMiAgNSA4XSAgc21hbGwgYSBncmF2ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgMjI1ICBFMSAgWyAgIDEgIDY4XSAgc21hbGwgYSBhY3V0ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgMjI2ICBFMiAgWyAgMiAgICA4XSAgc21hbGwgYSBjaXJjdW1mbGV4ICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgMjI3ICBFMyAgWyAgICAgNSA4XSAgc21hbGwgYSB0aWxkZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgMjI4ICBFNCAgWyAzMjE0IDY4XSAgc21hbGwgYSBkaWFlcmVzaXMgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgMjI5ICBFNSAgWyAzICA0NSA4XSAgc21hbGwgYSByaW5nIGFib3ZlICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgMjMwICBFNiAgWyAzICAgICA4XSAgc21hbGwgYWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgMjMxICBFNyAgWyAzICA0IDY4XSAgc21hbGwgYyBjZWRpbGxhICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgMjMyICBFOCAgWyAzMiAgNTY4XSAgc21hbGwgZSBncmF2ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgMjMzICBFOSAgWyAgMjEgIDY4XSAgc21hbGwgZSBhY3V0ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgMjM0ICBFQSAgWyAzMiAgICA4XSAgc21hbGwgZSBjaXJjdW1mbGV4ICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgMjM1ICBFQiAgWyAzMjE0NTY4XSAgc21hbGwgZSBkaWFlcmVzaXMgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgMjM2ICBFQyAgWyAzMiAgIDY4XSAgc21hbGwgaSBncmF2ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgMjM3ICBFRCAgWyAgIDE0IDY4XSAgc21hbGwgaSBhY3V0ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgMjM4ICBFRSAgWyAgMiAgNSA4XSAgc21hbGwgaSBjaXJjdW1mbGV4ICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgMjM5ICBFRiAgWyAzMjEgNTY4XSAgc21hbGwgaSBkaWFlcmVzaXMgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgMjQwICBGMCAgWyAgICAgIDY4XSAgc21hbGwgZXRoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgMjQxICBGMSAgWyAgICA0IDY4XSAgc21hbGwgbiB0aWxkZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgMjQyICBGMiAgWyAzICAgNSA4XSAgc21hbGwgbyBncmF2ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgMjQzICBGMyAgWyAgIDE0NTY4XSAgc21hbGwgbyBhY3V0ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgMjQ0ICBGNCAgWyAgMiAgNTY4XSAgc21hbGwgbyBjaXJjdW1mbGV4ICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgMjQ1ICBGNSAgWyAgICAgNTY4XSAgc21hbGwgbyB0aWxkZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgMjQ2ICBGNiAgWyAzMiA0IDY4XSAgc21hbGwgbyBkaWFlcmVzaXMgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgMjQ3ICBGNyAgWzczICA0ICAgXSAgZGl2aXNpb24gc2lnbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgMjQ4ICBGOCAgWyAzICA0ICA4XSAgc21hbGwgbyBzdHJva2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgMjQ5ICBGOSAgWyAzICAgNTY4XSAgc21hbGwgdSBncmF2ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgMjUwICBGQSAgWyAgIDEgNTY4XSAgc21hbGwgdSBhY3V0ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgMjUxICBGQiAgWyAgMiAgIDY4XSAgc21hbGwgdSBjaXJjdW1mbGV4ICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgMjUyICBGQyAgWyAzMiA0NTY4XSAgc21hbGwgdSBkaWFlcmVzaXMgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgMjUzICBGRCAgWyAgMjE0IDY4XSAgc21hbGwgeSBhY3V0ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgMjU0ICBGRSAgWyAzICAgIDY4XSAgc21hbGwgdGhvcm4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgMjU1ICBGRiAgWyAzICA0NTY4XSAgc21hbGwgeSBkaWFlcmVzaXMgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKzwvdmVyYj48L3RzY3JlZW4+CmRpZmYgLS1naXQgYS9Eb2N1bWVudHMvTWFudWFsLUJSTFRUWS9GcmVuY2gvc3BlZWNoLWRyaXZlcnMuc2dtbCBiL0RvY3VtZW50cy9NYW51YWwtQlJMVFRZL0ZyZW5jaC9zcGVlY2gtZHJpdmVycy5zZ21sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVkZTgyZDMKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudHMvTWFudWFsLUJSTFRUWS9GcmVuY2gvc3BlZWNoLWRyaXZlcnMuc2dtbApAQCAtMCwwICsxLDI2IEBACitBbHZhCisgIHxEZWxwaGkgKDRubilACitCcmFpbGxlTGl0ZQorICB8QAorQ29tYmlCcmFpbGxlCisgIHxACitlU3BlYWsKKyAgfHRleHQgdG8gc3BlZWNoIGVuZ2luZUAKK2VTcGVhay1ORworICB8dGV4dCB0byBzcGVlY2ggZW5naW5lQAorRXh0ZXJuYWxTcGVlY2gKKyAgfHJ1bnMgL3Vzci9sb2NhbC9iaW4vZXh0ZXJuYWxzcGVlY2hACitGZXN0aXZhbAorICB8dGV4dCB0byBzcGVlY2ggZW5naW5lQAorRmVzdGl2YWxMaXRlCisgIHx0ZXh0IHRvIHNwZWVjaCBlbmdpbmVACitHZW5lcmljU2F5CisgIHxwaXBlcyB0byAvdXNyL2xvY2FsL2Jpbi9zYXlACitNaWtyb3B1aGUKKyAgfHRleHQgdG8gc3BlZWNoIGVuZ2luZUAKK1N3aWZ0CisgIHx0ZXh0IHRvIHNwZWVjaCBlbmdpbmVACitUaGV0YQorICB8dGV4dCB0byBzcGVlY2ggZW5naW5lQAorVmlhVm9pY2UKKyAgfHRleHQgdG8gc3BlZWNoIGVuZ2luZUAKZGlmZiAtLWdpdCBhL0RvY3VtZW50cy9NYW51YWwtQlJMVFRZL0ZyZW5jaC90ZXh0LXRhYmxlcy5zZ21sIGIvRG9jdW1lbnRzL01hbnVhbC1CUkxUVFkvRnJlbmNoL3RleHQtdGFibGVzLnNnbWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDYzMmNmOAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50cy9NYW51YWwtQlJMVFRZL0ZyZW5jaC90ZXh0LXRhYmxlcy5zZ21sCkBAIC0wLDAgKzEsOTAgQEAKK2F1dG98c+lsZWN0aW9uIGF1dG9tYXRpcXVlIGJhc+llIHN1ciBsYSBsb2NhbGVACithcnxBcmFiZSAoZ+lu6XJpcXVlKUAKK2FzfEFzc2FtZXNlQAorYXdhfEF3YWRoaUAKK2JnfEJ1bGdhcmVACitiaHxCaWhhcmlACitibnxCZW5nYWxpQAorYm98VGli6XRpbkAKK2JyYXxCcmFqQAorYnJmfEZvcm1hdCBwcup0LeAtZW1ib3NzZXJACit8KHBvdXIgdm9pciBkZXMgZmljaGllcnMgLmJyZiBkYW5zIHVuIOlkaXRldXIgb3UgdW4gcGFnZXIpQAorY3N8VGNo6HF1ZUAKK2N5fEdhbGxvaXNACitkYXxEYW5vaXNACitkYS0xMjUyfERhbm9pcyAoU3ZlbmQgVGhvdWdhYXJkLCAxOC0xMS0yMDAyKUAKK2RhLWx0fERhbm9pcyAoTG9nVGV4dClACitkZXxBbGxlbWFuZEAKK2RyYXxEcmF2aWRpYW5ACitlbHxHcmVjQAorZW58QW5nbGFpc0AKK2VuJmxvd2JhcjtDQXxBbmdsYWlzIChDYW5hZGEpQAorZW4mbG93YmFyO0dCfEFuZ2xhaXMgKFJveWF1bWUtVW5pKUAKK2VuJmxvd2JhcjtVU3xBbmdsYWlzICjJdGF0cy1VbmlzKUAKK2VuLW5hYmNjfEFuZ2xhaXMgKGNvZGUgaW5mb3JtYXRpcXVlIGJyYWlsbGUgbm9yZC1hbedyaWNhaW4pQAorZW98RXNwZXJhbnRvQAorZXN8RXNwYWdub2xACitldHxFc3RvbmllbkAKK2ZpfEZpbm5vaXNACitmcnxGcmFu52Fpc0AKK2ZyJmxvd2JhcjtDQXxGcmFu52FpcyAoQ2FuYWRhKUAKK2ZyJmxvd2JhcjtGUnxGcmFu52FpcyAoRnJhbmNlKUAKK2ZyLTIwMDd8RnJhbudhaXMgKHVuaWZp6SAyMDA3KUAKK2ZyLWNiaWZzfEZyYW7nYWlzIChDb2RlIEJyYWlsbGUgSW5mb3JtYXRpcXVlIEZyYW7Dp2FpcyBTdGFuZGFyZClACitmci12c3xGcmFu52FpcyAoVmlzaW9CcmFpbGxlKUAKK2dhfElybGFuZGFpc0AKK2dkfEdh6WxpcXVlQAorZ29ufEdvbmRpQAorZ3V8R3VqcmF0aUAKK2hlfEjpYnJldXhACitoaXxIaW5kaUAKK2hyfENyb2F0ZUAKK2h1fEhvbmdyb2lzQAoraHl8QXJt6W5pZW5ACitpc3xJc2xhbmRhaXNACitpdHxJdGFsaWVuQAora2hhfEtoYXNpQAora258S2FubmFkYUAKK2tva3xLb25rYW5pQAora3J1fEt1cnVraEAKK2x0fExpdHVhbmllbkAKK2x2fEzpdG9uQAorbWd8TWFsYWdhc3lACittaXxNYW9yaUAKK21sfE1hbGF5YWxhbUAKK21uaXxNYW5pcHVyaUAKK21yfE1hcmF0aGlACittdHxNYWx0YWlzc0AKK211bnxNdW5kYUAKK213cnxNYXJ3YXJpQAorbmV8TulwYWxhaXNACituZXd8TmV3YXJpQAorbmx8QXV0cmljaGllbkAKK25sJmxvd2JhcjtCRXxBdXRyaWNoaWVuIChCZWxnZSlACitubCZsb3diYXI7Tkx8QXV0cmljaGllbiAoUGF5cy1CYXMpQAorbm98Tm9ydulnaWVuQAorbm8tZ2VuZXJpY3xOb3J26WdpZW4gKGF2ZWMgbGUgc3VwcG9ydCBkZXMgYXV0cmVzIGxhbmd1ZXMpQAorbm8tb3VwfE5vcnbpZ2llbiAoT2ZmZW50bGlnIFV0dmFsZyBmb3IgcHVua3Rza3JpZnQpQAorbndjfE5ld2FyaSAoYW5jaWVuKUAKK29yfE9yaXlhQAorcGF8UGFuamFiaUAKK3BpfFBhbGlACitwbHxQb2xvbmFpc0AKK3B0fFBvcnR1Z3VhaXNACityb3xSb3VtYWluQAorcnV8UnVzc2VACitzYXxTYW5zY3JpdEAKK3NhdHxTYW50YWxpQAorc2R8U2luZGhpQAorc2V8U2FtaSAoZHUgTm9yZClACitza3xTbG92YXF1ZUAKK3NsfFNsb3bobmVACitzdnxTdelkb2lzQAorc3YtMTk4OXxTdelkb2lzIChzdGFuZGFyZCAxOTg5KUAKK3N2LTE5OTZ8U3XpZG9pcyAoc3RhbmRhcmQgMTk5NilACitzd3xTd2FoaWxpQAordGF8VGFtb3VsQAordGV8VGVsdWd1QAordHJ8VHVyY0AKK3VrfFVrcmFpbmllbkAKK3ZpfFZpZXRuYW1pZW5ACmRpZmYgLS1naXQgYS9Eb2N1bWVudHMvTWFudWFsLUJSTFRUWS9Qb3J0dWd1ZXNlL0JSTFRUWS5kb2MgYi9Eb2N1bWVudHMvTWFudWFsLUJSTFRUWS9Qb3J0dWd1ZXNlL0JSTFRUWS5kb2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzI4OTI4YgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50cy9NYW51YWwtQlJMVFRZL1BvcnR1Z3Vlc2UvQlJMVFRZLmRvYwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9Eb2N1bWVudHMvTWFudWFsLUJSTFRUWS9Qb3J0dWd1ZXNlL0JSTFRUWS5odG0gYi9Eb2N1bWVudHMvTWFudWFsLUJSTFRUWS9Qb3J0dWd1ZXNlL0JSTFRUWS5odG0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGE0OWEyNwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50cy9NYW51YWwtQlJMVFRZL1BvcnR1Z3Vlc2UvQlJMVFRZLmh0bQpAQCAtMCwwICsxLDE4MTk1IEBACis8aHRtbCB4bWxuczpvPSJ1cm46c2NoZW1hcy1taWNyb3NvZnQtY29tOm9mZmljZTpvZmZpY2UiDQoreG1sbnM6dz0idXJuOnNjaGVtYXMtbWljcm9zb2Z0LWNvbTpvZmZpY2U6d29yZCINCit4bWxuczpzdDE9InVybjpzY2hlbWFzLW1pY3Jvc29mdC1jb206b2ZmaWNlOnNtYXJ0dGFncyINCit4bWxucz0iaHR0cDovL3d3dy53My5vcmcvVFIvUkVDLWh0bWw0MCI+DQorDQorPGhlYWQ+DQorPG1ldGEgaHR0cC1lcXVpdj1Db250ZW50LVR5cGUgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXdpbmRvd3MtMTI1MiI+DQorPG1ldGEgbmFtZT1Qcm9nSWQgY29udGVudD1Xb3JkLkRvY3VtZW50Pg0KKzxtZXRhIG5hbWU9R2VuZXJhdG9yIGNvbnRlbnQ9Ik1pY3Jvc29mdCBXb3JkIDExIj4NCis8bWV0YSBuYW1lPU9yaWdpbmF0b3IgY29udGVudD0iTWljcm9zb2Z0IFdvcmQgMTEiPg0KKzxsaW5rIHJlbD1GaWxlLUxpc3QgaHJlZj0iQlJMVFRZJTIwUmVmZXJlbmNlJTIwTWFudWFsX2FycXVpdm9zL2ZpbGVsaXN0LnhtbCI+DQorPHRpdGxlPiAgQlJMVFRZIFJlZmVyZW5jZSBNYW51YWw8L3RpdGxlPg0KKzxvOlNtYXJ0VGFnVHlwZSBuYW1lc3BhY2V1cmk9InVybjpzY2hlbWFzLW1pY3Jvc29mdC1jb206b2ZmaWNlOnNtYXJ0dGFncyINCisgbmFtZT0iUGVyc29uTmFtZSIvPg0KKzxvOlNtYXJ0VGFnVHlwZSBuYW1lc3BhY2V1cmk9InVybjpzY2hlbWFzLW1pY3Jvc29mdC1jb206b2ZmaWNlOnNtYXJ0dGFncyINCisgbmFtZT0ibWV0cmljY29udmVydGVyIi8+DQorPCEtLVtpZiBndGUgbXNvIDldPjx4bWw+DQorIDxvOkRvY3VtZW50UHJvcGVydGllcz4NCisgIDxvOkF1dGhvcj5XaW48L286QXV0aG9yPg0KKyAgPG86TGFzdEF1dGhvcj5XaW48L286TGFzdEF1dGhvcj4NCisgIDxvOlJldmlzaW9uPjI8L286UmV2aXNpb24+DQorICA8bzpUb3RhbFRpbWU+MTI5NjwvbzpUb3RhbFRpbWU+DQorICA8bzpMYXN0UHJpbnRlZD4yMDExLTEyLTE0VDE2OjE0OjAwWjwvbzpMYXN0UHJpbnRlZD4NCisgIDxvOkNyZWF0ZWQ+MjAxMi0wMS0wNFQxNjo0NzowMFo8L286Q3JlYXRlZD4NCisgIDxvOkxhc3RTYXZlZD4yMDEyLTAxLTA0VDE2OjQ3OjAwWjwvbzpMYXN0U2F2ZWQ+DQorICA8bzpQYWdlcz4xPC9vOlBhZ2VzPg0KKyAgPG86V29yZHM+MzQ4MDE8L286V29yZHM+DQorICA8bzpDaGFyYWN0ZXJzPjE4NzkzMTwvbzpDaGFyYWN0ZXJzPg0KKyAgPG86Q29tcGFueT5QYXJ0aWN1bGFyPC9vOkNvbXBhbnk+DQorICA8bzpMaW5lcz4xNTY2PC9vOkxpbmVzPg0KKyAgPG86UGFyYWdyYXBocz40NDQ8L286UGFyYWdyYXBocz4NCisgIDxvOkNoYXJhY3RlcnNXaXRoU3BhY2VzPjIyMjI4ODwvbzpDaGFyYWN0ZXJzV2l0aFNwYWNlcz4NCisgIDxvOlZlcnNpb24+MTEuNTYwNjwvbzpWZXJzaW9uPg0KKyA8L286RG9jdW1lbnRQcm9wZXJ0aWVzPg0KKzwveG1sPjwhW2VuZGlmXS0tPjwhLS1baWYgZ3RlIG1zbyA5XT48eG1sPg0KKyA8dzpXb3JkRG9jdW1lbnQ+DQorICA8dzpIaWRlU3BlbGxpbmdFcnJvcnMvPg0KKyAgPHc6SHlwaGVuYXRpb25ab25lPjIxPC93Okh5cGhlbmF0aW9uWm9uZT4NCisgIDx3OlB1bmN0dWF0aW9uS2VybmluZy8+DQorICA8dzpWYWxpZGF0ZUFnYWluc3RTY2hlbWFzLz4NCisgIDx3OlNhdmVJZlhNTEludmFsaWQ+ZmFsc2U8L3c6U2F2ZUlmWE1MSW52YWxpZD4NCisgIDx3Oklnbm9yZU1peGVkQ29udGVudD5mYWxzZTwvdzpJZ25vcmVNaXhlZENvbnRlbnQ+DQorICA8dzpBbHdheXNTaG93UGxhY2Vob2xkZXJUZXh0PmZhbHNlPC93OkFsd2F5c1Nob3dQbGFjZWhvbGRlclRleHQ+DQorICA8dzpDb21wYXRpYmlsaXR5Pg0KKyAgIDx3OkJyZWFrV3JhcHBlZFRhYmxlcy8+DQorICAgPHc6U25hcFRvR3JpZEluQ2VsbC8+DQorICAgPHc6V3JhcFRleHRXaXRoUHVuY3QvPg0KKyAgIDx3OlVzZUFzaWFuQnJlYWtSdWxlcy8+DQorICAgPHc6RG9udEdyb3dBdXRvZml0Lz4NCisgIDwvdzpDb21wYXRpYmlsaXR5Pg0KKyAgPHc6QnJvd3NlckxldmVsPk1pY3Jvc29mdEludGVybmV0RXhwbG9yZXI0PC93OkJyb3dzZXJMZXZlbD4NCisgPC93OldvcmREb2N1bWVudD4NCis8L3htbD48IVtlbmRpZl0tLT48IS0tW2lmIGd0ZSBtc28gOV0+PHhtbD4NCisgPHc6TGF0ZW50U3R5bGVzIERlZkxvY2tlZFN0YXRlPSJmYWxzZSIgTGF0ZW50U3R5bGVDb3VudD0iMTU2Ij4NCisgPC93OkxhdGVudFN0eWxlcz4NCis8L3htbD48IVtlbmRpZl0tLT48IS0tW2lmICFtc29dPjxvYmplY3QNCisgY2xhc3NpZD0iY2xzaWQ6Mzg0ODE4MDctQ0EwRS00MkQyLUJGMzktQjMzQUYxMzVDQzREIiBpZD1pZW9vdWk+PC9vYmplY3Q+DQorPHN0eWxlPg0KK3N0MVw6KntiZWhhdmlvcjp1cmwoI2llb291aSkgfQ0KKzwvc3R5bGU+DQorPCFbZW5kaWZdLS0+DQorPHN0eWxlPg0KKzwhLS0NCisgLyogRm9udCBEZWZpbml0aW9ucyAqLw0KKyBAZm9udC1mYWNlDQorCXtmb250LWZhbWlseTpIZWx2ZXRpY2E7DQorCXBhbm9zZS0xOjIgMTEgNiA0IDIgMiAyIDIgMiA0Ow0KKwltc28tZm9udC1jaGFyc2V0OjA7DQorCW1zby1nZW5lcmljLWZvbnQtZmFtaWx5OnN3aXNzOw0KKwltc28tZm9udC1mb3JtYXQ6b3RoZXI7DQorCW1zby1mb250LXBpdGNoOnZhcmlhYmxlOw0KKwltc28tZm9udC1zaWduYXR1cmU6MyAwIDAgMCAxIDA7fQ0KK0Bmb250LWZhY2UNCisJe2ZvbnQtZmFtaWx5OkNvdXJpZXI7DQorCXBhbm9zZS0xOjIgNyA0IDkgMiAyIDUgMiA0IDQ7DQorCW1zby1mb250LWNoYXJzZXQ6MDsNCisJbXNvLWdlbmVyaWMtZm9udC1mYW1pbHk6bW9kZXJuOw0KKwltc28tZm9udC1mb3JtYXQ6b3RoZXI7DQorCW1zby1mb250LXBpdGNoOmZpeGVkOw0KKwltc28tZm9udC1zaWduYXR1cmU6MyAwIDAgMCAxIDA7fQ0KK0Bmb250LWZhY2UNCisJe2ZvbnQtZmFtaWx5OiJUbXMgUm1uIjsNCisJcGFub3NlLTE6MiAyIDYgMyA0IDUgNSAyIDMgNDsNCisJbXNvLWZvbnQtY2hhcnNldDowOw0KKwltc28tZ2VuZXJpYy1mb250LWZhbWlseTpyb21hbjsNCisJbXNvLWZvbnQtZm9ybWF0Om90aGVyOw0KKwltc28tZm9udC1waXRjaDp2YXJpYWJsZTsNCisJbXNvLWZvbnQtc2lnbmF0dXJlOjMgMCAwIDAgMSAwO30NCitAZm9udC1mYWNlDQorCXtmb250LWZhbWlseTpIZWx2Ow0KKwlwYW5vc2UtMToyIDExIDYgNCAyIDIgMiAzIDIgNDsNCisJbXNvLWZvbnQtY2hhcnNldDowOw0KKwltc28tZ2VuZXJpYy1mb250LWZhbWlseTpzd2lzczsNCisJbXNvLWZvbnQtZm9ybWF0Om90aGVyOw0KKwltc28tZm9udC1waXRjaDp2YXJpYWJsZTsNCisJbXNvLWZvbnQtc2lnbmF0dXJlOjMgMCAwIDAgMSAwO30NCitAZm9udC1mYWNlDQorCXtmb250LWZhbWlseToiTmV3IFlvcmsiOw0KKwlwYW5vc2UtMToyIDQgNSAzIDYgNSA2IDIgMyA0Ow0KKwltc28tZm9udC1jaGFyc2V0OjA7DQorCW1zby1nZW5lcmljLWZvbnQtZmFtaWx5OnJvbWFuOw0KKwltc28tZm9udC1mb3JtYXQ6b3RoZXI7DQorCW1zby1mb250LXBpdGNoOnZhcmlhYmxlOw0KKwltc28tZm9udC1zaWduYXR1cmU6MyAwIDAgMCAxIDA7fQ0KK0Bmb250LWZhY2UNCisJe2ZvbnQtZmFtaWx5OlN5c3RlbTsNCisJcGFub3NlLTE6MCAwIDAgMCAwIDAgMCAwIDAgMDsNCisJbXNvLWZvbnQtY2hhcnNldDowOw0KKwltc28tZ2VuZXJpYy1mb250LWZhbWlseTpzd2lzczsNCisJbXNvLWZvbnQtZm9ybWF0Om90aGVyOw0KKwltc28tZm9udC1waXRjaDp2YXJpYWJsZTsNCisJbXNvLWZvbnQtc2lnbmF0dXJlOjMgMCAwIDAgMSAwO30NCitAZm9udC1mYWNlDQorCXtmb250LWZhbWlseTpXaW5nZGluZ3M7DQorCXBhbm9zZS0xOjUgMCAwIDAgMCAwIDAgMCAwIDA7DQorCW1zby1mb250LWNoYXJzZXQ6MjsNCisJbXNvLWdlbmVyaWMtZm9udC1mYW1pbHk6YXV0bzsNCisJbXNvLWZvbnQtcGl0Y2g6dmFyaWFibGU7DQorCW1zby1mb250LXNpZ25hdHVyZTowIDI2ODQzNTQ1NiAwIDAgLTIxNDc0ODM2NDggMDt9DQorQGZvbnQtZmFjZQ0KKwl7Zm9udC1mYW1pbHk6Ik1TIE1pbmNobyI7DQorCXBhbm9zZS0xOjIgMiA2IDkgNCAyIDUgOCAzIDQ7DQorCW1zby1mb250LWFsdDoiXEZGMkRcRkYzMyBcNjYwRVw2NzFEIjsNCisJbXNvLWZvbnQtY2hhcnNldDoxMjg7DQorCW1zby1nZW5lcmljLWZvbnQtZmFtaWx5OnJvbWFuOw0KKwltc28tZm9udC1mb3JtYXQ6b3RoZXI7DQorCW1zby1mb250LXBpdGNoOmZpeGVkOw0KKwltc28tZm9udC1zaWduYXR1cmU6MSAxMzQ2NzY0ODAgMTYgMCAxMzEwNzIgMDt9DQorQGZvbnQtZmFjZQ0KKwl7Zm9udC1mYW1pbHk6QmF0YW5nOw0KKwlwYW5vc2UtMToyIDMgNiAwIDAgMSAxIDEgMSAxOw0KKwltc28tZm9udC1hbHQ6XEJDMTRcRDBENTsNCisJbXNvLWZvbnQtY2hhcnNldDoxMjk7DQorCW1zby1nZW5lcmljLWZvbnQtZmFtaWx5OmF1dG87DQorCW1zby1mb250LWZvcm1hdDpvdGhlcjsNCisJbXNvLWZvbnQtcGl0Y2g6Zml4ZWQ7DQorCW1zby1mb250LXNpZ25hdHVyZToxIDE1MTM4ODE2MCAxNiAwIDUyNDI4OCAwO30NCitAZm9udC1mYWNlDQorCXtmb250LWZhbWlseTpTaW1TdW47DQorCXBhbm9zZS0xOjIgMSA2IDAgMyAxIDEgMSAxIDE7DQorCW1zby1mb250LWFsdDpcNUI4Qlw0RjUzOw0KKwltc28tZm9udC1jaGFyc2V0OjEzNDsNCisJbXNvLWdlbmVyaWMtZm9udC1mYW1pbHk6YXV0bzsNCisJbXNvLWZvbnQtZm9ybWF0Om90aGVyOw0KKwltc28tZm9udC1waXRjaDp2YXJpYWJsZTsNCisJbXNvLWZvbnQtc2lnbmF0dXJlOjEgMTM1MTM1MjMyIDE2IDAgMjYyMTQ0IDA7fQ0KK0Bmb250LWZhY2UNCisJe2ZvbnQtZmFtaWx5OlBNaW5nTGlVOw0KKwlwYW5vc2UtMToyIDEgNiAxIDAgMSAxIDEgMSAxOw0KKwltc28tZm9udC1hbHQ6XDY1QjBcN0QzMFw2NjBFXDlBRDQ7DQorCW1zby1mb250LWNoYXJzZXQ6MTM2Ow0KKwltc28tZ2VuZXJpYy1mb250LWZhbWlseTphdXRvOw0KKwltc28tZm9udC1mb3JtYXQ6b3RoZXI7DQorCW1zby1mb250LXBpdGNoOnZhcmlhYmxlOw0KKwltc28tZm9udC1zaWduYXR1cmU6MSAxMzQ3NDIwMTYgMTYgMCAxMDQ4NTc2IDA7fQ0KK0Bmb250LWZhY2UNCisJe2ZvbnQtZmFtaWx5OiJNUyBHb3RoaWMiOw0KKwlwYW5vc2UtMToyIDExIDYgOSA3IDIgNSA4IDIgNDsNCisJbXNvLWZvbnQtYWx0OiJcRkYyRFxGRjMzIFwzMEI0XDMwQjdcMzBDM1wzMEFGIjsNCisJbXNvLWZvbnQtY2hhcnNldDoxMjg7DQorCW1zby1nZW5lcmljLWZvbnQtZmFtaWx5Om1vZGVybjsNCisJbXNvLWZvbnQtZm9ybWF0Om90aGVyOw0KKwltc28tZm9udC1waXRjaDpmaXhlZDsNCisJbXNvLWZvbnQtc2lnbmF0dXJlOjEgMTM0Njc2NDgwIDE2IDAgMTMxMDcyIDA7fQ0KK0Bmb250LWZhY2UNCisJe2ZvbnQtZmFtaWx5OkRvdHVtOw0KKwlwYW5vc2UtMToyIDExIDYgMCAwIDEgMSAxIDEgMTsNCisJbXNvLWZvbnQtYWx0OlxCM0NCXEM2QzA7DQorCW1zby1mb250LWNoYXJzZXQ6MTI5Ow0KKwltc28tZ2VuZXJpYy1mb250LWZhbWlseTptb2Rlcm47DQorCW1zby1mb250LWZvcm1hdDpvdGhlcjsNCisJbXNvLWZvbnQtcGl0Y2g6Zml4ZWQ7DQorCW1zby1mb250LXNpZ25hdHVyZToxIDE1MTM4ODE2MCAxNiAwIDUyNDI4OCAwO30NCitAZm9udC1mYWNlDQorCXtmb250LWZhbWlseTpTaW1IZWk7DQorCXBhbm9zZS0xOjIgMSA2IDAgMyAxIDEgMSAxIDE7DQorCW1zby1mb250LWFsdDpcOUVEMVw0RjUzOw0KKwltc28tZm9udC1jaGFyc2V0OjEzNDsNCisJbXNvLWdlbmVyaWMtZm9udC1mYW1pbHk6bW9kZXJuOw0KKwltc28tZm9udC1mb3JtYXQ6b3RoZXI7DQorCW1zby1mb250LXBpdGNoOmZpeGVkOw0KKwltc28tZm9udC1zaWduYXR1cmU6MSAxMzUxMzUyMzIgMTYgMCAyNjIxNDQgMDt9DQorQGZvbnQtZmFjZQ0KKwl7Zm9udC1mYW1pbHk6TWluZ0xpVTsNCisJcGFub3NlLTE6MiAxIDYgOSAwIDEgMSAxIDEgMTsNCisJbXNvLWZvbnQtYWx0Olw3RDMwXDY2MEVcOUFENDsNCisJbXNvLWZvbnQtY2hhcnNldDoxMzY7DQorCW1zby1nZW5lcmljLWZvbnQtZmFtaWx5Om1vZGVybjsNCisJbXNvLWZvbnQtZm9ybWF0Om90aGVyOw0KKwltc28tZm9udC1waXRjaDpmaXhlZDsNCisJbXNvLWZvbnQtc2lnbmF0dXJlOjEgMTM0NzQyMDE2IDE2IDAgMTA0ODU3NiAwO30NCitAZm9udC1mYWNlDQorCXtmb250LWZhbWlseTpNaW5jaG87DQorCXBhbm9zZS0xOjIgMiA2IDkgNCAzIDUgOCAzIDU7DQorCW1zby1mb250LWFsdDpcNjYwRVw2NzFEOw0KKwltc28tZm9udC1jaGFyc2V0OjEyODsNCisJbXNvLWdlbmVyaWMtZm9udC1mYW1pbHk6cm9tYW47DQorCW1zby1mb250LWZvcm1hdDpvdGhlcjsNCisJbXNvLWZvbnQtcGl0Y2g6Zml4ZWQ7DQorCW1zby1mb250LXNpZ25hdHVyZToxIDEzNDY3NjQ4MCAxNiAwIDEzMTA3MiAwO30NCitAZm9udC1mYWNlDQorCXtmb250LWZhbWlseTpHdWxpbTsNCisJcGFub3NlLTE6MiAxMSA2IDAgMCAxIDEgMSAxIDE7DQorCW1zby1mb250LWFsdDpcQUQ3NFxCOUJDOw0KKwltc28tZm9udC1jaGFyc2V0OjEyOTsNCisJbXNvLWdlbmVyaWMtZm9udC1mYW1pbHk6cm9tYW47DQorCW1zby1mb250LWZvcm1hdDpvdGhlcjsNCisJbXNvLWZvbnQtcGl0Y2g6Zml4ZWQ7DQorCW1zby1mb250LXNpZ25hdHVyZToxIDE1MTM4ODE2MCAxNiAwIDUyNDI4OCAwO30NCitAZm9udC1mYWNlDQorCXtmb250LWZhbWlseTpDZW50dXJ5Ow0KKwlwYW5vc2UtMToyIDQgNiA0IDUgNSA1IDIgMyA0Ow0KKwltc28tZm9udC1jaGFyc2V0OjA7DQorCW1zby1nZW5lcmljLWZvbnQtZmFtaWx5OnJvbWFuOw0KKwltc28tZm9udC1mb3JtYXQ6b3RoZXI7DQorCW1zby1mb250LXBpdGNoOnZhcmlhYmxlOw0KKwltc28tZm9udC1zaWduYXR1cmU6MyAwIDAgMCAxIDA7fQ0KK0Bmb250LWZhY2UNCisJe2ZvbnQtZmFtaWx5OiJBbmdzYW5hIE5ldyI7DQorCXBhbm9zZS0xOjIgMiA2IDMgNSA0IDUgMiAzIDQ7DQorCW1zby1mb250LWNoYXJzZXQ6MjIyOw0KKwltc28tZ2VuZXJpYy1mb250LWZhbWlseTpyb21hbjsNCisJbXNvLWZvbnQtZm9ybWF0Om90aGVyOw0KKwltc28tZm9udC1waXRjaDp2YXJpYWJsZTsNCisJbXNvLWZvbnQtc2lnbmF0dXJlOjE2Nzc3MjE3IDAgMCAwIDY1NTM2IDA7fQ0KK0Bmb250LWZhY2UNCisJe2ZvbnQtZmFtaWx5OiJDb3JkaWEgTmV3IjsNCisJcGFub3NlLTE6MiAxMSAzIDQgMiAyIDIgMiAyIDQ7DQorCW1zby1mb250LWNoYXJzZXQ6MjIyOw0KKwltc28tZ2VuZXJpYy1mb250LWZhbWlseTpyb21hbjsNCisJbXNvLWZvbnQtZm9ybWF0Om90aGVyOw0KKwltc28tZm9udC1waXRjaDp2YXJpYWJsZTsNCisJbXNvLWZvbnQtc2lnbmF0dXJlOjE2Nzc3MjE3IDAgMCAwIDY1NTM2IDA7fQ0KK0Bmb250LWZhY2UNCisJe2ZvbnQtZmFtaWx5Ok1hbmdhbDsNCisJcGFub3NlLTE6MCAwIDQgMCAwIDAgMCAwIDAgMDsNCisJbXNvLWZvbnQtY2hhcnNldDoxOw0KKwltc28tZ2VuZXJpYy1mb250LWZhbWlseTpyb21hbjsNCisJbXNvLWZvbnQtZm9ybWF0Om90aGVyOw0KKwltc28tZm9udC1waXRjaDp2YXJpYWJsZTsNCisJbXNvLWZvbnQtc2lnbmF0dXJlOjMyNzY4IDAgMCAwIDAgMDt9DQorQGZvbnQtZmFjZQ0KKwl7Zm9udC1mYW1pbHk6TGF0aGE7DQorCXBhbm9zZS0xOjIgMCA0IDAgMCAwIDAgMCAwIDA7DQorCW1zby1mb250LWNoYXJzZXQ6MTsNCisJbXNvLWdlbmVyaWMtZm9udC1mYW1pbHk6cm9tYW47DQorCW1zby1mb250LWZvcm1hdDpvdGhlcjsNCisJbXNvLWZvbnQtcGl0Y2g6dmFyaWFibGU7DQorCW1zby1mb250LXNpZ25hdHVyZToxMDQ4NTc2IDAgMCAwIDAgMDt9DQorQGZvbnQtZmFjZQ0KKwl7Zm9udC1mYW1pbHk6U3lsZmFlbjsNCisJcGFub3NlLTE6MSAxMCA1IDIgNSAzIDYgMyAzIDM7DQorCW1zby1mb250LWNoYXJzZXQ6MDsNCisJbXNvLWdlbmVyaWMtZm9udC1mYW1pbHk6cm9tYW47DQorCW1zby1mb250LWZvcm1hdDpvdGhlcjsNCisJbXNvLWZvbnQtcGl0Y2g6dmFyaWFibGU7DQorCW1zby1mb250LXNpZ25hdHVyZToxNjc3ODg4MyAwIDUxMiAwIDEzIDA7fQ0KK0Bmb250LWZhY2UNCisJe2ZvbnQtZmFtaWx5OlZyaW5kYTsNCisJcGFub3NlLTE6MCAwIDQgMCAwIDAgMCAwIDAgMDsNCisJbXNvLWZvbnQtY2hhcnNldDoxOw0KKwltc28tZ2VuZXJpYy1mb250LWZhbWlseTpyb21hbjsNCisJbXNvLWZvbnQtZm9ybWF0Om90aGVyOw0KKwltc28tZm9udC1waXRjaDp2YXJpYWJsZTsNCisJbXNvLWZvbnQtc2lnbmF0dXJlOjAgMCAwIDAgMCAwO30NCitAZm9udC1mYWNlDQorCXtmb250LWZhbWlseTpSYWF2aTsNCisJcGFub3NlLTE6MiAwIDUgMCAwIDAgMCAwIDAgMDsNCisJbXNvLWZvbnQtY2hhcnNldDoxOw0KKwltc28tZ2VuZXJpYy1mb250LWZhbWlseTpyb21hbjsNCisJbXNvLWZvbnQtZm9ybWF0Om90aGVyOw0KKwltc28tZm9udC1waXRjaDp2YXJpYWJsZTsNCisJbXNvLWZvbnQtc2lnbmF0dXJlOjAgMCAwIDAgMCAwO30NCitAZm9udC1mYWNlDQorCXtmb250LWZhbWlseTpTaHJ1dGk7DQorCXBhbm9zZS0xOjIgMCA1IDAgMCAwIDAgMCAwIDA7DQorCW1zby1mb250LWNoYXJzZXQ6MTsNCisJbXNvLWdlbmVyaWMtZm9udC1mYW1pbHk6cm9tYW47DQorCW1zby1mb250LWZvcm1hdDpvdGhlcjsNCisJbXNvLWZvbnQtcGl0Y2g6dmFyaWFibGU7DQorCW1zby1mb250LXNpZ25hdHVyZTowIDAgMCAwIDAgMDt9DQorQGZvbnQtZmFjZQ0KKwl7Zm9udC1mYW1pbHk6U2VuZG55YTsNCisJcGFub3NlLTE6MCAwIDQgMCAwIDAgMCAwIDAgMDsNCisJbXNvLWZvbnQtY2hhcnNldDoxOw0KKwltc28tZ2VuZXJpYy1mb250LWZhbWlseTpyb21hbjsNCisJbXNvLWZvbnQtZm9ybWF0Om90aGVyOw0KKwltc28tZm9udC1waXRjaDp2YXJpYWJsZTsNCisJbXNvLWZvbnQtc2lnbmF0dXJlOjAgMCAwIDAgMCAwO30NCitAZm9udC1mYWNlDQorCXtmb250LWZhbWlseTpHYXV0YW1pOw0KKwlwYW5vc2UtMToyIDAgNSAwIDAgMCAwIDAgMCAwOw0KKwltc28tZm9udC1jaGFyc2V0OjE7DQorCW1zby1nZW5lcmljLWZvbnQtZmFtaWx5OnJvbWFuOw0KKwltc28tZm9udC1mb3JtYXQ6b3RoZXI7DQorCW1zby1mb250LXBpdGNoOnZhcmlhYmxlOw0KKwltc28tZm9udC1zaWduYXR1cmU6MCAwIDAgMCAwIDA7fQ0KK0Bmb250LWZhY2UNCisJe2ZvbnQtZmFtaWx5OlR1bmdhOw0KKwlwYW5vc2UtMTowIDAgNCAwIDAgMCAwIDAgMCAwOw0KKwltc28tZm9udC1jaGFyc2V0OjE7DQorCW1zby1nZW5lcmljLWZvbnQtZmFtaWx5OnJvbWFuOw0KKwltc28tZm9udC1mb3JtYXQ6b3RoZXI7DQorCW1zby1mb250LXBpdGNoOnZhcmlhYmxlOw0KKwltc28tZm9udC1zaWduYXR1cmU6MCAwIDAgMCAwIDA7fQ0KK0Bmb250LWZhY2UNCisJe2ZvbnQtZmFtaWx5OiJFc3RyYW5nZWxvIEVkZXNzYSI7DQorCXBhbm9zZS0xOjAgMCAwIDAgMCAwIDAgMCAwIDA7DQorCW1zby1mb250LWNoYXJzZXQ6MTsNCisJbXNvLWdlbmVyaWMtZm9udC1mYW1pbHk6cm9tYW47DQorCW1zby1mb250LWZvcm1hdDpvdGhlcjsNCisJbXNvLWZvbnQtcGl0Y2g6dmFyaWFibGU7DQorCW1zby1mb250LXNpZ25hdHVyZTowIDAgMCAwIDAgMDt9DQorQGZvbnQtZmFjZQ0KKwl7Zm9udC1mYW1pbHk6IkFyaWFsIFVuaWNvZGUgTVMiOw0KKwlwYW5vc2UtMToyIDExIDYgNCAyIDIgMiAyIDIgNDsNCisJbXNvLWZvbnQtY2hhcnNldDowOw0KKwltc28tZ2VuZXJpYy1mb250LWZhbWlseTpyb21hbjsNCisJbXNvLWZvbnQtZm9ybWF0Om90aGVyOw0KKwltc28tZm9udC1waXRjaDp2YXJpYWJsZTsNCisJbXNvLWZvbnQtc2lnbmF0dXJlOjMgMCAwIDAgMSAwO30NCitAZm9udC1mYWNlDQorCXtmb250LWZhbWlseTpUYWhvbWE7DQorCXBhbm9zZS0xOjIgMTEgNiA0IDMgNSA0IDQgMiA0Ow0KKwltc28tZm9udC1jaGFyc2V0OjA7DQorCW1zby1nZW5lcmljLWZvbnQtZmFtaWx5OnN3aXNzOw0KKwltc28tZm9udC1mb3JtYXQ6b3RoZXI7DQorCW1zby1mb250LXBpdGNoOnZhcmlhYmxlOw0KKwltc28tZm9udC1zaWduYXR1cmU6MyAwIDAgMCAxIDA7fQ0KK0Bmb250LWZhY2UNCisJe2ZvbnQtZmFtaWx5OlRpbWVzOw0KKwlwYW5vc2UtMToyIDIgNiAzIDUgNCA1IDIgMyA0Ow0KKwltc28tZm9udC1jaGFyc2V0OjA7DQorCW1zby1nZW5lcmljLWZvbnQtZmFtaWx5OnJvbWFuOw0KKwltc28tZm9udC1waXRjaDp2YXJpYWJsZTsNCisJbXNvLWZvbnQtc2lnbmF0dXJlOjUzNjkwMjI3OSAtMjE0NzQ4MzY0OCA4IDAgNTExIDA7fQ0KK0Bmb250LWZhY2UNCisJe2ZvbnQtZmFtaWx5OkNhbWJyaWE7DQorCXBhbm9zZS0xOjIgNCA1IDMgNSA0IDYgMyAyIDQ7DQorCW1zby1mb250LWNoYXJzZXQ6MDsNCisJbXNvLWdlbmVyaWMtZm9udC1mYW1pbHk6cm9tYW47DQorCW1zby1mb250LXBpdGNoOnZhcmlhYmxlOw0KKwltc28tZm9udC1zaWduYXR1cmU6LTE2MTA2MTE5ODUgMTA3Mzc0MTg5OSAwIDAgMTU5IDA7fQ0KKyAvKiBTdHlsZSBEZWZpbml0aW9ucyAqLw0KKyBwLk1zb05vcm1hbCwgbGkuTXNvTm9ybWFsLCBkaXYuTXNvTm9ybWFsDQorCXttc28tc3R5bGUtcGFyZW50OiIiOw0KKwltYXJnaW46MGNtOw0KKwltYXJnaW4tYm90dG9tOi4wMDAxcHQ7DQorCW1zby1wYWdpbmF0aW9uOndpZG93LW9ycGhhbjsNCisJZm9udC1zaXplOjEyLjBwdDsNCisJZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7DQorCW1zby1mYXJlYXN0LWZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iO30NCitoMQ0KKwl7bXNvLXN0eWxlLWxpbms6IiBDaGFyIENoYXIxIjsNCisJbWFyZ2luOjBjbTsNCisJbWFyZ2luLWJvdHRvbTouMDAwMXB0Ow0KKwltc28tcGFyYS1tYXJnaW4tdG9wOi4wMWdkOw0KKwltc28tcGFyYS1tYXJnaW4tcmlnaHQ6MGNtOw0KKwltc28tcGFyYS1tYXJnaW4tYm90dG9tOi4wMWdkOw0KKwltc28tcGFyYS1tYXJnaW4tbGVmdDowY207DQorCW1zby1wYXJhLW1hcmdpbi1ib3R0b206LjAwMDFwdDsNCisJbXNvLXBhZ2luYXRpb246d2lkb3ctb3JwaGFuOw0KKwltc28tb3V0bGluZS1sZXZlbDoxOw0KKwlmb250LXNpemU6MjQuMHB0Ow0KKwltc28tYmlkaS1mb250LXNpemU6MTAuMHB0Ow0KKwlmb250LWZhbWlseTpUaW1lczsNCisJbXNvLWZhcmVhc3QtZm9udC1mYW1pbHk6Q2FtYnJpYTsNCisJbXNvLWJpZGktZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7DQorCW1zby1mYXJlYXN0LWxhbmd1YWdlOkVOLVVTOw0KKwlmb250LXdlaWdodDpib2xkOw0KKwltc28tYmlkaS1mb250LXdlaWdodDpub3JtYWw7fQ0KK2E6bGluaywgc3Bhbi5Nc29IeXBlcmxpbmsNCisJe2NvbG9yOmJsdWU7DQorCXRleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmU7DQorCXRleHQtdW5kZXJsaW5lOnNpbmdsZTt9DQorYTp2aXNpdGVkLCBzcGFuLk1zb0h5cGVybGlua0ZvbGxvd2VkDQorCXtjb2xvcjpwdXJwbGU7DQorCXRleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmU7DQorCXRleHQtdW5kZXJsaW5lOnNpbmdsZTt9DQorcC5Nc29QbGFpblRleHQsIGxpLk1zb1BsYWluVGV4dCwgZGl2Lk1zb1BsYWluVGV4dA0KKwl7bWFyZ2luOjBjbTsNCisJbWFyZ2luLWJvdHRvbTouMDAwMXB0Ow0KKwltc28tcGFnaW5hdGlvbjp3aWRvdy1vcnBoYW47DQorCWZvbnQtc2l6ZToxMC4wcHQ7DQorCWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyI7DQorCW1zby1mYXJlYXN0LWZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iO30NCitwDQorCXttc28tbWFyZ2luLXRvcC1hbHQ6YXV0bzsNCisJbWFyZ2luLXJpZ2h0OjBjbTsNCisJbXNvLW1hcmdpbi1ib3R0b20tYWx0OmF1dG87DQorCW1hcmdpbi1sZWZ0OjBjbTsNCisJbXNvLXBhZ2luYXRpb246d2lkb3ctb3JwaGFuOw0KKwlmb250LXNpemU6MTIuMHB0Ow0KKwlmb250LWZhbWlseToiVGltZXMgTmV3IFJvbWFuIjsNCisJbXNvLWZhcmVhc3QtZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7fQ0KK3NwYW4uc2hvcnR0ZXh0DQorCXttc28tc3R5bGUtbmFtZTpzaG9ydF90ZXh0O30NCitzcGFuLmhwcw0KKwl7bXNvLXN0eWxlLW5hbWU6aHBzO30NCitzcGFuLmhwc2F0bg0KKwl7bXNvLXN0eWxlLW5hbWU6ImhwcyBhdG4iO30NCitzcGFuLkNoYXJDaGFyMQ0KKwl7bXNvLXN0eWxlLW5hbWU6IiBDaGFyIENoYXIxIjsNCisJbXNvLXN0eWxlLWxvY2tlZDp5ZXM7DQorCW1zby1zdHlsZS1saW5rOiJU7XR1bG8gMSI7DQorCW1zby1hbnNpLWZvbnQtc2l6ZToyNC4wcHQ7DQorCWZvbnQtZmFtaWx5OlRpbWVzOw0KKwltc28tYXNjaWktZm9udC1mYW1pbHk6VGltZXM7DQorCW1zby1mYXJlYXN0LWZvbnQtZmFtaWx5OkNhbWJyaWE7DQorCW1zby1oYW5zaS1mb250LWZhbWlseTpUaW1lczsNCisJbXNvLWZvbnQta2VybmluZzoxOC4wcHQ7DQorCW1zby1hbnNpLWxhbmd1YWdlOlBULUJSOw0KKwltc28tZmFyZWFzdC1sYW5ndWFnZTpFTi1VUzsNCisJbXNvLWJpZGktbGFuZ3VhZ2U6QVItU0E7DQorCWZvbnQtd2VpZ2h0OmJvbGQ7DQorCW1zby1iaWRpLWZvbnQtd2VpZ2h0Om5vcm1hbDt9DQoraW5zDQorCXttc28tc3R5bGUtdHlwZTpleHBvcnQtb25seTsNCisJdGV4dC1kZWNvcmF0aW9uOm5vbmU7fQ0KK3NwYW4ubXNvSW5zDQorCXttc28tc3R5bGUtdHlwZTpleHBvcnQtb25seTsNCisJbXNvLXN0eWxlLW5hbWU6IiI7DQorCXRleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmU7DQorCXRleHQtdW5kZXJsaW5lOnNpbmdsZTt9DQorc3Bhbi5tc29EZWwNCisJe21zby1zdHlsZS10eXBlOmV4cG9ydC1vbmx5Ow0KKwltc28tc3R5bGUtbmFtZToiIjsNCisJdGV4dC1kZWNvcmF0aW9uOmxpbmUtdGhyb3VnaDsNCisJY29sb3I6cmVkO30NCitAcGFnZSBTZWN0aW9uMQ0KKwl7c2l6ZTo1OTUuM3B0IDg0MS45cHQ7DQorCW1hcmdpbjo3MC44NXB0IDU3LjZwdCA3MC44NXB0IDU3LjZwdDsNCisJbXNvLWhlYWRlci1tYXJnaW46MzUuNHB0Ow0KKwltc28tZm9vdGVyLW1hcmdpbjozNS40cHQ7DQorCW1zby1wYXBlci1zb3VyY2U6MDt9DQorZGl2LlNlY3Rpb24xDQorCXtwYWdlOlNlY3Rpb24xO30NCisgLyogTGlzdCBEZWZpbml0aW9ucyAqLw0KKyBAbGlzdCBsMA0KKwl7bXNvLWxpc3QtaWQ6MjEyNDY5MTk5Ow0KKwltc28tbGlzdC10eXBlOmh5YnJpZDsNCisJbXNvLWxpc3QtdGVtcGxhdGUtaWRzOjEyOTM5NjQxMTAgNjg1NTA2NjEgNjg1NTA2NTkgNjg1NTA2NjEgNjg1NTA2NTcgNjg1NTA2NTkgNjg1NTA2NjEgNjg1NTA2NTcgNjg1NTA2NTkgNjg1NTA2NjE7fQ0KK0BsaXN0IGwwOmxldmVsMQ0KKwl7bXNvLWxldmVsLW51bWJlci1mb3JtYXQ6YnVsbGV0Ow0KKwltc28tbGV2ZWwtdGV4dDpcRjBBNzsNCisJbXNvLWxldmVsLXRhYi1zdG9wOjM2LjBwdDsNCisJbXNvLWxldmVsLW51bWJlci1wb3NpdGlvbjpsZWZ0Ow0KKwl0ZXh0LWluZGVudDotMTguMHB0Ow0KKwlmb250LWZhbWlseTpXaW5nZGluZ3M7fQ0KK0BsaXN0IGwxDQorCXttc28tbGlzdC1pZDozNDk4NDEzMjM7DQorCW1zby1saXN0LXR5cGU6aHlicmlkOw0KKwltc28tbGlzdC10ZW1wbGF0ZS1pZHM6Mjc2MzE1MTA4IDY4NTUwNjYxIDY4NTUwNjU5IDY4NTUwNjYxIDY4NTUwNjU3IDY4NTUwNjU5IDY4NTUwNjYxIDY4NTUwNjU3IDY4NTUwNjU5IDY4NTUwNjYxO30NCitAbGlzdCBsMTpsZXZlbDENCisJe21zby1sZXZlbC1udW1iZXItZm9ybWF0OmJ1bGxldDsNCisJbXNvLWxldmVsLXRleHQ6XEYwQTc7DQorCW1zby1sZXZlbC10YWItc3RvcDozNi4wcHQ7DQorCW1zby1sZXZlbC1udW1iZXItcG9zaXRpb246bGVmdDsNCisJdGV4dC1pbmRlbnQ6LTE4LjBwdDsNCisJZm9udC1mYW1pbHk6V2luZ2RpbmdzO30NCitAbGlzdCBsMg0KKwl7bXNvLWxpc3QtaWQ6NTEzMzc1NjcyOw0KKwltc28tbGlzdC10eXBlOmh5YnJpZDsNCisJbXNvLWxpc3QtdGVtcGxhdGUtaWRzOjcwMjA1OTgxMCAtODkzMTk1MDY2IDY4NTUwNjgxIDY4NTUwNjgzIDY4NTUwNjcxIDY4NTUwNjgxIDY4NTUwNjgzIDY4NTUwNjcxIDY4NTUwNjgxIDY4NTUwNjgzO30NCitAbGlzdCBsMjpsZXZlbDENCisJe21zby1sZXZlbC10YWItc3RvcDo0Ni41cHQ7DQorCW1zby1sZXZlbC1udW1iZXItcG9zaXRpb246bGVmdDsNCisJbWFyZ2luLWxlZnQ6NDYuNXB0Ow0KKwl0ZXh0LWluZGVudDotMTkuNXB0O30NCitAbGlzdCBsMw0KKwl7bXNvLWxpc3QtaWQ6NjQzODQ4MDUzOw0KKwltc28tbGlzdC10ZW1wbGF0ZS1pZHM6LTE0MjE5MDExODt9DQorQGxpc3QgbDM6bGV2ZWwxDQorCXttc28tbGV2ZWwtc3RhcnQtYXQ6NDsNCisJbXNvLWxldmVsLXRleHQ6JTE7DQorCW1zby1sZXZlbC10YWItc3RvcDozMy43NXB0Ow0KKwltc28tbGV2ZWwtbnVtYmVyLXBvc2l0aW9uOmxlZnQ7DQorCW1hcmdpbi1sZWZ0OjMzLjc1cHQ7DQorCXRleHQtaW5kZW50Oi0zMy43NXB0O30NCitAbGlzdCBsMzpsZXZlbDINCisJe21zby1sZXZlbC10ZXh0OiIlMVwuJTIiOw0KKwltc28tbGV2ZWwtdGFiLXN0b3A6MzYuMHB0Ow0KKwltc28tbGV2ZWwtbnVtYmVyLXBvc2l0aW9uOmxlZnQ7DQorCW1hcmdpbi1sZWZ0OjM2LjBwdDsNCisJdGV4dC1pbmRlbnQ6LTM2LjBwdDt9DQorQGxpc3QgbDM6bGV2ZWwzDQorCXttc28tbGV2ZWwtc3RhcnQtYXQ6NjsNCisJbXNvLWxldmVsLXRleHQ6IiUxXC4lMlwuJTMiOw0KKwltc28tbGV2ZWwtdGFiLXN0b3A6MzYuMHB0Ow0KKwltc28tbGV2ZWwtbnVtYmVyLXBvc2l0aW9uOmxlZnQ7DQorCW1hcmdpbi1sZWZ0OjM2LjBwdDsNCisJdGV4dC1pbmRlbnQ6LTM2LjBwdDt9DQorQGxpc3QgbDM6bGV2ZWw0DQorCXttc28tbGV2ZWwtdGV4dDoiJTFcLiUyXC4lM1wuJTQiOw0KKwltc28tbGV2ZWwtdGFiLXN0b3A6NTQuMHB0Ow0KKwltc28tbGV2ZWwtbnVtYmVyLXBvc2l0aW9uOmxlZnQ7DQorCW1hcmdpbi1sZWZ0OjU0LjBwdDsNCisJdGV4dC1pbmRlbnQ6LTU0LjBwdDt9DQorQGxpc3QgbDM6bGV2ZWw1DQorCXttc28tbGV2ZWwtdGV4dDoiJTFcLiUyXC4lM1wuJTRcLiU1IjsNCisJbXNvLWxldmVsLXRhYi1zdG9wOjcyLjBwdDsNCisJbXNvLWxldmVsLW51bWJlci1wb3NpdGlvbjpsZWZ0Ow0KKwltYXJnaW4tbGVmdDo3Mi4wcHQ7DQorCXRleHQtaW5kZW50Oi03Mi4wcHQ7fQ0KK0BsaXN0IGwzOmxldmVsNg0KKwl7bXNvLWxldmVsLXRleHQ6IiUxXC4lMlwuJTNcLiU0XC4lNVwuJTYiOw0KKwltc28tbGV2ZWwtdGFiLXN0b3A6OTAuMHB0Ow0KKwltc28tbGV2ZWwtbnVtYmVyLXBvc2l0aW9uOmxlZnQ7DQorCW1hcmdpbi1sZWZ0OjkwLjBwdDsNCisJdGV4dC1pbmRlbnQ6LTkwLjBwdDt9DQorQGxpc3QgbDM6bGV2ZWw3DQorCXttc28tbGV2ZWwtdGV4dDoiJTFcLiUyXC4lM1wuJTRcLiU1XC4lNlwuJTciOw0KKwltc28tbGV2ZWwtdGFiLXN0b3A6OTAuMHB0Ow0KKwltc28tbGV2ZWwtbnVtYmVyLXBvc2l0aW9uOmxlZnQ7DQorCW1hcmdpbi1sZWZ0OjkwLjBwdDsNCisJdGV4dC1pbmRlbnQ6LTkwLjBwdDt9DQorQGxpc3QgbDM6bGV2ZWw4DQorCXttc28tbGV2ZWwtdGV4dDoiJTFcLiUyXC4lM1wuJTRcLiU1XC4lNlwuJTdcLiU4IjsNCisJbXNvLWxldmVsLXRhYi1zdG9wOjEwOC4wcHQ7DQorCW1zby1sZXZlbC1udW1iZXItcG9zaXRpb246bGVmdDsNCisJbWFyZ2luLWxlZnQ6MTA4LjBwdDsNCisJdGV4dC1pbmRlbnQ6LTEwOC4wcHQ7fQ0KK0BsaXN0IGwzOmxldmVsOQ0KKwl7bXNvLWxldmVsLXRleHQ6IiUxXC4lMlwuJTNcLiU0XC4lNVwuJTZcLiU3XC4lOFwuJTkiOw0KKwltc28tbGV2ZWwtdGFiLXN0b3A6MTI2LjBwdDsNCisJbXNvLWxldmVsLW51bWJlci1wb3NpdGlvbjpsZWZ0Ow0KKwltYXJnaW4tbGVmdDoxMjYuMHB0Ow0KKwl0ZXh0LWluZGVudDotMTI2LjBwdDt9DQorQGxpc3QgbDQNCisJe21zby1saXN0LWlkOjc5NTE3ODE5ODsNCisJbXNvLWxpc3QtdHlwZTpoeWJyaWQ7DQorCW1zby1saXN0LXRlbXBsYXRlLWlkczo3NjE0MzMzNTYgNjg1NTA2NjEgNjg1NTA2NTkgNjg1NTA2NjEgNjg1NTA2NTcgNjg1NTA2NTkgNjg1NTA2NjEgNjg1NTA2NTcgNjg1NTA2NTkgNjg1NTA2NjE7fQ0KK0BsaXN0IGw0OmxldmVsMQ0KKwl7bXNvLWxldmVsLW51bWJlci1mb3JtYXQ6YnVsbGV0Ow0KKwltc28tbGV2ZWwtdGV4dDpcRjBBNzsNCisJbXNvLWxldmVsLXRhYi1zdG9wOjM2LjBwdDsNCisJbXNvLWxldmVsLW51bWJlci1wb3NpdGlvbjpsZWZ0Ow0KKwl0ZXh0LWluZGVudDotMTguMHB0Ow0KKwlmb250LWZhbWlseTpXaW5nZGluZ3M7fQ0KK0BsaXN0IGw1DQorCXttc28tbGlzdC1pZDo4NjkzNDQzNzI7DQorCW1zby1saXN0LXR5cGU6aHlicmlkOw0KKwltc28tbGlzdC10ZW1wbGF0ZS1pZHM6MjEyMDQ5NjkwNiA2ODU1MDY2MSA2ODU1MDY1OSA2ODU1MDY2MSA2ODU1MDY1NyA2ODU1MDY1OSA2ODU1MDY2MSA2ODU1MDY1NyA2ODU1MDY1OSA2ODU1MDY2MTt9DQorQGxpc3QgbDU6bGV2ZWwxDQorCXttc28tbGV2ZWwtbnVtYmVyLWZvcm1hdDpidWxsZXQ7DQorCW1zby1sZXZlbC10ZXh0OlxGMEE3Ow0KKwltc28tbGV2ZWwtdGFiLXN0b3A6MzYuMHB0Ow0KKwltc28tbGV2ZWwtbnVtYmVyLXBvc2l0aW9uOmxlZnQ7DQorCXRleHQtaW5kZW50Oi0xOC4wcHQ7DQorCWZvbnQtZmFtaWx5OldpbmdkaW5nczt9DQorQGxpc3QgbDYNCisJe21zby1saXN0LWlkOjg4MDYzNTA1OTsNCisJbXNvLWxpc3QtdHlwZTpoeWJyaWQ7DQorCW1zby1saXN0LXRlbXBsYXRlLWlkczotMTQ1NTAwMzQyNCA2ODU1MDY2MSA2ODU1MDY1OSA2ODU1MDY2MSA2ODU1MDY1NyA2ODU1MDY1OSA2ODU1MDY2MSA2ODU1MDY1NyA2ODU1MDY1OSA2ODU1MDY2MTt9DQorQGxpc3QgbDY6bGV2ZWwxDQorCXttc28tbGV2ZWwtbnVtYmVyLWZvcm1hdDpidWxsZXQ7DQorCW1zby1sZXZlbC10ZXh0OlxGMEE3Ow0KKwltc28tbGV2ZWwtdGFiLXN0b3A6NzEuNHB0Ow0KKwltc28tbGV2ZWwtbnVtYmVyLXBvc2l0aW9uOmxlZnQ7DQorCW1hcmdpbi1sZWZ0OjcxLjRwdDsNCisJdGV4dC1pbmRlbnQ6LTE4LjBwdDsNCisJZm9udC1mYW1pbHk6V2luZ2RpbmdzO30NCitAbGlzdCBsNw0KKwl7bXNvLWxpc3QtaWQ6MTIwNTc1Njk0MzsNCisJbXNvLWxpc3QtdHlwZTpoeWJyaWQ7DQorCW1zby1saXN0LXRlbXBsYXRlLWlkczotMTY3NjQwMDQ4NCA2ODU1MDY2MSA2ODU1MDY1OSA2ODU1MDY2MSA2ODU1MDY1NyA2ODU1MDY1OSA2ODU1MDY2MSA2ODU1MDY1NyA2ODU1MDY1OSA2ODU1MDY2MTt9DQorQGxpc3QgbDc6bGV2ZWwxDQorCXttc28tbGV2ZWwtbnVtYmVyLWZvcm1hdDpidWxsZXQ7DQorCW1zby1sZXZlbC10ZXh0OlxGMEE3Ow0KKwltc28tbGV2ZWwtdGFiLXN0b3A6MzYuMHB0Ow0KKwltc28tbGV2ZWwtbnVtYmVyLXBvc2l0aW9uOmxlZnQ7DQorCXRleHQtaW5kZW50Oi0xOC4wcHQ7DQorCWZvbnQtZmFtaWx5OldpbmdkaW5nczt9DQorQGxpc3QgbDgNCisJe21zby1saXN0LWlkOjEzMTMwMTg5NDY7DQorCW1zby1saXN0LXRlbXBsYXRlLWlkczotOTQ3ODk5ODE0O30NCitAbGlzdCBsODpsZXZlbDENCisJe21zby1sZXZlbC1zdGFydC1hdDo0Ow0KKwltc28tbGV2ZWwtdGV4dDolMTsNCisJbXNvLWxldmVsLXRhYi1zdG9wOjMzLjc1cHQ7DQorCW1zby1sZXZlbC1udW1iZXItcG9zaXRpb246bGVmdDsNCisJbWFyZ2luLWxlZnQ6MzMuNzVwdDsNCisJdGV4dC1pbmRlbnQ6LTMzLjc1cHQ7DQorCW1zby1hbnNpLWZvbnQtc2l6ZToxMS4wcHQ7DQorCWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyI7DQorCW1zby1iaWRpLWZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iO30NCitAbGlzdCBsODpsZXZlbDINCisJe21zby1sZXZlbC10ZXh0OiIlMVwuJTIiOw0KKwltc28tbGV2ZWwtdGFiLXN0b3A6MzMuNzVwdDsNCisJbXNvLWxldmVsLW51bWJlci1wb3NpdGlvbjpsZWZ0Ow0KKwltYXJnaW4tbGVmdDozMy43NXB0Ow0KKwl0ZXh0LWluZGVudDotMzMuNzVwdDsNCisJbXNvLWFuc2ktZm9udC1zaXplOjExLjBwdDsNCisJZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3IjsNCisJbXNvLWJpZGktZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7fQ0KK0BsaXN0IGw4OmxldmVsMw0KKwl7bXNvLWxldmVsLXN0YXJ0LWF0OjQ7DQorCW1zby1sZXZlbC10ZXh0OiIlMVwuJTJcLiUzIjsNCisJbXNvLWxldmVsLXRhYi1zdG9wOjM2LjBwdDsNCisJbXNvLWxldmVsLW51bWJlci1wb3NpdGlvbjpsZWZ0Ow0KKwltYXJnaW4tbGVmdDozNi4wcHQ7DQorCXRleHQtaW5kZW50Oi0zNi4wcHQ7DQorCW1zby1hbnNpLWZvbnQtc2l6ZToxMS4wcHQ7DQorCWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyI7DQorCW1zby1iaWRpLWZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iO30NCitAbGlzdCBsODpsZXZlbDQNCisJe21zby1sZXZlbC10ZXh0OiIlMVwuJTJcLiUzXC4lNCI7DQorCW1zby1sZXZlbC10YWItc3RvcDozNi4wcHQ7DQorCW1zby1sZXZlbC1udW1iZXItcG9zaXRpb246bGVmdDsNCisJbWFyZ2luLWxlZnQ6MzYuMHB0Ow0KKwl0ZXh0LWluZGVudDotMzYuMHB0Ow0KKwltc28tYW5zaS1mb250LXNpemU6MTEuMHB0Ow0KKwlmb250LWZhbWlseToiQ291cmllciBOZXciOw0KKwltc28tYmlkaS1mb250LWZhbWlseToiVGltZXMgTmV3IFJvbWFuIjt9DQorQGxpc3QgbDg6bGV2ZWw1DQorCXttc28tbGV2ZWwtdGV4dDoiJTFcLiUyXC4lM1wuJTRcLiU1IjsNCisJbXNvLWxldmVsLXRhYi1zdG9wOjM2LjBwdDsNCisJbXNvLWxldmVsLW51bWJlci1wb3NpdGlvbjpsZWZ0Ow0KKwltYXJnaW4tbGVmdDozNi4wcHQ7DQorCXRleHQtaW5kZW50Oi0zNi4wcHQ7DQorCW1zby1hbnNpLWZvbnQtc2l6ZToxMS4wcHQ7DQorCWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyI7DQorCW1zby1iaWRpLWZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iO30NCitAbGlzdCBsODpsZXZlbDYNCisJe21zby1sZXZlbC10ZXh0OiIlMVwuJTJcLiUzXC4lNFwuJTVcLiU2IjsNCisJbXNvLWxldmVsLXRhYi1zdG9wOjU0LjBwdDsNCisJbXNvLWxldmVsLW51bWJlci1wb3NpdGlvbjpsZWZ0Ow0KKwltYXJnaW4tbGVmdDo1NC4wcHQ7DQorCXRleHQtaW5kZW50Oi01NC4wcHQ7DQorCW1zby1hbnNpLWZvbnQtc2l6ZToxMS4wcHQ7DQorCWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyI7DQorCW1zby1iaWRpLWZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iO30NCitAbGlzdCBsODpsZXZlbDcNCisJe21zby1sZXZlbC10ZXh0OiIlMVwuJTJcLiUzXC4lNFwuJTVcLiU2XC4lNyI7DQorCW1zby1sZXZlbC10YWItc3RvcDo1NC4wcHQ7DQorCW1zby1sZXZlbC1udW1iZXItcG9zaXRpb246bGVmdDsNCisJbWFyZ2luLWxlZnQ6NTQuMHB0Ow0KKwl0ZXh0LWluZGVudDotNTQuMHB0Ow0KKwltc28tYW5zaS1mb250LXNpemU6MTEuMHB0Ow0KKwlmb250LWZhbWlseToiQ291cmllciBOZXciOw0KKwltc28tYmlkaS1mb250LWZhbWlseToiVGltZXMgTmV3IFJvbWFuIjt9DQorQGxpc3QgbDg6bGV2ZWw4DQorCXttc28tbGV2ZWwtdGV4dDoiJTFcLiUyXC4lM1wuJTRcLiU1XC4lNlwuJTdcLiU4IjsNCisJbXNvLWxldmVsLXRhYi1zdG9wOjcyLjBwdDsNCisJbXNvLWxldmVsLW51bWJlci1wb3NpdGlvbjpsZWZ0Ow0KKwltYXJnaW4tbGVmdDo3Mi4wcHQ7DQorCXRleHQtaW5kZW50Oi03Mi4wcHQ7DQorCW1zby1hbnNpLWZvbnQtc2l6ZToxMS4wcHQ7DQorCWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyI7DQorCW1zby1iaWRpLWZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iO30NCitAbGlzdCBsODpsZXZlbDkNCisJe21zby1sZXZlbC10ZXh0OiIlMVwuJTJcLiUzXC4lNFwuJTVcLiU2XC4lN1wuJThcLiU5IjsNCisJbXNvLWxldmVsLXRhYi1zdG9wOjcyLjBwdDsNCisJbXNvLWxldmVsLW51bWJlci1wb3NpdGlvbjpsZWZ0Ow0KKwltYXJnaW4tbGVmdDo3Mi4wcHQ7DQorCXRleHQtaW5kZW50Oi03Mi4wcHQ7DQorCW1zby1hbnNpLWZvbnQtc2l6ZToxMS4wcHQ7DQorCWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyI7DQorCW1zby1iaWRpLWZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iO30NCitAbGlzdCBsOQ0KKwl7bXNvLWxpc3QtaWQ6MTU1MDc5ODcxNDsNCisJbXNvLWxpc3QtdHlwZTpoeWJyaWQ7DQorCW1zby1saXN0LXRlbXBsYXRlLWlkczo1NjQ2OTQ4NzQgLTc2MjUxNzcxMCA2ODU1MDY4MSA2ODU1MDY4MyA2ODU1MDY3MSA2ODU1MDY4MSA2ODU1MDY4MyA2ODU1MDY3MSA2ODU1MDY4MSA2ODU1MDY4Mzt9DQorQGxpc3QgbDk6bGV2ZWwxDQorCXttc28tbGV2ZWwtdGFiLXN0b3A6MzMuNzVwdDsNCisJbXNvLWxldmVsLW51bWJlci1wb3NpdGlvbjpsZWZ0Ow0KKwltYXJnaW4tbGVmdDozMy43NXB0Ow0KKwl0ZXh0LWluZGVudDotMjAuMjVwdDt9DQorQGxpc3QgbDEwDQorCXttc28tbGlzdC1pZDoxNTU1Nzc3MjUyOw0KKwltc28tbGlzdC10eXBlOmh5YnJpZDsNCisJbXNvLWxpc3QtdGVtcGxhdGUtaWRzOi05MTYxNDY5NDQgNjg1NTA2NjEgNjg1NTA2NTkgNjg1NTA2NjEgNjg1NTA2NTcgNjg1NTA2NTkgNjg1NTA2NjEgNjg1NTA2NTcgNjg1NTA2NTkgNjg1NTA2NjE7fQ0KK0BsaXN0IGwxMDpsZXZlbDENCisJe21zby1sZXZlbC1udW1iZXItZm9ybWF0OmJ1bGxldDsNCisJbXNvLWxldmVsLXRleHQ6XEYwQTc7DQorCW1zby1sZXZlbC10YWItc3RvcDo0OC45cHQ7DQorCW1zby1sZXZlbC1udW1iZXItcG9zaXRpb246bGVmdDsNCisJbWFyZ2luLWxlZnQ6NDguOXB0Ow0KKwl0ZXh0LWluZGVudDotMTguMHB0Ow0KKwlmb250LWZhbWlseTpXaW5nZGluZ3M7fQ0KK0BsaXN0IGwxMQ0KKwl7bXNvLWxpc3QtaWQ6MTU2MTAxMzE1NjsNCisJbXNvLWxpc3QtdHlwZTpoeWJyaWQ7DQorCW1zby1saXN0LXRlbXBsYXRlLWlkczotODgzMDA3NjY0IDY4NTUwNjYxIDY4NTUwNjU5IDY4NTUwNjYxIDY4NTUwNjU3IDY4NTUwNjU5IDY4NTUwNjYxIDY4NTUwNjU3IDY4NTUwNjU5IDY4NTUwNjYxO30NCitAbGlzdCBsMTE6bGV2ZWwxDQorCXttc28tbGV2ZWwtbnVtYmVyLWZvcm1hdDpidWxsZXQ7DQorCW1zby1sZXZlbC10ZXh0OlxGMEE3Ow0KKwltc28tbGV2ZWwtdGFiLXN0b3A6MzYuMHB0Ow0KKwltc28tbGV2ZWwtbnVtYmVyLXBvc2l0aW9uOmxlZnQ7DQorCXRleHQtaW5kZW50Oi0xOC4wcHQ7DQorCWZvbnQtZmFtaWx5OldpbmdkaW5nczt9DQorQGxpc3QgbDEyDQorCXttc28tbGlzdC1pZDoxOTM4NTIwMjMwOw0KKwltc28tbGlzdC10eXBlOmh5YnJpZDsNCisJbXNvLWxpc3QtdGVtcGxhdGUtaWRzOi0xMzc2OTA5MTkyIDY4NTUwNjYxIDY4NTUwNjU5IDY4NTUwNjYxIDY4NTUwNjU3IDY4NTUwNjU5IDY4NTUwNjYxIDY4NTUwNjU3IDY4NTUwNjU5IDY4NTUwNjYxO30NCitAbGlzdCBsMTI6bGV2ZWwxDQorCXttc28tbGV2ZWwtbnVtYmVyLWZvcm1hdDpidWxsZXQ7DQorCW1zby1sZXZlbC10ZXh0OlxGMEE3Ow0KKwltc28tbGV2ZWwtdGFiLXN0b3A6MzYuMHB0Ow0KKwltc28tbGV2ZWwtbnVtYmVyLXBvc2l0aW9uOmxlZnQ7DQorCXRleHQtaW5kZW50Oi0xOC4wcHQ7DQorCWZvbnQtZmFtaWx5OldpbmdkaW5nczt9DQorQGxpc3QgbDEzDQorCXttc28tbGlzdC1pZDoyMDM4MTE1NDIyOw0KKwltc28tbGlzdC10eXBlOmh5YnJpZDsNCisJbXNvLWxpc3QtdGVtcGxhdGUtaWRzOi0xMzUwMzg3OTQ2IDY4NTUwNjYxIDY4NTUwNjU5IDY4NTUwNjYxIDY4NTUwNjU3IDY4NTUwNjU5IDY4NTUwNjYxIDY4NTUwNjU3IDY4NTUwNjU5IDY4NTUwNjYxO30NCitAbGlzdCBsMTM6bGV2ZWwxDQorCXttc28tbGV2ZWwtbnVtYmVyLWZvcm1hdDpidWxsZXQ7DQorCW1zby1sZXZlbC10ZXh0OlxGMEE3Ow0KKwltc28tbGV2ZWwtdGFiLXN0b3A6MzYuMHB0Ow0KKwltc28tbGV2ZWwtbnVtYmVyLXBvc2l0aW9uOmxlZnQ7DQorCXRleHQtaW5kZW50Oi0xOC4wcHQ7DQorCWZvbnQtZmFtaWx5OldpbmdkaW5nczt9DQorb2wNCisJe21hcmdpbi1ib3R0b206MGNtO30NCit1bA0KKwl7bWFyZ2luLWJvdHRvbTowY207fQ0KKy0tPg0KKzwvc3R5bGU+DQorPCEtLVtpZiBndGUgbXNvIDEwXT4NCis8c3R5bGU+DQorIC8qIFN0eWxlIERlZmluaXRpb25zICovDQorIHRhYmxlLk1zb05vcm1hbFRhYmxlDQorCXttc28tc3R5bGUtbmFtZToiVGFiZWxhIG5vcm1hbCI7DQorCW1zby10c3R5bGUtcm93YmFuZC1zaXplOjA7DQorCW1zby10c3R5bGUtY29sYmFuZC1zaXplOjA7DQorCW1zby1zdHlsZS1ub3Nob3c6eWVzOw0KKwltc28tc3R5bGUtcGFyZW50OiIiOw0KKwltc28tcGFkZGluZy1hbHQ6MGNtIDUuNHB0IDBjbSA1LjRwdDsNCisJbXNvLXBhcmEtbWFyZ2luOjBjbTsNCisJbXNvLXBhcmEtbWFyZ2luLWJvdHRvbTouMDAwMXB0Ow0KKwltc28tcGFnaW5hdGlvbjp3aWRvdy1vcnBoYW47DQorCWZvbnQtc2l6ZToxMC4wcHQ7DQorCWZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iOw0KKwltc28tYW5zaS1sYW5ndWFnZTojMDQwMDsNCisJbXNvLWZhcmVhc3QtbGFuZ3VhZ2U6IzA0MDA7DQorCW1zby1iaWRpLWxhbmd1YWdlOiMwNDAwO30NCis8L3N0eWxlPg0KKzwhW2VuZGlmXS0tPg0KKzwvaGVhZD4NCisNCis8Ym9keSBsYW5nPVBULUJSIGxpbms9Ymx1ZSB2bGluaz1wdXJwbGUgc3R5bGU9J3RhYi1pbnRlcnZhbDozNS40cHQnPg0KKw0KKzxkaXYgY2xhc3M9U2VjdGlvbjE+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIGxhbmc9RU4tVVMgc3R5bGU9J21zby1hbnNpLWxhbmd1YWdlOkVOLVVTJz48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj5NYW51YWwgZGUgUmVmZXLqbmNpYSBkbyBCUkxUVFk8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj5Db250cm9sZSBkZQ0KK0FjZXNzbyBkYSBUZWxhIHBhcmEgcGVzc29hcyBjZWdhcyBxdWUgdXNhbSBEaXNwbGF5IEJyYWlsbGU8c3Bhbg0KK3N0eWxlPSdtc28tdGFiLWNvdW50OjEnPqCgoCA8L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBsYW5nPUVOLVVTIHN0eWxlPSdtc28tYW5zaS1sYW5ndWFnZTpFTi1VUyc+PG86cD4mbmJzcDs8L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBsYW5nPUVOLVVTIHN0eWxlPSdtc28tYW5zaS1sYW5ndWFnZTpFTi1VUyc+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+TmlraGlsIE5haXIgJmx0O25uMjAxQGN1cy5jYW0uYWMudWsmZ3Q7PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBsYW5nPUVOLVVTIHN0eWxlPSdtc28tYW5zaS1sYW5ndWFnZTpFTi1VUyc+PG86cD4mbmJzcDs8L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBsYW5nPUVOLVVTIHN0eWxlPSdtc28tYW5zaS1sYW5ndWFnZTpFTi1VUyc+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+Tmljb2xhcyBQaXRyZSAmbHQ7bmljb0BmbHV4bmljLm5ldCZndDs8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIGxhbmc9RU4tVVMgc3R5bGU9J21zby1hbnNpLWxhbmd1YWdlOkVOLVVTJz48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIGxhbmc9RU4tVVMgc3R5bGU9J21zby1hbnNpLWxhbmd1YWdlOkVOLVVTJz48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj5TdOlwaGFuZSBEb3lvbiAmbHQ7cy5kb3lvbkB2aWRlb3Ryb24uY2EmZ3Q7PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBsYW5nPUVOLVVTIHN0eWxlPSdtc28tYW5zaS1sYW5ndWFnZTpFTi1VUyc+PG86cD4mbmJzcDs8L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBsYW5nPUVOLVVTIHN0eWxlPSdtc28tYW5zaS1sYW5ndWFnZTpFTi1VUyc+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+RGF2ZSBNaWVsa2UgJmx0O2RhdmVAbWllbGtlLmNjJmd0OzxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gbGFuZz1FTi1VUyBzdHlsZT0nbXNvLWFuc2ktbGFuZ3VhZ2U6RU4tVVMnPjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPlRyYWR15+NvIHBhcmEgYQ0KK2xpbmd1YSBQb3J0dWd1ZXNhPC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48bzpwPiZuYnNwOzwvbzpwPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPlJlZ2lhbmUgTWVuZG9u52ENCitWaWxsZWxhICZsdDtyZWdpYW5ldmlsbGVsYUBnbWFpbC5jb20mZ3Q7PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48bzpwPiZuYnNwOzwvbzpwPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPkZpbGlwZSBPbGl2ZWlyYQ0KK0Jlcm5hcmRlcyAmbHQ7ZmlsaXBlb2Jlcm5hcmRlc0BnbWFpbC5jb20mZ3Q7PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48bzpwPiZuYnNwOzwvbzpwPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPjxzcGFuIGxhbmc9RU4tVVMNCitzdHlsZT0nbXNvLWFuc2ktbGFuZ3VhZ2U6RU4tVVMnPlZlcnNpb24gNC4zLCBvY3QgMjAxMTxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PG86cD4mbmJzcDs8L286cD48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxvOnA+Jm5ic3A7PC9vOnA+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+Q29weXJpZ2h0IKkNCisxOTk1LTIwMTEgYnkgRGVzZW52b2x2ZWRvcmVzIGRvIEJSTFRUWS4gQlJMVFRZIOkgdW0gc29mdHdhcmU8L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj5saXZyZSwgZSA8c3Bhbg0KK2NsYXNzPWhwcz48c3BhbiBsYW5nPVBUIHN0eWxlPSdtc28tYW5zaS1sYW5ndWFnZTpQVCc+dmVtIGNvbTwvc3Bhbj48L3NwYW4+PHNwYW4NCitjbGFzcz1zaG9ydHRleHQ+PHNwYW4gbGFuZz1QVCBzdHlsZT0nbXNvLWFuc2ktbGFuZ3VhZ2U6UFQnPiA8L3NwYW4+PC9zcGFuPjxzcGFuDQorY2xhc3M9aHBzPjxzcGFuIGxhbmc9UFQgc3R5bGU9J21zby1hbnNpLWxhbmd1YWdlOlBUJz5BQlNPTFVUQU1FTlRFIFNFTSBORU5IVU1BDQorR0FSQU5USUE8L3NwYW4+PC9zcGFuPi4gRWxlIOkgcG9zdGFkbyBzb2Igb3M8L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj50ZXJtb3MgZGEgdmVyc+NvDQorMiBvdSBwb3N0ZXJpb3IgZGEgR05VIGUgcHVibGljYWRhIHBlbGEgRnVuZGHn428gZGUgU29mdHdhcmU8L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj5MaXZyZS48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxvOnA+Jm5ic3A7PC9vOnA+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oA0KKzwvc3Bhbj5fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fPC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48bzpwPiZuYnNwOzwvbzpwPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPlRhYmVsYSBkZSBDb250ZfpkbzwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PG86cD4mbmJzcDs8L286cD48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxvOnA+Jm5ic3A7PC9vOnA+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oDwvc3Bhbj48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gPC9zcGFuPjEuIEZvcm1hbGlkYWRlczwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgoKAgPC9zcGFuPjEuMSBMaWNlbudhPC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKCgoCA8L3NwYW4+MS4yIFJlbvpuY2lhPC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKCgoCA8L3NwYW4+MS4zIENvbnRhdG88L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxvOnA+Jm5ic3A7PC9vOnA+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+Mi4gSW50cm9kdefjbzwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgoKAgPC9zcGFuPjIuMSBTdW3hcmlvIDwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgoKAgPC9zcGFuPjIuMiBSZXF1aXNpdG9zDQorZG8gU2lzdGVtYTwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PG86cD4mbmJzcDs8L286cD48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj4zLiBQcm9jZXNzbyBkZQ0KK2NvbXBpbGHn4288L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKCgIDwvc3Bhbj4zLjEgSW5zdGFsYefjbw0KK2RhIGhlcmFu52EgZGUgYXJxdWl2b3M8L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKCgIDwvc3Bhbj4zLjIgSW5zdGFsYefjbw0KK2EgcGFydGlyIGRvIFRhciBCYWxsPC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKCgoKCgoCA8L3NwYW4+My4yLjENCitPcOf1ZXMgZGUgY29tcGlsYefjbzwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgoKCgoKCgoDwvc3Bhbj4zLjIuMS4xIFBhZHL1ZXMgZG8gU2lzdGVtYTwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgoKCgoKCgoKAgPC9zcGFuPjMuMi4xLjINCitFc3BlY2lmaWNh5/VlcyBkZSBEaXJldPNyaW88L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKCgoKCgoKCgIDwvc3Bhbj4zLjIuMS4zDQorQ2FyYWN0ZXJpc3RpY2FzIGRlIENvbXBpbGHn4288L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKCgoKCgoKCgIDwvc3Bhbj4zLjIuMS40DQorT3Dn9WVzIGRpdmVyc2FzPC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKCgoKCgoCA8L3NwYW4+My4yLjINCitBdGluZ2lyIG1ldGFzIGRlIGFycXVpdm9zPC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKCgoCA8L3NwYW4+My4zIFRlc3RhbmRvIG8NCitCUkxUVFk8L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKCgIDwvc3Bhbj4zLjQgSW5pY2lhbmRvDQorbyBCUkxUVFk8L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKCgIDwvc3Bhbj4zLjUgQ29uc2lkZXJh5/Vlcw0KK2RlIFNlZ3VyYW7nYTwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgoKAgPC9zcGFuPjMuNiBSZXN0cmnn9WVzDQorZGUgQ29tcGlsYefjbyBlIFRlbXBvIGRlIEV4ZWN15+NvPC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKCgoCA8L3NwYW4+My43IEluc3RhbGHn428NCithIHBhcnRpciBkZSB1bSBhcnF1aXZvIFJQTSA8L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKCgIDwvc3Bhbj48c3Bhbg0KK2xhbmc9RU4tVVMgc3R5bGU9J21zby1hbnNpLWxhbmd1YWdlOkVOLVVTJz4zLjggT3V0cmFzIFV0aWxpZGFkZXM8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIGxhbmc9RU4tVVMgc3R5bGU9J21zby1hbnNpLWxhbmd1YWdlOkVOLVVTJz48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKCgoKCgIDwvc3Bhbj4zLjguMSBicmx0dHktY29uZmlnPG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBsYW5nPUVOLVVTIHN0eWxlPSdtc28tYW5zaS1sYW5ndWFnZTpFTi1VUyc+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKCgoKCgoCA8L3NwYW4+My44LjIgYnJsdHR5LWluc3RhbGw8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIGxhbmc9RU4tVVMgc3R5bGU9J21zby1hbnNpLWxhbmd1YWdlOkVOLVVTJz48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKCgoKCgIDwvc3Bhbj4zLjguMyBicmx0ZXN0PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBsYW5nPUVOLVVTIHN0eWxlPSdtc28tYW5zaS1sYW5ndWFnZTpFTi1VUyc+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKCgoKCgoCA8L3NwYW4+My44LjQgc3BrdGVzdDxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gbGFuZz1FTi1VUyBzdHlsZT0nbXNvLWFuc2ktbGFuZ3VhZ2U6RU4tVVMnPjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgoKCgoKAgPC9zcGFuPjMuOC41IHNjcnRlc3Q8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIGxhbmc9RU4tVVMgc3R5bGU9J21zby1hbnNpLWxhbmd1YWdlOkVOLVVTJz48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKCgoKCgIDwvc3Bhbj4zLjguNiB0dGJ0ZXN0PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBsYW5nPUVOLVVTIHN0eWxlPSdtc28tYW5zaS1sYW5ndWFnZTpFTi1VUyc+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKCgoKCgoCA8L3NwYW4+My44LjcgY3RidGVzdDxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gbGFuZz1FTi1VUyBzdHlsZT0nbXNvLWFuc2ktbGFuZ3VhZ2U6RU4tVVMnPjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgoKCgoKAgPC9zcGFuPjMuOC44IHR1bmV0ZXN0PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBsYW5nPUVOLVVTIHN0eWxlPSdtc28tYW5zaS1sYW5ndWFnZTpFTi1VUyc+PG86cD4mbmJzcDs8L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBsYW5nPUVOLVVTIHN0eWxlPSdtc28tYW5zaS1sYW5ndWFnZTpFTi1VUyc+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+PC9zcGFuPjQuIFVzYW5kbyBCUkxUVFk8L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKCgIDwvc3Bhbj40LjEgQ29tYW5kb3M8L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKCgoKCgIDwvc3Bhbj40LjEuMSBEZXNsb2NhbWVudG8NCitWZXJ0aWNhbCA8L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKCgoKCgIDwvc3Bhbj40LjEuMg0KK0Rlc2xvY2FtZW50byBIb3Jpem9udGFsIDwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgoKCgoKAgPC9zcGFuPjQuMS4zDQorRGVzbG9jYW1lbnRvIEltcGxpY2l0byA8L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKCgoKCgIDwvc3Bhbj40LjEuNCBDYXJhY3RlcmlzdGljYQ0KK2RlIEF0aXZh5+NvPC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKCgoKCgoCA8L3NwYW4+NC4xLjUgTW9kbw0KK2RlIFNlbGXn4288L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKCgoKCgIDwvc3Bhbj40LjEuNg0KK1ByZWZlcupuY2lhcyBkZSBNYW51dGVu5+NvPC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKCgoKCgoCA8L3NwYW4+NC4xLjcgTWVudSBkZQ0KK05hdmVnYefjbzwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgoKCgoKAgPC9zcGFuPjQuMS44DQorQ29udHJvbGVzIGRlIEZhbGE8L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKCgoKCgIDwvc3Bhbj40LjEuOSBDb211dGHn428NCitkbyBUZXJtaW5hbCBWaXJ0dWFsPC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKCgoKAgPC9zcGFuPjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgPC9zcGFuPjQuMS4xMCBPdXRyb3MgQ29tYW5kb3M8L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKCgoKCgIDwvc3Bhbj40LjEuMTEgQ2FyYWN0ZXJlcw0KK2RlIENvbWFuZG9zPC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKCgoKCgoCA8L3NwYW4+NC4xLjEyIEJhc2UNCitDb21tYW5kb3M8L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKCgIDwvc3Bhbj40LjIgQXJxdWl2b3MNCitkZSBjb25maWd1cmHn4288L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKCgIDwvc3Bhbj40LjMgT3Dn9WVzIGRlDQorbGluaGEgZGUgQ29tYW5kbzwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PG86cD4mbmJzcDs8L286cD48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj41LiBEZXNjcmnn9WVzIGRlDQorY2FyYWN0ZXJpc3RpY2FzPC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKCgoCA8L3NwYW4+NS4xIFJvdGVhbWVudG8NCitkZSBDdXJzb3I8L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKCgIDwvc3Bhbj41LjIgQ29waWFyIGUgQ29sYXI8L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goCA8L3NwYW4+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKA8L3NwYW4+NS4zIFN1cG9ydGUgZGUgUG9udGVpcm8gKE1vdXNlKSB2aWEgR1BNPC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKCgoCA8L3NwYW4+NS40IEFsZXJ0YSBkZSBUdW5lczwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgoKAgPC9zcGFuPjUuNSBDb25maWd1cmHn9WVzDQorZGUgUHJlZmVy6m5jaWFzIDwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgoKCgoKAgPC9zcGFuPjUuNS4xIE1lbnUNCitkZSBQcmVmZXLqbmNpYXM8L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKCgoKCgoKCgIDwvc3Bhbj41LjUuMS4xIE1lbnUNCitkZSBOYXZlZ2Hn4288L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKCgoKCgoKCgIDwvc3Bhbj41LjUuMS4yIEl0ZW5zDQorZGUgTWVudTwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgoKAgPC9zcGFuPjUuNiBTdGF0dXMgZG8gRGlzcGxheTwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgoKCgoKAgPC9zcGFuPjUuNi4xIERpc3BsYXlzDQorY29tIDIxIEPpbHVsYXMgb3UgTWFpczwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgoKCgoKAgPC9zcGFuPjUuNi4yDQorRGlzcGxheXMgY29tIDIwIEPpbHVsYXMgb3UgTWVub3M8L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKCgIDwvc3Bhbj41LjcgQ29tYW5kbyBkZQ0KK01vZG8gZGUgQXByZW5kaXphZ2VtPC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48bzpwPiZuYnNwOzwvbzpwPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPjYuIFRhYmVsYXM8L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKCgIDwvc3Bhbj42LjEgVGFiZWxhcyBkZQ0KK1RleHRvPC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKCgoKCgoCA8L3NwYW4+Ni4xLjEgVGFiZWxhDQorZGUgRm9ybWF0byBkZSBUZXh0bzwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgoKCgoKAgPC9zcGFuPjYuMS4yIFRhYmVsYQ0KK2RlIERpcmV0aXZhcyBkZSBUZXh0bzwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgoKAgPC9zcGFuPjYuMiBUYWJlbGEgZGUNCitBdHJpYnV0b3M8L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKCgoKCgIDwvc3Bhbj42LjIuMSBUYWJlbGENCitkZSBGb3JtYXRvcyBkb3MgQXRyaWJ1dG9zPC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKCgoKCgoCA8L3NwYW4+Ni4yLjIgVGFiZWxhDQorZGUgRGlyZXTzcmlvcyBkb3MgQXRyaWJ1dG9zIDwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgoKAgPC9zcGFuPjYuMyBUYWJlbGEgZGUgQ29udHJh5+NvPC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKCgoKCgoCA8L3NwYW4+Ni4zLjEgVGFiZWxhDQorZGUgRm9ybWF0byBkZSBDb250cmHn4288L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKCgoKCgIDwvc3Bhbj42LjMuMiBUYWJlbGENCitkZSBPcGVyYW5kb3MgZGUgQ29udHJh5+NvPC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKCgoKCgoCA8L3NwYW4+PHNwYW4NCitsYW5nPUVOLVVTIHN0eWxlPSdtc28tYW5zaS1sYW5ndWFnZTpFTi1VUyc+Ni4zLjMgT3Bjb2RlczxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgoKCgoKCgoDwvc3Bhbj42LjMuMy4xIEFkbWluaXN0cmHn428gZGUgVGFiZWxhPC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKCgoKCgoKCgoCA8L3NwYW4+Ni4zLjMuMiBEZWZpbmnn428NCitkZSBT7W1ib2xvIEVzcGVjaWFsPC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKCgoKCgoKCgoCA8L3NwYW4+Ni4zLjMuMyBUcmFkdefjbw0KK2RlIENhcmFjdGVyIDwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgoKCgoKCgoKAgPC9zcGFuPjYuMy4zLjQgQ2xhc3Nlcw0KK2RlIENhcmFjdGVyPC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKCgoCA8L3NwYW4+Ni40IFRhYmVsYXMgZGUNCitUZWNsYXM8L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKCgoKCgIDwvc3Bhbj42LjQuMSBUYWJlbGENCitkZSBEaXJldGl2YXMgZGUgVGVjbGFzPC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKCgoKCgoKCgoCA8L3NwYW4+Ni40LjEuMSBEaXJldGl2YQ0KK2RlIGF0cmlidWnn4288L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKCgoKCgoKCgIDwvc3Bhbj42LjQuMS4yIERpcmV0aXZhDQorZGUgdu1uY3VsbzwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgoKCgoKCgoKAgPC9zcGFuPjYuNC4xLjMgRGlyZXRpdmENCitkZSBjb250ZXh0bzwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgoKCgoKCgoKAgPC9zcGFuPjYuNC4xLjQgRGlyZXRpdmENCitkZSBvY3VsdGFyPC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKCgoKCgoKCgoCA8L3NwYW4+Ni40LjEuNSBEaXJldGl2YQ0KK2RlIEhvdGtleSA8L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKCgoKCgoKCgIDwvc3Bhbj48c3Bhbg0KK2xhbmc9RU4tVVMgc3R5bGU9J21zby1hbnNpLWxhbmd1YWdlOkVOLVVTJz42LjQuMS42IERpcmV0aXZhIGRlIElmS2V5IDxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgoKCgoKCgoKAgPC9zcGFuPjYuNC4xLjcgRGlyZXRpdmENCitkZSBpbmNsdXPjbzwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgoKCgoKCgoKAgPC9zcGFuPjYuNC4xLjggRGlyZXRpdmENCitkZSBtYXBhPC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKCgoKCgoKCgoCA8L3NwYW4+Ni40LjEuOSBEaXJldGl2YQ0KK2RlIG9ic2VydmHn4288L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKCgoKCgoKCgIDwvc3Bhbj42LjQuMS4xMA0KK0RpcmV0aXZhIGRlIHNvYnJlcG9zaefjbzwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgoKCgoKCgoKAgPC9zcGFuPjYuNC4xLjExDQorRGlyZXRpdmEgZGUgdO10dWxvPC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKCgoKCgoCA8L3NwYW4+Ni40LjIgUHJvcHJpZWRhZGVzDQorZG8gVGVjbGFkbzwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PG86cD4mbmJzcDs8L286cD48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj43LiBU83BpY29zIEF2YW7nYWRvczwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgoKAgPC9zcGFuPjcuMSBJbnN0YWxh5+NvDQorZGUgTXVsdGlwbGFzIFZlcnP1ZXM8L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKCgIDwvc3Bhbj43LjIgSW5zdGFsYefjby9BanVkYQ0KK2RvcyBEaXNjb3MgZGUgcm9vdCBwYXJhIExpbnV4PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKCgoCA8L3NwYW4+Ny4zIEhlcmFu52EgRnV0dXJhPC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKCgoCA8L3NwYW4+Ny40IEJ1Z3MNCitDb25oZWNpZG9zPC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48bzpwPiZuYnNwOzwvbzpwPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPkEuIERpc3BsYXkgZGUNCitCcmFpbGxlIFN1cG9ydGFkb3M8L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj5CLiBTaW50ZXRpemFkb3Jlcw0KK2RlIEZhbGEgU3Vwb3J0YWRvczwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPkMuIElkZW50aWZpY2Hn428NCitkb3MgQ/NkaWdvcyBkbyBEcml2ZXIgPC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+RC4gRHJpdmVycyBkZSBUZWxhDQorU3Vwb3J0YWRvczwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPkUuIFNpbnRheGUgZGUNCitPcGVyYefjbzwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgoKAgPC9zcGFuPkUuMSBFc3BlY2lmaWNh5+NvDQorZG8gRHJpdmVyIDwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgoKAgPC9zcGFuPkUuMiBFc3BlY2lmaWNh5+NvDQorZG8gRGlzcG9zaXRpdm8gQnJhaWxsZSA8L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKCgIDwvc3Bhbj5FLjMgRXNwZWNpZmljYefjbw0KK2RvIERpc3Bvc2l0aXZvIFBDTSA8L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKCgIDwvc3Bhbj5FLjQgRXNwZWNpZmljYefjbw0KK2RvIERpc3Bvc2l0aXZvIE1JREk8L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxvOnA+Jm5ic3A7PC9vOnA+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+Ri4gQ29udmVu5+NvIGRvDQorUGFkcuNvIEJyYWlsbGUgcGFyYSBudW1lcmHn4288L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj5HLiBD82RpZ28NCitOb3J0ZS1BbWVyaWNhbm8gZG8gUGFkcuNvIEJyYWlsbGU8L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj5ILiBUYWJlbGEgZGUNCitJbnN0cnVtZW50byBNSURJIDwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PG86cD4mbmJzcDs8L286cD48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxvOnA+Jm5ic3A7PC9vOnA+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+PHNwYW4gbGFuZz1FTi1VUw0KK3N0eWxlPSdtc28tYW5zaS1sYW5ndWFnZTpFTi1VUyc+X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXzxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gbGFuZz1FTi1VUyBzdHlsZT0nbXNvLWFuc2ktbGFuZ3VhZ2U6RU4tVVMnPjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gbGFuZz1FTi1VUyBzdHlsZT0nbXNvLWFuc2ktbGFuZ3VhZ2U6RU4tVVMnPjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPjwvc3Bhbj4xLiBGb3JtYWxpZGFkZXM8L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIGxhbmc9RU4tVVMgc3R5bGU9J21zby1hbnNpLWxhbmd1YWdlOkVOLVVTJz48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj4xLjEgTGljZW7nYTwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PG86cD4mbmJzcDs8L286cD48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0IHN0eWxlPSdtYXJnaW4tbGVmdDoxMi4wcHQnPkVzdGUgcHJvZ3JhbWEg6SB1bSBzb2Z0d2FyZQ0KK2xpdnJlLiBWb2PqIHBvZGVy4SByZWRpc3RyaWJ1aXIgZS9vdSBtb2RpZmljYXIgc29icmUgb3MgdGVybW9zIGRvIEdOVSBHZW5lcmFsDQorUHVibGljIExpbmNlbnNlIGNvbW8gcHVibGljYWRvIHBlbGEgRnVuZGHn428gZG8gU29mdHdhcmUgTGl2cmUuIFZlcnPjbyAyIChvdQ0KK291dHJhIHZlcnPjbyBwb3N0ZXJpb3IpIGRhIGxpY2Vu52EgcG9kZXLhIHNlciB1c2FkYS48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0IHN0eWxlPSdtYXJnaW4tbGVmdDoxMi4wcHQnPlZvY+ogZGV2ZXLhIHJlY2ViZXIgdW1hIGPzcGlhDQorZGEgbGljZW7nYSBqdW50byBjb20gZXN0ZSBwcm9ncmFtYS4gPHNwYW4gY2xhc3M9aHBzPjxzcGFuIGxhbmc9UFQNCitzdHlsZT0nbXNvLWFuc2ktbGFuZ3VhZ2U6UFQnPkRldmUtc2U8L3NwYW4+PC9zcGFuPjxzcGFuIGxhbmc9UFQNCitzdHlsZT0nbXNvLWFuc2ktbGFuZ3VhZ2U6UFQnPiB0ZXIgPHNwYW4gY2xhc3M9aHBzPm5vIGFycXVpdm8gZGUgbGljZW7nYTwvc3Bhbj4tR1BMDQorPHNwYW4gY2xhc3M9aHBzPm5vPC9zcGFuPiBkaXJldPNyaW8gcmFpejxzcGFuIGNsYXNzPWhwcz4uPC9zcGFuPiA8L3NwYW4+PHNwYW4NCitjbGFzcz1ocHM+U2UgbuNvIGVzdGl2ZXIsIGVzY3JldmE8L3NwYW4+IDxzcGFuIGNsYXNzPWhwcz5wYXJhIGEgRnJlZTwvc3Bhbj4gPHNwYW4NCitjbGFzcz1ocHM+U29mdHdhcmU8L3NwYW4+IDxzcGFuIGNsYXNzPWhwcz5Gb3VuZGF0aW9uPC9zcGFuPiA8c3BhbiBjbGFzcz1ocHM+SW5jLjwvc3Bhbj4sDQorNjc1IDxzcGFuIGNsYXNzPWhwcz5NYXNzPC9zcGFuPiA8c3BhbiBjbGFzcz1ocHM+QXZlLDwvc3Bhbj4gPHNwYW4gY2xhc3M9aHBzPkNhbWJyaWRnZSw8L3NwYW4+DQorPHNwYW4gY2xhc3M9aHBzPk1BIDAyMTM5PC9zcGFuPiwgRVVBLjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqA8L3NwYW4+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+MS4yIFJlbvpuY2lhPC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBsYW5nPUVOLVVTIHN0eWxlPSdtc28tYW5zaS1sYW5ndWFnZTpFTi1VUyc+PG86cD4mbmJzcDs8L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dCBzdHlsZT0nbWFyZ2luLWxlZnQ6MTIuMHB0Jz5Fc3RlIHByb2dyYW1hIOkgZGlzdHJpYnXtZG8gbmENCitlc3BlcmFu52EgZGUgc2VyIHVzdWFsLCBtYWlzIDxzcGFuIGNsYXNzPWhwcz48c3BhbiBsYW5nPVBUIHN0eWxlPSdtc28tYW5zaS1sYW5ndWFnZToNCitQVCc+dmVtIGNvbTwvc3Bhbj48L3NwYW4+PHNwYW4gY2xhc3M9c2hvcnR0ZXh0PjxzcGFuIGxhbmc9UFQgc3R5bGU9J21zby1hbnNpLWxhbmd1YWdlOg0KK1BUJz4gPC9zcGFuPjwvc3Bhbj48c3BhbiBjbGFzcz1ocHM+PHNwYW4gbGFuZz1QVCBzdHlsZT0nbXNvLWFuc2ktbGFuZ3VhZ2U6UFQnPkFCU09MVVRBTUVOVEUNCitTRU0gTkVOSFVNQSBHQVJBTlRJQSAtIG5lbSBtZXNtbzwvc3Bhbj48L3NwYW4+PHNwYW4gbGFuZz1QVCBzdHlsZT0nbXNvLWFuc2ktbGFuZ3VhZ2U6DQorUFQnPiA8c3BhbiBjbGFzcz1ocHM+YSBnYXJhbnRpYSBpbXBs7WNpdGEgZGU8L3NwYW4+PGJyPg0KKzxzcGFuIGNsYXNzPWhwcz5DT01FUkNJQUxJWkHHw08gb3U8L3NwYW4+IDxzcGFuIGNsYXNzPWhwcz5BREVRVUHHw088L3NwYW4+IDxzcGFuDQorY2xhc3M9aHBzPlBBUkEgVU0gUFJPUNNTSVRPPC9zcGFuPiA8c3BhbiBjbGFzcz1ocHM+UEFSVElDVUxBUi4gVmVyIG5hIGxpY2Vu52ENCitHTlUgcGFyYSBtYWlzIGRldGFsaGVzLjwvc3Bhbj48L3NwYW4+PHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PG86cD4mbmJzcDs8L286cD48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj4xLjMgQ29udGF0bzwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PG86cD4mbmJzcDs8L286cD48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0IHN0eWxlPSdtYXJnaW4tbGVmdDoxMi4wcHQnPkJSTFRUWSDpIHJlcHJlc2VudGFkbyBwb3IgdW1hDQorZXF1aXBlIGRlIHRyYWJhbGhvLiBQYXJhIGF0dWFsaXphciBhIGluZm9ybWHn428gZGlhIGEgZGlhLCBubyB3ZWIgc2l0ZSBCUkxUVFkNCitbaHR0cDovL21pZWxrZS5jYy9icmx0dHldLiBDb21wb3N0byBwb3I6PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48bzpwPiZuYnNwOzwvbzpwPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPjxzcGFuIGxhbmc9RU4tVVMNCitzdHlsZT0nbXNvLWFuc2ktbGFuZ3VhZ2U6RU4tVVMnPrc8c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+RGF2ZQ0KK01pZWxrZSAobWFudGVuZWRvciwgYXRpdm8pPG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBsYW5nPUVOLVVTIHN0eWxlPSdtc28tYW5zaS1sYW5ndWFnZTpFTi1VUyc+PG86cD4mbmJzcDs8L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBsYW5nPUVOLVVTIHN0eWxlPSdtc28tYW5zaS1sYW5ndWFnZTpFTi1VUyc+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKCgoCA8L3NwYW4+V2ViPG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBsYW5nPUVOLVVTIHN0eWxlPSdtc28tYW5zaS1sYW5ndWFnZTpFTi1VUyc+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKCgoKCgoCA8L3NwYW4+PC9zcGFuPmh0dHA6Ly9taWVsa2UuY2MvPC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48bzpwPiZuYnNwOzwvbzpwPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgoKAgPC9zcGFuPkVtYWlsPC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKCgoKCgoCA8L3NwYW4+PHNwYW4NCitsYW5nPUVOLVVTIHN0eWxlPSdtc28tYW5zaS1sYW5ndWFnZTpFTi1VUyc+Jmx0O2RhdmVAbWllbGtlLmNjJmd0OzxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gbGFuZz1FTi1VUyBzdHlsZT0nbXNvLWFuc2ktbGFuZ3VhZ2U6RU4tVVMnPjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gbGFuZz1FTi1VUyBzdHlsZT0nbXNvLWFuc2ktbGFuZ3VhZ2U6RU4tVVMnPjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPrc8c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oA0KKzwvc3Bhbj5TYW11ZWwgVGhpYmF1bHQgKGF0aXZvKTxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gbGFuZz1FTi1VUyBzdHlsZT0nbXNvLWFuc2ktbGFuZ3VhZ2U6RU4tVVMnPjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gbGFuZz1FTi1VUyBzdHlsZT0nbXNvLWFuc2ktbGFuZ3VhZ2U6RU4tVVMnPjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgoKAgPC9zcGFuPldlYjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gbGFuZz1FTi1VUyBzdHlsZT0nbXNvLWFuc2ktbGFuZ3VhZ2U6RU4tVVMnPjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgoKCgoKAgPC9zcGFuPmh0dHA6Ly9kZXB0LWluZm8ubGFicmkuZnIvfnRoaWJhdWx0LzxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gbGFuZz1FTi1VUyBzdHlsZT0nbXNvLWFuc2ktbGFuZ3VhZ2U6RU4tVVMnPjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gbGFuZz1FTi1VUyBzdHlsZT0nbXNvLWFuc2ktbGFuZ3VhZ2U6RU4tVVMnPjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgoKAgPC9zcGFuPjwvc3Bhbj5FbWFpbDwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgoKCgoKANCis8L3NwYW4+Jmx0O3NhbXVlbC50aGliYXVsdEBlbnMtbHlvbi5vcmcmZ3Q7PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48bzpwPiZuYnNwOzwvbzpwPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPjxzcGFuIGxhbmc9RU4tVVMNCitzdHlsZT0nbXNvLWFuc2ktbGFuZ3VhZ2U6RU4tVVMnPrc8c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+TWFyaW8NCitMYW5nIChhdGl2byk8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIGxhbmc9RU4tVVMgc3R5bGU9J21zby1hbnNpLWxhbmd1YWdlOkVOLVVTJz48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIGxhbmc9RU4tVVMgc3R5bGU9J21zby1hbnNpLWxhbmd1YWdlOkVOLVVTJz48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKCgIDwvc3Bhbj5XZWI8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIGxhbmc9RU4tVVMgc3R5bGU9J21zby1hbnNpLWxhbmd1YWdlOkVOLVVTJz48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKCgoKCgIDwvc3Bhbj48L3NwYW4+aHR0cDovL2RlbHlzaWQub3JnLzwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PG86cD4mbmJzcDs8L286cD48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKCgIDwvc3Bhbj5FbWFpbDwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgoKCgoKANCis8L3NwYW4+Jmx0O21sYW5nQGRlbHlzaWQub3JnJmd0OzwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PG86cD4mbmJzcDs8L286cD48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj63PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+Tmljb2xhcyBQaXRyZTwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PG86cD4mbmJzcDs8L286cD48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKCgIDwvc3Bhbj48c3Bhbg0KK2xhbmc9RU4tVVMgc3R5bGU9J21zby1hbnNpLWxhbmd1YWdlOkVOLVVTJz5XZWI8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIGxhbmc9RU4tVVMgc3R5bGU9J21zby1hbnNpLWxhbmd1YWdlOkVOLVVTJz48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKCgoKCgIDwvc3Bhbj5odHRwOi8vd3d3LmZsdXhuaWMubmV0LzxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gbGFuZz1FTi1VUyBzdHlsZT0nbXNvLWFuc2ktbGFuZ3VhZ2U6RU4tVVMnPjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gbGFuZz1FTi1VUyBzdHlsZT0nbXNvLWFuc2ktbGFuZ3VhZ2U6RU4tVVMnPjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgoKAgPC9zcGFuPjwvc3Bhbj5FbWFpbDwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgoKCgoKAgPC9zcGFuPjxzcGFuDQorbGFuZz1FTi1VUyBzdHlsZT0nbXNvLWFuc2ktbGFuZ3VhZ2U6RU4tVVMnPiZsdDtuaWNvQGZsdXhuaWMubmV0Jmd0OzxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gbGFuZz1FTi1VUyBzdHlsZT0nbXNvLWFuc2ktbGFuZ3VhZ2U6RU4tVVMnPjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gbGFuZz1FTi1VUyBzdHlsZT0nbXNvLWFuc2ktbGFuZ3VhZ2U6RU4tVVMnPjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPrc8c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+U3TpcGhhbmUNCitEb3lvbjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gbGFuZz1FTi1VUyBzdHlsZT0nbXNvLWFuc2ktbGFuZ3VhZ2U6RU4tVVMnPjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gbGFuZz1FTi1VUyBzdHlsZT0nbXNvLWFuc2ktbGFuZ3VhZ2U6RU4tVVMnPjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgoKAgPC9zcGFuPldlYjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gbGFuZz1FTi1VUyBzdHlsZT0nbXNvLWFuc2ktbGFuZ3VhZ2U6RU4tVVMnPjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgoKCgoKAgPC9zcGFuPmh0dHA6Ly9wYWdlcy5pbmZpbml0Lm5ldC9zZG95b24vPG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBsYW5nPUVOLVVTIHN0eWxlPSdtc28tYW5zaS1sYW5ndWFnZTpFTi1VUyc+PG86cD4mbmJzcDs8L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBsYW5nPUVOLVVTIHN0eWxlPSdtc28tYW5zaS1sYW5ndWFnZTpFTi1VUyc+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKCgoCA8L3NwYW4+PC9zcGFuPkVtYWlsPC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKCgoKCgoCA8L3NwYW4+PHNwYW4NCitsYW5nPUVOLVVTIHN0eWxlPSdtc28tYW5zaS1sYW5ndWFnZTpFTi1VUyc+Jmx0O3MuZG95b25AdmlkZW90cm9uLmNhJmd0OzxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gbGFuZz1FTi1VUyBzdHlsZT0nbXNvLWFuc2ktbGFuZ3VhZ2U6RU4tVVMnPjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gbGFuZz1FTi1VUyBzdHlsZT0nbXNvLWFuc2ktbGFuZ3VhZ2U6RU4tVVMnPjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPrc8c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oA0KKzwvc3Bhbj5OaWtoaWwgTmFpciAoYXV0b3IpPG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBsYW5nPUVOLVVTIHN0eWxlPSdtc28tYW5zaS1sYW5ndWFnZTpFTi1VUyc+PG86cD4mbmJzcDs8L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBsYW5nPUVOLVVTIHN0eWxlPSdtc28tYW5zaS1sYW5ndWFnZTpFTi1VUyc+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKCgoCA8L3NwYW4+PC9zcGFuPkVtYWlsPC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKCgoKCgoA0KKzwvc3Bhbj4mbHQ7bm4yMDFAY3VzLmNhbS5hYy51ayZndDs8L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxvOnA+Jm5ic3A7PC9vOnA+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dCBzdHlsZT0nbWFyZ2luLWxlZnQ6OS4wcHQ7dGV4dC1hbGlnbjpqdXN0aWZ5Jz5QZXJndW50YXMsDQorY29tZW504XJpb3MsIHN1Z2VzdPVlcywgY3JpdGljYXMsIGUgY29udHJpYnVp5/VlcyBz428gdG9kYXMgYmVtLTxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgoCA8L3NwYW4+PHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqA8L3NwYW4+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKCgoDwvc3Bhbj48c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKCgoKA8L3NwYW4+dmluZGFzLg0KK1VzYW5kbyBvcyBlbmRlcmXnb3MgZGUgZW1haWwgbGlzdGFkb3MgYWNpbWEsIGUgYSBtZWxob3IgbWFuZWlyYSBkZSA8c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gPC9zcGFuPmVudHJhciBlbSBjb250YXRvIGNvbSBhIGxpc3RhIGRvIEJSTFRUWS4gVm9j6g0KK3BvZGUgcG9zdGFyIG5hIGxpc3RhIGVudmlhbmRvIHVtIGVtYWlsIHBhcmEgPGEgaHJlZj0ibWFpbHRvOmJybHR0eUBtaWVsa2UuY2MiPjxzcGFuDQorc3R5bGU9J2NvbG9yOndpbmRvd3RleHQnPmJybHR0eUBtaWVsa2UuY2M8L3NwYW4+PC9hPi4gU2Ugdm9j6iBu428gaW5zY3JldmVyIG5hDQorbGlzdGEgZW50428gc2V1cyBwb3N0cyBzZXLjbyBtYW50aWRvcyBwYXJhIGEgYXByb3Zh5+NvIGRvIG1vZGVyYWRvci4gUGFyYQ0KK2luc2NyZXZlciwgcmVtb3ZlciBhc3NpbmF0dXJhLCBjb25maWd1cmHn9WVzIGRlIG11ZGFu52FzLCBhcnF1aXZvcyBwYXJhDQordmlzdWFsaXph5+NvLCBldGMsIHbhIG5hIDxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goDwvc3Bhbj5w4WdpbmEgPHNwYW4NCitsYW5nPUVOLVVTIHN0eWxlPSdtc28tYW5zaS1sYW5ndWFnZTpFTi1VUyc+PGENCitocmVmPSJodHRwOi8vbWllbGtlLmNjL21haWxtYW4vbGlzdGluZm8vYnJsdHR5Ij48c3BhbiBsYW5nPVBULUJSDQorc3R5bGU9J2NvbG9yOndpbmRvd3RleHQ7bXNvLWFuc2ktbGFuZ3VhZ2U6UFQtQlInPmh0dHA6Ly9taWVsa2UuY2MvbWFpbG1hbi9saXN0aW5mby9icmx0dHk8L3NwYW4+PC9hPjwvc3Bhbj4uPC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oDwvc3Bhbj48c3BhbiBzdHlsZT0nbXNvLXRhYi1jb3VudDoxJz6goCA8L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+Mi4gSW50cm9kdefjbzwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQgc3R5bGU9J21hcmdpbi1sZWZ0OjEyLjBwdCc+QlJMVFRZIGThIGFvIHVzdeFyaW8gYnJhaWxsZSBhY2Vzc28NCitwYXJhIG8gdGVybWluYWwgZGUgdGV4dG8gZGUgdW0gc2lzdGVtYSBVbml4L0xpbnV4LiBFbGUg6SBleGVjdXRhZG8gY29tbyB1bQ0KK3Byb2Nlc3NvIGVtIHNlZ3VuZG8gcGxhbm8gKGRhZW1vbikgcXVlIG9wZXJhIHVtIGRpc3BsYXkgQnJhaWxsZSBhdHVhbGl64XZlbCwgZQ0KK3BvZGUgc2VyIGluaWNpYWRvIGFudGVzIGRhIHNlcfzqbmNpYSBkbyBzaXN0ZW1hIGRlIGJvb3QuIEVsZSBwZXJtaXRlIHF1ZSB1bQ0KK3VzdeFyaW8gYnJhaWxsZSB0cmFiYWxoZSBkZSBmb3JtYSBpbmRlcGVuZGVudGUgY29tIGEgYWRtaW5pc3RyYefjbyBkbyBzaXN0ZW1hLA0KK3RhaXMgY29tbyBtb2RvIGRlIGVudHJhZGEg+m5pY2EgZGUgdXN14XJpbywgcmVjdXBlcmHn428gZG8gc2lzdGVtYSBkZSBhcnF1aXZvcw0KK2UgYW7hbGlzZSBkZSBwcm9ibGVtYXMgZGUgaW5pY2lhbGl6Yefjby4gRWxlIGFpbmRhIGZhY2lsaXRhIG11aXRvIGFzIHRhcmVmYXMgZGUNCityb3RpbmEgY29tbyCRbG9nZ2luZyBpbpIuPC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48bzpwPiZuYnNwOzwvbzpwPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQgc3R5bGU9J21hcmdpbi1sZWZ0OjEyLjBwdCc+PHNwYW4gY2xhc3M9aHBzPjxzcGFuIGxhbmc9UFQNCitzdHlsZT0nbXNvLWFuc2ktbGFuZ3VhZ2U6UFQnPkJSTFRUWTwvc3Bhbj48L3NwYW4+PHNwYW4gbGFuZz1QVA0KK3N0eWxlPSdtc28tYW5zaS1sYW5ndWFnZTpQVCc+IDxzcGFuIGNsYXNzPWhwcz5yZXByb2R1ejwvc3Bhbj4gPHNwYW4gY2xhc3M9aHBzPnVtYQ0KK3BhcnRlIHJldGFuZ3VsYXI8L3NwYW4+IDxzcGFuIGNsYXNzPWhwc2F0bj5kYSB0ZWxhICg8L3NwYW4+cXVlIHNlIHJlZmVyZSA8c3Bhbg0KK2NsYXNzPWhwcz5uZXN0ZSBkb2N1bWVudG88L3NwYW4+IDxzcGFuIGNsYXNzPWhwcz5jb21vIJFhPC9zcGFuPiA8c3Bhbg0KK2NsYXNzPWhwcz5qYW5lbGGSKTwvc3Bhbj4gPHNwYW4gY2xhc3M9aHBzPmNvbW8gdGV4dG88L3NwYW4+IDxzcGFuIGNsYXNzPWhwcz5icmFpbGxlPC9zcGFuPg0KKzxzcGFuIGNsYXNzPWhwcz5uYSB0ZWxhLjwvc3Bhbj4gPHNwYW4gY2xhc3M9aHBzPkNvbnRyb2xlczwvc3Bhbj4gPHNwYW4NCitjbGFzcz1ocHM+bmEgdGVsYTwvc3Bhbj4gPHNwYW4gY2xhc3M9aHBzPnBvZGUgc2VyIHVzYWRvczwvc3Bhbj4gPHNwYW4NCitjbGFzcz1ocHM+cGFyYSBtb3ZlciBhIGphbmVsYTwvc3Bhbj4gPHNwYW4gY2xhc3M9aHBzPmVtIHRvcm5vIGRhPC9zcGFuPiA8c3Bhbg0KK2NsYXNzPWhwcz50ZWxhLDwvc3Bhbj4gPHNwYW4gY2xhc3M9aHBzPnBhcmEgYXRpdmFyIGUgZGVzYXRpdmFyPC9zcGFuPiA8c3Bhbg0KK2NsYXNzPWhwcz524XJpYXMgb3Dn9WVzIGRlIHZpc3VhbGl6Yefjbzwvc3Bhbj4sIGUgcGFyYSByZWFsaXphciA8c3Bhbg0KK2NsYXNzPWhwcz5mdW7n9WVzIGVzcGVjaWFpcy48bzpwPjwvbzpwPjwvc3Bhbj48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dCBzdHlsZT0nbWFyZ2luLWxlZnQ6MTIuMHB0Jz48bzpwPiZuYnNwOzwvbzpwPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPjIuMSBTdW3hcmlvIDwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPkJSTFRUWSBvZmVyZWNlIG9zDQorc2VndWludGVzIHJlY3Vyc29zOjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PG86cD4mbmJzcDs8L286cD48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj63IENvbXBsZXRhDQoraW1wbGVtZW50YWPjbyBkYXMgZmFjaWxpZGFkZXMgbm9ybWFpcyBkZSByZXZpc+NvIGRlIHRlbGEuPC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48bzpwPiZuYnNwOzwvbzpwPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPrcgRXNjb2xoYSBlbnRyZQ0KK2Jsb2NrLCB1bmRlcmxpbmUsIG91IG5vIGN1cnNvci48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxvOnA+Jm5ic3A7PC9vOnA+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+tyBTdWJsaW5oYWRvDQorT3BjaW9uYWwgcGFyYSBpbmRpY2FyIGRlc3RhcXVlIGRlIHRleHRvIGVzcGVjaWFsLjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PG86cD4mbmJzcDs8L286cD48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0IHN0eWxlPSdtYXJnaW4tbGVmdDoxMi4wcHQnPrcgVXNvIG9wY2lvbmFsIGRlIGFsZXJ0YQ0KKyh2ZWxvY2lkYWRlIGFqdXN04XZlaXMgaW5kaXZpZHVhbG1lbnRlKSBwYXJhIGN1cnNvciwgZGVzdGFxdWUgc3VibGluaGFkbw0KK2VzcGVjaWFsLCBlL291IGxldHJhcyBtYWn6c2N1bGFzLjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PG86cD4mbmJzcDs8L286cD48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj63IENvbmdlbGFtZW50byBkZQ0KK3RlbGEgcGFyYSByZXZpc+NvLjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PG86cD4mbmJzcDs8L286cD48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0IHN0eWxlPSdtYXJnaW4tbGVmdDoxMi4wcHQnPrcgQ3Vyc29yIGludGVsaWdlbnRlIGRlDQorcm90ZWFtZW50bywgcGVybWl0aW5kbyBxdWUgc2VqYSBm4WNpbCBidXNjYXIgZG8gY3Vyc29yIGRlbnRybyBkZSBlZGl0b3JlcyBkZQ0KK3RleHRvLCBuYXZlZ2Fkb3JlcyB3ZWIsIGV0Yywgc2VtIG1vdmVyIGFzIG3jb3MgZGEgbGluaGEgQnJhaWxsZS48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxvOnA+Jm5ic3A7PC9vOnA+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dCBzdHlsZT0nbWFyZ2luLWxlZnQ6MTIuMHB0Jz63IEEgZnVu5+NvIGRlIGNvcGlhLWUtY29sYSBxdWUNCivpIHBhcnRpY3VsYXJtZW50ZSD6dGlsIHBhcmEgY29waWFyIG5vbWVzIGRlIGFycXVpdm9zLCBjb3BpYXIgbyB0ZXh0byBlbnRyZSBvcw0KK3Rlcm1pbmFpcyB2aXJ0dWFpcywgZW50cmFkYSBkZSBjb21hbmRvcyBjb21wbGljYWRvcywgZXRjLjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PG86cD4mbmJzcDs8L286cD48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj63IFRhYmVsYSBkZQ0KK2NvbnRyYefjbyBCcmFpbGxlIChJbmds6nMgZSBGcmFuY+pzKS48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxvOnA+Jm5ic3A7PC9vOnA+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+tyBTdXBvcnRlIHBhcmENCit24XJpb3MgY/NkaWdvcyBlbSBicmFpbGxlLjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PG86cD4mbmJzcDs8L286cD48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj63IENhcGFjaWRhZGUgcGFyYQ0KK2lkZW50aWZpY2FyIHVtIGNhcmFjdGVyIGRlc2NvbmhlY2lkby48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxvOnA+Jm5ic3A7PC9vOnA+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+tyBDYXBhY2lkYWRlIHBhcmENCit2ZXJpZmljYXIgdW0gY2FyYWN0ZXIgc3VibGluaGFkby48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxvOnA+Jm5ic3A7PC9vOnA+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+tyBBanVkYSBvbi1saW5lDQorcGFyYSBjb21hbmRvcyBkYSBsaW5oYSBCcmFpbGxlLjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PG86cD4mbmJzcDs8L286cD48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj48c3BhbiBsYW5nPUVOLVVTDQorc3R5bGU9J21zby1hbnNpLWxhbmd1YWdlOkVOLVVTJz63IE1lbnU8L3NwYW4+IGRlIHByZWZlcupuY2lhcy48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxvOnA+Jm5ic3A7PC9vOnA+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+tyBTdXBvcnRlIGLhc2ljbw0KK2RlIGZhbGEuPC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48bzpwPiZuYnNwOzwvbzpwPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQgc3R5bGU9J21hcmdpbi1sZWZ0OjEyLjBwdCc+tyBQcm9qZXRvIG1vZHVsYXIgcXVlIHBlcm1pdGUNCithIGFkaefjbyByZWxhdGl2YW1lbnRlIGbhY2lsIGRlIGRyaXZlcnMgcGFyYSBvdXRyb3MgZGlzcGxheSBicmFpbGxlIGUgc2ludGV0aXphZG9yZXMNCitkZSB2b3ouPC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48bzpwPiZuYnNwOzwvbzpwPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPrcgVW1hIEludGVyZmFjZQ0KK2RlIFByb2dyYW1h5+NvIGRlIEFwbGljYXRpdm9zLjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PG86cD4mbmJzcDs8L286cD48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj4yLjIgUmVxdWlzaXRvcyBkbw0KK1Npc3RlbWE8L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj48c3BhbiBsYW5nPUVOLVVTDQorc3R5bGU9J21zby1hbnNpLWxhbmd1YWdlOkVOLVVTJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj48c3Bhbg0KK3N0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5BdOkgZXNzYSBkYXRhLCBCUkxUVFkgcm9kYSBubyBMaW51eCwgU29sYXJpcywgT3BlbkJTRCwNCitGcmVlQlNELDxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPk5ldEJTRCwgZSBXaW5kb3dzLiBFbnF1YW50byBxdWUgb3V0cm9zDQorc2lzdGVtYXMgb3BlcmFjaW9uYWlzIG7jbyBlc3TjbzxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPmF0dWFsbWVudGUgcGxhbmVqYWRvcywgYWxndW1hIHN1Z2VzdONvIGRlDQorb3V0cm9zIHByb2pldG9zIHNlcuEgYmVtPG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+dmluZGEuIDwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7DQorbXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48bzpwPiZuYnNwOzwvbzpwPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPkxpbnV4PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48bzpwPiZuYnNwOzwvbzpwPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPkVzdGUgc29mdHdhcmUgdGVtDQorc2lkbyB0ZXN0YWRvIHBvciBkaXZlcnNvcyBzaXN0ZW1hczo8L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxvOnA+Jm5ic3A7PC9vOnA+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+tyBEZXNrdG9wcywNCitsYXB0b3BzLCBlIGFsZ3VucyBQREFzLjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PG86cD4mbmJzcDs8L286cD48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj63IFByb2Nlc3NhZG9yZXMNCitkZSAzODZTWDIwIGF06SBQZW50aXVtLjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PG86cD4mbmJzcDs8L286cD48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj63IERpdmVyc2FzIHPpcmllcw0KK2RlIHRhbWFuaG9zIGRlIG3pbW9yaWEuPC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48bzpwPiZuYnNwOzwvbzpwPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPrcgRGl2ZXJzb3MNCitkaXN0cmlidWlkb3JlcyBpbmNsdWluZG8gRGViaWFuLCBSZWQgSGF0LCBTbGFja3dhcmUsIGUgU3VTRS48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxvOnA+Jm5ic3A7PC9vOnA+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+PHNwYW4gbGFuZz1FTi1VUw0KK3N0eWxlPSdtc28tYW5zaS1sYW5ndWFnZTpFTi1VUyc+tyBW4XJpb3Mga2VybmVscywgaW5jbHVpbmRvIDEuMi4xMywgMi4wLCAyLjIsDQorYW5kIDIuNC48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIGxhbmc9RU4tVVMgc3R5bGU9J21zby1hbnNpLWxhbmd1YWdlOkVOLVVTJz48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gPC9zcGFuPjxzcGFuIHN0eWxlPSdtc28tdGFiLWNvdW50OjEnPqCgoKAgPC9zcGFuPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gbGFuZz1FTi1VUyBzdHlsZT0nbXNvLWFuc2ktbGFuZ3VhZ2U6RU4tVVMnPjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPlNvbGFyaXM8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIGxhbmc9RU4tVVMgc3R5bGU9J21zby1hbnNpLWxhbmd1YWdlOkVOLVVTJz48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj5Fc3RlIHNvZnR3YXJlIHRlbQ0KK3NpZG8gdGVzdGFkbyBub3Mgc2lzdGVtYXMgYWJhaXhvOjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PG86cD4mbmJzcDs8L286cD48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKCgoKCgIDwvc3Bhbj63DQorQXJxdWl0ZXR1cmEgU3BhcmMgKHZlcnP1ZXMgNywgOCwgZSA5KS48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxvOnA+Jm5ic3A7PC9vOnA+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKCgoCA8L3NwYW4+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKCgPC9zcGFuPrcgQXJxdWl0ZXR1cmEgSW50ZWwgKHZlcnPjbyA5KS48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxvOnA+Jm5ic3A7PC9vOnA+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+T3BlbkJTRDwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PG86cD4mbmJzcDs8L286cD48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj5Fc3RlIHNvZnR3YXJlIHRlbQ0KK3NpZG8gdGVzdGFkbyBubyBzaXN0ZW1hIE9wZW5CU0QgYWJhaXhvOjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PG86cD4mbmJzcDs8L286cD48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj63IEFycXVpdGV0dXJhIEludGVsDQorKHZlcnPjbyAzLjQpLjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PG86cD4mbmJzcDs8L286cD48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj5GcmVlQlNEPC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oDwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj5Fc3RlIHNvZnR3YXJlIHRlbQ0KK3NpZG8gdGVzdGFkbyBubyBzaXN0ZW1hIEZyZWVCU0QgYWJhaXhvOjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PG86cD4mbmJzcDs8L286cD48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj48c3BhbiBsYW5nPUVOLVVTDQorc3R5bGU9J21zby1hbnNpLWxhbmd1YWdlOkVOLVVTJz63IEFycXVpdGV0dXJhIEludGVsICh2ZXJz428gNS4xKS48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIGxhbmc9RU4tVVMgc3R5bGU9J21zby1hbnNpLWxhbmd1YWdlOkVOLVVTJz48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIGxhbmc9RU4tVVMgc3R5bGU9J21zby1hbnNpLWxhbmd1YWdlOkVOLVVTJz48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gPC9zcGFuPjxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gPC9zcGFuPk5ldEJTRDxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gbGFuZz1FTi1VUyBzdHlsZT0nbXNvLWFuc2ktbGFuZ3VhZ2U6RU4tVVMnPjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPkVzdGUgc29mdHdhcmUgdGVtDQorc2lkbyB0ZXN0YWRvIG5vIHNpc3RlbWEgTmV0QlNEIGFiYWl4bzo8L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxvOnA+Jm5ic3A7PC9vOnA+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+PHNwYW4gbGFuZz1FTi1VUw0KK3N0eWxlPSdtc28tYW5zaS1sYW5ndWFnZTpFTi1VUyc+tyBBcnF1aXRldHVyYSBJbnRlbCAodmVyc+NvIDEuNikuPG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBsYW5nPUVOLVVTIHN0eWxlPSdtc28tYW5zaS1sYW5ndWFnZTpFTi1VUyc+PG86cD4mbmJzcDs8L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBsYW5nPUVOLVVTIHN0eWxlPSdtc28tYW5zaS1sYW5ndWFnZTpFTi1VUyc+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+V2luZG93czxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gbGFuZz1FTi1VUyBzdHlsZT0nbXNvLWFuc2ktbGFuZ3VhZ2U6RU4tVVMnPjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPkVzdGUgc29mdHdhcmUgdGVtDQorc2lkbyB0ZXN0YWRvIG5vIFdpbmRvd3MgOTUsIDk4IGUgWFAuPC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48bzpwPiZuYnNwOzwvbzpwPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPjxzcGFuDQorc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPk5vIExpbnV4LCBCUkxUVFkgcG9kZSBpbnNwZWNpb25hciBvIGNvbnRl+mRvIGRhIHRlbGENCitkZSBmb3JtYTxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPmNvbXBsZXRhbWVudGUgaW5kZXBlbmRlbnRlIGRlIHF1YWxxdWVyDQordXN14XJpbyBjb25lY3RhZG8uIEVsZSBmYXogaXNzbzxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPnVzYW5kbyB1bSBkaXNwb3NpdGl2byBlc3BlY2lhbCBxdWUgZm9ybmVjZQ0KK2bhY2lsIGFjZXNzbyBhbyBjb250ZfpkbyBkbyA8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj5hdHVhbCBjb25zb2xlLiBFc3RlIGRpc3Bvc2l0aXZvIGZvaQ0KK2ludHJvZHV6aWRvIG5hIHZlcnPjbyAxLjEuOTIgZG88bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj5rZXJuZWwgZG8gTGludXgsIGUg6SBub3JtYWxtZW50ZSBjaGFtYWRvDQordGFtYultIGRlIC9kZXYvdmNzYSBvdTxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPi9kZXYvdmNzYTAgKGVtIHNpc3RlbWFzIGNvbSBkZXZmcyDpIGNoYW1hZG8NCisvZGV2L3ZjYy9hKS4gUG9yIGVzdGE8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj5yYXrjbywgbyBrZXJuZWwgZG8gTGludXggMS4xLjkyIG91IHN1cGVyaW9yIOkNCituZWNlc3PhcmlvIHNlIG8gQlJMVFRZPG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBsYW5nPUVOLVVTIHN0eWxlPSdmb250LXNpemU6MTEuMHB0O21zby1hbnNpLWxhbmd1YWdlOg0KK0VOLVVTJz48c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+PC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LXNpemU6DQorMTEuMHB0Jz5mb3IgdXRpbGl6YWRvIGRlc3RhIGZvcm1hLiBDb20gYSBjYXBhY2lkYWRlIGRlOjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxvOnA+Jm5ic3A7PC9vOnA+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+tyA8c3Bhbg0KK3N0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5QZXJtaXRlIEJSTFRUWSBhIHNlciBpbmljaWFkbyBtdWl0byBhbnRlcyBkYSBzZXH86m5jaWENCitkZTxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPmluaWNpYWxpemHn428gZG8gc2lzdGVtYTwvc3Bhbj4uPC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48bzpwPiZuYnNwOzwvbzpwPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPrcgPHNwYW4NCitzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+UGVybWl0ZSBhIHZpc3VhbGl6YefjbyBlbSBCcmFpbGxlIHBhcmEgZXN0YXINCit0b3RhbG1lbnRlIG9wZXJhY2lvbmFsPG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+ZHVyYW50ZSBvIGxvZ2luIGRvIHByb21wdDwvc3Bhbj4uPC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48bzpwPiZuYnNwOzwvbzpwPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPrcgPHNwYW4NCitzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+RmF6IG11aXRvIG1haXMgZuFjaWwgcGFyYSB1bSB1c3XhcmlvIGVtIEJyYWlsbGUgcGFyYQ0KK3JlYWxpemFyIGE8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj5pbmljaWFsaXph5+NvIGRlIHRhcmVmYXMgZGUgYWRtaW5pc3RyYefjbyBkbw0KK3Npc3RlbWE8L3NwYW4+LjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PG86cD4mbmJzcDs8L286cD48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj48c3BhbiBjbGFzcz1ocHM+PHNwYW4NCitsYW5nPVBUIHN0eWxlPSdtc28tYW5zaS1sYW5ndWFnZTpQVCc+VW0gcGF0Y2g8L3NwYW4+PC9zcGFuPjxzcGFuIGxhbmc9UFQNCitzdHlsZT0nbXNvLWFuc2ktbGFuZ3VhZ2U6UFQnPiA8c3BhbiBjbGFzcz1ocHM+cGFyYSBvIHByb2dyYW1hIGRlPC9zcGFuPiA8c3Bhbg0KK2NsYXNzPWhwcz50ZWxhIOk8L3NwYW4+IDxzcGFuIGNsYXNzPWhwc2F0bj5mb3JuZWNpZG8gKDwvc3Bhbj52ZXIgb3MgPHNwYW4NCitjbGFzcz1ocHM+c3ViZGlyZXTzcmlvcyBkb3M8bzpwPjwvbzpwPjwvc3Bhbj48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBjbGFzcz1ocHM+PHNwYW4gbGFuZz1QVCBzdHlsZT0nbXNvLWFuc2ktbGFuZ3VhZ2U6DQorUFQnPjxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj5QYXRjaGVzPC9zcGFuPjwvc3Bhbj48c3BhbiBsYW5nPVBUDQorc3R5bGU9J21zby1hbnNpLWxhbmd1YWdlOlBUJz4pLiA8c3BhbiBjbGFzcz1ocHM+RWxlIHBlcm1pdGU8L3NwYW4+IHF1ZSA8c3Bhbg0KK2NsYXNzPWhwcz5CUkxUVFk8L3NwYW4+IDxzcGFuIGNsYXNzPWhwcz5hY2Vzc2UgaW1hZ2VtIGRhIHRlbGE8L3NwYW4+IDxzcGFuDQorY2xhc3M9aHBzPmRhIHRlbGE8L3NwYW4+IDxzcGFuIGNsYXNzPWhwcz52aWE8L3NwYW4+PGJyPg0KKyZuYnNwOyZuYnNwOzxzcGFuIGNsYXNzPWhwcz5tZW3zcmlhIGNvbXBhcnRpbGhhZGE8L3NwYW4+LCA8c3BhbiBjbGFzcz1ocHM+ZSwNCitwb3J0YW50byw8L3NwYW4+IDxzcGFuIGNsYXNzPWhwcz5wZXJtaXRlPC9zcGFuPiA8c3BhbiBjbGFzcz1ocHM+QlJMVFRZPC9zcGFuPiA8c3Bhbg0KK2NsYXNzPWhwcz5hIHNlcjwvc3Bhbj4gPHNwYW4gY2xhc3M9aHBzPnV0aWxpemFkb3MgY29tPG86cD48L286cD48L3NwYW4+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gY2xhc3M9aHBzPjxzcGFuIGxhbmc9UFQgc3R5bGU9J21zby1hbnNpLWxhbmd1YWdlOg0KK1BUJz48c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+YmFzdGFudGU8L3NwYW4+PC9zcGFuPjxzcGFuDQorbGFuZz1QVCBzdHlsZT0nbXNvLWFuc2ktbGFuZ3VhZ2U6UFQnPiA8c3BhbiBjbGFzcz1ocHM+ZWZldGl2YW1lbnRlPC9zcGFuPiA8c3Bhbg0KK2NsYXNzPWhwcz5lbSBwbGF0YWZvcm1hczwvc3Bhbj4gPHNwYW4gY2xhc3M9aHBzPnF1ZSBu4288L3NwYW4+IDxzcGFuIGNsYXNzPWhwcz506m0NCithIHN1YTwvc3Bhbj4gPHNwYW4gY2xhc3M9aHBzPnBy83ByaWEgdGVsYTwvc3Bhbj4gPHNwYW4gY2xhc3M9aHBzPmRlPG86cD48L286cD48L3NwYW4+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gY2xhc3M9aHBzPjxzcGFuIGxhbmc9UFQgc3R5bGU9J21zby1hbnNpLWxhbmd1YWdlOg0KK1BUJz48c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+Y29udGX6ZG88L3NwYW4+PC9zcGFuPjxzcGFuDQorbGFuZz1QVCBzdHlsZT0nbXNvLWFuc2ktbGFuZ3VhZ2U6UFQnPiA8c3BhbiBjbGFzcz1ocHM+aW5zdGFsYef1ZXMgZGUgaW5zcGVj5+NvPC9zcGFuPi4NCis8c3BhbiBjbGFzcz1ocHM+QSBwcmluY2lwYWwgZnJhcXVlemE8L3NwYW4+IDxzcGFuIGNsYXNzPWhwcz5kYSBhYm9yZGFnZW08L3NwYW4+DQorPHNwYW4gY2xhc3M9aHBzPmRlIHRlbGE8L3NwYW4+IDxzcGFuIGNsYXNzPWhwcz7pPG86cD48L286cD48L3NwYW4+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gY2xhc3M9aHBzPjxzcGFuIGxhbmc9UFQgc3R5bGU9J21zby1hbnNpLWxhbmd1YWdlOg0KK1BUJz48c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+cXVlPC9zcGFuPjwvc3Bhbj48c3BhbiBsYW5nPVBUDQorc3R5bGU9J21zby1hbnNpLWxhbmd1YWdlOlBUJz4gPHNwYW4gY2xhc3M9aHBzPkJSTFRUWTwvc3Bhbj4gPHNwYW4gY2xhc3M9aHBzPm7jbw0KK3BvZGUgc2VyIGluaWNpYWRvPC9zcGFuPiA8c3BhbiBjbGFzcz1ocHM+YXTpIHF1ZSBvIHVzdeFyaW88L3NwYW4+IDxzcGFuDQorY2xhc3M9aHBzPmVzdGVqYSBsb2dhZG8uPC9zcGFuPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxvOnA+Jm5ic3A7PC9vOnA+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+QlJMVFRZIGFwZW5hcw0KK3RyYWJhbGhhIGNvbSBjb25zb2xlcyBlIGFwbGljYef1ZXMuIFBvZGUgc2VyIHVzYWRvcyBlbTwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPmFwbGljYef1ZXMgc2hlbGwsDQorbWFpcyBu428gY29tIGFwbGljYef1ZXMgcXVlIHVzYW0gY2FyYWN0ZXJpc3RpY2FzIFZHQSBvdSBxdWU8L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj5yZXF1ZXIgY29uc29sZQ0KK2dy4WZpY28gKGNvbW8gbyBzaXN0ZW1hIFggV2luZG93KS48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxvOnA+Jm5ic3A7PC9vOnA+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+Vm9j6iBkZXZlcuENCit0YW1i6W0sIGNsYXJvLCBwb3NzdWlyIHVtIGRpc3BsYXkgQnJhaWxsZSh2ZXIgc2Xn428gk0Rpc3BsYXkgZGU8L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj5CcmFpbGxlDQorU3Vwb3J0YWRvlCBwYXJhIGNvbXBsZXRlciBhIGxpc3RhKS4gTvNzIGVzcGVyYW1vcyBxdWUgb3V0cm9zIGRpc3BsYXlzPC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+c2VqYW0gc3Vwb3J0YWRvcw0KK25vIGZ1dHVybywgZW50428sIHNlIHZvY+ogdGVtIGFsZ3VtYSBpbmZvcm1h5+NvIHTpY25pY2EgZGUgdW08L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj5kaXNwb3NpdGl2byBxdWUNCit2b2PqIGdvc3RhcmlhIGRlIHNlciB2aXN0byBjb20gc3Vwb3J0YWRvLCBwb3IgZmF2b3IgZW50cmUgZW08L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj5jb250YXRvICh2ZXINCitzZefjbyCTSW5mb3JtYefjbyBkZSBjb250YXRvlCkuPC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48bzpwPiZuYnNwOzwvbzpwPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPjxzcGFuDQorc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPkZpbmFsbWVudGUsIHZvY+ogcHJlY2lzYSBkZSBmZXJyYW1lbnRhcyBwYXJhIGNvbnN0cnVpcg0KK28gZXhlY3V04XZlbCBhPG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+cGFydGlyIGRlIHN1YSBmb250ZTogbWFrZSwgY29tcGlsYWRvcmVzIEMgZSBDDQorKyArLCB5YWNjLCBhd2ssIGV0Yy4gQXM8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj5mZXJyYW1lbnRhcyBkZSBkZXNlbnZvbHZpbWVudG8gZm9ybmVjaWRhcyBjb20NCithIGRpc3RyaWJ1aefjbyBwYWRy428gZG88bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj5Vbml4IGRldmVyaWEgc2VyIHN1ZmljaWVudGUuIDxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPjwvc3Bhbj48c3BhbiBzdHlsZT0nbXNvLWJpZGktZm9udC1zaXplOjE4LjBwdCc+Mw0KKy0gUHJvY2Vzc28gZGUgY29tcGlsYefjbzwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6DQorIkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+PHNwYW4NCitzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+QlJMVFRZIHBvZGUgc2VyIGJhaXhhZG8gYSBwYXJ0aXIgZG8gc2V1IHNpdGUgKGNvbnN1bHRlDQorYSBzZWPn4288bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj5JbmZvcm1h5/VlcyBkZSBjb250YXRvIHBhcmEgYSBzdWENCitsb2NhbGl6YefjbykuIFRvZGFzIGFzIHJlbGVhc2VzIHPjbzxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPmZvcm5lY2lkYXMgY29tcGFjdGFkYXMgk3RhciBiYWxsc5QuIFJlbGVhc2VzDQorbWFpcyByZWNlbnRlcyB0YW1i6W0gc+NvPG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+Zm9ybmVjaWRhcyBjb21vIGFycXVpdm9zIFJQTSAoUmVkSGF0IFBhY2thZ2UNCitNYW5hZ2VyKS48L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxicg0KK3N0eWxlPSdtc28tc3BlY2lhbC1jaGFyYWN0ZXI6bGluZS1icmVhayc+DQorPCFbaWYgIXN1cHBvcnRMaW5lQnJlYWtOZXdMaW5lXT48YnIgc3R5bGU9J21zby1zcGVjaWFsLWNoYXJhY3RlcjpsaW5lLWJyZWFrJz4NCis8IVtlbmRpZl0+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKCgoCA8L3NwYW4+PC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5Fc3NhDQoraW5mb3JtYefjbywgcHJvdmF2ZWxtZW50ZSBhdGluZ2l1IGEgc3VhIGN1cmlvc2lkYWRlLCBlIGFnb3JhIHZvY+o8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj5u428gcG9kZSBlc3BlcmFyIHBhcmEgY29tZedhci4gySB1bWEgYm9hDQoraWTpaWEsIHBvcultLCBxdWUgcHJpbWVpcm8gc2U8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj5mYW1pbGlhcml6YXIgY29tIG9zIGFycXVpdm9zIHF1ZSBzZXLjbw0KK2ZpbmFsbWVudGUgaW5zdGFsYWRvcy48L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5Og0KKyJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PG86cD4mbmJzcDs8L286cD48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj48c3Bhbg0KK3N0eWxlPSdtc28tYmlkaS1mb250LXNpemU6MTguMHB0Jz4zLjEgLSBJbnN0YWxh5+NvIGRhIGhlcmFu52EgZGUgYXJxdWl2b3M8L3NwYW4+PHNwYW4NCitzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+PG86cD4mbmJzcDs8L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+UHJvY2Vzc28gZGUgY29tcGlsYefjbyBkZXZlIHJlc3VsdGFyIG5hDQoraW5zdGFsYefjbyBkb3Mgc2VndWludGVzPG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+YXJxdWl2b3M6PC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LWZhbWlseToNCitUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj4vYmluLzxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPmJybHR0eTogTyBwcm9ncmFtYSBCUkxUVFkuPG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nbXNvLWJpZGktZm9udC1zaXplOjExLjBwdCc+PG86cD4mbmJzcDs8L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+YnJsdHR5LWluc3RhbGw6IFVtIHV0aWxpdOFyaW8gcGFyYSBjb3BpYXINCitCUkxUVFkgaGllcmFycXVpYSBkZTxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPmFycXVpdm9zIGluc3RhbGFkbyBhIHBhcnRpciBkZSB1bSBsb2NhbCBwYXJhDQorb3V0cm8uPG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nbXNvLWJpZGktZm9udC1zaXplOjExLjBwdCc+PG86cD4mbmJzcDs8L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+YnJsdHR5LWNvbmZpZzogVW0gdXRpbGl04XJpbyBxdWUgZGVmaW5lIHVtDQorbvptZXJvIGRlIHZhcmnhdmVpcyBkZTxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPmFtYmllbnRlIHBhcmEgdmFsb3JlcyBxdWUgcmVmbGV0ZW0gYQ0KK2luc3RhbGHn428gYXR1YWwgZG8gQlJMVFRZLjwvc3Bhbj48c3BhbiBzdHlsZT0nbXNvLWJpZGktZm9udC1zaXplOjExLjBwdCc+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+PHNwYW4NCitzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+L2xpYi88bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj5saWJicmxhcGkuYTogYXJxdWl2byBlc3ThdGljbyBkYSBJbnRlcmZhY2UgZGUNCitQcm9ncmFtYefjbyBkZTxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPkFwbGljYXRpdm9zLjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPmxpYmJybGFwaS5zbzogb2JqZXRvIGRpbuJtaWNvIGNhcnJlZ+F2ZWwgcGFyYQ0KK28gSW50ZXJmYWNlIGRlPG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+UHJvZ3JhbWHn428gZGUgQXBsaWNhdGl2b3MuPC9zcGFuPjxzcGFuDQorc3R5bGU9J21zby1iaWRpLWZvbnQtc2l6ZToxMS4wcHQnPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPi9saWIvYnJsdHR5LzxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPkEgaW5zdGFsYefjbyBkbyBCUkxUVFkgbuNvIHBvZGUgdGVyIHRvZG9zIG9zDQorc2VndWludGVzIHRpcG9zIGRlPG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+YXJxdWl2b3MuIEVsZXMgc+NvIGNyaWFkb3MgYXBlbmFzIHF1YW5kbw0KK25lY2Vzc+FyaW8gY29tIGJhc2UgbmFzPG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+b3Dn9WVzIGRlIGNvbXBpbGHn428gcXVlIHZvY+ogc2VsZWNpb25hciAodmVyDQorc2Xn428gT3Dn9WVzIGRlPG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+Q29tcGlsYefjbykuPG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD4mbmJzcDs8L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+YnJsdHR5LWJybC5sc3Q6IFVtYSBsaXN0YSBkb3MgZHJpdmVycyBkbw0KK2Rpc3BsYXkgYnJhaWxsZSwgcXVlIGZvcmFtPG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+Y29uc3Ryde1kYXMgY29tbyBvYmpldG9zIGNvbXBhcnRpbGhhZG9zDQorZGluYW1pY2FtZW50ZSBjYXJyZWfhdmVpcywgZSw8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj5wb3J0YW50bywgcXVlIHBvZGUgc2VyIHNlbGVjaW9uYWRhIGVtIHRlbXBvDQorZGUgZXhlY3Xn428uIENhZGEgbGluaGE8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj5jb25zaXN0ZSBkbyBj82RpZ28gZGUgZHVhcyBpZGVudGlmaWNh5/VlcyBubw0KK2NvZGlnbyBkbyBkcml2ZXIsIHVtPG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+Y2FyYWN0ZXIgZGUgdGFidWxh5+NvLjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J21zby1iaWRpLWZvbnQtc2l6ZToxMS4wcHQnPjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPmxpYmJybHR0eWJkcml2ZXIuc28uMTogTyBkcml2ZXIg6SBjYXJyZWfhdmVsDQorZSAmbmJzcDtkaW5hbWljbyBwYXJhIHVtYTxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPmxpbmhhIEJyYWlsbGUsIG9uZGUgbyBkcml2ZXIg6SBkdWFzIGxldHJhcyBkbw0KK2PzZGlnbyBkZSBpZGVudGlmaWNh5+NvPG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBsYW5nPUVOLVVTIHN0eWxlPSdmb250LXNpemU6MTEuMHB0O21zby1hbnNpLWxhbmd1YWdlOg0KK0VOLVVTJz48c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+ZG8gZHJpdmVyLjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gbGFuZz1FTi1VUyBzdHlsZT0nZm9udC1zaXplOjExLjBwdDttc28tYW5zaS1sYW5ndWFnZToNCitFTi1VUyc+PG86cD4mbmJzcDs8L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+YnJsdHR5LXNway5sc3Q6IEEgbGlzdGEgZGUgZHJpdmVycyBkZQ0KK3NpbnRldGl6YWRvciBkZSB2b3ogcXVlIGZvcmFtPG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+Y29uc3Ryde1kb3MgY29tbyBvYmpldG9zIGNvbXBhcnRpbGhhZG9zDQorZGluYW1pY2FtZW50ZSBjYXJyZWfhdmVpcywgZSw8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj5wb3J0YW50bywgcXVlIHBvZGUgc2VyIHNlbGVjaW9uYWRhIGVtIHRlbXBvDQorZGUgZXhlY3Xn428uIENhZGEgbGluaGE8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj5jb25zaXN0ZSBkbyBj82RpZ28gZGUgaWRlbnRpZmljYefjbyBkZSBkdWFzIGxldHJhcw0KK3BhcmEgdW0gZHJpdmVyLCB1bTxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPmNhcmFjdGVyIGRlIHRhYnVsYefjbywgZSB1bWEgZGVzY3Jp5+NvIGRvDQorc2ludGV0aXphZG9yIGRlIHZveiBxdWUgZXNzZTxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPmRyaXZlci48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdtc28tYmlkaS1mb250LXNpemU6MTEuMHB0Jz48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj5saWJicmx0dHlzZHJpdmVyLnNvLjE6IE8gZHJpdmVyIGNhcnJlZ+F2ZWwNCitkaW5hbWljYW1lbnRlIHBvciB1bTxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPnNpbnRldGl6YWRvciBkZSB2b3osIG9uZGUgbyBkcml2ZXIg6SBvIGRlDQorZHVhcyBsZXRyYXMgZG8gY/NkaWdvIGRlPG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+aWRlbnRpZmljYefjbyBkbyBkcml2ZXIuPC9zcGFuPjxzcGFuDQorc3R5bGU9J21zby1iaWRpLWZvbnQtc2l6ZToxMS4wcHQnPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J21zby1iaWRpLWZvbnQtc2l6ZToxMS4wcHQnPjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPjxzcGFuDQorc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPi9saWIvYnJsdHR5L3J3Lzwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7DQorbXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+T3MgYXJxdWl2b3MgY3JpYWRvcyBlbSB0ZW1wbyBkZSBleGVjdefjbywgcG9yDQorZXhlbXBsbywg6SBuZWNlc3PhcmlvLDxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPm1hcyBmYWx0YSByZWN1cnNvcyBkbyBzaXN0ZW1hLjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPi9ldGMvPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczsNCittc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj5icmx0dHkuY29uZjogcGFkcvVlcyBkbyBzaXN0ZW1hIHBhcmEgQlJMVFRZLjwvc3Bhbj48c3Bhbg0KK3N0eWxlPSdtc28tYmlkaS1mb250LXNpemU6MTEuMHB0Jz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj5icmxhcGkua2V5OiBBIGNoYXZlIGRlIGFjZXNzbyBwYXJhIEJybEFQSS48L3NwYW4+PHNwYW4NCitzdHlsZT0nbXNvLWJpZGktZm9udC1zaXplOjExLjBwdCc+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+PG86cD4mbmJzcDs8L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+L2V0Yy9icmx0dHkvPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LWZhbWlseToNCitUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj5BIGluc3RhbGHn428gZG8gQlJMVFRZIG7jbyBwb2RlIHRlciB0b2RvcyBvcw0KK3NlZ3VpbnRlcyB0aXBvcyBkZTxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPmFycXVpdm9zLiBFbGVzIHPjbyBjcmlhZG9zIGFwZW5hcyBxdWFuZG8NCituZWNlc3PhcmlvIGNvbSBiYXNlIG5hczxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPm9w5/VlcyBkZSBjb21waWxh5+NvIHF1ZSB2b2PqIHNlbGVjaW9uYXIgKHZlcg0KK3Nl5+NvIJNPcOf1ZXMgZGU8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj5Db21waWxh5+NvlCkuPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LWZhbWlseToNCitUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxvOnA+Jm5ic3A7PC9vOnA+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+PHNwYW4NCitzdHlsZT0nbXNvLXRhYi1jb3VudDoxJz6goKAgPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz4qLmNvbmY6DQorRHJpdmVyIGVzcGVj7WZpY28gcGFyYSBjb25maWd1cmHn428gZGUgZGFkb3MuIFNldXMgbm9tZXM8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKCgoCA8L3NwYW4+c+NvIG1haXMgb3UgbWVub3MgY29tbw0KK2JybHR0eS1kcml2ZXIuY29uZiwgb25kZSBkcml2ZXIg6SBvIGRlIGR1YXM8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKCgoCA8L3NwYW4+bGV0cmFzIGRvIGPzZGlnbyBkZSBpZGVudGlmaWNh5+NvIG5vDQorZHJpdmVyLjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J21zby1iaWRpLWZvbnQtc2l6ZToxMS4wcHQnPjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQgc3R5bGU9J21hcmdpbi1sZWZ0OjM1LjRwdCc+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPiouYXRiOg0KK3RhYmVsYXMgZGUgYXRyaWJ1dG9zLih2ZXIgc2Xn428gk1RhYmVsYXMgZGUgQXRyaWJ1dG9zlCkgU2V1cyBub21lcyBwYXJlY2VtIDxpPm5hbWU8L2k+LmF0Yi48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0IHN0eWxlPSd0ZXh0LWluZGVudDozNS40cHQnPjxzcGFuIHN0eWxlPSdtc28tYmlkaS1mb250LXNpemU6DQorMTEuMHB0Jz48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0IHN0eWxlPSd0ZXh0LWluZGVudDozNS40cHQnPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz4qLmF0aToNCitJbmNsdWlyIGFycXVpdm9zIGRlIHRhYmVsYXMgZGUgYXRyaWJ1dG9zLjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQgc3R5bGU9J3RleHQtaW5kZW50OjM1LjRwdCc+PHNwYW4gc3R5bGU9J21zby1iaWRpLWZvbnQtc2l6ZToNCisxMS4wcHQnPjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQgc3R5bGU9J21hcmdpbi1sZWZ0OjM1LjRwdCc+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPiouY3RiOg0KK0NvbnRyYefjbyB0YWJlbGFzLiAoVmVyIHNl5+NvIJNUYWJlbGEgZGUgQ29udHJh5+NvlCkuIFNldXMgbm9tZXMgcGFyZWNlbSBpZGlvbWENCis8aT5sYW5ndWFnZS1jb3VudHJ5LWxldmVsPC9pPi5jdGIuPG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dCBzdHlsZT0nbWFyZ2luLWxlZnQ6MzUuNHB0Jz48c3BhbiBzdHlsZT0nbXNvLWJpZGktZm9udC1zaXplOg0KKzExLjBwdCc+PG86cD4mbmJzcDs8L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dCBzdHlsZT0ndGV4dC1pbmRlbnQ6MzUuNHB0Jz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+Ki5jdGk6DQorSW5jbHVpciBhcnF1aXZvcyBwYXJhIHRhYmVsYXMgY29udHJh5+NvLjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQgc3R5bGU9J3RleHQtaW5kZW50OjM1LjRwdCc+PHNwYW4gc3R5bGU9J21zby1iaWRpLWZvbnQtc2l6ZToNCisxMS4wcHQnPjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQgc3R5bGU9J21hcmdpbi1sZWZ0OjM1LjRwdCc+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPioua3RiOg0KK1RhYmVsYXMgZGUgVGVjbGFzLihWZXIgc2Xn428gk1RhYmVsYXMgZGUgVGVjbGFzlCkuIFNldXMgbm9tZXMgcGFyZWNlbSA8aT5uYW1lPC9pPi5rdGIuPG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dCBzdHlsZT0ndGV4dC1pbmRlbnQ6MzUuNHB0Jz48c3BhbiBzdHlsZT0nbXNvLWJpZGktZm9udC1zaXplOg0KKzExLjBwdCc+PG86cD4mbmJzcDs8L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dCBzdHlsZT0ndGV4dC1pbmRlbnQ6MzUuNHB0Jz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+Ki5rdGk6DQorSW5jbHVpciBhcnF1aXZvcyBwYXJhIHRhYmVsYXMgZGUgdGVjbGFzLjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQgc3R5bGU9J3RleHQtaW5kZW50OjM1LjRwdCc+PHNwYW4gc3R5bGU9J21zby1iaWRpLWZvbnQtc2l6ZToNCisxMS4wcHQnPjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQgc3R5bGU9J21hcmdpbi1sZWZ0OjM1LjRwdCc+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPioudHRiOg0KK3RhYmVsYXMgZGUgdGV4dG8uIChWZXIgc2Xn428gVGFiZWxhcyBkZSBUZXh0bykuIFNldXMgbm9tZXMgcGFyZWNlbSA8aT5sYW5ndWFnZTwvaT4udHRiLjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQgc3R5bGU9J3RleHQtaW5kZW50OjM1LjRwdCc+PHNwYW4gc3R5bGU9J21zby1iaWRpLWZvbnQtc2l6ZToNCisxMS4wcHQnPjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQgc3R5bGU9J3RleHQtaW5kZW50OjM1LjRwdCc+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPioudHRpOg0KK0luY2x1aXIgYXJxdWl2b3MgZGUgdGV4dG8gcGFyYSB0YWJlbGFzLjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQgc3R5bGU9J3RleHQtaW5kZW50OjM1LjRwdCc+PHNwYW4gc3R5bGU9J21zby1iaWRpLWZvbnQtc2l6ZToNCisxMS4wcHQnPjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQgc3R5bGU9J21hcmdpbi1sZWZ0OjM1LjRwdCc+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPiouaGxwOg0KK0RyaXZlciBlc3BlY+1maWNvIHDhZ2luYXMgZGUgYWp1ZGEuIFNldXMgbm9tZXMgbWFpcyBvdSBtZW5vcyBjb21vIDxpPmJydHR0eS1kcml2ZXI8L2k+LmhscCwNCitvbmRlIGRyaXZlciDpIG8gZGUgZHVhcyBsZXRyYXMgZG8gY/NkaWdvIGRlIGlkZW50aWZpY2Hn428gZG8gZHJpdmVyLjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQgc3R5bGU9J21hcmdpbi1sZWZ0OjM1LjRwdCc+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPi92YXIvbGliL0JybEFQSS88L3NwYW4+PHNwYW4NCitzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+U+NvIHVzYWRvcyBzb3F1ZXRlcyBsb2NhaXMgcGFyYSBjb25leONvIGNvbSBhDQorSW50ZXJmYWNlIGRlIFByb2dyYW1h5+NvPG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+ZGUgQXBsaWNhdGl2b3MuPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LWZhbWlseToNCitUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj4vaW5jbHVkZS88L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5Og0KK1RpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPkFycXVpdm9zIGRlIGNhYmXnYWxobyBDIHBhcmEgYSBJbnRlcmZhY2UgZGUNCitQcm9ncmFtYefjbyBkZTxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPkFwbGljYXRpdm9zLiBTZXVzIG5vbWVzIHBhcmVjZW0gYnJsYXBpLTxpPmZ1bmN0aW9uPC9pPi5oLg0KK08gY2FiZedhbGhvPG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+cHJpbmNpcGFsIOkgYnJsYXBpLmguPC9zcGFuPjxzcGFuDQorc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPi9pbmNsdWRlL2JybHR0eS88L3NwYW4+PHNwYW4NCitzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+QXJxdWl2b3MgZGUgY2FiZedhbGhvIEMgcGFyYSBhY2Vzc2FyIGhhcmR3YXJlDQorYnJhaWxsZS4gU2V1cyBub21lcyBz4288bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj5icmxkZWZzLTxpPmRyaXZlcjwvaT4uaCAob25kZSA8aT5kcml2ZXI8L2k+IOkNCitvIGRlIGR1YXMgbGV0cmFzIGRvIGPzZGlnbyBkZTxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPmlkZW50aWZpY2Hn428gZG8gZHJpdmVyKS4gTyBjYWJl52FsaG8NCiticmxkZWZzLmggZSBhcGkuaCBz428gZm9ybmVjaWRvczxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPnBhcmEgY29tcGF0aWJpbGlkYWRlIGNvbSB2ZXJz9WVzIGFudGVyaW9yZXMgZQ0KK27jbyBkZXZlIHNlciB1c2Fkby48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj4vbWFuLzwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7DQorbXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+UOFnaW5hcyBtYW4uPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LWZhbWlseToNCitUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj5tYW4xLzxpPm5hbWU8L2k+LjE6IHDhZ2luYXMgbWFuIHBhcmEgY29tYW5kb3MNCitkbyB1c3XhcmlvIEJSTFRUWS1yZWxhY2lvbmFkb3MuPC9zcGFuPjxzcGFuIHN0eWxlPSdtc28tYmlkaS1mb250LXNpemU6MTEuMHB0Jz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj5tYW4zLzxpPm5hbWU8L2k+LjM6IHDhZ2luYXMgbWFuIHBhcmEgcm90aW5hcw0KK2RhIGJpYmxpb3RlY2EgZGUgSW50ZXJmYWNlIGRlPG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+UHJvZ3JhbWHn428gZGUgQXBsaWNhdGl2b3MuPG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nbXNvLWJpZGktZm9udC1zaXplOjExLjBwdCc+PG86cD4mbmJzcDs8L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+QWxndW5zIGFycXVpdm9zIG9wY2lvbmFpcyBxdWUgdm9j6iBkZXZlIGVzdGFyDQorY2llbnRlIGRlLCBhcGVzYXIgZGUgbuNvPG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+c2VyZW0gcGFydGUgZGEgaGllcmFycXVpYSBkZSBhcnF1aXZvcw0KK2luc3RhbGFkb3MsIHPjbzo8L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5Og0KKyJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQgc3R5bGU9J21hcmdpbi1sZWZ0OjM1LjRwdCc+PHNwYW4gc3R5bGU9J21zby1iaWRpLWZvbnQtc2l6ZToNCisxMS4wcHQnPjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPjxzcGFuDQorc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPi9ldGMvYnJsdHR5LmNvbmY8L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzOw0KK21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPk8gc2lzdGVtYSBkZSBhcnF1aXZvIGRlIGNvbmZpZ3VyYefjbyBwYWRy428uDQorySBjcmlhZG8gcGVsbzxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPmFkbWluaXN0cmFkb3IgZG8gc2lzdGVtYS4gVmVyIHNl5+NvIJNBcnF1aXZvDQorZGUgQ29uZmlndXJh5+NvlC48L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5Og0KKyJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPi9ldGMvYnJsdHR5LWRyaXZlci5wcmVmczwvc3Bhbj48c3Bhbg0KK3N0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj5PIGFycXVpdm8gZGUgY29uZmlndXJh5/VlcyBmb3JhbSBzYWx2b3MgYXMNCitwcmVmZXLqbmNpYXMgKDxpPmRyaXZlcjwvaT4g6SB1bTxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPmPzZGlnbyBkZSBkdWFzIGxldHJhcyBkZSBpZGVudGlmaWNh5+NvIGRvDQorZHJpdmVyKS4gySBjcmlhZG8gcGVsbzxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPmNvbWFuZG8gUFJFRlNBVkUuIFZlciBzZefjbyCTUHJlZmVy6m5jaWEgZGUNCitDb25maWd1cmHn42+ULjwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nbXNvLWJpZGktZm9udC1zaXplOjE4LjBwdCc+PG86cD4mbmJzcDs8L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nbXNvLWJpZGktZm9udC1zaXplOjE4LjBwdCc+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+My4yIC0gSW5zdGFsYefjbyBhIHBhcnRpciBkbyBUYXIgQmFsbDwvc3Bhbj48c3Bhbg0KK3N0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKCgIDwvc3Bhbj48L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPkVzdGUNCitwYXNzbyDpIGFwZW5hcyBxdWFuZG8gc2UgcXVlciBpbnN0YWxhciBhcGVuYXMgbyBCUkxUVFk8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj5yYXBpZGFtZW50ZSwg6SBhY3JlZGl0YXIgcXVlIG9zIHBhZHL1ZXMNCitlc3RlamFtIGNvcnJldG9zLjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxicj4NCis8c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKCgoCA8L3NwYW4+PC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz4xLg0KK0JhaXhlIG8gY/NkaWdvLiBVbSBhcnF1aXZvIGNoYW1hZG8gYnJsdHR5LTxpPnJlbGVhc2U8L2k+LnRhci5neiwgcG9yPG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+ZXhlbXBsbywgYnJsdHR5LTMuMC50YXIuZ3ouPG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD4mbmJzcDs8L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKCgoCA8L3NwYW4+PC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz4yLg0KK0Rlc2NvbXBhY3RlIG8gY/NkaWdvIGZvbnRlIGVtIHN1YSBlc3RydXR1cmEgaGllcuFycXVpY2EgbmF0aXZhLjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqA8L3NwYW4+PC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczsNCittc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIGxhbmc9RU4tVVMgc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQ7bXNvLWFuc2ktbGFuZ3VhZ2U6DQorRU4tVVMnPjxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj5FeC46IHRhci16eHZmDQorYnJsdHR5LXJlbGVhc2UudGFyLmd6LiA8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIGxhbmc9RU4tVVMgc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5Og0KKyJDb3VyaWVyIE5ldyI7bXNvLWFuc2ktbGFuZ3VhZ2U6RU4tVVMnPjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPklzc28gZGV2ZSBjcmlhciBvIGRpcmV083JpbyBicmx0dHktPGk+cmVsZWFzZTwvaT4uPG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD4mbmJzcDs8L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+My4gTXVkZSBwYXJhIG8gZGlyZXTzcmlvIGZvbnRlLCBjb25maWd1cmUsDQorY29tcGlsZSBlIGluc3RhbGUgQlJMVFRZLjwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6DQorIkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oDwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gPC9zcGFuPjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqA8L3NwYW4+PHNwYW4gc3R5bGU9J21zby10YWItY291bnQ6MSc+oKCgIDwvc3Bhbj48c3Bhbg0KK3N0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5jZCBicmx0dHktcmVsZWFzZTwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7DQorbXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+Jm5ic3A7Jm5ic3A7PHNwYW4NCitzdHlsZT0nbXNvLXRhYi1jb3VudDoxJz6goCA8L3NwYW4+Li9jb25maWd1cmU8L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5Og0KK1RpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxicj4NCis8L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPiZuYnNwOyZuYnNwOzxzcGFuIHN0eWxlPSdtc28tdGFiLWNvdW50Og0KKzEnPqCgIDwvc3Bhbj5tYWtlIGluc3RhbGw8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48YnI+DQorPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz4mbmJzcDsmbmJzcDtJc3RvIGRldmUgc2VyIGZlaXRvIGNvbW8NCityb290Ljwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PGJyPg0KKzxicj4NCis8c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKCgoCA8L3NwYW4+PC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5QYXJhDQorZGVzaW5zdGFsYXIgQlJMVFRZLCBmYedhOjwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6DQorIkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+PG86cD4mbmJzcDs8L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+PHNwYW4gc3R5bGU9J21zby10YWItY291bnQ6MSc+oKAgPC9zcGFuPmNkDQorYnJsdHR5LXJlbGVhc2U8L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQgc3R5bGU9J3RleHQtaW5kZW50OjM1LjRwdCc+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPm1ha2UNCit1bmluc3RhbGw8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj4zLjIuMSBPcOf1ZXMgZGUgQ29tcGlsYefjbzwvc3Bhbj48c3Bhbg0KK3N0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKCgIDwvc3Bhbj48L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPk8NCitwcmltZWlybyBwYXNzbyBuYSBjb25zdHJ15+NvIEJSTFRUWSDpIGNvbmZpZ3Vy4S1sbyBwYXJhIG8gc2V1PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+c2lzdGVtYSBlL291IHBhcmEgc3VhcyBuZWNlc3NpZGFkZXMgcGVzc29haXMuDQorSXN0byDpIGZlaXRvIGF0cmF26XMgZGE8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj5leGVjdefjbyBkbyBzY3JpcHQgbm8gZGlyZXTzcmlvIEJSTFRUWSBkZQ0KK27tdmVsIHN1cGVyaW9yLiBO83MgdGVudGFtb3M8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj5mYXplciBvIGFqdXN0ZSBwYWRy428gbyBjYXNvIG1haXMgY29tdW0sDQorZW50428sIHN1cG9uZG8gcXVlIHZvY+ogbuNvPG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+ZXN04SB0ZW50YW5kbyBmYXplciBhbGd1bWEgY29pc2EgZm9yYSBkbw0KK2NvbXVtLCB2b2PqIHBvZGUgbuNvIHByZWNpc2FyPG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+ZmF6ZXIgbmFkYSBtYWlzIGNvbXBsaWNhZG8gZG8gcXVlIGludm9jYXIgbw0KK3NjcmlwdCBzZW0gZXNwZWNpZmljYXI8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj50b2RhcyBvcOf1ZXMuPG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD4mbmJzcDs8L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBsYW5nPUVOLVVTIHN0eWxlPSdtc28tYW5zaS1sYW5ndWFnZTpFTi1VUyc+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+Li9jb25maWd1cmU8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIGxhbmc9RU4tVVMgc3R5bGU9J21zby1hbnNpLWxhbmd1YWdlOkVOLVVTJz48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj48c3Bhbg0KK3N0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5TZSwgbm8gZW50YW50bywgdm9j6iB0ZW0gYWxndW1hcyBuZWNlc3NpZGFkZXMNCitlc3BlY2lhaXMsIG91IG1lc21vIHNlPG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+dm9j6iBlc3ThIGFwZW5hcyBzZSBhdmVudHVyYW5kbywgdm9j6iBkZXZlDQorZGVzY29icmlyIHF1YWlzIHPjbyBzdWFzPG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+ZXNjb2xoYXMuPG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD4mbmJzcDs8L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+Li9jb25maWd1cmUgLS1oZWxwPC9zcGFuPjxzcGFuDQorc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxicj4NCis8c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKCgoCA8L3NwYW4+PC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5Wb2PqDQordGFtYultIGRldmUgdmVyaWZpY2FyIHNlIG8gYXJxdWl2byBSRUFETUUgbm8gc3ViZGlyZXTzcmlvIHF1ZTxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPmNvbnTpbSBvIGRyaXZlciBwYXJhIG8gc2V1IGRpc3BsYXkgQnJhaWxsZQ0KK3BhcmEgYWxndW1hcyBpbnN0cnXn9WVzPG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+YWRpY2lvbmFpcyBkZSBleGliaefjbyBlc3BlY+1maWNvLjwvc3Bhbj48c3Bhbg0KK3N0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48YnI+DQorPGJyPg0KKzxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKCgIDwvc3Bhbj48L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPjMuMi4xLjENCitQYWRy9WVzIGRvIFNpc3RlbWE8L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5Og0KKyJDb3VyaWVyIE5ldyInPjxicj4NCis8YnI+DQorPHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgoKAgPC9zcGFuPjwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+LS13aXRoLWRyaXZlci1icmFpbGxlDQorPSBkcml2ZXI8L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxicj4NCis8c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKCgoCA8L3NwYW4+PC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5Fc3BlY2lmaWNhcg0KK29zIGRyaXZlcnMgZG8gZGlzcGxheSBicmFpbGxlLCBxdWUgZGV2ZW0gZXN0YXIgbGlnYWRvcyBhbzxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPmJpbuFyaW8gQlJMVFRZLiBPcyBkcml2ZXJzIHF1ZSBu428gZXN0428NCitsaXN0YWRvcyBwb3IgZXN0YSBvcOfjbyBz4288bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj5jb25zdHJ17WRhcyBjb21vIG9iamV0b3MgY29tcGFydGlsaGFkb3MNCitkaW5hbWljYW1lbnRlIGNhcnJlZ+F2ZWlzIGU8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj5haW5kYSBwb2RlIHNlciBzZWxlY2lvbmFkYSBlbSB0ZW1wbyBkZQ0KK2V4ZWN15+NvLiBDYWRhIGRyaXZlciBkZXZlIHNlcjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPmlkZW50aWZpY2FkbyBwZWxvIHNldSBj82RpZ28gZGUgZHVhcyBsZXRyYXMNCitkZSBpZGVudGlmaWNh5+NvIGRvIGRyaXZlcjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPm91IHBlbG8gc2V1IG5vbWUgcHLzcHJpbyAoY29tcGxldG8gb3UNCithYnJldmlhZG8pLiBPcyBpZGVudGlmaWNhZG9yZXM8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj5kbyBkcml2ZXIgZGV2ZSBzZXIgc2VwYXJhZGEgZGEgb3V0cmEgcG9yIHVtYQ0KK/puaWNhIHbtcmd1bGEuIFNlIHVtPG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+aWRlbnRpZmljYWRvciBkbyBkcml2ZXIg6SBwcmVjZWRpZG8gcG9yIHVtDQorc2luYWwgZGUgbWVub3MgKC0pLCBlbnTjbzxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPmVzc2UgZHJpdmVyIOkgZXhjbHXtZG8gZGEgY29tcGlsYefjby4NCitRdWFscXVlciB1bWEgZGFzIHNlZ3VpbnRlczxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPnBhbGF2cmFzIHRhbWLpbSBwb2RlIHNlciB1c2FkbyBjb21vIG8NCitvcGVyYW5kbyBlc3RhIG9w5+NvOjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PG86cD4mbmJzcDs8L286cD48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj5hbGwgPG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+TGluayBkZSB0b2RvcyBvcyBkcml2ZXJzIHBhcmEgbyBiaW7hcmlvLiBO428NCitjb25zdHJ1YSBxdWFscXVlciB1bTxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPmRlbGVzIGNvbW8gb2JqZXRvcyBjb21wYXJ0aWxoYWRvcw0KK2RpbmFtaWNhbWVudGUgY2FycmVn4XZlaXMuIEVzdGE8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj5wYWxhdnJhIHRhbWLpbSBwb2RlIHNlciBlc3BlY2lmaWNhZG8gY29tbyBvDQor+mx0aW1vIGVsZW1lbnRvIGRlIHVtYTxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPmxpc3RhIGRlIGRyaXZlci4gSXN0byDpIGNvbW8gZXNwZWNpZmljYXIgbw0KK2RyaXZlciBkZWZhdWx0IHF1YW5kbyB0b2RvczxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPm9zIGRyaXZlcnMgZGV2ZW0gc2VyIGxpZ2Fkb3MgZGVudHJvLjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPi1hbGw6IEFwZW5hcyBjb25zdHJ1aXIgb3MgY29uZHV0b3JlcyBxdWUNCit0ZW5oYW0gc2lkbyBpbmNsde1kb3MgPG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+ZXhwbGljaXRhbWVudGUgYXRyYXbpcyBkZXN0YSBvcOfjby48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj5ubzogTuNvIGNvbnN0cnVhIHF1YWxxdWVyIGRyaXZlciA8c3QxOlBlcnNvbk5hbWUNCitQcm9kdWN0SUQ9ImVtIHR1ZG8uIElzc28iIHc6c3Q9Im9uIj5lbSB0dWRvLiBJc3NvPC9zdDE6UGVyc29uTmFtZT4g6Q0KK2VxdWl2YWxlbnRlIGE8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj5lc3BlY2lmaWNhciAtLXdpdGhvdXQtYnJhaWxsZS1kcml2ZXIuPG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+PG86cD4mbmJzcDs8L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+eWVzOiBDb25zdHJ1aXIgdG9kb3Mgb3MgZHJpdmVycyBjb21vIG9iamV0b3MNCitjb21wYXJ0aWxoYWRvczxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPmRpbmFtaWNhbWVudGUgY2FycmVn4XZlaXMuIE7jbyBsaWdhciBxdWFscXVlcg0KK3VtIGRlbGVzIGRlbnRybyBkbzxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPmJpbuFyaW8uIElzc28g6SBlcXVpdmFsZW50ZSBhIGVzcGVjaWZpY2FyDQorLS13aXRoLWJyYWlsbGUtZHJpdmVyLjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPlZlciBhcnF1aXZvDQorY29uZmlndXJh5+NvIGUgYSBsaW5oYSBkZSBvcOfjbyBkZSBjb21tYW5kbyCWYiBwYXJhIGEgc2VsZefjbyBkZTwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPnRlbXBvIGRlDQorZXhlY3Xn428uPC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48bzpwPiZuYnNwOzwvbzpwPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gbGFuZz1FTi1VUyBzdHlsZT0nZm9udC1zaXplOjExLjBwdDttc28tYW5zaS1sYW5ndWFnZToNCitFTi1VUyc+PHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPi0td2l0aC1icmFpbGxlLXBhcmFtZXRlcnM9DQorW2RyaXZlcjpdbmFtZSA9IHZhbHVlLCAuLi48L3NwYW4+PHNwYW4gbGFuZz1FTi1VUyBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7DQorbXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Ijttc28tYW5zaS1sYW5ndWFnZTpFTi1VUyc+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+RXNwZWNpZmlxdWUgYXMgY29uZmlndXJh5/VlcyBwYWRy428gZGUNCitwYXLibWV0cm8gcGFyYSBvcyBkcml2ZXJzIGRvPG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+ZGlzcGxheSBicmFpbGxlLiBTZSBvIG1lc21vIHBhcuJtZXRybyDpDQorZXNwZWNpZmljYWRvIG1haXMgZGUgdW1hIHZleiw8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj5hIHN1YSBhdHJpYnVp5+NvIOkgdXNhZGEuIFNlIHVtIG5vbWUgZGUNCitwYXLibWV0cm8g6SBxdWFsaWZpY2FkYSBwb3IgdW08bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj5kcml2ZXIsICh2ZXIgc2Xn428gk0PzZGlnb3MgZGUgSWRlbnRpZmljYefjbw0KK2RlIERyaXZlcnOUKSBlbnTjbyBlc3NhPG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+Y29uZmlndXJh5+NvIHPzIHNlIGFwbGljYSBhbyBkcml2ZXIsIHNlbuNvIOksDQorZW50428sIHF1ZSBzZSBhcGxpY2EgYTxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPnRvZG9zIG9zIGRyaXZlcnMuIFBhcmEgZXNzYSBkZXNjcmnn428gZG9zDQorcGFy4m1ldHJvcyBhY2VpdG9zIHBvciBhPG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+ZXNwZWNpZmljYefjbyBkZSBkcml2ZXIsIHBvciBmYXZvciB2ZXIgbmENCitkb2N1bWVudGHn428gZG8gZHJpdmVyLiBWZXI8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj5jb25maWd1cmHn428gZGUgYXJxdWl2byCTYnJhaWxsZS1wYXJhbWV0ZXJzlA0KK291IGxpbmhhIGRlIGNvbWFuZG8glmIuIDwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6DQorIkNvdXJpZXIgTmV3Iic+PGJyPg0KKzxicj4NCis8c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKCgoCA8L3NwYW4+PC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz4tLXdpdGgtYnJhaWxsZS1kZXZpY2UNCis9IDxpPmRldmljZTwvaT4sIC4uLjwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6DQorIkNvdXJpZXIgTmV3Iic+PGJyPg0KKzxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKCgIDwvc3Bhbj48L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPkVzcGVjaWZpY2ENCitvIGRpc3Bvc2l0aXZvIHBhZHLjbyBwYXJhIG8gcXVhbCBvIGRpc3BsYXkgYnJhaWxsZSBlc3ThPG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+bGlnYWRvLiAoVmVyIHNl5+NvIEVzcGVjaWZpY2Hn428gZGUNCitEaXNwb3NpdGl2byBCcmFpbGxlKS4gU2UgZXNzYTxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPm9w5+NvIG7jbyBmb3IgZXNwZWNpZmljYWRhLCBlbnTjbyB1c2I6IOkNCithc3N1bWlkbyBzZSBvIHN1cG9ydGUgVVNCPG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+ZXN04SBkaXNwb27tdmVsLCBlIHVtIHNpc3RlbWEgb3BlcmFjaW9uYWwgdGVtDQordW0gY2FtaW5obyBhcHJvcHJpYWRvPG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+cGFyYSBhIHBvcnRhIHByaW3hcmlhIHNlcmlhbCAoZGlzcG9zaXRpdm8pIOkNCithc3N1bWlkbyBzZSBu428uPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToNCisiQ291cmllciBOZXciJz48YnI+DQorPGJyPg0KKzxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKCgIDwvc3Bhbj48L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPi0td2l0aC1saWJicmFpbGxlDQorPSA8aT5kaXJlY3Rvcnk8L2k+PC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToNCisiQ291cmllciBOZXciJz48YnI+DQorPHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgoKAgPC9zcGFuPjwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+RXNwZWNpZmlxdWUNCitvIGxvY2FsIGRhIGluc3RhbGHn428gZG8gcGFjb3RlIExpYmJyYWlsbGUsIGUgY29tcGlsYXIgbzxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPmRyaXZlciBkaXNwbGF5IGJyYWlsbGUgTGliYnJhaWxsZSAoVmVyIHNl5+NvDQork1Jlc3Ryaef1ZXMgZGU8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj5Db21waWxh5+NvlCkuIFF1YWxxdWVyIHVtYSBkYXMgc2VndWludGVzDQorcGFsYXZyYXMgdGFtYultIHBvZGUgc2VyPG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+dXNhZG8gY29tbyBvIG9wZXJhZG8gcG9yIGVzc2Egb3Dn4286PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+PG86cD4mbmJzcDs8L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+bm88bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj5O428gY29tcGlsYXIgbyBkcml2ZXIuIElzc28g6SBlcXVpdmFsZW50ZSBhDQorZXNwZWNpZmljYXI8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj4tLXdpdGhvdXQtbGliYnJhaWxsZS48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj5ZZXM8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj5Db21waWxhciBvIGRyaXZlciBzZSBvIHBhY290ZSBwb2RlIHNlciBlbmNvbnRyYWRvDQorZW0gL3VzciwgL3Vzci9sb2NhbCw8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIGxhbmc9RU4tVVMgc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQ7bXNvLWFuc2ktbGFuZ3VhZ2U6DQorRU4tVVMnPjxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj4vdXNyL2xvY2FsL0xpYmJyYWlsbGUsDQorL3Vzci9sb2NhbC9saWJicmFpbGxlLCAvb3B0L0xpYmJyYWlsbGUsIG91PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBsYW5nPUVOLVVTIHN0eWxlPSdmb250LXNpemU6MTEuMHB0O21zby1hbnNpLWxhbmd1YWdlOg0KK0VOLVVTJz48c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+L29wdC9saWJicmFpbGxlLiA8L3NwYW4+PHNwYW4NCitzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+SXNzbyDpIGVxdWl2YWxlbnRlIGEgZXNwZWNpZmljYXIgLS13aXRoLWxpYmJyYWlsbGUuPG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+PG86cD4mbmJzcDs8L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+LS13aXRoLXRleHQtdGFibGU9PGk+ZmlsZTwvaT48L3NwYW4+PHNwYW4NCitzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKCgoCA8L3NwYW4+PC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5Fc3BlY2lmaXF1ZQ0KK3RhYmVsYSB0ZXh0byBidWlsZC1pbiAocmV0b3JubykoVmVyIHNl5+NvIJNUYWJlbGFzIGRlPG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+VGV4dG+UKS4gQSB0YWJlbGEgZXNwZWNpZmljYWRhIOkgbGlnYWRhIGFvDQorYmlu4XJpbyBCUkxUVFksIGUg6SB1c2FkbzxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPnRhbnRvIGVtIGZhbGhhcyBkZSBhdXRvc2VsZefjbyBxdWFudG8gbmENCitzb2xpY2l0YefjbyBkZSB0YWJlbGEgcXVlIG7jbzxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPnBvZGUgc2VyIGNhcnJlZ2Fkby4gTyBjYW1pbmhvIGFic29sdXRvIHBhcmENCit1bWEgdGFiZWxhIGZvcmEgZG8gY/NkaWdvPG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+Zm9udGUgcG9kZSBzZXIgZXNwZWNpZmljYWRvLiBBIGV4dGVuc+NvDQorky50dGKUIOkgb3BjaW9uYWwuIEVzdGE8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj5jb25maWd1cmHn428gcG9kZSBzZXIgYWx0ZXJhZGEgY29tIGENCitwcmVmZXLqbmNpYSBUYWJlbGEgZGUgdGV4dG8uIFNlPG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+ZXN0YSBvcOfjbyBu428gZm9yIGVzcGVjaWZpY2FkYSwgZW50428gZW4tbmFiY2MsDQorbm9ybWFsbWVudGUoQW3pcmljYTxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPmRvIE5vcnRlKSB1c2EgOCBwb250b3MgdmVyIJND82RpZ28gQnJhaWxsZQ0KK05vcnRlLUFtZXJpY2Fub5QuIFZlcjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPmNvbmZpZ3VyYefjbyBkZSCTVGFiZWxhIGRlIFRleHRvlCBvdSBjb21hbmRvDQorlnQuIEVzdGEgY29uZmlndXJh5+NvPG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+cG9kZSBzZXIgbXVkYWRhIGNvbSBhIHByZWZlcupuY2lhIJNUYWJlbGEgZGUNCitUZXh0b5QuPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48YnI+DQorPGJyPg0KKzxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKCgIDwvc3Bhbj48L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPi0td2l0aC1hdHRyaWJ1dGVzLXRhYmxlPTxpPmZpbGU8L2k+PC9zcGFuPjxzcGFuDQorc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxicj4NCis8c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKCgoCA8L3NwYW4+PC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5Fc3BlY2lmaXF1ZQ0KK2EgdGFiZWxhIHRleHRvIGRlIGF0cmlidXRvcyBidWlsdC1pbiAocmV0b3JubykoVmVyIHNl5+NvPG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+k0F0cmlidXRvcyBkZSBUcmFkdefjb5QpLiBBIHRhYmVsYSBlc3BlY2lmaWNhZGENCivpIGxpZ2FkYSBhbyBiaW7hcmlvPG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+QlJMVFRZLCBlIOkgdXNhZG8gcXVhbmRvIGEgdGFiZWxhIHNvbGljaXRhZGENCitu428gcG9kZSBzZXIgY2FycmVnYWRhLjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPmNhbWluaG8gYWJzb2x1dG8gcGFyYSB1bWEgdGFiZWxhIGZvcmEgZG8NCitj82RpZ28gZm9udGUgcG9kZSBzZXI8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj5lc3BlY2lmaWNhZG8uIEEgZXh0ZW5z428gZG8gky5hdGKUIOkNCitvcGNpb25hbC4gU2UgZXNzYSBvcOfjbyBu428gZm9yPG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+ZXNwZWNpZmljYWRhLCBlbnTjbyBvcyBhdHJpYnV0b3Mgc+NvDQorYXNzdW1pZG9zLiBNdWRlIG8gYXRyaWJ1dG8gc2U8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj52b2PqIGdvc3RhcmlhIHF1ZSBlbGUgZm9zc2UgZmVpdG8g4CBtb2RhDQorYW50aWdhLiBWZWphIGEgdGFiZWxhPG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+YXRyaWJ1dG9zIGRlIGFycXVpdm8gZGUgY29uZmlndXJh5+NvIGUgdW1hDQorb3Dn428gZGUgbGluaGEgZGUgY29tYW5kbzxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPnBhcmEgc2VsZefjbyBkZSB0ZW1wbyBkZSBleGVjdefjbyAtYS4gRXN0YQ0KK2NvbmZpZ3VyYefjbyBwb2RlIHNlcjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPmFsdGVyYWRhIGNvbSBhIHByZWZlcupuY2lhIGF0cmlidXRvcyBkYQ0KK3RhYmVsYS48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj4tLXdpdGgtc3BlZWNoLWRyaXZlciA9IGRyaXZlcjwvc3Bhbj48c3Bhbg0KK3N0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48YnI+DQorPHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgoKAgPC9zcGFuPjwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+RXNwZWNpZmljYXINCitvcyBkcml2ZXJzIGRlIHNpbnRldGl6YWRvciBkZSB2b3ogcXVlIHPjbyBsaWdhZG9zIGFvPG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+Ymlu4XJpbyBCUkxUVFkuIEVzc2VzIGRyaXZlcnMgbuNvIGVzdONvDQorbGlzdGFkb3MgbmVzdGEgb3Dn428gc+NvPG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+Y29uc3Ryde1kYXMgY29tbyBvYmpldG9zIGNvbXBhcnRpbGhhZG9zDQorZGluYW1pY2FtZW50ZSBjYXJyZWfhdmVpcyBlPG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+YWluZGEgcG9kZSBzZXIgc2VsZWNpb25hZG8gZW0gdGVtcG8gZGUNCitleGVjdefjby4gQ2FkYSBkcml2ZXIgZGV2ZSBzZXI8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj5pZGVudGlmaWNhZG8gcGVsbyBzZXUgY/NkaWdvIGRlIGR1YXMgbGV0cmFzDQorZGUgaWRlbnRpZmljYefjbyBkbyBkcml2ZXI8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj5vdSBwZWxvIHNldSBub21lIHBy83ByaW8gKGNvbXBsZXRvIG91DQorYWJyZXZpYWRvKS4gT3MgaWRlbnRpZmljYWRvcmVzPG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+ZG8gZHJpdmVyIGRldmUgc2VyIHNlcGFyYWRvcyBwb3IgdW1hIPpuaWNhDQordu1yZ3VsYS4gU2UgaWRlbnRpZmljYWRvcjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPmRvIGRyaXZlciDpIHByZWNlZGlkbyBwb3IgdW0gc2luYWwgZGUgbWVub3MNCisoLSksIGVudONvIGVzc2UgZHJpdmVyIOk8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj5leGNsde1kbyBkYSBjb21waWxh5+NvLiBRdWFscXVlciB1bWEgZGFzDQorc2VndWludGVzIHBhbGF2cmFzIHRhbWLpbTxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPnBvZGUgc2VyIHVzYWRhcyBjb21vIG9wZXJhZG9yZXMgZXN0YSBvcOfjbzo8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxvOnA+Jm5ic3A7PC9vOnA+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+YWxsPG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+bGluayBkZSB0b2RvcyBvcyBkcml2ZXJzIHBhcmEgbyBiaW7hcmlvLiBO428NCitjb21waWxhIHF1YWxxdWVyIHVtPG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+ZGVsZXMgY29tbyBvYmpldG9zIGNvbXBhcnRpbGhhZG9zDQorZGluYW1pY2FtZW50ZSBjYXJyZWfhdmVpcy4gRXN0YTxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPnBhbGF2cmEgdGFtYultIHBvZGUgc2VyIGVzcGVjaWZpY2FkYSBjb21vIG8NCiv6bHRpbW8gZWxlbWVudG8gZGUgdW1hPG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+bGlzdGEgZGUgZHJpdmVyLiBJc3RvIOkgY29tbyBlc3BlY2lmaWNhciBvDQorZHJpdmVyIGRlZmF1bHQgcXVhbmRvIHRvZG9zPG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+b3MgZHJpdmVycyBkZXZlbSBzZXIgbGlnYWRvcy48L3NwYW4+PHNwYW4NCitzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PGJyPg0KKzwvc3Bhbj48c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKCgoKCgoKCgoKCgoCA8L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+PHNwYW4NCitzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+LWFsbDxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPmFwZW5hcyBjb25zdHJ1aXIgb3MgZHJpdmVycyBxdWUgdGVuaGFtIHNpZG8NCitpbmNsde1kb3MgZXhwbGljaXRhbWVudGU8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj5hdHJhdulzIGRlc3RhIG9w5+NvLjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPm5vPG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+buNvIGNvbnN0cnVhIHF1YWxxdWVyIGRyaXZlci4gPC9zcGFuPjxzcGFuDQorbGFuZz1FTi1VUyBzdHlsZT0nZm9udC1zaXplOjExLjBwdDttc28tYW5zaS1sYW5ndWFnZTpFTi1VUyc+SXNzbyDpIGVxdWl2YWxlbnRlDQorYSBlc3BlY2lmaWNhcjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gbGFuZz1FTi1VUyBzdHlsZT0nZm9udC1zaXplOjExLjBwdDttc28tYW5zaS1sYW5ndWFnZToNCitFTi1VUyc+PHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPndpdGhvdXQtc3BlZWNoLWRyaXZlci48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj55ZXM8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj5jb21waWxhciB0b2RvcyBvcyBkcml2ZXJzIGNvbW8gb2JqZXRvcw0KK2NvbXBhcnRpbGhhZG9zIGRpbmFtaWNhbWVudGU8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj5jYXJyZWfhdmVpcy4gTuNvIGxpZ2FyIHF1YWxxdWVyIHVtIGRlbGVzDQorZGVudHJvIGRvIGJpbuFyaW8uIElzc28g6TxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPmVxdWl2YWxlbnRlIGEgZXNwZWNpZmljYXIgLS13aXRoLXNwZWVjaC1kcml2ZXIuPG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD4mbmJzcDs8L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKCgoCA8L3NwYW4+PC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5WZWphDQorYSBjb25maWd1cmHn428gZG8gYXJxdWl2byCTc3BlZWNoLWRyaXZlcpQgZSBhIG9w5+NvIC1zIGRlIGxpbmhhPG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+ZGUgY29tYW5kbyBwYXJhIHNlbGXn428gZGUgdGVtcG8gZGUgZXhlY3Xn428uPC9zcGFuPjxzcGFuDQorc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxicg0KK3N0eWxlPSdtc28tc3BlY2lhbC1jaGFyYWN0ZXI6bGluZS1icmVhayc+DQorPCFbaWYgIXN1cHBvcnRMaW5lQnJlYWtOZXdMaW5lXT48YnIgc3R5bGU9J21zby1zcGVjaWFsLWNoYXJhY3RlcjpsaW5lLWJyZWFrJz4NCis8IVtlbmRpZl0+PC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIGxhbmc9RU4tVVMgc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQ7bXNvLWFuc2ktbGFuZ3VhZ2U6DQorRU4tVVMnPjxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj4tLXdpdGgtc3BlZWNoLXBhcmFtZXRlcnMgPSBbPGk+ZHJpdmVyPC9pPjpdPGk+bmFtZQ0KKz0gdmFsdWUsPC9pPiAuLi48L3NwYW4+PHNwYW4gbGFuZz1FTi1VUyBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6DQorIkNvdXJpZXIgTmV3Ijttc28tYW5zaS1sYW5ndWFnZTpFTi1VUyc+PGJyPg0KKzxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKCgIDwvc3Bhbj48L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPkVzcGVjaWZpcXVlDQorb3MgcGFy4m1ldHJvcyBkYXMgY29uZmlndXJh5/VlcyBwYWRy428gcGFyYSBvcyBkcml2ZXJzIGRlPG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+c2ludGV0aXphZG9yIGRlIHZvei4gU2UgbyBtZXNtbyBwYXLibWV0cm8g6Q0KK2VzcGVjaWZpY2FkbyBtYWlzIGRlIHVtYTxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPnZlei4gU2UgdW0gbm9tZSBkZSBwYXLibWV0cm8g6SBxdWFsaWZpY2Fkbw0KK3BvciB1bSBkcml2ZXIgKFZlciBD82RpZ288bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj5kZSBJZGVudGlmaWNh5+NvIGRlIERyaXZlcnMpLCBlbnTjbyBlc3NhDQorY29uZmlndXJh5+NvIHPzIHNlIGFwbGljYTxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPm5lc3NlIGRyaXZlci4gUGFyYSBvYnRlciB1bWEgZGVzY3Jp5+NvIGRvcw0KK3BhcuJtZXRyb3MgYWNlaXRvcyBwb3IgdW08bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj5kcml2ZXIgZXNwZWPtZmljbywgY29uc3VsdGUgYSBkb2N1bWVudGHn428gZG8NCitkcml2ZXIuIFZlciBjb25maWd1cmHn4288bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj6Tc3BlZWNoLXBhcmFtZXRlcnOUIG91IGNvbWFuZG8gky1zlC48L3NwYW4+PHNwYW4NCitzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PGJyPg0KKzxicj4NCis8c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKCgoCA8L3NwYW4+PC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz4tLXdpdGgtZmxpdGU9PGk+ZGlyZWN0b3J5PC9pPg0KKzwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PGJyPg0KKzxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKCgIDwvc3Bhbj48L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPkVzcGVjaWZpcXVlDQorbyBsb2NhbCBpbnN0YWxh5+NvIGRvIEZlc3RpdmFsTGl0ZSBubyBwYWNvdGUgdGV4dC10bzxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPnNwZWVjaCBlIGNvbXBpbGEgbyBkcml2ZXIgc2ludGV0aXphZG9yIGRlIHZveg0KK0Zlc3RpdmFsTGl0ZSAoVmVyPG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+k1Jlc3Ryaef1ZXMgZGUgQ29tcGlsYefjb5QpLiBRdWFscXVlciB1bWEgZGFzDQorc2VndWludGVzIHBhbGF2cmFzPG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+dGFtYultIHBvZGUgc2VyIHVzYWRvIGNvbW8gbyBvcGVyYWRvcmVzIGVzdGENCitvcOfjbzo8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj5ubzxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPm7jbyBjb21waWxhciBvIGRyaXZlci4gSXNzbyDpIGVxdWl2YWxlbnRlIGENCitlc3BlY2lmaWNhciCWd2l0aG91dDxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPmZsaXRlLjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxvOnA+Jm5ic3A7PC9vOnA+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+eTxzcGFuDQorc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPmVzPG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+Y29tcGlsYXIgbyBkcml2ZXIgc2UgbyBwYWNvdGUgcG9kZSBzZXIgZW5jb250cmFkbw0KK2VtIC91c3IsIC91c3IvbG9jYWwsPG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+L3Vzci9sb2NhbC9GZXN0aXZhbExpdGUsIC91c3IvbG9jYWwvZmxpdGUsDQorL29wdC9GZXN0aXZhbExpdGUsIG91PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+L29wdC9mbGl0ZS4gSXNzbyDpIGVxdWl2YWxlbnRlIGEgZXNwZWNpZmljYXINCistLXdpdGgtZmxpdGUuPG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PGJyPg0KKzxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKCgIDwvc3Bhbj48L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPi0td2l0aC1mbGl0ZS1sYW5ndWFnZT08aT5sYW5ndWFnZTwvaT48L3NwYW4+PHNwYW4NCitzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PGJyPg0KKzxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKCgIDwvc3Bhbj48L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPkVzcGVjaWZpcXVlDQorbyBpZGlvbWEgdXNhZG8gcXVlIG8gdGV4dC10by1zcGVlY2ggZG8gRmVzdGl2YWxMaXRlLiBPPG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+aWRpb21hIHBhZHLjbyDpIFVTRU5HTElTSC48L3NwYW4+PHNwYW4NCitzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PGJyPg0KKzxicj4NCis8c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKCgoCA8L3NwYW4+PC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz4tLXdpdGgtZmxpdGUtbGV4aWNvbj08aT5sZXhpY29uPC9pPg0KKzwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PGJyPg0KKzxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKCgIDwvc3Bhbj48L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPkVzcGVjaWZpcXVlDQorbyBs6XhpY28gcXVlIG8gdGV4dC10by1zcGVlY2ggRmVzdGl2YWxMaXRlIHVzYS4gTyBs6XhpY288bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj5wYWRy428g6SBjbXVsZXguPC9zcGFuPjxzcGFuDQorc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxicj4NCis8YnI+DQorPHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgoKAgPC9zcGFuPjwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+LS13aXRoLWZsaXRlLXZvaWNlPTxpPnZvaWNlPC9pPg0KKzwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PGJyPg0KKzxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKCgIDwvc3Bhbj48L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPkVzcGVjaWZpcXVlDQorYSB2b3ogcXVlIG8gdGV4dC10by1zcGVlY2ggRmVzdGl2YWxMaXRlIHVzYS4gQSB2b3ogcGFkcuNvPG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+6SBjbXVfdXNfa2FsMTYuPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LWZhbWlseToNCitUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48YnIgc3R5bGU9J21zby1zcGVjaWFsLWNoYXJhY3RlcjoNCitsaW5lLWJyZWFrJz4NCis8IVtpZiAhc3VwcG9ydExpbmVCcmVha05ld0xpbmVdPjxiciBzdHlsZT0nbXNvLXNwZWNpYWwtY2hhcmFjdGVyOmxpbmUtYnJlYWsnPg0KKzwhW2VuZGlmXT48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj4tLSB3aXRoLW1pa3JvcHVoZT08aT5kaXJlY3Rvcnk8L2k+IDwvc3Bhbj48c3Bhbg0KK3N0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48YnI+DQorPHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgoKAgPC9zcGFuPjwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+RXNwZWNpZmlxdWUNCitvIGxvY2FsIGluc3RhbGHn428gZG8gcGFjb3RlIHRleHQtdG8tc3BlZWNoIGRhIE1pa3JvcHVoZSw8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj5lIGNvbXBpbGFyIG8gZHJpdmVyIHNpbnRldGl6YWRvciBkZSB2b3oNCitNaWtyb3B1aGUgKFZlciBSZXN0cmnn9WVzIGRlPG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+Q29tcGlsYefjbykuIFF1YWxxdWVyIHVtYSBkYXMgc2VndWludGVzDQorcGFsYXZyYXMgdGFtYultIHBvZGUgc2VyIHVzYWRvPG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+Y29tbyBvIG9wZXJhbmRvIGVzdGEgb3Dn4286PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PGJyPg0KKzxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKCgIDwvc3Bhbj48L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPm5vPG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+buNvIGNvbXBpbGFyIG8gZHJpdmVyLiBJc3NvIOkgZXF1aXZhbGVudGUgYQ0KK2VzcGVjaWZpY2FyIJZ3aXRob3V0PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+bWlrcm9wdWhlLjwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6DQorVGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+PG86cD4mbmJzcDs8L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+eWVzPG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+Y29tcGlsYXIgbyBkcml2ZXIgc2UgbyBwYWNvdGUgcG9kZSBzZXIgZW5jb250cmFkbw0KK2VtIC91c3IsIC91c3IvbG9jYWwsPG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+L3Vzci9sb2NhbC9NaWtyb3B1aGUsIC91c3IvbG9jYWwvbWlrcm9wdWhlLA0KKy9vcHQvTWlrcm9wdWhlLCBvdTxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPi9vcHQvbWlrcm9wdWhlLiBJc3NvIOkgZXF1aXZhbGVudGUgYQ0KK2VzcGVjaWZpY2FyIC0td2l0aC1taWtyb3B1aGUuPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToNCisiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj4tLXdpdGgtc3BlZWNoZD08aT5kaXJlY3Rvcnk8L2k+IDwvc3Bhbj48c3Bhbg0KK3N0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48YnI+DQorPHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgoKAgPC9zcGFuPjwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+RXNwZWNpZmlxdWUNCitvIGxvY2FsIGRhIGluc3RhbGHn428gZG8gcGFjb3RlIHRleHQtdG8tc3BlZWNoIGRvIHNwZWVjaDxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPmRpc3BhdGNoZXIsIGUgY29tcGlsYXIgbyBkcml2ZXIgc2ludGV0aXphZG9yDQorZGUgdm96IGRvIHNwZWVjaDxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPmRpc3BhdGNoZXIuIFF1YWxxdWVyIHVtYSBkYXMgc2VndWludGVzDQorcGFsYXZyYXMgdGFtYultIHBvZGUgc2VyIHVzYWRvPG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+Y29tbyBvIG9wZXJhbmRvIGVzdGEgb3Dn4286PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PGJyPg0KKzxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKCgIDwvc3Bhbj48L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPm5vPG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+buNvIGNvbXBpbGFyIG8gZHJpdmVyLiBJc3NvIOkgZXF1aXZhbGVudGUgYQ0KK2VzcGVjaWZpY2FyIJZ3aXRob3V0PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+c3BlZWNoZC48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48YnI+DQorPHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgoKAgPC9zcGFuPjwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+eWVzPG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKAgPC9zcGFuPmNvbXBpbGFyIG8gZHJpdmVyIHNlIG8gcGFjb3RlIHBvZGUgc2VyDQorZW5jb250cmFkbyBlbSAvdXNyLDxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gbGFuZz1FTi1VUyBzdHlsZT0nZm9udC1zaXplOjExLjBwdDttc28tYW5zaS1sYW5ndWFnZToNCitFTi1VUyc+PHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgIDwvc3Bhbj4vdXNyL2xvY2FsLA0KKy91c3IvbG9jYWwvc3BlZWNoLWRpc3BhdGNoZXIsIC91c3IvbG9jYWwvc3BlZWNoZCw8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIGxhbmc9RU4tVVMgc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQ7bXNvLWFuc2ktbGFuZ3VhZ2U6DQorRU4tVVMnPjxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goCA8L3NwYW4+L29wdC9zcGVlY2gtZGlzcGF0Y2hlciwgb3UNCisvb3B0L3NwZWVjaGQuIElzc28g6SBlcXVpdmFsZW50ZSBhPG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBsYW5nPUVOLVVTIHN0eWxlPSdmb250LXNpemU6MTEuMHB0O21zby1hbnNpLWxhbmd1YWdlOg0KK0VOLVVTJz48c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKAgPC9zcGFuPmVzcGVjaWZpY2FyIC0td2l0aC1zcGVlY2hkLjwvc3Bhbj48c3Bhbg0KK2xhbmc9RU4tVVMgc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyI7DQorbXNvLWFuc2ktbGFuZ3VhZ2U6RU4tVVMnPjxiciBzdHlsZT0nbXNvLXNwZWNpYWwtY2hhcmFjdGVyOmxpbmUtYnJlYWsnPg0KKzwhW2lmICFzdXBwb3J0TGluZUJyZWFrTmV3TGluZV0+PGJyIHN0eWxlPSdtc28tc3BlY2lhbC1jaGFyYWN0ZXI6bGluZS1icmVhayc+DQorPCFbZW5kaWZdPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPjxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKA8L3NwYW4+PC9zcGFuPjxzcGFuDQorc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPi0td2l0aC1zd2lmdCA9PGk+IGRpcmVjdG9yeTwvaT4gPC9zcGFuPjxzcGFuDQorc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxicj4NCis8c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKCgoCA8L3NwYW4+PC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5Fc3BlY2lmaXF1ZQ0KK28gbG9jYWwgZGEgaW5zdGFsYefjbyBkbyBwYWNvdGUgZGUgdGV4dC10by1zcGVlY2ggU3dpZnQsIGU8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj5jb21waWxhciBvIGRyaXZlciBzaW50ZXRpemFkb3IgZGUgdm96IFN3aWZ0Lg0KK1F1YWxxdWVyIHVtYSBkYXM8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj5zZWd1aW50ZXMgcGFsYXZyYXMgdGFtYultIHBvZGUgc2VyIHVzYWRvIGNvbW8NCitvIG9wZXJhbmRvIGVzdGEgb3Dn4286PC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToNCisiQ291cmllciBOZXciJz48YnI+DQorPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz48c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oDwvc3Bhbj48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj5ubzxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPm7jbyBjb21waWxhciBvIGRyaXZlci4gSXNzbyDpIGVxdWl2YWxlbnRlIGENCitlc3BlY2lmaWNhciAtlndpdGhvdXQ8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj5zd2lmdC48L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzOw0KK21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxiciBzdHlsZT0nbXNvLXNwZWNpYWwtY2hhcmFjdGVyOmxpbmUtYnJlYWsnPg0KKzwhW2lmICFzdXBwb3J0TGluZUJyZWFrTmV3TGluZV0+PGJyIHN0eWxlPSdtc28tc3BlY2lhbC1jaGFyYWN0ZXI6bGluZS1icmVhayc+DQorPCFbZW5kaWZdPjwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+eWVzPG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+Y29tcGlsYXIgbyBkcml2ZXIgc2UgbyBwYWNvdGUgcG9kZSBzZXINCitlbmNvbnRyYWRvIGVtIC91c3IsIC91c3IvbG9jYWwsPG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBsYW5nPUVOLVVTIHN0eWxlPSdmb250LXNpemU6MTEuMHB0O21zby1hbnNpLWxhbmd1YWdlOg0KK0VOLVVTJz48c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+L3Vzci9sb2NhbC9Td2lmdCwNCisvdXNyL2xvY2FsL3N3aWZ0LCAvb3B0L1N3aWZ0LCBvdSAvb3B0L3N3aWZ0LiA8L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToNCisxMS4wcHQnPklzc28g6TxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPmVxdWl2YWxlbnRlIGEgZXNwZWNpZmljYXIgLS13aXRoLXN3aWZ0Ljwvc3Bhbj48c3Bhbg0KK3N0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48YnI+DQorPGJyPg0KKzxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKCgIDwvc3Bhbj48L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPi0td2l0aC10aGV0YQ0KKz0gPGk+ZGlyZWN0b3J5PC9pPiA8L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5Og0KKyJDb3VyaWVyIE5ldyInPjxicj4NCis8c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKCgoCA8L3NwYW4+PC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5Fc3BlY2lmaXF1ZQ0KK28gbG9jYWwgZGEgaW5zdGFsYefjbyBkbyBwYWNvdGUgdGV4dC10by1zcGVlY2ggZG8gVGhldGEsIGU8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj5jb21waWxhciBvIGRyaXZlciBzaW50ZXRpemFkb3IgZGUgdm96IFRoZXRhIChWZXINCiuTUmVzdHJp5/VlcyBkZTxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPkNvbXBpbGHn42+UKS4gUXVhbHF1ZXIgdW1hIGRhcyBzZWd1aW50ZXMNCitwYWxhdnJhcyB0YW1i6W0gcG9kZSBzZXI8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj51c2FkbyBjb21vIG8gb3BlcmFuZG8gZXN0YSBvcOfjbzo8L3NwYW4+PHNwYW4NCitzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PGJyDQorc3R5bGU9J21zby1zcGVjaWFsLWNoYXJhY3RlcjpsaW5lLWJyZWFrJz4NCis8IVtpZiAhc3VwcG9ydExpbmVCcmVha05ld0xpbmVdPjxiciBzdHlsZT0nbXNvLXNwZWNpYWwtY2hhcmFjdGVyOmxpbmUtYnJlYWsnPg0KKzwhW2VuZGlmXT48L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPm5vPG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+buNvIGNvbXBpbGFyIG8gZHJpdmVyLiBJc3NvIOkgZXF1aXZhbGVudGUgYQ0KK2VzcGVjaWZpY2FyIC2Wd2l0aG91dDxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPnRoZXRhLjwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7DQorbXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PGJyPg0KKzwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+PHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqA8L3NwYW4+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+WWVzPG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+Y29tcGlsYXIgbyBkcml2ZXIgc2UgbyBwYWNvdGUgcG9kZSBzZXINCitlbmNvbnRyYWRvIGVtIC91c3IsIC91c3IvbG9jYWwsPG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+L3Vzci9sb2NhbC9UaGV0YSwgL3Vzci90aGV0YS9sb2NhbCwgL29wdC9UaGV0YSwNCitvdSAvb3B0L3RoZXRhLiBJc3NvIOk8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj5lcXVpdmFsZW50ZSBhIGVzcGVjaWZpY2FyIC0td2l0aC10aGV0YS48L3NwYW4+PHNwYW4NCitzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PGJyPg0KKzxicj4NCis8c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKCgoCA8L3NwYW4+PC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz4tLXdpdGgtdmlhdm9pY2U9PGk+ZGlyZWN0b3J5PC9pPjoNCis8L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxicj4NCis8c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKCgoCA8L3NwYW4+PC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5Fc3BlY2lmaXF1ZQ0KK28gbG9jYWwgZGEgaW5zdGFsYefjbyBkbyBwYWNvdGUgdGV4dC10by1zcGVlY2ggZG88bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj5WaWFWb2ljZSwgZSBjb21waWxhciBvIGRyaXZlciBzaW50ZXRpemFkb3IgZGUNCit2b3ogZG8gVmlhVm9pY2UgKFZlcjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPlJlc3Ryaef1ZXMgZGUgQ29tcGlsYefjbykuIFF1YWxxdWVyIHVtYSBkYXMNCitzZWd1aW50ZXMgcGFsYXZyYXMgdGFtYultPG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+cG9kZSBzZXIgdXNhZG8gY29tbyBvIG9wZXJhbmRvIGVzdGEgb3Dn4286PC9zcGFuPjxzcGFuDQorc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxicg0KK3N0eWxlPSdtc28tc3BlY2lhbC1jaGFyYWN0ZXI6bGluZS1icmVhayc+DQorPCFbaWYgIXN1cHBvcnRMaW5lQnJlYWtOZXdMaW5lXT48YnIgc3R5bGU9J21zby1zcGVjaWFsLWNoYXJhY3RlcjpsaW5lLWJyZWFrJz4NCis8IVtlbmRpZl0+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKCgoCA8L3NwYW4+PC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5ubzxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPm7jbyBjb21waWxhciBvIGRyaXZlci4gSXNzbyDpIGVxdWl2YWxlbnRlIGENCitlc3BlY2lmaWNhciCWLXdpdGhvdXQ8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj52aWF2b2ljZS48L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5Og0KK1RpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxiciBzdHlsZT0nbXNvLXNwZWNpYWwtY2hhcmFjdGVyOg0KK2xpbmUtYnJlYWsnPg0KKzwhW2lmICFzdXBwb3J0TGluZUJyZWFrTmV3TGluZV0+PGJyIHN0eWxlPSdtc28tc3BlY2lhbC1jaGFyYWN0ZXI6bGluZS1icmVhayc+DQorPCFbZW5kaWZdPjwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+WWVzPG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+Y29tcGlsYXIgbyBkcml2ZXIgc2UgbyBwYWNvdGUgcG9kZSBzZXIgZW5jb250cmFkbw0KK2VtIC91c3IsIC91c3IvbG9jYWwsPG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+L3Vzci9sb2NhbC9WaWFWb2ljZSwgL3Vzci9sb2NhbC9WaWFWb2ljZSwNCisvb3B0L1ZpYVZvaWNlLCBvdTxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPi9vcHQvVmlhVm9pY2UuIElzc28g6SBlcXVpdmFsZW50ZSBhDQorZXNwZWNpZmljYXIgLS13aXRoLXZpYXZvaWNlLjwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6DQorIkNvdXJpZXIgTmV3Iic+PGJyPg0KKzxicj4NCis8c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKCgoCA8L3NwYW4+PC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz4tLXdpdGgtc2NyZWVuLWRyaXZlcj08aT5kcml2ZXI8L2k+Og0KKzwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PGJyPg0KKzxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKCgIDwvc3Bhbj48L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPkVzcGVjaWZpY2FyDQorb3MgZHJpdmVycyBkYSB0ZWxhIHF1ZSBkZXZlbSBzZXIgbGlnYWRvcyBhbyBiaW7hcmlvPG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+QlJMVFRZLiBPcyBkcml2ZXJzIHF1ZSBu428gZXN0428gbGlzdGFkb3MgcG9yDQorZXN0YSBvcOfjbyBz4288bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj5jb25zdHJ17WRhcyBjb21vIG9iamV0b3MgY29tcGFydGlsaGFkb3MNCitkaW5hbWljYW1lbnRlIGNhcnJlZ+F2ZWlzIGU8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj5haW5kYSBwb2RlIHNlciBzZWxlY2lvbmFkYSBlbSB0ZW1wbyBkZQ0KK2V4ZWN15+NvLiBDYWRhIGRyaXZlciBkZXZlIHNlcjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPmlkZW50aWZpY2FkbyBwZWxvIHNldSBj82RpZ28gZGUgZHVhcyBsZXRyYXMNCitkZSBpZGVudGlmaWNh5+NvIGRvIGRyaXZlcjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPihWZXIgc2Xn428gRHJpdmVycyBkZSBUZWxhIFN1cG9ydGFkb3MpIG91DQorcGVsbyBzZXUgbm9tZSBwcvNwcmlvPG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+KGNvbXBsZXRvIG91IGFicmV2aWFkbykuIE9zIGlkZW50aWZpY2Fkb3Jlcw0KK2RlIGRyaXZlciBkZXZlbSBzZXI8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj5zZXBhcmFkb3MgZGEgb3V0cmEgcG9yIHVtYSD6bmljYSB27XJndWxhLiBTZQ0KK3VtIGlkZW50aWZpY2Fkb3IgZGU8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj5kcml2ZXIg6SBwcmVjZWRpZG8gcG9yIHVtIHNpbmFsIGRlIG1lbm9zICgtKSwNCitlbnTjbyBlc3NlIGRyaXZlciDpPG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+ZXhjbHXtZG8gZGEgY29tcGlsYefjby4gUXVhbHF1ZXIgdW1hIGRhcw0KK3NlZ3VpbnRlcyBwYWxhdnJhcyB0YW1i6W08bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj5wb2RlIHNlciB1c2FkbyBjb21vIG8gb3BlcmFuZG8gZXN0YSBvcOfjbzo8L3NwYW4+PHNwYW4NCitzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PGJyPg0KKzxicj4NCis8c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKCgoCA8L3NwYW4+PC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5hbGw8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj5saWdhIHRvZG9zIG9zIGRyaXZlcnMgZGVudHJvIGRvIGJpbuFyaW8uIE7jbw0KK2NvbnN0cnVhIHF1YWxxdWVyIHVtPG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+ZGVsZXMgY29tbyBvYmpldG9zIGNvbXBhcnRpbGhhZG9zIGRpbmFtaWNhbWVudGUNCitjYXJyZWfhdmVpcy4gRXN0YTxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPnBhbGF2cmEgdGFtYultIHBvZGUgc2VyIGVzcGVjaWZpY2FkbyBjb21vIG8NCiv6bHRpbW8gZWxlbWVudG8gZGUgdW1hPG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+bGlzdGEgZGUgZHJpdmVyLiBJc3RvIOkgY29tbyBlc3BlY2lmaWNhciBvDQorZHJpdmVyIGRlZmF1bHQgcXVhbmRvIHRvZG9zPG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+b3MgZHJpdmVycyBkZXZlbSBzZXIgbGlnYWRvcy48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48YnI+DQorPHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgoKAgPC9zcGFuPjwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+LWFsbDxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPmFwZW5hcyBjb21waWxhIG9zIGRyaXZlcnMgcXVlIHRlbmhhbSBzaWRvDQoraW5jbHXtZG9zIGV4cGxpY2l0YW1lbnRlPG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+YXRyYXbpcyBkZXN0YSBvcOfjby48L3NwYW4+PHNwYW4NCitzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oDwvc3Bhbj48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKCgIDwvc3Bhbj48L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPm5vPG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+buNvIGNvbnN0cnVhIHF1YWxxdWVyIGRyaXZlci4gSXNzbyDpDQorZXF1aXZhbGVudGUgYSBlc3BlY2lmaWNhcjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPndpdGhvdXQtc2NyZWVuLWRyaXZlci48L3NwYW4+PHNwYW4NCitzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PGJyPg0KKzwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+PHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqA8L3NwYW4+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+WWVzPG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+Y29tcGlsYXIgdG9kb3Mgb3MgZHJpdmVycyBjb21vIG9iamV0b3MgY29tcGFydGlsaGFkb3MNCitkaW5hbWljYW1lbnRlPG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+Y2FycmVn4XZlaXMuIE7jbyBsaWdhciBxdWFscXVlciB1bSBkZWxlcw0KK2RlbnRybyBkbyBiaW7hcmlvLiBJc3NvIOk8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj5lcXVpdmFsZW50ZSBhIGVzcGVjaWZpY2FyDQorLS13aXRoLXNjcmVlbi1kcml2ZXIuPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToNCisiQ291cmllciBOZXciJz48YnIgc3R5bGU9J21zby1zcGVjaWFsLWNoYXJhY3RlcjpsaW5lLWJyZWFrJz4NCis8IVtpZiAhc3VwcG9ydExpbmVCcmVha05ld0xpbmVdPjxiciBzdHlsZT0nbXNvLXNwZWNpYWwtY2hhcmFjdGVyOmxpbmUtYnJlYWsnPg0KKzwhW2VuZGlmXT48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKCgIDwvc3Bhbj48L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPk8NCitwcmltZWlybyBkcml2ZXIgbuNvLWV4Y2x17WRvIGNvbWXnYSBzZW5kbyBkcml2ZXIgcGFkcuNvLiBTZSBlc3NhPG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+b3Dn428gbuNvIGZvciBlc3BlY2lmaWNhZGEsIG91IHNlIG7jbw0KK2VzcGVjaWZpY2FkbyBvIGRyaXZlciwgZW50428gdW08bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj5wYWRy428gZG8gc2lzdGVtYSBvcGVyYWNpb25hbCBhcHJvcHJpYWRvIOkNCitzZWxlY2lvbmFkby4gU2UgdW0gZHJpdmVyPG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+bmF0aXZvIHBhcmEgbyBzaXN0ZW1hIG9wZXJhY2lvbmFsIGF0dWFsIGVzdOENCitkaXNwb27tdmVsLCBlbnTjbyBlc3NlPG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+ZHJpdmVyIOkgc2VsZWNpb25hZG8sIHNlbuNvLCBvIHNjIOkNCitzZWxlY2lvbmFkby4gVmVqYSBvIGFycXVpdm88bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj5zY3JlZW4tZHJpdmVyIGRlIGNvbmZpZ3VyYefjbyBlIGEgb3Dn428gZGUNCitsaW5oYSBkZSBjb21hbmRvIHBhcmE8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj5zZWxl5+NvIC14IHRlbXBvIGRlIGV4ZWN15+NvLjwvc3Bhbj48c3Bhbg0KK3N0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48YnI+DQorPGJyPg0KKzxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKCgIDwvc3Bhbj48L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPi0td2l0aC1zY3JlZW4tcGFyYW1ldGVycz1bPGk+ZHJpdmVyOl1uYW1lPXZhbHVlPC9pPiwuLi46DQorPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48YnI+DQorPHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgoKAgPC9zcGFuPjwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+RXNwZWNpZmlxdWUNCithcyBjb25maWd1cmHn9WVzIHBhZHLjbyBkZSBwYXLibWV0cm8gcGFyYSBvcyBzY3JlZW48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj5kcml2ZXJzLiBTZSB1bSBub21lIGRlIHBhcuJtZXRybyDpDQorcXVhbGlmaWNhZGEgcG9yIHVtIGRyaXZlciAoY29uc3VsdGU8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj5hIHNl5+NvIFN1cHBvcnRlZCBTY3JlZW4gRHJpdmVycyksIGVtDQorc2VndWlkYSwgYSBjb25maWd1cmHn428gc/M8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj5hcGxpY2EgYW8gZHJpdmVyLCBzZW7jbyDpLCBhY2VpdOF2ZWwgcG9yDQorZHJpdmVycyBlc3BlY+1maWNvcy4gUGFyYTxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPm9idGVyIHVtYSBkZXNjcmnn428gZG9zIHBhcuJtZXRyb3MgYWNlaXRvcw0KK3BvciB1bSBkcml2ZXIgZXNwZWPtZmljbyw8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj5jb25zdWx0ZSBhIGRvY3VtZW50YefjbyBkbyBkcml2ZXIuIFZlamEgbm8NCithcnF1aXZvIGRlIGNvbmZpZ3VyYefjbyBkZTxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPnBhcuJtZXRyb3MgZSBvIGNvbWFuZG8gllggbm8gdGVtcG8gZGUgZXhlY3Xn428uPC9zcGFuPjxzcGFuDQorc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxicj4NCis8YnI+DQorPHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgoKAgPC9zcGFuPjwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+LS13aXRoLXVzYi1wYWNrYWdlDQorPSA8aT5wYWNrYWdlPC9pPiwgLi4uOiA8L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5Og0KKyJDb3VyaWVyIE5ldyInPjxicj4NCis8c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKCgoCA8L3NwYW4+PC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5Fc3BlY2lmaWNhcg0KK28gcGFjb3RlIHF1ZSBlc3ThIHNlbmRvIHV0aWxpemFkbyBwZWxhIEkvTyBkYSBVU0IuIE8gbm9tZTxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPmRvcyBwYWNvdGVzIGRldmVtIHNlciBzZXBhcmFkb3MgdW0gZG8gb3V0cm8NCitwb3IgdW1hIPpuaWNhIHbtcmd1bGEsIGU8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj5z428gcHJvY2Vzc2Fkb3MgZGEgZXNxdWVyZGEgcGFyYSBhIGRpcmVpdGEuIE8NCitwcmltZWlybywgcXVlIOk8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj5pbnN0YWxhZG8gbm8gc2lzdGVtYSDpIHNlbGVjaW9uYWRhLiBPcw0KK3BhY290ZXMgYSBzZWd1aXIgc+NvPG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+c3Vwb3J0YWRvczo8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj4xLiBsaWJ1c2I8L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5Og0KK1RpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPjIuIGxpYnVzYi0xLjAgPG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD4mbmJzcDs8L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+UXVhbHF1ZXIgdW1hIGRhcyBzZWd1aW50ZXMgcGFsYXZyYXMgdGFtYultDQorcG9kZSBzZXIgdXNhZG8gY29tbyBvPG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+b3BlcmFkb3JlcyBlc3RhIG9w5+NvOjwvc3Bhbj48c3Bhbg0KK3N0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gPC9zcGFuPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPm5vPG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+buNvIHN1cG9ydGEgSS9PIGRhIFVTQi4gSXNzbyDpIGVxdWl2YWxlbnRlIGENCitlc3BlY2lmaWNhciAtlndpdGhvdXQ8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj51c2ItcGFja2FnZS48L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5Og0KK1RpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqA8L3NwYW4+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+eWVzPG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+dXNlIG8gc3Vwb3J0ZSBuYXRpdm8gcGFyYSBJL08gZGEgVVNCLiBTZSBvDQorc3Vwb3J0ZSBuYXRpdm8gbuNvIGVzdOE8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj5kaXNwb27tdmVsIHBhcmEgYSBwbGF0YWZvcm1hIGF0dWFsLCBlbQ0KK3NlZ3VpZGEsIHVzYXIgbyBwYWNvdGU8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj5kaXNwb27tdmVsIGRlIHN1cG9ydGUgKGNvbW8gcG9yIG9yZGVtDQorZXNwZWNpZmljYWRhIGFjaW1hKS4gSXNzbyDpPG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+ZXF1aXZhbGVudGUgYSBlc3BlY2lmaWNhciAtLXdpdGgtdXNiLXBhY2thZ2UuPC9zcGFuPjxzcGFuDQorc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxicj4NCis8c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKCgoCA8L3NwYW4+PC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz4tLXdpdGgtYmx1ZXRvb3RoLXBhY2thZ2UNCis9IDxpPnBhY2thZ2U8L2k+LCAuLi4gPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToNCisiQ291cmllciBOZXciJz48YnI+DQorPHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgoKAgPC9zcGFuPjwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+RXNwZWNpZmljYXINCitvIHBhY290ZSBxdWUgZXN04SBzZW5kbyB1dGlsaXphZG8gcGFyYSBJL08gZGUgQmx1ZXRvb3RoLjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPk9zIG5vbWVzIGRvcyBwYWNvdGVzIGRldmVtIHNlciBzZXBhcmFkb3MgdW0NCitkbyBvdXRybyBwb3IgdW1hIPpuaWNhPG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+du1yZ3VsYSwgZSBz428gcHJvY2Vzc2Fkb3MgZGEgZXNxdWVyZGEgcGFyYSBhDQorZGlyZWl0YS4gTyBwcmltZWlybywgcXVlPG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+6SBpbnN0YWxhZG8gbm8gc2lzdGVtYSDpIHNlbGVjaW9uYWRhLiBPcw0KK3BhY290ZXMgYSBzZWd1aXIgc+NvPG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+c3Vwb3J0YWRvczo8L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5Og0KK1RpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxicj4NCis8L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPiZuYnNwOyZuYnNwOzxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQgc3R5bGU9J21hcmdpbi1sZWZ0OjMzLjc1cHQ7dGV4dC1pbmRlbnQ6LTIwLjI1cHQ7DQorbXNvLWxpc3Q6bDkgbGV2ZWwxIGxmbzE7dGFiLXN0b3BzOmxpc3QgMzMuNzVwdCc+PCFbaWYgIXN1cHBvcnRMaXN0c10+PHNwYW4NCitzdHlsZT0nZm9udC1zaXplOjExLjBwdDttc28tZmFyZWFzdC1mb250LWZhbWlseToiQ291cmllciBOZXciJz48c3Bhbg0KK3N0eWxlPSdtc28tbGlzdDpJZ25vcmUnPjEuPHNwYW4gc3R5bGU9J2ZvbnQ6Ny4wcHQgIlRpbWVzIE5ldyBSb21hbiInPiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOw0KKzwvc3Bhbj48L3NwYW4+PC9zcGFuPjwhW2VuZGlmXT48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+KFNlbSBvcyBwYWNvdGVzDQorc+NvIHN1cG9ydGFkb3MpLjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQgc3R5bGU9J21hcmdpbi1sZWZ0OjEzLjVwdCc+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPlF1YWxxdWVyIHVtYSBkYXMgc2VndWludGVzIHBhbGF2cmFzIHRhbWLpbQ0KK3BvZGUgc2VyIHVzYWRvIGNvbW8gbzxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPm9wZXJhZG9yIGVzdGEgb3Dn4286PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+PG86cD4mbmJzcDs8L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dCBzdHlsZT0ndGV4dC1pbmRlbnQ6MTMuNXB0Jz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+bm88bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0IHN0eWxlPSd0ZXh0LWluZGVudDoxMy41cHQnPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5u428NCitzdXBvcnRlIGRhIEkvTyBkbyBCbHVldG9vdGguIElzc28g6SBlcXVpdmFsZW50ZSBhPG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dCBzdHlsZT0ndGV4dC1pbmRlbnQ6MTMuNXB0Jz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+ZXNwZWNpZmljYXINCistLXdpdGgtYmx1ZXRvb3RoLXBhY2thZ2UuPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToNCisiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0IHN0eWxlPSd0ZXh0LWluZGVudDoxMy41cHQnPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5ZZXM8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0IHN0eWxlPSd0ZXh0LWluZGVudDoxMy41cHQnPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz51c2UNCitvIHN1cG9ydGUgbmF0aXZvIHBhcmEgSS9PIGRvIEJsdWV0b290aC4gU2UgbyBzdXBvcnRlIG5hdGl2bzxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQgc3R5bGU9J3RleHQtaW5kZW50OjEzLjVwdCc+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPm7jbw0KK2VzdOEgZGlzcG9u7XZlbCBwYXJhIGEgcGxhdGFmb3JtYSBhdHVhbCwgZW0gc2VndWlkYSwgdXNhciBvPG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dCBzdHlsZT0ndGV4dC1pbmRlbnQ6MTMuNXB0Jz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+cHJpbWVpcm8NCitwYWNvdGUgZGlzcG9u7XZlbCBzdXBvcnRlIChjb21vIHBvciBvcmRlbSBlc3BlY2lmaWNhZGE8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0IHN0eWxlPSd0ZXh0LWluZGVudDoxMy41cHQnPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5hY2ltYSkuDQorSXNzbyDpIGVxdWl2YWxlbnRlIGEgZXNwZWNpZmljYXIgLS13aXRoLWJsdWV0b290aC1wYWNrYWdlLjwvc3Bhbj48c3Bhbg0KK3N0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKCgIDwvc3Bhbj48L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPjMuMi4xLjINCitFc3BlY2lmaWNh5/VlcyBkZSBEaXJldPNyaW88bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj4tLXdpdGgtZXhlY3V0ZS1yb290PTxpPmRpcmVjdG9yeTwvaT4gPC9zcGFuPjxzcGFuDQorc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxicj4NCis8c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKCgoCA8L3NwYW4+PC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5Fc3BlY2lmaXF1ZQ0KK28gZGlyZXTzcmlvIGVtIHF1ZSBhIGhpZXJhcnF1aWEgZGUgYXJxdWl2b3MgZm9yYW08bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj5pbnN0YWxhZG9zIG5vIHRlbXBvIGRlIGV4ZWN15+NvLiBPIGNhbWluaG8NCithYnNvbHV0byBkZXZlIHNlcjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPmZvcm5lY2lkby4gU2UgZXNzYSBvcOfjbyBu428gZm9yDQorZXNwZWNpZmljYWRhLCBlbnTjbyBkaXJldPNyaW8gcmFpeiBkbzxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPnNpc3RlbWEg6SBhc3N1bWlkby4gVm9j6iBwcmVjaXNhIHVzYXIgZXNzYQ0KK2NhcmFjdGVy7XN0aWNhLCBwb3I8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj5leGVtcGxvLCBzZSB2b2PqIHRpdmVyIG1haXMgZGUgdW1hIHZlcnPjbw0KK2luc3RhbGFkYSBkbyBCUkxUVFkgcHJlY2lzYXI8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj5pbnN0YWxhciBhcnF1aXZvcyBCUkxUVFkgbm8gbWVzbW8gdGVtcG8uPC9zcGFuPjxzcGFuDQorc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxicj4NCis8YnI+DQorPHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgoKAgPC9zcGFuPjwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+LS13aXRoLWluc3RhbGwtcm9vdD08aT5kaXJlY3Rvcnk8L2k+PC9zcGFuPjxzcGFuDQorc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxicj4NCis8c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKCgoCA8L3NwYW4+PC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5Fc3BlY2lmaXF1ZQ0KK28gZGlyZXTzcmlvIHNvYiBvIHF1YWwgYSBoaWVyYXJxdWlhIGRlIGFycXVpdm9zIGluc3RhbGFkb3M8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj5mb2kgaW5zdGFsYWRvLiBPIGNhbWluaG8gYWJzb2x1dG8gZGV2ZSBzZXINCitmb3JuZWNpZG8uIFNlIGVzdGEgb3Dn4288bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj5u428gZm9yIGVzcGVjaWZpY2FkYSwgZW50428gbyBwYWNvdGUgcm9vdCBubw0KK3RlbXBvIGRlIGV4ZWN15+NvICh2ZWphIGE8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIGxhbmc9RU4tVVMgc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQ7bXNvLWFuc2ktbGFuZ3VhZ2U6DQorRU4tVVMnPjxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj5vcOfjbyAtLXdpdGgtZXhlY3V0ZS1yb290IGJ1aWxkDQorb3B0aW9uKSDpIGFzc3VtaWRhLiA8L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPkVzdGUgZGlyZXTzcmlvIOk8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj5hcGVuYXMgdXNhZG8gcGVsbyBtYWtlIGluc3RhbGwgZSBtYWtlDQordW5pbnN0YWxsLiBVc2UgZXN0YSBvcOfjbyBzZTxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPnZvY+ogcHJlY2lzYSBpbnN0YWxhciBCUkxUVFkgZW0gdW0gbG9jYWwNCitkaWZlcmVudGUgZGFxdWVsZSBhIHBhcnRpciBkbzxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPnF1YWwgZm9pIGZpbmFsbWVudGUgZm9pIGV4ZWN1dGFkby4gVm9j6g0KK3ByZWNpc2EgdXNhciBlc3RlIHJlY3Vyc28sIHBvcjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPmV4ZW1wbG8sIHNlIHZvY+ogZXN04SBjb25zdHJ1aW5kbyBCUkxUVFkgZW0NCit1bSBzaXN0ZW1hIHBhcmEgdXNvIGVtPG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+b3V0cm8uPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczsNCittc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48YnI+DQorPGJyPg0KKzxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKCgIDwvc3Bhbj48L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPi0tcHJlZml4DQorPSA8aT5kaXJlY3Rvcnk8L2k+PC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToNCisiQ291cmllciBOZXciJz48YnI+DQorPHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgoKAgPC9zcGFuPjwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+RXNwZWNpZmlxdWUNCitvIGRpcmV083JpbyBkZW50cm8gZGEgaGllcmFycXVpYSBkZSBhcnF1aXZvcyBpbnN0YWxhZG9zPG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+b25kZSBvcyBkaXJldPNyaW9zIHBhZHLjbyBwYXJhIG9zIGFycXVpdm9zDQoraW5kZXBlbmRlbnRlcyBkZTxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPmFycXVpdGV0dXJhIHPjbyBlbnJhaXphZGFzLiBFc3NlcyBkaXJldPNyaW9zDQorc+NvOjwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKCgoCA8L3NwYW4+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKCgoCA8L3NwYW4+PC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz63DQorRGlyZXTzcmlvIGRlIFByb2dyYW1hPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToNCisiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj63IERpcmV083JpbyBkZSBCaWJsaW90ZWNhPC9zcGFuPjxzcGFuDQorc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPrcgRGlyZXTzcmlvIGRlIEFQSTwvc3Bhbj48c3Bhbg0KK3N0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKCgIDwvc3Bhbj48L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPrcNCitEaXJldPNyaW8gZGUgRXNjcml0YTwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6DQorIkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+tyBEaXJldPNyaW8gZGUgRGFkb3M8L3NwYW4+PHNwYW4NCitzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+tyBEaXJldPNyaW8gZGUgQ29uZmlndXJh5+NvPC9zcGFuPjxzcGFuDQorc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPrcgRGlyZXTzcmlvIGRlIE1hbnBhZ2UgPC9zcGFuPjxzcGFuDQorc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPrcgRGlyZXTzcmlvIGRlIEluY2x1c+NvPG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD4mbmJzcDs8L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+TyBjYW1pbmhvIGFic29sdXRvIGRldmUgc2VyIGZvcm5lY2lkby4gU2UNCitlc3NhIG9w5+NvIG7jbyBmb3I8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj5lc3BlY2lmaWNhZGEsIGVudONvIGRpcmV083JpbyByYWl6IGRvIHNpc3RlbWENCivpIGFzc3VtaWRvLiBFc3RlPG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+ZGlyZXTzcmlvIOkgZW5yYWl6YWRhIG5vIGRpcmV083Jpbw0KK2VzcGVjaWZpY2FkbyBwZWxhIG9w5+NvIGRlPG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+Y29tcGlsYefjbyAtLXdpdGgtZXhlY3V0ZS1yb290Ljwvc3Bhbj48c3Bhbg0KK3N0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48YnI+DQorPGJyPg0KKzxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKCgIDwvc3Bhbj48L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPi0tZXhlYy1wcmVmaXgNCis9IDxpPmRpcmVjdG9yeTwvaT48L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5Og0KKyJDb3VyaWVyIE5ldyInPjxicj4NCis8c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKCgoCA8L3NwYW4+PC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5Fc3BlY2lmaXF1ZQ0KK28gZGlyZXTzcmlvIGRlbnRybyBkYSCTaGllcmFycXVpYSBkZSBhcnF1aXZvcyBpbnN0YWxhZG9zlDxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPm9uZGUgb3MgZGlyZXTzcmlvcyBwYWRy9WVzIHBhcmEgb3MgYXJxdWl2b3MNCitkZXBlbmRlbnRlcyBkZSBhcnF1aXRldHVyYTxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPmRldmVtIHNlciBlbnJhaXphZG9zLiBFc3NlcyBkaXJldPNyaW9zIHPjbzo8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj63IERpcmV083JpbyBkZSBQcm9ncmFtYTwvc3Bhbj48c3Bhbg0KK3N0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj63IERpcmV083JpbyBkZSBCaWJsaW90ZWNhPC9zcGFuPjxzcGFuDQorc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPrcgRGlyZXTzcmlvIGRlIEFQSTwvc3Bhbj48c3Bhbg0KK3N0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj5PIGNhbWluaG8gYWJzb2x1dG8gZGV2ZSBzZXIgZm9ybmVjaWRvLiBTZQ0KK2Vzc2Egb3Dn428gbuNvIGZvcjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPmVzcGVjaWZpY2FkYSwgZW50428gbyBkaXJldPNyaW8gZXNwZWNpZmljYWRvDQorYXRyYXbpcyBkYSBvcOfjbyBkZTxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPmNvbXBpbGHn428gLS1wcmVmaXgg6SBhc3N1bWlkYS4gRXN0ZQ0KK2RpcmV083JpbyDpIGVucmFpemFkbyBubzxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPmRpcmV083JpbyBlc3BlY2lmaWNhZG8gcGVsbw0KKy0td2l0aC1leGVjdXRlLXJvb3QuPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToNCisiQ291cmllciBOZXciJz48YnI+DQorPGJyPg0KKzxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKCgIDwvc3Bhbj48L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPi0tbGliZGlyPTxpPmRpcmVjdG9yeTwvaT48L3NwYW4+PHNwYW4NCitzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PGJyPg0KKzxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKCgIDwvc3Bhbj48L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPkVzcGVjaWZpcXVlDQorbyBkaXJldPNyaW8gZGVudHJvIGRhIGhpZXJhcnF1aWEgZGUgYXJxdWl2b3MgaW5zdGFsYWRvczxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPm9uZGUgbyBhcnF1aXZvIGVzdOF0aWNvIGUgbyBvYmpldG8gY2FycmVnYWRvDQorZGluYW1pY2FtZW50ZSBwYXJhIGE8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj5BUEkgc2VyIGluc3RhbGFkYS4gTyBjYW1pbmhvIGFic29sdXRvIGRldmUNCitzZXIgZm9ybmVjaWRvLiBTZSBlc3NhPG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+b3Dn428gbuNvIGZvciBlc3BlY2lmaWNhZGEsIGVudONvIG8gZGlyZXTzcmlvDQorZXNwZWNpZmljYWRvIGF0cmF26XMgZGEgPG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+b3Dn428gZGUgY29uZmlndXJh5+NvIHBhZHLjbyCWLWxpYmRpciAoY3Vqbw0KK3BhZHLjbyDpIC9saWIgZW5yYWl6YWRvIG5vPG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+ZGlyZXTzcmlvIGVzcGVjaWZpY2FkbyBwZWxvIJYtZXhlYy1wcmVmaXgpIOkNCithc3N1bWlkYS4gTyBkaXJldPNyaW8g6TxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPmNyaWFkbyBzZW7jbyBleGlzdGUuPC9zcGFuPjxzcGFuDQorc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxicj4NCis8YnI+DQorPHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgoKAgPC9zcGFuPjwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+LS1zeXNjb25mZGlyPTxpPmRpcmVjdG9yeTwvaT4NCis8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj5Fc3BlY2lmaXF1ZSBvIGRpcmV083JpbyBkZW50cm8gZGEgaGllcmFycXVpYQ0KK2RlIGFycXVpdm9zIGluc3RhbGFkb3M8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj5vbmRlIG9zIGFycXVpdm9zIGRlIGNvbmZpZ3VyYefjbyBkbyBzaXN0ZW1hDQorc2Vy428gaW5zdGFsYWRvcy4gTzxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPmNhbWluaG8gYWJzb2x1dG8gZGV2ZSBzZXIgZm9ybmVjaWRvLiBTZSBlc3NhDQorb3Dn428gbuNvIGZvcjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPmVzcGVjaWZpY2FkYSwgZW50428gbyBkaXJldPNyaW8gZXNwZWNpZmljYWRvDQorYXRyYXbpcyBkYSBvcOfjbyBkZTxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPmNvbmZpZ3VyYefjbyBwYWRy428gLS1zeXNjb25mZGlyIChjdWpvIHBhZHLjbw0KK+kgL2V0YyBlbnJhaXphZG8gbm88bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj5kaXJldPNyaW8gZXNwZWNpZmljYWRvIHBvciAtLXByZWZpeCkg6Q0KK2Fzc3VtaWRhLiBPIGRpcmV083JpbyDpIGNyaWFkbzxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPnNlIGVsZSBu428gZXhpc3RlLjwvc3Bhbj48c3Bhbg0KK3N0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48YnINCitzdHlsZT0nbXNvLXNwZWNpYWwtY2hhcmFjdGVyOmxpbmUtYnJlYWsnPg0KKzwhW2lmICFzdXBwb3J0TGluZUJyZWFrTmV3TGluZV0+PGJyIHN0eWxlPSdtc28tc3BlY2lhbC1jaGFyYWN0ZXI6bGluZS1icmVhayc+DQorPCFbZW5kaWZdPjwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+LS13aXRoLXByb2dyYW0tZGlyZWN0b3J5PTxpPmRpcmVjdG9yeTwvaT4gPC9zcGFuPjxzcGFuDQorc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxicj4NCis8c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKCgoCA8L3NwYW4+PC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5Fc3BlY2lmaXF1ZQ0KK28gZGlyZXTzcmlvIGRlbnRybyBkYSBoaWVyYXJxdWlhIGRlIGFycXVpdm9zIGluc3RhbGFkb3M8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj5vbmRlIG9zIHByb2dyYW1hcyBleGVjdXThdmVpcyAoYmlu4XJpb3MsDQorZXhlY3V04XZlaXMpIHPjbyBpbnN0YWxhZG9zLjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPk8gY2FtaW5obyBhYnNvbHV0byBkZXZlIHNlciBmb3JuZWNpZG8uIFNlDQorZXNzYSBvcOfjbyBu428gZm9yPG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+ZXNwZWNpZmljYWRhLCBlbnTjbyBvIGRpcmV083JpbyBlc3BlY2lmaWNhZG8NCithdHJhdulzIGRhIG9w5+NvIGRlPG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+Y29uZmlndXJh5+NvIHBhZHLjbyAtLWJpbmRpciAoY3VqbyBwYWRy428NCisvYmluIGVucmFpemFkYSBubyBkaXJldPNyaW88bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj5lc3BlY2lmaWNhZG8gcGVsbyAtLWV4ZWMtcHJlZml4KSDpIGFzc3VtaWRhLg0KK08gZGlyZXTzcmlvIOkgY3JpYWRvIHNlPG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+ZWxlIG7jbyBleGlzdGUuPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LWZhbWlseToNCitUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48YnI+DQorPGJyPg0KKzxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKCgIDwvc3Bhbj48L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPi0td2l0aC1saWJyYXJ5LWRpcmVjdG9yeT08aT5kaXJlY3Rvcnk8L2k+PC9zcGFuPjxzcGFuDQorc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxicj4NCis8c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKCgoCA8L3NwYW4+PC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5Fc3BlY2lmaXF1ZQ0KK28gZGlyZXTzcmlvIGRlbnRybyBkYSBoaWVyYXJxdWlhIGRlIGFycXVpdm9zIGluc3RhbGFkb3M8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj5vbmRlIG9zIGRyaXZlcnMgZSBvdXRyb3MgYXJxdWl2b3MgZGVwZW5kZW50ZXMNCitkZSBhcnF1aXRldHVyYSBz4288bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj5pbnN0YWxhZG9zLiBPIGNhbWluaG8gYWJzb2x1dG8gZGV2ZSBzZXINCitmb3JuZWNpZG8uIFNlIGVzc2Egb3Dn428gbuNvPG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+Zm9yIGVzcGVjaWZpY2FkYSwgZW50428gbyBicmx0dHkgc3ViZGlyZXTzcmlvDQorZG8gZGlyZXTzcmlvPG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+ZXNwZWNpZmljYWRvIGF0cmF26XMgZGEgb3Dn428gZGUgY29uZmlndXJh5+NvDQorcGFkcuNvIC0tbGliZGlyIChjdWpvPG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+cGFkcuNvIOkgL2xpYiBlbnJhaXphZGEgbm8gZGlyZXTzcmlvDQorZXNwZWNpZmljYWRvIHBlbG8gLS1leGVjLXByZWZpeCk8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj7pIGFzc3VtaWRhLiBPIGRpcmV083JpbyDpIGNyaWFkbyBzZSBlbGUgbuNvDQorZXhpc3RlLjwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PGJyDQorc3R5bGU9J21zby1zcGVjaWFsLWNoYXJhY3RlcjpsaW5lLWJyZWFrJz4NCis8IVtpZiAhc3VwcG9ydExpbmVCcmVha05ld0xpbmVdPjxiciBzdHlsZT0nbXNvLXNwZWNpYWwtY2hhcmFjdGVyOmxpbmUtYnJlYWsnPg0KKzwhW2VuZGlmXT48L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgoKAgPC9zcGFuPjwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+LS13aXRoLXdyaXRhYmxlLWRpcmVjdG9yeT08aT5kaXJlY3Rvcnk8L2k+PC9zcGFuPjxzcGFuDQorc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxicj4NCis8c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKCgoCA8L3NwYW4+PC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5Fc3BlY2lmaXF1ZQ0KK28gZGlyZXTzcmlvIGRlbnRybyBkYSBoaWVyYXJxdWlhIGRlIGFycXVpdm9zIGluc3RhbGFkb3M8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj5xdWUgcG9kZW0gc2VyIGdyYXZhZG9zLiBPIGNhbWluaG8gYWJzb2x1dG8NCitkZXZlIHNlciBmb3JuZWNpZG8uPG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+UXVhbHF1ZXIgdW1hIGRhcyBzZWd1aW50ZXMgcGFsYXZyYXMgdGFtYultDQorcG9kZSBzZXIgdXNhZG8gY29tbyBvPG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+b3BlcmFuZG8gZXN0YSBvcOfjbzo8L3NwYW4+PHNwYW4NCitzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+PG86cD4mbmJzcDs8L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+bm88bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj5u428gZGVmaW5hIHVtIGRpcmV083JpbyBncmF24XZlbC4gSXNzbyDpDQorZXF1aXZhbGVudGUgYSBlc3BlY2lmaWNhcjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPndpdGhvdXQtd3JpdGFibGUtZGlyZWN0b3J5LjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPlllczxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPlVzZSBvIGxvY2FsIHBhZHLjby4gSXNzbyDpIGVxdWl2YWxlbnRlIGENCitlc3BlY2lmaWNhciAtLXdpdGgtd3JpdGFibGU8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj5kaXJlY3RvcnkuPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LWZhbWlseToNCitUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKCgIDwvc3Bhbj48L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPlNlDQorZXNzYSBvcOfjbyBu428gZm9yIGVzcGVjaWZpY2FkYSwgZW50428gbyBzdWJkaXJldPNyaW8gZG8gZGlyZXTzcmlvPG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+cncgZXNwZWNpZmljYWRvIGNvbSAtLXdpdGgtbGlicmFyeS1kaXJlY3RvcnkNCivpIGFzc3VtaWRvLiBPIGRpcmV083JpbyDpPG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+Y3JpYWRvIHNlIGVsZSBu428gZXhpc3RlLjwvc3Bhbj48c3Bhbg0KK3N0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKCgoKCgIDwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj48c3Bhbg0KK3N0eWxlPSdmb250LXNpemU6MTEuMHB0Jz4tLXdpdGgtZGF0YS1kaXJlY3Rvcnk9PGk+ZGlyZWN0b3J5PC9pPjwvc3Bhbj48c3Bhbg0KK3N0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48YnI+DQorPHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgoKAgPC9zcGFuPjwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+RXNwZWNpZmlxdWUNCitvIGRpcmV083JpbyBkZW50cm8gZGEgaGllcmFycXVpYSBkZSBhcnF1aXZvcyBpbnN0YWxhZG9zPG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+b25kZSBhcyBwYWdpbmFzIGRhcyB0YWJlbGFzIGRlIGFqdWRhLCBlDQorb3V0cm9zIGFycXVpdm9zIGRlPG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+YXJxdWl0ZXR1cmFzIGluZGVwZW5kZW50ZXMgZm9yYW0gaW5zdGFsYWRhcy4NCitPIGNhbWluaG8gYWJzb2x1dG8gZGV2ZTxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPnNlciBmb3JuZWNpZG8uIFNlIGVzc2Egb3Dn428gbuNvIGZvcg0KK2VzcGVjaWZpY2FkYSwgZW50428gbzxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPnN1YmRpcmV083JpbyBkbyBkaXJldPNyaW8gZG8gYnJsdHR5DQorZXNwZWNpZmljYWRvIGF0cmF26XMgZGEgb3Dn428gZGU8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj5jb25maWd1cmHn428gcGFkcuNvIC0tc3lzY29uZmRpciAoY3VqbyBwYWRy428NCivpIC9ldGMgZW5yYWl6YWRvIG5vPG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+ZGlyZXTzcmlvIGVzcGVjaWZpY2FkbyBwZWxhIG9w5+NvIC0tcHJlZml4KSDpDQorYXNzdW1pZG8uIE8gZGlyZXTzcmlvIOk8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj5jcmlhZG8gc2UgZWxlIG7jbyBleGlzdGUuPC9zcGFuPjxzcGFuDQorc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxicj4NCis8YnI+DQorPHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgoKAgPC9zcGFuPjwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+LS13aXRoLW1hbnBhZ2UtZGlyZWN0b3J5PTxpPmRpcmVjdG9yeTwvaT48L3NwYW4+PHNwYW4NCitzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PGJyPg0KKzxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKCgIDwvc3Bhbj48L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPkVzcGVjaWZpcXVlDQorbyBkaXJldPNyaW8gZGVudHJvIGRhIGhpZXJhcnF1aWEgZGUgYXJxdWl2b3MgaW5zdGFsYWRvcyw8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj5vbmRlIGFzIHDhZ2luYXMgZG8gbWFuIHNlcuNvIGluc3RhbGFkb3MuIE8NCitjYW1pbmhvIGFic29sdXRvIGRldmUgc2VyPG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+Zm9ybmVjaWRvLiBTZSBlc3NhIG9w5+NvIG7jbyBmb3INCitlc3BlY2lmaWNhZGEsIGVudONvIG8gZGlyZXTzcmlvPG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+ZXNwZWNpZmljYWRvIGF0cmF26XMgZGEgb3Dn428gZGUgY29uZmlndXJh5+NvDQorcGFkcuNvIC0tbWFuZGlyIChjdWpvPG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+cGFkcuNvIOkgL21hbiBlbnJhaXphZG8gbm8gZGlyZXTzcmlvDQorZXNwZWNpZmljYWRvIHBvciAtLXByZWZpeCkg6TxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPmFzc3VtaWRhLiBPIGRpcmV083JpbyDpIGNyaWFkbyBzZSBlbGUgbuNvDQorZXhpc3RlLjwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PGJyPg0KKzxicj4NCis8c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKCgoCA8L3NwYW4+PC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz4tLXdpdGgtaW5jbHVkZS1kaXJlY3Rvcnk9PGk+ZGlyZWN0b3J5PC9pPg0KKzwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PGJyPg0KKzxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKCgIDwvc3Bhbj48L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPkVzcGVjaWZpcXVlDQorbyBkaXJldPNyaW8gZGVudHJvIGRhIGhpZXJhcnF1aWEgZGUgYXJxdWl2b3MgaW5zdGFsYWRvczxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPm9uZGUgb3MgYXJxdWl2b3MgZGUgY2FiZedhbGhvIEMgcGFyYSBvDQorQXBwbGljYXRpb24gUHJvZ3JhbW1pbmc8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj5JbnRlcmZhY2Ugc2Vy428gaW5zdGFsYWRvcy4gTyBjYW1pbmhvDQorYWJzb2x1dG8gZGV2ZSBzZXIgZm9ybmVjaWRvLiBTZTxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPmVzc2Egb3Dn428gbuNvIGZvciBlc3BlY2lmaWNhZGEsIGVudONvIG8NCitzdWJkaXJldPNyaW8gZG8gZGlyZXTzcmlvPG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+YnJsdHR5IOkgZXNwZWNpZmljYWRvIGF0cmF26XMgZGEgb3Dn428gZGUNCitjb25maWd1cmHn428gcGFkcuNvPG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+aW5jbHVkZWRpciAoY3VqbyBwYWRy428g6SAvaW5jbHVkZSBlbnJhaXphZG8NCitubyBkaXJldPNyaW8gZXNwZWNpZmljYWRvPG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+cG9yIC0tcHJlZml4KSDpIGFzc3VtaWRhLiBPIGRpcmV083JpbyDpDQorY3JpYWRvIHNlIGVsZSBu428gZXhpc3RlLjwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6DQorIkNvdXJpZXIgTmV3Iic+PGJyIHN0eWxlPSdtc28tc3BlY2lhbC1jaGFyYWN0ZXI6bGluZS1icmVhayc+DQorPCFbaWYgIXN1cHBvcnRMaW5lQnJlYWtOZXdMaW5lXT48YnIgc3R5bGU9J21zby1zcGVjaWFsLWNoYXJhY3RlcjpsaW5lLWJyZWFrJz4NCis8IVtlbmRpZl0+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKCgoCA8L3NwYW4+PC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz4zLjIuMS4zDQorQ2FyYWN0ZXJpc3RpY2FzIGRlIENvbXBpbGHn4288L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxNC4wcHQ7bXNvLWJpZGktZm9udC1zaXplOg0KKzEwLjBwdDtmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48YnI+DQorPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48YnI+DQorPHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgoKAgPC9zcGFuPjwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+RXN0YXMNCitvcOf1ZXMgc+NvIPp0ZWlzIHByaW5jaXBhbG1lbnRlIHF1YW5kbyBhIGNvbnN0cnXn428gZG8gQlJMVFRZPG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+Zm9yIHVzYWRvIGVtIHVtIGRpc2NvIGRlIGluaWNpYWxpemHn428uPC9zcGFuPjxzcGFuDQorc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxicj4NCis8YnI+DQorPHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgoKAgPC9zcGFuPjwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+LS1lbmFibGUtc3RhbmRhbG9uZS1wcm9ncmFtczwvc3Bhbj48c3Bhbg0KK3N0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48YnI+DQorPHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgIDwvc3Bhbj48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goDwvc3Bhbj48L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPkNyaWFyDQorbGlua3MgZXN0YXRpY2FtZW50ZSwgZW0gdmV6IGRlIGxpbmtzIGRpbmFtaWNvcy4gRXN0YSBvcOfjbzxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPnJlbW92ZSB0b2RhcyBhcyBkZXBlbmTqbmNpYXMgZGUgb2JqZXRvcw0KK2NvbXBhcnRpbGhhZG9zIG5vIHRlbXBvIGRlPG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+ZXhlY3Xn428uIEFwZW5hcyBvcyBkcml2ZXJzIHBhZHLjbyAodmVqYSBhDQorb3Dn428gLS13aXRoLWJyYWlsbGU8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIGxhbmc9RU4tVVMgc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQ7bXNvLWFuc2ktbGFuZ3VhZ2U6DQorRU4tVVMnPjxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj5kcml2ZXIsIC0td2l0aC1zcGVlY2gtZHJpdmVyLCBlDQorLS13aXRoLXNjcmVlbi1kcml2ZXIpIHPjbyBjb21waWxhZG9zLjwvc3Bhbj48c3BhbiBsYW5nPUVOLVVTIHN0eWxlPSdmb250LWZhbWlseToNCitUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciO21zby1hbnNpLWxhbmd1YWdlOkVOLVVTJz48YnINCitzdHlsZT0nbXNvLXNwZWNpYWwtY2hhcmFjdGVyOmxpbmUtYnJlYWsnPg0KKzwhW2lmICFzdXBwb3J0TGluZUJyZWFrTmV3TGluZV0+PGJyIHN0eWxlPSdtc28tc3BlY2lhbC1jaGFyYWN0ZXI6bGluZS1icmVhayc+DQorPCFbZW5kaWZdPjwvc3Bhbj48c3BhbiBsYW5nPUVOLVVTIHN0eWxlPSdtc28tYW5zaS1sYW5ndWFnZTpFTi1VUyc+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+PHNwYW4NCitzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+LS1lbmFibGUtcmVsb2NhdGFibGUtaW5zdGFsbDwvc3Bhbj48c3Bhbg0KK3N0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48YnI+DQorPHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgoKAgPC9zcGFuPjwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+U2UNCitlc3RlIHJlY3Vyc28gZXN0aXZlciBhdGl2YWRvLCB0b2RvcyBvcyBjYW1pbmhvcyBpbnRlcm5vcyBz4288bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj5yZWNhbGN1bGFkb3MgYSBzZXIgcmVsYXRpdm8gYW8gZGlyZXTzcmlvIGRvDQorcHJvZ3JhbWEuIFNlIGRlc2F0aXZhZG8sPG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+ZW50428gdG9kb3Mgb3MgY2FtaW5ob3MgaW50ZXJub3Mgc+NvDQorYWJzb2x1dG9zLiBFc3RlIHJlY3Vyc28gcGVybWl0ZTxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPnF1ZSB0b2RhIGEgaGllcmFycXVpYSBkZSBhcnF1aXZvcyBpbnN0YWxhZG9zDQorc2VyIGNvcGlhZG9zIG91IG1vdmlkb3MsPG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+ZGUgdW0gbHVnYXIgcGFyYSBvdXRybywgZSDpIGRlc3RpbmFkbw0KK3ByaW5jaXBhbG1lbnRlIHBhcmEgdXNvIGVtPG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+cGxhdGFmb3JtYXMgV2luZG93cy48L3NwYW4+PHNwYW4NCitzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PGJyPg0KKzxicj4NCis8c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKCgoCA8L3NwYW4+PC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz4tLWRpc2FibGUtc3RyaXBwaW5nbA0KKzwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKCgoCA8L3NwYW4+PC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5O428NCityZW1vdmEgYXMgdGFiZWxhcyBkZSBz7W1ib2xvcyBhIHBhcnRpciBkZSBhcnF1aXZvcyBleGVjdXThdmVpcyBlPG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+b2JqZXRvcyBjb21wYXJ0aWxoYWRvcyBxdWFuZG8gaW5zdGFs4S1sb3MuPC9zcGFuPjxzcGFuDQorc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxicj4NCis8YnI+DQorPHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgoKAgPC9zcGFuPjwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+LS1kaXNhYmxlLWxlYXJuLW1vZGU8L3NwYW4+PHNwYW4NCitzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PGJyPg0KKzxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKCgIDwvc3Bhbj48L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPlJlZHV6aXINCitvIHRhbWFuaG8gZG8gcHJvZ3JhbWEsIGV4Y2x1aW5kbyBvIG1vZG8gZGUgY29tYW5kbyAoVmVyIHNl5+NvPG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+ZGUgTW9kbyBkZSBDb21hbmRvIGRlIEFwcmVuZGl6YWdlbSkuPC9zcGFuPjxzcGFuDQorc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxicj4NCis8YnI+DQorPHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgoKAgPC9zcGFuPjwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+LS1kaXNhYmxlLWNvbnRyYWN0ZWQtYnJhaWxsZTwvc3Bhbj48c3Bhbg0KK3N0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48YnI+DQorPHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgoKAgPC9zcGFuPjwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+UmVkdXppcg0KK28gdGFtYW5obyBkbyBwcm9ncmFtYSwgZXhjbHVpbmRvIG8gc3Vwb3J0ZSBwYXJhIGJyYWlsbGU8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj5jb250cmF0YWRvcyAoVmVyIHNl5+NvIFRhYmVsYSBkZSBDb250cmHn428pLjwvc3Bhbj48c3Bhbg0KK3N0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48YnI+DQorPGJyPg0KKzxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKCgIDwvc3Bhbj48L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPi0tZGlzYWJsZS1zcGVlY2gtc3VwcG9ydDwvc3Bhbj48c3Bhbg0KK3N0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48YnI+DQorPHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgoKAgPC9zcGFuPjwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+UmVkdXppcg0KK28gdGFtYW5obyBkbyBwcm9ncmFtYSwgZXhjbHVpbmRvIG8gc3Vwb3J0ZSBkb3Mgc2ludGV0aXphZG9yZXM8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIGxhbmc9RU4tVVMgc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQ7bXNvLWFuc2ktbGFuZ3VhZ2U6DQorRU4tVVMnPjxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj5kZSB2b3ouPC9zcGFuPjxzcGFuIGxhbmc9RU4tVVMNCitzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Ijttc28tYW5zaS1sYW5ndWFnZToNCitFTi1VUyc+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBsYW5nPUVOLVVTIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToNCisiQ291cmllciBOZXciO21zby1hbnNpLWxhbmd1YWdlOkVOLVVTJz48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0IHN0eWxlPSdtYXJnaW4tbGVmdDoxMi4wcHQnPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz4tLWRpc2FibGUtaWNvbnY8L3NwYW4+PHNwYW4NCitzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PGJyPg0KKzwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+UmVkdXppciBvIHRhbWFuaG8gZG8gcHJvZ3JhbWEsIGNvbQ0KK2V4Y2x1c+NvIGRvIHN1cG9ydGUgcGFyYSBhIGNvbnZlcnPjbyBkZSBjb25qdW50byBkZSBjYXJhY3RlcmVzLjwvc3Bhbj48c3Bhbg0KK3N0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz4mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsNCis8L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPi0tZGlzYWJsZS1pY3U8L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5Og0KK1RpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxicj4NCis8c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKCgoCA8L3NwYW4+PC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5SZWR1emlyDQorbyB0YW1hbmhvIGRvIHByb2dyYW1hLCBleGNsdWluZG8gbyBzdXBvcnRlIGRlPG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+aW50ZXJuYWNpb25hbGl6YefjbyBVbmljb2RlLWJhc2VkLjwvc3Bhbj48c3Bhbg0KK3N0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48YnI+DQorPGJyPg0KKzxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKCgIDwvc3Bhbj48L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPi0tZGlzYWJsZS14DQorPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48YnI+DQorPHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgoKAgPC9zcGFuPjwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+UmVkdXppcg0KK28gdGFtYW5obyBkbyBwcm9ncmFtYSwgZXhjbHVpbmRvIG8gc3Vwb3J0ZSBwYXJhIFgxMS48L3NwYW4+PHNwYW4NCitzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PGJyPg0KKzxicj4NCis8c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKCgoCA8L3NwYW4+PC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz4tLWRpc2FibGUtYmVlcGVyLXN1cHBvcnQ8L3NwYW4+PHNwYW4NCitzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PGJyPg0KKzxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKCgIDwvc3Bhbj48L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPlJlZHV6aXINCitvIHRhbWFuaG8gZG8gcHJvZ3JhbWEsIGNvbSBleGNsdXPjbyBkbyBzdXBvcnRlIHBhcmEgbyBjb25zb2xlPG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+dG9uZSBnZW5lcmF0b3IuPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LWZhbWlseToNCitUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48YnI+DQorPGJyPg0KKzxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKCgIDwvc3Bhbj48L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPi0tZGlzYWJsZS1wY20tc3VwcG9ydDwvc3Bhbj48c3Bhbg0KK3N0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48YnI+DQorPHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgoKAgPC9zcGFuPjwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+UmVkdXppcg0KK28gdGFtYW5obyBkbyBwcm9ncmFtYSwgZXhjbHVpbmRvIG8gc3Vwb3J0ZSBwYXJhIGEgaW50ZXJmYWNlPG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+ZGlnaXRhbCBkZSDhdWRpbyBuYSBwbGFjYSBkZSBzb20uPC9zcGFuPjxzcGFuDQorc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxicg0KK3N0eWxlPSdtc28tc3BlY2lhbC1jaGFyYWN0ZXI6bGluZS1icmVhayc+DQorPCFbaWYgIXN1cHBvcnRMaW5lQnJlYWtOZXdMaW5lXT48YnIgc3R5bGU9J21zby1zcGVjaWFsLWNoYXJhY3RlcjpsaW5lLWJyZWFrJz4NCis8IVtlbmRpZl0+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKCgoCA8L3NwYW4+PC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz4tLWVuYWJsZS1wY20tc3VwcG9ydA0KKz0gaW50ZXJmYWNlPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48YnI+DQorPHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgoKAgPC9zcGFuPjwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+U2UNCithIHBsYXRhZm9ybWEgb2ZlcmVjZSBtYWlzIGRlIHVtYSBpbnRlcmZhY2UgZGlnaXRhbCBkZSDhdWRpbyBwYXJhPG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+c2VyIHVzYWRvIHBvZGUgc2VyIGVzcGVjaWZpY2Fkby48L3NwYW4+PHNwYW4NCitzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PGJyPg0KKzxicj4NCis8c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKCgoCA8L3NwYW4+PC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz4tLWRpc2FibGUtbWlkaS1zdXBwb3J0PC9zcGFuPjxzcGFuDQorc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxicj4NCis8c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKCgoCA8L3NwYW4+PC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5SZWR1emlyDQorbyB0YW1hbmhvIGRvIHByb2dyYW1hLCBjb20gZXhjbHVz428gZG8gc3Vwb3J0ZSBwYXJhIG8gTXVzaWNhbDxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPkluc3RydW1lbnQgRGlnaXRhbCBJbnRlcmZhY2UgZGEgcGxhY2EgZGUgc29tLjwvc3Bhbj48c3Bhbg0KK3N0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48YnI+DQorPGJyPg0KKzxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKCgIDwvc3Bhbj48L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPi0tZW5hYmxlLW1pZGktc3VwcG9ydA0KKz0gPGk+aW50ZXJmYWNlPC9pPiA8L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5Og0KKyJDb3VyaWVyIE5ldyInPjxicj4NCis8c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKCgoCA8L3NwYW4+PC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5TZQ0KK3VtYSBwbGF0YWZvcm1hIGZvcm5lY2UgbWFpcyBkZSB1bWEgSW50ZXJmYWNlIE11c2ljYWwgSW5zdHJ1bWVudDxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPkRpZ2l0YWwgZW50428gbyBxdWUgZXN04SBhIHNlciB1dGlsaXphZG8gcG9kZQ0KK3NlciBlc3BlY2lmaWNhZG8uPG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+PG86cD4mbmJzcDs8L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBsYW5nPUVOLVVTIHN0eWxlPSdtc28tYW5zaS1sYW5ndWFnZTpFTi1VUyc+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+UGxhdGZvcm08c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKANCis8L3NwYW4+SW50ZXJmYWNlPHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgIDwvc3Bhbj5EZXNjcmlwdGlvbjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gbGFuZz1FTi1VUyBzdHlsZT0nbXNvLWFuc2ktbGFuZ3VhZ2U6RU4tVVMnPjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqANCis8L3NwYW4+X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fPG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBsYW5nPUVOLVVTIHN0eWxlPSdtc28tYW5zaS1sYW5ndWFnZTpFTi1VUyc+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+TGludXg8c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKCgoKANCis8L3NwYW4+b3NzPHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgoKCgoKCgIDwvc3Bhbj5PcGVuIFNvdW5kIFN5c3RlbTxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gbGFuZz1FTi1VUyBzdHlsZT0nbXNvLWFuc2ktbGFuZ3VhZ2U6RU4tVVMnPjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgoKCgoKCgoKCgoCA8L3NwYW4+YWxzYTxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgoKCgoKAgPC9zcGFuPkFkdmFuY2VkIExpbnV4IFNvdW5kIEFyY2hpdGVjdHVyZTxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gbGFuZz1FTi1VUyBzdHlsZT0nbXNvLWFuc2ktbGFuZ3VhZ2U6RU4tVVMnPjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgoKAgPC9zcGFuPjwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+LS1kaXNhYmxlLWZtLXN1cHBvcnQNCis8L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxicj4NCis8c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKCgoCA8L3NwYW4+PC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5SZWR1emlyDQorbyB0YW1hbmhvIGRvIHByb2dyYW1hLCBleGNsdWluZG8gbyBhcG9pbyBkbyBzaW50ZXRpemFkb3IgZGUgRk08bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj5lbSB1bSBjYXJ0428gZGUgQWRMaWIsIE9QTDMsIFNvdW5kIEJsYXN0ZXIsDQorb3UgbyBlcXVpdmFsZW50ZSBkZSBzb20uPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToNCisiQ291cmllciBOZXciJz48YnI+DQorPGJyPg0KKzxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKCgIDwvc3Bhbj48L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPi0tZGlzYWJsZS1wbS1jb25maWdmaWxlPC9zcGFuPjxzcGFuDQorc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgoKAgPC9zcGFuPjwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+UmVkdXppcg0KK28gdGFtYW5obyBkbyBwcm9ncmFtYSwgZXhjbHVpbmRvIG8gc3Vwb3J0ZSBwYXJhIG8gYXJxdWl2byBkZTxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPmNvbmZpZ3VyYefjbyBkbyBkcml2ZXIgUGFwZW5tZWllci48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj4tLWRpc2FibGUtZ3BtPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LWZhbWlseToNCitUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48YnI+DQorPHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgoKAgPC9zcGFuPjwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+UmVkdXppcg0KK28gdGFtYW5obyBkbyBwcm9ncmFtYSwgZXhjbHVpbmRvIGEgaW50ZXJmYWNlIGRhIGFwbGljYefjbyBncG08bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj5xdWUgcGVybWl0ZSBpbnRlcmFnaXIgQlJMVFRZIGNvbSBvDQorZGlzcG9zaXRpdm8gcG9pbnRlciAobW91c2UpKHZlcjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPnNl5+NvIFBvbnRlaXJvIChNb3VzZSkgU3VwcG9ydCB2aWEgR1BNKS48L3NwYW4+PHNwYW4NCitzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PGJyPg0KKzxicj4NCis8c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKCgoCA8L3NwYW4+PC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz4tLWRpc2FibGUtYXBpDQorPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48YnI+DQorPHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgoKAgPC9zcGFuPjwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+UmVkdXppcg0KK28gdGFtYW5obyBkbyBwcm9ncmFtYSwgZXhjbHVpbmRvIGEgQXBwbGljYXRpb24gUHJvZ3JhbW1pbmc8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIGxhbmc9RU4tVVMgc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQ7bXNvLWFuc2ktbGFuZ3VhZ2U6DQorRU4tVVMnPjxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj5JbnRlcmZhY2UuPC9zcGFuPjxzcGFuDQorbGFuZz1FTi1VUyBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3IjsNCittc28tYW5zaS1sYW5ndWFnZTpFTi1VUyc+PGJyPg0KKzxicj4NCis8c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKCgoCA8L3NwYW4+PC9zcGFuPjxzcGFuIGxhbmc9RU4tVVMNCitzdHlsZT0nZm9udC1zaXplOjExLjBwdDttc28tYW5zaS1sYW5ndWFnZTpFTi1VUyc+LS13aXRoLWFwaS1wYXJhbWV0ZXJzPTxpPm5hbWU8L2k+DQorPSA8aT52YWx1ZTwvaT4sIC4uLjwvc3Bhbj48c3BhbiBsYW5nPUVOLVVTIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToNCisiQ291cmllciBOZXciO21zby1hbnNpLWxhbmd1YWdlOkVOLVVTJz48YnI+DQorPHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgoKAgPC9zcGFuPjwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+RXNwZWNpZmlxdWUNCithcyBjb25maWd1cmHn9WVzIHBhZHLjbyBkbyBwYXLibWV0cm8gcGFyYSBvIEFwcGxpY2F0aW9uPG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+UHJvZ3JhbW1pbmcgSW50ZXJmYWNlLiBTZSBvIG1lc21vIHBhcuJtZXRybyDpDQorZXNwZWNpZmljYWRvIG1haXMgZGUgdW1hPG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+dmV6LCBhIHN1YSBhdHJpYnVp5+NvIOkgdXNhZGEuIFBhcmEgb2J0ZXIgdW1hDQorZGVzY3Jp5+NvIGRvcyBwYXLibWV0cm9zPG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+YWNlaXRvcyBwZWxhIGludGVyZmFjZSwgY29uc3VsdGUgbyBtYW51YWwgZGUNCityZWZlcupuY2lhIEJybEFQSS4gVmVqYTxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPm9zIGFycXVpdm9zIGRlIGNvbmZpZ3VyYefjbyBhcGktcGFyYW1ldGVycyBlDQorbyBjb21hbmRvIJZhLjwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PGJyPg0KKzxicj4NCis8c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKCgoCA8L3NwYW4+PC9zcGFuPjxzcGFuIGxhbmc9RU4tVVMNCitzdHlsZT0nZm9udC1zaXplOjExLjBwdDttc28tYW5zaS1sYW5ndWFnZTpFTi1VUyc+LS1kaXNhYmxlLWNhbWwtYmluZGluZ3M8L3NwYW4+PHNwYW4NCitsYW5nPUVOLVVTIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciOw0KK21zby1hbnNpLWxhbmd1YWdlOkVOLVVTJz48YnI+DQorPHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgoKAgPC9zcGFuPjwvc3Bhbj48c3BhbiBsYW5nPUVOLVVTDQorc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQ7bXNvLWFuc2ktbGFuZ3VhZ2U6RU4tVVMnPk7jbyBjb25zdHJ1aXIgYmluZGluZ3MgY2FtbA0KK3BhcmEgbyBBcHBsaWNhdGlvbiBQcm9ncmFtbWluZyBJbnRlcmZhY2UuPC9zcGFuPjxzcGFuIGxhbmc9RU4tVVMNCitzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Ijttc28tYW5zaS1sYW5ndWFnZToNCitFTi1VUyc+PGJyPg0KKzxicj4NCis8c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKCgoCA8L3NwYW4+PC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz4tLWRpc2FibGUtamF2YS1iaW5kaW5nczwvc3Bhbj48c3Bhbg0KK3N0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48YnI+DQorPHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgoKAgPC9zcGFuPjwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+TuNvDQorY29uc3RydWlyIGFzIGJpbmRpbmdzIHBhcmEgYSBJbnRlcmZhY2UgSmF2YSBBcHBsaWNhdGlvbjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gbGFuZz1FTi1VUyBzdHlsZT0nZm9udC1zaXplOjExLjBwdDttc28tYW5zaS1sYW5ndWFnZToNCitFTi1VUyc+PHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPlByb2dyYW1taW5nLjwvc3Bhbj48c3Bhbg0KK2xhbmc9RU4tVVMgc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyI7DQorbXNvLWFuc2ktbGFuZ3VhZ2U6RU4tVVMnPjxicj4NCis8YnI+DQorPHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgoKAgPC9zcGFuPjwvc3Bhbj48c3BhbiBsYW5nPUVOLVVTDQorc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQ7bXNvLWFuc2ktbGFuZ3VhZ2U6RU4tVVMnPi0tZGlzYWJsZS1saXNwLWJpbmRpbmdzPC9zcGFuPjxzcGFuDQorbGFuZz1FTi1VUyBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3IjsNCittc28tYW5zaS1sYW5ndWFnZTpFTi1VUyc+PGJyPg0KKzxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKCgIDwvc3Bhbj48L3NwYW4+PHNwYW4gbGFuZz1FTi1VUw0KK3N0eWxlPSdmb250LXNpemU6MTEuMHB0O21zby1hbnNpLWxhbmd1YWdlOkVOLVVTJz5O428gY29uc3RydWlyIGFzIGJpbmRpbmdzIGRlDQorTGlzcCBwYXJhIG8gQXBwbGljYXRpb24gUHJvZ3JhbW1pbmc8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIGxhbmc9RU4tVVMgc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQ7bXNvLWFuc2ktbGFuZ3VhZ2U6DQorRU4tVVMnPjxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj5JbnRlcmZhY2UuPC9zcGFuPjxzcGFuDQorbGFuZz1FTi1VUyBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3IjsNCittc28tYW5zaS1sYW5ndWFnZTpFTi1VUyc+PGJyPg0KKzxicj4NCis8c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKCgoCA8L3NwYW4+PC9zcGFuPjxzcGFuIGxhbmc9RU4tVVMNCitzdHlsZT0nZm9udC1zaXplOjExLjBwdDttc28tYW5zaS1sYW5ndWFnZTpFTi1VUyc+LS1kaXNhYmxlLXB5dGhvbi1iaW5kaW5ncyA8L3NwYW4+PHNwYW4NCitsYW5nPUVOLVVTIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciOw0KK21zby1hbnNpLWxhbmd1YWdlOkVOLVVTJz48YnI+DQorPHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgoKAgPC9zcGFuPjwvc3Bhbj48c3BhbiBsYW5nPUVOLVVTDQorc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQ7bXNvLWFuc2ktbGFuZ3VhZ2U6RU4tVVMnPk7jbyBjb25zdHJ1aXIgYmluZGluZ3MgUHl0aG9uDQorcGFyYSBvIEFwcGxpY2F0aW9uIFByb2dyYW1taW5nPG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBsYW5nPUVOLVVTIHN0eWxlPSdmb250LXNpemU6MTEuMHB0O21zby1hbnNpLWxhbmd1YWdlOg0KK0VOLVVTJz48c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+SW50ZXJmYWNlLjwvc3Bhbj48c3Bhbg0KK2xhbmc9RU4tVVMgc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyI7DQorbXNvLWFuc2ktbGFuZ3VhZ2U6RU4tVVMnPjxicj4NCis8YnI+DQorPHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgoKAgPC9zcGFuPjwvc3Bhbj48c3BhbiBsYW5nPUVOLVVTDQorc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQ7bXNvLWFuc2ktbGFuZ3VhZ2U6RU4tVVMnPi0tZGlzYWJsZS10Y2wtYmluZGluZ3MgPC9zcGFuPjxzcGFuDQorbGFuZz1FTi1VUyBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3IjsNCittc28tYW5zaS1sYW5ndWFnZTpFTi1VUyc+PGJyPg0KKzxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKCgIDwvc3Bhbj48L3NwYW4+PHNwYW4gbGFuZz1FTi1VUw0KK3N0eWxlPSdmb250LXNpemU6MTEuMHB0O21zby1hbnNpLWxhbmd1YWdlOkVOLVVTJz5O428gY29uc3RydWlyIGJpbmRpbmdzIFRjbA0KK3BhcmEgYSBBcHBsaWNhdGlvbiBQcm9ncmFtbWluZyBJbnRlcmZhY2UuPC9zcGFuPjxzcGFuIGxhbmc9RU4tVVMNCitzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Ijttc28tYW5zaS1sYW5ndWFnZToNCitFTi1VUyc+PGJyIHN0eWxlPSdtc28tc3BlY2lhbC1jaGFyYWN0ZXI6bGluZS1icmVhayc+DQorPCFbaWYgIXN1cHBvcnRMaW5lQnJlYWtOZXdMaW5lXT48YnIgc3R5bGU9J21zby1zcGVjaWFsLWNoYXJhY3RlcjpsaW5lLWJyZWFrJz4NCis8IVtlbmRpZl0+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKCgoCA8L3NwYW4+PC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz4tLXdpdGgtdGNsLWNvbmZpZz08aT5wYXRoPC9pPg0KKzwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PGJyPg0KKzxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKCgIDwvc3Bhbj48L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPkVzcGVjaWZpcXVlDQorbyBsb2NhbCBkbyBzY3JpcHQgZGUgY29uZmlndXJh5+NvIFRjbCAodGNsQ29uZmlnLnNoKS4gT3UgbzxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPmNhbWluaG8gcGFyYSBvIHNjcmlwdCBlbSBzaSBvdSBvIGRpcmV083Jpbw0KK3F1ZSBjb2506W0gcG9kZSBzZXI8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj5mb3JuZWNpZG8uIFF1YWxxdWVyIHVtYSBkYXMgc2VndWludGVzDQorcGFsYXZyYXMgdGFtYultIHBvZGUgc2VyIHVzYWRvPG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+Y29tbyBvIG9wZXJhbmRvIGVzdGEgb3Dn4286PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD4mbmJzcDs8L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+bm88bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj51dGlsaXphciBvdXRyb3MgbWVpb3MgZGUgYWRpdmluaGFyIHNlIFRjbA0KK2VzdOEgZGlzcG9u7XZlbCwgc2Ugc2ltLDxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPm9uZGUgZWxlIGZvaSBpbnN0YWxhZG8uIElzc28g6SBlcXVpdmFsZW50ZSBhDQorZXNwZWNpZmljYXIglndpdGhvdXQ8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj50Y2wtY29uZmlnLjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPiZuYnNwOyZuYnNwO3llczxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPnByb2N1cmUgbyBzY3JpcHQgZW0gYWxndW5zIGRpcmV083Jpb3MNCitmcmVxdWVudGVtZW50ZSB1dGlsaXphZG9zLiBJc3NvPG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+6SBlcXVpdmFsZW50ZSBhIGVzcGVjaWZpY2FyIC0td2l0aC10Y2wtY29uZmlnLjwvc3Bhbj48c3Bhbg0KK3N0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48YnINCitzdHlsZT0nbXNvLXNwZWNpYWwtY2hhcmFjdGVyOmxpbmUtYnJlYWsnPg0KKzwhW2lmICFzdXBwb3J0TGluZUJyZWFrTmV3TGluZV0+PGJyIHN0eWxlPSdtc28tc3BlY2lhbC1jaGFyYWN0ZXI6bGluZS1icmVhayc+DQorPCFbZW5kaWZdPjwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+My4yLjEuNCA8c3Bhbg0KK3N0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5PcOf1ZXMgRGl2ZXJzYXM8L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxNC4wcHQ7DQorbXNvLWJpZGktZm9udC1zaXplOjEwLjBwdDtmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48YnI+DQorPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48YnI+DQorPHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgoKAgPC9zcGFuPjwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+LS13aXRoLWNvbXBpbGVyLXByZWZpeA0KKz0gPGk+cHJlZml4PC9pPjwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PGJyPg0KKzxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKCgIDwvc3Bhbj48L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPkVzcGVjaWZpcXVlDQorbyBwcmVmaXhvIChjYW1pbmhvIGUgaW7tY2lvIGRvIG5vbWUgZG8gcHJvZ3JhbWEpIHBhcmEgbzxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPmNvbmp1bnRvIGRlIGZlcnJhbWVudGFzIGRlIGNvbXBpbGFyIGUgbGlnYXINCitwb3NzYW0gc2VyIHV0aWxpemFkYXMuPG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+UG9kZSBzZXIgbmVjZXNz4XJpbyB1c2FyIGVzdGEgb3Dn428gc2UsIHBvcg0KK2V4ZW1wbG8sIHZvY+ogZXN04SBhPG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+Y29tcGlsYW5kbyBjcnV6YWRvIHBhcmEgdW1hIGFycXVpdGV0dXJhDQorZGlmZXJlbnRlLjwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+Jm5ic3A7Jm5ic3A7Jm5ic3A7IDwvc3Bhbj48c3Bhbg0KK3N0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj4tLXdpdGgtaW5pdC1wYXRoID0gPGk+cGF0aDwvaT48L3NwYW4+PHNwYW4NCitzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PGJyPg0KKzxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKCgIDwvc3Bhbj48L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPkVzcGVjaWZpcXVlDQorbyBjYW1pbmhvIHBhcmEgbyBwcm9ncmFtYSByZWFsIGRlIGluaXQgZG8gc2lzdGVtYS4gTzxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPmNhbWluaG8gYWJzb2x1dG8gZGV2ZSBzZXIgZm9ybmVjaWRvLiBTZSBlc3RhDQorb3Dn428gZm9yIGVzcGVjaWZpY2FkYSw8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj5lbnTjbzo8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0IHN0eWxlPSdtYXJnaW4tbGVmdDo0Ni41cHQ7dGV4dC1pbmRlbnQ6LTE5LjVwdDttc28tbGlzdDoNCitsMiBsZXZlbDEgbGZvMjt0YWItc3RvcHM6bGlzdCA0Ni41cHQnPjwhW2lmICFzdXBwb3J0TGlzdHNdPjxzcGFuDQorc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQ7bXNvLWZhcmVhc3QtZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PHNwYW4NCitzdHlsZT0nbXNvLWxpc3Q6SWdub3JlJz4xLjxzcGFuIHN0eWxlPSdmb250OjcuMHB0ICJUaW1lcyBOZXcgUm9tYW4iJz4mbmJzcDsmbmJzcDsmbmJzcDsNCis8L3NwYW4+PC9zcGFuPjwvc3Bhbj48IVtlbmRpZl0+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPk8gcHJvZ3JhbWEgZGUNCitpbml0IGRldmUgc2VyIG1vdmlkbyBwYXJhIHVtIG5vdm8gbG9jYWwuPG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dCBzdHlsZT0nbWFyZ2luLWxlZnQ6MjcuMHB0Jz48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7DQorbXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD4mbmJzcDs8L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dCBzdHlsZT0nbWFyZ2luLWxlZnQ6NDYuNXB0O3RleHQtaW5kZW50Oi0xOS41cHQ7bXNvLWxpc3Q6DQorbDIgbGV2ZWwxIGxmbzI7dGFiLXN0b3BzOmxpc3QgNDYuNXB0Jz48IVtpZiAhc3VwcG9ydExpc3RzXT48c3Bhbg0KK3N0eWxlPSdmb250LXNpemU6MTEuMHB0O21zby1mYXJlYXN0LWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxzcGFuDQorc3R5bGU9J21zby1saXN0Oklnbm9yZSc+Mi48c3BhbiBzdHlsZT0nZm9udDo3LjBwdCAiVGltZXMgTmV3IFJvbWFuIic+Jm5ic3A7Jm5ic3A7Jm5ic3A7DQorPC9zcGFuPjwvc3Bhbj48L3NwYW4+PCFbZW5kaWZdPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5PIGJybHR0eSBkZXZlIHNlcg0KK3RyYW5zZmVyaWRvIHBhcmEgbG9jYWwgb3JpZ2luYWwgZG8gcHJvZ3JhbWEgZGU8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKCgoKAgPC9zcGFuPmluaXQuPG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD4mbmJzcDs8L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dCBzdHlsZT0nbWFyZ2luLWxlZnQ6NDYuNXB0O3RleHQtaW5kZW50Oi0xOS41cHQ7bXNvLWxpc3Q6DQorbDIgbGV2ZWwxIGxmbzI7dGFiLXN0b3BzOmxpc3QgNDYuNXB0Jz48IVtpZiAhc3VwcG9ydExpc3RzXT48c3Bhbg0KK3N0eWxlPSdmb250LXNpemU6MTEuMHB0O21zby1mYXJlYXN0LWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxzcGFuDQorc3R5bGU9J21zby1saXN0Oklnbm9yZSc+My48c3BhbiBzdHlsZT0nZm9udDo3LjBwdCAiVGltZXMgTmV3IFJvbWFuIic+Jm5ic3A7Jm5ic3A7Jm5ic3A7DQorPC9zcGFuPjwvc3Bhbj48L3NwYW4+PCFbZW5kaWZdPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5RdWFuZG8gbyBzaXN0ZW1hDQorZGUgaW5pdCDpIGV4ZWN1dGFkbyBubyBpbmljaW8sIGJybHR0eSDpPG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dCBzdHlsZT0nbWFyZ2luLWxlZnQ6MjcuMHB0Jz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKAgPC9zcGFuPnJlYWxtZW50ZSBleGVjdXRhZG8uPC9zcGFuPiA8c3Bhbg0KK3N0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5FbGUgc2UgY29sb2NhIGVtIHNlZ3VuZG8gcGxhbm8sIGUgZXhlY3V0YSBhPG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dCBzdHlsZT0nbWFyZ2luLWxlZnQ6MjcuMHB0Jz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKAgPC9zcGFuPmluaWNpYWxpemHn428gcmVhbCBubyBwcmltZWlybyBwbGFuby4gRXN0ZSDpDQordW1hIG1hbmVpcmEgZGUgdGVyPG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dCBzdHlsZT0nbWFyZ2luLWxlZnQ6MjcuMHB0Jz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKAgPC9zcGFuPmJyYWlsbGUgZGVzZGUgbyBpbu1jaW8uIMkgZXNwZWNpYWxtZW50ZSD6dGlsDQorcGFyYSBhbGd1bnMgZGlzY29zPG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dCBzdHlsZT0nbWFyZ2luLWxlZnQ6MjcuMHB0Jz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKAgPC9zcGFuPmRlIGluc3RhbGHn428vcmVjdXBlcmHn428uPG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dCBzdHlsZT0nbWFyZ2luLWxlZnQ6MjcuMHB0Jz48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7DQorbXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD4mbmJzcDs8L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKCgoCA8L3NwYW4+PC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5TZQ0KK2Vzc2Egb3Dn428gbuNvIGZvciBlc3BlY2lmaWNhZGEsIGVudONvIGVzdGUgcmVjdXJzbyBu428gZXN04TxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPmF0aXZhZG8uIEVzdGEgb3Dn428g6SBkZXN0aW5hZGENCitwcmluY2lwYWxtZW50ZSBwYXJhIGEgY29uc3RydefjbyBkZTxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPnVtYSBpbWFnZW0gZG8gaW5zdGFsYWRvciBicmFpbGxpZmljYWRhLjwvc3Bhbj48c3Bhbg0KK3N0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48YnI+DQorPGJyPg0KKzxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKCgIDwvc3Bhbj48L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPi0td2l0aC1zdGRlcnItcGF0aA0KKz0gPGk+cGF0aDwvaT48L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxicj4NCis8c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKCgoCA8L3NwYW4+PC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5Fc3BlY2lmaXF1ZQ0KK28gY2FtaW5obyBwYXJhIG8gYXJxdWl2byBvdSBkaXNwb3NpdGl2byBvbmRlIG8gcGFkcuNvPG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+ZXJyb3Ig6SBlc2NyaXRvLiBPIGNhbWluaG8gYWJzb2x1dG8gZGV2ZSBzZXINCitmb3JuZWNpZG8uIFNlIGVzc2Egb3Dn4288bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj5u428gZm9yIGVzcGVjaWZpY2FkYSwgZW50428gZXN0ZSByZWN1cnNvIG7jbw0KK2VzdOEgYXRpdmFkby4gRXN0YSBvcOfjbzxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPukgZGVzdGluYWRhIHByaW5jaXBhbG1lbnRlIHBhcmEgYSBjb25zdHJ15+NvDQorZGUgdW1hIGltYWdlbSBkbzxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gbGFuZz1FTi1VUyBzdHlsZT0nZm9udC1zaXplOjExLjBwdDttc28tYW5zaS1sYW5ndWFnZToNCitFTi1VUyc+PHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPmluc3RhbGFkb3IgYnJhaWxsaWZpZWQuPC9zcGFuPjxzcGFuDQorbGFuZz1FTi1VUyBzdHlsZT0nbXNvLWFuc2ktbGFuZ3VhZ2U6RU4tVVMnPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gbGFuZz1FTi1VUyBzdHlsZT0nbXNvLWFuc2ktbGFuZ3VhZ2U6RU4tVVMnPjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPjMuMi4yIDxzcGFuDQorc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPkF0aW5naXIgbWV0YXMgZGUgYXJxdWl2b3M8L3NwYW4+PHNwYW4NCitzdHlsZT0nZm9udC1zaXplOjExLjBwdDtmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0O2ZvbnQtZmFtaWx5OlRpbWVzOw0KK21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxicj4NCis8c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKCgoCA8L3NwYW4+PC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5EZXBvaXMNCitCUkxUVFkgdGVyIHNpZG8gY29uZmlndXJhZG8sIG8gcHLzeGltbyBwYXNzbyDpIGNvbXBpbGFyIGU8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj5pbnN0YWzhLWxvLiBJc3RvIOkgZmVpdG8gYXRyYXbpcyBkYSBhcGxpY2Hn428NCitkZSBjb21hbmRvIG1ha2UgcXVlIG88bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj5zaXN0ZW1hIGRlIGFycXVpdm8gcHJpbmNpcGFsIEJSTFRUWSBmYXplcg0KKyhNYWtlZmlsZSBubyBkaXJldPNyaW8gZGU8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj5u7XZlbCBzdXBlcmlvcikuIE8gYXJxdWl2byBCUkxUVFkg6Q0KK2NvbXBhdO12ZWwgY29tIGEgbWFpb3JpYSBkb3M8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj5vYmpldGl2b3MgY29tdW5zIGRlIG1hbnV0ZW7n428gZGEgYXBsaWNh5+NvLg0KK0VsZXMgaW5jbHVlbTo8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj5tYWtlPG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+dW0gYXRhbGhvIHBhcmEgbWFrZSBhbGwuPG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD4mbmJzcDs8L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+bWFrZSBhbGw8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj5jb21waWxhciBlIHZpbmN1bGFyIG8gZXhlY3V04XZlbCBkbyBCUkxUVFksDQorc2V1cyBkcml2ZXJzIGUgc3VhczxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPnDhZ2luYXMgZGUgYWp1ZGEsIHNldXMgcHJvZ3JhbWFzIGRlIHRlc3RlLCBlDQorYWxndW5zIG91dHJvcyBwZXF1ZW5vczxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPnV0aWxpdOFyaW9zLjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPm1ha2UgaW5zdGFsbDxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPmNvbXBsZXRlIGEgZmFzZSBkZSBjb21waWxh5+NvIGUgbGlnYefjbyAodmVyIJNtYWtlDQorYWxslCksIGUgZGVwb2lzPG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+aW5zdGFsYXIgb3MgZXhlY3V04XZlaXMgZG8gQlJMVFRZLCBhcnF1aXZvcw0KK2RlIGRhZG9zLCBkcml2ZXJzIGU8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj5w4WdpbmFzIGRlIGFqdWRhLCBub3MgbHVnYXJlcyBjb3JyZXRvcyBlIGNvbQ0KK2FzIHBlcm1pc3P1ZXMgY29ycmV0YXMuPG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+PG86cD4mbmJzcDs8L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oDwvc3Bhbj4mbmJzcDttYWtlIHVuaW5zdGFsbDxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPnJlbW92YSBvIGV4ZWN1dOF2ZWwgQlJMVFRZLCBzZXVzIGFycXVpdm9zIGRlDQorZGFkb3MsIGRyaXZlcnMgZSBw4WdpbmFzPG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+ZGUgYWp1ZGEsIGEgcGFydGlyIGRvIHNpc3RlbWEuPC9zcGFuPjxzcGFuDQorc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PG86cD4mbmJzcDs8L286cD48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKCgoKCgIDwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxvOnA+Jm5ic3A7PC9vOnA+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48bzpwPiZuYnNwOzwvbzpwPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PG86cD4mbmJzcDs8L286cD48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxvOnA+Jm5ic3A7PC9vOnA+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKCgoKCgoKCgIDwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxvOnA+Jm5ic3A7PC9vOnA+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+PHNwYW4NCitzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+bWFrZSBjbGVhbjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPmNlcnRpZmlxdWUtc2UgcXVlIGEgcHLzeGltYSBjb21waWxh5+NvIGUNCitsaWdh5+NvICh2ZXIgbWFrZSBhbGwpIHNlcuE8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj5mZWl0byBhIHBhcnRpciBkbyB6ZXJvLCByZW1vdmVuZG8gb3MNCityZXN1bHRhZG9zIGRhIGNvbXBpbGHn428sIGxpZ2Hn4288bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj5lIHRlc3RlcyBkYSBlc3RydXR1cmEgZGUgZGlyZXTzcmlvIGRlIG9yaWdlbS4NCitJc3NvIGluY2x1aSBhIHJlbW/n428gZGU8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj5hcnF1aXZvcyBkZSBvYmpldG8sIGV4ZWN1dOF2ZWlzLCBvYmpldG9zDQorY29tcGFydGlsaGFkb3MgZGluYW1pY2FtZW50ZTxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPmNhcnJlZ+F2ZWlzLCBsaXN0YXMgZGUgZHJpdmVycywgcOFnaW5hcyBkZQ0KK2FqdWRhLCBhcnF1aXZvcyBkZTxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPmNhYmXnYWxobyB0ZW1wb3LhcmlhLCBlIGFycXVpdm9zIHByaW5jaXBhaXMuPG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD4mbmJzcDs8L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+Jm5ic3A7IG1ha2UgZGlzdGNsZWFuPG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+YWzpbSBkZSByZW1vdmVyIG9zIHJlc3VsdGFkb3MgZGEgY29tcGlsYefjbyBlDQordmluY3VsYefjbyAodmVyIG1ha2U8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj5jbGVhbik6PC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczsNCittc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0IHN0eWxlPSdtYXJnaW4tbGVmdDo0OC45cHQ7dGV4dC1pbmRlbnQ6LTE4LjBwdDttc28tbGlzdDoNCitsMTAgbGV2ZWwxIGxmbzM7dGFiLXN0b3BzOmxpc3QgNDguOXB0Jz48IVtpZiAhc3VwcG9ydExpc3RzXT48c3Bhbg0KK3N0eWxlPSdmb250LWZhbWlseTpXaW5nZGluZ3M7bXNvLWZhcmVhc3QtZm9udC1mYW1pbHk6V2luZ2RpbmdzO21zby1iaWRpLWZvbnQtZmFtaWx5Og0KK1dpbmdkaW5ncyc+PHNwYW4gc3R5bGU9J21zby1saXN0Oklnbm9yZSc+pzxzcGFuIHN0eWxlPSdmb250OjcuMHB0ICJUaW1lcyBOZXcgUm9tYW4iJz4mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsNCis8L3NwYW4+PC9zcGFuPjwvc3Bhbj48IVtlbmRpZl0+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPlJlbW92YSBvcw0KK3Jlc3VsdGFkb3MgZGEgY29uZmlndXJh5+NvIEJSTFRUWSAodmVyIEJ1aWxkIE9wdGlvbnMpLiBJc3NvIGluY2x1aSBhIHJlbW/n428gZGUNCitjb25maWcubWssIGNvbmZpZy5oLCBjb25maWcuY2FjaGUsIGNvbmZpZy5zdGF0dXMsIGNvbmZpZy5sb2cuPC9zcGFuPjxzcGFuDQorc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQgc3R5bGU9J21hcmdpbi1sZWZ0OjQ4LjlwdDt0ZXh0LWluZGVudDotMTguMHB0O21zby1saXN0Og0KK2wxMCBsZXZlbDEgbGZvMzt0YWItc3RvcHM6bGlzdCA0OC45cHQnPjwhW2lmICFzdXBwb3J0TGlzdHNdPjxzcGFuDQorc3R5bGU9J2ZvbnQtZmFtaWx5OldpbmdkaW5nczttc28tZmFyZWFzdC1mb250LWZhbWlseTpXaW5nZGluZ3M7bXNvLWJpZGktZm9udC1mYW1pbHk6DQorV2luZ2RpbmdzJz48c3BhbiBzdHlsZT0nbXNvLWxpc3Q6SWdub3JlJz6nPHNwYW4gc3R5bGU9J2ZvbnQ6Ny4wcHQgIlRpbWVzIE5ldyBSb21hbiInPiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOw0KKzwvc3Bhbj48L3NwYW4+PC9zcGFuPjwhW2VuZGlmXT48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+UmVtb3ZlciBvcyBvdXRyb3MNCithcnF1aXZvcyBkYSBlc3RydXR1cmEgZGUgZGlyZXTzcmlvIGRlIG9yaWdlbSBxdWUgc2UgYWN1bXVsYW0gYW8gbG9uZ28gZG8gdGVtcG8sDQorbWFzIHF1ZSBu428gcGVydGVuY2VtIGFsaS4gSXNzbyBpbmNsdWkgYSByZW1v5+NvIGRlIGFycXVpdm9zIGRlIGVkaXRvciBkZQ0KK2JhY2t1cCwgb3MgcmVzdWx0YWRvcyBkbyBjYXNvIGRlIHRlc3RlLCByZWplaXRvdSBibG9jb3MgZGUgcGF0Y2gsIGUgYXMgY/NwaWFzDQorZG9zIGFycXVpdm9zIG9yaWdpbmFpcy48L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5Og0KKyJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J21zby1iaWRpLWZvbnQtc2l6ZToxOC4wcHQnPjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J21zby1iaWRpLWZvbnQtc2l6ZToxOC4wcHQnPjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPjMuMyBUZXN0YW5kbyBvIEJSTFRUWTo8L3NwYW4+PHNwYW4NCitzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PGJyPg0KKzxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKCgIDwvc3Bhbj48L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPkFw83MNCithIGNvbXBpbGHn428sIGxpZ2Hn428gZSBpbnN0YWxh5+NvIEJSTFRUWSwg6SB1bWEgYm9hIGlk6WlhIHBhcmE8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj5mYXplciB1bSB0ZXN0ZSBy4XBpZG8gYW50ZXMgZGUgYXRpduEtbG8NCitwZXJtYW5lbnRlbWVudGUuIFBhcmEgZmF6ZXI8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj5pc3NvLCBjaGFtZSBjb20gbyBjb21hbmRvOjwvc3Bhbj48c3Bhbg0KK3N0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48YnI+DQorPGJyPg0KKzxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKCgIDwvc3Bhbj48L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPmJybHR0eQ0KKy1iZHJpdmVyIC1kZGV2aWNlPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToNCisiQ291cmllciBOZXciJz48YnI+DQorPGJyPg0KKzxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKA8L3NwYW4+PC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5QYXJhIDxpPmRyaXZlcjwvaT4sDQorZXNwZWNpZmljYXIgbyBj82RpZ28gZGUgaWRlbnRpZmljYefjbyBkbyBkcml2ZXIgZGUgZHVhczxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPmxldHJhcyBjb3JyZXNwb25kZW50ZSBhbyBzZXUgZGlzcGxheSBCcmFpbGxlLg0KK1BhcmEgbyBkaXNwb3NpdGl2byw8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj5lc3BlY2lmaXF1ZSBvIGNhbWluaG8gY29tcGxldG8gZG8gZGlzcG9zaXRpdm8NCitxdWUgbyBzZXUgZGlzcGxheSBlc3ThPG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+Y29uZWN0YWRvLjwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6DQorVGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PGJyPg0KKzxicj4NCis8c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKCgoCA8L3NwYW4+PC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5TZQ0KK3ZvY+ogbuNvIHF1aXNlciBleHBsaWNpdGFtZW50ZSBpZGVudGlmaWNhciBvIGRyaXZlciBlIHVtPG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+ZGlzcG9zaXRpdm8gZGUgY2FkYSB2ZXogcXVlIHZvY+ogY29tZedhciBvDQorQlJMVFRZLCBlbnTjbyB2b2PqIHBvZGUgdGVyPG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+ZHVhcyBhYm9yZGFnZW5zLiBWb2PqIHBvZGUgZXN0YWJlbGVjZXINCitwYWRy9WVzIGRvIHNpc3RlbWEgYXRyYXbpcyBkbzxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPmJyYWlsbGUtZHJpdmVyIGUgZG8gZGlzcG9zaXRpdm8NCiticmFpbGxlLWRldmljZSBkbyBhcnF1aXZvIGRlPG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+Y29uZmlndXJh5+NvLCBlL291IGNvbXBpbGFyIGFzIHN1YXMNCituZWNlc3NpZGFkZXMgcGFyYSBhIGRpcmVpdGEgZW08bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj48L3NwYW4+PHNwYW4gbGFuZz1FTi1VUyBzdHlsZT0nZm9udC1zaXplOg0KKzExLjBwdDttc28tYW5zaS1sYW5ndWFnZTpFTi1VUyc+QlJMVFRZIGF0cmF2ZXMgLS13aXRoLWJyYWlsbGUtZHJpdmVyIGUNCistLXdpdGgtYnJhaWxsZS1kZXZpY2UuPC9zcGFuPjxzcGFuIGxhbmc9RU4tVVMgc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzOw0KK21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyI7bXNvLWFuc2ktbGFuZ3VhZ2U6RU4tVVMnPjxicj4NCis8c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKCgoCA8L3NwYW4+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKCgoCA8L3NwYW4+PC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5BDQorbWVuc2FnZW0gQlJMVFRZIGRlIGlkZW50aWZpY2Hn428gZGUgdmVyc+NvIGRldmUgYXBhcmVjZXIgbm8gZGlzcGxheTxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPmJyYWlsbGUgcG9yIGFsZ3VucyBzZWd1bmRvcyAodmVqYSBuYSBsaW5oYSBkZQ0KK2NvbWFuZG8gLW0pLiBEZXBvaXMgZWxlPG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+dmFpIGVtYm9yYSAocXVlIHZvY+ogcG9kZSBhY2VsZXJhciBwcmVtaW5kbw0KK3F1YWxxdWVyIHRlY2xhIGRvPG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+ZGlzcGxheSksIGEg4XJlYSBkYSB0ZWxhIG9uZGUgZXN04SBvIGN1cnNvcg0KK2RldmUgYXBhcmVjZXIuIElzc288bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj5zaWduaWZpY2EgcXVlIHZvY+ogZGV2ZSBlc3BlcmFyIHBhcmEgdmVyIG8NCitzZXUgY29tYW5kbyBzaGVsbCBwcm9tcHQuPG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+RW50428sIHF1YW5kbyB2b2PqIGVudHJhIGVtIHNldSBwcvN4aW1vDQorY29tYW5kbywgY2FkYSBjYXLhY3RlciBkZXZlPG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+YXBhcmVjZXIgbm8gdmlzb3IsIGNvbW8g6SBkaWdpdGFkbyBubw0KK3RlY2xhZG8uPG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+PG86cD4mbmJzcDs8L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+U2Ugc3VhDQorZXhwZXJp6m5jaWEsIOkgZGVpeGFyIG8gZXhlY3V0YXIgbyBCUkxUVFkgZW50428gZGl2aXJ0YS1zZSwgPHNwYW4NCitzdHlsZT0nZm9udC1mYW1pbHk6V2luZ2RpbmdzO21zby1hc2NpaS1mb250LWZhbWlseToiQ291cmllciBOZXciO21zby1oYW5zaS1mb250LWZhbWlseToNCisiQ291cmllciBOZXciO21zby1jaGFyLXR5cGU6c3ltYm9sO21zby1zeW1ib2wtZm9udC1mYW1pbHk6V2luZ2RpbmdzJz48c3Bhbg0KK3N0eWxlPSdtc28tY2hhci10eXBlOnN5bWJvbDttc28tc3ltYm9sLWZvbnQtZmFtaWx5OldpbmdkaW5ncyc+Sjwvc3Bhbj48L3NwYW4+LiBTZQ0KK3ZvY+o8L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj5u428gdGVtDQorZXhwZXJp6m5jaWEsIHByZWNpc2Fy4SB0ZXN0YXIgY2FkYSBkcml2ZXIgc2VwYXJhZGFtZW50ZSBuYSBvcmRlbTwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPmlzb2xhZGEgZG8NCitwcm9ibGVtYS4gTyBkcml2ZXIgZGUgdGVsYSBwb2RlIHNlciB0ZXN0YWRvIGNvbSCTc2NydGVzdJQsIGUgbzwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPmRyaXZlciBkbyBkaXNwbGF5DQorYnJhaWxsZSBwb2RlIHNlciB0ZXN0YWRvIGNvbSCTYnJsdGVzdJQuPHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgoKAgPC9zcGFuPjwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+U2UNCit2b2PqIHRpdmVyIHVtIHByb2JsZW1hIHF1ZSBleGlnZSB1bWEgZ3JhbmRlIHF1YW50aWRhZGUgZGUgZ2FyaW1wbyw8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj5lbnTjbyB2b2PqIHBvZGUgcXVlcmVyIHVzYXIgYSBzZWd1aW50ZSBsaW5oYQ0KK2RlIGNvbWFuZG8gYnJsdHR5Ojwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6DQorIkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+tyAtbGRlYnVnIHBhcmEgcmVnaXN0cmFyIG11aXRhcyBtZW5zYWdlbnMgZGUNCitkaWFnbvNzdGljby48L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPrcgLW4gcGFyYSBtYW50ZXIgQlJMVFRZIGVtIHByaW1laXJvIHBsYW5vLjwvc3Bhbj48c3Bhbg0KK3N0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj63IC1lIHBhcmEgZGlyZWNpb25hciBhcyBtZW5zYWdlbnMgZGUNCitkaWFnbvNzdGljbyBkZSBlcnJvIHBhZHLjbyBlbSB2ZXo8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKAgPC9zcGFuPmRlIGxvZyBkbyBzaXN0ZW1hLjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqA8L3NwYW4+PHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqA8L3NwYW4+PC9zcGFuPjxzcGFuDQorc3R5bGU9J21zby1iaWRpLWZvbnQtc2l6ZToxOC4wcHQnPjMuNCBJbmljaWFuZG8gbyBCUkxUVFk8L3NwYW4+PHNwYW4NCitzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dCBzdHlsZT0nbWFyZ2luLWxlZnQ6OS4wcHQnPjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczsNCittc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48YnI+DQorPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5CUkxUVFksIHF1YW5kbyBkZXZpZGFtZW50ZSBpbnN0YWxhZG8sIOkNCitpbnZvY2FkYSBjb20gbyD6bmljbyBjb21hbmRvIGJybHR0eS4gVW0gYXJxdWl2byBkZSBjb25maWd1cmHn428gKHZlciBBcnF1aXZvcw0KK2RlIENvbmZpZ3VyYefjbykgcG9kZSBzZXIgY3JpYWRvIGEgZmltIGRlIGVzdGFiZWxlY2VyIHBhZHL1ZXMgZG8gc2lzdGVtYSBjb21vIGENCitsb2NhbGl6YefjbyBkbyBhcnF1aXZvIGRlIHByZWZlcupuY2lhcywgbyBkcml2ZXIgZGlzcGxheSBicmFpbGxlIGEgc2VyDQordXRpbGl6YWRhLCBvIGRpc3Bvc2l0aXZvIHBhcmEgbyBxdWFsIG8gZGlzcGxheSBicmFpbGxlIGVzdGl2ZXIgbGlnYWRvLCBlIGENCit0YWJlbGEgZGUgdGV4dG8gcGFyYSBzZXIgdXNhZG8uIE11aXRhcyBvcOf1ZXMgKHZlciBPcOf1ZXMgZGUgTGluaGEgZGUgQ29tYW5kbykNCitwZXJtaXRlbSBhIGVzcGVjaWZpY2Hn428gZGUgdGVtcG8gZGUgZXhlY3Xn428gZXhwbO1jaXRhIGNvbW8gYSBsb2NhbGl6YefjbyBkbw0KK2FycXVpdm8gZGUgY29uZmlndXJh5+NvLCBvcyBwYWRy9WVzIGVzdGFiZWxlY2lkb3Mgbm8gYXJxdWl2byBkZSBjb25maWd1cmHn428sIGUNCithbGd1bWFzIGNhcmFjdGVy7XN0aWNhcyBxdWUgdOptIHBhZHL1ZXMgcmF6b+F2ZWlzLiBBIG9w5+NvIJZoIGV4aWJlIHVtIHJlc3Vtbw0KK2RlIHRvZGFzIGFzIG9w5/Vlcy4gQSBvcOfjbyAtdiBtb3N0cmEgYSB2ZXJz428gYXR1YWwgZG8gcHJvZ3JhbWEsIGEgQVBJLCBlIG9zDQorZHJpdmVycyBzZWxlY2lvbmFkb3MuIEEgb3Dn428tdiBleGliZSBvcyB2YWxvcmVzIGRhcyBvcOf1ZXMgZGVwb2lzIGRlIHRvZGFzIGFzDQorZm9udGVzIHTqbSBzaWRvIGNvbnNpZGVyYWRvcy48L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5Og0KKyJDb3VyaWVyIE5ldyInPjxicj4NCis8YnI+DQorPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz7JIHByb3ZhdmVsbWVudGUgbyBtZWxob3IgcGFyYSBxdWUgbw0KK3Npc3RlbWEgaW5pY2lhciBhdXRvbWF0aWNhbWVudGUgQlJMVFRZIGNvbW8gcGFydGUgZGEgc2Vx/OpuY2lhIGRlIGluaWNpYWxpemHn428NCitwYXJhIHF1ZSBvIGRpc3BsYXkgYnJhaWxsZSBq4SBlc3ThIGluc3RhbGFkbyBlIGZ1bmNpb25hbmRvLCBxdWFuZG8gbyBsb2dpbiBkbw0KK3Byb21wdCBhcGFyZWNlci4gQSBtYWlvcmlhIChwcm92YXZlbG1lbnRlIHRvZGFzKSBkYXMgZGlzdHJpYnVp5/VlcyBmb3JuZWNlbSB1bQ0KK3NjcmlwdCBkZSBhcGxpY2Hn9WVzIG9uZGUgZm9ybmVjaWRhIHBlbG8gdXN14XJpbyBwb2RlIHNlciBzZWd1cmFtZW50ZSBjb21l5291DQorcGVydG8gZG8gZmluYWwgZGEgc2Vx/OpuY2lhIGRlIGluaWNpYWxpemHn428uIE8gbm9tZSBkbyBzY3JpcHQgYSBkaXN0cmlidWnn428g6Q0KK2RlcGVuZGVudGUuIEFxdWkgZXN0428gb3MgcXVlIGNvbmhlY2VtIGF06SBhZ29yYTo8L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5Og0KK1RpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxiciBzdHlsZT0nbXNvLXNwZWNpYWwtY2hhcmFjdGVyOg0KK2xpbmUtYnJlYWsnPg0KKzwhW2lmICFzdXBwb3J0TGluZUJyZWFrTmV3TGluZV0+PGJyIHN0eWxlPSdtc28tc3BlY2lhbC1jaGFyYWN0ZXI6bGluZS1icmVhayc+DQorPCFbZW5kaWZdPjwvc3Bhbj48c3BhbiBsYW5nPUVOLVVTIHN0eWxlPSdtc28tYW5zaS1sYW5ndWFnZTpFTi1VUyc+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBsYW5nPUVOLVVTIHN0eWxlPSdtc28tYW5zaS1sYW5ndWFnZTpFTi1VUyc+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+PC9zcGFuPjxzcGFuIGxhbmc9RU4tVVMgc3R5bGU9J2ZvbnQtc2l6ZToNCisxMS4wcHQ7bXNvLWFuc2ktbGFuZ3VhZ2U6RU4tVVMnPlJlZCBIYXQ8L3NwYW4+PHNwYW4gbGFuZz1FTi1VUw0KK3N0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciO21zby1hbnNpLWxhbmd1YWdlOg0KK0VOLVVTJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj4vZXRjL3JjLmQvcmMubG9jYWw8L3NwYW4+PHNwYW4NCitzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PGJyPg0KKzxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKCgIDwvc3Bhbj48L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPkNvbWXnYW5kbw0KK0JSTFRUWSBkZXNzZSBzY3JpcHQg6SB1bWEgYm9hIGFwcm94aW1h5+NvIChlc3BlY2lhbG1lbnRlPG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+cGFyYSBub3ZvcyB1c3XhcmlvcykuIEJhc3RhIGFkaWNpb25hciB1bQ0KK2Nvbmp1bnRvIGRlIGxpbmhhcyBjb21vPG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+ZXN0YXM6PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD4mbmJzcDs8L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dCBzdHlsZT0nbWFyZ2luLWxlZnQ6OS4wcHQnPjxzcGFuIGxhbmc9RU4tVVMNCitzdHlsZT0nZm9udC1zaXplOjExLjBwdDttc28tYW5zaS1sYW5ndWFnZTpFTi1VUyc+aWYgWy14IC9iaW4vYnJsdHR5LWEtZg0KKy9ldGMvYnJsdHR5LmNvbmZdPC9zcGFuPjxzcGFuIGxhbmc9RU4tVVMgc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5Og0KKyJDb3VyaWVyIE5ldyI7bXNvLWFuc2ktbGFuZ3VhZ2U6RU4tVVMnPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQgc3R5bGU9J21hcmdpbi1sZWZ0OjkuMHB0Jz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+dGhlbjwvc3Bhbj48c3Bhbg0KK3N0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0IHN0eWxlPSdtYXJnaW4tbGVmdDo5LjBwdCc+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPiZuYnNwOyZuYnNwOyZuYnNwOy9iaW4vYnJsdHR5PC9zcGFuPjxzcGFuDQorc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQgc3R5bGU9J21hcmdpbi1sZWZ0OjkuMHB0Jz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+Zmk8L3NwYW4+PHNwYW4NCitzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dCBzdHlsZT0nbWFyZ2luLWxlZnQ6OS4wcHQnPjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczsNCittc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48YnI+DQorPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5Jc3NvIGdlcmFsbWVudGUgcG9kZSBzZXIgYWJyZXZpYWRvIHBhcmEgYQ0KK2Zvcm1hIHVtIHBvdWNvIG1lbm9zIGxlZ+12ZWw6PC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToNCisiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0IHN0eWxlPSdtYXJnaW4tbGVmdDo5LjBwdCc+PHNwYW4gbGFuZz1FTi1VUw0KK3N0eWxlPSdmb250LXNpemU6MTEuMHB0O21zby1hbnNpLWxhbmd1YWdlOkVOLVVTJz5bLXggL2Jpbi9icmx0dHkglmEgLWYNCisvZXRjL2JybHR0eS5jb25mXSAmYW1wOyZhbXA7IC9iaW4vYnJsdHR5PC9zcGFuPjxzcGFuIGxhbmc9RU4tVVMNCitzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Ijttc28tYW5zaS1sYW5ndWFnZToNCitFTi1VUyc+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dCBzdHlsZT0nbWFyZ2luLWxlZnQ6OS4wcHQnPjxzcGFuIGxhbmc9RU4tVVMNCitzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Ijttc28tYW5zaS1sYW5ndWFnZToNCitFTi1VUyc+PGJyPg0KKzwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+TuNvIGFkaWNpb25lIGVzdGFzIGxpbmhhcyBhbnRlcyBkYQ0KK3ByaW1laXJhIGxpbmhhIChxdWUgZ2VyYWxtZW50ZSBwYXJlY2UgY29tICMhL2Jpbi9zaCkuPC9zcGFuPjxzcGFuDQorc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxicj4NCis8YnI+DQorPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5TZSBvIGRpc3BsYXkgQnJhaWxsZSBlc3ThIHNlbmRvIHV0aWxpemFkbw0KK3BlbG8gYWRtaW5pc3RyYWRvciBkbyBzaXN0ZW1hLCBlbnTjbyBwcm92YXZlbG1lbnRlIGRldmUgc2VyIGluaWNpYWRvIG8gbWFpcw0KK2NlZG8gcG9zc+12ZWwgZHVyYW50ZSBhIHNlcfzqbmNpYSBkZSBib290IChjb21vIGFudGVzIG9zIHNpc3RlbWFzIGRlIGFycXVpdm9zDQorc+NvIHZlcmlmaWNhZG9zKSwgZGUgbW9kbyBxdWUgbyBkaXNwbGF5IHV0aWxpemFkbyBubyBjYXNvIGRlIGFsZ28gZGVyIGVycmFkbw0KK2R1cmFudGUgZXN0YXMgdmVyaWZpY2Hn9WVzIGUgbyBzaXN0ZW1hIGNhaSBubyBtb2RvIGRlIHVzdeFyaW8g+m5pY28uIE1haXMgdW1hDQordmV6LCBleGF0YW1lbnRlIG9uZGUg6SBtZWxob3IgZGUgZmF6ZXIgaXNzbyDpIGRpc3RyaWJ1aefjbyBkZSBkZXBlbmRlbnRlcy4gQXF1aQ0KK2VzdONvIG9zIGx1Z2FyZXMgcXVlIGNvbmhlY2Vtb3MgYXTpIGFnb3JhOjwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7DQorbXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PGJyIHN0eWxlPSdtc28tc3BlY2lhbC1jaGFyYWN0ZXI6bGluZS1icmVhayc+DQorPCFbaWYgIXN1cHBvcnRMaW5lQnJlYWtOZXdMaW5lXT48YnIgc3R5bGU9J21zby1zcGVjaWFsLWNoYXJhY3RlcjpsaW5lLWJyZWFrJz4NCis8IVtlbmRpZl0+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dCBzdHlsZT0nbWFyZ2luLWxlZnQ6OS4wcHQnPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5EZWJpYW48L3NwYW4+PHNwYW4NCitzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dCBzdHlsZT0nbWFyZ2luLWxlZnQ6OS4wcHQnPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz4mbmJzcDsmbmJzcDsvZXRjL2luaXQuZC9ib290DQorKHBhcmEgdmVyc/VlcyBtYWlzIGFudGlnYXMpPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToNCisiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0IHN0eWxlPSdtYXJnaW4tbGVmdDo5LjBwdCc+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPiZuYnNwOyZuYnNwOy9ldGMvaW5pdC5kL3JjUw0KKyhwYXJhIHZlcnP1ZXMgbWFpcyByZWNlbnRlcyk8L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5Og0KKyJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQgc3R5bGU9J21hcmdpbi1sZWZ0OjkuMHB0Jz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+Jm5ic3A7Jm5ic3A7PC9zcGFuPjxzcGFuDQorc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQgc3R5bGU9J21hcmdpbi1sZWZ0OjkuMHB0Jz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+VW0NCitwYWNvdGUgYnJsdHR5IOkgZm9ybmVjaWRvICh2ZXIgW2h0dHA6Ly9wYWNrYWdlcy5kZWJpYW4ub3JnL2JybHR0eV0pIGEgcGFydGlyIGRlDQordmVyc+NvIDMuMCAoV29vZHkpLiBVbWEgdmV6IHF1ZSBlc3RlIHBhY290ZSBjdWlkYSBkYSBwYXJ0aWRhIEJSTFRUWSwgbuNvIGjhDQorbmVjZXNzaWRhZGUgZGUgY/NkaWdvIGZvcm5lY2lkbyBwZWxvIHVzdeFyaW8gZXN0aXZlciBpbnN0YWxhZG8uPC9zcGFuPjxzcGFuDQorc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxicj4NCis8YnI+DQorPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5SZWRIYXQ8L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5Og0KK1RpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQgc3R5bGU9J21hcmdpbi1sZWZ0OjkuMHB0Jz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+L2V0Yy9yYy5kL3JjLnN5c2luaXQ8L3NwYW4+PHNwYW4NCitzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dCBzdHlsZT0nbWFyZ2luLWxlZnQ6OS4wcHQnPjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczsNCittc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48YnI+DQorPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5DdWlkYWRvIHF1ZSB2ZXJz9WVzIHBvc3RlcmlvcmVzLCBhIGZpbSBkZQ0KK2Fwb2lhciB1bSBwcm9jZXNzbyBkZSBpbmljaWFsaXph5+NvIG1haXMgb3JpZW50YWRhIHBhcmEgbyB1dGlsaXphZG9yIGRvDQorc2lzdGVtYSwgdGVtIGVzc2Ugc2NyaXB0IHJlaW52b2tlIHNpIHPzLCBxdWUgZXN04SBzb2IgbyBjb250cm9sZSBkZSBpbml0bG9nLg0KK09saGEsIHByb3ZhdmVsbWVudGUsIGF06SBwZXJ0byBkbyB0b3BvLCBwYXJhIHVtIGNvbmp1bnRvIGRlIGxpbmhhcyBjb21vIGVzdGFzOjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQgc3R5bGU9J21hcmdpbi1sZWZ0OjkuMHB0Jz48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7DQorbXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD4mbmJzcDs8L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dCBzdHlsZT0nbWFyZ2luLWxlZnQ6OS4wcHQnPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz4jDQorRXhlY3V0ZSBub3ZhbWVudGUgYSBu83MgbWVzbW9zIGF0cmF26XMgaW5pdGxvZzwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6DQorVGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dCBzdHlsZT0nbWFyZ2luLWxlZnQ6OS4wcHQnPjxzcGFuIGxhbmc9RU4tVVMNCitzdHlsZT0nZm9udC1zaXplOjExLjBwdDttc28tYW5zaS1sYW5ndWFnZTpFTi1VUyc+aWYgWy16ICZxdW90OyQNCitJTl9JTklUTE9HJnF1b3Q7XTsgdGhlbjwvc3Bhbj48c3BhbiBsYW5nPUVOLVVTIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczsNCittc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciO21zby1hbnNpLWxhbmd1YWdlOkVOLVVTJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0IHN0eWxlPSdtYXJnaW4tbGVmdDo5LjBwdCc+PHNwYW4gbGFuZz1FTi1VUw0KK3N0eWxlPSdmb250LXNpemU6MTEuMHB0O21zby1hbnNpLWxhbmd1YWdlOkVOLVVTJz5bLWYgL3NiaW4vaW5pdGxvZ10gJmFtcDsmYW1wOw0KK2V4ZWMgL3NiaW4vaW5pdGxvZyAkIElOSVRMT0dfQVJHUyCWciAvZXRjL3JjLnN5c2luaXQ8L3NwYW4+PHNwYW4gbGFuZz1FTi1VUw0KK3N0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciO21zby1hbnNpLWxhbmd1YWdlOg0KK0VOLVVTJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0IHN0eWxlPSdtYXJnaW4tbGVmdDo5LjBwdCc+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPmZpPC9zcGFuPjxzcGFuDQorc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxicg0KK3N0eWxlPSdtc28tc3BlY2lhbC1jaGFyYWN0ZXI6bGluZS1icmVhayc+DQorPCFbaWYgIXN1cHBvcnRMaW5lQnJlYWtOZXdMaW5lXT48YnIgc3R5bGU9J21zby1zcGVjaWFsLWNoYXJhY3RlcjpsaW5lLWJyZWFrJz4NCis8IVtlbmRpZl0+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dCBzdHlsZT0nbWFyZ2luLWxlZnQ6OS4wcHQnPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5JbmljaWFsaXphbmRvDQorbyBCUkxUVFkgcGFydGlyIGRvIHJlc3VsdGFkbyBlbSBkdWFzIHJlaW52b2Nh5/VlcyBkbyBCUkxUVFkgcHJvY2Vzc29zIGVtDQorZXhlY3Xn428gYW8gbWVzbW8gdGVtcG8uIFNlIGEgc3VhIHZlcnPjbyBkbyBzY3JpcHQgdGVtIGVzc2UgcmVjdXJzbywNCitjZXJ0aWZpcXVlLXNlIGRlIGNvbWXnYXIgQlJMVFRZIGFw83MgYXMgbGluaGFzIHF1ZSBpbXBsZW1lbnThLWxvLjwvc3Bhbj48c3Bhbg0KK3N0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48YnI+DQorPGJyPg0KKzwvc3Bhbj48c3BhbiBsYW5nPUVOLVVTIHN0eWxlPSdmb250LXNpemU6MTEuMHB0O21zby1hbnNpLWxhbmd1YWdlOkVOLVVTJz5TbGFja3dhcmU8L3NwYW4+PHNwYW4NCitsYW5nPUVOLVVTIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciOw0KK21zby1hbnNpLWxhbmd1YWdlOkVOLVVTJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0IHN0eWxlPSdtYXJnaW4tbGVmdDo5LjBwdCc+PHNwYW4gbGFuZz1FTi1VUw0KK3N0eWxlPSdmb250LXNpemU6MTEuMHB0O21zby1hbnNpLWxhbmd1YWdlOkVOLVVTJz4mbmJzcDsmbmJzcDsvZXRjL3JjLmQvcmMuUzwvc3Bhbj48c3Bhbg0KK2xhbmc9RU4tVVMgc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyI7DQorbXNvLWFuc2ktbGFuZ3VhZ2U6RU4tVVMnPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQgc3R5bGU9J21hcmdpbi1sZWZ0OjkuMHB0Jz48c3BhbiBsYW5nPUVOLVVTDQorc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyI7bXNvLWFuc2ktbGFuZ3VhZ2U6DQorRU4tVVMnPjxicj4NCis8L3NwYW4+PHNwYW4gbGFuZz1FTi1VUyBzdHlsZT0nZm9udC1zaXplOjExLjBwdDttc28tYW5zaS1sYW5ndWFnZTpFTi1VUyc+U3VTRTwvc3Bhbj48c3Bhbg0KK2xhbmc9RU4tVVMgc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyI7DQorbXNvLWFuc2ktbGFuZ3VhZ2U6RU4tVVMnPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQgc3R5bGU9J21hcmdpbi1sZWZ0OjkuMHB0Jz48c3BhbiBsYW5nPUVOLVVTDQorc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQ7bXNvLWFuc2ktbGFuZ3VhZ2U6RU4tVVMnPiZuYnNwOyZuYnNwOy9zYmluL2luaXQuZC9ib290PC9zcGFuPjxzcGFuDQorbGFuZz1FTi1VUyBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3IjsNCittc28tYW5zaS1sYW5ndWFnZTpFTi1VUyc+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dCBzdHlsZT0nbWFyZ2luLWxlZnQ6OS4wcHQnPjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczsNCittc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48YnI+DQorPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5VbWEgYWx0ZXJuYXRpdmEg6SBjb21l52FyIEJSTFRUWSBhIHBhcnRpcg0KK2RlIC9ldGMvaW5pdHRhYi4gVm9j6iB0ZW0gZHVhcyBvcOf1ZXMsIHNlIHZvY+ogZXNjb2xoZXIgZXN0YSByb3RhLjwvc3Bhbj48c3Bhbg0KK3N0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0IHN0eWxlPSdtYXJnaW4tbGVmdDo5LjBwdCc+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPlNlDQordm9j6iBxdWVyIHF1ZSBlbGEgc2VqYSBpbmljaWFkYSBtdWl0byBjZWRvLCBu428gcHJlY2lzYSBzZXIgcmVpbmljaWFkbw0KK2F1dG9tYXRpY2FtZW50ZSBwYXJhIGVuY2VycmFyLCBlbSBzZWd1aWRhLCBhZGljaW9uZSB1bWEgbGluaGEgY29tbyBlc3RhIGFudGVzDQorZG8gcHJpbWVpcm86IHN5c2luaXQ6IGEgbGluaGEgcXVlIGrhIGVzdOEgbOEgZGVudHJvLjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQgc3R5bGU9J21hcmdpbi1sZWZ0OjkuMHB0Jz48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7DQorbXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD4mbmJzcDs8L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dCBzdHlsZT0nbWFyZ2luLWxlZnQ6OS4wcHQnPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5icmw6OnN5c2luaXQ6L2Jpbi9icmx0dHk8L3NwYW4+PHNwYW4NCitzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dCBzdHlsZT0nbWFyZ2luLWxlZnQ6OS4wcHQnPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5TZQ0KK3ZvY+ogbuNvIHNlIGltcG9ydGEgcXVlIHNlamEgaW5pY2lhZG8gbWFpcyB0YXJkZSwgbWFzIHF1ZXJvIHF1ZSBlbGUgc2VqYQ0KK3JlaW5pY2lhZG8gYXV0b21hdGljYW1lbnRlIHBhcmEgZW5jZXJyYXIsIGFkaWNpb25lIHVtYSBsaW5oYSBjb21vIGVzdGEgZW0NCitxdWFscXVlciBsdWdhciBkZW50cm8gZG8gYXJxdWl2by48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48bzpwPiZuYnNwOzwvbzpwPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gbGFuZz1FTi1VUyBzdHlsZT0nZm9udC1zaXplOjExLjBwdDttc28tYW5zaS1sYW5ndWFnZToNCitFTi1VUyc+PHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPmJybDoxMjM0NTpyZXNwYXduOi9iaW4vYnJsdHR5IJZuPC9zcGFuPjxzcGFuDQorbGFuZz1FTi1VUyBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3IjsNCittc28tYW5zaS1sYW5ndWFnZTpFTi1VUyc+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dCBzdHlsZT0nbWFyZ2luLWxlZnQ6OS4wcHQnPjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczsNCittc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48YnI+DQorPHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqA8L3NwYW4+PC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5BDQorb3Dn428gLW4gKC0tbm9kYWVtb24pIOkgbXVpdG8gaW1wb3J0YW50ZSBxdWFuZG8gZXhlY3V0YW5kbyBCUkxUVFkgY29tDQorZmFjaWxpZGFkZSBpbml0IHJlc3Bhd24uIFZvY+ogdmFpIGFjYWJhciBjb20gY2VudGVuYXMgZGUgcHJvY2Vzc29zIEJSTFRUWSB0b2Rvcw0KK3JvZGFuZG8gYW8gbWVzbW8gdGVtcG8sIHNlIHZvY+ogZXNxdWVjZXIgZGUgZXNwZWNpZmljYXIuPC9zcGFuPjxzcGFuDQorc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxicj4NCis8YnI+DQorPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5WZXJpZmlxdWUgc2UgbyBpZGVudGlmaWNhZG9yIChidCBuZXN0ZXMNCitleGVtcGxvcykgauEgbuNvIGVzdOEgc2VuZG8gdXNhZG8gcG9yIG91dHJhIGVudHJhZGEsIGUsIHNlIGZvciwgZXNjb2xoZXIgdW1hDQorb3Dn428gZGlmZXJlbnRlLjwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6DQorIkNvdXJpZXIgTmV3Iic+PGJyPg0KKzxicj4NCis8L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPk5vdGUtc2UgcXVlIHVtIGNvbWFuZG8gY29tbyBraWxsIC1URVJNIOkNCitzdWZpY2llbnRlIHBhcmEgcGFyYXIgQlJMVFRZIGVtIHN1YXMgdHJpbGhhcy4gU2UgZWxlIG1vcnJlIGR1cmFudGUgYSBlbnRyYWRhIGVtDQorbW9kbyBkZSB1c3XhcmlvIPpuaWNvLCBwb3IgZXhlbXBsbywgcG9kZSBtdWl0byBiZW0gc2VyIGRldmlkbyBhIHVtIHByb2JsZW1hDQorZGVzdGEgbmF0dXJlemEuPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48YnI+DQorPGJyPg0KKzwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+QWxndW5zIHNpc3RlbWFzLCBjb21vIHBhcnRlIGRhIHNlcfzqbmNpYQ0KK2RlIGJvb3QsIHNvbmRhIGFzIHBvcnRhcyBzZXJpYWlzIChub3JtYWxtZW50ZSwgYSBmaW0gZGUgbG9jYWxpemFyDQorYXV0b21hdGljYW1lbnRlIG8gbW91c2UgZSBkZWR1emlyIHNldSB0aXBvKS4gU2UgbyBzZXUgZGlzcGxheSBicmFpbGxlIGVzdGl2ZXINCit1c2FuZG8gdW1hIHBvcnRhIHNlcmlhbCwgZXN0ZSB0aXBvIGRlIHNvbmRhZ2VtIHBvZGUgc2VyIG8gc3VmaWNpZW50ZSBwYXJhDQorb2J06i1sbyBjb25mdXNvLiBTZSBpc3NvIGFjb250ZWNlciBjb20gdm9j6iwgZW50428gdGVudGUgcmVpbmljaWFyIG8gZHJpdmVyDQorYnJhaWxsZSAodmVqYSBvIGNvbWFuZG8gUkVTVEFSVEJSTCkuIE1lbGhvciBhaW5kYSwgZGVzbGlnYXIgYSBwb3J0YSBzZXJpYWwuDQorc29icmUgY29tbyBmYXplciBpc3NvOjwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6DQorIkNvdXJpZXIgTmV3Iic+PGJyPg0KKzxicj4NCis8L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPlJlZCBIYXQ8L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5Og0KK1RpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxicj4NCis8YnI+DQorPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5BIHNvbmRhZ2VtIOkgZmVpdGEgcG9yIHVtIHNlcnZp528gY2hhbWFkbw0KK2t1ZHp1LiBVc2UgbyBjb21hbmRvOjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIGxhbmc9RU4tVVMgc3R5bGU9J21zby1hbnNpLWxhbmd1YWdlOkVOLVVTJz48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0IHN0eWxlPSdtYXJnaW4tbGVmdDo5LjBwdCc+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPmNoa2NvbmZpZw0KKy0tbGlzdCBrdWR6dSwgPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0IHN0eWxlPSdtYXJnaW4tbGVmdDo5LjBwdCc+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzOw0KK21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxicj4NCis8L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPnBhcmEgdmVyIHNlIGVsZSBmb2kgYXRpdmFkby4gVXNlIG8NCitjb21hbmRvOiA8L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQgc3R5bGU9J21hcmdpbi1sZWZ0OjkuMHB0Jz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+PG86cD4mbmJzcDs8L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dCBzdHlsZT0nbWFyZ2luLWxlZnQ6OS4wcHQnPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5jaGtjb25maWcNCitrdWR6dSBvZmY8L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQgc3R5bGU9J21hcmdpbi1sZWZ0OjkuMHB0Jz48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7DQorbXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PGJyPg0KKzwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+UGFyYSBkZXNhdGl24S1sby4gUG9zdGVyaW9ybWVudGUsIG9zDQorbGFu52FtZW50b3MgcGVybWl0ZW0gcXVlIHZvY+ogZXhlY3V0ZSBrdWR6dSwgc2VtIGRlaXhhciBkZSBzb25kYWdlbSBkYXMgcG9ydGFzDQorc2VyaWFpcy4gUGFyYSBmYXplciBpc3NvLCBlZGl0YXIgbyBhcnF1aXZvIC9ldGMvc3lzY29uZmlnL2t1ZHp1LyBlIGRlZmluaXIgU0FGRQ0KK3BhcmEgeWVzLjwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PGJyPg0KKzxicj4NCis8L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPlNlIHZvY+ogZGVzZWphIGluaWNpYXIgQlJMVFRZIGFudGVzIGRlDQorcXVhbHF1ZXIgc2lzdGVtYSBkZSBhcnF1aXZvcyBz428gbW9udGFkb3MsIGVtIHNlZ3VpZGEsIGdhcmFudGlyIHF1ZSB0b2RvcyBvcw0KK3NldXMgY29tcG9uZW50ZXMgZXN0428gaW5zdGFsYWRvcyBubyBzaXN0ZW1hIGRlIGFycXVpdm9zIHJhaXouIDwvc3Bhbj48c3Bhbg0KK2xhbmc9RU4tVVMgc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQ7bXNvLWFuc2ktbGFuZ3VhZ2U6RU4tVVMnPlZlamEgYXMgb3Dn9WVzDQorLS13aXRoLWV4ZWN1dGUtcm9vdCwgLS1iaW5kaXIsIC0tbGliZGlyLCAtLXdpdGgtd3JpdGFibGUtZGlyZWN0b3J5LCBlDQorlndpdGgtZGF0YS1kaXJlY3RvcnkuPC9zcGFuPjxzcGFuIGxhbmc9RU4tVVMgc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzOw0KK21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyI7bXNvLWFuc2ktbGFuZ3VhZ2U6RU4tVVMnPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQgc3R5bGU9J21hcmdpbi1sZWZ0OjkuMHB0Jz48c3BhbiBsYW5nPUVOLVVTDQorc3R5bGU9J21zby1iaWRpLWZvbnQtc2l6ZToxOC4wcHQ7bXNvLWFuc2ktbGFuZ3VhZ2U6RU4tVVMnPjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQgc3R5bGU9J21hcmdpbi1sZWZ0OjkuMHB0Jz48c3BhbiBzdHlsZT0nbXNvLWJpZGktZm9udC1zaXplOg0KKzE4LjBwdCc+My41IENvbnNpZGVyYef1ZXMgZGUgc2VndXJhbudhPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczsNCittc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0IHN0eWxlPSdtYXJnaW4tbGVmdDo5LjBwdCc+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzOw0KK21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxicj4NCis8L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPkJSTFRUWSBwcmVjaXNhIHNlciBleGVjdXRhZG8gY29tDQorcHJpdmls6Wdpb3MgZGUgcm9vdCwgcG9ycXVlIGVsZSBwcmVjaXNhIGxlciBlIGVzY3JldmVyIGRlIGFjZXNzbyBwYXJhIGEgcG9ydGENCitwYXJhIG8gcXVhbCBvIGRpc3BsYXkgYnJhaWxsZSDpIGNvbmVjdGFkbywgYWNlc3NvIGRlIGxlaXR1cmEgL2Rldi92Y3NhIG91DQorZXF1aXZhbGVudGUgKHBhcmEgY29uc3VsdGFyIGFzIGRpbWVuc/VlcyBlIHBvc2nn428gZG8gY3Vyc29yLCBlIHJldmVyIG8NCitjb250ZfpkbyBkYSB0ZWxhIGVtIGRlc3RhcXVlKSwgZSBsZXIgZSBncmF2YXIgbyBhY2Vzc28gYW8gY29uc29sZSBkbyBzaXN0ZW1hIChwYXJhDQorYSBlbnRyYWRhIGRlIHNldGEgY2hhdmUgZHVyYW50ZSBjdXJzb3IgZW5jYW1pbmhhbWVudG8sIHBhcmEgYSBpbnNlcufjbyBkZQ0KK2NhcmFjdGVyZXMgZGUgZW50cmFkYSBkdXJhbnRlIGEgcGFzdGEsIHBhcmEgc2ltdWxh5+NvIGRlIGNoYXZlIHV0aWxpemFuZG8gYXMNCit0ZWNsYXMgbm8gZGlzcGxheSBicmFpbGxlLCBwYXJhIHJlY3VwZXJhciB0cmFkdefjbyBzYe1kYSBkZSBjYXJhY3RlcmUgZSBmb250ZQ0KK2RlIHRlbGEgdGFiZWxhcyBkZSBtYXBlYW1lbnRvLCBlIHBhcmEgYSBhdGl2YefjbyBkbyBhcGl0byBpbnRlcm5vKS4gTyBhY2Vzc28NCithb3MgZGlzcG9zaXRpdm9zIG5lY2Vzc+FyaW9zIHBvZGVtLCBldmlkZW50ZW1lbnRlLCBzZXIgY29uY2VkaWRvIGEgdW0gdXN14XJpbw0KK27jby1yb290IGFsdGVyYW5kbyBhcyBwZXJtaXNz9WVzIGRlIGFycXVpdm8gYXNzb2NpYWRvIGNvbSBvcyBkaXNwb3NpdGl2b3MuDQorTWVyYW1lbnRlIHRlciBhY2Vzc28gYW8gY29uc29sZSwgbm8gZW50YW50bywgbuNvIOkgc3VmaWNpZW50ZSBwb3JxdWUgYXRpdmFyIG8NCithdmlzbyBzb25vcm8gaW50ZXJubyBlIHNpbXVsYW5kbyBnb2xwZXMgZGUgdGVjbGEgYWluZGEgcmVxdWVyZW0gcHJpdmls6Wdpb3MgZGUNCityb290LiBFbnTjbywgc2Ugdm9j6iBlc3RpdmVyIGRpc3Bvc3RvIGEgZGVzaXN0aXIgZGUgY3Vyc29yIGRlIHJvdGVhbWVudG8sDQorY29ydGFyIGUgY29sYXIsIGJpcHMsIGUgdHVkbyBpc3NvLCB2b2PqIHBvZGUgZXhlY3V0YXIgQlJMVFRZIHNlbSBwcml2aWzpZ2lvcyBkZQ0KK3Jvb3QuPG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dCBzdHlsZT0nbWFyZ2luLWxlZnQ6OS4wcHQnPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0IHN0eWxlPSdtYXJnaW4tbGVmdDo5LjBwdCc+PHNwYW4gc3R5bGU9J21zby1iaWRpLWZvbnQtc2l6ZToNCisxOC4wcHQnPjMuNiBSZXN0cmnn9WVzIGRlIENvbXBpbGHn428gZSBUZW1wbyBkZSBFeGVjdefjbzwvc3Bhbj48c3Bhbg0KK3N0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0IHN0eWxlPSdtYXJnaW4tbGVmdDo5LjBwdCc+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzOw0KK21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxicj4NCis8L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPkFsZXJ0IFR1bmVzPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LWZhbWlseToNCitUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48YnI+DQorPGJyPg0KKzwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+QWxndW1hcyBwbGF0YWZvcm1hcyBu428gc3Vwb3J0YW0gdG9kb3Mgb3MNCitkaXNwb3NpdGl2b3MgZGUgbfpzaWNhLiBWZWphIFR1bmUgRGV2aWNlLjwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7DQorbXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PGJyPg0KKzxicj4NCis8L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPkRyaXZlciBzaW50ZXRpemFkb3IgZGUgdm96IEZlc3RpdmFsTGl0ZTwvc3Bhbj48c3Bhbg0KK3N0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48YnI+DQorPGJyPg0KKzwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+TyBkcml2ZXIgcGFyYSBvIHRleHQtdG8tc3BlZWNoDQorRmVzdGl2YWxMaXRlIOkgY29uc3Ryde1kbyBzb21lbnRlIHNlIG8gcGFjb3RlIGZvaSBpbnN0YWxhZG8uIEVzdGUgZHJpdmVyIGUgbw0KK2RyaXZlciBwYXJhIG8gdGV4dC10by1zcGVlY2ggZG8gVGhldGEgKHZlamEgLS13aXRoLXRoZXRhKSBu428gcG9kZW0gc2VyDQorc2ltdWx0YW5lYW1lbnRlIGxpZ2Fkb3MgYW8gYmlu4XJpbyBCUkxUVFkgKHZlamEgLS13aXRoLXNwZWVjaC1kcml2ZXIpLjwvc3Bhbj48c3Bhbg0KK3N0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48YnI+DQorPGJyPg0KKzwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+RHJpdmVyIExpYmJyYWlsbGUgRGlzcGxheSBCcmFpbGxlPC9zcGFuPjxzcGFuDQorc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxicj4NCis8YnI+DQorPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5PIGRyaXZlciBwYXJhIG8gcGFjb3RlIExpYmJyYWlsbGUg6Q0KK2NvbnN0cnXtZG8gc29tZW50ZSBzZSBvIHBhY290ZSBmb2kgaW5zdGFsYWRvLjwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6DQorVGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PGJyPg0KKzxicj4NCis8L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPkRyaXZlciBzaW50ZXRpemFkb3IgZGUgdm96IE1pa3JvcHVoZSA8L3NwYW4+PHNwYW4NCitzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PGJyPg0KKzxicj4NCis8L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPk8gZHJpdmVyIHBhcmEgbyB0ZXh0LXRvLXNwZWVjaCBNaWtyb3B1aGUNCivpIGNvbnN0cnXtZG8gc29tZW50ZSBzZSBvIHBhY290ZSBmb2kgaW5zdGFsYWRvLjwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6DQorVGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+IDwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+RXN0ZQ0KK2RyaXZlciBu428gcG9kZSBzZXIgaW5jbHXtZG8gc2UgbyBiaW7hcmlvIEJSTFRUWSDpIGVzdGF0aWNhbWVudGUgbGlnYWRvcyAodmVyIGENCitvcOfjbyAtLWVuYWJsZS1zdGFuZGFsb25lLXByb2dyYW1zKSwgcG9ycXVlIHVtIGFycXVpdm8gZXN04XRpY28gbuNvIGVzdOENCitpbmNsde1kbyBubyBwYWNvdGUuPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToNCisiQ291cmllciBOZXciJz48YnI+DQorPGJyPg0KKzwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+RHJpdmVyIGRvIHNpbnRldGl6YWRvciBkZSB2b3ogVGhldGE8L3NwYW4+PHNwYW4NCitzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PGJyPg0KKzxicj4NCis8L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPk8gZHJpdmVyIHBhcmEgbyB0ZXh0LXRvLXNwZWVjaCBUaGV0YSDpDQorY29uc3Ryde1kbyBzb21lbnRlIHNlIG8gcGFjb3RlIGZvaSBpbnN0YWxhZG8uPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LWZhbWlseToNCitUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48YnI+DQorPGJyPg0KKzwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+RXN0ZSBkcml2ZXIgZSBvIGRyaXZlciBwYXJhIG8NCit0ZXh0LXRvLXNwZWVjaCBGZXN0aXZhbExpdGUgKHZlamEgLS13aXRoLWZsaXRlKSBu428gcG9kZW0gc2VyIHNpbXVsdGFuZWFtZW50ZQ0KK2xpZ2Fkb3MgYW8gYmlu4XJpbyBCUkxUVFkgKHZlamEgLS13aXRoLXNwZWVjaC1kcml2ZXIpLjwvc3Bhbj48c3Bhbg0KK3N0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz4gPC9zcGFuPjxzcGFuDQorc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPlNlIGVzc2UgZHJpdmVyIOkgY29uc3Ryde1kbyBjb21vIHVtIG9iamV0byBjYXJyZWdhZG8NCitkaW5hbWljYW1lbnRlIGNvbXBhcnRpbGhhZGEgZW50428gJCBUSEVUQV9IT01FL2xpYiBkZXZlIHNlciBhZGljaW9uYWRvIOANCit2YXJp4XZlbCBkZSBhbWJpZW50ZSBMRF9MSUJSQVJZX1BBVEggYW50ZXMgQlJMVFRZIOkgaW52b2NhZG8gcG9ycXVlIG9zIG9iamV0b3MNCitjb21wYXJ0aWxoYWRvcyBkZW50cm8gZG8gcGFjb3RlIG7jbyBjb2506W0gY2FtaW5ob3MgZGUgcGVzcXVpc2EgZW0gdGVtcG8gZGUNCitleGVjdefjbyBkZSBzdWFzIGRlcGVuZOpuY2lhcy48L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5Og0KKyJDb3VyaWVyIE5ldyInPjxiciBzdHlsZT0nbXNvLXNwZWNpYWwtY2hhcmFjdGVyOmxpbmUtYnJlYWsnPg0KKzwhW2lmICFzdXBwb3J0TGluZUJyZWFrTmV3TGluZV0+PGJyIHN0eWxlPSdtc28tc3BlY2lhbC1jaGFyYWN0ZXI6bGluZS1icmVhayc+DQorPCFbZW5kaWZdPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQgc3R5bGU9J21hcmdpbi1sZWZ0OjkuMHB0Jz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+RHJpdmVyDQorc2ludGV0aXphZG9yIGRlIHZveiBWaWFWb2ljZTwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6DQorIkNvdXJpZXIgTmV3Iic+PGJyPg0KKzxicj4NCis8L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPk8gZHJpdmVyIHBhcmEgbyB0ZXh0LXRvLXNwZWVjaCBWaWFWb2ljZSDpDQorY29uc3Ryde1kbyBzb21lbnRlIHNlIG8gcGFjb3RlIGZvaSBpbnN0YWxhZG8uPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LWZhbWlseToNCitUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48YnI+DQorPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5Fc3RlIGRyaXZlciBu428gcG9kZSBzZXIgaW5jbHXtZG8gc2Ugbw0KK2JpbuFyaW8gQlJMVFRZIOkgZXN0YXRpY2FtZW50ZSBsaWdhZG9zICh2ZXIgLS1lbmFibGUtc3RhbmRhbG9uZS1wcm9ncmFtcyksDQorcG9ycXVlIHVtIGFycXVpdm8gZXN04XRpY28gbuNvIGVzdOEgaW5jbHXtZG8gbm8gcGFjb3RlLjwvc3Bhbj48c3Bhbg0KK3N0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48YnI+DQorPGJyPg0KKzwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+RHJpdmVyIFZpZGVvQnJhaWxsZSBEaXNwbGF5IEJyYWlsbGU8L3NwYW4+PHNwYW4NCitzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PGJyPg0KKzxicj4NCis8L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPk8gZHJpdmVyIHBhcmEgbyBkaXNwbGF5IEJyYWlsbGUNCitWaWRlb0JyYWlsbGUg6SBjb25zdHJ17WRvIGVtIHRvZG9zIG9zIHNpc3RlbWFzLCBtYXMgc/MgZnVuY2lvbmEgZW0gTGludXguPC9zcGFuPjxzcGFuDQorc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQgc3R5bGU9J21hcmdpbi1sZWZ0OjkuMHB0Jz48c3BhbiBzdHlsZT0nbXNvLWJpZGktZm9udC1zaXplOg0KKzE4LjBwdCc+PG86cD4mbmJzcDs8L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dCBzdHlsZT0nbWFyZ2luLWxlZnQ6OS4wcHQnPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz4zLjcNCitJbnN0YWxh5+NvIGEgcGFydGlyIGRlIHVtIGFycXVpdm8gUlBNPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Ow0KK2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQgc3R5bGU9J21hcmdpbi1sZWZ0OjkuMHB0Jz48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7DQorbXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PGJyPg0KKzwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+UGFyYSBpbnN0YWxhciBCUkxUVFkgZGUgdW0gUlBNIChSZWRIYXQNCitQYWNrYWdlIE1hbmFnZXIpIGRvIGFycXVpdm8sIGZh52EgbyBzZWd1aW50ZTo8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0IHN0eWxlPSdtYXJnaW4tbGVmdDo5LjBwdCc+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzOw0KK21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQgc3R5bGU9J21hcmdpbi1sZWZ0OjkuMHB0Jz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+MS4NCitCYWl4ZSBvIHBhY290ZSBiaW7hcmlvIHF1ZSBjb3JyZXNwb25kZSBhbyBzZXUgaGFyZHdhcmUuIFZhaSBzZXIgdW0gYXJxdWl2bw0KK2NoYW1hZG8gYnJsdHR5LTxpPnJlbGVhc2UtdmVyc2lvbi5hcmNoaXRlY3R1cmU8L2k+LnJwbSwgcG9yIGV4ZW1wbG8sDQorYnJsdHR5LTMuMC0xLmkzODYucnBtLjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQgc3R5bGU9J21hcmdpbi1sZWZ0OjkuMHB0Jz48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7DQorbXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD4mbmJzcDs8L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dCBzdHlsZT0nbWFyZ2luLWxlZnQ6OS4wcHQnPjxzcGFuIGxhbmc9RU4tVVMNCitzdHlsZT0nZm9udC1zaXplOjExLjBwdDttc28tYW5zaS1sYW5ndWFnZTpFTi1VUyc+Mi4gSW5zdGFsZSBvIHBhY290ZS48L3NwYW4+PHNwYW4NCitsYW5nPUVOLVVTIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciOw0KK21zby1hbnNpLWxhbmd1YWdlOkVOLVVTJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0IHN0eWxlPSd0ZXh0LWluZGVudDozNS40cHQnPjxzcGFuIGxhbmc9RU4tVVMNCitzdHlsZT0nZm9udC1zaXplOjExLjBwdDttc28tYW5zaS1sYW5ndWFnZTpFTi1VUyc+cnBtIC1VdmgNCiticmx0dHktcmVsZWFzZS12ZXJzaW9uLmFyY2hpdGVjdHVyZS5ycG08L3NwYW4+PHNwYW4gbGFuZz1FTi1VUw0KK3N0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciO21zby1hbnNpLWxhbmd1YWdlOg0KK0VOLVVTJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIGxhbmc9RU4tVVMgc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5Og0KKyJDb3VyaWVyIE5ldyI7bXNvLWFuc2ktbGFuZ3VhZ2U6RU4tVVMnPjxicj4NCis8L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPklzdG8gZGV2ZSBzZXIgZmVpdG8gY29tbyByb290Lg0KK0VzdHJpdGFtZW50ZSBmYWxhbmRvLCBhIG9w5+NvIJZ1ICh1cGRhdGUpIOkgYSD6bmljYSBxdWUg6SBuZWNlc3PhcmlvLiBBIG9w5+NvDQorLXYgKHZlcmJvc2UpIGV4aWJlIG8gbm9tZSBkbyBwYWNvdGUgY29tbyBlbGUgZXN04SBzZW5kbyBpbnN0YWxhZG8uIEEgb3Dn428gLWgNCisoaGFzaGVzKSBleGliZSB1bWEgYmFycmEgZGUgcHJvZ3Jlc3NvICh1c2FuZG8gc2luYWlzIGRlIGhhc2gpLjwvc3Bhbj48c3Bhbg0KK3N0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48YnI+DQorPGJyPg0KKzwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+UGFyYSBvcyBjb3Jham9zb3MsIG7zcyB0YW1i6W0gZm9ybmVjZW1vcw0KK2EgZm9udGUgZG8gYXJxdWl2byBSUE0gKC5zcmMucnBtKSwgbWFzIGlzc28gZXN04SBmb3JhIGRvIGVzY29wbyBkZXN0ZQ0KK2RvY3VtZW50by48L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxicg0KK3N0eWxlPSdtc28tc3BlY2lhbC1jaGFyYWN0ZXI6bGluZS1icmVhayc+DQorPCFbaWYgIXN1cHBvcnRMaW5lQnJlYWtOZXdMaW5lXT48YnIgc3R5bGU9J21zby1zcGVjaWFsLWNoYXJhY3RlcjpsaW5lLWJyZWFrJz4NCis8IVtlbmRpZl0+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+UGFyYSBkZXNpbnN0YWxhciBCUkxUVFksDQorZmHnYTo8L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOw0KKzxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQgc3R5bGU9J3RleHQtaW5kZW50OjM1LjRwdCc+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPnJwbS1lDQorYnJsdHR5PC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdtc28tYmlkaS1mb250LXNpemU6MTguMHB0Jz48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdtc28tYmlkaS1mb250LXNpemU6MTguMHB0Jz4zLjggT3V0cm9zIFV0aWxpZGFkZXM8L3NwYW4+PHNwYW4NCitzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PGJyPg0KKzwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+Q29uc3RydWluZG8gQlJMVFRZIHRhbWLpbSByZXN1bHRhIG5hDQorY29uc3RydefjbyBkZSBhanVkYXMgZSBwZXF1ZW5vcyB1dGlsaXThcmlvcyBkZSBkaWFnbvNzdGljby48L3NwYW4+PHNwYW4NCitzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PGJyPg0KKzxicj4NCis8L3NwYW4+My44LjEgPHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPmJybHR0eS1jb25maWc8L3NwYW4+PHNwYW4NCitzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PGJyPg0KKzxicj4NCis8L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPkVzdGUgdXRpbGl04XJpbyBjcmlhIHVtYSBz6XJpZSBkZQ0KK3ZhcmnhdmVpcyBkZSBhbWJpZW50ZSBwYXJhIHZhbG9yZXMgcXVlIHJlZmxldGVtIGEgaW5zdGFsYefjbyBhdHVhbCBkbyBCUkxUVFkNCisodmVyIEJ1aWxkIE9wdGlvbnMpLiBEZXZlIHNlciBleGVjdXRhZG8gZGVudHJvIGRlIHVtIGFtYmllbnRlIHNoZWxsIGV4aXN0ZW50ZSwNCitpc3RvIOksIG7jbyBjb21vIHVtIGNvbWFuZG8gZW0gc2V1IHBy83ByaW8gZGlyZWl0bywgZSBz8yBwb2RlIHNlciB1c2FkbyBwb3INCitzY3JpcHRzIHF1ZSBzdXBvcnRhbSBhIHNpbnRheGUgQm91cm5lIFNoZWxsLjwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6DQorVGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBsYW5nPUVOLVVTIHN0eWxlPSdtc28tYW5zaS1sYW5ndWFnZTpFTi1VUyc+PG86cD4mbmJzcDs8L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+QXMgc2VndWludGVzIHZhcmnhdmVpcyBkZQ0KK2FtYmllbnRlIHPjbyBkZWZpbmlkYXM6PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD4mbmJzcDs8L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+QlJMVFRZX1ZFUlNJT048bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5PIG76bWVybyBkZSB2ZXJz428gZG8NCitwYWNvdGUgQlJMVFRZLjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPkJSTFRUWV9FWEVDVVRFX1JPT1Q8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5yb290IGVtIHRlbXBvIGRlIGV4ZWN15+NvDQorcGFyYSBvIHBhY290ZSBpbnN0YWxhZG8uIENvbmZpZ3VyYWRvIGNvbSAtLXdpdGgtZXhlY3V0ZS1yb290LjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPkJSTFRUWV9QUk9HUkFNX0RJUkVDVE9SWTxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPkRpcmV0b3JpbyBkZSBwcm9ncmFtYXMNCitleGVjdXThdmVpcyAoYmlu4XJpb3MsIGV4ZWN1dOF2ZWlzKS4gQ29uZmlndXJhZGEgYXRyYXbpcw0KKy0td2l0aC1wcm9ncmFtLWRpcmVjdG9yeS48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIGxhbmc9RU4tVVMgc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQ7bXNvLWFuc2ktbGFuZ3VhZ2U6DQorRU4tVVMnPkJSTFRUWV9MSUJSQVJZX0RJUkVDVE9SWTxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gbGFuZz1FTi1VUyBzdHlsZT0nZm9udC1zaXplOjExLjBwdDttc28tYW5zaS1sYW5ndWFnZToNCitFTi1VUyc+RGlyZXTzcmlvIGRlIGRyaXZlcnMuIDwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+Q29uZmlndXJhZGENCithdHJhdulzIGRlIC0td2l0aC1saWJyYXJ5LWRpcmVjdG9yeS48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5CUkxUVFlfV1JJVEFCTEVfRElSRUNUT1JZPG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+RGlyZXTzcmlvIHF1ZSBwb2RlIHNlcg0KK2dyYXZhZG8uIENvbmZpZ3VyYWRvIGF0cmF26XMgZG8gLS13aXRoLXdyaXRhYmxlLWRpcmVjdG9yeS48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5CUkxUVFlfREFUQV9ESVJFQ1RPUlk8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5EaXJldG9yaW8gZGUgdGFiZWxhcyBlDQorcOFnaW5hcyBkZSBhanVkYS4gQ29uZmlndXJhZGEgdmlhIC0td2l0aC1kYXRhLWRpcmVjdG9yeS48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5CUkxUVFlfTUFOUEFHRV9ESVJFQ1RPUlk6DQorRGlyZXRvcmlvIGRlIHDhZ2luYXMgZGUgbWFudWFsLiBDb25maWd1cmFkYSB2aWEgLS13aXRoLW1hbnBhZ2UtZGlyZWN0b3J5LjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPkJSTFRUWV9JTkNMVURFX0RJUkVDVE9SWToNCitEaXJldPNyaW8gcGFyYSBhcnF1aXZvcyBkZSBjYWJl52FsaG8gQyBCcmxBUEkuIENvbmZpZ3VyYWRvIGF0cmF26XMNCistLXdpdGgtaW5jbHVkZS1kaXJlY3RvcnkuPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToNCisiQ291cmllciBOZXciJz48YnIgc3R5bGU9J21zby1zcGVjaWFsLWNoYXJhY3RlcjpsaW5lLWJyZWFrJz4NCis8IVtpZiAhc3VwcG9ydExpbmVCcmVha05ld0xpbmVdPjxiciBzdHlsZT0nbXNvLXNwZWNpYWwtY2hhcmFjdGVyOmxpbmUtYnJlYWsnPg0KKzwhW2VuZGlmXT48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5CUkxBUElfVkVSU0lPTjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPk8gbvptZXJvIGRhIHZlcnPjbyBCcmxBUEkNCisoQXBwbGljYXRpb24gUHJvZ3JhbW1pbmcgSW50ZXJmYWNlIGRvIEJSTFRUWSkuPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LWZhbWlseToNCitUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5CUkxBUElfUkVMRUFTRTxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPk8gbvptZXJvIGRhIHZlcnPjbw0KK2NvbXBsZXRhIGRlIEJybEFQSS48L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5Og0KKyJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPkJSTEFQSV9BVVRIPG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+TyBub21lIGRvIGFycXVpdm8gZGUgY2hhdmUNCitkZSBCcmxBUEkuPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48YnI+DQorPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5BbOltIGRpc3NvLCBhcyBzZWd1aW50ZXMgdmFyaeF2ZWlzIGRlDQorYW1iaWVudGUgcGFkcuNvIGF1dG9jb25mIHRhbWLpbSBz428gZGVmaW5pZG9zOjwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6DQorVGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PGJyPg0KKzxicj4NCis8L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPnByZWZpeCA8L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5Og0KK1RpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxicj4NCis8L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPlN1YnJvb3QgcGFyYSBhcnF1aXZvcyBpbmRlcGVuZGVudGVzIGRlDQorYXJxdWl0ZXR1cmEuIENvbmZpZ3VyYWRvIGF0cmF26XMgZG8gLS1wcmVmaXguPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LWZhbWlseToNCitUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48YnI+DQorPGJyPg0KKzwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+ZXhlY19wcmVmaXg8L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5Og0KK1RpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxicj4NCis8L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPlN1YnJvb3QgcGFyYSBhcnF1aXZvcyBkZXBlbmRlbnRlcyBkZQ0KK2FycXVpdGV0dXJhLiBDb25maWd1cmFkYSB2aWEgLS1leGVjLXByZWZpeC48L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5Og0KK1RpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxicj4NCis8YnI+DQorPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5iaW5kaXI8L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5Og0KK1RpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxicj4NCis8L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPkxvY2FsIHBhZHLjbyBwYXJhIG8gZGlyZXTzcmlvIGRvDQorcHJvZ3JhbWEuIENvbmZpZ3VyYWRhIHZpYSAtLWJpbmRpci48L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzOw0KK21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxicj4NCis8YnI+DQorPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5saWJkaXI8L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5Og0KK1RpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxicj4NCis8L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPkRpcmV083JpbyBlc3ThdGljbyBCcmxBUEkgZGUgYXJxdWl2byBlDQorb2JqZXRvcyBjYXJyZWfhdmVpcyBkaW5hbWljYW1lbnRlLiBTdXBvcnRlIHBhZHLjbyBvIGRpcmV083JpbyBkYSBiaWJsaW90ZWNhLg0KK0NvbmZpZ3VyYWRhIHZpYSAtLWxpYmRpci48L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5Og0KKyJDb3VyaWVyIE5ldyInPjxicj4NCis8YnI+DQorPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5zeXNjb25mZGlyPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LWZhbWlseToNCitUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48YnI+DQorPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5EaXJldPNyaW8gcGFyYSBhcnF1aXZvcyBkZSBjb25maWd1cmHn428uDQorU3Vwb3J0ZSBwYWRy428gcGFyYSBvIGRpcmV083JpbyBkZSBkYWRvcy4gQ29uZmlndXJhZGEgdmlhIC0tc3lzY29uZmRpci48L3NwYW4+PHNwYW4NCitzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PGJyPg0KKzxicj4NCis8L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPm1hbmRpcjwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6DQorVGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PGJyPg0KKzwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+TG9jYWxpemHn428gcGFkcuNvIHBhcmEgbyBkaXJldPNyaW8NCitw4WdpbmFzIGRlIG1hbnVhbC4gQ29uZmlndXJhZGEgdmlhIC0tbWFuZGlyLjwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6DQorVGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PGJyPg0KKzxicj4NCis8L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPmluY2x1ZGVkaXI8L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5Og0KK1RpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxicj4NCis8L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPlN1cG9ydGUgcGFkcuNvIHBhcmEgbyBkaXJldPNyaW8gYXJxdWl2b3MNCitkZSBjYWJl52FsaG8uIENvbmZpZ3VyYWRhIHZpYSAtLWluY2x1ZGVkaXIuPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LWZhbWlseToNCitUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48YnI+DQorPGJyPg0KKzwvc3Bhbj4zLjguMiA8c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+YnJsdHR5LWluc3RhbGw8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48YnI+DQorPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5Fc3RlIHV0aWxpdOFyaW8gY29waWEgQlJMVFRZIGhpZXJhcnF1aWENCitkZSBhcnF1aXZvcyBpbnN0YWxhZG8gYSBwYXJ0aXIgZGUgdW0gbG9jYWwgcGFyYSBvdXRyby48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5icmx0dHktaW5zdGFsbCB0byBbZnJvbV08L3NwYW4+PHNwYW4NCitzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PGJyPg0KKzwvc3Bhbj48aT48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+dG88L3NwYW4+PC9pPjxzcGFuIHN0eWxlPSdmb250LWZhbWlseToNCitUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48YnI+DQorPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5BIGxvY2FsaXph5+NvIHBhcmEgbyBxdWFsIGEgaGllcmFycXVpYSBkZQ0KK2FycXVpdm9zIGluc3RhbGFkb3MgZm9pIGNvcGlhZGEuIERldmUgc2VyIHVtIGRpcmV083JpbyBleGlzdGVudGUuPC9zcGFuPjxzcGFuDQorc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxicj4NCis8YnI+DQorPC9zcGFuPjxpPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5mcm9tPC9zcGFuPjwvaT48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6DQorVGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PGJyPg0KKzwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+QSBsb2NhbGl6YefjbyBkbyBxdWFsIGEgaGllcmFycXVpYSBkZQ0KK2FycXVpdm9zIGluc3RhbGFkb3Mg6SBwYXJhIHNlciB0b21hZG8uIFNlIGZvciBlc3BlY2lmaWNhZG8sIGVudONvIGVsZSBkZXZlIHNlcg0KK3VtIGRpcmV083JpbyBleGlzdGVudGUuIFNlIG7jbyBmb3IgZXNwZWNpZmljYWRvLCBlbnTjbyBvIGxvY2FsIHV0aWxpemFkbyBwYXJhIGENCitjb25zdHJ15+NvIOkgYXNzdW1pZGEuPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToNCisiQ291cmllciBOZXciJz48YnI+DQorPGJyPg0KKzwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+RXN0ZSB1dGlsaXThcmlvIHBvZGUgc2VyIHVzYWRvLCBwb3INCitleGVtcGxvLCBwYXJhIGNvcGlhciBCUkxUVFkgcGFyYSB1bSBkaXNjbyBkZSByYWl6LiBTZSB1bSBkaXNxdWV0ZSBkZSByb290IOkNCittb250YWRhIGNvbW8gL21udCBlIEJSTFRUWSBlc3ThIGluc3RhbGFkbyBubyBzaXN0ZW1hIHByaW5jaXBhbCwgZW0gc2VndWlkYSwNCitkaWdpdGFuZG8gPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0IHN0eWxlPSd0ZXh0LWluZGVudDozNS40cHQnPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5icmx0dHktaW5zdGFsbC9tbnQNCis8L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxicj4NCis8L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPmNyaWEgY/NwaWFzIGRvIEJSTFRUWSwganVudGFtZW50ZSBjb20NCit0b2RvcyBvcyBzZXVzIGRhZG9zIGUgYXJxdWl2b3MgZGEgYmlibGlvdGVjYSwgcGFyYSBhIHJhaXogZGUgZGlzcXVldGUuPC9zcGFuPjxzcGFuDQorc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxicj4NCis8L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPkFsZ3VucyBwcm9ibGVtYXMgZm9yYW0gc2VudGlkb3MgcXVhbmRvDQorY29waWEgbyBCUkxUVFkgZW50cmUgc2lzdGVtYXMgY29tIGRpZmVyZW50ZXMgdmVyc/VlcyBkYSBiaWJsaW90ZWNhIEMNCitjb21wYXJ0aWxoYWRhLiBFc3RlIHZhbGUgYSBwZW5hIGludmVzdGlnYXIgc2Ugdm9j6iB0ZW0gZGlmaWN1bGRhZGVzLjwvc3Bhbj48c3Bhbg0KK3N0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48YnI+DQorPGJyPg0KKzwvc3Bhbj4zLjguMyBicmx0ZXN0PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PGJyPg0KKzwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+RXN0ZSB1dGlsaXThcmlvIHRlc3RhIHVtIGRyaXZlciBkbw0KK2Rpc3BsYXkgYnJhaWxlLCBlIHRhbWLpbSBmb3JuZWNlIHVtYSBmb3JtYSBpbnRlcmF0aXZhIGRlIGFwcmVuZGVyIHF1YWlzIGFzDQordGVjbGFzIGRvIGRpc3BsYXkgYnJhaWxsZS4gRWxlIGRldmUgc2VyIGV4ZWN1dGFkbyBjb21vIHJvb3QuPG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD4mbmJzcDs8L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7YnJsdGVzdA0KKy1vcHRpb24gLi4uIFtkcml2ZXIgW25hbWU9IHZhbHVlIC4uLl1dPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczsNCittc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIGxhbmc9RU4tVVMgc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5Og0KKyJDb3VyaWVyIE5ldyI7bXNvLWFuc2ktbGFuZ3VhZ2U6RU4tVVMnPjxicj4NCitfPC9zcGFuPjxpPjxzcGFuIGxhbmc9RU4tVVMgc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQ7bXNvLWFuc2ktbGFuZ3VhZ2U6RU4tVVMnPmRyaXZlcg0KKzwvc3Bhbj48L2k+PHNwYW4gbGFuZz1FTi1VUyBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3IjsNCittc28tYW5zaS1sYW5ndWFnZTpFTi1VUyc+PGJyPg0KKzwvc3Bhbj48c3BhbiBsYW5nPUVOLVVTIHN0eWxlPSdmb250LXNpemU6MTEuMHB0O21zby1hbnNpLWxhbmd1YWdlOkVOLVVTJz5PDQorZHJpdmVyIHBhcmEgbyBkaXNwbGF5IGJyYWlsbGUuIDwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+RWxhIGRldmUNCitzZXIgdW1hIGRlIGR1YXMgbGV0cmFzIGRvIGPzZGlnbyBkZSBpZGVudGlmaWNh5+NvIGRvIGRyaXZlci4gU2UgbuNvIGZvcg0KK2VzcGVjaWZpY2FkbywgZW50428gbyBwcmltZWlybyBkcml2ZXIgY29uZmlndXJhZG8gY29tIC0tIHdpdGgtYnJhaWxsZS1kcml2ZXIg6Q0KK2Fzc3VtaWRhLjwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PGJyPg0KKzxicj4NCitfPC9zcGFuPjxpPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5uYW1lID0gdmFsdWU8L3NwYW4+PC9pPjxzcGFuDQorc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPiA8L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5Og0KKyJDb3VyaWVyIE5ldyInPjxicj4NCis8L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPkRlZmluaXIgdW0gcGFy4m1ldHJvIGRlIGRyaXZlciBkaXNwbGF5DQorQnJhaWxsZS4gUGFyYSBvYnRlciB1bWEgZGVzY3Jp5+NvIGRvcyBwYXLibWV0cm9zIGFjZWl0b3MgcG9yIHVtIGRyaXZlcg0KK2VzcGVj7WZpY28sIGNvbnN1bHRlIGEgZG9jdW1lbnRh5+NvIGRvIGRyaXZlci48L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5Og0KK1RpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxicj4NCis8YnI+DQorPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz4tZDxpPmRldmljZTwvaT4gLS1kZXZpY2UgPSA8aT5kZXZpY2U8L2k+PC9zcGFuPjxzcGFuDQorc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxicj4NCis8L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPk8gY2FtaW5obyBhYnNvbHV0byBwYXJhIG8gZGlzcG9zaXRpdm8NCitwYXJhIG8gcXVhbCBvIGRpc3BsYXkgYnJhaWxsZSBlc3ThIGxpZ2Fkby4gU2UgbuNvIGZvciBlc3BlY2lmaWNhZG8sIG8NCitkaXNwb3NpdGl2byBjb25maWd1cmFkbyBwb3IgLS13aXRoLWJyYWlsbGUtZGV2aWNlIOkgYXNzdW1pZGEuPC9zcGFuPjxzcGFuDQorc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxicj4NCis8YnI+DQorPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz4tRDxpPmRpcmVjdG9yeTwvaT4tLWRhdGEtZGlyZWN0b3J5ID0gPGk+ZGlyZWN0b3J5PC9pPjwvc3Bhbj48c3Bhbg0KK3N0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48YnI+DQorPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5PIGNhbWluaG8gYWJzb2x1dG8gcGFyYSBvIGRpcmV083JpbyBvbmRlDQorb3MgZHJpdmVycyBkb3MgYXJxdWl2b3MgZGUgZGFkb3MgcmVzaWRlLiBTZSBu428gZm9yIGVzcGVjaWZpY2FkbywgZW50428gbw0KK2RpcmV083JpbyBjb25maWd1cmFkbyBhdHJhdulzIGRvIC0td2l0aC1kYXRhLWRpcmVjdG9yeSDpIGFzc3VtaWRhLjwvc3Bhbj48c3Bhbg0KK3N0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48YnI+DQorPGJyPg0KKzwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+LUw8aT5kaXJlY3Rvcnk8L2k+LS1saWJyYXJ5LWRpcmVjdG9yeSA9DQorJm5ic3A7PGk+ZGlyZWN0b3J5PC9pPjwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6DQorIkNvdXJpZXIgTmV3Iic+PGJyPg0KKzwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+TyBjYW1pbmhvIGFic29sdXRvIHBhcmEgbyBkaXJldPNyaW8gb25kZQ0KK3Jlc2lkZW0gb3MgZHJpdmVycy4gU2UgbuNvIGZvciBlc3BlY2lmaWNhZG8sIGVudONvIG8gZGlyZXTzcmlvIGNvbmZpZ3VyYWRvDQorYXRyYXbpcyBkbyAtLWxpYmRpciDpIGFzc3VtaWRhLjwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7DQorbXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PGJyPg0KKzxicj4NCis8L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPi13PGk+ZGlyZWN0b3J5IDwvaT4tLXdyaXRhYmxlLWRpcmVjdG9yeT08aT5kaXJlY3Rvcnk8L2k+Og0KKzwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PGJyPg0KKzwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+TyBjYW1pbmhvIGFic29sdXRvIHBhcmEgdW0gZGlyZXTzcmlvIHF1ZQ0KK3BvZGUgc2VyIGdyYXZhZG8uIFNlIG7jbyBmb3IgZXNwZWNpZmljYWRvLCBlbnTjbyBvIGRpcmV083JpbyBjb25maWd1cmFkbyBjb20NCistLXdpdGgtd3JpdGFibGUtZGlyZWN0b3J5IOkgYXNzdW1pZGEuPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczsNCittc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48YnI+DQorPGJyPg0KKzwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+LWggLS1oZWxwPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LWZhbWlseToNCitUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48YnI+DQorPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5Nb3N0cmEgdW0gcmVzdW1vIGRhcyBvcOf1ZXMgZGUgbGluaGEgZGUNCitjb21hbmRvLCBlIGRlcG9pcyBzYWlyLiA8L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5Og0KKyJDb3VyaWVyIE5ldyInPjxicj4NCis8YnI+DQorPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5Fc3RlIHV0aWxpdOFyaW8gdXNhIG8gY29tYW5kbyBkbyBCUkxUVFkNCitDb21tYW5kIExlYXJuIE1vZGUuIFF1YW5kbyBwcmVzc2lvbmFyIGEgdGVjbGEgZG8gdGVtcG8gbGltaXRlICZuYnNwO+kgZGUgMTANCitzZWd1bmRvcy4gTyB0ZW1wbyBkZSBlc3BlcmEgZGUgbWVuc2FnZW5zIOkgZGUgNCBzZWd1bmRvcy48L3NwYW4+PHNwYW4NCitzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PGJyPg0KKzxicj4NCis8L3NwYW4+My44LjQgPGk+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPnNwa3Rlc3Q8L3NwYW4+PC9pPjxzcGFuDQorc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxicj4NCis8YnI+DQorPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5Fc3RlIHV0aWxpdOFyaW8gdGVzdGEgdW0gZHJpdmVyDQorc2ludGV0aXphZG9yIGRlIHZvei4gUG9kZSBwcmVjaXNhciBkZSBzZXIgZXhlY3V0YWRvIGNvbW8gcm9vdC48L3NwYW4+PHNwYW4NCitzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+PG86cD4mbmJzcDs8L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dCBzdHlsZT0ndGV4dC1pbmRlbnQ6MzUuNHB0Jz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+c3BrdGVzdA0KKy1vcHRpb24gLi4uIFtkcml2ZXIgW25hbWU9dmFsdWUgLi4uXV08L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzOw0KK21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxicj4NCitfPC9zcGFuPjxpPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5kcml2ZXI8L3NwYW4+PC9pPjxzcGFuDQorc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxicj4NCis8L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPk8gZHJpdmVyIHBhcmEgc2ludGV0aXphZG9yIGRlIHZvei4gRWxhDQorZGV2ZSB0ZXIgdW1hIGRlIGR1YXMgbGV0cmFzIGRvIGPzZGlnbyBkZSBpZGVudGlmaWNh5+NvIGRvIGRyaXZlci4gU2UgbuNvIGZvcg0KK2VzcGVjaWZpY2FkbywgZW50428gbyBwcmltZWlybyBkcml2ZXIgY29uZmlndXJhZG8gdmlhIC0td2l0aC1zcGVlY2gtZHJpdmVyIOkNCithc3N1bWlkYS48L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxicj4NCis8YnI+DQorXzwvc3Bhbj48aT48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+bmFtZSA9IHZhbHVlIDwvc3Bhbj48L2k+PHNwYW4NCitzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PGJyPg0KKzwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+RGVmaW5pciBvIHBhcuJtZXRybyBkbyBkcml2ZXIgZG8NCitzaW50ZXRpemFkb3IgZGUgdm96LiBQYXJhIG9idGVyIHVtYSBkZXNjcmnn428gZG9zIHBhcuJtZXRyb3MgYWNlaXRvcyBwb3IgdW0NCitkcml2ZXIgZXNwZWPtZmljbywgY29uc3VsdGUgYSBkb2N1bWVudGHn428gZG8gZHJpdmVyLjwvc3Bhbj48c3Bhbg0KK3N0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48YnI+DQorPGJyPg0KKzwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+LXQ8aT5zdHJpbmcgPC9pPi0tdGV4dC1zdHJpbmcgPSA8aT5zdHJpbmc8L2k+DQorPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48YnI+DQorPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5PIHRleHRvIGEgc2VyIGZhbGFkby4gU2UgbuNvIGZvcg0KK2VzcGVjaWZpY2FkbywgZW50cmFkYSBwYWRy428g6SBhIGxlaXR1cmEuPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczsNCittc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48YnI+DQorPGJyPg0KKzwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+LUQ8aT5kaXJlY3RvcnkgPC9pPi0tZGF0YS1kaXJlY3Rvcnk9PGk+ZGlyZWN0b3J5PC9pPg0KKzwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PGJyPg0KKzwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+TyBjYW1pbmhvIGFic29sdXRvIHBhcmEgbyBkaXJldPNyaW8gb25kZQ0KK29zIGFycXVpdm9zIGRlIGRhZG9zIGRvIGRyaXZlciByZXNpZGUuIFNlIG7jbyBmb3IgZXNwZWNpZmljYWRvLCBlbnTjbyBvDQorZGlyZXTzcmlvIGNvbmZpZ3VyYWRvIGF0cmF26XMgZG8gLS13aXRoLWRhdGEtZGlyZWN0b3J5IOkgYXNzdW1pZGEuPC9zcGFuPjxzcGFuDQorc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxicj4NCis8YnI+DQorPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz4tTDxpPmRpcmVjdG9yeSA8L2k+LS1saWJyYXJ5LWRpcmVjdG9yeSA9IDxpPmRpcmVjdG9yeTwvaT4NCis8L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxicj4NCis8L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPk8gY2FtaW5obyBhYnNvbHV0byBwYXJhIG8gZGlyZXTzcmlvIG9uZGUNCityZXNpZGVtIG9zIGRyaXZlcnMuIFNlIG7jbyBmb3IgZXNwZWNpZmljYWRvLCBlbnTjbyBvIGRpcmV083JpbyBjb25maWd1cmFkbw0KK2F0cmF26XMgZG8gLS1saWJkaXIg6SBhc3N1bWlkYS48L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzOw0KK21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxicj4NCis8YnI+DQorPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz4taC0taGVscDogbW9zdHJhciB1bSByZXN1bW8gZGFzIG9w5/VlcyBkZQ0KK2xpbmhhIGRlIGNvbWFuZG8sIGUgZGVwb2lzIHNhaXIuPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczsNCittc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48YnI+DQorPGJyPg0KKzwvc3Bhbj4zLjguNSA8c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+c2NydGVzdDxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxicj4NCis8L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPkVzdGUgdXRpbGl04XJpbyB0ZXN0YSBvIGRyaXZlciBkYSB0ZWxhLg0KK0VsZSBkZXZlIHNlciBleGVjdXRhZG8gY29tbyByb290LjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQgc3R5bGU9J3RleHQtaW5kZW50OjM1LjRwdCc+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPnNjcnRlc3QNCistb3B0aW9uIC4uLiBbbmFtZSA9IHZhbHVlIC4uLl08L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5Og0KKyJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxicj4NCitfPC9zcGFuPjxpPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5uYW1lID0gdmFsdWU8L3NwYW4+PC9pPjxzcGFuDQorc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxicj4NCis8L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPkRlZmluaXIgdW0gcGFy4m1ldHJvIGRlIGRyaXZlciB0ZWxhLiBQYXJhDQorb2J0ZXIgdW1hIGRlc2NyaefjbyBkb3MgcGFy4m1ldHJvcyBhY2VpdG9zIHBvciB1bSBkcml2ZXIgZXNwZWPtZmljbywgY29uc3VsdGUgYQ0KK2RvY3VtZW50YefjbyBkbyBkcml2ZXIuPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToNCisiQ291cmllciBOZXciJz48YnI+DQorPGJyPg0KKzwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+LWw8aT5jb2x1bW48L2k+LS1sZXN0ID0gPGk+Y29sdW1uPC9pPjwvc3Bhbj48c3Bhbg0KK3N0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48YnI+DQorPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5Fc3BlY2lmaXF1ZSBvIHBvbnRvIGRlIHBhcnRpZGEgZGEgY29sdW5hDQorKOAgZXNxdWVyZGEpKG9yaWdlbSB6ZXJvKSBkYSByZWdp428uIFNlIGVzc2UgdmFsb3IgbuNvIGZvciBmb3JuZWNpZG8sIGVudONvIHVtDQordmFsb3IgcGFkcuNvLCBjb20gYmFzZSBuYSBsYXJndXJhIGVzcGVjaWZpY2FkYSwg6SBzZWxlY2lvbmFkbyBkZSBtb2RvIHF1ZSBhDQorcmVnaeNvIHNlcuEgY2VudHJhbGl6YWRhIGhvcml6b250YWxtZW50ZS48L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzOw0KK21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxicj4NCis8YnI+DQorPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz4tYzxpPmNvdW50PC9pPiAtLWNvbHVtbnMgPSA8aT5jb3VudDwvaT48L3NwYW4+PHNwYW4NCitzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PGJyPg0KKzwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+RXNwZWNpZmlxdWUgYSBsYXJndXJhIGRhIHJlZ2njbyAoZW0NCitjb2x1bmFzKS4gU2UgZXNzZSB2YWxvciBu428gZm9yIGZvcm5lY2lkbywgZW50428gdW0gdmFsb3IgcGFkcuNvLCBjb20gYmFzZSBuYQ0KK2NvbHVuYSBpbmljaWFsIGVzcGVjaWZpY2Fkbywg6SBzZWxlY2lvbmFkbyBkZSBtb2RvIHF1ZSBhIHJlZ2njbyBzZXLhDQorY2VudHJhbGl6YWRhIGhvcml6b250YWxtZW50ZS48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz4tPGk+dHJvdyA8L2k+LS10b3AgPSA8aT5yb3c8L2k+DQorPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48YnI+DQorPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5Fc3BlY2lmaXF1ZSBhIGxpbmhhIChkZSBjaW1hKSBwYXJ0aWRhIChvcmlnZW0NCit6ZXJvKSBkYSByZWdp428uIFNlIGVzc2UgdmFsb3IgbuNvIGZvciBmb3JuZWNpZG8sIGVudONvIHVtIHZhbG9yIHBhZHLjbywgY29tDQorYmFzZSBuYSBhbHR1cmEgZXNwZWNpZmljYWRhLCDpIHNlbGVjaW9uYWRvIGRlIG1vZG8gcXVlIGEgcmVnaeNvIGVzdOEgY2VudHJhZGENCit2ZXJ0aWNhbG1lbnRlLjwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PGJyPg0KKzxicj4NCis8L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPi1yPGk+Y291bnQ8L2k+IC0tcm93cyA9IDxpPmNvdW50PC9pPjwvc3Bhbj48c3Bhbg0KK3N0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48YnI+DQorPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5Fc3BlY2lmaXF1ZSBhIGFsdHVyYSBkYSByZWdp428gKGVtDQorbGluaGFzKS4gU2UgZXNzZSB2YWxvciBu428gZm9yIGZvcm5lY2lkbywgZW50428gdW0gdmFsb3IgcGFkcuNvLCBjb20gYmFzZSBuYQ0KK2xpbmhhIGVzcGVjaWZpY2FkYSBkZSBwYXJ0aWRhLCDpIHNlbGVjaW9uYWRvIGRlIG1vZG8gcXVlIGEgcmVnaeNvIGVzdOEgY2VudHJhZGENCit2ZXJ0aWNhbG1lbnRlLjwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PGJyPg0KKzxicj4NCis8L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPi1oIJZoZWxwPG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+bW9zdHJhciB1bSByZXN1bW8gZGFzDQorb3Dn9WVzIGRlIGxpbmhhIGRlIGNvbWFuZG8sIGUgZGVwb2lzIHNhaXIuPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczsNCittc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48YnI+DQorPGJyPg0KKzwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+Tm90YXM6PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD4mbmJzcDs8L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+tyBTZSBuZW5odW1hIGNvbHVuYSBkZQ0KK3BhcnRpZGEsIG5lbSB1bWEgbGFyZ3VyYSByZWdp428g6SBlc3BlY2lmaWNhZG8sIGVudONvIGEgcmVnaeNvIOkgY2VudHJhZGEgbmENCitob3Jpem9udGFsIGUgY29tZedhIG5hIGNvbHVuYSA1LjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPrcgU2UgbmVuaHVtYSBsaW5oYSBkZQ0KK3BhcnRpZGEsIG5lbSBhIGFsdHVyYSBkYSByZWdp428g6SBlc3BlY2lmaWNhZG8sIGVudONvIGEgcmVnaeNvIOkgdmVydGljYWxtZW50ZQ0KK2NlbnRyYWRvIGUgY29tZedhIG5hIGxpbmhhIDUuPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToNCisiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48YnI+DQorPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5BIHNlZ3VpciBvIHBhZHLjbyBkZSBzYe1kYTo8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz4mbmJzcDsxLiBVbWEgbGluaGENCitkZXRhbGhhbmRvIGFzIGRpbWVuc/VlcyBkYSB0ZWxhLjwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7DQorbXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD4mbmJzcDs8L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7U2NyZWVuOg0KK3dpZHRoeGhlaWdodDwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD4mbmJzcDs8L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+Jm5ic3A7Mi4gVW1hIGxpbmhhIHF1ZQ0KK2RldGFsaGEgYSBwb3Np5+NvIChvcmlnZW0gemVybykgZG8gY3Vyc29yLjwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7DQorbXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD4mbmJzcDs8L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Q3Vyc29yOg0KK1tjb2x1bW4sIHJvd108L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPiZuYnNwOzMuIFVtYSBsaW5oYSBxdWUNCitkZXRhbGhhIG8gdGFtYW5obyBkYSByZWdp428gZGEgdGVsYSBzZWxlY2lvbmFkYSwgZSBhIHBvc2nn428gKG9yaWdlbSB6ZXJvKSwgZG8NCitzZXUgY2FudG8gc3VwZXJpb3IgZXNxdWVyZG8uPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToNCisiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0IHN0eWxlPSdtYXJnaW4tbGVmdDozNS40cHQnPjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczsNCittc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48YnI+DQorPHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgoKCgoCA8L3NwYW4+PC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LXNpemU6DQorMTEuMHB0Jz5SZWdpb246IHdpZHRoeGhlaWdodEBbY29sdW1uLCByb3ddPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczsNCittc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz4mbmJzcDs0LiBPIGNvbnRl+mRvIGRhDQorcmVnaeNvIGRhIHRlbGEgc2VsZWNpb25hZGEuIE7jbyBz428gaW1wcmVzc29zIG9zIGNhcmFjdGVyZXMgY29tIGVzcGHnb3MgZW0NCiticmFuY28uPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48YnI+DQorPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz4zLjguNiB0dGJ0ZXN0PC9zcGFuPjxzcGFuDQorc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxicj4NCis8YnI+DQorPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5Fc3RlIHV0aWxpdOFyaW8gdGVzdGEgdW1hIHRhYmVsYSBkZSB0ZXh0bw0KKyh2ZXIgVGFiZWxhIGRlIFRleHRvKS48L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5Og0KKyJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQgc3R5bGU9J3RleHQtaW5kZW50OjM1LjRwdCc+PHNwYW4gbGFuZz1FTi1VUw0KK3N0eWxlPSdmb250LXNpemU6MTEuMHB0O21zby1hbnNpLWxhbmd1YWdlOkVOLVVTJz50dGJ0ZXN0IC1vcHRpb24gLi4uDQoraW5wdXQtdGFibGUgb3V0cHV0LXRhYmxlPC9zcGFuPjxzcGFuIGxhbmc9RU4tVVMgc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzOw0KK21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyI7bXNvLWFuc2ktbGFuZ3VhZ2U6RU4tVVMnPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gbGFuZz1FTi1VUyBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6DQorIkNvdXJpZXIgTmV3Ijttc28tYW5zaS1sYW5ndWFnZTpFTi1VUyc+PGJyPg0KKzwvc3Bhbj48aT48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+aW5wdXQtdGFibGUgPC9zcGFuPjwvaT48c3Bhbg0KK3N0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48YnI+DQorPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5PIGNhbWluaG8gZG8gc2lzdGVtYSBkZSBhcnF1aXZvIGNvbSBhDQordGFiZWxhIGRlIGVudHJhZGEgZGUgdGV4dG8uIFNlIGlzc28g6SByZWxhdGl2bywgZW50428g6SBzdXBvcnRhZG8gbm8gZGlyZXTzcmlvDQorY29uZmlndXJhZG8gYXRyYXbpcyAtLXdpdGgtZGF0YS1kaXJlY3RvcnkuPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczsNCittc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48YnI+DQorPGJyPg0KKzwvc3Bhbj48aT48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+b3V0cHV0LXRhYmxlIDwvc3Bhbj48L2k+PHNwYW4NCitzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PGJyPg0KKzwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+TyBjYW1pbmhvIGRvIHNpc3RlbWEgZGUgYXJxdWl2b3MgcGFyYSBhDQordGFiZWxhIGRlIHRleHRvIGRlIHNh7WRhLiBTZSBpc3NvIOkgcmVsYXRpdm8sIGVudONvIGVsZSBlc3ThIGFwb2lhZG8gbm8NCitkaXJldPNyaW8gZGUgdHJhYmFsaG8gYXR1YWwuIFNlIGVzdGUgcGFy4m1ldHJvIG7jbyDpIGZvcm5lY2lkbywgZW0gc2VndWlkYSwNCit0YWJlbGEgZGUgc2HtZGEgZXN04SBlc2NyaXRvLjwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6DQorIkNvdXJpZXIgTmV3Iic+PGJyPg0KKzxicj4NCis8L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPi1pPGk+Zm9ybWF0IDwvaT4tLWlucHV0LWZvcm1hdCA9IDxpPmZvcm1hdDwvaT48L3NwYW4+PHNwYW4NCitzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PGJyPg0KKzwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+RXNwZWNpZmlxdWUgbyBmb3JtYXRvIGRhIHRhYmVsYSBkZQ0KK2VudHJhZGEuIFNlIGVzdGEgb3Dn428gbuNvIOkgZm9ybmVjaWRhLCBlbSBzZWd1aWRhLCBvIGZvcm1hdG8gZGEgdGFiZWxhIGRlDQorZW50cmFkYSDpIGRlZHV6aWRhIGEgcGFydGlyIGRhIGV4dGVuc+NvIGRvIG5vbWUgZGEgdGFiZWxhIGRlIGVudHJhZGEgZG8NCithcnF1aXZvLjwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PGJyPg0KKzxicj4NCis8L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPi1vPGk+Zm9ybWF0PC9pPiAtLW91dHB1dC1mb3JtYXQgPSA8aT5mb3JtYXQ8L2k+DQorPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48YnI+DQorPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5Fc3BlY2lmaXF1ZSBvIGZvcm1hdG8gZGEgdGFiZWxhIGRlIHNh7WRhLg0KK1NlIGVzdGEgb3Dn428gbuNvIOkgZm9ybmVjaWRhLCBvIGZvcm1hdG8gZGEgdGFiZWxhIGRlIHNh7WRhLCBxdWUgZGVjb3JyZSBkYQ0KK2V4dGVuc+NvIGRvIG5vbWUgZGEgdGFiZWxhIGRlIHNh7WRhIGRvIGFycXVpdm8uPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LWZhbWlseToNCitUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48YnI+DQorPGJyPg0KKzwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+LWM8aT5jaGFyc2V0PC9pPiAtLWNoYXJzZXQgPSA8aT5jaGFyc2V0PC9pPjwvc3Bhbj48c3Bhbg0KK3N0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48YnI+DQorPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5Fc3BlY2lmaXF1ZSBvIG5vbWUgZG8gY2FyYWN0ZXJlIGRlIDggYml0cw0KK3BhcmEgdXNhciBxdWFuZG8gaW50ZXJwcmV0YXIgYXMgdGFiZWxhcy4gU2UgZXN0YSBvcOfjbyBu428g6SBmb3JuZWNpZGEsIGRlZmluaXINCitvIGNhcmFjdGVyZSBkZSBob3N0IHF1ZSBlc3ThIHNlbmRvIHVzYWRvLjwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7DQorbXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PGJyPg0KKzxicj4NCis8L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPi1lIC0tZWRpdCA8L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5Og0KK1RpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxicj4NCis8L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPkNoYW1hciBvIGVkaXRvciBkZSB0YWJlbGEgZGUgdGV4dG8uIFNlIGENCit0YWJlbGEgZGUgc2HtZGEgZm9yIGVzcGVjaWZpY2FkbywgYXMgYWx0ZXJh5/VlcyBz428gZXNjcml0YXMgcGFyYSBlbGUuIFNlIG7jbywNCitlbnTjbyBhIHRhYmVsYSBkZSBlbnRyYWRhIOkgcmVlc2NyaXRhLjwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7DQorbXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PGJyPg0KKzxicj4NCis8L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPi1oIC0taGVscCA8L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5Og0KK1RpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxicj4NCis8L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPk1vc3RyYXIgdW0gcmVzdW1vIGRhcyBvcOf1ZXMgZGUgbGluaGEgZGUNCitjb21hbmRvLCBlIGRlcG9pcyBzYWlyLjwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6DQorIkNvdXJpZXIgTmV3Iic+PGJyPg0KKzxicj4NCis8L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPlNlIG5lbmh1bWEgYefjbyBlc3BlY2lhbCDpIHJlcXVlcmlkYSwgYQ0KK3RhYmVsYSBkZSBzYe1kYSDpIGZhY3VsdGF0aXZhLiBTZSBu428gZm9yIGVzcGVjaWZpY2FkYSwgYSB0YWJlbGEgZGUgZW50cmFkYQ0KK2VzdOEgbWFyY2FkYS4gU2UgZm9yIGVzcGVjaWZpY2FkbywgYSB0YWJlbGEgZGUgZW50cmFkYSDpIGNvbnZlcnRpZG8uPC9zcGFuPjxzcGFuDQorc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxicj4NCis8YnI+DQorPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5PcyBmb3JtYXRvcyBkZSB0YWJlbGEgYSBzZWd1aXIgc+NvDQorc3Vwb3J0YWRvczo8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIGxhbmc9RU4tVVMgc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQ7bXNvLWFuc2ktbGFuZ3VhZ2U6DQorRU4tVVMnPnR0Yjwvc3Bhbj48c3BhbiBsYW5nPUVOLVVTIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToNCisiQ291cmllciBOZXciO21zby1hbnNpLWxhbmd1YWdlOkVOLVVTJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIGxhbmc9RU4tVVMgc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQ7bXNvLWFuc2ktbGFuZ3VhZ2U6DQorRU4tVVMnPiZuYnNwOyZuYnNwOyZuYnNwOyBCUkxUVFk8L3NwYW4+PHNwYW4gbGFuZz1FTi1VUyBzdHlsZT0nZm9udC1mYW1pbHk6DQorVGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Ijttc28tYW5zaS1sYW5ndWFnZTpFTi1VUyc+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBsYW5nPUVOLVVTIHN0eWxlPSdmb250LXNpemU6MTEuMHB0O21zby1hbnNpLWxhbmd1YWdlOg0KK0VOLVVTJz5zYmw8L3NwYW4+PHNwYW4gbGFuZz1FTi1VUyBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6DQorIkNvdXJpZXIgTmV3Ijttc28tYW5zaS1sYW5ndWFnZTpFTi1VUyc+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBsYW5nPUVOLVVTIHN0eWxlPSdmb250LXNpemU6MTEuMHB0O21zby1hbnNpLWxhbmd1YWdlOg0KK0VOLVVTJz4mbmJzcDsmbmJzcDsmbmJzcDsgU3VTRSBibGludXg8L3NwYW4+PHNwYW4gbGFuZz1FTi1VUyBzdHlsZT0nZm9udC1mYW1pbHk6DQorVGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Ijttc28tYW5zaS1sYW5ndWFnZTpFTi1VUyc+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+YTJiPC9zcGFuPjxzcGFuDQorc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPiZuYnNwOyZuYnNwOyZuYnNwOw0KK0dub3Blcm5pY3VzPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5nbmI8L3NwYW4+PHNwYW4NCitzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+Jm5ic3A7Jm5ic3A7Jm5ic3A7IEdub21lDQorQnJhaWxsZTwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PGJyPg0KKzwvc3Bhbj4zLjguNyA8c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+Y3RidGVzdDwvc3Bhbj48c3Bhbg0KK3N0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48YnI+DQorPGJyPg0KKzwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+RXN0ZSB1dGlsaXThcmlvIHRlc3RhIHVtYSB0YWJlbGEgZGUNCitjb250cmHn428gKHZlciBUYWJlbGEgZGUgQ29udHJh5+NvKS4gTyB0ZXh0byBsaWRvIGEgcGFydGlyIGRvcyBhcnF1aXZvcyBkZSBlbnRyYWRhDQorKG91IFN0YW5kYXJkIGlucHV0KSDpIHJlZXNjcml0YSBwYXJhIGEgc2HtZGEgcGFkcuNvIGNvbW8gY29udHJhdGFkYSBicmFpbGxlLjwvc3Bhbj48c3Bhbg0KK3N0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz4mbmJzcDsmbmJzcDs8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0IHN0eWxlPSd0ZXh0LWluZGVudDozNS40cHQnPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5jdGJ0ZXN0DQorLW9wdGlvbiAuLi4gaW5wdXQtZmlsZSAuLi48L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5Og0KKyJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxicj4NCis8L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPmlucHV0LWZpbGUgPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LWZhbWlseToNCitUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48YnI+DQorPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5BIGxpc3RhIGRlIGFycXVpdm9zIGEgc2VyZW0gcHJvY2Vzc2Fkb3MuDQorUXVhbHF1ZXIgbvptZXJvIGRlIGFycXVpdm9zIHBvZGUgc2VyIGVzcGVjaWZpY2Fkby4gRWxlcyBz428gcHJvY2Vzc2Fkb3MgZGEgZXNxdWVyZGENCitwYXJhIGEgZGlyZWl0YS4gTyBub21lIGRlIGFycXVpdm8gZXNwZWNpYWwgLSDpIGludGVycHJldGFkYSBwYXJhIHNpZ25pZmljYXIgYQ0KK2VudHJhZGEgcGFkcuNvLiBTZSBuZW5odW0gYXJxdWl2byBmb3IgZXNwZWNpZmljYWRvLCBlbnRyYWRhIHBhZHLjbyDpDQorcHJvY2Vzc2Fkby48L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxicj4NCis8YnI+DQorPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz4tYzxpPmZpbGU8L2k+IC0tY29udHJhY3Rpb24tdGFibGUgPSA8aT5maWxlPG86cD48L286cD48L2k+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPk8gY2FtaW5obyBkbyBzaXN0ZW1hIGRlDQorYXJxdWl2b3MgcGFyYSBvIHF1YWRybyBkZSBjb250cmHn428uIFNlIGlzc28g6SByZWxhdGl2bywgZW50428g6SBzdXBvcnRhZG8gbm8NCitkaXJldPNyaW8gY29uZmlndXJhZG8gLS13aXRoLWRhdGEtZGlyZWN0b3J5LiBBIGV4dGVuc+NvIGRvIC5jdGIg6SBvcGNpb25hbC4gU2UNCitlc3RhIG9w5+NvIG7jbyDpIGZvcm5lY2lkYSwgZW0gc2VndWlkYSwgZW4tdXMtZzIg6SBhc3N1bWlkby48L3NwYW4+PHNwYW4NCitzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PGJyPg0KKzxicj4NCis8L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPi10PGk+ZmlsZTwvaT4gfGF1dG8glnRleHQtdGFibGUgPSA8aT5maWxlPC9pPnxhdXRvPG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+RXNwZWNpZmljYXIgYSB0YWJlbGEgZGUNCit0ZXh0byAodmVyIFRleHQgVGFibGVzKS4gU2UgdW0gY2FtaW5obyByZWxhdGl2byBmb3IgZm9ybmVjaWRvLCBlbnTjbyBlbGUgZXN04Q0KK2Fwb2lhZG8gZW0gL2V0Yy9icmx0dHkgKHZlciAtLXdpdGgtZGF0YS0gZGlyZWN0b3J5IGUgbyAtLXdpdGgtZXhlY3V0ZS1yb290KS4gQQ0KK2V4dGVuc+NvIC50dGIg6SBvcGNpb25hbC4gVmVqYSBhIHRhYmVsYSBkZSB0ZXh0byBkbyBhcnF1aXZvIGRlIGNvbmZpZ3VyYefjbw0KK3BhcmEgYSBjb25maWd1cmHn428gZGUgdGVtcG8gZGUgZXhlY3Xn428gcGFkcuNvLiBFc3RhIGNvbmZpZ3VyYefjbyBwb2RlIHNlcg0KK2FsdGVyYWRhIGNvbSBhIHByZWZlcupuY2lhIFRleHQgVGFibGUuPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczsNCittc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48YnI+DQorPGJyPg0KKzwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+LXc8aT5jb2x1bW5zPC9pPiAtLW91dHB1dC13aWR0aCA9PGk+Y29sdW1ucw0KKzxvOnA+PC9vOnA+PC9pPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5PIGNvbXByaW1lbnRvIG3heGltbyBkZQ0KK3VtYSBsaW5oYSBkZSBzYe1kYS4gQ2FkYSBsaW5oYSBkZSBlbnRyYWRhIGNvbnRyYXRhZGEgZXN04SBlbnZvbHZpZGEgZGVudHJvIGRlDQorbGluaGFzIGRlIHNhaWRhIHF1YW50YXMgZm9yZW0gbmVjZXNz4XJpYXMuIFNlIGVzc2Egb3Dn428gbuNvIGZvciBlc3BlY2lmaWNhZGEsDQorbuNvIGjhIGxpbWl0ZSwgZSBo4SB1bWEgY29ycmVzcG9uZOpuY2lhIHVtLXBhcmEtdW0gZW50cmUgYXMgbGluaGFzIGRlIGVudHJhZGEgZQ0KK3Nh7WRhLjwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PGJyPg0KKzxicj4NCis8L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPi1oIC2WaGVscDxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPk1vc3RyYXIgdW0gcmVzdW1vIGRhcw0KK29w5/VlcyBkZSBsaW5oYSBkZSBjb21hbmRvLCBlIGRlcG9pcyBzYWlyLjwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7DQorbXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PGJyPg0KKzxicj4NCis8L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPkEgdGFiZWxhIGRlIHRleHRvIOkgdXNhZG86PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD4mbmJzcDs8L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dCBzdHlsZT0nbWFyZ2luLWxlZnQ6MzYuMHB0O3RleHQtaW5kZW50Oi0xOC4wcHQ7bXNvLWxpc3Q6DQorbDcgbGV2ZWwxIGxmbzQ7dGFiLXN0b3BzOmxpc3QgMzYuMHB0Jz48IVtpZiAhc3VwcG9ydExpc3RzXT48c3Bhbg0KK3N0eWxlPSdmb250LXNpemU6MTEuMHB0O2ZvbnQtZmFtaWx5OldpbmdkaW5nczttc28tZmFyZWFzdC1mb250LWZhbWlseTpXaW5nZGluZ3M7DQorbXNvLWJpZGktZm9udC1mYW1pbHk6V2luZ2RpbmdzJz48c3BhbiBzdHlsZT0nbXNvLWxpc3Q6SWdub3JlJz6nPHNwYW4NCitzdHlsZT0nZm9udDo3LjBwdCAiVGltZXMgTmV3IFJvbWFuIic+Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7DQorPC9zcGFuPjwvc3Bhbj48L3NwYW4+PCFbZW5kaWZdPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5QYXJhIGRlZmluaXIgbw0KK2NhcmFjdGVyZSBkZSBzYe1kYSBkZSBmb3JtYSBxdWUgbyBicmFpbGxlIGNvbnRyYXRhZG8gc2Vy4SBleGliaWRhIGNvcnJldGFtZW50ZS4NCitBIG1lc21hIHRhYmVsYSBxdWUgc2Vy4SB1c2FkYSBwZWxvIEJSTFRUWSBxdWFuZG8gYSBzYe1kYSDpIGxpZG8gZGV2ZSBzZXINCitlc3BlY2lmaWNhZG8uPG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dCBzdHlsZT0nbWFyZ2luLWxlZnQ6MzYuMHB0O3RleHQtaW5kZW50Oi0xOC4wcHQ7bXNvLWxpc3Q6DQorbDcgbGV2ZWwxIGxmbzQ7dGFiLXN0b3BzOmxpc3QgMzYuMHB0Jz48IVtpZiAhc3VwcG9ydExpc3RzXT48c3Bhbg0KK3N0eWxlPSdmb250LXNpemU6MTEuMHB0O2ZvbnQtZmFtaWx5OldpbmdkaW5nczttc28tZmFyZWFzdC1mb250LWZhbWlseTpXaW5nZGluZ3M7DQorbXNvLWJpZGktZm9udC1mYW1pbHk6V2luZ2RpbmdzJz48c3BhbiBzdHlsZT0nbXNvLWxpc3Q6SWdub3JlJz6nPHNwYW4NCitzdHlsZT0nZm9udDo3LjBwdCAiVGltZXMgTmV3IFJvbWFuIic+Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7DQorPC9zcGFuPjwvc3Bhbj48L3NwYW4+PCFbZW5kaWZdPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5QYXJhIGRlZmluaXIgYXMNCityZXByZXNlbnRh5/VlcyBicmFpbGxlIGRvcyBjYXJhY3RlcmVzIGRlZmluaWRvcyBuYSB0YWJlbGEgZGUgY29udHJh5+NvIGNvbW8gPSAodmVyDQorc2Vj5+NvIFRyYWR15+NvIGRlIENhcmFjdGVyZXMpLjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxicj4NCis8YnI+DQorPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5BIHRhYmVsYSBicmYudHRiIHRleHRvIOkgZm9ybmVjaWRvIHBhcmENCit1c28gY29tIGVzdGUgdXRpbGl04XJpby4gRWxlIGRlZmluZSBvIGZvcm1hdG8gdXNhZG8gbm9zIGFycXVpdm9zIC5icmYuIEVzdGUNCit0YW1i6W0g6SBvIGZvcm1hdG8gcHJlZmVyaWRvIHVzYWRvIHBlbGEgbWFpb3JpYSBkYXMgaW1wcmVzc29yYXMgZW0gYnJhaWxsZSBlDQorZGVudHJvIGRpc3RyaWJ17WRhIGVsZXRyb25pY2FtZW50ZSBkb2N1bWVudG9zIDxzdDE6UGVyc29uTmFtZQ0KK1Byb2R1Y3RJRD0iZW0gYnJhaWxsZS4gRXN0YSIgdzpzdD0ib24iPmVtIGJyYWlsbGUuIEVzdGE8L3N0MTpQZXJzb25OYW1lPiB0YWJlbGENCitlZmV0aXZhIHBlcm1pdGUgcXVlIGVzdGUgdXRpbGl04XJpbyBwYXJhIHNlciB1c2FkbyBjb21vIHVtIHRyYWR1dG9yIGRlIHRleHRvDQorYnJhaWxsZS48L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxicj4NCis8YnI+DQorPC9zcGFuPjMuOC44IDxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz50dW5ldGVzdDwvc3Bhbj48c3Bhbg0KK3N0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48YnI+DQorPGJyPg0KKzwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+RXN0ZSB1dGlsaXThcmlvIHRlc3RhIG36c2ljYXMgZGUgYWxlcnRhLA0KK2UgdGFtYultIGZvcm5lY2UgdW1hIG1hbmVpcmEgZuFjaWwgZGUgY29tcG9yIG5vdmFzIG1lbG9kaWFzLiBQb2RlIHByZWNpc2FyIGRlDQorc2VyIGV4ZWN1dGFkbyBjb21vIHJvb3QuPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToNCisiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0IHN0eWxlPSd0ZXh0LWluZGVudDozNS40cHQnPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz50dW5ldGVzdA0KKy1vcHRpb24gLi4uIHtub3RlIGR1cmF0aW9ufSAuLi48L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzOw0KK21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gbGFuZz1FTi1VUyBzdHlsZT0nbXNvLWFuc2ktbGFuZ3VhZ2U6RU4tVVMnPjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPm5vdGUgPC9zcGFuPjxzcGFuDQorc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxicj4NCis8L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPlVtIHBhZHLjbyBNSURJIGRlIG76bWVybyBkZSBub3RhLiBEZXZlDQorc2VyIHVtIG76bWVybyBpbnRlaXJvIGRlIDxzdDE6bWV0cmljY29udmVydGVyIFByb2R1Y3RJRD0iMSBhIiB3OnN0PSJvbiI+MSBhPC9zdDE6bWV0cmljY29udmVydGVyPg0KKzEyNywgY29tIDYwIHJlcHJlc2VudGFudGVzIE1pZGRsZSBDLiBDYWRhIHZhbG9yIHJlcHJlc2VudGEgdW0gcGFkcuNvIGNyb23hdGljbw0KK3NlbWktdG9tLCBjb20gb3MgcHLzeGltb3MgdmFsb3JlcyBpbmZlcmlvcmVzIGUgc3VwZXJpb3JlcyBxdWUgcmVwcmVzZW50YW0sDQorcmVzcGVjdGl2YW1lbnRlLCBhcyBub3RhcyBpbWVkaWF0YW1lbnRlIGluZmVyaW9yIGUgc3VwZXJpb3IuPC9zcGFuPjxzcGFuDQorc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxicj4NCis8YnI+DQorPC9zcGFuPjxpPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5kdXJhdGlvbjwvc3Bhbj48L2k+PHNwYW4NCitzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+IDwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6DQorIkNvdXJpZXIgTmV3Iic+PGJyPg0KKzwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+QSBkdXJh5+NvIGRhIG5vdGEgPHN0MTpQZXJzb25OYW1lDQorUHJvZHVjdElEPSJlbSBtaWxpc3NlZ3VuZG9zLiBEZXZlIiB3OnN0PSJvbiI+ZW0gbWlsaXNzZWd1bmRvcy4gRGV2ZTwvc3QxOlBlcnNvbk5hbWU+DQorc2VyIHVtIG76bWVybyBpbnRlaXJvIGRlIDxzdDE6bWV0cmljY29udmVydGVyIFByb2R1Y3RJRD0iMSBhIiB3OnN0PSJvbiI+MSBhPC9zdDE6bWV0cmljY29udmVydGVyPg0KKzI1NS48L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxicj4NCis8YnI+DQorPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz4tZDxpPmRldmljZTwvaT4gLS1kZXZpY2UgPSA8aT5kZXZpY2U8L2k+IDwvc3Bhbj48c3Bhbg0KK3N0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48YnI+DQorPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5PIGRpc3Bvc2l0aXZvIG5vIHF1YWwgYSB0b2NhciBhIG36c2ljYS48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz4mbmJzcDsmbmJzcDtCZWVwZXI8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj5vIGFwaXRvIGludGVybm8gKGNvbnNvbGUgZ2VyYWRvciBkZSB0b20pLjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPiZuYnNwOyZuYnNwO1BjbTxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPmEgaW50ZXJmYWNlIGRpZ2l0YWwgZGUg4XVkaW8gbmEgcGxhY2EgZGUgc29tLjwvc3Bhbj48c3Bhbg0KK3N0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz4mbmJzcDsmbmJzcDs8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj5NaWRpPG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+byBNdXNpY2FsIEluc3RydW1lbnQgRGlnaXRhbCBJbnRlcmZhY2UgbmENCitwbGFjYSBkZSBzb20uPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz4mbmJzcDsmbmJzcDs8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj5GbTxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPm8gc2ludGV0aXphZG9yIGRlIEZNIGVtIHVtIGNhcnTjbyBkZSBBZExpYiwNCitPUEwzLCBTb3VuZCBCbGFzdGVyLCBvdSBvICZuYnNwOyZuYnNwO2VxdWl2YWxlbnRlIGRlIHNvbS48L3NwYW4+PHNwYW4NCitzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48YnI+DQorPHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPk8gbm9tZSBkbyBkaXNwb3NpdGl2byBwb2RlIHNlciBhYnJldmlhZGEuIFZlamENCitEaXNwb3NpdGl2byBkZSBUdW5lIHBhcmEgb2J0ZXIgZGV0YWxoZXMgc29icmUgbyBkaXNwb3NpdGl2byBwYWRy428gZSBhcw0KK3Jlc3Ryaef1ZXMgZGEgcGxhdGFmb3JtYS48L3NwYW4+PGJyPg0KKzxicj4NCis8c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+LXY8aT5sb3VkbmVzczwvaT4gLS12b2x1bWU9PGk+bG91ZG5lc3M8L2k+PC9zcGFuPjxicj4NCis8c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+RXNwZWNpZmljYXIgbyB2b2x1bWUgZGEgcHJvZHXn428gKHZvbHVtZSkgY29tbw0KK3VtYSBwb3JjZW50YWdlbSBkbyBt4XhpbW8uIE8gdm9sdW1lIGRlIHNh7WRhIHBhZHLjbyDpIDUwLjwvc3Bhbj48YnI+DQorPGJyPg0KKzxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz4tcDxpPmRldmljZTwvaT4gLS1wY20tZGV2aWNlID0gPGk+ZGV2aWNlPC9pPiA8L3NwYW4+PGJyPg0KKzxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5Fc3BlY2lmaXF1ZSBvIGRpc3Bvc2l0aXZvIGEgc2VyIHVzYWRvIHBhcmEgbw0KK+F1ZGlvIGRpZ2l0YWwgKHZlciBFc3BlY2lmaWNh5+NvIGRvIERpc3Bvc2l0aXZvIFBDTSkuIEVzdGEgb3Dn428gbuNvIGVzdGFy4Q0KK2Rpc3Bvbu12ZWwgc2UgYSBvcOfjbyAtLWRpc2FibGUtcGNtLXN1cHBvcnQgZm9yIGVzcGVjaWZpY2FkYS48L3NwYW4+PGJyPg0KKzxicj4NCis8c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+LW08aT5kZXZpY2U8L2k+IC0tbWlkaS1kZXZpY2UgPSA8aT5kZXZpY2U8bzpwPjwvbzpwPjwvaT48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+RXNwZWNpZmlxdWUgbyBkaXNwb3NpdGl2bw0KK2Egc2VyIHVzYWRvIHBhcmEgbyBNdXNpY2FsIEluc3RydW1lbnQgRGlnaXRhbCBJbnRlcmZhY2UgKHZlciBFc3BlY2lmaWNh5+NvIGRvDQorRGlzcG9zaXRpdm8gTUlESSkuIEVzdGEgb3Dn428gbuNvIGVzdGFy4SBkaXNwb27tdmVsIHNlIGEgb3Dn428NCistLWRpc2FibGUtbWlkaS1zdXBwb3J0IGJ1aWxkIG9wdGlvbiBmb2kgZXNwZWNpZmljYWRvLjwvc3Bhbj48YnI+DQorPGJyPg0KKzxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz4taTxpPmluc3RydW1lbnQgPC9pPi0taW5zdHJ1bWVudCA9IDxpPmluc3RydW1lbnQ8L2k+DQorPC9zcGFuPjxicj4NCis8c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+TyBpbnN0cnVtZW50byBhIHNlciB1c2FkbyBzZSBvIGRpc3Bvc2l0aXZvDQorc2VsZWNpb25hZG8gcGFyYSBtaWRpLiBPIGluc3RydW1lbnRvIHBhZHLjbyDpIHVtIGFjb3VzdGljIGdyYW5kIHBpYW5vLiBBcw0KK3BhbGF2cmFzIHF1ZSBjb21w9WVtIG8gbm9tZSBkbyBpbnN0cnVtZW50byBkZXZlIHNlciBzZXBhcmFkb3MgdW0gZG8gb3V0cm8gcG9yDQordW0g+m5pY28gc2luYWwgZGUgbWVub3MgZW0gdmV6IGRlIGVzcGHnb3MsIGUgcXVhbHF1ZXIgdW1hIGRhcyBwYWxhdnJhcyBwb2RlIHNlcg0KK2FicmV2aWFkYS4gVW0gcGlhbm8gYWP6c3RpY28sIHBvciBleGVtcGxvLCBwb2RlIHNlciBlc3BlY2lmaWNhZG8gY29tbyBhLWdyYS1waS48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxvOnA+Jm5ic3A7PC9vOnA+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+LWgglmhlbHAgPC9zcGFuPjxicj4NCis8c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+TW9zdHJhciB1bSByZXN1bW8gZGFzIG9w5/VlcyBkZSBsaW5oYSBkZQ0KK2NvbWFuZG8sIGUgZGVwb2lzIHNhaXIuPC9zcGFuPjxicj4NCis8YnI+DQorNCAtIFVzYW5kbyBvIEJSTFRUWTwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PG86cD4mbmJzcDs8L286cD48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5BbnRlcyBkZSBpbmljaWFyIG8gQlJMVFRZLA0KK3ZvY+ogcHJlY2lzYSBjb25maWd1cmFyIGEgc3VhIGxpbmhhIEJyYWlsbGUuIE5hIG1haW9yaWEgZG9zIGNhc29zIGlzc28g6SBmZWl0bw0KK3NpbXBsZXNtZW50ZSBjb25lY3RhbmRvLW8gYSB1bWEgcG9ydGEgc2VyaWFsIGRpc3Bvbu12ZWwsIGUgZGVwb2lzIGxpZ+EtbG8uDQorRGVwb2lzIGRlIGNvbmZpZ3VyYWRvIG8gZGlzcGxheSBleGVjdXRlIEJSTFRUWSBzaW1wbGVzbWVudGUgZGlnaXRhbmRvIG8gY29tYW5kbw0KK2JybHR0eSBubyBzaGVsbCBwcm9tcHQgKGlzdG8gZGV2ZSBzZXIgZmVpdG8gY29tbyByb290KS4gVmVyaWZpcXVlIGEgb3Dn428gLWQgZGUNCitsaW5oYSBkZSBjb21hbmRvLCBhcyBkaXJldGl2YXMgZGUgYXJxdWl2byBkZSBjb25maWd1cmHn428gZG8gJm5ic3A7ZGlzcG9zaXRpdm8NCiticmFpbGxlLCBlIGEgb3Dn428gZGUgY29uc3RydefjbyAtLXdpdGgtYnJhaWxsZS1kZXZpY2UmbmJzcDtwYXJhIGFsdGVybmF0aXZhcw0KK3NvYnJlIGNvbW8gZGl6ZXIgYW8gJm5ic3A7QlJMVFRZIHF1YWwgZGlzcG9zaXRpdm8gcXVlIG8gZGlzcGxheSBlc3ThIGNvbmVjdGFkby4NCitWZXJpZmlxdWUgYSBvcOfjbyAtYiBkZSBsaW5oYSBkZSBjb21hbmRvLCBhcyBkaXJldGl2YXMgZGUgYXJxdWl2byBkZQ0KK2NvbmZpZ3VyYefjbyBkbyBkaXNwb3NpdGl2byBicmFpbGxlLCBlIGEgb3Dn428gZGUgY29uc3Rydefjbw0KKy0td2l0aC1icmFpbGxlLWRldmljZSAmbmJzcDtwYXJhIGFsdGVybmF0aXZhcyBzb2JyZSBjb21vIGRpemVyIGFvICZuYnNwO0JSTFRUWQ0KK3F1ZSB0aXBvIGRlIGRpc3BsYXkgYnJhaWxsZSB2b2PqIHRlbS4gVmVyaWZpcXVlIGEgb3Dn428gLUIgZGUgbGluaGEgZGUgY29tYW5kbywNCitlIG8gYnJhaWxsZS1wYXJhbWV0ZXJzICZuYnNwO2RhcyBkaXJldGl2YSBkZSBhcnF1aXZvIGRlIGNvbmZpZ3VyYefjbyBzb2JyZSBjb21vDQorcGFzc2FyIHBhcuJtZXRyb3MgcGFyYSBvIGRyaXZlciBkbyBzZXUgZGlzcGxheSBicmFpbGxlLjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPlVtYSBtZW5zYWdlbSBpbmRpY2FuZG8gbw0KK25vbWUgZG8gcHJvZ3JhbWEgKEJSTFRUWSkgZSBzZXUgbvptZXJvIGRlIHZlcnPjbyBhcGFyZWNlcuEgYnJldmVtZW50ZSAodmVyIGENCitvcOfjbyAtTSBkZSBsaW5oYSBkZSBjb21hbmRvKSBubyBkaXNwbGF5IGJyYWlsbGUuIEEgZGlzcGxheSBtb3N0cmFy4SBlbnTjbyB1bWENCitwZXF1ZW5hIOFyZWEgZGEgdGVsYSwgaW5jbHVpbmRvIG8gY3Vyc29yLiBQb3IgcGFkcuNvIG8gY3Vyc29yIOkgcmVwcmVzZW50YWRvDQorY29tIG9zIHBvbnRvcyA3IGUgOCBzb2JyZXBvc3RvIGFvIGNhcmFjdGVyIHF1ZSBlbGUgZXN04S48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5RdWFscXVlciBhdGl2aWRhZGUgZGUgdGVsYQ0KK3NlcuEgcmVmbGV0aWRhIG5hIHRlbGEgPHN0MTpQZXJzb25OYW1lIFByb2R1Y3RJRD0iZW0gQnJhaWxsZS4gTyIgdzpzdD0ib24iPmVtDQorIEJyYWlsbGUuIE88L3N0MTpQZXJzb25OYW1lPiBkaXNwbGF5IHRhbWLpbSBpcuEgYWNvbXBhbmhhciBvIGFuZGFtZW50byBkbw0KK2N1cnNvciBuYSB0ZWxhLiBFc3NlIHJlY3Vyc28g6SBjb25oZWNpZG8gY29tbyBvIGN1cnNvciB0cmFja2luZy48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5CYXN0YSBkaWdpdGFyIG5vIHRlY2xhZG8gZQ0KK2xlciBvIGRpc3BsYXksIG5vIGVudGFudG8sIG7jbyDpIHN1ZmljaWVudGUuIFRlbnRlIGRpZ2l0YXIgdW0gY29tYW5kbyBxdWUNCitjYXVzYXLhIHVtIGVycm8sIGUgcHJlc3Npb25hciBlbnRlci4gTyBlcnJvIGFwYXJlY2UgbmEgdGVsYSwgbWFzLCBhIG1lbm9zIHF1ZQ0KK3RlbmhhIHVtIGRpc3BsYXkgbXVsdGktbGluaGEsIGFzIGNoYW5jZXMgc+NvIGRlIHF1ZSBu428g6SB2aXPtdmVsIG5vIGRpc3BsYXkNCiticmFpbGxlLiBUdWRvIHF1ZSB2b2PqIHbqIG5lbGEg6SBvdXRyYSBqYW5lbGEgZGUgY29tYW5kb3MuIE8gcXVlIOkgbmVjZXNz4XJpbywNCitlbnTjbywg6SB1bWEgbWFuZWlyYSBkZSBtb3ZlciBhIGphbmVsYSBicmFpbGxlIGVtIHRvcm5vIGRhIHRlbGEuIEFzIHRlY2xhcyBubw0KK2Rpc3BsYXkgYnJhaWxsZSBlbSBzaSBwb2RlIHNlciB1c2FkbyBwYXJhIGVudmlhciBjb21hbmRvcyBwYXJhIEJSTFRUWSBxdWUsIGFs6W0NCitkZSB1bSBtb250ZSBkZSBvdXRyYXMgY29pc2FzLCB0YW1i6W0gcG9kZSBmYXplciBleGF0YW1lbnRlIGlzc28uPC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J21zby1iaWRpLWZvbnQtc2l6ZToxOC4wcHQnPjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J21zby1iaWRpLWZvbnQtc2l6ZToxOC4wcHQnPjQuMSCWIENvbWFuZG9zPC9zcGFuPjxzcGFuDQorc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPkluZmVsaXptZW50ZSwgb3MgduFyaW9zDQorZGlzcGxheSBicmFpbGxlIG7jbyBvZmVyZWNlbSB1bSBjb25qdW50byBkZSBjb250cm9sZXMuIEFsZ3VucyB06m0gbyBwYWRy428gZGUNCitzZWlzIHBvbnRvcyBjaGF2ZXMsIGFsZ3VucyB06m0gb2l0bywgZSBvdXRyb3MgbuNvIHTqbSBuZW5odW0uIEFsZ3VucyB06m0gYXMNCit0ZWNsYXMgZG8gcG9sZWdhciwgbWFzIG7jbyBo4SB1bSBu+m1lcm8gcGFkcuNvIGRlbGVzLiBBbGd1bnMgcG9zc3VlbSB1bSBib3Tjbw0KK2FjaW1hIGRlIGNhZGEgY+lsdWxhIGJyYWlsbGUuIEFsZ3VucyB06m0gaW50ZXJydXB0b3JlcyBsaWdhL2Rlc2xpZ2Eocm9ja2VyDQorc3dpdGNoZXMpLiBBbGd1bnMgdOptIHVtYSBiYXJyYSBm4WNpbCBkZSBhbGNhbudhciwgcXVlIGZ1bmNpb25hIGNvbW8gdW0NCitqb3lzdGljay4gQWxndW5zIHTqbSBhcyBjb21iaW5h5/VlcyBkb3MgYW50ZXJpb3Jlcy4gUG9ycXVlIGEgbmF0dXJlemEgZSBhDQorZGlzcG9zaefjbyBkZSBjYWRhIGRpc3BsYXkg6SB0428gZGlmZXJlbnRlLCBjb25zdWx0ZSBvIGRvY3VtZW50YefjbyBwYXJhIG8NCitkaXNwbGF5IGVzcGVj7WZpY28sIGEgZmltIGRlIGRlc2NvYnJpciBleGF0YW1lbnRlIG8gcXVlIHN1YXMgdGVjbGFzIGZhemVtLjwvc3Bhbj48c3Bhbg0KK3N0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5Db21hbmRvcyBCUkxUVFkgc+NvDQorcmVmZXJpZG9zIHBlbG8gbm9tZSBuZXN0ZSBtYW51YWwuIFNlIHZvY+ogZXNxdWVjZXIgcXVhbCDpIGEgdGVjbGEocykgbm8gc2V1DQorZGlzcGxheSBicmFpbGxlIHBhcmEgdXNhciB1bSBjb21hbmRvIHBhcnRpY3VsYXIsIGVtIHNlZ3VpZGEsIGNvbnN1bHRlIGEgc3VhDQorcOFnaW5hIGRlIGFqdWRhIGRvcyBkcml2ZXKScy4gQSB0ZWNsYSBwcmluY2lwYWwgdm9j6iBkZXZlIGltZWRpYXRhbWVudGUgZ3VhcmRhcg0KK25hIG1lbfNyaWEsIHBvcnRhbnRvLCDpIPpuaWNvIHBhcmEgbyBjb21hbmRvIEhFTFAuIFVzZSBhcyB0ZWNsYXMgZGUgbW92aW1lbnRvDQorcmVndWxhciAoY29uZm9ybWUgZGVzY3JpdG8gYWJhaXhvKSBwYXJhIG5hdmVnYXIgbmEgcOFnaW5hIGRlIGFqdWRhLCBlIHByZXNzaW9uZQ0KK2EgaGVscCBub3ZhbWVudGUgcGFyYSBzYWlyLjwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6DQorIkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+PGJyPg0KKzQuMS4xIERlc2xvY2FtZW50byBWZXJ0aWNhbDxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPlZlamEgdGFtYultIGFzDQorUFJJTkRFTlQvTlhJTkRFTlQgZSBvIFBSRElGQ0hBUi9OWERJRkNIQVIgdGVjbGFzICZuYnNwO2RlIHJvdGVhbWVudG8gZGUNCitjb21hbmRvcy48L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPjxicj4NCitMTlVQL0xORE48L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPklyIHBhcmEgY2ltYS9iYWl4byBlbSB1bWENCitsaW5oYS4gU2UgbyBjb21hbmRvIHB1bGFyIGxpbmhhIGlk6m50aWNhIGZvaSBhdGl2YWRvICh2ZWphIG8gY29tYW5kbyBTS1BJRExOUyksDQorZW50428gZXNzZXMgY29tYW5kb3MsIGFvIGludulzIGRlIG1vdmVyIGV4YXRhbWVudGUgdW1hIGxpbmhhLCBzZXLjbyBhc3NvY2lhZG9zDQorb3MgY29tYW5kb3MgUFJESUZMTi9OWERJRkxOLjwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6DQorIkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+PGJyPg0KK1dJTlVQL1dJTkROPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5JciBwYXJhIGNpbWEvYmFpeG8gZW0gdW1hDQoramFuZWxhLiBTZSBhIGphbmVsYSDpIGFwZW5hcyB1bWEgbGluaGEgYWx0YSBtb3ZlIDUgbGluaGFzLjxicj4NCis8YnI+DQorPC9zcGFuPjxzcGFuIGxhbmc9RU4tVVMgc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQ7bXNvLWFuc2ktbGFuZ3VhZ2U6RU4tVVMnPlBSRElGTE4vTlhESUZMTjwvc3Bhbj48c3Bhbg0KK2xhbmc9RU4tVVMgc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyI7DQorbXNvLWFuc2ktbGFuZ3VhZ2U6RU4tVVMnPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPklyIHBhcmEgY2ltYS9iYWl4byBwYXJhIGENCitsaW5oYSBtYWlzIHBy83hpbWEgY29tIGNvbnRl+mRvIGRpZmVyZW50ZS4gU2UgbyBjb21hbmRvIHB1bGFyIGxpbmhhIGlk6m50aWNhDQorZm9pIGF0aXZhZG8gKHZlamEgbyBjb21hbmRvIFNLUElETE5TKSwgZW50428gZXNzZXMgY29tYW5kb3MsIGFvIGludulzIGRlIHB1bGFyDQorbGluaGFzIGlk6m50aWNhcywgc2Vy428gYXNzb2NpYWRvcyBvcyBjb21hbmRvcyBMTlVQL0xORE4uPGJyPg0KKzxicj4NCitBVFRSVVAvQVRUUkROPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5JciBwYXJhIGNpbWEvYmFpeG8gcGFyYSBhDQorbGluaGEgbWFpcyBwcvN4aW1hIGNvbSBkaWZlcmVudGVzIGF0cmlidXRvcyAoY2FyYWN0ZXIgZW0gZGVzdGFxdWUpLjxicj4NCis8YnI+DQorPC9zcGFuPjxzcGFuIGxhbmc9RU4tVVMgc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQ7bXNvLWFuc2ktbGFuZ3VhZ2U6RU4tVVMnPlRPUC9CT1Q8L3NwYW4+PHNwYW4NCitsYW5nPUVOLVVTIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciOw0KK21zby1hbnNpLWxhbmd1YWdlOkVOLVVTJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIGxhbmc9RU4tVVMgc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQ7bXNvLWFuc2ktbGFuZ3VhZ2U6DQorRU4tVVMnPlbhIHBhcmEgYSBsaW5oYSBzdXBlcmlvci9pbmZlcmlvci48YnI+DQorPGJyPg0KK1RPUF9MRUZUL0JPVF9MRUZUPC9zcGFuPjxzcGFuIGxhbmc9RU4tVVMgc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5Og0KKyJDb3VyaWVyIE5ldyI7bXNvLWFuc2ktbGFuZ3VhZ2U6RU4tVVMnPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gbGFuZz1FTi1VUyBzdHlsZT0nZm9udC1zaXplOjExLjBwdDttc28tYW5zaS1sYW5ndWFnZToNCitFTi1VUyc+VuEgcGFyYSBvIGNhbnRvIHRvcC1sZWZ0L2JvdHRvbS1sZWZ0Ljxicj4NCis8YnI+DQorPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5QUlBHUlBIL05YUEdSUEg8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5JciBwYXJhIGEgcHLzeGltYSBsaW5oYSBkbw0KK3BhcuFncmFmbyBhbnRlcmlvci9zZWd1aW50ZSAoYSBwcmltZWlyYSBsaW5oYSBu428tYnJhbmNvIHBhcmEgYWzpbSBkbyBwcvN4aW1vDQorbGluaGEgZW0gYnJhbmNvKS4gQSBsaW5oYSBhdHVhbCDpIGluY2x17WRhIG5hIHBlc3F1aXNhIHBhcmEgbyBlc3Bh528NCitpbnRlci1wYXJhZ3LhZm8uPGJyPg0KKzxicj4NCitQUlBST01QVC9OWFBST01QVDxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPklyIHBhcmEgbyBwcm9tcGV0IGNvbWFuZG8NCithbnRlcmlvci9zZWd1aW50ZS48YnI+DQorPGJyPg0KK1BSU0VBUkNIL05YU0VBUkNIPG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+UHJvY3VyYSBwYXJhIHRy4XMvZnJlbnRlDQorcGFyYSBhIHBy83hpbWEgb2NvcnLqbmNpYSBkYSBjYWRlaWEgZGUgY2FyYWN0ZXJlcyBubyBidWZmZXIgZGUgY29ydGUgKHZlcg0KK1JlY29ydGFyIGUgQ29sYXIpIHF1ZSBu428gZXN0aXZlciBkZW50cm8gZGEgamFuZWxhIGJyYWlsbGUuIE9zIHJlY3Vyc29zIGRlDQorcGVzcXVpc2EgcGFyYSBhIGVzcXVlcmRhL2RpcmVpdGEsIGNvbWXnYW5kbyBpbWVkaWF0YW1lbnRlIG5vIGNhcmFjdGVyIOANCitkaXJlaXRhL2VzcXVlcmRhIGRhIGphbmVsYSwgZSBlbnZvbHZlbmRvIGEgYm9yZGEgZGEgdGVsYS4gQSBwZXNxdWlzYSBu428NCitkaWZlcmVuY2lhIG1hafpzY3VsYXMgZGUgbWlu+nNjdWxhcy48YnI+DQorPGJyPg0KKzQuMS4yIERlc2xvY2FtZW50byBIb3Jpem9udGFsPG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+PG86cD4mbmJzcDs8L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+VmVqYSB0YW1i6W0gYXMgU0VUTEVGVA0KK3RlY2xhcyBkZSBlbmNhbWluaGFtZW50byBkZSBjb21hbmRvLjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPjxicj4NCitDSFJMVC9DSFJSVDwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+VuEgcGFyYSBhIGVzcXVlcmRhL2RpcmVpdGENCitkZSB1bSBjYXJhY3Rlci48YnI+DQorPGJyPg0KK0hXSU5MVC9IV0lOUlQ8L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPlbhIHBhcmEgYSBlc3F1ZXJkYS9kaXJlaXRhDQorZGEgbWV0YWRlIGRlIHVtYSBqYW5lbGEuPGJyPg0KKzxicj4NCitGV0lOTFQvRldJTlJUPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5W4SBwYXJhIGEgZXNxdWVyZGEvZGlyZWl0YQ0KK2RlIHVtYSBqYW5lbGEuIEVzdGVzIGNvbWFuZG9zIHPjbyBwYXJ0aWN1bGFybWVudGUg+nRlaXMgcG9ycXVlIHF1ZWJyYW0NCithdXRvbWF0aWNhbWVudGUgcXVhbmRvIGF0aW5naXIgYSBib3JkYSBkYSB0ZWxhLiBPdXRyb3MgcmVjdXJzb3MsIGNvbW8gYSBzdWENCitjYXBhY2lkYWRlIGRlIHB1bGFyIGphbmVsYXMgZW0gYnJhbmNvICh2ZWphIG8gY29tYW5kbyBTS1BCTE5LV0lOUyksIHJlZm9y52FyIGENCitzdWEgdXRpbGlkYWRlLjxicj4NCis8YnI+DQorRldJTkxUU0tJUC9GV0lOUlRTS0lQPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToNCisiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5W4SBwYXJhIGEgZXNxdWVyZGEvZGlyZWl0YQ0KK3BhcmEgYSBqYW5lbGEgbWFpcyBwcvN4aW1hIG7jby1icmFuY2EuPGJyPg0KKzxicj4NCitMTkJFRy9MTkVORDwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+SXIgcGFyYSBvIGlu7WNpby9maW0gZGENCitsaW5oYS48YnIgc3R5bGU9J21zby1zcGVjaWFsLWNoYXJhY3RlcjpsaW5lLWJyZWFrJz4NCis8IVtpZiAhc3VwcG9ydExpbmVCcmVha05ld0xpbmVdPjxiciBzdHlsZT0nbXNvLXNwZWNpYWwtY2hhcmFjdGVyOmxpbmUtYnJlYWsnPg0KKzwhW2VuZGlmXT48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz40LjEuMyBEZXNsb2NhbWVudG8gSW1wbO1jaXRvPG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD4mbmJzcDs8L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+VmVqYSB0YW1i6W0gR09UT01BUksNCit0ZWNsYXMgZGUgZW5jYW1pbmhhbWVudG8gZGUgY29tYW5kby48L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzOw0KK21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPjxicj4NCitIT01FPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5WYWkgcGFyYSBvbmRlIGVzdOEgbw0KK2N1cnNvci48YnI+DQorPGJyPg0KK0JBQ0s8L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPlZvbHRlIHBhcmEgb25kZSBvIGNvbWFuZG8NCitkZSBtb3ZpbWVudG8gbWFpcyByZWNlbnRlIGNvbG9jYWRvIG5vIGRpc3BsYXkgYnJhaWxsZS4gRXN0YSDpIHVtYSBtYW5laXJhIGbhY2lsDQorZGUgdm9sdGFyIHBhcmEgb25kZSB2b2PqIGVzdGF2YSBsZW5kbywgYXDzcyB1bSBldmVudG8gaW5lc3BlcmFkbyAoY29tbw0KK2Fjb21wYW5oYW1lbnRvIGRvIGN1cnNvcikgbW92ZW5kbyBhIGphbmVsYSBicmFpbGxlIGVtIHVtIG1vbWVudG8gaW5vcG9ydHVuby48YnI+DQorPGJyPg0KK1JFVFVSTjwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dCBzdHlsZT0nbWFyZ2luLWxlZnQ6MzYuMHB0O3RleHQtaW5kZW50Oi0xOC4wcHQ7bXNvLWxpc3Q6DQorbDQgbGV2ZWwxIGxmbzU7dGFiLXN0b3BzOmxpc3QgMzYuMHB0Jz48IVtpZiAhc3VwcG9ydExpc3RzXT48c3Bhbg0KK3N0eWxlPSdmb250LWZhbWlseTpXaW5nZGluZ3M7bXNvLWZhcmVhc3QtZm9udC1mYW1pbHk6V2luZ2RpbmdzO21zby1iaWRpLWZvbnQtZmFtaWx5Og0KK1dpbmdkaW5ncyc+PHNwYW4gc3R5bGU9J21zby1saXN0Oklnbm9yZSc+pzxzcGFuIHN0eWxlPSdmb250OjcuMHB0ICJUaW1lcyBOZXcgUm9tYW4iJz4mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsNCis8L3NwYW4+PC9zcGFuPjwvc3Bhbj48IVtlbmRpZl0+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPlNlIG8gbW92aW1lbnRvDQorbWFpcyByZWNlbnRlIGRhIGphbmVsYSBkbyBicmFpbGxlIGZvaSBhdXRvbeF0aWNvLCBwb3IgZXhlbXBsbywgY29tbyByZXN1bHRhZG8NCitkbyBtb25pdG9yYW1lbnRvIGRlIGN1cnNvciwgZW50428gdm9sdGEgcGFyYSBvbmRlIG8gY29tYW5kbyBkZSBtb3ZpbWVudG8gbWFpcw0KK3JlY2VudGUgY29sb2PhLWxvICh2ZWphIG8gY29tYW5kbyBCQUNLKS48L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzOw0KK21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQgc3R5bGU9J21hcmdpbi1sZWZ0OjM2LjBwdDt0ZXh0LWluZGVudDotMTguMHB0O21zby1saXN0Og0KK2w0IGxldmVsMSBsZm81O3RhYi1zdG9wczpsaXN0IDM2LjBwdCc+PCFbaWYgIXN1cHBvcnRMaXN0c10+PHNwYW4NCitzdHlsZT0nZm9udC1mYW1pbHk6V2luZ2RpbmdzO21zby1mYXJlYXN0LWZvbnQtZmFtaWx5OldpbmdkaW5nczttc28tYmlkaS1mb250LWZhbWlseToNCitXaW5nZGluZ3MnPjxzcGFuIHN0eWxlPSdtc28tbGlzdDpJZ25vcmUnPqc8c3BhbiBzdHlsZT0nZm9udDo3LjBwdCAiVGltZXMgTmV3IFJvbWFuIic+Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7DQorPC9zcGFuPjwvc3Bhbj48L3NwYW4+PCFbZW5kaWZdPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5TZSBvIGN1cnNvciBu428NCitlc3RpdmVyIGRlbnRybyBkYSBqYW5lbGEgZG8gYnJhaWxsZSwgZW0gc2VndWlkYSwgdmFpIHBhcmEgb25kZSBlc3ThIG8gY3Vyc29yDQorKHZlamEgbyBjb21hbmRvIEhPTUUpLjxiciBzdHlsZT0nbXNvLXNwZWNpYWwtY2hhcmFjdGVyOmxpbmUtYnJlYWsnPg0KKzwhW2lmICFzdXBwb3J0TGluZUJyZWFrTmV3TGluZV0+PGJyIHN0eWxlPSdtc28tc3BlY2lhbC1jaGFyYWN0ZXI6bGluZS1icmVhayc+DQorPCFbZW5kaWZdPjwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dCBzdHlsZT0nbWFyZ2luLWxlZnQ6MzYuMHB0O3RleHQtaW5kZW50Oi0zNi4wcHQ7bXNvLWxpc3Q6DQorbDggbGV2ZWwzIGxmbzY7dGFiLXN0b3BzOmxpc3QgMzYuMHB0Jz48IVtpZiAhc3VwcG9ydExpc3RzXT48c3Bhbg0KK3N0eWxlPSdmb250LXNpemU6MTEuMHB0O21zby1iaWRpLWZvbnQtc2l6ZToxMC4wcHQ7bXNvLWZhcmVhc3QtZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PHNwYW4NCitzdHlsZT0nbXNvLWxpc3Q6SWdub3JlJz40LjEuNDxzcGFuIHN0eWxlPSdmb250OjcuMHB0ICJUaW1lcyBOZXcgUm9tYW4iJz4mbmJzcDsgPC9zcGFuPjwvc3Bhbj48L3NwYW4+PCFbZW5kaWZdPjxzcGFuDQorc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPjxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gPC9zcGFuPkNhcmFjdGVyaXN0aWNhDQorZGUgQXRpdmHn4288L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPkNhZGEgdW0gZGVzc2VzIGNvbWFuZG9zDQordGVtIHRy6nMgZm9ybWFzOiBhY3RpdmF0ZSAoYXRpdmFyIG8gcmVjdXJzbyksIGRlc2FjdGl2YXRlIChkZXNhdGl2YXIgbyByZWN1cnNvKSwNCitlIHRvZ2dsZSAoc2UgZXN0aXZlciBkZXNsaWdhZG8gZW50428gaXLhIGxpZ2FyLCBlIHNlIGVzdGl2ZXIgbGlnYWRvIGly4Q0KK2Rlc2xpZ2FyKS4gRXhjZXRvIGNvbmZvcm1lIGluZGljYWRvLCBjYWRhIHVtIGRlc3NlcyByZWN1cnNvcyBlc3ThIGluaWNpYWxtZW50ZQ0KK29mZiwgZSwgcXVhbmRvIG9uLCBhZmV0YSBhIG9wZXJh5+NvIEJSTFRUWSBjb21vIHVtIHRvZG8uIEEgY29uZmlndXJh5+NvIGluaWNpYWwNCitkZSBhbGd1bWFzIGRlc3NhcyBjYXJhY3Rlcu1zdGljYXMgcG9kZW0gc2VyIGFsdGVyYWRhcyBhdHJhdulzIGRvIG1lbnUgZGUNCitwcmVmZXLqbmNpYXMuPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz48YnI+DQorRlJFRVpFPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5Db25nZWxhIGEgaW1hZ2VtIGRhIHRlbGEuDQorQlJMVFRZIGZheiB1bWEgY/NwaWEgZGEgdGVsYSAoY29udGX6ZG8gZSBhdHJpYnV0b3MpIGEgcGFydGlyIGRvIG1vbWVudG8gZW0gcXVlDQorYSBpbWFnZW0gZGEgdGVsYSDpIGNvbmdlbGFkYSBlIGVtIHNlZ3VpZGEsIGlnbm9yYSB0b2RhcyBhcyBhdHVhbGl6YefjbyBkYSB0ZWxhDQorYXTpIHF1ZSBlbGEgc2VqYSBkZXNjb25nZWxhZGEuIEVzdGEgY2FyYWN0ZXLtc3RpY2EgdG9ybmEgbWFpcyBm4WNpbCwgcG9yDQorZXhlbXBsbywgdW1hIGFtb3N0cmEgZGEgc2HtZGEgZGUgdW1hIGFwbGljYefjbyBxdWUgZXNjcmV2ZSBtdWl0bywgbXVpdG8NCityYXBpZGFtZW50ZS48YnI+DQorPGJyPg0KK0RJU1BNRDwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+TW9zdHJhciBvIGRlc3RhcXVlIChvcw0KK2F0cmlidXRvcykgZGUgY2FkYSBjYXJhY3RlciBkZW50cm8gZGEgZGlzcGxheSBicmFpbGxlLCBlbSB2ZXogZG9zIHBy83ByaW9zDQorY2FyYWN0ZXJlcyhvIGNvbnRl+mRvKS4gRXNzZSByZWN1cnNvIOkg+nRpbCwgcG9yIGV4ZW1wbG8sIHF1YW5kbyB2b2PqIHByZWNpc2ENCitsb2NhbGl6YXIgdW0gaXRlbSA8c3QxOlBlcnNvbk5hbWUgUHJvZHVjdElEPSJlbSBkZXN0YXF1ZS4gQW8iIHc6c3Q9Im9uIj5lbQ0KKyBkZXN0YXF1ZS4gQW88L3N0MTpQZXJzb25OYW1lPiBtb3N0cmFyIG8gY29udGX6ZG8gZGEgdGVsYSwgbyBxdWFkcm8gZGUgdGV4dG8g6Q0KK3VzYWRvICh2ZWphIGEgb3Dn428gZGUgbGluaGEgZGUgY29tYW5kbyAtdCwgbyBxdWFkcm8gZGUgdGV4dG8gZG8gYXJxdWl2byBkZQ0KK2RpcmV0aXZhIGRlIGNvbmZpZ3VyYefjbywgZSAtLXdpdGgtdGV4dC10YWJsZSBjb21vIG9w5+NvIGRlIGNvbnN0cnXn428pLiBBbw0KK21vc3RyYXIgb3MgYXRyaWJ1dG9zIGRhIHRlbGEsIGEgdGFiZWxhIGRlIGF0cmlidXRvcyDpIHVzYWRvICh2ZWphIC1hLCBvcw0KK2F0dHJpYnV0ZXMtdGFibGUgZGlyZXRpdmEgZGUgYXJxdWl2byBkZSBjb25maWd1cmHn428sIGUgLS13aXRoLWF0dHJpYnV0ZXMtdGFibGUNCitvcOfjbyBkZSBjb25zdHJ15+NvKS4gRXN0ZSByZWN1cnNvIHPzIGFmZXRhIG8gdGVybWluYWwgdmlydHVhbCBhdHVhbC48L3NwYW4+PHNwYW4NCitzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+PG86cD4mbmJzcDs8L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+U0lYRE9UUzwvc3Bhbj48c3Bhbg0KK3N0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5Nb3N0cmFyIGNhcmFjdGVyZXMgdXNhbmRvDQorNiBwb250b3MsIGFvIGludulzIGRlIDggcG9udG9zLCA8c3QxOlBlcnNvbk5hbWUgUHJvZHVjdElEPSJlbSBicmFpbGxlLiBPcyINCit3OnN0PSJvbiI+ZW0gYnJhaWxsZS4gT3M8L3N0MTpQZXJzb25OYW1lPiBwb250b3MgNyBlIDggYWluZGEgc+NvIHVzYWRvcyBwb3INCitvdXRyYXMgY2FyYWN0ZXLtc3RpY2FzIGNvbW8gYSByZXByZXNlbnRh5+NvIGRvIGN1cnNvciBlIGVuZmF0aXphbmRvIG8gY2Fy4WN0ZXINCityZWFs52Fkby4gU2UgdW1hIHRhYmVsYSBkZSBjb250cmHn428gZm9pIHNlbGVjaW9uYWRhICh2ZWphIGEgb3Dn428gLWMgZSBkYQ0KK3RhYmVsYSBkZSBjb250cmHn428gZGFzIGRpcmV0aXZhcyBkZSBjb25maWd1cmHn428gZGUgYXJxdWl2byksIGVudONvIGVsZSDpDQordXNhZG8uIEVzdGEgY29uZmlndXJh5+NvIHRhbWLpbSBwb2RlIHNlciBhbHRlcmFkYSBjb20gYSBwcmVmZXLqbmNpYSBkbyBlc3RpbG8NCitkZSB0ZXh0by48L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPjxicj4NCitTTElERVdJTjwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+U2UgbyBjb250cm9sZSBkZSBjdXJzb3INCisodmVqYSBvIGNvbWFuZG8gQ1NSVFJLKSBlc3ThIG9uLCBlbnTjbywgc2VtcHJlIHF1ZSBvIGN1cnNvciBtb3ZlLXNlIG11aXRvIHBlcnRvDQorKG91IG1haXMpIG91IG91dHJhIGV4dHJlbWlkYWRlIGRhIGphbmVsYSBkbyBicmFpbGxlLCByZXBvc2ljaW9uYXINCitob3Jpem9udGFsbWVudGUgYSBqYW5lbGEgZGUgdGFsIGZvcm1hIHF1ZSBvIGN1cnNvciwgbWFudGVuZG8tc2UgbmVzc2UgbGFkbywNCitlc3ThIG1haXMgcHLzeGltbyBkYSBjZW50cm8uIFNlIGVzdGUgcmVjdXJzbyBlc3ThIG9mZiBhIGphbmVsYSBicmFpbGxlIGVzdOENCitzZW1wcmUgcG9zaWNpb25hZG8gZGUgbW9kbyBxdWUgc3VhIGV4dHJlbWlkYWRlIGVzcXVlcmRhIOkgdW0gbfpsdGlwbG8gZGUgc3VhDQorbGFyZ3VyYSBkYSBib3JkYSBlc3F1ZXJkYSBkYSB0ZWxhLiBFc3RhIGNvbmZpZ3VyYefjbyB0YW1i6W0gcG9kZSBzZXIgYWx0ZXJhZGENCitjb20gYSBwcmVmZXLqbmNpYSBTbGlkaW5nIFdpbmRvdy48L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzOw0KK21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPjxicj4NCitTS1BJRExOUzwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+QW8gaW526XMgZGUgbW92ZXIgZXhhdGFtZW50ZQ0KK3VtYSBsaW5oYSBwYXJhIGNpbWEgb3UgcGFyYSBiYWl4bywgc2FsdGEgbGluaGFzIGFudGVyaW9yZXMsIHF1ZSB06m0gbyBtZXNtbw0KK2NvbnRl+mRvIGRhIGxpbmhhIGF0dWFsLiBFc3RhIGNhcmFjdGVy7XN0aWNhIGFmZXRhIG8gY29tYW5kb3MgTE5VUC9MTkROLCBiZW0NCitjb21vIG8gcmVjdXJzbyBkZSBsaW5oYSBkZSBlbWJhbGFnZW0gZGUgRldJTlJUL0ZXSU5MVCBlIG8gY29tYW5kbw0KK0ZXSU5MVFNLSVAvRldJTlJUU0tJUC4gRXN0YSBjb25maWd1cmHn428gdGFtYultIHBvZGUgc2VyIGFsdGVyYWRhIGNvbSBhDQorcHJlZmVy6m5jaWEgU2tpcCBJZGVudGljYWwgTGluZXMuPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczsNCittc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz48YnI+DQorU0tQQkxOS1dJTlM8L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPlB1bGFyIGphbmVsYXMgZW0gYnJhbmNvDQorZHVyYW50ZSBhIGxlaXR1cmEgcGFyYSBmcmVudGUgb3UgcGFyYSB0cuFzLiBFc3RlIHJlY3Vyc28gYWZldGEgb3MgY29tYW5kb3MNCitGV0lOTFQvRldJTlJULiBFc3RhIGNvbmZpZ3VyYefjbyB0YW1i6W0gcG9kZSBzZXIgYWx0ZXJhZGEgY29tIGEgcHJlZmVy6m5jaWENCitTa2lwIEJsYW5rIFdpbmRvd3MuPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToNCisiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz48YnI+DQorQ1NSVklTPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5Nb3N0cmFyIG8gY3Vyc29yIHBlbGENCitzdXBlcnBvc2nn428gZGUgdW0gcG9udG8gcGFkcuNvICh2ZWphIG8gY29tYW5kbyBDU1JTSVpFKSBlbSBjaW1hIGRvIGNhcmFjdGVyDQorb25kZSBlbGEgZXN04S4gRXN0ZSByZWN1cnNvIGVzdOEgaW5pY2lhbG1lbnRlIG9uLiBFc3RhIGNvbmZpZ3VyYefjbyB0YW1i6W0gcG9kZQ0KK3NlciBhbHRlcmFkYSBjb20gYSBwcmVmZXLqbmNpYSBkbyBNb3N0cmFyIEN1cnNvci48YnI+DQorPGJyPg0KK0NTUkhJREU8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5PY3VsdGFyIG8gY3Vyc29yICh2ZWphIG8NCitjb21hbmRvIENTUlZJUyksIGEgZmltIGRlIGxlciBleGF0YW1lbnRlIG8gY2FyYWN0ZXIgYWJhaXhvIGRlbGEuIEVzdGUgcmVjdXJzbw0KK3PzIGFmZXRhIG8gdGVybWluYWwgYXR1YWwgdmk8YnI+DQorPGJyPg0KK0NTUlRSSzwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+VmVzdO1naW8oc2VndWlyKSBkbw0KK2N1cnNvci4gU2UgbyBjdXJzb3Igc2UgbW92ZSBwYXJhIHVtIGxvY2FsIHF1ZSBu428gc2VqYSBkZW50cm8gZGEgamFuZWxhIGRvIGJyYWlsbGUsDQorZW50428gYXV0b21hdGljYW1lbnRlIG1vdmUgYSBqYW5lbGEgZGUgYnJhaWxsZSBwYXJhIGEgbm92YSBsb2NhbGl6YefjbyBkbw0KK2N1cnNvci4gVm9j6iBnZXJhbG1lbnRlIHF1ZXIgZXN0ZSByZWN1cnNvIGF0aXZhZG8sIHVtYSB2ZXogcXVlIG1pbmltaXphIG9zDQorZWZlaXRvcyBkZSByb2xhZ2VtIGRhIHRlbGEsIGUgdW1hIHZleiBxdWUsIGR1cmFudGUgYSBlbnRyYWRhLCBhIHJlZ2njbyBvbmRlDQordm9j6iBlc3ThIGF0dWFsbWVudGUgZXNjcmV2ZW5kbyBzZW1wcmUg6SB2aXPtdmVsLiBTZSBlc3RlIHJlY3Vyc28gZmF6IGNvbSBxdWUgYQ0KK2phbmVsYSBkZSBicmFpbGxlIHNhbHRlIGVtIHVtIG1vbWVudG8gaW5vcG9ydHVubywgdXNlIG8gY29tYW5kbyBCQUNLIHBhcmENCit2b2x0YXIgcGFyYSBvbmRlIHZvY+ogZXN0YXZhIGxlbmRvLiBUYWx2ZXogc2VqYSBuZWNlc3PhcmlvIGRlc2F0aXZhciBlc3NlDQorcmVjdXJzbyBhbyB1c2FyIHVtIGFwbGljYXRpdm8gcXVlIGF0dWFsaXphIGNvbnRpbnVhbWVudGUgYSB0ZWxhLCBtYW50ZW5kbyB1bQ0KK2xheW91dCBkZSBkYWRvcyBmaXhvLiBFc3RlIHJlY3Vyc28gZXN04SBpbmljaWFsbWVudGUgbGlnYWRvLiBFc3RlIHJlY3Vyc28gc/MNCithZmV0YSBvIHRlcm1pbmFsIHZpcnR1YWwgYXR1YWwuPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczsNCittc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz48YnI+DQorQ1NSU0laRTwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+UmVwcmVzZW50YSBvIGN1cnNvIGNvbSBvcw0KK29pdG8gcG9udG8odW0gYmxvY28gc/NsaWRvKSwgZSBu428gYXBlbmFzIGNvbSBvcyBwb250b3MgNyBlIDggKHVtIHN1YmxpbmhhZG8pLg0KK0VzdGEgY29uZmlndXJh5+NvIHRhbWLpbSBwb2RlIHNlciBtdWRhZGEgY29tIGEgcHJlZmVy6m5jaWEgZG8gQ3Vyc28gU3R5bGUuPC9zcGFuPjxzcGFuDQorc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPjxicj4NCitDU1JCTElOSzwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+UGlzY2EobGlnYSBlIGRlc2xpZ2EgZGUNCithY29yZG8gY29tIHVtIGludGVydmFsbyBwcuktZGVmaW5pZG8pIG8gc+1tYm9sbyBxdWUgcmVwcmVzZW50YSBvIGN1cnNvcih2ZWphIG8NCitjb21hbmRvIENTUlZJUykuIEVzdGEgY29uZmlndXJh5+NvIHRhbWLpbSBwb2RlIHNlciBtdWRhZGEgY29tIGEgcHJlZmVy6m5jaWEgZG8NCitCbGlua2luZyBDdXJzb3IuPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToNCisiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz48YnI+DQorQVRUUlZJUzwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dCBzdHlsZT0ndGV4dC1pbmRlbnQ6MzUuNHB0Jz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+U3VibGluaGFkbyhjb20NCitjb21iaW5h5/VlcyBkb3MgcG9udG9zIDcgZSA4KSBvIGNhcmFjdGVyIGRlc3RhY2Fkby48L3NwYW4+PHNwYW4NCitzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dCBzdHlsZT0ndGV4dC1pbmRlbnQ6MzUuNHB0Jz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+PG86cD4mbmJzcDs8L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dCBzdHlsZT0nbWFyZ2luLWxlZnQ6MzUuNHB0Jz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+U2VtDQorc3VibGluaGFkbzwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dCBzdHlsZT0nbWFyZ2luLWxlZnQ6MzUuNHB0Jz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+QnJhbmNvDQorc29icmUgcHJldG8obm9ybWFsKSxjaW56YSBzb2JyZSBwcmV0bywgYnJhbmNvIHNvYnJlIGF6dWwsIHByZXRvIHNvYnJlIGNpbnphLjwvc3Bhbj48c3Bhbg0KK3N0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0IHN0eWxlPSd0ZXh0LWluZGVudDozNS40cHQnPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5Qb250b3MNCis3IG91IDg8L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQgc3R5bGU9J3RleHQtaW5kZW50OjM1LjRwdCc+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPlByZXRvDQorc29icmUgYnJhbmNvICh27WRlbyByZXZlcnNvKS48L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5Og0KKyJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQgc3R5bGU9J3RleHQtaW5kZW50OjM1LjRwdCc+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPlBpbm8NCis4PC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0IHN0eWxlPSd0ZXh0LWluZGVudDozNS40cHQnPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5Ub2RvDQorbyByZXN0by48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0IHN0eWxlPSdtYXJnaW4tbGVmdDoyNy4wcHQnPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5Fc3RhDQorY29uZmlndXJh5+NvIHRhbWLpbSBwb2RlIHNlciBtdWRhZGEgY29tIGEgcHJlZmVy6m5jaWEgZG8gTW9zdHJhciBBdHJpYnV0b3MuPG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+PG86cD4mbmJzcDs8L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+QVRUUkJMSU5LPC9zcGFuPjxzcGFuDQorc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPlBpc2NhKG11ZGEgZGUgbGlnYWRvIGUNCitkZXNsaWdhZG8gZGUgYWNvcmRvIGNvbSBvIGludGVydmFsbyBwcmVkZWZpbmlkbykgbyBhdHJpYnV0byBzdWJsaW5oYWRvKHZlamEgbw0KK2NvbWFuZG8gQVRUUlZJUykuIEVzdGUgcmVjdXJzbyBlc3RhIGluaWNpYWxtZW50ZSBsaWdhZG8uIEVzdGEgY29uZmlndXJh5+NvDQordGFtYultIHBvZGUgc2VyIG11ZGFkYSBjb20gYSBwcmVmZXLqbmNpYSBkbyBCbGlua2luZyBBdHRyaWJ1dGVzLjwvc3Bhbj48c3Bhbg0KK3N0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5DQVBCTElOSzwvc3Bhbj48c3Bhbg0KK3N0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5QaXNjYShsaWdhIGUgZGVzbGlnYSBkZQ0KK2Fjb3JkbyBjb20gdW0gaW50ZXJ2YWxvIHBy6S1kZWZpbmlkbykgYSBsZXRyYSBtYWn6c2N1bGEuIEVzdGEgY29uZmlndXJh5+NvDQordGFtYultIHBvZGUgc2VyIG11ZGFkYSBjb20gYSBwcmVmZXLqbmNpYSBkbyBCbGlua2luZyBDYXBpdGFscy48L3NwYW4+PHNwYW4NCitzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dCBzdHlsZT0nbWFyZ2luLWxlZnQ6MjcuMHB0Jz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+PG86cD4mbmJzcDs8L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+VFVORVM8L3NwYW4+PHNwYW4NCitzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+VG9jYXIgdW1hIG1lbG9kaWEgY3VydGENCitwcuktZGVmaW5pZGFzICh2ZXIgQWxlcnQgVHVuZXMpIHNlbXByZSBxdWUgb2NvcnJhIHVtIGV2ZW50byBzaWduaWZpY2F0aXZvLiBFc3RlDQorcmVjdXJzbyBlc3RhIGluaWNpYWxtZW50ZSBsaWdhZG8uIEVzdGEgY29uZmlndXJh5+NvIHRhbWLpbSBwb2RlIHNlciBhbHRlcmFkYQ0KK2NvbSBhIHByZWZlcupuY2lhIEFsZXJ0YSBkZSBUdW5lcy48L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzOw0KK21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPkF1dG9SZXBlYXQ8L3NwYW4+PHNwYW4NCitzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+QXV0b21hdGljYW1lbnRlIHJlcGV0ZSB1bQ0KK2NvbWFuZG8gZW0gdW0gaW50ZXJ2YWxvIHJlZ3VsYXIgYXDzcyB1bSBhdHJhc28gaW5pY2lhbCBlbnF1YW50byBhIHN1YSBjaGF2ZQ0KKyhjb21iaW5h5+NvKSBjb250aW51YSBwcmVzc2lvbmFkYS4gQXBlbmFzIGFsZ3VucyBkcml2ZXJzIHN1cG9ydGFtIGVzdGENCitmdW5jaW9uYWxpZGFkZSwgYSBwcmluY2lwYWwgbGltaXRh5+NvIOkgcXVlIG11aXRvcyBkaXNwbGF5IGJyYWlsbGUgbuNvDQorc2luYWxpemFtIHRlY2xhcyBhcGVydGFkYXMgZSB0ZWNsYXMgbGliZXJhZGFzIGNvbW8gZXZlbnRvcyBzZXBhcmFkb3MNCitkaXN0aW50YW1lbnRlLiBFc3RlIHJlY3Vyc28gZXN0YSBpbmljaWFsbWVudGUgbGlnYWRvLiBFc3RhIGNvbmZpZ3VyYefjbyB0YW1i6W0NCitwb2RlIHNlciBhbHRlcmFkYSBjb20gYSBwcmVmZXLqbmNpYSBkZSBBdXRvcmVwZXRp5+NvLjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPkFVVE9TUEVBSzwvc3Bhbj48c3Bhbg0KK3N0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5BdXRvbWF0aWNhbWVudGUgZmFsYXI6PC9zcGFuPjxzcGFuDQorc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQgc3R5bGU9J21hcmdpbi1sZWZ0OjM2LjBwdDt0ZXh0LWluZGVudDotMTguMHB0O21zby1saXN0Og0KK2wxMyBsZXZlbDEgbGZvNzt0YWItc3RvcHM6bGlzdCAzNi4wcHQnPjwhW2lmICFzdXBwb3J0TGlzdHNdPjxzcGFuDQorc3R5bGU9J2ZvbnQtZmFtaWx5OldpbmdkaW5nczttc28tZmFyZWFzdC1mb250LWZhbWlseTpXaW5nZGluZ3M7bXNvLWJpZGktZm9udC1mYW1pbHk6DQorV2luZ2RpbmdzJz48c3BhbiBzdHlsZT0nbXNvLWxpc3Q6SWdub3JlJz6nPHNwYW4gc3R5bGU9J2ZvbnQ6Ny4wcHQgIlRpbWVzIE5ldyBSb21hbiInPiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOw0KKzwvc3Bhbj48L3NwYW4+PC9zcGFuPjwhW2VuZGlmXT48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+QSBub3ZhIGxpbmhhDQorcXVhbmRvIGEgamFuZWxhIGJyYWlsbGUg6SBtb3ZpZGEgdmVydGljYWxtZW50ZS48L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5Og0KK1RpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQgc3R5bGU9J21hcmdpbi1sZWZ0OjM2LjBwdDt0ZXh0LWluZGVudDotMTguMHB0O21zby1saXN0Og0KK2wxMyBsZXZlbDEgbGZvNzt0YWItc3RvcHM6bGlzdCAzNi4wcHQnPjwhW2lmICFzdXBwb3J0TGlzdHNdPjxzcGFuDQorc3R5bGU9J2ZvbnQtZmFtaWx5OldpbmdkaW5nczttc28tZmFyZWFzdC1mb250LWZhbWlseTpXaW5nZGluZ3M7bXNvLWJpZGktZm9udC1mYW1pbHk6DQorV2luZ2RpbmdzJz48c3BhbiBzdHlsZT0nbXNvLWxpc3Q6SWdub3JlJz6nPHNwYW4gc3R5bGU9J2ZvbnQ6Ny4wcHQgIlRpbWVzIE5ldyBSb21hbiInPiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOw0KKzwvc3Bhbj48L3NwYW4+PC9zcGFuPjwhW2VuZGlmXT48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+Y2FyYWN0ZXJlcyBxdWUNCitz428gaW5zZXJpZG9zIG91IGV4Y2x17WRvcy48L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5Og0KKyJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQgc3R5bGU9J21hcmdpbi1sZWZ0OjM2LjBwdDt0ZXh0LWluZGVudDotMTguMHB0O21zby1saXN0Og0KK2wxMyBsZXZlbDEgbGZvNzt0YWItc3RvcHM6bGlzdCAzNi4wcHQnPjwhW2lmICFzdXBwb3J0TGlzdHNdPjxzcGFuDQorc3R5bGU9J2ZvbnQtZmFtaWx5OldpbmdkaW5nczttc28tZmFyZWFzdC1mb250LWZhbWlseTpXaW5nZGluZ3M7bXNvLWJpZGktZm9udC1mYW1pbHk6DQorV2luZ2RpbmdzJz48c3BhbiBzdHlsZT0nbXNvLWxpc3Q6SWdub3JlJz6nPHNwYW4gc3R5bGU9J2ZvbnQ6Ny4wcHQgIlRpbWVzIE5ldyBSb21hbiInPiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOw0KKzwvc3Bhbj48L3NwYW4+PC9zcGFuPjwhW2VuZGlmXT48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+TyBjYXJhY3RlciBhbw0KK3F1YWwgbyBjdXJzb3Ig6SBtb3ZpZG8uPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToNCisiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5Fc3RlIHJlY3Vyc28gZXN0YQ0KK2luaWNpYWxtZW50ZSBkZXNsaWdhZG8uIEVzdGEgY29uZmlndXJh5+NvIHRhbWLpbSBwb2RlIHNlciBhbHRlcmFkYSBjb20gYQ0KK3ByZWZlcupuY2lhIGRlIEF1dG8tRmFsYS48L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5Og0KKyJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPjxicj4NCis0LjEuNSBNb2RvIGRlIFNlbGXn4288YnI+DQorPGJyPg0KK0hFTFA8L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPkFsdGVybmUgcGFyYSBhIHDhZ2luYSBkZQ0KK2FqdWRhIGRvIGRpc3BsYXkgYnJhaWxsZS4gSXN0byDpIG9uZGUgdm9j6iBwb2RlIGVuY29udHJhciB1bSByZXN1bW8gb24tbGluZSBkYXMNCitjb2lzYXMgcXVlIGFzIHRlY2xhcyBkbyBzZXUgZGlzcGxheSBicmFpbGxlIGZhemVtLCBlIGNvbW8gaW50ZXJwcmV0YXIgbyBzdGF0dXMNCitkYXMgY+lsdWxhcy4gVXNlIG9zIGNvbWFuZG9zIHJlZ3VsYXIgZGUgbW92aW1lbnRvIHZlcnRpY2FsIGUgaG9yaXpvbnRhbCBwYXJhDQorbmF2ZWdhciBwZWxhIHDhZ2luYSBkZSBhanVkYS4gQ2hhbWUgbyBjb21hbmRvIGRlIGFqdWRhIG5vdmFtZW50ZSBwYXJhIHZvbHRhcg0KK3BhcmEgYSB0ZWxhLjwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+PGJyPg0KK0lORk88L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPkFsdGVybmUgcGFyYSBhIGV4aWJp5+NvIGRlDQorc3RhdHVzICh2ZXIgc2Xn428gVGhlIFN0YXR1cyBEaXNwbGF5IHBhcmEgbWFpcyBkZXRhbGhlcykuIEVsZSBhcHJlc2VudGEgdW0NCityZXN1bW8gY29tIGEgcG9zaefjbyBkbyBjdXJzb3IsIGEgcG9zaefjbyBkYSBqYW5lbGEgYnJhaWxsZSwgZSBvcyBlc3RhZG9zIGRlDQordW1hIHPpcmllIGRlIGNhcmFjdGVy7XN0aWNhcyBkbyBCUkxUVFkuIENoYW1lIGVzdGUgY29tYW5kbyBub3ZhbWVudGUgcGFyYQ0KK3ZvbHRhciBwYXJhIGEgdGVsYS48L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5Og0KKyJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gbGFuZz1FTi1VUyBzdHlsZT0nbXNvLWFuc2ktbGFuZ3VhZ2U6RU4tVVMnPjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPkxFQVJOPC9zcGFuPjxzcGFuDQorc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPkFsdGVybmFyIHBhcmEgbyBtb2RvIGRlDQorY29tYW5kbyBhcHJlbmRlciAodmVyIHNl5+NvIENvbW1hbmQgTGVhcm4gTW9kZSBwYXJhIG1haXMgZGV0YWxoZXMpLiBJc3RvIOkgY29tbw0KK3ZvY+ogcG9kZSBhcHJlbmRlciBkZSBmb3JtYSBpbnRlcmF0aXZhIG8gcXVlIGFzIHRlY2xhcyBkbyBzZXUgZGlzcGxheSBicmFpbGxlDQorZmF6ZW0uIENoYW1hciBlc3RlIGNvbWFuZG8gbm92YW1lbnRlIHBhcmEgdm9sdGFyIHBhcmEgYSB0ZWxhLiBFc3RlIGNvbWFuZG8gbuNvDQorZXN0YXLhIGRpc3Bvbu12ZWwgc2UgYSBvcOfjbyAtLWRpc2FibGUtbGVhcm4tbW9kZSBmb2kgZXNwZWNpZmljYWRhIG5hIG9w5+NvIGRlDQorY29uc3Rydefjby48L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQgc3R5bGU9J21hcmdpbi1sZWZ0OjM2LjBwdDt0ZXh0LWluZGVudDotMzYuMHB0O21zby1saXN0Og0KK2wzIGxldmVsMyBsZm84O3RhYi1zdG9wczpsaXN0IDM2LjBwdCc+PCFbaWYgIXN1cHBvcnRMaXN0c10+PHNwYW4NCitzdHlsZT0nZm9udC1zaXplOjExLjBwdDttc28tZmFyZWFzdC1mb250LWZhbWlseToiQ291cmllciBOZXciJz48c3Bhbg0KK3N0eWxlPSdtc28tbGlzdDpJZ25vcmUnPjQuMS42PHNwYW4gc3R5bGU9J2ZvbnQ6Ny4wcHQgIlRpbWVzIE5ldyBSb21hbiInPiZuYnNwOyA8L3NwYW4+PC9zcGFuPjwvc3Bhbj48IVtlbmRpZl0+PHNwYW4NCitzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+UHJlZmVyZW5jaWFzIGRlIE1hbnV0ZW7n4288bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5QUkVGTUVOVTxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+RXNjb2xoYSBkbyBtZW51IGRlIHByZWZlcupuY2lhcyAoVmVyIE1lbnUgUHJlZmVy6m5jaWFzKS4NCitDaGFtYSBlc3NlIGNvbWFuZG8gZGUgbm92byBwYXJhIHJldG9ybmFyIGFzIG9wZXJh5/VlcyBub3JtYWlzLjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PG86cD4mbmJzcDs8L286cD48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PlBSRUZTQVZFPC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD5TYWx2YSBhcyBjb25maWd1cmHn9WVzIGRlIHByZWZlcupuY2lhcyBhdHVhaXMgKFZlcg0KK1ByZWZlcupuY2lhcykuPC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48bzpwPiZuYnNwOzwvbzpwPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+UFJFRkxPQUQ8L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PkFybWF6ZW5hIGFzIGNvbmZpZ3VyYef1ZXMgZGUgcHJlZmVy6m5jaWFzIG1haXMgcmVjZW50ZXMNCisoVmVyIFByZWZlcmVuY2lhcykuPC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+PGJyPg0KKzQuMS43IE1lbnUgZGUgTmF2ZWdh5+NvPGJyPg0KKzxicj4NCitNRU5VX0ZJUlNUX0lURU0vTUVOVV9MQVNUX0lURU08L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5Og0KKyJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPklyIHBhcmEgbyBwcmltZWlyby/6bHRpbW8NCitpdGVtIG5vIG1lbnUuPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz48YnI+DQorTUVOVV9QUkVWX0lURU0vTUVOVV9ORVhUX0lURU08L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5Og0KKyJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPklyIHBhcmEgbw0KK2FudGVyaW9yL3NlZ3VpbnRlIGl0ZW0gbm8gbWVudS48L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzOw0KK21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gbGFuZz1FTi1VUyBzdHlsZT0nZm9udC1zaXplOjExLjBwdDttc28tYW5zaS1sYW5ndWFnZToNCitFTi1VUyc+PGJyPg0KK01FTlVfUFJFVl9TRVRUSU5HL01FTlVfTkVYVF9TRVRUSU5HPC9zcGFuPjxzcGFuIGxhbmc9RU4tVVMgc3R5bGU9J2ZvbnQtZmFtaWx5Og0KK1RpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyI7bXNvLWFuc2ktbGFuZ3VhZ2U6RU4tVVMnPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPlJldHJvY2VkZXIvRXhwYW5kaXIgbw0KK2F0dWFsIGl0ZW0gZG8gbWVudS48L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5Og0KKyJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPjxicj4NCis0LjEuOCBDb250cm9sZXMgZGUgRmFsYTxicj4NCis8YnI+DQorU0FZX0xJTkU8L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPkZhbGEgYSBsaW5oYSBhdHVhbC4gQQ0KK3ByZWZlcupuY2lhIGRvIFNheS1MaW5lIE1vZGUgZGV0ZXJtaW5hIHNlIGZhbGEgcGVuZGVudGUg6SBkZXNjYXJ0YWRhIGVtDQorcHJpbWVpcm8gbHVnYXIuPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz48YnI+DQorU0FZX0FCT1ZFPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5GYWxlIGEgcGFydGUgc3VwZXJpb3IgZGENCit0ZWxhICh0ZXJtaW5hIGNvbSBhIGxpbmhhIGF0dWFsKS48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBsYW5nPUVOLVVTIHN0eWxlPSdtc28tYW5zaS1sYW5ndWFnZTpFTi1VUyc+PG86cD4mbmJzcDs8L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+U0FZX0JFTE9XPC9zcGFuPjxzcGFuDQorc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPkZhbGUgYSBwYXJ0ZSBpbmZlcmlvciBkYQ0KK3RlbGEgKGNvbWXnYW5kbyBjb20gYSBsaW5oYSBhdHVhbCkuPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczsNCittc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz48YnI+DQorTVVURTwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+UGFyZSBkZSBmYWxhcg0KK2ltZWRpYXRhbWVudGUuPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz48YnI+DQorU1BLSE9NRTwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+VuEgcGFyYSBvbmRlIG8gY3Vyc29yDQorZmFsYS48L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPjxicj4NCitTQVlfU0xPV0VSL1NBWV9GQVNURVI8L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5Og0KKyJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPkF1bWVudGFyL2RpbWludWlyIGENCit2ZWxvY2lkYWRlIGRlIGxlaXR1cmEgKHZlciB0YW1i6W0gYSBwcmVmZXLqbmNpYSBkZSBTcGVlY2ggUmF0ZSkuIEVzdGUgY29tYW5kbw0KK3PzIGVzdOEgZGlzcG9u7XZlbCBzZSB1bSBkcml2ZXIgcXVlIHN1cG9ydGEgZWxlIGVzdOEgc2VuZG8gdXNhZG8uPC9zcGFuPjxzcGFuDQorc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPjxicj4NCitTQVlfU09GVEVSL1NBWV9MT1VERVI8L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5Og0KKyJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPkF1bWVudGFyL2RpbWludWlyIG8gdm9sdW1lDQorZGEgdm96ICh2ZXIgdGFtYultIGEgcHJlZmVy6m5jaWEgZGUgU3BlZWNoIFZvbHVtZSkuIEVzdGUgY29tYW5kbyBz8yBlc3ThDQorZGlzcG9u7XZlbCBzZSB1bSBkcml2ZXIgcXVlIHN1cG9ydGEgZWxlIGVzdOEgc2VuZG8gdXNhZG8uPC9zcGFuPjxzcGFuDQorc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPjxicj4NCis0LjEuOSBDb211dGHn428gZG8gVGVybWluYWwgVmlydHVhbDxiciBzdHlsZT0nbXNvLXNwZWNpYWwtY2hhcmFjdGVyOmxpbmUtYnJlYWsnPg0KKzwhW2lmICFzdXBwb3J0TGluZUJyZWFrTmV3TGluZV0+PGJyIHN0eWxlPSdtc28tc3BlY2lhbC1jaGFyYWN0ZXI6bGluZS1icmVhayc+DQorPCFbZW5kaWZdPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPlZlamEgdGFtYultIFNXSVRDSFZUDQorZW5jYW1pbmhhbWVudG8gZGUgdGVjbGFzIGRlIGNvbWFuZG8uPGJyPg0KKzxicj4NCitTV0lUQ0hWVF9QUkVWL1NXSVRDSFZUX05FWFQ8L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5Og0KKyJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPk11ZGUgcGFyYSBvDQorYW50ZXJpb3IvcHLzeGltbyB0ZXJtaW5hbCB2aXJ0dWFsLjwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7DQorbXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+PGJyPg0KKzQuMS4xMCBPdXRyb3MgQ29tYW5kb3M8YnI+DQorPGJyPg0KK0NTUkpNUF9WRVJUPGJyPg0KKyZuYnNwOyZuYnNwOyZuYnNwOyAmbmJzcDsmbmJzcDsmbmJzcDsgPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczsNCittc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48YnI+DQorPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5FbmNhbWluaGEgKHRyYXplcikgbyBjdXJzb3IgcGFyYSBxdWFscXVlcg0KK2x1Z2FyIG5hIGxpbmhhIGRlIGNpbWEgZGEgamFuZWxhIGRvIGJyYWlsbGUgKHZlciBSb3RlYW1lbnRvIGRlIEN1cnNvcikuIE8NCitjdXJzb3Ig6SBtb3ZpZG8gcG9yIHVtYSBzaW11bGHn428gdmVydGljYWwgZGFzIHRlY2xhcyBkZSBzZXRhIHByZXNzaW9uYWRhcy4NCitFc3RlIGNvbWFuZG8gbmVtIHNlbXByZSBmdW5jaW9uYSwgcG9ycXVlIGFsZ3VucyBhcGxpY2F0aXZvcyBvdSBtb3ZlIG8gY3Vyc29yIHVtDQorcG91Y28gaW1wcmV2aXPtdmVsIG91IHVzZSBhcyB0ZWNsYXMgZGUgc2V0YSBwYXJhIG91dHJvcyBmaW5zIHF1ZSBu428gbw0KK21vdmltZW50byBkbyBjdXJzb3IuIMkgdW0gcG91Y28gbWFpcyBzZWd1cm8gZG8gcXVlIG91dHJvcyBjb21hbmRvcyBkZQ0KK3JvdGVhbWVudG8gZG8gY3Vyc29yLCBwb3LpbSwgcG9ycXVlIG7jbyBmYXogbmVuaHVtYSB0ZW50YXRpdmEgZGUgc2ltdWxhciBhcw0KK3NldGFzIGRhIGVzcXVlcmRhIGUgZGlyZWl0YS48YnIgc3R5bGU9J21zby1zcGVjaWFsLWNoYXJhY3RlcjpsaW5lLWJyZWFrJz4NCis8IVtpZiAhc3VwcG9ydExpbmVCcmVha05ld0xpbmVdPjxiciBzdHlsZT0nbXNvLXNwZWNpYWwtY2hhcmFjdGVyOmxpbmUtYnJlYWsnPg0KKzwhW2VuZGlmXT48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5QQVNURTxicj4NCis8L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxicj4NCis8L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPkluc2lyYSBvcyBjYXJhY3RlcmVzIG5vIGJ1ZmZlciBkZSBjb3J0ZQ0KK25hIHBvc2nn428gYXR1YWwgZG8gY3Vyc29yICh2ZXIgQ29waWFyIGUgQ29sYXIpLjxicj4NCis8YnI+DQorUkVTVEFSVEJSTDxicj4NCis8L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxicj4NCis8L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPlBhcmUgZSByZWluaWNpZSBvIGNvbnRyb2xhZG9yIGRlDQordmlzdWFsaXph5+NvIDxzdDE6UGVyc29uTmFtZSBQcm9kdWN0SUQ9ImVtIEJyYWlsbGUuJiM2NTUzMjsmIzY1NTMyO1JFU1RBUlRTUEVFQ0gmIzY1NTMyOyYjNjU1MzI7UGFyZSINCit3OnN0PSJvbiI+ZW0gQnJhaWxsZS48YnI+DQorIDxicj4NCisgUkVTVEFSVFNQRUVDSDxicj4NCisgPHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQ7Zm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PGJyPg0KKyA8L3NwYW4+UGFyZTwvc3QxOlBlcnNvbk5hbWU+IGUgcmVpbmljaWUgbyBjb250cm9sYWRvciBkZSBzaW50ZXRpemFkb3IgZGUgdm96Ljxicj4NCis8YnI+DQorNC4xLjExIENvbWFuZG9zIGRlIENhcuFjdGVyPGJyPg0KKzxicj4NCitST1VURTxicj4NCis8L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxicj4NCis8L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPkVuY2FtaW5oYSAodHJhemVyKSBvIGN1cnNvciBwYXJhIG8NCitjYXJhY3RlcmUgYXNzb2NpYWRvIGEgdGVjbGEgZGUgcm90ZWFtZW50byAodmVyIFJvdGVhbWVudG8gZGUgQ3Vyc29yKS4gTyBjdXJzb3INCivpIG1vdmlkbyBwb3IgdW1hIHNpbXVsYefjbyBkYXMgdGVjbGFzIGRlIHNldGEgcHJlc3Npb25hZGFzLiBFc3RlIGNvbWFuZG8gbmVtDQorc2VtcHJlIGZ1bmNpb25hLCBwb3JxdWUgYWxndW5zIGFwbGljYXRpdm9zIG91IG1vdmUgbyBjdXJzb3IgdW0gcG91Y28NCitpbXByZXZpc+12ZWwgb3UgdXNlIGFzIHRlY2xhcyBkZSBzZXRhIHBhcmEgb3V0cm9zIGZpbnMgcXVlIG7jbyBvIG1vdmltZW50byBkbw0KK2N1cnNvci48YnI+DQorPGJyPg0KK0NVVEJFR0lOPG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+QXBvaWEtc2Ugbm8gaW7tY2lvIGRvDQorYmxvY28gZGUgY29ydGUgcGFyYSBvIGNhcmFjdGVyIGFzc29jaWFkbyBjb20gYSB0ZWNsYSBkZSByb3RlYW1lbnRvICh2ZXIgQ29waWFyDQorZSBDb2xhcikuIEVzdGUgY29tYW5kbyBsaW1wYSBvIGJ1ZmZlciBkZSBjb3J0ZS48L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5Og0KK1RpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPjxicj4NCitDVVRBUFBFTkQ8L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPkFwb2lhLXNlIG5vIGlu7WNpbyBkbw0KK2Jsb2NvIGRlIGNvcnRlIHBhcmEgbyBjYXLhdGVyIGFzc29jaWFkbyBjb20gYSB0ZWNsYSBkZSByb3RlYW1lbnRvICh2ZXIgQ29waWFyIGUNCitDb2xhcikuIEVzdGUgY29tYW5kbyBu428gbGltcGFyIG8gYnVmZmVyIGRlIGNvcnRlLjwvc3Bhbj48c3Bhbg0KK3N0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz48YnI+DQorQ1VUUkVDVDwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+QXBvaWEtc2Ugbm8gZmltIGRvIGJsb2NvDQorZGUgY29ydGUgcGFyYSBvIGNhcuF0ZXIgYXNzb2NpYWRvIGNvbSBhIHRlY2xhIGRlIHJvdGVhbWVudG8sIGUgYW5leGFyIGEgcmVnaeNvDQorcmV0YW5ndWxhciBwYXJhIG8gYnVmZmVyIGRlIGNvcnRlICh2ZXIgQ29waWFyIGUgQ29sYXIpLjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxvOnA+Jm5ic3A7PC9vOnA+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+Q1VUTElORTwvc3Bhbj48c3Bhbg0KK3N0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5BcG9pYS1zZSBubyBmaW0gZG8gYmxvY28NCitkZSBjb3J0ZSBwYXJhIG8gY2Fy4XRlciBhc3NvY2lhZG8gY29tIGEgdGVjbGEgZGUgcm90ZWFtZW50bywgZSBhbmV4YXIgYSByZWdp428NCitsaW5lYXIgcGFyYSBvIGJ1ZmZlciBkZSBjb3J0ZSAodmVyIENvcGlhciBlIENvbGFyKS48L3NwYW4+PHNwYW4NCitzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+PGJyPg0KK0NPUFlDSEFSUzwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+Q29waWUgbyBibG9jbyBkZSBjYXLhdGVyDQorYXBvaWFkby1zZSBwb3IgZHVhcyB0ZWNsYSBkZSByb3RlYW1lbnRvIHBhcmEgbyBidWZmZXIgZGUgY29ydGUgKHZlciBDb3BpYXIgZQ0KK0NvbGFyKS48L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPjxicj4NCitBUE5EQ0hBUlM8YnI+DQorJm5ic3A7Jm5ic3A7Jm5ic3A7IDwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6DQorIkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+QWNyZXNjZW50ZSBvIGJsb2NvIGRlDQorY2Fy4XRlciBhcG9pYW5kLXNlIHBvciBkdWFzIHRlY2xhcyBkZSByb3RlYW1lbnRvIHBhcmEgbyBidWZmZXIgZGUgY29ydGUgKHZlcg0KK0NvcGlhciBlIENvbGFyKS48YnI+DQorPGJyPg0KK1BSSU5ERU5UL05YSU5ERU5UPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToNCisiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5JciBwYXJhIGNpbWEvYmFpeG8gcGFyYSBhDQorcHLzeGltYSBsaW5oYSBxdWUgbuNvIGVzdOEgbWFpcyBhdmFu52FkbyBkbyBxdWUgYSBjb2x1bmEgYXNzb2NpYWRhIOAgdGVjbGEgZGUNCityb3RlYW1lbnRvLjwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+PGJyPg0KK0RFU0NDSEFSPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5Nb21lbnRhbmVhbWVudGUgKHZlamEgYQ0KK29w5+NvIC1NIGRlIGxpbmhhIGRlIGNvbWFuZG8pIGV4aWJpIHVtYSBtZW5zYWdlbSBkZXNjcmV2ZW5kbyBvIGNhcuF0ZXINCithc3NvY2lhZG8gY29tIGEgdGVjbGEgZGUgcm90ZWFtZW50by4gRWxhIHJldmVsYSBvcyB2YWxvcmVzIGRlY2ltYWlzIGUNCitoZXhhZGVjaW1haXMgZG8gY2FyYWN0ZXIsIGFzIGNvcmVzIGRlIHByaW1laXJvIHBsYW5vIGUgZnVuZG8sIGUsIHF1YW5kbw0KK3ByZXNlbnRlcywgYXRyaWJ1dG9zIGVzcGVjaWFpcyAoYnJpZ2h0IGUgYnJpbmspLiA8L3NwYW4+PHNwYW4gbGFuZz1FTi1VUw0KK3N0eWxlPSdmb250LXNpemU6MTEuMHB0O21zby1hbnNpLWxhbmd1YWdlOkVOLVVTJz5BIG1lbnNhZ2VtIOkgYXNzaW06PC9zcGFuPjxzcGFuDQorbGFuZz1FTi1VUyBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3IjsNCittc28tYW5zaS1sYW5ndWFnZTpFTi1VUyc+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBsYW5nPUVOLVVTIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToNCisiQ291cmllciBOZXciO21zby1hbnNpLWxhbmd1YWdlOkVOLVVTJz48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIGxhbmc9RU4tVVMgc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQ7bXNvLWFuc2ktbGFuZ3VhZ2U6DQorRU4tVVMnPmNoYXIgNjUgKDB4NDEpOiB3aGl0ZSBvbiBibGFjayBicmlnaHQgYmxpbms8L3NwYW4+PHNwYW4gbGFuZz1FTi1VUw0KK3N0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciO21zby1hbnNpLWxhbmd1YWdlOg0KK0VOLVVTJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIGxhbmc9RU4tVVMgc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQ7bXNvLWFuc2ktbGFuZ3VhZ2U6DQorRU4tVVMnPjxicj4NCitTRVRMRUZUPC9zcGFuPjxzcGFuIGxhbmc9RU4tVVMgc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5Og0KKyJDb3VyaWVyIE5ldyI7bXNvLWFuc2ktbGFuZ3VhZ2U6RU4tVVMnPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPlJlcG9zaWNpb25hDQoraG9yaXpvbnRhbG1lbnRlIGEgamFuZWxhIGJyYWlsbGUgZGUgbW9kbyBxdWUgc3VhIGJvcmRhIGVzcXVlcmRhIOkgYSBjb2x1bmENCithc3NvY2lhZGEg4CB0ZWNsYSBkZSByb3RlYW1lbnRvLiBFc3RhIGNhcmFjdGVy7XN0aWNhIHRvcm5hIG11aXRvIGbhY2lsIGNvbG9jYXINCithIGphbmVsYSBleGF0YW1lbnRlIG9uZGUgZWxhIOkgbmVjZXNz4XJpYSwgZSwgcG9yIGNvbnNlZ3VpbnRlLCBwYXJhIG1vc3RyYSBvDQorcXVlIHRlbSBhcyB0ZWNsYXMgZGUgcm90ZWFtZW50bywgcXVhc2UgZWxpbWluYSBhIG5lY2Vzc2lkYWRlIGRlIG11aXRvIG1vdmltZW50bw0KK2Z1bmRhbWVudGEgZGFqYW5lbGEgKGNvbW8gb3MgY29tYW5kb3MgQ0hSTFQvQ0hSUlQgZSBIV0lOTFQvSFdJTlJUKS48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48bzpwPiZuYnNwOzwvbzpwPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPlBSRElGQ0hBUi9OWERJRkNIQVI8L3NwYW4+PHNwYW4NCitzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+SXIgcGFyYSBjaW1hL2JhaXhvIHBhcmEgYQ0KK3By83hpbWEgZGEgbGluaGEgcXVlIHRlbSB1bSBjYXLhdGVyIGRpZmVyZW50ZSBuYSBjb2x1bmEgYXNzb2NpYWRhIOAgdGVjbGEgZGUNCityb3RlYW1lbnRvLjwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+PGJyPg0KKzQuMS4xMiBDb21hbmRvcyBkZSBTdXBvcnRlPGJyPg0KKzxicj4NCitTV0lUQ0hWVDwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+TXVkYSBwYXJhIG8gdGVybWluYWwgdmlydHVhbA0KK2N1am8gbvptZXJvIChjb250YWdlbSBhIHBhcnRpciBkZSAxKSBjb3JyZXNwb25kZSBhbyBkYSB0ZWNsYSBkZSByb3RlYW1lbnRvLg0KK1ZlamEgdGFtYultIG9zIGNvbWFuZG9zIGRlIHRyb2NhIGRlIHRlcm1pbmFsIHZpcnR1YWwNCitTV0lUQ0hWVF9QUkVWL1NXSVRDSFZUX05FWFQuPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToNCisiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz48YnI+DQorU0VUTUFSSzwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+TWFyY2FyIChsZW1icmUtc2UpLCBhDQorcG9zaefjbyBhdHVhbCBkYSBqYW5lbGEgYnJhaWxsZSBudW0gcmVnaXN0byBhc3NvY2lhZG8gY29tIGEgdGVsY2EgZGUNCityb3RlYW1lbnRvLiBWZWphIG8gY29tYW5kbyBHT1RPTUFSSy4gRXN0ZSByZWN1cnNvIHPzIGFmZXRhIG8gdGVybWluYWwgdmlydHVhbA0KK2F0dWFsLjwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+PGJyPg0KK0dPVE9NQVJLPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5Nb3ZlIGEgamFuZWxhIGJyYWlsbGUgcGFyYQ0KK2EgcG9zaefjbyBhbnRlcmlvcm1lbnRlIG1hcmNhZGEgKHZlamEgbyBjb21hbmRvIFNFVE1BUkspIGNvbSBhIG1lc21hIHRlY2xhIGRlDQorcm90ZWFtZW50by4gRXN0ZSByZWN1cnNvIHPzIGFmZXRhIG8gdGVybWluYWwgdmlydHVhbCBhdHVhbC48L3NwYW4+PHNwYW4NCitzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nbXNvLWJpZGktZm9udC1zaXplOjE4LjBwdCc+PG86cD4mbmJzcDs8L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nbXNvLWJpZGktZm9udC1zaXplOjE4LjBwdCc+NC4yIC0gQXJxdWl2b3MgZGUNCitjb25maWd1cmHn4288L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPlBhZHL1ZXMgZG8gc2lzdGVtYSBwYXJhDQorZGl2ZXJzYXMgY29uZmlndXJh5/VlcyBwb2RlbSBzZXIgZXN0YWJlbGVjaWRhcyBkZW50cm8gZGUgdW0gYXJxdWl2byBkZQ0KK2NvbmZpZ3VyYefjby4gTyBub21lIHBhZHLjbyBwYXJhIGVzdGUgYXJxdWl2byDpIC9icmx0dHkuY29uZiAvZXRjLCBlbWJvcmEgcG9zc2ENCitzZXIgc3Vic3RpdHXtZG8gY29tIGEgb3Dn428gZGUgbGluaGEgZGUgY29tYW5kbyAtZi4gRWxlIG7jbyBwcmVjaXNhIGV4aXN0aXIuIFVtDQorbW9kZWxvIHBhcmEgZWxlIHBvZGUgc2VyIGVuY29udHJhZG8gZGVudHJvIGRvIHN1YmRpcmV083JpbyBET0NTLjwvc3Bhbj48c3Bhbg0KK3N0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5BcyBsaW5oYXMgZW0gYnJhbmNvIHPjbw0KK2lnbm9yYWRhcy4gVW0gY29tZW504XJpbyBjb21l52EgY29tIHVtIHNpbmFsIG51belyaWNvICgjKSwgZSBjb250aW51YSBhdOkgbyBmaW0NCitkYSBsaW5oYS4gQXMgc2VndWludGVzIGRpcmV0aXZhcyBz428gcmVjb25oZWNpZGFzOjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIGxhbmc9RU4tVVMgc3R5bGU9J21zby1hbnNpLWxhbmd1YWdlOkVOLVVTJz48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5hcGktcGFyYW1ldGVycw0KK25hbWU9dmFsdWUsLi4uPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5Fc3BlY2lmaWNhIG9zIHBhcuJtZXRyb3MNCitwYXJhIGEgQXBwbGljYXRpb24gUHJvZ3JhbW1pbmcgSW50ZXJyZmFjZS4gU2UgbyBtZXNtbyBwYXLibWV0cm8gZm9yDQorZXNwZWNpZmljYWRvIG1haXMgZGUgdW1hIHZleiwgYSBzdWEgYXRyaWJ1aefjbyBtYWlzIGEgZGlyZWl0YSDpIHVzYWRhLiBQYXJhDQorb2J0ZXIgdW1hIGRlc2NyaefjbyBkb3MgcGFy4m1ldHJvcyBhY2VpdG9zIHBlbGEgaW50ZXJmYWNlLCBjb25zdWx0ZSBvIG1hbnVhbCBkZQ0KK3JlZmVy6m5jaWEgQnJsQVBJLiBWZWphIGFzIG9w5/VlcyBkZSBjb25zdHJ15+NvIC0td2l0aC1hcGktcGFyYW1ldGVycyBwYXJhIG9zDQorcGFkcvVlcyBlc3RhYmVsZWNpZG9zIGR1cmFudGUgbyBwcm9jZXNzbyBkZSBjb25zdHJ15+NvLiBFc3RhIGRpcmV0aXZhIHBvZGUgc2VyDQorc3Vic3RpdHXtZG8gY29tIGEgb3Dn428gZGUgbGluaGEgZGUgY29tYW5kbyAtQS48L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5Og0KK1RpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPjxicj4NCithdHRyaWJ1dGVzLXRhYmxlIGZpbGU8L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5Og0KKyJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPkVzcGVjaWZpY2EgYSB0YWJlbGEgZGUNCithdHJpYnV0b3MgKHZlciBBdHRyaWJ1dGVzIFRhYmxlcyBwYXJhIG9idGVyIGRldGFsaGVzKS4gU2UgdW0gY2FtaW5obyByZWxhdGl2bw0KK2ZvciBmb3JuZWNpZG8sIGVudONvIGVsZSBlc3ThIGFuY29yYWRvIGVtIC9ldGMgL2JybHR0eSAodmVyIGFzIG9w5/VlcyBkZQ0KK2NvbXBpbGHn428gLS13aXRoLWRhdGEtZGlyZWN0b3J5IGUgLS13aXRoLWV4ZWN1dGUtcm9vdCBwYXJhIG1haXMgZGV0YWxoZXMpLiBBDQorZXh0ZW5z428gLmF0YiDpIG9wY2lvbmFsLiBPIHBhZHLjbyDpIHVzYXIgYSB0YWJlbGEgYnVpbHQtaW4gKHZlamEgYSBvcOfjbyBkZQ0KK2NvbnN0cnXn428gLS13aXRoLWF0dHJpYnV0ZXMtdGFibGUpLiBFc3RhIGRpcmV0aXZhIHBvZGUgc2VyIHN1YnN0aXR17WRhIGNvbSBhDQorb3Dn428gZGUgbGluaGEgZGUgY29tYW5kbyAtYS48L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5Og0KKyJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPjxicj4NCiticmFpbGxlLWRldmljZSBkZXZpY2UsLi4uPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToNCisiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5Fc3BlY2lmaWNhIG8gZGlzcG9zaXRpdm8NCitwYXJhIG8gcXVhbCBvIGRpc3BsYXkgYnJhaWxsZSBlc3ThIGxpZ2FkbyAoY29uc3VsdGUgYSBzZefjbyBCcmFpbGxlIERldmljZQ0KK1NwZWNpZmljYXRpb24pLiBWZWphIGEgb3Dn428gY29uc3RydefjbyAtLXdpdGgtYnJhaWxsZS1kZXZpY2UgcGFyYSBvIHBhZHLjbw0KK2VzdGFiZWxlY2lkbyBkdXJhbnRlIG8gcHJvY2Vzc28gZGUgY29uc3Rydefjby4gRXN0YSBkaXJldGl2YSBwb2RlIHNlcg0KK3N1YnN0aXR17WRhIGNvbSBhIG9w5+NvIGRlIGxpbmhhIGRlIGNvbWFuZG8tZC48L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5Og0KK1RpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gbGFuZz1FTi1VUyBzdHlsZT0nZm9udC1zaXplOjExLjBwdDttc28tYW5zaS1sYW5ndWFnZToNCitFTi1VUyc+PGJyPg0KK2JyYWlsbGUtZHJpdmVyIGRyaXZlciwuLi58YXV0bzxicj4NCitFc3BlY2lmaWNhIG8gZHJpdmVyIGRvIGRpc3BsYXkgYnJhaWxsZSAodmVyIHNl5+NvIERyaXZlciBTcGVjaWZpY2F0aW9uKS4gPC9zcGFuPjxzcGFuDQorc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPk8gcGFkcuNvIOkgYSByZWFsaXph5+NvIGRlIGF1dG8tZGV0ZWPn428uIEVzdGENCitkaXJldGl2YSBwb2RlIHNlciBzdWJzdGl0de1kYSBjb20gYSBvcOfjbyBkZSBsaW5oYSBkZSBjb21hbmRvIC1iLjxicj4NCis8YnI+DQorYnJhaWxsZS1wYXJhbWV0ZXJzIFtkcml2ZXI6XW5hbWU9dmFsdWUsLi4uPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczsNCittc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5Fc3BlY2lmaWNhIG9zIHBhcuJtZXRyb3MNCitwYXJhIG9zIGRyaXZlcnMgZG8gZGlzcGxheSBicmFpbGxlLiBTZSBvIG1lc21vIHBhcuJtZXRybyBmb3IgZXNwZWNpZmljYWRvIG1haXMNCitkZSB1bWEgdmV6LCBhIHN1YSBhdHJpYnVp5+NvIG1haXMgYSBkaXJlaXRhIOkgdXNhZGEuIFNlIHVtIG5vbWUgZGUgcGFy4m1ldHJvIOkNCitxdWFsaWZpY2FkbyBwb3IgdW0gZHJpdmVyIChjb25zdWx0ZSBhIHNl5+NvIERyaXZlciBJZGVudGlmaWNhdGlvbiBDb2RlcyksIGVudONvDQorZXNzYSBjb25maWd1cmHn428gc/Mgc2UgYXBsaWNhIGFvIGRyaXZlciwgc2UgbuNvIOksIGVudONvIHNlIGFwbGljYSBhIHRvZG9zIG9zDQorZHJpdmVycy4gUGFyYSBvYnRlciB1bWEgZGVzY3Jp5+NvIGRvcyBwYXLibWV0cm9zIGFjZWl0b3MgcG9yIHVtIGRyaXZlcg0KK2VzcGVj7WZpY28sIGNvbnN1bHRlIGEgZG9jdW1lbnRh5+NvIGRlc3NlIGRyaXZlLiBWZWphIGEgZGUgb3Dn428gY29uc3Rydefjbw0KKy0td2l0aC1icmFpbGxlLXBhcmFtZXRlcnMgcGFyYSBvcyBwYWRy9WVzIGVzdGFiZWxlY2lkb3MgZHVyYW50ZSBvIHByb2Nlc3NvIGRlDQorY29uc3Rydefjby4gRXN0YSBkaXJldGl2YSBwb2RlIHNlciBzdWJzdGl0de1kYSBjb20gYSBvcOfjbyBkZSBsaW5oYSBkZSBjb21hbmRvDQorLUIuPG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48bzpwPiZuYnNwOzwvbzpwPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPmNvbnRyYWN0aW9uLXRhYmxlIGZpbGU8L3NwYW4+PHNwYW4NCitzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+RXNwZWNpZmljYSBhIHRhYmVsYSBkZQ0KK2NvbnRyYefjbyAodmVyIHNl5+NvIENvbnRyYWN0aW9uIFRhYmxlcyBwYXJhIG1haXMgZGV0YWxoZXMpLiBTZSB1bSBjYW1pbmhvDQorcmVsYXRpdm8gZm9yIGZvcm5lY2lkbywgZW50428gZWxlIGVzdOEgYW5jb3JhZG8gZW0gL2V0Yy9icmx0dHkgKHZlciBhcyBvcOf1ZXMNCitkZSBjb25zdHJ15+NvIC0td2l0aC1kYXRhLWRpcmVjdG9yeSBlIC0td2l0aC1leGVjdXRlLXJvb3QgcGFyYSBtYWlzIGRldGFsaGVzKS4NCitBIGV4dGVuc+NvIC5jdGIuIOkgb3BjaW9uYWwuIEEgdGFiZWxhIGRlIGNvbnRyYefjbyDpIHVzYWRvIHF1YW5kbyBvIHJlY3Vyc28gZGUNCis2LXBvbnRvcyBicmFpbGxlIOkgYXRpdmFkbyAodmVqYSBvIGNvbWFuZG8gU0lYRE9UUyBlIGEgcHJlZmVy6m5jaWEgVGV4dCBTdHlsZSkuDQorTyBwYWRy428g6SBtb3N0cmFyIGRlc2NvbnRyYWNpb25hZGEgNi1wb250b3MgYnJhaWxsZS4gRXN0YSBkaXJldGl2YSBwb2RlIHNlcg0KK3N1YnN0aXR17WRhIGNvbSBhIG9w5+NvIGRlIGxpbmhhIGRlIGNvbWFuZG8gLWMuIE7jbyBlc3ThIGRpc3Bvbu12ZWwgc2UgYSBvcOfjbw0KK2RlIGNvbnN0cnXn428gLS1kaXNhYmxlLWNvbnRyYWN0ZWQtYnJhaWxsZSBmb2kgZXNwZWNpZmljYWRhLjwvc3Bhbj48c3Bhbg0KK3N0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz48YnI+DQora2V5LXRhYmxlIGZpbGV8YXV0bzwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6DQorIkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+RXNwZWNpZmljYSBhIHRhYmVsYSBkZQ0KK3RlY2xhICh2ZXIgS2V5IFRhYmxlcyBwYXJhIGRldGFsaGVzKS4gU2UgdW0gY2FtaW5obyByZWxhdGl2byBmb3IgZm9ybmVjaWRvLA0KK2VudONvIGVsZSBlc3ThIGFuY29yYWRvIGVtIC9ldGMvYnJsdHR5ICh2ZXIgYXMgb3Dn9WVzIGRlIGNvbXBpbGHn428NCistLXdpdGgtZGF0YS1kaXJlY3RvcnkgZSAtLXdpdGgtZXhlY3V0ZS1yb290IHBhcmEgbWFpcyBkZXRhbGhlcykuIEEgZXh0ZW5z428NCisua3RiIOkgb3BjaW9uYWwuIE8gcGFkcuNvIOkgbuNvIHVzYXIgdW1hIHRhYmVsYSBkZSB0ZWNsYXMuIEVzdGEgZGlyZXRpdmEgcG9kZQ0KK3NlciBzdWJzdGl0de1kYSBjb20gYSBvcOfjbyBkZSBsaW5oYSBkZSBjb21hbmRvIC1rLjwvc3Bhbj48c3Bhbg0KK3N0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz48YnI+DQora2V5Ym9hcmQtcHJvcGVydGllcyBuYW1lPXZhbHVlLC4uLjwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7DQorbXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+RXNwZWNpZmljYSBhcyBwcm9wcmllZGFkZXMNCitkb3MgdGVjbGFkbyhzKSBhIHNlcmVtIG1vbml0b3JhZG9zLiBTZSBhIG1lc21hIHByb3ByaWVkYWRlIGZvciBlc3BlY2lmaWNhZGENCittYWlzIGRlIHVtYSB2ZXosIGEgc3VhIGF0cmlidWnn428gbWFpcyBhIGRpcmVpdGEg6SB1c2FkYS4gQ29uc3VsdGUgYSBzZefjbw0KK0tleWJvYXJkIFByb3BlcnRpZXMgcGFyYSBvYnRlciB1bWEgbGlzdGEgZGFzIHByb3ByaWVkYWRlcyBxdWUgcG9kZW0gc2VyDQorZXNwZWNpZmljYWRhcy4gTyBwYWRy428g6SBtb25pdG9yYXIgdG9kb3Mgb3MgdGVjbGFkb3MuIEVzdGEgZGlyZXRpdmEgcG9kZSBzZXINCitzdWJzdGl0de1kYSBjb20gYSBvcOfjbyBkZSBsaW5oYSBkZSBjb21hbmRvIC1LLjwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6DQorVGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+PGJyPg0KK21pZGktZGV2aWNlIGRldmljZTwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6DQorIkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+RXNwZWNpZmljYSBvIGRpc3Bvc2l0aXZvIGENCitzZXIgdXNhZG8gcGFyYSBvIE11c2ljYWwgSW5zdHJ1bWVudCBEaWdpdGFsIEludGVyZmFjZSAodmVyIHNl5+NvIE1JREkgRGV2aWNlDQorU3BlY2lmaWNhdGlvbikuIEVzdGEgZGlyZXRpdmEgcG9kZSBzZXIgc3Vic3RpdHXtZGEgY29tIGEgb3Dn428gZGUgbGluaGEgZGUNCitjb21hbmRvIC1tLiBO428gZXN04SBkaXNwb27tdmVsIHNlIGEgb3Dn428gZGUgY29uc3RydefjbyAtLWRpc2FibGUtbWlkaS1zdXBwb3J0DQorZm9pIGVzcGVjaWZpY2FkYS48L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5Og0KKyJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPjxicj4NCitwY20tZGV2aWNlIGRldmljZTwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6DQorIkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+RXNwZWNpZmljYSBvIGRpc3Bvc2l0aXZvIGENCitzZXIgdXNhZG8gcGFyYSBvIOF1ZGlvIGRpZ2l0YWwgKHZlciBzZefjbyBQQ00gRGV2aWNlIFNwZWNpZmljYXRpb24pLiBFc3RhDQorZGlyZXRpdmEgcG9kZSBzZXIgc3Vic3RpdHXtZGEgY29tIGEgb3Dn428gbGluaGEgZGUgY29tYW5kbyAtcC4gTuNvIGVzdOENCitkaXNwb27tdmVsIHNlIGEgb3Dn428gZGUgY29uc3RydefjbyAtLWRpc2FibGUtcGNtLXN1cHBvcnQgZm9pIGVzcGVjaWZpY2FkYS48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PnByZWZlcmVuY2VzLWZpbGUgZmlsZTwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+RXNwZWNpZmljYSBhIGxvY2FsaXph5+NvIGRvIGFycXVpdm8gcXVlIHNlcmEgdXNhZGEgcGFyYQ0KK3NhbHZhciBlIGNhcnJlZ2FyIGFzIHByZWZlcmVuY2lhcyBkZSB1c3VhcmlvLiBTZSB1bSBjYW1pbmhvIHJlbGF0aXZvIOkNCitmb3JuZWNpZG8sIHNlcuEgYW5leGFkbyBlbSAvdmFyL2xpYi9icmx0dHkuIE8gcGFkcuNvIOkgdXNhZG8gPHN0MTpQZXJzb25OYW1lDQorUHJvZHVjdElEPSJlbSBicmx0dHkucHJlZnMuIE8iIHc6c3Q9Im9uIj5lbSBicmx0dHkucHJlZnMuIE88L3N0MTpQZXJzb25OYW1lPg0KK2RpcmV083JpbyBwb2RlIHNlciByZWVzY3JpdCBjb20gbyBjb21hbmRvIC1GLjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PG86cD4mbmJzcDs8L286cD48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5yZWxlYXNlLWRldmljZSBib29sZWFuPC9zcGFuPjxzcGFuDQorc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPlF1ZXJlbmRvIG91IG7jbywgcGFyYQ0KK2xpYmVyYXIgbyBkaXNwb3NpdGl2byBhbyBxdWFsIG8gZGlzcGxheSBicmFpbGxlIGVzdOEgbGlnYWRvIHF1YW5kbyBhIHRlbGEgb3UNCitqYW5lbGEgYXR1YWwgbuNvIHBvZGUgc2VyIGxpZG8uPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczsNCittc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0IHN0eWxlPSdtYXJnaW4tbGVmdDozNS40cHQnPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz48YnI+DQorT24ob24pPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0IHN0eWxlPSd0ZXh0LWluZGVudDozNS40cHQnPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5MaWJlcmENCitvIGRpc3Bvc2l0aXZvLjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQgc3R5bGU9J3RleHQtaW5kZW50OjM1LjRwdCc+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzOw0KK21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQgc3R5bGU9J3RleHQtaW5kZW50OjM1LjRwdCc+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPk9mZihvZmYpPC9zcGFuPjxzcGFuDQorc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQgc3R5bGU9J3RleHQtaW5kZW50OjM1LjRwdCc+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPk7jbw0KK2xpYmVyYXIgbyBkaXNwb3NpdGl2by48L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5Og0KKyJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPkEgY29uZmlndXJh5+NvIHBhZHLjbyDpDQorbGlnYWRvIDxzdDE6UGVyc29uTmFtZSBQcm9kdWN0SUQ9ImVtIHBsYXRhZm9ybWFzIFdpbmRvd3MiIHc6c3Q9Im9uIj5lbQ0KKyBwbGF0YWZvcm1hcyBXaW5kb3dzPC9zdDE6UGVyc29uTmFtZT4gZSBkZXNsaWdhZG8gZW0gdG9kYXMgYXMgb3V0cmFzDQorcGxhdGFmb3JtYXMuIEVzdGEgZGlyZXRpdmEgcG9kZSBzZXIgc3Vic3RpdHXtZGEgY29tIGEgb3Dn428gZGUgbGluaGEgZGUgY29tYW5kbw0KKy1yLjwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBsYW5nPUVOLVVTIHN0eWxlPSdmb250LXNpemU6MTEuMHB0O21zby1hbnNpLWxhbmd1YWdlOg0KK0VOLVVTJz48YnI+DQorc2NyZWVuLWRyaXZlciBkcml2ZXI8L3NwYW4+PHNwYW4gbGFuZz1FTi1VUyBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7DQorbXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Ijttc28tYW5zaS1sYW5ndWFnZTpFTi1VUyc+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+RXNwZWNpZmljYSBvIGRyaXZlciBkYQ0KK3RlbGEgKHZlciBzZefjbyBEcml2ZXJzIGRlIFRlbGEgU3Vwb3J0YWRvcykuIFZlamEgYSBvcOfjbyBkZSBjb25zdHJ15+NvDQorLS13aXRoLXNjcmVlbi1kcml2ZXIgcGFyYSBvIHBhZHLjbyBlc3RhYmVsZWNpZG8gZHVyYW50ZSBvIHByb2Nlc3NvIGRlDQorY29tcGlsYefjby4gRXN0YSBkaXJldGl2YSBwb2RlIHNlciBzdWJzdGl0de1kYSBjb20gYSBvcOfjbyBkZSBsaW5oYSBkZSBjb21hbmRvDQorLXguPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIGxhbmc9RU4tVVMgc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQ7bXNvLWFuc2ktbGFuZ3VhZ2U6DQorRU4tVVMnPjxicj4NCitzY3JlZW4tcGFyYW1ldGVycyBbZHJpdmVyOl1uYW1lPXZhbHVlLC4uLjwvc3Bhbj48c3BhbiBsYW5nPUVOLVVTDQorc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyI7bXNvLWFuc2ktbGFuZ3VhZ2U6DQorRU4tVVMnPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPkVzcGVjaWZpY2Egb3MgcGFy4m1ldHJvcw0KK3BhcmEgb3MgZHJpdmVycyBkZSB0ZWxhLiBTZSBvIG1lc21vIHBhcuJtZXRybyBmb3IgZXNwZWNpZmljYWRvIG1haXMgZGUgdW1hIHZleiwNCithIHN1YSBhdHJpYnVp5+NvIG1haXMgYSBkaXJlaXRhIOkgdXNhZGEuIFNlIHVtIG5vbWUgZGUgcGFy4m1ldHJvIOkgcXVhbGlmaWNhZG8NCitwb3IgdW0gZHJpdmVyIChjb25zdWx0ZSBhIHNl5+NvIERyaXZlcnMgZGUgVGVsYSBTdXBvcnRhZG9zKSwgZW0gc2VndWlkYSwgYQ0KK2RlZmluaefjbyBz8yBzZSBhcGxpY2EgYW8gZHJpdmUsIHNlIG7jbyDpLCBlbnTjbywgc2UgYXBsaWNhIGEgdG9kb3Mgb3MgZHJpdmVycy4NCitQYXJhIG9idGVyIHVtYSBkZXNjcmnn428gZG9zIHBhcuJtZXRyb3MgYWNlaXRvcyBwb3IgdW0gZHJpdmVyIGVzcGVj7WZpY28sDQorY29uc3VsdGUgYSBkb2N1bWVudGHn428gZG8gZHJpdmUuIFZlamEgYSBvcOfjbyBkZSBjb25zdHJ15+NvDQorLS13aXRoLXNjcmVlbi1wYXJhbWV0ZXJzIHBhcmEgb3MgcGFkcvVlcyBlc3RhYmVsZWNpZG9zIGR1cmFudGUgbyBwcm9jZXNzbyBkZQ0KK2NvbnN0cnXn428uIEVzdGEgZGlyZXRpdmEgcG9kZSBzZXIgc3Vic3RpdHXtZGEgY29tIGEgb3Dn428gZGUgbGluaGEgZGUgY29tYW5kbw0KKy1YLjwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+PGJyPg0KK3NwZWVjaC1kcml2ZXIgZHJpdmVyLC4uLnxhdXRvPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToNCisiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5Fc3BlY2lmaWNhIG8gZHJpdmVyIGRvDQorc2ludGV0aXphZG9yIGRlIHZveiAodmVyIHNl5+NvIEVzcGVjaWZpY2Hn428gZGUgRHJpdmVyKS4gTyBwYWRy428g6SBhDQorcmVhbGl6YefjbyBkZSBhdXRvLWRldGVj5+NvLiBFc3RhIGRpcmV0aXZhIHBvZGUgc2VyIHN1YnN0aXR17WRhIGNvbSBhIG9w5+NvIGRlDQorbGluaGEgZGUgY29tYW5kbyAtcy4gTuNvIGVzdOEgZGlzcG9u7XZlbCBzZSBhIG9w5+NvIGRlIGNvbnN0cnXn428NCistLWRpc2FibGUtc3BlZWNoLXN1cHBvcnQgZm9pIGVzcGVjaWZpY2FkYS48L3NwYW4+IDwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PG86cD4mbmJzcDs8L286cD48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5zcGVlY2gtZmlmbyBmaWxlPC9zcGFuPjxzcGFuDQorc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPkVzcGVjaWZpY2EgYSBGSUZPICh1bQ0KK2FycXVpdm8gZXNwZWNpYWwgcXVlIGZ1bmNpb25hIGNvbW8gdW0gdHVibykgcXVlIOkgdXNhZG8gcG9yIG91dHJhcyBhcGxpY2Hn9WVzDQorcXVlIGRlc2VqYW0gdGVyIGFjZXNzbyBhbyBkcml2ZXIgZGUgZmFsYSBCUkxUVFkuIEVzdGEgZGlyZXRpdmEgcG9kZSBzZXINCitzdWJzdGl0de1kYSBjb20gYSBvcOfjbyBkZSBsaW5oYSBkZSBjb21hbmRvIC1GLiBO428gZXN04SBkaXNwb27tdmVsIHNlIGEgb3Dn428NCitkZSBjb25zdHJ15+NvIC0tZGlzYWJsZS1zcGVlY2gtc3VwcG9ydCAmbmJzcDtmb2kgZXNwZWNpZmljYWRhLjwvc3Bhbj48c3Bhbg0KK3N0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIGxhbmc9RU4tVVMgc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQ7bXNvLWFuc2ktbGFuZ3VhZ2U6DQorRU4tVVMnPjxicj4NCitzcGVlY2gtcGFyYW1ldGVycyBbZHJpdmVyOl1uYW1lPXZhbHVlLC4uLjwvc3Bhbj48c3BhbiBsYW5nPUVOLVVTDQorc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyI7bXNvLWFuc2ktbGFuZ3VhZ2U6DQorRU4tVVMnPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPkVzcGVjaWZpY2Egb3MgcGFy4m1ldHJvcw0KK3BhcmEgb3MgZHJpdmVzIGRlIHNpbnRldGl6YWRvciBkZSB2b3ouIFNlIG8gbWVzbW8gcGFy4m1ldHJvIOkgZXNwZWNpZmljYWRvIG1haXMNCitkZSB1bWEgdmV6LCBhIHN1YSBhdHJpYnVp5+NvIG1haXMgYSBkaXJlaXRhIOkgdXNhZGEuIFNlIHVtIG5vbWUgZGUgcGFy4m1ldHJvIOkNCitxdWFsaWZpY2FkbyBwb3IgdW0gZHJpdmVyIChjb25zdWx0ZSBhIHNl5+NvIEPzZGlnbyBkZSBJZGVudGlmaWNh5+NvIGRlIERyaXZlciksDQorZW50428gZXNzYSBjb25maWd1cmHn428gc/Mgc2UgYXBsaWNhIGFvIGRyaXZlLCBzZW7jbyBzZSBhcGxpY2EgYSB0b2RvcyBvcw0KK2RyaXZlcnMuIFBhcmEgb2J0ZXIgdW1hIGRlc2NyaefjbyBkb3MgcGFy4m1ldHJvcyBhY2VpdG9zIHBvciB1bSBkcml2ZXINCitlc3BlY+1maWNvLCBjb25zdWx0ZSBhIGRvY3VtZW50YefjbyBkbyBkcml2ZS4gVmVqYSBhIG9w5+NvIGRlIGNvbnN0cnXn428NCistLXdpdGgtc3BlZWNoLXBhcmFtZXRlcnMgcGFyYSBvcyBwYWRy9WVzIGVzdGFiZWxlY2lkb3MgZHVyYW50ZSBvIHByb2Nlc3NvIGRlDQorY29uc3Rydefjby4gRXN0YSBkaXJldGl2YSBwb2RlIHNlciBzdWJzdGl0de1kYSBjb20gbyBvcOfjbyBkZSBsaW5oYSBkZSBjb21hbmRvDQorLVMuPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz48YnI+DQordGV4dC10YWJsZSBmaWxlfGF1dG88L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5Og0KKyJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPkVzcGVjaWZpY2EgYSB0YWJlbGEgZGUNCit0ZXh0byh2ZWphIGEgc2Xn428gVGFiZWxhcyBkZSBUZXh0byBwYXJhIGRldGFsaGVzKS4gU2UgdW0gY2FtaW5obyByZWxhdGl2byBmb3INCitmb3JuZWNpZG8sIGVudONvIGVsZSBlc3ThIGFuY29yYWRvIGVtIC9ldGMvYnJsdHR5ICh2ZWphIGFzIG9w5/VlcyBkZSBjb21waWxh5+NvDQorlndpdGgtZGF0YS1kaXJlY3RvcnkgZSCWd2l0aC1leGVjdXRlLXJvb3QgcGFyYSBtYWlzIGRldGFsaGVzKS4gQSBleHRlbnPjbyAudHRiDQor6SBvcGNpb25hbC4gTyBwYWRy428g6SBleGVjdXRhciBhdXRvLXNlbGXn428gZG8gbG9jYWxlLWJhc2VkLCBjb20gYWx0ZXJuYXRpdmENCitwYXJhIGEgdGFiZWxhIGJ1aWxkLWluICh2ZWphIGEgb3Dn428gY29tcGlsYefjbyAtLXdpdGgtdGV4dC10YWJsZSkuIEVzdGENCitkaXJldGl2YSBwb2RlIHNlciBzdWJ0aXR17WRhIGNvbSBhIG9w5+NvIGRlIGxpbmhhIGRlIGNvbWFuZG8glnQuPG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+PG86cD4mbmJzcDs8L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD5zcGVlY2gtaW5wdXQgbmFtZTwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+RXNwZWNpZmljYSBvIG5vbWUgZG8gYXJxdWl2byBkbyBvYmpldG8gZG8gc2lzdGVtYSAoRklGTywNCitwaXBlIG5hbWUsIHNvY2tldCBuYW1lLCBldGMpIHF1ZSBwb2RlIHNlciB1c2FkbyBjb20gb3V0cmFzIGFwbGljYef1ZXMgcGFyYQ0KK2NvbnZlcnPjbyB0ZXh0LXRvLXNwZWVjaCB2aWEgZHJpdmVyIGRlIGZhbGEgQlJMVFRZLiBFc3RlIGRpcmV083JpbyBwb2RlIHNlcg0KK3JlZXNjcml0byBjb20gbyBjb21hbmRvIC1pLjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+TuNvIGVzdOEgZGlzcG9uaXZlbCBzZSBhIG9w5+NvIG5hIGNvbXBpbGHn428gbuNvIGZvcg0KK2VzcGVjaWZpY2FkYSAtLWRpc2FibGUtc3BlZWNoLXN1cHBvcnQuPC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKCgoCA8L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nbXNvLWJpZGktZm9udC1zaXplOjE4LjBwdCc+NC4zIC0gT3Dn9WVzIGRlDQorTGluaGEgZGUgQ29tYW5kbzwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6DQorIkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD4mbmJzcDs8L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+TXVpdGFzIGNvbmZpZ3VyYef1ZXMgcG9kZW0NCitzZXIgZXhwbGljaXRhbWVudGUgZXNwZWNpZmljYWRhcyBhbyBjaGFtYXIgQlJMVFRZLiBPcyBjb21hbmRvcyBicmx0dHkgYWNlaXRhbQ0KK2FzIHNlZ3VpbnRlcyBvcOf1ZXM6PC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToNCisiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz48YnI+DQorLWFmaWxlIC0tYXR0cmlidXRlcy10YWJsZT1maWxlPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToNCisiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5Fc3BlY2lmaWNhIGEgdGFiZWxhIGRlDQorYXRyaWJ1dG9zICh2ZWphIHNl5+NvIFRhYmVsYXMgZGUgQXRyaWJ1dG9zKS4gU2UgdW0gY2FtaW5obyByZWxhdGl2byBmb3INCitmb3JuZWNpZG8sIGVudONvIGVsZSBlc3ThIGFuY29yYWRvIGVtIC9ldGMvYnJsdHR5ICh2ZWphIGFzIG9w5/VlcyBkZSBjb21waWxh5+NvDQorlndpdGgtZGF0YS1kaXJlY3RvcnkgZSCWd2l0aC1leGVjdXRlLXJvb3QgcGFyYSBtYWlzIGRldGFsaGVzKS4gQSBleHRlbnPjbyAuYXRiDQorbuNvIOkgbmVjZXNz4XJpYS5WZWphIGFzIGNvbmZpZ3VyYef1ZXMgZG8gYXJxdWl2byBhdHRyaWJ1dGVzLXRhYmxlIHBhcmEgYQ0KK2NvbmZpZ3VyYefjbyBwYWRy428gZGUgcnVuLXRpbWUuIEVzdGEgY29uZmlndXJh5+NvIHBvZGUgc2VyIGFsdGVyYWRhIGNvbSBhDQorcHJlZmVy6m5jaWEgVGFiZWxhIGRlIEF0cmlidXRvcy48L3NwYW4+PHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgoA0KKzwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxvOnA+Jm5ic3A7PC9vOnA+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBsYW5nPUVOLVVTIHN0eWxlPSdmb250LXNpemU6MTEuMHB0O21zby1hbnNpLWxhbmd1YWdlOg0KK0VOLVVTJz4tYmRyaXZlciwuLi58YXV0byAtLWJyYWlsbGUtZHJpdmVyPWRyaXZlciwuLi58YXV0bzwvc3Bhbj48c3Bhbg0KK2xhbmc9RU4tVVMgc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyI7DQorbXNvLWFuc2ktbGFuZ3VhZ2U6RU4tVVMnPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPkVzcGVjaWZpY2EgbyBkcml2ZSBkbw0KK2Rpc3BsYXkgYnJhaWxsZSAodmVqYSBzZefjbyBFc3BlY2lmaWNh5+NvIGRlIERyaXZlcikuIFZlamEgYXMgY29uZmlndXJh5/VlcyBkbw0KK2FycXVpdm8gYnJhaWxsZS1kcml2ZSBwYXJhIGEgY29uZmlndXJh5+NvIHBhZHLjbyBkZSBydW4tdGltZS48L3NwYW4+PHNwYW4NCitzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+PGJyPg0KKy1jZmlsZSAtLWNvbnRyYWN0aW9uLXRhYmxlPWZpbGU8L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzOw0KK21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPkVzcGVjaWZpY2EgYSB0YWJlbGEgZGUNCitjb250cmHn428gKHZlamEgc2Xn428gVGFiZWxhIGRlIENvbnRyYefjbykuIFNlIHVtIGNhbWluaG8gcmVsYXRpdm8gZm9yDQorZm9ybmVjaWRvLCBlbnTjbyBlbGUgZXN04SBhbmNvcmFkbyBlbSAvZXRjL2JybHR0eSAodmVqYSBhcyBvcOf1ZXMgZGUgY29tcGlsYefjbw0KKy0td2l0aC1kYXRhLWRpcmVjdG9yeSBlIC0td2l0aC1leGVjdXRlLXJvb3QgcGFyYSBtYWlzIGRldGFsaGVzKS4gQSBleHRlbnPjbw0KKy5jdGIg6SBvcGNpb25hbC4gQSB0YWJlbGEgZGUgY29udHJh5+NvIOkgdXNhZG8gcXVhbmRvIG8gcmVjdXJzbyBkZSA2LXBvbnRvcyBicmFpbGxlDQor6SBhdGl2YWRvICh2ZWphIG8gY29tYW5kbyBTSVhET1RTIGUgYSBwcmVmZXLqbmNpYSBFc3RpbG8gZGUgVGV4dG8pLiBWZWphIGFzDQorY29uZmlndXJh5/VlcyBkbyBhcnF1aXZvIHRhYmVsYSBkZSBjb250cmHn428gcGFyYSBhIGNvbmZpZ3VyYefjbyBwYWRy428gZGUNCitydW4tdGltZS4gRXN0YSBjb25maWd1cmHn428gcG9kZSBzZXIgYWx0ZXJhZGEgY29tIGEgcHJlZmVy6m5jaWEgVGFiZWxhIGRlDQorQ29udHJh5+NvLiBFc3RhIG9w5+NvIG7jbyBlc3ThIGRpc3Bvbu12ZWwgc2UgYSBvcOfjbyBkZSBjb25zdHJ15+NvDQorLS1kaXNhYmxlLWNvbnRyYWN0ZWQtYnJhaWxsZSBmb2kgZXNwZWNpZmljYWRhLjwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6DQorVGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+PGJyPg0KKy1kZGV2aWNlLC4uLiAtLWJyYWlsbGUtZGV2aWNlPWRldmljZSwuLi48L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzOw0KK21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPkVzcGVjaWZpY2EgbyBkaXNwb3NpdGl2bw0KK3BhcmEgbyBxdWFsIG8gZGlzcGxheSBicmFpbGxlIGVzdOEgbGlnYWRvICh2ZXIgc2Xn428gRXNwZWNpZmljYefjbyBEaXNwb3NpdGl2bw0KK0JyYWlsbGUpLiBWZWphIGFzIGNvbmZpZ3VyYef1ZXMgZG8gYXJxdWl2byBicmFpbGxlLWRldmljZSBwYXJhIGEgY29uZmlndXJh5+NvDQorcGFkcuNvIGRlIHJ1bi10aW1lLjwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6DQorIkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+PGJyPg0KKy1lIC0tc3RhbmRhcmQtZXJyb3I8L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5Og0KKyJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPkVzY3JldmUgbWVuc2FnZW5zIGRlDQorZGlzZ27zc3RpY28gZGUgZXJybyBwYWRy428uIE8gcGFkcuNvIOkgZ3JhduEtbG9zIHZpYSBzeXNsb2c8L3NwYW4+PHNwYW4NCitzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+PGJyPg0KKy1mZmlsZSAtLWNvbmZpZ3VyYXRpb24tZmlsZT1maWxlPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczsNCittc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5Fc3BlY2lmaWNhIG8gbG9jYWwgZG8NCithcnF1aXZvIGRlIGNvbmZpZ3VyYefjbyBxdWUgc2Vy4SB1dGlsaXphZG8gcGFyYSBhIGNyaWHn428gZGFzIGNvbmZpZ3VyYef1ZXMNCitwYWRy9WVzIGRlIHJ1bi10aW1lLjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIGxhbmc9RU4tVVMgc3R5bGU9J21zby1hbnNpLWxhbmd1YWdlOkVOLVVTJz48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz4taCAtlmhlbHA8L3NwYW4+PHNwYW4NCitzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+TW9zdHJhIHVtIHJlc3VtbyBkYXMNCitvcOf1ZXMgZGUgbGluaGEgZGUgY29tYW5kbyBhY2VpdGFzIHBlbG8gQlJMVFRZLCBlIGRlcG9pcyBzYWkuPC9zcGFuPjxzcGFuDQorc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPjxicj4NCista2ZpbGUgLS1rZXktdGFibGU9ZmlsZTwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6DQorIkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+RXNwZWNpZmljYSBhIHRhYmVsYSBkZQ0KK3RlY2xhcyAodmVqYSBzZefjbyBLZXkgVGFibGVzIHByYSBkZXRhbGhlcykuIFNlIHVtIGNhbWluaG8gcmVsYXRpdm8gZm9yDQorZm9ybmVjaWRvLCBlbnTjbyBlbGUgZXN04SBhbmNvcmFkbyBlbSAvZXRjL2JybHR0eSAodmVqYSBhcyBvcOf1ZXMgZGUgY29tcGlsYefjbw0KKy0td2l0aC1kYXRhLWRpcmVjdG9yeSBlIC0td2l0aC1leGVjdXRlLXJvb3QgcGFyYSBtYWlzIGRldGFsaGVzKS4gQSBleHRlbnPjbw0KKy5rdGIg6SBvcGNpb25hbC4gRXN0YSBjb25maWd1cmHn428gcG9kZSBzZXIgYWx0ZXJhZGEgY29tIGEgcHJlZmVy6m5jaWEgVGFiZWxhDQorZGUgVGVsYXMuPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz48YnI+DQorLWxsZXZlbCAtLWxvZy1sZXZlbD1sZXZlbDwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6DQorIkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+RXNwZWNpZmlxdWUgbyBsaW1pdGUgZGUNCitncmF2aWRhZGUgcGFyYSBnZXJh5+NvIGRlIG1lbnNhZ2VucyBkZSBkaWFnbvNzdGljby4gT3Mgc2VndWludGVzIG7tdmVpcyBz428NCityZWNvbmhlY2lkb3MuPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz4wPC9zcGFuPjxzcGFuDQorc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQgc3R5bGU9J3RleHQtaW5kZW50OjM1LjRwdCc+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPmVtZXJn6m5jaWE8L3NwYW4+PHNwYW4NCitzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+MTwvc3Bhbj48c3Bhbg0KK3N0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0IHN0eWxlPSd0ZXh0LWluZGVudDozNS40cHQnPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5hbGVydGE8L3NwYW4+PHNwYW4NCitzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+Mjwvc3Bhbj48c3Bhbg0KK3N0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0IHN0eWxlPSd0ZXh0LWluZGVudDozNS40cHQnPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5jcu10aWNvPC9zcGFuPjxzcGFuDQorc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPjM8L3NwYW4+PHNwYW4NCitzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dCBzdHlsZT0ndGV4dC1pbmRlbnQ6MzUuNHB0Jz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+ZXJybzwvc3Bhbj48c3Bhbg0KK3N0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz40PC9zcGFuPjxzcGFuDQorc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQgc3R5bGU9J3RleHQtaW5kZW50OjM1LjRwdCc+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPmF2aXNvPC9zcGFuPjxzcGFuDQorc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPjU8L3NwYW4+PHNwYW4NCitzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dCBzdHlsZT0ndGV4dC1pbmRlbnQ6MzUuNHB0Jz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+YWR2ZXJ06m5jaWE8L3NwYW4+PHNwYW4NCitzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+Njwvc3Bhbj48c3Bhbg0KK3N0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0IHN0eWxlPSd0ZXh0LWluZGVudDozNS40cHQnPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5pbmZvcm1h5/Vlczwvc3Bhbj48c3Bhbg0KK3N0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz43PC9zcGFuPjxzcGFuDQorc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQgc3R5bGU9J3RleHQtaW5kZW50OjM1LjRwdCc+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPmRlYnVnPC9zcGFuPjxzcGFuDQorc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPk91IG8gbvptZXJvIG91IG8gbm9tZSBwb2RlDQorc2VyIGZvcm5lY2lkbywgYmVtIGNvbW8gbyBub21lIHBvZGUgc2VyIGFicmV2aWFkby4gU2UgbuNvIGZvciBlc3BlY2lmaWNhZG8sDQorZW50428gbyBu7XZlbCBpbmZvcm1h5+NvIOkgYXNzdW1pZG8gKHZlamEgYSBvcOfjbyAtcSBwYXJhIG1haXMgZGV0YWxoZXMpLjwvc3Bhbj48c3Bhbg0KK3N0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz48YnI+DQorLW1kZXZpY2UgLS1taWRpLWRldmljZT1kZXZpY2U8L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5Og0KKyJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPkVzcGVjaWZpY2EgbyBkaXNwb3NpdGl2byBhDQorc2VyIHVzYWRvIHBhcmEgbyBNdXNpYyBJbnN0cnVtZW50IERpZ2l0YWwgSW50ZXJmYWNlICh2ZXIgc2Xn428gRXNwZWNpZmljYefjbyBkZQ0KK0Rpc3Bvc2l0aXZvcyBNSURJKS4gVmVqYSBhcyBjb25maWd1cmHn9WVzIGRvIGFycXVpdm8gbWlkaS1kZXZpY2UgcGFyYSBhDQorY29uZmlndXJh5+NvIHBhZHLjbyBkZSBydW4tdGltZS4gRXN0YSBvcOfjbyBu428gZXN04SBkaXNwb27tdmVsIHNlIGEgb3Dn428gZGUNCitjb25zdHJ15+NvIC0tZGlzYWJsZS1taWRpLXN1cHBvcnQgZm9pIGVzcGVjaWZpY2FkYS48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz4tbiAtLW5vLWRhZW1vbjwvc3Bhbj48c3Bhbg0KK3N0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5Fc3BlY2lmaWNhIHF1ZSBCUkxUVFkgaXLhDQorZmljYXIgZW0gcHJpbWVpcm8gcGxhbm8uIFNlIG7jbyBmb3IgZXNwZWNpZmljYWRvLCBlbnTjbyBCUkxUVFkgdG9ybmEtc2UgdW0NCitwcm9jZXNzbyBlbSBiYWNrZ3JvdW5kIChkYWVtb24pIGFw83Mgc2UgaW5pY2lhbGl6YefjbywgbWFzIGFudGVzIGRlIGluaWNpYXINCitxdWFscXVlciB1bSBkb3MgZHJpdmVycyBzZWxlY2lvbmFkb3MuPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczsNCittc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz48YnI+DQorLXBkZXZpY2UgLS1wY20tZGV2aWNlPWRldmljZTwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6DQorIkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+RXNwZWNpZmljYSBvIGRpc3Bvc2l0aXZvIGENCitzZXIgdXNhZG8gcGFyYSBvIOF1ZGlvIGRpZ2l0YWwgKHZlciBzZefjbyBFc3BlY2lmaWNh5+NvIGRvIERpc3Bvc2l0aXZvIFBDTSkuDQorVmVqYSBhcyBjb25maWd1cmHn9WVzIGRvIGFycXVpdm8gcGNtLWRldmljZSBwYXJhIGEgY29uZmlndXJh5+NvIHBhZHLjbyBkZQ0KK3J1bi10aW1lLiBFc3RhIG9w5+NvIG7jbyBlc3RhcuEgZGlzcG9u7XZlbCBzZSBhIG9w5+NvIGEgb3Dn428gZGUgY29tcGlsYefjbyAtLWRpc2FibGUtcGNtLXN1cHBvcnQNCitmb2kgZXNwZWNpZmljYWRvLjwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6DQorIkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+PGJyPg0KKy1xIJZxdWlldDwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+TG9nIG1lbm9zIGluZm9ybWHn428uIEVzdGENCitvcOfjbyBhbHRlcmEgbyBu7XZlbCBkZSBsb2cgKHZlamEgYSBvcOfjbyAtbCkgcGFyYSBub3RpY2Ugc2UgcXVhbHF1ZXIgZGFzIG9w5+NvDQorLXYgb3UgLVYgc2VqYSBlc3BlY2lmaWNhZG8sIGUgcGFyYSB3YXJuaWcgY2FzbyBjb250cuFyaW8uPC9zcGFuPjxzcGFuDQorc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPjxicj4NCistciAtLXJlbGVhc2UtZGV2aWNlPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToNCisiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5MaWJlcmEgbyBkaXNwb3NpdGl2byBwYXJhDQorbyBxdWFsIG8gZGlzcGxheSBicmFpbGxlIGVzdOEgbGlnYWRvIHF1YW5kbyBhIHRlbGEgb3UgamFuZWxhIGF0dWFsIG7jbyBwb2RlIHNlcg0KK2xpZG8uIFZlamEgYXMgY29uZmlndXJh5/VlcyBkbyBhcnF1aXZvIHJlbGVhc2UtZGV2aWNlIHBhcmEgYSBjb25maWd1cmHn428NCitwYWRy428gZGUgcnVuLXRpbWUuPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToNCisiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIGxhbmc9RU4tVVMgc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQ7bXNvLWFuc2ktbGFuZ3VhZ2U6DQorRU4tVVMnPjxicj4NCistc2RyaXZlciwuLi58YXV0byAtLXNwZWVjaC1kcml2ZXI9ZHJpdmVyLC4uLnxhdXRvPC9zcGFuPjxzcGFuIGxhbmc9RU4tVVMNCitzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Ijttc28tYW5zaS1sYW5ndWFnZToNCitFTi1VUyc+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+RXNwZWNpZmljYSBvIGRyaXZlciBkbyBzaW50ZXRpemFkb3INCitkZSB2b3ogKHZlciBzZefjbyBFc3BlY2lmaWNh5+NvIGRlIERyaXZlcikuIFZlamEgYXMgY29uZmlndXJh5/VlcyBkbyBhcnF1aXZvDQorc3BlZWNoLWRyaXZlciBwYXJhIGEgY29uZmlndXJh5+NvIHBhZHLjbyBkZSBydW4tdGltZS4gRXN0YSBvcOfjbyBu428gZXN0YXLhDQorZGlzcG9u7XZlbCBzZSBhIG9w5+NvIGRlIGNvbnN0cnXn428gLS1kaXNhYmxlLXNwZWVjaC1zdXBwb3J0IGZvaSBlc3BlY2lmaWNhZG8uPC9zcGFuPjxzcGFuDQorc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPjxicj4NCistdGZpbGUgLS10ZXh0LXRhYmxlPWZpbGU8L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5Og0KKyJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPkVzcGVjaWZpY2EgYSB0YWJlbGEgZGUNCit0ZXh0byAodmVyIHNl5+NvIFRhYmVsYSBkZSBUZXh0bykuIFNlIHVtIGNhbWluaG8gcmVsYXRpdm8gZm9yIGZvcm5lY2lkbywgZW50428NCitlbGUgZXN04SBhbmNvcmFkbyBlbSAvZXRjL2JybHR0eSAodmVyIGFzIG9w5/VlcyBkZSBjb25zdHJ15+NvDQorLS13aXRoLWRhdGEtZGlyZWN0b3J5IGUgLS13aXRoLWV4ZWN1dGUtcm9vdCBwYXJhIG1haXMgZGV0YWxoZXMpLiBBIGV4dGVuc+NvDQorLnR0YiDpIG9wY2lvbmFsLiBWZWphIGFzIGNvbmZpZ3VyYef1ZXMgZG8gYXJxdWl2byB0ZXh0LXRhYmxlIHBhcmEgYQ0KK2NvbmZpZ3VyYefjbyBwYWRy428gZGUgcnVuLXRpbWUuIEVzdGEgY29uZmlndXJh5+NvIHBvZGUgc2VyIGFsdGVyYWRhIGNvbSBhDQorcHJlZmVy6m5jaWEgVGFiZWxhIFRleHRvLjwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6DQorIkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+PGJyPg0KKy12IJZ2ZXJpZnk8L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPk1vc3RyYXIgYSB2ZXJz428gYXR1YWwgZG8NCitCUkxUVFksIGRvIGxhZG8gZG8gc2Vydmlkb3IgZGUgc3VhIGludGVyZmFjZSBkZSBwcm9ncmFtYefjbyBkZSBhcGxpY2F0aXZvLCBkbw0KK2JyYWlsbGUgc2VsZWNpb25hZG8gZSBkcml2ZXJzIGRlIGZhbGEsIGUgZGVwb2lzIHNhaS4gU2UgYSBvcOfjby1xIG7jbyBmb3INCitlc3BlY2lmaWNhZG8sIGVudONvIHRhbWLpbSBleGliaXIgb3MgdmFsb3JlcyBkYXMgb3Dn9WVzIGRlcG9pcyBkZSB0b2RhcyBhcw0KK2ZvbnRlcyBzZXJlbSBjb25zaWRlcmFkYXMuIFNlIG1haXMgZGUgdW0gZHJpdmVyIGJyYWlsbGUgKHZlamEgYSBvcOfjbyBkZSBsaW5oYQ0KK2RlIGNvbWFuZG8gLWIpIGUvb3UgbWFpcyBkZSB1bSBkaXNwb3NpdGl2byBicmFpbGUgKHZlamEgYSBvcOfjbyBsaW5oYSBkZQ0KK2NvbWFuZG8gLWQpIHRlbmhhIHNpZG8gZXNwZWNpZmljYWRvLCBlbnTjbyBhIGF1dG9kZXRlY+fjbyBkbyBkaXNwbGF5IEJyYWlsbGUg6Q0KK3JlYWxpemFkby4gU2UgbWFpcyBkZSB1bSBkcml2ZXIgZGUgZmFsYSh2ZWphIGEgb3Dn428gZGUgbGluaGEgZGUgY29tYW5kbyAtcykNCit0ZW5oYSBzaWRvIGVzcGVjaWZpY2FkbywgZW50428gYSBhdXRvZGV0ZWPn428gZG8gc2ludGV0aXphZG9yIGRlIHZveiDpDQorcmVhbGl6YWRhLjwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBsYW5nPUVOLVVTIHN0eWxlPSdmb250LXNpemU6MTEuMHB0O21zby1hbnNpLWxhbmd1YWdlOg0KK0VOLVVTJz48YnI+DQorLXhkcml2ZXIgLS1zY3JlZW4tZHJpdmVyPWRyaXZlcjwvc3Bhbj48c3BhbiBsYW5nPUVOLVVTIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczsNCittc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciO21zby1hbnNpLWxhbmd1YWdlOkVOLVVTJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5Fc3BlY2lmaWNhIG8gZHJpdmVyIGRhDQordGVsYSAodmVyIHNl5+NvIERyaXZlcnMgU3Vwb3J0YWRvcyBkZSBUZWxhKS4gVmVqYSBhcyBjb25maWd1cmHn9WVzIGRvIGFycXVpdm8NCitzY3JlZW4tZHJpdmVyIHBhcmEgYSBjb25maWd1cmHn428gcGFkcuNvIGRlIHJ1bi10aW1lLjwvc3Bhbj48c3Bhbg0KK3N0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIGxhbmc9RU4tVVMgc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQ7bXNvLWFuc2ktbGFuZ3VhZ2U6DQorRU4tVVMnPjxicj4NCistQW5hbWU9dmFsdWUsLi4uIC0tYXBpLXBhcmFtZXRlcnM9bmFtZT12YWx1ZSwuLi48L3NwYW4+PHNwYW4gbGFuZz1FTi1VUw0KK3N0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciO21zby1hbnNpLWxhbmd1YWdlOg0KK0VOLVVTJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5Fc3BlY2lmaWNhIG9zIHBhcuJtZXRyb3MNCitwYXJhIGEgQXBwbGljYXRpb24gUHJvZ3JhbW1pbmcgSW50ZXJmYWNlLiBTZSBvIG1lc21vIHBhcuJtZXRybyDpIGVzcGVjaWZpY2Fkbw0KK21haXMgZGUgdW1hIHZleiwgYSBzdWEgYXRyaWJ1aefjbyBtYWlzIGEgZGlyZWl0YSDpIHVzYWRhLiBQYXJhIG9idGVyIHVtYQ0KK2Rlc2NyaefjbyBkb3MgcGFy4m1ldHJvcyBhY2VpdG9zIHBlbGEgaW50ZXJmYWNlLCBjb25zdWx0ZSBvIG1hbnVhbCBkZQ0KK3JlZmVy6m5jaWEgQnJsQVBJLiBWZWphIGFzIGNvbmZpZ3VyYef1ZXMgZG8gYXJxdWl2byBhcGktcGFyYW1ldGVycyBwYXJhIGENCitjb25maWd1cmHn428gcGFkcuNvIGRlIHJ1bi10aW1lLjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxvOnA+Jm5ic3A7PC9vOnA+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBsYW5nPUVOLVVTIHN0eWxlPSdmb250LXNpemU6MTEuMHB0O21zby1hbnNpLWxhbmd1YWdlOg0KK0VOLVVTJz4tQltkcml2ZXI6XW5hbWU9dmFsdWUsLi4uIC0tYnJhaWxsZS1wYXJhbWV0ZXJzPVtkcml2ZXI6XW5hbWU9dmFsdWUsLi4uPC9zcGFuPjxzcGFuDQorbGFuZz1FTi1VUyBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3IjsNCittc28tYW5zaS1sYW5ndWFnZTpFTi1VUyc+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+RXNwZWNpZmljYSBvcyBwYXLibWV0cm9zDQorcGFyYSBvcyBkcml2ZXJzIGRvIGRpc3BsYXkgYnJhaWxsZS4gU2UgbyBtZXNtbyBwYXLibWV0cm8g6SBlc3BlY2lmaWNhZG8gbWFpcyBkZQ0KK3VtYSB2ZXosIGEgc3VhIGF0cmlidWnn428gbWFpcyBhIGRpcmVpdGEg6SB1c2FkYS4gU2UgdW0gbm9tZSBkZSBwYXLibWV0cm8g6Q0KK3F1YWxpZmljYWRvIHBvciB1bSBkcml2ZXIgKGNvbnN1bHRlIGEgc2Xn428gQ/NkaWdvcyBkZSBJZGVudGlmaWNh5+NvIGRlDQorRHJpdmVycyksIGVudONvIGVzc2EgY29uZmlndXJh5+NvIHPzIHNlIGFwbGljYSBhbyBkcml2ZSwgc2UgbuNvIOksIGVudONvIHNlDQorYXBsaWNhIGEgdG9kb3Mgb3MgZHJpdmVycy4gUGFyYSBvYnRlciB1bWEgZGVzY3Jp5+NvIGRvcyBwYXLibWV0cm9zIGFjZWl0b3MgcG9yDQordW0gZHJpdmVyIGVzcGVj7WZpY28sIGNvbnN1bHRlIGEgZG9jdW1lbnRh5+NvIGRvIGRyaXZlci4gVmVqYSBhcyBjb25maWd1cmHn9WVzDQorZG8gYXJxdWl2byBicmFpbGxlLXBhcmFtZXRlcnMgcGFyYSBhIGNvbmZpZ3VyYefjbyBwYWRy428gZGUgcnVuLXRpbWUuPC9zcGFuPjxzcGFuDQorc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPjxicj4NCistRSAtLWVudmlyb25tZW50LXZhcmlhYmxlczwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6DQorIkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+UmVjb25oZWNlIGFzIHZhcmnhdmVpcyBkZQ0KK2FtYmllbnRlIHBhcmEgZGV0ZXJtaW5hciBhcyBjb25maWd1cmHn9WVzIHBhZHLjbyBwYXJhIGFzIG9w5/VlcyBkZSBsaW5oYSBkZQ0KK2NvbWFuZG8gbuNvIGVzcGVjaWZpY2FkYSAodmVyIHNl5+NvIE9w5/VlcyBkZSBMaW5oYSBkZSBDb21hbmRvKS4gU2UgZXN0YSBvcOfjbw0KK2ZvciBlc3BlY2lmaWNhZGEsIGUgc2UgYSB2YXJp4XZlbCBkZSBhbWJpZW50ZSBhc3NvY2lhZG9zIGEgdW1hIG9w5+NvIG7jbw0KK2VzcGVjaWZpY2FkYSDpIGRlZmluaWRhLCBlbnTjbyBvIHZhbG9yIGRhIHZhcmnhdmVsIGRlIGFtYmllbnRlIOkgdXRpbGl6YWRvLiBPcw0KK25vbWVzIGRlc3NhcyB2YXJp4XZlaXMgZGUgYW1iaWVudGUgc+NvIGJhc2VhZG9zIGVtIG5vbWVzIGdyYW5kZXMgZGFzIG9w5/VlcyBxdWUNCitjb3JyZXNwb25kZW0gYTo8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0IHN0eWxlPSdtYXJnaW4tbGVmdDozNi4wcHQ7dGV4dC1pbmRlbnQ6LTE4LjBwdDttc28tbGlzdDoNCitsMTIgbGV2ZWwxIGxmbzk7dGFiLXN0b3BzOmxpc3QgMzYuMHB0Jz48IVtpZiAhc3VwcG9ydExpc3RzXT48c3Bhbg0KK3N0eWxlPSdmb250LWZhbWlseTpXaW5nZGluZ3M7bXNvLWZhcmVhc3QtZm9udC1mYW1pbHk6V2luZ2RpbmdzO21zby1iaWRpLWZvbnQtZmFtaWx5Og0KK1dpbmdkaW5ncyc+PHNwYW4gc3R5bGU9J21zby1saXN0Oklnbm9yZSc+pzxzcGFuIHN0eWxlPSdmb250OjcuMHB0ICJUaW1lcyBOZXcgUm9tYW4iJz4mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsNCis8L3NwYW4+PC9zcGFuPjwvc3Bhbj48IVtlbmRpZl0+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPlRvZGFzIGFzIGxldHJhcw0KK3PjbyBlbSBtYWn6c2N1bGFzLjwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6DQorIkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dCBzdHlsZT0nbWFyZ2luLWxlZnQ6MzYuMHB0O3RleHQtaW5kZW50Oi0xOC4wcHQ7bXNvLWxpc3Q6DQorbDEyIGxldmVsMSBsZm85O3RhYi1zdG9wczpsaXN0IDM2LjBwdCc+PCFbaWYgIXN1cHBvcnRMaXN0c10+PHNwYW4NCitzdHlsZT0nZm9udC1mYW1pbHk6V2luZ2RpbmdzO21zby1mYXJlYXN0LWZvbnQtZmFtaWx5OldpbmdkaW5nczttc28tYmlkaS1mb250LWZhbWlseToNCitXaW5nZGluZ3MnPjxzcGFuIHN0eWxlPSdtc28tbGlzdDpJZ25vcmUnPqc8c3BhbiBzdHlsZT0nZm9udDo3LjBwdCAiVGltZXMgTmV3IFJvbWFuIic+Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7DQorPC9zcGFuPjwvc3Bhbj48L3NwYW4+PCFbZW5kaWZdPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5PcyB1bmRlcnNjb3Jlcw0KKyhfKSBz428gdXRpbGl6YWRvcyBlbSB2ZXogZGUgc2luYWlzIGRlIG1lbm9zICgtKS48L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5Og0KK1RpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQgc3R5bGU9J21hcmdpbi1sZWZ0OjM2LjBwdDt0ZXh0LWluZGVudDotMTguMHB0O21zby1saXN0Og0KK2wxMiBsZXZlbDEgbGZvOTt0YWItc3RvcHM6bGlzdCAzNi4wcHQnPjwhW2lmICFzdXBwb3J0TGlzdHNdPjxzcGFuDQorc3R5bGU9J2ZvbnQtZmFtaWx5OldpbmdkaW5nczttc28tZmFyZWFzdC1mb250LWZhbWlseTpXaW5nZGluZ3M7bXNvLWJpZGktZm9udC1mYW1pbHk6DQorV2luZ2RpbmdzJz48c3BhbiBzdHlsZT0nbXNvLWxpc3Q6SWdub3JlJz6nPHNwYW4gc3R5bGU9J2ZvbnQ6Ny4wcHQgIlRpbWVzIE5ldyBSb21hbiInPiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOw0KKzwvc3Bhbj48L3NwYW4+PC9zcGFuPjwhW2VuZGlmXT48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+TyBwcmVmaXhvIEJSTFRUWV8NCivpIGFkaWNpb25hZG8uPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5Fc3RhIG9w5+NvIOkNCitwYXJ0aWN1bGFybWVudGUg+nRpbCBubyBzaXN0ZW1hIG9wZXJhY2lvbmFsIExpbnV4LCBwb2lzIHBlcm1pdGUgY29uZmlndXJh5+NvDQorcGFkcuNvIGEgc2VyIHBhc3NhZG8gcGFyYSBCUkxUVFkgYXRyYXbpcyBkZSBwYXLibWV0cm9zIGRlIGluaWNpYWxpemHn428uIEFzDQorc2VndWludGVzIHZhcmnhdmVpcyBkZSBhbWJpZW50ZSBz428gc3Vwb3J0YWRhczo8L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5Og0KK1RpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPjxicj4NCitCUkxUVFlfQVBJX1BBUkFNRVRFUlM8L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5Og0KKyJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPlBhcuJtZXRyb3MgcGFyYSBhDQorQXBwbGljYXRpb24gUHJvZ3JhbW1pbmcgSW50ZXJmYWNlICh2ZWphIGEgb3Dn428gZGUgbGluaGEgZGUgY29tYW5kbyAtQSkuPC9zcGFuPjxzcGFuDQorc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPjxicj4NCitCUkxUVFlfQVRUUklCVVRFU19UQUJMRTwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6DQorIkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+QSB0YWJlbGEgZGUgYXRyaWJ1dG9zDQorKHZlamEgYSBvcOfjbyBkZSBsaW5oYSBkZSBjb21hbmRvIC1hKS48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKCgoCA8L3NwYW4+PHNwYW4NCitzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+PGJyPg0KK0JSTFRUWV9CUkFJTExFX0RFVklDRTwvc3Bhbj48c3BhbiBsYW5nPUVOLVVTIHN0eWxlPSdtc28tYW5zaS1sYW5ndWFnZTpFTi1VUyc+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+TyBkaXNwb3NpdGl2byBkbyBkaXNwbGF5DQorYnJhaWxsZSAodmVqYSBhIG9w5+NvIGRlIGxpbmhhIGRlIGNvbWFuZG8gLWQpLjwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6DQorVGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+PGJyPg0KK0JSTFRUWV9CUkFJTExFX0RSSVZFUjwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6DQorIkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+TyBkcml2ZXIgZG8gZGlzcGxheQ0KK2JyYWlsbGUgKHZlamEgYSBvcOfjbyBkZSBsaW5oYSBkZSBjb21hbmRvIC1iKS48L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5Og0KK1RpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPjxicj4NCitCUkxUVFlfQlJBSUxMRV9QQVJBTUVURVJTPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToNCisiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5QYXLibWV0cm9zIHBhcmEgbyBkcml2ZXINCitkbyBkaXNwbGF5IGJyYWlsbGUgKHZlamEgYSBvcOfjbyBkZSBsaW5oYSBkZSBjb21hbmRvIC1CKS48L3NwYW4+PHNwYW4NCitzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+PGJyPg0KK0JSTFRUWV9DT05GSUdVUkFUSU9OX0ZJTEU8L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5Og0KKyJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPk8gYXJxdWl2byBkZSBjb25maWd1cmHn428NCisodmVqYSBhIG9w5+NvIGRlIGxpbmhhIGRlIGNvbWFuZG8gLWYpLjwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7DQorbXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+PGJyPg0KK0JSTFRUWV9DT05UUkFDVElPTl9UQUJMRTwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6DQorIkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+QSB0YWJlbGEgZGUgY29udHJh5+NvDQorKHZlamEgYSBvcOfjbyBkZSBsaW5oYSBkZSBjb21hbmRvIC1jKS48L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzOw0KK21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPjxicj4NCitCUkxUVFlfS0VZX1RBQkxFPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToNCisiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5BIHRhYmVsYSBkZSB0ZWNsYXMgKHZlamEgYQ0KK29w5+NvIGRlIGxpbmhhIGRlIGNvbWFuZG8gLWspLjwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6DQorIkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+PGJyPg0KK0JSTFRUWV9LRVlCT0FSRF9QUk9QRVJUSUVTPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToNCisiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5BcyBwcm9wcmllZGFkZXMgZG8gdGVjbGFkbw0KKyh2ZWphIGEgb3Dn428gZGUgbGluaGEgZGUgY29tYW5kbyAtSykuPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczsNCittc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz48YnI+DQorQlJMVFRZX01JRElfREVWSUNFPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToNCisiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5PIGRpc3Bvc2l0aXZvIE11c2ljYWwNCitJbnN0cnVtZW50IERpZ2l0YWwgSW50ZXJmYWNlICh2ZWphIGEgb3Dn428gZGUgbGluaGEgZGUgY29tYW5kbyAtbSkuPC9zcGFuPjxzcGFuDQorc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPjxicj4NCitCUkxUVFlfUENNX0RFVklDRTwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6DQorIkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+TyBkaXNwb3NpdGl2byBkZSBhdWRpbw0KK2RpZ2l0YWwgKHZlamEgYSBvcOfjbyBkZSBsaW5oYSBkZSBjb21hbmRvIC1wKS48L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5Og0KK1RpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPjxicj4NCitCUkxUVFlfUkVMRUFTRV9ERVZJQ0U8L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5Og0KKyJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPlF1ZXJlbmRvIG91IG7jbyBsaWJlcmEgbw0KK2Rpc3Bvc2l0aXZvIHBhcmEgbyBxdWFsIG8gZGlzcGxheSBicmFpbGxlIGVzdOEgbGlnYWRvIHF1YW5kbyBhIHRlbGEgb3UgamFuZWxhDQorYXR1YWwgbuNvIHBvZGUgc2VyIGxpZG8gKHZlamEgYSBvcOfjbyBkZSBsaW5oYSBkZSBjb21hbmRvIC1yKS48L3NwYW4+PHNwYW4NCitzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+PGJyPg0KK0JSTFRUWV9TQ1JFRU5fUEFSQU1FVEVSUzwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6DQorIkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+UGFy4m1lbnRyb3MgcGFyYSBvIGRyaXZlcg0KK2RhIHRlbGEgKHZlamEgYSBvcOfjbyBkZSBsaW5oYSBkZSBjb21hbmRvIC1YKS48L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5Og0KK1RpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPjxicj4NCitCUkxUVFlfU1BFRUNIX0RSSVZFUjwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6DQorIkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+TyBkcml2ZXIgZG8gc2ludGV0aXphZG9yDQorZGUgdm96ICh2ZWphIGEgb3Dn428gZGUgbGluaGEgZGUgY29tYW5kbyAtcykuPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LWZhbWlseToNCitUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz48YnI+DQorQlJMVFRZX1NQRUVDSF9GSUZPPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToNCisiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5BIHBhc3NhZ2VtIEZJRk8gZGEgdm96ICgNCit2ZWphIGEgb3Dn428gZGUgbGluaGEgZGUgY29tYW5kbyAtRikuPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczsNCittc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz48YnI+DQorQlJMVFRZX1NQRUVDSF9QQVJBTUVURVJTPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToNCisiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5QYXLibWV0cm9zIHBhcmEgbyBkcml2ZXINCitkbyBzaW50ZXRpemFkbyBkZSB2b3ogKCB2ZWphIGEgb3Dn428gZGUgbGluaGEgZGUgY29tYW5kbyAtUykuPC9zcGFuPjxzcGFuDQorc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPjxicj4NCitCUkxUVFlfVEVYVF9UQUJMRTwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6DQorIkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+QSB0YWJlbGEgZGUgdGV4dG8gKCB2ZWphIGENCitvcOfjbyBkZSBsaW5oYSBkZSBjb21hbmRvIC10KS48L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5Og0KKyJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPjxicj4NCistRmZpbGUgLS1zcGVlY2gtZmlmbz1maWxlPG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+RXNwZWNpZmljYSBhIEZJRk8gKHVtDQorYXJxdWl2byBlc3BlY2lhbCBxdWUgZnVuY2lvbmEgY29tbyB1bSB0dWJvKSBxdWUg6SB1c2FkbyBwb3Igb3V0cmFzIGFwbGljYef1ZXMNCitxdWUgZGVzZWphbSB0ZXIgYWNlc3NvIGFvIGRyaXZlciBCUkxUVFkgZGEgZmFsYS4gU2UgbuNvIOkgZXNwZWNpZmljYWRvLCBGSUZPDQorbuNvIOkgY3JpYWRvLiBWZWphIGFzIGNvbmZpZ3VyYef1ZXMgZG8gYXJxdWl2byBzcGVlY2gtZmlmbyBwYXJhIGEgY29uZmlndXJh5+NvDQorcGFkcuNvIGRlIHJ1bi10aW1lLiBFc3RhIG9w5+NvIG7jbyBlc3RhcuEgZGlzcG9u7XZlbCBzZSBhIG9w5+NvIGRlIGNvbnN0cnXn428NCistLWRpc2FibGUtc3BlZWNoLXN1cHBvcnQgJm5ic3A7Zm9pIGVzcGVjaWZpY2FkYS48L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5Og0KK1RpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPjxicj4NCistaSAtLWluc3RhbGwtc2VydmljZTwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6DQorIkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+SW5zdGFsYSBvIEJSTFRUWSBjb21vIG8NCitzZXJ2aedvIEJybEFQSS4gSXNzbyBzaWduaWZpY2EgcXVlOjwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7DQorbXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD4mbmJzcDs8L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dCBzdHlsZT0ndGV4dC1pbmRlbnQ6MzUuNHB0Jz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+tw0KK0JSTFRUWSBzZXLhIGluaWNpYWRvIGF1dG9tYXRpY2FtZW50ZSBxdWFuZG8gbyBzaXN0ZW1hIOkgaW5pY2lhbGl6YWRvLjwvc3Bhbj48c3Bhbg0KK3N0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0IHN0eWxlPSd0ZXh0LWluZGVudDozNS40cHQnPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz63DQorQXBsaWNh5/VlcyBwb2RlbSBzYWJlciBxdWUgdW0gc2Vydmlkb3IgQnJsQVBJIGVzdOEgc2VuZG8gZXhlY3V0YWRvLjwvc3Bhbj48c3Bhbg0KK3N0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5Fc3RhIG9w5+NvIHPzIOkgc3Vwb3J0YWRvDQorbmEgcGxhdGFmb3JtYSBXaW5kb3dzLjwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6DQorIkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBsYW5nPUVOLVVTIHN0eWxlPSdmb250LXNpemU6MTEuMHB0O21zby1hbnNpLWxhbmd1YWdlOg0KK0VOLVVTJz48YnI+DQorLUtuYW1lPXZhbHVlLC4uLiAtLWtleWJvYXJkLXByb3BlcnRpZXM9bmFtZT12YWx1ZSwuLi48L3NwYW4+PHNwYW4gbGFuZz1FTi1VUw0KK3N0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciO21zby1hbnNpLWxhbmd1YWdlOg0KK0VOLVVTJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5Fc3BlY2lmaWNhIGFzIHByb3ByaWVkYWRlcw0KK2RvIHRlY2xhZG8ocykgYSBzZXIgbW9uaXRvcmFkby4gU2UgYSBtZXNtYSBwcm9wcmllZGFkZSBmb3IgZXNwZWNpZmljYWRhIG1haXMgZGUNCit1bWEgdmV6LCBhIHN1YSBhdHJpYnVp5+NvIG1haXMgYSBkaXJlaXRhIOkgdXNhZGEuIENvbnN1bHRlIGEgc2Xn428gS2V5Ym9hcmQNCitQcnBlcnRpZXMgcGFyYSBvYnRlciB1bWEgbGlzdGEgZGFzIHByb3ByaWVkYWRlcyBxdWUgcG9kZW0gc2VyIGVzcGVjaWZpY2FkYXMuDQorVmVqYSBhcyBjb25maWd1cmHn9WVzIGRvIGFycXVpdm8ga2V5Ym9hcmQtcHJvcGVydGllcyBwYXJhIGEgY29uZmlndXJh5+NvIHBhZHLjbw0KK2RlIHJ1bi10aW1lLjwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+PGJyPg0KKy1NY3NlY3MgLS1tZXNzYWdlLWRlbGF5PWNzZWNzPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToNCisiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5Fc3BlY2lmaWNhIGEgcXVhbnRpZGFkZSBkZQ0KK3RlbXBvIChlbSBjZW506XNpbW9zIGRlIHNlZ3VuZG8pIHF1ZSBvIEJSTFRUWSBtYW506W0gc2V1IHBy83ByaW8gZ2VyYWRvciBkZQ0KK21lbnNhZ2VucyBpbnRlcm5hbWVudGUgbm8gZGlzcGxheSBicmFpbGxlLiBTZSBu428gZm9yIGVzcGVjaWZpY2FkbywgZW50428gNDAwDQorKDQgc2VndW5kb3MpIOkgYXNzdW1pZGEuPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToNCisiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz4tTiAtLW5vLWFwaTwvc3Bhbj48c3Bhbg0KK3N0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5EZXNhdGl2YSBhIGludGVyZmFjZSBkZQ0KK3Byb2dyYW1h5+NvIGRlIGFwbGljYXRpdm8uPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToNCisiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz48YnI+DQorLVBmaWxlIC0tcGlkLWZpbGU9ZmlsZTwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6DQorIkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+RXNwZWNpZmljYSBvIGFycXVpdm8gb25kZQ0KK28gQlJMVFRZIGVzY3JldmUgbyBzZXUgaWRlbnRpZmljYWRvciBkZSBwcm9jZXNzbyAoUElEKS4gU2UgbuNvIGVzcGVjaWZpY2FkbywNCitCUkxUVFkgbuNvIGVzY3JldmUgbyBzZXUgcHJvY2Vzc28gZGUgaWRlbnRpZmljYefjbyBlbSBxdWFscXVlciBsdWdhci48L3NwYW4+PHNwYW4NCitzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+PGJyPg0KKy1SIC0tcmVtb3ZlLXNlcnZpY2U8L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5Og0KKyJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPlJlbW92ZSBvIHNlcnZp528gQnJsQVBJLg0KK0lzc28gc2lnbmlmaWNhIHF1ZTo8L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5Og0KKyJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPrcgQlJMVFRZIG7jbyBzZXLhIGluaWNpYWRvDQorYXV0b21hdGljYW1lbnRlIHF1YW5kbyBvIHNpc3RlbWEg6SBpbmljaWFsaXphZG8uPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LWZhbWlseToNCitUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz63IEFwbGljYef1ZXMgcG9kZW0gc2FiZXINCitxdWUgbmVuaHVtIHNlcnZpZG9yIEJybEFQSSBlc3ThIHNlbmRvIGV4ZWN1dGFkby48L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5Og0KK1RpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPkVzdGEgb3Dn428gc/Mg6SBzdXBvcnRhZG8NCituYSBwbGF0YWZvcm1hIFdpbmRvd3MuPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToNCisiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIGxhbmc9RU4tVVMgc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQ7bXNvLWFuc2ktbGFuZ3VhZ2U6DQorRU4tVVMnPjxicj4NCistU1tkcml2ZXI6XW5hbWU9dmFsdWUsLi4uIC0tc3BlZWNoLXBhcmFtZXRlcnM9W2RyaXZlcjpdbmFtZT12YWx1ZSwuLi48L3NwYW4+PHNwYW4NCitsYW5nPUVOLVVTIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciOw0KK21zby1hbnNpLWxhbmd1YWdlOkVOLVVTJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5Fc3BlY2lmaWNhIG9zIHBhcuJtZXRyb3MNCitwYXJhIG9zIGRyaXZlcnMgZG8gc2ludGV0aXphZG9yIGRlIHZvei4gU2UgbyBtZXNtbyBwYXLibWV0cm8g6SBlc3BlY2lmaWNhZG8NCittYWlzIGRlIHVtYSB2ZXosIGEgc3VhIGF0cmlidWnn428gbWFpcyBhIGRpcmVpdGEg6SB1c2FkYS4gU2UgdW0gbm9tZSBkZQ0KK3BhcuJtZXRybyDpIHF1YWxpZmljYWRvIHBvciB1bSBkcml2ZXIgKGNvbnN1bHRlIGEgc2Xn428gQ/NkaWdvIGRlIElkZW50aWZpY2Hn428NCitkZSBEcml2ZXJzKSwgZW50428gZXNzYSBjb25maWd1cmHn428gc/Mgc2UgYXBsaWNhIGFvIGRyaXZlciwgc2UgbuNvIHNlIGFwbGljYSBhDQordG9kb3Mgb3MgZHJpdmVycy4gUGFyYSBvYnRlciB1bWEgZGVzY3Jp5+NvIGRvcyBwYXLibWV0cm9zIGFjZWl0b3MgcG9yIHVtIGRyaXZlcg0KK2VzcGVj7WZpY28sIGNvbnN1bHRlIGEgZG9jdW1lbnRh5+NvIGRvIGRyaXZlci4gVmVqYSBhcyBjb25maWd1cmHn9WVzIGRvIGFycXVpdm8NCitzcGVlY2gtcGFyYW1ldGVycyBwYXJhIGEgY29uZmlndXJh5+NvIHBhZHLjbyBkZSBydW4tdGltZS48L3NwYW4+PHNwYW4NCitzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+PG86cD4mbmJzcDs8L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+LVVjc2Vjcw0KKy0tdXBkYXRlLWludGVydmFsPWNzZWNzPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToNCisiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5Fc3BlY2lmaWNhIG8gaW50ZXJ2YWxvIChlbQ0KK2NlbnTpc2ltb3MgZGUgc2VndW5kbykgZW0gcXVlIGEgamFuZWxhIGRvIGJyYWlsbGUg6SBhdHVhbGl6YWRhIGNvbSBvIG5vdm8NCitjb250ZfpkbyBkYSB0ZWxhLiBTZSBu428gZm9yIGVzcGVjaWZpY2FkbywgZW50428sIDQgKDQwIG1pbGlzZWd1bmRvcykg6Q0KK2Fzc3VtaWRvLjwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+PGJyPg0KKy1WIC0tdmVyc2lvbjwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+TW9zdHJhIGEgdmVyc+NvIGF0dWFsIGRvDQorQlJMVFRZLCBkbyBsYWRvIGRvIHNlcnZpZG9yIGRlIHN1YSBpbnRlcmZhY2UgZGUgcHJvZ3JhbWHn428gZGUgYXBsaWNhdGl2bywgZQ0KK2RvcyBkcml2ZXJzIHF1ZSBmb3JhbSBsaWdhZG9zIGFvIHNldSBiaW7hcmlvLCBlIGRlcG9pcyBzYWkuIFNlIGEgb3Dn428tcSBu428NCitmb3IgZXNwZWNpZmljYWRvLCBlbnTjbyB0YW1i6W0gZXhpYmlyIGluZm9ybWHn9WVzIGRlIGRpcmVpdG9zIGF1dG9yYWlzLjwvc3Bhbj48c3Bhbg0KK3N0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIGxhbmc9RU4tVVMgc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQ7bXNvLWFuc2ktbGFuZ3VhZ2U6DQorRU4tVVMnPjxicj4NCistWFtkcml2ZXI6XW5hbWU9dmFsdWUsLi4uIC0tc2NyZWVuLXBhcmFtZXRlcnM9W2RyaXZlcjpdbmFtZT12YWx1ZSwuLi48L3NwYW4+PHNwYW4NCitsYW5nPUVOLVVTIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciOw0KK21zby1hbnNpLWxhbmd1YWdlOkVOLVVTJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5Fc3BlY2lmaWNhIG9zIHBhcuJtZXRyb3MNCitwYXJhIG9zIGRyaXZlcnMgZGEgdGVsYS4gU2UgbyBtZXNtbyBwYXLibWV0cm8g6SBlc3BlY2lmaWNhZG8gbWFpcyBkZSB1bWEgdmV6LCBhDQorc3VhIGF0cmlidWnn428gbWFpcyBhIGRpcmVpdGEg6SB1c2FkYS4gU2UgdW0gbm9tZSBkZSBwYXLibWV0cm8g6SBxdWFsaWZpY2Fkbw0KK3BvciB1bSBkcml2ZXIgKGNvbnN1bHRlIGEgc2Xn428gRHJpdmVycyBTdXBvcnRhZG9zIGRlIFRlbGEpLCBlbnTjbyBlc3NhDQorY29uZmlndXJh5+NvIHPzIHNlIGFwbGljYSBhIGVzc2UgZHJpdmVyLCBzZSBu428g6SwgZW50428gc2UgYXBsaWNhIGEgdG9kb3Mgb3MNCitkcml2ZXJzLiBQYXJhIG9idGVyIHVtYSBkZXNjcmnn428gZG9zIHBhcuJtZXRyb3MgYWNlaXRvcyBwb3IgdW0gZHJpdmVyDQorZXNwZWPtZmljbywgY29uc3VsdGUgYSBkb2N1bWVudGHn428gZG8gZHJpdmVyLiBWZWphIGFzIGNvbmZpZ3VyYef1ZXMgZG8gYXJxdWl2bw0KK3NjcmVlbi1wYXJhbWV0ZXJzIHBhcmEgYSBjb25maWd1cmHn428gcGFkcuNvIGRlIHJ1bi10aW1lLjwvc3Bhbj48c3Bhbg0KK3N0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxvOnA+Jm5ic3A7PC9vOnA+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nbXNvLWJpZGktZm9udC1zaXplOjE4LjBwdCc+NS4gRGVzY3Jp5/VlcyBkYXMNCitDYXJhY3Rlcu1zdGljYXM8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdtc28tYmlkaS1mb250LXNpemU6MTguMHB0Jz41LjEgQ3Vyc29yIGRlDQorcm90ZWFtZW50bzwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PGJyPg0KKzwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+QW8gbW92ZXIgYSBqYW5lbGEgZGUgQnJhaWxsZSBlbSB0b3JubyBkYQ0KK3RlbGEsIHBhcmEgYW7hbGlzZSBkbyB0ZXh0bywgcG9yIGV4ZW1wbG8sIGVtIHVtIGVkaXRvciwgbXVpdGFzIHZlemVzIHZvY+oNCitwcmVjaXNhIGxldmFyIG8gY3Vyc29yIGF06SB1bSBjYXLhY3RlciBlc3BlY2lmaWNvIGRlbnRybyBkYSBqYW5lbGEgZG8gYnJhaWxsZS4NCitWb2PqIHByb3ZhdmVsbWVudGUgdmFpIGFjaGFyIHF1ZSBpc3NvIHVtYSB0YXJlZmEgYmFzdGFudGUgZGlm7WNpbCBwYXJhIHVtIG76bWVybw0KK2RlIHJhevVlcy4gVW1hIGRlbGFzIOkgcXVlIHZvY+ogcG9kZSBu428gc2FiZXIgb25kZSBlc3ThIG8gY3Vyc29yLCBlIHF1ZSB2b2PqDQorcG9kZSBwZXJkZXIgc2V1IGx1Z2FyIGFvIHRlbnRhciBlbmNvbnRy4S1sby4gT3V0cmEg6SBxdWUgbyBjdXJzb3IgcG9kZSBtb3Zlcg0KK2ltcHJldmlzaXZlbG1lbnRlIHF1YW5kbyBhcyBzZXRhcyBmb3JlbSBwcmVzc2lvbmFkYXMgKGFsZ3VucyBlZGl0b3JlcywgcG9yDQorZXhlbXBsbywgbuNvIHBlcm1pdGVtIHF1ZSBvIGN1cnNvciBzZWphIG1haXMgZGlyZWl0byBhbyBmaW0gZGEgbGluaGEpLiBDdXJzb3INCityb3RlYW1lbnRvIGZvcm5lY2UgYXBlbmFzIGVzc2EgY2FwYWNpZGFkZSBkZSBzYWJlciBvbmRlIGVzdOEgbyBjdXJzb3IsIGF0cmF26XMNCitkYSBzaW11bGHn428gZGFzIHByZW5zYXMgbWVzbWEgc2V0YS1jaGF2ZSBxdWUgdm9j6iB0ZW0gcXVlIGRpZ2l0YXIgbWFudWFsbWVudGUsDQorZSBwZWxvIGFjb21wYW5oYW1lbnRvIGRvIHByb2dyZXNzbyBkbyBjdXJzb3IgcXVlIHNlIG1vdmUuPC9zcGFuPjxzcGFuDQorc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxicg0KK3N0eWxlPSdtc28tc3BlY2lhbC1jaGFyYWN0ZXI6bGluZS1icmVhayc+DQorPCFbaWYgIXN1cHBvcnRMaW5lQnJlYWtOZXdMaW5lXT48YnIgc3R5bGU9J21zby1zcGVjaWFsLWNoYXJhY3RlcjpsaW5lLWJyZWFrJz4NCis8IVtlbmRpZl0+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+QWxndW5zIGRpc3BsYXlzIGJyYWlsbGUNCit06m0gdW0gYm90428sIGNvbmhlY2lkbyBjb21vIHVtYSB0ZWNsYSBkZSBjdXJzb3IsIGFjaW1hIGRlIGNhZGEgY+lsdWxhLiBFc3Nhcw0KK2NoYXZlcyB1c2FtIG8gY29tYW5kbyBST1VURSBwYXJhIGVuY2FtaW5oYXIgbyBjdXJzb3IgcGFyYSBvIGxvY2FsIGRlc2VqYWRvLjwvc3Bhbj48c3Bhbg0KK3N0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48YnI+DQorPGJyPg0KKzwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+Q3Vyc29yIGRlIHJvdGVhbWVudG8g6SBtdWl0byBjb252ZW5pZW50ZQ0KK2UgZWZpY2F6LCBwb3LpbSBu428gdG90YWxtZW50ZSBjb25maeF2ZWwuIFVtYSByYXrjbyBwYXJhIGlzc28g6SBxdWUgYSBzdWENCitpbXBsZW1lbnRh5+NvIGF0dWFsIGFzc3VtZSBWVDEwMCBjdXJzb3Igc2Vx/OpuY2lhcyBkZSBlc2NhcGUgY2hhdmUuIE91dHJhIOkgcXVlDQorYWxndW1hcyBhcGxpY2Hn9WVzIGZhemVtIGNvaXNhcyBmb3JhIGRvIHBhZHLjbyBlbSByZXNwb3N0YSBhbyBkZXRlY3RhciBxdWUgdW1hDQordGVjbGEgZG8gY3Vyc29yIGZvaSBwcmVzc2lvbmFkby4gVW0gcGVxdWVubyBwcm9ibGVtYSBlbmNvbnRyYWRvIGRlbnRybyBkZQ0KK2FsZ3VucyBlZGl0b3JlcyAoY29tbyB2aSksIGNvbW8gauEgbWVuY2lvbmFkbyBhY2ltYSwg6SBxdWUgZWxlcyBqb2dhbSBlbSBhbGd1bQ0KK21vdmltZW50byBpbXByZXZpc+12ZWwgaG9yaXpvbnRhbCBxdWFuZG8gbyBtb3ZpbWVudG8gdmVydGljYWwg6SBzb2xpY2l0YWRvDQorcG9ycXVlIGVsZXMgbuNvIHBlcm1pdGVtIHF1ZSBvIGN1cnNvciBmaXF1ZW0g4CBkaXJlaXRhIGRvIGZpbmFsIGRlIHVtYSBsaW5oYSAuDQorVW0gZG9zIHByaW5jaXBhaXMgcHJvYmxlbWFzIGVuY29udHJhZG9zIGRlbnRybyBkZSBhbGd1bnMgbmF2ZWdhZG9yZXMgd2ViIChjb21vDQorbyBseW54KSDpIHF1ZSBhcyB0ZWNsYXMgZGUgc2V0YSBwYXJhIGJhaXhvL2NpbWEgc+NvIHVzYWRhcyBwYXJhIG1vdmVyIGVudHJlIG9zDQorbGlua3MgKHF1ZSBwb2RlbSBzYWx0YXIgbGluaGFzIGUgLyBvdSBtb3ZlciBvIGN1cnNvciBob3Jpem9udGFsbWVudGUsIG1hcyBxdWUNCityYXJhbWVudGUgbW92ZSBvIGN1cnNvciB1bWEgbGluaGEgbmEgZGlyZefjbyBkZXNlamFkYSksIGUgcXVlIGEgZXNxdWVyZGEgZQ0KK3RlY2xhcyBkZSBzZXRhIHBhcmEgYSBkaXJlaXRhIHPjbyB1c2Fkb3MgcGFyYSBzZWxlY2lvbmFyIGFzIGxpZ2Hn9WVzIChxdWUgbuNvDQordGVtIGFic29sdXRhbWVudGUgbmFkYSBhIHZlciBjb20gcXVhbHF1ZXIgZm9ybWEgZGUgbW92aW1lbnRvIGRvIGN1cnNvciBxdWUNCitzZWphLCBlIHF1ZSBhdOkgbXVkYSB0b3RhbG1lbnRlIG8gY29udGX6ZG8gZGEgdGVsYSkuPC9zcGFuPjxzcGFuDQorc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxicj4NCis8YnI+DQorPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5DdXJzb3IgZGUgcm90ZWFtZW50byBu428gZnVuY2lvbmEgbXVpdG8NCitiZW0gZW0gdW0gc2lzdGVtYSBtdWl0byBjYXJyZWdhZG8sIGUgZGVmaW5pdGl2YW1lbnRlIG7jbyBmdW5jaW9uYSBtdWl0byBiZW0gYW8NCit0cmFiYWxoYXIgZW0gdW0gc2lzdGVtYSByZW1vdG8gYXRyYXbpcyBkZSB1bSBsaW5rIGxlbnRvLiBJc3RvIOkgYXNzaW0gcG9ycXVlIGRlDQordG9kYXMgYXMgdmVyaWZpY2Hn9WVzIHF1ZSBkZXZlbSBzZXIgZmVpdG9zIGFvIGxvbmdvIGRvIGNhbWluaG8sIGEgZmltIGRlIGxpZGFyDQorY29tIG8gbW92aW1lbnRvIGRvIGN1cnNvciBpbXByZXZpc+12ZWwsIGEgZmltIGRlIGFzc2VndXJhciBxdWUgcXVhbHF1ZXIgZXJybw0KK3RlbSBwZWxvIG1lbm9zIHVtYSBjaGFuY2UgZGUgbHV0YXIgcGFyYSBzZXIgZGVzZmVpdG8uIE1lc21vIEJSTFRUWSB0ZW50YSBzZXINCitiYXN0YW50ZSBpbnRlbGlnZW50ZSwgYWluZGEgZGV2ZSBlc3NlbmNpYWxtZW50ZSBlc3BlcmFyIHBhcmEgdmVyIG8gcXVlIGFjb250ZWNlDQorYXDzcyBjYWRhIHByZXNzaW9uYW1lbnRvIGRhIHNldGEtY2hhdmUuPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczsNCittc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48YnI+DQorPGJyPg0KKzwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+VW1hIHZleiBxdWUgdW1hIHNvbGljaXRh5+NvIGRlIGN1cnNvciBkZQ0KK3JvdGVhbWVudG8gZm9pIGZlaXRhLCBCUkxUVFkgY29udGludWEgdGVudGFuZG8gZW5jYW1pbmhhciBvIGN1cnNvciBwYXJhIG8gbG9jYWwNCitwcmV0ZW5kaWRvLCBhdOkgdW0gdGVtcG8gbGltaXRlIGRlIGV4cGlyYefjbyBhbnRlcyBxdWUgbyBjdXJzb3IgYWxjYW7nYSBlc3NhIGxvY2FsaXph5+NvLA0KK28gY3Vyc29yIHBhcmVjZSBlc3RhciBzZSBtb3ZlbmRvIG5hIGRpcmXn428gZXJyYWRhLCBvdSBzZSBtdWRhciBwYXJhIHVtDQordGVybWluYWwgdmlydHVhbCBkaWZlcmVudGUuIFVtYSB0ZW50YXRpdmEg6SBmZWl0YSBwYXJhIHVzYXIgbyBtb3ZpbWVudG8NCit2ZXJ0aWNhbCBwYXJhIHRyYXplciBvIGN1cnNvciBwYXJhIGEgbGluaGEgZGlyZWl0YSwgZSwgc2UgZXNzYSBmb3IgYmVtDQorc3VjZWRpZGEsIGVzc2EgdGVudGF0aXZhIOkgZmVpdGEsIGVudONvIHVzYSBvIG1vdmltZW50byBob3Jpem9udGFsIHBhcmEgdHJhemVyDQorbyBjdXJzb3IgcGFyYSBhIGNvbHVuYSBkYSBkaXJlaXRhLiBTZSBvdXRyYSBzb2xpY2l0YefjbyDpIGZlaXRhIGVucXVhbnRvIGFpbmRhDQorc2UgZXN04SBlbSBhbmRhbWVudG8sIGVtIHNlZ3VpZGEsIGEgcHJpbWVpcmEg6SBhbnVsYWRhIGUgbyBzZWd1bmRvIOkgaW5pY2lhZGEuPC9zcGFuPjxzcGFuDQorc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxicj4NCis8YnI+DQorPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5VbSBjdXJzb3IgbWFpcyBzZWd1cm8sIHBvcultIG1lbm9zDQorcG90ZW50ZSBkZSByb3RlYW1lbnRvLCBDU1JKTVBfVkVSVCwgdXNhIGFwZW5hcyBvIG1vdmltZW50byB2ZXJ0aWNhbCBwYXJhIHRyYXplcg0KK28gY3Vyc29yIHBhcmEgcXVhbHF1ZXIgbHVnYXIgbm8gdG9wIGRhIGxpbmhhIGRhIGphbmVsYSBicmFpbGxlLiDJIGVzcGVjaWFsbWVudGUNCiv6dGlsIGVtIHVtIGNvbmp1bnRvIGNvbSBhcyBhcGxpY2Hn9WVzIChjb21vIGx5bngpIG9uZGUgbyBtb3ZpbWVudG8gZG8gY3Vyc29yDQoraG9yaXpvbnRhbCBudW5jYSBkZXZlIHNlciB0ZW50YWRvLjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J21zby1iaWRpLWZvbnQtc2l6ZToxOC4wcHQnPjUuMiBDb3BpYXIgZQ0KK0NvbGFyPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48YnI+DQorPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5Fc3RlIHJlY3Vyc28gcGVybWl0ZSBxdWUgdm9j6iBwZWd1ZSBhbGd1bQ0KK3RleHRvIHF1ZSBq4SBlc3ThIG5hIHRlbGEgZSBkaWdpdOEtbGEgbmEgcG9zaefjbyBhdHVhbCBkbyBjdXJzb3IuIFVzYW5kbyBlbGUNCitlY29ub21pemEgdGVtcG8gZSBldml0YSBlcnJvcyBxdWFuZG8gdW1hIHBl52EgbG9uZ2EgZS9vdSBjb21wbGljYWRhcyBkbyB0ZXh0bw0KK3ByZWNpc2Egc2VyIGNvcGlhZG8sIGUgbWVzbW8gcXVhbmRvIGEgbWVzbWEgcGXnYSBjdXJ0YSBlIHNpbXBsZXMgZG8gdGV4dG8NCitwcmVjaXNhIHNlciBjb3BpYWRvIG11aXRhcyB2ZXplcy4gySBwYXJ0aWN1bGFybWVudGUg+nRpbCBwYXJhIGNvaXNhcyBjb21vIG5vbWVzDQorZGUgYXJxdWl2byBsb25nb3MsIGxpbmhhcyBkZSBjb21hbmRvcyBjb21wbGljYWRvcywgb3MgZW5kZXJl529zIGRlIGUtbWFpbCBlDQorVVJMLiBDb3J0YXIgZSBjb2xhciB0ZXh0byBlbnZvbHZlIHRy6nMgcGFzc29zIHNpbXBsZXM6PC9zcGFuPjxzcGFuDQorc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxicj4NCis8YnI+DQorPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz4mbmJzcDsmbmJzcDsxLiBNYXJxdWUgbyBjYW50byBzdXBlcmlvcg0KK2VzcXVlcmRvIGRhIOFyZWEgcmV0YW5ndWxhciBvdSBubyBpbu1jaW8gZGEg4XJlYSBsaW5lYXIgbmEgdGVsYSwgcXVlIGRldmUgc2VyDQorYWdhcnJhZG8gKGNvcnRlKS4gU2UgbyBkaXNwbGF5IHRlbSBjaGF2ZXMgZGUgcm90ZWFtZW50bywgZW0gc2VndWlkYSwgbW92ZSBhDQoramFuZWxhIGJyYWlsbGUsIHBhcmEgcXVlIG8gcHJpbWVpcm8gY2Fy4WN0ZXIgYSBzZXIgY29ydGFkbyBhcGFyZWNlciBlbSBxdWFscXVlcg0KK2x1Z2FyIGRlbnRybyBkZWxhIGUsIGVtIHNlZ3VpZGE6PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD4mbmJzcDs8L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+tyBJbnZvY2FyIG8gY29tYW5kbyBDVVRCRUdJTiBwYXJhIGluaWNpYXIgdW0NCitub3ZvIGJ1ZmZlciBkZSBjb3J0ZS48L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5Og0KKyJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPrcgSW52b2NhciBvIGNvbWFuZG8gQ1VUQVBQRU5EIHBhcmEgYW5leGFyIGFvDQorYnVmZmVyIGRlIGNvcnRlIGV4aXN0ZW50ZXMsIHByZXNzaW9uYW5kbyBhcyBjaGF2ZSBhc3NvY2lhZGFzIGEgZWxlIGUgZGVwb2lzDQorcHJlc3Npb25hciBhIHRlY2xhIGRlIHJvdGVhbWVudG8gYXNzb2NpYWRvIGNvbSBvIHBlcnNvbmFnZW0uPG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD4mbmJzcDs8L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+Mi4gTWFycXVlIG8gY2FudG8gaW5mZXJpb3INCitkaXJlaXRvIGRhIOFyZWEgcmV0YW5ndWxhciBvdSBvIGZpbSBkYSDhcmVhIGxpbmVhciBuYSB0ZWxhLCBxdWUgZGV2ZSBzZXINCithZ2FycmFkbyAoY29ydGUpLiBTZSBvIGRpc3BsYXkgdGVtIGNoYXZlcyBkZSByb3RlYW1lbnRvLCBtb3ZlIGEgamFuZWxhIGRlDQorYnJhaWxsZSBwYXJhIHF1ZSBvIPpsdGltbyBjYXJhY3RlciBhIHNlciBjb3J0YWRvIGFwYXJlY2UgZW0gcXVhbHF1ZXIgbHVnYXINCitkZW50cm8gZGVsYSBlLCBlbSBzZWd1aWRhOjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPrcgSW52b2NhciBvIGNvbWFuZG8gQ1VUUkVDVCBwYXJhIGNvcnRhciB1bWENCivhcmVhIHJldGFuZ3VsYXIuPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToNCisiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz4mbmJzcDsmbmJzcDu3IEludm9jYXIgbw0KK2NvbWFuZG8gQ1VUTElORSBwYXJhIGNvcnRhciB1bWEg4XJlYSBsaW5lYXIgcHJlc3Npb25hbmRvIGFzIGNoYXZlIGFzc29jaWFkYXMgYQ0KK2VsZSBlIGRlcG9pcyBwcmVzc2lvbmFyIGEgdGVjbGEgZGUgcm90ZWFtZW50byBhc3NvY2lhZG8gY29tIG8gY2Fy4WN0ZXIuDQorTWFyY2FuZG8gbyBmaW0gZGEg4XJlYSBkZSBjb3J0ZSBhY3Jlc2NlbnRhIG8gY29udGX6ZG8gZGEgdGVsYSBzZWxlY2lvbmFkYSBjb20gbw0KK2J1ZmZlciBkZSBjb3J0ZS4gTyBleGNlc3NvIGRlIGVzcGHnbyBlbSBicmFuY28g6SByZW1vdmlkbyBubyBmaW5hbCBkZSBjYWRhDQorbGluaGEgbm8gYnVmZmVyIGRlIGNvcnRlIGRlIG1vZG8gcXVlIG9zIGVzcGHnb3MgaW5kZXNlamFkb3Mgbm8gZmluYWwgbuNvIHbjbw0KK3NlciBjb2xhZG8gcGFyYSB0cuFzIGRvIGNhcuFjdGVyIGRlIGNvbnRyb2xlIHF1ZSBzZXLjbyBzdWJzdGl0de1kb3MgcG9yIGVzcGHnb3MNCitlbSBicmFuY28uPG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PGJyPg0KKzwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+My4gSW5zZXJpciAoY29sYXIpIG8gdGV4dG8gb25kZSBlbGUg6Q0KK25lY2Vzc+FyaW8uIENvbG9xdWUgbyBjdXJzb3Igc29icmUgbyBjYXLhY3RlciBvbmRlIG8gdGV4dG8gZGV2ZSBzZXIgY29sYWRvLCBlDQoraW52b2NhciBvIGNvbWFuZG8gUEFTVEUuIFZvY+ogcG9kZSBjb2xhciBvIG1lc21vIHRleHRvIHZhcmlhcyB2ZXplcyBzZW0NCityZWNvcnRhci4gRXN0YSBkZXNjcmnn428gYXNzdW1lIHF1ZSB2b2PqIGrhIGVzdOEgZW0gYWxndW0gdGlwbyBkZSBtb2RvIGRlDQorZW50cmFkYS4gU2Ugdm9j6iBjb2xhciBxdWFuZG8gdm9j6iBlc3RpdmVyIGVtIGFsZ3VtIG91dHJvIHRpcG8gZGUgbW9kYWxpZGFkZQ0KKyhjb21vIGNvbWFuZG8gdmkpLCBlbnTjbyDpIG1lbGhvciB2b2PqIGVzdGFyIGNpZW50ZSBkZSBxdWUgb3MgY2FyYWN0ZXJlcyBubyBidWZmZXINCitkZSBjb3J0ZSB2428gZmF6ZXIuPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToNCisiQ291cmllciBOZXciJz48YnI+DQorPGJyPg0KKzwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+TyBidWZmZXIgZGUgY29ydGUgdGFtYultIOkgdXNhZG8gcGVsb3MNCitjb21hbmRvcyBQUlNFQVJDSC9OWFNFQVJDSC48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdtc28tYmlkaS1mb250LXNpemU6MTguMHB0Jz41LjMgU3Vwb3J0ZSBkbw0KK1BvbnRlaXJvIChNb3VzZSkgdmlhIEdQTTwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6DQorIkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PGJyPg0KKzwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+U2UgQlJMVFRZIOkgY29uZmlndXJhZG8gY29tIGEgb3Dn428gZGUNCitjb21waWxh5+NvIC0tZW5hYmxlLWdwbSBubyBzaXN0ZW1hIG9uZGUgYSBhcGxpY2Hn428gZ3BtIGZvaSBpbnN0YWxhZGEsIGVtDQorc2VndWlkYSwgZWxlIHZhaSBpbnRlcmFnaXIgY29tIG8gY3Vyc29yIChtb3VzZSkuPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LWZhbWlseToNCitUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48YnI+DQorPGJyPg0KKzwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+TW92ZXIgbyBwb250ZWlybyBlIGFycmFzdGFyIGEgamFuZWxhDQorYnJhaWxsZSAodmVqYSBXaW5kb3cgRm9sbG93cyBQb2ludGVyKS4gU2VtcHJlIHF1ZSBvIHBvbnRlaXJvIOkgbW92aWRvIHBhcmEgYWzpbQ0KK2RhIGJvcmRhIGRhIGphbmVsYSBkbyBicmFpbGxlLCBhIGphbmVsYSBkbyBicmFpbGxlIOkgYXJyYXN0YWRhICh1bSBjYXLhY3RlciBwb3INCit2ZXopLiBJc3RvIGThIGFvIHVzdeFyaW8gYnJhaWxsZSBvdXRyYSBmb3JtYSBiaWRpbWVuc2lvbmFsIHBhcmEgaW5zcGVjaW9uYXIgbw0KK2NvbnRl+mRvIGRhIHRlbGEgb3UgbW92ZXItc2UgcmFwaWRhbWVudGUgYSBqYW5lbGEgYnJhaWxsZSBwYXJhIG8gbG9jYWwNCitkZXNlamFkby4gRWxlIHRhbWLpbSBk4SB1bWEgdmlz428gZGUgb2JzZXJ2YWRvciBkZSBtYW5laXJhIGbhY2lsIHBhcmEgbW92ZXIgYQ0KK2phbmVsYSBkZSBicmFpbGxlIHBhcmEgYWxnbyBxdWUgZWxlIGdvc3RhcmlhIHF1ZSBvIHVzdeFyaW8gQnJhaWxsZSBwb3NzYSBsZXIuPC9zcGFuPjxzcGFuDQorc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxicj4NCis8YnI+DQorPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5PIGdwbSB1c2Egdu1kZW8gcmV2ZXJzbyBwYXJhIG1vc3RyYXIgb25kZQ0KK28gY3Vyc29yIGVzdOEuIFN1YmxpbmhhbmRvIG9zIGNhcmFjdGVyZXMgZW0gZGVzdGFxdWUgKHZlamEgbyBjb21hbmRvIEFUVFJWSVMpDQorZGV2ZSBzZXIgYXRpdmFkbywgcG9ydGFudG8sIHF1YW5kbyBvIHVzdeFyaW8gYnJhaWxsZSBwcmV0ZW5kZSB1c2FyIG8gcG9udGVpcm8uPC9zcGFuPjxzcGFuDQorc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxicj4NCis8YnI+DQorPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5Fc3NlIHJlY3Vyc28gdGFtYultIHBlcm1pdGUgbyBhY2Vzc28gZG8NCit1c3XhcmlvIGVtIEJyYWlsbGUgcGFyYSBncG0g6SBjb3J0YWRvIGUgY29sYWRvLiBFbWJvcmEgdm9j6iBkZXZlIGxlciBhDQorZG9jdW1lbnRh5+NvIHBy83ByaWEgZ3BtLCBhcXVpIGVzdONvIGFsZ3VtYXMgbm90YXMgc29icmUgYSBmb3JtYSBjb21vIGVsZQ0KK2Z1bmNpb25hLjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgIDwvc3Bhbj63IEPzcGlhIGRvIGNhcuFjdGVyIGF0dWFsIHBhcmEgbyBidWZmZXINCitjb3J0YWRvIHBvciB1bSD6bmljbyBjbGlxdWUgY29tIG8gYm90428gZXNxdWVyZG8uPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LWZhbWlseToNCitUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goCA8L3NwYW4+tyBD83BpYSBkYSBwYWxhdnJhIGF0dWFsIChlc3Bh528gZGVsaW1pdGFkbykNCitwYXJhIG8gYnVmZmVyIGRlIGNvcnRlIGNvbSB1bSBkdXBsbyBjbGlxdWUgY29tIG8gYm90428gZXNxdWVyZG8uPC9zcGFuPjxzcGFuDQorc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgIDwvc3Bhbj63IEPzcGlhIGRhIGxpbmhhIGF0dWFsIHBhcmEgbyBidWZmZXIgZGUNCitjb3J0ZSBkZSB0cmlwbG8tY2xpcXVlIGNvbSBvIGJvdONvIGVzcXVlcmRvLjwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6DQorVGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKAgPC9zcGFuPrcgQ/NwaWEgZGUgdW1hIHJlZ2njbyBsaW5lYXIgcGFyYSBvIGJ1ZmZlcg0KK2RlIGNvcnRlIGRhIHNlZ3VpbnRlIGZvcm1hOjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOzEuDQorQ29sb3F1ZSBvIHBvbnRlaXJvIGRvIG1vdXNlIHNvYnJlIG8gcHJpbWVpcm8gY2Fy4WN0ZXIgZGEgcmVnaeNvLjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz4mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsyLg0KK1ByZXNzaW9uZSAoZSBtYW50ZW5oYSBwcmVzc2lvbmFkbykgbyBib3TjbyBlc3F1ZXJkby48L3NwYW4+PHNwYW4NCitzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7My4NCitNb3ZhIG8gcG9udGVpcm8gcGFyYSBvIPpsdGltbyBjYXLhY3RlciBkYSByZWdp428gKHRvZG9zIG9zIGNhcmFjdGVyZXMNCitzZWxlY2lvbmFkb3Mgc+NvIGRlc3RhY2Fkb3MpLjwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6DQorIkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7NC4NCitTb2x0ZSBvIGJvdONvIGVzcXVlcmRvLjwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6DQorIkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+PG86cD4mbmJzcDs8L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKAgPC9zcGFuPrcgQ29sZSAoZW50cmFkYSkgbyBjb250ZfpkbyBhdHVhbCBkbyBidWZmZXINCitkZSBjb3J0ZSBjbGljYW5kbyBvIGJvdONvIGRvIG1laW8gZG8gbW91c2UgZGUgdHLqcyBib3T1ZXMsIG91IGNsaWNhbmRvIGNvbSBvDQorYm90428gZGlyZWl0byBkbyBtb3VzZSBkZSBkb2lzIGJvdPVlcy48L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzOw0KK21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgIDwvc3Bhbj63IEFwYXJlY2UgcGFyYSBvIGJ1ZmZlciBkZSBjb3J0ZSB1c2FuZG8gbw0KK2JvdONvIGRpcmVpdG8gZG8gbW91c2UgZGUgdHLqcyBib3T1ZXMuPG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+PG86cD4mbmJzcDs8L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nbXNvLWJpZGktZm9udC1zaXplOjE4LjBwdCc+NS40IEFsZXJ0YSBkZQ0KK1R1bmVzPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48YnI+DQorPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5CUkxUVFkgYWxlcnRhIHBhcmEgYSBvY29ycupuY2lhIGRlDQorZXZlbnRvcyBzaWduaWZpY2F0aXZvcywgdG9jYW5kbyBtZWxvZGlhcyBjdXJ0YXMgcHJlZGVmaW5pZGFzLiBFc3RlIHJlY3Vyc28gcG9kZQ0KK3NlciBhdGl2YWRvIGUgZGVzYXRpdmFkbyBjb20gdW0gY29tYW5kbyBUVU5FUyBvdSBvIEFsZXJ0IFR1bmVzLiBBcyBt+nNpY2FzIHPjbw0KK3RvY2FkYXMgYXRyYXbpcyBkbyBhcGl0byBpbnRlcm5vLCBwb3IgcGFkcuNvLCBtYXMgb3V0cmFzIGFsdGVybmF0aXZhcyBwb2RlbSBzZXINCitzZWxlY2lvbmFkYXMgY29tIGEgcHJlZmVy6m5jaWEgZGUgVHVuZSBEZXZpY2UuPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LWZhbWlseToNCitUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48YnI+DQorPGJyPg0KKzwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+Q2FkYSBldmVudG8gc2lnbmlmaWNhdGl2byBlc3ThIGFzc29jaWFkbywNCitkbyBtYWlvciBwYXJhIGEgbWVub3IgcHJpb3JpZGFkZSwgY29tIHVtIG91IG1haXMgZG9zIHNlZ3VpbnRlcyBwcm9jZWRpbWVudG9zOjwvc3Bhbj48c3Bhbg0KK3N0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48YnI+DQorPGJyPg0KKzwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+YSB0dW5lPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LWZhbWlseToNCitUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5TZSB1bWEgbfpzaWNhIHRlbSBzaWRvDQorYXNzb2NpYWRvIGNvbSBvIGV2ZW50bywgc2UgbyBBbGVydCBUdW5lcyAodmVqYSB0YW1i6W0gbyBjb21hbmRvIFRVTkVTKSBlc3ThDQorYXRpdm8gZSBzZSBvIGRpc3Bvc2l0aXZvIGRlIGFqdXN0ZSBmb3Igc2VsZWNpb25hZG8gKHZlamEgYSBwcmVmZXLqbmNpYSBkZQ0KK0Rpc3Bvc2l0aXZvcyBUdW5lKSBwb2RlIHNlciBhYmVydG8sIGVudONvIGEgbfpzaWNhIOkgdG9jYWRhLjwvc3Bhbj48c3Bhbg0KK3N0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48YnI+DQorPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5hIGRvdCBwYXR0ZXJuPC9zcGFuPjxzcGFuDQorc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPlNlIHVtIHBhZHLjbyBkZSBwb250b3MgdGVtDQorc2lkbyBhc3NvY2lhZG8gY29tIG8gZXZlbnRvLCBlIHNlIGEgcHJlZmVy6m5jaWEgZG8gQWxlcnQgRG90cyBlc3ThIGF0aXZvLCBlbnTjbw0KK28gcGFkcuNvIGRlIHBvbnRvcyDpIGV4aWJpZG8gcmFwaWRhbWVudGUgZW0gY2FkYSBj6Wx1bGEgYnJhaWxsZS4gQWxndW5zDQorZGlzcGxheXMgYnJhaWxsZSBu428gcmVzcG9uZGVtIGNvbSByYXBpZGV6IHN1ZmljaWVudGUgcGFyYSBxdWUgZXN0ZSBtZWNhbmlzbW8NCitmdW5jaW9uZSBkZSBmb3JtYSBlZmljYXouPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToNCisiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48YnI+DQorPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5hIG1lc3NhZ2U8L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5Og0KK1RpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPlNlIGEgbWVuc2FnZW0gdGVtIHNpZG8NCithc3NvY2lhZGEgY29tIG8gZXZlbnRvLCBlIHNlIGEgcHJlZmVy6m5jaWEgQWxlcnQgTWVzc2FnZXMgZXN0aXZlciBhdGl2YSwgZWxhIOkNCitleGliaWRvIHBvciBhbGd1bnMgc2VndW5kb3MgKHZlamEgYSBvcOfjbyAtbSBkZSBsaW5oYSBkZSBjb21hbmRvKS48L3NwYW4+PHNwYW4NCitzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PGJyPg0KKzwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+RXN0ZXMgZXZlbnRvcyBpbmNsdWVtOjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQgc3R5bGU9J3RleHQtaW5kZW50OjM1LjRwdCc+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPrcNCitRdWFuZG8gbyBkcml2ZXIgZG8gZGlzcGxheSBCcmFpbGxlIGNvbWXnYSBvdSBw4XJhLjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQgc3R5bGU9J3RleHQtaW5kZW50OjM1LjRwdCc+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzOw0KK21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQgc3R5bGU9J3RleHQtaW5kZW50OjM1LjRwdCc+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPrcNCitRdWFuZG8gdW0gY29tYW5kbyBkZW1vcmFkbyBjb25jbHXtLjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQgc3R5bGU9J3RleHQtaW5kZW50OjM1LjRwdCc+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzOw0KK21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQgc3R5bGU9J3RleHQtaW5kZW50OjM1LjRwdCc+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPrcNCitRdWFuZG8gdW0gY29tYW5kbyBu428gcG9kZSBzZXIgZXhlY3V0YWRvLjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQgc3R5bGU9J3RleHQtaW5kZW50OjM1LjRwdCc+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzOw0KK21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQgc3R5bGU9J3RleHQtaW5kZW50OjM1LjRwdCc+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPrcNCitRdWFuZG8gdW1hIG1hcmNhIOkgZGVmaW5pZGEuPG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dCBzdHlsZT0ndGV4dC1pbmRlbnQ6MzUuNHB0Jz48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7DQorbXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD4mbmJzcDs8L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dCBzdHlsZT0ndGV4dC1pbmRlbnQ6MzUuNHB0Jz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+tw0KK1F1YW5kbyBvIGlu7WNpbyBvdSBvIGZpbSBkbyBibG9jbyBkZSBjb3J0ZSDpIGRlZmluaWRhLjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQgc3R5bGU9J3RleHQtaW5kZW50OjM1LjRwdCc+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzOw0KK21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQgc3R5bGU9J3RleHQtaW5kZW50OjM1LjRwdCc+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPrcNCitRdWFuZG8gdW0gcmVjdXJzbyDpIGF0aXZhZG8gb3UgZGVzYXRpdmFkby48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0IHN0eWxlPSd0ZXh0LWluZGVudDozNS40cHQnPjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczsNCittc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0IHN0eWxlPSd0ZXh0LWluZGVudDozNS40cHQnPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz63DQorUXVhbmRvIG8gY29udHJvbGUgZGUgY3Vyc29yIOkgbGlnYWRvIG91IGRlc2xpZ2Fkby48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0IHN0eWxlPSd0ZXh0LWluZGVudDozNS40cHQnPjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczsNCittc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0IHN0eWxlPSd0ZXh0LWluZGVudDozNS40cHQnPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz63DQorUXVhbmRvIGEgaW1hZ2VtIGRhIHRlbGEg6SBjb25nZWxhZGEgb3UgZGVzY29uZ2VsYWRhLjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQgc3R5bGU9J3RleHQtaW5kZW50OjM1LjRwdCc+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzOw0KK21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQgc3R5bGU9J21hcmdpbi1sZWZ0OjM1LjRwdCc+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPrcNCitRdWFuZG8gYSBqYW5lbGEgYnJhaWxsZSBlbnZvbHZpZGEgb3UgYXTpIG8gaW7tY2lvIGRhIHBy83hpbWEgPHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKCgPC9zcGFuPmxpbmhhIG91IGF06SBvIGZpbSBkYSBsaW5oYSBhbnRlcmlvci48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0IHN0eWxlPSd0ZXh0LWluZGVudDozNS40cHQnPjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczsNCittc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0IHN0eWxlPSd0ZXh0LWluZGVudDozNS40cHQnPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz63DQorUXVhbmRvIGFzIGxpbmhhcyBpZOpudGljYXMgc+NvIGlnbm9yYWRvcy48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0IHN0eWxlPSd0ZXh0LWluZGVudDozNS40cHQnPjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczsNCittc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0IHN0eWxlPSd0ZXh0LWluZGVudDozNS40cHQnPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz63DQorUXVhbmRvIHVtYSBzb2xpY2l0YefjbyBu428gcG9kZSBzZXIgZXhlY3V0YWRhLjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQgc3R5bGU9J3RleHQtaW5kZW50OjM1LjRwdCc+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzOw0KK21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQgc3R5bGU9J3RleHQtaW5kZW50OjM1LjRwdCc+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPrcNCitRdWFuZG8gbyBjdXJzb3IgY29tZedhIG8gcm90ZWFtZW50bywgdGVybWluYSwgb3UgZmFsaGEuPG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dCBzdHlsZT0ndGV4dC1pbmRlbnQ6MzUuNHB0Jz48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7DQorbXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD4mbmJzcDs8L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nbXNvLWJpZGktZm9udC1zaXplOjE4LjBwdCc+NS41IENvbmZpZ3VyYef1ZXMNCitkZSBQcmVmZXLqbmNpYXM8L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxicj4NCis8L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPlF1YW5kbyBCUkxUVFkg6SBpbmljaWFkbywgZWxlIGNhcnJlZ2EgdW0NCithcnF1aXZvIHF1ZSBjb2506W0gYXMgZGVmaW5p5/VlcyBkZSBwcmVmZXLqbmNpYXMuIE8gYXJxdWl2byBu428gcHJlY2lzYSBleGlzdGlyLA0KK2VsZSDpIGNyaWFkbyBwZWxhIHByaW1laXJhIHZleiwgYXMgY29uZmlndXJh5/VlcyBz428gc2FsdmFzIGNvbSBvIGNvbWFuZG8NCitQUkVGU0FWRS4gQXMgY29uZmlndXJh5/VlcyBtYWlzIHJlY2VudGVtZW50ZSBzYWx2YXMgcG9kZW0gc2VyIHJlc3RhdXJhZGFzIGENCitxdWFscXVlciBtb21lbnRvIGNvbSBvIGNvbWFuZG8gUFJFRkxPQUQuPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczsNCittc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48YnI+DQorPGJyPg0KKzwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+TyBub21lIHBhcmEgZXN0ZSBhcnF1aXZvIOkNCisvZXRjL2JybHR0eS1kcml2ZXIucHJlZnMuIE9uZGUgZHJpdmVyIHRlbSBkdWFzIGxldHJhcyBkbyBj82RpZ28gZGUNCitpZGVudGlmaWNh5+NvIGRlIGRyaXZlci48L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5Og0KKyJDb3VyaWVyIE5ldyInPjxicj4NCis8YnI+DQorPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz41LjUuMSBNZW51IGRlIFByZWZlcupuY2lhczwvc3Bhbj48c3Bhbg0KK3N0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48YnI+DQorPGJyPg0KKzwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+QXMgY29uZmlndXJh5/VlcyBkZSBwcmVmZXLqbmNpYXMgc+NvDQorc2Fsdm9zIGNvbW8gZGFkb3MgYmlu4XJpb3MgcXVlLCBwb3J0YW50bywgbuNvIHBvZGUgc2VyIGVkaXRhZG8gbWFudWFsbWVudGUuDQorQlJMVFRZLCBubyBlbnRhbnRvLCB0ZW0gdW0gbWVudSBzaW1wbGVzIGRvIHF1ZSB2b2PqIHBvZGUgZmFjaWxtZW50ZSBtdWThLWxvcy48L3NwYW4+PHNwYW4NCitzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PGJyPg0KKzxicj4NCis8L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPk8gbWVudSDpIGF0aXZhZG8gcGVsbyBjb21hbmRvIFBSRUZNRU5VLiBPDQorZGlzcGxheSBicmFpbGxlICh2ZXIgLW0pIG1vc3RyYSBvIHTtdHVsbyBkbyBtZW51LCBlIGVtIHNlZ3VpZGEsIGFwcmVzZW50YSBvDQoraXRlbSBhdHVhbCBlIHN1YSBjb25maWd1cmHn428gYXR1YWwuPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczsNCittc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48YnI+DQorPGJyPg0KKzwvc3Bhbj41LjUuMS4xIE1lbnUgZGUgPHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPk5hdmVnYefjbzwvc3Bhbj48c3Bhbg0KK3N0eWxlPSdmb250LXNpemU6MTEuMHB0O2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxicj4NCis8L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxicj4NCis8L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPkNvbnN1bHRlIG8gQ29tYW5kb3MgZG8gTWVudSBkZSBOYXZlZ2Hn428NCitwYXJhIGEgbGlzdGEgY29tcGxldGEgZG9zIGNvbWFuZG9zIHF1ZSBwZXJtaXRlbSBxdWUgdm9j6iBzZWxlY2lvbmUgb3MgaXRlbnMgZQ0KK2FsdGVyZSBhcyBjb25maWd1cmHn9WVzIGRlbnRybyBkbyBtZW51LiBQYXJhIGNvbXBhdGliaWxpZGFkZSBjb20gZHJpdmVycw0KK2FudGlnb3MsIG9zIGNvbWFuZG9zIGRlIGphbmVsYSBkbyBtb3ZpbWVudG8sIHF1ZSBhbHRlcmFyYW0gb3Mgc2lnbmlmaWNhZG9zLA0KK25lc3RlIGNvbnRleHRvLCB0YW1i6W0gcG9kZSBzZXIgdXNhZG8uPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczsNCittc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48YnI+DQorPGJyPg0KKzxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gPC9zcGFuPjxzcGFuIHN0eWxlPSdtc28tdGFiLWNvdW50OjEnPqCgoKCgoKCgoKCgoKCgIDwvc3Bhbj48L3NwYW4+PHNwYW4NCitzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+VE9QLyBCT1QsIFRPUF9MRUZUL0JPVF9MRUZULCBQQUdFX1VQL1BBR0VfRE9XTiA8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0IHN0eWxlPSd0ZXh0LWluZGVudDozNS40cHQnPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5Jcg0KK3BhcmEgbyBwcmltZWlybyBpdGVtIC8g+mx0aW1vIG5vIG1lbnUgKG8gbWVzbW8gY29tbzxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQgc3R5bGU9J3RleHQtaW5kZW50OjM1LjRwdCc+PHNwYW4gbGFuZz1FTi1VUw0KK3N0eWxlPSdmb250LXNpemU6MTEuMHB0O21zby1hbnNpLWxhbmd1YWdlOkVOLVVTJz5NRU5VX0ZJUlNUX0lURU0vTUVOVV9MQVNUX0lURU0pLjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQgc3R5bGU9J21hcmdpbi1sZWZ0OjM1LjRwdCc+PHNwYW4gbGFuZz1FTi1VUw0KK3N0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciO21zby1hbnNpLWxhbmd1YWdlOg0KK0VOLVVTJz48YnI+DQorPC9zcGFuPjxzcGFuIGxhbmc9RU4tVVMgc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQ7bXNvLWFuc2ktbGFuZ3VhZ2U6RU4tVVMnPkxOVVAvTE5ETiwNCitQUkRJRkxOL05YRElGTE4sIENVUlNPUl9VUC9DVVJTT1JfRE9XTjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQgc3R5bGU9J21hcmdpbi1sZWZ0OjM1LjRwdCc+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPklyDQorcGFyYSBvIGl0ZW0gYW50ZXJpb3IgLyBzZWd1aW50ZSBubyBtZW51IChvIG1lc21vIHF1ZSBNRU5VX1BSRVZfSVRFTS9NRU5VX05FWFRfSVRFTSkuPC9zcGFuPjxzcGFuDQorc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxicj4NCis8YnI+DQorPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5XSU5VUC9XSU5ETiwgQ0hSTFQvQ0hSUlQsDQorQ1VSU09SX0xFRlQvQ1VSU09SX1JJR0hULCBCQUNLL0hPTUUgRGltaW51aXIgYXVtZW50YXIgLyBkZWZpbmlyIG8gaXRlbSBkZSBtZW51DQorYXR1YWwgKG8gbWVzbW8gcXVlIE1FTlVfUFJFVl9TRVRUSU5HL01FTlVfTkVYVF9TRVRUSU5HKS48L3NwYW4+PHNwYW4NCitzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PGJyDQorc3R5bGU9J21zby1zcGVjaWFsLWNoYXJhY3RlcjpsaW5lLWJyZWFrJz4NCis8IVtpZiAhc3VwcG9ydExpbmVCcmVha05ld0xpbmVdPjxiciBzdHlsZT0nbXNvLXNwZWNpYWwtY2hhcmFjdGVyOmxpbmUtYnJlYWsnPg0KKzwhW2VuZGlmXT48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5Ob3Rhczo8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz63IEFzIGNoYXZlcyBkZSByb3RlYW1lbnRvDQordGFtYultIHBvZGUgc2VyIHVzYWRvIHBhcmEgc2VsZWNpb25hciB1bWEgb3Dn428gcGFyYSBvIGl0ZW0gYXR1YWwuIFNlIG8gaXRlbQ0KK3RlbSBhanVzdGVzIG51belyaWNvcywgZW0gc2VndWlkYSwgdG9kYSBhIGxpbmhhIGRlIGNoYXZlcyBkZSByb3RlYW1lbnRvIGF0dWENCitjb21vIHVtYSBiYXJyYSBkZSByb2xhZ2VtLCBxdWUgYWJyYW5nZSB0b2RhIGEgZ2FtYSBkZSB2YWxvcmVzIHbhbGlkb3MuIFNlIG8NCitpdGVtIHRlbSBjaGFtYWRvIGNvbmZpZ3VyYef1ZXMsIGVudONvIGFzIGNoYXZlcyBkZSByb3RlYW1lbnRvIGNvcnJlc3BvbmRlbSBjb20NCithcyBjb25maWd1cmHn9WVzLjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPrcgVXNlIG8gY29tYW5kbyBQUkVGTE9BRA0KK2Rlc2ZhemVyIHRvZGFzIGFzIGFsdGVyYef1ZXMgcXVlIGZvcmFtIGZlaXRhcyBkZXNkZSBhIHN1YSBlbnRyYWRhIG5vIG1lbnUuPG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+PG86cD4mbmJzcDs8L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+tyBVc2UgbyBjb21hbmRvIFBSRUZNRU5VDQorKG5vdmFtZW50ZSkgcGFyYSBkZWl4YXIgYXMgbm92YXMgY29uZmlndXJh5/VlcyBkZSBmYXRvLCBzYWlyIGRvIG1lbnUsIGUgcmV0b21hcg0KK2Egb3BlcmHn428gbm9ybWFsLiBTZSBhIG9w5+NvICZxdW90O1NhdmUgU2V0dGluZ3Mgb24gRXhpdCZxdW90OyDpIGRlZmluaWRvLA0KK2VudONvLCBhbOltIGRpc3NvLCBhcyBub3ZhcyBjb25maWd1cmHn9WVzIHPjbyBncmF2YWRhcyBubyBhcnF1aXZvIGRlDQorY29uZmlndXJh5/VlcyBkZSBwcmVmZXLqbmNpYXMuIFF1YWxxdWVyIGNvbWFuZG8gbuNvIOkgcmVjb25oZWNpZG8gcGVsbyBzaXN0ZW1hDQorZGUgbWVudSB0YW1i6W0gZmF6IGVzc2FzIGNvaXNhcyBtZXNtby48L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzOw0KK21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxicj4NCis8YnI+DQorPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz41LjUuMS4yIEl0ZW5zIGRlIE1lbnU8L3NwYW4+PHNwYW4NCitzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PGJyPg0KKzxicj4NCis8L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPlNhbHZhciBhbyBzYWlyPC9zcGFuPjxzcGFuDQorc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxicj4NCis8YnI+DQorPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz4mbmJzcDsmbmJzcDsmbmJzcDtBbyBzYWlyIGRvIG1lbnUgZGUNCitwcmVmZXLqbmNpYXM6PC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48YnI+DQorPGJyPg0KKzwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+Jm5ic3A7Jm5ic3A7Jm5ic3A7Tm88bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goCA8L3NwYW4+TuNvIHNhbHZhciBhdXRvbWF0aWNhbWVudGUgYXMgY29uZmlndXJh5/Vlcw0KK2RlIHByZWZlcupuY2lhcy48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48YnI+DQorPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz4mbmJzcDsmbmJzcDsmbmJzcDtZZXM8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goCA8L3NwYW4+U2FsdmFyIGF1dG9tYXRpY2FtZW50ZSBhcyBjb25maWd1cmHn9WVzIGRlDQorcHJlZmVy6m5jaWFzLjwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PGJyPg0KKzxicj4NCis8L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPiZuYnNwOyZuYnNwOyZuYnNwO0EgY29uZmlndXJh5+NvIGluaWNpYWwNCivpIE5vLjwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PGJyPg0KKzxicj4NCis8L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPlRleHQgU3R5bGU8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz4mbmJzcDsmbmJzcDsmbmJzcDtBbyBleGliaXINCitvIGNvbnRl+mRvIGRhIHRlbGEgKHZlamEgbyBjb21hbmRvIERJU1BNRCksIG9zIGNhcmFjdGVyZXMgbW9zdHJhbTo8L3NwYW4+PHNwYW4NCitzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD4mbmJzcDs8L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+Jm5ic3A7Jm5ic3A7Jm5ic3A7OC1kb3Q8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goCA8L3NwYW4+Q29tIG9zIG9pdG8gcG9udG9zLjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPiZuYnNwOyZuYnNwOyZuYnNwOzYtZG90PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKAgPC9zcGFuPkNvbSBhcGVuYXMgcG9udG9zIGRlIDxzdDE6bWV0cmljY29udmVydGVyDQorUHJvZHVjdElEPSIxIGEiIHc6c3Q9Im9uIj4xIGE8L3N0MTptZXRyaWNjb252ZXJ0ZXI+IDYuIFNlIHVtYSB0YWJlbGEgZGUNCitjb250cmHn428gZm9pIHNlbGVjaW9uYWRhKHZlamEgYSBvcOfjbyAtYyBkYSBsaW5oYSBkZSBjb21hbmRvIGUgZGEgdGFiZWxhIGRlDQorY29udHJh5+NvIGRvIGFycXVpdm8gZGU8L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5Og0KKyJDb3VyaWVyIE5ldyInPiA8L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPmNvbmZpZ3VyYefjbyksIGVudONvIGVsZQ0KK+kgdXNhZG8uPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5Fc3RhIGNvbmZpZ3VyYefjbyB0YW1i6W0NCitwb2RlIHNlciBhbHRlcmFkbyBjb20gbyBjb21hbmRvIFNJWERPVFMuPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczsNCittc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48YnI+DQorPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5Ta2lwIElkZW50aWNhbCBMaW5lczxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPlF1YW5kbyBzZSBkZXNsb2NhbSBwYXJhDQorY2ltYSBvdSBwYXJhIGJhaXhvIGV4YXRhbWVudGUgdW1hIGxpbmhhIGNvbSBvcyBjb21hbmRvcyBMTlVQL0xORE4sIGJlbSBjb21vIG8NCityZWN1cnNvIGRlIEZXSU5SVC9GV0lOTFQgZSBjb21hbmRvcyBGV0lOTFRTS0lQL0ZXSU5SVFNLSVA6PC9zcGFuPjxzcGFuDQorc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPiZuYnNwOyZuYnNwOyZuYnNwO05vPG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKAgPC9zcGFuPk7jbyBwdWxlIGxpbmhhcyBwYXNzYWRhcywgcXVlIHTqbSBvIG1lc21vDQorY29udGX6ZG8gZGEgbGluaGEgYXR1YWwuPG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD4mbmJzcDs8L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+Jm5ic3A7Jm5ic3A7Jm5ic3A7WWVzPG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKAgPC9zcGFuPlB1bGEgbGluaGFzIHBhc3NhZGFzLCBxdWUgdOptIG8gbWVzbW8NCitjb250ZfpkbyBkYSBsaW5oYSBhdHVhbC48L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5Og0KKyJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxicj4NCis8L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPiZuYnNwOyZuYnNwOyZuYnNwO0VzdGEgY29uZmlndXJh5+NvDQordGFtYultIHBvZGUgc2VyIGFsdGVyYWRvIGNvbSBvIGNvbWFuZG8gU0tQSURMTlMuPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LWZhbWlseToNCitUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48YnI+DQorPGJyPg0KKzwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+U2tpcCBCbGFuayBXaW5kb3dzPC9zcGFuPjxzcGFuDQorc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxicj4NCis8YnI+DQorPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5RdWFuZG8gc2UgZGVzbG9jYW0gcGFyYSBhIGVzcXVlcmRhIG91DQorZGlyZWl0YSwgY29tIG9zIGNvbWFuZG9zIEZXSU5MVC9GV0lOUlQ6PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PGJyPg0KKzxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKCgoKAgPC9zcGFuPjwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1zaXplOg0KKzExLjBwdCc+Tm88bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goCA8L3NwYW4+TuNvIHB1bGFyIGphbmVsYXMgZW0gYnJhbmNvLjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxicj4NCis8c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKCgoKCgIDwvc3Bhbj48L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToNCisxMS4wcHQnPlllczxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgIDwvc3Bhbj5QdWxhciBqYW5lbGFzIGVtIGJyYW5jby48L3NwYW4+PHNwYW4NCitzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PGJyPg0KKzxicj4NCis8L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPkVzdGEgY29uZmlndXJh5+NvIHRhbWLpbSBwb2RlIHNlcg0KK2FsdGVyYWRvIGNvbSBvIGNvbWFuZG8gU0tQQkxOS1dJTlMuPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczsNCittc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48YnI+DQorPGJyPg0KKzwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+V2hpY2ggQmxhbmsgV2luZG93czwvc3Bhbj48c3Bhbg0KK3N0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48YnI+DQorPGJyPg0KKzwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+U2UgYXMgamFuZWxhcyBlbSBicmFuY28gZGV2ZW0gc2VyDQoraWdub3JhZG9zOjwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PGJyPg0KKzxicj4NCis8c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKCgoKCgIDwvc3Bhbj48L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToNCisxMS4wcHQnPkFsbDxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgIDwvc3Bhbj5wYXNzYXIgdG9kb3MgZWxlcy48L3NwYW4+PHNwYW4NCitzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+Jm5ic3A7Jm5ic3A7Jm5ic3A7PC9zcGFuPjxzcGFuDQorc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgIDwvc3Bhbj5GaW0gZGEgTGluaGE8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goCA8L3NwYW4+YXBlbmFzIGlnbm9yYXIgYXF1ZWxlcyBxdWUgZXN0428gbm8gZmluYWwNCisoZG8gbGFkbyBkaXJlaXRvKSBkZSB1bWEgbGluaGEuPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczsNCittc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goCA8L3NwYW4+UmVzdG8gZGEgTGluaGE8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goCA8L3NwYW4+YXBlbmFzIGlnbm9yYXIgYXF1ZWxlcyBxdWUgZXN0428gbm8gZmluYWwNCisoZG8gbGFkbyBkaXJlaXRvKSBkZSB1bWEgbGluaGEgZHVyYW50ZSBhIGxlaXR1cmEgcGFyYSBhIGZyZW50ZSwgZSBubyBpbu1jaW8gKGRvDQorbGFkbyBlc3F1ZXJkbykgZGUgdW1hIGxpbmhhIGR1cmFudGUgYSBsZWl0dXJhIHBhcmEgdHLhcy48L3NwYW4+PHNwYW4NCitzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PGJyPg0KKzxicj4NCis8L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPlNsaWRpbmcgV2luZG93PC9zcGFuPjxzcGFuDQorc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxicj4NCis8YnI+DQorPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5TZSBvIGN1cnNvciBlc3ThIGEgc2VyIGNvbnRyb2xhZG8gKHZlamEgbw0KK2NvbWFuZG8gQ1NSVFJLKSwgZSBvIGN1cnNvciBtb3ZlLXNlIGRlbWFzaWFkbyBwZXJ0byAob3UgbWFpcykgdW1hIGRhcyBqYW5lbGEgZG8NCitCcmFpbGxlOjwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PGJyPg0KKzxicj4NCis8c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKCgoKCgIDwvc3Bhbj48L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToNCisxMS4wcHQnPk5vPG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKAgPC9zcGFuPlJlcG9zaWNpb25hciBob3Jpem9udGFsbWVudGUgYSBqYW5lbGEgZGUNCittb2RvIHF1ZSBzdWEgZXh0cmVtaWRhZGUgZXNxdWVyZGEg6SB1bSBt+mx0aXBsbyBkZSBzdWEgbGFyZ3VyYSBkYSBib3JkYQ0KK2VzcXVlcmRhIGRhIHRlbGEuPG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PGJyPg0KKzxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKCgoKAgPC9zcGFuPjwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1zaXplOg0KKzExLjBwdCc+WWVzPG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKAgPC9zcGFuPkhvcml6b250YWxtZW50ZSByZXBvc2ljaW9uYXIgYSBqYW5lbGEgZGUgdGFsDQorZm9ybWEgcXVlIG8gY3Vyc29yLCBtYW50ZW5kby1zZSBuZXNzZSBsYWRvIGRhIGphbmVsYSwgZXN04SBtYWlzIHBy83hpbW8gZG8NCitjZW50cm8uPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48YnI+DQorPGJyPg0KKzwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+RXN0YSBjb25maWd1cmHn428gdGFtYultIHBvZGUgc2VyDQorYWx0ZXJhZG8gY29tIG8gY29tYW5kbyBTTElERVdJTi48L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzOw0KK21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxicj4NCis8YnI+DQorPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5FYWdlciBTbGlkaW5nIFdpbmRvdzwvc3Bhbj48c3Bhbg0KK3N0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48YnI+DQorPGJyPg0KKzwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+U2UgYSBqYW5lbGEgZGUgYnJhaWxsZSDpIHNsaWRlOjwvc3Bhbj48c3Bhbg0KK3N0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48YnI+DQorPGJyPg0KKzxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKCgoKAgPC9zcGFuPjwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1zaXplOg0KKzExLjBwdCc+Tm88bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goCA8L3NwYW4+UmVwb3NpY2lvbuEtbG8gc2VtcHJlIHF1ZSBvIGN1cnNvciBzZSBtb3ZlDQorcGFyYSBhbOltIGRlIHVtYSBvdSBvdXRyYSBleHRyZW1pZGFkZS48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48YnI+DQorPHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgoKCgoCA8L3NwYW4+PC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LXNpemU6DQorMTEuMHB0Jz5ZZXM8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goCA8L3NwYW4+UmVwb3NpY2lvbuEtbG8gc2VtcHJlIHF1ZSBvIGN1cnNvciBtb3ZlLXNlDQorbXVpdG8gcGVydG8gZGUgdW1hIGRhcyBleHRyZW1pZGFkZXMuPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczsNCittc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48YnI+DQorPGJyPg0KKzwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+QSBjb25maWd1cmHn428gaW5pY2lhbCDpIE5vLjwvc3Bhbj48c3Bhbg0KK3N0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48YnI+DQorPGJyPg0KKzwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+V2luZG93IE92ZXJsYXA8L3NwYW4+PHNwYW4NCitzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PGJyPg0KKzxicj4NCis8L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPlF1YW5kbyBzZSBkZXNsb2NhbSBwYXJhIGEgZXNxdWVyZGEgb3UNCitkaXJlaXRhIGNvbSBvcyBjb21hbmRvcyBGV0lOTFQvRldJTlJULCBlc3RhIGNvbmZpZ3VyYefjbyBlc3BlY2lmaWNhIHF1YW50b3MNCitjYXJhY3RlcmVzIGhvcml6b250YWxtZW50ZSBhZGphY2VudGUgamFuZWxhcyBicmFpbGxlIGRldmVtIHNvYnJlcG9yLXNlIHVucyBhb3MNCitvdXRyb3MgcG9yLiBPIGFqdXN0ZSBpbmljaWFsIOkgMC48L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzOw0KK21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxiciBzdHlsZT0nbXNvLXNwZWNpYWwtY2hhcmFjdGVyOmxpbmUtYnJlYWsnPg0KKzwhW2lmICFzdXBwb3J0TGluZUJyZWFrTmV3TGluZV0+PGJyIHN0eWxlPSdtc28tc3BlY2lhbC1jaGFyYWN0ZXI6bGluZS1icmVhayc+DQorPCFbZW5kaWZdPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPkF1dG9SZXBlYXQ8L3NwYW4+PHNwYW4NCitzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PGJyPg0KKzxicj4NCis8L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPkVucXVhbnRvIGEgY2hhdmUgKGNvbWJpbmHn428pIHBhcmEgdW0NCitjb21hbmRvIHBlcm1hbmVjZSBwcmVzc2lvbmFkbzo8L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5Og0KKyJDb3VyaWVyIE5ldyInPjxicj4NCis8YnI+DQorPHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgoKCgoCA8L3NwYW4+PC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LXNpemU6DQorMTEuMHB0Jz5ObzxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgIDwvc3Bhbj5O428gcmVwaXRhIGF1dG9tYXRpY2FtZW50ZSBvIGNvbWFuZG8uPG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PGJyPg0KKzxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKCgoKAgPC9zcGFuPjwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1zaXplOg0KKzExLjBwdCc+WWVzPG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKAgPC9zcGFuPkF1dG9tYXRpY2FtZW50ZSByZXBldGlyIG8gY29tYW5kbyBlbSB1bQ0KK2ludGVydmFsbyByZWd1bGFyLCBhcPNzIHVtIGF0cmFzbyBpbmljaWFsLjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPk9zIHNlZ3VpbnRlcyBjb21hbmRvcyBz428NCitlbGVn7XZlaXMgcGFyYSBhdXRvIHJlcGx5Ojwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6DQorIkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dCBzdHlsZT0ndGV4dC1pbmRlbnQ6MzUuNHB0Jz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+tw0KK08gY29tYW5kbyBMTlVQL0xORE4uPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToNCisiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0IHN0eWxlPSd0ZXh0LWluZGVudDozNS40cHQnPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz63DQorTyBjb21hbmRvIFBSRElGTE4vTlhESUZMTi48L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5Og0KKyJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQgc3R5bGU9J3RleHQtaW5kZW50OjM1LjRwdCc+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPrcNCitPIGNvbWFuZG8gQ0hSTFQvQ0hSUlQuPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToNCisiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0IHN0eWxlPSd0ZXh0LWluZGVudDozNS40cHQnPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz63DQorT3BlcmHn9WVzIHBhbm9y4m1pY2EgZGEgamFuZWxhIEJyYWlsbGUgKHZlciBBdXRvUmVwZWF0IFBhbm5pbmcpLjwvc3Bhbj48c3Bhbg0KK3N0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0IHN0eWxlPSd0ZXh0LWluZGVudDozNS40cHQnPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz63DQorT3BlcmHn9WVzIGRlIFBhZ2UtVXAgZSBQYWdlLURvd24uPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczsNCittc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0IHN0eWxlPSd0ZXh0LWluZGVudDozNS40cHQnPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz63DQorT3BlcmHn9WVzIGRlIGN1cnNvci11cCBlIGN1cnNvci1kb3duLjwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7DQorbXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dCBzdHlsZT0ndGV4dC1pbmRlbnQ6MzUuNHB0Jz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+tw0KK09wZXJh5/VlcyBkZSBjdXJzb3IgZXNxdWVyZGEgZSBjdXJzb3IgZGlyZWl0YS48L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5Og0KK1RpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQgc3R5bGU9J3RleHQtaW5kZW50OjM1LjRwdCc+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPrcNCitPcGVyYef1ZXMgZGUgQmFja3NwYWNlIGUgRGVsZXRlLjwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7DQorbXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dCBzdHlsZT0ndGV4dC1pbmRlbnQ6MzUuNHB0Jz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+tyZuYnNwO0NhcuFjdGVyDQorZGUgZW50cmFkYS48L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxicj4NCis8L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPkFwZW5hcyBhbGd1bnMgZHJpdmVycyBzdXBvcnRhbSBlc3RhDQorZnVuY2lvbmFsaWRhZGUsIGEgcHJpbmNpcGFsIGxpbWl0YefjbyDpIHF1ZSBtdWl0b3MgZGlzcGxheSBicmFpbGxlIG7jbw0KK3NpbmFsaXphbSB0YW50byB0ZWNsYXMgcHJlc3Npb25hZGFzIGUgY2hhdmVzICZuYnNwO2NvbW8gZXZlbnRvcyBzZXBhcmFkb3MNCitkaXN0aW50YW1lbnRlLiBFc3RhIGNvbmZpZ3VyYefjbyB0YW1i6W0gcG9kZSBzZXIgYWx0ZXJhZG8gY29tIG8gY29tYW5kbw0KK0F1dG9SZXBlYXQuIEEgY29uZmlndXJh5+NvIGluaWNpYWwg6SBZRVMuPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczsNCittc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48YnI+DQorPGJyPg0KKzwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+QXV0b1JlcGVhdCBQYW5uaW5nPC9zcGFuPjxzcGFuDQorc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxicj4NCis8YnI+DQorPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5RdWFuZG8gYSBwcmVmZXLqbmNpYSBBdXRvcmVwZWF0IGVzdOENCitoYWJpbGl0YWRhOjwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PGJyPg0KKzxicj4NCis8c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKCgoKCgIDwvc3Bhbj48L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToNCisxMS4wcHQnPk5vPG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKAgPC9zcGFuPk7jbyBo4SBvcGVyYef1ZXMgZGUgYXV0b3JlcGVhdCBkYSBqYW5lbGENCitwYW5vcuJtaWNhIGVtIGJyYWlsbGUuPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToNCisiQ291cmllciBOZXciJz48YnIgc3R5bGU9J21zby1zcGVjaWFsLWNoYXJhY3RlcjpsaW5lLWJyZWFrJz4NCis8IVtpZiAhc3VwcG9ydExpbmVCcmVha05ld0xpbmVdPjxiciBzdHlsZT0nbXNvLXNwZWNpYWwtY2hhcmFjdGVyOmxpbmUtYnJlYWsnPg0KKzwhW2VuZGlmXT48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKCgoKAgPC9zcGFuPjwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+WWVzPG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKAgPC9zcGFuPk9wZXJh5/VlcyBkZSBBdXRvUmVwZWF0IHBhcmEgamFuZWxhDQorcGFub3LibWljYSBlbSBicmFpbGxlLjwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6DQorIkNvdXJpZXIgTmV3Iic+PGJyPg0KKzxicj4NCis8L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPkVzdGEgcHJlZmVy6m5jaWEgYXRpbmdlIG9zIGNvbWFuZG9zDQorRldJTkxUL0ZXSU5SVC4gQSBjb25maWd1cmHn428gaW5pY2lhbCDpIE5vLjwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6DQorVGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PGJyPg0KKzxicj4NCis8L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPkF1dG9SZXBlYXQgRGVsYXk8L3NwYW4+PHNwYW4NCitzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PGJyPg0KKzxicj4NCis8L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPlF1YW5kbyB1bSBjYXLhY3RlciDpIGEgYXV0byByZXBldGl0aXZvLA0KK2VzdGEgY29uZmlndXJh5+NvIGVzcGVjaWZpY2EgYSBxdWFudGlkYWRlIGRlIHRlbXBvICh2ZWphIENvbmZpZ3VyYef1ZXMgZGUgVGVtcG8pLA0KK3F1ZSBkZXZlIHBhc3NhciBhbnRlcyBhdXRvIHJlcGV0aefjbyBjb21l52EuIEEgY29uZmlndXJh5+NvIGluaWNpYWwg6SA1MC48L3NwYW4+PHNwYW4NCitzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PGJyPg0KKzxicj4NCis8L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPkF1dG9SZXBlYXQgSW50ZXJ2YWw8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48YnI+DQorPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5RdWFuZG8gdW0gY2Fy4WN0ZXIgZXN04SBzZW5kbyBhdXRvDQorcmVwZXRpdGl2bywgZXN0YSBjb25maWd1cmHn428gZXNwZWNpZmljYSBhIHF1YW50aWRhZGUgZGUgdGVtcG8gKHZlamEgQ29uZmlndXJh5/Vlcw0KK2RlIFRlbXBvKSBlbnRyZSBjYWRhIHJlZXhlY3Xn428uIEEgY29uZmlndXJh5+NvIGluaWNpYWwg6SAxMC48L3NwYW4+PHNwYW4NCitzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PGJyDQorc3R5bGU9J21zby1zcGVjaWFsLWNoYXJhY3RlcjpsaW5lLWJyZWFrJz4NCis8IVtpZiAhc3VwcG9ydExpbmVCcmVha05ld0xpbmVdPjxiciBzdHlsZT0nbXNvLXNwZWNpYWwtY2hhcmFjdGVyOmxpbmUtYnJlYWsnPg0KKzwhW2VuZGlmXT48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5TaG93IEN1cnNvcjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxicj4NCis8L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPkFvIGV4aWJpciBvIGNvbnRl+mRvIGRhIHRlbGEgKHZlamEgbw0KK2NvbWFuZG8gRElTUE1EKTo8L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5Og0KKyJDb3VyaWVyIE5ldyInPjxicj4NCis8YnI+DQorPHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgoKCgoCA8L3NwYW4+PC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LXNpemU6DQorMTEuMHB0Jz5ObzxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgIDwvc3Bhbj5O428gbW9zdHJhciBvIGN1cnNvci48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48YnI+DQorPHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgoKCgoCA8L3NwYW4+PC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LXNpemU6DQorMTEuMHB0Jz5ZZXM8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goCA8L3NwYW4+TW9zdHJhciBvIGN1cnNvci48L3NwYW4+PHNwYW4NCitzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PGJyPg0KKzxicj4NCis8L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPkVzdGEgY29uZmlndXJh5+NvIHRhbWLpbSBwb2RlIHNlcg0KK2FsdGVyYWRvIGNvbSBvIGNvbWFuZG8gQ1NSVklTLiBBIGNvbmZpZ3VyYefjbyBpbmljaWFsIOkgWWVzLjwvc3Bhbj48c3Bhbg0KK3N0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48YnI+DQorPGJyPg0KKzwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+Q3Vyc29yIFN0eWxlPC9zcGFuPjxzcGFuDQorc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxicj4NCis8YnI+DQorPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5BbyBtb3N0cmFyIG8gY3Vyc29yLCByZXByZXNlbnThLWxvOjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPiZuYnNwOyZuYnNwOyZuYnNwO1VuZGVybGluZTxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgIDwvc3Bhbj5Db20gcG9udG9zIDcgZSA4Ljwvc3Bhbj48c3Bhbg0KK3N0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz4mbmJzcDsmbmJzcDsmbmJzcDs8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goCA8L3NwYW4+QmxvY2s8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goCA8L3NwYW4+Q29tIG9zIG9pdG8gcG9udG9zLjwvc3Bhbj48c3Bhbg0KK3N0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48YnI+DQorPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5Fc3RhIGNvbmZpZ3VyYefjbyB0YW1i6W0gcG9kZSBzZXINCithbHRlcmFkbyBjb20gbyBjb21hbmRvIENTUlNJWkUuPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczsNCittc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48YnI+DQorPGJyPg0KKzwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+QmxpbmtpbmcgQ3Vyc29yPC9zcGFuPjxzcGFuDQorc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxicj4NCis8YnI+DQorPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5RdWFuZG8gbyBjdXJzb3IgZXN04SBhIHNlciBtb3N0cmFkbzo8L3NwYW4+PHNwYW4NCitzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+Jm5ic3A7Jm5ic3A7Jm5ic3A7PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKAgPC9zcGFuPk5vPG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKAgPC9zcGFuPkRlaXhhci1zZSB2aXPtdmVsIG8gdGVtcG8gdG9kby48L3NwYW4+PHNwYW4NCitzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+Jm5ic3A7Jm5ic3A7Jm5ic3A7PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKAgPC9zcGFuPlllczxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgIDwvc3Bhbj5Ub3Ju4S1sbyBhbHRlcm5hZGFtZW50ZSwgdmlz7XZlaXMgZQ0KK2ludmlz7XZlaXMgZGUgYWNvcmRvIGNvbSB1bSAmbmJzcDsmbmJzcDsmbmJzcDsgJm5ic3A7Jm5ic3A7Jm5ic3A7aW50ZXJ2YWxvDQorcHJlZGVmaW5pZG8uPG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD4mbmJzcDs8L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+RXN0YSBjb25maWd1cmHn428gdGFtYultDQorcG9kZSBzZXIgYWx0ZXJhZG8gY29tIG8gY29tYW5kbyBDU1JCTElOSy48L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzOw0KK21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxicj4NCis8YnI+DQorPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5DdXJzb3IgVmlzaWJsZSBUaW1lPC9zcGFuPjxzcGFuDQorc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxicj4NCis8YnI+DQorPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5RdWFuZG8gbyBjdXJzb3IgZXN04SBhIHNlciBwaXNjb3UsIGVzdGENCitjb25maWd1cmHn428gZXNwZWNpZmljYSBvIHBlcu1vZG8gZGUgdGVtcG8gKHZlamEgdGltZSBzZXR0aW5ncykgZHVyYW50ZSBjYWRhDQorY2ljbG8gcXVlIGVzdOEgYSBzZXIgdmlz7XZlbC4gQSBjb25maWd1cmHn428gaW5pY2lhbCDpIGRlIDQwLjwvc3Bhbj48c3Bhbg0KK3N0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48YnI+DQorPGJyPg0KKzwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+Q3Vyc29yIEludmlzaWJsZSBUaW1lPG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PGJyPg0KKzwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+UXVhbmRvIG8gY3Vyc29yIGVzdOEgYSBzZXIgcGlzY291LCBlc3RhDQorY29uZmlndXJh5+NvIGVzcGVjaWZpY2EgbyBwZXLtb2RvIGRlIHRlbXBvICh2ZWphIHRpbWUgc2V0dGluZ3MpIGR1cmFudGUgY2FkYQ0KK2NpY2xvIHF1ZSDpIHNlciBpbnZpc+12ZWwuIEEgY29uZmlndXJh5+NvIGluaWNpYWwg6SBkZSA0MC48L3NwYW4+PHNwYW4NCitzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PGJyDQorc3R5bGU9J21zby1zcGVjaWFsLWNoYXJhY3RlcjpsaW5lLWJyZWFrJz4NCis8IVtpZiAhc3VwcG9ydExpbmVCcmVha05ld0xpbmVdPjxiciBzdHlsZT0nbXNvLXNwZWNpYWwtY2hhcmFjdGVyOmxpbmUtYnJlYWsnPg0KKzwhW2VuZGlmXT48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5TaG93IEN1cnNvcjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxicj4NCis8L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPkFvIGV4aWJpciBvIGNvbnRl+mRvIGRhIHRlbGEgKHZlamEgbw0KK2NvbWFuZG8gRElTUE1EKTo8L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5Og0KKyJDb3VyaWVyIE5ldyInPjxicj4NCis8YnI+DQorPHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgoKCgoCA8L3NwYW4+PC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LXNpemU6DQorMTEuMHB0Jz5ObzxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgIDwvc3Bhbj5O428gbW9zdHJhciBvIGN1cnNvci48L3NwYW4+PHNwYW4NCitzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PGJyDQorc3R5bGU9J21zby1zcGVjaWFsLWNoYXJhY3RlcjpsaW5lLWJyZWFrJz4NCis8IVtpZiAhc3VwcG9ydExpbmVCcmVha05ld0xpbmVdPjxiciBzdHlsZT0nbXNvLXNwZWNpYWwtY2hhcmFjdGVyOmxpbmUtYnJlYWsnPg0KKzwhW2VuZGlmXT48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKCgoKAgPC9zcGFuPjwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+WWVzPG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKAgPC9zcGFuPk1vc3RyYXIgbyBjdXJzb3IuPC9zcGFuPjxzcGFuDQorc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxicj4NCis8YnI+DQorPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5Fc3RhIGNvbmZpZ3VyYefjbyB0YW1i6W0gcG9kZSBzZXINCithbHRlcmFkbyBjb20gbyBjb21hbmRvIENTUlZJUy4gQSBjb25maWd1cmHn428gaW5pY2lhbCDpIFllcy48L3NwYW4+PHNwYW4NCitzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PGJyPg0KKzxicj4NCis8L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPkN1cnNvciBTdHlsZTwvc3Bhbj48c3Bhbg0KK3N0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48YnI+DQorPGJyPg0KKzwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+QW8gbW9zdHJhciBvIGN1cnNvciwgcmVwcmVzZW504S1sbzo8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz4mbmJzcDsmbmJzcDsmbmJzcDtVbmRlcmxpbmU8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goCA8L3NwYW4+Q29tIHBvbnRvcyA3IGUgOC48L3NwYW4+PHNwYW4NCitzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+Jm5ic3A7Jm5ic3A7Jm5ic3A7PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKAgPC9zcGFuPkJsb2NrPG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKAgPC9zcGFuPkNvbSBvcyBvaXRvIHBvbnRvcy48L3NwYW4+PHNwYW4NCitzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PGJyPg0KKzwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+RXN0YSBjb25maWd1cmHn428gdGFtYultIHBvZGUgc2VyDQorYWx0ZXJhZG8gY29tIG8gY29tYW5kbyBDU1JTSVpFLjwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7DQorbXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PGJyPg0KKzxicj4NCis8L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPkJsaW5raW5nIEN1cnNvcjwvc3Bhbj48c3Bhbg0KK3N0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48YnI+DQorPGJyPg0KKzwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+UXVhbmRvIG8gY3Vyc29yIGVzdOEgYSBzZXIgbW9zdHJhZG86PC9zcGFuPjxzcGFuDQorc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPiZuYnNwOyZuYnNwOyZuYnNwO05vPG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKAgPC9zcGFuPkRlaXhhci1zZSB2aXPtdmVsIG8gdGVtcG8gdG9kby48L3NwYW4+PHNwYW4NCitzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+Jm5ic3A7Jm5ic3A7Jm5ic3A7PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKAgPC9zcGFuPlllczxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgIDwvc3Bhbj5Ub3Ju4S1sbyBhbHRlcm5hZGFtZW50ZSwgdmlz7XZlaXMgZQ0KK2ludmlz7XZlaXMgZGUgYWNvcmRvIGNvbSB1bSAmbmJzcDsmbmJzcDsmbmJzcDsgJm5ic3A7Jm5ic3A7Jm5ic3A7aW50ZXJ2YWxvDQorcHJlZGVmaW5pZG8uPG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD4mbmJzcDs8L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+RXN0YSBjb25maWd1cmHn428gdGFtYultDQorcG9kZSBzZXIgYWx0ZXJhZG8gY29tIG8gY29tYW5kbyBDU1JCTElOSy48L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzOw0KK21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxicj4NCis8YnI+DQorPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5DdXJzb3IgVmlzaWJsZSBUaW1lPC9zcGFuPjxzcGFuDQorc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxicj4NCis8YnI+DQorPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5RdWFuZG8gbyBjdXJzb3IgZXN04SBhIHNlciBwaXNjb3UsIGVzdGENCitjb25maWd1cmHn428gZXNwZWNpZmljYSBvIHBlcu1vZG8gZGUgdGVtcG8gKHZlamEgdGltZSBzZXR0aW5ncykgZHVyYW50ZSBjYWRhDQorY2ljbG8gcXVlIGVzdOEgYSBzZXIgdmlz7XZlbC4gQSBjb25maWd1cmHn428gaW5pY2lhbCDpIGRlIDQwLjwvc3Bhbj48c3Bhbg0KK3N0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48YnI+DQorPGJyPg0KKzwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+Q3Vyc29yIEludmlzaWJsZSBUaW1lPC9zcGFuPjxzcGFuDQorc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxicj4NCis8L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPlF1YW5kbyBvIGN1cnNvciBlc3ThIGEgc2VyIHBpc2NvdSwgZXN0YQ0KK2NvbmZpZ3VyYefjbyBlc3BlY2lmaWNhIG8gcGVy7W9kbyBkZSB0ZW1wbyAodmVqYSB0aW1lIHNldHRpbmdzKSBkdXJhbnRlIGNhZGENCitjaWNsbyBxdWUg6SBzZXIgaW52aXPtdmVsLiBBIGNvbmZpZ3VyYefjbyBpbmljaWFsIOkgZGUgNDAuPC9zcGFuPjxzcGFuDQorc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxicg0KK3N0eWxlPSdtc28tc3BlY2lhbC1jaGFyYWN0ZXI6bGluZS1icmVhayc+DQorPCFbaWYgIXN1cHBvcnRMaW5lQnJlYWtOZXdMaW5lXT48YnIgc3R5bGU9J21zby1zcGVjaWFsLWNoYXJhY3RlcjpsaW5lLWJyZWFrJz4NCis8IVtlbmRpZl0+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+U2hvdyBBdHRyaWJ1dGVzPC9zcGFuPjxzcGFuDQorc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxicj4NCis8YnI+DQorPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5BbyBleGliaXIgbyBjb250ZfpkbyBkYSB0ZWxhICh2ZWphIG8NCitjb21hbmRvIERJU1BNRCk6PC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToNCisiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz4mbmJzcDsmbmJzcDsmbmJzcDtObzxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgIDwvc3Bhbj5O428gc3VibGluaGFyIG9zIGNhcmFjdGVyZXMgZW0gZGVzdGFxdWUuPC9zcGFuPjxzcGFuDQorc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPiZuYnNwOyZuYnNwOyZuYnNwOzxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgIDwvc3Bhbj5ZZXM8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goCA8L3NwYW4+U3VibGluaGFyIGNhcmFjdGVyZXMgZW0gZGVzdGFxdWUuPC9zcGFuPjxzcGFuDQorc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxicj4NCis8L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPkVzdGEgY29uZmlndXJh5+NvIHRhbWLpbSBwb2RlIHNlcg0KK2FsdGVyYWRvIGNvbSBvIGNvbWFuZG8gQVRUUlZJUy48L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzOw0KK21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxicj4NCis8YnI+DQorPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5CbGlua2luZyBBdHRyaWJ1dGVzPC9zcGFuPjxzcGFuDQorc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxicj4NCis8YnI+DQorPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5RdWFuZG8gb3MgY2FyYWN0ZXJlcyBlbSBkZXN0YXF1ZSBz428NCitzdWJsaW5oYWRvczo8L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPiZuYnNwOyZuYnNwOyZuYnNwOzxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgIDwvc3Bhbj5ObzxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgIDwvc3Bhbj5EZWl4ZSBvIGluZGljYWRvciB2aXPtdmVsIG8gdGVtcG8gdG9kby48L3NwYW4+PHNwYW4NCitzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+Jm5ic3A7Jm5ic3A7Jm5ic3A7PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKAgPC9zcGFuPlllczxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgIDwvc3Bhbj5GYedhIG8gaW5kaWNhZG9yIGFsdGVybmFkYW1lbnRlIHZpc+12ZWlzIGUNCitpbnZpc+12ZWlzIGRlIGFjb3JkbyBjb20gdW0gaW50ZXJ2YWxvIHByZWRlZmluaWRvLjwvc3Bhbj48c3Bhbg0KK3N0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48YnI+DQorPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5Fc3RhIGNvbmZpZ3VyYefjbyB0YW1i6W0gcG9kZSBzZXINCithbHRlcmFkbyBjb20gbyBjb21hbmRvIEFUVFJCTElOSy48L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzOw0KK21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxicj4NCis8YnI+DQorPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5BdHRyaWJ1dGVzIFZpc2libGUgVGltZTxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxicj4NCis8L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPlF1YW5kbyBvIGNhcuFjdGVyIHN1YmxpbmhhZG8gZW0gZGVzdGFxdWUNCitwaXNjYXIsIGVzdGEgY29uZmlndXJh5+NvIGVzcGVjaWZpY2EgbyBwZXLtb2RvIGRlIHRlbXBvICh2ZWphIHRpbWUgc2V0dGluZ3MpDQorZHVyYW50ZSBjYWRhIGNpY2xvIHF1ZSBlc3ThIGEgc2VyIHZpc+12ZWwuIEEgY29uZmlndXJh5+NvIGluaWNpYWwg6SBkZSAyMC48L3NwYW4+PHNwYW4NCitzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PGJyPg0KKzxicj4NCis8L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPkF0dHJpYnV0ZXMgSW52aXNpYmxlIFRpbWU8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48YnI+DQorPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5RdWFuZG8gbyBjYXLhY3RlciBzdWJsaW5oYWRvIGVtIGRlc3RhcXVlDQorcGlzY2FyLCBlc3RhIGNvbmZpZ3VyYefjbyBlc3BlY2lmaWNhIG8gcGVy7W9kbyBkZSB0ZW1wbyAodmVqYSB0aW1lIHNldHRpbmdzKQ0KK2R1cmFudGUgY2FkYSBjaWNsbyBxdWUg6SBzZXIgaW52aXPtdmVsLiBBIGNvbmZpZ3VyYefjbyBpbmljaWFsIOkgZGUgNjAuPC9zcGFuPjxzcGFuDQorc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxicj4NCis8YnI+DQorPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5CbGlua2luZyBDYXBpdGFsczwvc3Bhbj48c3Bhbg0KK3N0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48YnI+DQorPGJyPg0KKzwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+QW8gZXhpYmlyIG8gY29udGX6ZG8gZGEgdGVsYSAodmVqYSBvDQorY29tYW5kbyBESVNQTUQpOjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPiZuYnNwOyZuYnNwOyZuYnNwO05vPG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKAgPC9zcGFuPkRlaXhhciBtYWn6c2N1bGFzIHZpc+12ZWwgbyB0ZW1wbyB0b2RvLjwvc3Bhbj48c3Bhbg0KK3N0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz4mbmJzcDsmbmJzcDsmbmJzcDs8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goCA8L3NwYW4+WWVzPG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKAgPC9zcGFuPkZh52EgbGV0cmFzIG1hafpzY3VsYXMgYWx0ZXJuYWRhbWVudGUNCit2aXPtdmVpcyBlIGludmlz7XZlaXMgZGUgYWNvcmRvIGNvbSB1bSBpbnRlcnZhbG8gcHJlZGVmaW5pZG8uPC9zcGFuPjxzcGFuDQorc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxicj4NCis8L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPkVzdGEgY29uZmlndXJh5+NvIHRhbWLpbSBwb2RlIHNlcg0KK2FsdGVyYWRvIGNvbSBvIGNvbWFuZG8gQ0FQQkxJTksuPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczsNCittc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48YnI+DQorPGJyPg0KKzwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+Q2FwaXRhbHMgVmlzaWJsZSBUaW1lPC9zcGFuPjxzcGFuDQorc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxicj4NCis8YnI+DQorPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5RdWFuZG8gYXMgbGV0cmFzIG1hafpzY3VsYXMgc+NvDQorZGVzdGFjYWRhcywgZXN0YSBjb25maWd1cmHn428gZXNwZWNpZmljYSBvIHBlcu1vZG8gZGUgdGVtcG8gKHZlamEgdGltZQ0KK3NldHRpbmdzKSBkdXJhbnRlIGNhZGEgY2ljbG8gcXVlIGVzdONvIGEgc2VyIHZpc+12ZWlzLiBBIGNvbmZpZ3VyYefjbyBpbmljaWFsIOkNCitkZSA2MC48L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxicj4NCis8YnI+DQorPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5DYXBpdGFscyBJbnZpc2libGUgVGltZSA8L3NwYW4+PHNwYW4NCitzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PGJyPg0KKzwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+UXVhbmRvIGFzIGxldHJhcyBtYWn6c2N1bGFzIHPjbw0KK2Rlc3RhY2FkYXMsIGVzdGEgY29uZmlndXJh5+NvIGVzcGVjaWZpY2EgbyBwZXLtb2RvIGRlIHRlbXBvICh2ZWphIHRpbWUNCitzZXR0aW5ncykgZHVyYW50ZSBjYWRhIGNpY2xvIHF1ZSBlc3TjbyBhIHNlciBpbnZpc+12ZWwuIEEgY29uZmlndXJh5+NvIGluaWNpYWwNCivpIGRlIDIwLjwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PGJyPg0KKzxicj4NCis8L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPkJyYWlsbGUgRmlybW5lc3M8L3NwYW4+PHNwYW4NCitzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PGJyPg0KKzxicj4NCis8L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPkFqdXN0ZSBhIGNvbnNpc3TqbmNpYSAob3UgcmlnaWRleikgZG9zDQorcG9udG9zIGJyYWlsbGUuIFBvZGUgc2VyIGRlZmluaWRvIGNvbW86PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD4mbmJzcDs8L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dCBzdHlsZT0ndGV4dC1pbmRlbnQ6MzUuNHB0Jz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+tw0KK03heGltbzwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dCBzdHlsZT0ndGV4dC1pbmRlbnQ6MzUuNHB0Jz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+tw0KK0FsdGE8L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQgc3R5bGU9J3RleHQtaW5kZW50OjM1LjRwdCc+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPrcNCitN6WRpYTwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dCBzdHlsZT0ndGV4dC1pbmRlbnQ6MzUuNHB0Jz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+tw0KK0JhaXhvPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0IHN0eWxlPSd0ZXh0LWluZGVudDozNS40cHQnPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz63DQorTe1uaW1vPG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dCBzdHlsZT0ndGV4dC1pbmRlbnQ6MzUuNHB0Jz48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7DQorbXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD4mbmJzcDs8L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+RXNzYSBwcmVmZXLqbmNpYSBlc3ThDQorZGlzcG9u7XZlbCBzb21lbnRlIHNlIHVtIGRyaXZlciBxdWUgc3Vwb3J0YSBlbGUgZXN04SBzZW5kbyB1c2Fkby4gQQ0KK2NvbmZpZ3VyYefjbyBpbmljaWFsIOkgbelkaWEuPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToNCisiQ291cmllciBOZXciJz48YnI+DQorPGJyPg0KKzwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+V2luZG93IEZvbGxvd3MgUG9pbnRlcjwvc3Bhbj48c3Bhbg0KK3N0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48YnI+DQorPGJyPg0KKzwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+QWp1c3RlIGEgc2Vuc2liaWxpZGFkZSBkb3MgcG9udG9zIGJyYWlsbGUNCitwYXJhIHRvY2FyLiBQb2RlIHNlciBkZWZpbmlkbyBjb21vOjwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7DQorbXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dCBzdHlsZT0ndGV4dC1pbmRlbnQ6MzUuNHB0Jz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+tw0KK03heGltbzwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dCBzdHlsZT0ndGV4dC1pbmRlbnQ6MzUuNHB0Jz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+tw0KK0FsdGE8L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQgc3R5bGU9J3RleHQtaW5kZW50OjM1LjRwdCc+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPrcNCitN6WRpYTwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dCBzdHlsZT0ndGV4dC1pbmRlbnQ6MzUuNHB0Jz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+tw0KK0JhaXhvPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0IHN0eWxlPSd0ZXh0LWluZGVudDozNS40cHQnPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz63DQorTe1uaW1vPG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dCBzdHlsZT0ndGV4dC1pbmRlbnQ6MzUuNHB0Jz48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7DQorbXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD4mbmJzcDs8L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+RXNzYSBwcmVmZXLqbmNpYSBlc3ThDQorZGlzcG9u7XZlbCBzb21lbnRlIHNlIHVtIGRyaXZlciBxdWUgc3Vwb3J0YSBlbGUgZXN04SBzZW5kbyB1c2Fkby4gQQ0KK2NvbmZpZ3VyYefjbyBpbmljaWFsIOkgbelkaWEuPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToNCisiQ291cmllciBOZXciJz48YnI+DQorPGJyPg0KKzwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+V2luZG93IEZvbGxvd3MgUG9pbnRlcjwvc3Bhbj48c3Bhbg0KK3N0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48YnI+DQorPGJyPg0KKzwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+QW8gbW92ZXIgbyBkaXNwb3NpdGl2byBkZSBjdXJzb3IgKG1vdXNlKTo8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz4mbmJzcDsmbmJzcDsmbmJzcDtObzxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgIDwvc3Bhbj5O428gYXJyYXN0YXIgYSBqYW5lbGEgYnJhaWxsZS48L3NwYW4+PHNwYW4NCitzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+Jm5ic3A7Jm5ic3A7Jm5ic3A7PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKAgPC9zcGFuPlllczxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgIDwvc3Bhbj5BcnJhc3RlIGEgamFuZWxhIGJyYWlsbGUuPC9zcGFuPjxzcGFuDQorc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxicj4NCis8L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPkVzdGEgcHJlZmVy6m5jaWEg6SBhcGVuYXMgYXByZXNlbnRhZGEgc2UNCithIG9w5+NvIGRlIGNvbXBpbGHn428gLS1lbmFibGUtZ3BtIGZvaSBlc3BlY2lmaWNhZGEuPC9zcGFuPjxzcGFuDQorc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxicj4NCis8YnI+DQorPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5IaWdobGlnaHQgV2luZG93PC9zcGFuPjxzcGFuDQorc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxicj4NCis8YnI+DQorPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5BbyBtb3ZlciBhIGphbmVsYSBkbyBCcmFpbGxlOjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPiZuYnNwOyZuYnNwOyZuYnNwO05vPG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKAgPC9zcGFuPk7jbyBkYXIgZGVzdGFxdWUgYSDhcmVhIGRhIHRlbGEgbm92YS48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz4mbmJzcDsmbmJzcDsmbmJzcDtZZXM8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goCA8L3NwYW4+RGVzdGFxdWUgZGEg4XJlYSBub3ZhIHRlbGEuPC9zcGFuPjxzcGFuDQorc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxicj4NCis8L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPkVzdGUgcmVjdXJzbyBwZXJtaXRlIHF1ZSB1bSBvYnNlcnZhZG9yDQorY29tIHZpc+NvIHBhcmEgdmVyIG9uZGUgZXN04SBhIGphbmVsYSBicmFpbGxlIGUsIHBvcnRhbnRvLCBzYWJlciBvIHF1ZSBvDQordXN14XJpbyBlc3ThIGxlbmRvIDxzdDE6UGVyc29uTmFtZSBQcm9kdWN0SUQ9ImVtIGJyYWlsbGUuIFF1YWxxdWVyIiB3OnN0PSJvbiI+ZW0NCisgYnJhaWxsZS4gUXVhbHF1ZXI8L3N0MTpQZXJzb25OYW1lPiBtb3ZpbWVudG8gZGEgamFuZWxhIGVtIGJyYWlsbGUgKG1hbnVhbCwNCitjb250cm9sZSBkbyBjdXJzb3IsIGV0YyksIGV4Y2V0byBxdWFuZG8gc2UgbW92ZSBlbSByZXNwb3N0YSBhbyBwb250ZWlybyAobW91c2UpDQorbW92aW1lbnRvICh2ZWphIFdpbmRvd3MgRm9sbG93cyBQb2ludGVyKSwgZmF6IGNvbSBxdWUgYSDhcmVhIGRhIHRlbGENCitjb3JyZXNwb25kZW50ZSBhbyBub3ZvIGxvY2FsIGRhIGphbmVsYSBCcmFpbGxlIHNlciBkZXN0YWNhZGEuIFNlIGEgcHJlZmVy6m5jaWENCitTaG93IEF0dHJpYnV0ZXMgZXN04SBoYWJpbGl0YWRhLCBzb21lbnRlIG8gY2FyYWN0ZXJlIGNvcnJlc3BvbmRlbnRlIGFvIGNhbnRvDQorc3VwZXJpb3IgZXNxdWVyZG8gZGEgamFuZWxhIGRvIGJyYWlsbGUg6SBkZXN0YWNhZG8uPC9zcGFuPjxzcGFuDQorc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxicj4NCis8YnI+DQorPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5BbGVydCBUdW5lczwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6DQorVGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PGJyPg0KKzxicj4NCis8L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPlNlbXByZSBxdWUgdW0gZXZlbnRvIHNpZ25pZmljYXRpdm8sIGNvbQ0KK3VtYSBtZWxvZGlhIGFzc29jaWFkYSBvY29ycmUgKHZlciBBbGVydGEgZGUgVHVuZXMpOjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPiZuYnNwOyZuYnNwO05vPG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+TuNvIHRvY2FyIGEgbfpzaWNhLjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPiZuYnNwOyZuYnNwO1llczxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPlRvY2FyIGEgbfpzaWNhLjwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6DQorVGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PGJyPg0KKzwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+RXN0YSBjb25maWd1cmHn428gdGFtYultIHBvZGUgc2VyDQorYWx0ZXJhZG8gY29tIG8gY29tYW5kbyBUVU5FUy4gQSBjb25maWd1cmHn428gaW5pY2lhbCDpIFllcy48L3NwYW4+PHNwYW4NCitzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PGJyPg0KKzxicj4NCis8L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPlR1bmUgRGV2aWNlPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LWZhbWlseToNCitUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48YnI+DQorPGJyPg0KKzwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+VG9jYXIgbfpzaWNhcyBkZSBhbGVydGEgYXRyYXbpcyBkZTo8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5CZWVwZXI8L3NwYW4+PHNwYW4NCitzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD4mbmJzcDs8L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+TyBhcGl0byBpbnRlcm5vIChjb25zb2xlDQorZ2VyYWRvciBkZSB0b20pLiBFc3RhIGNvbmZpZ3VyYefjbyDpIHN1cG9ydGFkYSBlbSBMaW51eCwgbm8gT3BlbkJTRCwgbm8gRnJlZUJTRA0KK2Ugbm8gTmV0QlNELiDJIHNlbXByZSBzZWd1cm8gcGFyYSB1c2FyLCBlbWJvcmEgcG9zc2Egc2VyIHVtIHBvdWNvIGZyYWNvLiBFc3RlDQorZGlzcG9zaXRpdm8gbuNvIGVzdOEgZGlzcG9u7XZlbCBzZSBhIG9w5+NvIGRlIGNvbXBpbGHn428gLS1kaXNhYmxlLWJpcHBlci1zdXBvcnQNCitmb2kgZXNwZWNpZmljYWRhLjwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6DQorIkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+Jm5ic3A7Jm5ic3A7PC9zcGFuPjxzcGFuDQorc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPlBDTTwvc3Bhbj48c3Bhbg0KK3N0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5BIGludGVyZmFjZSBkaWdpdGFsIGRlDQor4XVkaW8gbmEgcGxhY2EgZGUgc29tLiBFc3RhIGNvbmZpZ3VyYefjbyDpIHN1cG9ydGFkYSBubyBMaW51eCAodmlhIC9kZXYvZHNwKSwNCitubyBTb2xhcmlzICh2aWEgL2Rldi9hdWRpbyksIG5vIE9wZW5CU0QgKHZpYSAvZGV2L2F1ZGlvMCksIHNvYnJlIEZyZWVCU0QgKHZpYQ0KKy9kZXYvZHNwKSwgZSBubyBOZXRCU0QgKHZpYSAvZGV2L2F1ZGlvMCkuIEVsZSBu428gZnVuY2lvbmEgcXVhbmRvIGVzdGUNCitkaXNwb3NpdGl2byBq4SBlc3ThIHNlbmRvIHVzYWRvIHBvciBvdXRybyBhcGxpY2F0aXZvLiBFc3RlIGRpc3Bvc2l0aXZvIG7jbyBlc3ThDQorZGlzcG9u7XZlbCBzZSBhIG9w5+NvIGRlIGNvbXBpbGHn428gLS1kaXNhYmxlLXBjbS1zdXBwb3J0IGZvaSBlc3BlY2lmaWNhZGEuPC9zcGFuPjxzcGFuDQorc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPiZuYnNwOyZuYnNwOyZuYnNwOzwvc3Bhbj48c3Bhbg0KK3N0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5NSURJPC9zcGFuPjxzcGFuDQorbGFuZz1FTi1VUyBzdHlsZT0nbXNvLWFuc2ktbGFuZ3VhZ2U6RU4tVVMnPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gbGFuZz1FTi1VUyBzdHlsZT0nbXNvLWFuc2ktbGFuZ3VhZ2U6RU4tVVMnPjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPk8gTXVzaWNhbCBJbnN0cnVtZW50DQorRGlnaXRhbCBJbnRlcmZhY2UgbmEgcGxhY2EgZGUgc29tIHF1ZSBlc3ThIGRlZmluaWRhIOkgY29tcGF07XZlbCBjb20gTGludXgNCisoYXRyYXbpcyBkbyAvZGV2L3NlcXVlbmNlcikuIEVsZSBu428gZnVuY2lvbmEgcXVhbmRvIGVzdGUgZGlzcG9zaXRpdm8gauEgZXN04Q0KK3NlbmRvIHVzYWRvIHBvciBvdXRybyBhcGxpY2F0aXZvLiBFc3RlIGRpc3Bvc2l0aXZvIG7jbyBlc3ThIGRpc3Bvbu12ZWwgc2UgYQ0KK29w5+NvIGRlIGNvbXBpbGHn428gLS1kaXNhYmxlLW1pZGktc3VwcG9ydCBmb2kgZXNwZWNpZmljYWRhLjwvc3Bhbj48c3Bhbg0KK3N0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz4mbmJzcDsmbmJzcDsmbmJzcDs8L3NwYW4+PHNwYW4NCitzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+Rk08bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5PIHNpbnRldGl6YWRvciBkZSBGTSBlbSB1bQ0KK2NhcnTjbyBkZSBBZExpYiwgT1BMMywgU291bmQgQmxhc3Rlciwgb3UgbyBlcXVpdmFsZW50ZSBkZSBzb20uIEVzdGENCitjb25maWd1cmHn428g6SBzdXBvcnRhZGEgPHN0MTpQZXJzb25OYW1lIFByb2R1Y3RJRD0iZW0gTGludXguIE9zIiB3OnN0PSJvbiI+ZW0NCisgTGludXguIE9zPC9zdDE6UGVyc29uTmFtZT4gcmVzdWx0YWRvcyBz428gaW1wcmV2aXPtdmVpcyBlIHBvdGVuY2lhbG1lbnRlIG7jbw0KK211aXRvIGJvbnMsIHNlIGZvciB1c2FkbyBjb20gdW1hIHBsYWNhIGRlIHNvbSBxdWUgbuNvIHN1cG9ydGEgZXNzZSByZWN1cnNvLg0KK0VzdGUgZGlzcG9zaXRpdm8gbuNvIGVzdOEgZGlzcG9u7XZlbCBzZSBhIG9w5+NvIGRlIGNvbXBpbGHn428NCistLWRpc2FibGUtZm0tc3VwcG9ydCBmb2kgZXNwZWNpZmljYWRhLjwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7DQorbXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD4mbmJzcDs8L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+QSBjb25maWd1cmHn428gaW5pY2lhbCDpDQorQmVlcGVyIHNvYnJlIGFzIHBsYXRhZm9ybWFzIHF1ZSBzdXBvcnRhbSwgZSBQQ00gc29icmUgYXMgcGxhdGFmb3JtYXMgcXVlIG7jbyBvDQorZmF6ZW0uPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48YnI+DQorPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5QQ00gVm9sdW1lPG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PGJyPg0KKzwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+U2UgYSBpbnRlcmZhY2UgZGUg4XVkaW8gZGlnaXRhbCBkYSBwbGFjYQ0KK2RlIHNvbSBlc3ThIHNlbmRvIHVzYWRvIHBhcmEgdG9jYXIgYXMgbfpzaWNhcyBhbGVydGEsIGVzdGEgY29uZmlndXJh5+NvDQorZXNwZWNpZmljYSBvIHZvbHVtZSAoY29tbyB1bWEgcG9yY2VudGFnZW0gZG8gbeF4aW1vKSBlbSBxdWUgZXN0428gYSBzZXIgdG9jYWRvLg0KK0EgY29uZmlndXJh5+NvIGluaWNpYWwg6SBkZSA3MC48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5NSURJIFZvbHVtZTxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxicj4NCis8L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPlNlIG8gTXVzaWNhbCBJbnN0cnVtZW50IERpZ2l0YWwgSW50ZXJmYWNlDQorKE1JREkpIGRhIHBsYWNhIGRlIHNvbSBlc3ThIHNlbmRvIHVzYWRvIHBhcmEgdG9jYXIgYXMgbfpzaWNhcyBhbGVydGEsIGVzdGENCitjb25maWd1cmHn428gZXNwZWNpZmljYSBvIHZvbHVtZSAoY29tbyB1bWEgcG9yY2VudGFnZW0gZG8gbeF4aW1vKSBlbSBxdWUgZXN0428NCithIHNlciB0b2NhZG8uIEEgY29uZmlndXJh5+NvIGluaWNpYWwg6SBkZSA3MC48L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5Og0KK1RpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxicj4NCis8YnI+DQorPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5NSURJIEluc3RydW1lbnQ8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48YnI+DQorPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5TZSBvIE11c2ljYWwgSW5zdHJ1bWVudCBEaWdpdGFsIEludGVyZmFjZQ0KKyhNSURJKSBkYSBwbGFjYSBkZSBzb20gZXN04SBzZW5kbyB1c2FkYSBwYXJhIHRvY2FyIGFzIG36c2ljYXMgYWxlcnRhLCBlc3RhDQorY29uZmlndXJh5+NvIGVzcGVjaWZpY2EgcXVhbCBvIGluc3RydW1lbnRvIGEgc2VyIHV0aWxpemFkbyAodmVyIE1JREkgVGFibGUNCitJbnN0cnVtZW50KS4gQSBjb25maWd1cmHn428gaW5pY2lhbCDpIEFjb3VzdGljIEdyYW5kIFBpYW5vLjwvc3Bhbj48c3Bhbg0KK3N0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48YnI+DQorPGJyPg0KKzwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+Rk0gVm9sdW1lPG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PGJyPg0KKzwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+U2UgbyBzaW50ZXRpemFkb3IgRk0gZGEgcGxhY2EgZGUgc29tIGVzdOENCitzZW5kbyB1c2FkbyBwYXJhIHRvY2FyIGFzIG36c2ljYXMgYWxlcnRhLCBlc3RhIGNvbmZpZ3VyYefjbyBlc3BlY2lmaWNhIG8gdm9sdW1lDQorKGNvbW8gdW1hIHBvcmNlbnRhZ2VtIGRvIG3heGltbykgZW0gcXVlIGVzdONvIGEgc2VyIHRvY2Fkby4gQSBjb25maWd1cmHn428NCitpbmljaWFsIOkgZGUgNzAuPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToNCisiQ291cmllciBOZXciJz48YnIgc3R5bGU9J21zby1zcGVjaWFsLWNoYXJhY3RlcjpsaW5lLWJyZWFrJz4NCis8IVtpZiAhc3VwcG9ydExpbmVCcmVha05ld0xpbmVdPjxiciBzdHlsZT0nbXNvLXNwZWNpYWwtY2hhcmFjdGVyOmxpbmUtYnJlYWsnPg0KKzwhW2VuZGlmXT48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+QWxlcnQgRG90czxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxicj4NCis8L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPlNlbXByZSBxdWUgdW0gZXZlbnRvIHNpZ25pZmljYXRpdm8NCithc3NvY2lhZG8gY29tIHVtIHBhZHLjbyBkZSBwb250b3Mgb2NvcnJlICh2ZXIgQWxlcnRhIGRlIFR1bmVzKTo8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz4mbmJzcDsmbmJzcDsmbmJzcDtObzxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgIDwvc3Bhbj5O428gZXhpYmlyIG8gcGFkcuNvIGRlIHBvbnRvcy48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz4mbmJzcDsmbmJzcDsmbmJzcDtZZXM8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goCA8L3NwYW4+UmVzdW1pZGFtZW50ZSBleGliaXIgbyBwYWRy428gZGUgcG9udG9zLjwvc3Bhbj48c3Bhbg0KK3N0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48YnI+DQorPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5TZSBtZWxvZGlhcyBkZSBhbGVydGEgc+NvIHBhcmEgc2VyIGpvZ2Fkbw0KKyh2ZWphIG8gY29tYW5kbyBUVU5FUyBlIG8gQWxlcnRhIGRlIFR1bmVzKSwgc2UgdW1hIG36c2ljYSB0ZW0gc2lkbyBhc3NvY2lhZG8NCitjb20gbyBldmVudG8sIGUgc2UgbyBkaXNwb3NpdGl2byBkYSBjYW7n428gc2VsZWNpb25hZG8gcG9kZSBzZXIgYWJlcnRvLCBlbnTjbywNCitpbmRlcGVuZGVudGVtZW50ZSBkYSBjb25maWd1cmHn428gZGVzc2EgcHJlZmVy6m5jaWEsIG8gcGFkcuNvIGRlIHBvbnRvcyBu428NCitzZXLhIGV4aWJpZG8uPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48YnI+DQorPGJyPg0KKzwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+QWxlcnQgTWVzc2FnZXM8L3NwYW4+PHNwYW4NCitzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PGJyPg0KKzxicj4NCis8L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPlNlbXByZSBxdWUgdW0gZXZlbnRvIHNpZ25pZmljYXRpdm8sIGNvbQ0KK3VtYSBtZW5zYWdlbSBhc3NvY2lhZGEgb2NvcnJlICh2ZXIgQWxlcnRhIGRlIFR1bmVzKTo8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz4mbmJzcDsmbmJzcDsmbmJzcDtObzxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgIDwvc3Bhbj5O428gbW9zdHJhciBhIG1lbnNhZ2VtLjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPiZuYnNwOyZuYnNwOyZuYnNwO1llczxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgIDwvc3Bhbj5Nb3N0cmFyIGEgbWVuc2FnZW0uPC9zcGFuPjxzcGFuDQorc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxicj4NCis8L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPlNlIGFzIG1lbnNhZ2VucyBkZSBhbGVydGEgc+NvIHRvY2FkYXMNCisodmVqYSBvIGNvbWFuZG8gVFVORVMgZSBhIHByZWZlcupuY2lhIEFsZXJ0YSBkZSBUdW5lcyksIHNlIHVtYSBt+nNpY2EgdGVtIHNpZG8NCithc3NvY2lhZG8gY29tIG8gZXZlbnRvLCBlIHNlIG8gZGlzcG9zaXRpdm8gZGUgYWp1c3RlIHNlbGVjaW9uYWRvIHBvZGUgc2VyDQorYWJlcnRvLCBvdSBzZSBvIGFsZXJ0YSBwYWRy9WVzIGRlIHBvbnRvcyBxdWUgZGV2ZW0gc2VyIGV4aWJpZGFzIChjb25zdWx0ZSBBbGVydA0KK0RvdHMpIGUgc2UgdW0gcGFkcuNvIGRlIHBvbnRvcyB0ZW0gc2lkbyBhc3NvY2lhZG8gY29tIG8gZXZlbnRvLCBlbnTjbywNCitpbmRlcGVuZGVudGVtZW50ZSBkYSBjb25maWd1cmHn428gZGVzc2EgcHJlZmVy6m5jaWEsIGEgbWVuc2FnZW0gbuNvIOkgZXhpYmlkYS48L3NwYW4+PHNwYW4NCitzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PGJyPg0KKzxicj4NCis8L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPlNheS1MaW5lIE1vZGU8L3NwYW4+PHNwYW4NCitzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PGJyPg0KKzxicj4NCis8L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPkFvIHVzYXIgbyBjb21hbmRvIFNBWV9MSU5FOjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPiZuYnNwOyZuYnNwOyZuYnNwO0ltbWVkaWF0ZTxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgIDwvc3Bhbj5EZXNjYXJ0YXIgZGlzY3Vyc28gcGVuZGVudGVzLjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPiZuYnNwOyZuYnNwOyZuYnNwO0VucXVldWU8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goCA8L3NwYW4+TuNvIGRlc2NhcnRhciBwZW5kZW50ZXMgZGlzY3Vyc28uPC9zcGFuPjxzcGFuDQorc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxicj4NCis8L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPkEgY29uZmlndXJh5+NvIGluaWNpYWwg6SBpbW1lZGlhdGUuPC9zcGFuPjxzcGFuDQorc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxicj4NCis8YnI+DQorPC9zcGFuPjxzcGFuIGxhbmc9RU4tVVMgc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQ7bXNvLWFuc2ktbGFuZ3VhZ2U6RU4tVVMnPkF1dG9zcGVhazwvc3Bhbj48c3Bhbg0KK2xhbmc9RU4tVVMgc3R5bGU9J21zby1hbnNpLWxhbmd1YWdlOkVOLVVTJz4gPG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBsYW5nPUVOLVVTIHN0eWxlPSdtc28tYW5zaS1sYW5ndWFnZTpFTi1VUyc+PG86cD4mbmJzcDs8L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+Jm5ic3A7Jm5ic3A7Jm5ic3A7Tm88bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goCA8L3NwYW4+U/MgZmFsYXIgcXVhbmRvIGZvciBzb2xpY2l0YWRvIGEgZmF66i1sby48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz4mbmJzcDsmbmJzcDsmbmJzcDtZZXM8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goCA8L3NwYW4+QXV0b21hdGljYW1lbnRlIGZhbGFyOjwvc3Bhbj48c3Bhbg0KK3N0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0IHN0eWxlPSd0ZXh0LWluZGVudDozNS40cHQnPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz63DQorQSBub3ZhIGxpbmhhIHF1YW5kbyBhIGphbmVsYSDpIG1vdmlkYSB2ZXJ0aWNhbG1lbnRlIGJyYWlsbGUuPC9zcGFuPjxzcGFuDQorc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQgc3R5bGU9J3RleHQtaW5kZW50OjM1LjRwdCc+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPrcNCitDYXJhY3RlcmVzIHF1ZSBz428gaW5zZXJpZG9zIG91IGV4Y2x17WRvcy48L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzOw0KK21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQgc3R5bGU9J3RleHQtaW5kZW50OjM1LjRwdCc+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPrcNCitPIGNhcuFjdGVyIGFvIHF1YWwgbyBjdXJzb3Ig6SBtb3ZpZG8uPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczsNCittc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48YnI+DQorPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5Fc3RhIGNvbmZpZ3VyYefjbyB0YW1i6W0gcG9kZSBzZXINCithbHRlcmFkbyBjb20gbyBjb21hbmRvIEFVVE9TUEVBSy4gQSBjb25maWd1cmHn428gaW5pY2lhbCDpIE5vLjwvc3Bhbj48c3Bhbg0KK3N0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48YnI+DQorPGJyPg0KKzwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+U3BlZWNoIFJhdGU8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48YnI+DQorPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5BanVzdGFyIGEgdmVsb2NpZGFkZSBkZSBmYWxhICgwIOkgbyBtYWlzDQorbGVudG8sIDIwIOkgbyBtYWlzIHLhcGlkbykuIEVzc2EgcHJlZmVy6m5jaWEgZXN04SBkaXNwb27tdmVsIHNvbWVudGUgc2UgdW0NCitkcml2ZXIgcXVlIHN1cG9ydGEgZWxlIGVzdOEgc2VuZG8gdXNhZG8uIEVzdGEgY29uZmlndXJh5+NvIHRhbWLpbSBwb2RlIHNlcg0KK2FsdGVyYWRvIHBlbG9zIGNvbWFuZG9zIFNBWV9TTE9XRVIvU0FZX0ZBU1RFUi4gQSBjb25maWd1cmHn428gaW5pY2lhbCDpIDEwLjwvc3Bhbj48c3Bhbg0KK3N0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48YnI+DQorPGJyPg0KKzwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+U3BlZWNoIFBpdGNoPG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PGJyPg0KKzwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+QWp1c3RlIG8gdm9sdW1lIGRhIHZveiAoMCDpIG8gbWFpcyBiYWl4bywNCisyMCDpIG8gbWFpcyBhbHRvKS4gRXNzYSBwcmVmZXLqbmNpYSBlc3ThIGRpc3Bvbu12ZWwgc29tZW50ZSBzZSB1bSBkcml2ZXIgcXVlDQorc3Vwb3J0YSBlbGUgZXN04SBzZW5kbyB1c2Fkby4gRXN0YSBjb25maWd1cmHn428gdGFtYultIHBvZGUgc2VyIGFsdGVyYWRvIGNvbSBvcw0KK2NvbWFuZG9zIFNBWV9TT0ZURVIvU0FZX0xPVURFUi4gQSBjb25maWd1cmHn428gaW5pY2lhbCDpIDEwLjwvc3Bhbj48c3Bhbg0KK3N0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48YnI+DQorPGJyPg0KKzwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+U3BlZWNoIFBpdGNoPG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PGJyPg0KKzwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+QWp1c3RhciBvIHRvbSBkZSB2b3ogKDAg6SBvIG1lbm9yIGUgbyAyMA0KK+kgbyBtYWlzIGFsdG8pLiBFc3NhIHByZWZlcupuY2lhIGVzdOEgZGlzcG9u7XZlbCBzb21lbnRlIHNlIHVtIGRyaXZlciBxdWUNCitzdXBvcnRhIGVsZSBlc3ThIHNlbmRvIHVzYWRvLiBBIGNvbmZpZ3VyYefjbyBpbmljaWFsIOkgMTAuPC9zcGFuPjxzcGFuDQorc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxicj4NCis8YnI+DQorPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5TcGVlY2ggUHVuY3R1YXRpb248L3NwYW4+PHNwYW4NCitzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PGJyPg0KKzxicj4NCis8L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPkFqdXN0ZSBhIHF1YW50aWRhZGUgZGUgcG9udHVh5+NvIHF1ZSDpDQorZmFsYWRvLiBQb2RlIHNlciBkZWZpbmlkbyBjb21vOjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQgc3R5bGU9J3RleHQtaW5kZW50OjM1LjRwdCc+PHNwYW4gbGFuZz1FTi1VUw0KK3N0eWxlPSdmb250LXNpemU6MTEuMHB0O21zby1hbnNpLWxhbmd1YWdlOkVOLVVTJz63IEFsbDwvc3Bhbj48c3BhbiBsYW5nPUVOLVVTDQorc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyI7bXNvLWFuc2ktbGFuZ3VhZ2U6DQorRU4tVVMnPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQgc3R5bGU9J3RleHQtaW5kZW50OjM1LjRwdCc+PHNwYW4gbGFuZz1FTi1VUw0KK3N0eWxlPSdmb250LXNpemU6MTEuMHB0O21zby1hbnNpLWxhbmd1YWdlOkVOLVVTJz63IFNvbWU8L3NwYW4+PHNwYW4gbGFuZz1FTi1VUw0KK3N0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciO21zby1hbnNpLWxhbmd1YWdlOg0KK0VOLVVTJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0IHN0eWxlPSd0ZXh0LWluZGVudDozNS40cHQnPjxzcGFuIGxhbmc9RU4tVVMNCitzdHlsZT0nZm9udC1zaXplOjExLjBwdDttc28tYW5zaS1sYW5ndWFnZTpFTi1VUyc+tyBBbGw8L3NwYW4+PHNwYW4gbGFuZz1FTi1VUw0KK3N0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciO21zby1hbnNpLWxhbmd1YWdlOg0KK0VOLVVTJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIGxhbmc9RU4tVVMgc3R5bGU9J21zby1hbnNpLWxhbmd1YWdlOkVOLVVTJz48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5Fc3NhIHByZWZlcupuY2lhIGVzdOENCitkaXNwb27tdmVsIHNvbWVudGUgc2UgdW0gZHJpdmVyIHF1ZSBzdXBvcnRhIGVsZSBlc3ThIHNlbmRvIHVzYWRvLiBBDQorY29uZmlndXJh5+NvIGluaWNpYWwg6SBzb21lLjwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6DQorIkNvdXJpZXIgTmV3Iic+PGJyPg0KKzxicj4NCis8L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPlN0YXR1cyBTdHlsZTxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxicj4NCis8L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPkVzdGEgY29uZmlndXJh5+NvIGVzcGVjaWZpY2EgbyBjYW1pbmhvDQorcXVlIGFzIGPpbHVsYXMgZGUgZXN0YWRvIGVzdONvIGEgc2VyIHV0aWxpemFkb3MuIFZvY+ogbuNvIGRldmVyaWEgcHJlY2lzYW0gZGUNCit0b2NhciBjb20gbmVsYXMuIElzc28gcGVybWl0ZSBxdWUgb3MgZGVzZW52b2x2ZWRvcmVzIEJSTFRUWSBwYXJhIHRlc3RhciBhcw0KK2NvbmZpZ3VyYef1ZXMgZGUgc3RhdHVzIGRhIHBpbGhhIHBhcmEgZGlzcGxheSBicmFpbGxlIHF1ZSBlbGVzIHJlYWxtZW50ZSBu428gdOptLjwvc3Bhbj48c3Bhbg0KK3N0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48YnI+DQorPGJyPg0KKzwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+Tm9uZTxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxicj4NCis8L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPk7jbyB1c2UgYXMgY+lsdWxhcyBkZSBzdGF0dXMuIEVzc2ENCitjb25maWd1cmHn428g6SBzZW1wcmUgc2VndXJvLCBtYXMgdGFtYultIOkgY29tcGxldGFtZW50ZSBpbvp0aWwuPC9zcGFuPjxzcGFuDQorc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxicj4NCis8YnI+DQorPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5BbHZhPG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD4mbmJzcDs8L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+QXMgY+lsdWxhcyBzdGF0dXMgY29udGVyOjwvc3Bhbj48c3Bhbg0KK3N0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0IHN0eWxlPSd0ZXh0LWluZGVudDozNS40cHQnPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz4xDQorLSBBIGxvY2FsaXph5+NvIGRvIGN1cnNvciAodmVqYSBhYmFpeG8pLjwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7DQorbXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dCBzdHlsZT0ndGV4dC1pbmRlbnQ6MzUuNHB0Jz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+Mg0KKy0gQSBsb2NhbGl6YefjbyBkbyBjYW50byBzdXBlcmlvciBlc3F1ZXJkbyBkYSBqYW5lbGEgZG8gYnJhaWxsZSAodmVyIGFiYWl4bykuPC9zcGFuPjxzcGFuDQorc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQgc3R5bGU9J3RleHQtaW5kZW50OjM1LjRwdCc+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPjMNCistIFVtYSBjYXJ0YSBpbmRpY2FuZG8gbyBlc3RhZG8gZGUgQlJMVFRZLiA8L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzOw0KK21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPk5hIG9yZGVtIGRlIHByZWNlZOpuY2lhOjwvc3Bhbj48c3Bhbg0KK3N0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0IHN0eWxlPSd0ZXh0LWluZGVudDozNS40cHQnPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5hPG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dCBzdHlsZT0ndGV4dC1pbmRlbnQ6MzUuNHB0Jz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+VGVsYQ0KK2F0cmlidXRvcyBlc3TjbyBhIHNlciBtb3N0cmFkb3MgKHZlamEgbyBjb21hbmRvIERJU1BNRCkuPC9zcGFuPjxzcGFuDQorc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQgc3R5bGU9J3RleHQtaW5kZW50OjM1LjRwdCc+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQgc3R5bGU9J3RleHQtaW5kZW50OjM1LjRwdCc+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPmY8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0IHN0eWxlPSd0ZXh0LWluZGVudDozNS40cHQnPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5BDQoraW1hZ2VtIGRhIHRlbGEg6SBjb25nZWxhZGEgKHZlamEgbyBjb21hbmRvIEZSRUVaRSkuPC9zcGFuPjxzcGFuDQorc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQgc3R5bGU9J3RleHQtaW5kZW50OjM1LjRwdCc+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQgc3R5bGU9J3RleHQtaW5kZW50OjM1LjRwdCc+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPmY8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0IHN0eWxlPSd0ZXh0LWluZGVudDozNS40cHQnPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5PDQorY3Vyc29yIGVzdOEgc2VuZG8gY29udHJvbGFkbyAodmVqYSBvIGNvbWFuZG8gQ1NSVFJLKS48L3NwYW4+PHNwYW4NCitzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dCBzdHlsZT0ndGV4dC1pbmRlbnQ6MzUuNHB0Jz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+PG86cD4mbmJzcDs8L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dCBzdHlsZT0ndGV4dC1pbmRlbnQ6MzUuNHB0Jz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+Ymxhbms8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0IHN0eWxlPSd0ZXh0LWluZGVudDozNS40cHQnPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5OYWRhDQorZGUgZXNwZWNpYWwuPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48YnI+DQorPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5BIGxvY2FsaXph5+NvIGRvIGN1cnNvciBlIGEgamFuZWxhDQorYnJhaWxsZSBz428gYXByZXNlbnRhZG9zIGRlIHVtYSBtYW5laXJhIGludGVyZXNzYW50ZS4gT3MgcG9udG9zIDxzdDE6bWV0cmljY29udmVydGVyDQorUHJvZHVjdElEPSIxIGEiIHc6c3Q9Im9uIj4xIGE8L3N0MTptZXRyaWNjb252ZXJ0ZXI+IDYgcmVwcmVzZW50YW0gbyBu+m1lcm8gZGENCitsaW5oYSBjb20gdW1hIGNhcnRhIGRlIGEgKHBhcmEgMSkgcG9yIHkgKHBhcmEgMjUpLiBPcyBwb250b3MgNyBlIDggKG9zIGRvaXMNCitleHRyYSBuYSBwYXJ0ZSBpbmZlcmlvcikgcmVwcmVzZW50YW0gbyBu+m1lcm8gamFuZWxhIGhvcml6b250YWwgYnJhaWxsZSBjb21vDQorc2VndWU6PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD4mbmJzcDs8L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dCBzdHlsZT0ndGV4dC1pbmRlbnQ6MzUuNHB0Jz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+Tm8NCitEb3RzPG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dCBzdHlsZT0nbWFyZ2luLWxlZnQ6MzUuNHB0Jz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+QQ0KK3ByaW1laXJhIGphbmVsYSAo4CBlc3F1ZXJkYSkuPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToNCisiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0IHN0eWxlPSd0ZXh0LWluZGVudDozNS40cHQnPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0IHN0eWxlPSd0ZXh0LWluZGVudDozNS40cHQnPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5Eb3QNCis3PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dCBzdHlsZT0ndGV4dC1pbmRlbnQ6MzUuNHB0Jz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+QQ0KK3NlZ3VuZGEgamFuZWxhLjwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dCBzdHlsZT0ndGV4dC1pbmRlbnQ6MzUuNHB0Jz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+PG86cD4mbmJzcDs8L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dCBzdHlsZT0ndGV4dC1pbmRlbnQ6MzUuNHB0Jz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+RG90DQorODxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQgc3R5bGU9J3RleHQtaW5kZW50OjM1LjRwdCc+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPkENCit0ZXJjZWlyYSBqYW5lbGEuPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToNCisiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0IHN0eWxlPSd0ZXh0LWluZGVudDozNS40cHQnPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0IHN0eWxlPSd0ZXh0LWluZGVudDozNS40cHQnPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5Eb3RzDQorNyBlIDg8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0IHN0eWxlPSd0ZXh0LWluZGVudDozNS40cHQnPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5BDQorcXVhcnRhIGphbmVsYS48L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PG86cD4mbmJzcDs8L286cD48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5FbSBhbWJvcyBvcyBjYXNvcywgb3MNCitpbmRpY2Fkb3JlcyBndWFyZGFkb3M6IGEgbGluaGEgMjYg6SByZXByZXNlbnRhZG8gcGVsYSBsZXRyYSBBLCBlIGEgcXVpbnRhDQoramFuZWxhIGhvcml6b250YWwgYnJhaWxsZSDpIHJlcHJlc2VudGFkbyBwb3IgbmVuaHVtIHBvbnRvLCBuYSBwYXJ0ZSBpbmZlcmlvci4gPC9zcGFuPjxzcGFuDQorc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxicj4NCis8YnI+DQorPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5UaWVtYW48L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5Og0KK1RpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxicj4NCis8YnI+DQorPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5BcyBj6Wx1bGFzIGRlIHN0YXR1cyBkZXZlbSBjb250ZXI6PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD4mbmJzcDs8L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dCBzdHlsZT0ndGV4dC1pbmRlbnQ6MzUuNHB0Jz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+MS0yOg0KK0FzIGNvbHVuYXMgKGNvbnRhbmRvIGEgcGFydGlyIDEpIGRvIGN1cnNvciAoY29tbyBtb3N0cmFkbyBuYSBtZXRhZGUgc3VwZXJpb3INCitkYXMgY+lsdWxhcykgZSBubyBjYW50byBzdXBlcmlvciBlc3F1ZXJkbyBkYSBqYW5lbGEgZG8gYnJhaWxsZSAobW9zdHJhZG8gbmENCittZXRhZGUgaW5mZXJpb3IgZGFzIGPpbHVsYXMpLjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQgc3R5bGU9J3RleHQtaW5kZW50OjM1LjRwdCc+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzOw0KK21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQgc3R5bGU9J3RleHQtaW5kZW50OjM1LjRwdCc+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPjMtNDoNCitBcyBsaW5oYXMgKGNvbnRhbmRvIGEgcGFydGlyIDEpIGRvIGN1cnNvciAoY29tbyBtb3N0cmFkbyBuYSBtZXRhZGUgc3VwZXJpb3IgZGFzDQorY+lsdWxhcykgZSBubyBjYW50byBzdXBlcmlvciBlc3F1ZXJkbyBkYSBqYW5lbGEgZG8gYnJhaWxsZSAobW9zdHJhZG8gbmEgbWV0YWRlDQoraW5mZXJpb3IgZGFzIGPpbHVsYXMpLjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQgc3R5bGU9J3RleHQtaW5kZW50OjM1LjRwdCc+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzOw0KK21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQgc3R5bGU9J3RleHQtaW5kZW50OjM1LjRwdCc+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPjU6DQorQ2FkYSBwb250byBpbmRpY2Egc2UgdW0gcmVjdXJzbyDpIGF0aXZhZG8gY29tbyBzZSBzZWd1ZTo8L3NwYW4+PHNwYW4NCitzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD4mbmJzcDs8L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dCBzdHlsZT0ndGV4dC1pbmRlbnQ6MzUuNHB0Jz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+RG90DQorMTogQSBpbWFnZW0gZGEgdGVsYSDpIGNvbmdlbGFkYSAodmVqYSBvIGNvbWFuZG8gRlJFRVpFKS48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0IHN0eWxlPSd0ZXh0LWluZGVudDozNS40cHQnPjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczsNCittc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0IHN0eWxlPSd0ZXh0LWluZGVudDozNS40cHQnPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5Eb3QNCisyOiBhdHJpYnV0b3MgZGEgdGVsYSBlc3TjbyBzZW5kbyBleGliaWRvcyAodmVqYSBvIGNvbWFuZG8gRElTUE1EKS48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0IHN0eWxlPSd0ZXh0LWluZGVudDozNS40cHQnPjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczsNCittc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0IHN0eWxlPSd0ZXh0LWluZGVudDozNS40cHQnPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5Eb3QNCiszOiBBbGVydGEgbfpzaWNhcyBlc3TjbyBzZW5kbyB0b2NhZGFzICh2ZWphIG8gY29tYW5kbyBUVU5FUykuPG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dCBzdHlsZT0ndGV4dC1pbmRlbnQ6MzUuNHB0Jz48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7DQorbXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD4mbmJzcDs8L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dCBzdHlsZT0ndGV4dC1pbmRlbnQ6MzUuNHB0Jz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+RG90DQorNDogTyBjdXJzb3IgZXN04SBzZW5kbyBtb3N0cmFkbyAodmVqYSBvIGNvbWFuZG8gQ1NSVklTKS48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0IHN0eWxlPSd0ZXh0LWluZGVudDozNS40cHQnPjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczsNCittc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0IHN0eWxlPSd0ZXh0LWluZGVudDozNS40cHQnPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5Eb3QNCis1OiBPIGN1cnNvciDpIHVtIGJsb2NvIHPzbGlkbyAodmVqYSBvIGNvbWFuZG8gQ1NSU0laRSkuPG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dCBzdHlsZT0ndGV4dC1pbmRlbnQ6MzUuNHB0Jz48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7DQorbXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD4mbmJzcDs8L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dCBzdHlsZT0ndGV4dC1pbmRlbnQ6MzUuNHB0Jz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+RG90DQorNjogTyBjdXJzb3IgZXN04SBwaXNjYW5kbyAodmVqYSBvIGNvbWFuZG8gQ1NSQkxJTkspLjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQgc3R5bGU9J3RleHQtaW5kZW50OjM1LjRwdCc+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzOw0KK21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQgc3R5bGU9J3RleHQtaW5kZW50OjM1LjRwdCc+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPkRvdA0KKzc6IE8gY3Vyc29yIGVzdOEgYSBzZXIgY29udHJvbGFkbyAodmVqYSBvIGNvbWFuZG8gQ1NSVFJLKS48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0IHN0eWxlPSd0ZXh0LWluZGVudDozNS40cHQnPjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczsNCittc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0IHN0eWxlPSd0ZXh0LWluZGVudDozNS40cHQnPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5Eb3QNCis4OiBBIGphbmVsYSB2YWkgZGVzbGl6YXIgYnJhaWxsZSAodmVqYSBvIGNvbWFuZG8gU0xJREVXSU4pLjwvc3Bhbj48c3Bhbg0KK3N0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48YnI+DQorPC9zcGFuPjxzcGFuIGxhbmc9RU4tVVMgc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQ7bXNvLWFuc2ktbGFuZ3VhZ2U6RU4tVVMnPlBvd2VyQnJhaWxsZQ0KKzgwPC9zcGFuPjxzcGFuIGxhbmc9RU4tVVMgc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyI7DQorbXNvLWFuc2ktbGFuZ3VhZ2U6RU4tVVMnPjxicj4NCis8YnI+DQorPC9zcGFuPjxzcGFuIGxhbmc9RU4tVVMgc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQ7bXNvLWFuc2ktbGFuZ3VhZ2U6RU4tVVMnPkFzDQorY+lsdWxhcyBzdGF0dXMgY29udGVyOjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gbGFuZz1FTi1VUyBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6DQorIkNvdXJpZXIgTmV3Ijttc28tYW5zaS1sYW5ndWFnZTpFTi1VUyc+PG86cD4mbmJzcDs8L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dCBzdHlsZT0nbWFyZ2luLWxlZnQ6MzUuNHB0Jz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+MToNCitBIGxpbmhhIChjb250YW5kbyBhIHBhcnRpciBkZSAxKSBjb3JyZXNwb25kZW50ZSDgIHBhcnRlIHN1cGVyaW9yIGRhIGphbmVsYSA8c3QxOlBlcnNvbk5hbWUNCitQcm9kdWN0SUQ9ImVtIGJyYWlsbGUuIE9zIiB3OnN0PSJvbiI+ZW0gYnJhaWxsZS4gT3M8L3N0MTpQZXJzb25OYW1lPiBk7WdpdG9zDQorZGFzIGRlemVuYXMg6SBtb3N0cmFkbyBuYSBtZXRhZGUgc3VwZXJpb3IgZGEgcGlsaGEsIGUgb3MgZO1naXRvcyBkYXMgdW5pZGFkZXMg6Q0KK2FwcmVzZW50YWRhIG5hIG1ldGFkZSBpbmZlcmlvciBkYSBj6Wx1bGEuPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczsNCittc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48YnI+DQorPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5HZW5lcmljPG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PGJyPg0KKzwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+RXN0YSBkZWZpbmnn428gcGFzc2EgdW0gbW9udGUgZGUNCitpbmZvcm1h5/VlcyBwYXJhIG8gZHJpdmVyIGJyYWlsbGUsIGUgbyBkcml2ZXIgZGVjaWRlIGZvcm1hIGRlIGFwcmVzZW504S1sby48L3NwYW4+PHNwYW4NCitzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+Jm5ic3A7Jm5ic3A7Jm5ic3A7PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPk1EVjwvc3Bhbj48c3Bhbg0KK3N0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48YnI+DQorPGJyPg0KKzwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+QXMgY+lsdWxhcyBkZSBzdGF0dXMgZGV2ZW0gY29udGVyOjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQgc3R5bGU9J3RleHQtaW5kZW50OjM1LjRwdCc+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPjEtMjoNCitBIGxvY2FsaXph5+NvIGRvIGNhbnRvIHN1cGVyaW9yIGVzcXVlcmRvIGRhIGphbmVsYSBkbyBicmFpbGxlLjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQgc3R5bGU9J3RleHQtaW5kZW50OjM1LjRwdCc+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPkENCitsaW5oYSAoY29udGFuZG8gYSBwYXJ0aXIgZGUgMSkg6SBtb3N0cmFkbyBuYSBtZXRhZGUgc3VwZXJpb3IgZGFzPG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dCBzdHlsZT0ndGV4dC1pbmRlbnQ6MzUuNHB0Jz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+Y+lsdWxhcywNCitlIG5hIGNvbHVuYSAoY29udGFuZG8gYSBwYXJ0aXIgZGUgMSkg6SBtb3N0cmFkbyBuYSBtZXRhZGU8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0IHN0eWxlPSd0ZXh0LWluZGVudDozNS40cHQnPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5pbmZlcmlvcg0KK2RhcyBj6Wx1bGFzLjwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PGJyPg0KKzwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+Vm95YWdlcjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxicj4NCis8L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPkFzIGPpbHVsYXMgZGUgc3RhdHVzIGRldmVtIGNvbnRlcjo8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0IHN0eWxlPSdtYXJnaW4tbGVmdDozNS40cHQnPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz4xOg0KK0EgbGluaGEgKGNvbnRhbmRvIGEgcGFydGlyIGRlIDEpIGNvcnJlc3BvbmRlbnRlIOAgcGFydGUgc3VwZXJpb3IgZGEgamFuZWxhDQorYnJhaWxsZSAodmVyIGJlbG93KS48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0IHN0eWxlPSdtYXJnaW4tbGVmdDozNS40cHQnPjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczsNCittc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0IHN0eWxlPSdtYXJnaW4tbGVmdDozNS40cHQnPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz4yOg0KK0EgbGluaGEgKGNvbnRhbmRvIGEgcGFydGlyIGRlIDEpIG9uZGUgbyBjdXJzb3IgZXN04SAodmVqYSBiZWxvdykuPC9zcGFuPjxzcGFuDQorc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQgc3R5bGU9J21hcmdpbi1sZWZ0OjM1LjRwdCc+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPjM6DQorU2UgYSB0ZWxhIGVzdOEgY29uZ2VsYWRhICh2ZWphIG8gY29tYW5kbyBGUkVFWkUpLCBkZXBvaXMgYSBsZXRyYSBGLiBTZSBu428gZm9yLA0KK2VudONvIGEgY29sdW5hIChjb250YW5kbyBhIHBhcnRpciBkZSAxKSBvbmRlIGVzdOEgbyBjdXJzb3IgKHZlamEgYmVsb3cpLjwvc3Bhbj48c3Bhbg0KK3N0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5PcyBu+m1lcm9zIGRlIGxpbmhhcyBlDQorY29sdW5hcyBz428gbW9zdHJhZG9zIG9zIG76bWVyb3MgZGUgZG9pcyBk7WdpdG9zIGVtIHVtYSD6bmljYSBj6Wx1bGEuIE9zDQorZO1naXRvcyBkYXMgZGV6ZW5hcyBz428gbW9zdHJhZG9zIG5hIG1ldGFkZSBzdXBlcmlvciBkYSBwaWxoYSwgZSBvcyBk7WdpdG9zIGRhcw0KK3VuaWRhZGVzIHPjbyBhcHJlc2VudGFkYXMgbmEgbWV0YWRlIGluZmVyaW9yIGRhIGPpbHVsYS48L3NwYW4+PHNwYW4NCitzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD4mbmJzcDs8L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+QSBjb25maWd1cmHn428gaW5pY2lhbCBkbw0KK2RyaXZlciBkZSBkaXNwbGF5IEJyYWlsbGUg6SBkZXBlbmRlbnRlLjwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7DQorbXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PGJyPg0KKzwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+VGV4dCBUYWJsZTxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxicj4NCis8L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPlNlbGVjaW9uZSBhIHRhYmVsYSBkZSB0ZXh0by4gVmVyIHNl5+NvIGRlDQorVGFiZWxhcyBkZSBUZXh0byBwYXJhIG1haXMgZGV0YWxoZXMuIFZlamEgYSBvcOfjbyAtdCBwYXJhIGEgY29uZmlndXJh5+NvIGluaWNpYWwuDQorRXN0YSBwcmVmZXLqbmNpYSBu428g6SBzYWx2by48L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5Og0KKyJDb3VyaWVyIE5ldyInPjxicj4NCis8YnI+DQorPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5BdHRyaWJ1dGVzIFRhYmxlPG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PGJyPg0KKzwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+U2VsZWNpb25lIGEgdGFiZWxhIGRlIGF0cmlidXRvcy4gVmVyDQorVGFiZWxhIGRlIEF0cmlidXRvcy4gVmVqYSBhIG9w5+NvIGRlIGxpbmhhIGRlIGNvbWFuZG8gLXQgcGFyYSBhIGNvbmZpZ3VyYefjbw0KK2luaWNpYWwuIEVzdGEgcHJlZmVy6m5jaWEgbuNvIOkgc2Fsdm8uPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczsNCittc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48YnI+DQorPGJyPg0KKzwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+Q29udHJhY3Rpb24gVGFibGU8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48YnI+DQorPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5TZWxlY2lvbmUgYSB0YWJlbGEgZGUgY29udHJh5+NvLiBWZXINCitUYWJlbGEgZGUgQ29udHJh5+NvLiBDb25zdWx0ZSBhIGxpbmhhIGRlIGNvbWFuZG8gLWMgcGFyYSBhIGNvbmZpZ3VyYefjbw0KK2luaWNpYWwuIEVzdGEgcHJlZmVy6m5jaWEgbuNvIOkgc2Fsdm8uPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczsNCittc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48YnI+DQorPGJyPg0KKzwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+S2V5IFRhYmxlPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LWZhbWlseToNCitUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48YnI+DQorPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5TZWxlY2lvbmUgYSB0YWJlbGEgY2hhdmUuIFZlciBUYWJlbGFzIGRlDQorVGVjbGFzLiBDb25zdWx0ZSBhIGxpbmhhIGRlIGNvbWFuZG8gLWsgcGFyYSBhIGNvbmZpZ3VyYefjbyBpbmljaWFsLiBFc3RhDQorcHJlZmVy6m5jaWEgbuNvIOkgc2Fsdm8uPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToNCisiQ291cmllciBOZXciJz48YnI+DQorPGJyPg0KKzwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+Tm90YXM6PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD4mbmJzcDs8L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dCBzdHlsZT0ndGV4dC1pbmRlbnQ6MzUuNHB0Jz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+tw0KK1RvZG9zIG9zIHBhcuJtZXRyb3MgZGUgdGVtcG8gZW0gY2VudOlzaW1vcyBkZSBzZWd1bmRvLiBFbGVzIHPjbzxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQgc3R5bGU9J3RleHQtaW5kZW50OjM1LjRwdCc+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPm36bHRpcGxvcw0KK2RvIGludGVydmFsbyBkYSBqYW5lbGEgZGUgYXR1YWxpemHn428gYnJhaWxsZSAodmVqYSBhPG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dCBzdHlsZT0ndGV4dC1pbmRlbnQ6MzUuNHB0Jz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+bGluaGENCitkZSBjb21hbmRvIC11KSBkZW50cm8gZGEgZmFpeGEgZGUgPHN0MTptZXRyaWNjb252ZXJ0ZXIgUHJvZHVjdElEPSIxIGEiIHc6c3Q9Im9uIj4xDQorIGE8L3N0MTptZXRyaWNjb252ZXJ0ZXI+IDEwMC48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0IHN0eWxlPSd0ZXh0LWluZGVudDozNS40cHQnPjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczsNCittc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdtc28tYmlkaS1mb250LXNpemU6MTguMHB0Jz41LjYgU3RhdHVzIGRvDQorRGlzcGxheTwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PGJyPg0KKzwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+TyBzdGF0dXMgZG8gZGlzcGxheSDpIHVtIHJlc3VtbyBkbyBlc3RhZG8NCithdHVhbCBCUkxUVFksIHF1ZSBzZSBlbmNhaXhhIHRvdGFsbWVudGUgZGVudHJvIGRhIGphbmVsYSBkbyBicmFpbGxlLiBBbGd1bnMNCitkaXNwbGF5cyBicmFpbGxlIHTqbSB1bSBjb25qdW50byBkZSBj6Wx1bGFzIGRlIHN0YXR1cyBxdWUgc+NvIHVzYWRvcyBwYXJhDQorZXhpYmlyIHBlcm1hbmVudGVtZW50ZSBhbGd1bWFzIGRlc3NhcyBpbmZvcm1h5/VlcywgYmVtIGNvbW8gKGNvbnN1bHRlIGENCitkb2N1bWVudGHn428gcGFyYSBvIGRyaXZlciBkbyBkaXNwbGF5KS4gT3MgZGFkb3MgYXByZXNlbnRhZG9zIHBvciBlc3RlIGRpc3BsYXkNCitu428gc+NvIGVzdOF0aWNvcywgZSBwb2RlbSBzZXIgYWx0ZXJhZGFzIGEgcXVhbHF1ZXIgbW9tZW50bywgZW0gcmVzcG9zdGEgYSB0ZWxhDQorZGUgYXR1YWxpemHn9WVzIGUvb3UgY29tYW5kb3MgQlJMVFRZLjwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7DQorbXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PGJyPg0KKzxicj4NCis8L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPlVzZSBvIGNvbWFuZG8gSU5GTyBwYXJhIGFsdGVybmFyIHBhcmEgYQ0KK2V4aWJp5+NvIGRlIHN0YXR1cywgZSB1c+EtbG8gbm92YW1lbnRlIHBhcmEgcmV0b3JuYXIgcGFyYSBhIHRlbGEuIE8gbGF5b3V0IGRhcw0KK2luZm9ybWHn9WVzIGNvbnRpZGFzIGVzdOEgZGVwZW5kZW50ZSBkbyB0YW1hbmhvIGRhIGphbmVsYSBkbyBicmFpbGxlLjwvc3Bhbj48c3Bhbg0KK3N0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48YnI+DQorPGJyPg0KKzwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+NS42LjEgRGlzcGxheSBjb20gMjEgY+lsdWxhcyBvdSBtYWlzPC9zcGFuPjxzcGFuDQorc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxicj4NCis8YnI+DQorPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5QbmV1beF0aWNvcyBjdXJ0YSB06m0gc2lkbyB1dGlsaXphZG9zLA0KK2FwZXNhciBkZSBzZXJlbSB1bSB0YW50byBlbmlnbeF0aWNhLCBhIGZpbSBkZSBtb3N0cmFyIG8gbGF5b3V0IGRhIGNvbHVuYQ0KK3ByZWNpc2EuPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0IHN0eWxlPSd0ZXh0LWluZGVudDozNS40cHQnPjxzcGFuIGxhbmc9RU4tVVMNCitzdHlsZT0nZm9udC1zaXplOjExLjBwdDttc28tYW5zaS1sYW5ndWFnZTpFTi1VUyc+d3g6d3kgY3g6Y3kgdnQgdGNtZmR1PC9zcGFuPjxzcGFuDQorbGFuZz1FTi1VUyBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3IjsNCittc28tYW5zaS1sYW5ndWFnZTpFTi1VUyc+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBsYW5nPUVOLVVTIHN0eWxlPSdtc28tYW5zaS1sYW5ndWFnZTpFTi1VUyc+PG86cD4mbmJzcDs8L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dCBzdHlsZT0nbWFyZ2luLWxlZnQ6MzUuNHB0Jz48aT48c3BhbiBzdHlsZT0nZm9udC1zaXplOg0KKzExLjBwdCc+d3g6d3k8L3NwYW4+PC9pPjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToNCisiQ291cmllciBOZXciJz48YnI+DQorPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5BIGNvbHVuYSBlIGxpbmhhIChjb250YW5kbyBhIHBhcnRpciBkZSAxKQ0KK25hIHRlbGEgY29ycmVzcG9uZGVudGUgYW8gY2FudG8gc3VwZXJpb3IgZXNxdWVyZG8gZGEgamFuZWxhIGRvIGJyYWlsbGUuPC9zcGFuPjxzcGFuDQorc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxicj4NCis8YnI+DQorPC9zcGFuPjxpPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5jeDpjeTwvc3Bhbj48L2k+PHNwYW4NCitzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PGJyPg0KKzwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+QSBjb2x1bmEgZSBsaW5oYSAoY29udGFuZG8gYSBwYXJ0aXIgZGUgMSkNCitzb2JyZSBhIHRlbGEgY29ycmVzcG9uZGVudGUg4CBwb3Np5+NvIGRvIGN1cnNvci48L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5Og0KK1RpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxicj4NCis8YnI+DQorPC9zcGFuPjxpPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz52dDwvc3Bhbj48L2k+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5Og0KK1RpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxicj4NCis8L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPk8gbvptZXJvIChjb250YW5kbyBhIHBhcnRpciAxKSBkbw0KK3Rlcm1pbmFsIHZpcnR1YWwgYXR1YWwuPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToNCisiQ291cmllciBOZXciJz48YnI+DQorPGJyPg0KKzwvc3Bhbj48aT48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+dDwvc3Bhbj48L2k+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5Og0KK1RpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxicj4NCis8L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPk8gZXN0YWRvIGRvIHJlY3Vyc28gZGUgY29udHJvbGUgZGUgY3Vyc29yDQorKHZlamEgbyBjb21hbmRvIENTUlRSSykuPG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dCBzdHlsZT0nbWFyZ2luLWxlZnQ6MzUuNHB0Jz48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7DQorbXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD4mbmJzcDs8L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dCBzdHlsZT0ndGV4dC1pbmRlbnQ6MzUuNHB0Jz48aT48c3BhbiBzdHlsZT0nZm9udC1zaXplOg0KKzExLjBwdCc+Ymxhbms8L3NwYW4+PC9pPjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToNCisiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0IHN0eWxlPSd0ZXh0LWluZGVudDozNS40cHQnPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5jb250cm9sZQ0KK2RlIGN1cnNvciBlc3ThIG9mZi48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0IHN0eWxlPSd0ZXh0LWluZGVudDozNS40cHQnPjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczsNCittc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0IHN0eWxlPSd0ZXh0LWluZGVudDozNS40cHQnPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz50PC9zcGFuPjxzcGFuDQorc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQgc3R5bGU9J3RleHQtaW5kZW50OjM1LjRwdCc+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPmNvbnRyb2xlDQorZGUgY3Vyc29yIGVzdOEgb24uPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToNCisiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0IHN0eWxlPSdtYXJnaW4tbGVmdDozNS40cHQnPjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczsNCittc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48YnI+DQorPC9zcGFuPjxpPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5jPC9zcGFuPjwvaT48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6DQorVGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PGJyPg0KKzwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+TyBlc3RhZG8gZG9zIHJlY3Vyc29zIHZpc2liaWxpZGFkZSBkbw0KK2N1cnNvciAodmVyIG8gQ1NSVklTIGUgQ1NSQkxJTkspLjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQgc3R5bGU9J21hcmdpbi1sZWZ0OjM1LjRwdCc+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzOw0KK21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQgc3R5bGU9J3RleHQtaW5kZW50OjM1LjRwdCc+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPmJsYW5rPC9zcGFuPjxzcGFuDQorc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQgc3R5bGU9J3RleHQtaW5kZW50OjM1LjRwdCc+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPk8NCitjdXJzb3IgbuNvIGVzdGl2ZXIgdmlz7XZlbCwgZSBu428gcGlzY2FyIHF1YW5kbyBzZSBmYXogdmlz7XZlbC48L3NwYW4+PHNwYW4NCitzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+Jm5ic3A7Jm5ic3A7Jm5ic3A7PC9zcGFuPjxzcGFuDQorc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQgc3R5bGU9J3RleHQtaW5kZW50OjM1LjRwdCc+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPmI8L3NwYW4+PHNwYW4NCitzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dCBzdHlsZT0ndGV4dC1pbmRlbnQ6MzUuNHB0Jz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+Tw0KK2N1cnNvciBu428g6SB2aXPtdmVsLCBlIGNvbWXnYSBhIHBpc2NhciBxdWFuZG8gc2UgZmF6IHZpc+12ZWwuPC9zcGFuPjxzcGFuDQorc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPiZuYnNwOyZuYnNwOyZuYnNwOzwvc3Bhbj48c3Bhbg0KK3N0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0IHN0eWxlPSd0ZXh0LWluZGVudDozNS40cHQnPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz52PC9zcGFuPjxzcGFuDQorc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQgc3R5bGU9J3RleHQtaW5kZW50OjM1LjRwdCc+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPk8NCitjdXJzb3Ig6SB2aXPtdmVsLCBlIG7jbyBlc3ThIHBpc2NhbmRvLjwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7DQorbXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+Jm5ic3A7Jm5ic3A7Jm5ic3A7PC9zcGFuPjxzcGFuDQorc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQgc3R5bGU9J3RleHQtaW5kZW50OjM1LjRwdCc+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPkI8L3NwYW4+PHNwYW4NCitzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dCBzdHlsZT0ndGV4dC1pbmRlbnQ6MzUuNHB0Jz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+Tw0KK2N1cnNvciDpIHZpc+12ZWwgZSBlc3ThIHBpc2NhbmRvLjwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7DQorbXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dCBzdHlsZT0nbWFyZ2luLWxlZnQ6MzUuNHB0Jz48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7DQorbXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PGJyPg0KKzwvc3Bhbj48aT48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+bTwvc3Bhbj48L2k+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5Og0KK1RpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxicj4NCis8L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPk8gbW9kbyBkZSBleGliaefjbyBhdHVhbCAodmVqYSBvIGNvbWFuZG8NCitESVNQTUQpLjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQgc3R5bGU9J21hcmdpbi1sZWZ0OjM1LjRwdCc+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzOw0KK21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQgc3R5bGU9J3RleHQtaW5kZW50OjM1LjRwdCc+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPnQ8L3NwYW4+PHNwYW4NCitzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dCBzdHlsZT0ndGV4dC1pbmRlbnQ6MzUuNHB0Jz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+VGVsYQ0KK2RlIGNvbnRl+mRvICh0ZXh0bykgZXN04SBzZW5kbyBleGliaWRvLjwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7DQorbXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+Jm5ic3A7Jm5ic3A7PC9zcGFuPjxzcGFuDQorc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQgc3R5bGU9J3RleHQtaW5kZW50OjM1LjRwdCc+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPmE8L3NwYW4+PHNwYW4NCitzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dCBzdHlsZT0ndGV4dC1pbmRlbnQ6MzUuNHB0Jz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+VGVsYQ0KK2RlIHJlYWxjZSAoYXRyaWJ1dG9zKSBlc3ThIHNlbmRvIGV4aWJpZG8uPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczsNCittc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0IHN0eWxlPSdtYXJnaW4tbGVmdDozNS40cHQnPjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczsNCittc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48YnI+DQorPC9zcGFuPjxpPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5mPC9zcGFuPjwvaT48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6DQorVGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PGJyPg0KKzwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+TyBlc3RhZG8gZG8gcmVjdXJzbyBkZSB0ZWxhIGNvbmdlbGFkYQ0KKyh2ZWphIG8gY29tYW5kbyBGUkVFWkUpLjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQgc3R5bGU9J21hcmdpbi1sZWZ0OjM1LjRwdCc+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzOw0KK21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQgc3R5bGU9J3RleHQtaW5kZW50OjM1LjRwdCc+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPmJsYW5rPC9zcGFuPjxzcGFuDQorc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQgc3R5bGU9J3RleHQtaW5kZW50OjM1LjRwdCc+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPkENCit0ZWxhIG7jbyBlc3ThIGNvbmdlbGFkYS48L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5Og0KKyJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PG86cD4mbmJzcDs8L286cD48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0IHN0eWxlPSdtYXJnaW4tbGVmdDozNS40cHQnPjxpPjxzcGFuIHN0eWxlPSdmb250LXNpemU6DQorMTEuMHB0Jz5kPC9zcGFuPjwvaT48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PGJyPg0KKzwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+TyBu+m1lcm8gZGUgcG9udG9zIGJyYWlsbGUgc2VuZG8gdXNhZG8NCitwYXJhIGV4aWJpciBjYWRhIGNhcmFjdGVyICh2ZWphIG8gY29tYW5kbyBTSVhET1RTKS48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0IHN0eWxlPSdtYXJnaW4tbGVmdDozNS40cHQnPjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczsNCittc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0IHN0eWxlPSd0ZXh0LWluZGVudDozNS40cHQnPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz44PC9zcGFuPjxzcGFuDQorc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQgc3R5bGU9J3RleHQtaW5kZW50OjM1LjRwdCc+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPlRvZG9zDQorb3Mgb2l0byBwb250b3MgZXN0428gc2VuZG8gdXNhZG9zLjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQgc3R5bGU9J3RleHQtaW5kZW50OjM1LjRwdCc+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzOw0KK21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQgc3R5bGU9J3RleHQtaW5kZW50OjM1LjRwdCc+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPjY8L3NwYW4+PHNwYW4NCitzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dCBzdHlsZT0ndGV4dC1pbmRlbnQ6MzUuNHB0Jz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+U29tZW50ZQ0KK3BvbnRvcyA8c3QxOm1ldHJpY2NvbnZlcnRlciBQcm9kdWN0SUQ9IjEgYSIgdzpzdD0ib24iPjEgYTwvc3QxOm1ldHJpY2NvbnZlcnRlcj4NCis2IGVzdONvIHNlbmRvIHVzYWRvcy48L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5Og0KKyJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQgc3R5bGU9J21hcmdpbi1sZWZ0OjM1LjRwdCc+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzOw0KK21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxicj4NCis8L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPnU8L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzOw0KK21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxicj4NCis8L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPk8gZXN0YWRvIGRhIG1hafpzY3VsYSAobGV0cmEgbWFp+nNjdWxhKQ0KK2FwcmVzZW50YW0gY2FyYWN0ZXLtc3RpY2FzICh2ZWphIG8gY29tYW5kbyBDQVBCTElOSykuPC9zcGFuPjxzcGFuDQorc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQgc3R5bGU9J3RleHQtaW5kZW50OjM1LjRwdCc+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPmJsYW5rPC9zcGFuPjxzcGFuDQorc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQgc3R5bGU9J3RleHQtaW5kZW50OjM1LjRwdCc+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPkxldHJhcw0KK21hafpzY3VsYXMgbuNvIHBpc2Nhci48L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5Og0KKyJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQgc3R5bGU9J3RleHQtaW5kZW50OjM1LjRwdCc+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPkI8L3NwYW4+PHNwYW4NCitzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dCBzdHlsZT0ndGV4dC1pbmRlbnQ6MzUuNHB0Jz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+UGlzY2FyDQorbGV0cmFzIG1hafpzY3VsYXMuPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToNCisiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjUuNi4yIDxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5EaXNwbGF5IGNvbSAyMA0KK2PpbHVsYXMgb3UgbWVub3M8L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5Og0KKyJDb3VyaWVyIE5ldyInPjxicj4NCis8YnI+DQorPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5QbmV1beF0aWNvIGN1cnRvIHTqbSBzaWRvIHV0aWxpemFkb3MsDQorYXBlc2FyIGRlIHNlcmVtIHVtIHRhbnRvIGVuaWdt4XRpY2EsIGEgZmltIGRlIG1vc3RyYXIgbyBsYXlvdXQgZGEgY29sdW5hDQorcHJlY2lzYS48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0IHN0eWxlPSdtYXJnaW4tbGVmdDozNS40cHQnPjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczsNCittc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0IHN0eWxlPSd0ZXh0LWluZGVudDozNS40cHQnPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz54eHl5cw0KK3Z0IHRjbWZkdTwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dCBzdHlsZT0nbWFyZ2luLWxlZnQ6MzUuNHB0Jz48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7DQorbXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PGJyPg0KKzwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+eHg8L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzOw0KK21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxicj4NCis8L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPkFzIGNvbHVuYXMgKGNvbnRhbmRvIGEgcGFydGlyIGRlIDEpIHNvYnJlDQorYSB0ZWxhIGNvcnJlc3BvbmRlbnRlIOAgcG9zaefjbyBkbyBjdXJzb3IgKGNvbW8gbW9zdHJhZG8gbmEgbWV0YWRlIHN1cGVyaW9yIGRhcw0KK2PpbHVsYXMpIGUgcGFyYSBvIGNhbnRvIHN1cGVyaW9yIGVzcXVlcmRvIGRhIGphbmVsYSBkbyBicmFpbGxlIChtb3N0cmFkbyBuYQ0KK21ldGFkZSBpbmZlcmlvciBkYXMgY+lsdWxhcykuPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToNCisiQ291cmllciBOZXciJz48YnI+DQorPGJyPg0KKzwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+eXk8L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzOw0KK21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxicj4NCis8L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPkFzIGxpbmhhcyAoY29udGFuZG8gYSBwYXJ0aXIgZGUgMSkgc29icmUNCithIHRlbGEgY29ycmVzcG9uZGVudGUg4CBwb3Np5+NvIGRvIGN1cnNvciAoY29tbyBtb3N0cmFkbyBuYSBtZXRhZGUgc3VwZXJpb3IgZGFzDQorY+lsdWxhcykgZSBwYXJhIG8gY2FudG8gc3VwZXJpb3IgZXNxdWVyZG8gZGEgamFuZWxhIGRvIGJyYWlsbGUgKG1vc3RyYWRvIG5hDQorbWV0YWRlIGluZmVyaW9yIGRhcyBj6Wx1bGFzKS48L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5Og0KKyJDb3VyaWVyIE5ldyInPjxicj4NCis8YnI+DQorPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5zPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczsNCittc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48YnI+DQorPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5BcyBkZWZpbmnn9WVzIGRlIGFsZ3VtYXMgZGFzDQorY2FyYWN0ZXLtc3RpY2FzIGRvIEJSTFRUWS4gVW0gcmVjdXJzbyDpIGF0aXZhZG8gc2UgbyBwb250byBjb3JyZXNwb25kZW50ZSDpDQorZ2VyYWRvLjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQgc3R5bGU9J21hcmdpbi1sZWZ0OjM1LjRwdCc+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzOw0KK21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQgc3R5bGU9J3RleHQtaW5kZW50OjM1LjRwdCc+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPkRvdA0KKzE6IENvbmdlbGEgYSBpbWFnZW0gZGEgdGVsYSAodmVqYSBvIGNvbWFuZG8gRlJFRVpFKS48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0IHN0eWxlPSd0ZXh0LWluZGVudDozNS40cHQnPjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczsNCittc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0IHN0eWxlPSd0ZXh0LWluZGVudDozNS40cHQnPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5Eb3QNCisyOiBNb3N0cmFyIGF0cmlidXRvcyAodmVqYSBvIGNvbWFuZG8gRElTUE1EKS48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0IHN0eWxlPSd0ZXh0LWluZGVudDozNS40cHQnPjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczsNCittc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0IHN0eWxlPSd0ZXh0LWluZGVudDozNS40cHQnPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5Eb3QNCiszOiBUdW5lcyBkZSBhbGVydGEgKHZlamEgbyBjb21hbmRvIFRVTkVTKS48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0IHN0eWxlPSd0ZXh0LWluZGVudDozNS40cHQnPjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczsNCittc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0IHN0eWxlPSd0ZXh0LWluZGVudDozNS40cHQnPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5Eb3QNCis0OiBDdXJzb3Igdmlz7XZlbCAodmVqYSBvIGNvbWFuZG8gQ1NSVklTKS48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0IHN0eWxlPSd0ZXh0LWluZGVudDozNS40cHQnPjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczsNCittc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0IHN0eWxlPSd0ZXh0LWluZGVudDozNS40cHQnPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5Eb3QNCis1OiBCbG9jbyBkZSBjdXJzb3IgKHZlamEgbyBjb21hbmRvIENTUlNJWkUpLjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQgc3R5bGU9J3RleHQtaW5kZW50OjM1LjRwdCc+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzOw0KK21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQgc3R5bGU9J3RleHQtaW5kZW50OjM1LjRwdCc+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPkRvdA0KKzY6IEN1cnNvciBwaXNjYW5kbyAodmVqYSBvIGNvbWFuZG8gQ1NSQkxJTkspLjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQgc3R5bGU9J3RleHQtaW5kZW50OjM1LjRwdCc+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQgc3R5bGU9J3RleHQtaW5kZW50OjM1LjRwdCc+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPkRvdA0KKzc6IEN1cnNvciBkZSBtb25pdG9yYW1lbnRvICh2ZWphIG8gY29tYW5kbyBDU1JUUkspLjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQgc3R5bGU9J3RleHQtaW5kZW50OjM1LjRwdCc+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzOw0KK21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQgc3R5bGU9J3RleHQtaW5kZW50OjM1LjRwdCc+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPkRvdA0KKzg6IEphbmVsYSBkZXNsaXphbnRlICh2ZWphIG8gY29tYW5kbyBTTElERVdJTikuPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LWZhbWlseToNCitUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0IHN0eWxlPSdtYXJnaW4tbGVmdDozNS40cHQnPjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczsNCittc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48YnI+DQorPC9zcGFuPjxpPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz52dDwvc3Bhbj48L2k+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5Og0KK1RpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxicj4NCis8L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPk8gbvptZXJvIChjb250YW5kbyBhIHBhcnRpciAxKSBkbw0KK3Rlcm1pbmFsIHZpcnR1YWwgYXR1YWwuPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToNCisiQ291cmllciBOZXciJz48YnI+DQorPGJyPg0KKzwvc3Bhbj48aT48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+dDwvc3Bhbj48L2k+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5Og0KK1RpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxicj4NCis8L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPk8gZXN0YWRvIGRvIHJlY3Vyc28gZGUgY29udHJvbGUgZGUgY3Vyc29yDQorKHZlamEgbyBjb21hbmRvIENTUlRSSykuPG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dCBzdHlsZT0nbWFyZ2luLWxlZnQ6MzUuNHB0Jz48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7DQorbXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD4mbmJzcDs8L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dCBzdHlsZT0ndGV4dC1pbmRlbnQ6MzUuNHB0Jz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+Ymxhbms8L3NwYW4+PHNwYW4NCitzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dCBzdHlsZT0ndGV4dC1pbmRlbnQ6MzUuNHB0Jz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+Q29udHJvbGUNCitkZSBjdXJzb3IgZXN04SBvZmYuPC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQgc3R5bGU9J3RleHQtaW5kZW50OjM1LjRwdCc+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPnQ8L3NwYW4+PHNwYW4NCitzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dCBzdHlsZT0ndGV4dC1pbmRlbnQ6MzUuNHB0Jz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+Q29udHJvbGUNCitjdXJzb3IgZXN04SBvbi48L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQgc3R5bGU9J21hcmdpbi1sZWZ0OjM1LjRwdCc+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzOw0KK21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxicj4NCis8L3NwYW4+PGk+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPmM8L3NwYW4+PC9pPjxzcGFuIHN0eWxlPSdmb250LWZhbWlseToNCitUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0IHN0eWxlPSdtYXJnaW4tbGVmdDozNS40cHQnPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5PDQorZXN0YWRvIGRvcyByZWN1cnNvcyB2aXNpYmlsaWRhZGUgZG8gY3Vyc29yICh2ZXIgbyBDU1JWSVMgZSBDU1JCTElOSykuPC9zcGFuPjxzcGFuDQorc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQgc3R5bGU9J3RleHQtaW5kZW50OjM1LjRwdCc+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPmJsYW5rPC9zcGFuPjxzcGFuDQorc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQgc3R5bGU9J3RleHQtaW5kZW50OjM1LjRwdCc+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPk8NCitjdXJzb3IgbuNvIGVzdGl2ZXIgdmlz7XZlbCwgZSBu428gcGlzY2FyIHF1YW5kbyBzZSBmYXogdmlz7XZlbC48L3NwYW4+PHNwYW4NCitzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PHNwYW4NCitzdHlsZT0nbXNvLXRhYi1jb3VudDoxJz6goKCgoKCgoKCgoKCgoKAgPC9zcGFuPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQgc3R5bGU9J3RleHQtaW5kZW50OjM1LjRwdCc+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPmI8L3NwYW4+PHNwYW4NCitzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dCBzdHlsZT0ndGV4dC1pbmRlbnQ6MzUuNHB0Jz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+Tw0KK2N1cnNvciBu428g6SB2aXPtdmVsLCBlIGNvbWXnYSBhIHBpc2NhciBxdWFuZG8gc2UgZmF6IHZpc+12ZWwuPC9zcGFuPjxzcGFuDQorc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPiZuYnNwOyZuYnNwOyZuYnNwOzwvc3Bhbj48c3Bhbg0KK3N0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0IHN0eWxlPSd0ZXh0LWluZGVudDozNS40cHQnPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz52PC9zcGFuPjxzcGFuDQorc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQgc3R5bGU9J3RleHQtaW5kZW50OjM1LjRwdCc+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPk8NCitjdXJzb3Ig6SB2aXPtdmVsLCBlIG7jbyBlc3ThIHBpc2NhbmRvLjwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7DQorbXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+Jm5ic3A7Jm5ic3A7Jm5ic3A7PC9zcGFuPjxzcGFuDQorc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQgc3R5bGU9J3RleHQtaW5kZW50OjM1LjRwdCc+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPkI8L3NwYW4+PHNwYW4NCitzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dCBzdHlsZT0ndGV4dC1pbmRlbnQ6MzUuNHB0Jz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+Tw0KK2N1cnNvciDpIHZpc+12ZWwgZSBlc3ThIHBpc2NhbmRvLjwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7DQorbXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dCBzdHlsZT0nbWFyZ2luLWxlZnQ6MzUuNHB0Jz48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7DQorbXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PGJyPg0KKzwvc3Bhbj48aT48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+bTwvc3Bhbj48L2k+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5Og0KK1RpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxicj4NCis8L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPk8gbW9kbyBkZSBleGliaefjbyBhdHVhbCAodmVqYSBvIGNvbWFuZG8NCitESVNQTUQpLjwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+PG86cD4mbmJzcDs8L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dCBzdHlsZT0ndGV4dC1pbmRlbnQ6MzUuNHB0Jz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+dDwvc3Bhbj48c3Bhbg0KK3N0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0IHN0eWxlPSd0ZXh0LWluZGVudDozNS40cHQnPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5UZWxhDQorZGUgY29udGX6ZG8gKHRleHRvKSBlc3ThIHNlbmRvIGV4aWJpZG8uPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczsNCittc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz4mbmJzcDsmbmJzcDsmbmJzcDs8L3NwYW4+PHNwYW4NCitzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dCBzdHlsZT0ndGV4dC1pbmRlbnQ6MzUuNHB0Jz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+YTwvc3Bhbj48c3Bhbg0KK3N0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0IHN0eWxlPSd0ZXh0LWluZGVudDozNS40cHQnPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5UZWxhDQorZGUgcmVhbGNlIChhdHJpYnV0b3MpIGVzdOEgc2VuZG8gZXhpYmlkby48L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzOw0KK21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQgc3R5bGU9J21hcmdpbi1sZWZ0OjM1LjRwdCc+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzOw0KK21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxicj4NCis8L3NwYW4+PGk+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPmY8L3NwYW4+PC9pPjxzcGFuIHN0eWxlPSdmb250LWZhbWlseToNCitUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48YnI+DQorPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5PIGVzdGFkbyBkbyByZWN1cnNvIGRlIHRlbGEgY29uZ2VsYWRhDQorKHZlamEgbyBjb21hbmRvIEZSRUVaRSkuPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToNCisiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0IHN0eWxlPSd0ZXh0LWluZGVudDozNS40cHQnPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5ibGFuazwvc3Bhbj48c3Bhbg0KK3N0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0IHN0eWxlPSd0ZXh0LWluZGVudDozNS40cHQnPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5BDQordGVsYSBu428gZXN04SBjb25nZWxhZGEuPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToNCisiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0IHN0eWxlPSd0ZXh0LWluZGVudDozNS40cHQnPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5mPC9zcGFuPjxzcGFuDQorc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQgc3R5bGU9J3RleHQtaW5kZW50OjM1LjRwdCc+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPkENCit0ZWxhIGVzdOEgY29uZ2VsYWRhLjwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6DQorIkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dCBzdHlsZT0nbWFyZ2luLWxlZnQ6MzUuNHB0Jz48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7DQorbXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PGJyPg0KKzwvc3Bhbj48aT48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+ZDwvc3Bhbj48L2k+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5Og0KK1RpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxicj4NCis8L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPk8gbvptZXJvIGRlIHBvbnRvcyBicmFpbGxlIHNlbmRvIHVzYWRvDQorcGFyYSBleGliaXIgY2FkYSBjYXJhY3RlciAodmVqYSBvIGNvbWFuZG8gU0lYRE9UUykuPG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dCBzdHlsZT0nbWFyZ2luLWxlZnQ6MzUuNHB0Jz48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7DQorbXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD4mbmJzcDs8L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dCBzdHlsZT0ndGV4dC1pbmRlbnQ6MzUuNHB0Jz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+ODwvc3Bhbj48c3Bhbg0KK3N0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0IHN0eWxlPSd0ZXh0LWluZGVudDozNS40cHQnPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5Ub2Rvcw0KK29zIG9pdG8gcG9udG9zIGVzdONvIHNlbmRvIHVzYWRvcy48L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzOw0KK21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQgc3R5bGU9J3RleHQtaW5kZW50OjM1LjRwdCc+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPjY8L3NwYW4+PHNwYW4NCitzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dCBzdHlsZT0ndGV4dC1pbmRlbnQ6MzUuNHB0Jz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+U29tZW50ZQ0KK3BvbnRvcyA8c3QxOm1ldHJpY2NvbnZlcnRlciBQcm9kdWN0SUQ9IjEgYSIgdzpzdD0ib24iPjEgYTwvc3QxOm1ldHJpY2NvbnZlcnRlcj4NCis2IGVzdONvIHNlbmRvIHVzYWRvcy48L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5Og0KKyJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQgc3R5bGU9J21hcmdpbi1sZWZ0OjM1LjRwdCc+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzOw0KK21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxicj4NCis8L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPnU8L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzOw0KK21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxicj4NCis8L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPk8gZXN0YWRvIGRhIG1hafpzY3VsYSAobGV0cmEgbWFp+nNjdWxhKQ0KK2FwcmVzZW50YW0gY2FyYWN0ZXLtc3RpY2FzICh2ZWphIG8gY29tYW5kbyBDQVBCTElOSykuPG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dCBzdHlsZT0nbWFyZ2luLWxlZnQ6MzUuNHB0Jz48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7DQorbXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD4mbmJzcDs8L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dCBzdHlsZT0ndGV4dC1pbmRlbnQ6MzUuNHB0Jz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+Ymxhbms8L3NwYW4+PHNwYW4NCitzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dCBzdHlsZT0ndGV4dC1pbmRlbnQ6MzUuNHB0Jz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+TGV0cmFzDQorbWFp+nNjdWxhcyBu428gcGlzY2FyLjwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6DQorIkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+Jm5ic3A7Jm5ic3A7Jm5ic3A7PC9zcGFuPjxzcGFuDQorc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQgc3R5bGU9J3RleHQtaW5kZW50OjM1LjRwdCc+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPkI8L3NwYW4+PHNwYW4NCitzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dCBzdHlsZT0ndGV4dC1pbmRlbnQ6MzUuNHB0Jz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+UGlzY2FyDQorbGV0cmFzIG1hafpzY3VsYXMuPG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dCBzdHlsZT0ndGV4dC1pbmRlbnQ6MzUuNHB0Jz48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7DQorbXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD4mbmJzcDs8L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nbXNvLWJpZGktZm9udC1zaXplOjE4LjBwdCc+NS43IENvbWFuZG8gZGUgTW9kbw0KK2RlIEFwcmVuZGl6YWdlbTwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PGJyPg0KKzwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+Q29tYW5kbyBtb2RvIGRlIGFwcmVuZGl6YWdlbSDpIHVtYSBmb3JtYQ0KK2ludGVyYXRpdmEgZGUgYXByZW5kZXIgbyBxdWUgYXMgdGVjbGFzIG5vIHZpc29yIGRvIEJyYWlsbGUgZmF6LiBQb2RlIHNlcg0KK2FjZXNzYWRvIHRhbnRvIHBlbG8gY29tYW5kbyBMRUFSTiBvdSBhdHJhdulzIGRvIHV0aWxpdOFyaW8gYnJsdGVzdC4gRXNzZQ0KK3JlY3Vyc28gbuNvIGVzdGFy4SBkaXNwb27tdmVsIHNlIGEgb3Dn428gZGUgY29tcGlsYefjbyAtLWRpc2FibGUtbGVhcm4tbW9kZSBmb2kNCitlc3BlY2lmaWNhZG8uPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48YnI+DQorPGJyPg0KKzwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+UXVhbmRvIGVzdGUgbW9kbyBlc3ThIGluc2NyaXRvLCBhDQorbWVuc2FnZW0gY29tbWFuZCBsZWFybiBtb2RlIOkgZXNjcml0YSBubyBkaXNwbGF5IGJyYWlsbGUuIEVudONvLCBjYWRhIHRlY2xhIChvdQ0KK2NvbWJpbmHn428gZGUgdGVjbGFzKSBzb2JyZSBhIHRlbGEg6SBwcmVzc2lvbmFkYSwgdW1hIG1lbnNhZ2VtIGN1cnRhIHF1ZQ0KK2Rlc2NyZXZhIGEgc3VhIGZ1bufjbyBCUkxUVFkgZXN04SBlc2NyaXRvLiBFc3RlIG1vZG8gc2FpIGltZWRpYXRhbWVudGUgc2UgYQ0KK3RlY2xhIChvdSBjb21iaW5h5+NvIGRlIHRlY2xhcykgcGFyYSBvIGNvbWFuZG8gTEVBUk4g6SBwcmVzc2lvbmFkby4gRWxlIHNhaQ0KK2F1dG9tYXRpY2FtZW50ZSwgZSBhIG1lbnNhZ2VtIGRvbmUg6SBlc2NyaXRhLCBzZSBkZXogc2VndW5kb3MgdHJhbnNjb3JyZXIgc2VtDQorcXVhbHF1ZXIgdGVjbGEgbm8gZGlzcGxheSBzZW5kbyBwcmVzc2lvbmFkby4gT2JzZXJ2ZSBxdWUgYWxndW5zIGRpc3BsYXlzIG7jbw0KK3TqbSBzaW5hbCBhbyBkaXNwbGF5IGUvb3UgYWxndW5zIGRyaXZlcnMgbuNvIHNpbmFsaXphbSBCUkxUVFkgYXTpIHF1ZSB0b2RhcyBhcw0KK3RlY2xhcyBz428gbGliZXJhZGFzLjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48YnI+DQorPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5TZSB1bWEgbWVuc2FnZW0gZm9yIG1haW9yIHF1ZSBvIGRpc3BsYXkNCitCcmFpbGxlLCBlbnTjbyDpIGV4aWJpZGEgPHN0MTpQZXJzb25OYW1lIFByb2R1Y3RJRD0iZW0gc2VnbWVudG9zLiBPIiB3OnN0PSJvbiI+ZW0NCisgc2VnbWVudG9zLiBPPC9zdDE6UGVyc29uTmFtZT4gY29tcHJpbWVudG8gZGUgY2FkYSBzZWdtZW50bywgbWFzIG8g+mx0aW1vIOkgdW0NCithIG1lbm9zIGRvIHF1ZSBhIGxhcmd1cmEgZG8gZGlzcGxheSwgY29tIG8gY2FyYWN0ZXIgbWFpcyDgIGRpcmVpdGEgbm8gdmlzb3IgYQ0KK3NlciBkZWZpbmlkYSBjb21vIHVtIHNpbmFsIGRlIG1lbm9zLiBDYWRhIHNlZ21lbnRvIHNlIG1hbnRlbmhhIG5vIHZpc29yIHNlamENCitwb3IgYWxndW5zIHNlZ3VuZG9zICh2ZWphIGEgb3Dn428tTSkgb3UgYXTpIHF1ZSBxdWFscXVlciB0ZWNsYSBuYSB0ZWxhIOkNCitwcmVzc2lvbmFkYS48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdtc28tYmlkaS1mb250LXNpemU6MTguMHB0Jz42IJYgVGFiZWxhczxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J21zby1iaWRpLWZvbnQtc2l6ZToxOC4wcHQnPjYuMSAtIFRhYmVsYXMgZGUgVGV4dG88L3NwYW4+PHNwYW4NCitzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD4mbmJzcDs8L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+T3MgYXJxdWl2b3MgY29tIG5vbWVzIG5vDQorZm9ybWF0byAqLiB0dGIgc+NvIHRhYmVsYXMgZGUgdGV4dG8sIGUgY29tIG5vbWVzIG5vIGZvcm1hdG8gKi50dGkgc+NvIHRleHRvcw0KK3N1YnRhYmVsYWRvcy4gRWxlcyBz428gdXNhZG9zIHBlbG8gQlJMVFRZIHBhcmEgdHJhZHV6aXIgb3MgY2FyYWN0ZXJlcyBuYSB0ZWxhDQorZW0gc3VhcyByZXNwZWN0aXZhcyByZXByZXNlbnRh5/VlcyBkZSA4IHBvbnRvcyBubyBjb21wdXRhZG9yIGJyYWlsbGUuPC9zcGFuPjxzcGFuDQorc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPkJSTFRUWSDpIGluaWNpYWxtZW50ZQ0KK2NvbmZpZ3VyYWRvIHBhcmEgdXNhciBhIHRhYmVsYSBkZSB0ZXh0byBOb3J0aCBBbWVyaWNhbiBCcmFpbGxlIENvbXB1dGVyDQorQ29kZShOQUJDQykuIEFs6W0gZGVzc2UgcGFkcuNvLCBhcyBhbHRlcm5hdGl2YXMgYSBzZWd1aXIgc+NvIGZvcm5lY2lkYXM6PC9zcGFuPjxzcGFuDQorc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQgc3R5bGU9J3RleHQtaW5kZW50OjM1LjRwdCc+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPkF1dG88bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0IHN0eWxlPSd0ZXh0LWluZGVudDozNS40cHQnPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5hdXRvLXNlbGXn428NCitkYSBsb2NhbGlkYWRlLWJhc2U8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0IHN0eWxlPSd0ZXh0LWluZGVudDozNS40cHQnPjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczsNCittc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0IHN0eWxlPSd0ZXh0LWluZGVudDozNS40cHQnPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5hcjwvc3Bhbj48c3Bhbg0KK3N0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48c3Bhbg0KK3N0eWxlPSdtc28tdGFiLWNvdW50OjEnPqCgoKCgoKCgoCA8L3NwYW4+PC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz7BcmFiZQ0KKyhnZW7pcmljbyk8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0IHN0eWxlPSd0ZXh0LWluZGVudDozNS40cHQnPjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczsNCittc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0IHN0eWxlPSd0ZXh0LWluZGVudDozNS40cHQnPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5hczwvc3Bhbj48c3Bhbg0KK3N0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48c3Bhbg0KK3N0eWxlPSdtc28tdGFiLWNvdW50OjEnPqCgoKCgoKCgoCA8L3NwYW4+PC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5Bc3NhbepzPG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dCBzdHlsZT0ndGV4dC1pbmRlbnQ6MzUuNHB0Jz48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7DQorbXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD4mbmJzcDs8L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dCBzdHlsZT0ndGV4dC1pbmRlbnQ6MzUuNHB0Jz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+YXdhPC9zcGFuPjxzcGFuDQorc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxzcGFuDQorc3R5bGU9J21zby10YWItY291bnQ6MSc+oKCgoKCgIDwvc3Bhbj48L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPkF3YWRoaTxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQgc3R5bGU9J3RleHQtaW5kZW50OjM1LjRwdCc+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzOw0KK21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQgc3R5bGU9J3RleHQtaW5kZW50OjM1LjRwdCc+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPmJnPC9zcGFuPjxzcGFuDQorc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxzcGFuDQorc3R5bGU9J21zby10YWItY291bnQ6MSc+oKCgoKCgoKCgIDwvc3Bhbj48L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPkL6bGdhcm88L3NwYW4+PHNwYW4NCitzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+PG86cD4mbmJzcDs8L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dCBzdHlsZT0ndGV4dC1pbmRlbnQ6MzUuNHB0Jz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+Ymg8L3NwYW4+PHNwYW4NCitzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PHNwYW4NCitzdHlsZT0nbXNvLXRhYi1jb3VudDoxJz6goKCgoKCgoKAgPC9zcGFuPjwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+QmloYXJpPC9zcGFuPjxzcGFuDQorc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQgc3R5bGU9J3RleHQtaW5kZW50OjM1LjRwdCc+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPmJuPC9zcGFuPjxzcGFuDQorc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxzcGFuDQorc3R5bGU9J21zby10YWItY291bnQ6MSc+oKCgoKCgoKCgIDwvc3Bhbj48L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPkJlbmdhbGk8L3NwYW4+PHNwYW4NCitzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+PG86cD4mbmJzcDs8L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dCBzdHlsZT0ndGV4dC1pbmRlbnQ6MzUuNHB0Jz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+Ym88L3NwYW4+PHNwYW4NCitzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PHNwYW4NCitzdHlsZT0nbXNvLXRhYi1jb3VudDoxJz6goKCgoKCgoKAgPC9zcGFuPjwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+VGliZXRhbm88L3NwYW4+PHNwYW4NCitzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+PG86cD4mbmJzcDs8L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dCBzdHlsZT0ndGV4dC1pbmRlbnQ6MzUuNHB0Jz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+YnJhPC9zcGFuPjxzcGFuDQorc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxzcGFuDQorc3R5bGU9J21zby10YWItY291bnQ6MSc+oKCgoKCgIDwvc3Bhbj48L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPkJyYWoNCisoP0JyYWogQmhhc2hhICk8L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQgc3R5bGU9J21hcmdpbi1sZWZ0OjM1LjRwdCc+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPmJyZjwvc3Bhbj48c3Bhbg0KK3N0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48c3Bhbg0KK3N0eWxlPSdtc28tdGFiLWNvdW50OjEnPqCgoKCgoCA8L3NwYW4+PC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5wYXJhDQordmlzdWFsaXph5+NvIGRlIGFycXVpdm9zLiBicmYgZGVudHJvIGRlIHVtIGVkaXRvciBvdSBwYWdlcjwvc3Bhbj48c3Bhbg0KK3N0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0IHN0eWxlPSd0ZXh0LWluZGVudDozNS40cHQnPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5jczwvc3Bhbj48c3Bhbg0KK3N0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48c3Bhbg0KK3N0eWxlPSdtc28tdGFiLWNvdW50OjEnPqCgoKCgoKCgoCA8L3NwYW4+PC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5DaGVjbzxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQgc3R5bGU9J3RleHQtaW5kZW50OjM1LjRwdCc+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzOw0KK21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQgc3R5bGU9J3RleHQtaW5kZW50OjM1LjRwdCc+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPmN5PC9zcGFuPjxzcGFuDQorc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxzcGFuDQorc3R5bGU9J21zby10YWItY291bnQ6MSc+oKCgoKCgoKCgIDwvc3Bhbj48L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPkdhbOpzPC9zcGFuPjxzcGFuDQorc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQgc3R5bGU9J3RleHQtaW5kZW50OjM1LjRwdCc+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQgc3R5bGU9J3RleHQtaW5kZW50OjM1LjRwdCc+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPmRhPC9zcGFuPjxzcGFuDQorc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxzcGFuDQorc3R5bGU9J21zby10YWItY291bnQ6MSc+oKCgoKCgoKCgIDwvc3Bhbj48L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPkRpbmFtYXJxdepzPC9zcGFuPjxzcGFuDQorc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQgc3R5bGU9J3RleHQtaW5kZW50OjM1LjRwdCc+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQgc3R5bGU9J3RleHQtaW5kZW50OjM1LjRwdCc+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPmRlPC9zcGFuPjxzcGFuDQorc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxzcGFuDQorc3R5bGU9J21zby10YWItY291bnQ6MSc+oKCgoKCgoKCgIDwvc3Bhbj48L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPkFsZW3jbzwvc3Bhbj48c3Bhbg0KK3N0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0IHN0eWxlPSd0ZXh0LWluZGVudDozNS40cHQnPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0IHN0eWxlPSd0ZXh0LWluZGVudDozNS40cHQnPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5kcmE8L3NwYW4+PHNwYW4NCitzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PHNwYW4NCitzdHlsZT0nbXNvLXRhYi1jb3VudDoxJz6goKCgoKAgPC9zcGFuPjwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+RHJhdmlkaWFuYXM8L3NwYW4+PHNwYW4NCitzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dCBzdHlsZT0ndGV4dC1pbmRlbnQ6MzUuNHB0Jz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+PG86cD4mbmJzcDs8L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dCBzdHlsZT0ndGV4dC1pbmRlbnQ6MzUuNHB0Jz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+ZWw8L3NwYW4+PHNwYW4NCitzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PHNwYW4NCitzdHlsZT0nbXNvLXRhYi1jb3VudDoxJz6goKCgoKCgoKAgPC9zcGFuPjwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+R3JlZ288L3NwYW4+PHNwYW4NCitzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dCBzdHlsZT0ndGV4dC1pbmRlbnQ6MzUuNHB0Jz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+PG86cD4mbmJzcDs8L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dCBzdHlsZT0ndGV4dC1pbmRlbnQ6MzUuNHB0Jz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+ZW08L3NwYW4+PHNwYW4NCitzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PHNwYW4NCitzdHlsZT0nbXNvLXRhYi1jb3VudDoxJz6goKCgoKCgoKAgPC9zcGFuPjwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+SW5nbOpzPC9zcGFuPjxzcGFuDQorc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQgc3R5bGU9J3RleHQtaW5kZW50OjM1LjRwdCc+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQgc3R5bGU9J3RleHQtaW5kZW50OjM1LjRwdCc+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPmVuX0NBPC9zcGFuPjxzcGFuDQorc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxzcGFuDQorc3R5bGU9J21zby10YWItY291bnQ6MSc+IDwvc3Bhbj48L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPkluZ2zqcw0KKyhDYW5hZOEpPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0IHN0eWxlPSd0ZXh0LWluZGVudDozNS40cHQnPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5lbl9VSzwvc3Bhbj48c3Bhbg0KK3N0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48c3Bhbg0KK3N0eWxlPSdtc28tdGFiLWNvdW50OjEnPiA8L3NwYW4+PC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5Jbmds6nMNCisoUmVpbm8gVW5pZG8pPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0IHN0eWxlPSd0ZXh0LWluZGVudDozNS40cHQnPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5lbl9VUzwvc3Bhbj48c3Bhbg0KK3N0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48c3Bhbg0KK3N0eWxlPSdtc28tdGFiLWNvdW50OjEnPiA8L3NwYW4+PC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5Jbmds6nMNCisoRXN0YWRvcyBVbmlkb3MpPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToNCisiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0IHN0eWxlPSd0ZXh0LWluZGVudDozNS40cHQnPjxzcGFuIGxhbmc9RU4tVVMNCitzdHlsZT0nZm9udC1zaXplOjExLjBwdDttc28tYW5zaS1sYW5ndWFnZTpFTi1VUyc+ZW4tbmFiY2M8L3NwYW4+PHNwYW4NCitsYW5nPUVOLVVTIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciOw0KK21zby1hbnNpLWxhbmd1YWdlOkVOLVVTJz48c3BhbiBzdHlsZT0nbXNvLXRhYi1jb3VudDoxJz6goKCgoKAgPC9zcGFuPjwvc3Bhbj48c3Bhbg0KK2xhbmc9RU4tVVMgc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQ7bXNvLWFuc2ktbGFuZ3VhZ2U6RU4tVVMnPkluZ2zqcyAoTm9ydGgNCitBbWVyaWNhbiBCcmFpbGxlIENvbXB1dGVyIENvZGUpPC9zcGFuPjxzcGFuIGxhbmc9RU4tVVMgc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzOw0KK21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyI7bXNvLWFuc2ktbGFuZ3VhZ2U6RU4tVVMnPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gbGFuZz1FTi1VUyBzdHlsZT0nZm9udC1zaXplOjExLjBwdDttc28tYW5zaS1sYW5ndWFnZToNCitFTi1VUyc+PG86cD4mbmJzcDs8L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dCBzdHlsZT0ndGV4dC1pbmRlbnQ6MzUuNHB0Jz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+ZW88L3NwYW4+PHNwYW4NCitzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PHNwYW4NCitzdHlsZT0nbXNvLXRhYi1jb3VudDoxJz6goKCgoKCgoKAgPC9zcGFuPjwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+RXNwZXJhbnRvPC9zcGFuPjxzcGFuDQorc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQgc3R5bGU9J3RleHQtaW5kZW50OjM1LjRwdCc+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPmVzPC9zcGFuPjxzcGFuDQorc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxzcGFuDQorc3R5bGU9J21zby10YWItY291bnQ6MSc+oKCgoKCgoKCgIDwvc3Bhbj48L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPkVzcGFuaG9sPC9zcGFuPjxzcGFuDQorc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQgc3R5bGU9J3RleHQtaW5kZW50OjM1LjRwdCc+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQgc3R5bGU9J3RleHQtaW5kZW50OjM1LjRwdCc+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPmV0PC9zcGFuPjxzcGFuDQorc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxzcGFuDQorc3R5bGU9J21zby10YWItY291bnQ6MSc+oKCgoKCgoKCgIDwvc3Bhbj48L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPkVzdG9uaWFubzwvc3Bhbj48c3Bhbg0KK3N0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0IHN0eWxlPSd0ZXh0LWluZGVudDozNS40cHQnPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5maTwvc3Bhbj48c3Bhbg0KK3N0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48c3Bhbg0KK3N0eWxlPSdtc28tdGFiLWNvdW50OjEnPqCgoKCgoKCgoCA8L3NwYW4+PC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5GaW5sYW5kZXM8L3NwYW4+PHNwYW4NCitzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dCBzdHlsZT0ndGV4dC1pbmRlbnQ6MzUuNHB0Jz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+PG86cD4mbmJzcDs8L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dCBzdHlsZT0ndGV4dC1pbmRlbnQ6MzUuNHB0Jz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+ZnI8L3NwYW4+PHNwYW4NCitzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PHNwYW4NCitzdHlsZT0nbXNvLXRhYi1jb3VudDoxJz6goKCgoKCgoKAgPC9zcGFuPjwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+RnJhbmPqczwvc3Bhbj48c3Bhbg0KK3N0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0IHN0eWxlPSd0ZXh0LWluZGVudDozNS40cHQnPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5mcl9DQTwvc3Bhbj48c3Bhbg0KK3N0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48c3Bhbg0KK3N0eWxlPSdtc28tdGFiLWNvdW50OjEnPiA8L3NwYW4+PC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5GcmFuY+pzDQorKENhbmFk4Sk8L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQgc3R5bGU9J3RleHQtaW5kZW50OjM1LjRwdCc+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPmZyX0ZSPC9zcGFuPjxzcGFuDQorc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxzcGFuDQorc3R5bGU9J21zby10YWItY291bnQ6MSc+IDwvc3Bhbj48L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPkZyYW5j6nMNCisoRnJhbudhKTwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+PG86cD4mbmJzcDs8L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dCBzdHlsZT0ndGV4dC1pbmRlbnQ6MzUuNHB0Jz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+ZnJfMjAwNzwvc3Bhbj48c3Bhbg0KK3N0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48c3Bhbg0KK3N0eWxlPSdtc28tdGFiLWNvdW50OjEnPqCgoKCgoKCgoCA8L3NwYW4+PC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5GcmFuY+pzDQorKHVuaWZpY2Fkbyk8L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQgc3R5bGU9J3RleHQtaW5kZW50OjM1LjRwdCc+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPmZyLWNiaWZzPC9zcGFuPjxzcGFuDQorc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxzcGFuDQorc3R5bGU9J21zby10YWItY291bnQ6MSc+oKCgoKCgIDwvc3Bhbj48L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPkZyYW5j6nMNCisoQ29kZSBCcmFpbGxlIEluZm9ybWF0aXF1ZSBGcmFu52FpcyBTdGFuZGFyZCk8L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5Og0KK1RpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQgc3R5bGU9J3RleHQtaW5kZW50OjM1LjRwdCc+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPmdhPC9zcGFuPjxzcGFuDQorc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxzcGFuDQorc3R5bGU9J21zby10YWItY291bnQ6MSc+oKCgoKCgoKCgIDwvc3Bhbj48L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPklybGFuZOpzPC9zcGFuPjxzcGFuDQorc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQgc3R5bGU9J3RleHQtaW5kZW50OjM1LjRwdCc+PHNwYW4gbGFuZz1FTi1VUw0KK3N0eWxlPSdmb250LXNpemU6MTEuMHB0O21zby1hbnNpLWxhbmd1YWdlOkVOLVVTJz5nZDwvc3Bhbj48c3BhbiBsYW5nPUVOLVVTDQorc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyI7bXNvLWFuc2ktbGFuZ3VhZ2U6DQorRU4tVVMnPjxzcGFuIHN0eWxlPSdtc28tdGFiLWNvdW50OjEnPqCgoKCgoKCgoCA8L3NwYW4+PC9zcGFuPjxzcGFuIGxhbmc9RU4tVVMNCitzdHlsZT0nZm9udC1zaXplOjExLjBwdDttc28tYW5zaS1sYW5ndWFnZTpFTi1VUyc+R2HpbGljbzwvc3Bhbj48c3Bhbg0KK2xhbmc9RU4tVVMgc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyI7DQorbXNvLWFuc2ktbGFuZ3VhZ2U6RU4tVVMnPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gbGFuZz1FTi1VUyBzdHlsZT0nZm9udC1zaXplOjExLjBwdDttc28tYW5zaS1sYW5ndWFnZToNCitFTi1VUyc+PG86cD4mbmJzcDs8L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dCBzdHlsZT0ndGV4dC1pbmRlbnQ6MzUuNHB0Jz48c3BhbiBsYW5nPUVOLVVTDQorc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQ7bXNvLWFuc2ktbGFuZ3VhZ2U6RU4tVVMnPmdvbjwvc3Bhbj48c3BhbiBsYW5nPUVOLVVTDQorc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyI7bXNvLWFuc2ktbGFuZ3VhZ2U6DQorRU4tVVMnPjxzcGFuIHN0eWxlPSdtc28tdGFiLWNvdW50OjEnPqCgoKCgoCA8L3NwYW4+PC9zcGFuPjxzcGFuIGxhbmc9RU4tVVMNCitzdHlsZT0nZm9udC1zaXplOjExLjBwdDttc28tYW5zaS1sYW5ndWFnZTpFTi1VUyc+R29uZGk8L3NwYW4+PHNwYW4gbGFuZz1FTi1VUw0KK3N0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciO21zby1hbnNpLWxhbmd1YWdlOg0KK0VOLVVTJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIGxhbmc9RU4tVVMgc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQ7bXNvLWFuc2ktbGFuZ3VhZ2U6DQorRU4tVVMnPjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQgc3R5bGU9J3RleHQtaW5kZW50OjM1LjRwdCc+PHNwYW4gbGFuZz1FTi1VUw0KK3N0eWxlPSdmb250LXNpemU6MTEuMHB0O21zby1hbnNpLWxhbmd1YWdlOkVOLVVTJz5ndTwvc3Bhbj48c3BhbiBsYW5nPUVOLVVTDQorc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyI7bXNvLWFuc2ktbGFuZ3VhZ2U6DQorRU4tVVMnPjxzcGFuIHN0eWxlPSdtc28tdGFiLWNvdW50OjEnPqCgoKCgoKCgoCA8L3NwYW4+PC9zcGFuPjxzcGFuIGxhbmc9RU4tVVMNCitzdHlsZT0nZm9udC1zaXplOjExLjBwdDttc28tYW5zaS1sYW5ndWFnZTpFTi1VUyc+R3V6ZXJhdGU8L3NwYW4+PHNwYW4NCitsYW5nPUVOLVVTIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciOw0KK21zby1hbnNpLWxhbmd1YWdlOkVOLVVTJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIGxhbmc9RU4tVVMgc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQ7bXNvLWFuc2ktbGFuZ3VhZ2U6DQorRU4tVVMnPjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQgc3R5bGU9J3RleHQtaW5kZW50OjM1LjRwdCc+PHNwYW4gbGFuZz1FTi1VUw0KK3N0eWxlPSdmb250LXNpemU6MTEuMHB0O21zby1hbnNpLWxhbmd1YWdlOkVOLVVTJz5oZTwvc3Bhbj48c3BhbiBsYW5nPUVOLVVTDQorc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyI7bXNvLWFuc2ktbGFuZ3VhZ2U6DQorRU4tVVMnPjxzcGFuIHN0eWxlPSdtc28tdGFiLWNvdW50OjEnPqCgoKCgoKCgoCA8L3NwYW4+PC9zcGFuPjxzcGFuIGxhbmc9RU4tVVMNCitzdHlsZT0nZm9udC1zaXplOjExLjBwdDttc28tYW5zaS1sYW5ndWFnZTpFTi1VUyc+SGVicmFpY288L3NwYW4+PHNwYW4NCitsYW5nPUVOLVVTIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciOw0KK21zby1hbnNpLWxhbmd1YWdlOkVOLVVTJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIGxhbmc9RU4tVVMgc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQ7bXNvLWFuc2ktbGFuZ3VhZ2U6DQorRU4tVVMnPjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQgc3R5bGU9J3RleHQtaW5kZW50OjM1LjRwdCc+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPmhpPC9zcGFuPjxzcGFuDQorc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxzcGFuDQorc3R5bGU9J21zby10YWItY291bnQ6MSc+oKCgoKCgoKCgIDwvc3Bhbj48L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPkhpbmRpPC9zcGFuPjxzcGFuDQorc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PG86cD4mbmJzcDs8L286cD48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0IHN0eWxlPSd0ZXh0LWluZGVudDozNS40cHQnPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5ocjwvc3Bhbj48c3Bhbg0KK3N0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48c3Bhbg0KK3N0eWxlPSdtc28tdGFiLWNvdW50OjEnPqCgoKCgoKCgoCA8L3NwYW4+PC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5Dcm9hdGE8L3NwYW4+PHNwYW4NCitzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+PG86cD4mbmJzcDs8L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dCBzdHlsZT0ndGV4dC1pbmRlbnQ6MzUuNHB0Jz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+aHU8c3Bhbg0KK3N0eWxlPSdtc28tdGFiLWNvdW50OjEnPqCgIDwvc3Bhbj5I+m5nYXJvPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczsNCittc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0IHN0eWxlPSd0ZXh0LWluZGVudDozNS40cHQnPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0IHN0eWxlPSd0ZXh0LWluZGVudDozNS40cHQnPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5oeTxzcGFuDQorc3R5bGU9J21zby10YWItY291bnQ6MSc+oKAgPC9zcGFuPkFybepuaW88L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzOw0KK21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQgc3R5bGU9J3RleHQtaW5kZW50OjM1LjRwdCc+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPmlzPC9zcGFuPjxzcGFuDQorc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxzcGFuDQorc3R5bGU9J21zby10YWItY291bnQ6MSc+oKCgoKCgoKCgIDwvc3Bhbj48L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPklzbGFuZGVzPC9zcGFuPjxzcGFuDQorc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQgc3R5bGU9J3RleHQtaW5kZW50OjM1LjRwdCc+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPml0PC9zcGFuPjxzcGFuDQorc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxzcGFuDQorc3R5bGU9J21zby10YWItY291bnQ6MSc+oKCgoKCgoKCgIDwvc3Bhbj48L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPkl0YWxpYW5vPC9zcGFuPjxzcGFuDQorc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQgc3R5bGU9J3RleHQtaW5kZW50OjM1LjRwdCc+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPmtoYTxzcGFuDQorc3R5bGU9J21zby10YWItY291bnQ6MSc+oCA8L3NwYW4+S2hhc2k8L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzOw0KK21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQgc3R5bGU9J3RleHQtaW5kZW50OjM1LjRwdCc+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPmtuPHNwYW4NCitzdHlsZT0nbXNvLXRhYi1jb3VudDoxJz6goCA8L3NwYW4+Q2FuYXLhPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczsNCittc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0IHN0eWxlPSd0ZXh0LWluZGVudDozNS40cHQnPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5rb2s8c3Bhbg0KK3N0eWxlPSdtc28tdGFiLWNvdW50OjEnPqAgPC9zcGFuPkNvbmNhbmlzPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczsNCittc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0IHN0eWxlPSd0ZXh0LWluZGVudDozNS40cHQnPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5rcnU8c3Bhbg0KK3N0eWxlPSdtc28tdGFiLWNvdW50OjEnPqAgPC9zcGFuPkt1cnVraDwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7DQorbXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+PG86cD4mbmJzcDs8L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dCBzdHlsZT0ndGV4dC1pbmRlbnQ6MzUuNHB0Jz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+bHQ8c3Bhbg0KK3N0eWxlPSdtc28tdGFiLWNvdW50OjEnPqCgIDwvc3Bhbj5MaXR1YW5hPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczsNCittc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0IHN0eWxlPSd0ZXh0LWluZGVudDozNS40cHQnPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5sdjxzcGFuDQorc3R5bGU9J21zby10YWItY291bnQ6MSc+oKAgPC9zcGFuPkxldOM8L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzOw0KK21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQgc3R5bGU9J3RleHQtaW5kZW50OjM1LjRwdCc+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPm1nPHNwYW4NCitzdHlsZT0nbXNvLXRhYi1jb3VudDoxJz6goCA8L3NwYW4+TWFsZ2F4ZTwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7DQorbXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+PG86cD4mbmJzcDs8L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dCBzdHlsZT0ndGV4dC1pbmRlbnQ6MzUuNHB0Jz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+bWk8c3Bhbg0KK3N0eWxlPSdtc28tdGFiLWNvdW50OjEnPqCgIDwvc3Bhbj5NYW9yaTwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7DQorbXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+PG86cD4mbmJzcDs8L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dCBzdHlsZT0ndGV4dC1pbmRlbnQ6MzUuNHB0Jz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+bWw8c3Bhbg0KK3N0eWxlPSdtc28tdGFiLWNvdW50OjEnPqCgIDwvc3Bhbj5NYWxhaWFsYTwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7DQorbXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+PG86cD4mbmJzcDs8L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dCBzdHlsZT0ndGV4dC1pbmRlbnQ6MzUuNHB0Jz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+bW5pPHNwYW4NCitzdHlsZT0nbXNvLXRhYi1jb3VudDoxJz6gIDwvc3Bhbj5NYW5pcHVyaTwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7DQorbXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dCBzdHlsZT0ndGV4dC1pbmRlbnQ6MzUuNHB0Jz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+PG86cD4mbmJzcDs8L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dCBzdHlsZT0ndGV4dC1pbmRlbnQ6MzUuNHB0Jz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+bXI8c3Bhbg0KK3N0eWxlPSdtc28tdGFiLWNvdW50OjEnPqCgIDwvc3Bhbj5NYXJhdGk8L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzOw0KK21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQgc3R5bGU9J3RleHQtaW5kZW50OjM1LjRwdCc+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPm10PHNwYW4NCitzdHlsZT0nbXNvLXRhYi1jb3VudDoxJz6goCA8L3NwYW4+TWFsdOpzPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczsNCittc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0IHN0eWxlPSd0ZXh0LWluZGVudDozNS40cHQnPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5tdW48c3Bhbg0KK3N0eWxlPSdtc28tdGFiLWNvdW50OjEnPqAgPC9zcGFuPk11bmRhcmk8L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzOw0KK21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQgc3R5bGU9J3RleHQtaW5kZW50OjM1LjRwdCc+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPm13cjxzcGFuDQorc3R5bGU9J21zby10YWItY291bnQ6MSc+oCA8L3NwYW4+TWFyd2FyaTwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7DQorbXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+PG86cD4mbmJzcDs8L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dCBzdHlsZT0ndGV4dC1pbmRlbnQ6MzUuNHB0Jz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+bmU8c3Bhbg0KK3N0eWxlPSdtc28tdGFiLWNvdW50OjEnPqCgIDwvc3Bhbj5OZXBhbGk8L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzOw0KK21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQgc3R5bGU9J3RleHQtaW5kZW50OjM1LjRwdCc+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPm5ldzxzcGFuDQorc3R5bGU9J21zby10YWItY291bnQ6MSc+oCA8L3NwYW4+TmV3YXJpPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczsNCittc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0IHN0eWxlPSd0ZXh0LWluZGVudDozNS40cHQnPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5ubDxzcGFuDQorc3R5bGU9J21zby10YWItY291bnQ6MSc+oKAgPC9zcGFuPkhvbGFuZOpzPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczsNCittc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0IHN0eWxlPSd0ZXh0LWluZGVudDozNS40cHQnPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5ubF9CRTxzcGFuDQorc3R5bGU9J21zby10YWItY291bnQ6MSc+IDwvc3Bhbj5Ib2xhbmTqcyAoQulsZ2ljYSk8L3NwYW4+PHNwYW4NCitzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+PG86cD4mbmJzcDs8L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dCBzdHlsZT0ndGV4dC1pbmRlbnQ6MzUuNHB0Jz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+bmxfTkw8c3Bhbg0KK3N0eWxlPSdtc28tdGFiLWNvdW50OjEnPiA8L3NwYW4+SG9sYW5k6nMgKFBh7XNlcyBCYWl4b3MpPC9zcGFuPjxzcGFuDQorc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQgc3R5bGU9J3RleHQtaW5kZW50OjM1LjRwdCc+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPm5vPHNwYW4NCitzdHlsZT0nbXNvLXRhYi1jb3VudDoxJz6goCA8L3NwYW4+Tm9ydWVndepzPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LWZhbWlseToNCitUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0IHN0eWxlPSd0ZXh0LWluZGVudDozNS40cHQnPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5uby1nZW5lcmljPHNwYW4NCitzdHlsZT0nbXNvLXRhYi1jb3VudDoxJz4gPC9zcGFuPk5vcnVlZ3XqcyAoY29tIHN1cG9ydGUgcGFyYSBvdXRyb3MgaWRpb21hcyk8L3NwYW4+PHNwYW4NCitzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+PG86cD4mbmJzcDs8L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dCBzdHlsZT0ndGV4dC1pbmRlbnQ6MzUuNHB0Jz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+bm8tb3ViPHNwYW4NCitzdHlsZT0nbXNvLXRhYi1jb3VudDoxJz6goKAgPC9zcGFuPk5vcnVlZ3XqcyAoVXR2YWxnIE9mZmVudGxpZyBwYXJhDQorQmxpbmRlc2tyaWZ0KTwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+PG86cD4mbmJzcDs8L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dCBzdHlsZT0ndGV4dC1pbmRlbnQ6MzUuNHB0Jz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+bndjPHNwYW4NCitzdHlsZT0nbXNvLXRhYi1jb3VudDoxJz6gIDwvc3Bhbj5BbnRpZ28gTmV3YXJpPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LWZhbWlseToNCitUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0IHN0eWxlPSd0ZXh0LWluZGVudDozNS40cHQnPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5vcjxzcGFuDQorc3R5bGU9J21zby10YWItY291bnQ6MSc+oKAgPC9zcGFuPk9yaeE8L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzOw0KK21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQgc3R5bGU9J3RleHQtaW5kZW50OjM1LjRwdCc+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPnBhPHNwYW4NCitzdHlsZT0nbXNvLXRhYi1jb3VudDoxJz6goCA8L3NwYW4+UGFuamFiaTwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7DQorbXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+PG86cD4mbmJzcDs8L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dCBzdHlsZT0ndGV4dC1pbmRlbnQ6MzUuNHB0Jz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+cGk8c3Bhbg0KK3N0eWxlPSdtc28tdGFiLWNvdW50OjEnPqCgIDwvc3Bhbj5Q4WxpPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczsNCittc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0IHN0eWxlPSd0ZXh0LWluZGVudDozNS40cHQnPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5wbDxzcGFuDQorc3R5bGU9J21zby10YWItY291bnQ6MSc+oKAgPC9zcGFuPlBvbG9u6nM8L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzOw0KK21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQgc3R5bGU9J3RleHQtaW5kZW50OjM1LjRwdCc+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPnB0PHNwYW4NCitzdHlsZT0nbXNvLXRhYi1jb3VudDoxJz6goCA8L3NwYW4+UG9ydHVndepzPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LWZhbWlseToNCitUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0IHN0eWxlPSd0ZXh0LWluZGVudDozNS40cHQnPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5ybzxzcGFuDQorc3R5bGU9J21zby10YWItY291bnQ6MSc+oKAgPC9zcGFuPlJvbWVubzwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7DQorbXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+PG86cD4mbmJzcDs8L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dCBzdHlsZT0ndGV4dC1pbmRlbnQ6MzUuNHB0Jz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+cnU8c3Bhbg0KK3N0eWxlPSdtc28tdGFiLWNvdW50OjEnPqCgIDwvc3Bhbj5SdXNzbzwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7DQorbXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+PG86cD4mbmJzcDs8L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dCBzdHlsZT0ndGV4dC1pbmRlbnQ6MzUuNHB0Jz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+c2E8c3Bhbg0KK3N0eWxlPSdtc28tdGFiLWNvdW50OjEnPqCgIDwvc3Bhbj5T4m5zY3JpdG88L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5Og0KK1RpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQgc3R5bGU9J3RleHQtaW5kZW50OjM1LjRwdCc+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPnNhdDxzcGFuDQorc3R5bGU9J21zby10YWItY291bnQ6MSc+oCA8L3NwYW4+U2FudGFsaTwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7DQorbXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+PG86cD4mbmJzcDs8L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dCBzdHlsZT0ndGV4dC1pbmRlbnQ6MzUuNHB0Jz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+c2Q8c3Bhbg0KK3N0eWxlPSdtc28tdGFiLWNvdW50OjEnPqCgIDwvc3Bhbj5TaW5kaTwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7DQorbXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+PG86cD4mbmJzcDs8L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dCBzdHlsZT0ndGV4dC1pbmRlbnQ6MzUuNHB0Jz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+c2s8c3Bhbg0KK3N0eWxlPSdtc28tdGFiLWNvdW50OjEnPqCgIDwvc3Bhbj5Fc2xvdmFjbzwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7DQorbXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+PG86cD4mbmJzcDs8L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dCBzdHlsZT0ndGV4dC1pbmRlbnQ6MzUuNHB0Jz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+c3Y8c3Bhbg0KK3N0eWxlPSdtc28tdGFiLWNvdW50OjEnPqCgIDwvc3Bhbj5TdWVjbzwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7DQorbXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+PG86cD4mbmJzcDs8L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dCBzdHlsZT0ndGV4dC1pbmRlbnQ6MzUuNHB0Jz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+c3c8c3Bhbg0KK3N0eWxlPSdtc28tdGFiLWNvdW50OjEnPqCgIDwvc3Bhbj5TdWHtbGk8L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzOw0KK21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQgc3R5bGU9J3RleHQtaW5kZW50OjM1LjRwdCc+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPnRhPHNwYW4NCitzdHlsZT0nbXNvLXRhYi1jb3VudDoxJz6goCA8L3NwYW4+VOJtaWw8L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzOw0KK21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQgc3R5bGU9J3RleHQtaW5kZW50OjM1LjRwdCc+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPnRlPHNwYW4NCitzdHlsZT0nbXNvLXRhYi1jb3VudDoxJz6goCA8L3NwYW4+VGVsdWd1PC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczsNCittc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0IHN0eWxlPSd0ZXh0LWluZGVudDozNS40cHQnPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz50cjxzcGFuDQorc3R5bGU9J21zby10YWItY291bnQ6MSc+oKAgPC9zcGFuPlR1cmNvPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczsNCittc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0IHN0eWxlPSd0ZXh0LWluZGVudDozNS40cHQnPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz52aTxzcGFuDQorc3R5bGU9J21zby10YWItY291bnQ6MSc+oKAgPC9zcGFuPlZpZXRuYW1pdGE8L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48bzpwPiZuYnNwOzwvbzpwPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPlZlamEgYSBvcOfjbyBkZSBsaW5oYSBkZQ0KK2NvbWFuZG8gLXQsIGEgY29uZmlndXJh5+NvIHRleHQtdGFibGUgZG8gYXJxdWl2byBkZSBkaXJlY3RpdmEsIGUgYSBvcOfjbyBkZQ0KK2NvbnN0cnXn428gLS13aXRoLXRleHQtdGFibGUgcGFyYSBvYnRlciBkZXRhbGhlcyBzb2JyZSBjb21vIHVzYXIgdW1hIHRhYmVsYSBkZQ0KK3RleHRvIGFsdGVybmF0aXZvLjwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6DQorIkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PGJyPg0KKzwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+Ni4xLjE8c3BhbiBzdHlsZT0nbXNvLXRhYi1jb3VudDoxJz4gPC9zcGFuPlRhYmVsYQ0KK2RlIEZvcm1hdG8gZGUgVGV4dG88bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5BIHRhYmVsYSBkZSB0ZXh0byBjb25zaXN0ZQ0KK2VtIHVtYSBzZXH86m5jaWEgZGUgZGlyZWN0aXZhcywgdW0gcG9yIGxpbmhhLCBxdWUgZGVmaW5lbSBjb21vIGNhZGEgY2hhcmFjdGVyIOkNCityZXByZXNlbnRhZG8gPHN0MTpQZXJzb25OYW1lIFByb2R1Y3RJRD0iZW0gYnJhaWxsZS4gVVRGLTgiIHc6c3Q9Im9uIj5lbQ0KKyBicmFpbGxlLiBVVEYtODwvc3QxOlBlcnNvbk5hbWU+IGNhcmFjdGVyIGVuY29kaW5nIGRldmUgc2VyIHVzYWRvLiBPIGVzcGHnbyBlbQ0KK2JyYW5jbyAoZXNwYedvcywgdGFicykgbm8gaW7tY2lvIGRlIHVtYSBsaW5oYSwgYXNzaW0gY29tbyBhbnRlcyBlL291IGFw83MNCitxdWFscXVlciBvcGVyYW5kbyBkZSBxdWFscXVlciBkaXJlY3RpdmEsIOkgaWdub3JhZG8uIExpbmhhcyBxdWUgY29udOptIGFwZW5hcw0KK2VzcGHnbyBlbSBicmFuY28gc+NvIGlnbm9yYWRhcy4gU2UgbyBwcmltZWlybyBjYXLhdGVyIG7jby1lc3Bh528gZW0gYnJhbmNvDQorYW50ZXMgZGUgdW1hIGxpbmhhIOkgJnF1b3Q7IyZxdW90OyBlbnTjbyBlc3NhIGxpbmhhIOkgdW0gY29tZW504XJpbyBlIOkNCitpZ25vcmFkby48L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxicj4NCis8L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPjYuMS4yPHNwYW4gc3R5bGU9J21zby10YWItY291bnQ6MSc+IDwvc3Bhbj5UYWJlbGENCitkZSBEaXJldGl2YXMgZGUgVGV4dG88bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5BcyBzZWd1aW50ZXMgZGlyZXRpdmFzIHPjbw0KK2Zvcm5lY2lkYXM6PC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48YnI+DQorPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5jaGFyIDxpPmNoYXJhY3RlciBkb3RzICMgY29tZW504XJpb3M8bzpwPjwvbzpwPjwvaT48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD4mbmJzcDs8L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+VXNlIGEgZGlyZXRpdmEgY2hhciBwYXJhDQorZXNwZWNpZmljYXIgY29tbyB1bSBjYXJhY3RlciBVbmljb2RlIHNlcuEgcmVwcmVzZW50YWRvIGVtIGJyYWlsbGUuPC9zcGFuPjxzcGFuDQorc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxicj4NCis8L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPmNoYXJhY3RlcjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPk9zIGNhcmFjdGVyZXMgVW5pY29kZSBhDQorc2VyZW0gZGVmaW5pZG9zLiBQb2RlbSBzZXI6PC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToNCisiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0IHN0eWxlPSd0ZXh0LWluZGVudDozNS40cHQnPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz63DQorUXVhbHF1ZXIgY2FyYWN0ZXIg+m5pY28gcXVlIG7jbyBzZWphIHVtYSBiYXJyYS1pbnZlcnRpZGEgb3UgdW0gY2Fy4WN0ZXIgZGUNCitlc3Bh528gZW0gYnJhbmNvLjwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6DQorIkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD4mbmJzcDs8L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dCBzdHlsZT0ndGV4dC1pbmRlbnQ6MzUuNHB0Jz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+tw0KK1VtIGNhcmFjdGVyIGVzcGVjaWFsIHByZWZpeGFkbyBkZSBiYXJyYS1pbnZlcnRpZGEuIFPjbyBlbGVzOjwvc3Bhbj48c3Bhbg0KK3N0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0IHN0eWxlPSd0ZXh0LWluZGVudDozNS40cHQnPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5cYjwvc3Bhbj48c3Bhbg0KK3N0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0IHN0eWxlPSd0ZXh0LWluZGVudDozNS40cHQnPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5DYXLhY3Rlcg0KK2RlIHJldHJvY2Vzc28uPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0IHN0eWxlPSd0ZXh0LWluZGVudDozNS40cHQnPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5cZjwvc3Bhbj48c3Bhbg0KK3N0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0IHN0eWxlPSd0ZXh0LWluZGVudDozNS40cHQnPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5DYXLhY3Rlcg0KK2Zvcm1mZWVkIChxdWVicmEgZGUgcOFnaW5hKS48L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5Og0KKyJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQgc3R5bGU9J3RleHQtaW5kZW50OjM1LjRwdCc+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPlxuPC9zcGFuPjxzcGFuDQorc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQgc3R5bGU9J3RleHQtaW5kZW50OjM1LjRwdCc+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPkNhcuFjdGVyDQorZGUgbm92YSBsaW5oYS48L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQgc3R5bGU9J3RleHQtaW5kZW50OjM1LjRwdCc+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPlxvIyMjPC9zcGFuPjxzcGFuDQorc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQgc3R5bGU9J3RleHQtaW5kZW50OjM1LjRwdCc+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPlJlcHJlc2VudGHn428NCitkZSB1bSBjYXLhY3RlciBkZSB0cupzIGTtZ2l0b3Mgb2N0YWwuPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczsNCittc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0IHN0eWxlPSd0ZXh0LWluZGVudDozNS40cHQnPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5ccjwvc3Bhbj48c3Bhbg0KK3N0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0IHN0eWxlPSd0ZXh0LWluZGVudDozNS40cHQnPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5DYXLhY3Rlcg0KK2RlIHJldG9ybm8gZGUgdHJhbnNwb3J0ZS48L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5Og0KKyJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQgc3R5bGU9J3RleHQtaW5kZW50OjM1LjRwdCc+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPlxzPC9zcGFuPjxzcGFuDQorc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQgc3R5bGU9J3RleHQtaW5kZW50OjM1LjRwdCc+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPkNhcuFjdGVyDQorZGUgZXNwYedvLjwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD4mbmJzcDs8L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dCBzdHlsZT0ndGV4dC1pbmRlbnQ6MzUuNHB0Jz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+XHQ8L3NwYW4+PHNwYW4NCitzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dCBzdHlsZT0ndGV4dC1pbmRlbnQ6MzUuNHB0Jz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+Q2Fy4WN0ZXINCitkZSB0YWIgaG9yaXpvbnRhbC48L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5Og0KKyJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQgc3R5bGU9J3RleHQtaW5kZW50OjM1LjRwdCc+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPlx1IyMjIzwvc3Bhbj48c3Bhbg0KK3N0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0IHN0eWxlPSd0ZXh0LWluZGVudDozNS40cHQnPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5SZXByZXNlbnRh5+NvDQorZGUgdW0gY2Fy4WN0ZXIgaGV4YWRlY2ltYWwgZGUgcXVhdHJvIGTtZ2l0by48L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5Og0KK1RpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQgc3R5bGU9J3RleHQtaW5kZW50OjM1LjRwdCc+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPlxVIyMjIyMjIyM8L3NwYW4+PHNwYW4NCitzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dCBzdHlsZT0ndGV4dC1pbmRlbnQ6MzUuNHB0Jz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+UmVwcmVzZW50Yefjbw0KK2RlIHVtIGNhcuFjdGVyIGhleGFkZWNpbWFsIGRlIG9pdG8gZO1naXRvLjwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7DQorbXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD4mbmJzcDs8L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dCBzdHlsZT0ndGV4dC1pbmRlbnQ6MzUuNHB0Jz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+XHY8L3NwYW4+PHNwYW4NCitzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dCBzdHlsZT0ndGV4dC1pbmRlbnQ6MzUuNHB0Jz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+Q2Fy4WN0ZXINCitkZSB0YWIgaG9yaXpvbnRhbC48L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5Og0KKyJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQgc3R5bGU9J3RleHQtaW5kZW50OjM1LjRwdCc+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPlx4IyM8L3NwYW4+PHNwYW4NCitzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dCBzdHlsZT0ndGV4dC1pbmRlbnQ6MzUuNHB0Jz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+UmVwcmVzZW50Yefjbw0KK2RlIHVtIGNhcuFjdGVyIGhleGFkZWNpbWFsIGRlIGRvaXMgZO1naXRvcy48L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5Og0KK1RpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQgc3R5bGU9J3RleHQtaW5kZW50OjM1LjRwdCc+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPlxYIyM8L3NwYW4+PHNwYW4NCitzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dCBzdHlsZT0ndGV4dC1pbmRlbnQ6MzUuNHB0Jz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+KG8NCitjYXNvIGRvIFggZSBkb3MgZO1naXRvcyBu428g6SBzaWduaWZpY2F0aXZhKS48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0IHN0eWxlPSd0ZXh0LWluZGVudDozNS40cHQnPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0IHN0eWxlPSd0ZXh0LWluZGVudDozNS40cHQnPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5mPG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dCBzdHlsZT0ndGV4dC1pbmRlbnQ6MzUuNHB0Jz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+QQ0KK3RlbGEgZXN04SBjb25nZWxhZGEuPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToNCisiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0IHN0eWxlPSd0ZXh0LWluZGVudDozNS40cHQnPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5cIzwvc3Bhbj48c3Bhbg0KK3N0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0IHN0eWxlPSd0ZXh0LWluZGVudDozNS40cHQnPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5VbQ0KK3NpbmFsIGRlIG76bWVybyBsaXRlcmFsLjwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6DQorIkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD4mbmJzcDs8L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dCBzdHlsZT0ndGV4dC1pbmRlbnQ6MzUuNHB0Jz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+XCZsdDtuYW1lJmd0Ozwvc3Bhbj48c3Bhbg0KK3N0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0IHN0eWxlPSd0ZXh0LWluZGVudDozNS40cHQnPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5PDQorbm9tZSBVbmljb2RlIGRlIHVtIGNhcuFjdGVyKHVzZSBfIHBhcmEgZXNwYedvKS48L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5Og0KK1RpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQgc3R5bGU9J3RleHQtaW5kZW50OjM1LjRwdCc+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPlxcPC9zcGFuPjxzcGFuDQorc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQgc3R5bGU9J3RleHQtaW5kZW50OjM1LjRwdCc+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPlVtYQ0KK2JhcnJhLWludmVydGlkYSBsaXRlcmFsLjwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6DQorIkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PGJyPg0KKzwvc3Bhbj48aT48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+ZG90czxvOnA+PC9vOnA+PC9zcGFuPjwvaT48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5BIHJlcHJlc2VudGHn428gYnJhaWxsZQ0KK2RvcyBjYXJhY3RlcmVzIFVuaWNvZGUuIMkgdW1hIHNlcfzqbmNpYSBkZSAxLTggbvptZXJvcyBkb3MgcG9udG9zLiBTZSBvIG76bWVybw0KK2RvIHBvbnRvIGRlIHNlcfzqbmNpYSDpIGNvbG9jYWRvIGVudHJlIHBhcupudGVzZXMsIGVtIHNlZ3VpZGEsIG9zIG76bWVyb3MgZG9zDQorcG9udG9zIHBvZGVtIHNlciBzZXBhcmFkb3MgdW0gZG8gb3V0cm8gcG9yIGVzcGHnbyA8c3QxOlBlcnNvbk5hbWUNCitQcm9kdWN0SUQ9ImVtIGJyYW5jby4gVW0iIHc6c3Q9Im9uIj5lbSBicmFuY28uIFVtPC9zdDE6UGVyc29uTmFtZT4gbvptZXJvIGRlDQorcG9udG8g6SB1bSBk7WdpdG8gZGVudHJvIGRvIGludGVydmFsbyBkZSAxLTgsIHRhbCBjb21vIGRlZmluaWRvIHBlbGEgU3RhbmRhcmQNCitCcmFpbGxlIERvdCBOdW1iZXJpbmcgQ29udmVudGlvbi4gTyBwb250byBlc3BlY2lhbCBkZSBu+m1lcm8gMCBu428g6Q0KK3JlY29uaGVjaWRvIHF1YW5kbyBlbnRyZSBwYXLqbnRlc2VzLCBlIHNpZ25pZmljYSBxdWUgbuNvIGjhIHBvbnRvcywgbuNvIHBvZGVuZG8NCitzZXIgdXNhZG8gZW0gY29uanVudG8gY29tIHF1YWxxdWVyIG91dHJvIG76bWVybyBkZSBwb250b3MuPC9zcGFuPjxzcGFuDQorc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxicj4NCis8L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPkV4ZW1wbG9zPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LWZhbWlseToNCitUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0IHN0eWxlPSd0ZXh0LWluZGVudDozNS40cHQnPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz63DQorY2hhciBhIDE8L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQgc3R5bGU9J3RleHQtaW5kZW50OjM1LjRwdCc+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPrcNCitjaGFyIGIgKDEyKTwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD4mbmJzcDs8L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dCBzdHlsZT0ndGV4dC1pbmRlbnQ6MzUuNHB0Jz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+tw0KK2NoYXIgYyAoIDQgMSApPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0IHN0eWxlPSd0ZXh0LWluZGVudDozNS40cHQnPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz63DQorY2hhciBcXCAxMjU2Nzwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD4mbmJzcDs8L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dCBzdHlsZT0ndGV4dC1pbmRlbnQ6MzUuNHB0Jz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+tw0KK2NoYXIgXHMgMDwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD4mbmJzcDs8L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dCBzdHlsZT0ndGV4dC1pbmRlbnQ6MzUuNHB0Jz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+tw0KK2NoYXIgXHgyMCAoKTwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD4mbmJzcDs8L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dCBzdHlsZT0ndGV4dC1pbmRlbnQ6MzUuNHB0Jz48c3BhbiBsYW5nPUVOLVVTDQorc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQ7bXNvLWFuc2ktbGFuZ3VhZ2U6RU4tVVMnPrcgY2hhcg0KK1wmbHQ7TEFUSU5fU01BTExfTEVUVEVSX0QmZ3Q7IDE0NTwvc3Bhbj48c3BhbiBsYW5nPUVOLVVTIHN0eWxlPSdmb250LWZhbWlseToNCitUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciO21zby1hbnNpLWxhbmd1YWdlOkVOLVVTJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIGxhbmc9RU4tVVMgc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5Og0KKyJDb3VyaWVyIE5ldyI7bXNvLWFuc2ktbGFuZ3VhZ2U6RU4tVVMnPjxicj4NCis8L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPmJ5dGUgPGk+Ynl0ZSBkb3RzICMgY29tbWVudDxvOnA+PC9vOnA+PC9pPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5Vc2UgYSBkaXJldGl2YSBkZSBieXRlDQorcGFyYSBlc3BlY2lmaWNhciBjb21vIHVtIGNhcuFjdGVyIG5vIGNvbmp1bnRvIGRlIGNhcmFjdGVyZXMgbG9jYWwgZXN04SBzZW5kbw0KK3JlcHJlc2VudGFkbyA8c3QxOlBlcnNvbk5hbWUgUHJvZHVjdElEPSJlbSBicmFpbGxlLiBGb2kiIHc6c3Q9Im9uIj5lbSBicmFpbGxlLg0KKyBGb2k8L3N0MTpQZXJzb25OYW1lPiBtYW50aWRvIHBhcmEgY29tcGF0aWJpbGlkYWRlIGNvbSB2ZXJz9WVzIGFudGVyaW9yZXMsIG1hcw0KK27jbyBkZXZlIHNlciB1c2Fkby4gQ2Fy4WN0ZXJlcyBVbmljb2RlIGRldmVtIHNlciBkZWZpbmlkb3MgKGF0cmF26XMgZGEgZGlyZXRpdmENCitjaGFyKSBwYXJhIHF1ZSBhIHRhYmVsYSBkZSB0ZXh0byBwZXJtYW5lY2UgduFsaWRhLCBpbmRlcGVuZGVudGVtZW50ZSBkbyBxdWFsDQorY29uanVudG8gZGUgY2FyYWN0ZXJlcyBsb2NhbCB1c2Fkby48L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzOw0KK21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxicj4NCis8L3NwYW4+PGk+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPmJ5dGU8bzpwPjwvbzpwPjwvc3Bhbj48L2k+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+TyBjYXLhdGVyIGxvY2FsIGEgc2VyDQorZGVmaW5pZG8uIFBvZGUgc2VyIGVzcGVjaWZpY2FkbyBkYSBtZXNtYSBmb3JtYSBjb21vIHVtIG9wZXJhZG9yIGNoYXJhY3RlciBkYQ0KK2RpcmV0aXZhIGNoYXIgZXhjZXRvIHF1ZSBhcyBmb3JtYXMgZXNwZWPtZmljYXMgZGUgVW5pY29kZSAoXHUsXFUsXCZsdDspIG7jbw0KK3BvZGVtIHNlciB1dGlsaXphZG9zLjwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6DQorIkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PGJyPg0KKzwvc3Bhbj48aT48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+ZG90czxvOnA+PC9vOnA+PC9zcGFuPjwvaT48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5BIHJlcHJlc2VudGHn428gYnJhaWxsZSBkbw0KK2NhcuFjdGVyIGxvY2FsLiBQb2RlIHNlciBlc3BlY2lmaWNhZG8gZGEgbWVzbWEgZm9ybWEgY29tbyBvcGVyYW5kbyBkb3RzIGRhDQorZGlyZWN0aXZhIGNoYXIuPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48YnI+DQorPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5pbmNsdWRlIDxpPmZpbGUgIyBjb21tZW50PG86cD48L286cD48L2k+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPlVzZSBhIGRpcmV0aXZhIGluY2x1ZGUNCitwYXJhIGluY2x1aXIgbyBjb250ZfpkbyBkZSB1bSB0ZXh0byBzdWJ0YWJlbGFkby4gRWxlIOkgcmVjdXJzaXZvLCBvIHF1ZQ0KK3NpZ25pZmljYSBxdWUgcXVhbHF1ZXIgdGV4dG8gc3VidGFiZWxhZG8gcG9kZS1zZSBpbmNsdWlyIGFpbmRhIGVtIG91dHJvIHRleHRvDQorc3VidGFiZWxhLiBDdWlkYWRvcyBkZXZlbSBzZXIgdG9tYWRvcyBwYXJhIGdhcmFudGlyIHF1ZSAmcXVvdDtpbmNsdWRlDQorbG9vcCZxdW90OyBu428gc2VqYSBjcmlhZG8uPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToNCisiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48YnI+DQorPC9zcGFuPjxpPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5maWxlPG86cD48L286cD48L3NwYW4+PC9pPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPk8gYXJxdWl2byBhIHNlciBpbmNsde1kby4NCitQb2RlIHNlciB1bSByZWxhdGl2byBvdSB1bSBjYW1pbmhvIGFic29sdXRvLiBTZSByZWxhdGl2bywgZWxlIGVzdOEgYW5jb3JhZGEgbm8NCitkaXJldPNyaW8gY29udGVuZG8gbyBhcnF1aXZvIGluY2x1aWRvLjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J21zby1iaWRpLWZvbnQtc2l6ZToxOC4wcHQnPjYuMiBUYWJlbGEgZGUNCitBdHJpYnV0b3M8L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPk9zIGFycXVpdm9zIGNvbSBub21lcyBubw0KK2Zvcm1hdG8gKi5hdGIgc+NvIHRhYmVsYXMgZGUgYXRyaWJ1dG9zLCBlIGNvbSBub21lcyBubyBmb3JtYXRvICouYXRpIHPjbw0KK2F0cmlidXRvcyBzdWJ0YWJlbGFzLiBFbGVzIHPjbyB1c2Fkb3MgcXVhbmRvIEJSTFRUWSDpIG1vc3RyYWRvIG5hIHRlbGEgZGUNCithdHJpYnV0b3MgZSBu428gbyBjb250ZfpkbyBkYSB0ZWxhICh2ZWphIG8gY29tYW5kbyBESVNQTUQpLiBDYWRhIHVtIGRvcyBvaXRvDQorcG9udG9zIGJyYWlsbGUgcmVwcmVzZW50YSB1bSBkb3Mgb2l0byBiaXRzIGRlIGF0cmlidXRvIFZHQS48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5PcyBzZWd1aW50ZXMgYXRyaWJ1dG9zIHPjbw0KK2Zvcm5lY2lkYXM6PC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48YnI+DQorPGJyPg0KKzwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+YXR0cmlidXRlczxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPkEgY29sdW5hIGRhIGVzcXVlcmRhDQorcmVwcmVzZW50YSBhcyBjb3JlcyBkZSBwcmltZWlybyBwbGFubzo8L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzOw0KK21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQgc3R5bGU9J3RleHQtaW5kZW50OjM1LjRwdCc+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPkRvdA0KKzE8L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxzcGFuDQorc3R5bGU9J21zby10YWItY291bnQ6Mic+oKCgoKCgoKCgoKCgoKCgIDwvc3Bhbj48L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToNCisxMS4wcHQnPlJlZDwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD4mbmJzcDs8L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dCBzdHlsZT0ndGV4dC1pbmRlbnQ6MzUuNHB0Jz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+RG90DQorMjwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PHNwYW4NCitzdHlsZT0nbXNvLXRhYi1jb3VudDoyJz6goKCgoKCgoKCgoKCgoKAgPC9zcGFuPjwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1zaXplOg0KKzExLjBwdCc+R3JlZW48L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQgc3R5bGU9J3RleHQtaW5kZW50OjM1LjRwdCc+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPkRvdA0KKzM8L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxzcGFuDQorc3R5bGU9J21zby10YWItY291bnQ6Mic+oKCgoKCgoKCgoKCgoKCgIDwvc3Bhbj48L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToNCisxMS4wcHQnPkJsdWU8L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQgc3R5bGU9J3RleHQtaW5kZW50OjM1LjRwdCc+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPkRvdA0KKzc8c3BhbiBzdHlsZT0nbXNvLXRhYi1jb3VudDoyJz6goKCgIDwvc3Bhbj5CcmlnaHQ8L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5Og0KK1RpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPkEgY29sdW5hIGRvIGxhZG8gZGlyZWl0bw0KK3JlcHJlc2VudGEgYXMgY29yZXMgZGUgZnVuZG86PC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToNCisiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0IHN0eWxlPSd0ZXh0LWluZGVudDozNS40cHQnPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5Eb3QNCis0PHNwYW4gc3R5bGU9J21zby10YWItY291bnQ6Mic+oKCgoCA8L3NwYW4+UmVkPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LWZhbWlseToNCitUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0IHN0eWxlPSd0ZXh0LWluZGVudDozNS40cHQnPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5Eb3QNCis1PHNwYW4gc3R5bGU9J21zby10YWItY291bnQ6Mic+oKCgoCA8L3NwYW4+R3JlZW48L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5Og0KK1RpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQgc3R5bGU9J3RleHQtaW5kZW50OjM1LjRwdCc+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPkRvdA0KKzY8c3BhbiBzdHlsZT0nbXNvLXRhYi1jb3VudDoyJz6goKCgIDwvc3Bhbj5CbHVlPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LWZhbWlseToNCitUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0IHN0eWxlPSd0ZXh0LWluZGVudDozNS40cHQnPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5Eb3QNCis4PHNwYW4gc3R5bGU9J21zby10YWItY291bnQ6Mic+oKCgoCA8L3NwYW4+Qmxpbms8L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5Og0KK1RpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPlVtIHBvbnRvIOkgbGV2YW50YWRvDQorcXVhbmRvIG8gYml0IGRlIGF0cmlidXRvIGNvcnJlc3BvbmRlbnRlIGVzdOEgbGlnYWRvLiBFc3RlIOkgbyBwYWRy428gZGEgdGFiZWxhDQorZGUgYXRyaWJ1dG9zLCBwb2lzIOkgYSBtYWlzIGludHVpdGl2YS4gVW0gZG9zIHNldXMgcHJvYmxlbWFzLCBwb3LpbSwg6SBxdWUg6Q0KK2RpZu1jaWwgZGlzY2VybmlyIGEgZGlmZXJlbudhIGVudHJlIG5vcm1hbCAoYnJhbmNvIHNvYnJlIGZ1bmRvIHByZXRvKSBlIGludmVyc2ENCisocHJldG8gc29icmUgZnVuZG8gYnJhbmNvKSB27WRlby48L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzOw0KK21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxicj4NCis8L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPmF0dHJpYjwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6DQorVGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+QSBjb2x1bmEgZGEgZXNxdWVyZGENCityZXByZXNlbnRhIGFzIGNvcmVzIGRlIHByaW1laXJvIHBsYW5vOjwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7DQorbXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD4mbmJzcDs8L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dCBzdHlsZT0ndGV4dC1pbmRlbnQ6MzUuNHB0Jz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+RG90DQorMTwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PHNwYW4NCitzdHlsZT0nbXNvLXRhYi1jb3VudDoyJz6goKCgoKCgoKCgoKCgoKAgPC9zcGFuPjwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1zaXplOg0KKzExLjBwdCc+UmVkPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0IHN0eWxlPSd0ZXh0LWluZGVudDozNS40cHQnPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5Eb3QNCisyPHNwYW4gc3R5bGU9J21zby10YWItY291bnQ6Mic+oKCgoCA8L3NwYW4+R3JlZW48L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5Og0KK1RpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQgc3R5bGU9J3RleHQtaW5kZW50OjM1LjRwdCc+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPkRvdA0KKzM8L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxzcGFuDQorc3R5bGU9J21zby10YWItY291bnQ6Mic+oKCgoKCgoKCgoKCgoKCgIDwvc3Bhbj48L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToNCisxMS4wcHQnPkJsdWU8L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQgc3R5bGU9J3RleHQtaW5kZW50OjM1LjRwdCc+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPkRvdA0KKzc8L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxzcGFuDQorc3R5bGU9J21zby10YWItY291bnQ6Mic+oKCgoKCgoKCgoKCgoKCgIDwvc3Bhbj48L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToNCisxMS4wcHQnPkJyaWdodDwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD4mbmJzcDs8L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+QSBjb2x1bmEgZG8gbGFkbyBkaXJlaXRvDQorcmVwcmVzZW50YSBhcyBjb3JlcyBkZSBmdW5kbzo8L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5Og0KKyJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQgc3R5bGU9J3RleHQtaW5kZW50OjM1LjRwdCc+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPkRvdA0KKzQ8L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxzcGFuDQorc3R5bGU9J21zby10YWItY291bnQ6Mic+oKCgoKCgoKCgoKCgoKCgIDwvc3Bhbj48L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToNCisxMS4wcHQnPlJlZDwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+PG86cD4mbmJzcDs8L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dCBzdHlsZT0ndGV4dC1pbmRlbnQ6MzUuNHB0Jz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+RG90DQorNTwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PHNwYW4NCitzdHlsZT0nbXNvLXRhYi1jb3VudDoyJz6goKCgoKCgoKCgoKCgoKAgPC9zcGFuPjwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1zaXplOg0KKzExLjBwdCc+R3JlZW48L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQgc3R5bGU9J3RleHQtaW5kZW50OjM1LjRwdCc+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPkRvdA0KKzY8L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxzcGFuDQorc3R5bGU9J21zby10YWItY291bnQ6Mic+oKCgoKCgoKCgoKCgoKCgIDwvc3Bhbj48L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToNCisxMS4wcHQnPkJsdWU8L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQgc3R5bGU9J3RleHQtaW5kZW50OjM1LjRwdCc+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPkRvdA0KKzg8L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxzcGFuDQorc3R5bGU9J21zby10YWItY291bnQ6Mic+oKCgoKCgoKCgoKCgoKCgIDwvc3Bhbj48L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToNCisxMS4wcHQnPkJsaW5rPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5VbSBiaXQgZGUgZnVuZG8NCitkZXNlbmNhZGVhcuEgc2V1cyBwb250b3MgY29ycmVzcG9uZGVudGVzLCBlbnF1YW50byBxdWUgdW0gYml0IGRlIHByaW1laXJvIHBsYW5vDQorZGVzZW5jYWRlYXLhIHNldXMgY29ycmVzcG9uZGVudGVzIHBvbnRvcy4gRXNzYSBs82dpY2EgaW50dWl0aXZhIHJlYWxtZW50ZSB0b3JuYQ0KK21haXMgZuFjaWwgZGUgbGVyIGFzIGNvbWJpbmHn9WVzIGRlIGF0cmlidXRvcyBtYWlzIGNvbXVtZW50ZSB1c2Fkb3MuPC9zcGFuPjxzcGFuDQorc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPlZlamEgYSBvcOfjbyBkZSBsaW5oYSBkZQ0KK2NvbWFuZG8gLWEsIGEgZGlyZXRpdmEgZGUgYXJxdWl2byBkZSBjb25maWd1cmHn428gYXR0cmlidXRlcy10YWJsZXMsIGUgYSBvcOfjbw0KK2RlIGNyaWHn428gLS13aXRoLWF0dHJpYnV0ZXMtdGFibGUgcGFyYSBvYnRlciBkZXRhbGhlcyBzb2JyZSBjb21vIHVzYXIgdW1hIHRhYmVsYQ0KK2RlIGF0cmlidXRvcyBhbHRlcm5hdGl2b3MuPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToNCisiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48YnI+DQorPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz42LjIuMTxzcGFuIHN0eWxlPSdtc28tdGFiLWNvdW50OjEnPiA8L3NwYW4+VGFiZWxhDQorZGUgRm9ybWF0b3MgZG9zIEF0cmlidXRvczxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPlVtYSB0YWJlbGEgZGUgYXRyaWJ1dG9zDQorY29uc2lzdGUgZW0gdW1hIHNlcfzqbmNpYSBkZSBkaXJldGl2YXMsIHVtIHBvciBsaW5oYSwgcXVlIGRlZmluZW0gY29tbyBhcw0KK2NvbWJpbmHn9WVzIGRlIGF0cmlidXRvcyBWR0EgZXN0428gc2VuZG8gcmVwcmVzZW50YWRvcyA8c3QxOlBlcnNvbk5hbWUNCitQcm9kdWN0SUQ9ImVtIGJyYWlsZS4gQ2FyYWN0ZXJlcyBVVEYtOCIgdzpzdD0ib24iPmVtIGJyYWlsZS4gQ2FyYWN0ZXJlcyBVVEYtODwvc3QxOlBlcnNvbk5hbWU+DQorZGV2ZW0gc2VyIHV0aWxpemFkb3MuIE8gZXNwYedvIGVtIGJyYW5jbyAoZXNwYedvcywgdGFicykgbm8gaW7tY2lvIGRlIHVtYQ0KK2xpbmhhLCBhc3NpbSBjb21vIGFudGVzIGUvb3UgYXDzcyBxdWFscXVlciBvcGVyYW5kbyBkZSBxdWFscXVlciBkaXJldGl2YSwg6Q0KK2lnbm9yYWRvLiBMaW5oYXMgcXVlIGNvbnTqbSBhcGVuYXMgZXNwYedvIGVtIGJyYW5jbyBz428gaWdub3JhZGFzLiBTZSBvIGNhcuF0ZXINCitu428tZXNwYedvIGVtIGJyYW5jbyBhbnRlcyBkZSB1bWEgbGluaGEgZm9yICZxdW90OyMmcXVvdDsgZW50428gZXNzYSBsaW5oYSDpIHVtDQorY29tZW504XJpbyBlIOkgaWdub3JhZG8uPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToNCisiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48YnI+DQorPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz42LjIuMjxzcGFuIHN0eWxlPSdtc28tdGFiLWNvdW50OjEnPiA8L3NwYW4+VGFiZWxhDQorZGUgRGlyZXTzcmlvcyBkb3MgQXRyaWJ1dG9zPG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD4mbmJzcDs8L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+QXMgc2VndWludGVzIGRpcmV0aXZhcyBz428NCitmb3JuZWNpZGFzOjwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PGJyPg0KKzwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+ZG90IDxpPmRvdCBzdGF0ZSAjIGNvbW1lbnQ8L2k+PC9zcGFuPjxzcGFuDQorc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPlVzZSBhIGRpcmV0aXZhIGRvdCBwYXJhDQorZXNwZWNpZmljYXIgbyBxdWUgdW0gZGV0ZXJtaW5hZG8gcG9udG8gcmVwcmVzZW50YS48L3NwYW4+PHNwYW4NCitzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD4mbmJzcDs8L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48aT48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+ZG90PC9zcGFuPjwvaT48c3Bhbg0KK3N0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5PIHBvbnRvIGEgc2VyIGRlZmluaWRvLiDJDQordW0g+m5pY28gZO1naXRvIG5vIGludGVydmFsbyAxLTgsIHRhbCBjb21vIGRlZmluaWRvIHBlbGEgU3RhbmRhcmQgQnJhaWxsZSBEb3QNCitOdW1iZXJpbmcgQ29udmVudGlvbi48L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5Og0KKyJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PGk+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPnN0YXRlPC9zcGFuPjwvaT48c3Bhbg0KK3N0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5PIHF1ZSBvIHBvbnRvIHJlcHJlc2VudGEuDQorUG9kZSBzZXI6PC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0IHN0eWxlPSd0ZXh0LWluZGVudDozNS40cHQnPjxpPjxzcGFuIHN0eWxlPSdmb250LXNpemU6DQorMTEuMHB0Jz49YXR0cmlidXRlPC9zcGFuPjwvaT48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6DQorIkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dCBzdHlsZT0ndGV4dC1pbmRlbnQ6MzUuNHB0Jz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+Tw0KK3BvbnRvIOkgbGV2YW50YWRvIHNlIG8gYXRyaWJ1dG8gbm9tZSBlc3ThIG9uLjwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6DQorVGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD4mbmJzcDs8L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dCBzdHlsZT0ndGV4dC1pbmRlbnQ6MzUuNHB0Jz48aT48c3BhbiBzdHlsZT0nZm9udC1zaXplOg0KKzExLjBwdCc+fmF0dHJpYnV0ZTwvc3Bhbj48L2k+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5Og0KKyJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQgc3R5bGU9J3RleHQtaW5kZW50OjM1LjRwdCc+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPk8NCitwb250byDpIGxldmFudGFkbyBzZSBvIGF0cmlidXRvIG5vbWUgZXN04SBvZmYuPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LWZhbWlseToNCitUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5PcyBub21lcyBkb3MgYml0cyBkZQ0KK2F0cmlidXRvIHPjbzo8L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQgc3R5bGU9J3RleHQtaW5kZW50OjM1LjRwdCc+PHNwYW4gbGFuZz1FTi1VUw0KK3N0eWxlPSdmb250LXNpemU6MTEuMHB0O21zby1hbnNpLWxhbmd1YWdlOkVOLVVTJz4wWDAxPC9zcGFuPjxzcGFuIGxhbmc9RU4tVVMNCitzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Ijttc28tYW5zaS1sYW5ndWFnZToNCitFTi1VUyc+PHNwYW4gc3R5bGU9J21zby10YWItY291bnQ6Mic+oKCgoKCgoKCgoKCgoKCgoKCgIDwvc3Bhbj48L3NwYW4+PHNwYW4NCitsYW5nPUVOLVVTIHN0eWxlPSdmb250LXNpemU6MTEuMHB0O21zby1hbnNpLWxhbmd1YWdlOkVOLVVTJz5mZy1ibHVlPC9zcGFuPjxzcGFuDQorbGFuZz1FTi1VUyBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3IjsNCittc28tYW5zaS1sYW5ndWFnZTpFTi1VUyc+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBsYW5nPUVOLVVTIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToNCisiQ291cmllciBOZXciO21zby1hbnNpLWxhbmd1YWdlOkVOLVVTJz48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0IHN0eWxlPSd0ZXh0LWluZGVudDozNS40cHQnPjxzcGFuIGxhbmc9RU4tVVMNCitzdHlsZT0nZm9udC1zaXplOjExLjBwdDttc28tYW5zaS1sYW5ndWFnZTpFTi1VUyc+MFgwMjwvc3Bhbj48c3BhbiBsYW5nPUVOLVVTDQorc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyI7bXNvLWFuc2ktbGFuZ3VhZ2U6DQorRU4tVVMnPjxzcGFuIHN0eWxlPSdtc28tdGFiLWNvdW50OjInPqCgoKCgoKCgoKCgoKCgoKCgoCA8L3NwYW4+PC9zcGFuPjxzcGFuDQorbGFuZz1FTi1VUyBzdHlsZT0nZm9udC1zaXplOjExLjBwdDttc28tYW5zaS1sYW5ndWFnZTpFTi1VUyc+ZmctZ3JlZW48L3NwYW4+PHNwYW4NCitsYW5nPUVOLVVTIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciOw0KK21zby1hbnNpLWxhbmd1YWdlOkVOLVVTJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIGxhbmc9RU4tVVMgc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5Og0KKyJDb3VyaWVyIE5ldyI7bXNvLWFuc2ktbGFuZ3VhZ2U6RU4tVVMnPjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQgc3R5bGU9J3RleHQtaW5kZW50OjM1LjRwdCc+PHNwYW4gbGFuZz1FTi1VUw0KK3N0eWxlPSdmb250LXNpemU6MTEuMHB0O21zby1hbnNpLWxhbmd1YWdlOkVOLVVTJz4weDA0PC9zcGFuPjxzcGFuIGxhbmc9RU4tVVMNCitzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Ijttc28tYW5zaS1sYW5ndWFnZToNCitFTi1VUyc+PHNwYW4gc3R5bGU9J21zby10YWItY291bnQ6Mic+oKCgoKCgoKCgoKCgoKCgoKCgIDwvc3Bhbj48L3NwYW4+PHNwYW4NCitsYW5nPUVOLVVTIHN0eWxlPSdmb250LXNpemU6MTEuMHB0O21zby1hbnNpLWxhbmd1YWdlOkVOLVVTJz5mZy1yZWQ8L3NwYW4+PHNwYW4NCitsYW5nPUVOLVVTIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciOw0KK21zby1hbnNpLWxhbmd1YWdlOkVOLVVTJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIGxhbmc9RU4tVVMgc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5Og0KKyJDb3VyaWVyIE5ldyI7bXNvLWFuc2ktbGFuZ3VhZ2U6RU4tVVMnPjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQgc3R5bGU9J3RleHQtaW5kZW50OjM1LjRwdCc+PHNwYW4gbGFuZz1FTi1VUw0KK3N0eWxlPSdmb250LXNpemU6MTEuMHB0O21zby1hbnNpLWxhbmd1YWdlOkVOLVVTJz4weDA4PC9zcGFuPjxzcGFuIGxhbmc9RU4tVVMNCitzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Ijttc28tYW5zaS1sYW5ndWFnZToNCitFTi1VUyc+PHNwYW4gc3R5bGU9J21zby10YWItY291bnQ6Mic+oKCgoKCgoKCgoKCgoKCgoKCgIDwvc3Bhbj48L3NwYW4+PHNwYW4NCitsYW5nPUVOLVVTIHN0eWxlPSdmb250LXNpemU6MTEuMHB0O21zby1hbnNpLWxhbmd1YWdlOkVOLVVTJz5mZy1icmlnaHQ8L3NwYW4+PHNwYW4NCitsYW5nPUVOLVVTIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciOw0KK21zby1hbnNpLWxhbmd1YWdlOkVOLVVTJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIGxhbmc9RU4tVVMgc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5Og0KKyJDb3VyaWVyIE5ldyI7bXNvLWFuc2ktbGFuZ3VhZ2U6RU4tVVMnPjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQgc3R5bGU9J3RleHQtaW5kZW50OjM1LjRwdCc+PHNwYW4gbGFuZz1FTi1VUw0KK3N0eWxlPSdmb250LXNpemU6MTEuMHB0O21zby1hbnNpLWxhbmd1YWdlOkVOLVVTJz4wWDEwPC9zcGFuPjxzcGFuIGxhbmc9RU4tVVMNCitzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Ijttc28tYW5zaS1sYW5ndWFnZToNCitFTi1VUyc+PHNwYW4gc3R5bGU9J21zby10YWItY291bnQ6Mic+oKCgoKCgoKCgoKCgoKCgoKCgIDwvc3Bhbj48L3NwYW4+PHNwYW4NCitsYW5nPUVOLVVTIHN0eWxlPSdmb250LXNpemU6MTEuMHB0O21zby1hbnNpLWxhbmd1YWdlOkVOLVVTJz5iZy1ibHVlPC9zcGFuPjxzcGFuDQorbGFuZz1FTi1VUyBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3IjsNCittc28tYW5zaS1sYW5ndWFnZTpFTi1VUyc+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBsYW5nPUVOLVVTIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToNCisiQ291cmllciBOZXciO21zby1hbnNpLWxhbmd1YWdlOkVOLVVTJz48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0IHN0eWxlPSd0ZXh0LWluZGVudDozNS40cHQnPjxzcGFuIGxhbmc9RU4tVVMNCitzdHlsZT0nZm9udC1zaXplOjExLjBwdDttc28tYW5zaS1sYW5ndWFnZTpFTi1VUyc+MHgyMDwvc3Bhbj48c3BhbiBsYW5nPUVOLVVTDQorc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyI7bXNvLWFuc2ktbGFuZ3VhZ2U6DQorRU4tVVMnPjxzcGFuIHN0eWxlPSdtc28tdGFiLWNvdW50OjInPqCgoKCgoKCgoKCgoKCgoKCgoCA8L3NwYW4+PC9zcGFuPjxzcGFuDQorbGFuZz1FTi1VUyBzdHlsZT0nZm9udC1zaXplOjExLjBwdDttc28tYW5zaS1sYW5ndWFnZTpFTi1VUyc+YmctZ3JlZW48L3NwYW4+PHNwYW4NCitsYW5nPUVOLVVTIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciOw0KK21zby1hbnNpLWxhbmd1YWdlOkVOLVVTJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIGxhbmc9RU4tVVMgc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5Og0KKyJDb3VyaWVyIE5ldyI7bXNvLWFuc2ktbGFuZ3VhZ2U6RU4tVVMnPjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQgc3R5bGU9J3RleHQtaW5kZW50OjM1LjRwdCc+PHNwYW4gbGFuZz1FTi1VUw0KK3N0eWxlPSdmb250LXNpemU6MTEuMHB0O21zby1hbnNpLWxhbmd1YWdlOkVOLVVTJz4weDQwPC9zcGFuPjxzcGFuIGxhbmc9RU4tVVMNCitzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Ijttc28tYW5zaS1sYW5ndWFnZToNCitFTi1VUyc+PHNwYW4gc3R5bGU9J21zby10YWItY291bnQ6Mic+oKCgoKCgoKCgoKCgoKCgoKCgIDwvc3Bhbj48L3NwYW4+PHNwYW4NCitsYW5nPUVOLVVTIHN0eWxlPSdmb250LXNpemU6MTEuMHB0O21zby1hbnNpLWxhbmd1YWdlOkVOLVVTJz5iZy1yZWQ8L3NwYW4+PHNwYW4NCitsYW5nPUVOLVVTIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciOw0KK21zby1hbnNpLWxhbmd1YWdlOkVOLVVTJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIGxhbmc9RU4tVVMgc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5Og0KKyJDb3VyaWVyIE5ldyI7bXNvLWFuc2ktbGFuZ3VhZ2U6RU4tVVMnPjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQgc3R5bGU9J3RleHQtaW5kZW50OjM1LjRwdCc+PHNwYW4gbGFuZz1FTi1VUw0KK3N0eWxlPSdmb250LXNpemU6MTEuMHB0O21zby1hbnNpLWxhbmd1YWdlOkVOLVVTJz4weDgwPC9zcGFuPjxzcGFuIGxhbmc9RU4tVVMNCitzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Ijttc28tYW5zaS1sYW5ndWFnZToNCitFTi1VUyc+PHNwYW4gc3R5bGU9J21zby10YWItY291bnQ6Mic+oKCgoKCgoKCgoKCgoKCgoKCgIDwvc3Bhbj48L3NwYW4+PHNwYW4NCitsYW5nPUVOLVVTIHN0eWxlPSdmb250LXNpemU6MTEuMHB0O21zby1hbnNpLWxhbmd1YWdlOkVOLVVTJz5ibGluazwvc3Bhbj48c3Bhbg0KK2xhbmc9RU4tVVMgc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyI7DQorbXNvLWFuc2ktbGFuZ3VhZ2U6RU4tVVMnPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gbGFuZz1FTi1VUyBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6DQorIkNvdXJpZXIgTmV3Ijttc28tYW5zaS1sYW5ndWFnZTpFTi1VUyc+PGJyPg0KKzwvc3Bhbj48c3BhbiBsYW5nPUVOLVVTIHN0eWxlPSdmb250LXNpemU6MTEuMHB0O21zby1hbnNpLWxhbmd1YWdlOkVOLVVTJz5FeGVtcGxvczo8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIGxhbmc9RU4tVVMgc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5Og0KKyJDb3VyaWVyIE5ldyI7bXNvLWFuc2ktbGFuZ3VhZ2U6RU4tVVMnPjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQgc3R5bGU9J3RleHQtaW5kZW50OjM1LjRwdCc+PHNwYW4gbGFuZz1FTi1VUw0KK3N0eWxlPSdmb250LXNpemU6MTEuMHB0O21zby1hbnNpLWxhbmd1YWdlOkVOLVVTJz63IGRvdCAxID1mZy1yZWQ8L3NwYW4+PHNwYW4NCitsYW5nPUVOLVVTIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciOw0KK21zby1hbnNpLWxhbmd1YWdlOkVOLVVTJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0IHN0eWxlPSd0ZXh0LWluZGVudDozNS40cHQnPjxzcGFuIGxhbmc9RU4tVVMNCitzdHlsZT0nZm9udC1zaXplOjExLjBwdDttc28tYW5zaS1sYW5ndWFnZTpFTi1VUyc+tyBkb3QgMiB+YmctYmx1ZTwvc3Bhbj48c3Bhbg0KK2xhbmc9RU4tVVMgc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyI7DQorbXNvLWFuc2ktbGFuZ3VhZ2U6RU4tVVMnPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gbGFuZz1FTi1VUyBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6DQorIkNvdXJpZXIgTmV3Ijttc28tYW5zaS1sYW5ndWFnZTpFTi1VUyc+PGJyPg0KKzwvc3Bhbj48c3BhbiBsYW5nPUVOLVVTIHN0eWxlPSdmb250LXNpemU6MTEuMHB0O21zby1hbnNpLWxhbmd1YWdlOkVOLVVTJz5pbmNsdWRlPGk+DQorZmlsZSAjIGNvbW1lbnQ8L2k+PC9zcGFuPjxzcGFuIGxhbmc9RU4tVVMgc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5Og0KKyJDb3VyaWVyIE5ldyI7bXNvLWFuc2ktbGFuZ3VhZ2U6RU4tVVMnPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPlVzZSBhIGRpcmV0aXZhIGluY2x1ZGUNCitwYXJhIGluY2x1aXIgbyBjb250ZfpkbyBkZSB1bSBhdHJpYnV0b3Mgc3VidGFiZWxhLiBFbGUg6SByZWN1cnNpdm8sIG8gcXVlDQorc2lnbmlmaWNhIHF1ZSBvcyBhdHJpYnV0b3Mgc3VidGFiZWxhIHBvZGUtc2UgaW5jbHVpciBhaW5kYSBlbSBvdXRyb3MgYXRyaWJ1dG9zDQorc3VidGFiZWxhLiBDdWlkYWRvcyBkZXZlbSBzZXIgdG9tYWRvcyBwYXJhIGdhcmFudGlyIHF1ZSAmcXVvdDtpbmNsdWRlIGxvb3AmcXVvdDsNCitu428gc2VqYSBjcmlhZG8uPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToNCisiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxpPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5maWxlPC9zcGFuPjwvaT48c3Bhbg0KK3N0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5PIGFycXVpdm8gYSBzZXIgaW5jbHXtZG8uDQorUG9kZSBzZXIgdW0gcmVsYXRpdm8gb3UgdW0gY2FtaW5obyBhYnNvbHV0by4gU2UgcmVsYXRpdm8sIGVsYSBlc3ThIGFuY29yYWRhIG5vDQorZGlyZXTzcmlvIGNvbnRlbmRvIG8gYXJxdWl2byBpbmNsdWluZG8uPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczsNCittc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdtc28tYmlkaS1mb250LXNpemU6MTguMHB0Jz48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdtc28tYmlkaS1mb250LXNpemU6MTguMHB0Jz42LjMgVGFiZWxhIGRlDQorQ29udHJh5+NvPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5PcyBhcnF1aXZvcyBjb20gbm9tZXMgbm8NCitmb3JtYXRvICouY3RiIHPjbyB0YWJlbGFzIGRlIGNvbnRyYefjbywgZSBjb20gbm9tZXMgbm8gZm9ybWF0byAqLmN0aSBz428NCitzdWJ0YWJlbGFzIGRlIGNvbnRyYefjby4gRWxlcyBz428gdXNhZG9zIHBlbG8gQlJMVFRZIHBhcmEgdHJhZHV6aXIgYXMNCitzZXH86m5jaWFzIGRlIGNhcmFjdGVyZXMgbmEgdGVsYSBlbSBzdWFzIHJlc3BlY3RpdmFzIHJlcHJlc2VudGHn9WVzIGNvbnRyYefjbw0KK2VtIGJyYWlsbGUuPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5CUkxUVFkgYXByZXNlbnRhIGNvbnRyYefjbw0KK2VtIGJyYWlsbGUgc2U6PC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0IHN0eWxlPSd0ZXh0LWluZGVudDozNS40cHQnPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz63DQorQSB0YWJlbGEgZGUgY29udHJh5+NvIGZvaSBzZWxlY2lvbmFkYS4gQ29uc3VsdGUgYSBvcOfjbyBkZSBsaW5oYSBkZSBjb21hbmRvIC1jDQorZSBhcyBkaXJldGl2YXMgZG8gYXJxdWl2byBkZSBjb25maWd1cmHn428gY29udHJhY3Rpb24tdGFibGUgcGFyYSBvYnRlciBtYWlzDQorZGV0YWxoZXMuPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0IHN0eWxlPSd0ZXh0LWluZGVudDozNS40cHQnPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz63DQorTyByZWN1cnNvIDYtZG90IGJyYWlsbGUgZm9pIGF0aXZhZG8uIFZlamEgbyBjb21hbmRvIFNJWERPVFMgZSBvIFRleHQgU3R5bGUgcGFyYQ0KK21haXMgZGV0YWxoZXMuPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5Fc3NlIHJlY3Vyc28gbuNvIGVzdGFy4Q0KK2Rpc3Bvbu12ZWwgc2UgYSBvcOfjbyBkZSBjb25zdHJ15+NvIC0tZGlzYWJsZS1jb250cmFjdGVkLWJyYWlsbGUgZm9pDQorZXNwZWNpZmljYWRhLjwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD4mbmJzcDs8L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+QXMgc2VndWludGVzIHRhYmVsYXMgZGUNCitjb250cmHn428gc+NvIGZvcm5lY2lkYXM6PC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToNCisiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0IHN0eWxlPSd0ZXh0LWluZGVudDozNS40cHQnPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5hZjwvc3Bhbj48c3Bhbg0KK3N0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48c3Bhbg0KK3N0eWxlPSdtc28tdGFiLWNvdW50OjEnPqCgoKCgoKCgoCA8L3NwYW4+PC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5BZnJpa2FhbnMNCisoY29udHJhY2lvbmFkbyk8L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQgc3R5bGU9J3RleHQtaW5kZW50OjM1LjRwdCc+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPmFtPC9zcGFuPjxzcGFuDQorc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxzcGFuDQorc3R5bGU9J21zby10YWItY291bnQ6MSc+oKCgoKCgoKCgIDwvc3Bhbj48L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPkFtaGFyaWMNCisobuNvLWNvbnRyYWNpb25hZG8pPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToNCisiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0IHN0eWxlPSd0ZXh0LWluZGVudDozNS40cHQnPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5kZS1iYXNpczxzcGFuDQorc3R5bGU9J21zby10YWItY291bnQ6Myc+oKCgoKCgoKCgoKCgIDwvc3Bhbj5HZXJtYW4gKG7jby1jb250cmFjaW9uYWRvKTwvc3Bhbj48c3Bhbg0KK3N0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0IHN0eWxlPSd0ZXh0LWluZGVudDozNS40cHQnPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5kZS1rdXJ6c2NocmlmdCZuYnNwOyZuYnNwOyZuYnNwOw0KKzxzcGFuIHN0eWxlPSdtc28tdGFiLWNvdW50OjEnPqCgIDwvc3Bhbj5HZXJtYW4gKGNvbnRyYWNpb25hZG8gLSBwYWRy428xOTk4KTwvc3Bhbj48c3Bhbg0KK3N0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0IHN0eWxlPSd0ZXh0LWluZGVudDozNS40cHQnPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5kZS12b2xsc2NocmlmdCZuYnNwOyZuYnNwOyZuYnNwOw0KKzxzcGFuIHN0eWxlPSdtc28tdGFiLWNvdW50OjEnPqCgIDwvc3Bhbj5HZXJtYW4gKGNvbnRyYef1ZXMgYuFzaWNhcyk8L3NwYW4+PHNwYW4NCitzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD4mbmJzcDs8L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dCBzdHlsZT0ndGV4dC1pbmRlbnQ6MzUuNHB0Jz48c3BhbiBsYW5nPUVOLVVTDQorc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQ7bXNvLWFuc2ktbGFuZ3VhZ2U6RU4tVVMnPmVuLXVlYi1nMjxzcGFuDQorc3R5bGU9J21zby10YWItY291bnQ6Myc+oKCgoKCgoKCgoKAgPC9zcGFuPlVuaWZpZWQgRW5nbGlzaCBCcmFpbGxlIChncmF1IDIpPC9zcGFuPjxzcGFuDQorbGFuZz1FTi1VUyBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3IjsNCittc28tYW5zaS1sYW5ndWFnZTpFTi1VUyc+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBsYW5nPUVOLVVTIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToNCisiQ291cmllciBOZXciO21zby1hbnNpLWxhbmd1YWdlOkVOLVVTJz48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0IHN0eWxlPSd0ZXh0LWluZGVudDozNS40cHQnPjxzcGFuIGxhbmc9RU4tVVMNCitzdHlsZT0nZm9udC1zaXplOjExLjBwdDttc28tYW5zaS1sYW5ndWFnZTpFTi1VUyc+ZW4tdXMtZzI8c3Bhbg0KK3N0eWxlPSdtc28tdGFiLWNvdW50OjMnPqCgoKCgoKCgoKCgoCA8L3NwYW4+QW1lcmljYW4gRW5nbGlzaCAoZ3JhdSAyKTwvc3Bhbj48c3Bhbg0KK2xhbmc9RU4tVVMgc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyI7DQorbXNvLWFuc2ktbGFuZ3VhZ2U6RU4tVVMnPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gbGFuZz1FTi1VUyBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6DQorIkNvdXJpZXIgTmV3Ijttc28tYW5zaS1sYW5ndWFnZTpFTi1VUyc+PG86cD4mbmJzcDs8L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dCBzdHlsZT0ndGV4dC1pbmRlbnQ6MzUuNHB0Jz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+ZXM8c3Bhbg0KK3N0eWxlPSdtc28tdGFiLWNvdW50OjQnPqCgoKCgoKCgoKCgoKCgoKCgoCA8L3NwYW4+U3BhbmlzaCAoZ3JhdSAyKTwvc3Bhbj48c3Bhbg0KK3N0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0IHN0eWxlPSd0ZXh0LWluZGVudDozNS40cHQnPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5mci1hYnJlZ2U8c3Bhbg0KK3N0eWxlPSdtc28tdGFiLWNvdW50OjMnPqCgoKCgoKCgoKCgIDwvc3Bhbj5GcmVuY2ggKGNvbnRyYWNpb25hZG8pPC9zcGFuPjxzcGFuDQorc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQgc3R5bGU9J21hcmdpbi1sZWZ0OjM1LjRwdCc+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPmZyLWludGVncmFsPHNwYW4NCitzdHlsZT0nbXNvLXRhYi1jb3VudDoyJz6goKCgoKCgoKAgPC9zcGFuPkZyZW5jaCAobuNvLWNvbnRyYWNpb25hZG8pPC9zcGFuPjxzcGFuDQorc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxicg0KK3N0eWxlPSdtc28tc3BlY2lhbC1jaGFyYWN0ZXI6bGluZS1icmVhayc+DQorPCFbaWYgIXN1cHBvcnRMaW5lQnJlYWtOZXdMaW5lXT48YnIgc3R5bGU9J21zby1zcGVjaWFsLWNoYXJhY3RlcjpsaW5lLWJyZWFrJz4NCis8IVtlbmRpZl0+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dCBzdHlsZT0nbWFyZ2luLWxlZnQ6MzUuNHB0Jz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+aGE8L3NwYW4+PHNwYW4NCitzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PHNwYW4NCitzdHlsZT0nbXNvLXRhYi1jb3VudDo0Jz6goKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoCA8L3NwYW4+PC9zcGFuPjxzcGFuDQorc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPkhhdXNhIChjb250cmFjaW9uYWRvKTwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6DQorVGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD4mbmJzcDs8L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dCBzdHlsZT0ndGV4dC1pbmRlbnQ6MzUuNHB0Jz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+aWQ8L3NwYW4+PHNwYW4NCitzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PHNwYW4NCitzdHlsZT0nbXNvLXRhYi1jb3VudDo0Jz6goKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoCA8L3NwYW4+PC9zcGFuPjxzcGFuDQorc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPkluZG9uZXNpYW4gKGNvbnRyYWNpb25hZG8pPC9zcGFuPjxzcGFuDQorc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQgc3R5bGU9J3RleHQtaW5kZW50OjM1LjRwdCc+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPmrhPHNwYW4NCitzdHlsZT0nbXNvLXRhYi1jb3VudDozJz6goKCgoKCgoKCgoKCgIDwvc3Bhbj4mbmJzcDsmbmJzcDsmbmJzcDs8c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj5KYXBhbmVzZSAobuNvLWNvbnRyYWNpb25hZG8pPC9zcGFuPjxzcGFuDQorc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQgc3R5bGU9J3RleHQtaW5kZW50OjM1LjRwdCc+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPmtvLWcxPHNwYW4NCitzdHlsZT0nbXNvLXRhYi1jb3VudDo0Jz6goKCgoKCgoKCgoKCgoKAgPC9zcGFuPktvcmVhbiAoZ3JhdSAxKTwvc3Bhbj48c3Bhbg0KK3N0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0IHN0eWxlPSd0ZXh0LWluZGVudDozNS40cHQnPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5rby1nMjxzcGFuDQorc3R5bGU9J21zby10YWItY291bnQ6NCc+oKCgoKCgoKCgoKCgoKCgIDwvc3Bhbj5Lb3JlYW4gKGdyYXUgMik8L3NwYW4+PHNwYW4NCitzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD4mbmJzcDs8L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dCBzdHlsZT0ndGV4dC1pbmRlbnQ6MzUuNHB0Jz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+a288c3Bhbg0KK3N0eWxlPSdtc28tdGFiLWNvdW50OjQnPqCgoKCgoKCgoKCgoKCgoKCgoCA8L3NwYW4+S29yZWFuIChu428tY29udHJhY2lvbmFkbyk8L3NwYW4+PHNwYW4NCitzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD4mbmJzcDs8L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dCBzdHlsZT0ndGV4dC1pbmRlbnQ6MzUuNHB0Jz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+bWc8c3Bhbg0KK3N0eWxlPSdtc28tdGFiLWNvdW50OjQnPqCgoKCgoKCgoKCgoKCgoKCgoCA8L3NwYW4+TWFsYWdhc3kgKGNvbnRyYWNpb25hZG8pPC9zcGFuPjxzcGFuDQorc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQgc3R5bGU9J3RleHQtaW5kZW50OjM1LjRwdCc+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPm11bjxzcGFuDQorc3R5bGU9J21zby10YWItY291bnQ6NCc+oKCgoKCgoKCgoKCgoKCgoKAgPC9zcGFuPk11bmRhIChjb250cmFjaW9uYWRvKTwvc3Bhbj48c3Bhbg0KK3N0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0IHN0eWxlPSd0ZXh0LWluZGVudDozNS40cHQnPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5ubDxzcGFuDQorc3R5bGU9J21zby10YWItY291bnQ6NCc+oKCgoKCgoKCgoKCgoKCgoKCgIDwvc3Bhbj5EdXRjaCAoY29udHJhY2lvbmFkbyk8L3NwYW4+PHNwYW4NCitzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD4mbmJzcDs8L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dCBzdHlsZT0ndGV4dC1pbmRlbnQ6MzUuNHB0Jz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+bnk8c3Bhbg0KK3N0eWxlPSdtc28tdGFiLWNvdW50OjQnPqCgoKCgoKCgoKCgoKCgoKCgoCA8L3NwYW4+Q2hpY2hld2EgKGNvbnRyYWNpb25hZG8pPC9zcGFuPjxzcGFuDQorc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQgc3R5bGU9J3RleHQtaW5kZW50OjM1LjRwdCc+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPmlwYTxzcGFuDQorc3R5bGU9J21zby10YWItY291bnQ6NCc+oKCgoKCgoKCgoKCgoKCgoKAgPC9zcGFuPkludGVybmF0aW9uYWwgUGhvbmV0aWMNCitBbHBoYWJldDwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD4mbmJzcDs8L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dCBzdHlsZT0ndGV4dC1pbmRlbnQ6MzUuNHB0Jz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+cHQ8c3Bhbg0KK3N0eWxlPSdtc28tdGFiLWNvdW50OjQnPqCgoKCgoKCgoKCgoKCgoKCgoCA8L3NwYW4+UG9ydHVndWVzZSAoZ3JhdSAyKTwvc3Bhbj48c3Bhbg0KK3N0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0IHN0eWxlPSd0ZXh0LWluZGVudDozNS40cHQnPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5zaTxzcGFuDQorc3R5bGU9J21zby10YWItY291bnQ6NCc+oKCgoKCgoKCgoKCgoKCgoKCgIDwvc3Bhbj5TaW5oYWxlc2UgKG7jby1jb250cmFjaW9uYWRvKTwvc3Bhbj48c3Bhbg0KK3N0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0IHN0eWxlPSd0ZXh0LWluZGVudDozNS40cHQnPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5zdzxzcGFuDQorc3R5bGU9J21zby10YWItY291bnQ6NCc+oKCgoKCgoKCgoKCgoKCgoKCgIDwvc3Bhbj5Td2FoaWxpIChjb250cmFjaW9uYWRvKTwvc3Bhbj48c3Bhbg0KK3N0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0IHN0eWxlPSd0ZXh0LWluZGVudDozNS40cHQnPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz50aDxzcGFuDQorc3R5bGU9J21zby10YWItY291bnQ6NCc+oKCgoKCgoKCgoKCgoKCgoKCgIDwvc3Bhbj5UaGFpIChjb250cmFjaW9uYWRvKTwvc3Bhbj48c3Bhbg0KK3N0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0IHN0eWxlPSd0ZXh0LWluZGVudDozNS40cHQnPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz56aC10dzxzcGFuDQorc3R5bGU9J21zby10YWItY291bnQ6NCc+oKCgoKCgoKCgoKCgoKCgIDwvc3Bhbj5UYWl3YW5lc2UgQ2hpbmVzZQ0KKyhu428tY29udHJhY2lvbmFkbyk8L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5Og0KKyJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQgc3R5bGU9J3RleHQtaW5kZW50OjM1LjRwdCc+PHNwYW4gbGFuZz1FTi1VUw0KK3N0eWxlPSdmb250LXNpemU6MTEuMHB0O21zby1hbnNpLWxhbmd1YWdlOkVOLVVTJz56aC10dy11Y2I8L3NwYW4+PHNwYW4NCitsYW5nPUVOLVVTIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciOw0KK21zby1hbnNpLWxhbmd1YWdlOkVOLVVTJz48c3BhbiBzdHlsZT0nbXNvLXRhYi1jb3VudDozJz6goKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoCA8L3NwYW4+PC9zcGFuPjxzcGFuDQorbGFuZz1FTi1VUyBzdHlsZT0nZm9udC1zaXplOjExLjBwdDttc28tYW5zaS1sYW5ndWFnZTpFTi1VUyc+VGFpd2FuZXNlIENoaW5lc2UNCisoVW5pcXVlIENoaW5lc2UgQnJhaWxsZSk8L3NwYW4+PHNwYW4gbGFuZz1FTi1VUyBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7DQorbXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Ijttc28tYW5zaS1sYW5ndWFnZTpFTi1VUyc+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBsYW5nPUVOLVVTIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToNCisiQ291cmllciBOZXciO21zby1hbnNpLWxhbmd1YWdlOkVOLVVTJz48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0IHN0eWxlPSd0ZXh0LWluZGVudDozNS40cHQnPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz56dTxzcGFuDQorc3R5bGU9J21zby10YWItY291bnQ6NCc+oKCgoKCgoKCgoKCgoKCgoKCgIDwvc3Bhbj5adWx1IChjb250cmFjaW9uYWRvKTwvc3Bhbj48c3Bhbg0KK3N0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5WZWphIGEgb3Dn428gZGUgbGluaGEgZGUNCitjb21hbmRvIC1jLCBlIGFzIGRpcmV0aXZhcyBkbyBhcnF1aXZvIGRlIGNvbmZpZ3VyYefjbyBjb250cmFjdGlvbi10YWJsZSBwYXJhDQorb2J0ZXIgZGV0YWxoZXMgc29icmUgY29tbyB1c2FyIHVtYSB0YWJlbGEgZGUgY29udHJh5+NvLjwvc3Bhbj48c3Bhbg0KK3N0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48YnI+DQorPC9zcGFuPjYuMy4xIDxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5UYWJlbGEgZGUgRm9ybWF0byBkZSBDb250cmHn4288L3NwYW4+PHNwYW4NCitzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD4mbmJzcDs8L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+VW1hIHRhYmVsYSBkZSBjb250cmHn428NCitjb25zaXN0ZSBkZSB1bWEgc2Vx/OpuY2lhIGRlIGVudHJhZGFzLCB1bWEgcG9yIGxpbmhhLCBxdWUgZGVmaW5lIGNvbW8gYXMNCitzZXH86m5jaWFzIGRlIGNhcmFjdGVyZXMgZGV2ZW0gc2VyIHJlcHJlc2VudGFkYXMgPHN0MTpQZXJzb25OYW1lDQorUHJvZHVjdElEPSJlbSBCcmFpbGxlLiBDYXJhY3RlcmVzIFVURi04IiB3OnN0PSJvbiI+ZW0gQnJhaWxsZS4gQ2FyYWN0ZXJlcyBVVEYtODwvc3QxOlBlcnNvbk5hbWU+DQorZGV2ZW0gc2VyIHVzYWRvcy4gTyBlc3Bh528gZW0gYnJhbmNvIChlc3Bh529zLCB0YWJzKSBubyBpbu1jaW8gZGUgdW1hIGxpbmhhLA0KK2Fzc2ltIGNvbW8gYW50ZXMgZS9vdSBkZXBvaXMgZGUgcXVhbHF1ZXIgb3BlcmFuZG8sIOkgaWdub3JhZG8uIExpbmhhcyBxdWUNCitjb2506m0gYXBlbmFzIGVzcGHnbyBlbSBicmFuY28gc+NvIGlnbm9yYWRhcy4gU2UgbyBjYXLhdGVyIG7jby1lc3Bh528gZW0gYnJhbmNvDQorYW50ZXMgZGUgdW1hIGxpbmhhIOkgJnF1b3Q7IyZxdW90OyBlbnTjbyBlc3NhIGxpbmhhIOkgdW0gY29tZW504XJpbyBlIOkNCitpZ25vcmFkby48L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPk8gZm9ybWF0byBkZSB1bWEgZW50cmFkYQ0KK25hIHRhYmVsYSBkZSBjb250cmHn428g6To8L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5Og0KKyJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQgc3R5bGU9J3RleHQtaW5kZW50OjM1LjRwdCc+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPmRpcmVjdGl2ZQ0KK29wZXJhbmQgLi4uIFtjb21tZW50XTwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6DQorIkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD4mbmJzcDs8L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+Q2FkYSBkaXJldGl2YSB0ZW0gdW0NCitu+m1lcm8gZXNwZWPtZmljbyBkZSBvcGVyYW5kb3MuIFF1YWxxdWVyIHRleHRvIGFs6W0gZG8g+mx0aW1vIG9wZXJhbmRvIGRlIHVtYQ0KK2RpcmV0aXZhIOkgaW50ZXJwcmV0YWRvIGNvbW8gdW0gY29tZW504XJpby4gQSBvcmRlbSBkYXMgZW50cmFkYXMgZGVudHJvIGRlIHVtYQ0KK3RhYmVsYSBkZSBjb250cmHn428g6SwgZW0gZ2VyYWwsIHR1ZG8gbyBxdWUg6SBjb252ZW5pZW50ZSBwYXJhIHNldSBtYW50ZW5lZG9yDQorKHMpLiBVbWEgZW50cmFkYSBxdWUgZGVmaW5lIHVtYSBlbnRpZGFkZSwgZS5nLiBjbGFzcywgZGV2ZSBwcmVjZWRlciB0b2RhcyBhcw0KK3JlZmVy6m5jaWFzIGEgZXNzYSBlbnRpZGFkZS48L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5Og0KKyJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPkVudHJhZGFzIHF1ZSBjb21iaW5hbQ0KK3NlcXXqbmNpYXMgZGUgY2FyYWN0ZXJlcyBz428gYXV0b21hdGljYW1lbnRlIHJlYXJyYW5qYWRhcyBkbyBtYWlvciBwYXJhIG8NCittZW5vciwgZGUgbW9kbyBxdWUgbyBtYWlvciBzZW1wcmUg6SBwcmVmZXLtdmVsLiBTZSBtYWlzIHVtYSBlbnRyYWRhIGNvcnJlc3BvbmRlDQorYSBzZXH86m5jaWEgZGUgY2FyYWN0ZXJlcywgZW50428gYSBzdWEgdGFiZWxhIG9yaWdpbmFsIGRlIG9yZGVuYefjbyDpIG1hbnRpZGEuDQorQXNzaW0sIGEgbWVzbWEgc2Vx/OpuY2lhIHBvZGUgc2VyIHRyYWR1emlkYSBkZSBmb3JtYSBkaWZlcmVudGUgZW0NCitjaXJjdW5zdOJuY2lhcyBkaWZlcmVudGVzLjwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6DQorIkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PGJyPg0KKzwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+Ni4zLjI8c3BhbiBzdHlsZT0nbXNvLXRhYi1jb3VudDoxJz4gPC9zcGFuPlRhYmVsYQ0KK2RlIE9wZXJhbmRvcyBkZSBDb250cmHn4288L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5Og0KKyJDb3VyaWVyIE5ldyInPjxicj4NCis8YnIgc3R5bGU9J21zby1zcGVjaWFsLWNoYXJhY3RlcjpsaW5lLWJyZWFrJz4NCis8IVtpZiAhc3VwcG9ydExpbmVCcmVha05ld0xpbmVdPjxiciBzdHlsZT0nbXNvLXNwZWNpYWwtY2hhcmFjdGVyOmxpbmUtYnJlYWsnPg0KKzwhW2VuZGlmXT48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxpPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5jaGFyYWN0ZXJzPC9zcGFuPjwvaT48c3Bhbg0KK3N0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5PIHByaW1laXJvIG9wZXJhbmRvIGRlIHVtYQ0KK3NlcfzqbmNpYSBkZSBjYXJhY3RlcmVzIGNvcnJlc3BvbmRlbnRlIGFzIGRpcmV0aXZhcyBlIGEgc2Vx/OpuY2lhIGRlIGNhcmFjdGVyZXMNCithIHNlciBjb3JyZXNwb25kaWRhLiBDYWRhIGNhcuFjdGVyIGRlbnRybyBkYSBzZXH86m5jaWEgcG9kZSBzZXI6PC9zcGFuPjxzcGFuDQorc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQgc3R5bGU9J3RleHQtaW5kZW50OjM1LjRwdCc+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPrcNCitRdWFscXVlciBjYXJhY3RlciD6bmljbyBxdWUgbuNvIHNlamEgdW1hIGJhcnJhLWludmVydGlkYSBvdSB1bSBjYXLhY3RlciBkZQ0KK2VzcGHnbyBlbSBicmFuY28uPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToNCisiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0IHN0eWxlPSd0ZXh0LWluZGVudDozNS40cHQnPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz63DQorVW0gY2FyYWN0ZXIgZXNwZWNpYWwgcHJlZml4YWRvIGRlIGJhcnJhLWludmVydGlkYS4gU+NvIGVsZXM6PC9zcGFuPjxzcGFuDQorc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQgc3R5bGU9J3RleHQtaW5kZW50OjM1LjRwdCc+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPlxiPC9zcGFuPjxzcGFuDQorc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQgc3R5bGU9J3RleHQtaW5kZW50OjM1LjRwdCc+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPkNhcuFjdGVyDQorZGUgcmV0cm9jZXNzby48L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQgc3R5bGU9J3RleHQtaW5kZW50OjM1LjRwdCc+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPlxmPC9zcGFuPjxzcGFuDQorc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQgc3R5bGU9J3RleHQtaW5kZW50OjM1LjRwdCc+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPkNhcuFjdGVyDQorZm9ybWZlZWQgKHF1ZWJyYSBkZSBw4WdpbmEpLjwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6DQorIkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD4mbmJzcDs8L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dCBzdHlsZT0ndGV4dC1pbmRlbnQ6MzUuNHB0Jz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+XG48L3NwYW4+PHNwYW4NCitzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dCBzdHlsZT0ndGV4dC1pbmRlbnQ6MzUuNHB0Jz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+Q2Fy4WN0ZXINCitkZSBub3ZhIGxpbmhhLjwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD4mbmJzcDs8L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dCBzdHlsZT0ndGV4dC1pbmRlbnQ6MzUuNHB0Jz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+XG8jIyM8L3NwYW4+PHNwYW4NCitzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dCBzdHlsZT0ndGV4dC1pbmRlbnQ6MzUuNHB0Jz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+UmVwcmVzZW50Yefjbw0KK2RlIHVtIGNhcuFjdGVyIGRlIHRy6nMgZO1naXRvcyBvY3RhbC48L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzOw0KK21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQgc3R5bGU9J3RleHQtaW5kZW50OjM1LjRwdCc+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPlxyPC9zcGFuPjxzcGFuDQorc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQgc3R5bGU9J3RleHQtaW5kZW50OjM1LjRwdCc+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPkNhcuFjdGVyDQorZGUgcmV0b3JubyBkZSB0cmFuc3BvcnRlLjwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6DQorIkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD4mbmJzcDs8L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dCBzdHlsZT0ndGV4dC1pbmRlbnQ6MzUuNHB0Jz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+XHM8L3NwYW4+PHNwYW4NCitzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dCBzdHlsZT0ndGV4dC1pbmRlbnQ6MzUuNHB0Jz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+Q2Fy4WN0ZXINCitkZSBlc3Bh528uPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0IHN0eWxlPSd0ZXh0LWluZGVudDozNS40cHQnPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5cdDwvc3Bhbj48c3Bhbg0KK3N0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0IHN0eWxlPSd0ZXh0LWluZGVudDozNS40cHQnPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5DYXLhY3Rlcg0KK2RlIHRhYiBob3Jpem9udGFsLjwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6DQorIkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD4mbmJzcDs8L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dCBzdHlsZT0ndGV4dC1pbmRlbnQ6MzUuNHB0Jz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+XHUjIyMjPC9zcGFuPjxzcGFuDQorc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQgc3R5bGU9J3RleHQtaW5kZW50OjM1LjRwdCc+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPlJlcHJlc2VudGHn428NCitkZSB1bSBjYXLhY3RlciBoZXhhZGVjaW1hbCBkZSBxdWF0cm8gZO1naXRvLjwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6DQorVGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD4mbmJzcDs8L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dCBzdHlsZT0ndGV4dC1pbmRlbnQ6MzUuNHB0Jz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+XFUjIyMjIyMjIzwvc3Bhbj48c3Bhbg0KK3N0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0IHN0eWxlPSd0ZXh0LWluZGVudDozNS40cHQnPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5SZXByZXNlbnRh5+NvDQorZGUgdW0gY2Fy4WN0ZXIgaGV4YWRlY2ltYWwgZGUgb2l0byBk7WdpdG8uPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczsNCittc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0IHN0eWxlPSd0ZXh0LWluZGVudDozNS40cHQnPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5cdjwvc3Bhbj48c3Bhbg0KK3N0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0IHN0eWxlPSd0ZXh0LWluZGVudDozNS40cHQnPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5DYXLhY3Rlcg0KK2RlIHRhYiBob3Jpem9udGFsLjwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6DQorIkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD4mbmJzcDs8L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dCBzdHlsZT0ndGV4dC1pbmRlbnQ6MzUuNHB0Jz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+XHgjIzwvc3Bhbj48c3Bhbg0KK3N0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0IHN0eWxlPSd0ZXh0LWluZGVudDozNS40cHQnPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5SZXByZXNlbnRh5+NvDQorZGUgdW0gY2Fy4WN0ZXIgaGV4YWRlY2ltYWwgZGUgZG9pcyBk7WdpdG9zLjwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6DQorVGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD4mbmJzcDs8L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dCBzdHlsZT0ndGV4dC1pbmRlbnQ6MzUuNHB0Jz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+XFgjIzwvc3Bhbj48c3Bhbg0KK3N0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0IHN0eWxlPSd0ZXh0LWluZGVudDozNS40cHQnPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz4obw0KK2Nhc28gZG8gWCBlIGRvcyBk7WdpdG9zIG7jbyDpIHNpZ25pZmljYXRpdmEpLjwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6DQorVGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD4mbmJzcDs8L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dCBzdHlsZT0ndGV4dC1pbmRlbnQ6MzUuNHB0Jz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+XCM8L3NwYW4+PHNwYW4NCitzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dCBzdHlsZT0ndGV4dC1pbmRlbnQ6MzUuNHB0Jz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+VW0NCitzaW5hbCBkZSBu+m1lcm8gbGl0ZXJhbC48L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5Og0KKyJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQgc3R5bGU9J3RleHQtaW5kZW50OjM1LjRwdCc+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPlwmbHQ7bmFtZSZndDs8L3NwYW4+PHNwYW4NCitzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dCBzdHlsZT0ndGV4dC1pbmRlbnQ6MzUuNHB0Jz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+Tw0KK25vbWUgVW5pY29kZSBkZSB1bSBjYXLhY3Rlcih1c2UgXyBwYXJhIGVzcGHnbykuPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LWZhbWlseToNCitUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0IHN0eWxlPSd0ZXh0LWluZGVudDozNS40cHQnPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5cXDwvc3Bhbj48c3Bhbg0KK3N0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0IHN0eWxlPSd0ZXh0LWluZGVudDozNS40cHQnPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5VbWENCitiYXJyYS1pbnZlcnRpZGEgbGl0ZXJhbC48L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5Og0KKyJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxicg0KK3N0eWxlPSdtc28tc3BlY2lhbC1jaGFyYWN0ZXI6bGluZS1icmVhayc+DQorPCFbaWYgIXN1cHBvcnRMaW5lQnJlYWtOZXdMaW5lXT48YnIgc3R5bGU9J21zby1zcGVjaWFsLWNoYXJhY3RlcjpsaW5lLWJyZWFrJz4NCis8IVtlbmRpZl0+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD4mbmJzcDs8L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48aT48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+cmVwcmVzZW50YXRpb248L3NwYW4+PC9pPjxzcGFuDQorc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPk8gc2VndW5kbyBvcGVyYW5kbyBkZXNzYQ0KK3NlcfzqbmNpYSBkZSBjYXJhY3RlcmVzIGNvcnJlc3BvbmRlbnRlcyBhIGRpcmV0aXZhcyBxdWUgdGVtIHVtYSByZXByZXNlbnRh5+NvDQorYnJhaWxsZSBkYSBzZXH86m5jaWEuIENhZGEgY+lsdWxhIGJyYWlsbGUg6SBlc3BlY2lmaWNhZGEgY29tbyB1bWEgc2Vx/OpuY2lhIGRlDQorMS04IG76bWVyb3MgZGUgcG9udG9zLiBVbSBu+m1lcm8gZGUgcG9udG8g6SB1bSBk7WdpdG8gZGVudHJvIGRvIGludGVydmFsbyAxLTgsDQordGFsIGNvbW8gZGVmaW5pZG8gcGVsYSBTdGFuZGFyZCBCcmFpbGxlIERvdCBOdW1iZXJpbmcgQ29udmVudGlvbi4gTyBu+m1lcm8gZGUNCitwb250byBlc3BlY2lhbCAwLCBxdWUgbuNvIHBvZGUgc2VyIHVzYWRvIGVtIGNvbmp1bnRvIGNvbSBxdWFscXVlciBvdXRybyBu+m1lcm8NCitkZSBwb250b3MsIHNpZ25pZmljYSBxdWUgbuNvIGjhIHBvbnRvcy48L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzOw0KK21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxicj4NCis8L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPjYuMy4zIE9wY29kZXM8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5VbSBvcGNvZGUg6SB1bWENCitwYWxhdnJhLWNoYXZlIHF1ZSBkaXogbyB0cmFkdXRvciBjb21vIGludGVycHJldGFyIG9zIG9wZXJhbmRvcy4gT3Mgb3Bjb2RlcyBz428NCithZ3J1cGFkb3MgYXF1aSBwb3IgZnVu5+NvLjwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6DQorIkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PGJyPg0KKzwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+Ni4zLjMuMSBBZG1pbmlzdHJh5+NvIGRlIFRhYmVsYTxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPkVzdGVzIG9wY29kZXMgdG9ybmEgbWFpcw0KK2bhY2lsIGRlIGVzY3JldmVyIGFzIHRhYmVsYXMgY29udHJh5+NvLiBFbGVzIG7jbyB06m0gbmVuaHVtIGVmZWl0byBkaXJldG8gc29icmUNCithIHRyYWR15+NvIGRlIGNhcmFjdGVyZXMuPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToNCisiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5pbmNsdWRlPGk+IHBhdGg8L2k+PC9zcGFuPjxzcGFuDQorc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPkluY2x1aXIgbyBjb250ZfpkbyBkZQ0KK291dHJvIGFycXVpdm8uIENvZGlmaWNh5+NvIHBvZGUgc2VyIGVtIHF1YWxxdWVyIHByb2Z1bmRpZGFkZS4gT3MgY2FtaW5ob3MNCityZWxhdGl2b3Mgc+NvIGFuY29yYWRvcyBubyBkaXJldPNyaW8gZG8gYXJxdWl2byBpbmNsde1kby48L3NwYW4+PHNwYW4NCitzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD4mbmJzcDs8L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+bG9jYWxlIDxpPmxvY2FsZTwvaT48L3NwYW4+PHNwYW4NCitzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD4mbmJzcDs8L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+RGVmaW5lIGEgbG9jYWxpZGFkZSBwYXJhIGENCitpbnRlcnByZXRh5+NvIGRlIGNhcuFjdGVyZXMgKGxldHJhcyBtaW76c2N1bGFzLCBtYWn6c2N1bGFzLCBu+m1lcm9zLCBldGMuKSBPDQorbG9jYWwgcG9kZSBzZXIgZXNwZWNpZmljYWRvIGNvbW86PC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczsNCittc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxpPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5sYW5ndWFnZVtfY291bnRyeV1bLmNoYXJzZXRdW0Btb2RpZmllcl08L3NwYW4+PC9pPjxzcGFuDQorc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPk8gY29tcG9uZW50ZSA8aT5sYW5ndWFnZTwvaT4NCivpIG5lY2Vzc+FyaW8gZSBkZXZlcuEgc2VyIHVtIGPzZGlnbyBkZSBkdWFzIGxldHJhcyBwYXJhIGztbmd1YXMgbm8gcGFkcuNvDQorSVNPLTYzOS4gTyBjb21wb25lbnRlIDxpPmNvdW50cnk8L2k+IOkgb3BjaW9uYWwgZSBkZXZlcuEgc2VyIHVtIGPzZGlnbyBkZSBkdWFzDQorbGV0cmFzIG5vIHBhZHLjbyBJU08tMzE2Ni4gTyBjb21wb25lbnRlIDxpPmNoYXJzZXQ8L2k+IOkgb3BjaW9uYWwgZSBkZXZlIHNlciB1bQ0KK25vbWUgZGUgY29uanVudG8gZGUgY2FyYWN0ZXJlcywgZS5nLiBJU08tODg1OS0xLjwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6DQorVGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD4mbmJzcDs8L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+Qzwvc3Bhbj48c3Bhbg0KK3N0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz43LWJpdCBBU0NJSS48L3NwYW4+PHNwYW4NCitzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD4mbmJzcDs8L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+LTwvc3Bhbj48c3Bhbg0KK3N0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5TZW0gbG9jYWxpZGFkZS48L3NwYW4+PHNwYW4NCitzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD4mbmJzcDs8L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+QSD6bHRpbWEgZXNwZWNpZmljYefjbyBkZQ0KK2xvY2FsaWRhZGUgc2UgYXBsaWNhIOAgdGFiZWxhIGludGVpcmEuIFNlIGVzdGUgb3Bjb2RlIG7jbyBmb3IgdXNhZG8sIGENCitsb2NhbGlkYWRlIEMg6SBhc3N1bWlkYS48L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5Og0KKyJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxicj4NCis8L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPjYuMy4zLjIgRGVmaW5p5+NvIGRlIHPtbWJvbG8gZXNwZWNpYWw8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5Fc3RlcyBvcGNvZGVzIGRlZmluZW0NCitz7W1ib2xvcyBlc3BlY2lhaXMgcXVlIGRldmVtIHNlciBpbnNlcmlkb3Mgbm8gdGV4dG8gZW0gYnJhaWxlLCBhIGZpbSBkZQ0KK2VzY2xhcmVj6i1sby48L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQgc3R5bGU9J3RleHQtaW5kZW50OjM1LjRwdCc+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPmNhcHNpZ24NCis8aT5kb3RzPC9pPjwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dCBzdHlsZT0ndGV4dC1pbmRlbnQ6MzUuNHB0Jz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+Tw0KK3PtbWJvbG8gcXVlIGNhcGl0YWxpemEgdW1hIPpuaWNhIGxldHJhLjwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7DQorbXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD4mbmJzcDs8L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dCBzdHlsZT0ndGV4dC1pbmRlbnQ6MzUuNHB0Jz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+YmVnY2Fwcw0KKzxpPmRvdHM8L2k+PC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0IHN0eWxlPSdtYXJnaW4tbGVmdDozNS40cHQnPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5PDQorc+1tYm9sbyBxdWUgc2UgaW5pY2lhIHVtIGJsb2NvIGRlIGxldHJhcyBtYWn6c2N1bGFzIGVtIHVtYSBwYWxhdnJhLjwvc3Bhbj48c3Bhbg0KK3N0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0IHN0eWxlPSd0ZXh0LWluZGVudDozNS40cHQnPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5lbmRjYXBzPGk+DQorZG90czwvaT48L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQgc3R5bGU9J3RleHQtaW5kZW50OjM1LjRwdCc+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPk8NCitz7W1ib2xvIHF1ZSB0ZXJtaW5hIHVtIGJsb2NvIGRlIGxldHJhcyBtYWn6c2N1bGFzIGVtIHVtYSBwYWxhdnJhLjwvc3Bhbj48c3Bhbg0KK3N0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0IHN0eWxlPSd0ZXh0LWluZGVudDozNS40cHQnPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5sZXRzaWduPGk+DQorZG90czwvaT48L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQgc3R5bGU9J3RleHQtaW5kZW50OjM1LjRwdCc+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPk8NCitz7W1ib2xvIHF1ZSBtYXJjYSB1bWEgY2FydGEgcXVlIG7jbyBmYXogcGFydGUgZGUgdW1hIHBhbGF2cmEuPC9zcGFuPjxzcGFuDQorc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQgc3R5bGU9J3RleHQtaW5kZW50OjM1LjRwdCc+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPm51bXNpZ24NCis8aT5kb3RzPC9pPjwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dCBzdHlsZT0ndGV4dC1pbmRlbnQ6MzUuNHB0Jz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+Tw0KK3PtbWJvbG8gcXVlIG1hcmNhIG8gaW7tY2lvIGRlIHVtIG76bWVyby48L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzOw0KK21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxicj4NCis8L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPjYuMy4zLjMgVHJhZHXn428gZGUgQ2Fy4WN0ZXI8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5Fc3RlcyBvcGNvZGVzIGRlZmluZW0gYXMNCityZXByZXNlbnRh5/VlcyBicmFpbGxlIHBhcmEgc2VxdepuY2lhcyBkZSBjYXLhY3RlcmVzLiBDYWRhIHVtIGRlbGVzIGRlZmluZSB1bWENCitlbnRyYWRhIG5hIHRhYmVsYSBkZSBjb250cmHn428uIEVzc2FzIGVudHJhZGFzIHBvZGVtIHNlciBkZWZpbmlkYXMgZW0gcXVhbHF1ZXINCitvcmRlbSwgZXhjZXRvLCBjb21vIGluZGljYWRvIGFiYWl4bywgcXVhbmRvIGRlZmluZW0gcmVwcmVzZW50Yef1ZXMgYWx0ZXJuYXRpdmFzDQorcGFyYSBhIHNlcfzqbmNpYSBkYSBtZXNtYSBuYXR1cmV6YS48L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzOw0KK21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPkNhZGEgdW0gZGVzc2VzIG9wY29kZXMNCitwb3NzdWkgdW0gY2Fy4WN0ZXIgb3BlcmFuZG8gKHF1ZSBkZXZlIHNlciBlc3BlY2lmaWNhZG8gY29tbyB1bWEgc3RyaW5nKSwgZSB1bWENCitjb25kaefjbyBlbWJ1dGlkYSBxdWUgcmVnZW0gYSBzdWEgZWxlZ2liaWxpZGFkZSBwYXJhIG8gdXNvLiBPIHRleHRvIOkNCitwcm9jZXNzYWRvIGVzdHJpdGFtZW50ZSBkZSBlc3F1ZXJkYSBwYXJhIGEgZGlyZWl0YSwgY2FyYWN0ZXJlIHBvciBjYXJhY3RlcmUsDQorY29tIGEgZW50cmFkYSBtYWlzIGVsZWftdmVsIHBhcmEgY2FkYSBwb3Np5+NvIGEgc2VyIHV0aWxpemFkYS4gU2UgaG91dmVyIG1haXMNCitkZSB1bWEgZW50cmFkYSBlbGVn7XZlbCBwYXJhIHVtYSBkZXRlcm1pbmFkYSBwb3Np5+NvLCBlbnTjbyBhcXVlbGUgY29tIGEgbWFpb3INCitjYWRlaWEgZGUgY2FyYWN0ZXJlIOkgdXNhZG8uIFNlIGhvdXZlciBtYWlzIGRlIHVtYSBlbnRyYWRhIGVsZWftdmVsIHBhcmEgYQ0KK21lc21hIHN0cmluZyBkZSBjYXJhY3RlcmVzLCBlbnTjbyBhIHVtYSBkZWZpbmnn428gbWFpcyBwcvN4aW1hIGRvIGlu7WNpbyBkYQ0KK3RhYmVsYSDpIHVzYWRhIChpc3NvIOkgYSBkZXBlbmTqbmNpYSBkZSBvcmRlbSD6bmljYSkuPC9zcGFuPjxzcGFuDQorc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPk11aXRvcyBkZXNzZXMgb3Bjb2RlcyB06m0NCit1bSBkb3Qgb3BlcmFuZG8gcXVlIGRlZmluZSBhIHJlcHJlc2VudGHn428gYnJhaWxsZSBwYXJhIHNldSBvcGVyYW5kbw0KK2NoYXJhY3RlcnMuIFRhbWLpbSBwb2RlIHNlciBlc3BlY2lmaWNhZG8gY29tbyB1bSBzaW5hbCBkZSBpZ3VhbCAoPSksIGNhc28gZW0NCitxdWUgc2lnbmlmaWNhIHVtYSBkZSBkdWFzIGNvaXNhcy4gU2UgYSBlbnRyYWRhIOkgcGFyYSB1bSD6bmljbyBjYXLhY3RlciwgZW50428NCitpc3NvIHNpZ25pZmljYSBxdWUgYSBhdHVhbCByZXByZXNlbnRh5+NvIGJyYWlsbGUgc2VsZWNpb25hZGEgbm8gY29tcHV0YWRvciAodmVyDQorYSBvcOfjbyBkZSBsaW5oYSBkZSBjb21hbmRvIC10IGUgYSBkaXJldGl2YSB0ZXh0LXRhYmxlIGRvIGFycXVpdm8gZGUNCitjb25maWd1cmHn428pIHBhcmEgcXVlIG8gY2Fy4XRlciDpIHBhcmEgc2VyIHVzYWRvLiBTZSDpIHBhcmEgdW1hIHNlcfzqbmNpYSBkZQ0KK211bHRpLWNhcuF0ZXJlcywgZW50428gYSByZXByZXNlbnRh5+NvIHBhZHLjbyBwYXJhIGNhZGEgY2FyYWN0ZXIgKHZlamEgYWx3YXlzKQ0KK2RlbnRybyBkYSBzZXH86m5jaWEgZGV2ZSBzZXIgdXNhZGEuPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczsNCittc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5BbGd1bnMgdGVybW9zIGVzcGVjaWFpcw0KK3PjbyB1c2Fkb3MgbmFzIGRlc2Nyaef1ZXMgZGVzc2VzIG9wY29kZXMuPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczsNCittc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0IHN0eWxlPSd0ZXh0LWluZGVudDozNS40cHQnPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz53b3JkPC9zcGFuPjxzcGFuDQorc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQgc3R5bGU9J3RleHQtaW5kZW50OjM1LjRwdCc+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPlVtYQ0KK3NlcfzqbmNpYSBt4XhpbWEgZGUgdW1hIG91IG1haXMgbGV0cmFzIGNvbnNlY3V0aXZhcy48L3NwYW4+PHNwYW4NCitzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD4mbmJzcDs8L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+QWdvcmEsIGZpbmFsbWVudGUsIGFxdWkNCitlc3ThIGEgZGVzY3Jp5+NvIG9wY29kZTo8L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5Og0KKyJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PG86cD4mbmJzcDs8L286cD48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0IHN0eWxlPSd0ZXh0LWluZGVudDozNS40cHQnPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5saXRlcmFsDQorY2hhcmFjdGVyczwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dCBzdHlsZT0nbWFyZ2luLWxlZnQ6MzUuMjVwdCc+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPlRyYWR1eg0KK3RvZGEgYSBzZXH86m5jaWEgZGUgY2FyYWN0ZXJlcyBkZWxpbWl0YWRhIHBvciBlc3Bh528gZW0gYnJhbmNvIG5vIGJyYWlsbGUgZG8NCitjb21wdXRhZG9yICh2ZXIgYSBvcOfjbyBkZSBsaW5oYSBkZSBjb21hbmRvIC10IGUgYSBkaXJldGl2YSB0ZXh0LXRhYmxlIGRvDQorYXJxdWl2byBkZSBjb25maWd1cmHn428pLjwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6DQorIkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD4mbmJzcDs8L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dCBzdHlsZT0ndGV4dC1pbmRlbnQ6MzUuMjVwdCc+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPnJlcGxhY2UNCitjaGFyYWN0ZXJzIGNoYXJhY3RlcnM8L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5Og0KKyJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQgc3R5bGU9J21hcmdpbi1sZWZ0OjM1LjI1cHQnPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5TdWJzdGl0dWkNCitvIHByaW1laXJvIGNvbmp1bnRvIGRlIGNhcmFjdGVyZXMsIG7jbyBpbXBvcnRhIG9uZGUgZWxlcyBhcGFyZWNlbSwgY29tIGENCitzZWd1bmRhLiBPcyBjYXLhY3RlcmVzIHN1YnN0aXR17WRvcyBu428gc+NvIHJlcHJvY2Vzc2Fkby48L3NwYW4+PHNwYW4NCitzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD4mbmJzcDs8L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dCBzdHlsZT0ndGV4dC1pbmRlbnQ6MzUuMjVwdCc+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPmFsd2F5cw0KK2NoYXJhY3RlcnMgZG90czwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dCBzdHlsZT0nbWFyZ2luLWxlZnQ6MzUuMjVwdCc+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPlRyYWR1eg0KK29zIGNhcuFjdGVyZXMsIG7jbyBpbXBvcnRhIG9uZGUgZWxlcyBhcGFyZWNlbS4gU2UgaOEgYXBlbmFzIHVtIGNhcuFjdGVyLCBlbnTjbywNCithbOltIGRpc3NvLCBkZWZpbmkgYSByZXByZXNlbnRh5+NvIHBhZHLjbyBwYXJhIGVzc2UgY2Fy4WN0ZXIuPC9zcGFuPjxzcGFuDQorc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQgc3R5bGU9J3RleHQtaW5kZW50OjM1LjI1cHQnPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5yZXBlYXRhYmxlDQorY2hhcmFjdGVycyBkb3RzPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0IHN0eWxlPSdtYXJnaW4tbGVmdDozNS4yNXB0Jz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+VHJhZHV6DQorb3MgY2Fy4WN0ZXJlcywgbuNvIGltcG9ydGEgb25kZSBlbGVzIGFwYXJlY2VtLiBJZ25vcmEgcXVhaXNxdWVyIHJlcGV0aef1ZXMNCitjb25zZWN1dGl2YXMgZGEgbWVzbWEgc2VxdepuY2lhLjwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7DQorbXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD4mbmJzcDs8L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dCBzdHlsZT0ndGV4dC1pbmRlbnQ6MzUuMjVwdCc+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPmxhcmdlc2lnbg0KK2NoYXJhY3RlcnMgZG90czwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dCBzdHlsZT0nbWFyZ2luLWxlZnQ6MzUuMjVwdCc+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPlRyYWR1eg0KK29zIHBlcnNvbmFnZW5zLCBu428gaW1wb3J0YSBvbmRlIGVsZXMgYXBhcmVjZW0uIFJldGlyYSBvcyBlc3Bh528gZW0gYnJhbmNvDQorZW50cmUgYXMgcGFsYXZyYXMgY29uc2VjdXRpdmFzIGFjb21wYW5oYWRvIHBvciBlc3RlIG9wY29kZS48L3NwYW4+PHNwYW4NCitzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD4mbmJzcDs8L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dCBzdHlsZT0ndGV4dC1pbmRlbnQ6MzUuMjVwdCc+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPmxhc3RsYXJnZXNpZ24NCitjaGFyYWN0ZXJzIGRvdHM8L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQgc3R5bGU9J21hcmdpbi1sZWZ0OjM1LjI1cHQnPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5UcmFkdXoNCitvcyBjYXLhY3RlcmVzLCBu428gaW1wb3J0YSBvbmRlIGVsZXMgYXBhcmVjZW0uIFJlbW92ZSBvIGVzcGHnbyBlbSBicmFuY28gYW50ZXJpb3INCitzZSBhIHBhbGF2cmEgYW50ZXJpb3IgZm9pIGFjb21wYW5oYWRvIHBlbG8gb3Bjb2RlIGxhcmdlc2lnbi48L3NwYW4+PHNwYW4NCitzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD4mbmJzcDs8L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dCBzdHlsZT0ndGV4dC1pbmRlbnQ6MzUuMjVwdCc+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPndvcmQNCitjaGFyYWN0ZXJzIGRvdHM8L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQgc3R5bGU9J3RleHQtaW5kZW50OjM1LjI1cHQnPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5UcmFkdXoNCitvcyBjYXLhY3RlcmVzIHNlIGVsZXMgc+NvIHVtYSBwYWxhdnJhLjwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7DQorbXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD4mbmJzcDs8L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dCBzdHlsZT0ndGV4dC1pbmRlbnQ6MzUuMjVwdCc+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPmpvaW53b3JkDQorY2hhcmFjdGVycyBkb3RzPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0IHN0eWxlPSdtYXJnaW4tbGVmdDozNS4yNXB0Jz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+VHJhZHV6DQorb3MgY2Fy4WN0ZXJlcyBzZSBlbGVzIHPjbyB1bWEgcGFsYXZyYS4gUmVtb3ZlIG8gc2VndWludGUgZXNwYedvIGVtIGJyYW5jbyBzZSBvDQorcHJpbWVpcm8gY2FyYWN0ZXJlIGRlcG9pcyDpIHVtYSBsZXRyYS48L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzOw0KK21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQgc3R5bGU9J3RleHQtaW5kZW50OjM1LjI1cHQnPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5sb3d3b3JkDQorY2hhcmFjdGVycyBkb3RzPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0IHN0eWxlPSdtYXJnaW4tbGVmdDozNS4yNXB0Jz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+VHJhZHV6DQorb3MgY2Fy4WN0ZXJlcyBzZSBlbGVzIHPjbyB1bWEgcGFsYXZyYSBkZWxpbWl0YWRhIGJyYW5jby1lc3Bh528uPC9zcGFuPjxzcGFuDQorc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQgc3R5bGU9J3RleHQtaW5kZW50OjM1LjI1cHQnPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5jb250cmFjdGlvbg0KK2NoYXJhY3RlcnM8L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQgc3R5bGU9J21hcmdpbi1sZWZ0OjM1LjI1cHQnPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5QcmVmaXhhDQorb3MgY2Fy4WN0ZXJlcyBjb20gdW0gc2luYWwgZGUgbGV0cmEgKHZlamEgbGV0c2lnbikgc2UgZWxlcyBz428gdW1hIHBhbGF2cmEuPC9zcGFuPjxzcGFuDQorc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQgc3R5bGU9J3RleHQtaW5kZW50OjM1LjI1cHQnPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5zdWZ3b3JkDQorY2hhcmFjdGVycyBkb3RzPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0IHN0eWxlPSdtYXJnaW4tbGVmdDozNS4yNXB0Jz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+VHJhZHV6DQorb3MgY2Fy4WN0ZXJlcyBzZSBlbGVzIHPjbyB1bWEgcGFsYXZyYSBvdSBubyBpbu1jaW8gZGUgdW1hIHBhbGF2cmEuPC9zcGFuPjxzcGFuDQorc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQgc3R5bGU9J3RleHQtaW5kZW50OjM1LjI1cHQnPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5wcmZ3b3JkDQorY2hhcmFjdGVycyBkb3RzPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0IHN0eWxlPSdtYXJnaW4tbGVmdDozNS4yNXB0Jz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+VHJhZHV6DQorb3MgY2Fy4WN0ZXJlcyBzZSBlbGVzIHPjbyB1bWEgcGFsYXZyYSBvdSBubyBmaW5hbCBkZSB1bWEgcGFsYXZyYS48L3NwYW4+PHNwYW4NCitzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD4mbmJzcDs8L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dCBzdHlsZT0ndGV4dC1pbmRlbnQ6MzUuMjVwdCc+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPmJlZ3dvcmQNCitjaGFyYWN0ZXJzIGRvdHM8L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxzcGFuDQorc3R5bGU9J21zby10YWItY291bnQ6MSc+oKCgoKCgoKCgoKCgoKCgIDwvc3Bhbj48L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToNCisxMS4wcHQnPlRyYWR1eiBvcyBjYXLhY3RlcmVzIHNlIGVsZXMgZXN0428gbm8gaW7tY2lvIGRlIHVtYSBwYWxhdnJhLjwvc3Bhbj48c3Bhbg0KK3N0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48c3Bhbg0KK3N0eWxlPSdtc28tdGFiLWNvdW50OjEnPqCgoKCgoKCgoKCgoKCgoCA8L3NwYW4+PC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LXNpemU6DQorMTEuMHB0Jz5iZWdtaWR3b3JkIGNoYXJhY3RlcnMgZG90czwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7DQorbXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dCBzdHlsZT0nbWFyZ2luLWxlZnQ6MzUuNHB0Jz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+VHJhZHV6DQorb3MgY2Fy4WN0ZXJlcyBzZSBlbGVzIGVzdONvIG91IG5vIGlu7WNpbyBvdSBubyBtZWlvIGRlIHVtYSBwYWxhdnJhLjwvc3Bhbj48c3Bhbg0KK3N0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0IHN0eWxlPSd0ZXh0LWluZGVudDozNS40cHQnPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5taWR3b3JkDQorY2hhcmFjdGVycyBkb3RzPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0IHN0eWxlPSd0ZXh0LWluZGVudDozNS40cHQnPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5UcmFkdXoNCitvcyBjYXLhY3RlcmVzIHNlIGVsZXMgZXN0428gbm8gbWVpbyBkZSB1bWEgcGFsYXZyYS48L3NwYW4+PHNwYW4NCitzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD4mbmJzcDs8L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dCBzdHlsZT0ndGV4dC1pbmRlbnQ6MzUuNHB0Jz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+bWlkZW5kd29yZA0KK2NoYXJhY3RlcnMgZG90czwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dCBzdHlsZT0nbWFyZ2luLWxlZnQ6MzUuNHB0Jz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+VHJhZHV6DQorb3MgY2Fy4WN0ZXJlcyBzZSBlbGVzIGVzdONvIG91IG5vIG1laW8gb3Ugbm8gZmluYWwgZGUgdW1hIHBhbGF2cmEuPC9zcGFuPjxzcGFuDQorc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQgc3R5bGU9J3RleHQtaW5kZW50OjM1LjRwdCc+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPmVuZHdvcmQNCitjaGFyYWN0ZXJzIGRvdHM8L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQgc3R5bGU9J3RleHQtaW5kZW50OjM1LjRwdCc+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPlRyYWR1eg0KK29zIGNhcuFjdGVyZXMgc2UgZWxlcyBlc3TjbyBubyBmaW5hbCBkZSB1bWEgcGFsYXZyYS48L3NwYW4+PHNwYW4NCitzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD4mbmJzcDs8L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dCBzdHlsZT0ndGV4dC1pbmRlbnQ6MzUuNHB0Jz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+cHJlcHVuYw0KK2NoYXJhY3RlcnMgZG90czwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dCBzdHlsZT0nbWFyZ2luLWxlZnQ6MzUuNHB0Jz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+VHJhZHV6DQorb3MgY2Fy4WN0ZXJlcyBzZSBlbGVzIHPjbyBwYXJ0ZSBkYSBwb250dWHn428gbm8gaW7tY2lvIGRlIHVtYSBwYWxhdnJhLjwvc3Bhbj48c3Bhbg0KK3N0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0IHN0eWxlPSd0ZXh0LWluZGVudDozNS40cHQnPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5wb3N0cHVuYw0KK2NoYXJhY3RlcnMgZG90czwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dCBzdHlsZT0nbWFyZ2luLWxlZnQ6MzUuMjVwdCc+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPlRyYWR1eg0KK29zIGNhcuFjdGVyZXMgc2UgZWxlcyBz428gcGFydGUgZGEgcG9udHVh5+NvIG5vIGZpbmFsIGRlIHVtYSBwYWxhdnJhLjwvc3Bhbj48c3Bhbg0KK3N0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0IHN0eWxlPSd0ZXh0LWluZGVudDozNS4yNXB0Jz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+YmVnbnVtDQorY2hhcmFjdGVycyBkb3RzPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48c3Bhbg0KK3N0eWxlPSdtc28tdGFiLWNvdW50OjEnPqCgoKCgoKCgoKCgoKCgoCA8L3NwYW4+PC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LXNpemU6DQorMTEuMHB0Jz5UcmFkdXogb3MgY2Fy4WN0ZXJlcyBzZSBlbGVzIGVzdONvIG5vIGlu7WNpbyBkZSB1bSBu+m1lcm8uPC9zcGFuPjxzcGFuDQorc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQgc3R5bGU9J3RleHQtaW5kZW50OjM1LjRwdCc+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPm1pZG51bQ0KK2NoYXJhY3RlcnMgZG90czwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PHNwYW4NCitzdHlsZT0nbXNvLXRhYi1jb3VudDoxJz6goKCgoKCgoKCgoKCgoKAgPC9zcGFuPjwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1zaXplOg0KKzExLjBwdCc+VHJhZHV6IG9zIGNhcuFjdGVyZXMgc2UgZWxlcyBlc3TjbyBubyBtZWlvIGRlIHVtIG76bWVyby48L3NwYW4+PHNwYW4NCitzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD4mbmJzcDs8L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dCBzdHlsZT0ndGV4dC1pbmRlbnQ6MzUuNHB0Jz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+ZW5kbnVtDQorY2hhcmFjdGVycyBkb3RzPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48c3Bhbg0KK3N0eWxlPSdtc28tdGFiLWNvdW50OjEnPqCgoKCgoKCgoKCgoKCgoCA8L3NwYW4+PC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LXNpemU6DQorMTEuMHB0Jz5UcmFkdXogb3MgY2Fy4WN0ZXJlcyBzZSBlbGVzIGVzdONvIG5vIGZpbmFsIGRlIHVtIG76bWVyby48L3NwYW4+PHNwYW4NCitzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PGJyPg0KKzwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+Ni4zLjMuNCBDbGFzc2VzIGRlIENhcmFjdGVyZXM8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5Fc3RlcyBvcGNvZGVzIGRlZmluZW0gZQ0KK3VzYW0gY2xhc3NlcyBkZSBjYXLhY3RlcmVzLiBVbWEgY2xhc3NlIGRlIGNhcmFjdGVyZXMgYXNzb2NpYSB1bSBjb25qdW50byBkZQ0KK2NhcuFjdGVyZXMgY29tIHVtIG5vbWUuIE8gbm9tZSwgZW0gc2VndWlkYSwgcmVmZXJlLXNlIGEgcXVhbHF1ZXIgY2Fy4WN0ZXINCitkZW50cm8gZGEgY2xhc3NlLiBVbSBjYXLhY3RlciBwb2RlIHBlcnRlbmNlciBhIG1haXMgZGUgdW1hIGNsYXNzZS48L3NwYW4+PHNwYW4NCitzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD4mbmJzcDs8L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+QXMgY2xhc3NlcyBkZSBjYXLhY3RlcmVzIGENCitzZWd1aXIgc+NvIGF1dG9tYXRpY2FtZW50ZSBwcuktZGVmaW5pY2FkYXMgY29tIGJhc2UgbmEgbG9jYWxpZGFkZSBzZWxlY2lvbmFkYTo8L3NwYW4+PHNwYW4NCitzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD4mbmJzcDs8L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dCBzdHlsZT0ndGV4dC1pbmRlbnQ6MzUuNHB0Jz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+ZGlnaXQ8L3NwYW4+PHNwYW4NCitzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dCBzdHlsZT0ndGV4dC1pbmRlbnQ6MzUuNHB0Jz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+Q2Fy4WN0ZXJlcw0KK251belyaWNvcy48L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQgc3R5bGU9J3RleHQtaW5kZW50OjM1LjRwdCc+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPmxldHRlcjwvc3Bhbj48c3Bhbg0KK3N0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0IHN0eWxlPSdtYXJnaW4tbGVmdDozNS40cHQnPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5BbWJhcw0KK29zIGNhcmFjdGVyZXMgbWFp+nNjdWxvcyBlIG1pbvpzY3Vsb3MgZG8gYWxmYWJldG8uIEFsZ3VtYXMgbG9jYWxpZGFkZXMgdOptDQorbGV0cmFzIGFkaWNpb25haXMgcXVlIG7jbyBz428gbmVtIG1hafpzY3VsYXMgbmVtIG1pbvpzY3VsYXMuPC9zcGFuPjxzcGFuDQorc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQgc3R5bGU9J3RleHQtaW5kZW50OjM1LjRwdCc+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPmxvd2VyY2FzZTwvc3Bhbj48c3Bhbg0KK3N0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48c3Bhbg0KK3N0eWxlPSdtc28tdGFiLWNvdW50OjEnPqCgoKCgoKCgoKCgoKCgoCA8L3NwYW4+PC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LXNpemU6DQorMTEuMHB0Jz5DYXLhY3RlcmVzIGRvIGFsZmFiZXRvIGVtIG1pbvpzY3Vsby48L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5Og0KK1RpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQgc3R5bGU9J3RleHQtaW5kZW50OjM1LjRwdCc+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPnB1bmN0dWF0aW9uPC9zcGFuPjxzcGFuDQorc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQgc3R5bGU9J21hcmdpbi1sZWZ0OjM1LjRwdCc+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPkNhcuFjdGVyZXMNCitpbXByZXNzbyBxdWUgbuNvIHPjbyBuZW0gZXNwYedvIGVtIGJyYW5jbyBlIG5lbSBhbGZhbnVt6XJpY29zLjwvc3Bhbj48c3Bhbg0KK3N0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0IHN0eWxlPSd0ZXh0LWluZGVudDozNS40cHQnPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5zcGFjZTwvc3Bhbj48c3Bhbg0KK3N0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0IHN0eWxlPSdtYXJnaW4tbGVmdDozNS40cHQnPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5DYXJhY3RlcmVzDQorZXNwYedvIDxzdDE6UGVyc29uTmFtZSBQcm9kdWN0SUQ9ImVtIGJyYW5jby4gTmEiIHc6c3Q9Im9uIj5lbSBicmFuY28uIE5hPC9zdDE6UGVyc29uTmFtZT4NCitsb2NhbGlkYWRlIHBhZHLjbywgZXNzZXMgc+NvOiBlc3Bh528sIHRhYnVsYef1ZXMgaG9yaXpvbnRhbCBlIHZlcnRpY2FsLCBkZQ0KK3JldG9ybm8gZGUgY2Fycm8sIGEgbm92YSBsaW5oYSwgZm9ybWZlZWQocXVlYnJhIGRlIHDhZ2luYSkuPC9zcGFuPjxzcGFuDQorc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQgc3R5bGU9J3RleHQtaW5kZW50OjM1LjRwdCc+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPnVwcGVyY2FzZTwvc3Bhbj48c3Bhbg0KK3N0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0IHN0eWxlPSd0ZXh0LWluZGVudDozNS40cHQnPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5DYXLhY3RlcmVzDQorZG8gYWxmYWJldG8gZW0gbWFp+nNjdWxvLjwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6DQorIkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD4mbmJzcDs8L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+T3Mgb3Bjb2RlcyBxdWUgZGVmaW5lbSBlDQordXNhbSBhcyBjbGFzc2VzIGRlIGNhcuFjdGVyZXMgc+NvOjwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7DQorbXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD4mbmJzcDs8L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dCBzdHlsZT0ndGV4dC1pbmRlbnQ6MzUuNHB0Jz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+Y2xhc3MNCituYW1lIGNoYXJhY3RlcnM8L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQgc3R5bGU9J21hcmdpbi1sZWZ0OjM1LjRwdCc+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPkRlZmluaQ0KK3VtYSBub3ZhIGNsYXNzZSBkZSBjYXLhY3Rlci4gT3MgY2Fy4WN0ZXJlcyBvcGVyYW5kbyBkZXZlbSBzZXIgZXNwZWNpZmljYWRvcw0KK2NvbW8gdW1hIHN0cmluZy4gVW1hIGNsYXNzZSBkZSBjYXJhY3RlciBu428gcG9kZSBzZXIgdXRpbGl6YWRhIGF06SBxdWUgZWxhIHNlamENCitkZWZpbmlkYS48L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQgc3R5bGU9J3RleHQtaW5kZW50OjM1LjRwdCc+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPmFmdGVyDQorY2xhc3Mgb3Bjb2RlIC4uLjwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6DQorIkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dCBzdHlsZT0nbWFyZ2luLWxlZnQ6MzUuNHB0Jz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+Tw0KK29wY29kZSBlc3BlY2lmaWNhZG8g6SBtYWlzIHJlc3RyaXRvIG5hIHNlcfzqbmNpYSBkZSBjYXJhY3RlcmVzIGNvcnJlc3BvbmRlbnRlIGUNCitkZXZlIHNlciBpbWVkaWF0YW1lbnRlIHByZWNlZGlkbyBwb3IgdW0gY2Fy4WN0ZXIgcXVlIHBlcnRlbmNlIOAgY2xhc3NlDQorZXNwZWNpZmljYWRhLiBTZSBlc3RlIG9wY29kZSDpIHVzYWRvIG1haXMgZGUgdW1hIHZleiBuYSBtZXNtYSBsaW5oYSwgZW50428gYQ0KK3VuaeNvIGRvcyBjYXJhY3RlcmVzIGVtIHRvZGFzIGFzIGNsYXNzZXMg6SB1c2FkYS48L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5Og0KK1RpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQgc3R5bGU9J3RleHQtaW5kZW50OjM1LjRwdCc+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPmJlZm9yZQ0KK2NsYXNzIG9wY29kZSAuLi48L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5Og0KKyJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQgc3R5bGU9J21hcmdpbi1sZWZ0OjM1LjRwdCc+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPk8NCitvcGNvZGUgZXNwZWNpZmljYWRvIOkgbWFpcyByZXN0cml0byBuYSBzZXH86m5jaWEgZGUgY2FyYWN0ZXJlcyBjb3JyZXNwb25kZW50ZSBlDQorZGV2ZSBzZXIgaW1lZGlhdGFtZW50ZSBzZWd1aWRvIHBvciB1bSBjYXLhY3RlciBxdWUgcGVydGVuY2Ug4CBjbGFzc2UNCitlc3BlY2lmaWNhZGEuIFNlIGVzdGUgb3Bjb2RlIOkgdXNhZG8gbWFpcyBkZSB1bWEgdmV6IG5hIG1lc21hIGxpbmhhLCBlbnTjbyBhDQordW5p428gZG9zIGNhcmFjdGVyZXMgZW0gdG9kYXMgYXMgY2xhc3NlcyDpIHVzYWRhLjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQgc3R5bGU9J21hcmdpbi1sZWZ0OjM1LjRwdCc+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzOw0KK21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQgc3R5bGU9J3RleHQtaW5kZW50OjM1LjRwdCc+PHNwYW4gc3R5bGU9J21zby1iaWRpLWZvbnQtc2l6ZToNCisxOC4wcHQnPjYuNCBUYWJlbGFzIGRlIFRlY2xhczwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6DQorIkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD4mbmJzcDs8L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+T3MgYXJxdWl2b3MgY29tIG5vbWVzIG5vDQorZm9ybWF0byAqLiBrdGIgc+NvIHRhYmVsYXMgY2hhdmVzLCBlIGNvbSBub21lcyBubyBmb3JtYXRvICouIGt0aSBz428gc3VidGFiZWxhcw0KK2NoYXZlcy4gRWxlcyBz428gdXNhZG9zIHBvciBCUkxUVFkgcGFyYSB2aW5jdWxhciBhbyBkaXNwbGF5IGJyYWlsbGUgZSBhbw0KK3RlY2xhZG8gY29tYmluYef1ZXMgZGUgdGVjbGFzIHBhcmEgY29tYW5kb3MgZG8gQlJMVFRZLjwvc3Bhbj48c3Bhbg0KK3N0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5PcyBub21lcyBkb3MgZGlzcGxheQ0KK2JyYWlsbGUgbm9zIGFycXVpdm9zIGRlIHRhYmVsYSBjaGF2ZXMgY29tZedhbSBjb20gYnJsLXh4LSwgb25kZSB4eCDpIG8gY/NkaWdvDQorZGUgZHVhcyBsZXRyYXMgZGUgaWRlbnRpZmljYefjbyBkbyBkcml2ZXIoZHJpdmVyIGlkZW50aWZpY2F0aW9uIGNvZGUpLiBPIHJlc3RvDQorZG8gbm9tZSBpZGVudGlmaWNhIG8gbW9kZWxvIChzKSBwYXJhIG9zIHF1YWlzIGEgdGFiZWxhIGNoYXZlIOkgdXNhZGEuPC9zcGFuPjxzcGFuDQorc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPk9zIG5vbWVzIGRvcyB0ZWNsYWRvcyBub3MNCithcnF1aXZvcyBkZSB0YWJlbGEgY2hhdmVzIGNvbWXnYW0gY29tIGtiZC0uIE8gcmVzdG8gZG8gbm9tZSBkZXNjcmV2ZSBvIHRpcG8gZGUNCit0ZWNsYWRvIHBhcmEgcXVhbCBhIHRhYmVsYSBjaGF2ZXMgZm9pIGNvbmNlYmlkby48L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5Og0KK1RpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPk9zIHNlZ3VpbnRlcyB0ZWNsYWRvcyBkZQ0KK3RhYmVsYSBjaGF2ZXMgc+NvIGZvcm5lY2lkb3M6PC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToNCisiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0IHN0eWxlPSd0ZXh0LWluZGVudDozNS40cHQnPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5rYmQtZGVza3RvcDwvc3Bhbj48c3Bhbg0KK3N0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0IHN0eWxlPSd0ZXh0LWluZGVudDozNS40cHQnPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5saWdh5/Vlcw0KK3BhcmEgdGVjbGFkbyBjb21wbGV0bzwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6DQorIkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD4mbmJzcDs8L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dCBzdHlsZT0ndGV4dC1pbmRlbnQ6MzUuNHB0Jz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+a2JkLWtleXBhZDwvc3Bhbj48c3Bhbg0KK3N0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0IHN0eWxlPSd0ZXh0LWluZGVudDozNS40cHQnPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5saWdh5/Vlcw0KK3BhcmEgbmF2ZWdh5+NvIGJhc2VhZG8gZW0gdGVjbGFkbyBudW3pcmljbzwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7DQorbXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD4mbmJzcDs8L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dCBzdHlsZT0ndGV4dC1pbmRlbnQ6MzUuNHB0Jz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+a2JkLWxhcHRvcDwvc3Bhbj48c3Bhbg0KK3N0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0IHN0eWxlPSd0ZXh0LWluZGVudDozNS40cHQnPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5saWdh5/Vlcw0KK3BhcmEgdGVjbGFkb3Mgc2VtIHVtIHRlY2xhZG8gbvptZXJpY288L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzOw0KK21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPkNvbnN1bHRlIGEgb3Dn428gZGUgbGluaGENCitkZSBjb21hbmRvIC1rIGUgYSBkaXJlY3RpdmEgZG8gYXJxdWl2byBkZSBjb25maWd1cmHn428ga2V5LXRhYmxlIHBhcmEgb2J0ZXINCitkZXRhbGhlcyBzb2JyZSBjb21vIHNlbGVjaW9uYXIgdW1hIHRhYmVsYSBjaGF2ZXMgZG8gdGVjbGFkby48L3NwYW4+PHNwYW4NCitzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PGJyPg0KKzwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+Ni40LjEgVGFiZWxhIGRlIERpcmV0aXZhcyBkZSBUZWNsYXM8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5VbWEgdGFiZWxhIGNoYXZlcyBjb25zaXN0ZQ0KK2VtIHVtYSBzZXH86m5jaWEgZGUgZGlyZXRpdmFzLCB1bWEgcG9yIGxpbmhhLCBxdWUgZGVmaW5lbSBjb21vIGFzIHRlY2xhcyBlDQorY29tYmluYef1ZXMgZGUgdGVjbGFzIGRldmVtIHNlciBpbnRlcnByZXRhZGFzLiBVVEYtOCBjYXJhY3RlciBlbmNvZGluZyBkZXZlIHNlcg0KK3VzYWRvLiBPIGVzcGHnbyBlbSBicmFuY28gKGVzcGHnb3MsIHRhYnMpIG5vIGlu7WNpbyBkZSB1bWEgbGluaGEsIGFzc2ltIGNvbW8NCithbnRlcyBlL291IGRlcG9pcyBkZSBxdWFscXVlciBvcGVyYW5kbywg6SBpZ25vcmFkby4gTGluaGFzIHF1ZSBjb2506m0gYXBlbmFzDQorZXNwYedvIGVtIGJyYW5jbyBz428gaWdub3JhZGFzLiBTZSBvIGNhcuF0ZXIgbuNvLWVzcGHnbyBlbSBicmFuY28gYW50ZXMgZGUgdW1hDQorbGluaGEg6SB1bSBzaW5hbCBkZSBu+m1lcm8gKCMpIGVudONvIGVzc2EgbGluaGEg6SB1bSBjb21lbnThcmlvIGUg6SBpZ25vcmFkYS48L3NwYW4+PHNwYW4NCitzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD4mbmJzcDs8L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+QSBwcmlvcmlkYWRlIHBhcmEgYQ0KK3Jlc29sdefjbyBkZSBjYWRhIGV2ZW50byBkYSB0ZWNsYSBwcmVzc2lvbmFkYS9saWJlcmFkYSDpIGEgc2VndWludGU6PC9zcGFuPjxzcGFuDQorc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQgc3R5bGU9J21hcmdpbi1sZWZ0OjM1LjRwdCc+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPjEuDQorVW1hIGhvdGtleSBwcmVzc2lvbmFkYSBvdSBsaWJlcmHn428gZGVmaW5pZGEgZGVudHJvIGRvIGNvbnRleHRvIGF0dWFsLiBWZWphIGENCitkaXJldGl2YSBob3RrZXkgcGFyYSBtYWlzIGRldGFsaGVzLjwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7DQorbXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD4mbmJzcDs8L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dCBzdHlsZT0nbWFyZ2luLWxlZnQ6MzUuNHB0Jz48c3QxOm1ldHJpY2NvbnZlcnRlcg0KK1Byb2R1Y3RJRD0iMi4gQSIgdzpzdD0ib24iPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz4yLiBBPC9zcGFuPjwvc3QxOm1ldHJpY2NvbnZlcnRlcj48c3Bhbg0KK3N0eWxlPSdmb250LXNpemU6MTEuMHB0Jz4gY29tYmluYefjbyBkZSB0ZWNsYXMgZGVmaW5pZGEgZGVudHJvIGRvIGNvbnRleHRvDQorYXR1YWwuIENvbnN1bHRlIGEgZGlyZXRpdmEgYmluZCBwYXJhIGRldGFsaGVzLjwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6DQorVGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD4mbmJzcDs8L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dCBzdHlsZT0nbWFyZ2luLWxlZnQ6MzUuNHB0Jz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+My4NCitVbSBjb21hbmRvIGRvIHRlY2xhZG8gYnJhaWxsZSBkZWZpbmlkbyBkZW50cm8gZG8gY29udGV4dG8gYXR1YWwuIFZlamEgYXMNCitkaXJlY3RpdmFzIG1hcCBlIHN1cGVyaW1wb3NlIHBhcmEgbWFpcyBkZXRhbGhlcy48L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5Og0KK1RpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQgc3R5bGU9J21hcmdpbi1sZWZ0OjM1LjRwdCc+PHN0MTptZXRyaWNjb252ZXJ0ZXINCitQcm9kdWN0SUQ9IjQuIEEiIHc6c3Q9Im9uIj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+NC4gQTwvc3Bhbj48L3N0MTptZXRyaWNjb252ZXJ0ZXI+PHNwYW4NCitzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+IGNvbWJpbmHn428gZGUgdGVjbGFzIGRlZmluaWRhIGRlbnRybyBkbyBjb250ZXh0bw0KK3BhZHLjby4gQ29uc3VsdGUgYSBkaXJldGl2YSBiaW5kIHBhcmEgZGV0YWxoZXMuPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LWZhbWlseToNCitUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5BcyBkaXJldHJpemVzIGEgc2VndWlyIHPjbw0KK2Zvcm5lY2lkYXM6PC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz42LjQuMS4xIEF0cmlidWlyIERpcmV0aXZhPG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD4mbmJzcDs8L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+Q3JpYXIgb3UgYXR1YWxpemFyIHVtYQ0KK3ZhcmnhdmVsIGFzc29jaWFkYSBjb20gbyBhdHVhbCBu7XZlbCBkZSBpbmNsdWlyLiBBIHZhcmnhdmVsIOkgdmlz7XZlbCBwYXJhIG8NCithdHVhbCBlIGluY2x1ZW0gb3Mgbu12ZWlzIG1haXMgYmFpeG9zLCBtYXMgbuNvIGluY2x1ZW0gb3Mgbu12ZWlzIG1haXMgZWxldmFkb3MuPG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD4mbmJzcDs8L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+YXNzaWduIHZhcmlhYmxlIFt2YWx1ZV08L3NwYW4+PHNwYW4NCitzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD4mbmJzcDs8L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dCBzdHlsZT0ndGV4dC1pbmRlbnQ6MzUuNHB0Jz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+dmFyaWFibGU8L3NwYW4+PHNwYW4NCitzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dCBzdHlsZT0nbWFyZ2luLWxlZnQ6MzUuNHB0Jz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+Tw0KK25vbWUgZGEgdmFyaeF2ZWwuIFNlIGEgdmFyaeF2ZWwgbuNvIGV4aXN0aXIgbm8gYXR1YWwgbu12ZWwgZGUgaW5jbHVpciBlbnTjbyBlbGENCivpIGNyaWFkYS48L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQgc3R5bGU9J3RleHQtaW5kZW50OjM1LjRwdCc+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPnZhbHVlPC9zcGFuPjxzcGFuDQorc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQgc3R5bGU9J21hcmdpbi1sZWZ0OjM1LjRwdCc+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPk8NCit2YWxvciBxdWUgc2Vy4SBhdHJpYnXtZG8g4CB2YXJp4XZlbC4gU2UgbuNvIGZvciBmb3JuZWNpZG8sIGVudONvIHVtIHZhbG9yIGRlDQorY29tcHJpbWVudG8gemVybyAobnVsbykg6SBhdHJpYnXtZG8uPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczsNCittc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5BIHNlcfzqbmNpYSBkZSBlc2NhcGUNCitce3ZhcmlhYmxlfSDpIHN1YnN0aXR17WRhIGNvbSBvIHZhbG9yIGRhIHZhcmnhdmVsIGNoYW1hZGEgZGVudHJvIGRhcyBjaGF2ZXMuIEENCit2YXJp4XZlbCBkZXZlIHRlciBzaWRvIGRlZmluaWRhIG5vIGF0dWFsIG91IHVtIG7tdmVsIGRlIGluY2x1aXIgc3VwZXJpb3IuPC9zcGFuPjxzcGFuDQorc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gbGFuZz1FTi1VUyBzdHlsZT0nZm9udC1zaXplOjExLjBwdDttc28tYW5zaS1sYW5ndWFnZToNCitFTi1VUyc+RXhlbXBsb3M6PC9zcGFuPjxzcGFuIGxhbmc9RU4tVVMgc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5Og0KKyJDb3VyaWVyIE5ldyI7bXNvLWFuc2ktbGFuZ3VhZ2U6RU4tVVMnPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gbGFuZz1FTi1VUyBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6DQorIkNvdXJpZXIgTmV3Ijttc28tYW5zaS1sYW5ndWFnZTpFTi1VUyc+PG86cD4mbmJzcDs8L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dCBzdHlsZT0ndGV4dC1pbmRlbnQ6MzUuNHB0Jz48c3BhbiBsYW5nPUVOLVVTDQorc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQ7bXNvLWFuc2ktbGFuZ3VhZ2U6RU4tVVMnPrc8L3NwYW4+PHNwYW4gbGFuZz1FTi1VUw0KK3N0eWxlPSdmb250LXNpemU6Ny4wcHQ7Zm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3IjsNCittc28tYW5zaS1sYW5ndWFnZTpFTi1VUyc+IDwvc3Bhbj48c3BhbiBsYW5nPUVOLVVTIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Ow0KK21zby1hbnNpLWxhbmd1YWdlOkVOLVVTJz5hc3NpZ24gbnVsbFZhbHVlPC9zcGFuPjxzcGFuIGxhbmc9RU4tVVMNCitzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Ijttc28tYW5zaS1sYW5ndWFnZToNCitFTi1VUyc+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBsYW5nPUVOLVVTIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToNCisiQ291cmllciBOZXciO21zby1hbnNpLWxhbmd1YWdlOkVOLVVTJz48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0IHN0eWxlPSd0ZXh0LWluZGVudDozNS40cHQnPjxzcGFuIGxhbmc9RU4tVVMNCitzdHlsZT0nZm9udC1zaXplOjExLjBwdDttc28tYW5zaS1sYW5ndWFnZTpFTi1VUyc+tzwvc3Bhbj48c3BhbiBsYW5nPUVOLVVTDQorc3R5bGU9J2ZvbnQtc2l6ZTo3LjBwdDtmb250LWZhbWlseToiVGltZXMgTmV3IFJvbWFuIjttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciOw0KK21zby1hbnNpLWxhbmd1YWdlOkVOLVVTJz4gPC9zcGFuPjxzcGFuIGxhbmc9RU4tVVMgc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQ7DQorbXNvLWFuc2ktbGFuZ3VhZ2U6RU4tVVMnPmFzc2lnbiBSZXR1cm5LZXkgS2V5MTwvc3Bhbj48c3BhbiBsYW5nPUVOLVVTDQorc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyI7bXNvLWFuc2ktbGFuZ3VhZ2U6DQorRU4tVVMnPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gbGFuZz1FTi1VUyBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6DQorIkNvdXJpZXIgTmV3Ijttc28tYW5zaS1sYW5ndWFnZTpFTi1VUyc+PG86cD4mbmJzcDs8L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dCBzdHlsZT0ndGV4dC1pbmRlbnQ6MzUuNHB0Jz48c3BhbiBsYW5nPUVOLVVTDQorc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQ7bXNvLWFuc2ktbGFuZ3VhZ2U6RU4tVVMnPrc8L3NwYW4+PHNwYW4gbGFuZz1FTi1VUw0KK3N0eWxlPSdmb250LXNpemU6Ny4wcHQ7Zm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3IjsNCittc28tYW5zaS1sYW5ndWFnZTpFTi1VUyc+IDwvc3Bhbj48c3BhbiBsYW5nPUVOLVVTIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Ow0KK21zby1hbnNpLWxhbmd1YWdlOkVOLVVTJz5iaW5kIFx7UmV0dXJuS2V5fSBSRVRVUk48L3NwYW4+PHNwYW4gbGFuZz1FTi1VUw0KK3N0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciO21zby1hbnNpLWxhbmd1YWdlOg0KK0VOLVVTJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIGxhbmc9RU4tVVMgc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5Og0KKyJDb3VyaWVyIE5ldyI7bXNvLWFuc2ktbGFuZ3VhZ2U6RU4tVVMnPjxicj4NCis8L3NwYW4+PHNwYW4gbGFuZz1FTi1VUyBzdHlsZT0nZm9udC1zaXplOjExLjBwdDttc28tYW5zaS1sYW5ndWFnZTpFTi1VUyc+Ni40LjEuMg0KKzwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+RGlyZXRpdmEgZGUgdu1uY3VsbzxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPkRlZmluZSBxdWFpcyBjb21hbmRvcw0KK0JSTFRUWSDpIGV4ZWN1dGFkbyBxdWFuZG8gdW1hIGNvbWJpbmHn428gZXNwZWPtZmljYSBkZSB1bWEgb3UgbWFpcyB0ZWNsYXMg6Q0KK3ByZXNzaW9uYWRhLiBBIGxpZ2Hn428g6SBkZWZpbmlkYSBkZW50cm8gZG8gY29udGV4dG8gYXR1YWwuPC9zcGFuPjxzcGFuDQorc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPmJpbmQga2V5cyBjb21tYW5kPC9zcGFuPjxzcGFuDQorc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPmtleXM8L3NwYW4+PHNwYW4NCitzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+QSBjb21iaW5h5+NvIGRlIHRlY2xhcyBxdWUNCitzZXLhIHZpbmN1bGFkYS4gySB1bWEgc2Vx/OpuY2lhIGRlIHVtIG91IG1haXMgbm9tZXMgZGUgY2hhdmVzIHNlcGFyYWRhcyBwZWxvDQorc2luYWwgZGUgbWFpcyAoKykuIE8gbm9tZSBkYSBjaGF2ZSBmaW5hbChvdSD6bmljYSkgcG9kZSBzZXIgb3BjaW9uYWxtZW50ZSBwcmVmaXhhZG8NCitjb20gdW0gcG9udG8gZGUgZXhjbGFtYefjbyAoISkuIEFzIGNoYXZlcyBwb2RlbSBzZXIgcHJlc3Npb25hZGFzIGVtIHF1YWxxdWVyDQorb3JkZW0sIGNvbSBhIHJlc3NhbHZhIGRlIHF1ZSBzZSBvIG5vbWUgZGEgY2hhdmUgZmluYWwg6SBwcmVmaXhhZG8gY29tIHVtIHBvbnRvDQorZGUgZXhjbGFtYefjbyBlbSBzZWd1aWRhLCBlbGUgZGV2ZSBzZXIgcHJlc3Npb25hZG8gcG9yIPpsdGltby4gTyBwcmVmaXhvIGRvDQorcG9udG8gZGUgZXhjbGFtYefjbyBzaWduaWZpY2EgcXVlIG8gY29tYW5kbyDpIGV4ZWN1dGFkbyBhc3NpbSBxdWUgYSB0ZWNsYSDpDQorcHJlc3Npb25hZGEuIFNlIG7jbyBmb3IgdXRpbGl6YWRvLCBvIGNvbWFuZG8g6SBleGVjdXRhZG8gYXNzaW0gcXVlIHF1YWxxdWVyIHVtYQ0KK2RhcyB0ZWNsYXMg6SBsaWJlcmFkYS48L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5Og0KKyJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPmNvbW1hbmQ8L3NwYW4+PHNwYW4NCitzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+TyBub21lIGRlIHVtIGNvbWFuZG8NCitCUkxUVFkuIFVtIG91IG1haXMgbW9kaWZpY2Fkb3JlcyBwb2RlbSBzZXIgb3BjaW9uYWxtZW50ZSBhbmV4YWRvIGFvIG5vbWUgZG8NCitjb21hbmRvLCB1c2FuZG8gdW0gc2luYWwgcG9zaXRpdm8gKCspIGNvbW8gc2VwYXJhZG9yLjwvc3Bhbj48c3Bhbg0KK3N0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5QYXJhIGNvbWFuZG9zIHF1ZQ0KK2F0aXZhL2Rlc2F0aXZhIG8gcmVjdXJzbzo8L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5Og0KKyJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQgc3R5bGU9J21hcmdpbi1sZWZ0OjM2LjBwdDt0ZXh0LWluZGVudDotMTguMHB0O21zby1saXN0Og0KK2wxMSBsZXZlbDEgbGZvMTA7dGFiLXN0b3BzOmxpc3QgMzYuMHB0Jz48IVtpZiAhc3VwcG9ydExpc3RzXT48c3Bhbg0KK3N0eWxlPSdmb250LWZhbWlseTpXaW5nZGluZ3M7bXNvLWZhcmVhc3QtZm9udC1mYW1pbHk6V2luZ2RpbmdzO21zby1iaWRpLWZvbnQtZmFtaWx5Og0KK1dpbmdkaW5ncyc+PHNwYW4gc3R5bGU9J21zby1saXN0Oklnbm9yZSc+pzxzcGFuIHN0eWxlPSdmb250OjcuMHB0ICJUaW1lcyBOZXcgUm9tYW4iJz4mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsNCis8L3NwYW4+PC9zcGFuPjwvc3Bhbj48IVtlbmRpZl0+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPlNlIG8gbW9kaWZpY2Fkb3INCisrb24gZm9yIGVzcGVjaWZpY2FkbywgbyByZWN1cnNvIGVzdOEgaGFiaWxpdGFkby48L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5Og0KK1RpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQgc3R5bGU9J21hcmdpbi1sZWZ0OjM2LjBwdDt0ZXh0LWluZGVudDotMTguMHB0O21zby1saXN0Og0KK2wxMSBsZXZlbDEgbGZvMTA7dGFiLXN0b3BzOmxpc3QgMzYuMHB0Jz48IVtpZiAhc3VwcG9ydExpc3RzXT48c3Bhbg0KK3N0eWxlPSdmb250LWZhbWlseTpXaW5nZGluZ3M7bXNvLWZhcmVhc3QtZm9udC1mYW1pbHk6V2luZ2RpbmdzO21zby1iaWRpLWZvbnQtZmFtaWx5Og0KK1dpbmdkaW5ncyc+PHNwYW4gc3R5bGU9J21zby1saXN0Oklnbm9yZSc+pzxzcGFuIHN0eWxlPSdmb250OjcuMHB0ICJUaW1lcyBOZXcgUm9tYW4iJz4mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsNCis8L3NwYW4+PC9zcGFuPjwvc3Bhbj48IVtlbmRpZl0+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPlNlIG8gbW9kaWZpY2Fkb3INCisrb2ZmIOkgZXNwZWNpZmljYWRhLCBvIHJlY3Vyc28gZXN04SBkZXNhdGl2YWRvLjwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6DQorVGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dCBzdHlsZT0nbWFyZ2luLWxlZnQ6MzYuMHB0O3RleHQtaW5kZW50Oi0xOC4wcHQ7bXNvLWxpc3Q6DQorbDExIGxldmVsMSBsZm8xMDt0YWItc3RvcHM6bGlzdCAzNi4wcHQnPjwhW2lmICFzdXBwb3J0TGlzdHNdPjxzcGFuDQorc3R5bGU9J2ZvbnQtZmFtaWx5OldpbmdkaW5nczttc28tZmFyZWFzdC1mb250LWZhbWlseTpXaW5nZGluZ3M7bXNvLWJpZGktZm9udC1mYW1pbHk6DQorV2luZ2RpbmdzJz48c3BhbiBzdHlsZT0nbXNvLWxpc3Q6SWdub3JlJz6nPHNwYW4gc3R5bGU9J2ZvbnQ6Ny4wcHQgIlRpbWVzIE5ldyBSb21hbiInPiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOw0KKzwvc3Bhbj48L3NwYW4+PC9zcGFuPjwhW2VuZGlmXT48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+U2UgbmVtICtvbiBvdQ0KKytvZmYg6SBlc3BlY2lmaWNhZG8sIG8gZXN0YWRvIGRvIHJlY3Vyc28g6SBhdGl2YWRvL2Rlc2F0aXZhZG8uPC9zcGFuPjxzcGFuDQorc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPlBhcmEgY29tYW5kb3MgcXVlIG1vdmVyIGENCitqYW5lbGEgYnJhaWxsZTo8L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQgc3R5bGU9J21hcmdpbi1sZWZ0OjM2LjBwdDt0ZXh0LWluZGVudDotMTguMHB0O21zby1saXN0Og0KK2wwIGxldmVsMSBsZm8xMTt0YWItc3RvcHM6bGlzdCAzNi4wcHQnPjwhW2lmICFzdXBwb3J0TGlzdHNdPjxzcGFuDQorc3R5bGU9J2ZvbnQtZmFtaWx5OldpbmdkaW5nczttc28tZmFyZWFzdC1mb250LWZhbWlseTpXaW5nZGluZ3M7bXNvLWJpZGktZm9udC1mYW1pbHk6DQorV2luZ2RpbmdzJz48c3BhbiBzdHlsZT0nbXNvLWxpc3Q6SWdub3JlJz6nPHNwYW4gc3R5bGU9J2ZvbnQ6Ny4wcHQgIlRpbWVzIE5ldyBSb21hbiInPiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOw0KKzwvc3Bhbj48L3NwYW4+PC9zcGFuPjwhW2VuZGlmXT48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+U2UgbyBtb2RpZmljYWRvcg0KKytyb3V0ZSDpIGVzcGVjaWZpY2FkbywgZW50428sIHNlIG5lY2Vzc+FyaW8sIG8gY3Vyc29yIOkgYXV0b21hdGljYW1lbnRlDQorZW5jYW1pbmhhZG8gcGFyYSBxdWUgZmlxdWUgc2VtcHJlIHZpc+12ZWwgbm8gZGlzcGxheSBicmFpbGxlLjwvc3Bhbj48c3Bhbg0KK3N0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5QYXJhIGNvbWFuZG9zIHF1ZSBtb3ZlIGENCitqYW5lbGEgYnJhaWxsZSBwYXJhIHVtYSBsaW5oYSBlc3BlY+1maWNhIG5hIHRlbGE6PC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LWZhbWlseToNCitUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0IHN0eWxlPSdtYXJnaW4tbGVmdDozNi4wcHQ7dGV4dC1pbmRlbnQ6LTE4LjBwdDttc28tbGlzdDoNCitsMCBsZXZlbDEgbGZvMTE7dGFiLXN0b3BzOmxpc3QgMzYuMHB0Jz48IVtpZiAhc3VwcG9ydExpc3RzXT48c3Bhbg0KK3N0eWxlPSdmb250LWZhbWlseTpXaW5nZGluZ3M7bXNvLWZhcmVhc3QtZm9udC1mYW1pbHk6V2luZ2RpbmdzO21zby1iaWRpLWZvbnQtZmFtaWx5Og0KK1dpbmdkaW5ncyc+PHNwYW4gc3R5bGU9J21zby1saXN0Oklnbm9yZSc+pzxzcGFuIHN0eWxlPSdmb250OjcuMHB0ICJUaW1lcyBOZXcgUm9tYW4iJz4mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsNCis8L3NwYW4+PC9zcGFuPjwvc3Bhbj48IVtlbmRpZl0+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPlNlIG8gbW9kaWZpY2Fkb3INCisrdG9sZWZ0IGZvciBlc3BlY2lmaWNhZG8sIGEgamFuZWxhIGRlIGJyYWlsZSB0YW1i6W0g6SBtb3ZpZGEgcGFyYSBvIGlu7WNpbw0KK2Rlc3NhIGxpbmhhLjwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dCBzdHlsZT0nbWFyZ2luLWxlZnQ6MzYuMHB0O3RleHQtaW5kZW50Oi0xOC4wcHQ7bXNvLWxpc3Q6DQorbDAgbGV2ZWwxIGxmbzExO3RhYi1zdG9wczpsaXN0IDM2LjBwdCc+PCFbaWYgIXN1cHBvcnRMaXN0c10+PHNwYW4NCitzdHlsZT0nZm9udC1mYW1pbHk6V2luZ2RpbmdzO21zby1mYXJlYXN0LWZvbnQtZmFtaWx5OldpbmdkaW5nczttc28tYmlkaS1mb250LWZhbWlseToNCitXaW5nZGluZ3MnPjxzcGFuIHN0eWxlPSdtc28tbGlzdDpJZ25vcmUnPqc8c3BhbiBzdHlsZT0nZm9udDo3LjBwdCAiVGltZXMgTmV3IFJvbWFuIic+Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7DQorPC9zcGFuPjwvc3Bhbj48L3NwYW4+PCFbZW5kaWZdPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5TZSBvIG1vZGlmaWNhZG9yDQorK3NjYWxlZCDpIGVzcGVjaWZpY2FkbywgbyBjb25qdW50byBkZSBjaGF2ZXMgdmluY3VsYWRhcyBhbyBjb21hbmRvIOkNCitpbnRlcnByZXRhZG8gY29tbyBzZSBmb3NzZSB1bWEgYmFycmEgZGUgcm9sYWdlbS4gU2UgbuNvIGZvciwgZW50428gbuNvIGjhIHVtYQ0KK2NvcnJlc3BvbmTqbmNpYSBkZSB1bS1wYXJhLXVtIGVudHJlIGFzIHRlY2xhcyBlIGxpbmhhcy48L3NwYW4+PHNwYW4NCitzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD4mbmJzcDs8L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+UGFyYSBjb21hbmRvcyBxdWUgZXhpZ2VtDQordW0gZGVzbG9jYW1lbnRvOjwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6DQorIkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD4mbmJzcDs8L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+TyBtb2RpZmljYWRvciArb2Zmc2V0LA0KK29uZGUgb2Zmc2V0IOkgdW0gbvptZXJvIGludGVpcm8gbuNvIG5lZ2F0aXZvLCBwb2RlIHNlciBlc3BlY2lmaWNhZG8uIFNlIG7jbyBmb3INCitmb3JuZWNpZG8sIGVudONvICswIOkgYXNzdW1pZG8uPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczsNCittc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5FeGVtcGxvczo8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0IHN0eWxlPSdtYXJnaW4tbGVmdDozNi4wcHQ7dGV4dC1pbmRlbnQ6LTE4LjBwdDttc28tbGlzdDoNCitsMSBsZXZlbDEgbGZvMTI7dGFiLXN0b3BzOmxpc3QgMzYuMHB0Jz48IVtpZiAhc3VwcG9ydExpc3RzXT48c3Bhbg0KK3N0eWxlPSdmb250LWZhbWlseTpXaW5nZGluZ3M7bXNvLWZhcmVhc3QtZm9udC1mYW1pbHk6V2luZ2RpbmdzO21zby1iaWRpLWZvbnQtZmFtaWx5Og0KK1dpbmdkaW5ncyc+PHNwYW4gc3R5bGU9J21zby1saXN0Oklnbm9yZSc+pzxzcGFuIHN0eWxlPSdmb250OjcuMHB0ICJUaW1lcyBOZXcgUm9tYW4iJz4mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsNCis8L3NwYW4+PC9zcGFuPjwvc3Bhbj48IVtlbmRpZl0+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPmJpbmQgS2V5MSBDU1JUUks8L3NwYW4+PHNwYW4NCitzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dCBzdHlsZT0nbWFyZ2luLWxlZnQ6MTguMHB0Jz48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7DQorbXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD4mbmJzcDs8L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dCBzdHlsZT0nbWFyZ2luLWxlZnQ6MzYuMHB0O3RleHQtaW5kZW50Oi0xOC4wcHQ7bXNvLWxpc3Q6DQorbDEgbGV2ZWwxIGxmbzEyO3RhYi1zdG9wczpsaXN0IDM2LjBwdCc+PCFbaWYgIXN1cHBvcnRMaXN0c10+PHNwYW4gbGFuZz1FTi1VUw0KK3N0eWxlPSdmb250LWZhbWlseTpXaW5nZGluZ3M7bXNvLWZhcmVhc3QtZm9udC1mYW1pbHk6V2luZ2RpbmdzO21zby1iaWRpLWZvbnQtZmFtaWx5Og0KK1dpbmdkaW5nczttc28tYW5zaS1sYW5ndWFnZTpFTi1VUyc+PHNwYW4gc3R5bGU9J21zby1saXN0Oklnbm9yZSc+pzxzcGFuDQorc3R5bGU9J2ZvbnQ6Ny4wcHQgIlRpbWVzIE5ldyBSb21hbiInPiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOw0KKzwvc3Bhbj48L3NwYW4+PC9zcGFuPjwhW2VuZGlmXT48c3BhbiBsYW5nPUVOLVVTIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Ow0KK21zby1hbnNpLWxhbmd1YWdlOkVOLVVTJz5iaW5kIEtleTErS2V5MiBDU1JUUksrb2ZmPC9zcGFuPjxzcGFuIGxhbmc9RU4tVVMNCitzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Ijttc28tYW5zaS1sYW5ndWFnZToNCitFTi1VUyc+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBsYW5nPUVOLVVTIHN0eWxlPSdmb250LXNpemU6MTEuMHB0O21zby1hbnNpLWxhbmd1YWdlOg0KK0VOLVVTJz48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0IHN0eWxlPSdtYXJnaW4tbGVmdDozNi4wcHQ7dGV4dC1pbmRlbnQ6LTE4LjBwdDttc28tbGlzdDoNCitsMSBsZXZlbDEgbGZvMTI7dGFiLXN0b3BzOmxpc3QgMzYuMHB0Jz48IVtpZiAhc3VwcG9ydExpc3RzXT48c3BhbiBsYW5nPUVOLVVTDQorc3R5bGU9J2ZvbnQtZmFtaWx5OldpbmdkaW5nczttc28tZmFyZWFzdC1mb250LWZhbWlseTpXaW5nZGluZ3M7bXNvLWJpZGktZm9udC1mYW1pbHk6DQorV2luZ2RpbmdzO21zby1hbnNpLWxhbmd1YWdlOkVOLVVTJz48c3BhbiBzdHlsZT0nbXNvLWxpc3Q6SWdub3JlJz6nPHNwYW4NCitzdHlsZT0nZm9udDo3LjBwdCAiVGltZXMgTmV3IFJvbWFuIic+Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7DQorPC9zcGFuPjwvc3Bhbj48L3NwYW4+PCFbZW5kaWZdPjxzcGFuIGxhbmc9RU4tVVMgc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQ7DQorbXNvLWFuc2ktbGFuZ3VhZ2U6RU4tVVMnPmJpbmQgS2V5MStLZXkzIENTUlRSSytvbjwvc3Bhbj48c3BhbiBsYW5nPUVOLVVTDQorc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyI7bXNvLWFuc2ktbGFuZ3VhZ2U6DQorRU4tVVMnPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gbGFuZz1FTi1VUyBzdHlsZT0nZm9udC1zaXplOjExLjBwdDttc28tYW5zaS1sYW5ndWFnZToNCitFTi1VUyc+PG86cD4mbmJzcDs8L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dCBzdHlsZT0nbWFyZ2luLWxlZnQ6MzYuMHB0O3RleHQtaW5kZW50Oi0xOC4wcHQ7bXNvLWxpc3Q6DQorbDEgbGV2ZWwxIGxmbzEyO3RhYi1zdG9wczpsaXN0IDM2LjBwdCc+PCFbaWYgIXN1cHBvcnRMaXN0c10+PHNwYW4gbGFuZz1FTi1VUw0KK3N0eWxlPSdmb250LWZhbWlseTpXaW5nZGluZ3M7bXNvLWZhcmVhc3QtZm9udC1mYW1pbHk6V2luZ2RpbmdzO21zby1iaWRpLWZvbnQtZmFtaWx5Og0KK1dpbmdkaW5nczttc28tYW5zaS1sYW5ndWFnZTpFTi1VUyc+PHNwYW4gc3R5bGU9J21zby1saXN0Oklnbm9yZSc+pzxzcGFuDQorc3R5bGU9J2ZvbnQ6Ny4wcHQgIlRpbWVzIE5ldyBSb21hbiInPiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOw0KKzwvc3Bhbj48L3NwYW4+PC9zcGFuPjwhW2VuZGlmXT48c3BhbiBsYW5nPUVOLVVTIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Ow0KK21zby1hbnNpLWxhbmd1YWdlOkVOLVVTJz5iaW5kIEtleTQgVE9QPC9zcGFuPjxzcGFuIGxhbmc9RU4tVVMgc3R5bGU9J2ZvbnQtZmFtaWx5Og0KK1RpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyI7bXNvLWFuc2ktbGFuZ3VhZ2U6RU4tVVMnPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gbGFuZz1FTi1VUyBzdHlsZT0nZm9udC1zaXplOjExLjBwdDttc28tYW5zaS1sYW5ndWFnZToNCitFTi1VUyc+PG86cD4mbmJzcDs8L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dCBzdHlsZT0nbWFyZ2luLWxlZnQ6MzYuMHB0O3RleHQtaW5kZW50Oi0xOC4wcHQ7bXNvLWxpc3Q6DQorbDEgbGV2ZWwxIGxmbzEyO3RhYi1zdG9wczpsaXN0IDM2LjBwdCc+PCFbaWYgIXN1cHBvcnRMaXN0c10+PHNwYW4gbGFuZz1FTi1VUw0KK3N0eWxlPSdmb250LWZhbWlseTpXaW5nZGluZ3M7bXNvLWZhcmVhc3QtZm9udC1mYW1pbHk6V2luZ2RpbmdzO21zby1iaWRpLWZvbnQtZmFtaWx5Og0KK1dpbmdkaW5nczttc28tYW5zaS1sYW5ndWFnZTpFTi1VUyc+PHNwYW4gc3R5bGU9J21zby1saXN0Oklnbm9yZSc+pzxzcGFuDQorc3R5bGU9J2ZvbnQ6Ny4wcHQgIlRpbWVzIE5ldyBSb21hbiInPiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOw0KKzwvc3Bhbj48L3NwYW4+PC9zcGFuPjwhW2VuZGlmXT48c3BhbiBsYW5nPUVOLVVTIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Ow0KK21zby1hbnNpLWxhbmd1YWdlOkVOLVVTJz5iaW5kIEtleTUgVE9QK3JvdXRlPC9zcGFuPjxzcGFuIGxhbmc9RU4tVVMNCitzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Ijttc28tYW5zaS1sYW5ndWFnZToNCitFTi1VUyc+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBsYW5nPUVOLVVTIHN0eWxlPSdmb250LXNpemU6MTEuMHB0O21zby1hbnNpLWxhbmd1YWdlOg0KK0VOLVVTJz48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0IHN0eWxlPSdtYXJnaW4tbGVmdDozNi4wcHQ7dGV4dC1pbmRlbnQ6LTE4LjBwdDttc28tbGlzdDoNCitsMSBsZXZlbDEgbGZvMTI7dGFiLXN0b3BzOmxpc3QgMzYuMHB0Jz48IVtpZiAhc3VwcG9ydExpc3RzXT48c3BhbiBsYW5nPUVOLVVTDQorc3R5bGU9J2ZvbnQtZmFtaWx5OldpbmdkaW5nczttc28tZmFyZWFzdC1mb250LWZhbWlseTpXaW5nZGluZ3M7bXNvLWJpZGktZm9udC1mYW1pbHk6DQorV2luZ2RpbmdzO21zby1hbnNpLWxhbmd1YWdlOkVOLVVTJz48c3BhbiBzdHlsZT0nbXNvLWxpc3Q6SWdub3JlJz6nPHNwYW4NCitzdHlsZT0nZm9udDo3LjBwdCAiVGltZXMgTmV3IFJvbWFuIic+Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7DQorPC9zcGFuPjwvc3Bhbj48L3NwYW4+PCFbZW5kaWZdPjxzcGFuIGxhbmc9RU4tVVMgc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQ7DQorbXNvLWFuc2ktbGFuZ3VhZ2U6RU4tVVMnPmJpbmQgVmVydGljYWxTZW5zb3IgR09UT0xJTkUrdG9sZWZ0K3NjYWxlZDwvc3Bhbj48c3Bhbg0KK2xhbmc9RU4tVVMgc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyI7DQorbXNvLWFuc2ktbGFuZ3VhZ2U6RU4tVVMnPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gbGFuZz1FTi1VUyBzdHlsZT0nZm9udC1zaXplOjExLjBwdDttc28tYW5zaS1sYW5ndWFnZToNCitFTi1VUyc+PG86cD4mbmJzcDs8L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dCBzdHlsZT0nbWFyZ2luLWxlZnQ6MzYuMHB0O3RleHQtaW5kZW50Oi0xOC4wcHQ7bXNvLWxpc3Q6DQorbDEgbGV2ZWwxIGxmbzEyO3RhYi1zdG9wczpsaXN0IDM2LjBwdCc+PCFbaWYgIXN1cHBvcnRMaXN0c10+PHNwYW4gbGFuZz1FTi1VUw0KK3N0eWxlPSdmb250LWZhbWlseTpXaW5nZGluZ3M7bXNvLWZhcmVhc3QtZm9udC1mYW1pbHk6V2luZ2RpbmdzO21zby1iaWRpLWZvbnQtZmFtaWx5Og0KK1dpbmdkaW5nczttc28tYW5zaS1sYW5ndWFnZTpFTi1VUyc+PHNwYW4gc3R5bGU9J21zby1saXN0Oklnbm9yZSc+pzxzcGFuDQorc3R5bGU9J2ZvbnQ6Ny4wcHQgIlRpbWVzIE5ldyBSb21hbiInPiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOw0KKzwvc3Bhbj48L3NwYW4+PC9zcGFuPjwhW2VuZGlmXT48c3BhbiBsYW5nPUVOLVVTIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Ow0KK21zby1hbnNpLWxhbmd1YWdlOkVOLVVTJz5iaW5kIEtleTYgQ09OVEVYVCsxPC9zcGFuPjxzcGFuIGxhbmc9RU4tVVMNCitzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Ijttc28tYW5zaS1sYW5ndWFnZToNCitFTi1VUyc+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PGJyPg0KKzwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+Ni40LjEuMyBEaXJldGl2YSBkZSBDb250ZXh0bzxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPkRlZmluaXIgZm9ybWFzDQorYWx0ZXJuYXRpdmFzIGRlIGludGVycHJldGFyIGNlcnRvcyBhY29udGVjaW1lbnRvcy1jaGF2ZSBlL291IGNvbWJpbmHn9WVzLiBVbQ0KK2NvbnRleHRvIGNvbnTpbSBhcyBkZWZpbmnn9WVzIGNyaWFkYXMgcGVsYXMgZGlyZWN0aXZhcyBiaW5kLCBob3RrZXksIG1hcCwgZQ0KK3N1cGVyaW1wb3NlLjwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dCBzdHlsZT0nbWFyZ2luLWxlZnQ6MzUuNHB0Jz48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7DQorbXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PGJyPg0KKzwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+Y29udGV4dCBpZGVudGlmaWVyIFt0aXRsZV08L3NwYW4+PHNwYW4NCitzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dCBzdHlsZT0ndGV4dC1pbmRlbnQ6MzUuNHB0Jz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+aWRlbnRpZmllcjwvc3Bhbj48c3Bhbg0KK3N0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5RdWFsIGEgZGVmaW5p5+NvIHBvc3Rlcmlvcg0KK2RvIGNvbnRleHRvIGRldmUgc2VyIGNyaWFkYSBkZW50cm8uIFBvZGVtIHNlcjo8L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5Og0KK1RpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQgc3R5bGU9J3RleHQtaW5kZW50OjM1LjRwdCc+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPrcNCitVbSBkZXNzZXMgbm9tZXMgZXNwZWNpYWlzOjwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6DQorIkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD4mbmJzcDs8L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+ZGVmYXVsdDwvc3Bhbj48c3Bhbg0KK3N0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5PIGNvbnRleHRvIHBhZHLjby4gU2UgYQ0KK2NvbWJpbmHn428gZGUgdGVjbGFzIG7jbyBmb2kgZGVmaW5pZGEgZGVudHJvIGRvIGNvbnRleHRvIGF0dWFsLCBlbnTjbyBhIHN1YQ0KK2RlZmluaefjbyBubyBjb250ZXh0byBwYWRy428g6SB1c2Fkby4gSXNzbyBz8yBzZSBhcGxpY2EgYXMgZGVmaW5p5/VlcyBjcmlhZGFzDQorcGVsYSBkaXJldGl2YSBkZSB2aW5jdWxvLjwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6DQorIkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD4mbmJzcDs8L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+bWVudTwvc3Bhbj48c3Bhbg0KK3N0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5Fc3NlIGNvbnRleHRvIOkgdXRpbGl6YWRvDQorcXVhbmRvIGRlbnRybyBkbyBtZW51IGRlIHByZWZlcupuY2lhcyBkbyBCUkxUVFkuPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LWZhbWlseToNCitUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0IHN0eWxlPSdtYXJnaW4tbGVmdDozNS40cHQnPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz63PC9zcGFuPjxzcGFuDQorc3R5bGU9J2ZvbnQtc2l6ZTo3LjBwdDtmb250LWZhbWlseToiVGltZXMgTmV3IFJvbWFuIjttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz4NCis8L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPlVtIG76bWVybyBpbnRlaXJvIG5vIGludGVydmFsbyBkZSA8c3QxOm1ldHJpY2NvbnZlcnRlcg0KK1Byb2R1Y3RJRD0iMCBhIiB3OnN0PSJvbiI+MCBhPC9zdDE6bWV0cmljY29udmVydGVyPiAyNTIuIENvbnRleHRvIDAg6SB1bWENCittYW5laXJhIGFsdGVybmF0aXZhIHBhcmEgc2UgcmVmZXJpciBhbyBjb250ZXh0byBwYWRy428uIE9zIG76bWVyb3MgbWFpcyBhbHRvcw0KK2RlIGNvbnRleHRvIGRldmVtIHNlciBldml0YWRvcyBwb3JxdWUgbyBtYWlvciBu+m1lcm8gcGVybWl0aWRvIGVzdOEgc3VqZWl0byBhDQorYWx0ZXJh5+NvIHNlbSBhdmlzbyBwcul2aW8sIHNlLCBwb3IgZXhlbXBsbywgb3MgY29udGV4dG9zIG1haXMgbm9tZWFkb3Mgc+NvDQorYWRpY2lvbmFkb3MuPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz50aXRsZTwvc3Bhbj48c3Bhbg0KK3N0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5VbWEgZGVzY3Jp5+NvDQorcGVyc29uLXJlYWRhYmxlIGRvIGNvbnRleHRvLiBFbGUgcG9kZSBjb250ZXIgZXNwYedvcywgZSBhcyBjb252ZW7n9WVzIGRlDQorY2FwaXRhbGl6YefjbyBwYWRy428gZGV2ZSBzZXIgdXNhZG8uIEVzdGUgb3BlcmFuZG8g6SBvcGNpb25hbC4gU2UgZm9yIGZvcm5lY2lkbw0KK2FvIHNlbGVjaW9uYXIgdW0gY29udGV4dG8gcXVlIGrhIHRlbSB1bSB07XR1bG8sIGVudONvIG9zIGRvaXMgZGV2ZW0NCitjb2luY2lkaXIuQ29udGV4dG9zIG5vbWVhZG8gauEgdGVtIHTtdHVsb3MgaW50ZXJuYW1lbnRlIGF0cmlide1kb3MuIENvbnRleHRvcyBudW3pcmljb3MNCitz428gaW5pY2lhbG1lbnRlIGNyaWFkb3Mgc2VtIHTtdHVsb3MuPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczsNCittc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5VbSBjb250ZXh0byDpIGNyaWFkbyBhDQorcHJpbWVpcmEgdmV6IHF1ZSBlbGUg6SBzZWxlY2lvbmFkby4gUG9kZSBzZXIgcmUtc2VsZWNpb25hZG8gcXVhbHF1ZXIgbvptZXJvIGRlDQordmV6ZXMgZGVwb2lzIGRpc3NvLjwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6DQorIkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD4mbmJzcDs8L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+VG9kYXMgYXMgZGVmaW5p5/Vlcw0KK3N1YnNlcfxlbnRlcyBhdOkgYSBwcvN4aW1hIGRpcmV0aXZhIGNvbnRleHQgb3Ugbm8gZmluYWwgZG8gY29ycmVudGUgbu12ZWwgZGUNCitpbmNsdWlyIHPjbyBjcmlhZGFzIGRlbnRybyBkbyBjb250ZXh0byBzZWxlY2lvbmFkby4gTyBjb250ZXh0byBpbmljaWFsIGRlIG7tdmVsDQorc3VwZXJpb3IgZGEgdGFiZWxhIGNoYXZlIOkgcGFkcuNvLiBPIGNvbnRleHRvIGluaWNpYWwgaW5jbHXtZG8gZW0gdW1hIHN1YnRhYmVsYQ0KK2NoYXZlIOkgbyBjb250ZXh0byBxdWUgZm9pIHNlbGVjaW9uYWRvIHF1YW5kbyBlbGUgZm9pIGluY2x17WRvLiBDb250ZXh0b3MgZGUNCittdWRhbudhcyBpbmNsde1kb3MgZGVudHJvIGRlIHN1YnRhYmVsYXMgY2hhdmVzIG7jbyBhZmV0YW0gbyBjb250ZXh0byBkYSBtZXNhLA0KK2luY2x1aW5kbyB0YWJlbGEgY2hhdmUgb3Ugc3VidGFiZWxhLjwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7DQorbXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD4mbmJzcDs8L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+U2UgdW0gY29udGV4dG8gdGVtIHVtDQordO10dWxvICh0b2RvcyBvcyBjb250ZXh0b3Mgbm9tZWFkb3MgZSBvcyBjb250ZXh0b3MgbnVt6XJpY28gcGFyYSBvIHF1YWwgbw0KK29wZXJhbmRvIHRpdGxlIGZvaSBmb3JuZWNpZG8pLCBlbnTjbyDpIHBlcnNpc3RlbnRlKi4gUXVhbmRvIHVtIGV2ZW50by1jaGF2ZSBmYXoNCitjb20gdW0gY29udGV4dG8gZGUgcGVyc2lzdOpuY2lhIHNlciBhdGl2YWRvLCBlc3NlIGNvbnRleHRvIGF0dWFsIHBlcm1hbmVjZSBhdOkNCitxdWUgdW0gZXZlbnRvIHBvc3RlcmlvciBjaGF2ZSBmYXogdW0gY29udGV4dG8gZGlmZXJlbnRlIHBlcnNpc3RlbnRlIHNlcg0KK2F0aXZhZG8uPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5TZSB1bSBjb250ZXh0byBu428gdGVtIHVtDQordO10dWxvIChvcyBjb250ZXh0b3MgbnVt6XJpY29zIHBhcmEgb3MgcXVhaXMgbyBvcGVyYW5kbyB0aXRsZSBu428gZm9pDQorZm9ybmVjaWRvKSwgZW50428gZWxlIOkgdGVtcG9y4XJpby4gUXVhbmRvIHVtIGV2ZW50byBjaGF2ZSBwcm92b2NhIHVtIGNvbnRleHRvDQordGVtcG9y4XJpbyBhIHNlciBhdGl2YWRvLCBlc3NlIGNvbnRleHRvIHPzIOkgdXNhZG8gcGFyYSBpbnRlcnByZXRhciBvIGV2ZW50bw0KK2NoYXZlIG1haXMgcHLzeGltby48L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5Og0KKyJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPkV4ZW1wbG9zOjwvc3Bhbj48c3Bhbg0KK3N0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0IHN0eWxlPSd0ZXh0LWluZGVudDozNS40cHQnPjxzcGFuIGxhbmc9RU4tVVMNCitzdHlsZT0nZm9udC1zaXplOjExLjBwdDttc28tYW5zaS1sYW5ndWFnZTpFTi1VUyc+tzwvc3Bhbj48c3BhbiBsYW5nPUVOLVVTDQorc3R5bGU9J2ZvbnQtc2l6ZTo3LjBwdDtmb250LWZhbWlseToiVGltZXMgTmV3IFJvbWFuIjttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciOw0KK21zby1hbnNpLWxhbmd1YWdlOkVOLVVTJz4gPC9zcGFuPjxzcGFuIGxhbmc9RU4tVVMgc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQ7DQorbXNvLWFuc2ktbGFuZ3VhZ2U6RU4tVVMnPmNvbnRleHQgbWVudTwvc3Bhbj48c3BhbiBsYW5nPUVOLVVTIHN0eWxlPSdmb250LWZhbWlseToNCitUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciO21zby1hbnNpLWxhbmd1YWdlOkVOLVVTJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIGxhbmc9RU4tVVMgc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5Og0KKyJDb3VyaWVyIE5ldyI7bXNvLWFuc2ktbGFuZ3VhZ2U6RU4tVVMnPjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQgc3R5bGU9J3RleHQtaW5kZW50OjM1LjRwdCc+PHNwYW4gbGFuZz1FTi1VUw0KK3N0eWxlPSdmb250LXNpemU6MTEuMHB0O21zby1hbnNpLWxhbmd1YWdlOkVOLVVTJz63PC9zcGFuPjxzcGFuIGxhbmc9RU4tVVMNCitzdHlsZT0nZm9udC1zaXplOjcuMHB0O2ZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyI7DQorbXNvLWFuc2ktbGFuZ3VhZ2U6RU4tVVMnPiA8L3NwYW4+PHNwYW4gbGFuZz1FTi1VUyBzdHlsZT0nZm9udC1zaXplOjExLjBwdDsNCittc28tYW5zaS1sYW5ndWFnZTpFTi1VUyc+Y29udGV4dCAxIEJyYWlsbGUgSW5wdXQ8L3NwYW4+PHNwYW4gbGFuZz1FTi1VUw0KK3N0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciO21zby1hbnNpLWxhbmd1YWdlOg0KK0VOLVVTJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIGxhbmc9RU4tVVMgc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5Og0KKyJDb3VyaWVyIE5ldyI7bXNvLWFuc2ktbGFuZ3VhZ2U6RU4tVVMnPjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQgc3R5bGU9J3RleHQtaW5kZW50OjM1LjRwdCc+PHNwYW4gbGFuZz1FTi1VUw0KK3N0eWxlPSdmb250LXNpemU6MTEuMHB0O21zby1hbnNpLWxhbmd1YWdlOkVOLVVTJz63PC9zcGFuPjxzcGFuIGxhbmc9RU4tVVMNCitzdHlsZT0nZm9udC1zaXplOjcuMHB0O2ZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyI7DQorbXNvLWFuc2ktbGFuZ3VhZ2U6RU4tVVMnPiA8L3NwYW4+PHNwYW4gbGFuZz1FTi1VUyBzdHlsZT0nZm9udC1zaXplOjExLjBwdDsNCittc28tYW5zaS1sYW5ndWFnZTpFTi1VUyc+Y29udGV4dCAyPC9zcGFuPjxzcGFuIGxhbmc9RU4tVVMgc3R5bGU9J2ZvbnQtZmFtaWx5Og0KK1RpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyI7bXNvLWFuc2ktbGFuZ3VhZ2U6RU4tVVMnPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gbGFuZz1FTi1VUyBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6DQorIkNvdXJpZXIgTmV3Ijttc28tYW5zaS1sYW5ndWFnZTpFTi1VUyc+PGJyPg0KKzwvc3Bhbj48c3BhbiBsYW5nPUVOLVVTIHN0eWxlPSdmb250LXNpemU6MTEuMHB0O21zby1hbnNpLWxhbmd1YWdlOkVOLVVTJz42LjQuMS40DQorPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5EaXJlY3RpdmEgZGUgT2N1bHRhcjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPkVzcGVjaWZpY2Egc2UgZGVzZWphIG91DQorbuNvIGNlcnRhcyBkZWZpbmnn9WVzICh2ZXIgYXMgZGlyZXRpdmFzLCBob3RrZXksIG1hcCwgZSBzdXBlcmltcG9zZSkgZSBub3Rhcw0KKyh2ZXIgYSBkaXJldGl2YSBub3RlKSBzZXLjbyBpbmNsde1kYXMgbm8gdGV4dG8gZGEgdGFiZWxhIGRlIGNoYXZlIGRlIGFqdWRhLjwvc3Bhbj48c3Bhbg0KK3N0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0IHN0eWxlPSd0ZXh0LWluZGVudDozNS40cHQnPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5oaWRlDQorc3RhdGU8L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQgc3R5bGU9J3RleHQtaW5kZW50OjM1LjRwdCc+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPnN0YXRlPC9zcGFuPjxzcGFuDQorc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQgc3R5bGU9J21hcmdpbi1sZWZ0OjM1LjRwdDt0ZXh0LWluZGVudDozNS40cHQnPjxzcGFuDQorc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPlVtYSBkZXNzYXMgcGFsYXZyYXMtY2hhdmVzOjwvc3Bhbj48c3Bhbg0KK3N0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0IHN0eWxlPSdtYXJnaW4tbGVmdDozNS40cHQ7dGV4dC1pbmRlbnQ6MzUuNHB0Jz48c3Bhbg0KK3N0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0IHN0eWxlPSdtYXJnaW4tbGVmdDo3MC44cHQnPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5vbjwvc3Bhbj48c3Bhbg0KK3N0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0IHN0eWxlPSdtYXJnaW4tbGVmdDozNS40cHQ7dGV4dC1pbmRlbnQ6MzUuNHB0Jz48c3Bhbg0KK3N0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5Fc3TjbyBleGNsde1kb3MuPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczsNCittc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0IHN0eWxlPSdtYXJnaW4tbGVmdDozNS40cHQ7dGV4dC1pbmRlbnQ6MzUuNHB0Jz48c3Bhbg0KK3N0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5vZmY8L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5Og0KKyJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQgc3R5bGU9J21hcmdpbi1sZWZ0OjM1LjRwdDt0ZXh0LWluZGVudDozNS40cHQnPjxzcGFuDQorc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPkVsZXMgZXN0428gaW5jbHXtZG9zLjwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6DQorVGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD4mbmJzcDs8L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+TyBlc3RhZG8gZXNwZWNpZmljYWRvIHNlDQorYXBsaWNhIGFzIHRvZGFzIGFzIGRlZmluaef1ZXMgZSBub3RhcyBzdWJzZXH8ZW50ZXMgYXTpIGEgcHLzeGltYSBkaXJldGl2YSBoaWRlDQorb3UgbyBmaW0gZG8gYXR1YWwgbu12ZWwgZGUgaW5jbHVpci4gTyBlc3RhZG8gaW5pY2lhbCBkYSB0YWJlbGEgY2hhdmUgZGUgbu12ZWwNCitzdXBlcmlvciDpIG9mZi4gTyBlc3RhZG8gaW5pY2lhbCBpbmNsde1kbyBlbSB1bWEgc3VidGFiZWxhIGNoYXZlIOkgbyBlc3RhZG8gcXVlDQorZm9pIHNlbGVjaW9uYWRvIHF1YW5kbyBlbGUgZm9pIGluY2x17WRvLiBNdWRhbudhcyBkZSBlc3RhZG8gaW5jbHXtZG9zIGRlbnRybyBkZQ0KK3VtYSBzdWJ0YWJlbGFzIGNoYXZlIG7jbyBhZmV0YW0gbyBlc3RhZG8gaW5jbHVpbmRvIG5hIHRhYmVsYSBjaGF2ZSBvdQ0KK3N1YnRhYmVsYS48L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPkV4ZW1wbG86PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD4mbmJzcDs8L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dCBzdHlsZT0ndGV4dC1pbmRlbnQ6MzUuNHB0Jz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+tzwvc3Bhbj48c3Bhbg0KK3N0eWxlPSdmb250LXNpemU6Ny4wcHQ7Zm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+DQorJm5ic3A7PC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5oaWRlIG9uPC9zcGFuPjxzcGFuDQorc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxicj4NCis8L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPjYuNC4xLjUgRGlyZXRpdmEgZGUgSG90a2V5PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD4mbmJzcDs8L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+VmluY3VsYSBvcyBldmVudG9zIHByZXNzIGUNCityZWxlYXNlIGRlIHVtYSB0ZWNsYSBlc3BlY+1maWNhIHBhcmEgZG9pcyBjb21hbmRvcyBzZXBhcmFkb3MgQlJMVFRZLiBPcw0KK3ZpbmN1bG9zIHPjbyBkZWZpbmlkYXMgZGVudHJvIGRvIGNvbnRleHRvIGF0dWFsLjwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6DQorVGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dCBzdHlsZT0nbWFyZ2luLWxlZnQ6MzUuNHB0Jz48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7DQorbXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PGJyPg0KKzwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+aG90a2V5IGtleSBwcmVzcyByZWxlYXNlPC9zcGFuPjxzcGFuDQorc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQgc3R5bGU9J3RleHQtaW5kZW50OjM1LjRwdCc+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPmtleTwvc3Bhbj48c3Bhbg0KK3N0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0IHN0eWxlPSd0ZXh0LWluZGVudDozNS40cHQnPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5PDQorbm9tZSBkYSB0ZWNsYSBxdWUgc2Vy4SBsaW1pdGFkYS48L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzOw0KK21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQgc3R5bGU9J3RleHQtaW5kZW50OjM1LjRwdCc+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPnByZXNzPC9zcGFuPjxzcGFuDQorc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQgc3R5bGU9J21hcmdpbi1sZWZ0OjM1LjRwdCc+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPk8NCitub21lIGRvIGNvbWFuZG8gQlJMVFRZIHF1ZSBkZXZlIHNlciBleGVjdXRhZG8gc2VtcHJlIHF1ZSBhIHRlY2xhIOkgcHJlc3Npb25hZGEuPC9zcGFuPjxzcGFuDQorc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQgc3R5bGU9J3RleHQtaW5kZW50OjM1LjRwdCc+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPnJlbGVhc2U8L3NwYW4+PHNwYW4NCitzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dCBzdHlsZT0nbWFyZ2luLWxlZnQ6MzUuNHB0Jz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+Tw0KK25vbWUgZG8gY29tYW5kbyBCUkxUVFkgcXVlIGRldmUgc2VyIGV4ZWN1dGFkbyBzZW1wcmUgcXVlIGEgdGVjbGEg6SBsaWJlcmFkYS48L3NwYW4+PHNwYW4NCitzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD4mbmJzcDs8L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+TW9kaWZpY2Fkb3JlcyBwb2RlbSBzZXINCithY3Jlc2NlbnRhZG9zIGFvcyBub21lcyBkZSBjb21hbmRvLiBWZWphIG8gb3BlcmFuZG8gY29tbWFuZCBkYSBkaXJldGl2YSBiaW5kDQorcGFyYSBtYWlzIGRldGFsaGVzLjwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6DQorIkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD4mbmJzcDs8L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+RXNwZWNpZmlxdWUgTk9PUCBzZSBuZW5odW0NCitjb21hbmRvIHNlcuEgZXhlY3V0YWRvLiBFc3BlY2lmaWNhbmRvIE5PT1AgcGFyYSBhbWJvcyBvcyBjb21hbmRvcyBlZmV0aXZhbWVudGUNCitkZXNhdGl2YSBhIGNoYXZlLjwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6DQorIkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBsYW5nPUVOLVVTIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToNCisiQ291cmllciBOZXciO21zby1hbnNpLWxhbmd1YWdlOkVOLVVTJz48YnI+DQorPC9zcGFuPjxzcGFuIGxhbmc9RU4tVVMgc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQ7bXNvLWFuc2ktbGFuZ3VhZ2U6RU4tVVMnPkV4ZW1wbG9zOjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gbGFuZz1FTi1VUyBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6DQorIkNvdXJpZXIgTmV3Ijttc28tYW5zaS1sYW5ndWFnZTpFTi1VUyc+PG86cD4mbmJzcDs8L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dCBzdHlsZT0ndGV4dC1pbmRlbnQ6MzUuNHB0Jz48c3BhbiBsYW5nPUVOLVVTDQorc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQ7bXNvLWFuc2ktbGFuZ3VhZ2U6RU4tVVMnPrc8L3NwYW4+PHNwYW4gbGFuZz1FTi1VUw0KK3N0eWxlPSdmb250LXNpemU6Ny4wcHQ7Zm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3IjsNCittc28tYW5zaS1sYW5ndWFnZTpFTi1VUyc+IDwvc3Bhbj48c3BhbiBsYW5nPUVOLVVTIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Ow0KK21zby1hbnNpLWxhbmd1YWdlOkVOLVVTJz5ob3RrZXkgS2V5MSBDU1JWSVMrb2ZmIENTUlZJUytvbjwvc3Bhbj48c3Bhbg0KK2xhbmc9RU4tVVMgc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyI7DQorbXNvLWFuc2ktbGFuZ3VhZ2U6RU4tVVMnPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gbGFuZz1FTi1VUyBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6DQorIkNvdXJpZXIgTmV3Ijttc28tYW5zaS1sYW5ndWFnZTpFTi1VUyc+PG86cD4mbmJzcDs8L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dCBzdHlsZT0ndGV4dC1pbmRlbnQ6MzUuNHB0Jz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+tzwvc3Bhbj48c3Bhbg0KK3N0eWxlPSdmb250LXNpemU6Ny4wcHQ7Zm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+DQorPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5ob3RrZXkgS2V5MiBOT09QIE5PT1A8L3NwYW4+PHNwYW4NCitzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PGJyPg0KKzwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+Ni40LjEuNiBEaXJldGl2YSBJZktleTxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPkNvbmRpY2lvbmFsbWVudGUgcHJvY2Vzc28NCit1bWEgZGlyZXRpdmEgZGEgdGFiZWxhIGNoYXZlIHNvbWVudGUgc2UgbyBhcGFyZWxobyB0ZW0gdW1hIGNoYXZlIHBhcnRpY3VsYXIuPC9zcGFuPjxzcGFuDQorc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQgc3R5bGU9J21hcmdpbi1sZWZ0OjM1LjRwdCc+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzOw0KK21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxicj4NCis8L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPmlma2V5IGtleSBkaXJlY3RpdmU8L3NwYW4+PHNwYW4NCitzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dCBzdHlsZT0ndGV4dC1pbmRlbnQ6MzUuNHB0Jz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+PG86cD4mbmJzcDs8L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dCBzdHlsZT0nbWFyZ2luLWxlZnQ6MzUuNHB0Jz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+a2V5PC9zcGFuPjxzcGFuDQorc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQgc3R5bGU9J3RleHQtaW5kZW50OjM1LjRwdCc+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPk8NCitub21lIGRhIGNoYXZlLCBjdWphIGRpc3BvbmliaWxpZGFkZSBlc3ThIGEgc2VyIHRlc3RhZG8uPC9zcGFuPjxzcGFuDQorc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQgc3R5bGU9J3RleHQtaW5kZW50OjM1LjRwdCc+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPmRpcmVjdGl2ZTwvc3Bhbj48c3Bhbg0KK3N0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5BIGRpcmV0aXZhIGRhIHRhYmVsYSBjaGF2ZQ0KK3F1ZSBkZXZlIHNlciBjb25kaWNpb25hbG1lbnRlIHByb2Nlc3NhZG8uPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczsNCittc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIGxhbmc9RU4tVVMgc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5Og0KKyJDb3VyaWVyIE5ldyI7bXNvLWFuc2ktbGFuZ3VhZ2U6RU4tVVMnPjxicj4NCis8L3NwYW4+PHNwYW4gbGFuZz1FTi1VUyBzdHlsZT0nZm9udC1zaXplOjExLjBwdDttc28tYW5zaS1sYW5ndWFnZTpFTi1VUyc+RXhlbXBsb3M6PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBsYW5nPUVOLVVTIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToNCisiQ291cmllciBOZXciO21zby1hbnNpLWxhbmd1YWdlOkVOLVVTJz48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0IHN0eWxlPSd0ZXh0LWluZGVudDozNS40cHQnPjxzcGFuIGxhbmc9RU4tVVMNCitzdHlsZT0nZm9udC1zaXplOjExLjBwdDttc28tYW5zaS1sYW5ndWFnZTpFTi1VUyc+tzwvc3Bhbj48c3BhbiBsYW5nPUVOLVVTDQorc3R5bGU9J2ZvbnQtc2l6ZTo3LjBwdDtmb250LWZhbWlseToiVGltZXMgTmV3IFJvbWFuIjttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciOw0KK21zby1hbnNpLWxhbmd1YWdlOkVOLVVTJz4gPC9zcGFuPjxzcGFuIGxhbmc9RU4tVVMgc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQ7DQorbXNvLWFuc2ktbGFuZ3VhZ2U6RU4tVVMnPmlma2V5IEtleTEgaWZrZXkgS2V5MiBiaW5kIEtleTErS2V5MiBIT01FPC9zcGFuPjxzcGFuDQorbGFuZz1FTi1VUyBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3IjsNCittc28tYW5zaS1sYW5ndWFnZTpFTi1VUyc+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBsYW5nPUVOLVVTIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToNCisiQ291cmllciBOZXciO21zby1hbnNpLWxhbmd1YWdlOkVOLVVTJz48YnI+DQorPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz42LjQuMS43IERpcmV0aXZhIEluY2x1ZGU8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5Qcm9jZXNzYSBhcyBkaXJldGl2YXMNCitkZW50cm8gZGUgdW1hIHN1YnRhYmVsYSBjaGF2ZS4gySByZWN1cnNpdmEsIG8gcXVlIHNpZ25pZmljYSBxdWUgcXVhbHF1ZXINCitzdWJ0YWJlbGEgY2hhdmUgcG9kZSBzZXIgaW5jbHVpciBhaW5kYSBlbSBvdXRyYSBzdWJ0YWJlbGEgY2hhdmUuIEN1aWRhZG9zIGRldmVtDQorc2VyIHRvbWFkb3MgcGFyYSBnYXJhbnRpciBxdWUgJnF1b3Q7aW5jbHVlbSBsb29wJnF1b3Q7IG7jbyBzZWphIGNyaWFkby48L3NwYW4+PHNwYW4NCitzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD4mbmJzcDs8L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dCBzdHlsZT0ndGV4dC1pbmRlbnQ6MzUuNHB0Jz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+aW5jbHVkZQ0KK2ZpbGU8L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQgc3R5bGU9J3RleHQtaW5kZW50OjM1LjRwdCc+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPmZpbGU8L3NwYW4+PHNwYW4NCitzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dCBzdHlsZT0nbWFyZ2luLWxlZnQ6MzUuNHB0Jz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+QQ0KK3N1YnRhYmVsYSBjaGF2ZSBxdWUgc2Vy4SBpbmNsde1kYS4gUG9kZSBzZXIgdW0gY2FtaW5obyByZWxhdGl2byBvdSBhYnNvbHV0by4gU2UNCityZWxhdGl2byBlc3ThIGFuY29yYWRvIG5vIGRpcmV083JpbyBxdWUgY29udOltIGEgaW5jbHVpbmRvIGEgdGFiZWxhIGNoYXZlIG91DQorc3VidGFiZWxhLjwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD4mbmJzcDs8L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBsYW5nPUVOLVVTIHN0eWxlPSdmb250LXNpemU6MTEuMHB0O21zby1hbnNpLWxhbmd1YWdlOg0KK0VOLVVTJz5FeGVtcGxvczo8L3NwYW4+PHNwYW4gbGFuZz1FTi1VUyBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6DQorIkNvdXJpZXIgTmV3Ijttc28tYW5zaS1sYW5ndWFnZTpFTi1VUyc+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBsYW5nPUVOLVVTIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToNCisiQ291cmllciBOZXciO21zby1hbnNpLWxhbmd1YWdlOkVOLVVTJz48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0IHN0eWxlPSdtYXJnaW4tbGVmdDozNi4wcHQ7dGV4dC1pbmRlbnQ6LTE4LjBwdDttc28tbGlzdDoNCitsNSBsZXZlbDEgbGZvMTM7dGFiLXN0b3BzOmxpc3QgMzYuMHB0Jz48IVtpZiAhc3VwcG9ydExpc3RzXT48c3BhbiBsYW5nPUVOLVVTDQorc3R5bGU9J2ZvbnQtZmFtaWx5OldpbmdkaW5nczttc28tZmFyZWFzdC1mb250LWZhbWlseTpXaW5nZGluZ3M7bXNvLWJpZGktZm9udC1mYW1pbHk6DQorV2luZ2RpbmdzO21zby1hbnNpLWxhbmd1YWdlOkVOLVVTJz48c3BhbiBzdHlsZT0nbXNvLWxpc3Q6SWdub3JlJz6nPHNwYW4NCitzdHlsZT0nZm9udDo3LjBwdCAiVGltZXMgTmV3IFJvbWFuIic+Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7DQorPC9zcGFuPjwvc3Bhbj48L3NwYW4+PCFbZW5kaWZdPjxzcGFuIGxhbmc9RU4tVVMgc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQ7DQorbXNvLWFuc2ktbGFuZ3VhZ2U6RU4tVVMnPmluY2x1ZGUgY29tbW9uLmt0aTwvc3Bhbj48c3BhbiBsYW5nPUVOLVVTDQorc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyI7bXNvLWFuc2ktbGFuZ3VhZ2U6DQorRU4tVVMnPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQgc3R5bGU9J21hcmdpbi1sZWZ0OjE4LjBwdCc+PHNwYW4gbGFuZz1FTi1VUw0KK3N0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciO21zby1hbnNpLWxhbmd1YWdlOg0KK0VOLVVTJz48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0IHN0eWxlPSdtYXJnaW4tbGVmdDozNi4wcHQ7dGV4dC1pbmRlbnQ6LTE4LjBwdDttc28tbGlzdDoNCitsNSBsZXZlbDEgbGZvMTM7dGFiLXN0b3BzOmxpc3QgMzYuMHB0Jz48IVtpZiAhc3VwcG9ydExpc3RzXT48c3BhbiBsYW5nPUVOLVVTDQorc3R5bGU9J2ZvbnQtZmFtaWx5OldpbmdkaW5nczttc28tZmFyZWFzdC1mb250LWZhbWlseTpXaW5nZGluZ3M7bXNvLWJpZGktZm9udC1mYW1pbHk6DQorV2luZ2RpbmdzO21zby1hbnNpLWxhbmd1YWdlOkVOLVVTJz48c3BhbiBzdHlsZT0nbXNvLWxpc3Q6SWdub3JlJz6nPHNwYW4NCitzdHlsZT0nZm9udDo3LjBwdCAiVGltZXMgTmV3IFJvbWFuIic+Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7DQorPC9zcGFuPjwvc3Bhbj48L3NwYW4+PCFbZW5kaWZdPjxzcGFuIGxhbmc9RU4tVVMgc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQ7DQorbXNvLWFuc2ktbGFuZ3VhZ2U6RU4tVVMnPmluY2x1ZGUgL3BhdGgvdG8vbXkva2V5cy5rdGk8L3NwYW4+PHNwYW4gbGFuZz1FTi1VUw0KK3N0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciO21zby1hbnNpLWxhbmd1YWdlOg0KK0VOLVVTJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48YnI+DQorPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz42LjQuMS44IERpcmV0aXZhIGRlIE1hcGE8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5NYXBlaWEgdW1hIHRlY2xhIHBhcmEgdW1hDQorZnVu5+NvIGRvIHRlY2xhZG8gPHN0MTpQZXJzb25OYW1lIFByb2R1Y3RJRD0iZW0gQnJhaWxsZS4gTyIgdzpzdD0ib24iPmVtDQorIGJyYWlsbGUuIE88L3N0MTpQZXJzb25OYW1lPiBtYXBlYW1lbnRvIOkgZGVmaW5pZG8gZGVudHJvIGRvIGNvbnRleHRvIGF0dWFsLjwvc3Bhbj48c3Bhbg0KK3N0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0IHN0eWxlPSdtYXJnaW4tbGVmdDozNS40cHQnPjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczsNCittc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48YnI+DQorPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5tYXAga2V5IGZ1bmN0aW9uPC9zcGFuPjxzcGFuDQorc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQgc3R5bGU9J3RleHQtaW5kZW50OjM1LjRwdCc+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQgc3R5bGU9J3RleHQtaW5kZW50OjM1LjRwdCc+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPmtleTwvc3Bhbj48c3Bhbg0KK3N0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0IHN0eWxlPSdtYXJnaW4tbGVmdDozNS40cHQnPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5PDQorbm9tZSBkYSB0ZWNsYSBxdWUgc2Vy4SBtYXBlYWRhLiBNYWlzIGRlIHVtYSB0ZWNsYSBwb2RlIHNlciBtYXBlYWRhIHBhcmEgYSBtZXNtYQ0KK2Z1bufjbyB0ZWNsYWRvIGVtIGJyYWlsbGUuPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToNCisiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0IHN0eWxlPSd0ZXh0LWluZGVudDozNS40cHQnPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5mdW5jdGlvbjwvc3Bhbj48c3Bhbg0KK3N0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0IHN0eWxlPSdtYXJnaW4tbGVmdDozNS4yNXB0Jz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+Tw0KK25vbWUgZGEgZnVu5+NvIGRvIHRlY2xhZG8gPHN0MTpQZXJzb25OYW1lIFByb2R1Y3RJRD0iZW0gYnJhaWxsZS4gUG9kZSIgdzpzdD0ib24iPmVtDQorIGJyYWlsbGUuIFBvZGU8L3N0MTpQZXJzb25OYW1lPiBzZXIgdW1hIGRhcyBzZWd1aW50ZXMgcGFsYXZyYXM6PC9zcGFuPjxzcGFuDQorc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQgc3R5bGU9J3RleHQtaW5kZW50OjM1LjI1cHQnPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5ET1QxPC9zcGFuPjxzcGFuDQorc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQgc3R5bGU9J3RleHQtaW5kZW50OjM1LjI1cHQnPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5PDQorcGFkcuNvIGJyYWlsbGUgZG8gcG9udG8gc3VwZXJpb3IgZXNxdWVyZG8uPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczsNCittc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0IHN0eWxlPSd0ZXh0LWluZGVudDozNS4yNXB0Jz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+RE9UMjwvc3Bhbj48c3Bhbg0KK3N0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0IHN0eWxlPSd0ZXh0LWluZGVudDozNS4yNXB0Jz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+Tw0KK3BhZHLjbyBicmFpbGxlIGRvIHBvbnRvIGRvIG1laW8gZXNxdWVyZG8uPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczsNCittc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0IHN0eWxlPSd0ZXh0LWluZGVudDozNS4yNXB0Jz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+RE9UMzwvc3Bhbj48c3Bhbg0KK3N0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0IHN0eWxlPSd0ZXh0LWluZGVudDozNS4yNXB0Jz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+Tw0KK3BhZHLjbyBicmFpbGxlIGRvIHBvbnRvIGluZmVyaW9yIGVzcXVlcmRvLjwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7DQorbXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD4mbmJzcDs8L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dCBzdHlsZT0ndGV4dC1pbmRlbnQ6MzUuMjVwdCc+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPkRPVDQ8L3NwYW4+PHNwYW4NCitzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PHNwYW4NCitzdHlsZT0nbXNvLXRhYi1jb3VudDoxJz6goKCgoKCgoKCgoKCgoKAgPC9zcGFuPjwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1zaXplOg0KKzExLjBwdCc+TyBwYWRy428gYnJhaWxsZSBkbyBwb250byBzdXBlcmlvciBkaXJlaXRvLjwvc3Bhbj48c3Bhbg0KK3N0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0IHN0eWxlPSd0ZXh0LWluZGVudDozNS40cHQnPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5ET1Q1PC9zcGFuPjxzcGFuDQorc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxzcGFuDQorc3R5bGU9J21zby10YWItY291bnQ6MSc+oKCgoKCgoKCgoKCgoKCgIDwvc3Bhbj48L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToNCisxMS4wcHQnPk8gcGFkcuNvIGJyYWlsbGUgZG8gcG9udG8gZG8gbWVpbyBkaXJlaXRvLjwvc3Bhbj48c3Bhbg0KK3N0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0IHN0eWxlPSd0ZXh0LWluZGVudDozNS40cHQnPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5ET1Q2PC9zcGFuPjxzcGFuDQorc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxzcGFuDQorc3R5bGU9J21zby10YWItY291bnQ6MSc+oKCgoKCgoKCgoKCgoKCgIDwvc3Bhbj48L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToNCisxMS4wcHQnPk8gcGFkcuNvIGJyYWlsbGUgZG8gcG9udG8gaW5mZXJpb3IgZGlyZWl0by48L3NwYW4+PHNwYW4NCitzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD4mbmJzcDs8L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dCBzdHlsZT0ndGV4dC1pbmRlbnQ6MzUuNHB0Jz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+RE9UNzwvc3Bhbj48c3Bhbg0KK3N0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48c3Bhbg0KK3N0eWxlPSdtc28tdGFiLWNvdW50OjEnPqCgoKCgoKCgoKCgoKCgoCA8L3NwYW4+PC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LXNpemU6DQorMTEuMHB0Jz5PIHBvbnRvIGJyYWlsbGUgZG8gY29tcHV0YWRvciBpbmZlcmlvciBlc3F1ZXJkby48L3NwYW4+PHNwYW4NCitzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD4mbmJzcDs8L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dCBzdHlsZT0ndGV4dC1pbmRlbnQ6MzUuNHB0Jz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+RE9UODwvc3Bhbj48c3Bhbg0KK3N0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48c3Bhbg0KK3N0eWxlPSdtc28tdGFiLWNvdW50OjEnPqCgoKCgoKCgoKCgoKCgoCA8L3NwYW4+PC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LXNpemU6DQorMTEuMHB0Jz5PIHBvbnRvIGJyYWlsbGUgZG8gY29tcHV0YWRvciBpbmZlcmlvciBkaXJlaXRvLjwvc3Bhbj48c3Bhbg0KK3N0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0IHN0eWxlPSd0ZXh0LWluZGVudDozNS40cHQnPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5TUEFDRTwvc3Bhbj48c3Bhbg0KK3N0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48c3Bhbg0KK3N0eWxlPSdtc28tdGFiLWNvdW50OjEnPqCgoKCgoKCgoKCgoKCgoCA8L3NwYW4+PC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LXNpemU6DQorMTEuMHB0Jz5BIGJhcnJhIGRlIGVzcGHnby48L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5Og0KKyJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQgc3R5bGU9J3RleHQtaW5kZW50OjM1LjRwdCc+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPlNISUZUPC9zcGFuPjxzcGFuDQorc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQgc3R5bGU9J3RleHQtaW5kZW50OjM1LjRwdCc+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPkENCit0ZWNsYSBzaGlmdC48L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQgc3R5bGU9J3RleHQtaW5kZW50OjM1LjRwdCc+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPlVQUEVSQ0FTRTwvc3Bhbj48c3Bhbg0KK3N0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0IHN0eWxlPSdtYXJnaW4tbGVmdDozNS40cHQnPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5TZQ0KK3VtYSBsZXRyYSBtaW76c2N1bGEgZXN04SBzZW5kbyBpbnNlcmlkbyBlbnTjbyB0cmFkdXppIHBhcmEgc2V1IGVxdWl2YWxlbnRlIGVtDQorbWFp+nNjdWxhcy48L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQgc3R5bGU9J3RleHQtaW5kZW50OjM1LjRwdCc+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPkNPTlRST0xFPC9zcGFuPjxzcGFuDQorc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxzcGFuDQorc3R5bGU9J21zby10YWItY291bnQ6MSc+oKCgoKCgoKCgoKCgoKCgIDwvc3Bhbj48L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToNCisxMS4wcHQnPkEgY2hhdmUgZGUgY29udHJvbGUuPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToNCisiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0IHN0eWxlPSd0ZXh0LWluZGVudDozNS40cHQnPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5NRVRBPC9zcGFuPjxzcGFuDQorc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxzcGFuDQorc3R5bGU9J21zby10YWItY291bnQ6MSc+oKCgoKCgoKCgoKCgoKCgIDwvc3Bhbj48L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToNCisxMS4wcHQnPkEgdGVjbGEgQWx0IGVzcXVlcmRhLjwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6DQorIkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD4mbmJzcDs8L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+U2UgYSBjb21iaW5h5+NvIGRlIHRlY2xhcw0KK2NvbnNpc3RlIGFwZW5hcyBkZSBjaGF2ZXMgcXVlIGZvcmFtIG1hcGVhZGFzIHBhcmEgZnVu5/VlcyBkbyB0ZWNsYWRvIGVtIGJyYWlsZSwNCitlIHNlIGVzc2FzIGZ1buf1ZXMgcXVhbmRvIGNvbWJpbmFkYXMgZm9ybWFtIHVtIGNvbWFuZG8gZGUgdGVjbGFkbyBicmFpbGxlDQorduFsaWRvLCBlbnTjbyBvIGNvbWFuZG8g6SBleGVjdXRhZG8gbG9nbyBxdWUgcXVhbHF1ZXIgdW1hIGRhcyB0ZWNsYXMg6Q0KK2xpYmVyYWRvLiBVbSBjb21hbmRvIGRlIHRlY2xhZG8gYnJhaWxsZSB24WxpZG8gZGV2ZSBpbmNsdWlyIG91IHF1YWxxdWVyDQorY29tYmluYefjbyBkb3MgcG9udG9zIGNoYXZlcyBvdSBhIGJhcnJhIGRlIGVzcGHnbyAobWFzIG7jbyBhbWJvcykuIFNlIHBlbG8NCittZW5vcyB1bSBwb250byBjaGF2ZSDpIGluY2x17WRvLCBlbnTjbyBhcyBmdW7n9WVzIGRvIHRlY2xhZG8gZW0gYnJhaWxsZQ0KK2VzcGVjaWZpY2Fkb3MgcGVsYXMgZGlyZXRpdmFzIHN1cGVyaW1wb3NlIGRlbnRybyBkbyBtZXNtbyBjb250ZXh0byB0YW1i6W0gZXN0428NCitpbXBsaWNpdGFtZW50ZSBpbmNsde1kb3MuPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToNCisiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5FeGVtcGxvczo8L3NwYW4+PHNwYW4NCitzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD4mbmJzcDs8L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dCBzdHlsZT0ndGV4dC1pbmRlbnQ6MzUuNHB0Jz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+tzwvc3Bhbj48c3Bhbg0KK3N0eWxlPSdmb250LXNpemU6Ny4wcHQ7Zm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+DQorPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5tYXAgS2V5MSBET1QxPC9zcGFuPjxzcGFuDQorc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxicj4NCis8L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPjYuNC4xLjkgRGlyZXRpdmEgTm90ZTwvc3Bhbj48c3Bhbg0KK3N0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5BZGljaW9uYSB1bWEgZXhwbGljYefjbw0KK3BlcnNvbi1yZWFkYWJsZSBwYXJhIG8gdGV4dG8gZGUgYWp1ZGEgZGEgdGFiZWxhIGNoYXZlcy4gQXMgbm90YXMgc+NvIHVzYWRhcywNCitwb3IgZXhlbXBsbywgcGFyYSBkZXNjcmV2ZXIgbyBwb3NpY2lvbmFtZW50bywgdGFtYW5ob3MgZSBmb3JtYXMgZGFzIHRlY2xhcyBkbw0KK2Rpc3Bvc2l0aXZvLjwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD4mbmJzcDs8L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dCBzdHlsZT0ndGV4dC1pbmRlbnQ6MzUuNHB0Jz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+bm90ZQ0KK3RleHQ8L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQgc3R5bGU9J3RleHQtaW5kZW50OjM1LjRwdCc+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPnRleHQ8L3NwYW4+PHNwYW4NCitzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dCBzdHlsZT0nbWFyZ2luLWxlZnQ6MzUuNHB0Jz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+QQ0KK2V4cGxpY2Hn428gcXVlIHNlcuEgYWRpY2lvbmFkYS4gRWxlIHBvZGUgY29udGVyIGVzcGHnb3MsIGUgZGV2ZSBzZXINCitncmFtYXRpY2FsbWVudGUgY29ycmV0YS48L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5Og0KKyJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPkNhZGEgbm90YSBlc3BlY2lmaWNhDQorZXhhdGFtZW50ZSB1bWEgbGluaGEgZGUgdGV4dG8gZXhwbGljYXRpdm8uIGVzcGHnbyDgIGVzcXVlcmRhIOkgdONvIGlnbm9yYWRvDQorcmVjdW8gbuNvIHBvZGUgc2VyIGVzcGVjaWZpY2Fkby48L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzOw0KK21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPk7jbyBo4SBsaW1pdGUgcGFyYSBvDQorbvptZXJvIGRlIG5vdGFzIHF1ZSBwb2RlbSBzZXIgZXNwZWNpZmljYWRhcy4gVG9kb3MgZWxlcyBlc3TjbyByZXVuaWRvcyBlDQorYXByZXNlbnRhZG9zIGVtIHVtIPpuaWNvIGJsb2NvIG5vIGlu7WNpbyBkbyB0ZXh0byBkZSBhanVkYSBkYSB0YWJlbGEgY2hhdmVzLjwvc3Bhbj48c3Bhbg0KK3N0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIGxhbmc9RU4tVVMgc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5Og0KKyJDb3VyaWVyIE5ldyI7bXNvLWFuc2ktbGFuZ3VhZ2U6RU4tVVMnPjxicj4NCis8L3NwYW4+PHNwYW4gbGFuZz1FTi1VUyBzdHlsZT0nZm9udC1zaXplOjExLjBwdDttc28tYW5zaS1sYW5ndWFnZTpFTi1VUyc+RXhlbXBsbzo8L3NwYW4+PHNwYW4NCitsYW5nPUVOLVVTIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciOw0KK21zby1hbnNpLWxhbmd1YWdlOkVOLVVTJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIGxhbmc9RU4tVVMgc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQ7bXNvLWFuc2ktbGFuZ3VhZ2U6DQorRU4tVVMnPm5vdGUgS2V5MSBpcyB0aGUgcm91bmQga2V5IGF0IHRoZSBmYXIgbGVmdCBvbiB0aGUgZnJvbnQgc3VyZmFjZS48L3NwYW4+PHNwYW4NCitsYW5nPUVOLVVTIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciOw0KK21zby1hbnNpLWxhbmd1YWdlOkVOLVVTJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48YnI+DQorPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz42LjQuMS4xMCBEaXJldGl2YSBkZSBzb2JyZXBvc2nn4288bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5JbmNsdWkgaW1wbGljaXRhbWVudGUgdW1hDQorZnVu5+NvIGRvIHRlY2xhZG8gc2VtcHJlIHF1ZSB1bSBjb21hbmRvIGRlIHRlY2xhZG8gYnJhaWxsZSBjb25zaXN0ZSBlbSBwZWxvDQorbWVub3MgdW0gZG90IOkgZXhlY3V0YWRvLiBBIGluY2x1c+NvIGltcGztY2l0YSDpIGRlZmluaWRhIGRlbnRybyBkbyBjb250ZXh0bw0KK2F0dWFsLiBRdWFscXVlciBu+m1lcm8gZGVsZXMgcG9kZSBzZXIgZXNwZWNpZmljYWRvLjwvc3Bhbj48c3Bhbg0KK3N0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0IHN0eWxlPSdtYXJnaW4tbGVmdDozNS40cHQnPjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczsNCittc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48YnI+DQorPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5zdXBlcmltcG9zZSBmdW5jdGlvbjwvc3Bhbj48c3Bhbg0KK3N0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0IHN0eWxlPSd0ZXh0LWluZGVudDozNS40cHQnPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5mdW5jdGlvbjwvc3Bhbj48c3Bhbg0KK3N0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0IHN0eWxlPSdtYXJnaW4tbGVmdDozNS40cHQnPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5PDQorbm9tZSBkYSBmdW7n428gZG8gdGVjbGFkbyBicmFpbGxlLiBWZWphIG8gb3BlcmFuZG8gZnVuY3Rpb24gZGEgZGlyZXRpdmEgbWFwDQorcGFyYSBkZXRhbGhlcy48L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxicj4NCis8L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPkV4ZW1wbG86PC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LWZhbWlseToNCitUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5zdXBlcmltcG9zZSBET1Q3PC9zcGFuPjxzcGFuDQorc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxicj4NCis8L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPjYuNC4xLjExIERpcmV0aXZhIFRpdGxlPC9zcGFuPjxzcGFuDQorc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPkFwcmVzZW50YSB1bSByZXN1bW8NCitwZXJzb24tcmVhZGFibGUgZG8gcHJvcPNzaXRvIGRhcyB0YWJlbGFzIGNoYXZlczwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6DQorVGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dCBzdHlsZT0nbWFyZ2luLWxlZnQ6MzUuNHB0Jz48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7DQorbXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PGJyPg0KKzwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+dGl0bGUgdGV4dDwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6DQorVGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dCBzdHlsZT0ndGV4dC1pbmRlbnQ6MzUuNHB0Jz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+dGV4dDwvc3Bhbj48c3Bhbg0KK3N0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0IHN0eWxlPSdtYXJnaW4tbGVmdDozNS4yNXB0Jz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+VW0NCityZXN1bW8gZGUgdW1hIGxpbmhhIGRlIGNvbW8gYSB0YWJlbGEgY2hhdmUg6SB1c2Fkby4gRWxlIHBvZGUgY29udGVyIGVzcGHnbywgZQ0KK2FzIGNvbnZlbuf1ZXMgZGUgY2FwaXRhbGl6YefjbyBwYWRy428gZGV2ZSBzZXIgdXNhZG8uPC9zcGFuPjxzcGFuDQorc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPk8gdO10dWxvIGRhIHRhYmVsYSBjaGF2ZQ0KK3BvZGUgc2VyIGVzcGVjaWZpY2FkbyBhcGVuYXMgdW1hIHZlei48L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzOw0KK21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gbGFuZz1FTi1VUyBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6DQorIkNvdXJpZXIgTmV3Ijttc28tYW5zaS1sYW5ndWFnZTpFTi1VUyc+PGJyPg0KKzwvc3Bhbj48c3BhbiBsYW5nPUVOLVVTIHN0eWxlPSdmb250LXNpemU6MTEuMHB0O21zby1hbnNpLWxhbmd1YWdlOkVOLVVTJz5FeGVtcGxvOjwvc3Bhbj48c3Bhbg0KK2xhbmc9RU4tVVMgc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyI7DQorbXNvLWFuc2ktbGFuZ3VhZ2U6RU4tVVMnPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gbGFuZz1FTi1VUyBzdHlsZT0nZm9udC1zaXplOjExLjBwdDttc28tYW5zaS1sYW5ndWFnZToNCitFTi1VUyc+dGl0bGUgQmluZGluZ3MgZm9yIEtleXBhZC1iYXNlZCBOYXZpZ2F0aW9uPC9zcGFuPjxzcGFuIGxhbmc9RU4tVVMNCitzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Ijttc28tYW5zaS1sYW5ndWFnZToNCitFTi1VUyc+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PGJyPg0KKzwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+Ni40LjIgUHJvcHJpZWRhZGVzIGRvIFRlY2xhZG88bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5PIHBhZHLjbyDpIHF1ZSB0b2RvcyBvcw0KK3RlY2xhZG9zIHPjbyBtb25pdG9yYWRvcy4gVW0gc3ViY29uanVudG8gZGUgdGVjbGFkb3MgcG9kZSBzZXIgc2VsZWNpb25hZG8gcG9yDQordW1hIG91IG1haXMgcHJvcHJpZWRhZGVzIHNlZ3VpbnRlcyAodmVqYSBhIG9w5+NvIGRlIGxpbmhhIGRlIGNvbWFuZG8glkssIGUgYQ0KK2RpcmV0aXZhIGRvIGFycXVpdm8gZGUgY29uZmlndXJh5+NvIGtleWJvYXJkLXByb3BlcnRpZXMpLjwvc3Bhbj48c3Bhbg0KK3N0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz50eXBlPC9zcGFuPjxzcGFuDQorc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPk8gdGlwbyBkZSBiYXJyYW1lbnRvLA0KK2VzcGVjaWZpY2FkbyBjb20gdW1hIGRhcyBzZWd1aW50ZXMgcGFsYXZyYXMtY2hhdmVzOiBhbnksIHBzMiwgdXNiLCBCbHVldG9vdGg8L3NwYW4+PHNwYW4NCitzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD4mbmJzcDs8L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+dmVuZG9yPC9zcGFuPjxzcGFuDQorc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPklkZW50aWZpY2Hn428gZG8gdmVuZGVkb3IsDQorZXNwZWNpZmljYWRvIGNvbSB1bSBpbnRlaXJvIGRlIDE2LWJpdHMgbuNvIHNpbmFsaXphZG8uPC9zcGFuPjxzcGFuDQorc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPnByb2R1Y3Q8L3NwYW4+PHNwYW4NCitzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+SWRlbnRpZmljYefjbyBkbyBwcm9kdXRvLA0KK2VzcGVjaWZpY2FkbyBjb20gdW0gaW50ZWlybyBkZSAxNi1iaXRzIG7jbyBzaW5hbGl6YWRvLjwvc3Bhbj48c3Bhbg0KK3N0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5PcyBpZGVudGlmaWNhZG9yZXMgdmVuZG9yDQorZSBwcm9kdWN0IHBvZGVtIHNlciBlc3BlY2lmaWNhZG9zIGVtIG5vdGHn428gZGVjaW1hbCAoc2VtIHByZWZpeG8pLCBvY3RhbCgNCitwcmVmaXhhZG8gcG9yIDApLCBvdSBoZXhhZGVjaW1hbCAocHJlZml4YWRvIHBvciAweCkuIEVzcGVjaWZpY2FuZG8gMCBzaWduaWZpY2ENCitjb3JyZXNwb25kZXIgYSBxdWFscXVlciB2YWxvciAoY29tbyBzZSBhIHByb3ByaWVkYWRlIG7jbyBmb2kgZXNwZWNpZmljYWRhKS48L3NwYW4+PHNwYW4NCitzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PGJyDQorc3R5bGU9J21zby1zcGVjaWFsLWNoYXJhY3RlcjpsaW5lLWJyZWFrJz4NCis8IVtpZiAhc3VwcG9ydExpbmVCcmVha05ld0xpbmVdPjxiciBzdHlsZT0nbXNvLXNwZWNpYWwtY2hhcmFjdGVyOmxpbmUtYnJlYWsnPg0KKzwhW2VuZGlmXT48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdtc28tYmlkaS1mb250LXNpemU6MTguMHB0Jz43LiBU83BpY29zDQorQXZhbudhZG9zPG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD4mbmJzcDs8L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nbXNvLWJpZGktZm9udC1zaXplOjE4LjBwdCc+Ny4xIEluc3RhbGHn428gZGUNCitt+mx0aXBsYXMgdmVyc/Vlczwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6DQorIkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PGJyPg0KKzwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+ySBm4WNpbCB0ZXIgbWFpcyBkZSB1bWEgdmVyc+NvIGRvIEJSTFRUWQ0KK2luc3RhbGFkbyBubyBtZXNtbyBzaXN0ZW1hIGFvIG1lc21vIHRlbXBvLiBFc3NlIHJlY3Vyc28gcGVybWl0ZSBxdWUgdm9j6iB0ZXN0ZQ0KK3VtYSBub3ZhIHZlcnPjbyBhbnRlcyBkZSByZW1vdmVyIG8gYW50aWdvLjwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7DQorbXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PGJyPg0KKzxicj4NCis8L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPkEgb3Dn428gZGUgY29tcGlsYefjbyAtLXdpdGgtZXhlY3V0ZS1yb290DQorcGVybWl0ZSBxdWUgdm9j6iBpbnN0YWxlIGEgaGllcmFycXVpYSBkZSBhcnF1aXZvIGVtIHF1YWxxdWVyIGx1Z2FyIHF1ZSB2b2PqDQorZGVzZWphLiBMZW1icmFuZG8gcXVlIOkgbWVsaG9yIHBhcmEgbWFudGVyIHRvZG9zIG9zIGNvbXBvbmVudGVzIEJSTFRUWSBkZW50cm8NCitkbyBzaXN0ZW1hIGRlIGFycXVpdm9zIHJvb3QsIHZvY+ogcG9kZSBjb21waWxhLWxvcyBhc3NpbTo8L3NwYW4+PHNwYW4NCitzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PGJyPg0KKzxicj4NCis8L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPi4gL2NvbmZpZ3VyZSAtLXdpdGgtZXhlY3V0ZS1yb290DQorPS9icmx0dHktMy4xPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48YnI+DQorPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5tYWtlIGluc3RhbGw8L3NwYW4+PHNwYW4NCitzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PGJyPg0KKzxicj4NCis8L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPlZvY+ogcG9kZSBleGVjdXThLWxvIGFzc2ltOjwvc3Bhbj48c3Bhbg0KK3N0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48YnI+DQorPGJyPg0KKzwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+Jm5ic3A7Jm5ic3A7Jm5ic3A7L2JybHR0eS0zLjEvYmluL2JybHR0eTwvc3Bhbj48c3Bhbg0KK3N0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48YnI+DQorPGJyPg0KKzwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+UXVhbmRvIGEgdmVyc+NvIDMuMiDpIGxpYmVyYWRvLCBiYXN0YQ0KK2luc3RhbOEtbG8gZW0gdW0gbG9jYWwgZGlmZXJlbnRlIGUgZXhlY3V0YXIgbyBub3ZvIGFycXVpdm8gZXhlY3V04XZlbCBhIHBhcnRpcg0KK2Rh7S48L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxicj4NCis8YnI+DQorPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz4mbmJzcDsmbmJzcDsuIC9jb25maWd1cmUNCistLXdpdGgtZXhlY3V0ZS1yb290ID0vYnJsdHR5LTMuMjwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7DQorbXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PGJyPg0KKzwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+Jm5ic3A7Jm5ic3A7bWFrZSBpbnN0YWxsPC9zcGFuPjxzcGFuDQorc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxicj4NCis8L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPiZuYnNwOyZuYnNwOy9icmx0dHktMy4yL2Jpbi9icmx0dHk8L3NwYW4+PHNwYW4NCitzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PGJyPg0KKzxicj4NCis8L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPkF06SBhZ29yYSwgZXN0ZSBwYXJhZGlnbWEg6SB1bSBwb3Vjbw0KK2VzdHJhbmhvLCBwZWxvIG1lbm9zLCBkdWFzIHJhevVlcy4gVW1hIGRlc3NlcyBub21lcyDpIG11aXRvIGRpZu1jaWwgZGUgZXNjcmV2ZXIsDQorZSBvIG91dHJvIOkgcXVlIHZvY+ogbuNvIHF1ZXIgbWV4ZXIgY29tIGEgc2Vx/OpuY2lhIGRlIGluaWNpYWxpemHn428gZG8gc2lzdGVtYQ0KK2NhZGEgdmV6IHF1ZSB2b2PqIHF1aXNlciBtdWRhciBwYXJhIHVtYSB2ZXJz428gZGlmZXJlbnRlIGRvIEJSTFRUWS4gRXN0ZXMNCitwcm9ibGVtYXMgc+NvIGZhY2lsbWVudGUgcmVzb2x2aWRvcyBhZGljaW9uYW5kbyB1bSBsaW5rIHNpbWLzbGljbyBwYXJhIG8NCitleGVjdXThdmVsLjwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PGJyPg0KKzxicj4NCis8L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPiZuYnNwOyZuYnNwOyZuYnNwO2xuLXMgL2JybHR0eS0zLjEvYmluL2JybHR0eQ0KKy9iaW4vYnJsdHR5PC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48YnI+DQorPGJyPg0KKzwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+UXVhbmRvIOkgaG9yYSBkZSBtdWRhciBwYXJhIGEgbm92YQ0KK3ZlcnPjbywgYXBlbmFzIG8gbGluayByZXBvaW50IHN5bWJvbGMuPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczsNCittc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48YnI+DQorPGJyPg0KKzwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+Jm5ic3A7Jm5ic3A7Jm5ic3A7bG4tcw0KKy9icmx0dHktMy4yL2Jpbi9icmx0dHkgL2Jpbi9icmx0dHk8L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzOw0KK21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxicj4NCis8YnI+DQorPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5TZSB2b2PqIHF1aXNlciBmaWNhciByZWFsbWVudGUsIGVudONvDQoraW5pY2llIHVtIG91dHJvIG7tdmVsIGRlIGluZGlyZefjbyBwYXJhIGZhemVyIHRvZG9zIG9zIGFycXVpdm9zIEJSTFRUWSBwYXJhDQorcXVhbHF1ZXIgdmVyc+NvIHF1ZSBlbGVzIGVzdONvIGVtIHRvZG9zIG9zIGxvY2FpcyBwYWRy428uIFByaW1laXJvLCBjcmllIHVtDQorbGluayBzaW1i82xpY28gYXRyYXbpcyBkZSB1bSBsb2NhbCBjb211bSByZXBvaW50YWJsZSBkZSBjYWRhIHVtYSBkYXMNCitsb2NhbGl6Yef1ZXMgcGFkcuNvIGRlIEJSTFRUWS48L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5Og0KKyJDb3VyaWVyIE5ldyInPjxicj4NCis8YnI+DQorPHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgoKCgoCA8L3NwYW4+PC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LXNpemU6DQorMTEuMHB0Jz5sbiAtcyAvYnJsdHR5L2Jpbi9icmx0dHkgL2Jpbi9icmx0dHk8L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5Og0KK1RpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxicj4NCis8c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKCgoKCgIDwvc3Bhbj48L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToNCisxMS4wcHQnPmxuIC1zIC9icmx0dHkvZXRjL2JybHR0eSAvZXRjL2JybHR0eTwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6DQorVGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PGJyPg0KKzxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKCgoKAgPC9zcGFuPjwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1zaXplOg0KKzExLjBwdCc+bG4gLXMgYnJsdHR5IC9saWIvYnJsdHR5IC9saWIvYnJsdHR5PC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LWZhbWlseToNCitUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48YnI+DQorPGJyPg0KKzwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+RW50428sIHR1ZG8gcXVlIHZvY+ogcHJlY2lzYSBmYXplciDpDQorYXBvbnRhciAvYnJsdHR5IGEgdmVyc+NvIGRlc2VqYWRhLjwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7DQorbXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PGJyPg0KKzxicj4NCis8c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKCgoKCgIDwvc3Bhbj48L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToNCisxMS4wcHQnPmxuIC1zIC9icmx0dHktMy4xIC9icmx0dHk8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdtc28tYmlkaS1mb250LXNpemU6MTguMHB0Jz43LjINCitJbnN0YWxh5+NvL0FqdWRhIGRvcyBEaXNjb3MgZGUgcm9vdCBwYXJhIG8gTGludXg8L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5Og0KK1RpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxicj4NCis8L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPkJSTFRUWSBwb2RlIGZ1bmNpb25hciBjb21vIHVtIGV4ZWN1dOF2ZWwNCithdXT0bm9tby4gVHVkbyBvIHF1ZSBlbGUgcHJlY2lzYSBzYWJlciBwb2RlIHNlciBleHBsaWNpdGFtZW50ZSBjb25maWd1cmFkbyBlbQ0KK3RlbXBvIGRlIGNvbXBpbGHn428gKHZlamEgT3Dn9WVzIGRlIENvbXBpbGHn428pLiBTZSBvIGRpcmV083JpbyBkZSBkYWRvcyAodmVyDQorbmEgb3Dn428gZGUgY29tcGlsYefjbyAtLXdpdGgtZGF0YS1kaXJlY3RvcnkgZSAtLXdpdGgtZXhlY3V0ZS1yb290KSBu428NCitleGlzdGlyLCBlbnTjbyBCUkxUVFkgb2xoYSBlbSAvZXRjIHBhcmEgb3MgYXJxdWl2b3MgcXVlIGVsZSBuZWNlc3NpdGEuIE1lc21vDQorcXVlIG5lbmh1bSBkZXN0ZXMgYXJxdWl2b3MgbuNvIGV4aXN0ZW0sIEJSTFRUWSBhaW5kYSBmdW5jaW9uYSE8L3NwYW4+PHNwYW4NCitzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PGJyPg0KKzxicj4NCis8L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPlNlLCBwb3IgYWxndW1hIHJheuNvLCB2b2PqIGrhIGNyaW91IG8NCitkaXJldPNyaW8gZGUgZGFkb3MgKG5vcm1hbG1lbnRlIC9ldGMvYnJsdHR5KSwg6SBpbXBvcnRhbnRlIGRlZmluaXIgc3Vhcw0KK3Blcm1pc3P1ZXMgcGFyYSBxdWUgc29tZW50ZSBvIHJvb3QgcG9zc2EgY3JpYXIgYXJxdWl2b3MgZGVudHJvIGRlbGEuPC9zcGFuPjxzcGFuDQorc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxicj4NCis8YnI+DQorPHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgoKCgoCA8L3NwYW4+PC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LXNpemU6DQorMTEuMHB0Jz5jaG1vZCA3NTUgL2V0Yy9icmx0dHk8L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5Og0KKyJDb3VyaWVyIE5ldyInPjxicj4NCis8YnI+DQorPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5BIHRlbGEgZG8gYXBhcmVsaG8gZGUgaW5zcGXn428gZGUNCitjb250ZfpkbyAobm9ybWFsbWVudGUgL2Rldi92Y3NhKSDpIG5lY2Vzc+FyaWEuIEVsYSBq4SBkZXZlIGV4aXN0aXIgYSBtZW5vcyBxdWUNCitzdWEgZGlzdHJpYnVp5+NvIGRvIExpbnV4IOkgYmFzdGFudGUgYW50aWdhLiBTZSBuZWNlc3PhcmlvLCB2b2PqIHBvZGUgY3Jp4S1sbw0KK2NvbTo8L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxicj4NCis8YnI+DQorPHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgoKCgoCA8L3NwYW4+PC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LXNpemU6DQorMTEuMHB0Jz5ta25vZCAvZGV2L3Zjc2EgYyA3IDEyODwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7DQorbXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PGJyPg0KKzxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKCgoKAgPC9zcGFuPjwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1zaXplOg0KKzExLjBwdCc+Y2htb2QgNjYwIC9kZXYvdmNzYTwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6DQorIkNvdXJpZXIgTmV3Iic+PGJyPg0KKzxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKCgoKAgPC9zcGFuPjwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1zaXplOg0KKzExLjBwdCc+Y2hvd24gcm9vdC50dHkgL2Rldi92Y3NhPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczsNCittc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48YnI+DQorPGJyPg0KKzwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+VW0gcHJvYmxlbWEgZnJlcfxlbnRlbWVudGUgZW5jb250cmFkbyBhbw0KK3RlbnRhciB1c2FyIEJSTFRUWSBlbSB1bSBhbWJpZW50ZSBpbmNlcnRvIGNvbW8gdW0gZGlzY28gZGUgcm9vdCBvdSBkZSB1bQ0KK3Npc3RlbWEgaW5jb21wbGV0byDpIHF1ZSBlbGEgbuNvIHD0ZGUgZW5jb250cmFyIGFzIGJpYmxpb3RlY2FzIGNvbXBhcnRpbGhhZGFzDQorKG91IHBhcnRlcykgZGUgcXVlIG5lY2Vzc2l0YS4gRGlzY29zIGRlIHJvb3QgY29zdHVtYW0gdXNhciBzdWJjb25qdW50byBlL291DQordmVyc/VlcyBkZXNhdHVhbGl6YWRhcyBkYXMgYmlibGlvdGVjYXMgcXVlIHBvZGVtIHNlciBpbmFkZXF1YWRvcy4gQSBzb2x15+NvIOkNCitjb25maWd1cmFyIEJSTFRUWSBjb20gYSBvcOfjbyAtLWVuYWJsZS1zdGFuZGFsb25lLXByb2dyYW1zLiBJc3NvIHJlbW92ZSB0b2Rhcw0KK2FzIGRlcGVuZOpuY2lhcyBkZSBiaWJsaW90ZWNhcyBjb21wYXJ0aWxoYWRhcywgbWFzLCBpbmZlbGl6bWVudGUsIHRhbWLpbSBjcmlhDQordW0gYXJxdWl2byBleGVjdXThdmVsIG1haW9yLiBI4SB1bWEgc+lyaWUgZGUgb3Dn9WVzIGRlIGNvbXBpbGHn428gcXVlIHBvZGUgc2VyDQordXNhZG8gcGFyYSByZW1vdmVyIGRlIHJlY3Vyc29zIGRlc25lY2Vzc+FyaW9zIGRvIEJSTFRUWSwgYSBmaW0gZGUgYXRlbnVhciB1bQ0KK3BvdWNvIGVzc2UgcHJvYmxlbWEgKHZlciBCdWlsZCBGZWF0dXJlcykuPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczsNCittc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48YnI+DQorPGJyPg0KKzwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+TyBleGVjdXThdmVsIOkgZWxpbWluYWRvIGR1cmFudGUgbyBtYWtlDQoraW5zdGFsbC4gSXN0byByZWR1eiBzaWduaWZpY2F0aXZhbWVudGUgbyBzZXUgdGFtYW5obyByZXRpcmFuZG8gc3VhIHRhYmVsYSBkZQ0KK3PtbWJvbG8uIFZvY+ogcmVjZWJlcuEgdW0gZXhlY3V04XZlbCBtdWl0byBtZW5vciwgcG9ydGFudG8sIHNlIHZvY+ogY29uY2x1aXIgbw0KK3Byb2Nlc3NvIGRlIGNvbXBpbGHn428gY29tcGxldG8sIGUgZGVwb2lzIGNvcGnhLWxvIGRlIHNldSBsb2NhbCBpbnN0YWxhZG8uIFNlLA0KK25vIGVudGFudG8sIGNvcGnhLWxvIGRvIGRpcmV083JpbyBkZSBjb21waWxh5+NvLCB2YWkgc2VyIG11aXRvIGdyYW5kZS4gTuNvIHNlDQorZXNxdWXnYSBkZSB0aXJhLWxvLjwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6DQorIkNvdXJpZXIgTmV3Iic+PGJyPg0KKzxicj4NCis8c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oDwvc3Bhbj48c3BhbiBzdHlsZT0nbXNvLXRhYi1jb3VudDoxJz6goKCgoKCgoKCgoKCgoCA8L3NwYW4+PC9zcGFuPjxzcGFuDQorc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPnN0cmlwIGJybHR0eTxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J21zby1iaWRpLWZvbnQtc2l6ZToxOC4wcHQnPjcuMyAtIE1lbGhvcmlhcw0KK2Z1dHVyYXM8L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxicj4NCis8L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPkFs6W0gZGUgY29ycmlnaXIgb3MgZXJyb3MgZSBkYXIgc3Vwb3J0ZSBhDQorbWFpcyB0aXBvcyBkZSBkaXNwbGF5cyBicmFpbGxlLCBlc3BlcmFtb3MsIHNlIG8gdGVtcG8gcGVybWl0aXIsIHRyYWJhbGhhciBzb2JyZQ0KK28gc2VndWludGU6PC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48YnI+DQorPGJyPg0KKzwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+QmV0dGVyIEF0dHJpYnV0ZSBIYW5kbGluZzwvc3Bhbj48c3Bhbg0KK3N0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48YnINCitzdHlsZT0nbXNvLXNwZWNpYWwtY2hhcmFjdGVyOmxpbmUtYnJlYWsnPg0KKzwhW2lmICFzdXBwb3J0TGluZUJyZWFrTmV3TGluZV0+PGJyIHN0eWxlPSdtc28tc3BlY2lhbC1jaGFyYWN0ZXI6bGluZS1icmVhayc+DQorPCFbZW5kaWZdPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyoNCitBY29tcGFuaGFtZW50byBkZSBBdHJpYnV0by48L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5Og0KKyJDb3VyaWVyIE5ldyInPjxicj4NCis8L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyoNCitNaXN0byBkZSB0ZXh0byBlIG1vZG8gZGUgYXRyaWJ1dG8uPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczsNCittc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48YnI+DQorPGJyPg0KKzwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+U2Nyb2xsIFRyYWNraW5nPC9zcGFuPjxzcGFuDQorc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxicj4NCis8L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPkJsb3F1ZWFyIGEgamFuZWxhIGRlIHVtYSBsaW5oYSBicmFpbGxlIGrhDQorcXVlIHJvbGEgbmEgdGVsYS48L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5Og0KKyJDb3VyaWVyIE5ldyInPjxicj4NCis8YnI+DQorPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5CZXR0ZXIgU3BlZWNoIFN1cHBvcnQ8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48YnI+DQorPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz4mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsqDQorQnJhaWxsZSBtaXN0b3MgZSBkZSBmYWxhIHBhcmEgbGVpdHVyYSBtYWlzIHLhcGlkYSBkbyB0ZXh0by48L3NwYW4+PHNwYW4NCitzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PGJyPg0KKzwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Kg0KK01lbGhvciBuYXZlZ2Hn428gZGUgc3BlZWNoLjwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6DQorIkNvdXJpZXIgTmV3Iic+PGJyPg0KKzwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Kg0KK01haXMgc2ludGV0aXphZG9yZXMgZGUgdm96Ljwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6DQorIkNvdXJpZXIgTmV3Iic+PGJyPg0KKzxicj4NCis8L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPlNjcmVlbiBTdWJyZWdpb25zPC9zcGFuPjxzcGFuDQorc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxicj4NCis8L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPklnbm9yYXIgbyBtb3ZpbWVudG8gZG8gY3Vyc29yIGZvcmEgZGENCityZWdp428sIGUgZGVmaW5pciBsaW1pdGVzIGRlIG5hdmVnYefjbyBzdWF2ZSBuYXMgYm9yZGFzIGRhIHJlZ2njby48L3NwYW4+PHNwYW4NCitzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PGJyPg0KKzxicj4NCis8L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPlZlamEgbyBhcnF1aXZvIFRPRE8gcGFyYSB1bWEgbGlzdGEgbWFpcw0KK2NvbXBsZXRhLjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J21zby1iaWRpLWZvbnQtc2l6ZToxOC4wcHQnPjcuNCBCdWdzDQorY29uaGVjaWRvczwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PGJyPg0KKzwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+Tm8gbW9tZW50byBkYSBlc2NyaXRhIChkZXplbWJybyAyMDAxKSwgb3MNCitzZWd1aW50ZXMgcHJvYmxlbWFzIHPjbyBjb25oZWNpZG9zOjwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7DQorbXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PGJyPg0KKzxicj4NCis8L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPkN1cnNvciBkZSByb3RlYW1lbnRvIOkgaW1wbGVtZW50YWRvIGNvbW8NCit1bSBsb29waW5nIGRvIHN1Yi1wcm9jZXNzbyBxdWUgY29ycmUgbmEgcHJpb3JpZGFkZSByZWR1emlkYSBwYXJhIGV2aXRhciBvIHVzbw0KK2RlIG11aXRvIHRlbXBvIGRlIENQVS4gT3MgZGlmZXJlbnRlcyBzaXN0ZW1hcyBxdWUg6SBjYXJyZWdhZG8gcmVxdWVyIGRpZmVyZW50ZXMNCitjb25maWd1cmHn9WVzIGRlIHNldXMgcGFy4m1ldHJvcy4gT3MgcGFkcvVlcyBmdW5jaW9uYW0gbXVpdG8gYmVtIGVtIHVtIGVkaXRvcg0KK2RlIFVuaXggdO1waWNvIGRlIHVtIHNpc3RlbWEgYmFzdGFudGUgbGV2ZSwgbWFzIG11aXRvIHBvYnJlIGVtIGFsZ3VtYXMgb3V0cmFzDQorc2l0dWHn9WVzLCBwb3IgZXhlbXBsbywgZW0gdW0gbGluayBsZW50byBkZSBz6XJpZSBwYXJhIHVtIGhvc3QgcmVtb3RvLjwvc3Bhbj48c3Bhbg0KK3N0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48YnINCitzdHlsZT0nbXNvLXNwZWNpYWwtY2hhcmFjdGVyOmxpbmUtYnJlYWsnPg0KKzwhW2lmICFzdXBwb3J0TGluZUJyZWFrTmV3TGluZV0+PGJyIHN0eWxlPSdtc28tc3BlY2lhbC1jaGFyYWN0ZXI6bGluZS1icmVhayc+DQorPCFbZW5kaWZdPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J21zby1iaWRpLWZvbnQtc2l6ZToxOC4wcHQnPkFw6m5kaWNlOjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J21zby1iaWRpLWZvbnQtc2l6ZToxOC4wcHQnPjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J21zby1iaWRpLWZvbnQtc2l6ZToxOC4wcHQnPkEuIERpc3BsYXkNCitCcmFpbGxlIFN1cG9ydGFkb3M8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIGxhbmc9RU4tVVMgc3R5bGU9J21zby1hbnNpLWxhbmd1YWdlOkVOLVVTJz48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0IHN0eWxlPSd0ZXh0LWluZGVudDozNS40cHQnPkJSTFRUWSBzdXBvcnRhIG9zIHNlZ3VpbnRlcw0KK2Rpc3BsYXlzIGJyYWlsbGU6PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48bzpwPiZuYnNwOzwvbzpwPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+Qi4gU2ludGV0aXphZG9yZXMgZGUgRmFsYSBTdXBvcnRhZG9zOjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gbGFuZz1FTi1VUyBzdHlsZT0nbXNvLWFuc2ktbGFuZ3VhZ2U6RU4tVVMnPjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQgc3R5bGU9J3RleHQtaW5kZW50OjM1LjRwdCc+QlJMVFRZIHN1cG9ydGEgb3Mgc2VndWludGVzDQorc2ludGV0aXphZG9yZXMgZGUgZmFsYTo8L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxvOnA+Jm5ic3A7PC9vOnA+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBsYW5nPUVOLVVTIHN0eWxlPSdtc28tYW5zaS1sYW5ndWFnZTpFTi1VUyc+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKCgoKAgPC9zcGFuPk5vbWU8c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKCgoKCgoKCgoKAgPC9zcGFuPk1vZGVsb3M8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIGxhbmc9RU4tVVMgc3R5bGU9J21zby1hbnNpLWxhbmd1YWdlOkVOLVVTJz48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gDQorPC9zcGFuPl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXzxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gbGFuZz1FTi1VUyBzdHlsZT0nbXNvLWFuc2ktbGFuZ3VhZ2U6RU4tVVMnPjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgoKCgIDwvc3Bhbj5BbHZhPHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKCgoKCgoKCgoKCgIDwvc3Bhbj5EZWxwaGkgKDRubik8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIGxhbmc9RU4tVVMgc3R5bGU9J21zby1hbnNpLWxhbmd1YWdlOkVOLVVTJz48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKCgoCA8L3NwYW4+QnJhaWxsZUxpdGU8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIGxhbmc9RU4tVVMgc3R5bGU9J21zby1hbnNpLWxhbmd1YWdlOkVOLVVTJz48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKCgoCA8L3NwYW4+Q29tYmlCcmFpbGxlPG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBsYW5nPUVOLVVTIHN0eWxlPSdtc28tYW5zaS1sYW5ndWFnZTpFTi1VUyc+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKCgoKAgPC9zcGFuPmVTcGVhazxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgoKCgoKCgoKAgPC9zcGFuPnRleHQgdG8gc3BlZWNoIGVuZ2luZTxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gbGFuZz1FTi1VUyBzdHlsZT0nbXNvLWFuc2ktbGFuZ3VhZ2U6RU4tVVMnPjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgoKAgPC9zcGFuPjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqA8L3NwYW4+RXh0ZXJuYWxTcGVlY2g8c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goCA8L3NwYW4+cnVucyAvdXNyL2xvY2FsL2Jpbi9leHRlcm5hbHNwZWVjaDxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gbGFuZz1FTi1VUyBzdHlsZT0nbXNvLWFuc2ktbGFuZ3VhZ2U6RU4tVVMnPjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgoKCgIDwvc3Bhbj5GZXN0aXZhbDxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgoKCgoKCgIDwvc3Bhbj50ZXh0IHRvIHNwZWVjaCBlbmdpbmU8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIGxhbmc9RU4tVVMgc3R5bGU9J21zby1hbnNpLWxhbmd1YWdlOkVOLVVTJz48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKCgoCA8L3NwYW4+RmVzdGl2YWxMaXRlPHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKCgoCA8L3NwYW4+dGV4dCB0byBzcGVlY2ggZW5naW5lPG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBsYW5nPUVOLVVTIHN0eWxlPSdtc28tYW5zaS1sYW5ndWFnZTpFTi1VUyc+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKCgoKAgPC9zcGFuPkdlbmVyaWNTYXk8c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKCgoKAgPC9zcGFuPnBpcGVzIHRvIC91c3IvbG9jYWwvYmluL3NheTxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gbGFuZz1FTi1VUyBzdHlsZT0nbXNvLWFuc2ktbGFuZ3VhZ2U6RU4tVVMnPjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgoKCgIDwvc3Bhbj5NaWtyb3B1aGU8c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKCgoKCgIDwvc3Bhbj50ZXh0IHRvIHNwZWVjaCBlbmdpbmU8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIGxhbmc9RU4tVVMgc3R5bGU9J21zby1hbnNpLWxhbmd1YWdlOkVOLVVTJz48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKCgoCA8L3NwYW4+U3dpZnQ8c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKCgoKANCis8L3NwYW4+PHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgoKCgoDwvc3Bhbj50ZXh0IHRvIHNwZWVjaCBlbmdpbmU8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIGxhbmc9RU4tVVMgc3R5bGU9J21zby1hbnNpLWxhbmd1YWdlOkVOLVVTJz48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKCgoCA8L3NwYW4+VGhldGE8c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKCgoKCgoKCgoCA8L3NwYW4+dGV4dCB0byBzcGVlY2ggZW5naW5lPG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBsYW5nPUVOLVVTIHN0eWxlPSdtc28tYW5zaS1sYW5ndWFnZTpFTi1VUyc+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKCgoKAgPC9zcGFuPlZpYVZvaWNlPHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKCgoKCgoKAgPC9zcGFuPnRleHQgdG8gc3BlZWNoIGVuZ2luZTxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gbGFuZz1FTi1VUyBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6DQorIkNvdXJpZXIgTmV3Ijttc28tYW5zaS1sYW5ndWFnZTpFTi1VUyc+PG86cD4mbmJzcDs8L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nbXNvLWJpZGktZm9udC1zaXplOjE4LjBwdCc+QyCWIEPzZGlnbyBkZSBJZGVudGlmaWNh5+NvDQorZGUgRHJpdmVyPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHRhYmxlIGNsYXNzPU1zb05vcm1hbFRhYmxlIGJvcmRlcj0wIGNlbGxzcGFjaW5nPTAgY2VsbHBhZGRpbmc9MA0KKyBzdHlsZT0nYm9yZGVyLWNvbGxhcHNlOmNvbGxhcHNlJz4NCisgPHRyIHN0eWxlPSdtc28teWZ0aS1pcm93OjA7bXNvLXlmdGktZmlyc3Ryb3c6eWVzJz4NCisgIDx0ZCB2YWxpZ249dG9wIHN0eWxlPSdib3JkZXI6c29saWQgI0FBQUFBQSAxLjBwdDttc28tYm9yZGVyLWFsdDpzb2xpZCAjQUFBQUFBIC43NXB0Ow0KKyAgcGFkZGluZzo1LjZwdCA1LjZwdCA1LjZwdCA1LjZwdCc+DQorICA8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPkPzZGlnbyA8L3NwYW4+PHNwYW4NCisgIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorICA8L3RkPg0KKyAgPHRkIHZhbGlnbj10b3Agc3R5bGU9J2JvcmRlcjpzb2xpZCAjQUFBQUFBIDEuMHB0O2JvcmRlci1sZWZ0Om5vbmU7bXNvLWJvcmRlci1sZWZ0LWFsdDoNCisgIHNvbGlkICNBQUFBQUEgLjc1cHQ7bXNvLWJvcmRlci1hbHQ6c29saWQgI0FBQUFBQSAuNzVwdDtwYWRkaW5nOjUuNnB0IDUuNnB0IDUuNnB0IDUuNnB0Jz4NCisgIDxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+Tm9tZTwvc3Bhbj48c3Bhbg0KKyAgc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisgIDwvdGQ+DQorIDwvdHI+DQorIDx0ciBzdHlsZT0nbXNvLXlmdGktaXJvdzoxJz4NCisgIDx0ZCB2YWxpZ249dG9wIHN0eWxlPSdib3JkZXI6c29saWQgI0FBQUFBQSAxLjBwdDtib3JkZXItdG9wOm5vbmU7bXNvLWJvcmRlci10b3AtYWx0Og0KKyAgc29saWQgI0FBQUFBQSAuNzVwdDttc28tYm9yZGVyLWFsdDpzb2xpZCAjQUFBQUFBIC43NXB0O3BhZGRpbmc6NS42cHQgNS42cHQgNS42cHQgNS42cHQnPg0KKyAgPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5hbDwvc3Bhbj48c3Bhbg0KKyAgc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisgIDwvdGQ+DQorICA8dGQgdmFsaWduPXRvcCBzdHlsZT0nYm9yZGVyLXRvcDpub25lO2JvcmRlci1sZWZ0Om5vbmU7Ym9yZGVyLWJvdHRvbTpzb2xpZCAjQUFBQUFBIDEuMHB0Ow0KKyAgYm9yZGVyLXJpZ2h0OnNvbGlkICNBQUFBQUEgMS4wcHQ7bXNvLWJvcmRlci10b3AtYWx0OnNvbGlkICNBQUFBQUEgLjc1cHQ7DQorICBtc28tYm9yZGVyLWxlZnQtYWx0OnNvbGlkICNBQUFBQUEgLjc1cHQ7bXNvLWJvcmRlci1hbHQ6c29saWQgI0FBQUFBQSAuNzVwdDsNCisgIHBhZGRpbmc6NS42cHQgNS42cHQgNS42cHQgNS42cHQnPg0KKyAgPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5BbHZhPC9zcGFuPjxzcGFuDQorICBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKyAgPC90ZD4NCisgPC90cj4NCisgPHRyIHN0eWxlPSdtc28teWZ0aS1pcm93OjInPg0KKyAgPHRkIHZhbGlnbj10b3Agc3R5bGU9J2JvcmRlcjpzb2xpZCAjQUFBQUFBIDEuMHB0O2JvcmRlci10b3A6bm9uZTttc28tYm9yZGVyLXRvcC1hbHQ6DQorICBzb2xpZCAjQUFBQUFBIC43NXB0O21zby1ib3JkZXItYWx0OnNvbGlkICNBQUFBQUEgLjc1cHQ7cGFkZGluZzo1LjZwdCA1LjZwdCA1LjZwdCA1LjZwdCc+DQorICA8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPmF0PC9zcGFuPjxzcGFuDQorICBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKyAgPC90ZD4NCisgIDx0ZCB2YWxpZ249dG9wIHN0eWxlPSdib3JkZXItdG9wOm5vbmU7Ym9yZGVyLWxlZnQ6bm9uZTtib3JkZXItYm90dG9tOnNvbGlkICNBQUFBQUEgMS4wcHQ7DQorICBib3JkZXItcmlnaHQ6c29saWQgI0FBQUFBQSAxLjBwdDttc28tYm9yZGVyLXRvcC1hbHQ6c29saWQgI0FBQUFBQSAuNzVwdDsNCisgIG1zby1ib3JkZXItbGVmdC1hbHQ6c29saWQgI0FBQUFBQSAuNzVwdDttc28tYm9yZGVyLWFsdDpzb2xpZCAjQUFBQUFBIC43NXB0Ow0KKyAgcGFkZGluZzo1LjZwdCA1LjZwdCA1LjZwdCA1LjZwdCc+DQorICA8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPkFsYmF0cm9zczwvc3Bhbj48c3Bhbg0KKyAgc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisgIDwvdGQ+DQorIDwvdHI+DQorIDx0ciBzdHlsZT0nbXNvLXlmdGktaXJvdzozJz4NCisgIDx0ZCB2YWxpZ249dG9wIHN0eWxlPSdib3JkZXI6c29saWQgI0FBQUFBQSAxLjBwdDtib3JkZXItdG9wOm5vbmU7bXNvLWJvcmRlci10b3AtYWx0Og0KKyAgc29saWQgI0FBQUFBQSAuNzVwdDttc28tYm9yZGVyLWFsdDpzb2xpZCAjQUFBQUFBIC43NXB0O3BhZGRpbmc6NS42cHQgNS42cHQgNS42cHQgNS42cHQnPg0KKyAgPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5iYTwvc3Bhbj48c3Bhbg0KKyAgc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisgIDwvdGQ+DQorICA8dGQgdmFsaWduPXRvcCBzdHlsZT0nYm9yZGVyLXRvcDpub25lO2JvcmRlci1sZWZ0Om5vbmU7Ym9yZGVyLWJvdHRvbTpzb2xpZCAjQUFBQUFBIDEuMHB0Ow0KKyAgYm9yZGVyLXJpZ2h0OnNvbGlkICNBQUFBQUEgMS4wcHQ7bXNvLWJvcmRlci10b3AtYWx0OnNvbGlkICNBQUFBQUEgLjc1cHQ7DQorICBtc28tYm9yZGVyLWxlZnQtYWx0OnNvbGlkICNBQUFBQUEgLjc1cHQ7bXNvLWJvcmRlci1hbHQ6c29saWQgI0FBQUFBQSAuNzVwdDsNCisgIHBhZGRpbmc6NS42cHQgNS42cHQgNS42cHQgNS42cHQnPg0KKyAgPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5CcmxBUEk8L3NwYW4+PHNwYW4NCisgIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorICA8L3RkPg0KKyA8L3RyPg0KKyA8dHIgc3R5bGU9J21zby15ZnRpLWlyb3c6NCc+DQorICA8dGQgdmFsaWduPXRvcCBzdHlsZT0nYm9yZGVyOnNvbGlkICNBQUFBQUEgMS4wcHQ7Ym9yZGVyLXRvcDpub25lO21zby1ib3JkZXItdG9wLWFsdDoNCisgIHNvbGlkICNBQUFBQUEgLjc1cHQ7bXNvLWJvcmRlci1hbHQ6c29saWQgI0FBQUFBQSAuNzVwdDtwYWRkaW5nOjUuNnB0IDUuNnB0IDUuNnB0IDUuNnB0Jz4NCisgIDxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+Ymw8L3NwYW4+PHNwYW4NCisgIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorICA8L3RkPg0KKyAgPHRkIHZhbGlnbj10b3Agc3R5bGU9J2JvcmRlci10b3A6bm9uZTtib3JkZXItbGVmdDpub25lO2JvcmRlci1ib3R0b206c29saWQgI0FBQUFBQSAxLjBwdDsNCisgIGJvcmRlci1yaWdodDpzb2xpZCAjQUFBQUFBIDEuMHB0O21zby1ib3JkZXItdG9wLWFsdDpzb2xpZCAjQUFBQUFBIC43NXB0Ow0KKyAgbXNvLWJvcmRlci1sZWZ0LWFsdDpzb2xpZCAjQUFBQUFBIC43NXB0O21zby1ib3JkZXItYWx0OnNvbGlkICNBQUFBQUEgLjc1cHQ7DQorICBwYWRkaW5nOjUuNnB0IDUuNnB0IDUuNnB0IDUuNnB0Jz4NCisgIDxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+QnJhaWxsZUxpdGU8L3NwYW4+PHNwYW4NCisgIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorICA8L3RkPg0KKyA8L3RyPg0KKyA8dHIgc3R5bGU9J21zby15ZnRpLWlyb3c6NSc+DQorICA8dGQgdmFsaWduPXRvcCBzdHlsZT0nYm9yZGVyOnNvbGlkICNBQUFBQUEgMS4wcHQ7Ym9yZGVyLXRvcDpub25lO21zby1ib3JkZXItdG9wLWFsdDoNCisgIHNvbGlkICNBQUFBQUEgLjc1cHQ7bXNvLWJvcmRlci1hbHQ6c29saWQgI0FBQUFBQSAuNzVwdDtwYWRkaW5nOjUuNnB0IDUuNnB0IDUuNnB0IDUuNnB0Jz4NCisgIDxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+Ym08L3NwYW4+PHNwYW4NCisgIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorICA8L3RkPg0KKyAgPHRkIHZhbGlnbj10b3Agc3R5bGU9J2JvcmRlci10b3A6bm9uZTtib3JkZXItbGVmdDpub25lO2JvcmRlci1ib3R0b206c29saWQgI0FBQUFBQSAxLjBwdDsNCisgIGJvcmRlci1yaWdodDpzb2xpZCAjQUFBQUFBIDEuMHB0O21zby1ib3JkZXItdG9wLWFsdDpzb2xpZCAjQUFBQUFBIC43NXB0Ow0KKyAgbXNvLWJvcmRlci1sZWZ0LWFsdDpzb2xpZCAjQUFBQUFBIC43NXB0O21zby1ib3JkZXItYWx0OnNvbGlkICNBQUFBQUEgLjc1cHQ7DQorICBwYWRkaW5nOjUuNnB0IDUuNnB0IDUuNnB0IDUuNnB0Jz4NCisgIDxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+QmF1bSAoTmF0aXZlLCBIVCwgUEIxLA0KKyAgUEIyKTwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKyAgPC90ZD4NCisgPC90cj4NCisgPHRyIHN0eWxlPSdtc28teWZ0aS1pcm93OjYnPg0KKyAgPHRkIHZhbGlnbj10b3Agc3R5bGU9J2JvcmRlcjpzb2xpZCAjQUFBQUFBIDEuMHB0O2JvcmRlci10b3A6bm9uZTttc28tYm9yZGVyLXRvcC1hbHQ6DQorICBzb2xpZCAjQUFBQUFBIC43NXB0O21zby1ib3JkZXItYWx0OnNvbGlkICNBQUFBQUEgLjc1cHQ7cGFkZGluZzo1LjZwdCA1LjZwdCA1LjZwdCA1LjZwdCc+DQorICA8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPmJuPC9zcGFuPjxzcGFuDQorICBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKyAgPC90ZD4NCisgIDx0ZCB2YWxpZ249dG9wIHN0eWxlPSdib3JkZXItdG9wOm5vbmU7Ym9yZGVyLWxlZnQ6bm9uZTtib3JkZXItYm90dG9tOnNvbGlkICNBQUFBQUEgMS4wcHQ7DQorICBib3JkZXItcmlnaHQ6c29saWQgI0FBQUFBQSAxLjBwdDttc28tYm9yZGVyLXRvcC1hbHQ6c29saWQgI0FBQUFBQSAuNzVwdDsNCisgIG1zby1ib3JkZXItbGVmdC1hbHQ6c29saWQgI0FBQUFBQSAuNzVwdDttc28tYm9yZGVyLWFsdDpzb2xpZCAjQUFBQUFBIC43NXB0Ow0KKyAgcGFkZGluZzo1LjZwdCA1LjZwdCA1LjZwdCA1LjZwdCc+DQorICA8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPkJyYWlsbGVOb3RlPC9zcGFuPjxzcGFuDQorICBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKyAgPC90ZD4NCisgPC90cj4NCisgPHRyIHN0eWxlPSdtc28teWZ0aS1pcm93OjcnPg0KKyAgPHRkIHZhbGlnbj10b3Agc3R5bGU9J2JvcmRlcjpzb2xpZCAjQUFBQUFBIDEuMHB0O2JvcmRlci10b3A6bm9uZTttc28tYm9yZGVyLXRvcC1hbHQ6DQorICBzb2xpZCAjQUFBQUFBIC43NXB0O21zby1ib3JkZXItYWx0OnNvbGlkICNBQUFBQUEgLjc1cHQ7cGFkZGluZzo1LjZwdCA1LjZwdCA1LjZwdCA1LjZwdCc+DQorICA8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPmNiPC9zcGFuPjxzcGFuDQorICBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKyAgPC90ZD4NCisgIDx0ZCB2YWxpZ249dG9wIHN0eWxlPSdib3JkZXItdG9wOm5vbmU7Ym9yZGVyLWxlZnQ6bm9uZTtib3JkZXItYm90dG9tOnNvbGlkICNBQUFBQUEgMS4wcHQ7DQorICBib3JkZXItcmlnaHQ6c29saWQgI0FBQUFBQSAxLjBwdDttc28tYm9yZGVyLXRvcC1hbHQ6c29saWQgI0FBQUFBQSAuNzVwdDsNCisgIG1zby1ib3JkZXItbGVmdC1hbHQ6c29saWQgI0FBQUFBQSAuNzVwdDttc28tYm9yZGVyLWFsdDpzb2xpZCAjQUFBQUFBIC43NXB0Ow0KKyAgcGFkZGluZzo1LjZwdCA1LjZwdCA1LjZwdCA1LjZwdCc+DQorICA8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPkNvbWJpQnJhaWxsZTwvc3Bhbj48c3Bhbg0KKyAgc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisgIDwvdGQ+DQorIDwvdHI+DQorIDx0ciBzdHlsZT0nbXNvLXlmdGktaXJvdzo4Jz4NCisgIDx0ZCB2YWxpZ249dG9wIHN0eWxlPSdib3JkZXI6c29saWQgI0FBQUFBQSAxLjBwdDtib3JkZXItdG9wOm5vbmU7bXNvLWJvcmRlci10b3AtYWx0Og0KKyAgc29saWQgI0FBQUFBQSAuNzVwdDttc28tYm9yZGVyLWFsdDpzb2xpZCAjQUFBQUFBIC43NXB0O3BhZGRpbmc6NS42cHQgNS42cHQgNS42cHQgNS42cHQnPg0KKyAgPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5lYzwvc3Bhbj48c3Bhbg0KKyAgc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisgIDwvdGQ+DQorICA8dGQgdmFsaWduPXRvcCBzdHlsZT0nYm9yZGVyLXRvcDpub25lO2JvcmRlci1sZWZ0Om5vbmU7Ym9yZGVyLWJvdHRvbTpzb2xpZCAjQUFBQUFBIDEuMHB0Ow0KKyAgYm9yZGVyLXJpZ2h0OnNvbGlkICNBQUFBQUEgMS4wcHQ7bXNvLWJvcmRlci10b3AtYWx0OnNvbGlkICNBQUFBQUEgLjc1cHQ7DQorICBtc28tYm9yZGVyLWxlZnQtYWx0OnNvbGlkICNBQUFBQUEgLjc1cHQ7bXNvLWJvcmRlci1hbHQ6c29saWQgI0FBQUFBQSAuNzVwdDsNCisgIHBhZGRpbmc6NS42cHQgNS42cHQgNS42cHQgNS42cHQnPg0KKyAgPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5FY29CcmFpbGxlPC9zcGFuPjxzcGFuDQorICBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKyAgPC90ZD4NCisgPC90cj4NCisgPHRyIHN0eWxlPSdtc28teWZ0aS1pcm93OjknPg0KKyAgPHRkIHZhbGlnbj10b3Agc3R5bGU9J2JvcmRlcjpzb2xpZCAjQUFBQUFBIDEuMHB0O2JvcmRlci10b3A6bm9uZTttc28tYm9yZGVyLXRvcC1hbHQ6DQorICBzb2xpZCAjQUFBQUFBIC43NXB0O21zby1ib3JkZXItYWx0OnNvbGlkICNBQUFBQUEgLjc1cHQ7cGFkZGluZzo1LjZwdCA1LjZwdCA1LjZwdCA1LjZwdCc+DQorICA8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPmVzPC9zcGFuPjxzcGFuDQorICBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKyAgPC90ZD4NCisgIDx0ZCB2YWxpZ249dG9wIHN0eWxlPSdib3JkZXItdG9wOm5vbmU7Ym9yZGVyLWxlZnQ6bm9uZTtib3JkZXItYm90dG9tOnNvbGlkICNBQUFBQUEgMS4wcHQ7DQorICBib3JkZXItcmlnaHQ6c29saWQgI0FBQUFBQSAxLjBwdDttc28tYm9yZGVyLXRvcC1hbHQ6c29saWQgI0FBQUFBQSAuNzVwdDsNCisgIG1zby1ib3JkZXItbGVmdC1hbHQ6c29saWQgI0FBQUFBQSAuNzVwdDttc28tYm9yZGVyLWFsdDpzb2xpZCAjQUFBQUFBIC43NXB0Ow0KKyAgcGFkZGluZzo1LjZwdCA1LjZwdCA1LjZwdCA1LjZwdCc+DQorICA8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPmVTcGVhazwvc3Bhbj48c3Bhbg0KKyAgc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisgIDwvdGQ+DQorIDwvdHI+DQorIDx0ciBzdHlsZT0nbXNvLXlmdGktaXJvdzoxMCc+DQorICA8dGQgdmFsaWduPXRvcCBzdHlsZT0nYm9yZGVyOnNvbGlkICNBQUFBQUEgMS4wcHQ7Ym9yZGVyLXRvcDpub25lO21zby1ib3JkZXItdG9wLWFsdDoNCisgIHNvbGlkICNBQUFBQUEgLjc1cHQ7bXNvLWJvcmRlci1hbHQ6c29saWQgI0FBQUFBQSAuNzVwdDtwYWRkaW5nOjUuNnB0IDUuNnB0IDUuNnB0IDUuNnB0Jz4NCisgIDxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+ZXU8L3NwYW4+PHNwYW4NCisgIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorICA8L3RkPg0KKyAgPHRkIHZhbGlnbj10b3Agc3R5bGU9J2JvcmRlci10b3A6bm9uZTtib3JkZXItbGVmdDpub25lO2JvcmRlci1ib3R0b206c29saWQgI0FBQUFBQSAxLjBwdDsNCisgIGJvcmRlci1yaWdodDpzb2xpZCAjQUFBQUFBIDEuMHB0O21zby1ib3JkZXItdG9wLWFsdDpzb2xpZCAjQUFBQUFBIC43NXB0Ow0KKyAgbXNvLWJvcmRlci1sZWZ0LWFsdDpzb2xpZCAjQUFBQUFBIC43NXB0O21zby1ib3JkZXItYWx0OnNvbGlkICNBQUFBQUEgLjc1cHQ7DQorICBwYWRkaW5nOjUuNnB0IDUuNnB0IDUuNnB0IDUuNnB0Jz4NCisgIDxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+RXVyb0JyYWlsbGU8L3NwYW4+PHNwYW4NCisgIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorICA8L3RkPg0KKyA8L3RyPg0KKyA8dHIgc3R5bGU9J21zby15ZnRpLWlyb3c6MTEnPg0KKyAgPHRkIHZhbGlnbj10b3Agc3R5bGU9J2JvcmRlcjpzb2xpZCAjQUFBQUFBIDEuMHB0O2JvcmRlci10b3A6bm9uZTttc28tYm9yZGVyLXRvcC1hbHQ6DQorICBzb2xpZCAjQUFBQUFBIC43NXB0O21zby1ib3JkZXItYWx0OnNvbGlkICNBQUFBQUEgLjc1cHQ7cGFkZGluZzo1LjZwdCA1LjZwdCA1LjZwdCA1LjZwdCc+DQorICA8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPmZsPC9zcGFuPjxzcGFuDQorICBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKyAgPC90ZD4NCisgIDx0ZCB2YWxpZ249dG9wIHN0eWxlPSdib3JkZXItdG9wOm5vbmU7Ym9yZGVyLWxlZnQ6bm9uZTtib3JkZXItYm90dG9tOnNvbGlkICNBQUFBQUEgMS4wcHQ7DQorICBib3JkZXItcmlnaHQ6c29saWQgI0FBQUFBQSAxLjBwdDttc28tYm9yZGVyLXRvcC1hbHQ6c29saWQgI0FBQUFBQSAuNzVwdDsNCisgIG1zby1ib3JkZXItbGVmdC1hbHQ6c29saWQgI0FBQUFBQSAuNzVwdDttc28tYm9yZGVyLWFsdDpzb2xpZCAjQUFBQUFBIC43NXB0Ow0KKyAgcGFkZGluZzo1LjZwdCA1LjZwdCA1LjZwdCA1LjZwdCc+DQorICA8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPkZlc3RpdmFsTGl0ZTwvc3Bhbj48c3Bhbg0KKyAgc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisgIDwvdGQ+DQorIDwvdHI+DQorIDx0ciBzdHlsZT0nbXNvLXlmdGktaXJvdzoxMic+DQorICA8dGQgdmFsaWduPXRvcCBzdHlsZT0nYm9yZGVyOnNvbGlkICNBQUFBQUEgMS4wcHQ7Ym9yZGVyLXRvcDpub25lO21zby1ib3JkZXItdG9wLWFsdDoNCisgIHNvbGlkICNBQUFBQUEgLjc1cHQ7bXNvLWJvcmRlci1hbHQ6c29saWQgI0FBQUFBQSAuNzVwdDtwYWRkaW5nOjUuNnB0IDUuNnB0IDUuNnB0IDUuNnB0Jz4NCisgIDxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+ZnM8L3NwYW4+PHNwYW4NCisgIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorICA8L3RkPg0KKyAgPHRkIHZhbGlnbj10b3Agc3R5bGU9J2JvcmRlci10b3A6bm9uZTtib3JkZXItbGVmdDpub25lO2JvcmRlci1ib3R0b206c29saWQgI0FBQUFBQSAxLjBwdDsNCisgIGJvcmRlci1yaWdodDpzb2xpZCAjQUFBQUFBIDEuMHB0O21zby1ib3JkZXItdG9wLWFsdDpzb2xpZCAjQUFBQUFBIC43NXB0Ow0KKyAgbXNvLWJvcmRlci1sZWZ0LWFsdDpzb2xpZCAjQUFBQUFBIC43NXB0O21zby1ib3JkZXItYWx0OnNvbGlkICNBQUFBQUEgLjc1cHQ7DQorICBwYWRkaW5nOjUuNnB0IDUuNnB0IDUuNnB0IDUuNnB0Jz4NCisgIDxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+RnJlZWRvbVNjaWVudGlmaWM8L3NwYW4+PHNwYW4NCisgIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorICA8L3RkPg0KKyA8L3RyPg0KKyA8dHIgc3R5bGU9J21zby15ZnRpLWlyb3c6MTMnPg0KKyAgPHRkIHZhbGlnbj10b3Agc3R5bGU9J2JvcmRlcjpzb2xpZCAjQUFBQUFBIDEuMHB0O2JvcmRlci10b3A6bm9uZTttc28tYm9yZGVyLXRvcC1hbHQ6DQorICBzb2xpZCAjQUFBQUFBIC43NXB0O21zby1ib3JkZXItYWx0OnNvbGlkICNBQUFBQUEgLjc1cHQ7cGFkZGluZzo1LjZwdCA1LjZwdCA1LjZwdCA1LjZwdCc+DQorICA8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPmZ2PC9zcGFuPjxzcGFuDQorICBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKyAgPC90ZD4NCisgIDx0ZCB2YWxpZ249dG9wIHN0eWxlPSdib3JkZXItdG9wOm5vbmU7Ym9yZGVyLWxlZnQ6bm9uZTtib3JkZXItYm90dG9tOnNvbGlkICNBQUFBQUEgMS4wcHQ7DQorICBib3JkZXItcmlnaHQ6c29saWQgI0FBQUFBQSAxLjBwdDttc28tYm9yZGVyLXRvcC1hbHQ6c29saWQgI0FBQUFBQSAuNzVwdDsNCisgIG1zby1ib3JkZXItbGVmdC1hbHQ6c29saWQgI0FBQUFBQSAuNzVwdDttc28tYm9yZGVyLWFsdDpzb2xpZCAjQUFBQUFBIC43NXB0Ow0KKyAgcGFkZGluZzo1LjZwdCA1LjZwdCA1LjZwdCA1LjZwdCc+DQorICA8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPkZlc3RpdmFsPC9zcGFuPjxzcGFuDQorICBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKyAgPC90ZD4NCisgPC90cj4NCisgPHRyIHN0eWxlPSdtc28teWZ0aS1pcm93OjE0Jz4NCisgIDx0ZCB2YWxpZ249dG9wIHN0eWxlPSdib3JkZXI6c29saWQgI0FBQUFBQSAxLjBwdDtib3JkZXItdG9wOm5vbmU7bXNvLWJvcmRlci10b3AtYWx0Og0KKyAgc29saWQgI0FBQUFBQSAuNzVwdDttc28tYm9yZGVyLWFsdDpzb2xpZCAjQUFBQUFBIC43NXB0O3BhZGRpbmc6NS42cHQgNS42cHQgNS42cHQgNS42cHQnPg0KKyAgPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5nczwvc3Bhbj48c3Bhbg0KKyAgc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisgIDwvdGQ+DQorICA8dGQgdmFsaWduPXRvcCBzdHlsZT0nYm9yZGVyLXRvcDpub25lO2JvcmRlci1sZWZ0Om5vbmU7Ym9yZGVyLWJvdHRvbTpzb2xpZCAjQUFBQUFBIDEuMHB0Ow0KKyAgYm9yZGVyLXJpZ2h0OnNvbGlkICNBQUFBQUEgMS4wcHQ7bXNvLWJvcmRlci10b3AtYWx0OnNvbGlkICNBQUFBQUEgLjc1cHQ7DQorICBtc28tYm9yZGVyLWxlZnQtYWx0OnNvbGlkICNBQUFBQUEgLjc1cHQ7bXNvLWJvcmRlci1hbHQ6c29saWQgI0FBQUFBQSAuNzVwdDsNCisgIHBhZGRpbmc6NS42cHQgNS42cHQgNS42cHQgNS42cHQnPg0KKyAgPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5HZW5lcmljU2F5PC9zcGFuPjxzcGFuDQorICBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKyAgPC90ZD4NCisgPC90cj4NCisgPHRyIHN0eWxlPSdtc28teWZ0aS1pcm93OjE1Jz4NCisgIDx0ZCB2YWxpZ249dG9wIHN0eWxlPSdib3JkZXI6c29saWQgI0FBQUFBQSAxLjBwdDtib3JkZXItdG9wOm5vbmU7bXNvLWJvcmRlci10b3AtYWx0Og0KKyAgc29saWQgI0FBQUFBQSAuNzVwdDttc28tYm9yZGVyLWFsdDpzb2xpZCAjQUFBQUFBIC43NXB0O3BhZGRpbmc6NS42cHQgNS42cHQgNS42cHQgNS42cHQnPg0KKyAgPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5obTwvc3Bhbj48c3Bhbg0KKyAgc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisgIDwvdGQ+DQorICA8dGQgdmFsaWduPXRvcCBzdHlsZT0nYm9yZGVyLXRvcDpub25lO2JvcmRlci1sZWZ0Om5vbmU7Ym9yZGVyLWJvdHRvbTpzb2xpZCAjQUFBQUFBIDEuMHB0Ow0KKyAgYm9yZGVyLXJpZ2h0OnNvbGlkICNBQUFBQUEgMS4wcHQ7bXNvLWJvcmRlci10b3AtYWx0OnNvbGlkICNBQUFBQUEgLjc1cHQ7DQorICBtc28tYm9yZGVyLWxlZnQtYWx0OnNvbGlkICNBQUFBQUEgLjc1cHQ7bXNvLWJvcmRlci1hbHQ6c29saWQgI0FBQUFBQSAuNzVwdDsNCisgIHBhZGRpbmc6NS42cHQgNS42cHQgNS42cHQgNS42cHQnPg0KKyAgPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5ISU1TPC9zcGFuPjxzcGFuDQorICBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKyAgPC90ZD4NCisgPC90cj4NCisgPHRyIHN0eWxlPSdtc28teWZ0aS1pcm93OjE2Jz4NCisgIDx0ZCB2YWxpZ249dG9wIHN0eWxlPSdib3JkZXI6c29saWQgI0FBQUFBQSAxLjBwdDtib3JkZXItdG9wOm5vbmU7bXNvLWJvcmRlci10b3AtYWx0Og0KKyAgc29saWQgI0FBQUFBQSAuNzVwdDttc28tYm9yZGVyLWFsdDpzb2xpZCAjQUFBQUFBIC43NXB0O3BhZGRpbmc6NS42cHQgNS42cHQgNS42cHQgNS42cHQnPg0KKyAgPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5odDwvc3Bhbj48c3Bhbg0KKyAgc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisgIDwvdGQ+DQorICA8dGQgdmFsaWduPXRvcCBzdHlsZT0nYm9yZGVyLXRvcDpub25lO2JvcmRlci1sZWZ0Om5vbmU7Ym9yZGVyLWJvdHRvbTpzb2xpZCAjQUFBQUFBIDEuMHB0Ow0KKyAgYm9yZGVyLXJpZ2h0OnNvbGlkICNBQUFBQUEgMS4wcHQ7bXNvLWJvcmRlci10b3AtYWx0OnNvbGlkICNBQUFBQUEgLjc1cHQ7DQorICBtc28tYm9yZGVyLWxlZnQtYWx0OnNvbGlkICNBQUFBQUEgLjc1cHQ7bXNvLWJvcmRlci1hbHQ6c29saWQgI0FBQUFBQSAuNzVwdDsNCisgIHBhZGRpbmc6NS42cHQgNS42cHQgNS42cHQgNS42cHQnPg0KKyAgPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5IYW5keVRlY2g8L3NwYW4+PHNwYW4NCisgIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorICA8L3RkPg0KKyA8L3RyPg0KKyA8dHIgc3R5bGU9J21zby15ZnRpLWlyb3c6MTcnPg0KKyAgPHRkIHZhbGlnbj10b3Agc3R5bGU9J2JvcmRlcjpzb2xpZCAjQUFBQUFBIDEuMHB0O2JvcmRlci10b3A6bm9uZTttc28tYm9yZGVyLXRvcC1hbHQ6DQorICBzb2xpZCAjQUFBQUFBIC43NXB0O21zby1ib3JkZXItYWx0OnNvbGlkICNBQUFBQUEgLjc1cHQ7cGFkZGluZzo1LjZwdCA1LjZwdCA1LjZwdCA1LjZwdCc+DQorICA8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPmlsPC9zcGFuPjxzcGFuDQorICBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKyAgPC90ZD4NCisgIDx0ZCB2YWxpZ249dG9wIHN0eWxlPSdib3JkZXItdG9wOm5vbmU7Ym9yZGVyLWxlZnQ6bm9uZTtib3JkZXItYm90dG9tOnNvbGlkICNBQUFBQUEgMS4wcHQ7DQorICBib3JkZXItcmlnaHQ6c29saWQgI0FBQUFBQSAxLjBwdDttc28tYm9yZGVyLXRvcC1hbHQ6c29saWQgI0FBQUFBQSAuNzVwdDsNCisgIG1zby1ib3JkZXItbGVmdC1hbHQ6c29saWQgI0FBQUFBQSAuNzVwdDttc28tYm9yZGVyLWFsdDpzb2xpZCAjQUFBQUFBIC43NXB0Ow0KKyAgcGFkZGluZzo1LjZwdCA1LjZwdCA1LjZwdCA1LjZwdCc+DQorICA8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPklyaXNMaW51eDwvc3Bhbj48c3Bhbg0KKyAgc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisgIDwvdGQ+DQorIDwvdHI+DQorIDx0ciBzdHlsZT0nbXNvLXlmdGktaXJvdzoxOCc+DQorICA8dGQgdmFsaWduPXRvcCBzdHlsZT0nYm9yZGVyOnNvbGlkICNBQUFBQUEgMS4wcHQ7Ym9yZGVyLXRvcDpub25lO21zby1ib3JkZXItdG9wLWFsdDoNCisgIHNvbGlkICNBQUFBQUEgLjc1cHQ7bXNvLWJvcmRlci1hbHQ6c29saWQgI0FBQUFBQSAuNzVwdDtwYWRkaW5nOjUuNnB0IDUuNnB0IDUuNnB0IDUuNnB0Jz4NCisgIDxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+bGI8L3NwYW4+PHNwYW4NCisgIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorICA8L3RkPg0KKyAgPHRkIHZhbGlnbj10b3Agc3R5bGU9J2JvcmRlci10b3A6bm9uZTtib3JkZXItbGVmdDpub25lO2JvcmRlci1ib3R0b206c29saWQgI0FBQUFBQSAxLjBwdDsNCisgIGJvcmRlci1yaWdodDpzb2xpZCAjQUFBQUFBIDEuMHB0O21zby1ib3JkZXItdG9wLWFsdDpzb2xpZCAjQUFBQUFBIC43NXB0Ow0KKyAgbXNvLWJvcmRlci1sZWZ0LWFsdDpzb2xpZCAjQUFBQUFBIC43NXB0O21zby1ib3JkZXItYWx0OnNvbGlkICNBQUFBQUEgLjc1cHQ7DQorICBwYWRkaW5nOjUuNnB0IDUuNnB0IDUuNnB0IDUuNnB0Jz4NCisgIDxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+TGliYnJhaWxsZTwvc3Bhbj48c3Bhbg0KKyAgc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisgIDwvdGQ+DQorIDwvdHI+DQorIDx0ciBzdHlsZT0nbXNvLXlmdGktaXJvdzoxOSc+DQorICA8dGQgdmFsaWduPXRvcCBzdHlsZT0nYm9yZGVyOnNvbGlkICNBQUFBQUEgMS4wcHQ7Ym9yZGVyLXRvcDpub25lO21zby1ib3JkZXItdG9wLWFsdDoNCisgIHNvbGlkICNBQUFBQUEgLjc1cHQ7bXNvLWJvcmRlci1hbHQ6c29saWQgI0FBQUFBQSAuNzVwdDtwYWRkaW5nOjUuNnB0IDUuNnB0IDUuNnB0IDUuNnB0Jz4NCisgIDxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+bHQ8L3NwYW4+PHNwYW4NCisgIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorICA8L3RkPg0KKyAgPHRkIHZhbGlnbj10b3Agc3R5bGU9J2JvcmRlci10b3A6bm9uZTtib3JkZXItbGVmdDpub25lO2JvcmRlci1ib3R0b206c29saWQgI0FBQUFBQSAxLjBwdDsNCisgIGJvcmRlci1yaWdodDpzb2xpZCAjQUFBQUFBIDEuMHB0O21zby1ib3JkZXItdG9wLWFsdDpzb2xpZCAjQUFBQUFBIC43NXB0Ow0KKyAgbXNvLWJvcmRlci1sZWZ0LWFsdDpzb2xpZCAjQUFBQUFBIC43NXB0O21zby1ib3JkZXItYWx0OnNvbGlkICNBQUFBQUEgLjc1cHQ7DQorICBwYWRkaW5nOjUuNnB0IDUuNnB0IDUuNnB0IDUuNnB0Jz4NCisgIDxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+TG9nVGV4dDwvc3Bhbj48c3Bhbg0KKyAgc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisgIDwvdGQ+DQorIDwvdHI+DQorIDx0ciBzdHlsZT0nbXNvLXlmdGktaXJvdzoyMCc+DQorICA8dGQgdmFsaWduPXRvcCBzdHlsZT0nYm9yZGVyOnNvbGlkICNBQUFBQUEgMS4wcHQ7Ym9yZGVyLXRvcDpub25lO21zby1ib3JkZXItdG9wLWFsdDoNCisgIHNvbGlkICNBQUFBQUEgLjc1cHQ7bXNvLWJvcmRlci1hbHQ6c29saWQgI0FBQUFBQSAuNzVwdDtwYWRkaW5nOjUuNnB0IDUuNnB0IDUuNnB0IDUuNnB0Jz4NCisgIDxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+bWI8L3NwYW4+PHNwYW4NCisgIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorICA8L3RkPg0KKyAgPHRkIHZhbGlnbj10b3Agc3R5bGU9J2JvcmRlci10b3A6bm9uZTtib3JkZXItbGVmdDpub25lO2JvcmRlci1ib3R0b206c29saWQgI0FBQUFBQSAxLjBwdDsNCisgIGJvcmRlci1yaWdodDpzb2xpZCAjQUFBQUFBIDEuMHB0O21zby1ib3JkZXItdG9wLWFsdDpzb2xpZCAjQUFBQUFBIC43NXB0Ow0KKyAgbXNvLWJvcmRlci1sZWZ0LWFsdDpzb2xpZCAjQUFBQUFBIC43NXB0O21zby1ib3JkZXItYWx0OnNvbGlkICNBQUFBQUEgLjc1cHQ7DQorICBwYWRkaW5nOjUuNnB0IDUuNnB0IDUuNnB0IDUuNnB0Jz4NCisgIDxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+TXVsdGlCcmFpbGxlPC9zcGFuPjxzcGFuDQorICBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKyAgPC90ZD4NCisgPC90cj4NCisgPHRyIHN0eWxlPSdtc28teWZ0aS1pcm93OjIxJz4NCisgIDx0ZCB2YWxpZ249dG9wIHN0eWxlPSdib3JkZXI6c29saWQgI0FBQUFBQSAxLjBwdDtib3JkZXItdG9wOm5vbmU7bXNvLWJvcmRlci10b3AtYWx0Og0KKyAgc29saWQgI0FBQUFBQSAuNzVwdDttc28tYm9yZGVyLWFsdDpzb2xpZCAjQUFBQUFBIC43NXB0O3BhZGRpbmc6NS42cHQgNS42cHQgNS42cHQgNS42cHQnPg0KKyAgPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5tZDwvc3Bhbj48c3Bhbg0KKyAgc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisgIDwvdGQ+DQorICA8dGQgdmFsaWduPXRvcCBzdHlsZT0nYm9yZGVyLXRvcDpub25lO2JvcmRlci1sZWZ0Om5vbmU7Ym9yZGVyLWJvdHRvbTpzb2xpZCAjQUFBQUFBIDEuMHB0Ow0KKyAgYm9yZGVyLXJpZ2h0OnNvbGlkICNBQUFBQUEgMS4wcHQ7bXNvLWJvcmRlci10b3AtYWx0OnNvbGlkICNBQUFBQUEgLjc1cHQ7DQorICBtc28tYm9yZGVyLWxlZnQtYWx0OnNvbGlkICNBQUFBQUEgLjc1cHQ7bXNvLWJvcmRlci1hbHQ6c29saWQgI0FBQUFBQSAuNzVwdDsNCisgIHBhZGRpbmc6NS42cHQgNS42cHQgNS42cHQgNS42cHQnPg0KKyAgPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5NRFY8L3NwYW4+PHNwYW4NCisgIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorICA8L3RkPg0KKyA8L3RyPg0KKyA8dHIgc3R5bGU9J21zby15ZnRpLWlyb3c6MjInPg0KKyAgPHRkIHZhbGlnbj10b3Agc3R5bGU9J2JvcmRlcjpzb2xpZCAjQUFBQUFBIDEuMHB0O2JvcmRlci10b3A6bm9uZTttc28tYm9yZGVyLXRvcC1hbHQ6DQorICBzb2xpZCAjQUFBQUFBIC43NXB0O21zby1ib3JkZXItYWx0OnNvbGlkICNBQUFBQUEgLjc1cHQ7cGFkZGluZzo1LjZwdCA1LjZwdCA1LjZwdCA1LjZwdCc+DQorICA8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPm1uPC9zcGFuPjxzcGFuDQorICBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKyAgPC90ZD4NCisgIDx0ZCB2YWxpZ249dG9wIHN0eWxlPSdib3JkZXItdG9wOm5vbmU7Ym9yZGVyLWxlZnQ6bm9uZTtib3JkZXItYm90dG9tOnNvbGlkICNBQUFBQUEgMS4wcHQ7DQorICBib3JkZXItcmlnaHQ6c29saWQgI0FBQUFBQSAxLjBwdDttc28tYm9yZGVyLXRvcC1hbHQ6c29saWQgI0FBQUFBQSAuNzVwdDsNCisgIG1zby1ib3JkZXItbGVmdC1hbHQ6c29saWQgI0FBQUFBQSAuNzVwdDttc28tYm9yZGVyLWFsdDpzb2xpZCAjQUFBQUFBIC43NXB0Ow0KKyAgcGFkZGluZzo1LjZwdCA1LjZwdCA1LjZwdCA1LjZwdCc+DQorICA8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPk1pbmlCcmFpbGxlPC9zcGFuPjxzcGFuDQorICBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKyAgPC90ZD4NCisgPC90cj4NCisgPHRyIHN0eWxlPSdtc28teWZ0aS1pcm93OjIzJz4NCisgIDx0ZCB2YWxpZ249dG9wIHN0eWxlPSdib3JkZXI6c29saWQgI0FBQUFBQSAxLjBwdDtib3JkZXItdG9wOm5vbmU7bXNvLWJvcmRlci10b3AtYWx0Og0KKyAgc29saWQgI0FBQUFBQSAuNzVwdDttc28tYm9yZGVyLWFsdDpzb2xpZCAjQUFBQUFBIC43NXB0O3BhZGRpbmc6NS42cHQgNS42cHQgNS42cHQgNS42cHQnPg0KKyAgPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5tcDwvc3Bhbj48c3Bhbg0KKyAgc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisgIDwvdGQ+DQorICA8dGQgdmFsaWduPXRvcCBzdHlsZT0nYm9yZGVyLXRvcDpub25lO2JvcmRlci1sZWZ0Om5vbmU7Ym9yZGVyLWJvdHRvbTpzb2xpZCAjQUFBQUFBIDEuMHB0Ow0KKyAgYm9yZGVyLXJpZ2h0OnNvbGlkICNBQUFBQUEgMS4wcHQ7bXNvLWJvcmRlci10b3AtYWx0OnNvbGlkICNBQUFBQUEgLjc1cHQ7DQorICBtc28tYm9yZGVyLWxlZnQtYWx0OnNvbGlkICNBQUFBQUEgLjc1cHQ7bXNvLWJvcmRlci1hbHQ6c29saWQgI0FBQUFBQSAuNzVwdDsNCisgIHBhZGRpbmc6NS42cHQgNS42cHQgNS42cHQgNS42cHQnPg0KKyAgPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5NaWtyb3B1aGU8L3NwYW4+PHNwYW4NCisgIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorICA8L3RkPg0KKyA8L3RyPg0KKyA8dHIgc3R5bGU9J21zby15ZnRpLWlyb3c6MjQnPg0KKyAgPHRkIHZhbGlnbj10b3Agc3R5bGU9J2JvcmRlcjpzb2xpZCAjQUFBQUFBIDEuMHB0O2JvcmRlci10b3A6bm9uZTttc28tYm9yZGVyLXRvcC1hbHQ6DQorICBzb2xpZCAjQUFBQUFBIC43NXB0O21zby1ib3JkZXItYWx0OnNvbGlkICNBQUFBQUEgLjc1cHQ7cGFkZGluZzo1LjZwdCA1LjZwdCA1LjZwdCA1LjZwdCc+DQorICA8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPm10PC9zcGFuPjxzcGFuDQorICBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKyAgPC90ZD4NCisgIDx0ZCB2YWxpZ249dG9wIHN0eWxlPSdib3JkZXItdG9wOm5vbmU7Ym9yZGVyLWxlZnQ6bm9uZTtib3JkZXItYm90dG9tOnNvbGlkICNBQUFBQUEgMS4wcHQ7DQorICBib3JkZXItcmlnaHQ6c29saWQgI0FBQUFBQSAxLjBwdDttc28tYm9yZGVyLXRvcC1hbHQ6c29saWQgI0FBQUFBQSAuNzVwdDsNCisgIG1zby1ib3JkZXItbGVmdC1hbHQ6c29saWQgI0FBQUFBQSAuNzVwdDttc28tYm9yZGVyLWFsdDpzb2xpZCAjQUFBQUFBIC43NXB0Ow0KKyAgcGFkZGluZzo1LjZwdCA1LjZwdCA1LjZwdCA1LjZwdCc+DQorICA8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPk1ldGVjPC9zcGFuPjxzcGFuDQorICBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKyAgPC90ZD4NCisgPC90cj4NCisgPHRyIHN0eWxlPSdtc28teWZ0aS1pcm93OjI1Jz4NCisgIDx0ZCB2YWxpZ249dG9wIHN0eWxlPSdib3JkZXI6c29saWQgI0FBQUFBQSAxLjBwdDtib3JkZXItdG9wOm5vbmU7bXNvLWJvcmRlci10b3AtYWx0Og0KKyAgc29saWQgI0FBQUFBQSAuNzVwdDttc28tYm9yZGVyLWFsdDpzb2xpZCAjQUFBQUFBIC43NXB0O3BhZGRpbmc6NS42cHQgNS42cHQgNS42cHQgNS42cHQnPg0KKyAgPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5ubzwvc3Bhbj48c3Bhbg0KKyAgc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisgIDwvdGQ+DQorICA8dGQgdmFsaWduPXRvcCBzdHlsZT0nYm9yZGVyLXRvcDpub25lO2JvcmRlci1sZWZ0Om5vbmU7Ym9yZGVyLWJvdHRvbTpzb2xpZCAjQUFBQUFBIDEuMHB0Ow0KKyAgYm9yZGVyLXJpZ2h0OnNvbGlkICNBQUFBQUEgMS4wcHQ7bXNvLWJvcmRlci10b3AtYWx0OnNvbGlkICNBQUFBQUEgLjc1cHQ7DQorICBtc28tYm9yZGVyLWxlZnQtYWx0OnNvbGlkICNBQUFBQUEgLjc1cHQ7bXNvLWJvcmRlci1hbHQ6c29saWQgI0FBQUFBQSAuNzVwdDsNCisgIHBhZGRpbmc6NS42cHQgNS42cHQgNS42cHQgNS42cHQnPg0KKyAgPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5ubyBkcml2ZXI8L3NwYW4+PHNwYW4NCisgIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorICA8L3RkPg0KKyA8L3RyPg0KKyA8dHIgc3R5bGU9J21zby15ZnRpLWlyb3c6MjYnPg0KKyAgPHRkIHZhbGlnbj10b3Agc3R5bGU9J2JvcmRlcjpzb2xpZCAjQUFBQUFBIDEuMHB0O2JvcmRlci10b3A6bm9uZTttc28tYm9yZGVyLXRvcC1hbHQ6DQorICBzb2xpZCAjQUFBQUFBIC43NXB0O21zby1ib3JkZXItYWx0OnNvbGlkICNBQUFBQUEgLjc1cHQ7cGFkZGluZzo1LjZwdCA1LjZwdCA1LjZwdCA1LjZwdCc+DQorICA8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPnBnPC9zcGFuPjxzcGFuDQorICBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKyAgPC90ZD4NCisgIDx0ZCB2YWxpZ249dG9wIHN0eWxlPSdib3JkZXItdG9wOm5vbmU7Ym9yZGVyLWxlZnQ6bm9uZTtib3JkZXItYm90dG9tOnNvbGlkICNBQUFBQUEgMS4wcHQ7DQorICBib3JkZXItcmlnaHQ6c29saWQgI0FBQUFBQSAxLjBwdDttc28tYm9yZGVyLXRvcC1hbHQ6c29saWQgI0FBQUFBQSAuNzVwdDsNCisgIG1zby1ib3JkZXItbGVmdC1hbHQ6c29saWQgI0FBQUFBQSAuNzVwdDttc28tYm9yZGVyLWFsdDpzb2xpZCAjQUFBQUFBIC43NXB0Ow0KKyAgcGFkZGluZzo1LjZwdCA1LjZwdCA1LjZwdCA1LjZwdCc+DQorICA8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPlBlZ2FzdXM8L3NwYW4+PHNwYW4NCisgIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorICA8L3RkPg0KKyA8L3RyPg0KKyA8dHIgc3R5bGU9J21zby15ZnRpLWlyb3c6MjcnPg0KKyAgPHRkIHZhbGlnbj10b3Agc3R5bGU9J2JvcmRlcjpzb2xpZCAjQUFBQUFBIDEuMHB0O2JvcmRlci10b3A6bm9uZTttc28tYm9yZGVyLXRvcC1hbHQ6DQorICBzb2xpZCAjQUFBQUFBIC43NXB0O21zby1ib3JkZXItYWx0OnNvbGlkICNBQUFBQUEgLjc1cHQ7cGFkZGluZzo1LjZwdCA1LjZwdCA1LjZwdCA1LjZwdCc+DQorICA8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPnBtPC9zcGFuPjxzcGFuDQorICBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKyAgPC90ZD4NCisgIDx0ZCB2YWxpZ249dG9wIHN0eWxlPSdib3JkZXItdG9wOm5vbmU7Ym9yZGVyLWxlZnQ6bm9uZTtib3JkZXItYm90dG9tOnNvbGlkICNBQUFBQUEgMS4wcHQ7DQorICBib3JkZXItcmlnaHQ6c29saWQgI0FBQUFBQSAxLjBwdDttc28tYm9yZGVyLXRvcC1hbHQ6c29saWQgI0FBQUFBQSAuNzVwdDsNCisgIG1zby1ib3JkZXItbGVmdC1hbHQ6c29saWQgI0FBQUFBQSAuNzVwdDttc28tYm9yZGVyLWFsdDpzb2xpZCAjQUFBQUFBIC43NXB0Ow0KKyAgcGFkZGluZzo1LjZwdCA1LjZwdCA1LjZwdCA1LjZwdCc+DQorICA8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPlBhcGVubWVpZXI8L3NwYW4+PHNwYW4NCisgIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorICA8L3RkPg0KKyA8L3RyPg0KKyA8dHIgc3R5bGU9J21zby15ZnRpLWlyb3c6MjgnPg0KKyAgPHRkIHZhbGlnbj10b3Agc3R5bGU9J2JvcmRlcjpzb2xpZCAjQUFBQUFBIDEuMHB0O2JvcmRlci10b3A6bm9uZTttc28tYm9yZGVyLXRvcC1hbHQ6DQorICBzb2xpZCAjQUFBQUFBIC43NXB0O21zby1ib3JkZXItYWx0OnNvbGlkICNBQUFBQUEgLjc1cHQ7cGFkZGluZzo1LjZwdCA1LjZwdCA1LjZwdCA1LjZwdCc+DQorICA8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPnNkPC9zcGFuPjxzcGFuDQorICBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKyAgPC90ZD4NCisgIDx0ZCB2YWxpZ249dG9wIHN0eWxlPSdib3JkZXItdG9wOm5vbmU7Ym9yZGVyLWxlZnQ6bm9uZTtib3JkZXItYm90dG9tOnNvbGlkICNBQUFBQUEgMS4wcHQ7DQorICBib3JkZXItcmlnaHQ6c29saWQgI0FBQUFBQSAxLjBwdDttc28tYm9yZGVyLXRvcC1hbHQ6c29saWQgI0FBQUFBQSAuNzVwdDsNCisgIG1zby1ib3JkZXItbGVmdC1hbHQ6c29saWQgI0FBQUFBQSAuNzVwdDttc28tYm9yZGVyLWFsdDpzb2xpZCAjQUFBQUFBIC43NXB0Ow0KKyAgcGFkZGluZzo1LjZwdCA1LjZwdCA1LjZwdCA1LjZwdCc+DQorICA8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPlNwZWVjaERpc3BhdGNoZXI8L3NwYW4+PHNwYW4NCisgIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorICA8L3RkPg0KKyA8L3RyPg0KKyA8dHIgc3R5bGU9J21zby15ZnRpLWlyb3c6MjknPg0KKyAgPHRkIHZhbGlnbj10b3Agc3R5bGU9J2JvcmRlcjpzb2xpZCAjQUFBQUFBIDEuMHB0O2JvcmRlci10b3A6bm9uZTttc28tYm9yZGVyLXRvcC1hbHQ6DQorICBzb2xpZCAjQUFBQUFBIC43NXB0O21zby1ib3JkZXItYWx0OnNvbGlkICNBQUFBQUEgLjc1cHQ7cGFkZGluZzo1LjZwdCA1LjZwdCA1LjZwdCA1LjZwdCc+DQorICA8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPnNrPC9zcGFuPjxzcGFuDQorICBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKyAgPC90ZD4NCisgIDx0ZCB2YWxpZ249dG9wIHN0eWxlPSdib3JkZXItdG9wOm5vbmU7Ym9yZGVyLWxlZnQ6bm9uZTtib3JkZXItYm90dG9tOnNvbGlkICNBQUFBQUEgMS4wcHQ7DQorICBib3JkZXItcmlnaHQ6c29saWQgI0FBQUFBQSAxLjBwdDttc28tYm9yZGVyLXRvcC1hbHQ6c29saWQgI0FBQUFBQSAuNzVwdDsNCisgIG1zby1ib3JkZXItbGVmdC1hbHQ6c29saWQgI0FBQUFBQSAuNzVwdDttc28tYm9yZGVyLWFsdDpzb2xpZCAjQUFBQUFBIC43NXB0Ow0KKyAgcGFkZGluZzo1LjZwdCA1LjZwdCA1LjZwdCA1LjZwdCc+DQorICA8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPlNlaWthPC9zcGFuPjxzcGFuDQorICBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKyAgPC90ZD4NCisgPC90cj4NCisgPHRyIHN0eWxlPSdtc28teWZ0aS1pcm93OjMwJz4NCisgIDx0ZCB2YWxpZ249dG9wIHN0eWxlPSdib3JkZXI6c29saWQgI0FBQUFBQSAxLjBwdDtib3JkZXItdG9wOm5vbmU7bXNvLWJvcmRlci10b3AtYWx0Og0KKyAgc29saWQgI0FBQUFBQSAuNzVwdDttc28tYm9yZGVyLWFsdDpzb2xpZCAjQUFBQUFBIC43NXB0O3BhZGRpbmc6NS42cHQgNS42cHQgNS42cHQgNS42cHQnPg0KKyAgPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5zdzwvc3Bhbj48c3Bhbg0KKyAgc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisgIDwvdGQ+DQorICA8dGQgdmFsaWduPXRvcCBzdHlsZT0nYm9yZGVyLXRvcDpub25lO2JvcmRlci1sZWZ0Om5vbmU7Ym9yZGVyLWJvdHRvbTpzb2xpZCAjQUFBQUFBIDEuMHB0Ow0KKyAgYm9yZGVyLXJpZ2h0OnNvbGlkICNBQUFBQUEgMS4wcHQ7bXNvLWJvcmRlci10b3AtYWx0OnNvbGlkICNBQUFBQUEgLjc1cHQ7DQorICBtc28tYm9yZGVyLWxlZnQtYWx0OnNvbGlkICNBQUFBQUEgLjc1cHQ7bXNvLWJvcmRlci1hbHQ6c29saWQgI0FBQUFBQSAuNzVwdDsNCisgIHBhZGRpbmc6NS42cHQgNS42cHQgNS42cHQgNS42cHQnPg0KKyAgPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5Td2lmdDwvc3Bhbj48c3Bhbg0KKyAgc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisgIDwvdGQ+DQorIDwvdHI+DQorIDx0ciBzdHlsZT0nbXNvLXlmdGktaXJvdzozMSc+DQorICA8dGQgdmFsaWduPXRvcCBzdHlsZT0nYm9yZGVyOnNvbGlkICNBQUFBQUEgMS4wcHQ7Ym9yZGVyLXRvcDpub25lO21zby1ib3JkZXItdG9wLWFsdDoNCisgIHNvbGlkICNBQUFBQUEgLjc1cHQ7bXNvLWJvcmRlci1hbHQ6c29saWQgI0FBQUFBQSAuNzVwdDtwYWRkaW5nOjUuNnB0IDUuNnB0IDUuNnB0IDUuNnB0Jz4NCisgIDxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+dGg8L3NwYW4+PHNwYW4NCisgIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorICA8L3RkPg0KKyAgPHRkIHZhbGlnbj10b3Agc3R5bGU9J2JvcmRlci10b3A6bm9uZTtib3JkZXItbGVmdDpub25lO2JvcmRlci1ib3R0b206c29saWQgI0FBQUFBQSAxLjBwdDsNCisgIGJvcmRlci1yaWdodDpzb2xpZCAjQUFBQUFBIDEuMHB0O21zby1ib3JkZXItdG9wLWFsdDpzb2xpZCAjQUFBQUFBIC43NXB0Ow0KKyAgbXNvLWJvcmRlci1sZWZ0LWFsdDpzb2xpZCAjQUFBQUFBIC43NXB0O21zby1ib3JkZXItYWx0OnNvbGlkICNBQUFBQUEgLjc1cHQ7DQorICBwYWRkaW5nOjUuNnB0IDUuNnB0IDUuNnB0IDUuNnB0Jz4NCisgIDxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+VGhldGE8L3NwYW4+PHNwYW4NCisgIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorICA8L3RkPg0KKyA8L3RyPg0KKyA8dHIgc3R5bGU9J21zby15ZnRpLWlyb3c6MzInPg0KKyAgPHRkIHZhbGlnbj10b3Agc3R5bGU9J2JvcmRlcjpzb2xpZCAjQUFBQUFBIDEuMHB0O2JvcmRlci10b3A6bm9uZTttc28tYm9yZGVyLXRvcC1hbHQ6DQorICBzb2xpZCAjQUFBQUFBIC43NXB0O21zby1ib3JkZXItYWx0OnNvbGlkICNBQUFBQUEgLjc1cHQ7cGFkZGluZzo1LjZwdCA1LjZwdCA1LjZwdCA1LjZwdCc+DQorICA8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPnRzPC9zcGFuPjxzcGFuDQorICBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKyAgPC90ZD4NCisgIDx0ZCB2YWxpZ249dG9wIHN0eWxlPSdib3JkZXItdG9wOm5vbmU7Ym9yZGVyLWxlZnQ6bm9uZTtib3JkZXItYm90dG9tOnNvbGlkICNBQUFBQUEgMS4wcHQ7DQorICBib3JkZXItcmlnaHQ6c29saWQgI0FBQUFBQSAxLjBwdDttc28tYm9yZGVyLXRvcC1hbHQ6c29saWQgI0FBQUFBQSAuNzVwdDsNCisgIG1zby1ib3JkZXItbGVmdC1hbHQ6c29saWQgI0FBQUFBQSAuNzVwdDttc28tYm9yZGVyLWFsdDpzb2xpZCAjQUFBQUFBIC43NXB0Ow0KKyAgcGFkZGluZzo1LjZwdCA1LjZwdCA1LjZwdCA1LjZwdCc+DQorICA8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPlRlbGVzZW5zb3J5IFN5c3RlbXMgSW5jLjwvc3Bhbj48c3Bhbg0KKyAgc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisgIDwvdGQ+DQorIDwvdHI+DQorIDx0ciBzdHlsZT0nbXNvLXlmdGktaXJvdzozMyc+DQorICA8dGQgdmFsaWduPXRvcCBzdHlsZT0nYm9yZGVyOnNvbGlkICNBQUFBQUEgMS4wcHQ7Ym9yZGVyLXRvcDpub25lO21zby1ib3JkZXItdG9wLWFsdDoNCisgIHNvbGlkICNBQUFBQUEgLjc1cHQ7bXNvLWJvcmRlci1hbHQ6c29saWQgI0FBQUFBQSAuNzVwdDtwYWRkaW5nOjUuNnB0IDUuNnB0IDUuNnB0IDUuNnB0Jz4NCisgIDxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+dHQ8L3NwYW4+PHNwYW4NCisgIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorICA8L3RkPg0KKyAgPHRkIHZhbGlnbj10b3Agc3R5bGU9J2JvcmRlci10b3A6bm9uZTtib3JkZXItbGVmdDpub25lO2JvcmRlci1ib3R0b206c29saWQgI0FBQUFBQSAxLjBwdDsNCisgIGJvcmRlci1yaWdodDpzb2xpZCAjQUFBQUFBIDEuMHB0O21zby1ib3JkZXItdG9wLWFsdDpzb2xpZCAjQUFBQUFBIC43NXB0Ow0KKyAgbXNvLWJvcmRlci1sZWZ0LWFsdDpzb2xpZCAjQUFBQUFBIC43NXB0O21zby1ib3JkZXItYWx0OnNvbGlkICNBQUFBQUEgLjc1cHQ7DQorICBwYWRkaW5nOjUuNnB0IDUuNnB0IDUuNnB0IDUuNnB0Jz4NCisgIDxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+VFRZPC9zcGFuPjxzcGFuDQorICBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKyAgPC90ZD4NCisgPC90cj4NCisgPHRyIHN0eWxlPSdtc28teWZ0aS1pcm93OjM0Jz4NCisgIDx0ZCB2YWxpZ249dG9wIHN0eWxlPSdib3JkZXI6c29saWQgI0FBQUFBQSAxLjBwdDtib3JkZXItdG9wOm5vbmU7bXNvLWJvcmRlci10b3AtYWx0Og0KKyAgc29saWQgI0FBQUFBQSAuNzVwdDttc28tYm9yZGVyLWFsdDpzb2xpZCAjQUFBQUFBIC43NXB0O3BhZGRpbmc6NS42cHQgNS42cHQgNS42cHQgNS42cHQnPg0KKyAgPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz52ZDwvc3Bhbj48c3Bhbg0KKyAgc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisgIDwvdGQ+DQorICA8dGQgdmFsaWduPXRvcCBzdHlsZT0nYm9yZGVyLXRvcDpub25lO2JvcmRlci1sZWZ0Om5vbmU7Ym9yZGVyLWJvdHRvbTpzb2xpZCAjQUFBQUFBIDEuMHB0Ow0KKyAgYm9yZGVyLXJpZ2h0OnNvbGlkICNBQUFBQUEgMS4wcHQ7bXNvLWJvcmRlci10b3AtYWx0OnNvbGlkICNBQUFBQUEgLjc1cHQ7DQorICBtc28tYm9yZGVyLWxlZnQtYWx0OnNvbGlkICNBQUFBQUEgLjc1cHQ7bXNvLWJvcmRlci1hbHQ6c29saWQgI0FBQUFBQSAuNzVwdDsNCisgIHBhZGRpbmc6NS42cHQgNS42cHQgNS42cHQgNS42cHQnPg0KKyAgPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5WaWRlb0JyYWlsbGU8L3NwYW4+PHNwYW4NCisgIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorICA8L3RkPg0KKyA8L3RyPg0KKyA8dHIgc3R5bGU9J21zby15ZnRpLWlyb3c6MzUnPg0KKyAgPHRkIHZhbGlnbj10b3Agc3R5bGU9J2JvcmRlcjpzb2xpZCAjQUFBQUFBIDEuMHB0O2JvcmRlci10b3A6bm9uZTttc28tYm9yZGVyLXRvcC1hbHQ6DQorICBzb2xpZCAjQUFBQUFBIC43NXB0O21zby1ib3JkZXItYWx0OnNvbGlkICNBQUFBQUEgLjc1cHQ7cGFkZGluZzo1LjZwdCA1LjZwdCA1LjZwdCA1LjZwdCc+DQorICA8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPnZvPC9zcGFuPjxzcGFuDQorICBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKyAgPC90ZD4NCisgIDx0ZCB2YWxpZ249dG9wIHN0eWxlPSdib3JkZXItdG9wOm5vbmU7Ym9yZGVyLWxlZnQ6bm9uZTtib3JkZXItYm90dG9tOnNvbGlkICNBQUFBQUEgMS4wcHQ7DQorICBib3JkZXItcmlnaHQ6c29saWQgI0FBQUFBQSAxLjBwdDttc28tYm9yZGVyLXRvcC1hbHQ6c29saWQgI0FBQUFBQSAuNzVwdDsNCisgIG1zby1ib3JkZXItbGVmdC1hbHQ6c29saWQgI0FBQUFBQSAuNzVwdDttc28tYm9yZGVyLWFsdDpzb2xpZCAjQUFBQUFBIC43NXB0Ow0KKyAgcGFkZGluZzo1LjZwdCA1LjZwdCA1LjZwdCA1LjZwdCc+DQorICA8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPlZveWFnZXI8L3NwYW4+PHNwYW4NCisgIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorICA8L3RkPg0KKyA8L3RyPg0KKyA8dHIgc3R5bGU9J21zby15ZnRpLWlyb3c6MzYnPg0KKyAgPHRkIHZhbGlnbj10b3Agc3R5bGU9J2JvcmRlcjpzb2xpZCAjQUFBQUFBIDEuMHB0O2JvcmRlci10b3A6bm9uZTttc28tYm9yZGVyLXRvcC1hbHQ6DQorICBzb2xpZCAjQUFBQUFBIC43NXB0O21zby1ib3JkZXItYWx0OnNvbGlkICNBQUFBQUEgLjc1cHQ7cGFkZGluZzo1LjZwdCA1LjZwdCA1LjZwdCA1LjZwdCc+DQorICA8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPnZyPC9zcGFuPjxzcGFuDQorICBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKyAgPC90ZD4NCisgIDx0ZCB2YWxpZ249dG9wIHN0eWxlPSdib3JkZXItdG9wOm5vbmU7Ym9yZGVyLWxlZnQ6bm9uZTtib3JkZXItYm90dG9tOnNvbGlkICNBQUFBQUEgMS4wcHQ7DQorICBib3JkZXItcmlnaHQ6c29saWQgI0FBQUFBQSAxLjBwdDttc28tYm9yZGVyLXRvcC1hbHQ6c29saWQgI0FBQUFBQSAuNzVwdDsNCisgIG1zby1ib3JkZXItbGVmdC1hbHQ6c29saWQgI0FBQUFBQSAuNzVwdDttc28tYm9yZGVyLWFsdDpzb2xpZCAjQUFBQUFBIC43NXB0Ow0KKyAgcGFkZGluZzo1LjZwdCA1LjZwdCA1LjZwdCA1LjZwdCc+DQorICA8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPlZpcnR1YWw8L3NwYW4+PHNwYW4NCisgIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorICA8L3RkPg0KKyA8L3RyPg0KKyA8dHIgc3R5bGU9J21zby15ZnRpLWlyb3c6MzcnPg0KKyAgPHRkIHZhbGlnbj10b3Agc3R5bGU9J2JvcmRlcjpzb2xpZCAjQUFBQUFBIDEuMHB0O2JvcmRlci10b3A6bm9uZTttc28tYm9yZGVyLXRvcC1hbHQ6DQorICBzb2xpZCAjQUFBQUFBIC43NXB0O21zby1ib3JkZXItYWx0OnNvbGlkICNBQUFBQUEgLjc1cHQ7cGFkZGluZzo1LjZwdCA1LjZwdCA1LjZwdCA1LjZwdCc+DQorICA8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPnZzPC9zcGFuPjxzcGFuDQorICBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKyAgPC90ZD4NCisgIDx0ZCB2YWxpZ249dG9wIHN0eWxlPSdib3JkZXItdG9wOm5vbmU7Ym9yZGVyLWxlZnQ6bm9uZTtib3JkZXItYm90dG9tOnNvbGlkICNBQUFBQUEgMS4wcHQ7DQorICBib3JkZXItcmlnaHQ6c29saWQgI0FBQUFBQSAxLjBwdDttc28tYm9yZGVyLXRvcC1hbHQ6c29saWQgI0FBQUFBQSAuNzVwdDsNCisgIG1zby1ib3JkZXItbGVmdC1hbHQ6c29saWQgI0FBQUFBQSAuNzVwdDttc28tYm9yZGVyLWFsdDpzb2xpZCAjQUFBQUFBIC43NXB0Ow0KKyAgcGFkZGluZzo1LjZwdCA1LjZwdCA1LjZwdCA1LjZwdCc+DQorICA8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPlZpc2lvQnJhaWxsZTwvc3Bhbj48c3Bhbg0KKyAgc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisgIDwvdGQ+DQorIDwvdHI+DQorIDx0ciBzdHlsZT0nbXNvLXlmdGktaXJvdzozOCc+DQorICA8dGQgdmFsaWduPXRvcCBzdHlsZT0nYm9yZGVyOnNvbGlkICNBQUFBQUEgMS4wcHQ7Ym9yZGVyLXRvcDpub25lO21zby1ib3JkZXItdG9wLWFsdDoNCisgIHNvbGlkICNBQUFBQUEgLjc1cHQ7bXNvLWJvcmRlci1hbHQ6c29saWQgI0FBQUFBQSAuNzVwdDtwYWRkaW5nOjUuNnB0IDUuNnB0IDUuNnB0IDUuNnB0Jz4NCisgIDxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+dnY8L3NwYW4+PHNwYW4NCisgIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorICA8L3RkPg0KKyAgPHRkIHZhbGlnbj10b3Agc3R5bGU9J2JvcmRlci10b3A6bm9uZTtib3JkZXItbGVmdDpub25lO2JvcmRlci1ib3R0b206c29saWQgI0FBQUFBQSAxLjBwdDsNCisgIGJvcmRlci1yaWdodDpzb2xpZCAjQUFBQUFBIDEuMHB0O21zby1ib3JkZXItdG9wLWFsdDpzb2xpZCAjQUFBQUFBIC43NXB0Ow0KKyAgbXNvLWJvcmRlci1sZWZ0LWFsdDpzb2xpZCAjQUFBQUFBIC43NXB0O21zby1ib3JkZXItYWx0OnNvbGlkICNBQUFBQUEgLjc1cHQ7DQorICBwYWRkaW5nOjUuNnB0IDUuNnB0IDUuNnB0IDUuNnB0Jz4NCisgIDxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjExLjBwdCc+VmlhVm9pY2U8L3NwYW4+PHNwYW4NCisgIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToiQ291cmllciBOZXciJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorICA8L3RkPg0KKyA8L3RyPg0KKyA8dHIgc3R5bGU9J21zby15ZnRpLWlyb3c6MzknPg0KKyAgPHRkIHZhbGlnbj10b3Agc3R5bGU9J2JvcmRlcjpzb2xpZCAjQUFBQUFBIDEuMHB0O2JvcmRlci10b3A6bm9uZTttc28tYm9yZGVyLXRvcC1hbHQ6DQorICBzb2xpZCAjQUFBQUFBIC43NXB0O21zby1ib3JkZXItYWx0OnNvbGlkICNBQUFBQUEgLjc1cHQ7cGFkZGluZzo1LjZwdCA1LjZwdCA1LjZwdCA1LjZwdCc+DQorICA8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPnhzPC9zcGFuPjxzcGFuDQorICBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKyAgPC90ZD4NCisgIDx0ZCB2YWxpZ249dG9wIHN0eWxlPSdib3JkZXItdG9wOm5vbmU7Ym9yZGVyLWxlZnQ6bm9uZTtib3JkZXItYm90dG9tOnNvbGlkICNBQUFBQUEgMS4wcHQ7DQorICBib3JkZXItcmlnaHQ6c29saWQgI0FBQUFBQSAxLjBwdDttc28tYm9yZGVyLXRvcC1hbHQ6c29saWQgI0FBQUFBQSAuNzVwdDsNCisgIG1zby1ib3JkZXItbGVmdC1hbHQ6c29saWQgI0FBQUFBQSAuNzVwdDttc28tYm9yZGVyLWFsdDpzb2xpZCAjQUFBQUFBIC43NXB0Ow0KKyAgcGFkZGluZzo1LjZwdCA1LjZwdCA1LjZwdCA1LjZwdCc+DQorICA8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMS4wcHQnPkV4dGVybmFsU3BlZWNoPC9zcGFuPjxzcGFuDQorICBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKyAgPC90ZD4NCisgPC90cj4NCisgPHRyIHN0eWxlPSdtc28teWZ0aS1pcm93OjQwJz4NCisgIDx0ZCB2YWxpZ249dG9wIHN0eWxlPSdib3JkZXI6c29saWQgI0FBQUFBQSAxLjBwdDtib3JkZXItdG9wOm5vbmU7bXNvLWJvcmRlci10b3AtYWx0Og0KKyAgc29saWQgI0FBQUFBQSAuNzVwdDttc28tYm9yZGVyLWFsdDpzb2xpZCAjQUFBQUFBIC43NXB0O3BhZGRpbmc6NS42cHQgNS42cHQgNS42cHQgNS42cHQnPg0KKyAgPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz54dzwvc3Bhbj48c3Bhbg0KKyAgc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisgIDwvdGQ+DQorICA8dGQgdmFsaWduPXRvcCBzdHlsZT0nYm9yZGVyLXRvcDpub25lO2JvcmRlci1sZWZ0Om5vbmU7Ym9yZGVyLWJvdHRvbTpzb2xpZCAjQUFBQUFBIDEuMHB0Ow0KKyAgYm9yZGVyLXJpZ2h0OnNvbGlkICNBQUFBQUEgMS4wcHQ7bXNvLWJvcmRlci10b3AtYWx0OnNvbGlkICNBQUFBQUEgLjc1cHQ7DQorICBtc28tYm9yZGVyLWxlZnQtYWx0OnNvbGlkICNBQUFBQUEgLjc1cHQ7bXNvLWJvcmRlci1hbHQ6c29saWQgI0FBQUFBQSAuNzVwdDsNCisgIHBhZGRpbmc6NS42cHQgNS42cHQgNS42cHQgNS42cHQnPg0KKyAgPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTEuMHB0Jz5YV2luZG93PC9zcGFuPjxzcGFuDQorICBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD48L286cD48L3NwYW4+PC9wPg0KKyAgPC90ZD4NCisgPC90cj4NCisgPHRyIHN0eWxlPSdtc28teWZ0aS1pcm93OjQxO21zby15ZnRpLWxhc3Ryb3c6eWVzO2hlaWdodDoyOS42cHQnPg0KKyAgPHRkIHZhbGlnbj10b3Agc3R5bGU9J2JvcmRlcjpzb2xpZCAjQUFBQUFBIDEuMHB0O2JvcmRlci10b3A6bm9uZTttc28tYm9yZGVyLXRvcC1hbHQ6DQorICBzb2xpZCAjQUFBQUFBIC43NXB0O21zby1ib3JkZXItYWx0OnNvbGlkICNBQUFBQUEgLjc1cHQ7cGFkZGluZzo1LjZwdCA1LjZwdCA1LjZwdCA1LjZwdDsNCisgIGhlaWdodDoyOS42cHQnPg0KKyAgPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdmb250LWZhbWlseTpUaW1lczttc28tYmlkaS1mb250LWZhbWlseToNCisgICJDb3VyaWVyIE5ldyInPjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisgIDwvdGQ+DQorICA8dGQgdmFsaWduPXRvcCBzdHlsZT0nYm9yZGVyLXRvcDpub25lO2JvcmRlci1sZWZ0Om5vbmU7Ym9yZGVyLWJvdHRvbTpzb2xpZCAjQUFBQUFBIDEuMHB0Ow0KKyAgYm9yZGVyLXJpZ2h0OnNvbGlkICNBQUFBQUEgMS4wcHQ7bXNvLWJvcmRlci10b3AtYWx0OnNvbGlkICNBQUFBQUEgLjc1cHQ7DQorICBtc28tYm9yZGVyLWxlZnQtYWx0OnNvbGlkICNBQUFBQUEgLjc1cHQ7bXNvLWJvcmRlci1hbHQ6c29saWQgI0FBQUFBQSAuNzVwdDsNCisgIHBhZGRpbmc6NS42cHQgNS42cHQgNS42cHQgNS42cHQ7aGVpZ2h0OjI5LjZwdCc+DQorICA8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J2ZvbnQtZmFtaWx5OlRpbWVzO21zby1iaWRpLWZvbnQtZmFtaWx5Og0KKyAgIkNvdXJpZXIgTmV3Iic+PG86cD4mbmJzcDs8L286cD48L3NwYW4+PC9wPg0KKyAgPC90ZD4NCisgPC90cj4NCis8L3RhYmxlPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6VGltZXM7bXNvLWJpZGktZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Iic+PG86cD4mbmJzcDs8L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBsYW5nPUVOLVVTIHN0eWxlPSdtc28tYW5zaS1sYW5ndWFnZTpFTi1VUyc+RC4NCitEcml2ZXJzIGRlIFRlbGEgU3Vwb3J0YWRvczxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gbGFuZz1FTi1VUyBzdHlsZT0nbXNvLWFuc2ktbGFuZ3VhZ2U6RU4tVVMnPjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQgc3R5bGU9J3RleHQtaW5kZW50OjM1LjRwdCc+QlJMVFRZIHN1cG9ydGEgb3Mgc2VndWludGVzDQorZHJpdmVycyBkZSB0ZWxhOjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PG86cD4mbmJzcDs8L286cD48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0IHN0eWxlPSd0ZXh0LWluZGVudDozNS40cHQnPjxzcGFuIGxhbmc9RU4tVVMNCitzdHlsZT0nbXNvLWFuc2ktbGFuZ3VhZ2U6RU4tVVMnPmFzIEFULVNQSTxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gbGFuZz1FTi1VUyBzdHlsZT0nbXNvLWFuc2ktbGFuZ3VhZ2U6RU4tVVMnPjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gbGFuZz1FTi1VUyBzdHlsZT0nbXNvLWFuc2ktbGFuZ3VhZ2U6RU4tVVMnPjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgoKAgPC9zcGFuPjxzcGFuIHN0eWxlPSdtc28tdGFiLWNvdW50OjEnPiA8L3NwYW4+aGQgPG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dCBzdHlsZT0nbWFyZ2luLWxlZnQ6MzUuNHB0Jz5Fc3RlIGRyaXZlciBmb3JuZWNlIHVtIGFjZXNzbw0KK2RpcmV0byBwYXJhIGEgdGVsYSBkbyBjb25zb2xlIEh1cmQuIMkgc/Mgc2VsZWNpb25hciBhIG9w5+NvIHBhZHLjbyBkbyBzaXN0ZW1hDQorSHVyZC48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxvOnA+Jm5ic3A7PC9vOnA+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKCgoKAgPC9zcGFuPk5hbWU8c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKCgoKCgoKCgoKCgoKAgPC9zcGFuPk1vZGVsczwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gbGFuZz1FTi1VUyBzdHlsZT0nbXNvLWFuc2ktbGFuZ3VhZ2U6RU4tVVMnPjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgoCA8L3NwYW4+X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXzxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gbGFuZz1FTi1VUyBzdHlsZT0nbXNvLWFuc2ktbGFuZ3VhZ2U6RU4tVVMnPjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgoKCgIDwvc3Bhbj5BbGJhdHJvc3M8c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKCgoKCgoKCgIDwvc3Bhbj40Ni84MDxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gbGFuZz1FTi1VUyBzdHlsZT0nbXNvLWFuc2ktbGFuZ3VhZ2U6RU4tVVMnPjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgoKCgIDwvc3Bhbj5BbHZhPHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKCgoKCgoKCgoKCgoKCgIDwvc3Bhbj5BQlQgKDNubik8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIGxhbmc9RU4tVVMgc3R5bGU9J21zby1hbnNpLWxhbmd1YWdlOkVOLVVTJz48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgIDwvc3Bhbj5EZWxwaGkgKDRubik8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIGxhbmc9RU4tVVMgc3R5bGU9J21zby1hbnNpLWxhbmd1YWdlOkVOLVVTJz48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgIDwvc3Bhbj5TYXRlbGxpdGUgKDVubik8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIGxhbmc9RU4tVVMgc3R5bGU9J21zby1hbnNpLWxhbmd1YWdlOkVOLVVTJz48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKCgoCA8L3NwYW4+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKCgoKCgoKCgoKCgoKCgoKCgoKA8L3NwYW4+QnJhaWxsZSBTeXN0ZW0gNDA8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIGxhbmc9RU4tVVMgc3R5bGU9J21zby1hbnNpLWxhbmd1YWdlOkVOLVVTJz48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKCgoKCgoKCgoKCgoKAgPC9zcGFuPjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgoKCgoKCgoKA8L3NwYW4+QnJhaWxsZSBDb250cm9sbGVyIDY0MC82ODA8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIGxhbmc9RU4tVVMgc3R5bGU9J21zby1hbnNpLWxhbmd1YWdlOkVOLVVTJz48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKCgoCA8L3NwYW4+QmF1bSA8c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKCgoDwvc3Bhbj48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKCgoKCgoKCgPC9zcGFuPklua2E8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIGxhbmc9RU4tVVMgc3R5bGU9J21zby1hbnNpLWxhbmd1YWdlOkVOLVVTJz48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgIDwvc3Bhbj5WYXJpby9SQlQ8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIGxhbmc9RU4tVVMgc3R5bGU9J21zby1hbnNpLWxhbmd1YWdlOkVOLVVTJz48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgIDwvc3Bhbj5TdXBlclZhcmlvL0JyYWlsbGlhbnQ8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIGxhbmc9RU4tVVMgc3R5bGU9J21zby1hbnNpLWxhbmd1YWdlOkVOLVVTJz48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgIDwvc3Bhbj5Qb2NrZXRWYXJpbzxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gbGFuZz1FTi1VUyBzdHlsZT0nbXNvLWFuc2ktbGFuZ3VhZ2U6RU4tVVMnPjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKAgPC9zcGFuPlZhcmlvUHJvPG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBsYW5nPUVOLVVTIHN0eWxlPSdtc28tYW5zaS1sYW5ndWFnZTpFTi1VUyc+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoCA8L3NwYW4+RWNvVmFyaW88bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIGxhbmc9RU4tVVMgc3R5bGU9J21zby1hbnNpLWxhbmd1YWdlOkVOLVVTJz48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgDQorPC9zcGFuPlZhcmlvQ29ubmVjdC9CcmFpbGxlQ29ubmVjdDxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gbGFuZz1FTi1VUyBzdHlsZT0nbXNvLWFuc2ktbGFuZ3VhZ2U6RU4tVVMnPjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKAgPC9zcGFuPlJlZnJlc2hhYnJhaWxsZTxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gbGFuZz1FTi1VUyBzdHlsZT0nbXNvLWFuc2ktbGFuZ3VhZ2U6RU4tVVMnPjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgoKCgIDwvc3Bhbj5CcmFpbENvbW08c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKCgoKCgoKCgIDwvc3Bhbj5JSUk8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIGxhbmc9RU4tVVMgc3R5bGU9J21zby1hbnNpLWxhbmd1YWdlOkVOLVVTJz48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKCgoCA8L3NwYW4+QnJhaWxsZUxpdGU8c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKCgoKCgoCA8L3NwYW4+MTgvNDAvTTIwL000MDxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gbGFuZz1FTi1VUyBzdHlsZT0nbXNvLWFuc2ktbGFuZ3VhZ2U6RU4tVVMnPjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgoKCgIDwvc3Bhbj5CcmFpbGxlTm90ZTxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgoKCgoKCgIDwvc3Bhbj4xOC8zMjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gbGFuZz1FTi1VUyBzdHlsZT0nbXNvLWFuc2ktbGFuZ3VhZ2U6RU4tVVMnPjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgoKCgIDwvc3Bhbj5CcmxBUEk8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIGxhbmc9RU4tVVMgc3R5bGU9J21zby1hbnNpLWxhbmd1YWdlOkVOLVVTJz48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKCgoCA8L3NwYW4+Q29tYmlCcmFpbGxlPHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKCgoKCgoCA8L3NwYW4+MjUvNDUvODU8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIGxhbmc9RU4tVVMgc3R5bGU9J21zby1hbnNpLWxhbmd1YWdlOkVOLVVTJz48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKCgoCA8L3NwYW4+RWNvQnJhaWxsZTxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgoKCgoKCgoCA8L3NwYW4+MjAvNDAvODA8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIGxhbmc9RU4tVVMgc3R5bGU9J21zby1hbnNpLWxhbmd1YWdlOkVOLVVTJz48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKCgoCA8L3NwYW4+RXVyb0JyYWlsbGU8c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKCgoKCgoCA8L3NwYW4+QXplckJyYWlsbGU8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIGxhbmc9RU4tVVMgc3R5bGU9J21zby1hbnNpLWxhbmd1YWdlOkVOLVVTJz48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgIDwvc3Bhbj5DbGlvPG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBsYW5nPUVOLVVTIHN0eWxlPSdtc28tYW5zaS1sYW5ndWFnZTpFTi1VUyc+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoCA8L3NwYW4+SXJpczxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gbGFuZz1FTi1VUyBzdHlsZT0nbXNvLWFuc2ktbGFuZ3VhZ2U6RU4tVVMnPjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKAgPC9zcGFuPk5vdGVCcmFpbGxlPG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBsYW5nPUVOLVVTIHN0eWxlPSdtc28tYW5zaS1sYW5ndWFnZTpFTi1VUyc+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoCA8L3NwYW4+U2NyaWJhPG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBsYW5nPUVOLVVTIHN0eWxlPSdtc28tYW5zaS1sYW5ndWFnZTpFTi1VUyc+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoCA8L3NwYW4+RXN5cyAxMi80MDxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gbGFuZz1FTi1VUyBzdHlsZT0nbXNvLWFuc2ktbGFuZ3VhZ2U6RU4tVVMnPjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgoKCgIDwvc3Bhbj5GcmVlZG9tU2NpZW50aWZpYzxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgIDwvc3Bhbj5Gb2N1cyAxIDQ0LzcwLzg0PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBsYW5nPUVOLVVTIHN0eWxlPSdtc28tYW5zaS1sYW5ndWFnZTpFTi1VUyc+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoCA8L3NwYW4+Rm9jdXMgMiA0MC84MDxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gbGFuZz1FTi1VUyBzdHlsZT0nbXNvLWFuc2ktbGFuZ3VhZ2U6RU4tVVMnPjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKAgPC9zcGFuPkZvY3VzIEJsdWUgNDA8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIGxhbmc9RU4tVVMgc3R5bGU9J21zby1hbnNpLWxhbmd1YWdlOkVOLVVTJz48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgIDwvc3Bhbj5QQUMgTWF0ZSAyMC80MDxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gbGFuZz1FTi1VUyBzdHlsZT0nbXNvLWFuc2ktbGFuZ3VhZ2U6RU4tVVMnPjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgoKCgIDwvc3Bhbj5IYW5keVRlY2g8c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKCgoKCgoKCgIDwvc3Bhbj5Nb2R1bGFyIDIwLzQwLzgwPG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBsYW5nPUVOLVVTIHN0eWxlPSdtc28tYW5zaS1sYW5ndWFnZTpFTi1VUyc+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoCA8L3NwYW4+TW9kdWxhciBFdm9sdXRpb24NCis2NC84ODxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gbGFuZz1FTi1VUyBzdHlsZT0nbXNvLWFuc2ktbGFuZ3VhZ2U6RU4tVVMnPjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgoKCgoKCgoKCgoKCgoKCgIDwvc3Bhbj48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKCgoKCgoDwvc3Bhbj5BY3RpdmUgQnJhaWxsZTxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gbGFuZz1FTi1VUyBzdHlsZT0nbXNvLWFuc2ktbGFuZ3VhZ2U6RU4tVVMnPjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKAgPC9zcGFuPkJyYWlsbGUgV2F2ZTxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gbGFuZz1FTi1VUyBzdHlsZT0nbXNvLWFuc2ktbGFuZ3VhZ2U6RU4tVVMnPjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKAgPC9zcGFuPkVhc3kgQnJhaWxsZTxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gbGFuZz1FTi1VUyBzdHlsZT0nbXNvLWFuc2ktbGFuZ3VhZ2U6RU4tVVMnPjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKAgPC9zcGFuPkJyYWlsbGUgU3RhciA0MC84MDxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gbGFuZz1FTi1VUyBzdHlsZT0nbXNvLWFuc2ktbGFuZ3VhZ2U6RU4tVVMnPjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKAgPC9zcGFuPkJvb2t3b3JtPG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBsYW5nPUVOLVVTIHN0eWxlPSdtc28tYW5zaS1sYW5ndWFnZTpFTi1VUyc+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoCA8L3NwYW4+QnJhaWxsaW5vPG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBsYW5nPUVOLVVTIHN0eWxlPSdtc28tYW5zaS1sYW5ndWFnZTpFTi1VUyc+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKCgoKAgPC9zcGFuPkhJTVM8c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKCgoKCgoKCgoKCgoKAgPC9zcGFuPkJyYWlsbGUgU2Vuc2U8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIGxhbmc9RU4tVVMgc3R5bGU9J21zby1hbnNpLWxhbmd1YWdlOkVOLVVTJz48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgIDwvc3Bhbj5TeW5jQnJhaWxsZTxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gbGFuZz1FTi1VUyBzdHlsZT0nbXNvLWFuc2ktbGFuZ3VhZ2U6RU4tVVMnPjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgoKCgIDwvc3Bhbj5MaWJicmFpbGxlPG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBsYW5nPUVOLVVTIHN0eWxlPSdtc28tYW5zaS1sYW5ndWFnZTpFTi1VUyc+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKCgoKAgPC9zcGFuPkxvZ1RleHQ8c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKCgoKCgoKCgoKAgPC9zcGFuPjMyPG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBsYW5nPUVOLVVTIHN0eWxlPSdtc28tYW5zaS1sYW5ndWFnZTpFTi1VUyc+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKCgoKAgPC9zcGFuPk1EVjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgoKCgoKCgoKCgoKCgoKAgPC9zcGFuPk1CMjA4L01CNDA4TC9NQjQwOFMgKHByb3RvY29sDQorNSk8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIGxhbmc9RU4tVVMgc3R5bGU9J21zby1hbnNpLWxhbmd1YWdlOkVOLVVTJz48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKCgoCA8L3NwYW4+TWV0ZWM8c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKCgoKCgoKCgoKCgoCA8L3NwYW4+QkQtNDA8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIGxhbmc9RU4tVVMgc3R5bGU9J21zby1hbnNpLWxhbmd1YWdlOkVOLVVTJz48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKCgoCA8L3NwYW4+TWluaUJyYWlsbGU8c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKCgoKCgoCA8L3NwYW4+MjA8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIGxhbmc9RU4tVVMgc3R5bGU9J21zby1hbnNpLWxhbmd1YWdlOkVOLVVTJz48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKCgoCA8L3NwYW4+TXVsdGlCcmFpbGxlPHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKCgoKCgoCA8L3NwYW4+TUIxMjVDUi9NQjE0NUNSL01CMTg1Q1I8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIGxhbmc9RU4tVVMgc3R5bGU9J21zby1hbnNpLWxhbmd1YWdlOkVOLVVTJz48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gPC9zcGFuPjxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKCgDQorPC9zcGFuPlBhcGVubWVpZXI8c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKCgoKCgoKCgIDwvc3Bhbj5Db21wYWN0IDQ4NjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gbGFuZz1FTi1VUyBzdHlsZT0nbXNvLWFuc2ktbGFuZ3VhZ2U6RU4tVVMnPjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKAgPC9zcGFuPkNvbXBhY3QvVGlueTxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gbGFuZz1FTi1VUyBzdHlsZT0nbXNvLWFuc2ktbGFuZ3VhZ2U6RU4tVVMnPjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKAgPC9zcGFuPklCIDgwIENSIFNvZnQ8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIGxhbmc9RU4tVVMgc3R5bGU9J21zby1hbnNpLWxhbmd1YWdlOkVOLVVTJz48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgIDwvc3Bhbj4yRCBMaXRlIChwbHVzKTxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gbGFuZz1FTi1VUyBzdHlsZT0nbXNvLWFuc2ktbGFuZ3VhZ2U6RU4tVVMnPjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKAgPC9zcGFuPjJEIFNjcmVlbiBTb2Z0PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoA0KKzwvc3Bhbj5FTCA4MDwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKANCis8L3NwYW4+RUwgMkQgNDAvNjYvODA8L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgDQorPC9zcGFuPkVMIDQwLzY2LzcwLzgwIFM8L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgDQorPC9zcGFuPkVMIDJEIDgwIFM8L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgDQorPC9zcGFuPkVMIDQwIFA8L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgDQorPC9zcGFuPkVMIDgwIElJPC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoA0KKzwvc3Bhbj5FbGJhIDIwLzMyPC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoA0KKzwvc3Bhbj5UcmlvIDQwL0VsYmEyMC9FbGJhMzI8L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIGxhbmc9RU4tVVMgc3R5bGU9J21zby1hbnNpLWxhbmd1YWdlOkVOLVVTJz48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKCgoCA8L3NwYW4+UGVnYXN1czxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgoKCgoKCgoKCgoCA8L3NwYW4+MjAvMjcvNDAvODA8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIGxhbmc9RU4tVVMgc3R5bGU9J21zby1hbnNpLWxhbmd1YWdlOkVOLVVTJz48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKCgoCA8L3NwYW4+U2Vpa2E8c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKCgoKCgoKCgoKCgoCA8L3NwYW4+NDA8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIGxhbmc9RU4tVVMgc3R5bGU9J21zby1hbnNpLWxhbmd1YWdlOkVOLVVTJz48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKCgoCA8L3NwYW4+VFNJPHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKCgoKCgoKCgoKCgoKCgoCA8L3NwYW4+TmF2aWdhdG9yIDIwLzQwLzgwPG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBsYW5nPUVOLVVTIHN0eWxlPSdtc28tYW5zaS1sYW5ndWFnZTpFTi1VUyc+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoCA8L3NwYW4+UG93ZXJCcmFpbGxlIDQwLzY1LzgwPG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBsYW5nPUVOLVVTIHN0eWxlPSdtc28tYW5zaS1sYW5ndWFnZTpFTi1VUyc+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKCgoKAgPC9zcGFuPlRUWTxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgoKCgoKCgoKCgoKCgoKAgPC9zcGFuPnRlcm1pbmZvPG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBsYW5nPUVOLVVTIHN0eWxlPSdtc28tYW5zaS1sYW5ndWFnZTpFTi1VUyc+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKCgoKAgPC9zcGFuPlZpZGVvQnJhaWxsZTxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgoKCgoKAgPC9zcGFuPjQwPG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBsYW5nPUVOLVVTIHN0eWxlPSdtc28tYW5zaS1sYW5ndWFnZTpFTi1VUyc+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKCgoKAgPC9zcGFuPlZpcnR1YWw8c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKCgoKCgoKCgoKAgPC9zcGFuPlRDUC9Vbml4LCBjbGllbnQvc2VydmVyPG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBsYW5nPUVOLVVTIHN0eWxlPSdtc28tYW5zaS1sYW5ndWFnZTpFTi1VUyc+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKCgoKAgPC9zcGFuPlZpc2lvQnJhaWxsZTxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgoKCgoKAgPC9zcGFuPjIwLzQwPG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBsYW5nPUVOLVVTIHN0eWxlPSdtc28tYW5zaS1sYW5ndWFnZTpFTi1VUyc+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKCgoKAgPC9zcGFuPlZveWFnZXI8c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKCgoKCgoKCgoKAgPC9zcGFuPjQ0LzcwPG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBsYW5nPUVOLVVTIHN0eWxlPSdtc28tYW5zaS1sYW5ndWFnZTpFTi1VUyc+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoCA8L3NwYW4+UGFydDIzMiAoc2VyaWFsDQorYWRhcHRlcik8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIGxhbmc9RU4tVVMgc3R5bGU9J21zby1hbnNpLWxhbmd1YWdlOkVOLVVTJz48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgIDwvc3Bhbj5CcmFpbGxlUGVuL0Vhc3lMaW5rPG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBsYW5nPUVOLVVTIHN0eWxlPSdtc28tYW5zaS1sYW5ndWFnZTpFTi1VUyc+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKCgoKAgPC9zcGFuPlhXaW5kb3c8c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKCgoKCgoKCgoKAgPC9zcGFuPlgxMTxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gbGFuZz1FTi1VUyBzdHlsZT0nbXNvLWFuc2ktbGFuZ3VhZ2U6RU4tVVMnPjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKAgPC9zcGFuPldpbmRvd3M8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIGxhbmc9RU4tVVMgc3R5bGU9J21zby1hbnNpLWxhbmd1YWdlOkVOLVVTJz48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIGxhbmc9RU4tVVMgc3R5bGU9J21zby1hbnNpLWxhbmd1YWdlOkVOLVVTJz48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIGxhbmc9RU4tVVMgc3R5bGU9J21zby1hbnNpLWxhbmd1YWdlOkVOLVVTJz48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKCgoCA8L3NwYW4+Q29kZTxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goA0KKzwvc3Bhbj5OYW1lPG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBsYW5nPUVOLVVTIHN0eWxlPSdtc28tYW5zaS1sYW5ndWFnZTpFTi1VUyc+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKCgIDwvc3Bhbj5fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fPG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBsYW5nPUVOLVVTIHN0eWxlPSdtc28tYW5zaS1sYW5ndWFnZTpFTi1VUyc+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKCgoKAgPC9zcGFuPmFsPHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgoKANCis8L3NwYW4+QWx2YTxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gbGFuZz1FTi1VUyBzdHlsZT0nbXNvLWFuc2ktbGFuZ3VhZ2U6RU4tVVMnPjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgoKCgIDwvc3Bhbj5hdDxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKCgDQorPC9zcGFuPkFsYmF0cm9zczxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gbGFuZz1FTi1VUyBzdHlsZT0nbXNvLWFuc2ktbGFuZ3VhZ2U6RU4tVVMnPjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgoKCgIDwvc3Bhbj5iYTxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKCgDQorPC9zcGFuPkJybEFQSTxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gbGFuZz1FTi1VUyBzdHlsZT0nbXNvLWFuc2ktbGFuZ3VhZ2U6RU4tVVMnPjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgoKCgIDwvc3Bhbj5iYzxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKCgDQorPC9zcGFuPkJyYWlsQ29tbTxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gbGFuZz1FTi1VUyBzdHlsZT0nbXNvLWFuc2ktbGFuZ3VhZ2U6RU4tVVMnPjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgoKCgIDwvc3Bhbj5ibDxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKCgDQorPC9zcGFuPkJyYWlsbGVMaXRlPG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBsYW5nPUVOLVVTIHN0eWxlPSdtc28tYW5zaS1sYW5ndWFnZTpFTi1VUyc+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKCgoKAgPC9zcGFuPmJtPHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgoKANCis8L3NwYW4+QmF1bSAoTmF0aXZlLCBIVCwgUEIxLCBQQjIpPG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBsYW5nPUVOLVVTIHN0eWxlPSdtc28tYW5zaS1sYW5ndWFnZTpFTi1VUyc+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKCgoKAgPC9zcGFuPmJuPHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgoKANCis8L3NwYW4+QnJhaWxsZU5vdGU8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIGxhbmc9RU4tVVMgc3R5bGU9J21zby1hbnNpLWxhbmd1YWdlOkVOLVVTJz48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKCgoCA8L3NwYW4+Y2I8c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKCgoA0KKzwvc3Bhbj5Db21iaUJyYWlsbGU8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIGxhbmc9RU4tVVMgc3R5bGU9J21zby1hbnNpLWxhbmd1YWdlOkVOLVVTJz48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKCgoCA8L3NwYW4+ZWM8c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKCgoA0KKzwvc3Bhbj5FY29CcmFpbGxlPG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBsYW5nPUVOLVVTIHN0eWxlPSdtc28tYW5zaS1sYW5ndWFnZTpFTi1VUyc+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKCgoKAgPC9zcGFuPmVzPHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgoKANCis8L3NwYW4+ZVNwZWFrPG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBsYW5nPUVOLVVTIHN0eWxlPSdtc28tYW5zaS1sYW5ndWFnZTpFTi1VUyc+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKCgoKAgPC9zcGFuPmV1PHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgoKANCis8L3NwYW4+RXVyb0JyYWlsbGU8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIGxhbmc9RU4tVVMgc3R5bGU9J21zby1hbnNpLWxhbmd1YWdlOkVOLVVTJz48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKCgoCA8L3NwYW4+Zmw8c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKCgoA0KKzwvc3Bhbj5GZXN0aXZhbExpdGU8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIGxhbmc9RU4tVVMgc3R5bGU9J21zby1hbnNpLWxhbmd1YWdlOkVOLVVTJz48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKCgoCA8L3NwYW4+ZnM8c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKCgoA0KKzwvc3Bhbj5GcmVlZG9tU2NpZW50aWZpYzxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gbGFuZz1FTi1VUyBzdHlsZT0nbXNvLWFuc2ktbGFuZ3VhZ2U6RU4tVVMnPjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgoKCgIDwvc3Bhbj5mdjxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKCgDQorPC9zcGFuPkZlc3RpdmFsPG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBsYW5nPUVOLVVTIHN0eWxlPSdtc28tYW5zaS1sYW5ndWFnZTpFTi1VUyc+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKCgoKAgPC9zcGFuPmdzPHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgoKANCis8L3NwYW4+R2VuZXJpY1NheTxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gbGFuZz1FTi1VUyBzdHlsZT0nbXNvLWFuc2ktbGFuZ3VhZ2U6RU4tVVMnPjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgoKCgIDwvc3Bhbj5obTxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKCgDQorPC9zcGFuPkhJTVM8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIGxhbmc9RU4tVVMgc3R5bGU9J21zby1hbnNpLWxhbmd1YWdlOkVOLVVTJz48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKCgoCA8L3NwYW4+aHQ8c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKCgoA0KKzwvc3Bhbj5IYW5keVRlY2g8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIGxhbmc9RU4tVVMgc3R5bGU9J21zby1hbnNpLWxhbmd1YWdlOkVOLVVTJz48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKCgoCA8L3NwYW4+aWw8c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKCgoA0KKzwvc3Bhbj5JcmlzTGludXg8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIGxhbmc9RU4tVVMgc3R5bGU9J21zby1hbnNpLWxhbmd1YWdlOkVOLVVTJz48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKCgoCA8L3NwYW4+bGI8c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKCgoA0KKzwvc3Bhbj5MaWJicmFpbGxlPG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBsYW5nPUVOLVVTIHN0eWxlPSdtc28tYW5zaS1sYW5ndWFnZTpFTi1VUyc+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKCgoKAgPC9zcGFuPmx0PHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgoKANCis8L3NwYW4+TG9nVGV4dDxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gbGFuZz1FTi1VUyBzdHlsZT0nbXNvLWFuc2ktbGFuZ3VhZ2U6RU4tVVMnPjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgoKCgIDwvc3Bhbj5tYjxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKCgDQorPC9zcGFuPk11bHRpQnJhaWxsZTxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gbGFuZz1FTi1VUyBzdHlsZT0nbXNvLWFuc2ktbGFuZ3VhZ2U6RU4tVVMnPjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgoKCgIDwvc3Bhbj5tZDxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKCgDQorPC9zcGFuPk1EVjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gbGFuZz1FTi1VUyBzdHlsZT0nbXNvLWFuc2ktbGFuZ3VhZ2U6RU4tVVMnPjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgoKCgIDwvc3Bhbj5tbjxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKCgDQorPC9zcGFuPk1pbmlCcmFpbGxlPG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBsYW5nPUVOLVVTIHN0eWxlPSdtc28tYW5zaS1sYW5ndWFnZTpFTi1VUyc+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKCgoKAgPC9zcGFuPm1wPHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgoKANCis8L3NwYW4+TWlrcm9wdWhlPG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBsYW5nPUVOLVVTIHN0eWxlPSdtc28tYW5zaS1sYW5ndWFnZTpFTi1VUyc+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKCgoKAgPC9zcGFuPm10PHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgoKANCis8L3NwYW4+TWV0ZWM8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIGxhbmc9RU4tVVMgc3R5bGU9J21zby1hbnNpLWxhbmd1YWdlOkVOLVVTJz48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKCgoCA8L3NwYW4+bm88c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKCgoA0KKzwvc3Bhbj5ubyBkcml2ZXI8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIGxhbmc9RU4tVVMgc3R5bGU9J21zby1hbnNpLWxhbmd1YWdlOkVOLVVTJz48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKCgoCA8L3NwYW4+cGc8c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKCgoA0KKzwvc3Bhbj5QZWdhc3VzPG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBsYW5nPUVOLVVTIHN0eWxlPSdtc28tYW5zaS1sYW5ndWFnZTpFTi1VUyc+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKCgoKAgPC9zcGFuPnBtPHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgoKANCis8L3NwYW4+UGFwZW5tZWllcjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gbGFuZz1FTi1VUyBzdHlsZT0nbXNvLWFuc2ktbGFuZ3VhZ2U6RU4tVVMnPjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgoKCgIDwvc3Bhbj5zZDxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKCgDQorPC9zcGFuPlNwZWVjaERpc3BhdGNoZXI8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIGxhbmc9RU4tVVMgc3R5bGU9J21zby1hbnNpLWxhbmd1YWdlOkVOLVVTJz48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKCgoCA8L3NwYW4+c2s8c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKCgoA0KKzwvc3Bhbj5TZWlrYTxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gbGFuZz1FTi1VUyBzdHlsZT0nbXNvLWFuc2ktbGFuZ3VhZ2U6RU4tVVMnPjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgoKA8L3NwYW4+c3c8c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKCgoA0KKzwvc3Bhbj5Td2lmdDxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gbGFuZz1FTi1VUyBzdHlsZT0nbXNvLWFuc2ktbGFuZ3VhZ2U6RU4tVVMnPjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgoKCgIDwvc3Bhbj50aDxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKCgDQorPC9zcGFuPlRoZXRhPG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBsYW5nPUVOLVVTIHN0eWxlPSdtc28tYW5zaS1sYW5ndWFnZTpFTi1VUyc+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKCgoKAgPC9zcGFuPnRzPHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgoKANCis8L3NwYW4+VGVsZXNlbnNvcnkgU3lzdGVtcyBJbmMuPG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBsYW5nPUVOLVVTIHN0eWxlPSdtc28tYW5zaS1sYW5ndWFnZTpFTi1VUyc+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKCgoKAgPC9zcGFuPnR0PHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgoKANCis8L3NwYW4+VFRZPG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBsYW5nPUVOLVVTIHN0eWxlPSdtc28tYW5zaS1sYW5ndWFnZTpFTi1VUyc+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKCgoKAgPC9zcGFuPnZkPHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgoKANCis8L3NwYW4+VmlkZW9CcmFpbGxlPG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBsYW5nPUVOLVVTIHN0eWxlPSdtc28tYW5zaS1sYW5ndWFnZTpFTi1VUyc+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKCgoKAgPC9zcGFuPnZvPHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgoKANCis8L3NwYW4+Vm95YWdlcjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gbGFuZz1FTi1VUyBzdHlsZT0nbXNvLWFuc2ktbGFuZ3VhZ2U6RU4tVVMnPjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgoKCgIDwvc3Bhbj52cjxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKCgDQorPC9zcGFuPlZpcnR1YWw8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIGxhbmc9RU4tVVMgc3R5bGU9J21zby1hbnNpLWxhbmd1YWdlOkVOLVVTJz48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKCgoCA8L3NwYW4+dnM8c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKCgoA0KKzwvc3Bhbj5WaXNpb0JyYWlsbGU8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIGxhbmc9RU4tVVMgc3R5bGU9J21zby1hbnNpLWxhbmd1YWdlOkVOLVVTJz48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKCgoCA8L3NwYW4+dnY8c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKCgoA0KKzwvc3Bhbj5WaWFWb2ljZTxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gbGFuZz1FTi1VUyBzdHlsZT0nbXNvLWFuc2ktbGFuZ3VhZ2U6RU4tVVMnPjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgoKCgIDwvc3Bhbj54czxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKCgDQorPC9zcGFuPkV4dGVybmFsU3BlZWNoPG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKCgoKAgPC9zcGFuPnh3PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKCgoCA8L3NwYW4+WFdpbmRvdzwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PG86cD4mbmJzcDs8L286cD48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0IHN0eWxlPSdtYXJnaW4tbGVmdDo3MC44cHQ7dGV4dC1pbmRlbnQ6LTM1LjU1cHQnPmx4IDxzcGFuDQorc3R5bGU9J21zby10YWItY291bnQ6MSc+oKAgPC9zcGFuPjxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gPC9zcGFuPkVzdGUgZHJpdmVyDQorZm9ybmVjZSB1bSBhY2Vzc28gZGlyZXRvIG5vIGNvbnNvbGUgZG8gTGludXguIMkgc/M8L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0IHN0eWxlPSdtYXJnaW4tbGVmdDo3MC44cHQ7dGV4dC1pbmRlbnQ6LTM1LjU1cHQnPjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgoKCgoCA8L3NwYW4+c2VsZWNpb25hciBhIG9w5+NvIHBhZHLjbyBkbyBzaXN0ZW1hDQorTGludXguPC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKCgoCA8L3NwYW4+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oDwvc3Bhbj5zYyA8c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKCgPC9zcGFuPkVzdGUgZHJpdmVyIGZvcm5lY2UgdW0gYWNlc3NvIGRpcmV0byBuYQ0KK3RlbGEgZG8gcHJvZ3JhbWEuIFNlbGVjaW9uZTwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQgc3R5bGU9J21hcmdpbi1sZWZ0OjM1LjRwdDt0ZXh0LWluZGVudDozNS40cHQnPjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqA8L3NwYW4+dG9kb3Mgb3Mgc2lzdGVtYXMsIG5hIG9w5+NvIHBhZHLjbyBzZSBvIGRyaXZlcg0KK2RlIHRlbGEgbmF0aXZvIOk8L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0IHN0eWxlPSdtYXJnaW4tbGVmdDozNS40cHQ7dGV4dC1pbmRlbnQ6MzUuNHB0Jz48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gPC9zcGFuPmRpc3Bvbu12ZWwuIE8gY2FtaW5obyBkYSB0ZWxhIHF1ZSBu83MNCitmb3JuZWNlbW9zICh2ZXIgU3ViZGlyZXTzcmlvPC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dCBzdHlsZT0nbWFyZ2luLWxlZnQ6MzUuNHB0O3RleHQtaW5kZW50OjM1LjRwdCc+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oDwvc3Bhbj5kZSBDYW1pbmhvcykgZGV2ZXLhIHNlciBhcGxpY2Fkby4gVXNhZG8gbmVzdGUNCitkcml2ZXIganVudG8gY29tIG88L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0IHN0eWxlPSdtYXJnaW4tbGVmdDozNS40cHQ7dGV4dC1pbmRlbnQ6MzUuNHB0Jz48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gPC9zcGFuPmZhdG8gZGEgdGVsYSBkZXZlcuEgc2VyIHJvZGFkYSBjb25jb3JyZW50ZW1lbnRlLA0KK28gQlJMVFRZIGZheiBvIHVzbzwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQgc3R5bGU9J21hcmdpbi1sZWZ0OjM1LjRwdDt0ZXh0LWluZGVudDozNS40cHQnPjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqA8L3NwYW4+ZWZldGl2byBhcGVuYXMgZGVwb2lzIGRvIHVzdeFyaW8gdGVyIGxvZ2Fkby48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKCgoCA8L3NwYW4+d248c3Bhbg0KK3N0eWxlPSdtc28tdGFiLWNvdW50OjEnPqCgoCA8L3NwYW4+RXN0ZSBkcml2ZXIgZm9ybmVjZSB1bSBhY2Vzc28gZGlyZXRvIGNvbSBvDQorY29uc29sZSBkbyBXaW5kb3dzLiDJIHPzPC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKCgoKCgoKCgoKANCis8L3NwYW4+c2VsZWNpb25hZG8gYSBvcOfjbyBwYWRy428gZW0gV2luZG93cy9DeWd3aW4gc3lzdGVtcy48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxvOnA+Jm5ic3A7PC9vOnA+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD5FLiBTaW50YXhlIGRlIE9wZXJh5+NvPC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48bzpwPiZuYnNwOzwvbzpwPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+RS4xLiBFc3BlY2lmaWNh5+NvIGRvIERyaXZlcjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PG86cD4mbmJzcDs8L286cD48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PlVtIGRpc3BsYXkgYnJhaWxsZSBvdSB1bSBkcml2ZXIgc2ludGV0aXphZG9yIGRlIGZhbGEgZGV2ZXLhDQorc2VyIGVzcGVjaWZpY2FkbyBjb20gZHVhcyBsZXRyYXMgk2PzZGlnbyBkZSBpZGVudGlmaWNh5+NvIGRlIGRyaXZlcpQuPC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48bzpwPiZuYnNwOzwvbzpwPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+VW1hIHZpcmd1bGEgZGVsaW1pdGEgYSBsaXN0YSBkZSBkcml2ZXJzIGVzcGVjaWZpY2FkYS4gU2UNCitpc3RvIGVzdOEgZmVpdG8gZW50428gYSBhdXRvZGV0ZWPn428g6SBmZWl0YSB1c2FuZG8gY2FkYSBsaXN0YSBkZSBkcml2ZXJzIDxzdDE6UGVyc29uTmFtZQ0KK1Byb2R1Y3RJRD0iZW0gc2VxJiM2NTUzMjsmIzY1NTE0O25jaWEuIFZvYyYjNjU1MTQ7IiB3OnN0PSJvbiI+ZW0gc2Vx/OpuY2lhLg0KKyBWb2PqPC9zdDE6UGVyc29uTmFtZT4gZGV2ZXLhIHByZWNpc2FyIGV4cGVyaW1lbnRhciBuYSBvcmRlbSBkZXRlcm1pbmFkYSBjb21vDQorbWFpcyBjb25maeF2ZWwgcXVhbmRvIGFsZ3VucyBkcml2ZXJzIGF1dG9kZXRlY3RhZG9zIGZvcmVtIG1lbGhvcmVzIHF1ZSBvcw0KK291dHJvcy48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxvOnA+Jm5ic3A7PC9vOnA+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD5TZSB1bWEg+m5pY2EgcGFsYXZyYSBhdXRvIOkgZXNwZWNpZmljYWRhIHF1YW5kbyBhDQorYXV0b2RldGVj5+NvIOkgZm9ybmVjaWRhIHVzYW5kbyBhcGVuYXMgYXF1ZWxlcyBkcml2ZXJzIHF1ZSBz428gY29uaGVjaWRvcyDpDQorY29uZmnhdmVsIG5lc3NlIHByb3Dzc2l0by48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxvOnA+Jm5ic3A7PC9vOnA+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD5FLjIuIEVzcGVjaWZpY2Hn428gZG8gRGlzcG9zaXRpdm8gQnJhaWxsZTwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PG86cD4mbmJzcDs8L286cD48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PkVtIGdlcmFsLCBhIGVzcGVjaWZpY2Hn428gZG8gZGlzcG9zaXRpdm8gQnJhaWxsZSAodmVyDQorbGluaGEgZGUgY29tYW5kbyCWZCwgbyBhcnF1aXZvIGRlIGNvbmZpZ3VyYefjbyCTYnJhaWxsZS1kZXZpY2WULCBlIG5hDQorY29tcGlsYefjbyBhIG9w5+NvIJOXd2l0aC1icmFpbGxlLWRldmljZZQpIOkgcXVhbGlmaWNhZGE6IGRhZG8uIFBhcmEgc2VyDQorY29tcGF07XZlbCBjb20gdmVyc/VlcyBhbnRlcmlvcmVzLCBzZSBhIHNlcmlhbCDpIGFzc3VtaWRhLjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gbGFuZz1FTi1VUyBzdHlsZT0nbXNvLWFuc2ktbGFuZ3VhZ2U6RU4tVVMnPjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+QSBzZWd1aXIgb3MgdGlwb3MgZGUgZGlzcG9zaXRpdm9zIHPjbyBzdXBvcnRhZG9zOiA8L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxvOnA+Jm5ic3A7PC9vOnA+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nbXNvLXRhYi1jb3VudDoxJz6goKCgoCA8L3NwYW4+Qmx1ZXRvb3RoPC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dCBzdHlsZT0nbWFyZ2luLWxlZnQ6MzUuNHB0Jz5QYXJhIG8gZGlzcG9zaXRpdm8gYmx1ZXRvb3RoLA0KK2VzcGVjaWZpY2EgYmx1ZXRvb3RoOmFkZHJlc3MgKGJ0IDogcG9kZSBzZXIgdXNhZG8pLiBPIGVuZGVyZedvIGRldmVy4SBzZXIgc2Vpcw0KK3BhcmVzIGRlIGTtZ2l0b3MgZGUgaGV4YWRlY2ltYWwgc2VwYXJhZG9zIHBvciBkb2lzIHBvbnRvcywgZS5nLg0KKzAxOjIzOjQ1OjY3Ojg5OkFCLjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PG86cD4mbmJzcDs8L286cD48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdtc28tdGFiLWNvdW50OjEnPqCgoKCgIDwvc3Bhbj5TZXJpYWw8L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0IHN0eWxlPSdtYXJnaW4tbGVmdDozNS40cHQnPlBhcmEgbyBkaXNwb3NpdGl2byBzZXJpYWwsDQorZXNwZWNpZmljYWRvOiAvcGF0aC90by9kZXZpY2UuIEEgc2VyaWFsIOkgb3BjaW9uYWwgKHBhcmEgY29tcGF0aWJpbGlkYWRlDQorYW50ZXJpb3IpLiBTZSB1bSBjYW1pbmhvIHJlbGF0aXZvIOkgZGFkbyBlbnF1YW50byBvIGNhbWluaG8g6SBhbmV4YWRvIGVtIC9kZXYNCisoYSBsb2NhbGl6YefjbyBvbmRlIG9zIGRpc3Bvc2l0aXZvcyBz428gZGVmaW5pZG9zIG5vIHNpc3RlbWEgdW5peCkuIEFzDQorZXNwZWNpZmljYef1ZXMgZG8gZGlzcG9zaXRpdm8gYSBzZWd1aXIgdG9kYXMgc2UgcmVmZXJlbSBwYXJhIG8gcHJpbWVpcm8NCitkaXNwb3NpdGl2byBzZXJpYWwgbm8gTGludXg6PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dCBzdHlsZT0nbWFyZ2luLWxlZnQ6MzUuNHB0Jz48bzpwPiZuYnNwOzwvbzpwPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQgc3R5bGU9J21hcmdpbi1sZWZ0OjcxLjRwdDt0ZXh0LWluZGVudDotMTguMHB0O21zby1saXN0Og0KK2w2IGxldmVsMSBsZm8xNDt0YWItc3RvcHM6bGlzdCA3MS40cHQnPjwhW2lmICFzdXBwb3J0TGlzdHNdPjxzcGFuDQorc3R5bGU9J2ZvbnQtZmFtaWx5OldpbmdkaW5nczttc28tZmFyZWFzdC1mb250LWZhbWlseTpXaW5nZGluZ3M7bXNvLWJpZGktZm9udC1mYW1pbHk6DQorV2luZ2RpbmdzJz48c3BhbiBzdHlsZT0nbXNvLWxpc3Q6SWdub3JlJz6nPHNwYW4gc3R5bGU9J2ZvbnQ6Ny4wcHQgIlRpbWVzIE5ldyBSb21hbiInPiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOw0KKzwvc3Bhbj48L3NwYW4+PC9zcGFuPjwhW2VuZGlmXT48c3BhbiBsYW5nPUVOLVVTIHN0eWxlPSdtc28tYW5zaS1sYW5ndWFnZTpFTi1VUyc+c2VyaWFsOi9kZXYvdHR5UzA8L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dCBzdHlsZT0nbWFyZ2luLWxlZnQ6NzEuNHB0O3RleHQtaW5kZW50Oi0xOC4wcHQ7bXNvLWxpc3Q6DQorbDYgbGV2ZWwxIGxmbzE0O3RhYi1zdG9wczpsaXN0IDcxLjRwdCc+PCFbaWYgIXN1cHBvcnRMaXN0c10+PHNwYW4NCitzdHlsZT0nZm9udC1mYW1pbHk6V2luZ2RpbmdzO21zby1mYXJlYXN0LWZvbnQtZmFtaWx5OldpbmdkaW5nczttc28tYmlkaS1mb250LWZhbWlseToNCitXaW5nZGluZ3MnPjxzcGFuIHN0eWxlPSdtc28tbGlzdDpJZ25vcmUnPqc8c3BhbiBzdHlsZT0nZm9udDo3LjBwdCAiVGltZXMgTmV3IFJvbWFuIic+Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7DQorPC9zcGFuPjwvc3Bhbj48L3NwYW4+PCFbZW5kaWZdPjxzcGFuIGxhbmc9RU4tVVMgc3R5bGU9J21zby1hbnNpLWxhbmd1YWdlOkVOLVVTJz5zZXJpYWw6dHR5UzA8L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dCBzdHlsZT0nbWFyZ2luLWxlZnQ6NzEuNHB0O3RleHQtaW5kZW50Oi0xOC4wcHQ7bXNvLWxpc3Q6DQorbDYgbGV2ZWwxIGxmbzE0O3RhYi1zdG9wczpsaXN0IDcxLjRwdCc+PCFbaWYgIXN1cHBvcnRMaXN0c10+PHNwYW4NCitzdHlsZT0nZm9udC1mYW1pbHk6V2luZ2RpbmdzO21zby1mYXJlYXN0LWZvbnQtZmFtaWx5OldpbmdkaW5nczttc28tYmlkaS1mb250LWZhbWlseToNCitXaW5nZGluZ3MnPjxzcGFuIHN0eWxlPSdtc28tbGlzdDpJZ25vcmUnPqc8c3BhbiBzdHlsZT0nZm9udDo3LjBwdCAiVGltZXMgTmV3IFJvbWFuIic+Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7DQorPC9zcGFuPjwvc3Bhbj48L3NwYW4+PCFbZW5kaWZdPjxzcGFuIGxhbmc9RU4tVVMgc3R5bGU9J21zby1hbnNpLWxhbmd1YWdlOkVOLVVTJz4vZGV2L3R0eVMwPC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQgc3R5bGU9J21hcmdpbi1sZWZ0OjcxLjRwdDt0ZXh0LWluZGVudDotMTguMHB0O21zby1saXN0Og0KK2w2IGxldmVsMSBsZm8xNDt0YWItc3RvcHM6bGlzdCA3MS40cHQnPjwhW2lmICFzdXBwb3J0TGlzdHNdPjxzcGFuDQorc3R5bGU9J2ZvbnQtZmFtaWx5OldpbmdkaW5nczttc28tZmFyZWFzdC1mb250LWZhbWlseTpXaW5nZGluZ3M7bXNvLWJpZGktZm9udC1mYW1pbHk6DQorV2luZ2RpbmdzJz48c3BhbiBzdHlsZT0nbXNvLWxpc3Q6SWdub3JlJz6nPHNwYW4gc3R5bGU9J2ZvbnQ6Ny4wcHQgIlRpbWVzIE5ldyBSb21hbiInPiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOw0KKzwvc3Bhbj48L3NwYW4+PC9zcGFuPjwhW2VuZGlmXT48c3BhbiBsYW5nPUVOLVVTIHN0eWxlPSdtc28tYW5zaS1sYW5ndWFnZTpFTi1VUyc+dHR5UzA8L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBsYW5nPUVOLVVTIHN0eWxlPSdtc28tYW5zaS1sYW5ndWFnZTpFTi1VUyc+PG86cD4mbmJzcDs8L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dCBzdHlsZT0nbWFyZ2luLWxlZnQ6MzUuNHB0Jz5VU0I8L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0IHN0eWxlPSdtYXJnaW4tbGVmdDozNS40cHQnPlBhcmEgbyBkaXNwb3NpdGl2byBVU0IsDQorZXNwZWNpZmljYWRvIFVTQjogbyBCUkxUVFkgc2Vy4SBwcm9jdXJhZG8gcGVsbyBwcmltZWlybyBkaXNwb3NpdGl2byBVU0IgcXVlIGZvaQ0KK21hcmNhZG8gcGVsbyBkcml2ZXIgZG8gZGlzcGxheSBicmFpbGxlIHF1ZSBlc3ThIHNlbmRvIHVzYWRvLiBTZSBpc3RvIOkNCitpbmFkZXF1YWRvLCBlLmcuIHNlIHZvY+ogdGVtIG1haXMgZGUgdW0gZGlzcGxheSBicmFpbGxlIFVTQiBxdWUgcmVxdWVyIHVtIG1lc21vDQorZHJpdmVyLCBlbnTjbyB2b2PqIHBvZGUgcmVmaW5hciBhIGVzcGVjaWZpY2Hn428gZG8gZGlzcG9zaXRpdm8gcG9yIG51bWVybyBkZQ0KK3NlcmlhbCB2aXPtdmVsIG5vIGRpc3BsYXksIGUuZy4gdXNiOjEyMzQ1LiBOLkIuOiBBIGNhcmFjdGVy7XN0aWNhIGRlDQoraWRlbnRpZmljYefjbyBkbyBudW1lcm8gc2VyaWFslCBu428gZnVuY2lvbmEgZW0gYWxndW5zIG1vZGVsb3MgcG9yIGNhdXNhIGRlDQorYWxndW5zIGZhYnJpY2FudGVzIG7jbyBzZXRhcmVtIG8gbnVtZXJvIHNlcmlhbCBVU0IgZW0gdG9kb3Mgb3Ugc2V0YW0gbWFpcyBu428NCitjb20gdW0g+m5pY28gdmFsb3IuPC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48bzpwPiZuYnNwOzwvbzpwPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+QSB2aXJndWxhIGRlbGltaXRhIGEgbGlzdGEgZGUgZGlzcG9zaXRpdm9zIGJyYWlsbGUNCitlc3BlY2lmaWNhZG9zLiBTZSBpc3NvIOkgZmVpdG8gZW5xdWFudG8gYSBhdXRvZGV0ZefjbyDpIGZlaXRhIGVtIGNhZGEgbGlzdGEgZGUNCitkaXNwb3NpdGl2byBlbSBzZXH86m5jaWEuPC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD5Fc3RlIGNhcmFjdGVy7XN0aWNhIOkgcGFydGljdWxhcm1lbnRlIHVzdWFsIHNlIHZvY+ogdGVtDQordW0gZGlzcGxheSBicmFpbGxlIGNvbSBtYWlzIGRlIHVtYSBpbnRlcmZhY2UsIGUuZy4gYW1ib3MgdW1hIHNlcmlhbCBlIHVtYSBwb3J0YQ0KK1VTQi4gTm8gY2FzbyDpIHVzdWFsbWVudGUgbWVsaG9yIGEgbGlzdGEgZGUgcG9ydGFzIFVTQiBwcmltZWlybywgZS5nLg0KK3VzYjpzZXJpYWw6L2Rldi90dHlTMCwgZGUgPC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48bzpwPiZuYnNwOzwvbzpwPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+cG9ydC48c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+SW4gdGhpcyBjYXNlDQoraXQncyB1c3VhbGx5IGJldHRlciB0byBsaXN0IHRoZSBVU0IgcG9ydCBmaXJzdCwgZGVzZGUgcXVlIGEgYXV0b2RldGXn428gdGVuZGUNCitzZXIgY29uZmlhdmVsIGRvIHF1ZSBvIGVzcGVyYWRvLjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PG86cD4mbmJzcDs8L286cD48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PkUuMy4gRXNwZWNpZmljYefjbyBkbyBEaXNwb3NpdGl2byBQQ008L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxvOnA+Jm5ic3A7PC9vOnA+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD5OYSBtYWlvcmlhIGRvcyBjYXNvcyBvcyBkaXNwb3NpdGl2b3MgUENNIOkgdW0gY2FtaW5obw0KK2NoZWlvIGUgYXByb3ByaWFkbyBwYXJhIG8gZGlzcG9zaXRpdm8gZG8gc2lzdGVtYS4gRXhjZef1ZXMgc+NvOiA8L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxvOnA+Jm5ic3A7PC9vOnA+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD5BTFNBPC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48bzpwPiZuYnNwOzwvbzpwPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+TyBub21lIGRvcyBhcmd1bWVudG9zIHPjbyBkaXNwb3NpdGl2b3MgZu1zaWNvcyBlIGzzZ2ljb3MNCitpLmUuIG5hbWVbOmFyZ3VtZW50LC4uLl0uPC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48bzpwPiZuYnNwOzwvbzpwPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+TyBkaXNwb3NpdGl2byBQQ00gcGFkcuNvIOk6PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48bzpwPiZuYnNwOzwvbzpwPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgoKCgIDwvc3Bhbj5QbGF0YWZvcm1hPHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKCgoCA8L3NwYW4+RGlzcG9zaXRpdm88L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKAgPC9zcGFuPl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX188L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIGxhbmc9RU4tVVMgc3R5bGU9J21zby1hbnNpLWxhbmd1YWdlOkVOLVVTJz48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKCgoCA8L3NwYW4+RnJlZUJTRDxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgoKCgIDwvc3Bhbj48c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKA8L3NwYW4+L2Rldi9kc3A8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIGxhbmc9RU4tVVMgc3R5bGU9J21zby1hbnNpLWxhbmd1YWdlOkVOLVVTJz48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKCgoCA8L3NwYW4+TGludXgvQUxTQTxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgIDwvc3Bhbj48c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKA8L3NwYW4+aHc6MCwwPG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBsYW5nPUVOLVVTIHN0eWxlPSdtc28tYW5zaS1sYW5ndWFnZTpFTi1VUyc+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKCgoKAgPC9zcGFuPkxpbnV4L09TUzxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgoCA8L3NwYW4+PHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgPC9zcGFuPi9kZXYvZHNwPG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBsYW5nPUVOLVVTIHN0eWxlPSdtc28tYW5zaS1sYW5ndWFnZTpFTi1VUyc+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKCgoKAgPC9zcGFuPk5ldEJTRDxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgoKCgoCA8L3NwYW4+PHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgPC9zcGFuPi9kZXYvYXVkaW88bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIGxhbmc9RU4tVVMgc3R5bGU9J21zby1hbnNpLWxhbmd1YWdlOkVOLVVTJz48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKCgoCA8L3NwYW4+T3BlbkJTRDxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgoKCgIDwvc3Bhbj48c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKA8L3NwYW4+L2Rldi9hdWRpbzxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gbGFuZz1FTi1VUyBzdHlsZT0nbXNvLWFuc2ktbGFuZ3VhZ2U6RU4tVVMnPjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgoKCgIDwvc3Bhbj5Rbng8c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKCgoKCgoKAgPC9zcGFuPjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgPC9zcGFuPnByZWZlcnJlZCBQQ00gb3V0cHV0IGRldmljZTxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gbGFuZz1FTi1VUyBzdHlsZT0nbXNvLWFuc2ktbGFuZ3VhZ2U6RU4tVVMnPjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgoKCgIDwvc3Bhbj5Tb2xhcmlzPHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKCgoKAgPC9zcGFuPjxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goDwvc3Bhbj4vZGV2L2F1ZGlvPG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBsYW5nPUVOLVVTIHN0eWxlPSdtc28tYW5zaS1sYW5ndWFnZTpFTi1VUyc+PG86cD4mbmJzcDs8L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBsYW5nPUVOLVVTIHN0eWxlPSdtc28tYW5zaS1sYW5ndWFnZTpFTi1VUyc+RS40Lg0KK0VzcGVjaWZpY2Hn428gZG8gRGlzcG9zaXRpdm8gTUlESTxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gbGFuZz1FTi1VUyBzdHlsZT0nbXNvLWFuc2ktbGFuZ3VhZ2U6RU4tVVMnPjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+TmEgbWFpb3JpYSBkb3MgY2Fzb3MgZGUgZGlzcG9zaXRpdm9zIE1JREkg6SB1bSBjYW1pbmhvDQorY29tcGxldG8gZSBhcHJvcHJpYWRvIGRvIHBhcmEgbyBkaXNwb3NpdGl2byBkbyBzaXN0ZW1hLiBFeGNl5/VlcyBz4286PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48bzpwPiZuYnNwOzwvbzpwPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+QUxTQTwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PG86cD4mbmJzcDs8L286cD48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0Pk8gY2xpZW50ZSBlIHBvcnRhIHPjbyBzZXBhcmFkYXMgcG9yIHVtYSB2aXJndWxhLCBpLmUuDQorY2xpZW50OnBvcnQuIENhZGEgdW0gZGV2ZSBzZXIgZXNwZWNpZmljYWRvIGNvbW8gdW0gbnVtZXJvIG91IGNvbW8gdW0gY2Fzbw0KK2VzcGVjaWFsIGRlIHN1YnN0cmluZyBkbyBub21lLjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PG86cD4mbmJzcDs8L286cD48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0Pk8gZGlzcG9zaXRpdm8gcGFkcuNvIE1JREkg6To8L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxvOnA+Jm5ic3A7PC9vOnA+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBsYW5nPUVOLVVTIHN0eWxlPSdtc28tYW5zaS1sYW5ndWFnZTpFTi1VUyc+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKCgoKAgPC9zcGFuPlBsYXRhZm9ybWE8c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKCgIDwvc3Bhbj5EaXNwb3NpdGl2bzxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gbGFuZz1FTi1VUyBzdHlsZT0nbXNvLWFuc2ktbGFuZ3VhZ2U6RU4tVVMnPjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgoCA8L3NwYW4+X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fPG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBsYW5nPUVOLVVTIHN0eWxlPSdtc28tYW5zaS1sYW5ndWFnZTpFTi1VUyc+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKCgoKAgPC9zcGFuPkxpbnV4L0FMU0E8c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goCA8L3NwYW4+PHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgPC9zcGFuPnRoZQ0KK2ZpcnN0IGF2YWlsYWJsZSBNSURJIG91dHB1dCBwb3J0PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBsYW5nPUVOLVVTIHN0eWxlPSdtc28tYW5zaS1sYW5ndWFnZTpFTi1VUyc+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKCgoKAgPC9zcGFuPkxpbnV4L09TUzxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgoCA8L3NwYW4+PHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgPC9zcGFuPi9kZXYvc2VxdWVuY2VyPG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBsYW5nPUVOLVVTIHN0eWxlPSdtc28tYW5zaS1sYW5ndWFnZTpFTi1VUyc+PG86cD4mbmJzcDs8L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD5GLiBDb252ZW7n428gZG8gUGFkcuNvIEJyYWlsbGUgcGFyYSBudW1lcmHn4288L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxvOnA+Jm5ic3A7PC9vOnA+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD5VbSBwYWRy428gYnJhaWxsZSBkZSBjZWx1bGFzIGNvbnNpc3RlIGVtIDYgcG9udG9zIHBhcmENCithbGluaGFkb3MgZW0gMyBsaW5oYXMgZSAyIGNvbHVuYXMuIENhZGEgcG9udG8gcG9kZSBzZXIgaWRlbnRpZmljYWRvIHBvciBvcw0KK276bWVyb3MgYWJhaXhvOjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PG86cD4mbmJzcDs8L286cD48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0IHN0eWxlPSd0ZXh0LWluZGVudDozNS40cHQnPjEgVG9wby1lc3F1ZXJkYSAobGluaGEgMSwNCitjb2x1bmEgMSkuPC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48bzpwPiZuYnNwOzwvbzpwPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgoKAgPC9zcGFuPjxzcGFuDQorc3R5bGU9J21zby10YWItY291bnQ6MSc+IDwvc3Bhbj4yIE1laW8tZXNxdWVyZGEgKGxpbmhhIDIsIGNvbHVuYSAxKS48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxvOnA+Jm5ic3A7PC9vOnA+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKCgoCA8L3NwYW4+PHNwYW4NCitzdHlsZT0nbXNvLXRhYi1jb3VudDoxJz4gPC9zcGFuPjMgRmltLWVzcXVlcmRhIChsaW5oYSAzLCBjb2x1bmEgMSkuPC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48bzpwPiZuYnNwOzwvbzpwPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgoKAgPC9zcGFuPjxzcGFuDQorc3R5bGU9J21zby10YWItY291bnQ6MSc+IDwvc3Bhbj40IFRvcG8tZGlyZWl0YSAobGluaGEgMSwgY29sdW5hIDIpLjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PG86cD4mbmJzcDs8L286cD48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKCgIDwvc3Bhbj48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gPC9zcGFuPjUgTWVpby1kaXJlaXRhIChsaW5oYSAyLCBjb2x1bmEgMikuPC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48bzpwPiZuYnNwOzwvbzpwPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgoKAgPC9zcGFuPjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqA8L3NwYW4+NiBGaW0tZGlyZWl0YSAobGluaGEgMywgY29sdW5hIDIpLjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PG86cD4mbmJzcDs8L286cD48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj5EaXNwbGF5IGJyYWlsbGUNCit0ZW0gaW50cm9kdXppZG8gNDAgbGluaGFzIG5vIGZpbS48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxvOnA+Jm5ic3A7PC9vOnA+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKCgoCA8L3NwYW4+PHNwYW4NCitzdHlsZT0nbXNvLXRhYi1jb3VudDoxJz4gPC9zcGFuPjcgQWJhaXhvLWVzcXVlcmRhIChsaW5oYSA0LCBjb2x1bmEgMSkuPC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48bzpwPiZuYnNwOzwvbzpwPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgoKAgPC9zcGFuPjxzcGFuDQorc3R5bGU9J21zby10YWItY291bnQ6MSc+IDwvc3Bhbj44IEFiYWl4by1kaXJlaXRhIChsaW5oYSA0LCBjb2x1bmEgMikuPC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48bzpwPiZuYnNwOzwvbzpwPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPlRhbHZleiBhIGltYWdlbQ0KK2ZpY2Fy4SBtYWlzIGZhY2lsIGRlIGVudGVuZGVyLjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PG86cD4mbmJzcDs8L286cD48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKCgoKAgPC9zcGFuPjxzcGFuDQorbGFuZz1FTi1VUyBzdHlsZT0nbXNvLWFuc2ktbGFuZ3VhZ2U6RU4tVVMnPjEgbyBvIDQ8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIGxhbmc9RU4tVVMgc3R5bGU9J21zby1hbnNpLWxhbmd1YWdlOkVOLVVTJz48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKCgoKAgPC9zcGFuPjIgbyBvIDU8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIGxhbmc9RU4tVVMgc3R5bGU9J21zby1hbnNpLWxhbmd1YWdlOkVOLVVTJz48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKCgoKAgPC9zcGFuPjMgbyBvIDwvc3Bhbj42PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKCgoKCgIDwvc3Bhbj43IG8gbyA4PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48bzpwPiZuYnNwOzwvbzpwPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+Ry4gQ/NkaWdvIE5vcnRlLUFtZXJpY2FubyBkbyBQYWRy428gQnJhaWxsZTwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PG86cD4mbmJzcDs8L286cD48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKAgPC9zcGFuPjxzcGFuDQorbGFuZz1FTi1VUyBzdHlsZT0nbXNvLWFuc2ktbGFuZ3VhZ2U6RU4tVVMnPk51bSBIZXg8c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKCgIDwvc3Bhbj5Qb250b3M8c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKCgoA0KKzwvc3Bhbj5EZXNjcmnn4288bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIGxhbmc9RU4tVVMgc3R5bGU9J21zby1hbnNpLWxhbmd1YWdlOkVOLVVTJz48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gDQorPC9zcGFuPistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSs8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj58PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKAgPC9zcGFuPjA8c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+MDA8c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj5bNzxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goA0KKzwvc3Bhbj40PHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPjhdPHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+TlVMICh2YXppbyk8c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKCgoKCgoKCgIDwvc3Bhbj48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKCgoKCgoKCgoKCgoKCgoKCgoKA8L3NwYW4+fDwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPnw8c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goCA8L3NwYW4+MTxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gDQorPC9zcGFuPjAxPHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPls3PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+MTxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goCA8L3NwYW4+OF08c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj5TT0ggKGluaWNpbyBkbyBjYWJl52FsaG8pPHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKCgoKCgoKCgoKCgoKCgoKAgPC9zcGFuPnw8L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj58PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKAgPC9zcGFuPjI8c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oA0KKzwvc3Bhbj4wMjxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj5bNyAyMTxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgIDwvc3Bhbj44XTxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj5TVFgNCisoaW5pY2lvIGRvIHRleHRvKTxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKCgoKCgoKCgoKCgoKCgoKCgoKAgPC9zcGFuPnw8L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj58IDxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgPC9zcGFuPjM8c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oA0KKzwvc3Bhbj4wMzxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj5bNzxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPjE0PHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqANCis8L3NwYW4+OF08c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+RVRYIChmaW0gZG8gdGV4dG8pPHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKCgoKCgoKCgoKCgIDwvc3Bhbj48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKCgoKCgoKCgoKA8L3NwYW4+fDwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPnw8c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goCA8L3NwYW4+NDxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gDQorPC9zcGFuPjA0PHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPls3PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+MTQ1IDhdPHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqANCis8L3NwYW4+RU9UIChmaW0gZGEgdHJhbnNtaXNz428pIDxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgoKCgoKCgoKCgoKCgoKCgoDwvc3Bhbj58PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+fDxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPjxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gPC9zcGFuPjU8c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj4wNTxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gDQorPC9zcGFuPls3PHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPjEgNSA4XTxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPkVOUSAocGVzcXVpc2EpPHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoCA8L3NwYW4+fDwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPnw8c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goCA8L3NwYW4+NjxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj4wNjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPls3IDIxNDxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gDQorPC9zcGFuPjhdPHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPkFDSyAocmVjb25oZWNpbWVudG8pPHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKCgoKCgoKCgoKCgoKCgoKCgoKCgoCA8L3NwYW4+fDwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPnw8c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goCA8L3NwYW4+NzxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gDQorPC9zcGFuPjA3PHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPls3IDIxNDUgOF08c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj5CRUwgKGNhbXBhaW5oYSk8c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKAgPC9zcGFuPnw8L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj48c3BhbiBsYW5nPUVOLVVTDQorc3R5bGU9J21zby1hbnNpLWxhbmd1YWdlOkVOLVVTJz58PHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgDQorPC9zcGFuPjg8c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+MDg8c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj5bNyAyMSA1IDhdPHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqANCis8L3NwYW4+QlMgKGJhY2sgc3BhY2UpPHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgIDwvc3Bhbj58PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+fDxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgIDwvc3Bhbj45PHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqANCis8L3NwYW4+MDk8c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+WzcgMiA0PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+OF08c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+SFQNCisodGFiIGhvcml6b250YWwpPHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgIDwvc3Bhbj58PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+fDxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPjEwPHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqANCis8L3NwYW4+MEE8c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+WzcgMiA0NSA4XTxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPkxGIChsaW5oYSBkZSBhdmFu528pPHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKCgoKCgoKCgoKCgoKCgoKCgoKCgoCA8L3NwYW4+fDwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPnw8c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj4xMSA8c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oDwvc3Bhbj4wQjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPls3MyAxPHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgDQorPC9zcGFuPjhdPHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPlZUICh0YWIgdmVydGljYWwpPHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoCA8L3NwYW4+fDwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPnw8c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj4xMjxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj48c3QxOm1ldHJpY2NvbnZlcnRlcg0KK1Byb2R1Y3RJRD0iMEMiIHc6c3Q9Im9uIj4wQzwvc3QxOm1ldHJpY2NvbnZlcnRlcj48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj5bNzMyMTxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goA0KKzwvc3Bhbj44XTxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj5GRiAoZm9ybWEgZGUgYXZhbudhcik8c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKCgoKCgoKCgoKCgoKCgoKCgoKAgPC9zcGFuPnw8L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj48c3BhbiBsYW5nPUVOLVVTDQorc3R5bGU9J21zby1hbnNpLWxhbmd1YWdlOkVOLVVTJz58PHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqANCis8L3NwYW4+MTM8c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+MEQgPHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oDwvc3Bhbj5bNzMgMTQ8c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oA0KKzwvc3Bhbj44XTxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj5DUiAocmV0b3Jubyk8c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKCgoKCgoCA8L3NwYW4+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKCgoKCgoKCgoKCgoKCgoKCgoKCgoDwvc3Bhbj58PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBsYW5nPUVOLVVTIHN0eWxlPSdtc28tYW5zaS1sYW5ndWFnZTpFTi1VUyc+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+fDxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gDQorPC9zcGFuPjE0PHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPjBFPHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+WzczIDE0NSA4XTxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gDQorPC9zcGFuPlNPIChzaGlmdCBvdXQpPHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgoKCgoKCgoKCgoKCgIDwvc3Bhbj48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKCgoKCgoKCgoKCgoDwvc3Bhbj58PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBsYW5nPUVOLVVTIHN0eWxlPSdtc28tYW5zaS1sYW5ndWFnZTpFTi1VUyc+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+fDxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gDQorPC9zcGFuPjE1PHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPjxzdDE6bWV0cmljY29udmVydGVyDQorUHJvZHVjdElEPSIwRiIgdzpzdD0ib24iPjBGPC9zdDE6bWV0cmljY29udmVydGVyPjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPls3MyAxIDUgOF08c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oA0KKzwvc3Bhbj5TSSAoc2hpZnQgaW4pPHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKAgPC9zcGFuPnw8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIGxhbmc9RU4tVVMgc3R5bGU9J21zby1hbnNpLWxhbmd1YWdlOkVOLVVTJz48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj58PHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqANCis8L3NwYW4+MTY8c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+MTA8c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj5bNzMyMTQ8c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oA0KKzwvc3Bhbj44XTxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj5ETEUgKGRhdGEgbGluayBlc2NhcGUpPHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKCgoKCgoKCgoKCgoKCgoKCgoKAgPC9zcGFuPnw8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIGxhbmc9RU4tVVMgc3R5bGU9J21zby1hbnNpLWxhbmd1YWdlOkVOLVVTJz48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj58PHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqANCis8L3NwYW4+MTc8c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+MTE8c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj5bNzMyMTQ1IDhdPHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqANCis8L3NwYW4+REMxIChkaXJlY3QgY29udHJvbCAxKTxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgoKCgoKCgoKCgoKCgoKCgoKCgIDwvc3Bhbj58PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBsYW5nPUVOLVVTIHN0eWxlPSdtc28tYW5zaS1sYW5ndWFnZTpFTi1VUyc+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+fDxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gDQorPC9zcGFuPjE4PHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPjEyPHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+WzczMjEgNSA4XTxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gDQorPC9zcGFuPkRDMiAoZGlyZWN0IGNvbnRyb2wgMik8c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKCgoKCgoKCgoKCgoKCgoKCgoCA8L3NwYW4+fDxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gbGFuZz1FTi1VUyBzdHlsZT0nbXNvLWFuc2ktbGFuZ3VhZ2U6RU4tVVMnPjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPnw8c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oA0KKzwvc3Bhbj4xOTxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj4xMzxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPls3MzIgNDxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gDQorPC9zcGFuPjhdPHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPkRDMyAoZGlyZWN0IGNvbnRyb2wgMyk8c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKCgoKCgoKCgoKCgoKCgoKCgoCA8L3NwYW4+fDxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gbGFuZz1FTi1VUyBzdHlsZT0nbXNvLWFuc2ktbGFuZ3VhZ2U6RU4tVVMnPjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPnw8c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oA0KKzwvc3Bhbj4yMDxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj4xNDxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPls3MzIgNDUgOF08c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oA0KKzwvc3Bhbj5EQzQgKGRpcmVjdCBjb250cm9sIDQpPHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKCgoKCgoKCgoKCgoKCgoKCgoKAgPC9zcGFuPnw8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj58PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+MjE8c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oA0KKzwvc3Bhbj4xNTxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj5bNzMgMTxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPjY4XTxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj5OQUsNCisobuNvIHJlY29uaGVjaW1lbnRvKTxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKCgoKCgoKCgoKCgoKCgoDwvc3Bhbj58PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+fDxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPjIyPHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPjE2PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+WzczMjE8c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oA0KKzwvc3Bhbj42OF08c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+U1lOIChzaW5jcm9uaXph5+NvKTxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgIDwvc3Bhbj58PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+fDxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPjIzPHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqANCis8L3NwYW4+MTc8c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+WzcgMiA0NTY4XTxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPkVUQiAoZmltIGRvIGJsb2NvIGRlIHRleHRvKTxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgoKCgoKCgoKCgoKCgoCA8L3NwYW4+fDwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPnw8c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj4yNDxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gDQorPC9zcGFuPjE4PHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPls3MyAxNCA2OF08c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj5DQU4gKGNhbmNlbGEpPHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKAgPC9zcGFuPnw8L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj58PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+MjU8c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oA0KKzwvc3Bhbj4xOTxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj5bNzMgMTQ1NjhdPHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+RU0gKGZpbSBkbyBtZWlvKTxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgoKCgoKCgoDwvc3Bhbj48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKCgoKCgoKCgoKCgoKCgPC9zcGFuPnw8L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj58PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+MjY8c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oA0KKzwvc3Bhbj4xQTxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj5bNzMgMSA1NjhdPHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+U1VCIChzdWJzdGl0dXRvKTxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgIDwvc3Bhbj58PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+PHNwYW4gbGFuZz1FTi1VUw0KK3N0eWxlPSdtc28tYW5zaS1sYW5ndWFnZTpFTi1VUyc+fDxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gDQorPC9zcGFuPjI3PHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPjFCPHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+WzcgMiA0IDY4XTxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gDQorPC9zcGFuPkVTQyAoZXNjYXBlKTxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoCA8L3NwYW4+fDxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPnw8c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj4yODxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj48c3QxOm1ldHJpY2NvbnZlcnRlcg0KK1Byb2R1Y3RJRD0iMUMiIHc6c3Q9Im9uIj4xQzwvc3QxOm1ldHJpY2NvbnZlcnRlcj48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj5bNyAyMSA1NjhdPHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqANCis8L3NwYW4+RlMgKGFycXVpdm8gc2VwYXJhZG9yKTxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgoKCgoKCgoKCgoKCgoKCgoKCgIDwvc3Bhbj58PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+fDxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPjI5PHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqANCis8L3NwYW4+MUQ8c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+WzcgMjE0NTY4XTxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPkdTIChncnVwbyBzZXBhcmFkb3IpPHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKCgoKCgoKCgoKCgoKCgoKCgoKCgoCA8L3NwYW4+fDwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPnw8c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj4zMDxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gDQorPC9zcGFuPjFFPHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPls3PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKAgPC9zcGFuPjQ1IDhdPHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqANCis8L3NwYW4+UlMgKGdyYXZhZG9yIHNlcGFyYWRvcik8c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKCgoKCgoKCgoKCgoKCgoKCgIDwvc3Bhbj58PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+fDxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPjMxPHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPjxzdDE6bWV0cmljY29udmVydGVyDQorUHJvZHVjdElEPSIxRiIgdzpzdD0ib24iPjFGPC9zdDE6bWV0cmljY29udmVydGVyPjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPls3PHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgDQorPC9zcGFuPjQ1NjhdPHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPlVTICh1bmlkYWRlIHNlcGFyYWRvcik8c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKCgoKCgoKCgoKCgoKCgoKCgoCA8L3NwYW4+fDwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPnw8c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj4zMjxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gDQorPC9zcGFuPjIwPHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPls8c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKCgoKCgIDwvc3Bhbj5dPHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqANCis8L3NwYW4+ZXNwYedvPHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgIDwvc3Bhbj58PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+fCA8c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gPC9zcGFuPjMzPHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqANCis8L3NwYW4+MjE8c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+WyAzMiA0IDYgXTxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPnBvbnRvIGRlIGV4Y2xhbWHn4288c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKCgoKCgoKCgoKCgoKCgoKCgoKCgoCA8L3NwYW4+fDwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPnw8c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj4zNDxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gDQorPC9zcGFuPjIyPHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPls8c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKCgIDwvc3Bhbj41PHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPl08c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj5tYXJjYefjbyBkZSB0ZXh0bzxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKAgPC9zcGFuPnw8L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj58IDxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqA8L3NwYW4+MzU8c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oA0KKzwvc3Bhbj4yMzxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj5bIDM8c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj40NTYgXTxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gDQorPC9zcGFuPnNpbWJvbG8gZG8gbnVtZXJvPHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoCA8L3NwYW4+fDwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPnw8c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj4zNjxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gDQorPC9zcGFuPjI0PHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPls8c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj4yMTQgNiBdPHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqANCis8L3NwYW4+c2ltYm9sbyBkZSBkb2xhcjxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKCgoKCgoCA8L3NwYW4+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKCgoKCgoKCgoKCgoKCgoKCgPC9zcGFuPnw8L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj48c3BhbiBsYW5nPUVOLVVTDQorc3R5bGU9J21zby1hbnNpLWxhbmd1YWdlOkVOLVVTJz58PHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqANCis8L3NwYW4+Mzc8c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+MjU8c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj5bPHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqA8L3NwYW4+MTQgNiBdPHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqANCis8L3NwYW4+c2ltYm9sbyBkZSBwb3JjZW50bzxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgIDwvc3Bhbj58PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBsYW5nPUVOLVVTIHN0eWxlPSdtc28tYW5zaS1sYW5ndWFnZTpFTi1VUyc+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+fDxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gDQorPC9zcGFuPjM4PHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPjI2PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+WyAzMjE0IDYgXTxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gDQorPC9zcGFuPmFtcGVyc2FuZDxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoCA8L3NwYW4+fDxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPnw8c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj4zOTxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gDQorPC9zcGFuPjI3PHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPlsgMzxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgoKCgIDwvc3Bhbj5dPHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqANCis8L3NwYW4+YWNlbnRvIGFndWRvPHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgIDwvc3Bhbj58PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+fDxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPjQwPHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqANCis8L3NwYW4+Mjg8c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+WyAzMjEgNTYgXTxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPnBhcmVudGVzZXMgZXNxdWVyZG88c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKCgoKCgoKCgoKCgoKCgoKCgoKCgoCA8L3NwYW4+fDwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPnw8c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goCA8L3NwYW4+NCA8c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gPC9zcGFuPjI5MTxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj5bDQorMzIgNDU2ICkgcGFyZW50ZXNlcyBkaXJlaXRvPHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgIDwvc3Bhbj58PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+fDxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPjQyPHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqANCis8L3NwYW4+MkE8c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+WzxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgIDwvc3Bhbj4xPHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPjYNCitdPHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPmFzdGVyaXNjbzxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoCA8L3NwYW4+fDwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPnw8c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj40MzxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gDQorPC9zcGFuPjJCPHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPlsgMzxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPjQgNiBdPHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqANCis8L3NwYW4+c2luYWwgZGUgbWFpczxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgIDwvc3Bhbj58PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+fDxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPjQ0PHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPjxzdDE6bWV0cmljY29udmVydGVyDQorUHJvZHVjdElEPSIyQyIgdzpzdD0ib24iPjJDPC9zdDE6bWV0cmljY29udmVydGVyPjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPls8c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKCgoKANCis8L3NwYW4+NiBdPHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPnZpcmd1bGE8c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoCA8L3NwYW4+fDwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPnw8c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj40NTxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gDQorPC9zcGFuPjJEPHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPlsgMzxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgoCA8L3NwYW4+NiBdPHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqANCis8L3NwYW4+c2luYWwgZGUgbWVub3M8c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgIDwvc3Bhbj58PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+fDxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPjQ2PHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqANCis8L3NwYW4+MkU8c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+WzxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgoCA8L3NwYW4+NCA2IF08c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oA0KKzwvc3Bhbj5wb250byA8c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgPC9zcGFuPnw8L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj58PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+NDc8c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+PHN0MTptZXRyaWNjb252ZXJ0ZXINCitQcm9kdWN0SUQ9IjJGIiB3OnN0PSJvbiI+MkY8L3N0MTptZXRyaWNjb252ZXJ0ZXI+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+WyAzPHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqANCis8L3NwYW4+NDxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goCA8L3NwYW4+XTxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPmNvbnRyYSBiYXJyYSA8c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKCgoKCgoKCgPC9zcGFuPjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgoKCgoKCgoKCgoKCgoKCgoKCgPC9zcGFuPnw8L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj48c3BhbiBsYW5nPUVOLVVTDQorc3R5bGU9J21zby1hbnNpLWxhbmd1YWdlOkVOLVVTJz58PHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqANCis8L3NwYW4+NDg8c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+MzA8c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj5bIDM8c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKANCis8L3NwYW4+NTYgXTxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj56ZXJvPHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKAgPC9zcGFuPnw8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj58PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+NDk8c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oA0KKzwvc3Bhbj4zMTxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj5bPHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+MjxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKCgIDwvc3Bhbj5dPHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+dW0gPHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoDwvc3Bhbj58PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+fDxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPjUwPHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqANCis8L3NwYW4+MzI8c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+WyAzMjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgoKAgPC9zcGFuPl08c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+ZG9pczxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgIDwvc3Bhbj58PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+fDxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPjUxPHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqANCis8L3NwYW4+MzM8c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+WzxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPjI8c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+NTxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPl0gPHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqA8L3NwYW4+dHLqcw0KKzxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoDwvc3Bhbj58PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+fDxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPjUyPHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqANCis8L3NwYW4+MzQ8c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+WzxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPjI8c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+NTYgXTxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPnF1YXRybzxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoCA8L3NwYW4+fDwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPnw8c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj41MzxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gDQorPC9zcGFuPjM1PHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPls8c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj4yPHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgIDwvc3Bhbj42IF08c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj5jaW5jbzxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKAgPC9zcGFuPnw8L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj58PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+NTQ8c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oA0KKzwvc3Bhbj4zNjxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj5bIDMyPHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+NTxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gDQorPC9zcGFuPl08c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+c2VpczxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgIDwvc3Bhbj58PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+fDxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPjU1PHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqANCis8L3NwYW4+Mzc8c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+WyAzMjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPjU2IF08c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+c2V0ZQ0KKzxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoDwvc3Bhbj58PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+fDxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPjU2PHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqANCis8L3NwYW4+Mzg8c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+WyAzMjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgIDwvc3Bhbj42IF08c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oA0KKzwvc3Bhbj5vaXRvIDxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgPC9zcGFuPnw8L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj58PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+NTc8c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oA0KKzwvc3Bhbj4zOTxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj5bIDM8c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goCA8L3NwYW4+NTxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj5dPHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+bm92ZTxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgIDwvc3Bhbj58PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+fDxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPjU4PHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqANCis8L3NwYW4+M0E8c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+WzxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgIDwvc3Bhbj4xIDU2IF08c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oA0KKzwvc3Bhbj5wb250byBlIHZpcmd1bGE8c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKCgoKAgPC9zcGFuPjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgoKCgoKCgoKCgoKCgoKCgoKCgoKA8L3NwYW4+fDwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPnw8c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj41OTxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gDQorPC9zcGFuPjNCPHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPls8c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKCgIDwvc3Bhbj41NiBdPHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqANCis8L3NwYW4+ZG9pcyBwb250b3M8c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKCgIDwvc3Bhbj48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgPC9zcGFuPnw8L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj58PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+NjA8c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+PHN0MTptZXRyaWNjb252ZXJ0ZXINCitQcm9kdWN0SUQ9IjNDIiB3OnN0PSJvbiI+M0M8L3N0MTptZXRyaWNjb252ZXJ0ZXI+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+WzxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gDQorPC9zcGFuPjIxPHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPjYgXTxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPmphY2Fy6SBtZW5vczxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgoKCgoKAgPC9zcGFuPjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgPC9zcGFuPnw8L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj58PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+NjE8c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oA0KKzwvc3Bhbj4zRDxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj5bIDMyMTQ1NiBdPHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+aWd1YWw8c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKCgoKCgoKANCis8L3NwYW4+PHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgoKCgoDwvc3Bhbj48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKCgoKCgoKCgoKCgoKCgoKCgoKCgoDwvc3Bhbj58PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+fDxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPjYyPHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqANCis8L3NwYW4+M0U8c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+WyAzPHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+NDU8c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+XTxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPmphY2Fy6SBtYWlzPHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqANCis8L3NwYW4+PHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgoKCgoKA8L3NwYW4+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKCgoKCgoKCgoKCgoKCgoKCgoKCgoKA8L3NwYW4+fDwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPnw8c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj42MzxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj48c3QxOm1ldHJpY2NvbnZlcnRlcg0KK1Byb2R1Y3RJRD0iM0YiIHc6c3Q9Im9uIj4zRjwvc3QxOm1ldHJpY2NvbnZlcnRlcj48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj5bPHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgDQorPC9zcGFuPjE0NTYgXTxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj5pbnRlcnJvZ2Hn4288c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoDwvc3Bhbj58PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+fDxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPjY0PHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqANCis8L3NwYW4+NDA8c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+Wzc8c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goCA8L3NwYW4+NDxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gPC9zcGFuPl08c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+ZQ0KK2NvbWVyY2lhbDxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKA8L3NwYW4+fDwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPnw8c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj42NTxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gDQorPC9zcGFuPjQxPHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPls3PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+MTxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKAgPC9zcGFuPl08c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj5tYWl1c2N1bG8gYSA8c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgPC9zcGFuPnw8L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj58PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+NjY8c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oA0KKzwvc3Bhbj40MjxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj5bNyAyMTxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgoCA8L3NwYW4+XTxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj5tYWl1c2N1bG8NCitiPHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKAgPC9zcGFuPnw8L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj58PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+Njc8c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oA0KKzwvc3Bhbj40MzxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj5bNzxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPjE0PHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgIDwvc3Bhbj5dPHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+bWFpdXNjdWxvIGM8c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgIDwvc3Bhbj58PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+fDxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPjY4PHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqANCis8L3NwYW4+NDQ8c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+Wzc8c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj4xNDU8c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+XTxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPm1haXVzY3VsbyBkPHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoCA8L3NwYW4+fDwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPnw8c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj42OTxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gDQorPC9zcGFuPjQ1PHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPls3PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+MSA1PHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPl08c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj5tYWl1c2N1bG8gZTxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgoKCgoKAgPC9zcGFuPjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoDwvc3Bhbj58PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+fDxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPjcwPHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqANCis8L3NwYW4+NDY8c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+WzcgMjE0PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKAgPC9zcGFuPl08c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+bWFpdXNjdWxvDQorZjxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgIDwvc3Bhbj58PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+fDxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPjcxPHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqANCis8L3NwYW4+NDc8c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+WzcgMjE0NTxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPl08c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+bWFpdXNjdWxvDQorZzxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgIDwvc3Bhbj58PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+fDxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPjcyPHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqANCis8L3NwYW4+NDg8c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+WzcgMjEgNTxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPl08c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+bWFpdXNjdWxvDQoraDxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgIDwvc3Bhbj58PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+fDxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPjczPHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqANCis8L3NwYW4+NDk8c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+WzcgMiA0IDxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgPC9zcGFuPl08c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+bWFpdXNjdWxvDQoraTxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgIDwvc3Bhbj58PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+fDxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPjc0PHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqANCis8L3NwYW4+NEE8c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+WzcgMiA0NTxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPl08c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+bWFpdXNjdWxvDQorajxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgIDwvc3Bhbj58PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+fDxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPjc1PHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqANCis8L3NwYW4+NEI8c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+WzczIDE8c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKAgPC9zcGFuPl08c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+bWFpdXNjdWxvDQorazxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgIDwvc3Bhbj58PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+fDxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPjc2PHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPjxzdDE6bWV0cmljY29udmVydGVyDQorUHJvZHVjdElEPSI0QyIgdzpzdD0ib24iPjRDPC9zdDE6bWV0cmljY29udmVydGVyPjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPls3MzIxPHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgoA0KKzwvc3Bhbj5dPHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPm1haXVzY3VsbyBsPHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKAgPC9zcGFuPjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgPC9zcGFuPnw8L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj58PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+Nzc8c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oA0KKzwvc3Bhbj40RDxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj5bNzMgMTQ8c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goCA8L3NwYW4+XTxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj5tYWl1c2N1bG8NCittPHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKAgPC9zcGFuPnw8L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj58PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+Nzg8c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oA0KKzwvc3Bhbj40RTxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj5bNzMgMTQ1PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+XTxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj5tYWl1c2N1bG8NCituPHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKAgPC9zcGFuPnw8L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj58PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+Nzk8c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+PHN0MTptZXRyaWNjb252ZXJ0ZXINCitQcm9kdWN0SUQ9IjRGIiB3OnN0PSJvbiI+NEY8L3N0MTptZXRyaWNjb252ZXJ0ZXI+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+WzczIDEgNTxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gDQorPC9zcGFuPl08c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+bWFpdXNjdWxvIG88c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgIDwvc3Bhbj58PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+fDxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPjgwPHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqANCis8L3NwYW4+NTA8c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+WzczMjE0PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKAgPC9zcGFuPl08c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+bWFpdXNjdWxvDQorcDxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKCgoCA8L3NwYW4+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKA8L3NwYW4+fDwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPnw8c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj44MTxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gDQorPC9zcGFuPjUxPHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPls3MzIxNDU8c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj5dPHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPm1haXVzY3Vsbw0KK3E8c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoCA8L3NwYW4+fDwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPnw8c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj44MjxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gDQorPC9zcGFuPjUyPHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPls3MzIxIDU8c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj5dPHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPm1haXVzY3Vsbw0KK3I8c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoCA8L3NwYW4+fDwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPnw8c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj44MzxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gDQorPC9zcGFuPjUzPHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPls3MzIgNDxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgIDwvc3Bhbj5dPHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPm1haXVzY3Vsbw0KK3M8c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoCA8L3NwYW4+fDwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPnw8c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj44NDxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gDQorPC9zcGFuPjU0PHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPls3MzIgNDU8c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj5dPHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPm1haXVzY3Vsbw0KK3Q8c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoCA8L3NwYW4+fDwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPnw8c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj44NTxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gDQorPC9zcGFuPjU1PHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPls3MyAxPHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+NiBdPHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPm1haXVzY3Vsbw0KK3U8c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoCA8L3NwYW4+fDwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPnw8c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj44NjxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gDQorPC9zcGFuPjU2PHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPls3MzIxPHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+NiBdPHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPm1haXVzY3Vsbw0KK3Y8c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoCA8L3NwYW4+fDwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPnw8c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj44NzxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gDQorPC9zcGFuPjU3PHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPls3IDIgNDU2IF08c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj5tYWl1c2N1bG8gdzxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoCA8L3NwYW4+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKCgoDwvc3Bhbj58PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+fDxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPjg4PHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqANCis8L3NwYW4+NTg8c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+WzczIDE0IDYgXTxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPm1haXVzY3VsbyB4PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoCA8L3NwYW4+fDwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPnw8c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj44OTxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gDQorPC9zcGFuPjU5PHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPls3MyAxNDU2IF08c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj5tYWl1c2N1bG8geTxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKAgPC9zcGFuPnw8L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIGxhbmc9RU4tVVMgc3R5bGU9J21zby1hbnNpLWxhbmd1YWdlOkVOLVVTJz48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj58PHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqANCis8L3NwYW4+OTA8c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+NUE8c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj5bNzMgMSA1NiBdPHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqANCis8L3NwYW4+bWFpdXNjdWxvIHo8c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgIDwvc3Bhbj58PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+fDxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPjkxPHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqANCis8L3NwYW4+NUI8c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+WzcgMiA0IDYgXTxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPmNvbGNoZXRlIGVzcXVlcmRvPHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoCA8L3NwYW4+fDwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPnw8c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj45MjxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj48c3QxOm1ldHJpY2NvbnZlcnRlcg0KK1Byb2R1Y3RJRD0iNUMiIHc6c3Q9Im9uIj41Qzwvc3QxOm1ldHJpY2NvbnZlcnRlcj48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj5bNyAyMSA1NiBdPHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqANCis8L3NwYW4+YmFycmEgaW52ZXJ0aWRhPHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgIDwvc3Bhbj58PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+fDxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPjkzPHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqANCis8L3NwYW4+NUQ8c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+WzcgMjE0NTYgXTxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPmNvbGNoZXRlIGRpcmVpdG88c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoCA8L3NwYW4+fDwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPnw8c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj45NDxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj41RTxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPls3PHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgDQorPC9zcGFuPjQ1PHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPl08c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj5hY2VudG8gY2lyY3VuZmxleG88c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKCgoKCgoKCgoKCgoKCgoKCgoKCgoKAgPC9zcGFuPnw8L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj48c3BhbiBsYW5nPUVOLVVTDQorc3R5bGU9J21zby1hbnNpLWxhbmd1YWdlOkVOLVVTJz58PHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqANCis8L3NwYW4+OTU8c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+PHN0MTptZXRyaWNjb252ZXJ0ZXINCitQcm9kdWN0SUQ9IjVGIiB3OnN0PSJvbiI+NUY8L3N0MTptZXRyaWNjb252ZXJ0ZXI+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+WzxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goDwvc3Bhbj40NTYgXTxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gDQorPC9zcGFuPnNvYnJldHJh5288c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoCA8L3NwYW4+fDxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gbGFuZz1FTi1VUyBzdHlsZT0nbXNvLWFuc2ktbGFuZ3VhZ2U6RU4tVVMnPjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPnw8c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oA0KKzwvc3Bhbj45NjxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj42MDxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPls8c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKCgDQorPC9zcGFuPjQ8c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKAgPC9zcGFuPl08c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj5hY2VudG8gZ3JhdmU8c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKAgPC9zcGFuPnw8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj58PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+OTc8c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oA0KKzwvc3Bhbj42MTxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj5bPHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKAgPC9zcGFuPjE8c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKCgIDwvc3Bhbj5dPHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+bWludXNjdWxvIGE8c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgIDwvc3Bhbj58PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+fDxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPjk4PHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqANCis8L3NwYW4+NjI8c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+WzxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPjIxPHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgoCA8L3NwYW4+XTxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPm1pbnVzY3VsbyBiPHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoCA8L3NwYW4+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKCgoKCgPC9zcGFuPnw8L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj58PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+OTk8c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oA0KKzwvc3Bhbj42MzxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj5bPHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKAgPC9zcGFuPjE0PHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgIDwvc3Bhbj5dPHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+bWludXNjdWxvIGM8c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgIDwvc3Bhbj58PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+fCAxMDA8c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj42NDxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gDQorPC9zcGFuPls8c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKAgPC9zcGFuPjE0NTxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPl08c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+bWludXNjdWxvDQorZDxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgIDwvc3Bhbj58PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+fCAxMDE8c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj42NTxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gDQorPC9zcGFuPls8c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKAgPC9zcGFuPjEgNTxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPl08c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+bWludXNjdWxvDQorZTxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgIDwvc3Bhbj58PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+fCAxMDI8c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj42NjxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gDQorPC9zcGFuPls8c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+MjE0PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKAgPC9zcGFuPl08c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+bWludXNjdWxvDQorZjxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKA8L3NwYW4+fDwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPnwgMTAzPHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+Njc8c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oA0KKzwvc3Bhbj5bPHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPjIxNDU8c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj5dPHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPm1pbnVzY3Vsbw0KK2c8c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoCA8L3NwYW4+fDwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPnwgMTA0PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+Njg8c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oA0KKzwvc3Bhbj5bPHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPjIxIDU8c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj5dPHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPm1pbnVzY3Vsbw0KK2g8c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoCA8L3NwYW4+fDwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPnwgMTA1PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+Njk8c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oA0KKzwvc3Bhbj5bPHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPjIgNDxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgIDwvc3Bhbj5dPHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPm1pbnVzY3Vsbw0KK2k8c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoCA8L3NwYW4+fDwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPnwgMTA2PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+NkE8c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+WzxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPjIgNDU8c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oA0KKzwvc3Bhbj5dPHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPm1pbnVzY3VsbyBqPHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoCA8L3NwYW4+fDwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPnwgMTA3PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+NkI8c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+WyAzDQorMTxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKAgPC9zcGFuPl08c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oA0KKzwvc3Bhbj5taW51c2N1bG8gazxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKCgIDwvc3Bhbj48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gPC9zcGFuPjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgPC9zcGFuPnw8L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj58IDEwODxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPjxzdDE6bWV0cmljY29udmVydGVyIFByb2R1Y3RJRD0iNkMiIHc6c3Q9Im9uIj42Qzwvc3QxOm1ldHJpY2NvbnZlcnRlcj48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj5bIDMyMTxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKANCis8L3NwYW4+XTxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj5taW51c2N1bG8gbDxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKAgPC9zcGFuPnw8L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj58IDEwOTxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPjZEPHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPlsgMw0KKzE0PHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgIDwvc3Bhbj5dPHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqANCis8L3NwYW4+bWludXNjdWxvIG08c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKCgIDwvc3Bhbj48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gPC9zcGFuPjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgoKCgoKCgoKCgoKCgoKCgoKA8L3NwYW4+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKCgoKCgoKA8L3NwYW4+fDwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPnwgMTEwPHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+NkU8c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+WyAzDQorMTQ1PHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPl08c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oA0KKzwvc3Bhbj5taW51c2N1bG8gbjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKAgPC9zcGFuPnw8L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj58IDExMTxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPjxzdDE6bWV0cmljY29udmVydGVyIFByb2R1Y3RJRD0iNkYiIHc6c3Q9Im9uIj42Rjwvc3QxOm1ldHJpY2NvbnZlcnRlcj48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj5bIDMgMSA1PHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqANCis8L3NwYW4+XTxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj5taW51c2N1bG8gbzxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKAgPC9zcGFuPnw8L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj58IDExMjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPjcwPHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPlsNCiszMjE0PHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgIDwvc3Bhbj5dPHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqANCis8L3NwYW4+bWludXNjdWxvIHA8c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgIDwvc3Bhbj58PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+fCAxMTM8c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj43MTxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj5bDQorMzIxNDU8c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+XTxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gDQorPC9zcGFuPm1pbnVzY3VsbyBxPHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoCA8L3NwYW4+fDwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPnwgMTE0PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+NzI8c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+Ww0KKzMyMSA1PHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPl08c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oA0KKzwvc3Bhbj5taW51c2N1bG8gcjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKAgPC9zcGFuPnw8L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj58IDExNTxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPjczPHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPlsNCiszMiA0PHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgIDwvc3Bhbj5dPHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqANCis8L3NwYW4+bWludXNjdWxvIHM8c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgIDwvc3Bhbj58PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+fCAxMTY8c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj43NDxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj5bDQorMzIgNDU8c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+XTxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gDQorPC9zcGFuPm1pbnVzY3VsbyB0PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoCA8L3NwYW4+fDwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPnwgMTE3PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+NzUgPHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqA8L3NwYW4+WyAzDQorMTxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj42IF08c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oA0KKzwvc3Bhbj5taW51c2N1bG8gdTxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKAgPC9zcGFuPnw8L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj58IDExODxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPjc2PHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPlsNCiszMjE8c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+NiBdPHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqANCis8L3NwYW4+bWludXNjdWxvIHY8c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgIDwvc3Bhbj58PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+fCAxMTk8c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj43NzxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gDQorPC9zcGFuPls8c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+MiA0NTYgXTxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPm1pbnVzY3VsbyB3PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoCA8L3NwYW4+fDwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPnwgMTIwPHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+Nzg8c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+WyAzDQorMTQgNiBdPHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPm1pbnVzY3VsbyB4PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKCgoKCgoKCgoKCgoKCgoKCgoKCgIDwvc3Bhbj48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKCgoKCgoKCgPC9zcGFuPnw8L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj58IDEyMTxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPjc5PHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPlsgMw0KKzE0NTYgXTxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj5taW51c2N1bG8geTxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgIDwvc3Bhbj48c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oDwvc3Bhbj48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgPC9zcGFuPnw8L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj58IDEyMjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPjdBPHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPlsgMw0KKzEgNTYgXTxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj5taW51c2N1bG8gejxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKAgPC9zcGFuPnw8L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj58IDEyMzxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPjdCPHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqANCis8L3NwYW4+WzxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj4yIDQgNiBdPHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+Y2hhdmUgZXNxdWVyZGE8c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgIDwvc3Bhbj58PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+fCAxMjQ8c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj48c3QxOm1ldHJpY2NvbnZlcnRlciBQcm9kdWN0SUQ9IjdDIiB3OnN0PSJvbiI+N0M8L3N0MTptZXRyaWNjb252ZXJ0ZXI+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+WzxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj4yMQ0KKzU2IF08c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+YmFycmEgdmVydGljYWw8c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgIDwvc3Bhbj58PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+fCAxMjU8c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj43RDxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gDQorPC9zcGFuPls8c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+MjE0NTYgXTxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPmNoYXZlIGRpcmVpdGE8c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoCA8L3NwYW4+fDwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPnwgMTI2PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+N0U8c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oA0KKzwvc3Bhbj5bPHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgoCA8L3NwYW4+NDU8c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj5dPHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqANCis8L3NwYW4+YWNlbnRvIHRpbDxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goCA8L3NwYW4+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgPC9zcGFuPnw8L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj58IDEyNzxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPjxzdDE6bWV0cmljY29udmVydGVyIFByb2R1Y3RJRD0iN0YiIHc6c3Q9Im9uIj43Rjwvc3QxOm1ldHJpY2NvbnZlcnRlcj48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj5bNzxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goA0KKzwvc3Bhbj40NTYgXTxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj5ERUwgKGRlbGV0ZSk8c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKAgPC9zcGFuPnw8L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj48c3BhbiBsYW5nPUVOLVVTDQorc3R5bGU9J21zby1hbnNpLWxhbmd1YWdlOkVOLVVTJz58IDEyODxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj44MDxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPls8c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKCgDQorPC9zcGFuPjQ8c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+OF08c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj4mbHQ7Y29udHJvbCZndDs8c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKAgPC9zcGFuPnw8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIGxhbmc9RU4tVVMgc3R5bGU9J21zby1hbnNpLWxhbmd1YWdlOkVOLVVTJz48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj58IDEyOTxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gDQorPC9zcGFuPjgxPHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPls8c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goCA8L3NwYW4+MTxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goA0KKzwvc3Bhbj44XTxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj4mbHQ7Y29udHJvbCZndDs8c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKAgPC9zcGFuPnw8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIGxhbmc9RU4tVVMgc3R5bGU9J21zby1hbnNpLWxhbmd1YWdlOkVOLVVTJz48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj58IDEzMDxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gDQorPC9zcGFuPjgyPHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPls8c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj4yMTxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goA0KKzwvc3Bhbj44XTxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj5CUEggKGJyZWFrIHBlcm1pdHRlZA0KK2hlcmUpPHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgoKCgoKCgoKCgoKCgoKAgPC9zcGFuPnw8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIGxhbmc9RU4tVVMgc3R5bGU9J21zby1hbnNpLWxhbmd1YWdlOkVOLVVTJz48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj58IDEzMTxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gDQorPC9zcGFuPjgzPHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPls8c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goCA8L3NwYW4+MTQ8c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oA0KKzwvc3Bhbj44XTxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj5OQkggKG5vIGJyZWFrIGhlcmUpPHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKCgoKCgoKCgoKAgPC9zcGFuPjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgoKCgoKCgoKCgoDwvc3Bhbj58PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBsYW5nPUVOLVVTIHN0eWxlPSdtc28tYW5zaS1sYW5ndWFnZTpFTi1VUyc+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+fCAxMzI8c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oA0KKzwvc3Bhbj44NDxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj5bPHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKAgPC9zcGFuPjE0NSA4XTxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gDQorPC9zcGFuPiZsdDtjb250cm9sJmd0OzxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoCA8L3NwYW4+fDxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPnwgMTMzPHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+ODU8c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oA0KKzwvc3Bhbj5bPHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgIDwvc3Bhbj4xIDUgOF08c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj5OTCAocHJveGltYSBsaW5oYSk8c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKCgoKCgoKCgoKCgoKCgoKCgoKCgoKAgPC9zcGFuPnw8L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj58IDEzNDxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPjg2PHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqANCis8L3NwYW4+WzxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj4yMTQ8c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj44XTxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj5TU0ENCisoY29tZedhIGEgc2VsZefjbyBkZSBhcmVhKTxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKCgoKCgoKCgoKAgPC9zcGFuPnw8L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj58IDEzNTxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPjg3PHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqANCis8L3NwYW4+WzxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj4yMTQ1IDhdPHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+RVNBIChmaW0gZGUgc2VsZefjbyBkZSBhcmVhKTxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgoKCgoKCgoKCgoKCgIDwvc3Bhbj58PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+fCAxMzY8c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj44ODxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gDQorPC9zcGFuPls8c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+MjEgNSA4XTxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPkNUUyAoc2V0YSB0YWJ1bGHn428gZGUgY2FyYWN0ZXIpPHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKCgoKCgoKCgoCA8L3NwYW4+fDwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPnwgMTM3PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+ODk8c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oA0KKzwvc3Bhbj5bPHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPjIgNDxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPjhdPHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPkNUSg0KKyhqdXN0aWZpY2EgdGFidWxh5+NvIGRlIGNhcmFjdGVyKTxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goCA8L3NwYW4+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKCgPC9zcGFuPnw8L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj58IDEzODxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPjhBPHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqANCis8L3NwYW4+WzxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj4yIDQ1IDhdPHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+TFRTIChzZXRhIGEgdGFidWxh5+NvIGRlIGxpbmhhKTxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgoKCgoKCgoKCgIDwvc3Bhbj58PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+fCAxMzkgPHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oDwvc3Bhbj44QjxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj5bIDMNCisxPHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgIDwvc3Bhbj44XTxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gDQorPC9zcGFuPlBMRCAobGluaGEgcGFyY2lhbCBwYXJhIGJhaXhvKTxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgoKCgoKCgoKCgoCA8L3NwYW4+fDwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPnwgMTQwPHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+PHN0MTptZXRyaWNjb252ZXJ0ZXIgUHJvZHVjdElEPSI4QyIgdzpzdD0ib24iPjhDPC9zdDE6bWV0cmljY29udmVydGVyPjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPlsgMzIxPHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgDQorPC9zcGFuPjhdPHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPlBMVSAobGluaGEgcGFyY2lhbCBwYXJhIGNpbWEpPHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKCgoKCgoKCgoKCgoCA8L3NwYW4+fDwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPjxzcGFuIGxhbmc9RU4tVVMNCitzdHlsZT0nbXNvLWFuc2ktbGFuZ3VhZ2U6RU4tVVMnPnwgMTQxPHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqANCis8L3NwYW4+OEQ8c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+WyAzIDE0PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+OF08c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+UkxGDQorKHJldmVyc2UgbGluZSBmZWVkKTxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKCgoKCgoKCgoKCgoKCgoKCgIDwvc3Bhbj58PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBsYW5nPUVOLVVTIHN0eWxlPSdtc28tYW5zaS1sYW5ndWFnZTpFTi1VUyc+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+fCAxNDI8c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oA0KKzwvc3Bhbj44RTxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj5bIDMgMTQ1IDhdPHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+U1MyIChzaW5nbGUgc2hpZnQgdHdvKTxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgoKCgoCA8L3NwYW4+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKCgoKCgoKCgoKCgoKA8L3NwYW4+fDxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gbGFuZz1FTi1VUyBzdHlsZT0nbXNvLWFuc2ktbGFuZ3VhZ2U6RU4tVVMnPjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPnwgMTQzPHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPjxzdDE6bWV0cmljY29udmVydGVyDQorUHJvZHVjdElEPSI4RiIgdzpzdD0ib24iPjhGPC9zdDE6bWV0cmljY29udmVydGVyPjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPlsgMyAxIDUgOF08c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oA0KKzwvc3Bhbj5TUzMgKHNpbmdsZSBzaGlmdCB0aHJlZSk8c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKCgoKCgoKCgoKCgoKCgoKAgPC9zcGFuPnw8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj58IDE0NDxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPjkwPHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPlsNCiszMjE0PHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPjhdPHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqANCis8L3NwYW4+RENTIChjb250cm9sZSBkZSBkaXNwb3NpdGl2byBkZSBzdHJpbmcpPHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKCgIDwvc3Bhbj58PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+fCAxNDU8c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj45MTxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj5bDQorMzIxNDUgOF08c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+UFUxICh1c28gcHJpdmFkbyB1bSk8c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj48c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oDwvc3Bhbj48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKCgoKCgoKCgoKCgoKCgoKCgoDwvc3Bhbj58PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+fCAxNDY8c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj45MjxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj5bDQorMzIxIDUgOF08c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+UFUyICh1c28gcHJpdmFkbyBkb2lzKTxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgoKCgoKCgoKCgoKCgoKCgoKCgIDwvc3Bhbj58PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+fCAxNDc8c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj45MzxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj5bDQorMzIgNDxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj44XTxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gDQorPC9zcGFuPlNUUyAoc2V0YSBlc3RhZG8gZGUgdHJhbnNtaXNz428pPHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKCgoKCgoKCgoCA8L3NwYW4+fDwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPjxzcGFuIGxhbmc9RU4tVVMNCitzdHlsZT0nbXNvLWFuc2ktbGFuZ3VhZ2U6RU4tVVMnPnwgMTQ4PHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqANCis8L3NwYW4+OTQ8c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+WyAzMiA0NSA4XTxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPkNDIChjYW5jZWxhIGNhcmFjdGVyKTxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgoKCgoKCgoKCgoKCgoKCgoKCgoCA8L3NwYW4+fDxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gbGFuZz1FTi1VUyBzdHlsZT0nbXNvLWFuc2ktbGFuZ3VhZ2U6RU4tVVMnPjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPnwgMTQ5PHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqANCis8L3NwYW4+OTU8c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+WyAzIDE8c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj42OF08c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+TVcNCisobWVzc2FnZSB3YWl0aW5nKTxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKCgoKCgoKCgoKCgoKCgoKCgoKCgIDwvc3Bhbj58PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+fCAxNTA8c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj45NjxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj5bDQorMzIxPHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPjY4XTxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gDQorPC9zcGFuPlNHQSAoaW5pY2lvIGRhIGFyZWEgcHJvdGVnaWRhKTxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgoKCgoKCgoKCgoCA8L3NwYW4+fDwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPnwgMTUxPHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+OTc8c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oA0KKzwvc3Bhbj5bPHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPjIgNDU2OF08c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj5FR0EgKGZpbSBkYSBhcmVhIHByb3RlZ2lkYSk8c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKCgoKCgoKCgoKCgoKAgPC9zcGFuPnw8L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj58IDE1MjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPjk4PHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPlsgMw0KKzE0IDY4XTxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj5TUyAoaW5pY2lvIGRhIHN0cmluZyk8c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKCgoKCgoKCgoKCgoKCgoKCgoKAgPC9zcGFuPnw8L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj58IDE1MzxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPjk5PHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPlsgMw0KKzE0NTY4XTxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj4mbHQ7Y29udHJvbGUmZ3Q7PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKCgoKCgoKCgoKCgoKCgoCA8L3NwYW4+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKCgoKCgoKCgoKCgoKCgoDwvc3Bhbj58PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+fCAxNTQ8c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj45QTxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj5bIDMNCisxIDU2OF08c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+U0NJIChpbnRyb2R15+NvIGRvIGNhcmFjdGVyIHVuaWNvKTxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgoKCgoKCgIDwvc3Bhbj58PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+fCAxNTU8c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj45QjxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gDQorPC9zcGFuPls8c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+MiA0IDY4XTxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPkNTSSAoaW50cm9kdefjbyBkZSBjb250cm9sZSBkZSBzZXF1ZW5jaWEpPHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+fDwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPnwgMTU2PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+PHN0MTptZXRyaWNjb252ZXJ0ZXIgUHJvZHVjdElEPSI5QyIgdzpzdD0ib24iPjlDPC9zdDE6bWV0cmljY29udmVydGVyPjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPls8c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+MjENCis1NjhdPHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPlNUICh0ZXJtaW5hZG9yIGRlIHN0cmluZyk8c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKCgoKCgoKCgoKCgoKCgoCA8L3NwYW4+fDwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPnwgMTU3PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+OUQ8c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oA0KKzwvc3Bhbj5bPHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPjIxNDU2OF08c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj5PU0MgKGNvbWFuZG8gZGUgb3BlcmHn428gZGUgc2lzdGVtYSk8c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKCgoKAgPC9zcGFuPnw8L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj58IDE1ODxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPjlFPHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqANCis8L3NwYW4+WzxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKAgPC9zcGFuPjQ1IDhdPHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+UE0gKG1lbnNhZ2VtIHByaXZhZGEpPHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKCgoKCgoKCgoKCgoKCgoKCgoKCgIDwvc3Bhbj58PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+fCAxNTk8c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj48c3QxOm1ldHJpY2NvbnZlcnRlciBQcm9kdWN0SUQ9IjlGIiB3OnN0PSJvbiI+OUY8L3N0MTptZXRyaWNjb252ZXJ0ZXI+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+WzxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKANCis8L3NwYW4+NDU2OF08c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+QVBDIChjb21hbmRvIGRlIHByb2dyYW1hIGRlDQorYXBsaWNh5+NvKTxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKCgIDwvc3Bhbj58PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+fCAxNjA8c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj5BMDxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gDQorPC9zcGFuPls3PHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgoKCgIDwvc3Bhbj44XTxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPnNlbSBxdWVicmEgZGUgZXNwYedvPHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKCgoKCgoKCgoKCgoKCgoKCgoKCgoCA8L3NwYW4+fDwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPnwgMTYxPHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+QTE8c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oA0KKzwvc3Bhbj5bNzMyIDQgNiBdPHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPnBvbnRvIGRlIGV4Y2xhbWHn428NCitpbnZlcnRpZG88c3BhbiBzdHlsZT0nbXNvLXRhYi1jb3VudDoyJz6goKCgoKCgoKCgIDwvc3Bhbj48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goCA8L3NwYW4+fDwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPnwgMTYyPHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+QTI8c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+WzcNCisyMTQgNiBdPHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPnNpbWJvbG8gZG8gY2VudGF2bzxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoCA8L3NwYW4+fDwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPnwgMTYzPHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+QTM8c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oA0KKzwvc3Bhbj5bNzM8c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+NDU2IF08c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj5zaW1ib2xvIGRhIGxpYnJhPHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKAgPC9zcGFuPnw8L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj58IDE2NDxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPkE0PHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqANCis8L3NwYW4+Wzc8c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+MTQgNiBdPHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+c+1tYm9sbyBkYSBtb2VkYTxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgoKCgoKCgoKCgoKCgoKCgIDwvc3Bhbj48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKCgoKCgoKA8L3NwYW4+fDwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPnwgMTY1PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+QTU8c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oA0KKzwvc3Bhbj5bNzMyMTQgNiBdPHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPnNpbWJvbG8gZG8geWVuPHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoCA8L3NwYW4+fDwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPjxzcGFuIGxhbmc9RU4tVVMNCitzdHlsZT0nbXNvLWFuc2ktbGFuZ3VhZ2U6RU4tVVMnPnwgMTY2PHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqANCis8L3NwYW4+QTY8c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+Wzc8c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj4xIDU2IF08c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oA0KKzwvc3Bhbj5icm9rZW4gYmFyPHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKAgPC9zcGFuPnw8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIGxhbmc9RU4tVVMgc3R5bGU9J21zby1hbnNpLWxhbmd1YWdlOkVOLVVTJz48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj58IDE2NzxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gDQorPC9zcGFuPkE3PHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPls3MzxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgIDwvc3Bhbj41PHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqANCis8L3NwYW4+XTxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj5zZWN0aW9uIHNpZ248c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKAgPC9zcGFuPnw8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj58IDE2ODxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPkE4PHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqANCis8L3NwYW4+Wzc8c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKCgIDwvc3Bhbj41PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+XTxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj50cmVtYTxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgoKAgPC9zcGFuPjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgoKCgoKCgoKCgoDwvc3Bhbj48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKCgPC9zcGFuPjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgoKCgoKCgoKCgoKCgoKCgPC9zcGFuPnw8L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj58IDE2OTxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPkE5PHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqANCis8L3NwYW4+WzczMjxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj41NiBdPHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+c2ltYm9sbyBkZSBjb3B5cmlnaHQgPHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oDwvc3Bhbj48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKCgoKCgoKCgoKCgoKCgoKCgoKA8L3NwYW4+fDwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPjxzcGFuIGxhbmc9RU4tVVMNCitzdHlsZT0nbXNvLWFuc2ktbGFuZ3VhZ2U6RU4tVVMnPnwgMTcwPHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqANCis8L3NwYW4+QUE8c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+WzxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgoKCgoCA8L3NwYW4+OF08c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oA0KKzwvc3Bhbj5mZW1pbmluZSBvcmRpbmFsIGluZGljYXRvcjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgoKCgoKCgoKCgoKCgoKAgPC9zcGFuPnw8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIGxhbmc9RU4tVVMgc3R5bGU9J21zby1hbnNpLWxhbmd1YWdlOkVOLVVTJz48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj58IDE3MTxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gDQorPC9zcGFuPkFCPHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPls3IDIxPHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+NiBdPHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqANCis8L3NwYW4+bGVmdC1wb2ludGluZyBkb3VibGUgYW5nbGUgcXVvdGF0aW9uIG1hcms8c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj58PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBsYW5nPUVOLVVTIHN0eWxlPSdtc28tYW5zaS1sYW5ndWFnZTpFTi1VUyc+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+fCAxNzI8c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oA0KKzwvc3Bhbj5BQzxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj5bNyAyPHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+NTYgXTxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gDQorPC9zcGFuPm5vdCBzaWduPHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoCA8L3NwYW4+fDxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gbGFuZz1FTi1VUyBzdHlsZT0nbXNvLWFuc2ktbGFuZ3VhZ2U6RU4tVVMnPjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPnwgMTczPHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqANCis8L3NwYW4+QUQ8c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+WzczPHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKCgIDwvc3Bhbj42IF08c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oA0KKzwvc3Bhbj5zb2Z0IGh5cGhlbjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKAgPC9zcGFuPnw8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIGxhbmc9RU4tVVMgc3R5bGU9J21zby1hbnNpLWxhbmd1YWdlOkVOLVVTJz48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj58IDE3NDxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gDQorPC9zcGFuPkFFPHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPls3MzI8c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goCA8L3NwYW4+NiBdPHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqANCis8L3NwYW4+cmVnaXN0ZXJlZCBzaWduPHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgIDwvc3Bhbj58PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBsYW5nPUVOLVVTIHN0eWxlPSdtc28tYW5zaS1sYW5ndWFnZTpFTi1VUyc+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+fCAxNzU8c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oA0KKzwvc3Bhbj5BRjxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj5bNyAyPHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKAgPC9zcGFuPjYgXTxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gDQorPC9zcGFuPm1hY3JvbjxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgIDwvc3Bhbj48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKCgoKCgoKCgoDwvc3Bhbj58PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBsYW5nPUVOLVVTIHN0eWxlPSdtc28tYW5zaS1sYW5ndWFnZTpFTi1VUyc+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+fCAxNzY8c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oA0KKzwvc3Bhbj5CMDxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj5bNzM8c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goCA8L3NwYW4+NTYgXTxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gDQorPC9zcGFuPmRlZ3JlZSBzaWduPHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoCA8L3NwYW4+fDxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gbGFuZz1FTi1VUyBzdHlsZT0nbXNvLWFuc2ktbGFuZ3VhZ2U6RU4tVVMnPjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPnwgMTc3PHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqANCis8L3NwYW4+QjE8c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+WzczPHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+NCA2IF08c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oA0KKzwvc3Bhbj5wbHVzLW1pbnVzIHNpZ248c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKAgPC9zcGFuPnw8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIGxhbmc9RU4tVVMgc3R5bGU9J21zby1hbnNpLWxhbmd1YWdlOkVOLVVTJz48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj58IDE3ODxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gDQorPC9zcGFuPkIyPHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPls3MzI8c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKCgIDwvc3Bhbj5dPHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqANCis8L3NwYW4+c3VwZXJzY3JpcHQgdHdvPHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgIDwvc3Bhbj58PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBsYW5nPUVOLVVTIHN0eWxlPSdtc28tYW5zaS1sYW5ndWFnZTpFTi1VUyc+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+fCAxNzk8c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oA0KKzwvc3Bhbj5CMzxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj5bNyAyPHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+NTxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gDQorPC9zcGFuPl08c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+c3VwZXJzY3JpcHQgdGhyZWU8c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgIDwvc3Bhbj58PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBsYW5nPUVOLVVTIHN0eWxlPSdtc28tYW5zaS1sYW5ndWFnZTpFTi1VUyc+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+fCAxODA8c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oA0KKzwvc3Bhbj5CNDxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj5bNzM8c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKCgoCA8L3NwYW4+XTxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gDQorPC9zcGFuPmFjdXRlIGFjY2VudDxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoCA8L3NwYW4+fDxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gbGFuZz1FTi1VUyBzdHlsZT0nbXNvLWFuc2ktbGFuZ3VhZ2U6RU4tVVMnPjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPnwgMTgxPHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqANCis8L3NwYW4+QjU8c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+Wzc8c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKAgPC9zcGFuPjU2IF08c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oA0KKzwvc3Bhbj5taWNybyBzaWduPHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKAgPC9zcGFuPnw8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIGxhbmc9RU4tVVMgc3R5bGU9J21zby1hbnNpLWxhbmd1YWdlOkVOLVVTJz48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj58IDE4MjxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gDQorPC9zcGFuPkI2PHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPls3MzI8c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj41PHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqANCis8L3NwYW4+XTxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj5waWxjcm93IHNpZ248c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKAgPC9zcGFuPnw8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIGxhbmc9RU4tVVMgc3R5bGU9J21zby1hbnNpLWxhbmd1YWdlOkVOLVVTJz48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj58IDE4MzxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj5CNzxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPls3PHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgIDwvc3Bhbj40DQorNiBdPHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPm1pZGRsZSBkb3Q8c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoCA8L3NwYW4+fDxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gbGFuZz1FTi1VUyBzdHlsZT0nbXNvLWFuc2ktbGFuZ3VhZ2U6RU4tVVMnPjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPnwgMTg0PHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqANCis8L3NwYW4+Qjg8c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+Wzc8c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKCgIDwvc3Bhbj42IF08c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oA0KKzwvc3Bhbj5jZWRpbGhhPHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKAgPC9zcGFuPnw8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIGxhbmc9RU4tVVMgc3R5bGU9J21zby1hbnNpLWxhbmd1YWdlOkVOLVVTJz48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj58IDE4NTxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gDQorPC9zcGFuPkI5PHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPls3IDI8c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKCgIDwvc3Bhbj5dPHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqANCis8L3NwYW4+c3VwZXJzY3JpcHQgb25lPHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgIDwvc3Bhbj58PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBsYW5nPUVOLVVTIHN0eWxlPSdtc28tYW5zaS1sYW5ndWFnZTpFTi1VUyc+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+fCAxODY8c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oA0KKzwvc3Bhbj5CQTxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj5bNzxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgoKCgoCA8L3NwYW4+XTxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gDQorPC9zcGFuPm1hc2N1bGluZSBvcmRpbmFsIGluZGljYXRvcjxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goCA8L3NwYW4+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKCgoKCgoKCgoKCgoDwvc3Bhbj58PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBsYW5nPUVOLVVTIHN0eWxlPSdtc28tYW5zaS1sYW5ndWFnZTpFTi1VUyc+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+fCAxODc8c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oA0KKzwvc3Bhbj5CQjxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj5bNzM8c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj40NTxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gDQorPC9zcGFuPl08c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+cmlnaHQtcG9pbnRpbmcgZG91YmxlIGFuZ2xlDQorcXVvdGF0aW9uIG1hcmsgfDxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gbGFuZz1FTi1VUyBzdHlsZT0nbXNvLWFuc2ktbGFuZ3VhZ2U6RU4tVVMnPjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPnwgMTg4PHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqANCis8L3NwYW4+QkM8c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+WzczMjEgNTYgXTxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPnZ1bGdhciBmcmFjdGlvbiBvbmUgcXVhcnRlcjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgoKCgoKCgoKCgoKCgoCA8L3NwYW4+fDxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gbGFuZz1FTi1VUyBzdHlsZT0nbXNvLWFuc2ktbGFuZ3VhZ2U6RU4tVVMnPjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPnwgMTg5PHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqANCis8L3NwYW4+QkQ8c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+WzczMjE0NTYgXTxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPnZ1bGdhciBmcmFjdGlvbiBvbmUgaGFsZjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgoKCgoKCgoKCgoKCgoKCgoCA8L3NwYW4+fDxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gbGFuZz1FTi1VUyBzdHlsZT0nbXNvLWFuc2ktbGFuZ3VhZ2U6RU4tVVMnPjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPnwgMTkwPHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqANCis8L3NwYW4+QkU8c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+WzczMiA0NTYgXTxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPnZ1bGdhciBmcmFjdGlvbiB0aHJlZSBxdWFydGVyczxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgoKCgoKCgoKCgoCA8L3NwYW4+fDxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gbGFuZz1FTi1VUyBzdHlsZT0nbXNvLWFuc2ktbGFuZ3VhZ2U6RU4tVVMnPjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPnwgMTkxPHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqANCis8L3NwYW4+QkY8c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+Wzc8c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj4xNDU2IF08c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oA0KKzwvc3Bhbj5pbnRlcnJvZ2Hn428gaW52ZXJ0aWRhPHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKCgoKCgoKCgoKCgoKCgoKCgoKAgPC9zcGFuPnw8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIGxhbmc9RU4tVVMgc3R5bGU9J21zby1hbnNpLWxhbmd1YWdlOkVOLVVTJz48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj58IDE5MjxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gDQorPC9zcGFuPkMwPHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPls3MzI8c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj41IDhdPHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqANCis8L3NwYW4+Y2FwaXRhbCBhIGdyYXZlPHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgIDwvc3Bhbj58PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBsYW5nPUVOLVVTIHN0eWxlPSdtc28tYW5zaS1sYW5ndWFnZTpFTi1VUyc+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+PC9zcGFuPnwgMTkzPHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqANCis8L3NwYW4+QzE8c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+Wzc8c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj4xPHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqANCis8L3NwYW4+NjhdPHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPmNhcGl0YWwgYSBhY3V0ZTxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoCA8L3NwYW4+fDwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPnwgMTk0PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+QzI8c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+WzcNCisyPHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgoCA8L3NwYW4+OF08c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oA0KKzwvc3Bhbj5jYXBpdGFsIGEgY2lyY3VtZmxleDxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgoKCgoKCgoKCgoKCgoKCgoKCgoKAgPC9zcGFuPnw8L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj58IDE5NTxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPkMzPHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqANCis8L3NwYW4+Wzc8c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKCgIDwvc3Bhbj41IDhdPHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+Y2FwaXRhbCBhIHRpbGRlPHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgIDwvc3Bhbj58PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+fCAxOTY8c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj5DNDxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gDQorPC9zcGFuPls3MzIxNCA2OF08c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+Y2FwaXRhbCBhDQorZGlhZXJlc2lzPHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgIDwvc3Bhbj58PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+PHNwYW4gbGFuZz1FTi1VUw0KK3N0eWxlPSdtc28tYW5zaS1sYW5ndWFnZTpFTi1VUyc+fCAxOTc8c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oA0KKzwvc3Bhbj5DNTxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj5bNzM8c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj40NSA4XTxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gDQorPC9zcGFuPmNhcGl0YWwgYSByaW5nIGFib3ZlPHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgoKCgoKAgPC9zcGFuPjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgoKCgoKCgoKCgoKCgoDwvc3Bhbj58PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBsYW5nPUVOLVVTIHN0eWxlPSdtc28tYW5zaS1sYW5ndWFnZTpFTi1VUyc+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+PC9zcGFuPnwgMTk4PHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqANCis8L3NwYW4+QzY8c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+WzczPHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKCgoCA8L3NwYW4+OF08c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oA0KKzwvc3Bhbj5jYXBpdGFsIGFlPHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKAgPC9zcGFuPnw8L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj58IDE5OTxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPkM3PHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqANCis8L3NwYW4+WzczPHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPjQgNjhdPHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+Y2FwaXRhbCBjIGNlZGlsbGE8c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgIDwvc3Bhbj58PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+fCAyMDA8c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj5DODxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gDQorPC9zcGFuPls3MzI8c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+NTY4XTxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPmNhcGl0YWwgZSBncmF2ZTxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoCA8L3NwYW4+fDwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPnwgMjAxPHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+Qzk8c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+WzcNCisyMTxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj42OF08c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oA0KKzwvc3Bhbj5jYXBpdGFsIGUgYWN1dGU8c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKAgPC9zcGFuPnw8L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj58IDIwMjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPkNBPHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqANCis8L3NwYW4+WzczMjxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKAgPC9zcGFuPjhdPHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+Y2FwaXRhbCBlIGNpcmN1bWZsZXg8c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKCgoKCgoKCgoKCgoKCgoKCgoKCgIDwvc3Bhbj58PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+fCAyMDM8c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj5DQjxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gDQorPC9zcGFuPls3MzIxNDU2OF08c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+Y2FwaXRhbCBlDQorZGlhZXJlc2lzPHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgIDwvc3Bhbj58PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+fCAyMDQ8c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj5DQzxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gDQorPC9zcGFuPls3MzI8c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKAgPC9zcGFuPjY4XTxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPmNhcGl0YWwgaSBncmF2ZTxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoCA8L3NwYW4+fDwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPnwgMjA1PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+Q0Q8c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oA0KKzwvc3Bhbj5bNzxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj4xNCA2OF08c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj5jYXBpdGFsIGkgYWN1dGU8c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKAgPC9zcGFuPnw8L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj58IDIwNjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPkNFPHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPls3DQorMjxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj41IDhdPHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqANCis8L3NwYW4+Y2FwaXRhbCBpIGNpcmN1bWZsZXg8c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKCgoKCgoKCgoKCgoKCgoKCgoKCgIDwvc3Bhbj58PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+fCAyMDc8c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj5DRjxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gDQorPC9zcGFuPls3MzIxIDU2OF08c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+Y2FwaXRhbCBpDQorZGlhZXJlc2lzPHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgIDwvc3Bhbj58PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+fCAyMDg8c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj5EMDxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gDQorPC9zcGFuPls3PHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgoKAgPC9zcGFuPjY4XTxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPmNhcGl0YWwgZXRoPHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKCgoKCgoKCgoKCgoKAgPC9zcGFuPjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgoKCgoKCgoKCgoKCgoKCgPC9zcGFuPnw8L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj58IDIwOTxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPkQxPHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqANCis8L3NwYW4+Wzc8c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKAgPC9zcGFuPjQgNjhdPHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+Y2FwaXRhbCBuIHRpbGRlPHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgIDwvc3Bhbj58PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+fCAyMTA8c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj5EMjxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gDQorPC9zcGFuPls3MzxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goCA8L3NwYW4+NSA4XTxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPmNhcGl0YWwgbyBncmF2ZTxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoCA8L3NwYW4+fDwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPnwgMjExPHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+RDM8c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oA0KKzwvc3Bhbj5bNzxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj4xNDU2OF08c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj5jYXBpdGFsIG8gYWN1dGU8c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKAgPC9zcGFuPnw8L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj58IDIxMjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPkQ0PHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPls3DQorMjxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj41NjhdPHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqANCis8L3NwYW4+Y2FwaXRhbCBvIGNpcmN1bWZsZXg8c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKCgoKCgoKCgoKCgoKCgoKCgoKCgIDwvc3Bhbj58PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+fCAyMTM8c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj5ENTxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gDQorPC9zcGFuPls3PHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgoCA8L3NwYW4+NTY4XTxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPmNhcGl0YWwgbyB0aWxkZTxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoCA8L3NwYW4+fDwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPnwgMjE0PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+RDY8c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oA0KKzwvc3Bhbj5bNzMyIDQgNjhdPHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPmNhcGl0YWwgbw0KK2RpYWVyZXNpczxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKCgoKCgoKCgoKCgoKCgoKCgoKCgoCA8L3NwYW4+fDwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPjxzcGFuIGxhbmc9RU4tVVMNCitzdHlsZT0nbXNvLWFuc2ktbGFuZ3VhZ2U6RU4tVVMnPnwgMjE1PHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqANCis8L3NwYW4+RDc8c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+Wzc8c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj4xPHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPjYNCitdPHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPnNpbWJvbG8gZGUgbXVsdGlwbGljYefjbzxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgoKCgoKCgoKCgoKCgoKCgoCA8L3NwYW4+fDxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gbGFuZz1FTi1VUyBzdHlsZT0nbXNvLWFuc2ktbGFuZ3VhZ2U6RU4tVVMnPjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPnwgMjE2PHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqANCis8L3NwYW4+RDg8c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+WzczPHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+NDxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gDQorPC9zcGFuPjhdPHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPmNhcGl0YWwgbyBzdHJva2U8c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoCA8L3NwYW4+fDxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gbGFuZz1FTi1VUyBzdHlsZT0nbXNvLWFuc2ktbGFuZ3VhZ2U6RU4tVVMnPjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPjwvc3Bhbj58IDIxNzxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gDQorPC9zcGFuPkQ5PHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPls3MzxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgIDwvc3Bhbj41NjhdPHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqANCis8L3NwYW4+Y2FwaXRhbCB1IGdyYXZlPHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgIDwvc3Bhbj58PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+fCAyMTg8c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj5EQTxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gDQorPC9zcGFuPls3PHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPjEgNTY4XTxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPmNhcGl0YWwgdSBhY3V0ZTxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoCA8L3NwYW4+fDwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPnwgMjE5PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+REI8c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+WzcNCisyPHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgIDwvc3Bhbj42OF08c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oA0KKzwvc3Bhbj5jYXBpdGFsIHUgY2lyY3VtZmxleDxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKAgPC9zcGFuPjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgoKCgoKCgoKCgoKCgoKCgoKA8L3NwYW4+fDwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPnwgMjIwPHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+REM8c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oA0KKzwvc3Bhbj5bNzMyIDQ1NjhdPHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPmNhcGl0YWwgdQ0KK2RpYWVyZXNpczxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKCgoKCgoKCgoKCgoKCgoKCgoKCgoCA8L3NwYW4+fDwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPjxzcGFuIGxhbmc9RU4tVVMNCitzdHlsZT0nbXNvLWFuc2ktbGFuZ3VhZ2U6RU4tVVMnPnwgMjIxPHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqANCis8L3NwYW4+REQ8c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+WzcgMjE0IDY4XTxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPmNhcGl0YWwgeSBhY3V0ZTxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoCA8L3NwYW4+fDxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gbGFuZz1FTi1VUyBzdHlsZT0nbXNvLWFuc2ktbGFuZ3VhZ2U6RU4tVVMnPjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPnwgMjIyPHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqANCis8L3NwYW4+REU8c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+WzczPHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKCgIDwvc3Bhbj42OF08c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oA0KKzwvc3Bhbj5jYXBpdGFsIHRob3JuPHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKAgPC9zcGFuPnw8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIGxhbmc9RU4tVVMgc3R5bGU9J21zby1hbnNpLWxhbmd1YWdlOkVOLVVTJz48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj58IDIyMzxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gDQorPC9zcGFuPkRGPHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPls3MzxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPjQ1NjhdPHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPnNtYWxsDQorc2hhcnAgczxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoCA8L3NwYW4+fDxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gbGFuZz1FTi1VUyBzdHlsZT0nbXNvLWFuc2ktbGFuZ3VhZ2U6RU4tVVMnPjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPnwgMjI0PHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqANCis8L3NwYW4+RTA8c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+WyAzMjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPjUgOF08c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oA0KKzwvc3Bhbj5zbWFsbCBhIGdyYXZlPHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKAgPC9zcGFuPnw8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIGxhbmc9RU4tVVMgc3R5bGU9J21zby1hbnNpLWxhbmd1YWdlOkVOLVVTJz48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj58IDIyNTxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gDQorPC9zcGFuPkUxPHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPls8c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goCA8L3NwYW4+MTxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gDQorPC9zcGFuPjY4XTxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj5zbWFsbCBhIGFjdXRlPHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKAgPC9zcGFuPnw8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIGxhbmc9RU4tVVMgc3R5bGU9J21zby1hbnNpLWxhbmd1YWdlOkVOLVVTJz48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj58IDIyNjxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gDQorPC9zcGFuPkUyPHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPls8c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj4yPHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgoA0KKzwvc3Bhbj44XTxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj5zbWFsbCBhIGNpcmN1bWZsZXg8c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKCgoKCgoKCgoKCgoKCgoKCgoKCgoKAgPC9zcGFuPnw8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIGxhbmc9RU4tVVMgc3R5bGU9J21zby1hbnNpLWxhbmd1YWdlOkVOLVVTJz48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gPC9zcGFuPjxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gPC9zcGFuPnwNCisyMjc8c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+RTM8c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oA0KKzwvc3Bhbj5bPHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgoKAgPC9zcGFuPjUgOF08c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj5zbWFsbCBhIHRpbGRlPHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKAgPC9zcGFuPnw8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIGxhbmc9RU4tVVMgc3R5bGU9J21zby1hbnNpLWxhbmd1YWdlOkVOLVVTJz48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj58IDIyODxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gDQorPC9zcGFuPkU0PHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPlsgMzIxNCA2OF08c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj5zbWFsbCBhIGRpYWVyZXNpczxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKAgPC9zcGFuPnw8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIGxhbmc9RU4tVVMgc3R5bGU9J21zby1hbnNpLWxhbmd1YWdlOkVOLVVTJz48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj58IDIyOTxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gDQorPC9zcGFuPkU1PHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPlsgMzxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPjQ1IDhdPHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqANCis8L3NwYW4+c21hbGwgYSByaW5nIGFib3ZlPHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgIDwvc3Bhbj58PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBsYW5nPUVOLVVTIHN0eWxlPSdtc28tYW5zaS1sYW5ndWFnZTpFTi1VUyc+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+PC9zcGFuPnwgMjMwPHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqANCis8L3NwYW4+RTY8c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+WyAzPHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKCgoCA8L3NwYW4+OF08c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oA0KKzwvc3Bhbj5zbWFsbCBhZTxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKCgoKCgoKCgoKCgIDwvc3Bhbj48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKCgoKCgoKCgoKCgoKCgoKCgoKA8L3NwYW4+fDwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPnwgMjMxPHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+RTc8c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+Ww0KKzM8c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+NCA2OF08c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oA0KKzwvc3Bhbj5zbWFsbCBjIGNlZGlsbGE8c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKAgPC9zcGFuPnw8L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj58IDIzMjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPkU4PHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPlsNCiszMjxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj41NjhdPHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqANCis8L3NwYW4+c21hbGwgZSBncmF2ZTxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgIDwvc3Bhbj58PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+fCAyMzM8c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj5FOTxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gDQorPC9zcGFuPls8c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+MjE8c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj42OF08c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+c21hbGwNCitlIGFjdXRlPHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgIDwvc3Bhbj58PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+fCAyMzQ8c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj5FQTxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj5bDQorMzI8c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKCgIDwvc3Bhbj44XTxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gDQorPC9zcGFuPnNtYWxsIGUgY2lyY3VtZmxleDxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoCA8L3NwYW4+fDwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPnwgMjM1PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+RUI8c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+Ww0KKzMyMTQ1NjhdPHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPnNtYWxsIGUgZGlhZXJlc2lzPHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoCA8L3NwYW4+fDwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPnwgMjM2PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+RUM8c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+Ww0KKzMyPHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgIDwvc3Bhbj42OF08c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oA0KKzwvc3Bhbj5zbWFsbCBpIGdyYXZlPHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKAgPC9zcGFuPnw8L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj48c3BhbiBsYW5nPUVOLVVTDQorc3R5bGU9J21zby1hbnNpLWxhbmd1YWdlOkVOLVVTJz58IDIzNzxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gDQorPC9zcGFuPkVEPHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPls8c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goCA8L3NwYW4+MTQgNjhdPHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqANCis8L3NwYW4+c21hbGwgaSBhY3V0ZTxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgIDwvc3Bhbj58PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBsYW5nPUVOLVVTIHN0eWxlPSdtc28tYW5zaS1sYW5ndWFnZTpFTi1VUyc+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+fCAyMzg8c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oA0KKzwvc3Bhbj5FRTxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj5bPHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+MjxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj41DQorOF08c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+c21hbGwgaSBjaXJjdW1mbGV4PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgIDwvc3Bhbj58PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBsYW5nPUVOLVVTIHN0eWxlPSdtc28tYW5zaS1sYW5ndWFnZTpFTi1VUyc+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+fCAyMzk8c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oA0KKzwvc3Bhbj5FRjxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj5bIDMyMSA1NjhdPHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+c21hbGwgaSBkaWFlcmVzaXM8c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgIDwvc3Bhbj58PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBsYW5nPUVOLVVTIHN0eWxlPSdtc28tYW5zaS1sYW5ndWFnZTpFTi1VUyc+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+fCAyNDA8c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oA0KKzwvc3Bhbj5GMDxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj5bPHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKCgoKAgPC9zcGFuPjY4XTxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gDQorPC9zcGFuPnNtYWxsIGV0aDxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoCA8L3NwYW4+fDxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gbGFuZz1FTi1VUyBzdHlsZT0nbXNvLWFuc2ktbGFuZ3VhZ2U6RU4tVVMnPjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPnwgMjQxPHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqANCis8L3NwYW4+RjE8c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+WzxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgoCA8L3NwYW4+NCA2OF08c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oA0KKzwvc3Bhbj5zbWFsbCBuIHRpbGRlPHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgoKCgoCA8L3NwYW4+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKCgoKCgoKCgoKCgoKCgoKCgoKCgoKA8L3NwYW4+fDxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gbGFuZz1FTi1VUyBzdHlsZT0nbXNvLWFuc2ktbGFuZ3VhZ2U6RU4tVVMnPjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPnwgMjQyPHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqANCis8L3NwYW4+RjI8c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+WyAzPHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKAgPC9zcGFuPjUgOF08c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oA0KKzwvc3Bhbj5zbWFsbCBvIGdyYXZlPHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKAgPC9zcGFuPnw8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIGxhbmc9RU4tVVMgc3R5bGU9J21zby1hbnNpLWxhbmd1YWdlOkVOLVVTJz48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj58IDI0MzxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gDQorPC9zcGFuPkYzPHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPls8c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goCA8L3NwYW4+MTQ1NjhdPHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqANCis8L3NwYW4+c21hbGwgbyBhY3V0ZTxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgIDwvc3Bhbj58PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBsYW5nPUVOLVVTIHN0eWxlPSdtc28tYW5zaS1sYW5ndWFnZTpFTi1VUyc+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+PC9zcGFuPnwgMjQ0PHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqANCis8L3NwYW4+RjQ8c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+WzxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPjI8c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oA0KKzwvc3Bhbj41NjhdPHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPnNtYWxsIG8gY2lyY3VtZmxleDxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoCA8L3NwYW4+fDwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPnwgMjQ1PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+RjU8c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oA0KKzwvc3Bhbj5bPHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgoKAgPC9zcGFuPjU2OF08c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj5zbWFsbCBvIHRpbGRlPHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKAgPC9zcGFuPnw8L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj58IDI0NjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPkY2PHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPlsNCiszMiA0IDY4XTxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj5zbWFsbCBvIGRpYWVyZXNpczxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKAgPC9zcGFuPnw8L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj48c3BhbiBsYW5nPUVOLVVTDQorc3R5bGU9J21zby1hbnNpLWxhbmd1YWdlOkVOLVVTJz58IDI0NzxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gDQorPC9zcGFuPkY3PHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPls3MzxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPjQ8c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKANCis8L3NwYW4+XTxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj5zaW1ib2xvIGRlIGRpdmlz4288c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKCgoKCgoKCgoKCgoKCgoKCgoKCgoKAgPC9zcGFuPnw8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIGxhbmc9RU4tVVMgc3R5bGU9J21zby1hbnNpLWxhbmd1YWdlOkVOLVVTJz48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj58IDI0ODxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gDQorPC9zcGFuPkY4PHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPlsgMzxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPjQ8c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oA0KKzwvc3Bhbj44XTxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj5zbWFsbCBvIHN0cm9rZTxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoCA8L3NwYW4+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oDwvc3Bhbj58PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBsYW5nPUVOLVVTIHN0eWxlPSdtc28tYW5zaS1sYW5ndWFnZTpFTi1VUyc+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+fCAyNDk8c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oA0KKzwvc3Bhbj5GOTxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj5bIDM8c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goCA8L3NwYW4+NTY4XTxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gDQorPC9zcGFuPnNtYWxsIHUgZ3JhdmU8c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoCA8L3NwYW4+fDxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gbGFuZz1FTi1VUyBzdHlsZT0nbXNvLWFuc2ktbGFuZ3VhZ2U6RU4tVVMnPjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPnwgMjUwPHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqANCis8L3NwYW4+RkE8c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+WzxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgIDwvc3Bhbj4xIDU2OF08c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oA0KKzwvc3Bhbj5zbWFsbCB1IGFjdXRlPHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKAgPC9zcGFuPnw8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIGxhbmc9RU4tVVMgc3R5bGU9J21zby1hbnNpLWxhbmd1YWdlOkVOLVVTJz48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj58IDI1MTxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gDQorPC9zcGFuPkZCPHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPls8c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj4yPHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgDQorPC9zcGFuPjY4XTxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj5zbWFsbCB1IGNpcmN1bWZsZXg8c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKCgoKCgoKCgoKCgoKCgoKCgoKCgoKAgPC9zcGFuPnw8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIGxhbmc9RU4tVVMgc3R5bGU9J21zby1hbnNpLWxhbmd1YWdlOkVOLVVTJz48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj58IDI1MjxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gDQorPC9zcGFuPkZDPHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPlsgMzIgNDU2OF08c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj5zbWFsbCB1IGRpYWVyZXNpcyA8c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgPC9zcGFuPnw8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIGxhbmc9RU4tVVMgc3R5bGU9J21zby1hbnNpLWxhbmd1YWdlOkVOLVVTJz48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj58IDI1MzxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gDQorPC9zcGFuPkZEPHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPls8c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj4yMTQgNjhdPHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqANCis8L3NwYW4+c21hbGwgeSBhY3V0ZTxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgIDwvc3Bhbj58PG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBsYW5nPUVOLVVTIHN0eWxlPSdtc28tYW5zaS1sYW5ndWFnZTpFTi1VUyc+PHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+fCAyNTQ8c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oA0KKzwvc3Bhbj5GRTxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj5bIDM8c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6goKAgPC9zcGFuPjY4XTxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gDQorPC9zcGFuPnNtYWxsIHRob3JuPHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoCA8L3NwYW4+fDxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gbGFuZz1FTi1VUyBzdHlsZT0nbXNvLWFuc2ktbGFuZ3VhZ2U6RU4tVVMnPjxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqAgPC9zcGFuPnwgMjU1PHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqANCis8L3NwYW4+RkY8c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+WyAzPHNwYW4NCitzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oCA8L3NwYW4+NDU2OF08c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+oA0KKzwvc3Bhbj5zbWFsbCB5IGRpYWVyZXNpczxzcGFuDQorc3R5bGU9J21zby1zcGFjZXJ1bjp5ZXMnPqCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKAgPC9zcGFuPnw8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIGxhbmc9RU4tVVMgc3R5bGU9J21zby1hbnNpLWxhbmd1YWdlOkVOLVVTJz48c3Bhbg0KK3N0eWxlPSdtc28tc3BhY2VydW46eWVzJz6gIDwvc3Bhbj4rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rPG86cD48L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBsYW5nPUVOLVVTIHN0eWxlPSdtc28tYW5zaS1sYW5ndWFnZTpFTi1VUyc+PG86cD4mbmJzcDs8L286cD48L3NwYW4+PC9wPg0KKw0KKzxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBsYW5nPUVOLVVTIHN0eWxlPSdtc28tYW5zaS1sYW5ndWFnZTpFTi1VUyc+SC4NCitUYWJlbGEgZGUgSW5zdHJ1bWVudG8gTUlESTxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gbGFuZz1FTi1VUyBzdHlsZT0nbXNvLWFuc2ktbGFuZ3VhZ2U6RU4tVVMnPjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisNCis8ZGl2IGFsaWduPWNlbnRlcj4NCisNCis8dGFibGUgY2xhc3M9TXNvTm9ybWFsVGFibGUgYm9yZGVyPTEgY2VsbHBhZGRpbmc9MCBzdHlsZT0nbXNvLWNlbGxzcGFjaW5nOjEuNXB0Ow0KKyBib3JkZXI6c29saWQgd2luZG93dGV4dCAxLjBwdCc+DQorIDx0ciBzdHlsZT0nbXNvLXlmdGktaXJvdzowO21zby15ZnRpLWZpcnN0cm93Onllcyc+DQorICA8dGQgc3R5bGU9J2JvcmRlcjpub25lO3BhZGRpbmc6Ljc1cHQgLjc1cHQgLjc1cHQgLjc1cHQnPg0KKyAgPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIGNsYXNzPXNob3J0dGV4dD5QaWFubzxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisgIDwvdGQ+DQorICA8dGQgc3R5bGU9J2JvcmRlcjpub25lO3BhZGRpbmc6Ljc1cHQgLjc1cHQgLjc1cHQgLjc1cHQnPg0KKyAgPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIGNsYXNzPXNob3J0dGV4dD4wPG86cD48L286cD48L3NwYW4+PC9wPg0KKyAgPC90ZD4NCisgIDx0ZCBzdHlsZT0nYm9yZGVyOm5vbmU7cGFkZGluZzouNzVwdCAuNzVwdCAuNzVwdCAuNzVwdCc+DQorICA8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gY2xhc3M9c2hvcnR0ZXh0PkFjb3VzdGljIEdyYW5kIFBpYW5vPG86cD48L286cD48L3NwYW4+PC9wPg0KKyAgPC90ZD4NCisgPC90cj4NCisgPHRyIHN0eWxlPSdtc28teWZ0aS1pcm93OjEnPg0KKyAgPHRkIHN0eWxlPSdib3JkZXI6bm9uZTtwYWRkaW5nOi43NXB0IC43NXB0IC43NXB0IC43NXB0Jz4NCisgIDxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBjbGFzcz1zaG9ydHRleHQ+PG86cD4mbmJzcDs8L286cD48L3NwYW4+PC9wPg0KKyAgPC90ZD4NCisgIDx0ZCBzdHlsZT0nYm9yZGVyOm5vbmU7cGFkZGluZzouNzVwdCAuNzVwdCAuNzVwdCAuNzVwdCc+DQorICA8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gY2xhc3M9c2hvcnR0ZXh0PjE8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorICA8L3RkPg0KKyAgPHRkIHN0eWxlPSdib3JkZXI6bm9uZTtwYWRkaW5nOi43NXB0IC43NXB0IC43NXB0IC43NXB0Jz4NCisgIDxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBjbGFzcz1zaG9ydHRleHQ+QnJpZ2h0IEFjb3VzdGljIFBpYW5vPG86cD48L286cD48L3NwYW4+PC9wPg0KKyAgPC90ZD4NCisgPC90cj4NCisgPHRyIHN0eWxlPSdtc28teWZ0aS1pcm93OjInPg0KKyAgPHRkIHN0eWxlPSdib3JkZXI6bm9uZTtwYWRkaW5nOi43NXB0IC43NXB0IC43NXB0IC43NXB0Jz4NCisgIDxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBjbGFzcz1zaG9ydHRleHQ+PG86cD4mbmJzcDs8L286cD48L3NwYW4+PC9wPg0KKyAgPC90ZD4NCisgIDx0ZCBzdHlsZT0nYm9yZGVyOm5vbmU7cGFkZGluZzouNzVwdCAuNzVwdCAuNzVwdCAuNzVwdCc+DQorICA8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gY2xhc3M9c2hvcnR0ZXh0PjI8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorICA8L3RkPg0KKyAgPHRkIHN0eWxlPSdib3JkZXI6bm9uZTtwYWRkaW5nOi43NXB0IC43NXB0IC43NXB0IC43NXB0Jz4NCisgIDxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBjbGFzcz1zaG9ydHRleHQ+RWxlY3RyaWMgR3JhbmQgUGlhbm88bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorICA8L3RkPg0KKyA8L3RyPg0KKyA8dHIgc3R5bGU9J21zby15ZnRpLWlyb3c6Myc+DQorICA8dGQgc3R5bGU9J2JvcmRlcjpub25lO3BhZGRpbmc6Ljc1cHQgLjc1cHQgLjc1cHQgLjc1cHQnPg0KKyAgPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIGNsYXNzPXNob3J0dGV4dD48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+DQorICA8L3RkPg0KKyAgPHRkIHN0eWxlPSdib3JkZXI6bm9uZTtwYWRkaW5nOi43NXB0IC43NXB0IC43NXB0IC43NXB0Jz4NCisgIDxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBjbGFzcz1zaG9ydHRleHQ+MzxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisgIDwvdGQ+DQorICA8dGQgc3R5bGU9J2JvcmRlcjpub25lO3BhZGRpbmc6Ljc1cHQgLjc1cHQgLjc1cHQgLjc1cHQnPg0KKyAgPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIGNsYXNzPXNob3J0dGV4dD5Ib25reXRvbmsgUGlhbm88bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorICA8L3RkPg0KKyA8L3RyPg0KKyA8dHIgc3R5bGU9J21zby15ZnRpLWlyb3c6NCc+DQorICA8dGQgc3R5bGU9J2JvcmRlcjpub25lO3BhZGRpbmc6Ljc1cHQgLjc1cHQgLjc1cHQgLjc1cHQnPg0KKyAgPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIGNsYXNzPXNob3J0dGV4dD48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+DQorICA8L3RkPg0KKyAgPHRkIHN0eWxlPSdib3JkZXI6bm9uZTtwYWRkaW5nOi43NXB0IC43NXB0IC43NXB0IC43NXB0Jz4NCisgIDxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBjbGFzcz1zaG9ydHRleHQ+NDxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisgIDwvdGQ+DQorICA8dGQgc3R5bGU9J2JvcmRlcjpub25lO3BhZGRpbmc6Ljc1cHQgLjc1cHQgLjc1cHQgLjc1cHQnPg0KKyAgPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIGNsYXNzPXNob3J0dGV4dD5FbGVjdHJpYyBQaWFubyAxPG86cD48L286cD48L3NwYW4+PC9wPg0KKyAgPC90ZD4NCisgPC90cj4NCisgPHRyIHN0eWxlPSdtc28teWZ0aS1pcm93OjUnPg0KKyAgPHRkIHN0eWxlPSdib3JkZXI6bm9uZTtwYWRkaW5nOi43NXB0IC43NXB0IC43NXB0IC43NXB0Jz4NCisgIDxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBjbGFzcz1zaG9ydHRleHQ+PG86cD4mbmJzcDs8L286cD48L3NwYW4+PC9wPg0KKyAgPC90ZD4NCisgIDx0ZCBzdHlsZT0nYm9yZGVyOm5vbmU7cGFkZGluZzouNzVwdCAuNzVwdCAuNzVwdCAuNzVwdCc+DQorICA8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gY2xhc3M9c2hvcnR0ZXh0PjU8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorICA8L3RkPg0KKyAgPHRkIHN0eWxlPSdib3JkZXI6bm9uZTtwYWRkaW5nOi43NXB0IC43NXB0IC43NXB0IC43NXB0Jz4NCisgIDxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBjbGFzcz1zaG9ydHRleHQ+RWxlY3RyaWMgUGlhbm8gMjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisgIDwvdGQ+DQorIDwvdHI+DQorIDx0ciBzdHlsZT0nbXNvLXlmdGktaXJvdzo2Jz4NCisgIDx0ZCBzdHlsZT0nYm9yZGVyOm5vbmU7cGFkZGluZzouNzVwdCAuNzVwdCAuNzVwdCAuNzVwdCc+DQorICA8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gY2xhc3M9c2hvcnR0ZXh0PjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisgIDwvdGQ+DQorICA8dGQgc3R5bGU9J2JvcmRlcjpub25lO3BhZGRpbmc6Ljc1cHQgLjc1cHQgLjc1cHQgLjc1cHQnPg0KKyAgPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIGNsYXNzPXNob3J0dGV4dD42PG86cD48L286cD48L3NwYW4+PC9wPg0KKyAgPC90ZD4NCisgIDx0ZCBzdHlsZT0nYm9yZGVyOm5vbmU7cGFkZGluZzouNzVwdCAuNzVwdCAuNzVwdCAuNzVwdCc+DQorICA8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gY2xhc3M9c2hvcnR0ZXh0PkhhcnBzaWNob3JkPG86cD48L286cD48L3NwYW4+PC9wPg0KKyAgPC90ZD4NCisgPC90cj4NCisgPHRyIHN0eWxlPSdtc28teWZ0aS1pcm93OjcnPg0KKyAgPHRkIHN0eWxlPSdib3JkZXI6bm9uZTtwYWRkaW5nOi43NXB0IC43NXB0IC43NXB0IC43NXB0Jz4NCisgIDxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBjbGFzcz1zaG9ydHRleHQ+PG86cD4mbmJzcDs8L286cD48L3NwYW4+PC9wPg0KKyAgPC90ZD4NCisgIDx0ZCBzdHlsZT0nYm9yZGVyOm5vbmU7cGFkZGluZzouNzVwdCAuNzVwdCAuNzVwdCAuNzVwdCc+DQorICA8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gY2xhc3M9c2hvcnR0ZXh0Pjc8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorICA8L3RkPg0KKyAgPHRkIHN0eWxlPSdib3JkZXI6bm9uZTtwYWRkaW5nOi43NXB0IC43NXB0IC43NXB0IC43NXB0Jz4NCisgIDxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBjbGFzcz1zaG9ydHRleHQ+Q2xhdmk8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorICA8L3RkPg0KKyA8L3RyPg0KKyA8dHIgc3R5bGU9J21zby15ZnRpLWlyb3c6OCc+DQorICA8dGQgc3R5bGU9J2JvcmRlcjpub25lO3BhZGRpbmc6Ljc1cHQgLjc1cHQgLjc1cHQgLjc1cHQnPg0KKyAgPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIGNsYXNzPXNob3J0dGV4dD5DaHJvbWF0aWMgUGVyY3Vzc2lvbjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisgIDwvdGQ+DQorICA8dGQgc3R5bGU9J2JvcmRlcjpub25lO3BhZGRpbmc6Ljc1cHQgLjc1cHQgLjc1cHQgLjc1cHQnPg0KKyAgPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIGNsYXNzPXNob3J0dGV4dD44PG86cD48L286cD48L3NwYW4+PC9wPg0KKyAgPC90ZD4NCisgIDx0ZCBzdHlsZT0nYm9yZGVyOm5vbmU7cGFkZGluZzouNzVwdCAuNzVwdCAuNzVwdCAuNzVwdCc+DQorICA8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gY2xhc3M9c2hvcnR0ZXh0PkNlbGVzdGE8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorICA8L3RkPg0KKyA8L3RyPg0KKyA8dHIgc3R5bGU9J21zby15ZnRpLWlyb3c6OSc+DQorICA8dGQgc3R5bGU9J2JvcmRlcjpub25lO3BhZGRpbmc6Ljc1cHQgLjc1cHQgLjc1cHQgLjc1cHQnPg0KKyAgPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIGNsYXNzPXNob3J0dGV4dD48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+DQorICA8L3RkPg0KKyAgPHRkIHN0eWxlPSdib3JkZXI6bm9uZTtwYWRkaW5nOi43NXB0IC43NXB0IC43NXB0IC43NXB0Jz4NCisgIDxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBjbGFzcz1zaG9ydHRleHQ+OTxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisgIDwvdGQ+DQorICA8dGQgc3R5bGU9J2JvcmRlcjpub25lO3BhZGRpbmc6Ljc1cHQgLjc1cHQgLjc1cHQgLjc1cHQnPg0KKyAgPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIGNsYXNzPXNob3J0dGV4dD5HbG9ja2Vuc3BpZWw8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorICA8L3RkPg0KKyA8L3RyPg0KKyA8dHIgc3R5bGU9J21zby15ZnRpLWlyb3c6MTAnPg0KKyAgPHRkIHN0eWxlPSdib3JkZXI6bm9uZTtwYWRkaW5nOi43NXB0IC43NXB0IC43NXB0IC43NXB0Jz4NCisgIDxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBjbGFzcz1zaG9ydHRleHQ+PG86cD4mbmJzcDs8L286cD48L3NwYW4+PC9wPg0KKyAgPC90ZD4NCisgIDx0ZCBzdHlsZT0nYm9yZGVyOm5vbmU7cGFkZGluZzouNzVwdCAuNzVwdCAuNzVwdCAuNzVwdCc+DQorICA8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gY2xhc3M9c2hvcnR0ZXh0PjEwPG86cD48L286cD48L3NwYW4+PC9wPg0KKyAgPC90ZD4NCisgIDx0ZCBzdHlsZT0nYm9yZGVyOm5vbmU7cGFkZGluZzouNzVwdCAuNzVwdCAuNzVwdCAuNzVwdCc+DQorICA8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gY2xhc3M9c2hvcnR0ZXh0Pk11c2ljIEJveDxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisgIDwvdGQ+DQorIDwvdHI+DQorIDx0ciBzdHlsZT0nbXNvLXlmdGktaXJvdzoxMSc+DQorICA8dGQgc3R5bGU9J2JvcmRlcjpub25lO3BhZGRpbmc6Ljc1cHQgLjc1cHQgLjc1cHQgLjc1cHQnPg0KKyAgPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIGNsYXNzPXNob3J0dGV4dD48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+DQorICA8L3RkPg0KKyAgPHRkIHN0eWxlPSdib3JkZXI6bm9uZTtwYWRkaW5nOi43NXB0IC43NXB0IC43NXB0IC43NXB0Jz4NCisgIDxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBjbGFzcz1zaG9ydHRleHQ+MTE8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorICA8L3RkPg0KKyAgPHRkIHN0eWxlPSdib3JkZXI6bm9uZTtwYWRkaW5nOi43NXB0IC43NXB0IC43NXB0IC43NXB0Jz4NCisgIDxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBjbGFzcz1zaG9ydHRleHQ+VmlicmFwaG9uZTxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisgIDwvdGQ+DQorIDwvdHI+DQorIDx0ciBzdHlsZT0nbXNvLXlmdGktaXJvdzoxMic+DQorICA8dGQgc3R5bGU9J2JvcmRlcjpub25lO3BhZGRpbmc6Ljc1cHQgLjc1cHQgLjc1cHQgLjc1cHQnPg0KKyAgPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIGNsYXNzPXNob3J0dGV4dD48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+DQorICA8L3RkPg0KKyAgPHRkIHN0eWxlPSdib3JkZXI6bm9uZTtwYWRkaW5nOi43NXB0IC43NXB0IC43NXB0IC43NXB0Jz4NCisgIDxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBjbGFzcz1zaG9ydHRleHQ+MTI8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorICA8L3RkPg0KKyAgPHRkIHN0eWxlPSdib3JkZXI6bm9uZTtwYWRkaW5nOi43NXB0IC43NXB0IC43NXB0IC43NXB0Jz4NCisgIDxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBjbGFzcz1zaG9ydHRleHQ+TWFyaW1iYTxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisgIDwvdGQ+DQorIDwvdHI+DQorIDx0ciBzdHlsZT0nbXNvLXlmdGktaXJvdzoxMyc+DQorICA8dGQgc3R5bGU9J2JvcmRlcjpub25lO3BhZGRpbmc6Ljc1cHQgLjc1cHQgLjc1cHQgLjc1cHQnPg0KKyAgPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIGNsYXNzPXNob3J0dGV4dD48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+DQorICA8L3RkPg0KKyAgPHRkIHN0eWxlPSdib3JkZXI6bm9uZTtwYWRkaW5nOi43NXB0IC43NXB0IC43NXB0IC43NXB0Jz4NCisgIDxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBjbGFzcz1zaG9ydHRleHQ+MTM8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorICA8L3RkPg0KKyAgPHRkIHN0eWxlPSdib3JkZXI6bm9uZTtwYWRkaW5nOi43NXB0IC43NXB0IC43NXB0IC43NXB0Jz4NCisgIDxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBjbGFzcz1zaG9ydHRleHQ+WHlsb3Bob25lPG86cD48L286cD48L3NwYW4+PC9wPg0KKyAgPC90ZD4NCisgPC90cj4NCisgPHRyIHN0eWxlPSdtc28teWZ0aS1pcm93OjE0Jz4NCisgIDx0ZCBzdHlsZT0nYm9yZGVyOm5vbmU7cGFkZGluZzouNzVwdCAuNzVwdCAuNzVwdCAuNzVwdCc+DQorICA8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gY2xhc3M9c2hvcnR0ZXh0PjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisgIDwvdGQ+DQorICA8dGQgc3R5bGU9J2JvcmRlcjpub25lO3BhZGRpbmc6Ljc1cHQgLjc1cHQgLjc1cHQgLjc1cHQnPg0KKyAgPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIGNsYXNzPXNob3J0dGV4dD4xNDxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisgIDwvdGQ+DQorICA8dGQgc3R5bGU9J2JvcmRlcjpub25lO3BhZGRpbmc6Ljc1cHQgLjc1cHQgLjc1cHQgLjc1cHQnPg0KKyAgPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIGNsYXNzPXNob3J0dGV4dD5UdWJ1bGFyIEJlbGxzPG86cD48L286cD48L3NwYW4+PC9wPg0KKyAgPC90ZD4NCisgPC90cj4NCisgPHRyIHN0eWxlPSdtc28teWZ0aS1pcm93OjE1Jz4NCisgIDx0ZCBzdHlsZT0nYm9yZGVyOm5vbmU7cGFkZGluZzouNzVwdCAuNzVwdCAuNzVwdCAuNzVwdCc+DQorICA8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gY2xhc3M9c2hvcnR0ZXh0PjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisgIDwvdGQ+DQorICA8dGQgc3R5bGU9J2JvcmRlcjpub25lO3BhZGRpbmc6Ljc1cHQgLjc1cHQgLjc1cHQgLjc1cHQnPg0KKyAgPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIGNsYXNzPXNob3J0dGV4dD4xNTxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisgIDwvdGQ+DQorICA8dGQgc3R5bGU9J2JvcmRlcjpub25lO3BhZGRpbmc6Ljc1cHQgLjc1cHQgLjc1cHQgLjc1cHQnPg0KKyAgPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIGNsYXNzPXNob3J0dGV4dD5EdWxjaW1lcjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisgIDwvdGQ+DQorIDwvdHI+DQorIDx0ciBzdHlsZT0nbXNvLXlmdGktaXJvdzoxNic+DQorICA8dGQgc3R5bGU9J2JvcmRlcjpub25lO3BhZGRpbmc6Ljc1cHQgLjc1cHQgLjc1cHQgLjc1cHQnPg0KKyAgPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIGNsYXNzPXNob3J0dGV4dD5PcmdhbjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisgIDwvdGQ+DQorICA8dGQgc3R5bGU9J2JvcmRlcjpub25lO3BhZGRpbmc6Ljc1cHQgLjc1cHQgLjc1cHQgLjc1cHQnPg0KKyAgPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIGNsYXNzPXNob3J0dGV4dD4xNjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisgIDwvdGQ+DQorICA8dGQgc3R5bGU9J2JvcmRlcjpub25lO3BhZGRpbmc6Ljc1cHQgLjc1cHQgLjc1cHQgLjc1cHQnPg0KKyAgPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIGNsYXNzPXNob3J0dGV4dD5EcmF3YmFyIE9yZ2FuPG86cD48L286cD48L3NwYW4+PC9wPg0KKyAgPC90ZD4NCisgPC90cj4NCisgPHRyIHN0eWxlPSdtc28teWZ0aS1pcm93OjE3Jz4NCisgIDx0ZCBzdHlsZT0nYm9yZGVyOm5vbmU7cGFkZGluZzouNzVwdCAuNzVwdCAuNzVwdCAuNzVwdCc+DQorICA8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gY2xhc3M9c2hvcnR0ZXh0PjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisgIDwvdGQ+DQorICA8dGQgc3R5bGU9J2JvcmRlcjpub25lO3BhZGRpbmc6Ljc1cHQgLjc1cHQgLjc1cHQgLjc1cHQnPg0KKyAgPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIGNsYXNzPXNob3J0dGV4dD4xNzxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisgIDwvdGQ+DQorICA8dGQgc3R5bGU9J2JvcmRlcjpub25lO3BhZGRpbmc6Ljc1cHQgLjc1cHQgLjc1cHQgLjc1cHQnPg0KKyAgPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIGNsYXNzPXNob3J0dGV4dD5QZXJjdXNzaXZlIE9yZ2FuPG86cD48L286cD48L3NwYW4+PC9wPg0KKyAgPC90ZD4NCisgPC90cj4NCisgPHRyIHN0eWxlPSdtc28teWZ0aS1pcm93OjE4Jz4NCisgIDx0ZCBzdHlsZT0nYm9yZGVyOm5vbmU7cGFkZGluZzouNzVwdCAuNzVwdCAuNzVwdCAuNzVwdCc+DQorICA8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gY2xhc3M9c2hvcnR0ZXh0PjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisgIDwvdGQ+DQorICA8dGQgc3R5bGU9J2JvcmRlcjpub25lO3BhZGRpbmc6Ljc1cHQgLjc1cHQgLjc1cHQgLjc1cHQnPg0KKyAgPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIGNsYXNzPXNob3J0dGV4dD4xODxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisgIDwvdGQ+DQorICA8dGQgc3R5bGU9J2JvcmRlcjpub25lO3BhZGRpbmc6Ljc1cHQgLjc1cHQgLjc1cHQgLjc1cHQnPg0KKyAgPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIGNsYXNzPXNob3J0dGV4dD5Sb2NrIE9yZ2FuPG86cD48L286cD48L3NwYW4+PC9wPg0KKyAgPC90ZD4NCisgPC90cj4NCisgPHRyIHN0eWxlPSdtc28teWZ0aS1pcm93OjE5Jz4NCisgIDx0ZCBzdHlsZT0nYm9yZGVyOm5vbmU7cGFkZGluZzouNzVwdCAuNzVwdCAuNzVwdCAuNzVwdCc+DQorICA8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gY2xhc3M9c2hvcnR0ZXh0PjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisgIDwvdGQ+DQorICA8dGQgc3R5bGU9J2JvcmRlcjpub25lO3BhZGRpbmc6Ljc1cHQgLjc1cHQgLjc1cHQgLjc1cHQnPg0KKyAgPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIGNsYXNzPXNob3J0dGV4dD4xOTxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisgIDwvdGQ+DQorICA8dGQgc3R5bGU9J2JvcmRlcjpub25lO3BhZGRpbmc6Ljc1cHQgLjc1cHQgLjc1cHQgLjc1cHQnPg0KKyAgPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIGNsYXNzPXNob3J0dGV4dD5DaHVyY2ggT3JnYW48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorICA8L3RkPg0KKyA8L3RyPg0KKyA8dHIgc3R5bGU9J21zby15ZnRpLWlyb3c6MjAnPg0KKyAgPHRkIHN0eWxlPSdib3JkZXI6bm9uZTtwYWRkaW5nOi43NXB0IC43NXB0IC43NXB0IC43NXB0Jz4NCisgIDxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBjbGFzcz1zaG9ydHRleHQ+PG86cD4mbmJzcDs8L286cD48L3NwYW4+PC9wPg0KKyAgPC90ZD4NCisgIDx0ZCBzdHlsZT0nYm9yZGVyOm5vbmU7cGFkZGluZzouNzVwdCAuNzVwdCAuNzVwdCAuNzVwdCc+DQorICA8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gY2xhc3M9c2hvcnR0ZXh0PjIwPG86cD48L286cD48L3NwYW4+PC9wPg0KKyAgPC90ZD4NCisgIDx0ZCBzdHlsZT0nYm9yZGVyOm5vbmU7cGFkZGluZzouNzVwdCAuNzVwdCAuNzVwdCAuNzVwdCc+DQorICA8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gY2xhc3M9c2hvcnR0ZXh0PlJlZWQgT3JnYW48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorICA8L3RkPg0KKyA8L3RyPg0KKyA8dHIgc3R5bGU9J21zby15ZnRpLWlyb3c6MjEnPg0KKyAgPHRkIHN0eWxlPSdib3JkZXI6bm9uZTtwYWRkaW5nOi43NXB0IC43NXB0IC43NXB0IC43NXB0Jz4NCisgIDxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBjbGFzcz1zaG9ydHRleHQ+PG86cD4mbmJzcDs8L286cD48L3NwYW4+PC9wPg0KKyAgPC90ZD4NCisgIDx0ZCBzdHlsZT0nYm9yZGVyOm5vbmU7cGFkZGluZzouNzVwdCAuNzVwdCAuNzVwdCAuNzVwdCc+DQorICA8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gY2xhc3M9c2hvcnR0ZXh0PjIxPG86cD48L286cD48L3NwYW4+PC9wPg0KKyAgPC90ZD4NCisgIDx0ZCBzdHlsZT0nYm9yZGVyOm5vbmU7cGFkZGluZzouNzVwdCAuNzVwdCAuNzVwdCAuNzVwdCc+DQorICA8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gY2xhc3M9c2hvcnR0ZXh0PkFjY29yZGlvbjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisgIDwvdGQ+DQorIDwvdHI+DQorIDx0ciBzdHlsZT0nbXNvLXlmdGktaXJvdzoyMic+DQorICA8dGQgc3R5bGU9J2JvcmRlcjpub25lO3BhZGRpbmc6Ljc1cHQgLjc1cHQgLjc1cHQgLjc1cHQnPg0KKyAgPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIGNsYXNzPXNob3J0dGV4dD48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+DQorICA8L3RkPg0KKyAgPHRkIHN0eWxlPSdib3JkZXI6bm9uZTtwYWRkaW5nOi43NXB0IC43NXB0IC43NXB0IC43NXB0Jz4NCisgIDxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBjbGFzcz1zaG9ydHRleHQ+MjI8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorICA8L3RkPg0KKyAgPHRkIHN0eWxlPSdib3JkZXI6bm9uZTtwYWRkaW5nOi43NXB0IC43NXB0IC43NXB0IC43NXB0Jz4NCisgIDxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBjbGFzcz1zaG9ydHRleHQ+SGFybW9uaWNhPG86cD48L286cD48L3NwYW4+PC9wPg0KKyAgPC90ZD4NCisgPC90cj4NCisgPHRyIHN0eWxlPSdtc28teWZ0aS1pcm93OjIzJz4NCisgIDx0ZCBzdHlsZT0nYm9yZGVyOm5vbmU7cGFkZGluZzouNzVwdCAuNzVwdCAuNzVwdCAuNzVwdCc+DQorICA8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gY2xhc3M9c2hvcnR0ZXh0PjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisgIDwvdGQ+DQorICA8dGQgc3R5bGU9J2JvcmRlcjpub25lO3BhZGRpbmc6Ljc1cHQgLjc1cHQgLjc1cHQgLjc1cHQnPg0KKyAgPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIGNsYXNzPXNob3J0dGV4dD4yMzxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisgIDwvdGQ+DQorICA8dGQgc3R5bGU9J2JvcmRlcjpub25lO3BhZGRpbmc6Ljc1cHQgLjc1cHQgLjc1cHQgLjc1cHQnPg0KKyAgPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIGNsYXNzPXNob3J0dGV4dD5UYW5nbyBBY2NvcmRpb248bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorICA8L3RkPg0KKyA8L3RyPg0KKyA8dHIgc3R5bGU9J21zby15ZnRpLWlyb3c6MjQnPg0KKyAgPHRkIHN0eWxlPSdib3JkZXI6bm9uZTtwYWRkaW5nOi43NXB0IC43NXB0IC43NXB0IC43NXB0Jz4NCisgIDxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBjbGFzcz1zaG9ydHRleHQ+R3VpdGFyPG86cD48L286cD48L3NwYW4+PC9wPg0KKyAgPC90ZD4NCisgIDx0ZCBzdHlsZT0nYm9yZGVyOm5vbmU7cGFkZGluZzouNzVwdCAuNzVwdCAuNzVwdCAuNzVwdCc+DQorICA8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gY2xhc3M9c2hvcnR0ZXh0PjI0PG86cD48L286cD48L3NwYW4+PC9wPg0KKyAgPC90ZD4NCisgIDx0ZCBzdHlsZT0nYm9yZGVyOm5vbmU7cGFkZGluZzouNzVwdCAuNzVwdCAuNzVwdCAuNzVwdCc+DQorICA8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gY2xhc3M9c2hvcnR0ZXh0Pk55bG9uIEFjb3VzdGljIEd1aXRhcjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisgIDwvdGQ+DQorIDwvdHI+DQorIDx0ciBzdHlsZT0nbXNvLXlmdGktaXJvdzoyNSc+DQorICA8dGQgc3R5bGU9J2JvcmRlcjpub25lO3BhZGRpbmc6Ljc1cHQgLjc1cHQgLjc1cHQgLjc1cHQnPg0KKyAgPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIGNsYXNzPXNob3J0dGV4dD48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+DQorICA8L3RkPg0KKyAgPHRkIHN0eWxlPSdib3JkZXI6bm9uZTtwYWRkaW5nOi43NXB0IC43NXB0IC43NXB0IC43NXB0Jz4NCisgIDxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBjbGFzcz1zaG9ydHRleHQ+MjU8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorICA8L3RkPg0KKyAgPHRkIHN0eWxlPSdib3JkZXI6bm9uZTtwYWRkaW5nOi43NXB0IC43NXB0IC43NXB0IC43NXB0Jz4NCisgIDxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBjbGFzcz1zaG9ydHRleHQ+U3RlZWwgQWNvdXN0aWMgR3VpdGFyPG86cD48L286cD48L3NwYW4+PC9wPg0KKyAgPC90ZD4NCisgPC90cj4NCisgPHRyIHN0eWxlPSdtc28teWZ0aS1pcm93OjI2Jz4NCisgIDx0ZCBzdHlsZT0nYm9yZGVyOm5vbmU7cGFkZGluZzouNzVwdCAuNzVwdCAuNzVwdCAuNzVwdCc+DQorICA8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gY2xhc3M9c2hvcnR0ZXh0PjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisgIDwvdGQ+DQorICA8dGQgc3R5bGU9J2JvcmRlcjpub25lO3BhZGRpbmc6Ljc1cHQgLjc1cHQgLjc1cHQgLjc1cHQnPg0KKyAgPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIGNsYXNzPXNob3J0dGV4dD4yNjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisgIDwvdGQ+DQorICA8dGQgc3R5bGU9J2JvcmRlcjpub25lO3BhZGRpbmc6Ljc1cHQgLjc1cHQgLjc1cHQgLjc1cHQnPg0KKyAgPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIGNsYXNzPXNob3J0dGV4dD5KYXp6IEVsZWN0cmljIEd1aXRhcjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisgIDwvdGQ+DQorIDwvdHI+DQorIDx0ciBzdHlsZT0nbXNvLXlmdGktaXJvdzoyNyc+DQorICA8dGQgc3R5bGU9J2JvcmRlcjpub25lO3BhZGRpbmc6Ljc1cHQgLjc1cHQgLjc1cHQgLjc1cHQnPg0KKyAgPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIGNsYXNzPXNob3J0dGV4dD48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+DQorICA8L3RkPg0KKyAgPHRkIHN0eWxlPSdib3JkZXI6bm9uZTtwYWRkaW5nOi43NXB0IC43NXB0IC43NXB0IC43NXB0Jz4NCisgIDxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBjbGFzcz1zaG9ydHRleHQ+Mjc8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorICA8L3RkPg0KKyAgPHRkIHN0eWxlPSdib3JkZXI6bm9uZTtwYWRkaW5nOi43NXB0IC43NXB0IC43NXB0IC43NXB0Jz4NCisgIDxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBjbGFzcz1zaG9ydHRleHQ+Q2xlYW4gRWxlY3RyaWMgR3VpdGFyPG86cD48L286cD48L3NwYW4+PC9wPg0KKyAgPC90ZD4NCisgPC90cj4NCisgPHRyIHN0eWxlPSdtc28teWZ0aS1pcm93OjI4Jz4NCisgIDx0ZCBzdHlsZT0nYm9yZGVyOm5vbmU7cGFkZGluZzouNzVwdCAuNzVwdCAuNzVwdCAuNzVwdCc+DQorICA8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gY2xhc3M9c2hvcnR0ZXh0PjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisgIDwvdGQ+DQorICA8dGQgc3R5bGU9J2JvcmRlcjpub25lO3BhZGRpbmc6Ljc1cHQgLjc1cHQgLjc1cHQgLjc1cHQnPg0KKyAgPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIGNsYXNzPXNob3J0dGV4dD4yODxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisgIDwvdGQ+DQorICA8dGQgc3R5bGU9J2JvcmRlcjpub25lO3BhZGRpbmc6Ljc1cHQgLjc1cHQgLjc1cHQgLjc1cHQnPg0KKyAgPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIGNsYXNzPXNob3J0dGV4dD5NdXRlZCBFbGVjdHJpYyBHdWl0YXI8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorICA8L3RkPg0KKyA8L3RyPg0KKyA8dHIgc3R5bGU9J21zby15ZnRpLWlyb3c6MjknPg0KKyAgPHRkIHN0eWxlPSdib3JkZXI6bm9uZTtwYWRkaW5nOi43NXB0IC43NXB0IC43NXB0IC43NXB0Jz4NCisgIDxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBjbGFzcz1zaG9ydHRleHQ+PG86cD4mbmJzcDs8L286cD48L3NwYW4+PC9wPg0KKyAgPC90ZD4NCisgIDx0ZCBzdHlsZT0nYm9yZGVyOm5vbmU7cGFkZGluZzouNzVwdCAuNzVwdCAuNzVwdCAuNzVwdCc+DQorICA8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gY2xhc3M9c2hvcnR0ZXh0PjI5PG86cD48L286cD48L3NwYW4+PC9wPg0KKyAgPC90ZD4NCisgIDx0ZCBzdHlsZT0nYm9yZGVyOm5vbmU7cGFkZGluZzouNzVwdCAuNzVwdCAuNzVwdCAuNzVwdCc+DQorICA8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gY2xhc3M9c2hvcnR0ZXh0Pk92ZXJkcml2ZW4gR3VpdGFyPG86cD48L286cD48L3NwYW4+PC9wPg0KKyAgPC90ZD4NCisgPC90cj4NCisgPHRyIHN0eWxlPSdtc28teWZ0aS1pcm93OjMwJz4NCisgIDx0ZCBzdHlsZT0nYm9yZGVyOm5vbmU7cGFkZGluZzouNzVwdCAuNzVwdCAuNzVwdCAuNzVwdCc+DQorICA8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gY2xhc3M9c2hvcnR0ZXh0PjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisgIDwvdGQ+DQorICA8dGQgc3R5bGU9J2JvcmRlcjpub25lO3BhZGRpbmc6Ljc1cHQgLjc1cHQgLjc1cHQgLjc1cHQnPg0KKyAgPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIGNsYXNzPXNob3J0dGV4dD4zMDxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisgIDwvdGQ+DQorICA8dGQgc3R5bGU9J2JvcmRlcjpub25lO3BhZGRpbmc6Ljc1cHQgLjc1cHQgLjc1cHQgLjc1cHQnPg0KKyAgPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIGNsYXNzPXNob3J0dGV4dD5EaXN0b3J0aW9uIEd1aXRhcjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisgIDwvdGQ+DQorIDwvdHI+DQorIDx0ciBzdHlsZT0nbXNvLXlmdGktaXJvdzozMSc+DQorICA8dGQgc3R5bGU9J2JvcmRlcjpub25lO3BhZGRpbmc6Ljc1cHQgLjc1cHQgLjc1cHQgLjc1cHQnPg0KKyAgPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIGNsYXNzPXNob3J0dGV4dD48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+DQorICA8L3RkPg0KKyAgPHRkIHN0eWxlPSdib3JkZXI6bm9uZTtwYWRkaW5nOi43NXB0IC43NXB0IC43NXB0IC43NXB0Jz4NCisgIDxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBjbGFzcz1zaG9ydHRleHQ+MzE8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorICA8L3RkPg0KKyAgPHRkIHN0eWxlPSdib3JkZXI6bm9uZTtwYWRkaW5nOi43NXB0IC43NXB0IC43NXB0IC43NXB0Jz4NCisgIDxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBjbGFzcz1zaG9ydHRleHQ+R3VpdGFyIEhhcm1vbmljczxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisgIDwvdGQ+DQorIDwvdHI+DQorIDx0ciBzdHlsZT0nbXNvLXlmdGktaXJvdzozMic+DQorICA8dGQgc3R5bGU9J2JvcmRlcjpub25lO3BhZGRpbmc6Ljc1cHQgLjc1cHQgLjc1cHQgLjc1cHQnPg0KKyAgPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIGNsYXNzPXNob3J0dGV4dD5CYXNzPG86cD48L286cD48L3NwYW4+PC9wPg0KKyAgPC90ZD4NCisgIDx0ZCBzdHlsZT0nYm9yZGVyOm5vbmU7cGFkZGluZzouNzVwdCAuNzVwdCAuNzVwdCAuNzVwdCc+DQorICA8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gY2xhc3M9c2hvcnR0ZXh0PjMyPG86cD48L286cD48L3NwYW4+PC9wPg0KKyAgPC90ZD4NCisgIDx0ZCBzdHlsZT0nYm9yZGVyOm5vbmU7cGFkZGluZzouNzVwdCAuNzVwdCAuNzVwdCAuNzVwdCc+DQorICA8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gY2xhc3M9c2hvcnR0ZXh0PkFjb3VzdGljIEJhc3M8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorICA8L3RkPg0KKyA8L3RyPg0KKyA8dHIgc3R5bGU9J21zby15ZnRpLWlyb3c6MzMnPg0KKyAgPHRkIHN0eWxlPSdib3JkZXI6bm9uZTtwYWRkaW5nOi43NXB0IC43NXB0IC43NXB0IC43NXB0Jz4NCisgIDxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBjbGFzcz1zaG9ydHRleHQ+PG86cD4mbmJzcDs8L286cD48L3NwYW4+PC9wPg0KKyAgPC90ZD4NCisgIDx0ZCBzdHlsZT0nYm9yZGVyOm5vbmU7cGFkZGluZzouNzVwdCAuNzVwdCAuNzVwdCAuNzVwdCc+DQorICA8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gY2xhc3M9c2hvcnR0ZXh0PjMzPG86cD48L286cD48L3NwYW4+PC9wPg0KKyAgPC90ZD4NCisgIDx0ZCBzdHlsZT0nYm9yZGVyOm5vbmU7cGFkZGluZzouNzVwdCAuNzVwdCAuNzVwdCAuNzVwdCc+DQorICA8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gY2xhc3M9c2hvcnR0ZXh0PkZpbmdlciBFbGVjdHJpYyBCYXNzPG86cD48L286cD48L3NwYW4+PC9wPg0KKyAgPC90ZD4NCisgPC90cj4NCisgPHRyIHN0eWxlPSdtc28teWZ0aS1pcm93OjM0Jz4NCisgIDx0ZCBzdHlsZT0nYm9yZGVyOm5vbmU7cGFkZGluZzouNzVwdCAuNzVwdCAuNzVwdCAuNzVwdCc+DQorICA8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gY2xhc3M9c2hvcnR0ZXh0PjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisgIDwvdGQ+DQorICA8dGQgc3R5bGU9J2JvcmRlcjpub25lO3BhZGRpbmc6Ljc1cHQgLjc1cHQgLjc1cHQgLjc1cHQnPg0KKyAgPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIGNsYXNzPXNob3J0dGV4dD4zNDxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisgIDwvdGQ+DQorICA8dGQgc3R5bGU9J2JvcmRlcjpub25lO3BhZGRpbmc6Ljc1cHQgLjc1cHQgLjc1cHQgLjc1cHQnPg0KKyAgPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIGNsYXNzPXNob3J0dGV4dD5QaWNrIEVsZWN0cmljIEJhc3M8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorICA8L3RkPg0KKyA8L3RyPg0KKyA8dHIgc3R5bGU9J21zby15ZnRpLWlyb3c6MzUnPg0KKyAgPHRkIHN0eWxlPSdib3JkZXI6bm9uZTtwYWRkaW5nOi43NXB0IC43NXB0IC43NXB0IC43NXB0Jz4NCisgIDxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBjbGFzcz1zaG9ydHRleHQ+PG86cD4mbmJzcDs8L286cD48L3NwYW4+PC9wPg0KKyAgPC90ZD4NCisgIDx0ZCBzdHlsZT0nYm9yZGVyOm5vbmU7cGFkZGluZzouNzVwdCAuNzVwdCAuNzVwdCAuNzVwdCc+DQorICA8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gY2xhc3M9c2hvcnR0ZXh0PjM1PG86cD48L286cD48L3NwYW4+PC9wPg0KKyAgPC90ZD4NCisgIDx0ZCBzdHlsZT0nYm9yZGVyOm5vbmU7cGFkZGluZzouNzVwdCAuNzVwdCAuNzVwdCAuNzVwdCc+DQorICA8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gY2xhc3M9c2hvcnR0ZXh0PkZyZXRsZXNzIEJhc3M8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorICA8L3RkPg0KKyA8L3RyPg0KKyA8dHIgc3R5bGU9J21zby15ZnRpLWlyb3c6MzYnPg0KKyAgPHRkIHN0eWxlPSdib3JkZXI6bm9uZTtwYWRkaW5nOi43NXB0IC43NXB0IC43NXB0IC43NXB0Jz4NCisgIDxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBjbGFzcz1zaG9ydHRleHQ+PG86cD4mbmJzcDs8L286cD48L3NwYW4+PC9wPg0KKyAgPC90ZD4NCisgIDx0ZCBzdHlsZT0nYm9yZGVyOm5vbmU7cGFkZGluZzouNzVwdCAuNzVwdCAuNzVwdCAuNzVwdCc+DQorICA8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gY2xhc3M9c2hvcnR0ZXh0PjM2PG86cD48L286cD48L3NwYW4+PC9wPg0KKyAgPC90ZD4NCisgIDx0ZCBzdHlsZT0nYm9yZGVyOm5vbmU7cGFkZGluZzouNzVwdCAuNzVwdCAuNzVwdCAuNzVwdCc+DQorICA8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gY2xhc3M9c2hvcnR0ZXh0PlNsYXAgQmFzcyAxPG86cD48L286cD48L3NwYW4+PC9wPg0KKyAgPC90ZD4NCisgPC90cj4NCisgPHRyIHN0eWxlPSdtc28teWZ0aS1pcm93OjM3Jz4NCisgIDx0ZCBzdHlsZT0nYm9yZGVyOm5vbmU7cGFkZGluZzouNzVwdCAuNzVwdCAuNzVwdCAuNzVwdCc+DQorICA8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gY2xhc3M9c2hvcnR0ZXh0PjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisgIDwvdGQ+DQorICA8dGQgc3R5bGU9J2JvcmRlcjpub25lO3BhZGRpbmc6Ljc1cHQgLjc1cHQgLjc1cHQgLjc1cHQnPg0KKyAgPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIGNsYXNzPXNob3J0dGV4dD4zNzxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisgIDwvdGQ+DQorICA8dGQgc3R5bGU9J2JvcmRlcjpub25lO3BhZGRpbmc6Ljc1cHQgLjc1cHQgLjc1cHQgLjc1cHQnPg0KKyAgPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIGNsYXNzPXNob3J0dGV4dD5TbGFwIEJhc3MgMjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisgIDwvdGQ+DQorIDwvdHI+DQorIDx0ciBzdHlsZT0nbXNvLXlmdGktaXJvdzozOCc+DQorICA8dGQgc3R5bGU9J2JvcmRlcjpub25lO3BhZGRpbmc6Ljc1cHQgLjc1cHQgLjc1cHQgLjc1cHQnPg0KKyAgPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIGNsYXNzPXNob3J0dGV4dD48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+DQorICA8L3RkPg0KKyAgPHRkIHN0eWxlPSdib3JkZXI6bm9uZTtwYWRkaW5nOi43NXB0IC43NXB0IC43NXB0IC43NXB0Jz4NCisgIDxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBjbGFzcz1zaG9ydHRleHQ+Mzg8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorICA8L3RkPg0KKyAgPHRkIHN0eWxlPSdib3JkZXI6bm9uZTtwYWRkaW5nOi43NXB0IC43NXB0IC43NXB0IC43NXB0Jz4NCisgIDxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBjbGFzcz1zaG9ydHRleHQ+U3ludGggQmFzcyAxPG86cD48L286cD48L3NwYW4+PC9wPg0KKyAgPC90ZD4NCisgPC90cj4NCisgPHRyIHN0eWxlPSdtc28teWZ0aS1pcm93OjM5Jz4NCisgIDx0ZCBzdHlsZT0nYm9yZGVyOm5vbmU7cGFkZGluZzouNzVwdCAuNzVwdCAuNzVwdCAuNzVwdCc+DQorICA8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gY2xhc3M9c2hvcnR0ZXh0PjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisgIDwvdGQ+DQorICA8dGQgc3R5bGU9J2JvcmRlcjpub25lO3BhZGRpbmc6Ljc1cHQgLjc1cHQgLjc1cHQgLjc1cHQnPg0KKyAgPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIGNsYXNzPXNob3J0dGV4dD4zOTxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisgIDwvdGQ+DQorICA8dGQgc3R5bGU9J2JvcmRlcjpub25lO3BhZGRpbmc6Ljc1cHQgLjc1cHQgLjc1cHQgLjc1cHQnPg0KKyAgPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIGNsYXNzPXNob3J0dGV4dD5TeW50aCBCYXNzIDI8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorICA8L3RkPg0KKyA8L3RyPg0KKyA8dHIgc3R5bGU9J21zby15ZnRpLWlyb3c6NDAnPg0KKyAgPHRkIHN0eWxlPSdib3JkZXI6bm9uZTtwYWRkaW5nOi43NXB0IC43NXB0IC43NXB0IC43NXB0Jz4NCisgIDxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBjbGFzcz1zaG9ydHRleHQ+U3RyaW5nczxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisgIDwvdGQ+DQorICA8dGQgc3R5bGU9J2JvcmRlcjpub25lO3BhZGRpbmc6Ljc1cHQgLjc1cHQgLjc1cHQgLjc1cHQnPg0KKyAgPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIGNsYXNzPXNob3J0dGV4dD40MDxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisgIDwvdGQ+DQorICA8dGQgc3R5bGU9J2JvcmRlcjpub25lO3BhZGRpbmc6Ljc1cHQgLjc1cHQgLjc1cHQgLjc1cHQnPg0KKyAgPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIGNsYXNzPXNob3J0dGV4dD5WaW9saW48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorICA8L3RkPg0KKyA8L3RyPg0KKyA8dHIgc3R5bGU9J21zby15ZnRpLWlyb3c6NDEnPg0KKyAgPHRkIHN0eWxlPSdib3JkZXI6bm9uZTtwYWRkaW5nOi43NXB0IC43NXB0IC43NXB0IC43NXB0Jz4NCisgIDxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBjbGFzcz1zaG9ydHRleHQ+PG86cD4mbmJzcDs8L286cD48L3NwYW4+PC9wPg0KKyAgPC90ZD4NCisgIDx0ZCBzdHlsZT0nYm9yZGVyOm5vbmU7cGFkZGluZzouNzVwdCAuNzVwdCAuNzVwdCAuNzVwdCc+DQorICA8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gY2xhc3M9c2hvcnR0ZXh0PjQxPG86cD48L286cD48L3NwYW4+PC9wPg0KKyAgPC90ZD4NCisgIDx0ZCBzdHlsZT0nYm9yZGVyOm5vbmU7cGFkZGluZzouNzVwdCAuNzVwdCAuNzVwdCAuNzVwdCc+DQorICA8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gY2xhc3M9c2hvcnR0ZXh0PlZpb2xhPG86cD48L286cD48L3NwYW4+PC9wPg0KKyAgPC90ZD4NCisgPC90cj4NCisgPHRyIHN0eWxlPSdtc28teWZ0aS1pcm93OjQyJz4NCisgIDx0ZCBzdHlsZT0nYm9yZGVyOm5vbmU7cGFkZGluZzouNzVwdCAuNzVwdCAuNzVwdCAuNzVwdCc+DQorICA8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gY2xhc3M9c2hvcnR0ZXh0PjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisgIDwvdGQ+DQorICA8dGQgc3R5bGU9J2JvcmRlcjpub25lO3BhZGRpbmc6Ljc1cHQgLjc1cHQgLjc1cHQgLjc1cHQnPg0KKyAgPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIGNsYXNzPXNob3J0dGV4dD40MjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisgIDwvdGQ+DQorICA8dGQgc3R5bGU9J2JvcmRlcjpub25lO3BhZGRpbmc6Ljc1cHQgLjc1cHQgLjc1cHQgLjc1cHQnPg0KKyAgPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIGNsYXNzPXNob3J0dGV4dD5DZWxsbzxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisgIDwvdGQ+DQorIDwvdHI+DQorIDx0ciBzdHlsZT0nbXNvLXlmdGktaXJvdzo0Myc+DQorICA8dGQgc3R5bGU9J2JvcmRlcjpub25lO3BhZGRpbmc6Ljc1cHQgLjc1cHQgLjc1cHQgLjc1cHQnPg0KKyAgPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIGNsYXNzPXNob3J0dGV4dD48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+DQorICA8L3RkPg0KKyAgPHRkIHN0eWxlPSdib3JkZXI6bm9uZTtwYWRkaW5nOi43NXB0IC43NXB0IC43NXB0IC43NXB0Jz4NCisgIDxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBjbGFzcz1zaG9ydHRleHQ+NDM8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorICA8L3RkPg0KKyAgPHRkIHN0eWxlPSdib3JkZXI6bm9uZTtwYWRkaW5nOi43NXB0IC43NXB0IC43NXB0IC43NXB0Jz4NCisgIDxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBjbGFzcz1zaG9ydHRleHQ+Q29udHJhYmFzczxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisgIDwvdGQ+DQorIDwvdHI+DQorIDx0ciBzdHlsZT0nbXNvLXlmdGktaXJvdzo0NCc+DQorICA8dGQgc3R5bGU9J2JvcmRlcjpub25lO3BhZGRpbmc6Ljc1cHQgLjc1cHQgLjc1cHQgLjc1cHQnPg0KKyAgPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIGNsYXNzPXNob3J0dGV4dD48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+DQorICA8L3RkPg0KKyAgPHRkIHN0eWxlPSdib3JkZXI6bm9uZTtwYWRkaW5nOi43NXB0IC43NXB0IC43NXB0IC43NXB0Jz4NCisgIDxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBjbGFzcz1zaG9ydHRleHQ+NDQ8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorICA8L3RkPg0KKyAgPHRkIHN0eWxlPSdib3JkZXI6bm9uZTtwYWRkaW5nOi43NXB0IC43NXB0IC43NXB0IC43NXB0Jz4NCisgIDxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBjbGFzcz1zaG9ydHRleHQ+VHJlbW9sbyBTdHJpbmdzPG86cD48L286cD48L3NwYW4+PC9wPg0KKyAgPC90ZD4NCisgPC90cj4NCisgPHRyIHN0eWxlPSdtc28teWZ0aS1pcm93OjQ1Jz4NCisgIDx0ZCBzdHlsZT0nYm9yZGVyOm5vbmU7cGFkZGluZzouNzVwdCAuNzVwdCAuNzVwdCAuNzVwdCc+DQorICA8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gY2xhc3M9c2hvcnR0ZXh0PjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisgIDwvdGQ+DQorICA8dGQgc3R5bGU9J2JvcmRlcjpub25lO3BhZGRpbmc6Ljc1cHQgLjc1cHQgLjc1cHQgLjc1cHQnPg0KKyAgPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIGNsYXNzPXNob3J0dGV4dD40NTxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisgIDwvdGQ+DQorICA8dGQgc3R5bGU9J2JvcmRlcjpub25lO3BhZGRpbmc6Ljc1cHQgLjc1cHQgLjc1cHQgLjc1cHQnPg0KKyAgPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIGNsYXNzPXNob3J0dGV4dD5QaXp6aWNhdG8gU3RyaW5nczxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisgIDwvdGQ+DQorIDwvdHI+DQorIDx0ciBzdHlsZT0nbXNvLXlmdGktaXJvdzo0Nic+DQorICA8dGQgc3R5bGU9J2JvcmRlcjpub25lO3BhZGRpbmc6Ljc1cHQgLjc1cHQgLjc1cHQgLjc1cHQnPg0KKyAgPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIGNsYXNzPXNob3J0dGV4dD48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+DQorICA8L3RkPg0KKyAgPHRkIHN0eWxlPSdib3JkZXI6bm9uZTtwYWRkaW5nOi43NXB0IC43NXB0IC43NXB0IC43NXB0Jz4NCisgIDxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBjbGFzcz1zaG9ydHRleHQ+NDY8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorICA8L3RkPg0KKyAgPHRkIHN0eWxlPSdib3JkZXI6bm9uZTtwYWRkaW5nOi43NXB0IC43NXB0IC43NXB0IC43NXB0Jz4NCisgIDxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBjbGFzcz1zaG9ydHRleHQ+T3JjaGVzdHJhbCBIYXJwPG86cD48L286cD48L3NwYW4+PC9wPg0KKyAgPC90ZD4NCisgPC90cj4NCisgPHRyIHN0eWxlPSdtc28teWZ0aS1pcm93OjQ3Jz4NCisgIDx0ZCBzdHlsZT0nYm9yZGVyOm5vbmU7cGFkZGluZzouNzVwdCAuNzVwdCAuNzVwdCAuNzVwdCc+DQorICA8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gY2xhc3M9c2hvcnR0ZXh0PjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisgIDwvdGQ+DQorICA8dGQgc3R5bGU9J2JvcmRlcjpub25lO3BhZGRpbmc6Ljc1cHQgLjc1cHQgLjc1cHQgLjc1cHQnPg0KKyAgPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIGNsYXNzPXNob3J0dGV4dD40NzxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisgIDwvdGQ+DQorICA8dGQgc3R5bGU9J2JvcmRlcjpub25lO3BhZGRpbmc6Ljc1cHQgLjc1cHQgLjc1cHQgLjc1cHQnPg0KKyAgPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIGNsYXNzPXNob3J0dGV4dD5UaW1wYW5pPG86cD48L286cD48L3NwYW4+PC9wPg0KKyAgPC90ZD4NCisgPC90cj4NCisgPHRyIHN0eWxlPSdtc28teWZ0aS1pcm93OjQ4Jz4NCisgIDx0ZCBzdHlsZT0nYm9yZGVyOm5vbmU7cGFkZGluZzouNzVwdCAuNzVwdCAuNzVwdCAuNzVwdCc+DQorICA8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gY2xhc3M9c2hvcnR0ZXh0PkVuc2VtYmxlPG86cD48L286cD48L3NwYW4+PC9wPg0KKyAgPC90ZD4NCisgIDx0ZCBzdHlsZT0nYm9yZGVyOm5vbmU7cGFkZGluZzouNzVwdCAuNzVwdCAuNzVwdCAuNzVwdCc+DQorICA8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gY2xhc3M9c2hvcnR0ZXh0PjQ4PG86cD48L286cD48L3NwYW4+PC9wPg0KKyAgPC90ZD4NCisgIDx0ZCBzdHlsZT0nYm9yZGVyOm5vbmU7cGFkZGluZzouNzVwdCAuNzVwdCAuNzVwdCAuNzVwdCc+DQorICA8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gY2xhc3M9c2hvcnR0ZXh0PlN0cmluZyBFbnNlbWJsZSAxPG86cD48L286cD48L3NwYW4+PC9wPg0KKyAgPC90ZD4NCisgPC90cj4NCisgPHRyIHN0eWxlPSdtc28teWZ0aS1pcm93OjQ5Jz4NCisgIDx0ZCBzdHlsZT0nYm9yZGVyOm5vbmU7cGFkZGluZzouNzVwdCAuNzVwdCAuNzVwdCAuNzVwdCc+DQorICA8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gY2xhc3M9c2hvcnR0ZXh0PjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisgIDwvdGQ+DQorICA8dGQgc3R5bGU9J2JvcmRlcjpub25lO3BhZGRpbmc6Ljc1cHQgLjc1cHQgLjc1cHQgLjc1cHQnPg0KKyAgPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIGNsYXNzPXNob3J0dGV4dD40OTxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisgIDwvdGQ+DQorICA8dGQgc3R5bGU9J2JvcmRlcjpub25lO3BhZGRpbmc6Ljc1cHQgLjc1cHQgLjc1cHQgLjc1cHQnPg0KKyAgPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIGNsYXNzPXNob3J0dGV4dD5TdHJpbmcgRW5zZW1ibGUgMjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisgIDwvdGQ+DQorIDwvdHI+DQorIDx0ciBzdHlsZT0nbXNvLXlmdGktaXJvdzo1MCc+DQorICA8dGQgc3R5bGU9J2JvcmRlcjpub25lO3BhZGRpbmc6Ljc1cHQgLjc1cHQgLjc1cHQgLjc1cHQnPg0KKyAgPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIGNsYXNzPXNob3J0dGV4dD48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+DQorICA8L3RkPg0KKyAgPHRkIHN0eWxlPSdib3JkZXI6bm9uZTtwYWRkaW5nOi43NXB0IC43NXB0IC43NXB0IC43NXB0Jz4NCisgIDxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBjbGFzcz1zaG9ydHRleHQ+NTA8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorICA8L3RkPg0KKyAgPHRkIHN0eWxlPSdib3JkZXI6bm9uZTtwYWRkaW5nOi43NXB0IC43NXB0IC43NXB0IC43NXB0Jz4NCisgIDxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBjbGFzcz1zaG9ydHRleHQ+U3ludGggU3RyaW5ncyAxPG86cD48L286cD48L3NwYW4+PC9wPg0KKyAgPC90ZD4NCisgPC90cj4NCisgPHRyIHN0eWxlPSdtc28teWZ0aS1pcm93OjUxJz4NCisgIDx0ZCBzdHlsZT0nYm9yZGVyOm5vbmU7cGFkZGluZzouNzVwdCAuNzVwdCAuNzVwdCAuNzVwdCc+DQorICA8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gY2xhc3M9c2hvcnR0ZXh0PjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisgIDwvdGQ+DQorICA8dGQgc3R5bGU9J2JvcmRlcjpub25lO3BhZGRpbmc6Ljc1cHQgLjc1cHQgLjc1cHQgLjc1cHQnPg0KKyAgPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIGNsYXNzPXNob3J0dGV4dD41MTxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisgIDwvdGQ+DQorICA8dGQgc3R5bGU9J2JvcmRlcjpub25lO3BhZGRpbmc6Ljc1cHQgLjc1cHQgLjc1cHQgLjc1cHQnPg0KKyAgPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIGNsYXNzPXNob3J0dGV4dD5TeW50aCBTdHJpbmdzIDI8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorICA8L3RkPg0KKyA8L3RyPg0KKyA8dHIgc3R5bGU9J21zby15ZnRpLWlyb3c6NTInPg0KKyAgPHRkIHN0eWxlPSdib3JkZXI6bm9uZTtwYWRkaW5nOi43NXB0IC43NXB0IC43NXB0IC43NXB0Jz4NCisgIDxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBjbGFzcz1zaG9ydHRleHQ+PG86cD4mbmJzcDs8L286cD48L3NwYW4+PC9wPg0KKyAgPC90ZD4NCisgIDx0ZCBzdHlsZT0nYm9yZGVyOm5vbmU7cGFkZGluZzouNzVwdCAuNzVwdCAuNzVwdCAuNzVwdCc+DQorICA8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gY2xhc3M9c2hvcnR0ZXh0PjUyPG86cD48L286cD48L3NwYW4+PC9wPg0KKyAgPC90ZD4NCisgIDx0ZCBzdHlsZT0nYm9yZGVyOm5vbmU7cGFkZGluZzouNzVwdCAuNzVwdCAuNzVwdCAuNzVwdCc+DQorICA8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gY2xhc3M9c2hvcnR0ZXh0PkNob2lyIEFhaHM8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorICA8L3RkPg0KKyA8L3RyPg0KKyA8dHIgc3R5bGU9J21zby15ZnRpLWlyb3c6NTMnPg0KKyAgPHRkIHN0eWxlPSdib3JkZXI6bm9uZTtwYWRkaW5nOi43NXB0IC43NXB0IC43NXB0IC43NXB0Jz4NCisgIDxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBjbGFzcz1zaG9ydHRleHQ+PG86cD4mbmJzcDs8L286cD48L3NwYW4+PC9wPg0KKyAgPC90ZD4NCisgIDx0ZCBzdHlsZT0nYm9yZGVyOm5vbmU7cGFkZGluZzouNzVwdCAuNzVwdCAuNzVwdCAuNzVwdCc+DQorICA8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gY2xhc3M9c2hvcnR0ZXh0PjUzPG86cD48L286cD48L3NwYW4+PC9wPg0KKyAgPC90ZD4NCisgIDx0ZCBzdHlsZT0nYm9yZGVyOm5vbmU7cGFkZGluZzouNzVwdCAuNzVwdCAuNzVwdCAuNzVwdCc+DQorICA8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gY2xhc3M9c2hvcnR0ZXh0PlZvaWNlIE9vaHM8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorICA8L3RkPg0KKyA8L3RyPg0KKyA8dHIgc3R5bGU9J21zby15ZnRpLWlyb3c6NTQnPg0KKyAgPHRkIHN0eWxlPSdib3JkZXI6bm9uZTtwYWRkaW5nOi43NXB0IC43NXB0IC43NXB0IC43NXB0Jz4NCisgIDxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBjbGFzcz1zaG9ydHRleHQ+PG86cD4mbmJzcDs8L286cD48L3NwYW4+PC9wPg0KKyAgPC90ZD4NCisgIDx0ZCBzdHlsZT0nYm9yZGVyOm5vbmU7cGFkZGluZzouNzVwdCAuNzVwdCAuNzVwdCAuNzVwdCc+DQorICA8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gY2xhc3M9c2hvcnR0ZXh0PjU0PG86cD48L286cD48L3NwYW4+PC9wPg0KKyAgPC90ZD4NCisgIDx0ZCBzdHlsZT0nYm9yZGVyOm5vbmU7cGFkZGluZzouNzVwdCAuNzVwdCAuNzVwdCAuNzVwdCc+DQorICA8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gY2xhc3M9c2hvcnR0ZXh0PlN5bnRoIFZvaWNlPG86cD48L286cD48L3NwYW4+PC9wPg0KKyAgPC90ZD4NCisgPC90cj4NCisgPHRyIHN0eWxlPSdtc28teWZ0aS1pcm93OjU1Jz4NCisgIDx0ZCBzdHlsZT0nYm9yZGVyOm5vbmU7cGFkZGluZzouNzVwdCAuNzVwdCAuNzVwdCAuNzVwdCc+DQorICA8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gY2xhc3M9c2hvcnR0ZXh0PjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisgIDwvdGQ+DQorICA8dGQgc3R5bGU9J2JvcmRlcjpub25lO3BhZGRpbmc6Ljc1cHQgLjc1cHQgLjc1cHQgLjc1cHQnPg0KKyAgPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIGNsYXNzPXNob3J0dGV4dD41NTxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisgIDwvdGQ+DQorICA8dGQgc3R5bGU9J2JvcmRlcjpub25lO3BhZGRpbmc6Ljc1cHQgLjc1cHQgLjc1cHQgLjc1cHQnPg0KKyAgPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIGNsYXNzPXNob3J0dGV4dD5PcmNoZXN0cmEgSGl0PG86cD48L286cD48L3NwYW4+PC9wPg0KKyAgPC90ZD4NCisgPC90cj4NCisgPHRyIHN0eWxlPSdtc28teWZ0aS1pcm93OjU2Jz4NCisgIDx0ZCBzdHlsZT0nYm9yZGVyOm5vbmU7cGFkZGluZzouNzVwdCAuNzVwdCAuNzVwdCAuNzVwdCc+DQorICA8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gY2xhc3M9c2hvcnR0ZXh0PkJyYXNzPG86cD48L286cD48L3NwYW4+PC9wPg0KKyAgPC90ZD4NCisgIDx0ZCBzdHlsZT0nYm9yZGVyOm5vbmU7cGFkZGluZzouNzVwdCAuNzVwdCAuNzVwdCAuNzVwdCc+DQorICA8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gY2xhc3M9c2hvcnR0ZXh0PjU2PG86cD48L286cD48L3NwYW4+PC9wPg0KKyAgPC90ZD4NCisgIDx0ZCBzdHlsZT0nYm9yZGVyOm5vbmU7cGFkZGluZzouNzVwdCAuNzVwdCAuNzVwdCAuNzVwdCc+DQorICA8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gY2xhc3M9c2hvcnR0ZXh0PlRydW1wZXQ8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorICA8L3RkPg0KKyA8L3RyPg0KKyA8dHIgc3R5bGU9J21zby15ZnRpLWlyb3c6NTcnPg0KKyAgPHRkIHN0eWxlPSdib3JkZXI6bm9uZTtwYWRkaW5nOi43NXB0IC43NXB0IC43NXB0IC43NXB0Jz4NCisgIDxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBjbGFzcz1zaG9ydHRleHQ+PG86cD4mbmJzcDs8L286cD48L3NwYW4+PC9wPg0KKyAgPC90ZD4NCisgIDx0ZCBzdHlsZT0nYm9yZGVyOm5vbmU7cGFkZGluZzouNzVwdCAuNzVwdCAuNzVwdCAuNzVwdCc+DQorICA8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gY2xhc3M9c2hvcnR0ZXh0PjU3PG86cD48L286cD48L3NwYW4+PC9wPg0KKyAgPC90ZD4NCisgIDx0ZCBzdHlsZT0nYm9yZGVyOm5vbmU7cGFkZGluZzouNzVwdCAuNzVwdCAuNzVwdCAuNzVwdCc+DQorICA8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gY2xhc3M9c2hvcnR0ZXh0PlRyb21ib25lPG86cD48L286cD48L3NwYW4+PC9wPg0KKyAgPC90ZD4NCisgPC90cj4NCisgPHRyIHN0eWxlPSdtc28teWZ0aS1pcm93OjU4Jz4NCisgIDx0ZCBzdHlsZT0nYm9yZGVyOm5vbmU7cGFkZGluZzouNzVwdCAuNzVwdCAuNzVwdCAuNzVwdCc+DQorICA8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gY2xhc3M9c2hvcnR0ZXh0PjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisgIDwvdGQ+DQorICA8dGQgc3R5bGU9J2JvcmRlcjpub25lO3BhZGRpbmc6Ljc1cHQgLjc1cHQgLjc1cHQgLjc1cHQnPg0KKyAgPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIGNsYXNzPXNob3J0dGV4dD41ODxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisgIDwvdGQ+DQorICA8dGQgc3R5bGU9J2JvcmRlcjpub25lO3BhZGRpbmc6Ljc1cHQgLjc1cHQgLjc1cHQgLjc1cHQnPg0KKyAgPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIGNsYXNzPXNob3J0dGV4dD5UdWJhPG86cD48L286cD48L3NwYW4+PC9wPg0KKyAgPC90ZD4NCisgPC90cj4NCisgPHRyIHN0eWxlPSdtc28teWZ0aS1pcm93OjU5Jz4NCisgIDx0ZCBzdHlsZT0nYm9yZGVyOm5vbmU7cGFkZGluZzouNzVwdCAuNzVwdCAuNzVwdCAuNzVwdCc+DQorICA8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gY2xhc3M9c2hvcnR0ZXh0PjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisgIDwvdGQ+DQorICA8dGQgc3R5bGU9J2JvcmRlcjpub25lO3BhZGRpbmc6Ljc1cHQgLjc1cHQgLjc1cHQgLjc1cHQnPg0KKyAgPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIGNsYXNzPXNob3J0dGV4dD41OTxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisgIDwvdGQ+DQorICA8dGQgc3R5bGU9J2JvcmRlcjpub25lO3BhZGRpbmc6Ljc1cHQgLjc1cHQgLjc1cHQgLjc1cHQnPg0KKyAgPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIGNsYXNzPXNob3J0dGV4dD5NdXRlZCBUcnVtcGV0PG86cD48L286cD48L3NwYW4+PC9wPg0KKyAgPC90ZD4NCisgPC90cj4NCisgPHRyIHN0eWxlPSdtc28teWZ0aS1pcm93OjYwJz4NCisgIDx0ZCBzdHlsZT0nYm9yZGVyOm5vbmU7cGFkZGluZzouNzVwdCAuNzVwdCAuNzVwdCAuNzVwdCc+DQorICA8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gY2xhc3M9c2hvcnR0ZXh0PjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisgIDwvdGQ+DQorICA8dGQgc3R5bGU9J2JvcmRlcjpub25lO3BhZGRpbmc6Ljc1cHQgLjc1cHQgLjc1cHQgLjc1cHQnPg0KKyAgPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIGNsYXNzPXNob3J0dGV4dD42MDxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisgIDwvdGQ+DQorICA8dGQgc3R5bGU9J2JvcmRlcjpub25lO3BhZGRpbmc6Ljc1cHQgLjc1cHQgLjc1cHQgLjc1cHQnPg0KKyAgPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIGNsYXNzPXNob3J0dGV4dD5GcmVuY2ggSG9ybjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisgIDwvdGQ+DQorIDwvdHI+DQorIDx0ciBzdHlsZT0nbXNvLXlmdGktaXJvdzo2MSc+DQorICA8dGQgc3R5bGU9J2JvcmRlcjpub25lO3BhZGRpbmc6Ljc1cHQgLjc1cHQgLjc1cHQgLjc1cHQnPg0KKyAgPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIGNsYXNzPXNob3J0dGV4dD48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+DQorICA8L3RkPg0KKyAgPHRkIHN0eWxlPSdib3JkZXI6bm9uZTtwYWRkaW5nOi43NXB0IC43NXB0IC43NXB0IC43NXB0Jz4NCisgIDxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBjbGFzcz1zaG9ydHRleHQ+NjE8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorICA8L3RkPg0KKyAgPHRkIHN0eWxlPSdib3JkZXI6bm9uZTtwYWRkaW5nOi43NXB0IC43NXB0IC43NXB0IC43NXB0Jz4NCisgIDxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBjbGFzcz1zaG9ydHRleHQ+QnJhc3MgU2VjdGlvbjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisgIDwvdGQ+DQorIDwvdHI+DQorIDx0ciBzdHlsZT0nbXNvLXlmdGktaXJvdzo2Mic+DQorICA8dGQgc3R5bGU9J2JvcmRlcjpub25lO3BhZGRpbmc6Ljc1cHQgLjc1cHQgLjc1cHQgLjc1cHQnPg0KKyAgPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIGNsYXNzPXNob3J0dGV4dD48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+DQorICA8L3RkPg0KKyAgPHRkIHN0eWxlPSdib3JkZXI6bm9uZTtwYWRkaW5nOi43NXB0IC43NXB0IC43NXB0IC43NXB0Jz4NCisgIDxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBjbGFzcz1zaG9ydHRleHQ+NjI8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorICA8L3RkPg0KKyAgPHRkIHN0eWxlPSdib3JkZXI6bm9uZTtwYWRkaW5nOi43NXB0IC43NXB0IC43NXB0IC43NXB0Jz4NCisgIDxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBjbGFzcz1zaG9ydHRleHQ+U3ludGggQnJhc3MgMTxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisgIDwvdGQ+DQorIDwvdHI+DQorIDx0ciBzdHlsZT0nbXNvLXlmdGktaXJvdzo2Myc+DQorICA8dGQgc3R5bGU9J2JvcmRlcjpub25lO3BhZGRpbmc6Ljc1cHQgLjc1cHQgLjc1cHQgLjc1cHQnPg0KKyAgPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIGNsYXNzPXNob3J0dGV4dD48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+DQorICA8L3RkPg0KKyAgPHRkIHN0eWxlPSdib3JkZXI6bm9uZTtwYWRkaW5nOi43NXB0IC43NXB0IC43NXB0IC43NXB0Jz4NCisgIDxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBjbGFzcz1zaG9ydHRleHQ+NjM8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorICA8L3RkPg0KKyAgPHRkIHN0eWxlPSdib3JkZXI6bm9uZTtwYWRkaW5nOi43NXB0IC43NXB0IC43NXB0IC43NXB0Jz4NCisgIDxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBjbGFzcz1zaG9ydHRleHQ+U3ludGggQnJhc3MgMjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisgIDwvdGQ+DQorIDwvdHI+DQorIDx0ciBzdHlsZT0nbXNvLXlmdGktaXJvdzo2NCc+DQorICA8dGQgc3R5bGU9J2JvcmRlcjpub25lO3BhZGRpbmc6Ljc1cHQgLjc1cHQgLjc1cHQgLjc1cHQnPg0KKyAgPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIGNsYXNzPXNob3J0dGV4dD5SZWVkPG86cD48L286cD48L3NwYW4+PC9wPg0KKyAgPC90ZD4NCisgIDx0ZCBzdHlsZT0nYm9yZGVyOm5vbmU7cGFkZGluZzouNzVwdCAuNzVwdCAuNzVwdCAuNzVwdCc+DQorICA8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gY2xhc3M9c2hvcnR0ZXh0PjY0PG86cD48L286cD48L3NwYW4+PC9wPg0KKyAgPC90ZD4NCisgIDx0ZCBzdHlsZT0nYm9yZGVyOm5vbmU7cGFkZGluZzouNzVwdCAuNzVwdCAuNzVwdCAuNzVwdCc+DQorICA8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gY2xhc3M9c2hvcnR0ZXh0PlNvcHJhbm8gU2F4b3Bob25lPG86cD48L286cD48L3NwYW4+PC9wPg0KKyAgPC90ZD4NCisgPC90cj4NCisgPHRyIHN0eWxlPSdtc28teWZ0aS1pcm93OjY1Jz4NCisgIDx0ZCBzdHlsZT0nYm9yZGVyOm5vbmU7cGFkZGluZzouNzVwdCAuNzVwdCAuNzVwdCAuNzVwdCc+DQorICA8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gY2xhc3M9c2hvcnR0ZXh0PjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisgIDwvdGQ+DQorICA8dGQgc3R5bGU9J2JvcmRlcjpub25lO3BhZGRpbmc6Ljc1cHQgLjc1cHQgLjc1cHQgLjc1cHQnPg0KKyAgPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIGNsYXNzPXNob3J0dGV4dD42NTxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisgIDwvdGQ+DQorICA8dGQgc3R5bGU9J2JvcmRlcjpub25lO3BhZGRpbmc6Ljc1cHQgLjc1cHQgLjc1cHQgLjc1cHQnPg0KKyAgPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIGNsYXNzPXNob3J0dGV4dD5BbHRvIFNheG9waG9uZTxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisgIDwvdGQ+DQorIDwvdHI+DQorIDx0ciBzdHlsZT0nbXNvLXlmdGktaXJvdzo2Nic+DQorICA8dGQgc3R5bGU9J2JvcmRlcjpub25lO3BhZGRpbmc6Ljc1cHQgLjc1cHQgLjc1cHQgLjc1cHQnPg0KKyAgPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIGNsYXNzPXNob3J0dGV4dD48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+DQorICA8L3RkPg0KKyAgPHRkIHN0eWxlPSdib3JkZXI6bm9uZTtwYWRkaW5nOi43NXB0IC43NXB0IC43NXB0IC43NXB0Jz4NCisgIDxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBjbGFzcz1zaG9ydHRleHQ+NjY8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorICA8L3RkPg0KKyAgPHRkIHN0eWxlPSdib3JkZXI6bm9uZTtwYWRkaW5nOi43NXB0IC43NXB0IC43NXB0IC43NXB0Jz4NCisgIDxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBjbGFzcz1zaG9ydHRleHQ+VGVub3IgU2F4b3Bob25lPG86cD48L286cD48L3NwYW4+PC9wPg0KKyAgPC90ZD4NCisgPC90cj4NCisgPHRyIHN0eWxlPSdtc28teWZ0aS1pcm93OjY3Jz4NCisgIDx0ZCBzdHlsZT0nYm9yZGVyOm5vbmU7cGFkZGluZzouNzVwdCAuNzVwdCAuNzVwdCAuNzVwdCc+DQorICA8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gY2xhc3M9c2hvcnR0ZXh0PjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisgIDwvdGQ+DQorICA8dGQgc3R5bGU9J2JvcmRlcjpub25lO3BhZGRpbmc6Ljc1cHQgLjc1cHQgLjc1cHQgLjc1cHQnPg0KKyAgPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIGNsYXNzPXNob3J0dGV4dD42NzxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisgIDwvdGQ+DQorICA8dGQgc3R5bGU9J2JvcmRlcjpub25lO3BhZGRpbmc6Ljc1cHQgLjc1cHQgLjc1cHQgLjc1cHQnPg0KKyAgPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIGNsYXNzPXNob3J0dGV4dD5CYXJpdG9uZSBTYXhvcGhvbmU8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorICA8L3RkPg0KKyA8L3RyPg0KKyA8dHIgc3R5bGU9J21zby15ZnRpLWlyb3c6NjgnPg0KKyAgPHRkIHN0eWxlPSdib3JkZXI6bm9uZTtwYWRkaW5nOi43NXB0IC43NXB0IC43NXB0IC43NXB0Jz4NCisgIDxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBjbGFzcz1zaG9ydHRleHQ+PG86cD4mbmJzcDs8L286cD48L3NwYW4+PC9wPg0KKyAgPC90ZD4NCisgIDx0ZCBzdHlsZT0nYm9yZGVyOm5vbmU7cGFkZGluZzouNzVwdCAuNzVwdCAuNzVwdCAuNzVwdCc+DQorICA8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gY2xhc3M9c2hvcnR0ZXh0PjY4PG86cD48L286cD48L3NwYW4+PC9wPg0KKyAgPC90ZD4NCisgIDx0ZCBzdHlsZT0nYm9yZGVyOm5vbmU7cGFkZGluZzouNzVwdCAuNzVwdCAuNzVwdCAuNzVwdCc+DQorICA8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gY2xhc3M9c2hvcnR0ZXh0Pk9ib2U8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorICA8L3RkPg0KKyA8L3RyPg0KKyA8dHIgc3R5bGU9J21zby15ZnRpLWlyb3c6NjknPg0KKyAgPHRkIHN0eWxlPSdib3JkZXI6bm9uZTtwYWRkaW5nOi43NXB0IC43NXB0IC43NXB0IC43NXB0Jz4NCisgIDxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBjbGFzcz1zaG9ydHRleHQ+PG86cD4mbmJzcDs8L286cD48L3NwYW4+PC9wPg0KKyAgPC90ZD4NCisgIDx0ZCBzdHlsZT0nYm9yZGVyOm5vbmU7cGFkZGluZzouNzVwdCAuNzVwdCAuNzVwdCAuNzVwdCc+DQorICA8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gY2xhc3M9c2hvcnR0ZXh0PjY5PG86cD48L286cD48L3NwYW4+PC9wPg0KKyAgPC90ZD4NCisgIDx0ZCBzdHlsZT0nYm9yZGVyOm5vbmU7cGFkZGluZzouNzVwdCAuNzVwdCAuNzVwdCAuNzVwdCc+DQorICA8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gY2xhc3M9c2hvcnR0ZXh0PkVuZ2xpc2ggSG9ybjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisgIDwvdGQ+DQorIDwvdHI+DQorIDx0ciBzdHlsZT0nbXNvLXlmdGktaXJvdzo3MCc+DQorICA8dGQgc3R5bGU9J2JvcmRlcjpub25lO3BhZGRpbmc6Ljc1cHQgLjc1cHQgLjc1cHQgLjc1cHQnPg0KKyAgPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIGNsYXNzPXNob3J0dGV4dD48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+DQorICA8L3RkPg0KKyAgPHRkIHN0eWxlPSdib3JkZXI6bm9uZTtwYWRkaW5nOi43NXB0IC43NXB0IC43NXB0IC43NXB0Jz4NCisgIDxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBjbGFzcz1zaG9ydHRleHQ+NzA8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorICA8L3RkPg0KKyAgPHRkIHN0eWxlPSdib3JkZXI6bm9uZTtwYWRkaW5nOi43NXB0IC43NXB0IC43NXB0IC43NXB0Jz4NCisgIDxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBjbGFzcz1zaG9ydHRleHQ+QmFzc29vbjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisgIDwvdGQ+DQorIDwvdHI+DQorIDx0ciBzdHlsZT0nbXNvLXlmdGktaXJvdzo3MSc+DQorICA8dGQgc3R5bGU9J2JvcmRlcjpub25lO3BhZGRpbmc6Ljc1cHQgLjc1cHQgLjc1cHQgLjc1cHQnPg0KKyAgPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIGNsYXNzPXNob3J0dGV4dD48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+DQorICA8L3RkPg0KKyAgPHRkIHN0eWxlPSdib3JkZXI6bm9uZTtwYWRkaW5nOi43NXB0IC43NXB0IC43NXB0IC43NXB0Jz4NCisgIDxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBjbGFzcz1zaG9ydHRleHQ+NzE8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorICA8L3RkPg0KKyAgPHRkIHN0eWxlPSdib3JkZXI6bm9uZTtwYWRkaW5nOi43NXB0IC43NXB0IC43NXB0IC43NXB0Jz4NCisgIDxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBjbGFzcz1zaG9ydHRleHQ+Q2xhcmluZXQ8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorICA8L3RkPg0KKyA8L3RyPg0KKyA8dHIgc3R5bGU9J21zby15ZnRpLWlyb3c6NzInPg0KKyAgPHRkIHN0eWxlPSdib3JkZXI6bm9uZTtwYWRkaW5nOi43NXB0IC43NXB0IC43NXB0IC43NXB0Jz4NCisgIDxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBjbGFzcz1zaG9ydHRleHQ+UGlwZTxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisgIDwvdGQ+DQorICA8dGQgc3R5bGU9J2JvcmRlcjpub25lO3BhZGRpbmc6Ljc1cHQgLjc1cHQgLjc1cHQgLjc1cHQnPg0KKyAgPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIGNsYXNzPXNob3J0dGV4dD43MjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisgIDwvdGQ+DQorICA8dGQgc3R5bGU9J2JvcmRlcjpub25lO3BhZGRpbmc6Ljc1cHQgLjc1cHQgLjc1cHQgLjc1cHQnPg0KKyAgPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIGNsYXNzPXNob3J0dGV4dD5QaWNjb2xvPG86cD48L286cD48L3NwYW4+PC9wPg0KKyAgPC90ZD4NCisgPC90cj4NCisgPHRyIHN0eWxlPSdtc28teWZ0aS1pcm93OjczJz4NCisgIDx0ZCBzdHlsZT0nYm9yZGVyOm5vbmU7cGFkZGluZzouNzVwdCAuNzVwdCAuNzVwdCAuNzVwdCc+DQorICA8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gY2xhc3M9c2hvcnR0ZXh0PjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisgIDwvdGQ+DQorICA8dGQgc3R5bGU9J2JvcmRlcjpub25lO3BhZGRpbmc6Ljc1cHQgLjc1cHQgLjc1cHQgLjc1cHQnPg0KKyAgPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIGNsYXNzPXNob3J0dGV4dD43MzxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisgIDwvdGQ+DQorICA8dGQgc3R5bGU9J2JvcmRlcjpub25lO3BhZGRpbmc6Ljc1cHQgLjc1cHQgLjc1cHQgLjc1cHQnPg0KKyAgPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIGNsYXNzPXNob3J0dGV4dD5GbHV0ZTxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisgIDwvdGQ+DQorIDwvdHI+DQorIDx0ciBzdHlsZT0nbXNvLXlmdGktaXJvdzo3NCc+DQorICA8dGQgc3R5bGU9J2JvcmRlcjpub25lO3BhZGRpbmc6Ljc1cHQgLjc1cHQgLjc1cHQgLjc1cHQnPg0KKyAgPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIGNsYXNzPXNob3J0dGV4dD48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+DQorICA8L3RkPg0KKyAgPHRkIHN0eWxlPSdib3JkZXI6bm9uZTtwYWRkaW5nOi43NXB0IC43NXB0IC43NXB0IC43NXB0Jz4NCisgIDxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBjbGFzcz1zaG9ydHRleHQ+NzQ8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorICA8L3RkPg0KKyAgPHRkIHN0eWxlPSdib3JkZXI6bm9uZTtwYWRkaW5nOi43NXB0IC43NXB0IC43NXB0IC43NXB0Jz4NCisgIDxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBjbGFzcz1zaG9ydHRleHQ+UmVjb3JkZXI8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorICA8L3RkPg0KKyA8L3RyPg0KKyA8dHIgc3R5bGU9J21zby15ZnRpLWlyb3c6NzUnPg0KKyAgPHRkIHN0eWxlPSdib3JkZXI6bm9uZTtwYWRkaW5nOi43NXB0IC43NXB0IC43NXB0IC43NXB0Jz4NCisgIDxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBjbGFzcz1zaG9ydHRleHQ+PG86cD4mbmJzcDs8L286cD48L3NwYW4+PC9wPg0KKyAgPC90ZD4NCisgIDx0ZCBzdHlsZT0nYm9yZGVyOm5vbmU7cGFkZGluZzouNzVwdCAuNzVwdCAuNzVwdCAuNzVwdCc+DQorICA8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gY2xhc3M9c2hvcnR0ZXh0Pjc1PG86cD48L286cD48L3NwYW4+PC9wPg0KKyAgPC90ZD4NCisgIDx0ZCBzdHlsZT0nYm9yZGVyOm5vbmU7cGFkZGluZzouNzVwdCAuNzVwdCAuNzVwdCAuNzVwdCc+DQorICA8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gY2xhc3M9c2hvcnR0ZXh0PlBhbiBGbHV0ZTxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisgIDwvdGQ+DQorIDwvdHI+DQorIDx0ciBzdHlsZT0nbXNvLXlmdGktaXJvdzo3Nic+DQorICA8dGQgc3R5bGU9J2JvcmRlcjpub25lO3BhZGRpbmc6Ljc1cHQgLjc1cHQgLjc1cHQgLjc1cHQnPg0KKyAgPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIGNsYXNzPXNob3J0dGV4dD48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+DQorICA8L3RkPg0KKyAgPHRkIHN0eWxlPSdib3JkZXI6bm9uZTtwYWRkaW5nOi43NXB0IC43NXB0IC43NXB0IC43NXB0Jz4NCisgIDxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBjbGFzcz1zaG9ydHRleHQ+NzY8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorICA8L3RkPg0KKyAgPHRkIHN0eWxlPSdib3JkZXI6bm9uZTtwYWRkaW5nOi43NXB0IC43NXB0IC43NXB0IC43NXB0Jz4NCisgIDxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBjbGFzcz1zaG9ydHRleHQ+Qmxvd24gQm90dGxlPG86cD48L286cD48L3NwYW4+PC9wPg0KKyAgPC90ZD4NCisgPC90cj4NCisgPHRyIHN0eWxlPSdtc28teWZ0aS1pcm93Ojc3Jz4NCisgIDx0ZCBzdHlsZT0nYm9yZGVyOm5vbmU7cGFkZGluZzouNzVwdCAuNzVwdCAuNzVwdCAuNzVwdCc+DQorICA8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gY2xhc3M9c2hvcnR0ZXh0PjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisgIDwvdGQ+DQorICA8dGQgc3R5bGU9J2JvcmRlcjpub25lO3BhZGRpbmc6Ljc1cHQgLjc1cHQgLjc1cHQgLjc1cHQnPg0KKyAgPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIGNsYXNzPXNob3J0dGV4dD43NzxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisgIDwvdGQ+DQorICA8dGQgc3R5bGU9J2JvcmRlcjpub25lO3BhZGRpbmc6Ljc1cHQgLjc1cHQgLjc1cHQgLjc1cHQnPg0KKyAgPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIGNsYXNzPXNob3J0dGV4dD5TaGFrdWhhY2hpPG86cD48L286cD48L3NwYW4+PC9wPg0KKyAgPC90ZD4NCisgPC90cj4NCisgPHRyIHN0eWxlPSdtc28teWZ0aS1pcm93Ojc4Jz4NCisgIDx0ZCBzdHlsZT0nYm9yZGVyOm5vbmU7cGFkZGluZzouNzVwdCAuNzVwdCAuNzVwdCAuNzVwdCc+DQorICA8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gY2xhc3M9c2hvcnR0ZXh0PjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisgIDwvdGQ+DQorICA8dGQgc3R5bGU9J2JvcmRlcjpub25lO3BhZGRpbmc6Ljc1cHQgLjc1cHQgLjc1cHQgLjc1cHQnPg0KKyAgPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIGNsYXNzPXNob3J0dGV4dD43ODxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisgIDwvdGQ+DQorICA8dGQgc3R5bGU9J2JvcmRlcjpub25lO3BhZGRpbmc6Ljc1cHQgLjc1cHQgLjc1cHQgLjc1cHQnPg0KKyAgPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIGNsYXNzPXNob3J0dGV4dD5XaGlzdGxlPG86cD48L286cD48L3NwYW4+PC9wPg0KKyAgPC90ZD4NCisgPC90cj4NCisgPHRyIHN0eWxlPSdtc28teWZ0aS1pcm93Ojc5Jz4NCisgIDx0ZCBzdHlsZT0nYm9yZGVyOm5vbmU7cGFkZGluZzouNzVwdCAuNzVwdCAuNzVwdCAuNzVwdCc+DQorICA8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gY2xhc3M9c2hvcnR0ZXh0PjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisgIDwvdGQ+DQorICA8dGQgc3R5bGU9J2JvcmRlcjpub25lO3BhZGRpbmc6Ljc1cHQgLjc1cHQgLjc1cHQgLjc1cHQnPg0KKyAgPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIGNsYXNzPXNob3J0dGV4dD43OTxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisgIDwvdGQ+DQorICA8dGQgc3R5bGU9J2JvcmRlcjpub25lO3BhZGRpbmc6Ljc1cHQgLjc1cHQgLjc1cHQgLjc1cHQnPg0KKyAgPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIGNsYXNzPXNob3J0dGV4dD5PY2FyaW5hPG86cD48L286cD48L3NwYW4+PC9wPg0KKyAgPC90ZD4NCisgPC90cj4NCisgPHRyIHN0eWxlPSdtc28teWZ0aS1pcm93OjgwJz4NCisgIDx0ZCBzdHlsZT0nYm9yZGVyOm5vbmU7cGFkZGluZzouNzVwdCAuNzVwdCAuNzVwdCAuNzVwdCc+DQorICA8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gY2xhc3M9c2hvcnR0ZXh0PlN5bnRoIExlYWQ8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorICA8L3RkPg0KKyAgPHRkIHN0eWxlPSdib3JkZXI6bm9uZTtwYWRkaW5nOi43NXB0IC43NXB0IC43NXB0IC43NXB0Jz4NCisgIDxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBjbGFzcz1zaG9ydHRleHQ+ODA8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorICA8L3RkPg0KKyAgPHRkIHN0eWxlPSdib3JkZXI6bm9uZTtwYWRkaW5nOi43NXB0IC43NXB0IC43NXB0IC43NXB0Jz4NCisgIDxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBjbGFzcz1zaG9ydHRleHQ+TGVhZCAxIChzcXVhcmUpPG86cD48L286cD48L3NwYW4+PC9wPg0KKyAgPC90ZD4NCisgPC90cj4NCisgPHRyIHN0eWxlPSdtc28teWZ0aS1pcm93OjgxJz4NCisgIDx0ZCBzdHlsZT0nYm9yZGVyOm5vbmU7cGFkZGluZzouNzVwdCAuNzVwdCAuNzVwdCAuNzVwdCc+DQorICA8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gY2xhc3M9c2hvcnR0ZXh0PjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisgIDwvdGQ+DQorICA8dGQgc3R5bGU9J2JvcmRlcjpub25lO3BhZGRpbmc6Ljc1cHQgLjc1cHQgLjc1cHQgLjc1cHQnPg0KKyAgPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIGNsYXNzPXNob3J0dGV4dD44MTxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisgIDwvdGQ+DQorICA8dGQgc3R5bGU9J2JvcmRlcjpub25lO3BhZGRpbmc6Ljc1cHQgLjc1cHQgLjc1cHQgLjc1cHQnPg0KKyAgPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIGNsYXNzPXNob3J0dGV4dD5MZWFkIDIgKHNhd3Rvb3RoKTxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisgIDwvdGQ+DQorIDwvdHI+DQorIDx0ciBzdHlsZT0nbXNvLXlmdGktaXJvdzo4Mic+DQorICA8dGQgc3R5bGU9J2JvcmRlcjpub25lO3BhZGRpbmc6Ljc1cHQgLjc1cHQgLjc1cHQgLjc1cHQnPg0KKyAgPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIGNsYXNzPXNob3J0dGV4dD48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+DQorICA8L3RkPg0KKyAgPHRkIHN0eWxlPSdib3JkZXI6bm9uZTtwYWRkaW5nOi43NXB0IC43NXB0IC43NXB0IC43NXB0Jz4NCisgIDxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBjbGFzcz1zaG9ydHRleHQ+ODI8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorICA8L3RkPg0KKyAgPHRkIHN0eWxlPSdib3JkZXI6bm9uZTtwYWRkaW5nOi43NXB0IC43NXB0IC43NXB0IC43NXB0Jz4NCisgIDxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBjbGFzcz1zaG9ydHRleHQ+TGVhZCAzIChjYWxsaW9wZSk8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorICA8L3RkPg0KKyA8L3RyPg0KKyA8dHIgc3R5bGU9J21zby15ZnRpLWlyb3c6ODMnPg0KKyAgPHRkIHN0eWxlPSdib3JkZXI6bm9uZTtwYWRkaW5nOi43NXB0IC43NXB0IC43NXB0IC43NXB0Jz4NCisgIDxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBjbGFzcz1zaG9ydHRleHQ+PG86cD4mbmJzcDs8L286cD48L3NwYW4+PC9wPg0KKyAgPC90ZD4NCisgIDx0ZCBzdHlsZT0nYm9yZGVyOm5vbmU7cGFkZGluZzouNzVwdCAuNzVwdCAuNzVwdCAuNzVwdCc+DQorICA8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gY2xhc3M9c2hvcnR0ZXh0PjgzPG86cD48L286cD48L3NwYW4+PC9wPg0KKyAgPC90ZD4NCisgIDx0ZCBzdHlsZT0nYm9yZGVyOm5vbmU7cGFkZGluZzouNzVwdCAuNzVwdCAuNzVwdCAuNzVwdCc+DQorICA8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gY2xhc3M9c2hvcnR0ZXh0PkxlYWQgNCAoY2hpZmYpPG86cD48L286cD48L3NwYW4+PC9wPg0KKyAgPC90ZD4NCisgPC90cj4NCisgPHRyIHN0eWxlPSdtc28teWZ0aS1pcm93Ojg0Jz4NCisgIDx0ZCBzdHlsZT0nYm9yZGVyOm5vbmU7cGFkZGluZzouNzVwdCAuNzVwdCAuNzVwdCAuNzVwdCc+DQorICA8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gY2xhc3M9c2hvcnR0ZXh0PjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisgIDwvdGQ+DQorICA8dGQgc3R5bGU9J2JvcmRlcjpub25lO3BhZGRpbmc6Ljc1cHQgLjc1cHQgLjc1cHQgLjc1cHQnPg0KKyAgPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIGNsYXNzPXNob3J0dGV4dD44NDxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisgIDwvdGQ+DQorICA8dGQgc3R5bGU9J2JvcmRlcjpub25lO3BhZGRpbmc6Ljc1cHQgLjc1cHQgLjc1cHQgLjc1cHQnPg0KKyAgPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIGNsYXNzPXNob3J0dGV4dD5MZWFkIDUgKGNoYXJhbmcpPG86cD48L286cD48L3NwYW4+PC9wPg0KKyAgPC90ZD4NCisgPC90cj4NCisgPHRyIHN0eWxlPSdtc28teWZ0aS1pcm93Ojg1Jz4NCisgIDx0ZCBzdHlsZT0nYm9yZGVyOm5vbmU7cGFkZGluZzouNzVwdCAuNzVwdCAuNzVwdCAuNzVwdCc+DQorICA8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gY2xhc3M9c2hvcnR0ZXh0PjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisgIDwvdGQ+DQorICA8dGQgc3R5bGU9J2JvcmRlcjpub25lO3BhZGRpbmc6Ljc1cHQgLjc1cHQgLjc1cHQgLjc1cHQnPg0KKyAgPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIGNsYXNzPXNob3J0dGV4dD44NTxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisgIDwvdGQ+DQorICA8dGQgc3R5bGU9J2JvcmRlcjpub25lO3BhZGRpbmc6Ljc1cHQgLjc1cHQgLjc1cHQgLjc1cHQnPg0KKyAgPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIGNsYXNzPXNob3J0dGV4dD5MZWFkIDYgKHZvaWNlKTxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisgIDwvdGQ+DQorIDwvdHI+DQorIDx0ciBzdHlsZT0nbXNvLXlmdGktaXJvdzo4Nic+DQorICA8dGQgc3R5bGU9J2JvcmRlcjpub25lO3BhZGRpbmc6Ljc1cHQgLjc1cHQgLjc1cHQgLjc1cHQnPg0KKyAgPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIGNsYXNzPXNob3J0dGV4dD48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+DQorICA8L3RkPg0KKyAgPHRkIHN0eWxlPSdib3JkZXI6bm9uZTtwYWRkaW5nOi43NXB0IC43NXB0IC43NXB0IC43NXB0Jz4NCisgIDxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBjbGFzcz1zaG9ydHRleHQ+ODY8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorICA8L3RkPg0KKyAgPHRkIHN0eWxlPSdib3JkZXI6bm9uZTtwYWRkaW5nOi43NXB0IC43NXB0IC43NXB0IC43NXB0Jz4NCisgIDxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBjbGFzcz1zaG9ydHRleHQ+TGVhZCA3IChmaWZ0aHMpPG86cD48L286cD48L3NwYW4+PC9wPg0KKyAgPC90ZD4NCisgPC90cj4NCisgPHRyIHN0eWxlPSdtc28teWZ0aS1pcm93Ojg3Jz4NCisgIDx0ZCBzdHlsZT0nYm9yZGVyOm5vbmU7cGFkZGluZzouNzVwdCAuNzVwdCAuNzVwdCAuNzVwdCc+DQorICA8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gY2xhc3M9c2hvcnR0ZXh0PjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisgIDwvdGQ+DQorICA8dGQgc3R5bGU9J2JvcmRlcjpub25lO3BhZGRpbmc6Ljc1cHQgLjc1cHQgLjc1cHQgLjc1cHQnPg0KKyAgPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIGNsYXNzPXNob3J0dGV4dD44NzxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisgIDwvdGQ+DQorICA8dGQgc3R5bGU9J2JvcmRlcjpub25lO3BhZGRpbmc6Ljc1cHQgLjc1cHQgLjc1cHQgLjc1cHQnPg0KKyAgPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIGNsYXNzPXNob3J0dGV4dD5MZWFkIDggKGJhc3MgKyBsZWFkKTxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisgIDwvdGQ+DQorIDwvdHI+DQorIDx0ciBzdHlsZT0nbXNvLXlmdGktaXJvdzo4OCc+DQorICA8dGQgc3R5bGU9J2JvcmRlcjpub25lO3BhZGRpbmc6Ljc1cHQgLjc1cHQgLjc1cHQgLjc1cHQnPg0KKyAgPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIGNsYXNzPXNob3J0dGV4dD5TeW50aCBQYWQ8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorICA8L3RkPg0KKyAgPHRkIHN0eWxlPSdib3JkZXI6bm9uZTtwYWRkaW5nOi43NXB0IC43NXB0IC43NXB0IC43NXB0Jz4NCisgIDxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBjbGFzcz1zaG9ydHRleHQ+ODg8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorICA8L3RkPg0KKyAgPHRkIHN0eWxlPSdib3JkZXI6bm9uZTtwYWRkaW5nOi43NXB0IC43NXB0IC43NXB0IC43NXB0Jz4NCisgIDxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBjbGFzcz1zaG9ydHRleHQ+UGFkIDEgKG5ldyBhZ2UpPG86cD48L286cD48L3NwYW4+PC9wPg0KKyAgPC90ZD4NCisgPC90cj4NCisgPHRyIHN0eWxlPSdtc28teWZ0aS1pcm93Ojg5Jz4NCisgIDx0ZCBzdHlsZT0nYm9yZGVyOm5vbmU7cGFkZGluZzouNzVwdCAuNzVwdCAuNzVwdCAuNzVwdCc+DQorICA8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gY2xhc3M9c2hvcnR0ZXh0PjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisgIDwvdGQ+DQorICA8dGQgc3R5bGU9J2JvcmRlcjpub25lO3BhZGRpbmc6Ljc1cHQgLjc1cHQgLjc1cHQgLjc1cHQnPg0KKyAgPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIGNsYXNzPXNob3J0dGV4dD44OTxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisgIDwvdGQ+DQorICA8dGQgc3R5bGU9J2JvcmRlcjpub25lO3BhZGRpbmc6Ljc1cHQgLjc1cHQgLjc1cHQgLjc1cHQnPg0KKyAgPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIGNsYXNzPXNob3J0dGV4dD5QYWQgMiAod2FybSk8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorICA8L3RkPg0KKyA8L3RyPg0KKyA8dHIgc3R5bGU9J21zby15ZnRpLWlyb3c6OTAnPg0KKyAgPHRkIHN0eWxlPSdib3JkZXI6bm9uZTtwYWRkaW5nOi43NXB0IC43NXB0IC43NXB0IC43NXB0Jz4NCisgIDxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBjbGFzcz1zaG9ydHRleHQ+PG86cD4mbmJzcDs8L286cD48L3NwYW4+PC9wPg0KKyAgPC90ZD4NCisgIDx0ZCBzdHlsZT0nYm9yZGVyOm5vbmU7cGFkZGluZzouNzVwdCAuNzVwdCAuNzVwdCAuNzVwdCc+DQorICA8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gY2xhc3M9c2hvcnR0ZXh0PjkwPG86cD48L286cD48L3NwYW4+PC9wPg0KKyAgPC90ZD4NCisgIDx0ZCBzdHlsZT0nYm9yZGVyOm5vbmU7cGFkZGluZzouNzVwdCAuNzVwdCAuNzVwdCAuNzVwdCc+DQorICA8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gY2xhc3M9c2hvcnR0ZXh0PlBhZCAzIChwb2x5c3ludGgpPG86cD48L286cD48L3NwYW4+PC9wPg0KKyAgPC90ZD4NCisgPC90cj4NCisgPHRyIHN0eWxlPSdtc28teWZ0aS1pcm93OjkxJz4NCisgIDx0ZCBzdHlsZT0nYm9yZGVyOm5vbmU7cGFkZGluZzouNzVwdCAuNzVwdCAuNzVwdCAuNzVwdCc+DQorICA8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gY2xhc3M9c2hvcnR0ZXh0PjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisgIDwvdGQ+DQorICA8dGQgc3R5bGU9J2JvcmRlcjpub25lO3BhZGRpbmc6Ljc1cHQgLjc1cHQgLjc1cHQgLjc1cHQnPg0KKyAgPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIGNsYXNzPXNob3J0dGV4dD45MTxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisgIDwvdGQ+DQorICA8dGQgc3R5bGU9J2JvcmRlcjpub25lO3BhZGRpbmc6Ljc1cHQgLjc1cHQgLjc1cHQgLjc1cHQnPg0KKyAgPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIGNsYXNzPXNob3J0dGV4dD5QYWQgNCAoY2hvaXIpPG86cD48L286cD48L3NwYW4+PC9wPg0KKyAgPC90ZD4NCisgPC90cj4NCisgPHRyIHN0eWxlPSdtc28teWZ0aS1pcm93OjkyJz4NCisgIDx0ZCBzdHlsZT0nYm9yZGVyOm5vbmU7cGFkZGluZzouNzVwdCAuNzVwdCAuNzVwdCAuNzVwdCc+DQorICA8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gY2xhc3M9c2hvcnR0ZXh0PjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisgIDwvdGQ+DQorICA8dGQgc3R5bGU9J2JvcmRlcjpub25lO3BhZGRpbmc6Ljc1cHQgLjc1cHQgLjc1cHQgLjc1cHQnPg0KKyAgPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIGNsYXNzPXNob3J0dGV4dD45MjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisgIDwvdGQ+DQorICA8dGQgc3R5bGU9J2JvcmRlcjpub25lO3BhZGRpbmc6Ljc1cHQgLjc1cHQgLjc1cHQgLjc1cHQnPg0KKyAgPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIGNsYXNzPXNob3J0dGV4dD5QYWQgNSAoYm93ZWQpPG86cD48L286cD48L3NwYW4+PC9wPg0KKyAgPC90ZD4NCisgPC90cj4NCisgPHRyIHN0eWxlPSdtc28teWZ0aS1pcm93OjkzJz4NCisgIDx0ZCBzdHlsZT0nYm9yZGVyOm5vbmU7cGFkZGluZzouNzVwdCAuNzVwdCAuNzVwdCAuNzVwdCc+DQorICA8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gY2xhc3M9c2hvcnR0ZXh0PjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisgIDwvdGQ+DQorICA8dGQgc3R5bGU9J2JvcmRlcjpub25lO3BhZGRpbmc6Ljc1cHQgLjc1cHQgLjc1cHQgLjc1cHQnPg0KKyAgPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIGNsYXNzPXNob3J0dGV4dD45MzxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisgIDwvdGQ+DQorICA8dGQgc3R5bGU9J2JvcmRlcjpub25lO3BhZGRpbmc6Ljc1cHQgLjc1cHQgLjc1cHQgLjc1cHQnPg0KKyAgPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIGNsYXNzPXNob3J0dGV4dD5QYWQgNiAobWV0YWxsaWMpPG86cD48L286cD48L3NwYW4+PC9wPg0KKyAgPC90ZD4NCisgPC90cj4NCisgPHRyIHN0eWxlPSdtc28teWZ0aS1pcm93Ojk0Jz4NCisgIDx0ZCBzdHlsZT0nYm9yZGVyOm5vbmU7cGFkZGluZzouNzVwdCAuNzVwdCAuNzVwdCAuNzVwdCc+DQorICA8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gY2xhc3M9c2hvcnR0ZXh0PjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisgIDwvdGQ+DQorICA8dGQgc3R5bGU9J2JvcmRlcjpub25lO3BhZGRpbmc6Ljc1cHQgLjc1cHQgLjc1cHQgLjc1cHQnPg0KKyAgPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIGNsYXNzPXNob3J0dGV4dD45NDxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisgIDwvdGQ+DQorICA8dGQgc3R5bGU9J2JvcmRlcjpub25lO3BhZGRpbmc6Ljc1cHQgLjc1cHQgLjc1cHQgLjc1cHQnPg0KKyAgPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIGNsYXNzPXNob3J0dGV4dD5QYWQgNyAoaGFsbyk8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorICA8L3RkPg0KKyA8L3RyPg0KKyA8dHIgc3R5bGU9J21zby15ZnRpLWlyb3c6OTUnPg0KKyAgPHRkIHN0eWxlPSdib3JkZXI6bm9uZTtwYWRkaW5nOi43NXB0IC43NXB0IC43NXB0IC43NXB0Jz4NCisgIDxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBjbGFzcz1zaG9ydHRleHQ+PG86cD4mbmJzcDs8L286cD48L3NwYW4+PC9wPg0KKyAgPC90ZD4NCisgIDx0ZCBzdHlsZT0nYm9yZGVyOm5vbmU7cGFkZGluZzouNzVwdCAuNzVwdCAuNzVwdCAuNzVwdCc+DQorICA8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gY2xhc3M9c2hvcnR0ZXh0Pjk1PG86cD48L286cD48L3NwYW4+PC9wPg0KKyAgPC90ZD4NCisgIDx0ZCBzdHlsZT0nYm9yZGVyOm5vbmU7cGFkZGluZzouNzVwdCAuNzVwdCAuNzVwdCAuNzVwdCc+DQorICA8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gY2xhc3M9c2hvcnR0ZXh0PlBhZCA4IChzd2VlcCk8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorICA8L3RkPg0KKyA8L3RyPg0KKyA8dHIgc3R5bGU9J21zby15ZnRpLWlyb3c6OTYnPg0KKyAgPHRkIHN0eWxlPSdib3JkZXI6bm9uZTtwYWRkaW5nOi43NXB0IC43NXB0IC43NXB0IC43NXB0Jz4NCisgIDxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBjbGFzcz1zaG9ydHRleHQ+U3ludGggRk08bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorICA8L3RkPg0KKyAgPHRkIHN0eWxlPSdib3JkZXI6bm9uZTtwYWRkaW5nOi43NXB0IC43NXB0IC43NXB0IC43NXB0Jz4NCisgIDxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBjbGFzcz1zaG9ydHRleHQ+OTY8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorICA8L3RkPg0KKyAgPHRkIHN0eWxlPSdib3JkZXI6bm9uZTtwYWRkaW5nOi43NXB0IC43NXB0IC43NXB0IC43NXB0Jz4NCisgIDxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBjbGFzcz1zaG9ydHRleHQ+RlggMSAocmFpbik8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorICA8L3RkPg0KKyA8L3RyPg0KKyA8dHIgc3R5bGU9J21zby15ZnRpLWlyb3c6OTcnPg0KKyAgPHRkIHN0eWxlPSdib3JkZXI6bm9uZTtwYWRkaW5nOi43NXB0IC43NXB0IC43NXB0IC43NXB0Jz4NCisgIDxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBjbGFzcz1zaG9ydHRleHQ+PG86cD4mbmJzcDs8L286cD48L3NwYW4+PC9wPg0KKyAgPC90ZD4NCisgIDx0ZCBzdHlsZT0nYm9yZGVyOm5vbmU7cGFkZGluZzouNzVwdCAuNzVwdCAuNzVwdCAuNzVwdCc+DQorICA8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gY2xhc3M9c2hvcnR0ZXh0Pjk3PG86cD48L286cD48L3NwYW4+PC9wPg0KKyAgPC90ZD4NCisgIDx0ZCBzdHlsZT0nYm9yZGVyOm5vbmU7cGFkZGluZzouNzVwdCAuNzVwdCAuNzVwdCAuNzVwdCc+DQorICA8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gY2xhc3M9c2hvcnR0ZXh0PkZYIDIgKHNvdW5kdHJhY2spPG86cD48L286cD48L3NwYW4+PC9wPg0KKyAgPC90ZD4NCisgPC90cj4NCisgPHRyIHN0eWxlPSdtc28teWZ0aS1pcm93Ojk4Jz4NCisgIDx0ZCBzdHlsZT0nYm9yZGVyOm5vbmU7cGFkZGluZzouNzVwdCAuNzVwdCAuNzVwdCAuNzVwdCc+DQorICA8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gY2xhc3M9c2hvcnR0ZXh0PjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisgIDwvdGQ+DQorICA8dGQgc3R5bGU9J2JvcmRlcjpub25lO3BhZGRpbmc6Ljc1cHQgLjc1cHQgLjc1cHQgLjc1cHQnPg0KKyAgPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIGNsYXNzPXNob3J0dGV4dD45ODxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisgIDwvdGQ+DQorICA8dGQgc3R5bGU9J2JvcmRlcjpub25lO3BhZGRpbmc6Ljc1cHQgLjc1cHQgLjc1cHQgLjc1cHQnPg0KKyAgPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIGNsYXNzPXNob3J0dGV4dD5GWCAzIChjcnlzdGFsKTxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisgIDwvdGQ+DQorIDwvdHI+DQorIDx0ciBzdHlsZT0nbXNvLXlmdGktaXJvdzo5OSc+DQorICA8dGQgc3R5bGU9J2JvcmRlcjpub25lO3BhZGRpbmc6Ljc1cHQgLjc1cHQgLjc1cHQgLjc1cHQnPg0KKyAgPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIGNsYXNzPXNob3J0dGV4dD48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+DQorICA8L3RkPg0KKyAgPHRkIHN0eWxlPSdib3JkZXI6bm9uZTtwYWRkaW5nOi43NXB0IC43NXB0IC43NXB0IC43NXB0Jz4NCisgIDxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBjbGFzcz1zaG9ydHRleHQ+OTk8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorICA8L3RkPg0KKyAgPHRkIHN0eWxlPSdib3JkZXI6bm9uZTtwYWRkaW5nOi43NXB0IC43NXB0IC43NXB0IC43NXB0Jz4NCisgIDxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBjbGFzcz1zaG9ydHRleHQ+RlggNCAoYXRtb3NwaGVyZSk8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorICA8L3RkPg0KKyA8L3RyPg0KKyA8dHIgc3R5bGU9J21zby15ZnRpLWlyb3c6MTAwJz4NCisgIDx0ZCBzdHlsZT0nYm9yZGVyOm5vbmU7cGFkZGluZzouNzVwdCAuNzVwdCAuNzVwdCAuNzVwdCc+DQorICA8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gY2xhc3M9c2hvcnR0ZXh0PjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisgIDwvdGQ+DQorICA8dGQgc3R5bGU9J2JvcmRlcjpub25lO3BhZGRpbmc6Ljc1cHQgLjc1cHQgLjc1cHQgLjc1cHQnPg0KKyAgPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIGNsYXNzPXNob3J0dGV4dD4xMDA8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorICA8L3RkPg0KKyAgPHRkIHN0eWxlPSdib3JkZXI6bm9uZTtwYWRkaW5nOi43NXB0IC43NXB0IC43NXB0IC43NXB0Jz4NCisgIDxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBjbGFzcz1zaG9ydHRleHQ+RlggNSAoYnJpZ2h0bmVzcyk8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorICA8L3RkPg0KKyA8L3RyPg0KKyA8dHIgc3R5bGU9J21zby15ZnRpLWlyb3c6MTAxJz4NCisgIDx0ZCBzdHlsZT0nYm9yZGVyOm5vbmU7cGFkZGluZzouNzVwdCAuNzVwdCAuNzVwdCAuNzVwdCc+DQorICA8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gY2xhc3M9c2hvcnR0ZXh0PjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisgIDwvdGQ+DQorICA8dGQgc3R5bGU9J2JvcmRlcjpub25lO3BhZGRpbmc6Ljc1cHQgLjc1cHQgLjc1cHQgLjc1cHQnPg0KKyAgPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIGNsYXNzPXNob3J0dGV4dD4xMDE8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorICA8L3RkPg0KKyAgPHRkIHN0eWxlPSdib3JkZXI6bm9uZTtwYWRkaW5nOi43NXB0IC43NXB0IC43NXB0IC43NXB0Jz4NCisgIDxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBjbGFzcz1zaG9ydHRleHQ+RlggNiAoZ29ibGlucyk8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorICA8L3RkPg0KKyA8L3RyPg0KKyA8dHIgc3R5bGU9J21zby15ZnRpLWlyb3c6MTAyJz4NCisgIDx0ZCBzdHlsZT0nYm9yZGVyOm5vbmU7cGFkZGluZzouNzVwdCAuNzVwdCAuNzVwdCAuNzVwdCc+DQorICA8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gY2xhc3M9c2hvcnR0ZXh0PjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisgIDwvdGQ+DQorICA8dGQgc3R5bGU9J2JvcmRlcjpub25lO3BhZGRpbmc6Ljc1cHQgLjc1cHQgLjc1cHQgLjc1cHQnPg0KKyAgPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIGNsYXNzPXNob3J0dGV4dD4xMDI8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorICA8L3RkPg0KKyAgPHRkIHN0eWxlPSdib3JkZXI6bm9uZTtwYWRkaW5nOi43NXB0IC43NXB0IC43NXB0IC43NXB0Jz4NCisgIDxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBjbGFzcz1zaG9ydHRleHQ+RlggNyAoZWNob2VzKTxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisgIDwvdGQ+DQorIDwvdHI+DQorIDx0ciBzdHlsZT0nbXNvLXlmdGktaXJvdzoxMDMnPg0KKyAgPHRkIHN0eWxlPSdib3JkZXI6bm9uZTtwYWRkaW5nOi43NXB0IC43NXB0IC43NXB0IC43NXB0Jz4NCisgIDxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBjbGFzcz1zaG9ydHRleHQ+PG86cD4mbmJzcDs8L286cD48L3NwYW4+PC9wPg0KKyAgPC90ZD4NCisgIDx0ZCBzdHlsZT0nYm9yZGVyOm5vbmU7cGFkZGluZzouNzVwdCAuNzVwdCAuNzVwdCAuNzVwdCc+DQorICA8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gY2xhc3M9c2hvcnR0ZXh0PjEwMzxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisgIDwvdGQ+DQorICA8dGQgc3R5bGU9J2JvcmRlcjpub25lO3BhZGRpbmc6Ljc1cHQgLjc1cHQgLjc1cHQgLjc1cHQnPg0KKyAgPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIGNsYXNzPXNob3J0dGV4dD5GWCA4IChzY2llbmNlLWZpY3Rpb24pPG86cD48L286cD48L3NwYW4+PC9wPg0KKyAgPC90ZD4NCisgPC90cj4NCisgPHRyIHN0eWxlPSdtc28teWZ0aS1pcm93OjEwNCc+DQorICA8dGQgc3R5bGU9J2JvcmRlcjpub25lO3BhZGRpbmc6Ljc1cHQgLjc1cHQgLjc1cHQgLjc1cHQnPg0KKyAgPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIGNsYXNzPXNob3J0dGV4dD5FdGhuaWM8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorICA8L3RkPg0KKyAgPHRkIHN0eWxlPSdib3JkZXI6bm9uZTtwYWRkaW5nOi43NXB0IC43NXB0IC43NXB0IC43NXB0Jz4NCisgIDxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBjbGFzcz1zaG9ydHRleHQ+MTA0PG86cD48L286cD48L3NwYW4+PC9wPg0KKyAgPC90ZD4NCisgIDx0ZCBzdHlsZT0nYm9yZGVyOm5vbmU7cGFkZGluZzouNzVwdCAuNzVwdCAuNzVwdCAuNzVwdCc+DQorICA8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gY2xhc3M9c2hvcnR0ZXh0PlNpdGFyPG86cD48L286cD48L3NwYW4+PC9wPg0KKyAgPC90ZD4NCisgPC90cj4NCisgPHRyIHN0eWxlPSdtc28teWZ0aS1pcm93OjEwNSc+DQorICA8dGQgc3R5bGU9J2JvcmRlcjpub25lO3BhZGRpbmc6Ljc1cHQgLjc1cHQgLjc1cHQgLjc1cHQnPg0KKyAgPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIGNsYXNzPXNob3J0dGV4dD48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+DQorICA8L3RkPg0KKyAgPHRkIHN0eWxlPSdib3JkZXI6bm9uZTtwYWRkaW5nOi43NXB0IC43NXB0IC43NXB0IC43NXB0Jz4NCisgIDxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBjbGFzcz1zaG9ydHRleHQ+MTA1PG86cD48L286cD48L3NwYW4+PC9wPg0KKyAgPC90ZD4NCisgIDx0ZCBzdHlsZT0nYm9yZGVyOm5vbmU7cGFkZGluZzouNzVwdCAuNzVwdCAuNzVwdCAuNzVwdCc+DQorICA8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gY2xhc3M9c2hvcnR0ZXh0PkJhbmpvPG86cD48L286cD48L3NwYW4+PC9wPg0KKyAgPC90ZD4NCisgPC90cj4NCisgPHRyIHN0eWxlPSdtc28teWZ0aS1pcm93OjEwNic+DQorICA8dGQgc3R5bGU9J2JvcmRlcjpub25lO3BhZGRpbmc6Ljc1cHQgLjc1cHQgLjc1cHQgLjc1cHQnPg0KKyAgPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIGNsYXNzPXNob3J0dGV4dD48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+DQorICA8L3RkPg0KKyAgPHRkIHN0eWxlPSdib3JkZXI6bm9uZTtwYWRkaW5nOi43NXB0IC43NXB0IC43NXB0IC43NXB0Jz4NCisgIDxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBjbGFzcz1zaG9ydHRleHQ+MTA2PG86cD48L286cD48L3NwYW4+PC9wPg0KKyAgPC90ZD4NCisgIDx0ZCBzdHlsZT0nYm9yZGVyOm5vbmU7cGFkZGluZzouNzVwdCAuNzVwdCAuNzVwdCAuNzVwdCc+DQorICA8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gY2xhc3M9c2hvcnR0ZXh0PlNoYW1pc2VuPG86cD48L286cD48L3NwYW4+PC9wPg0KKyAgPC90ZD4NCisgPC90cj4NCisgPHRyIHN0eWxlPSdtc28teWZ0aS1pcm93OjEwNyc+DQorICA8dGQgc3R5bGU9J2JvcmRlcjpub25lO3BhZGRpbmc6Ljc1cHQgLjc1cHQgLjc1cHQgLjc1cHQnPg0KKyAgPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIGNsYXNzPXNob3J0dGV4dD48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+DQorICA8L3RkPg0KKyAgPHRkIHN0eWxlPSdib3JkZXI6bm9uZTtwYWRkaW5nOi43NXB0IC43NXB0IC43NXB0IC43NXB0Jz4NCisgIDxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBjbGFzcz1zaG9ydHRleHQ+MTA3PG86cD48L286cD48L3NwYW4+PC9wPg0KKyAgPC90ZD4NCisgIDx0ZCBzdHlsZT0nYm9yZGVyOm5vbmU7cGFkZGluZzouNzVwdCAuNzVwdCAuNzVwdCAuNzVwdCc+DQorICA8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gY2xhc3M9c2hvcnR0ZXh0PktvdG88bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorICA8L3RkPg0KKyA8L3RyPg0KKyA8dHIgc3R5bGU9J21zby15ZnRpLWlyb3c6MTA4Jz4NCisgIDx0ZCBzdHlsZT0nYm9yZGVyOm5vbmU7cGFkZGluZzouNzVwdCAuNzVwdCAuNzVwdCAuNzVwdCc+DQorICA8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gY2xhc3M9c2hvcnR0ZXh0PjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisgIDwvdGQ+DQorICA8dGQgc3R5bGU9J2JvcmRlcjpub25lO3BhZGRpbmc6Ljc1cHQgLjc1cHQgLjc1cHQgLjc1cHQnPg0KKyAgPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIGNsYXNzPXNob3J0dGV4dD4xMDg8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorICA8L3RkPg0KKyAgPHRkIHN0eWxlPSdib3JkZXI6bm9uZTtwYWRkaW5nOi43NXB0IC43NXB0IC43NXB0IC43NXB0Jz4NCisgIDxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBjbGFzcz1zaG9ydHRleHQ+S2FsaW1iYTxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisgIDwvdGQ+DQorIDwvdHI+DQorIDx0ciBzdHlsZT0nbXNvLXlmdGktaXJvdzoxMDknPg0KKyAgPHRkIHN0eWxlPSdib3JkZXI6bm9uZTtwYWRkaW5nOi43NXB0IC43NXB0IC43NXB0IC43NXB0Jz4NCisgIDxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBjbGFzcz1zaG9ydHRleHQ+PG86cD4mbmJzcDs8L286cD48L3NwYW4+PC9wPg0KKyAgPC90ZD4NCisgIDx0ZCBzdHlsZT0nYm9yZGVyOm5vbmU7cGFkZGluZzouNzVwdCAuNzVwdCAuNzVwdCAuNzVwdCc+DQorICA8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gY2xhc3M9c2hvcnR0ZXh0PjEwOTxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisgIDwvdGQ+DQorICA8dGQgc3R5bGU9J2JvcmRlcjpub25lO3BhZGRpbmc6Ljc1cHQgLjc1cHQgLjc1cHQgLjc1cHQnPg0KKyAgPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIGNsYXNzPXNob3J0dGV4dD5CYWcgUGlwZTxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisgIDwvdGQ+DQorIDwvdHI+DQorIDx0ciBzdHlsZT0nbXNvLXlmdGktaXJvdzoxMTAnPg0KKyAgPHRkIHN0eWxlPSdib3JkZXI6bm9uZTtwYWRkaW5nOi43NXB0IC43NXB0IC43NXB0IC43NXB0Jz4NCisgIDxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBjbGFzcz1zaG9ydHRleHQ+PG86cD4mbmJzcDs8L286cD48L3NwYW4+PC9wPg0KKyAgPC90ZD4NCisgIDx0ZCBzdHlsZT0nYm9yZGVyOm5vbmU7cGFkZGluZzouNzVwdCAuNzVwdCAuNzVwdCAuNzVwdCc+DQorICA8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gY2xhc3M9c2hvcnR0ZXh0PjExMDxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisgIDwvdGQ+DQorICA8dGQgc3R5bGU9J2JvcmRlcjpub25lO3BhZGRpbmc6Ljc1cHQgLjc1cHQgLjc1cHQgLjc1cHQnPg0KKyAgPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIGNsYXNzPXNob3J0dGV4dD5GaWRkbGU8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorICA8L3RkPg0KKyA8L3RyPg0KKyA8dHIgc3R5bGU9J21zby15ZnRpLWlyb3c6MTExJz4NCisgIDx0ZCBzdHlsZT0nYm9yZGVyOm5vbmU7cGFkZGluZzouNzVwdCAuNzVwdCAuNzVwdCAuNzVwdCc+DQorICA8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gY2xhc3M9c2hvcnR0ZXh0PjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisgIDwvdGQ+DQorICA8dGQgc3R5bGU9J2JvcmRlcjpub25lO3BhZGRpbmc6Ljc1cHQgLjc1cHQgLjc1cHQgLjc1cHQnPg0KKyAgPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIGNsYXNzPXNob3J0dGV4dD4xMTE8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorICA8L3RkPg0KKyAgPHRkIHN0eWxlPSdib3JkZXI6bm9uZTtwYWRkaW5nOi43NXB0IC43NXB0IC43NXB0IC43NXB0Jz4NCisgIDxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBjbGFzcz1zaG9ydHRleHQ+U2hhbmFpPG86cD48L286cD48L3NwYW4+PC9wPg0KKyAgPC90ZD4NCisgPC90cj4NCisgPHRyIHN0eWxlPSdtc28teWZ0aS1pcm93OjExMic+DQorICA8dGQgc3R5bGU9J2JvcmRlcjpub25lO3BhZGRpbmc6Ljc1cHQgLjc1cHQgLjc1cHQgLjc1cHQnPg0KKyAgPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIGNsYXNzPXNob3J0dGV4dD5QZXJjdXNzaXZlPG86cD48L286cD48L3NwYW4+PC9wPg0KKyAgPC90ZD4NCisgIDx0ZCBzdHlsZT0nYm9yZGVyOm5vbmU7cGFkZGluZzouNzVwdCAuNzVwdCAuNzVwdCAuNzVwdCc+DQorICA8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gY2xhc3M9c2hvcnR0ZXh0PjExMjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisgIDwvdGQ+DQorICA8dGQgc3R5bGU9J2JvcmRlcjpub25lO3BhZGRpbmc6Ljc1cHQgLjc1cHQgLjc1cHQgLjc1cHQnPg0KKyAgPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIGNsYXNzPXNob3J0dGV4dD5UaW5rbGUgQmVsbDxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisgIDwvdGQ+DQorIDwvdHI+DQorIDx0ciBzdHlsZT0nbXNvLXlmdGktaXJvdzoxMTMnPg0KKyAgPHRkIHN0eWxlPSdib3JkZXI6bm9uZTtwYWRkaW5nOi43NXB0IC43NXB0IC43NXB0IC43NXB0Jz4NCisgIDxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBjbGFzcz1zaG9ydHRleHQ+PG86cD4mbmJzcDs8L286cD48L3NwYW4+PC9wPg0KKyAgPC90ZD4NCisgIDx0ZCBzdHlsZT0nYm9yZGVyOm5vbmU7cGFkZGluZzouNzVwdCAuNzVwdCAuNzVwdCAuNzVwdCc+DQorICA8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gY2xhc3M9c2hvcnR0ZXh0PjExMzxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisgIDwvdGQ+DQorICA8dGQgc3R5bGU9J2JvcmRlcjpub25lO3BhZGRpbmc6Ljc1cHQgLjc1cHQgLjc1cHQgLjc1cHQnPg0KKyAgPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIGNsYXNzPXNob3J0dGV4dD5BZ29nbzxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisgIDwvdGQ+DQorIDwvdHI+DQorIDx0ciBzdHlsZT0nbXNvLXlmdGktaXJvdzoxMTQnPg0KKyAgPHRkIHN0eWxlPSdib3JkZXI6bm9uZTtwYWRkaW5nOi43NXB0IC43NXB0IC43NXB0IC43NXB0Jz4NCisgIDxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBjbGFzcz1zaG9ydHRleHQ+PG86cD4mbmJzcDs8L286cD48L3NwYW4+PC9wPg0KKyAgPC90ZD4NCisgIDx0ZCBzdHlsZT0nYm9yZGVyOm5vbmU7cGFkZGluZzouNzVwdCAuNzVwdCAuNzVwdCAuNzVwdCc+DQorICA8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gY2xhc3M9c2hvcnR0ZXh0PjExNDxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisgIDwvdGQ+DQorICA8dGQgc3R5bGU9J2JvcmRlcjpub25lO3BhZGRpbmc6Ljc1cHQgLjc1cHQgLjc1cHQgLjc1cHQnPg0KKyAgPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIGNsYXNzPXNob3J0dGV4dD5TdGVlbCBEcnVtPG86cD48L286cD48L3NwYW4+PC9wPg0KKyAgPC90ZD4NCisgPC90cj4NCisgPHRyIHN0eWxlPSdtc28teWZ0aS1pcm93OjExNSc+DQorICA8dGQgc3R5bGU9J2JvcmRlcjpub25lO3BhZGRpbmc6Ljc1cHQgLjc1cHQgLjc1cHQgLjc1cHQnPg0KKyAgPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIGNsYXNzPXNob3J0dGV4dD48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+DQorICA8L3RkPg0KKyAgPHRkIHN0eWxlPSdib3JkZXI6bm9uZTtwYWRkaW5nOi43NXB0IC43NXB0IC43NXB0IC43NXB0Jz4NCisgIDxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBjbGFzcz1zaG9ydHRleHQ+MTE1PG86cD48L286cD48L3NwYW4+PC9wPg0KKyAgPC90ZD4NCisgIDx0ZCBzdHlsZT0nYm9yZGVyOm5vbmU7cGFkZGluZzouNzVwdCAuNzVwdCAuNzVwdCAuNzVwdCc+DQorICA8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gY2xhc3M9c2hvcnR0ZXh0Pldvb2RlbiBCbG9jazxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisgIDwvdGQ+DQorIDwvdHI+DQorIDx0ciBzdHlsZT0nbXNvLXlmdGktaXJvdzoxMTYnPg0KKyAgPHRkIHN0eWxlPSdib3JkZXI6bm9uZTtwYWRkaW5nOi43NXB0IC43NXB0IC43NXB0IC43NXB0Jz4NCisgIDxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBjbGFzcz1zaG9ydHRleHQ+PG86cD4mbmJzcDs8L286cD48L3NwYW4+PC9wPg0KKyAgPC90ZD4NCisgIDx0ZCBzdHlsZT0nYm9yZGVyOm5vbmU7cGFkZGluZzouNzVwdCAuNzVwdCAuNzVwdCAuNzVwdCc+DQorICA8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gY2xhc3M9c2hvcnR0ZXh0PjExNjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisgIDwvdGQ+DQorICA8dGQgc3R5bGU9J2JvcmRlcjpub25lO3BhZGRpbmc6Ljc1cHQgLjc1cHQgLjc1cHQgLjc1cHQnPg0KKyAgPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIGNsYXNzPXNob3J0dGV4dD5UYWlrbyBEcnVtPG86cD48L286cD48L3NwYW4+PC9wPg0KKyAgPC90ZD4NCisgPC90cj4NCisgPHRyIHN0eWxlPSdtc28teWZ0aS1pcm93OjExNyc+DQorICA8dGQgc3R5bGU9J2JvcmRlcjpub25lO3BhZGRpbmc6Ljc1cHQgLjc1cHQgLjc1cHQgLjc1cHQnPg0KKyAgPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIGNsYXNzPXNob3J0dGV4dD48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+DQorICA8L3RkPg0KKyAgPHRkIHN0eWxlPSdib3JkZXI6bm9uZTtwYWRkaW5nOi43NXB0IC43NXB0IC43NXB0IC43NXB0Jz4NCisgIDxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBjbGFzcz1zaG9ydHRleHQ+MTE3PG86cD48L286cD48L3NwYW4+PC9wPg0KKyAgPC90ZD4NCisgIDx0ZCBzdHlsZT0nYm9yZGVyOm5vbmU7cGFkZGluZzouNzVwdCAuNzVwdCAuNzVwdCAuNzVwdCc+DQorICA8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gY2xhc3M9c2hvcnR0ZXh0Pk1lbG9kaWMgVG9tPG86cD48L286cD48L3NwYW4+PC9wPg0KKyAgPC90ZD4NCisgPC90cj4NCisgPHRyIHN0eWxlPSdtc28teWZ0aS1pcm93OjExOCc+DQorICA8dGQgc3R5bGU9J2JvcmRlcjpub25lO3BhZGRpbmc6Ljc1cHQgLjc1cHQgLjc1cHQgLjc1cHQnPg0KKyAgPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIGNsYXNzPXNob3J0dGV4dD48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+DQorICA8L3RkPg0KKyAgPHRkIHN0eWxlPSdib3JkZXI6bm9uZTtwYWRkaW5nOi43NXB0IC43NXB0IC43NXB0IC43NXB0Jz4NCisgIDxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBjbGFzcz1zaG9ydHRleHQ+MTE4PG86cD48L286cD48L3NwYW4+PC9wPg0KKyAgPC90ZD4NCisgIDx0ZCBzdHlsZT0nYm9yZGVyOm5vbmU7cGFkZGluZzouNzVwdCAuNzVwdCAuNzVwdCAuNzVwdCc+DQorICA8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gY2xhc3M9c2hvcnR0ZXh0PlN5bnRoIERydW08bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorICA8L3RkPg0KKyA8L3RyPg0KKyA8dHIgc3R5bGU9J21zby15ZnRpLWlyb3c6MTE5Jz4NCisgIDx0ZCBzdHlsZT0nYm9yZGVyOm5vbmU7cGFkZGluZzouNzVwdCAuNzVwdCAuNzVwdCAuNzVwdCc+DQorICA8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gY2xhc3M9c2hvcnR0ZXh0PjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisgIDwvdGQ+DQorICA8dGQgc3R5bGU9J2JvcmRlcjpub25lO3BhZGRpbmc6Ljc1cHQgLjc1cHQgLjc1cHQgLjc1cHQnPg0KKyAgPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIGNsYXNzPXNob3J0dGV4dD4xMTk8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorICA8L3RkPg0KKyAgPHRkIHN0eWxlPSdib3JkZXI6bm9uZTtwYWRkaW5nOi43NXB0IC43NXB0IC43NXB0IC43NXB0Jz4NCisgIDxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBjbGFzcz1zaG9ydHRleHQ+UmV2ZXJzZSBDeW1iYWw8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorICA8L3RkPg0KKyA8L3RyPg0KKyA8dHIgc3R5bGU9J21zby15ZnRpLWlyb3c6MTIwJz4NCisgIDx0ZCBzdHlsZT0nYm9yZGVyOm5vbmU7cGFkZGluZzouNzVwdCAuNzVwdCAuNzVwdCAuNzVwdCc+DQorICA8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gY2xhc3M9c2hvcnR0ZXh0PlNvdW5kIEVmZmVjdHM8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorICA8L3RkPg0KKyAgPHRkIHN0eWxlPSdib3JkZXI6bm9uZTtwYWRkaW5nOi43NXB0IC43NXB0IC43NXB0IC43NXB0Jz4NCisgIDxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBjbGFzcz1zaG9ydHRleHQ+MTIwPG86cD48L286cD48L3NwYW4+PC9wPg0KKyAgPC90ZD4NCisgIDx0ZCBzdHlsZT0nYm9yZGVyOm5vbmU7cGFkZGluZzouNzVwdCAuNzVwdCAuNzVwdCAuNzVwdCc+DQorICA8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gY2xhc3M9c2hvcnR0ZXh0Pkd1aXRhciBGcmV0IE5vaXNlPG86cD48L286cD48L3NwYW4+PC9wPg0KKyAgPC90ZD4NCisgPC90cj4NCisgPHRyIHN0eWxlPSdtc28teWZ0aS1pcm93OjEyMSc+DQorICA8dGQgc3R5bGU9J2JvcmRlcjpub25lO3BhZGRpbmc6Ljc1cHQgLjc1cHQgLjc1cHQgLjc1cHQnPg0KKyAgPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIGNsYXNzPXNob3J0dGV4dD48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+DQorICA8L3RkPg0KKyAgPHRkIHN0eWxlPSdib3JkZXI6bm9uZTtwYWRkaW5nOi43NXB0IC43NXB0IC43NXB0IC43NXB0Jz4NCisgIDxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBjbGFzcz1zaG9ydHRleHQ+MTIxPG86cD48L286cD48L3NwYW4+PC9wPg0KKyAgPC90ZD4NCisgIDx0ZCBzdHlsZT0nYm9yZGVyOm5vbmU7cGFkZGluZzouNzVwdCAuNzVwdCAuNzVwdCAuNzVwdCc+DQorICA8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gY2xhc3M9c2hvcnR0ZXh0PkJyZWF0aCBOb2lzZTxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisgIDwvdGQ+DQorIDwvdHI+DQorIDx0ciBzdHlsZT0nbXNvLXlmdGktaXJvdzoxMjInPg0KKyAgPHRkIHN0eWxlPSdib3JkZXI6bm9uZTtwYWRkaW5nOi43NXB0IC43NXB0IC43NXB0IC43NXB0Jz4NCisgIDxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBjbGFzcz1zaG9ydHRleHQ+PG86cD4mbmJzcDs8L286cD48L3NwYW4+PC9wPg0KKyAgPC90ZD4NCisgIDx0ZCBzdHlsZT0nYm9yZGVyOm5vbmU7cGFkZGluZzouNzVwdCAuNzVwdCAuNzVwdCAuNzVwdCc+DQorICA8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gY2xhc3M9c2hvcnR0ZXh0PjEyMjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisgIDwvdGQ+DQorICA8dGQgc3R5bGU9J2JvcmRlcjpub25lO3BhZGRpbmc6Ljc1cHQgLjc1cHQgLjc1cHQgLjc1cHQnPg0KKyAgPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIGNsYXNzPXNob3J0dGV4dD5TZWFzaG9yZTxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisgIDwvdGQ+DQorIDwvdHI+DQorIDx0ciBzdHlsZT0nbXNvLXlmdGktaXJvdzoxMjMnPg0KKyAgPHRkIHN0eWxlPSdib3JkZXI6bm9uZTtwYWRkaW5nOi43NXB0IC43NXB0IC43NXB0IC43NXB0Jz4NCisgIDxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBjbGFzcz1zaG9ydHRleHQ+PG86cD4mbmJzcDs8L286cD48L3NwYW4+PC9wPg0KKyAgPC90ZD4NCisgIDx0ZCBzdHlsZT0nYm9yZGVyOm5vbmU7cGFkZGluZzouNzVwdCAuNzVwdCAuNzVwdCAuNzVwdCc+DQorICA8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gY2xhc3M9c2hvcnR0ZXh0PjEyMzxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisgIDwvdGQ+DQorICA8dGQgc3R5bGU9J2JvcmRlcjpub25lO3BhZGRpbmc6Ljc1cHQgLjc1cHQgLjc1cHQgLjc1cHQnPg0KKyAgPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIGNsYXNzPXNob3J0dGV4dD5CaXJkIFR3ZWV0PG86cD48L286cD48L3NwYW4+PC9wPg0KKyAgPC90ZD4NCisgPC90cj4NCisgPHRyIHN0eWxlPSdtc28teWZ0aS1pcm93OjEyNCc+DQorICA8dGQgc3R5bGU9J2JvcmRlcjpub25lO3BhZGRpbmc6Ljc1cHQgLjc1cHQgLjc1cHQgLjc1cHQnPg0KKyAgPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIGNsYXNzPXNob3J0dGV4dD48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+DQorICA8L3RkPg0KKyAgPHRkIHN0eWxlPSdib3JkZXI6bm9uZTtwYWRkaW5nOi43NXB0IC43NXB0IC43NXB0IC43NXB0Jz4NCisgIDxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBjbGFzcz1zaG9ydHRleHQ+MTI0PG86cD48L286cD48L3NwYW4+PC9wPg0KKyAgPC90ZD4NCisgIDx0ZCBzdHlsZT0nYm9yZGVyOm5vbmU7cGFkZGluZzouNzVwdCAuNzVwdCAuNzVwdCAuNzVwdCc+DQorICA8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gY2xhc3M9c2hvcnR0ZXh0PlRlbGVwaG9uZSBSaW5nPG86cD48L286cD48L3NwYW4+PC9wPg0KKyAgPC90ZD4NCisgPC90cj4NCisgPHRyIHN0eWxlPSdtc28teWZ0aS1pcm93OjEyNSc+DQorICA8dGQgc3R5bGU9J2JvcmRlcjpub25lO3BhZGRpbmc6Ljc1cHQgLjc1cHQgLjc1cHQgLjc1cHQnPg0KKyAgPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIGNsYXNzPXNob3J0dGV4dD48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+DQorICA8L3RkPg0KKyAgPHRkIHN0eWxlPSdib3JkZXI6bm9uZTtwYWRkaW5nOi43NXB0IC43NXB0IC43NXB0IC43NXB0Jz4NCisgIDxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBjbGFzcz1zaG9ydHRleHQ+MTI1PG86cD48L286cD48L3NwYW4+PC9wPg0KKyAgPC90ZD4NCisgIDx0ZCBzdHlsZT0nYm9yZGVyOm5vbmU7cGFkZGluZzouNzVwdCAuNzVwdCAuNzVwdCAuNzVwdCc+DQorICA8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gY2xhc3M9c2hvcnR0ZXh0PkhlbGljb3B0ZXI8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorICA8L3RkPg0KKyA8L3RyPg0KKyA8dHIgc3R5bGU9J21zby15ZnRpLWlyb3c6MTI2Jz4NCisgIDx0ZCBzdHlsZT0nYm9yZGVyOm5vbmU7cGFkZGluZzouNzVwdCAuNzVwdCAuNzVwdCAuNzVwdCc+DQorICA8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gY2xhc3M9c2hvcnR0ZXh0PjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisgIDwvdGQ+DQorICA8dGQgc3R5bGU9J2JvcmRlcjpub25lO3BhZGRpbmc6Ljc1cHQgLjc1cHQgLjc1cHQgLjc1cHQnPg0KKyAgPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIGNsYXNzPXNob3J0dGV4dD4xMjY8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorICA8L3RkPg0KKyAgPHRkIHN0eWxlPSdib3JkZXI6bm9uZTtwYWRkaW5nOi43NXB0IC43NXB0IC43NXB0IC43NXB0Jz4NCisgIDxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBjbGFzcz1zaG9ydHRleHQ+QXBwbGF1c2U8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorICA8L3RkPg0KKyA8L3RyPg0KKyA8dHIgc3R5bGU9J21zby15ZnRpLWlyb3c6MTI3Jz4NCisgIDx0ZCBzdHlsZT0nYm9yZGVyOm5vbmU7cGFkZGluZzouNzVwdCAuNzVwdCAuNzVwdCAuNzVwdCc+DQorICA8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gY2xhc3M9c2hvcnR0ZXh0PjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisgIDwvdGQ+DQorICA8dGQgc3R5bGU9J2JvcmRlcjpub25lO3BhZGRpbmc6Ljc1cHQgLjc1cHQgLjc1cHQgLjc1cHQnPg0KKyAgPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIGNsYXNzPXNob3J0dGV4dD4xMjc8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorICA8L3RkPg0KKyAgPHRkIHN0eWxlPSdib3JkZXI6bm9uZTtwYWRkaW5nOi43NXB0IC43NXB0IC43NXB0IC43NXB0Jz4NCisgIDxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBjbGFzcz1zaG9ydHRleHQ+R3Vuc2hvdDxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCisgIDwvdGQ+DQorIDwvdHI+DQorIDx0ciBzdHlsZT0nbXNvLXlmdGktaXJvdzoxMjg7bXNvLXlmdGktbGFzdHJvdzp5ZXMnPg0KKyAgPHRkIHN0eWxlPSdib3JkZXI6bm9uZTtwYWRkaW5nOi43NXB0IC43NXB0IC43NXB0IC43NXB0Jz4NCisgIDxwIGNsYXNzPU1zb1BsYWluVGV4dD48c3BhbiBjbGFzcz1zaG9ydHRleHQ+PG86cD4mbmJzcDs8L286cD48L3NwYW4+PC9wPg0KKyAgPC90ZD4NCisgIDx0ZCBzdHlsZT0nYm9yZGVyOm5vbmU7cGFkZGluZzouNzVwdCAuNzVwdCAuNzVwdCAuNzVwdCc+DQorICA8cCBjbGFzcz1Nc29QbGFpblRleHQ+PHNwYW4gY2xhc3M9c2hvcnR0ZXh0PjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCisgIDwvdGQ+DQorICA8dGQgc3R5bGU9J2JvcmRlcjpub25lO3BhZGRpbmc6Ljc1cHQgLjc1cHQgLjc1cHQgLjc1cHQnPg0KKyAgPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIGNsYXNzPXNob3J0dGV4dD48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+DQorICA8L3RkPg0KKyA8L3RyPg0KKzwvdGFibGU+DQorDQorPC9kaXY+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIGxhbmc9RU4tVVMgc3R5bGU9J21zby1hbnNpLWxhbmd1YWdlOkVOLVVTJz48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIGxhbmc9RU4tVVMgc3R5bGU9J21zby1hbnNpLWxhbmd1YWdlOkVOLVVTJz48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIGxhbmc9RU4tVVMgc3R5bGU9J21zby1hbnNpLWxhbmd1YWdlOkVOLVVTJz48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIGxhbmc9RU4tVVMgc3R5bGU9J21zby1hbnNpLWxhbmd1YWdlOkVOLVVTJz48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvUGxhaW5UZXh0PjxzcGFuIGxhbmc9RU4tVVMgc3R5bGU9J21zby1hbnNpLWxhbmd1YWdlOkVOLVVTJz48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+DQorDQorPHAgY2xhc3M9TXNvTm9ybWFsPjxzcGFuIGxhbmc9RU4tVVMgc3R5bGU9J21zby1hbnNpLWxhbmd1YWdlOkVOLVVTJz48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+DQorDQorPC9kaXY+DQorDQorPC9ib2R5Pg0KKw0KKzwvaHRtbD4NCmRpZmYgLS1naXQgYS9Eb2N1bWVudHMvTWFudWFsLUJSTFRUWS9Qb3J0dWd1ZXNlL0JSTFRUWS5wZGYgYi9Eb2N1bWVudHMvTWFudWFsLUJSTFRUWS9Qb3J0dWd1ZXNlL0JSTFRUWS5wZGYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjRiYmM0MAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50cy9NYW51YWwtQlJMVFRZL1BvcnR1Z3Vlc2UvQlJMVFRZLnBkZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9Eb2N1bWVudHMvTWFudWFsLUJSTFRUWS9Qb3J0dWd1ZXNlL0JSTFRUWS50eHQgYi9Eb2N1bWVudHMvTWFudWFsLUJSTFRUWS9Qb3J0dWd1ZXNlL0JSTFRUWS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDg3MjJiZgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50cy9NYW51YWwtQlJMVFRZL1BvcnR1Z3Vlc2UvQlJMVFRZLnR4dApAQCAtMCwwICsxLDY2MDIgQEAKKyAgTWFudWFsIGRlIFJlZmVyw6puY2lhIGRvIEJSTFRUWQ0KKyAgQ29udHJvbGUgZGUgQWNlc3NvIGRhIFRlbGEgcGFyYSBwZXNzb2FzIGNlZ2FzIHF1ZSB1c2FtIERpc3BsYXkgQnJhaWxsZQkNCisNCisgIE5pa2hpbCBOYWlyIDxubjIwMUBjdXMuY2FtLmFjLnVrPg0KKw0KKyAgTmljb2xhcyBQaXRyZSA8bmljb0BmbHV4bmljLm5ldD4NCisNCisgIFN0w6lwaGFuZSBEb3lvbiA8cy5kb3lvbkB2aWRlb3Ryb24uY2E+DQorDQorICBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+DQorDQorICBUcmFkdcOnw6NvIHBhcmEgYSBsaW5ndWEgUG9ydHVndWVzYQ0KKw0KKyAgUmVnaWFuZSBNZW5kb27Dp2EgVmlsbGVsYSA8cmVnaWFuZXZpbGxlbGFAZ21haWwuY29tPg0KKw0KKyAgRmlsaXBlIE9saXZlaXJhIEJlcm5hcmRlcyA8ZmlsaXBlb2Jlcm5hcmRlc0BnbWFpbC5jb20+DQorDQorICBWZXJzaW9uIDQuMywgb2N0IDIwMTENCisNCisNCisgIENvcHlyaWdodCDCqSAxOTk1LTIwMTEgYnkgRGVzZW52b2x2ZWRvcmVzIGRvIEJSTFRUWS4gQlJMVFRZIMOpIHVtIHNvZnR3YXJlDQorICBsaXZyZSwgZSB2ZW0gY29tIEFCU09MVVRBTUVOVEUgU0VNIE5FTkhVTUEgR0FSQU5USUEuIEVsZSDDqSBwb3N0YWRvIHNvYiBvcw0KKyAgdGVybW9zIGRhIHZlcnPDo28gMiBvdSBwb3N0ZXJpb3IgZGEgR05VIGUgcHVibGljYWRhIHBlbGEgRnVuZGHDp8OjbyBkZSBTb2Z0d2FyZQ0KKyAgTGl2cmUuDQorDQorICBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fDQorDQorICBUYWJlbGEgZGUgQ29udGXDumRvDQorDQorDQorICAxLiBGb3JtYWxpZGFkZXMNCisgICAgIDEuMSBMaWNlbsOnYQ0KKyAgICAgMS4yIFJlbsO6bmNpYQ0KKyAgICAgMS4zIENvbnRhdG8NCisNCisgIDIuIEludHJvZHXDp8Ojbw0KKyAgICAgMi4xIFN1bcOhcmlvIA0KKyAgICAgMi4yIFJlcXVpc2l0b3MgZG8gU2lzdGVtYQ0KKw0KKyAgMy4gUHJvY2Vzc28gZGUgY29tcGlsYcOnw6NvDQorICAgICAzLjEgSW5zdGFsYcOnw6NvIGRhIGhlcmFuw6dhIGRlIGFycXVpdm9zDQorICAgICAzLjIgSW5zdGFsYcOnw6NvIGEgcGFydGlyIGRvIFRhciBCYWxsDQorICAgICAgICAzLjIuMSBPcMOnw7VlcyBkZSBjb21waWxhw6fDo28NCisgICAgICAgICAgIDMuMi4xLjEgUGFkcsO1ZXMgZG8gU2lzdGVtYQ0KKyAgICAgICAgICAgMy4yLjEuMiBFc3BlY2lmaWNhw6fDtWVzIGRlIERpcmV0w7NyaW8NCisgICAgICAgICAgIDMuMi4xLjMgQ2FyYWN0ZXJpc3RpY2FzIGRlIENvbXBpbGHDp8Ojbw0KKyAgICAgICAgICAgMy4yLjEuNCBPcMOnw7VlcyBkaXZlcnNhcw0KKyAgICAgICAgMy4yLjIgQXRpbmdpciBtZXRhcyBkZSBhcnF1aXZvcw0KKyAgICAgMy4zIFRlc3RhbmRvIG8gQlJMVFRZDQorICAgICAzLjQgSW5pY2lhbmRvIG8gQlJMVFRZDQorICAgICAzLjUgQ29uc2lkZXJhw6fDtWVzIGRlIFNlZ3VyYW7Dp2ENCisgICAgIDMuNiBSZXN0cmnDp8O1ZXMgZGUgQ29tcGlsYcOnw6NvIGUgVGVtcG8gZGUgRXhlY3XDp8Ojbw0KKyAgICAgMy43IEluc3RhbGHDp8OjbyBhIHBhcnRpciBkZSB1bSBhcnF1aXZvIFJQTSANCisgICAgIDMuOCBPdXRyYXMgVXRpbGlkYWRlcw0KKyAgICAgICAgMy44LjEgYnJsdHR5LWNvbmZpZw0KKyAgICAgICAgMy44LjIgYnJsdHR5LWluc3RhbGwNCisgICAgICAgIDMuOC4zIGJybHRlc3QNCisgICAgICAgIDMuOC40IHNwa3Rlc3QNCisgICAgICAgIDMuOC41IHNjcnRlc3QNCisgICAgICAgIDMuOC42IHR0YnRlc3QNCisgICAgICAgIDMuOC43IGN0YnRlc3QNCisgICAgICAgIDMuOC44IHR1bmV0ZXN0DQorDQorICA0LiBVc2FuZG8gQlJMVFRZDQorICAgICA0LjEgQ29tYW5kb3MNCisgICAgICAgIDQuMS4xIERlc2xvY2FtZW50byBWZXJ0aWNhbCANCisgICAgICAgIDQuMS4yIERlc2xvY2FtZW50byBIb3Jpem9udGFsIA0KKyAgICAgICAgNC4xLjMgRGVzbG9jYW1lbnRvIEltcGxpY2l0byANCisgICAgICAgIDQuMS40IENhcmFjdGVyaXN0aWNhIGRlIEF0aXZhw6fDo28NCisgICAgICAgIDQuMS41IE1vZG8gZGUgU2VsZcOnw6NvDQorICAgICAgICA0LjEuNiBQcmVmZXLDqm5jaWFzIGRlIE1hbnV0ZW7Dp8Ojbw0KKyAgICAgICAgNC4xLjcgTWVudSBkZSBOYXZlZ2HDp8Ojbw0KKyAgICAgICAgNC4xLjggQ29udHJvbGVzIGRlIEZhbGENCisgICAgICAgIDQuMS45IENvbXV0YcOnw6NvIGRvIFRlcm1pbmFsIFZpcnR1YWwNCisgICAgICAgIDQuMS4xMCBPdXRyb3MgQ29tYW5kb3MNCisgICAgICAgIDQuMS4xMSBDYXJhY3RlcmVzIGRlIENvbWFuZG9zDQorICAgICAgICA0LjEuMTIgQmFzZSBDb21tYW5kb3MNCisgICAgIDQuMiBBcnF1aXZvcyBkZSBjb25maWd1cmHDp8Ojbw0KKyAgICAgNC4zIE9ww6fDtWVzIGRlIGxpbmhhIGRlIENvbWFuZG8NCisNCisgIDUuIERlc2NyacOnw7VlcyBkZSBjYXJhY3RlcmlzdGljYXMNCisgICAgIDUuMSBSb3RlYW1lbnRvIGRlIEN1cnNvcg0KKyAgICAgNS4yIENvcGlhciBlIENvbGFyDQorICAgICA1LjMgU3Vwb3J0ZSBkZSBQb250ZWlybyAoTW91c2UpIHZpYSBHUE0NCisgICAgIDUuNCBBbGVydGEgZGUgVHVuZXMNCisgICAgIDUuNSBDb25maWd1cmHDp8O1ZXMgZGUgUHJlZmVyw6puY2lhcyANCisgICAgICAgIDUuNS4xIE1lbnUgZGUgUHJlZmVyw6puY2lhcw0KKyAgICAgICAgICAgNS41LjEuMSBNZW51IGRlIE5hdmVnYcOnw6NvDQorICAgICAgICAgICA1LjUuMS4yIEl0ZW5zIGRlIE1lbnUNCisgICAgIDUuNiBTdGF0dXMgZG8gRGlzcGxheQ0KKyAgICAgICAgNS42LjEgRGlzcGxheXMgY29tIDIxIEPDqWx1bGFzIG91IE1haXMNCisgICAgICAgIDUuNi4yIERpc3BsYXlzIGNvbSAyMCBDw6lsdWxhcyBvdSBNZW5vcw0KKyAgICAgNS43IENvbWFuZG8gZGUgTW9kbyBkZSBBcHJlbmRpemFnZW0NCisNCisgIDYuIFRhYmVsYXMNCisgICAgIDYuMSBUYWJlbGFzIGRlIFRleHRvDQorICAgICAgICA2LjEuMSBUYWJlbGEgZGUgRm9ybWF0byBkZSBUZXh0bw0KKyAgICAgICAgNi4xLjIgVGFiZWxhIGRlIERpcmV0aXZhcyBkZSBUZXh0bw0KKyAgICAgNi4yIFRhYmVsYSBkZSBBdHJpYnV0b3MNCisgICAgICAgIDYuMi4xIFRhYmVsYSBkZSBGb3JtYXRvcyBkb3MgQXRyaWJ1dG9zDQorICAgICAgICA2LjIuMiBUYWJlbGEgZGUgRGlyZXTDs3Jpb3MgZG9zIEF0cmlidXRvcyANCisgICAgIDYuMyBUYWJlbGEgZGUgQ29udHJhw6fDo28NCisgICAgICAgIDYuMy4xIFRhYmVsYSBkZSBGb3JtYXRvIGRlIENvbnRyYcOnw6NvDQorICAgICAgICA2LjMuMiBUYWJlbGEgZGUgT3BlcmFuZG9zIGRlIENvbnRyYcOnw6NvDQorICAgICAgICA2LjMuMyBPcGNvZGVzDQorICAgICAgICAgICA2LjMuMy4xIEFkbWluaXN0cmHDp8OjbyBkZSBUYWJlbGENCisgICAgICAgICAgIDYuMy4zLjIgRGVmaW5pw6fDo28gZGUgU8OtbWJvbG8gRXNwZWNpYWwNCisgICAgICAgICAgIDYuMy4zLjMgVHJhZHXDp8OjbyBkZSBDYXJhY3RlciANCisgICAgICAgICAgIDYuMy4zLjQgQ2xhc3NlcyBkZSBDYXJhY3Rlcg0KKyAgICAgNi40IFRhYmVsYXMgZGUgVGVjbGFzDQorICAgICAgICA2LjQuMSBUYWJlbGEgZGUgRGlyZXRpdmFzIGRlIFRlY2xhcw0KKyAgICAgICAgICAgNi40LjEuMSBEaXJldGl2YSBkZSBhdHJpYnVpw6fDo28NCisgICAgICAgICAgIDYuNC4xLjIgRGlyZXRpdmEgZGUgdsOtbmN1bG8NCisgICAgICAgICAgIDYuNC4xLjMgRGlyZXRpdmEgZGUgY29udGV4dG8NCisgICAgICAgICAgIDYuNC4xLjQgRGlyZXRpdmEgZGUgb2N1bHRhcg0KKyAgICAgICAgICAgNi40LjEuNSBEaXJldGl2YSBkZSBIb3RrZXkgDQorICAgICAgICAgICA2LjQuMS42IERpcmV0aXZhIGRlIElmS2V5IA0KKyAgICAgICAgICAgNi40LjEuNyBEaXJldGl2YSBkZSBpbmNsdXPDo28NCisgICAgICAgICAgIDYuNC4xLjggRGlyZXRpdmEgZGUgbWFwYQ0KKyAgICAgICAgICAgNi40LjEuOSBEaXJldGl2YSBkZSBvYnNlcnZhw6fDo28NCisgICAgICAgICAgIDYuNC4xLjEwIERpcmV0aXZhIGRlIHNvYnJlcG9zacOnw6NvDQorICAgICAgICAgICA2LjQuMS4xMSBEaXJldGl2YSBkZSB0w610dWxvDQorICAgICAgICA2LjQuMiBQcm9wcmllZGFkZXMgZG8gVGVjbGFkbw0KKw0KKyAgNy4gVMOzcGljb3MgQXZhbsOnYWRvcw0KKyAgICAgNy4xIEluc3RhbGHDp8OjbyBkZSBNdWx0aXBsYXMgVmVyc8O1ZXMNCisgICAgIDcuMiBJbnN0YWxhw6fDo28vQWp1ZGEgZG9zIERpc2NvcyBkZSByb290IHBhcmEgTGludXgNCisgICAgIDcuMyBIZXJhbsOnYSBGdXR1cmENCisgICAgIDcuNCBCdWdzIENvbmhlY2lkb3MNCisNCisgIEEuIERpc3BsYXkgZGUgQnJhaWxsZSBTdXBvcnRhZG9zDQorICBCLiBTaW50ZXRpemFkb3JlcyBkZSBGYWxhIFN1cG9ydGFkb3MNCisgIEMuIElkZW50aWZpY2HDp8OjbyBkb3MgQ8OzZGlnb3MgZG8gRHJpdmVyIA0KKyAgRC4gRHJpdmVycyBkZSBUZWxhIFN1cG9ydGFkb3MNCisgIEUuIFNpbnRheGUgZGUgT3BlcmHDp8Ojbw0KKyAgICAgRS4xIEVzcGVjaWZpY2HDp8OjbyBkbyBEcml2ZXIgDQorICAgICBFLjIgRXNwZWNpZmljYcOnw6NvIGRvIERpc3Bvc2l0aXZvIEJyYWlsbGUgDQorICAgICBFLjMgRXNwZWNpZmljYcOnw6NvIGRvIERpc3Bvc2l0aXZvIFBDTSANCisgICAgIEUuNCBFc3BlY2lmaWNhw6fDo28gZG8gRGlzcG9zaXRpdm8gTUlESQ0KKw0KKyAgRi4gQ29udmVuw6fDo28gZG8gUGFkcsOjbyBCcmFpbGxlIHBhcmEgbnVtZXJhw6fDo28NCisgIEcuIEPDs2RpZ28gTm9ydGUtQW1lcmljYW5vIGRvIFBhZHLDo28gQnJhaWxsZQ0KKyAgSC4gVGFiZWxhIGRlIEluc3RydW1lbnRvIE1JREkgDQorDQorDQorICBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fDQorDQorICAxLiBGb3JtYWxpZGFkZXMNCisgIA0KKw0KKyAgMS4xIExpY2Vuw6dhDQorDQorRXN0ZSBwcm9ncmFtYSDDqSB1bSBzb2Z0d2FyZSBsaXZyZS4gVm9jw6ogcG9kZXLDoSByZWRpc3RyaWJ1aXIgZS9vdSBtb2RpZmljYXIgDQorc29icmUgb3MgdGVybW9zIGRvIEdOVSBHZW5lcmFsIFB1YmxpYyBMaW5jZW5zZSBjb21vIHB1YmxpY2FkbyBwZWxhIEZ1bmRhw6fDo28gZG8gDQorU29mdHdhcmUgTGl2cmUuIFZlcnPDo28gMiAob3Ugb3V0cmEgdmVyc8OjbyBwb3N0ZXJpb3IpIGRhIGxpY2Vuw6dhIHBvZGVyw6Egc2VyIA0KK3VzYWRhLg0KK1ZvY8OqIGRldmVyw6EgcmVjZWJlciB1bWEgY8OzcGlhIGRhIGxpY2Vuw6dhIGp1bnRvIGNvbSBlc3RlIHByb2dyYW1hLiBEZXZlLXNlIHRlciANCitubyBhcnF1aXZvIGRlIGxpY2Vuw6dhLUdQTCBubyBkaXJldMOzcmlvIHJhaXouIFNlIG7Do28gZXN0aXZlciwgZXNjcmV2YSBwYXJhIGEgDQorRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgRVVBLg0KKyAgIA0KKyAgMS4yIFJlbsO6bmNpYQ0KKw0KK0VzdGUgcHJvZ3JhbWEgw6kgZGlzdHJpYnXDrWRvIG5hIGVzcGVyYW7Dp2EgZGUgc2VyIHVzdWFsLCBtYWlzIHZlbSBjb20gDQorQUJTT0xVVEFNRU5URSBTRU0gTkVOSFVNQSBHQVJBTlRJQSAtIG5lbSBtZXNtbyBhIGdhcmFudGlhIGltcGzDrWNpdGEgZGUgDQorQ09NRVJDSUFMSVpBw4fDg08gb3UgQURFUVVBw4fDg08gUEFSQSBVTSBQUk9Qw5NTSVRPIFBBUlRJQ1VMQVIuIFZlciBuYSBsaWNlbsOnYSBHTlUgDQorcGFyYSBtYWlzIGRldGFsaGVzLiAgDQorDQorICAxLjMgQ29udGF0bw0KKw0KK0JSTFRUWSDDqSByZXByZXNlbnRhZG8gcG9yIHVtYSBlcXVpcGUgZGUgdHJhYmFsaG8uIFBhcmEgYXR1YWxpemFyIGEgaW5mb3JtYcOnw6NvIA0KK2RpYSBhIGRpYSwgbm8gd2ViIHNpdGUgQlJMVFRZIFtodHRwOi8vbWllbGtlLmNjL2JybHR0eV0uIENvbXBvc3RvIHBvcjoNCisNCisgIMK3ICBEYXZlIE1pZWxrZSAobWFudGVuZWRvciwgYXRpdm8pDQorDQorICAgICBXZWINCisgICAgICAgIGh0dHA6Ly9taWVsa2UuY2MvDQorDQorICAgICBFbWFpbA0KKyAgICAgICAgPGRhdmVAbWllbGtlLmNjPg0KKw0KKyAgwrcgIFNhbXVlbCBUaGliYXVsdCAoYXRpdm8pDQorDQorICAgICBXZWINCisgICAgICAgIGh0dHA6Ly9kZXB0LWluZm8ubGFicmkuZnIvfnRoaWJhdWx0Lw0KKw0KKyAgICAgRW1haWwNCisgICAgICAgIDxzYW11ZWwudGhpYmF1bHRAZW5zLWx5b24ub3JnPg0KKw0KKyAgwrcgIE1hcmlvIExhbmcgKGF0aXZvKQ0KKw0KKyAgICAgV2ViDQorICAgICAgICBodHRwOi8vZGVseXNpZC5vcmcvDQorDQorICAgICBFbWFpbA0KKyAgICAgICAgPG1sYW5nQGRlbHlzaWQub3JnPg0KKw0KKyAgwrcgIE5pY29sYXMgUGl0cmUNCisNCisgICAgIFdlYg0KKyAgICAgICAgaHR0cDovL3d3dy5mbHV4bmljLm5ldC8NCisNCisgICAgIEVtYWlsDQorICAgICAgICA8bmljb0BmbHV4bmljLm5ldD4NCisNCisgIMK3ICBTdMOpcGhhbmUgRG95b24NCisNCisgICAgIFdlYg0KKyAgICAgICAgaHR0cDovL3BhZ2VzLmluZmluaXQubmV0L3Nkb3lvbi8NCisNCisgICAgIEVtYWlsDQorICAgICAgICA8cy5kb3lvbkB2aWRlb3Ryb24uY2E+DQorDQorICDCtyAgTmlraGlsIE5haXIgKGF1dG9yKQ0KKw0KKyAgICAgRW1haWwNCisgICAgICAgIDxubjIwMUBjdXMuY2FtLmFjLnVrPg0KKw0KK1Blcmd1bnRhcywgY29tZW50w6FyaW9zLCBzdWdlc3TDtWVzLCBjcml0aWNhcywgZSBjb250cmlidWnDp8O1ZXMgc8OjbyB0b2RhcyBiZW0tICAgICAgICAgICAgICANCit2aW5kYXMuIFVzYW5kbyBvcyBlbmRlcmXDp29zIGRlIGVtYWlsIGxpc3RhZG9zIGFjaW1hLCBlIGEgbWVsaG9yIG1hbmVpcmEgZGUgIA0KK2VudHJhciBlbSBjb250YXRvIGNvbSBhIGxpc3RhIGRvIEJSTFRUWS4gVm9jw6ogcG9kZSBwb3N0YXIgbmEgbGlzdGEgZW52aWFuZG8gdW0gDQorZW1haWwgcGFyYSBicmx0dHlAbWllbGtlLmNjLiBTZSB2b2PDqiBuw6NvIGluc2NyZXZlciBuYSBsaXN0YSBlbnTDo28gc2V1cyBwb3N0cyANCitzZXLDo28gbWFudGlkb3MgcGFyYSBhIGFwcm92YcOnw6NvIGRvIG1vZGVyYWRvci4gUGFyYSBpbnNjcmV2ZXIsIHJlbW92ZXIgDQorYXNzaW5hdHVyYSwgY29uZmlndXJhw6fDtWVzIGRlIG11ZGFuw6dhcywgYXJxdWl2b3MgcGFyYSB2aXN1YWxpemHDp8OjbywgZXRjLCB2w6EgbmEgICANCitww6FnaW5hIGh0dHA6Ly9taWVsa2UuY2MvbWFpbG1hbi9saXN0aW5mby9icmx0dHkuDQorICAgCQ0KKyAgMi4gSW50cm9kdcOnw6NvDQorICANCitCUkxUVFkgZMOhIGFvIHVzdcOhcmlvIGJyYWlsbGUgYWNlc3NvIHBhcmEgbyB0ZXJtaW5hbCBkZSB0ZXh0byBkZSB1bSBzaXN0ZW1hIA0KK1VuaXgvTGludXguIEVsZSDDqSBleGVjdXRhZG8gY29tbyB1bSBwcm9jZXNzbyBlbSBzZWd1bmRvIHBsYW5vIChkYWVtb24pIHF1ZSANCitvcGVyYSB1bSBkaXNwbGF5IEJyYWlsbGUgYXR1YWxpesOhdmVsLCBlIHBvZGUgc2VyIGluaWNpYWRvIGFudGVzIGRhIHNlccO8w6puY2lhIA0KK2RvIHNpc3RlbWEgZGUgYm9vdC4gRWxlIHBlcm1pdGUgcXVlIHVtIHVzdcOhcmlvIGJyYWlsbGUgdHJhYmFsaGUgZGUgZm9ybWEgDQoraW5kZXBlbmRlbnRlIGNvbSBhIGFkbWluaXN0cmHDp8OjbyBkbyBzaXN0ZW1hLCB0YWlzIGNvbW8gbW9kbyBkZSBlbnRyYWRhIMO6bmljYSANCitkZSB1c3XDoXJpbywgcmVjdXBlcmHDp8OjbyBkbyBzaXN0ZW1hIGRlIGFycXVpdm9zIGUgYW7DoWxpc2UgZGUgcHJvYmxlbWFzIGRlIA0KK2luaWNpYWxpemHDp8Ojby4gRWxlIGFpbmRhIGZhY2lsaXRhIG11aXRvIGFzIHRhcmVmYXMgZGUgcm90aW5hIGNvbW8gwpFsb2dnaW5nIA0KK2luwpIuDQorDQorQlJMVFRZIHJlcHJvZHV6IHVtYSBwYXJ0ZSByZXRhbmd1bGFyIGRhIHRlbGEgKHF1ZSBzZSByZWZlcmUgbmVzdGUgZG9jdW1lbnRvIA0KK2NvbW8gwpFhIGphbmVsYcKSKSBjb21vIHRleHRvIGJyYWlsbGUgbmEgdGVsYS4gQ29udHJvbGVzIG5hIHRlbGEgcG9kZSBzZXIgdXNhZG9zIA0KK3BhcmEgbW92ZXIgYSBqYW5lbGEgZW0gdG9ybm8gZGEgdGVsYSwgcGFyYSBhdGl2YXIgZSBkZXNhdGl2YXIgdsOhcmlhcyBvcMOnw7VlcyBkZSANCit2aXN1YWxpemHDp8OjbywgZSBwYXJhIHJlYWxpemFyIGZ1bsOnw7VlcyBlc3BlY2lhaXMuDQorDQorICAyLjEgU3Vtw6FyaW8gDQorICANCisgIEJSTFRUWSBvZmVyZWNlIG9zIHNlZ3VpbnRlcyByZWN1cnNvczoNCisNCisgIMK3IENvbXBsZXRhIGltcGxlbWVudGFjw6NvIGRhcyBmYWNpbGlkYWRlcyBub3JtYWlzIGRlIHJldmlzw6NvIGRlIHRlbGEuDQorDQorICDCtyBFc2NvbGhhIGVudHJlIGJsb2NrLCB1bmRlcmxpbmUsIG91IG5vIGN1cnNvci4NCisNCisgIMK3IFN1YmxpbmhhZG8gT3BjaW9uYWwgcGFyYSBpbmRpY2FyIGRlc3RhcXVlIGRlIHRleHRvIGVzcGVjaWFsLg0KKw0KK8K3IFVzbyBvcGNpb25hbCBkZSBhbGVydGEgKHZlbG9jaWRhZGUgYWp1c3TDoXZlaXMgaW5kaXZpZHVhbG1lbnRlKSBwYXJhIGN1cnNvciwgDQorZGVzdGFxdWUgc3VibGluaGFkbyBlc3BlY2lhbCwgZS9vdSBsZXRyYXMgbWFpw7pzY3VsYXMuDQorDQorICDCtyBDb25nZWxhbWVudG8gZGUgdGVsYSBwYXJhIHJldmlzw6NvLg0KKw0KK8K3IEN1cnNvciBpbnRlbGlnZW50ZSBkZSByb3RlYW1lbnRvLCBwZXJtaXRpbmRvIHF1ZSBzZWphIGbDoWNpbCBidXNjYXIgZG8gY3Vyc29yIA0KK2RlbnRybyBkZSBlZGl0b3JlcyBkZSB0ZXh0bywgbmF2ZWdhZG9yZXMgd2ViLCBldGMsIHNlbSBtb3ZlciBhcyBtw6NvcyBkYSBsaW5oYSANCitCcmFpbGxlLg0KKw0KK8K3IEEgZnVuw6fDo28gZGUgY29waWEtZS1jb2xhIHF1ZSDDqSBwYXJ0aWN1bGFybWVudGUgw7p0aWwgcGFyYSBjb3BpYXIgbm9tZXMgZGUgDQorYXJxdWl2b3MsIGNvcGlhciBvIHRleHRvIGVudHJlIG9zIHRlcm1pbmFpcyB2aXJ0dWFpcywgZW50cmFkYSBkZSBjb21hbmRvcyANCitjb21wbGljYWRvcywgZXRjLg0KKw0KKyAgwrcgVGFiZWxhIGRlIGNvbnRyYcOnw6NvIEJyYWlsbGUgKEluZ2zDqnMgZSBGcmFuY8OqcykuDQorDQorICDCtyBTdXBvcnRlIHBhcmEgdsOhcmlvcyBjw7NkaWdvcyBlbSBicmFpbGxlLg0KKw0KKyAgwrcgQ2FwYWNpZGFkZSBwYXJhIGlkZW50aWZpY2FyIHVtIGNhcmFjdGVyIGRlc2NvbmhlY2lkby4NCisNCisgIMK3IENhcGFjaWRhZGUgcGFyYSB2ZXJpZmljYXIgdW0gY2FyYWN0ZXIgc3VibGluaGFkby4NCisNCisgIMK3IEFqdWRhIG9uLWxpbmUgcGFyYSBjb21hbmRvcyBkYSBsaW5oYSBCcmFpbGxlLg0KKw0KKyAgwrcgTWVudSBkZSBwcmVmZXLDqm5jaWFzLg0KKw0KKyAgwrcgU3Vwb3J0ZSBiw6FzaWNvIGRlIGZhbGEuDQorDQorwrcgUHJvamV0byBtb2R1bGFyIHF1ZSBwZXJtaXRlIGEgYWRpw6fDo28gcmVsYXRpdmFtZW50ZSBmw6FjaWwgZGUgZHJpdmVycyBwYXJhIA0KK291dHJvcyBkaXNwbGF5IGJyYWlsbGUgZSBzaW50ZXRpemFkb3JlcyBkZSB2b3ouDQorDQorICDCtyBVbWEgSW50ZXJmYWNlIGRlIFByb2dyYW1hw6fDo28gZGUgQXBsaWNhdGl2b3MuDQorDQorICAyLjIgUmVxdWlzaXRvcyBkbyBTaXN0ZW1hDQorICANCisgIEF0w6kgZXNzYSBkYXRhLCBCUkxUVFkgcm9kYSBubyBMaW51eCwgU29sYXJpcywgT3BlbkJTRCwgRnJlZUJTRCwNCisgIE5ldEJTRCwgZSBXaW5kb3dzLiBFbnF1YW50byBxdWUgb3V0cm9zIHNpc3RlbWFzIG9wZXJhY2lvbmFpcyBuw6NvIGVzdMOjbw0KKyAgYXR1YWxtZW50ZSBwbGFuZWphZG9zLCBhbGd1bWEgc3VnZXN0w6NvIGRlIG91dHJvcyBwcm9qZXRvcyBzZXLDoSBiZW0NCisgIHZpbmRhLiANCisNCisgIExpbnV4DQorDQorICBFc3RlIHNvZnR3YXJlIHRlbSBzaWRvIHRlc3RhZG8gcG9yIGRpdmVyc29zIHNpc3RlbWFzOg0KKw0KKyAgwrcgRGVza3RvcHMsIGxhcHRvcHMsIGUgYWxndW5zIFBEQXMuDQorDQorICDCtyBQcm9jZXNzYWRvcmVzIGRlIDM4NlNYMjAgYXTDqSBQZW50aXVtLg0KKw0KKyAgwrcgRGl2ZXJzYXMgc8OpcmllcyBkZSB0YW1hbmhvcyBkZSBtw6ltb3JpYS4NCisNCisgIMK3IERpdmVyc29zIGRpc3RyaWJ1aWRvcmVzIGluY2x1aW5kbyBEZWJpYW4sIFJlZCBIYXQsIFNsYWNrd2FyZSwgZSBTdVNFLg0KKw0KKyAgwrcgVsOhcmlvcyBrZXJuZWxzLCBpbmNsdWluZG8gMS4yLjEzLCAyLjAsIDIuMiwgYW5kIDIuNC4NCisgCQ0KKyAgU29sYXJpcw0KKyAgDQorICBFc3RlIHNvZnR3YXJlIHRlbSBzaWRvIHRlc3RhZG8gbm9zIHNpc3RlbWFzIGFiYWl4bzoNCisNCisgICAgICAgIMK3IEFycXVpdGV0dXJhIFNwYXJjICh2ZXJzw7VlcyA3LCA4LCBlIDkpLg0KKw0KKyAgICAgICAgwrcgQXJxdWl0ZXR1cmEgSW50ZWwgKHZlcnPDo28gOSkuDQorDQorICBPcGVuQlNEDQorDQorICBFc3RlIHNvZnR3YXJlIHRlbSBzaWRvIHRlc3RhZG8gbm8gc2lzdGVtYSBPcGVuQlNEIGFiYWl4bzoNCisNCisgIMK3IEFycXVpdGV0dXJhIEludGVsICh2ZXJzw6NvIDMuNCkuDQorDQorICBGcmVlQlNEDQorIA0KKyAgRXN0ZSBzb2Z0d2FyZSB0ZW0gc2lkbyB0ZXN0YWRvIG5vIHNpc3RlbWEgRnJlZUJTRCBhYmFpeG86DQorDQorICDCtyBBcnF1aXRldHVyYSBJbnRlbCAodmVyc8OjbyA1LjEpLg0KKw0KKyAgTmV0QlNEDQorDQorICBFc3RlIHNvZnR3YXJlIHRlbSBzaWRvIHRlc3RhZG8gbm8gc2lzdGVtYSBOZXRCU0QgYWJhaXhvOg0KKw0KKyAgwrcgQXJxdWl0ZXR1cmEgSW50ZWwgKHZlcnPDo28gMS42KS4NCisNCisgIFdpbmRvd3MNCisNCisgIEVzdGUgc29mdHdhcmUgdGVtIHNpZG8gdGVzdGFkbyBubyBXaW5kb3dzIDk1LCA5OCBlIFhQLg0KKw0KKyAgTm8gTGludXgsIEJSTFRUWSBwb2RlIGluc3BlY2lvbmFyIG8gY29udGXDumRvIGRhIHRlbGEgZGUgZm9ybWENCisgIGNvbXBsZXRhbWVudGUgaW5kZXBlbmRlbnRlIGRlIHF1YWxxdWVyIHVzdcOhcmlvIGNvbmVjdGFkby4gRWxlIGZheiBpc3NvDQorICB1c2FuZG8gdW0gZGlzcG9zaXRpdm8gZXNwZWNpYWwgcXVlIGZvcm5lY2UgZsOhY2lsIGFjZXNzbyBhbyBjb250ZcO6ZG8gZG8gDQorICBhdHVhbCBjb25zb2xlLiBFc3RlIGRpc3Bvc2l0aXZvIGZvaSBpbnRyb2R1emlkbyBuYSB2ZXJzw6NvIDEuMS45MiBkbw0KKyAga2VybmVsIGRvIExpbnV4LCBlIMOpIG5vcm1hbG1lbnRlIGNoYW1hZG8gdGFtYsOpbSBkZSAvZGV2L3Zjc2Egb3UNCisgIC9kZXYvdmNzYTAgKGVtIHNpc3RlbWFzIGNvbSBkZXZmcyDDqSBjaGFtYWRvIC9kZXYvdmNjL2EpLiBQb3IgZXN0YQ0KKyAgcmF6w6NvLCBvIGtlcm5lbCBkbyBMaW51eCAxLjEuOTIgb3Ugc3VwZXJpb3Igw6kgbmVjZXNzw6FyaW8gc2UgbyBCUkxUVFkNCisgIGZvciB1dGlsaXphZG8gZGVzdGEgZm9ybWEuIENvbSBhIGNhcGFjaWRhZGUgZGU6DQorDQorICDCtyBQZXJtaXRlIEJSTFRUWSBhIHNlciBpbmljaWFkbyBtdWl0byBhbnRlcyBkYSBzZXHDvMOqbmNpYSBkZQ0KKyAgaW5pY2lhbGl6YcOnw6NvIGRvIHNpc3RlbWEuDQorDQorICDCtyBQZXJtaXRlIGEgdmlzdWFsaXphw6fDo28gZW0gQnJhaWxsZSBwYXJhIGVzdGFyIHRvdGFsbWVudGUgb3BlcmFjaW9uYWwNCisgIGR1cmFudGUgbyBsb2dpbiBkbyBwcm9tcHQuDQorDQorICDCtyBGYXogbXVpdG8gbWFpcyBmw6FjaWwgcGFyYSB1bSB1c3XDoXJpbyBlbSBCcmFpbGxlIHBhcmEgcmVhbGl6YXIgYQ0KKyAgaW5pY2lhbGl6YcOnw6NvIGRlIHRhcmVmYXMgZGUgYWRtaW5pc3RyYcOnw6NvIGRvIHNpc3RlbWEuDQorDQorICBVbSBwYXRjaCBwYXJhIG8gcHJvZ3JhbWEgZGUgdGVsYSDDqSBmb3JuZWNpZG8gKHZlciBvcyBzdWJkaXJldMOzcmlvcyBkb3MNCisgIFBhdGNoZXMpLiBFbGUgcGVybWl0ZSBxdWUgQlJMVFRZIGFjZXNzZSBpbWFnZW0gZGEgdGVsYSBkYSB0ZWxhIHZpYSANCisgIG1lbcOzcmlhIGNvbXBhcnRpbGhhZGEsIGUsIHBvcnRhbnRvLCBwZXJtaXRlIEJSTFRUWSBhIHNlciB1dGlsaXphZG9zIGNvbQ0KKyAgYmFzdGFudGUgZWZldGl2YW1lbnRlIGVtIHBsYXRhZm9ybWFzIHF1ZSBuw6NvIHTDqm0gYSBzdWEgcHLDs3ByaWEgdGVsYSBkZQ0KKyAgY29udGXDumRvIGluc3RhbGHDp8O1ZXMgZGUgaW5zcGVjw6fDo28uIEEgcHJpbmNpcGFsIGZyYXF1ZXphIGRhIGFib3JkYWdlbSBkZSB0ZWxhIMOpDQorICBxdWUgQlJMVFRZIG7Do28gcG9kZSBzZXIgaW5pY2lhZG8gYXTDqSBxdWUgbyB1c3XDoXJpbyBlc3RlamEgbG9nYWRvLg0KKw0KKyAgQlJMVFRZIGFwZW5hcyB0cmFiYWxoYSBjb20gY29uc29sZXMgZSBhcGxpY2HDp8O1ZXMuIFBvZGUgc2VyIHVzYWRvcyBlbQ0KKyAgYXBsaWNhw6fDtWVzIHNoZWxsLCBtYWlzIG7Do28gY29tIGFwbGljYcOnw7VlcyBxdWUgdXNhbSBjYXJhY3RlcmlzdGljYXMgVkdBIG91IHF1ZQ0KKyAgcmVxdWVyIGNvbnNvbGUgZ3LDoWZpY28gKGNvbW8gbyBzaXN0ZW1hIFggV2luZG93KS4NCisNCisgIFZvY8OqIGRldmVyw6EgdGFtYsOpbSwgY2xhcm8sIHBvc3N1aXIgdW0gZGlzcGxheSBCcmFpbGxlKHZlciBzZcOnw6NvIMKTRGlzcGxheSBkZQ0KKyAgQnJhaWxsZSBTdXBvcnRhZG/ClCBwYXJhIGNvbXBsZXRlciBhIGxpc3RhKS4gTsOzcyBlc3BlcmFtb3MgcXVlIG91dHJvcyBkaXNwbGF5cw0KKyAgc2VqYW0gc3Vwb3J0YWRvcyBubyBmdXR1cm8sIGVudMOjbywgc2Ugdm9jw6ogdGVtIGFsZ3VtYSBpbmZvcm1hw6fDo28gdMOpY25pY2EgZGUgdW0NCisgIGRpc3Bvc2l0aXZvIHF1ZSB2b2PDqiBnb3N0YXJpYSBkZSBzZXIgdmlzdG8gY29tIHN1cG9ydGFkbywgcG9yIGZhdm9yIGVudHJlIGVtDQorICBjb250YXRvICh2ZXIgc2XDp8OjbyDCk0luZm9ybWHDp8OjbyBkZSBjb250YXRvwpQpLg0KKw0KKyAgRmluYWxtZW50ZSwgdm9jw6ogcHJlY2lzYSBkZSBmZXJyYW1lbnRhcyBwYXJhIGNvbnN0cnVpciBvIGV4ZWN1dMOhdmVsIGENCisgIHBhcnRpciBkZSBzdWEgZm9udGU6IG1ha2UsIGNvbXBpbGFkb3JlcyBDIGUgQyArICssIHlhY2MsIGF3aywgZXRjLiBBcw0KKyAgZmVycmFtZW50YXMgZGUgZGVzZW52b2x2aW1lbnRvIGZvcm5lY2lkYXMgY29tIGEgZGlzdHJpYnVpw6fDo28gcGFkcsOjbyBkbw0KKyAgVW5peCBkZXZlcmlhIHNlciBzdWZpY2llbnRlLiANCisNCisgIDMgLSBQcm9jZXNzbyBkZSBjb21waWxhw6fDo28NCisgIA0KKyAgQlJMVFRZIHBvZGUgc2VyIGJhaXhhZG8gYSBwYXJ0aXIgZG8gc2V1IHNpdGUgKGNvbnN1bHRlIGEgc2Vjw6fDo28NCisgIEluZm9ybWHDp8O1ZXMgZGUgY29udGF0byBwYXJhIGEgc3VhIGxvY2FsaXphw6fDo28pLiBUb2RhcyBhcyByZWxlYXNlcyBzw6NvDQorICBmb3JuZWNpZGFzIGNvbXBhY3RhZGFzIMKTdGFyIGJhbGxzwpQuIFJlbGVhc2VzIG1haXMgcmVjZW50ZXMgdGFtYsOpbSBzw6NvDQorICBmb3JuZWNpZGFzIGNvbW8gYXJxdWl2b3MgUlBNIChSZWRIYXQgUGFja2FnZSBNYW5hZ2VyKS4gDQorDQorICAgICBFc3NhIGluZm9ybWHDp8OjbywgcHJvdmF2ZWxtZW50ZSBhdGluZ2l1IGEgc3VhIGN1cmlvc2lkYWRlLCBlIGFnb3JhIHZvY8OqDQorICBuw6NvIHBvZGUgZXNwZXJhciBwYXJhIGNvbWXDp2FyLiDDiSB1bWEgYm9hIGlkw6lpYSwgcG9yw6ltLCBxdWUgcHJpbWVpcm8gc2UNCisgIGZhbWlsaWFyaXphciBjb20gb3MgYXJxdWl2b3MgcXVlIHNlcsOjbyBmaW5hbG1lbnRlIGluc3RhbGFkb3MuDQorDQorICAzLjEgLSBJbnN0YWxhw6fDo28gZGEgaGVyYW7Dp2EgZGUgYXJxdWl2b3MNCisNCisgIFByb2Nlc3NvIGRlIGNvbXBpbGHDp8OjbyBkZXZlIHJlc3VsdGFyIG5hIGluc3RhbGHDp8OjbyBkb3Mgc2VndWludGVzDQorICBhcnF1aXZvczoNCisNCisgIC9iaW4vDQorDQorICBicmx0dHk6IE8gcHJvZ3JhbWEgQlJMVFRZLg0KKw0KKyAgYnJsdHR5LWluc3RhbGw6IFVtIHV0aWxpdMOhcmlvIHBhcmEgY29waWFyIEJSTFRUWSBoaWVyYXJxdWlhIGRlDQorICBhcnF1aXZvcyBpbnN0YWxhZG8gYSBwYXJ0aXIgZGUgdW0gbG9jYWwgcGFyYSBvdXRyby4NCisNCisgIGJybHR0eS1jb25maWc6IFVtIHV0aWxpdMOhcmlvIHF1ZSBkZWZpbmUgdW0gbsO6bWVybyBkZSB2YXJpw6F2ZWlzIGRlDQorICBhbWJpZW50ZSBwYXJhIHZhbG9yZXMgcXVlIHJlZmxldGVtIGEgaW5zdGFsYcOnw6NvIGF0dWFsIGRvIEJSTFRUWS4NCisgIA0KKyAgL2xpYi8NCisNCisgIGxpYmJybGFwaS5hOiBhcnF1aXZvIGVzdMOhdGljbyBkYSBJbnRlcmZhY2UgZGUgUHJvZ3JhbWHDp8OjbyBkZQ0KKyAgQXBsaWNhdGl2b3MuDQorDQorICBsaWJicmxhcGkuc286IG9iamV0byBkaW7Dom1pY28gY2FycmVnw6F2ZWwgcGFyYSBvIEludGVyZmFjZSBkZQ0KKyAgUHJvZ3JhbWHDp8OjbyBkZSBBcGxpY2F0aXZvcy4NCisNCisgIC9saWIvYnJsdHR5Lw0KKw0KKyAgQSBpbnN0YWxhw6fDo28gZG8gQlJMVFRZIG7Do28gcG9kZSB0ZXIgdG9kb3Mgb3Mgc2VndWludGVzIHRpcG9zIGRlDQorICBhcnF1aXZvcy4gRWxlcyBzw6NvIGNyaWFkb3MgYXBlbmFzIHF1YW5kbyBuZWNlc3PDoXJpbyBjb20gYmFzZSBuYXMNCisgIG9ww6fDtWVzIGRlIGNvbXBpbGHDp8OjbyBxdWUgdm9jw6ogc2VsZWNpb25hciAodmVyIHNlw6fDo28gT3DDp8O1ZXMgZGUNCisgIENvbXBpbGHDp8OjbykuDQorDQorICBicmx0dHktYnJsLmxzdDogVW1hIGxpc3RhIGRvcyBkcml2ZXJzIGRvIGRpc3BsYXkgYnJhaWxsZSwgcXVlIGZvcmFtDQorICBjb25zdHJ1w61kYXMgY29tbyBvYmpldG9zIGNvbXBhcnRpbGhhZG9zIGRpbmFtaWNhbWVudGUgY2FycmVnw6F2ZWlzLCBlLA0KKyAgcG9ydGFudG8sIHF1ZSBwb2RlIHNlciBzZWxlY2lvbmFkYSBlbSB0ZW1wbyBkZSBleGVjdcOnw6NvLiBDYWRhIGxpbmhhDQorICBjb25zaXN0ZSBkbyBjw7NkaWdvIGRlIGR1YXMgaWRlbnRpZmljYcOnw7VlcyBubyBjb2RpZ28gZG8gZHJpdmVyLCB1bQ0KKyAgY2FyYWN0ZXIgZGUgdGFidWxhw6fDo28uDQorDQorICBsaWJicmx0dHliZHJpdmVyLnNvLjE6IE8gZHJpdmVyIMOpIGNhcnJlZ8OhdmVsIGUgIGRpbmFtaWNvIHBhcmEgdW1hDQorICBsaW5oYSBCcmFpbGxlLCBvbmRlIG8gZHJpdmVyIMOpIGR1YXMgbGV0cmFzIGRvIGPDs2RpZ28gZGUgaWRlbnRpZmljYcOnw6NvDQorICBkbyBkcml2ZXIuDQorDQorICBicmx0dHktc3BrLmxzdDogQSBsaXN0YSBkZSBkcml2ZXJzIGRlIHNpbnRldGl6YWRvciBkZSB2b3ogcXVlIGZvcmFtDQorICBjb25zdHJ1w61kb3MgY29tbyBvYmpldG9zIGNvbXBhcnRpbGhhZG9zIGRpbmFtaWNhbWVudGUgY2FycmVnw6F2ZWlzLCBlLA0KKyAgcG9ydGFudG8sIHF1ZSBwb2RlIHNlciBzZWxlY2lvbmFkYSBlbSB0ZW1wbyBkZSBleGVjdcOnw6NvLiBDYWRhIGxpbmhhDQorICBjb25zaXN0ZSBkbyBjw7NkaWdvIGRlIGlkZW50aWZpY2HDp8OjbyBkZSBkdWFzIGxldHJhcyBwYXJhIHVtIGRyaXZlciwgdW0NCisgIGNhcmFjdGVyIGRlIHRhYnVsYcOnw6NvLCBlIHVtYSBkZXNjcmnDp8OjbyBkbyBzaW50ZXRpemFkb3IgZGUgdm96IHF1ZSBlc3NlDQorICBkcml2ZXIuDQorDQorICBsaWJicmx0dHlzZHJpdmVyLnNvLjE6IE8gZHJpdmVyIGNhcnJlZ8OhdmVsIGRpbmFtaWNhbWVudGUgcG9yIHVtDQorICBzaW50ZXRpemFkb3IgZGUgdm96LCBvbmRlIG8gZHJpdmVyIMOpIG8gZGUgZHVhcyBsZXRyYXMgZG8gY8OzZGlnbyBkZQ0KKyAgaWRlbnRpZmljYcOnw6NvIGRvIGRyaXZlci4NCisNCisgIC9saWIvYnJsdHR5L3J3Lw0KKyAgT3MgYXJxdWl2b3MgY3JpYWRvcyBlbSB0ZW1wbyBkZSBleGVjdcOnw6NvLCBwb3IgZXhlbXBsbywgw6kgbmVjZXNzw6FyaW8sDQorICBtYXMgZmFsdGEgcmVjdXJzb3MgZG8gc2lzdGVtYS4NCisNCisgIC9ldGMvDQorICBicmx0dHkuY29uZjogcGFkcsO1ZXMgZG8gc2lzdGVtYSBwYXJhIEJSTFRUWS4NCisgIGJybGFwaS5rZXk6IEEgY2hhdmUgZGUgYWNlc3NvIHBhcmEgQnJsQVBJLg0KKw0KKyAgL2V0Yy9icmx0dHkvDQorICBBIGluc3RhbGHDp8OjbyBkbyBCUkxUVFkgbsOjbyBwb2RlIHRlciB0b2RvcyBvcyBzZWd1aW50ZXMgdGlwb3MgZGUNCisgIGFycXVpdm9zLiBFbGVzIHPDo28gY3JpYWRvcyBhcGVuYXMgcXVhbmRvIG5lY2Vzc8OhcmlvIGNvbSBiYXNlIG5hcw0KKyAgb3DDp8O1ZXMgZGUgY29tcGlsYcOnw6NvIHF1ZSB2b2PDqiBzZWxlY2lvbmFyICh2ZXIgc2XDp8OjbyDCk09ww6fDtWVzIGRlDQorICBDb21waWxhw6fDo2/ClCkuDQorDQorICAJKi5jb25mOiBEcml2ZXIgZXNwZWPDrWZpY28gcGFyYSBjb25maWd1cmHDp8OjbyBkZSBkYWRvcy4gU2V1cyBub21lcw0KKyAgICAgIHPDo28gbWFpcyBvdSBtZW5vcyBjb21vIGJybHR0eS1kcml2ZXIuY29uZiwgb25kZSBkcml2ZXIgw6kgbyBkZSBkdWFzDQorICAgICAgbGV0cmFzIGRvIGPDs2RpZ28gZGUgaWRlbnRpZmljYcOnw6NvIG5vIGRyaXZlci4NCisNCisqLmF0YjogdGFiZWxhcyBkZSBhdHJpYnV0b3MuKHZlciBzZcOnw6NvIMKTVGFiZWxhcyBkZSBBdHJpYnV0b3PClCkgU2V1cyANCitub21lcyBwYXJlY2VtIG5hbWUuYXRiLg0KKyAgICAgICANCisgICAgICAqLmF0aTogSW5jbHVpciBhcnF1aXZvcyBkZSB0YWJlbGFzIGRlIGF0cmlidXRvcy4NCisgICAgICAgDQorKi5jdGI6IENvbnRyYcOnw6NvIHRhYmVsYXMuIChWZXIgc2XDp8OjbyDCk1RhYmVsYSBkZSBDb250cmHDp8Ojb8KUKS4gU2V1cyANCitub21lcyBwYXJlY2VtIGlkaW9tYSBsYW5ndWFnZS1jb3VudHJ5LWxldmVsLmN0Yi4NCisNCisgICAgICAqLmN0aTogSW5jbHVpciBhcnF1aXZvcyBwYXJhIHRhYmVsYXMgY29udHJhw6fDo28uDQorICAgICAgIA0KKyoua3RiOiBUYWJlbGFzIGRlIFRlY2xhcy4oVmVyIHNlw6fDo28gwpNUYWJlbGFzIGRlIFRlY2xhc8KUKS4gU2V1cyANCitub21lcyBwYXJlY2VtIG5hbWUua3RiLg0KKyAgICAgICANCisgICAgICAqLmt0aTogSW5jbHVpciBhcnF1aXZvcyBwYXJhIHRhYmVsYXMgZGUgdGVjbGFzLg0KKyAgICAgICANCisqLnR0YjogdGFiZWxhcyBkZSB0ZXh0by4gKFZlciBzZcOnw6NvIFRhYmVsYXMgZGUgVGV4dG8pLiBTZXVzIG5vbWVzIA0KK3BhcmVjZW0gbGFuZ3VhZ2UudHRiLg0KKyAgICAgICANCisgICAgICAqLnR0aTogSW5jbHVpciBhcnF1aXZvcyBkZSB0ZXh0byBwYXJhIHRhYmVsYXMuDQorICAgICAgIA0KKyouaGxwOiBEcml2ZXIgZXNwZWPDrWZpY28gcMOhZ2luYXMgZGUgYWp1ZGEuIFNldXMgbm9tZXMgbWFpcyBvdSBtZW5vcyANCitjb21vIGJydHR0eS1kcml2ZXIuaGxwLCBvbmRlIGRyaXZlciDDqSBvIGRlIGR1YXMgbGV0cmFzIGRvIGPDs2RpZ28gZGUgDQoraWRlbnRpZmljYcOnw6NvIGRvIGRyaXZlci4NCisNCisgIC92YXIvbGliL0JybEFQSS8NCisgIFPDo28gdXNhZG9zIHNvcXVldGVzIGxvY2FpcyBwYXJhIGNvbmV4w6NvIGNvbSBhIEludGVyZmFjZSBkZSBQcm9ncmFtYcOnw6NvDQorICBkZSBBcGxpY2F0aXZvcy4NCisNCisgIC9pbmNsdWRlLw0KKyAgQXJxdWl2b3MgZGUgY2FiZcOnYWxobyBDIHBhcmEgYSBJbnRlcmZhY2UgZGUgUHJvZ3JhbWHDp8OjbyBkZQ0KKyAgQXBsaWNhdGl2b3MuIFNldXMgbm9tZXMgcGFyZWNlbSBicmxhcGktZnVuY3Rpb24uaC4gTyBjYWJlw6dhbGhvDQorICBwcmluY2lwYWwgw6kgYnJsYXBpLmguDQorDQorICAvaW5jbHVkZS9icmx0dHkvDQorICBBcnF1aXZvcyBkZSBjYWJlw6dhbGhvIEMgcGFyYSBhY2Vzc2FyIGhhcmR3YXJlIGJyYWlsbGUuIFNldXMgbm9tZXMgc8Ojbw0KKyAgYnJsZGVmcy1kcml2ZXIuaCAob25kZSBkcml2ZXIgw6kgbyBkZSBkdWFzIGxldHJhcyBkbyBjw7NkaWdvIGRlDQorICBpZGVudGlmaWNhw6fDo28gZG8gZHJpdmVyKS4gTyBjYWJlw6dhbGhvIGJybGRlZnMuaCBlIGFwaS5oIHPDo28gZm9ybmVjaWRvcw0KKyAgcGFyYSBjb21wYXRpYmlsaWRhZGUgY29tIHZlcnPDtWVzIGFudGVyaW9yZXMgZSBuw6NvIGRldmUgc2VyIHVzYWRvLg0KKw0KKyAgL21hbi8NCisgIFDDoWdpbmFzIG1hbi4NCisNCisgIG1hbjEvbmFtZS4xOiBww6FnaW5hcyBtYW4gcGFyYSBjb21hbmRvcyBkbyB1c3XDoXJpbyBCUkxUVFktcmVsYWNpb25hZG9zLg0KKyAgbWFuMy9uYW1lLjM6IHDDoWdpbmFzIG1hbiBwYXJhIHJvdGluYXMgZGEgYmlibGlvdGVjYSBkZSBJbnRlcmZhY2UgZGUNCisgIFByb2dyYW1hw6fDo28gZGUgQXBsaWNhdGl2b3MuDQorDQorICBBbGd1bnMgYXJxdWl2b3Mgb3BjaW9uYWlzIHF1ZSB2b2PDqiBkZXZlIGVzdGFyIGNpZW50ZSBkZSwgYXBlc2FyIGRlIG7Do28NCisgIHNlcmVtIHBhcnRlIGRhIGhpZXJhcnF1aWEgZGUgYXJxdWl2b3MgaW5zdGFsYWRvcywgc8OjbzoNCisNCisgIC9ldGMvYnJsdHR5LmNvbmYNCisgIE8gc2lzdGVtYSBkZSBhcnF1aXZvIGRlIGNvbmZpZ3VyYcOnw6NvIHBhZHLDo28uIMOJIGNyaWFkbyBwZWxvDQorICBhZG1pbmlzdHJhZG9yIGRvIHNpc3RlbWEuIFZlciBzZcOnw6NvIMKTQXJxdWl2byBkZSBDb25maWd1cmHDp8Ojb8KULg0KKw0KKyAgL2V0Yy9icmx0dHktZHJpdmVyLnByZWZzDQorICBPIGFycXVpdm8gZGUgY29uZmlndXJhw6fDtWVzIGZvcmFtIHNhbHZvcyBhcyBwcmVmZXLDqm5jaWFzIChkcml2ZXIgw6kgdW0NCisgIGPDs2RpZ28gZGUgZHVhcyBsZXRyYXMgZGUgaWRlbnRpZmljYcOnw6NvIGRvIGRyaXZlcikuIMOJIGNyaWFkbyBwZWxvDQorICBjb21hbmRvIFBSRUZTQVZFLiBWZXIgc2XDp8OjbyDCk1ByZWZlcsOqbmNpYSBkZSBDb25maWd1cmHDp8Ojb8KULg0KKw0KKyAgMy4yIC0gSW5zdGFsYcOnw6NvIGEgcGFydGlyIGRvIFRhciBCYWxsDQorDQorICAgICBFc3RlIHBhc3NvIMOpIGFwZW5hcyBxdWFuZG8gc2UgcXVlciBpbnN0YWxhciBhcGVuYXMgbyBCUkxUVFkNCisgIHJhcGlkYW1lbnRlLCDDqSBhY3JlZGl0YXIgcXVlIG9zIHBhZHLDtWVzIGVzdGVqYW0gY29ycmV0b3MuDQorIA0KKyAgICAgMS4gQmFpeGUgbyBjw7NkaWdvLiBVbSBhcnF1aXZvIGNoYW1hZG8gYnJsdHR5LXJlbGVhc2UudGFyLmd6LCBwb3INCisgIGV4ZW1wbG8sIGJybHR0eS0zLjAudGFyLmd6Lg0KKw0KKyAgICAgMi4gRGVzY29tcGFjdGUgbyBjw7NkaWdvIGZvbnRlIGVtIHN1YSBlc3RydXR1cmEgaGllcsOhcnF1aWNhIG5hdGl2YS4NCisgDQorICBFeC46IHRhci16eHZmIGJybHR0eS1yZWxlYXNlLnRhci5nei4gDQorDQorICBJc3NvIGRldmUgY3JpYXIgbyBkaXJldMOzcmlvIGJybHR0eS1yZWxlYXNlLg0KKw0KKyAgMy4gTXVkZSBwYXJhIG8gZGlyZXTDs3JpbyBmb250ZSwgY29uZmlndXJlLCBjb21waWxlIGUgaW5zdGFsZSBCUkxUVFkuDQorIA0KKyAgCWNkIGJybHR0eS1yZWxlYXNlDQorICAJLi9jb25maWd1cmUgDQorICAJbWFrZSBpbnN0YWxsDQorIA0KKyAgSXN0byBkZXZlIHNlciBmZWl0byBjb21vIHJvb3QuIA0KKyANCisgICAgIFBhcmEgZGVzaW5zdGFsYXIgQlJMVFRZLCBmYcOnYToNCisNCisgIAljZCBicmx0dHktcmVsZWFzZQ0KKyAgICAgIG1ha2UgdW5pbnN0YWxsDQorDQorICAzLjIuMSBPcMOnw7VlcyBkZSBDb21waWxhw6fDo28NCisNCisgICAgIE8gcHJpbWVpcm8gcGFzc28gbmEgY29uc3RydcOnw6NvIEJSTFRUWSDDqSBjb25maWd1csOhLWxvIHBhcmEgbyBzZXUNCisgIHNpc3RlbWEgZS9vdSBwYXJhIHN1YXMgbmVjZXNzaWRhZGVzIHBlc3NvYWlzLiBJc3RvIMOpIGZlaXRvIGF0cmF2w6lzIGRhDQorICBleGVjdcOnw6NvIGRvIHNjcmlwdCBubyBkaXJldMOzcmlvIEJSTFRUWSBkZSBuw612ZWwgc3VwZXJpb3IuIE7Ds3MgdGVudGFtb3MNCisgIGZhemVyIG8gYWp1c3RlIHBhZHLDo28gbyBjYXNvIG1haXMgY29tdW0sIGVudMOjbywgc3Vwb25kbyBxdWUgdm9jw6ogbsOjbw0KKyAgZXN0w6EgdGVudGFuZG8gZmF6ZXIgYWxndW1hIGNvaXNhIGZvcmEgZG8gY29tdW0sIHZvY8OqIHBvZGUgbsOjbyBwcmVjaXNhcg0KKyAgZmF6ZXIgbmFkYSBtYWlzIGNvbXBsaWNhZG8gZG8gcXVlIGludm9jYXIgbyBzY3JpcHQgc2VtIGVzcGVjaWZpY2FyDQorICB0b2RhcyBvcMOnw7Vlcy4NCisNCisgIC4vY29uZmlndXJlDQorDQorICBTZSwgbm8gZW50YW50bywgdm9jw6ogdGVtIGFsZ3VtYXMgbmVjZXNzaWRhZGVzIGVzcGVjaWFpcywgb3UgbWVzbW8gc2UNCisgIHZvY8OqIGVzdMOhIGFwZW5hcyBzZSBhdmVudHVyYW5kbywgdm9jw6ogZGV2ZSBkZXNjb2JyaXIgcXVhaXMgc8OjbyBzdWFzDQorICBlc2NvbGhhcy4NCisNCisgIC4vY29uZmlndXJlIC0taGVscA0KKyANCisgICAgIFZvY8OqIHRhbWLDqW0gZGV2ZSB2ZXJpZmljYXIgc2UgbyBhcnF1aXZvIFJFQURNRSBubyBzdWJkaXJldMOzcmlvIHF1ZQ0KKyAgY29udMOpbSBvIGRyaXZlciBwYXJhIG8gc2V1IGRpc3BsYXkgQnJhaWxsZSBwYXJhIGFsZ3VtYXMgaW5zdHJ1w6fDtWVzDQorICBhZGljaW9uYWlzIGRlIGV4aWJpw6fDo28gZXNwZWPDrWZpY28uIA0KKyANCisgICAgIDMuMi4xLjEgUGFkcsO1ZXMgZG8gU2lzdGVtYSANCisgDQorICAgICAtLXdpdGgtZHJpdmVyLWJyYWlsbGUgPSBkcml2ZXIgDQorICAgICBFc3BlY2lmaWNhciBvcyBkcml2ZXJzIGRvIGRpc3BsYXkgYnJhaWxsZSwgcXVlIGRldmVtIGVzdGFyIGxpZ2Fkb3MgYW8NCisgIGJpbsOhcmlvIEJSTFRUWS4gT3MgZHJpdmVycyBxdWUgbsOjbyBlc3TDo28gbGlzdGFkb3MgcG9yIGVzdGEgb3DDp8OjbyBzw6NvDQorICBjb25zdHJ1w61kYXMgY29tbyBvYmpldG9zIGNvbXBhcnRpbGhhZG9zIGRpbmFtaWNhbWVudGUgY2FycmVnw6F2ZWlzIGUNCisgIGFpbmRhIHBvZGUgc2VyIHNlbGVjaW9uYWRhIGVtIHRlbXBvIGRlIGV4ZWN1w6fDo28uIENhZGEgZHJpdmVyIGRldmUgc2VyDQorICBpZGVudGlmaWNhZG8gcGVsbyBzZXUgY8OzZGlnbyBkZSBkdWFzIGxldHJhcyBkZSBpZGVudGlmaWNhw6fDo28gZG8gZHJpdmVyDQorICBvdSBwZWxvIHNldSBub21lIHByw7NwcmlvIChjb21wbGV0byBvdSBhYnJldmlhZG8pLiBPcyBpZGVudGlmaWNhZG9yZXMNCisgIGRvIGRyaXZlciBkZXZlIHNlciBzZXBhcmFkYSBkYSBvdXRyYSBwb3IgdW1hIMO6bmljYSB2w61yZ3VsYS4gU2UgdW0NCisgIGlkZW50aWZpY2Fkb3IgZG8gZHJpdmVyIMOpIHByZWNlZGlkbyBwb3IgdW0gc2luYWwgZGUgbWVub3MgKC0pLCBlbnTDo28NCisgIGVzc2UgZHJpdmVyIMOpIGV4Y2x1w61kbyBkYSBjb21waWxhw6fDo28uIFF1YWxxdWVyIHVtYSBkYXMgc2VndWludGVzDQorICBwYWxhdnJhcyB0YW1iw6ltIHBvZGUgc2VyIHVzYWRvIGNvbW8gbyBvcGVyYW5kbyBlc3RhIG9ww6fDo286DQorDQorICBhbGwgDQorICBMaW5rIGRlIHRvZG9zIG9zIGRyaXZlcnMgcGFyYSBvIGJpbsOhcmlvLiBOw6NvIGNvbnN0cnVhIHF1YWxxdWVyIHVtDQorICBkZWxlcyBjb21vIG9iamV0b3MgY29tcGFydGlsaGFkb3MgZGluYW1pY2FtZW50ZSBjYXJyZWfDoXZlaXMuIEVzdGENCisgIHBhbGF2cmEgdGFtYsOpbSBwb2RlIHNlciBlc3BlY2lmaWNhZG8gY29tbyBvIMO6bHRpbW8gZWxlbWVudG8gZGUgdW1hDQorICBsaXN0YSBkZSBkcml2ZXIuIElzdG8gw6kgY29tbyBlc3BlY2lmaWNhciBvIGRyaXZlciBkZWZhdWx0IHF1YW5kbyB0b2Rvcw0KKyAgb3MgZHJpdmVycyBkZXZlbSBzZXIgbGlnYWRvcyBkZW50cm8uDQorDQorICAtYWxsOiBBcGVuYXMgY29uc3RydWlyIG9zIGNvbmR1dG9yZXMgcXVlIHRlbmhhbSBzaWRvIGluY2x1w61kb3MgDQorICBleHBsaWNpdGFtZW50ZSBhdHJhdsOpcyBkZXN0YSBvcMOnw6NvLg0KKw0KKyAgbm86IE7Do28gY29uc3RydWEgcXVhbHF1ZXIgZHJpdmVyIGVtIHR1ZG8uIElzc28gw6kgZXF1aXZhbGVudGUgYQ0KKyAgZXNwZWNpZmljYXIgLS13aXRob3V0LWJyYWlsbGUtZHJpdmVyLg0KKw0KKyAgeWVzOiBDb25zdHJ1aXIgdG9kb3Mgb3MgZHJpdmVycyBjb21vIG9iamV0b3MgY29tcGFydGlsaGFkb3MNCisgIGRpbmFtaWNhbWVudGUgY2FycmVnw6F2ZWlzLiBOw6NvIGxpZ2FyIHF1YWxxdWVyIHVtIGRlbGVzIGRlbnRybyBkbw0KKyAgYmluw6FyaW8uIElzc28gw6kgZXF1aXZhbGVudGUgYSBlc3BlY2lmaWNhciAtLXdpdGgtYnJhaWxsZS1kcml2ZXIuDQorDQorICBWZXIgYXJxdWl2byBjb25maWd1cmHDp8OjbyBlIGEgbGluaGEgZGUgb3DDp8OjbyBkZSBjb21tYW5kbyDClmIgcGFyYSBhIHNlbGXDp8OjbyBkZQ0KKyAgdGVtcG8gZGUgZXhlY3XDp8Ojby4NCisNCisgIC0td2l0aC1icmFpbGxlLXBhcmFtZXRlcnM9IFtkcml2ZXI6XW5hbWUgPSB2YWx1ZSwgLi4uDQorICBFc3BlY2lmaXF1ZSBhcyBjb25maWd1cmHDp8O1ZXMgcGFkcsOjbyBkZSBwYXLDom1ldHJvIHBhcmEgb3MgZHJpdmVycyBkbw0KKyAgZGlzcGxheSBicmFpbGxlLiBTZSBvIG1lc21vIHBhcsOibWV0cm8gw6kgZXNwZWNpZmljYWRvIG1haXMgZGUgdW1hIHZleiwNCisgIGEgc3VhIGF0cmlidWnDp8OjbyDDqSB1c2FkYS4gU2UgdW0gbm9tZSBkZSBwYXLDom1ldHJvIMOpIHF1YWxpZmljYWRhIHBvciB1bQ0KKyAgZHJpdmVyLCAodmVyIHNlw6fDo28gwpNDw7NkaWdvcyBkZSBJZGVudGlmaWNhw6fDo28gZGUgRHJpdmVyc8KUKSBlbnTDo28gZXNzYQ0KKyAgY29uZmlndXJhw6fDo28gc8OzIHNlIGFwbGljYSBhbyBkcml2ZXIsIHNlbsOjbyDDqSwgZW50w6NvLCBxdWUgc2UgYXBsaWNhIGENCisgIHRvZG9zIG9zIGRyaXZlcnMuIFBhcmEgZXNzYSBkZXNjcmnDp8OjbyBkb3MgcGFyw6JtZXRyb3MgYWNlaXRvcyBwb3IgYQ0KKyAgZXNwZWNpZmljYcOnw6NvIGRlIGRyaXZlciwgcG9yIGZhdm9yIHZlciBuYSBkb2N1bWVudGHDp8OjbyBkbyBkcml2ZXIuIFZlcg0KKyAgY29uZmlndXJhw6fDo28gZGUgYXJxdWl2byDCk2JyYWlsbGUtcGFyYW1ldGVyc8KUIG91IGxpbmhhIGRlIGNvbWFuZG8gwpZiLiAgDQorIA0KKyAgICAgLS13aXRoLWJyYWlsbGUtZGV2aWNlID0gZGV2aWNlLCAuLi4gDQorICAgICBFc3BlY2lmaWNhIG8gZGlzcG9zaXRpdm8gcGFkcsOjbyBwYXJhIG8gcXVhbCBvIGRpc3BsYXkgYnJhaWxsZSBlc3TDoQ0KKyAgbGlnYWRvLiAoVmVyIHNlw6fDo28gRXNwZWNpZmljYcOnw6NvIGRlIERpc3Bvc2l0aXZvIEJyYWlsbGUpLiBTZSBlc3NhDQorICBvcMOnw6NvIG7Do28gZm9yIGVzcGVjaWZpY2FkYSwgZW50w6NvIHVzYjogw6kgYXNzdW1pZG8gc2UgbyBzdXBvcnRlIFVTQg0KKyAgZXN0w6EgZGlzcG9uw612ZWwsIGUgdW0gc2lzdGVtYSBvcGVyYWNpb25hbCB0ZW0gdW0gY2FtaW5obyBhcHJvcHJpYWRvDQorICBwYXJhIGEgcG9ydGEgcHJpbcOhcmlhIHNlcmlhbCAoZGlzcG9zaXRpdm8pIMOpIGFzc3VtaWRvIHNlIG7Do28uIA0KKyANCisgICAgIC0td2l0aC1saWJicmFpbGxlID0gZGlyZWN0b3J5IA0KKyAgICAgRXNwZWNpZmlxdWUgbyBsb2NhbCBkYSBpbnN0YWxhw6fDo28gZG8gcGFjb3RlIExpYmJyYWlsbGUsIGUgY29tcGlsYXIgbw0KKyAgZHJpdmVyIGRpc3BsYXkgYnJhaWxsZSBMaWJicmFpbGxlIChWZXIgc2XDp8OjbyDCk1Jlc3RyacOnw7VlcyBkZQ0KKyAgQ29tcGlsYcOnw6NvwpQpLiBRdWFscXVlciB1bWEgZGFzIHNlZ3VpbnRlcyBwYWxhdnJhcyB0YW1iw6ltIHBvZGUgc2VyDQorICB1c2FkbyBjb21vIG8gb3BlcmFkbyBwb3IgZXNzYSBvcMOnw6NvOg0KKw0KKyAgbm8NCisgIE7Do28gY29tcGlsYXIgbyBkcml2ZXIuIElzc28gw6kgZXF1aXZhbGVudGUgYSBlc3BlY2lmaWNhcg0KKyAgLS13aXRob3V0LWxpYmJyYWlsbGUuDQorDQorICBZZXMNCisgIENvbXBpbGFyIG8gZHJpdmVyIHNlIG8gcGFjb3RlIHBvZGUgc2VyIGVuY29udHJhZG8gZW0gL3VzciwgL3Vzci9sb2NhbCwNCisgIC91c3IvbG9jYWwvTGliYnJhaWxsZSwgL3Vzci9sb2NhbC9saWJicmFpbGxlLCAvb3B0L0xpYmJyYWlsbGUsIG91DQorICAvb3B0L2xpYmJyYWlsbGUuIElzc28gw6kgZXF1aXZhbGVudGUgYSBlc3BlY2lmaWNhciAtLXdpdGgtbGliYnJhaWxsZS4NCisNCisgIC0td2l0aC10ZXh0LXRhYmxlPWZpbGUNCisgICAgIEVzcGVjaWZpcXVlIHRhYmVsYSB0ZXh0byBidWlsZC1pbiAocmV0b3JubykoVmVyIHNlw6fDo28gwpNUYWJlbGFzIGRlDQorICBUZXh0b8KUKS4gQSB0YWJlbGEgZXNwZWNpZmljYWRhIMOpIGxpZ2FkYSBhbyBiaW7DoXJpbyBCUkxUVFksIGUgw6kgdXNhZG8NCisgIHRhbnRvIGVtIGZhbGhhcyBkZSBhdXRvc2VsZcOnw6NvIHF1YW50byBuYSBzb2xpY2l0YcOnw6NvIGRlIHRhYmVsYSBxdWUgbsOjbw0KKyAgcG9kZSBzZXIgY2FycmVnYWRvLiBPIGNhbWluaG8gYWJzb2x1dG8gcGFyYSB1bWEgdGFiZWxhIGZvcmEgZG8gY8OzZGlnbw0KKyAgZm9udGUgcG9kZSBzZXIgZXNwZWNpZmljYWRvLiBBIGV4dGVuc8OjbyDCky50dGLClCDDqSBvcGNpb25hbC4gRXN0YQ0KKyAgY29uZmlndXJhw6fDo28gcG9kZSBzZXIgYWx0ZXJhZGEgY29tIGEgcHJlZmVyw6puY2lhIFRhYmVsYSBkZSB0ZXh0by4gU2UNCisgIGVzdGEgb3DDp8OjbyBuw6NvIGZvciBlc3BlY2lmaWNhZGEsIGVudMOjbyBlbi1uYWJjYywgbm9ybWFsbWVudGUoQW3DqXJpY2ENCisgIGRvIE5vcnRlKSB1c2EgOCBwb250b3MgdmVyIMKTQ8OzZGlnbyBCcmFpbGxlIE5vcnRlLUFtZXJpY2Fub8KULiBWZXINCisgIGNvbmZpZ3VyYcOnw6NvIGRlIMKTVGFiZWxhIGRlIFRleHRvwpQgb3UgY29tYW5kbyDClnQuIEVzdGEgY29uZmlndXJhw6fDo28NCisgIHBvZGUgc2VyIG11ZGFkYSBjb20gYSBwcmVmZXLDqm5jaWEgwpNUYWJlbGEgZGUgVGV4dG/ClC4gDQorIA0KKyAgICAgLS13aXRoLWF0dHJpYnV0ZXMtdGFibGU9ZmlsZSANCisgICAgIEVzcGVjaWZpcXVlIGEgdGFiZWxhIHRleHRvIGRlIGF0cmlidXRvcyBidWlsdC1pbiAocmV0b3JubykoVmVyIHNlw6fDo28NCisgIMKTQXRyaWJ1dG9zIGRlIFRyYWR1w6fDo2/ClCkuIEEgdGFiZWxhIGVzcGVjaWZpY2FkYSDDqSBsaWdhZGEgYW8gYmluw6FyaW8NCisgIEJSTFRUWSwgZSDDqSB1c2FkbyBxdWFuZG8gYSB0YWJlbGEgc29saWNpdGFkYSBuw6NvIHBvZGUgc2VyIGNhcnJlZ2FkYS4NCisgIGNhbWluaG8gYWJzb2x1dG8gcGFyYSB1bWEgdGFiZWxhIGZvcmEgZG8gY8OzZGlnbyBmb250ZSBwb2RlIHNlcg0KKyAgZXNwZWNpZmljYWRvLiBBIGV4dGVuc8OjbyBkbyDCky5hdGLClCDDqSBvcGNpb25hbC4gU2UgZXNzYSBvcMOnw6NvIG7Do28gZm9yDQorICBlc3BlY2lmaWNhZGEsIGVudMOjbyBvcyBhdHJpYnV0b3Mgc8OjbyBhc3N1bWlkb3MuIE11ZGUgbyBhdHJpYnV0byBzZQ0KKyAgdm9jw6ogZ29zdGFyaWEgcXVlIGVsZSBmb3NzZSBmZWl0byDDoCBtb2RhIGFudGlnYS4gVmVqYSBhIHRhYmVsYQ0KKyAgYXRyaWJ1dG9zIGRlIGFycXVpdm8gZGUgY29uZmlndXJhw6fDo28gZSB1bWEgb3DDp8OjbyBkZSBsaW5oYSBkZSBjb21hbmRvDQorICBwYXJhIHNlbGXDp8OjbyBkZSB0ZW1wbyBkZSBleGVjdcOnw6NvIC1hLiBFc3RhIGNvbmZpZ3VyYcOnw6NvIHBvZGUgc2VyDQorICBhbHRlcmFkYSBjb20gYSBwcmVmZXLDqm5jaWEgYXRyaWJ1dG9zIGRhIHRhYmVsYS4NCisNCisgIC0td2l0aC1zcGVlY2gtZHJpdmVyID0gZHJpdmVyIA0KKyAgICAgRXNwZWNpZmljYXIgb3MgZHJpdmVycyBkZSBzaW50ZXRpemFkb3IgZGUgdm96IHF1ZSBzw6NvIGxpZ2Fkb3MgYW8NCisgIGJpbsOhcmlvIEJSTFRUWS4gRXNzZXMgZHJpdmVycyBuw6NvIGVzdMOjbyBsaXN0YWRvcyBuZXN0YSBvcMOnw6NvIHPDo28NCisgIGNvbnN0cnXDrWRhcyBjb21vIG9iamV0b3MgY29tcGFydGlsaGFkb3MgZGluYW1pY2FtZW50ZSBjYXJyZWfDoXZlaXMgZQ0KKyAgYWluZGEgcG9kZSBzZXIgc2VsZWNpb25hZG8gZW0gdGVtcG8gZGUgZXhlY3XDp8Ojby4gQ2FkYSBkcml2ZXIgZGV2ZSBzZXINCisgIGlkZW50aWZpY2FkbyBwZWxvIHNldSBjw7NkaWdvIGRlIGR1YXMgbGV0cmFzIGRlIGlkZW50aWZpY2HDp8OjbyBkbyBkcml2ZXINCisgIG91IHBlbG8gc2V1IG5vbWUgcHLDs3ByaW8gKGNvbXBsZXRvIG91IGFicmV2aWFkbykuIE9zIGlkZW50aWZpY2Fkb3Jlcw0KKyAgZG8gZHJpdmVyIGRldmUgc2VyIHNlcGFyYWRvcyBwb3IgdW1hIMO6bmljYSB2w61yZ3VsYS4gU2UgaWRlbnRpZmljYWRvcg0KKyAgZG8gZHJpdmVyIMOpIHByZWNlZGlkbyBwb3IgdW0gc2luYWwgZGUgbWVub3MgKC0pLCBlbnTDo28gZXNzZSBkcml2ZXIgw6kNCisgIGV4Y2x1w61kbyBkYSBjb21waWxhw6fDo28uIFF1YWxxdWVyIHVtYSBkYXMgc2VndWludGVzIHBhbGF2cmFzIHRhbWLDqW0NCisgIHBvZGUgc2VyIHVzYWRhcyBjb21vIG9wZXJhZG9yZXMgZXN0YSBvcMOnw6NvOg0KKw0KKyAgYWxsDQorICBsaW5rIGRlIHRvZG9zIG9zIGRyaXZlcnMgcGFyYSBvIGJpbsOhcmlvLiBOw6NvIGNvbXBpbGEgcXVhbHF1ZXIgdW0NCisgIGRlbGVzIGNvbW8gb2JqZXRvcyBjb21wYXJ0aWxoYWRvcyBkaW5hbWljYW1lbnRlIGNhcnJlZ8OhdmVpcy4gRXN0YQ0KKyAgcGFsYXZyYSB0YW1iw6ltIHBvZGUgc2VyIGVzcGVjaWZpY2FkYSBjb21vIG8gw7psdGltbyBlbGVtZW50byBkZSB1bWENCisgIGxpc3RhIGRlIGRyaXZlci4gSXN0byDDqSBjb21vIGVzcGVjaWZpY2FyIG8gZHJpdmVyIGRlZmF1bHQgcXVhbmRvIHRvZG9zDQorICBvcyBkcml2ZXJzIGRldmVtIHNlciBsaWdhZG9zLiANCisgICAgICAgICAgICAgIA0KKyAgLWFsbA0KKyAgYXBlbmFzIGNvbnN0cnVpciBvcyBkcml2ZXJzIHF1ZSB0ZW5oYW0gc2lkbyBpbmNsdcOtZG9zIGV4cGxpY2l0YW1lbnRlDQorICBhdHJhdsOpcyBkZXN0YSBvcMOnw6NvLg0KKw0KKyAgbm8NCisgIG7Do28gY29uc3RydWEgcXVhbHF1ZXIgZHJpdmVyLiBJc3NvIMOpIGVxdWl2YWxlbnRlIGEgZXNwZWNpZmljYXINCisgIHdpdGhvdXQtc3BlZWNoLWRyaXZlci4NCisNCisgIHllcw0KKyAgY29tcGlsYXIgdG9kb3Mgb3MgZHJpdmVycyBjb21vIG9iamV0b3MgY29tcGFydGlsaGFkb3MgZGluYW1pY2FtZW50ZQ0KKyAgY2FycmVnw6F2ZWlzLiBOw6NvIGxpZ2FyIHF1YWxxdWVyIHVtIGRlbGVzIGRlbnRybyBkbyBiaW7DoXJpby4gSXNzbyDDqQ0KKyAgZXF1aXZhbGVudGUgYSBlc3BlY2lmaWNhciAtLXdpdGgtc3BlZWNoLWRyaXZlci4NCisNCisgICAgIFZlamEgYSBjb25maWd1cmHDp8OjbyBkbyBhcnF1aXZvIMKTc3BlZWNoLWRyaXZlcsKUIGUgYSBvcMOnw6NvIC1zIGRlIGxpbmhhDQorICBkZSBjb21hbmRvIHBhcmEgc2VsZcOnw6NvIGRlIHRlbXBvIGRlIGV4ZWN1w6fDo28uIA0KKw0KKyAgLS13aXRoLXNwZWVjaC1wYXJhbWV0ZXJzID0gW2RyaXZlcjpdbmFtZSA9IHZhbHVlLCAuLi4gDQorICAgICBFc3BlY2lmaXF1ZSBvcyBwYXLDom1ldHJvcyBkYXMgY29uZmlndXJhw6fDtWVzIHBhZHLDo28gcGFyYSBvcyBkcml2ZXJzIGRlDQorICBzaW50ZXRpemFkb3IgZGUgdm96LiBTZSBvIG1lc21vIHBhcsOibWV0cm8gw6kgZXNwZWNpZmljYWRvIG1haXMgZGUgdW1hDQorICB2ZXouIFNlIHVtIG5vbWUgZGUgcGFyw6JtZXRybyDDqSBxdWFsaWZpY2FkbyBwb3IgdW0gZHJpdmVyIChWZXIgQ8OzZGlnbw0KKyAgZGUgSWRlbnRpZmljYcOnw6NvIGRlIERyaXZlcnMpLCBlbnTDo28gZXNzYSBjb25maWd1cmHDp8OjbyBzw7Mgc2UgYXBsaWNhDQorICBuZXNzZSBkcml2ZXIuIFBhcmEgb2J0ZXIgdW1hIGRlc2NyacOnw6NvIGRvcyBwYXLDom1ldHJvcyBhY2VpdG9zIHBvciB1bQ0KKyAgZHJpdmVyIGVzcGVjw61maWNvLCBjb25zdWx0ZSBhIGRvY3VtZW50YcOnw6NvIGRvIGRyaXZlci4gVmVyIGNvbmZpZ3VyYcOnw6NvDQorICDCk3NwZWVjaC1wYXJhbWV0ZXJzwpQgb3UgY29tYW5kbyDCky1zwpQuIA0KKyANCisgICAgIC0td2l0aC1mbGl0ZT1kaXJlY3RvcnkgIA0KKyAgICAgRXNwZWNpZmlxdWUgbyBsb2NhbCBpbnN0YWxhw6fDo28gZG8gRmVzdGl2YWxMaXRlIG5vIHBhY290ZSB0ZXh0LXRvDQorICBzcGVlY2ggZSBjb21waWxhIG8gZHJpdmVyIHNpbnRldGl6YWRvciBkZSB2b3ogRmVzdGl2YWxMaXRlIChWZXINCisgIMKTUmVzdHJpw6fDtWVzIGRlIENvbXBpbGHDp8Ojb8KUKS4gUXVhbHF1ZXIgdW1hIGRhcyBzZWd1aW50ZXMgcGFsYXZyYXMNCisgIHRhbWLDqW0gcG9kZSBzZXIgdXNhZG8gY29tbyBvIG9wZXJhZG9yZXMgZXN0YSBvcMOnw6NvOg0KKw0KKyAgbm8NCisgIG7Do28gY29tcGlsYXIgbyBkcml2ZXIuIElzc28gw6kgZXF1aXZhbGVudGUgYSBlc3BlY2lmaWNhciDClndpdGhvdXQNCisgIGZsaXRlLg0KKw0KKyAgeWVzDQorICBjb21waWxhciBvIGRyaXZlciBzZSBvIHBhY290ZSBwb2RlIHNlciBlbmNvbnRyYWRvIGVtIC91c3IsIC91c3IvbG9jYWwsDQorICAvdXNyL2xvY2FsL0Zlc3RpdmFsTGl0ZSwgL3Vzci9sb2NhbC9mbGl0ZSwgL29wdC9GZXN0aXZhbExpdGUsIG91DQorICAvb3B0L2ZsaXRlLiBJc3NvIMOpIGVxdWl2YWxlbnRlIGEgZXNwZWNpZmljYXIgLS13aXRoLWZsaXRlLg0KKyANCisgICAgIC0td2l0aC1mbGl0ZS1sYW5ndWFnZT1sYW5ndWFnZSANCisgICAgIEVzcGVjaWZpcXVlIG8gaWRpb21hIHVzYWRvIHF1ZSBvIHRleHQtdG8tc3BlZWNoIGRvIEZlc3RpdmFsTGl0ZS4gTw0KKyAgaWRpb21hIHBhZHLDo28gw6kgVVNFTkdMSVNILiANCisgDQorICAgICAtLXdpdGgtZmxpdGUtbGV4aWNvbj1sZXhpY29uICANCisgICAgIEVzcGVjaWZpcXVlIG8gbMOpeGljbyBxdWUgbyB0ZXh0LXRvLXNwZWVjaCBGZXN0aXZhbExpdGUgdXNhLiBPIGzDqXhpY28NCisgIHBhZHLDo28gw6kgY211bGV4LiANCisgDQorICAgICAtLXdpdGgtZmxpdGUtdm9pY2U9dm9pY2UgIA0KKyAgICAgRXNwZWNpZmlxdWUgYSB2b3ogcXVlIG8gdGV4dC10by1zcGVlY2ggRmVzdGl2YWxMaXRlIHVzYS4gQSB2b3ogcGFkcsOjbw0KKyAgw6kgY211X3VzX2thbDE2LiANCisNCisgIC0tIHdpdGgtbWlrcm9wdWhlPWRpcmVjdG9yeSAgDQorICAgICBFc3BlY2lmaXF1ZSBvIGxvY2FsIGluc3RhbGHDp8OjbyBkbyBwYWNvdGUgdGV4dC10by1zcGVlY2ggZGEgTWlrcm9wdWhlLA0KKyAgZSBjb21waWxhciBvIGRyaXZlciBzaW50ZXRpemFkb3IgZGUgdm96IE1pa3JvcHVoZSAoVmVyIFJlc3RyacOnw7VlcyBkZQ0KKyAgQ29tcGlsYcOnw6NvKS4gUXVhbHF1ZXIgdW1hIGRhcyBzZWd1aW50ZXMgcGFsYXZyYXMgdGFtYsOpbSBwb2RlIHNlciB1c2Fkbw0KKyAgY29tbyBvIG9wZXJhbmRvIGVzdGEgb3DDp8OjbzoNCisgDQorICAgICBubw0KKyAgbsOjbyBjb21waWxhciBvIGRyaXZlci4gSXNzbyDDqSBlcXVpdmFsZW50ZSBhIGVzcGVjaWZpY2FyIMKWd2l0aG91dA0KKyAgbWlrcm9wdWhlLg0KKw0KKyAgeWVzDQorICBjb21waWxhciBvIGRyaXZlciBzZSBvIHBhY290ZSBwb2RlIHNlciBlbmNvbnRyYWRvIGVtIC91c3IsIC91c3IvbG9jYWwsDQorICAvdXNyL2xvY2FsL01pa3JvcHVoZSwgL3Vzci9sb2NhbC9taWtyb3B1aGUsIC9vcHQvTWlrcm9wdWhlLCBvdQ0KKyAgL29wdC9taWtyb3B1aGUuIElzc28gw6kgZXF1aXZhbGVudGUgYSBlc3BlY2lmaWNhciAtLXdpdGgtbWlrcm9wdWhlLg0KKw0KKyAgLS13aXRoLXNwZWVjaGQ9ZGlyZWN0b3J5ICANCisgICAgIEVzcGVjaWZpcXVlIG8gbG9jYWwgZGEgaW5zdGFsYcOnw6NvIGRvIHBhY290ZSB0ZXh0LXRvLXNwZWVjaCBkbyBzcGVlY2gNCisgIGRpc3BhdGNoZXIsIGUgY29tcGlsYXIgbyBkcml2ZXIgc2ludGV0aXphZG9yIGRlIHZveiBkbyBzcGVlY2gNCisgIGRpc3BhdGNoZXIuIFF1YWxxdWVyIHVtYSBkYXMgc2VndWludGVzIHBhbGF2cmFzIHRhbWLDqW0gcG9kZSBzZXIgdXNhZG8NCisgIGNvbW8gbyBvcGVyYW5kbyBlc3RhIG9ww6fDo286DQorIA0KKyAgICAgbm8NCisgIG7Do28gY29tcGlsYXIgbyBkcml2ZXIuIElzc28gw6kgZXF1aXZhbGVudGUgYSBlc3BlY2lmaWNhciDClndpdGhvdXQNCisgIHNwZWVjaGQuDQorIA0KKyAgICAgeWVzDQorICAgY29tcGlsYXIgbyBkcml2ZXIgc2UgbyBwYWNvdGUgcG9kZSBzZXIgZW5jb250cmFkbyBlbSAvdXNyLA0KKyAgIC91c3IvbG9jYWwsIC91c3IvbG9jYWwvc3BlZWNoLWRpc3BhdGNoZXIsIC91c3IvbG9jYWwvc3BlZWNoZCwNCisgICAvb3B0L3NwZWVjaC1kaXNwYXRjaGVyLCBvdSAvb3B0L3NwZWVjaGQuIElzc28gw6kgZXF1aXZhbGVudGUgYQ0KKyAgIGVzcGVjaWZpY2FyIC0td2l0aC1zcGVlY2hkLiANCisNCisgICAgIC0td2l0aC1zd2lmdCA9IGRpcmVjdG9yeSAgDQorICAgICBFc3BlY2lmaXF1ZSBvIGxvY2FsIGRhIGluc3RhbGHDp8OjbyBkbyBwYWNvdGUgZGUgdGV4dC10by1zcGVlY2ggU3dpZnQsIGUNCisgIGNvbXBpbGFyIG8gZHJpdmVyIHNpbnRldGl6YWRvciBkZSB2b3ogU3dpZnQuIFF1YWxxdWVyIHVtYSBkYXMNCisgIHNlZ3VpbnRlcyBwYWxhdnJhcyB0YW1iw6ltIHBvZGUgc2VyIHVzYWRvIGNvbW8gbyBvcGVyYW5kbyBlc3RhIG9ww6fDo286IA0KKyANCisgIG5vDQorICBuw6NvIGNvbXBpbGFyIG8gZHJpdmVyLiBJc3NvIMOpIGVxdWl2YWxlbnRlIGEgZXNwZWNpZmljYXIgLcKWd2l0aG91dA0KKyAgc3dpZnQuIA0KKw0KKyAgeWVzDQorICBjb21waWxhciBvIGRyaXZlciBzZSBvIHBhY290ZSBwb2RlIHNlciBlbmNvbnRyYWRvIGVtIC91c3IsIC91c3IvbG9jYWwsDQorICAvdXNyL2xvY2FsL1N3aWZ0LCAvdXNyL2xvY2FsL3N3aWZ0LCAvb3B0L1N3aWZ0LCBvdSAvb3B0L3N3aWZ0LiBJc3NvIMOpDQorICBlcXVpdmFsZW50ZSBhIGVzcGVjaWZpY2FyIC0td2l0aC1zd2lmdC4gDQorIA0KKyAgICAgLS13aXRoLXRoZXRhID0gZGlyZWN0b3J5ICANCisgICAgIEVzcGVjaWZpcXVlIG8gbG9jYWwgZGEgaW5zdGFsYcOnw6NvIGRvIHBhY290ZSB0ZXh0LXRvLXNwZWVjaCBkbyBUaGV0YSwgZQ0KKyAgY29tcGlsYXIgbyBkcml2ZXIgc2ludGV0aXphZG9yIGRlIHZveiBUaGV0YSAoVmVyIMKTUmVzdHJpw6fDtWVzIGRlDQorICBDb21waWxhw6fDo2/ClCkuIFF1YWxxdWVyIHVtYSBkYXMgc2VndWludGVzIHBhbGF2cmFzIHRhbWLDqW0gcG9kZSBzZXINCisgIHVzYWRvIGNvbW8gbyBvcGVyYW5kbyBlc3RhIG9ww6fDo286IA0KKw0KKyAgbm8NCisgIG7Do28gY29tcGlsYXIgbyBkcml2ZXIuIElzc28gw6kgZXF1aXZhbGVudGUgYSBlc3BlY2lmaWNhciAtwpZ3aXRob3V0DQorICB0aGV0YS4gDQorIA0KKyAgWWVzDQorICBjb21waWxhciBvIGRyaXZlciBzZSBvIHBhY290ZSBwb2RlIHNlciBlbmNvbnRyYWRvIGVtIC91c3IsIC91c3IvbG9jYWwsDQorICAvdXNyL2xvY2FsL1RoZXRhLCAvdXNyL3RoZXRhL2xvY2FsLCAvb3B0L1RoZXRhLCBvdSAvb3B0L3RoZXRhLiBJc3NvIMOpDQorICBlcXVpdmFsZW50ZSBhIGVzcGVjaWZpY2FyIC0td2l0aC10aGV0YS4gDQorIA0KKyAgICAgLS13aXRoLXZpYXZvaWNlPWRpcmVjdG9yeTogIA0KKyAgICAgRXNwZWNpZmlxdWUgbyBsb2NhbCBkYSBpbnN0YWxhw6fDo28gZG8gcGFjb3RlIHRleHQtdG8tc3BlZWNoIGRvDQorICBWaWFWb2ljZSwgZSBjb21waWxhciBvIGRyaXZlciBzaW50ZXRpemFkb3IgZGUgdm96IGRvIFZpYVZvaWNlIChWZXINCisgIFJlc3RyacOnw7VlcyBkZSBDb21waWxhw6fDo28pLiBRdWFscXVlciB1bWEgZGFzIHNlZ3VpbnRlcyBwYWxhdnJhcyB0YW1iw6ltDQorICBwb2RlIHNlciB1c2FkbyBjb21vIG8gb3BlcmFuZG8gZXN0YSBvcMOnw6NvOiANCisNCisgICAgIG5vDQorICBuw6NvIGNvbXBpbGFyIG8gZHJpdmVyLiBJc3NvIMOpIGVxdWl2YWxlbnRlIGEgZXNwZWNpZmljYXIgwpYtd2l0aG91dA0KKyAgdmlhdm9pY2UuIA0KKw0KKyAgWWVzDQorICBjb21waWxhciBvIGRyaXZlciBzZSBvIHBhY290ZSBwb2RlIHNlciBlbmNvbnRyYWRvIGVtIC91c3IsIC91c3IvbG9jYWwsDQorICAvdXNyL2xvY2FsL1ZpYVZvaWNlLCAvdXNyL2xvY2FsL1ZpYVZvaWNlLCAvb3B0L1ZpYVZvaWNlLCBvdQ0KKyAgL29wdC9WaWFWb2ljZS4gSXNzbyDDqSBlcXVpdmFsZW50ZSBhIGVzcGVjaWZpY2FyIC0td2l0aC12aWF2b2ljZS4gDQorIA0KKyAgICAgLS13aXRoLXNjcmVlbi1kcml2ZXI9ZHJpdmVyOiAgDQorICAgICBFc3BlY2lmaWNhciBvcyBkcml2ZXJzIGRhIHRlbGEgcXVlIGRldmVtIHNlciBsaWdhZG9zIGFvIGJpbsOhcmlvDQorICBCUkxUVFkuIE9zIGRyaXZlcnMgcXVlIG7Do28gZXN0w6NvIGxpc3RhZG9zIHBvciBlc3RhIG9ww6fDo28gc8Ojbw0KKyAgY29uc3RydcOtZGFzIGNvbW8gb2JqZXRvcyBjb21wYXJ0aWxoYWRvcyBkaW5hbWljYW1lbnRlIGNhcnJlZ8OhdmVpcyBlDQorICBhaW5kYSBwb2RlIHNlciBzZWxlY2lvbmFkYSBlbSB0ZW1wbyBkZSBleGVjdcOnw6NvLiBDYWRhIGRyaXZlciBkZXZlIHNlcg0KKyAgaWRlbnRpZmljYWRvIHBlbG8gc2V1IGPDs2RpZ28gZGUgZHVhcyBsZXRyYXMgZGUgaWRlbnRpZmljYcOnw6NvIGRvIGRyaXZlcg0KKyAgKFZlciBzZcOnw6NvIERyaXZlcnMgZGUgVGVsYSBTdXBvcnRhZG9zKSBvdSBwZWxvIHNldSBub21lIHByw7NwcmlvDQorICAoY29tcGxldG8gb3UgYWJyZXZpYWRvKS4gT3MgaWRlbnRpZmljYWRvcmVzIGRlIGRyaXZlciBkZXZlbSBzZXINCisgIHNlcGFyYWRvcyBkYSBvdXRyYSBwb3IgdW1hIMO6bmljYSB2w61yZ3VsYS4gU2UgdW0gaWRlbnRpZmljYWRvciBkZQ0KKyAgZHJpdmVyIMOpIHByZWNlZGlkbyBwb3IgdW0gc2luYWwgZGUgbWVub3MgKC0pLCBlbnTDo28gZXNzZSBkcml2ZXIgw6kNCisgIGV4Y2x1w61kbyBkYSBjb21waWxhw6fDo28uIFF1YWxxdWVyIHVtYSBkYXMgc2VndWludGVzIHBhbGF2cmFzIHRhbWLDqW0NCisgIHBvZGUgc2VyIHVzYWRvIGNvbW8gbyBvcGVyYW5kbyBlc3RhIG9ww6fDo286IA0KKyANCisgICAgIGFsbA0KKyAgbGlnYSB0b2RvcyBvcyBkcml2ZXJzIGRlbnRybyBkbyBiaW7DoXJpby4gTsOjbyBjb25zdHJ1YSBxdWFscXVlciB1bQ0KKyAgZGVsZXMgY29tbyBvYmpldG9zIGNvbXBhcnRpbGhhZG9zIGRpbmFtaWNhbWVudGUgY2FycmVnw6F2ZWlzLiBFc3RhDQorICBwYWxhdnJhIHRhbWLDqW0gcG9kZSBzZXIgZXNwZWNpZmljYWRvIGNvbW8gbyDDumx0aW1vIGVsZW1lbnRvIGRlIHVtYQ0KKyAgbGlzdGEgZGUgZHJpdmVyLiBJc3RvIMOpIGNvbW8gZXNwZWNpZmljYXIgbyBkcml2ZXIgZGVmYXVsdCBxdWFuZG8gdG9kb3MNCisgIG9zIGRyaXZlcnMgZGV2ZW0gc2VyIGxpZ2Fkb3MuDQorIA0KKyAgICAgLWFsbA0KKyAgYXBlbmFzIGNvbXBpbGEgb3MgZHJpdmVycyBxdWUgdGVuaGFtIHNpZG8gaW5jbHXDrWRvcyBleHBsaWNpdGFtZW50ZQ0KKyAgYXRyYXbDqXMgZGVzdGEgb3DDp8Ojby4NCisgDQorICAgICBubw0KKyAgbsOjbyBjb25zdHJ1YSBxdWFscXVlciBkcml2ZXIuIElzc28gw6kgZXF1aXZhbGVudGUgYSBlc3BlY2lmaWNhcg0KKyAgd2l0aG91dC1zY3JlZW4tZHJpdmVyLiANCisgDQorICBZZXMNCisgIGNvbXBpbGFyIHRvZG9zIG9zIGRyaXZlcnMgY29tbyBvYmpldG9zIGNvbXBhcnRpbGhhZG9zIGRpbmFtaWNhbWVudGUNCisgIGNhcnJlZ8OhdmVpcy4gTsOjbyBsaWdhciBxdWFscXVlciB1bSBkZWxlcyBkZW50cm8gZG8gYmluw6FyaW8uIElzc28gw6kNCisgIGVxdWl2YWxlbnRlIGEgZXNwZWNpZmljYXIgLS13aXRoLXNjcmVlbi1kcml2ZXIuIA0KKw0KKyAgICAgTyBwcmltZWlybyBkcml2ZXIgbsOjby1leGNsdcOtZG8gY29tZcOnYSBzZW5kbyBkcml2ZXIgcGFkcsOjby4gU2UgZXNzYQ0KKyAgb3DDp8OjbyBuw6NvIGZvciBlc3BlY2lmaWNhZGEsIG91IHNlIG7Do28gZXNwZWNpZmljYWRvIG8gZHJpdmVyLCBlbnTDo28gdW0NCisgIHBhZHLDo28gZG8gc2lzdGVtYSBvcGVyYWNpb25hbCBhcHJvcHJpYWRvIMOpIHNlbGVjaW9uYWRvLiBTZSB1bSBkcml2ZXINCisgIG5hdGl2byBwYXJhIG8gc2lzdGVtYSBvcGVyYWNpb25hbCBhdHVhbCBlc3TDoSBkaXNwb27DrXZlbCwgZW50w6NvIGVzc2UNCisgIGRyaXZlciDDqSBzZWxlY2lvbmFkbywgc2Vuw6NvLCBvIHNjIMOpIHNlbGVjaW9uYWRvLiBWZWphIG8gYXJxdWl2bw0KKyAgc2NyZWVuLWRyaXZlciBkZSBjb25maWd1cmHDp8OjbyBlIGEgb3DDp8OjbyBkZSBsaW5oYSBkZSBjb21hbmRvIHBhcmENCisgIHNlbGXDp8OjbyAteCB0ZW1wbyBkZSBleGVjdcOnw6NvLiANCisgDQorICAgICAtLXdpdGgtc2NyZWVuLXBhcmFtZXRlcnM9W2RyaXZlcjpdbmFtZT12YWx1ZSwuLi46ICANCisgICAgIEVzcGVjaWZpcXVlIGFzIGNvbmZpZ3VyYcOnw7VlcyBwYWRyw6NvIGRlIHBhcsOibWV0cm8gcGFyYSBvcyBzY3JlZW4NCisgIGRyaXZlcnMuIFNlIHVtIG5vbWUgZGUgcGFyw6JtZXRybyDDqSBxdWFsaWZpY2FkYSBwb3IgdW0gZHJpdmVyIChjb25zdWx0ZQ0KKyAgYSBzZcOnw6NvIFN1cHBvcnRlZCBTY3JlZW4gRHJpdmVycyksIGVtIHNlZ3VpZGEsIGEgY29uZmlndXJhw6fDo28gc8OzDQorICBhcGxpY2EgYW8gZHJpdmVyLCBzZW7Do28gw6ksIGFjZWl0w6F2ZWwgcG9yIGRyaXZlcnMgZXNwZWPDrWZpY29zLiBQYXJhDQorICBvYnRlciB1bWEgZGVzY3Jpw6fDo28gZG9zIHBhcsOibWV0cm9zIGFjZWl0b3MgcG9yIHVtIGRyaXZlciBlc3BlY8OtZmljbywNCisgIGNvbnN1bHRlIGEgZG9jdW1lbnRhw6fDo28gZG8gZHJpdmVyLiBWZWphIG5vIGFycXVpdm8gZGUgY29uZmlndXJhw6fDo28gZGUNCisgIHBhcsOibWV0cm9zIGUgbyBjb21hbmRvIMKWWCBubyB0ZW1wbyBkZSBleGVjdcOnw6NvLiANCisgDQorICAgICAtLXdpdGgtdXNiLXBhY2thZ2UgPSBwYWNrYWdlLCAuLi46ICANCisgICAgIEVzcGVjaWZpY2FyIG8gcGFjb3RlIHF1ZSBlc3TDoSBzZW5kbyB1dGlsaXphZG8gcGVsYSBJL08gZGEgVVNCLiBPIG5vbWUNCisgIGRvcyBwYWNvdGVzIGRldmVtIHNlciBzZXBhcmFkb3MgdW0gZG8gb3V0cm8gcG9yIHVtYSDDum5pY2EgdsOtcmd1bGEsIGUNCisgIHPDo28gcHJvY2Vzc2Fkb3MgZGEgZXNxdWVyZGEgcGFyYSBhIGRpcmVpdGEuIE8gcHJpbWVpcm8sIHF1ZSDDqQ0KKyAgaW5zdGFsYWRvIG5vIHNpc3RlbWEgw6kgc2VsZWNpb25hZGEuIE9zIHBhY290ZXMgYSBzZWd1aXIgc8Ojbw0KKyAgc3Vwb3J0YWRvczoNCisNCisgIDEuIGxpYnVzYg0KKyAgMi4gbGlidXNiLTEuMCANCisNCisgIFF1YWxxdWVyIHVtYSBkYXMgc2VndWludGVzIHBhbGF2cmFzIHRhbWLDqW0gcG9kZSBzZXIgdXNhZG8gY29tbyBvDQorICBvcGVyYWRvcmVzIGVzdGEgb3DDp8OjbzoNCisgDQorICBubw0KKyAgbsOjbyBzdXBvcnRhIEkvTyBkYSBVU0IuIElzc28gw6kgZXF1aXZhbGVudGUgYSBlc3BlY2lmaWNhciAtwpZ3aXRob3V0DQorICB1c2ItcGFja2FnZS4NCisgDQorICB5ZXMNCisgIHVzZSBvIHN1cG9ydGUgbmF0aXZvIHBhcmEgSS9PIGRhIFVTQi4gU2UgbyBzdXBvcnRlIG5hdGl2byBuw6NvIGVzdMOhDQorICBkaXNwb27DrXZlbCBwYXJhIGEgcGxhdGFmb3JtYSBhdHVhbCwgZW0gc2VndWlkYSwgdXNhciBvIHBhY290ZQ0KKyAgZGlzcG9uw612ZWwgZGUgc3Vwb3J0ZSAoY29tbyBwb3Igb3JkZW0gZXNwZWNpZmljYWRhIGFjaW1hKS4gSXNzbyDDqQ0KKyAgZXF1aXZhbGVudGUgYSBlc3BlY2lmaWNhciAtLXdpdGgtdXNiLXBhY2thZ2UuDQorIA0KKyAgICAgLS13aXRoLWJsdWV0b290aC1wYWNrYWdlID0gcGFja2FnZSwgLi4uICANCisgICAgIEVzcGVjaWZpY2FyIG8gcGFjb3RlIHF1ZSBlc3TDoSBzZW5kbyB1dGlsaXphZG8gcGFyYSBJL08gZGUgQmx1ZXRvb3RoLg0KKyAgT3Mgbm9tZXMgZG9zIHBhY290ZXMgZGV2ZW0gc2VyIHNlcGFyYWRvcyB1bSBkbyBvdXRybyBwb3IgdW1hIMO6bmljYQ0KKyAgdsOtcmd1bGEsIGUgc8OjbyBwcm9jZXNzYWRvcyBkYSBlc3F1ZXJkYSBwYXJhIGEgZGlyZWl0YS4gTyBwcmltZWlybywgcXVlDQorICDDqSBpbnN0YWxhZG8gbm8gc2lzdGVtYSDDqSBzZWxlY2lvbmFkYS4gT3MgcGFjb3RlcyBhIHNlZ3VpciBzw6NvDQorICBzdXBvcnRhZG9zOiANCisgIA0KKzEuCShTZW0gb3MgcGFjb3RlcyBzw6NvIHN1cG9ydGFkb3MpLg0KKyAgUXVhbHF1ZXIgdW1hIGRhcyBzZWd1aW50ZXMgcGFsYXZyYXMgdGFtYsOpbSBwb2RlIHNlciB1c2FkbyBjb21vIG8NCisgIG9wZXJhZG9yIGVzdGEgb3DDp8OjbzoNCisNCisgIG5vDQorICBuw6NvIHN1cG9ydGUgZGEgSS9PIGRvIEJsdWV0b290aC4gSXNzbyDDqSBlcXVpdmFsZW50ZSBhDQorICBlc3BlY2lmaWNhciAtLXdpdGgtYmx1ZXRvb3RoLXBhY2thZ2UuDQorDQorICBZZXMNCisgIHVzZSBvIHN1cG9ydGUgbmF0aXZvIHBhcmEgSS9PIGRvIEJsdWV0b290aC4gU2UgbyBzdXBvcnRlIG5hdGl2bw0KKyAgbsOjbyBlc3TDoSBkaXNwb27DrXZlbCBwYXJhIGEgcGxhdGFmb3JtYSBhdHVhbCwgZW0gc2VndWlkYSwgdXNhciBvDQorICBwcmltZWlybyBwYWNvdGUgZGlzcG9uw612ZWwgc3Vwb3J0ZSAoY29tbyBwb3Igb3JkZW0gZXNwZWNpZmljYWRhDQorICBhY2ltYSkuIElzc28gw6kgZXF1aXZhbGVudGUgYSBlc3BlY2lmaWNhciAtLXdpdGgtYmx1ZXRvb3RoLXBhY2thZ2UuDQorDQorICAgICAzLjIuMS4yIEVzcGVjaWZpY2HDp8O1ZXMgZGUgRGlyZXTDs3Jpbw0KKyAgDQorICAtLXdpdGgtZXhlY3V0ZS1yb290PWRpcmVjdG9yeSAgDQorICAgICBFc3BlY2lmaXF1ZSBvIGRpcmV0w7NyaW8gZW0gcXVlIGEgaGllcmFycXVpYSBkZSBhcnF1aXZvcyBmb3JhbQ0KKyAgaW5zdGFsYWRvcyBubyB0ZW1wbyBkZSBleGVjdcOnw6NvLiBPIGNhbWluaG8gYWJzb2x1dG8gZGV2ZSBzZXINCisgIGZvcm5lY2lkby4gU2UgZXNzYSBvcMOnw6NvIG7Do28gZm9yIGVzcGVjaWZpY2FkYSwgZW50w6NvIGRpcmV0w7NyaW8gcmFpeiBkbw0KKyAgc2lzdGVtYSDDqSBhc3N1bWlkby4gVm9jw6ogcHJlY2lzYSB1c2FyIGVzc2EgY2FyYWN0ZXLDrXN0aWNhLCBwb3INCisgIGV4ZW1wbG8sIHNlIHZvY8OqIHRpdmVyIG1haXMgZGUgdW1hIHZlcnPDo28gaW5zdGFsYWRhIGRvIEJSTFRUWSBwcmVjaXNhcg0KKyAgaW5zdGFsYXIgYXJxdWl2b3MgQlJMVFRZIG5vIG1lc21vIHRlbXBvLiANCisgDQorICAgICAtLXdpdGgtaW5zdGFsbC1yb290PWRpcmVjdG9yeSANCisgICAgIEVzcGVjaWZpcXVlIG8gZGlyZXTDs3JpbyBzb2IgbyBxdWFsIGEgaGllcmFycXVpYSBkZSBhcnF1aXZvcyBpbnN0YWxhZG9zDQorICBmb2kgaW5zdGFsYWRvLiBPIGNhbWluaG8gYWJzb2x1dG8gZGV2ZSBzZXIgZm9ybmVjaWRvLiBTZSBlc3RhIG9ww6fDo28NCisgIG7Do28gZm9yIGVzcGVjaWZpY2FkYSwgZW50w6NvIG8gcGFjb3RlIHJvb3Qgbm8gdGVtcG8gZGUgZXhlY3XDp8OjbyAodmVqYSBhDQorICBvcMOnw6NvIC0td2l0aC1leGVjdXRlLXJvb3QgYnVpbGQgb3B0aW9uKSDDqSBhc3N1bWlkYS4gRXN0ZSBkaXJldMOzcmlvIMOpDQorICBhcGVuYXMgdXNhZG8gcGVsbyBtYWtlIGluc3RhbGwgZSBtYWtlIHVuaW5zdGFsbC4gVXNlIGVzdGEgb3DDp8OjbyBzZQ0KKyAgdm9jw6ogcHJlY2lzYSBpbnN0YWxhciBCUkxUVFkgZW0gdW0gbG9jYWwgZGlmZXJlbnRlIGRhcXVlbGUgYSBwYXJ0aXIgZG8NCisgIHF1YWwgZm9pIGZpbmFsbWVudGUgZm9pIGV4ZWN1dGFkby4gVm9jw6ogcHJlY2lzYSB1c2FyIGVzdGUgcmVjdXJzbywgcG9yDQorICBleGVtcGxvLCBzZSB2b2PDqiBlc3TDoSBjb25zdHJ1aW5kbyBCUkxUVFkgZW0gdW0gc2lzdGVtYSBwYXJhIHVzbyBlbQ0KKyAgb3V0cm8uIA0KKyANCisgICAgIC0tcHJlZml4ID0gZGlyZWN0b3J5IA0KKyAgICAgRXNwZWNpZmlxdWUgbyBkaXJldMOzcmlvIGRlbnRybyBkYSBoaWVyYXJxdWlhIGRlIGFycXVpdm9zIGluc3RhbGFkb3MNCisgIG9uZGUgb3MgZGlyZXTDs3Jpb3MgcGFkcsOjbyBwYXJhIG9zIGFycXVpdm9zIGluZGVwZW5kZW50ZXMgZGUNCisgIGFycXVpdGV0dXJhIHPDo28gZW5yYWl6YWRhcy4gRXNzZXMgZGlyZXTDs3Jpb3Mgc8OjbzoNCisgICAgIA0KKyAgICAgwrcgRGlyZXTDs3JpbyBkZSBQcm9ncmFtYQ0KKyAgwrcgRGlyZXTDs3JpbyBkZSBCaWJsaW90ZWNhDQorICDCtyBEaXJldMOzcmlvIGRlIEFQSQ0KKyAgICAgwrcgRGlyZXTDs3JpbyBkZSBFc2NyaXRhDQorICDCtyBEaXJldMOzcmlvIGRlIERhZG9zDQorICDCtyBEaXJldMOzcmlvIGRlIENvbmZpZ3VyYcOnw6NvDQorICDCtyBEaXJldMOzcmlvIGRlIE1hbnBhZ2UgDQorICDCtyBEaXJldMOzcmlvIGRlIEluY2x1c8Ojbw0KKw0KKyAgTyBjYW1pbmhvIGFic29sdXRvIGRldmUgc2VyIGZvcm5lY2lkby4gU2UgZXNzYSBvcMOnw6NvIG7Do28gZm9yDQorICBlc3BlY2lmaWNhZGEsIGVudMOjbyBkaXJldMOzcmlvIHJhaXogZG8gc2lzdGVtYSDDqSBhc3N1bWlkby4gRXN0ZQ0KKyAgZGlyZXTDs3JpbyDDqSBlbnJhaXphZGEgbm8gZGlyZXTDs3JpbyBlc3BlY2lmaWNhZG8gcGVsYSBvcMOnw6NvIGRlDQorICBjb21waWxhw6fDo28gLS13aXRoLWV4ZWN1dGUtcm9vdC4gDQorIA0KKyAgICAgLS1leGVjLXByZWZpeCA9IGRpcmVjdG9yeSANCisgICAgIEVzcGVjaWZpcXVlIG8gZGlyZXTDs3JpbyBkZW50cm8gZGEgwpNoaWVyYXJxdWlhIGRlIGFycXVpdm9zIGluc3RhbGFkb3PClA0KKyAgb25kZSBvcyBkaXJldMOzcmlvcyBwYWRyw7VlcyBwYXJhIG9zIGFycXVpdm9zIGRlcGVuZGVudGVzIGRlIGFycXVpdGV0dXJhDQorICBkZXZlbSBzZXIgZW5yYWl6YWRvcy4gRXNzZXMgZGlyZXTDs3Jpb3Mgc8OjbzoNCisgIMK3IERpcmV0w7NyaW8gZGUgUHJvZ3JhbWENCisgIMK3IERpcmV0w7NyaW8gZGUgQmlibGlvdGVjYQ0KKyAgwrcgRGlyZXTDs3JpbyBkZSBBUEkNCisNCisgIE8gY2FtaW5obyBhYnNvbHV0byBkZXZlIHNlciBmb3JuZWNpZG8uIFNlIGVzc2Egb3DDp8OjbyBuw6NvIGZvcg0KKyAgZXNwZWNpZmljYWRhLCBlbnTDo28gbyBkaXJldMOzcmlvIGVzcGVjaWZpY2FkbyBhdHJhdsOpcyBkYSBvcMOnw6NvIGRlDQorICBjb21waWxhw6fDo28gLS1wcmVmaXggw6kgYXNzdW1pZGEuIEVzdGUgZGlyZXTDs3JpbyDDqSBlbnJhaXphZG8gbm8NCisgIGRpcmV0w7NyaW8gZXNwZWNpZmljYWRvIHBlbG8gLS13aXRoLWV4ZWN1dGUtcm9vdC4gDQorIA0KKyAgICAgLS1saWJkaXI9ZGlyZWN0b3J5IA0KKyAgICAgRXNwZWNpZmlxdWUgbyBkaXJldMOzcmlvIGRlbnRybyBkYSBoaWVyYXJxdWlhIGRlIGFycXVpdm9zIGluc3RhbGFkb3MNCisgIG9uZGUgbyBhcnF1aXZvIGVzdMOhdGljbyBlIG8gb2JqZXRvIGNhcnJlZ2FkbyBkaW5hbWljYW1lbnRlIHBhcmEgYQ0KKyAgQVBJIHNlciBpbnN0YWxhZGEuIE8gY2FtaW5obyBhYnNvbHV0byBkZXZlIHNlciBmb3JuZWNpZG8uIFNlIGVzc2ENCisgIG9ww6fDo28gbsOjbyBmb3IgZXNwZWNpZmljYWRhLCBlbnTDo28gbyBkaXJldMOzcmlvIGVzcGVjaWZpY2FkbyBhdHJhdsOpcyBkYSANCisgIG9ww6fDo28gZGUgY29uZmlndXJhw6fDo28gcGFkcsOjbyDCli1saWJkaXIgKGN1am8gcGFkcsOjbyDDqSAvbGliIGVucmFpemFkbyBubw0KKyAgZGlyZXTDs3JpbyBlc3BlY2lmaWNhZG8gcGVsbyDCli1leGVjLXByZWZpeCkgw6kgYXNzdW1pZGEuIE8gZGlyZXTDs3JpbyDDqQ0KKyAgY3JpYWRvIHNlbsOjbyBleGlzdGUuIA0KKyANCisgICAgIC0tc3lzY29uZmRpcj1kaXJlY3RvcnkgDQorICBFc3BlY2lmaXF1ZSBvIGRpcmV0w7NyaW8gZGVudHJvIGRhIGhpZXJhcnF1aWEgZGUgYXJxdWl2b3MgaW5zdGFsYWRvcw0KKyAgb25kZSBvcyBhcnF1aXZvcyBkZSBjb25maWd1cmHDp8OjbyBkbyBzaXN0ZW1hIHNlcsOjbyBpbnN0YWxhZG9zLiBPDQorICBjYW1pbmhvIGFic29sdXRvIGRldmUgc2VyIGZvcm5lY2lkby4gU2UgZXNzYSBvcMOnw6NvIG7Do28gZm9yDQorICBlc3BlY2lmaWNhZGEsIGVudMOjbyBvIGRpcmV0w7NyaW8gZXNwZWNpZmljYWRvIGF0cmF2w6lzIGRhIG9ww6fDo28gZGUNCisgIGNvbmZpZ3VyYcOnw6NvIHBhZHLDo28gLS1zeXNjb25mZGlyIChjdWpvIHBhZHLDo28gw6kgL2V0YyBlbnJhaXphZG8gbm8NCisgIGRpcmV0w7NyaW8gZXNwZWNpZmljYWRvIHBvciAtLXByZWZpeCkgw6kgYXNzdW1pZGEuIE8gZGlyZXTDs3JpbyDDqSBjcmlhZG8NCisgIHNlIGVsZSBuw6NvIGV4aXN0ZS4gDQorDQorICAtLXdpdGgtcHJvZ3JhbS1kaXJlY3Rvcnk9ZGlyZWN0b3J5ICANCisgICAgIEVzcGVjaWZpcXVlIG8gZGlyZXTDs3JpbyBkZW50cm8gZGEgaGllcmFycXVpYSBkZSBhcnF1aXZvcyBpbnN0YWxhZG9zDQorICBvbmRlIG9zIHByb2dyYW1hcyBleGVjdXTDoXZlaXMgKGJpbsOhcmlvcywgZXhlY3V0w6F2ZWlzKSBzw6NvIGluc3RhbGFkb3MuDQorICBPIGNhbWluaG8gYWJzb2x1dG8gZGV2ZSBzZXIgZm9ybmVjaWRvLiBTZSBlc3NhIG9ww6fDo28gbsOjbyBmb3INCisgIGVzcGVjaWZpY2FkYSwgZW50w6NvIG8gZGlyZXTDs3JpbyBlc3BlY2lmaWNhZG8gYXRyYXbDqXMgZGEgb3DDp8OjbyBkZQ0KKyAgY29uZmlndXJhw6fDo28gcGFkcsOjbyAtLWJpbmRpciAoY3VqbyBwYWRyw6NvIC9iaW4gZW5yYWl6YWRhIG5vIGRpcmV0w7NyaW8NCisgIGVzcGVjaWZpY2FkbyBwZWxvIC0tZXhlYy1wcmVmaXgpIMOpIGFzc3VtaWRhLiBPIGRpcmV0w7NyaW8gw6kgY3JpYWRvIHNlDQorICBlbGUgbsOjbyBleGlzdGUuIA0KKyANCisgICAgIC0td2l0aC1saWJyYXJ5LWRpcmVjdG9yeT1kaXJlY3RvcnkgDQorICAgICBFc3BlY2lmaXF1ZSBvIGRpcmV0w7NyaW8gZGVudHJvIGRhIGhpZXJhcnF1aWEgZGUgYXJxdWl2b3MgaW5zdGFsYWRvcw0KKyAgb25kZSBvcyBkcml2ZXJzIGUgb3V0cm9zIGFycXVpdm9zIGRlcGVuZGVudGVzIGRlIGFycXVpdGV0dXJhIHPDo28NCisgIGluc3RhbGFkb3MuIE8gY2FtaW5obyBhYnNvbHV0byBkZXZlIHNlciBmb3JuZWNpZG8uIFNlIGVzc2Egb3DDp8OjbyBuw6NvDQorICBmb3IgZXNwZWNpZmljYWRhLCBlbnTDo28gbyBicmx0dHkgc3ViZGlyZXTDs3JpbyBkbyBkaXJldMOzcmlvDQorICBlc3BlY2lmaWNhZG8gYXRyYXbDqXMgZGEgb3DDp8OjbyBkZSBjb25maWd1cmHDp8OjbyBwYWRyw6NvIC0tbGliZGlyIChjdWpvDQorICBwYWRyw6NvIMOpIC9saWIgZW5yYWl6YWRhIG5vIGRpcmV0w7NyaW8gZXNwZWNpZmljYWRvIHBlbG8gLS1leGVjLXByZWZpeCkNCisgIMOpIGFzc3VtaWRhLiBPIGRpcmV0w7NyaW8gw6kgY3JpYWRvIHNlIGVsZSBuw6NvIGV4aXN0ZS4gDQorDQorICAgICAtLXdpdGgtd3JpdGFibGUtZGlyZWN0b3J5PWRpcmVjdG9yeSANCisgICAgIEVzcGVjaWZpcXVlIG8gZGlyZXTDs3JpbyBkZW50cm8gZGEgaGllcmFycXVpYSBkZSBhcnF1aXZvcyBpbnN0YWxhZG9zDQorICBxdWUgcG9kZW0gc2VyIGdyYXZhZG9zLiBPIGNhbWluaG8gYWJzb2x1dG8gZGV2ZSBzZXIgZm9ybmVjaWRvLg0KKyAgUXVhbHF1ZXIgdW1hIGRhcyBzZWd1aW50ZXMgcGFsYXZyYXMgdGFtYsOpbSBwb2RlIHNlciB1c2FkbyBjb21vIG8NCisgIG9wZXJhbmRvIGVzdGEgb3DDp8OjbzoNCisNCisgIG5vDQorICBuw6NvIGRlZmluYSB1bSBkaXJldMOzcmlvIGdyYXbDoXZlbC4gSXNzbyDDqSBlcXVpdmFsZW50ZSBhIGVzcGVjaWZpY2FyDQorICB3aXRob3V0LXdyaXRhYmxlLWRpcmVjdG9yeS4NCisNCisgIFllcw0KKyAgVXNlIG8gbG9jYWwgcGFkcsOjby4gSXNzbyDDqSBlcXVpdmFsZW50ZSBhIGVzcGVjaWZpY2FyIC0td2l0aC13cml0YWJsZQ0KKyAgZGlyZWN0b3J5Lg0KKyAgICAgU2UgZXNzYSBvcMOnw6NvIG7Do28gZm9yIGVzcGVjaWZpY2FkYSwgZW50w6NvIG8gc3ViZGlyZXTDs3JpbyBkbyBkaXJldMOzcmlvDQorICBydyBlc3BlY2lmaWNhZG8gY29tIC0td2l0aC1saWJyYXJ5LWRpcmVjdG9yeSDDqSBhc3N1bWlkby4gTyBkaXJldMOzcmlvIMOpDQorICBjcmlhZG8gc2UgZWxlIG7Do28gZXhpc3RlLg0KKyAgICAgICAgDQorICAtLXdpdGgtZGF0YS1kaXJlY3Rvcnk9ZGlyZWN0b3J5IA0KKyAgICAgRXNwZWNpZmlxdWUgbyBkaXJldMOzcmlvIGRlbnRybyBkYSBoaWVyYXJxdWlhIGRlIGFycXVpdm9zIGluc3RhbGFkb3MNCisgIG9uZGUgYXMgcGFnaW5hcyBkYXMgdGFiZWxhcyBkZSBhanVkYSwgZSBvdXRyb3MgYXJxdWl2b3MgZGUNCisgIGFycXVpdGV0dXJhcyBpbmRlcGVuZGVudGVzIGZvcmFtIGluc3RhbGFkYXMuIE8gY2FtaW5obyBhYnNvbHV0byBkZXZlDQorICBzZXIgZm9ybmVjaWRvLiBTZSBlc3NhIG9ww6fDo28gbsOjbyBmb3IgZXNwZWNpZmljYWRhLCBlbnTDo28gbw0KKyAgc3ViZGlyZXTDs3JpbyBkbyBkaXJldMOzcmlvIGRvIGJybHR0eSBlc3BlY2lmaWNhZG8gYXRyYXbDqXMgZGEgb3DDp8OjbyBkZQ0KKyAgY29uZmlndXJhw6fDo28gcGFkcsOjbyAtLXN5c2NvbmZkaXIgKGN1am8gcGFkcsOjbyDDqSAvZXRjIGVucmFpemFkbyBubw0KKyAgZGlyZXTDs3JpbyBlc3BlY2lmaWNhZG8gcGVsYSBvcMOnw6NvIC0tcHJlZml4KSDDqSBhc3N1bWlkby4gTyBkaXJldMOzcmlvIMOpDQorICBjcmlhZG8gc2UgZWxlIG7Do28gZXhpc3RlLiANCisgDQorICAgICAtLXdpdGgtbWFucGFnZS1kaXJlY3Rvcnk9ZGlyZWN0b3J5IA0KKyAgICAgRXNwZWNpZmlxdWUgbyBkaXJldMOzcmlvIGRlbnRybyBkYSBoaWVyYXJxdWlhIGRlIGFycXVpdm9zIGluc3RhbGFkb3MsDQorICBvbmRlIGFzIHDDoWdpbmFzIGRvIG1hbiBzZXLDo28gaW5zdGFsYWRvcy4gTyBjYW1pbmhvIGFic29sdXRvIGRldmUgc2VyDQorICBmb3JuZWNpZG8uIFNlIGVzc2Egb3DDp8OjbyBuw6NvIGZvciBlc3BlY2lmaWNhZGEsIGVudMOjbyBvIGRpcmV0w7NyaW8NCisgIGVzcGVjaWZpY2FkbyBhdHJhdsOpcyBkYSBvcMOnw6NvIGRlIGNvbmZpZ3VyYcOnw6NvIHBhZHLDo28gLS1tYW5kaXIgKGN1am8NCisgIHBhZHLDo28gw6kgL21hbiBlbnJhaXphZG8gbm8gZGlyZXTDs3JpbyBlc3BlY2lmaWNhZG8gcG9yIC0tcHJlZml4KSDDqQ0KKyAgYXNzdW1pZGEuIE8gZGlyZXTDs3JpbyDDqSBjcmlhZG8gc2UgZWxlIG7Do28gZXhpc3RlLiANCisgDQorICAgICAtLXdpdGgtaW5jbHVkZS1kaXJlY3Rvcnk9ZGlyZWN0b3J5ICANCisgICAgIEVzcGVjaWZpcXVlIG8gZGlyZXTDs3JpbyBkZW50cm8gZGEgaGllcmFycXVpYSBkZSBhcnF1aXZvcyBpbnN0YWxhZG9zDQorICBvbmRlIG9zIGFycXVpdm9zIGRlIGNhYmXDp2FsaG8gQyBwYXJhIG8gQXBwbGljYXRpb24gUHJvZ3JhbW1pbmcNCisgIEludGVyZmFjZSBzZXLDo28gaW5zdGFsYWRvcy4gTyBjYW1pbmhvIGFic29sdXRvIGRldmUgc2VyIGZvcm5lY2lkby4gU2UNCisgIGVzc2Egb3DDp8OjbyBuw6NvIGZvciBlc3BlY2lmaWNhZGEsIGVudMOjbyBvIHN1YmRpcmV0w7NyaW8gZG8gZGlyZXTDs3Jpbw0KKyAgYnJsdHR5IMOpIGVzcGVjaWZpY2FkbyBhdHJhdsOpcyBkYSBvcMOnw6NvIGRlIGNvbmZpZ3VyYcOnw6NvIHBhZHLDo28NCisgIGluY2x1ZGVkaXIgKGN1am8gcGFkcsOjbyDDqSAvaW5jbHVkZSBlbnJhaXphZG8gbm8gZGlyZXTDs3JpbyBlc3BlY2lmaWNhZG8NCisgIHBvciAtLXByZWZpeCkgw6kgYXNzdW1pZGEuIE8gZGlyZXTDs3JpbyDDqSBjcmlhZG8gc2UgZWxlIG7Do28gZXhpc3RlLiANCisNCisgICAgIDMuMi4xLjMgQ2FyYWN0ZXJpc3RpY2FzIGRlIENvbXBpbGHDp8OjbyANCisgDQorICAgICBFc3RhcyBvcMOnw7VlcyBzw6NvIMO6dGVpcyBwcmluY2lwYWxtZW50ZSBxdWFuZG8gYSBjb25zdHJ1w6fDo28gZG8gQlJMVFRZDQorICBmb3IgdXNhZG8gZW0gdW0gZGlzY28gZGUgaW5pY2lhbGl6YcOnw6NvLiANCisgDQorICAgICAtLWVuYWJsZS1zdGFuZGFsb25lLXByb2dyYW1zIA0KKyAgICAgQ3JpYXIgbGlua3MgZXN0YXRpY2FtZW50ZSwgZW0gdmV6IGRlIGxpbmtzIGRpbmFtaWNvcy4gRXN0YSBvcMOnw6NvDQorICByZW1vdmUgdG9kYXMgYXMgZGVwZW5kw6puY2lhcyBkZSBvYmpldG9zIGNvbXBhcnRpbGhhZG9zIG5vIHRlbXBvIGRlDQorICBleGVjdcOnw6NvLiBBcGVuYXMgb3MgZHJpdmVycyBwYWRyw6NvICh2ZWphIGEgb3DDp8OjbyAtLXdpdGgtYnJhaWxsZQ0KKyAgZHJpdmVyLCAtLXdpdGgtc3BlZWNoLWRyaXZlciwgZSAtLXdpdGgtc2NyZWVuLWRyaXZlcikgc8OjbyBjb21waWxhZG9zLiANCisNCisgIC0tZW5hYmxlLXJlbG9jYXRhYmxlLWluc3RhbGwgDQorICAgICBTZSBlc3RlIHJlY3Vyc28gZXN0aXZlciBhdGl2YWRvLCB0b2RvcyBvcyBjYW1pbmhvcyBpbnRlcm5vcyBzw6NvDQorICByZWNhbGN1bGFkb3MgYSBzZXIgcmVsYXRpdm8gYW8gZGlyZXTDs3JpbyBkbyBwcm9ncmFtYS4gU2UgZGVzYXRpdmFkbywNCisgIGVudMOjbyB0b2RvcyBvcyBjYW1pbmhvcyBpbnRlcm5vcyBzw6NvIGFic29sdXRvcy4gRXN0ZSByZWN1cnNvIHBlcm1pdGUNCisgIHF1ZSB0b2RhIGEgaGllcmFycXVpYSBkZSBhcnF1aXZvcyBpbnN0YWxhZG9zIHNlciBjb3BpYWRvcyBvdSBtb3ZpZG9zLA0KKyAgZGUgdW0gbHVnYXIgcGFyYSBvdXRybywgZSDDqSBkZXN0aW5hZG8gcHJpbmNpcGFsbWVudGUgcGFyYSB1c28gZW0NCisgIHBsYXRhZm9ybWFzIFdpbmRvd3MuIA0KKyANCisgICAgIC0tZGlzYWJsZS1zdHJpcHBpbmdsIA0KKyAgICAgTsOjbyByZW1vdmEgYXMgdGFiZWxhcyBkZSBzw61tYm9sb3MgYSBwYXJ0aXIgZGUgYXJxdWl2b3MgZXhlY3V0w6F2ZWlzIGUNCisgIG9iamV0b3MgY29tcGFydGlsaGFkb3MgcXVhbmRvIGluc3RhbMOhLWxvcy4gDQorIA0KKyAgICAgLS1kaXNhYmxlLWxlYXJuLW1vZGUgDQorICAgICBSZWR1emlyIG8gdGFtYW5obyBkbyBwcm9ncmFtYSwgZXhjbHVpbmRvIG8gbW9kbyBkZSBjb21hbmRvIChWZXIgc2XDp8Ojbw0KKyAgZGUgTW9kbyBkZSBDb21hbmRvIGRlIEFwcmVuZGl6YWdlbSkuIA0KKyANCisgICAgIC0tZGlzYWJsZS1jb250cmFjdGVkLWJyYWlsbGUgDQorICAgICBSZWR1emlyIG8gdGFtYW5obyBkbyBwcm9ncmFtYSwgZXhjbHVpbmRvIG8gc3Vwb3J0ZSBwYXJhIGJyYWlsbGUNCisgIGNvbnRyYXRhZG9zIChWZXIgc2XDp8OjbyBUYWJlbGEgZGUgQ29udHJhw6fDo28pLiANCisgDQorICAgICAtLWRpc2FibGUtc3BlZWNoLXN1cHBvcnQgDQorICAgICBSZWR1emlyIG8gdGFtYW5obyBkbyBwcm9ncmFtYSwgZXhjbHVpbmRvIG8gc3Vwb3J0ZSBkb3Mgc2ludGV0aXphZG9yZXMNCisgIGRlIHZvei4NCisNCistLWRpc2FibGUtaWNvbnYgDQorUmVkdXppciBvIHRhbWFuaG8gZG8gcHJvZ3JhbWEsIGNvbSBleGNsdXPDo28gZG8gc3Vwb3J0ZSBwYXJhIGEgDQorY29udmVyc8OjbyBkZSBjb25qdW50byBkZSBjYXJhY3RlcmVzLg0KKyAgICAgICAgICANCisgIC0tZGlzYWJsZS1pY3UgDQorICAgICBSZWR1emlyIG8gdGFtYW5obyBkbyBwcm9ncmFtYSwgZXhjbHVpbmRvIG8gc3Vwb3J0ZSBkZQ0KKyAgaW50ZXJuYWNpb25hbGl6YcOnw6NvIFVuaWNvZGUtYmFzZWQuIA0KKyANCisgICAgIC0tZGlzYWJsZS14ICANCisgICAgIFJlZHV6aXIgbyB0YW1hbmhvIGRvIHByb2dyYW1hLCBleGNsdWluZG8gbyBzdXBvcnRlIHBhcmEgWDExLiANCisgDQorICAgICAtLWRpc2FibGUtYmVlcGVyLXN1cHBvcnQgDQorICAgICBSZWR1emlyIG8gdGFtYW5obyBkbyBwcm9ncmFtYSwgY29tIGV4Y2x1c8OjbyBkbyBzdXBvcnRlIHBhcmEgbyBjb25zb2xlDQorICB0b25lIGdlbmVyYXRvci4gDQorIA0KKyAgICAgLS1kaXNhYmxlLXBjbS1zdXBwb3J0IA0KKyAgICAgUmVkdXppciBvIHRhbWFuaG8gZG8gcHJvZ3JhbWEsIGV4Y2x1aW5kbyBvIHN1cG9ydGUgcGFyYSBhIGludGVyZmFjZQ0KKyAgZGlnaXRhbCBkZSDDoXVkaW8gbmEgcGxhY2EgZGUgc29tLiANCisNCisgICAgIC0tZW5hYmxlLXBjbS1zdXBwb3J0ID0gaW50ZXJmYWNlIA0KKyAgICAgU2UgYSBwbGF0YWZvcm1hIG9mZXJlY2UgbWFpcyBkZSB1bWEgaW50ZXJmYWNlIGRpZ2l0YWwgZGUgw6F1ZGlvIHBhcmENCisgIHNlciB1c2FkbyBwb2RlIHNlciBlc3BlY2lmaWNhZG8uIA0KKyANCisgICAgIC0tZGlzYWJsZS1taWRpLXN1cHBvcnQgDQorICAgICBSZWR1emlyIG8gdGFtYW5obyBkbyBwcm9ncmFtYSwgY29tIGV4Y2x1c8OjbyBkbyBzdXBvcnRlIHBhcmEgbyBNdXNpY2FsDQorICBJbnN0cnVtZW50IERpZ2l0YWwgSW50ZXJmYWNlIGRhIHBsYWNhIGRlIHNvbS4gDQorIA0KKyAgICAgLS1lbmFibGUtbWlkaS1zdXBwb3J0ID0gaW50ZXJmYWNlICANCisgICAgIFNlIHVtYSBwbGF0YWZvcm1hIGZvcm5lY2UgbWFpcyBkZSB1bWEgSW50ZXJmYWNlIE11c2ljYWwgSW5zdHJ1bWVudA0KKyAgRGlnaXRhbCBlbnTDo28gbyBxdWUgZXN0w6EgYSBzZXIgdXRpbGl6YWRvIHBvZGUgc2VyIGVzcGVjaWZpY2Fkby4NCisNCisgIFBsYXRmb3JtICAgSW50ZXJmYWNlICAgRGVzY3JpcHRpb24NCisgIF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXw0KKyAgTGludXggICAgICBvc3MgICAgICAgICBPcGVuIFNvdW5kIFN5c3RlbQ0KKyAgICAgICAgICAgICBhbHNhICAgICAgICBBZHZhbmNlZCBMaW51eCBTb3VuZCBBcmNoaXRlY3R1cmUNCisNCisgICAgIC0tZGlzYWJsZS1mbS1zdXBwb3J0ICANCisgICAgIFJlZHV6aXIgbyB0YW1hbmhvIGRvIHByb2dyYW1hLCBleGNsdWluZG8gbyBhcG9pbyBkbyBzaW50ZXRpemFkb3IgZGUgRk0NCisgIGVtIHVtIGNhcnTDo28gZGUgQWRMaWIsIE9QTDMsIFNvdW5kIEJsYXN0ZXIsIG91IG8gZXF1aXZhbGVudGUgZGUgc29tLiANCisgDQorICAgICAtLWRpc2FibGUtcG0tY29uZmlnZmlsZQ0KKyAgICAgUmVkdXppciBvIHRhbWFuaG8gZG8gcHJvZ3JhbWEsIGV4Y2x1aW5kbyBvIHN1cG9ydGUgcGFyYSBvIGFycXVpdm8gZGUNCisgIGNvbmZpZ3VyYcOnw6NvIGRvIGRyaXZlciBQYXBlbm1laWVyLg0KKw0KKyAgLS1kaXNhYmxlLWdwbSANCisgICAgIFJlZHV6aXIgbyB0YW1hbmhvIGRvIHByb2dyYW1hLCBleGNsdWluZG8gYSBpbnRlcmZhY2UgZGEgYXBsaWNhw6fDo28gZ3BtDQorICBxdWUgcGVybWl0ZSBpbnRlcmFnaXIgQlJMVFRZIGNvbSBvIGRpc3Bvc2l0aXZvIHBvaW50ZXIgKG1vdXNlKSh2ZXINCisgIHNlw6fDo28gUG9udGVpcm8gKE1vdXNlKSBTdXBwb3J0IHZpYSBHUE0pLiANCisgDQorICAgICAtLWRpc2FibGUtYXBpICANCisgICAgIFJlZHV6aXIgbyB0YW1hbmhvIGRvIHByb2dyYW1hLCBleGNsdWluZG8gYSBBcHBsaWNhdGlvbiBQcm9ncmFtbWluZw0KKyAgSW50ZXJmYWNlLiANCisgDQorICAgICAtLXdpdGgtYXBpLXBhcmFtZXRlcnM9bmFtZSA9IHZhbHVlLCAuLi4gDQorICAgICBFc3BlY2lmaXF1ZSBhcyBjb25maWd1cmHDp8O1ZXMgcGFkcsOjbyBkbyBwYXLDom1ldHJvIHBhcmEgbyBBcHBsaWNhdGlvbg0KKyAgUHJvZ3JhbW1pbmcgSW50ZXJmYWNlLiBTZSBvIG1lc21vIHBhcsOibWV0cm8gw6kgZXNwZWNpZmljYWRvIG1haXMgZGUgdW1hDQorICB2ZXosIGEgc3VhIGF0cmlidWnDp8OjbyDDqSB1c2FkYS4gUGFyYSBvYnRlciB1bWEgZGVzY3Jpw6fDo28gZG9zIHBhcsOibWV0cm9zDQorICBhY2VpdG9zIHBlbGEgaW50ZXJmYWNlLCBjb25zdWx0ZSBvIG1hbnVhbCBkZSByZWZlcsOqbmNpYSBCcmxBUEkuIFZlamENCisgIG9zIGFycXVpdm9zIGRlIGNvbmZpZ3VyYcOnw6NvIGFwaS1wYXJhbWV0ZXJzIGUgbyBjb21hbmRvIMKWYS4gDQorIA0KKyAgICAgLS1kaXNhYmxlLWNhbWwtYmluZGluZ3MgDQorICAgICBOw6NvIGNvbnN0cnVpciBiaW5kaW5ncyBjYW1sIHBhcmEgbyBBcHBsaWNhdGlvbiBQcm9ncmFtbWluZyBJbnRlcmZhY2UuIA0KKyANCisgICAgIC0tZGlzYWJsZS1qYXZhLWJpbmRpbmdzIA0KKyAgICAgTsOjbyBjb25zdHJ1aXIgYXMgYmluZGluZ3MgcGFyYSBhIEludGVyZmFjZSBKYXZhIEFwcGxpY2F0aW9uDQorICBQcm9ncmFtbWluZy4gDQorIA0KKyAgICAgLS1kaXNhYmxlLWxpc3AtYmluZGluZ3MgDQorICAgICBOw6NvIGNvbnN0cnVpciBhcyBiaW5kaW5ncyBkZSBMaXNwIHBhcmEgbyBBcHBsaWNhdGlvbiBQcm9ncmFtbWluZw0KKyAgSW50ZXJmYWNlLiANCisgDQorICAgICAtLWRpc2FibGUtcHl0aG9uLWJpbmRpbmdzICANCisgICAgIE7Do28gY29uc3RydWlyIGJpbmRpbmdzIFB5dGhvbiBwYXJhIG8gQXBwbGljYXRpb24gUHJvZ3JhbW1pbmcNCisgIEludGVyZmFjZS4gDQorIA0KKyAgICAgLS1kaXNhYmxlLXRjbC1iaW5kaW5ncyAgDQorICAgICBOw6NvIGNvbnN0cnVpciBiaW5kaW5ncyBUY2wgcGFyYSBhIEFwcGxpY2F0aW9uIFByb2dyYW1taW5nIEludGVyZmFjZS4gDQorDQorICAgICAtLXdpdGgtdGNsLWNvbmZpZz1wYXRoICANCisgICAgIEVzcGVjaWZpcXVlIG8gbG9jYWwgZG8gc2NyaXB0IGRlIGNvbmZpZ3VyYcOnw6NvIFRjbCAodGNsQ29uZmlnLnNoKS4gT3Ugbw0KKyAgY2FtaW5obyBwYXJhIG8gc2NyaXB0IGVtIHNpIG91IG8gZGlyZXTDs3JpbyBxdWUgY29udMOpbSBwb2RlIHNlcg0KKyAgZm9ybmVjaWRvLiBRdWFscXVlciB1bWEgZGFzIHNlZ3VpbnRlcyBwYWxhdnJhcyB0YW1iw6ltIHBvZGUgc2VyIHVzYWRvDQorICBjb21vIG8gb3BlcmFuZG8gZXN0YSBvcMOnw6NvOg0KKw0KKyAgbm8NCisgIHV0aWxpemFyIG91dHJvcyBtZWlvcyBkZSBhZGl2aW5oYXIgc2UgVGNsIGVzdMOhIGRpc3BvbsOtdmVsLCBzZSBzaW0sDQorICBvbmRlIGVsZSBmb2kgaW5zdGFsYWRvLiBJc3NvIMOpIGVxdWl2YWxlbnRlIGEgZXNwZWNpZmljYXIgwpZ3aXRob3V0DQorICB0Y2wtY29uZmlnLg0KKw0KKyAgeWVzDQorICBwcm9jdXJlIG8gc2NyaXB0IGVtIGFsZ3VucyBkaXJldMOzcmlvcyBmcmVxdWVudGVtZW50ZSB1dGlsaXphZG9zLiBJc3NvDQorICDDqSBlcXVpdmFsZW50ZSBhIGVzcGVjaWZpY2FyIC0td2l0aC10Y2wtY29uZmlnLiANCisNCisgIDMuMi4xLjQgT3DDp8O1ZXMgRGl2ZXJzYXMgDQorIA0KKyAgICAgLS13aXRoLWNvbXBpbGVyLXByZWZpeCA9IHByZWZpeCANCisgICAgIEVzcGVjaWZpcXVlIG8gcHJlZml4byAoY2FtaW5obyBlIGluw61jaW8gZG8gbm9tZSBkbyBwcm9ncmFtYSkgcGFyYSBvDQorICBjb25qdW50byBkZSBmZXJyYW1lbnRhcyBkZSBjb21waWxhciBlIGxpZ2FyIHBvc3NhbSBzZXIgdXRpbGl6YWRhcy4NCisgIFBvZGUgc2VyIG5lY2Vzc8OhcmlvIHVzYXIgZXN0YSBvcMOnw6NvIHNlLCBwb3IgZXhlbXBsbywgdm9jw6ogZXN0w6EgYQ0KKyAgY29tcGlsYW5kbyBjcnV6YWRvIHBhcmEgdW1hIGFycXVpdGV0dXJhIGRpZmVyZW50ZS4NCisgICAgDQorICAtLXdpdGgtaW5pdC1wYXRoID0gcGF0aCANCisgICAgIEVzcGVjaWZpcXVlIG8gY2FtaW5obyBwYXJhIG8gcHJvZ3JhbWEgcmVhbCBkZSBpbml0IGRvIHNpc3RlbWEuIE8NCisgIGNhbWluaG8gYWJzb2x1dG8gZGV2ZSBzZXIgZm9ybmVjaWRvLiBTZSBlc3RhIG9ww6fDo28gZm9yIGVzcGVjaWZpY2FkYSwNCisgIGVudMOjbzoNCisNCisxLglPIHByb2dyYW1hIGRlIGluaXQgZGV2ZSBzZXIgbW92aWRvIHBhcmEgdW0gbm92byBsb2NhbC4NCisNCisyLglPIGJybHR0eSBkZXZlIHNlciB0cmFuc2ZlcmlkbyBwYXJhIGxvY2FsIG9yaWdpbmFsIGRvIHByb2dyYW1hIGRlDQorICAgICAgIGluaXQuDQorDQorMy4JUXVhbmRvIG8gc2lzdGVtYSBkZSBpbml0IMOpIGV4ZWN1dGFkbyBubyBpbmljaW8sIGJybHR0eSDDqQ0KKyAgIHJlYWxtZW50ZSBleGVjdXRhZG8uIEVsZSBzZSBjb2xvY2EgZW0gc2VndW5kbyBwbGFubywgZSBleGVjdXRhIGENCisgICBpbmljaWFsaXphw6fDo28gcmVhbCBubyBwcmltZWlybyBwbGFuby4gRXN0ZSDDqSB1bWEgbWFuZWlyYSBkZSB0ZXINCisgICBicmFpbGxlIGRlc2RlIG8gaW7DrWNpby4gw4kgZXNwZWNpYWxtZW50ZSDDunRpbCBwYXJhIGFsZ3VucyBkaXNjb3MNCisgICBkZSBpbnN0YWxhw6fDo28vcmVjdXBlcmHDp8Ojby4NCisNCisgICAgIFNlIGVzc2Egb3DDp8OjbyBuw6NvIGZvciBlc3BlY2lmaWNhZGEsIGVudMOjbyBlc3RlIHJlY3Vyc28gbsOjbyBlc3TDoQ0KKyAgYXRpdmFkby4gRXN0YSBvcMOnw6NvIMOpIGRlc3RpbmFkYSBwcmluY2lwYWxtZW50ZSBwYXJhIGEgY29uc3RydcOnw6NvIGRlDQorICB1bWEgaW1hZ2VtIGRvIGluc3RhbGFkb3IgYnJhaWxsaWZpY2FkYS4gDQorIA0KKyAgICAgLS13aXRoLXN0ZGVyci1wYXRoID0gcGF0aCANCisgICAgIEVzcGVjaWZpcXVlIG8gY2FtaW5obyBwYXJhIG8gYXJxdWl2byBvdSBkaXNwb3NpdGl2byBvbmRlIG8gcGFkcsOjbw0KKyAgZXJyb3Igw6kgZXNjcml0by4gTyBjYW1pbmhvIGFic29sdXRvIGRldmUgc2VyIGZvcm5lY2lkby4gU2UgZXNzYSBvcMOnw6NvDQorICBuw6NvIGZvciBlc3BlY2lmaWNhZGEsIGVudMOjbyBlc3RlIHJlY3Vyc28gbsOjbyBlc3TDoSBhdGl2YWRvLiBFc3RhIG9ww6fDo28NCisgIMOpIGRlc3RpbmFkYSBwcmluY2lwYWxtZW50ZSBwYXJhIGEgY29uc3RydcOnw6NvIGRlIHVtYSBpbWFnZW0gZG8NCisgIGluc3RhbGFkb3IgYnJhaWxsaWZpZWQuDQorDQorICAzLjIuMiBBdGluZ2lyIG1ldGFzIGRlIGFycXVpdm9zDQorIA0KKyAgICAgRGVwb2lzIEJSTFRUWSB0ZXIgc2lkbyBjb25maWd1cmFkbywgbyBwcsOzeGltbyBwYXNzbyDDqSBjb21waWxhciBlDQorICBpbnN0YWzDoS1sby4gSXN0byDDqSBmZWl0byBhdHJhdsOpcyBkYSBhcGxpY2HDp8OjbyBkZSBjb21hbmRvIG1ha2UgcXVlIG8NCisgIHNpc3RlbWEgZGUgYXJxdWl2byBwcmluY2lwYWwgQlJMVFRZIGZhemVyIChNYWtlZmlsZSBubyBkaXJldMOzcmlvIGRlDQorICBuw612ZWwgc3VwZXJpb3IpLiBPIGFycXVpdm8gQlJMVFRZIMOpIGNvbXBhdMOtdmVsIGNvbSBhIG1haW9yaWEgZG9zDQorICBvYmpldGl2b3MgY29tdW5zIGRlIG1hbnV0ZW7Dp8OjbyBkYSBhcGxpY2HDp8Ojby4gRWxlcyBpbmNsdWVtOg0KKw0KKyAgbWFrZQ0KKyAgdW0gYXRhbGhvIHBhcmEgbWFrZSBhbGwuDQorDQorICBtYWtlIGFsbA0KKyAgY29tcGlsYXIgZSB2aW5jdWxhciBvIGV4ZWN1dMOhdmVsIGRvIEJSTFRUWSwgc2V1cyBkcml2ZXJzIGUgc3Vhcw0KKyAgcMOhZ2luYXMgZGUgYWp1ZGEsIHNldXMgcHJvZ3JhbWFzIGRlIHRlc3RlLCBlIGFsZ3VucyBvdXRyb3MgcGVxdWVub3MNCisgIHV0aWxpdMOhcmlvcy4NCisNCisgIG1ha2UgaW5zdGFsbA0KKyAgY29tcGxldGUgYSBmYXNlIGRlIGNvbXBpbGHDp8OjbyBlIGxpZ2HDp8OjbyAodmVyIMKTbWFrZSBhbGzClCksIGUgZGVwb2lzDQorICBpbnN0YWxhciBvcyBleGVjdXTDoXZlaXMgZG8gQlJMVFRZLCBhcnF1aXZvcyBkZSBkYWRvcywgZHJpdmVycyBlDQorICBww6FnaW5hcyBkZSBhanVkYSwgbm9zIGx1Z2FyZXMgY29ycmV0b3MgZSBjb20gYXMgcGVybWlzc8O1ZXMgY29ycmV0YXMuDQorDQorICBtYWtlIHVuaW5zdGFsbA0KKyAgcmVtb3ZhIG8gZXhlY3V0w6F2ZWwgQlJMVFRZLCBzZXVzIGFycXVpdm9zIGRlIGRhZG9zLCBkcml2ZXJzIGUgcMOhZ2luYXMNCisgIGRlIGFqdWRhLCBhIHBhcnRpciBkbyBzaXN0ZW1hLg0KKw0KKyAgICAgICAgDQorDQorDQorDQorDQorICAgICAgICAgIA0KKw0KKyAgbWFrZSBjbGVhbg0KKyAgY2VydGlmaXF1ZS1zZSBxdWUgYSBwcsOzeGltYSBjb21waWxhw6fDo28gZSBsaWdhw6fDo28gKHZlciBtYWtlIGFsbCkgc2Vyw6ENCisgIGZlaXRvIGEgcGFydGlyIGRvIHplcm8sIHJlbW92ZW5kbyBvcyByZXN1bHRhZG9zIGRhIGNvbXBpbGHDp8OjbywgbGlnYcOnw6NvDQorICBlIHRlc3RlcyBkYSBlc3RydXR1cmEgZGUgZGlyZXTDs3JpbyBkZSBvcmlnZW0uIElzc28gaW5jbHVpIGEgcmVtb8Onw6NvIGRlDQorICBhcnF1aXZvcyBkZSBvYmpldG8sIGV4ZWN1dMOhdmVpcywgb2JqZXRvcyBjb21wYXJ0aWxoYWRvcyBkaW5hbWljYW1lbnRlDQorICBjYXJyZWfDoXZlaXMsIGxpc3RhcyBkZSBkcml2ZXJzLCBww6FnaW5hcyBkZSBhanVkYSwgYXJxdWl2b3MgZGUNCisgIGNhYmXDp2FsaG8gdGVtcG9yw6FyaWEsIGUgYXJxdWl2b3MgcHJpbmNpcGFpcy4NCisNCisgIG1ha2UgZGlzdGNsZWFuDQorICBhbMOpbSBkZSByZW1vdmVyIG9zIHJlc3VsdGFkb3MgZGEgY29tcGlsYcOnw6NvIGUgdmluY3VsYcOnw6NvICh2ZXIgbWFrZQ0KKyAgY2xlYW4pOg0KKz8JUmVtb3ZhIG9zIHJlc3VsdGFkb3MgZGEgY29uZmlndXJhw6fDo28gQlJMVFRZICh2ZXIgQnVpbGQgT3B0aW9ucykuIA0KK0lzc28gaW5jbHVpIGEgcmVtb8Onw6NvIGRlIGNvbmZpZy5taywgY29uZmlnLmgsIGNvbmZpZy5jYWNoZSwgDQorY29uZmlnLnN0YXR1cywgY29uZmlnLmxvZy4NCis/CVJlbW92ZXIgb3Mgb3V0cm9zIGFycXVpdm9zIGRhIGVzdHJ1dHVyYSBkZSBkaXJldMOzcmlvIGRlIG9yaWdlbSANCitxdWUgc2UgYWN1bXVsYW0gYW8gbG9uZ28gZG8gdGVtcG8sIG1hcyBxdWUgbsOjbyBwZXJ0ZW5jZW0gYWxpLiANCitJc3NvIGluY2x1aSBhIHJlbW/Dp8OjbyBkZSBhcnF1aXZvcyBkZSBlZGl0b3IgZGUgYmFja3VwLCBvcyANCityZXN1bHRhZG9zIGRvIGNhc28gZGUgdGVzdGUsIHJlamVpdG91IGJsb2NvcyBkZSBwYXRjaCwgZSBhcyANCitjw7NwaWFzIGRvcyBhcnF1aXZvcyBvcmlnaW5haXMuDQorDQorICAzLjMgVGVzdGFuZG8gbyBCUkxUVFk6DQorIA0KKyAgICAgQXDDs3MgYSBjb21waWxhw6fDo28sIGxpZ2HDp8OjbyBlIGluc3RhbGHDp8OjbyBCUkxUVFksIMOpIHVtYSBib2EgaWTDqWlhIHBhcmENCisgIGZhemVyIHVtIHRlc3RlIHLDoXBpZG8gYW50ZXMgZGUgYXRpdsOhLWxvIHBlcm1hbmVudGVtZW50ZS4gUGFyYSBmYXplcg0KKyAgaXNzbywgY2hhbWUgY29tIG8gY29tYW5kbzogDQorIA0KKyAgICAgYnJsdHR5IC1iZHJpdmVyIC1kZGV2aWNlIA0KKyANCisgICAgIFBhcmEgZHJpdmVyLCBlc3BlY2lmaWNhciBvIGPDs2RpZ28gZGUgaWRlbnRpZmljYcOnw6NvIGRvIGRyaXZlciBkZSBkdWFzDQorICBsZXRyYXMgY29ycmVzcG9uZGVudGUgYW8gc2V1IGRpc3BsYXkgQnJhaWxsZS4gUGFyYSBvIGRpc3Bvc2l0aXZvLA0KKyAgZXNwZWNpZmlxdWUgbyBjYW1pbmhvIGNvbXBsZXRvIGRvIGRpc3Bvc2l0aXZvIHF1ZSBvIHNldSBkaXNwbGF5IGVzdMOhDQorICBjb25lY3RhZG8uIA0KKyANCisgICAgIFNlIHZvY8OqIG7Do28gcXVpc2VyIGV4cGxpY2l0YW1lbnRlIGlkZW50aWZpY2FyIG8gZHJpdmVyIGUgdW0NCisgIGRpc3Bvc2l0aXZvIGRlIGNhZGEgdmV6IHF1ZSB2b2PDqiBjb21lw6dhciBvIEJSTFRUWSwgZW50w6NvIHZvY8OqIHBvZGUgdGVyDQorICBkdWFzIGFib3JkYWdlbnMuIFZvY8OqIHBvZGUgZXN0YWJlbGVjZXIgcGFkcsO1ZXMgZG8gc2lzdGVtYSBhdHJhdsOpcyBkbw0KKyAgYnJhaWxsZS1kcml2ZXIgZSBkbyBkaXNwb3NpdGl2byBicmFpbGxlLWRldmljZSBkbyBhcnF1aXZvIGRlDQorICBjb25maWd1cmHDp8OjbywgZS9vdSBjb21waWxhciBhcyBzdWFzIG5lY2Vzc2lkYWRlcyBwYXJhIGEgZGlyZWl0YSBlbQ0KKyAgQlJMVFRZIGF0cmF2ZXMgLS13aXRoLWJyYWlsbGUtZHJpdmVyIGUgLS13aXRoLWJyYWlsbGUtZGV2aWNlLiANCisgICAgIA0KKyAgICAgQSBtZW5zYWdlbSBCUkxUVFkgZGUgaWRlbnRpZmljYcOnw6NvIGRlIHZlcnPDo28gZGV2ZSBhcGFyZWNlciBubyBkaXNwbGF5DQorICBicmFpbGxlIHBvciBhbGd1bnMgc2VndW5kb3MgKHZlamEgbmEgbGluaGEgZGUgY29tYW5kbyAtbSkuIERlcG9pcyBlbGUNCisgIHZhaSBlbWJvcmEgKHF1ZSB2b2PDqiBwb2RlIGFjZWxlcmFyIHByZW1pbmRvIHF1YWxxdWVyIHRlY2xhIGRvDQorICBkaXNwbGF5KSwgYSDDoXJlYSBkYSB0ZWxhIG9uZGUgZXN0w6EgbyBjdXJzb3IgZGV2ZSBhcGFyZWNlci4gSXNzbw0KKyAgc2lnbmlmaWNhIHF1ZSB2b2PDqiBkZXZlIGVzcGVyYXIgcGFyYSB2ZXIgbyBzZXUgY29tYW5kbyBzaGVsbCBwcm9tcHQuDQorICBFbnTDo28sIHF1YW5kbyB2b2PDqiBlbnRyYSBlbSBzZXUgcHLDs3hpbW8gY29tYW5kbywgY2FkYSBjYXLDoWN0ZXIgZGV2ZQ0KKyAgYXBhcmVjZXIgbm8gdmlzb3IsIGNvbW8gw6kgZGlnaXRhZG8gbm8gdGVjbGFkby4NCisNCisgIFNlIHN1YSBleHBlcmnDqm5jaWEsIMOpIGRlaXhhciBvIGV4ZWN1dGFyIG8gQlJMVFRZIGVudMOjbyBkaXZpcnRhLXNlLCA6KS4gU2Ugdm9jw6oNCisgIG7Do28gdGVtIGV4cGVyacOqbmNpYSwgcHJlY2lzYXLDoSB0ZXN0YXIgY2FkYSBkcml2ZXIgc2VwYXJhZGFtZW50ZSBuYSBvcmRlbQ0KKyAgaXNvbGFkYSBkbyBwcm9ibGVtYS4gTyBkcml2ZXIgZGUgdGVsYSBwb2RlIHNlciB0ZXN0YWRvIGNvbSDCk3NjcnRlc3TClCwgZSBvDQorICBkcml2ZXIgZG8gZGlzcGxheSBicmFpbGxlIHBvZGUgc2VyIHRlc3RhZG8gY29tIMKTYnJsdGVzdMKULg0KKw0KKyAgICAgU2Ugdm9jw6ogdGl2ZXIgdW0gcHJvYmxlbWEgcXVlIGV4aWdlIHVtYSBncmFuZGUgcXVhbnRpZGFkZSBkZSBnYXJpbXBvLA0KKyAgZW50w6NvIHZvY8OqIHBvZGUgcXVlcmVyIHVzYXIgYSBzZWd1aW50ZSBsaW5oYSBkZSBjb21hbmRvIGJybHR0eToNCisgIMK3IC1sZGVidWcgcGFyYSByZWdpc3RyYXIgbXVpdGFzIG1lbnNhZ2VucyBkZSBkaWFnbsOzc3RpY28uDQorICDCtyAtbiBwYXJhIG1hbnRlciBCUkxUVFkgZW0gcHJpbWVpcm8gcGxhbm8uDQorICDCtyAtZSBwYXJhIGRpcmVjaW9uYXIgYXMgbWVuc2FnZW5zIGRlIGRpYWduw7NzdGljbyBkZSBlcnJvIHBhZHLDo28gZW0gdmV6DQorICAgIGRlIGxvZyBkbyBzaXN0ZW1hLg0KKw0KKyAgMy40IEluaWNpYW5kbyBvIEJSTFRUWQ0KKyANCitCUkxUVFksIHF1YW5kbyBkZXZpZGFtZW50ZSBpbnN0YWxhZG8sIMOpIGludm9jYWRhIGNvbSBvIMO6bmljbyBjb21hbmRvIA0KK2JybHR0eS4gVW0gYXJxdWl2byBkZSBjb25maWd1cmHDp8OjbyAodmVyIEFycXVpdm9zIGRlIENvbmZpZ3VyYcOnw6NvKSBwb2RlIA0KK3NlciBjcmlhZG8gYSBmaW0gZGUgZXN0YWJlbGVjZXIgcGFkcsO1ZXMgZG8gc2lzdGVtYSBjb21vIGEgbG9jYWxpemHDp8OjbyANCitkbyBhcnF1aXZvIGRlIHByZWZlcsOqbmNpYXMsIG8gZHJpdmVyIGRpc3BsYXkgYnJhaWxsZSBhIHNlciB1dGlsaXphZGEsIG8gDQorZGlzcG9zaXRpdm8gcGFyYSBvIHF1YWwgbyBkaXNwbGF5IGJyYWlsbGUgZXN0aXZlciBsaWdhZG8sIGUgYSB0YWJlbGEgZGUgDQordGV4dG8gcGFyYSBzZXIgdXNhZG8uIE11aXRhcyBvcMOnw7VlcyAodmVyIE9ww6fDtWVzIGRlIExpbmhhIGRlIENvbWFuZG8pIA0KK3Blcm1pdGVtIGEgZXNwZWNpZmljYcOnw6NvIGRlIHRlbXBvIGRlIGV4ZWN1w6fDo28gZXhwbMOtY2l0YSBjb21vIGEgDQorbG9jYWxpemHDp8OjbyBkbyBhcnF1aXZvIGRlIGNvbmZpZ3VyYcOnw6NvLCBvcyBwYWRyw7VlcyBlc3RhYmVsZWNpZG9zIG5vIA0KK2FycXVpdm8gZGUgY29uZmlndXJhw6fDo28sIGUgYWxndW1hcyBjYXJhY3RlcsOtc3RpY2FzIHF1ZSB0w6ptIHBhZHLDtWVzIA0KK3Jhem/DoXZlaXMuIEEgb3DDp8OjbyDClmggZXhpYmUgdW0gcmVzdW1vIGRlIHRvZGFzIGFzIG9ww6fDtWVzLiBBIG9ww6fDo28gLXYgDQorbW9zdHJhIGEgdmVyc8OjbyBhdHVhbCBkbyBwcm9ncmFtYSwgYSBBUEksIGUgb3MgZHJpdmVycyBzZWxlY2lvbmFkb3MuIEEgDQorb3DDp8Ojby12IGV4aWJlIG9zIHZhbG9yZXMgZGFzIG9ww6fDtWVzIGRlcG9pcyBkZSB0b2RhcyBhcyBmb250ZXMgdMOqbSBzaWRvIA0KK2NvbnNpZGVyYWRvcy4gDQorIA0KK8OJIHByb3ZhdmVsbWVudGUgbyBtZWxob3IgcGFyYSBxdWUgbyBzaXN0ZW1hIGluaWNpYXIgYXV0b21hdGljYW1lbnRlIA0KK0JSTFRUWSBjb21vIHBhcnRlIGRhIHNlccO8w6puY2lhIGRlIGluaWNpYWxpemHDp8OjbyBwYXJhIHF1ZSBvIGRpc3BsYXkgDQorYnJhaWxsZSBqw6EgZXN0w6EgaW5zdGFsYWRvIGUgZnVuY2lvbmFuZG8sIHF1YW5kbyBvIGxvZ2luIGRvIHByb21wdCANCithcGFyZWNlci4gQSBtYWlvcmlhIChwcm92YXZlbG1lbnRlIHRvZGFzKSBkYXMgZGlzdHJpYnVpw6fDtWVzIGZvcm5lY2VtIHVtIA0KK3NjcmlwdCBkZSBhcGxpY2HDp8O1ZXMgb25kZSBmb3JuZWNpZGEgcGVsbyB1c3XDoXJpbyBwb2RlIHNlciBzZWd1cmFtZW50ZSANCitjb21lw6dvdSBwZXJ0byBkbyBmaW5hbCBkYSBzZXHDvMOqbmNpYSBkZSBpbmljaWFsaXphw6fDo28uIE8gbm9tZSBkbyBzY3JpcHQgDQorYSBkaXN0cmlidWnDp8OjbyDDqSBkZXBlbmRlbnRlLiBBcXVpIGVzdMOjbyBvcyBxdWUgY29uaGVjZW0gYXTDqSBhZ29yYTogDQorDQorICBSZWQgSGF0DQorICAvZXRjL3JjLmQvcmMubG9jYWwNCisgDQorICAgICBDb21lw6dhbmRvIEJSTFRUWSBkZXNzZSBzY3JpcHQgw6kgdW1hIGJvYSBhcHJveGltYcOnw6NvIChlc3BlY2lhbG1lbnRlDQorICBwYXJhIG5vdm9zIHVzdcOhcmlvcykuIEJhc3RhIGFkaWNpb25hciB1bSBjb25qdW50byBkZSBsaW5oYXMgY29tbw0KKyAgZXN0YXM6DQorDQoraWYgWy14IC9iaW4vYnJsdHR5LWEtZiAvZXRjL2JybHR0eS5jb25mXQ0KK3RoZW4NCisgICAvYmluL2JybHR0eQ0KK2ZpDQorIA0KK0lzc28gZ2VyYWxtZW50ZSBwb2RlIHNlciBhYnJldmlhZG8gcGFyYSBhIGZvcm1hIHVtIHBvdWNvIG1lbm9zIGxlZ8OtdmVsOg0KK1steCAvYmluL2JybHR0eSDClmEgLWYgL2V0Yy9icmx0dHkuY29uZl0gJiYgL2Jpbi9icmx0dHkNCisgDQorTsOjbyBhZGljaW9uZSBlc3RhcyBsaW5oYXMgYW50ZXMgZGEgcHJpbWVpcmEgbGluaGEgKHF1ZSBnZXJhbG1lbnRlIA0KK3BhcmVjZSBjb20gIyEvYmluL3NoKS4gDQorIA0KK1NlIG8gZGlzcGxheSBCcmFpbGxlIGVzdMOhIHNlbmRvIHV0aWxpemFkbyBwZWxvIGFkbWluaXN0cmFkb3IgZG8gDQorc2lzdGVtYSwgZW50w6NvIHByb3ZhdmVsbWVudGUgZGV2ZSBzZXIgaW5pY2lhZG8gbyBtYWlzIGNlZG8gcG9zc8OtdmVsIA0KK2R1cmFudGUgYSBzZXHDvMOqbmNpYSBkZSBib290IChjb21vIGFudGVzIG9zIHNpc3RlbWFzIGRlIGFycXVpdm9zIHPDo28gDQordmVyaWZpY2Fkb3MpLCBkZSBtb2RvIHF1ZSBvIGRpc3BsYXkgdXRpbGl6YWRvIG5vIGNhc28gZGUgYWxnbyBkZXIgDQorZXJyYWRvIGR1cmFudGUgZXN0YXMgdmVyaWZpY2HDp8O1ZXMgZSBvIHNpc3RlbWEgY2FpIG5vIG1vZG8gZGUgdXN1w6FyaW8gDQorw7puaWNvLiBNYWlzIHVtYSB2ZXosIGV4YXRhbWVudGUgb25kZSDDqSBtZWxob3IgZGUgZmF6ZXIgaXNzbyDDqSANCitkaXN0cmlidWnDp8OjbyBkZSBkZXBlbmRlbnRlcy4gQXF1aSBlc3TDo28gb3MgbHVnYXJlcyBxdWUgY29uaGVjZW1vcyBhdMOpIA0KK2Fnb3JhOiANCisNCitEZWJpYW4NCisgIC9ldGMvaW5pdC5kL2Jvb3QgKHBhcmEgdmVyc8O1ZXMgbWFpcyBhbnRpZ2FzKQ0KKyAgL2V0Yy9pbml0LmQvcmNTIChwYXJhIHZlcnPDtWVzIG1haXMgcmVjZW50ZXMpDQorICANCitVbSBwYWNvdGUgYnJsdHR5IMOpIGZvcm5lY2lkbyAodmVyIFtodHRwOi8vcGFja2FnZXMuZGViaWFuLm9yZy9icmx0dHldKSANCithIHBhcnRpciBkZSB2ZXJzw6NvIDMuMCAoV29vZHkpLiBVbWEgdmV6IHF1ZSBlc3RlIHBhY290ZSBjdWlkYSBkYSANCitwYXJ0aWRhIEJSTFRUWSwgbsOjbyBow6EgbmVjZXNzaWRhZGUgZGUgY8OzZGlnbyBmb3JuZWNpZG8gcGVsbyB1c3XDoXJpbyANCitlc3RpdmVyIGluc3RhbGFkby4gDQorIA0KK1JlZEhhdA0KKy9ldGMvcmMuZC9yYy5zeXNpbml0DQorIA0KK0N1aWRhZG8gcXVlIHZlcnPDtWVzIHBvc3RlcmlvcmVzLCBhIGZpbSBkZSBhcG9pYXIgdW0gcHJvY2Vzc28gZGUgDQoraW5pY2lhbGl6YcOnw6NvIG1haXMgb3JpZW50YWRhIHBhcmEgbyB1dGlsaXphZG9yIGRvIHNpc3RlbWEsIHRlbSBlc3NlIA0KK3NjcmlwdCByZWludm9rZSBzaSBzw7MsIHF1ZSBlc3TDoSBzb2IgbyBjb250cm9sZSBkZSBpbml0bG9nLiBPbGhhLCANCitwcm92YXZlbG1lbnRlLCBhdMOpIHBlcnRvIGRvIHRvcG8sIHBhcmEgdW0gY29uanVudG8gZGUgbGluaGFzIGNvbW8gDQorZXN0YXM6DQorDQorIyBFeGVjdXRlIG5vdmFtZW50ZSBhIG7Ds3MgbWVzbW9zIGF0cmF2w6lzIGluaXRsb2cNCitpZiBbLXogIiQgSU5fSU5JVExPRyJdOyB0aGVuDQorWy1mIC9zYmluL2luaXRsb2ddICYmIGV4ZWMgL3NiaW4vaW5pdGxvZyAkIElOSVRMT0dfQVJHUyDClnIgDQorL2V0Yy9yYy5zeXNpbml0DQorZmkgDQorDQorSW5pY2lhbGl6YW5kbyBvIEJSTFRUWSBwYXJ0aXIgZG8gcmVzdWx0YWRvIGVtIGR1YXMgcmVpbnZvY2HDp8O1ZXMgZG8gDQorQlJMVFRZIHByb2Nlc3NvcyBlbSBleGVjdcOnw6NvIGFvIG1lc21vIHRlbXBvLiBTZSBhIHN1YSB2ZXJzw6NvIGRvIHNjcmlwdCANCit0ZW0gZXNzZSByZWN1cnNvLCBjZXJ0aWZpcXVlLXNlIGRlIGNvbWXDp2FyIEJSTFRUWSBhcMOzcyBhcyBsaW5oYXMgcXVlIA0KK2ltcGxlbWVudMOhLWxvLiANCisgDQorU2xhY2t3YXJlDQorICAvZXRjL3JjLmQvcmMuUw0KKyANCitTdVNFDQorICAvc2Jpbi9pbml0LmQvYm9vdA0KKyANCitVbWEgYWx0ZXJuYXRpdmEgw6kgY29tZcOnYXIgQlJMVFRZIGEgcGFydGlyIGRlIC9ldGMvaW5pdHRhYi4gVm9jw6ogdGVtIA0KK2R1YXMgb3DDp8O1ZXMsIHNlIHZvY8OqIGVzY29saGVyIGVzdGEgcm90YS4NCitTZSB2b2PDqiBxdWVyIHF1ZSBlbGEgc2VqYSBpbmljaWFkYSBtdWl0byBjZWRvLCBuw6NvIHByZWNpc2Egc2VyIA0KK3JlaW5pY2lhZG8gYXV0b21hdGljYW1lbnRlIHBhcmEgZW5jZXJyYXIsIGVtIHNlZ3VpZGEsIGFkaWNpb25lIHVtYSANCitsaW5oYSBjb21vIGVzdGEgYW50ZXMgZG8gcHJpbWVpcm86IHN5c2luaXQ6IGEgbGluaGEgcXVlIGrDoSBlc3TDoSBsw6EgDQorZGVudHJvLg0KKw0KK2JybDo6c3lzaW5pdDovYmluL2JybHR0eQ0KK1NlIHZvY8OqIG7Do28gc2UgaW1wb3J0YSBxdWUgc2VqYSBpbmljaWFkbyBtYWlzIHRhcmRlLCBtYXMgcXVlcm8gcXVlIGVsZSANCitzZWphIHJlaW5pY2lhZG8gYXV0b21hdGljYW1lbnRlIHBhcmEgZW5jZXJyYXIsIGFkaWNpb25lIHVtYSBsaW5oYSBjb21vIA0KK2VzdGEgZW0gcXVhbHF1ZXIgbHVnYXIgZGVudHJvIGRvIGFycXVpdm8uDQorDQorICBicmw6MTIzNDU6cmVzcGF3bjovYmluL2JybHR0eSDClm4NCisgDQorIEEgb3DDp8OjbyAtbiAoLS1ub2RhZW1vbikgw6kgbXVpdG8gaW1wb3J0YW50ZSBxdWFuZG8gZXhlY3V0YW5kbyBCUkxUVFkgDQorY29tIGZhY2lsaWRhZGUgaW5pdCByZXNwYXduLiBWb2PDqiB2YWkgYWNhYmFyIGNvbSBjZW50ZW5hcyBkZSBwcm9jZXNzb3MgDQorQlJMVFRZIHRvZG9zIHJvZGFuZG8gYW8gbWVzbW8gdGVtcG8sIHNlIHZvY8OqIGVzcXVlY2VyIGRlIGVzcGVjaWZpY2FyLiANCisgDQorVmVyaWZpcXVlIHNlIG8gaWRlbnRpZmljYWRvciAoYnQgbmVzdGVzIGV4ZW1wbG9zKSBqw6EgbsOjbyBlc3TDoSBzZW5kbyANCit1c2FkbyBwb3Igb3V0cmEgZW50cmFkYSwgZSwgc2UgZm9yLCBlc2NvbGhlciB1bWEgb3DDp8OjbyBkaWZlcmVudGUuIA0KKyANCitOb3RlLXNlIHF1ZSB1bSBjb21hbmRvIGNvbW8ga2lsbCAtVEVSTSDDqSBzdWZpY2llbnRlIHBhcmEgcGFyYXIgQlJMVFRZIA0KK2VtIHN1YXMgdHJpbGhhcy4gU2UgZWxlIG1vcnJlIGR1cmFudGUgYSBlbnRyYWRhIGVtIG1vZG8gZGUgdXN1w6FyaW8gDQorw7puaWNvLCBwb3IgZXhlbXBsbywgcG9kZSBtdWl0byBiZW0gc2VyIGRldmlkbyBhIHVtIHByb2JsZW1hIGRlc3RhIA0KK25hdHVyZXphLiANCisgDQorQWxndW5zIHNpc3RlbWFzLCBjb21vIHBhcnRlIGRhIHNlccO8w6puY2lhIGRlIGJvb3QsIHNvbmRhIGFzIHBvcnRhcyANCitzZXJpYWlzIChub3JtYWxtZW50ZSwgYSBmaW0gZGUgbG9jYWxpemFyIGF1dG9tYXRpY2FtZW50ZSBvIG1vdXNlIGUgDQorZGVkdXppciBzZXUgdGlwbykuIFNlIG8gc2V1IGRpc3BsYXkgYnJhaWxsZSBlc3RpdmVyIHVzYW5kbyB1bWEgcG9ydGEgDQorc2VyaWFsLCBlc3RlIHRpcG8gZGUgc29uZGFnZW0gcG9kZSBzZXIgbyBzdWZpY2llbnRlIHBhcmEgb2J0w6otbG8gDQorY29uZnVzby4gU2UgaXNzbyBhY29udGVjZXIgY29tIHZvY8OqLCBlbnTDo28gdGVudGUgcmVpbmljaWFyIG8gZHJpdmVyIA0KK2JyYWlsbGUgKHZlamEgbyBjb21hbmRvIFJFU1RBUlRCUkwpLiBNZWxob3IgYWluZGEsIGRlc2xpZ2FyIGEgcG9ydGEgDQorc2VyaWFsLiBzb2JyZSBjb21vIGZhemVyIGlzc286IA0KKyANCitSZWQgSGF0IA0KKyANCitBIHNvbmRhZ2VtIMOpIGZlaXRhIHBvciB1bSBzZXJ2acOnbyBjaGFtYWRvIGt1ZHp1LiBVc2UgbyBjb21hbmRvOg0KKw0KK2Noa2NvbmZpZyAtLWxpc3Qga3VkenUsIA0KKyANCitwYXJhIHZlciBzZSBlbGUgZm9pIGF0aXZhZG8uIFVzZSBvIGNvbWFuZG86IA0KKw0KK2Noa2NvbmZpZyBrdWR6dSBvZmYNCisgDQorUGFyYSBkZXNhdGl2w6EtbG8uIFBvc3Rlcmlvcm1lbnRlLCBvcyBsYW7Dp2FtZW50b3MgcGVybWl0ZW0gcXVlIHZvY8OqIA0KK2V4ZWN1dGUga3VkenUsIHNlbSBkZWl4YXIgZGUgc29uZGFnZW0gZGFzIHBvcnRhcyBzZXJpYWlzLiBQYXJhIGZhemVyIA0KK2lzc28sIGVkaXRhciBvIGFycXVpdm8gL2V0Yy9zeXNjb25maWcva3VkenUvIGUgZGVmaW5pciBTQUZFIHBhcmEgeWVzLiANCisgDQorU2Ugdm9jw6ogZGVzZWphIGluaWNpYXIgQlJMVFRZIGFudGVzIGRlIHF1YWxxdWVyIHNpc3RlbWEgZGUgYXJxdWl2b3Mgc8OjbyANCittb250YWRvcywgZW0gc2VndWlkYSwgZ2FyYW50aXIgcXVlIHRvZG9zIG9zIHNldXMgY29tcG9uZW50ZXMgZXN0w6NvIA0KK2luc3RhbGFkb3Mgbm8gc2lzdGVtYSBkZSBhcnF1aXZvcyByYWl6LiBWZWphIGFzIG9ww6fDtWVzIC0td2l0aC1leGVjdXRlLQ0KK3Jvb3QsIC0tYmluZGlyLCAtLWxpYmRpciwgLS13aXRoLXdyaXRhYmxlLWRpcmVjdG9yeSwgZSDClndpdGgtZGF0YS0NCitkaXJlY3RvcnkuDQorDQorMy41IENvbnNpZGVyYcOnw7VlcyBkZSBzZWd1cmFuw6dhDQorIA0KK0JSTFRUWSBwcmVjaXNhIHNlciBleGVjdXRhZG8gY29tIHByaXZpbMOpZ2lvcyBkZSByb290LCBwb3JxdWUgZWxlIA0KK3ByZWNpc2EgbGVyIGUgZXNjcmV2ZXIgZGUgYWNlc3NvIHBhcmEgYSBwb3J0YSBwYXJhIG8gcXVhbCBvIGRpc3BsYXkgDQorYnJhaWxsZSDDqSBjb25lY3RhZG8sIGFjZXNzbyBkZSBsZWl0dXJhIC9kZXYvdmNzYSBvdSBlcXVpdmFsZW50ZSAocGFyYSANCitjb25zdWx0YXIgYXMgZGltZW5zw7VlcyBlIHBvc2nDp8OjbyBkbyBjdXJzb3IsIGUgcmV2ZXIgbyBjb250ZcO6ZG8gZGEgdGVsYSANCitlbSBkZXN0YXF1ZSksIGUgbGVyIGUgZ3JhdmFyIG8gYWNlc3NvIGFvIGNvbnNvbGUgZG8gc2lzdGVtYSAocGFyYSBhIA0KK2VudHJhZGEgZGUgc2V0YSBjaGF2ZSBkdXJhbnRlIGN1cnNvciBlbmNhbWluaGFtZW50bywgcGFyYSBhIGluc2Vyw6fDo28gZGUgDQorY2FyYWN0ZXJlcyBkZSBlbnRyYWRhIGR1cmFudGUgYSBwYXN0YSwgcGFyYSBzaW11bGHDp8OjbyBkZSBjaGF2ZSANCit1dGlsaXphbmRvIGFzIHRlY2xhcyBubyBkaXNwbGF5IGJyYWlsbGUsIHBhcmEgcmVjdXBlcmFyIHRyYWR1w6fDo28gc2HDrWRhIA0KK2RlIGNhcmFjdGVyZSBlIGZvbnRlIGRlIHRlbGEgdGFiZWxhcyBkZSBtYXBlYW1lbnRvLCBlIHBhcmEgYSBhdGl2YcOnw6NvIA0KK2RvIGFwaXRvIGludGVybm8pLiBPIGFjZXNzbyBhb3MgZGlzcG9zaXRpdm9zIG5lY2Vzc8OhcmlvcyBwb2RlbSwgDQorZXZpZGVudGVtZW50ZSwgc2VyIGNvbmNlZGlkbyBhIHVtIHVzdcOhcmlvIG7Do28tcm9vdCBhbHRlcmFuZG8gYXMgDQorcGVybWlzc8O1ZXMgZGUgYXJxdWl2byBhc3NvY2lhZG8gY29tIG9zIGRpc3Bvc2l0aXZvcy4gTWVyYW1lbnRlIHRlciANCithY2Vzc28gYW8gY29uc29sZSwgbm8gZW50YW50bywgbsOjbyDDqSBzdWZpY2llbnRlIHBvcnF1ZSBhdGl2YXIgbyBhdmlzbyANCitzb25vcm8gaW50ZXJubyBlIHNpbXVsYW5kbyBnb2xwZXMgZGUgdGVjbGEgYWluZGEgcmVxdWVyZW0gcHJpdmlsw6lnaW9zIA0KK2RlIHJvb3QuIEVudMOjbywgc2Ugdm9jw6ogZXN0aXZlciBkaXNwb3N0byBhIGRlc2lzdGlyIGRlIGN1cnNvciBkZSANCityb3RlYW1lbnRvLCBjb3J0YXIgZSBjb2xhciwgYmlwcywgZSB0dWRvIGlzc28sIHZvY8OqIHBvZGUgZXhlY3V0YXIgDQorQlJMVFRZIHNlbSBwcml2aWzDqWdpb3MgZGUgcm9vdC4NCisNCiszLjYgUmVzdHJpw6fDtWVzIGRlIENvbXBpbGHDp8OjbyBlIFRlbXBvIGRlIEV4ZWN1w6fDo28NCisgDQorQWxlcnQgVHVuZXMgDQorIA0KK0FsZ3VtYXMgcGxhdGFmb3JtYXMgbsOjbyBzdXBvcnRhbSB0b2RvcyBvcyBkaXNwb3NpdGl2b3MgZGUgbcO6c2ljYS4gVmVqYSANCitUdW5lIERldmljZS4gDQorIA0KK0RyaXZlciBzaW50ZXRpemFkb3IgZGUgdm96IEZlc3RpdmFsTGl0ZSANCisgDQorTyBkcml2ZXIgcGFyYSBvIHRleHQtdG8tc3BlZWNoIEZlc3RpdmFsTGl0ZSDDqSBjb25zdHJ1w61kbyBzb21lbnRlIHNlIG8gDQorcGFjb3RlIGZvaSBpbnN0YWxhZG8uIEVzdGUgZHJpdmVyIGUgbyBkcml2ZXIgcGFyYSBvIHRleHQtdG8tc3BlZWNoIGRvIA0KK1RoZXRhICh2ZWphIC0td2l0aC10aGV0YSkgbsOjbyBwb2RlbSBzZXIgc2ltdWx0YW5lYW1lbnRlIGxpZ2Fkb3MgYW8gDQorYmluw6FyaW8gQlJMVFRZICh2ZWphIC0td2l0aC1zcGVlY2gtZHJpdmVyKS4gDQorIA0KK0RyaXZlciBMaWJicmFpbGxlIERpc3BsYXkgQnJhaWxsZSANCisgDQorTyBkcml2ZXIgcGFyYSBvIHBhY290ZSBMaWJicmFpbGxlIMOpIGNvbnN0cnXDrWRvIHNvbWVudGUgc2UgbyBwYWNvdGUgZm9pIA0KK2luc3RhbGFkby4gDQorIA0KK0RyaXZlciBzaW50ZXRpemFkb3IgZGUgdm96IE1pa3JvcHVoZSAgDQorIA0KK08gZHJpdmVyIHBhcmEgbyB0ZXh0LXRvLXNwZWVjaCBNaWtyb3B1aGUgw6kgY29uc3RydcOtZG8gc29tZW50ZSBzZSBvIA0KK3BhY290ZSBmb2kgaW5zdGFsYWRvLiBFc3RlIGRyaXZlciBuw6NvIHBvZGUgc2VyIGluY2x1w61kbyBzZSBvIGJpbsOhcmlvIA0KK0JSTFRUWSDDqSBlc3RhdGljYW1lbnRlIGxpZ2Fkb3MgKHZlciBhIG9ww6fDo28gLS1lbmFibGUtc3RhbmRhbG9uZS0NCitwcm9ncmFtcyksIHBvcnF1ZSB1bSBhcnF1aXZvIGVzdMOhdGljbyBuw6NvIGVzdMOhIGluY2x1w61kbyBubyBwYWNvdGUuIA0KKyANCitEcml2ZXIgZG8gc2ludGV0aXphZG9yIGRlIHZveiBUaGV0YSANCisgDQorTyBkcml2ZXIgcGFyYSBvIHRleHQtdG8tc3BlZWNoIFRoZXRhIMOpIGNvbnN0cnXDrWRvIHNvbWVudGUgc2UgbyBwYWNvdGUgDQorZm9pIGluc3RhbGFkby4gDQorIA0KK0VzdGUgZHJpdmVyIGUgbyBkcml2ZXIgcGFyYSBvIHRleHQtdG8tc3BlZWNoIEZlc3RpdmFsTGl0ZSAodmVqYSAtLXdpdGgtDQorZmxpdGUpIG7Do28gcG9kZW0gc2VyIHNpbXVsdGFuZWFtZW50ZSBsaWdhZG9zIGFvIGJpbsOhcmlvIEJSTFRUWSAodmVqYSAtLQ0KK3dpdGgtc3BlZWNoLWRyaXZlcikuIFNlIGVzc2UgZHJpdmVyIMOpIGNvbnN0cnXDrWRvIGNvbW8gdW0gb2JqZXRvIA0KK2NhcnJlZ2FkbyBkaW5hbWljYW1lbnRlIGNvbXBhcnRpbGhhZGEgZW50w6NvICQgVEhFVEFfSE9NRS9saWIgZGV2ZSBzZXIgDQorYWRpY2lvbmFkbyDDoCB2YXJpw6F2ZWwgZGUgYW1iaWVudGUgTERfTElCUkFSWV9QQVRIIGFudGVzIEJSTFRUWSDDqSANCitpbnZvY2FkbyBwb3JxdWUgb3Mgb2JqZXRvcyBjb21wYXJ0aWxoYWRvcyBkZW50cm8gZG8gcGFjb3RlIG7Do28gY29udMOpbSANCitjYW1pbmhvcyBkZSBwZXNxdWlzYSBlbSB0ZW1wbyBkZSBleGVjdcOnw6NvIGRlIHN1YXMgZGVwZW5kw6puY2lhcy4gDQorDQorRHJpdmVyIHNpbnRldGl6YWRvciBkZSB2b3ogVmlhVm9pY2UgDQorIA0KK08gZHJpdmVyIHBhcmEgbyB0ZXh0LXRvLXNwZWVjaCBWaWFWb2ljZSDDqSBjb25zdHJ1w61kbyBzb21lbnRlIHNlIG8gDQorcGFjb3RlIGZvaSBpbnN0YWxhZG8uIA0KK0VzdGUgZHJpdmVyIG7Do28gcG9kZSBzZXIgaW5jbHXDrWRvIHNlIG8gYmluw6FyaW8gQlJMVFRZIMOpIGVzdGF0aWNhbWVudGUgDQorbGlnYWRvcyAodmVyIC0tZW5hYmxlLXN0YW5kYWxvbmUtcHJvZ3JhbXMpLCBwb3JxdWUgdW0gYXJxdWl2byBlc3TDoXRpY28gDQorbsOjbyBlc3TDoSBpbmNsdcOtZG8gbm8gcGFjb3RlLiANCisgDQorRHJpdmVyIFZpZGVvQnJhaWxsZSBEaXNwbGF5IEJyYWlsbGUgDQorIA0KK08gZHJpdmVyIHBhcmEgbyBkaXNwbGF5IEJyYWlsbGUgVmlkZW9CcmFpbGxlIMOpIGNvbnN0cnXDrWRvIGVtIHRvZG9zIG9zIA0KK3Npc3RlbWFzLCBtYXMgc8OzIGZ1bmNpb25hIGVtIExpbnV4Lg0KKw0KKzMuNyBJbnN0YWxhw6fDo28gYSBwYXJ0aXIgZGUgdW0gYXJxdWl2byBSUE0NCisgDQorUGFyYSBpbnN0YWxhciBCUkxUVFkgZGUgdW0gUlBNIChSZWRIYXQgUGFja2FnZSBNYW5hZ2VyKSBkbyBhcnF1aXZvLCANCitmYcOnYSBvIHNlZ3VpbnRlOg0KKw0KKzEuIEJhaXhlIG8gcGFjb3RlIGJpbsOhcmlvIHF1ZSBjb3JyZXNwb25kZSBhbyBzZXUgaGFyZHdhcmUuIFZhaSBzZXIgdW0gDQorYXJxdWl2byBjaGFtYWRvIGJybHR0eS1yZWxlYXNlLXZlcnNpb24uYXJjaGl0ZWN0dXJlLnJwbSwgcG9yIGV4ZW1wbG8sIA0KK2JybHR0eS0zLjAtMS5pMzg2LnJwbS4NCisNCisyLiBJbnN0YWxlIG8gcGFjb3RlLg0KKyAgICAgIHJwbSAtVXZoIGJybHR0eS1yZWxlYXNlLXZlcnNpb24uYXJjaGl0ZWN0dXJlLnJwbQ0KKyANCitJc3RvIGRldmUgc2VyIGZlaXRvIGNvbW8gcm9vdC4gRXN0cml0YW1lbnRlIGZhbGFuZG8sIGEgb3DDp8OjbyDClnUgKHVwZGF0ZSkgDQorw6kgYSDDum5pY2EgcXVlIMOpIG5lY2Vzc8OhcmlvLiBBIG9ww6fDo28gLXYgKHZlcmJvc2UpIGV4aWJlIG8gbm9tZSBkbyBwYWNvdGUgDQorY29tbyBlbGUgZXN0w6Egc2VuZG8gaW5zdGFsYWRvLiBBIG9ww6fDo28gLWggKGhhc2hlcykgZXhpYmUgdW1hIGJhcnJhIGRlIA0KK3Byb2dyZXNzbyAodXNhbmRvIHNpbmFpcyBkZSBoYXNoKS4gDQorIA0KK1BhcmEgb3MgY29yYWpvc29zLCBuw7NzIHRhbWLDqW0gZm9ybmVjZW1vcyBhIGZvbnRlIGRvIGFycXVpdm8gUlBNIA0KKyguc3JjLnJwbSksIG1hcyBpc3NvIGVzdMOhIGZvcmEgZG8gZXNjb3BvIGRlc3RlIGRvY3VtZW50by4gDQorDQorUGFyYSBkZXNpbnN0YWxhciBCUkxUVFksIGZhw6dhOg0KKyAgICAgICAgICANCisgICAgICBycG0tZSBicmx0dHkNCisNCiszLjggT3V0cm9zIFV0aWxpZGFkZXMNCisgDQorQ29uc3RydWluZG8gQlJMVFRZIHRhbWLDqW0gcmVzdWx0YSBuYSBjb25zdHJ1w6fDo28gZGUgYWp1ZGFzIGUgcGVxdWVub3MgDQordXRpbGl0w6FyaW9zIGRlIGRpYWduw7NzdGljby4gDQorIA0KKzMuOC4xIGJybHR0eS1jb25maWcgDQorIA0KK0VzdGUgdXRpbGl0w6FyaW8gY3JpYSB1bWEgc8OpcmllIGRlIHZhcmnDoXZlaXMgZGUgYW1iaWVudGUgcGFyYSB2YWxvcmVzIHF1ZSANCityZWZsZXRlbSBhIGluc3RhbGHDp8OjbyBhdHVhbCBkbyBCUkxUVFkgKHZlciBCdWlsZCBPcHRpb25zKS4gRGV2ZSBzZXIgDQorZXhlY3V0YWRvIGRlbnRybyBkZSB1bSBhbWJpZW50ZSBzaGVsbCBleGlzdGVudGUsIGlzdG8gw6ksIG7Do28gY29tbyB1bSANCitjb21hbmRvIGVtIHNldSBwcsOzcHJpbyBkaXJlaXRvLCBlIHPDsyBwb2RlIHNlciB1c2FkbyBwb3Igc2NyaXB0cyBxdWUgDQorc3Vwb3J0YW0gYSBzaW50YXhlIEJvdXJuZSBTaGVsbC4NCisNCitBcyBzZWd1aW50ZXMgdmFyacOhdmVpcyBkZSBhbWJpZW50ZSBzw6NvIGRlZmluaWRhczoNCisNCitCUkxUVFlfVkVSU0lPTg0KK08gbsO6bWVybyBkZSB2ZXJzw6NvIGRvIHBhY290ZSBCUkxUVFkuDQorDQorQlJMVFRZX0VYRUNVVEVfUk9PVA0KK3Jvb3QgZW0gdGVtcG8gZGUgZXhlY3XDp8OjbyBwYXJhIG8gcGFjb3RlIGluc3RhbGFkby4gQ29uZmlndXJhZG8gY29tIC0tDQord2l0aC1leGVjdXRlLXJvb3QuDQorDQorQlJMVFRZX1BST0dSQU1fRElSRUNUT1JZDQorRGlyZXRvcmlvIGRlIHByb2dyYW1hcyBleGVjdXTDoXZlaXMgKGJpbsOhcmlvcywgZXhlY3V0w6F2ZWlzKS4gQ29uZmlndXJhZGEgDQorYXRyYXbDqXMgLS13aXRoLXByb2dyYW0tZGlyZWN0b3J5Lg0KKw0KK0JSTFRUWV9MSUJSQVJZX0RJUkVDVE9SWQ0KK0RpcmV0w7NyaW8gZGUgZHJpdmVycy4gQ29uZmlndXJhZGEgYXRyYXbDqXMgZGUgLS13aXRoLWxpYnJhcnktZGlyZWN0b3J5Lg0KKw0KK0JSTFRUWV9XUklUQUJMRV9ESVJFQ1RPUlkNCitEaXJldMOzcmlvIHF1ZSBwb2RlIHNlciBncmF2YWRvLiBDb25maWd1cmFkbyBhdHJhdsOpcyBkbyAtLXdpdGgtd3JpdGFibGUtDQorZGlyZWN0b3J5Lg0KKw0KK0JSTFRUWV9EQVRBX0RJUkVDVE9SWQ0KK0RpcmV0b3JpbyBkZSB0YWJlbGFzIGUgcMOhZ2luYXMgZGUgYWp1ZGEuIENvbmZpZ3VyYWRhIHZpYSAtLXdpdGgtZGF0YS0NCitkaXJlY3RvcnkuDQorDQorQlJMVFRZX01BTlBBR0VfRElSRUNUT1JZOiBEaXJldG9yaW8gZGUgcMOhZ2luYXMgZGUgbWFudWFsLiBDb25maWd1cmFkYSANCit2aWEgLS13aXRoLW1hbnBhZ2UtZGlyZWN0b3J5Lg0KKw0KK0JSTFRUWV9JTkNMVURFX0RJUkVDVE9SWTogRGlyZXTDs3JpbyBwYXJhIGFycXVpdm9zIGRlIGNhYmXDp2FsaG8gQyBCcmxBUEkuIA0KK0NvbmZpZ3VyYWRvIGF0cmF2w6lzIC0td2l0aC1pbmNsdWRlLWRpcmVjdG9yeS4gDQorDQorQlJMQVBJX1ZFUlNJT04NCitPIG7Dum1lcm8gZGEgdmVyc8OjbyBCcmxBUEkgKEFwcGxpY2F0aW9uIFByb2dyYW1taW5nIEludGVyZmFjZSBkbyBCUkxUVFkpLg0KKw0KK0JSTEFQSV9SRUxFQVNFDQorTyBuw7ptZXJvIGRhIHZlcnPDo28gY29tcGxldGEgZGUgQnJsQVBJLg0KKw0KK0JSTEFQSV9BVVRIDQorTyBub21lIGRvIGFycXVpdm8gZGUgY2hhdmUgZGUgQnJsQVBJLg0KKyANCitBbMOpbSBkaXNzbywgYXMgc2VndWludGVzIHZhcmnDoXZlaXMgZGUgYW1iaWVudGUgcGFkcsOjbyBhdXRvY29uZiB0YW1iw6ltIA0KK3PDo28gZGVmaW5pZG9zOiANCisgDQorcHJlZml4ICANCitTdWJyb290IHBhcmEgYXJxdWl2b3MgaW5kZXBlbmRlbnRlcyBkZSBhcnF1aXRldHVyYS4gQ29uZmlndXJhZG8gYXRyYXbDqXMgDQorZG8gLS1wcmVmaXguIA0KKyANCitleGVjX3ByZWZpeCANCitTdWJyb290IHBhcmEgYXJxdWl2b3MgZGVwZW5kZW50ZXMgZGUgYXJxdWl0ZXR1cmEuIENvbmZpZ3VyYWRhIHZpYSAtLQ0KK2V4ZWMtcHJlZml4LiANCisgDQorYmluZGlyIA0KK0xvY2FsIHBhZHLDo28gcGFyYSBvIGRpcmV0w7NyaW8gZG8gcHJvZ3JhbWEuIENvbmZpZ3VyYWRhIHZpYSAtLWJpbmRpci4gDQorIA0KK2xpYmRpciANCitEaXJldMOzcmlvIGVzdMOhdGljbyBCcmxBUEkgZGUgYXJxdWl2byBlIG9iamV0b3MgY2FycmVnw6F2ZWlzIA0KK2RpbmFtaWNhbWVudGUuIFN1cG9ydGUgcGFkcsOjbyBvIGRpcmV0w7NyaW8gZGEgYmlibGlvdGVjYS4gQ29uZmlndXJhZGEgdmlhIA0KKy0tbGliZGlyLiANCisgDQorc3lzY29uZmRpciANCitEaXJldMOzcmlvIHBhcmEgYXJxdWl2b3MgZGUgY29uZmlndXJhw6fDo28uIFN1cG9ydGUgcGFkcsOjbyBwYXJhIG8gZGlyZXTDs3JpbyANCitkZSBkYWRvcy4gQ29uZmlndXJhZGEgdmlhIC0tc3lzY29uZmRpci4gDQorIA0KK21hbmRpciANCitMb2NhbGl6YcOnw6NvIHBhZHLDo28gcGFyYSBvIGRpcmV0w7NyaW8gcMOhZ2luYXMgZGUgbWFudWFsLiBDb25maWd1cmFkYSB2aWEgLQ0KKy1tYW5kaXIuIA0KKyANCitpbmNsdWRlZGlyIA0KK1N1cG9ydGUgcGFkcsOjbyBwYXJhIG8gZGlyZXTDs3JpbyBhcnF1aXZvcyBkZSBjYWJlw6dhbGhvLiBDb25maWd1cmFkYSB2aWEgLQ0KKy1pbmNsdWRlZGlyLiANCisgDQorMy44LjIgYnJsdHR5LWluc3RhbGwNCisgDQorRXN0ZSB1dGlsaXTDoXJpbyBjb3BpYSBCUkxUVFkgaGllcmFycXVpYSBkZSBhcnF1aXZvcyBpbnN0YWxhZG8gYSBwYXJ0aXIgDQorZGUgdW0gbG9jYWwgcGFyYSBvdXRyby4NCisNCiticmx0dHktaW5zdGFsbCB0byBbZnJvbV0NCisgDQordG8gDQorQSBsb2NhbGl6YcOnw6NvIHBhcmEgbyBxdWFsIGEgaGllcmFycXVpYSBkZSBhcnF1aXZvcyBpbnN0YWxhZG9zIGZvaSANCitjb3BpYWRhLiBEZXZlIHNlciB1bSBkaXJldMOzcmlvIGV4aXN0ZW50ZS4gDQorIA0KK2Zyb20gDQorQSBsb2NhbGl6YcOnw6NvIGRvIHF1YWwgYSBoaWVyYXJxdWlhIGRlIGFycXVpdm9zIGluc3RhbGFkb3Mgw6kgcGFyYSBzZXIgDQordG9tYWRvLiBTZSBmb3IgZXNwZWNpZmljYWRvLCBlbnTDo28gZWxlIGRldmUgc2VyIHVtIGRpcmV0w7NyaW8gZXhpc3RlbnRlLiANCitTZSBuw6NvIGZvciBlc3BlY2lmaWNhZG8sIGVudMOjbyBvIGxvY2FsIHV0aWxpemFkbyBwYXJhIGEgY29uc3RydcOnw6NvIMOpIA0KK2Fzc3VtaWRhLiANCisgDQorRXN0ZSB1dGlsaXTDoXJpbyBwb2RlIHNlciB1c2FkbywgcG9yIGV4ZW1wbG8sIHBhcmEgY29waWFyIEJSTFRUWSBwYXJhIHVtIA0KK2Rpc2NvIGRlIHJhaXouIFNlIHVtIGRpc3F1ZXRlIGRlIHJvb3Qgw6kgbW9udGFkYSBjb21vIC9tbnQgZSBCUkxUVFkgZXN0w6EgDQoraW5zdGFsYWRvIG5vIHNpc3RlbWEgcHJpbmNpcGFsLCBlbSBzZWd1aWRhLCBkaWdpdGFuZG8gDQorDQorICAgICAgYnJsdHR5LWluc3RhbGwvbW50IA0KKyANCitjcmlhIGPDs3BpYXMgZG8gQlJMVFRZLCBqdW50YW1lbnRlIGNvbSB0b2RvcyBvcyBzZXVzIGRhZG9zIGUgYXJxdWl2b3MgZGEgDQorYmlibGlvdGVjYSwgcGFyYSBhIHJhaXogZGUgZGlzcXVldGUuIA0KK0FsZ3VucyBwcm9ibGVtYXMgZm9yYW0gc2VudGlkb3MgcXVhbmRvIGNvcGlhIG8gQlJMVFRZIGVudHJlIHNpc3RlbWFzIGNvbSANCitkaWZlcmVudGVzIHZlcnPDtWVzIGRhIGJpYmxpb3RlY2EgQyBjb21wYXJ0aWxoYWRhLiBFc3RlIHZhbGUgYSBwZW5hIA0KK2ludmVzdGlnYXIgc2Ugdm9jw6ogdGVtIGRpZmljdWxkYWRlcy4gDQorIA0KKzMuOC4zIGJybHRlc3QNCisgDQorRXN0ZSB1dGlsaXTDoXJpbyB0ZXN0YSB1bSBkcml2ZXIgZG8gZGlzcGxheSBicmFpbGUsIGUgdGFtYsOpbSBmb3JuZWNlIHVtYSANCitmb3JtYSBpbnRlcmF0aXZhIGRlIGFwcmVuZGVyIHF1YWlzIGFzIHRlY2xhcyBkbyBkaXNwbGF5IGJyYWlsbGUuIEVsZSANCitkZXZlIHNlciBleGVjdXRhZG8gY29tbyByb290Lg0KKw0KKyAgICAgIGJybHRlc3QgLW9wdGlvbiAuLi4gW2RyaXZlciBbbmFtZT0gdmFsdWUgLi4uXV0NCisgDQorX2RyaXZlciAgDQorTyBkcml2ZXIgcGFyYSBvIGRpc3BsYXkgYnJhaWxsZS4gRWxhIGRldmUgc2VyIHVtYSBkZSBkdWFzIGxldHJhcyBkbyANCitjw7NkaWdvIGRlIGlkZW50aWZpY2HDp8OjbyBkbyBkcml2ZXIuIFNlIG7Do28gZm9yIGVzcGVjaWZpY2FkbywgZW50w6NvIG8gDQorcHJpbWVpcm8gZHJpdmVyIGNvbmZpZ3VyYWRvIGNvbSAtLSB3aXRoLWJyYWlsbGUtZHJpdmVyIMOpIGFzc3VtaWRhLiANCisgDQorX25hbWUgPSB2YWx1ZSAgDQorRGVmaW5pciB1bSBwYXLDom1ldHJvIGRlIGRyaXZlciBkaXNwbGF5IEJyYWlsbGUuIFBhcmEgb2J0ZXIgdW1hIGRlc2NyacOnw6NvIA0KK2RvcyBwYXLDom1ldHJvcyBhY2VpdG9zIHBvciB1bSBkcml2ZXIgZXNwZWPDrWZpY28sIGNvbnN1bHRlIGEgZG9jdW1lbnRhw6fDo28gDQorZG8gZHJpdmVyLiANCisgDQorLWRkZXZpY2UgLS1kZXZpY2UgPSBkZXZpY2UgDQorTyBjYW1pbmhvIGFic29sdXRvIHBhcmEgbyBkaXNwb3NpdGl2byBwYXJhIG8gcXVhbCBvIGRpc3BsYXkgYnJhaWxsZSBlc3TDoSANCitsaWdhZG8uIFNlIG7Do28gZm9yIGVzcGVjaWZpY2FkbywgbyBkaXNwb3NpdGl2byBjb25maWd1cmFkbyBwb3IgLS13aXRoLQ0KK2JyYWlsbGUtZGV2aWNlIMOpIGFzc3VtaWRhLiANCisgDQorLURkaXJlY3RvcnktLWRhdGEtZGlyZWN0b3J5ID0gZGlyZWN0b3J5IA0KK08gY2FtaW5obyBhYnNvbHV0byBwYXJhIG8gZGlyZXTDs3JpbyBvbmRlIG9zIGRyaXZlcnMgZG9zIGFycXVpdm9zIGRlIA0KK2RhZG9zIHJlc2lkZS4gU2UgbsOjbyBmb3IgZXNwZWNpZmljYWRvLCBlbnTDo28gbyBkaXJldMOzcmlvIGNvbmZpZ3VyYWRvIA0KK2F0cmF2w6lzIGRvIC0td2l0aC1kYXRhLWRpcmVjdG9yeSDDqSBhc3N1bWlkYS4gDQorIA0KKy1MZGlyZWN0b3J5LS1saWJyYXJ5LWRpcmVjdG9yeSA9ICBkaXJlY3RvcnkgDQorTyBjYW1pbmhvIGFic29sdXRvIHBhcmEgbyBkaXJldMOzcmlvIG9uZGUgcmVzaWRlbSBvcyBkcml2ZXJzLiBTZSBuw6NvIGZvciANCitlc3BlY2lmaWNhZG8sIGVudMOjbyBvIGRpcmV0w7NyaW8gY29uZmlndXJhZG8gYXRyYXbDqXMgZG8gLS1saWJkaXIgw6kgDQorYXNzdW1pZGEuIA0KKyANCistd2RpcmVjdG9yeSAtLXdyaXRhYmxlLWRpcmVjdG9yeT1kaXJlY3Rvcnk6ICANCitPIGNhbWluaG8gYWJzb2x1dG8gcGFyYSB1bSBkaXJldMOzcmlvIHF1ZSBwb2RlIHNlciBncmF2YWRvLiBTZSBuw6NvIGZvciANCitlc3BlY2lmaWNhZG8sIGVudMOjbyBvIGRpcmV0w7NyaW8gY29uZmlndXJhZG8gY29tIC0td2l0aC13cml0YWJsZS0NCitkaXJlY3Rvcnkgw6kgYXNzdW1pZGEuIA0KKyANCistaCAtLWhlbHAgDQorTW9zdHJhIHVtIHJlc3VtbyBkYXMgb3DDp8O1ZXMgZGUgbGluaGEgZGUgY29tYW5kbywgZSBkZXBvaXMgc2Fpci4gIA0KKyANCitFc3RlIHV0aWxpdMOhcmlvIHVzYSBvIGNvbWFuZG8gZG8gQlJMVFRZIENvbW1hbmQgTGVhcm4gTW9kZS4gUXVhbmRvIA0KK3ByZXNzaW9uYXIgYSB0ZWNsYSBkbyB0ZW1wbyBsaW1pdGUgIMOpIGRlIDEwIHNlZ3VuZG9zLiBPIHRlbXBvIGRlIGVzcGVyYSANCitkZSBtZW5zYWdlbnMgw6kgZGUgNCBzZWd1bmRvcy4gDQorIA0KKzMuOC40IHNwa3Rlc3QgDQorIA0KK0VzdGUgdXRpbGl0w6FyaW8gdGVzdGEgdW0gZHJpdmVyIHNpbnRldGl6YWRvciBkZSB2b3ouIFBvZGUgcHJlY2lzYXIgZGUgDQorc2VyIGV4ZWN1dGFkbyBjb21vIHJvb3QuDQorDQorICAgICAgc3BrdGVzdCAtb3B0aW9uIC4uLiBbZHJpdmVyIFtuYW1lPXZhbHVlIC4uLl1dDQorIA0KK19kcml2ZXIgDQorTyBkcml2ZXIgcGFyYSBzaW50ZXRpemFkb3IgZGUgdm96LiBFbGEgZGV2ZSB0ZXIgdW1hIGRlIGR1YXMgbGV0cmFzIGRvIA0KK2PDs2RpZ28gZGUgaWRlbnRpZmljYcOnw6NvIGRvIGRyaXZlci4gU2UgbsOjbyBmb3IgZXNwZWNpZmljYWRvLCBlbnTDo28gbyANCitwcmltZWlybyBkcml2ZXIgY29uZmlndXJhZG8gdmlhIC0td2l0aC1zcGVlY2gtZHJpdmVyIMOpIGFzc3VtaWRhLiANCisgDQorX25hbWUgPSB2YWx1ZSAgDQorRGVmaW5pciBvIHBhcsOibWV0cm8gZG8gZHJpdmVyIGRvIHNpbnRldGl6YWRvciBkZSB2b3ouIFBhcmEgb2J0ZXIgdW1hIA0KK2Rlc2NyacOnw6NvIGRvcyBwYXLDom1ldHJvcyBhY2VpdG9zIHBvciB1bSBkcml2ZXIgZXNwZWPDrWZpY28sIGNvbnN1bHRlIGEgDQorZG9jdW1lbnRhw6fDo28gZG8gZHJpdmVyLiANCisgDQorLXRzdHJpbmcgLS10ZXh0LXN0cmluZyA9IHN0cmluZyAgDQorTyB0ZXh0byBhIHNlciBmYWxhZG8uIFNlIG7Do28gZm9yIGVzcGVjaWZpY2FkbywgZW50cmFkYSBwYWRyw6NvIMOpIGEgDQorbGVpdHVyYS4gDQorIA0KKy1EZGlyZWN0b3J5IC0tZGF0YS1kaXJlY3Rvcnk9ZGlyZWN0b3J5ICANCitPIGNhbWluaG8gYWJzb2x1dG8gcGFyYSBvIGRpcmV0w7NyaW8gb25kZSBvcyBhcnF1aXZvcyBkZSBkYWRvcyBkbyBkcml2ZXIgDQorcmVzaWRlLiBTZSBuw6NvIGZvciBlc3BlY2lmaWNhZG8sIGVudMOjbyBvIGRpcmV0w7NyaW8gY29uZmlndXJhZG8gYXRyYXbDqXMgDQorZG8gLS13aXRoLWRhdGEtZGlyZWN0b3J5IMOpIGFzc3VtaWRhLiANCisgDQorLUxkaXJlY3RvcnkgLS1saWJyYXJ5LWRpcmVjdG9yeSA9IGRpcmVjdG9yeSAgDQorTyBjYW1pbmhvIGFic29sdXRvIHBhcmEgbyBkaXJldMOzcmlvIG9uZGUgcmVzaWRlbSBvcyBkcml2ZXJzLiBTZSBuw6NvIGZvciANCitlc3BlY2lmaWNhZG8sIGVudMOjbyBvIGRpcmV0w7NyaW8gY29uZmlndXJhZG8gYXRyYXbDqXMgZG8gLS1saWJkaXIgw6kgDQorYXNzdW1pZGEuIA0KKyANCistaC0taGVscDogbW9zdHJhciB1bSByZXN1bW8gZGFzIG9ww6fDtWVzIGRlIGxpbmhhIGRlIGNvbWFuZG8sIGUgZGVwb2lzIA0KK3NhaXIuIA0KKyANCiszLjguNSBzY3J0ZXN0DQorIA0KK0VzdGUgdXRpbGl0w6FyaW8gdGVzdGEgbyBkcml2ZXIgZGEgdGVsYS4gRWxlIGRldmUgc2VyIGV4ZWN1dGFkbyBjb21vIA0KK3Jvb3QuDQorDQorICAgICAgc2NydGVzdCAtb3B0aW9uIC4uLiBbbmFtZSA9IHZhbHVlIC4uLl0NCisgDQorX25hbWUgPSB2YWx1ZSANCitEZWZpbmlyIHVtIHBhcsOibWV0cm8gZGUgZHJpdmVyIHRlbGEuIFBhcmEgb2J0ZXIgdW1hIGRlc2NyacOnw6NvIGRvcyANCitwYXLDom1ldHJvcyBhY2VpdG9zIHBvciB1bSBkcml2ZXIgZXNwZWPDrWZpY28sIGNvbnN1bHRlIGEgZG9jdW1lbnRhw6fDo28gZG8gDQorZHJpdmVyLiANCisgDQorLWxjb2x1bW4tLWxlc3QgPSBjb2x1bW4gDQorRXNwZWNpZmlxdWUgbyBwb250byBkZSBwYXJ0aWRhIGRhIGNvbHVuYSAow6AgZXNxdWVyZGEpKG9yaWdlbSB6ZXJvKSBkYSANCityZWdpw6NvLiBTZSBlc3NlIHZhbG9yIG7Do28gZm9yIGZvcm5lY2lkbywgZW50w6NvIHVtIHZhbG9yIHBhZHLDo28sIGNvbSBiYXNlIA0KK25hIGxhcmd1cmEgZXNwZWNpZmljYWRhLCDDqSBzZWxlY2lvbmFkbyBkZSBtb2RvIHF1ZSBhIHJlZ2nDo28gc2Vyw6EgDQorY2VudHJhbGl6YWRhIGhvcml6b250YWxtZW50ZS4gDQorIA0KKy1jY291bnQgLS1jb2x1bW5zID0gY291bnQgDQorRXNwZWNpZmlxdWUgYSBsYXJndXJhIGRhIHJlZ2nDo28gKGVtIGNvbHVuYXMpLiBTZSBlc3NlIHZhbG9yIG7Do28gZm9yIA0KK2Zvcm5lY2lkbywgZW50w6NvIHVtIHZhbG9yIHBhZHLDo28sIGNvbSBiYXNlIG5hIGNvbHVuYSBpbmljaWFsIA0KK2VzcGVjaWZpY2Fkbywgw6kgc2VsZWNpb25hZG8gZGUgbW9kbyBxdWUgYSByZWdpw6NvIHNlcsOhIGNlbnRyYWxpemFkYSANCitob3Jpem9udGFsbWVudGUuDQorDQorLXRyb3cgLS10b3AgPSByb3cgIA0KK0VzcGVjaWZpcXVlIGEgbGluaGEgKGRlIGNpbWEpIHBhcnRpZGEgKG9yaWdlbSB6ZXJvKSBkYSByZWdpw6NvLiBTZSBlc3NlIA0KK3ZhbG9yIG7Do28gZm9yIGZvcm5lY2lkbywgZW50w6NvIHVtIHZhbG9yIHBhZHLDo28sIGNvbSBiYXNlIG5hIGFsdHVyYSANCitlc3BlY2lmaWNhZGEsIMOpIHNlbGVjaW9uYWRvIGRlIG1vZG8gcXVlIGEgcmVnacOjbyBlc3TDoSBjZW50cmFkYSANCit2ZXJ0aWNhbG1lbnRlLiANCisgDQorLXJjb3VudCAtLXJvd3MgPSBjb3VudCANCitFc3BlY2lmaXF1ZSBhIGFsdHVyYSBkYSByZWdpw6NvIChlbSBsaW5oYXMpLiBTZSBlc3NlIHZhbG9yIG7Do28gZm9yIA0KK2Zvcm5lY2lkbywgZW50w6NvIHVtIHZhbG9yIHBhZHLDo28sIGNvbSBiYXNlIG5hIGxpbmhhIGVzcGVjaWZpY2FkYSBkZSANCitwYXJ0aWRhLCDDqSBzZWxlY2lvbmFkbyBkZSBtb2RvIHF1ZSBhIHJlZ2nDo28gZXN0w6EgY2VudHJhZGEgdmVydGljYWxtZW50ZS4gDQorIA0KKy1oIMKWaGVscA0KK21vc3RyYXIgdW0gcmVzdW1vIGRhcyBvcMOnw7VlcyBkZSBsaW5oYSBkZSBjb21hbmRvLCBlIGRlcG9pcyBzYWlyLiANCisgDQorTm90YXM6DQorDQorwrcgU2UgbmVuaHVtYSBjb2x1bmEgZGUgcGFydGlkYSwgbmVtIHVtYSBsYXJndXJhIHJlZ2nDo28gw6kgZXNwZWNpZmljYWRvLCANCitlbnTDo28gYSByZWdpw6NvIMOpIGNlbnRyYWRhIG5hIGhvcml6b250YWwgZSBjb21lw6dhIG5hIGNvbHVuYSA1Lg0KKw0KK8K3IFNlIG5lbmh1bWEgbGluaGEgZGUgcGFydGlkYSwgbmVtIGEgYWx0dXJhIGRhIHJlZ2nDo28gw6kgZXNwZWNpZmljYWRvLCANCitlbnTDo28gYSByZWdpw6NvIMOpIHZlcnRpY2FsbWVudGUgY2VudHJhZG8gZSBjb21lw6dhIG5hIGxpbmhhIDUuDQorIA0KK0Egc2VndWlyIG8gcGFkcsOjbyBkZSBzYcOtZGE6DQorDQorIDEuIFVtYSBsaW5oYSBkZXRhbGhhbmRvIGFzIGRpbWVuc8O1ZXMgZGEgdGVsYS4NCisNCisgICAgICAgIFNjcmVlbjogd2lkdGh4aGVpZ2h0DQorDQorIDIuIFVtYSBsaW5oYSBxdWUgZGV0YWxoYSBhIHBvc2nDp8OjbyAob3JpZ2VtIHplcm8pIGRvIGN1cnNvci4NCisNCisgICAgICAgIEN1cnNvcjogW2NvbHVtbiwgcm93XQ0KKw0KKyAzLiBVbWEgbGluaGEgcXVlIGRldGFsaGEgbyB0YW1hbmhvIGRhIHJlZ2nDo28gZGEgdGVsYSBzZWxlY2lvbmFkYSwgZSBhIA0KK3Bvc2nDp8OjbyAob3JpZ2VtIHplcm8pLCBkbyBzZXUgY2FudG8gc3VwZXJpb3IgZXNxdWVyZG8uDQorIA0KKyAgICAgICBSZWdpb246IHdpZHRoeGhlaWdodEBbY29sdW1uLCByb3ddDQorDQorIDQuIE8gY29udGXDumRvIGRhIHJlZ2nDo28gZGEgdGVsYSBzZWxlY2lvbmFkYS4gTsOjbyBzw6NvIGltcHJlc3NvcyBvcyANCitjYXJhY3RlcmVzIGNvbSBlc3Bhw6dvcyBlbSBicmFuY28uDQorIA0KKzMuOC42IHR0YnRlc3QgDQorIA0KK0VzdGUgdXRpbGl0w6FyaW8gdGVzdGEgdW1hIHRhYmVsYSBkZSB0ZXh0byAodmVyIFRhYmVsYSBkZSBUZXh0bykuDQorDQorICAgICAgdHRidGVzdCAtb3B0aW9uIC4uLiBpbnB1dC10YWJsZSBvdXRwdXQtdGFibGUNCisgDQoraW5wdXQtdGFibGUgIA0KK08gY2FtaW5obyBkbyBzaXN0ZW1hIGRlIGFycXVpdm8gY29tIGEgdGFiZWxhIGRlIGVudHJhZGEgZGUgdGV4dG8uIFNlIA0KK2lzc28gw6kgcmVsYXRpdm8sIGVudMOjbyDDqSBzdXBvcnRhZG8gbm8gZGlyZXTDs3JpbyBjb25maWd1cmFkbyBhdHJhdsOpcyAtLQ0KK3dpdGgtZGF0YS1kaXJlY3RvcnkuIA0KKyANCitvdXRwdXQtdGFibGUgIA0KK08gY2FtaW5obyBkbyBzaXN0ZW1hIGRlIGFycXVpdm9zIHBhcmEgYSB0YWJlbGEgZGUgdGV4dG8gZGUgc2HDrWRhLiBTZSANCitpc3NvIMOpIHJlbGF0aXZvLCBlbnTDo28gZWxlIGVzdMOhIGFwb2lhZG8gbm8gZGlyZXTDs3JpbyBkZSB0cmFiYWxobyBhdHVhbC4gDQorU2UgZXN0ZSBwYXLDom1ldHJvIG7Do28gw6kgZm9ybmVjaWRvLCBlbSBzZWd1aWRhLCB0YWJlbGEgZGUgc2HDrWRhIGVzdMOhIA0KK2VzY3JpdG8uIA0KKyANCistaWZvcm1hdCAtLWlucHV0LWZvcm1hdCA9IGZvcm1hdCANCitFc3BlY2lmaXF1ZSBvIGZvcm1hdG8gZGEgdGFiZWxhIGRlIGVudHJhZGEuIFNlIGVzdGEgb3DDp8OjbyBuw6NvIMOpIA0KK2Zvcm5lY2lkYSwgZW0gc2VndWlkYSwgbyBmb3JtYXRvIGRhIHRhYmVsYSBkZSBlbnRyYWRhIMOpIGRlZHV6aWRhIGEgDQorcGFydGlyIGRhIGV4dGVuc8OjbyBkbyBub21lIGRhIHRhYmVsYSBkZSBlbnRyYWRhIGRvIGFycXVpdm8uIA0KKyANCistb2Zvcm1hdCAtLW91dHB1dC1mb3JtYXQgPSBmb3JtYXQgIA0KK0VzcGVjaWZpcXVlIG8gZm9ybWF0byBkYSB0YWJlbGEgZGUgc2HDrWRhLiBTZSBlc3RhIG9ww6fDo28gbsOjbyDDqSBmb3JuZWNpZGEsIA0KK28gZm9ybWF0byBkYSB0YWJlbGEgZGUgc2HDrWRhLCBxdWUgZGVjb3JyZSBkYSBleHRlbnPDo28gZG8gbm9tZSBkYSB0YWJlbGEgDQorZGUgc2HDrWRhIGRvIGFycXVpdm8uIA0KKyANCistY2NoYXJzZXQgLS1jaGFyc2V0ID0gY2hhcnNldCANCitFc3BlY2lmaXF1ZSBvIG5vbWUgZG8gY2FyYWN0ZXJlIGRlIDggYml0cyBwYXJhIHVzYXIgcXVhbmRvIGludGVycHJldGFyIA0KK2FzIHRhYmVsYXMuIFNlIGVzdGEgb3DDp8OjbyBuw6NvIMOpIGZvcm5lY2lkYSwgZGVmaW5pciBvIGNhcmFjdGVyZSBkZSBob3N0IA0KK3F1ZSBlc3TDoSBzZW5kbyB1c2Fkby4gDQorIA0KKy1lIC0tZWRpdCAgDQorQ2hhbWFyIG8gZWRpdG9yIGRlIHRhYmVsYSBkZSB0ZXh0by4gU2UgYSB0YWJlbGEgZGUgc2HDrWRhIGZvciANCitlc3BlY2lmaWNhZG8sIGFzIGFsdGVyYcOnw7VlcyBzw6NvIGVzY3JpdGFzIHBhcmEgZWxlLiBTZSBuw6NvLCBlbnTDo28gYSANCit0YWJlbGEgZGUgZW50cmFkYSDDqSByZWVzY3JpdGEuIA0KKyANCistaCAtLWhlbHAgIA0KK01vc3RyYXIgdW0gcmVzdW1vIGRhcyBvcMOnw7VlcyBkZSBsaW5oYSBkZSBjb21hbmRvLCBlIGRlcG9pcyBzYWlyLiANCisgDQorU2UgbmVuaHVtYSBhw6fDo28gZXNwZWNpYWwgw6kgcmVxdWVyaWRhLCBhIHRhYmVsYSBkZSBzYcOtZGEgw6kgZmFjdWx0YXRpdmEuIA0KK1NlIG7Do28gZm9yIGVzcGVjaWZpY2FkYSwgYSB0YWJlbGEgZGUgZW50cmFkYSBlc3TDoSBtYXJjYWRhLiBTZSBmb3IgDQorZXNwZWNpZmljYWRvLCBhIHRhYmVsYSBkZSBlbnRyYWRhIMOpIGNvbnZlcnRpZG8uIA0KKyANCitPcyBmb3JtYXRvcyBkZSB0YWJlbGEgYSBzZWd1aXIgc8OjbyBzdXBvcnRhZG9zOg0KKw0KK3R0Yg0KKyAgICBCUkxUVFkNCitzYmwNCisgICAgU3VTRSBibGludXgNCithMmINCisgICAgR25vcGVybmljdXMNCitnbmINCisgICAgR25vbWUgQnJhaWxsZQ0KKyANCiszLjguNyBjdGJ0ZXN0IA0KKyANCitFc3RlIHV0aWxpdMOhcmlvIHRlc3RhIHVtYSB0YWJlbGEgZGUgY29udHJhw6fDo28gKHZlciBUYWJlbGEgZGUgQ29udHJhw6fDo28pLiANCitPIHRleHRvIGxpZG8gYSBwYXJ0aXIgZG9zIGFycXVpdm9zIGRlIGVudHJhZGEgKG91IFN0YW5kYXJkIGlucHV0KSDDqSANCityZWVzY3JpdGEgcGFyYSBhIHNhw61kYSBwYWRyw6NvIGNvbW8gY29udHJhdGFkYSBicmFpbGxlLg0KKyAgDQorICAgICAgY3RidGVzdCAtb3B0aW9uIC4uLiBpbnB1dC1maWxlIC4uLg0KKyANCitpbnB1dC1maWxlICANCitBIGxpc3RhIGRlIGFycXVpdm9zIGEgc2VyZW0gcHJvY2Vzc2Fkb3MuIFF1YWxxdWVyIG7Dum1lcm8gZGUgYXJxdWl2b3MgDQorcG9kZSBzZXIgZXNwZWNpZmljYWRvLiBFbGVzIHPDo28gcHJvY2Vzc2Fkb3MgZGEgZXNxdWVyZGEgcGFyYSBhIGRpcmVpdGEuIA0KK08gbm9tZSBkZSBhcnF1aXZvIGVzcGVjaWFsIC0gw6kgaW50ZXJwcmV0YWRhIHBhcmEgc2lnbmlmaWNhciBhIGVudHJhZGEgDQorcGFkcsOjby4gU2UgbmVuaHVtIGFycXVpdm8gZm9yIGVzcGVjaWZpY2FkbywgZW50cmFkYSBwYWRyw6NvIMOpIHByb2Nlc3NhZG8uIA0KKyANCistY2ZpbGUgLS1jb250cmFjdGlvbi10YWJsZSA9IGZpbGUNCitPIGNhbWluaG8gZG8gc2lzdGVtYSBkZSBhcnF1aXZvcyBwYXJhIG8gcXVhZHJvIGRlIGNvbnRyYcOnw6NvLiBTZSBpc3NvIMOpIA0KK3JlbGF0aXZvLCBlbnTDo28gw6kgc3Vwb3J0YWRvIG5vIGRpcmV0w7NyaW8gY29uZmlndXJhZG8gLS13aXRoLWRhdGEtDQorZGlyZWN0b3J5LiBBIGV4dGVuc8OjbyBkbyAuY3RiIMOpIG9wY2lvbmFsLiBTZSBlc3RhIG9ww6fDo28gbsOjbyDDqSBmb3JuZWNpZGEsIA0KK2VtIHNlZ3VpZGEsIGVuLXVzLWcyIMOpIGFzc3VtaWRvLiANCisgDQorLXRmaWxlIHxhdXRvIMKWdGV4dC10YWJsZSA9IGZpbGV8YXV0bw0KK0VzcGVjaWZpY2FyIGEgdGFiZWxhIGRlIHRleHRvICh2ZXIgVGV4dCBUYWJsZXMpLiBTZSB1bSBjYW1pbmhvIHJlbGF0aXZvIA0KK2ZvciBmb3JuZWNpZG8sIGVudMOjbyBlbGUgZXN0w6EgYXBvaWFkbyBlbSAvZXRjL2JybHR0eSAodmVyIC0td2l0aC1kYXRhLSANCitkaXJlY3RvcnkgZSBvIC0td2l0aC1leGVjdXRlLXJvb3QpLiBBIGV4dGVuc8OjbyAudHRiIMOpIG9wY2lvbmFsLiBWZWphIGEgDQordGFiZWxhIGRlIHRleHRvIGRvIGFycXVpdm8gZGUgY29uZmlndXJhw6fDo28gcGFyYSBhIGNvbmZpZ3VyYcOnw6NvIGRlIHRlbXBvIA0KK2RlIGV4ZWN1w6fDo28gcGFkcsOjby4gRXN0YSBjb25maWd1cmHDp8OjbyBwb2RlIHNlciBhbHRlcmFkYSBjb20gYSANCitwcmVmZXLDqm5jaWEgVGV4dCBUYWJsZS4gDQorIA0KKy13Y29sdW1ucyAtLW91dHB1dC13aWR0aCA9Y29sdW1ucyANCitPIGNvbXByaW1lbnRvIG3DoXhpbW8gZGUgdW1hIGxpbmhhIGRlIHNhw61kYS4gQ2FkYSBsaW5oYSBkZSBlbnRyYWRhIA0KK2NvbnRyYXRhZGEgZXN0w6EgZW52b2x2aWRhIGRlbnRybyBkZSBsaW5oYXMgZGUgc2FpZGEgcXVhbnRhcyBmb3JlbSANCituZWNlc3PDoXJpYXMuIFNlIGVzc2Egb3DDp8OjbyBuw6NvIGZvciBlc3BlY2lmaWNhZGEsIG7Do28gaMOhIGxpbWl0ZSwgZSBow6EgdW1hIA0KK2NvcnJlc3BvbmTDqm5jaWEgdW0tcGFyYS11bSBlbnRyZSBhcyBsaW5oYXMgZGUgZW50cmFkYSBlIHNhw61kYS4gDQorIA0KKy1oIC3ClmhlbHANCitNb3N0cmFyIHVtIHJlc3VtbyBkYXMgb3DDp8O1ZXMgZGUgbGluaGEgZGUgY29tYW5kbywgZSBkZXBvaXMgc2Fpci4gDQorIA0KK0EgdGFiZWxhIGRlIHRleHRvIMOpIHVzYWRvOg0KKw0KKz8JUGFyYSBkZWZpbmlyIG8gY2FyYWN0ZXJlIGRlIHNhw61kYSBkZSBmb3JtYSBxdWUgbyBicmFpbGxlIGNvbnRyYXRhZG8gDQorc2Vyw6EgZXhpYmlkYSBjb3JyZXRhbWVudGUuIEEgbWVzbWEgdGFiZWxhIHF1ZSBzZXLDoSB1c2FkYSBwZWxvIA0KK0JSTFRUWSBxdWFuZG8gYSBzYcOtZGEgw6kgbGlkbyBkZXZlIHNlciBlc3BlY2lmaWNhZG8uDQorPwlQYXJhIGRlZmluaXIgYXMgcmVwcmVzZW50YcOnw7VlcyBicmFpbGxlIGRvcyBjYXJhY3RlcmVzIGRlZmluaWRvcyBuYSANCit0YWJlbGEgZGUgY29udHJhw6fDo28gY29tbyA9ICh2ZXIgc2Vjw6fDo28gVHJhZHXDp8OjbyBkZSBDYXJhY3RlcmVzKS4NCisgDQorIA0KK0EgdGFiZWxhIGJyZi50dGIgdGV4dG8gw6kgZm9ybmVjaWRvIHBhcmEgdXNvIGNvbSBlc3RlIHV0aWxpdMOhcmlvLiBFbGUgDQorZGVmaW5lIG8gZm9ybWF0byB1c2FkbyBub3MgYXJxdWl2b3MgLmJyZi4gRXN0ZSB0YW1iw6ltIMOpIG8gZm9ybWF0byANCitwcmVmZXJpZG8gdXNhZG8gcGVsYSBtYWlvcmlhIGRhcyBpbXByZXNzb3JhcyBlbSBicmFpbGxlIGUgZGVudHJvIA0KK2Rpc3RyaWJ1w61kYSBlbGV0cm9uaWNhbWVudGUgZG9jdW1lbnRvcyBlbSBicmFpbGxlLiBFc3RhIHRhYmVsYSBlZmV0aXZhIA0KK3Blcm1pdGUgcXVlIGVzdGUgdXRpbGl0w6FyaW8gcGFyYSBzZXIgdXNhZG8gY29tbyB1bSB0cmFkdXRvciBkZSB0ZXh0byANCiticmFpbGxlLiANCisgDQorMy44LjggdHVuZXRlc3QgDQorIA0KK0VzdGUgdXRpbGl0w6FyaW8gdGVzdGEgbcO6c2ljYXMgZGUgYWxlcnRhLCBlIHRhbWLDqW0gZm9ybmVjZSB1bWEgbWFuZWlyYSANCitmw6FjaWwgZGUgY29tcG9yIG5vdmFzIG1lbG9kaWFzLiBQb2RlIHByZWNpc2FyIGRlIHNlciBleGVjdXRhZG8gY29tbyANCityb290Lg0KKw0KKyAgICAgIHR1bmV0ZXN0IC1vcHRpb24gLi4uIHtub3RlIGR1cmF0aW9ufSAuLi4NCisNCitub3RlICANCitVbSBwYWRyw6NvIE1JREkgZGUgbsO6bWVybyBkZSBub3RhLiBEZXZlIHNlciB1bSBuw7ptZXJvIGludGVpcm8gZGUgMSBhIDEyNywgDQorY29tIDYwIHJlcHJlc2VudGFudGVzIE1pZGRsZSBDLiBDYWRhIHZhbG9yIHJlcHJlc2VudGEgdW0gcGFkcsOjbyANCitjcm9tw6F0aWNvIHNlbWktdG9tLCBjb20gb3MgcHLDs3hpbW9zIHZhbG9yZXMgaW5mZXJpb3JlcyBlIHN1cGVyaW9yZXMgcXVlIA0KK3JlcHJlc2VudGFtLCByZXNwZWN0aXZhbWVudGUsIGFzIG5vdGFzIGltZWRpYXRhbWVudGUgaW5mZXJpb3IgZSANCitzdXBlcmlvci4gDQorIA0KK2R1cmF0aW9uICANCitBIGR1cmHDp8OjbyBkYSBub3RhIGVtIG1pbGlzc2VndW5kb3MuIERldmUgc2VyIHVtIG7Dum1lcm8gaW50ZWlybyBkZSAxIGEgDQorMjU1LiANCisgDQorLWRkZXZpY2UgLS1kZXZpY2UgPSBkZXZpY2UgIA0KK08gZGlzcG9zaXRpdm8gbm8gcXVhbCBhIHRvY2FyIGEgbcO6c2ljYS4NCisNCisgIEJlZXBlcg0KKyAgbyBhcGl0byBpbnRlcm5vIChjb25zb2xlIGdlcmFkb3IgZGUgdG9tKS4NCisNCisgIFBjbQ0KKyAgYSBpbnRlcmZhY2UgZGlnaXRhbCBkZSDDoXVkaW8gbmEgcGxhY2EgZGUgc29tLg0KKyAgDQorICBNaWRpDQorICBvIE11c2ljYWwgSW5zdHJ1bWVudCBEaWdpdGFsIEludGVyZmFjZSBuYSBwbGFjYSBkZSBzb20uDQorICANCisgIEZtDQorICBvIHNpbnRldGl6YWRvciBkZSBGTSBlbSB1bSBjYXJ0w6NvIGRlIEFkTGliLCBPUEwzLCBTb3VuZCBCbGFzdGVyLCBvdSBvIA0KKyAgZXF1aXZhbGVudGUgZGUgc29tLg0KKyANCitPIG5vbWUgZG8gZGlzcG9zaXRpdm8gcG9kZSBzZXIgYWJyZXZpYWRhLiBWZWphIERpc3Bvc2l0aXZvIGRlIFR1bmUgcGFyYSANCitvYnRlciBkZXRhbGhlcyBzb2JyZSBvIGRpc3Bvc2l0aXZvIHBhZHLDo28gZSBhcyByZXN0cmnDp8O1ZXMgZGEgcGxhdGFmb3JtYS4gDQorIA0KKy12bG91ZG5lc3MgLS12b2x1bWU9bG91ZG5lc3MgDQorRXNwZWNpZmljYXIgbyB2b2x1bWUgZGEgcHJvZHXDp8OjbyAodm9sdW1lKSBjb21vIHVtYSBwb3JjZW50YWdlbSBkbyANCittw6F4aW1vLiBPIHZvbHVtZSBkZSBzYcOtZGEgcGFkcsOjbyDDqSA1MC4gDQorIA0KKy1wZGV2aWNlIC0tcGNtLWRldmljZSA9IGRldmljZSAgDQorRXNwZWNpZmlxdWUgbyBkaXNwb3NpdGl2byBhIHNlciB1c2FkbyBwYXJhIG8gw6F1ZGlvIGRpZ2l0YWwgKHZlciANCitFc3BlY2lmaWNhw6fDo28gZG8gRGlzcG9zaXRpdm8gUENNKS4gRXN0YSBvcMOnw6NvIG7Do28gZXN0YXLDoSBkaXNwb27DrXZlbCBzZSBhIA0KK29ww6fDo28gLS1kaXNhYmxlLXBjbS1zdXBwb3J0IGZvciBlc3BlY2lmaWNhZGEuIA0KKyANCistbWRldmljZSAtLW1pZGktZGV2aWNlID0gZGV2aWNlDQorRXNwZWNpZmlxdWUgbyBkaXNwb3NpdGl2byBhIHNlciB1c2FkbyBwYXJhIG8gTXVzaWNhbCBJbnN0cnVtZW50IERpZ2l0YWwgDQorSW50ZXJmYWNlICh2ZXIgRXNwZWNpZmljYcOnw6NvIGRvIERpc3Bvc2l0aXZvIE1JREkpLiBFc3RhIG9ww6fDo28gbsOjbyBlc3RhcsOhIA0KK2Rpc3BvbsOtdmVsIHNlIGEgb3DDp8OjbyAtLWRpc2FibGUtbWlkaS1zdXBwb3J0IGJ1aWxkIG9wdGlvbiBmb2kgDQorZXNwZWNpZmljYWRvLiANCisgDQorLWlpbnN0cnVtZW50IC0taW5zdHJ1bWVudCA9IGluc3RydW1lbnQgIA0KK08gaW5zdHJ1bWVudG8gYSBzZXIgdXNhZG8gc2UgbyBkaXNwb3NpdGl2byBzZWxlY2lvbmFkbyBwYXJhIG1pZGkuIE8gDQoraW5zdHJ1bWVudG8gcGFkcsOjbyDDqSB1bSBhY291c3RpYyBncmFuZCBwaWFuby4gQXMgcGFsYXZyYXMgcXVlIGNvbXDDtWVtIG8gDQorbm9tZSBkbyBpbnN0cnVtZW50byBkZXZlIHNlciBzZXBhcmFkb3MgdW0gZG8gb3V0cm8gcG9yIHVtIMO6bmljbyBzaW5hbCBkZSANCittZW5vcyBlbSB2ZXogZGUgZXNwYcOnb3MsIGUgcXVhbHF1ZXIgdW1hIGRhcyBwYWxhdnJhcyBwb2RlIHNlciBhYnJldmlhZGEuIA0KK1VtIHBpYW5vIGFjw7pzdGljbywgcG9yIGV4ZW1wbG8sIHBvZGUgc2VyIGVzcGVjaWZpY2FkbyBjb21vIGEtZ3JhLXBpLg0KKw0KKy1oIMKWaGVscCAgDQorTW9zdHJhciB1bSByZXN1bW8gZGFzIG9ww6fDtWVzIGRlIGxpbmhhIGRlIGNvbWFuZG8sIGUgZGVwb2lzIHNhaXIuIA0KKyANCis0IC0gVXNhbmRvIG8gQlJMVFRZDQorDQorQW50ZXMgZGUgaW5pY2lhciBvIEJSTFRUWSwgdm9jw6ogcHJlY2lzYSBjb25maWd1cmFyIGEgc3VhIGxpbmhhIEJyYWlsbGUuIA0KK05hIG1haW9yaWEgZG9zIGNhc29zIGlzc28gw6kgZmVpdG8gc2ltcGxlc21lbnRlIGNvbmVjdGFuZG8tbyBhIHVtYSBwb3J0YSANCitzZXJpYWwgZGlzcG9uw612ZWwsIGUgZGVwb2lzIGxpZ8OhLWxvLiBEZXBvaXMgZGUgY29uZmlndXJhZG8gbyBkaXNwbGF5IA0KK2V4ZWN1dGUgQlJMVFRZIHNpbXBsZXNtZW50ZSBkaWdpdGFuZG8gbyBjb21hbmRvIGJybHR0eSBubyBzaGVsbCBwcm9tcHQgDQorKGlzdG8gZGV2ZSBzZXIgZmVpdG8gY29tbyByb290KS4gVmVyaWZpcXVlIGEgb3DDp8OjbyAtZCBkZSBsaW5oYSBkZSANCitjb21hbmRvLCBhcyBkaXJldGl2YXMgZGUgYXJxdWl2byBkZSBjb25maWd1cmHDp8OjbyBkbyAgZGlzcG9zaXRpdm8gDQorYnJhaWxsZSwgZSBhIG9ww6fDo28gZGUgY29uc3RydcOnw6NvIC0td2l0aC1icmFpbGxlLWRldmljZSBwYXJhIGFsdGVybmF0aXZhcyANCitzb2JyZSBjb21vIGRpemVyIGFvICBCUkxUVFkgcXVhbCBkaXNwb3NpdGl2byBxdWUgbyBkaXNwbGF5IGVzdMOhIA0KK2NvbmVjdGFkby4gVmVyaWZpcXVlIGEgb3DDp8OjbyAtYiBkZSBsaW5oYSBkZSBjb21hbmRvLCBhcyBkaXJldGl2YXMgZGUgDQorYXJxdWl2byBkZSBjb25maWd1cmHDp8OjbyBkbyBkaXNwb3NpdGl2byBicmFpbGxlLCBlIGEgb3DDp8OjbyBkZSBjb25zdHJ1w6fDo28gDQorLS13aXRoLWJyYWlsbGUtZGV2aWNlICBwYXJhIGFsdGVybmF0aXZhcyBzb2JyZSBjb21vIGRpemVyIGFvICBCUkxUVFkgcXVlIA0KK3RpcG8gZGUgZGlzcGxheSBicmFpbGxlIHZvY8OqIHRlbS4gVmVyaWZpcXVlIGEgb3DDp8OjbyAtQiBkZSBsaW5oYSBkZSANCitjb21hbmRvLCBlIG8gYnJhaWxsZS1wYXJhbWV0ZXJzICBkYXMgZGlyZXRpdmEgZGUgYXJxdWl2byBkZSBjb25maWd1cmHDp8OjbyANCitzb2JyZSBjb21vIHBhc3NhciBwYXLDom1ldHJvcyBwYXJhIG8gZHJpdmVyIGRvIHNldSBkaXNwbGF5IGJyYWlsbGUuDQorDQorVW1hIG1lbnNhZ2VtIGluZGljYW5kbyBvIG5vbWUgZG8gcHJvZ3JhbWEgKEJSTFRUWSkgZSBzZXUgbsO6bWVybyBkZSANCit2ZXJzw6NvIGFwYXJlY2Vyw6EgYnJldmVtZW50ZSAodmVyIGEgb3DDp8OjbyAtTSBkZSBsaW5oYSBkZSBjb21hbmRvKSBubyANCitkaXNwbGF5IGJyYWlsbGUuIEEgZGlzcGxheSBtb3N0cmFyw6EgZW50w6NvIHVtYSBwZXF1ZW5hIMOhcmVhIGRhIHRlbGEsIA0KK2luY2x1aW5kbyBvIGN1cnNvci4gUG9yIHBhZHLDo28gbyBjdXJzb3Igw6kgcmVwcmVzZW50YWRvIGNvbSBvcyBwb250b3MgNyBlIA0KKzggc29icmVwb3N0byBhbyBjYXJhY3RlciBxdWUgZWxlIGVzdMOhLg0KKw0KK1F1YWxxdWVyIGF0aXZpZGFkZSBkZSB0ZWxhIHNlcsOhIHJlZmxldGlkYSBuYSB0ZWxhIGVtIEJyYWlsbGUuIE8gZGlzcGxheSANCit0YW1iw6ltIGlyw6EgYWNvbXBhbmhhciBvIGFuZGFtZW50byBkbyBjdXJzb3IgbmEgdGVsYS4gRXNzZSByZWN1cnNvIMOpIA0KK2NvbmhlY2lkbyBjb21vIG8gY3Vyc29yIHRyYWNraW5nLg0KKw0KK0Jhc3RhIGRpZ2l0YXIgbm8gdGVjbGFkbyBlIGxlciBvIGRpc3BsYXksIG5vIGVudGFudG8sIG7Do28gw6kgc3VmaWNpZW50ZS4gDQorVGVudGUgZGlnaXRhciB1bSBjb21hbmRvIHF1ZSBjYXVzYXLDoSB1bSBlcnJvLCBlIHByZXNzaW9uYXIgZW50ZXIuIE8gZXJybyANCithcGFyZWNlIG5hIHRlbGEsIG1hcywgYSBtZW5vcyBxdWUgdGVuaGEgdW0gZGlzcGxheSBtdWx0aS1saW5oYSwgYXMgDQorY2hhbmNlcyBzw6NvIGRlIHF1ZSBuw6NvIMOpIHZpc8OtdmVsIG5vIGRpc3BsYXkgYnJhaWxsZS4gVHVkbyBxdWUgdm9jw6ogdsOqIA0KK25lbGEgw6kgb3V0cmEgamFuZWxhIGRlIGNvbWFuZG9zLiBPIHF1ZSDDqSBuZWNlc3PDoXJpbywgZW50w6NvLCDDqSB1bWEgDQorbWFuZWlyYSBkZSBtb3ZlciBhIGphbmVsYSBicmFpbGxlIGVtIHRvcm5vIGRhIHRlbGEuIEFzIHRlY2xhcyBubyBkaXNwbGF5IA0KK2JyYWlsbGUgZW0gc2kgcG9kZSBzZXIgdXNhZG8gcGFyYSBlbnZpYXIgY29tYW5kb3MgcGFyYSBCUkxUVFkgcXVlLCBhbMOpbSANCitkZSB1bSBtb250ZSBkZSBvdXRyYXMgY29pc2FzLCB0YW1iw6ltIHBvZGUgZmF6ZXIgZXhhdGFtZW50ZSBpc3NvLg0KKyAgDQorDQorNC4xIMKWIENvbWFuZG9zDQorDQorSW5mZWxpem1lbnRlLCBvcyB2w6FyaW9zIGRpc3BsYXkgYnJhaWxsZSBuw6NvIG9mZXJlY2VtIHVtIGNvbmp1bnRvIGRlIA0KK2NvbnRyb2xlcy4gQWxndW5zIHTDqm0gbyBwYWRyw6NvIGRlIHNlaXMgcG9udG9zIGNoYXZlcywgYWxndW5zIHTDqm0gb2l0bywgZSANCitvdXRyb3MgbsOjbyB0w6ptIG5lbmh1bS4gQWxndW5zIHTDqm0gYXMgdGVjbGFzIGRvIHBvbGVnYXIsIG1hcyBuw6NvIGjDoSB1bSANCituw7ptZXJvIHBhZHLDo28gZGVsZXMuIEFsZ3VucyBwb3NzdWVtIHVtIGJvdMOjbyBhY2ltYSBkZSBjYWRhIGPDqWx1bGEgDQorYnJhaWxsZS4gQWxndW5zIHTDqm0gaW50ZXJydXB0b3JlcyBsaWdhL2Rlc2xpZ2Eocm9ja2VyIHN3aXRjaGVzKS4gQWxndW5zIA0KK3TDqm0gdW1hIGJhcnJhIGbDoWNpbCBkZSBhbGNhbsOnYXIsIHF1ZSBmdW5jaW9uYSBjb21vIHVtIGpveXN0aWNrLiBBbGd1bnMgDQordMOqbSBhcyBjb21iaW5hw6fDtWVzIGRvcyBhbnRlcmlvcmVzLiBQb3JxdWUgYSBuYXR1cmV6YSBlIGEgZGlzcG9zacOnw6NvIGRlIA0KK2NhZGEgZGlzcGxheSDDqSB0w6NvIGRpZmVyZW50ZSwgY29uc3VsdGUgbyBkb2N1bWVudGHDp8OjbyBwYXJhIG8gZGlzcGxheSANCitlc3BlY8OtZmljbywgYSBmaW0gZGUgZGVzY29icmlyIGV4YXRhbWVudGUgbyBxdWUgc3VhcyB0ZWNsYXMgZmF6ZW0uDQorDQorQ29tYW5kb3MgQlJMVFRZIHPDo28gcmVmZXJpZG9zIHBlbG8gbm9tZSBuZXN0ZSBtYW51YWwuIFNlIHZvY8OqIGVzcXVlY2VyIA0KK3F1YWwgw6kgYSB0ZWNsYShzKSBubyBzZXUgZGlzcGxheSBicmFpbGxlIHBhcmEgdXNhciB1bSBjb21hbmRvIA0KK3BhcnRpY3VsYXIsIGVtIHNlZ3VpZGEsIGNvbnN1bHRlIGEgc3VhIHDDoWdpbmEgZGUgYWp1ZGEgZG9zIGRyaXZlcsKScy4gQSANCit0ZWNsYSBwcmluY2lwYWwgdm9jw6ogZGV2ZSBpbWVkaWF0YW1lbnRlIGd1YXJkYXIgbmEgbWVtw7NyaWEsIHBvcnRhbnRvLCDDqSANCivDum5pY28gcGFyYSBvIGNvbWFuZG8gSEVMUC4gVXNlIGFzIHRlY2xhcyBkZSBtb3ZpbWVudG8gcmVndWxhciAoY29uZm9ybWUgDQorZGVzY3JpdG8gYWJhaXhvKSBwYXJhIG5hdmVnYXIgbmEgcMOhZ2luYSBkZSBhanVkYSwgZSBwcmVzc2lvbmUgYSBoZWxwIA0KK25vdmFtZW50ZSBwYXJhIHNhaXIuDQorIA0KKzQuMS4xIERlc2xvY2FtZW50byBWZXJ0aWNhbA0KKw0KK1ZlamEgdGFtYsOpbSBhcyBQUklOREVOVC9OWElOREVOVCBlIG8gUFJESUZDSEFSL05YRElGQ0hBUiB0ZWNsYXMgIGRlIA0KK3JvdGVhbWVudG8gZGUgY29tYW5kb3MuDQorIA0KK0xOVVAvTE5ETg0KK0lyIHBhcmEgY2ltYS9iYWl4byBlbSB1bWEgbGluaGEuIFNlIG8gY29tYW5kbyBwdWxhciBsaW5oYSBpZMOqbnRpY2EgZm9pIA0KK2F0aXZhZG8gKHZlamEgbyBjb21hbmRvIFNLUElETE5TKSwgZW50w6NvIGVzc2VzIGNvbWFuZG9zLCBhbyBpbnbDqXMgZGUgDQorbW92ZXIgZXhhdGFtZW50ZSB1bWEgbGluaGEsIHNlcsOjbyBhc3NvY2lhZG9zIG9zIGNvbWFuZG9zIA0KK1BSRElGTE4vTlhESUZMTi4NCisgDQorV0lOVVAvV0lORE4NCitJciBwYXJhIGNpbWEvYmFpeG8gZW0gdW1hIGphbmVsYS4gU2UgYSBqYW5lbGEgw6kgYXBlbmFzIHVtYSBsaW5oYSBhbHRhIA0KK21vdmUgNSBsaW5oYXMuIA0KKyANCitQUkRJRkxOL05YRElGTE4NCitJciBwYXJhIGNpbWEvYmFpeG8gcGFyYSBhIGxpbmhhIG1haXMgcHLDs3hpbWEgY29tIGNvbnRlw7pkbyBkaWZlcmVudGUuIFNlIA0KK28gY29tYW5kbyBwdWxhciBsaW5oYSBpZMOqbnRpY2EgZm9pIGF0aXZhZG8gKHZlamEgbyBjb21hbmRvIFNLUElETE5TKSwgDQorZW50w6NvIGVzc2VzIGNvbWFuZG9zLCBhbyBpbnbDqXMgZGUgcHVsYXIgbGluaGFzIGlkw6pudGljYXMsIHNlcsOjbyANCithc3NvY2lhZG9zIG9zIGNvbWFuZG9zIExOVVAvTE5ETi4gDQorIA0KK0FUVFJVUC9BVFRSRE4NCitJciBwYXJhIGNpbWEvYmFpeG8gcGFyYSBhIGxpbmhhIG1haXMgcHLDs3hpbWEgY29tIGRpZmVyZW50ZXMgYXRyaWJ1dG9zIA0KKyhjYXJhY3RlciBlbSBkZXN0YXF1ZSkuIA0KKyANCitUT1AvQk9UDQorVsOhIHBhcmEgYSBsaW5oYSBzdXBlcmlvci9pbmZlcmlvci4gDQorIA0KK1RPUF9MRUZUL0JPVF9MRUZUDQorVsOhIHBhcmEgbyBjYW50byB0b3AtbGVmdC9ib3R0b20tbGVmdC4gDQorIA0KK1BSUEdSUEgvTlhQR1JQSA0KK0lyIHBhcmEgYSBwcsOzeGltYSBsaW5oYSBkbyBwYXLDoWdyYWZvIGFudGVyaW9yL3NlZ3VpbnRlIChhIHByaW1laXJhIGxpbmhhIA0KK27Do28tYnJhbmNvIHBhcmEgYWzDqW0gZG8gcHLDs3hpbW8gbGluaGEgZW0gYnJhbmNvKS4gQSBsaW5oYSBhdHVhbCDDqSANCitpbmNsdcOtZGEgbmEgcGVzcXVpc2EgcGFyYSBvIGVzcGHDp28gaW50ZXItcGFyYWdyw6Fmby4gDQorIA0KK1BSUFJPTVBUL05YUFJPTVBUDQorSXIgcGFyYSBvIHByb21wZXQgY29tYW5kbyBhbnRlcmlvci9zZWd1aW50ZS4gDQorIA0KK1BSU0VBUkNIL05YU0VBUkNIDQorUHJvY3VyYSBwYXJhIHRyw6FzL2ZyZW50ZSBwYXJhIGEgcHLDs3hpbWEgb2NvcnLDqm5jaWEgZGEgY2FkZWlhIGRlIA0KK2NhcmFjdGVyZXMgbm8gYnVmZmVyIGRlIGNvcnRlICh2ZXIgUmVjb3J0YXIgZSBDb2xhcikgcXVlIG7Do28gZXN0aXZlciANCitkZW50cm8gZGEgamFuZWxhIGJyYWlsbGUuIE9zIHJlY3Vyc29zIGRlIHBlc3F1aXNhIHBhcmEgYSANCitlc3F1ZXJkYS9kaXJlaXRhLCBjb21lw6dhbmRvIGltZWRpYXRhbWVudGUgbm8gY2FyYWN0ZXIgw6AgZGlyZWl0YS9lc3F1ZXJkYSANCitkYSBqYW5lbGEsIGUgZW52b2x2ZW5kbyBhIGJvcmRhIGRhIHRlbGEuIEEgcGVzcXVpc2EgbsOjbyBkaWZlcmVuY2lhIA0KK21hacO6c2N1bGFzIGRlIG1pbsO6c2N1bGFzLiANCisgDQorNC4xLjIgRGVzbG9jYW1lbnRvIEhvcml6b250YWwNCisNCitWZWphIHRhbWLDqW0gYXMgU0VUTEVGVCB0ZWNsYXMgZGUgZW5jYW1pbmhhbWVudG8gZGUgY29tYW5kby4NCisgDQorQ0hSTFQvQ0hSUlQNCitWw6EgcGFyYSBhIGVzcXVlcmRhL2RpcmVpdGEgZGUgdW0gY2FyYWN0ZXIuIA0KKyANCitIV0lOTFQvSFdJTlJUDQorVsOhIHBhcmEgYSBlc3F1ZXJkYS9kaXJlaXRhIGRhIG1ldGFkZSBkZSB1bWEgamFuZWxhLiANCisgDQorRldJTkxUL0ZXSU5SVA0KK1bDoSBwYXJhIGEgZXNxdWVyZGEvZGlyZWl0YSBkZSB1bWEgamFuZWxhLiBFc3RlcyBjb21hbmRvcyBzw6NvIA0KK3BhcnRpY3VsYXJtZW50ZSDDunRlaXMgcG9ycXVlIHF1ZWJyYW0gYXV0b21hdGljYW1lbnRlIHF1YW5kbyBhdGluZ2lyIGEgDQorYm9yZGEgZGEgdGVsYS4gT3V0cm9zIHJlY3Vyc29zLCBjb21vIGEgc3VhIGNhcGFjaWRhZGUgZGUgcHVsYXIgamFuZWxhcyANCitlbSBicmFuY28gKHZlamEgbyBjb21hbmRvIFNLUEJMTktXSU5TKSwgcmVmb3LDp2FyIGEgc3VhIHV0aWxpZGFkZS4gDQorIA0KK0ZXSU5MVFNLSVAvRldJTlJUU0tJUA0KK1bDoSBwYXJhIGEgZXNxdWVyZGEvZGlyZWl0YSBwYXJhIGEgamFuZWxhIG1haXMgcHLDs3hpbWEgbsOjby1icmFuY2EuIA0KKyANCitMTkJFRy9MTkVORA0KK0lyIHBhcmEgbyBpbsOtY2lvL2ZpbSBkYSBsaW5oYS4gDQorDQorNC4xLjMgRGVzbG9jYW1lbnRvIEltcGzDrWNpdG8NCisNCitWZWphIHRhbWLDqW0gR09UT01BUksgdGVjbGFzIGRlIGVuY2FtaW5oYW1lbnRvIGRlIGNvbWFuZG8uDQorIA0KK0hPTUUNCitWYWkgcGFyYSBvbmRlIGVzdMOhIG8gY3Vyc29yLiANCisgDQorQkFDSw0KK1ZvbHRlIHBhcmEgb25kZSBvIGNvbWFuZG8gZGUgbW92aW1lbnRvIG1haXMgcmVjZW50ZSBjb2xvY2FkbyBubyBkaXNwbGF5IA0KK2JyYWlsbGUuIEVzdGEgw6kgdW1hIG1hbmVpcmEgZsOhY2lsIGRlIHZvbHRhciBwYXJhIG9uZGUgdm9jw6ogZXN0YXZhIGxlbmRvLCANCithcMOzcyB1bSBldmVudG8gaW5lc3BlcmFkbyAoY29tbyBhY29tcGFuaGFtZW50byBkbyBjdXJzb3IpIG1vdmVuZG8gYSANCitqYW5lbGEgYnJhaWxsZSBlbSB1bSBtb21lbnRvIGlub3BvcnR1bm8uIA0KKyANCitSRVRVUk4NCis/CVNlIG8gbW92aW1lbnRvIG1haXMgcmVjZW50ZSBkYSBqYW5lbGEgZG8gYnJhaWxsZSBmb2kgYXV0b23DoXRpY28sIA0KK3BvciBleGVtcGxvLCBjb21vIHJlc3VsdGFkbyBkbyBtb25pdG9yYW1lbnRvIGRlIGN1cnNvciwgZW50w6NvIHZvbHRhIA0KK3BhcmEgb25kZSBvIGNvbWFuZG8gZGUgbW92aW1lbnRvIG1haXMgcmVjZW50ZSBjb2xvY8OhLWxvICh2ZWphIG8gDQorY29tYW5kbyBCQUNLKS4NCis/CVNlIG8gY3Vyc29yIG7Do28gZXN0aXZlciBkZW50cm8gZGEgamFuZWxhIGRvIGJyYWlsbGUsIGVtIHNlZ3VpZGEsIA0KK3ZhaSBwYXJhIG9uZGUgZXN0w6EgbyBjdXJzb3IgKHZlamEgbyBjb21hbmRvIEhPTUUpLiANCisNCis0LjEuNAkgQ2FyYWN0ZXJpc3RpY2EgZGUgQXRpdmHDp8Ojbw0KKw0KK0NhZGEgdW0gZGVzc2VzIGNvbWFuZG9zIHRlbSB0csOqcyBmb3JtYXM6IGFjdGl2YXRlIChhdGl2YXIgbyByZWN1cnNvKSwgDQorZGVzYWN0aXZhdGUgKGRlc2F0aXZhciBvIHJlY3Vyc28pLCBlIHRvZ2dsZSAoc2UgZXN0aXZlciBkZXNsaWdhZG8gZW50w6NvIA0KK2lyw6EgbGlnYXIsIGUgc2UgZXN0aXZlciBsaWdhZG8gaXLDoSBkZXNsaWdhcikuIEV4Y2V0byBjb25mb3JtZSBpbmRpY2FkbywgDQorY2FkYSB1bSBkZXNzZXMgcmVjdXJzb3MgZXN0w6EgaW5pY2lhbG1lbnRlIG9mZiwgZSwgcXVhbmRvIG9uLCBhZmV0YSBhIA0KK29wZXJhw6fDo28gQlJMVFRZIGNvbW8gdW0gdG9kby4gQSBjb25maWd1cmHDp8OjbyBpbmljaWFsIGRlIGFsZ3VtYXMgZGVzc2FzIA0KK2NhcmFjdGVyw61zdGljYXMgcG9kZW0gc2VyIGFsdGVyYWRhcyBhdHJhdsOpcyBkbyBtZW51IGRlIHByZWZlcsOqbmNpYXMuDQorIA0KK0ZSRUVaRQ0KK0NvbmdlbGEgYSBpbWFnZW0gZGEgdGVsYS4gQlJMVFRZIGZheiB1bWEgY8OzcGlhIGRhIHRlbGEgKGNvbnRlw7pkbyBlIA0KK2F0cmlidXRvcykgYSBwYXJ0aXIgZG8gbW9tZW50byBlbSBxdWUgYSBpbWFnZW0gZGEgdGVsYSDDqSBjb25nZWxhZGEgZSBlbSANCitzZWd1aWRhLCBpZ25vcmEgdG9kYXMgYXMgYXR1YWxpemHDp8OjbyBkYSB0ZWxhIGF0w6kgcXVlIGVsYSBzZWphIA0KK2Rlc2NvbmdlbGFkYS4gRXN0YSBjYXJhY3RlcsOtc3RpY2EgdG9ybmEgbWFpcyBmw6FjaWwsIHBvciBleGVtcGxvLCB1bWEgDQorYW1vc3RyYSBkYSBzYcOtZGEgZGUgdW1hIGFwbGljYcOnw6NvIHF1ZSBlc2NyZXZlIG11aXRvLCBtdWl0byByYXBpZGFtZW50ZS4gDQorIA0KK0RJU1BNRA0KK01vc3RyYXIgbyBkZXN0YXF1ZSAob3MgYXRyaWJ1dG9zKSBkZSBjYWRhIGNhcmFjdGVyIGRlbnRybyBkYSBkaXNwbGF5IA0KK2JyYWlsbGUsIGVtIHZleiBkb3MgcHLDs3ByaW9zIGNhcmFjdGVyZXMobyBjb250ZcO6ZG8pLiBFc3NlIHJlY3Vyc28gw6kgDQorw7p0aWwsIHBvciBleGVtcGxvLCBxdWFuZG8gdm9jw6ogcHJlY2lzYSBsb2NhbGl6YXIgdW0gaXRlbSBlbSBkZXN0YXF1ZS4gQW8gDQorbW9zdHJhciBvIGNvbnRlw7pkbyBkYSB0ZWxhLCBvIHF1YWRybyBkZSB0ZXh0byDDqSB1c2FkbyAodmVqYSBhIG9ww6fDo28gZGUgDQorbGluaGEgZGUgY29tYW5kbyAtdCwgbyBxdWFkcm8gZGUgdGV4dG8gZG8gYXJxdWl2byBkZSBkaXJldGl2YSBkZSANCitjb25maWd1cmHDp8OjbywgZSAtLXdpdGgtdGV4dC10YWJsZSBjb21vIG9ww6fDo28gZGUgY29uc3RydcOnw6NvKS4gQW8gbW9zdHJhciANCitvcyBhdHJpYnV0b3MgZGEgdGVsYSwgYSB0YWJlbGEgZGUgYXRyaWJ1dG9zIMOpIHVzYWRvICh2ZWphIC1hLCBvcyANCithdHRyaWJ1dGVzLXRhYmxlIGRpcmV0aXZhIGRlIGFycXVpdm8gZGUgY29uZmlndXJhw6fDo28sIGUgLS13aXRoLQ0KK2F0dHJpYnV0ZXMtdGFibGUgb3DDp8OjbyBkZSBjb25zdHJ1w6fDo28pLiBFc3RlIHJlY3Vyc28gc8OzIGFmZXRhIG8gdGVybWluYWwgDQordmlydHVhbCBhdHVhbC4NCisNCitTSVhET1RTDQorTW9zdHJhciBjYXJhY3RlcmVzIHVzYW5kbyA2IHBvbnRvcywgYW8gaW52w6lzIGRlIDggcG9udG9zLCBlbSBicmFpbGxlLiBPcyANCitwb250b3MgNyBlIDggYWluZGEgc8OjbyB1c2Fkb3MgcG9yIG91dHJhcyBjYXJhY3RlcsOtc3RpY2FzIGNvbW8gYSANCityZXByZXNlbnRhw6fDo28gZG8gY3Vyc29yIGUgZW5mYXRpemFuZG8gbyBjYXLDoWN0ZXIgcmVhbMOnYWRvLiBTZSB1bWEgdGFiZWxhIA0KK2RlIGNvbnRyYcOnw6NvIGZvaSBzZWxlY2lvbmFkYSAodmVqYSBhIG9ww6fDo28gLWMgZSBkYSB0YWJlbGEgZGUgY29udHJhw6fDo28gDQorZGFzIGRpcmV0aXZhcyBkZSBjb25maWd1cmHDp8OjbyBkZSBhcnF1aXZvKSwgZW50w6NvIGVsZSDDqSB1c2Fkby4gRXN0YSANCitjb25maWd1cmHDp8OjbyB0YW1iw6ltIHBvZGUgc2VyIGFsdGVyYWRhIGNvbSBhIHByZWZlcsOqbmNpYSBkbyBlc3RpbG8gZGUgDQordGV4dG8uDQorIA0KK1NMSURFV0lODQorU2UgbyBjb250cm9sZSBkZSBjdXJzb3IgKHZlamEgbyBjb21hbmRvIENTUlRSSykgZXN0w6Egb24sIGVudMOjbywgc2VtcHJlIA0KK3F1ZSBvIGN1cnNvciBtb3ZlLXNlIG11aXRvIHBlcnRvIChvdSBtYWlzKSBvdSBvdXRyYSBleHRyZW1pZGFkZSBkYSANCitqYW5lbGEgZG8gYnJhaWxsZSwgcmVwb3NpY2lvbmFyIGhvcml6b250YWxtZW50ZSBhIGphbmVsYSBkZSB0YWwgZm9ybWEgDQorcXVlIG8gY3Vyc29yLCBtYW50ZW5kby1zZSBuZXNzZSBsYWRvLCBlc3TDoSBtYWlzIHByw7N4aW1vIGRhIGNlbnRyby4gU2UgDQorZXN0ZSByZWN1cnNvIGVzdMOhIG9mZiBhIGphbmVsYSBicmFpbGxlIGVzdMOhIHNlbXByZSBwb3NpY2lvbmFkbyBkZSBtb2RvIA0KK3F1ZSBzdWEgZXh0cmVtaWRhZGUgZXNxdWVyZGEgw6kgdW0gbcO6bHRpcGxvIGRlIHN1YSBsYXJndXJhIGRhIGJvcmRhIA0KK2VzcXVlcmRhIGRhIHRlbGEuIEVzdGEgY29uZmlndXJhw6fDo28gdGFtYsOpbSBwb2RlIHNlciBhbHRlcmFkYSBjb20gYSANCitwcmVmZXLDqm5jaWEgU2xpZGluZyBXaW5kb3cuDQorIA0KK1NLUElETE5TDQorQW8gaW52w6lzIGRlIG1vdmVyIGV4YXRhbWVudGUgdW1hIGxpbmhhIHBhcmEgY2ltYSBvdSBwYXJhIGJhaXhvLCBzYWx0YSANCitsaW5oYXMgYW50ZXJpb3JlcywgcXVlIHTDqm0gbyBtZXNtbyBjb250ZcO6ZG8gZGEgbGluaGEgYXR1YWwuIEVzdGEgDQorY2FyYWN0ZXLDrXN0aWNhIGFmZXRhIG8gY29tYW5kb3MgTE5VUC9MTkROLCBiZW0gY29tbyBvIHJlY3Vyc28gZGUgbGluaGEgDQorZGUgZW1iYWxhZ2VtIGRlIEZXSU5SVC9GV0lOTFQgZSBvIGNvbWFuZG8gRldJTkxUU0tJUC9GV0lOUlRTS0lQLiBFc3RhIA0KK2NvbmZpZ3VyYcOnw6NvIHRhbWLDqW0gcG9kZSBzZXIgYWx0ZXJhZGEgY29tIGEgcHJlZmVyw6puY2lhIFNraXAgSWRlbnRpY2FsIA0KK0xpbmVzLg0KKyANCitTS1BCTE5LV0lOUw0KK1B1bGFyIGphbmVsYXMgZW0gYnJhbmNvIGR1cmFudGUgYSBsZWl0dXJhIHBhcmEgZnJlbnRlIG91IHBhcmEgdHLDoXMuIEVzdGUgDQorcmVjdXJzbyBhZmV0YSBvcyBjb21hbmRvcyBGV0lOTFQvRldJTlJULiBFc3RhIGNvbmZpZ3VyYcOnw6NvIHRhbWLDqW0gcG9kZSANCitzZXIgYWx0ZXJhZGEgY29tIGEgcHJlZmVyw6puY2lhIFNraXAgQmxhbmsgV2luZG93cy4NCisgDQorQ1NSVklTDQorTW9zdHJhciBvIGN1cnNvciBwZWxhIHN1cGVycG9zacOnw6NvIGRlIHVtIHBvbnRvIHBhZHLDo28gKHZlamEgbyBjb21hbmRvIA0KK0NTUlNJWkUpIGVtIGNpbWEgZG8gY2FyYWN0ZXIgb25kZSBlbGEgZXN0w6EuIEVzdGUgcmVjdXJzbyBlc3TDoSANCitpbmljaWFsbWVudGUgb24uIEVzdGEgY29uZmlndXJhw6fDo28gdGFtYsOpbSBwb2RlIHNlciBhbHRlcmFkYSBjb20gYSANCitwcmVmZXLDqm5jaWEgZG8gTW9zdHJhciBDdXJzb3IuIA0KKyANCitDU1JISURFDQorT2N1bHRhciBvIGN1cnNvciAodmVqYSBvIGNvbWFuZG8gQ1NSVklTKSwgYSBmaW0gZGUgbGVyIGV4YXRhbWVudGUgbyANCitjYXJhY3RlciBhYmFpeG8gZGVsYS4gRXN0ZSByZWN1cnNvIHPDsyBhZmV0YSBvIHRlcm1pbmFsIGF0dWFsIHZpIA0KKyANCitDU1JUUksNCitWZXN0w61naW8oc2VndWlyKSBkbyBjdXJzb3IuIFNlIG8gY3Vyc29yIHNlIG1vdmUgcGFyYSB1bSBsb2NhbCBxdWUgbsOjbyANCitzZWphIGRlbnRybyBkYSBqYW5lbGEgZG8gYnJhaWxsZSwgZW50w6NvIGF1dG9tYXRpY2FtZW50ZSBtb3ZlIGEgamFuZWxhIGRlIA0KK2JyYWlsbGUgcGFyYSBhIG5vdmEgbG9jYWxpemHDp8OjbyBkbyBjdXJzb3IuIFZvY8OqIGdlcmFsbWVudGUgcXVlciBlc3RlIA0KK3JlY3Vyc28gYXRpdmFkbywgdW1hIHZleiBxdWUgbWluaW1pemEgb3MgZWZlaXRvcyBkZSByb2xhZ2VtIGRhIHRlbGEsIGUgDQordW1hIHZleiBxdWUsIGR1cmFudGUgYSBlbnRyYWRhLCBhIHJlZ2nDo28gb25kZSB2b2PDqiBlc3TDoSBhdHVhbG1lbnRlIA0KK2VzY3JldmVuZG8gc2VtcHJlIMOpIHZpc8OtdmVsLiBTZSBlc3RlIHJlY3Vyc28gZmF6IGNvbSBxdWUgYSBqYW5lbGEgZGUgDQorYnJhaWxsZSBzYWx0ZSBlbSB1bSBtb21lbnRvIGlub3BvcnR1bm8sIHVzZSBvIGNvbWFuZG8gQkFDSyBwYXJhIHZvbHRhciANCitwYXJhIG9uZGUgdm9jw6ogZXN0YXZhIGxlbmRvLiBUYWx2ZXogc2VqYSBuZWNlc3PDoXJpbyBkZXNhdGl2YXIgZXNzZSANCityZWN1cnNvIGFvIHVzYXIgdW0gYXBsaWNhdGl2byBxdWUgYXR1YWxpemEgY29udGludWFtZW50ZSBhIHRlbGEsIA0KK21hbnRlbmRvIHVtIGxheW91dCBkZSBkYWRvcyBmaXhvLiBFc3RlIHJlY3Vyc28gZXN0w6EgaW5pY2lhbG1lbnRlIGxpZ2Fkby4gDQorRXN0ZSByZWN1cnNvIHPDsyBhZmV0YSBvIHRlcm1pbmFsIHZpcnR1YWwgYXR1YWwuDQorIA0KK0NTUlNJWkUNCitSZXByZXNlbnRhIG8gY3Vyc28gY29tIG9zIG9pdG8gcG9udG8odW0gYmxvY28gc8OzbGlkbyksIGUgbsOjbyBhcGVuYXMgY29tIA0KK29zIHBvbnRvcyA3IGUgOCAodW0gc3VibGluaGFkbykuIEVzdGEgY29uZmlndXJhw6fDo28gdGFtYsOpbSBwb2RlIHNlciANCittdWRhZGEgY29tIGEgcHJlZmVyw6puY2lhIGRvIEN1cnNvIFN0eWxlLg0KKyANCitDU1JCTElOSw0KK1Bpc2NhKGxpZ2EgZSBkZXNsaWdhIGRlIGFjb3JkbyBjb20gdW0gaW50ZXJ2YWxvIHByw6ktZGVmaW5pZG8pIG8gc8OtbWJvbG8gDQorcXVlIHJlcHJlc2VudGEgbyBjdXJzb3IodmVqYSBvIGNvbWFuZG8gQ1NSVklTKS4gRXN0YSBjb25maWd1cmHDp8OjbyB0YW1iw6ltIA0KK3BvZGUgc2VyIG11ZGFkYSBjb20gYSBwcmVmZXLDqm5jaWEgZG8gQmxpbmtpbmcgQ3Vyc29yLg0KKyANCitBVFRSVklTDQorICAgICAgU3VibGluaGFkbyhjb20gY29tYmluYcOnw7VlcyBkb3MgcG9udG9zIDcgZSA4KSBvIGNhcmFjdGVyIGRlc3RhY2Fkby4NCisgICAgICANCitTZW0gc3VibGluaGFkbw0KK0JyYW5jbyBzb2JyZSBwcmV0byhub3JtYWwpLGNpbnphIHNvYnJlIHByZXRvLCBicmFuY28gc29icmUgYXp1bCwgDQorcHJldG8gc29icmUgY2luemEuDQorDQorICAgICAgUG9udG9zIDcgb3UgOA0KKyAgICAgIFByZXRvIHNvYnJlIGJyYW5jbyAodsOtZGVvIHJldmVyc28pLg0KKw0KKyAgICAgIFBpbm8gOA0KKyAgICAgIFRvZG8gbyByZXN0by4NCisNCitFc3RhIGNvbmZpZ3VyYcOnw6NvIHRhbWLDqW0gcG9kZSBzZXIgbXVkYWRhIGNvbSBhIHByZWZlcsOqbmNpYSBkbyANCitNb3N0cmFyIEF0cmlidXRvcy4NCisNCitBVFRSQkxJTksNCitQaXNjYShtdWRhIGRlIGxpZ2FkbyBlIGRlc2xpZ2FkbyBkZSBhY29yZG8gY29tIG8gaW50ZXJ2YWxvIHByZWRlZmluaWRvKSANCitvIGF0cmlidXRvIHN1YmxpbmhhZG8odmVqYSBvIGNvbWFuZG8gQVRUUlZJUykuIEVzdGUgcmVjdXJzbyBlc3RhIA0KK2luaWNpYWxtZW50ZSBsaWdhZG8uIEVzdGEgY29uZmlndXJhw6fDo28gdGFtYsOpbSBwb2RlIHNlciBtdWRhZGEgY29tIGEgDQorcHJlZmVyw6puY2lhIGRvIEJsaW5raW5nIEF0dHJpYnV0ZXMuDQorDQorQ0FQQkxJTksNCitQaXNjYShsaWdhIGUgZGVzbGlnYSBkZSBhY29yZG8gY29tIHVtIGludGVydmFsbyBwcsOpLWRlZmluaWRvKSBhIGxldHJhIA0KK21hacO6c2N1bGEuIEVzdGEgY29uZmlndXJhw6fDo28gdGFtYsOpbSBwb2RlIHNlciBtdWRhZGEgY29tIGEgcHJlZmVyw6puY2lhIGRvIA0KK0JsaW5raW5nIENhcGl0YWxzLg0KKw0KK1RVTkVTDQorVG9jYXIgdW1hIG1lbG9kaWEgY3VydGEgcHLDqS1kZWZpbmlkYXMgKHZlciBBbGVydCBUdW5lcykgc2VtcHJlIHF1ZSANCitvY29ycmEgdW0gZXZlbnRvIHNpZ25pZmljYXRpdm8uIEVzdGUgcmVjdXJzbyBlc3RhIGluaWNpYWxtZW50ZSBsaWdhZG8uIA0KK0VzdGEgY29uZmlndXJhw6fDo28gdGFtYsOpbSBwb2RlIHNlciBhbHRlcmFkYSBjb20gYSBwcmVmZXLDqm5jaWEgQWxlcnRhIGRlIA0KK1R1bmVzLg0KKw0KK0F1dG9SZXBlYXQNCitBdXRvbWF0aWNhbWVudGUgcmVwZXRlIHVtIGNvbWFuZG8gZW0gdW0gaW50ZXJ2YWxvIHJlZ3VsYXIgYXDDs3MgdW0gYXRyYXNvIA0KK2luaWNpYWwgZW5xdWFudG8gYSBzdWEgY2hhdmUgKGNvbWJpbmHDp8OjbykgY29udGludWEgcHJlc3Npb25hZGEuIEFwZW5hcyANCithbGd1bnMgZHJpdmVycyBzdXBvcnRhbSBlc3RhIGZ1bmNpb25hbGlkYWRlLCBhIHByaW5jaXBhbCBsaW1pdGHDp8OjbyDDqSBxdWUgDQorbXVpdG9zIGRpc3BsYXkgYnJhaWxsZSBuw6NvIHNpbmFsaXphbSB0ZWNsYXMgYXBlcnRhZGFzIGUgdGVjbGFzIGxpYmVyYWRhcyANCitjb21vIGV2ZW50b3Mgc2VwYXJhZG9zIGRpc3RpbnRhbWVudGUuIEVzdGUgcmVjdXJzbyBlc3RhIGluaWNpYWxtZW50ZSANCitsaWdhZG8uIEVzdGEgY29uZmlndXJhw6fDo28gdGFtYsOpbSBwb2RlIHNlciBhbHRlcmFkYSBjb20gYSBwcmVmZXLDqm5jaWEgZGUgDQorQXV0b3JlcGV0acOnw6NvLg0KKw0KK0FVVE9TUEVBSw0KK0F1dG9tYXRpY2FtZW50ZSBmYWxhcjoNCisNCis/CUEgbm92YSBsaW5oYSBxdWFuZG8gYSBqYW5lbGEgYnJhaWxsZSDDqSBtb3ZpZGEgdmVydGljYWxtZW50ZS4NCis/CWNhcmFjdGVyZXMgcXVlIHPDo28gaW5zZXJpZG9zIG91IGV4Y2x1w61kb3MuDQorPwlPIGNhcmFjdGVyIGFvIHF1YWwgbyBjdXJzb3Igw6kgbW92aWRvLg0KKw0KK0VzdGUgcmVjdXJzbyBlc3RhIGluaWNpYWxtZW50ZSBkZXNsaWdhZG8uIEVzdGEgY29uZmlndXJhw6fDo28gdGFtYsOpbSBwb2RlIA0KK3NlciBhbHRlcmFkYSBjb20gYSBwcmVmZXLDqm5jaWEgZGUgQXV0by1GYWxhLg0KKyANCis0LjEuNSBNb2RvIGRlIFNlbGXDp8OjbyANCisgDQorSEVMUA0KK0FsdGVybmUgcGFyYSBhIHDDoWdpbmEgZGUgYWp1ZGEgZG8gZGlzcGxheSBicmFpbGxlLiBJc3RvIMOpIG9uZGUgdm9jw6ogcG9kZSANCitlbmNvbnRyYXIgdW0gcmVzdW1vIG9uLWxpbmUgZGFzIGNvaXNhcyBxdWUgYXMgdGVjbGFzIGRvIHNldSBkaXNwbGF5IA0KK2JyYWlsbGUgZmF6ZW0sIGUgY29tbyBpbnRlcnByZXRhciBvIHN0YXR1cyBkYXMgY8OpbHVsYXMuIFVzZSBvcyBjb21hbmRvcyANCityZWd1bGFyIGRlIG1vdmltZW50byB2ZXJ0aWNhbCBlIGhvcml6b250YWwgcGFyYSBuYXZlZ2FyIHBlbGEgcMOhZ2luYSBkZSANCithanVkYS4gQ2hhbWUgbyBjb21hbmRvIGRlIGFqdWRhIG5vdmFtZW50ZSBwYXJhIHZvbHRhciBwYXJhIGEgdGVsYS4NCisgDQorSU5GTw0KK0FsdGVybmUgcGFyYSBhIGV4aWJpw6fDo28gZGUgc3RhdHVzICh2ZXIgc2XDp8OjbyBUaGUgU3RhdHVzIERpc3BsYXkgcGFyYSANCittYWlzIGRldGFsaGVzKS4gRWxlIGFwcmVzZW50YSB1bSByZXN1bW8gY29tIGEgcG9zacOnw6NvIGRvIGN1cnNvciwgYSANCitwb3Npw6fDo28gZGEgamFuZWxhIGJyYWlsbGUsIGUgb3MgZXN0YWRvcyBkZSB1bWEgc8OpcmllIGRlIGNhcmFjdGVyw61zdGljYXMgDQorZG8gQlJMVFRZLiBDaGFtZSBlc3RlIGNvbWFuZG8gbm92YW1lbnRlIHBhcmEgdm9sdGFyIHBhcmEgYSB0ZWxhLg0KKw0KK0xFQVJODQorQWx0ZXJuYXIgcGFyYSBvIG1vZG8gZGUgY29tYW5kbyBhcHJlbmRlciAodmVyIHNlw6fDo28gQ29tbWFuZCBMZWFybiBNb2RlIA0KK3BhcmEgbWFpcyBkZXRhbGhlcykuIElzdG8gw6kgY29tbyB2b2PDqiBwb2RlIGFwcmVuZGVyIGRlIGZvcm1hIGludGVyYXRpdmEgDQorbyBxdWUgYXMgdGVjbGFzIGRvIHNldSBkaXNwbGF5IGJyYWlsbGUgZmF6ZW0uIENoYW1hciBlc3RlIGNvbWFuZG8gDQorbm92YW1lbnRlIHBhcmEgdm9sdGFyIHBhcmEgYSB0ZWxhLiBFc3RlIGNvbWFuZG8gbsOjbyBlc3RhcsOhIGRpc3BvbsOtdmVsIHNlIA0KK2Egb3DDp8OjbyAtLWRpc2FibGUtbGVhcm4tbW9kZSBmb2kgZXNwZWNpZmljYWRhIG5hIG9ww6fDo28gZGUgY29uc3RydcOnw6NvLg0KKw0KKzQuMS42CVByZWZlcmVuY2lhcyBkZSBNYW51dGVuw6fDo28NCisNCitQUkVGTUVOVQ0KK0VzY29saGEgZG8gbWVudSBkZSBwcmVmZXLDqm5jaWFzIChWZXIgTWVudSBQcmVmZXLDqm5jaWFzKS4gQ2hhbWEgZXNzZSBjb21hbmRvIGRlIA0KK25vdm8gcGFyYSByZXRvcm5hciBhcyBvcGVyYcOnw7VlcyBub3JtYWlzLg0KKw0KK1BSRUZTQVZFDQorU2FsdmEgYXMgY29uZmlndXJhw6fDtWVzIGRlIHByZWZlcsOqbmNpYXMgYXR1YWlzIChWZXIgUHJlZmVyw6puY2lhcykuDQorDQorUFJFRkxPQUQNCitBcm1hemVuYSBhcyBjb25maWd1cmHDp8O1ZXMgZGUgcHJlZmVyw6puY2lhcyBtYWlzIHJlY2VudGVzIChWZXIgUHJlZmVyZW5jaWFzKS4NCisgDQorNC4xLjcgTWVudSBkZSBOYXZlZ2HDp8OjbyANCisgDQorTUVOVV9GSVJTVF9JVEVNL01FTlVfTEFTVF9JVEVNDQorSXIgcGFyYSBvIHByaW1laXJvL8O6bHRpbW8gaXRlbSBubyBtZW51Lg0KKyANCitNRU5VX1BSRVZfSVRFTS9NRU5VX05FWFRfSVRFTQ0KK0lyIHBhcmEgbyBhbnRlcmlvci9zZWd1aW50ZSBpdGVtIG5vIG1lbnUuDQorIA0KK01FTlVfUFJFVl9TRVRUSU5HL01FTlVfTkVYVF9TRVRUSU5HDQorUmV0cm9jZWRlci9FeHBhbmRpciBvIGF0dWFsIGl0ZW0gZG8gbWVudS4NCisgDQorNC4xLjggQ29udHJvbGVzIGRlIEZhbGEgDQorIA0KK1NBWV9MSU5FDQorRmFsYSBhIGxpbmhhIGF0dWFsLiBBIHByZWZlcsOqbmNpYSBkbyBTYXktTGluZSBNb2RlIGRldGVybWluYSBzZSBmYWxhIA0KK3BlbmRlbnRlIMOpIGRlc2NhcnRhZGEgZW0gcHJpbWVpcm8gbHVnYXIuDQorIA0KK1NBWV9BQk9WRQ0KK0ZhbGUgYSBwYXJ0ZSBzdXBlcmlvciBkYSB0ZWxhICh0ZXJtaW5hIGNvbSBhIGxpbmhhIGF0dWFsKS4NCisNCitTQVlfQkVMT1cNCitGYWxlIGEgcGFydGUgaW5mZXJpb3IgZGEgdGVsYSAoY29tZcOnYW5kbyBjb20gYSBsaW5oYSBhdHVhbCkuDQorIA0KK01VVEUNCitQYXJlIGRlIGZhbGFyIGltZWRpYXRhbWVudGUuDQorIA0KK1NQS0hPTUUNCitWw6EgcGFyYSBvbmRlIG8gY3Vyc29yIGZhbGEuDQorIA0KK1NBWV9TTE9XRVIvU0FZX0ZBU1RFUg0KK0F1bWVudGFyL2RpbWludWlyIGEgdmVsb2NpZGFkZSBkZSBsZWl0dXJhICh2ZXIgdGFtYsOpbSBhIHByZWZlcsOqbmNpYSBkZSANCitTcGVlY2ggUmF0ZSkuIEVzdGUgY29tYW5kbyBzw7MgZXN0w6EgZGlzcG9uw612ZWwgc2UgdW0gZHJpdmVyIHF1ZSBzdXBvcnRhIA0KK2VsZSBlc3TDoSBzZW5kbyB1c2Fkby4NCisgDQorU0FZX1NPRlRFUi9TQVlfTE9VREVSDQorQXVtZW50YXIvZGltaW51aXIgbyB2b2x1bWUgZGEgdm96ICh2ZXIgdGFtYsOpbSBhIHByZWZlcsOqbmNpYSBkZSBTcGVlY2ggDQorVm9sdW1lKS4gRXN0ZSBjb21hbmRvIHPDsyBlc3TDoSBkaXNwb27DrXZlbCBzZSB1bSBkcml2ZXIgcXVlIHN1cG9ydGEgZWxlIA0KK2VzdMOhIHNlbmRvIHVzYWRvLg0KKyANCis0LjEuOSBDb211dGHDp8OjbyBkbyBUZXJtaW5hbCBWaXJ0dWFsIA0KKw0KK1ZlamEgdGFtYsOpbSBTV0lUQ0hWVCBlbmNhbWluaGFtZW50byBkZSB0ZWNsYXMgZGUgY29tYW5kby4gDQorIA0KK1NXSVRDSFZUX1BSRVYvU1dJVENIVlRfTkVYVA0KK011ZGUgcGFyYSBvIGFudGVyaW9yL3Byw7N4aW1vIHRlcm1pbmFsIHZpcnR1YWwuDQorIA0KKzQuMS4xMCBPdXRyb3MgQ29tYW5kb3MgDQorIA0KK0NTUkpNUF9WRVJUIA0KKyAgICAgICAgIA0KK0VuY2FtaW5oYSAodHJhemVyKSBvIGN1cnNvciBwYXJhIHF1YWxxdWVyIGx1Z2FyIG5hIGxpbmhhIGRlIGNpbWEgZGEgDQoramFuZWxhIGRvIGJyYWlsbGUgKHZlciBSb3RlYW1lbnRvIGRlIEN1cnNvcikuIE8gY3Vyc29yIMOpIG1vdmlkbyBwb3IgdW1hIA0KK3NpbXVsYcOnw6NvIHZlcnRpY2FsIGRhcyB0ZWNsYXMgZGUgc2V0YSBwcmVzc2lvbmFkYXMuIEVzdGUgY29tYW5kbyBuZW0gDQorc2VtcHJlIGZ1bmNpb25hLCBwb3JxdWUgYWxndW5zIGFwbGljYXRpdm9zIG91IG1vdmUgbyBjdXJzb3IgdW0gcG91Y28gDQoraW1wcmV2aXPDrXZlbCBvdSB1c2UgYXMgdGVjbGFzIGRlIHNldGEgcGFyYSBvdXRyb3MgZmlucyBxdWUgbsOjbyBvIA0KK21vdmltZW50byBkbyBjdXJzb3IuIMOJIHVtIHBvdWNvIG1haXMgc2VndXJvIGRvIHF1ZSBvdXRyb3MgY29tYW5kb3MgZGUgDQorcm90ZWFtZW50byBkbyBjdXJzb3IsIHBvcsOpbSwgcG9ycXVlIG7Do28gZmF6IG5lbmh1bWEgdGVudGF0aXZhIGRlIHNpbXVsYXIgDQorYXMgc2V0YXMgZGEgZXNxdWVyZGEgZSBkaXJlaXRhLiANCisNCitQQVNURSANCisgDQorSW5zaXJhIG9zIGNhcmFjdGVyZXMgbm8gYnVmZmVyIGRlIGNvcnRlIG5hIHBvc2nDp8OjbyBhdHVhbCBkbyBjdXJzb3IgKHZlciANCitDb3BpYXIgZSBDb2xhcikuIA0KKyANCitSRVNUQVJUQlJMIA0KKyANCitQYXJlIGUgcmVpbmljaWUgbyBjb250cm9sYWRvciBkZSB2aXN1YWxpemHDp8OjbyBlbSBCcmFpbGxlLiANCisgDQorUkVTVEFSVFNQRUVDSCANCisgDQorUGFyZSBlIHJlaW5pY2llIG8gY29udHJvbGFkb3IgZGUgc2ludGV0aXphZG9yIGRlIHZvei4gDQorIA0KKzQuMS4xMSBDb21hbmRvcyBkZSBDYXLDoWN0ZXIgDQorIA0KK1JPVVRFIA0KKyANCitFbmNhbWluaGEgKHRyYXplcikgbyBjdXJzb3IgcGFyYSBvIGNhcmFjdGVyZSBhc3NvY2lhZG8gYSB0ZWNsYSBkZSANCityb3RlYW1lbnRvICh2ZXIgUm90ZWFtZW50byBkZSBDdXJzb3IpLiBPIGN1cnNvciDDqSBtb3ZpZG8gcG9yIHVtYSANCitzaW11bGHDp8OjbyBkYXMgdGVjbGFzIGRlIHNldGEgcHJlc3Npb25hZGFzLiBFc3RlIGNvbWFuZG8gbmVtIHNlbXByZSANCitmdW5jaW9uYSwgcG9ycXVlIGFsZ3VucyBhcGxpY2F0aXZvcyBvdSBtb3ZlIG8gY3Vyc29yIHVtIHBvdWNvIA0KK2ltcHJldmlzw612ZWwgb3UgdXNlIGFzIHRlY2xhcyBkZSBzZXRhIHBhcmEgb3V0cm9zIGZpbnMgcXVlIG7Do28gbyANCittb3ZpbWVudG8gZG8gY3Vyc29yLiANCisgDQorQ1VUQkVHSU4NCitBcG9pYS1zZSBubyBpbsOtY2lvIGRvIGJsb2NvIGRlIGNvcnRlIHBhcmEgbyBjYXJhY3RlciBhc3NvY2lhZG8gY29tIGEgDQordGVjbGEgZGUgcm90ZWFtZW50byAodmVyIENvcGlhciBlIENvbGFyKS4gRXN0ZSBjb21hbmRvIGxpbXBhIG8gYnVmZmVyIGRlIA0KK2NvcnRlLg0KKyANCitDVVRBUFBFTkQNCitBcG9pYS1zZSBubyBpbsOtY2lvIGRvIGJsb2NvIGRlIGNvcnRlIHBhcmEgbyBjYXLDoXRlciBhc3NvY2lhZG8gY29tIGEgDQordGVjbGEgZGUgcm90ZWFtZW50byAodmVyIENvcGlhciBlIENvbGFyKS4gRXN0ZSBjb21hbmRvIG7Do28gbGltcGFyIG8gDQorYnVmZmVyIGRlIGNvcnRlLg0KKyANCitDVVRSRUNUDQorQXBvaWEtc2Ugbm8gZmltIGRvIGJsb2NvIGRlIGNvcnRlIHBhcmEgbyBjYXLDoXRlciBhc3NvY2lhZG8gY29tIGEgdGVjbGEgDQorZGUgcm90ZWFtZW50bywgZSBhbmV4YXIgYSByZWdpw6NvIHJldGFuZ3VsYXIgcGFyYSBvIGJ1ZmZlciBkZSBjb3J0ZSAodmVyIA0KK0NvcGlhciBlIENvbGFyKS4NCisNCitDVVRMSU5FDQorQXBvaWEtc2Ugbm8gZmltIGRvIGJsb2NvIGRlIGNvcnRlIHBhcmEgbyBjYXLDoXRlciBhc3NvY2lhZG8gY29tIGEgdGVjbGEgDQorZGUgcm90ZWFtZW50bywgZSBhbmV4YXIgYSByZWdpw6NvIGxpbmVhciBwYXJhIG8gYnVmZmVyIGRlIGNvcnRlICh2ZXIgDQorQ29waWFyIGUgQ29sYXIpLg0KKyANCitDT1BZQ0hBUlMNCitDb3BpZSBvIGJsb2NvIGRlIGNhcsOhdGVyIGFwb2lhZG8tc2UgcG9yIGR1YXMgdGVjbGEgZGUgcm90ZWFtZW50byBwYXJhIG8gDQorYnVmZmVyIGRlIGNvcnRlICh2ZXIgQ29waWFyIGUgQ29sYXIpLg0KKyANCitBUE5EQ0hBUlMgDQorICAgIA0KK0FjcmVzY2VudGUgbyBibG9jbyBkZSBjYXLDoXRlciBhcG9pYW5kLXNlIHBvciBkdWFzIHRlY2xhcyBkZSByb3RlYW1lbnRvIA0KK3BhcmEgbyBidWZmZXIgZGUgY29ydGUgKHZlciBDb3BpYXIgZSBDb2xhcikuIA0KKyANCitQUklOREVOVC9OWElOREVOVA0KKw0KK0lyIHBhcmEgY2ltYS9iYWl4byBwYXJhIGEgcHLDs3hpbWEgbGluaGEgcXVlIG7Do28gZXN0w6EgbWFpcyBhdmFuw6dhZG8gZG8gDQorcXVlIGEgY29sdW5hIGFzc29jaWFkYSDDoCB0ZWNsYSBkZSByb3RlYW1lbnRvLg0KKyANCitERVNDQ0hBUg0KK01vbWVudGFuZWFtZW50ZSAodmVqYSBhIG9ww6fDo28gLU0gZGUgbGluaGEgZGUgY29tYW5kbykgZXhpYmkgdW1hIG1lbnNhZ2VtIA0KK2Rlc2NyZXZlbmRvIG8gY2Fyw6F0ZXIgYXNzb2NpYWRvIGNvbSBhIHRlY2xhIGRlIHJvdGVhbWVudG8uIEVsYSByZXZlbGEgb3MgDQordmFsb3JlcyBkZWNpbWFpcyBlIGhleGFkZWNpbWFpcyBkbyBjYXJhY3RlciwgYXMgY29yZXMgZGUgcHJpbWVpcm8gcGxhbm8gDQorZSBmdW5kbywgZSwgcXVhbmRvIHByZXNlbnRlcywgYXRyaWJ1dG9zIGVzcGVjaWFpcyAoYnJpZ2h0IGUgYnJpbmspLiBBIA0KK21lbnNhZ2VtIMOpIGFzc2ltOg0KKw0KK2NoYXIgNjUgKDB4NDEpOiB3aGl0ZSBvbiBibGFjayBicmlnaHQgYmxpbmsNCisgDQorU0VUTEVGVA0KK1JlcG9zaWNpb25hIGhvcml6b250YWxtZW50ZSBhIGphbmVsYSBicmFpbGxlIGRlIG1vZG8gcXVlIHN1YSBib3JkYSANCitlc3F1ZXJkYSDDqSBhIGNvbHVuYSBhc3NvY2lhZGEgw6AgdGVjbGEgZGUgcm90ZWFtZW50by4gRXN0YSBjYXJhY3RlcsOtc3RpY2EgDQordG9ybmEgbXVpdG8gZsOhY2lsIGNvbG9jYXIgYSBqYW5lbGEgZXhhdGFtZW50ZSBvbmRlIGVsYSDDqSBuZWNlc3PDoXJpYSwgZSwgDQorcG9yIGNvbnNlZ3VpbnRlLCBwYXJhIG1vc3RyYSBvIHF1ZSB0ZW0gYXMgdGVjbGFzIGRlIHJvdGVhbWVudG8sIHF1YXNlIA0KK2VsaW1pbmEgYSBuZWNlc3NpZGFkZSBkZSBtdWl0byBtb3ZpbWVudG8gZnVuZGFtZW50YSBkYWphbmVsYSAoY29tbyBvcyANCitjb21hbmRvcyBDSFJMVC9DSFJSVCBlIEhXSU5MVC9IV0lOUlQpLg0KKw0KK1BSRElGQ0hBUi9OWERJRkNIQVINCitJciBwYXJhIGNpbWEvYmFpeG8gcGFyYSBhIHByw7N4aW1hIGRhIGxpbmhhIHF1ZSB0ZW0gdW0gY2Fyw6F0ZXIgZGlmZXJlbnRlIA0KK25hIGNvbHVuYSBhc3NvY2lhZGEgw6AgdGVjbGEgZGUgcm90ZWFtZW50by4NCisgDQorNC4xLjEyIENvbWFuZG9zIGRlIFN1cG9ydGUgDQorIA0KK1NXSVRDSFZUDQorTXVkYSBwYXJhIG8gdGVybWluYWwgdmlydHVhbCBjdWpvIG7Dum1lcm8gKGNvbnRhZ2VtIGEgcGFydGlyIGRlIDEpIA0KK2NvcnJlc3BvbmRlIGFvIGRhIHRlY2xhIGRlIHJvdGVhbWVudG8uIFZlamEgdGFtYsOpbSBvcyBjb21hbmRvcyBkZSB0cm9jYSANCitkZSB0ZXJtaW5hbCB2aXJ0dWFsIFNXSVRDSFZUX1BSRVYvU1dJVENIVlRfTkVYVC4NCisgDQorU0VUTUFSSw0KK01hcmNhciAobGVtYnJlLXNlKSwgYSBwb3Npw6fDo28gYXR1YWwgZGEgamFuZWxhIGJyYWlsbGUgbnVtIHJlZ2lzdG8gDQorYXNzb2NpYWRvIGNvbSBhIHRlbGNhIGRlIHJvdGVhbWVudG8uIFZlamEgbyBjb21hbmRvIEdPVE9NQVJLLiBFc3RlIA0KK3JlY3Vyc28gc8OzIGFmZXRhIG8gdGVybWluYWwgdmlydHVhbCBhdHVhbC4NCisgDQorR09UT01BUksNCitNb3ZlIGEgamFuZWxhIGJyYWlsbGUgcGFyYSBhIHBvc2nDp8OjbyBhbnRlcmlvcm1lbnRlIG1hcmNhZGEgKHZlamEgbyANCitjb21hbmRvIFNFVE1BUkspIGNvbSBhIG1lc21hIHRlY2xhIGRlIHJvdGVhbWVudG8uIEVzdGUgcmVjdXJzbyBzw7MgYWZldGEgDQorbyB0ZXJtaW5hbCB2aXJ0dWFsIGF0dWFsLg0KKw0KKzQuMiAtIEFycXVpdm9zIGRlIGNvbmZpZ3VyYcOnw6NvDQorDQorUGFkcsO1ZXMgZG8gc2lzdGVtYSBwYXJhIGRpdmVyc2FzIGNvbmZpZ3VyYcOnw7VlcyBwb2RlbSBzZXIgZXN0YWJlbGVjaWRhcyANCitkZW50cm8gZGUgdW0gYXJxdWl2byBkZSBjb25maWd1cmHDp8Ojby4gTyBub21lIHBhZHLDo28gcGFyYSBlc3RlIGFycXVpdm8gw6kgDQorL2JybHR0eS5jb25mIC9ldGMsIGVtYm9yYSBwb3NzYSBzZXIgc3Vic3RpdHXDrWRvIGNvbSBhIG9ww6fDo28gZGUgbGluaGEgZGUgDQorY29tYW5kbyAtZi4gRWxlIG7Do28gcHJlY2lzYSBleGlzdGlyLiBVbSBtb2RlbG8gcGFyYSBlbGUgcG9kZSBzZXIgDQorZW5jb250cmFkbyBkZW50cm8gZG8gc3ViZGlyZXTDs3JpbyBET0NTLg0KKw0KK0FzIGxpbmhhcyBlbSBicmFuY28gc8OjbyBpZ25vcmFkYXMuIFVtIGNvbWVudMOhcmlvIGNvbWXDp2EgY29tIHVtIHNpbmFsIA0KK251bcOpcmljbyAoIyksIGUgY29udGludWEgYXTDqSBvIGZpbSBkYSBsaW5oYS4gQXMgc2VndWludGVzIGRpcmV0aXZhcyBzw6NvIA0KK3JlY29uaGVjaWRhczoNCisNCithcGktcGFyYW1ldGVycyBuYW1lPXZhbHVlLC4uLg0KK0VzcGVjaWZpY2Egb3MgcGFyw6JtZXRyb3MgcGFyYSBhIEFwcGxpY2F0aW9uIFByb2dyYW1taW5nIEludGVycmZhY2UuIFNlIG8gDQorbWVzbW8gcGFyw6JtZXRybyBmb3IgZXNwZWNpZmljYWRvIG1haXMgZGUgdW1hIHZleiwgYSBzdWEgYXRyaWJ1acOnw6NvIG1haXMgDQorYSBkaXJlaXRhIMOpIHVzYWRhLiBQYXJhIG9idGVyIHVtYSBkZXNjcmnDp8OjbyBkb3MgcGFyw6JtZXRyb3MgYWNlaXRvcyBwZWxhIA0KK2ludGVyZmFjZSwgY29uc3VsdGUgbyBtYW51YWwgZGUgcmVmZXLDqm5jaWEgQnJsQVBJLiBWZWphIGFzIG9ww6fDtWVzIGRlIA0KK2NvbnN0cnXDp8OjbyAtLXdpdGgtYXBpLXBhcmFtZXRlcnMgcGFyYSBvcyBwYWRyw7VlcyBlc3RhYmVsZWNpZG9zIGR1cmFudGUgbyANCitwcm9jZXNzbyBkZSBjb25zdHJ1w6fDo28uIEVzdGEgZGlyZXRpdmEgcG9kZSBzZXIgc3Vic3RpdHXDrWRvIGNvbSBhIG9ww6fDo28gDQorZGUgbGluaGEgZGUgY29tYW5kbyAtQS4NCisgDQorYXR0cmlidXRlcy10YWJsZSBmaWxlDQorRXNwZWNpZmljYSBhIHRhYmVsYSBkZSBhdHJpYnV0b3MgKHZlciBBdHRyaWJ1dGVzIFRhYmxlcyBwYXJhIG9idGVyIA0KK2RldGFsaGVzKS4gU2UgdW0gY2FtaW5obyByZWxhdGl2byBmb3IgZm9ybmVjaWRvLCBlbnTDo28gZWxlIGVzdMOhIGFuY29yYWRvIA0KK2VtIC9ldGMgL2JybHR0eSAodmVyIGFzIG9ww6fDtWVzIGRlIGNvbXBpbGHDp8OjbyAtLXdpdGgtZGF0YS1kaXJlY3RvcnkgZSAtLQ0KK3dpdGgtZXhlY3V0ZS1yb290IHBhcmEgbWFpcyBkZXRhbGhlcykuIEEgZXh0ZW5zw6NvIC5hdGIgw6kgb3BjaW9uYWwuIE8gDQorcGFkcsOjbyDDqSB1c2FyIGEgdGFiZWxhIGJ1aWx0LWluICh2ZWphIGEgb3DDp8OjbyBkZSBjb25zdHJ1w6fDo28gLS13aXRoLQ0KK2F0dHJpYnV0ZXMtdGFibGUpLiBFc3RhIGRpcmV0aXZhIHBvZGUgc2VyIHN1YnN0aXR1w61kYSBjb20gYSBvcMOnw6NvIGRlIA0KK2xpbmhhIGRlIGNvbWFuZG8gLWEuDQorIA0KK2JyYWlsbGUtZGV2aWNlIGRldmljZSwuLi4NCitFc3BlY2lmaWNhIG8gZGlzcG9zaXRpdm8gcGFyYSBvIHF1YWwgbyBkaXNwbGF5IGJyYWlsbGUgZXN0w6EgbGlnYWRvIA0KKyhjb25zdWx0ZSBhIHNlw6fDo28gQnJhaWxsZSBEZXZpY2UgU3BlY2lmaWNhdGlvbikuIFZlamEgYSBvcMOnw6NvIGNvbnN0cnXDp8OjbyANCistLXdpdGgtYnJhaWxsZS1kZXZpY2UgcGFyYSBvIHBhZHLDo28gZXN0YWJlbGVjaWRvIGR1cmFudGUgbyBwcm9jZXNzbyBkZSANCitjb25zdHJ1w6fDo28uIEVzdGEgZGlyZXRpdmEgcG9kZSBzZXIgc3Vic3RpdHXDrWRhIGNvbSBhIG9ww6fDo28gZGUgbGluaGEgZGUgDQorY29tYW5kby1kLg0KKyANCiticmFpbGxlLWRyaXZlciBkcml2ZXIsLi4ufGF1dG8gDQorRXNwZWNpZmljYSBvIGRyaXZlciBkbyBkaXNwbGF5IGJyYWlsbGUgKHZlciBzZcOnw6NvIERyaXZlciBTcGVjaWZpY2F0aW9uKS4gDQorTyBwYWRyw6NvIMOpIGEgcmVhbGl6YcOnw6NvIGRlIGF1dG8tZGV0ZWPDp8Ojby4gRXN0YSBkaXJldGl2YSBwb2RlIHNlciANCitzdWJzdGl0dcOtZGEgY29tIGEgb3DDp8OjbyBkZSBsaW5oYSBkZSBjb21hbmRvIC1iLiANCisgDQorYnJhaWxsZS1wYXJhbWV0ZXJzIFtkcml2ZXI6XW5hbWU9dmFsdWUsLi4uDQorRXNwZWNpZmljYSBvcyBwYXLDom1ldHJvcyBwYXJhIG9zIGRyaXZlcnMgZG8gZGlzcGxheSBicmFpbGxlLiBTZSBvIG1lc21vIA0KK3BhcsOibWV0cm8gZm9yIGVzcGVjaWZpY2FkbyBtYWlzIGRlIHVtYSB2ZXosIGEgc3VhIGF0cmlidWnDp8OjbyBtYWlzIGEgDQorZGlyZWl0YSDDqSB1c2FkYS4gU2UgdW0gbm9tZSBkZSBwYXLDom1ldHJvIMOpIHF1YWxpZmljYWRvIHBvciB1bSBkcml2ZXIgDQorKGNvbnN1bHRlIGEgc2XDp8OjbyBEcml2ZXIgSWRlbnRpZmljYXRpb24gQ29kZXMpLCBlbnTDo28gZXNzYSBjb25maWd1cmHDp8OjbyANCitzw7Mgc2UgYXBsaWNhIGFvIGRyaXZlciwgc2UgbsOjbyDDqSwgZW50w6NvIHNlIGFwbGljYSBhIHRvZG9zIG9zIGRyaXZlcnMuIA0KK1BhcmEgb2J0ZXIgdW1hIGRlc2NyacOnw6NvIGRvcyBwYXLDom1ldHJvcyBhY2VpdG9zIHBvciB1bSBkcml2ZXIgDQorZXNwZWPDrWZpY28sIGNvbnN1bHRlIGEgZG9jdW1lbnRhw6fDo28gZGVzc2UgZHJpdmUuIFZlamEgYSBkZSBvcMOnw6NvIA0KK2NvbnN0cnXDp8OjbyAtLXdpdGgtYnJhaWxsZS1wYXJhbWV0ZXJzIHBhcmEgb3MgcGFkcsO1ZXMgZXN0YWJlbGVjaWRvcyANCitkdXJhbnRlIG8gcHJvY2Vzc28gZGUgY29uc3RydcOnw6NvLiBFc3RhIGRpcmV0aXZhIHBvZGUgc2VyIHN1YnN0aXR1w61kYSBjb20gDQorYSBvcMOnw6NvIGRlIGxpbmhhIGRlIGNvbWFuZG8gLUIuDQorDQorY29udHJhY3Rpb24tdGFibGUgZmlsZQ0KK0VzcGVjaWZpY2EgYSB0YWJlbGEgZGUgY29udHJhw6fDo28gKHZlciBzZcOnw6NvIENvbnRyYWN0aW9uIFRhYmxlcyBwYXJhIG1haXMgDQorZGV0YWxoZXMpLiBTZSB1bSBjYW1pbmhvIHJlbGF0aXZvIGZvciBmb3JuZWNpZG8sIGVudMOjbyBlbGUgZXN0w6EgYW5jb3JhZG8gDQorZW0gL2V0Yy9icmx0dHkgKHZlciBhcyBvcMOnw7VlcyBkZSBjb25zdHJ1w6fDo28gLS13aXRoLWRhdGEtZGlyZWN0b3J5IGUgLS0NCit3aXRoLWV4ZWN1dGUtcm9vdCBwYXJhIG1haXMgZGV0YWxoZXMpLiBBIGV4dGVuc8OjbyAuY3RiLiDDqSBvcGNpb25hbC4gQSANCit0YWJlbGEgZGUgY29udHJhw6fDo28gw6kgdXNhZG8gcXVhbmRvIG8gcmVjdXJzbyBkZSA2LXBvbnRvcyBicmFpbGxlIMOpIA0KK2F0aXZhZG8gKHZlamEgbyBjb21hbmRvIFNJWERPVFMgZSBhIHByZWZlcsOqbmNpYSBUZXh0IFN0eWxlKS4gTyBwYWRyw6NvIMOpIA0KK21vc3RyYXIgZGVzY29udHJhY2lvbmFkYSA2LXBvbnRvcyBicmFpbGxlLiBFc3RhIGRpcmV0aXZhIHBvZGUgc2VyIA0KK3N1YnN0aXR1w61kYSBjb20gYSBvcMOnw6NvIGRlIGxpbmhhIGRlIGNvbWFuZG8gLWMuIE7Do28gZXN0w6EgZGlzcG9uw612ZWwgc2UgYSANCitvcMOnw6NvIGRlIGNvbnN0cnXDp8OjbyAtLWRpc2FibGUtY29udHJhY3RlZC1icmFpbGxlIGZvaSBlc3BlY2lmaWNhZGEuDQorIA0KK2tleS10YWJsZSBmaWxlfGF1dG8NCitFc3BlY2lmaWNhIGEgdGFiZWxhIGRlIHRlY2xhICh2ZXIgS2V5IFRhYmxlcyBwYXJhIGRldGFsaGVzKS4gU2UgdW0gDQorY2FtaW5obyByZWxhdGl2byBmb3IgZm9ybmVjaWRvLCBlbnTDo28gZWxlIGVzdMOhIGFuY29yYWRvIGVtIC9ldGMvYnJsdHR5IA0KKyh2ZXIgYXMgb3DDp8O1ZXMgZGUgY29tcGlsYcOnw6NvIC0td2l0aC1kYXRhLWRpcmVjdG9yeSBlIC0td2l0aC1leGVjdXRlLXJvb3QgDQorcGFyYSBtYWlzIGRldGFsaGVzKS4gQSBleHRlbnPDo28gLmt0YiDDqSBvcGNpb25hbC4gTyBwYWRyw6NvIMOpIG7Do28gdXNhciB1bWEgDQordGFiZWxhIGRlIHRlY2xhcy4gRXN0YSBkaXJldGl2YSBwb2RlIHNlciBzdWJzdGl0dcOtZGEgY29tIGEgb3DDp8OjbyBkZSANCitsaW5oYSBkZSBjb21hbmRvIC1rLg0KKyANCitrZXlib2FyZC1wcm9wZXJ0aWVzIG5hbWU9dmFsdWUsLi4uDQorRXNwZWNpZmljYSBhcyBwcm9wcmllZGFkZXMgZG9zIHRlY2xhZG8ocykgYSBzZXJlbSBtb25pdG9yYWRvcy4gU2UgYSANCittZXNtYSBwcm9wcmllZGFkZSBmb3IgZXNwZWNpZmljYWRhIG1haXMgZGUgdW1hIHZleiwgYSBzdWEgYXRyaWJ1acOnw6NvIA0KK21haXMgYSBkaXJlaXRhIMOpIHVzYWRhLiBDb25zdWx0ZSBhIHNlw6fDo28gS2V5Ym9hcmQgUHJvcGVydGllcyBwYXJhIG9idGVyIA0KK3VtYSBsaXN0YSBkYXMgcHJvcHJpZWRhZGVzIHF1ZSBwb2RlbSBzZXIgZXNwZWNpZmljYWRhcy4gTyBwYWRyw6NvIMOpIA0KK21vbml0b3JhciB0b2RvcyBvcyB0ZWNsYWRvcy4gRXN0YSBkaXJldGl2YSBwb2RlIHNlciBzdWJzdGl0dcOtZGEgY29tIGEgDQorb3DDp8OjbyBkZSBsaW5oYSBkZSBjb21hbmRvIC1LLg0KKyANCittaWRpLWRldmljZSBkZXZpY2UNCitFc3BlY2lmaWNhIG8gZGlzcG9zaXRpdm8gYSBzZXIgdXNhZG8gcGFyYSBvIE11c2ljYWwgSW5zdHJ1bWVudCBEaWdpdGFsIA0KK0ludGVyZmFjZSAodmVyIHNlw6fDo28gTUlESSBEZXZpY2UgU3BlY2lmaWNhdGlvbikuIEVzdGEgZGlyZXRpdmEgcG9kZSBzZXIgDQorc3Vic3RpdHXDrWRhIGNvbSBhIG9ww6fDo28gZGUgbGluaGEgZGUgY29tYW5kbyAtbS4gTsOjbyBlc3TDoSBkaXNwb27DrXZlbCBzZSBhIA0KK29ww6fDo28gZGUgY29uc3RydcOnw6NvIC0tZGlzYWJsZS1taWRpLXN1cHBvcnQgZm9pIGVzcGVjaWZpY2FkYS4NCisgDQorcGNtLWRldmljZSBkZXZpY2UNCitFc3BlY2lmaWNhIG8gZGlzcG9zaXRpdm8gYSBzZXIgdXNhZG8gcGFyYSBvIMOhdWRpbyBkaWdpdGFsICh2ZXIgc2XDp8OjbyBQQ00gDQorRGV2aWNlIFNwZWNpZmljYXRpb24pLiBFc3RhIGRpcmV0aXZhIHBvZGUgc2VyIHN1YnN0aXR1w61kYSBjb20gYSBvcMOnw6NvIA0KK2xpbmhhIGRlIGNvbWFuZG8gLXAuIE7Do28gZXN0w6EgZGlzcG9uw612ZWwgc2UgYSBvcMOnw6NvIGRlIGNvbnN0cnXDp8OjbyAtLQ0KK2Rpc2FibGUtcGNtLXN1cHBvcnQgZm9pIGVzcGVjaWZpY2FkYS4NCisNCitwcmVmZXJlbmNlcy1maWxlIGZpbGUNCitFc3BlY2lmaWNhIGEgbG9jYWxpemHDp8OjbyBkbyBhcnF1aXZvIHF1ZSBzZXJhIHVzYWRhIHBhcmEgc2FsdmFyIGUgY2FycmVnYXIgYXMgDQorcHJlZmVyZW5jaWFzIGRlIHVzdWFyaW8uIFNlIHVtIGNhbWluaG8gcmVsYXRpdm8gw6kgZm9ybmVjaWRvLCBzZXLDoSBhbmV4YWRvIGVtIA0KKy92YXIvbGliL2JybHR0eS4gTyBwYWRyw6NvIMOpIHVzYWRvIGVtIGJybHR0eS5wcmVmcy4gTyBkaXJldMOzcmlvIHBvZGUgc2VyIHJlZXNjcml0IA0KK2NvbSBvIGNvbWFuZG8gLUYuDQorDQorcmVsZWFzZS1kZXZpY2UgYm9vbGVhbg0KK1F1ZXJlbmRvIG91IG7Do28sIHBhcmEgbGliZXJhciBvIGRpc3Bvc2l0aXZvIGFvIHF1YWwgbyBkaXNwbGF5IGJyYWlsbGUgDQorZXN0w6EgbGlnYWRvIHF1YW5kbyBhIHRlbGEgb3UgamFuZWxhIGF0dWFsIG7Do28gcG9kZSBzZXIgbGlkby4NCisgDQorT24ob24pDQorICAgICAgTGliZXJhIG8gZGlzcG9zaXRpdm8uDQorICAgICAgIA0KKyAgICAgIE9mZihvZmYpDQorICAgICAgTsOjbyBsaWJlcmFyIG8gZGlzcG9zaXRpdm8uDQorDQorQSBjb25maWd1cmHDp8OjbyBwYWRyw6NvIMOpIGxpZ2FkbyBlbSBwbGF0YWZvcm1hcyBXaW5kb3dzIGUgZGVzbGlnYWRvIGVtIA0KK3RvZGFzIGFzIG91dHJhcyBwbGF0YWZvcm1hcy4gRXN0YSBkaXJldGl2YSBwb2RlIHNlciBzdWJzdGl0dcOtZGEgY29tIGEgDQorb3DDp8OjbyBkZSBsaW5oYSBkZSBjb21hbmRvIC1yLg0KKyANCitzY3JlZW4tZHJpdmVyIGRyaXZlcg0KK0VzcGVjaWZpY2EgbyBkcml2ZXIgZGEgdGVsYSAodmVyIHNlw6fDo28gRHJpdmVycyBkZSBUZWxhIFN1cG9ydGFkb3MpLiBWZWphIA0KK2Egb3DDp8OjbyBkZSBjb25zdHJ1w6fDo28gLS13aXRoLXNjcmVlbi1kcml2ZXIgcGFyYSBvIHBhZHLDo28gZXN0YWJlbGVjaWRvIA0KK2R1cmFudGUgbyBwcm9jZXNzbyBkZSBjb21waWxhw6fDo28uIEVzdGEgZGlyZXRpdmEgcG9kZSBzZXIgc3Vic3RpdHXDrWRhIGNvbSANCithIG9ww6fDo28gZGUgbGluaGEgZGUgY29tYW5kbyAteC4NCisgDQorc2NyZWVuLXBhcmFtZXRlcnMgW2RyaXZlcjpdbmFtZT12YWx1ZSwuLi4NCitFc3BlY2lmaWNhIG9zIHBhcsOibWV0cm9zIHBhcmEgb3MgZHJpdmVycyBkZSB0ZWxhLiBTZSBvIG1lc21vIHBhcsOibWV0cm8gDQorZm9yIGVzcGVjaWZpY2FkbyBtYWlzIGRlIHVtYSB2ZXosIGEgc3VhIGF0cmlidWnDp8OjbyBtYWlzIGEgZGlyZWl0YSDDqSANCit1c2FkYS4gU2UgdW0gbm9tZSBkZSBwYXLDom1ldHJvIMOpIHF1YWxpZmljYWRvIHBvciB1bSBkcml2ZXIgKGNvbnN1bHRlIGEgDQorc2XDp8OjbyBEcml2ZXJzIGRlIFRlbGEgU3Vwb3J0YWRvcyksIGVtIHNlZ3VpZGEsIGEgZGVmaW5pw6fDo28gc8OzIHNlIGFwbGljYSANCithbyBkcml2ZSwgc2UgbsOjbyDDqSwgZW50w6NvLCBzZSBhcGxpY2EgYSB0b2RvcyBvcyBkcml2ZXJzLiBQYXJhIG9idGVyIHVtYSANCitkZXNjcmnDp8OjbyBkb3MgcGFyw6JtZXRyb3MgYWNlaXRvcyBwb3IgdW0gZHJpdmVyIGVzcGVjw61maWNvLCBjb25zdWx0ZSBhIA0KK2RvY3VtZW50YcOnw6NvIGRvIGRyaXZlLiBWZWphIGEgb3DDp8OjbyBkZSBjb25zdHJ1w6fDo28gLS13aXRoLXNjcmVlbi0NCitwYXJhbWV0ZXJzIHBhcmEgb3MgcGFkcsO1ZXMgZXN0YWJlbGVjaWRvcyBkdXJhbnRlIG8gcHJvY2Vzc28gZGUgDQorY29uc3RydcOnw6NvLiBFc3RhIGRpcmV0aXZhIHBvZGUgc2VyIHN1YnN0aXR1w61kYSBjb20gYSBvcMOnw6NvIGRlIGxpbmhhIGRlIA0KK2NvbWFuZG8gLVguDQorIA0KK3NwZWVjaC1kcml2ZXIgZHJpdmVyLC4uLnxhdXRvDQorRXNwZWNpZmljYSBvIGRyaXZlciBkbyBzaW50ZXRpemFkb3IgZGUgdm96ICh2ZXIgc2XDp8OjbyBFc3BlY2lmaWNhw6fDo28gZGUgDQorRHJpdmVyKS4gTyBwYWRyw6NvIMOpIGEgcmVhbGl6YcOnw6NvIGRlIGF1dG8tZGV0ZWPDp8Ojby4gRXN0YSBkaXJldGl2YSBwb2RlIA0KK3NlciBzdWJzdGl0dcOtZGEgY29tIGEgb3DDp8OjbyBkZSBsaW5oYSBkZSBjb21hbmRvIC1zLiBOw6NvIGVzdMOhIGRpc3BvbsOtdmVsIA0KK3NlIGEgb3DDp8OjbyBkZSBjb25zdHJ1w6fDo28gLS1kaXNhYmxlLXNwZWVjaC1zdXBwb3J0IGZvaSBlc3BlY2lmaWNhZGEuIA0KKw0KK3NwZWVjaC1maWZvIGZpbGUNCitFc3BlY2lmaWNhIGEgRklGTyAodW0gYXJxdWl2byBlc3BlY2lhbCBxdWUgZnVuY2lvbmEgY29tbyB1bSB0dWJvKSBxdWUgw6kgDQordXNhZG8gcG9yIG91dHJhcyBhcGxpY2HDp8O1ZXMgcXVlIGRlc2VqYW0gdGVyIGFjZXNzbyBhbyBkcml2ZXIgZGUgZmFsYSANCitCUkxUVFkuIEVzdGEgZGlyZXRpdmEgcG9kZSBzZXIgc3Vic3RpdHXDrWRhIGNvbSBhIG9ww6fDo28gZGUgbGluaGEgZGUgDQorY29tYW5kbyAtRi4gTsOjbyBlc3TDoSBkaXNwb27DrXZlbCBzZSBhIG9ww6fDo28gZGUgY29uc3RydcOnw6NvIC0tZGlzYWJsZS0NCitzcGVlY2gtc3VwcG9ydCAgZm9pIGVzcGVjaWZpY2FkYS4NCisgDQorc3BlZWNoLXBhcmFtZXRlcnMgW2RyaXZlcjpdbmFtZT12YWx1ZSwuLi4NCitFc3BlY2lmaWNhIG9zIHBhcsOibWV0cm9zIHBhcmEgb3MgZHJpdmVzIGRlIHNpbnRldGl6YWRvciBkZSB2b3ouIFNlIG8gDQorbWVzbW8gcGFyw6JtZXRybyDDqSBlc3BlY2lmaWNhZG8gbWFpcyBkZSB1bWEgdmV6LCBhIHN1YSBhdHJpYnVpw6fDo28gbWFpcyBhIA0KK2RpcmVpdGEgw6kgdXNhZGEuIFNlIHVtIG5vbWUgZGUgcGFyw6JtZXRybyDDqSBxdWFsaWZpY2FkbyBwb3IgdW0gZHJpdmVyIA0KKyhjb25zdWx0ZSBhIHNlw6fDo28gQ8OzZGlnbyBkZSBJZGVudGlmaWNhw6fDo28gZGUgRHJpdmVyKSwgZW50w6NvIGVzc2EgDQorY29uZmlndXJhw6fDo28gc8OzIHNlIGFwbGljYSBhbyBkcml2ZSwgc2Vuw6NvIHNlIGFwbGljYSBhIHRvZG9zIG9zIGRyaXZlcnMuIA0KK1BhcmEgb2J0ZXIgdW1hIGRlc2NyacOnw6NvIGRvcyBwYXLDom1ldHJvcyBhY2VpdG9zIHBvciB1bSBkcml2ZXIgDQorZXNwZWPDrWZpY28sIGNvbnN1bHRlIGEgZG9jdW1lbnRhw6fDo28gZG8gZHJpdmUuIFZlamEgYSBvcMOnw6NvIGRlIGNvbnN0cnXDp8OjbyANCistLXdpdGgtc3BlZWNoLXBhcmFtZXRlcnMgcGFyYSBvcyBwYWRyw7VlcyBlc3RhYmVsZWNpZG9zIGR1cmFudGUgbyANCitwcm9jZXNzbyBkZSBjb25zdHJ1w6fDo28uIEVzdGEgZGlyZXRpdmEgcG9kZSBzZXIgc3Vic3RpdHXDrWRhIGNvbSBvIG9ww6fDo28gDQorZGUgbGluaGEgZGUgY29tYW5kbyAtUy4NCisgDQordGV4dC10YWJsZSBmaWxlfGF1dG8NCitFc3BlY2lmaWNhIGEgdGFiZWxhIGRlIHRleHRvKHZlamEgYSBzZcOnw6NvIFRhYmVsYXMgZGUgVGV4dG8gcGFyYSANCitkZXRhbGhlcykuIFNlIHVtIGNhbWluaG8gcmVsYXRpdm8gZm9yIGZvcm5lY2lkbywgZW50w6NvIGVsZSBlc3TDoSBhbmNvcmFkbyANCitlbSAvZXRjL2JybHR0eSAodmVqYSBhcyBvcMOnw7VlcyBkZSBjb21waWxhw6fDo28gwpZ3aXRoLWRhdGEtZGlyZWN0b3J5IGUgwpYNCit3aXRoLWV4ZWN1dGUtcm9vdCBwYXJhIG1haXMgZGV0YWxoZXMpLiBBIGV4dGVuc8OjbyAudHRiIMOpIG9wY2lvbmFsLiBPIA0KK3BhZHLDo28gw6kgZXhlY3V0YXIgYXV0by1zZWxlw6fDo28gZG8gbG9jYWxlLWJhc2VkLCBjb20gYWx0ZXJuYXRpdmEgcGFyYSBhIA0KK3RhYmVsYSBidWlsZC1pbiAodmVqYSBhIG9ww6fDo28gY29tcGlsYcOnw6NvIC0td2l0aC10ZXh0LXRhYmxlKS4gRXN0YSANCitkaXJldGl2YSBwb2RlIHNlciBzdWJ0aXR1w61kYSBjb20gYSBvcMOnw6NvIGRlIGxpbmhhIGRlIGNvbWFuZG8gwpZ0Lg0KKw0KK3NwZWVjaC1pbnB1dCBuYW1lDQorRXNwZWNpZmljYSBvIG5vbWUgZG8gYXJxdWl2byBkbyBvYmpldG8gZG8gc2lzdGVtYSAoRklGTywgcGlwZSBuYW1lLCBzb2NrZXQgbmFtZSwgDQorZXRjKSBxdWUgcG9kZSBzZXIgdXNhZG8gY29tIG91dHJhcyBhcGxpY2HDp8O1ZXMgcGFyYSBjb252ZXJzw6NvIHRleHQtdG8tc3BlZWNoIHZpYSANCitkcml2ZXIgZGUgZmFsYSBCUkxUVFkuIEVzdGUgZGlyZXTDs3JpbyBwb2RlIHNlciByZWVzY3JpdG8gY29tIG8gY29tYW5kbyAtaS4NCitOw6NvIGVzdMOhIGRpc3Bvbml2ZWwgc2UgYSBvcMOnw6NvIG5hIGNvbXBpbGHDp8OjbyBuw6NvIGZvciBlc3BlY2lmaWNhZGEgLS1kaXNhYmxlLQ0KK3NwZWVjaC1zdXBwb3J0Lg0KKyAgICAgDQorNC4zIC0gT3DDp8O1ZXMgZGUgTGluaGEgZGUgQ29tYW5kbw0KKw0KK011aXRhcyBjb25maWd1cmHDp8O1ZXMgcG9kZW0gc2VyIGV4cGxpY2l0YW1lbnRlIGVzcGVjaWZpY2FkYXMgYW8gY2hhbWFyIA0KK0JSTFRUWS4gT3MgY29tYW5kb3MgYnJsdHR5IGFjZWl0YW0gYXMgc2VndWludGVzIG9ww6fDtWVzOg0KKyANCistYWZpbGUgLS1hdHRyaWJ1dGVzLXRhYmxlPWZpbGUNCitFc3BlY2lmaWNhIGEgdGFiZWxhIGRlIGF0cmlidXRvcyAodmVqYSBzZcOnw6NvIFRhYmVsYXMgZGUgQXRyaWJ1dG9zKS4gU2UgDQordW0gY2FtaW5obyByZWxhdGl2byBmb3IgZm9ybmVjaWRvLCBlbnTDo28gZWxlIGVzdMOhIGFuY29yYWRvIGVtIA0KKy9ldGMvYnJsdHR5ICh2ZWphIGFzIG9ww6fDtWVzIGRlIGNvbXBpbGHDp8OjbyDClndpdGgtZGF0YS1kaXJlY3RvcnkgZSDClndpdGgtDQorZXhlY3V0ZS1yb290IHBhcmEgbWFpcyBkZXRhbGhlcykuIEEgZXh0ZW5zw6NvIC5hdGIgbsOjbyDDqSBuZWNlc3PDoXJpYS5WZWphIA0KK2FzIGNvbmZpZ3VyYcOnw7VlcyBkbyBhcnF1aXZvIGF0dHJpYnV0ZXMtdGFibGUgcGFyYSBhIGNvbmZpZ3VyYcOnw6NvIHBhZHLDo28gDQorZGUgcnVuLXRpbWUuIEVzdGEgY29uZmlndXJhw6fDo28gcG9kZSBzZXIgYWx0ZXJhZGEgY29tIGEgcHJlZmVyw6puY2lhIA0KK1RhYmVsYSBkZSBBdHJpYnV0b3MuICAgIA0KKw0KKy1iZHJpdmVyLC4uLnxhdXRvIC0tYnJhaWxsZS1kcml2ZXI9ZHJpdmVyLC4uLnxhdXRvDQorRXNwZWNpZmljYSBvIGRyaXZlIGRvIGRpc3BsYXkgYnJhaWxsZSAodmVqYSBzZcOnw6NvIEVzcGVjaWZpY2HDp8OjbyBkZSANCitEcml2ZXIpLiBWZWphIGFzIGNvbmZpZ3VyYcOnw7VlcyBkbyBhcnF1aXZvIGJyYWlsbGUtZHJpdmUgcGFyYSBhIA0KK2NvbmZpZ3VyYcOnw6NvIHBhZHLDo28gZGUgcnVuLXRpbWUuDQorIA0KKy1jZmlsZSAtLWNvbnRyYWN0aW9uLXRhYmxlPWZpbGUNCitFc3BlY2lmaWNhIGEgdGFiZWxhIGRlIGNvbnRyYcOnw6NvICh2ZWphIHNlw6fDo28gVGFiZWxhIGRlIENvbnRyYcOnw6NvKS4gU2UgdW0gDQorY2FtaW5obyByZWxhdGl2byBmb3IgZm9ybmVjaWRvLCBlbnTDo28gZWxlIGVzdMOhIGFuY29yYWRvIGVtIC9ldGMvYnJsdHR5IA0KKyh2ZWphIGFzIG9ww6fDtWVzIGRlIGNvbXBpbGHDp8OjbyAtLXdpdGgtZGF0YS1kaXJlY3RvcnkgZSAtLXdpdGgtZXhlY3V0ZS0NCityb290IHBhcmEgbWFpcyBkZXRhbGhlcykuIEEgZXh0ZW5zw6NvIC5jdGIgw6kgb3BjaW9uYWwuIEEgdGFiZWxhIGRlIA0KK2NvbnRyYcOnw6NvIMOpIHVzYWRvIHF1YW5kbyBvIHJlY3Vyc28gZGUgNi1wb250b3MgYnJhaWxsZSDDqSBhdGl2YWRvICh2ZWphIG8gDQorY29tYW5kbyBTSVhET1RTIGUgYSBwcmVmZXLDqm5jaWEgRXN0aWxvIGRlIFRleHRvKS4gVmVqYSBhcyBjb25maWd1cmHDp8O1ZXMgDQorZG8gYXJxdWl2byB0YWJlbGEgZGUgY29udHJhw6fDo28gcGFyYSBhIGNvbmZpZ3VyYcOnw6NvIHBhZHLDo28gZGUgcnVuLXRpbWUuIA0KK0VzdGEgY29uZmlndXJhw6fDo28gcG9kZSBzZXIgYWx0ZXJhZGEgY29tIGEgcHJlZmVyw6puY2lhIFRhYmVsYSBkZSANCitDb250cmHDp8Ojby4gRXN0YSBvcMOnw6NvIG7Do28gZXN0w6EgZGlzcG9uw612ZWwgc2UgYSBvcMOnw6NvIGRlIGNvbnN0cnXDp8OjbyAtLQ0KK2Rpc2FibGUtY29udHJhY3RlZC1icmFpbGxlIGZvaSBlc3BlY2lmaWNhZGEuDQorIA0KKy1kZGV2aWNlLC4uLiAtLWJyYWlsbGUtZGV2aWNlPWRldmljZSwuLi4NCitFc3BlY2lmaWNhIG8gZGlzcG9zaXRpdm8gcGFyYSBvIHF1YWwgbyBkaXNwbGF5IGJyYWlsbGUgZXN0w6EgbGlnYWRvICh2ZXIgDQorc2XDp8OjbyBFc3BlY2lmaWNhw6fDo28gRGlzcG9zaXRpdm8gQnJhaWxsZSkuIFZlamEgYXMgY29uZmlndXJhw6fDtWVzIGRvIA0KK2FycXVpdm8gYnJhaWxsZS1kZXZpY2UgcGFyYSBhIGNvbmZpZ3VyYcOnw6NvIHBhZHLDo28gZGUgcnVuLXRpbWUuDQorIA0KKy1lIC0tc3RhbmRhcmQtZXJyb3INCitFc2NyZXZlIG1lbnNhZ2VucyBkZSBkaXNnbsOzc3RpY28gZGUgZXJybyBwYWRyw6NvLiBPIHBhZHLDo28gw6kgZ3JhdsOhLWxvcyANCit2aWEgc3lzbG9nDQorIA0KKy1mZmlsZSAtLWNvbmZpZ3VyYXRpb24tZmlsZT1maWxlDQorRXNwZWNpZmljYSBvIGxvY2FsIGRvIGFycXVpdm8gZGUgY29uZmlndXJhw6fDo28gcXVlIHNlcsOhIHV0aWxpemFkbyBwYXJhIGEgDQorY3JpYcOnw6NvIGRhcyBjb25maWd1cmHDp8O1ZXMgcGFkcsO1ZXMgZGUgcnVuLXRpbWUuDQorDQorLWggLcKWaGVscA0KK01vc3RyYSB1bSByZXN1bW8gZGFzIG9ww6fDtWVzIGRlIGxpbmhhIGRlIGNvbWFuZG8gYWNlaXRhcyBwZWxvIEJSTFRUWSwgZSANCitkZXBvaXMgc2FpLg0KKyANCista2ZpbGUgLS1rZXktdGFibGU9ZmlsZQ0KK0VzcGVjaWZpY2EgYSB0YWJlbGEgZGUgdGVjbGFzICh2ZWphIHNlw6fDo28gS2V5IFRhYmxlcyBwcmEgZGV0YWxoZXMpLiBTZSANCit1bSBjYW1pbmhvIHJlbGF0aXZvIGZvciBmb3JuZWNpZG8sIGVudMOjbyBlbGUgZXN0w6EgYW5jb3JhZG8gZW0gDQorL2V0Yy9icmx0dHkgKHZlamEgYXMgb3DDp8O1ZXMgZGUgY29tcGlsYcOnw6NvIC0td2l0aC1kYXRhLWRpcmVjdG9yeSBlIC0tDQord2l0aC1leGVjdXRlLXJvb3QgcGFyYSBtYWlzIGRldGFsaGVzKS4gQSBleHRlbnPDo28gLmt0YiDDqSBvcGNpb25hbC4gRXN0YSANCitjb25maWd1cmHDp8OjbyBwb2RlIHNlciBhbHRlcmFkYSBjb20gYSBwcmVmZXLDqm5jaWEgVGFiZWxhIGRlIFRlbGFzLg0KKyANCistbGxldmVsIC0tbG9nLWxldmVsPWxldmVsDQorRXNwZWNpZmlxdWUgbyBsaW1pdGUgZGUgZ3JhdmlkYWRlIHBhcmEgZ2VyYcOnw6NvIGRlIG1lbnNhZ2VucyBkZSANCitkaWFnbsOzc3RpY28uIE9zIHNlZ3VpbnRlcyBuw612ZWlzIHPDo28gcmVjb25oZWNpZG9zLg0KKw0KKzANCisgICAgICBlbWVyZ8OqbmNpYQ0KKzENCisgICAgICBhbGVydGENCisyDQorICAgICAgY3LDrXRpY28NCiszDQorICAgICAgZXJybw0KKzQNCisgICAgICBhdmlzbw0KKzUNCisgICAgICBhZHZlcnTDqm5jaWENCis2DQorICAgICAgaW5mb3JtYcOnw7Vlcw0KKzcNCisgICAgICBkZWJ1Zw0KKw0KK091IG8gbsO6bWVybyBvdSBvIG5vbWUgcG9kZSBzZXIgZm9ybmVjaWRvLCBiZW0gY29tbyBvIG5vbWUgcG9kZSBzZXIgDQorYWJyZXZpYWRvLiBTZSBuw6NvIGZvciBlc3BlY2lmaWNhZG8sIGVudMOjbyBvIG7DrXZlbCBpbmZvcm1hw6fDo28gw6kgYXNzdW1pZG8gDQorKHZlamEgYSBvcMOnw6NvIC1xIHBhcmEgbWFpcyBkZXRhbGhlcykuDQorIA0KKy1tZGV2aWNlIC0tbWlkaS1kZXZpY2U9ZGV2aWNlDQorRXNwZWNpZmljYSBvIGRpc3Bvc2l0aXZvIGEgc2VyIHVzYWRvIHBhcmEgbyBNdXNpYyBJbnN0cnVtZW50IERpZ2l0YWwgDQorSW50ZXJmYWNlICh2ZXIgc2XDp8OjbyBFc3BlY2lmaWNhw6fDo28gZGUgRGlzcG9zaXRpdm9zIE1JREkpLiBWZWphIGFzIA0KK2NvbmZpZ3VyYcOnw7VlcyBkbyBhcnF1aXZvIG1pZGktZGV2aWNlIHBhcmEgYSBjb25maWd1cmHDp8OjbyBwYWRyw6NvIGRlIHJ1bi0NCit0aW1lLiBFc3RhIG9ww6fDo28gbsOjbyBlc3TDoSBkaXNwb27DrXZlbCBzZSBhIG9ww6fDo28gZGUgY29uc3RydcOnw6NvIC0tZGlzYWJsZS0NCittaWRpLXN1cHBvcnQgZm9pIGVzcGVjaWZpY2FkYS4NCisNCistbiAtLW5vLWRhZW1vbg0KK0VzcGVjaWZpY2EgcXVlIEJSTFRUWSBpcsOhIGZpY2FyIGVtIHByaW1laXJvIHBsYW5vLiBTZSBuw6NvIGZvciANCitlc3BlY2lmaWNhZG8sIGVudMOjbyBCUkxUVFkgdG9ybmEtc2UgdW0gcHJvY2Vzc28gZW0gYmFja2dyb3VuZCAoZGFlbW9uKSANCithcMOzcyBzZSBpbmljaWFsaXphw6fDo28sIG1hcyBhbnRlcyBkZSBpbmljaWFyIHF1YWxxdWVyIHVtIGRvcyBkcml2ZXJzIA0KK3NlbGVjaW9uYWRvcy4NCisgDQorLXBkZXZpY2UgLS1wY20tZGV2aWNlPWRldmljZQ0KK0VzcGVjaWZpY2EgbyBkaXNwb3NpdGl2byBhIHNlciB1c2FkbyBwYXJhIG8gw6F1ZGlvIGRpZ2l0YWwgKHZlciBzZcOnw6NvIA0KK0VzcGVjaWZpY2HDp8OjbyBkbyBEaXNwb3NpdGl2byBQQ00pLiBWZWphIGFzIGNvbmZpZ3VyYcOnw7VlcyBkbyBhcnF1aXZvIHBjbS0NCitkZXZpY2UgcGFyYSBhIGNvbmZpZ3VyYcOnw6NvIHBhZHLDo28gZGUgcnVuLXRpbWUuIEVzdGEgb3DDp8OjbyBuw6NvIGVzdGFyw6EgDQorZGlzcG9uw612ZWwgc2UgYSBvcMOnw6NvIGEgb3DDp8OjbyBkZSBjb21waWxhw6fDo28gLS1kaXNhYmxlLXBjbS1zdXBwb3J0IGZvaSANCitlc3BlY2lmaWNhZG8uDQorIA0KKy1xIMKWcXVpZXQNCitMb2cgbWVub3MgaW5mb3JtYcOnw6NvLiBFc3RhIG9ww6fDo28gYWx0ZXJhIG8gbsOtdmVsIGRlIGxvZyAodmVqYSBhIG9ww6fDo28gLWwpIA0KK3BhcmEgbm90aWNlIHNlIHF1YWxxdWVyIGRhcyBvcMOnw6NvIC12IG91IC1WIHNlamEgZXNwZWNpZmljYWRvLCBlIHBhcmEgDQord2FybmlnIGNhc28gY29udHLDoXJpby4NCisgDQorLXIgLS1yZWxlYXNlLWRldmljZQ0KK0xpYmVyYSBvIGRpc3Bvc2l0aXZvIHBhcmEgbyBxdWFsIG8gZGlzcGxheSBicmFpbGxlIGVzdMOhIGxpZ2FkbyBxdWFuZG8gYSANCit0ZWxhIG91IGphbmVsYSBhdHVhbCBuw6NvIHBvZGUgc2VyIGxpZG8uIFZlamEgYXMgY29uZmlndXJhw6fDtWVzIGRvIGFycXVpdm8gDQorcmVsZWFzZS1kZXZpY2UgcGFyYSBhIGNvbmZpZ3VyYcOnw6NvIHBhZHLDo28gZGUgcnVuLXRpbWUuDQorIA0KKy1zZHJpdmVyLC4uLnxhdXRvIC0tc3BlZWNoLWRyaXZlcj1kcml2ZXIsLi4ufGF1dG8NCitFc3BlY2lmaWNhIG8gZHJpdmVyIGRvIHNpbnRldGl6YWRvciBkZSB2b3ogKHZlciBzZcOnw6NvIEVzcGVjaWZpY2HDp8OjbyBkZSANCitEcml2ZXIpLiBWZWphIGFzIGNvbmZpZ3VyYcOnw7VlcyBkbyBhcnF1aXZvIHNwZWVjaC1kcml2ZXIgcGFyYSBhIA0KK2NvbmZpZ3VyYcOnw6NvIHBhZHLDo28gZGUgcnVuLXRpbWUuIEVzdGEgb3DDp8OjbyBuw6NvIGVzdGFyw6EgZGlzcG9uw612ZWwgc2UgYSANCitvcMOnw6NvIGRlIGNvbnN0cnXDp8OjbyAtLWRpc2FibGUtc3BlZWNoLXN1cHBvcnQgZm9pIGVzcGVjaWZpY2Fkby4NCisgDQorLXRmaWxlIC0tdGV4dC10YWJsZT1maWxlDQorRXNwZWNpZmljYSBhIHRhYmVsYSBkZSB0ZXh0byAodmVyIHNlw6fDo28gVGFiZWxhIGRlIFRleHRvKS4gU2UgdW0gY2FtaW5obyANCityZWxhdGl2byBmb3IgZm9ybmVjaWRvLCBlbnTDo28gZWxlIGVzdMOhIGFuY29yYWRvIGVtIC9ldGMvYnJsdHR5ICh2ZXIgYXMgDQorb3DDp8O1ZXMgZGUgY29uc3RydcOnw6NvIC0td2l0aC1kYXRhLWRpcmVjdG9yeSBlIC0td2l0aC1leGVjdXRlLXJvb3QgcGFyYSANCittYWlzIGRldGFsaGVzKS4gQSBleHRlbnPDo28gLnR0YiDDqSBvcGNpb25hbC4gVmVqYSBhcyBjb25maWd1cmHDp8O1ZXMgZG8gDQorYXJxdWl2byB0ZXh0LXRhYmxlIHBhcmEgYSBjb25maWd1cmHDp8OjbyBwYWRyw6NvIGRlIHJ1bi10aW1lLiBFc3RhIA0KK2NvbmZpZ3VyYcOnw6NvIHBvZGUgc2VyIGFsdGVyYWRhIGNvbSBhIHByZWZlcsOqbmNpYSBUYWJlbGEgVGV4dG8uDQorIA0KKy12IMKWdmVyaWZ5DQorTW9zdHJhciBhIHZlcnPDo28gYXR1YWwgZG8gQlJMVFRZLCBkbyBsYWRvIGRvIHNlcnZpZG9yIGRlIHN1YSBpbnRlcmZhY2UgDQorZGUgcHJvZ3JhbWHDp8OjbyBkZSBhcGxpY2F0aXZvLCBkbyBicmFpbGxlIHNlbGVjaW9uYWRvIGUgZHJpdmVycyBkZSBmYWxhLCANCitlIGRlcG9pcyBzYWkuIFNlIGEgb3DDp8Ojby1xIG7Do28gZm9yIGVzcGVjaWZpY2FkbywgZW50w6NvIHRhbWLDqW0gZXhpYmlyIG9zIA0KK3ZhbG9yZXMgZGFzIG9ww6fDtWVzIGRlcG9pcyBkZSB0b2RhcyBhcyBmb250ZXMgc2VyZW0gY29uc2lkZXJhZGFzLiBTZSBtYWlzIA0KK2RlIHVtIGRyaXZlciBicmFpbGxlICh2ZWphIGEgb3DDp8OjbyBkZSBsaW5oYSBkZSBjb21hbmRvIC1iKSBlL291IG1haXMgZGUgDQordW0gZGlzcG9zaXRpdm8gYnJhaWxlICh2ZWphIGEgb3DDp8OjbyBsaW5oYSBkZSBjb21hbmRvIC1kKSB0ZW5oYSBzaWRvIA0KK2VzcGVjaWZpY2FkbywgZW50w6NvIGEgYXV0b2RldGVjw6fDo28gZG8gZGlzcGxheSBCcmFpbGxlIMOpIHJlYWxpemFkby4gU2UgDQorbWFpcyBkZSB1bSBkcml2ZXIgZGUgZmFsYSh2ZWphIGEgb3DDp8OjbyBkZSBsaW5oYSBkZSBjb21hbmRvIC1zKSB0ZW5oYSANCitzaWRvIGVzcGVjaWZpY2FkbywgZW50w6NvIGEgYXV0b2RldGVjw6fDo28gZG8gc2ludGV0aXphZG9yIGRlIHZveiDDqSANCityZWFsaXphZGEuDQorIA0KKy14ZHJpdmVyIC0tc2NyZWVuLWRyaXZlcj1kcml2ZXINCitFc3BlY2lmaWNhIG8gZHJpdmVyIGRhIHRlbGEgKHZlciBzZcOnw6NvIERyaXZlcnMgU3Vwb3J0YWRvcyBkZSBUZWxhKS4gVmVqYSANCithcyBjb25maWd1cmHDp8O1ZXMgZG8gYXJxdWl2byBzY3JlZW4tZHJpdmVyIHBhcmEgYSBjb25maWd1cmHDp8OjbyBwYWRyw6NvIGRlIA0KK3J1bi10aW1lLg0KKyANCistQW5hbWU9dmFsdWUsLi4uIC0tYXBpLXBhcmFtZXRlcnM9bmFtZT12YWx1ZSwuLi4NCitFc3BlY2lmaWNhIG9zIHBhcsOibWV0cm9zIHBhcmEgYSBBcHBsaWNhdGlvbiBQcm9ncmFtbWluZyBJbnRlcmZhY2UuIFNlIG8gDQorbWVzbW8gcGFyw6JtZXRybyDDqSBlc3BlY2lmaWNhZG8gbWFpcyBkZSB1bWEgdmV6LCBhIHN1YSBhdHJpYnVpw6fDo28gbWFpcyBhIA0KK2RpcmVpdGEgw6kgdXNhZGEuIFBhcmEgb2J0ZXIgdW1hIGRlc2NyacOnw6NvIGRvcyBwYXLDom1ldHJvcyBhY2VpdG9zIHBlbGEgDQoraW50ZXJmYWNlLCBjb25zdWx0ZSBvIG1hbnVhbCBkZSByZWZlcsOqbmNpYSBCcmxBUEkuIFZlamEgYXMgY29uZmlndXJhw6fDtWVzIA0KK2RvIGFycXVpdm8gYXBpLXBhcmFtZXRlcnMgcGFyYSBhIGNvbmZpZ3VyYcOnw6NvIHBhZHLDo28gZGUgcnVuLXRpbWUuDQorDQorLUJbZHJpdmVyOl1uYW1lPXZhbHVlLC4uLiAtLWJyYWlsbGUtcGFyYW1ldGVycz1bZHJpdmVyOl1uYW1lPXZhbHVlLC4uLg0KK0VzcGVjaWZpY2Egb3MgcGFyw6JtZXRyb3MgcGFyYSBvcyBkcml2ZXJzIGRvIGRpc3BsYXkgYnJhaWxsZS4gU2UgbyBtZXNtbyANCitwYXLDom1ldHJvIMOpIGVzcGVjaWZpY2FkbyBtYWlzIGRlIHVtYSB2ZXosIGEgc3VhIGF0cmlidWnDp8OjbyBtYWlzIGEgDQorZGlyZWl0YSDDqSB1c2FkYS4gU2UgdW0gbm9tZSBkZSBwYXLDom1ldHJvIMOpIHF1YWxpZmljYWRvIHBvciB1bSBkcml2ZXIgDQorKGNvbnN1bHRlIGEgc2XDp8OjbyBDw7NkaWdvcyBkZSBJZGVudGlmaWNhw6fDo28gZGUgRHJpdmVycyksIGVudMOjbyBlc3NhIA0KK2NvbmZpZ3VyYcOnw6NvIHPDsyBzZSBhcGxpY2EgYW8gZHJpdmUsIHNlIG7Do28gw6ksIGVudMOjbyBzZSBhcGxpY2EgYSB0b2RvcyBvcyANCitkcml2ZXJzLiBQYXJhIG9idGVyIHVtYSBkZXNjcmnDp8OjbyBkb3MgcGFyw6JtZXRyb3MgYWNlaXRvcyBwb3IgdW0gZHJpdmVyIA0KK2VzcGVjw61maWNvLCBjb25zdWx0ZSBhIGRvY3VtZW50YcOnw6NvIGRvIGRyaXZlci4gVmVqYSBhcyBjb25maWd1cmHDp8O1ZXMgZG8gDQorYXJxdWl2byBicmFpbGxlLXBhcmFtZXRlcnMgcGFyYSBhIGNvbmZpZ3VyYcOnw6NvIHBhZHLDo28gZGUgcnVuLXRpbWUuDQorIA0KKy1FIC0tZW52aXJvbm1lbnQtdmFyaWFibGVzDQorUmVjb25oZWNlIGFzIHZhcmnDoXZlaXMgZGUgYW1iaWVudGUgcGFyYSBkZXRlcm1pbmFyIGFzIGNvbmZpZ3VyYcOnw7VlcyANCitwYWRyw6NvIHBhcmEgYXMgb3DDp8O1ZXMgZGUgbGluaGEgZGUgY29tYW5kbyBuw6NvIGVzcGVjaWZpY2FkYSAodmVyIHNlw6fDo28gDQorT3DDp8O1ZXMgZGUgTGluaGEgZGUgQ29tYW5kbykuIFNlIGVzdGEgb3DDp8OjbyBmb3IgZXNwZWNpZmljYWRhLCBlIHNlIGEgDQordmFyacOhdmVsIGRlIGFtYmllbnRlIGFzc29jaWFkb3MgYSB1bWEgb3DDp8OjbyBuw6NvIGVzcGVjaWZpY2FkYSDDqSBkZWZpbmlkYSwgDQorZW50w6NvIG8gdmFsb3IgZGEgdmFyacOhdmVsIGRlIGFtYmllbnRlIMOpIHV0aWxpemFkby4gT3Mgbm9tZXMgZGVzc2FzIA0KK3ZhcmnDoXZlaXMgZGUgYW1iaWVudGUgc8OjbyBiYXNlYWRvcyBlbSBub21lcyBncmFuZGVzIGRhcyBvcMOnw7VlcyBxdWUgDQorY29ycmVzcG9uZGVtIGE6DQorDQorPwlUb2RhcyBhcyBsZXRyYXMgc8OjbyBlbSBtYWnDunNjdWxhcy4NCis/CU9zIHVuZGVyc2NvcmVzIChfKSBzw6NvIHV0aWxpemFkb3MgZW0gdmV6IGRlIHNpbmFpcyBkZSBtZW5vcyAoLSkuDQorPwlPIHByZWZpeG8gQlJMVFRZXyDDqSBhZGljaW9uYWRvLg0KKw0KK0VzdGEgb3DDp8OjbyDDqSBwYXJ0aWN1bGFybWVudGUgw7p0aWwgbm8gc2lzdGVtYSBvcGVyYWNpb25hbCBMaW51eCwgcG9pcyANCitwZXJtaXRlIGNvbmZpZ3VyYcOnw6NvIHBhZHLDo28gYSBzZXIgcGFzc2FkbyBwYXJhIEJSTFRUWSBhdHJhdsOpcyBkZSANCitwYXLDom1ldHJvcyBkZSBpbmljaWFsaXphw6fDo28uIEFzIHNlZ3VpbnRlcyB2YXJpw6F2ZWlzIGRlIGFtYmllbnRlIHPDo28gDQorc3Vwb3J0YWRhczoNCisgDQorQlJMVFRZX0FQSV9QQVJBTUVURVJTDQorUGFyw6JtZXRyb3MgcGFyYSBhIEFwcGxpY2F0aW9uIFByb2dyYW1taW5nIEludGVyZmFjZSAodmVqYSBhIG9ww6fDo28gZGUgDQorbGluaGEgZGUgY29tYW5kbyAtQSkuDQorIA0KK0JSTFRUWV9BVFRSSUJVVEVTX1RBQkxFDQorQSB0YWJlbGEgZGUgYXRyaWJ1dG9zICh2ZWphIGEgb3DDp8OjbyBkZSBsaW5oYSBkZSBjb21hbmRvIC1hKS4NCisgICAgICANCitCUkxUVFlfQlJBSUxMRV9ERVZJQ0UNCitPIGRpc3Bvc2l0aXZvIGRvIGRpc3BsYXkgYnJhaWxsZSAodmVqYSBhIG9ww6fDo28gZGUgbGluaGEgZGUgY29tYW5kbyAtZCkuDQorIA0KK0JSTFRUWV9CUkFJTExFX0RSSVZFUg0KK08gZHJpdmVyIGRvIGRpc3BsYXkgYnJhaWxsZSAodmVqYSBhIG9ww6fDo28gZGUgbGluaGEgZGUgY29tYW5kbyAtYikuDQorIA0KK0JSTFRUWV9CUkFJTExFX1BBUkFNRVRFUlMNCitQYXLDom1ldHJvcyBwYXJhIG8gZHJpdmVyIGRvIGRpc3BsYXkgYnJhaWxsZSAodmVqYSBhIG9ww6fDo28gZGUgbGluaGEgZGUgDQorY29tYW5kbyAtQikuDQorIA0KK0JSTFRUWV9DT05GSUdVUkFUSU9OX0ZJTEUNCitPIGFycXVpdm8gZGUgY29uZmlndXJhw6fDo28gKHZlamEgYSBvcMOnw6NvIGRlIGxpbmhhIGRlIGNvbWFuZG8gLWYpLg0KKyANCitCUkxUVFlfQ09OVFJBQ1RJT05fVEFCTEUNCitBIHRhYmVsYSBkZSBjb250cmHDp8OjbyAodmVqYSBhIG9ww6fDo28gZGUgbGluaGEgZGUgY29tYW5kbyAtYykuDQorIA0KK0JSTFRUWV9LRVlfVEFCTEUNCitBIHRhYmVsYSBkZSB0ZWNsYXMgKHZlamEgYSBvcMOnw6NvIGRlIGxpbmhhIGRlIGNvbWFuZG8gLWspLg0KKyANCitCUkxUVFlfS0VZQk9BUkRfUFJPUEVSVElFUw0KK0FzIHByb3ByaWVkYWRlcyBkbyB0ZWNsYWRvICh2ZWphIGEgb3DDp8OjbyBkZSBsaW5oYSBkZSBjb21hbmRvIC1LKS4NCisgDQorQlJMVFRZX01JRElfREVWSUNFDQorTyBkaXNwb3NpdGl2byBNdXNpY2FsIEluc3RydW1lbnQgRGlnaXRhbCBJbnRlcmZhY2UgKHZlamEgYSBvcMOnw6NvIGRlIA0KK2xpbmhhIGRlIGNvbWFuZG8gLW0pLg0KKyANCitCUkxUVFlfUENNX0RFVklDRQ0KK08gZGlzcG9zaXRpdm8gZGUgYXVkaW8gZGlnaXRhbCAodmVqYSBhIG9ww6fDo28gZGUgbGluaGEgZGUgY29tYW5kbyAtcCkuDQorIA0KK0JSTFRUWV9SRUxFQVNFX0RFVklDRQ0KK1F1ZXJlbmRvIG91IG7Do28gbGliZXJhIG8gZGlzcG9zaXRpdm8gcGFyYSBvIHF1YWwgbyBkaXNwbGF5IGJyYWlsbGUgZXN0w6EgDQorbGlnYWRvIHF1YW5kbyBhIHRlbGEgb3UgamFuZWxhIGF0dWFsIG7Do28gcG9kZSBzZXIgbGlkbyAodmVqYSBhIG9ww6fDo28gZGUgDQorbGluaGEgZGUgY29tYW5kbyAtcikuDQorIA0KK0JSTFRUWV9TQ1JFRU5fUEFSQU1FVEVSUw0KK1BhcsOibWVudHJvcyBwYXJhIG8gZHJpdmVyIGRhIHRlbGEgKHZlamEgYSBvcMOnw6NvIGRlIGxpbmhhIGRlIGNvbWFuZG8gLVgpLg0KKyANCitCUkxUVFlfU1BFRUNIX0RSSVZFUg0KK08gZHJpdmVyIGRvIHNpbnRldGl6YWRvciBkZSB2b3ogKHZlamEgYSBvcMOnw6NvIGRlIGxpbmhhIGRlIGNvbWFuZG8gLXMpLg0KKyANCitCUkxUVFlfU1BFRUNIX0ZJRk8NCitBIHBhc3NhZ2VtIEZJRk8gZGEgdm96ICggdmVqYSBhIG9ww6fDo28gZGUgbGluaGEgZGUgY29tYW5kbyAtRikuDQorIA0KK0JSTFRUWV9TUEVFQ0hfUEFSQU1FVEVSUw0KK1BhcsOibWV0cm9zIHBhcmEgbyBkcml2ZXIgZG8gc2ludGV0aXphZG8gZGUgdm96ICggdmVqYSBhIG9ww6fDo28gZGUgbGluaGEgDQorZGUgY29tYW5kbyAtUykuDQorIA0KK0JSTFRUWV9URVhUX1RBQkxFDQorQSB0YWJlbGEgZGUgdGV4dG8gKCB2ZWphIGEgb3DDp8OjbyBkZSBsaW5oYSBkZSBjb21hbmRvIC10KS4NCisgDQorLUZmaWxlIC0tc3BlZWNoLWZpZm89ZmlsZQ0KK0VzcGVjaWZpY2EgYSBGSUZPICh1bSBhcnF1aXZvIGVzcGVjaWFsIHF1ZSBmdW5jaW9uYSBjb21vIHVtIHR1Ym8pIHF1ZSDDqSANCit1c2FkbyBwb3Igb3V0cmFzIGFwbGljYcOnw7VlcyBxdWUgZGVzZWphbSB0ZXIgYWNlc3NvIGFvIGRyaXZlciBCUkxUVFkgZGEgDQorZmFsYS4gU2UgbsOjbyDDqSBlc3BlY2lmaWNhZG8sIEZJRk8gbsOjbyDDqSBjcmlhZG8uIFZlamEgYXMgY29uZmlndXJhw6fDtWVzIGRvIA0KK2FycXVpdm8gc3BlZWNoLWZpZm8gcGFyYSBhIGNvbmZpZ3VyYcOnw6NvIHBhZHLDo28gZGUgcnVuLXRpbWUuIEVzdGEgb3DDp8OjbyANCituw6NvIGVzdGFyw6EgZGlzcG9uw612ZWwgc2UgYSBvcMOnw6NvIGRlIGNvbnN0cnXDp8OjbyAtLWRpc2FibGUtc3BlZWNoLXN1cHBvcnQgDQorIGZvaSBlc3BlY2lmaWNhZGEuDQorIA0KKy1pIC0taW5zdGFsbC1zZXJ2aWNlDQorSW5zdGFsYSBvIEJSTFRUWSBjb21vIG8gc2VydmnDp28gQnJsQVBJLiBJc3NvIHNpZ25pZmljYSBxdWU6DQorDQorICAgICAgwrcgQlJMVFRZIHNlcsOhIGluaWNpYWRvIGF1dG9tYXRpY2FtZW50ZSBxdWFuZG8gbyBzaXN0ZW1hIMOpIA0KK2luaWNpYWxpemFkby4NCisNCisgICAgICDCtyBBcGxpY2HDp8O1ZXMgcG9kZW0gc2FiZXIgcXVlIHVtIHNlcnZpZG9yIEJybEFQSSBlc3TDoSBzZW5kbyANCitleGVjdXRhZG8uDQorDQorRXN0YSBvcMOnw6NvIHPDsyDDqSBzdXBvcnRhZG8gbmEgcGxhdGFmb3JtYSBXaW5kb3dzLg0KKyANCistS25hbWU9dmFsdWUsLi4uIC0ta2V5Ym9hcmQtcHJvcGVydGllcz1uYW1lPXZhbHVlLC4uLg0KK0VzcGVjaWZpY2EgYXMgcHJvcHJpZWRhZGVzIGRvIHRlY2xhZG8ocykgYSBzZXIgbW9uaXRvcmFkby4gU2UgYSBtZXNtYSANCitwcm9wcmllZGFkZSBmb3IgZXNwZWNpZmljYWRhIG1haXMgZGUgdW1hIHZleiwgYSBzdWEgYXRyaWJ1acOnw6NvIG1haXMgYSANCitkaXJlaXRhIMOpIHVzYWRhLiBDb25zdWx0ZSBhIHNlw6fDo28gS2V5Ym9hcmQgUHJwZXJ0aWVzIHBhcmEgb2J0ZXIgdW1hIA0KK2xpc3RhIGRhcyBwcm9wcmllZGFkZXMgcXVlIHBvZGVtIHNlciBlc3BlY2lmaWNhZGFzLiBWZWphIGFzIA0KK2NvbmZpZ3VyYcOnw7VlcyBkbyBhcnF1aXZvIGtleWJvYXJkLXByb3BlcnRpZXMgcGFyYSBhIGNvbmZpZ3VyYcOnw6NvIHBhZHLDo28gDQorZGUgcnVuLXRpbWUuDQorIA0KKy1NY3NlY3MgLS1tZXNzYWdlLWRlbGF5PWNzZWNzDQorRXNwZWNpZmljYSBhIHF1YW50aWRhZGUgZGUgdGVtcG8gKGVtIGNlbnTDqXNpbW9zIGRlIHNlZ3VuZG8pIHF1ZSBvIEJSTFRUWSANCittYW50w6ltIHNldSBwcsOzcHJpbyBnZXJhZG9yIGRlIG1lbnNhZ2VucyBpbnRlcm5hbWVudGUgbm8gZGlzcGxheSBicmFpbGxlLiANCitTZSBuw6NvIGZvciBlc3BlY2lmaWNhZG8sIGVudMOjbyA0MDAgKDQgc2VndW5kb3MpIMOpIGFzc3VtaWRhLg0KKw0KKy1OIC0tbm8tYXBpDQorRGVzYXRpdmEgYSBpbnRlcmZhY2UgZGUgcHJvZ3JhbWHDp8OjbyBkZSBhcGxpY2F0aXZvLg0KKyANCistUGZpbGUgLS1waWQtZmlsZT1maWxlDQorRXNwZWNpZmljYSBvIGFycXVpdm8gb25kZSBvIEJSTFRUWSBlc2NyZXZlIG8gc2V1IGlkZW50aWZpY2Fkb3IgZGUgDQorcHJvY2Vzc28gKFBJRCkuIFNlIG7Do28gZXNwZWNpZmljYWRvLCBCUkxUVFkgbsOjbyBlc2NyZXZlIG8gc2V1IHByb2Nlc3NvIA0KK2RlIGlkZW50aWZpY2HDp8OjbyBlbSBxdWFscXVlciBsdWdhci4NCisgDQorLVIgLS1yZW1vdmUtc2VydmljZQ0KK1JlbW92ZSBvIHNlcnZpw6dvIEJybEFQSS4gSXNzbyBzaWduaWZpY2EgcXVlOg0KKw0KK8K3IEJSTFRUWSBuw6NvIHNlcsOhIGluaWNpYWRvIGF1dG9tYXRpY2FtZW50ZSBxdWFuZG8gbyBzaXN0ZW1hIMOpIA0KK2luaWNpYWxpemFkby4NCivCtyBBcGxpY2HDp8O1ZXMgcG9kZW0gc2FiZXIgcXVlIG5lbmh1bSBzZXJ2aWRvciBCcmxBUEkgZXN0w6Egc2VuZG8gDQorZXhlY3V0YWRvLg0KKw0KK0VzdGEgb3DDp8OjbyBzw7Mgw6kgc3Vwb3J0YWRvIG5hIHBsYXRhZm9ybWEgV2luZG93cy4NCisgDQorLVNbZHJpdmVyOl1uYW1lPXZhbHVlLC4uLiAtLXNwZWVjaC1wYXJhbWV0ZXJzPVtkcml2ZXI6XW5hbWU9dmFsdWUsLi4uDQorRXNwZWNpZmljYSBvcyBwYXLDom1ldHJvcyBwYXJhIG9zIGRyaXZlcnMgZG8gc2ludGV0aXphZG9yIGRlIHZvei4gU2UgbyANCittZXNtbyBwYXLDom1ldHJvIMOpIGVzcGVjaWZpY2FkbyBtYWlzIGRlIHVtYSB2ZXosIGEgc3VhIGF0cmlidWnDp8OjbyBtYWlzIGEgDQorZGlyZWl0YSDDqSB1c2FkYS4gU2UgdW0gbm9tZSBkZSBwYXLDom1ldHJvIMOpIHF1YWxpZmljYWRvIHBvciB1bSBkcml2ZXIgDQorKGNvbnN1bHRlIGEgc2XDp8OjbyBDw7NkaWdvIGRlIElkZW50aWZpY2HDp8OjbyBkZSBEcml2ZXJzKSwgZW50w6NvIGVzc2EgDQorY29uZmlndXJhw6fDo28gc8OzIHNlIGFwbGljYSBhbyBkcml2ZXIsIHNlIG7Do28gc2UgYXBsaWNhIGEgdG9kb3Mgb3MgDQorZHJpdmVycy4gUGFyYSBvYnRlciB1bWEgZGVzY3Jpw6fDo28gZG9zIHBhcsOibWV0cm9zIGFjZWl0b3MgcG9yIHVtIGRyaXZlciANCitlc3BlY8OtZmljbywgY29uc3VsdGUgYSBkb2N1bWVudGHDp8OjbyBkbyBkcml2ZXIuIFZlamEgYXMgY29uZmlndXJhw6fDtWVzIGRvIA0KK2FycXVpdm8gc3BlZWNoLXBhcmFtZXRlcnMgcGFyYSBhIGNvbmZpZ3VyYcOnw6NvIHBhZHLDo28gZGUgcnVuLXRpbWUuDQorDQorLVVjc2VjcyAtLXVwZGF0ZS1pbnRlcnZhbD1jc2Vjcw0KK0VzcGVjaWZpY2EgbyBpbnRlcnZhbG8gKGVtIGNlbnTDqXNpbW9zIGRlIHNlZ3VuZG8pIGVtIHF1ZSBhIGphbmVsYSBkbyANCiticmFpbGxlIMOpIGF0dWFsaXphZGEgY29tIG8gbm92byBjb250ZcO6ZG8gZGEgdGVsYS4gU2UgbsOjbyBmb3IgDQorZXNwZWNpZmljYWRvLCBlbnTDo28sIDQgKDQwIG1pbGlzZWd1bmRvcykgw6kgYXNzdW1pZG8uDQorIA0KKy1WIC0tdmVyc2lvbg0KK01vc3RyYSBhIHZlcnPDo28gYXR1YWwgZG8gQlJMVFRZLCBkbyBsYWRvIGRvIHNlcnZpZG9yIGRlIHN1YSBpbnRlcmZhY2UgZGUgDQorcHJvZ3JhbWHDp8OjbyBkZSBhcGxpY2F0aXZvLCBlIGRvcyBkcml2ZXJzIHF1ZSBmb3JhbSBsaWdhZG9zIGFvIHNldSANCitiaW7DoXJpbywgZSBkZXBvaXMgc2FpLiBTZSBhIG9ww6fDo28tcSBuw6NvIGZvciBlc3BlY2lmaWNhZG8sIGVudMOjbyB0YW1iw6ltIA0KK2V4aWJpciBpbmZvcm1hw6fDtWVzIGRlIGRpcmVpdG9zIGF1dG9yYWlzLg0KKyANCistWFtkcml2ZXI6XW5hbWU9dmFsdWUsLi4uIC0tc2NyZWVuLXBhcmFtZXRlcnM9W2RyaXZlcjpdbmFtZT12YWx1ZSwuLi4NCitFc3BlY2lmaWNhIG9zIHBhcsOibWV0cm9zIHBhcmEgb3MgZHJpdmVycyBkYSB0ZWxhLiBTZSBvIG1lc21vIHBhcsOibWV0cm8gw6kgDQorZXNwZWNpZmljYWRvIG1haXMgZGUgdW1hIHZleiwgYSBzdWEgYXRyaWJ1acOnw6NvIG1haXMgYSBkaXJlaXRhIMOpIHVzYWRhLiANCitTZSB1bSBub21lIGRlIHBhcsOibWV0cm8gw6kgcXVhbGlmaWNhZG8gcG9yIHVtIGRyaXZlciAoY29uc3VsdGUgYSBzZcOnw6NvIA0KK0RyaXZlcnMgU3Vwb3J0YWRvcyBkZSBUZWxhKSwgZW50w6NvIGVzc2EgY29uZmlndXJhw6fDo28gc8OzIHNlIGFwbGljYSBhIGVzc2UgDQorZHJpdmVyLCBzZSBuw6NvIMOpLCBlbnTDo28gc2UgYXBsaWNhIGEgdG9kb3Mgb3MgZHJpdmVycy4gUGFyYSBvYnRlciB1bWEgDQorZGVzY3Jpw6fDo28gZG9zIHBhcsOibWV0cm9zIGFjZWl0b3MgcG9yIHVtIGRyaXZlciBlc3BlY8OtZmljbywgY29uc3VsdGUgYSANCitkb2N1bWVudGHDp8OjbyBkbyBkcml2ZXIuIFZlamEgYXMgY29uZmlndXJhw6fDtWVzIGRvIGFycXVpdm8gc2NyZWVuLQ0KK3BhcmFtZXRlcnMgcGFyYSBhIGNvbmZpZ3VyYcOnw6NvIHBhZHLDo28gZGUgcnVuLXRpbWUuDQorDQorNS4gRGVzY3Jpw6fDtWVzIGRhcyBDYXJhY3RlcsOtc3RpY2FzDQorDQorNS4xIEN1cnNvciBkZSByb3RlYW1lbnRvDQorIA0KK0FvIG1vdmVyIGEgamFuZWxhIGRlIEJyYWlsbGUgZW0gdG9ybm8gZGEgdGVsYSwgcGFyYSBhbsOhbGlzZSBkbyB0ZXh0bywgDQorcG9yIGV4ZW1wbG8sIGVtIHVtIGVkaXRvciwgbXVpdGFzIHZlemVzIHZvY8OqIHByZWNpc2EgbGV2YXIgbyBjdXJzb3IgYXTDqSANCit1bSBjYXLDoWN0ZXIgZXNwZWNpZmljbyBkZW50cm8gZGEgamFuZWxhIGRvIGJyYWlsbGUuIFZvY8OqIHByb3ZhdmVsbWVudGUgDQordmFpIGFjaGFyIHF1ZSBpc3NvIHVtYSB0YXJlZmEgYmFzdGFudGUgZGlmw61jaWwgcGFyYSB1bSBuw7ptZXJvIGRlIHJhesO1ZXMuIA0KK1VtYSBkZWxhcyDDqSBxdWUgdm9jw6ogcG9kZSBuw6NvIHNhYmVyIG9uZGUgZXN0w6EgbyBjdXJzb3IsIGUgcXVlIHZvY8OqIHBvZGUgDQorcGVyZGVyIHNldSBsdWdhciBhbyB0ZW50YXIgZW5jb250csOhLWxvLiBPdXRyYSDDqSBxdWUgbyBjdXJzb3IgcG9kZSBtb3ZlciANCitpbXByZXZpc2l2ZWxtZW50ZSBxdWFuZG8gYXMgc2V0YXMgZm9yZW0gcHJlc3Npb25hZGFzIChhbGd1bnMgZWRpdG9yZXMsIA0KK3BvciBleGVtcGxvLCBuw6NvIHBlcm1pdGVtIHF1ZSBvIGN1cnNvciBzZWphIG1haXMgZGlyZWl0byBhbyBmaW0gZGEgDQorbGluaGEpLiBDdXJzb3Igcm90ZWFtZW50byBmb3JuZWNlIGFwZW5hcyBlc3NhIGNhcGFjaWRhZGUgZGUgc2FiZXIgb25kZSANCitlc3TDoSBvIGN1cnNvciwgYXRyYXbDqXMgZGEgc2ltdWxhw6fDo28gZGFzIHByZW5zYXMgbWVzbWEgc2V0YS1jaGF2ZSBxdWUgDQordm9jw6ogdGVtIHF1ZSBkaWdpdGFyIG1hbnVhbG1lbnRlLCBlIHBlbG8gYWNvbXBhbmhhbWVudG8gZG8gcHJvZ3Jlc3NvIGRvIA0KK2N1cnNvciBxdWUgc2UgbW92ZS4gDQorDQorQWxndW5zIGRpc3BsYXlzIGJyYWlsbGUgdMOqbSB1bSBib3TDo28sIGNvbmhlY2lkbyBjb21vIHVtYSB0ZWNsYSBkZSANCitjdXJzb3IsIGFjaW1hIGRlIGNhZGEgY8OpbHVsYS4gRXNzYXMgY2hhdmVzIHVzYW0gbyBjb21hbmRvIFJPVVRFIHBhcmEgDQorZW5jYW1pbmhhciBvIGN1cnNvciBwYXJhIG8gbG9jYWwgZGVzZWphZG8uIA0KKyANCitDdXJzb3IgZGUgcm90ZWFtZW50byDDqSBtdWl0byBjb252ZW5pZW50ZSBlIGVmaWNheiwgcG9yw6ltIG7Do28gdG90YWxtZW50ZSANCitjb25macOhdmVsLiBVbWEgcmF6w6NvIHBhcmEgaXNzbyDDqSBxdWUgYSBzdWEgaW1wbGVtZW50YcOnw6NvIGF0dWFsIGFzc3VtZSANCitWVDEwMCBjdXJzb3Igc2Vxw7zDqm5jaWFzIGRlIGVzY2FwZSBjaGF2ZS4gT3V0cmEgw6kgcXVlIGFsZ3VtYXMgYXBsaWNhw6fDtWVzIA0KK2ZhemVtIGNvaXNhcyBmb3JhIGRvIHBhZHLDo28gZW0gcmVzcG9zdGEgYW8gZGV0ZWN0YXIgcXVlIHVtYSB0ZWNsYSBkbyANCitjdXJzb3IgZm9pIHByZXNzaW9uYWRvLiBVbSBwZXF1ZW5vIHByb2JsZW1hIGVuY29udHJhZG8gZGVudHJvIGRlIGFsZ3VucyANCitlZGl0b3JlcyAoY29tbyB2aSksIGNvbW8gasOhIG1lbmNpb25hZG8gYWNpbWEsIMOpIHF1ZSBlbGVzIGpvZ2FtIGVtIGFsZ3VtIA0KK21vdmltZW50byBpbXByZXZpc8OtdmVsIGhvcml6b250YWwgcXVhbmRvIG8gbW92aW1lbnRvIHZlcnRpY2FsIMOpIA0KK3NvbGljaXRhZG8gcG9ycXVlIGVsZXMgbsOjbyBwZXJtaXRlbSBxdWUgbyBjdXJzb3IgZmlxdWVtIMOgIGRpcmVpdGEgZG8gDQorZmluYWwgZGUgdW1hIGxpbmhhIC4gVW0gZG9zIHByaW5jaXBhaXMgcHJvYmxlbWFzIGVuY29udHJhZG9zIGRlbnRybyBkZSANCithbGd1bnMgbmF2ZWdhZG9yZXMgd2ViIChjb21vIG8gbHlueCkgw6kgcXVlIGFzIHRlY2xhcyBkZSBzZXRhIHBhcmEgDQorYmFpeG8vY2ltYSBzw6NvIHVzYWRhcyBwYXJhIG1vdmVyIGVudHJlIG9zIGxpbmtzIChxdWUgcG9kZW0gc2FsdGFyIGxpbmhhcyANCitlIC8gb3UgbW92ZXIgbyBjdXJzb3IgaG9yaXpvbnRhbG1lbnRlLCBtYXMgcXVlIHJhcmFtZW50ZSBtb3ZlIG8gY3Vyc29yIA0KK3VtYSBsaW5oYSBuYSBkaXJlw6fDo28gZGVzZWphZGEpLCBlIHF1ZSBhIGVzcXVlcmRhIGUgdGVjbGFzIGRlIHNldGEgcGFyYSBhIA0KK2RpcmVpdGEgc8OjbyB1c2Fkb3MgcGFyYSBzZWxlY2lvbmFyIGFzIGxpZ2HDp8O1ZXMgKHF1ZSBuw6NvIHRlbSANCithYnNvbHV0YW1lbnRlIG5hZGEgYSB2ZXIgY29tIHF1YWxxdWVyIGZvcm1hIGRlIG1vdmltZW50byBkbyBjdXJzb3IgcXVlIA0KK3NlamEsIGUgcXVlIGF0w6kgbXVkYSB0b3RhbG1lbnRlIG8gY29udGXDumRvIGRhIHRlbGEpLiANCisgDQorQ3Vyc29yIGRlIHJvdGVhbWVudG8gbsOjbyBmdW5jaW9uYSBtdWl0byBiZW0gZW0gdW0gc2lzdGVtYSBtdWl0byANCitjYXJyZWdhZG8sIGUgZGVmaW5pdGl2YW1lbnRlIG7Do28gZnVuY2lvbmEgbXVpdG8gYmVtIGFvIHRyYWJhbGhhciBlbSB1bSANCitzaXN0ZW1hIHJlbW90byBhdHJhdsOpcyBkZSB1bSBsaW5rIGxlbnRvLiBJc3RvIMOpIGFzc2ltIHBvcnF1ZSBkZSB0b2RhcyBhcyANCit2ZXJpZmljYcOnw7VlcyBxdWUgZGV2ZW0gc2VyIGZlaXRvcyBhbyBsb25nbyBkbyBjYW1pbmhvLCBhIGZpbSBkZSBsaWRhciANCitjb20gbyBtb3ZpbWVudG8gZG8gY3Vyc29yIGltcHJldmlzw612ZWwsIGEgZmltIGRlIGFzc2VndXJhciBxdWUgcXVhbHF1ZXIgDQorZXJybyB0ZW0gcGVsbyBtZW5vcyB1bWEgY2hhbmNlIGRlIGx1dGFyIHBhcmEgc2VyIGRlc2ZlaXRvLiBNZXNtbyBCUkxUVFkgDQordGVudGEgc2VyIGJhc3RhbnRlIGludGVsaWdlbnRlLCBhaW5kYSBkZXZlIGVzc2VuY2lhbG1lbnRlIGVzcGVyYXIgcGFyYSANCit2ZXIgbyBxdWUgYWNvbnRlY2UgYXDDs3MgY2FkYSBwcmVzc2lvbmFtZW50byBkYSBzZXRhLWNoYXZlLiANCisgDQorVW1hIHZleiBxdWUgdW1hIHNvbGljaXRhw6fDo28gZGUgY3Vyc29yIGRlIHJvdGVhbWVudG8gZm9pIGZlaXRhLCBCUkxUVFkgDQorY29udGludWEgdGVudGFuZG8gZW5jYW1pbmhhciBvIGN1cnNvciBwYXJhIG8gbG9jYWwgcHJldGVuZGlkbywgYXTDqSB1bSANCit0ZW1wbyBsaW1pdGUgZGUgZXhwaXJhw6fDo28gYW50ZXMgcXVlIG8gY3Vyc29yIGFsY2Fuw6dhIGVzc2EgbG9jYWxpemHDp8OjbywgbyANCitjdXJzb3IgcGFyZWNlIGVzdGFyIHNlIG1vdmVuZG8gbmEgZGlyZcOnw6NvIGVycmFkYSwgb3Ugc2UgbXVkYXIgcGFyYSB1bSANCit0ZXJtaW5hbCB2aXJ0dWFsIGRpZmVyZW50ZS4gVW1hIHRlbnRhdGl2YSDDqSBmZWl0YSBwYXJhIHVzYXIgbyBtb3ZpbWVudG8gDQordmVydGljYWwgcGFyYSB0cmF6ZXIgbyBjdXJzb3IgcGFyYSBhIGxpbmhhIGRpcmVpdGEsIGUsIHNlIGVzc2EgZm9yIGJlbSANCitzdWNlZGlkYSwgZXNzYSB0ZW50YXRpdmEgw6kgZmVpdGEsIGVudMOjbyB1c2EgbyBtb3ZpbWVudG8gaG9yaXpvbnRhbCBwYXJhIA0KK3RyYXplciBvIGN1cnNvciBwYXJhIGEgY29sdW5hIGRhIGRpcmVpdGEuIFNlIG91dHJhIHNvbGljaXRhw6fDo28gw6kgZmVpdGEgDQorZW5xdWFudG8gYWluZGEgc2UgZXN0w6EgZW0gYW5kYW1lbnRvLCBlbSBzZWd1aWRhLCBhIHByaW1laXJhIMOpIGFudWxhZGEgZSANCitvIHNlZ3VuZG8gw6kgaW5pY2lhZGEuIA0KKyANCitVbSBjdXJzb3IgbWFpcyBzZWd1cm8sIHBvcsOpbSBtZW5vcyBwb3RlbnRlIGRlIHJvdGVhbWVudG8sIENTUkpNUF9WRVJULCANCit1c2EgYXBlbmFzIG8gbW92aW1lbnRvIHZlcnRpY2FsIHBhcmEgdHJhemVyIG8gY3Vyc29yIHBhcmEgcXVhbHF1ZXIgbHVnYXIgDQorbm8gdG9wIGRhIGxpbmhhIGRhIGphbmVsYSBicmFpbGxlLiDDiSBlc3BlY2lhbG1lbnRlIMO6dGlsIGVtIHVtIGNvbmp1bnRvIA0KK2NvbSBhcyBhcGxpY2HDp8O1ZXMgKGNvbW8gbHlueCkgb25kZSBvIG1vdmltZW50byBkbyBjdXJzb3IgaG9yaXpvbnRhbCANCitudW5jYSBkZXZlIHNlciB0ZW50YWRvLg0KKw0KKzUuMiBDb3BpYXIgZSBDb2xhcg0KKyANCitFc3RlIHJlY3Vyc28gcGVybWl0ZSBxdWUgdm9jw6ogcGVndWUgYWxndW0gdGV4dG8gcXVlIGrDoSBlc3TDoSBuYSB0ZWxhIGUgDQorZGlnaXTDoS1sYSBuYSBwb3Npw6fDo28gYXR1YWwgZG8gY3Vyc29yLiBVc2FuZG8gZWxlIGVjb25vbWl6YSB0ZW1wbyBlIGV2aXRhIA0KK2Vycm9zIHF1YW5kbyB1bWEgcGXDp2EgbG9uZ2EgZS9vdSBjb21wbGljYWRhcyBkbyB0ZXh0byBwcmVjaXNhIHNlciANCitjb3BpYWRvLCBlIG1lc21vIHF1YW5kbyBhIG1lc21hIHBlw6dhIGN1cnRhIGUgc2ltcGxlcyBkbyB0ZXh0byBwcmVjaXNhIA0KK3NlciBjb3BpYWRvIG11aXRhcyB2ZXplcy4gw4kgcGFydGljdWxhcm1lbnRlIMO6dGlsIHBhcmEgY29pc2FzIGNvbW8gbm9tZXMgDQorZGUgYXJxdWl2byBsb25nb3MsIGxpbmhhcyBkZSBjb21hbmRvcyBjb21wbGljYWRvcywgb3MgZW5kZXJlw6dvcyBkZSBlLQ0KK21haWwgZSBVUkwuIENvcnRhciBlIGNvbGFyIHRleHRvIGVudm9sdmUgdHLDqnMgcGFzc29zIHNpbXBsZXM6IA0KKyANCisgIDEuIE1hcnF1ZSBvIGNhbnRvIHN1cGVyaW9yIGVzcXVlcmRvIGRhIMOhcmVhIHJldGFuZ3VsYXIgb3Ugbm8gaW7DrWNpbyBkYSANCivDoXJlYSBsaW5lYXIgbmEgdGVsYSwgcXVlIGRldmUgc2VyIGFnYXJyYWRvIChjb3J0ZSkuIFNlIG8gZGlzcGxheSB0ZW0gDQorY2hhdmVzIGRlIHJvdGVhbWVudG8sIGVtIHNlZ3VpZGEsIG1vdmUgYSBqYW5lbGEgYnJhaWxsZSwgcGFyYSBxdWUgbyANCitwcmltZWlybyBjYXLDoWN0ZXIgYSBzZXIgY29ydGFkbyBhcGFyZWNlciBlbSBxdWFscXVlciBsdWdhciBkZW50cm8gZGVsYSANCitlLCBlbSBzZWd1aWRhOg0KKw0KKyAgwrcgSW52b2NhciBvIGNvbWFuZG8gQ1VUQkVHSU4gcGFyYSBpbmljaWFyIHVtIG5vdm8gYnVmZmVyIGRlIGNvcnRlLg0KKyAgwrcgSW52b2NhciBvIGNvbWFuZG8gQ1VUQVBQRU5EIHBhcmEgYW5leGFyIGFvIGJ1ZmZlciBkZSBjb3J0ZSANCitleGlzdGVudGVzLCBwcmVzc2lvbmFuZG8gYXMgY2hhdmUgYXNzb2NpYWRhcyBhIGVsZSBlIGRlcG9pcyBwcmVzc2lvbmFyIGEgDQordGVjbGEgZGUgcm90ZWFtZW50byBhc3NvY2lhZG8gY29tIG8gcGVyc29uYWdlbS4NCisNCisyLiBNYXJxdWUgbyBjYW50byBpbmZlcmlvciBkaXJlaXRvIGRhIMOhcmVhIHJldGFuZ3VsYXIgb3UgbyBmaW0gZGEgw6FyZWEgDQorbGluZWFyIG5hIHRlbGEsIHF1ZSBkZXZlIHNlciBhZ2FycmFkbyAoY29ydGUpLiBTZSBvIGRpc3BsYXkgdGVtIGNoYXZlcyANCitkZSByb3RlYW1lbnRvLCBtb3ZlIGEgamFuZWxhIGRlIGJyYWlsbGUgcGFyYSBxdWUgbyDDumx0aW1vIGNhcmFjdGVyIGEgc2VyIA0KK2NvcnRhZG8gYXBhcmVjZSBlbSBxdWFscXVlciBsdWdhciBkZW50cm8gZGVsYSBlLCBlbSBzZWd1aWRhOg0KKw0KKyAgwrcgSW52b2NhciBvIGNvbWFuZG8gQ1VUUkVDVCBwYXJhIGNvcnRhciB1bWEgw6FyZWEgcmV0YW5ndWxhci4NCisgIMK3IEludm9jYXIgbyBjb21hbmRvIENVVExJTkUgcGFyYSBjb3J0YXIgdW1hIMOhcmVhIGxpbmVhciBwcmVzc2lvbmFuZG8gDQorYXMgY2hhdmUgYXNzb2NpYWRhcyBhIGVsZSBlIGRlcG9pcyBwcmVzc2lvbmFyIGEgdGVjbGEgZGUgcm90ZWFtZW50byANCithc3NvY2lhZG8gY29tIG8gY2Fyw6FjdGVyLiBNYXJjYW5kbyBvIGZpbSBkYSDDoXJlYSBkZSBjb3J0ZSBhY3Jlc2NlbnRhIG8gDQorY29udGXDumRvIGRhIHRlbGEgc2VsZWNpb25hZGEgY29tIG8gYnVmZmVyIGRlIGNvcnRlLiBPIGV4Y2Vzc28gZGUgZXNwYcOnbyANCitlbSBicmFuY28gw6kgcmVtb3ZpZG8gbm8gZmluYWwgZGUgY2FkYSBsaW5oYSBubyBidWZmZXIgZGUgY29ydGUgZGUgbW9kbyANCitxdWUgb3MgZXNwYcOnb3MgaW5kZXNlamFkb3Mgbm8gZmluYWwgbsOjbyB2w6NvIHNlciBjb2xhZG8gcGFyYSB0csOhcyBkbyANCitjYXLDoWN0ZXIgZGUgY29udHJvbGUgcXVlIHNlcsOjbyBzdWJzdGl0dcOtZG9zIHBvciBlc3Bhw6dvcyBlbSBicmFuY28uDQorIA0KKzMuIEluc2VyaXIgKGNvbGFyKSBvIHRleHRvIG9uZGUgZWxlIMOpIG5lY2Vzc8OhcmlvLiBDb2xvcXVlIG8gY3Vyc29yIHNvYnJlIA0KK28gY2Fyw6FjdGVyIG9uZGUgbyB0ZXh0byBkZXZlIHNlciBjb2xhZG8sIGUgaW52b2NhciBvIGNvbWFuZG8gUEFTVEUuIFZvY8OqIA0KK3BvZGUgY29sYXIgbyBtZXNtbyB0ZXh0byB2YXJpYXMgdmV6ZXMgc2VtIHJlY29ydGFyLiBFc3RhIGRlc2NyacOnw6NvIA0KK2Fzc3VtZSBxdWUgdm9jw6ogasOhIGVzdMOhIGVtIGFsZ3VtIHRpcG8gZGUgbW9kbyBkZSBlbnRyYWRhLiBTZSB2b2PDqiBjb2xhciANCitxdWFuZG8gdm9jw6ogZXN0aXZlciBlbSBhbGd1bSBvdXRybyB0aXBvIGRlIG1vZGFsaWRhZGUgKGNvbW8gY29tYW5kbyB2aSksIA0KK2VudMOjbyDDqSBtZWxob3Igdm9jw6ogZXN0YXIgY2llbnRlIGRlIHF1ZSBvcyBjYXJhY3RlcmVzIG5vIGJ1ZmZlciBkZSBjb3J0ZSANCit2w6NvIGZhemVyLiANCisgDQorTyBidWZmZXIgZGUgY29ydGUgdGFtYsOpbSDDqSB1c2FkbyBwZWxvcyBjb21hbmRvcyBQUlNFQVJDSC9OWFNFQVJDSC4NCisNCis1LjMgU3Vwb3J0ZSBkbyBQb250ZWlybyAoTW91c2UpIHZpYSBHUE0NCisgDQorU2UgQlJMVFRZIMOpIGNvbmZpZ3VyYWRvIGNvbSBhIG9ww6fDo28gZGUgY29tcGlsYcOnw6NvIC0tZW5hYmxlLWdwbSBubyANCitzaXN0ZW1hIG9uZGUgYSBhcGxpY2HDp8OjbyBncG0gZm9pIGluc3RhbGFkYSwgZW0gc2VndWlkYSwgZWxlIHZhaSANCitpbnRlcmFnaXIgY29tIG8gY3Vyc29yIChtb3VzZSkuIA0KKyANCitNb3ZlciBvIHBvbnRlaXJvIGUgYXJyYXN0YXIgYSBqYW5lbGEgYnJhaWxsZSAodmVqYSBXaW5kb3cgRm9sbG93cyANCitQb2ludGVyKS4gU2VtcHJlIHF1ZSBvIHBvbnRlaXJvIMOpIG1vdmlkbyBwYXJhIGFsw6ltIGRhIGJvcmRhIGRhIGphbmVsYSBkbyANCiticmFpbGxlLCBhIGphbmVsYSBkbyBicmFpbGxlIMOpIGFycmFzdGFkYSAodW0gY2Fyw6FjdGVyIHBvciB2ZXopLiBJc3RvIGTDoSANCithbyB1c3XDoXJpbyBicmFpbGxlIG91dHJhIGZvcm1hIGJpZGltZW5zaW9uYWwgcGFyYSBpbnNwZWNpb25hciBvIGNvbnRlw7pkbyANCitkYSB0ZWxhIG91IG1vdmVyLXNlIHJhcGlkYW1lbnRlIGEgamFuZWxhIGJyYWlsbGUgcGFyYSBvIGxvY2FsIGRlc2VqYWRvLiANCitFbGUgdGFtYsOpbSBkw6EgdW1hIHZpc8OjbyBkZSBvYnNlcnZhZG9yIGRlIG1hbmVpcmEgZsOhY2lsIHBhcmEgbW92ZXIgYSANCitqYW5lbGEgZGUgYnJhaWxsZSBwYXJhIGFsZ28gcXVlIGVsZSBnb3N0YXJpYSBxdWUgbyB1c3XDoXJpbyBCcmFpbGxlIHBvc3NhIA0KK2xlci4gDQorIA0KK08gZ3BtIHVzYSB2w61kZW8gcmV2ZXJzbyBwYXJhIG1vc3RyYXIgb25kZSBvIGN1cnNvciBlc3TDoS4gU3VibGluaGFuZG8gb3MgDQorY2FyYWN0ZXJlcyBlbSBkZXN0YXF1ZSAodmVqYSBvIGNvbWFuZG8gQVRUUlZJUykgZGV2ZSBzZXIgYXRpdmFkbywgDQorcG9ydGFudG8sIHF1YW5kbyBvIHVzdcOhcmlvIGJyYWlsbGUgcHJldGVuZGUgdXNhciBvIHBvbnRlaXJvLiANCisgDQorRXNzZSByZWN1cnNvIHRhbWLDqW0gcGVybWl0ZSBvIGFjZXNzbyBkbyB1c3XDoXJpbyBlbSBCcmFpbGxlIHBhcmEgZ3BtIMOpIA0KK2NvcnRhZG8gZSBjb2xhZG8uIEVtYm9yYSB2b2PDqiBkZXZlIGxlciBhIGRvY3VtZW50YcOnw6NvIHByw7NwcmlhIGdwbSwgYXF1aSANCitlc3TDo28gYWxndW1hcyBub3RhcyBzb2JyZSBhIGZvcm1hIGNvbW8gZWxlIGZ1bmNpb25hLg0KKw0KKyAgIMK3IEPDs3BpYSBkbyBjYXLDoWN0ZXIgYXR1YWwgcGFyYSBvIGJ1ZmZlciBjb3J0YWRvIHBvciB1bSDDum5pY28gY2xpcXVlIA0KK2NvbSBvIGJvdMOjbyBlc3F1ZXJkby4NCisgICDCtyBDw7NwaWEgZGEgcGFsYXZyYSBhdHVhbCAoZXNwYcOnbyBkZWxpbWl0YWRvKSBwYXJhIG8gYnVmZmVyIGRlIGNvcnRlIA0KK2NvbSB1bSBkdXBsbyBjbGlxdWUgY29tIG8gYm90w6NvIGVzcXVlcmRvLg0KKyAgIMK3IEPDs3BpYSBkYSBsaW5oYSBhdHVhbCBwYXJhIG8gYnVmZmVyIGRlIGNvcnRlIGRlIHRyaXBsby1jbGlxdWUgY29tIG8gDQorYm90w6NvIGVzcXVlcmRvLg0KKyAgIMK3IEPDs3BpYSBkZSB1bWEgcmVnacOjbyBsaW5lYXIgcGFyYSBvIGJ1ZmZlciBkZSBjb3J0ZSBkYSBzZWd1aW50ZSANCitmb3JtYToNCisNCisgICAgIDEuIENvbG9xdWUgbyBwb250ZWlybyBkbyBtb3VzZSBzb2JyZSBvIHByaW1laXJvIGNhcsOhY3RlciBkYSByZWdpw6NvLg0KKyAgICAgMi4gUHJlc3Npb25lIChlIG1hbnRlbmhhIHByZXNzaW9uYWRvKSBvIGJvdMOjbyBlc3F1ZXJkby4NCisgICAgIDMuIE1vdmEgbyBwb250ZWlybyBwYXJhIG8gw7psdGltbyBjYXLDoWN0ZXIgZGEgcmVnacOjbyAodG9kb3Mgb3MgDQorY2FyYWN0ZXJlcyBzZWxlY2lvbmFkb3Mgc8OjbyBkZXN0YWNhZG9zKS4NCisgICAgIDQuIFNvbHRlIG8gYm90w6NvIGVzcXVlcmRvLg0KKw0KKyAgIMK3IENvbGUgKGVudHJhZGEpIG8gY29udGXDumRvIGF0dWFsIGRvIGJ1ZmZlciBkZSBjb3J0ZSBjbGljYW5kbyBvIGJvdMOjbyANCitkbyBtZWlvIGRvIG1vdXNlIGRlIHRyw6pzIGJvdMO1ZXMsIG91IGNsaWNhbmRvIGNvbSBvIGJvdMOjbyBkaXJlaXRvIGRvIA0KK21vdXNlIGRlIGRvaXMgYm90w7Vlcy4NCisgICDCtyBBcGFyZWNlIHBhcmEgbyBidWZmZXIgZGUgY29ydGUgdXNhbmRvIG8gYm90w6NvIGRpcmVpdG8gZG8gbW91c2UgZGUgDQordHLDqnMgYm90w7Vlcy4NCisNCis1LjQgQWxlcnRhIGRlIFR1bmVzDQorIA0KK0JSTFRUWSBhbGVydGEgcGFyYSBhIG9jb3Jyw6puY2lhIGRlIGV2ZW50b3Mgc2lnbmlmaWNhdGl2b3MsIHRvY2FuZG8gDQorbWVsb2RpYXMgY3VydGFzIHByZWRlZmluaWRhcy4gRXN0ZSByZWN1cnNvIHBvZGUgc2VyIGF0aXZhZG8gZSBkZXNhdGl2YWRvIA0KK2NvbSB1bSBjb21hbmRvIFRVTkVTIG91IG8gQWxlcnQgVHVuZXMuIEFzIG3DunNpY2FzIHPDo28gdG9jYWRhcyBhdHJhdsOpcyBkbyANCithcGl0byBpbnRlcm5vLCBwb3IgcGFkcsOjbywgbWFzIG91dHJhcyBhbHRlcm5hdGl2YXMgcG9kZW0gc2VyIA0KK3NlbGVjaW9uYWRhcyBjb20gYSBwcmVmZXLDqm5jaWEgZGUgVHVuZSBEZXZpY2UuIA0KKyANCitDYWRhIGV2ZW50byBzaWduaWZpY2F0aXZvIGVzdMOhIGFzc29jaWFkbywgZG8gbWFpb3IgcGFyYSBhIG1lbm9yIA0KK3ByaW9yaWRhZGUsIGNvbSB1bSBvdSBtYWlzIGRvcyBzZWd1aW50ZXMgcHJvY2VkaW1lbnRvczogDQorIA0KK2EgdHVuZQ0KK1NlIHVtYSBtw7pzaWNhIHRlbSBzaWRvIGFzc29jaWFkbyBjb20gbyBldmVudG8sIHNlIG8gQWxlcnQgVHVuZXMgKHZlamEgDQordGFtYsOpbSBvIGNvbWFuZG8gVFVORVMpIGVzdMOhIGF0aXZvIGUgc2UgbyBkaXNwb3NpdGl2byBkZSBhanVzdGUgZm9yIA0KK3NlbGVjaW9uYWRvICh2ZWphIGEgcHJlZmVyw6puY2lhIGRlIERpc3Bvc2l0aXZvcyBUdW5lKSBwb2RlIHNlciBhYmVydG8sIA0KK2VudMOjbyBhIG3DunNpY2Egw6kgdG9jYWRhLg0KKyANCithIGRvdCBwYXR0ZXJuDQorU2UgdW0gcGFkcsOjbyBkZSBwb250b3MgdGVtIHNpZG8gYXNzb2NpYWRvIGNvbSBvIGV2ZW50bywgZSBzZSBhIA0KK3ByZWZlcsOqbmNpYSBkbyBBbGVydCBEb3RzIGVzdMOhIGF0aXZvLCBlbnTDo28gbyBwYWRyw6NvIGRlIHBvbnRvcyDDqSBleGliaWRvIA0KK3JhcGlkYW1lbnRlIGVtIGNhZGEgY8OpbHVsYSBicmFpbGxlLiBBbGd1bnMgZGlzcGxheXMgYnJhaWxsZSBuw6NvIA0KK3Jlc3BvbmRlbSBjb20gcmFwaWRleiBzdWZpY2llbnRlIHBhcmEgcXVlIGVzdGUgbWVjYW5pc21vIGZ1bmNpb25lIGRlIA0KK2Zvcm1hIGVmaWNhei4NCisgDQorYSBtZXNzYWdlDQorU2UgYSBtZW5zYWdlbSB0ZW0gc2lkbyBhc3NvY2lhZGEgY29tIG8gZXZlbnRvLCBlIHNlIGEgcHJlZmVyw6puY2lhIEFsZXJ0IA0KK01lc3NhZ2VzIGVzdGl2ZXIgYXRpdmEsIGVsYSDDqSBleGliaWRvIHBvciBhbGd1bnMgc2VndW5kb3MgKHZlamEgYSBvcMOnw6NvIA0KKy1tIGRlIGxpbmhhIGRlIGNvbWFuZG8pLg0KKyANCitFc3RlcyBldmVudG9zIGluY2x1ZW06DQorDQorICAgICAgwrcgUXVhbmRvIG8gZHJpdmVyIGRvIGRpc3BsYXkgQnJhaWxsZSBjb21lw6dhIG91IHDDoXJhLg0KKyAgICAgICANCisgICAgICDCtyBRdWFuZG8gdW0gY29tYW5kbyBkZW1vcmFkbyBjb25jbHXDrS4NCisgICAgICAgDQorICAgICAgwrcgUXVhbmRvIHVtIGNvbWFuZG8gbsOjbyBwb2RlIHNlciBleGVjdXRhZG8uDQorICAgICAgIA0KKyAgICAgIMK3IFF1YW5kbyB1bWEgbWFyY2Egw6kgZGVmaW5pZGEuDQorICAgICAgIA0KKyAgICAgIMK3IFF1YW5kbyBvIGluw61jaW8gb3UgbyBmaW0gZG8gYmxvY28gZGUgY29ydGUgw6kgZGVmaW5pZGEuDQorICAgICAgIA0KKyAgICAgIMK3IFF1YW5kbyB1bSByZWN1cnNvIMOpIGF0aXZhZG8gb3UgZGVzYXRpdmFkby4NCisgICAgICAgDQorICAgICAgwrcgUXVhbmRvIG8gY29udHJvbGUgZGUgY3Vyc29yIMOpIGxpZ2FkbyBvdSBkZXNsaWdhZG8uDQorICAgICAgIA0KKyAgICAgIMK3IFF1YW5kbyBhIGltYWdlbSBkYSB0ZWxhIMOpIGNvbmdlbGFkYSBvdSBkZXNjb25nZWxhZGEuDQorICAgICAgIA0KK8K3IFF1YW5kbyBhIGphbmVsYSBicmFpbGxlIGVudm9sdmlkYSBvdSBhdMOpIG8gaW7DrWNpbyBkYSBwcsOzeGltYSAgICANCitsaW5oYSBvdSBhdMOpIG8gZmltIGRhIGxpbmhhIGFudGVyaW9yLg0KKyAgICAgICANCisgICAgICDCtyBRdWFuZG8gYXMgbGluaGFzIGlkw6pudGljYXMgc8OjbyBpZ25vcmFkb3MuDQorICAgICAgIA0KKyAgICAgIMK3IFF1YW5kbyB1bWEgc29saWNpdGHDp8OjbyBuw6NvIHBvZGUgc2VyIGV4ZWN1dGFkYS4NCisgICAgICAgDQorICAgICAgwrcgUXVhbmRvIG8gY3Vyc29yIGNvbWXDp2EgbyByb3RlYW1lbnRvLCB0ZXJtaW5hLCBvdSBmYWxoYS4NCisgICAgICAgDQorNS41IENvbmZpZ3VyYcOnw7VlcyBkZSBQcmVmZXLDqm5jaWFzDQorIA0KK1F1YW5kbyBCUkxUVFkgw6kgaW5pY2lhZG8sIGVsZSBjYXJyZWdhIHVtIGFycXVpdm8gcXVlIGNvbnTDqW0gYXMgDQorZGVmaW5pw6fDtWVzIGRlIHByZWZlcsOqbmNpYXMuIE8gYXJxdWl2byBuw6NvIHByZWNpc2EgZXhpc3RpciwgZWxlIMOpIGNyaWFkbyANCitwZWxhIHByaW1laXJhIHZleiwgYXMgY29uZmlndXJhw6fDtWVzIHPDo28gc2FsdmFzIGNvbSBvIGNvbWFuZG8gUFJFRlNBVkUuIA0KK0FzIGNvbmZpZ3VyYcOnw7VlcyBtYWlzIHJlY2VudGVtZW50ZSBzYWx2YXMgcG9kZW0gc2VyIHJlc3RhdXJhZGFzIGEgDQorcXVhbHF1ZXIgbW9tZW50byBjb20gbyBjb21hbmRvIFBSRUZMT0FELiANCisgDQorTyBub21lIHBhcmEgZXN0ZSBhcnF1aXZvIMOpIC9ldGMvYnJsdHR5LWRyaXZlci5wcmVmcy4gT25kZSBkcml2ZXIgdGVtIA0KK2R1YXMgbGV0cmFzIGRvIGPDs2RpZ28gZGUgaWRlbnRpZmljYcOnw6NvIGRlIGRyaXZlci4gDQorIA0KKzUuNS4xIE1lbnUgZGUgUHJlZmVyw6puY2lhcyANCisgDQorQXMgY29uZmlndXJhw6fDtWVzIGRlIHByZWZlcsOqbmNpYXMgc8OjbyBzYWx2b3MgY29tbyBkYWRvcyBiaW7DoXJpb3MgcXVlLCANCitwb3J0YW50bywgbsOjbyBwb2RlIHNlciBlZGl0YWRvIG1hbnVhbG1lbnRlLiBCUkxUVFksIG5vIGVudGFudG8sIHRlbSB1bSANCittZW51IHNpbXBsZXMgZG8gcXVlIHZvY8OqIHBvZGUgZmFjaWxtZW50ZSBtdWTDoS1sb3MuIA0KKyANCitPIG1lbnUgw6kgYXRpdmFkbyBwZWxvIGNvbWFuZG8gUFJFRk1FTlUuIE8gZGlzcGxheSBicmFpbGxlICh2ZXIgLW0pIA0KK21vc3RyYSBvIHTDrXR1bG8gZG8gbWVudSwgZSBlbSBzZWd1aWRhLCBhcHJlc2VudGEgbyBpdGVtIGF0dWFsIGUgc3VhIA0KK2NvbmZpZ3VyYcOnw6NvIGF0dWFsLiANCisgDQorNS41LjEuMSBNZW51IGRlIE5hdmVnYcOnw6NvIA0KKyANCitDb25zdWx0ZSBvIENvbWFuZG9zIGRvIE1lbnUgZGUgTmF2ZWdhw6fDo28gcGFyYSBhIGxpc3RhIGNvbXBsZXRhIGRvcyANCitjb21hbmRvcyBxdWUgcGVybWl0ZW0gcXVlIHZvY8OqIHNlbGVjaW9uZSBvcyBpdGVucyBlIGFsdGVyZSBhcyANCitjb25maWd1cmHDp8O1ZXMgZGVudHJvIGRvIG1lbnUuIFBhcmEgY29tcGF0aWJpbGlkYWRlIGNvbSBkcml2ZXJzIGFudGlnb3MsIA0KK29zIGNvbWFuZG9zIGRlIGphbmVsYSBkbyBtb3ZpbWVudG8sIHF1ZSBhbHRlcmFyYW0gb3Mgc2lnbmlmaWNhZG9zLCBuZXN0ZSANCitjb250ZXh0bywgdGFtYsOpbSBwb2RlIHNlciB1c2Fkby4gDQorIA0KKyAJVE9QLyBCT1QsIFRPUF9MRUZUL0JPVF9MRUZULCBQQUdFX1VQL1BBR0VfRE9XTiANCisgICAgICBJciBwYXJhIG8gcHJpbWVpcm8gaXRlbSAvIMO6bHRpbW8gbm8gbWVudSAobyBtZXNtbyBjb21vDQorICAgICAgTUVOVV9GSVJTVF9JVEVNL01FTlVfTEFTVF9JVEVNKS4NCisgDQorTE5VUC9MTkROLCBQUkRJRkxOL05YRElGTE4sIENVUlNPUl9VUC9DVVJTT1JfRE9XTg0KK0lyIHBhcmEgbyBpdGVtIGFudGVyaW9yIC8gc2VndWludGUgbm8gbWVudSAobyBtZXNtbyBxdWUgDQorTUVOVV9QUkVWX0lURU0vTUVOVV9ORVhUX0lURU0pLiANCisgDQorV0lOVVAvV0lORE4sIENIUkxUL0NIUlJULCBDVVJTT1JfTEVGVC9DVVJTT1JfUklHSFQsIEJBQ0svSE9NRSANCitEaW1pbnVpciBhdW1lbnRhciAvIGRlZmluaXIgbyBpdGVtIGRlIG1lbnUgYXR1YWwgKG8gbWVzbW8gcXVlIA0KK01FTlVfUFJFVl9TRVRUSU5HL01FTlVfTkVYVF9TRVRUSU5HKS4gDQorDQorTm90YXM6DQorDQorwrcgQXMgY2hhdmVzIGRlIHJvdGVhbWVudG8gdGFtYsOpbSBwb2RlIHNlciB1c2FkbyBwYXJhIHNlbGVjaW9uYXIgdW1hIA0KK29ww6fDo28gcGFyYSBvIGl0ZW0gYXR1YWwuIFNlIG8gaXRlbSB0ZW0gYWp1c3RlcyBudW3DqXJpY29zLCBlbSBzZWd1aWRhLCANCit0b2RhIGEgbGluaGEgZGUgY2hhdmVzIGRlIHJvdGVhbWVudG8gYXR1YSBjb21vIHVtYSBiYXJyYSBkZSByb2xhZ2VtLCBxdWUgDQorYWJyYW5nZSB0b2RhIGEgZ2FtYSBkZSB2YWxvcmVzIHbDoWxpZG9zLiBTZSBvIGl0ZW0gdGVtIGNoYW1hZG8gDQorY29uZmlndXJhw6fDtWVzLCBlbnTDo28gYXMgY2hhdmVzIGRlIHJvdGVhbWVudG8gY29ycmVzcG9uZGVtIGNvbSBhcyANCitjb25maWd1cmHDp8O1ZXMuDQorDQorwrcgVXNlIG8gY29tYW5kbyBQUkVGTE9BRCBkZXNmYXplciB0b2RhcyBhcyBhbHRlcmHDp8O1ZXMgcXVlIGZvcmFtIGZlaXRhcyANCitkZXNkZSBhIHN1YSBlbnRyYWRhIG5vIG1lbnUuDQorDQorwrcgVXNlIG8gY29tYW5kbyBQUkVGTUVOVSAobm92YW1lbnRlKSBwYXJhIGRlaXhhciBhcyBub3ZhcyBjb25maWd1cmHDp8O1ZXMgDQorZGUgZmF0bywgc2FpciBkbyBtZW51LCBlIHJldG9tYXIgYSBvcGVyYcOnw6NvIG5vcm1hbC4gU2UgYSBvcMOnw6NvICJTYXZlIA0KK1NldHRpbmdzIG9uIEV4aXQiIMOpIGRlZmluaWRvLCBlbnTDo28sIGFsw6ltIGRpc3NvLCBhcyBub3ZhcyBjb25maWd1cmHDp8O1ZXMgDQorc8OjbyBncmF2YWRhcyBubyBhcnF1aXZvIGRlIGNvbmZpZ3VyYcOnw7VlcyBkZSBwcmVmZXLDqm5jaWFzLiBRdWFscXVlciANCitjb21hbmRvIG7Do28gw6kgcmVjb25oZWNpZG8gcGVsbyBzaXN0ZW1hIGRlIG1lbnUgdGFtYsOpbSBmYXogZXNzYXMgY29pc2FzIA0KK21lc21vLiANCisgDQorNS41LjEuMiBJdGVucyBkZSBNZW51IA0KKyANCitTYWx2YXIgYW8gc2FpciANCisgDQorICAgQW8gc2FpciBkbyBtZW51IGRlIHByZWZlcsOqbmNpYXM6IA0KKyANCisgICBObw0KKyAgIE7Do28gc2FsdmFyIGF1dG9tYXRpY2FtZW50ZSBhcyBjb25maWd1cmHDp8O1ZXMgZGUgcHJlZmVyw6puY2lhcy4NCisgDQorICAgWWVzDQorICAgU2FsdmFyIGF1dG9tYXRpY2FtZW50ZSBhcyBjb25maWd1cmHDp8O1ZXMgZGUgcHJlZmVyw6puY2lhcy4gDQorIA0KKyAgIEEgY29uZmlndXJhw6fDo28gaW5pY2lhbCDDqSBOby4gDQorIA0KK1RleHQgU3R5bGUNCisNCisgICBBbyBleGliaXIgbyBjb250ZcO6ZG8gZGEgdGVsYSAodmVqYSBvIGNvbWFuZG8gRElTUE1EKSwgb3MgY2FyYWN0ZXJlcyANCittb3N0cmFtOg0KKw0KKyAgIDgtZG90DQorICAgQ29tIG9zIG9pdG8gcG9udG9zLg0KKw0KKyAgIDYtZG90DQorICAgQ29tIGFwZW5hcyBwb250b3MgZGUgMSBhIDYuIFNlIHVtYSB0YWJlbGEgZGUgY29udHJhw6fDo28gZm9pIA0KK3NlbGVjaW9uYWRhKHZlamEgYSBvcMOnw6NvIC1jIGRhIGxpbmhhIGRlIGNvbWFuZG8gZSBkYSB0YWJlbGEgZGUgY29udHJhw6fDo28gDQorZG8gYXJxdWl2byBkZSBjb25maWd1cmHDp8OjbyksIGVudMOjbyBlbGUgw6kgdXNhZG8uDQorDQorRXN0YSBjb25maWd1cmHDp8OjbyB0YW1iw6ltIHBvZGUgc2VyIGFsdGVyYWRvIGNvbSBvIGNvbWFuZG8gU0lYRE9UUy4NCisgDQorU2tpcCBJZGVudGljYWwgTGluZXMNCisNCitRdWFuZG8gc2UgZGVzbG9jYW0gcGFyYSBjaW1hIG91IHBhcmEgYmFpeG8gZXhhdGFtZW50ZSB1bWEgbGluaGEgY29tIG9zIA0KK2NvbWFuZG9zIExOVVAvTE5ETiwgYmVtIGNvbW8gbyByZWN1cnNvIGRlIEZXSU5SVC9GV0lOTFQgZSBjb21hbmRvcyANCitGV0lOTFRTS0lQL0ZXSU5SVFNLSVA6DQorDQorICAgTm8NCisgICBOw6NvIHB1bGUgbGluaGFzIHBhc3NhZGFzLCBxdWUgdMOqbSBvIG1lc21vIGNvbnRlw7pkbyBkYSBsaW5oYSBhdHVhbC4NCisNCisgICBZZXMNCisgICBQdWxhIGxpbmhhcyBwYXNzYWRhcywgcXVlIHTDqm0gbyBtZXNtbyBjb250ZcO6ZG8gZGEgbGluaGEgYXR1YWwuDQorIA0KKyAgIEVzdGEgY29uZmlndXJhw6fDo28gdGFtYsOpbSBwb2RlIHNlciBhbHRlcmFkbyBjb20gbyBjb21hbmRvIFNLUElETE5TLiANCisgDQorU2tpcCBCbGFuayBXaW5kb3dzIA0KKyANCitRdWFuZG8gc2UgZGVzbG9jYW0gcGFyYSBhIGVzcXVlcmRhIG91IGRpcmVpdGEsIGNvbSBvcyBjb21hbmRvcyANCitGV0lOTFQvRldJTlJUOg0KKyANCisgICAgICAgTm8NCisgICBOw6NvIHB1bGFyIGphbmVsYXMgZW0gYnJhbmNvLg0KKyANCisgICAgICAgWWVzDQorICAgUHVsYXIgamFuZWxhcyBlbSBicmFuY28uIA0KKyANCitFc3RhIGNvbmZpZ3VyYcOnw6NvIHRhbWLDqW0gcG9kZSBzZXIgYWx0ZXJhZG8gY29tIG8gY29tYW5kbyBTS1BCTE5LV0lOUy4gDQorIA0KK1doaWNoIEJsYW5rIFdpbmRvd3MgDQorIA0KK1NlIGFzIGphbmVsYXMgZW0gYnJhbmNvIGRldmVtIHNlciBpZ25vcmFkb3M6IA0KKyANCisgICAgICAgQWxsDQorICAgcGFzc2FyIHRvZG9zIGVsZXMuDQorICAgDQorICAgRmltIGRhIExpbmhhDQorICAgYXBlbmFzIGlnbm9yYXIgYXF1ZWxlcyBxdWUgZXN0w6NvIG5vIGZpbmFsIChkbyBsYWRvIGRpcmVpdG8pIGRlIHVtYSANCitsaW5oYS4NCisNCisgICBSZXN0byBkYSBMaW5oYQ0KKyAgIGFwZW5hcyBpZ25vcmFyIGFxdWVsZXMgcXVlIGVzdMOjbyBubyBmaW5hbCAoZG8gbGFkbyBkaXJlaXRvKSBkZSB1bWEgDQorbGluaGEgZHVyYW50ZSBhIGxlaXR1cmEgcGFyYSBhIGZyZW50ZSwgZSBubyBpbsOtY2lvIChkbyBsYWRvIGVzcXVlcmRvKSBkZSANCit1bWEgbGluaGEgZHVyYW50ZSBhIGxlaXR1cmEgcGFyYSB0csOhcy4gDQorIA0KK1NsaWRpbmcgV2luZG93IA0KKyANCitTZSBvIGN1cnNvciBlc3TDoSBhIHNlciBjb250cm9sYWRvICh2ZWphIG8gY29tYW5kbyBDU1JUUkspLCBlIG8gY3Vyc29yIA0KK21vdmUtc2UgZGVtYXNpYWRvIHBlcnRvIChvdSBtYWlzKSB1bWEgZGFzIGphbmVsYSBkbyBCcmFpbGxlOiANCisgDQorICAgICAgIE5vDQorICAgUmVwb3NpY2lvbmFyIGhvcml6b250YWxtZW50ZSBhIGphbmVsYSBkZSBtb2RvIHF1ZSBzdWEgZXh0cmVtaWRhZGUgDQorZXNxdWVyZGEgw6kgdW0gbcO6bHRpcGxvIGRlIHN1YSBsYXJndXJhIGRhIGJvcmRhIGVzcXVlcmRhIGRhIHRlbGEuDQorIA0KKyAgICAgICBZZXMNCisgICBIb3Jpem9udGFsbWVudGUgcmVwb3NpY2lvbmFyIGEgamFuZWxhIGRlIHRhbCBmb3JtYSBxdWUgbyBjdXJzb3IsIA0KK21hbnRlbmRvLXNlIG5lc3NlIGxhZG8gZGEgamFuZWxhLCBlc3TDoSBtYWlzIHByw7N4aW1vIGRvIGNlbnRyby4gDQorIA0KK0VzdGEgY29uZmlndXJhw6fDo28gdGFtYsOpbSBwb2RlIHNlciBhbHRlcmFkbyBjb20gbyBjb21hbmRvIFNMSURFV0lOLiANCisgDQorRWFnZXIgU2xpZGluZyBXaW5kb3cgDQorIA0KK1NlIGEgamFuZWxhIGRlIGJyYWlsbGUgw6kgc2xpZGU6IA0KKyANCisgICAgICAgTm8NCisgICBSZXBvc2ljaW9uw6EtbG8gc2VtcHJlIHF1ZSBvIGN1cnNvciBzZSBtb3ZlIHBhcmEgYWzDqW0gZGUgdW1hIG91IG91dHJhIA0KK2V4dHJlbWlkYWRlLg0KKyANCisgICAgICAgWWVzDQorICAgUmVwb3NpY2lvbsOhLWxvIHNlbXByZSBxdWUgbyBjdXJzb3IgbW92ZS1zZSBtdWl0byBwZXJ0byBkZSB1bWEgZGFzIA0KK2V4dHJlbWlkYWRlcy4gDQorIA0KK0EgY29uZmlndXJhw6fDo28gaW5pY2lhbCDDqSBOby4gDQorIA0KK1dpbmRvdyBPdmVybGFwIA0KKyANCitRdWFuZG8gc2UgZGVzbG9jYW0gcGFyYSBhIGVzcXVlcmRhIG91IGRpcmVpdGEgY29tIG9zIGNvbWFuZG9zIA0KK0ZXSU5MVC9GV0lOUlQsIGVzdGEgY29uZmlndXJhw6fDo28gZXNwZWNpZmljYSBxdWFudG9zIGNhcmFjdGVyZXMgDQoraG9yaXpvbnRhbG1lbnRlIGFkamFjZW50ZSBqYW5lbGFzIGJyYWlsbGUgZGV2ZW0gc29icmVwb3Itc2UgdW5zIGFvcyANCitvdXRyb3MgcG9yLiBPIGFqdXN0ZSBpbmljaWFsIMOpIDAuIA0KKw0KK0F1dG9SZXBlYXQgDQorIA0KK0VucXVhbnRvIGEgY2hhdmUgKGNvbWJpbmHDp8OjbykgcGFyYSB1bSBjb21hbmRvIHBlcm1hbmVjZSBwcmVzc2lvbmFkbzogDQorIA0KKyAgICAgICBObw0KKyAgIE7Do28gcmVwaXRhIGF1dG9tYXRpY2FtZW50ZSBvIGNvbWFuZG8uDQorIA0KKyAgICAgICBZZXMNCisgICBBdXRvbWF0aWNhbWVudGUgcmVwZXRpciBvIGNvbWFuZG8gZW0gdW0gaW50ZXJ2YWxvIHJlZ3VsYXIsIGFww7NzIHVtIA0KK2F0cmFzbyBpbmljaWFsLg0KKw0KK09zIHNlZ3VpbnRlcyBjb21hbmRvcyBzw6NvIGVsZWfDrXZlaXMgcGFyYSBhdXRvIHJlcGx5Og0KKyAgICAgIMK3IE8gY29tYW5kbyBMTlVQL0xORE4uDQorICAgICAgwrcgTyBjb21hbmRvIFBSRElGTE4vTlhESUZMTi4NCisgICAgICDCtyBPIGNvbWFuZG8gQ0hSTFQvQ0hSUlQuDQorICAgICAgwrcgT3BlcmHDp8O1ZXMgcGFub3LDom1pY2EgZGEgamFuZWxhIEJyYWlsbGUgKHZlciBBdXRvUmVwZWF0IFBhbm5pbmcpLg0KKyAgICAgIMK3IE9wZXJhw6fDtWVzIGRlIFBhZ2UtVXAgZSBQYWdlLURvd24uDQorICAgICAgwrcgT3BlcmHDp8O1ZXMgZGUgY3Vyc29yLXVwIGUgY3Vyc29yLWRvd24uDQorICAgICAgwrcgT3BlcmHDp8O1ZXMgZGUgY3Vyc29yIGVzcXVlcmRhIGUgY3Vyc29yIGRpcmVpdGEuDQorICAgICAgwrcgT3BlcmHDp8O1ZXMgZGUgQmFja3NwYWNlIGUgRGVsZXRlLg0KKyAgICAgIMK3IENhcsOhY3RlciBkZSBlbnRyYWRhLg0KKyANCitBcGVuYXMgYWxndW5zIGRyaXZlcnMgc3Vwb3J0YW0gZXN0YSBmdW5jaW9uYWxpZGFkZSwgYSBwcmluY2lwYWwgDQorbGltaXRhw6fDo28gw6kgcXVlIG11aXRvcyBkaXNwbGF5IGJyYWlsbGUgbsOjbyBzaW5hbGl6YW0gdGFudG8gdGVjbGFzIA0KK3ByZXNzaW9uYWRhcyBlIGNoYXZlcyAgY29tbyBldmVudG9zIHNlcGFyYWRvcyBkaXN0aW50YW1lbnRlLiBFc3RhIA0KK2NvbmZpZ3VyYcOnw6NvIHRhbWLDqW0gcG9kZSBzZXIgYWx0ZXJhZG8gY29tIG8gY29tYW5kbyBBdXRvUmVwZWF0LiBBIA0KK2NvbmZpZ3VyYcOnw6NvIGluaWNpYWwgw6kgWUVTLiANCisgDQorQXV0b1JlcGVhdCBQYW5uaW5nIA0KKyANCitRdWFuZG8gYSBwcmVmZXLDqm5jaWEgQXV0b3JlcGVhdCBlc3TDoSBoYWJpbGl0YWRhOiANCisgDQorICAgICAgIE5vDQorICAgTsOjbyBow6Egb3BlcmHDp8O1ZXMgZGUgYXV0b3JlcGVhdCBkYSBqYW5lbGEgcGFub3LDom1pY2EgZW0gYnJhaWxsZS4gDQorDQorICAgICAgIFllcw0KKyAgIE9wZXJhw6fDtWVzIGRlIEF1dG9SZXBlYXQgcGFyYSBqYW5lbGEgcGFub3LDom1pY2EgZW0gYnJhaWxsZS4gDQorIA0KK0VzdGEgcHJlZmVyw6puY2lhIGF0aW5nZSBvcyBjb21hbmRvcyBGV0lOTFQvRldJTlJULiBBIGNvbmZpZ3VyYcOnw6NvIA0KK2luaWNpYWwgw6kgTm8uIA0KKyANCitBdXRvUmVwZWF0IERlbGF5IA0KKyANCitRdWFuZG8gdW0gY2Fyw6FjdGVyIMOpIGEgYXV0byByZXBldGl0aXZvLCBlc3RhIGNvbmZpZ3VyYcOnw6NvIGVzcGVjaWZpY2EgYSANCitxdWFudGlkYWRlIGRlIHRlbXBvICh2ZWphIENvbmZpZ3VyYcOnw7VlcyBkZSBUZW1wbyksIHF1ZSBkZXZlIHBhc3NhciBhbnRlcyANCithdXRvIHJlcGV0acOnw6NvIGNvbWXDp2EuIEEgY29uZmlndXJhw6fDo28gaW5pY2lhbCDDqSA1MC4gDQorIA0KK0F1dG9SZXBlYXQgSW50ZXJ2YWwNCisgDQorUXVhbmRvIHVtIGNhcsOhY3RlciBlc3TDoSBzZW5kbyBhdXRvIHJlcGV0aXRpdm8sIGVzdGEgY29uZmlndXJhw6fDo28gDQorZXNwZWNpZmljYSBhIHF1YW50aWRhZGUgZGUgdGVtcG8gKHZlamEgQ29uZmlndXJhw6fDtWVzIGRlIFRlbXBvKSBlbnRyZSANCitjYWRhIHJlZXhlY3XDp8Ojby4gQSBjb25maWd1cmHDp8OjbyBpbmljaWFsIMOpIDEwLiANCisNCitTaG93IEN1cnNvcg0KKyANCitBbyBleGliaXIgbyBjb250ZcO6ZG8gZGEgdGVsYSAodmVqYSBvIGNvbWFuZG8gRElTUE1EKTogDQorIA0KKyAgICAgICBObw0KKyAgIE7Do28gbW9zdHJhciBvIGN1cnNvci4NCisgDQorICAgICAgIFllcw0KKyAgIE1vc3RyYXIgbyBjdXJzb3IuIA0KKyANCitFc3RhIGNvbmZpZ3VyYcOnw6NvIHRhbWLDqW0gcG9kZSBzZXIgYWx0ZXJhZG8gY29tIG8gY29tYW5kbyBDU1JWSVMuIEEgDQorY29uZmlndXJhw6fDo28gaW5pY2lhbCDDqSBZZXMuIA0KKyANCitDdXJzb3IgU3R5bGUgDQorIA0KK0FvIG1vc3RyYXIgbyBjdXJzb3IsIHJlcHJlc2VudMOhLWxvOg0KKw0KKyAgIFVuZGVybGluZQ0KKyAgIENvbSBwb250b3MgNyBlIDguDQorICAgDQorICAgQmxvY2sNCisgICBDb20gb3Mgb2l0byBwb250b3MuDQorIA0KK0VzdGEgY29uZmlndXJhw6fDo28gdGFtYsOpbSBwb2RlIHNlciBhbHRlcmFkbyBjb20gbyBjb21hbmRvIENTUlNJWkUuIA0KKyANCitCbGlua2luZyBDdXJzb3IgDQorIA0KK1F1YW5kbyBvIGN1cnNvciBlc3TDoSBhIHNlciBtb3N0cmFkbzoNCisgICANCisgICBObw0KKyAgIERlaXhhci1zZSB2aXPDrXZlbCBvIHRlbXBvIHRvZG8uDQorICAgDQorICAgWWVzDQorICAgVG9ybsOhLWxvIGFsdGVybmFkYW1lbnRlLCB2aXPDrXZlaXMgZSBpbnZpc8OtdmVpcyBkZSBhY29yZG8gY29tIHVtICAgICANCisgICBpbnRlcnZhbG8gcHJlZGVmaW5pZG8uDQorDQorRXN0YSBjb25maWd1cmHDp8OjbyB0YW1iw6ltIHBvZGUgc2VyIGFsdGVyYWRvIGNvbSBvIGNvbWFuZG8gQ1NSQkxJTksuIA0KKyANCitDdXJzb3IgVmlzaWJsZSBUaW1lIA0KKyANCitRdWFuZG8gbyBjdXJzb3IgZXN0w6EgYSBzZXIgcGlzY291LCBlc3RhIGNvbmZpZ3VyYcOnw6NvIGVzcGVjaWZpY2EgbyANCitwZXLDrW9kbyBkZSB0ZW1wbyAodmVqYSB0aW1lIHNldHRpbmdzKSBkdXJhbnRlIGNhZGEgY2ljbG8gcXVlIGVzdMOhIGEgc2VyIA0KK3Zpc8OtdmVsLiBBIGNvbmZpZ3VyYcOnw6NvIGluaWNpYWwgw6kgZGUgNDAuIA0KKyANCitDdXJzb3IgSW52aXNpYmxlIFRpbWUNCisgDQorUXVhbmRvIG8gY3Vyc29yIGVzdMOhIGEgc2VyIHBpc2NvdSwgZXN0YSBjb25maWd1cmHDp8OjbyBlc3BlY2lmaWNhIG8gDQorcGVyw61vZG8gZGUgdGVtcG8gKHZlamEgdGltZSBzZXR0aW5ncykgZHVyYW50ZSBjYWRhIGNpY2xvIHF1ZSDDqSBzZXIgDQoraW52aXPDrXZlbC4gQSBjb25maWd1cmHDp8OjbyBpbmljaWFsIMOpIGRlIDQwLiANCisNCitTaG93IEN1cnNvcg0KKyANCitBbyBleGliaXIgbyBjb250ZcO6ZG8gZGEgdGVsYSAodmVqYSBvIGNvbWFuZG8gRElTUE1EKTogDQorIA0KKyAgICAgICBObw0KKyAgIE7Do28gbW9zdHJhciBvIGN1cnNvci4gDQorDQorICAgICAgIFllcw0KKyAgIE1vc3RyYXIgbyBjdXJzb3IuIA0KKyANCitFc3RhIGNvbmZpZ3VyYcOnw6NvIHRhbWLDqW0gcG9kZSBzZXIgYWx0ZXJhZG8gY29tIG8gY29tYW5kbyBDU1JWSVMuIEEgDQorY29uZmlndXJhw6fDo28gaW5pY2lhbCDDqSBZZXMuIA0KKyANCitDdXJzb3IgU3R5bGUgDQorIA0KK0FvIG1vc3RyYXIgbyBjdXJzb3IsIHJlcHJlc2VudMOhLWxvOg0KKw0KKyAgIFVuZGVybGluZQ0KKyAgIENvbSBwb250b3MgNyBlIDguDQorICAgDQorICAgQmxvY2sNCisgICBDb20gb3Mgb2l0byBwb250b3MuDQorIA0KK0VzdGEgY29uZmlndXJhw6fDo28gdGFtYsOpbSBwb2RlIHNlciBhbHRlcmFkbyBjb20gbyBjb21hbmRvIENTUlNJWkUuIA0KKyANCitCbGlua2luZyBDdXJzb3IgDQorIA0KK1F1YW5kbyBvIGN1cnNvciBlc3TDoSBhIHNlciBtb3N0cmFkbzoNCisgICBObw0KKyAgIERlaXhhci1zZSB2aXPDrXZlbCBvIHRlbXBvIHRvZG8uDQorICAgDQorICAgWWVzDQorICAgVG9ybsOhLWxvIGFsdGVybmFkYW1lbnRlLCB2aXPDrXZlaXMgZSBpbnZpc8OtdmVpcyBkZSBhY29yZG8gY29tIHVtICAgICANCisgICBpbnRlcnZhbG8gcHJlZGVmaW5pZG8uDQorDQorRXN0YSBjb25maWd1cmHDp8OjbyB0YW1iw6ltIHBvZGUgc2VyIGFsdGVyYWRvIGNvbSBvIGNvbWFuZG8gQ1NSQkxJTksuIA0KKyANCitDdXJzb3IgVmlzaWJsZSBUaW1lIA0KKyANCitRdWFuZG8gbyBjdXJzb3IgZXN0w6EgYSBzZXIgcGlzY291LCBlc3RhIGNvbmZpZ3VyYcOnw6NvIGVzcGVjaWZpY2EgbyANCitwZXLDrW9kbyBkZSB0ZW1wbyAodmVqYSB0aW1lIHNldHRpbmdzKSBkdXJhbnRlIGNhZGEgY2ljbG8gcXVlIGVzdMOhIGEgc2VyIA0KK3Zpc8OtdmVsLiBBIGNvbmZpZ3VyYcOnw6NvIGluaWNpYWwgw6kgZGUgNDAuIA0KKyANCitDdXJzb3IgSW52aXNpYmxlIFRpbWUgDQorUXVhbmRvIG8gY3Vyc29yIGVzdMOhIGEgc2VyIHBpc2NvdSwgZXN0YSBjb25maWd1cmHDp8OjbyBlc3BlY2lmaWNhIG8gDQorcGVyw61vZG8gZGUgdGVtcG8gKHZlamEgdGltZSBzZXR0aW5ncykgZHVyYW50ZSBjYWRhIGNpY2xvIHF1ZSDDqSBzZXIgDQoraW52aXPDrXZlbC4gQSBjb25maWd1cmHDp8OjbyBpbmljaWFsIMOpIGRlIDQwLiANCisNCitTaG93IEF0dHJpYnV0ZXMgDQorIA0KK0FvIGV4aWJpciBvIGNvbnRlw7pkbyBkYSB0ZWxhICh2ZWphIG8gY29tYW5kbyBESVNQTUQpOg0KKyAgIE5vDQorICAgTsOjbyBzdWJsaW5oYXIgb3MgY2FyYWN0ZXJlcyBlbSBkZXN0YXF1ZS4NCisgICANCisgICBZZXMNCisgICBTdWJsaW5oYXIgY2FyYWN0ZXJlcyBlbSBkZXN0YXF1ZS4NCisgDQorRXN0YSBjb25maWd1cmHDp8OjbyB0YW1iw6ltIHBvZGUgc2VyIGFsdGVyYWRvIGNvbSBvIGNvbWFuZG8gQVRUUlZJUy4gDQorIA0KK0JsaW5raW5nIEF0dHJpYnV0ZXMgDQorIA0KK1F1YW5kbyBvcyBjYXJhY3RlcmVzIGVtIGRlc3RhcXVlIHPDo28gc3VibGluaGFkb3M6DQorICAgDQorICAgTm8NCisgICBEZWl4ZSBvIGluZGljYWRvciB2aXPDrXZlbCBvIHRlbXBvIHRvZG8uDQorICAgDQorICAgWWVzDQorICAgRmHDp2EgbyBpbmRpY2Fkb3IgYWx0ZXJuYWRhbWVudGUgdmlzw612ZWlzIGUgaW52aXPDrXZlaXMgZGUgYWNvcmRvIGNvbSANCit1bSBpbnRlcnZhbG8gcHJlZGVmaW5pZG8uDQorIA0KK0VzdGEgY29uZmlndXJhw6fDo28gdGFtYsOpbSBwb2RlIHNlciBhbHRlcmFkbyBjb20gbyBjb21hbmRvIEFUVFJCTElOSy4gDQorIA0KK0F0dHJpYnV0ZXMgVmlzaWJsZSBUaW1lDQorIA0KK1F1YW5kbyBvIGNhcsOhY3RlciBzdWJsaW5oYWRvIGVtIGRlc3RhcXVlIHBpc2NhciwgZXN0YSBjb25maWd1cmHDp8OjbyANCitlc3BlY2lmaWNhIG8gcGVyw61vZG8gZGUgdGVtcG8gKHZlamEgdGltZSBzZXR0aW5ncykgZHVyYW50ZSBjYWRhIGNpY2xvIA0KK3F1ZSBlc3TDoSBhIHNlciB2aXPDrXZlbC4gQSBjb25maWd1cmHDp8OjbyBpbmljaWFsIMOpIGRlIDIwLiANCisgDQorQXR0cmlidXRlcyBJbnZpc2libGUgVGltZQ0KKyANCitRdWFuZG8gbyBjYXLDoWN0ZXIgc3VibGluaGFkbyBlbSBkZXN0YXF1ZSBwaXNjYXIsIGVzdGEgY29uZmlndXJhw6fDo28gDQorZXNwZWNpZmljYSBvIHBlcsOtb2RvIGRlIHRlbXBvICh2ZWphIHRpbWUgc2V0dGluZ3MpIGR1cmFudGUgY2FkYSBjaWNsbyANCitxdWUgw6kgc2VyIGludmlzw612ZWwuIEEgY29uZmlndXJhw6fDo28gaW5pY2lhbCDDqSBkZSA2MC4gDQorIA0KK0JsaW5raW5nIENhcGl0YWxzIA0KKyANCitBbyBleGliaXIgbyBjb250ZcO6ZG8gZGEgdGVsYSAodmVqYSBvIGNvbWFuZG8gRElTUE1EKToNCisNCisgICBObw0KKyAgIERlaXhhciBtYWnDunNjdWxhcyB2aXPDrXZlbCBvIHRlbXBvIHRvZG8uDQorICAgDQorICAgWWVzDQorICAgRmHDp2EgbGV0cmFzIG1hacO6c2N1bGFzIGFsdGVybmFkYW1lbnRlIHZpc8OtdmVpcyBlIGludmlzw612ZWlzIGRlIGFjb3JkbyANCitjb20gdW0gaW50ZXJ2YWxvIHByZWRlZmluaWRvLg0KKyANCitFc3RhIGNvbmZpZ3VyYcOnw6NvIHRhbWLDqW0gcG9kZSBzZXIgYWx0ZXJhZG8gY29tIG8gY29tYW5kbyBDQVBCTElOSy4gDQorIA0KK0NhcGl0YWxzIFZpc2libGUgVGltZSANCisgDQorUXVhbmRvIGFzIGxldHJhcyBtYWnDunNjdWxhcyBzw6NvIGRlc3RhY2FkYXMsIGVzdGEgY29uZmlndXJhw6fDo28gZXNwZWNpZmljYSANCitvIHBlcsOtb2RvIGRlIHRlbXBvICh2ZWphIHRpbWUgc2V0dGluZ3MpIGR1cmFudGUgY2FkYSBjaWNsbyBxdWUgZXN0w6NvIGEgDQorc2VyIHZpc8OtdmVpcy4gQSBjb25maWd1cmHDp8OjbyBpbmljaWFsIMOpIGRlIDYwLiANCisgDQorQ2FwaXRhbHMgSW52aXNpYmxlIFRpbWUgIA0KK1F1YW5kbyBhcyBsZXRyYXMgbWFpw7pzY3VsYXMgc8OjbyBkZXN0YWNhZGFzLCBlc3RhIGNvbmZpZ3VyYcOnw6NvIGVzcGVjaWZpY2EgDQorbyBwZXLDrW9kbyBkZSB0ZW1wbyAodmVqYSB0aW1lIHNldHRpbmdzKSBkdXJhbnRlIGNhZGEgY2ljbG8gcXVlIGVzdMOjbyBhIA0KK3NlciBpbnZpc8OtdmVsLiBBIGNvbmZpZ3VyYcOnw6NvIGluaWNpYWwgw6kgZGUgMjAuIA0KKyANCitCcmFpbGxlIEZpcm1uZXNzIA0KKyANCitBanVzdGUgYSBjb25zaXN0w6puY2lhIChvdSByaWdpZGV6KSBkb3MgcG9udG9zIGJyYWlsbGUuIFBvZGUgc2VyIGRlZmluaWRvIA0KK2NvbW86DQorDQorICAgICAgwrcgTcOheGltbw0KKyAgICAgIMK3IEFsdGENCisgICAgICDCtyBNw6lkaWENCisgICAgICDCtyBCYWl4bw0KKyAgICAgIMK3IE3DrW5pbW8NCisgICAgICAgDQorRXNzYSBwcmVmZXLDqm5jaWEgZXN0w6EgZGlzcG9uw612ZWwgc29tZW50ZSBzZSB1bSBkcml2ZXIgcXVlIHN1cG9ydGEgZWxlIA0KK2VzdMOhIHNlbmRvIHVzYWRvLiBBIGNvbmZpZ3VyYcOnw6NvIGluaWNpYWwgw6kgbcOpZGlhLiANCisgDQorV2luZG93IEZvbGxvd3MgUG9pbnRlciANCisgDQorQWp1c3RlIGEgc2Vuc2liaWxpZGFkZSBkb3MgcG9udG9zIGJyYWlsbGUgcGFyYSB0b2Nhci4gUG9kZSBzZXIgZGVmaW5pZG8gDQorY29tbzoNCisgICAgICDCtyBNw6F4aW1vDQorICAgICAgwrcgQWx0YQ0KKyAgICAgIMK3IE3DqWRpYQ0KKyAgICAgIMK3IEJhaXhvDQorICAgICAgwrcgTcOtbmltbw0KKyAgICAgICANCitFc3NhIHByZWZlcsOqbmNpYSBlc3TDoSBkaXNwb27DrXZlbCBzb21lbnRlIHNlIHVtIGRyaXZlciBxdWUgc3Vwb3J0YSBlbGUgDQorZXN0w6Egc2VuZG8gdXNhZG8uIEEgY29uZmlndXJhw6fDo28gaW5pY2lhbCDDqSBtw6lkaWEuIA0KKyANCitXaW5kb3cgRm9sbG93cyBQb2ludGVyIA0KKyANCitBbyBtb3ZlciBvIGRpc3Bvc2l0aXZvIGRlIGN1cnNvciAobW91c2UpOg0KKw0KKyAgIE5vDQorICAgTsOjbyBhcnJhc3RhciBhIGphbmVsYSBicmFpbGxlLg0KKyAgIA0KKyAgIFllcw0KKyAgIEFycmFzdGUgYSBqYW5lbGEgYnJhaWxsZS4NCisgDQorRXN0YSBwcmVmZXLDqm5jaWEgw6kgYXBlbmFzIGFwcmVzZW50YWRhIHNlIGEgb3DDp8OjbyBkZSBjb21waWxhw6fDo28gLS1lbmFibGUtDQorZ3BtIGZvaSBlc3BlY2lmaWNhZGEuIA0KKyANCitIaWdobGlnaHQgV2luZG93IA0KKyANCitBbyBtb3ZlciBhIGphbmVsYSBkbyBCcmFpbGxlOg0KKw0KKyAgIE5vDQorICAgTsOjbyBkYXIgZGVzdGFxdWUgYSDDoXJlYSBkYSB0ZWxhIG5vdmEuDQorDQorICAgWWVzDQorICAgRGVzdGFxdWUgZGEgw6FyZWEgbm92YSB0ZWxhLg0KKyANCitFc3RlIHJlY3Vyc28gcGVybWl0ZSBxdWUgdW0gb2JzZXJ2YWRvciBjb20gdmlzw6NvIHBhcmEgdmVyIG9uZGUgZXN0w6EgYSANCitqYW5lbGEgYnJhaWxsZSBlLCBwb3J0YW50bywgc2FiZXIgbyBxdWUgbyB1c3XDoXJpbyBlc3TDoSBsZW5kbyBlbSBicmFpbGxlLiANCitRdWFscXVlciBtb3ZpbWVudG8gZGEgamFuZWxhIGVtIGJyYWlsbGUgKG1hbnVhbCwgY29udHJvbGUgZG8gY3Vyc29yLCANCitldGMpLCBleGNldG8gcXVhbmRvIHNlIG1vdmUgZW0gcmVzcG9zdGEgYW8gcG9udGVpcm8gKG1vdXNlKSBtb3ZpbWVudG8gDQorKHZlamEgV2luZG93cyBGb2xsb3dzIFBvaW50ZXIpLCBmYXogY29tIHF1ZSBhIMOhcmVhIGRhIHRlbGEgDQorY29ycmVzcG9uZGVudGUgYW8gbm92byBsb2NhbCBkYSBqYW5lbGEgQnJhaWxsZSBzZXIgZGVzdGFjYWRhLiBTZSBhIA0KK3ByZWZlcsOqbmNpYSBTaG93IEF0dHJpYnV0ZXMgZXN0w6EgaGFiaWxpdGFkYSwgc29tZW50ZSBvIGNhcmFjdGVyZSANCitjb3JyZXNwb25kZW50ZSBhbyBjYW50byBzdXBlcmlvciBlc3F1ZXJkbyBkYSBqYW5lbGEgZG8gYnJhaWxsZSDDqSANCitkZXN0YWNhZG8uIA0KKyANCitBbGVydCBUdW5lcyANCisgDQorU2VtcHJlIHF1ZSB1bSBldmVudG8gc2lnbmlmaWNhdGl2bywgY29tIHVtYSBtZWxvZGlhIGFzc29jaWFkYSBvY29ycmUgDQorKHZlciBBbGVydGEgZGUgVHVuZXMpOg0KKw0KKyAgTm8NCisgIE7Do28gdG9jYXIgYSBtw7pzaWNhLg0KKw0KKyAgWWVzDQorICBUb2NhciBhIG3DunNpY2EuDQorIA0KK0VzdGEgY29uZmlndXJhw6fDo28gdGFtYsOpbSBwb2RlIHNlciBhbHRlcmFkbyBjb20gbyBjb21hbmRvIFRVTkVTLiBBIA0KK2NvbmZpZ3VyYcOnw6NvIGluaWNpYWwgw6kgWWVzLiANCisgDQorVHVuZSBEZXZpY2UgDQorIA0KK1RvY2FyIG3DunNpY2FzIGRlIGFsZXJ0YSBhdHJhdsOpcyBkZToNCisNCitCZWVwZXINCisNCitPIGFwaXRvIGludGVybm8gKGNvbnNvbGUgZ2VyYWRvciBkZSB0b20pLiBFc3RhIGNvbmZpZ3VyYcOnw6NvIMOpIHN1cG9ydGFkYSANCitlbSBMaW51eCwgbm8gT3BlbkJTRCwgbm8gRnJlZUJTRCBlIG5vIE5ldEJTRC4gw4kgc2VtcHJlIHNlZ3VybyBwYXJhIHVzYXIsIA0KK2VtYm9yYSBwb3NzYSBzZXIgdW0gcG91Y28gZnJhY28uIEVzdGUgZGlzcG9zaXRpdm8gbsOjbyBlc3TDoSBkaXNwb27DrXZlbCBzZSANCithIG9ww6fDo28gZGUgY29tcGlsYcOnw6NvIC0tZGlzYWJsZS1iaXBwZXItc3Vwb3J0IGZvaSBlc3BlY2lmaWNhZGEuDQorICANCitQQ00NCisNCitBIGludGVyZmFjZSBkaWdpdGFsIGRlIMOhdWRpbyBuYSBwbGFjYSBkZSBzb20uIEVzdGEgY29uZmlndXJhw6fDo28gw6kgDQorc3Vwb3J0YWRhIG5vIExpbnV4ICh2aWEgL2Rldi9kc3ApLCBubyBTb2xhcmlzICh2aWEgL2Rldi9hdWRpbyksIG5vIA0KK09wZW5CU0QgKHZpYSAvZGV2L2F1ZGlvMCksIHNvYnJlIEZyZWVCU0QgKHZpYSAvZGV2L2RzcCksIGUgbm8gTmV0QlNEIA0KKyh2aWEgL2Rldi9hdWRpbzApLiBFbGUgbsOjbyBmdW5jaW9uYSBxdWFuZG8gZXN0ZSBkaXNwb3NpdGl2byBqw6EgZXN0w6EgDQorc2VuZG8gdXNhZG8gcG9yIG91dHJvIGFwbGljYXRpdm8uIEVzdGUgZGlzcG9zaXRpdm8gbsOjbyBlc3TDoSBkaXNwb27DrXZlbCANCitzZSBhIG9ww6fDo28gZGUgY29tcGlsYcOnw6NvIC0tZGlzYWJsZS1wY20tc3VwcG9ydCBmb2kgZXNwZWNpZmljYWRhLg0KKyAgIA0KK01JREkNCisNCitPIE11c2ljYWwgSW5zdHJ1bWVudCBEaWdpdGFsIEludGVyZmFjZSBuYSBwbGFjYSBkZSBzb20gcXVlIGVzdMOhIGRlZmluaWRhIA0KK8OpIGNvbXBhdMOtdmVsIGNvbSBMaW51eCAoYXRyYXbDqXMgZG8gL2Rldi9zZXF1ZW5jZXIpLiBFbGUgbsOjbyBmdW5jaW9uYSANCitxdWFuZG8gZXN0ZSBkaXNwb3NpdGl2byBqw6EgZXN0w6Egc2VuZG8gdXNhZG8gcG9yIG91dHJvIGFwbGljYXRpdm8uIEVzdGUgDQorZGlzcG9zaXRpdm8gbsOjbyBlc3TDoSBkaXNwb27DrXZlbCBzZSBhIG9ww6fDo28gZGUgY29tcGlsYcOnw6NvIC0tZGlzYWJsZS1taWRpLQ0KK3N1cHBvcnQgZm9pIGVzcGVjaWZpY2FkYS4NCisgICANCitGTQ0KKw0KK08gc2ludGV0aXphZG9yIGRlIEZNIGVtIHVtIGNhcnTDo28gZGUgQWRMaWIsIE9QTDMsIFNvdW5kIEJsYXN0ZXIsIG91IG8gDQorZXF1aXZhbGVudGUgZGUgc29tLiBFc3RhIGNvbmZpZ3VyYcOnw6NvIMOpIHN1cG9ydGFkYSBlbSBMaW51eC4gT3MgDQorcmVzdWx0YWRvcyBzw6NvIGltcHJldmlzw612ZWlzIGUgcG90ZW5jaWFsbWVudGUgbsOjbyBtdWl0byBib25zLCBzZSBmb3IgDQordXNhZG8gY29tIHVtYSBwbGFjYSBkZSBzb20gcXVlIG7Do28gc3Vwb3J0YSBlc3NlIHJlY3Vyc28uIEVzdGUgDQorZGlzcG9zaXRpdm8gbsOjbyBlc3TDoSBkaXNwb27DrXZlbCBzZSBhIG9ww6fDo28gZGUgY29tcGlsYcOnw6NvIC0tZGlzYWJsZS1mbS0NCitzdXBwb3J0IGZvaSBlc3BlY2lmaWNhZGEuDQorDQorQSBjb25maWd1cmHDp8OjbyBpbmljaWFsIMOpIEJlZXBlciBzb2JyZSBhcyBwbGF0YWZvcm1hcyBxdWUgc3Vwb3J0YW0sIGUgUENNIA0KK3NvYnJlIGFzIHBsYXRhZm9ybWFzIHF1ZSBuw6NvIG8gZmF6ZW0uDQorIA0KK1BDTSBWb2x1bWUNCisgDQorU2UgYSBpbnRlcmZhY2UgZGUgw6F1ZGlvIGRpZ2l0YWwgZGEgcGxhY2EgZGUgc29tIGVzdMOhIHNlbmRvIHVzYWRvIHBhcmEgDQordG9jYXIgYXMgbcO6c2ljYXMgYWxlcnRhLCBlc3RhIGNvbmZpZ3VyYcOnw6NvIGVzcGVjaWZpY2EgbyB2b2x1bWUgKGNvbW8gdW1hIA0KK3BvcmNlbnRhZ2VtIGRvIG3DoXhpbW8pIGVtIHF1ZSBlc3TDo28gYSBzZXIgdG9jYWRvLiBBIGNvbmZpZ3VyYcOnw6NvIGluaWNpYWwgDQorw6kgZGUgNzAuDQorDQorTUlESSBWb2x1bWUNCisgDQorU2UgbyBNdXNpY2FsIEluc3RydW1lbnQgRGlnaXRhbCBJbnRlcmZhY2UgKE1JREkpIGRhIHBsYWNhIGRlIHNvbSBlc3TDoSANCitzZW5kbyB1c2FkbyBwYXJhIHRvY2FyIGFzIG3DunNpY2FzIGFsZXJ0YSwgZXN0YSBjb25maWd1cmHDp8OjbyBlc3BlY2lmaWNhIG8gDQordm9sdW1lIChjb21vIHVtYSBwb3JjZW50YWdlbSBkbyBtw6F4aW1vKSBlbSBxdWUgZXN0w6NvIGEgc2VyIHRvY2Fkby4gQSANCitjb25maWd1cmHDp8OjbyBpbmljaWFsIMOpIGRlIDcwLiANCisgDQorTUlESSBJbnN0cnVtZW50DQorIA0KK1NlIG8gTXVzaWNhbCBJbnN0cnVtZW50IERpZ2l0YWwgSW50ZXJmYWNlIChNSURJKSBkYSBwbGFjYSBkZSBzb20gZXN0w6EgDQorc2VuZG8gdXNhZGEgcGFyYSB0b2NhciBhcyBtw7pzaWNhcyBhbGVydGEsIGVzdGEgY29uZmlndXJhw6fDo28gZXNwZWNpZmljYSANCitxdWFsIG8gaW5zdHJ1bWVudG8gYSBzZXIgdXRpbGl6YWRvICh2ZXIgTUlESSBUYWJsZSBJbnN0cnVtZW50KS4gQSANCitjb25maWd1cmHDp8OjbyBpbmljaWFsIMOpIEFjb3VzdGljIEdyYW5kIFBpYW5vLiANCisgDQorRk0gVm9sdW1lDQorIA0KK1NlIG8gc2ludGV0aXphZG9yIEZNIGRhIHBsYWNhIGRlIHNvbSBlc3TDoSBzZW5kbyB1c2FkbyBwYXJhIHRvY2FyIGFzIA0KK23DunNpY2FzIGFsZXJ0YSwgZXN0YSBjb25maWd1cmHDp8OjbyBlc3BlY2lmaWNhIG8gdm9sdW1lIChjb21vIHVtYSANCitwb3JjZW50YWdlbSBkbyBtw6F4aW1vKSBlbSBxdWUgZXN0w6NvIGEgc2VyIHRvY2Fkby4gQSBjb25maWd1cmHDp8OjbyBpbmljaWFsIA0KK8OpIGRlIDcwLiANCisNCitBbGVydCBEb3RzDQorIA0KK1NlbXByZSBxdWUgdW0gZXZlbnRvIHNpZ25pZmljYXRpdm8gYXNzb2NpYWRvIGNvbSB1bSBwYWRyw6NvIGRlIHBvbnRvcyANCitvY29ycmUgKHZlciBBbGVydGEgZGUgVHVuZXMpOg0KKw0KKyAgIE5vDQorICAgTsOjbyBleGliaXIgbyBwYWRyw6NvIGRlIHBvbnRvcy4NCisNCisgICBZZXMNCisgICBSZXN1bWlkYW1lbnRlIGV4aWJpciBvIHBhZHLDo28gZGUgcG9udG9zLg0KKyANCitTZSBtZWxvZGlhcyBkZSBhbGVydGEgc8OjbyBwYXJhIHNlciBqb2dhZG8gKHZlamEgbyBjb21hbmRvIFRVTkVTIGUgbyANCitBbGVydGEgZGUgVHVuZXMpLCBzZSB1bWEgbcO6c2ljYSB0ZW0gc2lkbyBhc3NvY2lhZG8gY29tIG8gZXZlbnRvLCBlIHNlIG8gDQorZGlzcG9zaXRpdm8gZGEgY2Fuw6fDo28gc2VsZWNpb25hZG8gcG9kZSBzZXIgYWJlcnRvLCBlbnTDo28sIA0KK2luZGVwZW5kZW50ZW1lbnRlIGRhIGNvbmZpZ3VyYcOnw6NvIGRlc3NhIHByZWZlcsOqbmNpYSwgbyBwYWRyw6NvIGRlIHBvbnRvcyANCituw6NvIHNlcsOhIGV4aWJpZG8uIA0KKyANCitBbGVydCBNZXNzYWdlcyANCisgDQorU2VtcHJlIHF1ZSB1bSBldmVudG8gc2lnbmlmaWNhdGl2bywgY29tIHVtYSBtZW5zYWdlbSBhc3NvY2lhZGEgb2NvcnJlIA0KKyh2ZXIgQWxlcnRhIGRlIFR1bmVzKToNCisNCisgICBObw0KKyAgIE7Do28gbW9zdHJhciBhIG1lbnNhZ2VtLg0KKw0KKyAgIFllcw0KKyAgIE1vc3RyYXIgYSBtZW5zYWdlbS4NCisgDQorU2UgYXMgbWVuc2FnZW5zIGRlIGFsZXJ0YSBzw6NvIHRvY2FkYXMgKHZlamEgbyBjb21hbmRvIFRVTkVTIGUgYSANCitwcmVmZXLDqm5jaWEgQWxlcnRhIGRlIFR1bmVzKSwgc2UgdW1hIG3DunNpY2EgdGVtIHNpZG8gYXNzb2NpYWRvIGNvbSBvIA0KK2V2ZW50bywgZSBzZSBvIGRpc3Bvc2l0aXZvIGRlIGFqdXN0ZSBzZWxlY2lvbmFkbyBwb2RlIHNlciBhYmVydG8sIG91IHNlIA0KK28gYWxlcnRhIHBhZHLDtWVzIGRlIHBvbnRvcyBxdWUgZGV2ZW0gc2VyIGV4aWJpZGFzIChjb25zdWx0ZSBBbGVydCBEb3RzKSANCitlIHNlIHVtIHBhZHLDo28gZGUgcG9udG9zIHRlbSBzaWRvIGFzc29jaWFkbyBjb20gbyBldmVudG8sIGVudMOjbywgDQoraW5kZXBlbmRlbnRlbWVudGUgZGEgY29uZmlndXJhw6fDo28gZGVzc2EgcHJlZmVyw6puY2lhLCBhIG1lbnNhZ2VtIG7Do28gw6kgDQorZXhpYmlkYS4gDQorIA0KK1NheS1MaW5lIE1vZGUgDQorIA0KK0FvIHVzYXIgbyBjb21hbmRvIFNBWV9MSU5FOg0KKw0KKyAgIEltbWVkaWF0ZQ0KKyAgIERlc2NhcnRhciBkaXNjdXJzbyBwZW5kZW50ZXMuDQorDQorICAgRW5xdWV1ZQ0KKyAgIE7Do28gZGVzY2FydGFyIHBlbmRlbnRlcyBkaXNjdXJzby4NCisgDQorQSBjb25maWd1cmHDp8OjbyBpbmljaWFsIMOpIGltbWVkaWF0ZS4gDQorIA0KK0F1dG9zcGVhayANCisNCisgICBObw0KKyAgIFPDsyBmYWxhciBxdWFuZG8gZm9yIHNvbGljaXRhZG8gYSBmYXrDqi1sby4NCisNCisgICBZZXMNCisgICBBdXRvbWF0aWNhbWVudGUgZmFsYXI6DQorDQorICAgICAgwrcgQSBub3ZhIGxpbmhhIHF1YW5kbyBhIGphbmVsYSDDqSBtb3ZpZGEgdmVydGljYWxtZW50ZSBicmFpbGxlLg0KKyAgICAgIMK3IENhcmFjdGVyZXMgcXVlIHPDo28gaW5zZXJpZG9zIG91IGV4Y2x1w61kb3MuDQorICAgICAgwrcgTyBjYXLDoWN0ZXIgYW8gcXVhbCBvIGN1cnNvciDDqSBtb3ZpZG8uDQorIA0KK0VzdGEgY29uZmlndXJhw6fDo28gdGFtYsOpbSBwb2RlIHNlciBhbHRlcmFkbyBjb20gbyBjb21hbmRvIEFVVE9TUEVBSy4gQSANCitjb25maWd1cmHDp8OjbyBpbmljaWFsIMOpIE5vLiANCisgDQorU3BlZWNoIFJhdGUNCisgDQorQWp1c3RhciBhIHZlbG9jaWRhZGUgZGUgZmFsYSAoMCDDqSBvIG1haXMgbGVudG8sIDIwIMOpIG8gbWFpcyByw6FwaWRvKS4gDQorRXNzYSBwcmVmZXLDqm5jaWEgZXN0w6EgZGlzcG9uw612ZWwgc29tZW50ZSBzZSB1bSBkcml2ZXIgcXVlIHN1cG9ydGEgZWxlIA0KK2VzdMOhIHNlbmRvIHVzYWRvLiBFc3RhIGNvbmZpZ3VyYcOnw6NvIHRhbWLDqW0gcG9kZSBzZXIgYWx0ZXJhZG8gcGVsb3MgDQorY29tYW5kb3MgU0FZX1NMT1dFUi9TQVlfRkFTVEVSLiBBIGNvbmZpZ3VyYcOnw6NvIGluaWNpYWwgw6kgMTAuIA0KKyANCitTcGVlY2ggUGl0Y2gNCisgDQorQWp1c3RlIG8gdm9sdW1lIGRhIHZveiAoMCDDqSBvIG1haXMgYmFpeG8sIDIwIMOpIG8gbWFpcyBhbHRvKS4gRXNzYSANCitwcmVmZXLDqm5jaWEgZXN0w6EgZGlzcG9uw612ZWwgc29tZW50ZSBzZSB1bSBkcml2ZXIgcXVlIHN1cG9ydGEgZWxlIGVzdMOhIA0KK3NlbmRvIHVzYWRvLiBFc3RhIGNvbmZpZ3VyYcOnw6NvIHRhbWLDqW0gcG9kZSBzZXIgYWx0ZXJhZG8gY29tIG9zIGNvbWFuZG9zIA0KK1NBWV9TT0ZURVIvU0FZX0xPVURFUi4gQSBjb25maWd1cmHDp8OjbyBpbmljaWFsIMOpIDEwLiANCisgDQorU3BlZWNoIFBpdGNoDQorIA0KK0FqdXN0YXIgbyB0b20gZGUgdm96ICgwIMOpIG8gbWVub3IgZSBvIDIwIMOpIG8gbWFpcyBhbHRvKS4gRXNzYSANCitwcmVmZXLDqm5jaWEgZXN0w6EgZGlzcG9uw612ZWwgc29tZW50ZSBzZSB1bSBkcml2ZXIgcXVlIHN1cG9ydGEgZWxlIGVzdMOhIA0KK3NlbmRvIHVzYWRvLiBBIGNvbmZpZ3VyYcOnw6NvIGluaWNpYWwgw6kgMTAuIA0KKyANCitTcGVlY2ggUHVuY3R1YXRpb24gDQorIA0KK0FqdXN0ZSBhIHF1YW50aWRhZGUgZGUgcG9udHVhw6fDo28gcXVlIMOpIGZhbGFkby4gUG9kZSBzZXIgZGVmaW5pZG8gY29tbzoNCisNCisgICAgICDCtyBBbGwNCisgICAgICDCtyBTb21lDQorICAgICAgwrcgQWxsDQorDQorRXNzYSBwcmVmZXLDqm5jaWEgZXN0w6EgZGlzcG9uw612ZWwgc29tZW50ZSBzZSB1bSBkcml2ZXIgcXVlIHN1cG9ydGEgZWxlIA0KK2VzdMOhIHNlbmRvIHVzYWRvLiBBIGNvbmZpZ3VyYcOnw6NvIGluaWNpYWwgw6kgc29tZS4gDQorIA0KK1N0YXR1cyBTdHlsZQ0KKyANCitFc3RhIGNvbmZpZ3VyYcOnw6NvIGVzcGVjaWZpY2EgbyBjYW1pbmhvIHF1ZSBhcyBjw6lsdWxhcyBkZSBlc3RhZG8gZXN0w6NvIGEgDQorc2VyIHV0aWxpemFkb3MuIFZvY8OqIG7Do28gZGV2ZXJpYSBwcmVjaXNhbSBkZSB0b2NhciBjb20gbmVsYXMuIElzc28gDQorcGVybWl0ZSBxdWUgb3MgZGVzZW52b2x2ZWRvcmVzIEJSTFRUWSBwYXJhIHRlc3RhciBhcyBjb25maWd1cmHDp8O1ZXMgZGUgDQorc3RhdHVzIGRhIHBpbGhhIHBhcmEgZGlzcGxheSBicmFpbGxlIHF1ZSBlbGVzIHJlYWxtZW50ZSBuw6NvIHTDqm0uIA0KKyANCitOb25lDQorIA0KK07Do28gdXNlIGFzIGPDqWx1bGFzIGRlIHN0YXR1cy4gRXNzYSBjb25maWd1cmHDp8OjbyDDqSBzZW1wcmUgc2VndXJvLCBtYXMgDQordGFtYsOpbSDDqSBjb21wbGV0YW1lbnRlIGluw7p0aWwuIA0KKyANCitBbHZhDQorDQorQXMgY8OpbHVsYXMgc3RhdHVzIGNvbnRlcjoNCisNCisgICAgICAxIC0gQSBsb2NhbGl6YcOnw6NvIGRvIGN1cnNvciAodmVqYSBhYmFpeG8pLg0KKyAgICAgIDIgLSBBIGxvY2FsaXphw6fDo28gZG8gY2FudG8gc3VwZXJpb3IgZXNxdWVyZG8gZGEgamFuZWxhIGRvIGJyYWlsbGUgDQorKHZlciBhYmFpeG8pLg0KKyAgICAgIDMgLSBVbWEgY2FydGEgaW5kaWNhbmRvIG8gZXN0YWRvIGRlIEJSTFRUWS4gDQorDQorTmEgb3JkZW0gZGUgcHJlY2Vkw6puY2lhOg0KKw0KKyAgICAgIGENCisgICAgICBUZWxhIGF0cmlidXRvcyBlc3TDo28gYSBzZXIgbW9zdHJhZG9zICh2ZWphIG8gY29tYW5kbyBESVNQTUQpLg0KKyAgICAgIA0KKyAgICAgIGYNCisgICAgICBBIGltYWdlbSBkYSB0ZWxhIMOpIGNvbmdlbGFkYSAodmVqYSBvIGNvbWFuZG8gRlJFRVpFKS4NCisgICAgICANCisgICAgICBmDQorICAgICAgTyBjdXJzb3IgZXN0w6Egc2VuZG8gY29udHJvbGFkbyAodmVqYSBvIGNvbWFuZG8gQ1NSVFJLKS4NCisgICAgICANCisgICAgICBibGFuaw0KKyAgICAgIE5hZGEgZGUgZXNwZWNpYWwuDQorIA0KK0EgbG9jYWxpemHDp8OjbyBkbyBjdXJzb3IgZSBhIGphbmVsYSBicmFpbGxlIHPDo28gYXByZXNlbnRhZG9zIGRlIHVtYSANCittYW5laXJhIGludGVyZXNzYW50ZS4gT3MgcG9udG9zIDEgYSA2IHJlcHJlc2VudGFtIG8gbsO6bWVybyBkYSBsaW5oYSBjb20gDQordW1hIGNhcnRhIGRlIGEgKHBhcmEgMSkgcG9yIHkgKHBhcmEgMjUpLiBPcyBwb250b3MgNyBlIDggKG9zIGRvaXMgZXh0cmEgDQorbmEgcGFydGUgaW5mZXJpb3IpIHJlcHJlc2VudGFtIG8gbsO6bWVybyBqYW5lbGEgaG9yaXpvbnRhbCBicmFpbGxlIGNvbW8gDQorc2VndWU6DQorDQorICAgICAgTm8gRG90cw0KK0EgcHJpbWVpcmEgamFuZWxhICjDoCBlc3F1ZXJkYSkuDQorICAgICAgDQorICAgICAgRG90IDcNCisgICAgICBBIHNlZ3VuZGEgamFuZWxhLg0KKyAgICAgIA0KKyAgICAgIERvdCA4DQorICAgICAgQSB0ZXJjZWlyYSBqYW5lbGEuDQorICAgICAgDQorICAgICAgRG90cyA3IGUgOA0KKyAgICAgIEEgcXVhcnRhIGphbmVsYS4NCisNCitFbSBhbWJvcyBvcyBjYXNvcywgb3MgaW5kaWNhZG9yZXMgZ3VhcmRhZG9zOiBhIGxpbmhhIDI2IMOpIHJlcHJlc2VudGFkbyANCitwZWxhIGxldHJhIEEsIGUgYSBxdWludGEgamFuZWxhIGhvcml6b250YWwgYnJhaWxsZSDDqSByZXByZXNlbnRhZG8gcG9yIA0KK25lbmh1bSBwb250bywgbmEgcGFydGUgaW5mZXJpb3IuICANCisgDQorVGllbWFuIA0KKyANCitBcyBjw6lsdWxhcyBkZSBzdGF0dXMgZGV2ZW0gY29udGVyOg0KKw0KKyAgICAgIDEtMjogQXMgY29sdW5hcyAoY29udGFuZG8gYSBwYXJ0aXIgMSkgZG8gY3Vyc29yIChjb21vIG1vc3RyYWRvIG5hIA0KK21ldGFkZSBzdXBlcmlvciBkYXMgY8OpbHVsYXMpIGUgbm8gY2FudG8gc3VwZXJpb3IgZXNxdWVyZG8gZGEgamFuZWxhIGRvIA0KK2JyYWlsbGUgKG1vc3RyYWRvIG5hIG1ldGFkZSBpbmZlcmlvciBkYXMgY8OpbHVsYXMpLg0KKyAgICAgICANCisgICAgICAzLTQ6IEFzIGxpbmhhcyAoY29udGFuZG8gYSBwYXJ0aXIgMSkgZG8gY3Vyc29yIChjb21vIG1vc3RyYWRvIG5hIA0KK21ldGFkZSBzdXBlcmlvciBkYXMgY8OpbHVsYXMpIGUgbm8gY2FudG8gc3VwZXJpb3IgZXNxdWVyZG8gZGEgamFuZWxhIGRvIA0KK2JyYWlsbGUgKG1vc3RyYWRvIG5hIG1ldGFkZSBpbmZlcmlvciBkYXMgY8OpbHVsYXMpLg0KKyAgICAgICANCisgICAgICA1OiBDYWRhIHBvbnRvIGluZGljYSBzZSB1bSByZWN1cnNvIMOpIGF0aXZhZG8gY29tbyBzZSBzZWd1ZToNCisNCisgICAgICBEb3QgMTogQSBpbWFnZW0gZGEgdGVsYSDDqSBjb25nZWxhZGEgKHZlamEgbyBjb21hbmRvIEZSRUVaRSkuDQorICAgICAgIA0KKyAgICAgIERvdCAyOiBhdHJpYnV0b3MgZGEgdGVsYSBlc3TDo28gc2VuZG8gZXhpYmlkb3MgKHZlamEgbyBjb21hbmRvIA0KK0RJU1BNRCkuDQorICAgICAgIA0KKyAgICAgIERvdCAzOiBBbGVydGEgbcO6c2ljYXMgZXN0w6NvIHNlbmRvIHRvY2FkYXMgKHZlamEgbyBjb21hbmRvIFRVTkVTKS4NCisgICAgICAgDQorICAgICAgRG90IDQ6IE8gY3Vyc29yIGVzdMOhIHNlbmRvIG1vc3RyYWRvICh2ZWphIG8gY29tYW5kbyBDU1JWSVMpLg0KKyAgICAgICANCisgICAgICBEb3QgNTogTyBjdXJzb3Igw6kgdW0gYmxvY28gc8OzbGlkbyAodmVqYSBvIGNvbWFuZG8gQ1NSU0laRSkuDQorICAgICAgIA0KKyAgICAgIERvdCA2OiBPIGN1cnNvciBlc3TDoSBwaXNjYW5kbyAodmVqYSBvIGNvbWFuZG8gQ1NSQkxJTkspLg0KKyAgICAgICANCisgICAgICBEb3QgNzogTyBjdXJzb3IgZXN0w6EgYSBzZXIgY29udHJvbGFkbyAodmVqYSBvIGNvbWFuZG8gQ1NSVFJLKS4NCisgICAgICAgDQorICAgICAgRG90IDg6IEEgamFuZWxhIHZhaSBkZXNsaXphciBicmFpbGxlICh2ZWphIG8gY29tYW5kbyBTTElERVdJTikuDQorIA0KK1Bvd2VyQnJhaWxsZSA4MCANCisgDQorQXMgY8OpbHVsYXMgc3RhdHVzIGNvbnRlcjoNCisNCisxOiBBIGxpbmhhIChjb250YW5kbyBhIHBhcnRpciBkZSAxKSBjb3JyZXNwb25kZW50ZSDDoCBwYXJ0ZSBzdXBlcmlvciANCitkYSBqYW5lbGEgZW0gYnJhaWxsZS4gT3MgZMOtZ2l0b3MgZGFzIGRlemVuYXMgw6kgbW9zdHJhZG8gbmEgbWV0YWRlIA0KK3N1cGVyaW9yIGRhIHBpbGhhLCBlIG9zIGTDrWdpdG9zIGRhcyB1bmlkYWRlcyDDqSBhcHJlc2VudGFkYSBuYSANCittZXRhZGUgaW5mZXJpb3IgZGEgY8OpbHVsYS4NCisgDQorR2VuZXJpYw0KKyANCitFc3RhIGRlZmluacOnw6NvIHBhc3NhIHVtIG1vbnRlIGRlIGluZm9ybWHDp8O1ZXMgcGFyYSBvIGRyaXZlciBicmFpbGxlLCBlIG8gDQorZHJpdmVyIGRlY2lkZSBmb3JtYSBkZSBhcHJlc2VudMOhLWxvLg0KKyAgIA0KK01EViANCisgDQorQXMgY8OpbHVsYXMgZGUgc3RhdHVzIGRldmVtIGNvbnRlcjoNCisNCisgICAgICAxLTI6IEEgbG9jYWxpemHDp8OjbyBkbyBjYW50byBzdXBlcmlvciBlc3F1ZXJkbyBkYSBqYW5lbGEgZG8gYnJhaWxsZS4NCisgICAgICBBIGxpbmhhIChjb250YW5kbyBhIHBhcnRpciBkZSAxKSDDqSBtb3N0cmFkbyBuYSBtZXRhZGUgc3VwZXJpb3IgZGFzDQorICAgICAgY8OpbHVsYXMsIGUgbmEgY29sdW5hIChjb250YW5kbyBhIHBhcnRpciBkZSAxKSDDqSBtb3N0cmFkbyBuYSBtZXRhZGUNCisgICAgICBpbmZlcmlvciBkYXMgY8OpbHVsYXMuDQorIA0KK1ZveWFnZXINCisgDQorQXMgY8OpbHVsYXMgZGUgc3RhdHVzIGRldmVtIGNvbnRlcjoNCisNCisxOiBBIGxpbmhhIChjb250YW5kbyBhIHBhcnRpciBkZSAxKSBjb3JyZXNwb25kZW50ZSDDoCBwYXJ0ZSBzdXBlcmlvciANCitkYSBqYW5lbGEgYnJhaWxsZSAodmVyIGJlbG93KS4NCisNCisyOiBBIGxpbmhhIChjb250YW5kbyBhIHBhcnRpciBkZSAxKSBvbmRlIG8gY3Vyc29yIGVzdMOhICh2ZWphIA0KK2JlbG93KS4NCiszOiBTZSBhIHRlbGEgZXN0w6EgY29uZ2VsYWRhICh2ZWphIG8gY29tYW5kbyBGUkVFWkUpLCBkZXBvaXMgYSBsZXRyYSANCitGLiBTZSBuw6NvIGZvciwgZW50w6NvIGEgY29sdW5hIChjb250YW5kbyBhIHBhcnRpciBkZSAxKSBvbmRlIGVzdMOhIG8gDQorY3Vyc29yICh2ZWphIGJlbG93KS4NCisNCitPcyBuw7ptZXJvcyBkZSBsaW5oYXMgZSBjb2x1bmFzIHPDo28gbW9zdHJhZG9zIG9zIG7Dum1lcm9zIGRlIGRvaXMgZMOtZ2l0b3MgDQorZW0gdW1hIMO6bmljYSBjw6lsdWxhLiBPcyBkw61naXRvcyBkYXMgZGV6ZW5hcyBzw6NvIG1vc3RyYWRvcyBuYSBtZXRhZGUgDQorc3VwZXJpb3IgZGEgcGlsaGEsIGUgb3MgZMOtZ2l0b3MgZGFzIHVuaWRhZGVzIHPDo28gYXByZXNlbnRhZGFzIG5hIG1ldGFkZSANCitpbmZlcmlvciBkYSBjw6lsdWxhLg0KKw0KK0EgY29uZmlndXJhw6fDo28gaW5pY2lhbCBkbyBkcml2ZXIgZGUgZGlzcGxheSBCcmFpbGxlIMOpIGRlcGVuZGVudGUuDQorIA0KK1RleHQgVGFibGUNCisgDQorU2VsZWNpb25lIGEgdGFiZWxhIGRlIHRleHRvLiBWZXIgc2XDp8OjbyBkZSBUYWJlbGFzIGRlIFRleHRvIHBhcmEgbWFpcyANCitkZXRhbGhlcy4gVmVqYSBhIG9ww6fDo28gLXQgcGFyYSBhIGNvbmZpZ3VyYcOnw6NvIGluaWNpYWwuIEVzdGEgcHJlZmVyw6puY2lhIA0KK27Do28gw6kgc2Fsdm8uIA0KKyANCitBdHRyaWJ1dGVzIFRhYmxlDQorIA0KK1NlbGVjaW9uZSBhIHRhYmVsYSBkZSBhdHJpYnV0b3MuIFZlciBUYWJlbGEgZGUgQXRyaWJ1dG9zLiBWZWphIGEgb3DDp8OjbyANCitkZSBsaW5oYSBkZSBjb21hbmRvIC10IHBhcmEgYSBjb25maWd1cmHDp8OjbyBpbmljaWFsLiBFc3RhIHByZWZlcsOqbmNpYSBuw6NvIA0KK8OpIHNhbHZvLiANCisgDQorQ29udHJhY3Rpb24gVGFibGUNCisgDQorU2VsZWNpb25lIGEgdGFiZWxhIGRlIGNvbnRyYcOnw6NvLiBWZXIgVGFiZWxhIGRlIENvbnRyYcOnw6NvLiBDb25zdWx0ZSBhIA0KK2xpbmhhIGRlIGNvbWFuZG8gLWMgcGFyYSBhIGNvbmZpZ3VyYcOnw6NvIGluaWNpYWwuIEVzdGEgcHJlZmVyw6puY2lhIG7Do28gw6kgDQorc2Fsdm8uIA0KKyANCitLZXkgVGFibGUgDQorU2VsZWNpb25lIGEgdGFiZWxhIGNoYXZlLiBWZXIgVGFiZWxhcyBkZSBUZWNsYXMuIENvbnN1bHRlIGEgbGluaGEgZGUgDQorY29tYW5kbyAtayBwYXJhIGEgY29uZmlndXJhw6fDo28gaW5pY2lhbC4gRXN0YSBwcmVmZXLDqm5jaWEgbsOjbyDDqSBzYWx2by4gDQorIA0KK05vdGFzOg0KKw0KKyAgICAgIMK3IFRvZG9zIG9zIHBhcsOibWV0cm9zIGRlIHRlbXBvIGVtIGNlbnTDqXNpbW9zIGRlIHNlZ3VuZG8uIEVsZXMgc8Ojbw0KKyAgICAgIG3Dumx0aXBsb3MgZG8gaW50ZXJ2YWxvIGRhIGphbmVsYSBkZSBhdHVhbGl6YcOnw6NvIGJyYWlsbGUgKHZlamEgYQ0KKyAgICAgIGxpbmhhIGRlIGNvbWFuZG8gLXUpIGRlbnRybyBkYSBmYWl4YSBkZSAxIGEgMTAwLg0KKyAgICAgICANCis1LjYgU3RhdHVzIGRvIERpc3BsYXkNCisgDQorTyBzdGF0dXMgZG8gZGlzcGxheSDDqSB1bSByZXN1bW8gZG8gZXN0YWRvIGF0dWFsIEJSTFRUWSwgcXVlIHNlIGVuY2FpeGEgDQordG90YWxtZW50ZSBkZW50cm8gZGEgamFuZWxhIGRvIGJyYWlsbGUuIEFsZ3VucyBkaXNwbGF5cyBicmFpbGxlIHTDqm0gdW0gDQorY29uanVudG8gZGUgY8OpbHVsYXMgZGUgc3RhdHVzIHF1ZSBzw6NvIHVzYWRvcyBwYXJhIGV4aWJpciBwZXJtYW5lbnRlbWVudGUgDQorYWxndW1hcyBkZXNzYXMgaW5mb3JtYcOnw7VlcywgYmVtIGNvbW8gKGNvbnN1bHRlIGEgZG9jdW1lbnRhw6fDo28gcGFyYSBvIA0KK2RyaXZlciBkbyBkaXNwbGF5KS4gT3MgZGFkb3MgYXByZXNlbnRhZG9zIHBvciBlc3RlIGRpc3BsYXkgbsOjbyBzw6NvIA0KK2VzdMOhdGljb3MsIGUgcG9kZW0gc2VyIGFsdGVyYWRhcyBhIHF1YWxxdWVyIG1vbWVudG8sIGVtIHJlc3Bvc3RhIGEgdGVsYSANCitkZSBhdHVhbGl6YcOnw7VlcyBlL291IGNvbWFuZG9zIEJSTFRUWS4gDQorIA0KK1VzZSBvIGNvbWFuZG8gSU5GTyBwYXJhIGFsdGVybmFyIHBhcmEgYSBleGliacOnw6NvIGRlIHN0YXR1cywgZSB1c8OhLWxvIA0KK25vdmFtZW50ZSBwYXJhIHJldG9ybmFyIHBhcmEgYSB0ZWxhLiBPIGxheW91dCBkYXMgaW5mb3JtYcOnw7VlcyBjb250aWRhcyANCitlc3TDoSBkZXBlbmRlbnRlIGRvIHRhbWFuaG8gZGEgamFuZWxhIGRvIGJyYWlsbGUuIA0KKyANCis1LjYuMSBEaXNwbGF5IGNvbSAyMSBjw6lsdWxhcyBvdSBtYWlzIA0KKyANCitQbmV1bcOhdGljb3MgY3VydGEgdMOqbSBzaWRvIHV0aWxpemFkb3MsIGFwZXNhciBkZSBzZXJlbSB1bSB0YW50byANCitlbmlnbcOhdGljYSwgYSBmaW0gZGUgbW9zdHJhciBvIGxheW91dCBkYSBjb2x1bmEgcHJlY2lzYS4NCisgICAgICB3eDp3eSBjeDpjeSB2dCB0Y21mZHUNCisNCit3eDp3eSANCitBIGNvbHVuYSBlIGxpbmhhIChjb250YW5kbyBhIHBhcnRpciBkZSAxKSBuYSB0ZWxhIGNvcnJlc3BvbmRlbnRlIGFvIA0KK2NhbnRvIHN1cGVyaW9yIGVzcXVlcmRvIGRhIGphbmVsYSBkbyBicmFpbGxlLiANCisgDQorY3g6Y3kgDQorQSBjb2x1bmEgZSBsaW5oYSAoY29udGFuZG8gYSBwYXJ0aXIgZGUgMSkgc29icmUgYSB0ZWxhIA0KK2NvcnJlc3BvbmRlbnRlIMOgIHBvc2nDp8OjbyBkbyBjdXJzb3IuIA0KKyANCit2dCANCitPIG7Dum1lcm8gKGNvbnRhbmRvIGEgcGFydGlyIDEpIGRvIHRlcm1pbmFsIHZpcnR1YWwgYXR1YWwuIA0KKyANCit0IA0KK08gZXN0YWRvIGRvIHJlY3Vyc28gZGUgY29udHJvbGUgZGUgY3Vyc29yICh2ZWphIG8gY29tYW5kbyBDU1JUUkspLg0KKw0KKyAgICAgIGJsYW5rDQorICAgICAgY29udHJvbGUgZGUgY3Vyc29yIGVzdMOhIG9mZi4NCisgICAgICAgDQorICAgICAgdA0KKyAgICAgIGNvbnRyb2xlIGRlIGN1cnNvciBlc3TDoSBvbi4NCisgDQorYyANCitPIGVzdGFkbyBkb3MgcmVjdXJzb3MgdmlzaWJpbGlkYWRlIGRvIGN1cnNvciAodmVyIG8gQ1NSVklTIGUgDQorQ1NSQkxJTkspLg0KKw0KKyAgICAgIGJsYW5rDQorICAgICAgTyBjdXJzb3IgbsOjbyBlc3RpdmVyIHZpc8OtdmVsLCBlIG7Do28gcGlzY2FyIHF1YW5kbyBzZSBmYXogdmlzw612ZWwuDQorICAgDQorICAgICAgYg0KKyAgICAgIE8gY3Vyc29yIG7Do28gw6kgdmlzw612ZWwsIGUgY29tZcOnYSBhIHBpc2NhciBxdWFuZG8gc2UgZmF6IHZpc8OtdmVsLg0KKyAgIA0KKyAgICAgIHYNCisgICAgICBPIGN1cnNvciDDqSB2aXPDrXZlbCwgZSBuw6NvIGVzdMOhIHBpc2NhbmRvLg0KKyAgIA0KKyAgICAgIEINCisgICAgICBPIGN1cnNvciDDqSB2aXPDrXZlbCBlIGVzdMOhIHBpc2NhbmRvLg0KKyANCittIA0KK08gbW9kbyBkZSBleGliacOnw6NvIGF0dWFsICh2ZWphIG8gY29tYW5kbyBESVNQTUQpLg0KKw0KKyAgICAgIHQNCisgICAgICBUZWxhIGRlIGNvbnRlw7pkbyAodGV4dG8pIGVzdMOhIHNlbmRvIGV4aWJpZG8uDQorICANCisgICAgICBhDQorICAgICAgVGVsYSBkZSByZWFsY2UgKGF0cmlidXRvcykgZXN0w6Egc2VuZG8gZXhpYmlkby4NCisgDQorZiANCitPIGVzdGFkbyBkbyByZWN1cnNvIGRlIHRlbGEgY29uZ2VsYWRhICh2ZWphIG8gY29tYW5kbyBGUkVFWkUpLg0KKw0KKyAgICAgIGJsYW5rDQorICAgICAgQSB0ZWxhIG7Do28gZXN0w6EgY29uZ2VsYWRhLg0KKw0KK2QgDQorTyBuw7ptZXJvIGRlIHBvbnRvcyBicmFpbGxlIHNlbmRvIHVzYWRvIHBhcmEgZXhpYmlyIGNhZGEgY2FyYWN0ZXIgDQorKHZlamEgbyBjb21hbmRvIFNJWERPVFMpLg0KKw0KKyAgICAgIDgNCisgICAgICBUb2RvcyBvcyBvaXRvIHBvbnRvcyBlc3TDo28gc2VuZG8gdXNhZG9zLg0KKyAgICAgICANCisgICAgICA2DQorICAgICAgU29tZW50ZSBwb250b3MgMSBhIDYgZXN0w6NvIHNlbmRvIHVzYWRvcy4NCisgDQordSANCitPIGVzdGFkbyBkYSBtYWnDunNjdWxhIChsZXRyYSBtYWnDunNjdWxhKSBhcHJlc2VudGFtIGNhcmFjdGVyw61zdGljYXMgDQorKHZlamEgbyBjb21hbmRvIENBUEJMSU5LKS4NCisNCisgICAgICBibGFuaw0KKyAgICAgIExldHJhcyBtYWnDunNjdWxhcyBuw6NvIHBpc2Nhci4NCisNCisgICAgICBCDQorICAgICAgUGlzY2FyIGxldHJhcyBtYWnDunNjdWxhcy4NCisNCis1LjYuMiBEaXNwbGF5IGNvbSAyMCBjw6lsdWxhcyBvdSBtZW5vcyANCisgDQorUG5ldW3DoXRpY28gY3VydG8gdMOqbSBzaWRvIHV0aWxpemFkb3MsIGFwZXNhciBkZSBzZXJlbSB1bSB0YW50byANCitlbmlnbcOhdGljYSwgYSBmaW0gZGUgbW9zdHJhciBvIGxheW91dCBkYSBjb2x1bmEgcHJlY2lzYS4NCisNCisgICAgICB4eHl5cyB2dCB0Y21mZHUNCisgDQoreHggDQorQXMgY29sdW5hcyAoY29udGFuZG8gYSBwYXJ0aXIgZGUgMSkgc29icmUgYSB0ZWxhIGNvcnJlc3BvbmRlbnRlIMOgIA0KK3Bvc2nDp8OjbyBkbyBjdXJzb3IgKGNvbW8gbW9zdHJhZG8gbmEgbWV0YWRlIHN1cGVyaW9yIGRhcyBjw6lsdWxhcykgZSANCitwYXJhIG8gY2FudG8gc3VwZXJpb3IgZXNxdWVyZG8gZGEgamFuZWxhIGRvIGJyYWlsbGUgKG1vc3RyYWRvIG5hIA0KK21ldGFkZSBpbmZlcmlvciBkYXMgY8OpbHVsYXMpLiANCisgDQoreXkgDQorQXMgbGluaGFzIChjb250YW5kbyBhIHBhcnRpciBkZSAxKSBzb2JyZSBhIHRlbGEgY29ycmVzcG9uZGVudGUgw6AgDQorcG9zacOnw6NvIGRvIGN1cnNvciAoY29tbyBtb3N0cmFkbyBuYSBtZXRhZGUgc3VwZXJpb3IgZGFzIGPDqWx1bGFzKSBlIA0KK3BhcmEgbyBjYW50byBzdXBlcmlvciBlc3F1ZXJkbyBkYSBqYW5lbGEgZG8gYnJhaWxsZSAobW9zdHJhZG8gbmEgDQorbWV0YWRlIGluZmVyaW9yIGRhcyBjw6lsdWxhcykuIA0KKyANCitzIA0KK0FzIGRlZmluacOnw7VlcyBkZSBhbGd1bWFzIGRhcyBjYXJhY3RlcsOtc3RpY2FzIGRvIEJSTFRUWS4gVW0gcmVjdXJzbyANCivDqSBhdGl2YWRvIHNlIG8gcG9udG8gY29ycmVzcG9uZGVudGUgw6kgZ2VyYWRvLg0KKw0KKyAgICAgIERvdCAxOiBDb25nZWxhIGEgaW1hZ2VtIGRhIHRlbGEgKHZlamEgbyBjb21hbmRvIEZSRUVaRSkuDQorICAgICAgIA0KKyAgICAgIERvdCAyOiBNb3N0cmFyIGF0cmlidXRvcyAodmVqYSBvIGNvbWFuZG8gRElTUE1EKS4NCisgICAgICAgDQorICAgICAgRG90IDM6IFR1bmVzIGRlIGFsZXJ0YSAodmVqYSBvIGNvbWFuZG8gVFVORVMpLg0KKyAgICAgICANCisgICAgICBEb3QgNDogQ3Vyc29yIHZpc8OtdmVsICh2ZWphIG8gY29tYW5kbyBDU1JWSVMpLg0KKyAgICAgICANCisgICAgICBEb3QgNTogQmxvY28gZGUgY3Vyc29yICh2ZWphIG8gY29tYW5kbyBDU1JTSVpFKS4NCisgICAgICAgDQorICAgICAgRG90IDY6IEN1cnNvciBwaXNjYW5kbyAodmVqYSBvIGNvbWFuZG8gQ1NSQkxJTkspLg0KKyAgICAgIA0KKyAgICAgIERvdCA3OiBDdXJzb3IgZGUgbW9uaXRvcmFtZW50byAodmVqYSBvIGNvbWFuZG8gQ1NSVFJLKS4NCisgICAgICAgDQorICAgICAgRG90IDg6IEphbmVsYSBkZXNsaXphbnRlICh2ZWphIG8gY29tYW5kbyBTTElERVdJTikuDQorIA0KK3Z0IA0KK08gbsO6bWVybyAoY29udGFuZG8gYSBwYXJ0aXIgMSkgZG8gdGVybWluYWwgdmlydHVhbCBhdHVhbC4gDQorIA0KK3QgDQorTyBlc3RhZG8gZG8gcmVjdXJzbyBkZSBjb250cm9sZSBkZSBjdXJzb3IgKHZlamEgbyBjb21hbmRvIENTUlRSSykuDQorDQorICAgICAgYmxhbmsNCisgICAgICBDb250cm9sZSBkZSBjdXJzb3IgZXN0w6Egb2ZmLg0KKw0KKyAgICAgIHQNCisgICAgICBDb250cm9sZSBjdXJzb3IgZXN0w6Egb24uDQorIA0KK2MNCitPIGVzdGFkbyBkb3MgcmVjdXJzb3MgdmlzaWJpbGlkYWRlIGRvIGN1cnNvciAodmVyIG8gQ1NSVklTIGUgDQorQ1NSQkxJTkspLg0KKw0KKyAgICAgIGJsYW5rDQorICAgICAgTyBjdXJzb3IgbsOjbyBlc3RpdmVyIHZpc8OtdmVsLCBlIG7Do28gcGlzY2FyIHF1YW5kbyBzZSBmYXogdmlzw612ZWwuDQorCQ0KKyAgICAgIGINCisgICAgICBPIGN1cnNvciBuw6NvIMOpIHZpc8OtdmVsLCBlIGNvbWXDp2EgYSBwaXNjYXIgcXVhbmRvIHNlIGZheiB2aXPDrXZlbC4NCisgICANCisgICAgICB2DQorICAgICAgTyBjdXJzb3Igw6kgdmlzw612ZWwsIGUgbsOjbyBlc3TDoSBwaXNjYW5kby4NCisgICANCisgICAgICBCDQorICAgICAgTyBjdXJzb3Igw6kgdmlzw612ZWwgZSBlc3TDoSBwaXNjYW5kby4NCisgDQorbSANCitPIG1vZG8gZGUgZXhpYmnDp8OjbyBhdHVhbCAodmVqYSBvIGNvbWFuZG8gRElTUE1EKS4NCisNCisgICAgICB0DQorICAgICAgVGVsYSBkZSBjb250ZcO6ZG8gKHRleHRvKSBlc3TDoSBzZW5kbyBleGliaWRvLg0KKyAgIA0KKyAgICAgIGENCisgICAgICBUZWxhIGRlIHJlYWxjZSAoYXRyaWJ1dG9zKSBlc3TDoSBzZW5kbyBleGliaWRvLg0KKyANCitmIA0KK08gZXN0YWRvIGRvIHJlY3Vyc28gZGUgdGVsYSBjb25nZWxhZGEgKHZlamEgbyBjb21hbmRvIEZSRUVaRSkuDQorDQorICAgICAgYmxhbmsNCisgICAgICBBIHRlbGEgbsOjbyBlc3TDoSBjb25nZWxhZGEuDQorDQorICAgICAgZg0KKyAgICAgIEEgdGVsYSBlc3TDoSBjb25nZWxhZGEuDQorIA0KK2QgDQorTyBuw7ptZXJvIGRlIHBvbnRvcyBicmFpbGxlIHNlbmRvIHVzYWRvIHBhcmEgZXhpYmlyIGNhZGEgY2FyYWN0ZXIgDQorKHZlamEgbyBjb21hbmRvIFNJWERPVFMpLg0KKw0KKyAgICAgIDgNCisgICAgICBUb2RvcyBvcyBvaXRvIHBvbnRvcyBlc3TDo28gc2VuZG8gdXNhZG9zLg0KKw0KKyAgICAgIDYNCisgICAgICBTb21lbnRlIHBvbnRvcyAxIGEgNiBlc3TDo28gc2VuZG8gdXNhZG9zLg0KKyANCit1IA0KK08gZXN0YWRvIGRhIG1hacO6c2N1bGEgKGxldHJhIG1hacO6c2N1bGEpIGFwcmVzZW50YW0gY2FyYWN0ZXLDrXN0aWNhcyANCisodmVqYSBvIGNvbWFuZG8gQ0FQQkxJTkspLg0KKw0KKyAgICAgIGJsYW5rDQorICAgICAgTGV0cmFzIG1hacO6c2N1bGFzIG7Do28gcGlzY2FyLg0KKyAgIA0KKyAgICAgIEINCisgICAgICBQaXNjYXIgbGV0cmFzIG1hacO6c2N1bGFzLg0KKyAgICAgICANCis1LjcgQ29tYW5kbyBkZSBNb2RvIGRlIEFwcmVuZGl6YWdlbQ0KKyANCitDb21hbmRvIG1vZG8gZGUgYXByZW5kaXphZ2VtIMOpIHVtYSBmb3JtYSBpbnRlcmF0aXZhIGRlIGFwcmVuZGVyIG8gcXVlIGFzIA0KK3RlY2xhcyBubyB2aXNvciBkbyBCcmFpbGxlIGZhei4gUG9kZSBzZXIgYWNlc3NhZG8gdGFudG8gcGVsbyBjb21hbmRvIA0KK0xFQVJOIG91IGF0cmF2w6lzIGRvIHV0aWxpdMOhcmlvIGJybHRlc3QuIEVzc2UgcmVjdXJzbyBuw6NvIGVzdGFyw6EgDQorZGlzcG9uw612ZWwgc2UgYSBvcMOnw6NvIGRlIGNvbXBpbGHDp8OjbyAtLWRpc2FibGUtbGVhcm4tbW9kZSBmb2kgDQorZXNwZWNpZmljYWRvLiANCisgDQorUXVhbmRvIGVzdGUgbW9kbyBlc3TDoSBpbnNjcml0bywgYSBtZW5zYWdlbSBjb21tYW5kIGxlYXJuIG1vZGUgw6kgZXNjcml0YSANCitubyBkaXNwbGF5IGJyYWlsbGUuIEVudMOjbywgY2FkYSB0ZWNsYSAob3UgY29tYmluYcOnw6NvIGRlIHRlY2xhcykgc29icmUgYSANCit0ZWxhIMOpIHByZXNzaW9uYWRhLCB1bWEgbWVuc2FnZW0gY3VydGEgcXVlIGRlc2NyZXZhIGEgc3VhIGZ1bsOnw6NvIEJSTFRUWSANCitlc3TDoSBlc2NyaXRvLiBFc3RlIG1vZG8gc2FpIGltZWRpYXRhbWVudGUgc2UgYSB0ZWNsYSAob3UgY29tYmluYcOnw6NvIGRlIA0KK3RlY2xhcykgcGFyYSBvIGNvbWFuZG8gTEVBUk4gw6kgcHJlc3Npb25hZG8uIEVsZSBzYWkgYXV0b21hdGljYW1lbnRlLCBlIGEgDQorbWVuc2FnZW0gZG9uZSDDqSBlc2NyaXRhLCBzZSBkZXogc2VndW5kb3MgdHJhbnNjb3JyZXIgc2VtIHF1YWxxdWVyIHRlY2xhIA0KK25vIGRpc3BsYXkgc2VuZG8gcHJlc3Npb25hZG8uIE9ic2VydmUgcXVlIGFsZ3VucyBkaXNwbGF5cyBuw6NvIHTDqm0gc2luYWwgDQorYW8gZGlzcGxheSBlL291IGFsZ3VucyBkcml2ZXJzIG7Do28gc2luYWxpemFtIEJSTFRUWSBhdMOpIHF1ZSB0b2RhcyBhcyANCit0ZWNsYXMgc8OjbyBsaWJlcmFkYXMuDQorIA0KK1NlIHVtYSBtZW5zYWdlbSBmb3IgbWFpb3IgcXVlIG8gZGlzcGxheSBCcmFpbGxlLCBlbnTDo28gw6kgZXhpYmlkYSBlbSANCitzZWdtZW50b3MuIE8gY29tcHJpbWVudG8gZGUgY2FkYSBzZWdtZW50bywgbWFzIG8gw7psdGltbyDDqSB1bSBhIG1lbm9zIGRvIA0KK3F1ZSBhIGxhcmd1cmEgZG8gZGlzcGxheSwgY29tIG8gY2FyYWN0ZXIgbWFpcyDDoCBkaXJlaXRhIG5vIHZpc29yIGEgc2VyIA0KK2RlZmluaWRhIGNvbW8gdW0gc2luYWwgZGUgbWVub3MuIENhZGEgc2VnbWVudG8gc2UgbWFudGVuaGEgbm8gdmlzb3Igc2VqYSANCitwb3IgYWxndW5zIHNlZ3VuZG9zICh2ZWphIGEgb3DDp8Ojby1NKSBvdSBhdMOpIHF1ZSBxdWFscXVlciB0ZWNsYSBuYSB0ZWxhIMOpIA0KK3ByZXNzaW9uYWRhLg0KKw0KKzYgwpYgVGFiZWxhcw0KKw0KKzYuMSAtIFRhYmVsYXMgZGUgVGV4dG8NCisNCitPcyBhcnF1aXZvcyBjb20gbm9tZXMgbm8gZm9ybWF0byAqLiB0dGIgc8OjbyB0YWJlbGFzIGRlIHRleHRvLCBlIGNvbSANCitub21lcyBubyBmb3JtYXRvICoudHRpIHPDo28gdGV4dG9zIHN1YnRhYmVsYWRvcy4gRWxlcyBzw6NvIHVzYWRvcyBwZWxvIA0KK0JSTFRUWSBwYXJhIHRyYWR1emlyIG9zIGNhcmFjdGVyZXMgbmEgdGVsYSBlbSBzdWFzIHJlc3BlY3RpdmFzIA0KK3JlcHJlc2VudGHDp8O1ZXMgZGUgOCBwb250b3Mgbm8gY29tcHV0YWRvciBicmFpbGxlLg0KKw0KK0JSTFRUWSDDqSBpbmljaWFsbWVudGUgY29uZmlndXJhZG8gcGFyYSB1c2FyIGEgdGFiZWxhIGRlIHRleHRvIE5vcnRoIA0KK0FtZXJpY2FuIEJyYWlsbGUgQ29tcHV0ZXIgQ29kZShOQUJDQykuIEFsw6ltIGRlc3NlIHBhZHLDo28sIGFzIA0KK2FsdGVybmF0aXZhcyBhIHNlZ3VpciBzw6NvIGZvcm5lY2lkYXM6DQorDQorICAgICAgQXV0bw0KKyAgICAgIGF1dG8tc2VsZcOnw6NvIGRhIGxvY2FsaWRhZGUtYmFzZQ0KKyAgICAgICANCisgICAgICBhcgnDgXJhYmUgKGdlbsOpcmljbykNCisgICAgICAgDQorICAgICAgYXMJQXNzYW3DqnMNCisgICAgICAgDQorICAgICAgYXdhCUF3YWRoaQ0KKyAgICAgICANCisgICAgICBiZwlCw7psZ2Fybw0KKw0KKyAgICAgIGJoCUJpaGFyaQ0KKw0KKyAgICAgIGJuCUJlbmdhbGkNCisNCisgICAgICBibwlUaWJldGFubw0KKw0KKyAgICAgIGJyYQlCcmFqICg/QnJhaiBCaGFzaGEgKQ0KKw0KK2JyZglwYXJhIHZpc3VhbGl6YcOnw6NvIGRlIGFycXVpdm9zLiBicmYgZGVudHJvIGRlIHVtIGVkaXRvciBvdSANCitwYWdlcg0KKw0KKyAgICAgIGNzCUNoZWNvDQorICAgICAgIA0KKyAgICAgIGN5CUdhbMOqcw0KKyAgICAgIA0KKyAgICAgIGRhCURpbmFtYXJxdcOqcw0KKyAgICAgIA0KKyAgICAgIGRlCUFsZW3Do28NCisgICAgICANCisgICAgICBkcmEJRHJhdmlkaWFuYXMNCisgICAgICANCisgICAgICBlbAlHcmVnbw0KKyAgICAgIA0KKyAgICAgIGVtCUluZ2zDqnMNCisgICAgICANCisgICAgICBlbl9DQQlJbmdsw6pzIChDYW5hZMOhKQ0KKw0KKyAgICAgIGVuX1VLCUluZ2zDqnMgKFJlaW5vIFVuaWRvKQ0KKw0KKyAgICAgIGVuX1VTCUluZ2zDqnMgKEVzdGFkb3MgVW5pZG9zKQ0KKw0KKyAgICAgIGVuLW5hYmNjCUluZ2zDqnMgKE5vcnRoIEFtZXJpY2FuIEJyYWlsbGUgQ29tcHV0ZXIgQ29kZSkNCisNCisgICAgICBlbwlFc3BlcmFudG8NCisNCisgICAgICBlcwlFc3BhbmhvbA0KKyAgICAgIA0KKyAgICAgIGV0CUVzdG9uaWFubw0KKw0KKyAgICAgIGZpCUZpbmxhbmRlcw0KKyAgICAgIA0KKyAgICAgIGZyCUZyYW5jw6pzDQorDQorICAgICAgZnJfQ0EJRnJhbmPDqnMgKENhbmFkw6EpDQorDQorICAgICAgZnJfRlIJRnJhbmPDqnMgKEZyYW7Dp2EpDQorDQorICAgICAgZnJfMjAwNwlGcmFuY8OqcyAodW5pZmljYWRvKQ0KKw0KKyAgICAgIGZyLWNiaWZzCUZyYW5jw6pzIChDb2RlIEJyYWlsbGUgSW5mb3JtYXRpcXVlIEZyYW7Dp2FpcyBTdGFuZGFyZCkNCisgICAgICBnYQlJcmxhbmTDqnMNCisNCisgICAgICBnZAlHYcOpbGljbw0KKw0KKyAgICAgIGdvbglHb25kaQ0KKw0KKyAgICAgIGd1CUd1emVyYXRlDQorDQorICAgICAgaGUJSGVicmFpY28NCisNCisgICAgICBoaQlIaW5kaQ0KKw0KKyAgICAgIGhyCUNyb2F0YQ0KKw0KKyAgICAgIGh1CUjDum5nYXJvDQorICAgICAgDQorICAgICAgaHkJQXJtw6puaW8NCisNCisgICAgICBpcwlJc2xhbmRlcw0KKw0KKyAgICAgIGl0CUl0YWxpYW5vDQorDQorICAgICAga2hhCUtoYXNpDQorDQorICAgICAga24JQ2FuYXLDoQ0KKw0KKyAgICAgIGtvawlDb25jYW5pcw0KKw0KKyAgICAgIGtydQlLdXJ1a2gNCisNCisgICAgICBsdAlMaXR1YW5hDQorDQorICAgICAgbHYJTGV0w6MNCisNCisgICAgICBtZwlNYWxnYXhlDQorDQorICAgICAgbWkJTWFvcmkNCisNCisgICAgICBtbAlNYWxhaWFsYQ0KKw0KKyAgICAgIG1uaQlNYW5pcHVyaQ0KKyAgICAgIA0KKyAgICAgIG1yCU1hcmF0aQ0KKw0KKyAgICAgIG10CU1hbHTDqnMNCisNCisgICAgICBtdW4JTXVuZGFyaQ0KKw0KKyAgICAgIG13cglNYXJ3YXJpDQorDQorICAgICAgbmUJTmVwYWxpDQorDQorICAgICAgbmV3CU5ld2FyaQ0KKw0KKyAgICAgIG5sCUhvbGFuZMOqcw0KKw0KKyAgICAgIG5sX0JFCUhvbGFuZMOqcyAoQsOpbGdpY2EpDQorDQorICAgICAgbmxfTkwJSG9sYW5kw6pzIChQYcOtc2VzIEJhaXhvcykNCisNCisgICAgICBubwlOb3J1ZWd1w6pzDQorDQorICAgICAgbm8tZ2VuZXJpYwlOb3J1ZWd1w6pzIChjb20gc3Vwb3J0ZSBwYXJhIG91dHJvcyBpZGlvbWFzKQ0KKw0KKyAgICAgIG5vLW91YglOb3J1ZWd1w6pzIChVdHZhbGcgT2ZmZW50bGlnIHBhcmEgQmxpbmRlc2tyaWZ0KQ0KKw0KKyAgICAgIG53YwlBbnRpZ28gTmV3YXJpDQorDQorICAgICAgb3IJT3Jpw6ENCisNCisgICAgICBwYQlQYW5qYWJpDQorDQorICAgICAgcGkJUMOhbGkNCisNCisgICAgICBwbAlQb2xvbsOqcw0KKw0KKyAgICAgIHB0CVBvcnR1Z3XDqnMNCisNCisgICAgICBybwlSb21lbm8NCisNCisgICAgICBydQlSdXNzbw0KKw0KKyAgICAgIHNhCVPDom5zY3JpdG8NCisNCisgICAgICBzYXQJU2FudGFsaQ0KKw0KKyAgICAgIHNkCVNpbmRpDQorDQorICAgICAgc2sJRXNsb3ZhY28NCisNCisgICAgICBzdglTdWVjbw0KKw0KKyAgICAgIHN3CVN1YcOtbGkNCisNCisgICAgICB0YQlUw6JtaWwNCisNCisgICAgICB0ZQlUZWx1Z3UNCisNCisgICAgICB0cglUdXJjbw0KKw0KKyAgICAgIHZpCVZpZXRuYW1pdGENCisNCitWZWphIGEgb3DDp8OjbyBkZSBsaW5oYSBkZSBjb21hbmRvIC10LCBhIGNvbmZpZ3VyYcOnw6NvIHRleHQtdGFibGUgZG8gDQorYXJxdWl2byBkZSBkaXJlY3RpdmEsIGUgYSBvcMOnw6NvIGRlIGNvbnN0cnXDp8OjbyAtLXdpdGgtdGV4dC10YWJsZSBwYXJhIA0KK29idGVyIGRldGFsaGVzIHNvYnJlIGNvbW8gdXNhciB1bWEgdGFiZWxhIGRlIHRleHRvIGFsdGVybmF0aXZvLg0KKyANCis2LjEuMQlUYWJlbGEgZGUgRm9ybWF0byBkZSBUZXh0bw0KKw0KK0EgdGFiZWxhIGRlIHRleHRvIGNvbnNpc3RlIGVtIHVtYSBzZXHDvMOqbmNpYSBkZSBkaXJlY3RpdmFzLCB1bSBwb3IgbGluaGEsIA0KK3F1ZSBkZWZpbmVtIGNvbW8gY2FkYSBjaGFyYWN0ZXIgw6kgcmVwcmVzZW50YWRvIGVtIGJyYWlsbGUuIFVURi04IA0KK2NhcmFjdGVyIGVuY29kaW5nIGRldmUgc2VyIHVzYWRvLiBPIGVzcGHDp28gZW0gYnJhbmNvIChlc3Bhw6dvcywgdGFicykgbm8gDQoraW7DrWNpbyBkZSB1bWEgbGluaGEsIGFzc2ltIGNvbW8gYW50ZXMgZS9vdSBhcMOzcyBxdWFscXVlciBvcGVyYW5kbyBkZSANCitxdWFscXVlciBkaXJlY3RpdmEsIMOpIGlnbm9yYWRvLiBMaW5oYXMgcXVlIGNvbnTDqm0gYXBlbmFzIGVzcGHDp28gZW0gDQorYnJhbmNvIHPDo28gaWdub3JhZGFzLiBTZSBvIHByaW1laXJvIGNhcsOhdGVyIG7Do28tZXNwYcOnbyBlbSBicmFuY28gYW50ZXMgDQorZGUgdW1hIGxpbmhhIMOpICIjIiBlbnTDo28gZXNzYSBsaW5oYSDDqSB1bSBjb21lbnTDoXJpbyBlIMOpIGlnbm9yYWRvLg0KKyANCis2LjEuMglUYWJlbGEgZGUgRGlyZXRpdmFzIGRlIFRleHRvDQorDQorQXMgc2VndWludGVzIGRpcmV0aXZhcyBzw6NvIGZvcm5lY2lkYXM6DQorIA0KK2NoYXIgY2hhcmFjdGVyIGRvdHMgIyBjb21lbnTDoXJpb3MNCisNCitVc2UgYSBkaXJldGl2YSBjaGFyIHBhcmEgZXNwZWNpZmljYXIgY29tbyB1bSBjYXJhY3RlciBVbmljb2RlIHNlcsOhIA0KK3JlcHJlc2VudGFkbyBlbSBicmFpbGxlLg0KKyANCitjaGFyYWN0ZXINCisNCitPcyBjYXJhY3RlcmVzIFVuaWNvZGUgYSBzZXJlbSBkZWZpbmlkb3MuIFBvZGVtIHNlcjoNCisNCisgICAgICDCtyBRdWFscXVlciBjYXJhY3RlciDDum5pY28gcXVlIG7Do28gc2VqYSB1bWEgYmFycmEtaW52ZXJ0aWRhIG91IHVtIA0KK2NhcsOhY3RlciBkZSBlc3Bhw6dvIGVtIGJyYW5jby4NCisNCisgICAgICDCtyBVbSBjYXJhY3RlciBlc3BlY2lhbCBwcmVmaXhhZG8gZGUgYmFycmEtaW52ZXJ0aWRhLiBTw6NvIGVsZXM6DQorDQorICAgICAgXGINCisgICAgICBDYXLDoWN0ZXIgZGUgcmV0cm9jZXNzby4NCisNCisgICAgICBcZg0KKyAgICAgIENhcsOhY3RlciBmb3JtZmVlZCAocXVlYnJhIGRlIHDDoWdpbmEpLg0KKw0KKyAgICAgIFxuDQorICAgICAgQ2Fyw6FjdGVyIGRlIG5vdmEgbGluaGEuDQorDQorICAgICAgXG8jIyMNCisgICAgICBSZXByZXNlbnRhw6fDo28gZGUgdW0gY2Fyw6FjdGVyIGRlIHRyw6pzIGTDrWdpdG9zIG9jdGFsLg0KKw0KKyAgICAgIFxyDQorICAgICAgQ2Fyw6FjdGVyIGRlIHJldG9ybm8gZGUgdHJhbnNwb3J0ZS4NCisNCisgICAgICBccw0KKyAgICAgIENhcsOhY3RlciBkZSBlc3Bhw6dvLg0KKw0KKyAgICAgIFx0DQorICAgICAgQ2Fyw6FjdGVyIGRlIHRhYiBob3Jpem9udGFsLg0KKw0KKyAgICAgIFx1IyMjIw0KKyAgICAgIFJlcHJlc2VudGHDp8OjbyBkZSB1bSBjYXLDoWN0ZXIgaGV4YWRlY2ltYWwgZGUgcXVhdHJvIGTDrWdpdG8uDQorDQorICAgICAgXFUjIyMjIyMjIw0KKyAgICAgIFJlcHJlc2VudGHDp8OjbyBkZSB1bSBjYXLDoWN0ZXIgaGV4YWRlY2ltYWwgZGUgb2l0byBkw61naXRvLg0KKw0KKyAgICAgIFx2DQorICAgICAgQ2Fyw6FjdGVyIGRlIHRhYiBob3Jpem9udGFsLg0KKw0KKyAgICAgIFx4IyMNCisgICAgICBSZXByZXNlbnRhw6fDo28gZGUgdW0gY2Fyw6FjdGVyIGhleGFkZWNpbWFsIGRlIGRvaXMgZMOtZ2l0b3MuDQorDQorICAgICAgXFgjIw0KKyAgICAgIChvIGNhc28gZG8gWCBlIGRvcyBkw61naXRvcyBuw6NvIMOpIHNpZ25pZmljYXRpdmEpLg0KKyAgICAgIA0KKyAgICAgIGYNCisgICAgICBBIHRlbGEgZXN0w6EgY29uZ2VsYWRhLg0KKw0KKyAgICAgIFwjDQorICAgICAgVW0gc2luYWwgZGUgbsO6bWVybyBsaXRlcmFsLg0KKw0KKyAgICAgIFw8bmFtZT4NCisgICAgICBPIG5vbWUgVW5pY29kZSBkZSB1bSBjYXLDoWN0ZXIodXNlIF8gcGFyYSBlc3Bhw6dvKS4NCisNCisgICAgICBcXA0KKyAgICAgIFVtYSBiYXJyYS1pbnZlcnRpZGEgbGl0ZXJhbC4NCisgDQorZG90cw0KK0EgcmVwcmVzZW50YcOnw6NvIGJyYWlsbGUgZG9zIGNhcmFjdGVyZXMgVW5pY29kZS4gw4kgdW1hIHNlccO8w6puY2lhIGRlIDEtOCANCituw7ptZXJvcyBkb3MgcG9udG9zLiBTZSBvIG7Dum1lcm8gZG8gcG9udG8gZGUgc2Vxw7zDqm5jaWEgw6kgY29sb2NhZG8gZW50cmUgDQorcGFyw6pudGVzZXMsIGVtIHNlZ3VpZGEsIG9zIG7Dum1lcm9zIGRvcyBwb250b3MgcG9kZW0gc2VyIHNlcGFyYWRvcyB1bSBkbyANCitvdXRybyBwb3IgZXNwYcOnbyBlbSBicmFuY28uIFVtIG7Dum1lcm8gZGUgcG9udG8gw6kgdW0gZMOtZ2l0byBkZW50cm8gZG8gDQoraW50ZXJ2YWxvIGRlIDEtOCwgdGFsIGNvbW8gZGVmaW5pZG8gcGVsYSBTdGFuZGFyZCBCcmFpbGxlIERvdCBOdW1iZXJpbmcgDQorQ29udmVudGlvbi4gTyBwb250byBlc3BlY2lhbCBkZSBuw7ptZXJvIDAgbsOjbyDDqSByZWNvbmhlY2lkbyBxdWFuZG8gZW50cmUgDQorcGFyw6pudGVzZXMsIGUgc2lnbmlmaWNhIHF1ZSBuw6NvIGjDoSBwb250b3MsIG7Do28gcG9kZW5kbyBzZXIgdXNhZG8gZW0gDQorY29uanVudG8gY29tIHF1YWxxdWVyIG91dHJvIG7Dum1lcm8gZGUgcG9udG9zLg0KKyANCitFeGVtcGxvcw0KKyAgICAgIMK3IGNoYXIgYSAxDQorDQorICAgICAgwrcgY2hhciBiICgxMikNCisNCisgICAgICDCtyBjaGFyIGMgKCA0IDEgKQ0KKw0KKyAgICAgIMK3IGNoYXIgXFwgMTI1NjcNCisNCisgICAgICDCtyBjaGFyIFxzIDANCisNCisgICAgICDCtyBjaGFyIFx4MjAgKCkNCisNCisgICAgICDCtyBjaGFyIFw8TEFUSU5fU01BTExfTEVUVEVSX0Q+IDE0NQ0KKyANCitieXRlIGJ5dGUgZG90cyAjIGNvbW1lbnQNCitVc2UgYSBkaXJldGl2YSBkZSBieXRlIHBhcmEgZXNwZWNpZmljYXIgY29tbyB1bSBjYXLDoWN0ZXIgbm8gY29uanVudG8gZGUgDQorY2FyYWN0ZXJlcyBsb2NhbCBlc3TDoSBzZW5kbyByZXByZXNlbnRhZG8gZW0gYnJhaWxsZS4gRm9pIG1hbnRpZG8gcGFyYSANCitjb21wYXRpYmlsaWRhZGUgY29tIHZlcnPDtWVzIGFudGVyaW9yZXMsIG1hcyBuw6NvIGRldmUgc2VyIHVzYWRvLiANCitDYXLDoWN0ZXJlcyBVbmljb2RlIGRldmVtIHNlciBkZWZpbmlkb3MgKGF0cmF2w6lzIGRhIGRpcmV0aXZhIGNoYXIpIHBhcmEgDQorcXVlIGEgdGFiZWxhIGRlIHRleHRvIHBlcm1hbmVjZSB2w6FsaWRhLCBpbmRlcGVuZGVudGVtZW50ZSBkbyBxdWFsIA0KK2Nvbmp1bnRvIGRlIGNhcmFjdGVyZXMgbG9jYWwgdXNhZG8uDQorIA0KK2J5dGUNCitPIGNhcsOhdGVyIGxvY2FsIGEgc2VyIGRlZmluaWRvLiBQb2RlIHNlciBlc3BlY2lmaWNhZG8gZGEgbWVzbWEgZm9ybWEgDQorY29tbyB1bSBvcGVyYWRvciBjaGFyYWN0ZXIgZGEgZGlyZXRpdmEgY2hhciBleGNldG8gcXVlIGFzIGZvcm1hcyANCitlc3BlY8OtZmljYXMgZGUgVW5pY29kZSAoXHUsXFUsXDwpIG7Do28gcG9kZW0gc2VyIHV0aWxpemFkb3MuDQorIA0KK2RvdHMNCitBIHJlcHJlc2VudGHDp8OjbyBicmFpbGxlIGRvIGNhcsOhY3RlciBsb2NhbC4gUG9kZSBzZXIgZXNwZWNpZmljYWRvIGRhIA0KK21lc21hIGZvcm1hIGNvbW8gb3BlcmFuZG8gZG90cyBkYSBkaXJlY3RpdmEgY2hhci4NCisgDQoraW5jbHVkZSBmaWxlICMgY29tbWVudA0KK1VzZSBhIGRpcmV0aXZhIGluY2x1ZGUgcGFyYSBpbmNsdWlyIG8gY29udGXDumRvIGRlIHVtIHRleHRvIHN1YnRhYmVsYWRvLiANCitFbGUgw6kgcmVjdXJzaXZvLCBvIHF1ZSBzaWduaWZpY2EgcXVlIHF1YWxxdWVyIHRleHRvIHN1YnRhYmVsYWRvIHBvZGUtc2UgDQoraW5jbHVpciBhaW5kYSBlbSBvdXRybyB0ZXh0byBzdWJ0YWJlbGEuIEN1aWRhZG9zIGRldmVtIHNlciB0b21hZG9zIHBhcmEgDQorZ2FyYW50aXIgcXVlICJpbmNsdWRlIGxvb3AiIG7Do28gc2VqYSBjcmlhZG8uDQorIA0KK2ZpbGUNCitPIGFycXVpdm8gYSBzZXIgaW5jbHXDrWRvLiBQb2RlIHNlciB1bSByZWxhdGl2byBvdSB1bSBjYW1pbmhvIGFic29sdXRvLiANCitTZSByZWxhdGl2bywgZWxlIGVzdMOhIGFuY29yYWRhIG5vIGRpcmV0w7NyaW8gY29udGVuZG8gbyBhcnF1aXZvIGluY2x1aWRvLg0KKw0KKzYuMiBUYWJlbGEgZGUgQXRyaWJ1dG9zDQorDQorT3MgYXJxdWl2b3MgY29tIG5vbWVzIG5vIGZvcm1hdG8gKi5hdGIgc8OjbyB0YWJlbGFzIGRlIGF0cmlidXRvcywgZSBjb20gDQorbm9tZXMgbm8gZm9ybWF0byAqLmF0aSBzw6NvIGF0cmlidXRvcyBzdWJ0YWJlbGFzLiBFbGVzIHPDo28gdXNhZG9zIHF1YW5kbyANCitCUkxUVFkgw6kgbW9zdHJhZG8gbmEgdGVsYSBkZSBhdHJpYnV0b3MgZSBuw6NvIG8gY29udGXDumRvIGRhIHRlbGEgKHZlamEgbyANCitjb21hbmRvIERJU1BNRCkuIENhZGEgdW0gZG9zIG9pdG8gcG9udG9zIGJyYWlsbGUgcmVwcmVzZW50YSB1bSBkb3Mgb2l0byANCitiaXRzIGRlIGF0cmlidXRvIFZHQS4NCisNCitPcyBzZWd1aW50ZXMgYXRyaWJ1dG9zIHPDo28gZm9ybmVjaWRhczogDQorIA0KK2F0dHJpYnV0ZXMNCisNCitBIGNvbHVuYSBkYSBlc3F1ZXJkYSByZXByZXNlbnRhIGFzIGNvcmVzIGRlIHByaW1laXJvIHBsYW5vOg0KKw0KKyAgICAgIERvdCAxCQlSZWQNCisNCisgICAgICBEb3QgMgkJR3JlZW4NCisNCisgICAgICBEb3QgMwkJQmx1ZQ0KKw0KKyAgICAgIERvdCA3CQlCcmlnaHQNCisNCitBIGNvbHVuYSBkbyBsYWRvIGRpcmVpdG8gcmVwcmVzZW50YSBhcyBjb3JlcyBkZSBmdW5kbzoNCisNCisgICAgICBEb3QgNAkJUmVkDQorDQorICAgICAgRG90IDUJCUdyZWVuDQorDQorICAgICAgRG90IDYJCUJsdWUNCisNCisgICAgICBEb3QgOAkJQmxpbmsNCisNCitVbSBwb250byDDqSBsZXZhbnRhZG8gcXVhbmRvIG8gYml0IGRlIGF0cmlidXRvIGNvcnJlc3BvbmRlbnRlIGVzdMOhIA0KK2xpZ2Fkby4gRXN0ZSDDqSBvIHBhZHLDo28gZGEgdGFiZWxhIGRlIGF0cmlidXRvcywgcG9pcyDDqSBhIG1haXMgaW50dWl0aXZhLiANCitVbSBkb3Mgc2V1cyBwcm9ibGVtYXMsIHBvcsOpbSwgw6kgcXVlIMOpIGRpZsOtY2lsIGRpc2Nlcm5pciBhIGRpZmVyZW7Dp2EgDQorZW50cmUgbm9ybWFsIChicmFuY28gc29icmUgZnVuZG8gcHJldG8pIGUgaW52ZXJzYSAocHJldG8gc29icmUgZnVuZG8gDQorYnJhbmNvKSB2w61kZW8uDQorIA0KK2F0dHJpYg0KK0EgY29sdW5hIGRhIGVzcXVlcmRhIHJlcHJlc2VudGEgYXMgY29yZXMgZGUgcHJpbWVpcm8gcGxhbm86DQorDQorICAgICAgRG90IDEJCVJlZA0KKw0KKyAgICAgIERvdCAyCQlHcmVlbg0KKyAgICAgIERvdCAzCQlCbHVlDQorDQorICAgICAgRG90IDcJCUJyaWdodA0KKw0KK0EgY29sdW5hIGRvIGxhZG8gZGlyZWl0byByZXByZXNlbnRhIGFzIGNvcmVzIGRlIGZ1bmRvOg0KKw0KKyAgICAgIERvdCA0CQlSZWQNCisNCisgICAgICBEb3QgNQkJR3JlZW4NCisNCisgICAgICBEb3QgNgkJQmx1ZQ0KKw0KKyAgICAgIERvdCA4CQlCbGluaw0KKw0KK1VtIGJpdCBkZSBmdW5kbyBkZXNlbmNhZGVhcsOhIHNldXMgcG9udG9zIGNvcnJlc3BvbmRlbnRlcywgZW5xdWFudG8gcXVlIA0KK3VtIGJpdCBkZSBwcmltZWlybyBwbGFubyBkZXNlbmNhZGVhcsOhIHNldXMgY29ycmVzcG9uZGVudGVzIHBvbnRvcy4gRXNzYSANCitsw7NnaWNhIGludHVpdGl2YSByZWFsbWVudGUgdG9ybmEgbWFpcyBmw6FjaWwgZGUgbGVyIGFzIGNvbWJpbmHDp8O1ZXMgZGUgDQorYXRyaWJ1dG9zIG1haXMgY29tdW1lbnRlIHVzYWRvcy4NCisNCitWZWphIGEgb3DDp8OjbyBkZSBsaW5oYSBkZSBjb21hbmRvIC1hLCBhIGRpcmV0aXZhIGRlIGFycXVpdm8gZGUgDQorY29uZmlndXJhw6fDo28gYXR0cmlidXRlcy10YWJsZXMsIGUgYSBvcMOnw6NvIGRlIGNyaWHDp8OjbyAtLXdpdGgtYXR0cmlidXRlcy0NCit0YWJsZSBwYXJhIG9idGVyIGRldGFsaGVzIHNvYnJlIGNvbW8gdXNhciB1bWEgdGFiZWxhIGRlIGF0cmlidXRvcyANCithbHRlcm5hdGl2b3MuDQorIA0KKzYuMi4xCVRhYmVsYSBkZSBGb3JtYXRvcyBkb3MgQXRyaWJ1dG9zDQorDQorVW1hIHRhYmVsYSBkZSBhdHJpYnV0b3MgY29uc2lzdGUgZW0gdW1hIHNlccO8w6puY2lhIGRlIGRpcmV0aXZhcywgdW0gcG9yIA0KK2xpbmhhLCBxdWUgZGVmaW5lbSBjb21vIGFzIGNvbWJpbmHDp8O1ZXMgZGUgYXRyaWJ1dG9zIFZHQSBlc3TDo28gc2VuZG8gDQorcmVwcmVzZW50YWRvcyBlbSBicmFpbGUuIENhcmFjdGVyZXMgVVRGLTggZGV2ZW0gc2VyIHV0aWxpemFkb3MuIE8gZXNwYcOnbyANCitlbSBicmFuY28gKGVzcGHDp29zLCB0YWJzKSBubyBpbsOtY2lvIGRlIHVtYSBsaW5oYSwgYXNzaW0gY29tbyBhbnRlcyBlL291IA0KK2Fww7NzIHF1YWxxdWVyIG9wZXJhbmRvIGRlIHF1YWxxdWVyIGRpcmV0aXZhLCDDqSBpZ25vcmFkby4gTGluaGFzIHF1ZSANCitjb250w6ptIGFwZW5hcyBlc3Bhw6dvIGVtIGJyYW5jbyBzw6NvIGlnbm9yYWRhcy4gU2UgbyBjYXLDoXRlciBuw6NvLWVzcGHDp28gZW0gDQorYnJhbmNvIGFudGVzIGRlIHVtYSBsaW5oYSBmb3IgIiMiIGVudMOjbyBlc3NhIGxpbmhhIMOpIHVtIGNvbWVudMOhcmlvIGUgw6kgDQoraWdub3JhZG8uDQorIA0KKzYuMi4yCVRhYmVsYSBkZSBEaXJldMOzcmlvcyBkb3MgQXRyaWJ1dG9zDQorDQorQXMgc2VndWludGVzIGRpcmV0aXZhcyBzw6NvIGZvcm5lY2lkYXM6DQorIA0KK2RvdCBkb3Qgc3RhdGUgIyBjb21tZW50DQorVXNlIGEgZGlyZXRpdmEgZG90IHBhcmEgZXNwZWNpZmljYXIgbyBxdWUgdW0gZGV0ZXJtaW5hZG8gcG9udG8gDQorcmVwcmVzZW50YS4NCisNCitkb3QNCitPIHBvbnRvIGEgc2VyIGRlZmluaWRvLiDDiSB1bSDDum5pY28gZMOtZ2l0byBubyBpbnRlcnZhbG8gMS04LCB0YWwgY29tbyANCitkZWZpbmlkbyBwZWxhIFN0YW5kYXJkIEJyYWlsbGUgRG90IE51bWJlcmluZyBDb252ZW50aW9uLg0KKw0KK3N0YXRlDQorTyBxdWUgbyBwb250byByZXByZXNlbnRhLiBQb2RlIHNlcjoNCisNCisgICAgICA9YXR0cmlidXRlDQorICAgICAgTyBwb250byDDqSBsZXZhbnRhZG8gc2UgbyBhdHJpYnV0byBub21lIGVzdMOhIG9uLg0KKw0KKyAgICAgIH5hdHRyaWJ1dGUNCisgICAgICBPIHBvbnRvIMOpIGxldmFudGFkbyBzZSBvIGF0cmlidXRvIG5vbWUgZXN0w6Egb2ZmLg0KKw0KK09zIG5vbWVzIGRvcyBiaXRzIGRlIGF0cmlidXRvIHPDo286DQorDQorICAgICAgMFgwMQkJZmctYmx1ZQ0KKw0KKyAgICAgIDBYMDIJCWZnLWdyZWVuDQorDQorICAgICAgMHgwNAkJZmctcmVkDQorDQorICAgICAgMHgwOAkJZmctYnJpZ2h0DQorDQorICAgICAgMFgxMAkJYmctYmx1ZQ0KKw0KKyAgICAgIDB4MjAJCWJnLWdyZWVuDQorDQorICAgICAgMHg0MAkJYmctcmVkDQorDQorICAgICAgMHg4MAkJYmxpbmsNCisgDQorRXhlbXBsb3M6DQorDQorICAgICAgwrcgZG90IDEgPWZnLXJlZA0KKyAgICAgIMK3IGRvdCAyIH5iZy1ibHVlDQorIA0KK2luY2x1ZGUgZmlsZSAjIGNvbW1lbnQNCitVc2UgYSBkaXJldGl2YSBpbmNsdWRlIHBhcmEgaW5jbHVpciBvIGNvbnRlw7pkbyBkZSB1bSBhdHJpYnV0b3MgDQorc3VidGFiZWxhLiBFbGUgw6kgcmVjdXJzaXZvLCBvIHF1ZSBzaWduaWZpY2EgcXVlIG9zIGF0cmlidXRvcyBzdWJ0YWJlbGEgDQorcG9kZS1zZSBpbmNsdWlyIGFpbmRhIGVtIG91dHJvcyBhdHJpYnV0b3Mgc3VidGFiZWxhLiBDdWlkYWRvcyBkZXZlbSBzZXIgDQordG9tYWRvcyBwYXJhIGdhcmFudGlyIHF1ZSAiaW5jbHVkZSBsb29wIiBuw6NvIHNlamEgY3JpYWRvLg0KKw0KK2ZpbGUNCitPIGFycXVpdm8gYSBzZXIgaW5jbHXDrWRvLiBQb2RlIHNlciB1bSByZWxhdGl2byBvdSB1bSBjYW1pbmhvIGFic29sdXRvLiANCitTZSByZWxhdGl2bywgZWxhIGVzdMOhIGFuY29yYWRhIG5vIGRpcmV0w7NyaW8gY29udGVuZG8gbyBhcnF1aXZvIA0KK2luY2x1aW5kby4NCisNCis2LjMgVGFiZWxhIGRlIENvbnRyYcOnw6NvDQorDQorT3MgYXJxdWl2b3MgY29tIG5vbWVzIG5vIGZvcm1hdG8gKi5jdGIgc8OjbyB0YWJlbGFzIGRlIGNvbnRyYcOnw6NvLCBlIGNvbSANCitub21lcyBubyBmb3JtYXRvICouY3RpIHPDo28gc3VidGFiZWxhcyBkZSBjb250cmHDp8Ojby4gRWxlcyBzw6NvIHVzYWRvcyBwZWxvIA0KK0JSTFRUWSBwYXJhIHRyYWR1emlyIGFzIHNlccO8w6puY2lhcyBkZSBjYXJhY3RlcmVzIG5hIHRlbGEgZW0gc3VhcyANCityZXNwZWN0aXZhcyByZXByZXNlbnRhw6fDtWVzIGNvbnRyYcOnw6NvIGVtIGJyYWlsbGUuDQorDQorQlJMVFRZIGFwcmVzZW50YSBjb250cmHDp8OjbyBlbSBicmFpbGxlIHNlOg0KKw0KKyAgICAgIMK3IEEgdGFiZWxhIGRlIGNvbnRyYcOnw6NvIGZvaSBzZWxlY2lvbmFkYS4gQ29uc3VsdGUgYSBvcMOnw6NvIGRlIGxpbmhhIA0KK2RlIGNvbWFuZG8gLWMgZSBhcyBkaXJldGl2YXMgZG8gYXJxdWl2byBkZSBjb25maWd1cmHDp8OjbyBjb250cmFjdGlvbi0NCit0YWJsZSBwYXJhIG9idGVyIG1haXMgZGV0YWxoZXMuDQorICAgICAgwrcgTyByZWN1cnNvIDYtZG90IGJyYWlsbGUgZm9pIGF0aXZhZG8uIFZlamEgbyBjb21hbmRvIFNJWERPVFMgZSBvIA0KK1RleHQgU3R5bGUgcGFyYSBtYWlzIGRldGFsaGVzLg0KKw0KK0Vzc2UgcmVjdXJzbyBuw6NvIGVzdGFyw6EgZGlzcG9uw612ZWwgc2UgYSBvcMOnw6NvIGRlIGNvbnN0cnXDp8OjbyAtLWRpc2FibGUtDQorY29udHJhY3RlZC1icmFpbGxlIGZvaSBlc3BlY2lmaWNhZGEuDQorDQorQXMgc2VndWludGVzIHRhYmVsYXMgZGUgY29udHJhw6fDo28gc8OjbyBmb3JuZWNpZGFzOg0KKw0KKyAgICAgIGFmCUFmcmlrYWFucyAoY29udHJhY2lvbmFkbykNCisNCisgICAgICBhbQlBbWhhcmljIChuw6NvLWNvbnRyYWNpb25hZG8pDQorDQorICAgICAgZGUtYmFzaXMJCQlHZXJtYW4gKG7Do28tY29udHJhY2lvbmFkbykNCisNCisgICAgICBkZS1rdXJ6c2NocmlmdCAgICAJR2VybWFuIChjb250cmFjaW9uYWRvIC0gcGFkcsOjbzE5OTgpDQorDQorICAgICAgZGUtdm9sbHNjaHJpZnQgICAgCUdlcm1hbiAoY29udHJhw6fDtWVzIGLDoXNpY2FzKQ0KKw0KKyAgICAgIGVuLXVlYi1nMgkJCVVuaWZpZWQgRW5nbGlzaCBCcmFpbGxlIChncmF1IDIpDQorDQorICAgICAgZW4tdXMtZzIJCQlBbWVyaWNhbiBFbmdsaXNoIChncmF1IDIpDQorDQorICAgICAgZXMJCQkJU3BhbmlzaCAoZ3JhdSAyKQ0KKw0KKyAgICAgIGZyLWFicmVnZQkJCUZyZW5jaCAoY29udHJhY2lvbmFkbykNCisNCitmci1pbnRlZ3JhbAkJRnJlbmNoIChuw6NvLWNvbnRyYWNpb25hZG8pIA0KKw0KK2hhCQkJCUhhdXNhIChjb250cmFjaW9uYWRvKQ0KKw0KKyAgICAgIGlkCQkJCUluZG9uZXNpYW4gKGNvbnRyYWNpb25hZG8pDQorDQorICAgICAgasOhCQkJICAgICBKYXBhbmVzZSAobsOjby1jb250cmFjaW9uYWRvKQ0KKw0KKyAgICAgIGtvLWcxCQkJCUtvcmVhbiAoZ3JhdSAxKQ0KKw0KKyAgICAgIGtvLWcyCQkJCUtvcmVhbiAoZ3JhdSAyKQ0KKw0KKyAgICAgIGtvCQkJCUtvcmVhbiAobsOjby1jb250cmFjaW9uYWRvKQ0KKw0KKyAgICAgIG1nCQkJCU1hbGFnYXN5IChjb250cmFjaW9uYWRvKQ0KKw0KKyAgICAgIG11bgkJCQlNdW5kYSAoY29udHJhY2lvbmFkbykNCisNCisgICAgICBubAkJCQlEdXRjaCAoY29udHJhY2lvbmFkbykNCisNCisgICAgICBueQkJCQlDaGljaGV3YSAoY29udHJhY2lvbmFkbykNCisNCisgICAgICBpcGEJCQkJSW50ZXJuYXRpb25hbCBQaG9uZXRpYyBBbHBoYWJldA0KKw0KKyAgICAgIHB0CQkJCVBvcnR1Z3Vlc2UgKGdyYXUgMikNCisNCisgICAgICBzaQkJCQlTaW5oYWxlc2UgKG7Do28tY29udHJhY2lvbmFkbykNCisNCisgICAgICBzdwkJCQlTd2FoaWxpIChjb250cmFjaW9uYWRvKQ0KKw0KKyAgICAgIHRoCQkJCVRoYWkgKGNvbnRyYWNpb25hZG8pDQorDQorICAgICAgemgtdHcJCQkJVGFpd2FuZXNlIENoaW5lc2UgKG7Do28tY29udHJhY2lvbmFkbykNCisNCisgICAgICB6aC10dy11Y2IJCQlUYWl3YW5lc2UgQ2hpbmVzZSAoVW5pcXVlIENoaW5lc2UgQnJhaWxsZSkNCisNCisgICAgICB6dQkJCQladWx1IChjb250cmFjaW9uYWRvKQ0KKw0KK1ZlamEgYSBvcMOnw6NvIGRlIGxpbmhhIGRlIGNvbWFuZG8gLWMsIGUgYXMgZGlyZXRpdmFzIGRvIGFycXVpdm8gZGUgDQorY29uZmlndXJhw6fDo28gY29udHJhY3Rpb24tdGFibGUgcGFyYSBvYnRlciBkZXRhbGhlcyBzb2JyZSBjb21vIHVzYXIgdW1hIA0KK3RhYmVsYSBkZSBjb250cmHDp8Ojby4NCisgDQorNi4zLjEgVGFiZWxhIGRlIEZvcm1hdG8gZGUgQ29udHJhw6fDo28NCisNCitVbWEgdGFiZWxhIGRlIGNvbnRyYcOnw6NvIGNvbnNpc3RlIGRlIHVtYSBzZXHDvMOqbmNpYSBkZSBlbnRyYWRhcywgdW1hIHBvciANCitsaW5oYSwgcXVlIGRlZmluZSBjb21vIGFzIHNlccO8w6puY2lhcyBkZSBjYXJhY3RlcmVzIGRldmVtIHNlciANCityZXByZXNlbnRhZGFzIGVtIEJyYWlsbGUuIENhcmFjdGVyZXMgVVRGLTggZGV2ZW0gc2VyIHVzYWRvcy4gTyBlc3Bhw6dvIGVtIA0KK2JyYW5jbyAoZXNwYcOnb3MsIHRhYnMpIG5vIGluw61jaW8gZGUgdW1hIGxpbmhhLCBhc3NpbSBjb21vIGFudGVzIGUvb3UgDQorZGVwb2lzIGRlIHF1YWxxdWVyIG9wZXJhbmRvLCDDqSBpZ25vcmFkby4gTGluaGFzIHF1ZSBjb250w6ptIGFwZW5hcyBlc3Bhw6dvIA0KK2VtIGJyYW5jbyBzw6NvIGlnbm9yYWRhcy4gU2UgbyBjYXLDoXRlciBuw6NvLWVzcGHDp28gZW0gYnJhbmNvIGFudGVzIGRlIHVtYSANCitsaW5oYSDDqSAiIyIgZW50w6NvIGVzc2EgbGluaGEgw6kgdW0gY29tZW50w6FyaW8gZSDDqSBpZ25vcmFkby4NCisNCitPIGZvcm1hdG8gZGUgdW1hIGVudHJhZGEgbmEgdGFiZWxhIGRlIGNvbnRyYcOnw6NvIMOpOg0KKw0KKyAgICAgIGRpcmVjdGl2ZSBvcGVyYW5kIC4uLiBbY29tbWVudF0NCisNCitDYWRhIGRpcmV0aXZhIHRlbSB1bSBuw7ptZXJvIGVzcGVjw61maWNvIGRlIG9wZXJhbmRvcy4gUXVhbHF1ZXIgdGV4dG8gYWzDqW0gDQorZG8gw7psdGltbyBvcGVyYW5kbyBkZSB1bWEgZGlyZXRpdmEgw6kgaW50ZXJwcmV0YWRvIGNvbW8gdW0gY29tZW50w6FyaW8uIEEgDQorb3JkZW0gZGFzIGVudHJhZGFzIGRlbnRybyBkZSB1bWEgdGFiZWxhIGRlIGNvbnRyYcOnw6NvIMOpLCBlbSBnZXJhbCwgdHVkbyBvIA0KK3F1ZSDDqSBjb252ZW5pZW50ZSBwYXJhIHNldSBtYW50ZW5lZG9yIChzKS4gVW1hIGVudHJhZGEgcXVlIGRlZmluZSB1bWEgDQorZW50aWRhZGUsIGUuZy4gY2xhc3MsIGRldmUgcHJlY2VkZXIgdG9kYXMgYXMgcmVmZXLDqm5jaWFzIGEgZXNzYSANCitlbnRpZGFkZS4NCisNCitFbnRyYWRhcyBxdWUgY29tYmluYW0gc2VxdcOqbmNpYXMgZGUgY2FyYWN0ZXJlcyBzw6NvIGF1dG9tYXRpY2FtZW50ZSANCityZWFycmFuamFkYXMgZG8gbWFpb3IgcGFyYSBvIG1lbm9yLCBkZSBtb2RvIHF1ZSBvIG1haW9yIHNlbXByZSDDqSANCitwcmVmZXLDrXZlbC4gU2UgbWFpcyB1bWEgZW50cmFkYSBjb3JyZXNwb25kZSBhIHNlccO8w6puY2lhIGRlIGNhcmFjdGVyZXMsIA0KK2VudMOjbyBhIHN1YSB0YWJlbGEgb3JpZ2luYWwgZGUgb3JkZW5hw6fDo28gw6kgbWFudGlkYS4gQXNzaW0sIGEgbWVzbWEgDQorc2Vxw7zDqm5jaWEgcG9kZSBzZXIgdHJhZHV6aWRhIGRlIGZvcm1hIGRpZmVyZW50ZSBlbSBjaXJjdW5zdMOibmNpYXMgDQorZGlmZXJlbnRlcy4NCisgDQorNi4zLjIJVGFiZWxhIGRlIE9wZXJhbmRvcyBkZSBDb250cmHDp8OjbyANCisgDQorDQorY2hhcmFjdGVycw0KK08gcHJpbWVpcm8gb3BlcmFuZG8gZGUgdW1hIHNlccO8w6puY2lhIGRlIGNhcmFjdGVyZXMgY29ycmVzcG9uZGVudGUgYXMgDQorZGlyZXRpdmFzIGUgYSBzZXHDvMOqbmNpYSBkZSBjYXJhY3RlcmVzIGEgc2VyIGNvcnJlc3BvbmRpZGEuIENhZGEgY2Fyw6FjdGVyIA0KK2RlbnRybyBkYSBzZXHDvMOqbmNpYSBwb2RlIHNlcjoNCisNCisgICAgICDCtyBRdWFscXVlciBjYXJhY3RlciDDum5pY28gcXVlIG7Do28gc2VqYSB1bWEgYmFycmEtaW52ZXJ0aWRhIG91IHVtIA0KK2NhcsOhY3RlciBkZSBlc3Bhw6dvIGVtIGJyYW5jby4NCisNCisgICAgICDCtyBVbSBjYXJhY3RlciBlc3BlY2lhbCBwcmVmaXhhZG8gZGUgYmFycmEtaW52ZXJ0aWRhLiBTw6NvIGVsZXM6DQorDQorICAgICAgXGINCisgICAgICBDYXLDoWN0ZXIgZGUgcmV0cm9jZXNzby4NCisNCisgICAgICBcZg0KKyAgICAgIENhcsOhY3RlciBmb3JtZmVlZCAocXVlYnJhIGRlIHDDoWdpbmEpLg0KKw0KKyAgICAgIFxuDQorICAgICAgQ2Fyw6FjdGVyIGRlIG5vdmEgbGluaGEuDQorDQorICAgICAgXG8jIyMNCisgICAgICBSZXByZXNlbnRhw6fDo28gZGUgdW0gY2Fyw6FjdGVyIGRlIHRyw6pzIGTDrWdpdG9zIG9jdGFsLg0KKw0KKyAgICAgIFxyDQorICAgICAgQ2Fyw6FjdGVyIGRlIHJldG9ybm8gZGUgdHJhbnNwb3J0ZS4NCisNCisgICAgICBccw0KKyAgICAgIENhcsOhY3RlciBkZSBlc3Bhw6dvLg0KKw0KKyAgICAgIFx0DQorICAgICAgQ2Fyw6FjdGVyIGRlIHRhYiBob3Jpem9udGFsLg0KKw0KKyAgICAgIFx1IyMjIw0KKyAgICAgIFJlcHJlc2VudGHDp8OjbyBkZSB1bSBjYXLDoWN0ZXIgaGV4YWRlY2ltYWwgZGUgcXVhdHJvIGTDrWdpdG8uDQorDQorICAgICAgXFUjIyMjIyMjIw0KKyAgICAgIFJlcHJlc2VudGHDp8OjbyBkZSB1bSBjYXLDoWN0ZXIgaGV4YWRlY2ltYWwgZGUgb2l0byBkw61naXRvLg0KKw0KKyAgICAgIFx2DQorICAgICAgQ2Fyw6FjdGVyIGRlIHRhYiBob3Jpem9udGFsLg0KKw0KKyAgICAgIFx4IyMNCisgICAgICBSZXByZXNlbnRhw6fDo28gZGUgdW0gY2Fyw6FjdGVyIGhleGFkZWNpbWFsIGRlIGRvaXMgZMOtZ2l0b3MuDQorDQorICAgICAgXFgjIw0KKyAgICAgIChvIGNhc28gZG8gWCBlIGRvcyBkw61naXRvcyBuw6NvIMOpIHNpZ25pZmljYXRpdmEpLg0KKw0KKyAgICAgIFwjDQorICAgICAgVW0gc2luYWwgZGUgbsO6bWVybyBsaXRlcmFsLg0KKw0KKyAgICAgIFw8bmFtZT4NCisgICAgICBPIG5vbWUgVW5pY29kZSBkZSB1bSBjYXLDoWN0ZXIodXNlIF8gcGFyYSBlc3Bhw6dvKS4NCisNCisgICAgICBcXA0KKyAgICAgIFVtYSBiYXJyYS1pbnZlcnRpZGEgbGl0ZXJhbC4NCisgDQorDQorDQorcmVwcmVzZW50YXRpb24NCitPIHNlZ3VuZG8gb3BlcmFuZG8gZGVzc2Egc2Vxw7zDqm5jaWEgZGUgY2FyYWN0ZXJlcyBjb3JyZXNwb25kZW50ZXMgYSANCitkaXJldGl2YXMgcXVlIHRlbSB1bWEgcmVwcmVzZW50YcOnw6NvIGJyYWlsbGUgZGEgc2Vxw7zDqm5jaWEuIENhZGEgY8OpbHVsYSANCiticmFpbGxlIMOpIGVzcGVjaWZpY2FkYSBjb21vIHVtYSBzZXHDvMOqbmNpYSBkZSAxLTggbsO6bWVyb3MgZGUgcG9udG9zLiBVbSANCituw7ptZXJvIGRlIHBvbnRvIMOpIHVtIGTDrWdpdG8gZGVudHJvIGRvIGludGVydmFsbyAxLTgsIHRhbCBjb21vIGRlZmluaWRvIA0KK3BlbGEgU3RhbmRhcmQgQnJhaWxsZSBEb3QgTnVtYmVyaW5nIENvbnZlbnRpb24uIE8gbsO6bWVybyBkZSBwb250byANCitlc3BlY2lhbCAwLCBxdWUgbsOjbyBwb2RlIHNlciB1c2FkbyBlbSBjb25qdW50byBjb20gcXVhbHF1ZXIgb3V0cm8gbsO6bWVybyANCitkZSBwb250b3MsIHNpZ25pZmljYSBxdWUgbsOjbyBow6EgcG9udG9zLg0KKyANCis2LjMuMyBPcGNvZGVzDQorDQorVW0gb3Bjb2RlIMOpIHVtYSBwYWxhdnJhLWNoYXZlIHF1ZSBkaXogbyB0cmFkdXRvciBjb21vIGludGVycHJldGFyIG9zIA0KK29wZXJhbmRvcy4gT3Mgb3Bjb2RlcyBzw6NvIGFncnVwYWRvcyBhcXVpIHBvciBmdW7Dp8Ojby4NCisgDQorNi4zLjMuMSBBZG1pbmlzdHJhw6fDo28gZGUgVGFiZWxhDQorDQorRXN0ZXMgb3Bjb2RlcyB0b3JuYSBtYWlzIGbDoWNpbCBkZSBlc2NyZXZlciBhcyB0YWJlbGFzIGNvbnRyYcOnw6NvLiBFbGVzIA0KK27Do28gdMOqbSBuZW5odW0gZWZlaXRvIGRpcmV0byBzb2JyZSBhIHRyYWR1w6fDo28gZGUgY2FyYWN0ZXJlcy4NCisNCitpbmNsdWRlIHBhdGgNCisNCitJbmNsdWlyIG8gY29udGXDumRvIGRlIG91dHJvIGFycXVpdm8uIENvZGlmaWNhw6fDo28gcG9kZSBzZXIgZW0gcXVhbHF1ZXIgDQorcHJvZnVuZGlkYWRlLiBPcyBjYW1pbmhvcyByZWxhdGl2b3Mgc8OjbyBhbmNvcmFkb3Mgbm8gZGlyZXTDs3JpbyBkbyANCithcnF1aXZvIGluY2x1w61kby4NCisNCitsb2NhbGUgbG9jYWxlDQorDQorRGVmaW5lIGEgbG9jYWxpZGFkZSBwYXJhIGEgaW50ZXJwcmV0YcOnw6NvIGRlIGNhcsOhY3RlcmVzIChsZXRyYXMgDQorbWluw7pzY3VsYXMsIG1hacO6c2N1bGFzLCBuw7ptZXJvcywgZXRjLikgTyBsb2NhbCBwb2RlIHNlciBlc3BlY2lmaWNhZG8gDQorY29tbzoNCisNCitsYW5ndWFnZVtfY291bnRyeV1bLmNoYXJzZXRdW0Btb2RpZmllcl0NCisNCitPIGNvbXBvbmVudGUgbGFuZ3VhZ2Ugw6kgbmVjZXNzw6FyaW8gZSBkZXZlcsOhIHNlciB1bSBjw7NkaWdvIGRlIGR1YXMgbGV0cmFzIA0KK3BhcmEgbMOtbmd1YXMgbm8gcGFkcsOjbyBJU08tNjM5LiBPIGNvbXBvbmVudGUgY291bnRyeSDDqSBvcGNpb25hbCBlIGRldmVyw6EgDQorc2VyIHVtIGPDs2RpZ28gZGUgZHVhcyBsZXRyYXMgbm8gcGFkcsOjbyBJU08tMzE2Ni4gTyBjb21wb25lbnRlIGNoYXJzZXQgw6kgDQorb3BjaW9uYWwgZSBkZXZlIHNlciB1bSBub21lIGRlIGNvbmp1bnRvIGRlIGNhcmFjdGVyZXMsIGUuZy4gSVNPLTg4NTktMS4NCisNCitDDQorNy1iaXQgQVNDSUkuDQorDQorLQ0KK1NlbSBsb2NhbGlkYWRlLg0KKw0KK0Egw7psdGltYSBlc3BlY2lmaWNhw6fDo28gZGUgbG9jYWxpZGFkZSBzZSBhcGxpY2Egw6AgdGFiZWxhIGludGVpcmEuIFNlIGVzdGUgDQorb3Bjb2RlIG7Do28gZm9yIHVzYWRvLCBhIGxvY2FsaWRhZGUgQyDDqSBhc3N1bWlkYS4NCisgDQorNi4zLjMuMiBEZWZpbmnDp8OjbyBkZSBzw61tYm9sbyBlc3BlY2lhbA0KKw0KK0VzdGVzIG9wY29kZXMgZGVmaW5lbSBzw61tYm9sb3MgZXNwZWNpYWlzIHF1ZSBkZXZlbSBzZXIgaW5zZXJpZG9zIG5vIA0KK3RleHRvIGVtIGJyYWlsZSwgYSBmaW0gZGUgZXNjbGFyZWPDqi1sby4NCisNCisgICAgICBjYXBzaWduIGRvdHMNCisgICAgICBPIHPDrW1ib2xvIHF1ZSBjYXBpdGFsaXphIHVtYSDDum5pY2EgbGV0cmEuDQorDQorICAgICAgYmVnY2FwcyBkb3RzDQorTyBzw61tYm9sbyBxdWUgc2UgaW5pY2lhIHVtIGJsb2NvIGRlIGxldHJhcyBtYWnDunNjdWxhcyBlbSB1bWEgDQorcGFsYXZyYS4NCisNCisgICAgICBlbmRjYXBzIGRvdHMNCisgICAgICBPIHPDrW1ib2xvIHF1ZSB0ZXJtaW5hIHVtIGJsb2NvIGRlIGxldHJhcyBtYWnDunNjdWxhcyBlbSB1bWEgcGFsYXZyYS4NCisNCisgICAgICBsZXRzaWduIGRvdHMNCisgICAgICBPIHPDrW1ib2xvIHF1ZSBtYXJjYSB1bWEgY2FydGEgcXVlIG7Do28gZmF6IHBhcnRlIGRlIHVtYSBwYWxhdnJhLg0KKw0KKyAgICAgIG51bXNpZ24gZG90cw0KKyAgICAgIE8gc8OtbWJvbG8gcXVlIG1hcmNhIG8gaW7DrWNpbyBkZSB1bSBuw7ptZXJvLg0KKyANCis2LjMuMy4zIFRyYWR1w6fDo28gZGUgQ2Fyw6FjdGVyDQorDQorRXN0ZXMgb3Bjb2RlcyBkZWZpbmVtIGFzIHJlcHJlc2VudGHDp8O1ZXMgYnJhaWxsZSBwYXJhIHNlcXXDqm5jaWFzIGRlIA0KK2NhcsOhY3RlcmVzLiBDYWRhIHVtIGRlbGVzIGRlZmluZSB1bWEgZW50cmFkYSBuYSB0YWJlbGEgZGUgY29udHJhw6fDo28uIA0KK0Vzc2FzIGVudHJhZGFzIHBvZGVtIHNlciBkZWZpbmlkYXMgZW0gcXVhbHF1ZXIgb3JkZW0sIGV4Y2V0bywgY29tbyANCitpbmRpY2FkbyBhYmFpeG8sIHF1YW5kbyBkZWZpbmVtIHJlcHJlc2VudGHDp8O1ZXMgYWx0ZXJuYXRpdmFzIHBhcmEgYSANCitzZXHDvMOqbmNpYSBkYSBtZXNtYSBuYXR1cmV6YS4NCisNCitDYWRhIHVtIGRlc3NlcyBvcGNvZGVzIHBvc3N1aSB1bSBjYXLDoWN0ZXIgb3BlcmFuZG8gKHF1ZSBkZXZlIHNlciANCitlc3BlY2lmaWNhZG8gY29tbyB1bWEgc3RyaW5nKSwgZSB1bWEgY29uZGnDp8OjbyBlbWJ1dGlkYSBxdWUgcmVnZW0gYSBzdWEgDQorZWxlZ2liaWxpZGFkZSBwYXJhIG8gdXNvLiBPIHRleHRvIMOpIHByb2Nlc3NhZG8gZXN0cml0YW1lbnRlIGRlIGVzcXVlcmRhIA0KK3BhcmEgYSBkaXJlaXRhLCBjYXJhY3RlcmUgcG9yIGNhcmFjdGVyZSwgY29tIGEgZW50cmFkYSBtYWlzIGVsZWfDrXZlbCANCitwYXJhIGNhZGEgcG9zacOnw6NvIGEgc2VyIHV0aWxpemFkYS4gU2UgaG91dmVyIG1haXMgZGUgdW1hIGVudHJhZGEgDQorZWxlZ8OtdmVsIHBhcmEgdW1hIGRldGVybWluYWRhIHBvc2nDp8OjbywgZW50w6NvIGFxdWVsZSBjb20gYSBtYWlvciBjYWRlaWEgDQorZGUgY2FyYWN0ZXJlIMOpIHVzYWRvLiBTZSBob3V2ZXIgbWFpcyBkZSB1bWEgZW50cmFkYSBlbGVnw612ZWwgcGFyYSBhIA0KK21lc21hIHN0cmluZyBkZSBjYXJhY3RlcmVzLCBlbnTDo28gYSB1bWEgZGVmaW5pw6fDo28gbWFpcyBwcsOzeGltYSBkbyBpbsOtY2lvIA0KK2RhIHRhYmVsYSDDqSB1c2FkYSAoaXNzbyDDqSBhIGRlcGVuZMOqbmNpYSBkZSBvcmRlbSDDum5pY2EpLg0KKw0KK011aXRvcyBkZXNzZXMgb3Bjb2RlcyB0w6ptIHVtIGRvdCBvcGVyYW5kbyBxdWUgZGVmaW5lIGEgcmVwcmVzZW50YcOnw6NvIA0KK2JyYWlsbGUgcGFyYSBzZXUgb3BlcmFuZG8gY2hhcmFjdGVycy4gVGFtYsOpbSBwb2RlIHNlciBlc3BlY2lmaWNhZG8gY29tbyANCit1bSBzaW5hbCBkZSBpZ3VhbCAoPSksIGNhc28gZW0gcXVlIHNpZ25pZmljYSB1bWEgZGUgZHVhcyBjb2lzYXMuIFNlIGEgDQorZW50cmFkYSDDqSBwYXJhIHVtIMO6bmljbyBjYXLDoWN0ZXIsIGVudMOjbyBpc3NvIHNpZ25pZmljYSBxdWUgYSBhdHVhbCANCityZXByZXNlbnRhw6fDo28gYnJhaWxsZSBzZWxlY2lvbmFkYSBubyBjb21wdXRhZG9yICh2ZXIgYSBvcMOnw6NvIGRlIGxpbmhhIGRlIA0KK2NvbWFuZG8gLXQgZSBhIGRpcmV0aXZhIHRleHQtdGFibGUgZG8gYXJxdWl2byBkZSBjb25maWd1cmHDp8OjbykgcGFyYSBxdWUgDQorbyBjYXLDoXRlciDDqSBwYXJhIHNlciB1c2Fkby4gU2Ugw6kgcGFyYSB1bWEgc2Vxw7zDqm5jaWEgZGUgbXVsdGktY2Fyw6F0ZXJlcywgDQorZW50w6NvIGEgcmVwcmVzZW50YcOnw6NvIHBhZHLDo28gcGFyYSBjYWRhIGNhcmFjdGVyICh2ZWphIGFsd2F5cykgZGVudHJvIGRhIA0KK3NlccO8w6puY2lhIGRldmUgc2VyIHVzYWRhLg0KKw0KK0FsZ3VucyB0ZXJtb3MgZXNwZWNpYWlzIHPDo28gdXNhZG9zIG5hcyBkZXNjcmnDp8O1ZXMgZGVzc2VzIG9wY29kZXMuDQorDQorICAgICAgd29yZA0KKyAgICAgIFVtYSBzZXHDvMOqbmNpYSBtw6F4aW1hIGRlIHVtYSBvdSBtYWlzIGxldHJhcyBjb25zZWN1dGl2YXMuDQorDQorQWdvcmEsIGZpbmFsbWVudGUsIGFxdWkgZXN0w6EgYSBkZXNjcmnDp8OjbyBvcGNvZGU6DQorDQorICAgICAgbGl0ZXJhbCBjaGFyYWN0ZXJzDQorVHJhZHV6IHRvZGEgYSBzZXHDvMOqbmNpYSBkZSBjYXJhY3RlcmVzIGRlbGltaXRhZGEgcG9yIGVzcGHDp28gZW0gDQorYnJhbmNvIG5vIGJyYWlsbGUgZG8gY29tcHV0YWRvciAodmVyIGEgb3DDp8OjbyBkZSBsaW5oYSBkZSBjb21hbmRvIC10IA0KK2UgYSBkaXJldGl2YSB0ZXh0LXRhYmxlIGRvIGFycXVpdm8gZGUgY29uZmlndXJhw6fDo28pLg0KKw0KKyAgICAgIHJlcGxhY2UgY2hhcmFjdGVycyBjaGFyYWN0ZXJzDQorU3Vic3RpdHVpIG8gcHJpbWVpcm8gY29uanVudG8gZGUgY2FyYWN0ZXJlcywgbsOjbyBpbXBvcnRhIG9uZGUgZWxlcyANCithcGFyZWNlbSwgY29tIGEgc2VndW5kYS4gT3MgY2Fyw6FjdGVyZXMgc3Vic3RpdHXDrWRvcyBuw6NvIHPDo28gDQorcmVwcm9jZXNzYWRvLg0KKw0KKyAgICAgIGFsd2F5cyBjaGFyYWN0ZXJzIGRvdHMNCitUcmFkdXogb3MgY2Fyw6FjdGVyZXMsIG7Do28gaW1wb3J0YSBvbmRlIGVsZXMgYXBhcmVjZW0uIFNlIGjDoSBhcGVuYXMgDQordW0gY2Fyw6FjdGVyLCBlbnTDo28sIGFsw6ltIGRpc3NvLCBkZWZpbmkgYSByZXByZXNlbnRhw6fDo28gcGFkcsOjbyBwYXJhIA0KK2Vzc2UgY2Fyw6FjdGVyLg0KKw0KKyAgICAgIHJlcGVhdGFibGUgY2hhcmFjdGVycyBkb3RzDQorVHJhZHV6IG9zIGNhcsOhY3RlcmVzLCBuw6NvIGltcG9ydGEgb25kZSBlbGVzIGFwYXJlY2VtLiBJZ25vcmEgDQorcXVhaXNxdWVyIHJlcGV0acOnw7VlcyBjb25zZWN1dGl2YXMgZGEgbWVzbWEgc2VxdcOqbmNpYS4NCisNCisgICAgICBsYXJnZXNpZ24gY2hhcmFjdGVycyBkb3RzDQorVHJhZHV6IG9zIHBlcnNvbmFnZW5zLCBuw6NvIGltcG9ydGEgb25kZSBlbGVzIGFwYXJlY2VtLiBSZXRpcmEgb3MgDQorZXNwYcOnbyBlbSBicmFuY28gZW50cmUgYXMgcGFsYXZyYXMgY29uc2VjdXRpdmFzIGFjb21wYW5oYWRvIHBvciANCitlc3RlIG9wY29kZS4NCisNCisgICAgICBsYXN0bGFyZ2VzaWduIGNoYXJhY3RlcnMgZG90cw0KK1RyYWR1eiBvcyBjYXLDoWN0ZXJlcywgbsOjbyBpbXBvcnRhIG9uZGUgZWxlcyBhcGFyZWNlbS4gUmVtb3ZlIG8gDQorZXNwYcOnbyBlbSBicmFuY28gYW50ZXJpb3Igc2UgYSBwYWxhdnJhIGFudGVyaW9yIGZvaSBhY29tcGFuaGFkbyANCitwZWxvIG9wY29kZSBsYXJnZXNpZ24uDQorDQorICAgICAgd29yZCBjaGFyYWN0ZXJzIGRvdHMNCisgICAgICBUcmFkdXogb3MgY2Fyw6FjdGVyZXMgc2UgZWxlcyBzw6NvIHVtYSBwYWxhdnJhLg0KKw0KKyAgICAgIGpvaW53b3JkIGNoYXJhY3RlcnMgZG90cw0KK1RyYWR1eiBvcyBjYXLDoWN0ZXJlcyBzZSBlbGVzIHPDo28gdW1hIHBhbGF2cmEuIFJlbW92ZSBvIHNlZ3VpbnRlIA0KK2VzcGHDp28gZW0gYnJhbmNvIHNlIG8gcHJpbWVpcm8gY2FyYWN0ZXJlIGRlcG9pcyDDqSB1bWEgbGV0cmEuDQorDQorICAgICAgbG93d29yZCBjaGFyYWN0ZXJzIGRvdHMNCitUcmFkdXogb3MgY2Fyw6FjdGVyZXMgc2UgZWxlcyBzw6NvIHVtYSBwYWxhdnJhIGRlbGltaXRhZGEgYnJhbmNvLQ0KK2VzcGHDp28uDQorDQorICAgICAgY29udHJhY3Rpb24gY2hhcmFjdGVycw0KK1ByZWZpeGEgb3MgY2Fyw6FjdGVyZXMgY29tIHVtIHNpbmFsIGRlIGxldHJhICh2ZWphIGxldHNpZ24pIHNlIGVsZXMgDQorc8OjbyB1bWEgcGFsYXZyYS4NCisNCisgICAgICBzdWZ3b3JkIGNoYXJhY3RlcnMgZG90cw0KK1RyYWR1eiBvcyBjYXLDoWN0ZXJlcyBzZSBlbGVzIHPDo28gdW1hIHBhbGF2cmEgb3Ugbm8gaW7DrWNpbyBkZSB1bWEgDQorcGFsYXZyYS4NCisNCisgICAgICBwcmZ3b3JkIGNoYXJhY3RlcnMgZG90cw0KK1RyYWR1eiBvcyBjYXLDoWN0ZXJlcyBzZSBlbGVzIHPDo28gdW1hIHBhbGF2cmEgb3Ugbm8gZmluYWwgZGUgdW1hIA0KK3BhbGF2cmEuDQorDQorICAgICAgYmVnd29yZCBjaGFyYWN0ZXJzIGRvdHMNCisJVHJhZHV6IG9zIGNhcsOhY3RlcmVzIHNlIGVsZXMgZXN0w6NvIG5vIGluw61jaW8gZGUgdW1hIHBhbGF2cmEuDQorDQorCWJlZ21pZHdvcmQgY2hhcmFjdGVycyBkb3RzDQorVHJhZHV6IG9zIGNhcsOhY3RlcmVzIHNlIGVsZXMgZXN0w6NvIG91IG5vIGluw61jaW8gb3Ugbm8gbWVpbyBkZSB1bWEgDQorcGFsYXZyYS4NCisNCisgICAgICBtaWR3b3JkIGNoYXJhY3RlcnMgZG90cw0KKyAgICAgIFRyYWR1eiBvcyBjYXLDoWN0ZXJlcyBzZSBlbGVzIGVzdMOjbyBubyBtZWlvIGRlIHVtYSBwYWxhdnJhLg0KKw0KKyAgICAgIG1pZGVuZHdvcmQgY2hhcmFjdGVycyBkb3RzDQorVHJhZHV6IG9zIGNhcsOhY3RlcmVzIHNlIGVsZXMgZXN0w6NvIG91IG5vIG1laW8gb3Ugbm8gZmluYWwgZGUgdW1hIA0KK3BhbGF2cmEuDQorDQorICAgICAgZW5kd29yZCBjaGFyYWN0ZXJzIGRvdHMNCisgICAgICBUcmFkdXogb3MgY2Fyw6FjdGVyZXMgc2UgZWxlcyBlc3TDo28gbm8gZmluYWwgZGUgdW1hIHBhbGF2cmEuDQorDQorICAgICAgcHJlcHVuYyBjaGFyYWN0ZXJzIGRvdHMNCitUcmFkdXogb3MgY2Fyw6FjdGVyZXMgc2UgZWxlcyBzw6NvIHBhcnRlIGRhIHBvbnR1YcOnw6NvIG5vIGluw61jaW8gZGUgDQordW1hIHBhbGF2cmEuDQorDQorICAgICAgcG9zdHB1bmMgY2hhcmFjdGVycyBkb3RzDQorVHJhZHV6IG9zIGNhcsOhY3RlcmVzIHNlIGVsZXMgc8OjbyBwYXJ0ZSBkYSBwb250dWHDp8OjbyBubyBmaW5hbCBkZSB1bWEgDQorcGFsYXZyYS4NCisNCisgICAgICBiZWdudW0gY2hhcmFjdGVycyBkb3RzDQorCVRyYWR1eiBvcyBjYXLDoWN0ZXJlcyBzZSBlbGVzIGVzdMOjbyBubyBpbsOtY2lvIGRlIHVtIG7Dum1lcm8uDQorDQorICAgICAgbWlkbnVtIGNoYXJhY3RlcnMgZG90cw0KKwlUcmFkdXogb3MgY2Fyw6FjdGVyZXMgc2UgZWxlcyBlc3TDo28gbm8gbWVpbyBkZSB1bSBuw7ptZXJvLg0KKw0KKyAgICAgIGVuZG51bSBjaGFyYWN0ZXJzIGRvdHMNCisJVHJhZHV6IG9zIGNhcsOhY3RlcmVzIHNlIGVsZXMgZXN0w6NvIG5vIGZpbmFsIGRlIHVtIG7Dum1lcm8uDQorIA0KKzYuMy4zLjQgQ2xhc3NlcyBkZSBDYXJhY3RlcmVzDQorDQorRXN0ZXMgb3Bjb2RlcyBkZWZpbmVtIGUgdXNhbSBjbGFzc2VzIGRlIGNhcsOhY3RlcmVzLiBVbWEgY2xhc3NlIGRlIA0KK2NhcmFjdGVyZXMgYXNzb2NpYSB1bSBjb25qdW50byBkZSBjYXLDoWN0ZXJlcyBjb20gdW0gbm9tZS4gTyBub21lLCBlbSANCitzZWd1aWRhLCByZWZlcmUtc2UgYSBxdWFscXVlciBjYXLDoWN0ZXIgZGVudHJvIGRhIGNsYXNzZS4gVW0gY2Fyw6FjdGVyIA0KK3BvZGUgcGVydGVuY2VyIGEgbWFpcyBkZSB1bWEgY2xhc3NlLg0KKw0KK0FzIGNsYXNzZXMgZGUgY2Fyw6FjdGVyZXMgYSBzZWd1aXIgc8OjbyBhdXRvbWF0aWNhbWVudGUgcHLDqS1kZWZpbmljYWRhcyANCitjb20gYmFzZSBuYSBsb2NhbGlkYWRlIHNlbGVjaW9uYWRhOg0KKw0KKyAgICAgIGRpZ2l0DQorICAgICAgQ2Fyw6FjdGVyZXMgbnVtw6lyaWNvcy4NCisNCisgICAgICBsZXR0ZXINCitBbWJhcyBvcyBjYXJhY3RlcmVzIG1hacO6c2N1bG9zIGUgbWluw7pzY3Vsb3MgZG8gYWxmYWJldG8uIEFsZ3VtYXMgDQorbG9jYWxpZGFkZXMgdMOqbSBsZXRyYXMgYWRpY2lvbmFpcyBxdWUgbsOjbyBzw6NvIG5lbSBtYWnDunNjdWxhcyBuZW0gDQorbWluw7pzY3VsYXMuDQorDQorICAgICAgbG93ZXJjYXNlDQorCUNhcsOhY3RlcmVzIGRvIGFsZmFiZXRvIGVtIG1pbsO6c2N1bG8uDQorDQorICAgICAgcHVuY3R1YXRpb24NCitDYXLDoWN0ZXJlcyBpbXByZXNzbyBxdWUgbsOjbyBzw6NvIG5lbSBlc3Bhw6dvIGVtIGJyYW5jbyBlIG5lbSANCithbGZhbnVtw6lyaWNvcy4NCisNCisgICAgICBzcGFjZQ0KK0NhcmFjdGVyZXMgZXNwYcOnbyBlbSBicmFuY28uIE5hIGxvY2FsaWRhZGUgcGFkcsOjbywgZXNzZXMgc8OjbzogDQorZXNwYcOnbywgdGFidWxhw6fDtWVzIGhvcml6b250YWwgZSB2ZXJ0aWNhbCwgZGUgcmV0b3JubyBkZSBjYXJybywgYSANCitub3ZhIGxpbmhhLCBmb3JtZmVlZChxdWVicmEgZGUgcMOhZ2luYSkuDQorDQorICAgICAgdXBwZXJjYXNlDQorICAgICAgQ2Fyw6FjdGVyZXMgZG8gYWxmYWJldG8gZW0gbWFpw7pzY3Vsby4NCisNCitPcyBvcGNvZGVzIHF1ZSBkZWZpbmVtIGUgdXNhbSBhcyBjbGFzc2VzIGRlIGNhcsOhY3RlcmVzIHPDo286DQorDQorICAgICAgY2xhc3MgbmFtZSBjaGFyYWN0ZXJzDQorDQorRGVmaW5pIHVtYSBub3ZhIGNsYXNzZSBkZSBjYXLDoWN0ZXIuIE9zIGNhcsOhY3RlcmVzIG9wZXJhbmRvIGRldmVtIA0KK3NlciBlc3BlY2lmaWNhZG9zIGNvbW8gdW1hIHN0cmluZy4gVW1hIGNsYXNzZSBkZSBjYXJhY3RlciBuw6NvIHBvZGUgDQorc2VyIHV0aWxpemFkYSBhdMOpIHF1ZSBlbGEgc2VqYSBkZWZpbmlkYS4NCisNCisgICAgICBhZnRlciBjbGFzcyBvcGNvZGUgLi4uDQorTyBvcGNvZGUgZXNwZWNpZmljYWRvIMOpIG1haXMgcmVzdHJpdG8gbmEgc2Vxw7zDqm5jaWEgZGUgY2FyYWN0ZXJlcyANCitjb3JyZXNwb25kZW50ZSBlIGRldmUgc2VyIGltZWRpYXRhbWVudGUgcHJlY2VkaWRvIHBvciB1bSBjYXLDoWN0ZXIgDQorcXVlIHBlcnRlbmNlIMOgIGNsYXNzZSBlc3BlY2lmaWNhZGEuIFNlIGVzdGUgb3Bjb2RlIMOpIHVzYWRvIG1haXMgZGUgDQordW1hIHZleiBuYSBtZXNtYSBsaW5oYSwgZW50w6NvIGEgdW5pw6NvIGRvcyBjYXJhY3RlcmVzIGVtIHRvZGFzIGFzIA0KK2NsYXNzZXMgw6kgdXNhZGEuDQorDQorICAgICAgYmVmb3JlIGNsYXNzIG9wY29kZSAuLi4NCitPIG9wY29kZSBlc3BlY2lmaWNhZG8gw6kgbWFpcyByZXN0cml0byBuYSBzZXHDvMOqbmNpYSBkZSBjYXJhY3RlcmVzIA0KK2NvcnJlc3BvbmRlbnRlIGUgZGV2ZSBzZXIgaW1lZGlhdGFtZW50ZSBzZWd1aWRvIHBvciB1bSBjYXLDoWN0ZXIgcXVlIA0KK3BlcnRlbmNlIMOgIGNsYXNzZSBlc3BlY2lmaWNhZGEuIFNlIGVzdGUgb3Bjb2RlIMOpIHVzYWRvIG1haXMgZGUgdW1hIA0KK3ZleiBuYSBtZXNtYSBsaW5oYSwgZW50w6NvIGEgdW5pw6NvIGRvcyBjYXJhY3RlcmVzIGVtIHRvZGFzIGFzIA0KK2NsYXNzZXMgw6kgdXNhZGEuDQorDQorICAgICAgIDYuNCBUYWJlbGFzIGRlIFRlY2xhcw0KKw0KK09zIGFycXVpdm9zIGNvbSBub21lcyBubyBmb3JtYXRvICouIGt0YiBzw6NvIHRhYmVsYXMgY2hhdmVzLCBlIGNvbSBub21lcyANCitubyBmb3JtYXRvICouIGt0aSBzw6NvIHN1YnRhYmVsYXMgY2hhdmVzLiBFbGVzIHPDo28gdXNhZG9zIHBvciBCUkxUVFkgcGFyYSANCit2aW5jdWxhciBhbyBkaXNwbGF5IGJyYWlsbGUgZSBhbyB0ZWNsYWRvIGNvbWJpbmHDp8O1ZXMgZGUgdGVjbGFzIHBhcmEgDQorY29tYW5kb3MgZG8gQlJMVFRZLg0KKw0KK09zIG5vbWVzIGRvcyBkaXNwbGF5IGJyYWlsbGUgbm9zIGFycXVpdm9zIGRlIHRhYmVsYSBjaGF2ZXMgY29tZcOnYW0gY29tIA0KK2JybC14eC0sIG9uZGUgeHggw6kgbyBjw7NkaWdvIGRlIGR1YXMgbGV0cmFzIGRlIGlkZW50aWZpY2HDp8OjbyBkbyANCitkcml2ZXIoZHJpdmVyIGlkZW50aWZpY2F0aW9uIGNvZGUpLiBPIHJlc3RvIGRvIG5vbWUgaWRlbnRpZmljYSBvIG1vZGVsbyANCisocykgcGFyYSBvcyBxdWFpcyBhIHRhYmVsYSBjaGF2ZSDDqSB1c2FkYS4NCisNCitPcyBub21lcyBkb3MgdGVjbGFkb3Mgbm9zIGFycXVpdm9zIGRlIHRhYmVsYSBjaGF2ZXMgY29tZcOnYW0gY29tIGtiZC0uIE8gDQorcmVzdG8gZG8gbm9tZSBkZXNjcmV2ZSBvIHRpcG8gZGUgdGVjbGFkbyBwYXJhIHF1YWwgYSB0YWJlbGEgY2hhdmVzIGZvaSANCitjb25jZWJpZG8uDQorDQorT3Mgc2VndWludGVzIHRlY2xhZG9zIGRlIHRhYmVsYSBjaGF2ZXMgc8OjbyBmb3JuZWNpZG9zOg0KKw0KKyAgICAgIGtiZC1kZXNrdG9wDQorICAgICAgbGlnYcOnw7VlcyBwYXJhIHRlY2xhZG8gY29tcGxldG8NCisNCisgICAgICBrYmQta2V5cGFkDQorICAgICAgbGlnYcOnw7VlcyBwYXJhIG5hdmVnYcOnw6NvIGJhc2VhZG8gZW0gdGVjbGFkbyBudW3DqXJpY28NCisNCisgICAgICBrYmQtbGFwdG9wDQorICAgICAgbGlnYcOnw7VlcyBwYXJhIHRlY2xhZG9zIHNlbSB1bSB0ZWNsYWRvIG7Dum1lcmljbw0KKw0KK0NvbnN1bHRlIGEgb3DDp8OjbyBkZSBsaW5oYSBkZSBjb21hbmRvIC1rIGUgYSBkaXJlY3RpdmEgZG8gYXJxdWl2byBkZSANCitjb25maWd1cmHDp8OjbyBrZXktdGFibGUgcGFyYSBvYnRlciBkZXRhbGhlcyBzb2JyZSBjb21vIHNlbGVjaW9uYXIgdW1hIA0KK3RhYmVsYSBjaGF2ZXMgZG8gdGVjbGFkby4NCisgDQorNi40LjEgVGFiZWxhIGRlIERpcmV0aXZhcyBkZSBUZWNsYXMNCisNCitVbWEgdGFiZWxhIGNoYXZlcyBjb25zaXN0ZSBlbSB1bWEgc2Vxw7zDqm5jaWEgZGUgZGlyZXRpdmFzLCB1bWEgcG9yIGxpbmhhLCANCitxdWUgZGVmaW5lbSBjb21vIGFzIHRlY2xhcyBlIGNvbWJpbmHDp8O1ZXMgZGUgdGVjbGFzIGRldmVtIHNlciANCitpbnRlcnByZXRhZGFzLiBVVEYtOCBjYXJhY3RlciBlbmNvZGluZyBkZXZlIHNlciB1c2Fkby4gTyBlc3Bhw6dvIGVtIA0KK2JyYW5jbyAoZXNwYcOnb3MsIHRhYnMpIG5vIGluw61jaW8gZGUgdW1hIGxpbmhhLCBhc3NpbSBjb21vIGFudGVzIGUvb3UgDQorZGVwb2lzIGRlIHF1YWxxdWVyIG9wZXJhbmRvLCDDqSBpZ25vcmFkby4gTGluaGFzIHF1ZSBjb250w6ptIGFwZW5hcyBlc3Bhw6dvIA0KK2VtIGJyYW5jbyBzw6NvIGlnbm9yYWRhcy4gU2UgbyBjYXLDoXRlciBuw6NvLWVzcGHDp28gZW0gYnJhbmNvIGFudGVzIGRlIHVtYSANCitsaW5oYSDDqSB1bSBzaW5hbCBkZSBuw7ptZXJvICgjKSBlbnTDo28gZXNzYSBsaW5oYSDDqSB1bSBjb21lbnTDoXJpbyBlIMOpIA0KK2lnbm9yYWRhLg0KKw0KK0EgcHJpb3JpZGFkZSBwYXJhIGEgcmVzb2x1w6fDo28gZGUgY2FkYSBldmVudG8gZGEgdGVjbGEgDQorcHJlc3Npb25hZGEvbGliZXJhZGEgw6kgYSBzZWd1aW50ZToNCisNCisxLiBVbWEgaG90a2V5IHByZXNzaW9uYWRhIG91IGxpYmVyYcOnw6NvIGRlZmluaWRhIGRlbnRybyBkbyBjb250ZXh0byANCithdHVhbC4gVmVqYSBhIGRpcmV0aXZhIGhvdGtleSBwYXJhIG1haXMgZGV0YWxoZXMuDQorDQorMi4gQSBjb21iaW5hw6fDo28gZGUgdGVjbGFzIGRlZmluaWRhIGRlbnRybyBkbyBjb250ZXh0byBhdHVhbC4gDQorQ29uc3VsdGUgYSBkaXJldGl2YSBiaW5kIHBhcmEgZGV0YWxoZXMuDQorDQorMy4gVW0gY29tYW5kbyBkbyB0ZWNsYWRvIGJyYWlsbGUgZGVmaW5pZG8gZGVudHJvIGRvIGNvbnRleHRvIGF0dWFsLiANCitWZWphIGFzIGRpcmVjdGl2YXMgbWFwIGUgc3VwZXJpbXBvc2UgcGFyYSBtYWlzIGRldGFsaGVzLg0KKw0KKzQuIEEgY29tYmluYcOnw6NvIGRlIHRlY2xhcyBkZWZpbmlkYSBkZW50cm8gZG8gY29udGV4dG8gcGFkcsOjby4gDQorQ29uc3VsdGUgYSBkaXJldGl2YSBiaW5kIHBhcmEgZGV0YWxoZXMuDQorDQorQXMgZGlyZXRyaXplcyBhIHNlZ3VpciBzw6NvIGZvcm5lY2lkYXM6DQorDQorNi40LjEuMSBBdHJpYnVpciBEaXJldGl2YQ0KKw0KK0NyaWFyIG91IGF0dWFsaXphciB1bWEgdmFyacOhdmVsIGFzc29jaWFkYSBjb20gbyBhdHVhbCBuw612ZWwgZGUgaW5jbHVpci4gDQorQSB2YXJpw6F2ZWwgw6kgdmlzw612ZWwgcGFyYSBvIGF0dWFsIGUgaW5jbHVlbSBvcyBuw612ZWlzIG1haXMgYmFpeG9zLCBtYXMgDQorbsOjbyBpbmNsdWVtIG9zIG7DrXZlaXMgbWFpcyBlbGV2YWRvcy4NCisNCithc3NpZ24gdmFyaWFibGUgW3ZhbHVlXQ0KKw0KKyAgICAgIHZhcmlhYmxlDQorTyBub21lIGRhIHZhcmnDoXZlbC4gU2UgYSB2YXJpw6F2ZWwgbsOjbyBleGlzdGlyIG5vIGF0dWFsIG7DrXZlbCBkZSANCitpbmNsdWlyIGVudMOjbyBlbGEgw6kgY3JpYWRhLg0KKw0KKyAgICAgIHZhbHVlDQorTyB2YWxvciBxdWUgc2Vyw6EgYXRyaWJ1w61kbyDDoCB2YXJpw6F2ZWwuIFNlIG7Do28gZm9yIGZvcm5lY2lkbywgZW50w6NvIA0KK3VtIHZhbG9yIGRlIGNvbXByaW1lbnRvIHplcm8gKG51bG8pIMOpIGF0cmlidcOtZG8uDQorDQorQSBzZXHDvMOqbmNpYSBkZSBlc2NhcGUgXHt2YXJpYWJsZX0gw6kgc3Vic3RpdHXDrWRhIGNvbSBvIHZhbG9yIGRhIHZhcmnDoXZlbCANCitjaGFtYWRhIGRlbnRybyBkYXMgY2hhdmVzLiBBIHZhcmnDoXZlbCBkZXZlIHRlciBzaWRvIGRlZmluaWRhIG5vIGF0dWFsIG91IA0KK3VtIG7DrXZlbCBkZSBpbmNsdWlyIHN1cGVyaW9yLg0KKw0KK0V4ZW1wbG9zOg0KKw0KKyAgICAgIMK3IGFzc2lnbiBudWxsVmFsdWUNCisNCisgICAgICDCtyBhc3NpZ24gUmV0dXJuS2V5IEtleTENCisNCisgICAgICDCtyBiaW5kIFx7UmV0dXJuS2V5fSBSRVRVUk4NCisgDQorNi40LjEuMiBEaXJldGl2YSBkZSB2w61uY3Vsbw0KKw0KK0RlZmluZSBxdWFpcyBjb21hbmRvcyBCUkxUVFkgw6kgZXhlY3V0YWRvIHF1YW5kbyB1bWEgY29tYmluYcOnw6NvIA0KK2VzcGVjw61maWNhIGRlIHVtYSBvdSBtYWlzIHRlY2xhcyDDqSBwcmVzc2lvbmFkYS4gQSBsaWdhw6fDo28gw6kgZGVmaW5pZGEgDQorZGVudHJvIGRvIGNvbnRleHRvIGF0dWFsLg0KKw0KK2JpbmQga2V5cyBjb21tYW5kDQorDQorDQora2V5cw0KK0EgY29tYmluYcOnw6NvIGRlIHRlY2xhcyBxdWUgc2Vyw6EgdmluY3VsYWRhLiDDiSB1bWEgc2Vxw7zDqm5jaWEgZGUgdW0gb3UgbWFpcyANCitub21lcyBkZSBjaGF2ZXMgc2VwYXJhZGFzIHBlbG8gc2luYWwgZGUgbWFpcyAoKykuIE8gbm9tZSBkYSBjaGF2ZSANCitmaW5hbChvdSDDum5pY2EpIHBvZGUgc2VyIG9wY2lvbmFsbWVudGUgcHJlZml4YWRvIGNvbSB1bSBwb250byBkZSANCitleGNsYW1hw6fDo28gKCEpLiBBcyBjaGF2ZXMgcG9kZW0gc2VyIHByZXNzaW9uYWRhcyBlbSBxdWFscXVlciBvcmRlbSwgY29tIA0KK2EgcmVzc2FsdmEgZGUgcXVlIHNlIG8gbm9tZSBkYSBjaGF2ZSBmaW5hbCDDqSBwcmVmaXhhZG8gY29tIHVtIHBvbnRvIGRlIA0KK2V4Y2xhbWHDp8OjbyBlbSBzZWd1aWRhLCBlbGUgZGV2ZSBzZXIgcHJlc3Npb25hZG8gcG9yIMO6bHRpbW8uIE8gcHJlZml4byBkbyANCitwb250byBkZSBleGNsYW1hw6fDo28gc2lnbmlmaWNhIHF1ZSBvIGNvbWFuZG8gw6kgZXhlY3V0YWRvIGFzc2ltIHF1ZSBhIA0KK3RlY2xhIMOpIHByZXNzaW9uYWRhLiBTZSBuw6NvIGZvciB1dGlsaXphZG8sIG8gY29tYW5kbyDDqSBleGVjdXRhZG8gYXNzaW0gDQorcXVlIHF1YWxxdWVyIHVtYSBkYXMgdGVjbGFzIMOpIGxpYmVyYWRhLg0KKw0KK2NvbW1hbmQNCitPIG5vbWUgZGUgdW0gY29tYW5kbyBCUkxUVFkuIFVtIG91IG1haXMgbW9kaWZpY2Fkb3JlcyBwb2RlbSBzZXIgDQorb3BjaW9uYWxtZW50ZSBhbmV4YWRvIGFvIG5vbWUgZG8gY29tYW5kbywgdXNhbmRvIHVtIHNpbmFsIHBvc2l0aXZvICgrKSANCitjb21vIHNlcGFyYWRvci4NCisNCitQYXJhIGNvbWFuZG9zIHF1ZSBhdGl2YS9kZXNhdGl2YSBvIHJlY3Vyc286DQorDQorPwlTZSBvIG1vZGlmaWNhZG9yICtvbiBmb3IgZXNwZWNpZmljYWRvLCBvIHJlY3Vyc28gZXN0w6EgaGFiaWxpdGFkby4NCis/CVNlIG8gbW9kaWZpY2Fkb3IgK29mZiDDqSBlc3BlY2lmaWNhZGEsIG8gcmVjdXJzbyBlc3TDoSBkZXNhdGl2YWRvLg0KKz8JU2UgbmVtICtvbiBvdSArb2ZmIMOpIGVzcGVjaWZpY2FkbywgbyBlc3RhZG8gZG8gcmVjdXJzbyDDqSANCithdGl2YWRvL2Rlc2F0aXZhZG8uDQorDQorUGFyYSBjb21hbmRvcyBxdWUgbW92ZXIgYSBqYW5lbGEgYnJhaWxsZToNCisNCis/CVNlIG8gbW9kaWZpY2Fkb3IgK3JvdXRlIMOpIGVzcGVjaWZpY2FkbywgZW50w6NvLCBzZSBuZWNlc3PDoXJpbywgbyANCitjdXJzb3Igw6kgYXV0b21hdGljYW1lbnRlIGVuY2FtaW5oYWRvIHBhcmEgcXVlIGZpcXVlIHNlbXByZSB2aXPDrXZlbCANCitubyBkaXNwbGF5IGJyYWlsbGUuDQorDQorUGFyYSBjb21hbmRvcyBxdWUgbW92ZSBhIGphbmVsYSBicmFpbGxlIHBhcmEgdW1hIGxpbmhhIGVzcGVjw61maWNhIG5hIA0KK3RlbGE6DQorDQorPwlTZSBvIG1vZGlmaWNhZG9yICt0b2xlZnQgZm9yIGVzcGVjaWZpY2FkbywgYSBqYW5lbGEgZGUgYnJhaWxlIA0KK3RhbWLDqW0gw6kgbW92aWRhIHBhcmEgbyBpbsOtY2lvIGRlc3NhIGxpbmhhLg0KKz8JU2UgbyBtb2RpZmljYWRvciArc2NhbGVkIMOpIGVzcGVjaWZpY2FkbywgbyBjb25qdW50byBkZSBjaGF2ZXMgDQordmluY3VsYWRhcyBhbyBjb21hbmRvIMOpIGludGVycHJldGFkbyBjb21vIHNlIGZvc3NlIHVtYSBiYXJyYSBkZSANCityb2xhZ2VtLiBTZSBuw6NvIGZvciwgZW50w6NvIG7Do28gaMOhIHVtYSBjb3JyZXNwb25kw6puY2lhIGRlIHVtLXBhcmEtdW0gDQorZW50cmUgYXMgdGVjbGFzIGUgbGluaGFzLg0KKw0KK1BhcmEgY29tYW5kb3MgcXVlIGV4aWdlbSB1bSBkZXNsb2NhbWVudG86DQorDQorTyBtb2RpZmljYWRvciArb2Zmc2V0LCBvbmRlIG9mZnNldCDDqSB1bSBuw7ptZXJvIGludGVpcm8gbsOjbyBuZWdhdGl2bywgDQorcG9kZSBzZXIgZXNwZWNpZmljYWRvLiBTZSBuw6NvIGZvciBmb3JuZWNpZG8sIGVudMOjbyArMCDDqSBhc3N1bWlkby4NCisNCitFeGVtcGxvczoNCisNCis/CWJpbmQgS2V5MSBDU1JUUksNCisNCis/CWJpbmQgS2V5MStLZXkyIENTUlRSSytvZmYNCisNCis/CWJpbmQgS2V5MStLZXkzIENTUlRSSytvbg0KKw0KKz8JYmluZCBLZXk0IFRPUA0KKw0KKz8JYmluZCBLZXk1IFRPUCtyb3V0ZQ0KKw0KKz8JYmluZCBWZXJ0aWNhbFNlbnNvciBHT1RPTElORSt0b2xlZnQrc2NhbGVkDQorDQorPwliaW5kIEtleTYgQ09OVEVYVCsxDQorIA0KKzYuNC4xLjMgRGlyZXRpdmEgZGUgQ29udGV4dG8NCisNCitEZWZpbmlyIGZvcm1hcyBhbHRlcm5hdGl2YXMgZGUgaW50ZXJwcmV0YXIgY2VydG9zIGFjb250ZWNpbWVudG9zLWNoYXZlIA0KK2Uvb3UgY29tYmluYcOnw7Vlcy4gVW0gY29udGV4dG8gY29udMOpbSBhcyBkZWZpbmnDp8O1ZXMgY3JpYWRhcyBwZWxhcyANCitkaXJlY3RpdmFzIGJpbmQsIGhvdGtleSwgbWFwLCBlIHN1cGVyaW1wb3NlLg0KKyANCitjb250ZXh0IGlkZW50aWZpZXIgW3RpdGxlXQ0KKyAgICAgIGlkZW50aWZpZXINCisNCitRdWFsIGEgZGVmaW5pw6fDo28gcG9zdGVyaW9yIGRvIGNvbnRleHRvIGRldmUgc2VyIGNyaWFkYSBkZW50cm8uIFBvZGVtIA0KK3NlcjoNCisNCisgICAgICDCtyBVbSBkZXNzZXMgbm9tZXMgZXNwZWNpYWlzOg0KKw0KK2RlZmF1bHQNCitPIGNvbnRleHRvIHBhZHLDo28uIFNlIGEgY29tYmluYcOnw6NvIGRlIHRlY2xhcyBuw6NvIGZvaSBkZWZpbmlkYSBkZW50cm8gZG8gDQorY29udGV4dG8gYXR1YWwsIGVudMOjbyBhIHN1YSBkZWZpbmnDp8OjbyBubyBjb250ZXh0byBwYWRyw6NvIMOpIHVzYWRvLiBJc3NvIA0KK3PDsyBzZSBhcGxpY2EgYXMgZGVmaW5pw6fDtWVzIGNyaWFkYXMgcGVsYSBkaXJldGl2YSBkZSB2aW5jdWxvLg0KKw0KK21lbnUNCitFc3NlIGNvbnRleHRvIMOpIHV0aWxpemFkbyBxdWFuZG8gZGVudHJvIGRvIG1lbnUgZGUgcHJlZmVyw6puY2lhcyBkbyANCitCUkxUVFkuDQorDQorwrcgVW0gbsO6bWVybyBpbnRlaXJvIG5vIGludGVydmFsbyBkZSAwIGEgMjUyLiBDb250ZXh0byAwIMOpIHVtYSANCittYW5laXJhIGFsdGVybmF0aXZhIHBhcmEgc2UgcmVmZXJpciBhbyBjb250ZXh0byBwYWRyw6NvLiBPcyBuw7ptZXJvcyANCittYWlzIGFsdG9zIGRlIGNvbnRleHRvIGRldmVtIHNlciBldml0YWRvcyBwb3JxdWUgbyBtYWlvciBuw7ptZXJvIA0KK3Blcm1pdGlkbyBlc3TDoSBzdWplaXRvIGEgYWx0ZXJhw6fDo28gc2VtIGF2aXNvIHByw6l2aW8sIHNlLCBwb3IgDQorZXhlbXBsbywgb3MgY29udGV4dG9zIG1haXMgbm9tZWFkb3Mgc8OjbyBhZGljaW9uYWRvcy4NCisNCit0aXRsZQ0KK1VtYSBkZXNjcmnDp8OjbyBwZXJzb24tcmVhZGFibGUgZG8gY29udGV4dG8uIEVsZSBwb2RlIGNvbnRlciBlc3Bhw6dvcywgZSBhcyANCitjb252ZW7Dp8O1ZXMgZGUgY2FwaXRhbGl6YcOnw6NvIHBhZHLDo28gZGV2ZSBzZXIgdXNhZG8uIEVzdGUgb3BlcmFuZG8gw6kgDQorb3BjaW9uYWwuIFNlIGZvciBmb3JuZWNpZG8gYW8gc2VsZWNpb25hciB1bSBjb250ZXh0byBxdWUgasOhIHRlbSB1bSANCit0w610dWxvLCBlbnTDo28gb3MgZG9pcyBkZXZlbSBjb2luY2lkaXIuQ29udGV4dG9zIG5vbWVhZG8gasOhIHRlbSB0w610dWxvcyANCitpbnRlcm5hbWVudGUgYXRyaWJ1w61kb3MuIENvbnRleHRvcyBudW3DqXJpY29zIHPDo28gaW5pY2lhbG1lbnRlIGNyaWFkb3MgDQorc2VtIHTDrXR1bG9zLg0KKw0KK1VtIGNvbnRleHRvIMOpIGNyaWFkbyBhIHByaW1laXJhIHZleiBxdWUgZWxlIMOpIHNlbGVjaW9uYWRvLiBQb2RlIHNlciByZS0NCitzZWxlY2lvbmFkbyBxdWFscXVlciBuw7ptZXJvIGRlIHZlemVzIGRlcG9pcyBkaXNzby4NCisNCitUb2RhcyBhcyBkZWZpbmnDp8O1ZXMgc3Vic2Vxw7xlbnRlcyBhdMOpIGEgcHLDs3hpbWEgZGlyZXRpdmEgY29udGV4dCBvdSBubyANCitmaW5hbCBkbyBjb3JyZW50ZSBuw612ZWwgZGUgaW5jbHVpciBzw6NvIGNyaWFkYXMgZGVudHJvIGRvIGNvbnRleHRvIA0KK3NlbGVjaW9uYWRvLiBPIGNvbnRleHRvIGluaWNpYWwgZGUgbsOtdmVsIHN1cGVyaW9yIGRhIHRhYmVsYSBjaGF2ZSDDqSANCitwYWRyw6NvLiBPIGNvbnRleHRvIGluaWNpYWwgaW5jbHXDrWRvIGVtIHVtYSBzdWJ0YWJlbGEgY2hhdmUgw6kgbyBjb250ZXh0byANCitxdWUgZm9pIHNlbGVjaW9uYWRvIHF1YW5kbyBlbGUgZm9pIGluY2x1w61kby4gQ29udGV4dG9zIGRlIG11ZGFuw6dhcyANCitpbmNsdcOtZG9zIGRlbnRybyBkZSBzdWJ0YWJlbGFzIGNoYXZlcyBuw6NvIGFmZXRhbSBvIGNvbnRleHRvIGRhIG1lc2EsIA0KK2luY2x1aW5kbyB0YWJlbGEgY2hhdmUgb3Ugc3VidGFiZWxhLg0KKw0KK1NlIHVtIGNvbnRleHRvIHRlbSB1bSB0w610dWxvICh0b2RvcyBvcyBjb250ZXh0b3Mgbm9tZWFkb3MgZSBvcyBjb250ZXh0b3MgDQorbnVtw6lyaWNvIHBhcmEgbyBxdWFsIG8gb3BlcmFuZG8gdGl0bGUgZm9pIGZvcm5lY2lkbyksIGVudMOjbyDDqSANCitwZXJzaXN0ZW50ZSouIFF1YW5kbyB1bSBldmVudG8tY2hhdmUgZmF6IGNvbSB1bSBjb250ZXh0byBkZSBwZXJzaXN0w6puY2lhIA0KK3NlciBhdGl2YWRvLCBlc3NlIGNvbnRleHRvIGF0dWFsIHBlcm1hbmVjZSBhdMOpIHF1ZSB1bSBldmVudG8gcG9zdGVyaW9yIA0KK2NoYXZlIGZheiB1bSBjb250ZXh0byBkaWZlcmVudGUgcGVyc2lzdGVudGUgc2VyIGF0aXZhZG8uDQorDQorU2UgdW0gY29udGV4dG8gbsOjbyB0ZW0gdW0gdMOtdHVsbyAob3MgY29udGV4dG9zIG51bcOpcmljb3MgcGFyYSBvcyBxdWFpcyBvIA0KK29wZXJhbmRvIHRpdGxlIG7Do28gZm9pIGZvcm5lY2lkbyksIGVudMOjbyBlbGUgw6kgdGVtcG9yw6FyaW8uIFF1YW5kbyB1bSANCitldmVudG8gY2hhdmUgcHJvdm9jYSB1bSBjb250ZXh0byB0ZW1wb3LDoXJpbyBhIHNlciBhdGl2YWRvLCBlc3NlIGNvbnRleHRvIA0KK3PDsyDDqSB1c2FkbyBwYXJhIGludGVycHJldGFyIG8gZXZlbnRvIGNoYXZlIG1haXMgcHLDs3hpbW8uDQorDQorRXhlbXBsb3M6DQorDQorICAgICAgwrcgY29udGV4dCBtZW51DQorDQorICAgICAgwrcgY29udGV4dCAxIEJyYWlsbGUgSW5wdXQNCisNCisgICAgICDCtyBjb250ZXh0IDINCisgDQorNi40LjEuNCBEaXJlY3RpdmEgZGUgT2N1bHRhcg0KKw0KK0VzcGVjaWZpY2Egc2UgZGVzZWphIG91IG7Do28gY2VydGFzIGRlZmluacOnw7VlcyAodmVyIGFzIGRpcmV0aXZhcywgaG90a2V5LCANCittYXAsIGUgc3VwZXJpbXBvc2UpIGUgbm90YXMgKHZlciBhIGRpcmV0aXZhIG5vdGUpIHNlcsOjbyBpbmNsdcOtZGFzIG5vIA0KK3RleHRvIGRhIHRhYmVsYSBkZSBjaGF2ZSBkZSBhanVkYS4NCisNCisgICAgICBoaWRlIHN0YXRlDQorDQorICAgICAgc3RhdGUNCisgICAgICBVbWEgZGVzc2FzIHBhbGF2cmFzLWNoYXZlczoNCisgICAgICAgDQorb24NCisgICAgICBFc3TDo28gZXhjbHXDrWRvcy4NCisNCisgICAgICBvZmYNCisgICAgICBFbGVzIGVzdMOjbyBpbmNsdcOtZG9zLg0KKw0KK08gZXN0YWRvIGVzcGVjaWZpY2FkbyBzZSBhcGxpY2EgYXMgdG9kYXMgYXMgZGVmaW5pw6fDtWVzIGUgbm90YXMgDQorc3Vic2Vxw7xlbnRlcyBhdMOpIGEgcHLDs3hpbWEgZGlyZXRpdmEgaGlkZSBvdSBvIGZpbSBkbyBhdHVhbCBuw612ZWwgZGUgDQoraW5jbHVpci4gTyBlc3RhZG8gaW5pY2lhbCBkYSB0YWJlbGEgY2hhdmUgZGUgbsOtdmVsIHN1cGVyaW9yIMOpIG9mZi4gTyANCitlc3RhZG8gaW5pY2lhbCBpbmNsdcOtZG8gZW0gdW1hIHN1YnRhYmVsYSBjaGF2ZSDDqSBvIGVzdGFkbyBxdWUgZm9pIA0KK3NlbGVjaW9uYWRvIHF1YW5kbyBlbGUgZm9pIGluY2x1w61kby4gTXVkYW7Dp2FzIGRlIGVzdGFkbyBpbmNsdcOtZG9zIGRlbnRybyANCitkZSB1bWEgc3VidGFiZWxhcyBjaGF2ZSBuw6NvIGFmZXRhbSBvIGVzdGFkbyBpbmNsdWluZG8gbmEgdGFiZWxhIGNoYXZlIG91IA0KK3N1YnRhYmVsYS4NCisNCitFeGVtcGxvOg0KKw0KKyAgICAgIMK3ICBoaWRlIG9uDQorIA0KKzYuNC4xLjUgRGlyZXRpdmEgZGUgSG90a2V5DQorDQorVmluY3VsYSBvcyBldmVudG9zIHByZXNzIGUgcmVsZWFzZSBkZSB1bWEgdGVjbGEgZXNwZWPDrWZpY2EgcGFyYSBkb2lzIA0KK2NvbWFuZG9zIHNlcGFyYWRvcyBCUkxUVFkuIE9zIHZpbmN1bG9zIHPDo28gZGVmaW5pZGFzIGRlbnRybyBkbyBjb250ZXh0byANCithdHVhbC4NCisgDQoraG90a2V5IGtleSBwcmVzcyByZWxlYXNlDQorDQorICAgICAga2V5DQorICAgICAgTyBub21lIGRhIHRlY2xhIHF1ZSBzZXLDoSBsaW1pdGFkYS4NCisNCisgICAgICBwcmVzcw0KK08gbm9tZSBkbyBjb21hbmRvIEJSTFRUWSBxdWUgZGV2ZSBzZXIgZXhlY3V0YWRvIHNlbXByZSBxdWUgYSB0ZWNsYSANCivDqSBwcmVzc2lvbmFkYS4NCisNCisgICAgICByZWxlYXNlDQorTyBub21lIGRvIGNvbWFuZG8gQlJMVFRZIHF1ZSBkZXZlIHNlciBleGVjdXRhZG8gc2VtcHJlIHF1ZSBhIHRlY2xhIA0KK8OpIGxpYmVyYWRhLg0KKw0KK01vZGlmaWNhZG9yZXMgcG9kZW0gc2VyIGFjcmVzY2VudGFkb3MgYW9zIG5vbWVzIGRlIGNvbWFuZG8uIFZlamEgbyANCitvcGVyYW5kbyBjb21tYW5kIGRhIGRpcmV0aXZhIGJpbmQgcGFyYSBtYWlzIGRldGFsaGVzLg0KKw0KK0VzcGVjaWZpcXVlIE5PT1Agc2UgbmVuaHVtIGNvbWFuZG8gc2Vyw6EgZXhlY3V0YWRvLiBFc3BlY2lmaWNhbmRvIE5PT1AgDQorcGFyYSBhbWJvcyBvcyBjb21hbmRvcyBlZmV0aXZhbWVudGUgZGVzYXRpdmEgYSBjaGF2ZS4NCisgDQorRXhlbXBsb3M6DQorDQorICAgICAgwrcgaG90a2V5IEtleTEgQ1NSVklTK29mZiBDU1JWSVMrb24NCisNCisgICAgICDCtyBob3RrZXkgS2V5MiBOT09QIE5PT1ANCisgDQorNi40LjEuNiBEaXJldGl2YSBJZktleQ0KKw0KK0NvbmRpY2lvbmFsbWVudGUgcHJvY2Vzc28gdW1hIGRpcmV0aXZhIGRhIHRhYmVsYSBjaGF2ZSBzb21lbnRlIHNlIG8gDQorYXBhcmVsaG8gdGVtIHVtYSBjaGF2ZSBwYXJ0aWN1bGFyLg0KKyANCitpZmtleSBrZXkgZGlyZWN0aXZlDQorICAgICAgDQora2V5DQorICAgICAgTyBub21lIGRhIGNoYXZlLCBjdWphIGRpc3BvbmliaWxpZGFkZSBlc3TDoSBhIHNlciB0ZXN0YWRvLg0KKyAgICAgIGRpcmVjdGl2ZQ0KKw0KK0EgZGlyZXRpdmEgZGEgdGFiZWxhIGNoYXZlIHF1ZSBkZXZlIHNlciBjb25kaWNpb25hbG1lbnRlIHByb2Nlc3NhZG8uDQorIA0KK0V4ZW1wbG9zOg0KKw0KKyAgICAgIMK3IGlma2V5IEtleTEgaWZrZXkgS2V5MiBiaW5kIEtleTErS2V5MiBIT01FDQorIA0KKzYuNC4xLjcgRGlyZXRpdmEgSW5jbHVkZQ0KKw0KK1Byb2Nlc3NhIGFzIGRpcmV0aXZhcyBkZW50cm8gZGUgdW1hIHN1YnRhYmVsYSBjaGF2ZS4gw4kgcmVjdXJzaXZhLCBvIHF1ZSANCitzaWduaWZpY2EgcXVlIHF1YWxxdWVyIHN1YnRhYmVsYSBjaGF2ZSBwb2RlIHNlciBpbmNsdWlyIGFpbmRhIGVtIG91dHJhIA0KK3N1YnRhYmVsYSBjaGF2ZS4gQ3VpZGFkb3MgZGV2ZW0gc2VyIHRvbWFkb3MgcGFyYSBnYXJhbnRpciBxdWUgImluY2x1ZW0gDQorbG9vcCIgbsOjbyBzZWphIGNyaWFkby4NCisNCisgICAgICBpbmNsdWRlIGZpbGUNCisNCisgICAgICBmaWxlDQorQSBzdWJ0YWJlbGEgY2hhdmUgcXVlIHNlcsOhIGluY2x1w61kYS4gUG9kZSBzZXIgdW0gY2FtaW5obyByZWxhdGl2byANCitvdSBhYnNvbHV0by4gU2UgcmVsYXRpdm8gZXN0w6EgYW5jb3JhZG8gbm8gZGlyZXTDs3JpbyBxdWUgY29udMOpbSBhIA0KK2luY2x1aW5kbyBhIHRhYmVsYSBjaGF2ZSBvdSBzdWJ0YWJlbGEuDQorDQorRXhlbXBsb3M6DQorDQorPwlpbmNsdWRlIGNvbW1vbi5rdGkNCisNCis/CWluY2x1ZGUgL3BhdGgvdG8vbXkva2V5cy5rdGkNCisgDQorNi40LjEuOCBEaXJldGl2YSBkZSBNYXBhDQorDQorTWFwZWlhIHVtYSB0ZWNsYSBwYXJhIHVtYSBmdW7Dp8OjbyBkbyB0ZWNsYWRvIGVtIGJyYWlsbGUuIE8gbWFwZWFtZW50byDDqSANCitkZWZpbmlkbyBkZW50cm8gZG8gY29udGV4dG8gYXR1YWwuDQorIA0KK21hcCBrZXkgZnVuY3Rpb24NCisgICAgICANCisgICAgICBrZXkNCitPIG5vbWUgZGEgdGVjbGEgcXVlIHNlcsOhIG1hcGVhZGEuIE1haXMgZGUgdW1hIHRlY2xhIHBvZGUgc2VyIA0KK21hcGVhZGEgcGFyYSBhIG1lc21hIGZ1bsOnw6NvIHRlY2xhZG8gZW0gYnJhaWxsZS4NCisNCisgICAgICBmdW5jdGlvbg0KK08gbm9tZSBkYSBmdW7Dp8OjbyBkbyB0ZWNsYWRvIGVtIGJyYWlsbGUuIFBvZGUgc2VyIHVtYSBkYXMgc2VndWludGVzIA0KK3BhbGF2cmFzOg0KKw0KKyAgICAgIERPVDENCisgICAgICBPIHBhZHLDo28gYnJhaWxsZSBkbyBwb250byBzdXBlcmlvciBlc3F1ZXJkby4NCisNCisgICAgICBET1QyDQorICAgICAgTyBwYWRyw6NvIGJyYWlsbGUgZG8gcG9udG8gZG8gbWVpbyBlc3F1ZXJkby4NCisNCisgICAgICBET1QzDQorICAgICAgTyBwYWRyw6NvIGJyYWlsbGUgZG8gcG9udG8gaW5mZXJpb3IgZXNxdWVyZG8uDQorDQorICAgICAgRE9UNA0KKwlPIHBhZHLDo28gYnJhaWxsZSBkbyBwb250byBzdXBlcmlvciBkaXJlaXRvLg0KKw0KKyAgICAgIERPVDUNCisJTyBwYWRyw6NvIGJyYWlsbGUgZG8gcG9udG8gZG8gbWVpbyBkaXJlaXRvLg0KKw0KKyAgICAgIERPVDYNCisJTyBwYWRyw6NvIGJyYWlsbGUgZG8gcG9udG8gaW5mZXJpb3IgZGlyZWl0by4NCisNCisgICAgICBET1Q3DQorCU8gcG9udG8gYnJhaWxsZSBkbyBjb21wdXRhZG9yIGluZmVyaW9yIGVzcXVlcmRvLg0KKw0KKyAgICAgIERPVDgNCisJTyBwb250byBicmFpbGxlIGRvIGNvbXB1dGFkb3IgaW5mZXJpb3IgZGlyZWl0by4NCisNCisgICAgICBTUEFDRQ0KKwlBIGJhcnJhIGRlIGVzcGHDp28uDQorDQorICAgICAgU0hJRlQNCisgICAgICBBIHRlY2xhIHNoaWZ0Lg0KKw0KKyAgICAgIFVQUEVSQ0FTRQ0KK1NlIHVtYSBsZXRyYSBtaW7DunNjdWxhIGVzdMOhIHNlbmRvIGluc2VyaWRvIGVudMOjbyB0cmFkdXppIHBhcmEgc2V1IA0KK2VxdWl2YWxlbnRlIGVtIG1hacO6c2N1bGFzLg0KKw0KKyAgICAgIENPTlRST0xFDQorCUEgY2hhdmUgZGUgY29udHJvbGUuDQorDQorICAgICAgTUVUQQ0KKwlBIHRlY2xhIEFsdCBlc3F1ZXJkYS4NCisNCitTZSBhIGNvbWJpbmHDp8OjbyBkZSB0ZWNsYXMgY29uc2lzdGUgYXBlbmFzIGRlIGNoYXZlcyBxdWUgZm9yYW0gbWFwZWFkYXMgDQorcGFyYSBmdW7Dp8O1ZXMgZG8gdGVjbGFkbyBlbSBicmFpbGUsIGUgc2UgZXNzYXMgZnVuw6fDtWVzIHF1YW5kbyBjb21iaW5hZGFzIA0KK2Zvcm1hbSB1bSBjb21hbmRvIGRlIHRlY2xhZG8gYnJhaWxsZSB2w6FsaWRvLCBlbnTDo28gbyBjb21hbmRvIMOpIGV4ZWN1dGFkbyANCitsb2dvIHF1ZSBxdWFscXVlciB1bWEgZGFzIHRlY2xhcyDDqSBsaWJlcmFkby4gVW0gY29tYW5kbyBkZSB0ZWNsYWRvIA0KK2JyYWlsbGUgdsOhbGlkbyBkZXZlIGluY2x1aXIgb3UgcXVhbHF1ZXIgY29tYmluYcOnw6NvIGRvcyBwb250b3MgY2hhdmVzIG91IA0KK2EgYmFycmEgZGUgZXNwYcOnbyAobWFzIG7Do28gYW1ib3MpLiBTZSBwZWxvIG1lbm9zIHVtIHBvbnRvIGNoYXZlIMOpIA0KK2luY2x1w61kbywgZW50w6NvIGFzIGZ1bsOnw7VlcyBkbyB0ZWNsYWRvIGVtIGJyYWlsbGUgZXNwZWNpZmljYWRvcyBwZWxhcyANCitkaXJldGl2YXMgc3VwZXJpbXBvc2UgZGVudHJvIGRvIG1lc21vIGNvbnRleHRvIHRhbWLDqW0gZXN0w6NvIA0KK2ltcGxpY2l0YW1lbnRlIGluY2x1w61kb3MuDQorDQorRXhlbXBsb3M6DQorDQorICAgICAgwrcgbWFwIEtleTEgRE9UMQ0KKyANCis2LjQuMS45IERpcmV0aXZhIE5vdGUNCisNCitBZGljaW9uYSB1bWEgZXhwbGljYcOnw6NvIHBlcnNvbi1yZWFkYWJsZSBwYXJhIG8gdGV4dG8gZGUgYWp1ZGEgZGEgdGFiZWxhIA0KK2NoYXZlcy4gQXMgbm90YXMgc8OjbyB1c2FkYXMsIHBvciBleGVtcGxvLCBwYXJhIGRlc2NyZXZlciBvIA0KK3Bvc2ljaW9uYW1lbnRvLCB0YW1hbmhvcyBlIGZvcm1hcyBkYXMgdGVjbGFzIGRvIGRpc3Bvc2l0aXZvLg0KKw0KKyAgICAgIG5vdGUgdGV4dA0KKyAgICAgIHRleHQNCitBIGV4cGxpY2HDp8OjbyBxdWUgc2Vyw6EgYWRpY2lvbmFkYS4gRWxlIHBvZGUgY29udGVyIGVzcGHDp29zLCBlIGRldmUgDQorc2VyIGdyYW1hdGljYWxtZW50ZSBjb3JyZXRhLg0KKw0KK0NhZGEgbm90YSBlc3BlY2lmaWNhIGV4YXRhbWVudGUgdW1hIGxpbmhhIGRlIHRleHRvIGV4cGxpY2F0aXZvLiBlc3Bhw6dvIMOgIA0KK2VzcXVlcmRhIMOpIHTDo28gaWdub3JhZG8gcmVjdW8gbsOjbyBwb2RlIHNlciBlc3BlY2lmaWNhZG8uDQorDQorTsOjbyBow6EgbGltaXRlIHBhcmEgbyBuw7ptZXJvIGRlIG5vdGFzIHF1ZSBwb2RlbSBzZXIgZXNwZWNpZmljYWRhcy4gVG9kb3MgDQorZWxlcyBlc3TDo28gcmV1bmlkb3MgZSBhcHJlc2VudGFkb3MgZW0gdW0gw7puaWNvIGJsb2NvIG5vIGluw61jaW8gZG8gdGV4dG8gDQorZGUgYWp1ZGEgZGEgdGFiZWxhIGNoYXZlcy4NCisgDQorRXhlbXBsbzoNCitub3RlIEtleTEgaXMgdGhlIHJvdW5kIGtleSBhdCB0aGUgZmFyIGxlZnQgb24gdGhlIGZyb250IHN1cmZhY2UuDQorIA0KKzYuNC4xLjEwIERpcmV0aXZhIGRlIHNvYnJlcG9zacOnw6NvDQorDQorSW5jbHVpIGltcGxpY2l0YW1lbnRlIHVtYSBmdW7Dp8OjbyBkbyB0ZWNsYWRvIHNlbXByZSBxdWUgdW0gY29tYW5kbyBkZSANCit0ZWNsYWRvIGJyYWlsbGUgY29uc2lzdGUgZW0gcGVsbyBtZW5vcyB1bSBkb3Qgw6kgZXhlY3V0YWRvLiBBIGluY2x1c8OjbyANCitpbXBsw61jaXRhIMOpIGRlZmluaWRhIGRlbnRybyBkbyBjb250ZXh0byBhdHVhbC4gUXVhbHF1ZXIgbsO6bWVybyBkZWxlcyANCitwb2RlIHNlciBlc3BlY2lmaWNhZG8uDQorIA0KK3N1cGVyaW1wb3NlIGZ1bmN0aW9uDQorICAgICAgZnVuY3Rpb24NCitPIG5vbWUgZGEgZnVuw6fDo28gZG8gdGVjbGFkbyBicmFpbGxlLiBWZWphIG8gb3BlcmFuZG8gZnVuY3Rpb24gZGEgDQorZGlyZXRpdmEgbWFwIHBhcmEgZGV0YWxoZXMuDQorIA0KK0V4ZW1wbG86DQorc3VwZXJpbXBvc2UgRE9UNw0KKyANCis2LjQuMS4xMSBEaXJldGl2YSBUaXRsZQ0KKw0KK0FwcmVzZW50YSB1bSByZXN1bW8gcGVyc29uLXJlYWRhYmxlIGRvIHByb3DDs3NpdG8gZGFzIHRhYmVsYXMgY2hhdmVzDQorIA0KK3RpdGxlIHRleHQNCisgICAgICB0ZXh0DQorVW0gcmVzdW1vIGRlIHVtYSBsaW5oYSBkZSBjb21vIGEgdGFiZWxhIGNoYXZlIMOpIHVzYWRvLiBFbGUgcG9kZSANCitjb250ZXIgZXNwYcOnbywgZSBhcyBjb252ZW7Dp8O1ZXMgZGUgY2FwaXRhbGl6YcOnw6NvIHBhZHLDo28gZGV2ZSBzZXIgDQordXNhZG8uDQorDQorTyB0w610dWxvIGRhIHRhYmVsYSBjaGF2ZSBwb2RlIHNlciBlc3BlY2lmaWNhZG8gYXBlbmFzIHVtYSB2ZXouDQorIA0KK0V4ZW1wbG86DQordGl0bGUgQmluZGluZ3MgZm9yIEtleXBhZC1iYXNlZCBOYXZpZ2F0aW9uDQorIA0KKzYuNC4yIFByb3ByaWVkYWRlcyBkbyBUZWNsYWRvDQorDQorTyBwYWRyw6NvIMOpIHF1ZSB0b2RvcyBvcyB0ZWNsYWRvcyBzw6NvIG1vbml0b3JhZG9zLiBVbSBzdWJjb25qdW50byBkZSANCit0ZWNsYWRvcyBwb2RlIHNlciBzZWxlY2lvbmFkbyBwb3IgdW1hIG91IG1haXMgcHJvcHJpZWRhZGVzIHNlZ3VpbnRlcyANCisodmVqYSBhIG9ww6fDo28gZGUgbGluaGEgZGUgY29tYW5kbyDClkssIGUgYSBkaXJldGl2YSBkbyBhcnF1aXZvIGRlIA0KK2NvbmZpZ3VyYcOnw6NvIGtleWJvYXJkLXByb3BlcnRpZXMpLg0KKw0KK3R5cGUNCitPIHRpcG8gZGUgYmFycmFtZW50bywgZXNwZWNpZmljYWRvIGNvbSB1bWEgZGFzIHNlZ3VpbnRlcyBwYWxhdnJhcy0NCitjaGF2ZXM6IGFueSwgcHMyLCB1c2IsIEJsdWV0b290aA0KKw0KK3ZlbmRvcg0KK0lkZW50aWZpY2HDp8OjbyBkbyB2ZW5kZWRvciwgZXNwZWNpZmljYWRvIGNvbSB1bSBpbnRlaXJvIGRlIDE2LWJpdHMgbsOjbyANCitzaW5hbGl6YWRvLg0KKw0KK3Byb2R1Y3QNCitJZGVudGlmaWNhw6fDo28gZG8gcHJvZHV0bywgZXNwZWNpZmljYWRvIGNvbSB1bSBpbnRlaXJvIGRlIDE2LWJpdHMgbsOjbyANCitzaW5hbGl6YWRvLg0KKw0KK09zIGlkZW50aWZpY2Fkb3JlcyB2ZW5kb3IgZSBwcm9kdWN0IHBvZGVtIHNlciBlc3BlY2lmaWNhZG9zIGVtIG5vdGHDp8OjbyANCitkZWNpbWFsIChzZW0gcHJlZml4byksIG9jdGFsKCBwcmVmaXhhZG8gcG9yIDApLCBvdSBoZXhhZGVjaW1hbCANCisocHJlZml4YWRvIHBvciAweCkuIEVzcGVjaWZpY2FuZG8gMCBzaWduaWZpY2EgY29ycmVzcG9uZGVyIGEgcXVhbHF1ZXIgDQordmFsb3IgKGNvbW8gc2UgYSBwcm9wcmllZGFkZSBuw6NvIGZvaSBlc3BlY2lmaWNhZGEpLiANCisNCis3LiBUw7NwaWNvcyBBdmFuw6dhZG9zDQorDQorNy4xIEluc3RhbGHDp8OjbyBkZSBtw7psdGlwbGFzIHZlcnPDtWVzDQorIA0KK8OJIGbDoWNpbCB0ZXIgbWFpcyBkZSB1bWEgdmVyc8OjbyBkbyBCUkxUVFkgaW5zdGFsYWRvIG5vIG1lc21vIHNpc3RlbWEgYW8gDQorbWVzbW8gdGVtcG8uIEVzc2UgcmVjdXJzbyBwZXJtaXRlIHF1ZSB2b2PDqiB0ZXN0ZSB1bWEgbm92YSB2ZXJzw6NvIGFudGVzIA0KK2RlIHJlbW92ZXIgbyBhbnRpZ28uIA0KKyANCitBIG9ww6fDo28gZGUgY29tcGlsYcOnw6NvIC0td2l0aC1leGVjdXRlLXJvb3QgcGVybWl0ZSBxdWUgdm9jw6ogaW5zdGFsZSBhIA0KK2hpZXJhcnF1aWEgZGUgYXJxdWl2byBlbSBxdWFscXVlciBsdWdhciBxdWUgdm9jw6ogZGVzZWphLiBMZW1icmFuZG8gcXVlIMOpIA0KK21lbGhvciBwYXJhIG1hbnRlciB0b2RvcyBvcyBjb21wb25lbnRlcyBCUkxUVFkgZGVudHJvIGRvIHNpc3RlbWEgZGUgDQorYXJxdWl2b3Mgcm9vdCwgdm9jw6ogcG9kZSBjb21waWxhLWxvcyBhc3NpbTogDQorIA0KKy4gL2NvbmZpZ3VyZSAtLXdpdGgtZXhlY3V0ZS1yb290ID0vYnJsdHR5LTMuMSANCittYWtlIGluc3RhbGwgDQorIA0KK1ZvY8OqIHBvZGUgZXhlY3V0w6EtbG8gYXNzaW06IA0KKyANCisgICAvYnJsdHR5LTMuMS9iaW4vYnJsdHR5IA0KKyANCitRdWFuZG8gYSB2ZXJzw6NvIDMuMiDDqSBsaWJlcmFkbywgYmFzdGEgaW5zdGFsw6EtbG8gZW0gdW0gbG9jYWwgZGlmZXJlbnRlIGUgDQorZXhlY3V0YXIgbyBub3ZvIGFycXVpdm8gZXhlY3V0w6F2ZWwgYSBwYXJ0aXIgZGHDrS4gDQorIA0KKyAgLiAvY29uZmlndXJlIC0td2l0aC1leGVjdXRlLXJvb3QgPS9icmx0dHktMy4yIA0KKyAgbWFrZSBpbnN0YWxsIA0KKyAgL2JybHR0eS0zLjIvYmluL2JybHR0eSANCisgDQorQXTDqSBhZ29yYSwgZXN0ZSBwYXJhZGlnbWEgw6kgdW0gcG91Y28gZXN0cmFuaG8sIHBlbG8gbWVub3MsIGR1YXMgcmF6w7Vlcy4gDQorVW1hIGRlc3NlcyBub21lcyDDqSBtdWl0byBkaWbDrWNpbCBkZSBlc2NyZXZlciwgZSBvIG91dHJvIMOpIHF1ZSB2b2PDqiBuw6NvIA0KK3F1ZXIgbWV4ZXIgY29tIGEgc2Vxw7zDqm5jaWEgZGUgaW5pY2lhbGl6YcOnw6NvIGRvIHNpc3RlbWEgY2FkYSB2ZXogcXVlIHZvY8OqIA0KK3F1aXNlciBtdWRhciBwYXJhIHVtYSB2ZXJzw6NvIGRpZmVyZW50ZSBkbyBCUkxUVFkuIEVzdGVzIHByb2JsZW1hcyBzw6NvIA0KK2ZhY2lsbWVudGUgcmVzb2x2aWRvcyBhZGljaW9uYW5kbyB1bSBsaW5rIHNpbWLDs2xpY28gcGFyYSBvIGV4ZWN1dMOhdmVsLiANCisgDQorICAgbG4tcyAvYnJsdHR5LTMuMS9iaW4vYnJsdHR5IC9iaW4vYnJsdHR5IA0KKyANCitRdWFuZG8gw6kgaG9yYSBkZSBtdWRhciBwYXJhIGEgbm92YSB2ZXJzw6NvLCBhcGVuYXMgbyBsaW5rIHJlcG9pbnQgDQorc3ltYm9sYy4gDQorIA0KKyAgIGxuLXMgL2JybHR0eS0zLjIvYmluL2JybHR0eSAvYmluL2JybHR0eSANCisgDQorU2Ugdm9jw6ogcXVpc2VyIGZpY2FyIHJlYWxtZW50ZSwgZW50w6NvIGluaWNpZSB1bSBvdXRybyBuw612ZWwgZGUgaW5kaXJlw6fDo28gDQorcGFyYSBmYXplciB0b2RvcyBvcyBhcnF1aXZvcyBCUkxUVFkgcGFyYSBxdWFscXVlciB2ZXJzw6NvIHF1ZSBlbGVzIGVzdMOjbyANCitlbSB0b2RvcyBvcyBsb2NhaXMgcGFkcsOjby4gUHJpbWVpcm8sIGNyaWUgdW0gbGluayBzaW1iw7NsaWNvIGF0cmF2w6lzIGRlIA0KK3VtIGxvY2FsIGNvbXVtIHJlcG9pbnRhYmxlIGRlIGNhZGEgdW1hIGRhcyBsb2NhbGl6YcOnw7VlcyBwYWRyw6NvIGRlIA0KK0JSTFRUWS4gDQorIA0KKyAgICAgICBsbiAtcyAvYnJsdHR5L2Jpbi9icmx0dHkgL2Jpbi9icmx0dHkgDQorICAgICAgIGxuIC1zIC9icmx0dHkvZXRjL2JybHR0eSAvZXRjL2JybHR0eSANCisgICAgICAgbG4gLXMgYnJsdHR5IC9saWIvYnJsdHR5IC9saWIvYnJsdHR5IA0KKyANCitFbnTDo28sIHR1ZG8gcXVlIHZvY8OqIHByZWNpc2EgZmF6ZXIgw6kgYXBvbnRhciAvYnJsdHR5IGEgdmVyc8OjbyBkZXNlamFkYS4gDQorIA0KKyAgICAgICBsbiAtcyAvYnJsdHR5LTMuMSAvYnJsdHR5DQorDQorNy4yIEluc3RhbGHDp8Ojby9BanVkYSBkb3MgRGlzY29zIGRlIHJvb3QgcGFyYSBvIExpbnV4DQorIA0KK0JSTFRUWSBwb2RlIGZ1bmNpb25hciBjb21vIHVtIGV4ZWN1dMOhdmVsIGF1dMO0bm9tby4gVHVkbyBvIHF1ZSBlbGUgDQorcHJlY2lzYSBzYWJlciBwb2RlIHNlciBleHBsaWNpdGFtZW50ZSBjb25maWd1cmFkbyBlbSB0ZW1wbyBkZSBjb21waWxhw6fDo28gDQorKHZlamEgT3DDp8O1ZXMgZGUgQ29tcGlsYcOnw6NvKS4gU2UgbyBkaXJldMOzcmlvIGRlIGRhZG9zICh2ZXIgbmEgb3DDp8OjbyBkZSANCitjb21waWxhw6fDo28gLS13aXRoLWRhdGEtZGlyZWN0b3J5IGUgLS13aXRoLWV4ZWN1dGUtcm9vdCkgbsOjbyBleGlzdGlyLCANCitlbnTDo28gQlJMVFRZIG9saGEgZW0gL2V0YyBwYXJhIG9zIGFycXVpdm9zIHF1ZSBlbGUgbmVjZXNzaXRhLiBNZXNtbyBxdWUgDQorbmVuaHVtIGRlc3RlcyBhcnF1aXZvcyBuw6NvIGV4aXN0ZW0sIEJSTFRUWSBhaW5kYSBmdW5jaW9uYSEgDQorIA0KK1NlLCBwb3IgYWxndW1hIHJhesOjbywgdm9jw6ogasOhIGNyaW91IG8gZGlyZXTDs3JpbyBkZSBkYWRvcyAobm9ybWFsbWVudGUgDQorL2V0Yy9icmx0dHkpLCDDqSBpbXBvcnRhbnRlIGRlZmluaXIgc3VhcyBwZXJtaXNzw7VlcyBwYXJhIHF1ZSBzb21lbnRlIG8gDQorcm9vdCBwb3NzYSBjcmlhciBhcnF1aXZvcyBkZW50cm8gZGVsYS4gDQorIA0KKyAgICAgICBjaG1vZCA3NTUgL2V0Yy9icmx0dHkgDQorIA0KK0EgdGVsYSBkbyBhcGFyZWxobyBkZSBpbnNwZcOnw6NvIGRlIGNvbnRlw7pkbyAobm9ybWFsbWVudGUgL2Rldi92Y3NhKSDDqSANCituZWNlc3PDoXJpYS4gRWxhIGrDoSBkZXZlIGV4aXN0aXIgYSBtZW5vcyBxdWUgc3VhIGRpc3RyaWJ1acOnw6NvIGRvIExpbnV4IMOpIA0KK2Jhc3RhbnRlIGFudGlnYS4gU2UgbmVjZXNzw6FyaW8sIHZvY8OqIHBvZGUgY3Jpw6EtbG8gY29tOiANCisgDQorICAgICAgIG1rbm9kIC9kZXYvdmNzYSBjIDcgMTI4IA0KKyAgICAgICBjaG1vZCA2NjAgL2Rldi92Y3NhIA0KKyAgICAgICBjaG93biByb290LnR0eSAvZGV2L3Zjc2EgDQorIA0KK1VtIHByb2JsZW1hIGZyZXHDvGVudGVtZW50ZSBlbmNvbnRyYWRvIGFvIHRlbnRhciB1c2FyIEJSTFRUWSBlbSB1bSANCithbWJpZW50ZSBpbmNlcnRvIGNvbW8gdW0gZGlzY28gZGUgcm9vdCBvdSBkZSB1bSBzaXN0ZW1hIGluY29tcGxldG8gw6kgcXVlIA0KK2VsYSBuw6NvIHDDtGRlIGVuY29udHJhciBhcyBiaWJsaW90ZWNhcyBjb21wYXJ0aWxoYWRhcyAob3UgcGFydGVzKSBkZSBxdWUgDQorbmVjZXNzaXRhLiBEaXNjb3MgZGUgcm9vdCBjb3N0dW1hbSB1c2FyIHN1YmNvbmp1bnRvIGUvb3UgdmVyc8O1ZXMgDQorZGVzYXR1YWxpemFkYXMgZGFzIGJpYmxpb3RlY2FzIHF1ZSBwb2RlbSBzZXIgaW5hZGVxdWFkb3MuIEEgc29sdcOnw6NvIMOpIA0KK2NvbmZpZ3VyYXIgQlJMVFRZIGNvbSBhIG9ww6fDo28gLS1lbmFibGUtc3RhbmRhbG9uZS1wcm9ncmFtcy4gSXNzbyByZW1vdmUgDQordG9kYXMgYXMgZGVwZW5kw6puY2lhcyBkZSBiaWJsaW90ZWNhcyBjb21wYXJ0aWxoYWRhcywgbWFzLCBpbmZlbGl6bWVudGUsIA0KK3RhbWLDqW0gY3JpYSB1bSBhcnF1aXZvIGV4ZWN1dMOhdmVsIG1haW9yLiBIw6EgdW1hIHPDqXJpZSBkZSBvcMOnw7VlcyBkZSANCitjb21waWxhw6fDo28gcXVlIHBvZGUgc2VyIHVzYWRvIHBhcmEgcmVtb3ZlciBkZSByZWN1cnNvcyBkZXNuZWNlc3PDoXJpb3MgZG8gDQorQlJMVFRZLCBhIGZpbSBkZSBhdGVudWFyIHVtIHBvdWNvIGVzc2UgcHJvYmxlbWEgKHZlciBCdWlsZCBGZWF0dXJlcykuIA0KKyANCitPIGV4ZWN1dMOhdmVsIMOpIGVsaW1pbmFkbyBkdXJhbnRlIG8gbWFrZSBpbnN0YWxsLiBJc3RvIHJlZHV6IA0KK3NpZ25pZmljYXRpdmFtZW50ZSBvIHNldSB0YW1hbmhvIHJldGlyYW5kbyBzdWEgdGFiZWxhIGRlIHPDrW1ib2xvLiBWb2PDqiANCityZWNlYmVyw6EgdW0gZXhlY3V0w6F2ZWwgbXVpdG8gbWVub3IsIHBvcnRhbnRvLCBzZSB2b2PDqiBjb25jbHVpciBvIA0KK3Byb2Nlc3NvIGRlIGNvbXBpbGHDp8OjbyBjb21wbGV0bywgZSBkZXBvaXMgY29wacOhLWxvIGRlIHNldSBsb2NhbCANCitpbnN0YWxhZG8uIFNlLCBubyBlbnRhbnRvLCBjb3Bpw6EtbG8gZG8gZGlyZXTDs3JpbyBkZSBjb21waWxhw6fDo28sIHZhaSBzZXIgDQorbXVpdG8gZ3JhbmRlLiBOw6NvIHNlIGVzcXVlw6dhIGRlIHRpcmEtbG8uIA0KKyANCisgCXN0cmlwIGJybHR0eQ0KKw0KKzcuMyAtIE1lbGhvcmlhcyBmdXR1cmFzDQorIA0KK0Fsw6ltIGRlIGNvcnJpZ2lyIG9zIGVycm9zIGUgZGFyIHN1cG9ydGUgYSBtYWlzIHRpcG9zIGRlIGRpc3BsYXlzIA0KK2JyYWlsbGUsIGVzcGVyYW1vcywgc2UgbyB0ZW1wbyBwZXJtaXRpciwgdHJhYmFsaGFyIHNvYnJlIG8gc2VndWludGU6IA0KKyANCitCZXR0ZXIgQXR0cmlidXRlIEhhbmRsaW5nIA0KKw0KKyAgICAgICAqIEFjb21wYW5oYW1lbnRvIGRlIEF0cmlidXRvLiANCisgICAgICAgKiBNaXN0byBkZSB0ZXh0byBlIG1vZG8gZGUgYXRyaWJ1dG8uIA0KKyANCitTY3JvbGwgVHJhY2tpbmcgDQorQmxvcXVlYXIgYSBqYW5lbGEgZGUgdW1hIGxpbmhhIGJyYWlsbGUgasOhIHF1ZSByb2xhIG5hIHRlbGEuIA0KKyANCitCZXR0ZXIgU3BlZWNoIFN1cHBvcnQNCisgDQorICAgICAgICogQnJhaWxsZSBtaXN0b3MgZSBkZSBmYWxhIHBhcmEgbGVpdHVyYSBtYWlzIHLDoXBpZGEgZG8gdGV4dG8uIA0KKyAgICAgICAqIE1lbGhvciBuYXZlZ2HDp8OjbyBkZSBzcGVlY2guIA0KKyAgICAgICAqIE1haXMgc2ludGV0aXphZG9yZXMgZGUgdm96LiANCisgDQorU2NyZWVuIFN1YnJlZ2lvbnMgDQorSWdub3JhciBvIG1vdmltZW50byBkbyBjdXJzb3IgZm9yYSBkYSByZWdpw6NvLCBlIGRlZmluaXIgbGltaXRlcyBkZSANCituYXZlZ2HDp8OjbyBzdWF2ZSBuYXMgYm9yZGFzIGRhIHJlZ2nDo28uIA0KKyANCitWZWphIG8gYXJxdWl2byBUT0RPIHBhcmEgdW1hIGxpc3RhIG1haXMgY29tcGxldGEuDQorDQorNy40IEJ1Z3MgY29uaGVjaWRvcw0KKyANCitObyBtb21lbnRvIGRhIGVzY3JpdGEgKGRlemVtYnJvIDIwMDEpLCBvcyBzZWd1aW50ZXMgcHJvYmxlbWFzIHPDo28gDQorY29uaGVjaWRvczogDQorIA0KK0N1cnNvciBkZSByb3RlYW1lbnRvIMOpIGltcGxlbWVudGFkbyBjb21vIHVtIGxvb3BpbmcgZG8gc3ViLXByb2Nlc3NvIHF1ZSANCitjb3JyZSBuYSBwcmlvcmlkYWRlIHJlZHV6aWRhIHBhcmEgZXZpdGFyIG8gdXNvIGRlIG11aXRvIHRlbXBvIGRlIENQVS4gT3MgDQorZGlmZXJlbnRlcyBzaXN0ZW1hcyBxdWUgw6kgY2FycmVnYWRvIHJlcXVlciBkaWZlcmVudGVzIGNvbmZpZ3VyYcOnw7VlcyBkZSANCitzZXVzIHBhcsOibWV0cm9zLiBPcyBwYWRyw7VlcyBmdW5jaW9uYW0gbXVpdG8gYmVtIGVtIHVtIGVkaXRvciBkZSBVbml4IA0KK3TDrXBpY28gZGUgdW0gc2lzdGVtYSBiYXN0YW50ZSBsZXZlLCBtYXMgbXVpdG8gcG9icmUgZW0gYWxndW1hcyBvdXRyYXMgDQorc2l0dWHDp8O1ZXMsIHBvciBleGVtcGxvLCBlbSB1bSBsaW5rIGxlbnRvIGRlIHPDqXJpZSBwYXJhIHVtIGhvc3QgcmVtb3RvLiANCisNCitBcMOqbmRpY2U6DQorDQorQS4gRGlzcGxheSBCcmFpbGxlIFN1cG9ydGFkb3MNCisNCisgICAgICAgQlJMVFRZIHN1cG9ydGEgb3Mgc2VndWludGVzIGRpc3BsYXlzIGJyYWlsbGU6DQorDQorQi4gU2ludGV0aXphZG9yZXMgZGUgRmFsYSBTdXBvcnRhZG9zOg0KKw0KKyAgICAgICBCUkxUVFkgc3Vwb3J0YSBvcyBzZWd1aW50ZXMgc2ludGV0aXphZG9yZXMgZGUgZmFsYToNCisNCisgICAgICBOb21lICAgICAgICAgICAgIE1vZGVsb3MNCisgIF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXw0KKyAgICAgIEFsdmEgICAgICAgICAgICAgRGVscGhpICg0bm4pDQorICAgICAgQnJhaWxsZUxpdGUNCisgICAgICBDb21iaUJyYWlsbGUNCisgICAgICBlU3BlYWsgICAgICAgICAgIHRleHQgdG8gc3BlZWNoIGVuZ2luZQ0KKyAgICAgIEV4dGVybmFsU3BlZWNoICAgcnVucyAvdXNyL2xvY2FsL2Jpbi9leHRlcm5hbHNwZWVjaA0KKyAgICAgIEZlc3RpdmFsICAgICAgICAgdGV4dCB0byBzcGVlY2ggZW5naW5lDQorICAgICAgRmVzdGl2YWxMaXRlICAgICB0ZXh0IHRvIHNwZWVjaCBlbmdpbmUNCisgICAgICBHZW5lcmljU2F5ICAgICAgIHBpcGVzIHRvIC91c3IvbG9jYWwvYmluL3NheQ0KKyAgICAgIE1pa3JvcHVoZSAgICAgICAgdGV4dCB0byBzcGVlY2ggZW5naW5lDQorICAgICAgU3dpZnQgICAgICAgICAgICB0ZXh0IHRvIHNwZWVjaCBlbmdpbmUNCisgICAgICBUaGV0YSAgICAgICAgICAgIHRleHQgdG8gc3BlZWNoIGVuZ2luZQ0KKyAgICAgIFZpYVZvaWNlICAgICAgICAgdGV4dCB0byBzcGVlY2ggZW5naW5lDQorDQorQyDCliBDw7NkaWdvIGRlIElkZW50aWZpY2HDp8OjbyBkZSBEcml2ZXINCitDw7NkaWdvIA0KK05vbWUNCithbA0KK0FsdmENCithdA0KK0FsYmF0cm9zcw0KK2JhDQorQnJsQVBJDQorYmwNCitCcmFpbGxlTGl0ZQ0KK2JtDQorQmF1bSAoTmF0aXZlLCBIVCwgUEIxLCBQQjIpDQorYm4NCitCcmFpbGxlTm90ZQ0KK2NiDQorQ29tYmlCcmFpbGxlDQorZWMNCitFY29CcmFpbGxlDQorZXMNCitlU3BlYWsNCitldQ0KK0V1cm9CcmFpbGxlDQorZmwNCitGZXN0aXZhbExpdGUNCitmcw0KK0ZyZWVkb21TY2llbnRpZmljDQorZnYNCitGZXN0aXZhbA0KK2dzDQorR2VuZXJpY1NheQ0KK2htDQorSElNUw0KK2h0DQorSGFuZHlUZWNoDQoraWwNCitJcmlzTGludXgNCitsYg0KK0xpYmJyYWlsbGUNCitsdA0KK0xvZ1RleHQNCittYg0KK011bHRpQnJhaWxsZQ0KK21kDQorTURWDQorbW4NCitNaW5pQnJhaWxsZQ0KK21wDQorTWlrcm9wdWhlDQorbXQNCitNZXRlYw0KK25vDQorbm8gZHJpdmVyDQorcGcNCitQZWdhc3VzDQorcG0NCitQYXBlbm1laWVyDQorc2QNCitTcGVlY2hEaXNwYXRjaGVyDQorc2sNCitTZWlrYQ0KK3N3DQorU3dpZnQNCit0aA0KK1RoZXRhDQordHMNCitUZWxlc2Vuc29yeSBTeXN0ZW1zIEluYy4NCit0dA0KK1RUWQ0KK3ZkDQorVmlkZW9CcmFpbGxlDQordm8NCitWb3lhZ2VyDQordnINCitWaXJ0dWFsDQordnMNCitWaXNpb0JyYWlsbGUNCit2dg0KK1ZpYVZvaWNlDQoreHMNCitFeHRlcm5hbFNwZWVjaA0KK3h3DQorWFdpbmRvdw0KKw0KKw0KKw0KK0QuIERyaXZlcnMgZGUgVGVsYSBTdXBvcnRhZG9zDQorDQorICAgICAgIEJSTFRUWSBzdXBvcnRhIG9zIHNlZ3VpbnRlcyBkcml2ZXJzIGRlIHRlbGE6DQorDQorICAgICAgIGFzIEFULVNQSQ0KKw0KKyAgICAgCWhkIA0KK0VzdGUgZHJpdmVyIGZvcm5lY2UgdW0gYWNlc3NvIGRpcmV0byBwYXJhIGEgdGVsYSBkbyBjb25zb2xlIEh1cmQuIMOJIHPDsyANCitzZWxlY2lvbmFyIGEgb3DDp8OjbyBwYWRyw6NvIGRvIHNpc3RlbWEgSHVyZC4NCisNCisgICAgICBOYW1lICAgICAgICAgICAgICAgIE1vZGVscw0KKyAgICBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fDQorICAgICAgQWxiYXRyb3NzICAgICAgICAgICA0Ni84MA0KKyAgICAgIEFsdmEgICAgICAgICAgICAgICAgQUJUICgzbm4pDQorICAgICAgICAgICAgICAgICAgICAgICAgICBEZWxwaGkgKDRubikNCisgICAgICAgICAgICAgICAgICAgICAgICAgIFNhdGVsbGl0ZSAoNW5uKQ0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgQnJhaWxsZSBTeXN0ZW0gNDANCisgICAgICAgICAgICAgICAgICAgICAgICAgIEJyYWlsbGUgQ29udHJvbGxlciA2NDAvNjgwDQorICAgICAgQmF1bSAgICAgICAgICAgICAgICBJbmthDQorICAgICAgICAgICAgICAgICAgICAgICAgICBWYXJpby9SQlQNCisgICAgICAgICAgICAgICAgICAgICAgICAgIFN1cGVyVmFyaW8vQnJhaWxsaWFudA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgUG9ja2V0VmFyaW8NCisgICAgICAgICAgICAgICAgICAgICAgICAgIFZhcmlvUHJvDQorICAgICAgICAgICAgICAgICAgICAgICAgICBFY29WYXJpbw0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgVmFyaW9Db25uZWN0L0JyYWlsbGVDb25uZWN0DQorICAgICAgICAgICAgICAgICAgICAgICAgICBSZWZyZXNoYWJyYWlsbGUNCisgICAgICBCcmFpbENvbW0gICAgICAgICAgIElJSQ0KKyAgICAgIEJyYWlsbGVMaXRlICAgICAgICAgMTgvNDAvTTIwL000MA0KKyAgICAgIEJyYWlsbGVOb3RlICAgICAgICAgMTgvMzINCisgICAgICBCcmxBUEkNCisgICAgICBDb21iaUJyYWlsbGUgICAgICAgIDI1LzQ1Lzg1DQorICAgICAgRWNvQnJhaWxsZSAgICAgICAgICAyMC80MC84MA0KKyAgICAgIEV1cm9CcmFpbGxlICAgICAgICAgQXplckJyYWlsbGUNCisgICAgICAgICAgICAgICAgICAgICAgICAgIENsaW8NCisgICAgICAgICAgICAgICAgICAgICAgICAgIElyaXMNCisgICAgICAgICAgICAgICAgICAgICAgICAgIE5vdGVCcmFpbGxlDQorICAgICAgICAgICAgICAgICAgICAgICAgICBTY3JpYmENCisgICAgICAgICAgICAgICAgICAgICAgICAgIEVzeXMgMTIvNDANCisgICAgICBGcmVlZG9tU2NpZW50aWZpYyAgIEZvY3VzIDEgNDQvNzAvODQNCisgICAgICAgICAgICAgICAgICAgICAgICAgIEZvY3VzIDIgNDAvODANCisgICAgICAgICAgICAgICAgICAgICAgICAgIEZvY3VzIEJsdWUgNDANCisgICAgICAgICAgICAgICAgICAgICAgICAgIFBBQyBNYXRlIDIwLzQwDQorICAgICAgSGFuZHlUZWNoICAgICAgICAgICBNb2R1bGFyIDIwLzQwLzgwDQorICAgICAgICAgICAgICAgICAgICAgICAgICBNb2R1bGFyIEV2b2x1dGlvbiA2NC84OA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgQWN0aXZlIEJyYWlsbGUNCisgICAgICAgICAgICAgICAgICAgICAgICAgIEJyYWlsbGUgV2F2ZQ0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgRWFzeSBCcmFpbGxlDQorICAgICAgICAgICAgICAgICAgICAgICAgICBCcmFpbGxlIFN0YXIgNDAvODANCisgICAgICAgICAgICAgICAgICAgICAgICAgIEJvb2t3b3JtDQorICAgICAgICAgICAgICAgICAgICAgICAgICBCcmFpbGxpbm8NCisgICAgICBISU1TICAgICAgICAgICAgICAgIEJyYWlsbGUgU2Vuc2UNCisgICAgICAgICAgICAgICAgICAgICAgICAgIFN5bmNCcmFpbGxlDQorICAgICAgTGliYnJhaWxsZQ0KKyAgICAgIExvZ1RleHQgICAgICAgICAgICAgMzINCisgICAgICBNRFYgICAgICAgICAgICAgICAgIE1CMjA4L01CNDA4TC9NQjQwOFMgKHByb3RvY29sIDUpDQorICAgICAgTWV0ZWMgICAgICAgICAgICAgICBCRC00MA0KKyAgICAgIE1pbmlCcmFpbGxlICAgICAgICAgMjANCisgICAgICBNdWx0aUJyYWlsbGUgICAgICAgIE1CMTI1Q1IvTUIxNDVDUi9NQjE4NUNSDQorICAgICAgUGFwZW5tZWllciAgICAgICAgICBDb21wYWN0IDQ4Ng0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgQ29tcGFjdC9UaW55DQorICAgICAgICAgICAgICAgICAgICAgICAgICBJQiA4MCBDUiBTb2Z0DQorICAgICAgICAgICAgICAgICAgICAgICAgICAyRCBMaXRlIChwbHVzKQ0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgMkQgU2NyZWVuIFNvZnQNCisgICAgICAgICAgICAgICAgICAgICAgICAgIEVMIDgwDQorICAgICAgICAgICAgICAgICAgICAgICAgICBFTCAyRCA0MC82Ni84MA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgRUwgNDAvNjYvNzAvODAgUw0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgRUwgMkQgODAgUw0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgRUwgNDAgUA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgRUwgODAgSUkNCisgICAgICAgICAgICAgICAgICAgICAgICAgIEVsYmEgMjAvMzINCisgICAgICAgICAgICAgICAgICAgICAgICAgIFRyaW8gNDAvRWxiYTIwL0VsYmEzMg0KKyAgICAgIFBlZ2FzdXMgICAgICAgICAgICAgMjAvMjcvNDAvODANCisgICAgICBTZWlrYSAgICAgICAgICAgICAgIDQwDQorICAgICAgVFNJICAgICAgICAgICAgICAgICBOYXZpZ2F0b3IgMjAvNDAvODANCisgICAgICAgICAgICAgICAgICAgICAgICAgIFBvd2VyQnJhaWxsZSA0MC82NS84MA0KKyAgICAgIFRUWSAgICAgICAgICAgICAgICAgdGVybWluZm8NCisgICAgICBWaWRlb0JyYWlsbGUgICAgICAgIDQwDQorICAgICAgVmlydHVhbCAgICAgICAgICAgICBUQ1AvVW5peCwgY2xpZW50L3NlcnZlcg0KKyAgICAgIFZpc2lvQnJhaWxsZSAgICAgICAgMjAvNDANCisgICAgICBWb3lhZ2VyICAgICAgICAgICAgIDQ0LzcwDQorICAgICAgICAgICAgICAgICAgICAgICAgICBQYXJ0MjMyIChzZXJpYWwgYWRhcHRlcikNCisgICAgICAgICAgICAgICAgICAgICAgICAgIEJyYWlsbGVQZW4vRWFzeUxpbmsNCisgICAgICBYV2luZG93ICAgICAgICAgICAgIFgxMQ0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgV2luZG93cw0KKw0KKw0KKyAgICAgIENvZGUgICBOYW1lDQorICAgIF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18NCisgICAgICBhbCAgICAgQWx2YQ0KKyAgICAgIGF0ICAgICBBbGJhdHJvc3MNCisgICAgICBiYSAgICAgQnJsQVBJDQorICAgICAgYmMgICAgIEJyYWlsQ29tbQ0KKyAgICAgIGJsICAgICBCcmFpbGxlTGl0ZQ0KKyAgICAgIGJtICAgICBCYXVtIChOYXRpdmUsIEhULCBQQjEsIFBCMikNCisgICAgICBibiAgICAgQnJhaWxsZU5vdGUNCisgICAgICBjYiAgICAgQ29tYmlCcmFpbGxlDQorICAgICAgZWMgICAgIEVjb0JyYWlsbGUNCisgICAgICBlcyAgICAgZVNwZWFrDQorICAgICAgZXUgICAgIEV1cm9CcmFpbGxlDQorICAgICAgZmwgICAgIEZlc3RpdmFsTGl0ZQ0KKyAgICAgIGZzICAgICBGcmVlZG9tU2NpZW50aWZpYw0KKyAgICAgIGZ2ICAgICBGZXN0aXZhbA0KKyAgICAgIGdzICAgICBHZW5lcmljU2F5DQorICAgICAgaG0gICAgIEhJTVMNCisgICAgICBodCAgICAgSGFuZHlUZWNoDQorICAgICAgaWwgICAgIElyaXNMaW51eA0KKyAgICAgIGxiICAgICBMaWJicmFpbGxlDQorICAgICAgbHQgICAgIExvZ1RleHQNCisgICAgICBtYiAgICAgTXVsdGlCcmFpbGxlDQorICAgICAgbWQgICAgIE1EVg0KKyAgICAgIG1uICAgICBNaW5pQnJhaWxsZQ0KKyAgICAgIG1wICAgICBNaWtyb3B1aGUNCisgICAgICBtdCAgICAgTWV0ZWMNCisgICAgICBubyAgICAgbm8gZHJpdmVyDQorICAgICAgcGcgICAgIFBlZ2FzdXMNCisgICAgICBwbSAgICAgUGFwZW5tZWllcg0KKyAgICAgIHNkICAgICBTcGVlY2hEaXNwYXRjaGVyDQorICAgICAgc2sgICAgIFNlaWthDQorICAgICAgc3cgICAgIFN3aWZ0DQorICAgICAgdGggICAgIFRoZXRhDQorICAgICAgdHMgICAgIFRlbGVzZW5zb3J5IFN5c3RlbXMgSW5jLg0KKyAgICAgIHR0ICAgICBUVFkNCisgICAgICB2ZCAgICAgVmlkZW9CcmFpbGxlDQorICAgICAgdm8gICAgIFZveWFnZXINCisgICAgICB2ciAgICAgVmlydHVhbA0KKyAgICAgIHZzICAgICBWaXNpb0JyYWlsbGUNCisgICAgICB2diAgICAgVmlhVm9pY2UNCisgICAgICB4cyAgICAgRXh0ZXJuYWxTcGVlY2gNCisgICAgICB4dyAgICAgWFdpbmRvdw0KKw0KK2x4IAkgRXN0ZSBkcml2ZXIgZm9ybmVjZSB1bSBhY2Vzc28gZGlyZXRvIG5vIGNvbnNvbGUgZG8gTGludXguIMOJIHPDsw0KKyAgICAgICBzZWxlY2lvbmFyIGEgb3DDp8OjbyBwYWRyw6NvIGRvIHNpc3RlbWEgTGludXguDQorICAgICAgc2MgICAgIEVzdGUgZHJpdmVyIGZvcm5lY2UgdW0gYWNlc3NvIGRpcmV0byBuYSB0ZWxhIGRvIHByb2dyYW1hLiBTZWxlY2lvbmUNCisgICAgICAgIHRvZG9zIG9zIHNpc3RlbWFzLCBuYSBvcMOnw6NvIHBhZHLDo28gc2UgbyBkcml2ZXIgZGUgdGVsYSBuYXRpdm8gw6kNCisgICAgICAgIGRpc3BvbsOtdmVsLiBPIGNhbWluaG8gZGEgdGVsYSBxdWUgbsOzcyBmb3JuZWNlbW9zICh2ZXIgU3ViZGlyZXTDs3Jpbw0KKyAgICAgICAgZGUgQ2FtaW5ob3MpIGRldmVyw6Egc2VyIGFwbGljYWRvLiBVc2FkbyBuZXN0ZSBkcml2ZXIganVudG8gY29tIG8NCisgICAgICAgIGZhdG8gZGEgdGVsYSBkZXZlcsOhIHNlciByb2RhZGEgY29uY29ycmVudGVtZW50ZSwgbyBCUkxUVFkgZmF6IG8gdXNvDQorICAgICAgICBlZmV0aXZvIGFwZW5hcyBkZXBvaXMgZG8gdXN1w6FyaW8gdGVyIGxvZ2Fkby4NCisgICAgICB3bglFc3RlIGRyaXZlciBmb3JuZWNlIHVtIGFjZXNzbyBkaXJldG8gY29tIG8gY29uc29sZSBkbyBXaW5kb3dzLiDDiSBzw7MNCisgICAgICAgICAgICBzZWxlY2lvbmFkbyBhIG9ww6fDo28gcGFkcsOjbyBlbSBXaW5kb3dzL0N5Z3dpbiBzeXN0ZW1zLg0KKw0KK0UuIFNpbnRheGUgZGUgT3BlcmHDp8Ojbw0KKw0KK0UuMS4gRXNwZWNpZmljYcOnw6NvIGRvIERyaXZlcg0KKw0KK1VtIGRpc3BsYXkgYnJhaWxsZSBvdSB1bSBkcml2ZXIgc2ludGV0aXphZG9yIGRlIGZhbGEgZGV2ZXLDoSBzZXIgZXNwZWNpZmljYWRvIGNvbSANCitkdWFzIGxldHJhcyDCk2PDs2RpZ28gZGUgaWRlbnRpZmljYcOnw6NvIGRlIGRyaXZlcsKULg0KKw0KK1VtYSB2aXJndWxhIGRlbGltaXRhIGEgbGlzdGEgZGUgZHJpdmVycyBlc3BlY2lmaWNhZGEuIFNlIGlzdG8gZXN0w6EgZmVpdG8gZW50w6NvIGEgDQorYXV0b2RldGVjw6fDo28gw6kgZmVpdGEgdXNhbmRvIGNhZGEgbGlzdGEgZGUgZHJpdmVycyBlbSBzZXHDvMOqbmNpYS4gVm9jw6ogZGV2ZXLDoSANCitwcmVjaXNhciBleHBlcmltZW50YXIgbmEgb3JkZW0gZGV0ZXJtaW5hZGEgY29tbyBtYWlzIGNvbmZpw6F2ZWwgcXVhbmRvIGFsZ3VucyANCitkcml2ZXJzIGF1dG9kZXRlY3RhZG9zIGZvcmVtIG1lbGhvcmVzIHF1ZSBvcyBvdXRyb3MuDQorDQorU2UgdW1hIMO6bmljYSBwYWxhdnJhIGF1dG8gw6kgZXNwZWNpZmljYWRhIHF1YW5kbyBhIGF1dG9kZXRlY8Onw6NvIMOpIGZvcm5lY2lkYSANCit1c2FuZG8gYXBlbmFzIGFxdWVsZXMgZHJpdmVycyBxdWUgc8OjbyBjb25oZWNpZG9zIMOpIGNvbmZpw6F2ZWwgbmVzc2UgcHJvcMOzc2l0by4NCisNCitFLjIuIEVzcGVjaWZpY2HDp8OjbyBkbyBEaXNwb3NpdGl2byBCcmFpbGxlDQorDQorRW0gZ2VyYWwsIGEgZXNwZWNpZmljYcOnw6NvIGRvIGRpc3Bvc2l0aXZvIEJyYWlsbGUgKHZlciBsaW5oYSBkZSBjb21hbmRvIMKWZCwgbyANCithcnF1aXZvIGRlIGNvbmZpZ3VyYcOnw6NvIMKTYnJhaWxsZS1kZXZpY2XClCwgZSBuYSBjb21waWxhw6fDo28gYSBvcMOnw6NvIMKTwpd3aXRoLQ0KK2JyYWlsbGUtZGV2aWNlwpQpIMOpIHF1YWxpZmljYWRhOiBkYWRvLiBQYXJhIHNlciBjb21wYXTDrXZlbCBjb20gdmVyc8O1ZXMgDQorYW50ZXJpb3Jlcywgc2UgYSBzZXJpYWwgw6kgYXNzdW1pZGEuDQorDQorQSBzZWd1aXIgb3MgdGlwb3MgZGUgZGlzcG9zaXRpdm9zIHPDo28gc3Vwb3J0YWRvczogDQorDQorCUJsdWV0b290aA0KK1BhcmEgbyBkaXNwb3NpdGl2byBibHVldG9vdGgsIGVzcGVjaWZpY2EgYmx1ZXRvb3RoOmFkZHJlc3MgKGJ0IDogcG9kZSBzZXIgDQordXNhZG8pLiBPIGVuZGVyZcOnbyBkZXZlcsOhIHNlciBzZWlzIHBhcmVzIGRlIGTDrWdpdG9zIGRlIGhleGFkZWNpbWFsIA0KK3NlcGFyYWRvcyBwb3IgZG9pcyBwb250b3MsIGUuZy4gMDE6MjM6NDU6Njc6ODk6QUIuDQorDQorCVNlcmlhbA0KK1BhcmEgbyBkaXNwb3NpdGl2byBzZXJpYWwsIGVzcGVjaWZpY2FkbzogL3BhdGgvdG8vZGV2aWNlLiBBIHNlcmlhbCDDqSANCitvcGNpb25hbCAocGFyYSBjb21wYXRpYmlsaWRhZGUgYW50ZXJpb3IpLiBTZSB1bSBjYW1pbmhvIHJlbGF0aXZvIMOpIGRhZG8gDQorZW5xdWFudG8gbyBjYW1pbmhvIMOpIGFuZXhhZG8gZW0gL2RldiAoYSBsb2NhbGl6YcOnw6NvIG9uZGUgb3MgZGlzcG9zaXRpdm9zIA0KK3PDo28gZGVmaW5pZG9zIG5vIHNpc3RlbWEgdW5peCkuIEFzIGVzcGVjaWZpY2HDp8O1ZXMgZG8gZGlzcG9zaXRpdm8gYSBzZWd1aXIgDQordG9kYXMgc2UgcmVmZXJlbSBwYXJhIG8gcHJpbWVpcm8gZGlzcG9zaXRpdm8gc2VyaWFsIG5vIExpbnV4Og0KKw0KKz8Jc2VyaWFsOi9kZXYvdHR5UzANCis/CXNlcmlhbDp0dHlTMA0KKz8JL2Rldi90dHlTMA0KKz8JdHR5UzANCisNCitVU0INCitQYXJhIG8gZGlzcG9zaXRpdm8gVVNCLCBlc3BlY2lmaWNhZG8gVVNCOiBvIEJSTFRUWSBzZXLDoSBwcm9jdXJhZG8gcGVsbyANCitwcmltZWlybyBkaXNwb3NpdGl2byBVU0IgcXVlIGZvaSBtYXJjYWRvIHBlbG8gZHJpdmVyIGRvIGRpc3BsYXkgYnJhaWxsZSANCitxdWUgZXN0w6Egc2VuZG8gdXNhZG8uIFNlIGlzdG8gw6kgaW5hZGVxdWFkbywgZS5nLiBzZSB2b2PDqiB0ZW0gbWFpcyBkZSB1bSANCitkaXNwbGF5IGJyYWlsbGUgVVNCIHF1ZSByZXF1ZXIgdW0gbWVzbW8gZHJpdmVyLCBlbnTDo28gdm9jw6ogcG9kZSByZWZpbmFyIGEgDQorZXNwZWNpZmljYcOnw6NvIGRvIGRpc3Bvc2l0aXZvIHBvciBudW1lcm8gZGUgc2VyaWFsIHZpc8OtdmVsIG5vIGRpc3BsYXksIGUuZy4gDQordXNiOjEyMzQ1LiBOLkIuOiBBIGNhcmFjdGVyw61zdGljYSBkZSBpZGVudGlmaWNhw6fDo28gZG8gbnVtZXJvIHNlcmlhbMKUIG7Do28gDQorZnVuY2lvbmEgZW0gYWxndW5zIG1vZGVsb3MgcG9yIGNhdXNhIGRlIGFsZ3VucyBmYWJyaWNhbnRlcyBuw6NvIHNldGFyZW0gbyANCitudW1lcm8gc2VyaWFsIFVTQiBlbSB0b2RvcyBvdSBzZXRhbSBtYWlzIG7Do28gY29tIHVtIMO6bmljbyB2YWxvci4NCisNCitBIHZpcmd1bGEgZGVsaW1pdGEgYSBsaXN0YSBkZSBkaXNwb3NpdGl2b3MgYnJhaWxsZSBlc3BlY2lmaWNhZG9zLiBTZSBpc3NvIMOpIA0KK2ZlaXRvIGVucXVhbnRvIGEgYXV0b2RldGXDp8OjbyDDqSBmZWl0YSBlbSBjYWRhIGxpc3RhIGRlIGRpc3Bvc2l0aXZvIGVtIHNlccO8w6puY2lhLg0KK0VzdGUgY2FyYWN0ZXLDrXN0aWNhIMOpIHBhcnRpY3VsYXJtZW50ZSB1c3VhbCBzZSB2b2PDqiB0ZW0gdW0gZGlzcGxheSBicmFpbGxlIGNvbSANCittYWlzIGRlIHVtYSBpbnRlcmZhY2UsIGUuZy4gYW1ib3MgdW1hIHNlcmlhbCBlIHVtYSBwb3J0YSBVU0IuIE5vIGNhc28gw6kgDQordXN1YWxtZW50ZSBtZWxob3IgYSBsaXN0YSBkZSBwb3J0YXMgVVNCIHByaW1laXJvLCBlLmcuIHVzYjpzZXJpYWw6L2Rldi90dHlTMCwgZGUgDQorDQorcG9ydC4gIEluIHRoaXMgY2FzZSBpdCdzIHVzdWFsbHkgYmV0dGVyIHRvIGxpc3QgdGhlIFVTQiBwb3J0IGZpcnN0LCBkZXNkZSBxdWUgYSANCithdXRvZGV0ZcOnw6NvIHRlbmRlIHNlciBjb25maWF2ZWwgZG8gcXVlIG8gZXNwZXJhZG8uDQorDQorRS4zLiBFc3BlY2lmaWNhw6fDo28gZG8gRGlzcG9zaXRpdm8gUENNDQorDQorTmEgbWFpb3JpYSBkb3MgY2Fzb3Mgb3MgZGlzcG9zaXRpdm9zIFBDTSDDqSB1bSBjYW1pbmhvIGNoZWlvIGUgYXByb3ByaWFkbyBwYXJhIG8gDQorZGlzcG9zaXRpdm8gZG8gc2lzdGVtYS4gRXhjZcOnw7VlcyBzw6NvOiANCisNCitBTFNBDQorDQorTyBub21lIGRvcyBhcmd1bWVudG9zIHPDo28gZGlzcG9zaXRpdm9zIGbDrXNpY29zIGUgbMOzZ2ljb3MgaS5lLiANCituYW1lWzphcmd1bWVudCwuLi5dLg0KKw0KK08gZGlzcG9zaXRpdm8gUENNIHBhZHLDo28gw6k6DQorDQorICAgICAgUGxhdGFmb3JtYSAgICAgRGlzcG9zaXRpdm8NCisgICAgX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXw0KKyAgICAgIEZyZWVCU0QgICAgICAgIC9kZXYvZHNwDQorICAgICAgTGludXgvQUxTQSAgICAgaHc6MCwwDQorICAgICAgTGludXgvT1NTICAgICAgL2Rldi9kc3ANCisgICAgICBOZXRCU0QgICAgICAgICAvZGV2L2F1ZGlvDQorICAgICAgT3BlbkJTRCAgICAgICAgL2Rldi9hdWRpbw0KKyAgICAgIFFueCAgICAgICAgICAgIHByZWZlcnJlZCBQQ00gb3V0cHV0IGRldmljZQ0KKyAgICAgIFNvbGFyaXMgICAgICAgIC9kZXYvYXVkaW8NCisNCitFLjQuIEVzcGVjaWZpY2HDp8OjbyBkbyBEaXNwb3NpdGl2byBNSURJDQorDQorTmEgbWFpb3JpYSBkb3MgY2Fzb3MgZGUgZGlzcG9zaXRpdm9zIE1JREkgw6kgdW0gY2FtaW5obyBjb21wbGV0byBlIGFwcm9wcmlhZG8gZG8gDQorcGFyYSBvIGRpc3Bvc2l0aXZvIGRvIHNpc3RlbWEuIEV4Y2XDp8O1ZXMgc8OjbzoNCisNCitBTFNBDQorDQorTyBjbGllbnRlIGUgcG9ydGEgc8OjbyBzZXBhcmFkYXMgcG9yIHVtYSB2aXJndWxhLCBpLmUuIGNsaWVudDpwb3J0LiBDYWRhIHVtIGRldmUgDQorc2VyIGVzcGVjaWZpY2FkbyBjb21vIHVtIG51bWVybyBvdSBjb21vIHVtIGNhc28gZXNwZWNpYWwgZGUgc3Vic3RyaW5nIGRvIG5vbWUuDQorDQorTyBkaXNwb3NpdGl2byBwYWRyw6NvIE1JREkgw6k6DQorDQorICAgICAgUGxhdGFmb3JtYSAgICAgRGlzcG9zaXRpdm8NCisgICAgX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fDQorICAgICAgTGludXgvQUxTQSAgICAgdGhlIGZpcnN0IGF2YWlsYWJsZSBNSURJIG91dHB1dCBwb3J0DQorICAgICAgTGludXgvT1NTICAgICAgL2Rldi9zZXF1ZW5jZXINCisNCitGLiBDb252ZW7Dp8OjbyBkbyBQYWRyw6NvIEJyYWlsbGUgcGFyYSBudW1lcmHDp8Ojbw0KKw0KK1VtIHBhZHLDo28gYnJhaWxsZSBkZSBjZWx1bGFzIGNvbnNpc3RlIGVtIDYgcG9udG9zIHBhcmEgYWxpbmhhZG9zIGVtIDMgbGluaGFzIGUgMiANCitjb2x1bmFzLiBDYWRhIHBvbnRvIHBvZGUgc2VyIGlkZW50aWZpY2FkbyBwb3Igb3MgbsO6bWVyb3MgYWJhaXhvOg0KKw0KKyAgICAgICAxIFRvcG8tZXNxdWVyZGEgKGxpbmhhIDEsIGNvbHVuYSAxKS4NCisNCisgICAgIAkyIE1laW8tZXNxdWVyZGEgKGxpbmhhIDIsIGNvbHVuYSAxKS4NCisNCisgICAgIAkzIEZpbS1lc3F1ZXJkYSAobGluaGEgMywgY29sdW5hIDEpLg0KKw0KKyAgICAgCTQgVG9wby1kaXJlaXRhIChsaW5oYSAxLCBjb2x1bmEgMikuDQorDQorICAgICAgNSBNZWlvLWRpcmVpdGEgKGxpbmhhIDIsIGNvbHVuYSAyKS4NCisNCisgICAgICA2IEZpbS1kaXJlaXRhIChsaW5oYSAzLCBjb2x1bmEgMikuDQorDQorICBEaXNwbGF5IGJyYWlsbGUgdGVtIGludHJvZHV6aWRvIDQwIGxpbmhhcyBubyBmaW0uDQorDQorICAgICAJNyBBYmFpeG8tZXNxdWVyZGEgKGxpbmhhIDQsIGNvbHVuYSAxKS4NCisNCisgICAgIAk4IEFiYWl4by1kaXJlaXRhIChsaW5oYSA0LCBjb2x1bmEgMikuDQorDQorICBUYWx2ZXogYSBpbWFnZW0gZmljYXLDoSBtYWlzIGZhY2lsIGRlIGVudGVuZGVyLg0KKw0KKyAgICAgICAxIG8gbyA0DQorICAgICAgIDIgbyBvIDUNCisgICAgICAgMyBvIG8gNg0KKyAgICAgICA3IG8gbyA4DQorDQorRy4gQ8OzZGlnbyBOb3J0ZS1BbWVyaWNhbm8gZG8gUGFkcsOjbyBCcmFpbGxlDQorDQorICAgIE51bSBIZXggICAgIFBvbnRvcyAgICAgRGVzY3Jpw6fDo28NCisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsNCisgIHwgICAwICAwMCAgWzcgICA0ICA4XSAgTlVMICh2YXppbykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwNCisgIHwgICAxICAwMSAgWzcgIDEgICA4XSAgU09IIChpbmljaW8gZG8gY2FiZcOnYWxobykgICAgICAgICAgICAgICAgICB8DQorICB8ICAgMiAgMDIgIFs3IDIxICAgOF0gIFNUWCAoaW5pY2lvIGRvIHRleHRvKSAgICAgICAgICAgICAgICAgICAgICB8DQorICB8ICAgMyAgMDMgIFs3ICAxNCAgOF0gIEVUWCAoZmltIGRvIHRleHRvKSAgICAgICAgICAgICAgICAgICAgICAgICB8DQorICB8ICAgNCAgMDQgIFs3ICAxNDUgOF0gIEVPVCAoZmltIGRhIHRyYW5zbWlzc8OjbykgICAgICAgICAgICAgICAgICAgfA0KKyAgfCAgIDUgIDA1ICBbNyAgMSA1IDhdICBFTlEgKHBlc3F1aXNhKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfA0KKyAgfCAgIDYgIDA2ICBbNyAyMTQgIDhdICBBQ0sgKHJlY29uaGVjaW1lbnRvKSAgICAgICAgICAgICAgICAgICAgICAgfA0KKyAgfCAgIDcgIDA3ICBbNyAyMTQ1IDhdICBCRUwgKGNhbXBhaW5oYSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgfA0KKyAgfCAgIDggIDA4ICBbNyAyMSA1IDhdICBCUyAoYmFjayBzcGFjZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgfA0KKyAgfCAgIDkgIDA5ICBbNyAyIDQgIDhdICBIVCAodGFiIGhvcml6b250YWwpICAgICAgICAgICAgICAgICAgICAgICAgfA0KKyAgfCAgMTAgIDBBICBbNyAyIDQ1IDhdICBMRiAobGluaGEgZGUgYXZhbsOnbykgICAgICAgICAgICAgICAgICAgICAgIHwNCisgIHwgIDExICAwQiAgWzczIDEgICA4XSAgVlQgKHRhYiB2ZXJ0aWNhbCkgICAgICAgICAgICAgICAgICAgICAgICAgIHwNCisgIHwgIDEyICAwQyAgWzczMjEgICA4XSAgRkYgKGZvcm1hIGRlIGF2YW7Dp2FyKSAgICAgICAgICAgICAgICAgICAgICB8DQorICB8ICAxMyAgMEQgIFs3MyAxNCAgOF0gIENSIChyZXRvcm5vKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8DQorICB8ICAxNCAgMEUgIFs3MyAxNDUgOF0gIFNPIChzaGlmdCBvdXQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8DQorICB8ICAxNSAgMEYgIFs3MyAxIDUgOF0gIFNJIChzaGlmdCBpbikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8DQorICB8ICAxNiAgMTAgIFs3MzIxNCAgOF0gIERMRSAoZGF0YSBsaW5rIGVzY2FwZSkgICAgICAgICAgICAgICAgICAgICB8DQorICB8ICAxNyAgMTEgIFs3MzIxNDUgOF0gIERDMSAoZGlyZWN0IGNvbnRyb2wgMSkgICAgICAgICAgICAgICAgICAgICB8DQorICB8ICAxOCAgMTIgIFs3MzIxIDUgOF0gIERDMiAoZGlyZWN0IGNvbnRyb2wgMikgICAgICAgICAgICAgICAgICAgICB8DQorICB8ICAxOSAgMTMgIFs3MzIgNCAgOF0gIERDMyAoZGlyZWN0IGNvbnRyb2wgMykgICAgICAgICAgICAgICAgICAgICB8DQorICB8ICAyMCAgMTQgIFs3MzIgNDUgOF0gIERDNCAoZGlyZWN0IGNvbnRyb2wgNCkgICAgICAgICAgICAgICAgICAgICB8DQorICB8ICAyMSAgMTUgIFs3MyAxICA2OF0gIE5BSyAobsOjbyByZWNvbmhlY2ltZW50bykgICAgICAgICAgICAgICAgICAgfA0KKyAgfCAgMjIgIDE2ICBbNzMyMSAgNjhdICBTWU4gKHNpbmNyb25pemHDp8OjbykgICAgICAgICAgICAgICAgICAgICAgICB8DQorICB8ICAyMyAgMTcgIFs3IDIgNDU2OF0gIEVUQiAoZmltIGRvIGJsb2NvIGRlIHRleHRvKSAgICAgICAgICAgICAgICB8DQorICB8ICAyNCAgMTggIFs3MyAxNCA2OF0gIENBTiAoY2FuY2VsYSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8DQorICB8ICAyNSAgMTkgIFs3MyAxNDU2OF0gIEVNIChmaW0gZG8gbWVpbykgICAgICAgICAgICAgICAgICAgICAgICAgICB8DQorICB8ICAyNiAgMUEgIFs3MyAxIDU2OF0gIFNVQiAoc3Vic3RpdHV0bykgICAgICAgICAgICAgICAgICAgICAgICAgICB8DQorICB8ICAyNyAgMUIgIFs3IDIgNCA2OF0gIEVTQyAoZXNjYXBlKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8DQorICB8ICAyOCAgMUMgIFs3IDIxIDU2OF0gIEZTIChhcnF1aXZvIHNlcGFyYWRvcikgICAgICAgICAgICAgICAgICAgICB8DQorICB8ICAyOSAgMUQgIFs3IDIxNDU2OF0gIEdTIChncnVwbyBzZXBhcmFkb3IpICAgICAgICAgICAgICAgICAgICAgICB8DQorICB8ICAzMCAgMUUgIFs3ICAgNDUgOF0gIFJTIChncmF2YWRvciBzZXBhcmFkb3IpICAgICAgICAgICAgICAgICAgICB8DQorICB8ICAzMSAgMUYgIFs3ICAgNDU2OF0gIFVTICh1bmlkYWRlIHNlcGFyYWRvcikgICAgICAgICAgICAgICAgICAgICB8DQorICB8ICAzMiAgMjAgIFsgICAgICAgIF0gIGVzcGHDp28gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfA0KKyAgfCAgMzMgIDIxICBbIDMyIDQgNiBdICBwb250byBkZSBleGNsYW1hw6fDo28gICAgICAgICAgICAgICAgICAgICAgICB8DQorICB8ICAzNCAgMjIgIFsgICAgIDUgIF0gIG1hcmNhw6fDo28gZGUgdGV4dG8gICAgICAgICAgICAgICAgICAgICAgICAgIHwNCisgIHwgIDM1ICAyMyAgWyAzICA0NTYgXSAgc2ltYm9sbyBkbyBudW1lcm8gICAgICAgICAgICAgICAgICAgICAgICAgIHwNCisgIHwgIDM2ICAyNCAgWyAgMjE0IDYgXSAgc2ltYm9sbyBkZSBkb2xhciAgICAgICAgICAgICAgICAgICAgICAgICAgIHwNCisgIHwgIDM3ICAyNSAgWyAgIDE0IDYgXSAgc2ltYm9sbyBkZSBwb3JjZW50byAgICAgICAgICAgICAgICAgICAgICAgIHwNCisgIHwgIDM4ICAyNiAgWyAzMjE0IDYgXSAgYW1wZXJzYW5kICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwNCisgIHwgIDM5ICAyNyAgWyAzICAgICAgXSAgYWNlbnRvIGFndWRvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwNCisgIHwgIDQwICAyOCAgWyAzMjEgNTYgXSAgcGFyZW50ZXNlcyBlc3F1ZXJkbyAgICAgICAgICAgICAgICAgICAgICAgIHwNCisgIHwgICA0ICAyOTEgIFsgMzIgNDU2ICkgcGFyZW50ZXNlcyBkaXJlaXRvICAgICAgICAgICAgICAgICAgICAgICAgIHwNCisgIHwgIDQyICAyQSAgWyAgIDEgIDYgXSAgYXN0ZXJpc2NvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwNCisgIHwgIDQzICAyQiAgWyAzICA0IDYgXSAgc2luYWwgZGUgbWFpcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwNCisgIHwgIDQ0ICAyQyAgWyAgICAgIDYgXSAgdmlyZ3VsYSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwNCisgIHwgIDQ1ICAyRCAgWyAzICAgIDYgXSAgc2luYWwgZGUgbWVub3MgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwNCisgIHwgIDQ2ICAyRSAgWyAgICA0IDYgXSAgcG9udG8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwNCisgIHwgIDQ3ICAyRiAgWyAzICA0ICAgXSAgY29udHJhIGJhcnJhICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwNCisgIHwgIDQ4ICAzMCAgWyAzICAgNTYgXSAgemVybyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwNCisgIHwgIDQ5ICAzMSAgWyAgMiAgICAgXSAgdW0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwNCisgIHwgIDUwICAzMiAgWyAzMiAgICAgXSAgZG9pcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwNCisgIHwgIDUxICAzMyAgWyAgMiAgNSAgXSAgdHLDqnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8DQorICB8ICA1MiAgMzQgIFsgIDIgIDU2IF0gIHF1YXRybyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8DQorICB8ICA1MyAgMzUgIFsgIDIgICA2IF0gIGNpbmNvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8DQorICB8ICA1NCAgMzYgIFsgMzIgIDUgIF0gIHNlaXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8DQorICB8ICA1NSAgMzcgIFsgMzIgIDU2IF0gIHNldGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8DQorICB8ICA1NiAgMzggIFsgMzIgICA2IF0gIG9pdG8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8DQorICB8ICA1NyAgMzkgIFsgMyAgIDUgIF0gIG5vdmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8DQorICB8ICA1OCAgM0EgIFsgICAxIDU2IF0gIHBvbnRvIGUgdmlyZ3VsYSAgICAgICAgICAgICAgICAgICAgICAgICAgICB8DQorICB8ICA1OSAgM0IgIFsgICAgIDU2IF0gIGRvaXMgcG9udG9zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8DQorICB8ICA2MCAgM0MgIFsgIDIxICA2IF0gIGphY2Fyw6kgbWVub3MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfA0KKyAgfCAgNjEgIDNEICBbIDMyMTQ1NiBdICBpZ3VhbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfA0KKyAgfCAgNjIgIDNFICBbIDMgIDQ1ICBdICBqYWNhcsOpIG1haXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwNCisgIHwgIDYzICAzRiAgWyAgIDE0NTYgXSAgaW50ZXJyb2dhw6fDo28gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfA0KKyAgfCAgNjQgIDQwICBbNyAgIDQgICBdICBlIGNvbWVyY2lhbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfA0KKyAgfCAgNjUgIDQxICBbNyAgMSAgICBdICBtYWl1c2N1bG8gYSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfA0KKyAgfCAgNjYgIDQyICBbNyAyMSAgICBdICBtYWl1c2N1bG8gYiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfA0KKyAgfCAgNjcgIDQzICBbNyAgMTQgICBdICBtYWl1c2N1bG8gYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfA0KKyAgfCAgNjggIDQ0ICBbNyAgMTQ1ICBdICBtYWl1c2N1bG8gZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfA0KKyAgfCAgNjkgIDQ1ICBbNyAgMSA1ICBdICBtYWl1c2N1bG8gZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfA0KKyAgfCAgNzAgIDQ2ICBbNyAyMTQgICBdICBtYWl1c2N1bG8gZiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfA0KKyAgfCAgNzEgIDQ3ICBbNyAyMTQ1ICBdICBtYWl1c2N1bG8gZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfA0KKyAgfCAgNzIgIDQ4ICBbNyAyMSA1ICBdICBtYWl1c2N1bG8gaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfA0KKyAgfCAgNzMgIDQ5ICBbNyAyIDQgICBdICBtYWl1c2N1bG8gaSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfA0KKyAgfCAgNzQgIDRBICBbNyAyIDQ1ICBdICBtYWl1c2N1bG8gaiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfA0KKyAgfCAgNzUgIDRCICBbNzMgMSAgICBdICBtYWl1c2N1bG8gayAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfA0KKyAgfCAgNzYgIDRDICBbNzMyMSAgICBdICBtYWl1c2N1bG8gbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfA0KKyAgfCAgNzcgIDREICBbNzMgMTQgICBdICBtYWl1c2N1bG8gbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfA0KKyAgfCAgNzggIDRFICBbNzMgMTQ1ICBdICBtYWl1c2N1bG8gbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfA0KKyAgfCAgNzkgIDRGICBbNzMgMSA1ICBdICBtYWl1c2N1bG8gbyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfA0KKyAgfCAgODAgIDUwICBbNzMyMTQgICBdICBtYWl1c2N1bG8gcCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfA0KKyAgfCAgODEgIDUxICBbNzMyMTQ1ICBdICBtYWl1c2N1bG8gcSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfA0KKyAgfCAgODIgIDUyICBbNzMyMSA1ICBdICBtYWl1c2N1bG8gciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfA0KKyAgfCAgODMgIDUzICBbNzMyIDQgICBdICBtYWl1c2N1bG8gcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfA0KKyAgfCAgODQgIDU0ICBbNzMyIDQ1ICBdICBtYWl1c2N1bG8gdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfA0KKyAgfCAgODUgIDU1ICBbNzMgMSAgNiBdICBtYWl1c2N1bG8gdSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfA0KKyAgfCAgODYgIDU2ICBbNzMyMSAgNiBdICBtYWl1c2N1bG8gdiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfA0KKyAgfCAgODcgIDU3ICBbNyAyIDQ1NiBdICBtYWl1c2N1bG8gdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfA0KKyAgfCAgODggIDU4ICBbNzMgMTQgNiBdICBtYWl1c2N1bG8geCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfA0KKyAgfCAgODkgIDU5ICBbNzMgMTQ1NiBdICBtYWl1c2N1bG8geSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfA0KKyAgfCAgOTAgIDVBICBbNzMgMSA1NiBdICBtYWl1c2N1bG8geiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfA0KKyAgfCAgOTEgIDVCICBbNyAyIDQgNiBdICBjb2xjaGV0ZSBlc3F1ZXJkbyAgICAgICAgICAgICAgICAgICAgICAgICAgfA0KKyAgfCAgOTIgIDVDICBbNyAyMSA1NiBdICBiYXJyYSBpbnZlcnRpZGEgICAgICAgICAgICAgICAgICAgICAgICAgICAgfA0KKyAgfCAgOTMgIDVEICBbNyAyMTQ1NiBdICBjb2xjaGV0ZSBkaXJlaXRvICAgICAgICAgICAgICAgICAgICAgICAgICAgfA0KKyAgfCAgOTQgIDVFICBbNyAgIDQ1ICBdICBhY2VudG8gY2lyY3VuZmxleG8gICAgICAgICAgICAgICAgICAgICAgICAgfA0KKyAgfCAgOTUgIDVGICBbICAgIDQ1NiBdICBzb2JyZXRyYcOnbyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwNCisgIHwgIDk2ICA2MCAgWyAgICA0ICAgXSAgYWNlbnRvIGdyYXZlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwNCisgIHwgIDk3ICA2MSAgWyAgIDEgICAgXSAgbWludXNjdWxvIGEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwNCisgIHwgIDk4ICA2MiAgWyAgMjEgICAgXSAgbWludXNjdWxvIGIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwNCisgIHwgIDk5ICA2MyAgWyAgIDE0ICAgXSAgbWludXNjdWxvIGMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwNCisgIHwgMTAwICA2NCAgWyAgIDE0NSAgXSAgbWludXNjdWxvIGQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwNCisgIHwgMTAxICA2NSAgWyAgIDEgNSAgXSAgbWludXNjdWxvIGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwNCisgIHwgMTAyICA2NiAgWyAgMjE0ICAgXSAgbWludXNjdWxvIGYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwNCisgIHwgMTAzICA2NyAgWyAgMjE0NSAgXSAgbWludXNjdWxvIGcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwNCisgIHwgMTA0ICA2OCAgWyAgMjEgNSAgXSAgbWludXNjdWxvIGggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwNCisgIHwgMTA1ICA2OSAgWyAgMiA0ICAgXSAgbWludXNjdWxvIGkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwNCisgIHwgMTA2ICA2QSAgWyAgMiA0NSAgXSAgbWludXNjdWxvIGogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwNCisgIHwgMTA3ICA2QiAgWyAzIDEgICAgXSAgbWludXNjdWxvIGsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwNCisgIHwgMTA4ICA2QyAgWyAzMjEgICAgXSAgbWludXNjdWxvIGwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwNCisgIHwgMTA5ICA2RCAgWyAzIDE0ICAgXSAgbWludXNjdWxvIG0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwNCisgIHwgMTEwICA2RSAgWyAzIDE0NSAgXSAgbWludXNjdWxvIG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwNCisgIHwgMTExICA2RiAgWyAzIDEgNSAgXSAgbWludXNjdWxvIG8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwNCisgIHwgMTEyICA3MCAgWyAzMjE0ICAgXSAgbWludXNjdWxvIHAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwNCisgIHwgMTEzICA3MSAgWyAzMjE0NSAgXSAgbWludXNjdWxvIHEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwNCisgIHwgMTE0ICA3MiAgWyAzMjEgNSAgXSAgbWludXNjdWxvIHIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwNCisgIHwgMTE1ICA3MyAgWyAzMiA0ICAgXSAgbWludXNjdWxvIHMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwNCisgIHwgMTE2ICA3NCAgWyAzMiA0NSAgXSAgbWludXNjdWxvIHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwNCisgIHwgMTE3ICA3NSAgWyAzIDEgIDYgXSAgbWludXNjdWxvIHUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwNCisgIHwgMTE4ICA3NiAgWyAzMjEgIDYgXSAgbWludXNjdWxvIHYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwNCisgIHwgMTE5ICA3NyAgWyAgMiA0NTYgXSAgbWludXNjdWxvIHcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwNCisgIHwgMTIwICA3OCAgWyAzIDE0IDYgXSAgbWludXNjdWxvIHggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwNCisgIHwgMTIxICA3OSAgWyAzIDE0NTYgXSAgbWludXNjdWxvIHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwNCisgIHwgMTIyICA3QSAgWyAzIDEgNTYgXSAgbWludXNjdWxvIHogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwNCisgIHwgMTIzICA3QiAgWyAgMiA0IDYgXSAgY2hhdmUgZXNxdWVyZGEgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwNCisgIHwgMTI0ICA3QyAgWyAgMjEgNTYgXSAgYmFycmEgdmVydGljYWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwNCisgIHwgMTI1ICA3RCAgWyAgMjE0NTYgXSAgY2hhdmUgZGlyZWl0YSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwNCisgIHwgMTI2ICA3RSAgWyAgICA0NSAgXSAgYWNlbnRvIHRpbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwNCisgIHwgMTI3ICA3RiAgWzcgICA0NTYgXSAgREVMIChkZWxldGUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwNCisgIHwgMTI4ICA4MCAgWyAgICA0ICA4XSAgPGNvbnRyb2w+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwNCisgIHwgMTI5ICA4MSAgWyAgIDEgICA4XSAgPGNvbnRyb2w+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwNCisgIHwgMTMwICA4MiAgWyAgMjEgICA4XSAgQlBIIChicmVhayBwZXJtaXR0ZWQgaGVyZSkgICAgICAgICAgICAgICAgIHwNCisgIHwgMTMxICA4MyAgWyAgIDE0ICA4XSAgTkJIIChubyBicmVhayBoZXJlKSAgICAgICAgICAgICAgICAgICAgICAgIHwNCisgIHwgMTMyICA4NCAgWyAgIDE0NSA4XSAgPGNvbnRyb2w+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwNCisgIHwgMTMzICA4NSAgWyAgIDEgNSA4XSAgTkwgKHByb3hpbWEgbGluaGEpICAgICAgICAgICAgICAgICAgICAgICAgIHwNCisgIHwgMTM0ICA4NiAgWyAgMjE0ICA4XSAgU1NBIChjb21lw6dhIGEgc2VsZcOnw6NvIGRlIGFyZWEpICAgICAgICAgICAgIHwNCisgIHwgMTM1ICA4NyAgWyAgMjE0NSA4XSAgRVNBIChmaW0gZGUgc2VsZcOnw6NvIGRlIGFyZWEpICAgICAgICAgICAgICAgfA0KKyAgfCAxMzYgIDg4ICBbICAyMSA1IDhdICBDVFMgKHNldGEgdGFidWxhw6fDo28gZGUgY2FyYWN0ZXIpICAgICAgICAgICB8DQorICB8IDEzNyAgODkgIFsgIDIgNCAgOF0gIENUSiAoanVzdGlmaWNhIHRhYnVsYcOnw6NvIGRlIGNhcmFjdGVyKSAgICAgIHwNCisgIHwgMTM4ICA4QSAgWyAgMiA0NSA4XSAgTFRTIChzZXRhIGEgdGFidWxhw6fDo28gZGUgbGluaGEpICAgICAgICAgICAgfA0KKyAgfCAxMzkgIDhCICBbIDMgMSAgIDhdICBQTEQgKGxpbmhhIHBhcmNpYWwgcGFyYSBiYWl4bykgICAgICAgICAgICAgfA0KKyAgfCAxNDAgIDhDICBbIDMyMSAgIDhdICBQTFUgKGxpbmhhIHBhcmNpYWwgcGFyYSBjaW1hKSAgICAgICAgICAgICAgfA0KKyAgfCAxNDEgIDhEICBbIDMgMTQgIDhdICBSTEYgKHJldmVyc2UgbGluZSBmZWVkKSAgICAgICAgICAgICAgICAgICAgfA0KKyAgfCAxNDIgIDhFICBbIDMgMTQ1IDhdICBTUzIgKHNpbmdsZSBzaGlmdCB0d28pICAgICAgICAgICAgICAgICAgICAgfA0KKyAgfCAxNDMgIDhGICBbIDMgMSA1IDhdICBTUzMgKHNpbmdsZSBzaGlmdCB0aHJlZSkgICAgICAgICAgICAgICAgICAgfA0KKyAgfCAxNDQgIDkwICBbIDMyMTQgIDhdICBEQ1MgKGNvbnRyb2xlIGRlIGRpc3Bvc2l0aXZvIGRlIHN0cmluZykgICAgfA0KKyAgfCAxNDUgIDkxICBbIDMyMTQ1IDhdICBQVTEgKHVzbyBwcml2YWRvIHVtKSAgICAgICAgICAgICAgICAgICAgICAgfA0KKyAgfCAxNDYgIDkyICBbIDMyMSA1IDhdICBQVTIgKHVzbyBwcml2YWRvIGRvaXMpICAgICAgICAgICAgICAgICAgICAgfA0KKyAgfCAxNDcgIDkzICBbIDMyIDQgIDhdICBTVFMgKHNldGEgZXN0YWRvIGRlIHRyYW5zbWlzc8OjbykgICAgICAgICAgIHwNCisgIHwgMTQ4ICA5NCAgWyAzMiA0NSA4XSAgQ0MgKGNhbmNlbGEgY2FyYWN0ZXIpICAgICAgICAgICAgICAgICAgICAgIHwNCisgIHwgMTQ5ICA5NSAgWyAzIDEgIDY4XSAgTVcgKG1lc3NhZ2Ugd2FpdGluZykgICAgICAgICAgICAgICAgICAgICAgIHwNCisgIHwgMTUwICA5NiAgWyAzMjEgIDY4XSAgU0dBIChpbmljaW8gZGEgYXJlYSBwcm90ZWdpZGEpICAgICAgICAgICAgIHwNCisgIHwgMTUxICA5NyAgWyAgMiA0NTY4XSAgRUdBIChmaW0gZGEgYXJlYSBwcm90ZWdpZGEpICAgICAgICAgICAgICAgIHwNCisgIHwgMTUyICA5OCAgWyAzIDE0IDY4XSAgU1MgKGluaWNpbyBkYSBzdHJpbmcpICAgICAgICAgICAgICAgICAgICAgIHwNCisgIHwgMTUzICA5OSAgWyAzIDE0NTY4XSAgPGNvbnRyb2xlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwNCisgIHwgMTU0ICA5QSAgWyAzIDEgNTY4XSAgU0NJIChpbnRyb2R1w6fDo28gZG8gY2FyYWN0ZXIgdW5pY28pICAgICAgICAgfA0KKyAgfCAxNTUgIDlCICBbICAyIDQgNjhdICBDU0kgKGludHJvZHXDp8OjbyBkZSBjb250cm9sZSBkZSBzZXF1ZW5jaWEpICB8DQorICB8IDE1NiAgOUMgIFsgIDIxIDU2OF0gIFNUICh0ZXJtaW5hZG9yIGRlIHN0cmluZykgICAgICAgICAgICAgICAgICB8DQorICB8IDE1NyAgOUQgIFsgIDIxNDU2OF0gIE9TQyAoY29tYW5kbyBkZSBvcGVyYcOnw6NvIGRlIHNpc3RlbWEpICAgICAgIHwNCisgIHwgMTU4ICA5RSAgWyAgICA0NSA4XSAgUE0gKG1lbnNhZ2VtIHByaXZhZGEpICAgICAgICAgICAgICAgICAgICAgIHwNCisgIHwgMTU5ICA5RiAgWyAgICA0NTY4XSAgQVBDIChjb21hbmRvIGRlIHByb2dyYW1hIGRlIGFwbGljYcOnw6NvKSAgICAgfA0KKyAgfCAxNjAgIEEwICBbNyAgICAgIDhdICBzZW0gcXVlYnJhIGRlIGVzcGHDp28gICAgICAgICAgICAgICAgICAgICAgIHwNCisgIHwgMTYxICBBMSAgWzczMiA0IDYgXSAgcG9udG8gZGUgZXhjbGFtYcOnw6NvIGludmVydGlkbwkJICAgfA0KKyAgfCAxNjIgIEEyICBbNyAyMTQgNiBdICBzaW1ib2xvIGRvIGNlbnRhdm8gICAgICAgICAgICAgICAgICAgICAgICAgfA0KKyAgfCAxNjMgIEEzICBbNzMgIDQ1NiBdICBzaW1ib2xvIGRhIGxpYnJhICAgICAgICAgICAgICAgICAgICAgICAgICAgfA0KKyAgfCAxNjQgIEE0ICBbNyAgMTQgNiBdICBzw61tYm9sbyBkYSBtb2VkYSAgICAgICAgICAgICAgICAgICAgICAgICAgIHwNCisgIHwgMTY1ICBBNSAgWzczMjE0IDYgXSAgc2ltYm9sbyBkbyB5ZW4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwNCisgIHwgMTY2ICBBNiAgWzcgIDEgNTYgXSAgYnJva2VuIGJhciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwNCisgIHwgMTY3ICBBNyAgWzczICAgNSAgXSAgc2VjdGlvbiBzaWduICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwNCisgIHwgMTY4ICBBOCAgWzcgICAgNSAgXSAgdHJlbWEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwNCisgIHwgMTY5ICBBOSAgWzczMiAgNTYgXSAgc2ltYm9sbyBkZSBjb3B5cmlnaHQgICAgICAgICAgICAgICAgICAgICAgIHwNCisgIHwgMTcwICBBQSAgWyAgICAgICA4XSAgZmVtaW5pbmUgb3JkaW5hbCBpbmRpY2F0b3IgICAgICAgICAgICAgICAgIHwNCisgIHwgMTcxICBBQiAgWzcgMjEgIDYgXSAgbGVmdC1wb2ludGluZyBkb3VibGUgYW5nbGUgcXVvdGF0aW9uIG1hcmsgIHwNCisgIHwgMTcyICBBQyAgWzcgMiAgNTYgXSAgbm90IHNpZ24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwNCisgIHwgMTczICBBRCAgWzczICAgIDYgXSAgc29mdCBoeXBoZW4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwNCisgIHwgMTc0ICBBRSAgWzczMiAgIDYgXSAgcmVnaXN0ZXJlZCBzaWduICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwNCisgIHwgMTc1ICBBRiAgWzcgMiAgIDYgXSAgbWFjcm9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwNCisgIHwgMTc2ICBCMCAgWzczICAgNTYgXSAgZGVncmVlIHNpZ24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwNCisgIHwgMTc3ICBCMSAgWzczICA0IDYgXSAgcGx1cy1taW51cyBzaWduICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwNCisgIHwgMTc4ICBCMiAgWzczMiAgICAgXSAgc3VwZXJzY3JpcHQgdHdvICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwNCisgIHwgMTc5ICBCMyAgWzcgMiAgNSAgXSAgc3VwZXJzY3JpcHQgdGhyZWUgICAgICAgICAgICAgICAgICAgICAgICAgIHwNCisgIHwgMTgwICBCNCAgWzczICAgICAgXSAgYWN1dGUgYWNjZW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwNCisgIHwgMTgxICBCNSAgWzcgICAgNTYgXSAgbWljcm8gc2lnbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwNCisgIHwgMTgyICBCNiAgWzczMiAgNSAgXSAgcGlsY3JvdyBzaWduICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwNCisgIHwgMTgzICBCNyAgWzcgICA0IDYgXSAgbWlkZGxlIGRvdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwNCisgIHwgMTg0ICBCOCAgWzcgICAgIDYgXSAgY2VkaWxoYSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwNCisgIHwgMTg1ICBCOSAgWzcgMiAgICAgXSAgc3VwZXJzY3JpcHQgb25lICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwNCisgIHwgMTg2ICBCQSAgWzcgICAgICAgXSAgbWFzY3VsaW5lIG9yZGluYWwgaW5kaWNhdG9yICAgICAgICAgICAgICAgIHwNCisgIHwgMTg3ICBCQiAgWzczICA0NSAgXSAgcmlnaHQtcG9pbnRpbmcgZG91YmxlIGFuZ2xlIHF1b3RhdGlvbiBtYXJrIHwNCisgIHwgMTg4ICBCQyAgWzczMjEgNTYgXSAgdnVsZ2FyIGZyYWN0aW9uIG9uZSBxdWFydGVyICAgICAgICAgICAgICAgIHwNCisgIHwgMTg5ICBCRCAgWzczMjE0NTYgXSAgdnVsZ2FyIGZyYWN0aW9uIG9uZSBoYWxmICAgICAgICAgICAgICAgICAgIHwNCisgIHwgMTkwICBCRSAgWzczMiA0NTYgXSAgdnVsZ2FyIGZyYWN0aW9uIHRocmVlIHF1YXJ0ZXJzICAgICAgICAgICAgIHwNCisgIHwgMTkxICBCRiAgWzcgIDE0NTYgXSAgaW50ZXJyb2dhw6fDo28gaW52ZXJ0aWRhICAgICAgICAgICAgICAgICAgICAgfA0KKyAgfCAxOTIgIEMwICBbNzMyICA1IDhdICBjYXBpdGFsIGEgZ3JhdmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgfA0KKyAgfCAxOTMgIEMxICBbNyAgMSAgNjhdICBjYXBpdGFsIGEgYWN1dGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgfA0KKyAgfCAxOTQgIEMyICBbNyAyICAgIDhdICBjYXBpdGFsIGEgY2lyY3VtZmxleCAgICAgICAgICAgICAgICAgICAgICAgfA0KKyAgfCAxOTUgIEMzICBbNyAgICA1IDhdICBjYXBpdGFsIGEgdGlsZGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgfA0KKyAgfCAxOTYgIEM0ICBbNzMyMTQgNjhdICBjYXBpdGFsIGEgZGlhZXJlc2lzICAgICAgICAgICAgICAgICAgICAgICAgfA0KKyAgfCAxOTcgIEM1ICBbNzMgIDQ1IDhdICBjYXBpdGFsIGEgcmluZyBhYm92ZSAgICAgICAgICAgICAgICAgICAgICAgfA0KKyAgfCAxOTggIEM2ICBbNzMgICAgIDhdICBjYXBpdGFsIGFlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfA0KKyAgfCAxOTkgIEM3ICBbNzMgIDQgNjhdICBjYXBpdGFsIGMgY2VkaWxsYSAgICAgICAgICAgICAgICAgICAgICAgICAgfA0KKyAgfCAyMDAgIEM4ICBbNzMyICA1NjhdICBjYXBpdGFsIGUgZ3JhdmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgfA0KKyAgfCAyMDEgIEM5ICBbNyAyMSAgNjhdICBjYXBpdGFsIGUgYWN1dGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgfA0KKyAgfCAyMDIgIENBICBbNzMyICAgIDhdICBjYXBpdGFsIGUgY2lyY3VtZmxleCAgICAgICAgICAgICAgICAgICAgICAgfA0KKyAgfCAyMDMgIENCICBbNzMyMTQ1NjhdICBjYXBpdGFsIGUgZGlhZXJlc2lzICAgICAgICAgICAgICAgICAgICAgICAgfA0KKyAgfCAyMDQgIENDICBbNzMyICAgNjhdICBjYXBpdGFsIGkgZ3JhdmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgfA0KKyAgfCAyMDUgIENEICBbNyAgMTQgNjhdICBjYXBpdGFsIGkgYWN1dGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgfA0KKyAgfCAyMDYgIENFICBbNyAyICA1IDhdICBjYXBpdGFsIGkgY2lyY3VtZmxleCAgICAgICAgICAgICAgICAgICAgICAgfA0KKyAgfCAyMDcgIENGICBbNzMyMSA1NjhdICBjYXBpdGFsIGkgZGlhZXJlc2lzICAgICAgICAgICAgICAgICAgICAgICAgfA0KKyAgfCAyMDggIEQwICBbNyAgICAgNjhdICBjYXBpdGFsIGV0aCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfA0KKyAgfCAyMDkgIEQxICBbNyAgIDQgNjhdICBjYXBpdGFsIG4gdGlsZGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgfA0KKyAgfCAyMTAgIEQyICBbNzMgICA1IDhdICBjYXBpdGFsIG8gZ3JhdmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgfA0KKyAgfCAyMTEgIEQzICBbNyAgMTQ1NjhdICBjYXBpdGFsIG8gYWN1dGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgfA0KKyAgfCAyMTIgIEQ0ICBbNyAyICA1NjhdICBjYXBpdGFsIG8gY2lyY3VtZmxleCAgICAgICAgICAgICAgICAgICAgICAgfA0KKyAgfCAyMTMgIEQ1ICBbNyAgICA1NjhdICBjYXBpdGFsIG8gdGlsZGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgfA0KKyAgfCAyMTQgIEQ2ICBbNzMyIDQgNjhdICBjYXBpdGFsIG8gZGlhZXJlc2lzICAgICAgICAgICAgICAgICAgICAgICAgfA0KKyAgfCAyMTUgIEQ3ICBbNyAgMSAgNiBdICBzaW1ib2xvIGRlIG11bHRpcGxpY2HDp8OjbyAgICAgICAgICAgICAgICAgICB8DQorICB8IDIxNiAgRDggIFs3MyAgNCAgOF0gIGNhcGl0YWwgbyBzdHJva2UgICAgICAgICAgICAgICAgICAgICAgICAgICB8DQorICB8IDIxNyAgRDkgIFs3MyAgIDU2OF0gIGNhcGl0YWwgdSBncmF2ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICB8DQorICB8IDIxOCAgREEgIFs3ICAxIDU2OF0gIGNhcGl0YWwgdSBhY3V0ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICB8DQorICB8IDIxOSAgREIgIFs3IDIgICA2OF0gIGNhcGl0YWwgdSBjaXJjdW1mbGV4ICAgICAgICAgICAgICAgICAgICAgICB8DQorICB8IDIyMCAgREMgIFs3MzIgNDU2OF0gIGNhcGl0YWwgdSBkaWFlcmVzaXMgICAgICAgICAgICAgICAgICAgICAgICB8DQorICB8IDIyMSAgREQgIFs3IDIxNCA2OF0gIGNhcGl0YWwgeSBhY3V0ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICB8DQorICB8IDIyMiAgREUgIFs3MyAgICA2OF0gIGNhcGl0YWwgdGhvcm4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8DQorICB8IDIyMyAgREYgIFs3MyAgNDU2OF0gIHNtYWxsIHNoYXJwIHMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8DQorICB8IDIyNCAgRTAgIFsgMzIgIDUgOF0gIHNtYWxsIGEgZ3JhdmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8DQorICB8IDIyNSAgRTEgIFsgICAxICA2OF0gIHNtYWxsIGEgYWN1dGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8DQorICB8IDIyNiAgRTIgIFsgIDIgICAgOF0gIHNtYWxsIGEgY2lyY3VtZmxleCAgICAgICAgICAgICAgICAgICAgICAgICB8DQorICB8IDIyNyAgRTMgIFsgICAgIDUgOF0gIHNtYWxsIGEgdGlsZGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8DQorICB8IDIyOCAgRTQgIFsgMzIxNCA2OF0gIHNtYWxsIGEgZGlhZXJlc2lzICAgICAgICAgICAgICAgICAgICAgICAgICB8DQorICB8IDIyOSAgRTUgIFsgMyAgNDUgOF0gIHNtYWxsIGEgcmluZyBhYm92ZSAgICAgICAgICAgICAgICAgICAgICAgICB8DQorICB8IDIzMCAgRTYgIFsgMyAgICAgOF0gIHNtYWxsIGFlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8DQorICB8IDIzMSAgRTcgIFsgMyAgNCA2OF0gIHNtYWxsIGMgY2VkaWxsYSAgICAgICAgICAgICAgICAgICAgICAgICAgICB8DQorICB8IDIzMiAgRTggIFsgMzIgIDU2OF0gIHNtYWxsIGUgZ3JhdmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8DQorICB8IDIzMyAgRTkgIFsgIDIxICA2OF0gIHNtYWxsIGUgYWN1dGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8DQorICB8IDIzNCAgRUEgIFsgMzIgICAgOF0gIHNtYWxsIGUgY2lyY3VtZmxleCAgICAgICAgICAgICAgICAgICAgICAgICB8DQorICB8IDIzNSAgRUIgIFsgMzIxNDU2OF0gIHNtYWxsIGUgZGlhZXJlc2lzICAgICAgICAgICAgICAgICAgICAgICAgICB8DQorICB8IDIzNiAgRUMgIFsgMzIgICA2OF0gIHNtYWxsIGkgZ3JhdmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8DQorICB8IDIzNyAgRUQgIFsgICAxNCA2OF0gIHNtYWxsIGkgYWN1dGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8DQorICB8IDIzOCAgRUUgIFsgIDIgIDUgOF0gIHNtYWxsIGkgY2lyY3VtZmxleCAgICAgICAgICAgICAgICAgICAgICAgICB8DQorICB8IDIzOSAgRUYgIFsgMzIxIDU2OF0gIHNtYWxsIGkgZGlhZXJlc2lzICAgICAgICAgICAgICAgICAgICAgICAgICB8DQorICB8IDI0MCAgRjAgIFsgICAgICA2OF0gIHNtYWxsIGV0aCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8DQorICB8IDI0MSAgRjEgIFsgICAgNCA2OF0gIHNtYWxsIG4gdGlsZGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8DQorICB8IDI0MiAgRjIgIFsgMyAgIDUgOF0gIHNtYWxsIG8gZ3JhdmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8DQorICB8IDI0MyAgRjMgIFsgICAxNDU2OF0gIHNtYWxsIG8gYWN1dGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8DQorICB8IDI0NCAgRjQgIFsgIDIgIDU2OF0gIHNtYWxsIG8gY2lyY3VtZmxleCAgICAgICAgICAgICAgICAgICAgICAgICB8DQorICB8IDI0NSAgRjUgIFsgICAgIDU2OF0gIHNtYWxsIG8gdGlsZGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8DQorICB8IDI0NiAgRjYgIFsgMzIgNCA2OF0gIHNtYWxsIG8gZGlhZXJlc2lzICAgICAgICAgICAgICAgICAgICAgICAgICB8DQorICB8IDI0NyAgRjcgIFs3MyAgNCAgIF0gIHNpbWJvbG8gZGUgZGl2aXPDo28gICAgICAgICAgICAgICAgICAgICAgICAgfA0KKyAgfCAyNDggIEY4ICBbIDMgIDQgIDhdICBzbWFsbCBvIHN0cm9rZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfA0KKyAgfCAyNDkgIEY5ICBbIDMgICA1NjhdICBzbWFsbCB1IGdyYXZlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfA0KKyAgfCAyNTAgIEZBICBbICAgMSA1NjhdICBzbWFsbCB1IGFjdXRlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfA0KKyAgfCAyNTEgIEZCICBbICAyICAgNjhdICBzbWFsbCB1IGNpcmN1bWZsZXggICAgICAgICAgICAgICAgICAgICAgICAgfA0KKyAgfCAyNTIgIEZDICBbIDMyIDQ1NjhdICBzbWFsbCB1IGRpYWVyZXNpcyAgICAgICAgICAgICAgICAgICAgICAgICAgfA0KKyAgfCAyNTMgIEZEICBbICAyMTQgNjhdICBzbWFsbCB5IGFjdXRlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfA0KKyAgfCAyNTQgIEZFICBbIDMgICAgNjhdICBzbWFsbCB0aG9ybiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfA0KKyAgfCAyNTUgIEZGICBbIDMgIDQ1NjhdICBzbWFsbCB5IGRpYWVyZXNpcyAgICAgICAgICAgICAgICAgICAgICAgICAgfA0KKyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKw0KKw0KK0guIFRhYmVsYSBkZSBJbnN0cnVtZW50byBNSURJDQorDQorUGlhbm8NCiswDQorQWNvdXN0aWMgR3JhbmQgUGlhbm8NCisNCisxDQorQnJpZ2h0IEFjb3VzdGljIFBpYW5vDQorDQorMg0KK0VsZWN0cmljIEdyYW5kIFBpYW5vDQorDQorMw0KK0hvbmt5dG9uayBQaWFubw0KKw0KKzQNCitFbGVjdHJpYyBQaWFubyAxDQorDQorNQ0KK0VsZWN0cmljIFBpYW5vIDINCisNCis2DQorSGFycHNpY2hvcmQNCisNCis3DQorQ2xhdmkNCitDaHJvbWF0aWMgUGVyY3Vzc2lvbg0KKzgNCitDZWxlc3RhDQorDQorOQ0KK0dsb2NrZW5zcGllbA0KKw0KKzEwDQorTXVzaWMgQm94DQorDQorMTENCitWaWJyYXBob25lDQorDQorMTINCitNYXJpbWJhDQorDQorMTMNCitYeWxvcGhvbmUNCisNCisxNA0KK1R1YnVsYXIgQmVsbHMNCisNCisxNQ0KK0R1bGNpbWVyDQorT3JnYW4NCisxNg0KK0RyYXdiYXIgT3JnYW4NCisNCisxNw0KK1BlcmN1c3NpdmUgT3JnYW4NCisNCisxOA0KK1JvY2sgT3JnYW4NCisNCisxOQ0KK0NodXJjaCBPcmdhbg0KKw0KKzIwDQorUmVlZCBPcmdhbg0KKw0KKzIxDQorQWNjb3JkaW9uDQorDQorMjINCitIYXJtb25pY2ENCisNCisyMw0KK1RhbmdvIEFjY29yZGlvbg0KK0d1aXRhcg0KKzI0DQorTnlsb24gQWNvdXN0aWMgR3VpdGFyDQorDQorMjUNCitTdGVlbCBBY291c3RpYyBHdWl0YXINCisNCisyNg0KK0phenogRWxlY3RyaWMgR3VpdGFyDQorDQorMjcNCitDbGVhbiBFbGVjdHJpYyBHdWl0YXINCisNCisyOA0KK011dGVkIEVsZWN0cmljIEd1aXRhcg0KKw0KKzI5DQorT3ZlcmRyaXZlbiBHdWl0YXINCisNCiszMA0KK0Rpc3RvcnRpb24gR3VpdGFyDQorDQorMzENCitHdWl0YXIgSGFybW9uaWNzDQorQmFzcw0KKzMyDQorQWNvdXN0aWMgQmFzcw0KKw0KKzMzDQorRmluZ2VyIEVsZWN0cmljIEJhc3MNCisNCiszNA0KK1BpY2sgRWxlY3RyaWMgQmFzcw0KKw0KKzM1DQorRnJldGxlc3MgQmFzcw0KKw0KKzM2DQorU2xhcCBCYXNzIDENCisNCiszNw0KK1NsYXAgQmFzcyAyDQorDQorMzgNCitTeW50aCBCYXNzIDENCisNCiszOQ0KK1N5bnRoIEJhc3MgMg0KK1N0cmluZ3MNCis0MA0KK1Zpb2xpbg0KKw0KKzQxDQorVmlvbGENCisNCis0Mg0KK0NlbGxvDQorDQorNDMNCitDb250cmFiYXNzDQorDQorNDQNCitUcmVtb2xvIFN0cmluZ3MNCisNCis0NQ0KK1BpenppY2F0byBTdHJpbmdzDQorDQorNDYNCitPcmNoZXN0cmFsIEhhcnANCisNCis0Nw0KK1RpbXBhbmkNCitFbnNlbWJsZQ0KKzQ4DQorU3RyaW5nIEVuc2VtYmxlIDENCisNCis0OQ0KK1N0cmluZyBFbnNlbWJsZSAyDQorDQorNTANCitTeW50aCBTdHJpbmdzIDENCisNCis1MQ0KK1N5bnRoIFN0cmluZ3MgMg0KKw0KKzUyDQorQ2hvaXIgQWFocw0KKw0KKzUzDQorVm9pY2UgT29ocw0KKw0KKzU0DQorU3ludGggVm9pY2UNCisNCis1NQ0KK09yY2hlc3RyYSBIaXQNCitCcmFzcw0KKzU2DQorVHJ1bXBldA0KKw0KKzU3DQorVHJvbWJvbmUNCisNCis1OA0KK1R1YmENCisNCis1OQ0KK011dGVkIFRydW1wZXQNCisNCis2MA0KK0ZyZW5jaCBIb3JuDQorDQorNjENCitCcmFzcyBTZWN0aW9uDQorDQorNjINCitTeW50aCBCcmFzcyAxDQorDQorNjMNCitTeW50aCBCcmFzcyAyDQorUmVlZA0KKzY0DQorU29wcmFubyBTYXhvcGhvbmUNCisNCis2NQ0KK0FsdG8gU2F4b3Bob25lDQorDQorNjYNCitUZW5vciBTYXhvcGhvbmUNCisNCis2Nw0KK0Jhcml0b25lIFNheG9waG9uZQ0KKw0KKzY4DQorT2JvZQ0KKw0KKzY5DQorRW5nbGlzaCBIb3JuDQorDQorNzANCitCYXNzb29uDQorDQorNzENCitDbGFyaW5ldA0KK1BpcGUNCis3Mg0KK1BpY2NvbG8NCisNCis3Mw0KK0ZsdXRlDQorDQorNzQNCitSZWNvcmRlcg0KKw0KKzc1DQorUGFuIEZsdXRlDQorDQorNzYNCitCbG93biBCb3R0bGUNCisNCis3Nw0KK1NoYWt1aGFjaGkNCisNCis3OA0KK1doaXN0bGUNCisNCis3OQ0KK09jYXJpbmENCitTeW50aCBMZWFkDQorODANCitMZWFkIDEgKHNxdWFyZSkNCisNCis4MQ0KK0xlYWQgMiAoc2F3dG9vdGgpDQorDQorODINCitMZWFkIDMgKGNhbGxpb3BlKQ0KKw0KKzgzDQorTGVhZCA0IChjaGlmZikNCisNCis4NA0KK0xlYWQgNSAoY2hhcmFuZykNCisNCis4NQ0KK0xlYWQgNiAodm9pY2UpDQorDQorODYNCitMZWFkIDcgKGZpZnRocykNCisNCis4Nw0KK0xlYWQgOCAoYmFzcyArIGxlYWQpDQorU3ludGggUGFkDQorODgNCitQYWQgMSAobmV3IGFnZSkNCisNCis4OQ0KK1BhZCAyICh3YXJtKQ0KKw0KKzkwDQorUGFkIDMgKHBvbHlzeW50aCkNCisNCis5MQ0KK1BhZCA0IChjaG9pcikNCisNCis5Mg0KK1BhZCA1IChib3dlZCkNCisNCis5Mw0KK1BhZCA2IChtZXRhbGxpYykNCisNCis5NA0KK1BhZCA3IChoYWxvKQ0KKw0KKzk1DQorUGFkIDggKHN3ZWVwKQ0KK1N5bnRoIEZNDQorOTYNCitGWCAxIChyYWluKQ0KKw0KKzk3DQorRlggMiAoc291bmR0cmFjaykNCisNCis5OA0KK0ZYIDMgKGNyeXN0YWwpDQorDQorOTkNCitGWCA0IChhdG1vc3BoZXJlKQ0KKw0KKzEwMA0KK0ZYIDUgKGJyaWdodG5lc3MpDQorDQorMTAxDQorRlggNiAoZ29ibGlucykNCisNCisxMDINCitGWCA3IChlY2hvZXMpDQorDQorMTAzDQorRlggOCAoc2NpZW5jZS1maWN0aW9uKQ0KK0V0aG5pYw0KKzEwNA0KK1NpdGFyDQorDQorMTA1DQorQmFuam8NCisNCisxMDYNCitTaGFtaXNlbg0KKw0KKzEwNw0KK0tvdG8NCisNCisxMDgNCitLYWxpbWJhDQorDQorMTA5DQorQmFnIFBpcGUNCisNCisxMTANCitGaWRkbGUNCisNCisxMTENCitTaGFuYWkNCitQZXJjdXNzaXZlDQorMTEyDQorVGlua2xlIEJlbGwNCisNCisxMTMNCitBZ29nbw0KKw0KKzExNA0KK1N0ZWVsIERydW0NCisNCisxMTUNCitXb29kZW4gQmxvY2sNCisNCisxMTYNCitUYWlrbyBEcnVtDQorDQorMTE3DQorTWVsb2RpYyBUb20NCisNCisxMTgNCitTeW50aCBEcnVtDQorDQorMTE5DQorUmV2ZXJzZSBDeW1iYWwNCitTb3VuZCBFZmZlY3RzDQorMTIwDQorR3VpdGFyIEZyZXQgTm9pc2UNCisNCisxMjENCitCcmVhdGggTm9pc2UNCisNCisxMjINCitTZWFzaG9yZQ0KKw0KKzEyMw0KK0JpcmQgVHdlZXQNCisNCisxMjQNCitUZWxlcGhvbmUgUmluZw0KKw0KKzEyNQ0KK0hlbGljb3B0ZXINCisNCisxMjYNCitBcHBsYXVzZQ0KKw0KKzEyNw0KK0d1bnNob3QNCisNCisNCisNCisNCisNCisNCisNCisNCisNCmRpZmYgLS1naXQgYS9Eb2N1bWVudHMvTWFudWFsLUJybEFQSS9FbmdsaXNoL0JybEFQSS5zZ21sIGIvRG9jdW1lbnRzL01hbnVhbC1CcmxBUEkvRW5nbGlzaC9CcmxBUEkuc2dtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOGFmNTcyCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRzL01hbnVhbC1CcmxBUEkvRW5nbGlzaC9CcmxBUEkuc2dtbApAQCAtMCwwICsxLDE2MDggQEAKKzwhZG9jdHlwZSBsaW51eGRvYyBzeXN0ZW0+Cis8YXJ0aWNsZT4KKzx0aXRsZT5CcmxBUEkgUmVmZXJlbmNlIG1hbnVhbAorPGF1dGhvcj4KKzxuYW1lPlPpYmFzdGllbiBIaW5kZXJlciA8dHQ+PGh0bWx1cmwKK3VybD0ibWFpbHRvOlNlYmFzdGllbi5IaW5kZXJlckBlbnMtbHlvbi5vcmciCituYW1lPSImbHQ7U2ViYXN0aWVuLkhpbmRlcmVyQGVucy1seW9uLm9yZyZndDsiPjwvdHQ+PG5ld2xpbmU+PC9uYW1lPgorPGFuZD4KKzxuYW1lPlNhbXVlbCBUaGliYXVsdCA8dHQ+PGh0bWx1cmwgdXJsPSJtYWlsdG86U2FtdWVsLlRoaWJhdWx0QGVucy1seW9uLm9yZyIKK25hbWU9IiZsdDtTYW11ZWwuVGhpYmF1bHRAZW5zLWx5b24ub3JnJmd0OyI+PC90dD48bmV3bGluZT48L25hbWU+Cis8L2F1dGhvcj4KKzxkYXRlPlYxLjUsIE5vdmVtYmVyIDIwMTkKKzxhYnN0cmFjdD4KK1RoaXMgZG9jdW1lbnQgZGVzY3JpYmVzIDx0dD5CcmxBUEk8L3R0Pi4KKzwvYWJzdHJhY3Q+Cis8dG9jPgorCis8IS0tIHJhcHBlbCBkZXMgYXR0cmlidXRzOgorPGJmL2dyYXMvIDxlbS9taXMgZW4gdmFsZXVyLyA8c2Yvc2FucyBzZXJpZi8gPHNsL3NsYW50ZWQvIDx0dC9tYWNoaW5lIOAg6WNyaXJlCis8aXQvaXRhbGlxdWUKKy0tPgorCis8IS0tLS0+Cis8c2VjdD5JbnRyb2R1Y3Rpb248bGFiZWwgaWQ9InNlYy1pbnRybyI+Cis8IS0tLS0+Cis8IS0tIFNlYiAtLT4KKzwhLS0gYW4gaW50cm9kdWN0aW9uIGV4cGxhaW5pbmcgdmVyeSBicmllZmx5IHdoYXQgQnJsQVBJIGRvZXMsIHRoZQordm9jYWJ1bGFyeSBpdCB1c2VzLCBhbmQgaG93IHRvIHJlYWQgdGhpcyBkb2N1bWVudGF0aW9uIC0tPgorPHA+PGVtL0JybEFQSS8gaXMgYSBzZXJ2aWNlIHByb3ZpZGVkIGJ5IHRoZSA8ZW0vYnJsdHR5LyBkYWVtb24uCisKK0l0cyBwdXJwb3NlIGlzIHRvIGFsbG93IHByb2dyYW1tZXJzIHRvIHdyaXRlIGFwcGxpY2F0aW9ucyB0aGF0IHRha2UgYWR2YW50YWdlCitvZiBhIGJyYWlsbGUgdGVybWluYWwgaW4gb3JkZXIgdG8gZGVsaXZlciBhIGJsaW5kIHVzZXIgc3VpdGFibGUgaW5mb3JtYXRpb24KK2ZvciBoaXMvaGVyIHNwZWNpZmljIG5lZWRzLgorCitXaGlsZSBhbiBhcHBsaWNhdGlvbiBjb21tdW5pY2F0ZXMgd2l0aCB0aGUgYnJhaWxsZSB0ZXJtaW5hbCwgZXZlcnl0aGluZworPGVtL2JybHR0eS8gc2VuZHMgdG8gdGhlIGJyYWlsbGUgdGVybWluYWwgaW4gdGhlIGFwcGxpY2F0aW9uJ3MgY29uc29sZSBpcworaWdub3JlZCwgd2hlcmVhcyBlYWNoIHBpZWNlIG9mIGRhdGEgY29taW5nIGZyb20gdGhlIGJyYWlsbGUgdGVybWluYWwgaXMgc2VudCB0bwordGhlIGFwcGxpY2F0aW9uLCByYXRoZXIgdGhhbiB0byA8ZW0vYnJsdHR5Ly4KKworPHNlY3QxPkNvbmNlcHRzCisKKzxwPiBBbGwgdGhyb3VnaG91dCB0aGlzIG1hbnVhbCwgYSBmZXcgdGVybXMgd2lsbCBiZSB1c2VkIHdoaWNoIGFyZSBlaXRoZXIKK3NwZWNpZmljIHRvIGJyYWlsbGUgdGVybWluYWxzLCBvciBpbnRyb2R1Y2VkIGJlY2F1c2Ugb2YgPGVtL0JybEFQSS8uIFRoZXkgYXJlIGRlZmluZWQKK2JlbG93LiBUYWtpbmcgYSBmZXcgbWludXRlcyB0byBnbyB0aHJvdWdoIHRoaXMgZ2xvc3Nhcnkgd2lsbCBzYXZlIGEgbG90CitvZiB0aW1lIGFuZCBxdWVzdGlvbnMgbGF0ZXIuCisKKzxkZXNjcmlwPgorCis8dGFnL0F1dGhvcml6YXRpb24ga2V5LworQSBmaWxlIGNvbnRhaW5pbmcgYXJiaXRyYXJ5IGRhdGEsIHRoYXQgaGFzIHRvIGJlIHNlbnQgdG8gdGhlIHNlcnZlciBieSB0aGUKK2NsaWVudCwgdG8gcHJvdmUgaXQgaXMgYWxsb3dlZCB0byBlc3RhYmxpc2ggYSBjb25uZWN0aW9uIGFuZCB0aGVuIGNvbnRyb2wKK3RoZSBicmFpbGxlIHRlcm1pbmFsLgorCis8dGFnL0JyYWlsbGUgZGlzcGxheS8KK1RoZSBzbWFsbCBzY3JlZW4gb24gdGhlIGJyYWlsbGUgdGVybWluYWwgdGhhdCBpcyBhYmxlIHRvIGRpc3BsYXkgYnJhaWxsZSB0ZXh0LgorCis8dGFnL0JyYWlsbGUga2V5Ym9hcmQvCitUaGUga2V5Ym9hcmQgb2YgdGhlIGJyYWlsbGUgdGVybWluYWwuCisKKzx0YWcvQnJhaWxsZSB0ZXJtaW5hbC8KK0EgY29tcHV0ZXIgZGVzaWduZWQgdG8gZGlzcGxheSB0ZXh0IGluIGJyYWlsbGUuIEluIHRoaXMgY2FzZSwgdGhlIHRleHQgaXMKK3N1cHBvc2VkIHRvIGNvbWUgZnJvbSBhbm90aGVyIGNvbXB1dGVyIHJ1bm5pbmcgTGludXggb3IgYW55IG90aGVyIFVuaXggc3lzdGVtLgorCis8dGFnL0JybHR0eS8KK1RoZSBiYWNrZ3JvdW5kIHByb2Nlc3MgdGhhdCBnaXZlcyBhIGJsaW5kIHBlcnNvbiBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuCit0aGFua3MgdG8gYSBicmFpbGxlIHRlcm1pbmFsIG9yIHNwZWVjaCBzeW50aGV0aXplci4KKworPHRhZy9DbGllbnQvCitBbiBhcHBsaWNhdGlvbiBkZXNpZ25lZCB0byBoYW5kbGUgYSBicmFpbGxlIHRlcm1pbmFsIHRoYW5rcyB0byA8ZW0vQnJsQVBJLy4KKworPHRhZy9Db21tYW5kLworQSBjb2RlIHJldHVybmVkIGJ5IHRoZSBkcml2ZXIsIGluZGljYXRpbmcgYW4gYWN0aW9uIHRvIGRvLCBmb3IgaW5zdGFuY2UKKyJnbyB0byBwcmV2aW91cyBsaW5lIiwgImdvIHRvIG5leHQgbGluZSIsIGV0Yy4KKworPHRhZy9Ecml2ZXIvCitBIGxpYnJhcnkgdGhhdCBoYXMgZnVuY3Rpb25zIHRvIGNvbW11bmljYXRlIHdpdGggYSBicmFpbGxlIHRlcm1pbmFsLgorQmFzaWNhbGx5LCBhIGRyaXZlciBoYXMgZnVuY3Rpb25zIHRvIG9wZW4gY29tbXVuaWNhdGlvbiB3aXRoIHRoZQorYnJhaWxsZSB0ZXJtaW5hbCwgY2xvc2UgdGhlIGNvbW11bmljYXRpb24sIHdyaXRlIG9uIHRoZSBicmFpbGxlCitkaXNwbGF5LCBhbmQgcmVhZCBrZXlwcmVzc2VzIGZyb20gdGhlIGJyYWlsbGUga2V5Ym9hcmQsIHBsdXMgc29tZSBzcGVjaWFsCitmdW5jdGlvbnMgdGhhdCB3aWxsIGJlIGRlc2NyaWJlZCBpbiBkZXRhaWwgaW4gdGhpcyBtYW51YWwuCisKKzx0YWcvS2V5LworQSBjb2RlIHRoYXQgaXMgcmV0dXJuZWQgYnkgdGhlIGRyaXZlciB3aGVuIGEga2V5IGlzIHByZXNzZWQuIFRoaXMgaXMKK2RpZmZlcmVudCBmcm9tIGEgY29tbWFuZCwgYmVjYXVzZSB0aGUgY29tbWFuZCBjb25jZXB0IGlzIGRyaXZlci1pbmRlcGVuZGVudAorKGFsbCBkcml2ZXJzIHVzZSB0aGUgc2FtZSBjb21tYW5kIGNvZGVzIC0gdGhvc2UgZGVmaW5lZCBieSA8ZW0vYnJsdHR5LyksIHdoZXJlYXMKK2NvZGVzIHVzZWQgZm9yIHJldHVybmluZyBrZXlwcmVzc2VzIG1heSB2YXJ5IGJldHdlZW4gZHJpdmVycy4KKworPHRhZy9CcmxBUEkncyBMaWJyYXJ5LworVGhpcyBsaWJyYXJ5IGhlbHBzIGNsaWVudHMgdG8gY29ubmVjdCBhbmQgdXNlIDxlbS9CcmxBUEkvJ3MKK3NlcnZlciB0aGFua3MgdG8gYSBzZXJpZXMgb2YgPHR0L2JybGFwaV8vLXByZWZpeGVkIGZ1bmN0aW9ucy4KKworPHRhZy9QYWNrZXQvCitBIHNlcXVlbmNlIG9mIGJ5dGVzIG1ha2luZyB1cCB0aGUgYXRvbWljIHVuaXQgaW4gY29tbXVuaWNhdGlvbnMsIGVpdGhlciBiZXR3ZWVuCiticmFpbGxlIGRyaXZlcnMgYW5kIGJyYWlsbGUgdGVybWluYWxzIG9yIGJldHdlZW4gdGhlIHNlcnZlciBhbmQgY2xpZW50cy4KKworPHRhZy9SYXcgbW9kZS8KK01vZGUgaW4gd2hpY2ggdGhlIGNsaWVudCBhcHBsaWNhdGlvbiBleGNoYW5nZXMgcGFja2V0cyB3aXRoIHRoZSBkcml2ZXIuCitOb3JtYWwgb3BlcmF0aW9ucyBsaWtlIHNlbmRpbmcgdGV4dCBmb3IgZGlzcGxheSBvciByZWFkaW5nIGtleXByZXNzZXMgYXJlCitub3QgYXZhaWxhYmxlIGluIHRoaXMgbW9kZS4gSXQgbGV0cyBhcHBsaWNhdGlvbnMgdGFrZSBhZHZhbnRhZ2Ugb2YgYWR2YW5jZWQKK2Z1bmN0aW9uYWxpdGllcyBvZiB0aGUgZHJpdmVyJ3MgY29tbXVuaWNhdGlvbiBwcm90b2NvbC4KKworPHRhZy9TZXJ2ZXIvCitUaGUgcGFydCBvZiA8ZW0vYnJsdHR5LyB0aGF0IGNvbnRyb2xzIGluY29taW5nIGNvbm5lY3Rpb25zIGFuZCBjb21tdW5pY2F0aW9uCitiZXR3ZWVuIGNsaWVudHMgYW5kIGJyYWlsbGUgZHJpdmVycy4KKworPHRhZy9TdXNwZW5kIG1vZGUvCitNb2RlIGluIHdoaWNoIHRoZSBzZXJ2ZXIga2VlcHMgdGhlIGRldmljZSBkcml2ZXIgY2xvc2VkLCBzbyB0aGF0IHRoZSBjbGllbnQKK2NhbiBjb25uZWN0IGRpcmVjdGx5IHRvIHRoZSBkZXZpY2UuCisKKzx0YWcvVHR5LworU3lub255bSBmb3IgY29uc29sZSwgdGVybWluYWwsIC4uLiAgTGludXgnIGNvbnNvbGUgY29uc2lzdCBvZiBzZXZlcmFsIFZpcnR1YWwKK1R0eXMgKFZUcykuICBUaGUgc2NyZWVuIHByb2dyYW0ncyB3aW5kb3dzIGFsc28gYXJlIFR0eXMuICBYLXdpbmRvdyBzeXN0ZW0ncworeHRlcm1zIGVtdWxhdGUgVHR5cyBhcyB3ZWxsLgorCis8L2Rlc2NyaXA+CisKKzxzZWN0MT5Ib3cgdG8gcmVhZCB0aGlzIG1hbnVhbAorCis8cD5UaGlzIG1hbnVhbCBpcyBzcGxpdCBpbiBmaXZlIHBhcnRzLgorCis8ZGVzY3JpcD4KKworPHRhZz48cmVmIGlkPSJzZWMtZ2VuZXJhbCIgbmFtZT0iR2VuZXJhbCBkZXNjcmlwdGlvbiI+PC90YWc+CitEZXNjcmliZXMgbW9yZSBwcmVjaXNlbHkgd2hhdCA8ZW0vQnJsQVBJLworaXMgYW5kIGhvdyBpdCB3b3JrcyBpbiBjb2xsYWJvcmF0aW9uIHdpdGggPGVtL2JybHR0eS8ncyBjb3JlLCB0aGUgYnJhaWxsZSBkcml2ZXIKK2FuZCBjbGllbnRzLiBJbiB0aGlzIHBhcnQsIGEgImNvbm5lY3Rpb24tdXNlLWRpc2Nvbm5lY3Rpb24iIHNjZW5hcmlvCit3aWxsIGJlIGRlc2NyaWJlZCBzdGVwIGJ5IHN0ZXAsIGV4cGxhaW5pbmcgZm9yIGVhY2ggc3RlcCB3aGF0IDxlbS9CcmxBUEkvIGRvZXMgaW4KK3JlYWN0aW9uIHRvIGNsaWVudCBpbnN0cnVjdGlvbnMuIFRoZXNlIGV4cGxhbmF0aW9ucyB3aWxsIHRha2UgcGxhY2UgYXQgYQordXNlciBsZXZlbC4KKworPHRhZz48cmVmIGlkPSJzZWMtY29uY3VycmVuY3kiIG5hbWU9IkNvbmN1cnJlbmN5IG1hbmFnZW1lbnQiPjwvdGFnPgorVGhpcyBwYXJ0IGV4cGxhaW5zIGhvdyBjb25jdXJyZW5jeSBiZXR3ZWVuIDxlbS9CcmxBUEkvIGNsaWVudHMgaXMgaGFuZGxlZAordGhhbmtzIHRvIGZvY3VzIHRlbGxlcnMuCisKKzx0YWc+PHJlZiBpZD0ic2VjLWluc3RhbGwiIG5hbWU9Ikluc3RhbGxhdGlvbiBhbmQgY29uZmlndXJhdGlvbiI+PC90YWc+CitUaGlzIHBhcnQgZXhwbGFpbnMgaW4gZGV0YWlsIGhvdyB0byBpbnN0YWxsIGFuZCBjb25maWd1cmUgdGhlIEFQSS4gRm9yCitpbnN0cnVjdGlvbnMgb24gaG93IHRvIGluc3RhbGwgYW5kIGNvbmZpZ3VyZSA8ZW0vYnJsdHR5LywgcGxlYXNlIHJlcG9ydCB0bwordGhlIDxlbS9icmx0dHkvIGRvY3VtZW50YXRpb24uCisKKzx0YWc+PHJlZiBpZD0ic2VjLWxpYnJhcnkiIG5hbWU9IkxpYnJhcnkgZGVzY3JpcHRpb24iPjwvdGFnPgorVGhpcyBwYXJ0IGRlc2NyaWJlcyBob3cgY2xpZW50IGFwcGxpY2F0aW9ucworY2FuIGNvbW11bmljYXRlIHdpdGggdGhlIHNlcnZlciB1c2luZyB0aGUgPGVtL0JybEFQSS8gbGlicmFyeSB0aGF0Citjb21lcyB3aXRoIDxlbS9icmx0dHkvLiBFYWNoIGZ1bmN0aW9uIHdpbGwgYmUgYnJpZWZseSBkZXNjcmliZWQsCitjbGFzc2lmaWVkIGJ5IGNhdGVnb3JpZXMuIE1vcmUgZXhoYXVzdGl2ZSBkZXNjcmlwdGlvbnMgb2YgZXZlcnkKK2Z1bmN0aW9uIGFyZSBhdmFpbGFibGUgaW4gdGhlIGNvcnJlc3BvbmRpbmcgb25saW5lIG1hbnVhbCBwYWdlcy4KKworPHRhZz48cmVmIGlkPSJzZWMtZHJpdmVycyIgbmFtZT0iV3JpdGluZyBicmFpbGxlIGRyaXZlcnMiPjwvdGFnPgorVGhpcyBwYXJ0IGRlc2NyaWJlcyBob3cgdGhlIGJyYWlsbGUgZHJpdmVycyBpbmNsdWRlZCBpbiA8ZW0vYnJsdHR5LyBzaG91bGQgYmUKK3dyaXR0ZW4gaW4gb3JkZXIgdG8gdGFrZSBhZHZhbnRhZ2Ugb2YgPGVtL0JybEFQSS8ncyBzZXJ2aWNlcy4KKworPHRhZz48cmVmIGlkPSJzZWMtcHJvdG9jb2wiIG5hbWU9IlByb3RvY29sIHJlZmVyZW5jZSI+PC90YWc+CitUaGlzIHBhcnQgZGVzY3JpYmVzIGluIGRldGFpbCB0aGUgY29tbXVuaWNhdGlvbgorcHJvdG9jb2wgdGhhdCBpcyB1c2VkIHRvIGNvbW11bmljYXRlIGJldHdlZW4gc2VydmVyIGFuZCBjbGllbnRzLgorCis8L2Rlc2NyaXA+CisKK1doYXQgc2hvdWxkIGJlIHJlYWQgcHJvYmFibHkgZGVwZW5kcyBvbiB3aGF0IHNob3VsZCBiZSBkb25lIGJ5IGFwcGxpY2F0aW9ucyB3aXRoCis8ZW0vQnJsQVBJLy4KKworUmVhZGluZyBjaGFwdGVycyA8cmVmIGlkPSJzZWMtZ2VuZXJhbCIgbmFtZT0iR2VuZXJhbCBkZXNjcmlwdGlvbiI+LCA8cmVmCitpZD0ic2VjLWNvbmN1cnJlbmN5IiBuYW1lPSJDb25jdXJyZW5jeSBtYW5hZ2VtZW50Ij4gYW5kIDxyZWYgaWQ9InNlYy1pbnN0YWxsIgorbmFtZT0iSW5zdGFsbGF0aW9uIGFuZCBjb25maWd1cmF0aW9uIj4gaXMgcmVjb21tZW5kZWQsIHNpbmNlIHRoZXkgcHJvdmlkZQordXNlZnVsIGluZm9ybWF0aW9uIGFuZCAoaG9wZWZ1bGx5KSBsZWFkIHRvIGEgZ29vZCB1bmRlcnN0YW5kaW5nIG9mIDxlbS9CcmxBUEkvLAorZm9yIGFuIGVmZmljaWVudCB1c2UuCisKK0NoYXB0ZXIgPHJlZiBpZD0ic2VjLWxpYnJhcnkiIE5hbWU9IkxpYnJhcnkgZGVzY3JpcHRpb24iPiBjb25jZXJucyB3cml0aW5nCithcHBsaWNhdGlvbnMgdGhhdCB0YWtlIGFkdmFudGFnZSBvZiBicmFpbGxlIHRlcm1pbmFscyBzbyBhcyB0byBicmluZyBzcGVjaWZpYworKGFuZCBtb3JlIHVzZWZ1bCkgaW5mb3JtYXRpb24gdG8gYmxpbmQgcGVvcGxlLgorCitDaGFwdGVyIDxyZWYgaWQ9InNlYy1kcml2ZXJzIiBOYW1lPSJEcml2ZXJzIj4gaXMgZm9yIGJyYWlsbGUgZHJpdmVyIGltcGxlbWVudGF0aW9uOiBlaXRoZXIgYWRkaW5nIGEgYnJhaWxsZSBkcml2ZXIKK3RvIDxlbS9icmx0dHkvIG9yIG1vZGlmeWluZyBhbiBleGlzdGluZyBvbmUgc28gdGhhdCBpdCBjYW4gYmVuZWZpdCBmcm9tCis8ZW0vQnJsQVBJLydzIGZlYXR1cmVzLCB0aGlzIGNoYXB0ZXIgd2lsbCBiZSBvZiBpbnRlcmVzdCwgc2luY2UgaXQgZGVzY3JpYmVzCitleGFjdGx5IHdoYXQgaXMgbmVlZGVkIHRvIHdyaXRlIGEgZHJpdmVyIGZvciA8ZW0vYnJsdHR5LzogdGhlIGNvcmUKK29mIGRyaXZlcnMgaW50ZXJmYWNlIGZvciBpbnN0YW5jZS4KKworRmluYWxseSwgY2hhcHRlciA8cmVmIGlkPSJzZWMtcHJvdG9jb2wiIE5hbWU9IlByb3RvY29sIHJlZmVyZW5jZSI+IGlzIGZvciA8ZW0vbm90IHVzaW5nLyB0aGUgbGlicmFyeSwgYnV0IHVzaW5nIHRoZSA8ZW0vQnJsQVBJLworc2VydmVyIGRpcmVjdGx5LCB3aGVuIHRoZSBsaWJyYXJ5IG1pZ2h0IG5vdCBiZSBzdWZmaWNpZW50OiBpdCBkZXNjcmliZXMgdGhlCit1bmRlcmx5aW5nIHByb3RvY29sIHRoYXQgd2lsbCBoYXZlIHRvIGJlIHVzZWQgdG8gZG8gc28uCisKKzwhLS0tLT4KKzxzZWN0PkdlbmVyYWwgZGVzY3JpcHRpb24gb2YgPGVtL0JybEFQSS88bGFiZWwgaWQ9InNlYy1nZW5lcmFsIj4KKzwhLS0tLT4KKzwhLS0gYSBnZW5lcmFsIGRvY3VtZW50YXRpb24sIHdoaWNoIGV4cGxhaW5zIHRoZSBpc3N1ZSBhbmQgdGhlIGRlc2lnbiB3ZQorY2hvc2UgdG8gaGFuZGxlIGl0IC0tPgorCis8cD5IZXJlIGlzIGV4cGxhaW5lZCB3aGF0IDxlbS9CcmxBUEkvIGlzLCBhbmQgd2hhdCBpdCBwcmVjaXNlbHkgZG9lcy4KK1RoZXNlIGV4cGxhbmF0aW9ucyBzaG91bGQgYmUgc2ltcGxlIGVub3VnaCB0byBiZSBhY2Nlc3NpYmxlIHRvIGV2ZXJ5IHVzZXIuCitGb3IgYSBtb3JlIHRlY2huaWNhbCByZXZpZXcgb2YgPGVtL0JybEFQSS8ncyBmdW5jdGlvbmFsaXRpZXMsIHBsZWFzZSBzZWUgY2hhcHRlcgorPHJlZiBpZD0ic2VjLWxpYnJhcnkiIG5hbWU9IkxpYmFyeSBkZXNjcmlwdGlvbiI+LgorCis8c2VjdDE+SGlzdG9yaWNhbCBub3Rlcy4KKworPHA+T3JpZ2luYWxseSwgPGVtL2JybHR0eS8gd2FzIGRlc2lnbmVkIHRvIGdpdmUgYWNjZXNzIHRvIHRoZSBMaW51eAorY29uc29sZSB0byB2aXN1YWxseSBpbXBhaXJlZCBwZW9wbGUsIHRocm91Z2ggYSBicmFpbGxlIHRlcm1pbmFsCitvciBhIHNwZWVjaCBzeW50aGV0aXplci4gQXQgdGhhdCB0aW1lLCBhcHBsaWNhdGlvbnMgcnVubmluZyBpbiB0aGUKK2NvbnNvbGUgd2VyZSBub3QgdGFraW5nIGNhcmUgb2YgdGhlIHByZXNlbmNlIG9mIGEgYnJhaWxsZQordGVybWluYWwgKG1vc3QgYXBwbGljYXRpb25zIGRpZG4ndCBldmVuIGtub3cgd2hhdCBhIGJyYWlsbGUKK3Rlcm1pbmFsIHdhcykuCisKK1RoaXMgc2l0dWF0aW9uIHdoZXJlIGFwcGxpY2F0aW9ucyBhcmUgbm90IGF3YXJlIG9mIHRoZSBwcmVzZW5jZSBvZiBhCitzcGVjaWFsIGRldmljZSBpcyBlbGVnYW50IG9mIGNvdXJzZSwgc2luY2UgaXQgbGV0cyB1c2UgYW4KK3VubGltaXRlZCBudW1iZXIgb2YgYXBwbGljYXRpb25zIHdoaWNoIGRvbid0IG5lZWQgdG8gYmUgc3BlY2lhbGx5CitkZXNpZ25lZCBmb3IgdmlzdWFsbHkgaW1wYWlyZWQgcGVvcGxlLgorCitIb3dldmVyLCBpdCBhcHBlYXJlZCB0aGF0IGFwcGxpY2F0aW9ucyBzcGVjaWFsbHkgZGVzaWduZWQgdG8gdGFrZQorYWR2YW50YWdlIG9mIGEgYnJhaWxsZSB0ZXJtaW5hbCBjb3VsZCBiZSB3YW50ZWQsIHRvCitwcm92aWRlIHRoZSBzdWl0YWJsZSBpbmZvcm1hdGlvbiB0byBibGluZCB1c2VycywgZm9yIGluc3RhbmNlLgorVGhlIGlkZWEgb2YgPGVtL0JybEFQSS8gaXMgdG8gcHJvcG9zZSBhbiBlZmZpY2llbnQgY29tbXVuaWNhdGlvbgorbWVjaGFuaXNtLCB0byBjb250cm9sIHRoZSBicmFpbGxlIGRpc3BsYXksIHJlYWQga2V5cyBmcm9tIHRoZQorYnJhaWxsZSBrZXlib2FyZCwgb3IgdG8gZXhjaGFuZ2UgZGF0YSB3aXRoIHRoZSBicmFpbGxlIHRlcm1pbmFsIGF0CithIGxvd2VyIGxldmVsIChlLmcuIHRvIHdyaXRlIGZpbGUgdHJhbnNmZXIgcHJvdG9jb2xzIGJldHdlZW4KK2JyYWlsbGUgdGVybWluYWxzIGFuZCBMaW51eCBzeXN0ZW1zKS4KKworPHNlY3QxPldoeSA8ZW0vQnJsQVBJLyBpcyBwYXJ0IG9mIDxlbS9icmx0dHkvLgorCis8cD5JbnN0ZWFkIG9mIHJld3JpdGluZyBhIHdob2xlIGNvbW11bmljYXRpb24gcHJvZ3JhbSBmcm9tCitzY3JhdGNoLCB3ZSBjaG9zZSB0byBhZGQgY29tbXVuaWNhdGlvbgorbWVjaGFuaXNtcyB0byA8ZW0vYnJsdHR5Ly4gVGhpcyBjaG9pY2UgaGFzIHR3byBtYWluIGp1c3RpZmljYXRpb25zLgorCitPbiB0aGUgb25lIGhhbmQsIGludGVncmF0aW9uIHRvIDxlbS9icmx0dHkvIGFsbG93cyB1cyB0byB1c2UgdGhlCitpbmNyZWFzaW5nIG51bWJlciBvZiBkcml2ZXJzIHdyaXR0ZW4gZm9yIDxlbS9icmx0dHkvLCB0aHVzIGhhbmRsaW5nCithIGxhcmdlIG51bWJlciBvZiBicmFpbGxlIHRlcm1pbmFscyB3aXRob3V0IGhhdmluZyB0byByZXdyaXRlIGFueQorcGllY2Ugb2YgZXhpc3RpbmcgY29kZS4KKworT24gdGhlIG90aGVyIGhhbmQsIGlmIGFuIGFwcGxpY2F0aW9uIGNob29zZXMgdG8gc2VuZCBpdHMgb3duCitpbmZvcm1hdGlvbiB0byB0aGUgYnJhaWxsZSBkaXNwbGF5LCBhbmQgdG8gcHJvY2VzcyBicmFpbGxlIGtleXMsCis8ZW0vYnJsdHR5LyBoYXMgdG8gYmUgd2FybmVkLCBzbyB0aGF0IGl0IHdvbid0IHRyeSB0byBjb21tdW5pY2F0ZQord2l0aCB0aGUgYnJhaWxsZSB0ZXJtaW5hbCB3aGlsZSB0aGUgYXBwbGljYXRpb24gYWxyZWFkeSBkb2VzLgorVG8gbWFrZSB0aGlzIHN5bmNocm9uemF0aW9uIGJldHdlZW4gPGVtL2JybHR0eS8KK2FuZCBjbGllbnQgYXBwbGljYXRpb25zIHBvc3NpYmxlLCBpdCBzZWVtZWQgZWFzaWVyIHRvIGFkZCB0aGUKK2NvbW11bmljYXRpb24gbWVjaGFuaXNtcyB0byA8ZW0vYnJsdHR5LydzIGNvcmUsIGluc3RlYWQgb2Ygd3JpdGluZyBhbgorZXh0ZXJuYWwgcHJvZ3JhbSBwcm92aWRpbmcgdGhlbS4KKworPHNlY3QxPkhvdyBpdCB3b3Jrcy4KKworPHA+V2UgYXJlIG5vdyBnb2luZyB0byBkZXNjcmliZSB0aGUgc3RlcHMgYW4gYXBwbGljYXRpb24gc2hvdWxkCitnbyB0aHJvdWdoIHRvIGdldCBjb250cm9sIG9mIHRoZSBicmFpbGxlIHRlcm1pbmFsLCBhbmQgd2hhdAoraGFwcGVucyBvbiA8ZW0vYnJsdHR5LydzIHNpZGUgYXQgZWFjaCBzdGVwLiBUaGlzIHN0ZXAtYnktc3RlcAorZGVzY3JpcHRpb24gd2lsbCBsZXQgdXMgaW50cm9kdWNlIG1vcmUgcHJlY2lzZWx5IHNvbWUKK2NvbmNlcHRzIHRoYXQgYXJlIHVzZWZ1bCBmb3IgZXZlcnkgPGVtL0JybEFQSS8gdXNlci4KKworPHNlY3QyPkNvbm5lY3Rpb24uCisKKzxwPlRoZSBmaXJzdCB0aGluZyBhbnkgY2xpZW50IGFwcGxpY2F0aW9uIGhhcyB0byBkbyBpcyB0bworY29ubmVjdCAoaW4gdGhlIFVuaXggc2Vuc2Ugb2YgdGhlIHdvcmQpIHRvIDxlbS9CcmxBUEkvIHdoaWNoIGlzCithbiBtZXJlIGFwcGxpY2F0aW9uIHNlcnZlci4gSWYgdGhpcyBpcyBub3QKK2NsZWFyLCB0aGUgb25seSB0aGluZyB0byBiZSByZW1lbWJlcmVkIGlzIHRoYXQgdGhpcworc3RlcCBhbGxvd3MgdGhlIGNsaWVudCBhcHBsaWNhdGlvbiB0byBsZXQgdGhlIHNlcnZlciBrbm93IGFib3V0IGl0cworcHJlc2VuY2UuIEF0IHRoaXMgc3RhZ2UsIG5vdGhpbmcgc3BlY2lhbCBpcyBkb25lIG9uIDxlbS9icmx0dHkvJ3MKK3NpZGUuCisKKzxzZWN0Mj5BdXRob3JpemF0aW9uLgorCis8cD5TaW5jZSBVbml4IGlzIGRlc2lnbmVkIHRvIGFsbG93IG1hbnkgdXNlcnMgdG8gd29yayBvbiB0aGUKK3NhbWUgbWFjaGluZSwgaXQncyBxdWl0ZSBwb3NzaWJsZSB0aGF0IHRoZXJlIGFyZSBtb3JlIHRoYW4gb25lCit1c2VyIGFjY291bnRzIG9uIHRoZSBzeXN0ZW0uIE1vc3QgcHJvYmFibHksIG9uZSBkb2Vzbid0IHdhbnQKK2FueSB1c2VyIHdpdGggYW4gYWNjb3VudCBvbiB0aGUgbWFjaGluZSB0byBiZSBhYmxlIHRvIGNvbW11bmljYXRlCit3aXRoIHRoZSBicmFpbGxlIHRlcm1pbmFsIChqdXN0IGltYWdpbmUgd2hhdCB3b3VsZCBoYXBwZW4gaWYsCit3aGlsZSBzb21lYm9keSB3YXMgd29ya2luZyB3aXRoIHRoZSBicmFpbGxlIHRlcm1pbmFsLCBhbm90aGVyIHVzZXIKK2Nvbm5lY3RlZCB0byB0aGUgc3lzdGVtIGJlZ2FuIHRvIGNvbW11bmljYXRlIHdpdGggaXQsCitwcmV2ZW50aW5nIHRoZSBmaXJzdCBvbmUgZnJvbSBkb2luZyBoaXMgam9iLi4uKS4gVGhhdCdzIHdoeSA8ZW0vQnJsQVBJLyBoYXMgdG8KK3Byb3ZpZGUgYSB3YXkgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgYSB1c2VyIHdobyBlc3RhYmxpc2hlZCBhCitjb25uZWN0aW9uIGlzIHJlYWxseSBhbGxvd2VkIHRvIGNvbW11bmljYXRlIHdpdGggdGhlIGJyYWlsbGUKK3Rlcm1pbmFsLiBUbyBhY2hpZXZlIHRoaXMsIDxlbS9CcmxBUEkvIHJlcXVpcmVzIHRoYXQgZWFjaAorYXBwbGljYXRpb24gdGhhdCB3YW50cyB0byBjb250cm9sIGEgYnJhaWxsZSB0ZXJtaW5hbCBzZW5kcyBhbgorYXV0aG9yaXphdGlvbiBrZXkgYmVmb3JlIGRvaW5nIGFueXRoaW5nIGVsc2UuIFRoZSBjb250cm9sIG9mCit0aGUgYnJhaWxsZSB0ZXJtaW5hbCB3aWxsIG9ubHkgYmUgcG9zc2libGUgZm9yIHRoZSBjbGllbnQgb25jZQoraXQgaGFzIHNlbnQgdGhlIHByb3BlciBhdXRob3JpemF0aW9uIGtleS4gV2hhdCBpcyBjYWxsZWQKK2F1dGhvcml6YXRpb24ga2V5IGlzIGluIGZhY3QgYSBVbml4IGZpbGUgY29udGFpbmluZyBkYXRhIChpdAorbXVzdCBiZSBub24tZW1wdHkpIG9uIHlvdXIgc3lzdGVtLiBBbGwgdGhlIHRoaW5ncyB5b3UgaGF2ZSB0byBkbyBpcyB0byBnaXZlCityZWFkIHBlcm1pc3Npb25zIG9uIHRoaXMgZmlsZSB0byB1c2VycyB0aGF0IGFyZSBhbGxvd2VkIHRvCitjb21tdW5pY2F0ZSB3aXRoIHRoZSBicmFpbGxlIHRlcm1pbmFsLCBhbmQgb25seSB0byB0aGVtLiBUaGlzCit3YXksIG9ubHkgYXV0aG9yaXplZCB1c2VycyB3aWxsIGhhdmUgYWNjZXNzIHRvIHRoZQorYXV0aG9yaXphdGlvbiBrZXkgYW5kIHRoZW4gYmUgYWJsZSB0byBzZW5kIGl0IHRvIDxlbS9CcmxBUEkvLgorVG8gc2VlIGhvdyB0byBkbyB0aGF0LCBwbGVhc2Ugc2VlIGNoYXB0ZXIgPHJlZiBpZD0ic2VjLWluc3RhbGwiIG5hbWU9Ikluc3RhbGxhdGlvbiBhbmQgY29uZmlndXJhdGlvbiI+LgorCitBdCB0aGUgZW5kIG9mIHRoaXMgc3RlcCwgdGhlIHVzZXIgaXMgYXV0aG9yaXplZCB0byB0YWtlCitjb250cm9sIG9mIHRoZSBicmFpbGxlIHRlcm1pbmFsLiBPbiA8ZW0vYnJsdHR5LydzIHNpZGUsIHNvbWUgZGF0YQorc3RydWN0dXJlcyBhcmUgYWxsb2NhdGVkIHRvIHN0b3JlIGluZm9ybWF0aW9uIG9uIHRoZSBjbGllbnQsCitidXQgdGhpcyBoYXMgbm8gdXNlci1sZXZlbCBzaWRlLWVmZmVjdC4KKworPHNlY3QyPlJlYWwgdXNlIG9mIHRoZSBicmFpbGxlIHRlcm1pbmFsLgorCis8cD5PbmNlIHRoZSBjbGllbnQgaXMgcHJvcGVybHkgY29ubmVjdGVkIGFuZCBhdXRob3JpemVkLAordGhlcmUgYXJlIHR3byBwb3NzaWJsZSB0eXBlcyBvZiBjb21tdW5pY2F0aW9uIHdpdGggdGhlIGJyYWlsbGUKK3Rlcm1pbmFsLiBUaGUgY2hvc2VuIHR5cGUgb2YgY29tbXVuaWNhdGlvbiBkZXBlbmRzIG9uIHdoYXQgdGhlCitjbGllbnQgcGxhbnMgdG8gZG8uIElmIGl0cyBwdXJwb3NlIGlzIHRvIGRpc3BsYXkgaW5mb3JtYXRpb24gb24KK3RoZSBicmFpbGxlIGRpc3BsYXkgb3IgdG8gcHJvY2VzcyBicmFpbGxlIGtleXMsIGl0IHdpbGwgaGF2ZSB0bwordGFrZSBjb250cm9sIG9mIHRoZSBMaW51eCB0dHkgb24gd2hpY2ggaXQgaXMgcnVubmluZy4gSWYgaXRzCitwdXJwb3NlIGlzIHRvIGV4Y2hhbmdlIGRhdGEgd2l0aCB0aGUgYnJhaWxsZSB0ZXJtaW5hbCAoZS5nLiBmb3IKK2ZpbGUgdHJhbnNmZXIpLCBpdCB3aWxsIGVudGVyIHdoYXQgaXMgY2FsbGVkICJyYXcgbW9kZSIuCisKKzxzZWN0Mz5CcmFpbGxlIGRpc3BsYXkgYW5kIGJyYWlsbGUga2V5IHByZXNzZXMgcHJvY2Vzc2luZy4KKworPHA+SWYgdGhlIGNsaWVudCB3YW50cyB0byBkaXNwbGF5IHNvbWV0aGluZyBvbiB0aGUgYnJhaWxsZQorZGlzcGxheSBvciB0byBwcm9jZXNzIGJyYWlsbGUga2V5cyBpdHNlbGYsIHJhdGhlciB0aGFuIGxldHRpbmcKKzxlbS9icmx0dHkvIHByb2Nlc3MgdGhlbSwgaXQgaGFzIHRvIHRha2UgY29udHJvbCBvZiB0aGUgTGludXgKK3Rlcm1pbmFsIGl0IGlzIHJ1bm5pbmcgb24uCisKK09uY2UgYSBjbGllbnQgaGFzIG9idGFpbmVkIHRoZSBjb250cm9sIG9mIGhpcyB0dHksIDxlbS9CcmxBUEkvCit3aWxsIGNvbXBsZXRlbHkgZGlzY2FyZCA8ZW0vYnJsdHR5LydzIGRpc3BsYXkgb24gdGhpcyB0dHkgKGFuZCBvbmx5Cit0aGlzIG9uZSksIGxlYXZpbmcgdGhlIGJyYWlsbGUgZGlzcGxheSBmcmVlIGZvciB0aGUgY2xpZW50LgorCitBdCB0aGUgc2FtZSB0aW1lLCBpZiBhIGtleSBpcyBwcmVzc2VkIG9uIHRoZSBicmFpbGxlCitrZXlib2FyZCwgPGVtL0JybEFQSS8gY2hlY2tzIHdoZXRoZXIgdGhlIGNsaWVudCBhcHBsaWNhdGlvbiBpcworaW50ZXJlc3RlZCBpbiB0aGlzIGtleSBvciBub3QuIElmIGl0IGlzLCB0aGUga2V5IGlzIHBhc3NlZCB0bworaXQsIGVpdGhlciBhcyBhIGtleSBjb2RlIG9yIGFzIGEgPGVtL2JybHR0eS8gY29tbWFuZC4gSWYgaXQgaXMgbm90LCB0aGUKK2tleSBjb2RlIGlzIGNvbnZlcnRlZCBpbnRvIGEgPGVtL2JybHR0eS8gY29tbWFuZCBhbmQgcmV0dXJuZWQgdG8KKzxlbS9icmx0dHkvLgorCitPbmNlIHRoZSBjbGllbnQgaXMgbm90IGludGVyZXN0ZWQgaW4gZGlzcGxheWluZyB0ZXh0CitvciByZWFkaW5nIGJyYWlsbGUga2V5cyBhbnkgbW9yZSwgaXQgaGFzIHRvIGxlYXZlIHRoZSB0dHksIHNvCit0aGF0IGVpdGhlciA8ZW0vYnJsdHR5LyBjYW4gY29udGludWUgaXRzIGpvYiwgb3IgYW5vdGhlciBjbGllbnQgY2FuCit0YWtlIGNvbnRyb2wgb2YgaXQuCisKKzxzZWN0Mz5QYXJhbWV0ZXIgaGFuZGxpbmcKKworVGhlIHNlcnZlciBleHBvc2VzIHNvbWUgcGFyYW1ldGVycyB0byB0aGUgY2xpZW50LiBTb21lIHBhcmFtZXRlcnMgYXJlIGdsb2JhbCB0bworYWxsIGNsaWVudHMgKGUuZy4gdGhlIGJyYWlsbGUgZGlzcGxheSBzaXplKSwgd2hpbGUgb3RoZXJzIGFyZSBsb2NhbCBwZXIgY2xpZW50CisoZS5nLiByZXRhaW5kb3RzLCBpLmUuIHdoZXRoZXIgdG8gc2VuZCBQZXJraW5zIHByZXNzZXMgYXMgZG90IHBhdHRlcm5zIG9yIGFzCitsZXR0ZXJzKS4gU29tZSBwYXJhbWV0ZXJzIGFyZSByZWFkLW9ubHkgKGUuZy4gdGhlIGJyYWlsbGUgZGlzcGxheSBzaXplKSwgd2hpbGUKK290aGVycyBhcmUgcmVhZC13cml0ZSAoZS5nLiByZXRhaW5kb3RzKS4gU29tZSBwYXJhbWV0ZXJzIG1heSBjaGFuZ2UgZHVyaW5nCitleGVjdXRpb24sIHdoaWxlIG90aGVycyBjaGFuZ2Ugb25seSB3aGVuIGEgY2xpZW50IHNldCBpdC4KKworQ2xpZW50cyBjYW4gZWl0aGVyIHJlcXVlc3QgdGhlIGN1cnJlbnQgdmFsdWUgb2YgYSBwYXJhbWV0ZXIsIG9yIHNldCBpdHMgdmFsdWUKKyhpZiBpdCBpcyByZWFkLXdyaXRlKSwgb3IgcmVxdWVzdCB0aGUgc2VydmVyIHRvIG5vdGlmeSBvbiB2YWx1ZSBjaGFuZ2UuCisKKzxzZWN0Mz5SYXcgbW9kZS4KKworPHA+T25seSBvbmUgY2xpZW50IGNhbiBiZSBpbiByYXcgbW9kZSBhdCB0aGUgc2FtZSB0aW1lLiBJbgordGhpcyBtb2RlLCBkYXRhIGNvbWluZyBmcm9tIHRoZSBicmFpbGxlIHRlcm1pbmFsIGFyZSBjaGVja2VkCitieSB0aGUgZHJpdmVyICh0byBlbnN1cmUgdGhleSBhcmUgdmFsaWQpLCBidXQgaW5zdGVhZCBvZiBiZWluZyBwcm9jZXNzZWQsCit0aGV5IGFyZSBkZWxpdmVyZWQgImFzLWlzIiB0byB0aGUgY2xpZW50IHRoYXQgaXMgaW4gcmF3IG1vZGUuCisKK0luIHRoZSBvdGhlciBkaXJlY3Rpb24sIHBhY2tldHMgc2VudCB0byA8ZW0vQnJsQVBJLyBieSB0aGUKK2NsaWVudCB0aGF0IGlzIGluIHJhdyBtb2RlIGFyZSBwYXNzZWQgdG8gdGhlIGRyaXZlciB3aGljaCBpcworZXhwZWN0ZWQgdG8gZGVsaXZlciB0aGVtIHRvIHRoZSBicmFpbGxlIHRlcm1pbmFsIHdpdGhvdXQgYW55Cittb2RpZmljYXRpb24uCisKKzxzZWN0Mz5TdXNwZW5kIE1vZGUuCisKKzxwPk9ubHkgb25lIGNsaWVudCBjYW4gYmUgaW4gc3VzcGVuZCBtb2RlIGF0IHRoZSBzYW1lIHRpbWUuIFRoaXMgbW9kZSBpcyBhbHNvCitleGNsdXNpdmUgd2l0aCByYXcgbW9kZS4gSW4gdGhpcyBtb2RlLCB0aGUgc2VydmVyIGtlZXBzIHRoZSBkZXZpY2UgZHJpdmVyCitjbG9zZWQsIGFuZCB0aHVzIHRoZSBjbGllbnQgY2FuIG9wZW4gdGhlIGRldmljZSBkaXJlY3RseSBieSBpdHNlbGYuCisKKzxwPjxiZi9UaGlzIG1vZGUgaXMgbm90IHJlY29tbWVuZGVkLywgc2luY2UgdGhlIGNsaWVudCB3aWxsIHRoZW4gaGF2ZSB0bworcmVpbXBsZW1lbnQgZGV2aWNlIGFjY2Vzcy4gUmF3IG1vZGUgc2hvdWxkIHJlYWxseSBiZSBwcmVmZXJyZWQsIHNpbmNlIGl0IGxldHMKK3RoZSBjbGllbnQgdGFrZSBhZHZhbnRhZ2Ugb2Ygc2VydmVyJ3MgYWJpbGl0eSB0byB0YWxrIHdpdGggdGhlIGRldmljZQorKFVTQi9ibHVldG9vdGggc3VwcG9ydCBmb3IgaW5zdGFuY2UpLgorCis8c2VjdDM+UmVtYXJrcy4KKworPHA+CisKKzxpdGVtaXplPgorCis8aXRlbT5UaGUgb3BlcmF0aW9ucyBkZXNjcmliZWQgaW4gdGhlIHRocmVlIHByZXZpb3VzCitzdWJzZWN0aW9ucyBhcmUgbm90IGNvbXBsZXRlbHkgbXV0dWFsbHkgZXhjbHVzaXZlLiBBbgorYXBwbGljYXRpb24gdGhhdCBjb250cm9scyBpdHMgY3VycmVudCB0dHkgY2FuIGVudGVyIHJhdyBvciBzdXNwZW5kCittb2RlLCBwcm92aWRlZCB0aGF0IG5vIG90aGVyIGFwcGxpY2F0aW9uIGFscmVhZHkgaXMgaW4gdGhpcworbW9kZS4KKworPGl0ZW0+Tm90IGV2ZXJ5IGJyYWlsbGUgZHJpdmVyIHN1cHBvcnRzIHJhdyBtb2RlLiBJdCBoYXMKK3RvIGJlIHNwZWNpYWxseSAocmUpd3JpdHRlbiB0byBzdXBwb3J0IGl0LCBzaW5jZSBpdCBoYXMKK3RvIHByb3ZpZGUgc3BlY2lhbCBmdW5jdGlvbnMgdG8gcHJvY2VzcyBpbmNvbWluZyBhbmQgb3V0Z29pbmcKK3BhY2tldHMuIFRoZSBzYW1lIHJlc3RyaWN0aW9uIGlzIHRydWUgKGJ1dCBsZXNzIHN0cm9uZykKK2NvbmNlcm5pbmcgdGhlIGFiaWxpdHkgdG8gZGVsaXZlci9jb252ZXJ0IGtleWNvZGVzIGludG8KK2NvbW1hbmRzOiBub3QgZXZlcnkgZHJpdmVyIGhhcyB0aGlzIGFiaWxpdHksIGl0IGhhcyB0byBiZQorbW9kaWZpZWQgdG8gZ2V0IGl0LgorCis8aXRlbT5PcGVyYXRpb25zIHByZXZpb3VzbHkgZGVzY3JpYmVkIGNhbiBiZSByZXBlYXRlZC4KK1lvdSBjYW4sIGZvciBpbnN0YW5jZSwgdXNlIHJhdyBtb2RlIHRvIHRyYW5zZmVyIGRhdGEgb250bworeW91ciBicmFpbGxlIHRlcm1pbmFsLCBkaXNwbGF5IHRleHQgaW4gYnJhaWxsZSwgcmV0dXJuIHRvIHJhdworbW9kZS4uLiwgYWxsIHRoYXQgd2l0aG91dCBoYXZpbmcgdG8gcmVjb25uZWN0IHRvIDxlbS9CcmxBUEkvIGJlZm9yZQorZWFjaCBvcGVyYXRpb24uCisKKzwvaXRlbWl6ZT4KKworPHNlY3QyPkRpc2Nvbm5lY3Rpb24uCisKKzxwPk9uY2UgdGhlIGNsaWVudCBoYXMgZmluaXNoZWQgdXNpbmcgdGhlIGJyYWlsbGUgdGVybWluYWwsIGl0CitoYXMgdG8gZGlzY29ubmVjdCBmcm9tIHRoZSBBUEksIHNvIHRoYXQgdGhlIG1lbW9yeSBzdHJ1Y3R1cmVzCithbGxvY2F0ZWQgZm9yIHRoZSBjb25uZWN0aW9uIGNhbiBiZSBmcmVlZCBhbmQgZXZlbnR1YWxseSB1c2VkIGJ5Cithbm90aGVyIGNsaWVudC4gVGhpcyBzdGVwIGlzIHRyYW5zcGFyZW50IGZvciB0aGUgdXNlciwgaW4gdGhlCitzZW5zZSB0aGF0IGl0IGludm9sdmVzIG5vIGNoYW5nZSBvbiB0aGUgYnJhaWxsZSBkaXNwbGF5LgorCisKKzwhLS0tLT4KKzxzZWN0PkNvbmN1cnJlbmN5IG1hbmFnZW1lbnQgYmV0d2VlbiA8ZW0vQnJsQVBJLyBjbGllbnRzPGxhYmVsIGlkPSJzZWMtY29uY3VycmVuY3kiPgorPCEtLS0tPgorPCEtLSBTYW0gLS0+Cis8IS0tIGV4cGxhaW4gZm9jdXMgdGVsbGVycywgdHR5IHRyZWUsICYgY28gLS0+CisKKzxwPgorQW4gZXNzZW50aWFsIHB1cnBvc2Ugb2YgPGVtL0JybEFQSS8gaXMgdG8gbWFuYWdlIGNvbmN1cnJlbnQgYWNjZXNzIHRvIHRoZQorYnJhaWxsZSBkaXNwbGF5IGJldHdlZW4gdGhlIDxlbS9icmx0dHkvIGRhZW1vbiBhbmQgYXBwbGljYXRpb25zLiBUaGlzCitjb25jdXJyZW5jeSBpcyBtYW5hZ2VkICJwZXIgVHR5Ii4gV2UgZmlyc3QgZGVzY3JpYmUgdGhpcyB3aXRoIGEgZmxhdCB2aWV3LCBhbmQKK3RoZW4gY29uc2lkZXIgVHR5IGhpZXJhcmNoeS4KKworPHNlY3QxPlZUIHN3aXRjaGluZworCis8cD4KK0xldCdzIGZpcnN0IGRlc2NyaWJlIGhvdyB0aGluZ3Mgd29yayB3aXRoIHRoZSBzaW1wbGUgY2FzZSBvZiBhIHNpbmdsZSBzZXJpZXMgb2YKK1ZpcnR1YWwgVHR5cyAoVlRzKSwgdGhlIGxpbnV4IGNvbnNvbGUgZm9yIGluc3RhbmNlLgorCis8cD4KK0FzIGRlc2NyaWJlZCBpbiA8cmVmIGlkPSJzZWMtZ2VuZXJhbCIgbmFtZT0iR2VuZXJhbCBEZXNjcmlwdGlvbiI+LCBiZWZvcmUgYmVpbmcgYWJsZQordG8gd3JpdGUgb3V0cHV0LCBhIDxlbS9CcmxBUEkvIGNsaWVudCBoYXMgdG8gImdldCIgYSB0dHksIGkuZS4gaXQgc2VuZHMgdG8gdGhlCis8ZW0vQnJsQVBJLyBzZXJ2ZXIgdGhlIG51bWJlciBvZiB0aGUgbGludXgnIFZpcnR1YWwgVHR5IG9uIHdoaWNoIGl0IGlzIHJ1bm5pbmcuCitUaGUgPGVtL0JybEFQSS8gc2VydmVyIHVzZXMgdGhpcyBpbmZvcm1hdGlvbiBzbyBhcyB0byBrbm93IHdoaWNoIGNsaWVudCdzIG91dHB1dAorc2hvdWxkIGJlIHNob3duIG9uIHRoZSBicmFpbGxlIGRpc3BsYXksIGFjY29yZGluZyB0byB0aGUgZm9jdXMgdGVsbGVyJ3MKK2luZm9ybWF0aW9uLgorCis8cD4KK0xldCdzIHNheSBzb21lIGNsaWVudCA8ZW0vQS8gaXMgcnVubmluZyBvbiBWVCAyLiAgSXQgImdvdCIgVlQgMiBhbmQgd3JvdGUgc29tZQorb3V0cHV0IG9uIGl0cyA8ZW0vQnJsQVBJLyBjb25uZWN0aW9uLiAgVGhlIGZvY3VzIHRlbGxlciBpcyA8ZW0vYnJsdHR5LyBoZXJlOiBpdAorYWx3YXlzIHRlbGxzIHRvIHRoZSA8ZW0vQnJsQVBJLyBzZXJ2ZXIgd2hpY2ggVlQgaXMgY3VycmVudGx5IHNob3duIG9uIHRoZSBzY3JlZW4KK2FuZCBnZXRzIHVzdWFsIGtleWJvYXJkIHByZXNzZXMgKGl0IGlzICJhY3RpdmUiKS4KKworPHA+CitMZXQncyBzYXkgVlQgMSBpcyBhY3RpdmUsIHRoZW4gdGhlIDxlbS9CcmxBUEkvIHNlcnZlciBzaG93cyA8ZW0vYnJsdHR5LydzIG91dHB1dAorb24gdGhlIGJyYWlsbGUgZGlzcGxheS4gIEkuZS4gdGhlIHVzdWFsIDxlbS9icmx0dHkvIHNjcmVlbiByZWFkaW5nIGFwcGVhcnMuCitNb3Jlb3Zlciwgd2hlbiBicmFpbGxlIGtleXMgYXJlIHByZXNzZWQsIHRoZXkgYXJlIHBhc3NlZCB0byA8ZW0vYnJsdHR5Lywgc28gdGhhdAordXN1YWwgc2NyZWVuIHJlYWRpbmcgY2FuIGJlIHBlcmZvcm1lZC4gIFdoZW4gdGhlIHVzZXIgc3dpdGNoZXMgdG8gVlQgMiwKKzxlbS9icmx0dHkvIChhcyBmb2N1cyB0ZWxsZXIpIHRlbGxzIGl0IHRvIHRoZSA8ZW0vQnJsQVBJLyBzZXJ2ZXIsIHdoaWNoIHRoZW4KK3JlbWVtYmVycyB0aGF0IGNsaWVudCA8ZW0vQS8gaGFzIGdvdCBpdCBhbmQgaGFzIHByb2R1Y2VkIHNvbWUgb3V0cHV0LiAgVGhlCitzZXJ2ZXIgdGhlbiBkaXNwbGF5cyB0aGlzIG91dHB1dCBvbiB0aGUgYnJhaWxsZSBkaXNwbGF5LiAgTm90ZSB0aGF0IDxlbS9BLworZG9lc24ndCBuZWVkIHRvIHJlLXN1Ym1pdCBpdHMgb3V0cHV0OiB0aGUgc2VydmVyIGhhZCByZWNvcmRlZCBpdCBzbyBhcyB0byBiZQorYWJsZSB0byBzaG93IGl0IGFzIHNvb24gYXMgdGhlIGZvY3VzIHN3aXRjaGVzIHRvIFZUIDIuICBXaGVuZXZlciBzb21lIGtleSBvZiB0aGUKK2JyYWlsbGUgZGV2aWNlIGlzIHByZXNzZWQsIDxlbS9CcmxBUEkvIGxvb2tzIHdoZXRoZXIgaXQgaXMgaW4gdGhlIGxpc3Qgb2Yga2V5cwordGhhdCBjbGllbnQgPGVtL0EvIHNhaWQgdG8gYmUgb2YgaGlzIGludGVyZXN0LiAgSWYgaXQgaXMsIGl0IGlzIHBhc3NlZCB0byA8ZW0vQS8KKyhhbmQgbm90IHRvIDxlbS9icmx0dHkvKS4gSWYgaXQgaXNuJ3QsIGl0IGlzIHBhc3NlZCB0byA8ZW0vYnJsdHR5LyAoYW5kIG5vdCB0bworPGVtL0EvKS4KKworPHA+CitBcyBhIGNvbnNlcXVlbmNlLCB3aGVuZXZlciBjbGllbnRzIGdldCBhbmQgcmVsZWFzZSBUdHlzIGFuZCB0aGUgdXNlciBzd2l0Y2hlcworYmV0d2VlbiBUdHlzLCBlaXRoZXIgdGhlIDxlbS9icmx0dHkvIHNjcmVlbiByZWFkaW5nIG9yIHRoZSBjbGllbnQncyBvdXRwdXQgaXMKK2F1dG9tYXRpY2FsbHkgc2hvd24gYWNjb3JkaW5nIHRvIHJhdGhlciBuYXR1cmFsIHJ1bGVzLgorCis8c2VjdDE+QSBwaWxlIG9mICJwYXBlciBzaGVldHMiCisKKzxwPgorTGV0J3MgbG9vayBhdCBWVCAyIGJ5IGl0c2VsZi4gV2hhdCBpcyBzaG93biBvbiB0aGUgYnJhaWxsZSBkaXNwbGF5IGNhbiBiZSBzZWVuCithcyB0aGUgcmVzdWx0IG9mIGEgcGlsZSBvZiB0d28gcGFwZXIgc2hlZXRzLiAgPGVtL2JybHR0eS8gaXMgcmVwcmVzZW50ZWQgYnkgdGhlCitib3R0b20gc2hlZXQgb24gd2hpY2ggaXRzIHNjcmVlbiByZWFkaW5nIGlzIHdyaXR0ZW4sIGFuZCBjbGllbnQgPGVtL0EvIGJ5IHRoZQordG9wIHNoZWV0IG9uIHdoaWNoIGl0cyBvdXRwdXQgaXMgd3JpdHRlbi4gPGVtL0EvJ3Mgc2hlZXQgaGVuY2UgImNvdmVycyIKKzxlbS9icmx0dHkvJ3Mgc2hlZXQ6IDxlbS9BLydzIG91dHB1dCAibWFzayIgPGVtL2JybHR0eS8ncyBzY3JlZW4gcmVhZGluZy4KKworPHA+Cis8ZW0vQS8gbWF5IHlldCB3YW50IHRvIHRlbXBvcmFyaWx5IGxldCA8ZW0vYnJsdHR5LydzIHNjcmVlbiByZWFkaW5nIGFwcGVhciBvbiBWVAorMiwgd2hpbGUgc3RpbGwgcmVjZWl2aW5nIHNvbWUga2V5IHByZXNzZXMsIGZvciBpbnN0YW5jZS4gIEZvciB0aGlzLCBpdCBzZW5kcyBhCisidm9pZCIgd3JpdGUuICBUaGUgc2VydmVyIHRoZW4gY2xlYXJzIHRoZSByZWNvcmRlZCBvdXRwdXQgZm9yIHRoaXMgY29ubmVjdGlvbgorKGluIHRoZSBzaGVldCByZXByZXNlbnRhdGlvbiwgdGhlIHNoZWV0IGJlY29tZXMgInRyYW5zcGFyZW50IikuICBBcyBhCitjb25zZXF1ZW5jZSwgPGVtL2JybHR0eS8ncyBvdXRwdXQgaXMgYXV0b21hdGljYWxseSBzaG93biAoYnkgdHJhbnNwYXJlbmN5IGluIHRoZQorc2hlZXQgcmVwcmVzZW50YXRpb24pLCBqdXN0IGxpa2UgaWYgPGVtL0EvIGhhZCByZWxlYXNlZCB0aGUgVHR5LgorCis8cD4KK0tleXByZXNzZXMgYXJlIGhhbmRsZWQgaW4gYSBzaW1pbGFyIHdheTogPGVtL0EvJ3MgZGVzaXJlIHRvIGdldCBrZXkgcHJlc3NlcyBpcworc2F0aXNmaWVkIGZpcnN0IGJlZm9yZSA8ZW0vYnJsdHR5Ly4KKworPHA+CitMZXQncyBzYXkgc29tZSBvdGhlciBjbGllbnQgPGVtL0IvIChwcm9iYWJseSBsYXVuY2hlZCBieSA8ZW0vQS8pIGFsc28gZ2V0cyBWVCAyCithbmQgb3V0cHV0cyBzb21lIHRleHQgb24gaXRzIDxlbS9CcmxBUEkvIGNvbm5lY3Rpb24uICBUaGlzIGFkZHMgYSB0aGlyZCBzaGVldCwKK29uIHRvcCBvZiB0aGUgdHdvIHByZXZpb3VzIG9uZXMuICBJdCBtZWFucyB0aGF0IHRoZSA8ZW0vQnJsQVBJLyBzZXJ2ZXIgd2lsbCBzaG93Cis8ZW0vQi8ncyBvdXRwdXQgb24gdGhlIGJyYWlsbGUgZGV2aWNlLiAgSWYgPGVtL0EvIHRoZW4gb3V0cHV0cyBzb21lIHRleHQsIHRoZQorc2VydmVyIHdpbGwgcmVjb3JkIGl0IChvbiA8ZW0vQS8ncyBzaGVldCB3aGljaCBoZW5jZSBiZWNvbWVzIG9wYXF1ZSBhZ2FpbiksIGJ1dAoraXQgd29uJ3QgYmUgZGlzcGxheWVkIG9uIHRoZSBicmFpbGxlIGRldmljZSwgc2luY2UgPGVtL0IvJ3Mgc2hlZXQgaXMgc3RpbGwgYXQKK3RoZSB0b3AgYW5kIG9wYXF1ZSAoaS5lLiB3aXRoIHNvbWUgdGV4dCBvbiBpdCkuICBCdXQgaWYgPGVtL0IvIGlzc3VlcyBhIHZvaWQKK3dyaXRlLCB0aGUgc2VydmVyIGNsZWFycyBpdHMgb3VwdXQgYnVmZmVyIChpLmUuIDxlbS9CLydzIHNoZWV0IGJlY29tZXMKK3RyYW5zcGFyZW50KSwgYW5kIGFzIGEgcmVzdWx0IDxlbS9BLydzIG91dHB1dCBhcHBlYXIgb24gdGhlIGJyYWlsbGUgZGlzcGxheSAoYnkKK3RyYW5zcGFyZW5jeSB0aHJvdWdoIDxlbS9CLydzIHNoZWV0KS4KKworPHA+CitUaGUgc2hlZXQgb3JkZXIgaXMgYnkgZGVmYXVsdCBkZXRlcm1pbmVkIGJ5IHRoZSBUdHkgImdldCJ0aW5nIG9yZGVyLiBDbGllbnRzCitjYW4gaG93ZXZlciBjaGFuZ2UgdGhlaXIgcHJpb3JpdHkgKHdoaWNoIGJ5IGRlZmF1bHQgaXMgNTApIHRvIGEgaGlnaGVyIHZhbHVlIGluCitvcmRlciB0byBzaG93IHVwIGhpZ2hlciBpbiB0aGUgcGlsZSwgb3IgdG8gYSBsb3dlciB2YWx1ZSBpbiBvcmRlciB0byBoaWRlIGxvd2VyCitpbiB0aGUgcGlsZS4KKworPHNlY3QxPkhpZXJhcmNoeQorCis8cD4KK05vdywgd2hhdCBoYXBwZW5zIHdoZW4gcnVubmluZyBzb21lIDxlbS9zY3JlZW4vIHByb2dyYW0gb24sIHNheSwgVlQgMz8gIEl0CitlbXVsYXRlcyBhIHNlcmllcyBvZiBUdHlzLCB3aG9zZSBvdXRwdXQgYWN0dWFsbHkgYXBwZWFyIG9uIHRoZSBzYW1lIFZUIDMuCitUaGF0J3Mgd2hlcmUgYSBoaWVyYXJjaHkgbGV2ZWwgYXBwZWFyczogdGhlIGZvY3VzIGluZm9ybWF0aW9uIGlzIG5vdCBvbmx5IHRoZSBWVAorbnVtYmVyIGJ1dCBhbHNvLCBpbiB0aGUgY2FzZSBvZiBWVCAzLCB3aGljaCA8ZW0vc2NyZWVuLyB3aW5kb3cgaXMgYWN0aXZlLiAgVGhpcworaGVuY2UgZm9ybXMgYSA8ZW0vdHJlZS8gb2YgVHR5czogdGhlICJyb290IiBiZWluZyB0aGUgdmdhIGRyaXZlcidzIG91dHB1dCwgd2hvc2UKK3NvbnMgYXJlIFZUcywgYW5kIFZUIDMgaGFzIHRoZSA8ZW0vc2NyZWVuLyB3aW5kb3dzIGFzIHNvbnMuICA8ZW0vQnJsdHR5LyBpcyBhCitmb2N1cyB0ZWxsZXIgZm9yIHRoZSByb290LCA8ZW0vc2NyZWVuLyB3aWxsIGhhdmUgdG8gYmUgYSBmb2N1cyB0ZWxsZXIgZm9yIFZUIDMuCis8ZW0vU2NyZWVuLyBzaG91bGQgdGhlbiBnZXQgVlQgMywgbm90IGRpc3BsYXkgYW55dGhpbmcgKHNvIHRoYXQgdGhlIHVzdWFsCis8ZW0vYnJsdHR5LyBzY3JlZW4gcmVhZGluZyB3aWxsIGJlIHNob3duIGJ5IHRyYW5zcGFyZW5jeSksIGFuZCB0ZWxsIHRoZQorPGVtL0JybEFQSS8gc2VydmVyIHdoaWNoIDxlbS9zY3JlZW4vIHdpbmRvdyBpcyBhY3RpdmUgKGF0IHN0YXJ0dXAgYW5kIGF0IGVhY2gKK3dpbmRvdyBzd2l0Y2gpLiAgVGhpcyBpcyBub3QgaW1wbGVtZW50ZWQgZGlyZWN0bHkgaW4gPGVtL3NjcmVlbi8geWV0LCBidXQgdGhpcworbWF5IGJlIGFjaGlldmVkIHZpYSBhIHNlY29uZCA8ZW0vYnJsdHR5LyBkYWVtb24gcnVubmluZyB0aGUgU2NyZWVuIGRyaXZlciAoYnV0CitpdCBpc24ndCB5ZXQgYWJsZSB0byBnZXQgdGhlIGN1cnJlbnQgd2luZG93IG51bWJlciB0aG91Z2gpIGFuZCB0aGUgPGVtL0JybEFQSS8KK2RyaXZlci4KKworPHA+CitBIDxlbS9CcmxBUEkvIGNsaWVudCA8ZW0vQy8gcnVubmluZyBpbiBzb21lIDxlbS9zY3JlZW4vIHdpbmRvdyBudW1iZXIgMSB3b3VsZAordGhlbiBoYXZlIHRvIGdldCB0aGUgVHR5IHBhdGggIlZUIDMgdGhlbiB3aW5kb3cgMSIsIHdoaWNoIGlzIG1lcmVseSBleHByZXNzZWQKK2FzICIzIDEiLiAgVGhlIHdpbmRvdyBudW1iZXIgaXMgYXZhaWxhYmxlIGluIHRoZSA8dHQvV0lORE9XLyBlbnZpcm9ubWVudAordmFyaWFibGUsIHNldCBieSA8ZW0vc2NyZWVuLy4gVGhlIFZUIG51bWJlciwgd2hpY2ggYWN0dWFsbHkgcmVwcmVzZW50cyB0aGUgInBhdGgKK3RvIHNjcmVlbidzIG91dHB1dCIgc2hvdWxkIGJlIGF2YWlsYWJsZSBpbiB0aGUgPHR0L1dJTkRPV1BBVEgvIGVudmlyb25tZW50Cit2YXJpYWJsZSwgYWxzbyBzZXQgYnkgPGVtL3NjcmVlbi8uICBUaGUgY2xpZW50IGNhbiB0aHVzIG1lcmVseSBjb25jYXRlbmF0ZSB0aGUKK2NvbnRlbnQgb2YgPHR0L1dJTkRPV1BBVEgvICh3aGljaCBjb3VsZCBob2xkIG1hbnkgbGV2ZWxzIG9mIHdpbmRvdyBudW1iZXJzKSBhbmQKK29mIDx0dC9XSU5ET1cvIGFuZCBnaXZlIHRoZSByZXN1bHQgYXMgdHR5IHBhdGggdG8gdGhlIDxlbS9CcmxBUEkvIHNlcnZlciwgd2hpY2gKK3RoZW4ga25vd3MgcHJlY2lzZWx5IHdoZXJlIHRoZSBjbGllbnQncyB1c3VhbCBvdXRwdXQgcmVzaWRlcy4gIEluIHByYWN0aWNlLAorYXBwbGljYXRpb25zIGp1c3QgbmVlZCB0byBjYWxsIDx0dC9icmxhcGlfZW50ZXJUdHlNb2RlKEJSTEFQSV9UVFlfREVGQVVMVCkvLCBhbmQKK3RoZSB0aGUgPGVtL0JybEFQSS8gY2xpZW50IGxpYnJhcnkgd2lsbCBhdXRvbWF0aWNhbGx5IHBlcmZvcm0gYWxsIHRoYXQuCisKKzxwPgorV2hlbmV2ZXIgdGhlIHVzZXIgc3dpdGNoZXMgdG8gVlQgMywgdGhlIDxlbS9CcmxBUEkvIHNlcnZlciByZW1lbWJlcnMgdGhlIHdpbmRvdwordGhhdCA8ZW0vc2NyZWVuLyB0b2xkIHRvIGJlIGFjdGl2ZS4gIElmIGl0IHdhcyB3aW5kb3cgMSwgaXQgdGhlbiBkaXNwbGF5cworPGVtL0MvJ3Mgb3V0cHV0IChpZiBhbnkpLiAgRWxzZSA8ZW0vYnJsdHR5LydzIHVzdWFsIHNjcmVlbiByZWFkaW5nIGlzIHNob3duLgorT2YgY291cnNlLCBzZXZlcmFsIGNsaWVudHMgbWF5IGJlIHJ1biBpbiB3aW5kb3cgMSBhcyB3ZWxsLCBhbmQgdGhlICJzaGVldCBwaWxlIgorbWVjYW5pc20gYXBwbGllczogPGVtL2JybHR0eS8ncyBzaGVldCBmaXJzdCAoYXQgdGhlIHJvb3Qgb2YgdGhlIFR0eXMgdHJlZSksIHRoZW4KKzxlbS9zY3JlZW4vJ3Mgc2hlZXQgKHdoaWNoIGlzIHRyYW5zcGFyZW50LCBvbiBWVCAzKSwgdGhlbiA8ZW0vQy8ncyBzaGVldCAob24KK3dpbmRvdyAxIG9mIFZUIDMpLCB0aGVuIG90aGVyIGNsaWVudHMnIHNoZWV0cyAob24gdGhlIHNhbWUgd2luZG93KS4KKworPHA+CitUdHlzIGFyZSBoZW5jZSBvcmdhbml6ZWQgaW4gYSB0cmVlLCBlYWNoIGNsaWVudCBhZGRpbmcgaXRzIHNoZWV0IGF0IHNvbWUgdHR5IGluCit0aGUgdHJlZS4KKworPHNlY3QxPlRoZSBYLXdpbmRvdyBjYXNlCisKKzxwPgorTGV0J3Mgc2F5IHNvbWUgWCBzZXJ2ZXIgaXMgcnVubmluZyBvbiBWVCA3IG9mIGEgTGludXggc3lzdGVtLiBYb3JnJ3MgPGVtL3hpbml0LworYW5kIDxlbS94ZG0vIGNvbW1hbmRzIGF1dG9tYXRpY2FsbHkgc2V0IHRoZSBYIHNlc3Npb24ncyA8dHQvV0lORE9XUEFUSC8KK2Vudmlyb25tZW50IHZhcmlhYmxlIHRvICI3Iiwgc28gdGhhdCBYMTEgPGVtL0JybEFQSS8gY2xpZW50cyBzdGFydGVkIGZyb20KK3RoZSBzZXNzaW9uIGp1c3QgbmVlZCB0byBjYWxsIDxlbS9icmxhcGlfZW50ZXJUdHlNb2RlKHhpZCkvIHdoZXJlIDxlbS94aWQvCitpcyB0aGUgWC13aW5kb3cgSUQgb2YgdGhlIHdpbmRvdyBvZiB0aGUgY2xpZW50LiBUaGUgPGVtL0JybEFQSS8gbGlicmFyeQord2lsbCBhdXRvbWF0aWNhbGx5IHByZXBlbmQgdGhlIGNvbnRlbnQgb2YgPHR0L1dJTkRPV1BBVEgvIHRvIGl0LgorCis8cD4KK0ZvciB0ZXh0LWJhc2VkIDxlbS9CcmxBUEkvIGNsaWVudHMgcnVubmluZyBpbiBhbiB4dGVybSAod2hpY2ggc2hvdWxkIGp1c3QgY2FsbAorPHR0L2JybGFwaV9lbnRlclR0eU1vZGUoQlJMQVBJX1RUWV9ERUZBVUxUKS8gYXMgZXhwbGFpbmVkIGluIHRoZSBwcmV2aW91cworc2VjdGlvbiksIDxlbS9CcmxBUEkvIGRldGVjdHMgdGhlIHdpbmRvdyBpZCB0aGFua3MgdG8gdGhlIDx0dC9XSU5ET1dJRC8gdmFyaWFibGUKK3NldCBieSB4dGVybS4KKworPHA+CitTY3JlZW4gcmVhZGVycyBhcmUgbm90IGJvdW5kIHRvIGEgcGFydGljdWxhciB3aW5kb3csIHNvIHRoZXkgc2hvdWxkIGNhbGwKKzxlbS9icmxhcGlfZW50ZXJUdHlNb2RlV2l0aFBhdGgoTlVMTCwgMCkvIHRvIGxldCB0aGUgPGVtL0JybEFQSS8gbGlicmFyeSBvbmx5CitzZW5kIHRoZSBjb250ZW50IG9mIDx0dC9XSU5ET1dQQVRILywgZXhwcmVzc2luZyB0aGF0IHNjcmVlbiByZWFkZXJzIHRha2UgdGhlCit3aG9sZSB0dHkuICBUaGUgdXNlciBzaG91bGQgbm90YWJseSBsYXVuY2ggPGVtL3hicmxhcGkvLCB3aGljaCBpcyBhIGZvY3VzCit0ZWxsZXIgZm9yIFgtd2luZG93IGFzIHdlbGwgYXMgYSBrZXlib2FyZCBzaW11bGF0b3IgKDxlbS9icmx0dHkvIGNhbid0IHJlbGlhYmx5CitzaW11bGF0ZSB0aGVtIGF0IHRoZSBrZXJuZWwgbGV2ZWwgaW4gc3VjaCBzaXR1YXRpb24pLiAgRm9yIGFjY2Vzc2luZyBBVC1TUEkKK2NvbnRlbnRzIChsaWtlIGdub21lIG9yIGtkZSBhcHBsaWNhdGlvbnMpLCBPcmNhIHNob3VsZCBhbHNvIGJlIGxhdW5jaGVkLiAgRm9yCithY2Nlc3NpbmcgQVQtU1BJIHRlcm1pbmFscyAobGlrZSBnbm9tZS10ZXJtaW5hbCkgaW4gdGhlIHNhbWUgd2F5IGFzIGluIHRoZQorY29uc29sZSwgYSBzZWNvbmQgPGVtL2JybHR0eS8gZGFlbW9uIHJ1bm5pbmcgdGhlIGF0LXNwaSBzY3JlZW4gZHJpdmVyIGFuZCB0aGUKKzxlbS9CcmxBUEkvIGRyaXZlciBjYW4gYWxzbyBiZSBsYXVuY2hlZC4gIEFsbCB0aHJlZSB3b3VsZCBnZXQgdGhlIFZUIG9mIHRoZQorWCBzZXNzaW9uLCBpbiB0aGF0IG9yZGVyIChmb3Igbm93KTogPGVtL3hicmxhcGkvIGZpcnN0LCB0aGVuIDxlbS9vcmNhLyBhbmQKKzxlbS9icmx0dHkvIGF0IGxhc3QuICBXaGVuIHRoZSBYIGZvY3VzIGlzIG9uIGFuIEFULVNQSSB0ZXJtaW5hbCwgPGVtL2JybHR0eS8KK3dpbGwgaGVuY2UgYmUgYWJsZSB0byBncmFiIHRoZSBicmFpbGxlIGRpc3BsYXkgYW5kIGtleSBwcmVzc2VzLiAgRWxzZSA8ZW0vb3JjYS8KK3dvdWxkIGdldCB0aGVtLiAgQW5kIDxlbS94YnJsYXBpLyB3b3VsZCBmaW5hbGx5IGdldCByZW1haW5pbmcga2V5IHByZXNzZXMgYW5kCitzaW11bGF0ZSB0aGVtLgorCis8cD4KK05vdGU6IG9sZCB2ZXJzaW9ucyBvZiA8dHQveGluaXQvLCA8dHQveGRtLywgPHR0L2tkbS8gb3IgPHR0L2dkbS8gZG8gbm90CithdXRvbWF0aWNhbGx5IHNldCB0aGUgPHR0L1dJTkRPV1BBVEgvIHZhcmlhYmxlLiBUaGUgdXNlciBjYW4gc2V0IGl0IGJ5IGhhbmQgaW4KK2hpcyA8dHQ+fi8ueHNlc3Npb248L3R0PiwgPHR0Pn4vLnhpbml0cmM8L3R0PiwgPHR0Pn4vLmdkbXJjPC90dD4uLi4gdG8gIjciCisKKzxwPgorTm90ZTogc29tZSBPcGVyYXRpbmcgU3lzdGVtcyBsaWtlIFNvbGFyaXMgZG8gbm90IGhhdmUgVlRzLiBJbiB0aGF0IGNhc2UKKzx0dC9XSU5ET1dQQVRILyBpcyBlbXB0eSBvciBub3QgZXZlbiBzZXQuICBFdmVyeXRoaW5nIGV4cGxhaW5lZCBhYm92ZSBzdGlsbAord29yayBmaW5lLgorCis8c2VjdDE+RGV0YWNoaW5nCisKKzxwPgorU2V2ZXJhbCBwcm9ncmFtcyBhbGxvdyBkZXRhY2hpbmc6IDxlbS9zY3JlZW4vIGFuZCA8ZW0vVk5DLyBmb3IgaW5zdGFuY2UuIEluIHN1Y2gKK3NpdHVhdGlvbiwgYW4gaW50ZXJtZWRpYXRlIDxlbS9CcmxBUEkvIHNlcnZlciBzaG91bGQgYmUgcnVuIGZvciBlYWNoIHN1Y2gKK3Nlc3Npb24uIENsaWVudHMgd291bGQgY29ubmVjdCB0byBpdCwgYW5kIGl0IHdvdWxkIHByZXBlbmQgdGhlICJjdXJyZW50IHR0eSIKK3BhdGggb24gdGhlIGZseSB3aGlsZSBmb3J3YXJkaW5nIHRoaW5ncyB0byB0aGUgcm9vdCA8ZW0vQnJsQVBJLyBzZXJ2ZXIuIFRoaXMKK2ludGVybWVkaWF0ZSBzZXJ2ZXIgaXMgeWV0IHRvIGJlIHdyaXR0ZW4gKGJ1dCBpdCBpcyBhY3R1YWxseSByZWxhdGl2ZWx5IGNsb3NlIHRvCitiZSkuCisKKworPCEtLS0tPgorPHNlY3Q+SW5zdGFsbGF0aW9uIGFuZCBjb25maWd1cmF0aW9uIG9mIDxlbS9CcmxBUEkvPGxhYmVsIGlkPSJzZWMtaW5zdGFsbCI+Cis8IS0tLS0+Cis8IS0tIFNlYiAtLT4KKzwhLS0gYW4gaW5zdGFsbGF0aW9uIGFuZCBjb25maWd1cmF0aW9uIGRvY3VtZW50YXRpb24gLS0+Cis8cD4KKzx0dC9tYWtlIGluc3RhbGwvIHdpbGwgaW5zdGFsbCBsaWJicmxhcGkuc28gaW4gL2xpYiwgYW5kIGluY2x1ZGUgZmlsZXMgaW4KKy91c3IvaW5jbHVkZS9icmx0dHkuIEFuIGF1dGhvcml6YXRpb24ga2V5IHdpbGwgYWxzbyB0eXBpY2FsbHkgYmUgc2V0IGluCisvZXRjL2JybGFwaS5rZXkgKGlmIGl0IGlzIG5vdCwganVzdCBjcmVhdGUgaXQgYW5kIHB1dCBhcmJpdHJhcnkgZGF0YSBpbiBpdCksIGJ1dAoraXQgd29uJ3QgYmUgcmVhZGFibGUgYnkgYW55Ym9keSBlbHNlIHRoYW4gcm9vdC4gSXQgaXMgdXAKK3RvIHlvdSB0byBkZWZpbmUgYSBncm91cCBvZiB1c2VycyB3aG8gd2lsbCBoYXZlIHRoZSByaWdodCB0byByZWFkIGl0IGFuZCBoZW5jZQorYmUgYWJsZSB0byBjb25uZWN0IHRvIHRoZSBzZXJ2ZXIuIEZvciBpbnN0YW5jZSwgeW91IG1heSB3YW50IHRvIGRvOgorCis8dHNjcmVlbj48Y29kZT4KKyMgYWRkZ3JvdXAgYnJsYXBpCisjIGNoZ3JwIGJybGFwaSAvZXRjL2JybGFwaS5rZXkKKyMgY2htb2QgZytyIC9ldGMvYnJsYXBpLmtleQorIyBhZGRncm91cCB1c2VyMSBicmxhcGkKKyMgYWRkZ3JvdXAgdXNlcjIgYnJsYXBpCisuLi4KKzwvY29kZT48L3RzY3JlZW4+CisKKworPCEtLS0tPgorPHNlY3Q+TGlicmFyeSBkZXNjcmlwdGlvbjxsYWJlbCBpZD0ic2VjLWxpYnJhcnkiPgorPCEtLS0tPgorPCEtLSB0aGUgbGlicmFyeSBkb2N1bWVudGF0aW9uLCBmb3IgdGhvc2Ugd2hvIHdhbnQgdG8gd3JpdGUKK2FwcGxpY2F0aW9ucyB3aGljaCB1c2UgaXQsIGl0IHNob3VsZCBiZSBzcGxpdCBpbjogLS0+CisKKzxwPgorTGV0J3Mgbm93IHNlZSBob3cgb25lIGNhbiB3cml0ZSBkZWRpY2F0ZWQgYXBwbGljYXRpb25zLiBCYXNpYyBub3Rpb25zIHdpbGwgYmUKK3NlZW4sIGFsb25nIHdpdGggYSB2ZXJ5IHNpbXBsZSBjbGllbnQuIEdyZWF0ZXIgZGV0YWlscyBhcmUgZ2l2ZW4gYXMgb25saW5lCittYW51YWwgcGFnZXMuCisKKzwhLS0gYSBiYXNpYyBkb2N1bWVudGF0aW9uLCB3aGljaCBicmllZmx5IHNob3dzCitob3cgb25lIGlzIHN1cHBvc2VkIHRvIHVzZSBvdXIgbGlicmFyeSwgd2l0aCB0cml2aWFsIGV4YW1wbGVzIC0tPgorCis8cD4KK1RoZSBoaXN0b3JpY2FsIHRlc3QgcHJvZ3JhbSBmb3IgPGVtL0JybEFQSS8gd2FzIHNvbWV0aGluZyBsaWtlOgorPGl0ZW1pemU+Cis8aXRlbT5jb25uZWN0IHRvIDxlbS9CcmxBUEkvCis8aXRlbT5nZXQgZHJpdmVyIGlkCis8aXRlbT5nZXQgZHJpdmVyIG5hbWUKKzxpdGVtPmdldCBkaXNwbGF5IHNpemUKKzxpdGVtPnRyeSBlbnRlcmluZyByYXcgbW9kZSwgaW1tZWRpYXRlbHkgbGVhdmUgcmF3IG1vZGUuCis8aXRlbT5nZXQgdHR5IGNvbnRyb2wKKzxpdGVtPndyaXRlIHNvbWV0aGluZyBvbiB0aGUgZGlzcGxheQorPGl0ZW0+d2FpdCBmb3IgYSBrZXkgcHJlc3MKKzxpdGVtPmxlYXZlIHR0eSBjb250cm9sCis8aXRlbT5kaXNjb25uZWN0IGZyb20gPGVtL0JybEFQSS8KKzwvaXRlbWl6ZT4KKworSXQgaXMgaGVyZSByZXdyaXR0ZW4sIGl0cyB3b3JraW5nIGJyaWVmbHkgZXhwbGFpbmVkLgorCis8c2VjdDE+Q29ubmVjdGluZyB0byA8ZW0vQnJsQVBJLworCis8cD5Db25uZWN0aW9uIHRvIDxlbS9CcmxBUEkvIGlzIG5lZWRlZCBmaXJzdCwgdGhhbmtzIHRvIHRoZQorPHR0PmJybGFwaV9vcGVuQ29ubmVjdGlvbjwvdHQ+IGNhbGwuIEZvciB0aGlzLCBhCis8dHQ+YnJsYXBpX2Nvbm5lY3Rpb25TZXR0aW5nc190PC90dD4gdmFyaWFibGUgbXVzdCBiZSBmaWxsZWQgd2hpY2ggd2lsbCBob2xkIHRoZQorc2V0dGluZ3MgdGhlIGxpYnJhcnkgbmVlZHMgdG8gY29ubmVjdCB0byB0aGUgc2VydmVyLiBKdXN0IGdpdmluZyA8dHQvTlVMTC8KK3dpbGwgd29yayBmb3IgbG9jYWwgdXNlLiBUaGUgb3RoZXIgcGFyYW1ldGVyIGxldHMgeW91IGdldCBiYWNrIHRoZSBwYXJhbWV0ZXJzCit3aGljaCB3ZXJlIGFjdHVhbGx5IHVzZWQgdG8gaW5pdGlhbGl6ZSBjb25uZWN0aW9uLiA8dHQvTlVMTC8gd2lsbCBhbHNvIGJlIG5pY2UKK2ZvciBub3cuCisKKzx0c2NyZWVuPjxjb2RlPgorICBpZiAoYnJsYXBpX29wZW5Db25uZWN0aW9uKE5VTEwsIE5VTEwpPDApIHsKKyAgICBicmxhcGlfcGVycm9yKCJicmxhcGlfb3BlbkNvbm5lY3Rpb24iKTsKKyAgICBleGl0KDEpOworICB9Cis8L2NvZGU+PC90c2NyZWVuPgorCitUaGUgY29ubmVjdGlvbiBtaWdodCBmYWlsLCBzbyB0ZXN0aW5nIGlzIG5lZWRlZC4KKworPHNlY3QxPkdldHRpbmcgZHJpdmVyIG5hbWUKKworPHA+S25vd2luZyB0aGUgdHlwZSBvZiB0aGUgYnJhaWxsZSBkZXZpY2UgbWlnaHQgYmUgdXNlZnVsOgorCis8dHNjcmVlbj48Y29kZT4KKyAgY2hhciBuYW1lW0JSTEFQSV9NQVhOQU1FTEVOR1RIKzFdOworICBpZiAoYnJsYXBpX2dldERyaXZlck5hbWUobmFtZSwgc2l6ZW9mKG5hbWUpKSA8IDApCisgICAgYnJsYXBpX3BlcnJvcigiYnJsYXBpX2dldERyaXZlck5hbWUiKTsKKyAgZWxzZQorICAgIGZwcmludGYoc3RkZXJyLCAiRHJpdmVyIG5hbWU6ICVzXG4iLCBuYW1lKTsKKzwvY29kZT48L3RzY3JlZW4+CisKK1RoaXMgaXMgcGFydGljdWxhcmx5IHVzZWZ1bCBiZWZvcmUgZW50ZXJpbmcgcmF3IG1vZGUgdG8gYWNoaWV2ZSBmaWxlCit0cmFuc2ZlcnMgZm9yIGluc3RhbmNlLCBqdXN0IHRvIGNoZWNrIHRoYXQgdGhlIGRldmljZSBpcyByZWFsbHkgdGhlIG9uZQorZXhwZWN0ZWQuCisKKzxzZWN0MT5HZXR0aW5nIGRpc3BsYXkgc2l6ZQorCis8cD5CZWZvcmUgd3JpdGluZyBvbiB0aGUgYnJhaWxsZSBkaXNwbGF5LCB0aGUgc2l6ZSBzaG91bGQgYmUgYWx3YXlzIGZpcnN0CitjaGVja2VkIHRvIGJlIHN1cmUgZXZlcnl0aGluZyB3aWxsIGhvbGQgb24gaXQ6CisKKzx0c2NyZWVuPjxjb2RlPgorICBpZiAoYnJsYXBpX2dldERpc3BsYXlTaXplKCZhbXA7eCwgJmFtcDt5KSA8IDApCisgICAgYnJsYXBpX3BlcnJvcigiYnJsYXBpX2dldERpc3BsYXlTaXplIik7CisgIGVsc2UKKyAgICBmcHJpbnRmKHN0ZGVyciwgIkJyYWlsbGUgZGlzcGxheSBoYXMgJWQgbGluZSVzIG9mICVkIGNvbHVtbiVzXG4iLAorICAgICAgeSwgeT4xPyJzIjoiIiwgeCwgeD4xPyJzIjoiIik7Cis8L2NvZGU+PC90c2NyZWVuPgorCis8c2VjdDE+RW50ZXJpbmcgcmF3IG1vZGUsIGltbWVkaWF0ZWx5IGxlYXZpbmcgcmF3IG1vZGUuCisKKzxwPkVudGVyaW5nIHJhdyBtb2RlIGlzIHZlcnkgc2ltcGxlOgorCis8dHNjcmVlbj48Y29kZT4KKyAgZnByaW50ZihzdGRlcnIsICJUcnlpbmcgdG8gZW50ZXIgaW4gcmF3IG1vZGUuLi4gIik7CisgIGlmIChicmxhcGlfZW50ZXJSYXdNb2RlKG5hbWUpIDwgMCkKKyAgICBicmxhcGlfcGVycm9yKCJicmxhcGlfZW50ZXJSYXdNb2RlIik7CisgIGVsc2UgeworICAgIGZwcmludGYoc3RkZXJyLCAiT2ssIGxlYXZpbmcgcmF3IG1vZGUgaW1tZWRpYXRlbHlcbiIpOworICAgIGJybGFwaV9sZWF2ZVJhd01vZGUoKTsKKyAgfQorPC9jb2RlPjwvdHNjcmVlbj4KKworTm90IGV2ZXJ5IGRyaXZlciBzdXBwb3J0cyByYXcgbW9kZSwgc28gdGVzdGluZyBpcyBuZWVkZWQuCisKK1doaWxlIGluIHJhdyBtb2RlLCA8dHQ+YnJsYXBpX3NlbmRSYXc8L3R0PiBhbmQgPHR0PmJybGFwaV9yZWN2UmF3PC90dD4KK2NhbiBiZSB1c2VkIHRvIHNlbmQgYW5kIGdldCBkYXRhIGRpcmVjdGx5IHRvIGFuZCBmcm9tIHRoZSBkZXZpY2UuCitJdCBzaG91bGQgYmUgdXNlZCB3aXRoIGNhcmUsIGltcHJvcGVyIHVzZSBtaWdodCBjb21wbGV0ZWx5IHRocmFzaCB0aGUgZGV2aWNlIQorCis8c2VjdDE+R2V0dGluZyB0dHkgY29udHJvbAorCis8cD5MZXQncyBub3cgZGlzcGxheSBzb21ldGhpbmcgb24gdGhlIGRldmljZS4gY29udHJvbCBvZiB0aGUgdHR5IG11c3QgYmUgZ2V0CitmaXJzdDoKKworPHRzY3JlZW4+PGNvZGU+CisgIGZwcmludGYoc3RkZXJyLCAiVGFraW5nIGNvbnRyb2wgb2YgdGhlIHR0eS4uLiAiKTsKKyAgaWYgKGJybGFwaV9lbnRlclR0eU1vZGUoQlJMQVBJX1RUWV9ERUZBVUxULCBOVUxMKSA+PSAwKQorICB7CisgICAgZnByaW50ZihzdGRlcnIsICJPa1xuIik7Cis8L2NvZGU+PC90c2NyZWVuPgorCitUaGUgZmlyc3QgcGFyYW1ldGVyIHRlbGxzIHRoZSBzZXJ2ZXIgdGhlIG51bWJlciBvZiB0aGUgdHR5IHRvIHRha2UKK2NvbnRyb2wgb2YuIFNldHRpbmcgQlJMQVBJX1RUWV9ERUZBVUxUIGxldHMgdGhlIGxpYnJhcnkgZGV0ZXJtaW5lIGl0IGZvciB1cy4KKworPHA+VGhlIHNlcnZlciBpcyBhc2tlZCB0byBzZW5kIDxlbS9icmx0dHkvIGNvbW1hbmRzLCB3aGljaCBhcmUgZGV2aWNlLWluZGVwZW5kZW50LgorCis8cD5HZXR0aW5nIGNvbnRyb2wgbWlnaHQgZmFpbCBpZiwgZm9yIGluc3RhbmNlLCBhbm90aGVyIGFwcGxpY2F0aW9uIGFscmVhZHkgdG9vaworY29udHJvbCBvZiB0aGlzIHR0eSwgc28gdGVzdGluZyBpcyBuZWVkZWQuCisKKzxwPkZyb20gbm93IG9uLCB0aGUgYnJhaWxsZSBkaXNwbGF5IGlzIGRldGFjaGVkIGZyb20gdGhlIHNjcmVlbi4KKworPHNlY3QxPldyaXRpbmcgc29tZXRoaW5nIG9uIHRoZSBkaXNwbGF5CisKKzxwPlRoZSBhcHBsaWNhdGlvbiBjYW4gbm93IHdyaXRlIHRoaW5ncyBvbiB0aGUgYnJhaWxsZSBkaXNwbGF5IHdpdGhvdXQKK2FsdGVyaW5nIHRoZSBzY3JlZW4gZGlzcGxheToKKworPHRzY3JlZW4+PGNvZGU+CisgICAgZnByaW50ZihzdGRlcnIsICJXcml0aW5nIHRvIGJyYWlsbGUgZGlzcGxheS4uLiAiKTsKKyAgICBpZiAoYnJsYXBpX3dyaXRlVGV4dCgwLCAiUHJlc3MgYSBicmFpbGxlIGtleSB0byBjb250aW51ZS4uLiIpID49IDApCisgICAgeworICAgICAgZnByaW50ZihzdGRlcnIsICJPa1xuIik7Cis8L2NvZGU+PC90c2NyZWVuPgorCitUaGUgY3Vyc29yIGlzIGFsc28gYXNrZWQgPGVtL25vdC8gdG8gYmUgc2hvd246IGl0cyBwb3NpdGlvbiBpcyBzZXQgdG8gMC4KKworPHA+IldyaXRpbmcgdG8gYnJhaWxsZSBkaXNwbGF5Li4uIE9rIiBpcyBub3cgZGlzcGxheWVkIG9uIHRoZSBzY3JlZW4sIGFuZAorIlByZXNzIGEgYnJhaWxsZSBrZXkgdG8gY29udGludWUuLi4iIG9uIHRoZSBicmFpbGxlIGRpc3BsYXkuCisKKzxzZWN0MT5XYWl0aW5nIGZvciBhIGtleSBwcmVzcworCis8cD5UbyBoYXZlIGEgYnJlYWsgZm9yIHRoZSB1c2VyIHRvIGJlIGFibGUgdG8gcmVhZCB0aGVzZSBtZXNzYWdlcywKK2Ega2V5IHByZXNzIChhIGNvbW1hbmQgaGVyZSwgd2hpY2ggaXMgZHJpdmVyLWluZGVwZW5kZW50KSBtYXkgYmUgd2FpdGVkIGZvcjoKKworPHRzY3JlZW4+PGNvZGU+CisgICAgICBmcHJpbnRmKHN0ZGVyciwgIldhaXRpbmcgdW50aWwgYSBicmFpbGxlIGtleSBpcyBwcmVzc2VkIHRvIGNvbnRpbnVlLi4uICIpOworICAgICAgaWYgKGJybGFwaV9yZWFkS2V5KDEsICZhbXA7a2V5KSA+IDApCisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiZ290IGl0ISAoY29kZT0lIkJSTEFQSV9QUkl4S0VZQ09ERSIpXG4iLCBrZXkpOworPC9jb2RlPjwvdHNjcmVlbj4KKworVGhlIGNvbW1hbmQgaXMgcmV0dXJuZWQsIGFzIGRlc2NyaWJlZCBpbiA8dHQ+Jmx0O2JybGFwaV9jb25zdGFudHMuaD48L3R0PgorYW5kIDx0dD4mbHQ7YnJsYXBpX2tleWNvZGVzLmg+PC90dD4uCitJdCBpcyBub3QgdHJhbnNtaXR0ZWQgdG8gPGVtL2JybHR0eS86IGl0IGlzIHVwIHRvIHRoZSBhcHBsaWNhdGlvbiB0byBkZWZpbmUKK3RoZSBiZWhhdmlvciwgaGVyZSBjbGVhbmx5IGV4aXR0aW5nLCBhcyBkZXNjcmliZWQgYmVsb3cuCisKK1RoZSBmaXJzdCBwYXJhbWV0ZXIgdGVsbHMgdGhlIGxpYiB0byBibG9jayB1bnRpbCBhIGtleSBwcmVzcyBpcyBpbmRlZWQgcmVhZC4KKworPHNlY3QxPlVuZGVyc3RhbmRpbmcgY29tbWFuZHMKKworPHA+VGhlcmUgYXJlIHR3byBraW5kcyBvZiBjb21tYW5kczogYnJhaWxsZSBjb21tYW5kcyAobGluZSB1cC9kb3duLCB0b3AvYm90dG9tLAorZXRjLikgYW5kIFggS2V5c3ltcyAoaS5lLiByZWd1bGFyIGtleWJvYXJkIGtleXMpLiBPbmUgd2F5IHRvIGRpc2NvdmVyIHdoaWNoIGtleQord2FzIHByZXNzZWQgaXMgdG8ganVzdCB1c2UgYSBzd2l0Y2ggc3RhdGVtZW50OiAKKworPHRzY3JlZW4+PGNvZGU+CisgICAgICAgIHN3aXRjaChrZXkpIHsKKwkgIGNhc2UgQlJMQVBJX0tFWV9UWVBFX0NNRHxCUkxBUElfS0VZX0NNRF9MTlVQOgorCSAgICBmcHJpbnRmKHN0ZGVyciwgImxpbmUgdXBcbiIpOworCSAgICBicmVhazsKKwkgIGNhc2UgQlJMQVBJX0tFWV9UWVBFX0NNRHxCUkxBUElfS0VZX0NNRF9MTkROOgorCSAgICBmcHJpbnRmKHN0ZGVyciwgImxpbmUgZG93blxuIik7CisJICAgIGJyZWFrOworCSAgY2FzZSBCUkxBUElfS0VZX1RZUEVfU1lNfFhLX1RhYjoKKwkgICAgZnByaW50ZihzdGRlcnIsICJ0YWJcbiIpOworCSAgICBicmVhazsKKwkgIGRlZmF1bHQ6CisJICAgIGZwcmludGYoc3RkZXJyLCAidW5rbm93biBrZXlcbiIpOworCSAgICBicmVhazsKKwl9Cis8L2NvZGU+PC90c2NyZWVuPgorCitBbm90aGVyIHdheSBpcyB0byBhc2sgQnJsQVBJIHRvIGV4cGFuZCB0aGUga2V5Y29kZSBpbnRvIHNlcGFyYXRlIGluZm9ybWF0aW9uCitwYXJ0czoKKworPHRzY3JlZW4+PGNvZGU+CisgICAgICAgIGJybGFwaV9leHBhbmRlZEtleUNvZGVfdCBla2V5OworCWJybGFwaV9leHBhbmRLZXlDb2RlKGtleSwgJmFtcDtla2V5KTsKKwlmcHJpbnRmKHN0ZGVyciwgInR5cGUgJXUsIGNvbW1hbmQgJXUsIGFyZ3VtZW50ICV1LCBmbGFncyAldVxuIiwKKwkgIGVrZXkudHlwZSwgZWtleS5jb21tYW5kLCBla2V5LmFyZ3VtZW50LCBla2V5LmZsYWdzKTsKKzwvY29kZT48L3RzY3JlZW4+CisKK0V2ZW50dWFsbHksIG5hbWVkIGVxdWl2YWxlbnRzIGFyZSBwcm92aWRlZDoKKworPHRzY3JlZW4+PGNvZGU+CisgICAgICAgIGJybGFwaV9kZXNjcmliZWRLZXlDb2RlX3QgZGtleTsKKwlpbnQgaTsKKworCWJybGFwaV9kZXNjcmliZUtleUNvZGUoa2V5LCAmYW1wO2RrZXkpOworCWZwcmludGYoc3RkZXJyLCAidHlwZSAlcywgY29tbWFuZCAlcywgYXJndW1lbnQgJXUsIGZsYWdzIiwKKwkgIGRrZXkudHlwZSwgZGtleS5jb21tYW5kLCBka2V5LmFyZ3VtZW50KTsKKwlmb3IgKGkgPSAwOyBpIDwgZGtleS5mbGFnczsgaSsrKQorCSAgZnByaW50ZihzdGRlcnIsICIgJXMiLCBka2V5LmZsYWdbaV0pOworCWZwcmludGYoc3RkZXJyLCAiXG4iKTsKKzwvY29kZT48L3RzY3JlZW4+CisKKworCisKKzxzZWN0MT5MZWF2aW5nIHR0eSBjb250cm9sCisKKzxwPkxldCdzIG5vdyBsZWF2ZSB0aGUgdHR5OgorCis8dHNjcmVlbj48Y29kZT4KKyAgICBmcHJpbnRmKHN0ZGVyciwgIkxlYXZpbmcgdHR5Li4uICIpOworICAgIGlmIChicmxhcGlfbGVhdmVUdHlNb2RlKCkgPj0gMCkKKyAgICAgIGZwcmludGYoc3RkZXJyLCAiT2tcbiIpOworPC9jb2RlPjwvdHNjcmVlbj4KKworQnV0IGNvbnRyb2wgb2YgYW5vdGhlciB0dHkgY2FuIHN0aWxsIGJlIGdldCBmb3IgaW5zdGFuY2UsIGJ5IGNhbGxpbmcKKzx0dD5icmxhcGlfZW50ZXJUdHlNb2RlKCk8L3R0PiBhZ2Fpbi4uLgorCis8c2VjdDE+RGlzY29ubmVjdGluZyBmcm9tIDxlbS9CcmxBUEkvCisKKzxwPkxldCdzIGRpc2Nvbm5lY3QgZnJvbSA8ZW0vQnJsQVBJLzoKKworPHRzY3JlZW4+PGNvZGU+CisgIGJybGFwaV9jbG9zZUNvbm5lY3Rpb24oKTsKKzwvY29kZT48L3RzY3JlZW4+CisKK1RoZSBhcHBsaWNhdGlvbiBjYW4gYXMgd2VsbCBzdGlsbCBuZWVkIHRvIGNvbm5lY3QgdG8gYW5vdGhlciBzZXJ2ZXIgb24gYW5vdGhlcgorY29tcHV0ZXIgZm9yIGluc3RhbmNlLCBieSBjYWxsaW5nIDx0dD5icmxhcGlfb3BlbkNvbm5lY3Rpb24oKTwvdHQ+CithZ2Fpbi4uLgorCis8c2VjdDE+UHV0dGluZyBldmVyeXRoaW5nIHRvZ2V0aGVyLi4uCisKKzxwPgorPHRzY3JlZW4+PGNvZGU+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxicmxhcGkuaD4KKworaW50IG1haW4oKQoreworICBicmxhcGlfa2V5Q29kZV90IGtleTsKKyAgY2hhciBuYW1lW0JSTEFQSV9NQVhOQU1FTEVOR1RIKzFdOworICB1bnNpZ25lZCBpbnQgeCwgeTsKKworLyogQ29ubmVjdCB0byBCcmxBUEkgKi8KKyAgaWYgKGJybGFwaV9vcGVuQ29ubmVjdGlvbihOVUxMLCBOVUxMKTwwKQorICB7CisgICAgYnJsYXBpX3BlcnJvcigiYnJsYXBpX29wZW5Db25uZWN0aW9uIik7CisgICAgZXhpdCgxKTsKKyAgfQorCisvKiBHZXQgZHJpdmVyIG5hbWUgKi8KKyAgaWYgKGJybGFwaV9nZXREcml2ZXJOYW1lKG5hbWUsIHNpemVvZihuYW1lKSkgPCAwKQorICAgIGJybGFwaV9wZXJyb3IoImJybGFwaV9nZXREcml2ZXJOYW1lIik7CisgIGVsc2UKKyAgICBmcHJpbnRmKHN0ZGVyciwgIkRyaXZlciBuYW1lOiAlc1xuIiwgbmFtZSk7CisKKy8qIEdldCBkaXNwbGF5IHNpemUgKi8KKyAgaWYgKGJybGFwaV9nZXREaXNwbGF5U2l6ZSgmYW1wO3gsICZhbXA7eSkgPCAwKQorICAgIGJybGFwaV9wZXJyb3IoImJybGFwaV9nZXREaXNwbGF5U2l6ZSIpOworICBlbHNlCisgICAgZnByaW50ZihzdGRlcnIsICJCcmFpbGxlIGRpc3BsYXkgaGFzICVkIGxpbmUlcyBvZiAlZCBjb2x1bW4lc1xuIiwKKyAgICAgIHksIHk+MT8icyI6IiIsIHgsIHg+MT8icyI6IiIpOworCisvKiBUcnkgZW50ZXJpbmcgcmF3IG1vZGUsIGltbWVkaWF0ZWx5IGdvIG91dCBmcm9tIHJhdyBtb2RlICovCisgIGZwcmludGYoc3RkZXJyLCAiVHJ5aW5nIHRvIGVudGVyIGluIHJhdyBtb2RlLi4uICIpOworICBpZiAoYnJsYXBpX2VudGVyUmF3TW9kZShuYW1lKSA8IDApCisgICAgYnJsYXBpX3BlcnJvcigiYnJsYXBpX2VudGVyUmF3TW9kZSIpOworICBlbHNlIHsKKyAgICBmcHJpbnRmKHN0ZGVyciwgIk9rLCBsZWF2aW5nIHJhdyBtb2RlIGltbWVkaWF0ZWx5XG4iKTsKKyAgICBicmxhcGlfbGVhdmVSYXdNb2RlKCk7CisgIH0KKworLyogR2V0IHR0eSBjb250cm9sICovCisgIGZwcmludGYoc3RkZXJyLCAiVGFraW5nIGNvbnRyb2wgb2YgdGhlIHR0eS4uLiAiKTsKKyAgaWYgKGJybGFwaV9lbnRlclR0eU1vZGUoQlJMQVBJX1RUWV9ERUZBVUxULCBOVUxMKSA+PSAwKQorICB7CisgICAgZnByaW50ZihzdGRlcnIsICJPa1xuIik7CisKKy8qIFdyaXRlIHNvbWV0aGluZyBvbiB0aGUgZGlzcGxheSAqLworICAgIGZwcmludGYoc3RkZXJyLCAiV3JpdGluZyB0byBicmFpbGxlIGRpc3BsYXkuLi4gIik7CisgICAgaWYgKGJybGFwaV93cml0ZVRleHQoMCwgIlByZXNzIGEgYnJhaWxsZSBrZXkgdG8gY29udGludWUuLi4iKSA+PSAwKQorICAgIHsKKyAgICAgIGZwcmludGYoc3RkZXJyLCAiT2tcbiIpOworCisvKiBXYWl0IGZvciBhIGtleSBwcmVzcyAqLworICAgICAgZnByaW50ZihzdGRlcnIsICJXYWl0aW5nIHVudGlsIGEgYnJhaWxsZSBrZXkgaXMgcHJlc3NlZCB0byBjb250aW51ZS4uLiAiKTsKKyAgICAgIGlmIChicmxhcGlfcmVhZEtleSgxLCAmYW1wO2tleSkgPiAwKSB7CisgICAgICAgIGJybGFwaV9leHBhbmRlZEtleUNvZGVfdCBla2V5OworICAgICAgICBicmxhcGlfZGVzY3JpYmVkS2V5Q29kZV90IGRrZXk7CisJaW50IGk7CisKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJnb3QgaXQhIChjb2RlPSUiQlJMQVBJX1BSSXhLRVlDT0RFIilcbiIsIGtleSk7CisKKwlicmxhcGlfZXhwYW5kS2V5Q29kZShrZXksICZhbXA7ZWtleSk7CisJZnByaW50ZihzdGRlcnIsICJ0eXBlICV1LCBjb21tYW5kICV1LCBhcmd1bWVudCAldSwgZmxhZ3MgJXVcbiIsCisJICBla2V5LnR5cGUsIGVrZXkuY29tbWFuZCwgZWtleS5hcmd1bWVudCwgZWtleS5mbGFncyk7CisKKwlicmxhcGlfZGVzY3JpYmVLZXlDb2RlKGtleSwgJmFtcDtka2V5KTsKKwlmcHJpbnRmKHN0ZGVyciwgInR5cGUgJXMsIGNvbW1hbmQgJXMsIGFyZ3VtZW50ICV1LCBmbGFncyIsCisJICBka2V5LnR5cGUsIGRrZXkuY29tbWFuZCwgZGtleS5hcmd1bWVudCk7CisJZm9yIChpID0gMDsgaSA8IGRrZXkuZmxhZ3M7IGkrKykKKwkgIGZwcmludGYoc3RkZXJyLCAiICVzIiwgZGtleS5mbGFnW2ldKTsKKwlmcHJpbnRmKHN0ZGVyciwgIlxuIik7CisgICAgICB9IGVsc2UgYnJsYXBpX3BlcnJvcigiYnJsYXBpX3JlYWRLZXkiKTsKKworICAgIH0gZWxzZSBicmxhcGlfcGVycm9yKCJicmxhcGlfd3JpdGVUZXh0Iik7CisKKy8qIExlYXZlIHR0eSBjb250cm9sICovCisgICAgZnByaW50ZihzdGRlcnIsICJMZWF2aW5nIHR0eS4uLiAiKTsKKyAgICBpZiAoYnJsYXBpX2xlYXZlVHR5TW9kZSgpID49IDApCisgICAgICBmcHJpbnRmKHN0ZGVyciwgIk9rXG4iKTsKKyAgICBlbHNlIGJybGFwaV9wZXJyb3IoImJybGFwaV9sZWF2ZVR0eU1vZGUiKTsKKworICB9IGVsc2UgYnJsYXBpX3BlcnJvcigiYnJsYXBpX2VudGVyVHR5TW9kZSIpOworCisvKiBEaXNjb25uZWN0IGZyb20gQnJsQVBJICovCisgIGJybGFwaV9jbG9zZUNvbm5lY3Rpb24oKTsKKyAgcmV0dXJuIDA7Cit9Cis8L2NvZGU+PC90c2NyZWVuPgorCitUaGlzIHNob3VsZCBjb21waWxlIHdlbGwgdGhhbmtzIHRvCis8dHQ+Z2NjIGFwaWNsaWVudC5jIC1vIGFwaWNsaWVudCAtbGJybGFwaTwvdHQ+CisKKzwhLS0tLT4KKzxzZWN0PldyaXRpbmcgKDxlbS9CcmxBUEkvLWNvbXBsaWFudCkgZHJpdmVycyBmb3IgPGVtL2JybHR0eS88bGFiZWwgaWQ9InNlYy1kcml2ZXJzIj4KKzwhLS0tLT4KKzwhLS0gU2ViIC0tPgorCis8cD5JbiB0aGlzIGNoYXB0ZXIsIHdlIHdpbGwgZGVzY3JpYmUgaW4gZGV0YWlscyBob3cgdG8gd3JpdGUgYQorZHJpdmVyIGZvciA8ZW0vYnJsdHR5Ly4gV2UgYmVnaW4gd2l0aCBhIGdlbmVyYWwgZGVzY3JpcHRpb24gb2YgdGhlCitzdHJ1Y3R1cmUgdGhlIGRyaXZlciBzaG91bGQgaGF2ZSwgYmVmb3JlIGV4cGxhaW5pbmcgbW9yZSBwcmVjaXNlbHkKK3doYXQgZWFjaCBmdW5jdGlvbiBpcyBzdXBwb3NlZCB0byBkby4KKworPHNlY3QxPk92ZXJ2aWV3IG9mIHRoZSBkcml2ZXIncyBzdHJ1Y3R1cmUKKworPHA+QSBicmFpbGxlIGRyaXZlciBpcyBpbiBmYWN0IGEgbGlicmFyeSB0aGF0IGlzIGVpdGhlcgorZHluYW1pY2FsbHkgbG9hZGVkIGJ5IDxlbS9icmx0dHkvIGF0IHN0YXJ0dXAsIG9yIHN0YXRpY2FsbHkgbGlua2VkIHRvCitpdCBkdXJpbmcgdGhlIGNvbXBpbGF0aW9uLCBkZXBlbmRpbmcgb24gdGhlIG9wdGlvbnMgZ2l2ZW4gdG8gdGhlCis8dHQ+Li9jb25maWd1cmU8L3R0PiBzY3JpcHQuCisKK1RoaXMgbGlicmFyeSBoYXMgdG8gcHJvdmlkZSBldmVyeSBmdW5jdGlvbiBuZWVkZWQgYnkgdGhlIGNvcmUsCitwbHVzIHNvbWUgYWRkaXRpb25hbCBmdW5jdGlvbnMsIHRoYXQgYXJlIG5vdCBtYW5kYXRvcnksIGJ1dCB3aGljaAoraW1wcm92ZSBjb21tdW5pY2F0aW9uIHdpdGggPGVtL0JybEFQSS8gYW5kIHRoZSBzZXJ2aWNlIGxldmVsIHByb3ZpZGVkCit0byBjbGllbnQgYXBwbGljYXRpb25zLgorCitCYXNpY2FsbHksIGEgZHJpdmVyIGxpYnJhcnkgbmVlZHMgdG8gcHJvdmlkZSBhIGZ1bmN0aW9uIHRvIG9wZW4KK3RoZSBjb21tdW5pY2F0aW9uIHdpdGggdGhlIGJyYWlsbGUgdGVybWluYWwsIG9uZSB0byBjbG9zZSB0aGlzCitjb21tdW5pY2F0aW9uLCBvbmUgdG8gcmVhZCBrZXkgY29kZXMgZnJvbSB0aGUgYnJhaWxsZSBrZXlib2FyZCwgYW5kCitvbmUgdG8gd3JpdGUgdGV4dCBvbiB0aGUgYnJhaWxsZSBkaXNwbGF5LiBBcyB3ZSB3aWxsIHNlZSBpbiBhCittb21lbnQsIG90aGVyIGZ1bmN0aW9ucyBhcmUgcmVxdWlyZWQuCisKK01vcmVvdmVyLCBhIGRyaXZlciBjYW4gcHJvdmlkZSBhZGRpdGlvbmFsIGZ1bmN0aW9uYWxpdGllcywgYnkKK2RlZmluaW5nIHNvbWUgbWFjcm9zIGFzc2VydGluZyB0aGF0IGl0IGhhcyB0aGVzZSBmdW5jdGlvbmFsaXRpZXMsCithbmQgYnkgZGVmaW5pbmcgYXNzb2NpYXRlZCBmdW5jdGlvbnMuCisKKzxzZWN0MT5CYXNpYyBkcml2ZXIgc3RydWN0dXJlCisKKzxwPjxlbT5FdmVyeTwvZW0+IDxlbS9icmx0dHkvIGRyaXZlciA8ZW0+bXVzdDwvZW0+IGNvbnNpc3QgaW4gYXQgbGVhc3QKK2EgZmlsZSBjYWxsZWQgYnJhaWxsZS5jLCBsb2NhdGVkIGluIGFuIGFwcHJvcHJpYXRlIHN1YmRpcmVjdG9yeSBvZgordGhlIEJyYWlsbGVEcml2ZXJzIHN1YmRpcmVjdG9yeS4gVGhpcyBicmFpbGxlLmMgZmlsZSBtdXN0IGhhdmUgdGhlCitmb2xsb3dpbmcgbGF5b3V0CisKKzx2ZXJiPgorICAgICNpbmNsdWRlICJwcm9sb2d1ZS5oIgorICAgIC8qIEluY2x1ZGUgc3RhbmRhcmQgQyBoZWFkZXJzICovCisgICAgI2luY2x1ZGUgIlByb2dyYW1zL2JybC5oIgorICAgICNpbmNsdWRlICJQcm9ncmFtcy9taXNjLmgiCisgICAgI2luY2x1ZGUgIlByb2dyYW1zL3Njci5oIgorICAgICNpbmNsdWRlICJQcm9ncmFtcy9tZXNzYWdlLmgiCisgICAgLyogSW5jbHVkZSBvdGhlciBmaWxlcyAqLworCisgICAgc3RhdGljIHZvaWQgYnJsX2lkZW50aWZ5KCkgeyB9CisKKyAgICBzdGF0aWMgaW50IGJybF9vcGVuKEJyYWlsbGVEaXNwbGF5ICpicmwsIGNoYXIgKipwYXJhbWV0ZXJzLCBjb25zdCBjaGFyICp0dHkpIHsgLi4uIH0KKworICAgIHN0YXRpYyB2b2lkIGJybF9jbG9zZShCcmFpbGxlRGlzcGxheSAqYnJsKSB7IC4uLiB9CisKKyAgICBzdGF0aWMgdm9pZCBicmxfd3JpdGVXaW5kb3coQnJhaWxsZURpc3BsYXkgKmJybCkgeyAuLi4gfQorCisgICAgc3RhdGljIHZvaWQgYnJsX3dyaXRlU3RhdHVzKEJyYWlsbGVEaXNwbGF5ICpicmwpIHsgLi4uIH0KKworICAgIHN0YXRpYyBpbnQgYnJsX3JlYWRDb21tYW5kKEJyYWlsbGVEaXNwbGF5ICpicmwsIERyaXZlckNvbW1hbmRDb250ZXh0IGNvbnRleHQpIHsgLi4uIH0KKzwvdmVyYj4KKworQmVmb3JlIGdpdmluZyBhIGRldGFpbGVkIGRlc2NyaXB0aW9uIG9mIHdoYXQgZWFjaCBmdW5jdGlvbiBpcworc3VwcG9zZWQgdG8gZG8sIHdlIGRlZmluZSB0aGUgPHR0PkJyYWlsbGVEaXNwbGF5PC90dD4gc3RydWN0dXJlLAorc2luY2UgZWFjaCBmdW5jdGlvbiBoYXMgYW4gYXJndW1lbnQgb2YgdHlwZSA8dHQ+QnJhaWxsZURpc3BsYXkKKyo8L3R0Pi4gVGhlIDx0dD5CcmFpbGxlRGlzcGxheTwvdHQ+IHN0cnVjdHVyZSBpcyBkZWZpbmVkIGxpa2UgdGhpczoKKworPHZlcmI+CisgICAgdHlwZWRlZiBzdHJ1Y3QgeworCisgICAgICBpbnQgeCwgeTsgLyogVGhlIGRpbWVuc2lvbnMgb2YgdGhlIGRpc3BsYXkgKi8KKworICAgICAgaW50IGhlbHBQYWdlOyAvKiBUaGUgcGFnZSBudW1iZXIgd2l0aGluIHRoZSBoZWxwIGZpbGUgKi8KKworICAgICAgdW5zaWduZWQgY2hhciAqYnVmZmVyOyAvKiBUaGUgY29udGVudHMgb2YgdGhlIGRpc3BsYXkgKi8KKworICAgICAgdW5zaWduZWQgaXNDb3JlQnVmZmVyOjE7IC8qIFRoZSBjb3JlIGFsbG9jYXRlZCB0aGUgYnVmZmVyICovCisKKyAgICAgIHVuc2lnbmVkIHJlc2l6ZVJlcXVpcmVkOjE7IC8qIFRoZSBkaXNwbGF5IHNpemUgaGFzIGNoYW5nZWQgKi8KKworICAgICAgdW5zaWduZWQgaW50IHdyaXRlRGVsYXk7CisKKyAgICAgIHZvaWQgKCpidWZmZXJSZXNpemVkKShpbnQgcm93cywgaW50IGNvbHVtbnMpOworCisgICAgfSBCcmFpbGxlRGlzcGxheTsKKzwvdmVyYj4KKworV2Ugbm93IGRlc2NyaWJlIGVhY2ggZnVuY3Rpb24ncyBzZW1hbnRpY3MgYW5kIGNhbGxpbmcKK2NvbnZlbnRpb24uCisKK1RoZSA8dHQvYnJsX2lkZW50aWZ5KCkvIGZ1bmN0aW9uIHRha2VzIG5vIGFyZ3VtZW50IGFuZCByZXR1cm5zCitub3RoaW5nLiBJdCBpcyBjYWxsZWQgYXMgc29vbiBhcyB0aGUgZHJpdmVyIGlzIGxvYWRlZCwgYW5kIGl0cworcHVycG9zZSBpcyB0byBwcmludCBzb21lIGluZm9ybWF0aW9uIGFib3V0IHRoZSBkcml2ZXIgaW4gdGhlIHN5c3RlbQorbG9nLiBUbyBhY2hpZXZlIHRoaXMsIHRoZSBvbmx5IHRoaW5nIHRoaXMgZnVuY3Rpb24gaGFzIHRvIGRvIGlzIHRvCitjYWxsIExPR19QUklOVCB3aXRoIGFwcHJvcHJpYXRlIGFyZ3VtZW50cyAobG9nIGxldmVsIGFuZCBzdHJpbmcgdG8KK3B1dCBpbiB0aGUgc3lzbG9nKS4KKworVGhlIDx0dC9icmxfb3BlbigpLyBmdW5jdGlvbiB0YWtlcyAzIGFyZ3VtZW50cyBhbmQgcmV0dXJucyBhbiBpbnQuIEl0cworcHVycG9zZSBpcyB0byBpbml0aWFsaXplIHRoZSBjb21tdW5pY2F0aW9uIHdpdGggdGhlIGJyYWlsbGUKK3Rlcm1pbmFsLiBHZW5lcmFsbHksIHRoaXMgZnVuY3Rpb24gaGFzIHRvIG9wZW4gdGhlIGZpbGUgcmVmZXJyZWQgdG8gYnkKK3RoZSA8dHQvdHR5LyBhcmd1bWVudCwgYW5kIHRvIGNvbmZpZ3VyZSB0aGUgYXNzb2NpYXRlZCBjb21tdW5pY2F0aW9uCitwb3J0LiBUaGUgPHR0L3BhcmFtZXRlcnMvIGFyZ3VtZW50IGNvbnRhaW5zIHBhcmFtZXRlcnMgcGFzc2VkIHRvIHRoZQorZHJpdmVyIHdpdGggdGhlIC1CIGNvbW1hbmQtbGluZSBvcHRpb24uIEl0J3MgdXAgdG8gdGhlIGRyaXZlcidzCithdXRob3IgdG8gZGVjaWRlIHdldGhlciBvciBub3QgaGUvc2hlIHdhbnRzIHRvIHVzZSB0aGlzIGFyZ3VtZW50LAorYW5kIHdoYXQgZm9yLiBUaGUgZnVuY3Rpb24gY2FuIHBlcmZvcm0gc29tZSBhZGRpdGlvbmFsIHRhc2tzIHN1Y2gKK2FzIHRyeWluZyB0byBpZGVudGlmeSBwcmVjaXNlbHkgd2hpY2ggYnJhaWxsZSB0ZXJtaW5hbCBtb2RlbCBpcworY29ubmVjdGVkIHRvIHRoZSBjb21wdXRlciwgYnkgc2VuZGluZyBpdCBhIHJlcXVlc3QgYW5kIGFuYWx5emluZyBpdHMKK2Fuc3dlci4gVGhlIHZhbHVlIHRoYXQgaXMgZmluYWxseSByZXR1cm5lZCBkZXBlbmRzIG9uIHRoZSBzdWNjZXNzIG9mCit0aGUgaW5pdGlhbGl6YXRpb24gcHJvY2Vzcy4gSWYgaXQgZmFpbHMsIHRoIGZ1bmN0aW9uIGhhcyB0byByZXR1cm4KKy0xLiBUaGUgZnVuY3Rpb24gcmV0dXJucyAwIG9uIHN1Y2Nlc3MuCisKK1RoZSA8dHQvYnJsX2Nsb3NlKCkvIGZ1bmN0aW9uIHRha2VzIGp1c3Qgb25lIGFyZ3VtZW50LCBhbmQgcmV0dXJucworbm90aGluZy4gVGhlIG5hbWUgb2YgdGhpcyBmdW5jdGlvbiBzaG91bGQgYmUgc2VsZi1leHBsYW5hdG9yeTsgaXQncworZ29hbCBpcyB0byBjbG9zZSAoZmluaXNoKSB0aGUgY29tbXVuaWNhdGlvbiBiZXR3ZWVuIHRoZSBjb21wdXRlciBhbmQKK3RoZSBicmFpbGxlIHRlcm1pbmFsLiBJbiBnZW5lcmFsLCB0aGUgb25seSB0aGluZyB0aGlzIGZ1bmN0aW9uIGhhcwordG8gZG8gaXMgdG8gY2xvc2UgdGhlIGZpbGUgZGVzY3JpcHRvciBhc3NvY2lhdGVkIHRvIHRoZSBicmFpbGxlCit0ZXJtaW5hbCdzIGNvbW11bmljYXRpb24gcG9ydC4KKworVGhlIDx0dC9icmxfd3JpdGVXaW5kb3coKS8gZnVuY3Rpb24gdGFrZXMganVzdCBvbmUgYXJndW1lbnQgb2YgdHlwZQorQnJhaWxsZURpc3BsYXksIGFuZCByZXR1cm5zIG5vdGhpbmcuIFRoaXMgZnVuY3Rpb24gZGlzcGxheXMgdGhlCitzcGVjaWZpZWQgdGV4dCBvbiB0aGUgYnJhaWxsZSB3aW5kb3cuIFRoaXMgcm91dGluZSBpcyB0aGUgcmlnaHQKK3BsYWNlIHRvIGNoZWNrIGlmIHRoZSB0ZXh0IHRoYXQgaGFzIHRvIGJlIGRpc3BsYXllZCBpcyBub3QgYWxyZWFkeQorb24gdGhlIGJyYWlsbGUgZGlzcGxheSwgdG8gc2VuZCBpdCBvbmx5IGlmIG5lY2Vzc2FyeS4gTW9yZQorZ2VuZXJhbGx5LCBpZiB0aGUgYnJhaWxsZSB0ZXJtaW5hbCBzdXBwb3J0cyBwYXJ0aWFsIHJlZnJlc2ggb2YgdGhlCitkaXNwbGF5LCB0aGUgY2FsY3VsdXMgb2Ygd2hhdCBleGFjdGx5IGhhcyB0byBiZSBzZW50IHRvIHRoZSBicmFpbGxlCitkaXNwbGF5IHRvIGhhdmUgYSBwcm9wZXIgZGlzcGxheSwgYWNjb3JkaW5nIHRvIHdoYXQgd2FzIHByZXZpb3VzbHkKK2Rpc3BsYXllZCBzaG91bGQgYmUgZG9uZSBpbiB0aGlzIGZ1bmN0aW9uLgorCitUaGUgPHR0L2JybF93cml0ZVN0YXR1cygpLyBmdW5jdGlvbiBpcyB2ZXJ5IHNpbWlsYXIgdG8gPHR0L2JybF93cml0ZVdpbmRvdygpLy4KK1RoZSBvbmx5IGRpZmZlcmVuY2UgaXMgdGhhdCB3aGVyZWFzIDx0dC9icmxfd3JpdGVXaW5kb3coKS8gd3JpdGVzIG9uIHRoZQorbWFpbiBicmFpbGxlIGRpc3BsYXksIDx0dC9icmxfd3JpdGVTdGF0dXMoKS8gd3JpdGVzIG9uIGFuIGF1eGlsaWFyeSBicmFpbGxlCitkaXNwbGF5LCB3aGljaCBvY2Nhc2lvbmFseSBhcHBlYXJzIG9uIHNvbWUgYnJhaWxsZSB0ZXJtaW5hbHMuIFRoZQorcmVtYXJrcyB0aGF0IGhhdmUgYmVlbiBkb25lIGNvbmNlcm5pbmcgb3B0aW1pemF0aW9ucyBmb3IgcmVmcmVzaGluZwordGhlIGRpc3BsYXkgc3RpbGwgYXBwbHkgaGVyZS4KKworVGhlIDx0dC9icmxfcmVhZENvbW1hbmQoKS8gZnVuY3Rpb24gdGFrZXMgdHdvIGFyZ3VtZW50cywgYW5kIHJldHVybnMgYW4KK2ludGVnZXIuIEl0cyBwdXJwb3NlIGlzIHRvIHJlYWQgY29tbWFuZHMgZnJvbSB0aGUgYnJhaWxsZSBrZXlib2FyZAorYW5kIHRvIHBhc3MgdGhlbSB0byA8ZW0vYnJsdHR5LydzIGNvcmUsIHdoaWNoIGluIHR1cm4gd2lsbCBwcm9jZXNzIHRoZW0uCitUaGUgZmlyc3QgYXJndW1lbnQsIG9mIHR5cGUgPHR0L0JyYWlsbGVEaXNwbGF5LywgaXMgZm9yIGZ1dHVyZSB1c2UsIGFuZAorY2FuIHNhZmVseSBiZSBpZ25vcmVkIGZvciB0aGUgbW9tZW50LiBUaGUgc2Vjb25kIGFyZ3VtZW50IGluZGljYXRlcworaW4gd2hpY2ggY29udGV4dCAoc3RhdGUpIDxlbS9icmx0dHkvIGlzLiBGb3IgaW5zdGFuY2UsIGl0IHNwZWNpZmllcyBpZgorPGVtL2JybHR0eS8gaXMgaW4gYSBtZW51LCBkaXNwbGF5cyBhIGhlbHAgc2NyZWVuLCBldGMuIFRoaXMgaW5mb3JtYXRpb24KK2NhbiBpbmRlZWQgYmUgb2Ygc29tZSBpbnRlcmVzdCB3aGVuIHRyYW5zbGF0aW5nIGEga2V5IGludG8gYQorY29tbWFuZCwgZXNwZWNpYWxseSBpZiB0aGUga2V5cyBjYW4gaGF2ZSBkaWZmZXJlbnQgbWVhbmluZ3MsCitkZXBlbmRpbmcgb24gdGhlIGNvbnRleHQuIFNvLCB0aGlzIGZ1bmN0aW9uIGhhcyB0byByZWFkIGtleXByZXNzZXMKK2Zyb20gdGhlIGJyYWlsbGUga2V5Ym9hcmQsIGFuZCB0byBjb252ZXJ0IHRoZW0gaW50byBjb21tYW5kcywKK2FjY29yZGluZyB0byB0aGUgZ2l2ZW4gY29udGV4dCwgdGhlc2UgY29tbWFuZHMgdGhlbiBiZWluZyByZXR1cm5lZAordG8gPGVtL2JybHR0eS8uIEZvciBhIGNvbXBsZXRlIGxpc3Qgb2YgYXZhaWxhYmxlIGNvbW1hbmQgY29kZXMsIHBsZWFzZQoraGF2ZSBhIGxvb2sgYXQgPHR0L2JybC5oLyBpbiB0aGUgUHJvZ3JhbXMgc3ViZGlyZWN0b3J5LiBUd28gY29kZXMgaGF2ZSBzcGVjaWFsCittZWFuaW5nczoKKworPGRlc2NyaXA+CisKKzx0YWcvZW9mLyBzcGVjaWZpZXMgdGhhdCBubyBjb21tYW5kIGlzIGF2YWlsYWJsZSBub3csIGFuZCB0aGF0CitubyBrZXkgaXMgd2FpdGluZyB0byBiZSBjb252ZXJ0ZWQgaW50byBjb21tYW5kIGluIGEgbmVhciBmdXR1cmUuCisKKzx0YWcvQ01EX05PT1AvIHNwZWNpZmllcyB0aGF0IG5vIGNvbW1hbmQgaXMgYXZhaWxhYmxlLCBidXQKK3RoYXQgb25lIHdpbGwgYmUsIHNvb24uIEFzIGEgY29uc2VxdWVuY2UsIGJybF9yZWFkQ29tbWFuZCB3aWxsIGJlCitjYWxsZWQgYWdhaW4gaW1tZWRpYXRlbHkuIFJldHVybmluZyBDTURfTk9PUCBpcyBhcHByb3ByaWF0ZSBmb3IKK2luc3RhbmNlIHdoZW4gYSBrZXkgaXMgY29tcG9zZWQgb2YgdHdvIGNvbnNlY3V0aXZlIGRhdGEgcGFja2V0cy4KK1doZW4gdGhlIGZpcnN0IG9mIHRoZW0gaXMgcmVjZWl2ZWQsIG9uZSBjYW4gZXhwZWN0IHRoYXQgdGhlIHNlY29uZAord2lsbCBhcnJpdmUgcXVpY2tseSwgc28gdGhhdCB0cnlpbmcgdG8gcmVhZCBpdCBhcyBzb29uIGFzIHBvc3NpYmxlCitpcyBhIGdvb2QgaWRlYS4KKworPC9kZXNjcmlwPgorCis8c2VjdDE+RW5oYW5jZW1lbnRzIGZvciA8ZW0vQnJsQVBJLworCis8cD5UbyBpbXByb3ZlIHRoZSBsZXZlbCBvZiBzZXJ2aWNlIHByb3ZpZGVkIHRvIGNsaWVudAorYXBwbGljYXRpb25zIGNvbW11bmljYXRpbmcgd2l0aCBicmFpbGxlIGRyaXZlcnMgdGhyb3VnaCA8ZW0vQnJsQVBJLywgdGhlCitkcml2ZXJzIHNob3VsZCBkZWNsYXJlIHNvbWUgYWRkaXRpb25hbCBmdW5jdGlvbnMgdGhhdCB3aWxsIHRoZW4gYmUKK2NhbGxlZCBieSB0aGUgQVBJIHdoZW4gbmVlZGVkLgorCitGb3IgZWFjaCBhZGRpdGlvbmFsIGZlYXR1cmUgdGhhdCBoYXMgdG8gYmUgaW1wbGVtZW50ZWQgaW4gYQorZHJpdmVyLCBhIHNwZWNpZmljIG1hY3JvIG11c3QgYmUgZGVmaW5lZCwgaW4gYWRkaXRpb24gdG8gdGhlCitmdW5jdGlvbnMgaW1wbGVtZW50aW5nIHRoYXQgZmVhdHVyZS4gRm9yIHRoZSBtb21lbnQsIHR3byBmZWF0dXJlcworYXJlIHN1cHBvcnRlZCBieSA8ZW0vQnJsQVBJLzoKKworPGl0ZW1pemU+Cis8aXRlbT5yZWFkaW5nIGJyYWlsbGUgdGVybWluYWwgc3BlY2lmaWMga2V5IGNvZGVzLAorCis8aXRlbT5leGNoYW5naW5nIHJhdyBkYXRhIHBhY2tldHMgYmV0d2VlbiB0aGUgYnJhaWxsZQordGVybWluYWwgYW5kIGEgY2xpZW50IGFwcGxpY2F0aW9uIHJ1bm5pbmcgb24gdGhlIFBDLgorPC9pdGVtaXplPgorCitGb3IgZWFjaCBmZWF0dXJlIHByZXNlbnRlZCBiZWxvdywgb25seSBhIHNob3J0IGRlc2NyaXB0aW9uIG9mIGVhY2gKK2NvbmNlcm5lZCBtYWNybyBhbmQgZnVuY3Rpb24gd2lsbCBiZSBnaXZlbi4gRm9yIGEgbW9yZSBjb21wbGV0ZSBkZXNjcmlwdGlvbgorb2YgY29uY2VwdHMgdXNlZCBoZXJlLCBwbGVhc2UgcmVmZXIgdG8gY2hhcHRlcnMgPHJlZiBpZD0ic2VjLWludHJvIiBuYW1lPSJJbnRyb2R1Y3Rpb24iPiBhbmQgPHJlZiBpZD0ic2VjLWdlbmVyYWwiIG5hbWU9IkdlbmVyYWwgZGVzY3JpcHRpb24iPi4KKworPHNlY3QyPkV4Y2hhbmdpbmcgcmF3IGRhdGEgcGFja2V0cworCis8cD5VbmRlciBzb21lIGNpcmN1bXN0YW5jZXMsIGFuIGFwcGxpY2F0aW9uIHJ1bm5pbmcgb24gdGhlIFBDCitjYW4gYmUgaW50ZXJlc3RlZCBpbiBhIHJhdyBsZXZlbCBjb21tdW5pY2F0aW9uIHdpdGggdGhlIGJyYWlsbGUKK3Rlcm1pbmFsLiBGb3IgaW5zdGFuY2UsIHRvIGltcGxlbWVudCBhIGZpbGUgdHJhbnNmZXIgcHJvdG9jb2wsCitjb21tYW5kcyB0byBkaXNwbGF5IGJyYWlsbGUgb3IgdG8gcmVhZCBrZXlzIGFyZSBub3QgZW5vdWdoLiBJbgorc3VjaCBhIGNhc2UsIG9uZSBtdXN0IGhhdmUgYSB3YXkgdG8gc2VuZCByYXcgZGF0YSB0byB0aGUKK3Rlcm1pbmFsLCBhbmQgdG8gcmVjZWl2ZSB0aGVtIGZyb20gaXQuCisKK0EgZHJpdmVyIHRoYXQgd2FudHMgdG8gcHJvdmlkZSBzdWNoIGEgbWVjaGFuaXNtIGhhcyB0byBkZWZpbmUKK3RocmVlIGZ1bmN0aW9uczogb25lIHRvIHNlbmQgcGFja2V0cywgYW5vdGhlciBvbmUgdG8gcmVjZWl2ZSB0aGVtLAorYW5kIHRoZSBsYXN0IG9uZSB0byByZXNldCB0aGUgY29tbXVuaWNhdGlvbiB3aGVuIHByb2JsZW1zIG9jY3VyLgorCitUaGUgbWFjcm8gdGhhdCBkZWNsYXJlcyB0aGF0IGEgZHJpdmVyIGlzIGFibGUgdG8gdHJhbnNtaXQgcGFja2V0cworaXM6CisKKzx2ZXJiPgorI2RlZmluZSBCUkxfSEFWRV9QQUNLRVRfSU8KKzwvdmVyYj4KKworVGhlIHByb3RvdHlwZXMgb2YgdGhlIGZ1bmN0aW9ucyB0aGUgZHJpdmVyIHNob3VsZCBkZWZpbmUgYXJlOgorCis8dmVyYj4KK3N0YXRpYyBpbnQgYnJsX3dyaXRlUGFja2V0KEJyYWlsbGVEaXNwbGF5ICpicmwsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnBhY2tldCwgaW50IHNpemUpOworc3RhdGljIGludCBicmxfcmVhZFBhY2tldChCcmFpbGxlRGlzcGxheSAqYnJsLCB1bnNpZ25lZCBjaGFyICpwLCBpbnQgc2l6ZSk7CitzdGF0aWMgdm9pZCBicmxfcmVzY3VlKEJyYWlsbGVEaXNwbGF5ICpicmwpCis8L3ZlcmI+CisKKzx0dD5icmxfd3JpdGVQYWNrZXQoKTwvdHQ+IHNlbmRzIGEgcGFja2V0IG9mIDx0dC9zaXplLyBieXRlcywgc3RvcmVkCithdCA8dHQvcGFja2V0LywgdG8gdGhlIGJyYWlsbGUgdGVybWluYWwuIElmIHRoZSBjb21tdW5pY2F0aW9uIHByb3RvY29sCithbGxvd3MgdG8gZGV0ZXJtaW5lZCBpZiBhIHBhY2tldCBoYXMgYmVlbiBzZW5kIHByb3Blcmx5IChlLmcuIHRoZQordGVybWluYWwgc2VuZHMgYmFjayBhbiBhY2tub3dsZWRnZW1lbnQgZm9yIGVhY2ggcGFja2V0IGhlCityZWNlaXZlcyksIHRoZW4gdGhpcyBmdW5jdGlvbiBzaG91bGQgd2FpdCB0aGUgYWNrbm93bGVkZ2VtZW50LAorYW5kLCBpZiBpdCBpcyBub3QgcmVjZWl2ZWQsIHJldHJhbnNtaXNzaW9uIG9mIHRoZSBwYWNrZXQgc2hvdWxkIHRha2UKK3BsYWNlLgorCis8dHQ+YnJsX3JlYWRQYWNrZXQoKTwvdHQ+IHJlYWRzIGEgcGFja2V0IG9mIGF0IG1vc3QgPHR0L3NpemUvIGJ5dGVzLCBhbmQKK3N0b3JlcyBpdCBhdCB0aGUgc3BlY2lmaWVkIGFkZHJlc3MuIFRoZSByZWFkIG11c3Qgbm90IGJsb2NrLiBJLmUuLAoraWYgbm8gcGFja2V0IGlzIGF2YWlsYWJsZSwgdGhlIGZ1bmN0aW9uIHNob3VsZCByZXR1cm4gaW1tZWRpYXRlbHksCityZXR1cm5pbmcgMC4KKworPHR0PmJybF9yZXNjdWUoKTwvdHQ+IGlzIGNhbGxlZCBieSA8ZW0vQnJsQVBJLyB3aGVuIGEgY2xpZW50CithcHBsaWNhdGlvbiB0ZXJtaW5hdGVzIHdpdGhvdXQgcHJvcGVybHkgbGVhdmluZyB0aGUgcmF3IG1vZGUuIFRoaXMKK2Z1bmN0aW9uIHNob3VsZCByZXN0b3JlIHRoZSB0ZXJtaW5hbCdzIHN0YXRlLCBzbyB0aGF0IGl0IGlzCithYmxlIHRvIGRpc3BsYXkgdGV4dCBpbiBicmFpbGxlIGFnYWluLgorCis8c2VjdDM+UmVtYXJrcy4KKworPHA+Cis8aXRlbWl6ZT4KKzxpdGVtPiBJZiB0aGUgZHJpdmVyIHByb3ZpZGVzIHN1Y2ggZnVuY3Rpb25zLCBldmVyeSBvdGhlcgorZnVuY3Rpb25zIHNob3VsZCB1c2UgdGhlbSwgaW5zdGVhZCBvZiB0cnlpbmcgdG8gY29tbXVuaWNhdGUKK2RpcmVjdGx5IHdpdGggdGhlIGJyYWlsbGUgdGVybWluYWwuIEZvciBpbnN0YW5jZSwgPHR0L3JlYWRDb21tYW5kKCkvCitzaG91bGQgY2FsbCA8dHQvcmVhZFBhY2tldCgpLywgYW5kIHRoZW4gZXh0cmFjdCBhIGtleSBmcm9tIHRoZSBwYWNrZXQsCityYXRoZXIgdGhhbiByZWFkaW5nIGRpcmVjdGx5IGZyb20gdGhlIGNvbW11bmljYXRpb24gcG9ydCdzIGZpbGUKK2Rlc2NyaXB0b3IuIFRoZSBzYW1lIGFwcGxpZXMgZm9yIDx0dC9icmxfd3JpdGVXaW5kb3coKS8sIHdoaWNoIHNob3VsZAordXNlIDx0dC9icmxfd3JpdGVQYWNrZXQoKS8sIHJhdGhlciB0aGFuIHdyaXRpbmcgb24gdGhlIGNvbW11bmljYXRpb24KK3BvcnQncyBmaWxlIGRlc2NyaXB0b3IuCisKKzxpdGVtPiBGb3IgdGhlIG1vbWVudCwgdGhlIGFyZ3VtZW50IG9mIHR5cGUgQnJhaWxsZURpc3BsYXkKK2NhbiBzYWZlbHkgYmUgaWdub3JlZCBieSB0aGUgZnVuY3Rpb25zIGRlc2NyaWJlZCBoZXJlLgorCis8L2l0ZW1pemU+CisKKzwhLS0tLT4KKzxzZWN0PlByb3RvY29sIHJlZmVyZW5jZTxsYWJlbCBpZD0ic2VjLXByb3RvY29sIj4KKzwhLS0tLT4KKzwhLS0gYSBib3JpbmcgZG9jdW1lbnRhdGlvbiwgZXhwbGFpbmluZyB0aGUgdW5kZXJseWluZyBwcm90b2NvbCBvZiB0aGUgYXBpCitpbiBkZXRhaWwgLS0+Cis8cD4KK1VuZGVyIHNvbWUgY2lyY3Vtc3RhbmNlcywgaXQgbWF5IGJlIHByZWZlcmFibGUgdG8gY29tbXVuaWNhdGUgZGlyZWN0bHkgd2l0aAorPGVtL0JybEFQSS8ncyBzZXJ2ZXIgcmF0aGVyIHRoYW4gdXNpbmcgPGVtL0JybEFQSS8ncworbGlicmFyeS4gSGVyZSBhcmUgdGhlIG5lZWRlZCBkZXRhaWxzIHRvIGJlIGFibGUKK3RvIGRvIHRoaXMuIFRoaXMgY2hhcHRlciBpcyBhbHNvIG9mIGludGVyZXN0IGlmIGEgcHJlY2lzZSB1bmRlcnN0YW5kaW5nIG9mCitob3cgdGhlIGNvbW11bmljYXRpb24gc3R1ZmYgd29ya3MgaXMgZGVzaXJlZCwgdG8gYmUgc3VyZSB0byB1bmRlcnN0YW5kIGhvdwordG8gd3JpdGUgbXVsdGl0aHJlYWRlZCBjbGllbnRzLCBmb3IgaW5zdGFuY2UuCisKKzxwPgorSW4gYWxsIHRoZSBmb2xsb3dpbmcsIDxlbS9pbnRlZ2VyLyB3aWxsIG1lYW4gYW4gdW5zaWduZWQgMzIgYml0cyBpbnRlZ2VyIGluCituZXR3b3JrIGJ5dGUgb3JkZXIgKGllIG1vc3Qgc2lnbmlmaWNhbnQgYnl0ZXMgZmlyc3QpLgorCis8c2VjdDE+UmVsaWFibGUgcGFja2V0IHRyYW5zbWlzc2lvbiBjaGFubmVsCisKKzxwPgorVGhlIHByb3RvY29sIGJldHdlZW4gPGVtL0JybEFQSS8ncyBzZXJ2ZXIgYW5kIGNsaWVudHMgaXMgYmFzZWQgb24gZXhjaGFuZ2VzCitvZiBwYWNrZXRzLiBTbyBhcyB0byBhdm9pZCBsb2NrcyBkdWUgdG8gcGFja2V0IGxvc3MsIHRoZXNlIGV4Y2hhbmdlcyBhcmUKK3N1cHBvc2VkIHJlbGlhYmxlLCBhbmQgb3JkZXJpbmcgbXVzdCBiZSBwcmVzZXJ2ZWQsIHRodXMgPGVtL0JybEFQSS8gbmVlZHMKK2EgcmVsaWFibGUgcGFja2V0IHRyYW5zbWlzc2lvbiBjaGFubmVsLgorCis8cD4KK1RvIGFjaGlldmUgdGhpcywgPGVtL0JybEFQSS8gdXNlcyBhIFRDUC1iYXNlZCBjb25uZWN0aW9uLCBvbiB3aGljaCBwYWNrZXRzCithcmUgdHJhbnNtaXR0ZWQgdGhpcyB3YXk6CisKKzxpdGVtaXplPgorPGl0ZW0+dGhlIHNpemUgaW4gYnl0ZXMgb2YgdGhlIHBhY2tldCBpcyB0cmFuc21pdHRlZCBmaXJzdCBhcyBhbiBpbnRlZ2VyLAorPGl0ZW0+dGhlbiB0aGUgdHlwZSBvZiB0aGUgcGFja2V0LCBhcyBhbiBpbnRlZ2VyLAorPGl0ZW0+YW5kIGZpbmFsbHkgdGhlIHBhY2tldCBkYXRhLgorPC9pdGVtaXplPgorCis8cD4KK1RoZSBzaXplIGRvZXMgbm90IGluY2x1ZGUgdGhlIHsgc2l6ZSwgdHlwZSB9IGhlYWRlciwgc28gdGhhdCBwYWNrZXRzIHdoaWNoCitkb24ndCBuZWVkIGFueSBkYXRhIGhhdmUgYSBzaXplIG9mIDAgYnl0ZS4gVGhlIHR5cGUgb2YgdGhlIHBhY2tldCBjYW4gYmUKK2VpdGhlciBvZiA8dHQvQlJMQVBJX1BBQ0tFVF8qLyBjb25zdGFudHMgZGVmaW5lZCBpbiA8dHQvYXBpX3Byb3RvY29sLmgvLiBFYWNoIHR5cGUgb2YKK3BhY2tldCB3aWxsIGJlIGZ1cnRoZXIgZGlzY3Vzc2VkIGJlbG93LgorCis8cD4KKzxlbS9CcmxBUEkvJ3MgbGlicmFyeSBzaGlwcyB0d28gZnVuY3Rpb25zIHRvIGFjaGlldmUgcGFja2V0cyBzZW5kaW5nIGFuZCByZWNlaXZpbmcKK3VzaW5nIHRoaXMgcHJvdG9jb2w6IDx0dC9icmxhcGlfd3JpdGVQYWNrZXQvIGFuZCA8dHQvYnJsYXBpX3JlYWRQYWNrZXQvLiBJdAoraXMgYSBnb29kIGlkZWEgdG8gdXNlIHRoZXNlIGZ1bmN0aW9ucyByYXRoZXIgdGhhbiByZXdyaXRpbmcgdGhlbSwgc2luY2UgdGhpcyBwcm90b2NvbAorbWlnaHQgY2hhbmdlIG9uZSBkYXkgaW4gZmF2b3Igb2YgYSByZWFsIHJlbGlhYmxlIHBhY2tldCB0cmFuc21pc3Npb24gcHJvdG9jb2wKK3N1Y2ggYXMgdGhlIGV4cGVyaW1lbnRhbCBSRFAuCisKKzxzZWN0MT5SZXNwb25zZXMgZnJvbSB0aGUgc2VydmVyCisKKzxwPgorQXMgZGVzY3JpYmVkIGJlbG93LCBtYW55IHBhY2tldHMgYXJlIGBhY2tub3dsZWRnZWQnLiBJdCBtZWFucyB0aGF0IHVwb24KK3JlY2VwdGlvbiwgdGhlIHNlcnZlciBzZW5kcyBlaXRoZXI6CisKKzxpdGVtaXplPgorPGl0ZW0+YSA8dHQvQlJMQVBJX1BBQ0tFVF9BQ0svIHBhY2tldCwgd2l0aCBubyBkYXRhLCB3aGljaCBtZWFucyB0aGUgb3BlcmF0aW9uCitjb3JyZXNwb25kaW5nIHRvIHRoZSByZWNlaXZlZCBwYWNrZXQgd2FzIHN1Y2Nlc3NmdWwsCis8aXRlbT5vciBhIDx0dC9CUkxBUElfUEFDS0VUX0VSUk9SLyBwYWNrZXQsIHRoZSBkYXRhIGJlaW5nIGFuIGludGVnZXIKK3doaWNoIHNob3VsZCBiZSBvbmUgb2YgPHR0L0JSTEFQSV9FUlJPUl8qLyBjb25zdGFudHMuIFRoaXMKK21lYW5zIHRoZSBvcGVyYXRpb24gY29ycmVzcG9uZGluZyB0byB0aGUgcmVjZWl2ZWQgcGFja2V0IGZhaWxlZC4KKzwvaXRlbWl6ZT4KKworPHA+CitTb21lIG90aGVyIHBhY2tldHMgbmVlZCBzb21lIGluZm9ybWF0aW9uIGFzIGEgcmVzcG9uc2UuCitVcG9uIHJlY2VwdGlvbiwgdGhlIHNlcnZlciB3aWxsIHNlbmQgZWl0aGVyOgorCis8aXRlbWl6ZT4KKzxpdGVtPmEgcGFja2V0IG9mIHRoZSBzYW1lIHR5cGUsIGl0cyBkYXRhIGJlaW5nIHRoZSByZXNwb25zZSwKKzxpdGVtPm9yIGEgPHR0L0JSTEFQSV9QQUNLRVRfRVJST1IvIHBhY2tldC4KKzwvaXRlbWl6ZT4KKworPHA+CitJZiBhdCBzb21lIHBvaW50IGFuIGlsbC1mb3JtZWQgb3Igbm9uLXNlbnNlIHBhY2tldCBpcyByZWNlaXZlZCBieSB0aGUgc2VydmVyLAorYW5kIDx0dC9CUkxBUElfUEFDS0VUX0VYQ0VQVElPTi8gaXMgcmV0dXJuZWQsIGhvbGRpbmcgdGhlIGd1aWx0eSBwYWNrZXQgZm9yCitmdXJ0aGVyIGFuYWx5c2lzLgorCis8c2VjdDE+T3BlcmF0aW5nIG1vZGVzCis8cD4KK1RoZSBjb25uZWN0aW9uIGJldHdlZW4gdGhlIGNsaWVudCBhbmQgdGhlIHNlcnZlciBjYW4gYmUgaW4gZWl0aGVyIG9mIHRoZSAKK2ZvdXIgZm9sbG93aW5nIG1vZGVzOgorCis8aXRlbWl6ZT4KKzxpdGVtPmF1dGhvcml6YXRpb24gbW9kZTogdGhpcyBpcyB0aGUgaW5pdGlhbCBtb2RlLCB3aGVuIHRoZSBjbGllbnQgaGFzbid0Citnb3QgdGhlIGF1dGhvcml6YXRpb24gdG8gdXNlIHRoZSBzZXJ2ZXIgeWV0LiBUaGUgc2VydmVyIGZpcnN0IHNlbmRzIGEKKzx0dC9CUkxBUElfUEFDS0VUX1ZFUlNJT04vIHBhY2tldCB0aGF0IGFubm91bmNlcyB0aGUgc2VydmVyIHZlcnNpb24uIFRoZSBjbGllbnQKK211c3Qgc2VuZCBiYWNrIGEgPHR0L0JSTEFQSV9QQUNLRVRfVkVSU0lPTi8gZm9yIGFubm91bmNpbmcgaXRzIG93biB2ZXJzaW9uIHRvby4KK1RoZSBzZXJ2ZXIgdGhlbiBzZW5kcyBhIDx0dC9CUkxBUElfUEFDS0VUX0FVVEgvIHBhY2tldCB0aGF0IGFubm91bmNlcword2hpY2ggYXV0aG9yaXphdGlvbiBtZXRob2RzIGFyZSBhbGxvd2VkLiBUaGUgY2xpZW50IGNhbiB0aGVuIHNlbmQKKzx0dC9CUkxBUElfUEFDS0VUX0FVVEgvIHBhY2tldHMsIHdoaWNoIG1ha2VzIHRoZSBjb25uZWN0aW9uIGVudGVyIG5vcm1hbCBtb2RlLgorSWYgbm8gYXV0aG9yaXphdGlvbiBpcyBuZWVkZWQsIHRoZSBzZXJ2ZXIgY2FuIGFubm91bmNlIHRoZSA8dHQvTk9ORS8gbWV0aG9kLCB0aGUKK2NsaWVudCB0aGVuIGRvZXNuJ3QgbmVlZCB0byBzZW5kIGEgPHR0L0JSTEFQSV9QQUNLRVRfQVVUSC8gcGFja2V0LgorCisKKworPGl0ZW0+bm9ybWFsIG1vZGU6IHRoZSBjbGllbnQgaXMgYXV0aG9yaXplZCB0byB1c2UgdGhlIHNlcnZlciwgYnV0IGRpZG4ndCBhc2sgZm9yIGEgdHR5CitvciByYXcgbW9kZS4gVGhlIGNsaWVudCBjYW4gc2VuZCBlaXRoZXIgb2YgdGhlc2UgdHlwZXMgb2YgcGFja2V0OgorICA8aXRlbWl6ZT4KKyAgPGl0ZW0+PHR0L0JSTEFQSV9QQUNLRVRfR0VURFJJVkVSTkFNRS8KKyAgb3IgPHR0L0JSTEFQSV9QQUNLRVRfR0VURElTUExBWVNJWkUvIHRvIGdldCBwaWVjZXMgb2YgaW5mb3JtYXRpb24gZnJvbSB0aGUgc2VydmVyLAorICA8aXRlbT48dHQvQlJMQVBJX1BBQ0tFVF9FTlRFUlRUWU1PREUvIHRvIGVudGVyIHR0eSBoYW5kbGluZyBtb2RlLAorICA8aXRlbT48dHQvQlJMQVBJX1BBQ0tFVF9FTlRFUlJBV01PREUvIHRvIGVudGVyIHJhdyBtb2RlLAorICA8L2l0ZW1pemU+CisKKworPGl0ZW0+dHR5IGhhbmRsaW5nIG1vZGU6IHRoZSBjbGllbnQgaG9sZHMgdGhlIGNvbnRyb2wgb2YgYSB0dHk6IDxlbS9icmx0dHkvIGhhcworbm8gcG93ZXIgb24gaXQgYW55IG1vcmUsIG1hc2tlZCBrZXlzIGV4Y2VwdGVkLiBJdCdzIHVwIHRvIHRoZSBjbGllbnQgdG8gbWFuYWdlCitkaXNwbGF5IGFuZCBrZXlwcmVzc2VzLiBGb3IgdGhpcywgaXQgY2FuIHNlbmQgZWl0aGVyIG9mIHRoZXNlIHR5cGVzIG9mIHBhY2tldDoKKyAgPGl0ZW1pemU+CisgIDxpdGVtPjx0dC9CUkxBUElfUEFDS0VUX0xFQVZFVFRZTU9ERS8gdG8gbGVhdmUgdHR5IGhhbmRsaW5nIG1vZGUgYW5kIGdvIGJhY2sgdG8KKyAgbm9ybWFsIG1vZGUsCisgIDxpdGVtPjx0dC9CUkxBUElfUEFDS0VUX0lHTk9SRUtFWVJBTkdFLyBhbmQgPHR0L0JSTEFQSV9QQUNLRVRfQUNDRVBUS0VZUkFOR0UvIHRvIG1hc2sgYW5kIHVubWFzayBrZXlzLAorICA8aXRlbT48dHQvQlJMQVBJX1BBQ0tFVF9XUklURS8gdG8gZGlzcGxheSB0ZXh0IG9uIHRoaXMgdHR5LAorICA8aXRlbT48dHQvQlJMQVBJX1BBQ0tFVF9FTlRFUlJBV01PREUvIHRvIGVudGVyIHJhdyBtb2RlLAorICA8aXRlbT48dHQvQlJMQVBJX1BBQ0tFVF9HRVREUklWRVJOQU1FLworICBvciA8dHQvQlJMQVBJX1BBQ0tFVF9HRVRESVNQTEFZU0laRS8gdG8gZ2V0IHBpZWNlcyBvZiBpbmZvcm1hdGlvbiBmcm9tIHRoZSBzZXJ2ZXIsCisgIDwvaXRlbWl6ZT4KK0FuZCB0aGUgc2VydmVyIG1pZ2h0IHNlbmQgPHR0L0JSTEFQSV9QQUNLRVRfS0VZLyBwYWNrZXRzIHRvIHNpZ25hbCBrZXkgcHJlc3Nlcy4KKworCis8aXRlbT5yYXcgbW9kZTogdGhlIGNsaWVudCB3YW50cyB0byBleGNoYW5nZSBwYWNrZXRzIGRpcmVjdGx5IHdpdGggdGhlIGJyYWlsbGUKK3Rlcm1pbmFsLiBPbmx5IHRoZXNlIHR5cGVzIG9mIHBhY2tldCB3aWxsIGJlIGFjY2VwdGVkLgorICA8aXRlbWl6ZT4KKyAgPGl0ZW0+PHR0L0JSTEFQSV9QQUNLRVRfTEVBVkVSQVdNT0RFLyB0byBnZXQgYmFjayB0byBwcmV2aW91cyBtb2RlLCBlaXRoZXIgbm9ybWFsIG9yCisgIHR0eSBoYW5kbGluZyBtb2RlLgorICA8aXRlbT48dHQvQlJMQVBJX1BBQ0tFVF9QQUNLRVQvIHRvIHNlbmQgYSBwYWNrZXQgdG8gdGhlIGJyYWlsbGUgdGVybWluYWwuCisgIDwvaXRlbWl6ZT4KK0FuZCB0aGUgc2VydmVyIG1pZ2h0IHNlbmQgPHR0L0JSTEFQSV9QQUNLRVRfUEFDS0VULyBwYWNrZXRzIHRvIGdpdmUgcmVjZWl2ZWQgcGFja2V0cworZnJvbSB0aGUgdGVybWluYWwgdG8gdGhlIGNsaWVudC4KKworPGl0ZW0+c3VzcGVuZCBtb2RlOiB0aGUgY2xpZW50IHdhbnRzIHRvIGNvbXBsZXRlbHkgZHJpdmUgdGhlIGJyYWlsbGUgdGVybWluYWwuCitUaGUgZGV2aWNlIGRyaXZlciBpcyBoZW5jZSBrZXB0IGNsb3NlZC4gTm8gdHlwZSBvZiBwYWNrZXQgaXMgYWxsb3dlZCBleGNlcHQKKzx0dC9CUkxBUElfUEFDS0VUX1JFU1VNRS8KKzwvaXRlbWl6ZT4KKworVGVybWluYXRpb24gb2YgdGhlIGNvbm5lY3Rpb24gaXMgaW5pdGlhdGVkIGJ5IHRoZSBjbGllbnQgaW4gbm9ybWFsIG1vZGUgYnkKK3NpbXBseSBjbG9zaW5nIGl0cyBzaWRlIG9mIHRoZSBzb2NrZXQuIFRoZSBzZXJ2ZXIgd2lsbCB0aGVuIGNsb3NlIHRoZQorY29ubmVjdGlvbi4KKworCis8c2VjdDE+RGV0YWlscyBmb3IgZWFjaCB0eXBlIG9mIHBhY2tldAorCis8cD4KK0hlcmUgaXMgZGVzY3JpYmVkIHRoZSBzZW1hbnRpY3Mgb2YgZWFjaCB0eXBlIG9mIHBhY2tldC4gTW9zdCBvZiB0aGVtIGFyZQorZGlyZWN0bHkgbGlua2VkIHRvIHNvbWUgb2YgPGVtL0JybEFQSS8ncyBsaWJyYXJ5J3MgZnVuY3Rpb25zLiBSZWFkaW5nIHRoZWlyCitvbmxpbmUgbWFudWFsIHBhZ2UgYXMgd2VsbCB3aWxsIGhlbmNlIGJlIG9mIGdvb2QgaGVscCBmb3IgdW5kZXJzdGFuZGluZy4KKworPHNlY3QyPjx0dC9CUkxBUElfUEFDS0VUX1ZFUlNJT04vCitUaGlzIG11c3QgYmUgdGhlIGZpcnN0IHBhY2tldCBldmVyIHRyYW5zbWl0dGVkIGZyb20gdGhlIHNlcnZlciB0byB0aGUgY2xpZW50IGFuZAorZnJvbSB0aGUgY2xpZW50IHRvIHRoZSBzZXJ2ZXIuIFRoZSBzZXJ2ZXIgc2VuZHMgb25lIGZpcnN0IGZvciBsZXR0aW5nIHRoZSBjbGllbnQKK2tub3cgaXRzIHByb3RvY29sIHZlcnNpb24uIERhdGEgaXMgYW4gaW50ZWdlciBpbmRpY2F0aW5nIHRoZSBwcm90b2NvbCB2ZXJzaW9uLgorCitUaGVuIGNsaWVudCBtdXN0IHRoZW4gcmVzcG9uZCB0aGUgc2FtZSB3YXkgZm9yIGdpdmluZyBpdHMKK3ZlcnNpb24uICBJZiB0aGUgcHJvdG9jb2wgdmVyc2lvbiBjYW4ndCBiZSBoYW5kbGVkIGJ5IHRoZSBzZXJ2ZXIsIGEKKzx0dC9CUkxBUElfRVJST1JfUFJPVE9DT0xfVkVSU0lPTi8gZXJyb3IgcGFja2V0IGlzIHJldHVybmVkIGFuZCB0aGUgY29ubmVjdGlvbgoraXMgY2xvc2VkLgorCis8c2VjdDI+PHR0L0JSTEFQSV9QQUNLRVRfQVVUSC8KKzxwPgorVGhpcyBtdXN0IGJlIHRoZSBzZWNvbmQgcGFja2V0IGV2ZXIgdHJhbnNtaXR0ZWQgZnJvbSB0aGUgc2VydmVyIHRvIHRoZSBjbGllbnQKK2FuZCBmcm9tIHRoZSBjbGllbnQgdG8gdGhlIHNlcnZlci4gVGhlIHNlcnZlciBzZW5kcyBvbmUgZmlyc3QgZm9yIGxldHRpbmcgdGhlCitjbGllbnQga25vdyB3aGljaCBhdXRob3JpemF0aW9uIG1ldGhvZHMgYXJlIGF2YWlsYWJsZS4gIERhdGEgaXMgdGhlIGFsbG93ZWQKK2F1dGhvcml6YXRpb24gdHlwZXMsIGFzIGludGVnZXJzLgorCitJZiB0aGUgPHR0L05PTkUvIG1ldGhvZCBpcyBub3QgYW5ub3VuY2VkIGJ5IHRoZSBzZXJ2ZXIsIHRoZSBjbGllbnQgY2FuIHRoZW4gdHJ5Cit0byBnZXQgYXV0aG9yaXplZCBieSBzZW5kaW5nIHBhY2tldHMgd2hvc2UgZGF0YSBpcyB0aGUgdHlwZSBvZiBhdXRob3JpemF0aW9uCit0aGF0IGlzIHRyaWVkIChhcyBhbiBpbnRlZ2VyKSwgYW5kIGV2ZW50dWFsbHkgc29tZSBkYXRhIChpZiB0aGUgYXV0aG9yaXphdGlvbgordHlwZSBuZWVkcyBpdCkuCisKK0lmIHRoZSBhdXRob3JpemF0aW9uIGlzIHN1Y2Nlc3NmdWwsIHRoZSBzZXJ2ZXIgYWNrbm93bGVkZ2VzIHRoZSBwYWNrZXQsIGFuZAorb3RoZXIgdHlwZXMgb2YgcGFja2V0cyBtaWdodCBiZSB1c2VkLCBvdGhlciA8dHQvQlJMQVBJX1BBQ0tFVF9BVVRILyBzaG91bGRuJ3QgYmUKK3NlbnQgYnkgdGhlIGNsaWVudC4KKworSWYgdGhlIGF1dGhvcml6YXRpb24gaXMgbm90IHN1Y2Nlc3NmdWwsIHRoZSBzZXJ2ZXIgc2VuZHMgYQorPHR0L0JSTEFQSV9FUlJPUl9BVVRIRU5USUNBVElPTi8gZXJyb3IsIGFuZCB0aGUgY2xpZW50IGNhbiB0cnkgYW5vdGhlcgorYXV0aG9yaXphdGlvbiBtZXRob2QuCisKK0F1dGhvcml6YXRpb24gbWV0aG9kcyBhcmUgYXMgZm9sbG93OgorCis8aXRlbWl6ZT4KKyAgPGl0ZW0+PHR0L05PTkUvOiB0aGUgY2xpZW50IGRvZXNuJ3QgbmVlZCB0byBzZW5kIGFuIGF1dGhvcml6YXRpb24gcGFja2V0LgorICA8aXRlbT48dHQvS0VZLzogZGF0YSBob2xkcyBhIHNlY3JldCBrZXksIHRoZSBhdXRob3JpemF0aW9uIGlzIHN1Y2Nlc3NmdWwgb25seQoraWYgdGhlIGtleSBtYXRjaGVzIHRoZSBzZXJ2ZXIgc2VjcmV0IGtleS4KKyAgPGl0ZW0+PHR0L0NSRURFTlRJQUxTLzogT3BlcmF0aW5nLVN5c3RlbS1zcGVjaWZpYyBjcmVkZW50aWFscyBhcmUgZXhwbGljaXRlbHkKK3NlbnQgb3ZlciB0aGUgc29ja2V0LCB0aGUgYXV0aG9yaXphdGlvbiBpcyBzdWNjZXNzZnVsIGlmIHRoZSBzZXJ2ZXIgY29uc2lkZXJzCit0aGUgY3JlZGVudGlhbHMgc3VmZmljaWVudC4KKzwvaXRlbWl6ZT4KKworTm90ZTogd2hlbiB0aGUgT3BlcmF0aW5nIHN5c3RlbSBwZXJtaXRzIGl0LCB0aGUgc2VydmVyIG1heSB1c2UgaW1wbGljaXQKK2NyZWRlbnRpYWwgY2hlY2ssIGFuZCB0aGVuIGFkdmVydGlzZSB0aGUgPHR0L25vbmUvIG1ldGhvZC4KKworPHNlY3QyPjx0dC9CUkxBUElfUEFDS0VUX0dFVERSSVZFUk5BTUUvIChzZWUgPGVtL2JybGFwaV9nZXREcml2ZXJOYW1lKCkvKQorPHA+CitUaGlzIHNob3VsZCBiZSBzZW50IGJ5IHRoZSBjbGllbnQgd2hlbiBpdCBuZWVkcyB0aGUgZnVsbCBuYW1lIG9mCit0aGUgY3VycmVudCA8dHQvYnJsdHR5LyBkcml2ZXIuIFRoZSByZXR1cm5lZCBzdHJpbmcgaXMgXDAgdGVybWluYXRlZC4KKworPHNlY3QyPjx0dC9CUkxBUElfUEFDS0VUX0dFVE1PREVMSUQvIChzZWUgPGVtL2JybGFwaV9nZXRNb2RlbElkZW50aWZpZXIoKS8pCis8cD4KK1RoaXMgc2hvdWxkIGJlIHNlbnQgYnkgdGhlIGNsaWVudCB3aGVuIGl0IG5lZWRzIHRvIGlkZW50aWZ5Cit3aGljaCBtb2RlbCBvZiBicmFpbGxlIGRpc3BsYXkgaXMgY3VycmVudGx5IHVzZWQgYnkgPHR0L2JybHR0eS8uCitUaGUgcmV0dXJuZWQgc3RyaW5nIGlzIFwwIHRlcm1pbmF0ZWQuCisKKzxzZWN0Mj48dHQvQlJMQVBJX1BBQ0tFVF9HRVRESVNQTEFZU0laRS8gKHNlZSA8ZW0vYnJsYXBpX2dldERpc3BsYXlTaXplKCkvKQorPHA+CitUaGlzIHNob3VsZCBiZSBzZW50IGJ5IHRoZSBjbGllbnQgd2hlbiBpdCBuZWVkcyB0byBrbm93IHRoZSBicmFpbGxlIGRpc3BsYXkKK3NpemUuIFRoZSByZXR1cm5lZCBkYXRhIGFyZSB0d28gaW50ZWdlcnM6IHdpZHRoIGFuZCB0aGVuIGhlaWdodC4KKworPHNlY3QyPjx0dC9CUkxBUElfUEFDS0VUX0VOVEVSVFRZTU9ERS8gKHNlZSA8ZW0vYnJsYXBpX2VudGVyVHR5TW9kZSgpLyBhbmQKKzxlbS9icmxhcGlfZW50ZXJUdHlNb2RlV2l0aFBhdGgoKS8pCis8cD4KK1RoaXMgc2hvdWxkIGJlIHNlbnQgYnkgdGhlIGNsaWVudCB0byBnZXQgY29udHJvbCBvZiBhIHR0eS4gU2VudCBkYXRhIGFyZQorZmlyc3QgYSBzZXJpZXMgb2YgaW50ZWdlcnM6IHRoZSBmaXJzdCBvbmUgZ2l2ZXMgdGhlIG51bWJlciBvZiBmb2xsb3dpbmcKK2ludGVnZXJzLCB3aGljaCBhcmUgdGhlIG51bWJlcnMgb2YgdHR5cyB0aGF0IGxlYWRzIHRvIHRoZSB0dHkgdGhhdAordGhlIGFwcGxpY2F0aW9uIHdhbnRzIHRvIHRha2UgY29udHJvbCBvZiAoaXQgY2FuIGJlIGVtcHR5IGlmIHRoZSB0dHkgaXMgCitvbmUgb2YgdGhlIG1hY2hpbmUncyBWVCkuIFRoZSBsYXN0IGludGVnZXIgb2YgdGhpcyBzZXJpZXMgdGVsbHMgdGhlIG51bWJlciBvZgordGhlIHR0eSB0byBnZXQgY29udHJvbCBvZi4gRmluYWx5LCBob3cga2V5IHByZXNzZXMgc2hvdWxkIGJlIHJlcG9ydGVkIGlzIHNlbnQ6CitlaXRoZXIgYSBkcml2ZXIgbmFtZSBvciAiIiwgcHJlY2VkZWQgYnkgdGhlIG51bWJlciBvZiBjYXJhY3RlcnMgaW4gdGhlIGRyaXZlcgorbmFtZSAoMCBpbiB0aGUgY2FzZSBvZiAiIiksIGFzIGFuIHVuc2lnbmVkIGJ5dGUuIFRoaXMgcGFja2V0IGlzIHRoZW4KK2Fja25vd2xlZGdlZCBieSB0aGUgc2VydmVyLgorCis8c2VjdDI+PHR0L0JSTEFQSV9QQUNLRVRfS0VZLyAoc2VlIDxlbS9icmxhcGlfcmVhZEtleSgpLykKKzxwPgorQXMgc29vbiBhcyB0aGUgY2xpZW50IGdldHMgYSB0dHksIGl0IG11c3QgYmUgcHJlcGFyZWQgdG8gaGFuZGxlCis8dHQvQlJMQVBJX1BBQ0tFVF9LRVkvIGluY29taW5nIHBhY2tldHMKK2F0IGFueSB0aW1lIChhcyBzb29uIGFzIHRoZSBrZXkKK3dhcyBwcmVzc2VkIG9uIHRoZSBicmFpbGxlIHRlcm1pbmFsLCBob3BlZnVseSkuCitUaGUgZGF0YSBob2xkcyBhIGtleSBjb2RlIGFzIDIgaW50ZWdlcnMsIG9yCit0aGUga2V5IGZsYWdzIHRoZW4gdGhlIGNvbW1hbmQgY29kZQorYXMgMiBpbnRlZ2VycywgZGVwZW5kaW5nIG9uIHdoYXQgaGFzIGJlZW4gcmVxdWVzdCBpbiB0aGUKKzx0dC9CUkxBUElfUEFDS0VUX0VOVEVSVFRZTU9ERS8gcGFja2V0LgorCis8c2VjdDI+PHR0L0JSTEFQSV9QQUNLRVRfU0VURk9DVVMvIChzZWUgPGVtL2JybGFwaV9zZXRGb2N1cygpLykKKworPHA+CitGb3IgdGhlIHNlcnZlciB0byBrbm93IHdoaWNoIHR0eSBpcyBhY3RpdmUsIG9uZSBwYXJ0aWN1bGFyIGNsaWVudCBpcyByZXNwb25zaWJsZQorZm9yIHNlbmRpbmcgPHR0L0JSTEFQSV9QQUNLRVRfU0VURk9DVVMvIHBhY2tldHMuIFRoZXkgaG9sZCBhIHNpbmdsZSBpbnRlZ2VyIHRlbGxpbmcKK3RoZSBuZXcgY3VycmVudCB0dHkuIEZvciBpbnN0YW5jZSwgd2hlbiBydW5uaW5nIGFuIFggc2VydmVyIG9uIFZUIDcsIHRoZQorPHR0L3hicmxhcGkvIGNsaWVudCB3b3VsZCBoYXZlIHNlbnQgYSA8dHQvQlJMQVBJX1BBQ0tFVF9FTlRFUlRUWU1PREUoNykvIGFuZCB3aWxsIHNlbmQKK3dpbmRvdyBJRHMgd2hlbmV2ZXIgWCBmb2N1cyBjaGFuZ2VzLCBhbGxvd2luZyBkaXNwbGF5IGFuZCBrZXlwcmVzc2VzIHN3aXRjaGluZworYmV0d2VlbiB4dGVybXMuCisKKzxzZWN0Mj48dHQvQlJMQVBJX1BBQ0tFVF9MRUFWRVRUWU1PREUvIChzZWUgPGVtL2JybGFwaV9sZWF2ZVR0eU1vZGUoKS8pCis8cD4KK1RoaXMgc2hvdWxkIGJlIHNlbnQgdG8gZnJlZSB0aGUgdHR5IGFuZCBtYXNrZWQga2V5cyBsaXN0cy4KK1RoaXMgaXMgYWNrbm93bGVkZ2VkIGJ5IHRoZSBzZXJ2ZXIuCisKKzxzZWN0Mj48dHQvQlJMQVBJX1BBQ0tFVF9JR05PUkVLRVlSQU5HRS8gYW5kIDx0dC9CUkxBUElfUEFDS0VUX0FDQ0VQVEtFWVJBTkdFLworKHNlZSA8ZW0vYnJsYXBpX2lnbm9yZUtleVJhbmdlKCkvIGFuZCA8ZW0vYnJsYXBpX2FjY2VwdEtleVJhbmdlKCkvKQorPHA+CitJZiB0aGUgY2xpZW50IGRvZXNuJ3Qgd2FudCBldmVyeSBrZXkgcHJlc3MgdG8gYmUgc2lnbmFsZWQgdG8gaXQsIGJ1dCBzb21lIG9mCit0aGVtIHRvIGJlIGdpdmVuIHRvIDx0dC9icmx0dHkvIGZvciBub3JtYWwgcHJvY2Vzc2luZywgaXQgY2FuIHNlbmQKKzx0dC9CUkxBUElfUEFDS0VUX0lHTk9SRUtFWVJBTkdFLyBwYWNrZXRzIHRvCit0ZWxsIHJhbmdlcyBvZiBrZXkgY29kZXMgd2hpY2ggc2hvdWxkbid0IGJlCitzZW50IHRvIGl0LCBidXQgZ2l2ZW4gdG8gPHR0L2JybHR0eS8sIGFuZCA8dHQvQlJMQVBJX1BBQ0tFVF9BQ0NFUFRLRVlSQU5HRS8KK3BhY2tldHMgdG8gdGVsbCByYW5nZXMKK29mIGtleSBjb2RlcyB3aGljaCBzaG91bGQgYmUgc2VudCB0byBpdCwgYW5kIG5vdCBnaXZlbiB0bworPHR0L2JybHR0eS8uIFRoZSBzZXJ2ZXIga2VlcHMgYSBkeW5hbWljIGxpc3Qgb2YgcmFuZ2VzLCBzbyB0aGF0IGFyYml0cmFyeQorc2VxdWVuY2VzIG9mIHN1Y2ggcGFja2V0cyBjYW4gYmUgc2VudC4KK0EgcmFuZ2UgaXMgY29tcG9zZWQgb2YgMiBrZXljb2RlczogdGhlICJmaXJzdCIgYW5kIHRoZSAibGFzdCIgYm91bmRhcmllcy4KK0VhY2gga2V5Y29kZSBpcyBjb21wb3NlZCBvZiAyIGludGVnZXJzOiB0aGUga2V5IGZsYWdzIHRoZW4gdGhlIGNvbW1hbmQgY29kZS4KK1RoZSByYW5nZSBleHByZXNzZWQgYnkgdGhlc2UgdHdvIGtleWNvZGVzIGlzIHRoZSBzZXQgb2Yga2V5Y29kZXMgd2hvc2UgY29tbWFuZAorY29kZXMgYXJlIGJldHdlZW4gdGhlIGNvbW1hbmQgY29kZSBvZiB0aGUgImZpcnN0IiBrZXljb2RlIGFuZCB0aGUgImxhc3QiIGtleWNvZGUKKyhpbmNsdXNpdmUpLCBhbmQgd2hvc2UgZmxhZ3MgY29udGFpbiBhdCBsZWFzdCB0aGUgZmxhZ3Mgb2YgdGhlICJmaXJzdCIga2V5Y29kZQorYW5kIGF0IG1vc3QgdGhlIGZsYWdzIG9mIHRoZSAibGFzdCIga2V5Y29kZS4gU2V0dGluZyB0aGUgImZpcnN0IiBhbmQgImxhc3QiCitrZXljb2RlIHRvIHRoZSBzYW1lIHZhbHVlIGV4cHJlc3Mgb25seSBvbmUga2V5Y29kZSwgZm9yIGluc3RhbmNlLiBTZXR0aW5nIHRoZQorZmlyc3QgYW5kIGxhc3Qga2V5Y29kZSB0byB0aGUgc2FtZSBjb21tYW5kIGNvZGUgYnV0IHNldHRpbmcgbm8gZmxhZ3MgaW4gdGhlCisiZmlyc3QiIGtleWNvZGUgYW5kIHNldHRpbmcgb25lIGZsYWcgaW4gdGhlICJsYXN0IiBrZXljb2RlIGV4cHJlc3NlcyBvbmx5IHR3bwora2V5Y29kZSwgd2l0aCB0aGUgc2FtZSBjb21tYW5kIGNvZGUgYW5kIG5vIGZsYWdzIHNldCBleGNlcHQgcG9zc2libHkgdGhlIGZsYWcKK3RoYXQgaXMgc2V0IGluIHRoZSAibGFzdCIga2V5Y29kZS4gU2V0dGluZyBvbmUgZmxhZyA8ZW0vaS8gaW4gdGhlICJmaXJzdCIKK2tleWNvZGUgYW5kIHNldHRpbmcgdGhlIHNhbWUgZmxhZyBwbHVzIGFub3RoZXIgZmxhZyA8ZW0vai8gaW4gdGhlICJsYXN0IiBrZXljb2RlCitleHByZXNzZXMgdGhhdCB0aGUga2V5Y29kZXMgaW4gdGhlIHJhbmdlIGhhdmUgZmxhZyA8ZW0vaS8gc2V0IGFuZCBwb3NzaWJseSBmbGFnCis8ZW0vai8gc2V0LCBidXQgbm8gb3RoZXIgZmxhZy4gU2V2ZXJhbCBzdWNoIHJhbmdlcyBjYW4gYmUgcHJvdmlkZWQgb25lIGFmdGVyIHRoZQorb3RoZXIuCisKKzxzZWN0Mj48dHQvQlJMQVBJX1BBQ0tFVF9XUklURS8gKHNlZSA8ZW0vYnJsYXBpX3dyaXRlKCkvKQorPHA+CitUbyBkaXNwbGF5IHRleHQgb24gdGhlIGJyYWlsbGUgdGVybWluYWwgYW5kIHNldCB0aGUgcG9zaXRpb24gb2YgdGhlIGN1cnNvciwKK3RoZSBjbGllbnQgY2FuIHNlbmQgYSA8dHQvQlJMQVBJX1BBQ0tFVF9XUklURS8gcGFja2V0LiBUaGUgcGFja2V0IGJlZ2lucword2l0aCBhbiBpbnRlZ2VyIGhvbGRpbmcgZmxhZ3MgKHNlZSA8dHQvQlJMQVBJX1dGXyovKS4gVGhlc2UgZmxhZ3MgaW5kaWNhdGUKK3doaWNoIGRhdGEgd2lsbCB0aGVuIGJlIGF2YWlsYWJsZSwgaW4gdGhlIGZvbGxvd2luZyBvcmRlciAoY29ycmVzcG9uZGluZyB0bworZmxhZyB3ZWlnaHQpOgorCis8aXRlbWl6ZT4KKzxpdGVtPiBBIGRpc3BsYXkgbnVtYmVyIGNhbiBiZSBnaXZlbiBhcyBhIGludGVnZXIsIGluIGNhc2UgdGhlIGJyYWlsbGUKK2Rpc3BsYXkgaGFzIHNldmVyYWwuIElmIG5vdCBnaXZlbiwgdXN1YWwgZGlzcGxheSBpcyB1c2VkLgorPGl0ZW0+IEEgcmVnaW9uIG11c3QgYmUgZ2l2ZW4gYXMgdHdvIGludGVnZXJzIGluZGljYXRpbmcgdGhlIGJlZ2lubmluZyBhbmQgdGhlCitudW1iZXIgb2YgY2hhcmFjdGVycyBvZiB0aGUgcGFydCBvZiB0aGUgYnJhaWxsZSBkaXNwbGF5IHdoaWNoIGlzIHRvIGJlIHVwZGF0ZWQsCit0aGUgZmlyc3QgY2VsbCBvZiB0aGUgZGlzcGxheSBiZWluZyBudW1iZXJlZCAxLiBGb3IgYnJhaWxsZSBkaXNwbGF5cyB0aGF0IGhhdmUKK3NldmVyYWwgbGluZXMsIHRoZSBmaXJzdCBjZWxsIG9mIHRoZSBzZWNvbmQgbGluZSBvZiB0aGUgZGlzcGxheSBpcyBudW1iZXJlZCB0aGUKK2xlbmd0aCBvZiBsaW5lcyBwbHVzIG9uZSwgZXRjLiwgaW4gb3RoZXIgd29yZHMgdGhlIGRpc3BsYXkgaXMgaGFuZGxlZCBhcyB0aGUKK2NvbmNhdGVuYXRpb24gb2YgdGhlIGxpbmVzIG9mIHRoZSBkaXNwbGF5LgorSWYgdGhlIG51bWJlciBpcyBuZWdhdGl2ZSwgaXRzIGFic29sdXRlIHZhbHVlIGlzIHRha2VuIGludG8gYWNjb3VudCwgYW5kIHRoZQordXBkYXRlIGlzIHBhZGRlZCBvciB0cnVuY2F0ZWQgdG8gZmlsbCB0aGUgcmVzdCBvZiB0aGUgZGlzcGxheS4KKzxpdGVtPiBUaGUgdGV4dCB0byBkaXNwbGF5IGNhbiB0aGVuIGJlIGdpdmVuLCBwcmVjZWRlZCBieSBpdHMgc2l6ZSBpbiBieXRlcworZXhwcmVzc2VkIGFzIGFuIGludGVnZXIuIEl0IHdpbGwgZXJhc2UgdGhlIGNvcnJlc3BvbmRpbmcgcmVnaW9uIGluIHRoZSBBTkQgYW5kCitPUiBmaWVsZHMuIElmIHRoZSByZWdpb24gc2l6ZSBpcyBwb3NpdGl2ZSwgdGhlIHRleHQncyBsZW5ndGggaW4gY2hhcmFjdGVycyBtdXN0IGV4YWN0bHkgbWF0Y2ggdGhlIHJlZ2lvbgorc2l6ZS4gRm9yIG11bHRpYnl0ZSB0ZXh0LCB0aGlzIGlzIHRoZSBudW1iZXIgb2Ygd2lkZSBjaGFyYWN0ZXJzLiBOb3RhYmx5LAorY29tYmluaW5nIGFuZCBkb3VibGUtd2lkdGggY2hhcmFjdGVycyBjb3VudCBmb3IgMS4KKzxpdGVtPiBUaGVuIGFuIEFORCBmaWVsZCBjYW4gYmUgZ2l2ZW4sIG9uZSBieXRlIHBlciBjaGFyYWN0ZXI6IHRoZSA4LWRvdAorcmVwcmVzZW50YXRpb24gb2YgdGhlIGFib3ZlIHRleHQgd2lsbCBiZSBBTkQtZWQgd2l0aCB0aGlzIGZpZWxkLCBoZW5jZSBhbGxvd2luZwordG8gZXJhc2Ugc29tZSB1bndhbnRlZCBwYXJ0cyBvZiBjaGFyYWN0ZXJzLiBEb3RzIGFyZSBjb2RlZCBhcyBkZXNjcmliZWQgaW4KK0lTTy9UUiAxMTU0OC0xOiBkb3QgMSBpcyBzZXQgaWZmIGJpdCAwIGlzIHNldCwgZG90IDIgaXMgc2V0IGlmZiBiaXQgMSBpcyBzZXQsCisuLi4gIGRvdCA8ZW0vaSsxLyBpcyBzZXQgaWYgYml0IDxlbS9pLyBpcyBzZXQuIFRoaXMgYWxzbyBjb3JyZXNwb25kcyB0byB0aGUKK2xvdy1vcmRlciBieXRlIG9mIHRoZSBjb2Rpbmcgb2YgdW5pY29kZSdzIGJyYWlsbGUgcm93IDx0dC9VKzI4MDAvLgorPGl0ZW0+IEFzIHdlbGwsIGFuIE9SIGZpZWxkIG1heSBiZSBnaXZlbiwgb25lIGJ5dGUgcGVyIGNoYXJhY3RlcjogdGhlIDgtZG90CityZXN1bHQgb2YgdGhlIEFORCBvcGVyYXRpb24gYWJvdmUgKG9yIHRoZSA4LWRvdCByZXByZXNlbnRhdGlvbiBvZiB0aGUgdGV4dCBpZgorbm8gQU5EIG9wZXJhdGlvbiB3YXMgcGVyZm9ybWVkKSBpcyBPUi1lZCB3aXRoIHRoaXMgZmllbGQsIGhlbmNlIGFsbG93aW5nCit0byBzZXQgc29tZSBkb3RzLCB0byB1bmRlcmxpbmUgY2hhcmFjdGVycyBmb3IgaW5zdGFuY2UuCis8aXRlbT4gQSBjdXJzb3IgcG9zaXRpb24gY2FuIGJlIHNwZWNpZmllZC4gMSByZXByZXNlbnRpbmcKK3RoZSBmaXJzdCBjaGFyYWN0ZXIgb2YgdGhlIGRpc3BsYXksIDAgdHVybmluZyB0aGUgY3Vyc29yIG9mZi4gSWYgbm90IGdpdmVuLAordGhlIGN1cnNvciAoaWYgYW55KSBpcyBsZWZ0IHVubW9kaWZpZWQuCis8aXRlbT4gTGFzdCBidXQgbm90IGxlYXN0LCB0aGUgY2hhcnNldCBvZiB0aGUgdGV4dCBjYW4gYmUgc3BlY2lmaWVkOiB0aGUgbGVuZ3RoCitvZiB0aGUgbmFtZSBmaXJzdCBpbiBvbmUgYnl0ZSwgdGhlbiB0aGUgbmFtZSBpdHNlbGYgaW4gQVNDSUkgY2hhcmFjdGVycy4gSWYgdGhlCitjaGFyc2V0IGlzIG5vdCBzcGVjaWZpZWQsIGFuIDgtYml0IGNoYXJzZXQgaXMgYXNzdW1lZCwgYW5kIGl0IGlzIGFzc3VtZWQgdG8gYmUKK3RoZSBzYW1lIGFzIHRoZSBzZXJ2ZXIncy4gTXVsdGlieXRlIGNoYXJzZXRzIG1heSBiZSB1c2VkLCBBTkQgYW5kIE9SIGZpZWxkcycKK2J5dGVzIHdpbGwgY29ycmVzcG9uZCB0byBlYWNoIHRleHQncyB3aWRlIDxlbS9jaGFyYWN0ZXIvLCBiZSBpdCBhIGNvbWJpbmluZyBvciBhCitkb3VibGUtd2lkdGggY2hhcmFjdGVyLgorPC9pdGVtaXplPgorCitBIDx0dC9CUkxBUElfUEFDS0VUX1dSSVRFLyBwYWNrZXQgd2l0aG91dCBhbnkgZmxhZyAoYW5kIGhlbmNlIG5vIGRhdGEpIG1lYW5zIGEKKyJ2b2lkIiBXUklURTogdGhlIHNlcnZlciBjbGVhcnMgdGhlIG91dHB1dCBidWZmZXIgZm9yIHRoaXMgY29ubmVjdGlvbi4KKworPHNlY3QyPjx0dC9CUkxBUElfUEFDS0VUX0VOVEVSUkFXTU9ERS8gKHNlZSA8ZW0vYnJsYXBpX2VudGVyUmF3TW9kZSgpLykKKzxwPgorVG8gZW50ZXIgcmF3IG1vZGUsIHRoZSBjbGllbnQgbXVzdCBzZW5kIGEgPHR0L0JSTEFQSV9QQUNLRVRfRU5URVJSQVdNT0RFLyBwYWNrZXQsCit3aGljaCBpcyBhY2tub3dsZWRnZWQuIE9uY2UgaW4gcmF3IG1vZGUsIG5vIG90aGVyIHBhY2tldCB0aGFuCis8dHQvQlJMQVBJX1BBQ0tFVF9MRUFWRVJBV01PREUvIG9yIDx0dC9CUkxBUElfUEFDS0VUX1BBQ0tFVC8gd2lsbCBiZSBhY2NlcHRlZC4KK1RoZSBkYXRhIG11c3QgaG9sZCB0aGUgc3BlY2lhbCB2YWx1ZSA8dHQvQlJMQVBJX0RFVklDRV9NQUdJQy86IDx0dC8weGRlYWRiZWVmLywgdGhlbgordGhlIG5hbWUgb2YgdGhlIGRyaXZlciAob25lIGJ5dGUgZm9yIHRoZSBsZW5ndGgsIHRoZW4gdGhlIG5hbWUpIHRvIGF2b2lkCitlcnJvbmVvdXMgcmF3IG1vZGUgYWN0aXZhdGluZy4KKworPHNlY3QyPjx0dC9CUkxBUElfUEFDS0VUX0xFQVZFUkFXTU9ERS8gKHNlZSA8ZW0vYnJsYXBpX2xlYXZlUmF3TW9kZSgpLykKKzxwPgorVG8gbGVhdmUgcmF3IG1vZGUsIHRoZSBjbGllbnQgbXVzdCBzZW5kIGEgPHR0L0JSTEFQSV9QQUNLRVRfTEVBVkVSQVdNT0RFLyBwYWNrZXQsIHdoaWNoCitpcyBhY2tub3dsZWRnZWQuCisKKzxzZWN0Mj48dHQvQlJMQVBJX1BBQ0tFVF9QQUNLRVQvIChzZWUgPGVtL2JybGFwaV9zZW5kUmF3KCkvIGFuZAorPGVtL2JybGFwaV9yZWN2UmF3KCkvKQorPHA+CitXaGlsZSBpbiByYXcgbW9kZSwgb25seSA8dHQvQlJMQVBJX1BBQ0tFVF9QQUNLRVQvIHBhY2tldHMgY2FuIGJlIGV4Y2hhbmdlZCBiZXR3ZWVuCit0aGUgY2xpZW50IGFuZCB0aGUgc2VydmVyOiB0byBzZW5kIGEgcGFja2V0IHRvIHRoZSBicmFpbGxlIHRlcm1pbmFsLCB0aGUKK2NsaWVudCBtZXJlbHkgc2VuZHMgYSA8dHQvQlJMQVBJX1BBQ0tFVF9QQUNLRVQvIHBhY2tldCwgaXRzIGRhdGEgYmVpbmcgdGhlIHBhY2tldCB0bworc2VuZCB0byB0aGUgdGVybWluYWwuIFdoZW5ldmVyIGl0cyByZWNlaXZlcyBhIHBhY2tldCBmcm9tIHRoZSB0ZXJtaW5hbCwgdGhlCitzZXJ2ZXIgZG9lcyBleGFjdGx5IHRoZSBzYW1lLCBzbyB0aGF0IHBhY2tldCBleGNoYW5nZXMgYmV0d2VlbiB0aGUgdGVybWluYWwgYW5kCit0aGUgc2VydmVyIGFyZSBleGFjdGx5IHJlcHJvZHVjZWQgYmV0d2VlbiB0aGUgc2VydmVyIGFuZCB0aGUgY2xpZW50LgorCis8c2VjdDI+PHR0L0JSTEFQSV9QQUNLRVRfU1VTUEVORERSSVZFUi8gKHNlZSA8ZW0vYnJsYXBpX3N1c3BlbmREcml2ZXIoKS8pCis8cD4KK1RvIGVudGVyIHN1c3BlbmQgbW9kZSwgdGhlIGNsaWVudCBtdXN0IHNlbmQgYSA8dHQvQlJMQVBJX1BBQ0tFVF9TVVNQRU5ELyBwYWNrZXQsCit3aGljaCBpcyBhY2tub3dsZWRnZS4gT25jZSBpbiBzdXNwZW5kIG1vZGUsIG5vIG90aGVyIHBhY2tldCB0aGFuCis8dHQvQlJMQVBJX1BBQ0tFVF9SRVNVTUUvIHdpbGwgYmUgYWNjZXB0ZWQuCitUaGUgZGF0YSBtdXN0IGhvbGQgdGhlIHNwZWNpYWwgdmFsdWUgPHR0L0JSTEFQSV9ERVZJQ0VfTUFHSUMvOiA8dHQvMHhkZWFkYmVlZi8sCit0aGVuIHRoZSBuYW1lIG9mIHRoZSBkcml2ZXIgKG9uZSBieXRlIGZvciB0aGUgbGVuZ3RoLCB0aGVuIHRoZSBuYW1lKSB0byBhdm9pZAorZXJyb25lb3VzIHJhdyBtb2RlIGFjdGl2YXRpbmcuCisKKzxzZWN0Mj48dHQvQlJMQVBJX1BBQ0tFVF9QQVJBTV9SRVFVRVNULworCis8cD4KKworVGhpcyBwYWNrZXQgaXMgc2VudCBieSB0aGUgY2xpZW50IHRvIHJlcXVlc3QgdmFsdWVzIG9mIHBhcmFtZXRlcnMuIFRoZSBwYWNrZXQKK2JlZ2lucyB3aXRoIGFuIGludGVnZXIgd2hpY2ggaG9sZHMgZmxhZ3MgKHNlZSA8dHQvQlJMQVBJX1BBUkFNRl8qLykgd2hpY2gKK2Rlc2NyaWJlIHdoaWNoLCBob3csIGFuZCB3aGVuIHRoZSB2YWx1ZSBzaG91bGQgYmUgcmV0dXJuZWQgYnkgdGhlIHNlcnZlcjoKKzxpdGVtaXplPgorPGl0ZW0+IFdoZW4gdGhlIDx0dC9CUkxBUElfUEFSQU1GX0dMT0JBTC8gZmxhZyBpcyBzZXQsIHRoZSBzZXJ2ZXIgd2lsbAorcmV0dXJuL3N1YnNjcmliZSB0aGUgZ2xvYmFsIHZhbHVlIGluc3RlYWQgb2YgdGhlIGxvY2FsIHZhbHVlLgorPGl0ZW0+IFdoZW4gdGhlIDx0dC9CUkxBUElfUEFSQU1GX0dFVC8gZmxhZyBpcyBzZXQsIHRoZSBzZXJ2ZXIgYWNrbm93bGVkZ2VzIHRoZQorcmVxdWVzdCBieSByZXR1cm5pbmcgdGhlIGxhdGVzdCB2YWx1ZSB3aXRoIGEgPHR0L0JSTEFQSV9QQUNLRVRfUEFSQU1fVkFMVUUvCitwYWNrZXQuIE90aGVyd2lzZSB0aGUgc2VydmVyIGFja25vd2xlZGdlcyB0aGUgcmVxdWVzdCB3aXRoIGEKKzx0dC9CUkxBUElfUEFDS0VUX0FDSy8gcGFja2V0LCB3aXRob3V0IHByb3ZpZGluZyB0aGUgdmFsdWUuCis8aXRlbT4gV2hlbiB0aGUgPHR0L0JSTEFQSV9QQVJBTUZfU1VCU0NSSUJFLyBmbGFnIGlzIHNldCwgdGhlIHNlcnZlciB3aWxsIGtlZXAKK3NlbmRpbmcgYXN5bmNocm9ub3VzbHkgdGhlIHZhbHVlIG9mIHRoZSBwYXJhbWV0ZXIgd2hlbmV2ZXIgaXQgY2hhbmdlcywgd2l0aAorPHR0L0JSTEFQSV9QQUNLRVRfUEFSQU1fVVBEQVRFLyBwYWNrZXRzLCB1bnRpbAorYW5vdGhlciByZXF1ZXN0IHBhY2tldCBoYXMgdGhlIDx0dC9CUkxBUElfUEFSQU1GX1VOU1VCU0NSSUJFLyBmbGFnIHNldCBmb3IgdGhpcworcGFyYW1ldGVyLgorPGl0ZW0+IFdoZW4gdGhlIDx0dC9CUkxBUElfUEFSQU1GX1NFTEYvIGZsYWcgaXMgc2V0IGFsb25nCis8dHQvQlJMQVBJX1BBUkFNRl9TVUJTQ1JJQkUvLCB0aGUgc2VydmVyIHdpbGwgc2VuZCB0aGUgdmFsdWUgb2YgdGhlIHBhcmFtZXRlcgord2hlbiBpdCBpcyBjaGFuZ2VkIGV2ZW4gYnkgdGhlIGNsaWVudCBpdHNlbGYuCis8aXRlbT4gV2hlbiB0aGUgPHR0L0JSTEFQSV9QQVJBTUZfVU5TVUJTQ1JJQkUvIGZsYWcgaXMgc2V0LCB0aGUgc2VydmVyCit3aWxsIHN0b3Agc2VuZGluZyBhc3luY2hyb25vdXNseSB0aGUgdmFsdWUgb2YgdGhlIHBhcmFtZXRlciB3aXRoCis8dHQvQlJMQVBJX1BBQ0tFVF9QQVJBTV9VUERBVEUvIHBhY2tldHMuCis8L2l0ZW1pemU+CisKK0l0IGRvZXMgbm90IG1ha2Ugc2Vuc2UgdG8gc2V0IGJvdGggdGhlIDx0dC9CUkxBUElfUEFSQU1GX1NVQlNDUklCRS8gYW5kCis8dHQvQlJMQVBJX1BBUkFNRl9VTlNVQlNDUklCRS8gZmxhZ3MuCisKK1RoZW4gYW4gaW50ZWdlciByZXByZXNlbnRpbmcgdGhlIHBhcmFtZXRlciB0byBiZSByZXF1ZXN0ZWQuCitUaGVuIHR3byBpbnRlZ2VycyB0aGF0IGZvcm0gKGluIGJpZy1lbmRpYW4gb3JkZXIpIGEgNjRiaXQgdmFsdWUgdXNlZCB0bworc3Vic3BlY2lmeSB0aGUgcHJlY2lzZSBwYXJhbWV0ZXIgdG8gYmUgcmVxdWVzdGVkIChlLmcuIGEga2V5Y29kZSBudW1iZXIpLgorCitJZiBzZXZlcmFsIDx0dC9CUkxBUElfUEFSQU1GX1NVQlNDUklCRS8gcGFja2V0cyBhcmUgc2VudCBieSB0aGUgY2xpZW50LCBhcworbWFueSA8dHQvQlJMQVBJX1BBUkFNRl9VTlNVQlNDUklCRS8gcGFja2V0cyBoYXZlIHRvIGJlIHNlbnQgYnkgdGhlIGNsaWVudCBiZWZvcmUKK3RoZSBzZXJ2ZXIgc3RvcHMgc2VuZGluZyA8dHQvQlJMQVBJX1BBQ0tFVF9QQVJBTV9VUERBVEUvIHBhY2tldHMuCisKKzxzZWN0Mj48dHQvQlJMQVBJX1BBQ0tFVF9QQVJBTV9WQUxVRS8KKworPHA+CitUaGlzIHBhY2tldCBpcyBzZW50IGJ5IHRoZSBjbGllbnQgb3IgdGhlIHNlcnZlciB0byBwcm92aWRlIHRoZSB2YWx1ZSBvZiBhCitwYXJhbWV0ZXIuIFRoZSBwYWNrZXQgYmVnaW5zIHdpdGggYW4gaW50ZWdlciB3aGljaCBob2xkcyBmbGFncyAoc2VlCis8dHQvQlJMQVBJX1BWRl8qLykgd2hpY2ggZGVzY3JpYmUgd2hpY2ggdmFsdWUgaXMgYmVpbmcgdHJhbnNtaXR0ZWQ6CisKKzxpdGVtaXplPgorPGl0ZW0+IFdoZW4gdGhlIDx0dC9CUkxBUElfUFZGX0dMT0JBTC8gZmxhZyBpcyBzZXQsIHRoZSB2YWx1ZSBpcyB0aGUgZ2xvYmFsIHZhbHVlCitpbnN0ZWFkIG9mIHRoZSBsb2NhbCB2YWx1ZS4KKzwvaXRlbWl6ZT4KKworVGhlbiBhbiBpbnRlZ2VyIHJlcHJlc2VudGluZyB0aGUgcGFyYW1ldGVyIGJlaW5nIHRyYW5zbWl0dGVkLiBUaGVuIHR3byBpbnRlZ2VycwordGhhdCBmb3JtIChpbiBiaWctZW5kaWFuIG9yZGVyKSBhIDY0Yml0IHZhbHVlIHVzZWQgdG8gc3Vic3BlY2lmeSB0aGUgcHJlY2lzZQorcGFyYW1ldGVyIGJlaW5nIHRyYW5zbWl0dGVkIChlLmcuIGEga2V5Y29kZSBudW1iZXIpLiAgRXZlbnR1YWxseSwgdGhlIHBhY2tldAorY29udGFpbnMgdGhlIHZhbHVlLgorCitXaGVuIHRoZSBwYWNrZXQgaXMgc2VudCBieSB0aGUgY2xpZW50LCBpdCBkZWZpbmVzIHRoZSBuZXcgdmFsdWUgb2YgdGhlCitwYXJhbWV0ZXIsIGFuZCBpZiBpdCBpcyBhIGdsb2JhbCB2YWx1ZSwgdGhlIHNlcnZlciBicm9hZGNhc3RzIHRoZSBuZXcgdmFsdWUgdG8KK2FsbCBjbGllbnRzIHdoaWNoIGhhdmUgc3Vic2NyaWJlZCB0byB1cGRhdGVzLiBUaGUgcGFja2V0IGlzIHRoZW4gYWNrbm93bGVkZ2VkIGJ5Cit0aGUgc2VydmVyIG9uIHN1Y2Nlc3MuIElmIHRoZSB2YWx1ZSBjYW4gbm90IGJlIGNoYW5nZWQsIHRoZSBzZXJ2ZXIgcmV0dXJucyBhbgorZXJyb3IgKGUuZy4gPHR0L0JSTEFQSV9FUlJPUl9SRUFET05MWV9QQVJBTUVURVIvKS4KKworPHNlY3QyPjx0dC9CUkxBUElfUEFDS0VUX1BBUkFNX1ZBTFVFLworCitUaGlzIHBhY2tldCBpcyBzZW50IGFzeW5jaHJvbm91c2x5IGJ5IHRoZSBzZXJ2ZXIgdG8gcHJvdmlkZSBhbiB1cGRhdGUgb2YgYQordmFsdWUgb2YgYSBwYXJhbWV0ZXIuIFRoaXMgaXMgc2VudCBvbmx5IGlmIHRoZSBjbGllbnQgaGFzIHByZXZpb3VzbHkgc2VudCBhCis8dHQvQlJMQVBJX1BBQ0tFVF9QQVJBTV9SRVFVRVNULyBwYWNrZXQgd2l0aCB0aGUgPHR0L0JSTEFQSV9QQVJBTUZfU1VCU0NSSUJFLworZm9yIHRoZSBjb3JyZXNwb25kaW5nIHBhcmFtZXRlci4KKworSXQgaXMgc3RydWN0dXJlZCBleGFjdGx5IGxpa2UgYSA8dHQvQlJMQVBJX1BBQ0tFVF9QQVJBTV9WQUxVRS8gcGFja2V0LgorCis8c2VjdDI+PHR0L0JSTEFQSV9QQUNLRVRfU1lOQ0hST05JWkUvCisKK1RoaXMgcGFja2V0IGlzIHNlbnQgYnkgdGhlIGNsaWVudCBhbmQganVzdCBhY2tub3dsZWRnZWQgYnkgdGhlIHNlcnZlci4gVGhpcworYWxsb3dzIHRoZSBjbGllbnQgdG8gcGVyZm9ybSBhIHJvdW5kLXRyeSB3aXRoIHRoZSBzZXJ2ZXIsIHRodXMgY29sbGVjdGluZyBhbnkKK3BlbmRpbmcgZXhjZXB0aW9uIG5vdGlmaWNhdGlvbi4KKworPC9hcnRpY2xlPgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRzL01hbnVhbC1CcmxBUEkvRW5nbGlzaC9NYWtlZmlsZS5pbiBiL0RvY3VtZW50cy9NYW51YWwtQnJsQVBJL0VuZ2xpc2gvTWFrZWZpbGUuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzcyZmRkMAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50cy9NYW51YWwtQnJsQVBJL0VuZ2xpc2gvTWFrZWZpbGUuaW4KQEAgLTAsMCArMSwyMSBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorIyAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyMKKyMgQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorIworIyBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorIworIyBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisjIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyMgbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisjCisjIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK0RPQ1VNRU5UX05BTUUgPSBCcmxBUEkKK0RPQ1VNRU5UX0xBTkdVQUdFID0gZW5nbGlzaAoraW5jbHVkZSAkKFNSQ19UT1ApZG9jdW1lbnQubWsKZGlmZiAtLWdpdCBhL0RvY3VtZW50cy9SRUFETUUuQVBJRnV6emluZyBiL0RvY3VtZW50cy9SRUFETUUuQVBJRnV6emluZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNWNhYWI0Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRzL1JFQURNRS5BUElGdXp6aW5nCkBAIC0wLDAgKzEsNjAgQEAKK35+fn5+fn4KK0Z1enppbmcKK35+fn5+fn4KKworLi4gaW5jbHVkZTo6IHByb2xvZ3VlLnJzdAorCitQcmluY2lwbGUKKz09PT09PT09PQorCitCUkxUVFkgaGFzIHNvbWUgc3VwcG9ydCBmb3IgdGVzdGluZyBpdCB0aHJvdWdoIGZ1enppbmcsIGkuZS4gZmVlZGluZyBpdCB3aXRoCittb3JlIG9yIGxlc3MgcmFuZG9tIGNvbnRlbnQsIHRvIGNoZWNrIHRoYXQgaXQgZG9lcyBub3QgZmFsbCBpbnRvIHBpZWNlcy4KKworQnVpbGRpbmcKKy0tLS0tLS0tCisKK0J1aWxkaW5nIHdpdGggZnV6emluZyBzdXBwb3J0IGlzCisKKyAgIENDPWNsYW5nIC4vY29uZmlndXJlIC0tZW5hYmxlLWFwaS1mdXp6aW5nCisKKyhGdXp6aW5nIGlzIG9ubHkgc3VwcG9ydGVkIHdpdGggdGhlIGNsYW5nIGNvbXBpbGVyKQorCitUaGlzIHdpbGwgYWxzbyBlbmFibGUgdGhlIGFkZHJlc3MgYW5kIHVuZGVmaW5lZC1iZWhhdmlvciBzYW5pdGl6ZXJzLgorCitSdW5uaW5nCistLS0tLS0tCisKK1RvIHN0YXJ0IGEgZnV6emluZyBzZXNzaW9uLCBvbmUgaGFzIHRvIHNldCB0aGUgZnV6eiBCcmxBUEkgcGFyYW1ldGVyLCBmb3IKK2luc3RhbmNlIHRvIHN0YXJ0IDEwMDAgZnV6emluZyBsb29wczoKKworICAgLi9ydW4tYnJsdHR5IC1iIHh3IC14IG5vIC1BIGZ1eno9MTAwMCAtbiAtZQorCitJdCBjYW4gYmUgdXNlZnVsIHRvIHRyeSBkaWZmZXJlbnQgZnV6emluZyBzZWVkcyB3aXRoOgorCisgICAuL3J1bi1icmx0dHkgLWIgeHcgLXggbm8gLUEgZnV6ej0xMDAwLGZ1enpzZWVkPTEyMzQgLW4gLWUKKworVGhlIGluaXRpYWwgc3RlcHMgb2YgQnJsQVBJIGNvbm5lY3Rpb25zIGFyZSBub3QgZnV6emVkIGJ5IGRlZmF1bHQsIHNvIHRoZSBmdXp6ZXIKK2RvZXMgbm90IGhhdmUgdG8gZ2V0IGl0IHJpZ2h0IGJlZm9yZSBmdXp6aW5nIHRoZSByZXN0IG9mIHRoZSBwcm90b2NvbC4gVG8gZnV6egordGhlc2UgaW5pdGlhbCBzdGVwcywgb25lIGNhbiB1c2U6CisKKyAgIC4vcnVuLWJybHR0eSAtYiB4dyAteCBubyAtQSBmdXp6PTEwMDAsZnV6emhlYWQ9b24gLW4gLWUKKworQ29udmVyc2VseSwgb25lIGNhbiBjb25jZW50cmF0ZSB0aGUgZnV6emluZyBvbiB0aGUgd3JpdGVUZXh0IG9wZXJhdGlvbiBvbmx5IChpbgorbGF0aW4xKSB3aXRoOgorCisgICAuL3J1bi1icmx0dHkgLWIgeHcgLXggbm8gLUEgZnV6ej0xMDAwLGZ1enp3cml0ZT1vbiAtbiAtZQorCitBbmQgaW4gdXRmODoKKworICAgLi9ydW4tYnJsdHR5IC1iIHh3IC14IG5vIC1BIGZ1eno9MTAwMCxmdXp6d3JpdGV1dGY4PW9uIC1uIC1lCisKK1JlcHJvZHVjaW5nCistLS0tLS0tLS0tLQorCitPbmNlIGEgYnVnIGlzIGRldGVjdGVkIGJ5IHRoZSBmdXp6ZXIsIGl0IGVtaXRzIGEgY3Jhc2ggZmlsZS4gT25lIGNhbiByZXByb2R1Y2UKK3RoZSBiZWhhdmlvciB3aXRoOgorCisgICAuL3J1bi1icmx0dHkgLWIgeHcgLXggbm8gLUEgY3Jhc2g9Y3Jhc2gtZGEzOWEzZWU1ZTZiNGIwZDMyNTViZmVmOTU2MDE4OTBhZmQ4MDcwOSAtbiAtZQorCithbmQgdXNlIGdkYiBldGMuIGF0IHdpbGwgdG8gdW5kZXJzdGFuZCB0aGUgYnVnLCBhbmQgZXZlbnR1YWxseSBjaGVjayB3aGVuIGl0IGlzCitmaXhlZC4KZGlmZiAtLWdpdCBhL0RvY3VtZW50cy9SRUFETUUuQW5kcm9pZCBiL0RvY3VtZW50cy9SRUFETUUuQW5kcm9pZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZTdjOWY2Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRzL1JFQURNRS5BbmRyb2lkCkBAIC0wLDAgKzEsOTYwIEBACit+fn5+fn5+fn5+fn5+fn5+fgorQlJMVFRZIG9uIEFuZHJvaWQKK35+fn5+fn5+fn5+fn5+fn5+CisKKy4uIHxTREsgYnVpbGQgdG9vbHMgdmVyc2lvbnwgcmVwbGFjZTo6IDI5LjAuMworLi4gfE5ESyB2ZXJzaW9ufCByZXBsYWNlOjogcjIxZSAoMjEuNC43MDc1NTI5KQorLi4gfEpESyB2ZXJzaW9ufCByZXBsYWNlOjogMS43CisKKy4uIF9CUkxUVFkgb24gR29vZ2xlIFBsYXk6IGh0dHBzOi8vcGxheS5nb29nbGUuY29tL3N0b3JlL2FwcHMvZGV0YWlscz9pZD1vcmcuYTExeS5icmx0dHkuYW5kcm9pZAorCisuLiBpbmNsdWRlOjogcHJvbG9ndWUucnN0CisKK1VzaW5nIEJSTFRUWQorPT09PT09PT09PT09CisKK0FjdGl2YXRpb24gYW5kIENvbmZpZ3VyYXRpb24KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQXQgdGhpcyBwb2ludCwgQlJMVFRZIGhhcyBiZWVuIGluc3RhbGxlZC4gTmV4dCwgeW91J2xsIG5lZWQgdG8gZ28gaW50bworYGBTZXR0aW5nc2BgIC0+IGBgQWNjZXNzaWJpbGl0eWBgIC0+IGBgQlJMVFRZYGAgaW4gb3JkZXIgdG8gc3RhcnQgdGhlIGBgQlJMVFRZYGAKK2FjY2Vzc2liaWxpdHkgc2VydmljZSwgYWRqdXN0IGl0cyBzZXR0aW5ncywgYW5kIHNlbGVjdCB5b3VyIGJyYWlsbGUgZGV2aWNlLgorCitJZiB5b3UnbGwgYmUgY29ubmVjdGluZyB0byB5b3VyIGJyYWlsbGUgZGV2aWNlIHZpYSBCbHVldG9vdGgsCitzZWUgYENvbm5lY3RpbmcgVmlhIEJsdWV0b290aGBfLgorCitJZiB5b3UnbGwgYmUgY29ubmVjdGluZyB0byB5b3VyIGJyYWlsbGUgZGV2aWNlIHZpYSBVU0IsCitzZWUgYENvbm5lY3RpbmcgVmlhIFVTQmBfLgorCitJZiB5b3VyIGJyYWlsbGUgZGV2aWNlIGhhcyBhIGJyYWlsbGUga2V5Ym9hcmQsCitzZWUgYFVzaW5nIGEgQnJhaWxsZSBLZXlib2FyZGBfLgorCitTdGFydGluZyBhbmQgU3RvcHBpbmcgQlJMVFRZCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisKK0JSTFRUWSBpc24ndCBhIHJlZ3VsYXIgQW5kcm9pZCBhcHBsaWNhdGlvbiAtIGl0J3MgYW4gYWNjZXNzaWJpbGl0eSBzZXJ2aWNlLiBBcworc3VjaCwgaXQgY2FuJ3QgYmUgc3RhcnRlZCBhbmQgc3RvcHBlZCBpbiB0aGUgdXN1YWwgd2F5LCBpLmUuIGZyb20gdGhlIGxhdW5jaGVyLgorSW4gZmFjdCwgaXQgY2FuJ3QgZXZlbiBiZSBmb3VuZCB3aXRoaW4gdGhlIGFwcGxpY2F0aW9ucyBsaXN0LgorCitCUkxUVFkgbXVzdCBiZSBzdGFydGVkIGFuZCBzdG9wcGVkIGZyb20gdGhlIGBgQWNjZXNzaWJpbGl0eSBTZXR0aW5nc2BgIHNjcmVlbi4KK1RvIGdldCB0aGVyZSwgbGF1bmNoIHRoZSBgYFNldHRpbmdzYGAgYXBwbGljYXRpb24sIGFuZCB0aGVuIHRhcCBvbgorYGBBY2Nlc3NpYmlsaXR5YGAgKG5lYXIgdGhlIGJvdHRvbSkuIFRoaXMgc2NyZWVuIGNvbnRhaW5zIGEgIlNlcnZpY2VzIiBzZWN0aW9uCit0aGF0IGxpc3RzIGFsbCBvZiB0aGUgYWNjZXNzaWJpbGl0eSBzZXJ2aWNlcyB0aGF0IGFyZSBjdXJyZW50bHkgaW5zdGFsbGVkIG9uCit0aGUgZGV2aWNlLiBGb3IgZWFjaCBpbnN0YWxsZWQgYWNjZXNzaWJpbGl0eSBzZXJ2aWNlLCB0aGVyZSdzIGFuIGFzc29jaWF0ZWQKK2luZGljYXRvciB0aGF0IHNheXMgYGBPbmBgIGlmIHRoYXQgc2VydmljZSBpcyBjdXJyZW50bHkgcnVubmluZywgYW5kIGBgT2ZmYGAgaWYKK2l0IGlzbid0LgorCitGaW5kIGBgQlJMVFRZYGAgYW5kIHRhcCBvbiBpdC4gVGhpcyBicmluZ3MgdXAgYSB3aW5kb3cgd2l0aCB0d28gaXRlbXMgaW4gaXQuCitPbmUgaXMgYSAic3dpdGNoIiBmb3IgdHVybmluZyBCUkxUVFkgb24gYW5kIG9mZi4gVGhlIG90aGVyIGlzIGEgYnV0dG9uIHRoYXQKK3Rha2VzIHlvdSB0byBCUkxUVFkncyBgYFNldHRpbmdzYGAgc2NyZWVuLiBZb3UgY2FuIGdvIHRocm91Z2ggQlJMVFRZJ3MKK3NldHRpbmdzLCBtYWtpbmcgY2hhbmdlcyBhcyBkZXNpcmVkLCBhcyB3ZWxsIGFzIGRlZmluZSB5b3VyIGJyYWlsbGUgZGV2aWNlKHMpLAorZWl0aGVyIGJlZm9yZSBzdGFydGluZyBCUkxUVFkgb3Igd2hpbGUgaXQncyBydW5uaW5nLgorCitDb25uZWN0aW5nIFlvdXIgQnJhaWxsZSBEZXZpY2UKK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorCitDb25uZWN0aW5nIFZpYSBCbHVldG9vdGgKK2BgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYAorCitJbiBvcmRlciB0byB1c2UgYSBCbHVldG9vdGggYnJhaWxsZSBkZXZpY2UsIHlvdSdsbCBuZWVkIHRvIGZpcnN0ICJwYWlyIiBpdCB3aXRoCit5b3VyIEFuZHJvaWQgZGV2aWNlLiBHbyBpbnRvIGBgU2V0dGluZ3NgYCAtPiBgYEJsdWV0b290aGBgLiBJZiB5b3VyIGJyYWlsbGUKK2RldmljZSBpcyBhbHJlYWR5IGxpc3RlZCB3aXRoaW4gdGhlIGBgUGFpcmVkIERldmljZXNgYCBzZWN0aW9uIG9mIHRoYXQgc2NyZWVuCit0aGVuIGl0IGhhcyBhbHJlYWR5IGJlZW4gcGFpcmVkLiBJZiB5b3Ugc3RpbGwgbmVlZCB0byBwYWlyIGl0IHRoZW4gdGFwCitgYFNlYXJjaCBmb3IgRGV2aWNlc2BgLiBUaGlzIHdpbGwgYWRkIGFuIGBgQXZhaWxhYmxlIERldmljZXNgYCBzZWN0aW9uIHRvIHRoZQorc2NyZWVuLiBJZiB5b3VyIGJyYWlsbGUgZGV2aWNlIGlzbid0IGxpc3RlZCB0aGVuIHlvdSdsbCBwcm9iYWJseSBuZWVkIHRvCitwZXJmb3JtIGEgbW9kZWwtc3BlY2lmaWMgYWN0aW9uIG9uIGl0IGluIG9yZGVyIHRvIG1ha2UgaXQgdmlzaWJsZQorKGFsc28ga25vd24gYXMgZGlzY292ZXJhYmxlKSAtIHNlZSBpdHMgbWFudWFsIGZvciBkZXRhaWxzLiBBZnRlciBkb2luZyB0aGF0LAordGFwIGBgU2VhcmNoIGZvciBEZXZpY2VzYGAgYWdhaW4uIFRhcCBvbiB5b3VyIGJyYWlsbGUgZGV2aWNlIHRvIGJlZ2luIHRoZQorQmx1ZXRvb3RoIFBhaXJpbmcgUmVxdWVzdCwgZW50ZXIgaXRzIFBJTiAoc2VlIGl0cyBtYW51YWwgZm9yIGRldGFpbHMpLCBhbmQgdGFwCitgYE9LYGAuCisKK0Nvbm5lY3RpbmcgVmlhIFVTQgorYGBgYGBgYGBgYGBgYGBgYGBgCisKK0luIG9yZGVyIHRvIHVzZSBhIFVTQiBicmFpbGxlIGRldmljZSwgeW91J2xsIG5lZWQgYSBzcGVjaWFsIGNhYmxlIGtub3duIGFzIGEKKyJNaWNybyBVU0IgSG9zdCBBZGFwdGVyIi4gVGhlIHJlYXNvbiBmb3IgdGhpcyBpcyB0aGF0IHRoZSBVU0IgcG9ydCBvbiBhbgorQW5kcm9pZCBkZXZpY2UgdXN1YWxseSBhY3RzIGFzIGEgImRldmljZSIgKHJhdGhlciB0aGFuIGFzIGEgImhvc3QiKSBwb3J0LiBUaGlzCitpcyBzbyB0aGF0LCBmb3IgZXhhbXBsZSwgeW91IGNhbiBjb250cm9sIHlvdXIgQW5kcm9pZCBkZXZpY2UgZnJvbSB5b3VyCitjb21wdXRlci4gVGhlIE1pY3JvIFVTQiBIb3N0IEFkYXB0ZXIgaGFzIGEgc3BlY2lhbCBwbHVnLCBrbm93biBhcyBhbiBPVEcKKyhvbi10aGUtZ28pIGNvbm5lY3RvciwgdGhhdCwgd2hlbiBpbnNlcnRlZCBpbnRvIHRoZSBBbmRyb2lkIGRldmljZSdzIFVTQiBwb3J0LAoraW5zdHJ1Y3RzIEFuZHJvaWQgdG8gYWN0IGFzIHRoZSBVU0IgaG9zdC4KKworVGhlIE1pY3JvIFVTQiBIb3N0IEFkYXB0ZXIgYWxzbyBhbGxvd3MgeW91IHRvIGNvbm5lY3QgYW55IG90aGVyIFVTQiAKK2RldmljZSAoa2V5Ym9hcmQsIG1vdXNlLCBwcmludGVyLCBodWIsIGV0YykgdG8geW91ciBBbmRyb2lkIGRldmljZS4gQmUgYXdhcmUsCit0aG91Z2gsIHRoYXQgaWYgYW55IHN1Y2ggZGV2aWNlLCBpbmNsdWRpbmcgeW91ciBicmFpbGxlIGRldmljZSwgZHJhd3MgcG93ZXIgdmlhCitpdHMgVVNCIHBvcnQgdGhlbiB5b3VyIEFuZHJvaWQgZGV2aWNlJ3MgYmF0dGVyeSB3aWxsIGJlY29tZSB0aGUgc291cmNlIG9mIHRoYXQKK3Bvd2VyLiBJZiBwb3J0YWJpbGl0eSBpc24ndCBhbiBpc3N1ZSwgeW91IG1heSB3aXNoIHRvIGNvbnNpZGVyIHVzaW5nIHlvdXIgTWljcm8KK1VTQiBIb3N0IEFkYXB0ZXIgdG8gY29ubmVjdCB5b3VyIEFuZHJvaWQgZGV2aWNlIHRvIGEgcG93ZXJlZCBodWIgc28gdGhhdCB5b3VyCitVU0IgZGV2aWNlcyB3aWxsIGRyYXcgcG93ZXIgZnJvbSB0aGUgaHViIHJhdGhlciB0aGFuIGZyb20geW91ciBBbmRyb2lkIGRldmljZSdzCitiYXR0ZXJ5LiBZb3UgbWF5IGFsc28gd2lzaCB0byBjb25zaWRlciBkaXNhYmxpbmcgVVNCIGNoYXJnaW5nIG9uIGFueSBkZXZpY2VzCit0aGF0IG9mZmVyIHRoaXMgY2FwYWJpbGl0eS4KKworRGVmaW5pbmcgWW91ciBCcmFpbGxlIERldmljZQorfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorCitZb3UgZG9uJ3QgYWN0dWFsbHkgbmVlZCB0byBkZWZpbmUgeW91ciBicmFpbGxlIGRldmljZSwgYnV0IEJSTFRUWSB3aWxsIGNvbm5lY3QKK3RvIGl0IG11Y2ggZmFzdGVyIGlmIHlvdSBkby4gSWYgeW91IGRvbid0LCBCUkxUVFkgd2lsbCBzZWFyY2ggdGhyb3VnaCBhbGwgb2YKK3RoZSBkZXZpY2VzIHRoYXQgaGF2ZSBiZWVuIGNvbm5lY3RlZCB2aWEgZWl0aGVyIEJsdWV0b290aCBvciBVU0IKKyhzZWUgYENvbm5lY3RpbmcgWW91ciBCcmFpbGxlIERldmljZWBfKSBmb3Igb25lIHRoYXQgaXQgcmVjb2duaXplcy4gSWYgdGhlcmUncworbW9yZSB0aGFuIG9uZSwgaXQnbGwgc2VsZWN0IHRoZSBmaXJzdCBvbmUgdGhhdCBpdCBmaW5kcy4KKworVG8gZGVmaW5lIHlvdXIgYnJhaWxsZSBkZXZpY2UsIGdvIHRvIEJSTFRUWSdzIGBgU2V0dGluZ3NgYCBzY3JlZW4sIHRhcCBvbgorYGBNYW5hZ2UgRGV2aWNlc2BgLCBhbmQgdGhlbiBvbiBgYEFkZCBEZXZpY2VgYC4gRnJvbSB0aGVyZSwgZmluZCB5b3VyIGJyYWlsbGUKK2RldmljZSwgYW5kIHRoZW4gdGFwIGBgQWRkYGAuIFRvIGZpbmQgeW91ciBicmFpbGxlIGRldmljZToKKworMSkgU2VsZWN0IGl0cyBjb21tdW5pY2F0aW9uIG1ldGhvZCAoQmx1ZXRvb3RoLCBVU0IpLgorCisyKSBTZWxlY3QgeW91ciBkZXZpY2UgZnJvbSB0aGUgbGlzdCB0aGF0J3MgcHJlc2VudGVkLgorCiszKSBTZWxlY3QgdGhlIGNvcnJlY3QgYnJhaWxsZSBkcml2ZXIuCisgICBUaGlzIHN0ZXAgaXMgb3B0aW9uYWwsIGkuZS4geW91IGNhbiB1c3VhbGx5IGxlYXZlIGl0IHNldCB0byBgYGF1dG9kZXRlY3RgYC4KKyAgIEdvaW5nIHRocm91Z2ggdGhlIGVmZm9ydCBvZiBzZWxlY3RpbmcgdGhlIGNvcnJlY3QgZHJpdmVyLCBob3dldmVyLAorICAgZW5zdXJlcyBhIGZhc3QgYW5kIHJlbGlhYmxlIGNvbm5lY3Rpb24uCisKK0FmdGVyIHlvdSd2ZSBhZGRlZCB5b3VyIGJyYWlsbGUgZGV2aWNlIHRvIEJSTFRUWSwgdGFwIG9uIGBgU2VsZWN0ZWQgRGV2aWNlYGAKK2FuZCBzZWxlY3QgaXQgZnJvbSB0aGUgbGlzdCBvZiBkZXZpY2VzIHRoYXQgQlJMVFRZIGtub3dzIGFib3V0LgorCitVc2luZyBhIEJyYWlsbGUgS2V5Ym9hcmQKK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorCitCcmFpbGxlIGRldmljZSBrZXlib2FyZCBpbnB1dCBpcyBzdXBwb3J0ZWQsIGJ1dCwgbGlrZSBhbGwgQW5kcm9pZCBpbnB1dAorbWV0aG9kcywgaXQgbXVzdCBiZSBleHBsaWNpdGx5IGVuYWJsZWQsIGFuZCB0aGVuIGV4cGxpY2l0bHkgc2VsZWN0ZWQuIEFuZHJvaWQKK2RvZXNuJ3QgcGVybWl0IEJSTFRUWSB0byBkbyBlaXRoZXIgb2YgdGhlc2UgYXV0b21hdGljYWxseSBvbiB5b3VyIGJlaGFsZi4KK0FsdGhvdWdoIGl0J3MgaW5jb252ZW5pZW50LCBBbmRyb2lkIGltcG9zZXMgdGhpcyBtYW51YWwgcHJvY2VzcyBzbyB0aGF0IHlvdSdyZQordmVyeSBjb25zY2lvdXNseSBhd2FyZSBvZiB3aGljaCBpbnB1dCBtZXRob2RzIGNhbiBwcm9jZXNzLCBhbmQgd2hpY2ggaW5wdXQKK21ldGhvZCBpcyBjdXJyZW50bHkgcHJvY2Vzc2luZywgd2hhdGV2ZXIgeW91J3JlIHR5cGluZy4gU3VjaCBhcHBsaWNhdGlvbnMsCithZnRlciBhbGwsIGhhbmRsZSBleHRyZW1lbHkgc2Vuc2l0aXZlIHBlcnNvbmFsIGRhdGEgKHN1Y2ggYXMgcGFzc3dvcmRzLCBjcmVkaXQKK2NhcmQgbnVtYmVycywgZXRjKSwgc28gaXQncyBjcnVjaWFsIHRoYXQgeW91IG1ha2UgeW91ciBvd24gZGVjaXNpb25zIHJlZ2FyZGluZword2hpY2ggb2YgdGhlbSB5b3UncmUgd2lsbGluZyB0byB0cnVzdC4KKworSWYgeW91IHR5cGUgb24geW91ciBicmFpbGxlIGRldmljZSdzIGtleWJvYXJkIHdoZW4gQlJMVFRZJ3MgaW5wdXQgbWV0aG9kIGlzCitlaXRoZXIgZGlzYWJsZWQgb3IgZW5hYmxlZCBidXQgbm90IHNlbGVjdGVkLCB0aGVuIEJSTFRUWSB3aWxsIGFsZXJ0IHlvdSB0byB0aGlzCitmYWN0IHZpYSBhIG1lc3NhZ2Ugb24geW91ciBicmFpbGxlIGRpc3BsYXkuIFlvdSBtYXkgd2lzaCB0byBlbmFibGUgQlJMVFRZJ3MKK2tleWJvYXJkIHN1cHBvcnQgYWhlYWQgb2YgdGltZSwgYnV0IHlvdSBwcm9iYWJseSBkb24ndCB3YW50IHRvIHNlbGVjdCBpdCBhaGVhZAorb2YgdGltZS4gVGhlIHJlYXNvbiBmb3IgdGhpcyBpcyB0aGF0IEFuZHJvaWQgb25seSBhbGxvd3MgZXhhY3RseSBvbmUgaW5wdXQKK21ldGhvZCB0byBiZSBpbiB1c2UgYXQgYSB0aW1lLiBXaGVuIHlvdSBleHBsaWNpdGx5IHNlbGVjdCBCUkxUVFkncyBpbnB1dAorbWV0aG9kLCB0aGVyZWZvcmUsIHlvdSdyZSBhbHNvIGltcGxpY2l0bHkgZGVzZWxlY3RpbmcgdGhlIG9uLXNjcmVlbiBrZXlib2FyZC4KKworWW91IGNhbiBlbmFibGUgQlJMVFRZJ3Mga2V5Ym9hcmQgc3VwcG9ydCBpbiBvbmUgb2YgdGhlIGZvbGxvd2luZyB3YXlzOgorCisqIExhdW5jaCBBbmRyb2lkJ3MgYGBTZXR0aW5nc2BgIGFwcGxpY2F0aW9uIGFuZCB0YXAgb24gYGBMYW5ndWFnZSBhbmQgSW5wdXRgYC4KKyAgVGhlIGBgS2V5Ym9hcmQgYW5kIElucHV0IE1ldGhvZHNgYCBzZWN0aW9uIG9mIHRoaXMgc2NyZWVuIHNob3dzIHRoZQorICBgYERlZmF1bHRgYCAoY3VycmVudGx5IHNlbGVjdGVkKSBpbnB1dCBtZXRob2QsIGFuZCBjb250YWlucyBhIGNoZWNrIGJveCBmb3IKKyAgZWFjaCBpbnN0YWxsZWQgaW5wdXQgbWV0aG9kLiBBbiBpbnB1dCBtZXRob2QgaXMgZW5hYmxlZCBpZiBpdHMgY2hlY2sgYm94IGlzCisgIGNoZWNrZWQsIHNvLCB0byBlbmFibGUgQlJMVFRZJ3Mga2V5Ym9hcmQgc3VwcG9ydCwgY2hlY2sgdGhlIGJveCBsYWJlbGxlZAorICBgYEJSTFRUWSBJbnB1dCBTZXJ2aWNlYGAuIE9uY2UgaXQncyBiZWVuIGVuYWJsZWQsIHlvdSBjYW4gc2VsZWN0IGl0IGF0IGFueQorICB0aW1lIGJ5IGFkanVzdGluZyB0aGUgYGBEZWZhdWx0YGAgc2V0dGluZy4KKworKiBJZiBCUkxUVFkgaXMgcnVubmluZyB0aGVuIHN3aXRjaGluZyBiZXR3ZWVuIGlucHV0IG1ldGhvZHMgaXMgbXVjaCBlYXNpZXIuCisgIEdvIHRvIEJSTFRUWSdzIGBBY3Rpb25zIHNjcmVlbmBfIGFuZCB0YXAgYGBTd2l0Y2ggSW5wdXQgTWV0aG9kYGAuIFRoaXMKKyAgYnJpbmdzIHVwIEFuZHJvaWQncyBJbnB1dCBNZXRob2QgUGlja2VyLCB3aGljaCBwcmVzZW50cyBhIHNldCBvZiByYWRpbworICBidXR0b25zIC0gb25lIGZvciBlYWNoIGVuYWJsZWQgaW5wdXQgbWV0aG9kLiBJZiB0aGVyZSdzIG5vIHJhZGlvIGJ1dHRvbiBmb3IKKyAgQlJMVFRZJ3MgaW5wdXQgbWV0aG9kIHRoZW4gaXQgaGFzbid0IGJlZW4gZW5hYmxlZCB5ZXQuIFRvIGVuYWJsZSBpdCwgdGFwIHRoZQorICBidXR0b24gbGFiZWxsZWQgYGBTZXQgdXAgaW5wdXQgbWV0aG9kc2BgLiBUaGlzIHNjcmVlbiBjb250YWlucyBhIGNoZWNrIGJveCBmb3IKKyAgZWFjaCBpbnN0YWxsZWQgaW5wdXQgbWV0aG9kLiBDaGVjayB0aGUgYm94IGxhYmVsbGVkIGBgQlJMVFRZIElucHV0IFNlcnZpY2VgYC4KKyAgVGhlbiB0YXAgdGhlIGBgQmFja2BgIGJ1dHRvbiB0byByZXR1cm4gdG8gdGhlIGBgTGFuZ3VhZ2UgYW5kIElucHV0YGAgc2NyZWVuLAorICBmaW5kIHRoZSBgYEtleWJvYXJkIGFuZCBJbnB1dCBNZXRob2RzYGAgc2VjdGlvbiwgYW5kIHNldCB0aGUgYGBEZWZhdWx0YGAKKyAgaW5wdXQgbWV0aG9kIHRvIEJSTFRUWSdzIGlucHV0IG1ldGhvZC4KKworQWN0aW9ucyBTY3JlZW4KK35+fn5+fn5+fn5+fn5+CisKK0JSTFRUWSdzIEFjdGlvbnMgc2NyZWVuIHByZXNlbnRzIHNldmVyYWwgY29tbW9uIGFjdGlvbnMgdGhhdCB5b3UgbWF5IHdpc2ggdG8gcGVyZm9ybToKKworKiBTd2l0Y2ggSW5wdXQgTWV0aG9kCisqIEJSTFRUWSBTZXR0aW5ncworKiBWaWV3IFVzZXIgR3VpZGUKKyogQnJvd3NlIFdlYiBTaXRlCisqIEJyb3dzZSBDb21tdW5pdHkgTWVzc2FnZXMKKyogUG9zdCBDb21tdW5pdHkgTWVzc2FnZQorKiBNYW5hZ2UgQ29tbXVuaXR5IE1lbWJlcnNoaXAKKyogVXBkYXRlIEFwcGxpY2F0aW9uCisqIEFib3V0IEFwcGxpY2F0aW9uCisKK1lvdSBjYW4gZ2V0IHRvIHRoaXMgc2NyZWVuIHVzaW5nIGFueSBvZiB0aGUgZm9sbG93aW5nIG1ldGhvZHM6CisKKyogRnJvbSB5b3VyIGJyYWlsbGUgZGV2aWNlIHZpYSBnbG9iYWwgYWN0aW9uICM1LgorICBTZWUgYEdsb2JhbCBBY3Rpb25zYF8gZm9yIGRldGFpbHMuCisKKyogRnJvbSB5b3VyIGJyYWlsbGUgZGV2aWNlIHZpYSBTcGFjZSArIERvdHMxMjM0NTY3OC4KKworKiBWaWEgYGBTZXR0aW5nc2BgIC0+IGBgQWNjZXNzaWJpbGl0eWBgIC0+IGBgQlJMVFRZYGAgLT4gYGBTZXR0aW5nc2BgLgorCisqIEZyb20gdGhlIG5vdGlmaWNhdGlvbnMgc2hhZGUuCisgIE9wZW4gaXQgYnkgZHJhZ2dpbmcgdGhlIHN0YXR1cyBiYXIgZG93bndhcmQ6CisKKyAgKyBXaXRoIHR3byBmaW5nZXJzIChpZiBFeHBsb3JlIGJ5IFRvdWNoIGlzIGFjdGl2ZSkuCisgICsgV2l0aCBvbmUgZmluZ2VyIChpZiBFeHBsb3JlIGJ5IFRvdWNoIGlzbid0IGFjdGl2ZSkuCisKKyAgVGhlbiBmaW5kIEJSTFRUWSdzIHNlcnZpY2Ugbm90aWZpY2F0aW9uIGFuZCB0YXAgaXQuCisKKyogVmlhIHRoZSBBY2Nlc3NpYmlsaXR5IGJ1dHRvbiBvbiB0aGUgc3lzdGVtIG5hdmlnYXRpb24gYmFyLgorICBUaGlzIGNhcGFiaWxpdHkgd2FzIGludHJvZHVjZWQgaW4gQW5kcm9pZCA4LjAgKE9yZW8pLgorICBUaGUgYnV0dG9uIG1heSBub3QgYmUgdmlzaWJsZSBmb3IgYSBudW1iZXIgb2YgcmVhc29ucywgZm9yIGV4YW1wbGU6CisKKyAgKyBUaGUgZGV2aWNlJ3Mgc3lzdGVtIG5hdmlnYXRpb24gYmFyIGlzbid0IHJlbmRlcmVkIHZpYSBzb2Z0d2FyZS4KKyAgKyBBbiBhcHBsaWNhdGlvbiBoYXMgY2hvc2VuIHRvIGhpZGUgdGhlIHN5c3RlbSBuYXZpZ2F0aW9uIGJhci4KKworQ3VzdG9taXplZCBEYXRhIEZpbGVzCit+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKworWW91IGNhbiBjdXN0b21pemUgYW55IG9mIEJSTFRUWSdzIGRhdGEgZmlsZXMsCitlLmcuIGEgdGV4dCwgY29udHJhY3Rpb24sIG9yIGtleSB0YWJsZSBvciBzdWJ0YWJsZS4KK1RvIGRvIHRoaXMsIGFkZCBhIGZpbGUgd2l0aCB0aGUgc2FtZSBuYW1lIGRpcmVjdGx5IGludG8gYSBmb2xkZXIgbmFtZWQgYGBicmx0dHlgYAorYXQgdGhlIHRvcC1sZXZlbCBvZiB5b3VyIEFuZHJvaWQgZGV2aWNlJ3MgcHJpbWFyeSBzaGFyZWQvZXh0ZXJuYWwgc3RvcmFnZSBhcmVhLgorVGhpcyBhcmVhIG1pZ2h0IGJlIGludGVybmFsIChvbiB0aGUgZGV2aWNlIGl0c2VsZikKK29yIGV4dGVybmFsIChvbiBhIHJlbW92YWwgc3RvcmFnZSBkZXZpY2UsIGUuZy4gYW4gU0QgY2FyZCkuCitOb3JtYWxseSwgaXQncyB0aGUgYXJlYSB0aGF0IGBgL3NkY2FyZGBgIGlzIHN5bWJvbGljYWxseSBsaW5rZWQgdG8uCisKK0JSTFRUWSB3b24ndCBiZSBhd2FyZSBvZiB5b3VyIGN1c3RvbWl6ZWQgZGF0YSBmaWxlcworaWYgdGhpcyBhcmVhIGhhcyBiZWVuIG1vdW50ZWQgYnkgYSBjb21wdXRlci4KKworSXQncyBzYWZlIHRvIGluY2x1ZGUgdGhlIG9yaWdpbmFsIGRhdGEgZmlsZSBmcm9tIHlvdXIgY3VzdG9taXplZCBjb3B5LgorSWYgeW91J3JlIG9ubHkgYWRkaW5nIGxpbmVzLCB0aGVyZWZvcmUsIHRoZW4geW91ciBjdXN0b21pemVkIGNvcHkKK25lZWQgb25seSBjb250YWluIHRob3NlIGFkZGl0aW9ucyBhbmQgdGhlIGluY2x1ZGUgc3RhdGVtZW50LgorCitOYXZpZ2F0aW5nIHRoZSBTY3JlZW4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitVc2luZyBNdWx0aXBsZSBIb3N0cworfn5+fn5+fn5+fn5+fn5+fn5+fn4KKworQlJMVFRZIG9ubHkgcmVtYWlucyBjb25uZWN0ZWQgdG8geW91ciBicmFpbGxlIGRldmljZSB3aGlsZSB5b3VyIEFuZHJvaWQgZGV2aWNlCitpcyB1bmxvY2tlZCBvciB3aGlsZSBpdHMgc2NyZWVuIGlzIG9uLiBJZiB5b3VyIEFuZHJvaWQgZGV2aWNlIGlzIGxvY2tlZCBhbmQgaXRzCitzY3JlZW4gaXMgb2ZmIHRoZW4gQlJMVFRZIGF1dG9tYXRpY2FsbHkgZGlzY29ubmVjdHMgZnJvbSB5b3VyIGJyYWlsbGUgZGV2aWNlLgorVGhpcyBpcyBzbyB0aGF0IHlvdSBjYW4gZWFzaWx5IHNoYXJlIHlvdXIgYnJhaWxsZSBkZXZpY2UgYW1vbmdzdCBtdWx0aXBsZQoraG9zdHMuCisKK1ByZXNzaW5nIHlvdXIgQW5kcm9pZCBkZXZpY2UncyBwb3dlciBidXR0b24gKG9yIHNpbWlsYXIgYWN0aW9uKSB0byB3YWtlIGl0IHVwLAorZXZlbiB0aG91Z2ggaXQgbWF5IHN0aWxsIGJlIGxvY2tlZCwgaXMgc3VmZmljaWVudCB0byBjYXVzZSBCUkxUVFkgdG8KK2F1dG9tYXRpY2FsbHkgcmVjb25uZWN0IHRvIHlvdXIgYnJhaWxsZSBkZXZpY2UuIFRoaXMgYWxsb3dzIHlvdSB0byBlbnRlciB5b3VyCitwYXNzd29yZCBvciBQSU4gdmlhIHlvdXIgYnJhaWxsZSBrZXlib2FyZC4KKworWW91IGNhbiBjb250aW51ZSB1c2luZyB5b3VyIGJyYWlsbGUgZGV2aWNlIGV2ZW4gdGhvdWdoIHlvdXIgQW5kcm9pZCBkZXZpY2Uncworc2NyZWVuIG1heSBoYXZlIHR1cm5lZCBvZmYsIGFzIGxvbmcgYXMgaXRzIGxvY2sgdGltZXIgaGFzbid0IHlldCBleHBpcmVkLgorUHJlc3Npbmcga2V5cyBvbiB5b3VyIGJyYWlsbGUgZGV2aWNlIHJlc2V0cyB5b3VyIEFuZHJvaWQgZGV2aWNlJ3MgbG9jayB0aW1lciBpbgordGhlIHNhbWUgd2F5IHRoYXQgcHJlc3NpbmcgaXRzIGtleXMsIHRvdWNoaW5nIGl0cyBzY3JlZW4sIGV0YyBkb2VzLiBUaGlzIG1lYW5zCit0aGF0IHlvdXIgQW5kcm9pZCBkZXZpY2Ugd2lsbCBzdGF5IGF3YWtlIGFuZCB1bmxvY2tlZCBldmVuIHRob3VnaCB5b3UncmUgb25seQorY29udHJvbGxpbmcgaXQgZnJvbSB5b3VyIGJyYWlsbGUgZGV2aWNlLCBhbmQgdGhhdCBpdCdsbCBhbHNvIHN0aWxsCithdXRvbWF0aWNhbGx5IGxvY2sgb25jZSB5b3UncmUgbm8gbG9uZ2VyIHVzaW5nIGl0LgorCitBY2Nlc3NpYmlsaXR5IEZvY3VzCit+fn5+fn5+fn5+fn5+fn5+fn5+CisKK1RoZSAiYWNjZXNzaWJpbGl0eSBmb2N1cyIgZmVhdHVyZSBvZiBBbmRyb2lkIGlzIHVzZWQgZm9yIGN1cnNvciB0cmFja2luZyBhbmQKK3JvdXRpbmcuIEl0J3MgYSBzb2Z0IGN1cnNvciwgbm90IHZpc2libGUgb24gdGhlIHNjcmVlbiwgdGhhdCBjYW4gYmUgCitwcm9ncmFtbWF0aWNhbGx5IGFzc29jaWF0ZWQgd2l0aCBhbnkgc2NyZWVuIGVsZW1lbnQuIEFsbCBzY3JlZW4gcmVhZGVycyB0aGF0Cit1c2UgaXQgdG8gZGVmaW5lIHRoZSBjdXJyZW50IGVsZW1lbnQgZm9yIGFjdGlvbnMgKGxpa2UgdGFwcGluZykgd2lsbCBpbXBsaWNpdGx5Citjb29wZXJhdGUgcmVhc29uYWJseSBzZWFtbGVzc2x5IHdpdGggb25lIGFub3RoZXIuCisKK1RoZSBjdXJzb3IgaXMgdXN1YWxseSBwbGFjZWQgb24gdGhlIGZpcnN0IGNoYXJhY3RlciBvZiB0aGUgc2NyZWVuIGVsZW1lbnQgdGhhdAorY3VycmVudGx5IGhhcyBhY2Nlc3NpYmlsaXR5IGZvY3VzLiBUaGUgb25lIGV4Y2VwdGlvbiB0byB0aGlzIGlzIHdpdGhpbiBhbgoraW5wdXQgYXJlYS4gSWYgdGhhdCBhcmVhIGhhcyBpbnB1dCBmb2N1cyB0aGVuIHRoZSBjdXJzb3IgaXMgcGxhY2VkIGF0Cit0aGUgbG9jYXRpb24gd2l0aGluIGl0IHdoZXJlIGlucHV0IHdpbGwgYmUgaW5zZXJ0ZWQuCisKK1doZW4gYSBob21lIHNjcmVlbiBmb2xkZXIgaXMgb3BlbmVkLCBCUkxUVFkgYXV0b21hdGljYWxseSBzZXRzIGFjY2Vzc2liaWxpdHkKK2ZvY3VzIHRvIHRoYXQgZm9sZGVyJ3MgZmlyc3QgZW50cnkuIFRoaXMgZWxpbWluYXRlcyB0aGUgbmVlZCB0byBzZWFyY2ggZm9yIGl0LgorCitUaGUgQ3Vyc29yIFJvdXRpbmcgS2V5cworfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKworVGhlIGN1cnNvciByb3V0aW5nIGtleXMgb2YgeW91ciBicmFpbGxlIGRldmljZSBwZXJmb3JtIHRoZWlyIHVzdWFsIGZ1bmN0aW9uIHdoZW4KK3dpdGhpbiBhbiBpbnB1dCBhcmVhIGlmIGl0IGhhcyBpbnB1dCBmb2N1cyAtIHRoZSBrZXkgYWJvdmUgYSBnaXZlbgorY2hhcmFjdGVyIGJyaW5ncyB0aGUgY3Vyc29yIHRvIHRoYXQgY2hhcmFjdGVyLiBJbiBhbnkgb3RoZXIgY29udGV4dCwgaG93ZXZlciwgYQorY3Vyc29yIHJvdXRpbmcga2V5IHBlcmZvcm1zIGFuIGFjdGlvbiBvbiB0aGUgc2NyZWVuIGVsZW1lbnQgdW5kZXIgaXQuIFN0YXJ0aW5nCit3aXRoIHRoZSBsZWZ0bW9zdCByb3V0aW5nIGtleSBvdmVyIGEgc2NyZWVuIGVsZW1lbnQsIHdoaWNoIHdlJ2xsIGNhbGwga2V5ICMxLAordGhlc2UgYWN0aW9ucyBhcmUgYXMgZm9sbG93czoKKworMSkgQnJpbmcgYWNjZXNzaWJpbGl0eSBmb2N1cyAoY3Vyc29yKQorMikgdGFwIChjbGljaykKKzMpIGhvbGQgKGxvbmcgY2xpY2spCis0KSBzY3JvbGwgYmFja3dhcmQgKHVwIG9yIGxlZnQpCis1KSBzY3JvbGwgZm9yd2FyZCAoZG93biBvciByaWdodCkKKzYpIGNvbnRleHQgY2xpY2sKKzcpIGFjY2Vzc2liaWxpdHkgYWN0aW9ucworCitBIHJhbmdlIGNvbnRyb2wgKHByb2dyZXNzIGJhciwgdm9sdW1lIHNsaWRlciwgZXRjKSBjYW4gYmUgYWRqdXN0ZWQgdXAvZG93bgordmlhIHRoZSBzY3JvbGwgZm9yd2FyZC9iYWNrd2FyZCBhY3Rpb25zLgorCitJbnB1dCBBcmVhcworfn5+fn5+fn5+fn4KKworV2hlbiBhbiBpbnB1dCBhcmVhIGhhcyBpbnB1dCBmb2N1cywgQlJMVFRZJ3MgYXR0cmlidXRlIHVuZGVybGluaW5nCitmZWF0dXJlIGlzIHVzZWQgdG8gaGlnaGxpZ2h0IHRoZSBzZWxlY3RlZCB0ZXh0IHJlZ2lvbi4KKworV2lkZ2V0IFJlcHJlc2VudGF0aW9ucworfn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorCitDaGVjayBCb3hlcworYGBgYGBgYGBgYGAKKworQSBjaGVjayBib3ggaXMgcmVuZGVyZWQgYXMgYSB0aHJlZS1jZWxsIHN5bWJvbDoKKworMSkgZG90cyAxMjM0NzggKHRoZSBsZWZ0IHNpZGUgb2YgdGhlIGJveCkKKzIpIGRvdHMgMjM1NiAodGhlIGNoZWNrIG1hcmspCiszKSBkb3RzIDE0NTY3OCAodGhlIHJpZ2h0IHNpZGUgb2YgdGhlIGJveCkKKworVGhlIGNoZWNrIG1hcmsgaXMgcHJlc2VudCBpZiB0aGUgYm94IGlzIGNoZWNrZWQgYW5kIGFic2VudCBpZiBpdCBpc24ndC4KK0lmIHRoZSBjaGVjayBib3ggaGFzIGEgbGFiZWwgdGhlbiBpdCBhcHBlYXJzIHRvIHRoZSByaWdodCBvZiB0aGUgc3ltYm9sLgorVGhlIGJyYWlsbGUgcmVwcmVzZW50YXRpb25zIGFyZToKKworKiDio4/ioLbio7kgY2hlY2tlZAorKiDio48g4qO5IG5vdCBjaGVja2VkCisKK1JhZGlvIEJ1dHRvbnMKK2BgYGBgYGBgYGBgYGAKKworQSByYWRpbyBidXR0b24gaXMgcmVuZGVyZWQgYXMgYSB0aHJlZS1jZWxsIHN5bWJvbDoKKworMSkgZG90cyAyMzQ4ICh0aGUgbGVmdCBzaWRlIG9mIHRoZSBidXR0b24pCisyKSBkb3RzIDIzNTYgKHRoZSBjaGVjayBtYXJrKQorMykgZG90cyAxNTY3ICh0aGUgcmlnaHQgc2lkZSBvZiB0aGUgYnV0dG9uKQorCitUaGUgY2hlY2sgbWFyayBzaG93cyB3aGljaCBvZiB0aGUgcmFkaW8gYnV0dG9ucyBpcyBjdXJyZW50bHkgc2VsZWN0ZWQuCitUaGUgbGFiZWwgZm9yIGVhY2ggcmFkaW8gYnV0dG9uIGFwcGVhcnMgdG8gdGhlIHJpZ2h0IG9mIGl0cyBzeW1ib2wuCitUaGUgYnJhaWxsZSByZXByZXNlbnRhdGlvbnMgYXJlOgorCisqIOKijuKgtuKhsSBzZWxlY3RlZAorKiDioo4g4qGxIG5vdCBzZWxlY3RlZAorCitTd2l0Y2hlcworYGBgYGBgYGAKKworQSAodHdvLXBvc2l0aW9uKSBzd2l0Y2ggaXMgcmVuZGVyZWQgYXMgYSB0aHJlZS1jZWxsIHN5bWJvbDoKKworMSkgZG90cyA0NTY4ICh0aGUgbGVmdCBzaWRlIG9mIHRoZSBzd2l0Y2gpCisyKSBkb3RzIDE0NzggKHRoZSB0b3AgYW5kIGJvdHRvbSBvZiB0aGUgc3dpdGNoKQorMykgZG90cyAxMjM3ICh0aGUgcmlnaHQgc2lkZSBvZiB0aGUgc3dpdGNoKQorCitEb3RzIDI1IGFyZSBhZGRlZCB0byB0aGUgbWlkZGxlIGNlbGwgaWYgdGhlIHN3aXRjaCBpcyBvbiwKK2FuZCBkb3RzIDM2IGFyZSBhZGRlZCB0byB0aGUgbWlkZGxlIGNlbGwgaWYgdGhlIHN3aXRjaCBpcyBvZmYuCitJbiBvdGhlciB3b3JkcywgdGhlIHN3aXRjaCBpcyB1cCB3aGVuIG9uIGFuZCBkb3duIHdoZW4gb2ZmLgorVGhlIGxhYmVsIGZvciB0aGUgc3dpdGNoJ3MgY3VycmVudCBzdGF0ZSBhcHBlYXJzIHRvIHRoZSByaWdodCBvZiB0aGUgc3ltYm9sLgorVGhlIGJyYWlsbGUgcmVwcmVzZW50YXRpb25zIGFyZToKKworKiDiorjio5vioYcgb24KKyog4qK44qOt4qGHIG9mZgorCitSYW5nZSBDb250cm9scworYGBgYGBgYGBgYGBgYGAKKworQSByYW5nZSBjb250cm9sIGlzIG9uZSB3aGljaCBjYW4gYmUgYWRqdXN0ZWQgKHJhdGhlciB0aGFuIHNldCBvciBlZGl0ZWQpLgorVGhleSBpbmNsdWRlIHdpZGdldHMgbGlrZSBwcm9ncmVzcyBiYXJzLCB2b2x1bWUgc2xpZGVycywgZXRjLgorVGhleSdyZSByZW5kZXJlZCBhcyBhIHRocmVlLXZhbHVlIHN1bW1hcnk6OgorCisqIEFuIGF0IHNpZ24gZm9sbG93ZWQgYnkgdGhlIGN1cnJlbnQgc2V0dGluZy4KKyogVGhlIG1pbmltdW0gYW5kIG1heGltdW0gc2V0dGluZ3MsIHNlcGFyYXRlZCBieSBhIGRhc2gsIHdpdGhpbiBwYXJlbnRoZXNlcy4KKworVGhlIGRldmVsb3BlciBvZiBhbiBhcHBsaWNhdGlvbiBjYW4gY2hvb3NlIHdoaWNoIHZhbHVlIHJhbmdlIGEgZ2l2ZW4gY29udHJvbCB1c2VzLgorRm9yIGV4YW1wbGUsIGEgMTYtcG9zaXRpb24gdm9sdW1lIGNvbnRyb2wgY3VycmVudGx5IHNldCB0byA3NSUgbWlnaHQgbG9vayBsaWtlIHRoaXM6OgorCisgIEAxMSAoMCAtIDE1KQorCitJdCBjb3VsZCwgaG93ZXZlciwgYWxzbyBsb29rIGxpa2UgdGhpczo6CisKKyAgQDc1JSAoMCUgLSAxMDAlKQorCitEaXNhYmxlZCBDb250cm9scworYGBgYGBgYGBgYGBgYGBgYGAKKworSWYgYSBjb250cm9sIGlzIGN1cnJlbnRseSBkaXNhYmxlZCB0aGVuIHRoZSB3b3JkIGBgZGlzYWJsZWRgYCwKK2VuY2xvc2VkIHdpdGhpbiBwYXJlbnRoZXNlcywgYXBwZWFycyB0byB0aGUgcmlnaHQgb2YgaXRzIGxhYmVsLgorRm9yIGV4YW1wbGU6OgorCisgIENvbm5lY3QgKGRpc2FibGVkKQorCitXaGVuIFRoZXJlJ3MgTm8gVGV4dAorYGBgYGBgYGBgYGBgYGBgYGBgYGAKKworQSBzY3JlZW4gZWxlbWVudCB0aGF0IGhhcyBubyB0ZXh0IG9mIGl0cyBvd24sCithbmQgdGhhdCBCUkxUVFkgZG9lc24ndCBleHBsaWNpdGx5IHN1cHBvcnQsCitpcyBub3JtYWxseSBub3QgcmVuZGVyZWQuCitFeGFtcGxlcyBvZiB0aGVzZSBpbmNsdWRlOgorCisqIEEgZ3JhcGhpYyAoZS5nLiBhbiBpbWFnZSB2aWV3KS4KKyogQSBjb250YWluZXIgdXNlZCB0byBjb25zdHJ1Y3QgdGhlIHNjcmVlbidzIGxheW91dCAoZS5nLiBhIGZyYW1lIGxheW91dCkuCisKK0l0J3Mgc3RpbGwgbmVjZXNzYXJ5IHRvIHJlbmRlciBpdCwgaG93ZXZlciwgaWYgaXQgaW1wbGVtZW50cworYW4gYWN0aW9uIChlLmcuIGEgdGFwKSB3aGljaCB0aGUgdXNlciBuZWVkcyB0byBiZSBhYmxlIHRvIHBlcmZvcm0uCisKK0lmIHRoZSBhcHBsaWNhdGlvbidzIGRldmVsb3BlciBoYXMgcHJvdmlkZWQgZGVzY3JpcHRpdmUgdGV4dAordGhlbiB0aGF0IHRleHQgaXMgcmVuZGVyZWQuCitJZiBub3QsIHRoZW4gQlJMVFRZIHJlbmRlcnMgYSBnZW5lcmljIGRlc2NyaXB0aW9uIHdpdGhpbiAocGFyZW50aGVzZXMpLgorSXQgY29udGFpbnMgdGhlIHdpZGdldCdzIHR5cGUsIGFuZCwgaWYgYXZhaWxhYmxlLCBpdCdzIHNvdXJjZSBjb2RlIGlkZW50aWZpZXIuCisKK0dsb2JhbCBBY3Rpb25zCit+fn5+fn5+fn5+fn5+fgorCitBbmRyb2lkIHN1cHBvcnRzIGEgbnVtYmVyIG9mIGdsb2JhbCBhY3Rpb25zIHRoYXQgY2FuIGJlIHBlcmZvcm1lZCBieSBwcmVzc2luZworc3BlY2lhbCBoYXJkd2FyZSBidXR0b25zIGFuZC9vciBieSB0b3VjaGluZyByZXNlcnZlZCBhcmVhcyBvbiB0aGUgc2NyZWVuLgorQlJMVFRZIGFsc28gb2ZmZXJzIGEgd2F5IHRvIHBlcmZvcm0gdGhlc2UgYWN0aW9ucyBmcm9tIHlvdXIgYnJhaWxsZSBkZXZpY2UuCitXaGlsZSBhIGJldHRlciB3YXkgbWF5IGJlIGRldmVsb3BlZCBpbiB0aGUgZnV0dXJlLCB0aGlzIGlzIGhvdyBpdCBjYW4gYmUgZG9uZQorcmlnaHQgbm93LgorCisqIFNpbmNlIEFuZHJvaWQgZG9lc24ndCB1c2UgdGhlIGtleWJvYXJkIGZ1bmN0aW9uIGtleXMKKyAgKGNvbW1vbmx5IG5hbWVkIGBgRjFgYCB0aHJvdWdoIGBgRjEyYGApLAorICBCUkxUVFkgdXNlcyB0aGVtIHRvIHBlcmZvcm0gdGhlIGdsb2JhbCBhY3Rpb25zLgorICBUaGUgd2F5IGEgYnJhaWxsZSBkZXZpY2UgZW11bGF0ZXMga2V5Ym9hcmQgZnVuY3Rpb24ga2V5cworICBkaWZmZXJzIGZyb20gbW9kZWwgdG8gbW9kZWwsCisgIHNvIHlvdSBzaG91bGQgY2hlY2sgdGhlIEJSTFRUWSBkb2N1bWVudGF0aW9uIGZvciB5b3VyIGJyYWlsbGUgZGV2aWNlLgorICBUaGUgbW9zdCBjb21tb24gd2F5IGlzIHRvIHByZXNzIHRoZSBjb3JyZXNwb25kaW5nIGN1cnNvciByb3V0aW5nIGtleQorICBhbG9uZyB3aXRoIHNvbWUgb3RoZXIga2V5IG9yIGtleSBjb21iaW5hdGlvbi4KKyAgRm9yIGJyYWlsbGUgZGV2aWNlcyB0aGF0IGhhdmUgYSBicmFpbGxlIGtleWJvYXJkLAorICB0aGUgbW9zdCBjb21tb24ga2V5IHRvIGJlIHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aCBhIGN1cnNvciByb3V0aW5nIGtleQorICBpbiBvcmRlciB0byBlbXVsYXRlIGEga2V5Ym9hcmQgZnVuY3Rpb24ga2V5IGlzIHRoZSBzcGFjZSBiYXIuCisKKyogSWYgeW91ciBicmFpbGxlIGRldmljZSBoYXMgYSBicmFpbGxlIGtleWJvYXJkCisgIHRoZW4geW91IGNhbiBwZXJmb3JtIHRoZSBnbG9iYWwgYWN0aW9ucworICB2aWEgY2hvcmRzIHRoYXQgYWxzbyBpbmNsdWRlIGRvdHMgNyBhbmQgOC4KKyAgRm9yIGV4YW1wbGUsIFNwYWNlICsgRG90czc4ICsgRG90czEyNSAoaCkgZ29lcyB0byB0aGUgaG9tZSBzY3JlZW4uCisKKy4uIHRhYmxlOjogR2xvYmFsIEFuZHJvaWQgQWN0aW9ucworCisgID09PT09PT0gID09PT09PT09PSAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAgPT09PT09PT09PT09PT09PT09PT09CisgIEZOLUtleSAgIENob3JkNzgrICAgQWN0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXMgb2YgQW5kcm9pZCBSZWxlYXNlCisgIC0tLS0tLS0gIC0tLS0tLS0tLSAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIGBgRjFgYCAgIDEyNSAoaCkgICAgZ28gdG8gdGhlIEhvbWUgc2NyZWVuICAgICAgICAgICAgICAgICAgNC4xIChKZWxseSBCZWFuKQorICBgYEYyYGAgICAxMiAoYikgICAgIHRhcCB0aGUgQmFjayBidXR0b24gICAgICAgICAgICAgICAgICAgIDQuMSAoSmVsbHkgQmVhbikKKyAgYGBGM2BgICAgMTM0NSAobikgICBnbyB0byB0aGUgTm90aWZpY2F0aW9ucyBzY3JlZW4gICAgICAgICA0LjEgKEplbGx5IEJlYW4pCisgIGBgRjRgYCAgIDEyMzUgKHIpICAgdGFwIHRoZSBSZWNlbnQgQXBwcyAoT3ZlcnZpZXcpIGJ1dHRvbiAgNC4xIChKZWxseSBCZWFuKQorICBgYEY1YGAgICAxMjM0NTYgICAgIGdvIHRvIEJSTFRUWSdzIGBBY3Rpb25zIHNjcmVlbmBfICAgICAgIFwqCisgIGBgRjZgYCAgIDIzICAgICAgICAgbW92ZSB0byB0aGUgZmlyc3QgaXRlbSAgICAgICAgICAgICAgICAgXCoKKyAgYGBGN2BgICAgMiAgICAgICAgICBtb3ZlIHRvIHRoZSBwcmV2aW91cyBpdGVtICAgICAgICAgICAgICBcKgorICBgYEY4YGAgICA1ICAgICAgICAgIG1vdmUgdG8gdGhlIG5leHQgaXRlbSAgICAgICAgICAgICAgICAgIFwqCisgIGBgRjlgYCAgIDU2ICAgICAgICAgbW92ZSB0byB0aGUgbGFzdCBpdGVtICAgICAgICAgICAgICAgICAgXCoKKyAgYGBGMTBgYCAgMTM0IChtKSAgICB0YXAgdGhlIE1lbnUgYnV0dG9uICAgICAgICAgICAgICAgICAgICBcKgorICBgYEYxMWBgICAzNiAgICAgICAgIHJldHVybiB0byB0aGUgYWN0aXZlIHdpbmRvdyAgICAgICAgICAgIDQuMCAoS2l0a2F0KQorICBgYEYxMmBgICAzICAgICAgICAgIHN3aXRjaCB0byB0aGUgcHJldmlvdXMgd2luZG93ICAgICAgICAgIDQuMCAoS2l0a2F0KQorICBgYEYxM2BgICA2ICAgICAgICAgIHN3aXRjaCB0byB0aGUgbmV4dCB3aW5kb3cgICAgICAgICAgICAgIDQuMCAoS2l0a2F0KQorICBgYEYxNGBgICAyMzQ1ICh0KSAgIHNob3cgdGhlIHdpbmRvdyB0aXRsZSAgICAgICAgICAgICAgICAgIDYuMCAoTm91Z2F0KQorICBgYEYxNWBgICAyNCAoaSkgICAgIHNob3cgdmFyaW91cyBkZXZpY2Ugc3RhdHVzIGluZGljYXRvcnMgICAgICAgICAgIFwqCisgIGBgRjE2YGAgIDIzNCAocykgICAgZ28gdG8gdGhlIFF1aWNrIFNldHRpbmdzIHNjcmVlbiAgICAgICAgNC4yIChKZWxseSBCZWFuIE1SMSkKKyAgYGBGMTdgYCAgMTM1IChvKSAgICBnbyB0byB0aGUgRGV2aWNlIE9wdGlvbnMgc2NyZWVuICAgICAgICA1LjAgKExvbGxpcG9wKQorICA9PT09PT09ICA9PT09PT09PT0gID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gID09PT09PT09PT09PT09PT09PT09PQorCitUZXh0IFNlbGVjdGlvbiBhbmQgdGhlIENsaXBib2FyZAorfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKworQXMgd2l0aCB0aGUgYGdsb2JhbCBhY3Rpb25zYF8sCitpZiB5b3VyIGJyYWlsbGUgZGV2aWNlIGhhcyBhIGJyYWlsbGUga2V5Ym9hcmQKK3RoZW4geW91IGNhbiBwZXJmb3JtIHRleHQgc2VsZWN0aW9uIGFjdGlvbnMKK3ZpYSBjaG9yZHMgdGhhdCBhbHNvIGluY2x1ZGUgZG90cyA3IGFuZCA4LgorRm9yIGV4YW1wbGUsIFNwYWNlICsgRG90czc4ICsgRG90czE0IChjKQorY29waWVzIHRoZSBzZWxlY3RlZCB0ZXh0IHRvIEFkcm9pZCdzIGNsaXBib2FyZC4KK1RoaXMgd29ya3MgYXMgb2YgQW5kcm9pZCByZWxlYXNlIDQuMyAoSmVsbHkgQmVhbiBNUjIpLgorCisuLiB0YWJsZTo6IFRleHQgU2VsZWN0aW9uIGFuZCBDbGlwYm9hcmQgQWN0aW9ucworCisgID09PT09PT09ICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgQ2hvcmQ3OCsgIEFjdGlvbgorICAtLS0tLS0tLSAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIDEgKGEpICAgICBzZWxlY3QgYWxsIG9mIHRoZSB0ZXh0CisgIDQgICAgICAgICBjbGVhciB0aGUgdGV4dCBzZWxlY3Rpb24KKyAgMTQgKGMpICAgIGNvcHkgdGhlIHNlbGVjdGVkIHRleHQgdG8gdGhlIGNsaXBib2FyZAorICAxMjM2ICh2KSAgcGFzdGUgdGhlIHRleHQgb24gdGhlIGNsaXBib2FyZAorICAxMzQ2ICh4KSAgY3V0IHRoZSBzZWxlY3RlZCB0ZXh0IHRvIHRoZSBjbGlwYm9hcmQKKyAgPT09PT09PT0gID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitUaGUgdGV4dCBzZWxlY3Rpb24gZXh0ZW5kcyBpbmNsdXNpdmVseQorZnJvbSBpdHMgZmlyc3QgZW5kcG9pbnQgdGhyb3VnaCBpdHMgc2Vjb25kIG9uZS4KK1RoZSBhdHRyaWJ1dGUgdW5kZXJsaW5pbmcgZmVhdHVyZSAoc2VlIHRoZSBTaG93IEF0dHJpYnV0ZXMgcHJlZmVyZW5jZSkKK2lzIHVzZWQgdG8gc2hvdyB3aGljaCB0ZXh0IGhhcyBjdXJyZW50bHkgYmVlbiBzZWxlY3RlZC4KK0l0IG1heSBiZSBoZWxwZnVsIHRvIHNldCB0aGUgYXR0cmlidXRlIHVuZGVybGluZSB0byBibGluaworaWYgdGhlIGN1cnNvciBpc24ndCBzZXQgdG8gYmxpbmssIGFuZCB2aWNlIHZlcnNhLgorCitJbiBhZGRpdGlvbiB0byBiZWluZyBhYmxlIHRvIHNlbGVjdCBhbGwgb2YgdGhlIHRleHQsCit0aGVyZSBhcmUgd2F5cyB0byBzZWxlY3QgYSBzcGVjaWZpYyBwb3J0aW9uIG9mIHRoZSB0ZXh0LgorRXhhY3RseSBob3cgdGhpcyBpcyBkb25lIGRlcGVuZHMgb24gd2hpY2ggYnJhaWxsZSBkZXZpY2UgeW91J3JlIHVzaW5nLgorVGhlcmUgaXMsIGhvd2V2ZXIsIG9uZSB3YXkgdG8gZG8gaXQgdGhhdCB3b3Jrcworb24gYW55IGJyYWlsbGUgZGV2aWNlIHRoYXQgaGFzIGN1cnNvciByb3V0aW5nIGtleXMuCisKK1RoZSBjdXJzb3Igcm91dGluZyBrZXkgd2hlcmUgdGhlIGN1cnNvciBpcworbm9ybWFsbHkgZG9lc24ndCBzZXJ2ZSBhbnkgdXNlZnVsIHB1cnBvc2UuCitJZiwgaG93ZXZlciwgeW91IGVuYWJsZSB0aGUgU3RhcnQgVGV4dCBTZWxlY3Rpb24gcHJlZmVyZW5jZQorKHdoaWNoIGNhbiBiZSBmb3VuZCB3aXRoaW4gdGhlIE5hdmlnYXRpb24gT3B0aW9ucyBzdWJtZW51KSwKK3RoZW4gaXQgZW50ZXJzIGB0ZXh0IHNlbGVjdGlvbiBtb2RlYF8KK3dpdGggdGhhdCBjaGFyYWN0ZXIgYmVpbmcgYm90aCB0aGUgZmlyc3QgYW5kIHNlY29uZCBlbmRwb2ludHMuCitUaGlzIG1ldGhvZCBoYXMgdGhlIGNvbnN0cmFpbnQgdGhhdCB0aGUgZmlyc3QgZW5kcG9pbnQgb2YgdGhlIHRleHQgc2VsZWN0aW9uCittdXN0IGJlIGEgY2hhcmFjdGVyIHRoYXQgdGhlIGN1cnNvciBjYW4gZ2V0IHRvLgorCisuLiBfVGV4dCBTZWxlY3Rpb24gTW9kZToKKworV2hlbiBpbiB0ZXh0IHNlbGVjdGlvbiBtb2RlLAorcHJlc3NpbmcgYSBjdXJzb3Igcm91dGluZyBrZXkgY2hhbmdlcyB0aGUgc2Vjb25kIGVuZHBvaW50IG9mIHRoZSBzZWxlY3Rpb24uCitUaGlzIG1heSBiZSBkb25lIGFueSBudW1iZXIgb2YgdGltZXMuCitUaGUgc2Vjb25kIGVuZHBvaW50IG1heSBiZSBlaXRoZXIgYWZ0ZXIgb3IgYmVmb3JlIHRoZSBmaXJzdCBvbmUuCisKK0NvbW1hbmRzCitgYGBgYGBgYAorCitIT1NUX0NPUFkKKyAgQ29weSB0aGUgc2VsZWN0ZWQgdGV4dCB0byB0aGUgaG9zdCBjbGlwYm9hcmQKKyAgYW5kIHRoZW4gZGVzZWxlY3QgaXQuCisKK0hPU1RfQ1VUCisgIENvcHkgdGhlIHNlbGVjdGVkIHRleHQgdG8gdGhlIGhvc3QgY2xpcGJvYXJkCisgIGFuZCB0aGVuIGRlbGV0ZSBpdC4KKworSE9TVF9QQVNURQorICBJbnNlcnQgdGhlIHRleHQgb24gdGhlIGhvc3QgY2xpcGJvYXJkIGFmdGVyIHRoZSBzY3JlZW4gY3Vyc29yLgorCitUWFRTRUxfQUxMCisgIFNlbGVjdCBhbGwgb2YgdGhlIHRleHQuCisKK1RYVFNFTF9DTEVBUgorICBDbGVhciAoZGVzZWxlY3QpIHRoZSBjdXJyZW50IHRleHQgc2VsZWN0aW9uLgorCitUWFRTRUxfU0VUCisgIFNlbGVjdCBhIHNwZWNpZmljIHBvcnRpb24gb2YgdGhlIHRleHQuCisgIFRoaXMgY29tbWFuZCByZXF1aXJlcyB0aGF0IGJvdGggZW5kcG9pbnRzIG9mIHRoZSB0ZXh0CisgIGFyZSB3aXRoaW4gdGhlIGN1cnJlbnQgYnJhaWxsZSB3aW5kb3cuCisgIFRoZSBrZXkgY29tYmluYXRpb24gbmVlZHMgdHdvIGN1cnNvciByb3V0aW5nIChvciBlcXVpdmFsZW50KSBrZXlzLgorICBXZSByZWNvbW1lbmQgYSBsb25nIHByZXNzIG9mIHR3byBjdXJzb3Igcm91dGluZyBrZXlzCisgIChpZiB0aGUgYnJhaWxsZSBkZXZpY2Ugc3VwcG9ydHMgaXQpLgorCitUWFRTRUxfU1RBUlQKKyAgRW50ZXIgYHRleHQgc2VsZWN0aW9uIG1vZGVgXyB3aXRoIHRoYXQgY2hhcmFjdGVyIGJlaW5nIGJvdGggZW5kcG9pbnRzLgorICBXaXRoIHRoaXMgbWV0aG9kLCB0aGUgZmlyc3QgZW5kcG9pbnQgb2YgdGhlIHRleHQgc2VsZWN0aW9uIGNhbiBiZSBhbnl3ZWhyZSwKKyAgaS5lLiBpdCBpc24ndCBjb25zdHJhaW5lZCB0byBiZSBhIGNoYXJhY3RlciB0aGF0IHRoZSBjdXJzb3IgY2FuIGdldCB0by4KKyAgVGhlIGtleSBjb21iaW5hdGlvbiBuZWVkcyBhIGN1cnNvciByb3V0aW5nIChvciBlcXVpdmFsZW50KSBrZXkuCisgIFdlIHJlY29tbWVuZCBhIGxvbmcgcHJlc3Mgb2YgYSBjdXJzb3Igcm91dGluZyBrZXkKKyAgKGlmIHRoZSBicmFpbGxlIGRldmljZSBzdXBwb3J0cyBpdCkuCisKK1dlYiBQYWdlcworfn5+fn5+fn5+CisKK0VsZW1lbnQgQW5ub3RhdGlvbnMKK2BgYGBgYGBgYGBgYGBgYGBgYGAKKworQSBudW1iZXIgb2YgZWxlbWVudHMgd2l0aGluIGEgd2ViIHBhZ2UgYXJlIGFubm90YXRlZAoraW4gb3JkZXIgdG8gaGVscCBkaXN0aW5ndWlzaCB0aGVtIGZyb20gdGhlIHN1cnJvdW5kaW5nIHRleHQuCitFYWNoIGFubm90YXRpb24gaXMgcGxhY2VkIGltbWVkaWF0ZWx5IGJlZm9yZQordGhlIHRleHQgb2YgdGhlIGVsZW1lbnQgdGhhdCBpdCBkZXNjcmliZXMuCitJdCBjb25zaXN0cyBvZiBhIHRocmVlLWxldHRlciB0YWcsCitvcHRpb25hbGx5IGZvbGxvd2VkIGJ5IGRlc2NyaXB0aXZFIGRhdGEsCithbGwgZW5jbG9zZWQgd2l0aGluIChwYXJlbnRoZXNlcykuCitIZXJlIGFyZSBzb21lIGV4YW1wbGVzOgorCisuLiB0YWJsZTo6IFdlYiBQYWdlIEVsZW1lbnQgQW5ub3RhdGlvbiBFeGFtcGxlcworCisgID09PT09PT09PT09PT09PT09ICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgIEV4YW1wbGUgICAgICAgICAgICBNZWFuaW5nCisgIC0tLS0tLS0tLS0tLS0tLS0tICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIChidG4pIFN1Ym1pdCAgICAgICBhIFN1Ym1pdCBidXR0b24KKyAgKGxuayBodHRwczovLy4uLikgIHRoZSB0YXJnZXQgVVJMIG9mIGEgbGluaworICAodGJsIDR4OSkgICAgICAgICAgdGhlIHN0YXJ0IG9mIGEgdGFibGUgd2l0aCBmb3VyIGNvbHVtbnMgYW5kIG5pbmUgcm93cworICAoY29sIDJAMykgICAgICAgICAgdGhlIHNlY29uZCBjb2x1bW4gb2YgdGhlIHRoaXJkIHJvdyBvZiBhIHRhYmxlCisgID09PT09PT09PT09PT09PT09ICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1RoZSBmb2xsb3dpbmcgdGFibGUgbGlzdHMgYWxsIG9mIHRoZSBhbm5vdGF0aW9uczoKKworLi4gdGFibGU6OiBXZWIgUGFnZSBFbGVtZW50IEFubm90YXRpb25zCisKKyAgPT09PT09PT09PSAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAgPT09PT09PT09PT0KKyAgQW5ub3RhdGlvbiAgTWVhbmluZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGF0YQorICAtLS0tLS0tLS0tICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICAtLS0tLS0tLS0tLQorICBidG4gICAgICAgICBidXR0b24KKyAgY2FwICAgICAgICAgdGFibGUgY2FwdGlvbgorICBjb2wgICAgICAgICBjb2x1bW4gaW4gdGFibGUgcm93ICAgICAgICAgICAgICAgICAgICBjb29yZGluYXRlcworICBmcm0gICAgICAgICBzdGFydCBvZiBmb3JtCisgIGhkZyAgICAgICAgIGhlYWRpbmcgKHVuc3BlY2lmaWVkIGxldmVsKQorICBoZDEgICAgICAgICBsZXZlbCBvbmUgaGVhZGluZworICBoZDIgICAgICAgICBsZXZlbCB0d28gaGVhZGluZworICBoZDMgICAgICAgICBsZXZlbCB0aHJlZSBoZWFkaW5nCisgIGhkNCAgICAgICAgIGxldmVsIGZvdXIgaGVhZGluZworICBoZDUgICAgICAgICBsZXZlbCBmaXZlIGhlYWRpbmcKKyAgaGQ2ICAgICAgICAgbGV2ZWwgc2l4IGhlYWRpbmcKKyAgaGRyICAgICAgICAgaGVhZGVyIG9mIHRhYmxlIGNvbHVtbiAgICAgICAgICAgICAgICAgY29vcmRpbmF0ZXMKKyAgbG5rICAgICAgICAgdGFyZ2V0IG9mIGxpbmsgICAgICAgICAgICAgICAgICAgICAgICAgVVJMCisgIGxzaSAgICAgICAgIGxpc3QgaXRlbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvb3JkaW5hdGVzCisgIGxzbSAgICAgICAgIGxpc3QgbWFya2VyCisgIGxzdCAgICAgICAgIHN0YXJ0IG9mIGxpc3QgICAgICAgICAgICAgICAgICAgICAgICAgIGRpbWVuc2lvbnMKKyAgcG9wICAgICAgICAgY29tYm8gYm94IChzaW5nbGUgb3IgTXVsdGlwbGUgY2hvaWNlKQorICBwd2QgICAgICAgICBwYXNzd29yZCBmaWVsZAorICByb3cgICAgICAgICBzdGFydCBvZiB0YWJsZSByb3cKKyAgdGJsICAgICAgICAgc3RhcnQgb2YgdGFibGUgICAgICAgICAgICAgICAgICAgICAgICAgZGltZW5zaW9ucworICB0eHQgICAgICAgICB0ZXh0IGZpZWxkIG9yIGFyZWEKKyAgXC0tLS0tLS0tICAgaG9yaXpvbnRhbCBkaXZpZGVyCisgID09PT09PT09PT0gID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gID09PT09PT09PT09CisKK1N0cnVjdHVyYWwgTmF2aWdhdGlvbgorYGBgYGBgYGBgYGBgYGBgYGBgYGBgCisKK1ByZXNzaW5nIERvdHMyNTc4IGVudGVycyBTdHJ1Y3R1cmFsIG5hdmlnYXRpb24gbW9kZS4KK1doZW4gaW4gdGhpcyBtb2RlLAorYSB3ZWIgcGFnZSwgd2hlbiBiZWluZyBicm93c2VkIHdpdGggQ2hyb21lLCBjYW4gYmUgc3RydWN0dXJhbGx5IG5hdmlnYXRlZAorYnkgcHJlc3NpbmcgZG90IGNvbWJpbmF0aW9ucyBvbiB5b3VyIGJyYWlsbGUgZGV2aWNlLgorUHJlc3MgRG90czc4ICh3aXRob3V0IFNwYWNlKSB0byByZXR1cm4gdG8gdGhlIGRlZmF1bHQga2V5IGJpbmRpbmdzLgorCitXaGVuIGluIHRoaXMgbW9kZSwKK2NvbWJpbmF0aW9ucyBvZiBkb3RzIDEgdGhyb3VnaCA2IHNwZWNpZnkgdGhlIHR5cGUgb2YgZWxlbWVudAordGhhdCB5b3UnZCBsaWtlIHRvIG5hdmlnYXRlIHRvLgorQWRkaW5nIGRvdCA3IG1lYW5zIG1vdmUgdG8gdGhlIHByZXZpb3VzIGVsZW1lbnQgb2YgdGhhdCB0eXBlLAorYW5kIGFkZGluZyBkb3QgOCBtZWFucyBtb3ZlIHRvIHRoZSBuZXh0IGVsZW1lbnQgb2YgdGhhdCB0eXBlLgorSWYgbmVpdGhlciBkb3QgNyBub3IgZG90IDggaXMgYWRkZWQgdGhlbiB0aGUgY3VycmVudCBkaXJlY3Rpb24gaXMgdXNlZC4KKworVGhlIGN1cnJlbnQgZGlyZWN0aW9uIGRlZmF1bHRzIHRvIChzdGFydHMgb3V0IGFzKSBgYG5leHRgYC4KK1ByZXNzaW5nIGRvdCA3IGJ5IGl0c2VsZiBzZXRzIGl0IHRvIGBgcHJldmlvdXNgYCwKK2FuZCBwcmVzc2luZyBkb3QgOCBieSBpdHNlbGYgc2V0cyBpdCB0byBgYG5leHRgYC4KKworSWYgdGhlIGtleSB0YWJsZSBmb3IgeW91ciBicmFpbGxlIGRldmljZSBkZWZpbmVzCithIGtleSB0byBiZSB0aGUgTGVmdCBBbHQgKG1ldGEpIG1vZGlmaWVyCit0aGVuIHlvdSBkb24ndCBuZWVkIHRvIHN3aXRjaCB0by9mcm9tIHN0cnVjdHVyYWwgbmF2aWdhdGlvbiBtb2RlLgorSnVzdCBob2xkIHRoYXQga2V5IHdoaWxlIHByZXNzaW5nCit0aGUgZGVzaXJlZCBzdHJ1Y3R1cmFsIG5hdmlnYXRpb24gZG90IGNvbWJpbmF0aW9uLgorCitUaGUgZm9sbG93aW5nIGVsZW1lbnQgdHlwZXMgYXJlIHN1cHBvcnRlZAorKHdoZXJlIHBvc3NpYmxlLCBhIGhvcGVmdWxseSBlYXN5LXRvLXJlbWVtYmVyIGNoYXJhY3RlciBoYXMgYmVlbiBjaG9zZW4pOgorCisuLiB0YWJsZTo6IFN0cnVjdHVyYWxseSBOYXZpZ2FibGUgV2ViIFBhZ2UgRWxlbWVudHMKKworICA9PT09PT0gID09PT0gID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgRG90cyAgICBDaGFyICBHbyB0byB0aGUgUHJldmlvdXMvTmV4dAorICAtLS0tLS0gIC0tLS0gIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgMSAgICAgICBhICAgICBhcnRpY2xlCisgIDEyICAgICAgYiAgICAgYnV0dG9uCisgIDE0ICAgICAgYyAgICAgY29udHJvbAorICAxNDUgICAgIGQgICAgIEFSSUEgbGFuZG1hcmsKKyAgMTUgICAgICBlICAgICBlZGl0YWJsZSB0ZXh0CisgIDEyNCAgICAgZiAgICAgZm9jdXNhYmxlIGl0ZW0KKyAgMTI0NSAgICBnICAgICBncmFwaGljCisgIDEyNSAgICAgaCAgICAgaGVhZGluZyAoYW55IGxldmVsKQorICAyNCAgICAgIGkgICAgIGxpc3QgaXRlbQorICAxMjMgICAgIGwgICAgIGxpbmsgKHZpc2l0ZWQgb3IgdW52aXNpdGVkKQorICAxMzQgICAgIG0gICAgIG1lZGlhCisgIDEzNSAgICAgbyAgICAgbGlzdCAob3JkZXJlZCBvciB1bm9yZGVyZWQpCisgIDEyMzUgICAgciAgICAgcmFkaW8gYnV0dG9uCisgIDIzNCAgICAgcyAgICAgc2VjdGlvbgorICAyMzQ1ICAgIHQgICAgIHRhYmxlCisgIDEzNiAgICAgdSAgICAgdW52aXNpdGVkIGxpbmsKKyAgMTIzNiAgICB2ICAgICB2aXNpdGVkIGxpbmsKKyAgMTM0NiAgICB4ICAgICBjaGVjayBib3gKKyAgMTM1NiAgICB6ICAgICBjb21ibyBib3ggKHNpbmdsZSBvciBtdWx0aXBsZSBjaG9pY2UpCisgIDIgICAgICAgMSAgICAgbGV2ZWwgb25lIGhlYWRpbmcKKyAgMjMgICAgICAyICAgICBsZXZlbCB0d28gaGVhZGluZworICAyNSAgICAgIDMgICAgIGxldmVsIHRocmVlIGhlYWRpbmcKKyAgMjU2ICAgICA0ICAgICBsZXZlbCBmb3VyIGhlYWRpbmcKKyAgMjYgICAgICA1ICAgICBsZXZlbCBmaXZlIGhlYWRpbmcKKyAgMjM1ICAgICA2ICAgICBsZXZlbCBzaXggaGVhZGluZworICA9PT09PT0gID09PT0gID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworV2hlbiBCUkxUVFkgQ3Jhc2hlcworLS0tLS0tLS0tLS0tLS0tLS0tLQorCitXZSBob3BlLCBvZiBjb3Vyc2UsIHRoYXQgQlJMVFRZIHdvbid0IGNyYXNoLiBJZiBpdCBkb2VzLCB0aG91Z2gsIHdlIHdhbnQgdG8KK2tub3cgYWJvdXQgaXQuCisKK0lmIEJSTFRUWSBkb2VzIGNyYXNoLCB5b3UnbGwgZ2V0IGEgZGlhbG9nIHdpdGggYSBtZXNzYWdlIGxpa2UgdGhpczo6CisKKyAgIFVuZm9ydHVuYXRlbHksIEJSTFRUWSBoYXMgc3RvcHBlZC4KKworVGhpcyBkaWFsb2cgd2lsbCBzdGF5IG9uIHRoZSBzY3JlZW4gdW50aWwgeW91IGRpc21pc3MgaXQgYnkgdGFwcGluZyBpdHMgYGBPS2BgCitidXR0b24uIEFuZHJvaWQgd2lsbCB0aGVuIHRyeSB0byBhdXRvbWF0aWNhbGx5IHJlc3RhcnQgQlJMVFRZLCBzbyBkb24ndCBiZQorb3Zlcmx5IGNvbmNlcm5lZCBpZiB0aGlzIGRpYWxvZyBjb21lcyB1cCBhZ2Fpbi4gQW5kcm9pZCB3aWxsIGV2ZW50dWFsbHkgZ2l2ZSB1cAoraWYsIGFmdGVyIGEgZmV3IGF1dG9tYXRpYyByZXN0YXJ0IGF0dGVtcHRzLCBpdCBkZWNpZGVzIHRoYXQgQlJMVFRZIHNpbXBseSB3b24ndAorc3RheSBydW5uaW5nLgorCitJZiB0aGlzIGV2ZXIgaGFwcGVucywgdGhlbiwgaWYgeW91IGNhbiwgY29ubmVjdCB5b3VyIGRldmljZSB0byB5b3VyIGhvc3QgdmlhCitVU0IgYXMgc29vbiBhcyBwb3NzaWJsZSBpbiBvcmRlciB0byBjYXB0dXJlIGEgZGVidWcgbG9nLiBUbyBjYXB0dXJlIGEgZGVidWcKK2xvZywgdXNlIHRoaXMgY29tbWFuZDo6CisKKyAgIGFkYiBsb2djYXQgLXYgdGltZSAtZCA+L3BhdGgvdG8vbG9nZmlsZQorCitUaGUgYGAtdiB0aW1lYGAgb3B0aW9uIG1lYW5zIHRvIGFkZCBhIHRpbWVzdGFtcCB0byBlYWNoIGxvZyByZWNvcmQuIFRoZSBgYC1kYGAKK29wdGlvbiBtZWFucyB0byBkdW1wIHRoZSBjdXJyZW50IEFuZHJvaWQgc3lzdGVtIGxvZy4gVGhlIGBgYWRiIGxvZ2NhdGBgIGNvbW1hbmQKK3dyaXRlcyB0aGUgbG9nIHRvIGl0cyBzdGFuZGFyZCBvdXRwdXQsIHNvIHlvdSBuZWVkIHRvIHJlZGlyZWN0IGl0cyBzdGFuZGFyZAorb3V0cHV0ICh3aXRoIGBgPmBgKSB0byB3aGVyZXZlciB5b3UnZCBsaWtlIHRoZSBsb2cgdG8gYmUgd3JpdHRlbi4KKworVGhlIHJlYXNvbiBmb3IgY2FwdHVyaW5nIHRoZSBsb2cgYXMgc29vbiBhcyBwb3NzaWJsZSBhZnRlciBhIHByb2JsZW0gaXMgdGhhdAorQW5kcm9pZCBpbXBvc2VzIGxpbWl0cyBvbiBpdHMgbG9nIHN0b3JhZ2Ugc28gdGhhdCB0aGUgbG9nIGNhbid0IGNvbnN1bWUgdG9vCittdWNoIG9mIHlvdXIgZGV2aWNlJ3MgcmVzb3VyY2VzLiBJZiB0aGUgbG9nIGJlY29tZXMgdG9vIGxhcmdlLCBBbmRyb2lkCithdXRvbWF0aWNhbGx5IHJlbW92ZXMgb2xkZXIgZW50cmllcyBmcm9tIGl0LiBJZiB5b3Ugd2FpdCB0b28gbG9uZywgdGhlcmVmb3JlLAordGhlIHBhcnQgb2YgaXQgdGhhdCBzaG93cyBob3cgQlJMVFRZIGNyYXNoZWQgbWF5IGFscmVhZHkgaGF2ZSBiZWVuCithdXRvbWF0aWNhbGx5IHJlbW92ZWQuCisKK0tub3duIElzc3VlcworLS0tLS0tLS0tLS0tCisKK1NlcmlhbCBkZXZpY2VzIGFyZW4ndCBzdXBwb3J0ZWQuIEV2ZW4gdGhvdWdoIEFuZHJvaWQgZGV2aWNlcyBkb24ndCBoYXZlIHNlcmlhbAorcG9ydHMsIHNlcmlhbCBkZXZpY2VzIHN0aWxsIGNhbiBiZSBjb25uZWN0ZWQgdmlhIGEgVVNCIHRvIFNlcmlhbCBhZGFwdGVyLiBVc2Vycword2hvIGhhdmUgb2xkZXIsIHNlcmlhbC1vbmx5IGJyYWlsbGUgZGV2aWNlcyBzaG91bGQgc3RpbGwgYmUgYWJsZSB0byB1c2UgdGhlbQord2l0aCB0aGVpciBBbmRyb2lkIGRldmljZXMuCisKK0luc3RhbGxpbmcgQlJMVFRZCis9PT09PT09PT09PT09PT09PQorCitCUkxUVFkgaGFzIGJlZW4gZGVzaWduZWQgdG8gcnVuIG9uIGF0IGxlYXN0IEFuZHJvaWQgNC4xIChKZWxseSBCZWFuKS4KK1doaWxlIGl0IGRvZXMgcnVuIG9uIEFuZHJvaWQgNC4wIChJY2UgQ3JlYW0gU2FuZHdpY2gpLAorbWFueSBvZiBpdHMgaGlnaGx5IGRlc2lyYWJsZSBmZWF0dXJlcyB3b24ndCB3b3JrLgorCitCUkxUVFkgY2FuIGJlIGluc3RhbGxlZCB2aWEgR29vZ2xlIFBsYXkuCitZb3UgY2FuIGVpdGhlciBzZWFyY2ggZm9yIGl0IGJ5IG5hbWUKK29yIGdvIGRpcmVjdGx5IHRvIGBCUkxUVFkgb24gR29vZ2xlIFBsYXlgXy4KKworUmVxdWlyZWQgUGVybWlzc2lvbnMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0JSTFRUWSByZXF1aXJlcyBhY2Nlc3MgdG8gYSBudW1iZXIgb2YgcHJpdmlsZWdlZAorQW5kcm9pZCBvcGVyYXRpbmcgc3lzdGVtIGNhcGFiaWxpdGllcy4KK1RoZSByZXF1aXJlZCBwZXJtaXNzaW9ucyBhcmUgYXMgZm9sbG93czoKKworLi4gaW5jbHVkZTo6IGFuZHJvaWQtcGVybWlzc2lvbnMucnN0CisKK1RoZSBPbGQgV2F5CistLS0tLS0tLS0tLQorCitCZWZvcmUgaXQgd2FzIG9uIEdvb2dsZSBQbGF5LCBCUkxUVFkgaGFkIHRvIGJlIGluc3RhbGxlZCBhbmQgdXBkYXRlZCBtYW51YWxseS4KK0ZvciBub3csIHRoaXMgd2F5IHN0aWxsIHdvcmtzLgorCitUaGVzZSBpbnN0cnVjdGlvbnMgYXJlIGZyb20gdGhlIHBlcnNwZWN0aXZlIG9mIGEgRmlyZWZveCB1c2VyIG9uIFdpbmRvd3MsCitidXQgdGhlIHByb2Nlc3Mgc2hvdWxkIGJlIG11Y2ggdGhlIHNhbWUgd2hlbiB1c2luZyBhIGRpZmZlcmVudCB3ZWIgYnJvd3NlciBhbmQvb3Igb3BlcmF0aW5nIHN5c3RlbS4KKworT24gWW91ciBDb21wdXRlcgorfn5+fn5+fn5+fn5+fn5+fgorCisxKSBHbyB0byBgQlJMVFRZJ3Mgd2ViIHNpdGVgXy4KKworMikgRmluZCB0aGUgYGBEb3dubG9hZGBgIGxpbmsgYW5kIHByZXNzIEVudGVyIG9uIGl0LgorCiszKSBHbyB0byB0aGUgYGBBbmRyb2lkYGAgc2VjdGlvbiwgZG93bi1hcnJvdyBmcm9tIHRoZXJlIHRvIHRoZSBsaW5rIHRoYXQgc2F5cworICAgYGBMYXRlc3QgQVBLYGAsIGFuZCBwcmVzcyBFbnRlciBvbiBpdC4KKworNCkgWW91J2xsIGJlIHByb21wdGVkIHRvIG9wZW4gb3Igc2F2ZSB0aGUgZmlsZSBhdCB0aGlzIHBvaW50LiBTYXZlIGl0LgorCis1KSBHbyB0byB5b3VyIGBgRG93bmxvYWRzYGAgZm9sZGVyIChvciB3aGVyZXZlciB5b3Ugc2F2ZSBkb3dubG9hZHMpLCBhbmQKKyAgIGZpbmQgdGhlIGBgYnJsdHR5LWxhdGVzdC5hcGtgYCBmaWxlLgorCis2KSBJZiB0aGUgZmlsZSBoYXMgYmVlbiBzYXZlZCBvbiB5b3VyIGNvbXB1dGVyIGFzIGBgYnJsdHR5LWxhdGVzdC56aXBgYCwKKyAgIHRoZW4gcHJlc3MgdGhlIGBgQ29udGV4dGBgIGtleSwgYXJyb3cgdG8gYW5kIHByZXNzIEVudGVyIG9uIGBgUmVuYW1lYGAsCisgICBhbmQgY2hhbmdlIHRoZSBmaWxlIGV4dGVuc2lvbiBmcm9tIGBgemlwYGAgdG8gYGBhcGtgYC4gRG9uJ3Qgd29ycnkgaWYgeW91CisgICBnZXQgYSB3YXJuaW5nIGFib3V0IHRoZSBwb3NzaWJpbGl0eSBvZiByZW5kZXJpbmcgdGhlIGZpbGUgdW51c2FibGUuIEdvCisgICBhaGVhZCB3aXRoIHRoZSByZW5hbWUuCisKK09uIFlvdXIgQW5kcm9pZCBEZXZpY2UKK35+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKworMSkgR28gaW50byBgYFNldHRpbmdzYGAgLT4gYGBTZWN1cml0eWBgLCBhbmQgZW5zdXJlIHRoYXQgYGBVbmtub3duIFNvdXJjZXNgYAorICAgaXMgZW5hYmxlZC4gVGhpcyBvcHRpb24gc2F5cyBzb21ldGhpbmcgbGlrZToKKyAgIAorICAgICAgQWxsb3cgdGhlIGluc3RhbGxhdGlvbiBvZiBhcHBzIGZyb20gdW5rbm93biBzb3VyY2VzCisgICAgICAKKyAgIFRoaXMgaXMgYSBvbmUtdGltZSBzdGVwLiBPbmNlIHRoZSBib3ggaGFzIGJlZW4gY2hlY2tlZCwgaXQgc3RheXMgY2hlY2tlZC4KKworMikgQ29weSB0aGUgYGBhcGtgYCBmaWxlIHRvIHlvdXIgZGV2aWNlLiBUaGVyZSBhcmUgYSBudW1iZXIgb2Ygd2F5cyB0byBkbyB0aGlzOgorCisgICAqIFRoZSBlYXNpZXN0IHdheSBtYXkgYmUgdG8gZW1haWwgaXQgdG8geW91cnNlbGYgYXMgYSBmaWxlIGF0dGFjaG1lbnQgc28KKyAgICAgdGhhdCBpdCB3aWxsIGdvIHRvIHRoZSBlbWFpbCBvbiB5b3VyIEFuZHJvaWQgZGV2aWNlLgorCisgICAqIEFub3RoZXIgb3B0aW9uIGlzIHRvIHNhdmUgdGhlIGZpbGUgaW4gRHJvcGJveCBvbiB5b3VyIGNvbXB1dGVyLCBhbmQKKyAgICAgdGhlbiB3YWl0IGZvciBpdCB0byBzaG93IHVwIGluIERyb3Bib3ggb24geW91ciBBbmRyb2lkIGRldmljZS4KKworICAgKiBBbm90aGVyIG9wdGlvbiBpcyB0byBjb25uZWN0IHlvdXIgQW5kcm9pZCBkZXZpY2UgdG8geW91ciBjb21wdXRlciB2aWEKKyAgICAgYSBVU0IgY2FibGUsIGFuZCB0aGVuIHRvIGNvcHkgdGhlIGZpbGUgdG8gaXQgaW4gdGhlIHNhbWUgd2F5IHRoYXQKKyAgICAgeW91J2QgY29weSBhIGZpbGUgdG8gYSB0aHVtYiBkcml2ZS4KKworMykgVGFwIHRoZSBgYGJybHR0eS1sYXRlc3QuYXBrYGAgZmlsZSB0byBzdGFydCBpdHMgaW5zdGFsbGF0aW9uLCBhbmQgYW5zd2VyIGFueQorICAgcHJvbXB0cy4gSWYgeW91IHVzZSB0aGUgRHJvcGJveCBtZXRob2QsIHlvdSBtaWdodCBuZWVkIHRvIHRhcCBvbiB0aGUgZmlsZQorICAgdHdpY2UgLSBvbmNlIHRvIGRvd25sb2FkIGl0LCBhbmQgYSBzZWNvbmQgdGltZSB0byBpbnN0YWxsIGl0LgorCis0KSBUYXAgYGBPS2BgIHdoZW4gaW5zdGFsbGF0aW9uIGlzIGNvbXBsZXRlLgorCitCdWlsZGluZyBCUkxUVFkKKz09PT09PT09PT09PT09PQorCitQcmVwYXJpbmcgWW91ciBIb3N0IEVudmlyb25tZW50CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0JSTFRUWSBpcyBjdXJyZW50bHkgYmVpbmcgYnVpbHQgdXNpbmc6CisKKyogVmVyc2lvbiB8U0RLIGJ1aWxkIHRvb2xzIHZlcnNpb258IG9mIHRoZSBBbmRyb2lkIFNESyBidWlsZCB0b29scy4KKyogVmVyc2lvbiB8TkRLIHZlcnNpb258IG9mIHRoZSBBbmRyb2lkIE5ESy4KKyogVmVyc2lvbiB8SkRLIHZlcnNpb258IG9mIE9wZW5KREsuCisKK1lvdSBuZWVkIHRoZSBBbmRyb2lkIFNESyAoU29mdHdhcmUgRGV2ZWxvcG1lbnQgS2l0KSBmb3I6CisKKyogaW5zdGFsbGluZyBhbiBhcHBsaWNhdGlvbiBvbnRvIHlvdXIgZGV2aWNlCisqIHJlbW92aW5nIGFuIGFwcGxpY2F0aW9uIGZyb20geW91ciBkZXZpY2UKKworWW91IGNhbiBnZXQgaXQgZnJvbSBgVGhlIEFuZHJvaWQgU0RLIFdlYiBQYWdlYF8uCisKK1lvdSBuZWVkIHRoZSBBbmRyb2lkIE5ESyAoTmF0aXZlIERldmVsb3BtZW50IEtpdCkgaWYgeW91IHdhbnQgdG8gZG8geW91ciBvd24KK2J1aWxkcy4gWW91IGNhbiBnZXQgaXQgZnJvbSBgVGhlIEFuZHJvaWQgTkRLIFdlYiBQYWdlYF8uCisKK1RoZSBTREsgaW5pdGlhbGx5IG9ubHkgaW5jbHVkZXMgc3VwcG9ydCBmb3IgdGhlIGN1cnJlbnQgQW5kcm9pZCBBUEkKKyhBcHBsaWNhdGlvbiBQcm9ncmFtbWluZyBJbnRlcmZhY2UpIGxldmVsLiBCUkxUVFksIGhvd2V2ZXIsIG5lZWRzIHRvIHN1cHBvcnQKK2VhcmxpZXIgQVBJIGxldmVscyBzbyB0aGF0IGl0IGNhbiBydW4gb24gb2xkZXIgcmVsZWFzZXMgb2YgQW5kcm9pZC4gU3VwcG9ydCBmb3IKK2FueSBtaXNzaW5nIEFQSSBsZXZlbHMgaXMgYWRkZWQgd2hlbmV2ZXIgdGhlIFNESyBpcyB1cGRhdGVkLiBUbyBkbyB0aGlzLCB1c2UKK3RoZSBmb2xsb3dpbmcgY29tbWFuZDo6CisKKyAgYW5kcm9pZCB1cGRhdGUgc2RrIC11CisKK1RoZSBgYC11YGAgb3B0aW9uLCB3aGljaCBpcyB0aGUgc2hvcnQgZm9ybSBvZiB0aGUgYGAtLW5vLXVpYGAgb3B0aW9uLCBtZWFucyB0bworYnlwYXNzIHRoZSBncmFwaGljYWwgaW50ZXJmYWNlLgorCitUaGVyZSBtYXkgYmUgcGFzc3dvcmQgcHJvbXB0cyBmb3IgaW5zdGFsbGluZyBwYWNrYWdlcyB0aGF0IGFyZSBwcm92aWRlZCBieQordmFyaW91cyB2ZW5kb3Vycy4gQW55IG9mIHRoZXNlIGNhbiBiZSBlYXNpbHkgc2tpcHBlZC4KKworVGhlIDY0LWJpdCB2ZXJzaW9ucyBvZiB0aGUgU0RLIGFuZCBOREsgZGVwZW5kIG9uIDMyLWJpdCBzeXN0ZW0gbGlicmFyaWVzLiBJZgoreW91J3JlIHVzaW5nIGEgNjQtYml0IHZlcnNpb24gdGhlbiB5b3UgbmVlZCB0byBmaXJzdCBlbnN1cmUgdGhhdCB0aGVzZSBhcmUKK2luc3RhbGxlZCBvbiB5b3VyIHN5c3RlbS4gVGhpcyBhdCBsZWFzdCBpbmNsdWRlczoKKworKiBsaWJjNiAob3IgZ2xpYmMpCisqIGxpYnogKG9yIHpsaWIpCisqIGxpYnN0ZGMrKzYgKG9yIGxpYnN0ZGMrKykKKyogbGlibmN1cnNlcworCitJZiB5b3UncmUgdXNpbmcgYSBtb2Rlcm4gRGViaWFuIEdOVS9MaW51eCBzeXN0ZW0gKGBgV2hlZXp5YGAgb3IgbGF0ZXIpLCB5b3UgY2FuCitpbnN0YWxsIHRoZXNlIHBhY2thZ2VzIGZvciBhIGZvcmVpZ24gYXJjaGl0ZWN0dXJlIChpbiB0aGlzIGNhc2UsIGkzODYpIHdpdGggdGhlCitmb2xsb3dpbmcgY29tbWFuZHMgKGFzIHJvb3QpOjoKKworICAgZHBrZyAtLWFkZC1hcmNoaXRlY3R1cmUgaTM4NgorICAgYXB0LWdldCBpbnN0YWxsIGxpYm5jdXJzZXM1OmkzODYgbGlic3RkYysrNjppMzg2IHpsaWIxZzppMzg2IGxpYmM2OmkzODYKKworSW5zdGFsbGluZyBhbmQgUHJlcGFyaW5nIHRoZSBCUkxUVFkgU291cmNlIFRyZWUKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0Nob29zZSB0aGUgZGlyZWN0b3J5IHRoYXQgc2hvdWxkIGNvbnRhaW4gQlJMVFRZJ3Mgc291cmNlIHRyZWUgKHdoaWNoIG5lZWRuJ3QKK3lldCBleGlzdCkuIFRoZW4gZXh0cmFjdCB0aGUgbGF0ZXN0IEJSTFRUWSBzb3VyY2UgaW50byBpdCB3aXRoIHRoZSBmb2xsb3dpbmcKK2NvbW1hbmQ6OgorCisgICBnaXQgY2xvbmUgaHR0cHM6Ly9naXRodWIuY29tL2JybHR0eS9icmx0dHkuZ2l0IC9wYXRoL3RvL2JybHR0eQorCitUaGUgZGlyZWN0b3J5IG9wZXJhbmQgKG9mIGBgZ2l0IGNsb25lYGApIGlzIG9wdGlvbmFsLiBJZiB5b3UgZG9uJ3Qgc3BlY2lmeSBpdAordGhlbiB0aGUgZGlyZWN0b3J5IG5hbWVkIGBgYnJsdHR5YGAgd2l0aGluIHRoZSBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5IGlzCithc3N1bWVkLgorCitOZXh0LCB5b3UgbmVlZCB0byBwcmVwYXJlIHRoZSBzb3VyY2UgdHJlZS4gVGhpcyBpcyBkb25lIGFzIGZvbGxvd3M6OgorCisgICBjZCAvcGF0aC90by9icmx0dHkKKyAgIC4vYXV0b2dlbgorCitBdCB0aGlzIHBvaW50LCB0aGUgc291cmNlIHRyZWUgaXMgZXNzZW50aWFsbHkganVzdCBsaWtlIHdoYXQgeW91J2QgZ2V0IHdlcmUgeW91Cit0byB1bnBhY2sgYW4gb2ZmaWNpYWxseSByZWxlYXNlZCBCUkxUVFkgYXJjaGl2ZS4gSXQgZG9lc24ndCB5ZXQga25vdyBhbnl0aGluZworYWJvdXQgdGhlIHNwZWNpZmljcyBvZiB5b3VyIHN5c3RlbS4gSXQgYWxzbyBkb2Vzbid0IHlldCBrbm93IGFueXRoaW5nIGFib3V0IHRoZQorcGxhdGZvcm0geW91IGludGVuZCB0byBidWlsZCBCUkxUVFkgZm9yLgorCitBZGRpbmcgaW5mb3JtYXRpb24gdG8gQlJMVFRZJ3Mgc291cmNlIHRyZWUgcmVnYXJkaW5nIHRoZSBzcGVjaWZpY3Mgb2YgeW91cgorc3lzdGVtLCBhcyB3ZWxsIGFzIG9mIHlvdXIgaW50ZW50IHRvIGJ1aWxkIEJSTFRUWSBmb3IgQW5kcm9pZCwgaXMgZG9uZSBhcworZm9sbG93czo6CisKKyAgIGV4cG9ydCBBTkRST0lEX05ESz0vcGF0aC90by9BbmRyb2lkL05ESworICAgLi9jZmctYW5kcm9pZCAtcQorCitUaGUgYGAtcWBgIG9wdGlvbiwgd2hpY2ggaXMgdGhlIHNob3J0IGZvcm0gb2YgdGhlIGBgY29uZmlndXJlYGAgY29tbWFuZCdzIAorYGAtLXF1aWV0YGAgb3B0aW9uLCBtZWFucyB0byBub3QgZGlzcGxheSBhbnkgcHJvZ3Jlc3MgaW5mb3JtYXRpb24gKHRoZXJlJ3MgCit1c3VhbGx5IHF1aXRlIGEgbG90IG9mIGl0KSAtIG9ubHkgd2FybmluZ3MgYW5kIGVycm9ycyBhcmUgZGlzcGxheWVkLgorCitBbGwgb2YgdGhlIG9wdGlvbnMgeW91IGdpdmUgdG8gdGhlIGBgY2ZnLWFuZHJvaWRgYCBjb21tYW5kIGFyZSBwYXNzZWQgZGlyZWN0bHkKK3Rocm91Z2ggdG8gdGhlIGBgY29uZmlndXJlYGAgY29tbWFuZC4gU28sIHdoaWxlIGBgY2ZnLWFuZHJvaWRgYCBzdXBwbGllcyBhCitkZWZhdWx0IHNldCBvZiBvcHRpb25zIHRvIGBgY29uZmlndXJlYGAsIGl0J3MgZWFzeSBmb3IgeW91IHRvIGRvIHlvdXIgb3duCitjdXN0b21pemF0aW9uLgorCitCdWlsZGluZyBCUkxUVFkgZm9yIEFuZHJvaWQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitJbiBvcmRlciB0byBiZSBhYmxlIHRvIGJ1aWxkIGFuIEFuZHJvaWQgYXBwbGljYXRpb24sIGEgbnVtYmVyIG9mIEFuZHJvaWQgYnVpbGQKK3Rvb2xzIG5lZWQgdG8gYmUgYWRkZWQgdG8geW91ciBjb21tYW5kIHNlYXJjaCBwYXRoLiBUaGlzIGlzIGRvbmUgdmlhIHRoZQorZm9sbG93aW5nIGNvbW1hbmQ6OgorCisgICBleHBvcnQgUEFUSD0iL3BhdGgvdG8vQW5kcm9pZC9TREsvdG9vbHM6L3BhdGgvdG8vQW5kcm9pZC9TREsvcGxhdGZvcm0tdG9vbHM6JFBBVEgiCisKK1RoZSBmaW5hbCBzdGVwIGlzIHRvIGJ1aWxkIHRoZSBCUkxUVFkgc2VydmljZSBmb3IgQW5kcm9pZC4gVGhpcyBpcyBkb25lIGFzCitmb2xsb3dzOjoKKworICAgY2QgL3BhdGgvdG8vYnJsdHR5L0FuZHJvaWQvQXBwbGljYXRpb24KKyAgIG1ha2UgLXMKKworVGhlIGBgLXNgYCBvcHRpb24gb2YgdGhlIGBgbWFrZWBgIGNvbW1hbmQsIHdoaWNoIGlzIHNob3J0IGZvciBpdHMgYGAtLXNpbGVudGBgCitvcHRpb24sIG1lYW5zIHRvIG5vdCBkaXNwbGF5IGFueSBwcm9ncmVzcyBpbmZvcm1hdGlvbiAodGhlcmUncyB1c3VhbGx5IHF1aXRlIGEKK2xvdCBvZiBpdCkgLSBvbmx5IHdhcm5pbmdzIGFuZCBlcnJvcnMgYXJlIGRpc3BsYXllZC4KKworVGhlIHJlc3VsdCBvZiB0aGUgYnVpbGQgaXMgdGhlIGZpbGUgYGBCUkxUVFlfQXBwLWRlYnVnLmFwa2BgLiBJdCB3aWxsIGJlIGluIHRoZQorYGBiaW4vYGAgc3ViZGlyZWN0b3J5IG9mIEJSTFRUWSdzIEFuZHJvaWQgQXBwbGljYXRpb24gZGlyZWN0b3J5OjoKKworICAgL3BhdGgvdG8vYnJsdHR5L0FuZHJvaWQvQXBwbGljYXRpb24vYmluL0JSTFRUWV9BcHAtZGVidWcuYXBrCisKK2BgYXBrYGAgaXMgdGhlIGZpbGUgZXh0ZW5zaW9uIHVzZWQgZm9yIGFuIGluc3RhbGxhYmxlIEFuZHJvaWQgcGFja2FnZS4KKworUHJlcGFyaW5nIFlvdXIgQW5kcm9pZCBEZXZpY2UKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1lvdSBuZWVkIGBgVVNCIERlYnVnZ2luZ2BgIHRvIGJlIGVuYWJsZWQuIFRoaXMgaXMgZG9uZSBmcm9tIHRoZSBgYERldmVsb3BlcgorT3B0aW9uc2BgIHNjcmVlbi4gWW91IGNhbiBnZXQgdG8gaXQgZnJvbSB0aGUgYGBTZXR0aW5nc2BgIHNjcmVlbi4KKworTGF1bmNoIHRoZSBgYFNldHRpbmdzYGAgYXBwbGljYXRpb24sIGFuZCBsb29rLCBuZWFyIHRoZSBib3R0b20sIGZvciBgYERldmVsb3BlcgorT3B0aW9uc2BgLiBJZiB5b3UgY2FuJ3QgZmluZCBpdCwgdGhlIG1vc3QgbGlrZWx5IGNhdXNlIGlzIGEgbmV3IGZlYXR1cmUgdGhhdAord2FzIGludHJvZHVjZWQgaW4gQW5kcm9pZCA0LjIgKEplbGx5IEJlYW4pLiBJZiB5b3UgbmVlZCB0byBlbmFibGUgaXQsIHRhcCBvbgorYGBBYm91dCBQaG9uZWBgLCB3aGljaCwgYWdhaW4sIGNhbiBiZSBmb3VuZCBuZWFyIHRoZSBib3R0b20gb2YgdGhlIGBgU2V0dGluZ3NgYAorc2NyZWVuLiBUaGVuLCBvbiB0aGUgYGBBYm91dCBQaG9uZWBgIHNjcmVlbiwgbG9vayBmb3IgdGhlIGBgQnVpbGQgTnVtYmVyYGAKK2xpbmUuIFRhcCBvbiBgYEJ1aWxkIE51bWJlcmBgIHNldmVuIHRpbWVzIGFuZCB5b3VyIGRldmljZSB3aWxsIG9mZmljaWFsbHkKK2RlY2xhcmUgeW91IHRvIGJlIGEgZGV2ZWxvcGVyLiBZb3Ugc2hvdWxkIHRoZW4gYmUgYWJsZSB0byBmaW5kIGBgRGV2ZWxvcGVyCitPcHRpb25zYGAgb24gdGhlIGBgU2V0dGluZ3NgYCBzY3JlZW4uCisKK1RoZXJlJ3MgYSBjaGVjayBib3ggYXQgdGhlIHRvcC1yaWdodCBvZiB0aGUgYGBEZXZlbG9wZXIgT3B0aW9uc2BgIHNjcmVlbi4gSXQKK25lZWRzIHRvIGJlIGNoZWNrZWQgc28gdGhhdCBhbGwgb2YgdGhlIG90aGVyIGNvbnRyb2xzIG9uIHRoYXQgc2NyZWVuIHdpbGwgYmUKK2VuYWJsZWQuIEFmdGVyIGRvaW5nIHRoYXQsIGNoZWNrIHRoZSBgYFVTQiBEZWJ1Z2dpbmdgYCBjaGVjayBib3ggKHdoaWNoIGNhbiBiZQorZm91bmQgd2l0aGluIHRoZSBgYERlYnVnZ2luZ2BgIHNlY3Rpb24pLiBUaGlzIGVuYWJsZXMgdGhlIGBgYWRiYGAgKEFuZHJvaWQKK0RlYnVnIEJyaWRnZSkgdG9vbCB0byBwZXJmb3JtIGZ1bmN0aW9ucyBvbiB5b3VyIEFuZHJvaWQgZGV2aWNlLgorCitJbnN0YWxsaW5nIEJSTFRUWSBvbiBZb3VyIEFuZHJvaWQgRGV2aWNlCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0luIG9yZGVyIHRvIGluc3RhbGwgQlJMVFRZIG9udG8geW91ciBkZXZpY2UsIG9yIHRvIHJlbW92ZSBpdCBmcm9tIHlvdXIgZGV2aWNlLAoreW91IG5lZWQgdG8gYmUgaW4gQlJMVFRZJ3MgQW5kcm9pZCBBcHBsaWNhdGlvbiBkaXJlY3Rvcnk6OgorCisgICBjZCAvcGF0aC90by9icmx0dHkvQW5kcm9pZC9BcHBsaWNhdGlvbgorCitZb3UgYWxzbyBuZWVkIHRvIGNvbm5lY3QgeW91ciBkZXZpY2UgdG8geW91ciBob3N0IHZpYSBVU0IuCisKK1RvIGluc3RhbGwgQlJMVFRZLCB1c2UgdGhpcyBjb21tYW5kOjoKKworICAgbWFrZSAtcyBpbnN0YWxsCisKK1RvIHJlbW92ZSBCUkxUVFksIHVzZSB0aGlzIGNvbW1hbmQ6OgorCisgICBtYWtlIC1zIHVuaW5zdGFsbAorCitUaGUgYGBtYWtlIGluc3RhbGxgYCBjb21tYW5kIHdpbGwgZmFpbCBpZiBCUkxUVFkgaXMgYWxyZWFkeSBpbnN0YWxsZWQuIElmCit5b3UncmUgd2FudGluZyB0byB1cGdyYWRlIEJSTFRUWSwgaG93ZXZlciwgdGhlbiByZW1vdmluZyBpdCBmaXJzdCBpcyBwcm9iYWJseQord2hhdCB5b3UgZG9uJ3Qgd2FudCB0byBiZSBkb2luZy4gVGhpcyBpcyBiZWNhdXNlIHJlbW92aW5nIEJSTFRUWSBhbHNvIGNhdXNlcworaXRzIHNldHRpbmdzIHRvIGJlIGxvc3QuIFdoYXQgeW91IHNob3VsZCBkbyBpbnN0ZWFkIGlzIHJlaW5zdGFsbCBpdC4gWW91IGNhbiBkbwordGhpcyB3aXRoIHRoZSBmb2xsb3dpbmcgY29tbWFuZDo6CisKKyAgIG1ha2UgLXMgcmVpbnN0YWxsCisKK0lmIHlvdSd2ZSBvYnRhaW5lZCB5b3VyIEFuZHJvaWQgcGFja2FnZSBmaWxlIChgYGFwa2BgKSBmb3IgQlJMVFRZIGZyb20gc29tZQorb3RoZXIgc291cmNlICh0aGFuIGJ1aWxkaW5nIGl0IGZvciB5b3Vyc2VsZiksIHRoZW4gaXQgbWF5IGhhdmUgYSBkaWZmZXJlbnQgbmFtZQordGhhbiB0aGUgbWFrZSBmaWxlIGlzIGV4cGVjdGluZy4gSXQncyB1c2VmdWwsIHRoZXJlZm9yZSwgdG8ga25vdyB3aGF0IHRoZQorYWN0dWFsIGhvc3QgY29tbWFuZHMgYXJlIGZvciBpbnN0YWxsaW5nIGFuZCByZW1vdmluZyBBbmRyb2lkIGFwcGxpY2F0aW9ucy4KKworVGhlIGhvc3QgY29tbWFuZCBmb3IgaW5zdGFsbGluZyBhbiBBbmRyb2lkIGFwcGxpY2F0aW9uIGlzOjoKKworICAgYWRiIGluc3RhbGwgL3BhdGgvdG8vZmlsZQorCitUaGUgaG9zdCBjb21tYW5kIGZvciByZWluc3RhbGxpbmcgYW4gQW5kcm9pZCBhcHBsaWNhdGlvbiBpczo6CisKKyAgIGFkYiBpbnN0YWxsIC1yIC9wYXRoL3RvL2ZpbGUKKworVGhlIGhvc3QgY29tbWFuZCBmb3IgcmVtb3ZpbmcgYW4gQW5kcm9pZCBhcHBsaWNhdGlvbiBpczo6CisKKyAgIGFkYiB1bmluc3RhbGwgYXBwbGljYXRpb24ucGFja2FnZS5uYW1lCisKK1NvLCB0byByZW1vdmUgQlJMVFRZLCB0aGUgaG9zdCBjb21tYW5kIGlzOjoKKworICAgYWRiIHVuaW5zdGFsbCBvcmcuYTExeS5icmx0dHkuYW5kcm9pZAorCitJZiBhbnkgb2YgdGhlc2UgYGBtYWtlYGAgb3IgYGBhZGJgYCBjb21tYW5kcyBmYWlscyB3aXRoIGFuIGVycm9yIGxpa2UgYGBkZXZpY2UgCitub3QgZm91bmRgYCwgaXQncyBwcm9iYWJseSBiZWNhdXNlIHlvdXIgaG9zdCdzIFVTQiBkZXZpY2UgcGVybWlzc2lvbnMgYXJlIAorcmVxdWlyaW5nIHJvb3QgYWNjZXNzLiBUaGUgc29sdXRpb24gdG8gdGhpcyBwcm9ibGVtIGlzIHRvIHJlc3RhcnQgdGhlIGBgYWRiYGAKK3NlcnZlciBzdWNoIHRoYXQgaXQgaXMgcnVubmluZyBhcyByb290LiBXaXRoIHRoaXMgZG9uZSwgeW91IHlvdXJzZWxmIHdpbGwgc3RpbGwKK2JlIGFibGUgdG8gdXNlIGBgYWRiYGAgYXMgYSByZWd1bGFyIHVzZXIuCisKK1RoZSBjb21tYW5kcyB0byByZXN0YXJ0IHRoZSBgYGFkYmBgIHNlcnZlciBzdWNoIHRoYXQgaXQncyBydW5uaW5nIGFzIHJvb3QgYXJlCithcyBmb2xsb3dzOjoKKworICAgc3UKKyAgIGNkIC9wYXRoL3RvL0FuZHJvaWQvU0RLL3BsYXRmb3JtLXRvb2xzCisgICAuL2FkYiBraWxsLXNlcnZlcgorICAgLi9hZGIgc3RhcnQtc2VydmVyCisgICBleGl0CisKZGlmZiAtLWdpdCBhL0RvY3VtZW50cy9SRUFETUUuQXR0cmlidXRlc1RhYmxlcyBiL0RvY3VtZW50cy9SRUFETUUuQXR0cmlidXRlc1RhYmxlcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNzMxMTI1Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRzL1JFQURNRS5BdHRyaWJ1dGVzVGFibGVzCkBAIC0wLDAgKzEsODAgQEAKK35+fn5+fn5+fn5+fn5+fn5+CitBdHRyaWJ1dGVzIFRhYmxlcworfn5+fn5+fn5+fn5+fn5+fn4KKworLi4gaW5jbHVkZTo6IHByb2xvZ3VlLnJzdAorCitEZXNjcmlwdGlvbgorPT09PT09PT09PT0KKworRmlsZXMgd2l0aCBuYW1lcyBvZiB0aGUgZm9ybSBgYCouYXRiYGAgYXJlIGF0dHJpYnV0ZXMgdGFibGVzLCBhbmQgd2l0aCBuYW1lcyBvZgordGhlIGZvcm0gYGAqLmF0aWBgIGFyZSBhdHRyaWJ1dGVzIHN1YnRhYmxlcy4gVGhleSBhcmUgdXNlZCB3aGVuIEJSTFRUWSBpcworZGlzcGxheWluZyBzY3JlZW4gYXR0cmlidXRlcyByYXRoZXIgdGhhbiBzY3JlZW4gY29udGVudC4gRWFjaCBvZiB0aGUgZWlnaHQKK2JyYWlsbGUgZG90cyByZXByZXNlbnRzIG9uZSBvZiB0aGUgZWlnaHQgVkdBIGF0dHJpYnV0ZSBiaXRzLgorCitBdHRyaWJ1dGVzIHRhYmxlcyBjYW4gdXN1YWxseSBiZSBmb3VuZCBpbiB0aGUgYGAvZXRjL2JybHR0eS9BdHRyaWJ1dGVzL2BgCitkaXJlY3RvcnkgKHNlZSB8UkVBRE1FLkN1c3RvbWl6ZXwgZm9yIG1vcmUgZGV0YWlscykuIFNlZQorYEF0dHJpYnV0ZXMgVGFibGUgTGlzdGBfIGZvciBhIGxpc3Qgb2YgQlJMVFRZJ3MgYXR0cmlidXRlcyB0YWJsZXMuCisKK0FuIGF0dHJpYnV0ZXMgdGFibGUgY29uc2lzdHMgb2YgYSBzZXF1ZW5jZSBvZiBkaXJlY3RpdmVzLCBvbmUgcGVyIGxpbmUsIHdoaWNoIAorZGVmaW5lIGhvdyBjb21iaW5hdGlvbnMgb2YgVkdBIGF0dHJpYnV0ZXMgYXJlIHRvIGJlIHJlcHJlc2VudGVkIGluIGJyYWlsbGUuIAorVVRGLTggY2hhcmFjdGVyIGVuY29kaW5nIG11c3QgYmUgdXNlZC4gV2hpdGVzcGFjZSAoYmxhbmtzLCB0YWJzKSBhdCB0aGUgCitiZWdpbm5pbmcgb2YgYSBsaW5lLCBhcyB3ZWxsIGFzIGJlZm9yZSBhbmQvb3IgYWZ0ZXIgYW55IG9wZXJhbmQgb2YgYW55IAorZGlyZWN0aXZlLCBpcyBpZ25vcmVkLiBMaW5lcyBjb250YWluaW5nIG9ubHkgd2hpdGVzcGFjZSBhcmUgaWdub3JlZC4gSWYgdGhlIAorZmlyc3Qgbm9uLXdoaXRlc3BhY2UgY2hhcmFjdGVyIG9mIGEgbGluZSBpcyBgYCNgYCB0aGVuIHRoYXQgbGluZSBpcyBhIGNvbW1lbnQgCithbmQgaXMgaWdub3JlZC4KKworRGlyZWN0aXZlcworPT09PT09PT09PQorCitUaGUgRG90IERpcmVjdGl2ZQorLS0tLS0tLS0tLS0tLS0tLS0KKworLi4gcGFyc2VkLWxpdGVyYWw6OiBkb3QgKmRvdCogKnN0YXRlKiAjICpjb21tZW50KgorCitVc2UgdGhpcyBkaXJlY3RpdmUgdG8gc3BlY2lmeSB3aGF0IGEgc3BlY2lmaWMgZG90IHJlcHJlc2VudHMuIFRoZSBkZWZhdWx0IGlzCit0aGF0IGFsbCBkb3RzIGFyZSBkb3duIGFuZCBub3QgdXNlZCB0byByZXByZXNlbnQgYW55dGhpbmcuCisKKypkb3QqCisgICBUaGUgZG90IGJlaW5nIGRlZmluZWQuIEl0IGlzIGEgc2luZ2xlIGRpZ2l0IHdpdGhpbiB0aGUgcmFuZ2UgYGAxYGAtYGA4YGAgYXMKKyAgIGRlZmluZWQgYnkgdGhlIHN0YW5kYXJkIGJyYWlsbGUgZG90IG51bWJlcmluZyBjb252ZW50aW9uIChzZWUgCisgICB8UkVBRE1FLkJyYWlsbGVEb3RzfCBmb3IgZGV0YWlscykuCisKKypzdGF0ZSoKKyAgIFdoYXQgdGhlIGRvdCBiZWluZyBkZWZpbmVkIHJlcHJlc2VudHMuIEl0IG1heSBiZToKKworICAgPWF0dHJpYnV0ZQorICAgICAgVGhlIGRvdCBpcyByYWlzZWQgaWYgdGhlIG5hbWVkIGF0dHJpYnV0ZSBpcyBvbi4KKworICAgfmF0dHJpYnV0ZQorICAgICAgVGhlIGRvdCBpcyByYWlzZWQgaWYgdGhlIG5hbWVkIGF0dHJpYnV0ZSBpcyBvZmYuCisKK1RoZSBhdHRyaWJ1dGVzIGFyZToKKworPT09PT09PT09ICA9PT0gID09PT09PT09CitOYW1lICAgICAgIEhleCAgYmluYXJ5CistLS0tLS0tLS0gIC0tLSAgLS0tLS0tLS0KK2ZnLWJsdWUgICAgMDEgICAwMDAwMDAwMQorZmctZ3JlZW4gICAwMiAgIDAwMDAwMDEwCitmZy1yZWQgICAgIDA0ICAgMDAwMDAxMDAKK2ZnLWJyaWdodCAgMDggICAwMDAwMTAwMAorYmctYmx1ZSAgICAxMCAgIDAwMDEwMDAwCitiZy1ncmVlbiAgIDIwICAgMDAxMDAwMDAKK2JnLXJlZCAgICAgNDAgICAwMTAwMDAwMAorYmxpbmsgICAgICA4MCAgIDEwMDAwMDAwCis9PT09PT09PT0gID09PSAgPT09PT09PT0KKworRXhhbXBsZXM6OgorCisgICBkb3QgMSA9ZmctcmVkCisgICBkb3QgMiB+YmctYmx1ZQorCisuLiBpbmNsdWRlOjogbmVzdGluZy1kaXJlY3RpdmVzLnJzdAorCitBdHRyaWJ1dGVzIFRhYmxlIExpc3QKKz09PT09PT09PT09PT09PT09PT09PQorCisuLiBjc3YtdGFibGU6OgorICAgOmhlYWRlci1yb3dzOiAxCisgICA6ZmlsZTogYXR0cmlidXRlcy10YWJsZS5jc3YKKwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRzL1JFQURNRS5CbHVldG9vdGggYi9Eb2N1bWVudHMvUkVBRE1FLkJsdWV0b290aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOTZiYmVkCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRzL1JFQURNRS5CbHVldG9vdGgKQEAgLTAsMCArMSwyMDcgQEAKK35+fn5+fn5+fn5+fn5+fn5+fn5+fgorQmx1ZXRvb3RoIENvbm5lY3Rpb25zCit+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKworLi4gaW5jbHVkZTo6IHByb2xvZ3VlLnJzdAorCitQYWlyaW5nIGEgQmx1ZXRvb3RoIERldmljZQorPT09PT09PT09PT09PT09PT09PT09PT09PT0KKworWW91IG5lZWQgdG8gInBhaXIiIHlvdXIgZGV2aWNlIHdpdGggdGhlIGhvc3Qgb24gd2hpY2ggeW91IHdpc2ggdG8gdXNlIGl0LiBZb3UgCitjYW4gcGFpciBhIGRldmljZSB3aXRoIG1vcmUgdGhhbiBvbmUgaG9zdCwgYnV0IHlvdSBjYW4gdXN1YWxseSBvbmx5IHVzZSBpdCB3aXRoIAorb25lIGhvc3QgYXQgYSB0aW1lLgorCitPbiBMaW51eAorLS0tLS0tLS0KKworUGFpcmluZyBhIEJsdWV0b290aCBkZXZpY2Ugb24gTGludXggaXMgcmVsYXRpdmVseSBlYXN5IGlmIHlvdSdyZSBjb21mb3J0YWJsZSAKK3dvcmtpbmcgd2l0aGluIHRoZSBncmFwaGljYWwgKFgpIGVudmlyb25tZW50LiBBbGwgeW91IG5lZWQgdG8gZG8gaXMgdG8gcnVuIAorYGBibHVldG9vdGgtYXBwbGV0YGAgYW5kIGZvbGxvdyB0aGUgc3RlcHMgaXQgcHJlc2VudHMgdG8geW91LiBJdCdzIGEgbGl0dGxlIAordHJpY2tpZXIgdG8gcGFpciBhIEJsdWV0b290aCBkZXZpY2UgdmlhIHRoZSBjb21tYW5kIGxpbmUsIGJ1dCBpdCBjYW4gYmUgZG9uZS4KK0hvdyB0byBkbyBpdCBkZXBlbmRzIG9uIHRoZSB2ZXJzaW9uIG9mIHRoZSBCbHVldG9vdGggc29mdHdhcmUgc3RhY2sgdGhhdCB5b3UncmUKK3VzaW5nLgorCitGb3IgQmx1ZXRvb3RoIFZlcnNpb24gNQorfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKworQXMgb2YgQmx1ZXRvb3RoIHZlcnNpb24gNSwgYWxsIHJlcXVpcmVkIGFjdGlvbnMgZm9yIHBhaXJpbmcgYSBkZXZpY2UgdmlhIHRoZQorY29tbWFuZC1saW5lIGNhbiBiZSBwZXJmb3JtZWQgd2l0aCBhIHNpbmdsZSB0b29sIGNhbGxlZCBgYGJsdWV0b290aGN0bGBgLgorCitGaXJzdCwgaW4gY2FzZSB5b3UgaGF2ZSBzZXZlcmFsIEJsdWV0b290aCBjb250cm9sbGVycyBpbiB1c2UgKHVuY29tbW9uLCBidXQKK3Bvc3NpYmxlKSwgeW91IG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIGNvcnJlY3Qgb25lIGlzIGN1cnJlbnRseSBzZWxlY3RlZC4KK1VzZSB0aGUgYGBsaXN0YGAgY29tbWFuZCB0byBzaG93IGFsbCBhdmFpbGFibGUgY29udHJvbGxlcnMsIGFuZCB0aGUKK2Bgc2VsZWN0IDxob3N0LWFkZHJlc3M+YGAgY29tbWFuZCB0byBzZWxlY3Qgb25lOgorCisuLiBjb2RlLWJsb2NrOjogY29uc29sZQorCisgICAjIGJsdWV0b290aGN0bAorICAgW2JsdWV0b290aF0jIGxpc3QKKyAgIENvbnRyb2xsZXIgMDE6MjM6NDU6Njc6ODk6QUIgZnppZHBjNzMKKyAgIFtibHVldG9vdGhdIyBzZWxlY3QgMDE6MjM6NDU6Njc6ODk6QUIKKworSXQgY2FuIGhhcHBlbiB0aGF0IHRoZSBzZWxlY3RlZCBjb250cm9sbGVyIGlzIG5vdCBwb3dlcmVkIG9uIGF0IHRoZSBtb21lbnQuCitNYWtlIHN1cmUgaXQgaXMsIGFuZCwgaWYgaXQgaXNuJ3QsIHVzZSB0aGUgYGBwb3dlciBvbmBgIGNvbW1hbmQgdG8gZW5hYmxlIHRoZQorY29udHJvbGxlcjoKKworLi4gY29kZS1ibG9jazo6IGNvbnNvbGUKKworICAgW2JsdWV0b290aF0jIHNob3cKKyAgIENvbnRyb2xsZXIgMDE6MjM6NDU6Njc6ODk6QUIKKyAgICAgICAgICAgTmFtZTogZnppZHBjNzMKKyAgICAgICAgICAgQWxpYXM6IGZ6aWRwYzczLTAKKyAgICAgICAgICAgQ2xhc3M6IDB4MDAwMDAwCisgICAgICAgICAgIFBvd2VyZWQ6IG5vCisgICAgICAgICAgIERpc2NvdmVyYWJsZTogbm8KKyAgICAgICAgICAgUGFpcmFibGU6IHllcworICAgICAgICAgICBVVUlEOiBQblAgSW5mb3JtYXRpb24gICAgICAgICAgICgwMDAwMTIwMC0wMDAwLTEwMDAtODAwMC0wMDgwNWY5YjM0ZmIpCisgICAgICAgICAgIFVVSUQ6IEdlbmVyaWMgQWNjZXNzIFByb2ZpbGUgICAgKDAwMDAxODAwLTAwMDAtMTAwMC04MDAwLTAwODA1ZjliMzRmYikKKyAgICAgICAgICAgVVVJRDogR2VuZXJpYyBBdHRyaWJ1dGUgUHJvZmlsZSAoMDAwMDE4MDEtMDAwMC0xMDAwLTgwMDAtMDA4MDVmOWIzNGZiKQorICAgICAgICAgICBVVUlEOiBBL1YgUmVtb3RlIENvbnRyb2wgICAgICAgICgwMDAwMTEwZS0wMDAwLTEwMDAtODAwMC0wMDgwNWY5YjM0ZmIpCisgICAgICAgICAgIFVVSUQ6IEEvViBSZW1vdGUgQ29udHJvbCBUYXJnZXQgKDAwMDAxMTBjLTAwMDAtMTAwMC04MDAwLTAwODA1ZjliMzRmYikKKyAgICAgICAgICAgTW9kYWxpYXM6IHVzYjp2MUQ2QnAwMjQ2ZDA1MTcKKyAgICAgICAgICAgRGlzY292ZXJpbmc6IG5vCisgICBbYmx1ZXRvb3RoXSMgcG93ZXIgb24KKyAgIFtDSEddIENvbnRyb2xsZXIgMDE6MjM6NDU6Njc6ODk6QUIgQ2xhc3M6IDB4MDAwMTA0CisgICBDaGFuZ2luZyBwb3dlciBvbiBzdWNjZWVkZWQKKyAgIFtDSEddIENvbnRyb2xsZXIgMDE6MjM6NDU6Njc6ODk6QUIgUG93ZXJlZDogeWVzCisKK1RvIG9idGFpbiB0aGUgQmx1ZXRvb3RoIGRldmljZSBhZGRyZXNzIG9mIHRoZSBkZXZpY2UgeW91IHdhbnQgdG8gcGFpciB3aXRoLAorZW5hYmxlIHNjYW4gbW9kZToKKworLi4gY29kZS1ibG9jazo6IGNvbnNvbGUKKworICAgW2JsdWV0b290aF0jIHNjYW4gb24KKyAgIERpc2NvdmVyeSBzdGFydGVkCisgICBbQ0hHXSBDb250cm9sbGVyIDAxOjIzOjQ1OjY3Ojg5OkFCIERpc2NvdmVyaW5nOiB5ZXMKKyAgIFtORVddIERldmljZSAxMjozNDo1Njo3ODo5QTpCQyBicmFpbGxleCBsaXZlIDAxMzkKKyAgIFtibHVldG9vdGhdIyBzY2FuIG9mZgorICAgRGlzY292ZXJ5IHN0b3BwZWQKKyAgIFtDSEddIENvbnRyb2xsZXIgMDE6MjM6NDU6Njc6ODk6QUIgRGlzY292ZXJpbmc6IG5vCisKK1RvIGJlIGFibGUgdG8gcmVjZWl2ZSBQSU4gY29kZSByZXF1ZXN0cyBkaXJlY3RseSBvbiB0aGUgY29uc29sZSwgeW91IG5lZWQgdG8KK2VuYWJsZSB0aGUgKmFnZW50KjoKKworLi4gY29kZS1ibG9jazo6IGNvbnNvbGUKKworICAgW2JsdWV0b290aF0jIGFnZW50IG9uCisgICBBZ2VudCByZWdpc3RlcmVkCisKK05vdyB5b3UgYXJlIGZpbmFsbHkgcmVhZHkgdG8gaW5pdGlhdGUgdGhlIHBhaXJpbmc6CisKKy4uIGNvZGUtYmxvY2s6OiBjb25zb2xlCisKKyAgIFtibHVldG9vdGhdIyBwYWlyIDEyOjM0OjU2Ojc4OjlBOkJDCisgICBBdHRlbXB0aW5nIHRvIHBhaXIgd2l0aCAxMjozNDo1Njo3ODo5QTpCQworICAgW0NIR10gRGV2aWNlIDEyOjM0OjU2Ojc4OjlBOkJDIENvbm5lY3RlZDogeWVzCisgICBSZXF1ZXN0IFBJTiBjb2RlCisgICBbYWdlbnRdIEVudGVyIFBJTiBjb2RlOiAxMjM0CisgICBbQ0hHXSBEZXZpY2UgMTI6MzQ6NTY6Nzg6OUE6QkMgVVVJRHM6CisgICAgICAgICAgIDAwMDAxMTAxLTAwMDAtMTAwMC04MDAwLTAwODA1ZjliMzRmYgorICAgW0NIR10gRGV2aWNlIDEyOjM0OjU2Ojc4OjlBOkJDIFBhaXJlZDogeWVzCisgICBQYWlyaW5nIHN1Y2Nlc3NmdWwKKyAgIFtDSEddIERldmljZSAxMjozNDo1Njo3ODo5QTpCQyBDb25uZWN0ZWQ6IG5vCisKK0ZvciBCbHVldG9vdGggVmVyc2lvbiA0Cit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorCitZb3UgbmVlZCB0byBmaW5kIG91dCB5b3VyIGhvc3QncyBCbHVldG9vdGggRGV2aWNlIEFkZHJlc3MgKHJlZmVycmVkIHRvIGxhdGVyIGluIAordGhpcyBkb2N1bWVudCBhcyAqaG9zdC1hZGRyZXNzKikuIFRvIGRvIHRoaXMsIHJ1biB0aGUgY29tbWFuZDo6CisKKyAgIGhjaWNvbmZpZyBoY2kwCisKK0xvb2sgZm9yIHRoZSAoaW5kZW50ZWQpIGxpbmUgd2hpY2ggYmVnaW5zIHdpdGggYGBCRCBBZGRyZXNzOmBgLiBUaGUgdmVyeSBuZXh0IAorIndvcmQiIG9uIHRoYXQgbGluZSBpcyB5b3VyIGhvc3QncyBCbHVldG9vdGggRGV2aWNlIEFkZHJlc3MuIEl0J2xsIGJlIHNpeCAKK3R3by1kaWdpdCBoZXhhZGVjaW1hbCBudW1iZXJzIHNlcGFyYXRlZCBieSBjb2xvbnMgKGBgOmBgKS4gRXhhbXBsZXMgaW4gdGhpcyAKK2RvY3VtZW50IHVzZSB0aGUgdmFsdWUgYGAwMToyMzo0NTo2Nzo4OTpBQmBgLgorCitZb3UgbmVlZCB0byBmaW5kIG91dCB5b3VyIGRldmljZSdzIEJsdWV0b290aCBEZXZpY2UgQWRkcmVzcyAocmVmZXJyZWQgdG8gbGF0ZXIgCitpbiB0aGlzIGRvY3VtZW50IGFzICpkZXZpY2UtYWRkcmVzcyopLiBUbyBkbyB0aGlzLCBydW4gdGhlIGNvbW1hbmQ6OgorCisgICBoY2l0b29sIHNjYW4KKworVGhpcyBjb21tYW5kIGNhbiB0YWtlIGEgd2hpbGUgdG8gY29tcGxldGUgYXMgaXQgZ2l2ZXMgZGV2aWNlcyBhIGZhaXIgYml0IG9mCit0aW1lIHRvIHJlc3BvbmQuIEVhY2ggZGV2aWNlIHdoaWNoIHJlc3BvbmRzIGNyZWF0ZXMgb25lIHR3by1jb2x1bW4gb3V0cHV0IGxpbmUuCitUaGUgZmlyc3QgY29sdW1uIGlzIGl0cyBCbHVldG9vdGggRGV2aWNlIEFkZHJlc3MgKGV4YW1wbGVzIGluIHRoaXMgZG9jdW1lbnQgdXNlCit0aGUgdmFsdWUgYGAxMjozNDo1Njo3ODo5QTpCQ2BgKSwgYW5kIHRoZSBzZWNvbmQgY29sdW1uIGlzIGl0cyAKK2N1cnJlbnQgbmFtZS4gTWFudWZhY3R1cmVycyB1c3VhbGx5IHNldCBhIGRldmljZSdzIGluaXRpYWwgbmFtZSB0byBpdHMgcHJvZHVjdCAKK25hbWUgYW5kIG1vZGVsIG51bWJlciBzbyB0aGF0IGl0J3MgZWFzeSB0byBzcG90IHdpdGhpbiB0aGUgc2NhbiBvdXRwdXQuIElmIHlvdXIgCitkZXZpY2UgYWxsb3dzIHlvdSB0byBjaGFuZ2UgaXRzIG5hbWUsIGl0J3Mgb2theSB0byBkbyBzbyBldmVuIGFmdGVyIHlvdSd2ZSAKK3BhaXJlZCBpdC4KKworQSBkZXZpY2UgbmVlZHMgdG8gYmUgInZpc2libGUiIGluIG9yZGVyIGZvciB0aGUgc2NhbiB0byBmaW5kIGl0LiBNb3N0IGRldmljZXMgCithcmUgImludmlzaWJsZSIgYnkgZGVmYXVsdCwgYnV0IGhhdmUgYSB3YXkgdG8gYmUgbWFkZSB0ZW1wb3JhcmlseSB2aXNpYmxlLiBZb3UgCitzaG91bGQgY2hlY2sgeW91ciBkZXZpY2UncyBtYW51YWwgdG8gZmluZCBvdXQgaG93IHRvIGRvIHRoaXMuIEluIG1hbnkgY2FzZXMsCit0aGVyZSdzIGVpdGhlciBhIGJ1dHRvbiB3aGljaCBuZWVkcyB0byBiZSBwcmVzc2VkIG9yIGEgbWVudSBpdGVtIHdoaWNoIG5lZWRzIHRvIAorYmUgc2VsZWN0ZWQuIFNpbmNlIGJvdGggdGhlIGRldmljZSdzIHRlbXBvcmFyeSB2aXNpYmlsaXR5IGFuZCB0aGUgaG9zdCdzIHNjYW4gCit0aW1lIG91dCwgbWFrZSB5b3VyIGRldmljZSB2aXNpYmxlIGp1c3QgYmVmb3JlIHlvdSBpbml0aWF0ZSB0aGUgc2Nhbi4KKworWW91IG5lZWQgdG8ga25vdyB3aGF0IFBJTiAocGFzc3dvcmQpIHlvdXIgZGV2aWNlIGlzIGV4cGVjdGluZy4gWW91ciBkZXZpY2UncyAKK2RvY3VtZW50YXRpb24gc2hvdWxkIGNvbnRhaW4gdGhpcyBpbmZvcm1hdGlvbi4gTWFueSBkZXZpY2VzIGFsbG93IHlvdSB0byBzZXQgCit0aGUgUElOLCBpbiB3aGljaCBjYXNlIHRoZXknbGwgaGF2ZSBhIG1lbnUgd2hpY2ggYWxsb3dzIHlvdSB0byBkbyB0aGlzLiAKK0V4YW1wbGVzIGluIHRoaXMgZG9jdW1lbnQgdXNlIHRoZSB2YWx1ZSBgYDEyMzRgYC4KKworR28gaW50byB0aGUgZGlyZWN0b3J5IGBgL3Zhci9saWIvYmx1ZXRvb3RoLzxob3N0LWFkZHJlc3M+YGAuIEluIHRoZXJlIChjcmVhdGUKK2lmIG5lY2Vzc2FyeSkgaXMgdGhlIGZpbGUgYGBwaW5jb2Rlc2BgLiBFYWNoIGxpbmUgaW4gdGhpcyBmaWxlIGFzc29jaWF0ZXMgYQorZGV2aWNlIHdpdGggaXRzIFBJTi4gSXQgaGFzIHR3byBmaWVsZHMgc2VwYXJhdGVkIGJ5IHNwYWNlLiBUaGUgZmlyc3QgZmllbGQgaXMKK3RoZSBkZXZpY2UncyBCbHVldG9vdGggRGV2aWNlIEFkZHJlc3MgYW5kIHRoZSBzZWNvbmQgZmllbGQgaXMgaXRzIFBJTi4gVGhlIAorQmx1ZXRvb3RoIERldmljZSBBZGRyZXNzIG11c3QgYmUgaW4gdXBwZXJjYXNlLiBGb3IgZXhhbXBsZTo6CisKKyAgIGNhdCAvdmFyL2xpYi9ibHVldG9vdGgvMDE6MjM6NDU6Njc6ODk6QUIvcGluY29kZXMKKyAgIDEyOjM0OjU2Ojc4OjlBOkJDIDEyMzQKKworCitVc2luZyBhIEJsdWV0b290aCBEZXZpY2Ugd2l0aCBCUkxUVFkKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitBZnRlciB5b3VyIGRldmljZSBoYXMgYmVlbiBwYWlyZWQgd2l0aCB5b3VyIGhvc3QsIGl0J3MgcmVhZHkgdG8gYmUgdXNlZCBieSAKK0JSTFRUWS4KKworSWRlbnRpZnlpbmcgdGhlIERldmljZQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitZb3UgY2FuIHRlbGwgQlJMVFRZIHRvIHVzZSB5b3VyIEJsdWV0b290aCBkZXZpY2UgZWl0aGVyIHZpYSB0aGUgYGAtZGBgCisob3IgYGAtLWJyYWlsbGUtZGV2aWNlPWBgKSBjb21tYW5kIGxpbmUgb3B0aW9uLCBvciB2aWEgdGhlIGBgYnJhaWxsZS1kZXZpY2VgYAorbGluZSBpbiB0aGUgZmlsZSBgYC9ldGMvYnJsdHR5LmNvbmZgYC4gVGhlIGRldmljZSBzaG91bGQgYmUgc3BlY2lmaWVkIGFzIHRoZQord29yZCBgYGJsdWV0b290aGBgLCBhIGNvbG9uIChgYDpgYCksIGFuZCB0aGUgZGV2aWNlJ3MgQmx1ZXRvb3RoIERldmljZSBBZGRyZXNzLgorRm9yIGV4YW1wbGU6OgorCisgICBicmx0dHkgLWQgYmx1ZXRvb3RoOjEyOjM0OjU2Ojc4OjlBOkJDCisKK29yOjoKKworICAgY2F0IC9ldGMvYnJsdHR5LmNvbmYKKyAgIGJyYWlsbGUtZGV2aWNlIGJsdWV0b290aDoxMjozNDo1Njo3ODo5QTpCQworCitPbiBzb21lIHBsYXRmb3JtcywKK0JSTFRUWSBzdXBwb3J0cyB0aGUgZGV0ZWN0aW9uIG9mIGEgQmx1ZXRvb3RoIGRldmljZSBiYXNlZCBvbiBpdHMgbmFtZS4KK1RoZXNlIHBsYXRmb3JtcyBpbmNsdWRlOgorCisqIEFuZHJvaWQKKyogTGludXggKGlmIHRoZSBCbHVldG9vdGggdmVyc2lvbiBpcyBhdCBsZWFzdCA1KQorKiBXaW5kb3dzCisKK1RoZSBhZGRyZXNzIG9mIHRoZSBkZXZpY2UgbmVlZG4ndCBiZSBzcGVjaWZpZWQgb24gdGhlc2UgcGxhdGZvcm1zIC0KK3NwZWNpZnlpbmcganVzdCBgYGJsdWV0b290aDpgYCBpcyBzdWZmaWNpZW50LgorQlJMVFRZIHdpbGwgZmluZCB0aGUgYnJhaWxsZSBkZXZpY2UgYmFzZWQgb24gaXRzIG5hbWUuCitJdCdsbCBvbmx5IGNvbnNpZGVyIGRldmljZXMgdGhhdCBoYXZlIGFscmVhZHkgYmVlbiBwYWlyZWQgd2l0aCB0aGUgaG9zdC4KKworSWYgdHdvIChvciBtb3JlKSBicmFpbGxlIGRldmljZXMgYXJlIHBhaXJlZCB3aXRoIHlvdXIgaG9zdCwKK2FuZCBpZiBib3RoIG9mIHRoZW0gYXJlIG5lYXIgYnksIHR1cm5lZCBvbiwgYW5kIGNvbmZpZ3VyZWQgZm9yIEJsdWV0b290aCBhY2Nlc3MsCit0aGVuLCBvZiBjb3Vyc2UsIEJSTFRUWSBtaWdodCBjaG9vc2UgdGhlIHdyb25nIG9uZS4KK0FzIGxvbmcgYXMgYm90aCBvZiB0aGVtIGRvbid0IGhhdmUgdGhlIHNhbWUgQmx1ZXRvb3RoIG5hbWUsCit5b3UgY2FuIHN0aWxsIHNwZWNpZnkgdGhlIGludGVuZGVkIGRldmljZSB3aXRob3V0IGtub3dpbmcgaXRzIGFkZHJlc3MuCitZb3UgY2FuIGxpbWl0IHRoZSBkZXZpY2VzIHRoYXQgQlJMVFRZIHdpbGwgY29uc2lkZXIKK2J5IHNwZWNpZnlpbmcgdGhlIGJlZ2lubmluZyBvZiBpdHMgQmx1ZXRvb3RoIG5hbWU6OgorCisgICBibHVldG9vdGg6bmFtZT1wcmVmaXgKKworSWYgeW91IG5lZWQgdG8gc3BlY2lmeSBhIHNwYWNlIHdpdGhpbiB0aGUgcHJlZml4LCB0aGVuOgorCisqIE9uIHRoZSBjb21tYW5kIGxpbmUsIHVzZSBxdW90ZXM6OgorCisgICAgLWQgImJsdWV0b290aDpuYW1lPWJyYWlsbGUgZGV2aWNlIgorCisqIEluIGBgL2V0Yy9icmx0dHkuY29uZmBgLCB1c2UgXFxzOjoKKworICAgIGJyYWlsbGUtZGV2aWNlIGJsdWV0b290aDpuYW1lPWJyYWlsbGVcc2RldmljZQorCmRpZmYgLS1naXQgYS9Eb2N1bWVudHMvUkVBRE1FLkJyYWlsbGVEb3RzIGIvRG9jdW1lbnRzL1JFQURNRS5CcmFpbGxlRG90cwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZjQwZWQ4Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRzL1JFQURNRS5CcmFpbGxlRG90cwpAQCAtMCwwICsxLDM1IEBACit+fn5+fn5+fn5+fn4KK0JyYWlsbGUgRG90cworfn5+fn5+fn5+fn5+CisKKy4uIGluY2x1ZGU6OiBwcm9sb2d1ZS5yc3QKKworQSBzdGFuZGFyZCBicmFpbGxlIGNlbGwgY29uc2lzdHMgb2Ygc2l4IGRvdHMgYXJyYW5nZWQgaW4gdGhyZWUgcm93cyBhbmQgdHdvCitjb2x1bW5zLiBFYWNoIGRvdCBjYW4gYmUgc3BlY2lmaWNhbGx5IGlkZW50aWZpZWQgYnkgaXRzIG51bWJlciBhcyBmb2xsb3dzOgorCis9PT0gID09PT09PT09PT09PSAgPT09ICA9PT09PT0KK0RvdCAgUG9zaXRpb24gICAgICBSb3cgIENvbHVtbgorLS0tICAtLS0tLS0tLS0tLS0gIC0tLSAgLS0tLS0tCisxICAgIHRvcC1sZWZ0ICAgICAgMSAgICAxCisyICAgIG1pZGRsZS1sZWZ0ICAgMiAgICAxCiszICAgIGJvdHRvbS1sZWZ0ICAgMyAgICAxCis0ICAgIHRvcC1yaWdodCAgICAgMSAgICAyCis1ICAgIG1pZGRsZS1yaWdodCAgMiAgICAyCis2ICAgIGJvdHRvbS1yaWdodCAgMyAgICAyCis9PT0gID09PT09PT09PT09PSAgPT09ICA9PT09PT0KKworQ29tcHV0ZXIgYnJhaWxsZSBoYXMgaW50cm9kdWNlZCBhIGZvdXJ0aCByb3cgYXQgdGhlIGJvdHRvbS4KKworPT09ICA9PT09PT09PT09PT0gID09PSAgPT09PT09CitEb3QgIFBvc2l0aW9uICAgICAgUm93ICBDb2x1bW4KKy0tLSAgLS0tLS0tLS0tLS0tICAtLS0gIC0tLS0tLQorNyAgICBiZWxvdy1sZWZ0ICAgIDQgICAgMQorOCAgICBiZWxvdy1yaWdodCAgIDQgICAgMgorPT09ICA9PT09PT09PT09PT0gID09PSAgPT09PT09CisKK0EgcGljdHVyZSBtYXkgbWFrZSB0aGlzIG51bWJlcmluZyBjb252ZW50aW9uIGVhc2llciB0byB1bmRlcnN0YW5kOjoKKworICAgMSBvIG8gNAorICAgMiBvIG8gNQorICAgMyBvIG8gNgorICAgNyBvIG8gOApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRzL1JFQURNRS5Db21tYW5kUmVmZXJlbmNlIGIvRG9jdW1lbnRzL1JFQURNRS5Db21tYW5kUmVmZXJlbmNlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUxNWYxMDMKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudHMvUkVBRE1FLkNvbW1hbmRSZWZlcmVuY2UKQEAgLTAsMCArMSwxODg3IEBACit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CitUaGUgQlJMVFRZIENvbW1hbmQgUmVmZXJlbmNlCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisKKy4uIGNvbnRlbnRzOjoKKworQWxwaGFiZXRpY2FsIENvbW1hbmQgSW5kZXgKKz09PT09PT09PT09PT09PT09PT09PT09PT09CisKKyogYEFMRVJUYF8KKyogYEFMVEdSYF8KKyogYEFTUEtfQ01QX1dPUkRTYF8KKyogYEFTUEtfREVMX0NIQVJTYF8KKyogYEFTUEtfSU5ERU5UYF8KKyogYEFTUEtfSU5TX0NIQVJTYF8KKyogYEFTUEtfUkVQX0NIQVJTYF8KKyogYEFTUEtfU0VMX0NIQVJgXworKiBgQVNQS19TRUxfTElORWBfCisqIGBBVFRSQkxJTktgXworKiBgQVRUUkROYF8KKyogYEFUVFJVUGBfCisqIGBBVFRSVklTYF8KKyogYEFVVE9SRVBFQVRgXworKiBgQVVUT1NQRUFLYF8KKyogYEJBQ0tgXworKiBgQk9UYF8KKyogYEJPVF9MRUZUYF8KKyogYEJSTEtCRGBfCisqIGBCUkxVQ0RPVFNgXworKiBgQlJMX1NUQVJUYF8KKyogYEJSTF9TVE9QYF8KKyogYENBUEJMSU5LYF8KKyogYENIUkxUYF8KKyogYENIUlJUYF8KKyogYENMSVBfQUREYF8KKyogYENMSVBfQVBQRU5EYF8KKyogYENMSVBfQ09QWWBfCisqIGBDTElQX05FV2BfCisqIGBDTElQX1JFU1RPUkVgXworKiBgQ0xJUF9TQVZFYF8KKyogYENPTVBCUkw2YF8KKyogYENPTlRFWFRgXworKiBgQ09OVFJBQ1RFRGBfCisqIGBDT05UUk9MYF8KKyogYENPUFlfTElORWBfCisqIGBDT1BZX1JFQ1RgXworKiBgQ1NSQkxJTktgXworKiBgQ1NSSElERWBfCisqIGBDU1JKTVBfVkVSVGBfCisqIGBDU1JTSVpFYF8KKyogYENTUlRSS2BfCisqIGBDU1JWSVNgXworKiBgREVTQ0NIQVJgXworKiBgREVTQ19DVVJSX0NIQVJgXworKiBgRElTUE1EYF8KKyogYEZSRUVaRWBfCisqIGBGV0lOTFRgXworKiBgRldJTkxUU0tJUGBfCisqIGBGV0lOUlRgXworKiBgRldJTlJUU0tJUGBfCisqIGBHT1RPTElORWBfCisqIGBHT1RPTUFSS2BfCisqIGBHVUlgXworKiBgR1VJX0FQUF9BTEVSVFNgXworKiBgR1VJX0FQUF9MSVNUYF8KKyogYEdVSV9BUFBfTUVOVWBfCisqIGBHVUlfQVJFQV9BQ1RWYF8KKyogYEdVSV9BUkVBX05FWFRgXworKiBgR1VJX0FSRUFfUFJFVmBfCisqIGBHVUlfQkFDS2BfCisqIGBHVUlfQlJMX0FDVElPTlNgXworKiBgR1VJX0RFVl9PUFRJT05TYF8KKyogYEdVSV9ERVZfU0VUVElOR1NgXworKiBgR1VJX0hPTUVgXworKiBgR1VJX0lURU1fRlJTVGBfCisqIGBHVUlfSVRFTV9MQVNUYF8KKyogYEdVSV9JVEVNX05FWFRgXworKiBgR1VJX0lURU1fUFJFVmBfCisqIGBHVUlfVElUTEVgXworKiBgSEVMUGBfCisqIGBIT01FYF8KKyogYEhPU1RDTURgXworKiBgSE9TVF9DT1BZYF8KKyogYEhPU1RfQ1VUYF8KKyogYEhPU1RfUEFTVEVgXworKiBgSFdJTkxUYF8KKyogYEhXSU5SVGBfCisqIGBJTkRJQ0FUT1JTYF8KKyogYElORk9gXworKiBgS0VZX0JBQ0tTUEFDRWBfCisqIGBLRVlfQ1VSU09SX0RPV05gXworKiBgS0VZX0NVUlNPUl9MRUZUYF8KKyogYEtFWV9DVVJTT1JfUklHSFRgXworKiBgS0VZX0NVUlNPUl9VUGBfCisqIGBLRVlfREVMRVRFYF8KKyogYEtFWV9FTkRgXworKiBgS0VZX0VOVEVSYF8KKyogYEtFWV9FU0NBUEVgXworKiBgS0VZX0ZVTkNUSU9OYF8KKyogYEtFWV9IT01FYF8KKyogYEtFWV9JTlNFUlRgXworKiBgS0VZX1BBR0VfRE9XTmBfCisqIGBLRVlfUEFHRV9VUGBfCisqIGBLRVlfVEFCYF8KKyogYExFQVJOYF8KKyogYExOQkVHYF8KKyogYExORE5gXworKiBgTE5FTkRgXworKiBgTE5VUGBfCisqIGBNQUNST2BfCisqIGBNRU5VX0ZJUlNUX0lURU1gXworKiBgTUVOVV9MQVNUX0lURU1gXworKiBgTUVOVV9ORVhUX0lURU1gXworKiBgTUVOVV9ORVhUX1NFVFRJTkdgXworKiBgTUVOVV9QUkVWX0lURU1gXworKiBgTUVOVV9QUkVWX0xFVkVMYF8KKyogYE1FTlVfUFJFVl9TRVRUSU5HYF8KKyogYE1FVEFgXworKiBgTVVURWBfCisqIGBOT09QYF8KKyogYE5YRElGQ0hBUmBfCisqIGBOWERJRkxOYF8KKyogYE5YSU5ERU5UYF8KKyogYE5YTkJXSU5gXworKiBgTlhQR1JQSGBfCisqIGBOWFBST01QVGBfCisqIGBOWFNFQVJDSGBfCisqIGBPRkZMSU5FYF8KKyogYFBBU1NBVGBfCisqIGBQQVNTQ0hBUmBfCisqIGBQQVNTRE9UU2BfCisqIGBQQVNTUFMyYF8KKyogYFBBU1NYVGBfCisqIGBQQVNURWBfCisqIGBQQVNURV9ISVNUT1JZYF8KKyogYFBSRElGQ0hBUmBfCisqIGBQUkRJRkxOYF8KKyogYFBSRUZMT0FEYF8KKyogYFBSRUZNRU5VYF8KKyogYFBSRUZSRVNFVGBfCisqIGBQUkVGU0FWRWBfCisqIGBQUklOREVOVGBfCisqIGBQUk5CV0lOYF8KKyogYFBSUEdSUEhgXworKiBgUFJQUk9NUFRgXworKiBgUFJTRUFSQ0hgXworKiBgUkVGUkVTSGBfCisqIGBSRUZSRVNIX0xJTkVgXworKiBgUkVTVEFSVEJSTGBfCisqIGBSRVNUQVJUU1BFRUNIYF8KKyogYFJFVFVSTmBfCisqIGBST1VURWBfCisqIGBST1VURV9DVVJSX0xPQ05gXworKiBgUk9VVEVfTElORWBfCisqIGBST1VURV9TUEVFQ0hgXworKiBgU0FZX0FCT1ZFYF8KKyogYFNBWV9BTExgXworKiBgU0FZX0JFTE9XYF8KKyogYFNBWV9GQVNURVJgXworKiBgU0FZX0hJR0hFUmBfCisqIGBTQVlfTElORWBfCisqIGBTQVlfTE9VREVSYF8KKyogYFNBWV9MT1dFUmBfCisqIGBTQVlfU0xPV0VSYF8KKyogYFNBWV9TT0ZURVJgXworKiBgU0NSX1NUQVJUYF8KKyogYFNDUl9TVE9QYF8KKyogYFNFTEVDVFZUYF8KKyogYFNFTEVDVFZUX05FWFRgXworKiBgU0VMRUNUVlRfUFJFVmBfCisqIGBTRVRMRUZUYF8KKyogYFNFVE1BUktgXworKiBgU0VUX0FUVFJJQlVURVNfVEFCTEVgXworKiBgU0VUX0NPTlRSQUNUSU9OX1RBQkxFYF8KKyogYFNFVF9LRVlCT0FSRF9UQUJMRWBfCisqIGBTRVRfTEFOR1VBR0VfUFJPRklMRWBfCisqIGBTRVRfVEVYVF9UQUJMRWBfCisqIGBTSElGVGBfCisqIGBTSE9XX0NVUlJfTE9DTmBfCisqIGBTSVhET1RTYF8KKyogYFNLUEJMTktXSU5TYF8KKyogYFNLUElETE5TYF8KKyogYFNMSURFV0lOYF8KKyogYFNQRUFLX0NVUlJfQ0hBUmBfCisqIGBTUEVBS19DVVJSX0xJTkVgXworKiBgU1BFQUtfQ1VSUl9MT0NOYF8KKyogYFNQRUFLX0NVUlJfV09SRGBfCisqIGBTUEVBS19GUlNUX0NIQVJgXworKiBgU1BFQUtfRlJTVF9MSU5FYF8KKyogYFNQRUFLX0lOREVOVGBfCisqIGBTUEVBS19MQVNUX0NIQVJgXworKiBgU1BFQUtfTEFTVF9MSU5FYF8KKyogYFNQRUFLX05FWFRfQ0hBUmBfCisqIGBTUEVBS19ORVhUX0xJTkVgXworKiBgU1BFQUtfTkVYVF9XT1JEYF8KKyogYFNQRUFLX1BSRVZfQ0hBUmBfCisqIGBTUEVBS19QUkVWX0xJTkVgXworKiBgU1BFQUtfUFJFVl9XT1JEYF8KKyogYFNQRUxMX0NVUlJfV09SRGBfCisqIGBTUEtIT01FYF8KKyogYFNQS19TVEFSVGBfCisqIGBTUEtfU1RPUGBfCisqIGBTV0lUQ0hWVGBfCisqIGBTV0lUQ0hWVF9ORVhUYF8KKyogYFNXSVRDSFZUX1BSRVZgXworKiBgVElNRWBfCisqIGBUT1BgXworKiBgVE9QX0xFRlRgXworKiBgVE9VQ0hfQVRgXworKiBgVE9VQ0hfTkFWYF8KKyogYFRVTkVTYF8KKyogYFRYVFNFTF9BTExgXworKiBgVFhUU0VMX0NMRUFSYF8KKyogYFRYVFNFTF9TRVRgXworKiBgVFhUU0VMX1NUQVJUYF8KKyogYFVOU1RJQ0tgXworKiBgVVBQRVJgXworKiBgV0lORE5gXworKiBgV0lOVVBgXworCitTcGVjaWFsIE1vZGVzCis9PT09PT09PT09PT09CisKKyogYEhFTFBgXworKiBgTEVBUk5gXworKiBgUFJFRk1FTlVgXworKiBgSU5GT2BfCisqIGBESVNQTURgXworKiBgRlJFRVpFYF8KKyogYERFU0NDSEFSYF8KKyogYFRJTUVgXworKiBgSU5ESUNBVE9SU2BfCisqIGBDT05URVhUYF8KKworLi4gX0hFTFA6CisKKyoqSEVMUCoqIC0gRW50ZXIvbGVhdmUgaGVscCBkaXNwbGF5LgorCisuLiBfTEVBUk46CisKKyoqTEVBUk4qKiAtIEVudGVyL2xlYXZlIGNvbW1hbmQgbGVhcm4gbW9kZS4KKworLi4gX1BSRUZNRU5VOgorCisqKlBSRUZNRU5VKiogLSBFbnRlci9sZWF2ZSBwcmVmZXJlbmNlcyBtZW51LgorCisuLiBfSU5GTzoKKworKipJTkZPKiogLSBFbnRlci9sZWF2ZSBzdGF0dXMgZGlzcGxheS4KKworLi4gX0RJU1BNRDoKKworKipESVNQTUQqKiAtIFNldCBkaXNwbGF5IG1vZGUgYXR0cmlidXRlcy90ZXh0LgorCitUaGUgZm9sbG93aW5nIG1vZGlmaWVycyBtYXkgYmUgc3BlY2lmaWVkOgorCisqIFRvZ2dsZTogb24sIG9mZgorCisuLiBfRlJFRVpFOgorCisqKkZSRUVaRSoqIC0gU2V0IHNjcmVlbiBpbWFnZSBmcm96ZW4vdW5mcm96ZW4uCisKK1RoZSBmb2xsb3dpbmcgbW9kaWZpZXJzIG1heSBiZSBzcGVjaWZpZWQ6CisKKyogVG9nZ2xlOiBvbiwgb2ZmCisKKy4uIF9ERVNDQ0hBUjoKKworKipERVNDQ0hBUioqIC0gRGVzY3JpYmUgY2hhcmFjdGVyLgorCitUaGUgZm9sbG93aW5nIG1vZGlmaWVycyBtYXkgYmUgc3BlY2lmaWVkOgorCisqIGEgY29sdW1uIG51bWJlcgorCisuLiBfVElNRToKKworKipUSU1FKiogLSBTaG93IGN1cnJlbnQgZGF0ZSBhbmQgdGltZS4KKworLi4gX0lORElDQVRPUlM6CisKKyoqSU5ESUNBVE9SUyoqIC0gU2hvdyB2YXJpb3VzIGRldmljZSBzdGF0dXMgaW5kaWNhdG9ycy4KKworLi4gX0NPTlRFWFQ6CisKKyoqQ09OVEVYVCoqIC0gU3dpdGNoIHRvIGNvbW1hbmQgY29udGV4dC4KKworVGhlIGZvbGxvd2luZyBtb2RpZmllcnMgbWF5IGJlIHNwZWNpZmllZDoKKworKiBhbiBvZmZzZXQKKworQ3Vyc29yIEZ1bmN0aW9ucworPT09PT09PT09PT09PT09PQorCisqIGBIT01FYF8KKyogYEJBQ0tgXworKiBgUkVUVVJOYF8KKyogYFJPVVRFYF8KKyogYFJPVVRFX0xJTkVgXworKiBgQ1NSSk1QX1ZFUlRgXworKiBgUk9VVEVfQ1VSUl9MT0NOYF8KKworLi4gX0hPTUU6CisKKyoqSE9NRSoqIC0gR28gdG8gc2NyZWVuIGN1cnNvci4KKworVGhlIGZvbGxvd2luZyBtb2RpZmllcnMgbWF5IGJlIHNwZWNpZmllZDoKKworKiBNb3Rpb246IHJvdXRlCisKKy4uIF9CQUNLOgorCisqKkJBQ0sqKiAtIEdvIGJhY2sgYWZ0ZXIgY3Vyc29yIHRyYWNraW5nLgorCitUaGUgZm9sbG93aW5nIG1vZGlmaWVycyBtYXkgYmUgc3BlY2lmaWVkOgorCisqIE1vdGlvbjogcm91dGUKKworLi4gX1JFVFVSTjoKKworKipSRVRVUk4qKiAtIEdvIHRvIHNjcmVlbiBjdXJzb3Igb3IgZ28gYmFjayBhZnRlciBjdXJzb3IgdHJhY2tpbmcuCisKK1RoZSBmb2xsb3dpbmcgbW9kaWZpZXJzIG1heSBiZSBzcGVjaWZpZWQ6CisKKyogTW90aW9uOiByb3V0ZQorCisuLiBfUk9VVEU6CisKKyoqUk9VVEUqKiAtIEJyaW5nIHNjcmVlbiBjdXJzb3IgdG8gY2hhcmFjdGVyLgorCitUaGUgZm9sbG93aW5nIG1vZGlmaWVycyBtYXkgYmUgc3BlY2lmaWVkOgorCisqIGEgY29sdW1uIG51bWJlcgorCisuLiBfUk9VVEVfTElORToKKworKipST1VURV9MSU5FKiogLSBCcmluZyBzY3JlZW4gY3Vyc29yIHRvIGxpbmUuCisKK1RoZSBmb2xsb3dpbmcgbW9kaWZpZXJzIG1heSBiZSBzcGVjaWZpZWQ6CisKKyogUm93OiBzY2FsZWQKKyogVmVydGljYWw6IHRvbGVmdAorCisuLiBfQ1NSSk1QX1ZFUlQ6CisKKyoqQ1NSSk1QX1ZFUlQqKiAtIEJyaW5nIHNjcmVlbiBjdXJzb3IgdG8gY3VycmVudCBsaW5lLgorCisuLiBfUk9VVEVfQ1VSUl9MT0NOOgorCisqKlJPVVRFX0NVUlJfTE9DTioqIC0gQnJpbmcgc2NyZWVuIGN1cnNvciB0byBzcGVlY2ggY3Vyc29yLgorCitWZXJ0aWNhbCBOYXZpZ2F0aW9uCis9PT09PT09PT09PT09PT09PT09CisKKyogYExOVVBgXworKiBgTE5ETmBfCisqIGBUT1BgXworKiBgQk9UYF8KKyogYFRPUF9MRUZUYF8KKyogYEJPVF9MRUZUYF8KKyogYFBSRElGTE5gXworKiBgTlhESUZMTmBfCisqIGBBVFRSVVBgXworKiBgQVRUUkROYF8KKyogYFBSUEdSUEhgXworKiBgTlhQR1JQSGBfCisqIGBQUlBST01QVGBfCisqIGBOWFBST01QVGBfCisqIGBXSU5VUGBfCisqIGBXSU5ETmBfCisqIGBQUklOREVOVGBfCisqIGBOWElOREVOVGBfCisqIGBQUkRJRkNIQVJgXworKiBgTlhESUZDSEFSYF8KKyogYEdPVE9MSU5FYF8KKworLi4gX0xOVVA6CisKKyoqTE5VUCoqIC0gR28gdXAgb25lIGxpbmUuCisKK1RoZSBmb2xsb3dpbmcgbW9kaWZpZXJzIG1heSBiZSBzcGVjaWZpZWQ6CisKKyogTW90aW9uOiByb3V0ZQorKiBWZXJ0aWNhbDogdG9sZWZ0CisKKy4uIF9MTkROOgorCisqKkxORE4qKiAtIEdvIGRvd24gb25lIGxpbmUuCisKK1RoZSBmb2xsb3dpbmcgbW9kaWZpZXJzIG1heSBiZSBzcGVjaWZpZWQ6CisKKyogTW90aW9uOiByb3V0ZQorKiBWZXJ0aWNhbDogdG9sZWZ0CisKKy4uIF9UT1A6CisKKyoqVE9QKiogLSBHbyB0byB0b3AgbGluZS4KKworVGhlIGZvbGxvd2luZyBtb2RpZmllcnMgbWF5IGJlIHNwZWNpZmllZDoKKworKiBNb3Rpb246IHJvdXRlCisqIFZlcnRpY2FsOiB0b2xlZnQKKworLi4gX0JPVDoKKworKipCT1QqKiAtIEdvIHRvIGJvdHRvbSBsaW5lLgorCitUaGUgZm9sbG93aW5nIG1vZGlmaWVycyBtYXkgYmUgc3BlY2lmaWVkOgorCisqIE1vdGlvbjogcm91dGUKKyogVmVydGljYWw6IHRvbGVmdAorCisuLiBfVE9QX0xFRlQ6CisKKyoqVE9QX0xFRlQqKiAtIEdvIHRvIGJlZ2lubmluZyBvZiB0b3AgbGluZS4KKworVGhlIGZvbGxvd2luZyBtb2RpZmllcnMgbWF5IGJlIHNwZWNpZmllZDoKKworKiBNb3Rpb246IHJvdXRlCisqIFZlcnRpY2FsOiB0b2xlZnQKKworLi4gX0JPVF9MRUZUOgorCisqKkJPVF9MRUZUKiogLSBHbyB0byBiZWdpbm5pbmcgb2YgYm90dG9tIGxpbmUuCisKK1RoZSBmb2xsb3dpbmcgbW9kaWZpZXJzIG1heSBiZSBzcGVjaWZpZWQ6CisKKyogTW90aW9uOiByb3V0ZQorKiBWZXJ0aWNhbDogdG9sZWZ0CisKKy4uIF9QUkRJRkxOOgorCisqKlBSRElGTE4qKiAtIEdvIHVwIHRvIG5lYXJlc3QgbGluZSB3aXRoIGRpZmZlcmVudCBjb250ZW50LgorCitUaGUgZm9sbG93aW5nIG1vZGlmaWVycyBtYXkgYmUgc3BlY2lmaWVkOgorCisqIE1vdGlvbjogcm91dGUKKyogVmVydGljYWw6IHRvbGVmdAorCisuLiBfTlhESUZMTjoKKworKipOWERJRkxOKiogLSBHbyBkb3duIHRvIG5lYXJlc3QgbGluZSB3aXRoIGRpZmZlcmVudCBjb250ZW50LgorCitUaGUgZm9sbG93aW5nIG1vZGlmaWVycyBtYXkgYmUgc3BlY2lmaWVkOgorCisqIE1vdGlvbjogcm91dGUKKyogVmVydGljYWw6IHRvbGVmdAorCisuLiBfQVRUUlVQOgorCisqKkFUVFJVUCoqIC0gR28gdXAgdG8gbmVhcmVzdCBsaW5lIHdpdGggZGlmZmVyZW50IGhpZ2hsaWdodGluZy4KKworVGhlIGZvbGxvd2luZyBtb2RpZmllcnMgbWF5IGJlIHNwZWNpZmllZDoKKworKiBNb3Rpb246IHJvdXRlCisqIFZlcnRpY2FsOiB0b2xlZnQKKworLi4gX0FUVFJETjoKKworKipBVFRSRE4qKiAtIEdvIGRvd24gdG8gbmVhcmVzdCBsaW5lIHdpdGggZGlmZmVyZW50IGhpZ2hsaWdodGluZy4KKworVGhlIGZvbGxvd2luZyBtb2RpZmllcnMgbWF5IGJlIHNwZWNpZmllZDoKKworKiBNb3Rpb246IHJvdXRlCisqIFZlcnRpY2FsOiB0b2xlZnQKKworLi4gX1BSUEdSUEg6CisKKyoqUFJQR1JQSCoqIC0gR28gdXAgdG8gZmlyc3QgbGluZSBvZiBwYXJhZ3JhcGguCisKK1RoZSBmb2xsb3dpbmcgbW9kaWZpZXJzIG1heSBiZSBzcGVjaWZpZWQ6CisKKyogTW90aW9uOiByb3V0ZQorKiBWZXJ0aWNhbDogdG9sZWZ0CisKKy4uIF9OWFBHUlBIOgorCisqKk5YUEdSUEgqKiAtIEdvIGRvd24gdG8gZmlyc3QgbGluZSBvZiBuZXh0IHBhcmFncmFwaC4KKworVGhlIGZvbGxvd2luZyBtb2RpZmllcnMgbWF5IGJlIHNwZWNpZmllZDoKKworKiBNb3Rpb246IHJvdXRlCisqIFZlcnRpY2FsOiB0b2xlZnQKKworLi4gX1BSUFJPTVBUOgorCisqKlBSUFJPTVBUKiogLSBHbyB1cCB0byBwcmV2aW91cyBjb21tYW5kIHByb21wdC4KKworVGhlIGZvbGxvd2luZyBtb2RpZmllcnMgbWF5IGJlIHNwZWNpZmllZDoKKworKiBNb3Rpb246IHJvdXRlCisqIFZlcnRpY2FsOiB0b2xlZnQKKworLi4gX05YUFJPTVBUOgorCisqKk5YUFJPTVBUKiogLSBHbyBkb3duIHRvIG5leHQgY29tbWFuZCBwcm9tcHQuCisKK1RoZSBmb2xsb3dpbmcgbW9kaWZpZXJzIG1heSBiZSBzcGVjaWZpZWQ6CisKKyogTW90aW9uOiByb3V0ZQorKiBWZXJ0aWNhbDogdG9sZWZ0CisKKy4uIF9XSU5VUDoKKworKipXSU5VUCoqIC0gR28gdXAgc2V2ZXJhbCBsaW5lcy4KKworVGhlIGZvbGxvd2luZyBtb2RpZmllcnMgbWF5IGJlIHNwZWNpZmllZDoKKworKiBNb3Rpb246IHJvdXRlCisqIFZlcnRpY2FsOiB0b2xlZnQKKworLi4gX1dJTkROOgorCisqKldJTkROKiogLSBHbyBkb3duIHNldmVyYWwgbGluZXMuCisKK1RoZSBmb2xsb3dpbmcgbW9kaWZpZXJzIG1heSBiZSBzcGVjaWZpZWQ6CisKKyogTW90aW9uOiByb3V0ZQorKiBWZXJ0aWNhbDogdG9sZWZ0CisKKy4uIF9QUklOREVOVDoKKworKipQUklOREVOVCoqIC0gR28gdXAgdG8gbmVhcmVzdCBsaW5lIHdpdGggbGVzcyBpbmRlbnQgdGhhbiBjaGFyYWN0ZXIuCisKK1RoZSBmb2xsb3dpbmcgbW9kaWZpZXJzIG1heSBiZSBzcGVjaWZpZWQ6CisKKyogYSBjb2x1bW4gbnVtYmVyCisqIE1vdGlvbjogcm91dGUKKyogVmVydGljYWw6IHRvbGVmdAorCisuLiBfTlhJTkRFTlQ6CisKKyoqTlhJTkRFTlQqKiAtIEdvIGRvd24gdG8gbmVhcmVzdCBsaW5lIHdpdGggbGVzcyBpbmRlbnQgdGhhbiBjaGFyYWN0ZXIuCisKK1RoZSBmb2xsb3dpbmcgbW9kaWZpZXJzIG1heSBiZSBzcGVjaWZpZWQ6CisKKyogYSBjb2x1bW4gbnVtYmVyCisqIE1vdGlvbjogcm91dGUKKyogVmVydGljYWw6IHRvbGVmdAorCisuLiBfUFJESUZDSEFSOgorCisqKlBSRElGQ0hBUioqIC0gR28gdXAgdG8gbmVhcmVzdCBsaW5lIHdpdGggZGlmZmVyZW50IGNoYXJhY3Rlci4KKworVGhlIGZvbGxvd2luZyBtb2RpZmllcnMgbWF5IGJlIHNwZWNpZmllZDoKKworKiBhIGNvbHVtbiBudW1iZXIKKyogTW90aW9uOiByb3V0ZQorKiBWZXJ0aWNhbDogdG9sZWZ0CisKKy4uIF9OWERJRkNIQVI6CisKKyoqTlhESUZDSEFSKiogLSBHbyBkb3duIHRvIG5lYXJlc3QgbGluZSB3aXRoIGRpZmZlcmVudCBjaGFyYWN0ZXIuCisKK1RoZSBmb2xsb3dpbmcgbW9kaWZpZXJzIG1heSBiZSBzcGVjaWZpZWQ6CisKKyogYSBjb2x1bW4gbnVtYmVyCisqIE1vdGlvbjogcm91dGUKKyogVmVydGljYWw6IHRvbGVmdAorCisuLiBfR09UT0xJTkU6CisKKyoqR09UT0xJTkUqKiAtIEdvIHRvIHNlbGVjdGVkIGxpbmUuCisKK1RoZSBmb2xsb3dpbmcgbW9kaWZpZXJzIG1heSBiZSBzcGVjaWZpZWQ6CisKKyogTW90aW9uOiByb3V0ZQorKiBSb3c6IHNjYWxlZAorKiBWZXJ0aWNhbDogdG9sZWZ0CisKK0hvcml6b250YWwgTmF2aWdhdGlvbgorPT09PT09PT09PT09PT09PT09PT09CisKKyogYEZXSU5MVGBfCisqIGBGV0lOUlRgXworKiBgRldJTkxUU0tJUGBfCisqIGBGV0lOUlRTS0lQYF8KKyogYFBSTkJXSU5gXworKiBgTlhOQldJTmBfCisqIGBMTkJFR2BfCisqIGBMTkVORGBfCisqIGBDSFJMVGBfCisqIGBDSFJSVGBfCisqIGBIV0lOTFRgXworKiBgSFdJTlJUYF8KKyogYFNFVExFRlRgXworCisuLiBfRldJTkxUOgorCisqKkZXSU5MVCoqIC0gR28gYmFja3dhcmQgb25lIGJyYWlsbGUgd2luZG93LgorCitUaGUgZm9sbG93aW5nIG1vZGlmaWVycyBtYXkgYmUgc3BlY2lmaWVkOgorCisqIE1vdGlvbjogcm91dGUKKworLi4gX0ZXSU5SVDoKKworKipGV0lOUlQqKiAtIEdvIGZvcndhcmQgb25lIGJyYWlsbGUgd2luZG93LgorCitUaGUgZm9sbG93aW5nIG1vZGlmaWVycyBtYXkgYmUgc3BlY2lmaWVkOgorCisqIE1vdGlvbjogcm91dGUKKworLi4gX0ZXSU5MVFNLSVA6CisKKyoqRldJTkxUU0tJUCoqIC0gR28gYmFja3dhcmQgc2tpcHBpbmcgYmxhbmsgYnJhaWxsZSB3aW5kb3dzLgorCitUaGUgZm9sbG93aW5nIG1vZGlmaWVycyBtYXkgYmUgc3BlY2lmaWVkOgorCisqIE1vdGlvbjogcm91dGUKKworLi4gX0ZXSU5SVFNLSVA6CisKKyoqRldJTlJUU0tJUCoqIC0gR28gZm9yd2FyZCBza2lwcGluZyBibGFuayBicmFpbGxlIHdpbmRvd3MuCisKK1RoZSBmb2xsb3dpbmcgbW9kaWZpZXJzIG1heSBiZSBzcGVjaWZpZWQ6CisKKyogTW90aW9uOiByb3V0ZQorCisuLiBfUFJOQldJTjoKKworKipQUk5CV0lOKiogLSBHbyBiYWNrd2FyZCB0byBuZWFyZXN0IG5vbi1ibGFuayBicmFpbGxlIHdpbmRvdy4KKworVGhlIGZvbGxvd2luZyBtb2RpZmllcnMgbWF5IGJlIHNwZWNpZmllZDoKKworKiBNb3Rpb246IHJvdXRlCisKKy4uIF9OWE5CV0lOOgorCisqKk5YTkJXSU4qKiAtIEdvIGZvcndhcmQgdG8gbmVhcmVzdCBub24tYmxhbmsgYnJhaWxsZSB3aW5kb3cuCisKK1RoZSBmb2xsb3dpbmcgbW9kaWZpZXJzIG1heSBiZSBzcGVjaWZpZWQ6CisKKyogTW90aW9uOiByb3V0ZQorCisuLiBfTE5CRUc6CisKKyoqTE5CRUcqKiAtIEdvIHRvIGJlZ2lubmluZyBvZiBsaW5lLgorCitUaGUgZm9sbG93aW5nIG1vZGlmaWVycyBtYXkgYmUgc3BlY2lmaWVkOgorCisqIE1vdGlvbjogcm91dGUKKworLi4gX0xORU5EOgorCisqKkxORU5EKiogLSBHbyB0byBlbmQgb2YgbGluZS4KKworVGhlIGZvbGxvd2luZyBtb2RpZmllcnMgbWF5IGJlIHNwZWNpZmllZDoKKworKiBNb3Rpb246IHJvdXRlCisKKy4uIF9DSFJMVDoKKworKipDSFJMVCoqIC0gR28gbGVmdCBvbmUgY2hhcmFjdGVyLgorCitUaGUgZm9sbG93aW5nIG1vZGlmaWVycyBtYXkgYmUgc3BlY2lmaWVkOgorCisqIE1vdGlvbjogcm91dGUKKworLi4gX0NIUlJUOgorCisqKkNIUlJUKiogLSBHbyByaWdodCBvbmUgY2hhcmFjdGVyLgorCitUaGUgZm9sbG93aW5nIG1vZGlmaWVycyBtYXkgYmUgc3BlY2lmaWVkOgorCisqIE1vdGlvbjogcm91dGUKKworLi4gX0hXSU5MVDoKKworKipIV0lOTFQqKiAtIEdvIGxlZnQgaGFsZiBhIGJyYWlsbGUgd2luZG93LgorCitUaGUgZm9sbG93aW5nIG1vZGlmaWVycyBtYXkgYmUgc3BlY2lmaWVkOgorCisqIE1vdGlvbjogcm91dGUKKworLi4gX0hXSU5SVDoKKworKipIV0lOUlQqKiAtIEdvIHJpZ2h0IGhhbGYgYSBicmFpbGxlIHdpbmRvdy4KKworVGhlIGZvbGxvd2luZyBtb2RpZmllcnMgbWF5IGJlIHNwZWNpZmllZDoKKworKiBNb3Rpb246IHJvdXRlCisKKy4uIF9TRVRMRUZUOgorCisqKlNFVExFRlQqKiAtIFBsYWNlIGxlZnQgZW5kIG9mIGJyYWlsbGUgd2luZG93IGF0IGNoYXJhY3Rlci4KKworVGhlIGZvbGxvd2luZyBtb2RpZmllcnMgbWF5IGJlIHNwZWNpZmllZDoKKworKiBhIGNvbHVtbiBudW1iZXIKKworV2luZG93IE5hdmlnYXRpb24KKz09PT09PT09PT09PT09PT09CisKKyogYEdVSV9USVRMRWBfCisqIGBHVUlfQlJMX0FDVElPTlNgXworKiBgR1VJX0hPTUVgXworKiBgR1VJX0JBQ0tgXworKiBgR1VJX0RFVl9TRVRUSU5HU2BfCisqIGBHVUlfREVWX09QVElPTlNgXworKiBgR1VJX0FQUF9MSVNUYF8KKyogYEdVSV9BUFBfTUVOVWBfCisqIGBHVUlfQVBQX0FMRVJUU2BfCisqIGBHVUlfQVJFQV9BQ1RWYF8KKyogYEdVSV9BUkVBX1BSRVZgXworKiBgR1VJX0FSRUFfTkVYVGBfCisqIGBHVUlfSVRFTV9GUlNUYF8KKyogYEdVSV9JVEVNX1BSRVZgXworKiBgR1VJX0lURU1fTkVYVGBfCisqIGBHVUlfSVRFTV9MQVNUYF8KKworLi4gX0dVSV9USVRMRToKKworKipHVUlfVElUTEUqKiAtIFNob3cgdGhlIHdpbmRvdyB0aXRsZS4KKworLi4gX0dVSV9CUkxfQUNUSU9OUzoKKworKipHVUlfQlJMX0FDVElPTlMqKiAtIE9wZW4gdGhlIGJyYWlsbGUgYWN0aW9ucyB3aW5kb3cuCisKKy4uIF9HVUlfSE9NRToKKworKipHVUlfSE9NRSoqIC0gR28gdG8gdGhlIGhvbWUgc2NyZWVuLgorCitUaGUgZm9sbG93aW5nIG1vZGlmaWVycyBtYXkgYmUgc3BlY2lmaWVkOgorCisqIE1vdGlvbjogcm91dGUKKworLi4gX0dVSV9CQUNLOgorCisqKkdVSV9CQUNLKiogLSBHbyBiYWNrIHRvIHRoZSBwcmV2aW91cyBzY3JlZW4uCisKK1RoZSBmb2xsb3dpbmcgbW9kaWZpZXJzIG1heSBiZSBzcGVjaWZpZWQ6CisKKyogTW90aW9uOiByb3V0ZQorCisuLiBfR1VJX0RFVl9TRVRUSU5HUzoKKworKipHVUlfREVWX1NFVFRJTkdTKiogLSBPcGVuIHRoZSBkZXZpY2Ugc2V0dGluZ3Mgd2luZG93LgorCisuLiBfR1VJX0RFVl9PUFRJT05TOgorCisqKkdVSV9ERVZfT1BUSU9OUyoqIC0gT3BlbiB0aGUgZGV2aWNlIG9wdGlvbnMgd2luZG93LgorCisuLiBfR1VJX0FQUF9MSVNUOgorCisqKkdVSV9BUFBfTElTVCoqIC0gT3BlbiB0aGUgYXBwbGljYXRpb24gbGlzdCB3aW5kb3cuCisKKy4uIF9HVUlfQVBQX01FTlU6CisKKyoqR1VJX0FQUF9NRU5VKiogLSBPcGVuIHRoZSBhcHBsaWNhdGlvbi1zcGVjaWZpYyBtZW51LgorCisuLiBfR1VJX0FQUF9BTEVSVFM6CisKKyoqR1VJX0FQUF9BTEVSVFMqKiAtIE9wZW4gdGhlIGFwcGxpY2F0aW9uIGFsZXJ0cyB3aW5kb3cuCisKKy4uIF9HVUlfQVJFQV9BQ1RWOgorCisqKkdVSV9BUkVBX0FDVFYqKiAtIFJldHVybiB0byB0aGUgYWN0aXZlIHNjcmVlbiBhcmVhLgorCisuLiBfR1VJX0FSRUFfUFJFVjoKKworKipHVUlfQVJFQV9QUkVWKiogLSBTd2l0Y2ggdG8gdGhlIHByZXZpb3VzIHNjcmVlbiBhcmVhLgorCisuLiBfR1VJX0FSRUFfTkVYVDoKKworKipHVUlfQVJFQV9ORVhUKiogLSBTd2l0Y2ggdG8gdGhlIG5leHQgc2NyZWVuIGFyZWEuCisKKy4uIF9HVUlfSVRFTV9GUlNUOgorCisqKkdVSV9JVEVNX0ZSU1QqKiAtIE1vdmUgdG8gdGhlIGZpcnN0IGl0ZW0gaW4gdGhlIHNjcmVlbiBhcmVhLgorCisuLiBfR1VJX0lURU1fUFJFVjoKKworKipHVUlfSVRFTV9QUkVWKiogLSBNb3ZlIHRvIHRoZSBwcmV2aW91cyBpdGVtIGluIHRoZSBzY3JlZW4gYXJlYS4KKworLi4gX0dVSV9JVEVNX05FWFQ6CisKKyoqR1VJX0lURU1fTkVYVCoqIC0gTW92ZSB0byB0aGUgbmV4dCBpdGVtIGluIHRoZSBzY3JlZW4gYXJlYS4KKworLi4gX0dVSV9JVEVNX0xBU1Q6CisKKyoqR1VJX0lURU1fTEFTVCoqIC0gTW92ZSB0byB0aGUgbGFzdCBpdGVtIGluIHRoZSBzY3JlZW4gYXJlYS4KKworQ2xpcGJvYXJkIEZ1bmN0aW9ucworPT09PT09PT09PT09PT09PT09PQorCisqIGBDTElQX05FV2BfCisqIGBDTElQX0FERGBfCisqIGBDT1BZX0xJTkVgXworKiBgQ09QWV9SRUNUYF8KKyogYENMSVBfQ09QWWBfCisqIGBDTElQX0FQUEVORGBfCisqIGBQQVNURWBfCisqIGBQQVNURV9ISVNUT1JZYF8KKyogYFBSU0VBUkNIYF8KKyogYE5YU0VBUkNIYF8KKyogYENMSVBfU0FWRWBfCisqIGBDTElQX1JFU1RPUkVgXworCisuLiBfQ0xJUF9ORVc6CisKKyoqQ0xJUF9ORVcqKiAtIFN0YXJ0IG5ldyBjbGlwYm9hcmQgYXQgY2hhcmFjdGVyLgorCitUaGUgZm9sbG93aW5nIG1vZGlmaWVycyBtYXkgYmUgc3BlY2lmaWVkOgorCisqIGEgY29sdW1uIG51bWJlcgorCisuLiBfQ0xJUF9BREQ6CisKKyoqQ0xJUF9BREQqKiAtIEFwcGVuZCB0byBjbGlwYm9hcmQgZnJvbSBjaGFyYWN0ZXIuCisKK1RoZSBmb2xsb3dpbmcgbW9kaWZpZXJzIG1heSBiZSBzcGVjaWZpZWQ6CisKKyogYSBjb2x1bW4gbnVtYmVyCisKKy4uIF9DT1BZX0xJTkU6CisKKyoqQ09QWV9MSU5FKiogLSBMaW5lYXIgY29weSB0byBjaGFyYWN0ZXIuCisKK1RoZSBmb2xsb3dpbmcgbW9kaWZpZXJzIG1heSBiZSBzcGVjaWZpZWQ6CisKKyogYSBjb2x1bW4gbnVtYmVyCisKKy4uIF9DT1BZX1JFQ1Q6CisKKyoqQ09QWV9SRUNUKiogLSBSZWN0YW5ndWxhciBjb3B5IHRvIGNoYXJhY3Rlci4KKworVGhlIGZvbGxvd2luZyBtb2RpZmllcnMgbWF5IGJlIHNwZWNpZmllZDoKKworKiBhIGNvbHVtbiBudW1iZXIKKworLi4gX0NMSVBfQ09QWToKKworKipDTElQX0NPUFkqKiAtIENvcHkgY2hhcmFjdGVycyB0byBjbGlwYm9hcmQuCisKKy4uIF9DTElQX0FQUEVORDoKKworKipDTElQX0FQUEVORCoqIC0gQXBwZW5kIGNoYXJhY3RlcnMgdG8gY2xpcGJvYXJkLgorCisuLiBfUEFTVEU6CisKKyoqUEFTVEUqKiAtIEluc2VydCBjbGlwYm9hcmQgdGV4dCBhZnRlciBzY3JlZW4gY3Vyc29yLgorCisuLiBfUEFTVEVfSElTVE9SWToKKworKipQQVNURV9ISVNUT1JZKiogLSBJbnNlcnQgY2xpcGJvYXJkIGhpc3RvcnkgZW50cnkgYWZ0ZXIgc2NyZWVuIGN1cnNvci4KKworVGhlIGZvbGxvd2luZyBtb2RpZmllcnMgbWF5IGJlIHNwZWNpZmllZDoKKworKiBhbiBvZmZzZXQKKworLi4gX1BSU0VBUkNIOgorCisqKlBSU0VBUkNIKiogLSBTZWFyY2ggYmFja3dhcmQgZm9yIGNsaXBib2FyZCB0ZXh0LgorCisuLiBfTlhTRUFSQ0g6CisKKyoqTlhTRUFSQ0gqKiAtIFNlYXJjaCBmb3J3YXJkIGZvciBjbGlwYm9hcmQgdGV4dC4KKworLi4gX0NMSVBfU0FWRToKKworKipDTElQX1NBVkUqKiAtIFNhdmUgY2xpcGJvYXJkIHRvIGRpc2suCisKKy4uIF9DTElQX1JFU1RPUkU6CisKKyoqQ0xJUF9SRVNUT1JFKiogLSBSZXN0b3JlIGNsaXBib2FyZCBmcm9tIGRpc2suCisKK1RleHQgU2VsZWN0aW9uIGFuZCB0aGUgSG9zdCBDbGlwYm9hcmQKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworKiBgVFhUU0VMX0NMRUFSYF8KKyogYFRYVFNFTF9TRVRgXworKiBgVFhUU0VMX1NUQVJUYF8KKyogYFRYVFNFTF9BTExgXworKiBgSE9TVF9DT1BZYF8KKyogYEhPU1RfQ1VUYF8KKyogYEhPU1RfUEFTVEVgXworCisuLiBfVFhUU0VMX0NMRUFSOgorCisqKlRYVFNFTF9DTEVBUioqIC0gQ2xlYXIgdGhlIHRleHQgc2VsZWN0aW9uLgorCisuLiBfVFhUU0VMX1NFVDoKKworKipUWFRTRUxfU0VUKiogLSBTZXQgdGV4dCBzZWxlY3Rpb24uCisKK1RoZSBmb2xsb3dpbmcgbW9kaWZpZXJzIG1heSBiZSBzcGVjaWZpZWQ6CisKKyogYW4gb2Zmc2V0CisKKy4uIF9UWFRTRUxfU1RBUlQ6CisKKyoqVFhUU0VMX1NUQVJUKiogLSBTdGFydCB0ZXh0IHNlbGVjdGlvbi4KKworVGhlIGZvbGxvd2luZyBtb2RpZmllcnMgbWF5IGJlIHNwZWNpZmllZDoKKworKiBhbiBvZmZzZXQKKworLi4gX1RYVFNFTF9BTEw6CisKKyoqVFhUU0VMX0FMTCoqIC0gU2VsZWN0IGFsbCBvZiB0aGUgdGV4dC4KKworLi4gX0hPU1RfQ09QWToKKworKipIT1NUX0NPUFkqKiAtIENvcHkgc2VsZWN0ZWQgdGV4dCB0byBob3N0IGNsaXBib2FyZC4KKworLi4gX0hPU1RfQ1VUOgorCisqKkhPU1RfQ1VUKiogLSBDdXQgc2VsZWN0ZWQgdGV4dCB0byBob3N0IGNsaXBib2FyZC4KKworLi4gX0hPU1RfUEFTVEU6CisKKyoqSE9TVF9QQVNURSoqIC0gSW5zZXJ0IGhvc3QgY2xpcGJvYXJkIHRleHQgYWZ0ZXIgc2NyZWVuIGN1cnNvci4KKworQ29uZmlndXJhdGlvbiBGdW5jdGlvbnMKKz09PT09PT09PT09PT09PT09PT09PT09CisKKyogYFRPVUNIX05BVmBfCisqIGBBVVRPUkVQRUFUYF8KKyogYFNJWERPVFNgXworKiBgQ09OVFJBQ1RFRGBfCisqIGBDT01QQlJMNmBfCisqIGBTS1BJRExOU2BfCisqIGBTS1BCTE5LV0lOU2BfCisqIGBTTElERVdJTmBfCisqIGBDU1JUUktgXworKiBgQ1NSU0laRWBfCisqIGBDU1JWSVNgXworKiBgQ1NSSElERWBfCisqIGBDU1JCTElOS2BfCisqIGBBVFRSVklTYF8KKyogYEFUVFJCTElOS2BfCisqIGBDQVBCTElOS2BfCisqIGBUVU5FU2BfCisqIGBTRVRfVEVYVF9UQUJMRWBfCisqIGBTRVRfQVRUUklCVVRFU19UQUJMRWBfCisqIGBTRVRfQ09OVFJBQ1RJT05fVEFCTEVgXworKiBgU0VUX0tFWUJPQVJEX1RBQkxFYF8KKyogYFNFVF9MQU5HVUFHRV9QUk9GSUxFYF8KKworLi4gX1RPVUNIX05BVjoKKworKipUT1VDSF9OQVYqKiAtIFNldCB0b3VjaCBuYXZpZ2F0aW9uIG9uL29mZi4KKworVGhlIGZvbGxvd2luZyBtb2RpZmllcnMgbWF5IGJlIHNwZWNpZmllZDoKKworKiBUb2dnbGU6IG9uLCBvZmYKKworLi4gX0FVVE9SRVBFQVQ6CisKKyoqQVVUT1JFUEVBVCoqIC0gU2V0IGF1dG9yZXBlYXQgb24vb2ZmLgorCitUaGUgZm9sbG93aW5nIG1vZGlmaWVycyBtYXkgYmUgc3BlY2lmaWVkOgorCisqIFRvZ2dsZTogb24sIG9mZgorCisuLiBfU0lYRE9UUzoKKworKipTSVhET1RTKiogLSBTZXQgdGV4dCBzdHlsZSA2LWRvdC84LWRvdC4KKworVGhlIGZvbGxvd2luZyBtb2RpZmllcnMgbWF5IGJlIHNwZWNpZmllZDoKKworKiBUb2dnbGU6IG9uLCBvZmYKKworLi4gX0NPTlRSQUNURUQ6CisKKyoqQ09OVFJBQ1RFRCoqIC0gU2V0IGNvbnRyYWN0ZWQvY29tcHV0ZXIgYnJhaWxsZS4KKworVGhlIGZvbGxvd2luZyBtb2RpZmllcnMgbWF5IGJlIHNwZWNpZmllZDoKKworKiBUb2dnbGU6IG9uLCBvZmYKKworLi4gX0NPTVBCUkw2OgorCisqKkNPTVBCUkw2KiogLSBTZXQgc2l4L2VpZ2h0IGRvdCBjb21wdXRlciBicmFpbGxlLgorCitUaGUgZm9sbG93aW5nIG1vZGlmaWVycyBtYXkgYmUgc3BlY2lmaWVkOgorCisqIFRvZ2dsZTogb24sIG9mZgorCisuLiBfU0tQSURMTlM6CisKKyoqU0tQSURMTlMqKiAtIFNldCBza2lwcGluZyBvZiBsaW5lcyB3aXRoIGlkZW50aWNhbCBjb250ZW50IG9uL29mZi4KKworVGhlIGZvbGxvd2luZyBtb2RpZmllcnMgbWF5IGJlIHNwZWNpZmllZDoKKworKiBUb2dnbGU6IG9uLCBvZmYKKworLi4gX1NLUEJMTktXSU5TOgorCisqKlNLUEJMTktXSU5TKiogLSBTZXQgc2tpcHBpbmcgb2YgYmxhbmsgYnJhaWxsZSB3aW5kb3dzIG9uL29mZi4KKworVGhlIGZvbGxvd2luZyBtb2RpZmllcnMgbWF5IGJlIHNwZWNpZmllZDoKKworKiBUb2dnbGU6IG9uLCBvZmYKKworLi4gX1NMSURFV0lOOgorCisqKlNMSURFV0lOKiogLSBTZXQgc2xpZGluZyBicmFpbGxlIHdpbmRvdyBvbi9vZmYuCisKK1RoZSBmb2xsb3dpbmcgbW9kaWZpZXJzIG1heSBiZSBzcGVjaWZpZWQ6CisKKyogVG9nZ2xlOiBvbiwgb2ZmCisKKy4uIF9DU1JUUks6CisKKyoqQ1NSVFJLKiogLSBTZXQgdHJhY2sgc2NyZWVuIGN1cnNvciBvbi9vZmYuCisKK1RoZSBmb2xsb3dpbmcgbW9kaWZpZXJzIG1heSBiZSBzcGVjaWZpZWQ6CisKKyogVG9nZ2xlOiBvbiwgb2ZmCisKKy4uIF9DU1JTSVpFOgorCisqKkNTUlNJWkUqKiAtIFNldCBzY3JlZW4gY3Vyc29yIHN0eWxlIGJsb2NrL3VuZGVybGluZS4KKworVGhlIGZvbGxvd2luZyBtb2RpZmllcnMgbWF5IGJlIHNwZWNpZmllZDoKKworKiBUb2dnbGU6IG9uLCBvZmYKKworLi4gX0NTUlZJUzoKKworKipDU1JWSVMqKiAtIFNldCBzY3JlZW4gY3Vyc29yIHZpc2liaWxpdHkgb24vb2ZmLgorCitUaGUgZm9sbG93aW5nIG1vZGlmaWVycyBtYXkgYmUgc3BlY2lmaWVkOgorCisqIFRvZ2dsZTogb24sIG9mZgorCisuLiBfQ1NSSElERToKKworKipDU1JISURFKiogLSBTZXQgaGlkZGVuIHNjcmVlbiBjdXJzb3Igb24vb2ZmLgorCitUaGUgZm9sbG93aW5nIG1vZGlmaWVycyBtYXkgYmUgc3BlY2lmaWVkOgorCisqIFRvZ2dsZTogb24sIG9mZgorCisuLiBfQ1NSQkxJTks6CisKKyoqQ1NSQkxJTksqKiAtIFNldCBzY3JlZW4gY3Vyc29yIGJsaW5raW5nIG9uL29mZi4KKworVGhlIGZvbGxvd2luZyBtb2RpZmllcnMgbWF5IGJlIHNwZWNpZmllZDoKKworKiBUb2dnbGU6IG9uLCBvZmYKKworLi4gX0FUVFJWSVM6CisKKyoqQVRUUlZJUyoqIC0gU2V0IGF0dHJpYnV0ZSB1bmRlcmxpbmluZyBvbi9vZmYuCisKK1RoZSBmb2xsb3dpbmcgbW9kaWZpZXJzIG1heSBiZSBzcGVjaWZpZWQ6CisKKyogVG9nZ2xlOiBvbiwgb2ZmCisKKy4uIF9BVFRSQkxJTks6CisKKyoqQVRUUkJMSU5LKiogLSBTZXQgYXR0cmlidXRlIGJsaW5raW5nIG9uL29mZi4KKworVGhlIGZvbGxvd2luZyBtb2RpZmllcnMgbWF5IGJlIHNwZWNpZmllZDoKKworKiBUb2dnbGU6IG9uLCBvZmYKKworLi4gX0NBUEJMSU5LOgorCisqKkNBUEJMSU5LKiogLSBTZXQgY2FwaXRhbCBsZXR0ZXIgYmxpbmtpbmcgb24vb2ZmLgorCitUaGUgZm9sbG93aW5nIG1vZGlmaWVycyBtYXkgYmUgc3BlY2lmaWVkOgorCisqIFRvZ2dsZTogb24sIG9mZgorCisuLiBfVFVORVM6CisKKyoqVFVORVMqKiAtIFNldCBhbGVydCB0dW5lcyBvbi9vZmYuCisKK1RoZSBmb2xsb3dpbmcgbW9kaWZpZXJzIG1heSBiZSBzcGVjaWZpZWQ6CisKKyogVG9nZ2xlOiBvbiwgb2ZmCisKKy4uIF9TRVRfVEVYVF9UQUJMRToKKworKipTRVRfVEVYVF9UQUJMRSoqIC0gU2V0IHRleHQgdGFibGUuCisKK1RoZSBmb2xsb3dpbmcgbW9kaWZpZXJzIG1heSBiZSBzcGVjaWZpZWQ6CisKKyogYW4gb2Zmc2V0CisKKy4uIF9TRVRfQVRUUklCVVRFU19UQUJMRToKKworKipTRVRfQVRUUklCVVRFU19UQUJMRSoqIC0gU2V0IGF0dHJpYnV0ZXMgdGFibGUuCisKK1RoZSBmb2xsb3dpbmcgbW9kaWZpZXJzIG1heSBiZSBzcGVjaWZpZWQ6CisKKyogYW4gb2Zmc2V0CisKKy4uIF9TRVRfQ09OVFJBQ1RJT05fVEFCTEU6CisKKyoqU0VUX0NPTlRSQUNUSU9OX1RBQkxFKiogLSBTZXQgY29udHJhY3Rpb24gdGFibGUuCisKK1RoZSBmb2xsb3dpbmcgbW9kaWZpZXJzIG1heSBiZSBzcGVjaWZpZWQ6CisKKyogYW4gb2Zmc2V0CisKKy4uIF9TRVRfS0VZQk9BUkRfVEFCTEU6CisKKyoqU0VUX0tFWUJPQVJEX1RBQkxFKiogLSBTZXQga2V5Ym9hcmQgdGFibGUuCisKK1RoZSBmb2xsb3dpbmcgbW9kaWZpZXJzIG1heSBiZSBzcGVjaWZpZWQ6CisKKyogYW4gb2Zmc2V0CisKKy4uIF9TRVRfTEFOR1VBR0VfUFJPRklMRToKKworKipTRVRfTEFOR1VBR0VfUFJPRklMRSoqIC0gU2V0IGxhbmd1YWdlIHByb2ZpbGUuCisKK1RoZSBmb2xsb3dpbmcgbW9kaWZpZXJzIG1heSBiZSBzcGVjaWZpZWQ6CisKKyogYW4gb2Zmc2V0CisKK01lbnUgT3BlcmF0aW9ucworPT09PT09PT09PT09PT09CisKKyogYE1FTlVfUFJFVl9JVEVNYF8KKyogYE1FTlVfTkVYVF9JVEVNYF8KKyogYE1FTlVfRklSU1RfSVRFTWBfCisqIGBNRU5VX0xBU1RfSVRFTWBfCisqIGBNRU5VX1BSRVZfU0VUVElOR2BfCisqIGBNRU5VX05FWFRfU0VUVElOR2BfCisqIGBNRU5VX1BSRVZfTEVWRUxgXworKiBgUFJFRlNBVkVgXworKiBgUFJFRkxPQURgXworKiBgUFJFRlJFU0VUYF8KKworLi4gX01FTlVfUFJFVl9JVEVNOgorCisqKk1FTlVfUFJFVl9JVEVNKiogLSBHbyB1cCB0byBwcmV2aW91cyBpdGVtLgorCitUaGUgZm9sbG93aW5nIG1vZGlmaWVycyBtYXkgYmUgc3BlY2lmaWVkOgorCisqIE1vdGlvbjogcm91dGUKKyogVmVydGljYWw6IHRvbGVmdAorCisuLiBfTUVOVV9ORVhUX0lURU06CisKKyoqTUVOVV9ORVhUX0lURU0qKiAtIEdvIGRvd24gdG8gbmV4dCBpdGVtLgorCitUaGUgZm9sbG93aW5nIG1vZGlmaWVycyBtYXkgYmUgc3BlY2lmaWVkOgorCisqIE1vdGlvbjogcm91dGUKKyogVmVydGljYWw6IHRvbGVmdAorCisuLiBfTUVOVV9GSVJTVF9JVEVNOgorCisqKk1FTlVfRklSU1RfSVRFTSoqIC0gR28gdXAgdG8gZmlyc3QgaXRlbS4KKworVGhlIGZvbGxvd2luZyBtb2RpZmllcnMgbWF5IGJlIHNwZWNpZmllZDoKKworKiBNb3Rpb246IHJvdXRlCisqIFZlcnRpY2FsOiB0b2xlZnQKKworLi4gX01FTlVfTEFTVF9JVEVNOgorCisqKk1FTlVfTEFTVF9JVEVNKiogLSBHbyBkb3duIHRvIGxhc3QgaXRlbS4KKworVGhlIGZvbGxvd2luZyBtb2RpZmllcnMgbWF5IGJlIHNwZWNpZmllZDoKKworKiBNb3Rpb246IHJvdXRlCisqIFZlcnRpY2FsOiB0b2xlZnQKKworLi4gX01FTlVfUFJFVl9TRVRUSU5HOgorCisqKk1FTlVfUFJFVl9TRVRUSU5HKiogLSBTZWxlY3QgcHJldmlvdXMgY2hvaWNlLgorCisuLiBfTUVOVV9ORVhUX1NFVFRJTkc6CisKKyoqTUVOVV9ORVhUX1NFVFRJTkcqKiAtIFNlbGVjdCBuZXh0IGNob2ljZS4KKworLi4gX01FTlVfUFJFVl9MRVZFTDoKKworKipNRU5VX1BSRVZfTEVWRUwqKiAtIEdvIHRvIHByZXZpb3VzIG1lbnUgbGV2ZWwuCisKK1RoZSBmb2xsb3dpbmcgbW9kaWZpZXJzIG1heSBiZSBzcGVjaWZpZWQ6CisKKyogTW90aW9uOiByb3V0ZQorCisuLiBfUFJFRlNBVkU6CisKKyoqUFJFRlNBVkUqKiAtIFNhdmUgcHJlZmVyZW5jZXMgdG8gZGlzay4KKworLi4gX1BSRUZMT0FEOgorCisqKlBSRUZMT0FEKiogLSBSZXN0b3JlIHByZWZlcmVuY2VzIGZyb20gZGlzay4KKworLi4gX1BSRUZSRVNFVDoKKworKipQUkVGUkVTRVQqKiAtIFJlc2V0IHByZWZlcmVuY2VzIHRvIGRlZmF1bHRzLgorCitTcGVlY2ggRnVuY3Rpb25zCis9PT09PT09PT09PT09PT09CisKKyogYE1VVEVgXworKiBgU0FZX0xJTkVgXworKiBgU0FZX0FMTGBfCisqIGBTQVlfQUJPVkVgXworKiBgU0FZX0JFTE9XYF8KKyogYFNQS0hPTUVgXworKiBgU0FZX1NPRlRFUmBfCisqIGBTQVlfTE9VREVSYF8KKyogYFNBWV9TTE9XRVJgXworKiBgU0FZX0ZBU1RFUmBfCisqIGBTQVlfTE9XRVJgXworKiBgU0FZX0hJR0hFUmBfCisqIGBBVVRPU1BFQUtgXworKiBgQVNQS19TRUxfTElORWBfCisqIGBBU1BLX1NFTF9DSEFSYF8KKyogYEFTUEtfSU5TX0NIQVJTYF8KKyogYEFTUEtfREVMX0NIQVJTYF8KKyogYEFTUEtfUkVQX0NIQVJTYF8KKyogYEFTUEtfQ01QX1dPUkRTYF8KKyogYEFTUEtfSU5ERU5UYF8KKworLi4gX01VVEU6CisKKyoqTVVURSoqIC0gU3RvcCBzcGVha2luZy4KKworLi4gX1NBWV9MSU5FOgorCisqKlNBWV9MSU5FKiogLSBTcGVhayBjdXJyZW50IGxpbmUuCisKKy4uIF9TQVlfQUxMOgorCisqKlNBWV9BTEwqKiAtIFNwZWFrIGZyb20gdG9wIG9mIHNjcmVlbiB0aHJvdWdoIGJvdHRvbSBvZiBzY3JlZW4uCisKKy4uIF9TQVlfQUJPVkU6CisKKyoqU0FZX0FCT1ZFKiogLSBTcGVhayBmcm9tIHRvcCBvZiBzY3JlZW4gdGhyb3VnaCBjdXJyZW50IGxpbmUuCisKKy4uIF9TQVlfQkVMT1c6CisKKyoqU0FZX0JFTE9XKiogLSBTcGVhayBmcm9tIGN1cnJlbnQgbGluZSB0aHJvdWdoIGJvdHRvbSBvZiBzY3JlZW4uCisKKy4uIF9TUEtIT01FOgorCisqKlNQS0hPTUUqKiAtIEdvIHRvIGN1cnJlbnQgc3BlYWtpbmcgcG9zaXRpb24uCisKK1RoZSBmb2xsb3dpbmcgbW9kaWZpZXJzIG1heSBiZSBzcGVjaWZpZWQ6CisKKyogTW90aW9uOiByb3V0ZQorCisuLiBfU0FZX1NPRlRFUjoKKworKipTQVlfU09GVEVSKiogLSBEZWNyZWFzZSBzcGVha2luZyB2b2x1bWUuCisKKy4uIF9TQVlfTE9VREVSOgorCisqKlNBWV9MT1VERVIqKiAtIEluY3JlYXNlIHNwZWFraW5nIHZvbHVtZS4KKworLi4gX1NBWV9TTE9XRVI6CisKKyoqU0FZX1NMT1dFUioqIC0gRGVjcmVhc2Ugc3BlYWtpbmcgcmF0ZS4KKworLi4gX1NBWV9GQVNURVI6CisKKyoqU0FZX0ZBU1RFUioqIC0gSW5jcmVhc2Ugc3BlYWtpbmcgcmF0ZS4KKworLi4gX1NBWV9MT1dFUjoKKworKipTQVlfTE9XRVIqKiAtIERlY3JlYXNlIHNwZWFraW5nIHBpdGNoLgorCisuLiBfU0FZX0hJR0hFUjoKKworKipTQVlfSElHSEVSKiogLSBJbmNyZWFzZSBzcGVha2luZyBwaXRjaC4KKworLi4gX0FVVE9TUEVBSzoKKworKipBVVRPU1BFQUsqKiAtIFNldCBhdXRvc3BlYWsgb24vb2ZmLgorCitUaGUgZm9sbG93aW5nIG1vZGlmaWVycyBtYXkgYmUgc3BlY2lmaWVkOgorCisqIFRvZ2dsZTogb24sIG9mZgorCisuLiBfQVNQS19TRUxfTElORToKKworKipBU1BLX1NFTF9MSU5FKiogLSBTZXQgYXV0b3NwZWFrIHNlbGVjdGVkIGxpbmUgb24vb2ZmLgorCitUaGUgZm9sbG93aW5nIG1vZGlmaWVycyBtYXkgYmUgc3BlY2lmaWVkOgorCisqIFRvZ2dsZTogb24sIG9mZgorCisuLiBfQVNQS19TRUxfQ0hBUjoKKworKipBU1BLX1NFTF9DSEFSKiogLSBTZXQgYXV0b3NwZWFrIHNlbGVjdGVkIGNoYXJhY3RlciBvbi9vZmYuCisKK1RoZSBmb2xsb3dpbmcgbW9kaWZpZXJzIG1heSBiZSBzcGVjaWZpZWQ6CisKKyogVG9nZ2xlOiBvbiwgb2ZmCisKKy4uIF9BU1BLX0lOU19DSEFSUzoKKworKipBU1BLX0lOU19DSEFSUyoqIC0gU2V0IGF1dG9zcGVhayBpbnNlcnRlZCBjaGFyYWN0ZXJzIG9uL29mZi4KKworVGhlIGZvbGxvd2luZyBtb2RpZmllcnMgbWF5IGJlIHNwZWNpZmllZDoKKworKiBUb2dnbGU6IG9uLCBvZmYKKworLi4gX0FTUEtfREVMX0NIQVJTOgorCisqKkFTUEtfREVMX0NIQVJTKiogLSBTZXQgYXV0b3NwZWFrIGRlbGV0ZWQgY2hhcmFjdGVycyBvbi9vZmYuCisKK1RoZSBmb2xsb3dpbmcgbW9kaWZpZXJzIG1heSBiZSBzcGVjaWZpZWQ6CisKKyogVG9nZ2xlOiBvbiwgb2ZmCisKKy4uIF9BU1BLX1JFUF9DSEFSUzoKKworKipBU1BLX1JFUF9DSEFSUyoqIC0gU2V0IGF1dG9zcGVhayByZXBsYWNlZCBjaGFyYWN0ZXJzIG9uL29mZi4KKworVGhlIGZvbGxvd2luZyBtb2RpZmllcnMgbWF5IGJlIHNwZWNpZmllZDoKKworKiBUb2dnbGU6IG9uLCBvZmYKKworLi4gX0FTUEtfQ01QX1dPUkRTOgorCisqKkFTUEtfQ01QX1dPUkRTKiogLSBTZXQgYXV0b3NwZWFrIGNvbXBsZXRlZCB3b3JkcyBvbi9vZmYuCisKK1RoZSBmb2xsb3dpbmcgbW9kaWZpZXJzIG1heSBiZSBzcGVjaWZpZWQ6CisKKyogVG9nZ2xlOiBvbiwgb2ZmCisKKy4uIF9BU1BLX0lOREVOVDoKKworKipBU1BLX0lOREVOVCoqIC0gU2V0IGF1dG9zcGVhayBpbmRlbnQgb2YgY3VycmVudCBsaW5lIG9uL29mZi4KKworVGhlIGZvbGxvd2luZyBtb2RpZmllcnMgbWF5IGJlIHNwZWNpZmllZDoKKworKiBUb2dnbGU6IG9uLCBvZmYKKworU3BlZWNoIE5hdmlnYXRpb24KKz09PT09PT09PT09PT09PT09CisKKyogYFJPVVRFX1NQRUVDSGBfCisqIGBTUEVBS19DVVJSX0NIQVJgXworKiBgREVTQ19DVVJSX0NIQVJgXworKiBgU1BFQUtfUFJFVl9DSEFSYF8KKyogYFNQRUFLX05FWFRfQ0hBUmBfCisqIGBTUEVBS19GUlNUX0NIQVJgXworKiBgU1BFQUtfTEFTVF9DSEFSYF8KKyogYFNQRUFLX0NVUlJfV09SRGBfCisqIGBTUEVMTF9DVVJSX1dPUkRgXworKiBgU1BFQUtfUFJFVl9XT1JEYF8KKyogYFNQRUFLX05FWFRfV09SRGBfCisqIGBTUEVBS19DVVJSX0xJTkVgXworKiBgU1BFQUtfUFJFVl9MSU5FYF8KKyogYFNQRUFLX05FWFRfTElORWBfCisqIGBTUEVBS19GUlNUX0xJTkVgXworKiBgU1BFQUtfTEFTVF9MSU5FYF8KKyogYFNQRUFLX0lOREVOVGBfCisqIGBTUEVBS19DVVJSX0xPQ05gXworKiBgU0hPV19DVVJSX0xPQ05gXworCisuLiBfUk9VVEVfU1BFRUNIOgorCisqKlJPVVRFX1NQRUVDSCoqIC0gQnJpbmcgc3BlZWNoIGN1cnNvciB0byBjaGFyYWN0ZXIuCisKK1RoZSBmb2xsb3dpbmcgbW9kaWZpZXJzIG1heSBiZSBzcGVjaWZpZWQ6CisKKyogYSBjb2x1bW4gbnVtYmVyCisKKy4uIF9TUEVBS19DVVJSX0NIQVI6CisKKyoqU1BFQUtfQ1VSUl9DSEFSKiogLSBTcGVhayBjdXJyZW50IGNoYXJhY3Rlci4KKworLi4gX0RFU0NfQ1VSUl9DSEFSOgorCisqKkRFU0NfQ1VSUl9DSEFSKiogLSBEZXNjcmliZSBjdXJyZW50IGNoYXJhY3Rlci4KKworLi4gX1NQRUFLX1BSRVZfQ0hBUjoKKworKipTUEVBS19QUkVWX0NIQVIqKiAtIEdvIHRvIGFuZCBzcGVhayBwcmV2aW91cyBjaGFyYWN0ZXIuCisKK1RoZSBmb2xsb3dpbmcgbW9kaWZpZXJzIG1heSBiZSBzcGVjaWZpZWQ6CisKKyogTW90aW9uOiByb3V0ZQorCisuLiBfU1BFQUtfTkVYVF9DSEFSOgorCisqKlNQRUFLX05FWFRfQ0hBUioqIC0gR28gdG8gYW5kIHNwZWFrIG5leHQgY2hhcmFjdGVyLgorCitUaGUgZm9sbG93aW5nIG1vZGlmaWVycyBtYXkgYmUgc3BlY2lmaWVkOgorCisqIE1vdGlvbjogcm91dGUKKworLi4gX1NQRUFLX0ZSU1RfQ0hBUjoKKworKipTUEVBS19GUlNUX0NIQVIqKiAtIEdvIHRvIGFuZCBzcGVhayBmaXJzdCBub24tYmxhbmsgY2hhcmFjdGVyIG9uIGxpbmUuCisKK1RoZSBmb2xsb3dpbmcgbW9kaWZpZXJzIG1heSBiZSBzcGVjaWZpZWQ6CisKKyogTW90aW9uOiByb3V0ZQorCisuLiBfU1BFQUtfTEFTVF9DSEFSOgorCisqKlNQRUFLX0xBU1RfQ0hBUioqIC0gR28gdG8gYW5kIHNwZWFrIGxhc3Qgbm9uLWJsYW5rIGNoYXJhY3RlciBvbiBsaW5lLgorCitUaGUgZm9sbG93aW5nIG1vZGlmaWVycyBtYXkgYmUgc3BlY2lmaWVkOgorCisqIE1vdGlvbjogcm91dGUKKworLi4gX1NQRUFLX0NVUlJfV09SRDoKKworKipTUEVBS19DVVJSX1dPUkQqKiAtIFNwZWFrIGN1cnJlbnQgd29yZC4KKworLi4gX1NQRUxMX0NVUlJfV09SRDoKKworKipTUEVMTF9DVVJSX1dPUkQqKiAtIFNwZWxsIGN1cnJlbnQgd29yZC4KKworLi4gX1NQRUFLX1BSRVZfV09SRDoKKworKipTUEVBS19QUkVWX1dPUkQqKiAtIEdvIHRvIGFuZCBzcGVhayBwcmV2aW91cyB3b3JkLgorCitUaGUgZm9sbG93aW5nIG1vZGlmaWVycyBtYXkgYmUgc3BlY2lmaWVkOgorCisqIE1vdGlvbjogcm91dGUKKworLi4gX1NQRUFLX05FWFRfV09SRDoKKworKipTUEVBS19ORVhUX1dPUkQqKiAtIEdvIHRvIGFuZCBzcGVhayBuZXh0IHdvcmQuCisKK1RoZSBmb2xsb3dpbmcgbW9kaWZpZXJzIG1heSBiZSBzcGVjaWZpZWQ6CisKKyogTW90aW9uOiByb3V0ZQorCisuLiBfU1BFQUtfQ1VSUl9MSU5FOgorCisqKlNQRUFLX0NVUlJfTElORSoqIC0gU3BlYWsgY3VycmVudCBsaW5lLgorCisuLiBfU1BFQUtfUFJFVl9MSU5FOgorCisqKlNQRUFLX1BSRVZfTElORSoqIC0gR28gdG8gYW5kIHNwZWFrIHByZXZpb3VzIGxpbmUuCisKK1RoZSBmb2xsb3dpbmcgbW9kaWZpZXJzIG1heSBiZSBzcGVjaWZpZWQ6CisKKyogTW90aW9uOiByb3V0ZQorCisuLiBfU1BFQUtfTkVYVF9MSU5FOgorCisqKlNQRUFLX05FWFRfTElORSoqIC0gR28gdG8gYW5kIHNwZWFrIG5leHQgbGluZS4KKworVGhlIGZvbGxvd2luZyBtb2RpZmllcnMgbWF5IGJlIHNwZWNpZmllZDoKKworKiBNb3Rpb246IHJvdXRlCisKKy4uIF9TUEVBS19GUlNUX0xJTkU6CisKKyoqU1BFQUtfRlJTVF9MSU5FKiogLSBHbyB0byBhbmQgc3BlYWsgZmlyc3Qgbm9uLWJsYW5rIGxpbmUgb24gc2NyZWVuLgorCitUaGUgZm9sbG93aW5nIG1vZGlmaWVycyBtYXkgYmUgc3BlY2lmaWVkOgorCisqIE1vdGlvbjogcm91dGUKKworLi4gX1NQRUFLX0xBU1RfTElORToKKworKipTUEVBS19MQVNUX0xJTkUqKiAtIEdvIHRvIGFuZCBzcGVhayBsYXN0IG5vbi1ibGFuayBsaW5lIG9uIHNjcmVlbi4KKworVGhlIGZvbGxvd2luZyBtb2RpZmllcnMgbWF5IGJlIHNwZWNpZmllZDoKKworKiBNb3Rpb246IHJvdXRlCisKKy4uIF9TUEVBS19JTkRFTlQ6CisKKyoqU1BFQUtfSU5ERU5UKiogLSBTcGVhayBpbmRlbnQgb2YgY3VycmVudCBsaW5lLgorCisuLiBfU1BFQUtfQ1VSUl9MT0NOOgorCisqKlNQRUFLX0NVUlJfTE9DTioqIC0gU3BlYWsgc3BlZWNoIGN1cnNvciBsb2NhdGlvbi4KKworLi4gX1NIT1dfQ1VSUl9MT0NOOgorCisqKlNIT1dfQ1VSUl9MT0NOKiogLSBTZXQgc3BlZWNoIGN1cnNvciB2aXNpYmlsaXR5IG9uL29mZi4KKworVGhlIGZvbGxvd2luZyBtb2RpZmllcnMgbWF5IGJlIHNwZWNpZmllZDoKKworKiBUb2dnbGU6IG9uLCBvZmYKKworS2V5Ym9hcmQgSW5wdXQKKz09PT09PT09PT09PT09CisKKyogYFBBU1NET1RTYF8KKyogYFBBU1NDSEFSYF8KKyogYEtFWV9CQUNLU1BBQ0VgXworKiBgS0VZX0VOVEVSYF8KKyogYEtFWV9UQUJgXworKiBgS0VZX0NVUlNPUl9MRUZUYF8KKyogYEtFWV9DVVJTT1JfUklHSFRgXworKiBgS0VZX0NVUlNPUl9VUGBfCisqIGBLRVlfQ1VSU09SX0RPV05gXworKiBgS0VZX1BBR0VfVVBgXworKiBgS0VZX1BBR0VfRE9XTmBfCisqIGBLRVlfSE9NRWBfCisqIGBLRVlfRU5EYF8KKyogYEtFWV9JTlNFUlRgXworKiBgS0VZX0RFTEVURWBfCisqIGBVTlNUSUNLYF8KKyogYFVQUEVSYF8KKyogYFNISUZUYF8KKyogYENPTlRST0xgXworKiBgTUVUQWBfCisqIGBBTFRHUmBfCisqIGBHVUlgXworKiBgS0VZX0VTQ0FQRWBfCisqIGBLRVlfRlVOQ1RJT05gXworKiBgU1dJVENIVlRgXworKiBgU1dJVENIVlRfUFJFVmBfCisqIGBTV0lUQ0hWVF9ORVhUYF8KKyogYFNFTEVDVFZUYF8KKyogYFNFTEVDVFZUX1BSRVZgXworKiBgU0VMRUNUVlRfTkVYVGBfCisqIGBCUkxLQkRgXworKiBgQlJMVUNET1RTYF8KKworLi4gX1BBU1NET1RTOgorCisqKlBBU1NET1RTKiogLSBUeXBlIGJyYWlsbGUgZG90cy4KKworVGhlIGZvbGxvd2luZyBtb2RpZmllcnMgbWF5IGJlIHNwZWNpZmllZDoKKworKiBJbnB1dDogc2hpZnQsIGNvbnRyb2wsIG1ldGEsIGFsdGdyLCBndWkKKyogQ2hhcmFjdGVyOiB1cHBlciwgZXNjYXBlZAorKiBCcmFpbGxlOiBkb3QxLCBkb3QyLCBkb3QzLCBkb3Q0LCBkb3Q1LCBkb3Q2LCBkb3Q3LCBkb3Q4LCBzcGFjZQorCisuLiBfUEFTU0NIQVI6CisKKyoqUEFTU0NIQVIqKiAtIFR5cGUgdW5pY29kZSBjaGFyYWN0ZXIuCisKK1RoZSBmb2xsb3dpbmcgbW9kaWZpZXJzIG1heSBiZSBzcGVjaWZpZWQ6CisKKyogYSBzaW5nbGUgY2hhcmFjdGVyCisqIElucHV0OiBzaGlmdCwgY29udHJvbCwgbWV0YSwgYWx0Z3IsIGd1aQorKiBDaGFyYWN0ZXI6IHVwcGVyLCBlc2NhcGVkCisKKy4uIF9LRVlfQkFDS1NQQUNFOgorCisqKktFWV9CQUNLU1BBQ0UqKiAtIEJhY2tzcGFjZSBrZXkuCisKK1RoZSBmb2xsb3dpbmcgbW9kaWZpZXJzIG1heSBiZSBzcGVjaWZpZWQ6CisKKyogSW5wdXQ6IHNoaWZ0LCBjb250cm9sLCBtZXRhLCBhbHRnciwgZ3VpCisKKy4uIF9LRVlfRU5URVI6CisKKyoqS0VZX0VOVEVSKiogLSBFbnRlciBrZXkuCisKK1RoZSBmb2xsb3dpbmcgbW9kaWZpZXJzIG1heSBiZSBzcGVjaWZpZWQ6CisKKyogSW5wdXQ6IHNoaWZ0LCBjb250cm9sLCBtZXRhLCBhbHRnciwgZ3VpCisKKy4uIF9LRVlfVEFCOgorCisqKktFWV9UQUIqKiAtIFRhYiBrZXkuCisKK1RoZSBmb2xsb3dpbmcgbW9kaWZpZXJzIG1heSBiZSBzcGVjaWZpZWQ6CisKKyogSW5wdXQ6IHNoaWZ0LCBjb250cm9sLCBtZXRhLCBhbHRnciwgZ3VpCisKKy4uIF9LRVlfQ1VSU09SX0xFRlQ6CisKKyoqS0VZX0NVUlNPUl9MRUZUKiogLSBDdXJzb3ItbGVmdCBrZXkuCisKK1RoZSBmb2xsb3dpbmcgbW9kaWZpZXJzIG1heSBiZSBzcGVjaWZpZWQ6CisKKyogSW5wdXQ6IHNoaWZ0LCBjb250cm9sLCBtZXRhLCBhbHRnciwgZ3VpCisKKy4uIF9LRVlfQ1VSU09SX1JJR0hUOgorCisqKktFWV9DVVJTT1JfUklHSFQqKiAtIEN1cnNvci1yaWdodCBrZXkuCisKK1RoZSBmb2xsb3dpbmcgbW9kaWZpZXJzIG1heSBiZSBzcGVjaWZpZWQ6CisKKyogSW5wdXQ6IHNoaWZ0LCBjb250cm9sLCBtZXRhLCBhbHRnciwgZ3VpCisKKy4uIF9LRVlfQ1VSU09SX1VQOgorCisqKktFWV9DVVJTT1JfVVAqKiAtIEN1cnNvci11cCBrZXkuCisKK1RoZSBmb2xsb3dpbmcgbW9kaWZpZXJzIG1heSBiZSBzcGVjaWZpZWQ6CisKKyogSW5wdXQ6IHNoaWZ0LCBjb250cm9sLCBtZXRhLCBhbHRnciwgZ3VpCisKKy4uIF9LRVlfQ1VSU09SX0RPV046CisKKyoqS0VZX0NVUlNPUl9ET1dOKiogLSBDdXJzb3ItZG93biBrZXkuCisKK1RoZSBmb2xsb3dpbmcgbW9kaWZpZXJzIG1heSBiZSBzcGVjaWZpZWQ6CisKKyogSW5wdXQ6IHNoaWZ0LCBjb250cm9sLCBtZXRhLCBhbHRnciwgZ3VpCisKKy4uIF9LRVlfUEFHRV9VUDoKKworKipLRVlfUEFHRV9VUCoqIC0gUGFnZS11cCBrZXkuCisKK1RoZSBmb2xsb3dpbmcgbW9kaWZpZXJzIG1heSBiZSBzcGVjaWZpZWQ6CisKKyogSW5wdXQ6IHNoaWZ0LCBjb250cm9sLCBtZXRhLCBhbHRnciwgZ3VpCisKKy4uIF9LRVlfUEFHRV9ET1dOOgorCisqKktFWV9QQUdFX0RPV04qKiAtIFBhZ2UtZG93biBrZXkuCisKK1RoZSBmb2xsb3dpbmcgbW9kaWZpZXJzIG1heSBiZSBzcGVjaWZpZWQ6CisKKyogSW5wdXQ6IHNoaWZ0LCBjb250cm9sLCBtZXRhLCBhbHRnciwgZ3VpCisKKy4uIF9LRVlfSE9NRToKKworKipLRVlfSE9NRSoqIC0gSG9tZSBrZXkuCisKK1RoZSBmb2xsb3dpbmcgbW9kaWZpZXJzIG1heSBiZSBzcGVjaWZpZWQ6CisKKyogSW5wdXQ6IHNoaWZ0LCBjb250cm9sLCBtZXRhLCBhbHRnciwgZ3VpCisKKy4uIF9LRVlfRU5EOgorCisqKktFWV9FTkQqKiAtIEVuZCBrZXkuCisKK1RoZSBmb2xsb3dpbmcgbW9kaWZpZXJzIG1heSBiZSBzcGVjaWZpZWQ6CisKKyogSW5wdXQ6IHNoaWZ0LCBjb250cm9sLCBtZXRhLCBhbHRnciwgZ3VpCisKKy4uIF9LRVlfSU5TRVJUOgorCisqKktFWV9JTlNFUlQqKiAtIEluc2VydCBrZXkuCisKK1RoZSBmb2xsb3dpbmcgbW9kaWZpZXJzIG1heSBiZSBzcGVjaWZpZWQ6CisKKyogSW5wdXQ6IHNoaWZ0LCBjb250cm9sLCBtZXRhLCBhbHRnciwgZ3VpCisKKy4uIF9LRVlfREVMRVRFOgorCisqKktFWV9ERUxFVEUqKiAtIERlbGV0ZSBrZXkuCisKK1RoZSBmb2xsb3dpbmcgbW9kaWZpZXJzIG1heSBiZSBzcGVjaWZpZWQ6CisKKyogSW5wdXQ6IHNoaWZ0LCBjb250cm9sLCBtZXRhLCBhbHRnciwgZ3VpCisKKy4uIF9VTlNUSUNLOgorCisqKlVOU1RJQ0sqKiAtIENsZWFyIGFsbCBzdGlja3kgaW5wdXQgbW9kaWZpZXJzLgorCisuLiBfVVBQRVI6CisKKyoqVVBQRVIqKiAtIEN5Y2xlIHRoZSBVcHBlciBzdGlja3kgaW5wdXQgbW9kaWZpZXIgKG5leHQsIG9uLCBvZmYpLgorCisuLiBfU0hJRlQ6CisKKyoqU0hJRlQqKiAtIEN5Y2xlIHRoZSBTaGlmdCBzdGlja3kgaW5wdXQgbW9kaWZpZXIgKG5leHQsIG9uLCBvZmYpLgorCisuLiBfQ09OVFJPTDoKKworKipDT05UUk9MKiogLSBDeWNsZSB0aGUgQ29udHJvbCBzdGlja3kgaW5wdXQgbW9kaWZpZXIgKG5leHQsIG9uLCBvZmYpLgorCisuLiBfTUVUQToKKworKipNRVRBKiogLSBDeWNsZSB0aGUgTWV0YSAoTGVmdCBBbHQpIHN0aWNreSBpbnB1dCBtb2RpZmllciAobmV4dCwgb24sIG9mZikuCisKKy4uIF9BTFRHUjoKKworKipBTFRHUioqIC0gQ3ljbGUgdGhlIEFsdEdyIChSaWdodCBBbHQpIHN0aWNreSBpbnB1dCBtb2RpZmllciAobmV4dCwgb24sIG9mZikuCisKKy4uIF9HVUk6CisKKyoqR1VJKiogLSBDeWNsZSB0aGUgR1VJIChXaW5kb3dzKSBzdGlja3kgaW5wdXQgbW9kaWZpZXIgKG5leHQsIG9uLCBvZmYpLgorCisuLiBfS0VZX0VTQ0FQRToKKworKipLRVlfRVNDQVBFKiogLSBFc2NhcGUga2V5LgorCitUaGUgZm9sbG93aW5nIG1vZGlmaWVycyBtYXkgYmUgc3BlY2lmaWVkOgorCisqIElucHV0OiBzaGlmdCwgY29udHJvbCwgbWV0YSwgYWx0Z3IsIGd1aQorCisuLiBfS0VZX0ZVTkNUSU9OOgorCisqKktFWV9GVU5DVElPTioqIC0gRnVuY3Rpb24ga2V5LgorCitUaGUgZm9sbG93aW5nIG1vZGlmaWVycyBtYXkgYmUgc3BlY2lmaWVkOgorCisqIGFuIG9mZnNldAorKiBJbnB1dDogc2hpZnQsIGNvbnRyb2wsIG1ldGEsIGFsdGdyLCBndWkKKworLi4gX1NXSVRDSFZUOgorCisqKlNXSVRDSFZUKiogLSBTd2l0Y2ggdG8gc3BlY2lmaWMgdmlydHVhbCB0ZXJtaW5hbC4KKworVGhlIGZvbGxvd2luZyBtb2RpZmllcnMgbWF5IGJlIHNwZWNpZmllZDoKKworKiBhbiBvZmZzZXQKKworLi4gX1NXSVRDSFZUX1BSRVY6CisKKyoqU1dJVENIVlRfUFJFVioqIC0gU3dpdGNoIHRvIHRoZSBwcmV2aW91cyB2aXJ0dWFsIHRlcm1pbmFsLgorCisuLiBfU1dJVENIVlRfTkVYVDoKKworKipTV0lUQ0hWVF9ORVhUKiogLSBTd2l0Y2ggdG8gdGhlIG5leHQgdmlydHVhbCB0ZXJtaW5hbC4KKworLi4gX1NFTEVDVFZUOgorCisqKlNFTEVDVFZUKiogLSBCaW5kIHRvIHNwZWNpZmljIHZpcnR1YWwgdGVybWluYWwuCisKK1RoZSBmb2xsb3dpbmcgbW9kaWZpZXJzIG1heSBiZSBzcGVjaWZpZWQ6CisKKyogYW4gb2Zmc2V0CisKKy4uIF9TRUxFQ1RWVF9QUkVWOgorCisqKlNFTEVDVFZUX1BSRVYqKiAtIEJpbmQgdG8gdGhlIHByZXZpb3VzIHZpcnR1YWwgdGVybWluYWwuCisKKy4uIF9TRUxFQ1RWVF9ORVhUOgorCisqKlNFTEVDVFZUX05FWFQqKiAtIEJpbmQgdG8gdGhlIG5leHQgdmlydHVhbCB0ZXJtaW5hbC4KKworLi4gX0JSTEtCRDoKKworKipCUkxLQkQqKiAtIFNldCBicmFpbGxlIGtleWJvYXJkIGVuYWJsZWQvZGlzYWJsZWQuCisKK1RoZSBmb2xsb3dpbmcgbW9kaWZpZXJzIG1heSBiZSBzcGVjaWZpZWQ6CisKKyogVG9nZ2xlOiBvbiwgb2ZmCisKKy4uIF9CUkxVQ0RPVFM6CisKKyoqQlJMVUNET1RTKiogLSBTZXQgYnJhaWxsZSB0eXBpbmcgbW9kZSBkb3RzL3RleHQuCisKK1RoZSBmb2xsb3dpbmcgbW9kaWZpZXJzIG1heSBiZSBzcGVjaWZpZWQ6CisKKyogVG9nZ2xlOiBvbiwgb2ZmCisKK1NwZWNpYWwgRnVuY3Rpb25zCis9PT09PT09PT09PT09PT09PQorCisqIGBTRVRNQVJLYF8KKyogYEdPVE9NQVJLYF8KKyogYFJFRlJFU0hgXworKiBgUkVGUkVTSF9MSU5FYF8KKyogYFJFU1RBUlRCUkxgXworKiBgQlJMX1NUT1BgXworKiBgQlJMX1NUQVJUYF8KKyogYFJFU1RBUlRTUEVFQ0hgXworKiBgU1BLX1NUT1BgXworKiBgU1BLX1NUQVJUYF8KKyogYFNDUl9TVE9QYF8KKyogYFNDUl9TVEFSVGBfCisKKy4uIF9TRVRNQVJLOgorCisqKlNFVE1BUksqKiAtIFJlbWVtYmVyIGN1cnJlbnQgYnJhaWxsZSB3aW5kb3cgcG9zaXRpb24uCisKK1RoZSBmb2xsb3dpbmcgbW9kaWZpZXJzIG1heSBiZSBzcGVjaWZpZWQ6CisKKyogYW4gb2Zmc2V0CisKKy4uIF9HT1RPTUFSSzoKKworKipHT1RPTUFSSyoqIC0gR28gdG8gcmVtZW1iZXJlZCBicmFpbGxlIHdpbmRvdyBwb3NpdGlvbi4KKworVGhlIGZvbGxvd2luZyBtb2RpZmllcnMgbWF5IGJlIHNwZWNpZmllZDoKKworKiBhbiBvZmZzZXQKKyogTW90aW9uOiByb3V0ZQorCisuLiBfUkVGUkVTSDoKKworKipSRUZSRVNIKiogLSBSZWZyZXNoIGJyYWlsbGUgZGlzcGxheS4KKworLi4gX1JFRlJFU0hfTElORToKKworKipSRUZSRVNIX0xJTkUqKiAtIFJlZnJlc2ggYnJhaWxsZSBsaW5lLgorCitUaGUgZm9sbG93aW5nIG1vZGlmaWVycyBtYXkgYmUgc3BlY2lmaWVkOgorCisqIFJvdzogc2NhbGVkCisqIFZlcnRpY2FsOiB0b2xlZnQKKworLi4gX1JFU1RBUlRCUkw6CisKKyoqUkVTVEFSVEJSTCoqIC0gUmVzdGFydCBicmFpbGxlIGRyaXZlci4KKworLi4gX0JSTF9TVE9QOgorCisqKkJSTF9TVE9QKiogLSBTdG9wIHRoZSBicmFpbGxlIGRyaXZlci4KKworLi4gX0JSTF9TVEFSVDoKKworKipCUkxfU1RBUlQqKiAtIFN0YXJ0IHRoZSBicmFpbGxlIGRyaXZlci4KKworLi4gX1JFU1RBUlRTUEVFQ0g6CisKKyoqUkVTVEFSVFNQRUVDSCoqIC0gUmVzdGFydCBzcGVlY2ggZHJpdmVyLgorCisuLiBfU1BLX1NUT1A6CisKKyoqU1BLX1NUT1AqKiAtIFN0b3AgdGhlIHNwZWVjaCBkcml2ZXIuCisKKy4uIF9TUEtfU1RBUlQ6CisKKyoqU1BLX1NUQVJUKiogLSBTdGFydCB0aGUgc3BlZWNoIGRyaXZlci4KKworLi4gX1NDUl9TVE9QOgorCisqKlNDUl9TVE9QKiogLSBTdG9wIHRoZSBzY3JlZW4gZHJpdmVyLgorCisuLiBfU0NSX1NUQVJUOgorCisqKlNDUl9TVEFSVCoqIC0gU3RhcnQgdGhlIHNjcmVlbiBkcml2ZXIuCisKK0ludGVybmFsIEZ1bmN0aW9ucworPT09PT09PT09PT09PT09PT09CisKKyogYE5PT1BgXworKiBgT0ZGTElORWBfCisqIGBBTEVSVGBfCisqIGBQQVNTWFRgXworKiBgUEFTU0FUYF8KKyogYFBBU1NQUzJgXworKiBgVE9VQ0hfQVRgXworKiBgTUFDUk9gXworKiBgSE9TVENNRGBfCisKKy4uIF9OT09QOgorCisqKk5PT1AqKiAtIERvIG5vdGhpbmcuCisKKy4uIF9PRkZMSU5FOgorCisqKk9GRkxJTkUqKiAtIEJyYWlsbGUgZGlzcGxheSB0ZW1wb3JhcmlseSB1bmF2YWlsYWJsZS4KKworLi4gX0FMRVJUOgorCisqKkFMRVJUKiogLSBSZW5kZXIgYW4gYWxlcnQuCisKK1RoZSBmb2xsb3dpbmcgbW9kaWZpZXJzIG1heSBiZSBzcGVjaWZpZWQ6CisKKyogYW4gb2Zmc2V0CisKKy4uIF9QQVNTWFQ6CisKKyoqUEFTU1hUKiogLSBYVCAoc2V0IDEpIGtleWJvYXJkIHNjYW4gY29kZS4KKworVGhlIGZvbGxvd2luZyBtb2RpZmllcnMgbWF5IGJlIHNwZWNpZmllZDoKKworKiBLZXlib2FyZDogcmVsZWFzZSwgZW11bDAsIGVtdWwxCisKKy4uIF9QQVNTQVQ6CisKKyoqUEFTU0FUKiogLSBBVCAoc2V0IDIpIGtleWJvYXJkIHNjYW4gY29kZS4KKworVGhlIGZvbGxvd2luZyBtb2RpZmllcnMgbWF5IGJlIHNwZWNpZmllZDoKKworKiBLZXlib2FyZDogcmVsZWFzZSwgZW11bDAsIGVtdWwxCisKKy4uIF9QQVNTUFMyOgorCisqKlBBU1NQUzIqKiAtIFBTLzIgKHNldCAzKSBrZXlib2FyZCBzY2FuIGNvZGUuCisKK1RoZSBmb2xsb3dpbmcgbW9kaWZpZXJzIG1heSBiZSBzcGVjaWZpZWQ6CisKKyogS2V5Ym9hcmQ6IHJlbGVhc2UsIGVtdWwwLCBlbXVsMQorCisuLiBfVE9VQ0hfQVQ6CisKKyoqVE9VQ0hfQVQqKiAtIEN1cnJlbnQgcmVhZGluZyBsb2NhdGlvbi4KKworVGhlIGZvbGxvd2luZyBtb2RpZmllcnMgbWF5IGJlIHNwZWNpZmllZDoKKworKiBhbiBvZmZzZXQKKworLi4gX01BQ1JPOgorCisqKk1BQ1JPKiogLSBFeGVjdXRlIGNvbW1hbmQgbWFjcm8uCisKK1RoZSBmb2xsb3dpbmcgbW9kaWZpZXJzIG1heSBiZSBzcGVjaWZpZWQ6CisKKyogYW4gb2Zmc2V0CisKKy4uIF9IT1NUQ01EOgorCisqKkhPU1RDTUQqKiAtIFJ1biBob3N0IGNvbW1hbmQuCisKK1RoZSBmb2xsb3dpbmcgbW9kaWZpZXJzIG1heSBiZSBzcGVjaWZpZWQ6CisKKyogYW4gb2Zmc2V0CmRpZmYgLS1naXQgYS9Eb2N1bWVudHMvUkVBRE1FLkNvbnRyYWN0aW9uVGFibGVzIGIvRG9jdW1lbnRzL1JFQURNRS5Db250cmFjdGlvblRhYmxlcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMzZlZWRkCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRzL1JFQURNRS5Db250cmFjdGlvblRhYmxlcwpAQCAtMCwwICsxLDM0MiBAQAorfn5+fn5+fn5+fn5+fn5+fn5+CitDb250cmFjdGlvbiBUYWJsZXMKK35+fn5+fn5+fn5+fn5+fn5+fgorCisuLiBpbmNsdWRlOjogcHJvbG9ndWUucnN0CisKK0Rlc2NyaXB0aW9uCis9PT09PT09PT09PQorCitGaWxlcyB3aXRoIG5hbWVzIG9mIHRoZSBmb3JtIGBgKi5jdGJgYCBhcmUgY29udHJhY3Rpb24gdGFibGVzLCBhbmQgd2l0aCBuYW1lcworb2YgdGhlIGZvcm0gYGAqLmN0aWBgIGFyZSBjb250cmFjdGlvbiBzdWJ0YWJsZXMuIFRoZXkgYXJlIHVzZWQgYnkgQlJMVFRZIHRvCit0cmFuc2xhdGUgY2hhcmFjdGVyIHNlcXVlbmNlcyBvbiB0aGUgc2NyZWVuIGludG8gdGhlaXIgY29ycmVzcG9uZGluZyBjb250cmFjdGVkCiticmFpbGxlIHJlcHJlc2VudGF0aW9ucy4KKworQ29udHJhY3Rpb24gdGFibGVzIGNhbiB1c3VhbGx5IGJlIGZvdW5kIGluIHRoZSBgYC9ldGMvYnJsdHR5L0NvbnRyYWN0aW9uL2BgCitkaXJlY3RvcnkgKHNlZSB8UkVBRE1FLkN1c3RvbWl6ZXwgZm9yIG1vcmUgZGV0YWlscykuIFNFZQorYENvbnRyYWN0aW9uIFRhYmxlIGxpc3RgXyBmb3IgYSBsaXN0IG9mIEJSTFRUWSdzIGNvbnRyYWN0aW9uIHRhYmxlcy4KKworQSBjb250cmFjdGlvbiB0YWJsZSBjb25zaXN0cyBvZiBhIHNlcXVlbmNlIG9mIGRpcmVjdGl2ZXMsIG9uZSBwZXIgbGluZSwgdGhhdCAKK2RlZmluZSBob3cgY2hhcmFjdGVyIHNlcXVlbmNlcyBhcmUgdG8gYmUgcmVwcmVzZW50ZWQgaW4gY29udHJhY3RlZCBicmFpbGxlLgorVVRGLTggY2hhcmFjdGVyIGVuY29kaW5nIG11c3QgYmUgdXNlZC4gV2hpdGVzcGFjZSAoYmxhbmtzLCB0YWJzKSBhdCB0aGUKK2JlZ2lubmluZyBvZiBhIGxpbmUsIGFzIHdlbGwgYXMgYmVmb3JlIGFuZC9vciBhZnRlciBhbnkgb3BlcmFuZCwgaXMgaWdub3JlZC4KK0xpbmVzIGNvbnRhaW5pbmcgb25seSB3aGl0ZXNwYWNlIGFyZSBpZ25vcmVkLiBJZiB0aGUgZmlyc3Qgbm9uLXdoaXRlc3BhY2UKK2NoYXJhY3RlciBvZiBhIGxpbmUgaXMgYGAjYGAgdGhlbiB0aGF0IGxpbmUgaXMgYSBjb21tZW50IGFuZCBpcyBpZ25vcmVkLgorCitDb250cmFjdGlvbiBEaXJlY3RpdmVzCis9PT09PT09PT09PT09PT09PT09PT09CisKK1RoZSBmb3JtYXQgb2YgYSBjb250cmFjdGlvbiBkaXJlY3RpdmUgaXM6CisKKy4uIHBhcnNlZC1saXRlcmFsOjogKmRpcmVjdGl2ZSogKm9wZXJhbmQqIC4uLiAqY29tbWVudCoKKworRWFjaCBkaXJlY3RpdmUgaGFzIGEgc3BlY2lmaWMgbnVtYmVyIG9mIG9wZXJhbmRzLiBBbnkgdGV4dCBiZXlvbmQgdGhlIGxhc3QgCitvcGVyYW5kIG9mIGEgZGlyZWN0aXZlIGlzIGludGVycHJldGVkIGFzIGEgY29tbWVudC4gVGhpcyBjb21tZW50aW5nIGNhcGFiaWxpdHkKK2lzIG9mdGVuIHVzZWQgdG8gbGlzdCBzb21lIG9mIHRoZSB3b3JkcyB0aGF0IG1ha2UgdGhlIGRpcmVjdGl2ZSBuZWNlc3NhcnkuCisKK1RoZSBvcmRlciBvZiB0aGUgZGlyZWN0aXZlcyB3aXRoaW4gYSBjb250cmFjdGlvbiB0YWJsZSBpcywgaW4gZ2VuZXJhbCwgYW55dGhpbmcKK3RoYXQgaXMgY29udmVuaWVudCBmb3IgaXRzIG1haW50YWluZXIocykuIEEgZGlyZWN0aXZlIHRoYXQgZGVmaW5lcyBhbiBlbnRpdHksCitlLmcuIGBUaGUgQ2xhc3MgRGlyZWN0aXZlYF8sIG11c3QgcHJlY2VkZSBhbGwgcmVmZXJlbmNlcyB0byB0aGF0IGVudGl0eS4KKworRGlyZWN0aXZlcyB0aGF0IG1hdGNoIGNoYXJhY3RlciBzZXF1ZW5jZXMgYXJlIGF1dG9tYXRpY2FsbHkgcmVhcnJhbmdlZCBzdWNoCit0aGF0IGxvbmdlciBzZXF1ZW5jZXMgYXJlIG1hdGNoZWQgZmlyc3QuIElmIG1vcmUgdGhhbiBvbmUgZGlyZWN0aXZlIG1hdGNoZXMgdGhlCitzYW1lIGNoYXJhY3RlciBzZXF1ZW5jZSB0aGVuIHRoZWlyIG9yaWdpbmFsIHRhYmxlIG9yZGVyaW5nIGlzIG1haW50YWluZWQuCisKK1doZW5ldmVyIGEgY2hhcmFjdGVyIG5lZWRzIHRvIGJlIHdyaXR0ZW4sIGl0cyByZXByZXNlbnRhdGlvbiBhcyBkZWZpbmVkIHZpYQorYFRoZSBBbHdheXMgRGlyZWN0aXZlYF8gaXMgdXNlZC4gSW4gcHJpbmNpcGxlLCB0aGlzIG1lYW5zIHRoYXQgZXZlcnkgY2hhcmFjdGVyCit3aXRoaW4gdGhlICpyZXByZXNlbnRhdGlvbiogb3BlcmFuZCBvZiBldmVyeSBjb250cmFjdGlvbiBkaXJlY3RpdmUgc2hvdWxkIGJlCitleHBsaWNpdGx5IGRlZmluZWQgdmlhIGBUaGUgQWx3YXlzIERpcmVjdGl2ZWBfLiBJZiBhIGNoYXJhY3RlcidzIHJlcHJlc2VudGF0aW9uCitoYXNuJ3QgYmVlbiBkZWZpbmVkIHRoZW4gdGhlIFVuaWNvZGUgUmVwbGFjZW1lbnQgQ2hhcmFjdGVyIChVK0ZGRkQpIGlzIHVzZWQgLQoraWYgaXQncyByZXByZXNlbnRhdGlvbiBoYXNuJ3QgYmVlbiBkZWZpbmVkIHRoZW4gYWxsIGVpZ2h0IGRvdHMgYXJlIHVzZWQuCisKK1RoZSBMaXRlcmFsIERpcmVjdGl2ZQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy4uIHBhcnNlZC1saXRlcmFsOjogbGl0ZXJhbCAqY2hhcmFjdGVycyoKKworVHJhbnNsYXRlIHRoZSBlbnRpcmUgd2hpdGVzcGFjZS1ib3VuZGVkIHRleHQgY29udGFpbmluZyB0aGUgY2hhcmFjdGVyIHNlcXVlbmNlCitpbnRvIGNvbXB1dGVyIGJyYWlsbGUuCisKK1RoZSBBbHdheXMgRGlyZWN0aXZlCistLS0tLS0tLS0tLS0tLS0tLS0tLQorCisuLiBwYXJzZWQtbGl0ZXJhbDo6IGFsd2F5cyAqY2hhcmFjdGVycyogKnJlcHJlc2VudGF0aW9uKgorCitVbmNvbmRpdGlvbmFsbHkgdHJhbnNsYXRlIHRoZSBjaGFyYWN0ZXJzIG5vIG1hdHRlciB3aGVyZSB0aGV5IGFwcGVhci4gSWYKK3RoZXJlJ3Mgb25seSBvbmUgY2hhcmFjdGVyLCB0aGVuLCBpbiBhZGRpdGlvbiwgZGVmaW5lIHRoZSBkZWZhdWx0CityZXByZXNlbnRhdGlvbiBmb3IgdGhhdCBjaGFyYWN0ZXIuCisKK1RoZSBSZXBlYXRhYmxlIERpcmVjdGl2ZQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy4uIHBhcnNlZC1saXRlcmFsOjogcmVwZWF0YWJsZSAqY2hhcmFjdGVycyogKnJlcHJlc2VudGF0aW9uKgorCitVbmNvbmRpdGlvbmFsbHkgdHJhbnNsYXRlIHRoZSBjaGFyYWN0ZXJzIG5vIG1hdHRlciB3aGVyZSB0aGV5IGFwcGVhci4gSWdub3JlCithbnkgY29uc2VjdXRpdmUgcmVwZXRpdGlvbnMgb2YgdGhlIHNhbWUgc2VxdWVuY2UuCisKK1RoZSBMYXJnZVNpZ24gRGlyZWN0aXZlCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisuLiBwYXJzZWQtbGl0ZXJhbDo6IGxhcmdlU2lnbiAqY2hhcmFjdGVycyogKnJlcHJlc2VudGF0aW9uKgorCitVbmNvbmRpdGlvbmFsbHkgdHJhbnNsYXRlIHRoZSBjaGFyYWN0ZXJzIG5vIG1hdHRlciB3aGVyZSB0aGV5IGFwcGVhci4gUmVtb3ZlCit3aGl0ZXNwYWNlIGJldHdlZW4gY29uc2VjdXRpdmUgd29yZHMgbWF0Y2hlZCBieSB0aGlzIGRpcmVjdGl2ZS4KKworVGhlIExhc3RMYXJnZVNpZ24gRGlyZWN0aXZlCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworLi4gcGFyc2VkLWxpdGVyYWw6OiBsYXN0TGFyZ2VTaWduICpjaGFyYWN0ZXJzKiAqcmVwcmVzZW50YXRpb24qCisKK1VuY29uZGl0aW9uYWxseSB0cmFuc2xhdGUgdGhlIGNoYXJhY3RlcnMgbm8gbWF0dGVyIHdoZXJlIHRoZXkgYXBwZWFyLiBSZW1vdmUKK3ByZWNlZGluZyB3aGl0ZXNwYWNlIGlmIHRoZSBwcmV2aW91cyB3b3JkIHdhcyBtYXRjaGVkIGJ5CitgVGhlIExhcmdlU2lnbiBEaXJlY3RpdmVgXy4KKworVGhlIFdvcmQgRGlyZWN0aXZlCistLS0tLS0tLS0tLS0tLS0tLS0KKworLi4gcGFyc2VkLWxpdGVyYWw6OiB3b3JkICpjaGFyYWN0ZXJzKiAqcmVwcmVzZW50YXRpb24qCisKK1RyYW5zbGF0ZSB0aGUgY2hhcmFjdGVycyBpZiB0aGV5J3JlIGEgd29yZC4KKworVGhlIEpvaW5Xb3JkIERpcmVjdGl2ZQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisuLiBwYXJzZWQtbGl0ZXJhbDo6IGpvaW5Xb3JkICpjaGFyYWN0ZXJzKiAqcmVwcmVzZW50YXRpb24qCisKK1RyYW5zbGF0ZSB0aGUgY2hhcmFjdGVycyBpZiB0aGV5J3JlIGEgd29yZC4gUmVtb3ZlIHRoZSBmb2xsb3dpbmcgd2hpdGVzcGFjZSBpZgordGhlIGZpcnN0IGNoYXJhY3RlciBhZnRlciBpdCBpcyBhIGxldHRlci4KKworVGhlIExvd1dvcmQgRGlyZWN0aXZlCistLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworLi4gcGFyc2VkLWxpdGVyYWw6OiBsb3dXb3JkICpjaGFyYWN0ZXJzKiAqcmVwcmVzZW50YXRpb24qCisKK1RyYW5zbGF0ZSB0aGUgY2hhcmFjdGVycyBpZiB0aGV5J3JlIGEgd2hpdGVzcGFjZS1ib3VuZGVkIHdvcmQuCisKK1RoZSBDb250cmFjdGlvbiBEaXJlY3RpdmUKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworLi4gcGFyc2VkLWxpdGVyYWw6OiBjb250cmFjdGlvbiAqY2hhcmFjdGVycyoKKworUHJlZml4IHRoZSBjaGFyYWN0ZXJzIHdpdGggYSBsZXR0ZXIgc2lnbiAoc2VlCitgVGhlIExldFNpZ24gRGlyZWN0aXZlYF8pIGlmIHRoZXkncmUgYSB3b3JkLgorCitUaGUgU3VmV29yZCBEaXJlY3RpdmUKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisuLiBwYXJzZWQtbGl0ZXJhbDo6IHN1ZldvcmQgKmNoYXJhY3RlcnMqICpyZXByZXNlbnRhdGlvbioKKworVHJhbnNsYXRlIHRoZSBjaGFyYWN0ZXJzIGlmIHRoZXkncmUgZWl0aGVyIGEgd29yZCBvciBhdCB0aGUgYmVnaW5uaW5nIG9mIGEKK3dvcmQuCisKK1RoZSBQcmZXb3JkIERpcmVjdGl2ZQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy4uIHBhcnNlZC1saXRlcmFsOjogcHJmV29yZCAqY2hhcmFjdGVycyogKnJlcHJlc2VudGF0aW9uKgorCitUcmFuc2xhdGUgdGhlIGNoYXJhY3RlcnMgaWYgdGhleSdyZSBlaXRoZXIgYSB3b3JkIG9yIGF0IHRoZSBlbmQgb2YgYSB3b3JkLgorCitUaGUgQmVnV29yZCBEaXJlY3RpdmUKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisuLiBwYXJzZWQtbGl0ZXJhbDo6IGJlZ1dvcmQgKmNoYXJhY3RlcnMqICpyZXByZXNlbnRhdGlvbioKKworVHJhbnNsYXRlIHRoZSBjaGFyYWN0ZXJzIGlmIHRoZXkncmUgYXQgdGhlIGJlZ2lubmluZyBvZiBhIHdvcmQuCisKK1RoZSBCZWdNaWRXb3JkIERpcmVjdGl2ZQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy4uIHBhcnNlZC1saXRlcmFsOjogYmVnTWlkV29yZCAqY2hhcmFjdGVycyogKnJlcHJlc2VudGF0aW9uKgorCitUcmFuc2xhdGUgdGhlIGNoYXJhY3RlcnMgaWYgdGhleSdyZSBlaXRoZXIgYXQgdGhlIGJlZ2lubmluZyBvciBpbiB0aGUgbWlkZGxlIG9mCithIHdvcmQuCisKK1RoZSBNaWRXb3JkIERpcmVjdGl2ZQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy4uIHBhcnNlZC1saXRlcmFsOjogbWlkV29yZCAqY2hhcmFjdGVycyogKnJlcHJlc2VudGF0aW9uKgorCitUcmFuc2xhdGUgdGhlIGNoYXJhY3RlcnMgaWYgdGhleSdyZSBpbiB0aGUgbWlkZGxlIG9mIGEgd29yZC4KKworVGhlIE1pZEVuZFdvcmQgRGlyZWN0aXZlCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworLi4gcGFyc2VkLWxpdGVyYWw6OiBtaWRFbmRXb3JkICpjaGFyYWN0ZXJzKiAqcmVwcmVzZW50YXRpb24qCisKK1RyYW5zbGF0ZSB0aGUgY2hhcmFjdGVycyBpZiB0aGV5J3JlIGVpdGhlciBpbiB0aGUgbWlkZGxlIG9yIGF0IHRoZSBlbmQgb2YgYQord29yZC4KKworVGhlIEVuZFdvcmQgRGlyZWN0aXZlCistLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworLi4gcGFyc2VkLWxpdGVyYWw6OiBlbmRXb3JkICpjaGFyYWN0ZXJzKiAqcmVwcmVzZW50YXRpb24qCisKK1RyYW5zbGF0ZSB0aGUgY2hhcmFjdGVycyBpZiB0aGV5J3JlIGF0IHRoZSBlbmQgb2YgYSB3b3JkLgorCitUaGUgUHJlUHVuYyBEaXJlY3RpdmUKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisuLiBwYXJzZWQtbGl0ZXJhbDo6IHByZVB1bmMgKmNoYXJhY3RlcnMqICpyZXByZXNlbnRhdGlvbioKKworVHJhbnNsYXRlIHRoZSBjaGFyYWN0ZXJzIGlmIHRoZXkncmUgcGFydCBvZiBwdW5jdHVhdGlvbiBhdCB0aGUgYmVnaW5uaW5nIG9mIGEKK3dvcmQuCisKK1RoZSBQb3N0UHVuYyBEaXJlY3RpdmUKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworLi4gcGFyc2VkLWxpdGVyYWw6OiBwb3N0UHVuYyAqY2hhcmFjdGVycyogKnJlcHJlc2VudGF0aW9uKgorCitUcmFuc2xhdGUgdGhlIGNoYXJhY3RlcnMgaWYgdGhleSdyZSBwYXJ0IG9mIHB1bmN0dWF0aW9uIGF0IHRoZSBlbmQgb2YgYSB3b3JkLgorCitUaGUgQmVnTnVtIERpcmVjdGl2ZQorLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworLi4gcGFyc2VkLWxpdGVyYWw6OiBiZWdOdW0gKmNoYXJhY3RlcnMqICpyZXByZXNlbnRhdGlvbioKKworVHJhbnNsYXRlIHRoZSBjaGFyYWN0ZXJzIGlmIHRoZXkncmUgYXQgdGhlIGJlZ2lubmluZyBvZiBhIG51bWJlci4KKworVGhlIE1pZE51bSBEaXJlY3RpdmUKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy4uIHBhcnNlZC1saXRlcmFsOjogbWlkTnVtICpjaGFyYWN0ZXJzKiAqcmVwcmVzZW50YXRpb24qCisKK1RyYW5zbGF0ZSB0aGUgY2hhcmFjdGVycyBpZiB0aGV5J3JlIGluIHRoZSBtaWRkbGUgb2YgYSBudW1iZXIuCisKK1RoZSBFbmROdW0gRGlyZWN0aXZlCistLS0tLS0tLS0tLS0tLS0tLS0tLQorCisuLiBwYXJzZWQtbGl0ZXJhbDo6IGVuZE51bSAqY2hhcmFjdGVycyogKnJlcHJlc2VudGF0aW9uKgorCitUcmFuc2xhdGUgdGhlIGNoYXJhY3RlcnMgaWYgdGhleSdyZSBhdCB0aGUgZW5kIG9mIGEgbnVtYmVyLgorCitDaGFyYWN0ZXIgQ2xhc3NlcworPT09PT09PT09PT09PT09PT0KKworVGhlIENsYXNzIERpcmVjdGl2ZQorLS0tLS0tLS0tLS0tLS0tLS0tLQorCisuLiBwYXJzZWQtbGl0ZXJhbDo6IGNsYXNzICpuYW1lKiAqY2hhcmFjdGVycyoKKworRGVmaW5lIGEgbmV3IGNoYXJhY3RlciBjbGFzcy4gQSBjaGFyYWN0ZXIgY2xhc3MgbWF5IG5vdCBiZSB1c2VkIHVudGlsIGl0IGhhcworYmVlbiBkZWZpbmVkLgorCitUaGUgQWZ0ZXIgRGlyZWN0aXZlCistLS0tLS0tLS0tLS0tLS0tLS0tCisKKy4uIHBhcnNlZC1saXRlcmFsOjogYWZ0ZXIgKmNsYXNzKiAqZGlyZWN0aXZlKgorCitUaGUgc3BlY2lmaWVkIGRpcmVjdGl2ZSBpcyBmdXJ0aGVyIGNvbnN0cmFpbmVkIGluIHRoYXQgdGhlIG1hdGNoZWQgY2hhcmFjdGVyCitzZXF1ZW5jZSBtdXN0IGJlIGltbWVkaWF0ZWx5IHByZWNlZGVkIGJ5IGEgY2hhcmFjdGVyIGJlbG9uZ2luZyB0byB0aGUgc3BlY2lmaWVkCitjbGFzcy4gSWYgdGhpcyBkaXJlY3RpdmUgaXMgdXNlZCBtb3JlIHRoYW4gb25jZSBvbiB0aGUgc2FtZSBsaW5lIHRoZW4gdGhlIHVuaW9uCitvZiB0aGUgY2hhcmFjdGVycyBpbiBhbGwgdGhlIGNsYXNzZXMgaXMgdXNlZC4KKworVGhlIEJlZm9yZSBEaXJlY3RpdmUKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy4uIHBhcnNlZC1saXRlcmFsOjogYmVmb3JlICpjbGFzcyogKmRpcmVjdGl2ZSoKKworVGhlIHNwZWNpZmllZCBkaXJlY3RpdmUgaXMgZnVydGhlciBjb25zdHJhaW5lZCBpbiB0aGF0IHRoZSBtYXRjaGVkIGNoYXJhY3Rlcgorc2VxdWVuY2UgbXVzdCBiZSBpbW1lZGlhdGVseSBmb2xsb3dlZCBieSBhIGNoYXJhY3RlciBiZWxvbmdpbmcgdG8gdGhlIHNwZWNpZmllZAorY2xhc3MuIElmIHRoaXMgZGlyZWN0aXZlIGlzIHVzZWQgbW9yZSB0aGFuIG9uY2Ugb24gdGhlIHNhbWUgbGluZSB0aGVuIHRoZSB1bmlvbgorb2YgdGhlIGNoYXJhY3RlcnMgaW4gYWxsIHRoZSBjbGFzc2VzIGlzIHVzZWQuCisKK0luZGljYXRvciBTcGVjaWZpY2F0aW9uCis9PT09PT09PT09PT09PT09PT09PT09PQorCitUaGUgQ2FwU2lnbiBEaXJlY3RpdmUKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisuLiBwYXJzZWQtbGl0ZXJhbDo6IGNhcFNpZ24gKnJlcHJlc2VudGF0aW9uKgorCitEZWZpbmUgdGhlIHN5bWJvbCB3aGljaCBjYXBpdGFsaXplcyBhIHNpbmdsZSBsZXR0ZXIuCisKK1RoZSBCZWdDYXBzIERpcmVjdGl2ZQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy4uIHBhcnNlZC1saXRlcmFsOjogYmVnQ2FwcyAqcmVwcmVzZW50YXRpb24qCisKK0RlZmluZSB0aGUgc3ltYm9sIHdoaWNoIGJlZ2lucyBhIGJsb2NrIG9mIGNhcGl0YWwgbGV0dGVycyB3aXRoaW4gYSB3b3JkLgorCitUaGUgRW5kQ2FwcyBEaXJlY3RpdmUKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisuLiBwYXJzZWQtbGl0ZXJhbDo6IGVuZENhcHMgKnJlcHJlc2VudGF0aW9uKgorCitEZWZpbmUgdGhlIHN5bWJvbCB3aGljaCBlbmRzIGEgYmxvY2sgb2YgY2FwaXRhbCBsZXR0ZXJzIHdpdGhpbiBhIHdvcmQuCisKK1RoZSBMZXRTaWduIERpcmVjdGl2ZQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy4uIHBhcnNlZC1saXRlcmFsOjogbGV0U2lnbiAqcmVwcmVzZW50YXRpb24qCisKK0RlZmluZSB0aGUgc3ltYm9sIHdoaWNoIG1hcmtzIGEgbGV0dGVyIHdoaWNoIGlzbid0IHBhcnQgb2YgYSB3b3JkLgorCitUaGUgTnVtU2lnbiBEaXJlY3RpdmUKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisuLiBwYXJzZWQtbGl0ZXJhbDo6IG51bVNpZ24gKnJlcHJlc2VudGF0aW9uKgorCitEZWZpbmUgdGhlIHN5bWJvbCB3aGljaCBtYXJrcyB0aGUgYmVnaW5uaW5nIG9mIGEgbnVtYmVyLgorCitTcGVjaWFsIERpcmVjdGl2ZXMKKz09PT09PT09PT09PT09PT09PQorCitUaGUgUmVwbGFjZSBEaXJlY3RpdmUKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisuLiBwYXJzZWQtbGl0ZXJhbDo6IHJlcGxhY2UgKmNoYXJhY3RlcnMqICpjaGFyYWN0ZXJzKgorCitUcmFuc2xhdGUgdGhlIGZpcnN0IGNoYXJhY3RlciBzZXF1ZW5jZSBpbnRvIHRoZSBzZWNvbmQgY2hhcmFjdGVyIHNlcXVlbmNlLgorVGhlIHJlcGxhY2VtZW50IGNoYXJhY3RlcnMgYXJlIHRoZW4gcmVjb250cmFjdGVkLgorCitUaGUgRW1vamkgRGlyZWN0aXZlCistLS0tLS0tLS0tLS0tLS0tLS0tCisKKy4uIHBhcnNlZC1saXRlcmFsOjogZW1vamkgKmxhbmd1YWdlKgorCitUcmFuc2xhdGUgYW4gZW1vamkgY2hhcmFjdGVyIHNlcXVlbmNlIGludG8gaXRzIGRlc2NyaXB0aW9uIGluIHRoZSBzcGVjaWZpZWQKK2xhbmd1YWdlLiBUaGUgbGFuZ3VhZ2Ugb3BlcmFuZCBpcyBhbiBJU08gNjM5IHR3by1sZXR0ZXIgbGFuZ3VhZ2UgY29kZS4KKworVGhpcyBkaXJlY3RpdmUgb25seSB3b3JrcyBpZiBhdCBsZWFzdCBJQ1UgdmVyc2lvbiA1NyBpcyBpbnN0YWxsZWQuCisKK1RoaXMgZGlyZWN0aXZlIHJlbGllcyBvbiBkYXRhIHByb3ZpZGVkIGJ5IHRoZSBDTERSIHBhY2thZ2UuCitDTERSIHN0YW5kcyBmb3IgdGhlIENvbW1vbiBMb2NhbGUgRGF0YSBSZXBvc2l0b3J5IHByb2plY3QuCitLbm9xd24gbmFtZXMgZm9yIHRoaXMgcGFja2FnZSBpbmNsdWRlOgorCisqIGNsZHItZW1vamktYW5ub3RhdGlvbgorKiB1bmljb2RlLWNsZHIKKworQXQgdGhlIHRpbWUgb2YgdGhpcyB3cml0aW5nLCB0aGlzIHByb2plY3QgaXMgbWFpbnRhaW5lZCBhdAorYDxodHRwczovL2dpdGh1Yi5jb20vdW5pY29kZS1vcmcvY2xkcj5gXy4KKworU3RhbmRhcmQgRGlyZWN0aXZlcworPT09PT09PT09PT09PT09PT09PQorCisuLiBpbmNsdWRlOjogbmVzdGluZy1kaXJlY3RpdmVzLnJzdAorCitPcGVyYW5kcworPT09PT09PT0KKworLi4gaW5jbHVkZTo6IHN0cmluZy1vcGVyYW5kLnJzdAorCitUaGUgUmVwcmVzZW50YXRpb24gT3BlcmFuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIGNvbnRyYWN0ZWQgYnJhaWxsZSByZXByZXNlbnRhdGlvbiBvZiBhIGNoYXJhY3RlciBzZXF1ZW5jZS4gQnJhaWxsZSBjZWxscworYXJlIHNlcGFyYXRlZCBmcm9tIG9uZSBhbm90aGVyIGJ5IGEgbWludXMgKGBgLWBgKSBzaWduLiBFYWNoIGJyYWlsbGUgY2VsbCBpcworc3BlY2lmaWVkIGFzIGEgc2VxdWVuY2Ugb2Ygb25lIHRvIGVpZ2h0IGRvdCBudW1iZXJzLiBBIGRvdCBudW1iZXIgaXMgYSBkaWdpdAord2l0aGluIHRoZSByYW5nZSBgYDFgYC1gYDhgYCBhcyBkZWZpbmVkIGJ5IHRoZSBzdGFuZGFyZCBicmFpbGxlIGRvdCBudW1iZXJpbmcKK2NvbnZlbnRpb24gKHNlZSB8UkVBRE1FLkJyYWlsbGVEb3RzfCBmb3IgZGV0YWlscykuIFRoZSBzcGVjaWFsIGRvdCBudW1iZXIKK2BgMGBgIG1lYW5zIG5vIGRvdHMsIGFuZCBtYXkgbm90IGJlIHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aCBhbnkgb3RoZXIgZG90CitudW1iZXJzLgorCitUaGUgZXF1YWxzIChgYD1gYCkgc2lnbiAsIHdoZW4gdXNlZCBhbGwgYnkgaXRzZWxmLCBtZWFucyB0aGF0IHRoZSAqY2hhcmFjdGVycyoKK29wZXJhbmQgb2YgdGhlIGNvbnRyYWN0aW9uIGRpcmVjdGl2ZSBpcyB0byBiZSB3cml0dGVuIHdpdGhvdXQgYW55IHRyYW5zbGF0aW9uLgorCitDb250cmFjdGlvbiBUYWJsZSBMaXN0Cis9PT09PT09PT09PT09PT09PT09PT09CisKKy4uIGNzdi10YWJsZTo6CisgICA6aGVhZGVyLXJvd3M6IDEKKyAgIDpmaWxlOiBjb250cmFjdGlvbi10YWJsZS5jc3YKKwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRzL1JFQURNRS5DdXN0b21pemUgYi9Eb2N1bWVudHMvUkVBRE1FLkN1c3RvbWl6ZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZTJkNDJlCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRzL1JFQURNRS5DdXN0b21pemUKQEAgLTAsMCArMSw2NSBAQAorfn5+fn5+fn5+fn5+fn5+fn5+fgorTG9jYWwgQ3VzdG9taXphdGlvbgorfn5+fn5+fn5+fn5+fn5+fn5+fgorCisuLiBpbmNsdWRlOjogcHJvbG9ndWUucnN0CisKK0JSTFRUWSBzdXBwb3J0cyB0aGUgWERHIGNvbmZpZ3VyYXRpb24gZmlsZSBwYXJhZGlnbS4gVGhlIG1vc3QgaW1wb3J0YW50CitjYXBhYmlsaXR5IHRoaXMgb2ZmZXJzIGlzIGFuIGVhc3kgd2F5IHRvIGN1c3RvbWl6ZSB5b3VyIEJSTFRUWSBjb25maWd1cmF0aW9uCit0aGF0IHdvbid0IGJlIG92ZXJ3cml0dGVuIGR1cmluZyBhbiB1cGdyYWRlLCByZWluc3RhbGwsIGV0Yy4gVGhlIFhERyBwYXJhZGlnbQorZGVmaW5lcyBzdGFuZGFyZCBsb2NhdGlvbnMgZm9yIHlvdXIgb3duIGRhdGEgZmlsZXMgdGhhdCB3aWxsIG92ZXJyaWRlIEJSTFRUWSdzCitwcm92aWRlZCBkYXRhIGZpbGVzLiBJbiBvdGhlciB3b3JkcywgeW91IG5vIGxvbmdlciBuZWVkIHRvIG1vZGlmeSBCUkxUVFkncworcHJvdmlkZWQgZGF0YSBmaWxlcyBpbiBvcmRlciB0byBtYWtlIHlvdXIgb3duIGxvY2FsIGN1c3RvbWl6YXRpb25zLgorCitUaGUgZm9sbG93aW5nIGRhdGEgZmlsZXMgYXJlIGNvdmVyZWQgYnkgdGhpcyBmZWF0dXJlOgorCisqICBUaGUgY29uZmlndXJhdGlvbiBmaWxlIChgYGJybHR0eS5jb25mYGApLgorKiAgVGV4dCB0YWJsZXMgKGBgKi50dGJgYCkgYW5kIHN1YnRhYmxlcyAoYGAqLnR0aWBgKS4KKyAgIFNlZSB8UkVBRE1FLlRleHRUYWJsZXN8IGZvciBkZXRhaWxzLgorKiAgQXR0cmlidXRlcyB0YWJsZXMgKGBgKi5hdGJgYCkgYW5kIHN1YnRhYmxlcyAoYGAqLmF0aWBgKS4KKyAgIFNlZSB8UkVBRE1FLkF0dHJpYnV0ZXNUYWJsZXN8IGZvciBkZXRhaWxzLgorKiAgQ29udHJhY3Rpb24gdGFibGVzIChgYCouY3RiYGApIGFuZCBzdWJ0YWJsZXMgKGBgKi5jdGlgYCkuCisgICBTZWUgfFJFQURNRS5Db250cmFjdGlvblRhYmxlc3wgZm9yIGRldGFpbHMuCisqICBLZXkgdGFibGVzIChgYCoua3RiYGApIGFuZCBzdWJ0YWJsZXMgKGBgKi5rdGlgYCkuCisgICBTZWUgfFJFQURNRS5LZXlUYWJsZXN8IGZvciBkZXRhaWxzLgorCitUaGUgc3RhbmRhcmQgZGlyZWN0b3J5IHdoZXJlIHlvdSBzaG91bGQgcHV0IHlvdXIgY3VzdG9taXplZCBmaWxlcyBpcworYGAvZXRjL3hkZy9icmx0dHkvYGAuCisKK1RoZSBzaW1wbGVzdCB3YXkgdG8gY3VzdG9taXplIGEgcHJvdmlkZWQgZGF0YSBmaWxlIGlzIHRvIGNvcHkgaXQgdG8gdGhpcworZGlyZWN0b3J5LCBhbmQgdGhlbiB0byBtb2RpZnkgeW91ciBjb3B5IGFzIG5lZWRlZC4gWW91IGNhbiwgaG93ZXZlciwganVzdCBwbGFjZQoreW91ciBjaGFuZ2VzIGluIHlvdXIgdmVyc2lvbiBvZiB0aGUgZmlsZSwgYW5kIHRoZW4gYGBpbmNsdWRlYGAgdGhlIHByb3ZpZGVkCitmaWxlIGluIG9yZGVyIHRvIGF1dG9tYXRpY2FsbHkgYWx3YXlzIHBpY2sgdXAgdGhlIGxhdGVzdCB2ZXJzaW9ucyBvZiBhbGwgdGhlCit1bmNoYW5nZWQgbGluZXMuCisKK0ZvciBleGFtcGxlOiBMZXQncyBzYXkgdGhhdCB5b3UnZCBsaWtlIHRvIGFkZCB5b3VyIG93biBrZXkgYmluZGluZ3MgdG8gdGhlIAorYGBsYXB0b3BgYCBrZXlib2FyZCB0YWJsZS4gVG8gZG8gc28sIGNyZWF0ZSBgYC9ldGMveGRnL2JybHR0eS9sYXB0b3Aua3RiYGAsIAorYW5kIHBsYWNlIGxpbmVzIGxpa2UgdGhlc2UgaW50byBpdDo6CisKKyAgIGJpbmQgS2V5MSBDT01NQU5EMQorICAgYmluZCBLZXkyIENPTU1BTkQyCisgICAuLi4KKyAgIGluY2x1ZGUgbGFwdG9wLmt0YgorCitUaGUgYGBYREdfQ09ORklHX0hPTUVgYCBlbnZpcm9ubWVudCB2YXJpYWJsZSBkZWZpbmVzIHRoZSBiYXNlIGRpcmVjdG9yeSBpbgord2hpY2ggdG8gY2hlY2sgYmVmb3JlIHRoZSBzdGFuZGFyZCBkaXJlY3RvcnkgaXMgY2hlY2tlZC4gSWYgaXQncyBzZXQgYW5kIG5vdAorZW1wdHkgdGhlbiB0aGUgcHJpbWFyeSBvdmVycmlkZSBkaXJlY3RvcnkgaXMgYGAkWERHX0NPTkZJR19IT01FL2JybHR0eS9gYC4gSWYKK2l0IGVpdGhlciBpc24ndCBzZXQgb3IgaXMgZW1wdHksIGJ1dCB0aGUgYGBIT01FYGAgZW52aXJvbm1lbnQgdmFyaWFibGUgaXMgc2V0CithbmQgbm90IGVtcHR5ICh0aGUgdXN1YWwgY2FzZSB3aGVuIHlvdSdyZSBsb2dnZWQgaW4pIHRoZW4gdGhlIHByaW1hcnkgb3ZlcnJpZGUKK2RpcmVjdG9yeSBpcyBgYCRIT01FLy5jb25maWcvYnJsdHR5L2BgLiBJZiBib3RoIHRoZSBgYFhER19DT05GSUdfSE9NRWBgIGFuZAorYGBIT01FYGAgZW52aXJvbm1lbnQgdmFyaWFibGVzIGFyZSBlaXRoZXIgbm90IHNldCBvciBlbXB0eSAodGhlIHVzdWFsIGNhc2UKK2R1cmluZyB0aGUgc3lzdGVtIGJvb3Qgc2VxdWVuY2UpIHRoZW4gdGhlIHByaW1hcnkgb3ZlcnJpZGUgZGlyZWN0b3J5IGlzbid0CitkZWZpbmVkLgorCitUaGUgYGBYREdfQ09ORklHX0RJUlNgYCBlbnZpcm9ubWVudCB2YXJpYWJsZSBkZWZpbmVzIGEgY29sb24tc2VwYXJhdGVkIGxpc3Qgb2YgCitzZWNvbmRhcnkgYmFzZSBkaXJlY3Rvcmllcy4gVGhlIGBgYnJsdHR5L2BgIHN1YmRpcmVjdG9yeSBvZiBlYWNoIG9mIHRoZXNlIAorc2Vjb25kYXJ5IGJhc2UgZGlyZWN0b3JpZXMgaXMgQlJMVFRZJ3MgY29ycmVzcG9uZGluZyBzZWNvbmRhcnkgb3ZlcnJpZGUgCitkaXJlY3RvcnkuIFNvLCBmb3IgZXhhbXBsZSwgaWYgYGBYREdfQ09ORklHX0RJUlNgYCBpcyBzZXQgdG8gYGAvYTovYmBgIHRoZW4KK0JSTFRUWSB3aWxsIGNoZWNrIGBgL2EvYnJsdHR5L2BgIGFuZCBgYC9iL2JybHR0eS9gYCAoaW4gdGhhdCBvcmRlcikuIElmCitgYFhER19DT05GSUdfRElSU2BgIGlzIHNldCBhbmQgbm90IGVtcHR5IHRoZW4gYGAvZXRjL3hkZy9icmx0dHkvYGAgaXMgbm8gbG9uZ2VyCitpbXBsaWNpdGx5IGNoZWNrZWQuCisKK0ZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LCB0aGUgb3JpZ2luYWwgZGF0YSBmaWxlIG92ZXJyaWRlIHBhcmFkaWdtIGlzIGFsc28gCitzdXBwb3J0ZWQuIElmIHRoZSBgYEhPTUVgYCBlbnZpcm9ubWVudCB2YXJpYWJsZSBpcyBzZXQgYW5kIG5vdCBlbXB0eSB0aGVuIHRoZSAKK3RlcnRpYXJ5IG92ZXJyaWRlIGRpcmVjdG9yeSBpcyBgYCRIT01FLy5icmx0dHkvYGAuIElmIGl0IGlzbid0IHNldCwgb3IgaWYgaXQncyAKK2VtcHR5LCB0aGVuIHRoZSB0ZXJ0aWFyeSBvdmVycmlkZSBkaXJlY3RvcnkgaXMgYGAuLy5icmx0dHkvYGAuCmRpZmYgLS1naXQgYS9Eb2N1bWVudHMvUkVBRE1FLkRPUyBiL0RvY3VtZW50cy9SRUFETUUuRE9TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjViNWRlMTUKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudHMvUkVBRE1FLkRPUwpAQCAtMCwwICsxLDM2NyBAQAorfn5+fn5+fn5+fn5+fgorQlJMVFRZIG9uIERPUworfn5+fn5+fn5+fn5+fgorCisuLiBpbmNsdWRlOjogcHJvbG9ndWUucnN0CisKK1VzaW5nIEJSTFRUWQorPT09PT09PT09PT09CisKK1NlcmlhbCBTdXBwb3J0CistLS0tLS0tLS0tLS0tLQorCitUaGUgZGVmYXVsdCBET1Mgc2VyaWFsIGRyaXZlciBkb2VzIG5vdCBzdXBwb3J0IHNwZWVkcyBhYm92ZSA5NjAwIGJhdWQuIEZvciAKK2hpZ2hlciBzcGVlZHMsIGEgbW9yZSBjYXBhYmxlIHNlcmlhbCBkcml2ZXIgKGxpa2UgQURGKSBtdXN0IGJlIHVzZWQuCisKK1VTQiBTdXBwb3J0CistLS0tLS0tLS0tLQorCitVU0IgaXNuJ3Qgc3VwcG9ydGVkLgorCitCbHVldG9vdGggU3VwcG9ydAorLS0tLS0tLS0tLS0tLS0tLS0KKworQmx1ZXRvb3RoIGlzbid0IHN1cHBvcnRlZC4KKworVW5wYWNraW5nIHRoZSBBcmNoaXZlCistLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworSWYgeW91J2QgbGlrZSB0byB1bnBhY2sgdGhlIGFyY2hpdmUgb24geW91ciBET1Mgc3lzdGVtIGJ1dCBkb24ndCBoYXZlIGFuIAordW56aXAgY29tbWFuZCBvbiBpdCwgeW91IGNhbiBnZXQgb25lIGZyb20KK2A8ZnRwOi8vZnRwLmRlbG9yaWUuY29tL3B1Yi9kamdwcC9jdXJyZW50L3YyL3VuemlwMzIuZXhlPmBfLgorCitJZiB5b3UnZCBsaWtlIHRvIHVucGFjayB0aGUgYXJjaGl2ZSBpbnRvIHlvdXIgRE9TIGZpbGUgc3lzdGVtIGZyb20geW91ciBMaW51eAorc3lzdGVtIHRoZW4geW91IG5lZWQgdG8gYmUgYWJsZSB0byBtb3VudCB5b3VyIERPUyBwYXJ0aXRpb24gb24geW91ciBMaW51eAorc3lzdGVtLiBJZiB5b3UgZG8gdGhpcyB0aGVuIHlvdSBtdXN0IGJlIGNhcmVmdWwgYWJvdXQgdHdvIHRoaW5ncy4gVGhlIGZpcnN0IGlzCit0aGF0IHlvdSBtdXN0IGVuc3VyZSB0aGF0IHlvdXIgRE9TIHN5c3RlbSBpcyBzaHV0IGRvd24gZmlyc3Qgc28gdGhhdCB0d28KK3N5c3RlbXMgd29uJ3QgYmUgYWNjZXNzaW5nIHRoZSBzYW1lIHBhcnRpdGlvbiBhdCB0aGUgc2FtZSB0aW1lLiBUaGUgc2Vjb25kIGlzCit0aGF0IHlvdSBtdXN0IG1vdW50IHRoZSBwYXJ0aXRpb24gaW4gYSB3YXkgdGhhdCBwcmV2ZW50cyB0aGUgbG9uZyBmaWxlIG5hbWVzIAordGhhdCBCUkxUVFkgdXNlcyBmcm9tIGJlaW5nIGNvbnZlcnRlZCBpbnRvIHRob3NlIGNyeXB0aWMgV2luZG93cyBzaG9ydCBmaWxlIAorbmFtZXMgLSB0aGUgb25lcyB0aGF0IGxvb2sgbGlrZSBgYGxvbmduYX4xLmV4dGBgLiBPbmUgd2F5IHRvIGRvIHRoaXMgaXMgdG8gdXNlIAordGhlIGBgLW8gbm9udW10YWlsYGAgb3B0aW9uIHdoZW4gbW91bnRpbmcgeW91ciBET1MgcGFydGl0aW9uLiBGb3IgZXhhbXBsZTo6CisKKyAgIG1rZGlyIC1wIC9tbnQvZG9zCisgICBtb3VudCAtbyBub251bXRhaWwgL2Rldi9zZGExIC9tbnQvZG9zCisKK1doYXQgeW91IG1vc3QgbGlrZWx5IGhhdmUgaXMgYW4gaW1hZ2Ugb2YgdGhlIHdob2xlIGhhcmQgZGlzaywgcmF0aGVyIHRoYW4gYW4gCitpbWFnZSBvZiBqdXN0IHRoZSBET1MgcGFydGl0aW9uLiBUaGVyZSBhcmUgYSBudW1iZXIgb2Ygd2F5cyB0byBtb3VudCB0aGUgRE9TIAorcGFydGl0aW9uIHdpdGhpbiB0aGUgaGFyZCBkaXNrIGltYWdlLiBXZSdsbCBkZXNjcmliZSBzb21lIG9mIHRoZW0gaGVyZS4gRm9yIG91ciAKK2V4YW1wbGVzLCB3ZSdsbCBhc3N1bWUgdGhhdCB0aGUgRE9TIHBhcnRpdGlvbiBpcyB0aGUgZmlyc3QgcHJpbWFyeSBwYXJ0aXRpb24gb2YgCithIGhhcmQgZGlzayB3aG9zZSBpbWFnZSBpcyBpbiB0aGUgZmlsZSBgYGRpc2suaW1nYGAuCisKK0EgU2ltcGxlIGJ1dCBEYW5nZXJvdXMgV2F5Cit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorCitUaGUgc2ltcGxlc3QsIGJ1dCBhbHNvIHRoZSBtb3N0IGRhbmdlcm91cywgd2F5IGlzIHRvIGRvIHNvbWUgc2ltcGxlIG1hdGggYW5kIHRvIAordXNlIGFuIG9ic2N1cmUgbW91bnQgb3B0aW9uLiBGaXJzdCwgdXNlIHRoZSBgYGZkaXNrYGAgY29tbWFuZCB0byBmaW5kIG91dCB3aGVyZQordGhlIERPUyBwYXJ0aXRpb24gc3RhcnRzIHdpdGhpbiB0aGUgaGFyZCBkaXNrIGltYWdlLiBUbyBkbyB0aGlzLCB1c2UgdGhlCitjb21tYW5kOjoKKworICAgZmRpc2sgLWwgZGlzay5pbWcKKworWW91IHNob3VsZCBzZWUgb3V0cHV0IHRoYXQgbG9va3MgbGlrZSB0aGlzOjoKKworICAgRGlzayBkaXNrLmltZzogMTA3MyBNQiwgMTA3Mzc0MTgyNCBieXRlcywgMjA5NzE1MiBzZWN0b3JzCisgICBVbml0cyA9IHNlY3RvcnMgb2YgMSAqIDUxMiA9IDUxMiBieXRlcworICAgU2VjdG9yIHNpemUgKGxvZ2ljYWwvcGh5c2ljYWwpOiA1MTIgYnl0ZXMgLyA1MTIgYnl0ZXMKKyAgIEkvTyBzaXplIChtaW5pbXVtL29wdGltYWwpOiA1MTIgYnl0ZXMgLyA1MTIgYnl0ZXMKKyAgIERpc2sgaWRlbnRpZmllcjogMHgwMDAwMDAwMAorCisgICAgICBEZXZpY2UgQm9vdCAgICAgIFN0YXJ0ICAgICAgICAgRW5kICAgICAgQmxvY2tzICAgSWQgIFN5c3RlbQorICAgZGlzay5pbWcxICAgKiAgICAgICAgICA2MyAgICAgMjA2MjM2NyAgICAgMTAzMTE1MisgICA2ICBGQVQxNgorCitGcm9tIHRoZSBgYFN0YXJ0YGAgY29sdW1uLCB5b3UgY2FuIHNlZSB0aGF0IHRoZSBET1MgcGFydGl0aW9uIHN0YXJ0cyBpbiBzZWN0b3IKKzYzIG9mIHRoZSBoYXJkIGRpc2suIFNpbmNlIGEgc2VjdG9yIGlzIGEgNTEyLWJ5dGUgYmxvY2ssIHlvdSBuZWVkIHRvIG11bHRpcGx5Cis2MyBieSA1MTIgaW4gb3JkZXIgdG8gY2FsY3VsYXRlIHRoZSBwYXJ0aXRpb24ncyBieXRlIG9mZnNldDo6CisKKyAgIDYzIHggNTEyID0gMzIyNTYKKworTm93IHlvdSBjYW4gbW91bnQgdGhlIERPUyBwYXJ0aXRpb24gdXNpbmcgdGhhdCBvYnNjdXJlIG9wdGlvbjo6CisKKyAgIG1vdW50IC1vIG9mZnNldD0zMjI1NiBkaXNrLmltZyAvbW50L2RvcworCitCdXQgZG9uJ3QgZm9yZ2V0IHRoZSBhZm9yZS1tZW50aW9uZWQgV2luZG93cyBjcnlwdGljIHNob3J0IGZpbGUgbmFtZSBwcm9ibGVtLiAKK1RoZSBjb21tYW5kIHlvdSBzaG91bGQgcmVhbGx5IHVzZSwgdGhlcmVmb3JlLCBpczo6CisKKyAgIG1vdW50IC1vIG9mZnNldD0zMjI1Nixub251bXRhaWwgZGlzay5pbWcgL21udC9kb3MKKworQmVmb3JlIHlvdSByZXN0YXJ0IHlvdXIgRE9TIHN5c3RlbSwgZG9uJ3QgZm9yZ2V0IHRvIGZpcnN0IHVubW91bnQgdGhlIERPUyAKK3BhcnRpdGlvbiBmcm9tIHlvdXIgTGludXggc3lzdGVtOjoKKworICAgdW1vdW50IC9tbnQvZG9zCisKK1VzaW5nIGBga3BhdHJ4YGAKK35+fn5+fn5+fn5+fn5+fn4KKworQW5vdGhlciB3YXkgdG8gbW91bnQgdGhlIERPUyBwYXJ0aXRpb24sIHdoaWNoIGlzIG11Y2ggc2FmZXIsIGlzIHRvIHVzZSB0aGUgCitgYGtwYXJ0eGBgIGNvbW1hbmQgdG8gY3JlYXRlIGEgbG9vcCBkZXZpY2UgZm9yIHRoZSBkZXNpcmVkIHBhcnRpdGlvbiB3aXRoaW4gdGhlIAoraGFyZCBkaXNrIGltYWdlLiBVc2UgYSBjb21tYW5kIGxpa2UgdGhpczo6CisKKyAgIGtwYXJ0eCAtdiAtcyAtYSBkaXNrLmltZworCisqICBUaGUgYGAtdmBgICh2ZXJib3NlKSBvcHRpb24gdGVsbHMgYGBrcGFydHhgYCB0byBiZSBpbmZvcm1hdGl2ZSwgd2hpY2ggaXMgdGhlCisgICBlYXNpZXN0IHdheSB0byBmaW5kIG91dCB0aGUgbmFtZSBvZiB0aGUgbG9vcCBkZXZpY2UgdGhhdCBpdCB3aWxsIGNyZWF0ZS4KKworKiAgVGhlIGBgLXNgYCAoc3luY2hyb25vdXMpIG9wdGlvbiB0ZWxscyBgYGtwYXJ0eGBgIHRvIHdhaXQgdW50aWwgdGhlIGxvb3AKKyAgIGRldmljZSBoYXMgYmVlbiBjcmVhdGVkIGJ5IGBgdWRldmBgIGJlZm9yZSByZXR1cm5pbmcuCisKKyogIFRoZSBgYC1hYGAgKGFkZCkgb3B0aW9uIHRlbGxzIGBga3BhcnR4YGAgdG8gY3JlYXRlIHRoZSBsb29wIGRldmljZS4KKworWW91IHNob3VsZCBzZWUgb3V0cHV0IGxpa2UgdGhpczo6CisKKyAgIGFkZCBtYXAgbG9vcDBwMSAoMjUzOjExKTogMCAyMDYyMzA1IGxpbmVhciAvZGV2L2xvb3AwIDYzCisKK1NvIHlvdSBub3cga25vdyB0aGF0IHRoZSBsb29wIGRldmljZSB5b3UgbmVlZCB0byBtb3VudCBpcworYGAvZGV2L21hcHBlci9sb29wMHAxYGA6OgorCisgICBtb3VudCAtbyBub251bXRhaWwgL2Rldi9tYXBwZXIvbG9vcDBwMSAvbW50L2RvcworCitXaGVuIHlvdSdyZSBmaW5pc2hlZCwgeW91IG5lZWQgdG8gdW5tb3VudCB0aGUgcGFydGl0aW9uIGFuZCB0byByZW1vdmUgdGhlIGxvb3AgCitkZXZpY2U6OgorCisgICB1bW91bnQgL21udC9kb3MKKyAgIGtwYXJ0eCAtZCBkaXNrLmltZworCitgYERPU0lETEVgYAorLS0tLS0tLS0tLS0KKworYGBET1NJRExFYGAgaXMgYSBET1MgYXBwbGljYXRpb24gdGhhdCBtYW55IHVzZXJzIHJ1biBpbiBvcmRlciB0byBzdG9wIHRoZWlyIAorY29tcHV0ZXIgb3IgdmlydHVhbCBtYWNoaW5lIGZyb20gbmVlZGxlc3NseSBjb25zdW1pbmcgQ1BVIHRpbWUgd2hlbiBET1MgaGFzIAorbm90aGluZyBtZWFuaW5nZnVsIHRvIGRvLiBJZiB5b3UgdXNlIGl0LCBkb24ndCB1c2UgYSAiY29vbGluZyBzdHJhdGVneSIgbW9yZQoraW52YXNpdmUgdGhhbiBgYHdlYWtgYC4gSW4gb3RoZXIgd29yZHMsIGRvbid0IHNwZWNpZnkgbW9yZSB0aGFuIGBgLWZtMWBgLiBVc2luZworYSAiY29vbGluZyBzdHJhdGVneSIgdGhhdCBpcyB0b28gYWdncmVzc2l2ZSB3aWxsIGNhdXNlIGBgRE9TSURMRWBgIHRvIGNvcnJlY3RseQorZGVkdWNlIHRoYXQgdGhlIHN5c3RlbSBpcyBpZGxlIHdoZW4gQlJMVFRZIGhhcyBub3RoaW5nIHRvIGRvLCBidXQgdGhhdCB3aWxsCitjYXVzZSBCUkxUVFkgdG8gc3RvcCBydW5uaW5nLCB0b28sIHdoaWNoIGlzbid0IHdoYXQgeW91IHdhbnQuCisKK1VzaW5nIGBgZG9zZW11YGAgb24gTGludXgKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworSWYgeW91J3JlIHVzaW5nIGBgZG9zZW11YGAgb24gTGludXgsIGFuZCB0aGUgTGludXgga2VybmVsIGlzIDMuMTUsIHRoZW4geW91J2xsIAorbmVlZCB0byBleHBsaWNpdGx5IGVuYWJsZSAxNi1iaXQgc2VnbWVudCBzdXBwb3J0LiBUaGlzIGNhbiBiZSBkb25lIHdpdGggdGhlIAorZm9sbG93aW5nIGNvbW1hbmQ6OgorCisgICBlY2hvIDEgPi9wcm9jL3N5cy9hYmkvbGR0MTYKKworSWYgeW91J2QgbGlrZSB0aGlzIHNldHRpbmcgdG8gdGFrZSBlZmZlY3QgYXV0b21hdGljYWxseSBlYWNoIHRpbWUgeW91IHJlYm9vdCwKK3RoZW4gY3JlYXRlIHRoZSBmaWxlIGBgbGR0MTYuY29uZmBgIGluIHRoZSBkaXJlY3RvcnkgYGAvZXRjL3N5c2N0bC5kL2BgLCAKK2FuZCBwbGFjZSB0aGUgZm9sbG93aW5nIGxpbmUgaW4gaXQ6OgorICAgCisgICBhYmkubGR0MTYgPSAxCisKK01ha2luZyB0aGUgQ3Jvc3MgQ29tcGlsZXIKKz09PT09PT09PT09PT09PT09PT09PT09PT0KKworVGhlIERPUyB2ZXJzaW9uIG9mIEJSTFRUWSBjYW4gYmUgY29tcGlsZWQgb24gTGludXggYnkgdXNpbmcgYSBjcm9zcy1jb21waWxlci4gCitUbyBjcmVhdGUgaXQsIGdldCB0aGUgZm9sbG93aW5nIGFyY2hpdmVzOgorCisqICBgPGZ0cDovL2Z0cC5kZWxvcmllLmNvbS9wdWIvZGpncHAvY3VycmVudC92MmdudS9nY2M0MTBzMi56aXA+YF8KKyogIGA8ZnRwOi8vZnRwLmRlbG9yaWUuY29tL3B1Yi9kamdwcC9jdXJyZW50L3YyL2RqY3J4MjAzLnppcD5gXworCitUaGUgYGBkamNyeDIwMy56aXBgYCBhcmNoaXZlIGNvbnRhaW5zIGEgZmlsZSBuYW1lZCBgYGNyb3NzL2hvd3RvLjMyYGAgdGhhdAorZXhwbGFpbnMgaG93IHRvIGJ1aWxkIGEgY3Jvc3MtY29tcGlsZXIgZm9yIGdjYyAzLjIuIFlvdSBjYW4gYnVpbGQgb25lIGZvciBnY2MKKzQuMSBieSBhcHBseWluZyB0aGUgc2FtZSBpbnN0cnVjdGlvbnMgdG8gdGhlIGBgZ2NjNDEwczIuemlwYGAgYXJjaGl2ZSAobGlzdGVkCithYm92ZSkgaW5zdGVhZCBvZiB0byB0aGUgYGBnY2MzMnMyLnppcGBgIGFyY2hpdmUgKG1lbnRpb25lZCBpbiB0aGUgImhvd3RvIikuCitZb3UgY2FuIGFsc28gdXNlIGEgbW9yZSByZWNlbnQgYGBiaW51dGlsc2BgIHBhY2thZ2UgKDIuMi4yNCB3b3JrcyBmaW5lKS4KKworSWYsIHdoZW4gYnVpbGRpbmcgdGhlIGNyb3NzLWNvbXBpbGVyLCB5b3UgZW5jb3VudGVyIGFuIGVycm9yIHRoYXQgY29tcGxhaW5zIAorYWJvdXQgdGhlIGBgd3JpdGV2YGAgZnVuY3Rpb24gYW5kIHRoZSBgYGlvdmVjYGAgc3RydWN0dXJlIG5vdCBiZWluZyBkZWZpbmVkLAordGhlbiB5b3UgbmVlZCB0byB1cGdyYWRlIHRvIGEgbmV3ZXIgdmVyc2lvbiBvZiBgYGRqY3J4YGAuIFVwZ3JhZGluZyB0bworYGBkamNyeDIwNGBgIGlzIHN1ZmZpY2llbnQuIEl0IGNhbiBiZSBkb3dubG9hZGVkIGZyb20KK2A8ZnRwOi8vZnRwLmRlbG9yaWUuY29tL3B1Yi9kamdwcC9iZXRhL3YyL2RqY3J4MjA0LnppcD5gXy4KKworQW5vdGhlciBjb21wbGV4aXR5IHdoZW4gYnVpbGRpbmcgdGhlIGNyb3NzLWNvbXBpbGVyIGlzIHRoYXQgc29tZSBwYXJ0cyBvZiB0aGUgCitwcm9jZXNzIG5lZWQgYW4gb2xkZXIgdmVyc2lvbiBvZiBgYGF1dG9jb25mYGAgKDIuMTMpIHdoZXJlYXMgb3RoZXIgcGFydHMgb2YgaXQKK25lZWQgYSBuZXdlciB2ZXJzaW9uICgyLjU3KS4gQWxzbywgdGhlIGJ1aWxkIHdvcmtzIGJlc3Qgd2hlbiBhIHNwZWNpZmljIHZlcnNpb24KK29mIGBgYXV0b21ha2VgYCAoMS45LjYpIGlzIHVzZWQuCisKK1dlJ3ZlIHdyaXR0ZW4gYSBzY3JpcHQgdGhhdCBidWlsZHMgdGhlIGNyb3NzLWNvbXBpbGVyLCBhbmQgdGhhdCBhbHNvIHRha2VzIGNhcmUKK29mIGFsbCBvZiB0aGUgaWRpb3N5bmNyYWNpZXMgdGhhdCB3ZSBlbmNvdW50ZXJlZCB3aGVuIGRvaW5nIHNvLgorCitUaGUgYGBta2Rvc3Rvb2xzYGAgU2NyaXB0CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBgYG1rZG9zdG9vbHNgYCBzY3JpcHQgYnVpbGRzIHRoZSBjcm9zcy1jb21waWxlciB0aGF0J3MgbmVlZGVkIGluIG9yZGVyIHRvIAorYnVpbGQgQlJMVFRZIGZvciBET1Mgb24gTGludXguIEl0IHJlc2lkZXMgaW4gdGhlIGBgRE9TL2BgIHN1YmRpcmVjdG9yeSBvZgorQlJMVFRZJ3Mgc291cmNlIHRyZWUuCisKK0Jhc2ljIE9wdGlvbnMKK35+fn5+fn5+fn5+fn4KKworLi4gaW5jbHVkZTo6IGNvbW1vbi1vcHRpb25zLnJzdAorCitCdWlsZCBEaXJlY3Rvcmllcworfn5+fn5+fn5+fn5+fn5+fn4KKworQSBudW1iZXIgb2YgZGlyZWN0b3JpZXMgYXJlIHVzZWQgZHVyaW5nIHRoZSBidWlsZCBwcm9jZXNzLiBFYWNoIG9mIHRoZW0gY2FuIGJlCitleHBsaWNpdGx5IHNwZWNpZmllZCB2aWEgYW4gb3B0aW9uLCBhbmQgYWxzbyBoYXMgYSBkZWZhdWx0IHN1YmRpcmVjdG9yeSB3aXRoaW4KK3RoZSBkaXJlY3RvcnkgdGhhdCBjb250YWlucyB0aGUgc2NyaXB0IGl0c2VsZi4gRWFjaCBvZiB0aGUgZGVmYXVsdAorc3ViZGlyZWN0b3JpZXMgbWF5IGJlIGEgc3ltYm9saWMgbGluayB0aGF0IHBvaW50cyBzb21ld2hlcmUgZWxzZS4gVGhlc2UKK2RpcmVjdG9yaWVzIGFyZToKKworICAgPT09PT09PT0gID09PT09PSAgPT09PT09PT09CisgICBQdXJwb3NlICAgT3B0aW9uICBEZWZhdWx0CisgICAtLS0tLS0tLSAgLS0tLS0tICAtLS0tLS0tLS0KKyAgIGFyY2hpdmVzICBgYC1hYGAgIEFyY2hpdmVzLworICAgYnVpbGQgICAgIGBgLWJgYCAgQnVpbGQvCisgICBpbnN0YWxsICAgYGAtaWBgICBUb29scy8KKyAgID09PT09PT09ICA9PT09PT0gID09PT09PT09PQorCitUaGUgKiphcmNoaXZlcyoqIGRpcmVjdG9yeSBpcyB0aGUgb25seSBvbmUgdGhhdCB5b3UgbmVlZCB0byBwcmVwYXJlLiBJdCBtdXN0Citjb250YWluIGFsbCBvZiB0aGUgYXJjaGl2ZXMgdGhhdCBhcmUgbmVlZGVkIGluIG9yZGVyIHRvIGJ1aWxkIHRoZQorY3Jvc3MtY29tcGlsZXIuIERKR1BQIGFyY2hpdmVzIGhhdmUgdGhlIGBgLnppcGBgIGV4dGVuc2lvbiwgYW5kIEdudSBhcmNoaXZlcworaGF2ZSB0aGUgYGAudGFyLmd6YGAgZXh0ZW5zaW9uLiBTZWUgYFJlcXVpcmVkIEFyY2hpdmVzYF8gZm9yIHRoZSBsaXN0LgorCitUaGUgKipidWlsZCoqIGRpcmVjdG9yeSB3aWxsIGNvbnRhaW4gYWxsIG9mIHRoZSBmaWxlcyB0aGF0IGFyZSBpbnRpcmltbHkgbmVlZGVkCitkdXJpbmcgdGhlIGJ1aWxkIHByb2Nlc3MuIEl0J3MgY3JlYXRlZCBpZiBpdCBkb2Vzbid0IGFscmVhZHkgZXhpc3QuIElmIGl0IGRvZXMKK2FscmVhZHkgZXhpc3QgdGhlbiBpdCdzIGVtcHRpZWQgYXQgdGhlIHN0YXJ0IG9mIHRoZSBidWlsZCBwcm9jZXNzLiBJdCdzIGFsc28KK2VtcHRpZWQgdXBvbiB0aGUgY29tcGxldGlvbiBvZiBhIHN1Y2Nlc3NmdWwgYnVpbGQuIFRoaXMgZGlyZWN0b3J5IG5lZWRzIHRvIGJlCitvbiBhIHZvbHVtZSB0aGF0IGhhcyBhdCBsZWFzdCAxLjVHQiBvZiBmcmVlIGZpbGUgc3BhY2UuCisKK1RoZSAqKmluc3RhbGwqKiBkaXJlY3RvcnkgaXMgd2hlcmUgdGhlIGNyb3NzLWNvbXBpbGVyIHRvb2xzIGFyZSB0byBiZQoraW5zdGFsbGVkLiBJdCdzIGNyZWF0ZWQgaWYgaXQgZG9lc24ndCBhbHJlYWR5IGV4aXN0LiBJZiBpdCBkb2VzIGFscmVhZHkgZXhpc3QKK3RoZW4gaXQncyBlbXB0aWVkIGF0IHRoZSBzdGFydCBvZiB0aGUgYnVpbGQgcHJvY2Vzcy4KKworUmVxdWlyZWQgQXJjaGl2ZXMKK35+fn5+fn5+fn5+fn5+fn5+CisKK1lvdSdsbCBuZWVkIHRoZSBmb2xsb3dpbmcgREpHUFAgYXJjaGl2ZXM6CisKKyAgID09PT09PT09PT09PT09PT0gID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgICBBcmNoaXZlIE5hbWUgICAgICBEb3dubG9hZCBGcm9tCisgICAtLS0tLS0tLS0tLS0tLS0tICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgYGBkamNyeDIwNC56aXBgYCAgYDxmdHA6Ly9mdHAuZGVsb3JpZS5jb20vcHViL2RqZ3BwL2JldGEvdjI+YF8KKyAgIGBgZ2NjNDMyczIuemlwYGAgIGA8ZnRwOi8vZnRwLmRlbG9yaWUuY29tL3B1Yi9kamdwcC9jdXJyZW50L3YyZ251PmBfCisgICA9PT09PT09PT09PT09PT09ICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitZb3UnbGwgbmVlZCB0aGUgZm9sbG93aW5nIEdudSBhcmNoaXZlczoKKworICAgPT09PT09PT09PT09PT09PT09PT09PT09PSAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgICBBcmNoaXZlIE5hbWUgICAgICAgICAgICAgICBEb3dubG9hZCBGcm9tCisgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgIGBgYXV0b2NvbmYtMi4xMy50YXIuZ3pgYCAgIGA8aHR0cDovL2Z0cC5nbnUub3JnL2dudS9hdXRvY29uZj5gXworICAgYGBhdXRvY29uZi0yLjU3LnRhci5nemBgICAgYDxodHRwOi8vZnRwLmdudS5vcmcvZ251L2F1dG9jb25mPmBfCisgICBgYGF1dG9tYWtlLTEuOS42LnRhci5nemBgICBgPGh0dHA6Ly9mdHAuZ251Lm9yZy9nbnUvYXV0b21ha2U+YF8KKyAgIGBgYmludXRpbHMtMi4yNC50YXIuZ3pgYCAgIGA8aHR0cDovL2Z0cC5nbnUub3JnL2dudS9iaW51dGlscz5gXworICAgYGBnY2MtNC4zLjIudGFyLmd6YGAgICAgICAgYDxodHRwOi8vZ2NjLmdudS5vcmcvbWlycm9ycy5odG1sPmBfCisgICA9PT09PT09PT09PT09PT09PT09PT09PT09ICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworSWYgeW91J2QgcHJlZmVyIHRvIGJ1aWxkIGEgZGlmZmVyZW50IHZlcnNpb24gb2YgZ2NjLCB0aGVyZSBhcmUgdHdvIGltcG9ydGFudAordGhpbmdzIHRvIGtub3cuIE9uZSBpcyB0aGF0IHlvdSBuZWVkIHRoZSBgYGdjYypzMi56aXBgYCBhcmNoaXZlcyBmcm9tIAorREpHUFAuIFRoZSBvdGhlciBpcyB0aGF0IHRoZSB2ZXJzaW9ucyBvZiB0aGUgR251IGFuZCBESkdQUCBnY2MgYXJjaGl2ZXMgbXVzdCAKK21hdGNoLiBJZiwgZm9yIGV4YW1wbGUsIHlvdSdkIGxpa2UgdG8gYnVpbGQgZ2NjLTQuMS4yLCB0aGVuIHlvdSdsbCBuZWVkIAorYm90aCBgYGdjYy00LjEuMi50YXIuZ3pgYCBhbmQgYGBnY2M0MTJzMi56aXBgYC4gVGhlIHJlYXNvbiB3ZSB1c2UgZ2NjLTQuMy4yIGluCitvdXIgZXhhbXBsZXMgaGVyZSBpcyBiZWNhdXNlIGl0J3MgdGhlIGhpZ2hlc3QgdmVyc2lvbiBvZiBnY2MgZm9yIHdoaWNoIHdlIGNvdWxkCitmaW5kIGFuIGBgczIuemlwYGAgREpHUFAgYXJjaGl2ZS4KKworSWYgeW91IG9ubHkgaGF2ZSBvbmUgR251IGFyY2hpdmUgZm9yIGdjYyBpbiB5b3VyICoqYXJjaGl2ZXMqKiBkaXJlY3RvcnkgdGhlbgordGhhdCB2ZXJzaW9uIHdpbGwgYmUgYnVpbHQuIElmIHlvdSBoYXZlIG1vcmUgdGhhbiBvbmUgdGhlbiB5b3UnbGwgbmVlZCB0byB1c2UKK3RoZSBgYC1nYGAgKGdjYykgb3B0aW9uIChlLmcuIGBgLWcgNC4zLjJgYCkgdG8gZXhwbGljaXRseSBzcGVjaWZ5IHRoZSB2ZXJzaW9uCit0aGF0IGlzIHRvIGJlIGJ1aWx0LgorCitCdWlsZGluZyBCUkxUVFkKKz09PT09PT09PT09PT09PQorCitDb25maWd1cmluZyB0aGUgQnVpbGQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitCZWZvcmUgY29uZmlndXJpbmcgQlJMVFRZLCB5b3UgbXVzdCBhZGQgdGhlIGBgYmluL2BgIHN1YmRpcmVjdG9yeSBvZiB0aGUgCitjcm9zcy1jb21waWxlciB0b29scyB0byB5b3VyIGNvbW1hbmQgc2VhcmNoIHBhdGguIElmLCBmb3IgZXhhbXBsZSwgdGhlCitjcm9zcy1jb21waWxlciBpcyBpbnN0YWxsZWQgaW4gYGAvdXNyL2xvY2FsL2Rvc3Rvb2xzYGAsIHRoZW4gYWRkIGl0cyB0b29scyB0bworeW91ciBjb21tYW5kIHNlYXJjaCBwYXRoIHdpdGggYSBjb21tYW5kIGxpa2UgdGhpczo6CisKKyAgIGV4cG9ydCBQQVRIPSIvdXNyL2xvY2FsL2Rvc3Rvb2xzL2JpbjokUEFUSCIKKworWW91J2xsIGFsc28gbmVlZCB0byBlbnN1cmUgdGhhdCBnY2MncyBgYC1mZ251ODktaW5saW5lYGAgb3B0aW9uIGlzIHVzZWQuIFRoaXMKK2lzIGRvbmUgYnkgc2V0dGluZyB0aGUgYGBDRkxBR1NgYCBlbnZpcm9ubWVudCB2YXJpYWJsZSBiZWZvcmUgY29uZmlndXJpbmcuIEZvciAKK2V4YW1wbGU6OgorCisgICBleHBvcnQgQ0ZMQUdTPSItZmdudTg5LWlubGluZSIKKworWW91IHNob3VsZCBiZSBhYmxlIHRvIHVzZSBhIGNvbmZpZ3VyZSBjb21tYW5kIGxpa2UgdGhpcyBvbmU6OgorCisgICAuL2NvbmZpZ3VyZSBcCisgICAgICAtLXByZWZpeD0vYnJsdHR5LWRvcyAtLWhvc3Q9aTU4Ni1wYy1tc2Rvc2RqZ3BwIFwKKyAgICAgIC0tZW5hYmxlLXJlbG9jYXRhYmxlLWluc3RhbGwgXAorICAgICAgLS1kaXNhYmxlLWFwaSAtLWRpc2FibGUtaWN1IC0tZGlzYWJsZS14IFwKKyAgICAgIC0td2l0aG91dC11c2ItcGFja2FnZSAtLXdpdGhvdXQtYmx1ZXRvb3RoLXBhY2thZ2UgXAorICAgICAgLS13aXRob3V0LWxpYmJyYWlsbGUgLS13aXRoLWJyYWlsbGUtZHJpdmVyPS12cixhbGwgXAorICAgICAgLS13aXRob3V0LWVzcGVhayAtLXdpdGhvdXQtZXNwZWFrLW5nIFwKKyAgICAgIC0td2l0aG91dC1mbGl0ZSAtLXdpdGhvdXQtc3BlZWNoZCBcCisgICAgICAtLXdpdGgtc3BlZWNoLWRyaXZlcj1hbGwgXAorICAgICAgLS13aXRoLXNjcmVlbi1kcml2ZXI9cGIsLWFsbAorCitUaGUgYGBjZmctZG9zYGAgU2NyaXB0Cit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisKK1dlIHByb3ZpZGUgYSBzY3JpcHQgbmFtZWQgYGBjZmctZG9zYGAsIHdoaWNoIHJlc2lkZXMgaW4gdGhlIHRvcC1sZXZlbCBkaXJlY3RvcnkKK29mIEJSTFRUWSdzIHNvdXJjZSB0cmVlLCB0aGF0IHNob3VsZCBtYWtlIGNvbmZpZ3VyaW5nIEJSTFRUWSBmb3IgRE9TIGEgYml0CitlYXNpZXIuIEl0IHJ1bnMgdGhlIGBgY29uZmlndXJlYGAgc2NyaXB0IGZvciB5b3UsIGdpdmluZyBpdCBhbGwgb2YgdGhlIG9wdGlvbnMKK3RoYXQgYXJlIHJlcXVpcmVkIGZvciBhIHN1Y2Nlc3NmdWwgRE9TIGJ1aWxkLiBZb3UgY2FuIHNwZWNpZnkgYWRkaXRpb25hbAorYGBjb25maWd1cmVgYCBvcHRpb25zIChhbHRob3VnaCB0aGF0IHNob3VsZG4ndCBiZSBuZWNlc3NhcnkpIHNpbXBseSBieSBnaXZpbmcKK3RoZW0gdG8gYGBjZmctZG9zYGAuIFRoZSBvbmx5IHRoaW5nIHlvdSBkbyBuZWVkIHRvIGRvIGlzIHRvIHBvaW50IHRoZQorYGBET1NfVE9PTFNfUk9PVGBgIGVudmlyb25tZW50IHZhcmlhYmxlIHRvIHRoZSB0b3AtbGV2ZWwgZGlyZWN0b3J5IG9mIHlvdXIgCitjcm9zcy1jb21waWxlciB0b29scy4gRm9yIGV4YW1wbGU6OgorCisgICBleHBvcnQgRE9TX1RPT0xTX1JPT1Q9L3Vzci9sb2NhbC9kb3N0b29scworCitUaGUgYGBta2Rvc2FyY2BgIFNjcmlwdAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIGBgbWtkb3NhcmNgYCBzY3JpcHQsIHdoaWNoIHJlc2lkZXMgaW4gdGhlIGBgRE9TL2BgIHN1YmRpcmVjdG9yeSBvZiBCUkxUVFkncworc291cmNlIHRyZWUsIGNyZWF0ZXMgYSBET1MgYXJjaGl2ZSAoYSBgYC56aXBgYCBmaWxlKSBvZiBCUkxUVFkuIEl0IGRvZXMKK2V2ZXJ5dGhpbmcgKGBgY29uZmlndXJlYGAsIGBgbWFrZWBgLCAuLi4sIGBgemlwYGApIGV4Y2VwdCBmb3IgYnVpbGRpbmcgdGhlCitjcm9zcy1jb21waWxlci4gSWYgeW91IGRvbid0IGFscmVhZHkgaGF2ZSBhIGNyb3NzLWNvbXBpbGVyIGZvciBET1MgdGhlbiBzZWUKK2BNYWtpbmcgdGhlIENyb3NzIENvbXBpbGVyYF8gZm9yIGluc3RydWN0aW9ucyBvbiBob3cgdG8gYnVpbGQgb25lLgorCitCZWZvcmUgcnVubmluZyB0aGlzIHNjcmlwdCwgZW5zdXJlIHRoYXQgdGhlIGZvbGxvd2luZyBjb21tYW5kcyBoYXZlIGJlZW4gCitpbnN0YWxsZWQgb24geW91ciBzeXN0ZW06CisKKyogIGxpbnV4ZG9jCisqICB1bml4MmRvcworKiAgemlwCisKK1lvdSdsbCBhbHNvIG5lZWQgdG8gcG9pbnQgdGhlIGBgRE9TX1RPT0xTX1JPT1RgYCBlbnZpcm9ubWVudCB2YXJpYWJsZSB0byB0aGUgCit0b3AtbGV2ZWwgZGlyZWN0b3J5IG9mIHRoZSBjcm9zcy1jb21waWxlciB0b29scy4gRm9yIGV4YW1wbGU6OgorCisgICBleHBvcnQgRE9TX1RPT0xTX1JPT1Q9L3Vzci9sb2NhbC9kb3N0b29scworCitQYXJhbWV0ZXJzCit+fn5+fn5+fn5+CisKK1RoZSBzY3JpcHQgcmVxdWlyZXMgb25seSBvbmUgcGFyYW1ldGVyIC0gdGhlIHBhdGggdG8gdGhlIHRvcC1sZXZlbCBkaXJlY3Rvcnkgb2YKK0JSTFRUWSdzIHNvdXJjZSB0cmVlLiBJZiwgZm9yIGV4YW1wbGUsIHlvdSdyZSBpbiB0aGUgYGBET1MvYGAgc3ViZGlyZWN0b3J5IG9mIAorQlJMVFRZJ3Mgc291cmNlIHRyZWUgKHdoZXJlIHRoZSBzY3JpcHQgcmVzaWRlcyksIHRoZW4gaW52b2tlIGl0IGxpa2UgdGhpczo6CisKKyAgIC4vbWtkb3NhcmMgLi4KKworSWYgeW91J3JlIGluIHRoZSB0b3AtbGV2ZWwgZGlyZWN0b3J5IG9mIEJSTFRUWSdzIHNvcnVjZSB0cmVlIHRoZW4gaW52b2tlIGl0CitsaWtlIHRoaXM6OgorCisgICBET1MvbWtkb3NhcmMgLgorCitPcHRpb25zCit+fn5+fn5+CisKK2BgLWFgYCAoYXJjaGl2ZSkKKyAgIFNwZWNpZnkgdGhlIG5hbWUgb2YgdGhlIGFyY2hpdmUgKGBgLnppcGBgKSBmaWxlIHRoYXQgd2lsbCBiZSBjcmVhdGVkLiBUaGUKKyAgIGRlZmF1bHQgYXJjaGl2ZSBuYW1lIGlzIGBgYnJsdHR5LWRvc2BgLgorCitgYC1vYGAgKG92ZXJ3cml0ZSkKKyAgIEFsbG93IGFuIGFscmVhZHktZXhpc3RpbmcgYXJjaGl2ZSB0byBiZSBvdmVyd3JpdHRlbi4gVGhlIGRlZmF1bHQgaXMgdGhhdCBhbgorICAgYWxyZWFkeS1leGlzdGluZyBhcmNoaXZlIHdvbid0IGJlIG92ZXJ3cml0dGVuLgorCitgYC1pYGAgKGluc3RhbGwpCisgICBTcGVjaWZ5IHRoZSBuYW1lIG9mIHRoZSBzdWJkaXJlY3Rvcnkgb24gdGhlIHRhcmdldCBET1Mgc3lzdGVtIGludG8gd2hpY2ggdGhlCisgICBhcmNoaXZlIHdpbGwgYmUgdW5wYWNrZWQuIEl0cyBkZWZhdWx0IG5hbWUgaXMgYGBCUkxUVFlgYC4gSXQgd2lsbCBiZSBhbgorICAgaW1tZWRpYXRlIHN1YmRpcmVjdG9yeSBvZiB0aGUgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeSB3aGVuIHRoZSBhcmNoaXZlIGlzCisgICBiZWluZyB1bnBhY2tlZC4gSXQgd2lsbCBiZSBjcmVhdGVkIGlmIGl0IGRvZXNuJ3QgYWxyZWFkeSBleGlzdC4KKworYGAtc2BgIChzaGVsbCkKKyAgIEludm9rZSBhbiBpbnRlcmFjdGl2ZSBzaGVsbCBqdXN0IGJlZm9yZSB0aGUgYXJjaGl2ZSBpcyBjcmVhdGVkIHNvIHRoYXQgeW91CisgICBjYW4gaW5zcGVjdCBhbmQvb3IgbW9kaWZ5IHdoYXQgd2lsbCBiZSBpbiB0aGUgYXJjaGl2ZS4gVGhlIGN1cnJlbnQgd29ya2luZworICAgZGlyZWN0b3J5IGlzIHNldCB0byB0aGUgdG9wLWxldmVsIGRpcmVjdG9yeSBvZiB0aGUgY29udGVudC4KKyAgIFRoZSBzaGVsbCBzcGVjaWZpZWQgYnkgdGhlIGBgU0hFTExgYCBlbnZpcm9ubWVudCB2YXJpYWJsZSBpcyB1c2VkLiBJZiBpdAorICAgaXNuJ3Qgc2V0IHRoZW4gYGAvYmluL3NoYGAgaXMgYXNzdW1lZC4KKworLi4gaW5jbHVkZTo6IGNvbW1vbi1vcHRpb25zLnJzdAorCmRpZmYgLS1naXQgYS9Eb2N1bWVudHMvUkVBRE1FLkRldmljZXMgYi9Eb2N1bWVudHMvUkVBRE1FLkRldmljZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjgyYTU0OQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50cy9SRUFETUUuRGV2aWNlcwpAQCAtMCwwICsxLDI5MCBAQAorfn5+fn5+fn5+fn5+fn5+fn5+CitEZXZpY2UgSWRlbnRpZmllcnMKK35+fn5+fn5+fn5+fn5+fn5+fgorCisuLiBpbmNsdWRlOjogcHJvbG9ndWUucnN0CisKK0Rlc2NyaXB0aW9uCis9PT09PT09PT09PQorCitUaGUgZ2VuZXJhbCBzeW50YXggb2YgYSBkZXZpY2UgaWRlbnRpZmllciBpczoKKworLi4gcGFyc2VkLWxpdGVyYWw6OiBxdWFsaWZpZXI6cGFyYW1ldGVyPXZhbHVlKy4uLgorCitNb3JlIHNwZWNpZmljYWxseSwgd2l0aCBbYnJhY2tldHNdIG1lYW5pbmcgb3B0aW9uYWwsIHRoZSBzeW50YXggaXM6CisKKy4uIHBhcnNlZC1saXRlcmFsOjogW3F1YWxpZmllcjpdW3BhcmFtZXRlcj1ddmFsdWVbK3BhcmFtZXRlcj12YWx1ZV0uLi4KKworVGhlIHF1YWxpZmllciBzcGVjaWZpZXMgd2hpY2ggY2xhc3Mgb2YgZGV2aWNlIGlzIGJlaW5nIGlkZW50aWZpZWQuCitJdCBpcyBzZXBhcmF0ZWQgZnJvbSB0aGUgcmVzdCBvZiB0aGUgZGV2aWNlIGlkZW50aWZpZXIgYnkgYSBjb2xvbiAoYGA6YGApLgorSXQgbWF5IGJlIG9uZSBvZjoKKworICAgPT09PT09PT09PSAgPT09PT09PT09PT09PT09PT09PT09PT0KKyAgIFF1YWxpZmllciAgIEFzc3VtZWQgRmlyc3QgUGFyYW1ldGVyCisgICAtLS0tLS0tLS0tICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgc2VyaWFsOiAgICAgbmFtZT0KKyAgIHVzYjogICAgICAgIHNlcmlhbE51bWJlcj0KKyAgIGJsdWV0b290aDogIGFkZHJlc3M9CisgICBoaWQ6ICAgICAgICBhZGRyZXNzPQorICAgbnVsbDoKKyAgID09PT09PT09PT0gID09PT09PT09PT09PT09PT09PT09PT09CisKK1RoZSBxdWFsaWZpZXIgaXMgY2FzZSBpbnNlbnNpdGl2ZSwgYW5kIGFueSBhYmJyZXZpYXRpb24gbWF5IGJlIHVzZWQuCitGb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSAodG8gd2hlbiBhIGRldmljZSBpZGVudGlmaWVyIHdhcworc3RyaWN0bHkgaW50ZXJwcmV0ZWQgYXMgdGhlIGFic29sdXRlIHBhdGggdG8gYSBzZXJpYWwgZGV2aWNlKSwKK3RoZSBxdWFsaWZpZXIgKGFsb25nIHdpdGggaXRzIGNvbG9uIGRlbGltaXRlcikgaXMgb3B0aW9uYWwsCithbmQsIGlmIGl0IGlzbid0IHN1cHBsaWVkLCBgYHNlcmlhbGBgIGlzIGFzc3VtZWQuCisKK09uZSBvciBtb3JlIHBhcmFtZXRlcnMgbWF5IGJlIHN1cHBsaWVkIGFmdGVyIHRoZSBxdWFsaWZpZXIuCitFYWNoIHBhcmFtZXRlciBpcyBzcGVjaWZpZWQgYXMgaXRzIG5hbWUgYW5kIGl0cyB2YWx1ZSwKK2luIHRoYXQgb3JkZXIsIHNlcGFyYXRlZCBieSBhbiBlcXVhbHMgKGBgPWBgKSBzaWduLgorUGFyYW1ldGVycyBhcmUgc2VwYXJhdGVkIGZyb20gb25lIGFub3RoZXIgYnkgYSBwbHVzIChgYCtgYCkgc2lnbi4KK1BhcmFtZXRlciBuYW1lcyBhcmUgY2FzZSBpbnNlbnNpdGl2ZSwgYW5kIGFueSBhYmJyZXZpYXRpb24gbWF5IGJlIHVzZWQuCitTdXBwbHlpbmcgYSB6ZXJvLWxlbmd0aCB2YWx1ZSBtZWFucyB0byB1c2UgdGhlIHBhcmFtZXRlcidzIGRlZmF1bHQgdmFsdWUuCisKK0ZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5CisodG8gd2hlbiBkZXZpY2UgaWRlbnRpZmllciBwYXJhbWV0ZXJzIHdlcmVuJ3Qgc3VwcG9ydGVkKSwKK3RoZSBmaXJzdCBzdXBwbGllZCBwYXJhbWV0ZXIgaXMgc3BlY2lhbAoraW4gdGhhdCBpdHMgbmFtZSAoYWxvbmcgd2l0aCBpdHMgZXF1YWxzIHNpZ24gZGVsaW1pdGVyKSBpcyBvcHRpb25hbC4KK0lmIHRoZSBuYW1lIG9mIHRoZSBmaXJzdCBwYXJhbWV0ZXIgaXNuJ3Qgc3VwcGxpZWQgdGhlbiB0aGUKK2NsYXNzLWRlcGVuZGVudCBwYXJhbWV0ZXIgdGhhdCBtb3N0IHNwZWNpZmljYWxseSBpZGVudGlmaWVzIHRoZSBkZXZpY2UgaXMgYXNzdW1lZC4KK1NlZSB0aGUgdGFibGUgYWJvdmUgZm9yIHdoaWNoIHBhcmFtZXRlciBpcyBhc3N1bWVkIGZvciBlYWNoIGNsYXNzLgorCitJdCBpc24ndCBwb3NzaWJsZSB0byBzdXBwbHkgbm8gcGFyYW1ldGVycyBhdCBhbGwuCitTcGVjaWZ5aW5nIG9ubHkgdGhlIHF1YWxpZmllciBpcyBlcXVpdmFsZW50IHRvIGFsc28gc3BlY2lmeWluZworYSB6ZXJvLWxlbmd0aCB2YWx1ZSBmb3IgdGhlIGFzc3VtZWQgZmlyc3QgcGFyYW1ldGVyIGZvciB0aGF0IGNsYXNzLgorRm9yIGV4YW1wbGUsIHNwZWNpZnlpbmcgYGB1c2I6YGAgaXMgZXF1aXZhbGVudCB0byBzcGVjaWZ5aW5nIGBgdXNiOnNlcmlhbE51bWJlcj1gYC4KKworQW4gZXhhbXBsZSB0byBpbGx1c3RyYXRlIHRoZSBvcHRpb25hbGl0eSBvZiBib3RoIHRoZSBxdWFsaWZpZXIKK2FuZCB0aGUgbmFtZSBvZiB0aGUgZmlyc3Qgc3VwcGxpZWQgcGFyYW1ldGVyOgorCisqIE9uIExpbnV4LCB0aGUgbmFtZSBvZiB0aGUgZmlyc3Qgc2VyaWFsIGRldmljZSBpcyBgYHR0eVMwYGAuCisgIEFsbCBvZiB0aGUgZm9sbG93aW5nIGRldmljZSBpZGVudGlmaWVycyByZWZlciB0byB0aGUgc2FtZSBzZXJpYWwgZGV2aWNlOjoKKworICAgIHNlcmlhbDpuYW1lPXR0eVMwCisgICAgc2VyaWFsOnR0eVMwCisgICAgdHR5UzAKKyAgICBuYW1lPXR0eVMwCisKK1NlcmlhbCBEZXZpY2UgSWRlbnRpZmllcnMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworU2VyaWFsIGRldmljZSBpZGVudGlmaWVycyBzdXBwb3J0IHRoZSBmb2xsb3dpbmcgcGFyYW1ldGVyczoKKworICAgPT09PT09PT09PT09PT09ICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgIE5hbWUgICAgICAgICAgICAgVmFsdWUKKyAgIC0tLS0tLS0tLS0tLS0tLSAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICBgYG5hbWVgYCAgICAgICAgIG5hbWUgb2YsIHJlbGF0aXZlIHBhdGggdG8sIG9yIGFic29sdXRlIHBhdGggdG8gdGhlIGRldmljZQorICAgYGBiYXVkYGAgICAgICAgICB0aGUgZGF0YSB0cmFuc21pc3Npb24vcmVjZXB0aW9uIHJhdGUgKGJpdHMgcGVyIHNlY29uZCkKKyAgIGBgZGF0YUJpdHNgYCAgICAgdGhlIG51bWJlciBvZiBkYXRhIGJpdHMgcGVyIGNoYXJhY3RlcgorICAgYGBzdG9wQml0c2BgICAgICB0aGUgbnVtYmVyIG9mIHN0b3AgYml0cyBwZXIgY2hhcmFjdGVyCisgICBgYHBhcml0eWBgICAgICAgIGBgbm9uZWBgLCBgYG9kZGBgLCBgYGV2ZW5gYCwgYGBzcGFjZWBgLCBgYG1hcmtgYAorICAgYGBmbG93Q29udHJvbGBgICBgYG5vbmVgYCwgYGBoYXJkd2FyZWBgCisgICA9PT09PT09PT09PT09PT0gID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitBbGwgb2YgdGhlIHBhcmFtZXRlcnMgYXJlIG9wdGlvbmFsLAorYWx0aG91Z2ggdGhlIGBgbmFtZT1gYCBwYXJhbWV0ZXIgc2hvdWxkIGJlIHN1cHBsaWVkLgorSXQgc2hvdWxkbid0IG5vcm1hbGx5IGJlIG5lY2Vzc2FyeSB0byBzdXBwbHkgYW55IG9mIHRoZSBvdGhlcnMsCitlc3BlY2lhbGx5IHNpbmNlLCBpbiBtb3N0IGNhc2VzLCB0aGUgYnJhaWxsZSBkcml2ZXIgb3ZlcnJpZGVzIHRoZW0uCisKK2BgbmFtZT1gYAorICAgU3BlY2lmeSB0aGUgaG9zdCBkZXZpY2UgdG8gdXNlLiBJdCBtdXN0IGJlIHRoZSBuYW1lIG9mIHRoZSBkZXZpY2UsIHRoZQorICAgcmVsYXRpdmUgcGF0aCB0byB0aGUgZGV2aWNlLCBvciB0aGUgYWJzb2x1dGUgcGF0aCB0byB0aGUgZGV2aWNlLiBJZiBpdCdzIGVpdGhlcgorICAgYSBuYW1lIG9yIGEgcmVsYXRpdmUgcGF0aCB0aGVuIHRoZSBob3N0J3MgZGV2aWNlIGRpcmVjdG9yeSAodXN1YWxseSBgYC9kZXZgYAorICAgb24gVW5peC1iYXNlZCBwbGF0Zm9ybXMpIGlzIHVzZWQuIElmIHRoaXMgcGFyYW1ldGVyIGlzbid0IHN1cHBsaWVkIHRoZW4gdGhlCisgICBwcmltYXJ5IChmaXJzdCkgc2VyaWFsIGRldmljZSBpcyBhc3N1bWVkLgorCitgYGJhdWQ9YGAKKyAgIFNwZWNpZnkgdGhlIHNwZWVkLCBpbiBiaXRzIHBlciBzZWNvbmQsIGF0IHdoaWNoIHRvIGNvbW11bmljYXRlIHdpdGggdGhlCisgICBkZXZpY2UuIEl0IG11c3QgYmUgYSBwb3NpdGl2ZSBpbnRlZ2VyLiBUeXBpY2FsIHZhbHVlcyBhcmU6IGBgOTYwMGBgLCBgYDE5MjAwYGAsCisgICBgYDM4NDAwYGAsIGBgNTc2MDBgYCwgYGAxMTUyMDBgYC4gSWYgdGhpcyBwYXJhbWV0ZXIgaXNuJ3Qgc3VwcGxpZWQgdGhlbgorICAgYGA5NjAwYGAgaXMgYXNzdW1lZC4KKworYGBkYXRhQml0cz1gYAorICAgU3BlY2lmeSB0aGUgbnVtYmVyIG9mIGJpdHMgdG8gdXNlIHRvIHJlcHJlc2VudCBhIGNoYXJhY3Rlciwgbm90IGluY2x1ZGluZworICAgYW55IG1ldGFkYXRhIChzdGFydCBiaXQsIHN0b3AgYml0KHMpLCBwYXJpdHksIGV0YykuIEl0IG11c3QgYmUgYSBwb3NpdGl2ZSBpbnRlZ2VyLAorICAgYW5kIGlzIHVzdWFsbHkgd2l0aGluIHRoZSByYW5nZSBgYDVgYC1gYDhgYC4gSWYgdGhpcyBwYXJhbWV0ZXIgaXNuJ3QKKyAgIHN1cHBsaWVkIHRoZW4gYGA4YGAgaXMgYXNzdW1lZC4KKworYGBzdG9wQml0cz1gYAorICAgU3BlY2lmeSB0aGUgbnVtYmVyIG9mIHN0b3AgYml0cyB0byBpbmplY3QgYWZ0ZXIgYSBjaGFyYWN0ZXIgaGFzIGJlZW4KKyAgIHRyYW5zbWl0dGVkIGFuZCB0byBleHBlY3QgYWZ0ZXIgYSBjaGFyYWN0ZXIgaGFzIGJlZW4gcmVjZWl2ZWQuIEl0IG11c3QgYmUKKyAgIGEgcG9zaXRpdmUgaW50ZWdlciwgYW5kIGlzIHVzdWFsbHkgZWl0aGVyIGBgMWBgIChmb3IgaGlnaGVyIHNwZWVkcykgb3IgYGAyYGAgKGZvcgorICAgbG93ZXIgc3BlZWRzKS4gSWYgdGhpcyBwYXJhbWV0ZXIgaXNuJ3Qgc3VwcGxpZWQgdGhlbiBgYDFgYCBpcyBhc3N1bWVkLgorCitgYHBhcml0eT1gYAorICAgU3BlY2lmeSB0aGUgdHlwZSBvZiBlcnJvciBkZXRlY3Rpb24gdG8gdXNlLiBJdCBtdXN0IGJlIG9uZSBvZjogYGBub25lYGAsCisgICBgYG9kZGBgLCBgYGV2ZW5gYCwgYGBzcGFjZWBgLCBgYG1hcmtgYC4gSWYgdGhpcyBwYXJhbWV0ZXIgaXNuJ3Qgc3VwcGxpZWQKKyAgIHRoZW4gYGBub25lYGAgaXMgYXNzdW1lZC4KKworYGBmbG93Q29udHJvbD1gYAorICAgU3BlY2lmeSB0aGUga2luZCBvZiBmbG93IGNvbnRyb2wgdG8gdXNlLiBJdCBtdXN0IGJlIG9uZSBvZjogYGBub25lYGAsCisgICBgYGhhcmR3YXJlYGAuIElmIHRoaXMgcGFyYW1ldGVyIGlzbid0IHN1cHBsaWVkIHRoZW4gYGBub25lYGAgaXMgYXNzdW1lZC4KKworVVNCIERldmljZSBJZGVudGlmaWVycworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitVU0IgZGV2aWNlIGlkZW50aWZpZXJzIHN1cHBvcnQgdGhlIGZvbGxvd2luZyBwYXJhbWV0ZXJzOgorCisgICA9PT09PT09PT09PT09PT09PT09PT09ICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgIE5hbWUgICAgICAgICAgICAgICAgICAgIFZhbHVlCisgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgIGBgc2VyaWFsTnVtYmVyPWBgICAgICAgIG9uZSBvciBtb3JlIGFyYml0cmFyeSBjaGFyYWN0ZXJzCisgICBgYHZlbmRvcklkZW50aWZpZXI9YGAgICBhbiBpbnRlZ2VyIHdpdGhpbiB0aGUgcmFuZ2UgMS02NTUzNSAoMFgwMDAxLTBYRkZGRikKKyAgIGBgcHJvZHVjdElkZW50aWZpZXI9YGAgIGFuIGludGVnZXIgd2l0aGluIHRoZSByYW5nZSAxLTY1NTM1ICgwWDAwMDEtMFhGRkZGKQorICAgYGBnZW5lcmljRGV2aWNlcz1gYCAgICAgYGB5ZXNgYCwgYGBub2BgCisgICA9PT09PT09PT09PT09PT09PT09PT09ICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworQWxsIG9mIHRoZSBwYXJhbWV0ZXJzIGFyZSBvcHRpb25hbC4gSXQgc2hvdWxkbid0IG5vcm1hbGx5IGJlIG5lY2Vzc2FyeSB0bworc3VwcGx5IGFueSBvZiB0aGVtLgorCitgYHNlcmlhbE51bWJlcj1gYCAKKyAgIFNwZWNpZnkgdGhlIHNlcmlhbCBudW1iZXIgdGhhdCB0aGUgZGV2aWNlIG11c3QgaGF2ZS4gVGhlIG1hdGNoIGlzIGNhc2UKKyAgIHNlbnNpdGl2ZSBhbmQgbXVzdCBiZSBleGFjdC4gSWYgdGhpcyBwYXJhbWV0ZXIgaXNuJ3Qgc3VwcGxpZWQgdGhlbiB0aGUKKyAgIHNlcmlhbCBudW1iZXIgb2YgdGhlIGRldmljZSBpc24ndCB2ZXJpZmllZC4KKworYGB2ZW5kb3JJZGVudGlmaWVyPWBgCisgICBTcGVjaWZ5IHRoZSB2ZW5kb3IgaWRlbnRpZmllciB0aGF0IHRoZSBkZXZpY2UgbXVzdCBoYXZlLiBJdCBtdXN0IGJlIGFuCisgICBpbnRlZ2VyIHdpdGhpbiB0aGUgcmFuZ2UgYGAxYGAtYGA2NTUzNWBgIChvciwgaW4gaGV4YWRlY2ltYWwsCisgICBgYDBYMDAwMWBgLWBgMFhGRkZGYGApLiBJZiB0aGlzIHBhcmFtZXRlciBpc24ndCBzdXBwbGllZCB0aGVuIHRoZSB2ZW5kb3IKKyAgIGlkZW50aWZpZXIgb2YgdGhlIGRldmljZSBpc24ndCB2ZXJpZmllZC4KKworYGBwcm9kdWN0SWRlbnRpZmllcj1gYAorICAgU3BlY2lmeSB0aGUgcHJvZHVjdCBpZGVudGlmaWVyIHRoYXQgdGhlIGRldmljZSBtdXN0IGhhdmUuIEl0IG11c3QgYmUgYW4KKyAgIGludGVnZXIgd2l0aGluIHRoZSByYW5nZSBgYDFgYC1gYDY1NTM1YGAgKG9yLCBpbiBoZXhhZGVjaW1hbCwKKyAgIGBgMFgwMDAxYGAtYGAwWEZGRkZgYCkuIElmIHRoaXMgcGFyYW1ldGVyIGlzbid0IHN1cHBsaWVkIHRoZW4gdGhlIHByb2R1Y3QKKyAgIGlkZW50aWZpZXIgb2YgdGhlIGRldmljZSBpc24ndCB2ZXJpZmllZC4KK2BgZ2VuZXJpY0RldmljZXM9YGAKKyAgIFNwZWNpZnkgd2hldGhlciBvciBub3QgYSBkZXZpY2UgdGhhdCBoYXMgYSBnZW5lcmljIHZlbmRvci9wcm9kdWN0IGlkZW50aWZpZXIKKyAgIHBhaXIgbWF5IGJlIHVzZWQuIEl0J3MgdmFsdWUgbXVzdCBiZSBlaXRoZXIgYGB5ZXNgYCBvciBgYG5vYGAuIFRoZSBjaGVjayBpcworICAgY2FzZSBpbnNlbnNpdGl2ZSwgYW5kIGFueSBhYmJyZXZpYXRpb24gbWF5IGJlIHVzZWQuIElmIHRoaXMgcGFyYW1ldGVyIGlzbid0CisgICBzdXBwbGllZCB0aGVuIGBgeWVzYGAgaXMgYXNzdW1lZC4KKworQmx1ZXRvb3RoIERldmljZSBJZGVudGlmaWVycworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitCbHVldG9vdGggZGV2aWNlIGlkZW50aWZpZXJzIHN1cHBvcnQgdGhlIGZvbGxvd2luZyBwYXJhbWV0ZXJzOgorCisgICA9PT09PT09PT09PT09ICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgICBOYW1lICAgICAgICAgICBWYWx1ZQorICAgLS0tLS0tLS0tLS0tLSAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgYGBhZGRyZXNzPWBgICAgc2l4IHR3by1kaWdpdCBoZXhhZGVjaW1hbCBudW1iZXJzIHNlcGFyYXRlZCBieSBgYDpgYCBvciBgYC1gYAorICAgYGBuYW1lPWBgICAgICAgb25lIG9yIG1vcmUgYXJiaXRyYXJ5IGNoYXJhY3RlcnMKKyAgIGBgY2hhbm5lbD1gYCAgIGFuIGludGVnZXIgd2l0aGluIHRoZSByYW5nZSBgYDFgYC1gYDMwYGAKKyAgIGBgZGlzY292ZXI9YGAgIGBgeWVzYGAsIGBgbm9gYAorICAgYGB0aW1lb3V0PWBgICAgYW4gaW50ZWdlciB3aXRoaW4gdGhlIHJhbmdlIGBgMWBgLWBgNTlgYAorICAgPT09PT09PT09PT09PSAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitBbGwgb2YgdGhlIHBhcmFtZXRlcnMgYXJlIG9wdGlvbmFsIGV4Y2VwdCB0aGF0Cit0aGUgYGBhZGRyZXNzPWBgIHBhcmFtZXRlciBpcyByZXF1aXJlZCBvbiBwbGF0Zm9ybXMgd2hlcmUKK0JSTFRUWSBjYW4ndCB5ZXQgZGV0ZWN0IGEgQmx1ZXRvb3RoIGRldmljZSBiYXNlZCBvbiBpdHMgbmFtZS4KK0l0IHNob3VsZG4ndCBub3JtYWxseSBiZSBuZWNlc3NhcnkgdG8gc3VwcGx5IGFueSBvZiB0aGUgb3RoZXJzLgorCitCUkxUVFkgY2FuIGRldGVjdCBhIEJsdWV0b290aCBkZXZpY2UgYnkgbmFtZSBvbiB0aGUgZm9sbG93aW5nIHBsYXRmb3JtczoKKworKiBBbmRyb2lkCisqIExpbnV4IChpZiB0aGUgQmx1ZXRvb3RoIHZlcnNpb24gaXMgYXQgbGVhc3QgNSkKKyogV2luZG93cworCitgYGFkZHJlc3M9YGAKKyAgIFNwZWNpZnkgdGhlIE1BQyBhZGRyZXNzIG9mIHRoZSBkZXZpY2UuIEl0IG11c3QgYmUgc2l4IHR3by1kaWdpdAorICAgaGV4YWRlY2ltYWwgbnVtYmVycyAodGhlICJsZXR0ZXIiIGRpZ2l0cyBtYXkgYmUgaW4gZWl0aGVyIGNhc2UpIHNlcGFyYXRlZAorICAgZnJvbSBvbmUgYW5vdGhlciBieSBlaXRoZXIgYSBjb2xvbiAoYGA6YGApIG9yIGEgbWludXMgKGBgLWBgKSBzaWduLgorCitgYG5hbWU9YGAKKyAgIFNwZWNpZnkgdGhlIG5hbWUgb2YgdGhlIGRldmljZS4gSXQgbXVzdCBiZSBvbmUgb3IgbW9yZQorICAgYXJiaXRyYXJ5IGNoYXJhY3RlcnMuIFRoZXkgbmVlZCBvbmx5IG1hdGNoIHRoZSBiZWdpbm5pbmcgKHNvIG5vdAorICAgbmVjZXNzYXJpbHkgYWxsKSBvZiB0aGUgbmFtZS4gQ2FzZSBpcyBzaWduaWZpY2FudC4KKyAgIE9ubHkgdGhlIG5hbWVzIG9mIHBhaXJlZCBkZXZpY2VzIGFyZSBjb25zaWRlcmVkLgorICAgVGhpcyBwYXJhbWV0ZXIgaXMgaWdub3JlZCBpZiB0aGUgYGBhZGRyZXNzPWBgIHBhcmFtZXRlciBoYXMgYmVlbiBzcGVjaWZpZWQuCisKK2BgY2hhbm5lbD1gYAorICAgU3BlY2lmeSB0aGUgUkZDT01NIGNoYW5uZWwgdG8gdXNlLiBJdCBtdXN0IGJlIGFuIGludGVnZXIgd2l0aGluIHRoZSByYW5nZQorICAgYGAxYGAtYGAzMGBgLiBJZiB0aGlzIHBhcmFtZXRlciBpc24ndCBzdXBwbGllZCB0aGVuIGVpdGhlciBhIGRyaXZlci1zdXBwbGllZAorICAgZGVmYXVsdCBjaGFubmVsIG51bWJlciBpcyBhc3N1bWVkIG9yIHNlcnZpY2UgZGlzY292ZXJ5IGlzIHBlcmZvcm1lZC4KKworYGBkaXNjb3Zlcj1gYAorICAgU3BlY2lmeSB3aGV0aGVyIG9yIG5vdCBzZXJ2aWNlIGRpc2NvdmVyeSBpcyB0byBiZSBwZXJmb3JtZWQuIEluIG90aGVyIHdvcmRzLAorICAgdGhpcyBwYXJhbWV0ZXIgc3BlY2lmaWVzIHdoZXRoZXIgb3Igbm90IHRoZSBkZXZpY2UgaXMgdG8gYmUgImFza2VkIiBmb3IgdGhlCisgICBSRkNPTU0gY2hhbm5lbCBudW1iZXIuIEl0IG11c3QgYmUgZWl0aGVyIGBgeWVzYGAgb3IgYGBub2BgLiBUaGUgY2hlY2sgaXMKKyAgIGNhc2UgaW5zZW5zaXRpdmUsIGFuZCBhbnkgYWJicmV2aWF0aW9uIG1heSBiZSB1c2VkLiBJZiB0aGlzIHBhcmFtZXRlciBpc24ndAorICAgc3VwcGxpZWQgdGhlbiB3aGV0aGVyIG9yIG5vdCBzZXJ2aWNlIGRpc2NvdmVyeSBpcyBwZXJmb3JtZWQgaXMgZGVjaWRlZAorICAgYWNjb3JkaW5nIHRvIHRoZSBmb2xsb3dpbmcgc2VxdWVuY2Ugb2YgdGVzdHM6CisKKyAgIDEpIElmIHRoZSBgYGNoYW5uZWw9YGAgcGFyYW1ldGVyIGhhcyBiZWVuIHN1cHBsaWVkLCB0aGVuICoqbm8qKi4KKyAgIDIpIElmIHRoZSBkcml2ZXIgaGFzIHJlcXVlc3RlZCBzZXJ2aWNlIGRpc2NvdmVyeSwgdGhlbiAqKnllcyoqLgorICAgMykgSWYgdGhlIGRyaXZlciBoYXMgc3BlY2lmaWVkIGEgZGVmYXVsdCBjaGFubmVsIG51bWJlciwgdGhlbiAqKm5vKiouCisgICA0KSBPdGhlcndpc2UsICoqbm8qKi4KKworYGB0aW1lb3V0PWBgCisgICBTcGVjaWZ5IHRoZSBudW1iZXIgb2Ygc2Vjb25kcyB0byB3YWl0IGZvciBhIGNvbm5lY3Rpb24gdG8gdGhlIGRldmljZSB0byBiZQorICAgYWNxdWlyZWQuIEl0IG11c3QgYmUgYW4gaW50ZWdlciB3aXRoaW4gdGhlIHJhbmdlIGBgMWBgLWBgNTlgYC4gSWYgdGhpcworICAgcGFyYW1ldGVyIGlzbid0IHN1cHBsaWVkIHRoZW4gYSByZWFzb25hYmxlIGRlZmF1bHQgaXMgYXNzdW1lZC4KKworSElEIERldmljZSBJZGVudGlmaWVycworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitISUQgZGV2aWNlIGlkZW50aWZpZXJzIHN1cHBvcnQgdGhlIGZvbGxvd2luZyBwYXJhbWV0ZXJzOgorCisgICA9PT09PT09PT09PT09PT09PSAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICAgTmFtZSAgICAgICAgICAgICAgIFZhbHVlCisgICAtLS0tLS0tLS0tLS0tLS0tLSAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgYGBhZGRyZXNzPWBgICAgICAgIEJsdWV0b290aCBNQUMgYWRkcmVzcworICAgYGBuYW1lPWBgICAgICAgICAgIEJsdWV0b290aCBkZXZpY2UgbmFtZQorICAgYGBtYW51ZmFjdHVyZXI9YGAgIFVTQiBkZXZpY2UgbWFudWZhY3R1cmVyCisgICBgYGRlc2NyaXB0aW9uPWBgICAgVVNCIHByb2R1Y3QgZGVzY3JpcHRpb24KKyAgIGBgc2VyaWFsTnVtYmVyPWBgICBVU0Igc2VyaWFsIG51bWJlcgorICAgYGB2ZW5kb3I9YGAgICAgICAgIGZvdXIgaGV4YWRlY2ltYWwgZGlnaXRzCisgICBgYHByb2R1Y3Q9YGAgICAgICAgZm91ciBoZXhhZGVjaW1hbCBkaWdpdHMKKyAgID09PT09PT09PT09PT09PT09ICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0FsbCBvZiB0aGUgcGFyYW1ldGVycyBhcmUgb3B0aW9uYWwsIGFsdGhvdWdoLCBpbiBtb3N0IGNhc2VzLAorZWl0aGVyIHRoZSBgYHNlcmlhbE51bWJlcj1gYCBwYXJhbWV0ZXIgKGZvciBhIFVTQiBkZXZpY2UpCitvciB0aGUgYGBhZGRyZXNzPWBgIHBhcmFtZXRlciAoZm9yIGEgQmx1ZXRvb3RoIGRldmljZSkKK3Nob3VsZCBiZSBzdXBwbGllZC4KK1VTQi1zcGVjaWZpYyBhbmQgQmx1ZXRvb3RoLXNwZWNpZmljIHBhcmFtZXRlcnMgbWF5IG5vdCBiZSBjb21iaW5lZC4KKworYGBhZGRyZXNzPWBgCisgICBUaGUgTUFDIGFkZHJlc3Mgb2YgYSBCbHVldG9vdGggZGV2aWNlLgorICAgSXQgbXVzdCBiZSBzaXggdHdvLWRpZ2l0IGhleGFkZWNpbWFsIG51bWJlcnMKKyAgIHNlcGFyYXRlZCBmcm9tIG9uZSBhbm90aGVyIGJ5IGEgY29sb24gKGBgOmBgKS4KKyAgIFRoZSBsZXR0ZXIgZGlnaXRzIG1heSBiZSBpbiBlaXRoZXIgY2FzZS4KKworYGBuYW1lPWBgCisgICBUaGUgbmFtZSBvZiBhIEJsdWV0b290aCBkZXZpY2UuCisgICBPbmx5IHRoZSBzdGFydCBvZiB0aGUgbmFtZSBpcyBtYXRjaGVkLgorICAgTWF0Y2hpbmcgaXMgY2FzZSBpbnNlbnNpdGl2ZS4KKworYGBtYW51ZmFjdHVyZXI9YGAKKyAgIFRoZSBuYW1lIG9mIHRoZSBtYW51ZmFjdHVyZXIgb2YgYSBVU0IgZGV2aWNlLgorICAgT25seSB0aGUgc3RhcnQgb2YgdGhlIG5hbWUgaXMgbWF0Y2hlZC4KKyAgIE1hdGNoaW5nIGlzIGNhc2UgaW5zZW5zaXRpdmUuCisKK2BgZGVzY3JpcHRpb249YGAKKyAgIFRoZSBwcm9kdWN0IGRlc2NyaXB0aW9uIG9mIGEgVVNCIGRldmljZS4KKyAgIE9ubHkgdGhlIHN0YXJ0IG9mIHRoZSBkZXNjcmlwdGlvbiBpcyBtYXRjaGVkLgorICAgTWF0Y2hpbmcgaXMgY2FzZSBpbnNlbnNpdGl2ZS4KKworYGBzZXJpYWxOdW1iZXI9YGAKKyAgIFRoZSBzZXJpYWwgbnVtYmVyIG9mIGEgVVNCIGRldmljZS4KKyAgIE9ubHkgdGhlIHN0YXJ0IG9mIHRoZSBzZXJpYWwgbnVtYmVyIGlzIG1hdGNoZWQuCisgICBNYXRjaGluZyBpcyBjYXNlIGluc2Vuc2l0aXZlLgorCitgYHZlbmRvcj1gYAorICAgVGhlIHZlbmRvciBpZGVudGlmaWVyIG9mIHRoZSBkZXZpY2UuCisgICBJdCBtdXN0IGJlIGZvdXIgaGV4YWRlY2ltYWwgZGlnaXRzLgorICAgVGhlIGxldHRlciBkaWdpdHMgbWF5IGJlIGluIGVpdGhlciBjYXNlLgorCitgYHByb2R1Y3Q9YGAKKyAgIFRoZSBwcm9kdWN0IGlkZW50aWZpZXIgb2YgdGhlIGRldmljZS4KKyAgIEl0IG11c3QgYmUgZm91ciBoZXhhZGVjaW1hbCBkaWdpdHMuCisgICBUaGUgbGV0dGVyIGRpZ2l0cyBtYXkgYmUgaW4gZWl0aGVyIGNhc2UuCisKK051bGwgRGV2aWNlIElkZW50aWZpZXJzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQSBgYG51bGxgYCBlbmRwb2ludCBoYXMgdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzOgorCisqIEl0IGFsd2F5cyBpbmRpY2F0ZXMgdGhhdCBpbnB1dCBpcyBhdmFpbGFibGUuCisqIFJlYWRpbmcgZnJvbSBpdCBhbHdheXMgeWllbGRzIGVuZC1vZi1maWxlLgorKiBXcml0aW5nIHRvIGl0IGlzIGFsd2F5cyBzdWNjZXNzZnVsIGJ1dCBkb2VzIG5vdGhpbmcuCisKZGlmZiAtLWdpdCBhL0RvY3VtZW50cy9SRUFETUUuSW50cm9kdWN0aW9uIGIvRG9jdW1lbnRzL1JFQURNRS5JbnRyb2R1Y3Rpb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTllMTg3NAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50cy9SRUFETUUuSW50cm9kdWN0aW9uCkBAIC0wLDAgKzEsMzUxIEBACit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CitJbnRyb2R1Y3Rpb24gdG8gQlJMVFRZICAgCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisKKy4uIGluY2x1ZGU6OiBwcm9sb2d1ZS5yc3QKKworWW91IGNhbiBsb29rIHVwIGEgZnVsbCBsaXN0aW5nIG9mIGFsbCBvZiB5b3VyIGJyYWlsbGUgZGV2aWNlJ3Mga2V5IGJpbmRpbmdzIGF0OgorYDxodHRwczovL2JybHR0eS5hcHAvZG9jL0tleUJpbmRpbmdzL2luZGV4Lmh0bWw+YF8KKworV2l0aCBvbmUgZXhjZXB0aW9uLCB0aGlzIGRvY3VtZW50IGFwcGxpZXMgdG8gdXNpbmcgQlJMVFRZIHdpdGggYW55IGJyYWlsbGUgZGV2aWNlLgorVGhlIGV4Y2VwdGlvbiBpcyB0aGF0LCB3aGVuIGtleSBiaW5kaW5ncyBhcmUgZ2l2ZW4sCitpdCBhc3N1bWVzIHRoYXQgdGhlIGJyYWlsbGUgZGV2aWNlIGhhcyBhIGJyYWlsbGUga2V5Ym9hcmQuCitJZiBpdCBkb2Vzbid0LCB0aGVuLCBhcyBtZW50aW9uZWQgYWJvdmUsCit5b3UgY2FuIGxvb2sgdXAgeW91ciBkZXZpY2UncyBjb3JyZXNwb25kaW5nIGtleSBiaW5kaW5ncyBvbmxpbmUuCisKK01hbnkgKmNob3JkcyogKGNvbWJpbmluZyBhIGRvdCBrZXkgY29tYmluYXRpb24gd2l0aCB0aGUgU3BhY2Uga2V5KSBhcmUgdG9nZ2xlcy4KK1JlcGVhdGVkbHkgcHJlc3NpbmcgYW55IG9mIHRoZXNlIGtleSBiaW5kaW5ncyBhbHRlcm5hdGVseSB0dXJucyB0aGUgY29ycmVzcG9uZGluZyBmZWF0dXJlIG9uIGFuZCBvZmYuCitBZGRpbmcgdGhlIERvdDcga2V5IGZvcmNlcyB0aGUgZmVhdHVyZSB0byBiZSB0dXJuZWQgb2ZmLAorYW5kIGFkZGluZyB0aGUgRG90OCBrZXkgZm9yY2VzIHRoZSBmZWF0dXJlIHRvIGJlIHR1cm5lZCBvbi4KKworVXNlZnVsIEtleSBCaW5kaW5ncworPT09PT09PT09PT09PT09PT09PQorCitTcGFjZSArIGggKGRvdHMgMTI1KQorICBHbyB0byB0aGUgaGVscCBzY3JlZW4uCisgIEl0J3MgYSB0b2dnbGUsIHNvIHByZXNzaW5nIGl0IGFnYWluIHJldHVybnMgdG8gdGhlIGFjdHVhbCBzY3JlZW4uCisgIFRoaXMgc2NyZWVuIGlzIG9ubHkgc2hvd24gb24gdGhlIGJyYWlsbGUgZGlzcGxheS4KKyAgSXQgY29udGFpbnMgYSBmdWxsIGxpc3Rpbmcgb2YgYWxsIG9mIHlvdXIgYnJhaWxsZSBkZXZpY2UncyBrZXkgYmluZGluZ3MuCisKK1NwYWNlICsgbCAoZG90cyAxMjMpCisgIEVudGVyIGxlYXJuIG1vZGUuCisgIEl0J3MgYSB0b2dnbGUsIHNvIHByZXNzaW5nIGl0IGFnYWluIGxlYXZlcyBsZWFybiBtb2RlLgorICBBZGRpdGlvbmFsbHksIGlmIHlvdSBkb24ndCBkbyBhbnl0aGluZyBmb3IgMTAgc2Vjb25kcyB0aGVuIGxlYXJuIG1vZGUgaXMgYXV0b21hdGljYWxseSB0ZXJtaW5hdGVkLgorICBXaGVuIGluIGxlYXJuIG1vZGUsIHByZXNzaW5nIGFueSBrZXkgY29tYmluYXRpb24gc2hvd3MsIG9uIHRoZSBicmFpbGxlIGRpc3BsYXksIHdoYXQgaXQnbGwgZG8gd2l0aG91dCBhY3R1YWxseSBkb2luZyBpdC4KKworU3BhY2UgKyBwIChkb3RzIDEyMzQpCisgIEdvIHRvIGB0aGUgcHJlZmVyZW5jZXMgbWVudWBfLgorICBJdCdzIGEgdG9nZ2xlLCBzbyBwcmVzc2luZyBpdCBhZ2FpbiByZXR1cm5zIHRvIHRoZSBhY3R1YWwgc2NyZWVuLgorICBBZGRpbmcgdGhlIERvdDgga2V5IHNhdmVzIHRoZSBjdXJyZW50IHNldHRpbmdzLgorICBBZGRpbmcgdGhlIERvdDcga2V5IHJlc3RvcmVzIHRoZSBzZXR0aW5ncyBhcyBvZiB0aGUgbW9zdCByZWNlbnQgdGltZSB0aGF0IHRoZXkgd2VyZSBzYXZlZC4KKworU3BhY2UgKyBnIChkb3RzIDEyNDUpCisgIFRvZ2dsZSBiZXR3ZWVuIGNvbXB1dGVyIGJyYWlsbGUgYW5kIGNvbnRyYWN0ZWQgYnJhaWxsZS4KKyAgQWRkaW5nIHRoZSBEb3Q3IGtleSBmb3JjZXMgY29tcHV0ZXIgYnJhaWxsZSwKKyAgYW5kIGFkZGluZyB0aGUgRG90OCBrZXkgZm9yY2VzIGNvbnRyYWN0ZWQgYnJhaWxsZS4KKworU3BhY2UgKyB0IChkb3RzIDIzNDUpCisgIFRvZ2dsZSBjdXJzb3IgdHJhY2tpbmcgb24vb2ZmLgorICBXaGVuIGN1cnNvciB0cmFja2luZyBpcyBvbiwgYW55IG1vdGlvbiBvZiB0aGUgY3Vyc29yIGRyYWdzIHRoZSBicmFpbGxlIGRpc3BsYXkgdG8gdGhlIG5ldyBzY3JlZW4gbG9jYXRpb24uCisKK1NwYWNlICsgaSAoZG90cyAyNCkKKyAgVG9nZ2xlIHRoZSBza2lwcGluZyBvZiBpZGVudGljYWwgbGluZXMgb24vb2ZmLgorICBUaGlzIGZlYXR1cmUgaXMgZXNwZWNpYWxseSB1c2VmdWwgZm9yIGNvbXByZXNzaW5nIG11bHRpcGxlIGNvbnRpZ3VvdXMgYmxhbmsgbGluZXMgaW50byBhIHNpbmdsZSBvbmUuCisKK1NwYWNlICsgYiAoZG90cyAxMikKKyAgVG9nZ2xlIHRoZSBza2lwcGluZyBvZiBibGFuayBicmFpbGxlIHdpbmRvd3Mgb24vb2ZmLgorICBUaGlzIGZlYXR1cmUgaXMgZXNwZWNpYWxseSB1c2VmdWwgZm9yIHNraXBwaW5nIG92ZXIgdGhlIGJsYW5rIGVuZHMgb2Ygc2hvcnQgbGluZXMgd2hlbiBwYW5uaW5nLgorCitUaGUgUHJlZmVyZW5jZXMgTWVudQorPT09PT09PT09PT09PT09PT09PT0KKworVGhlIHByZWZlcmVuY2VzIG1lbnUgY29udGFpbnMgYSBsb3Qgb2Ygc2V0dGluZ3MgdGhhdCBsZXQgeW91IGN1c3RvbWl6ZSBob3cgQlJMVFRZIGJlaGF2ZXMuCitJdCdzIGludGVybmFsIHRvIEJSTFRUWSBzbyBpdCBkb2Vzbid0IHNob3cgdXAgb24gdGhlIGFjdHVhbCBzY3JlZW4gLQoraXQncyBvbmx5IHByZXNlbnRlZCBvbiB0aGUgYnJhaWxsZSBkaXNwbGF5LgorCitUaGUgRG90IEtleXMKKy0tLS0tLS0tLS0tLQorCitUaGUgZG90IGtleXMgY2FuIGJlIHVzZWQgdG8gbmF2aWdhdGUgdGhlIHByZWZlcmVuY2VzIG1lbnU6CisKK0RvdHMgMSBhbmQgNAorICBJbiB0aGUgc2FtZSB3YXkgYXMgdGhleSAod2hlbiBjb21iaW5lZCB3aXRoIHRoZSBTcGFjZSBrZXkpIG1vdmUgdGhlIGN1cnNvciB1cC9kb3duIHdoZW4gdXNpbmcgYSBjb252ZW50aW9uYWwgc2NyZWVuIHJlYWRlciwKKyAgdGhlc2UgZG90IGtleXMgbW92ZSB1cC9kb3duIHdpdGhpbiB0aGUgY3VycmVudCBzdWJtZW51LgorICBJbiBvdGhlciB3b3JkcywgRG90MSBtb3ZlcyB0byB0aGUgcHJldmlvdXMgaXRlbSBhbmQgRG90NCBtb3ZlcyB0byB0aGUgbmV4dCBpdGVtLgorCitEb3RzIDMgYW5kIDYKKyAgSW4gYSBzaW1pbGFyIHdheSB0byBob3cgdGhleSAod2hlbiBjb21iaW5lZCB3aXRoIHRoZSBTcGFjZSBrZXkpIG1vdmUgdGhlIGN1cnNvciBsZWZ0L3JpZ2h0IHdoZW4gdXNpbmcgYSBjb252ZW50aW9uYWwgc2NyZWVuIHJlYWRlciwKKyAgdGhlc2UgZG90IGtleXMgc2VsZWN0IHRoZSBwcmV2aW91cy9uZXh0IHBvc3NpYmxlIHNldHRpbmcgZm9yIHRoZSBjdXJyZW50IGl0ZW0uCisgIFRoZSBzZXR0aW5nIGNob2ljZXMgd3JhcCwKKyAgc28gRG90Mywgd2hlbiB0aGUgZmlyc3QgY2hvaWNlIGlzIHNlbGVjdGVkLCB3cmFwcyB0byB0aGUgbGFzdCBvbmUsCisgIGFuZCBEb3Q2LCB3aGVuIHRoZSBsYXN0IGNob2ljZSBpcyBzZWxlY3RlZCwgd3JhcHMgdG8gdGhlIGZpcnN0IG9uZS4KKworRG90IDIKKyAgTW92ZSB0byB0aGUgZmlyc3QgaXRlbS4KKworRG90IDUKKyAgTW92ZSB0byB0aGUgbGFzdCBpdGVtLgorCitEb3QgNworICBHbyB1cCBvbmUgc3VibWVudSBsZXZlbC4KKyAgSWYgaW4gdGhlIG1haW4gbWVudSB0aGVuIGV4aXQgYW5kIHJldHVybiB0byB0aGUgYWN0dWFsIHNjcmVlbi4KKworRG90IDgKKyAgRXhpdCBhbmQgcmV0dXJuIHRvIHRoZSBhY3R1YWwgc2NyZWVuLgorCitUaGUgUm91dGluZyBLZXlzCistLS0tLS0tLS0tLS0tLS0tCisKK1RoZSByb3V0aW5nIGtleXMgY2FuIGJlIHVzZWQgdG8gY2hhbmdlIHRoZSBzZXR0aW5nIGZvciB0aGUgY3VycmVudCBpdGVtOgorCisqIElmIHRoZSBzZXR0aW5nIGlzIGEgZGlzY3JldGUgc2V0IG9mIGNob2ljZXMsIGUuZy4gYGBZZXNgYCBvciBgYE5vYGAsCisgIHRoZW4gZWFjaCBzdWNjZXNzaXZlIGdyb3VwIG9mIHJvdXRpbmcga2V5cyBzZWxlY3RzIHRob3NlIGNob2ljZXMuCisgIEZvciBleGFtcGxlOgorCisgICogSWYgdGhlcmUgYXJlIHR3byBjaG9pY2VzCisgICAgdGhlbiBrZXlzIDEsMyw1LC4uLiBzZWxlY3QgdGhlIGZpcnN0IG9uZQorICAgIGFuZCBrZXlzIDIsNCw2LC4uLiBzZWxlY3QgdGhlIHNlY29uZCBvbmUuCisKKyAgKiBJZiB0aGVyZSBhcmUgdGhyZWUgY2hvaWNlcworICAgIHRoZW4ga2V5cyAxLDQsNywuLi4gc2VsZWN0IHRoZSBmaXJzdCBvbmUsCisgICAga2V5cyAyLDUsOCwuLi4gc2VsZWN0IHRoZSBzZWNvbmQgb25lLAorICAgIGFuZCBrZXlzIDMsNiw5LC4uLiBzZWxlY3QgdGhlIHRoaXJkIG9uZS4KKworKiBJZiB0aGUgc2V0dGluZyBpcyBhIG51bWJlciB0aGVuIHRoZSByb3V0aW5nIGtleXMgYmVoYXZlIGxpa2UgYSBzY3JvbGwgYmFyLgorCisgICogVGhlIGxlZnRtb3N0IGtleSBzZWxlY3RzIHRoZSBsb3dlc3QgcG9zc2libGUgdmFsdWUuCisgICogVGhlIHJpZ2h0bW9zdCBrZXkgc2VsZWN0cyB0aGUgaGlnaGVzdCBwb3NzaWJsZSB2YWx1ZS4KKyAgKiBUaGUgaW5uZXIga2V5cyBzZWxlY3QgYW4gZXZlbmx5IGRpc3RyaWJ1dGVkIHZhbHVlIHdpdGhpbiB0aGUgcmFuZ2UuCisKK0V4aXRpbmcgdGhlIFByZWZlcmVuY2VzIE1lbnUKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlc2UgYXJlIHRoZSB3YXlzIHRvIGV4aXQgdGhlIHByZWZlcmVuY2VzIG1lbnU6CisKK0RvdDcKKyAgR28gdXAgb25lIGxldmVsIHdoZW4gaW4gdGhlIG1haW4gbWVudS4KKworRG90OAorICBFeGl0IHRoZSBwcmVmZXJlbmNlcyBtZW51LgorCitTcGFjZSArIHAgIChkb3RzIDEyMzQpCisgIFByZWZlcmVuY2VzIE1lbnUgZW50ZXIvZXhpdCB0b2dnbGUuCisKK1NwYWNlICsgcCAoZG90cyAxMjM0KSArIERvdDgKKyAgU2F2ZSB0aGUgY3VycmVudCBzZXR0aW5ncy4KKworTm9uZSBvZiB0aGVzZSBtZXRob2RzIGNsb3NlIGBTdWJtZW51c2BfLgorVGhpcyBtZWFucyB0aGF0IGdvaW5nIGJhY2sgdG8gdGhlIHByZWZlcmVuY2VzIG1lbnUgbGF0ZXIgcmVzdW1lcyBhdCB0aGUgc2FtZSBwbGFjZS4KKworVGhlIGBgU2F2ZSBvbiBFeGl0YGAgaXRlbSBpcyBhdCB0aGUgdG9wIG9mIHRoZSBtYWluIG1lbnUuCitJdCBzcGVjaWZpZXMgd2hldGhlciBvciBub3QgKGBgWWVzYGAgb3IgYGBOb2BgKQordGhlIGN1cnJlbnQgc2V0dGluZ3MgYXJlIHRvIGJlIHNhdmVkIHdoZW4gZXhpdGluZyB0aGUgcHJlZmVyZW5jZXMgbWVudS4KK0lmIGl0J3Mgc2V0IHRvIGBgTm9gYCB0aGVuIHlvdSBjYW4gc3RpbGwgbWFudWFsbHkgc2F2ZSB0aGUgY3VycmVudCBzZXR0aW5ncyB3aXRoIFNwYWNlICsgcCAoZG90cyAxMjM0KSArIERvdDguCisKK1N1Ym1lbnVzCistLS0tLS0tLQorCitUaGUgcHJlZmVyZW5jZXMgbWVudSBpcyBhIHRyZWUgc3RydWN0dXJlIG9mIG1lbnVzLgorVGhlIG9uZSBhdCB0aGUgcm9vdCAob3IgdG9wKSBpcyBrbm93biBhcyB0aGUgbWFpbiBtZW51LgorCitJZiBhbiBpdGVtIGVuZHMgd2l0aCBhbiBBU0NJSSByaWdodCBhcnJvdyAoYGAtLT5gYCkKK3RoZW4gaXQncyB0aGUgbmFtZSBvZiBhIHN1Ym1lbnUuCitGb3IgZXhhbXBsZTo6CisKKyAgQnJhaWxsZSBQcmVzZW50YXRpb24gLS0+CisKK1ByZXNzaW5nIERvdDMsIERvdDYsIG9yIGFueSByb3V0aW5nIGtleSBvbiB0aGlzIGtpbmQgb2YgaXRlbSBvcGVucyB0aGUgc3VibWVudS4KK0lmIGl0J3MgY2xvc2VkIHRoZW4gdGhlIGJyYWlsbGUgZGlzcGxheSBpcyBwbGFjZWQgb24gdGhlIGZpcnN0IGl0ZW0uCitJZiBpdCdzIG9wZW4gdGhlbiB0aGUgYnJhaWxsZSBkaXNwbGF5IGlzIHBsYWNlZCBvbiB0aGUgY3VycmVudCBpdGVtLgorCitUaGUgZmlyc3QgaXRlbSBvZiBlYWNoIHN1Ym1lbnUgYWx3YXlzIGlzCithbiBBU0NJSSBsZWZ0IGFycm93IChgYDwtLWBgKSwKK2ZvbGxvd2VkIGJ5IHRoZSB3b3JkIGBgQ2xvc2VgYCwKK2ZvbGxvd2VkIGJ5IHRoZSBuYW1lIG9mIHRoZSBzdWJtZW51LgorRm9yIGV4YW1wbGU6OgorCisgIDwtLSBDbG9zZSBCcmFpbGxlIFByZXNlbnRhdGlvbgorCitQcmVzc2luZyBEb3QzLCBEb3Q2LCBvciBhbnkgcm91dGluZyBrZXkgb24gdGhpcyBraW5kIG9mIGl0ZW0gY2xvc2VzIHRoZSBzdWJtZW51LgorCitBbm90aGVyIHdheSB0byBsZWF2ZSBhIHN1Ym1lbnUgaXMgdG8gcHJlc3MgRG90Ny4KK0xlYXZpbmcgYSBzdWJtZW51IHRoaXMgd2F5IGxlYXZlcyBpdCBvcGVuLgorCitBZGRpdGlvbmFsIE5vdGVzCistLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBkZWZhdWx0IGlzIHRoYXQgb25seSByZWxldmFudCBpdGVtcyBhcmUgc2hvd24uCitJbiB0aGUgQnJhaWxsZSBQcmVzZW50YXRpb24gc3VibWVudSwgZm9yIGV4YW1wbGUsCitDb21wdXRlciBCcmFpbGxlIENlbGwgVHlwZSBpcyBvbmx5IHNob3duIHdoZW4gQnJhaWxsZSBWYXJpYW50IGlzIHNldCB0byBDb21wdXRlciwKK2FuZCBFeHBhbmQgQ3VycmVudCBXb3JkIGlzIG9ubHkgc2hvd24gd2hlbiBCcmFpbGxlIFZhcmlhbnQgaXMgc2V0IHRvIENvbnRyYWN0ZWQuCitUaGlzIGNhbiBiZSBjaGFuZ2VkIGJ5IHNldHRpbmcgU2hvdyBBbGwgSXRlbXMgKGluIHRoZSBNZW51IE9wdGlvbnMgc3VibWVudSkgdG8gWWVzLgorCitUYWJsZSBzZWxlY3Rpb24gY2hhbmdlcyBhcmUgY3VycmVudGx5IG5vdCBzYXZlZCBhbG9uZyB3aXRoIHRoZSBvdGhlciBzZXR0aW5ncy4KK1RoZXNlIGluY2x1ZGU6CisKKyogVGhlIGN1cnJlbnQgdGV4dCAoY29tcHV0ZXIgYnJhaWxsZSkgdGFibGUuCisqIFRoZSBjdXJyZW50IGF0dHJpYnV0ZXMgdGFibGUuCisqIFRoZSBjdXJyZW50IGNvbnRyYWN0aW9uIHRhYmxlLgorKiBUaGUgY3VycmVudCBrZXlib2FyZCB0YWJsZS4KKworVGhlIEJyYWlsbGUgS2V5Ym9hcmQKKz09PT09PT09PT09PT09PT09PT09CisKK0RvdHMgNyBhbmQgOAorLS0tLS0tLS0tLS0tCisKK0RvdHMgNyBhbmQgOCBhcmUgc3BlY2lhbCBiZWNhdXNlCit0aGUgRG90NyBrZXkgaXMgQmFja3NwYWNlIGFuZCB0aGUgRG90OCBrZXkgaXMgRW50ZXIuCitJZiBlaXRoZXIgb2YgdGhlc2Uga2V5cyBpcyBwcmVzc2VkIHRvZ2V0aGVyIHdpdGggb3RoZXIgZG90IGtleXMgdGhlbiBpdCBmdW5jdGlvbnMgYXMgaXRzZWxmLgorSWYgeW91IG5lZWQgdG8gdHlwZSBlaXRoZXIganVzdCBkb3QgNyBvciBqdXN0IGRvdCA4Cit0aGVuIGNvbWJpbmUgdGhlIGNvcnJlc3BvbmRpbmcga2V5IHdpdGggdGhlIFNwYWNlIGtleS4KK1NvOgorCitEb3Q3CisgIFByZXNzIHRoZSBCYWNrc3BhY2Uga2V5LgorCitEb3Q4CisgIFByZXNzIHRoZSBFbnRlciBrZXkuCisKK1NwYWNlICsgRG90NworICBUeXBlIGRvdCA3LgorCitTcGFjZSArIERvdDgKKyAgVHlwZSBkb3QgOC4KKworVHlwaW5nCistLS0tLS0KKworQ2hhcmFjdGVycyBhcmUgdHlwZWQgYnkgcHJlc3NpbmcgZWl0aGVyIHRoZSBTcGFjZSBrZXkgb3IgYW55IGNvbWJpbmF0aW9uIG9mIHRoZSBkb3Qga2V5cy4KK1RoaXMgY2FuIGJlIGRpc2FibGVkIGluIG9yZGVyIHRvIGF2b2lkIGluYWR2ZXJ0ZW50bHkgdHlwaW5nIGEgY2hhcmFjdGVyIGJ5IGFjY2lkZW50YWxseSBwcmVzc2luZyBrZXlib2FyZCBrZXlzLgorCitTcGFjZSArIERvdHMxMyArIERvdDcKKyAgRGlzYWJsZSB0eXBpbmcuCisKK1NwYWNlICsgRG90czEzICsgRG90OAorICBFbmFibGUgdHlwaW5nLgorCitUaGUgZm9sbG93aW5nIHR5cGluZyBtb2RlcyBhcmUgc3VwcG9ydGVkOgorCitTcGFjZSArIERvdHM0NiArIERvdDcKKyAgU3dpdGNoIHRvIGludGVycHJldGluZyB0aGUgY2hhcmFjdGVycyBiZWluZyB0eXBlZCBhcyByZWd1bGFyIHRleHQuCisgIFRoZSBkb3QgY29tYmluYXRpb24gaXMgYmFjay10cmFuc2xhdGVkIHRocm91Z2ggdGhlIGN1cnJlbnRseSBzZWxlY3RlZCB0ZXh0IChjb21wdXRlciBicmFpbGxlKSB0YWJsZS4KKyAgVGhpcyBpcyB0aGUgZGVmYXVsdC4KKworU3BhY2UgKyBEb3RzNDYgKyBEb3Q4CisgIFN3aXRjaCB0byBpbnRlcnByZXRpbmcgdGhlIGNoYXJhY3RlcnMgYmVpbmcgdHlwZWQgYXMgVW5pY29kZSBicmFpbGxlIHBhdHRlcm5zLgorCitTcGVjaWFsIEtleXMKKy0tLS0tLS0tLS0tLQorCitUaGUgc3BlY2lhbCBrZXlzIG9uIGEgbm9ybWFsIGtleWJvYXJkIGNhbiBiZSBpbmRpdmlkdWFsbHkgcHJlc3NlZCBhcyBmb2xsb3dzOgorCitTcGFjZSArIERvdHM0NSAoY29udmVudGlvbmFsIHNjcmVlbiByZWFkZXIgYmluZGluZykKKyAgVGhlIEZvcndhcmQgVGFiIGtleS4KKworU3BhY2UgKyBEb3QzIChjb252ZW50aW9uYWwgc2NyZWVuIHJlYWRlciBiaW5kaW5nKQorICBUaGUgQ3Vyc29yIExlZnQga2V5LgorCitTcGFjZSArIERvdDYgKGNvbnZlbnRpb25hbCBzY3JlZW4gcmVhZGVyIGJpbmRpbmcpCisgIFRoZSBDdXJzb3IgUmlnaHQga2V5LgorCitTcGFjZSArIERvdDEgKGNvbnZlbnRpb25hbCBzY3JlZW4gcmVhZGVyIGJpbmRpbmcpCisgIFRoZSBDdXJzb3IgVXAga2V5LgorCitTcGFjZSArIERvdDQgKGNvbnZlbnRpb25hbCBzY3JlZW4gcmVhZGVyIGJpbmRpbmcpCisgIFRoZSBDdXJzb3IgRG93biBrZXkuCisKK1NwYWNlICsgRG90czIzIChjb252ZW50aW9uYWwgc2NyZWVuIHJlYWRlciBiaW5kaW5nKQorICBUaGUgUGFnZSBVcCBrZXkuCisKK1NwYWNlICsgRG90czU2IChjb252ZW50aW9uYWwgc2NyZWVuIHJlYWRlciBiaW5kaW5nKQorICBUaGUgUGFnZSBEb3duIGtleS4KKworU3BhY2UgKyBEb3QyCisgIFRoZSBIb21lIGtleS4KKworU3BhY2UgKyBEb3Q1CisgIFRoZSBFbmQga2V5LgorCitTcGFjZSArIERvdHMzNSAobG93IGkpCisgIFRoZSBJbnNlcnQga2V5LgorCitTcGFjZSArIERvdHMyNTYgKGxvdyBkKQorICBUaGUgRGVsZXRlIGtleS4KKworU3BhY2UgKyBEb3RzMjYgKGxvdyBlKQorICBUaGUgRXNjYXBlIGtleS4KKworU3BhY2UgKyBhIHJvdXRpbmcga2V5CisgIEluIG1vc3QgY2FzZXMsIGEgZnVuY3Rpb24ga2V5IGNhbiBiZSBwcmVzc2VkIGJ5IHByZXNzaW5nIHRoZSBjb3JyZXNwb25kaW5nIHJvdXRpbmcga2V5IGFsb25nIHdpdGggdGhlIFNwYWNlIGtleS4KKyAgRm9yIGV4YW1wbGUsIHRoZSBgYEYxYGAga2V5IGNhbiBiZSBwcmVzc2VkIGJ5IHByZXNzaW5nIFNwYWNlICsgdGhlIGxlZnRtb3N0IHJvdXRpbmcga2V5LgorCitNb2RpZmllciBLZXlzCistLS0tLS0tLS0tLS0tCisKK0Egc3Vic2V0IG9mIHRoZSBtb2RpZmllciBrZXlzLCB0aGUgbW9zdCBjb21tb24gYmVpbmcgQ29udHJvbCBhbmQgTGVmdCBBbHQsIGhhdmUgYmVlbiBkZWZpbmVkIGZvciBtb3N0IGJyYWlsbGUgZGV2aWNlcy4KK0VzcGVjaWFsbHkgZm9yIHRob3NlIGJyYWlsbGUgZGV2aWNlcyBmb3Igd2hpY2ggbm8gbW9kaWZpZXIga2V5cyBoYXZlIGJlZW4gZGVmaW5lZCwKK2J1dCBhbHNvIGZvciB0aG9zZSBmb3Igd2hpY2ggb25seSBzb21lIG9mIHRoZW0gaGF2ZSBiZWVuIGRlZmluZWQsCithIGdlbmVyYWwgc2NoZW1lIGZvciBzdXBwb3J0aW5nIHN0aWNreSBtb2RpZmllcnMgaXMgcHJvdmlkZWQuCisKK1RoZSBrZXkgY29tYmluYXRpb25zIGZvciB0aGVzZSBtb2RpZmllcnMgYWxsIGNvbnNpc3Qgb2YgU3BhY2UgKyBEb3Q4ICsgb25lIG9mIHRoZSBvdGhlciBkb3Qga2V5cy4KK1RoZXkgYXJlIGFzIGZvbGxvd3M6CisKK1NwYWNlICsgRG90OCArIERvdDEKKyAgVGhlIEdVSSAoV2luZG93cywgQ29tbWFuZCkga2V5LgorCitTcGFjZSArIERvdDggKyBEb3Q0CisgIFRoZSBTaGlmdCBrZXkuCisKK1NwYWNlICsgRG90OCArIERvdDIKKyAgVGhlIExlZnQgQWx0IChNZXRhKSBrZXkuCisKK1NwYWNlICsgRG90OCArIERvdDUKKyAgVGhlIFJpZ2h0IEFsdCAoQWx0R3IpIGtleS4KKworU3BhY2UgKyBEb3Q4ICsgRG90MworICBUaGUgQ29udHJvbCBrZXkuCisKK1NwYWNlICsgRG90OCArIERvdDYKKyAgVGhlIFVwcGVyY2FzZSBrZXkuCisKK1NwYWNlICsgRG90OCArIERvdDcKKyAgVW5sb2NrIGFuZCBjbGVhciBhbGwgb2YgdGhlIG1vZGlmaWVycy4KKyAgVGhpcyBpcyBlc3BlY2lhbGx5IHVzZWZ1bCB3aGVuIHlvdSBmb3JnZXQgaG93IHRoZSB2YXJpb3VzIG1vZGlmaWVycyBoYXZlIGJlZW4gc2V0LgorCitFYWNoIG1vZGlmaWVyIGNhbiBiZSBjeWNsZWQgdGhyb3VnaCB0aGVzZSB0aHJlZSBzdGF0ZXM6CisKK0ZpcnN0IFByZXNzCisgIFRlbXBvcmFyaWx5IHNldCB0aGUgbW9kaWZpZXIuCisgIEl0J2xsIG9ubHkgYXBwbHkgdG8gdGhlIG5leHQgdHlwZWQgY2hhcmFjdGVyLgorCitTZWNvbmQgUHJlc3MKKyAgTG9jayB0aGUgbW9kaWZpZXIuCisgIEl0J2xsIGFwcGx5IHRvIGFsbCB0eXBlZCBjaGFyYWN0ZXJzIHVudGlsIGl0J3MgY2xlYXJlZC4KKworVGhpcmQgUHJlc3MKKyAgVW5sb2NrIGFuZCBjbGVhciB0aGUgbW9kaWZpZXIuCisKK1doYXQgZG9lcyBCUkxUVFkgbWVhbj8KKz09PT09PT09PT09PT09PT09PT09PT0KKworU2luY2UgcGVvcGxlIGFyZSBhc2tpbmcsIGxldCdzIGFuc3dlciBpdCBoZXJlLgorCitUaGUgYGBCUkxgYCBwYXJ0IG1lYW5zICoqYnJhaWxsZSoqLgorVGhlIGBgVFRZYGAgcGFydCBhY3R1YWxseSBkb2VzIG1lYW4gKip0dHkqKiwgd2hpY2ggbmVlZHMgYSBiaXQgb2YgYW4gZXhwbGFuYXRpb24uCitUaGUgbW9zdCBpbXBvcnRhbnQgdGhpbmcgdG8ga25vdywgdGhvdWdoLCBpcyB0aGF0IGl0IGhhcyBub3RoaW5nIGF0IGFsbCB0byBkbyB3aXRoIHRoZSBgYHR0eWBgIGRldmljZXMgdGhhdCBkZWFmIHBlb3BsZSB1c2UgdG8gY29tbXVuaWNhdGUgb3ZlciBwaG9uZSBsaW5lcy4KKworQlJMVFRZIGJlZ2FuIGl0cyBsaWZlIG9uIHRoZSBMaW51eCBwbGF0Zm9ybS4KK1RoYXQgcGxhdGZvcm0gaGFzIHZpcnR1YWwgY29uc29sZXMsIHdoaWNoLCBhbW9uZyBvdGhlciB0aGluZ3MsCithbGxvdyBtdWx0aXBsZSwgc2ltdWx0YW5lb3VzIGxvZ2luIHNlc3Npb25zLgorVGhlc2UgdmlydHVhbCBjb25zb2xlcywgd2F5IGJhY2sgaW4gdGhlIGVhcmx5IGRheXMsIGVtdWxhdGVkIHNlcmlhbGx5LWNvbm5lY3RlZCB0ZXJtaW5hbHMuCitUaGV5IGNhbiBzdGlsbCBkbyB0aGF0LCBvZiBjb3Vyc2UsIGJ1dCwgdGhlc2UgZGF5cywgdGhleSBjYW4gZG8gYSB3aG9sZSBsb3QgbW9yZS4KKworU2VyaWFsbHktY29ubmVjdGVkIHRlcm1pbmFscywgZXNwZWNpYWxseSB0aG9zZSB0aGF0IHVzZWQgcGFwZXIgKGFzIG9wcG9zZWQgdG8gYSBzY3JlZW4pLCB3ZXJlIGNvbW1vbmx5IGtub3duIGFzIHRlbGV0eXBlcyAob3IgdGVsZXR5cGV3cml0ZXJzKS4KK1RoYXQncyB3aGVyZSB0aGUgdGVybSBgYHR0eWBgIGNvbWVzIGZyb20uCitUaGlzIG1heSB3ZWxsIGFsc28gYmUgdGhlIHJlYXNvbiB0aGF0IHRoZSBkZXZpY2VzIHRoYXQgZGVhZiBwZW9wbGUgdXNlIHRvIGNvbW11bmljYXRlIG92ZXIgaG9uZSBsaW5lcyBhcmUgY2FsbGVkIGBgdHR5c2BgLAoraS5lLiB0aGV5LCB0b28sIGJlaGF2ZSB2ZXJ5IG11Y2ggbGlrZSBzZXJpYWxseS1jb25uZWN0ZWQgdGVybWluYWxzLgorCitGb3IgYSBoaXN0b3JpY2FsIHBlcnNwZWN0aXZlIHJlZ2FyZGluZyB0aGUgdGVybSBgYHR0eWBgLCB5b3UgbWlnaHQgcmVhZDoKK2A8aHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvVGVsZXByaW50ZXI+YF8KKwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRzL1JFQURNRS5LZXlUYWJsZXMgYi9Eb2N1bWVudHMvUkVBRE1FLktleVRhYmxlcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNDFhNmRlCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRzL1JFQURNRS5LZXlUYWJsZXMKQEAgLTAsMCArMSw2MTQgQEAKK35+fn5+fn5+fn4KK0tleSBUYWJsZXMKK35+fn5+fn5+fn4KKworLi4gaW5jbHVkZTo6IHByb2xvZ3VlLnJzdAorCitEZXNjcmlwdGlvbgorPT09PT09PT09PT0KKworRmlsZXMgd2l0aCBuYW1lcyBvZiB0aGUgZm9ybSBgYCoua3RiYGAgYXJlIGtleSB0YWJsZXMsIGFuZCB3aXRoIG5hbWVzIG9mIHRoZQorZm9ybSBgYCoua3RpYGAgYXJlIGtleSBzdWJ0YWJsZXMuIFRoZXkgYXJlIHVzZWQgdG8gYmluZCBicmFpbGxlIGRldmljZSBhbmQKK2NvbXB1dGVyIGtleWJvYXJkIGtleSBjb21iaW5hdGlvbnMgdG8gQlJMVFRZIGNvbW1hbmRzLgorCisqICBCcmFpbGxlIGRldmljZSBrZXkgdGFibGVzIGNhbiB1c3VhbGx5IGJlIGZvdW5kIGluIHRoZQorICAgYGAvZXRjL2JybHR0eS9JbnB1dC94eC9gYCBkaXJlY3RvcnksIHdoZXJlIGBgeHhgYCBpcyB0aGUgdHdvLWxldHRlciBicmFpbGxlCisgICBkcml2ZXIgaWRlbnRpZmljYXRpb24gY29kZSAoc2VlIGBCcmFpbGxlIERyaXZlciBMaXN0YF8pLiBUaGUgbmFtZSBvZiBhCisgICBicmFpbGxlIGRldmljZSBrZXkgdGFibGUgaWRlbnRpZmllcyB0aGUgbW9kZWwocykgZm9yIHdoaWNoIGl0IGlzIHVzZWQuIFRoZQorICAgZHJpdmVyIHNlbGVjdHMgd2hpY2gga2V5IHRhYmxlIGlzIHRvIGJlIHVzZWQuCisKKyogIENvbXB1dGVyIGtleWJvYXJkIGtleSB0YWJsZXMgY2FuIHVzdWFsbHkgYmUgZm91bmQgaW4gdGhlCisgICBgYC9ldGMvYnJsdHR5L0tleWJvYXJkL2BgIGRpcmVjdG9yeS4gVGhlIG5hbWUgb2YgYSBrZXlib2FyZCBrZXkgdGFibGUKKyAgIGRlc2NyaWJlcyB0aGUga2luZCBvZiBrZXlib2FyZCBmb3Igd2hpY2ggaXQgaGFzIGJlZW4gZGVzaWduZWQuIFNlZQorICAgYEtleWJvYXJkIFRhYmxlIExpc3RgXyBmb3IgYSBsaXN0IG9mIEJSTFRUWSdzIGtleWJvYXJkIHRhYmxlcy4KKworKiAgU2VlIHxSRUFETUUuQ3VzdG9taXplfCBmb3IgbW9yZSBkZXRhaWxzIHJlZ2FyZGluZyBrZXkgdGFibGUgbG9jYXRpb25zLgorCitBIGtleSB0YWJsZSBjb25zaXN0cyBvZiBhIHNlcXVlbmNlIG9mIGRpcmVjdGl2ZXMsIG9uZSBwZXIgbGluZSwgd2hpY2ggZGVmaW5lIAoraG93IGtleXMgYW5kIGtleSBjb21iaW5hdGlvbnMgYXJlIHRvIGJlIGludGVycHJldGVkLiBVVEYtOCBjaGFyYWN0ZXIgZW5jb2RpbmcgCittdXN0IGJlIHVzZWQuIFdoaXRlc3BhY2UgKGJsYW5rcywgdGFicykgYXQgdGhlIGJlZ2lubmluZyBvZiBhIGxpbmUsIGFzIHdlbGwgYXMgCitiZWZvcmUgYW5kL29yIGFmdGVyIGFueSBvcGVyYW5kLCBpcyBpZ25vcmVkLiBMaW5lcyBjb250YWluaW5nIG9ubHkgd2hpdGVzcGFjZSAKK2FyZSBpZ25vcmVkLiBJZiB0aGUgZmlyc3Qgbm9uLXdoaXRlc3BhY2UgY2hhcmFjdGVyIG9mIGEgbGluZSBpcyBgYCNgYCB0aGVuCit0aGF0IGxpbmUgaXMgYSBjb21tZW50IGFuZCBpcyBpZ25vcmVkLgorCitUaGUgcHJlY2VkZW5jZSBmb3IgcmVzb2x2aW5nIGVhY2gga2V5IHByZXNzL3JlbGVhc2UgZXZlbnQgaXMgYXMgZm9sbG93czoKKworMSkgQSBob3RrZXkgcHJlc3Mgb3IgcmVsZWFzZSBkZWZpbmVkIHdpdGhpbiB0aGUgY3VycmVudCBjb250ZXh0LgorMikgQSBrZXkgY29tYmluYXRpb24gZGVmaW5lZCB3aXRoaW4gdGhlIGN1cnJlbnQgY29udGV4dC4KKzMpIEEgYnJhaWxsZSBrZXlib2FyZCBjb21tYW5kIGRlZmluZWQgd2l0aGluIHRoZSBjdXJyZW50IGNvbnRleHQuCis0KSBBIGtleSBjb21iaW5hdGlvbiBkZWZpbmVkIHdpdGhpbiB0aGUgZGVmYXVsdCBjb250ZXh0LgorCitEaXJlY3RpdmVzCis9PT09PT09PT09CisKKy4uIHxrZXkgb3BlcmFuZHwgcmVwbGFjZTo6CisgICBUaGUgbmFtZSBvZiB0aGUga2V5IHdob3NlIGF2YWlsYWJpbGl0eSBpcyB0byBiZSB0ZXN0ZWQuCisKKy4uIHxwbGF0Zm9ybSBvcGVyYW5kfCByZXBsYWNlOjoKKyAgIFRoZSBuYW1lIG9mIGEgaG9zdCBwbGF0Zm9ybS4KKyAgIFRoZSBmb2xsb3dpbmcgcGxhdGZvcm0gbmFtZXMgYXJlIHJlY29nbml6ZWQ6CisgICBhbmRyb2lkLCBhcHBsZSwgY3lnd2luLCBkb3MsIGdydWIsIGxpbnV4LAorICAgbWluZ3czMiwgbWluZ3c2NCwgb3BlbmJzZCwgc3VuLCB3aW5kb3dzLgorCitUaGUgQmluZCBEaXJlY3RpdmUKKy0tLS0tLS0tLS0tLS0tLS0tLQorCisuLiBwYXJzZWQtbGl0ZXJhbDo6IGJpbmQgKmtleXMqICpjb21tYW5kcyoKKworVXNlIHRoaXMgZGlyZWN0aXZlIHRvIGRlZmluZSB3aGljaCBCUkxUVFkgY29tbWFuZCBpcyBleGVjdXRlZCB3aGVuIGEgcGFydGljdWxhcgorY29tYmluYXRpb24gb2Yga2V5cyBpcyBwcmVzc2VkLiBUaGUgYmluZGluZyBpcyBkZWZpbmVkIHdpdGhpbiB0aGUgY3VycmVudAorY29udGV4dC4KKworKmtleXMqCisgICBUaGUga2V5IGNvbWJpbmF0aW9uIHdoaWNoIGlzIHRvIGJlIGJvdW5kLiBJdCdzIGEgc2VxdWVuY2Ugb2Ygb25lIG9yIG1vcmUga2V5CisgICBhbmQvb3Iga2V5IGdyb3VwIG5hbWVzIHNlcGFyYXRlZCBieSBwbHVzIChgYCtgYCkgc2lnbnMuIFRoZSBmaW5hbCAob3Igb25seSkKKyAgIGtleSBuYW1lIG1heSBiZSBvcHRpb25hbGx5IHByZWZpeGVkIHdpdGggYW4gZXhjbGFtYXRpb24gKGBgIWBgKSBwb2ludC4gRm9yCisgICBleGFtcGxlOjoKKworICAgICAga2V5MQorICAgICAgZ3JvdXAxCisgICAgICBrZXkxK2tleTIKKyAgICAgIGtleTEra2V5Mitncm91cDEKKyAgICAgICFncm91cDEKKyAgICAgIGtleTErIWtleTIKKworICAgQSBrZXkgZ3JvdXAgbmFtZSByZWZlcnMgdG8gYW55IGtleSB3aXRoaW4gdGhlIG5hbWVkIGdyb3VwLiBBIHNwZWNpZmljIGtleQorICAgd2l0aGluIHRoZSBncm91cCBtYXkgYmUgaWRlbnRpZmllZCBieSBhcHBlbmRpbmcgYSBkb3QgKGBgLmBgKSBhbmQgYSBudW1iZXIKKyAgIHRvIHRoZSBncm91cCdzIG5hbWUuIFRoZSBmaXJzdCBrZXkgd2l0aGluIGEgZ3JvdXAgaXMga2V5ICMxIChlLmcuCisgICBgYGtleUdyb3VwTmFtZS4xYGApLgorCisgICBUaGUga2V5cyBtYXkgYmUgcHJlc3NlZCBpbiBhbnkgb3JkZXIsIHdpdGggdGhlIGV4Y2VwdGlvbiB0aGF0IGlmIHRoZSBmaW5hbAorICAga2V5IG5hbWUgaXMgcHJlZml4ZWQgd2l0aCBhbiBleGNsYW1hdGlvbiBwb2ludCB0aGVuIGl0IG11c3QgYmUgcHJlc3NlZCBsYXN0LgorICAgVGhlIGV4Y2xhbWF0aW9uIHBvaW50IHByZWZpeCBtZWFucyB0aGF0IHRoZSBwcmltYXJ5IGNvbW1hbmQgKHNlZSBiZWxvdykgaXMKKyAgIGV4ZWN1dGVkIGFzIHNvb24gYXMgdGhhdCBrZXkgaXMgcHJlc3NlZC4gSWYgbm90IHVzZWQsIHRoZSBwcmltYXJ5IGNvbW1hbmQgaXMKKyAgIGV4ZWN1dGVkIGFzIHNvb24gYXMgYW55IG9mIHRoZSBrZXlzIGlzIHJlbGVhc2VkLgorCisqY29tbWFuZHMqCisgICBUaGUgcHJpbWFyeSBhbmQgc2Vjb25kYXJ5IEJSTFRUWSBjb21tYW5kcyB0aGF0IGFyZSB0byBiZSBib3VuZCB0byB0aGUga2V5CisgICBjb21iaW5hdGlvbi4gVGhlIHR3byBjb21tYW5kcyAocHJpbWFyeSBmaXJzdCBhbmQgc2Vjb25kYXJ5IGxhc3QpIGFyZQorICAgc2VwYXJhdGVkIGZyb20gb25lIGFub3RoZXIgYnkgYSBjb2xvbiAoYGA6YGApLiBCb3RoIGNvbW1hbmRzIGFyZSBvcHRpb25hbC4KKyAgIElmIGp1c3QgYSBwcmltYXJ5IGNvbW1hbmQgaXMgYmVpbmcgYm91bmQgdGhlbiB0aGUgY29sb24gbmVlZG4ndCBiZSBzdXBwbGllZC4KKyAgIEFsbCBvZiB0aGVzZSBhcmUgdmFsaWQ6CisKKyAgICogIGJpbmQga2V5IHByaW1hcnlDb21tYW5kCisgICAqICBiaW5kIGtleSBwcmltYXJ5Q29tbWFuZDoKKyAgICogIGJpbmQga2V5IHByaW1hcnlDb21tYW5kOnNlY29uZGFyeUNvbW1hbmQKKyAgICogIGJpbmQga2V5IDpzZWNvbmRhcnlDb21tYW5kCisgICAqICBiaW5kIGtleSA6CisKKyAgIFRoZSBwcmltYXJ5IGNvbW1hbmQgaXMgZXhlY3V0ZWQgYXMgZGVzY3JpYmVkIGFib3ZlLiBUaGUgc2Vjb25kYXJ5IGNvbW1hbmQgaXMKKyAgIGV4ZWN1dGVkIGlmIHRoZSBrZXkgY29tYmluYXRpb24gaXMgaGVsZCBmb3IgYSB3aGlsZSAoaS5lLiB3aGVuIGEgbG9uZyBrZXkKKyAgIHByZXNzIGlzIGRldGVjdGVkKS4gSWYgdGhlICoqYXV0b3JlcGVhdCoqIGZlYXR1cmUgaXMgZW5hYmxlZCB0aGVuIHRoZQorICAgc2Vjb25kYXJ5IGNvbW1hbmQgaXMgYXV0b3JlcGVhdGVkIGlmIGl0IGhhcyBiZWVuIGRlZmluZWQsIGVsc2UgdGhlIHByaW1hcnkKKyAgIGNvbW1hbmQgaXMgYXV0b3JlcGVhdGVkLgorCisgICBGb3IgYSBsaXN0IG9mIGNvbW1hbmRzLCBzZWUgfFJFQURNRS5Db21tYW5kUmVmZXJlbmNlfC4KKworLi4gX0JpbmQgQ29tbWFuZCBNb2RpZmllcnM6CisKK09uZSBvciBtb3JlIG1vZGlmaWVycyBtYXkgYmUgb3B0aW9uYWxseSBhcHBlbmRlZCB0byBhIGNvbW1hbmQgbmFtZSBieSB1c2luZyBhIAorcGx1cyAoYGArYGApIHNpZ24gYXMgdGhlIHNlcGFyYXRvci4gRm9yIGV4YW1wbGU6OgorCisgICBiaW5kIGtleSBjb21tYW5kCisgICBiaW5kIGtleSBjb21tYW5kK21vZGlmaWVyMQorICAgYmluZCBrZXkgY29tbWFuZCttb2RpZmllcjErbW9kaWZpZXIyCisKK0ZvciBjb21tYW5kcyB3aGljaCBlbmFibGUvZGlzYWJsZSBhIGZlYXR1cmU6CisKKyogIElmIHRoZSBtb2RpZmllciBgYCtvbmBgIGlzIHNwZWNpZmllZCB0aGVuIHRoZSBmZWF0dXJlIGlzIGVuYWJsZWQuCisqICBJZiB0aGUgbW9kaWZpZXIgYGArb2ZmYGAgaXMgc3BlY2lmaWVkIHRoZW4gdGhlIGZlYXR1cmUgaXMgZGlzYWJsZWQuCisqICBJZiBuZWl0aGVyIGBgK29uYGAgbm9yIGBgK29mZmBgIGlzIHNwZWNpZmllZCB0aGVuIHRoZSBzdGF0ZSBvZiB0aGUgZmVhdHVyZQorICAgaXMgdG9nZ2xlZCBvbi9vZmYuCisKK0ZvciBjb21tYW5kcyB3aGljaCBtb3ZlIHRoZSBicmFpbGxlIHdpbmRvdzoKKworKiAgSWYgdGhlIG1vZGlmaWVyIGBgK3JvdXRlYGAgaXMgc3BlY2lmaWVkIHRoZW4sIGlmIG5lY2Vzc2FyeSwgdGhlIHNjcmVlbgorICAgY3Vyc29yIGlzIGF1dG9tYXRpY2FsbHkgcm91dGVkIHNvIHRoYXQgaXQncyBhbHdheXMgdmlzaWJsZSBvbiB0aGUgYnJhaWxsZQorICAgZGlzcGxheS4KKworRm9yIGNvbW1hbmRzIHdoaWNoIG1vdmUgdGhlIGJyYWlsbGUgd2luZG93IHRvIGEgc3BlY2lmaWMgbGluZSBvbiB0aGUgc2NyZWVuOgorCisqICBJZiB0aGUgbW9kaWZpZXIgYGArdG9sZWZ0YGAgaXMgc3BlY2lmaWVkIHRoZW4gdGhlIGJyYWlsbGUgd2luZG93IGlzIGFsc28KKyAgIG1vdmVkIHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhhdCBsaW5lLgorKiAgSWYgdGhlIG1vZGlmaWVyIGBgK3NjYWxlZGBgIGlzIHNwZWNpZmllZCB0aGVuIHRoZSBrZXkgZ3JvdXAgYm91bmQgdG8gdGhlIAorICAgY29tbWFuZCBpcyBpbnRlcnByZXRlZCBhcyB0aG91Z2ggaXQgd2VyZSBhIHNjcm9sbCBiYXIuIElmIGl0IGlzbid0CisgICBzcGVjaWZpZWQgdGhlbiB0aGVyZSdzIGEgb25lLXRvLW9uZSBjb3JyZXNwb25kZW5jZSBiZXR3ZWVuIGtleXMgYW5kIGxpbmVzLgorCitGb3IgY29tbWFuZHMgd2hpY2ggcmVxdWlyZSBhbiBvZmZzZXQ6CisKKyogIFRoZSBtb2RpZmllciBgYCtvZmZzZXRgYCwgd2hlcmUgYGBvZmZzZXRgYCBpcyBhIG5vbi1uZWdhdGl2ZSBpbnRlZ2VyLCBtYXkgYmUKKyAgIHNwZWNpZmllZC4gSWYgaXQgaXNuJ3Qgc3BlY2lmaWVkIHRoZW4gYGArMGBgIGlzIGFzc3VtZWQuCisKK0ZvciBjb21tYW5kcyB3aGljaCBpbnB1dCBhbnkga2V5Ym9hcmQga2V5IChwcmludCBvciBicmFpbGxlKTogCisKKyogIFRoZSBgYCtzaGlmdGBgIG1vZGlmaWVyIGFkZHMgdGhlIHNoaWZ0IGtleS4KKyogIFRoZSBgYCtjb250cm9sYGAgbW9kaWZpZXIgYWRkcyB0aGUgY29udHJvbCBrZXkuCisqICBUaGUgYGArbWV0YWBgIG1vZGlmaWVyIGFkZHMgdGhlIGxlZnQgYWx0IChvciBtZXRhKSBrZXkuCisqICBUaGUgYGArYWx0Z3JgYCBtb2RpZmllciBhZGRzIHRoZSByaWdodCBhbHQgKG9yIGFsdGdyKSBrZXkuCisqICBUaGUgYGArZ3VpYGAgbW9kaWZpZXIgYWRkcyB0aGUgZ3VpIChvciB3aW5kb3dzKSBrZXkuCisKK0ZvciBjb21tYW5kcyB3aGljaCBpbnB1dCBjaGFyYWN0ZXJzIChwcmludCBvciBicmFpbGxlKToKKworKiAgVGhlIG1vZGlmaWVyIGBgK3VwcGVyYGAgY29udmVydHMgYSBsb3dlcmNhc2UgY2hhcmFjdGVyIHRvIHVwcGVyY2FzZS4KKworRm9yIGNvbW1hbmRzIHdoaWNoIGlucHV0IGJyYWlsbGUgY2hhcmFjdGVyczoKKworKiAgVGhlIG1vZGlmaWVycyBgYCtkb3QxYGAgdGhyb3VnaCBgYCtkb3Q4YGAgYWRkIHRob3NlIGRvdHMgdG8gdGhlIGNoYXJhY3Rlci4KKyogIFRoZSBtb2RpZmllciBgYCtzcGFjZWBgIGFkZHMgdGhlIHNwYWNlIGJhciAob3IgImNob3JkIiBrZXkpIHRvIHRoZQorICAgY2hhcmFjdGVyLgorCitGb3IgY29tbWFuZHMgd2hpY2ggaW5wdXQga2V5Ym9hcmQgc2NhbmNvZGVzOgorCisqICBUaGUgYGArcmVsZWFzZWBgIG1vZGlmaWVyIG1lYW5zIHRoYXQgaXQncyBhIGtleSByZWxlYXNlIHNjYW5jb2RlLiBJZiBpdAorICAgaXNuJ3Qgc3BlY2lmaWVkIHRoZW4gaXQncyBhIGtleSBwcmVzcyBzY2FuY29kZSAodW5sZXNzLCBvZiBjb3Vyc2UsIHRoZQorICAgc2NhbmNvZGUgaXRzZWxmIGluZGljYXRlcyBzb21ldGhpbmcgZWxzZSkuCisqICBUaGUgYGArZW11bDBgYCBtb2RpZmllciBtZWFucyB0aGF0IGl0J3MgYW4gZW11bGF0aW9uIG1vZGUgMCBzY2FuY29kZS4KKyogIFRoZSBgYCtlbXVsMWBgIG1vZGlmaWVyIG1lYW5zIHRoYXQgaXQncyBhbiBlbXVsYXRpb24gbW9kZSAxIHNjYW5jb2RlLgorCitFeGFtcGxlczo6CisKKyAgIGJpbmQgS2V5MSBDU1JUUksKKyAgIGJpbmQgS2V5MStLZXkyIENTUlRSSytvZmYKKyAgIGJpbmQgS2V5MStLZXkzIENTUlRSSytvbgorICAgYmluZCBLZXk0IFRPUAorICAgYmluZCBLZXk1IFRPUCtyb3V0ZQorICAgYmluZCBWZXJ0aWNhbFNlbnNvciBHT1RPTElORSt0b2xlZnQrc2NhbGVkCisgICBiaW5kIEtleTYgQ09OVEVYVCtjb250ZXh0MQorCitUaGUgQ29udGV4dCBEaXJlY3RpdmUKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisuLiBwYXJzZWQtbGl0ZXJhbDo6IGNvbnRleHQgKm5hbWUqICp0aXRsZSoKKworVXNlIHRoaXMgZGlyZWN0aXZlIHRvIGRlZmluZSBhbHRlcm5hdGUgd2F5cyB0byBpbnRlcnByZXQgY2VydGFpbiBrZXkgZXZlbnRzCithbmQvb3IgY29tYmluYXRpb25zLgorU3dpdGNoaW5nIHRvIGFub3RoZXIgY29udGV4dCBpcyBkb25lIHZpYSB0aGUgQlJMVFRZIGNvbW1hbmQgQ09OVEVYVCtuYW1lLgorCitBIGNvbnRleHQgY29udGFpbnMgZGVmaW5pdGlvbnMgY3JlYXRlZCBieSBhbnkgb2Y6CisKKyogIGBUaGUgQmluZCBEaXJlY3RpdmVgXworKiAgYFRoZSBIb3RrZXkgRGlyZWN0aXZlYF8KKyogIGBUaGUgSWdub3JlIERpcmVjdGl2ZWBfCisqICBgVGhlIE1hY3JvIERpcmVjdGl2ZWBfCisqICBgVGhlIE1hcCBEaXJlY3RpdmVgXworKiAgYFRoZSBSdW4gRGlyZWN0aXZlYF8KKyogIGBUaGUgU3VwZXJpbXBvc2UgRGlyZWN0aXZlYF8KKworKm5hbWUqCisgICBXaGljaCBjb250ZXh0IHN1YnNlcXVlbnQgZGVmaW5pdGlvbnMgYXJlIHRvIGJlIGNyZWF0ZWQgd2l0aGluLgorCisqdGl0bGUqCisgICBBIHBlcnNvbi1yZWFkYWJsZSBkZXNjcmlwdGlvbiBvZiB0aGUgY29udGV4dC4gSXQgbWF5IGNvbnRhaW4gc3BhY2VzLgorICAgU3RhbmRhcmQgY2FwaXRhbGl6YXRpb24gY29udmVudGlvbnMgc2hvdWxkIGJlIHVzZWQuIFRoaXMgb3BlcmFuZCBpcworICAgb3B0aW9uYWwuIElmIHN1cHBsaWVkIHdoZW4gc2VsZWN0aW5nIGEgY29udGV4dCB3aGljaCBhbHJlYWR5IGhhcyBhIHRpdGxlCisgICB0aGVuIHRoZSB0d28gbXVzdCBtYXRjaC4gU3BlY2lhbCBjb250ZXh0cyBhbHJlYWR5IGhhdmUgaW50ZXJuYWxseS1hc3NpZ25lZAorICAgdGl0bGVzLgorCitBIGNvbnRleHQgaXMgY3JlYXRlZCB0aGUgZmlyc3QgdGltZSBpdCdzIHNlbGVjdGVkLiBJdCBtYXkgYmUgcmVzZWxlY3RlZCBhbnkKK251bWJlciBvZiB0aW1lcyB0aGVyZWFmdGVyLiBUaGVzZSBzcGVjaWFsIGNvbnRleHRzIGFyZSBwcmVkZWZpbmVkOgorCitgYGRlZmF1bHRgYAorICAgVGhlIGRlZmF1bHQgY29udGV4dC4gSWYgYSBkZWZpbml0aW9uIGNhbid0IGJlIGZvdW5kIHdpdGhpbiB0aGUgY3VycmVudAorICAgY29udGV4dCB0aGVuIGl0J3MgbG9va2VkIHVwIHdpdGhpbiB0aGUgZGVmYXVsdCBjb250ZXh0LiBUaGlzIG9ubHkgYXBwbGllcworICAgdG8gZGVmaW5pdGlvbnMgY3JlYXRlZCBieToKKworICAgKiAgYFRoZSBCaW5kIERpcmVjdGl2ZWBfLgorICAgKiAgYFRoZSBNYWNybyBEaXJlY3RpdmVgXy4KKyAgICogIGBUaGUgUnVuIERpcmVjdGl2ZWBfLgorCitgYG1lbnVgYAorICAgVGhpcyBjb250ZXh0IGlzIHVzZWQgd2hlbiB3aXRoaW4gQlJMVFRZJ3MgUHJlZmVyZW5jZXMgTWVudS4KKworQWxsIHN1YnNlcXVlbnQgZGVmaW5pdGlvbnMgdW50aWwgZWl0aGVyIHRoZSBuZXh0IGBgY29udGV4dGBgIGRpcmVjdGl2ZSBvciB0aGUKK2VuZCBvZiB0aGUgY3VycmVudCBpbmNsdWRlIGxldmVsIGFyZSBjcmVhdGVkIHdpdGhpbiB0aGUgc2VsZWN0ZWQgY29udGV4dC4gVGhlIAoraW5pdGlhbCBjb250ZXh0IG9mIHRoZSB0b3AtbGV2ZWwga2V5IHRhYmxlIGlzIGBgZGVmYXVsdGBgLiBUaGUgaW5pdGlhbCBjb250ZXh0CitvZiBhbiBpbmNsdWRlZCBrZXkgc3VidGFibGUgaXMgdGhlIGNvbnRleHQgd2hpY2ggd2FzIHNlbGVjdGVkIHdoZW4gaXQgd2FzIAoraW5jbHVkZWQuIENvbnRleHQgY2hhbmdlcyB3aXRoaW4gaW5jbHVkZWQga2V5IHN1YnRhYmxlcyBkb24ndCBhZmZlY3QgdGhlIAorY29udGV4dCBvZiB0aGUgaW5jbHVkaW5nIGtleSB0YWJsZSBvciBzdWJ0YWJsZS4KKworSWYgYSBjb250ZXh0IGhhcyBhIHRpdGxlIHRoZW4gaXQgaXMgcGVyc2lzdGVudC4gV2hlbiBhIGtleSBldmVudCBjYXVzZXMgYQorcGVyc2lzdGVudCBjb250ZXh0IHRvIGJlIGFjdGl2YXRlZCwgdGhhdCBjb250ZXh0IHJlbWFpbnMgY3VycmVudCB1bnRpbCBhCitzdWJzZXF1ZW50IGtleSBldmVudCBjYXVzZXMgYSBkaWZmZXJlbnQgcGVyc2lzdGVudCBjb250ZXh0IHRvIGJlIGFjdGl2YXRlZC4KKworSWYgYSBjb250ZXh0IGRvZXNuJ3QgaGF2ZSBhIHRpdGxlIHRoZW4gaXQgaXMgdGVtcG9yYXJ5LiBXaGVuIGEga2V5IGV2ZW50IGNhdXNlcworYSB0ZW1wb3JhcnkgY29udGV4dCB0byBiZSBhY3RpdmF0ZWQsIHRoYXQgY29udGV4dCBpcyBvbmx5IHVzZWQgdG8gaW50ZXJwcmV0IHRoZSAKK3ZlcnkgbmV4dCBrZXkgZXZlbnQuCisKK0V4YW1wbGVzOjoKKworICAgY29udGV4dCBtZW51CisgICBjb250ZXh0IGJyYWlsbGUgQnJhaWxsZSBJbnB1dAorICAgY29udGV4dCBERVNDQ0hBUgorCitUaGUgSGlkZSBEaXJlY3RpdmUKKy0tLS0tLS0tLS0tLS0tLS0tLQorCisuLiBwYXJzZWQtbGl0ZXJhbDo6IGhpZGUgKnN0YXRlKgorCitVc2UgdGhpcyBkaXJlY3RpdmUgdG8gc3BlY2lmeSB3aGV0aGVyIG9yIG5vdCBkZWZpbml0aW9ucyBjcmVhdGVkIGJ5OgorCisqICBgVGhlIEJpbmQgRGlyZWN0aXZlYF8KKyogIGBUaGUgSG90a2V5IERpcmVjdGl2ZWBfCisqICBgVGhlIE1hcCBEaXJlY3RpdmVgXworKiAgYFRoZSBTdXBlcmltcG9zZSBEaXJlY3RpdmVgXworCithbmQgdGV4dCBhZGRlZCBieToKKworKiAgYFRoZSBOb3RlIERpcmVjdGl2ZWBfCisKK2FyZSB0byBiZSBpbmNsdWRlZCB3aXRoaW4gdGhlIGtleSB0YWJsZSdzIGhlbHAgdGV4dC4KKworKnN0YXRlKgorICAgT25lIG9mIHRoZXNlIGtleXdvcmRzOgorCisgICBgYG9uYGAKKyAgICAgIFRoZXkncmUgZXhjbHVkZWQuCisgICBgYG9mZmBgCisgICAgICBUaGV5J3JlIGluY2x1ZGVkLgorCitUaGUgc3BlY2lmaWVkIGhpZGUgc3RhdGUgYXBwbGllcyB0byBhbGwgc3Vic2VxdWVudCBkZWZpbml0aW9ucyBhbmQgbm90ZXMgdW50aWwgCitlaXRoZXIgdGhlIG5leHQgYGBoaWRlYGAgZGlyZWN0aXZlIG9yIHRoZSBlbmQgb2YgdGhlIGN1cnJlbnQgaW5jbHVkZSBsZXZlbC4gVGhlCitpbml0aWFsIGhpZGUgc3RhdGUgb2YgdGhlIHRvcC1sZXZlbCBrZXkgdGFibGUgaXMgYGBvZmZgYC4gVGhlIGluaXRpYWwgaGlkZQorc3RhdGUgb2YgYW4gaW5jbHVkZWQga2V5IHN1YnRhYmxlIGlzIHRoZSBoaWRlIHN0YXRlIHRoYXQgd2FzIGluIGVmZmVjdCB3aGVuIGl0Cit3YXMgaW5jbHVkZWQuIEhpZGUgU3RhdGUgY2hhbmdlcyB3aXRoaW4gaW5jbHVkZWQga2V5IHN1YnRhYmxlcyBkb24ndCBhZmZlY3QgdGhlCitoaWRlIHN0YXRlIG9mIHRoZSBpbmNsdWRpbmcga2V5IHRhYmxlIG9yIHN1YnRhYmxlLgorCitFeGFtcGxlczo6CisKKyAgIGhpZGUgb24KKworVGhlIEhvdGtleSBEaXJlY3RpdmUKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy4uIHBhcnNlZC1saXRlcmFsOjogaG90a2V5ICprZXkqICpwcmVzcyogKnJlbGVhc2UqCisKK1VzZSB0aGlzIGRpcmVjdGl2ZSB0byBiaW5kIHRoZSBwcmVzcyBhbmQgcmVsZWFzZSBldmVudHMgb2YgYSBzcGVjaWZpYyBrZXkgdG8KK3R3byBzZXBhcmF0ZSBCUkxUVFkgY29tbWFuZHMuIFRoZSBiaW5kaW5ncyBhcmUgZGVmaW5lZCB3aXRoaW4gdGhlIGN1cnJlbnQKK2NvbnRleHQuCisKKyprZXkqCisgICBUaGUgbmFtZSBvZiB0aGUga2V5IHdoaWNoIGlzIHRvIGJlIGJvdW5kLgorCisqcHJlc3MqCisgICBUaGUgbmFtZSBvZiB0aGUgQlJMVFRZIGNvbW1hbmQgd2hpY2ggaXMgdG8gYmUgZXhlY3V0ZWQgd2hlbmV2ZXIgdGhlIGtleSBpcworICAgcHJlc3NlZC4KKworKnJlbGVhc2UqCisgICBUaGUgbmFtZSBvZiB0aGUgQlJMVFRZIGNvbW1hbmQgd2hpY2ggaXMgdG8gYmUgZXhlY3V0ZWQgd2hlbmV2ZXIgdGhlIGtleSBpcworICAgcmVsZWFzZWQuCisKK01vZGlmaWVycyBtYXkgYmUgYXBwZW5kZWQgdG8gdGhlIGNvbW1hbmQgbmFtZXMuIFNlZQorYEJpbmQgQ29tbWFuZCBNb2RpZmllcnNgXyBmb3IgZGV0YWlscy4KKworU3BlY2lmeSB0aGUgYGBOT09QYGAgY29tbWFuZCBpZiBubyBjb21tYW5kIGlzIHRvIGJlIGV4ZWN1dGVkLiBTcGVjaWZ5aW5nIHRoZQorYGBOT09QYGAgY29tbWFuZCBmb3IgYm90aCBldmVudHMgZWZmZWN0aXZlbHkgZGlzYWJsZXMgdGhlIGtleS4KKworRXhhbXBsZXM6OgorCisgICBob3RrZXkgS2V5MSBDU1JWSVMrb2ZmIENTUlZJUytvbgorICAgaG90a2V5IEtleTIgTk9PUCBOT09QCisKK1RoZSBJZktleSBEaXJlY3RpdmUKKy0tLS0tLS0tLS0tLS0tLS0tLS0KKworLi4gcGFyc2VkLWxpdGVyYWw6OiBpZktleSAqa2V5KiAqZGlyZWN0aXZlKgorCitVc2UgdGhpcyBkaXJlY3RpdmUgdG8gb25seSBwcm9jZXNzIG9uZSBvciBtb3JlIGRpcmVjdGl2ZXMgaWYgdGhlIGRldmljZSBoYXMgYQorcGFydGljdWxhciBrZXkuCisKKyprZXkqCisgICB8a2V5IG9wZXJhbmR8CisKKypkaXJlY3RpdmUqCisgICB8ZGlyZWN0aXZlIG9wZXJhbmR8CisKK0V4YW1wbGVzOjoKKworICAgaWZLZXkgS2V5MSBpZmtleSBLZXkyIGJpbmQgS2V5MStLZXkyIEhPTUUKKworVGhlIElmTm90S2V5IERpcmVjdGl2ZQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisuLiBwYXJzZWQtbGl0ZXJhbDo6IGlmTm90S2V5ICprZXkqICpkaXJlY3RpdmUqCisKK1VzZSB0aGlzIGRpcmVjdGl2ZSB0byBvbmx5IHByb2Nlc3Mgb25lIG9yIG1vcmUgZGlyZWN0aXZlcyBpZiB0aGUgZGV2aWNlIGRvZXNuJ3QKK2hhdmUgYSBwYXJ0aWN1bGFyIGtleS4KKworKmtleSoKKyAgIHxrZXkgb3BlcmFuZHwKKworKmRpcmVjdGl2ZSoKKyAgIHxkaXJlY3RpdmUgb3BlcmFuZHwKKworRXhhbXBsZXM6OgorCisgICBpZk5vdEtleSBLZXkyIGJpbmQgS2V5MSBIT01FCisKK1RoZSBJZlBsYXRmb3JtIERpcmVjdGl2ZQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy4uIHBhcnNlZC1saXRlcmFsOjogaWZQbGF0Zm9ybSAqcGxhdGZvcm0qICpkaXJlY3RpdmUqCisKK1VzZSB0aGlzIGRpcmVjdGl2ZSB0byBvbmx5IHByb2Nlc3Mgb25lIG9yIG1vcmUgZGlyZWN0aXZlcyBpZiBydW5uaW5nIG9uIHRoZQorbmFtZWQgaG9zdCBwbGF0Zm9ybS4KKworKnBsYXRmb3JtKgorICAgfHBsYXRmb3JtIG9wZXJhbmR8CisKKypkaXJlY3RpdmUqCisgICB8ZGlyZWN0aXZlIG9wZXJhbmR8CisKK0V4YW1wbGVzOjoKKworICAgaWZQbGF0Zm9ybSBhbmRyb2lkIGluY2x1ZGUgYW5kcm9pZC5rdGkKKworVGhlIElmTm90UGxhdGZvcm0gRGlyZWN0aXZlCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworLi4gcGFyc2VkLWxpdGVyYWw6OiBpZk5vdFBsYXRmb3JtICpwbGF0Zm9ybSogKmRpcmVjdGl2ZSoKKworVXNlIHRoaXMgZGlyZWN0aXZlIHRvIG9ubHkgcHJvY2VzcyBvbmUgb3IgbW9yZSBkaXJlY3RpdmVzIGlmIG5vdCBydW5uaW5nIG9uCit0aGUgbmFtZWQgaG9zdCBwbGF0Zm9ybS4KKworKnBsYXRmb3JtKgorICAgfHBsYXRmb3JtIG9wZXJhbmR8CisKKypkaXJlY3RpdmUqCisgICB8ZGlyZWN0aXZlIG9wZXJhbmR8CisKK0V4YW1wbGVzOjoKKworICAgaWZOb3RQbGF0Zm9ybSBncnViIGluY2x1ZGUgYWR2YW5jZWQua3RpCisKK1RoZSBJZ25vcmUgRGlyZWN0aXZlCistLS0tLS0tLS0tLS0tLS0tLS0tLQorCisuLiBwYXJzZWQtbGl0ZXJhbDo6IGlnbm9yZSAqa2V5KgorCitVc2UgdGhpcyBkaXJlY3RpdmUgdG8gaWdub3JlIGEgc3BlY2lmaWMga2V5IHdoaWxlIHdpdGhpbiB0aGUgY3VycmVudCBjb250ZXh0LgorCisqa2V5KgorICAgVGhlIG5hbWUgb2YgdGhlIGtleSB3aGljaCBpcyB0byBiZSBpZ25vcmVkLgorCitFeGFtcGxlczo6CisKKyAgIGlnbm9yZSBLZXkxCisKK1RoZSBJc29sYXRlZCBEaXJlY3RpdmUKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworLi4gcGFyc2VkLWxpdGVyYWw6OiBpc29sYXRlZAorCitVc2UgdGhpcyBkaXJlY3RpdmUgdG8gaXNvbGF0ZSB0aGUgY3VycmVudCBjb250ZXh0LgorSWYgYSBrZXkgYmluZGluZyBjYW4ndCBiZSBmb3VuZCB3aXRoaW4gYW4gaXNvbGF0ZWQgY29udGV4dAordGhlbiBpdCB3b24ndCBiZSBsb29rZWQgdXAgd2l0aGluIHRoZSBkZWZhdWx0IGNvbnRleHQuCisKK0V4YW1wbGVzOjoKKworICAgaXNvbGF0ZWQKKworVGhlIE1hY3JvIERpcmVjdGl2ZQorLS0tLS0tLS0tLS0tLS0tLS0tLQorCisuLiBwYXJzZWQtbGl0ZXJhbDo6IG1hY3JvICprZXlzKiAqY29tbWFuZCogLi4uCisKK1VzZSB0aGlzIGRpcmVjdGl2ZSB0byBiaW5kIGEgc2VxdWVuY2Ugb2YgQlJMVFkgY29tbWFuZHMgdG8gYSBrZXkgY29tYmluYXRpb24uCisKKyprZXlzKgorICAgVGhlIGtleSBjb21iaW5hdGlvbiBiZWluZyBkZWZpbmVkLgorCisqY29tbWFuZCogLi4uCisgICBUaGUgQlJMVFRZIGNvbW1hbmRzIHRoYXQgYXJlIHRvIGJlIGV4ZWN1dGVkLgorCitFeGFtcGxlczo6CisKKyAgIG1hY3JvIEtleTErS2V5MiBUT1AgTE5FTkQKKworVGhlIE1hcCBEaXJlY3RpdmUKKy0tLS0tLS0tLS0tLS0tLS0tCisKKy4uIHBhcnNlZC1saXRlcmFsOjogbWFwICprZXkqICpmdW5jdGlvbioKKworVXNlIHRoaXMgZGlyZWN0aXZlIHRvIG1hcCBhIGtleSB0byBhIGJyYWlsbGUga2V5Ym9hcmQgZnVuY3Rpb24uIFRoZSBtYXBwaW5nIGlzCitkZWZpbmVkIHdpdGhpbiB0aGUgY3VycmVudCBjb250ZXh0LgorCisqa2V5KgorICAgVGhlIG5hbWUgb2YgdGhlIGtleSB0aGF0IGlzIHRvIGJlIG1hcHBlZC4gTW9yZSB0aGFuIG9uZSBrZXkgbWF5IGJlIG1hcHBlZCB0bworICAgdGhlIHNhbWUgYnJhaWxsZSBrZXlib2FyZCBmdW5jdGlvbi4KKworLi4gX1RoZSBNYXAgRnVuY3Rpb24gT3BlcmFuZDoKKworKmZ1bmN0aW9uKgorICAgVGhlIG5hbWUgb2YgdGhlIGJyYWlsbGUga2V5Ym9hcmQgZnVuY3Rpb24uIEl0IG1heSBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZworICAga2V5d29yZHM6CisKKyAgIGBgRE9UMWBgCisgICAgICBUaGUgdXBwZXItbGVmdCBzdGFuZGFyZCBicmFpbGxlIGRvdCBrZXkuCisgICBgYERPVDJgYAorICAgICAgVGhlIG1pZGRsZS1sZWZ0IHN0YW5kYXJkIGJyYWlsbGUgZG90IGtleS4KKyAgIGBgRE9UM2BgCisgICAgICBUaGUgbG93ZXItbGVmdCBzdGFuZGFyZCBicmFpbGxlIGRvdCBrZXkuCisgICBgYERPVDRgYAorICAgICAgVGhlIHVwcGVyLXJpZ2h0IHN0YW5kYXJkIGJyYWlsbGUgZG90IGtleS4KKyAgIGBgRE9UNWBgCisgICAgICBUaGUgbWlkZGxlLXJpZ2h0IHN0YW5kYXJkIGJyYWlsbGUgZG90IGtleS4KKyAgIGBgRE9UNmBgCisgICAgICBUaGUgbG93ZXItcmlnaHQgc3RhbmRhcmQgYnJhaWxsZSBkb3Qga2V5LgorICAgYGBET1Q3YGAKKyAgICAgIFRoZSBsb3dlci1sZWZ0IGNvbXB1dGVyIGJyYWlsbGUgZG90IGtleS4KKyAgIGBgRE9UOGBgCisgICAgICBUaGUgbG93ZXItcmlnaHQgY29tcHV0ZXIgYnJhaWxsZSBkb3Qga2V5LgorICAgYGBTUEFDRWBgCisgICAgICBUaGUgc3BhY2UgYmFyLgorICAgYGBTSElGVGBgCisgICAgICBUaGUgc2hpZnQga2V5LgorICAgYGBVUFBFUmBgCisgICAgICBJZiBhIGxvd2VyY2FzZSBsZXR0ZXIgaXMgYmVpbmcgZW50ZXJlZCB0aGVuIHRyYW5zbGF0ZSBpdCB0byBpdHMKKyAgICAgIHVwcGVyY2FzZSBlcXVpdmFsZW50LgorICAgYGBDT05UUk9MYGAKKyAgICAgIFRoZSBjb250cm9sIGtleS4KKyAgIGBgTUVUQWBgCisgICAgICBUaGUgbGVmdCBhbHQgKG9yIG1ldGEpIGtleS4KKyAgIGBgQUxUR1JgYAorICAgICAgVGhlIHJpZ2h0IGFsdCAob3IgYWx0Z3IpIGtleS4KKyAgIGBgR1VJYGAKKyAgICAgIFRoZSBndWkgKG9yIHdpbmRvd3MpIGtleS4KKworSWYgYSBrZXkgY29tYmluYXRpb24gY29uc2lzdHMgb25seSBvZiBrZXlzIHdoaWNoIGhhdmUgYmVlbiBtYXBwZWQgdG8gYnJhaWxsZSAKK2tleWJvYXJkIGZ1bmN0aW9ucywgYW5kIGlmIHRob3NlIGZ1bmN0aW9ucywgd2hlbiBjb21iaW5lZCwgZm9ybSBhIHZhbGlkIGJyYWlsbGUgCitrZXlib2FyZCBjb21tYW5kLCB0aGVuIHRoYXQgY29tbWFuZCBpcyBleGVjdXRlZCBhcyBzb29uIGFzIGFueSBvZiB0aGUga2V5cyBpcyAKK3JlbGVhc2VkLiBBIHZhbGlkIGJyYWlsbGUga2V5Ym9hcmQgY29tbWFuZCBtdXN0IGluY2x1ZGUgZWl0aGVyIGFueSBjb21iaW5hdGlvbiAKK29mIGRvdCBrZXlzIG9yIHRoZSBzcGFjZSBiYXIgKGJ1dCBub3QgYm90aCkuIElmIGF0IGxlYXN0IG9uZSBkb3Qga2V5IGlzIAoraW5jbHVkZWQgdGhlbiB0aGUgYnJhaWxsZSBrZXlib2FyZCBmdW5jdGlvbnMgc3BlY2lmaWVkIGJ5CitgVGhlIFN1cGVyaW1wb3NlIERpcmVjdGl2ZWBfIHdpdGhpbiB0aGUgc2FtZSBjb250ZXh0IGFyZSBhbHNvIGltcGxpY2l0bHkKK2luY2x1ZGVkLgorCitFeGFtcGxlczo6CisKKyAgIG1hcCBLZXkxIERPVDEKKworVGhlIE5vdGUgRGlyZWN0aXZlCistLS0tLS0tLS0tLS0tLS0tLS0KKworLi4gcGFyc2VkLWxpdGVyYWw6OiBub3RlICp0ZXh0KgorCitVc2UgdGhpcyBkaXJlY3RpdmUgdG8gYWRkIGEgcGVyc29uLXJlYWRhYmxlIGV4cGxhbmF0aW9uIHRvIHRoZSBrZXkgdGFibGUncyBoZWxwCit0ZXh0LiBOb3RlcyBhcmUgY29tbW9ubHkgdXNlZCwgZm9yIGV4YW1wbGUsIHRvIGRlc2NyaWJlIHRoZSBwbGFjZW1lbnQsIHNpemVzLAorYW5kIHNoYXBlcyBvZiB0aGUga2V5cyBvbiB0aGUgZGV2aWNlLgorCisqdGV4dCoKKyAgIFRoZSBleHBsYW5hdGlvbiB0aGF0IGlzIHRvIGJlIGFkZGVkLiBJdCBtYXkgY29udGFpbiBzcGFjZXMsIGFuZCBzaG91bGQgYmUKKyAgIGdyYW1tYXRpY2FsbHkgY29ycmVjdC4KKworRWFjaCBub3RlIHNwZWNpZmllcyBleGFjdGx5IG9uZSBsaW5lIG9mIGV4cGxhbmF0b3J5IHRleHQuIExlYWRpbmcgc3BhY2UgaXMgCitpZ25vcmVkIHNvIGluZGVudGF0aW9uIGNhbm5vdCBiZSBzcGVjaWZpZWQuCisKK1RoZXJlJ3Mgbm8gbGltaXQgdG8gdGhlIG51bWJlciBvZiBub3RlcyB0aGF0IG1heSBiZSBhZGRlZC4gQWxsIG9mIHRoZW0gYXJlIAorZ2F0aGVyZWQgdG9nZXRoZXIgYW5kIHByZXNlbnRlZCBpbiBhIHNpbmdsZSBibG9jayBhdCB0aGUgc3RhcnQgb2YgdGhlIGtleSAKK3RhYmxlJ3MgaGVscCB0ZXh0LgorCisqICBBIG5vdGUgdGhhdCBkb2Vzbid0IGhhdmUgYSBzcGVjaWFsIHByZWZpeCBiZWdpbnMgYSBuZXcgb3V0ZXIgYnVsbGV0ZWQgbGlzdAorICAgZWxlbWVudC4KKworKiAgQSBub3RlIHRoYXQgaXMgcHJlZml4ZWQgd2l0aCBhbiBhc3RlcmlzayAoYGAqYGApIGNvbnRpbnVlcyB0aGUgY3VycmVudCBvdXRlcgorICAgYnVsbGV0ZWQgbGlzdCBlbGVtZW50LgorCisqICBBIG5vdGUgdGhhdCBpcyBwcmVmaXhlZCB3aXRoIGEgcGx1cyAoYGArYGApIHNpZ24gaXMgYW4gaW5uZXIgYnVsbGV0Z2VkIGxpc3QKKyAgIGVsZW1lbnQuCisKK0V4YW1wbGVzOjoKKworICAgbm90ZSBUaGlzIGlzIHRoZSBmaXJzdCBvdXRlciBsaXN0IGVsZW1lbnQuCisgICBub3RlIFRoaXMgaXMgdGhlIHNlY29uZCBvdXRlciBsaXN0IGVsZW1lbnQuCisgICBub3RlICogQ29udGludWUgdGhlIHNlY29uZCBvdXRlciBsaXN0IGVsZW1lbnQuCisgICBub3RlICsgVGhlIGZpcnN0IGVsZW1lbnQgb2YgYW4gaW5uZXIgbGlzdC4KKyAgIG5vdGUgKyBUaGUgc2Vjb25kIGVsZW1lbnQgb2YgYW4gaW5uZXIgbGlzdC4KKyAgIG5vdGUgKiBUaGUgdGhpcmQgbGluZSBvZiB0aGUgc2Vjb25kIG91dGVyIGxpc3QgZWxlbWVudC4KKworVGhlIGFib3ZlIGV4YW1wbGUgd291bGQgYmUgcmVuZGVyZWQgYXM6CisKKyogIFRoaXMgaXMgdGhlIGZpcnN0IG91dGVyIGxpc3QgZWxlbWVudC4KKworKiAgVGhpcyBpcyB0aGUgc2Vjb25kIG91dGVyIGxpc3QgZWxlbWVudC4KKyAgIENvbnRpbnVlIHRoZSBzZWNvbmQgb3V0ZXIgbGlzdCBlbGVtZW50LgorCisgICArICBUaGUgZmlyc3QgZWxlbWVudCBvZiBhbiBpbm5lciBsaXN0LgorCisgICArICBUaGUgc2Vjb25kIGVsZW1lbnQgb2YgYW4gaW5uZXIgbGlzdC4KKworICAgVGhlIHRoaXJkIGxpbmUgb2YgdGhlIHNlY29uZCBvdXRlciBsaXN0IGVsZW1lbnQuCisKK1RoZSBSdW4gRGlyZWN0aXZlCistLS0tLS0tLS0tLS0tLS0tLQorCisuLiBwYXJzZWQtbGl0ZXJhbDo6IHJ1biAqa2V5cyogKm5hbWUqIFsqYXJndW1lbnQqIC4uLl0KKworVXNlIHRoaXMgZGlyZWN0aXZlIHRvIGJpbmQgYSBob3N0IGNvbW1hbmQgdG8gYSBrZXkgY29tYmluYXRpb24uCisKKyprZXlzKgorICAgVGhlIGtleSBjb21iaW5hdGlvbiBiZWluZyBkZWZpbmVkLgorCis8bmFtZSoKKyAgIFRoZSBuYW1lIG9mIHRoZSBob3N0IGNvbW1hbmQuIEl0IG1heSBhbHNvIGJlIHRoZSBwYXRoLgorCisqYXJndW1lbnQqIC4uLgorICAgVGhlIGFyZ3VtZW50cyB0byBiZSBwYXNzZWQgdG8gdGhlIGhvc3QgY29tbWFuZC4KKworRXhhbXBsZXM6OgorCisgICBydW4gS2V5MStLZXkyIHBraWxsIC0tZXhhY3QgYnJsdHR5CisKK1RoZSBTdXBlcmltcG9zZSBEaXJlY3RpdmUKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworLi4gcGFyc2VkLWxpdGVyYWw6OiBzdXBlcmltcG9zZSAqZnVuY3Rpb24qCisKK1VzZSB0aGlzIGRpcmVjdGl2ZSB0byBpbXBsaWNpdGx5IGluY2x1ZGUgYSBicmFpbGxlIGtleWJvYXJkIGZ1bmN0aW9uIHdoZW5ldmVyIGEKK2JyYWlsbGUga2V5Ym9hcmQgY29tbWFuZCBjb25zaXN0aW5nIG9mIGF0IGxlYXN0IG9uZSBkb3QgaXMgZXhlY3V0ZWQuIE9ubHkKK2ltcGxpY2l0IGluY2x1c2lvbnMgZGVmaW5lZCB3aXRoaW4gdGhlIGN1cnJlbnQgY29udGV4dCBhcmUgcGVyZm9ybWVkLiBBbnkKK251bWJlciBvZiB0aGVzZSBkaXJlY3RpdmVzIG1heSBiZSBzcGVjaWZpZWQuCisKKypmdW5jdGlvbioKKyAgIFRoZSBuYW1lIG9mIHRoZSBicmFpbGxlIGtleWJvYXJkIGZ1bmN0aW9uIHRoYXQgaXMgdG8gYmUgaW1wbGljaXRseSBpbmNsdWRlZC4KKyAgIFNlZSBgVGhlIE1hcCBGdW5jdGlvbiBPcGVyYW5kYF8gZm9yIGRldGFpbHMuCisKK0V4YW1wbGVzOjoKKworICAgc3VwZXJpbXBvc2UgRE9UNworCitUaGUgVGl0bGUgRGlyZWN0aXZlCistLS0tLS0tLS0tLS0tLS0tLS0tCisKKy4uIHBhcnNlZC1saXRlcmFsOjogdGl0bGUgPHRleHQ+CisKK1VzZSB0aGlzIGRpcmVjdGl2ZSB0byBzcGVjaWZ5IGEgcGVyc29uLXJlYWRhYmxlLCBvbmUtbGluZSBzdW1tYXJ5IG9mIHRoZSBrZXkKK3RhYmxlJ3MgcHVycG9zZS4KKworKnRleHQqCisgICBBIGJyaWVmIHN1bW1hcnkgb2Ygd2hhdCB0aGUga2V5IHRhYmxlIGlzIHVzZWQgZm9yLiBJdCBtYXkgY29udGFpbiBzcGFjZXMsCisgICBhbmQgc3RhbmRhcmQgY2FwaXRhbGl6YXRpb24gY29udmVudGlvbnMgc2hvdWxkIGJlIHVzZWQuCisKK1RoZSB0aXRsZSBvZiB0aGUga2V5IHRhYmxlIG1heSBiZSBzcGVjaWZpZWQgb25seSBvbmNlLgorCitFeGFtcGxlczo6CisKKyAgIHRpdGxlIEJpbmRpbmdzIGZvciBLZXlwYWQtYmFzZWQgTmF2aWdhdGlvbgorCisuLiBpbmNsdWRlOjogbmVzdGluZy1kaXJlY3RpdmVzLnJzdAorLi4gaW5jbHVkZTo6IHZhcmlhYmxlLWRpcmVjdGl2ZXMucnN0CisuLiBpbmNsdWRlOjogY29uZGl0aW9uLWRpcmVjdGl2ZXMucnN0CisKK0tleWJvYXJkIFRhYmxlIExpc3QKKz09PT09PT09PT09PT09PT09PT0KKworLi4gY3N2LXRhYmxlOjoKKyAgIDpoZWFkZXItcm93czogMQorICAgOmZpbGU6IGtleWJvYXJkLXRhYmxlLmNzdgorCitCcmFpbGxlIERyaXZlciBMaXN0Cis9PT09PT09PT09PT09PT09PT09CisKKy4uIGNzdi10YWJsZTo6CisgICA6aGVhZGVyLXJvd3M6IDEKKyAgIDpmaWxlOiBicmFpbGxlLWRyaXZlci5jc3YKKwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRzL1JFQURNRS5MaW51eCBiL0RvY3VtZW50cy9SRUFETUUuTGludXgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2RkMDJmNwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50cy9SRUFETUUuTGludXgKQEAgLTAsMCArMSwxMDEwIEBACit+fn5+fn5+fn5+fn5+fn4KK0JSTFRUWSBvbiBMaW51eAorfn5+fn5+fn5+fn5+fn5+CisKKy4uIGluY2x1ZGU6OiBwcm9sb2d1ZS5yc3QKKworLi4gfHN1cGVyIHVzZXJ8IHJlcGxhY2U6OiBgYHJvb3RgYAorLi4gfHJlY29tbWVuZGVkIHVzZXJ8IHJlcGxhY2U6OiBgYGJybHR0eWBgCisuLiB8dXNlciBpbmZvcm1hdGlvbiB0ZXh0fCByZXBsYWNlOjogQnJhaWxsZSBEZXZpY2UgRGFlbW9uCisuLiB8bm9sb2dpbiBzaGVsbCBwYXRofCByZXBsYWNlOjogYGAvc2Jpbi9ub2xvZ2luYGAKKy4uIHxzYWZlIHNoZWxsIHBhdGh8IHJlcGxhY2U6OiBgYC9iaW4vc2hgYAorLi4gfHNhZmUgY29tbWFuZCBzZWFyY2ggcGF0aHwgcmVwbGFjZTo6IGBgL3Vzci9zYmluOi9zYmluOi91c3IvYmluOi9iaW5gYAorCisuLiB8c29ja2V0cyBkaXJlY3RvcnkgbmFtZXwgcmVwbGFjZTo6IGBgQnJsQVBJYGAKKy4uIHx1cGRhdGFibGUgZGlyZWN0b3J5IG5hbWV8IHJlcGxhY2U6OiBgYGJybHR0eWBgCisuLiB8d3JpdGFibGUgZGlyZWN0b3J5IG5hbWV8IHJlcGxhY2U6OiBgYGJybHR0eWBgCisKKy4uIHxjb25maWd1cmF0aW9uIGZpbGUgcGF0aHwgcmVwbGFjZTo6IGBgL2V0Yy9icmx0dHkuY29uZmBgCisuLiB8a2V5IGZpbGUgcGF0aHwgcmVwbGFjZTo6IGBgL2V0Yy9icmxhcGkua2V5YGAKKworLi4gfHNvY2tldHMgZGlyZWN0b3J5IHBhdGh8IHJlcGxhY2U6OiBgYC92YXIvbGliL0JybEFQSS9gYAorLi4gfHVwZGF0YWJsZSBkaXJlY3RvcnkgcGF0aHwgcmVwbGFjZTo6IGBgL3Zhci9saWIvYnJsdHR5L2BgCisuLiB8d3JpdGFibGUgZGlyZWN0b3J5IHBhdGh8IHJlcGxhY2U6OiBgYC92YXIvcnVuL2JybHR0eS9gYAorCisuLiB8dGhlIHN1cGVyIHVzZXJ8IHJlcGxhY2U6OiB0aGUgc3VwZXIgdXNlciAofHN1cGVyIHVzZXJ8KQorLi4gfHVzZXIgaW5mb3JtYXRpb24gZmllbGR8IHJlcGxhY2U6OiB1c2VyIGluZm9ybWF0aW9uIChnZWNvcykgZmllbGQKKy4uIHxjb25maWd1cmF0aW9uIGRpcmVjdGl2ZXwgcmVwbGFjZTo6IGNvbmZpZ3VyYXRpb24gZGlyZWN0aXZlIChpbiB8Y29uZmlndXJhdGlvbiBmaWxlIHBhdGh8KQorLi4gfGVudmlyb25tZW50IHZhcmlhYmxlfCByZXBsYWNlOjogZW52aXJvbm1lbnQgdmFyaWFibGUgKGlmIHRoZSBgYC1FYGAgY29tbWFuZCBsaW5lIG9wdGlvbiBoYXMgYmVlbiBzcGVjaWZpZWQpCisuLiB8Y29uZmlndXJlIG9wdGlvbnwgcmVwbGFjZTo6IGNvbmZpZ3VyZSBvcHRpb24gKGF0IGJ1aWxkIHRpbWUpCisuLiB8c3BlYWtlcnwgcmVwbGFjZTo6IGJ1aWx0LWluIFBDIHNwZWFrZXIKKy4uIHx1aW5wdXQgZGV2aWNlfCByZXBsYWNlOjogYGB1aW5wdXRgYCBkZXZpY2UgKGBgL2Rldi91aW5wdXRgYCBvciBgYC9kZXYvaW5wdXQvdWlucHV0YGApCisuLiB8a2V5IGZpbGV8IHJlcGxhY2U6OiBhdXRob3JpemF0aW9uIGtleSBmaWxlICh1c3VhbGx5IHxrZXkgZmlsZSBwYXRofCkKKy4uIHxzb2NrZXRzIGRpcmVjdG9yeXwgcmVwbGFjZTo6IHNvY2tldHMgZGlyZWN0b3J5ICh1c3VhbGx5IHxzb2NrZXRzIGRpcmVjdG9yeSBwYXRofCkKKy4uIHx1cGRhdGFibGUgZGlyZWN0b3J5fCByZXBsYWNlOjogdXBkYXRhYmxlIGRpcmVjdG9yeSAodXN1YWxseSB8dXBkYXRhYmxlIGRpcmVjdG9yeSBwYXRofCkKKy4uIHx3cml0YWJsZSBkaXJlY3Rvcnl8IHJlcGxhY2U6OiB3cml0YWJsZSBkaXJlY3RvcnkgKHVzdWFsbHkgfHdyaXRhYmxlIGRpcmVjdG9yeSBwYXRofCkKKworLi4gfGtleWJvYXJkIGtleSB0YWJsZXN8IHJlcGxhY2U6OgorICBrZXlib2FyZCBrZXkgdGFibGVzCisgICh3aGljaCBhbGxvdyBrZXlib2FyZCBrZXkgY29tYmluYXRpb25zIHRvIGJlIGJvdW5kCisgIHRvIEJSTFRUWSdzIG5hdmlnYXRpb24gYW5kIGNvbmZpZ3VyYXRpb24gY29tbWFuZHMpCisKKy4uIHxjYXBfc2V0Z2lkfCByZXBsYWNlOjogKmNhcF9zZXRnaWQqCisuLiB8Y2FwX2Nob3dufCByZXBsYWNlOjogKmNhcF9jaG93bioKKy4uIHxjYXBfZm93bmVyfCByZXBsYWNlOjogKmNhcF9mb3duZXIqCisuLiB8Y2FwX2RhY19vdmVycmlkZXwgcmVwbGFjZTo6ICpjYXBfZGFjX292ZXJyaWRlKgorLi4gfGNhcF9zeXNfbW9kdWxlfCByZXBsYWNlOjogKmNhcF9zeXNfbW9kdWxlKgorLi4gfGNhcF9zeXNfYWRtaW58IHJlcGxhY2U6OiAqKmNhcF9zeXNfYWRtaW4qKgorLi4gfGNhcF9zeXNfdHR5X2NvbmZpZ3wgcmVwbGFjZTo6ICoqY2FwX3N5c190dHlfY29uZmlnKioKKy4uIHxjYXBfbWtub2R8IHJlcGxhY2U6OiAqKmNhcF9ta25vZCoqCisKKy4uIHxjYXBfc2V0Z2lkIHJlYXNvbnwgcmVwbGFjZTo6IHN3aXRjaGluZyB0byB0aGUgcHJpbWFyeSBncm91cCBvZiBgdGhlIHVucHJpdmlsZWdlZCB1c2VyYF8gYW5kIGVzdGFibGlzaGluZyB0aGUgYG5lZWRlZCBncm91cCBtZW1iZXJzaGlwc2BfCisuLiB8Y2FwX2Nob3duIHJlYXNvbnwgcmVwbGFjZTo6IGNsYWltaW5nIG93bmVyc2hpcCBvZiB0aGUgYHN0YXRlIGRpcmVjdG9yaWVzYF8KKy4uIHxjYXBfZm93bmVyIHJlYXNvbnwgcmVwbGFjZTo6IGFkZGluZyBncm91cCBwZXJtaXNzaW9ucyB0byB0aGUgYHN0YXRlIGRpcmVjdG9yaWVzYF8KKy4uIHxjYXBfZGFjX292ZXJyaWRlIHJlYXNvbnwgcmVwbGFjZTo6IGNyZWF0aW5nIG1pc3NpbmcgYHN0YXRlIGRpcmVjdG9yaWVzYF8KKy4uIHxjYXBfc3lzX21vZHVsZSByZWFzb258IHJlcGxhY2U6OiBpbnN0YWxsaW5nIHRoZSBuZWVkZWQgYGtlcm5lbCBtb2R1bGVzYF8KKy4uIHxjYXBfc3lzX2FkbWluIHJlYXNvbnwgcmVwbGFjZTo6IGluamVjdGluZyBpbnB1dCBjaGFyYWN0ZXJzCisuLiB8Y2FwX3N5c190dHlfY29uZmlnIHJlYXNvbnwgcmVwbGFjZTo6IHVzaW5nIHRoZSB8c3BlYWtlcnwKKy4uIHxjYXBfbWtub2QgcmVhc29ufCByZXBsYWNlOjogY3JlYXRpbmcgbmVlZGVkIGJ1dCBtaXNzaW5nIGRldmljZSBmaWxlcworCitMZWFzdCBQcml2aWxlZ2UKKz09PT09PT09PT09PT09PQorCitXaGVuIEJSTFRUWSBzdGFydHMgZXhlY3V0aW5nIGFzIHx0aGUgc3VwZXIgdXNlcnwsCitpLmUuIHdoZW4gaXRzIGluaXRpYWwgZWZmZWN0aXZlIHVzZXIgaWRlbnRpZmllciBpcyAwLAoraXQgaGFzIHVucmVzdHJpY3RlZCBhY2Nlc3MgdG8gYWxsIG9mIHRoZSBwcml2aWxlZ2VkIG9wZXJhdGlvbnMKK3RoYXQgdGhlIGhvc3QgaGFzIHRvIG9mZmVyLgorV2hpbGUgd2UgYWx3YXlzIGVuZGVhdm91ciB0byBlbnN1cmUgdGhhdCBCUkxUVFkgaXNuJ3QgYWJ1c2luZyB0aGlzIGZyZWVkb20sCit3ZSBhbHNvIGRvbid0IGZlZWwgdGhhdCBpdCdzIHdvcnRoIHJpc2tpbmcgdGhlIHBvc3NpYmlsaXR5Cit0aGF0IG91ciBjb2RlIG1pZ2h0IGJlIGhhY2tlZC4KK1RvIHJlZHVjZSB0aGlzIHBvc3NpYmlsaXR5LCB0aGVyZWZvcmUsIEJSTFRUWSBmaXJzdAorZXN0YWJsaXNoZXMgYSBgc2FmZXIgZXhlY3V0aW9uIGVudmlyb25tZW50YF8gd2l0aGluIHdoaWNoIEl0IG9ubHkgaGFzCithY2Nlc3MgdG8gdGhvc2UgYHByaXZpbGVnZWQgaG9zdCBvcGVyYXRpb25zYF8gdGhhdCBpdCBhY3R1YWxseSBuZWVkcy4KK1RoaXMgaXMgYSBiZXN0IHNlY3VyaXR5IHByYWN0aWNlIGtub3duIGFzICoqbGVhc3QgcHJpdmlsZWdlKiouCisKK1NhZmVyIEV4ZWN1dGlvbiBFbnZpcm9ubWVudAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1doZW4gU3RhcnRlZCBieSB0aGUgU3VwZXIgVXNlcgorfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisKK0JSTFRUWSB0YWtlcyBhIG51bWJlciBvZiBzdGVwcyB0byBlc3RhYmxpc2ggYSBzYWZlciBleGVjdXRpb24gZW52aXJvbm1lbnQ6CisKKyogU2V0IGEgYHNhZmUgY29tbWFuZCBzZWFyY2ggcGF0aGBfLgorKiBTZXQgYSBgc2FmZSBkZWZhdWx0IHNoZWxsYF8uCisqIGBOYW1lc3BhY2UgaXNvbGF0aW9uYF8uCisqIFN3aXRjaCB0byBleGVjdXRpbmcgYXMgYHRoZSB1bnByaXZpbGVnZWQgdXNlcmBfLgorKiBJbnN0YWxsIHRoZSBuZWVkZWQgYGtlcm5lbCBtb2R1bGVzYF8uCisqIEVzdGFibGlzaCB0aGUgYG5lZWRlZCBncm91cCBtZW1iZXJzaGlwc2BfLgorKiBTZXQgaXRzIGByZXF1aXJlZCBjYXBhYmlsaXRpZXNgXy4KKyogUmVsaW5xdWlzaCBhbGwgbm9uLXJlcXVpcmVkIGNhcGFiaWxpdGllcy4KKyogSW5zdGFsbCB0aGUgYHN5c3RlbSBjYWxsIGZpbHRlcmBfLgorCitUaGUgVW5wcml2aWxlZ2VkIFVzZXIKK2BgYGBgYGBgYGBgYGBgYGBgYGBgYAorCitXaGVuIEJSTFRUWSBzdGFydHMgZXhlY3V0aW5nIGFzIHx0aGUgc3VwZXIgdXNlcnwsCitvbmUgb2YgdGhlIGZpcnN0IHRoaW5ncyBpdCBkb2VzIGlzIHN3aXRjaAordG8gZXhlY3V0aW5nIGFzIGFuIHVucHJpdmlsZWdlZCB1c2VyLgorVGhlIHVzZXIgaXMgc2VsZWN0ZWQgYXMgZm9sbG93czoKKworRXhwbGljaXQgU3BlY2lmaWNhdGlvbgorICBUaGlzIG1ldGhvZCBpcyBvbmx5IGFsbG93ZWQgd2hlbiBCUkxUVFkgd2FzIHN0YXJ0ZWQgYXMgfHRoZSBzdXBlciB1c2VyfC4KKyAgSXQgbWF5IGJlIHNwZWNpZmllZCB2aWEgdGhlIGBgdXNlcmBgIGBwcml2aWxlZ2UgcGFyYW1ldGVyYF8uCisgIElmIGl0IGlzbid0IGV4cGxpY2l0bHkgc3BlY2lmaWVkLAorICBvciBpZiB0aGVyZSdzIGEgcHJvYmxlbToKKworICAqIFRoZSB1c2VyIGRvZXNuJ3QgZXhpc3QuCisKKyAgKiBUaGUgc3BlY2lmaWNhdGlvbiBpcyBpZ25vcmVkIGJlY2F1c2UKKyAgICBCUkxUVFkgd2Fzbid0IHN0YXJ0ZWQgYXMgfHRoZSBzdXBlciB1c2VyfC4KKworICB0aGVuIHRoZSBkZWZhdWx0IHVzZXIgaXMgc2VsZWN0ZWQuCisKK1RoZSBEZWZhdWx0CisgIFRoZSBkZWZhdWx0IHVucHJpdmlsZWdlZCB1c2VyIGlzIHRoZSBvbmUgc3BlY2lmaWVkIGF0IGJ1aWxkIHRpbWUKKyAgdmlhIHRoZSBgYGx4OnVzZXI9YGAgcGFyYW1ldGVyCisgIG9mIHRoZSBgYC0td2l0aC1wcml2aWxlZ2UtcGFyYW1ldGVyc2BgIG9wdGlvbgorICBvZiBCUkxUVFkncyBgYGNvbmZpZ3VyZWBgIGNvbW1hbmQuCisgIElmIHRoZXJlJ3MgYSBwcm9ibGVtOgorCisgICogVGhlIHVzZXIgZG9lc24ndCBleGlzdC4KKyAgKiBCUkxUVFkgd2Fzbid0IGNvbmZpZ3VyZWQgdG8gaGF2ZSBhIGRlZmF1bHQgdW5wcml2aWxlZ2VkIHVzZXIuCisKKyAgdGhlbiBCUkxUVFkgY29udGludWVzIHRvIGV4ZWN1dGUgYXMgfHRoZSBzdXBlciB1c2VyfC4KKworQ29udGludWluZyB0byBSdW4gYXMgdGhlIFN1cGVyIFVzZXIKKyAgVGhpcyBpcyB0aGUgbGFzdCByZXNvcnQhCisgIEluIHRoaXMgY2FzZToKKworICAqIEJSTFRUWSBzdGlsbCBlc3RhYmxpc2hlcyB0aGUgcmVzdCBvZiBpdHMgYHNhZmVyIGV4ZWN1dGlvbiBlbnZpcm9ubWVudGBfLgorCisgICogRXN0YWJsaXNoaW5nIHRoZSBgbmVlZGVkIGdyb3VwIG1lbWJlcnNoaXBzYF8gcmVwbGFjZXMKKyAgICAocmF0aGVyIHRoYW4gZXh0ZW5kcykgdGhlIHN1cHBsZW1lbnRhcnkgZ3JvdXAgbGlzdC4KKworQWZ0ZXIgaGF2aW5nIHN1Y2Nlc3NmdWxseSBzd2l0Y2hlZCB0byBleGVjdXRpbmcgYXMgYW4gdW5wcml2aWxlZ2VkIHVzZXIsCit0aGUgZm9sbG93aW5nIGlzIGRvbmU6CisKKyogRW5zdXJlIHRoYXQgYWxsIG9mIHRoZSB1c2VyIGlkZW50aWZpZXJzCisgIChyZWFsLCBlZmZlY3RpdmUsIHNhdmVkLCBmaWxlc3lzdGVtKQorICBhcmUgc2V0IHRvIHRoZSBzZWxlY3RlZCB1c2VyLgorCisqIEVuc3VyZSB0aGF0IGFsbCBvZiB0aGUgZ3JvdXAgaWRlbnRpZmllcnMKKyAgKHJlYWwsIGVmZmVjdGl2ZSwgc2F2ZWQsIGZpbGVzeXN0ZW0pCisgIGFyZSBzZXQgdG8gdGhlIHByaW1hcnkgZ3JvdXAgb2YgdGhlIHNlbGVjdGVkIHVzZXIuCisKKyogSWYgYW55IG9mIHRoZSBmb2xsb3dpbmcgZW52aXJvbm1lbnQgdmFyaWFibGVzIGlzIHNldAorICB0aGVuIHJlc2V0IGl0IHRvIHRoZSBuYW1lIG9mIHRoZSBzZWxlY3RlZCB1c2VyOgorCisgICsgTE9HTkFNRQorICArIFVTRVIKKworKiBFbnN1cmUgdGhhdCB0aGUgZm9sbG93aW5nIGVudmlyb25tZW50IHZhcmlhYmxlcyBhcmVuJ3Qgc2V0OgorCisgICsgWERHX0NPTkZJR19IT01FCisgICsgWERHX0RBVEFfRElSUworCisqIENoYW5nZSB0aGUgWERHIHJ1bnRpbWUgZGlyZWN0b3J5CisgIChzZXQgdGhlIGBgWERHX1JVTlRJTUVfRElSYGAgZW52aXJvbm1lbnQgdmFyaWFibGUpCisgIHRvIHRoYXQgb2YgdGhlIHNlbGVjdGVkIHVzZXIuCisKKyogRXh0ZW5kIHRoZSBzdXBwbGVtZW50YXJ5IGdyb3VwIGxpc3Qgd2l0aCB0aGUgYG5lZWRlZCBncm91cCBtZW1iZXJzaGlwc2BfLgorCisqIElmIHRoZSBzZWxlY3RlZCB1c2VyJ3MgaG9tZSBkaXJlY3RvcnkgaXMgZGVmaW5lZCB0aGVuIHN3aXRjaCB0byBpdCBieToKKworICAqIENoYW5naW5nIHRoZSB3b3JraW5nIGRpcmVjdG9yeS4KKyAgKiBTZXR0aW5nIHRoZSBgYEhPTUVgYCBlbnZpcm9ubWVudCB2YXJpYWJsZS4KKworICBUaGUgfHVwZGF0YWJsZSBkaXJlY3Rvcnl8IGlzIHVzZWQgaW5zdGVhZCBpZjoKKworICAqIFRoZSB1c2VyJ3MgaG9tZSBkaXJlY3RvcnkgaXNuJ3QgZGVmaW5lZC4KKyAgKiBCUkxUVFkgaXMgdW5hYmxlIHRvIHN3aXRjaCB0byB0aGUgdXNlcidzIGhvbWUgZGlyZWN0b3J5LgorICAqIEJSTFRUWSBoYWQgdG8gY29udGludWUgZXhlY3V0aW5nIGFzIHx0aGUgc3VwZXIgdXNlcnwuCisKK1N0YXRlIERpcmVjdG9yaWVzCitgYGBgYGBgYGBgYGBgYGBgYAorCitBIHN0YXRlIGRpcmVjdG9yeSBpcyBvbmUgd2hpY2ggYSBwcm9ncmFtIG5lZWRzIHRvIGJlIGFibGUgdG8gd3JpdGUgZGF0YSB0by4KK0JSTFRUWSdzIHN0YXRlIGRpcmVjdG9yaWVzIGFyZToKKworfHNvY2tldHMgZGlyZWN0b3J5fAorICBUaGlzIGRpcmVjdG9yeSBpcyB3aGVyZSBCUkxUVFkgY3JlYXRlcyBCcmxBUEkncworICBsb2NhbCAoVU5JWCBkb21haW4pIHNlcnZlciBzb2NrZXRzLgorICBJdCBuZWVkcyB0byBiZSB3b3JsZCB3cml0YWJsZSwgYW5kLCBhcyBzdWNoLAorICBzaG91bGQgYWxzbyBoYXZlIGl0cyBzdGlja3kgYml0IHNldC4KKyAgU286CisKKyAgLi4gcGFyc2VkLWxpdGVyYWw6OiBjaG1vZCB1Z289cnd4LG8rdCAqcGF0aCoKKworfHVwZGF0YWJsZSBkaXJlY3Rvcnl8CisgIFRoaXMgZGlyZWN0b3J5IGlzIHdoZXJlIEJSTFRUWSBzYXZlcyB1c2VyIGRhdGEuCisgIFRoaXMgaW5jbHVkZXM6CisKKyAgKiBwcmVmZXJlbmNlcyBmaWxlcworICAqIGNsaXBib2FyZCBjb250ZW50CisKK3x3cml0YWJsZSBkaXJlY3Rvcnl8CisgIFRoaXMgZGlyZWN0b3J5IGlzIHdoZXJlIEJSTFRUWSBjcmVhdGVzIHByaXZhdGUgY29waWVzIG9mCisgIGZpbGUgc3lzdGVtIG9iamVjdHMgdGhhdCBpdCBuZWVkcyBidXQKKyAgdGhhdCBkb24ndCBhbHJlYWR5IGV4aXN0IChvciwgYXQgbGVhc3QsIHRoYXQgaXQgY2FuJ3QgZmluZCksCisgIG9yIHRoYXQgYXJlIGluYWNjZXNzaWJsZSAoY2FuJ3QgYmUgb3BlbmVkKS4KKyAgSXQncyBhbHNvIHdoZXJlLCBpZiByZXF1ZXN0ZWQsIEJSTFRUWSBjcmVhdGVzIGl0cyBpbnB1dCBGSUZPCisgICh3aGljaCBhbGxvd3MgdXNlcnMgdG8gdGFrZSBhZHZhbnRhZ2Ugb2YgaXRzIHRleHQtdG8tc3BlZWNoIGNhcGFiaWxpdHkpLgorCitUaGUgYWN0dWFsIGxvY2F0aW9ucyBvZiB0aGVzZSBkaXJlY3RvcmllcyBjYW4gYmUgc3BlY2lmaWVkIGluIGEgbnVtYmVyIG9mIHdheXMuCitGcm9tIGhpZ2hlc3QgdG8gbG93ZXN0IHByZWNlZGVuY2UsIHRoZXkgYXJlOgorCisqIGNvbW1hbmQgbGluZSBvcHRpb24KKyogfGNvbmZpZ3VyYXRpb24gZGlyZWN0aXZlfAorKiB8ZW52aXJvbm1lbnQgdmFyaWFibGV8CisqIGRlZmF1bHQgbG9jYXRpb24gKGNhbiBiZSBjaGFuZ2VkIHdpdGggYGBjb25maWd1cmVgYCBhdCBidWlsZCB0aW1lKQorCisuLiB0YWJsZTo6IFN0YXRlIERpcmVjdG9yeSBMb2NhdGlvbiBTcGVjaWZpY2F0aW9uCisKKyAgPT09PT09PT09ICA9PT09PT0gID09PT09PT09PT09PT09PT09PT0gID09PT09PT09PT09PT09PT09PT09PT09PT09ICA9PT09PT09PT09PT09PT09PT09PT09PT09PQorICBEaXJlY3RvcnkgIE9wdGlvbiAgQ29uZmlnIERpcmVjdGl2ZSAgICAgRW52aXJvbm1lbnQgVmFyaWFibGUgICAgICAgIERlZmF1bHQgTG9jYXRpb24KKyAgLS0tLS0tLS0tICAtLS0tLS0gIC0tLS0tLS0tLS0tLS0tLS0tLS0gIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICBTb2NrZXRzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxzb2NrZXRzIGRpcmVjdG9yeSBwYXRofAorICBVcGRhdGFibGUgIC1VICAgICAgdXBkYXRhYmxlLWRpcmVjdG9yeSAgQlJMVFRZX1VQREFUQUJMRV9ESVJFQ1RPUlkgIHx1cGRhdGFibGUgZGlyZWN0b3J5IHBhdGh8CisgIFdyaXRhYmxlICAgLVcgICAgICB3cml0YWJsZS1kaXJlY3RvcnkgICBCUkxUVFlfV1JJVEFCTEVfRElSRUNUT1JZICAgfHdyaXRhYmxlIGRpcmVjdG9yeSBwYXRofAorICA9PT09PT09PT0gID09PT09PSAgPT09PT09PT09PT09PT09PT09PSAgPT09PT09PT09PT09PT09PT09PT09PT09PT0gID09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0FmdGVyIGhhdmluZyBzdWNjZXNzZnVsbHkgc3dpdGNoZWQgdG8gZXhlY3V0aW5nIGFzIGB0aGUgdW5wcml2aWxlZ2VkIHVzZXJgXywKK0JSTFRUWSBhdHRlbXB0cyB0byBnYWluIGZ1bGwgYWNjZXNzIHRvIGl0cyBzdGF0ZSBkaXJlY3Rvcmllcy4KK1RoZSBtb3N0IGNvbW1vbiBjYXNlIHdoZXJlIHRoaXMgaXMgbmVjZXNzYXJ5IGlzCit0byBhdXRvbWF0ZSB0aGUgdHJhbnNpdGlvbiBmcm9tIGFuIG9sZGVyIHJlbGVhc2Ugb2YgQlJMVFRZCitmcm9tIHRoZSBkYXlzIHdoZW4gaXQgaGFkIHRvIGV4ZWN1dGUgYXMgfHRoZSBzdXBlciB1c2VyfC4KK0Fub3RoZXIgKG11Y2ggcmFyZXIpIGNhc2Ugd291bGQgYmUKK3doZW4gdHJhbnNpdGlvbmluZyBmcm9tIG9uZSB1bnByaXZpbGVnZWQgdXNlciB0byBhbm90aGVyLgorCitUaGUgbWFpbiByZWFzb24gdGhhdCBCUkxUVFkgZG9lcyB0aGlzIGpvYiBpcwordGhhdCBpdCdzIGV4dHJlbWVseSBkaWZmaWN1bHQgZm9yIGEgYmxpbmQgdXNlciB0byBmaWd1cmUgb3V0IHdoYXQncyB3cm9uZworYmVmb3JlIGhpcy9oZXIgYnJhaWxsZSBkZXZpY2UgaXMgdXAgYW5kIHJ1bm5pbmcuCitQdXQgYW5vdGhlciB3YXksIGl0IGNhbiBiZSBuZWFyIGltcG9zc2libGUgZm9yIGEgYnJhaWxsZSB1c2VyIHRvIGZpZ3VyZSBvdXQKK3doeSBCUkxUVFkgaXMgaGF2aW5nIHByb2JsZW1zIHdoaWxlIEJSTFRUWSBpcyBoYXZpbmcgcHJvYmxlbXMuCisKK1RoZSBmb2xsb3dpbmcgYWN0aW9ucyBhcmUgdGFrZW4gZm9yIGVhY2ggb2YgdGhlIHN0YXRlIGRpcmVjdG9yaWVzOgorCisqIElmIGl0IGRvZXNuJ3QgZXhpc3QgdGhlbiBpdCBpcyBjcmVhdGVkLgorICBUaGlzIHVzdWFsbHkgcmVxdWlyZXMgdGhlIHxjYXBfZGFjX292ZXJyaWRlfCAodGVtcG9yYXJ5KSBjYXBhYmlsaXR5CisgIGJlY2F1c2UgaXQncyB1c3VhbGx5IGEgc3ViZGlyZWN0b3J5IG9mIGEgZGlyZWN0b3J5CisgIHRoYXQgY2FuIG9ubHkgYmUgd3JpdHRlbiB0byBieSB8dGhlIHN1cGVyIHVzZXJ8LAorICBlLmcuIGBgL3Zhci9saWIvYGAuCisKKyogSXRzIG93bmluZyB1c2VyIGFuZCBncm91cCBhcmUgY2hhbmdlZCB0byBiZQorICB0aGUgdXNlciBhbmQgdGhlIHByaW1hcnkgZ3JvdXAgb2YgdGhlIHVzZXIKKyAgdGhhdCBCUkxUVFkgSXMgZXhlY3V0aW5nIGFzLgorICBUaGUgc2FtZSBjaGFuZ2UgaXMgYWxzbyBtYWRlIHRvIHdoYXRldmVyIHRoZSBkaXJlY3RvcnkgY29udGFpbnMuCisgIFRoaXMgcmVxdWlyZXMgdGhlIHxjYXBfY2hvd258ICh0ZW1wb3JhcnkpIGNhcGFiaWxpdHkKKyAgZm9yIGEgZGlyZWN0b3J5IG9yIGZpbGUgdGhhdCdzIG93bmVkIGJ5IGEgZGlmZmVyZW50IHVzZXIuCisKKyogR3JvdXAgcmVhZCBhbmQgd3JpdGUgcGVybWlzc2lvbnMgYXJlIGFkZGVkIHRvIGl0CisgIGFuZCB0byB3aGF0ZXZlciBpdCBjb250YWlucy4KKyAgRm9yIGRpcmVjdG9yaWVzLCBncm91cCBzZWFyY2ggcGVybWlzc2lvbiBpcyBhbHNvIGFkZGVkCisgIGFuZCB0aGUgc2V0LWdyb3VwLUlEIGJpdCBpcyBzZXQuCisgIFRoaXMgcmVxdWlyZXMgdGhlIHxjYXBfZm93bmVyfCAodGVtcG9yYXJ5KSBjYXBhYmlsaXR5CisgIGZvciBhIGRpcmVjdG9yeSBvciBmaWxlIHRoYXQncyBvd25lZCBieSBhIGRpZmZlcmVudCB1c2VyLgorCitHYWluaW5nIGZ1bGwgYWNjZXNzIHRvIGEgc3RhdGUgZGlyZWN0b3J5IGlzIG9ubHkgYXR0ZW1wdGVkCitpZiB0aGUgbGFzdCBjb21wb25lbnQgb2YgaXRzIHBhdGggaXMgaXRzIGV4cGVjdGVkIG5hbWU6CisKKy4uIHRhYmxlOjogRXhwZWN0ZWQgU3RhdGUgRGlyZWN0b3J5IE5hbWVzCisKKyAgPT09PT09PT09ICA9PT09PT09PT09PT09PT09PT09PT09PT09PQorICBEaXJlY3RvcnkgIEV4cGVjdGVkIE5hbWUKKyAgLS0tLS0tLS0tICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICBTb2NrZXRzICAgIHxzb2NrZXRzIGRpcmVjdG9yeSBuYW1lfAorICBVcGRhdGFibGUgIHx1cGRhdGFibGUgZGlyZWN0b3J5IG5hbWV8CisgIFdyaXRhYmxlICAgfHdyaXRhYmxlIGRpcmVjdG9yeSBuYW1lfAorICA9PT09PT09PT0gID09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1RoaXMgaXMgYSBwcm90ZWN0aXZlIG1lYXN1cmUsIGdpdmVuIHRoYXQgY29tbWFuZCBsaW5lIG9wdGlvbnMsIGV0YworY2FuIGJlIHVzZWQgdG8gY2hhbmdlIHRoZSBsb2NhdGlvbiBvZiBhIHN0YXRlIGRpcmVjdG9yeQordG8gYSBub24tQlJMVFRZLXNwZWNpZmljIGxvY2F0aW9uLgorSXQgcHJldmVudHMgQlJMVFRZIGZyb20gQXR0ZW1wdGluZyB0byBnYWluIGZ1bGwgYWNjZXNzCit0byBhbm90aGVyIHByb2dyYW0ncyBkYXRhLCBvciwgZXZlbiB3b3JzZSwgdG8gYSBwdWJsaWMgZGlyZWN0b3J5LgorSWYgaXQncyByZWFsbHkgbmVjZXNzYXJ5IHRvIHVzZSBzdWNoIGEgZGlyZWN0b3J5Cit0aGVuIGl0J3MgZmFyIGJldHRlciB0byBsZXQgYSBodW1hbiBiZWluZyB0YWtlIGNhcmUgb2YgaXQuCisKK1doZW4gU3RhcnRlZCBieSBhbiBVbnByaXZpbGVnZWQgVXNlcgorfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisKK0JSTFRUWSwgYXMgb2YgcmVsZWFzZSA2LjIsIGNhbiBiZSBzdGFydGVkCitieSBhbiB1bnByaXZpbGVnZWQgdXNlciAobm90IHxzdXBlciB1c2VyfCkuCitVc2UgY2FzZXMgZm9yIHRoaXMgaW5jbHVkZSBzeXN0ZW0gYWRtaW5pc3RyYXRvcnMgb3IgdXNlcnMKK3dobydkIGxpa2UgQlJMVFRZIHRvIGJlIHN0YXJ0YWJsZQorYnkgYW55IHVzZXIsIGJ5IHVzZXJzIHdobyBiZWxvbmcgdG8gYSBzcGVjaWZpYyBncm91cCwgZXRjLgorCitJbiBvcmRlciBmb3IgYW4gdW5wcml2aWxlZ2VkIHVzZXIgdG8gc3VjY2Vzc2Z1bGx5IHN0YXJ0IEJSTFRUWSwKK3RoZSBlbnZpcm9ubWVudCBuZWVkcyB0byBiZSBwcmVwYXJlZCBhcyBmb2xsb3dzOgorCisqIEFzc2lnbiB0aGUgYHJlcXVpcmVkIGNhcGFiaWxpdGllc2BfIHRvIEJSTFRUWSdzIGV4ZWN1dGFibGUuCisKKyogR2l2ZSB0aGUgdXNlciB0aGF0J3MgdG8gYmUgYWJsZSB0byBzdGFydCBCUkxUVFkKKyAgdGhlIGBuZWVkZWQgZ3JvdXAgbWVtYmVyc2hpcHNgXy4KKyAgVGhpcyBpc24ndCBuZWNlc3NhcnksIGkuZS4gQlJMVFRZIHdpbGwgam9pbiB0aGVtIGJ5IGl0c2VsZiwKKyAgaWYgdGhlIHxjYXBfc2V0Z2lkfCAodGVtcG9yYXJ5KSBjYXBhYmlsaXR5CisgIGhhcyBhbHNvIGJlZW4gYXNzaWduZWQgdG8gaXRzIGV4ZWN1dGFibGUuCisgIEluIHRoaXMgY2FzZSwgQlJMVFRZIHdpbGwgZXh0ZW5kIHRoZSBzdXBwbGVtZW50YXJ5IGdyb3VwIGxpc3QKKyAgdGhhdCBpdCBpbmhlcml0ZWQgZnJvbSB0aGUgdXNlciB3aXRoIGFueSBuZWVkZWQgZ3JvdXBzIHRoYXQgYXJlIG1pc3NpbmcuCisKKyogSW5zdGFsbCB0aGUgbmVlZGVkIGBrZXJuZWwgbW9kdWxlc2BfLgorICBUaGlzIGlzbid0IG5lY2Vzc2FyeSwgaS5lLiBCUkxUVFkgd2lsbCBpbnN0YWxsIHRoZW0gYnkgaXRzZWxmLAorICBpZiB0aGUgfGNhcF9zeXNfbW9kdWxlfCAodGVtcG9yYXJ5KSBjYXBhYmlsaXR5CisgIGhhcyBhbHNvIGJlZW4gYXNzaWduZWQgdG8gaXRzIGV4ZWN1dGFibGUuCisKKyogRW5zdXJlIHRoYXQgQlJMVFRZJ3MgYHN0YXRlIGRpcmVjdG9yaWVzYF8KKyAgaGF2ZSBiZWVuIGNyZWF0ZWQsCisgIGhhdmUgdGhlIGNvcnJlY3Qgb3duZXJzaGlwLAorICBhbmQgaGF2ZSB0aGUgY29ycmVjdCBwZXJtaXNzaW9ucy4KKyAgRWFjaCBvZiB0aGVzZSBwcmVyZXF1aXNpdGVzIGlzbid0IG5lY2Vzc2FyeSwKKyAgaS5lLiBCUkxUVFkgd2lsbCB0YWtlIGNhcmUgb2YgaXQgYnkgaXRzZWxmLAorICBpZiB0aGUgYXNzb2NpYXRlZCAodGVtcG9yYXJ5KSBjYXBhYmlsaXR5CisgIGhhcyBhbHNvIGJlZW4gYXNzaWduZWQgdG8gaXRzIGV4ZWN1dGFibGUuCisgIFRoZXkgYXJlOgorCisgIC4uIHRhYmxlOjogVGVtcG9yYXJ5IENhcGFiaWxpdGllcyBmb3IgU3RhdGUgRGlyZWN0b3J5IFByZXJlcXVpc2l0ZXMKKworICAgID09PT09PT09PT09PSAgPT09PT09PT09PT09PT09PT09PT0KKyAgICBQcmVyZXF1aXNpdGUgIFRlbXBvcmFyeSBDYXBhYmlsaXR5CisgICAgLS0tLS0tLS0tLS0tICAtLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIGNyZWF0aW9uICAgICAgfGNhcF9kYWNfb3ZlcnJpZGV8CisgICAgb3duZXJzaGlwICAgICB8Y2FwX2Nob3dufAorICAgIHBlcm1pc3Npb25zICAgfGNhcF9mb3duZXJ8CisgICAgPT09PT09PT09PT09ICA9PT09PT09PT09PT09PT09PT09PQorCisuLiBfcHJpdmlsZWdlIHBhcmFtZXRlcjoKKworUHJpdmlsZWdlIFBhcmFtZXRlcnMKK35+fn5+fn5+fn5+fn5+fn5+fn5+CisKK1ByaXZpbGVnZSBwYXJhbWV0ZXJzIGNvbnRyb2wgaG93IEJSTFRUWSBlc3RhYmxpc2hlcworaXRzIGBzYWZlciBleGVjdXRpb24gZW52aXJvbm1lbnRgXy4KK0Zyb20gaGlnaGVzdCB0byBsb3dlc3QgcHJlY2VkZW5jZSwgdGhleSBjYW4gYmUgc3BlY2lmaWVkIHZpYToKKworKiBUaGUgYGAtLXByaXZpbGVnZS1wYXJhbWV0ZXJzYGAgKG9yIGBgLXpgYCkgY29tbWFuZCBsaW5lIG9wdGlvbi4KKyogVGhlIGBgcHJpdmlsZWdlLXBhcmFtZXRlcnNgYCB8Y29uZmlndXJhdGlvbiBkaXJlY3RpdmV8LgorKiBUaGUgYGBCUkxUVFlfUFJJVklMRUdFX1BBUkFNRVRFUlNgYCB8ZW52aXJvbm1lbnQgdmFyaWFibGV8LgorKiBUaGUgYGAtLXdpdGgtcHJpdmlsZWdlLXBhcmFtZXRlcnNgYCB8Y29uZmlndXJlIG9wdGlvbnwuCisKK0VhY2ggb2YgdGhlc2UgdGFrZXMgYSBjb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiBwYXJhbWV0ZXJzIGluIHRoZSBmb3JtOjoKKworICBwbGF0Zm9ybTpuYW1lPXZhbHVlCisKK1RoZSBgYHBsYXRmb3JtOmBgIHBhcnQgaXMgb3B0aW9uYWwgLQoraWYgaXQncyBvbWl0dGVkIHRoZW4gdGhlIHBhcmFtZXRlciBzZXR0aW5nIGFwcGxpZXMgb24gYWxsIHBsYXRmb3Jtcy4KK0l0J3MgYmVzdCwgdGhlcmVmb3JlLCB0byBhbHdheXMgaW5jbHVkZSBpdC4KK1RoZSBwbGF0Zm9ybSBjb2RlIGZvciBMaW51eCBpcyBgYGx4YGAuCisKK1RoZSBjb21tYW5kIGxpbmUgb3B0aW9uIGNhbiBiZSBzcGVjaWZpZWQgYW55IG51bWJlciBvZiB0aW1lcy4KK0xpa2V3aXNlLCB0aGUgY29uZmlndXJhdGlvbiBkaXJlY3RpdmUgY2FuIGJlIHNwZWNpZmllZCBhbnkgbnVtYmVyIG9mIHRpbWVzLgorQWRkaXRpb25hbCBzcGVjaWZpY2F0aW9ucyBleHRlbmQsIHJhdGhlciB0aGFuIHJlcGxhY2UsIHRoZSBwYXJhbWV0ZXIgbGlzdC4KK1RoZSBzYW1lIHBhcmFtZXRlciBzcGVjaWZpZWQgbGF0ZXIgYXQgdGhlIHNhbWUgbGV2ZWwgb2YgcHJlY2VkZW5jZSwKK29yIGF0IGEgaGlnaGVyIGxldmVsIG9mIHByZWNlZGVuY2UsIG92ZXJyaWRlcyBpdHMgZWFybGllciBzZXR0aW5nLgorCitUaGUgZm9sbG93aW5nIHByaXZpbGVnZSBwYXJhbWV0ZXJzIGFyZSBzdXBwb3J0ZWQgZm9yIExpbnV4OgorCitgYHBhdGhgYAorICBUaGlzIHBhcmFtZXRlciBzZXRzIHRoZSBgc2FmZSBjb21tYW5kIHNlYXJjaCBwYXRoYF8uCisgIE5vIGF0dGVtcHQgaXMgbWFkZSB0byB2YWxpZGF0ZSBpdC4KKworYGBzY2Ztb2RlYGAKKyAgVGhpcyBwYXJhbWV0ZXIgc2V0cyB0aGUgbW9kZSBvZiB0aGUgYHN5c3RlbSBjYWxsIGZpbHRlcmBfLgorICBUaGUgc3VwcG9ydGVkIG1vZGVzIGFyZToKKworICBgYG5vYGAKKyAgICBEb24ndCBpbnN0YWxsIHRoZSBmaWx0ZXIuCisgICAgVGhpcyBpcyB0aGUgZGVmYXVsdC4KKworICBgYGxvZ2BgCisgICAgTG9nIGVhY2ggdW5hcHByb3ZlZCBzeXN0ZW0gY2FsbCB0byBgYHN5c2xvZ2BgLgorICAgIEl0J3Mgc3RpbGwgZXhlY3V0ZWQuCisKKyAgYGBmYWlsYGAKKyAgICBFYWNoIHVuYXBwcm92ZWQgc3lzdGVtIGNhbGwgZmFpbHMgd2l0aCBgYGVycm5vYGAgc2V0IHRvIGBgRVBFUk1gYAorICAgIChvcGVyYXRpb24gbm90IHBlcm1pdHRlZCkuCisKKyAgYGBraWxsYGAKKyAgICBBbiBhdHRlbXB0IHRvIGV4ZWN1dGUgYW4gdW5hcHByb3ZlZCBzeXN0ZW0gY2FsbAorICAgIGNhdXNlcyB0aGUgZW50aXJlIEJSTFRUWSBwcm9jZXNzIHRvIGJlIGtpbGxlZC4KKworYGBzaGVsbGBgCisgIFRoaXMgcGFyYW1ldGVyIHNldHMgdGhlIHBhdGggdG8gdGhlIGBzYWZlIGRlZmF1bHQgc2hlbGxgXy4KKyAgTm8gYXR0ZW1wdCBpcyBtYWRlIHRvIHZhbGlkYXRlIGl0LgorCitgYHVzZXJgYAorICBUaGlzIHBhcmFtZXRlciBzZXRzIGB0aGUgdW5wcml2aWxlZ2VkIHVzZXJgXy4KKworU3RheWluZyBQcml2aWxlZ2VkCit+fn5+fn5+fn5+fn5+fn5+fn4KKworSWYgdGhlIGBgLS1zdGF5LXByaXZpbGVnZWRgYCAob3IgYGAtWmBgKSBjb21tYW5kIGxpbmUgb3B0aW9uIGlzIHNwZWNpZmllZAordGhlbiBCUkxUVFkgd2lsbCByZXRhaW4gYWxsIG9mIHRoZSBwcml2aWxlZ2VzCit0aGF0IGl0IGhhZCB3aGVuIGl0IHdhcyBpbnZva2VkLgorSXQgd29uJ3Q6CisKKyogU3dpdGNoIHRvIGFuIHVucHJpdmlsZWdlZCB1c2VyCisgIChpLmUuIGl0J2xsIGNvbnRpbnVlIHRvIGV4ZWN1dGUgYXMgdGhlIGludm9raW5nIHVzZXIpLgorCisqIFJlbGlucXVpc2ggYW55IGdyb3VwIG1lbWJlcnNoaXBzLgorICBNaXNzaW5nIGBuZWVkZWQgZ3JvdXAgbWVtYmVyc2hpcHNgXyBhcmUsIGlmIHBvc3NpYmxlLCBzdGlsbCBlc3RhYmxpc2hlZC4KKworKiBSZWxpbnF1aXNoIGFueSBjYXBhYmlsaXRpZXMuCisgIE1pc3NpbmcgYHJlcXVpcmVkIGNhcGFiaWxpdGllc2BfIGFyZSwgaWYgcG9zc2libGUsIHN0aWxsIGFjcXVpcmVkLgorCitTYWZlIENvbW1hbmQgU2VhcmNoIFBhdGgKK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorCitBIHNhZmUgY29tbWFuZCBzZWFyY2ggcGF0aCBpcyBlc3RhYmxpc2hlZAorYnkgc2V0dGluZyB0aGUgYGBQQVRIYGAgZW52aXJvbm1lbnQgdmFyaWFibGUKK3RvIGEgc3lzdGVtLWNvbmZpZ3VyZWQgc2V0IG9mIHNhZmUgZGlyZWN0b3JpZXMuCitZb3UgY2FuIGZpbmQgb3V0IHdoaWNoIG9uZXMgdGhleSBhcmUgYnkgcnVubmluZyB0aGlzIGNvbW1hbmQ6OgorCisgIGdldGNvbmYgUEFUSAorCitJZiwgZm9yIHNvbWUgcmVhc29uLCB0aGUgc3lzdGVtLWNvbmZpZ3VyZWQgcGF0aCBpc24ndCBhdmFpbGFibGUKK3RoZW4gfHNhZmUgY29tbWFuZCBzZWFyY2ggcGF0aHwgaXMgdXNlZC4KKworVGhlIHBhdGggY2FuIGJlIGV4cGxpY2l0bHkgc2V0Cit2aWEgdGhlIGBgcGF0aGBgIGBwcml2aWxlZ2UgcGFyYW1ldGVyYF8uCisKK1NhZmUgRGVmYXVsdCBTaGVsbAorfn5+fn5+fn5+fn5+fn5+fn5+CisKK0Egc2FmZSBkZWZhdWx0IHNoZWxsIGZvciBleHRlcm5hbCBzb2Z0d2FyZSB0byBhc3N1bWUKK2lzIGVzdGFibGlzaGVkIGJ5IHNldHRpbmcgdGhlIGBgU0hFTExgYCBlbnZpcm9ubWVudCB2YXJpYWJsZQordG8gfHNhZmUgc2hlbGwgcGF0aHwuCitPbiBtYW55IHN5c3RlbXMsIHRoaXMgaXMgdGhlIEJvdXJuZSBTaGVsbC4KK09uIG90aGVycywgaXQncyBhIHN5bWJvbGljIGxpbmsgdG8gc29tZSBvdGhlciBzaGVsbC4KK1RvIGZpbmQgb3V0IHdoYXQgaXQgaXMgb24geW91ciBzeXN0ZW0sIHJ1biB0aGlzIGNvbW1hbmQ6CisKKy4uIHBhcnNlZC1saXRlcmFsOjogbHMgLWwgfHNhZmUgc2hlbGwgcGF0aHwKKworTm90ZSB0aGF0IHNjcmlwdHMgdXN1YWxseSBpbnRlcm5hbGx5IHNwZWNpZnkgd2hpY2ggc2hlbGwgaXMgdG8gYmUgdXNlZC4KKworVGhlIGRlZmF1bHQgc2hlbGwgY2FuIGJlIGV4cGxpY2l0bHkgc2V0Cit2aWEgdGhlIGBgc2hlbGxgYCBgcHJpdmlsZWdlIHBhcmFtZXRlcmBfLgorCitOYW1lc3BhY2UgSXNvbGF0aW9uCit+fn5+fn5+fn5+fn5+fn5+fn5+CisKK0JSTFRUWSBpc29sYXRlcyBzb21lIG9mIHRoZSBrZXJuZWwgbmFtZXNwYWNlcwordGhhdCBhcmUgYXNzb2NpYXRlZCB3aXRoIGl0cyBwcm9jZXNzLgorVGhlIG5hbWVzcGFjZXMgdGhhdCBpdCBjdXJyZW50bHkgaXNvbGF0ZXMgYXJlOgorCitjZ3JvdXAKKyAgVGhpcyBuYW1lc3BhY2UgaXMgdXNlZCB0byBtYW5hZ2UgY29udHJvbCBncm91cHMuCisKK21vdW50CisgIFRoaXMgbmFtZXNwYWNlIGlzIHVzZWQgdG8gbWFuYWdlIG1vdW50IHBvaW50cy4KKworVVRTCisgIFRoaXMgbmFtZXNwYWNlIGlzIHVzZWQgdG8gbWFuYWdlIHRoZSBob3N0IG5hbWUgYW5kIHRoZSBOSVMgZG9tYWluIG5hbWUuCisKK1N5c3RlbSBDYWxsIEZpbHRlcgorfn5+fn5+fn5+fn5+fn5+fn5+CisKK1RoZSBrZXJuZWwgcHJvdmlkZXMgYSBzeXN0ZW0gY2FsbCBmaWx0ZXIsCitrbm93biBhcyBgYHNlY2NvbXBgYCAoc2VjdXJlIGNvbXB1dGluZyksCit0aGF0IHZlcmlmaWVzIHRoYXQgb25seSBhbiBhcHByb3ZlZCBzZXQgb2Ygc3lzdGVtIGNhbGxzIGlzIGJlaW5nIHVzZWQuCitUaGUgZGVmYXVsdCBpcyB0aGF0IEJSTFRUWSBkb2Vzbid0IGFjdHVhbGx5IHVzZSBpdAorYmVjYXVzZSwgYnkgbmF0dXJlLCB1c2luZyBhIHN5c3RlbSBjYWxsIGZpbHRlcgorbWFrZXMgYSBwcm9ncmFtIHNvbWV3aGF0IGZyYWdpbGUuCitSZWFzb25zIGZvciB0aGlzIGluY2x1ZGU6CisKKyogVGhlIHZhcmlvdXMgb2JqZWN0IGxpYnJhcmllcyB0aGF0IEJSTFRUWSByZWxpZXMgb24sIGUuZy4gYGBsaWJjYGAsCisgIG1pZ2h0IGNoYW5nZSB3aGljaCBzeXN0ZW0gY2FsbHMgdGhleSB1c2UgZnJvbSBvbmUgcmVsZWFzZSB0byB0aGUgbmV4dC4KKworKiBUaGUgZmlsdGVyIGlzIGFsc28gYXBwbGllZCB0byBhbnkgZXh0ZXJuYWwgc29mdHdhcmUsCisgIGUuZy4gdGV4dC10by1zcGVlY2ggZW5naW5lcywKKyAgdGhhdCBCUkxUVFkgdXNlcy4KKworRXZlbiB0aG91Z2ggdGhlIGRlZmF1bHQgaXMgdGhhdCBCUkxUVFkgZG9lc24ndCB1c2UgdGhlIGZpbHRlciwKK2FjY2VzcyB0byBpdCBpcyBzdGlsbCBwcm92aWRlZCBmb3IgdGhvc2UgdXNlcnMgb3IgYWRtaW5pc3RyYXRvcnMgd2hvIHByZWZlcgordG8gYXZhaWwgdGhlbXNlbHZlcyBvZiB0aGUgYWRkaXRpb25hbCBwcm90ZWN0aW9uIHRoYXQgaXQgb2ZmZXJzLgorVXNlIHRoZSBgYHNjZm1vZGVgYCBgcHJpdmlsZWdlIHBhcmFtZXRlcmBfIHRvIHNwZWNpZnkgaG93IEJSTFRUWSB1c2VzIGl0LgorCisqIFNwZWNpZnkgYGBsb2dgYCBpZiB5b3UnZCBsaWtlIEJSTFRUWSB0byBjb250aW51ZSBleGVjdXRpbmcgbm9ybWFsbHkKKyAgYnV0IHRvIGFsc28gcmVjb3JkIGFueSB1bmFwcHJvdmVkIHN5c3RlbSBjYWxscyBpbiB0aGUgc3lzdGVtIGxvZy4KKworKiBTcGVjaWZ5IGBgZmFpbGBgIGlmIHlvdSdkIGxpa2UgdW5hcHByb3ZlZCBzeXN0ZW0gY2FsbHMgdG8gZmFpbCwKKyAgd2l0aCBCUkxUVFkgYXR0ZW1wdGluZyB0byBoYW5kbGUgdGhvc2UgZmFpbHVyZXMuCisgIE5vdGUgdGhhdCwgd2hpbGUgQlJMVFRZIGVuZGVhdm91cnMgdG8gaGFuZGxlIHN1Y2ggZmFpbHVyZXMgd2VsbCwKKyAgZXh0ZXJuYWwgc29mdHdhcmUgdGhhdCBpdCB1c2VzIG1pZ2h0IG5vdC4KKworKiBTcGVjaWZ5IGBga2lsbGBgIGlmIHlvdSdkIGxpa2UgYW4gdW5hcHByb3ZlZCBzeXN0ZW0gY2FsbAorICB0byBjYXVzZSB0aGUgZW50aXJlIEJSTFRUWSBwcm9jZXNzIHRvIGJlIHN1bW1hcmlseSBraWxsZWQuCisKK0luc3RhbGxpbmcgdGhlIGZpbHRlciBhbHNvIGluY2x1ZGVzIGNvbmZpZ3VyaW5nIEJSTFRUWSdzIHByb2Nlc3MKK3NvIHRoYXQgbm8gZXh0ZXJuYWwgY29tbWFuZCB0aGF0IGl0IHN1YnNlcXVlbnRseSBpbnZva2VzCit3aWxsIGJlIGFibGUgdG8gYWNxdWlyZSBhbnkgYWRkaXRpb25hbCBwcml2aWxlZ2VzLgorU2VlIHRoZSBgYFBSX1NFVF9OT19ORVdfUFJJVlNgYCBzZWN0aW9uIG9mIHRoZSBtYW4gcGFnZSBmb3IgYGBwcmN0bGBgCitmb3IgZGV0YWlscy4KK1RoZSBxdWljayBzdW1tYXJ5IGlzIHRoYXQsIHdoZW4gZXhlY3V0aW5nIGFueSBob3N0IGNvbW1hbmQ6CisKKyogSXQncyBzZXQtdXNlci1JRCBiaXQgd2lsbCBiZSBpZ25vcmVkLgorKiBJdCdzIHNldC1ncm91cC1JRCBiaXQgd2lsbCBiZSBpZ25vcmVkLgorKiBJdCdzIGZpbGUgY2FwYWJpbGl0aWVzIHdpbGwgYmUgaWdub3JlZC4KKworVGhlIGN1cnJlbnQgbGlzdCBvZiBhcHByb3ZlZCBzeXN0ZW0gY2FsbHMKK2lzIGluIHRoZSBgYHN5c2NhbGxzX2xpbnV4LmhgYCBoZWFkZXIsCit3aGljaCBpcyBpbiB0aGUgYGBQcm9ncmFtcy9gYCBzdWJkaXJlY3Rvcnkgb2YgQlJMVFRZJ3Mgc291cmNlIHRyZWUuCitCUkxUVFkgbXVzdCBiZSByZWJ1aWx0IGluIG9yZGVyIGZvciBjaGFuZ2VzIHRvIHRoZSBsaXN0IHRvIGJlY29tZSBlZmZlY3RpdmUuCitQbGVhc2UgbGV0IHVzIGtub3cgaWYgeW91IGRpc2NvdmVyIGFueSBzeXN0ZW0gY2FsbHMKK3RoYXQgYXJlIG1pc3NpbmcgYW5kIHNob3VsZCBiZSBhZGRlZC4KKworUHJlcGFyaW5nIHRoZSBFbnZpcm9ubWVudAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitDcmVhdGluZyB0aGUgVW5wcml2aWxlZ2VkIFVzZXIKK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorCitXZSByZWNvbW1lbmQgdGhhdCBgdGhlIHVucHJpdmlsZWdlZCB1c2VyYF8gYmUgbmFtZWQgfHJlY29tbWVuZGVkIHVzZXJ8LAorYW5kIHRoYXQgaXQgYmUgYSBzeXN0ZW0gdXNlci4KKworVGhlIHVzZXIncyBwcmltYXJ5IGdyb3VwIHNob3VsZCBiZSB1c2VyLXNwZWNpZmljLgorSWRlYWxseSwgaXQgc2hvdWxkIGhhdmUgdGhlIHNhbWUgbmFtZSBhcyB0aGUgdXNlci4KKworVGhlIHVzZXIncyBzdXBwbGVtZW50YXJ5IGdyb3VwIGxpc3Qgc2hvdWxkIGluY2x1ZGUKK2FsbCBvZiB0aGUgZ3JvdXBzIHRoYXQgb3duIHRoZSB2YXJpb3VzIHN5c3RlbSByZXNvdXJjZXMKK3RoYXQgQlJMVFRZIG5lZWRzIGFjY2VzcyB0byBpbiBvcmRlciBmb3IgaXQgdG8gZG8gaXRzIGpvYiBwcm9wZXJseS4KK1NlZSBgTmVlZGVkIEdyb3VwIE1lbWJlcnNoaXBzYF8gZm9yIGRldGFpbHMuCisKK1RoZSB1c2VyIHNob3VsZCBoYXZlIGEgaG9tZSBkaXJlY3RvcnkuCitJdCBzaG91bGQgYmUgb24gYSBsb2NhbCBmaWxlIHN5c3RlbQorc28gdGhhdCBCUkxUVFkgY2FuIHN0YXJ0IHByb3Blcmx5IHdoZW4gdGhlcmUgYXJlIG5ldHdvcmsgcHJvYmxlbXMuCisKK1RoZXJlJ3Mgbm9ybWFsbHkgbm8gbmVlZCBmb3IgYW55b25lIHRvIGxvZyBpbnRvIHRoZSB1c2VyLgorVGhpcyBjYW4gYmUgZW5mb3JjZWQgYnkgc2V0dGluZyBpdHMgbG9naW4gc2hlbGwgdG8gfG5vbG9naW4gc2hlbGwgcGF0aHwuCisKK1RoZSB8dXNlciBpbmZvcm1hdGlvbiBmaWVsZHwgc2hvdWxkIGJlIHNldAordG8gYSB1c2VyLWZyaWVuZGx5IGRlc2NyaXB0aW9uIG9mIHdoeSBpdCBleGlzdHMuCitXZSByZWNvbW1lbmQgc29tZXRoaW5nIGxpa2U6CisKKy4uIHBhcnNlZC1saXRlcmFsOjogfHVzZXIgaW5mb3JtYXRpb24gdGV4dHwKKworVGhlIGBgdXNlcmFkZGBgIENvbW1hbmQKK2BgYGBgYGBgYGBgYGBgYGBgYGBgYGBgCisKK1RoZSBob3N0IGNvbW1hbmQgdG8gY3JlYXRlIGEgdXNlciBpczoKKworLi4gcGFyc2VkLWxpdGVyYWw6OiB1c2VyYWRkICpvcHRpb24qIC4uLiAqbmFtZSoKKworSXQgbXVzdCBiZSBydW4gYXMgfHRoZSBzdXBlciB1c2VyfC4KKworSXQgYWNjZXB0cyBhIGxvdCBvZiBvcHRpb25zLgorRm9yIGFsbCBvZiB0aGUgZGV0YWlscywgcnVuIHRoaXMgY29tbWFuZDo6CisKKyAgbWFuIHVzZXJhZGQKKworVW5sZXNzIHRoZXJlIGFyZSBzcGVjaWFsIGFuZC9vciB1bnVzdWFsIGNvbnNpZGVyYXRpb25zLAoraXRzIG1vc3QgaW1wb3J0YW50IG9wdGlvbnMgYXJlOgorCisuLiB0YWJsZTo6IGBgdXNlcmFkZGBgIE9wdGlvbnMKKworICA9PT09PT09PT09PT09PT09PT09PT09PT0gID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgT3B0aW9uICAgICAgICAgICAgICAgICAgICBBY3Rpb24KKyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIGBgLS1zeXN0ZW1gYCAgICAgICAgICAgICAgY3JlYXRlIGEgc3lzdGVtIHVzZXIKKyAgYGAtLXVzZXItZ3JvdXBgYCAgICAgICAgICBjcmVhdGUgYSB1c2VyLXNwZWNpZmljIHByaW1hcnkgZ3JvdXAKKyAgYGAtLWdpZGBgICpncm91cCogICAgICAgICBzZXQgdGhlIHByaW1hcnkgZ3JvdXAKKyAgYGAtLWdyb3Vwc2BgICpncm91cCosLi4uICBzZXQgdGhlIHN1cHBsZW1lbnRhcnkgZ3JvdXAgbGlzdAorICBgYC0tbm8tY3JlYXRlLWhvbWVgYCAgICAgIGRvbid0IGNyZWF0ZSB0aGUgaG9tZSBkaXJlY3RvcnkKKyAgYGAtLWNyZWF0ZS1ob21lYGAgICAgICAgICBjcmVhdGUgdGhlIGhvbWUgZGlyZWN0b3J5CisgIGBgLS1ob21lYGAgKnBhdGgqICAgICAgICAgdGhlIGFic29sdXRlIHBhdGggZm9yIHRoZSBob21lIGRpcmVjdG9yeQorICBgYC0tY29tbWVudGBgICp0ZXh0KiAgICAgIHNldCB0aGUgfHVzZXIgaW5mb3JtYXRpb24gZmllbGR8CisgIGBgLS1zaGVsbGBgICpwYXRoKiAgICAgICAgc2V0IHRoZSBsb2dpbiBzaGVsbAorICA9PT09PT09PT09PT09PT09PT09PT09PT0gID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworVGhlIGBgYnJsdHR5LW1rdXNlcmBgIFNjcmlwdAorYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYAorCitUaGUgdG9wLWxldmVsIGRpcmVjdG9yeSBvZiBCUkxUVFkncyBzb3VyY2UgdHJlZSBjb250YWlucworYSBzY3JpcHQgbmFtZWQgYGBicmx0dHktbWt1c2VyYGAgdGhhdCBzaW1wbGlmaWVzIHRoZSBqb2Igb2YKK0NyZWF0aW5nIGFuZCBtYWtpbmcgY2hhbmdlcyB0byBgdGhlIHVucHJpdmlsZWdlZCB1c2VyYF8uCitGb3IgZGV0YWlscywgcnVuIHRoaXMgY29tbWFuZDo6CisKKyAgYnJsdHR5LW1rdXNlciAtaAorCitUaGUgZm9sbG93aW5nIG9wdGlvbnMgcmVxdWlyZSBzcGVjaWFsIG1lbnRpb246CisKK2BgLVVgYCAqbmFtZSoKKyAgVGhpcyBvcHRpb24gc3BlY2lmaWVzIHRoZSBuYW1lIG9mIHRoZSB1c2VyCisgIHRoYXQncyB0byBiZSBjcmVhdGVkIG9yIGNoYW5nZWQuCisgIElmIHRoZSBkZWZhdWx0IHVucHJpdmlsZWdlZCB1c2VyIHdhcyBjb25maWd1cmVkIGF0IGJ1aWxkIHRpbWUKKyAgdGhlbiBJdCBkZWZhdWx0cyB0byB0aGF0IHVzZXIuCisKK2BgLU5gYAorICBUaGlzIG9wdGlvbiBhbGxvd3MgdGhlIGNyZWF0aW9uIG9mIGEgbmV3IHVzZXIuCisKK2BgLUVgYAorICBUaGlzIG9wdGlvbiBhbGxvd3MgY2hhbmdlcyB0byBiZSBtYWRlIHRvIGFuIGV4aXN0aW5nIHVzZXIuCisKK2BgLUdgYAorICBUaGlzIG9wdGlvbiBzdXBwcmVzc2VzIHNldHRpbmcgdGhlIHVzZXIncyBzdXBwbGVtZW50YXJ5IGdyb3VwIGxpc3QuCisgIEEgbmV3IHVzZXIgd29uJ3QgYmVsb25nIHRvIGFueSBzdXBwbGVtZW50YXJ5IGdyb3VwcywKKyAgYW5kIGFuIGV4aXN0aW5nIHVzZXIgd2lsbCByZXRhaW4gaXRzIGN1cnJlbnQgc3VwcGxlbWVudGFyeSBncm91cCBtZW1iZXJzaGlwcy4KKworTm90ZSB0aGF0IHRoaXMgc2NyaXB0IGlzIHNhZmUgdG8gYWNjaWRlbnRhbGx5IGludm9rZSBiZWNhdXNlCitib3RoIGNyZWF0aW5nIGEgbmV3IHVzZXIgKGBgLU5gYCkKK2FuZCBtYWtpbmcgY2hhbmdlcyB0byBhbiBleGlzdGluZyB1c2VyIChgYC1FYGApCittdXN0IGJlIGV4cGxpY2l0bHkgYWxsb3dlZC4KK1RoZXNlIG9wdGlvbnMgYXJlbid0IG11dHVhbGx5IGV4Y2x1c2l2ZSAtIGJvdGggbWF5IGJlIHNwZWNpZmllZC4KKworVGhlIHVzZXIncyBzdXBwbGVtZW50YXJ5IGdyb3VwIGxpc3QgaXMgdXNlZAordG8gZXN0YWJsaXNoIHRoZSBgbmVlZGVkIGdyb3VwIG1lbWJlcnNoaXBzYF8uCitFYWNoIG9mIHRoZSBmb2xsb3dpbmcgb3B0aW9ucyByZW1vdmVzIGEgZ3JvdXAgZnJvbSB0aGUgZnVsbCBsaXN0LAorYW5kLCB0aGVyZWZvcmUsIGFsc28gcmVtb3ZlcyB0aGF0IGdyb3VwJ3MgYXNzb2NpYXRlZCBmdW5jdGlvbmFsaXR5IGZyb20gQlJMVFRZLgorSWYgYSBncm91cCdzIG5hbWUgaXMgc2hvd24gaW4gKml0YWxpY3MqIHRoZW4gaXQncyBvbmx5IG91ciByZWNvbW1lbmRhdGlvbgorYXMgaXRzIGFjdHVhbCBuYW1lIGlzbid0IGRlZmluZWQgYnkgYW55IHN0YW5kYXJkIG9yIGNvbnZlbnRpb24uCisKKy4uIHRhYmxlOjogYGBicmx0dHktbWt1c2VyYGAgT3B0aW9ucyBmb3IgRXhjbHVkaW5nIFN1cHBsZW1lbnRhcnkgR3JvdXBzCisKKyAgPT09PT09ICA9PT09PT09PT09PT09PT09ICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgIE9wdGlvbiAgUmVtb3ZlcyBHcm91cCAgICAgTG9zdCBGdW5jdGlvbmFsaXR5CisgIC0tLS0tLSAgLS0tLS0tLS0tLS0tLS0tLSAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICBgYC1hYGAgIGBgYXVkaW9gYCAgICAgICAgIHBsYXlpbmcgc291bmQgdmlhIHRoZSBBTFNBIGZyYW1ld29yaworICBgYC1iYGAgICpicmxhcGkqICAgICAgICAgIHJlYWRpbmcgQnJsQVBJJ3MgfGtleSBmaWxlfAorICBgYC1jYGAgIGBgdHR5YGAgICAgICAgICAgIGFjY2VzcyB0byB0aGUgdmlydHVhbCBjb25zb2xlcworICBgYC1rYGAgIGBgaW5wdXRgYCAgICAgICAgIGtleWJvYXJkIG1vbml0b3JpbmcKKyAgYGAtcGBgICBgYHB1bHNlLWFjY2Vzc2BgICBwbGF5aW5nIHNvdW5kIHZpYSB0aGUgUHVsc2UgQXVkaW8gc2VydmVyCisgIGBgLXNgYCAgKmRpYWxvdXQqICAgICAgICAgYWNjZXNzIHRvIHNlcmlhbCBkZXZpY2VzCisgIGBgLXVgYCAgdXN1YWxseSBgYHJvb3RgYCAgYWNjZXNzIHRvIFVTQiBkZXZpY2VzCisgID09PT09PSAgPT09PT09PT09PT09PT09PSAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitUaGUgZm9sbG93aW5nIG9wdGlvbnMgYXJlIGZvciBjb25maWd1cmluZwordGhlIGJhc2ljIChwYXNzd29yZCBmaWxlKSBmaWVsZHMgb2YgdGhlIHVzZXI6CisKKy4uIHRhYmxlOjogYGBicmx0dHktbWt1c2VyYGAgT3B0aW9ucyBmb3IgTmV3IC8gRXhpc3RpbmcgVXNlciBDb25maWd1cmF0aW9uCisKKyAgPT09PT09ICA9PT09PT09ICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgIE9wdGlvbiAgT3BlcmFuZCAgU2V0cyAvIENoYW5nZXMKKyAgLS0tLS0tICAtLS0tLS0tICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIGBgLWRgYCAgKnBhdGgqICAgdGhlIGhvbWUgZGlyZWN0b3J5CisgIGBgLWdgYCAgKmdyb3VwKiAgdGhlIHByaW1hcnkgZ3JvdXAKKyAgYGAtaWBgICAqdGV4dCogICB0aGUgfHVzZXIgaW5mb3JtYXRpb24gZmllbGR8CisgIGBgLWxgYCAgKnBhdGgqICAgdGhlIGxvZ2luIHNoZWxsCisgID09PT09PSAgPT09PT09PSAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitJZiBhbnkgb2YgdGhlc2Ugb3B0aW9ucyBpc24ndCBzcGVjaWZpZWQsIHRoZW46CisKKyogV2hlbiBtYWtpbmcgY2hhbmdlcyB0byBhbiBleGlzdGluZyB1c2VyLCBpdCBoYXMgbm8gZWZmZWN0LgorICBJdHMgYXNzb2NpYXRlZCBmaWVsZCBpc24ndCBjaGFuZ2VkLgorCisqIFdoZW4gY3JlYXRpbmcgYSBuZXcgdXNlciwgdGhlIGRlZmF1bHRzIGFyZToKKworICAuLiB0YWJsZTo6IGBgYnJsdHR5LW1rdXNlcmBgIERlZmF1bHRzIGZvciBOZXcgVXNlciBDb25maWd1cmF0aW9uCisKKyAgICA9PT09PT0gID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgICBPcHRpb24gIERlZmF1bHQgV2hlbiBjcmVhdGluZyBhIE5ldyBVc2VyCisgICAgLS0tLS0tICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgYGAtZGBgICB0aGUgdXBkYXRhYmxlIGRpcmVjdG9yeSAofHVwZGF0YWJsZSBkaXJlY3RvcnkgcGF0aHwpCisgICAgYGAtZ2BgICBhIG5ldyBncm91cCB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgdGhlIHVzZXIKKyAgICBgYC1pYGAgIHx1c2VyIGluZm9ybWF0aW9uIHRleHR8CisgICAgYGAtbGBgICB8bm9sb2dpbiBzaGVsbCBwYXRofAorICAgID09PT09PSAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitUaGUgZm9sbG93aW5nIG9wdGlvbnMgYXJlIHByaW1hcmlseSBmb3IgZGV2ZWxvcGVyczoKKworLi4gdGFibGU6OiBgYGJybHR0eS1ta3VzZXJgYCBPcHRpb25zIGZvciBEZXZlbG9wZXJzCisKKyAgPT09PT09ICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgIE9wdGlvbiAgRGVzY3JpcHRpb24KKyAgLS0tLS0tICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIGBgLVNgYCAgdXNlIGBgc3Vkb2BgIHRvIGV4ZWN1dGUgdGhlIGNvbW1hbmRzIGFzIHJvb3QKKyAgYGAtVGBgICB0ZXN0IG1vZGUgLSBzaG93IHRoZSBjb21tYW5kcyB0aGF0IHdvdWxkIGJlIGV4ZWN1dGVkCisgID09PT09PSAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitBc3NpZ25pbmcgQ2FwYWJpbGl0aWVzIHRvIHRoZSBFeGVjdXRhYmxlCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisKKyoqRG9uJ3QgZG8gdGhpcyBpZiB5b3Ugb25seSB3YW50IEJSTFRUWSB0byBleGVjdXRlIHN1Y2Nlc3NmdWxseQorYHdoZW4gc3RhcnRlZCBhcyB0aGUgc3VwZXIgdXNlcmBfLioqCisKK0ZpcnN0LCBoZXJlJ3MgYSBzdW1tYXJ5IG9mIGFsbCBvZiB0aGUgY2FwYWJpbGl0aWVzIHRoYXQgQlJMVFRZIG5lZWRzCitgd2hlbiBzdGFydGVkIGJ5IGFuIHVucHJpdmlsZWdlZCB1c2VyYF8uCisKKyogVGhlIGByZXF1aXJlZCBjYXBhYmlsaXRpZXNgXyBhcmUgaGlnaGxpZ2h0ZWQgKip0aGlzIHdheSoqLgorICBUaGV5J3JlIG5lZWRlZCB0aHJvdWdob3V0IEJSTFRUWSdzIGV4ZWN1dGlvbi4KKworKiBUaGUgYHRlbXBvcmFyeSBjYXBhYmlsaXRpZXNgXyBhcmUgaGlnaGxpZ2h0ZWQgKnRoaXMgd2F5Ki4KKyAgVGhleSdyZSBvbmx5IG5lZWRlZCB3aGVuIEJSTFRUWSBzdGFydHMsCisgIGFuZCBhcmUgcmVsaW5xdWlzaGVkIHdoZW4gdGhleSdyZSBubyBsb25nZXIgbmVlZGVkLgorCisuLiB0YWJsZTo6IENhcGFiaWxpdHkgU3VtbWFyeQorCisgID09PT09PT09PT09PT09PT09PT09ICA9PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgQ2FwYWJpbGl0eSAgICAgICAgICAgIFJlYXNvbgorICAtLS0tLS0tLS0tLS0tLS0tLS0tLSAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIHxjYXBfY2hvd258ICAgICAgICAgICB8Y2FwX2Nob3duIHJlYXNvbnwKKyAgfGNhcF9kYWNfb3ZlcnJpZGV8ICAgIHxjYXBfZGFjX292ZXJyaWRlIHJlYXNvbnwKKyAgfGNhcF9mb3duZXJ8ICAgICAgICAgIHxjYXBfZm93bmVyIHJlYXNvbnwKKyAgfGNhcF9ta25vZHwgICAgICAgICAgIHxjYXBfbWtub2QgcmVhc29ufAorICB8Y2FwX3NldGdpZHwgICAgICAgICAgfGNhcF9zZXRnaWQgcmVhc29ufAorICB8Y2FwX3N5c19hZG1pbnwgICAgICAgfGNhcF9zeXNfYWRtaW4gcmVhc29ufAorICB8Y2FwX3N5c19tb2R1bGV8ICAgICAgfGNhcF9zeXNfbW9kdWxlIHJlYXNvbnwKKyAgfGNhcF9zeXNfdHR5X2NvbmZpZ3wgIHxjYXBfc3lzX3R0eV9jb25maWcgcmVhc29ufAorICA9PT09PT09PT09PT09PT09PT09PSAgPT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1RoZSBgYHNldGNhcGBgIENvbW1hbmQKK2BgYGBgYGBgYGBgYGBgYGBgYGBgYGAKKworVGhlIGhvc3QgY29tbWFuZCB0byBhc3NpZ24gYWxsIG9mIHRoZSBjYXBhYmlsaXRpZXMsCitpLmUuIGJvdGggdGhlIGByZXF1aXJlZCBjYXBhYmlsaXRpZXNgXyBhbmQgdGhlIGB0ZW1wb3JhcnkgY2FwYWJpbGl0aWVzYF8sCit0byBCUkxUVFkncyBleGVjdXRhYmxlCitzbyB0aGF0IGl0J2xsIGJlIGZ1bGx5IGZ1bmN0aW9uYWwgYHdoZW4gc3RhcnRlZCBieSBhbiB1bnByaXZpbGVnZWQgdXNlcmBfLAord2l0aG91dCByZXF1aXJpbmcgYW55IGFkZGl0aW9uYWwgYWRtaW5pc3RyYXRvciBjb25maWd1cmF0aW9uLAoraXM6OgorCisgIHNldGNhcCBjYXBfc2V0Z2lkLGNhcF9jaG93bixjYXBfZm93bmVyLGNhcF9kYWNfb3ZlcnJpZGUsY2FwX3N5c19tb2R1bGUsY2FwX3N5c19hZG1pbixjYXBfc3lzX3R0eV9jb25maWcsY2FwX21rbm9kK3AgL3BhdGgvdG8vYnJsdHR5CisKK0l0IG11c3QgYmUgcnVuIGFzIHx0aGUgc3VwZXIgdXNlcnwuCisKK1RoZSBgYGJybHR0eS1zZXRjYXBzYGAgU2NyaXB0CitgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYAorCitUaGUgdG9wLWxldmVsIGRpcmVjdG9yeSBvZiBCUkxUVFkncyBzb3VyY2UgdHJlZSBjb250YWlucworYSBzY3JpcHQgbmFtZWQgYGBicmx0dHktc2V0Y2Fwc2BgIHRoYXQgc2ltcGxpZmllcyB0aGUgam9iIG9mCitgYXNzaWduaW5nIGNhcGFiaWxpdGllcyB0byB0aGUgZXhlY3V0YWJsZWBfLgorSXRzIGRlZmF1bHQgaXMgdG8gYXNzaWduIGFsbCBvZiB0aGVtLgorRm9yIGRldGFpbHMsIHJ1biB0aGlzIGNvbW1hbmQ6OgorCisgIGJybHR0eS1zZXRjYXBzIC1oCisKK0l0IHJlcXVpcmVzIG9uZSBwb3NpdGlvbmFsIGFyZ3VtZW50IC0gdGhlIHBhdGggdG8gQlJMVFRZJ3MgZXhlY3V0YWJsZS4KK0l0IGFsc28gYWNjZXB0cyBhIG51bWJlciBvZiBvcHRpb25zICh3aGljaCBtdXN0IHByZWNlZGUgdGhhdCBwYXRoKS4KK0luIHBhcnRpY3VsYXIsIGVhY2ggb2YgdGhlIGZvbGxvd2luZyBvcHRpb25zCityZW1vdmVzIGEgY2FwYWJpbGl0eSBmcm9tIHRoZSBmdWxsIHNldCwKK2FuZCwgdGhlcmVmb3JlLCBhbHNvIHJlbW92ZXMgdGhlIGZ1bmN0aW9uYWxpdHkKK3RoYXQgdGhhdCBjYXBhYmlsaXR5IGdyYW50cyBmcm9tIEJSTFRUWS4KKworLi4gdGFibGU6OiBgYGJybHR0eS1zZXRjYXBzYGAgT3B0aW9ucyBmb3IgRXhjbHVkaW5nIENhcGFiaWxpdGllcworCisgID09PT09PSAgPT09PT09PT09PT09PT09PT09PT0gID09PT09PT09PT09PT09PT09PT09PT09PT09PQorICBPcHRpb24gIFJlbW92ZXMgQ2FwYWJpbGl0eSAgICBMb3N0IEZ1bmN0aW9uYWxpdHkKKyAgLS0tLS0tICAtLS0tLS0tLS0tLS0tLS0tLS0tLSAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIGBgLWNgYCAgfGNhcF9kYWNfb3ZlcnJpZGV8ICAgIHxjYXBfZGFjX292ZXJyaWRlIHJlYXNvbnwKKyAgYGAtZGBgICB8Y2FwX21rbm9kfCAgICAgICAgICAgfGNhcF9ta25vZCByZWFzb258CisgIGBgLWdgYCAgfGNhcF9zZXRnaWR8ICAgICAgICAgIHxjYXBfc2V0Z2lkIHJlYXNvbnwKKyAgYGAtaWBgICB8Y2FwX3N5c19hZG1pbnwgICAgICAgfGNhcF9zeXNfYWRtaW4gcmVhc29ufAorICBgYC1tYGAgIHxjYXBfc3lzX21vZHVsZXwgICAgICB8Y2FwX3N5c19tb2R1bGUgcmVhc29ufAorICBgYC1vYGAgIHxjYXBfY2hvd258ICAgICAgICAgICB8Y2FwX2Nob3duIHJlYXNvbnwKKyAgYGAtcGBgICB8Y2FwX2Zvd25lcnwgICAgICAgICAgfGNhcF9mb3duZXIgcmVhc29ufAorICBgYC1zYGAgIHxjYXBfc3lzX3R0eV9jb25maWd8ICB8Y2FwX3N5c190dHlfY29uZmlnIHJlYXNvbnwKKyAgPT09PT09ICA9PT09PT09PT09PT09PT09PT09PSAgPT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1RoZSBmb2xsb3dpbmcgb3B0aW9ucyBhcmUgcHJpbWFyaWx5IGZvciBkZXZlbG9wZXJzOgorCisuLiB0YWJsZTo6IGBgYnJsdHR5LXNldGNhcHNgYCBPcHRpb25zIGZvciBEZXZlbG9wZXJzCisKKyAgPT09PT09ICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgIE9wdGlvbiAgRGVzY3JpcHRpb24KKyAgLS0tLS0tICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIGBgLUNgYCAgZG9uJ3Qgc2V0IHRoZSBjYXBhYmlsaXRpZXMKKyAgYGAtR2BgICBzZXQgZ3JvdXAgcm9vdCBleGVjdXRpb24KKyAgYGAtU2BgICB1c2UgYGBzdWRvYGAgdG8gZXhlY3V0ZSB0aGUgY29tbWFuZHMgYXMgcm9vdAorICBgYC1UYGAgIHRlc3QgbW9kZSAtIHNob3cgdGhlIGNvbW1hbmRzIHRoYXQgd291bGQgYmUgZXhlY3V0ZWQKKyAgYGAtVWBgICBzZXQgdXNlciByb290IGV4ZWN1dGlvbgorICA9PT09PT0gID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworUHJpdmlsZWdlZCBIb3N0IE9wZXJhdGlvbnMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBwcml2aWxlZ2VkIGhvc3Qgb3BlcmF0aW9ucyB0aGF0IEJSTFRUWSBuZWVkcyB0byBiZSBhYmxlIHRvIHBlcmZvcm0KK2luIG9yZGVyIHRvIGJlIGZ1bGx5IGZ1bmN0aW9uYWwgYXJlOgorCitLZXJuZWwgTW9kdWxlcworfn5+fn5+fn5+fn5+fn4KKworQlJMVFRZIHJlbGllcyBvbiBmdW5jdGlvbmFsaXR5IHByb3ZpZGVkIGJ5IHRoZXNlIGtlcm5lbCBtb2R1bGVzOgorCisqKnBjc3BrcioqCisgIEZvciBwbGF5aW5nIGFsZXJ0IHR1bmVzIHZpYSB0aGUgfHNwZWFrZXJ8LgorCisqKnVpbnB1dCoqCisgIEZvciBjcmVhdGluZyB2aXJ0dWFsIGRldmljZXMgdmlhIHRoZSB8dWlucHV0IGRldmljZXwuCisKK05lZWRlZCBHcm91cCBNZW1iZXJzaGlwcworfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisKK0JSTFRUWSByZWxpZXMgb24gZmlsZSBzeXN0ZW0gYW5kIHNlcnZlciAoZGFlbW9uKSBhY2Nlc3MKK2dyYW50ZWQgdmlhIG1lbWJlcnNoaXAgaW4gdGhlIGZvbGxvd2luZyBvd25pbmcgdXNlciBncm91cHMuCisKKyogQSBncm91cCBuYW1lIHNob3duIGluICoqYm9sZCoqIGlzIGl0cyBhY3R1YWwgbmFtZS4KKworKiBBIGdyb3VwIG5hbWUgc2hvd24gaW4gKml0YWxpY3MqIGlzIG91ciByZWNvbW1lbmRlZCBuYW1lIGZvciBpdAorICBhcyBpdHMgYWN0dWFsIG5hbWUgaXNuJ3QgZGVmaW5lZCBieSBhbnkgc3RhbmRhcmQgb3IgY29udmVudGlvbi4KKworKiphdWRpbyoqCisgIEZvciBwbGF5aW5nIHNvdW5kIHZpYSB0aGUgQUxTQSBmcmFtZXdvcmsuCisKKypicmxhcGkqCisgIEZvciByZWFkaW5nIEJybEFQSSdzIHxrZXkgZmlsZXwuCisgIEluIG90aGVyIHdvcmRzLCB0aGUgZ3JvdXAgdGhhdCBvd25zIHRoYXQgZmlsZS4KKworKipkaWFsb3V0KiogKHNvbWUgZGlzdHJpYnV0aW9ucyB1c2UgKip1dWNwKiopCisgIEZvciBzZXJpYWwgSS9PIHZpYSB0aGVzZSBgYC9kZXYvYGAgZGV2aWNlczoKKworICAqKnR0eVM8bj4qKgorICAgIEFjdHVhbCBzZXJpYWwgcG9ydHMuCisKKyAgKip0dHlBQ008bj4qKgorICAgIFVTQiB0byBzZXJpYWwgYWRhcHRlcnMgdGhhdCBpbXBsZW1lbnQgdGhlIENEQyBBQ00gc3RhbmRhcmQuCisKKyAgKip0dHlVU0I8bj4qKgorICAgIE90aGVyIFVTQiB0byBzZXJpYWwgYWRhcHRlcnMuCisKKyoqaW5wdXQqKgorICBGb3IgbW9uaXRvcmluZyBrZXlib2FyZCBpbnB1dCB2aWEgdGhlIGRldmljZXMgaW4gYGAvZGV2L2lucHV0L2BgLgorICBUaGlzIGNhcGFiaWxpdHkgaXMgdXNlZCB0byBzdXBwb3J0IHxrZXlib2FyZCBrZXkgdGFibGVzfC4KKworKipwdWxzZS1hY2Nlc3MqKgorICBGb3IgcGxheWluZyBzb3VuZCB2aWEgdGhlIFB1bHNlIEF1ZGlvIGRhZW1vbi4KKworKipyb290KioKKyAgRm9yOgorCisgICogVVNCIEkvTyB2aWEgYGBVU0JGU2BgICh1c2luZyB0aGUgZGV2aWNlcyBpbiBgYC9kZXYvYnVzL3VzYi9gYCkuCisgICogQ3JlYXRpbmcgdmlydHVhbCBkZXZpY2VzIHZpYSB0aGUgfHVpbnB1dCBkZXZpY2V8LgorCisgIE5vdGUgdGhhdCB0aGlzIGlzIHRoZSBgYHJvb3RgYCBncm91cCAtIG5vdCB0aGUgYGByb290YGAgdXNlci4KKworKip0dHkqKgorICBGb3I6CisKKyAgKiBSZWFkaW5nIHNjcmVlbiBjb250ZW50IHZpYSB0aGUgYGAvZGV2L3Zjc2BgIGRldmljZXMuCisgICogVmlydHVhbCBjb25zb2xlIG1vbml0b3JpbmcgYW5kIGNvbnRyb2wgdmlhIHRoZSBgYC9kZXYvdHR5PG4+YGAgZGV2aWNlcy4KKworKiBgV2hlbiBzdGFydGVkIGJ5IHRoZSBzdXBlciB1c2VyYF8sCisgIGV4aXN0aW5nIGdyb3VwIG1lbWJlcnNoaXBzIGFyZSByZWxpbnF1aXNoZWQuCisKKyogYFdoZW4gc3RhcnRlZCBieSBhbiB1bnByaXZpbGVnZWQgdXNlcmBfLAorICBleGlzdGluZyBncm91cCBtZW1iZXJzaGlwcyBhcmUgcmV0YWluZWQuCisKK1JlcXVpcmVkIENhcGFiaWxpdGllcworfn5+fn5+fn5+fn5+fn5+fn5+fn5+CisKK0JSTFRUWSB1c2VzIHRoZSBwcml2aWxlZ2VkIGtlcm5lbCBvcGVyYXRpb25zCit0aGF0IGFyZSBncmFudGVkIHZpYSB0aGVzZSBjYXBhYmlsaXRpZXMKK3Rocm91Z2hvdXQgaXRzIGV4ZWN1dGlvbi4KK1RoZXkgYXJlIHJldGFpbmVkIHdpdGhpbiBpdHMgYGBwZXJtaXR0ZWRgYCBhbmQgYGBlZmZlY3RpdmVgYCBzZXRzLAorYnV0IG5vdCB3aXRoaW4gaXRzIGBgaW5oZXJpdGFibGVgYCBhbmQgYGBhbWJpZW50YGAgc2V0cy4KK0luIG90aGVyIHdvcmRzLCB0aGV5J3JlIGZvciBCUkxUVFkgaXRzZWxmCithbmQgYXJlbid0IHBhc3NlZCBhbG9uZyB0byBhbnkgaG9zdCBjb21tYW5kIHRoYXQgaXQgcnVucy4KKworfGNhcF9ta25vZHwKKyAgRm9yIGNyZWF0aW5nIG5lZWRlZCBidXQgbWlzc2luZyBkZXZpY2UgZmlsZXMuCisKK3xjYXBfc3lzX2FkbWlufAorICBGb3IgdXNpbmcgYGBUSU9DU1RJYGAgdG8gaW5qZWN0IGlucHV0IGNoYXJhY3RlcnMgdHlwZWQgb24gYSBicmFpbGxlIGRldmljZS4KKworfGNhcF9zeXNfdHR5X2NvbmZpZ3wKKyAgRm9yIHVzaW5nIGBgS0RNS1RPTkVgYCBhbmQgYGBLSU9DU09VTkRgYCB0byBwbGF5IGFsZXJ0IHR1bmVzIHZpYSB0aGUgfHNwZWFrZXJ8LgorCitUZW1wb3JhcnkgQ2FwYWJpbGl0aWVzCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisKK0JSTFRUWSBvbmx5IHVzZXMgdGhlIHByaXZpbGVnZWQga2VybmVsIG9wZXJhdGlvbnMKK3RoYXQgYXJlIGdyYW50ZWQgdmlhIHRoZXNlIGNhcGFiaWxpdGllcworYHdoZW4gc3RhcnRlZCBieSBhbiB1bnByaXZpbGVnZWQgdXNlcmBfLgorVGhleSBhbGxvdyBpdCB0byBjb25maWd1cmUgaXRzZWxmLAordGh1cyBub3QgcmVseWluZyBzbyBoZWF2aWx5IG9uIGV4cGxpY2l0IGFkbWluaXN0cmF0b3IgY29uZmlndXJhdGlvbiwKK2FuZCBhcmUgcmVsaW5xdWlzaGVkIHJpZ2h0IGFmdGVyIHRoaXMgaGFzIGJlZW4gZG9uZS4KKworfGNhcF9jaG93bnwKKyAgSWYgdGhpcyBjYXBhYmlsaXR5IGhhcyBhbHNvIGJlZW4gYXNzaWduZWQgdG8gQlJMVFRZJ3MgZXhlY3V0YWJsZQorICB0aGVuIGl0IGNhbiBjbGFpbSBvd25lcnNoaXAgb2YgaXRzIGBzdGF0ZSBkaXJlY3Rvcmllc2BfCisgIGFuZCB0aGVpciBjb250ZW50cworICBhZnRlciBoYXZpbmcgc3VjY2Vzc2Z1bGx5IHN3aXRjaGVkIHRvIGV4ZWN1dGluZyBhcyBgdGhlIHVucHJpdmlsZWdlZCB1c2VyYF8uCisgIFRoZSBwcmltYXJ5IGdyb3VwIG9mIHRoYXQgdXNlciBpcyB1c2VkLgorCit8Y2FwX2RhY19vdmVycmlkZXwKKyAgSWYgdGhpcyBjYXBhYmlsaXR5IGhhcyBhbHNvIGJlZW4gYXNzaWduZWQgdG8gQlJMVFRZJ3MgZXhlY3V0YWJsZQorICB0aGVuIGl0IGNhbiBjcmVhdGUgbWlzc2luZyBgc3RhdGUgZGlyZWN0b3JpZXNgXworICBhZnRlciBoYXZpbmcgc3VjY2Vzc2Z1bGx5IHN3aXRjaGVkIHRvIGV4ZWN1dGluZyBhcyBgdGhlIHVucHJpdmlsZWdlZCB1c2VyYF8uCisKK3xjYXBfZm93bmVyfAorICBJZiB0aGlzIGNhcGFiaWxpdHkgaGFzIGFsc28gYmVlbiBhc3NpZ25lZCB0byBCUkxUVFkncyBleGVjdXRhYmxlCisgIHRoZW4gaXQgY2FuIGFkZCBncm91cCBwZXJtaXNzaW9ucyB0byBpdHMgYHN0YXRlIGRpcmVjdG9yaWVzYF8KKyAgYW5kIHRvIHRoZWlyIGNvbnRlbnRzCisgIGFmdGVyIGhhdmluZyBzdWNjZXNzZnVsbHkgc3dpdGNoZWQgdG8gZXhlY3V0aW5nIGFzIGB0aGUgdW5wcml2aWxlZ2VkIHVzZXJgXy4KKyAgQm90aCByZWFkIGFuZCB3cml0ZSBncm91cCBwZXJtaXNzaW9ucyBhcmUgYWRkZWQgdG8gYWxsIGZpbGVzIGFuZCBkaXJlY3Rvcmllcy4KKyAgSW4gYWRkaXRpb24sIGZvciBhbGwgZGlyZWN0b3JpZXMsCisgIGdyb3VwIHNlYXJjaCBwZXJtaXNzaW9uIGlzIGFkZGVkCisgIGFuZCB0aGUgc2V0LWdyb3VwLUlEIGJpdCBpcyBzZXQuCisKK3xjYXBfc2V0Z2lkfAorICBJZiB0aGlzIGNhcGFiaWxpdHkgaGFzIGFsc28gYmVlbiBhc3NpZ25lZCB0byBCUkxUVFkncyBleGVjdXRhYmxlCisgIHRoZW4gaXQgaW50ZXJuYWxseSBleHRlbmRzIGl0cyBzdXBwbGVtZW50YXJ5IGdyb3VwIGxpc3QKKyAgd2l0aCBhbnkgYG5lZWRlZCBncm91cCBtZW1iZXJzaGlwc2BfIHRoYXQgYXJlIG1pc3NpbmcuCisKK3xjYXBfc3lzX2FkbWlufAorICBXaGlsZSB0aGlzIGlzIG9uZSBvZiB0aGUgYHJlcXVpcmVkIGNhcGFiaWxpdGllc2BfLAorICBpdCdzIGFsc28gbmVlZGVkIGFzIGEgdGVtcG9yYXJ5IGNhcGFiaWxpdHkgZm9yIGBuYW1lc3BhY2UgaXNvbGF0aW9uYF8uCisKK3xjYXBfc3lzX21vZHVsZXwKKyAgSWYgdGhpcyBjYXBhYmlsaXR5IGhhcyBhbHNvIGJlZW4gYXNzaWduZWQgdG8gQlJMVFRZJ3MgZXhlY3V0YWJsZQorICB0aGVuIHRoZSBuZWVkZWQgYGtlcm5lbCBtb2R1bGVzYF8gbmVlZG4ndCBoYXZlIGJlZW4gYWxyZWFkeSBpbnN0YWxsZWQKKyAgYmVjYXVzZSB0aGV5IGNhbiBiZSBpbnRlcm5hbGx5IGluc3RhbGxlZC4KKworS25vd24gUHJvYmxlbXMKKy0tLS0tLS0tLS0tLS0tCisKK1dyaXRpbmcgdG8gU1lTRlMgRmlsZXMKK35+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKworVGhlIGBgU1lTRlNgYCB2aXJ0dWFsIGZpbGUgc3lzdGVtICh1c3VhbGx5IG1vdW50ZWQgYXQgYGAvc3lzL2BgKQorY29udGFpbnMgc29tZSBmaWxlcyB0aGF0IEJSTFRUWSBvY2Nhc2lvbmFsbHkgbmVlZHMgdG8gd3JpdGUgdG8uCitXaGlsZSB0aGV5IGNhbiBiZSByZWFkIGJ5IGFueW9uZSwKK3RoZXkgY2FuIG9ubHkgYmUgd3JpdHRlbiB0byBieSB8dGhlIHN1cGVyIHVzZXJ8LgorQlJMVFRZIG5lZWRzIHRvIGJlIGFibGUgdG8gd3JpdGUgdG8gdGhlc2UgZmlsZXMKK2ZvciAoYXQgbGVhc3QpIHRoZSBmb2xsb3dpbmcgcmVhc29uczoKKworKiBEaXNhYmxpbmcgVVNCIGF1dG9zdXNwZW5kLgorICBTb21lIFVTQi1jb25uZWN0ZWQgYnJhaWxsZSBkZXZpY2VzIGRvbid0IHJlc3BvbmQgdmVyeSB3ZWxsCisgIHRvIGJlaW5nIGF1dG9tYXRpY2FsbHkgc3VzcGVuZGVkIGJ5IHRoZSBrZXJuZWwuCisgIEluIHRoZXNlIGNhc2VzLCBCUkxUVFkgZGlzYWJsZXMgdGhlIGZlYXR1cmUKKyAgYnkgd3JpdGluZyB0byB0aGUgYGBwb3dlci9hdXRvc3VzcGVuZGBgIGZpbGUKKyAgb2YgdGhlIGFzc29jaWF0ZWQgUENJIGRldmljZS4KKworQSBwb3NzaWJsZSBhcHByb2FjaCBtaWdodCBiZSB0byBhZGQgVWRldiBydWxlcy4KKworQ3JlYXRpbmcgVmlydHVhbCBEZXZpY2VzIHZpYSBVaW5wdXQKK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisKK1RoZSB8dWlucHV0IGRldmljZXwgaXMgdXN1YWxseSBvbmx5IHJlYWRhYmxlIGFuZCB3cml0YWJsZQorYnkgfHRoZSBzdXBlciB1c2VyfC4KK1dpdGhvdXQgYW55IGdyb3VwIGFuZC9vciBvdGhlcnMgYWNjZXNzLAoraXQncyBpbXBvc3NpYmxlIGZvciBCUkxUVFkgdG8gYWNjZXNzIGl0CithZnRlciBoYXZpbmcgc3dpdGNoZWQgdG8gYHRoZSB1bnByaXZpbGVnZWQgdXNlcmBfLgorCitUaGlzIHNpdHVhdGlvbiBjb3VsZCBiZSBlYXNpbHkgcmVzb2x2ZWQKK2J5IGdyYW50aW5nIGdyb3VwIHJlYWQgYW5kIHdyaXRlIHBlcm1pc3Npb25zIHRvIHRoZSBkZXZpY2UuCitUaGlzIHNob3VsZG4ndCBiZSBwcm9ibGVtYXRpYyBiZWNhdXNlIGl0cyBvd25lZCBieSB0aGUgYGByb290YGAgZ3JvdXAuCitFdmVuIGJldHRlciwgb2YgY291cnNlLCB3b3VsZCBiZSB0byBnaXZlIHRoZSBkZXZpY2UgaXRzIG93biBncm91cAorKGUuZy4gbmFtZWQgYGB1aW5wdXRgYCkuCisKK0JSTFRUWSBjdXJyZW50bHkgZ2V0cyBhcm91bmQgdGhpcyBwcm9ibGVtIGJ5IGluY2x1ZGluZyB0aGUgZm9sbG93aW5nCitVZGV2IHJ1bGUgdG8gYWRkIGFuIEFDTCAoYWNjZXNzIGNvbnRyb2wgbGlzdCkgZW50cnkgdG8gdGhlIGRldmljZTo6CisKKyAgS0VSTkVMPT0idWlucHV0IiwgQUNUSU9OPT0iYWRkIiwgVEVTVD09Ii91c3IvYmluL3NldGZhY2wiLAorICBSVU4rPSIvdXNyL2Jpbi9zZXRmYWNsIC1tIHU6YnJsdHR5OnJ3IC9kZXYvJG5hbWUiCisKK0lmIEJSTFRUWSBmaW5kcyB0aGF0IGl0IGlzbid0IHBlcm1pdHRlZCB0byBvcGVuIHRoZSBkZXZpY2UKKyhwZXJoYXBzIGJlY2F1c2UgdGhlIFVkZXYgcnVsZSBpc24ndCBwcmVzZW50KQordGhlbiBpdHMgZmFsbGJhY2sgbWV0aG9kIElzIHRvIGNyZWF0ZSBhIHByaXZhdGUgY29weSBvZiB0aGUgZGV2aWNlIGZpbGUKK3dpdGhpbiBpdHMgfHdyaXRhYmxlIGRpcmVjdG9yeXwuCitUaGlzIHJlcXVpcmVzIHRoZSB8Y2FwX21rbm9kfCBjYXBhYmlsaXR5LgorCitPdGhlciBhbHRlcm5hdGl2ZXMgaW5jbHVkZToKKworKiBBZGRpbmcgdGhlIGBgY2FwX2RhY19vdmVycmlkZWBgIChwZXJtYW5lbnQpIGNhcGFiaWxpdHkKKyAgc28gdGhhdCBCUkxUVFkgaXNuJ3Qgc3ViamVjdCB0byBmaWxlIG93bmVyc2hpcCByZXN0cmljdGlvbnMuCisgIFRoaXMgaXMgYSB2ZXJ5LCB2ZXJ5IGJhZCBpZGVhCisgIGJ1dCwgZm9yIGNvbXBsZXRlbmVzcywgaXQncyBvbiB0aGUgdGFibGUuCisKKyogQWRkaW5nIHRoZSBgYGNhcF9mb3duZXJgYCAodGVtcG9yYXJ5KSBjYXBhYmlsaXR5CisgIHNvIHRoYXQgQlJMVFRZIGNhbiBhZGQgYW4gYWNsIChhY2Nlc3MgY29udHJvbCBsaXN0KSBlbnRyeQorICB0aGF0IGdyYW50cyBpdHNlbGYgYWNjZXNzIHRvIHRoZSBkZXZpY2UuCisKKyogQWRkaW5nIHRoZSBgYGNhcF9mb3duZXJgYCAodGVtcG9yYXJ5KSBjYXBhYmlsaXR5CisgIHNvIHRoYXQgQlJMVFRZIGNhbiBhZGQgZ3JvdXAgcmVhZCBhbmQgd3JpdGUgcGVybWlzc2lvbnMgdG8gdGhlIGRldmljZS4KKworQmVpbmcgYWJsZSB0byBjcmVhdGUgdmlydHVhbCBkZXZpY2VzCitpcyBhIHZlcnkgaW1wb3J0YW50IGFiaWxpdHkgZm9yIEJSTFRUWSB0byBoYXZlLgorSXQncyB1c2VkIGZvcjoKKworKiBDcmVhdGluZyBhIHZpcnR1YWwga2V5Ym9hcmQgaW4gb3JkZXIgdG8KKyAgZm9yd2FyZCB0aG9zZSBrZXlib2FyZCBldmVudHMgKGtleSBwcmVzc2VzIGFuZCByZWxlYXNlcykKKyAgdGhhdCBoYXZlbid0IGJlZW4gY2xhaW1lZCBieSBiaW5kaW5ncyB3aXRoaW4gfGtleWJvYXJkIGtleSB0YWJsZXN8CisgIGJhY2sgdG8gdGhlIHN5c3RlbS4KKworKiBDcmVhdGluZyBhIHZpcnR1YWwga2V5Ym9hcmQgaW4gb3JkZXIgdG8gaW5qZWN0IHNpbXVsYXRlZCB0eXBpbmcuIAorICBUaGlzIGlzIGRvbmUgdG8gc3VwcG9ydCB0aGUgdHlwaW5nIG9mCisgIGFyYml0cmFyeSBjb21iaW5hdGlvbnMgb2YgbW9kaWZpZXIga2V5cyAoc2hpZnQsIGNvbnRyb2wsIGFsdCwgZXRjKSwKKyAgaW4gY29tYmluYXRpb24gKG9yIG5vdCkgd2l0aCBhbnkgY2hhcmFjdGVyKHMpIGFuZC9vciBzcGVjaWFsIGtleShzKSwKKyAgb24gdGhlIGtleWJvYXJkIG9mIGEgYnJhaWxsZSBkZXZpY2UuCisgIFRoZSBmYWxsYmFjayBpbnRlcmZhY2UgLSBgYFRJT0NTVElgYCAtIG9ubHkgcHJvdmlkZXMgY2hhcmFjdGVyIGluamVjdGlvbiwKKyAgd2hpY2ggbWVhbnMgdGhhdCBpdCBjYW4gb25seSBzdXBwb3J0IHRoZSB0eXBpbmcgb2YgaW5kaXZpZHVhbCBjaGFyYWN0ZXJzCisgIGFuZCB0aGUgcHJlc3Npbmcgb2YgdGhvc2Ugc3BlY2lhbCBrZXlzCisgIHRoYXQgY2FuIGJlIGVtdWxhdGVkIGJ5IHdlbGwta25vd24gZXNjYXBlIHNlcXVlbmNlcy4KKworKiBDcmVhdGluZyBhIHZpcnR1YWwgc291bmQgZGV2aWNlIGluIG9yZGVyIHRvCisgIHdhdGNoIGZvciB0b25lcyBzZW50IHRvIHRoZSB8c3BlYWtlcnwuCisgIFRoaXMgaXMgZG9uZSB0byBzdXBwb3J0IHRoZSByZWRpcmVjdGlvbiBvZiB0aGVzZSB0b25lcworICB0byB0aGUgUENNIGludGVyZmFjZSBvZiBhIHNvdW5kIGNhcmQuCisgIFdoaWxlIHNpZ2h0ZWQgdXNlcnMgc2VlbSB0byBiZSBjb250ZW50IHdpdGggbm90IGhlYXJpbmcgdGhlc2UgdG9uZXMKKyAgb24gYSBjb21wdXRlciB0aGF0IGRvZXNuJ3QgaGF2ZSBhIHxzcGVha2VyfCwKKyAgbW9zdCBibGluZCB1c2VycyByZWx5IG9uIGJlaW5nIGFibGUgdG8gaGVhciB0aGVtLgorICBGb3IgZXhhbXBsZSwgYSBibGluZCBwZXJzb24gY2FuJ3Qgc2VlIGEgdmlzdWFsIGJlbGwuCisKKyogQ3JlYXRpbmcgYSB2aXJ0dWFsIExFRCBkZXZpY2UgaW4gb3JkZXIgdG8KKyAgbW9uaXRvciB3aGF0IHRoZSBrZXlib2FyZCBMRURzIGFyZSBzaG93aW5nLgorICBUaGlzIGlzIGRvbmUgdG8gc3VwcG9ydCB0aGUgZ2VuZXJhdGlvbiBvZgorICBBbiBhdWRpby1iYXNlZCByZW5kZXJpbmcgb2YgTEVEIHN0YXRlIGNoYW5nZXMuCisKK0NyZWF0aW5nIFByaXZhdGUgQ29waWVzIG9mIERldmljZSBGaWxlcworfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisKK1RoZSBkZWZhdWx0IGxvY2F0aW9uIG9mIHRoZSB8d3JpdGFibGUgZGlyZWN0b3J5fCBvbiBhIG1vZGVybiBzeXN0ZW0KK2lzIHVzdWFsbHkgb24gYSBtZW1vcnktcmVzaWRlbnQgZmlsZSBzeXN0ZW0KK3RoYXQgaGFzIGJlZW4gbW91bnRlZCB3aXRoIHRoZSBgYG5vZGV2YGAgb3B0aW9uLgorVGhpcyBwcmV2ZW50cyBhIGRldmljZSBmaWxlIHdpdGhpbiB0aGF0IGZpbGUgc3lzdGVtIGZyb20gYmVpbmcgb3BlbmVkLAorZXZlbiBpZiBpdHMgcGVybWlzc2lvbnMgKG1vZGUsIGFjbCwgZXRjKSBhbGxvdyBpdC4KK1RoZSBnb29kIG5ld3MgaXMgdGhhdCB0aGlzIGlzbid0IHVzdWFsbHkgYSBwcm9ibGVtCitvbiBhIHdlbGwtY29uZmlndXJlZCBzeXN0ZW0KK2JlY2F1c2UgaXQncyBleHRyZW1lbHkgcmFyZSBmb3IgYSBuZWVkZWQgZGV2aWNlIGZpbGUgdG8gYmUgbWlzc2luZy4KK0lmIGl0IGlzLCB0aGVuIHRoZSBiZXN0IHNvbHV0aW9uIGlzCit0byBjaGFuZ2UgdGhlIHdyaXRhYmxlIGRpcmVjdG9yeSB0byBhIGJldHRlciBsb2NhdGlvbgorKHNlZSBgU3RhdGUgRGlyZWN0b3JpZXNgXyBmb3IgaG93IHRvIGRvIHRoYXQpLgorCmRpZmYgLS1naXQgYS9Eb2N1bWVudHMvUkVBRE1FLk9wZW5CU0QgYi9Eb2N1bWVudHMvUkVBRE1FLk9wZW5CU0QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGIyOTRiNwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50cy9SRUFETUUuT3BlbkJTRApAQCAtMCwwICsxLDkxIEBACit+fn5+fn5+fn5+fn5+fn5+fgorQlJMVFRZIG9uIE9wZW5CU0QKK35+fn5+fn5+fn5+fn5+fn5+Cis6QXV0aG9yOiBNYXJpbyBMYW5nIDxtbGFuZ0BkZWx5c2lkLm9yZz4KKworLi4gaW5jbHVkZTo6IHByb2xvZ3VlLnJzdAorCitUaGlzIGRvY3VtZW50IGRlc2NyaWJlcyBob3cgdG8gZ2V0IEJSTFRUWSB3b3JraW5nIG9uIGEgcmVjZW50IE9wZW5CU0Qgc3lzdGVtLgorSXQgYXNzdW1lcyB0aGF0IHlvdSdyZSB3b3JraW5nIHdpdGggYSByZWNlbnQgT3BlbkJTRCBpbnN0YWxsYXRpb24gKGUuZy4gMy40KS4KKworU2V0dGluZyB1cCBCUkxUVFkKKz09PT09PT09PT09PT09PT09CisKK1BhdGNoaW5nIGBgc2NyZWVuYGAKKy0tLS0tLS0tLS0tLS0tLS0tLS0KKworU2luY2UgT3BlbkJTRCBkb2Vzbid0IGhhdmUgYSB3YXkgZm9yIHVzZXItc3BhY2UgYXBwbGljYXRpb25zIHRvIGFjY2VzcyB0aGUKK2NvbnRlbnRzIG9mIHRoZSB2aXJ0dWFsIGNvbnNvbGVzLCB3ZSBoYXZlIHRvIHVzZSBgYHNjcmVlbmBgIHRvIG1ha2UgdGhpcworaW5mb3JtYXRpb24gYXZhaWxhYmxlIHRvIEJSTFRUWS4gVGhpcyBhbHNvIG1lYW5zIHRoYXQgeW91IGNhbid0IHVzZSBCUkxUVFkgd2l0aAordGhlIE9wZW5CU0QgdmlydHVhbCBjb25zb2xlcyBkaXJlY3RseSAtIHlvdSBtdXN0IHN0YXJ0IGBgc2NyZWVuYGAgZmlyc3Qgb24gc29tZQordmlydHVhbCB0ZXJtaW5hbCBpbiBvcmRlciB0byBiZSBhYmxlIHRvIHVzZSBCUkxUVFkuCisKK1lvdSBuZWVkIHRvIHBhdGNoIGBgc2NyZWVuYGAgdG8gZW5hYmxlIHRoZSBgYElQQ19TSEFSRURfSU1BR0VgYCBmdW5jdGlvbmFsaXR5Cit0aGF0IEJSTFRUWSByZWxpZXMgb24uIEFzc3VtaW5nIHlvdXIgcG9ydHMgdHJlZSBpcyBpbiBgYC91c3IvcG9ydHNgYCwgeW91J2xsCituZWVkIHRvIGNvcHkgdGhlIGFwcHJvcHJpYXRlIHBhdGNoIGZyb20gYGBicmx0dHkvUGF0Y2hlc2BgIGludG8KK2BgL3Vzci9wb3J0cy9taXNjL3NjcmVlbi9wYXRjaGVzYGAuCisKK09wZW5CU0QgMy40IGNvbWVzIHdpdGggc2NyZWVuLTQuMC4xLiBZb3UgY2FuIGNoZWNrIHRoZSBgYHNjcmVlbmBgIHZlcnNpb24gYnkKK2xvb2tpbmcgaW4gYGAvdXNyL3BvcnRzL21pc2Mvc2NyZWVuL01ha2VmaWxlYGAuCisKK1RoZSBwYXRjaCBmaWxlIHNob3VsZCBiZSBuYW1lZCB3aXRoIHRoZSBwcmVmaXggYGBwYXRjaC1gYCBzbyB0aGF0IHRoZQorYGBzY3JlZW5gYCBidWlsZCBwcm9jZXNzIHdpbGwgZmluZCBpdC4KKworTm93IGNoYW5nZSBpbnRvIGBgL3Vzci9wb3J0cy9taXNjL3NjcmVlbmBgIGFuZCBydW46OgorCisgICBtYWtlCisgICBzdWRvIG1ha2UgaW5zdGFsbAorCitJZiB5b3UndmUgc3VjY2Vzc2Z1bGx5IG1hbmFnZWQgdG8gY29tcGlsZSBhbmQgaW5zdGFsbCB0aGUgYGBzY3JlZW5gYCBwYWNrYWdlLAoreW91IGNhbiBwcm9jZWVkIHRvIGJ1aWxkaW5nIEJSTFRUWS4KKworVGhlcmUncyBhIHNpbXBsZSB0ZXN0IHlvdSBjYW4gdXNlIHRvIHZlcmlmeSBpZiB5b3VyIGBgc2NyZWVuYGAgaW5zdGFsbGF0aW9uCitkb2VzIHN1cHBvcnQgdGhlIGBgSVBDX1NIQVJFRF9JTUFHRWBgIGZlYXR1cmUuIFN0YXJ0IGBgc2NyZWVuYGAsIGFuZCB0aGVuCitleGVjdXRlIHRoZSBjb21tYW5kOjoKKworICAgaXBjcyAtbQorCitZb3Ugc2hvdWxkIHNlZSBvdXRwdXQgdGhhdCBsb29rcyByb3VnaGx5IGxpa2UgdGhpczo6CisKKyAgIFNoYXJlZCBNZW1vcnk6CisgICBUICAgICAgIElEICAgICBLRVkgICAgICAgIE1PREUgICAgICAgT1dORVIgICAgR1JPVVAKKyAgIG0gICAgNjU1MzYgLTExNjA5Njg0MDEgLS1yd2EtLS0tLS0gICAgIHJvb3QgICAgIHJvb3QKKworSWYgeW91IGRvLCB0aGVuIGBgc2NyZWVuYGAgc2VlbXMgdG8gaGF2ZSBiZWVuIGNvbXBpbGVkIHdpdGggdGhlCitgYElQQ19TSEFSRURfSU1BR0VgYCBmZWF0dXJlLgorCitOb3RlIHRoYXQgcHJvcGVyIGludGVncmF0aW9uIG9mIHRoZSBgYElQQ19TSEFSRURfSU1BR0VgYCBmdW5jdGlvbmFsaXR5IHZpYSBhbgorYWRkaXRpb25hbCAiZmxhdm9yIiBmb3IgdGhlIGBgc2NyZWVuYGAgcG9ydCBoYXMgcmVjZW50bHkgYmVlbiBzdWJtaXR0ZWQgdG8gdGhlCitPcGVuQlNEIHBvcnRzIG1haWxpbmcgbGlzdC4gSWYgeW91J3JlIHdvcmtpbmcgd2l0aCB0aGUgQ1ZTIHBvcnRzIHRyZWUsIGl0IG1pZ2h0CitiZSB3b3J0aHdoaWxlIHRvIGNoZWNrIGlmIHRoZSBgYHNobWBgIGZsYXZvciBoYXMgYWxyZWFkeSBiZWVuIGNoZWNrZWQgaW4gYnkKK2ludm9raW5nIHRoZSBmb2xsb3dpbmcgY29tbWFuZCB3aGVuIGluIGBgL3Vzci9wb3J0cy9taXNjL3NjcmVlbmBgOjoKKworICAgbWFrZSBzaG93PUZMQVZPUlMKKworSWYgeW91IHNlZSBgYHNobWBgIGxpc3RlZCBhcyBhIGNob29zYWJsZSBmbGF2b3IsIHNpbXBseSBidWlsZCBgYHNjcmVlbmBgIHdpdGgKK3RoZSBgYEZMQVZPUmBgIGVudmlyb25tZW50IHZhcmlhYmxlIHNldCB0byBgYHNobWBgIC0gZG9uJ3QgYm90aGVyIGNvcHlpbmcgdGhlCitwYXRjaCBmcm9tIEJSTFRUWSdzIHNvdXJjZSB0cmVlLgorCitDb21waWxpbmcgQlJMVFRZCis9PT09PT09PT09PT09PT09CisKK1RvIGNvbXBpbGUgQlJMVFRZLCBkbyB0aGUgZm9sbG93aW5nOjoKKworICAgLi9jb25maWd1cmUKKyAgIGdtYWtlCisgICBzdWRvIGdtYWtlIGluc3RhbGwKKworTm90ZSB0aGF0IGBgZ21ha2VgYCBzaG91bGQgYmUgdXNlZCBpbiBvcmRlciB0byBhdm9pZCBhIHByb2JsZW0gcmVsYXRlZCB0byBCU0QKK2FuZCBHTlUgTWFrZSBpbmNvbXBhdGliaWxpdGllcy4KKworUnVubmluZyBCUkxUVFkKKz09PT09PT09PT09PT09CisKK1lvdSBuZWVkIHRvIGhhdmUgYGBzY3JlZW5gYCBzdGFydGVkIGJlZm9yZSB5b3UgdHJ5IHRvIHJ1biBCUkxUVFkuIEluc2lkZQorYGBzY3JlZW5gYCwgc2ltcGx5IGludm9rZSBCUkxUVFkgYXMgeW91IHdvdWxkIG9uIG90aGVyIHN5c3RlbXMuIE5vdGUgdGhhdCB0aGUKK2ZpcnN0IHNlcmlhbCBwb3J0IGlzIGBgL2Rldi9jdWEwMGBgLgorCitBIHR5cGljYWwgaW52b2NhdGlvbiBjb3VsZCBsb29rIGxpa2UgdGhpczo6CisKKyAgIGJybHR0eSAtYiB0cyAtZCBzZXJpYWw6Y3VhMDAKKwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRzL1JFQURNRS5Qb2xsaW5nIGIvRG9jdW1lbnRzL1JFQURNRS5Qb2xsaW5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBiZTEwMGMKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudHMvUkVBRE1FLlBvbGxpbmcKQEAgLTAsMCArMSw5MyBAQAorfn5+fn5+fgorUG9sbGluZworfn5+fn5+fgorCisuLiBpbmNsdWRlOjogcHJvbG9ndWUucnN0CisKK0FzIG9mIHJlbGVhc2UgNS4wLCBCUkxUVFkgaGFzIGJlZW4gY29udmVydGVkIGZyb20gYmVpbmcgcG9sbGluZy1iYXNlZCB0byBiZWluZyAKK2V2ZW50LWJhc2VkLiBUaGlzIG1lYW5zLCBhbW9uZyBvdGhlciB0aGluZ3MsIHRoYXQgaXQncyBub3cgYWJsZSB0byBiZWNvbWUgCitjb21wbGV0ZWx5IGlkbGUgd2hlbmV2ZXIgaXQgZG9lc24ndCBoYXZlIGFueXRoaW5nIHVzZWZ1bCB0byBkby4gRm9yIGNvbXBhcmlzb24sIAoraXQgZm9ybWVybHkgdXNlZCBhIGh1Z2UsIGNlbnRyYWwsIG1haW4gbG9vcCB3aGljaCB3YXMgcnVuIGZyZXF1ZW50bHkgKGFib3V0IDI1IAordGltZXMgcGVyIHNlY29uZCksIGFuZCB3aGljaCB3YXMgYXdhcmUgb2YsIGFuZCBoYWQgdG8gY2hlY2sgZm9yLCBldmVyeSBzaW5nbGUKK3Rhc2sgdGhhdCBtaWdodCBuZWVkIHRvIGJlIHBlcmZvcm1lZC4KKworSW4gcHJhY3RpY2FsIHRlcm1zLCB0aGlzIGNoYW5nZSwgd2hlbiBjb21wYXJlZCB3aXRoIGhvdyBCUkxUVFkgdXNlZCB0byB3b3JrLCAKK2RlbGl2ZXJzIGF0IGxlYXN0IHRoZSBmb2xsb3dpbmcgc2lnbmlmaWNhbnQgYmVuZWZpdHM6CisKKyogIE5vdGljZWFibHkgaW1wcm92ZWQgcmVzcG9uc2UgdGltZS4gTmVhciBpbnN0YW50IHJlYWN0aW9uIHRvIHNpZ25pZmljYW50IHVzZXIKKyAgIGFuZCBzeXN0ZW0gZXZlbnRzIHJhdGhlciB0aGFuIHdhaXRpbmcgZm9yIHRoZSBuZXh0IHBvbGxpbmcgY3ljbGUgdG8gY2hlY2sKKyAgIGZvciB0aGVtLgorCisqICBNdWNoIGxlc3Mgc3lzdGVtIGxvYWQuIEp1c3QgYSBmZXcsIHNob3J0LWxpdmVkIGJ1cnN0cyBvZiBhY3Rpdml0eSB3aGVuCisgICBhY3R1YWxseSBuZWNlc3NhcnkgcmF0aGVyIHRoYW4gZnJlcXVlbnQsIG11Y2ggbG9uZ2VyLWxpdmVkIGNoZWNraW5nIHRoYXQsCisgICBmYXIgbW9yZSBvZnRlbiB0aGFuIG5vdCwgcmVzdWx0ZWQgaW4gbm90aGluZyBuZWVkaW5nIHRvIGJlIGRvbmUuCisKKyogIFdheSBsZXNzIGJhdHRlcnkgZHJhaW4uIFRoZSBzeXN0ZW0gaXMgbm8gbG9uZ2VyIGZvcmNlZCBlaXRoZXIgdG8gcmVtYWluCisgICBhd2FrZSBvciB0byBjb250aW51YWxseSB3YWtlIHVwIGFmdGVyIGEgcmF0aGVyIGJyaWVmIG5hcC4KKworVGhlcmUgYXJlIGNhc2VzIGluIHdoaWNoIHBvbGxpbmcgaXMgc3RpbGwgYmVpbmcgdXNlZC4gU29tZSBvZiB0aGVzZSB3aWxsCitldmVudHVhbGx5IGJlIHJlc29sdmVkIGJ5IGZ1dHVyZSBjb2RlIGNoYW5nZXMsIHdoaWxlIG90aGVycywgdW5mb3J0dW5hdGVseSwgYXJlCityZXF1aXJlZCBkdWUgdG8gaG9zdCBwbGF0Zm9ybSBsaW1pdGF0aW9ucy4KKworLi4gdG9waWM6OiBNb25pdG9yaW5nIGZvciBTY3JlZW4gVXBkYXRlcworCisgICBUaGlzIHRhc2sgaW52b2x2ZXMgY2hlY2tpbmcgZm9yIHNpemUgY2hhbmdlcywgY29udGVudCBjaGFuZ2VzLCBoaWdobGlnaHRpbmcKKyAgIGNoYW5nZXMsIGN1cnNvciBtb3ZlbWVudCwgZXRjLiBJdCdzIGV2ZW50LWJhc2VkIG9uOgorCisgICAqICBBbmRyb2lkCisKKyAgICogIExpbnV4IHRleHQgY29uc29sZXMgaWYgdGhlIGtlcm5lbCBpcyBhdCBsZWFzdCAyLjYuMzcgKHJlbGVhc2VkIG9uIEphbnVhcnkgNCwKKyAgICAgIDIwMTEpCisKKyAgICogIExpbnV4IGdyYXBoaWNzIGNvbnNvbGVzIG1vbml0b3JlZCB2aWEgQVQtU1BJMi4KKworICAgT24gb3RoZXIgcGxhdGZvcm1zLCB8ZnJlcXVlbnQgcG9sbGluZ3wgaXMgdXNlZC4KKworLi4gdG9waWM6OiBNb25pdG9yaW5nIGZvciBTZXJpYWwgSW5wdXQKKworICAgVGhpcyB0YXNrIGlzIGV2ZW50LWJhc2VkIG9uOgorCisgICAqICBMaW51eAorCisgICBPbiBvdGhlciBwbGF0Zm9ybXMsIHxmcmVxdWVudCBwb2xsaW5nfCBpcyB1c2VkLgorCisuLiB0b3BpYzo6IE1vbml0b3JpbmcgZm9yIFVTQiBJbnB1dAorCisgICBUaGlzIHRhc2sgaXMgZXZlbnQtYmFzZWQgb246CisKKyAgICogIExpbnV4CisKKyAgIE9uIG90aGVyIHBsYXRmb3JtcywgfGZyZXF1ZW50IHBvbGxpbmd8IGlzIHVzZWQuCisKKy4uIHRvcGljOjogTW9uaXRvcmluZyBmb3IgQmx1ZXRvb3RoIElucHV0CisKKyAgIFRnaGlzIHRhc2sgaXMgZXZlbnQtYmFzZWQgb246CisKKyAgICogIEFuZHJvaWQKKworICAgKiAgTGludXgKKworICAgT24gb3RoZXIgcGxhdGZvcm1zLCB8ZnJlcXVlbnQgcG9sbGluZ3wgaXMgdXNlZC4KKworLi4gdG9waWM6OiBTdGFydGluZyB0aGUgQnJhaWxsZSBEcml2ZXIKKworICAgT24gYWxsIHBsYXRmb3JtcywgfHBlcmlvZGljIHJldHJ5aW5nfCBpcyB1c2VkLgorCisuLiB0b3BpYzo6IFN0YXJ0aW5nIHRoZSBTcGVlY2ggRHJpdmVyCisKKyAgIE9uIGFsbCBwbGF0Zm9ybXMsIHxwZXJpb2RpYyByZXRyeWluZ3wgaXMgdXNlZC4KKworLi4gdG9waWM6OiBTdGFydGluZyB0aGUgU2NyZWVuIERyaXZlcgorCisgICBPbiBhbGwgcGxhdGZvcm1zLCB8cGVyaW9kaWMgcmV0cnlpbmd8IGlzIHVzZWQuCisKKy4uIHRvcGljOjogU3RhcnRpbmcgdGhlIEtleWJvYXJkIE1vbml0b3IKKworICAgT24gYWxsIHBsYXRmb3JtcywgfHBlcmlvZGljIHJldHJ5aW5nfCBpcyB1c2VkLgorCisuLiB0b3BpYzo6IENyZWF0aW5nIHRoZSBQSUQgRmlsZQorCisgICBPbiBhbGwgcGxhdGZvcm1zLCB8cGVyaW9kaWMgcmV0cnlpbmd8IGlzIHVzZWQuCisKKy4uIHxmcmVxdWVudCBwb2xsaW5nfCByZXBsYWNlOjogZnJlcXVlbnQgcG9sbGluZyAoYWJvdXQgZXZlcnkgNDAgbWlsbGlzZWNvbmRzKQorLi4gfHBlcmlvZGljIHJldHJ5aW5nfCByZXBsYWNlOjogcGVyaW9kaWMgcmV0cnlpbmcgKGFib3V0IGV2ZXJ5IGZpdmUgc2Vjb25kcykKZGlmZiAtLWdpdCBhL0RvY3VtZW50cy9SRUFETUUuUHJpdmFjeVBvbGljeSBiL0RvY3VtZW50cy9SRUFETUUuUHJpdmFjeVBvbGljeQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYTFlODAyCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRzL1JFQURNRS5Qcml2YWN5UG9saWN5CkBAIC0wLDAgKzEsODEgQEAKK35+fn5+fn5+fn5+fn5+CitQcml2YWN5IFBvbGljeQorfn5+fn5+fn5+fn5+fn4KKworLi4gaW5jbHVkZTo6IHByb2xvZ3VlLnJzdAorCitHZW5lcmFsIFN0YXRlbWVudHMKKz09PT09PT09PT09PT09PT09PQorCitCUkxUVFkgaXMgYSBzY3JlZW4gcmVhZGVyIGZvciBicmFpbGxlIHVzZXJzLgorSXQgZG9lc24ndCBpbnRyb2R1Y2UgYW55IGNvbnRlbnQgb2YgaXRzIG93bgorLSBpdCBqdXN0IHJlbmRlcnMsIGluIGJyYWlsbGUsIHdoYXRldmVyIGlzIG9uIHRoZSB1c2VyJ3Mgc2NyZWVuLgorSXQncyBqdXN0IGFzIHNhZmUgdG8gdXNlIGJ5IGFueW9uZSBvZiBhbnkgYWdlLCB0aGVyZWZvcmUsCithcyB0aGUgaG9zdCAoY29tcHV0ZXIsIHBob25lLCB0YWJsZXQsIGV0YykgaXRzZWxmIGlzLgorCitXZSdyZSB1bmF3YXJlIG9mIGFueSBsYXcgYW55d2hlcmUgd2hpY2ggd291bGQgY29uc2lkZXIgaXQgaW5hcHByb3ByaWF0ZSBmb3IgYSAgY2hpbGQgdG8gYmUgdXNpbmcgQlJMVFRZLgorSW4gZmFjdCwgd2UgYmVsaWV2ZSB0aGF0IGJsaW5kIGNoaWxkcmVuIHNob3VsZCBiZSBlbmNvdXJhZ2VkIHRvIHVzZSBpdAorYmVjYXVzZSB3ZSBiZWxpZXZlIHRoYXQgbGl0ZXJhY3ksIGkuZS4gdGhlIGFiaWxpdHkgdG8gcmVhZCBhbmQgd3JpdGUsCitpcyBqdXN0IGFzIGltcG9ydGFudCBmb3IgdGhlbSBhcyBzcGVlY2ggaXMuCisKK0JSTFRUWSBkb2Vzbid0IGZpbHRlciB0aGUgc2NyZWVuJ3MgY29udGVudC4KK0FueSBjb250ZW50IHRoYXQgY2FuIGJlIHJlYWQgb24gdGhlIHNjcmVlbiBieSBhIHNpZ2h0ZWQgY2hpbGQKK2lzIHByZXNlbnRlZCBpbiBicmFpbGxlIGFuZCwgdGhlcmVmb3JlLCBpcyBqdXN0IGFzIHJlYWRhYmxlIGJ5IGEgYmxpbmQgY2hpbGQuCitJdCdzIHRoZSByZXNwb25zaWJpbGl0eSBvZiB0aGUgZGV2ZWxvcGVycyBvZiBhbnkgZ2l2ZW4gcHJvZ3JhbSwgYXBwLCB3ZWJzaXRlLCBldGMKK3RvIGNvbnRyb2wgYWNjZXNzIHRvIGFueSBxdWVzdGlvbmFibGUgb3IgcmVwcmVoZW5zaWJsZSBjb250ZW50Cit0aGF0IHRoZXkgZmVlbCB0aGUgbmVlZCB0byBwcmVzZW50LgorTGlrZXdpc2UsIGlmIGEgcGFyZW50IGhhcyBhbnkgY29uY2VybnMgaW4gdGhpcyBhcmVhCit0aGVuIGhlL3NoZSBzaG91bGQgbWFrZSB1c2Ugb2YgYW55IGFwcGxpY2FibGUgcGFyZW50YWwgY29udHJvbHMKK3RoYXQgdGhlIGhvc3QgcGxhdGZvcm0gb2ZmZXJzLgorCitJZiB0aGUgYnJhaWxsZSBkZXZpY2UgaGFzIGEga2V5Ym9hcmQgdGhlbiBpdCBjYW4gYmUgdXNlZCBmb3IgdHlwaW5nLgorVGhpcyBuZWNlc3NhcmlseSBtZWFucyB0aGF0IEJSTFRUWSBpcyB0cmFuc2llbnRseSBhd2FyZSBvZgorYW55IGluZm9ybWF0aW9uIHRoYXQncyBiZWluZyB0eXBlZCwKK2luY2x1ZGluZyBzZW5zaXRpdmUgaW5mb3JtYXRpb24gc3VjaCBhcyBwYXNzd29yZHMuCitUaGlzIGluZm9ybWF0aW9uIGlzIG9ubHkgcmV0YWluZWQgbG9uZyBlbm91Z2ggZm9yLAorYW5kIGV4Y2x1c2l2ZWx5IGZvciB0aGUgcHVycG9zZSBvZiwKK2ZvcndhcmRpbmcgaXQgdGhyb3VnaCB0byB0aGUgaG9zdCBhcyB0eXBlZCBpbnB1dC4KKworSW4gYWRkaXRpb24gdG8gcHJpbWFyaWx5IGJlaW5nIGEgc2NyZWVuIHJlYWRlciBmb3IgYnJhaWxsZSB1c2VycywKK0JSTFRUWSBhbHNvIGNvbnRhaW5zIHN1cHBvcnQgZm9yIHJldmlld2luZyB0aGUgc2NyZWVuJ3MgY29udGVudCB2aWEgc3BlZWNoLgorVW5saWtlIGJyYWlsbGUsIHdoZXJlIGl0J3MgaW4gZGlyZWN0IGNvbnRyb2wgb2YgdGhlIHJlbmRlcmluZywKK2EgdGhpcmQtcGFydHkgVFRTIChUZXh0IHRvIFNwZWVjaCkgZW5naW5lIGlzIHVzZWQgdG8gdHJhbnNsYXRlIHNjcmVlbiBjb250ZW50IGludG8gc3BlZWNoLgorV2UgaGF2ZSBubyBjb250cm9sIG92ZXIgdGhlIHByaXZhY3kgcG9saWNpZXMgdGhhdCBhcHBseSB0byBhbnkgb2YgdGhlIHRoaXJkLXBhcnR5IFRUUyBlbmdpbmVzLgorSWYgYSB1c2VyIHdpc2hlcyB0byB1c2UgdGhlIHNwZWVjaCBjYXBhYmlsaXRpZXMgb2YgQlJMVFRZCit0aGVuIGhlL3NoZSBzaG91bGQgYmVjb21lIGZhbWlsaWFyIHdpdGggdGhlIHByaXZhY3kgcG9saWN5IG9mIHRoZSBUVFMgYmVpbmcgdXNlZC4KKworQlJMVFRZIGlzIGFuIG9wZW4gc291cmNlIHByb2plY3QuCitTdXBwbGllcnMgKG1hbnVmYWN0dXJlcnMsIHZlbmRvdXJzLCBkaXN0cmlidXRvcnMsIGV0YykKK3Nob3VsZCBiZSBhd2FyZSB0aGF0IGFueSBjb2RlIGluIGFueSBvZiBpdHMgZHJpdmVycwordGhhdCdzIG5lY2Vzc2FyeSBmb3IgdGhlIHN1Y2Nlc3NmdWwgYW5kIGVmZmVjdGl2ZSBvcGVyYXRpb24gb2YgYSBicmFpbGxlIGRldmljZQoraGFzIG5lY2Vzc2FyaWx5IGJlY29tZSBwdWJsaWMuCitBbGwgb3RoZXIgaW5mb3JtYXRpb24gdGhhdCB3ZSAoQlJMVFRZJ3MgZGV2ZWxvcGVycykgbGVhcm4gb3IgYmVjb21lIGF3YXJlIG9mCisoZnV0dXJlIHBsYW5zLCBwcm9wcmlldGFyeSBmZWF0dXJlcywgZXRjKQord2hpbGUgaW4gZGlzY3Vzc2lvbnMgd2l0aCBvciBieSByZWFkaW5nIGRvY3VtZW50YXRpb24gcHJvdmlkZWQgYnkgYW55IHN1cHBsaWVyCitpc24ndCBzaGFyZWQgd2l0aCB0aGUgcHVibGljLgorCitCUkxUVFkgbmVpdGhlciByZXF1ZXN0cyBub3IgaW4gYW55IG90aGVyIHdheSB0cmllcyB0byBvYnRhaW4KK2luZm9ybWF0aW9uIGFib3V0IGl0cyB1c2Vycy4KK0Fsc28sIG5vIGluZm9ybWF0aW9uIGFib3V0IGl0cyB1c2VycywgdGhlaXIgaG9zdCBkZXZpY2VzLCBldGMKK3RoYXQgQlJMVFRZIGlzIGVpdGhlciBhY3RpdmVseSBvciBwYXNzaXZlbHkgYXdhcmUgb2YKK2lzIHNoYXJlZCB3aXRoIG90aGVycyAoeWVzLCB0aGlzIGluY2x1ZGVzIG5vdCBldmVuIHdpdGggdXMpLgorCitXaGlsZSBCUkxUVFkgZG9lc24ndCB0cmFuc21pdCBhbnkgZGF0YSwKK2l0IGRvZXMgcHJlc2VydmUgdGhlIGZvbGxvd2luZyBhcyBsb2NhbCBkYXRhOgorCisqIFVzZXIgY29uZmlndXJhdGlvbiAoYWxzbyBrbm93biBhcyBzZXR0aW5ncyBvciBwcmVmZXJlbmNlcykuCisqIE9wZXJhdGlvbmFsIGxvZ3MgdGhhdCwgYnkgZGVmYXVsdCwgZG9uJ3QgY29udGFpbiBzZW5zaXRpdmUgZGF0YSBsaWtlIHNjcmVlbiBjb250ZW50LCB0eXBlZCBpbnB1dCwgZXRjLgorCitJZiB3ZSwgQlJMVFRZJ3MgZGV2ZWxvcGVycywgd291bGQgbGlrZSB0byBoYXZlIGEgbG9vayBhdAorZGVidWdnaW5nIGluZm9ybWF0aW9uIGluIG9yZGVyIHRvIGZpbmQgdGhlIGNhdXNlIG9mIGEgcHJvYmxlbQordGhlbiB3ZSBleHBsYWluIHRvIHRoZSB1c2VyIHdoaWNoIG9mIEJSTFRUWSdzIGxvZyBjYXRlZ29yaWVzIHdvdWxkIG5lZWQgdG8gYmUgZW5hYmxlZAorYW5kIHdoYXQgc2Vuc2l0aXZlIGluZm9ybWF0aW9uIHdvdWxkLCB0aGVyZWZvcmUsIGJlY29tZSB2aXNpYmxlIHRvIHVzLgorSXQncyBzdGlsbCBoaXMvaGVyIG93biBkZWNpc2lvbiB0byBlbmFibGUgdGhlIGxvZ2dpbmcgYW5kIHRvIHNlbmQgdGhlIGxvZyB0byB1cy4KKworQW5kcm9pZAorPT09PT09PQorCitCUkxUVFkgcmVxdWVzdHMgdGhlIGZvbGxvd2luZyBBbmRyb2lkIHBlcm1pc3Npb25zOgorCisuLiBpbmNsdWRlOjogYW5kcm9pZC1wZXJtaXNzaW9ucy5yc3QKKwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRzL1JFQURNRS5Qcm9maWxlcyBiL0RvY3VtZW50cy9SRUFETUUuUHJvZmlsZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjViNDY2YwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50cy9SRUFETUUuUHJvZmlsZXMKQEAgLTAsMCArMSwxNDUgQEAKK35+fn5+fn5+CitQcm9maWxlcworfn5+fn5+fn4KKworLi4gaW5jbHVkZTo6IHByb2xvZ3VlLnJzdAorCitEZXNjcmlwdGlvbgorPT09PT09PT09PT0KKworQSBwcm9maWxlIGlzIGFuIGFjdGl2YXRhYmxlIGdyb3VwIG9mIHNldHRpbmdzIHdoaWNoIGV4cGxpY2l0bHkgb3ZlcnJpZGUgdGhlIAorb25lcyB0aGF0IHdlcmUgZXN0YWJsaXNoZWQgdmlhIGNvbW1hbmQgbGluZSBvcHRpb25zLCB0aGUgY29uZmlndXJhdGlvbiBmaWxlIAorKGBgYnJsdHR5LmNvbmZgYCksIHRoZSBwcmVmZXJlbmNlcyBmaWxlIChgYGJybHR0eS5wcmVmc2BgKSwgZXRjIHdoZW4gQlJMVFRZCit3YXMgaW52b2tlZC4gUHJvZmlsZXMgbXVzdCBiZSBwbGFjZWQgaW4gdGhlIGBgL2V0Yy9icmx0dHkvUHJvZmlsZXMvYGAKK2RpcmVjdG9yeSAoc2VlIHxSRUFETUUuQ3VzdG9taXplfCBmb3IgbW9yZSBkZXRhaWxzKS4KKworQSBwcm9maWxlIG11c3QgYmUgZW5jb2RlZCBpbiBVVEYtOC4gQmxhbmsgbGluZXMgYXJlIGlnbm9yZWQuIElmIHRoZSBmaXJzdAorbm9uLXdoaXRlc3BhY2UgY2hhcmFjdGVyIG9mIGEgbGluZSBpcyBgYCNgYCB0aGVuIHRoYXQgbGluZSBpcyBhIGNvbW1lbnQgYW5kIGlzCitpZ25vcmVkLiBUaGUgYFN0YW5kYXJkIERpcmVjdGl2ZXNgXyBhcmUgc3VwcG9ydGVkLiBBbGwgb3RoZXIgbGluZXMgc3BlY2lmeSB0aGUKK3NldHRpbmdzIHRoYXQgYXJlIHRvIGJlIG92ZXJyaWRkZW4sIGFuZCBtdXN0IGJlIGluIHRoZSBmb3JtOgorCisuLiBwYXJzZWQtbGl0ZXJhbDo6ICpuYW1lKiAqdmFsdWUqCisKK0VhY2ggdHlwZSBvZiBwcm9maWxlIGhhcyB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM6CisKKyogIEEgc3BlY2lmaWMgZ3JvdXAgb2Ygc2V0dGluZ3MgdGhhdCBpdCBjYW4gb3ZlcnJpZGUuCisqICBJdHMgb3duIGZpbGUgZXh0ZW5zaW9uLgorKiAgSXRzIG93biBzZWxlY3RvciB3aXRoaW4gQlJMVFRZJ3MgUHJvZmlsZXMgc3VibWVudS4KKyogIEl0cyBvd24gU0VUXypfUFJPRklMRSBjb21tYW5kIGZvciBkaXJlY3Qgc2VsZWN0aW9uIChzZWUKKyAgIGBQcm9maWxlIFNlbGVjdGlvbmBfKS4KKworU3VwcG9ydGVkIFByb2ZpbGUgVHlwZXMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0xhbmd1YWdlIFByb2ZpbGVzCit+fn5+fn5+fn5+fn5+fn5+fgorCitBIGxhbmd1YWdlIHByb2ZpbGUgbXVzdCBoYXZlIHRoZSBgYC5scGZgYCBmaWxlIGV4dGVuc2lvbi4gSXQgY2FuIG92ZXJyaWRlIHRoZSAKK2ZvbGxvd2luZyBzZXR0aW5nczoKKworKiAgbG9jYWxlCisqICBzcGVlY2gtZHJpdmVyCisqICBzcGVlY2gtcGFyYW1ldGVycworKiAgdGV4dC10YWJsZSAKKyogIGNvbnRyYWN0aW9uLXRhYmxlCisKK0ZvciBleGFtcGxlLCBhIHByb2ZpbGUgZm9yIHRoZSBHZXJtYW4gbGFuZ3VhZ2UgbWlnaHQgbG9vayBsaWtlIHRoaXM6OgorCisgICBsb2NhbGUgZGVfREUuVVRGLTgKKyAgIHNwZWVjaC1kcml2ZXIgZXMKKyAgIHNwZWVjaC1wYXJhbWV0ZXJzIHZvaWNlPWRlLG1heHJhdGU9MzAwCisgICB0ZXh0LXRhYmxlIGRlCisgICBjb250cmFjdGlvbi10YWJsZSBkZS1nMgorCitBbGwgb2YgdGhlIHNwZWVjaCBkcml2ZXIgcGFyYW1ldGVycyBtdXN0IGJlIHNwZWNpZmllZCBvbiBhIHNpbmdsZSBsaW5lLCBhbmQgYmUKK3NlcGFyYXRlZCBmcm9tIG9uZSBhbm90aGVyIGJ5IGEgY29tbWEgKGBgLGBgKS4KKworUHJvZmlsZSBTZWxlY3Rpb24KKy0tLS0tLS0tLS0tLS0tLS0tCisKK0VhY2ggdHlwZSBvZiBwcm9maWxlIGhhcyBhIHNlbGVjdG9yIHdpdGhpbiBCUkxUVFkncyBQcm9maWxlcyBzdWJtZW51LiBUaGUKK3NlbGVjdG9yIGZvciBhIGdpdmVuIHByb2ZpbGUgdHlwZSBhbGxvd3MgZm9yIHNldHRpbmcgdGhhdCB0eXBlIG9mIHByb2ZpbGUKK2VpdGhlciB0byBgYG9mZmBgICh3aGljaCBtZWFucyAibm8gcHJvZmlsZSIpIG9yIHRvIGFueSBvZiB0aGUgZmlsZXMgaW4gdGhlIAorYGAvZXRjL2JybHR0eS9Qcm9maWxlcy9gYCBkaXJlY3Rvcnkgd2hpY2ggaGF2ZSB0aGUgZmlsZSBleHRlbnNpb24gZm9yIHRoYXQgdHlwZQorb2YgcHJvZmlsZS4gVGhlIGZpbGUgbmFtZXMgYXJlIHNvcnRlZCBhbHBoYWJldGljYWxseS4KKworSWYgeW91J2QgbGlrZSB0byBzZWxlY3QgYSBwcm9maWxlIGRpcmVjdGx5IChyYXRoZXIgdGhhbiB1c2UgdGhlIFByb2ZpbGVzIAorc3VibWVudSkgdGhlbiB5b3UgY2FuIGRlZmluZSBrZXkgYmluZGluZ3MgZm9yIHRoZSBhcHByb3ByaWF0ZSBgYFNFVF8qX1BST0ZJTEVgYCAKK2NvbW1hbmQuIEZvciBleGFtcGxlLCBpZiB5b3UnZCBsaWtlIHRvIGRpcmVjdGx5IHNlbGVjdCB5b3VyIGxhbmd1YWdlIHByb2ZpbGUgCit0aGVuIHlvdSdkIGRlZmluZSBiaW5kaW5ncyBmb3IgdGhlIGBgU0VUX0xBTkdVQUdFX1BST0ZJTEVgYCBjb21tYW5kLiBZb3UgbWF5CithZGQgeW91ciBiaW5kaW5ncyBlaXRoZXIgdG8gdGhlIGtleWJvYXJkIHRhYmxlIHRoYXQgeW91J3JlIHVzaW5nIG9yIHRvIHRoZSBrZXkgCit0YWJsZSBmb3IgeW91ciBicmFpbGxlIGRldmljZS4gRXhjZXB0IGZvciBhIGZldyBleGFtcGxlcyBiZWxvdywgZXhhY3RseSBob3cgdG8gCitkbyB0aGlzIGlzIGJleW9uZCB0aGUgc2NvcGUgb2YgdGhpcyBkb2N1bWVudCAoc2VlIHxSRUFETUUuS2V5VGFibGVzfCBmb3IKK2RldGFpbHMpLgorCitPbmUgYXBwcm9hY2ggaXMgdG8gZGVmaW5lIGEgc2luZ2xlIGJpbmRpbmcgd2hpY2ggaW52b2x2ZXMgYSByb3V0aW5nIGtleS4gRm9yIAorZXhhbXBsZTo6CisKKyAgIGJpbmQgS2V5MStLZXkyK1JvdXRpbmdLZXkgU0VUX0xBTkdVQUdFX1BST0ZJTEUKKworVXNpbmcgdGhpcyBwYXJhZGlnbSwgdGhlIGxlZnRtb3N0IHJvdXRpbmcga2V5IG1lYW5zIHRvIHVzZSBubyBsYW5ndWFnZSBwcm9maWxlLCAKK2FuZCB0aGUgbmV4dCBmZXcgcm91dGluZyBrZXlzIHNlbGVjdCBlYWNoIG9mIHlvdXIgbGFuZ3VhZ2UgcHJvZmlsZXMgaW4gdGhlIHNhbWUgCitvcmRlciBhcyB0aGV5IGFwcGVhciB3aXRoaW4gdGhlIExhbmd1YWdlIHNlbGVjdG9yIG9mIHRoZSBQcm9maWxlcyBzdWJtZW51LgorCitBbm90aGVyIGFwcHJvYWNoIGlzIHRvIGRlZmluZSBhIHNwZWNpZmljIGJpbmRpbmcgZm9yIGVhY2ggbGFuZ3VhZ2UgcHJvZmlsZS4gRm9yIAorZXhhbXBsZTo6CisKKyAgIGJpbmQgS2V5MStLZXkyIFNFVF9MQU5HVUFHRV9QUk9GSUxFKzAKKyAgIGJpbmQgS2V5MStLZXkzIFNFVF9MQU5HVUFHRV9QUk9GSUxFKzEKKyAgIGJpbmQgS2V5MitLZXkzIFNFVF9MQU5HVUFHRV9QUk9GSUxFKzIKKyAgIGJpbmQgS2V5MStLZXkyK0tleTMgU0VUX0xBTkdVQUdFX1BST0ZJTEUrMworCitVc2luZyB0aGlzIHBhcmFkaWdtLCB0aGUgYmluZGluZyBmb3IgYGArMGBgIChLZXkxK0tleTIpIG1lYW5zIHRvIHVzZSBubworbGFuZ3VhZ2UgcHJvZmlsZSwgYW5kIHRoZSBiaW5kaW5ncyBmb3IgYGArMWBgIChLZXkxK0tleTMpLCBgYCsyYGAgKEtleTIrS2V5MyksCitldGMgc2VsZWN0IGVhY2ggb2YgeW91ciBsYW5ndWFnZSBwcm9maWxlcyBpbiB0aGUgc2FtZSBvcmRlciBhcyB0aGV5IGFwcGVhcgord2l0aGluIHRoZSBMYW5ndWFnZSBzZWxlY3RvciBvZiB0aGUgUHJvZmlsZXMgc3VibWVudS4KKworQSBwcmFjdGljYWwgYXBwcm9hY2gsIHdoaWNoIHdvdWxkIG1ha2UgaXQgZWFzeSB0byByZW1lbWJlciB0aGUgYmluZGluZ3MsIG1pZ2h0IAorYmUgdG8gdXNlIGEga2V5Ym9hcmQgdGFibGUsIGFuZCB0byB1c2UgYSBzaW1wbGUga2V5IGNvbWJpbmF0aW9uIHBsdXMgYSAKK21lYW5pbmdmdWwgbGV0dGVyIGZvciBlYWNoIGxhbmd1YWdlIG5hbWUuIExldCdzIHNheSB0aGF0IHlvdXIgcHJpbWFyeSBsYW5ndWFnZSAKK2lzIEVuZ2xpc2gsIGFuZCB0aGF0IHlvdSBhbHNvIHVzZSBGcmVuY2ggYW5kIEdlcm1hbi4gSW4gdGhpcyBjYXNlLCB5b3VyIGRlZmF1bHQgCitzZXR0aW5ncyAobm8gcHJvZmlsZSkgd291bGQgYmUgZm9yIEVuZ2xpc2gsIGFuZCB5b3UnZCBjcmVhdGUgZnJlbmNoLmxwZiBmb3IgCitGcmVuY2ggYW5kIGdlcm1hbi5scGYgZm9yIEdlcm1hbi4gWW91IGNvdWxkIHRoZW4gZGVmaW5lIGEgc2V0IG9mIGJpbmRpbmdzIHdoaWNoIAordXNlIGBgZWBgIGZvciBFbmdsaXNoLCBgYGZgYCBmb3IgRnJlbmNoLCBhbmQgYGBnYGAgZm9yIEdlcm1hbi4gRm9yIGV4YW1wbGU6OgorCisgICBiaW5kIFNoaWZ0TGVmdCtTaGlmdFJpZ2h0KyFlIFNFVF9MQU5HVUFHRV9QUk9GSUxFKzAKKyAgIGJpbmQgU2hpZnRMZWZ0K1NoaWZ0UmlnaHQrIWYgU0VUX0xBTkdVQUdFX1BST0ZJTEUrMQorICAgYmluZCBTaGlmdExlZnQrU2hpZnRSaWdodCshZyBTRVRfTEFOR1VBR0VfUFJPRklMRSsyCisKK1RoZSBgYCsxYGAgYmluZGluZyB3b3VsZCBhY3RpdmF0ZSBgYGZyZW5jaC5scGZgYCBhbmQgdGhlIGBgKzJgYCBiaW5kaW5nIHdvdWxkCithY3RpdmF0ZSBgYGdlcm1hbi5scGZgYCBiZWNhdXNlIHRoYXQncyBob3cgdGhlIHByb2ZpbGUgbmFtZSBsaXN0IHdvdWxkIGJlCitzb3J0ZWQuIElmLCBob3dldmVyLCB5b3UgY2hvb3NlIHRvIHVzZSB0aGUgbmF0aXZlIGxhbmd1YWdlIG5hbWVzIHRoZW4geW91J2QKK2hhdmUgYGBkZXV0c2NoLmxwZmBgIGZvciBHZXJtYW4gYW5kIGBgZnJhbsOnYWlzLmxwZmBgIGZvciBGcmVuY2guIEluIHRoaXMgY2FzZSwKK3lvdSdkIG5lZWQgYSBkaWZmZXJlbnQgc2V0IG9mIGJpbmRpbmdzIGJlY2F1c2UgYGBkZXV0c2NoLmxwZmBgIChmb3IgR2VybWFuKQorc29ydHMgYmVmb3JlIGBgZnJhbsOnYWlzLmxwZmBgIChmb3IgRnJlbmNoKTo6CisKKyAgIGJpbmQgU2hpZnRMZWZ0K1NoaWZ0UmlnaHQrIWUgU0VUX0xBTkdVQUdFX1BST0ZJTEUrMAorICAgYmluZCBTaGlmdExlZnQrU2hpZnRSaWdodCshZCBTRVRfTEFOR1VBR0VfUFJPRklMRSsxCisgICBiaW5kIFNoaWZ0TGVmdCtTaGlmdFJpZ2h0KyFmIFNFVF9MQU5HVUFHRV9QUk9GSUxFKzIKKworV2hlbiBhZGRpbmcgdGhlIGJpbmRpbmdzIHRvIGEga2V5IHRhYmxlLCB0aGV5IHNob3VsZCBtb3N0IGxpa2VseSBiZSBkZWZpbmVkIAord2l0aGluIHRoZSBkZWZhdWx0IGNvbnRleHQuIFRoZSBiZXN0IHdheSB0byBlbnN1cmUgdGhpcyBpcyB0byBhZGQgdGhlbSBhdCB0aGUgCit2ZXJ5IGVuZCBvZiB0aGUgYXBwcm9wcmlhdGUga2V5IHRhYmxlIG9yIHN1YnRhYmxlLCBhbmQgdG8gYWRkIHRoZSBgYGNvbnRleHQgCitkZWZhdWx0YGAgc3RhdGVtZW50IGp1c3QgYmVmb3JlIHRoZW0uIEZvciBleGFtcGxlOjoKKworICAgY29udGV4dCBkZWZhdWx0CisgICBiaW5kIEtleTErUm91dGluZ0tleSBTRVRfTEFOR1VBR0VfUFJPRklMRQorCitJZiB5b3UnZCBsaWtlIHlvdXIgYWRkaXRpb25hbCBiaW5kaW5nIGRlZmluaXRpb25zIHRvIHN1cnZpdmUgYSBCUkxUVFkgcmVpbnN0YWxsCit0aGVuIHlvdSBzaG91bGQgdXNlIGEgY3VzdG9taXplZCBrZXkgdGFibGUgb3Igc3VidGFibGUgKHNlZSB8UkVBRE1FLkN1c3RvbWl6ZXwpCit0aGF0IGluY2x1ZGVzIHRoZSBwcm92aWRlZCBvbmUsIGFuZCB0aGVuIGRlZmluZXMgeW91ciBhZGRpdGlpb25hbCBiaW5kaW5ncy4KK0xldCdzIHNheSB0aGF0IHlvdSdkIGxpa2UgdG8gYWRkIHlvdXIgYmluZGluZ3MgdG8gdGhlIGBgbGFwdG9wYGAga2V5Ym9hcmQgdGFibGUKKyhgYGxhcHRvcC5rdGJgYCkuIENyZWF0ZSBhIGZpbGUgd2l0aCB0aGUgc2FtZSBuYW1lIC0gYGBsYXB0b3Aua3RiYGAgLSBpbiB0aGUKK2BgL2V0Yy94ZGcvYnJsdHR5L2BgIGRpcmVjdG9yeSwgYW5kLCB3aXRoIGFuIGVkaXRvciwgbWFrZSBpdCBsb29rIGxpa2UgdGhpczo6CisKKyAgIGluY2x1ZGUgbGFwdG9wLmt0YgorICAgY29udGV4dCBkZWZhdWx0CisgICBiaW5kIEtleTErS2V5MitSb3V0aW5nS2V5IFNFVF9MQU5HVUFHRV9QUk9GSUxFCisKK1N0YW5kYXJkIERpcmVjdGl2ZXMKKz09PT09PT09PT09PT09PT09PT0KKworLi4gaW5jbHVkZTo6IG5lc3RpbmctZGlyZWN0aXZlcy5yc3QKKy4uIGluY2x1ZGU6OiB2YXJpYWJsZS1kaXJlY3RpdmVzLnJzdAorLi4gaW5jbHVkZTo6IGNvbmRpdGlvbi1kaXJlY3RpdmVzLnJzdAorCmRpZmYgLS1naXQgYS9Eb2N1bWVudHMvUkVBRE1FLlN0b3cgYi9Eb2N1bWVudHMvUkVBRE1FLlN0b3cKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGRiMjZjYQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50cy9SRUFETUUuU3RvdwpAQCAtMCwwICsxLDEyNyBAQAorfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorTWFuYWdpbmcgQlJMVFRZIHdpdGggU3Rvdworfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorOkF1dGhvcjogQiBEYWl4Cis6RGF0ZTogMjAwMy0wOS0xMAorCisuLiBpbmNsdWRlOjogcHJvbG9ndWUucnN0CisKK1B1cnBvc2UKKz09PT09PT0KKworQlJMVFRZIGlzIGEgY3JpdGljYWwgc29mdHdhcmUgZm9yIHRob3NlIHdobyByZWx5IG9uIGl0IHRvIGFjY2VzcyB0aGVpciBib3guCitVcGdyYWRpbmcgc3VjaCBhIHRvb2wgY2FuJ3QgYmUgZG9uZSB3aXRob3V0IHBheWluZyBzb21lIHNwZWNpYWwgYXR0ZW50aW9uLgorCitXaGF0IHdpbGwgYmUgZXhwbGFpbmVkIGhlcmUgaXMgaG93IHRvIGtlZXAgYGAvdXNyL2xvY2FsL2Jpbi9icmx0dHlgYCB1cCB0byBkYXRlCit3aXRob3V0IHJlbW92aW5nIG9sZCB2ZXJzaW9ucy4gIFdlIGRlY2lkZSB0byBwdXQgQlJMVFRZIGluIGBgL3Vzci9sb2NhbGBgIGFzCit3ZSBkb24ndCB3YW50IHRvIGJyZWFrIGZpbGVzeXN0ZW0gcm9vdCBkaXN0cmlidXRpb24gKGkuZS4gYGAvYmluL2JybHR0eWBgCitzaG91bGQgb25seSBjb21lIGZyb20gYSBwYWNrYWdlZCB2ZXJzaW9uIG9mIEJSTFRUWSBmb3IgeW91ciBkaXN0cmlidXRpb24uIElmCit5b3UgaW5zdGFsbCBzb2Z0d2FyZSBpbiByZXNwZWN0IHdpdGggdGhpcyBydWxlLCB5b3UnZCBpbnN0YWxsIGl0IGluCitgYC91c3IvbG9jYWxgYCkuIEFsc28sIHdlIHdhbnQgbm90IHRvIGhhdmUgdG8ga2VlcCBzb3VyY2UgZmlsZXMgdG8gYmUgYWJsZSB0bworcmVtb3ZlIHRoaW5ncyBjbGVhbmx5LiBBZnRlciBpbnN0YWxsaW5nIGEgc29mdHdhcmUsIHlvdSBzaG91bGRuJ3QgaGF2ZSB0byByZWx5CitvbiBhIGJ5LXNvZnR3YXJlIHVuaW5zdGFsbGF0aW9uIHN1aXRlLgorCitZb3Ugc2hvdWxkIGluc3RhbGwgU3RvdyB0byBiZSBhYmxlIHRvIHJ1biBpdCBhbmQgdG8gZmluZCBtb3JlIGRldGFpbHMgYWJvdXQgaXQuCitJdCdzIGEgY29tbW9uIHV0aWxpdHk6CisKK09uIERlYmlhbjoKKyAgIGBgYXB0LWdldCBpbnN0YWxsIHN0b3dgYAorCitPbiBGZWRvcmE6CisgICBgYHl1bSBpbnN0YWxsIHN0b3dgYAorCitXaHkgU3RvdyBjYW4gaGVscAorPT09PT09PT09PT09PT09PT0KKworU3RvdyBhbGxvd3MgdG8gbWFuYWdlIGZpbGVzIGxpa2UgaWYgdGhleSB3ZXJlIHBhY2thZ2VkLCBieSBjcmVhdGluZyBzeW1saW5rcworZnJvbSBieS1kaXJlY3RvcnkgZ3JvdXBlZCBzZXRzIG9mIGZpbGVzIGluc3RlYWQgb2YgY29weWluZyB0aGVtIGRpcmVjdGx5LgorCitXZSByZWNvbW1lbmQgdG8gYXR0ZW50aXZlbHkgcmVhZCBTdG93IEluZm8gZmlsZXMsIHRvIHJlYWxpemUgd2hhdCBpdCBjYW4gZG8sCitob3csIGFuZCBzcGVjaWFsbHkgd2h5IGl0IGlzIHNvIHVzZWZ1bCB3aGVuIHlvdSBoYXZlIHRvIG1hbmFnZSBwZXJzb25hbGx5Citjb21waWxlZCBzb2Z0d2FyZSB5b3UgcmVseSBvbi4KKworVGhlIHByb2NlZHVyZQorPT09PT09PT09PT09PQorCitTbyB3ZSB3YW50IHRvIHJ1biBhIEJSTFRUWSB2ZXJzaW9uLCB0YWtlbiBmcm9tIGEgc2V0IG9mIHBlcnNvbmFsbHkgY29tcGlsZWQKK29uZXMsIGFuZCBzYWZlbHkga2VlcCBhbGwgb2YgdGhlbSBhcm91bmQuIEN1cnJlbnQgd29ya2luZyByZWxlYXNlIHdpbGwgYmUgcnVuCitmcm9tIGBgL3Vzci9sb2NhbGBgIHJvb3QsIHdoaWxlIGFsbCByZWxlYXNlcyBmaWxlcyB3aWxsIGJlIGtlcHQgaW4gdGhlICJzYWZlCitwbGFjZSIsIHRoZSAqKlN0b3cgZGlyZWN0b3J5KiogYGAvdXNyL2xvY2FsL3N0b3cvYGAuIEZvciBleGFtcGxlLCByZWxlYXNlcworKGJpbnMvY29uZmlncy9saWJzL21hbnMsIG5vdCBzb3VyY2UgdHJlZXMpIHdpbGwgYmUgc3RvcmVkIHRoZXJlIGxpa2UgdGhpczoKKworKiAgYGAvdXNyL2xvY2FsL3N0b3cvYnJsdHR5LTMuMi9gYAorKiAgYGAvdXNyL2xvY2FsL3N0b3cvYnJsdHR5LTMuMy13aXRoLWFwaS9gYAorKiAgYGAvdXNyL2xvY2FsL3N0b3cvYnJsdHR5LTMuMy9gYAorKiAgYW5kIHNvIG9uCisKK0NvbXBpbGluZy9pbnN0YWxsaW5nIEJSTFRUWSBmb3IgU3RvdyBmaWxlIG1hbmFnZW1lbnQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworV2UgaGF2ZSB0byB1c2UgYGBjb25maWd1cmVgYCBmbGFncyB0byBpbmRpY2F0ZSB3ZSB3YW50IEJSTFRUWSB0byBiZSBydW4KK0Zyb20gYGAvdXNyL2xvY2FsYGAgcm9vdCwgYW5kIGluc3RhbGxlZCBpbiBgYC91c3IvbG9jYWwvc3Rvdy9icmx0dHktMy4yL2BgCityb290LiBTdG93IHdpbGwgZG8gc3ltbGlua3MgZm9yIHVzIHRoZW4uIFRoZSBkaXN0aW5jdGlvbiBiZXR3ZWVuIGV4ZWN1dGlvbiByb290CithbmQgaW5zdGFsbGF0aW9uIHJvb3QgaXMgY3JpdGljYWwgKGMuZi4gU3RvdyBJbmZvKTo6CisKKyAgIC4vY29uZmlndXJlIC0td2l0aC1leGVjdXRlLXJvb3Q9L3Vzci9sb2NhbCBcCisgICAgICAgICAgICAgICAtLXdpdGgtaW5zdGFsbC1yb290PS91c3IvbG9jYWwvc3Rvdy9icmx0dHktMy4yCisKK1lvdSBtYXkgYWRkIHdoYXRldmVyIGZsYWdzIHRoZW4sIGV4Y2VwdCB0aG9zZSB3aGljaCBjaGFuZ2UgZGlyZWN0b3JpZXMgYXMgd2UKK2FscmVhZHkgbWFuYWdlZCB0aGlzLgorCitUaGVuLCBzaW1wbHk6OgorCisgICBtYWtlCisgICBtYWtlIGluc3RhbGwKKworVGhlIGNvbW1hbmQ6OgorCisgICBscyAvdXNyL2xvY2FsL3N0b3cvYnJsdHR5LTMuMi8KKworc2hvdWxkIHNob3cgeW91IGFsbCB3aGF0IHdvdWxkIGhhdmUgYmVlbiBwdXQgaW4gYGAvdXNyL2xvY2FsYGAgaWYgd2UgaGF2ZW4ndAorbWFuYWdlZCBmaWxlcyB3aXRoIFN0b3cuCisKK1JlcHJvZHVjZSB0aGlzIGZvciBlYWNoIHZlcnNpb24geW91IHdhbnQgdG8gaW5zdGFsbCwgZm9yIGV4YW1wbGUsIHdlIGJ1aWx0IGEKK2JybHR0eS0zLjMtd2l0aC1hcGkgZGlyZWN0b3J5IGJ5IGFwcGx5aW5nIGFib3ZlIHByaW5jaXBsZXMgYW5kIGFkZGluZyBkZWRpY2F0ZWQKK2ZsYWcgZm9yIGVuYWJsaW5nIEFQSSB0byBgYGNvbmZpZ3VyZWBgIGNvbW1hbmQgbGluZS4gV2UgZGlkIHRoZSBzYW1lIGZvciBhCitzdGFuZGFyZCBicmx0dHktMy4zIHRvbywgYW5kIHNvIG9uLCBhbGwgc3RvcmVkIGluIGBgL3Vzci9sb2NhbC9zdG93L2BgLiBBcyB5b3UKK3NlZSwgd2UgY2xlYW5seSBzZXBhcmF0ZSB0aGluZ3MgLSBvbmUgZGlyZWN0b3J5IHBlciB2ZXJzaW9uIG9uIG9uZSBoYW5kLAorYnVpbGRpbmcgdnMuIHVzaW5nIG9uIHRoZSBvdGhlci4gVGVzdGluZyBpcyBub3cgZmFyIGxpZ2h0ZXIuCisKK01hbmFnaW5nIHNhZmVseSBrZXB0IHZlcnNpb25zIHdpdGggU3RvdworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0JlZm9yZSBhc2tpbmcgZm9yIFN0b3cgdG8gY3JlYXRlIHN5bWxpbmtzLCB3ZSBoYXZlIHRvIGJlIHN1cmUgd2Ugd29uJ3QgZ2V0IGFueQorY29uZmxpY3RzLCBpLmUuIHdlIGhhdmVuJ3QgYWxyZWFkeSBhc2tlZCBmb3IgU3RvdyB0byBjcmVhdGUgc3ltbGlua3Mgb24gdGhlCitzYW1lIHNvZnR3YXJlIHdpdGhvdXQgcmVtb3ZpbmcgdGhlbSBmaXJzdCwgb3Igd2UgZG9uJ3QgZm9yZ2V0IHdlIGhhdmUgYWxyZWFkeQoraW5zdGFsbGVkIEJSTFRUWSBkaXJlY3RseTo6CisKKyAgIGxzIC91c3IvbG9jYWwve2JpbixzYmlufQorCitzaG91bGQgYmUgZW5vdWdoIHRvIHNlZSBpZiB3ZSBoYXZlIHRvIGNsZWFuIHRoaW5ncyB1cCBiZWZvcmUgZ29pbmcgYW55IGZ1cnRoZXIuCitOb3RlIHdlJ2xsIHNlZSBob3cgdG8gdXNlIFN0b3cgdG8gcmVtb3ZlIGNyZWF0ZWQgc3ltbGlua3MganVzdCBhZnRlciBleHBsYWluaW5nCitob3cgdG8gYXNrIGZvciBpdCB0byBjcmVhdGUgdGhlbSAod2UgaG9wZSB5b3UgcmVhZCBmcm9tIHVwIHRvIGJlbG93Li4uKTo6CisKKyAgIGNkIC91c3IvbG9jYWwvc3RvdworICAgc3RvdyBicmx0dHktMy4yCisKK3dpbGwgY3JlYXRlIHRoZSBzeW1saW5rcywgaW4gcGFyZW50IGRpcmVjdG9yeS4gRm9yIGV4YW1wbGU6CisKKyogIGBgbG4gLXMgYnJsdHR5LTMuMi9iaW4gLi4vYmluYGAgKGlmIGBgLi4vYmluYGAgZGlkbid0IGV4aXN0KQorKiAgYGBsbiAtcyBicmx0dHktMy4yL2Jpbi9icmx0dHkgLi4vYmluL2JybHR0eWBgIChvdGhlcndpc2UpCisqICBhbmQgc28gb24KKworTm93LCBydW5uaW5nIGBgL3Vzci9sb2NhbC9iaW4vYnJsdHR5YGAgd2lsbCB3b3JrIHBlcmZlY3RseSwgbG9va2luZyBmb3IgaXRzCitjb25maWcgZmlsZXMgaW4gYGAvdXNyL2xvY2FsL2V0Yy9icmx0dHkvYGAgYW5kIHNvIG9uLCBldmVuIGlmIGl0J3MgYWxsCitzeW1saW5rcyAtIGFzIGlmIEJSTFRUWS0zLjIgd2FzIGluc3RhbGxlZCB0aGVyZS4KKworV2hlbiB5b3Ugd2FudCB0byBzd2l0Y2ggdG8gYW5vdGhlciB2ZXJzaW9uLCB5b3Ugc2ltcGx5IGhhdmUgdG8gYXNrIGZvciBTdG93IHRvCityZW1vdmUgc3ltbGlua3MgaXQgY3JlYXRlZDo6CisKKyAgIGNkIC91c3IvbG9jYWwvc3Rvdy8KKyAgIHN0b3cgLUQgYnJsdHR5LTMuMiAjIGlmIGN1cnJlbnQgcmVsZWFzZSBwb2ludHMgdG8gdGhpcyB2ZXJzaW9uCisKK2FuZCB0aGVuOjoKKworICAgc3RvdyBicmx0dHktMy4zLXdpdGgtYXBpCisKK0RvZXNuJ3QgaXQgbG9vayBwb3dlcmZ1bD8hCmRpZmYgLS1naXQgYS9Eb2N1bWVudHMvUkVBRE1FLlN5c3RlbWQgYi9Eb2N1bWVudHMvUkVBRE1FLlN5c3RlbWQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGQxZGQwNwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50cy9SRUFETUUuU3lzdGVtZApAQCAtMCwwICsxLDExNiBAQAorfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KK1VzaW5nIFN5c3RlbWQgU2VydmljZSBNYW5hZ2VtZW50Cit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorCisuLiBpbmNsdWRlOjogcHJvbG9ndWUucnN0CisKKy4uIHxjb25maWd1cmF0aW9uIGRpcmVjdG9yeXwgcmVwbGFjZTo6IC91c3IvbGliCisuLiB8dW5pdCBkaXJlY3Rvcnl8IHJlcGxhY2U6OiB8Y29uZmlndXJhdGlvbiBkaXJlY3Rvcnl8L3N5c3RlbWQvc3lzdGVtCisuLiB8dXNlcnMgZGlyZWN0b3J5fCByZXBsYWNlOjogfGNvbmZpZ3VyYXRpb24gZGlyZWN0b3J5fC9zeXN1c2Vycy5kCisuLiB8ZmlsZXMgZGlyZWN0b3J5fCByZXBsYWNlOjogfGNvbmZpZ3VyYXRpb24gZGlyZWN0b3J5fC90bXBmaWxlcy5kCisuLiB8Y29tbWFuZHMgZGlyZWN0b3J5fCByZXBsYWNlOjogL3Vzci9saWJleGVjL2JybHR0eQorLi4gfGJ1aWxkIHN1YmRpcmVjdG9yeXwgcmVwbGFjZTo6IEF1dG9zdGFydC9TeXN0ZW1kCisuLiB8ZGVmYXVsdCBjb25maWd1cmF0aW9uIGZpbGV8IHJlcGxhY2U6OiBgYC9ldGMvYnJsdHR5LmNvbmZgYAorCitJbml0aWFsIFNldHVwCis9PT09PT09PT09PT09CisKK1RoZSBmb2xsb3dpbmcgc3RlcHMgbmVlZCB0byBiZSBwZXJmb3JtZWQ6CisKKyogU3lzdGVtZCBzZXJ2aWNlIGFuZCBwYXRoIHVuaXRzIG5lZWQgdG8gYmUgaW5zdGFsbGVkCisgIGludG8gdGhlIHx1bml0IGRpcmVjdG9yeXwgZGlyZWN0b3J5OgorCisgICsgYnJsdHR5QC5zZXJ2aWNlCisgICsgYnJsdHR5LWRldmljZUAuc2VydmljZQorICArIGJybHR0eS5wYXRoCisgICsgYnJsdHR5QC5wYXRoCisKKyogQSB3cmFwcGVyIHNjcmlwdCBuZWVkcyB0byBiZSBpbnN0YWxsZWQKKyAgaW50byB0aGUgfGNvbW1hbmRzIGRpcmVjdG9yeXwgZGlyZWN0b3J5OgorCisgICsgc3lzdGVtZC13cmFwcGVyCisKKyogQSBmaWxlIGRlZmluaW5nIHRoZSBub24tcm9vdCB1c2VyIHRoYXQgQlJMVFRZIGlzIHRvIHJ1biBhcywKKyAgaW5jbHVkaW5nIHRoZSBzdXBwbGVtZW50YXJ5IGdyb3VwcyB0aGF0IGl0IG5lZWRzIGFjY2VzcyB0bywKKyAgbmVlZHMgdG8gYmUgaW5zdGFsbGVkIGludG8gdGhlIHx1c2VycyBkaXJlY3Rvcnl8IGRpcmVjdG9yeToKKworICArIHN5c3VzZXJzIC0+IGJybHR0eS5jb25mCisKKyogQSBmaWxlIGRlZmluaW5nIHRoZSBmaWxlcyBhbmQgZGlyZWN0b3JpZXMgdGhhdCBzaG91bGQgZXhpc3QKKyAgbmVlZHMgdG8gYmUgaW5zdGFsbGVkIGludG8gdGhlIHxmaWxlcyBkaXJlY3Rvcnl8IGRpcmVjdG9yeToKKworICArIHRtcGZpbGVzIC0+IGJybHR0eS5jb25mCisKK0EgbWFrZSBmaWxlIGhhcyBiZWVuIHByb3ZpZGVkIGluIG9yZGVyIHRvIG1ha2UgdGhpcyBlYXN5IHRvIGRvLgorSXQgY2FuIGJlIGZvdW5kIHdpdGhpbiB0aGUgfGJ1aWxkIHN1YmRpcmVjdG9yeXwgc3ViZGlyZWN0b3J5CitvZiBCUkxUVFkncyBidWlsZCB0cmVlLgorVG8gaW5zdGFsbCBhbGwgb2YgdGhlc2UgZmlsZXMsIGNoYW5nZSB0byB0aGlzIGRpcmVjdG9yeSBhbmQgcnVuIHRoZSBjb21tYW5kOjoKKworICBtYWtlIGluc3RhbGwKKworWW91IHRoZW4gbmVlZCB0byB0ZWxsIFN5c3RlbWQgdGhhdCB0aGUgZmlsZXMgaGF2ZSBiZWVuIGluc3RhbGxlZC4KK1RvIGRvIHRoaXMsIHJ1biB0aGUgY29tbWFuZDo6CisKKyAgc3lzdGVtY3RsIGRhZW1vbi1yZWxvYWQKKworVGhhdCdzIGFsbCB5b3UgbmVlZCB0byBkby4KK1lvdXIgc3lzdGVtIGlzIG5vdyBhYmxlIHRvIG1hbmFnZSBCUkxUVFkgaW5zdGFuY2VzIHZpYSBTeXN0ZW1kLgorCitNYW5hZ2luZyBCUkxUVFkgSW5zdGFuY2VzCis9PT09PT09PT09PT09PT09PT09PT09PT09CisKK1N5c3RlbWQgbWFuYWdlcyBCUkxUVFkgaW5zdGFuY2VzIG9uIHlvdXIgc3lzdGVtIGluIGEgbnVtYmVyIG9mIHdheXMuCisKK1VTQiBCcmFpbGxlIERldmljZXMKKy0tLS0tLS0tLS0tLS0tLS0tLS0KKworSWYgQlJMVFRZJ3MgVWRldiBydWxlcyBoYXZlIGFsc28gYmVlbiBpbnN0YWxsZWQKK3RoZW4gYSBCUkxUVFkgaW5zdGFuY2Ugd2lsbCBiZSBhdXRvbWF0aWNhbGx5IHN0YXJ0ZWQKK3doZW4gYSBVU0IgYnJhaWxsZSBkZXZpY2UgaXMgY29ubmVjdGVkLAorYW5kIGF1dG9tYXRpY2FsbHkgc3RvcHBlZCB3aGVuIGl0J3MgZGlzY29ubmVjdGVkLgorU2V2ZXJhbCBicmFpbGxlIGRldmljZXMgY2FuIGJlIG1hbmFnZWQgaW4gdGhpcyB3YXkgYXQgdGhlIHNhbWUgdGltZS4KK1RoZXkgY2FuIGJlIGNvbm5lY3RlZCBhbmQgZGlzY29ubmVjdGVkIGF0IGFueSB0aW1lIGFuZCBpbiBhbnkgb3JkZXIuCisKK1RoZSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gZmlsZSAtIHxkZWZhdWx0IGNvbmZpZ3VyYXRpb24gZmlsZXwgLSBpcyB1c2VkCitleGNlcHQgdGhhdCBhbnkgYGBicmFpbGxlLWRldmljZWBgIGFuZCBgYGJyYWlsbGUtZHJpdmVyYGAgZGlyZWN0aXZlcwordGhhdCBpdCBzcGVjaWZpZXMgYXJlIGlnbm9yZWQgYmVjYXVzZSB0aGV5J3JlIG92ZXJyaWRkZW4gYnkgdGhlIFVkZXYgcnVsZXMuCitJdCdzIHNhZmUsIHRoZXJlZm9yZSwgdG8gc3BlY2lmeSBhIGRlZmF1bHQgbm9uLVVTQiBicmFpbGxlIGRldmljZQord2l0aGluIHxkZWZhdWx0IGNvbmZpZ3VyYXRpb24gZmlsZXwuCisKK1RoZSBEZWZhdWx0IEluc3RhbmNlCistLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgZGVmYXVsdCBCUkxUVFkgaW5zdGFuY2UgaXMgdGhlIG9uZSB0aGF0J3MgY29uZmlndXJlZAordmlhIHRoZSBmaWxlIHxkZWZhdWx0IGNvbmZpZ3VyYXRpb24gZmlsZXwuCitJdCdzIG1hbmFnZWQgYnkgYXBwbHlpbmcgc3RhbmRhcmQgU3lzdGVtZCBjb21tYW5kcyB0byBCUkxUVFkncyBwYXRoIHVuaXQuCitGb3IgZXhhbXBsZTo6CisKKyAgc3lzdGVtY3RsIGVuYWJsZSBicmx0dHkucGF0aAorICBzeXN0ZW1jdGwgc3RhcnQgYnJsdHR5LnBhdGgKKyAgc3lzdGVtY3RsIHN0b3AgYnJsdHR5LnBhdGgKKyAgc3lzdGVtY3RsIGRpc2FibGUgYnJsdHR5LnBhdGgKKworQWRkaXRpb25hbCBJbnN0YW5jZXMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0FkZGl0aW9uYWwgQlJMVFRZIGluc3RhbmNlcyBjYW4gYmUgbWFuYWdlZCB2aWEgcGF0aCBpbnN0YW5jZSByZWZlcmVuY2VzLgorRWFjaCBvZiB0aGVtIGhhcyBpdHMgb3duIGNvbmZpZ3VyYXRpb24gZmlsZS4KKworSWYsIGZvciBleGFtcGxlLCB0aGUgbmFtZSBvZiBhbiBpbnN0YW5jZSBpcyBgYGluYW1lYGAsIHRoZW4KK2l0cyBTeXN0ZW1kIHBhdGggbmFtZSB3b3VsZCBiZSBgYGJybHR0eUBpbmFtZWBgLAoraXRzIGNvbmZpZ3VyYXRpb24gZmlsZSB3b3VsZCBiZSBgYC9ldGMvYnJsdHR5X2luYW1lLmNvbmZgYCwKK2FuZCBpdCdkIGJlIG1hbmFnZWQgdmlhIFN5c3RlbWQgY29tbWFuZHMgbGlrZSB0aGVzZTo6CisKKyAgc3lzdGVtY3RsIGVuYWJsZSBicmx0dHlAaW5hbWUucGF0aAorICBzeXN0ZW1jdGwgc3RhcnQgYnJsdHR5QGluYW1lLnBhdGgKKyAgc3lzdGVtY3RsIHN0b3AgYnJsdHR5QGluYW1lLnBhdGgKKyAgc3lzdGVtY3RsIGRpc2FibGUgYnJsdHR5QGluYW1lLnBhdGgKKworQW55IG51bWJlciBvZiBpbnN0YW5jZXMgbWF5IGJlIG1hbmFnZWQgaW4gdGhpcyB3YXkuCitUaGVzZSBpbnN0YW5jZXMgZG9uJ3QgaW1wbGljaXRseSBhbHNvIHJlYWQgdGhlIGRlZmF1bHQgY29uZmlndXJhdGlvbiBmaWxlCisofGRlZmF1bHQgY29uZmlndXJhdGlvbiBmaWxlfCkuCitZb3UgY2FuLCBob3dldmVyLCBleHBsaWNpdGx5IGluY2x1ZGUgaXQKK2Zyb20gd2l0aGluIGFueSBpbnN0YW5jZS1zcGVjaWZpYyBjb25maWd1cmF0aW9uIGZpbGU6CisKKy4uIHBhcnNlZC1saXRlcmFsOjogaW5jbHVkZSB8ZGVmYXVsdCBjb25maWd1cmF0aW9uIGZpbGV8CisKZGlmZiAtLWdpdCBhL0RvY3VtZW50cy9SRUFETUUuVGV4dFRhYmxlcyBiL0RvY3VtZW50cy9SRUFETUUuVGV4dFRhYmxlcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZGU3MTFkCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRzL1JFQURNRS5UZXh0VGFibGVzCkBAIC0wLDAgKzEsMjc2IEBACit+fn5+fn5+fn5+fgorVGV4dCBUYWJsZXMKK35+fn5+fn5+fn5+CisKKy4uIGluY2x1ZGU6OiBwcm9sb2d1ZS5yc3QKKworRGVzY3JpcHRpb24KKz09PT09PT09PT09CisKK0ZpbGVzIHdpdGggbmFtZXMgb2YgdGhlIGZvcm0gYGAqLnR0YmBgIGFyZSB0ZXh0IHRhYmxlcywgYW5kIHdpdGggbmFtZXMgb2YgdGhlCitmb3JtIGBgKi50dGlgYCBhcmUgdGV4dCBzdWJ0YWJsZXMuIFRoZXkgYXJlIHVzZWQgYnkgQlJMVFRZIHRvIHRyYW5zbGF0ZSB0aGUKK2NoYXJhY3RlcnMgb24gdGhlIHNjcmVlbiBpbnRvIHRoZWlyIGNvcnJlc3BvbmRpbmcgOC1kb3QgY29tcHV0ZXIgYnJhaWxsZQorcmVwcmVzZW50YXRpb25zIChzZWUgfFJFQURNRS5CcmFpbGxlRG90c3wgZm9yIGRldGFpbHMpLgorCitUZXh0IHRhYmxlcyBjYW4gdXN1YWxseSBiZSBmb3VuZCBpbiB0aGUgYGAvZXRjL2JybHR0eS9UZXh0L2BgIGRpcmVjdG9yeSAoc2VlCit8UkVBRE1FLkN1c3RvbWl6ZXwgZm9yIG1vcmUgZGV0YWlscykuIFNlZSBgVGV4dCBUYWJsZSBMaXN0YF8gZm9yIGEgbGlzdCBvZgorQlJMVFRZJ3MgdGV4dCB0YWJsZXMuCisKK0EgdGV4dCB0YWJsZSBjb25zaXN0cyBvZiBhIHNlcXVlbmNlIG9mIGRpcmVjdGl2ZXMsIG9uZSBwZXIgbGluZSwgd2hpY2ggZGVmaW5lIAoraG93IGVhY2ggY2hhcmFjdGVyIGlzIHRvIGJlIHJlcHJlc2VudGVkIGluIGJyYWlsbGUuIFVURi04IGNoYXJhY3RlciBlbmNvZGluZyAKK211c3QgYmUgdXNlZC4gV2hpdGVzcGFjZSAoYmxhbmtzLCB0YWJzKSBhdCB0aGUgYmVnaW5uaW5nIG9mIGEgbGluZSwgYXMgd2VsbCBhcyAKK2JlZm9yZSBhbmQvb3IgYWZ0ZXIgYW55IG9wZXJhbmQgb2YgYW55IGRpcmVjdGl2ZSwgaXMgaWdub3JlZC4gTGluZXMgY29udGFpbmluZyAKK29ubHkgd2hpdGVzcGFjZSBhcmUgaWdub3JlZC4gSWYgdGhlIGZpcnN0IG5vbi13aGl0ZXNwYWNlIGNoYXJhY3RlciBvZiBhIGxpbmUgCitpcyBgYCNgYCB0aGVuIHRoYXQgbGluZSBpcyBhIGNvbW1lbnQgYW5kIGlzIGlnbm9yZWQuCisKK1RoZSBwcmVjZWRlbmNlIGZvciBkZXRlcm1pbmluZyB0aGUgYnJhaWxsZSByZXByZXNlbnRhdGlvbiBmb3IgYSBjaGFyYWN0ZXIgaXMgYXMKK2ZvbGxvd3M6CisKKzEpIElmIHRoZSBjaGFyYWN0ZXIgaXMgd2l0aGluIHRoZSBVbmljb2RlIGJyYWlsbGUgUm93IChVKzI4MDAgdGhyb3VnaCBVKzI4RkYpCisgICB0aGVuIGl0cyBsb3ctb3JkZXIgZWlnaHQgYml0cyBhcmUgdXNlZCBhcyBmb2xsb3dzOgorCisgICA9PT0gID09PT09PT09ICA9PT0KKyAgIEhleCAgQmluYXJ5ICAgIERvdAorICAgLS0tICAtLS0tLS0tLSAgLS0tCisgICAwMSAgIDAwMDAwMDAxICAxCisgICAwMiAgIDAwMDAwMDEwICAyCisgICAwNCAgIDAwMDAwMTAwICAzCisgICAwOCAgIDAwMDAxMDAwICA0CisgICAxMCAgIDAwMDEwMDAwICA1CisgICAyMCAgIDAwMTAwMDAwICA2CisgICA0MCAgIDAxMDAwMDAwICA3CisgICA4MCAgIDEwMDAwMDAwICA4CisgICA9PT0gID09PT09PT09ICA9PT0KKworMikgSWYgdGhlIGNoYXJhY3RlciBpcyB3aXRoaW4gdGhlIFVuaWNvZGUgcHJpdmF0ZSB1c2Ugcm93IFUrRjAwMCB0aHJvdWdoIFUrRjBGRgorICAgdGhlbiBpdHMgbG93LW9yZGVyIGJ5dGUgaXM6CisKKyAgIEEpIGludGVycHJldGVkIGFzIGEgc2luZ2xlLWJ5dGUgY2hhcmFjdGVyIHdpdGhpbiB0aGUgbG9jQUwgY2hhcmFjdGVyIHNldAorICAgQikgdHJhbnNsYXRlZCB0byBVbmljb2RlCisgICBDKSByZXByb2Nlc3NlZAorCiszKSBBbiBleHBsaWNpdCByZXByZXNlbnRhdGlvbiAoZGVmaW5lZCB2aWEgYFRoZSBDaGFyIERpcmVjdGl2ZWBfLAorICAgYFRoZSBHbHlwaCBEaXJlY3RpdmVgXywgb3IgYFRoZSBCeXRlIERpcmVjdGl2ZWBfLgorCis0KSBBbiBlcXVpdmFsZW50IHJlcHJlc2VudGF0aW9uIChkZWZpbmVkIHZpYSBgVGhlIEFsaWFzIERpcmVjdGl2ZWBfKS4KKworNSkgVGhlIGV4cGxpY2l0IHJlcHJlc2VudGF0aW9uIG9mIHRoZSBVbmljb2RlIGJhc2UgY2hhcmFjdGVyLgorCis2KSBUaGUgZXhwbGljaXQgcmVwcmVzZW50YXRpb24gb2YgdGhlIHRyYW5zbGl0ZXJhdGVkIEFTQ0lJIGNoYXJhY3Rlci4KKworNykgVGhlIGV4cGxpY2l0IHJlcHJlc2VudGF0aW9uIG9mIHRoZSBVbmljb2RlIFJlcGxhY2VtZW50IENoYXJhY3RlciAoVStGRkZEKS4KKworOCkgVGhlIGV4cGxpY2l0IHJlcHJlc2VudGF0aW9uIG9mIGEgcXVlc3Rpb24gbWFyayAoYGA/YGApLgorCis5KSBBbGwgZWlnaHQgYnJhaWxsZSBkb3RzLgorCitEaXJlY3RpdmVzCis9PT09PT09PT09CisKKy4uIHxjaGFyYWN0ZXIgb3BlcmFuZHwgcmVwbGFjZTo6CisgICBUaGUgY2hhcmFjdGVyIGJlaW5nIGRlZmluZWQuCisgICBTZWUgYFRoZSBTdHJpbmcgT3BlcmFuZGBfIGZvciBkZXRhaWxzLgorCisuLiB8Ynl0ZSBvcGVyYW5kfCByZXBsYWNlOjoKKyAgIFRoZSBjaGFyYWN0ZXIgYmVpbmcgZGVmaW5lZC4KKyAgIEl0IG1heSBiZSBzcGVjaWZpZWQgaW4gYW55IG9mIHRoZSB3YXlzIHN1cHBvcnRlZCBieSBgVGhlIFN0cmluZyBPcGVyYW5kYF8KKyAgIGV4Y2VwdCB0aGF0IHRoZSBVbmljb2RlLXNwZWNpZmljIGZvcm1zIChgYFx1YGAsIGBgXFVgYCwgYGBcPGBgKSBtYXkgbm90IGJlIHVzZWQuCisKKy4uIHxkb3RzIG9wZXJhbmR8IHJlcGxhY2U6OgorICAgVGhlIGJyYWlsbGUgcmVwcmVzZW50YXRpb24gZm9yIHRoZSBjaGFyYWN0ZXIgYmVpbmcgZGVmaW5lZC4KKyAgIFNlZSBgVGhlIERvdHMgT3BlcmFuZGBfIGZvciBkZXRhaWxzLgorCisuLiB8Y2VsbCBvcGVyYW5kfCByZXBsYWNlOjoKKyAgIFRoZSBicmFpbGxlIHJlcHJlc2VudGF0aW9uIGZvciB0aGUgY2hhcmFjdGVyIGJlaW5nIHRlc3RlZC4KKyAgIFNlZSBgVGhlIENlbGwgT3BlcmFuZGBfIGZvciBkZXRhaWxzLgorCitUaGUgQ2hhciBEaXJlY3RpdmUKKy0tLS0tLS0tLS0tLS0tLS0tLQorCisuLiBwYXJzZWQtbGl0ZXJhbDo6IGNoYXIgKmNoYXJhY3RlciogKmRvdHMqICMgKmNvbW1lbnQqCisKK1VzZSB0aGlzIGRpcmVjdGl2ZSB0byBzcGVjaWZ5IGhvdyBhIFVuaWNvZGUgY2hhcmFjdGVyIGlzIHRvIGJlIHJlcHJlc2VudGVkIGluCiticmFpbGxlLiBBIGNoYXJhY3RlciBkZWZpbmVkIHZpYSB0aGlzIGRpcmVjdGl2ZSBjYW4gYWxzbyBiZSBlbnRlcmVkIGZyb20gYQorYnJhaWxsZSBrZXlib2FyZC4gSWYgc2V2ZXJhbCBjaGFyYWN0ZXJzIGhhdmUgdGhlIHNhbWUgYnJhaWxsZSByZXByZXNlbnRhdGlvbgordGhlbiBvbmx5IG9uZSBvZiB0aGVtIHNob3VsZCBiZSBkZWZpbmVkIHZpYSB0aGlzIGRpcmVjdGl2ZSAtIHRoZSBvdGhlcnMgc2hvdWxkCitiZSBkZWZpbmVkIHZpYSBgVGhlIEdseXBoIERpcmVjdGl2ZWBfICh3aGljaCBoYXMgdGhlIHNhbWUgc3ludGF4KS4gSWYgbW9yZSB0aGFuCitvbmUgY2hhcmFjdGVyIHdpdGggdGhlIHNhbWUgYnJhaWxsZSByZXByZXNlbnRhdGlvbiBpcyBkZWZpbmVkIHZpYSB0aGlzCitkaXJlY3RpdmUgKHdoaWNoIGlzIGFsbG93ZWQgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkpIHRoZW4gdGhlIGZpcnN0IG9uZSBpcwordXNlZCB3aGVuIGVudGVyZWQgZnJvbSBhIGJyYWlsbGUga2V5Ym9hcmQuCisKKypjaGFyYWN0ZXIqCisgICB8Y2hhcmFjdGVyIG9wZXJhbmR8CisKKypkb3RzKgorICAgfGRvdHMgb3BlcmFuZHwKKworRXhhbXBsZXM6OgorCisgICBjaGFyIGEgMQorICAgY2hhciBiICgxMikKKyAgIGNoYXIgYyAoIDQgIDEgICApCisgICBjaGFyIFxcIDEyNTY3CisgICBjaGFyIFxzIDAKKyAgIGNoYXIgXHgyMCAoKQorICAgY2hhciBcPExBVElOX1NNQUxMX0xFVFRFUl9EPiAxNDUKKworVGhlIEdseXBoIERpcmVjdGl2ZQorLS0tLS0tLS0tLS0tLS0tLS0tLQorCisuLiBwYXJzZWQtbGl0ZXJhbDo6IGdseXBoICpjaGFyYWN0ZXIqICpkb3RzKiAjICpjb21tZW50KgorCitVc2UgdGhpcyBkaXJlY3RpdmUgdG8gc3BlY2lmeSBob3cgYSBVbmljb2RlIGNoYXJhY3RlciBpcyB0byBiZSByZXByZXNlbnRlZCBpbgorYnJhaWxsZS4gQSBjaGFyYWN0ZXIgZGVmaW5lZCB2aWEgdGhpcyBkaXJlY3RpdmUgaXMgb3V0cHV0LW9ubHkgLSBpdCBjYW4ndAorYmUgZW50ZXJlZCBmcm9tIGEgYnJhaWxsZSBrZXlib2FyZC4KKworKmNoYXJhY3RlcioKKyAgIHxjaGFyYWN0ZXIgb3BlcmFuZHwKKworKmRvdHMqCisgICB8ZG90cyBvcGVyYW5kfAorCitTZWUgYFRoZSBDaGFyIERpcmVjdGl2ZWBfIGZvciBleGFtcGxlcy4KKworVGhlIElucHV0IERpcmVjdGl2ZQorLS0tLS0tLS0tLS0tLS0tLS0tLQorCisuLiBwYXJzZWQtbGl0ZXJhbDo6IGlucHV0ICpjaGFyYWN0ZXIqICpkb3RzKiAjICpjb21tZW50KgorCitVc2UgdGhpcyBkaXJlY3RpdmUgdG8gc3BlY2lmeSBob3cgYSBVbmljb2RlIGNoYXJhY3RlciBpcyB0byBiZSBlbnRlcmVkIGZyb20gYQorYnJhaWxsZSBrZXlib2FyZC4gQSBjaGFyYWN0ZXIgZGVmaW5lZCB2aWEgdGhpcyBkaXJlY3RpdmUgaXMgaW5wdXQtb25seSAtIGl0cworYWN0dWFsIGJyYWlsbGUgcmVwcmVzZW50YXRpb24gaXNuJ3QgZGVmaW5lZC4KKworKmNoYXJhY3RlcioKKyAgIHxjaGFyYWN0ZXIgb3BlcmFuZHwKKworKmRvdHMqCisgICB8ZG90cyBvcGVyYW5kfAorCitTZWUgYFRoZSBDaGFyIERpcmVjdGl2ZWBfIGZvciBleGFtcGxlcy4KKworVGhlIEFsaWFzIERpcmVjdGl2ZQorLS0tLS0tLS0tLS0tLS0tLS0tLQorCisuLiBwYXJzZWQtbGl0ZXJhbDo6IGFsaWFzICpmcm9tKiAqdG8qICMgKmNvbW1lbnQqCisKK1VzZSB0aGlzIGRpcmVjdGl2ZSB0byBkZWZpbmUgdGhlICpmcm9tKiBVbmljb2RlIGNoYXJhY3RlciBzdWNoIHRoYXQgaXQgaGFzIHRoZQorc2FtZSBicmFpbGxlIHJlcHJlc2VudGF0aW9uIGFzIHRoZSAqdG8qIFVuaWNvZGUgY2hhcmFjdGVyLiBTZWUKK2BUaGUgU3RyaW5nIE9wZXJhbmRgXyBmb3IgZGV0YWlscyBvbiBob3cgdG8gc3BlY2lmeSBib3RoIG9wZXJhbmRzLgorCitUaGUgQnl0ZSBEaXJlY3RpdmUKKy0tLS0tLS0tLS0tLS0tLS0tLQorCisuLiBwYXJzZWQtbGl0ZXJhbDo6IGJ5dGUgKmJ5dGUqICpkb3RzKiAjICpjb21tZW50KgorCitVc2UgdGhpcyBkaXJlY3RpdmUgdG8gc3BlY2lmeSBob3cgYSBjaGFyYWN0ZXIgaW4gdGhlIGxvY2FsIGNoYXJhY3RlciBzZXQgaXMgdG8KK2JlIHJlcHJlc2VudGVkIGluIGJyYWlsbGUuIEl0IGhhcyBiZWVuIHJldGFpbmVkIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5IGJ1dAorc2hvdWxkIG5vdCBiZSB1c2VkLiBVbmljb2RlIGNoYXJhY3RlcnMgc2hvdWxkIGJlIGRlZmluZWQgKHZpYSBlaXRoZXIKK2BUaGUgQ2hhciBEaXJlY3RpdmVgXyBvciBgVGhlIEdseXBoIERpcmVjdGl2ZWBfKSBzbyB0aGF0IHRoZSB0ZXh0IHRhYmxlIHJlbWFpbnMKK3ZhbGlkIHJlZ2FyZGxlc3Mgb2Ygd2hhdCB0aGUgbG9jYWwgY2hhcmFjdGVyIHNldCBpcy4KKworKmJ5dGUqCisgICB8Ynl0ZSBvcGVyYW5kfAorCisqZG90cyoKKyAgIHxkb3RzIG9wZXJhbmR8CisKK1RoZSBJZkdseXBoIERpcmVjdGl2ZQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy4uIHBhcnNlZC1saXRlcmFsOjogaWZHbHlwaCAqY2hhcmFjdGVyKiAqZGlyZWN0aXZlKgorCitVc2UgdGhpcyBkaXJlY3RpdmUgdG8gb25seSBwcm9jZXNzIG9uZSBvciBtb3JlIGRpcmVjdGl2ZXMgaWYgYSBjaGFyYWN0ZXIgaGFzIGEKK2JyYWlsbGUgcmVwcmVzZW50YXRpb24uCisKKypjaGFyYWN0ZXIqCisgICB8Y2hhcmFjdGVyIG9wZXJhbmR8CisKKypkaXJlY3RpdmUqCisgICB8ZGlyZWN0aXZlIG9wZXJhbmR8CisKK0V4YW1wbGVzOjoKKworICAgaWZHbHlwaCBDIGFsaWFzIFx1MjEwMyBDICMgZGVncmVlIENlbHNpdXMKKworVGhlIElmTm90R2x5cGggRGlyZWN0aXZlCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworLi4gcGFyc2VkLWxpdGVyYWw6OiBpZk5vdEdseXBoICpjaGFyYWN0ZXIqICpkaXJlY3RpdmUqCisKK1VzZSB0aGlzIGRpcmVjdGl2ZSB0byBvbmx5IHByb2Nlc3Mgb25lIG9yIG1vcmUgZGlyZWN0aXZlcyBpZiBhIGNoYXJhY3RlcgorZG9lc24ndCBoYXZlIGEgYnJhaWxsZSByZXByZXNlbnRhdGlvbi4KKworKmNoYXJhY3RlcioKKyAgIHxjaGFyYWN0ZXIgb3BlcmFuZHwKKworKmRpcmVjdGl2ZSoKKyAgIHxkaXJlY3RpdmUgb3BlcmFuZHwKKworRXhhbXBsZXM6OgorCisgICBpZk5vdEdseXBoIFxzIGdseXBoIFxzIDAKKworVGhlIElmSW5wdXQgRGlyZWN0aXZlCistLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworLi4gcGFyc2VkLWxpdGVyYWw6OiBpZklucHV0ICpjZWxsKiAqZGlyZWN0aXZlKgorCitVc2UgdGhpcyBkaXJlY3RpdmUgdG8gb25seSBwcm9jZXNzIG9uZSBvciBtb3JlIGRpcmVjdGl2ZXMgaWYgYSBjaGFyYWN0ZXIgY2FuIGJlCitlbnRlcmVkIGZyb20gYSBicmFpbGxlIGtleWJvYXJkLgorCisqY2VsbCoKKyAgIHxjZWxsIG9wZXJhbmR8CisKKypkaXJlY3RpdmUqCisgICB8ZGlyZWN0aXZlIG9wZXJhbmR8CisKK1RoZSBJZk5vdElucHV0IERpcmVjdGl2ZQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy4uIHBhcnNlZC1saXRlcmFsOjogaWZOb3RJbnB1dCAqY2VsbCogKmRpcmVjdGl2ZSoKKworVXNlIHRoaXMgZGlyZWN0aXZlIHRvIG9ubHkgcHJvY2VzcyBvbmUgb3IgbW9yZSBkaXJlY3RpdmVzIGlmIGEgY2hhcmFjdGVyIGNhbid0CitiZSBlbnRlcmVkIGZyb20gYSBicmFpbGxlIGtleWJvYXJkLgorCisqY2VsbCoKKyAgIHxjZWxsIG9wZXJhbmR8CisKKypkaXJlY3RpdmUqCisgICB8ZGlyZWN0aXZlIG9wZXJhbmR8CisKKy4uIGluY2x1ZGU6OiBuZXN0aW5nLWRpcmVjdGl2ZXMucnN0CisuLiBpbmNsdWRlOjogdmFyaWFibGUtZGlyZWN0aXZlcy5yc3QKKy4uIGluY2x1ZGU6OiBjb25kaXRpb24tZGlyZWN0aXZlcy5yc3QKKworT3BlcmFuZHMKKz09PT09PT09CisKKy4uIGluY2x1ZGU6OiBzdHJpbmctb3BlcmFuZC5yc3QKKworVGhlIERvdHMgT3BlcmFuZAorLS0tLS0tLS0tLS0tLS0tLQorCitBICpkb3RzKiBvcGVyYW5kIGlzIGEgc2VxdWVuY2Ugb2Ygb25lIHRvIGVpZ2h0IGRvdCBudW1iZXJzLiBJZiB0aGUgZG90IG51bWJlcnMKK2FyZSBlbmNsb3NlZCB3aXRoaW4gKHBhcmVudGhlc2VzKSB0aGVuIHRoZXkgbWF5IGJlIHNlcGFyYXRlZCBmcm9tIG9uZSBhbm90aGVyCitieSB3aGl0ZXNwYWNlLiBBIGRvdCBudW1iZXIgaXMgYSBkaWdpdCB3aXRoaW4gdGhlIHJhbmdlIGBgMWBgLWBgOGBgCithcyBkZWZpbmVkIGJ5IHRoZSBzdGFuZGFyZCBicmFpbGxlIGRvdCBudW1iZXJpbmcgY29udmVudGlvbiAoc2VlCit8UkVBRE1FLkJyYWlsbGVEb3RzfCBmb3IgZGV0YWlscykuIFRoZSBzcGVjaWFsIGRvdCBudW1iZXIgYGAwYGAgaXMgcmVjb2duaXplZAord2hlbiBub3QgZW5jbG9zZWQgd2l0aGluIChwYXJlbnRoZXNlcyksIGFuZCBtZWFucyBubyBkb3RzIC0gaXQgbWF5IG5vdCBiZSB1c2VkCitpbiBjb25qdW5jdGlvbiB3aXRoIGFueSBvdGhlciBkb3QgbnVtYmVyLgorCitUaGUgQ2VsbCBPcGVyYW5kCistLS0tLS0tLS0tLS0tLS0tCisKK0EgKmNlbGwqIG9wZXJhbmQgaXMgYSBzZXF1ZW5jZSBvZiBvbmUgdG8gZWlnaHQgZG90IG51bWJlcnMuIEEgZG90IG51bWJlciBpcworYSBkaWdpdCB3aXRoaW4gdGhlIHJhbmdlIGBgMWBgLWBgOGBgIGFzIGRlZmluZWQgYnkgdGhlIHN0YW5kYXJkIGJyYWlsbGUgZG90CitudW1iZXJpbmcgY29udmVudGlvbiAoc2VlIHxSRUFETUUuQnJhaWxsZURvdHN8IGZvciBkZXRhaWxzKS4gVGhlIHNwZWNpYWwgZG90CitudW1iZXIgYGAwYGAgaXMgcmVjb2duaXplZCwgYW5kIG1lYW5zIG5vIGRvdHMgLSBpdCBtYXkgbm90IGJlIHVzZWQgaW4KK2Nvbmp1bmN0aW9uIHdpdGggYW55IG90aGVyIGRvdCBudW1iZXIuCisKK1RleHQgVGFibGUgTGlzdAorPT09PT09PT09PT09PT09CisKKy4uIGNzdi10YWJsZTo6CisgICA6aGVhZGVyLXJvd3M6IDEKKyAgIDpmaWxlOiB0ZXh0LXRhYmxlLmNzdgorCmRpZmYgLS1naXQgYS9Eb2N1bWVudHMvUkVBRE1FLlVwc3RhcnQgYi9Eb2N1bWVudHMvUkVBRE1FLlVwc3RhcnQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjI5OWRlYwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50cy9SRUFETUUuVXBzdGFydApAQCAtMCwwICsxLDQxIEBACit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorVXNpbmcgVXBzdGFydCBTZXJ2aWNlIE1hbmFnZW1lbnQKK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisKKy4uIGluY2x1ZGU6OiBwcm9sb2d1ZS5yc3QKKworQW4gVXBzdGFydCBqb2IgZm9yIEJSTFRUWSBjYW4gYmUgZm91bmQgd2l0aGluIHRoZSBgYEF1dG9zdGFydC9VcHN0YXJ0L2BgIAorc3ViZGlyZWN0b3J5IG9mIEJSTFRUWSdzIHNvdXJjZSB0cmVlLiBJdCdzIGNhbGxlZCBgYGJybHR0eS5jb25mYGAuIEFsbCB5b3UgbmVlZAordG8gZG8gaXMgdG8gY29weSB0aGlzIGZpbGUgaW50byBVcHN0YXJ0J3Mgam9icyBkaXJlY3RvcnkuCisKK1Vwc3RhcnQncyBqb2JzIGRpcmVjdG9yeSBoYXMgY2hhbmdlZCBvdmVyIHRpbWUuIE9sZGVyIFVwc3RhcnQgcmVsZWFzZXMgdXNlCitgYC9ldGMvZXZlbnQuZC9gYCB3aGVyZWFzIG5ld2VyIG9uZXMgdXNlIGBgL2V0Yy9pbml0L2BgLiBZb3UnbGwgbmVlZCB0byBjaGVjaworeW91ciBzeXN0ZW0gdG8gc2VlIHdoaWNoIG9mIHRoZXNlIGRpcmVjdG9yaWVzIGl0J3MgdXNpbmcuIERvbid0IGdldCBjb25mdXNlZCBieQordGhlIGRpcmVjdG9yeSBgYC9ldGMvaW5pdC5kL2BgLCB3aGljaCB5b3VyIHN5c3RlbSBwcm9iYWJseSBhbHNvIGhhcywgYW5kIHdoaWNoCitoYXMgYSBzaW1pbGFyIG5hbWUuIEl0J3MgdXNlZCBmb3Igc29tZXRoaW5nIGVudGlyZWx5IGRpZmZlcmVudCAtIFN5c1YgaW5pdAorc2NyaXB0cy4KKworVGhlIGZpbGUgYWxzbyBuZWVkcyB0byBoYXZlIHRoZSBjb3JyZWN0IG5hbWUuIE9sZGVyIFVwc3RhcnQgcmVsZWFzZXMganVzdCB1c2UgCit0aGUgam9iIG5hbWUgaXRzZWxmLCBlLmcuIGBgYnJsdHR5YGAsIHdoZXJlYXMgbmV3ZXIgb25lcyBhcHBlbmQgdGhlIGBgLmNvbmZgYCAKK2V4dGVuc2lvbiwgZS5nLiBgYGJybHR0eS5jb25mYGAuCisKK1NvLCB0byBkZWZpbmUgQlJMVFRZJ3MgVXBzdGFydCBqb2IsIHlvdSdsbCBuZWVkIHRvIGRvIHNvbWV0aGluZyBsaWtlIHRoaXM6CisKKyogIEZvciBhbiBvbGRlciBVcHN0YXJ0IHJlbGVhc2U6OgorCisgICAgICBjcCBicmx0dHkuY29uZiAvZXRjL2V2ZW50LmQvYnJsdHR5CisKKyogIEZvciBhIG5ld2VyIFVwc3RhcnQgcmVsZWFzZTo6CisKKyAgICAgIGNwIGJybHR0eS5jb25mIC9ldGMvaW5pdC9icmx0dHkuY29uZgorCitPbmNlIHRoZSBqb2IgZmlsZSBpcyBpbiB0aGUgcmlnaHQgcGxhY2UsIEJSTFRUWSB3aWxsIGF1dG9tYXRpY2FsbHkgc3RhcnQgd2hlbiAKK3RoZSBzeXN0ZW0gaXMgcmVib290ZWQuIFlvdSdsbCBhbHNvIGJlIGFibGUgdG8gdXNlIHN0YW5kYXJkIFVwc3RhcnQgY29tbWFuZHMgdG8gCittYW5hZ2UgdGhlIGBgYnJsdHR5YGAgam9iLiBUaGUgbW9zdCBjb21tb24gb25lcyBhcmU6OgorCisgICBzdGF0dXMgYnJsdHR5CisgICBzdGFydCBicmx0dHkKKyAgIHN0b3AgYnJsdHR5CisKK0ZvciBleGFtcGxlOiBZb3UgZG9uJ3QgbmVlZCB0byByZWJvb3QgdGhlIHN5c3RlbSBpbiBvcmRlciB0byBzdGFydCBCUkxUVFkuCitKdXN0IHVzZSBVcHN0YXJ0J3MgYGBzdGFydGBgIGNvbW1hbmQgdG8gc3RhcnQgaXQgcmlnaHQgYXdheS4KZGlmZiAtLWdpdCBhL0RvY3VtZW50cy9SRUFETUUuV2luZG93cyBiL0RvY3VtZW50cy9SRUFETUUuV2luZG93cwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZmNlY2ZlCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRzL1JFQURNRS5XaW5kb3dzCkBAIC0wLDAgKzEsNzQ1IEBACit+fn5+fn5+fn5+fn5+fn5+fgorQlJMVFRZIG9uIFdpbmRvd3MKK35+fn5+fn5+fn5+fn5+fn5+CisKKy4uIGluY2x1ZGU6OiBwcm9sb2d1ZS5yc3QKKy4uIF9DeWd3aW4ncyBXZWIgU2l0ZTogaHR0cDovL3d3dy5jeWd3aW4uY29tLworLi4gX01pbkdXJ3MgV2ViIFNpdGU6IGh0dHA6Ly9taW5ndy5zb3VyY2Vmb3JnZS5uZXQvCisuLiBfTGliVVNCLVdpbjMyJ3MgV2ViIFNpdGU6IGh0dHA6Ly9saWJ1c2Itd2luMzIuc291cmNlZm9yZ2UubmV0LworLi4gX0xpYlVTQi0xLjAncyBXZWIgU2l0ZTogaHR0cDovL3d3dy5saWJ1c2Iub3JnL3dpa2kvd2luZG93c19iYWNrZW5kCisuLiBfQ3lnd2luIFBvcnRzOiBodHRwOi8vY3lnd2lucG9ydHMub3JnLworLi4gX0N5Z3dpbiBqYXZhLWVjaiBqYXI6IGZ0cDovL3NvdXJjZXdhcmUub3JnL3B1Yi9qYXZhL2Vjai00LjUuamFyCisKK0J1aWxkaW5nIEJSTFRUWQorPT09PT09PT09PT09PT09CisKK1N5c3RlbSBSZXF1aXJlbWVudHMKKy0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIGVhcmxpZXN0IHJlbGVhc2Ugb2YgV2luZG93cyB0aGF0IGlzIHN1cHBvcnRlZCBieSBCUkxUVFkgaXMgV2luZG93cyA5OC4KKworUHJlLWJ1aWx0IHZlcnNpb25zIG9mIEJSTFRUWSBhcmUgYXZhaWxhYmxlIGZvciBkb3dubG9hZCBvbgorYEJSTFRUWSdzIFdlYiBTaXRlYF8uIFRoZWlyIG5hbWVzIGJlZ2luIHdpdGggYGBicmx0dHktd2luLWBgLiBUaG9zZSB3aXRoIHRoZQorYGAuemlwYGAgZXh0ZW5zaW9uIGFyZSBhcmNoaXZlcywgYW5kIHRob3NlIHdpdGggdGhlIGBgLmV4ZWBgIGV4dGVuc2lvbiBhcmUKK2luc3RhbGxlcnMuCisKK0luIG9yZGVyIHRvIGJ1aWxkIEJSTFRUWSB5b3Vyc2VsZiBmcm9tIGEgcHJlcGFyZWQgc291cmNlIHRhcmJhbGwsIHlvdSdsbCBuZWVkCitDeWd3aW4gKHNlZSBgQ3lnd2luJ3MgV2ViIFNpdGVgXykgYW5kL29yIE1pbkdXIChzZWUgYE1pbkdXJ3MgV2ViIFNpdGVgXykuCitZb3UnbGwgYWxzbyBuZWVkIHRoZSBmb2xsb3dpbmcgYWRkaXRpb25hbCBwYWNrYWdlczoKKworKiAgZ2NjCisqICBtYWtlCisqICB3MzJhcGkgKHZlcnNpb24gMy42IG9yIGxhdGVyKQorCitJZiB5b3UnZCBsaWtlIHRvIGJ1aWxkIEJSTFRUWSBmcm9tIGl0cyBzb3VyY2UgcmVwb3NpdG9yeSAocmF0aGVyIHRoYW4gZnJvbSBvbmUKK29mIHRoZSBwcmVwYXJlZCBzb3VyY2UgdGFyYmFsbHMpIHRoZW4geW91J2xsIGFsc28gbmVlZCB0aGVzZSBwYWNrYWdlczoKKworKiAgYXV0b2NvbmYKKyogIHRjbHRrCisKK0lmIHlvdSdkIGxpa2UgdG8gcHJlcGFyZSB0aGUgZG9jdW1lbnRhdGlvbiAoYnkgZG9pbmcgYGBtYWtlYGAgd2l0aGluIHRoZQorYGBEb2N1bWVudHMvYGAgc3ViZGlyZWN0b3J5KSB0aGVuIHlvdSdsbCBuZWVkIHRoZXNlIHBhY2thZ2VzOgorCisqICBsaW51eGRvYy10b29scyAobm90IHByZS1wYWNrYWdlZCBpbiBDeWd3aW4pCisqICBkb3h5Z2VuCisKK0lmIHlvdSdyZSB1c2luZyBNU1lTICh0aGUgTWluR1cgY29tbWFuZCBzaGVsbCkgZm9yIHJ1bm5pbmcgYGBjb25maWd1cmVgYCBhbmQKK2BgbWFrZWBgLCB5b3Ugc2hvdWxkIGFsd2F5cyB1c2UgV2luZG93cy1saWtlIHBhdGhzIChlLmcuIGBgYzovYnJsdHR5YGApIHJhdGhlcgordGhhbiBNU1lTIHBhdGhzIChlLmcuIGBgL2MvYnJsdHR5YGApIGJlY2F1c2UgQlJMVFRZIGRvZXMgKipub3QqKiB1bmRlcnN0YW5kCitNU1lTIHBhdGhzLgorCitXaW5kb3dzIDk4IGFuZCBNRSBMaW1pdGF0aW9uCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK09uIFdpbmRvd3MgdmVyc2lvbnMgMjAwMCwgWFAsIDIwMDMsIGFuZCBsYXRlciwgQlJMVFRZIGF1dG9tYXRpY2FsbHkgYWNjZXNzZXMKK3RoZSBXaW5kb3dzIGNvbnNvbGUgdGhhdCB5b3UncmUgY3VycmVudGx5IHVzaW5nIGFzIHlvdSBzd2l0Y2ggYmV0d2VlbiB0aGVtLgorVGhpcyBpc24ndCBwb3NzaWJsZSBvbiBlYXJsaWVyIHZlcnNpb25zLiBPbmUgd2F5IHRvIHN0aWxsIGFjaGlldmUgdGhpcworZnVuY3Rpb25hbGl0eSwgdGhvdWdoLCBpcyB0byBydW4gb25lIEJSTFRUWSBvbiB0aGUgcm9vdCB3aW5kb3cgdGhhdCBkaXJlY3RseQorYWNjZXNzZXMgeW91ciBicmFpbGxlIGRldmljZSwgYW5kIGFub3RoZXIgb25lIG9uIGVhY2ggY29uc29sZSB0aGF0IGluZGlyZWN0bHkKK2FjY2Vzc2VzIHlvdXIgYnJhaWxsZSBkZXZpY2UgdmlhIEJybEFQSS4gVGhpcyBzY2hlbWUgbWF5IHNvdW5kIGNvbXBsaWNhdGVkLAorYnV0IGl0IGNhbiBiZSBzZXQgdXAgdG8gcnVuIGF1dG9tYXRpY2FsbHkuCisKK1RoZSBmaXJzdCAob3Igcm9vdCkgQlJMVFRZIHNob3VsZCBiZSBydW4gYXMgcGFydCBvZiBXaW5kb3dzIHN0YXJ0dXAuIEl0IG11c3QgYmUKK3J1biB3aXRoIHRoZSBvcHRpb25zIHRoYXQgYXJlIG5lY2Vzc2FyeSBmb3IgaXQgdG8gYWNjZXNzIHlvdXIgYnJhaWxsZSBkZXZpY2UsCitlLmcuIGBgLWJgYCAodG8gc3BlY2lmeSB0aGUgZHJpdmVyKSwgYGAtZGBgICh0byBzcGVjaWZ5IHRoZSBkZXZpY2UpLCBhbmQKKyhtYXliZSkgYGAtQmBgICh0byBzcGVjaWZ5IGRyaXZlci1zc3BlY2lmaWMgcGFyYW1ldGVycykuIEl0IG11c3QgYWxzbyBiZSBnaXZlbgordGhlIGBgLVhyb290PXllc2BgIG9wdGlvbiAod2hpY2ggYXR0YWNoZXMgaXQgdG8gdGhlIHJvb3Qgd2luZG93KS4KKworQW4gYWRkaXRpb25hbCBCUkxUVFkgbXVzdCB0aGVuIGJlIHJ1biBmb3IgZWFjaCBuZXcgY29uc29sZS4gSXQgc2hvdWxkIGJlCitpbnZva2VkIGxpa2UgdGhpczo6CisKKyAgIGJybHR0eSAtYmJhIC1OCisKK1RoZSBgYC1iYmFgYCBvcHRpb24gdGVsbHMgaXQgdG8gYWNjZXNzIHRoZSByb290IEJSTFRUWSB2aWEgQnJsQVBJLCBhbmQgdGhlCitgYC1OYGAgb3B0aW9uIHRlbGxzIGl0IG5vdCB0byBzdGFydCBhIEJybEFQSSBzZXJ2ZXIgb2YgaXRzIG93bi4KKworVGhlc2UgKG5vbi1yb290KSBCUkxUVFlzIGNhbiBiZSBzdGFydGVkIGF1dG9tYXRpY2FsbHkgYnksIGZvciBleGFtcGxlLCBpbnZva2luZwordGhlbSBmcm9tIHlvdXIgYGAuYmFzaHJjYGAgc2NyaXB0LiBFYWNoIG9mIHRoZXNlIEJSTFRUWXMgb25seSByZXZpZXdzIHRoZQorY29uc29sZSBpdCdzIHJ1bm5pbmcgd2l0aGluLCBhbmQgY29ubmVjdHMsIHZpYSBCcmxBUEksIHRvIHRoZSByb290IEJSTFRUWSBpbgorb3JkZXIgdG8gYWNjZXNzIHlvdXIgYnJhaWxsZSBkZXZpY2UuCisKK0lmIHlvdSdyZSBub3QgY29uY2VybmVkIHdpdGggc2VjdXJpdHksIGFuZCB3b3VsZCByYXRoZXIgbm90IGZpZGRsZSB3aXRoIHRoZQorYGBicmxhcGkua2V5YGAgZmlsZSwgdGhlbiBhZGQgdGhlIGBgLUFhdXRoPW5vbmVgYCBvcHRpb24gdG8gdGhlIGNvbW1hbmQgbGluZQordGhhdCBzdGFydHMgdGhlIHJvb3QgQlJMVFRZLiBZb3UgZG9uJ3QgbmVlZCB0byB3b3JyeSBhYm91dCB1bmF1dGhvcml6ZWQgYWNjZXNzCitvdmVyIHRoZSBuZXR3b3JrIHNpbmNlIHRoZSBkZWZhdWx0IGlzIHRoYXQgb25seSBsb2NhbGx5IHJ1bm5pbmcgcHJvZ3JhbXMgY2FuCitjb25uZWN0IHRvIEJybEFQSS4KKworUGFja2FnZSBNYW5hZ2VtZW50IHZpYSB0aGUgQ29tbWFuZCBMaW5lCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworTWFuYWdpbmcgQ3lnd2luIFBhY2thZ2VzCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKworQSBjb252ZW5pZW50IHdheSB0byBtYW5hZ2UgQ3lnd2luIHBhY2thZ2VzIGZyb20gdGhlIGNvbW1hbmQgbGluZQoraXMgdG8gdXNlIHRoZSBgYGFwdC1jeWdgYCBjb21tYW5kLgorSXQncyBzaW1pbGFyIHRvIHRoZSBgYGFwdC1nZXRgYCBjb21tYW5kIHdoaWNoIHNvbWUgTGludXggZGlzdHJpYnV0aW9ucyB1c2UuCisKK0FzIG9mIHRoZSB0aW1lIG9mIHRoaXMgd3JpdGluZywgdGhpcyBpcyBob3cgeW91IGNhbiBpbnN0YWxsIGl0OjoKKworICAgc3ZuIC0tZm9yY2UgZXhwb3J0IGh0dHA6Ly9hcHQtY3lnLmdvb2dsZWNvZGUuY29tL3N2bi90cnVuay8gL3Vzci9sb2NhbC9iaW4vCisgICBjaG1vZCAreCAvdXNyL2xvY2FsL2Jpbi9hcHQtY3lnCisKK0lmIHlvdSdyZSB1c2luZyB0aGUgNjQtYml0IEN5Z3dpbiBwbGF0Zm9ybSwgdGhlbiwgYWZ0ZXIgaW5zdGFsbGluZyBhcHQtY3lnLAoreW91J2xsIG5lZWQgdG8gbWFrZSBhIGNvdXBsZSBvZiBzaW1wbGUgbW9kaWZpY2F0aW9ucyB0byBpdC4gVXNpbmcgeW91cgorZmF2b3VyaXRlIHRleHQgZWRpdG9yLCBhbmQgcmVtZW1iZXJpbmcgdGhhdCB0aGUgYWN0dWFsIGxpbmUgbnVtYmVycyB3aXRoaW4geW91cgordmVyc2lvbiBtYXkgZGlmZmVyIGZyb20gdGhvc2Ugc2hvd24gYmVsb3csIGVkaXQgYGAvdXNyL2xvY2FsL2Jpbi9hcHQtY3lnYGAgYW5kCittYWtlIHRoZSBmb2xsb3dpbmcgY2hhbmdlczoKKworMSkgT24gbGluZSA5OCwgY2hhbmdlIGBgJG1pcnJvci9zZXR1cC5iejJgYCB0byBgYCRtaXJyb3IveDg2XzY0L3NldHVwLmJ6MmBgLgorCisyKSBPbiBsaW5lIDEwNSwgY2hhbmdlIGBgJG1pcnJvci9zZXR1cC5pbmlgYCB0byBgYCRtaXJyb3IveDg2XzY0L3NldHVwLmluaWBgLgorCitUbyBzZWFyY2ggZm9yIGEgcGFja2FnZSwgeW91IGNhbiBkbzoKKworLi4gcGFyc2VkLWxpdGVyYWw6OiBhcHQtY3lnIGZpbmQgKnBhdHRlcm4qCisKK1RvIGluc3RhbGwgYSBwYWNrYWdlLCB5b3UgY2FuIGRvOgorCisuLiBwYXJzZWQtbGl0ZXJhbDo6IGFwdC1jeWcgaW5zdGFsbCAqbmFtZSoKKworRm9yIGZ1bGwgZGV0YWlscywgeW91IGNhbiBkbzoKKworLi4gcGFyc2VkLWxpdGVyYWw6OiBhcHQtY3lnIGhlbHAKKworTWFuYWdpbmcgTWluR1cgUGFja2FnZXMKK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisKK0EgY29udmVuaWVudCB3YXkgdG8gbWFuYWdlIE1pbkdXIHBhY2thZ2VzIGZyb20gdGhlIGNvbW1hbmQgbGluZQoraXMgdG8gdXNlIHRoZSBgYG1pbmd3LWdldGBgIGNvbW1hbmQuCitCZSBzdXJlIHRvIGludm9rZSBpdCB3aXRoIGFyZ3VtZW50cyBiZWNhdXNlCit3aGVuIGludm9rZWQgd2l0aCBubyBhcmd1bWVudHMgaXRzIGdyYXBoaWNhbCBpbnRlcmZhY2UgaXMgdXNlZC4KKworVG8gbGlzdCBhbGwgb2YgdGhlIHBhY2thZ2VzLCB5b3UgY2FuIGRvOgorCisuLiBwYXJzZWQtbGl0ZXJhbDo6IG1pbmd3LWdldCBsaXN0CisKK1RvIGluc3RhbGwgYSBwYWNrYWdlLCB5b3UgY2FuIGRvOgorCisuLiBwYXJzZWQtbGl0ZXJhbDo6IG1pbmd3LWdldCBpbnN0YWxsICpuYW1lKgorCitGb3IgZnVsbCBkZXRhaWxzLCB5b3UgY2FuIGRvOgorCisuLiBwYXJzZWQtbGl0ZXJhbDo6IG1pbmd3LWdldCAtaAorCitVU0IgU3VwcG9ydAorLS0tLS0tLS0tLS0KKworVVNCIGRldmljZXMgYXJlIHN1cHBvcnRlZCB0aGFua3MgdG8gdGhlIGBgTGliVVNCLVdpbjMyYGAgYW5kIHRoZSBgYExpYlVTQi0xLjBgYAorcGFja2FnZXMuIElmIGJvdGggYXJlIGluc3RhbGxlZCwgcHJlZmVycmVuY2UgaXMgZ2l2ZW4gdG8gYGBMaWJVU0ItMS4wYGAuCisKK1ByZS1idWlsdCB2ZXJzaW9ucyBvZiBCUkxUVFkgaGF2ZSBVU0Igc3VwcG9ydCBjb21waWxlZCBpbiwgYW5kIHRoZSByZXF1aXJlZAorV2luZG93cyBkcml2ZXJzIGFyZSBhbHNvIGluY2x1ZGVkLCBzbyB5b3UganVzdCBuZWVkIHRvIGxldCB0aGUgaW5zdGFsbGVyIHNldAordGhlbSB1cC4KKworSW4gb3JkZXIgdG8gYnVpbGQgQlJMVFRZIHlvdXJzZWxmIHdpdGggVVNCIHN1cHBvcnQgZW5hYmxlZCwgeW91J2xsIG5lZWQgdG8KKyoqZmlyc3QqKiBpbnN0YWxsIGF0IGxlYXN0IG9uZSBvZiBMaWJVU0ItV2luMzIgb3IgTGliVVNCLTEuMC4KKworTGliVVNCLVdpbjMyCit+fn5+fn5+fn5+fn4KKworQXQgdGhlIHRpbWUgb2YgdGhpcyB3cml0aW5nLCBMaWJVU0ItV2luMzIgYmluYXJpZXMgY2FuIGJlIGZvdW5kIG9uCitgTGliVVNCLVdpbjMyJ3MgV2ViIFNpdGVgXy4gVGhleSdsbCBiZSBuYW1lZCBzb21ldGhpbmcgbGlrZQorYGBsaWJ1c2Itd2luMzItYmluLTx2ZXJzaW9uPi5leGVgYCwgYW5kIHNob3VsZCBiZSBhdmFpbGFibGUgb24KK2BgaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wcm9qZWN0L3Nob3dmaWxlcy5waHA/Z3JvdXBfaWQ9NzgxMzhgYC4KKworKiAgT24gQ3lnd2luOgorCisgICAxKSBJbnN0YWxsIHRoZSBgYGxpYnVzYi13aW4zMmBgIHBhY2thZ2UuCisKKyogIE9uIE1pbkdXOgorCisgICAxKSBVbnBhY2sgdGhlIGFyY2hpdmUgc29tZXdoZXJlLgorCisgICAyKSBTeW1saW5rIHRoZSBoZWFkZXIgYW5kIGxpYnJhcnkgZmlsZXMgaW50byB5b3VyIE1pbkdXCisgICAgICBpbnN0YWxsYXRpb246OgorCisgICAgICAgICBsbiAtcyBMaWJVU0ItV2luMzIvaW5jbHVkZS9sdXNiMF91c2IuaCAvbWluZ3cvaW5jbHVkZS91c2IuaAorICAgICAgICAgbG4gLXMgTGliVVNCLVdpbjMyL2xpYi9nY2MvbGlidXNiLmEgL21pbmd3L2xpYi8KKyAgICAgICAgIGxuIC1zIExpYlVTQi1XaW4zMi9iaW4veDg2L2xpYnVzYjBfeDg2LmRsbCAvbWluZ3cvYmluL2xpYnVzYjAuZGxsCisKK0luIG9yZGVyIHRvIGJlIGFibGUgdG8gdXNlIHRoZSBMaWJVU0ItV2luMzIgZHJpdmVyLCB5b3UnbGwgbmVlZCB0byBjb3B5IGl0cworcnVuLXRpbWUgZmlsZXMgaW50byBCUkxUVFkncyBzb3VyY2UgdHJlZTo6CisKKyAgIGNwIExpYlVTQi1XaW4zMi9iaW4veDg2L2xpYnVzYjAuc3lzIGJybHR0eS9ob3RwbHVnL2xpYnVzYjAuc3lzCisgICBjcCBMaWJVU0ItV2luMzIvYmluL3g4Ni9saWJ1c2IwX3g4Ni5kbGwgYnJsdHR5L2hvdHBsdWcvbGlidXNiMC5kbGwKKyAgIGNwIExpYlVTQi1XaW4zMi9iaW4vYW1kNjQvbGlidXNiMC5zeXMgYnJsdHR5L2hvdHBsdWcvbGlidXNiMF94NjQuc3lzCisgICBjcCBMaWJVU0ItV2luMzIvYmluL2FtZDY0L2xpYnVzYjAuZGxsIGJybHR0eS9ob3RwbHVnL2xpYnVzYjBfeDY0LmRsbAorCitUaGVuLCBlaXRoZXIgcmlnaHQtY2xpY2sgb24gYGBicmx0dHkvaG90cGx1Zy9icmx0dHkuaW5mYGAgYW5kIHNlbGVjdAorYGBpbnN0YWxsYGAsIG9yLCBvbiBicmFpbGxlIGRldmljZSBwbHVnLCBwb2ludCBhdCB0aGUKK2BgYnJsdHR5L2hvdHBsdWcvYnJsdHR5LmluZmBgIGZpbGUuCisKK0xpYlVTQi0xLjAKK35+fn5+fn5+fn4KKworQXMgb2YgdGhlIHRpbWUgb2YgdGhpcyB3cml0aW5nLCBMaWJVU0ItMS4wIGJpbmFyeSBzbmFwc2hvdHMgY2FuIGJlIGZvdW5kIG9uCitgTGliVVNCLTEuMCdzIFdlYiBTaXRlYF8uIFRoZXknbGwgYmUgbmFtZWQgc29tZXRoaW5nIGxpa2UKK2BgbGlidXNiXzxkYXRlPi43emBgLgorCisqICBPbiBDeWd3aW46CisKKyAgIDEpIEluc3RhbGwgdGhlIGBgbGlidXNiMS4wLWRldmVsYGAgcGFja2FnZS4KKworKiAgT24gTWluR1c6CisKKyAgIDEpIFVucGFjayB0aGUgYXJjaGl2ZSBzb21ld2hlcmUuCisKKyAgIDIpIFN5bWxpbmsgdGhlIGhlYWRlciBhbmQgbGlicmFyeSBmaWxlcyBpbnRvIHlvdXIgTWluR1cKKyAgICAgIGluc3RhbGxhdGlvbjo6CisKKyAgICAgICAgIGxuIC1zIExpYlVTQi0xLjAvaW5jbHVkZS9saWJ1c2J4LTEuMCAvbWluZ3cvaW5jbHVkZS9saWJ1c2ItMS4wCisgICAgICAgICBsbiAtcyBMaWJVU0ItMS4wL01pbkdXMzIvZGxsL2xpYnVzYi0xLjAuZGxsLmEgL21pbmd3L2xpYi8KKyAgICAgICAgIGxuIC1zIExpYlVTQi0xLjAvTWluR1czMi9kbGwvbGlidXNiLTEuMC5kbGwgL21pbmd3L2Jpbi8KKworICAgMykgQ29weSB0aGUgZmlsZSBgYGxpYnVzYi0xLjAucGNgYCBpbiB0aGUgYGBXaW5kb3dzL2BgIHN1YmRpcmVjdG9yeSBvZgorICAgICAgQlJMVFRZJ3Mgc291cmNlIHRyZWUgaW50byBNaW5HVydzIGBgL21pbmd3L2xpYi9wa2djb25maWcvYGAgZGlyZWN0b3J5LiBJZgorICAgICAgdGhlIGBgcGtnY29uZmlnL2BgIHN1YmRpcmVjdG9yeSBkb2Vzbid0IGFscmVhZHkgZXhpc3QgdGhlbiBjcmVhdGUgaXQuCisKK0luIG9yZGVyIHRvIGJlIGFibGUgdG8gdXNlIHRoZSBMaWJVU0ItMS4wIGRyaXZlciwgeW91J2xsIG5lZWQgdG8gZWl0aGVyCityaWdodC1jbGljayBvbiBgYGJybHR0eS9ob3RwbHVnL2JybHR0eS1saWJ1c2ItMS4wLmluZmBgIGFuZCBzZWxlY3QgYGBpbnN0YWxsYGAsCitvciwgb24gYnJhaWxsZSBkZXZpY2UgcGx1ZywgcG9pbnQgYXQgdGhlCitgYGJybHR0eS9ob3RwbHVnL2JybHR0eS1saWJ1c2ItMS4wLmluZmBgIGZpbGUuCisKK0NvbmZpZ3VyaW5nIGEgQlJMVFRZIEJ1aWxkCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitTb21lIG9mIEJSTFRUWSdzIGNvbmZpZ3VyZSBvcHRpb25zIGFyZSBvZiBwYXJ0aWN1bGFyIGludGVyZXN0IHRvIHVzZXJzIG9mIHRoZSAKK1dpbmRvd3MgcGxhdGZvcm06CisKKy0tZW5hYmxlLXJlbG9jYXRhYmxlLWluc3RhbGwKKyAgIFRoZSBkZWZhdWx0IGlzIGZvciBCUkxUVFkgdG8gcmVmZXIgdG8gaXRzIGNvbXBvbmVudHMgdmlhIGFic29sdXRlIHBhdGhzLiBPbgorICAgdGhlIFdpbmRvd3MgcGxhdGZvcm0sIGhvd2V2ZXIsIHRoZSBjb252ZW50aW9uIGlzIGZvciBhIHBhY2thZ2UgdG8gdXNlCisgICByZWxhdGl2ZSBwYXRocyBzbyB0aGF0IGl0J3MgZW50aXJlbHkgc2VsZi1jb250YWluZWQuIFRoaXMgZW5hYmxlcyBpdCB0byBiZQorICAgaW5zdGFsbGVkIGludG8gYW4gYXJiaXRyYXJ5IGRpcmVjdG9yeSwgYW5kIHRvIGJlIG1vdmVkIGFyb3VuZCB0aGVyZWFmdGVyIGF0CisgICB3ZWxsLiBUaGlzIG9wdGlvbiBidWlsZHMgQlJMVFRZIHN1Y2ggdGhhdCByZWxhdGl2ZSBwYXRocyBhcmUgdXNlZC4KKworTWlzc2luZyBKYXZhIENsYXNzIERlZmluaXRpb25zIG9uIEN5Z3dpbgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitZb3UgbWF5IGdldCBhIEphdmEgZmFpbHVyZSB0aGF0IGxvb2tzIHNvbWV0aGluZyBsaWtlIHRoaXM6OgorCisgICBFeGNlcHRpb24gaW4gdGhyZWFkICJtYWluIiBqYXZhLmxhbmcuTm9DbGFzc0RlZkZvdW5kRXJyb3I6CisgICBvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuY29tcGlsZXIuYmF0Y2guR0NDTWFpbgorICAgICAgYXQgZ251LmphdmEubGFuZy5NYWluVGhyZWFkLnJ1bihVbmtub3duIFNvdXJjZSkKKyAgIENhdXNlZCBieTogamF2YS5sYW5nLkNsYXNzTm90Rm91bmRFeGNlcHRpb246CisgICBvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuY29tcGlsZXIuYmF0Y2guR0NDTWFpbgorICAgbm90IGZvdW5kIGluIGdudS5nY2oucnVudGltZS5TeXN0ZW1DbGFzc0xvYWRlcgorICAge3VybHM9W10sIHBhcmVudD1nbnUuZ2NqLnJ1bnRpbWUuRXh0ZW5zaW9uQ2xhc3NMb2FkZXJ7dXJscz1bXSwgcGFyZW50PW51bGx9fQorCitUaGlzIHByb2JsZW0gb2NjdXJzIHdoZW4gdGhlIGBgamF2YS1lY2pgYCBwYWNrYWdlIGlzbid0IGluc3RhbGxlZC4gSXQgY2FuIGJlCitvYnRhaW5lZCBmcm9tIGBDeWd3aW4gUG9ydHNgXy4gWW91IGNhbiBhbHNvIHJlc29sdmUgdGhlIHByb2JlbSBieSBkb3dubG9hZGluZwordGhlIGBDeWd3aW4gamF2YS1lY2ogamFyYF8sIGFuZCBpbnN0YWxsaW5nIGl0IGludG8gYGAvdXNyL3NoYXJlL2phdmEvZWNqLmphcmBgLgorCitVc2luZyBCUkxUVFkKKz09PT09PT09PT09PQorCitXaW5kb3dzIFNjcmlwdHMgZm9yIE1hbmFnaW5nIEJSTFRUWQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlc2UgYGAuYmF0YGAgc2NyaXB0cyBhcmUgaW4gdGhlIHRvcC1sZXZlbCBmb2xkZXIgd2hlcmUgQlJMVFRZIGhhcyBiZWVuIGluc3RhbGxlZC4KK1RoZXkgc2hvdWxkIGJlIHJ1biBieSBhIHVzZXIgdGhhdCBoYXMgYWRtaW5pc3RyYXRpdmUgcHJpdmlsZWdlcy4KKworYGBydW4tYnJsdHR5LmJhdGBgCit+fn5+fn5+fn5+fn5+fn5+fn4KKworTWFudWFsbHkgcnVuIEJSTFRUWSB3aXRoIGEgbG9nIGxldmVsIG9mIGBgaW5mb2BgLgorTG9ncyBhcmUgd3JpdHRlbiB0byB0aGUgZmlsZSBgYGJybHR0eS5sb2dgYAoraW4gdGhlIHRvcC1sZXZlbCBmb2xkZXIgd2hlcmUgQlJMVFRZIGhhcyBiZWVuIGluc3RhbGxlZC4KK0FsbCBhcmd1bWVudHMgYXJlIHBhc3NlZCB0aHJvdWdoIHRvIEJSTFRUWS4KKworYGBkZWJ1Zy1icmx0dHkuYmF0YGAKK35+fn5+fn5+fn5+fn5+fn5+fn5+CisKK01hbnVhbGx5IHJ1biBCUkxUVFksIHZpYSB0aGUgYGBydW4tYnJsdHR5LmJhdGBgIHNjcmlwdCwgd2l0aCBvcHRpb25zIHRoYXQKK3NldCB0aGUgbG9nIGxldmVsIHRvIGBgZGVidWdgYCBhbmQgZW5hYmxlIHNldmVyYWwgdXNlZnVsIGxvZyBjYXRlZ29yaWVzLgorQWxsIGFyZ3VtZW50cyBhcmUgcGFzc2VkIHRocm91Z2ggdG8gdGhlIGBgcnVuLWJybHR0eS5iYXRgYCBzY3JpcHQuCisKK2Bga2lsbC1icmx0dHkuYmF0YGAKK35+fn5+fn5+fn5+fn5+fn5+fn4KKworRm9yY2VhYmx5IHRlcm1pbmF0ZSB0aGUgbWFudWFsbHktcnVuIEJSTFRUWSBwcm9jZXNzLgorCitgYGVuYWJsZS1icmxhcGkuYmF0YGAKK35+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKworSW5zdGFsbCB0aGUgQnJsQVBJIHNlcnZpY2UgYW5kIHN0YXJ0IGl0LgorCitgYGRpc2FibGUtYnJsYXBpLmJhdGBgCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKworU3RvcCB0aGUgQnJsQVBJIHNlcnZpY2UgYW5kIHVuaW5zdGFsbCBpdC4KKworU3RpY2tpbmcgdG8gYSBDb25zb2xlCistLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworSXQgbWF5IGJlIHVzZWZ1bCB0byBoYXZlIEJSTFRUWSBvbmx5IHJldmlldyB0aGUgY29uc29sZSB0aGF0IGl0J3Mgc3RhcnRlZCBpbiwKK2kuZS4gIGZvciBpdCBub3QgdG8gZm9sbG93IHRoZSBrZXlib2FyZCBmb2N1cy4gVG8gYWNoaWV2ZSB0aGlzLCBzZXQgdGhlCitgYEZvbGxvd0ZvY3VzYGAgcGFyYW1ldGVyIG9mIEJSTFRUWSdzIGBgV2luZG93c2BgIHNjcmVlbiBkcml2ZXIgdG8gYGBub2BgLiBUaGlzCitjYW4gYmUgZG9uZToKKworT24gdGhlIENvbW1hbmQgTGluZToKKyAgIGBgLVh3bjpGb2xsb3dGb2N1cz1ub2BgCisKK0luIGBgYnJsdHR5LmNvbmZgYDoKKyAgIGBgc2NyZWVuLXBhcmFtZXRlciB3bjpGb2xsb3dGb2N1cz1ub2BgCisKK1NoYXJpbmcgdGhlIEJyYWlsbGUgRGV2aWNlIHdpdGggT3RoZXIgU2NyZWVuIFJlYWRlcnMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworV2hlbiB5b3UncmUgbm90IG9uIGEgd2luZG93IHRoYXQgQlJMVFRZIGNhbiBoYW5kbGUsIGl0cyBkZWZhdWx0IGFjdGlvbiBpcyB0bworcmV0YWluIGNvbnRyb2wgb2YgdGhlIGJyYWlsbGUgZGV2aWNlIGFuZCB0byBwcmVzZW50IGEgc2hvcnQgbWVzc2FnZSBleHBsYWluaW5nCit0aGUgcHJvYmxlbS4gSWYgeW91IGhhdmUgYW5vdGhlciBicmFpbGxlLWNhcGFibGUgc2NyZWVuIHJlYWRlciBhbmQgd291bGQgbGlrZQoraXQgdG8gdGFrZSBvdmVyIGluc3RlYWQsIHRoZW4gYm90aCBCUkxUVFkgYW5kIHRoYXQgb3RoZXIgc2NyZWVuIHJlYWRlciBtdXN0IGJlCitpbnN0cnVjdGVkIHRvIHNoYXJlIHRoZSBicmFpbGxlIGRldmljZS4KKworQlJMVFRZIGNhbiBiZSBpbnN0cnVjdGVkIHRvIHNoYXJlIHRoZSBicmFpbGxlIGRldmljZSB2aWEgaXRzCitgYC0tcmVsZWFzZS1kZXZpY2VgYCBvcHRpb24gKHRoZSBzaG9ydCBmb3JtIG9mIHRoaXMgb3B0aW9uIGlzIGBgLXJgYCkuIFdoZW4KK3RoaXMgb3B0aW9uIGlzIGluIGVmZmVjdCwgQlJMVFRZIHJlbGVhc2VzIHRoZSBicmFpbGxlIGRldmljZSB3aGVuIHlvdSBtb3ZlIG9udG8KK2Egd2luZG93IHRoYXQgaXQgY2FuJ3QgaGFuZGxlLCBhbmQgdGhlbiB0cmllcyB0byByZWdhaW4gY29udHJvbCBvZiB0aGUgYnJhaWxsZQorZGV2aWNlIHdoZW4geW91IG1vdmUgb250byBhIHdpbmRvdyB0aGF0IGl0IGNhbiBoYW5kbGUuIE5vdGUgdGhhdCB0aGVzZSBhY3Rpb25zCit0YWtlIGEgbm90aWNlYWJsZSBhbW91bnQgb2YgdGltZSBzbyB5b3Ugc2hvdWxkIG9ubHkgdXNlIHRoaXMgb3B0aW9uIGlmIGl0J3MKK2FjdHVhbGx5IG5lZWRlZC4KKworU2hhcmluZyB3aXRoIEpBV1MKK35+fn5+fn5+fn5+fn5+fn5+CisKK0EgY29tbW9uIGNhc2Ugd2hlcmVpbiBhIEpBV1MgdXNlciBtaWdodCB3YW50IEJSTFRUWSB0byBiZSBpbiBjb250cm9sIG9mIHRoZQorYnJhaWxsZSBkZXZpY2Ugd2hlbiBvbiBhIGNvbnNvbGUgd2luZG93IGlzIHdoZW4gdXNpbmcgQ3lnd2luLgorCitUaGVyZSBhcmUgdHdvIHBoYXNlcyB0byBjb25maWd1cmluZyBKQVdTIHRvIHJ1biBpbiB0aGUgYmFja2dyb3VuZCB3aGlsZSBCUkxUVFkKK2NvbnRyb2xzIHRoZSBicmFpbGxlIGRldmljZS4gRmlyc3QsIGEgdXNhYmxlIHdpbmRvdyB0aXRsZSBtdXN0IGJlIGVzdGFibGlzaGVkCithbmQgc3RhYmxlLiBTZWNvbmQsIEpBV1MgYnJhaWxsZSBtdXN0IGJlIHB1dCB0byBzbGVlcC4KKworLi4gdG9waWM6OiBXaGF0IGlzIGEgV2luZG93IFRpdGxlPworCisgICBFdmVyeSB3aW5kb3cgaW4gV2luZG93cyBoYXMgYSB0aXRsZSBiYXIgdGhhdCBjb250YWlucyB0aGUgbmFtZSBvZiB0aGUKKyAgIGFwcGxpY2F0aW9uIHRoYXQncyBydW5uaW5nIGluIGl0LCBhcyB3ZWxsIGFzIHNvbWUgY29udHJvbHMgdG8gZG8gdGhpbmdzIGxpa2UKKyAgIG1vdmUgYW5kIHJlc2l6ZSB0aGUgd2luZG93LiBCUkxUVFkgZG9lc24ndCBzaG93IHRoaXMgdGl0bGUgYmFyLgorCisgICBGb3IgYSBwcm9ncmFtIHdpbmRvdywgSkFXUyB1c2VzIHRoZSBuYW1lIG9mIHRoZSBwcm9ncmFtJ3MgZXhlY3V0YWJsZSBhcyB0aGUKKyAgIG5hbWUgb2YgdGhlIGNvbmZpZ3VyYXRpb24gZmlsZXMgdG8gbG9hZCB3aGVuIHRoYXQgcHJvZ3JhbSBnYWlucyBmb2N1cy4gRm9yIGEKKyAgIGNvbnNvbGUgYXBwbGljYXRpb24gc3VjaCBhcyBDeWd3aW4sIGhvd2V2ZXIsIGl0IHVzZXMgdGhlIHRpdGxlIG9mIHRoZSB3aW5kb3cKKyAgIGluc3RlYWQuIFlvdSBtdXN0LCB0aGVyZWZvcmUsIHRlbGwgSkFXUyB3aXRoaW4gdGhlIHdpbmRvdyB0aXRsZSB0aGF0IHRoaXMgaXMKKyAgIGEgQ3lnd2luIHdpbmRvdy4KKworLi4gdG9waWM6OiBTZXR0aW5nIHRoZSBXaW5kb3cgVGl0bGUKKworICAgSkFXUyB1c2VzIG9uZSBvZiB0aGUgd29yZHMgaW4gdGhlIHdpbmRvdyB0aXRsZSBhcyB0aGUgbmFtZSBvZiB0aGUKKyAgIGNvbmZpZ3VyYXRpb24gZmlsZSBzZXQgdG8gbG9hZC4gVGhpcyBmaWxlIHNldCBpcyB3aGF0IHRlbGxzIEpBV1MgdGhlCisgICBzcGVjaWZpY3Mgb2YgaG93IHRvIGhhbmRsZSB0aGUgYXBwbGljYXRpb24uIEl0IGlzLCB0aGVyZWZvcmUsIHdoZXJlIEpBV1MKKyAgIG11c3QgYmUgaW5zdHJ1Y3RlZCB0byBwdXQgaXRzIGJyYWlsbGUgY29tcG9uZW50IHRvIHNsZWVwLgorCisgICBBcyBvZiB0aGlzIHdyaXRpbmcsIGl0IGFwcGVhcnMgdGhhdCBKQVdTIHVzZXMgdGhlIGZvbGxvd2luZyBhbGdvcml0aG0gZm9yCisgICBjaG9vc2luZyB3aGljaCB3b3JkIGluIHRoZSB0aXRsZSB0byB1c2UgYXMgdGhlIG5hbWUgb2YgdGhlIGZpbGUgc2V0OgorCisgICAxKSBJZiB0aGVyZSBhcmUgbm8gc2xhc2hlcyAoYGAvYGApIG9yIGJhY2tzbGFzaGVzIChgYFxgYCkgaW4gdGhlIHRpdGxlIHRoZW4KKyAgICAgIEpBV1MgdXNlcyB0aGUgZmlyc3Qgd29yZC4gVGh1cywgaWYgdGhlIHRpdGxlIGlzIGBgQ3lnd2luIEJhc2ggU2hlbGxgYAorICAgICAgdGhlbiBKQVdTIHdpbGwgbG9hZCB0aGUgYGBDeWd3aW5gYCBjb25maWd1cmF0aW9uIGZpbGUgc2V0LgorCisgICAyKSBJZiB0aGVyZSdzIGF0IGxlYXN0IG9uZSBzbGFzaCAoYGAvYGApIG9yIGJhY2tzbGFzaCAoYGBcYGApIGluIHRoZSB0aXRsZQorICAgICAgdGhlbiBKQVdTIHVzZXMgdGhlIGxhc3Qgd29yZC4gVGh1cywgaWYgdGhlIHRpdGxlIGlzIGBgJFBXRCAtIEN5Z3dpbmBgCisgICAgICB0aGVuIEpBV1Mgd2lsbCBzaW1pbGFybHkgbG9hZCB0aGUgYGBDeWd3aW5gYCBjb25maWd1cmF0aW9uIGZpbGUgc2V0LgorCisuLiB0b3BpYzo6IFNldHRpbmcgQ3lnd2luJ3MgV2luZG93IFRpdGxlCisKKyAgIEZpcnN0LCBpdCBpcyBpbXBlcmF0aXZlIHRoYXQgeW91IHJlcGxhY2UsIG9yIGF0IGxlYXN0IG1vZGlmeSwgdGhlIGRlZmF1bHQKKyAgIGBgUFMxYGAgKHByaW1hcnkgc2hlbGwgcHJvbXB0KSBzZXR0aW5nLiBUaGUgZGVmYXVsdCBmb3IgdGhpcyBzZXR0aW5nLCBhcworICAgZGlzdHJpYnV0ZWQgYnkgQ3lnd2luLCBwbGFjZXMgYGAkUFdEYGAgKHRoZSBwYXRoIHRvIHRoZSBjdXJyZW50IHdvcmtpbmcKKyAgIGRpcmVjdG9yeSkgaW4gdGhlIHdpbmRvdyB0aXRsZSwgdGh1cyByZXF1aXJpbmcgeW91IHRvIGhhdmUgYSBzZXBhcmF0ZSBKQVdTCisgICBjb25maWd1cmF0aW9uIGZvciBldmVyeSBkaXJlY3Rvcnkgb24gdGhlIHN5c3RlbSEgT25lIHBvc3NpYmxlIHdheSB0byByZXNvbHZlCisgICB0aGlzICJwcm9ibGVtIiBpcyB0byB1bmNvbW1lbnQgdGhlIGBgc2V0dGl0bGVgYCBmdW5jdGlvbiAod2hpY2ggY2FuIGJlIGZvdW5kCisgICBuZWFyIHRoZSBlbmQgb2YgYGAuYmFzaHJjYGApLiBUaGlzIGZ1bmN0aW9uIGFsbG93cyB5b3UgdG8gcGxhY2UgYSBzdHJpbmcgb2YKKyAgIHlvdXIgb3duIGNob2ljZSBpbiB0aGUgdGl0bGUuIFlvdSBjYW4gdXNlIHRoaXMgZnVuY3Rpb24sIHRoZXJlZm9yZSwgYXMKKyAgIGZvbGxvd3M6OgorCisgICAgICBleHBvcnQgUFJPTVBUX0NPTU1BTkQ9J3NldHRpdGxlICIkUFdEIC0gQ3lnd2luIicKKyAgICAgIGV4cG9ydCBQUzE9JyQgJworCisgICBUaGUgZmlyc3Qgb2YgdGhlc2UgbGluZXMgY2F1c2VzIHRoZSB3aW5kb3cgdGl0bGUgdG8gYmUgc2V0IGp1c3QgYmVmb3JlIGVhY2gKKyAgIHNoZWxsIHByb21wdC4gU2luY2UgYGAkUFdEYGAgYWx3YXlzIGNvbnRhaW5zIGF0IGxlYXN0IG9uZSBzbGFzaCAoYGAvYGApLCB0aGUKKyAgIG9wZXJhdGl2ZSB3b3JkIGluIHRoZSB0aXRsZSB3aWxsIGJlIGBgQ3lnd2luYGAgKHRoZSBsYXN0IHdvcmQpLCBhbmQgSkFXUywKKyAgIHRoZXJlZm9yZSwgd2lsbCBsb2FkIGFueSBgYEN5Z3dpbmBgIGNvbmZpZ3VyYXRpb24gZmlsZXMgdGhhdCBpdCBmaW5kcy4KKworICAgVGhlIHNlY29uZCBvZiB0aGVzZSBsaW5lcyBzZXRzIHRoZSBwcmltYXJ5IHNoZWxsIHByb21wdCB0byB0aGUgY3VzdG9tYXJ5CisgICBkb2xsYXIgKGBgJGBgKSBzaWduLiBNb3JlIGltcG9ydGFudGx5LCB0aG91Z2gsIGl0IHJlcGxhY2VzIEN5Z3dpbidzIGRlZmF1bHQKKyAgIGBgUFMxYGAgc2V0dGluZyB3aGljaCwgYmVjYXVzZSBpdCBjb250YWlucyBlc2NhcGUgc2VxdWVuY2VzIHRoYXQgb3ZlcndyaXRlCisgICB0aGUgdGl0bGUgd2l0aCBgYCRQV0RgYCwgcmVuZGVycyB0aGUgd2luZG93IHVucmVjb2duaXphYmxlIGJ5IEpBV1MuCisKKy4uIHRvcGljOjogUHV0dGluZyBKQVdTIEJyYWlsbGUgdG8gU2xlZXAKKworICAgTm93IHRoYXQgYSBzdGFibGUgd2luZG93IHRpdGxlIGhhcyBiZWVuIGVzdGFibGlzaGVkLCBKQVdTIGJyYWlsbGUgY2FuCisgICBmaW5hbGx5IGJlIHB1dCB0byBzbGVlcC4gV2hpbGUgaW4gQ3lnd2luLCBhbmQgd2l0aCBCUkxUVFkgbm90IHJ1bm5pbmcsIGRvCisgICB0aGUgZm9sbG93aW5nOgorCisgICAxKSBQcmVzcyBJbnNlcnQrRjIgdG8gYnJpbmcgdXAgdGhlIGBgUnVuIEpBV1MgTWFuYWdlcmBgIGRpYWxvZy4KKworICAgMikgRG93bi1BcnJvdyB0byBgYENvbmZpZ3VyYXRpb24gTWFuYWdlcmBgLCBhbmQgcHJlc3MgRW50ZXIuIFZlcmlmeSB0aGF0IHRoZQorICAgICAgdGl0bGUgb24gdGhlIHRvcCBsaW5lIGNvbnRhaW5zIGBgQ3lnd2luLmpjZmBgLgorCisgICAzKSBQcmVzcyBBbHQrUyBmb3IgYGBTZXQgT3B0aW9uc2BgLgorCisgICA0KSBQcmVzcyBCIGZvciBgYEJyYWlsbGVgYC4KKworICAgNSkgUHJlc3MgUyBmb3IgYGBCcmFpbGxlIFNsZWVwIE1vZGVgYC4KKworICAgNikgVmVyaWZ5IHRoYXQgdGhlIGJveCBpcyBjaGVja2VkLiBJdCBzaG91bGQgbG9vayBsaWtlIGBgPHg+YGAgKHJhdGhlciB0aGFuCisgICAgICBsaWtlIGBgPCA+YGApLiBQcmVzcyBTcGFjZSB0byB0b2dnbGUgdGhlIHNldHRpbmcgaWYgdGhlIGBgeGBgIGlzbid0IHRoZXJlLgorCisgICA3KSBQcmVzcyBFbnRlciB0byBsZWF2ZSB0aGUgbWVudS4KKworICAgOCkgUHJlc3MgQ29udHJvbCtTIHRvIHNhdmUgdGhlIGZpbGUuCisKKyAgIDkpIFByZXNzIEFsdCtGNCB0byBleGl0IHRoZSBjb25maWd1cmF0aW9uIG1hbmFnZXIuCisKKy4uIHRvcGljOjogUHV0dGluZyBKQVdTIFNwZWVjaCB0byBTbGVlcAorCisgICBJZiB5b3UnZCBsaWtlIHRvIHVzZSBKQVdTIHNwZWVjaCBpbiBXaW5kb3dzLCBidXQgbm90IGluIEN5Z3dpbiwgeW91IGNhbiBkbworICAgdGhlIGZvbGxvd2luZzoKKworICAgMSkgUHJlc3MgSW5zZXJ0K0YyIHRvIGJyaW5nIHVwIHRoZSBgYFJ1biBKQVdTIE1hbmFnZXJgYCBkaWFsb2cuCisKKyAgIDIpIERvd24tQXJyb3cgdG8gYGBDb25maWd1cmF0aW9uIE1hbmFnZXJgYCBhbmQgcHJlc3MgRW50ZXIuIFZlcmlmeSB0aGF0IHRoZQorICAgICAgdGl0bGUgb24gdGhlIHRvcCBsaW5lIGNvbnRhaW5zIGBgQ3lnd2luLmpjZmBgLgorCisgICAzKSBQcmVzcyBBbHQrUyBmb3IgYGBTZXQgT3B0aW9uc2BgLgorCisgICA0KSBQcmVzcyBBIGZvciBgYEFkdmFuY2VkYGAuCisKKyAgIDUpIFlvdSBzaG91bGQgYmUgb24gYW4gaXRlbSBsYWJlbGxlZCBgYFNsZWVwIE1vZGUgRW5hYmxlYGAgd2l0aCBhbiBlbXB0eQorICAgICAgY2hlY2sgYm94IChgYDwgPmBgKS4gUHJlc3MgU3BhY2UgdG8gY2hlY2sgaXQgKGBgPHg+YGApLiAKKworICAgNikgUHJlc3MgRW50ZXIgdG8gbGVhdmUgdGhlIG1lbnUuCisKKyAgIDcpIFByZXNzIENvbnRyb2wrUyB0byBzYXZlIHRoZSBmaWxlLgorCisgICA4KSBQcmVzcyBBbHQrRjQgdG8gZXhpdCB0aGUgY29uZmlndXJhdGlvbiBtYW5hZ2VyLgorCisuLiB0b3BpYzo6IEtub3duIFByb2JsZW0KKworICAgWW91J2xsIGFsd2F5cyBiZSBhYmxlIHRvIHN3aXRjaCB0byBDeWd3aW4sIGFuZCBCUkxUVFkgKGlmIGl0J3MgcnVubmluZykgd2lsbAorICAgdGFrZSBjb250cm9sIG9mIHRoZSBicmFpbGxlIGRldmljZSBhdXRvbWF0aWNhbGx5LiBTd2l0Y2hpbmcgYmFjayB0byBXaW5kb3dzCisgICBhbmQgSkFXUywgaG93ZXZlciwgbWF5IGJlIHByb2JsZW1hdGljLiBUaGUgZGVncmVlIG9mIHN1Y2Nlc3Mgc2VlbXMgdG8gZGVwZW5kCisgICBvbiB0aGUgdHlwZSBvZiBicmFpbGxlIGRldmljZSBiZWluZyB1c2VkLiBJdCB1c3VhbGx5IHdvcmtzIHByb3Blcmx5LgorICAgU29tZXRpbWVzLCBob3dldmVyLCB3aGVuIHVzaW5nIGEgVVNCIGRldmljZSwgdGhlIGNhYmxlIG5lZWRzIHRvIGJlCisgICB1bnBsdWdnZWQvcmVwbHVnZ2VkIHRvIGFsbG93IEpBV1MgdG8gcmVnYWluIGNvbnRyb2wuIEluIGV4dHJlbWUgY2FzZXMsIHlvdQorICAgbWF5IG5lZWQgdG8gZXhpdCBCUkxUVFkgYmVmb3JlIGdvaW5nIHRvIFdpbmRvd3MuCisKK01pbkdXIFNjcmlwdHMgZm9yIEJ1aWxkaW5nIEJSTFRUWQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1RoZSBgYG1rd2luYGAgU2NyaXB0CistLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgYGBta3dpbmBgIHNjcmlwdCwKK3doaWNoIGNhbiBiZSBmb3VuZCBpbiB0aGUgYGBXaW5kb3dzL2BgIHN1YmRpcmVjdG9yeSBvZiBCUkxUVFkncyBzb3VyY2UgdHJlZSwKK2J1aWxkcyB0aGUgV2luZG93cyBhcmNoaXZlIGFuZCBpbnN0YWxsZXIgZm9yIEJSTFRUWS4KKworU29mdHdhcmUgQ29tcG9uZW50cyBSZXF1aXJlZCBieSBgYG1rd2luYGAKK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisKK0xpbmtzIHRvIHRoZSBwYWdlcyB3aGVyZSB3ZSBmb3VuZCB0aGVzZQoraW5zdGFsbGVycywgY29tcG9uZW50cywgYW5kIGZpbGVzIGFyZSBsaXN0ZWQuCitJbiBjYXNlIGFueSBvZiB0aGVzZSBsaW5rcyBiZWNvbWVzIG91dC1vZi1kYXRlLCBob3dldmVyLAorY29waWVzIG9mIHNvbWUgb2YgdGhlbSBoYXZlIGJlZW4gcHJlc2VyaXZlZCBhdAorYDxodHRwOi8vQlJMVFRZLmFwcC9hcmNoaXZlL1dpbmRvd3MvPmBfLgorCitUaGUgZm9sbG93aW5nIHNvZnR3YXJlIGNvbXBvbmVudHMgc2hvdWxkIGFscmVhZHkgYmUgaW5zdGFsbGVkOgorCisqICBgYE1pbkdXYGAgWzMyLWJpdF0gKGZyb20gYDxodHRwOi8vbWluZ3cub3JnLz5gXykKKworVGhlIGZvbGxvd2luZyBgYE1pbkdXYGAgcGFja2FnZXMgbWF5IHN0aWxsIG5lZWQgdG8gYmUgaW5zdGFsbGVkOgorCisqICBgYG1zeXMtYmlzb25gYAorKiAgYGBtc3lzLWRvczJ1bml4YGAKKyogIGBgbXN5cy1ncm9mZmBgCisqICBgYG1zeXMtbTRgYAorKiAgYGBtc3lzLXRhcmBgCisqICBgYG1zeXMtdW56aXBgYAorKiAgYGBtc3lzLXdnZXRgYAorKiAgYGBtc3lzLXppcGBgCisqICBgYG1pbmd3MzItbGlicGRjdXJzZXNgYAorKiAgYGBtaW5ndzMyLXB0aHJlYWRzLXczMmBgCisqICBgYG1pbmd3MzItdGNsYGAKKworVGhlIGZvbGxvd2luZyBwYWNrYWdlcyBzaG91bGQgYWxzbyBiZSBpbnN0YWxsZWQ6CisKKyogIGBgQXV0b0hvdGtleWBgIChmcm9tIGA8aHR0cDovL3d3dy5hdXRvaG90a2V5LmNvbS8+YF8pCisKKyAgIFRoZSBgYG1rd2luYGAgc2NyaXB0IGFzc3VtZXMgdGhhdCBpdCBoYXMgYmVlbiBpbnN0YWxsZWQgaW4KKyAgIGBgQzpcUHJvZ3JhbSBGaWxlcyAoeDg2KVxBdXRvSG90a2V5YGAuCisgICBUaGUgYGAtQWBgIChBdXRvSG90a2V5KSBvcHRpb24gY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSBhbm90aGVyIGxvY2F0aW9uLgorICAgVGhlIGluc3RhbGxlciBjdXJyZW50bHkgYmVpbmcgdXNlZCBpcyBuYW1lZCBgYEF1dG9Ib3RrZXkxMDQ4MDVfSW5zdGFsbC5leGVgYC4KKworKiAgYGBOU0lTYGAgKGZyb20gYDxodHRwOi8vbnNpcy5zb3VyY2Vmb3JnZS5uZXQvPmBfKQorCisgICBUaGUgYGBta3dpbmBgIHNjcmlwdCBhc3N1bWVzIHRoYXQgaXQgaGFzIGJlZW4gaW5zdGFsbGVkIGluCisgICBgYEM6XFByb2dyYW0gRmlsZXMgKHg4NilcTlNJU2BgLgorICAgVGhlIGBgLU5gYCAoTlNJUykgb3B0aW9uIGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkgYW5vdGhlciBsb2NhdGlvbi4KKyAgIFRoZSBpbnN0YWxsZXIgY3VycmVudGx5IGJlaW5nIHVzZWQgaXMgbmFtZWQgYGBuc2lzLTMuMGIwLXNldHVwLmV4ZWBgLgorCisqICBgYFB5dGhvbmBgIChmcm9tIGA8aHR0cDovL3d3dy5weXRob24ub3JnLz5gXykKKworICAgVGhlIDMyLWJpdCB2YXJpYW50cyBhcmUgcmVxdWlyZWQuIFZlcnNpb24gMiBvciAzIG1heSBiZSB1c2VkLiBJZiB0aGUKKyAgIGBgcHl0aG9uYGAgY29tbWFuZCBpc24ndCBpbiB5b3VyIGNvbW1hbmQgc2VhcmNoIHBhdGgsIG9yIGlmIHlvdSdkIGxpa2UgdG8KKyAgIHVzZSBhIGRpZmZlcmVudCB2ZXJzaW9uIG9mIGBgUHl0aG9uYGAsIHRoZW4gdXNlIHRoZSBgYC1QYGAgKFB5dGhvbikgb3B0aW9uCisgICB0byBzcGVjaWZ5IHRoZSB0b3AtbGV2ZWwgZGlyZWN0b3J5IG9mIHRoZSBkZXNpcmVkIGBgUHl0aG9uYGAgdmVyc2lvbi4KKworKiAgYGBDeXRob25gYCAoZnJvbSBgPGh0dHA6Ly9jeXRob24ub3JnLz5gXykKKworICAgQSBjb3JyZXNwb25kaW5nIHZlcnNpb24gb2YgYGBDeXRob25gYCBtdXN0IGJlIGluc3RhbGxlZCBmb3IgZWFjaCB2ZXJzaW9uIG9mCisgICBgYFB5dGhvbmBgLiBFYWNoIGBgQ3l0aG9uYGAgdmVyc2lvbiBpcyBpbnN0YWxsZWQgd2l0aGluIHRoZSBjb3JyZXNwb25kaW5nCisgICBgYFB5dGhvbmBgIHZlcnNpb24ncyBoaWVyYXJjaHkuIEluc3RhbGwgYGBDeXRob25gYCB3aXRoIHRoZSBjb21tYW5kOjoKKworICAgICAgcGlwIGluc3RhbGwgY3l0aG9uCisKKyAgIFNvbWUgc3lzdGVtcywgZWl0aGVyIGluIGFkZGl0aW9uIHRvIG9yIGluIHBsYWNlIG9mIHRoZSBgYHBpcGBgIGNvbW1hbmQsCisgICBoYXZlIHRoZSBgYHBpcDJgYCBhbmQvb3IgdGhlIGBgcGlwM2BgIGNvbW1hbmQuIEFzIHlvdSBtaWdodCBoYXZlIGd1ZXNzZWQsCisgICBgYHBpcDJgYCBjb3JyZXNwb25kcyB0byBgYFB5dGhvbjJgYCBhbmQgYGBwaXAzYGAgY29ycmVzcG9uZHMgdG8gYGBQeXRob24zYGAuCisgICBJdCdzIGJlc3QgdG8gdXNlIHRoZSBvbmUgd2l0aCB0aGUgbW9zdCBleHBsaWNpdCB2ZXJzaW9uIHN1ZmZpeC4KKworICAgSWYgdGhlIGBgcGlwYGAgY29tbWFuZCBpc24ndCBhbHJlYWR5IGluY2x1ZGVkIHdpdGhpbiAgdGhlIHZlcnNpb24gb2YKKyAgIGBgUHl0aG9uYGAgdGhhdCB5b3UncmUgdXNpbmcgKHVzdWFsbHkgd2l0aGluIGl0cyBgYHNjcmlwdHNgYCBzdWJkaXJlY3RvcnkpCisgICB0aGVuIHlvdSBjYW4gaW5zdGFsbCBpdCBmcm9tIGA8aHR0cHM6Ly9waXAucHlwYS5pby9lbi9zdGFibGUvaW5zdGFsbGluZy8+YF8uCisKKyAgIENvcGllcyBvZiB0aGUgZmlsZXMgbWVudGlvbmVkIGJlbG93IGFyZSBhdAorICAgYDxodHRwOi8vQlJMVFRZLmFwcC9hcmNoaXZlL1dpbmRvd3MvQ3l0aG9uLz5gXzoKKworICAgKyAgVG8gZm9yY2UgdXNlIG9mIE1pbkdXJ3MgKHJhdGhlciB0aGFuIE1pY3Jvc29mdCdzKSBDIGNvbXBpbGVyLAorICAgICAgYWRkIGBgZGlzdHV0aWxzLmNmZ2BgIHRvIHRoZSBgYFB5dGhvbi9saWIvZGlzdHV0aWxzL2BgIGRpcmVjdG9yeS4KKyAgICAgIEl0IHNob3VsZCBjb250YWluIHRoZXNlIGxpbmVzOjoKKworICAgICAgICAgW2J1aWxkXQorICAgICAgICAgY29tcGlsZXIgPSBtaW5ndzMyCisKKyAgICsgIElmIHlvdSBnZXQgYSBtZXNzYWdlIGxpa2UgIlVua25vd24gTVMgQ29tcGlsZXIgdmVyc2lvbiAxOTAwIgorICAgICAgdGhlbiB5b3UnbGwgcHJvYmFibHkgbmVlZCB0byBhcHBseSB0aGUgcGF0Y2ggYGBwYXRjaDFgYAorICAgICAgKGZyb20gYDxodHRwczovL2J1Z3MucHl0aG9uLm9yZy9maWxlNDA2MDgvcGF0Y2guZGlmZj5gXykKKyAgICAgIHdoZW4gd2l0aGluIHRoZSBgYFB5dGhvbi9saWIvZGlzdHV0aWxzL2BgIGRpcmVjdG9yeTo6CisKKyAgICAgICAgIGNkIFB5dGhvbi9saWIvZGlzdHV0aWxzCisgICAgICAgICBwYXRjaCBwYXRjaDEKKworICAgKyAgSWYgeW91IGdldCBhIG1lc3NhZ2UgbGlrZSAiY2Fubm90IGZpbmQgLWx2Y3J1bnRpbWUxNDAiCisgICAgICB0aGVuIHlvdSdsbCBuZWVkIHRvIGFkZCB0aGUgMzItYml0IHZlcnNpb24gb2YgYGB2Y3J1bnRpbWUxNDAuZGxsYGAKKyAgICAgIChmcm9tIGA8aHR0cDovL3d3dy5kbGwtZmlsZXMuY29tLz5gXykKKyAgICAgIHRvIHRoZSBgYFB5dGhvbi9saWJzL2BgIGRpcmVjdG9yeS4KKyAgICAgIFlvdSBjYW4gdmVyaWZ5IHRoYXQgeW91IGhhdmUgdGhlIDMyLWJpdCB2ZXJzaW9uIHdpdGggdGhlIGBgZmlsZWBgIGNvbW1hbmQ6OgorCisgICAgICAgICBmaWxlIHZjcnVudGltZTE0MC5kbGwKKyAgICAgICAgIHZjcnVudGltZTE0MC5kbGw6IFBFMzIgZXhlY3V0YWJsZSAoRExMKSAoY29uc29sZSkgSW50ZWwgODAzODYsIGZvciBNUyBXaW5kb3dzCisKKyAgICAgIEEgbWVzc2FnZSBsaWtlICJ2Y3J1bnRpbWUxNDAuZGxsOiBmaWxlIG5vdCByZWNvZ25pemVkOiBGaWxlIGZvcm1hdCBub3QgcmVjb2duaXplZCIKKyAgICAgIHByb2JhYmx5IG1lYW5zIHRoYXQgeW91IGRvbid0IGhhdmUgdGhlIDMyLWJpdCB2ZXJzaW9uIG9mIHRoZSBETEwuCisKKyogIGBgTGliVVNCLVdpbjMyYGAgKGZyb20gYDxodHRwOi8vbGlidXNiLXdpbjMyLnNvdXJjZWZvcmdlLm5ldC8+YF8pCisKKyAgIFRoZSBgYG1rd2luYGAgc2NyaXB0IGFzc3VtZXMgdGhhdCBpdCBoYXMgYmVlbiBpbnN0YWxsZWQgaW4KKyAgIGBgQzpcTGliVVNCLVdpbjMyYGAuCisgICBUaGUgYGAtVWBgIChMaWJVU0ItV2luMzIpIG9wdGlvbiBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IGFub3RoZXIgbG9jYXRpb24uCisgICBUaGUgYXJjaGl2ZSBjdXJyZW50bHkgYmVpbmcgdXNlZCBpcyBuYW1lZCBgYGxpYnVzYi13aW4zMi1iaW4tMS4yLjYuMC56aXBgYC4KKyAgIE91ciBjb3B5IG9mIHRoaXMgYXJjaGl2ZSBoYXMgYSB0b3AtbGV2ZWwgZGlyZWN0b3J5IG5hbWVkIGBgbGlidXNiLXdpbjMyLWJpbi0xLjIuNi4wYGAuCisKKyogIGBgTGliVVNCLTEuMGBgIChmcm9tIGA8aHR0cDovL3d3dy5saWJ1c2Iub3JnL3dpa2kvd2luZG93c19iYWNrZW5kPmBfKQorCisgICBUaGUgYGBta3dpbmBgIHNjcmlwdCBhc3N1bWVzIHRoYXQgaXQgaGFzIGJlZW4gaW5zdGFsbGVkIGluCisgICBgYEM6XExpYlVTQi0xLjBgYC4KKyAgIFRoZSBgYC1YYGAgKGxpYnVzYngpIG9wdGlvbiBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IGFub3RoZXIgbG9jYXRpb24uCisgICBUaGUgYXJjaGl2ZSBjdXJyZW50bHkgYmVpbmcgdXNlZCBpcyBuYW1lZCBgYGxpYnVzYngtMS4wLjE4LXdpbi43emBgLgorICAgT3VyIGNvcHkgb2YgdGhpcyBhcmNoaXZlIGRvZXNuJ3QgaGF2ZSBhIHRvcC1sZXZlbCBkaXJlY3RvcnkuCisgICBXZSBoYXZlIGFuIGFsdGVybmF0ZSBjb3B5IG9mIHRoaXMgYXJjaGl2ZSBuYW1lZCBgYGxpYnVzYngtMS4wLjE4LXdpbi50YXIuZ3pgYC4KKworKiAgYGBXaW5VU0JgYCAoZnJvbSBgPGh0dHA6Ly93d3cubGlidXNiLm9yZy93aWtpL3dpbmRvd3NfYmFja2VuZD5gXykKKworICAgVGhlIGBgbWt3aW5gYCBzY3JpcHQgYXNzdW1lcyB0aGF0IGl0IGhhcyBiZWVuIGluc3RhbGxlZCBpbgorICAgYGBDOlxXaW5VU0JgYC4KKyAgIFRoZSBgYC1XYGAgKFdpblVTQikgb3B0aW9uIGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkgYW5vdGhlciBsb2NhdGlvbi4KKyAgIFRoZSBhcmNoaXZlIGN1cnJlbnRseSBiZWluZyB1c2VkIGlzIG5hbWVkIGBgd2ludXNiLnppcGBgLgorICAgT3VyIGNvcHkgb2YgdGhpcyBhcmNoaXZlIGRvZXNuJ3QgaGF2ZSBhIHRvcC1sZXZlbCBkaXJlY3RvcnkuCisKKyogIGBgSUNVYGAgKGZyb20gYDxodHRwOi8vaWN1LXByb2plY3Qub3JnLz5gXykKKworICAgVGhlIGBgbWt3aW5gYCBzY3JpcHQgYXNzdW1lcyB0aGF0IGl0IGhhcyBiZWVuIGluc3RhbGxlZCBpbiBgYEM6XElDVWBgLgorICAgVGhlIGBgLUlgYCAoSUNVKSBvcHRpb24gY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSBhbm90aGVyIGxvY2F0aW9uLgorICAgVGhlIGFyY2hpdmUgY3VycmVudGx5IGJlaW5nIHVzZWQgaXMgbmFtZWQgYGBpY3U0Yy01M18xLVdpbjMyLW1zdmMxMC56aXBgYC4KKyAgIE91ciBjb3B5IG9mIHRoaXMgYXJjaGl2ZSBoYXMgYSB0b3AtbGV2ZWwgZGlyZWN0b3J5IG5hbWVkIGBgaWN1YGAuCisgICBTaW5jZSBXaW5kb3dzIGZpbGUgc3lzdGVtcyBkb24ndCBoYXZlIGNhc2Ugc2Vuc2l0aXZlIG5hbWVzLAorICAgcmVuYW1pbmcgaXQgZnJvbSBgYGljdWBgIHRvIGBgSUNVYGAgaXMgb3B0aW9uYWwuCisKKyogIGBgcGtnLWNvbmZpZ2BgIChmcm9tIGA8aHR0cDovL2d0ay5vcmcvZG93bmxvYWQvd2luMzIucGhwPmBfKQorCisgICBUaGUgYXJjaGl2ZSBjdXJyZW50bHkgYmVpbmcgdXNlZCBpcyBuYW1lZCBgYHBrZy1jb25maWdfMC4yOC0xX3dpbjMyLnppcGBgLgorICAgT3VyIGNvcHkgb2YgdGhpcyBhcmNoaXZlIGRvZXNuJ3QgaGF2ZSBhIHRvcC1sZXZlbCBkaXJlY3RvcnkuCisgICBJdCBzaG91bGQgYmUgdW5wYWNrZWQgd2hlbiBpbiBNaW5HVydzIGBgL21pbmd3L2BgIGRpcmVjdG9yeS4KKworKiAgYGBHbGliYGAgKGZyb20gYDxodHRwOi8vZ3RrLm9yZy9kb3dubG9hZC93aW4zMi5waHA+YF8pCisKKyAgIFRoZSBhcmNoaXZlIGN1cnJlbnRseSBiZWluZyB1c2VkIGlzIG5hbWVkIGBgZ2xpYl8yLjM0LjMtMV93aW4zMi56aXBgYC4KKyAgIE91ciBjb3B5IG9mIHRoaXMgYXJjaGl2ZSBkb2Vzbid0IGhhdmUgYSB0b3AtbGV2ZWwgZGlyZWN0b3J5LgorICAgSXQgc2hvdWxkIGJlIHVucGFja2VkIHdoZW4gaW4gTWluR1cncyBgYC9taW5ndy9gYCBkaXJlY3RvcnkuCisKKyogIGBgZ2V0dGV4dC1ydW50aW1lYGAgKGZyb20gYDxodHRwOi8vZ3RrLm9yZy9kb3dubG9hZC93aW4zMi5waHA+YF8pCisKKyAgIE9ubHkgaW5zdGFsbCBpdCBpZiB5b3VyIE1pbkdXIGluc3RhbGxhdGlvbiBkb2Vzbid0IGFscmVhZHkgaGF2ZSBpdC4KKyAgIENoZWNrIGZvciB0aGUgcHJlc2VuY2Ugb2YgYSBgYGxpYmludGxgYCBETEwgaW4gTWluR1cncyBgYC9taW5ndy9iaW4vYGAgZGlyZWN0b3J5LgorCitUaGUgYGBta3dpbmBgIHNjcmlwdCB1c2VzIHRoZSBgYGxpYmBgIGNvbW1hbmQsCit3aGljaCBiZWxvbmdzIHRvIE1TVkMgKE1pY3Jvc29mdCBWaXN1YWwgQysrKS4KK09uIG5ld2VyIFdpbmRvd3Mgc3lzdGVtcywgTVNWQyBoYXMgYmVjb21lCithIGNvbXBvbmVudCBvZiBNaWNyb3NvZnQgVmlzdWFsIFN0dWRpby4KK0lmIHlvdSBkb24ndCBoYXZlIGl0IHRoZW4geW91J2xsIG5lZWQgdG8gZ2V0Cit0aGUgZm9sbG93aW5nIGZpbGVzIGZyb20gc29tZW9uZSB3aG8gZG9lcy4KK0NvcGllcyBvZiB0aGVtIGFyZSBhdCBgPGh0dHA6Ly9CUkxUVFkuYXBwL2FyY2hpdmUvV2luZG93cy9NU1ZDLz5gXy4KKworKiAgbGliLmV4ZQorKiAgbGluay5leGUKKyogIG1zcGRiMTAwLmRsbAorKiAgbXN2Y3IxMDAuZGxsCisKK0FsbCBvZiB0aGVtIHNob3VsZCBiZSBwbGFjZWQgd2l0aGluIHRoZSBzYW1lIGRpcmVjdG9yeQorKE1pbkdXJ3MgYGAvdXNyL2xvY2FsL2Jpbi9gYCBkaXJlY3RvcnkgbWF5IGJlIGEgZ29vZCBwbGFjZSkuCitFaXRoZXIgYWRkIHRoaXMgZGlyZWN0b3J5IHRvIHlvdXIgY29tbWFuZCBzZWFyY2ggcGF0aAorb3IgdXNlIHRoZSBgYC1NYGAgKE1TVkMpIG9wdGlvbiB0byBzcGVjaWZ5IGl0cyBsb2NhdGlvbi4KKworSWYgeW91J2QgbGlrZSB0byBoYXZlIFVTQiBzdXBwb3J0IHRoZW4gY3JlYXRlIHRoZSBzeW1ib2xpYyBsaW5rcyBhcyBkZXNjcmliZWQKK3dpdGhpbiB0aGUgTWluR1cgaW5zdHJ1Y3Rpb25zIGZvciB1c2luZyBgTGliVVNCLVdpbjMyYF8gYW5kL29yIGBMaWJVU0ItMS4wYF8uCitZb3UnbGwgYWxzbyBuZWVkIHRvIGNyZWF0ZSBgYC5wY2BgIChwa2ctY29uZmlnKSBmaWxlcyBmb3IgdGhlbSB3aXRoaW4gTWluR1cncworYGAvbWluZ3cvbGliL3BrZ2NvbmZpZz5gYCBkaXJlY3RvcnkuIFRoZSBvbmVzIHdlJ3ZlIGNyZWF0ZWQgYXJlIGF0CitgPGh0dHA6Ly9CUkxUVFkuYXBwL2FyY2hpdmUvV2luZG93cy9wa2djb25maWcvPmBfLgorCitJZiB5b3UnZCBsaWtlIHRvIGhhdmUgQmx1ZXRvb3RoIHN1cHBvcnQgdGhlbiB5b3UnbGwgbmVlZCB0byBhZGQKK3RoZSBmaWxlcyBsaXN0ZWQgYmVsb3cgdG8gTWluR1cncyBgYC9taW5ndy9pbmNsdWRlL2BgIGRpcmVjdG9yeS4KK0NvcGllcyBvZiB0aGVtIGFyZSBhdCBgPGh0dHA6Ly9CUkxUVFkuYXBwL2FyY2hpdmUvV2luZG93cy9CbHVldG9vdGgvPmBfLgorCisqICB3czJidGguaAorKiAgYnRoZGVmLmgKKyogIGJ0aHNkcGRlZi5oCisKK01vcmUgYGBta3dpbmBgIE9wdGlvbnMKK35+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKworYGAtdWBgIChVU0IpCisgICBTcGVjaWZ5IHdoaWNoIFVTQiBwYWNrYWdlIGlzIHRvIGJlIHVzZWQuIFRoZSBmb2xsb3dpbmcgVVNCIHBhY2thZ2VzIGFyZQorICAgc3VwcG9ydGVkOgorCisgICAqICBsaWJ1c2IgKGZvciBMaWJVU0ItV2luMzIpCisgICAqICBsaWJ1c2ItMS4wIChmb3IgTGliVVNCLTEuMCArIFdpblVTQikKKworYGAtQ2BgIChDeWd3aW4pCisgICBTcGVjaWZ5IHRoZSByb290ICh0b3AtbGV2ZWwpIGRpcmVjdG9yeSBvZiBhIEN5Z3dpbiBpbnN0YWxsYXRpb24uCisgICBJZiBpdCBpc24ndCBzcGVjaWZpZWQgdGhlbiBgYC9jeWd3aW5gYCAoaWYgaXQgZXhpc3RzKSBpcyBhc3N1bWVkLgorICAgQ3lnd2luJ3MgYGBiaW4vYGAgZGlyZWN0b3J5IGlzIGFkZGVkIHRvIHRoZSBlbmQgb2YgdGhlIGNvbW1hbmQgc2VhcmNoIHBhdGgKKyAgIGFzIGEgbGFzdCByZXNvcnQgZm9yIGZpbmRpbmcgbmVlZGVkIGNvbW1hbmRzIHRoYXQgTWluR1cgbWF5IG5vdCBoYXZlLgorCitgYC1zYGAgKHNoZWxsKQorICAgSW52b2tlIGFuIGludGVyYWN0aXZlIHNoZWxsIGp1c3QgYmVmb3JlIHRoZSBhcmNoaXZlIGlzIGNyZWF0ZWQgc28gdGhhdCB5b3UKKyAgIGNhbiBoYXZlIGEgbG9vayBhdCBhbmQvb3IgbW9kaWZ5IHdoYXQgaXQgd2lsbCBjb250YWluLiBJZiB0aGUgYGBTSEVMTGBgCisgICBlbnZpcm9ubWVudCB2YXJpYWJsZSBpcyBzZXQgdGhlbiB0aGF0IHNoZWxsIGlzIHVzZWQuIElmIG5vdCwgYGAvYmluL3NoYGAgaXMKKyAgIGFzc3VtZWQuCisKK2BgLXRgYCAodGVtcG9yYXJ5IGRpcmVjdG9yeSkKKyAgIFNwZWNpZnkgdGhlIHRlbXBvcmFyeSBkaXJlY3RvcnkgdGhhdCBpcyB0byBiZSB1c2VkIGZvciB0aGUgYnVpbGQuCisgICBJdCBtdXN0IG5vdCBhbHJlYWR5IGV4aXN0LgorICAgSWYgaXQgaXNuJ3Qgc3BlY2lmaWVkIHRoZW4gYW4gaW50ZXJuYWxseSBnZW5lcmF0ZWQgcGF0aCBpcyB1c2VkLgorCitgYC1rYGAgKGtlZXApCisgICBEb24ndCByZW1vdmUgdGhlIHRlbXBvcmFyeSBkaXJlY3RvcnkKKyAgIGF0IHRoZSBlbmQgb2YgYSBzdWNjZXNzZnVsIGJ1aWxkLgorICAgSXQgaXNuJ3QgcmVtb3ZlZCBpZiB0aGUgYnVpbGQgZmFpbHMKKyAgIHNvIHRoYXQgeW91IGNhbiBoYXZlIGEgbG9vayBhdCB3aGF0IHdlbnQgd3JvbmcuCisKKy4uIGluY2x1ZGU6OiBjb21tb24tb3B0aW9ucy5yc3QKKworYGBta3dpbmBgIFBhcmFtZXRlcnMKK35+fn5+fn5+fn5+fn5+fn5+fn5+CisKK1RoZSBgYG1rd2luYGAgc2NyaXB0IGFjY2VwdHMgdHdvIHBhcmFtZXRlcnM6CisKKzEpIFRoZSBwYXRoIHRvIHRoZSB0b3AtbGV2ZWwgZGlyZWN0b3J5IG9mIEJSTFRUWSdzIHNvdXJjZSB0cmVlLgorICAgSXQgbWF5IGJlIGVpdGhlciByZWxhdGl2ZSBvciBhYnNvbHV0ZS4KKyAgIFRoaXMgcGFyYW1ldGVyIGlzIHJlcXVpcmVkLgorCisyKSBUaGUgYnVpbGQgcmV2aXNpb24uCisgICBJdCBtYXkgYmUgYW55IGNoYXJhY3RlciBzZXF1ZW5jZSB0aGF0IGRvZXNuJ3QgaW5jbHVkZSB3aGl0ZXNwYWNlLgorICAgSXQgaXMgYXBwZW5kZWQsIHdpdGggYSBwcmVwZW5kZWQgZGFzaCAoYGAtYGApLCB0bworICAgQlJMVFRZJ3MgdmVyc2lvbiBudW1iZXIgaW4gb3JkZXIgdG8gY29uc3RydWN0IHRoZSBidWlsZCB2ZXJzaW9uLgorICAgVGhpcyBwYXJhbWV0ZXIgaXMgb3B0aW9uYWwgLSBpZiBpdCBpc24ndCBzcGVjaWZpZWQgdGhlbgorICAgdGhlIHJldmlzaW9uIG51bWJlciBwYXJ0IG9mIHRoZSBidWlsZCBpZGVudGlmaWVyIGlzIHVzZWQuCisKK1RoZSBidWlsZCBuYW1lIGlzIHVzZWQgYXM6CisKKyogIHRoZSBuYW1lIG9mIHRoZSB0b3AtbGV2ZWwgZGlyZWN0b3J5IHdpdGhpbiB0aGUgYXJjaGl2ZQorKiAgdGhlIGZpbGUgbmFtZSBvZiB0aGUgYXJjaGl2ZSAod2hpY2ggaGFzIHRoZSBgYC56aXBgYCBleHRlbnNpb24pCisqICB0aGUgZmlsZSBuYW1lIG9mIHRoZSBpbnN0YWxsZXIgKHdoaWNoIGhhcyB0aGUgYGAuZXhlYGAgZXh0ZW5zaW9uKQorCitJdCBoYXMgdGhlIGZvbGxvd2luZyBmb3JtOjoKKworICAgYnJsdHR5LXdpbi1idWlsZFZlcnNpb24tYnVpbGRSZXZpc2lvbi11c2JQYWNrYWdlCisKK0ZvciBleGFtcGxlOgorCisqICBpZiB5b3VyIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkgaXMgdGhlIGBgV2luZG93cy9gYCBzdWJkaXJlY3Rvcnkgb2YKKyAgIEJSTFRUWSdzIHNvdXJjZSB0cmVlLAorCisqICBpZiB0aGUgY3VycmVudCBCUkxUVFkgdmVyc2lvbiBpcyA1LjIsCisKKyogIGFuZCByZW1lbWJlcmluZyB0aGF0IHRoZSBkZWZhdWx0IFVTQiBwYWNrYWdlIGlzIGBgbGlidXNiYGAsCisKK3RoZW4gaW52b2tpbmcgdGhlIGZvbGxvd2luZyBjb21tYW5kOjoKKworICAgLi9ta3dpbiAuLiA0CisKK3dpbGwgY3JlYXRlIHRoZXNlIGZpbGVzIHdpdGhpbiB0aGUgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeToKKworKiAgYnJsdHR5LXdpbi01LjItNC1saWJ1c2IuemlwICh0aGUgYXJjaGl2ZSkKKyogIGJybHR0eS13aW4tNS4yLTQtbGlidXNiLmV4ZSAodGhlIGluc3RhbGxlcikKKworVGhlIGBgd2luc2V0dXBgYCBTY3JpcHQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBgYHdpbnNldHVwYGAgc2NyaXB0LAord2hpY2ggY2FuIGJlIGZvdW5kIGluIHRoZSBgYFdpbmRvd3MvYGAgc3ViZGlyZWN0b3J5IG9mIEJSTFRUWSdzIHNvdXJjZSB0cmVlLAorZW5zdXJlcyB0aGF0IGFsbCBuZWVkZWQgY29tcG9uZW50cyBhcmUgaW5zdGFsbGVkIG9uIHlvdXIgc3lzdGVtCitzbyB0aGF0IGB0aGUgbWt3aW4gc2NyaXB0YF8gY2FuIHN1Y2Nlc3NmdWxseSBidWlsZCBCUkxUVFkuCisKK2Bgd2luc2V0dXBgYCBPcHRpb25zCit+fn5+fn5+fn5+fn5+fn5+fn5+fgorCitgYC1hYGAgKGFyY2hpdmUgVVJMKQorICAgU3BlY2lmeSB0aGUgbG9jYXRpb24gZm9yIEJSTFRUWSdzIFdpbmRvd3MgYXJjaGl2ZS4KKworYGAtZGBgIChkcnkgcnVuKQorICBEb24ndCBhY3R1YWxseSBpbnN0YWxsIGFueXRoaW5nLgorCitgYC1rYGAgKGtlZXApCisgICBEb24ndCByZW1vdmUgdGhlIHRlbXBvcmFyeSBkaXJlY3RvcnkuCisKK2BgLXBgYCAoUHl0aG9uIGRpcmVjdG9yeSkKKyAgIFNwZWNpZnkgdGhlIGxvY2F0aW9uIHdoZXJlIFB5dGhvbiBoYXMgYmVlbiBpbnN0YWxsZWQuCisKK2BgLXRgYCAodGVtcG9yYXJ5IGRpcmVjdG9yeSkKKyAgIFNwZWNpZnkgdGhlIHRlbXBvcmFyeSBkaXJlY3RvcnkgdGhhdCBpcyB0byBiZSB1c2VkIGZvciB0aGUgaW5zdGFsbHMuCisgICBJdCBtdXN0IG5vdCBhbHJlYWR5IGV4aXN0LgorICAgSWYgaXQgaXNuJ3Qgc3BlY2lmaWVkIHRoZW4gYW4gaW50ZXJuYWxseSBnZW5lcmF0ZWQgcGF0aCBpcyB1c2VkLgorCisuLiBpbmNsdWRlOjogY29tbW9uLW9wdGlvbnMucnN0CisKZGlmZiAtLWdpdCBhL0RvY3VtZW50cy9SRUFETUUuWDExIGIvRG9jdW1lbnRzL1JFQURNRS5YMTEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTc1ZjAyNQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50cy9SRUFETUUuWDExCkBAIC0wLDAgKzEsOTQgQEAKK35+fn5+fn5+fn5+fn5+fgorQlJMVFRZIHdpdGggWDExCit+fn5+fn5+fn5+fn5+fn4KKworLi4gaW5jbHVkZTo6IHByb2xvZ3VlLnJzdAorLi4gX09yY2E6IGh0dHBzOi8vaGVscC5nbm9tZS5vcmcvdXNlcnMvb3JjYS9zdGFibGUvCisKK0JSTFRUWSBwcm92aWRlcyBzb21lIHN1cHBvcnQgZm9yIHRoZSBYMTEgZ3JhcGhpY2FsIGVudmlyb25tZW50LgorCitCcmFpbGxlIElucHV0Cis9PT09PT09PT09PT09CisKK0Zyb20gdGhlIEJyYWlsbGUgRGV2aWNlCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitTb21lIGJyYWlsbGUgZGV2aWNlcyBoYXZlIGFuIGludGVncmF0ZWQgYnJhaWxsZSBrZXlib2FyZC4gQlJMVFRZIGFsb25lIGNhbid0Citwcm9wZXJseSBzaW11bGF0ZSBrZXlwcmVzc2VzIGZvciB0aGUgWDExIHNlcnZlciBiZWNhdXNlIGl0IGRvZXNuJ3Qga25vdyB3aGljaAora2V5Ym9hcmQgbGF5b3V0IHRoZSBsYXR0ZXIgaXMgdXNpbmcuICBJbiBvcmRlciB0byBhY2hpZXZlIHByb3BlciBrZXlib2FyZAorc2ltdWxhdGlvbiwgYGB4YnJsYXBpYGAgc2hvdWxkIGJlIHN0YXJ0ZWQgaW4gdGhlIGJhY2tncm91bmQgZHVyaW5nIGBgWGBgCitzZXNzaW9uIHN0YXJ0dXAuCisKK0J5IGRlZmF1bHQsIGBgeGJybGFwaWBgIGFsc28gd3JpdGVzIHRoZSB0aXRsZSBvZiB0aGUgY3VycmVudCB3aW5kb3cgdG8gdGhlCiticmFpbGxlIGRldmljZS4gVG8gYXZvaWQgdGhpcyAoc2luY2UgaXQgY291bGQgaW50ZXJmZXJlIHdpdGggb3V0cHV0IGZyb20gc2NyZWVuCityZWFkZXJzIGxpa2UgYE9yY2FgXyksIGdpdmUgdGhlIGBgLXFgYCAocXVpZXQpIG9wdGlvbiB0byBgYHhicmxhcGlgYC4KKworRnJvbSB0aGUgUEMgS2V5Ym9hcmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBQQyBrZXlib2FyZCBjYW4gYmUgdXNlZCwgd2hlbiBpbiBYMTEsIGFzIGEgYnJhaWxsZSBrZXlib2FyZC4gVGhpcworY2FwYWJpbGl0eSBjYW4gYmUgZW5hYmxlZCBieSB1c2luZyB0aGUgYGBicmFpYGAgbGF5b3V0LiBGb3IgZXhhbXBsZTo6CisKKyAgIHNldHhrYm1hcCAtbGF5b3V0ICJ1cyxicmFpIiAtb3B0aW9uICJncnA6c2hpZnRfY2Fwc190b2dnbGUsZ3JwX2xlZDpzY3JvbGwiCisKK2VuYWJsZXMgYm90aCB0aGUgYGBVU2BgIGFuZCB0aGUgYGBicmFpbGxlYGAga2V5Ym9hcmQgbGF5b3V0cyBpbiB0d28gZGlmZmVyZW50CitYS0IgZ3JvdXBzKSwgYW5kIFNoaWZ0K0NhcHNMb2NrIHdpbGwgc3dpdGNoIGJldHdlZW4gdGhlbS4gVGhlIHNjcm9sbCBMRUQgd2lsbAorYmUgbGl0IHdoaWxlIGluIGBgYnJhaWxsZWBgIG1vZGUgc28gdGhhdCBzaWdodGVkIHVzZXJzIHdpbGwgYmUgYWxlcnRlZCBhcyB0bword2h5IHRoZXkgbWF5IGJlIGdldHRpbmcgdW5leHBlY3RlZCBvdXRwdXQgaWYgdGhleSBzd2l0Y2ggZ3JvdXBzIGJ5IGFjY2lkZW50LgorT3RoZXIgc2hvcnRjdXRzIGFuZCBMRURzIGNhbiBhbHNvIGJlIHVzZWQgKHNlZSB0aGUgWEtCIGRvY3VtZW50YXRpb24pLgorCitUaGUgZGVmYXVsdCBrZXlib2FyZCBtYXBwaW5nIGZvciBicmFpbGxlIGRvdHMgaXM6OgorCisgICBmIGoKKyAgIGQgaworICAgcyBsCisgICBhIDsKKworYnV0IG90aGVyIGxheW91dHMgYXJlIGFsc28gYXZhaWxhYmxlIChzZWUgdGhlIHZhcmlhbnRzIGluIFhLQikuCisKK0FwcGxpY2F0aW9ucyB0aGVuIG5lZWQgdG8gYmUgInRvbGQiIHRvIHVzZSB0aGUgc3RhbmRhcmQgWDExIElucHV0IE1vZHVsZS4gVGhpcworY2FuIGJlIGRvbmUgYnkgc2V0dGluZzo6CisKKyAgIGV4cG9ydCBHVEtfSU1fTU9EVUxFPXhpbQorICAgZXhwb3J0IFFUX0lNX01PRFVMRT14aW0KKyAgIGV4cG9ydCBYTU9ESUZJRVJTPUBpbT14aW0KKworVGhpcyBpcywgaG93ZXZlciwgbm90IGVub3VnaCBmb3IgcmVjZW50IGdub21lIGRlc2t0b3BzLCB3aGljaCBhbHNvIG5lZWQgdG8KK3J1bjo6CisKKyAgIGdzZXR0aW5nc8Kgc2V0wqBvcmcuZ25vbWUuc2V0dGluZ3MtZGFlbW9uLnBsdWdpbnMua2V5Ym9hcmTCoGFjdGl2ZcKgZmFsc2UKKworVGhlIGBgc2V0eGtibWFwYGAgY29tbWFuZCAoYWJvdmUpIG9ubHkgZW5hYmxlcyB0aGUgYGBicmFpbGxlYGAgbGF5b3V0IGZvciB0aGUKK2N1cnJlbnQgc2Vzc2lvbi4gRm9yIHBlcnNpc3RlbnQgY29uZmlndXJhdGlvbiwgdGhlIHR3byBncm91cHMgbXVzdCBiZQorY29uZmlndXJlZCBwcm9wZXJseSBpbiB0aGUgc3lzdGVtLiBPbiBEZWJpYW4sIGZvciBleGFtcGxlLCB0aGlzIGNhbiBiZSBhY2hpZXZlZAorYnkgc2V0dGluZyB0aGUgZm9sbG93aW5nIGluIGBgL2V0Yy9kZWZhdWx0L2tleWJvYXJkYGA6OgorCisgICBYS0JMQVlPVVQ9InVzLGJyYWkiCisgICBYS0JPUFRJT05TPSJncnA6c2hpZnRfY2Fwc190b2dnbGUsZ3JwX2xlZDpzY3JvbGwiCisKK0J5IGRlZmF1bHQsIHRoZSByZXN1bHQgaXMgVW5pY29kZSBicmFpbGxlIHBhdHRlcm5zIGJlY2F1c2UgWDExIGRvZXNuJ3Qga25vdword2hpY2ggYnJhaWxsZSB0YWJsZSBpdCBzaG91bGQgYmUgdXNpbmcuIFRvIHRlbGwgWDExIHRoZSBjb252ZXJzaW9uIHRoYXQgc2hvdWxkCitiZSBwZXJmb3JtZWQsIHVzZSB0aGUgYGBicmx0dHktdHRiYGAgdG9vbCB0byBjb252ZXJ0IHlvdXIgQlJMVFRZIHRleHQgdGFibGUKK2ludG8gYW4gWENvbXBvc2UgdGFibGUuIEZvciBleGFtcGxlOjoKKworICAgYnJsdHR5LXR0YiAtaSB0dGIgLW8gWENvbXBvc2UgZW5fVVMgL3RtcC9teS5YQ29tcG9zZQorCitUaGUgYGBYQ29tcG9zZWBgIHRhYmxlIGNhbiB0aGVuIGJlIGVuYWJsZWQgYnk6OgorCisgICBjYXQgL3RtcC9teS5YQ29tcG9zZSA+PiB+Ly5YQ29tcG9zZQorCitSZWFkaW5nIHRoZSBTY3JlZW4KKz09PT09PT09PT09PT09PT09PQorCitCUkxUVFkgaXNuJ3QgbWVhbnQgdG8gYmUgYWJsZSB0byByZWFkIGEgd2hvbGUgZ3JhcGhpY2FsIGVudmlyb25tZW50IGFzIGl0Citkb2Vzbid0IGhhdmUgdGhlIG5vdGlvbiBvZiBtZW51cywgYnV0dG9ucywgZXRjLiBUaGUgYE9yY2FgXyBzY3JlZW4gcmVhZGVyCitzaG91bGQgYmUgdXNlZCBpbnN0ZWFkLiBCUkxUVFksIGhvd2V2ZXIsIGhhcyBhIGRyaXZlciB0aGF0IGNhbiBhdCBsZWFzdCByZXZpZXcKK3RoZSB0ZXh0dWFsIGVsZW1lbnRzIChlZGl0IGJveGVzLCB0ZXJtaW5hbHMpLiBUaGlzIGlzIHBhcnRpY3VsYXJseSB1c2VmdWwgZm9yCityZWFkaW5nIHRlcm1pbmFscyBzaW5jZSB0aGF0J3Mgd2hhdCBCUkxUVFkgaXMgZ29vZCBhdC4gVGhpcyBjYW4gYmUgYWNoaWV2ZWQgYnkKK3J1bm5pbmcgYSBzZWNvbmQgQlJMVFRZIGR1cmluZyBYMTEgc2Vzc2lvbiBzdGFydHVwOjoKKworICAgYnJsdHR5IC1iIGJhIC14IGFzCisKK1RoaXMgc2Vjb25kIEJSTFRUWSBjb25uZWN0cyB0byB0aGUgZmlyc3Qgb25lIHZpYSBCcmxBUEkgKHRoYW5rcyB0byB0aGUgYGBiYWBgCiticmFpbGxlIGRyaXZlciksIGFuZCByZWFkcyB0aGUgc2NyZWVuIHZpYSBBdFNwaSAodGhhbmtzIHRvIHRoZSBgYGFzYGAgc2NyZWVuCitkcml2ZXIpLiBBbiBgYGEyYGAgc2NyZWVuIGRyaXZlciBpcyBhbHNvIHByb3ZpZGVkIGZvciBBdFNwaTIgc3VwcG9ydC4KZGlmZiAtLWdpdCBhL0RvY3VtZW50cy9UT0RPIGIvRG9jdW1lbnRzL1RPRE8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmU0ODM5NAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50cy9UT0RPCkBAIC0wLDAgKzEsMjggQEAKK0JSTFRUWSBUT0RPIC0gTWFyY2ggMzAsIDIwMDAKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworKFRoaXMgY29uY2VybnMgdGhlIG1haW4gbW9kdWxlIG9mIEJSTFRUWS4gIEluZGl2aWR1YWwgQnJhaWxsZSB0ZXJtaW5hbAorZHJpdmVycyBtYXkgaGF2ZSB0aGVpciBvd24gVE9ETyBsaXN0cy4pCisKK1lvdXIgaGVscCBpcyB3ZWxjb21lLgorCistIERlZmluaW5nIHNtYWxsZXIgcmVnaW9ucyBvZiB0aGUgc2NyZWVuIHRvIGJlIGNvbmNlbnRyYXRlZCBvbi4gIEN1cnNvcgorICBtb3ZlbWVudCBvdXRzaWRlIHRoZSBjdXJyZW50IHJlZ2lvbiB3b3VsZCBiZSBpZ25vcmVkLiAgVGhpcyB3b3VsZCBiZQorICB1c2VmdWwgaWYgdGhlIHNjcmVlbiB3YXMgc3BsaXQgaW50byBtdWx0aXBsZSBgd2luZG93cycgKGUuZy4gaW4geXRhbGspLgorCistIEF0dHJpYnV0ZSB0cmFja2luZyAoc2Nyb2xsIGJhcnMsIGV0Yy4pCisKKy0gUmV2aXNpb24gb2YgYmVlcHMuICBUb28gbWFueSBldmVudHMgaGF2ZSB0aGUgc2FtZSBiZWVwcywgc28gd2UgbWlnaHQgd2FudAorICB0byBhZGQgbmV3IG9uZXMuIFNlZSBpZiB3ZSBjb3VsZCBvcHRpbWl6ZSB0aGUgdXNlIG9mIHRoZSBjb25zb2xlIHJlc291cmNlLgorICBJbXBsZW1lbnQgLmF1IGFuZCAud2F2IHNvdW5kcyAodGhyb3VnaCBhIHNvdW5kY2FyZCkuCisKKy0gQmV0dGVyIHNwZWVjaCBzdXBwb3J0LgorCistIFN1cHBvcnQgZm9yIG1vcmUgQnJhaWxsZSBkaXNwbGF5cy4KKworLSBQb3J0IHRvIG90aGVyIFVuaXggcGxhdGZvcm1zLiAgU2luY2UgYWxsIExpbnV4IGRlcGVuZGVudCBmdW5jdGlvbnMgYXJlIG5vdworICBtb2R1bGFyaXplZCBpbiBzZXBhcmF0ZSBzb3VyY2UgZmlsZXMsIGl0IHdvdWxkIGJlIGVhc3kgdG8gd3JpdGUgb3RoZXIgCisgIG1vZHVsZXMgdG8gbWFrZSBCUkxUVFkgdXNhYmxlIHdpdGggdGhlIHNjcmVlbiBwYWNrYWdlIG9yIHN1Y2ggYW5kIHRoZW4gCisgIGJlY29tZSBhdmFpbGFibGUgZm9yIGFueSBvdGhlciBVbml4IHBsYXRmb3JtLiAgQW4gZXhwZXJpbWVudGFsIHBhdGNoIGlzIAorICBhdmFpbGFibGUgaW4gdGhlIFBhdGNoZXMvIGRpcmVjdG9yeS4KKwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRzL2FuZHJvaWQtcGVybWlzc2lvbnMucnN0IGIvRG9jdW1lbnRzL2FuZHJvaWQtcGVybWlzc2lvbnMucnN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMxM2ZjMmIKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudHMvYW5kcm9pZC1wZXJtaXNzaW9ucy5yc3QKQEAgLTAsMCArMSw0NSBAQAorYGBCSU5EX0FDQ0VTU0lCSUxJVFlfU0VSVklDRWBgCisgICogRm9yIGluc3BlY3RpbmcgdGhlIGxheW91dCBhbmQgY29udGVudCBvZiB0aGUgc2NyZWVuLgorCitgYEJJTkRfSU5QVVRfTUVUSE9EYGAKKyAgKiBGb3IgQW5kcm9pZCB0byBhY2NlcHQgaW5wdXQgdmlhIEJSTFRUWSBmcm9tIHlvdXIgYnJhaWxsZSBkZXZpY2UncyBrZXlib2FyZC4KKworYGBGT1JFR1JPVU5EX1NFUlZJQ0VgYAorICAqIEZvciBjcmVhdGluZyBhIGZvcmVncm91bmQgbm90aWZpY2F0aW9uLgorCitgYFdBS0VfTE9DS2BgCisgICogRm9yIHJlc2V0dGluZyB0aGUgQW5kcm9pZCBkZXZpY2UncyBsb2NrIHRpbWVyCisgICAgZWFjaCB0aW1lIHlvdSBpbnRlcmFjdCB3aXRoIGEgY29udHJvbCBvbiB5b3VyIGJyYWlsbGUgZGV2aWNlLgorCitgYEJMVUVUT09USGBgCisgICogRm9yIGNvbW11bmljYXRpbmcgd2l0aCBhIGJyYWlsbGUgZGV2aWNlIHZpYSBCbHVldG9vdGguCisKK2BgSU5URVJORVRgYAorICAqIEZvciBsaXN0ZW5pbmcgb24gYSBUQ1AvSVAgcG9ydCBmb3IgQnJsQVBJIGNsaWVudCBjb25uZWN0aW9uIHJlcXVlc3RzLgorCitgYFJFQURfRVhURVJOQUxfU1RPUkFHRWBgCisgICogRm9yIHJlYWRpbmcgY3VzdG9taXplZCBkYXRhIGZpbGVzCisgICAgZnJvbSB5b3VyIEFuZHJvaWQgZGV2aWNlJ3MgcHJpbWFyeSBzaGFyZWQvZXh0ZXJuYWwgc3RvcmFnZSBhcmVhLgorCitgYFNZU1RFTV9BTEVSVF9XSU5ET1dgYAorICAqIEZvciBwcmVzZW50aW5nIHRoZSBBY2Nlc3NpYmlsaXR5IEFjdGlvbnMgY2hvb3Nlci4KKworYGBSRUNFSVZFX0JPT1RfQ09NUExFVEVEYGAKKyAgKiBGb3Iga25vd2luZyB3aGVuIGxvY2tlZCBzdG9yYWdlIGNhbiBiZSBhY2Nlc3NlZCBhZnRlciBhIHJlYm9vdC4KKworYGBSRVFVRVNUX0lOU1RBTExfUEFDS0FHRVNgYAorICAqIEZvciB1cGdyYWRpbmcgdG8gYSBuZXdlciByZWxlYXNlLgorCitgYEFDQ0VTU19XSUZJX1NUQVRFYGAKKyAgKiBGb3IgZ2V0dGluZyBXaS1GaSBzdGF0dXMgdmFsdWVzIChmb3IgdGhlIElORElDQVRPUlMgY29tbWFuZCkuCisKK2BgQUNDRVNTX0ZJTkVfTE9DQVRJT05gYAorICAqIEZvciBnZXR0aW5nIHRoZSBXaS1GaSBTU0lEIChmb3IgdGhlIElORElDQVRPUlMgY29tbWFuZCkuCisgICogRm9yIGdldHRpbmcgY2VsbCBpbmZvcm1hdGlvbiAoZm9yIHRoZSBJTkRJQ0FUT1JTIGNvbW1hbmQpLgorCitgYEFDQ0VTU19DT0FSU0VfVVBEQVRFU2BgCisgICogRm9yIGdldHRpbmcgdGhlIGNlbGwgc2lnbmFsIHN0cmVuZ3RoIChmb3IgdGhlIElORElDQVRPUlMgY29tbWFuZCkuCisKK2BgUkVBRF9QSE9ORV9TVEFURWBgCisgICogRm9yIGdldHRpbmcgdGhlIGNlbGwgZGF0YSBuZXR3b3JrIHR5cGUgKGZvciB0aGUgSU5ESUNBVE9SUyBjb21tYW5kKS4KKwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRzL2F0dHJpYnV0ZXMtdGFibGUuY3N2IGIvRG9jdW1lbnRzL2F0dHJpYnV0ZXMtdGFibGUuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE0ZjUwOTIKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudHMvYXR0cmlidXRlcy10YWJsZS5jc3YKQEAgLTAsMCArMSw0IEBACisibmFtZSIsImRlc2NyaXB0aW9uIgorImxlZnRfcmlnaHQiLCJmb3JlZ3JvdW5kIGNvbG91ciBpbiB0aGUgbGVmdCBjb2x1bW4gYW5kIGJhY2tncm91bmQgY29sb3VyIGluIHRoZSByaWdodCBjb2x1bW4iCisiaW52bGVmdF9yaWdodCIsImludmVyc2UgZm9yZWdyb3VuZCBjb2xvdXIgaW4gdGhlIGxlZnQgY29sdW1uIGFuZCBiYWNrZ3JvdW5kIGNvbG91ciBpbiB0aGUgcmlnaHQgY29sdW1uIgorInVwcGVyX2xvd2VyIiwiZm9yZWdyb3VuZCBjb2xvdXIgaW4gdGhlIHVwcGVyIHNxdWFyZSBhbmQgYmFja2dyb3VuZCBjb2xvdXIgaW4gdGhlIGxvd2VyIHNxdWFyZSIKZGlmZiAtLWdpdCBhL0RvY3VtZW50cy9icmFpbGxlLWRyaXZlci5jc3YgYi9Eb2N1bWVudHMvYnJhaWxsZS1kcml2ZXIuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIwZDUzMTAKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudHMvYnJhaWxsZS1kcml2ZXIuY3N2CkBAIC0wLDAgKzEsNDAgQEAKKyJjb2RlIiwibmFtZSIsImFsaWFzZXMiLCJvdGhlcnMiLCJ1c2FnZSIKKyJhdXRvIiwiYXV0b2RldGVjdCIsIiIsIiIsIiIKKyJhbCIsIkFsdmEiLCIiLCIiLCJBQlQoM25uKSwgRGVscGhpKDRubiksIFNhdGVsbGl0ZSg1bm4pLCBCcmFpbGxlIFN5c3RlbSA0MCwgQnJhaWxsZSBDb250cm9sbGVyIDY0MC82ODAsIEVhc3kgTGluayAxMiIKKyJhdCIsIkFsYmF0cm9zcyIsIiIsIiIsIjQ2LzgwIgorImJhIiwiQnJsQVBJIiwiIiwiIiwiQnJsQVBJIGNsaWVudCIKKyJiYyIsIkJyYWlsQ29tbSIsIiIsIiIsIklJSSIKKyJiZCIsIkJyYXVkaSIsIiIsIiIsIlBybyIKKyJibCIsIkJyYWlsbGVMaXRlIiwiIiwiIiwiMTgvNDAvTTIwL000MCIKKyJibSIsIkJhdW0iLCIiLCJSZWZyZXNoYWJyYWlsbGUsIE9yYml0LCBOTFMgZVJlYWRlciBab29tYXgsIE5CUCBCMkciLCJCcmFpbGxlQ29ubmVjdCAxMi8yNC8zMi80MC82NC84MCwgQnJhaWxsaWFudCAyNC8zMi80MC82NC84MCwgQ29ubnkgMTIsIERNODAgUGx1cywgRWNvVmFyaW8gMjQvMzIvNDAvNjQvODAsIElua2EsIE5MUyBlUmVhZGVyIFpvb21heCwgT3JiaXQgUmVhZGVyIDIwLzQwLCBQb2NrZXRWYXJpbyAyNCwgUHJvbnRvISBWMyAxOC80MCwgUHJvbnRvISBWNCAxOC80MCwgUkJUIDQwLzgwLCBSZWZyZXNoYWJyYWlsbGUgMTgsIFN1cGVyVmFyaW8gMzIvNDAvNjQvODAsIFZhcmlvIDQwLzgwLCBWYXJpb0Nvbm5lY3QgMTIvMjQvMzIvNDAvNjQvODAsIFZhcmlvUHJvIDQwLzY0LzgwLCBWYXJpb1VsdHJhIDIwLzMyLzQwIgorImJuIiwiQnJhaWxsZU5vdGUiLCIiLCIiLCIxOC8zMiwgQXBleCIKKyJjYiIsIkNvbWJpQnJhaWxsZSIsIiIsIiIsIjI1LzQ1Lzg1IgorImNlIiwiQ2VicmEiLCIiLCIiLCIyMC80MC82MC84MC8xMDAvMTIwLzE0MCIKKyJjbiIsIkNhbnV0ZSIsIiIsIiIsIjM2MCAoNDB4OSkiCisiZHAiLCJEb3RQYWQiLCIiLCIiLCIiCisiZWMiLCJFY29CcmFpbGxlIiwiIiwiIiwiMjAvNDAvODAiCisiZXUiLCJFdXJvQnJhaWxsZSIsIiIsIiIsIkF6ZXJCcmFpbGxlLCBDbGlvLCBFc3lzLCBJcmlzLCBOb3RlQnJhaWxsZSwgU2NyaWJhIgorImZhIiwiRnJhbmtBdWRpb2RhdGEiLCIiLCIiLCJCMks4NCIKKyJmcyIsIkZyZWVkb21TY2llbnRpZmljIiwiVkZPLCBWaXNwZXJvIiwiIiwiRm9jdXMgMSA0NC83MC84NCwgRm9jdXMgMiA0MC84MCwgRm9jdXMgMysgKEJsdWUpIDE0LzQwLzgwLCBQQUMgTWF0ZSAyMC80MCIKKyJoZCIsIkhlZG8iLCIiLCIiLCJQcm9maUxpbmUsIE1vYmlsTGluZSIKKyJobSIsIkhJTVMiLCIiLCIiLCJCcmFpbGxlIFNlbnNlLCBTeW5jQnJhaWxsZSwgQnJhaWxsZSBFZGdlLCBTbWFydCBCZWV0bGUsIFFCcmFpbGxlWEwiCisiaHQiLCJIYW5keVRlY2giLCJIZWxwVGVjaCIsIiIsIk1vZHVsYXIgMjAvNDAvODAsIE1vZHVsYXIgRXZvbHV0aW9uIDY0Lzg4LCBNb2R1bGFyIENvbm5lY3QgODgsIEFjdGl2ZSBCcmFpbGxlLCBBY3RpdmUgQnJhaWxsZSBTLCBBY3RpdmUgU3RhciA0MCwgQWN0aWxpbm8sIEFjdGl2YXRvciwgQmFzaWMgQnJhaWxsZSAxNi8yMC8zMi80MC80OC82NC84MCwgQnJhaWxsaW5vLCBCcmFpbGxlIFdhdmUsIEVhc3kgQnJhaWxsZSwgQnJhaWxsZSBTdGFyIDQwLzgwLCBDb25uZWN0IEJyYWlsbGUgNDAsIEJvb2t3b3JtIgorImh3IiwiSHVtYW5XYXJlIiwiIiwiQVBIIENoYW1lbGVvbiwgQVBIIE1hbnRpcywgTkxTIGVSZWFkZXIiLCJCcmFpbGxpYW50IEJJIDE0LzMyLzQwLCBCcmFpbGxpYW50IEJJIDIwWC80MFgsIEJyYWlsbGlhbnQgQiA4MCwgQnJhaWxsZU5vdGUgVG91Y2gsIEJyYWlsbGVPbmUsIEFQSCBDaGFtZWxlb24gMjAsIEFQSCBNYW50aXMgUTQwLCBOTFMgZVJlYWRlciIKKyJpYyIsIkluY2VwdG9yIiwiSW5ub3Zpc2lvbiIsIiIsIkJyYWlsbGVNZSAoMjApIgorImlyIiwiSXJpcyIsIiIsIiIsIktCIgorImxiIiwiTGliYnJhaWxsZSIsIiIsIiIsIkxpYmJyYWlsbGUiCisibHQiLCJMb2dUZXh0IiwiIiwiIiwiMzIiCisibWIiLCJNdWx0aUJyYWlsbGUiLCIiLCIiLCJNQjEyNUNSLCBNQjE0NUNSLCBNQjE4NUNSIgorIm1kIiwiTURWIiwiIiwiIiwiTUIyMDgsIE1CMjQ4LCBNQjQwOEwsIE1CNDA4TCssIExpbGxpIEJsdSIKKyJtbSIsIkJyYWlsbGVNZW1vIiwiIiwiIiwiUG9ja2V0ICgxNiksIFNtYXJ0ICgxNiksIDMyLCA0MCIKKyJtbiIsIk1pbmlCcmFpbGxlIiwiIiwiIiwiMjAiCisibXQiLCJNZXRlYyIsIiIsIiIsIkJELTQwIgorIm5wIiwiTmluZVBvaW50IiwiIiwiIiwiOCIKKyJwZyIsIlBlZ2FzdXMiLCIiLCIiLCIyMC8yNy80MC84MCIKKyJwbSIsIlBhcGVubWVpZXIiLCIiLCIiLCJDb21wYWN0IDQ4NiwgQ29tcGFjdC9UaW55LCBJQiA4MCBDUiBTb2Z0LCAyRCBMaXRlIChwbHVzKSwgMkQgU2NyZWVuIFNvZnQsIEVMIDgwLCBFTCAyRCA0MC82Ni84MCwgRUwgNDAvNjYvNzAvODAgUywgRUwgNDAvNjAvODAgQywgRUwgMkQgODAgUywgRUwgNDAgUCwgRUwgODAgSUksIEVsYmEgMjAvMzIsIFRyaW8gNDAvRWxiYTIwL0VsYmEzMiwgTGl2ZSAyMC80MCIKKyJzayIsIlNlaWthIiwiIiwiIiwiMy80LzUgKDQwKSwgODAsIE1pbmkgKDE2KSIKKyJ0biIsIlRlY2huaUJyYWlsbGUiLCIiLCIiLCJNYW5hZ2VyIDQwIgorInRzIiwiVFNJIiwiIiwiIiwiTmF2aWdhdG9yIDIwLzQwLzgwLCBQb3dlckJyYWlsbGUgNDAvNjUvODAiCisidmQiLCJWaWRlb0JyYWlsbGUiLCIiLCIiLCI0MCIKKyJ2byIsIlZveWFnZXIiLCIiLCJCcmFpbGxlIFBlbiwgRWFzeSBMaW5rIiwiNDQvNzAsIFBhcnQyMzIgKHNlcmlhbCBhZGFwdGVyKSwgQnJhaWxsZVBlbi9FYXN5TGluayIKKyJ2cyIsIlZpc2lvQnJhaWxsZSIsIiIsIiIsIjIwLzQwIgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRzL2JybHR0eS4xLmluIGIvRG9jdW1lbnRzL2JybHR0eS4xLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY5MWZmMDAKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudHMvYnJsdHR5LjEuaW4KQEAgLTAsMCArMSw4NjYgQEAKKy5cIiBAY29uZmlndXJlX2lucHV0QAorLlwiCisuXCIgQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKy5cIiAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKy5cIgorLlwiIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKy5cIgorLlwiIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisuXCIKKy5cIiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisuXCIgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKy5cIiBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisuXCIgbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisuXCIKKy5cIiBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisuXCIKKy5cIiBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKy5cIgorLlRIICJCUkxUVFkiICIxIiAiSnVseSAyMDIzIiAiQFBBQ0tBR0VfVEFSTkFNRUAgQFBBQ0tBR0VfVkVSU0lPTkAiICJAUEFDS0FHRV9OQU1FQCBVc2VyJ3MgTWFudWFsIgorLlNIIE5BTUUKK2JybHR0eSBcLSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkgZHJpdmVyIGZvciBMaW51eC9Vbml4CisuU0ggU1lOT1BTSVMKK1xmQmJybHR0eSBcZlJbXGZJb3B0aW9uXGZSIC4uLl0KKy5TSCBERVNDUklQVElPTgorLkIgYnJsdHR5CitpcyBhIGJhY2tncm91bmQgcHJvY2VzcyAoZGFlbW9uKQord2hpY2ggcHJvdmlkZXMgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbiB0ZXh0IG1vZGUpCitmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCitJdCBkcml2ZXMgdGhlIGJyYWlsbGUgZGlzcGxheSwKK2FuZCBwcm92aWRlcyBjb21wbGV0ZSBzY3JlZW4gcmV2aWV3IGZ1bmN0aW9uYWxpdHkuCitTb21lIHNwZWVjaCBjYXBhYmlsaXR5IGhhcyBhbHNvIGJlZW4gaW5jb3Jwb3JhdGVkLgorLlNIIE9QVElPTlMKK09wdGlvbnMgY2FuIGJlIHBhc3NlZCB0bworLkIgYnJsdHR5CitpbiBhIG51bWJlciBvZiB3YXlzLgorRnJvbSBtb3N0IHRvIGxlYXN0IGluZmx1ZW50aWFsLCB0aGVzZSBhcmU6CisuSVAgMS4gNAorQ29tbWFuZCBMaW5lIE9wdGlvbnMKKy5JUCAyLiA0CitCb290IFBhcmFtZXRlcnMKKy5JUCAzLiA0CitFbnZpcm9ubWVudCBWYXJpYWJsZXMKKyhpZiB0aGUKKy5CIFwtRQorLlJCICIoIiAiXC1cLWVudmlyb25tZW50XC12YXJpYWJsZXMiICIpIgorb3B0aW9uIGlzIGluIGVmZmVjdCkKKy5JUCA0LiA0CitUaGUgQ29uZmlndXJhdGlvbiBGaWxlCisuSVAgNS4gNAorQnVpbHQtaW4gRGVmYXVsdHMKKy5TUyAiQ29tbWFuZCBMaW5lIE9wdGlvbnMiCitUaGUgb3B0aW9ucyBhcmUgcHJvY2Vzc2VkIHNlcXVlbnRpYWxseSBmcm9tIGxlZnQgdG8gcmlnaHQuCitJZiBhbiBvcHRpb24gaXMgc3BlY2lmaWVkIG1vcmUgdGhhbiBvbmNlLAorb3IgaW4gY2FzZSBvZiBhIGNvbmZsaWN0LAordGhlIHJpZ2h0bW9zdCBzcGVjaWZpY2F0aW9uIHRha2VzIHByZWNlZGVuY2UuCisuUFAKK1RoZSBmb2xsb3dpbmcgb3B0aW9ucyBhcmUgc3VwcG9ydGVkOgorLlRQCitcZkJcLWEgXGZJdGFibGVcZlIgKFxmQlwtXC1hdHRyaWJ1dGVzXC10YWJsZT1cZlIpCitUaGUgcGF0aCB0byB0aGUgYXR0cmlidXRlcyB0YWJsZS4KK1JlbGF0aXZlIHBhdGhzIGFyZSBhbmNob3JlZCBhdAorLkJSICJAVEFCTEVTX0RJUkVDVE9SWUAvQEFUVFJJQlVURVNfVEFCTEVTX1NVQkRJUkVDVE9SWUAiICIuIgorVGhlCisuQiAiLmF0YiIKK2V4dGVuc2lvbiBpcyBvcHRpb25hbC4KK1RoZSBidWlsdC1pbiBkZWZhdWx0IGlzCisuQlIgIkBhdHRyaWJ1dGVzX3RhYmxlQC5hdGIiICIuIgorLlRQCitcZkJcLWIgXGZJZHJpdmVyXGZCLFxmUi4uLnxcZkJhdXRvXGZSIChcZkJcLVwtYnJhaWxsZVwtZHJpdmVyPVxmUikKK1RoZSBkcml2ZXIgZm9yIHRoZSBicmFpbGxlIGRpc3BsYXkKKyhzZWUgRHJpdmVyIFNwZWNpZmljYXRpb24pLgorVGhlIGJ1aWx0LWluIGRlZmF1bHQgaXMgXGZCYXV0b1xmUi4KKy5UUAorXGZCXC1jIFxmSXRhYmxlXGZSIChcZkJcLVwtY29udHJhY3Rpb25cLXRhYmxlPVxmUikKK1RoZSBwYXRoIHRvIHRoZSBjb250cmFjdGlvbiB0YWJsZS4KK1JlbGF0aXZlIHBhdGhzIGFyZSBhbmNob3JlZCBhdAorLkJSICJAVEFCTEVTX0RJUkVDVE9SWUAvQENPTlRSQUNUSU9OX1RBQkxFU19TVUJESVJFQ1RPUllAIiAiLiIKK1RoZQorLkIgIi5jdGIiCitleHRlbnNpb24gaXMgb3B0aW9uYWwuCisuVFAKK1xmQlwtZCBcZklkZXZpY2VcZkIsXGZSLi4uIChcZkJcLVwtYnJhaWxsZVwtZGV2aWNlPVxmUikKK1RoZSBkZXZpY2UgdG8gd2hpY2ggdGhlIGJyYWlsbGUgZGlzcGxheSBpcyBjb25uZWN0ZWQuCitUaGUgYnVpbHQtaW4gZGVmYXVsdCBpcyBcZkJAYnJhaWxsZV9kZXZpY2VAXGZSLgorLlJTCisuUFAKK1RoZSBnZW5lcmFsIGZvcm0gb2YgYSBicmFpbGxlIGRldmljZSBzcGVjaWZpY2F0aW9uIGlzCitcZklxdWFsaWZpZXJcZkI6XGZJZGF0YVxmUi4KK0ZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5IHdpdGggZWFybGllciByZWxlYXNlcywKK2lmIHRoZSBxdWFsaWZpZXIgaXMgb21pdHRlZCB0aGVuCisuQiBzZXJpYWw6CitpcyBhc3N1bWVkLgorVGhlIGZvbGxvd2luZyBkZXZpY2UgdHlwZXMgYXJlIHN1cHBvcnRlZDoKKy5UUAorLkIgQmx1ZXRvb3RoCitGb3IgYSBibHVldG9vdGggZGV2aWNlLCBzcGVjaWZ5IFxmQmJsdWV0b290aDpcZklhZGRyZXNzXGZSLgorVGhlIGFkZHJlc3MgbXVzdCBiZSBzaXggdHdvLWRpZ2l0IGhleGFkZWNpbWFsIG51bWJlcnMgc2VwYXJhdGVkIGJ5IGNvbG9ucywgZS5nLgorLkJSICIwMToyMzo0NTo2Nzo4OTpBQiIgIi4iCisuVFAKKy5CIFNlcmlhbAorRm9yIGEgc2VyaWFsIGRldmljZSwgc3BlY2lmeSBcZkJzZXJpYWw6XGZJZGV2aWNlXGZSLgorVGhlCisuQiBzZXJpYWw6CitxdWFsaWZpZXIgaXMgb3B0aW9uYWwgKGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5KS4KK0lmIGEgcmVsYXRpdmUgcGF0aCBpcyBnaXZlbiB0aGVuIGl0J3MgYW5jaG9yZWQgYXQKKy5CIC9kZXYvCisodGhlIHVzdWFsIGxvY2F0aW9uIHdoZXJlIGRldmljZXMgYXJlIGRlZmluZWQgb24gYSBVbml4LWxpa2Ugc3lzdGVtKS4KK1RoZSBmb2xsb3dpbmcgZGV2aWNlIHNwZWNpZmljYXRpb25zIGFsbCByZWZlcgordG8gdGhlIHByaW1hcnkgc2VyaWFsIGRldmljZSBvbiBMaW51eDoKKy5CUiAic2VyaWFsOkBzZXJpYWxfZmlyc3RfZGV2aWNlQCIgIiwiCisuQlIgInNlcmlhbDovZGV2L0BzZXJpYWxfZmlyc3RfZGV2aWNlQCIgIiwiCisuQlIgIkBzZXJpYWxfZmlyc3RfZGV2aWNlQCIgIiwiCisuQlIgIi9kZXYvQHNlcmlhbF9maXJzdF9kZXZpY2VAIiAiLiIKKy5UUAorLkIgVVNCCitGb3IgYSBVU0IgZGV2aWNlLCBzcGVjaWZ5IFxmQnVzYjpcZlIuCisuQiBicmx0dHkKK3dpbGwgc2VhcmNoIGZvciB0aGUgZmlyc3QgVVNCIGRldmljZSB3aGljaAorbWF0Y2hlcyB0aGUgYnJhaWxsZSBkaXNwbGF5IGRyaXZlciBiZWluZyB1c2VkLgorSWYgdGhpcyBpcyBpbmFkZXF1YXRlLAorZS5nLiBpZiB5b3UgaGF2ZSBtb3JlIHRoYW4gb25lIFVTQiBicmFpbGxlIGRpc3BsYXkgd2hpY2ggcmVxdWlyZXMgdGhlIHNhbWUgZHJpdmVyLAordGhlbiB5b3UgY2FuIHJlZmluZSB0aGUgZGV2aWNlIHNwZWNpZmljYXRpb24KK2J5IGFwcGVuZGluZyB0aGUgc2VyaWFsIG51bWJlciBvZiB0aGUgZGlzcGxheSB0byBpdCwgZS5nLgorLkJSICJ1c2I6MTIzNDUiICIuIgorTi5CLjoKK1RoZSAiaWRlbnRpZmljYXRpb24gYnkgc2VyaWFsIG51bWJlciIgZmVhdHVyZSBkb2Vzbid0IHdvcmsgZm9yIHNvbWUgbW9kZWxzCitiZWNhdXNlIHNvbWUgbWFudWZhY3R1cmVycworZWl0aGVyIGRvbid0IHNldCB0aGUgVVNCIHNlcmlhbCBudW1iZXIgZGVzY3JpcHRvciBhdCBhbGwKK29yIGRvIHNldCBpdCBidXQgbm90IHRvIGEgdW5pcXVlIHZhbHVlLgorLlBQCitBIGNvbW1hLWRlbGltaXRlZCBsaXN0IG9mIGJyYWlsbGUgZGV2aWNlcyBtYXkgYmUgc3BlY2lmaWVkLgorSWYgdGhpcyBpcyBkb25lIHRoZW4gYXV0b2RldGVjdGlvbiBpcyBwZXJmb3JtZWQgb24gZWFjaCBsaXN0ZWQgZGV2aWNlIGluIHNlcXVlbmNlLgorVGhpcyBmZWF0dXJlIGlzIHBhcnRpY3VsYXJseSB1c2VmdWwgaWYgeW91IGhhdmUKK2EgYnJhaWxsZSBkaXNwbGF5IHdpdGggbW9yZSB0aGFuIG9uZSBpbnRlcmZhY2UsCitlLmcuIGJvdGggYSBzZXJpYWwgYW5kIGEgVVNCIHBvcnQuCisuUkUKKy5UUAorXGZCXC1lXGZSIChcZkJcLVwtc3RhbmRhcmRcLWVycm9yXGZSKQorV3JpdGUgbG9ncyB0byBzdGFuZGFyZCBlcnJvciByYXRoZXIgdGhhbiB0byB0aGUgc3lzdGVtIGxvZyAodXNlZnVsIGZvciBkZWJ1Z2dpbmcpLgorLlRQCitcZkJcLWYgXGZJZmlsZVxmUiAoXGZCXC1cLWNvbmZpZ3VyYXRpb25cLWZpbGU9XGZSKQorVGhlIHBhdGggdG8gdGhlIGNvbmZpZ3VyYXRpb24gZmlsZS4KK1JlbGF0aXZlIHBhdGhzIGFyZSBhbmNob3JlZCBhdCB0aGUgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeS4KK1RoZSBidWlsdC1pbiBkZWZhdWx0IGlzCisuQlIgIkBDT05GSUdVUkFUSU9OX0RJUkVDVE9SWUAvQENPTkZJR1VSQVRJT05fRklMRUAiICIuIgorLlRQCitcZkJcLWhcZlIgKFxmQlwtXC1oZWxwXGZSKQorUHJpbnQgYSBjb21tYW5kIGxpbmUgdXNhZ2Ugc3VtbWFyeSAoY29tbW9ubHkgdXNlZCBvcHRpb25zIG9ubHkpLAorYW5kIHRoZW4gZXhpdC4KKy5UUAorXGZCXC1pIFxmSW5hbWVcZlIgKFxmQlwtXC1zcGVlY2hcLWlucHV0PVxmUikKK1RoZSBmaWxlIHN5c3RlbSBvYmplY3QKKyhGSUZPLCBuYW1lZCBwaXBlLCBuYW1lZCBzb2NrZXQsIGV0YykKK3doaWNoIGdpdmVzIG90aGVyIGFwcGxpY2F0aW9ucyBhY2Nlc3MgdG8KKy5CUiBicmx0dHkgJ3MKK3NwZWVjaCBkcml2ZXIgZm9yIHRleHQtdG8tc3BlZWNoIGNvbnZlcnNpb24uCitJdCdzIGNyZWF0ZWQgYXQgc3RhcnQtdXAgYW5kIHJlbW92ZWQgYXQgdGVybWluYXRpb24uCitSZWxhdGl2ZSBwYXRocyBhcmUgYW5jaG9yZWQgYXQgdGhlIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkuCitUaGUgYnVpbHQtaW4gZGVmYXVsdCBpcwordGhhdCB0aGUgZmlsZSBzeXN0ZW0gb2JqZWN0IGlzIG5vdCBjcmVhdGVkLgorLlRQCitcZkJcLWsgXGZJdGFibGVcZlIgKFxmQlwtXC1rZXlib2FyZFwtdGFibGU9XGZSKQorVGhlIHBhdGggdG8gdGhlIGtleWJvYXJkIHRhYmxlLgorUmVsYXRpdmUgcGF0aHMgYXJlIGFuY2hvcmVkIGF0CisuQlIgIkBUQUJMRVNfRElSRUNUT1JZQC9AS0VZQk9BUkRfVEFCTEVTX1NVQkRJUkVDVE9SWUAiICIuIgorVGhlCisuQiAiLmt0YiIKK2V4dGVuc2lvbiBpcyBvcHRpb25hbC4KKy5UUAorXGZCXC1sIFxmSWxldmVsXGZSIChcZkJcLVwtbG9nXC1sZXZlbD1cZlIpCitUaGUgbWluaW11bSBzZXZlcml0eSBsZXZlbCBmb3IgbWVzc2FnZXMgd3JpdHRlbiB0byB0aGUgbG9nLgorQW55IG9mIHRoZSBmb2xsb3dpbmcgbnVtYmVycywKK29yIGFueSBhYmJyZXZpYXRpb24gb2YgdGhlaXIgY29ycmVzcG9uZGluZyBuYW1lcywKK21heSBiZSBzcGVjaWZpZWQ6CisuUlMKKy5UUCA0CisuQiAwCisuQiBlbWVyZ2VuY3kKKy5UUCA0CisuQiAxCisuQiBhbGVydAorLlRQIDQKKy5CIDIKKy5CIGNyaXRpY2FsCisuVFAgNAorLkIgMworLkIgZXJyb3IKKy5UUCA0CisuQiA0CisuQiB3YXJuaW5nCisuVFAgNAorLkIgNQorLkIgbm90aWNlCisuVFAgNAorLkIgNgorLkIgaW5mb3JtYXRpb24KKy5UUCA0CisuQiA3CisuQiBkZWJ1ZworLlJFCisuUFAKK1RoZSBidWlsdC1pbiBkZWZhdWx0IGlzCisuQlIgIm5vdGljZSIgIi4iCisuVFAKK1xmQlwtbSBcZklkZXZpY2VcZlIgKFxmQlwtXC1taWRpXC1kZXZpY2U9XGZSKQorVGhlIGRldmljZSB0byB1c2UgZm9yIHRoZSBNdXNpY2FsIEluc3RydW1lbnQgRGlnaXRhbCBJbnRlcmZhY2UuCitGb3IgQUxTQSBpdCdzIFxmSWNsaWVudFxmQjpcZklwb3J0XGZSLAord2hlcmUgZWFjaCBtYXkgYmUgZWl0aGVyIGEgbnVtYmVyIG9yIGEgY2FzZS1zZW5zaXRpdmUgc3Vic3RyaW5nIG9mIGl0cyBuYW1lLgorRm9yIG90aGVyIGludGVyZmFjZXMgaXQncyB0aGUgZnVsbCBwYXRoIHRvIGFuIGFwcHJvcHJpYXRlIHN5c3RlbSBkZXZpY2UuCitUaGUgYnVpbHQtaW4gZGVmYXVsdCBpczoKKy5SUworLklQIExpbnV4L0FMU0EgMTIKK3RoZSBmaXJzdCBhdmFpbGFibGUgTUlESSBvdXRwdXQgcG9ydAorLklQIExpbnV4L09TUyAxMgorLkIgL2Rldi9zZXF1ZW5jZXIKKy5SRQorLlRQCitcZkJcLW5cZlIgKFxmQlwtXC1ub1wtZGFlbW9uXGZSKQorUmVtYWluIGluIHRoZSBmb3JlZ3JvdW5kICh1c2VmdWwgZm9yIGRlYnVnZ2luZykuCisuVFAKK1xmQlwtbyBcZkluYW1lXGZCPVxmSXZhbHVlXGZCLFxmUi4uLiAoXGZCXC1cLW92ZXJyaWRlXC1wcmVmZXJlbmNlPVxmUikKK092ZXJyaWRlIGEgcHJlZmVyZW5jZSBzZXR0aW5nLgorRm9yIHRoZSBsb2NhdGlvbiBvZiB0aGUgcHJlZmVyZW5jZXMgZmlsZSwgc2VlIHRoZQorLkIgXC1GCisuUkIgIigiICJcLVwtcHJlZmVyZW5jZXNcLWZpbGUiICIpIgorb3B0aW9uLgorLlRQCitcZkJcLXAgXGZJZGV2aWNlXGZSIChcZkJcLVwtcGNtXC1kZXZpY2U9XGZSKQorVGhlIGRldmljZSB0byB1c2UgZm9yIGRpZ2l0YWwgYXVkaW8uCitGb3IgQUxTQSBpdCdzIFxmSW5hbWVcZlJbXGZCOlxmSWFyZ3VtZW50XGZCLFxmUi4uLl0uCitGb3Igb3RoZXIgaW50ZXJmYWNlcyBpdCdzIHRoZSBmdWxsIHBhdGggdG8gYW4gYXBwcm9wcmlhdGUgc3lzdGVtIGRldmljZS4KK1RoZSBidWlsdC1pbiBkZWZhdWx0IGlzOgorLlJTCisuSVAgRnJlZUJTRCAxMgorLkIgL2Rldi9kc3AKKy5JUCBMaW51eC9BTFNBIDEyCisuQiBodzowLDAKKy5JUCBMaW51eC9PU1MgMTIKKy5CIC9kZXYvZHNwCisuSVAgTmV0QlNEIDEyCisuQiAvZGV2L2F1ZGlvCisuSVAgT3BlbkJTRCAxMgorLkIgL2Rldi9hdWRpbworLklQIFFueCAxMgordGhlIHByZWZlcnJlZCBQQ00gb3V0cHV0IGRldmljZQorLklQIFNvbGFyaXMgMTIKKy5CIC9kZXYvYXVkaW8KKy5SRQorLlRQCitcZkJcLXFcZlIgKFxmQlwtXC1xdWlldFxmUikKK1N1cHByZXNzIHRoZSBzdGFydC11cCBtZXNzYWdlcy4KK1RoaXMgaXMgZG9uZSBieSByZWR1Y2luZyB0aGUgZGVmYXVsdCBsb2cgbGV2ZWwKKyhzZWUgdGhlCisuQiBcLWwKKy5SQiAiKCIgIlwtXC1sb2dcLWxldmVsPSIgIikiCitvcHRpb24pCit0bworLkIgd2FybmluZworLlJCICIoIiAiaW5mb3JtYXRpb24iCitpZiBlaXRoZXIKKy5CIFwtdgorLlJCICIoIiAiXC1cLXZlcmlmeSIgIikiCitvcgorLkIgXC1WCisuUkIgIigiICJcLVwtdmVyc2lvbiIgIikiCitpcyBhbHNvIHNwZWNpZmllZCkuCisuVFAKK1xmQlwtclxmUiAoXGZCXC1cLXJlbGVhc2VcLWRldmljZVxmUikKK1JlbGVhc2UgdGhlIGRldmljZSB0byB3aGljaCB0aGUgYnJhaWxsZSBkaXNwbGF5IGlzIGNvbm5lY3RlZAord2hlbiB0aGUgY3VycmVudCBzY3JlZW4gb3Igd2luZG93IGNhbid0IGJlIHJlYWQuCisuVFAKK1xmQlwtcyBcZklkcml2ZXJcZkIsXGZSLi4ufFxmQmF1dG9cZlIgKFxmQlwtXC1zcGVlY2hcLWRyaXZlcj1cZlIpCitUaGUgZHJpdmVyIGZvciB0aGUgc3BlZWNoIHN5bnRoZXNpemVyCisoc2VlIERyaXZlciBTcGVjaWZpY2F0aW9uKS4KK1RoZSBidWlsdC1pbiBkZWZhdWx0IGlzIFxmQmF1dG9cZlIuCisuVFAKK1xmQlwtdCBcZkl0YWJsZVxmUiAoXGZCXC1cLXRleHRcLXRhYmxlPVxmUikKK1RoZSBwYXRoIHRvIHRoZSB0ZXh0IHRhYmxlLgorUmVsYXRpdmUgcGF0aHMgYXJlIGFuY2hvcmVkIGF0CisuQlIgIkBUQUJMRVNfRElSRUNUT1JZQC9AVEVYVF9UQUJMRVNfU1VCRElSRUNUT1JZQCIgIi4iCitUaGUKKy5CICIudHRiIgorZXh0ZW5zaW9uIGlzIG9wdGlvbmFsLgorVGhlIGJ1aWx0LWluIGRlZmF1bHQgaXMKKy5CICJAdGV4dF90YWJsZUAudHRiIgorKHRoZSBOb3J0aCBBbWVyaWNhbiBCcmFpbGxlIENvbXB1dGVyIENvZGUpLgorLlRQCitcZkJcLXZcZlIgKFxmQlwtXC12ZXJpZnlcZlIpCitQcmludCB0aGUgc3RhcnQtdXAgbWVzc2FnZXMgYW5kIHRoZW4gZXhpdC4KK1RoaXMgYWx3YXlzIGluY2x1ZGVzIHRoZSB2ZXJzaW9ucyBvZgorLkIgYnJsdHR5CitpdHNlbGYsCit0aGUgc2VydmVyIHNpZGUgb2YgaXRzIGFwcGxpY2F0aW9uIHByb2dyYW1taW5nIGludGVyZmFjZSwKK2FuZCBlYWNoIG9mIHRoZSBzZWxlY3RlZCBicmFpbGxlIGFuZCBzcGVlY2ggZHJpdmVycy4KK0lmIHRoZQorLkIgXC1xCisuUkIgIigiICJcLVwtcXVpZXQiICIpIgorb3B0aW9uIGlzbid0IGFsc28gc3BlY2lmaWVkCit0aGVuIGl0IGFsc28gaW5jbHVkZXMgdGhlIHZhbHVlcyBvZiB0aGUgb3B0aW9ucyBhZnRlciBhbGwgc291cmNlcyBoYXZlIGJlZW4gY29uc2lkZXJlZC4KK0lmIG1vcmUgdGhhbiBvbmUgYnJhaWxsZSBkcml2ZXIgYW5kL29yIG1vcmUgdGhhbiBvbmUgYnJhaWxsZSBkZXZpY2UKK2hhcyBiZWVuIHNwZWNpZmllZCB0aGVuIGJyYWlsbGUgZGlzcGxheSBhdXRvZGV0ZWN0aW9uIGlzIHBlcmZvcm1lZC4KK0lmIG1vcmUgdGhhbiBvbmUgc3BlZWNoIGRyaXZlcgoraGFzIGJlZW4gc3BlY2lmaWVkIHRoZW4gc3BlZWNoIHN5bnRoZXNpemVyIGF1dG9kZXRlY3Rpb24gaXMgcGVyZm9ybWVkLgorLlRQCitcZkJcLXggXGZJZHJpdmVyXGZSIChcZkJcLVwtc2NyZWVuXC1kcml2ZXI9XGZSKQorVGhlIHNjcmVlbiBkcml2ZXIuCitUaGUgYnVpbHQtaW4gZGVmYXVsdCBpcyBvcGVyYXRpbmcgc3lzdGVtIGFwcHJvcHJpYXRlLgorLlRQCitcZkJcLUEgXGZJbmFtZVxmQj1cZkl2YWx1ZVxmQixcZlIuLi4gKFxmQlwtXC1hcGlcLXBhcmFtZXRlcnM9XGZSKQorUGFyYW1ldGVycyBmb3IgdGhlIGFwcGxpY2F0aW9uIHByb2dyYW1taW5nIGludGVyZmFjZS4KK0lmIHRoZSBzYW1lIHBhcmFtZXRlciBpcyBzcGVjaWZpZWQgbW9yZSB0aGFuIG9uY2UKK3RoZW4gdGhlIHJpZ2h0bW9zdCBzcGVjaWZpY2F0aW9uIGlzIHVzZWQuCitQYXJhbWV0ZXIgbmFtZXMgbWF5IGJlIGFiYnJldmlhdGVkLgorLlRQCitcZkJcLUIgXGZSW1xmSWRyaXZlclxmQjpcZlJdXGZJbmFtZVxmQj1cZkl2YWx1ZVxmQixcZlIuLi4gKFxmQlwtXC1icmFpbGxlXC1wYXJhbWV0ZXJzPVxmUikKK1BhcmFtZXRlcnMgZm9yIHRoZSBicmFpbGxlIGRpc3BsYXkgZHJpdmVyLgorSWYgdGhlIHNhbWUgcGFyYW1ldGVyIGlzIHNwZWNpZmllZCBtb3JlIHRoYW4gb25jZQordGhlbiB0aGUgcmlnaHRtb3N0IHNwZWNpZmljYXRpb24gaXMgdXNlZC4KK1BhcmFtZXRlciBuYW1lcyBtYXkgYmUgYWJicmV2aWF0ZWQuCitJZiBhIHBhcmFtZXRlciBhc3NpZ25tZW50IGlzIHF1YWxpZmllZCB3aXRoIGEgZHJpdmVyIGlkZW50aWZpY2F0aW9uIGNvZGUKK3RoZW4gaXQncyBvbmx5IHByb2Nlc3NlZCBpZiB0aGF0IGJyYWlsbGUgZGlzcGxheSBkcml2ZXIgaXMgYmVpbmcgdXNlZC4KKy5UUAorXGZCXC1EIFxmSWRpcmVjdG9yeVxmUiAoXGZCXC1cLWRyaXZlcnNcLWRpcmVjdG9yeT1cZlIpCitUaGUgcGF0aCB0byB0aGUgZGlyZWN0b3J5IHdoaWNoIGNvbnRhaW5zCit0aGUgZHluYW1pY2FsbHkgbG9hZGFibGUgZHJpdmVyIG9iamVjdHMuCitUaGUgYnVpbHQtaW4gZGVmYXVsdCBpcworLlJCICJARFJJVkVSU19ESVJFQ1RPUllAIiAiLiIKKy5UUAorXGZCXC1FXGZSIChcZkJcLVwtZW52aXJvbm1lbnRcLXZhcmlhYmxlc1xmUikKK1JlY29nbml6ZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMuCisuVFAKK1xmQlwtRiBcZklmaWxlXGZSIChcZkJcLVwtcHJlZmVyZW5jZXNcLWZpbGU9XGZSKQorVGhlIHBhdGggdG8gdGhlIHByZWZlcmVuY2VzIGZpbGUuCitSZWxhdGl2ZSBwYXRocyBhcmUgYW5jaG9yZWQgYXQKKy5CUiAiQFVQREFUQUJMRV9ESVJFQ1RPUllAIiAiLiIKK1RoZSBidWlsdC1pbiBkZWZhdWx0IGlzCisuQlIgIkBQUkVGRVJFTkNFU19GSUxFQCIgIi4iCisuVFAKK1xmQlwtSFxmUiAoXGZCXC1cLWZ1bGxcLWhlbHBcZlIpCitQcmludCBhIGNvbW1hbmQgbGluZSB1c2FnZSBzdW1tYXJ5IChhbGwgb3B0aW9ucyksCithbmQgdGhlbiBleGl0LgorLlRQCitcZkJcLUlcZlIgKFxmQlwtXC1pbnN0YWxsXC1zZXJ2aWNlXGZSKQorKFdpbmRvd3Mgb25seSkKK0luc3RhbGwKKy5CIGJybHR0eQorYXMgdGhlCisuQiBCcmxBUEkKK3NlcnZpY2Ugc28gdGhhdCBpdCB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgc3RhcnRlZCB3aGVuIHRoZSBzeXN0ZW0gaXMgYm9vdGVkLAorYW5kIHNvIHRoYXQgYXBwbGljYXRpb25zIGNhbiBrbm93IHRoYXQgYQorLkIgQnJsQVBJCitzZXJ2ZXIgaXMgcnVubmluZy4KKy5UUAorXGZCXC1LIFxmSWFyZ1xmUiAoXGZCXC1cLWtleWJvYXJkXC1wcm9wZXJ0aWVzPVxmUikKK1Byb3BlcnRpZXMgb2YgdGhlIGtleWJvYXJkLgorLlRQCitcZkJcLUwgXGZJZmlsZVxmUiAoXGZCXC1cLWxvZ1wtZmlsZT1cZlIpCitUaGUgZmlsZSB0byB3aGljaCBsb2cgbWVzc2FnZXMgYXJlIHdyaXR0ZW4uCitSZWxhdGl2ZSBwYXRocyBhcmUgYW5jaG9yZWQgYXQgdGhlIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkuCitUaGUgZGVmYXVsdCBpcyB0byBzZW5kIGxvZyBtZXNzYWdlcyB0byB0aGUgc3lzdGVtIGxvZy4KKy5UUAorXGZCXC1NIFxmSWNzZWNzXGZSIChcZkJcLVwtbWVzc2FnZVwtZGVsYXk9XGZSKQorVGhlIG1lc3NhZ2UgaG9sZCB0aW1lIGluIGh1bmRyZWR0aHMgb2YgYSBzZWNvbmQuCitUaGUgYnVpbHQtaW4gZGVmYXVsdCBpcworLkIgNDAwCisoNCBzZWNvbmRzKS4KKy5UUAorXGZCXC1OXGZSIChcZkJcLVwtbm9cLWFwaVxmUikKK0Rvbid0IHN0YXJ0IHRoZSBhcHBsaWNhdGlvbiBwcm9ncmFtbWluZyBpbnRlcmZhY2UuCisuVFAKK1xmQlwtUCBcZklmaWxlXGZSIChcZkJcLVwtcGlkXC1maWxlPVxmUikKK1RoZSBmdWxsIHBhdGggdG8gdGhlIHByb2Nlc3MgaWRlbnRpZmllciBmaWxlLgorSWYgdGhpcyBvcHRpb24gaXMgc3VwcGxpZWQsCisuQiBicmx0dHkKK3dyaXRlcyBpdHMgcHJvY2VzcyBpZGVudGlmaWVyIChwaWQpIGludG8gdGhlIHNwZWNpZmllZCBmaWxlIGF0IHN0YXJ0LXVwLgorVGhlIGZpbGUgaXMgcmVtb3ZlZCB3aGVuCisuQiBicmx0dHkKK3Rlcm1pbmF0ZXMuCisuVFAKK1xmQlwtUlxmUiAoXGZCXC1cLXJlbW92ZVwtc2VydmljZVxmUikKKyhXaW5kb3dzIG9ubHkpCitSZW1vdmUgdGhlCisuQiBCcmxBUEkKK3NlcnZpY2Ugc28gdGhhdAorLkIgYnJsdHR5Cit3aWxsIG5vdCBiZSBhdXRvbWF0aWNhbGx5IHN0YXJ0ZWQgd2hlbiB0aGUgc3lzdGVtIGlzIGJvb3RlZCwKK2FuZCBzbyB0aGF0IGFwcGxpY2F0aW9ucyBjYW4ga25vdyB0aGF0IG5vCisuQiBCcmxBUEkKK3NlcnZlciBpcyBydW5uaW5nLgorLlRQCitcZkJcLVMgXGZSW1xmSWRyaXZlclxmQjpcZlJdXGZJbmFtZVxmQj1cZkl2YWx1ZVxmQixcZlIuLi4gKFxmQlwtXC1zcGVlY2hcLXBhcmFtZXRlcnM9XGZSKQorUGFyYW1ldGVycyBmb3IgdGhlIHNwZWVjaCBzeW50aGVzaXplciBkcml2ZXIuCitJZiB0aGUgc2FtZSBwYXJhbWV0ZXIgaXMgc3BlY2lmaWVkIG1vcmUgdGhhbiBvbmNlCit0aGVuIHRoZSByaWdodG1vc3Qgc3BlY2lmaWNhdGlvbiBpcyB1c2VkLgorUGFyYW1ldGVyIG5hbWVzIG1heSBiZSBhYmJyZXZpYXRlZC4KK0lmIGEgcGFyYW1ldGVyIGFzc2lnbm1lbnQgaXMgcXVhbGlmaWVkIHdpdGggYSBkcml2ZXIgaWRlbnRpZmljYXRpb24gY29kZQordGhlbiBpdCdzIG9ubHkgcHJvY2Vzc2VkIGlmIHRoYXQgc3BlZWNoIHN5bnRoZXNpemVyIGRyaXZlciBpcyBiZWluZyB1c2VkLgorLlRQCitcZkJcLVQgXGZJZGlyZWN0b3J5XGZSIChcZkJcLVwtdGFibGVzXC1kaXJlY3Rvcnk9XGZSKQorVGhlIHBhdGggdG8gdGhlIGRpcmVjdG9yeSB3aGljaCBjb250YWlucwordGhlIHRleHQsIGNvbnRyYWN0aW9uLCBhdHRyaWJ1dGVzLCBrZXlib2FyZCwgYW5kIGlucHV0IHRhYmxlcy4KK1RoZSBidWlsdC1pbiBkZWZhdWx0IGlzCisuUkIgIkBUQUJMRVNfRElSRUNUT1JZQCIgIi4iCisuVFAKK1xmQlwtVSBcZklkaXJlY3RvcnlcZlIgKFxmQlwtXC11cGRhdGFibGVcLWRpcmVjdG9yeT1cZlIpCitUaGUgcGF0aCB0byBhIGRpcmVjdG9yeSB3aGljaCBjb250YWlucyBmaWxlcyB0aGF0IGNhbiBiZSB1cGRhdGVkLgorVGhlIGJ1aWx0LWluIGRlZmF1bHQgaXMKKy5SQiAiQFVQREFUQUJMRV9ESVJFQ1RPUllAIiAiLiIKKy5UUAorXGZCXC1WXGZSIChcZkJcLVwtdmVyc2lvblxmUikKK1ByaW50IHRoZSB2ZXJzaW9ucyBvZgorLkIgYnJsdHR5CitpdHNlbGYsCit0aGUgc2VydmVyIHNpZGUgb2YgaXRzIGFwcGxpY2F0aW9uIHByb2dyYW1taW5nIGludGVyZmFjZSwKK2FuZCB0aG9zZSBkcml2ZXJzIHdoaWNoIHdlcmUgY29uZmlndXJlZCBpbiBhdCBidWlsZC10aW1lLAorYW5kIHRoZW4gZXhpdC4KK0lmIHRoZQorLkIgXC1xCisuUkIgIigiICJcLVwtcXVpZXQiICIpIgorb3B0aW9uIGlzbid0IGFsc28gc3BlY2lmaWVkCit0aGVuIGFsc28gcHJpbnQgY29weXJpZ2h0IGluZm9ybWF0aW9uLgorLlRQCitcZkJcLVcgXGZJZGlyZWN0b3J5XGZSIChcZkJcLVwtd3JpdGFibGVcLWRpcmVjdG9yeT1cZlIpCitUaGUgcGF0aCB0byBhIGRpcmVjdG9yeSB3aGljaCBjYW4gYmUgd3JpdHRlbiB0by4KK1RoZSBidWlsdC1pbiBkZWZhdWx0IGlzCisuUkIgIkBXUklUQUJMRV9ESVJFQ1RPUllAIiAiLiIKKy5UUAorXGZCXC1YIFxmSW5hbWVcZkI9XGZJdmFsdWVcZkIsXGZSLi4uIChcZkJcLVwtc2NyZWVuXC1wYXJhbWV0ZXJzPVxmUikKK1BhcmFtZXRlcnMgZm9yIHRoZSBzY3JlZW4gZHJpdmVyLgorSWYgdGhlIHNhbWUgcGFyYW1ldGVyIGlzIHNwZWNpZmllZCBtb3JlIHRoYW4gb25jZQordGhlbiB0aGUgcmlnaHRtb3N0IHNwZWNpZmljYXRpb24gaXMgdXNlZC4KK1BhcmFtZXRlciBuYW1lcyBtYXkgYmUgYWJicmV2aWF0ZWQuCisuVFAKK1xmQlwtWSBcZkl0ZXh0XGZSIChcZkJcLVwtc3RhcnRcLW1lc3NhZ2U9XGZSKQorVGhlIHRleHQgdG8gYmUgc2hvd24gd2hlbiB0aGUgYnJhaWxsZSBkcml2ZXIgc3RhcnRzCithbmQgdG8gYmUgc3Bva2VuIHdoZW4gdGhlIHNwZWVjaCBkcml2ZXIgc3RhcnRzLgorVGhlIGJ1aWx0LWluIGRlZmF1bHQgaXMKKy5SQiAiQFBBQ0tBR0VfTkFNRUAgQFBBQ0tBR0VfVkVSU0lPTkAiICIuIgorLlRQCitcZkJcLVogXGZJdGV4dFxmUiAoXGZCXC1cLXN0b3BcLW1lc3NhZ2U9XGZSKQorVGhlIHRleHQgdG8gYmUgc2hvd24gd2hlbiB0aGUgYnJhaWxsZSBkcml2ZXIgc3RvcHMuCitUaGUgYnVpbHQtaW4gZGVmYXVsdCBpcworLlJCICJAUEFDS0FHRV9OQU1FQCBzdG9wcGVkIiAiLiIKKy5TUyAiRW52aXJvbm1lbnQgVmFyaWFibGVzIgorVGhlIGZvbGxvd2luZyBlbnZpcm9ubWVudCB2YXJpYWJsZXMgYXJlIHJlY29nbml6ZWQgaWYgdGhlCisuQiBcLUUKKy5SQiAiKCIgIlwtXC1lbnZpcm9ubWVudFwtdmFyaWFibGVzIiAiKSIKK29wdGlvbiBpcyBzcGVjaWZpZWQ6CisuVFAKK1xmQkJSTFRUWV9BUElfUEFSQU1FVEVSUz1cZkluYW1lXGZCPVxmSXZhbHVlXGZCLFxmUi4uLgorUGFyYW1ldGVycyBmb3IgdGhlIGFwcGxpY2F0aW9uIHByb2dyYW1taW5nIGludGVyZmFjZS4KK1NlZSB0aGUKKy5CIFwtQQorLlJCICIoIiAiXC1cLWFwaVwtcGFyYW1ldGVycz0iICIpIgorb3B0aW9uIGZvciBkZXRhaWxzLgorLlRQCitcZkJCUkxUVFlfQVRUUklCVVRFU19UQUJMRT1cZkl0YWJsZVxmUgorVGhlIGF0dHJpYnV0ZXMgdGFibGUuCitTZWUgdGhlCisuQiBcLWEKKy5SQiAiKCIgIlwtXC1hdHRyaWJ1dGVzXC10YWJsZT0iICIpIgorb3B0aW9uIGZvciBkZXRhaWxzLgorLlRQCitcZkJCUkxUVFlfQlJBSUxMRV9ERVZJQ0U9XGZJZGV2aWNlXGZCLFxmUi4uLgorVGhlIGRldmljZSB0byB3aGljaCB0aGUgYnJhaWxsZSBkaXNwbGF5IGlzIGNvbm5lY3RlZC4KK1NlZSB0aGUKKy5CIFwtZAorLlJCICIoIiAiXC1cLWJyYWlsbGVcLWRldmljZT0iICIpIgorb3B0aW9uIGZvciBkZXRhaWxzLgorLlRQCitcZkJCUkxUVFlfQlJBSUxMRV9EUklWRVI9XGZJZHJpdmVyXGZCLFxmUi4uLnxcZkJhdXRvXGZSCitUaGUgZHJpdmVyIGZvciB0aGUgYnJhaWxsZSBkaXNwbGF5LgorU2VlIHRoZQorLkIgXC1iCisuUkIgIigiICJcLVwtYnJhaWxsZVwtZHJpdmVyPSIgIikiCitvcHRpb24gZm9yIGRldGFpbHMuCisuVFAKK1xmQkJSTFRUWV9CUkFJTExFX1BBUkFNRVRFUlM9XGZSW1xmSWRyaXZlclxmQjpcZlJdXGZJbmFtZVxmQj1cZkl2YWx1ZVxmQixcZlIuLi4KK1BhcmFtZXRlcnMgZm9yIHRoZSBicmFpbGxlIGRpc3BsYXkgZHJpdmVyLgorU2VlIHRoZQorLkIgXC1CCisuUkIgIigiICJcLVwtYnJhaWxsZVwtcGFyYW1ldGVycz0iICIpIgorb3B0aW9uIGZvciBkZXRhaWxzLgorLlRQCitcZkJCUkxUVFlfQ09ORklHVVJBVElPTl9GSUxFPVxmSWZpbGVcZlIKK1RoZSBjb25maWd1cmF0aW9uIGZpbGUuCitTZWUgdGhlCisuQiBcLWYKKy5SQiAiKCIgIlwtXC1jb25maWd1cmF0aW9uXC1maWxlPSIgIikiCitvcHRpb24gZm9yIGRldGFpbHMuCisuVFAKK1xmQkJSTFRUWV9DT05UUkFDVElPTl9UQUJMRT1cZkl0YWJsZVxmUgorVGhlIGNvbnRyYWN0aW9uIHRhYmxlLgorU2VlIHRoZQorLkIgXC1jCisuUkIgIigiICJcLVwtY29udHJhY3Rpb25cLXRhYmxlPSIgIikiCitvcHRpb24gZm9yIGRldGFpbHMuCisuVFAKK1xmQkJSTFRUWV9NSURJX0RFVklDRT1cZklkZXZpY2VcZlIKK1RoZSBkZXZpY2UgdG8gdXNlIGZvciB0aGUgTXVzaWNhbCBJbnN0cnVtZW50IERpZ2l0YWwgSW50ZXJmYWNlLgorU2VlIHRoZQorLkIgXC1tCisuUkIgIigiICJcLVwtbWlkaVwtZGV2aWNlPSIgIikiCitvcHRpb24gZm9yIGRldGFpbHMuCisuVFAKK1xmQkJSTFRUWV9QQ01fREVWSUNFPVxmSWRldmljZVxmUgorVGhlIGRldmljZSB0byB1c2UgZm9yIGRpZ2l0YWwgYXVkaW8uCitTZWUgdGhlCisuQiBcLXAKKy5SQiAiKCIgIlwtXC1wY21cLWRldmljZT0iICIpIgorb3B0aW9uIGZvciBkZXRhaWxzLgorLlRQCitcZkJCUkxUVFlfUFJFRkVSRU5DRVNfRklMRT1cZklmaWxlXGZSCitUaGUgcHJlZmVyZW5jZXMgZmlsZS4KK1NlZSB0aGUKKy5CIFwtRgorLlJCICIoIiAiXC1cLXByZWZlcmVuY2VzXC1maWxlPSIgIikiCitvcHRpb24gZm9yIGRldGFpbHMuCisuVFAKK1xmQkJSTFRUWV9SRUxFQVNFX0RFVklDRT1vblxmUnxcZkJvZmZcZlIKK1JlbGVhc2UgdGhlIGRldmljZSB0byB3aGljaCB0aGUgYnJhaWxsZSBkaXNwbGF5IGlzIGNvbm5lY3RlZAord2hlbiB0aGUgY3VycmVudCBzY3JlZW4gb3Igd2luZG93IGNhbid0IGJlIHJlYWQuCitTZWUgdGhlCisuQiBcLXIKKy5SQiAiKCIgIlwtXC1yZWxlYXNlXC1kZXZpY2UiICIpIgorb3B0aW9uIGZvciBkZXRhaWxzLgorLlRQCitcZkJCUkxUVFlfU0NSRUVOX0RSSVZFUj1cZklkcml2ZXJcZlIKK1RoZSBzY3JlZW4gZHJpdmVyLgorU2VlIHRoZQorLkIgXC14CisuUkIgIigiICJcLVwtc2NyZWVuXC1kcml2ZXI9IiAiKSIKK29wdGlvbiBmb3IgZGV0YWlscy4KKy5UUAorXGZCQlJMVFRZX1NDUkVFTl9QQVJBTUVURVJTPVxmSW5hbWVcZkI9XGZJdmFsdWVcZkIsXGZSLi4uCitQYXJhbWV0ZXJzIGZvciB0aGUgc2NyZWVuIGRyaXZlci4KK1NlZSB0aGUKKy5CIFwtWAorLlJCICIoIiAiXC1cLXNjcmVlblwtcGFyYW1ldGVycz0iICIpIgorb3B0aW9uIGZvciBkZXRhaWxzLgorLlRQCitcZkJCUkxUVFlfU1BFRUNIX0RSSVZFUj1cZklkcml2ZXJcZkIsXGZSLi4ufFxmQmF1dG9cZlIKK1RoZSBkcml2ZXIgZm9yIHRoZSBzcGVlY2ggc3ludGhlc2l6ZXIuCitTZWUgdGhlCisuQiBcLXMKKy5SQiAiKCIgIlwtXC1zcGVlY2hcLWRyaXZlcj0iICIpIgorb3B0aW9uIGZvciBkZXRhaWxzLgorLlRQCitcZkJCUkxUVFlfU1BFRUNIX0lOUFVUPVxmSW5hbWVcZlIKK1RoZSBmaWxlIHN5c3RlbSBvYmplY3Qgd2hpY2ggZ2l2ZXMgb3RoZXIgYXBwbGljYXRpb25zIGFjY2VzcyB0bworLkJSIGJybHR0eSAncworc3BlZWNoIGRyaXZlciBmb3IgdGV4dC10by1zcGVlY2ggY29udmVyc2lvbi4KK1NlZSB0aGUKKy5CIFwtaQorLlJCICIoIiAiXC1cLXNwZWVjaFwtaW5wdXQ9IiAiKSIKK29wdGlvbiBmb3IgZGV0YWlscy4KKy5UUAorXGZCQlJMVFRZX1NQRUVDSF9QQVJBTUVURVJTPVxmUltcZklkcml2ZXJcZkI6XGZSXVxmSW5hbWVcZkI9XGZJdmFsdWVcZkIsXGZSLi4uCitQYXJhbWV0ZXJzIGZvciB0aGUgc3BlZWNoIHN5bnRoZXNpemVyIGRyaXZlci4KK1NlZSB0aGUKKy5CIFwtUworLlJCICIoIiAiXC1cLXNwZWVjaFwtcGFyYW1ldGVycz0iICIpIgorb3B0aW9uIGZvciBkZXRhaWxzLgorLlRQCitcZkJCUkxUVFlfVEVYVF9UQUJMRT1cZkl0YWJsZVxmUgorVGhlIHRleHQgdGFibGUuCitTZWUgdGhlCisuQiBcLXQKKy5SQiAiKCIgIlwtXC10ZXh0XC10YWJsZT0iICIpIgorb3B0aW9uIGZvciBkZXRhaWxzLgorLlNTICJUaGUgQ29uZmlndXJhdGlvbiBGaWxlIgorQmxhbmsgbGluZXMgYXJlIGlnbm9yZWQuCitJZiB0aGUgY2hhcmFjdGVyCisuQiAiIyIKK29jY3VycyBvbiBhbnkgbGluZSB0aGVuCithbGwgY2hhcmFjdGVycyBmcm9tIGl0IHRvIHRoZSBlbmQgb2YgdGhhdCBsaW5lIGFyZSB0cmVhdGVkIGFzIGEgY29tbWVudC4KKy5QUAorVGhlIGZvbGxvd2luZyBjb25maWd1cmF0aW9uIGRpcmVjdGl2ZXMgYXJlIHN1cHBvcnRlZDoKKy5UUAorXGZCYXBpXC1wYXJhbWV0ZXJzIFxmSW5hbWVcZkI9XGZJdmFsdWVcZkIsXGZSLi4uCitQYXJhbWV0ZXJzIGZvciB0aGUgYXBwbGljYXRpb24gcHJvZ3JhbW1pbmcgaW50ZXJmYWNlLgorU2VlIHRoZQorLkIgXC1BCisuUkIgIigiICJcLVwtYXBpXC1wYXJhbWV0ZXJzPSIgIikiCitvcHRpb24gZm9yIGRldGFpbHMuCisuVFAKK1xmQmF0dHJpYnV0ZXNcLXRhYmxlIFxmSXRhYmxlXGZSCitUaGUgYXR0cmlidXRlcyB0YWJsZS4KK1NlZSB0aGUKKy5CIFwtYQorLlJCICIoIiAiXC1cLWF0dHJpYnV0ZXNcLXRhYmxlPSIgIikiCitvcHRpb24gZm9yIGRldGFpbHMuCisuVFAKK1xmQmJyYWlsbGVcLWRldmljZSBcZklkZXZpY2VcZkIsXGZSLi4uCitUaGUgZGV2aWNlIHRvIHdoaWNoIHRoZSBicmFpbGxlIGRpc3BsYXkgaXMgY29ubmVjdGVkLgorU2VlIHRoZQorLkIgXC1kCisuUkIgIigiICJcLVwtYnJhaWxsZVwtZGV2aWNlPSIgIikiCitvcHRpb24gZm9yIGRldGFpbHMuCisuVFAKK1xmQmJyYWlsbGVcLWRyaXZlciBcZklkcml2ZXJcZkIsXGZSLi4ufFxmQmF1dG9cZlIKK1RoZSBkcml2ZXIgZm9yIHRoZSBicmFpbGxlIGRpc3BsYXkuCitTZWUgdGhlCisuQiBcLWIKKy5SQiAiKCIgIlwtXC1icmFpbGxlXC1kcml2ZXI9IiAiKSIKK29wdGlvbiBmb3IgZGV0YWlscy4KKy5UUAorXGZCYnJhaWxsZVwtcGFyYW1ldGVycyBcZlJbXGZJZHJpdmVyXGZCOlxmUl1cZkluYW1lXGZCPVxmSXZhbHVlXGZCLFxmUi4uLgorUGFyYW1ldGVycyBmb3IgdGhlIGJyYWlsbGUgZGlzcGxheSBkcml2ZXIuCitTZWUgdGhlCisuQiBcLUIKKy5SQiAiKCIgIlwtXC1icmFpbGxlXC1wYXJhbWV0ZXJzPSIgIikiCitvcHRpb24gZm9yIGRldGFpbHMuCisuVFAKK1xmQmNvbnRyYWN0aW9uXC10YWJsZSBcZkl0YWJsZVxmUgorVGhlIGNvbnRyYWN0aW9uIHRhYmxlLgorU2VlIHRoZQorLkIgXC1jCisuUkIgIigiICJcLVwtY29udHJhY3Rpb25cLXRhYmxlPSIgIikiCitvcHRpb24gZm9yIGRldGFpbHMuCisuVFAKK1xmQm1pZGlcLWRldmljZSBcZklkZXZpY2VcZlIKK1RoZSBkZXZpY2UgdG8gdXNlIGZvciB0aGUgTXVzaWNhbCBJbnN0cnVtZW50IERpZ2l0YWwgSW50ZXJmYWNlLgorU2VlIHRoZQorLkIgXC1tCisuUkIgIigiICJcLVwtbWlkaVwtZGV2aWNlPSIgIikiCitvcHRpb24gZm9yIGRldGFpbHMuCisuVFAKK1xmQnBjbVwtZGV2aWNlIFxmSWRldmljZVxmUgorVGhlIGRldmljZSB0byB1c2UgZm9yIGRpZ2l0YWwgYXVkaW8uCitTZWUgdGhlCisuQiBcLXAKKy5SQiAiKCIgIlwtXC1wY21cLWRldmljZT0iICIpIgorb3B0aW9uIGZvciBkZXRhaWxzLgorLlRQCitcZkJwcmVmZXJlbmNlc1wtZmlsZSBcZklmaWxlXGZSCitUaGUgcHJlZmVyZW5jZXMgZmlsZS4KK1NlZSB0aGUKKy5CIFwtRgorLlJCICIoIiAiXC1cLXByZWZlcmVuY2VzXC1maWxlPSIgIikiCitvcHRpb24gZm9yIGRldGFpbHMuCisuVFAKK1xmQnJlbGVhc2VcLWRldmljZSBvblxmUnxcZkJvZmZcZlIKK1JlbGVhc2UgdGhlIGRldmljZSB0byB3aGljaCB0aGUgYnJhaWxsZSBkaXNwbGF5IGlzIGNvbm5lY3RlZAord2hlbiB0aGUgY3VycmVudCBzY3JlZW4gb3Igd2luZG93IGNhbid0IGJlIHJlYWQuCitTZWUgdGhlCisuQiBcLXIKKy5SQiAiKCIgIlwtXC1yZWxlYXNlXC1kZXZpY2UiICIpIgorb3B0aW9uIGZvciBkZXRhaWxzLgorLlRQCitcZkJzY3JlZW5cLWRyaXZlciBcZklkcml2ZXJcZlIKK1RoZSBzY3JlZW4gZHJpdmVyLgorU2VlIHRoZQorLkIgXC14CisuUkIgIigiICJcLVwtc2NyZWVuXC1kcml2ZXI9IiAiKSIKK29wdGlvbiBmb3IgZGV0YWlscy4KKy5UUAorXGZCc2NyZWVuXC1wYXJhbWV0ZXJzIFxmSW5hbWVcZkI9XGZJdmFsdWVcZkIsXGZSLi4uCitQYXJhbWV0ZXJzIGZvciB0aGUgc2NyZWVuIGRyaXZlci4KK1NlZSB0aGUKKy5CIFwtWAorLlJCICIoIiAiXC1cLXNjcmVlblwtcGFyYW1ldGVycz0iICIpIgorb3B0aW9uIGZvciBkZXRhaWxzLgorLlRQCitcZkJzcGVlY2hcLWRyaXZlciBcZklkcml2ZXJcZkIsXGZSLi4ufFxmQmF1dG9cZlIKK1RoZSBkcml2ZXIgZm9yIHRoZSBzcGVlY2ggc3ludGhlc2l6ZXIuCitTZWUgdGhlCisuQiBcLXMKKy5SQiAiKCIgIlwtXC1zcGVlY2hcLWRyaXZlcj0iICIpIgorb3B0aW9uIGZvciBkZXRhaWxzLgorLlRQCitcZkJzcGVlY2hcLWlucHV0IFxuYW1lXGZSCitUaGUgZmlsZSBzeXN0ZW0gb2JqZWN0IHdoaWNoIGdpdmVzIG90aGVyIGFwcGxpY2F0aW9ucyBhY2Nlc3MgdG8KKy5CUiBicmx0dHkgJ3MKK3NwZWVjaCBkcml2ZXIgZm9yIHRleHRcLXRvXC1zcGVlY2ggY29udmVyc2lvbi4KK1NlZSB0aGUKKy5CIFwtaQorLlJCICIoIiAiXC1cLXNwZWVjaFwtaW5wdXQ9IiAiKSIKK29wdGlvbiBmb3IgZGV0YWlscy4KKy5UUAorXGZCc3BlZWNoXC1wYXJhbWV0ZXJzIFxmUltcZklkcml2ZXJcZkI6XGZSXVxmSW5hbWVcZkI9XGZJdmFsdWVcZkIsXGZSLi4uCitQYXJhbWV0ZXJzIGZvciB0aGUgc3BlZWNoIHN5bnRoZXNpemVyIGRyaXZlci4KK1NlZSB0aGUKKy5CIFwtUworLlJCICIoIiAiXC1cLXNwZWVjaFwtcGFyYW1ldGVycz0iICIpIgorb3B0aW9uIGZvciBkZXRhaWxzLgorLlRQCitcZkJ0ZXh0XC10YWJsZSBcZkl0YWJsZVxmUgorVGhlIHRleHQgdGFibGUuCitTZWUgdGhlCisuQiBcLXQKKy5SQiAiKCIgIlwtXC10ZXh0XC10YWJsZT0iICIpIgorb3B0aW9uIGZvciBkZXRhaWxzLgorLlNTICJEcml2ZXIgU3BlY2lmaWNhdGlvbiIKK0EgYnJhaWxsZSBkaXNwbGF5IG9yIHNwZWVjaCBzeW50aGVzaXplciBkcml2ZXIKK211c3QgYmUgc3BlY2lmaWVkIHZpYSBpdHMgaWRlbnRpZmljYXRpb24gY29kZToKKy5SUworLlRQIDQKKy5CIGFsCitBbHZhCisuVFAgNAorLkIgYW4KK0FuZHJvaWQKKy5UUCA0CisuQiBhdAorQWxiYXRyb3NzCisuVFAgNAorLkIgYmEKK0JybEFQSQorLlRQIDQKKy5CIGJjCitCcmFpbENvbW0KKy5UUCA0CisuQiBiZAorQnJhdWRpCisuVFAgNAorLkIgYmwKK0JyYWlsbGVMaXRlCisuVFAgNAorLkIgYm0KK0JhdW0KKy5UUCA0CisuQiBibgorQnJhaWxsZU5vdGUKKy5UUCA0CisuQiBjYgorQ29tYmlCcmFpbGxlCisuVFAgNAorLkIgY2UKK0NlYnJhCisuVFAgNAorLkIgY24KK0NhbnV0ZQorLlRQIDQKKy5CIGRwCitEb3RQYWQKKy5UUCA0CisuQiBlYworRWNvQnJhaWxsZQorLlRQIDQKKy5CIGVuCitlU3BlYWstTkcKKy5UUCA0CisuQiBlcworZVNwZWFrCisuVFAgNAorLkIgZXUKK0V1cm9CcmFpbGxlCisuVFAgNAorLkIgZmEKK0ZyYW5rQXVkaW9kYXRhCisuVFAgNAorLkIgZmwKK0Zlc3RpdmFsTGl0ZQorLlRQIDQKKy5CIGZzCitGcmVlZG9tU2NpZW50aWZpYworLlRQIDQKKy5CIGZ2CitGZXN0aXZhbAorLlRQIDQKKy5CIGdzCitHZW5lcmljU2F5CisuVFAgNAorLkIgaGQKK0hlZG8KKy5UUCA0CisuQiBobQorSElNUworLlRQIDQKKy5CIGh0CitIYW5keVRlY2gKKy5UUCA0CisuQiBodworSHVtYW5XYXJlCisuVFAgNAorLkIgaXIKK0lyaXMKKy5UUCA0CisuQiBpYworSW5jZXB0b3IKKy5UUCA0CisuQiBsYgorTGliYnJhaWxsZQorLlRQIDQKKy5CIGx0CitMb2dUZXh0CisuVFAgNAorLkIgbWIKK011bHRpQnJhaWxsZQorLlRQIDQKKy5CIG1kCitNRFYKKy5UUCA0CisuQiBtbQorQnJhaWxsZU1lbW8KKy5UUCA0CisuQiBtbgorTWluaUJyYWlsbGUKKy5UUCA0CisuQiBtcAorTWlrcm9wdWhlCisuVFAgNAorLkIgbXQKK01ldGVjCisuVFAgNAorLkIgbm8KK25vIGRyaXZlcgorLlRQIDQKKy5CIG5wCitOaW5lUG9pbnQKKy5UUCA0CisuQiBwZworUGVnYXN1cworLlRQIDQKKy5CIHBtCitQYXBlbm1laWVyCisuVFAgNAorLkIgc2QKK1NwZWVjaERpc3BhdGNoZXIKKy5UUCA0CisuQiBzaworU2Vpa2EKKy5UUCA0CisuQiBzdworU3dpZnQKKy5UUCA0CisuQiB0aAorVGhldGEKKy5UUCA0CisuQiB0bgorVGVjaG5pQnJhaWxsZSBTeXN0ZW1zIEluYy4KKy5UUCA0CisuQiB0cworVGVsZXNlbnNvcnkgU3lzdGVtcyBJbmMuCisuVFAgNAorLkIgdmQKK1ZpZGVvQnJhaWxsZQorLlRQIDQKKy5CIHZvCitWb3lhZ2VyLCBQYXJ0MjMyIChzZXJpYWwgYWRhcHRlciksIEJyYWlsbGVQZW4vRWFzeUxpbmsKKy5UUCA0CisuQiB2cworVmlzaW9CcmFpbGxlCisuVFAgNAorLkIgdnYKK1ZpYVZvaWNlCisuVFAgNAorLkIgeHMKK0V4dGVybmFsU3BlZWNoCisuUFAKK0EgY29tbWEtZGVsaW1pdGVkIGxpc3Qgb2YgZHJpdmVycyBtYXkgYmUgc3BlY2lmaWVkLgorSWYgdGhpcyBpcyBkb25lIHRoZW4gYXV0b2RldGVjdGlvbiBpcyBwZXJmb3JtZWQgdXNpbmcgZWFjaCBsaXN0ZWQgZHJpdmVyIGluIHNlcXVlbmNlLgorWW91IG1heSBuZWVkIHRvIGV4cGVyaW1lbnQgaW4gb3JkZXIgdG8gZGV0ZXJtaW5lIHRoZSBtb3N0IHJlbGlhYmxlIG9yZGVyCitzaW5jZSBzb21lIGRyaXZlcnMgYXV0b2RldGVjdCBiZXR0ZXIgdGhhbiBvdGhlcnMuCisuUFAKK0lmIHRoZSBzaW5nbGUgd29yZAorLkIgYXV0bworaXMgc3BlY2lmaWVkIHRoZW4gYXV0b2RldGVjdGlvbiBpcyBwZXJmb3JtZWQKK3VzaW5nIG9ubHkgdGhvc2UgZHJpdmVycyB3aGljaCBhcmUga25vd24gdG8gYmUgcmVsaWFibGUgZm9yIHRoaXMgcHVycG9zZS4KKy5SRQorLlNIICJTRUUgQUxTTyIKK0ZvciBmdWxsIGRvY3VtZW50YXRpb24sIHNlZQorLkJSIGJybHR0eSAncworb24tbGluZSBtYW51YWwgYXQKKy5SQiAiWyIgImh0dHA6Ly9icmx0dHkuYXBwL2RvY3VtZW50YXRpb24uaHRtbCIgIl0uIgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRzL2JybHR0eS5jb25mLmluIGIvRG9jdW1lbnRzL2JybHR0eS5jb25mLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVlOGU0ODMKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudHMvYnJsdHR5LmNvbmYuaW4KQEAgLTAsMCArMSw3NTkgQEAKKyMgQGNvbmZpZ3VyZV9pbnB1dEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyMgICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisjCisjIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyMKKyMgQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL0JSTFRUWS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjIFRoaXMgaXMgYSBjb25maWd1cmF0aW9uIGZpbGUgdGVtcGxhdGUgZm9yIHRoZSBCUkxUVFkgYXBwbGljYXRpb24uIAorIyBVbmNvbW1lbnQgdGhvc2UgZW50cmllcyB3aGljaCBhcHBseSB0byB5b3VyIHBlcnNvbmFsIG5lZWRzIGFuZCBzeXN0ZW0KKyMgcmVxdWlyZW1lbnRzLgorCisjIEJSTFRUWSBleHBlY3RzIHRvIGZpbmQgaXRzIGNvbmZpZ3VyYXRpb24gZmlsZSBpbiAiQENPTkZJR1VSQVRJT05fRElSRUNUT1JZQC9AQ09ORklHVVJBVElPTl9GSUxFQCIKKyMgKGNhbiBiZSBvdmVycmlkZGVuIHdpdGggdGhlIC0tY29uZmlndXJhdGlvbi1maWxlPSBbLWZdIG9wdGlvbikuCisjIElmIGl0IGRvZXNuJ3QgZXhpc3QsIHRoZW4gQlJMVFRZIHNpbGVudGx5IGNvbnRpbnVlcyBidXQgbWF5IHJlcXVpcmUKKyMgdGhhdCBjZXJ0YWluIGNvbW1hbmQgbGluZSBvcHRpb25zIGJlIGV4cGxpY2l0bHkgc3VwcGxpZWQuCisKKyMgQmxhbmsgbGluZXMgYXJlIGlnbm9yZWQuIFRoZSBjaGFyYWN0ZXIgJyMnLCBhbnl3aGVyZSBvbiBhIGxpbmUsCisjIGluaXRpYXRlcyBhIGNvbW1lbnQ7IGFsbCBjaGFyYWN0ZXJzIGZyb20gaXQgdG8gdGhlIGVuZCBvZiB0aGF0IGxpbmUKKyMgYXJlIGlnbm9yZWQuCisKKyMgRWFjaCBjb25maWd1cmF0aW9uIGVudHJ5IGNvbnNpc3RzIG9mIGEga2V5d29yZCBmb2xsb3dlZCBieSBpdHMgb3BlcmFuZC4KKyMgQW4gYXJiaXRyYXJ5IGFtb3VudCBvZiB3aGl0ZSBzcGFjZSwgKGJsYW5rcyBhbmQvb3IgdGFicyksIG1heSBvY2N1cgorIyBiZWZvcmUgdGhlIGtleXdvcmQsIGFzIHdlbGwgYXMgYmVmb3JlIGFuZCBhZnRlciB0aGUgb3BlcmFuZC4gS2V5d29yZAorIyBwcm9jZXNzaW5nIGlzbid0IGNhc2Ugc2Vuc2l0aXZlLiBFeGFtcGxlcyBvZiB2YWxpZCBlbnRyaWVzIGFyZToKKyMKKyMJQnJhaWxsZS1Ecml2ZXIJcG0JIyBQYXBlbm1laWVyIGJyYWlsbGUgZGlzcGxheXMuCisjCWJyYWlsbGUtZGV2aWNlCXNlcmlhbDpAc2VyaWFsX2ZpcnN0X2RldmljZUAJIyBUaGUgZmlyc3Qgc2VyaWFsIGRldmljZS4KKyMJU1BFRUNILURSSVZFUglmdgkjIFRoZSBGZXN0aXZhbCBUZXh0IHRvIFNwZWVjaCBTeXN0ZW0uCisKKyMgVGhlIGRlZmF1bHQgc2V0dGluZ3MgZ2l2ZW4gd2l0aGluIHRoZSBmb2xsb3dpbmcgZGVzY3JpcHRpb25zIGFzc3VtZSBubworIyBzcGVjaWFsIGJ1aWxkIG9wdGlvbnMgKHNlZSAiLi9jb25maWd1cmUgLS1oZWxwIiBpbiB0aGUgdG9wLWxldmVsCisjIGRpcmVjdG9yeSBvZiB0aGUgc291cmNlIHRyZWUuCisKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQnJhaWxsZSBTZXR0aW5ncyAjCisjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjIFRoZSBicmFpbGxlLWRyaXZlciBkaXJlY3RpdmUgc3BlY2lmaWVzIHRoZSB0d28tbGV0dGVyIGRyaXZlcgorIyBpZGVudGlmaWNhdGlvbiBjb2RlIG9mIHRoZSBkcml2ZXIgZm9yIHRoZSBicmFpbGxlIGRpc3BsYXkuCisjIElmIG5vdCBzcGVjaWZpZWQsIGF1dG9kZXRlY3Rpb24gd2lsbCBiZSBwZXJmb3JtZWQuCisjIElmIG1vcmUgdGhhbiBvbmUgZHJpdmVyLCBzZXBhcmF0ZWQgYnkgY29tbWFzLCBpcyBzcGVjaWZpZWQsCisjIHRoZW4gYXV0b2RldGVjdGlvbiB3aWxsIGJlIHBlcmZvcm1lZCBhbW9uZ3N0IHRoZW0uCisjIChjYW4gYmUgb3ZlcnJpZGRlbiB3aXRoIHRoZSAtLWJyYWlsbGUtZHJpdmVyPSBbLWJdIG9wdGlvbikKKyNicmFpbGxlLWRyaXZlcglhdXRvCSMgYXV0b2RldGVjdAorI2JyYWlsbGUtZHJpdmVyCWFsCSMgQWx2YQorI2JyYWlsbGUtZHJpdmVyCWF0CSMgQWxiYXRyb3NzCisjYnJhaWxsZS1kcml2ZXIJYmEJIyBCcmxBUEkKKyNicmFpbGxlLWRyaXZlcgliYwkjIEJyYWlsQ29tbQorI2JyYWlsbGUtZHJpdmVyCWJkCSMgQnJhdWRpCisjYnJhaWxsZS1kcml2ZXIJYmwJIyBCcmFpbGxlTGl0ZQorI2JyYWlsbGUtZHJpdmVyCWJtCSMgQmF1bTs7IFJlZnJlc2hhYnJhaWxsZSwgT3JiaXQsIE5MUyBlUmVhZGVyIFpvb21heCwgTkJQIEIyRworI2JyYWlsbGUtZHJpdmVyCWJuCSMgQnJhaWxsZU5vdGUKKyNicmFpbGxlLWRyaXZlcgljYgkjIENvbWJpQnJhaWxsZQorI2JyYWlsbGUtZHJpdmVyCWNlCSMgQ2VicmEKKyNicmFpbGxlLWRyaXZlcgljbgkjIENhbnV0ZQorI2JyYWlsbGUtZHJpdmVyCWRwCSMgRG90UGFkCisjYnJhaWxsZS1kcml2ZXIJZWMJIyBFY29CcmFpbGxlCisjYnJhaWxsZS1kcml2ZXIJZXUJIyBFdXJvQnJhaWxsZQorI2JyYWlsbGUtZHJpdmVyCWZhCSMgRnJhbmtBdWRpb2RhdGEKKyNicmFpbGxlLWRyaXZlcglmcwkjIEZyZWVkb21TY2llbnRpZmljOyBWRk8sIFZpc3Blcm8KKyNicmFpbGxlLWRyaXZlcgloZAkjIEhlZG8KKyNicmFpbGxlLWRyaXZlcglobQkjIEhJTVMKKyNicmFpbGxlLWRyaXZlcglodAkjIEhhbmR5VGVjaDsgSGVscFRlY2gKKyNicmFpbGxlLWRyaXZlcglodwkjIEh1bWFuV2FyZTs7IEFQSCBDaGFtZWxlb24sIEFQSCBNYW50aXMsIE5MUyBlUmVhZGVyCisjYnJhaWxsZS1kcml2ZXIJaWMJIyBJbmNlcHRvcjsgSW5ub3Zpc2lvbgorI2JyYWlsbGUtZHJpdmVyCWlyCSMgSXJpcworI2JyYWlsbGUtZHJpdmVyCWxiCSMgTGliYnJhaWxsZQorI2JyYWlsbGUtZHJpdmVyCWx0CSMgTG9nVGV4dAorI2JyYWlsbGUtZHJpdmVyCW1iCSMgTXVsdGlCcmFpbGxlCisjYnJhaWxsZS1kcml2ZXIJbWQJIyBNRFYKKyNicmFpbGxlLWRyaXZlcgltbQkjIEJyYWlsbGVNZW1vCisjYnJhaWxsZS1kcml2ZXIJbW4JIyBNaW5pQnJhaWxsZQorI2JyYWlsbGUtZHJpdmVyCW10CSMgTWV0ZWMKKyNicmFpbGxlLWRyaXZlcglucAkjIE5pbmVQb2ludAorI2JyYWlsbGUtZHJpdmVyCXBnCSMgUGVnYXN1cworI2JyYWlsbGUtZHJpdmVyCXBtCSMgUGFwZW5tZWllcgorI2JyYWlsbGUtZHJpdmVyCXNrCSMgU2Vpa2EKKyNicmFpbGxlLWRyaXZlcgl0bgkjIFRlY2huaUJyYWlsbGUKKyNicmFpbGxlLWRyaXZlcgl0cwkjIFRTSQorI2JyYWlsbGUtZHJpdmVyCXZkCSMgVmlkZW9CcmFpbGxlCisjYnJhaWxsZS1kcml2ZXIJdm8JIyBWb3lhZ2VyOzsgQnJhaWxsZSBQZW4sIEVhc3kgTGluaworI2JyYWlsbGUtZHJpdmVyCXZzCSMgVmlzaW9CcmFpbGxlCisKKyMgVGhlIGJyYWlsbGUtZGV2aWNlIGRpcmVjdGl2ZSBzcGVjaWZpZXMgdGhlIGRldmljZSB0byB3aGljaCB0aGUgYnJhaWxsZQorIyBkaXNwbGF5IGlzIGNvbm5lY3RlZC4gVGhlIGdlbmVyaWMgc3ludGF4IGlzIHR5cGU6ZGV2aWNlLiBUaGUgZGV2aWNlCisjIHR5cGUgaXMgb3B0aW9uYWwsIGFuZCwgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHksIGRlZmF1bHRzIHRvIHNlcmlhbC4KKyMgVGhlIGZvbGxvd2luZyBkZXZpY2VzIGFyZSBzdXBwb3J0ZWQgKGJyYWNrZXRzIGluZGljYXRlIG9wdGlvbmFsaXR5KToKKyMgICAgc2VyaWFsOnBhdGggKHJlbGF0aXZlIHBhdGhzIGFyZSBhbmNob3JlZCBhdCAiL2RldiIpCisjICAgIHVzYjpbc2VyaWFsLW51bWJlcl0KKyMgICAgYmx1ZXRvb3RoOmFkZHJlc3MKKyMgSWYgbm90IHNwZWNpZmllZCwgIkBicmFpbGxlX2RldmljZUAiIHdpbGwgYmUgdXNlZC4KKyMgSWYgbW9yZSB0aGFuIG9uZSBkZXZpY2UsIHNlcGFyYXRlZCBieSBjb21tYXMsIGlzIHNwZWNpZmllZCwKKyMgdGhlbiBlYWNoIG9mIHRoZW0gd2lsbCBiZSBwcm9iZWQgaW4gdHVybi4KKyMgKGNhbiBiZSBvdmVycmlkZGVuIHdpdGggdGhlIC0tYnJhaWxsZS1kZXZpY2U9IFstZF0gb3B0aW9uKQorI2JyYWlsbGUtZGV2aWNlCXNlcmlhbDpAc2VyaWFsX2ZpcnN0X2RldmljZUAJIyBGaXJzdCBzZXJpYWwgZGV2aWNlLgorI2JyYWlsbGUtZGV2aWNlCXVzYjoJCSMgRmlyc3QgVVNCIGRldmljZSBtYXRjaGluZyBicmFpbGxlIGRyaXZlci4KKyNicmFpbGxlLWRldmljZQl1c2I6bm5ubm4JIyBTcGVjaWZpYyBVU0IgZGV2aWNlIGJ5IHNlcmlhbCBudW1iZXIuCisjYnJhaWxsZS1kZXZpY2UJYmx1ZXRvb3RoOgkJIyBGaXJzdCBwYWlyZWQgQmx1ZXRvb3RoIGRldmljZSBtYXRjaGluZyBicmFpbGxlIGRyaXZlci4KKyNicmFpbGxlLWRldmljZQlibHVldG9vdGg6eHg6eHg6eHg6eHg6eHg6eHgJIyBTcGVjaWZpYyBibHVldG9vdGggZGV2aWNlIGJ5IGFkZHJlc3MuCisKKyMgTk9URTogSWYgdGhlIGRldmljZSBpcyBjb25uZWN0ZWQgdmlhIGEgc2VyaWFsLXRvLVVTQiBhZGFwdGVyIHRoZW4gc2V0dGluZworIyBicmFpbGxlLWRldmljZSB0byB1c2I6IHdpbGwgbm90IHdvcmsuIEluIHRoaXMgY2FzZSwgeW91IG5lZWRzIHRvIGlkZW50aWZ5IHRoZQorIyB2aXJ0dWFsIHNlcmlhbCBkZXZpY2Ugd2hpY2ggdGhlIGtlcm5lbCBoYXMgY3JlYXRlZCBmb3IgdGhlIGFkYXB0ZXIsIGkuZS4gdG8KKyMgc29tZXRoaW5nIGxpa2Ugc2VyaWFsOnR0eVVTQjAgb3IgdHR5QUNNMCAoc2VlIHRoZSBrZXJuZWwgbWVzc2FnZXMgb24gZGV2aWNlCisjIHBsdWcgdG8gZ2V0IHRoZSBhY3R1YWwgZGV2aWNlIG5hbWUpLgorCisjIFRoZSByZWxlYXNlLWRldmljZSBkaXJlY3RpdmUgc3BlY2lmaWVzIHdoZXRoZXIgb3Igbm90IHRoZSBkZXZpY2UgdG8gd2hpY2ggdGhlCisjIGJyYWlsbGUgZGlzcGxheSBpcyBjb25uZWN0ZWQgaXMgdG8gYmUgcmVsZWFzZWQgd2hlbiB0aGUgY3VycmVudCBzY3JlZW4gb3IKKyMgd2luZG93IGNhbid0IGJlIHJlYWQgYnkgQlJMVFRZLiBJZiBub3Qgc3BlY2lmaWVkLCAib24iIHdpbGwgYmUgdXNlZCBvbiBXaW5kb3dzCisjIHBsYXRmb3JtcyBhbmQgIm9mZiIgd2lsbCBiZSB1c2VkIG9uIGFsbCBvdGhlciBwbGF0Zm9ybXMuCisjIChjYW4gYmUgb3ZlcnJpZGRlbiB3aXRoIHRoZSAtLXJlbGVhc2UtZGV2aWNlIFstcl0gb3B0aW9uKQorI3JlbGVhc2UtZGV2aWNlCW9uCSMgUmVsZWFzZSB0aGUgZGV2aWNlLgorI3JlbGVhc2UtZGV2aWNlCW9mZgkjIERvbid0IHJlbGVhc2UgdGhlIGRldmljZS4KKworIyBUaGUgdGV4dC10YWJsZSBkaXJlY3RpdmUgc3BlY2lmaWVzIHdoaWNoIHRleHQgdGFibGUgdG8gdXNlLiBSZWxhdGl2ZSBwYXRocworIyBhcmUgYW5jaG9yZWQgYXQgIkBUQUJMRVNfRElSRUNUT1JZQC9AVEVYVF9UQUJMRVNfU1VCRElSRUNUT1JZQCIuIElmIG5vdCBzcGVjaWZpZWQsIGxvY2FsZS1iYXNlZAorIyBhdXRvc2VsZWN0aW9uIHdpdGggZmFsbGJhY2sgdG8gIkB0ZXh0X3RhYmxlQCIgd2lsbCBiZSBwZXJmb3JtZWQuCisjIChjYW4gYmUgb3ZlcnJpZGRlbiB3aXRoIHRoZSAtLXRleHQtdGFibGU9IFstdF0gb3B0aW9uKQorI3RleHQtdGFibGUJYXV0bwkjIGxvY2FsZS1iYXNlZCBhdXRvc2VsZWN0aW9uCisjdGV4dC10YWJsZQlhcgkjIEFyYWJpYyAoZ2VuZXJpYykKKyN0ZXh0LXRhYmxlCWFzCSMgQXNzYW1lc2UKKyN0ZXh0LXRhYmxlCWF3YQkjIEF3YWRoaQorI3RleHQtdGFibGUJYmcJIyBCdWxnYXJpYW4KKyN0ZXh0LXRhYmxlCWJoCSMgQmloYXJpCisjdGV4dC10YWJsZQlibgkjIEJlbmdhbGkKKyN0ZXh0LXRhYmxlCWJvCSMgVGliZXRhbgorI3RleHQtdGFibGUJYnJhCSMgQnJhagorI3RleHQtdGFibGUJYnJmCSMgQnJhaWxsZSBSZWFkeSBGb3JtYXQgKGZvciB2aWV3aW5nIC5icmYgZmlsZXMgd2l0aGluIGFuIGVkaXRvciBvciBwYWdlcikKKyN0ZXh0LXRhYmxlCWNzCSMgQ3plY2gKKyN0ZXh0LXRhYmxlCWN5CSMgV2Vsc2gKKyN0ZXh0LXRhYmxlCWRhCSMgRGFuaXNoCisjdGV4dC10YWJsZQlkYS0xMjUyCSMgRGFuaXNoIChTdmVuZCBUaG91Z2FhcmQsIDIwMDLigJMxMeKAkzE4KQorI3RleHQtdGFibGUJZGEtbHQJIyBEYW5pc2ggKExvZ1RleHQpCisjdGV4dC10YWJsZQlkZQkjIEdlcm1hbgorI3RleHQtdGFibGUJZHJhCSMgRHJhdmlkaWFuCisjdGV4dC10YWJsZQllbAkjIEdyZWVrCisjdGV4dC10YWJsZQllbgkjIEVuZ2xpc2gKKyN0ZXh0LXRhYmxlCWVuX0NBCSMgRW5nbGlzaCAoQ2FuYWRhKQorI3RleHQtdGFibGUJZW5fR0IJIyBFbmdsaXNoIChVbml0ZWQgS2luZ2RvbSkKKyN0ZXh0LXRhYmxlCWVuX1VTCSMgRW5nbGlzaCAoVW5pdGVkIFN0YXRlcykKKyN0ZXh0LXRhYmxlCWVuLW5hYmNjCSMgRW5nbGlzaCAoTm9ydGggQW1lcmljYW4gQnJhaWxsZSBDb21wdXRlciBDb2RlKQorI3RleHQtdGFibGUJZW8JIyBFc3BlcmFudG8KKyN0ZXh0LXRhYmxlCWVzCSMgU3BhbmlzaAorI3RleHQtdGFibGUJZXQJIyBFc3RvbmlhbgorI3RleHQtdGFibGUJZmkJIyBGaW5uaXNoCisjdGV4dC10YWJsZQlmcgkjIEZyZW5jaAorI3RleHQtdGFibGUJZnJfQ0EJIyBGcmVuY2ggKENhbmFkYSkKKyN0ZXh0LXRhYmxlCWZyX0ZSCSMgRnJlbmNoIChGcmFuY2UpCisjdGV4dC10YWJsZQlmci0yMDA3CSMgRnJlbmNoICh1bmlmaWVkIDIwMDcpCisjdGV4dC10YWJsZQlmci1jYmlmcwkjIEZyZW5jaCAoQ29kZSBCcmFpbGxlIEluZm9ybWF0aXF1ZSBGcmFuw6dhaXMgU3RhbmRhcmQpCisjdGV4dC10YWJsZQlmci12cwkjIEZyZW5jaCAoVmlzaW9CcmFpbGxlKQorI3RleHQtdGFibGUJZ2EJIyBJcmlzaAorI3RleHQtdGFibGUJZ2QJIyBHYWVsaWMKKyN0ZXh0LXRhYmxlCWdvbgkjIEdvbmRpCisjdGV4dC10YWJsZQlndQkjIEd1amFyYXRpCisjdGV4dC10YWJsZQloZQkjIEhlYnJldworI3RleHQtdGFibGUJaGkJIyBIaW5kaQorI3RleHQtdGFibGUJaHIJIyBDcm9hdGlhbgorI3RleHQtdGFibGUJaHUJIyBIdW5nYXJpYW4KKyN0ZXh0LXRhYmxlCWh5CSMgQXJtZW5pYW4KKyN0ZXh0LXRhYmxlCWlzCSMgSWNlbGFuZGljCisjdGV4dC10YWJsZQlpdAkjIEl0YWxpYW4KKyN0ZXh0LXRhYmxlCWtoYQkjIEtoYXNpCisjdGV4dC10YWJsZQlrbgkjIEthbm5hZGEKKyN0ZXh0LXRhYmxlCWtvawkjIEtvbmthbmkKKyN0ZXh0LXRhYmxlCWtydQkjIEt1cnVraAorI3RleHQtdGFibGUJbHQJIyBMaXR1YW5pYW4KKyN0ZXh0LXRhYmxlCWx2CSMgTGF0dmlhbgorI3RleHQtdGFibGUJbWcJIyBNYWxhZ2FzeQorI3RleHQtdGFibGUJbWkJIyBNYW9yaQorI3RleHQtdGFibGUJbWwJIyBNYWxheWFsYW0KKyN0ZXh0LXRhYmxlCW1uaQkjIE1hbmlwdXJpCisjdGV4dC10YWJsZQltcgkjIE1hcmF0aGkKKyN0ZXh0LXRhYmxlCW10CSMgTWFsdGVzZQorI3RleHQtdGFibGUJbXVuCSMgTXVuZGEKKyN0ZXh0LXRhYmxlCW13cgkjIE1hcndhcmkKKyN0ZXh0LXRhYmxlCW5lCSMgTmVwYWxpCisjdGV4dC10YWJsZQluZXcJIyBOZXdhcmkKKyN0ZXh0LXRhYmxlCW5sCSMgRHV0Y2gKKyN0ZXh0LXRhYmxlCW5sX0JFCSMgRHV0Y2ggKEJlbGdpdW0pCisjdGV4dC10YWJsZQlubF9OTAkjIER1dGNoIChOZXRoZXJsYW5kcykKKyN0ZXh0LXRhYmxlCW5vCSMgTm9yd2VnaWFuCisjdGV4dC10YWJsZQluby1nZW5lcmljCSMgTm9yd2VnaWFuICh3aXRoIHN1cHBvcnQgZm9yIG90aGVyIGxhbmd1YWdlcykKKyN0ZXh0LXRhYmxlCW5vLW91cAkjIE5vcndlZ2lhbiAoT2ZmZW50bGlnIHV0dmFsZyBmb3IgcHVua3Rza3JpZnQpCisjdGV4dC10YWJsZQlud2MJIyBOZXdhcmkgKG9sZCkKKyN0ZXh0LXRhYmxlCW9yCSMgT3JpeWEKKyN0ZXh0LXRhYmxlCXBhCSMgUGFuamFiaQorI3RleHQtdGFibGUJcGkJIyBQYWxpCisjdGV4dC10YWJsZQlwbAkjIFBvbGlzaAorI3RleHQtdGFibGUJcHQJIyBQb3J0dWd1ZXNlCisjdGV4dC10YWJsZQlybwkjIFJvbWFuaWFuCisjdGV4dC10YWJsZQlydQkjIFJ1c3NpYW4KKyN0ZXh0LXRhYmxlCXNlCSMgU2FtaSAoTm9ydGhlcm4pCisjdGV4dC10YWJsZQlzYQkjIFNhbnNrcml0CisjdGV4dC10YWJsZQlzYXQJIyBTYW50YWxpCisjdGV4dC10YWJsZQlzZAkjIFNpbmRoaQorI3RleHQtdGFibGUJc2sJIyBTbG92YWsKKyN0ZXh0LXRhYmxlCXNsCSMgU2xvdmVuaWFuCisjdGV4dC10YWJsZQlzdgkjIFN3ZWRpc2gKKyN0ZXh0LXRhYmxlCXN2LTE5ODkJIyBTd2VkaXNoICgxOTg5IHN0YW5kYXJkKQorI3RleHQtdGFibGUJc3YtMTk5NgkjIFN3ZWRpc2ggKDE5OTYgc3RhbmRhcmQpCisjdGV4dC10YWJsZQlzdwkjIFN3YWhpbGkKKyN0ZXh0LXRhYmxlCXRhCSMgVGFtaWwKKyN0ZXh0LXRhYmxlCXRlCSMgVGVsdWd1CisjdGV4dC10YWJsZQl0cgkjIFR1cmtpc2gKKyN0ZXh0LXRhYmxlCXVrCSMgVWtyYWluaWFuCisjdGV4dC10YWJsZQl2aQkjIFZpZXRuYW1lc2UKKworIyBUaGUgY29udHJhY3Rpb24tdGFibGUgZGlyZWN0aXZlIHNwZWNpZmllcyB3aGljaCBjb250cmFjdGlvbiB0YWJsZSB0byB1c2UuCisjIFJlbGF0aXZlIHBhdGhzIGFyZSBhbmNob3JlZCBhdCAiQFRBQkxFU19ESVJFQ1RPUllAL0BDT05UUkFDVElPTl9UQUJMRVNfU1VCRElSRUNUT1JZQCIuIElmIG5vdCBzcGVjaWZpZWQsIG5vCisjIGNvbnRyYWN0aW9uIHRhYmxlIHdpbGwgYmUgYXZhaWxhYmxlLgorIyAoY2FuIGJlIG92ZXJyaWRkZW4gd2l0aCB0aGUgLS1jb250cmFjdGlvbi10YWJsZT0gWy1jXSBvcHRpb24pCisjY29udHJhY3Rpb24tdGFibGUJYXV0bwkjIGxvY2FsZS1iYXNlZCBhdXRvc2VsZWN0aW9uCisjY29udHJhY3Rpb24tdGFibGUJYWYJIyBBZnJpa2FhbnMgKGNvbnRyYWN0ZWQpCisjY29udHJhY3Rpb24tdGFibGUJYW0JIyBBbWhhcmljICh1bmNvbnRyYWN0ZWQpCisjY29udHJhY3Rpb24tdGFibGUJZGUJIyBHZXJtYW4KKyNjb250cmFjdGlvbi10YWJsZQlkZS1nMAkjIEdlcm1hbiAodW5jb250cmFjdGVkKQorI2NvbnRyYWN0aW9uLXRhYmxlCWRlLWcxCSMgR2VybWFuIChiYXNpYyBjb250cmFjdGlvbnMpCisjY29udHJhY3Rpb24tdGFibGUJZGUtZzIJIyBHZXJtYW4gKGNvbnRyYWN0ZWQpCisjY29udHJhY3Rpb24tdGFibGUJZGUtMTk5OAkjIEdlcm1hbiAoY29udHJhY3RlZCAtIDE5OTggc3RhbmRhcmQpCisjY29udHJhY3Rpb24tdGFibGUJZGUtMjAxNQkjIEdlcm1hbiAoY29udHJhY3RlZCAtIDIwMTUgc3RhbmRhcmQpCisjY29udHJhY3Rpb24tdGFibGUJZW4JIyBFbmdsaXNoCisjY29udHJhY3Rpb24tdGFibGUJZW5fVVMJIyBFbmdsaXNoIChVbml0ZWQgU3RhdGVzKQorI2NvbnRyYWN0aW9uLXRhYmxlCWVuLXVlYi1nMQkjIEVuZ2xpc2ggKFVuaWZpZWQsIHVuY29udHJhY3RlZCkKKyNjb250cmFjdGlvbi10YWJsZQllbi11ZWItZzIJIyBFbmdsaXNoIChVbmlmaWVkLCBjb250cmFjdGVkKQorI2NvbnRyYWN0aW9uLXRhYmxlCWVuLXVzLWcyCSMgRW5nbGlzaCAoVW5pdGVkIFN0YXRlcywgY29udHJhY3RlZCkKKyNjb250cmFjdGlvbi10YWJsZQllcwkjIFNwYW5pc2ggKGNvbnRyYWN0ZWQpCisjY29udHJhY3Rpb24tdGFibGUJZnIJIyBGcmVuY2gKKyNjb250cmFjdGlvbi10YWJsZQlmci1nMQkjIEZyZW5jaCAodW5jb250cmFjdGVkKQorI2NvbnRyYWN0aW9uLXRhYmxlCWZyLWcyCSMgRnJlbmNoIChjb250cmFjdGVkKQorI2NvbnRyYWN0aW9uLXRhYmxlCWhhCSMgSGF1c2EgKGNvbnRyYWN0ZWQpCisjY29udHJhY3Rpb24tdGFibGUJaWQJIyBJbmRvbmVzaWFuIChjb250cmFjdGVkKQorI2NvbnRyYWN0aW9uLXRhYmxlCWlwYQkjIEludGVybmF0aW9uYWwgUGhvbmV0aWMgQWxwaGFiZXQKKyNjb250cmFjdGlvbi10YWJsZQlqYQkjIEphcGFuZXNlICh1bmNvbnRyYWN0ZWQpCisjY29udHJhY3Rpb24tdGFibGUJa28JIyBLb3JlYW4KKyNjb250cmFjdGlvbi10YWJsZQlrby1nMAkjIEtvcmVhbiAodW5jb250cmFjdGVkKQorI2NvbnRyYWN0aW9uLXRhYmxlCWtvLWcxCSMgS29yZWFuIChwYXJ0aWFsbHkgY29udHJhY3RlZCkKKyNjb250cmFjdGlvbi10YWJsZQlrby1nMgkjIEtvcmVhbiAoY29udHJhY3RlZCkKKyNjb250cmFjdGlvbi10YWJsZQlsdAkjIExpdGh1YW5pYW4gKHVuY29udHJhY3RlZCkKKyNjb250cmFjdGlvbi10YWJsZQltZwkjIE1hbGFnYXN5IChjb250cmFjdGVkKQorI2NvbnRyYWN0aW9uLXRhYmxlCW11bgkjIE11bmRhIChjb250cmFjdGVkKQorI2NvbnRyYWN0aW9uLXRhYmxlCW5sCSMgRHV0Y2ggKGNvbnRyYWN0ZWQpCisjY29udHJhY3Rpb24tdGFibGUJbnkJIyBDaGljaGV3YSAoY29udHJhY3RlZCkKKyNjb250cmFjdGlvbi10YWJsZQlwdAkjIFBvcnR1Z3Vlc2UgKGNvbnRyYWN0ZWQpCisjY29udHJhY3Rpb24tdGFibGUJcnUJIyBSdXNzaWFuIChjb250cmFjdGVkKQorI2NvbnRyYWN0aW9uLXRhYmxlCXNpCSMgU2luaGFsZXNlICh1bmNvbnRyYWN0ZWQpCisjY29udHJhY3Rpb24tdGFibGUJc3cJIyBTd2FoaWxpIChjb250cmFjdGVkKQorI2NvbnRyYWN0aW9uLXRhYmxlCXRoCSMgVGhhaSAoY29udHJhY3RlZCkKKyNjb250cmFjdGlvbi10YWJsZQl6aF9UVwkjIENoaW5lc2UgKFRhaXdhbiwgdW5jb250cmFjdGVkKQorI2NvbnRyYWN0aW9uLXRhYmxlCXp1CSMgWnVsdSAoY29udHJhY3RlZCkKKworIyBUaGUgYXR0cmlidXRlcy10YWJsZSBkaXJlY3RpdmUgc3BlY2lmaWVzIHdoaWNoIGF0dHJpYnV0ZXMgdGFibGUgdG8gdXNlLgorIyBSZWxhdGl2ZSBwYXRocyBhcmUgYW5jaG9yZWQgYXQgIkBUQUJMRVNfRElSRUNUT1JZQC9AQVRUUklCVVRFU19UQUJMRVNfU1VCRElSRUNUT1JZQCIuIElmIG5vdCBzcGVjaWZpZWQsCisjICJAYXR0cmlidXRlc190YWJsZUAiIHdpbGwgYmUgdXNlZC4KKyMgKGNhbiBiZSBvdmVycmlkZGVuIHdpdGggdGhlIC0tYXR0cmlidXRlcy10YWJsZT0gWy1hXSBvcHRpb24pCisjYXR0cmlidXRlcy10YWJsZQlsZWZ0X3JpZ2h0CSMgZm9yZWdyb3VuZCBjb2xvdXIgaW4gdGhlIGxlZnQgY29sdW1uIGFuZCBiYWNrZ3JvdW5kIGNvbG91ciBpbiB0aGUgcmlnaHQgY29sdW1uCisjYXR0cmlidXRlcy10YWJsZQlpbnZsZWZ0X3JpZ2h0CSMgaW52ZXJzZSBmb3JlZ3JvdW5kIGNvbG91ciBpbiB0aGUgbGVmdCBjb2x1bW4gYW5kIGJhY2tncm91bmQgY29sb3VyIGluIHRoZSByaWdodCBjb2x1bW4KKyNhdHRyaWJ1dGVzLXRhYmxlCXVwcGVyX2xvd2VyCSMgZm9yZWdyb3VuZCBjb2xvdXIgaW4gdGhlIHVwcGVyIHNxdWFyZSBhbmQgYmFja2dyb3VuZCBjb2xvdXIgaW4gdGhlIGxvd2VyIHNxdWFyZQorCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEJyYWlsbGUgRHJpdmVyIFBhcmFtZXRlcnMgIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIyBUaGUgYnJhaWxsZS1wYXJhbWV0ZXJzIGRpcmVjdGl2ZSBwYXNzZXMgZHJpdmVyLXNwZWNpZmljIHBhcmFtZXRlcnMKKyMgdGhyb3VnaCB0byB0aGUgYnJhaWxsZSBkcml2ZXIuCisjIChjYW4gYmUgc3BlY2lmaWVkIG1vcmUgdGhhbiBvbmNlKQorIyAoY2FuIGJlIG92ZXJyaWRkZW4gd2l0aCB0aGUgLS1icmFpbGxlLXBhcmFtZXRlcnM9IFstQl0gb3B0aW9uKQorI2JyYWlsbGUtcGFyYW1ldGVycyBkcml2ZXI6bmFtZT12YWx1ZSwuLi4KKworIyBBbHZhIEJyYWlsbGUgRHJpdmVyIFBhcmFtZXRlcnMKKyNicmFpbGxlLXBhcmFtZXRlcnMgYWw6Um90YXRlZENlbGxzPW5vICMgW25vLHllc10KKyNicmFpbGxlLXBhcmFtZXRlcnMgYWw6U2Vjb25kYXJ5Um91dGluZ0tleUVtdWxhdGlvbj1ubyAjIFtubyx5ZXNdCisKKyMgQnJsQVBJIEJyYWlsbGUgRHJpdmVyIFBhcmFtZXRlcnMKKyNicmFpbGxlLXBhcmFtZXRlcnMgYmE6QXV0aD1AQ09ORklHVVJBVElPTl9ESVJFQ1RPUllAL0BhcGlfYXV0aGtleWZpbGVACisjYnJhaWxsZS1wYXJhbWV0ZXJzIGJhOkhvc3Q9OjAKKyNicmFpbGxlLXBhcmFtZXRlcnMgYmE6U3BlZWNoQ2hhbmdlcz15ZXMgIyBbeWVzLG5vXQorCisjIEJyYWlsbGVMaXRlIEJyYWlsbGUgRHJpdmVyIFBhcmFtZXRlcnMKKyNicmFpbGxlLXBhcmFtZXRlcnMgYmw6QmF1ZFJhdGU9OTYwMCAjIFszMDAsNjAwLDEyMDAsMjQwMCw0ODAwLDk2MDAsMTkyMDAsMzg0MDBdCisjYnJhaWxsZS1wYXJhbWV0ZXJzIGJsOktiRW11PXllcyAjIFt5ZXMsbm9dCisKKyMgQmF1bSBCcmFpbGxlIERyaXZlciBQYXJhbWV0ZXJzCisjYnJhaWxsZS1wYXJhbWV0ZXJzIGJtOlByb3RvY29sPWRlZmF1bHQgIyBbZGVmYXVsdCxlc2NhcGUsaGlkMSxoaWQyLGh0LHBiXQorI2JyYWlsbGUtcGFyYW1ldGVycyBibTpWYXJpb0tleXM9bm8gIyBbbm8seWVzXQorCisjIERvdFBhZCBCcmFpbGxlIERyaXZlciBQYXJhbWV0ZXJzCisjYnJhaWxsZWRkLXBhcmFtZXRlcnMgZHA6RGlzcGxheT1kZWZhdWx0ICMgW2RlZmF1bHQsdGV4dCxncmFwaGljXQorCisjIEV1cm9CcmFpbGxlIEJyYWlsbGUgRHJpdmVyIFBhcmFtZXRlcnMKKyNicmFpbGxlLXBhcmFtZXRlcnMgZXU6UHJvdG9jb2w9ICMgW2F1dG8sYXplcmJyYWlsbGUsY2xpbyxldXJvYnJhaWxsZSxub3RlYnJhaWxsZSxwdXBpYnJhaWxsZSxzY3JpYmEsZXN5cyxlc3l0aW1lLGlyaXMsZXN5c2lyaXNdCisKKyMgSGFuZHlUZWNoIEJyYWlsbGUgRHJpdmVyIFBhcmFtZXRlcnMKKyNicmFpbGxlLXBhcmFtZXRlcnMgaHQ6U2V0VGltZT1ubyAjIFtubyx5ZXNdCisKKyMgSXJpcyBCcmFpbGxlIERyaXZlciBQYXJhbWV0ZXJzCisjYnJhaWxsZS1wYXJhbWV0ZXJzIGlyOkVtYmVkZGVkPSAjIFtubyx5ZXNdCisjYnJhaWxsZS1wYXJhbWV0ZXJzIGlyOkxhdGNoRGVsYXk9MTAgIyBbMC0xMDBdICh0ZW50aHMgb2YgYSBzZWNvbmQpCisjYnJhaWxsZS1wYXJhbWV0ZXJzIGlyOlByb3RvY29sPSAjIFtldXJvYnJhaWxsZSxuYXRpdmVdCisKKyMgTGliYnJhaWxsZSBCcmFpbGxlIERyaXZlciBQYXJhbWV0ZXJzCisjYnJhaWxsZS1wYXJhbWV0ZXJzIGxiOkRldmljZT0vZGV2L3R0eVMwICMgCisjYnJhaWxsZS1wYXJhbWV0ZXJzIGxiOkRyaXZlcj1hdXRvICMgCisjYnJhaWxsZS1wYXJhbWV0ZXJzIGxiOlRhYmxlPXVzLnRibCAjIAorCisjIFRTSSBCcmFpbGxlIERyaXZlciBQYXJhbWV0ZXJzCisjYnJhaWxsZS1wYXJhbWV0ZXJzIHRzOkhpZ2hCYXVkPXllcyAjIFt5ZXMsbm9dCisjYnJhaWxsZS1wYXJhbWV0ZXJzIHRzOlNldEJhdWQ9OTYwMCAjIFs0ODAwLDk2MDAsMTkyMDBdCisKKyMgVFRZIEJyYWlsbGUgRHJpdmVyIFBhcmFtZXRlcnMKKyNicmFpbGxlLXBhcmFtZXRlcnMgdHQ6QmF1ZD05NjAwICMgCisjYnJhaWxsZS1wYXJhbWV0ZXJzIHR0OkNoYXJTZXQ9SVNPODg1OS0xICMgCisjYnJhaWxsZS1wYXJhbWV0ZXJzIHR0OkNvbHVtbnM9NDAgIyBbMS04MF0KKyNicmFpbGxlLXBhcmFtZXRlcnMgdHQ6TGluZXM9MSAjIFsxLTNdCisjYnJhaWxsZS1wYXJhbWV0ZXJzIHR0OkxvY2FsZT0gIyAKKyNicmFpbGxlLXBhcmFtZXRlcnMgdHQ6VGVybT12dDEwMCAjIFt0ZXJtaW5mb10KKworIyBWaXNpb0JyYWlsbGUgQnJhaWxsZSBEcml2ZXIgUGFyYW1ldGVycworI2JyYWlsbGUtcGFyYW1ldGVycyB2czpCYXVkPTU3NjAwICMgCisjYnJhaWxsZS1wYXJhbWV0ZXJzIHZzOkRpc3BsYXlTaXplPTQwICMgWzIwLTQwXQorI2JyYWlsbGUtcGFyYW1ldGVycyB2czpQcm9tVmVyc2lvbj00ICMgWzMtNl0KKworIyBYV2luZG93IEJyYWlsbGUgRHJpdmVyIFBhcmFtZXRlcnMKKyNicmFpbGxlLXBhcmFtZXRlcnMgeHc6Q29sdW1ucz00MCAjIFsxLTgwXQorI2JyYWlsbGUtcGFyYW1ldGVycyB4dzpGb250PW5hbWUgIyBbXQorI2JyYWlsbGUtcGFyYW1ldGVycyB4dzpJbnB1dD1vZmYgIyBbb2ZmLG9uXQorI2JyYWlsbGUtcGFyYW1ldGVycyB4dzpMaW5lcz0xICMgWzEtM10KKyNicmFpbGxlLXBhcmFtZXRlcnMgeHc6TW9kZWw9YmFyZSAjIFtiYXJlXQorI2JyYWlsbGUtcGFyYW1ldGVycyB4dzpUa1Bhcm1zPSAjIAorCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgU3BlZWNoIFNldHRpbmdzICMKKyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIyBUaGUgc3BlZWNoLWRyaXZlciBkaXJlY3RpdmUgc3BlY2lmaWVzIHRoZSB0d28tbGV0dGVyIGRyaXZlcgorIyBpZGVudGlmaWNhdGlvbiBjb2RlIG9mIHRoZSBkcml2ZXIgZm9yIHRoZSBzcGVlY2ggc3ludGhlc2l6ZXIuCisjIElmIG5vdCBzcGVjaWZpZWQsIGF1dG9kZXRlY3Rpb24gd2lsbCBiZSBwZXJmb3JtZWQuCisjIElmIG1vcmUgdGhhbiBvbmUgZHJpdmVyLCBzZXBhcmF0ZWQgYnkgY29tbWFzLCBpcyBzcGVjaWZpZWQsCisjIHRoZW4gYXV0b2RldGVjdGlvbiB3aWxsIGJlIHBlcmZvcm1lZCBhbW9uZ3N0IHRoZW0uCisjIChjYW4gYmUgb3ZlcnJpZGRlbiB3aXRoIHRoZSAtLXNwZWVjaC1kcml2ZXI9IFstc10gb3B0aW9uKQorI3NwZWVjaC1kcml2ZXIJYXV0bwkjIGF1dG9kZXRlY3QKKyNzcGVlY2gtZHJpdmVyCWFsCSMgQWx2YQorI3NwZWVjaC1kcml2ZXIJYW4JIyBBbmRyb2lkCisjc3BlZWNoLWRyaXZlcglibAkjIEJyYWlsbGVMaXRlCisjc3BlZWNoLWRyaXZlcgljYgkjIENvbWJpQnJhaWxsZQorI3NwZWVjaC1kcml2ZXIJZW4JIyBlU3BlYWstTkcKKyNzcGVlY2gtZHJpdmVyCWVzCSMgZVNwZWFrCisjc3BlZWNoLWRyaXZlcglmbAkjIEZlc3RpdmFsTGl0ZQorI3NwZWVjaC1kcml2ZXIJZnYJIyBGZXN0aXZhbAorI3NwZWVjaC1kcml2ZXIJZ3MJIyBHZW5lcmljU2F5Cisjc3BlZWNoLWRyaXZlcgltcAkjIE1pa3JvcHVoZQorI3NwZWVjaC1kcml2ZXIJc2QJIyBTcGVlY2hEaXNwYXRjaGVyCisjc3BlZWNoLWRyaXZlcglzdwkjIFN3aWZ0Cisjc3BlZWNoLWRyaXZlcgl0aAkjIFRoZXRhCisjc3BlZWNoLWRyaXZlcgl2dgkjIFZpYVZvaWNlOyBWb3hpbgorI3NwZWVjaC1kcml2ZXIJeHMJIyBFeHRlcm5hbFNwZWVjaAorCisjIFRoZSBzcGVlY2gtaW5wdXQgZGlyZWN0aXZlIHNwZWNpZmllcyB0aGUgbmFtZSBvZiB0aGUgZmlsZSBzeXN0ZW0gb2JqZWN0CisjIChGSUZPLCBuYW1lZCBwaXBlLCBuYW1lZCBzb2NrZXQsIGV0Yykgd2hpY2ggY2FuIGJlIHVzZWQgYnkgZXh0ZXJuYWwKKyMgYXBwbGljYXRpb25zIGZvciB0ZXh0LXRvLXNwZWVjaCBjb252ZXJzaW9uIHZpYSBCUkxUVFkncyBzcGVlY2ggZHJpdmVyLgorIyBSZWxhdGl2ZSBwYXRocyBhcmUgYW5jaG9yZWQgYXQgdGhlIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkuIElmIG5vdAorIyBzcGVjaWZpZWQsIHRoZSBmaWxlIHN5c3RlbSBvYmplY3QgaXNuJ3QgY3JlYXRlZC4KKyMgKGNhbiBiZSBvdmVycmlkZGVuIHdpdGggdGhlIC0tc3BlZWNoLWlucHV0PSBbLWldIG9wdGlvbikKKyNzcGVlY2gtaW5wdXQJL3BhdGgvdG8vZmlsZS1zeXN0ZW0tb2JqZWN0CisKKyMgVGhlIHF1aWV0LWlmLW5vLWJyYWlsbGUgZGlyZWN0aXZlIHNwZWNpZmllcyB0aGF0IHRoZSBhdXRvc3BlYWsgZmVhdHVyZQorIyBpc24ndCB0byBiZSBpbXBsaWNpdGx5IGVuYWJsZWQgd2hlbiB0aGUgYnJhaWxsZSBkcml2ZXIgaXMgbm90IHJ1bm5pbmcuCisjIChjYW4gYmUgb3ZlcnJpZGRlbiB3aXRoIHRoZSAtLXF1aWV0LWlmLW5vLWJyYWlsbGU9IFstUV0gb3B0aW9uKQorI3F1aWV0LWlmLW5vLWJyYWlsbGUJb2ZmCSMgW29mZixvbl0KKworIyBUaGUgYXV0b3NwZWFrLXRocmVzaG9sZCBkaXJlY3RpdmUgc3BlY2lmaWVzIHRoZSBtaW5pbXVtIHNjcmVlbiBjb250ZW50CisjIHF1YWxpdHkgdGhhdCB3aWxsIHRyaWdnZXIgdGhlIGF1dG9zcGVhayBmZWF0dXJlLgorIyAoY2FuIGJlIG92ZXJyaWRkZW4gd2l0aCB0aGUgLS1hdXRvc3BlYWstdGhyZXNob2xkPSBvcHRpb24pCisjYXV0b3NwZWFrLXRocmVzaG9sZAlub25lCisKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBTcGVlY2ggRHJpdmVyIFBhcmFtZXRlcnMgIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjIFRoZSBzcGVlY2gtcGFyYW1ldGVycyBkaXJlY3RpdmUgcGFzc2VzIGRyaXZlci1zcGVjaWZpYyBwYXJhbWV0ZXJzIHRocm91Z2gKKyMgdG8gdGhlIHNwZWVjaCBkcml2ZXIuCisjIChjYW4gYmUgc3BlY2lmaWVkIG1vcmUgdGhhbiBvbmNlKQorIyAoY2FuIGJlIG92ZXJyaWRkZW4gd2l0aCB0aGUgLS1zcGVlY2gtcGFyYW1ldGVycz0gWy1TXSBvcHRpb24pCisjc3BlZWNoLXBhcmFtZXRlcnMgZHJpdmVyOm5hbWU9dmFsdWUsLi4uCisKKyMgZVNwZWFrIFNwZWVjaCBEcml2ZXIgUGFyYW1ldGVycworI3NwZWVjaC1wYXJhbWV0ZXJzIGVzOk1heFJhdGU9NDUwICMgWzgwLV0KKyNzcGVlY2gtcGFyYW1ldGVycyBlczpQYXRoPQorI3NwZWVjaC1wYXJhbWV0ZXJzIGVzOlB1bmN0TGlzdD0KKyNzcGVlY2gtcGFyYW1ldGVycyBlczpWb2ljZT1kZWZhdWx0CisKKyMgZVNwZWFrLU5HIFNwZWVjaCBEcml2ZXIgUGFyYW1ldGVycworI3NwZWVjaC1wYXJhbWV0ZXJzIGVuOk1heFJhdGU9NDUwICMgWzgwLV0KKyNzcGVlY2gtcGFyYW1ldGVycyBlbjpQYXRoPQorI3NwZWVjaC1wYXJhbWV0ZXJzIGVuOlB1bmN0TGlzdD0KKyNzcGVlY2gtcGFyYW1ldGVycyBlbjpWb2ljZT1lbgorCisjIEV4dGVybmFsU3BlZWNoIFNwZWVjaCBEcml2ZXIgUGFyYW1ldGVycworI3NwZWVjaC1wYXJhbWV0ZXJzIHhzOlNvY2tldF9QYXRoPS90bXAvZXhzLWRhdGEKKworIyBGZXN0aXZhbCBTcGVlY2ggRHJpdmVyIFBhcmFtZXRlcnMKKyNzcGVlY2gtcGFyYW1ldGVycyBmdjpDb21tYW5kPWZlc3RpdmFsICMgWy9wYXRoL3RvL2NvbW1hbmRdCisjc3BlZWNoLXBhcmFtZXRlcnMgZnY6TmFtZT0gIyBba2V2aW4sa2FsXQorCisjIEZlc3RpdmFsTGl0ZSBTcGVlY2ggRHJpdmVyIFBhcmFtZXRlcnMKKyNzcGVlY2gtcGFyYW1ldGVycyBmbDpQaXRjaD0xMDAgIyBbNTAtMjAwXQorCisjIEdlbmVyaWNTYXkgU3BlZWNoIERyaXZlciBQYXJhbWV0ZXJzCisjc3BlZWNoLXBhcmFtZXRlcnMgZ3M6Q29tbWFuZD0vdXNyL2xvY2FsL2Jpbi9zYXkKKworIyBNaWtyb3B1aGUgU3BlZWNoIERyaXZlciBQYXJhbWV0ZXJzCisjc3BlZWNoLXBhcmFtZXRlcnMgbXA6TmFtZT0gIyBbL3BhdGgvdG8vbWlrcm9wdWhlL25hbWUucHU1XQorI3NwZWVjaC1wYXJhbWV0ZXJzIG1wOlBpdGNoPTAgIyBbLTEwLTEwXQorCisjIFNwZWVjaERpc3BhdGNoZXIgU3BlZWNoIERyaXZlciBQYXJhbWV0ZXJzCisjc3BlZWNoLXBhcmFtZXRlcnMgc2Q6TGFuZ3VhZ2U9ICMgW3R3by1sZXR0ZXIgbGFuZ3VhZ2UgY29kZV0KKyNzcGVlY2gtcGFyYW1ldGVycyBzZDpNb2R1bGU9ICMgW2ZsaXRlLGZlc3RpdmFsLGVwb3MtZ2VuZXJpYyxkdGstZ2VuZXJpYywuLi5dCisjc3BlZWNoLXBhcmFtZXRlcnMgc2Q6TmFtZT0gIyAKKyNzcGVlY2gtcGFyYW1ldGVycyBzZDpQb3J0PTY1NjAgIyBbMS02NTUzNV0KKyNzcGVlY2gtcGFyYW1ldGVycyBzZDpWb2ljZT0gIyBbbWFsZTEsZmVtYWxlMSxtYWxlMixmZW1hbGUyLG1hbGUzLGZlbWFsZTMsY2hpbGRfbWFsZSxjaGlsZF9mZW1hbGVdCisKKyMgU3dpZnQgU3BlZWNoIERyaXZlciBQYXJhbWV0ZXJzCisjc3BlZWNoLXBhcmFtZXRlcnMgc3c6TmFtZT0gIyBbdm9pY2UsL3BhdGgvdG8vdm9pY2VdCisKKyMgVGhldGEgU3BlZWNoIERyaXZlciBQYXJhbWV0ZXJzCisjc3BlZWNoLXBhcmFtZXRlcnMgdGg6QWdlPSAjIFsxLTk5LC0xLS05OV0KKyNzcGVlY2gtcGFyYW1ldGVycyB0aDpHZW5kZXI9ICMgW21hbGUsZmVtYWxlLG5ldXRlcl0KKyNzcGVlY2gtcGFyYW1ldGVycyB0aDpMYW5ndWFnZT0gIyBbdHdvLWxldHRlciBsYW5ndWFnZSBjb2RlXQorI3NwZWVjaC1wYXJhbWV0ZXJzIHRoOk5hbWU9ICMgW3ZvaWNlLC9wYXRoL3RvL3ZvaWNlXQorI3NwZWVjaC1wYXJhbWV0ZXJzIHRoOlBpdGNoPTAuMCAjIFstMi4wLTIuMF0KKworIyBWaWFWb2ljZSBTcGVlY2ggRHJpdmVyIFBhcmFtZXRlcnMKKyNzcGVlY2gtcGFyYW1ldGVycyB2djpRdWFsaXR5PSAjIFtmYWlyLHBvb3IsZ29vZF0KKyNzcGVlY2gtcGFyYW1ldGVycyB2djpNb2RlPSAjIFt3b3JkcyxsZXR0ZXJzLHB1bmN0dWF0aW9uLHBob25ldGljXQorI3NwZWVjaC1wYXJhbWV0ZXJzIHZ2OlN5bnRoZXNpemU9ICMgW3NlbnRlbmNlcyxhbGxdCisjc3BlZWNoLXBhcmFtZXRlcnMgdnY6QWJicmV2aWF0aW9ucz0gIyBbb24sb2ZmXQorI3NwZWVjaC1wYXJhbWV0ZXJzIHZ2OlllYXJzPSAjIFtvbixvZmZdCisjc3BlZWNoLXBhcmFtZXRlcnMgdnY6TGFuZ3VhZ2U9ICMgW0FtZXJpY2FuLUVuZ2xpc2gsIEJyaXRpc2gtRW5nbGlzaCwgQ2FzdGlsaWFuLVNwYW5pc2gsIE1leGljYW4tU3BhbmlzaCwgU3RhbmRhcmQtRnJlbmNoLCBDYW5hZGlhbi1GcmVuY2gsIFN0YW5kYXJkLUdlcm1hbiwgU3RhbmRhcmQtSXRhbGlhbiwgU3RhbmRhcmQtTWFuZGFyaW4tR0JLLCBTdGFuZGFyZC1NYW5kYXJpbi1QaW5ZaW4sIFN0YW5kYXJkLU1hbmRhcmluLVVDUzIsIFRhaXdhbmVzZS1NYW5kYXJpbi1CaWc1LCBUYWl3YW5lc2UtTWFuZGFyaW4tWmh1WWluLCBUYWl3YW5lc2UtTWFuZGFyaW4tUGluWWluLCBUYWl3YW5lc2UtTWFuZGFyaW4tVUNTMiwgQnJhemlsaWFuLVBvcnR1Z3Vlc2UsIFN0YW5kYXJkLUphcGFuZXNlLVNKSVMsIFN0YW5kYXJkLUphcGFuZXNlLVVDUzIsIFN0YW5kYXJkLUZpbm5pc2gsIFN0YW5kYXJkLUtvcmVhbi1VSEMsIFN0YW5kYXJkLUtvcmVhbi1VQ1MyLCBTdGFuZGFyZC1DYW50b25lc2UtR0JLLCBTdGFuZGFyZC1DYW50b25lc2UtVUNTMiwgSG9uZ0tvbmctQ2FudG9uZXNlLUJpZzUsIEhvbmdLb25nLUNhbnRvbmVzZS1VQ1MyLCBTdGFuZGFyZC1EdXRjaCwgU3RhbmRhcmQtTm9yd2VnaWFuLCBTdGFuZGFyZC1Td2VkaXNoLCBTdGFuZGFyZC1EYW5pc2gsIFN0YW5kYXJkLVRoYWktVElTNjIwXQorI3NwZWVjaC1wYXJhbWV0ZXJzIHZ2OlZvaWNlPSAjIFttYW4sd29tYW4sY2hpbGQscGF0cmlhcmNoLG1hdHJpYXJjaF0KKyNzcGVlY2gtcGFyYW1ldGVycyB2djpHZW5kZXI9ICMgW21hbGUsZmVtYWxlXQorI3NwZWVjaC1wYXJhbWV0ZXJzIHZ2OkhlYWRTaXplPSAjIFswLTEwMF0KKyNzcGVlY2gtcGFyYW1ldGVycyB2djpQaXRjaEJhc2VsaW5lPSAjIFs0MC00MjIgSHpdCisjc3BlZWNoLXBhcmFtZXRlcnMgdnY6RXhwcmVzc2l2ZW5lc3M9ICMgWzAtMTAwXSAocGl0Y2ggZmx1Y3R1YXRpb24pCisjc3BlZWNoLXBhcmFtZXRlcnMgdnY6Um91Z2huZXNzPSAjIFswLTEwMF0KKyNzcGVlY2gtcGFyYW1ldGVycyB2djpCcmVhdGhpbmVzcz0gIyBbMC0xMDBdCisjc3BlZWNoLXBhcmFtZXRlcnMgdnY6Vm9sdW1lPSAjIFswLTEwMCAlXQorI3NwZWVjaC1wYXJhbWV0ZXJzIHZ2OlNwZWVkPSAjIFs3MC0xMjk3IHdwbV0KKworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgS2V5Ym9hcmQgU2V0dGluZ3MgIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMgVGhlIGtleWJvYXJkLXRhYmxlIGRpcmVjdGl2ZSBzcGVjaWZpZXMgd2hpY2gga2V5Ym9hcmQgdGFibGUgdG8gdXNlLiBSZWxhdGl2ZSBwYXRocyBhcmUKKyMgYW5jaG9yZWQgYXQgIkBUQUJMRVNfRElSRUNUT1JZQC9AS0VZQk9BUkRfVEFCTEVTX1NVQkRJUkVDVE9SWUAiLiBJZiBub3Qgc3BlY2lmaWVkLCBubyBrZXlib2FyZCB0YWJsZSBpcyB1c2VkLgorIyAoY2FuIGJlIG92ZXJyaWRkZW4gd2l0aCB0aGUgLS1rZXlib2FyZC10YWJsZT0gWy1rXSBvcHRpb24pCisja2V5Ym9hcmQtdGFibGUJb2ZmCSMgbm8ga2V5Ym9hcmQgdGFibGUKKyNrZXlib2FyZC10YWJsZQlicmFpbGxlCSMgYmluZGluZ3MgZm9yIGJyYWlsbGUga2V5Ym9hcmRzCisja2V5Ym9hcmQtdGFibGUJZGVza3RvcAkjIGJpbmRpbmdzIGZvciBmdWxsIGtleWJvYXJkcworI2tleWJvYXJkLXRhYmxlCWtleXBhZAkjIGJpbmRpbmdzIGZvciBrZXlwYWQtYmFzZWQgbmF2aWdhdGlvbgorI2tleWJvYXJkLXRhYmxlCWxhcHRvcAkjIGJpbmRpbmdzIGZvciBrZXlib2FyZHMgd2l0aG91dCBhIGtleXBhZAorI2tleWJvYXJkLXRhYmxlCXN1bl90eXBlNgkjIGJpbmRpbmdzIGZvciBTdW4gVHlwZSA2IGtleWJvYXJkcworCisjIFRoZSBrZXlib2FyZC1wcm9wZXJ0aWVzIGRpcmVjdGl2ZSBzcGVjaWZpZXMgd2hpY2gga2V5Ym9hcmRzIHRvIG1vbml0b3IuCisjIElmIG5vdCBzcGVjaWZpZWQsIGFsbCBrZXlib2FyZHMgYXJlIG1vbml0b3JlZC4KKyMgKGNhbiBiZSBzcGVjaWZpZWQgbW9yZSB0aGFuIG9uY2UpCisjIChjYW4gYmUgb3ZlcnJpZGRlbiB3aXRoIHRoZSAtLWtleWJvYXJkLXByb3BlcnRpZXM9IFstS10gb3B0aW9uKQorI2tleWJvYXJkLXByb3BlcnRpZXMJVHlwZT1hbnkJIyBbYW55LHBzMix1c2IsYmx1ZXRvb3RoLGludGVybmFsXQorI2tleWJvYXJkLXByb3BlcnRpZXMJVmVuZG9yPTBYMDAwMAkjIFswWDAwMDAtMFhGRkZGXQorI2tleWJvYXJkLXByb3BlcnRpZXMJUHJvZHVjdD0wWDAwMDAJIyBbMFgwMDAwLTBYRkZGRl0KKworCisjIyMjIyMjIyMjIyMjIyMjIyMKKyMgU291bmQgU2V0dGluZ3MgIworIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMgVGhlIHBjbS1kZXZpY2UgZGlyZWN0aXZlIHNwZWNpZmllcyB0aGUgZGV2aWNlIHRvIHVzZSBmb3Igc291bmRjYXJkCisjIGRpZ2l0YWwgYXVkaW8uIElmIG5vdCBzcGVjaWZpZWQsIGEgbWV0aG9kLSBhbmQgc3lzdGVtLWRlcGVuZGVudAorIyBkZWZhdWx0IHdpbGwgYmUgdXNlZC4KKyMgKGNhbiBiZSBvdmVycmlkZGVuIHdpdGggdGhlIC0tcGNtLWRldmljZT0gWy1wXSBvcHRpb24pCisjcGNtLWRldmljZQkvcGF0aC90by9kZXZpY2UJIyBtb3N0IG1ldGhvZHMKKyNwY20tZGV2aWNlCXBjbS1oYW5kbGUtaWQJIyBBTFNBIChzZWUgc2Vjb25kIHBhcmFtZXRlciBvZiBzbmRfcGNtX29wZW4pCisKKyMgVGhlIG1pZGktZGV2aWNlIGRpcmVjdGl2ZSBzcGVjaWZpZXMgdGhlIGRldmljZSB0byB1c2UgZm9yIHRoZSBNdXNpY2FsCisjIEluc3RydW1lbnQgRGlnaXRhbCBJbnRlcmZhY2UuIElmIG5vdCBzcGVjaWZpZWQsIGEgbWV0aG9kLSBhbmQKKyMgc3lzdGVtLWRlcGVuZGVudCBkZWZhdWx0IHdpbGwgYmUgdXNlZC4KKyMgKGNhbiBiZSBvdmVycmlkZGVuIHdpdGggdGhlIC0tbWlkaS1kZXZpY2U9IFstbV0gb3B0aW9uKQorI21pZGktZGV2aWNlCS9wYXRoL3RvL2RldmljZQkjIG1vc3QgbWV0aG9kcworI21pZGktZGV2aWNlCWNsaWVudDpwb3J0CSMgQUxTQSAobWF5IHVzZSBudW1iZXIgb3IgY2FzZS1zZW5zaXRpdmUgc3Vic3RyaW5nIG9mIG5hbWUpCisKKworIyMjIyMjIyMjIyMjIyMjIyMjIworIyBMb2dnaW5nIE9wdGlvbnMgIworIyMjIyMjIyMjIyMjIyMjIyMjIworCisjIFRoZSBxdWlldCBkaXJlY3RpdmUgcmVkdWNlcyB0aGUgbG9nZ2luZyBsZXZlbCB0byBzdGFuZGFyZCBlcnJvciBieSBvbmUKKyMgbGV2ZWwgYW5kIGFsc28gc3VwcHJlc3NlcyB0aGUgYnJhaWxsZSBhbmQgc3BlZWNoIGRyaXZlciBiYW5uZXJzLgorIyAoY2FuIGJlIG92ZXJyaWRkZW4gd2l0aCB0aGUgLS1xdWlldCBbLXFdIG9wdGlvbikKKyNxdWlldCBvZmYJIyBbb2ZmLG9uXQorCisjIFRoZSBsb2ctZmlsZSBkaXJlY3RpdmUgc3BlY2lmaWVzIHRoZSBmaWxlIHRvIHdoaWNoIGRpYWdub3N0aWNzIGFyZSB3cml0dGVuLgorIyBSZWxhdGl2ZSBwYXRocyBhcmUgYW5jaG9yZWQgYXQgdGhlIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkuIElmIG5vdAorIyBzcGVjaWZpZWQsIGRpYWdub3N0aWNzIGFyZSB3cml0dGVuIHRvIHRoZSBzeXN0ZW0gbG9nLgorIyAoY2FuIGJlIG92ZXJyaWRkZW4gd2l0aCB0aGUgLS1sb2ctZmlsZT0gWy1MXSBvcHRpb24pCisjbG9nLWZpbGUJL3RtcC9icmx0dHkubG9nCisKKyMgVGhlIGxvZy1sZXZlbCBkaXJlY3RpdmUgc3BlY2lmaWVzIHdoaWNoIGV2ZW50IGNhdGVnb3JpZXMgYXJlIHRvIGJlCisjIGxvZ2dlZCBhcyB3ZWxsIGFzIHRoZSBzZXZlcml0eSB0aHJlc2hvbGQgZm9yIHVuY2F0ZWdvcml6ZWQgZXZlbnRzLgorIyBUaGUgY2F0ZWdvcnkgbmFtZXMgYW5kIHNldmVyaXR5IHRocmVzaG9sZCBhcmUgc2VwYXJhdGVkIGJ5IGNvbW1hcy4KKyMgKGNhbiBiZSBvdmVycmlkZGVuIHdpdGggdGhlIC0tbG9nLWxldmVsPSBbLWxdIG9wdGlvbikKKyNsb2ctbGV2ZWwJbm90aWNlCisKKyMgT25seSBvbmUgc2V2ZXJpdHkgdGhyZXNob2xkIG1heSBiZSBzcGVjaWZpZWQuIExlc3Mgc2V2ZXJlIHVuY2F0ZWdvcml6ZWQKKyMgZXZlbnRzIHdpbGwgbm90IGJlIGxvZ2dlZC4gSWYgbm90IHNwZWNpZmllZCwgIm5vdGljZSIgd2lsbCBiZSBhc3N1bWVkLgorIyBUaGUgc2V2ZXJpdHkgdGhyZXNob2xkcyBhcmU6CisjbG9nLWxldmVsCWVtZXJnZW5jeQorI2xvZy1sZXZlbAlhbGVydAorI2xvZy1sZXZlbAljcml0aWNhbAorI2xvZy1sZXZlbAllcnJvcgorI2xvZy1sZXZlbAl3YXJuaW5nCisjbG9nLWxldmVsCW5vdGljZQorI2xvZy1sZXZlbAlpbmZvcm1hdGlvbgorI2xvZy1sZXZlbAlkZWJ1ZworCisjIEFueSBudW1iZXIgb2YgZXZlbnQgY2F0ZWdvcmllcyBtYXkgYmUgZW5hYmxlZC4gUHJlZml4aW5nIGEgY2F0ZWdvcnkgbmFtZQorIyB3aXRoIGEgbWludXMgc2lnbiBbLV0gZGlzYWJsZXMgaXQgKHBhcnRpY3VsYXJseSB1c2VmdWwgaWYgImFsbCIgaXMgdXNlZCkuCisjIFRoZSBjYXRlZ29yaWVzIGFyZToKKyNsb2ctbGV2ZWwJYWxsCSMgZW5hYmxlIGFsbCBvZiB0aGUgY2F0ZWdvcmllcworI2xvZy1sZXZlbAlpbnBrdHMJIyBpbnB1dCBwYWNrZXRzCisjbG9nLWxldmVsCW91dHBrdHMJIyBvdXRwdXQgcGFja2V0cworI2xvZy1sZXZlbAlicmxrZXlzCSMgYnJhaWxsZSBkZXZpY2Uga2V5IGV2ZW50cworI2xvZy1sZXZlbAlrYmRrZXlzCSMga2V5Ym9hcmQga2V5IGV2ZW50cworI2xvZy1sZXZlbAljc3J0cmsJIyBjdXJzb3IgdHJhY2tpbmcKKyNsb2ctbGV2ZWwJY3NycnRnCSMgY3Vyc29yIHJvdXRpbmcKKyNsb2ctbGV2ZWwJdXBkYXRlCSMgdXBkYXRlIGV2ZW50cworI2xvZy1sZXZlbAlzcGVlY2gJIyBzcGVlY2ggZXZlbnRzCisjbG9nLWxldmVsCWFzeW5jCSMgYXN5bmNocm9ub3VzIGV2ZW50IHNjaGVkdWxpbmcKKyNsb2ctbGV2ZWwJc2VydmVyCSMgQnJsQVBJIHNlcnZlciBldmVudHMKKyNsb2ctbGV2ZWwJZ2lvCSMgZ2VuZXJpYyBJL08KKyNsb2ctbGV2ZWwJc2VyaWFsCSMgc2VyaWFsIEkvTworI2xvZy1sZXZlbAl1c2IJIyBVU0IgSS9PCisjbG9nLWxldmVsCWJ0CSMgQmx1ZXRvb3RoIEkvTworI2xvZy1sZXZlbAloaWQJIyBIdW1hbiBJbnRlcmZhY2UgSS9PCisjbG9nLWxldmVsCWJybGRydgkjIGJyYWlsbGUgZHJpdmVyIGV2ZW50cworI2xvZy1sZXZlbAlzcGtkcnYJIyBzcGVlY2ggZHJpdmVyIGV2ZW50cworI2xvZy1sZXZlbAlzY3JkcnYJIyBzY3JlZW4gZHJpdmVyIGV2ZW50cworCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIFByZWZlcmVuY2UgU2V0dGluZ3MgIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIyBUaGUgcHJlZmVyZW5jZXMtZmlsZSBkaXJlY3RpdmUgc3BlY2lmaWVzIHRoZSBmaWxlIGluIHdoaWNoIHRvIHNhdmUgdGhlIHVzZXIncworIyBwcmVmZXJlbmNlcy4gUmVsYXRpdmUgcGF0aHMgYXJlIHVzdWFsbHkgYW5jaG9yZWQgYXQgIkBVUERBVEFCTEVfRElSRUNUT1JZQCIKKyMgKGNhbiBiZSBjaGFuZ2VkIHZpYSB0aGUgdXBkYXRhYmxlLWRpcmVjdG9yeSBkaXJlY3RpdmUpLgorIyBJZiBub3Qgc3BlY2lmaWVkLCAiQFBSRUZFUkVOQ0VTX0ZJTEVAIiB3aWxsIGJlIHVzZWQuCisjIChjYW4gYmUgb3ZlcnJpZGRlbiB3aXRoIHRoZSAtLXByZWZlcmVuY2VzLWZpbGU9IFstRl0gb3B0aW9uKQorI3ByZWZlcmVuY2VzLWZpbGUJQFBSRUZFUkVOQ0VTX0ZJTEVACisKKyMgVGhlIG92ZXJyaWRlLXByZWZlcmVuY2VzIGRpcmVjdGl2ZSBjYW4gYmUgdXNlZCB0byBleHBsaWNpdGx5IHNwZWNpZnkgdGhlCisjIGluaXRpYWwgc2V0dGluZyBvZiBhbnkgcHJlZmVyZW5jZS4gTW9yZSB0aGFuIG9uZSBwcmVmZXJlbmNlIG1heSBiZSBvdmVycmlkZGVuCisjIGJ5IHNlcGFyYXRpbmcgdGhlbSBieSBjb21tYXMgYW5kL29yIGJ5IHVzaW5nIHRoaXMgZGlyZWN0aXZlIG11bHRpcGxlIHRpbWVzLgorIyAoY2FuIGJlIHNwZWNpZmllZCBtb3JlIHRoYW4gb25jZSkKKyMgKGNhbiBiZSBvdmVycmlkZGVuIHdpdGggdGhlIC0tb3ZlcnJpZGUtcHJlZmVyZW5jZXM9IFstb10gb3B0aW9uKQorI292ZXJyaWRlLXByZWZlcmVuY2VzIHByZWZlcmVuY2U9c2V0dGluZywuLi4KKworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBNaXNjZWxsYW5lb3VzIFNldHRpbmdzICMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMgVGhlIHBpZC1maWxlIGRpcmVjdGl2ZSBzcGVjaWZpZXMgdGhlIGFic29sdXRlIHBhdGggdG8gYSBmaWxlIHRoYXQgd2lsbAorIyBjb250YWluIEJSTFRUWSdzIHByb2Nlc3MgaWRlbnRpZmllci4gSXQgaXMgcmVtb3ZlZCB3aGVuIEJSTFRUWSB0ZXJtaW5hdGVzLgorIyAoY2FuIGJlIG92ZXJyaWRkZW4gd2l0aCB0aGUgLS1waWQtZmlsZT0gWy1QXSBvcHRpb24pCisjcGlkLWZpbGUgQFdSSVRBQkxFX0RJUkVDVE9SWUAvYnJsdHR5LnBpZAorCisjIFRoZSBsb2NhbGUtZGlyZWN0b3J5IGRpcmVjdGl2ZSBzcGVjaWZpZXMgdGhlIGFic29sdXRlIHBhdGggdG8gdGhlIGRpcmVjdG9yeQorIyB3aGljaCBjb250YWlucyB0aGUgY29tcGlsZWQgbWVzc2FnZSB0cmFuc2xhdGlvbnMgZm9yIG90aGVyIGxhbmd1YWdlcy4gSWYgbm90CisjIHNwZWNpZmllZCwgIkBMT0NBTEVfRElSRUNUT1JZQCIgd2lsbCBiZSB1c2VkLgorIyAoY2FuIGJlIG92ZXJyaWRkZW4gd2l0aCB0aGUgLS1sb2NhbGUtZGlyZWN0b3J5PSBvcHRpb24pCisjbG9jYWxlLWRpcmVjdG9yeSBATE9DQUxFX0RJUkVDVE9SWUAKKworIyBUaGUgdXBkYXRhYmxlLWRpcmVjdG9yeSBkaXJlY3RpdmUgc3BlY2lmaWVzIHRoZSBhYnNvbHV0ZSBwYXRoIHRvIGEgZGlyZWN0b3J5CisjIHdoaWNoIGNvbnRhaW5zIGZpbGVzIHRoYXQgY2FuIGJlIHVwZGF0ZWQgKHByZWZlcmVuY2VzLCBzYXZlZCBjbGlwYm9hcmQsIGV0YykuCisjIElmIG5vdCBzcGVjaWZpZWQsICJAVVBEQVRBQkxFX0RJUkVDVE9SWUAiIHdpbGwgYmUgdXNlZC4KKyMgKGNhbiBiZSBvdmVycmlkZGVuIHdpdGggdGhlIC0tdXBkYXRhYmxlLWRpcmVjdG9yeT0gWy1VXSBvcHRpb24pCisjdXBkYXRhYmxlLWRpcmVjdG9yeSBAVVBEQVRBQkxFX0RJUkVDVE9SWUAKKworIyBUaGUgd3JpdGFibGUtZGlyZWN0b3J5IGRpcmVjdGl2ZSBzcGVjaWZpZXMgdGhlIGFic29sdXRlIHBhdGggdG8gYSBkaXJlY3RvcnkKKyMgd2hpY2ggY2FuIGJlIHdyaXR0ZW4gdG8gKGNyZWF0aW9uIG9mIG1pc3NpbmcgYnV0IG5lZWRlZCByZXNvdXJjZXMsIGV0YykuIElmCisjIG5vdCBzcGVjaWZpZWQsICJAV1JJVEFCTEVfRElSRUNUT1JZQCIgd2lsbCBiZSB1c2VkLgorIyAoY2FuIGJlIG92ZXJyaWRkZW4gd2l0aCB0aGUgLS13cml0YWJsZS1kaXJlY3Rvcnk9IFstV10gb3B0aW9uKQorI3dyaXRhYmxlLWRpcmVjdG9yeSBAV1JJVEFCTEVfRElSRUNUT1JZQAorCisjIFRoZSBkcml2ZXJzLWRpcmVjdG9yeSBkaXJlY3RpdmUgc3BlY2lmaWVzIHRoZSBhYnNvbHV0ZSBwYXRoIHRvIHRoZQorIyBkaXJlY3Rvcnkgd2hpY2ggY29udGFpbnMgdGhlIGR5bmFtaWNhbGx5IGxvYWRhYmxlIGRyaXZlcnMuIElmIG5vdAorIyBzcGVjaWZpZWQsIEBEUklWRVJTX0RJUkVDVE9SWUAgd2lsbCBiZSB1c2VkLgorIyAoY2FuIGJlIG92ZXJyaWRkZW4gd2l0aCB0aGUgLS1kcml2ZXJzLWRpcmVjdG9yeT0gWy1EXSBvcHRpb24pCisjZHJpdmVycy1kaXJlY3RvcnkgQERSSVZFUlNfRElSRUNUT1JZQAorCisjIFRoZSB0YWJsZXMtZGlyZWN0b3J5IGRpcmVjdGl2ZSBzcGVjaWZpZXMgdGhlIGFic29sdXRlIHBhdGggdG8gdGhlIGRpcmVjdG9yeQorIyB3aGljaCBjb250YWlucyB0aGUgdGV4dCwgY29udHJhY3Rpb24sIGF0dHJpYnV0ZXMsIGtleWJvYXJkLCBhbmQgaW5wdXQgdGFibGVzLgorIyBJZiBub3Qgc3BlY2lmaWVkLCAiQFRBQkxFU19ESVJFQ1RPUllAIiB3aWxsIGJlIHVzZWQuCisjIChjYW4gYmUgb3ZlcnJpZGRlbiB3aXRoIHRoZSAtLXRhYmxlcy1kaXJlY3Rvcnk9IFstVF0gb3B0aW9uKQorI3RhYmxlcy1kaXJlY3RvcnkgQFRBQkxFU19ESVJFQ1RPUllACisKKyMgVGhlIHN0YXJ0LW1lc3NhZ2UgZGlyZWN0aXZlIHNwZWNpZmllcyB0aGUgdGV4dCB0byBiZSBzaG93biB3aGVuIHRoZSBicmFpbGxlCisjIGRyaXZlciBzdGFydHMgYW5kIHRvIGJlIHNwb2tlbiB3aGVuIHRoZSBzcGVlY2ggZHJpdmVyIHN0YXJ0cy4gSWYgbm90CisjIHNwZWNpZmllZCwgIkBQQUNLQUdFX05BTUVAIEBQQUNLQUdFX1ZFUlNJT05AIiB3aWxsIGJlIHVzZWQuCisjIChjYW4gYmUgb3ZlcnJpZGRlbiB3aXRoIHRoZSAtLXN0YXJ0LW1lc3NhZ2U9IG9wdGlvbikKKyNzdGFydC1tZXNzYWdlIEBQQUNLQUdFX05BTUVAXHNAUEFDS0FHRV9WRVJTSU9OQAorCisjIFRoZSBzdG9wLW1lc3NhZ2UgZGlyZWN0aXZlIHNwZWNpZmllcyB0aGUgdGV4dCB0byBiZSBzaG93biB3aGVuIHRoZSBicmFpbGxlCisjIGRyaXZlciBzdG9wcy4gSWYgbm90IHNwZWNpZmllZCwgIkBQQUNLQUdFX05BTUVAIHN0b3BwZWQiIHdpbGwgYmUgdXNlZC4KKyMgKGNhbiBiZSBvdmVycmlkZGVuIHdpdGggdGhlIC0tc3RvcC1tZXNzYWdlPSBvcHRpb24pCisjc3RvcC1tZXNzYWdlIEBQQUNLQUdFX05BTUVAXHNzdG9wcGVkCisKKyMgVGhlIHByb21wdC1wYXR0ZXJucyBkaXJlY3RpdmUgc3BlY2lmaWVzIGEgbGlzdCBvZiByZWd1bGFyIGV4cHJlc3Npb25zCisjIHRoYXQgYXJlIHRvIGJlIHVzZWQgYnkgdGhlIE5YUFJPTVBUIGFuZCBQUlBST01QVCBuYXZpZ2F0aW9uIGNvbW1hbmRzLgorIyBJZiBub3Qgc3BlY2lmaWVkLCB0aGVuIGFuIGV4YWN0IG1hdGNoIG9mIHRoZSBjb250ZW50IG9mIHRoZSBjdXJyZW50IGxpbmUsCisjIHVwIHRvIGFuZCBpbmNsdWRpbmcgdGhlIGZpcnN0IHNwYWNlLCB3aWxsIGJlIHVzZWQuCisjIChjYW4gYmUgc3BlY2lmaWVkIG1vcmUgdGhhbiBvbmNlKQorIyAoY2FuIGJlIG92ZXJyaWRkZW4gd2l0aCB0aGUgLS1wcm9tcHQtcGF0dGVybnM9IG9wdGlvbikKKyNwcm9tcHQtcGF0dGVybnMJcmVnZXhwLC4uLgorCisjIFRoZSBtZXNzYWdlLXRpbWUgZGlyZWN0aXZlIHNwZWNpZmllcyBob3cgbG9uZyBhIG1lc3NhZ2UgaXMgdG8gYmUgZGlzcGxheWVkCisjIGJlZm9yZSBpdCdzIGF1dG9tYXRpY2FsbHkgY2xlYXJlZC4gSWYgbm90IHNwZWNpZmllZCwgZm91ciBzZWNvbmRzIHdpbGwgYmUKKyMgdXNlZC4KKyMgKGNhbiBiZSBvdmVycmlkZGVuIHdpdGggdGhlIC0tbWVzc2FnZS10aW1lPSBbLU1dIG9wdGlvbikKKyNtZXNzYWdlLXRpbWUJNDAwCSMgaHVuZHJlZHRocyBvZiBhIHNlY29uZAorCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBQcml2aWxlZ2UgUGFyYW1ldGVycyAjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIyBUaGUgc3RheS1wcml2aWxlZ2VkIGRpcmVjdGl2ZSBkaXNhYmxlcyBzd2l0Y2hpbmcgdG8gYW4gdW5wcml2aWxlZ2RkIHVzZXIKKyMgYXMgd2VsbCBhcyB0aGUgcmVsaW5xdWlzaGluZyBvZiBhbnkgcHJpdmlsZWdlcyAoZ3JvdXAgbWVtYmVyc2hpcHMsCisjIGNhcGFiaWxpdGllcywgZXRjKS4KKyMgKGNhbiBiZSBvdmVycmlkZGVuIHdpdGggdGhlIC0tc3RheS1wcml2aWxlZ2VkPSBbLXpdIG9wdGlvbikKKyNzdGF5LXByaXZpbGVnZWQJb2ZmCSMgW29mZixvbl0KKworIyBUaGUgcHJpdmlsZWdlLXBhcmFtZXRlcnMgZGlyZWN0aXZlIHNwZWNpZmllcyB0aGUgZGVmYXVsdCBwcml2aWxlZ2UKKyMgZXN0YWJsaXNobWVudCBwYXJhbWV0ZXJzIHRvIHVzZSB3aGVuIEJSTFRUWSBpcyBzdGFydGVkIGJ5IGEgcHJpdmlsZWdlZAorIyB1c2VyIChlLmcuIGJ5IHJvb3Qgb24gYSBMaW51eC9Vbml4IHN5c3RlbSkuIFRoZSBjb25maWd1cmVkIGRlZmF1bHRzIGFyZToKKyMgIkBwcml2aWxlZ2VfcGFyYW1ldGVyc0AiLgorIyAoY2FuIGJlIHNwZWNpZmllZCBtb3JlIHRoYW4gb25jZSkKKyMgKGNhbiBiZSBvdmVycmlkZGVuIHdpdGggdGhlIC0tcHJpdmlsZWdlLXBhcmFtZXRlcnM9IFstWl0gb3B0aW9uKQorI3ByaXZpbGVnZS1wYXJhbWV0ZXJzIHBsYXRmb3JtOm5hbWU9dmFsdWUsLi4uCisKKyMgTGludXggUHJpdmlsZWdlIFBhcmFtZXRlcnMKKyNwcml2aWxlZ2UtcGFyYW1ldGVycyBseDpwYXRoPS91c3Ivc2Jpbjovc2JpbjovdXNyL2JpbjovYmluCisjcHJpdmlsZWdlLXBhcmFtZXRlcnMgbHg6c2NmbW9kZT1ubyAjIFtubyxsb2csZmFpbCxraWxsXQorI3ByaXZpbGVnZS1wYXJhbWV0ZXJzIGx4OnNoZWxsPS9iaW4vc2gKKyNwcml2aWxlZ2UtcGFyYW1ldGVycyBseDp1c2VyPWJybHR0eQorCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBBcHBsaWNhdGlvbiBQcm9ncmFtbWluZyBJbnRlcmZhY2UgUGFyYW1ldGVycyAjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIyBUaGUgbm8tYXBpIGRpcmVjdGl2ZSBkaXNhYmxlcyB0aGUgQXBwbGljYXRpb24gUHJvZ3JhbW1pbmcgSW50ZXJmYWNlIChBUEkpLgorIyAoY2FuIGJlIG92ZXJyaWRkZW4gd2l0aCB0aGUgLS1uby1hcGk9IFstTl0gb3B0aW9uKQorI25vLWFwaQlvZmYJIyBbb2ZmLG9uXQorCisjIFRoZSBhcGktcGFyYW1ldGVycyBkaXJlY3RpdmUgcGFzc2VzIHBhcmFtZXRlcnMgdG8gdGhlIEFwcGxpY2F0aW9uCisjIFByb2dyYW1taW5nIEludGVyZmFjZS4KKyMgKGNhbiBiZSBzcGVjaWZpZWQgbW9yZSB0aGFuIG9uY2UpCisjIChjYW4gYmUgb3ZlcnJpZGRlbiB3aXRoIHRoZSAtLWFwaS1wYXJhbWV0ZXJzPSBbLUFdIG9wdGlvbikKKyNhcGktcGFyYW1ldGVycyBuYW1lPXZhbHVlLC4uLgorCisjYXBpLXBhcmFtZXRlcnMgQXV0aD1rZXlmaWxlOkBDT05GSUdVUkFUSU9OX0RJUkVDVE9SWUAvQGFwaV9hdXRoa2V5ZmlsZUAJIyBSZXF1aXJlIGF1dGhlbnRpY2F0aW9uIGtleQorI2FwaS1wYXJhbWV0ZXJzIEF1dGg9dXNlcjpqb2UJCSMgQWxsb3cgc29tZSBsb2NhbCB1c2VyCisjYXBpLXBhcmFtZXRlcnMgQXV0aD1ncm91cDpicmwJCSMgQWxsb3cgc29tZSBsb2NhbCBncm91cAorI2FwaS1wYXJhbWV0ZXJzIEF1dGg9cG9sa2l0CQkjIGF1dGhlbnRpY2F0ZSB2aWEgUG9sa2l0CisjYXBpLXBhcmFtZXRlcnMgSG9zdD06MAkJCSMgQWNjZXB0IG9ubHkgbG9jYWwgVW5peCBjb25uZWN0aW9ucworI2FwaS1wYXJhbWV0ZXJzIEhvc3Q9MC4wLjAuMDowCQkjIEFjY2VwdCBhbnkgaW50ZXJuZXQgY29ubmVjdGlvbi4KKyNhcGktcGFyYW1ldGVycyBTdGFja1NpemU9NjU1MzYKKworCisjIyMjIyMjIyMjIyMjIyMjIyMjCisjIFNjcmVlbiBTZXR0aW5ncyAjCisjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMgVGhlIHNjcmVlbi1kcml2ZXIgZGlyZWN0aXZlIHNwZWNpZmllcyB0aGUgdHdvLWxldHRlciBkcml2ZXIKKyMgaWRlbnRpZmljYXRpb24gY29kZSBvZiB0aGUgZHJpdmVyIGZvciB0aGUgY29uc29sZSBzY3JlZW4uCisjIChjYW4gYmUgb3ZlcnJpZGRlbiB3aXRoIHRoZSAtLXNjcmVlbi1kcml2ZXI9IFsteF0gb3B0aW9uKQorI3NjcmVlbi1kcml2ZXIJYW4JIyBBbmRyb2lkCisjc2NyZWVuLWRyaXZlcglhcwkjIEF0U3BpCisjc2NyZWVuLWRyaXZlcglhMgkjIEF0U3BpMgorI3NjcmVlbi1kcml2ZXIJZW0JIyBUZXJtaW5hbCBFbXVsYXRvcgorI3NjcmVlbi1kcml2ZXIJZnYJIyBGaWxlIFZpZXdlcgorI3NjcmVlbi1kcml2ZXIJaGQJIyBIdXJkCisjc2NyZWVuLWRyaXZlcglseAkjIExpbnV4Cisjc2NyZWVuLWRyaXZlcglwYgkjIFBjQmlvcworI3NjcmVlbi1kcml2ZXIJc2MJIyBTY3JlZW4KKyNzY3JlZW4tZHJpdmVyCXduCSMgV2luZG93cworCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgU2NyZWVuIERyaXZlciBQYXJhbWV0ZXJzICMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIyBUaGUgc2NyZWVuLXBhcmFtZXRlcnMgZGlyZWN0aXZlIHBhc3NlcyBkcml2ZXItc3BlY2lmaWMgcGFyYW1ldGVycyB0aHJvdWdoCisjIHRvIHRoZSBzY3JlZW4gZHJpdmVyLgorIyAoY2FuIGJlIHNwZWNpZmllZCBtb3JlIHRoYW4gb25jZSkKKyMgKGNhbiBiZSBvdmVycmlkZGVuIHdpdGggdGhlIC0tc2NyZWVuLXBhcmFtZXRlcnM9IFstWF0gb3B0aW9uKQorI3NjcmVlbi1wYXJhbWV0ZXJzIGRyaXZlcjpuYW1lPXZhbHVlLC4uLgorCisjIEF0U3BpIFNjcmVlbiBEcml2ZXIgUGFyYW1ldGVycworI3NjcmVlbi1wYXJhbWV0ZXJzIGFzOlR5cGU9dGV4dCt0ZXJtaW5hbCAjIFt0ZXh0LHRlcm1pbmFsLGFsbF0rLi4uCisKKyMgQXRTcGkyIFNjcmVlbiBEcml2ZXIgUGFyYW1ldGVycworI3NjcmVlbi1wYXJhbWV0ZXJzIGEyOlJlbGVhc2U9eWVzICMgW3llcyxub10KKyNzY3JlZW4tcGFyYW1ldGVycyBhMjpUeXBlPWRlZmF1bHQgIyBbZGVmYXVsdCxhbGwse3Rlcm1pbmFsLHRleHR9Ky4uLl0KKworIyBGaWxlIFZpZXdlciBTY3JlZW4gRHJpdmVyIFBhcmFtZXRlcnMKKyNzY3JlZW4tcGFyYW1ldGVycyBmdjpGaWxlPXBhdGggIworCisjIExpbnV4IFNjcmVlbiBEcml2ZXIgUGFyYW1ldGVycworI3NjcmVlbi1wYXJhbWV0ZXJzIGx4OkNoYXJzZXQ9bmFtZSsuLi4gIyBbXQorI3NjcmVlbi1wYXJhbWV0ZXJzIGx4OkZhbGxiYWNrVGV4dD10ZXh0ICMgIiIKKyNzY3JlZW4tcGFyYW1ldGVycyBseDpIRkI9YXV0byAjIFthdXRvLHZnYSxmYiwwLTddCisjc2NyZWVuLXBhcmFtZXRlcnMgbHg6TG9nU0ZNPW5vICMgW25vLHllc10KKyNzY3JlZW4tcGFyYW1ldGVycyBseDpScGlTcGFjZXNCdWc9bm8gIyBbbm8seWVzXQorI3NjcmVlbi1wYXJhbWV0ZXJzIGx4OlVuaWNvZGU9eWVzICMgW3llcyxub10KKyNzY3JlZW4tcGFyYW1ldGVycyBseDpWVD0wICMgWzAtNjNdCisjc2NyZWVuLXBhcmFtZXRlcnMgbHg6V2lkZWNoYXJQYWRkaW5nPW5vICMgW25vLHllc10KKworIyBUZXJtaW5hbCBFbXVsYXRvciBTY3JlZW4gRHJpdmVyIFBhcmFtZXRlcnMKKyNzY3JlZW4tcGFyYW1ldGVycyBlbTpEaXJlY3Rvcnk9cGF0aCAjIFtdCisjc2NyZWVuLXBhcmFtZXRlcnMgZW06RW11bGF0b3I9Y29tbWFuZCAjIFticmx0dHktcHR5XQorI3NjcmVlbi1wYXJhbWV0ZXJzIGVtOkdyb3VwPW5hbWUvbnVtYmVyICMgW10KKyNzY3JlZW4tcGFyYW1ldGVycyBlbTpIb21lPXBhdGggIyBbXQorI3NjcmVlbi1wYXJhbWV0ZXJzIGVtOlBhdGg9cGF0aCAjIFtdCisjc2NyZWVuLXBhcmFtZXRlcnMgZW06U2hlbGw9Y29tbWFuZCAjIFskU0hFTExdCisjc2NyZWVuLXBhcmFtZXRlcnMgZW06VXNlcj1uYW1lL251bWJlciAjIFtdCisKKyMgV2luZG93cyBTY3JlZW4gRHJpdmVyIFBhcmFtZXRlcnMKKyNzY3JlZW4tcGFyYW1ldGVycyB3bjpSb290PW5vICMgW25vLHllc10KKyNzY3JlZW4tcGFyYW1ldGVycyB3bjpGb2xsb3dGb2N1cz15ZXMgIyBbeWVzLG5vXQorCisKZGlmZiAtLWdpdCBhL0RvY3VtZW50cy9jb21tb24tb3B0aW9ucy5yc3QgYi9Eb2N1bWVudHMvY29tbW9uLW9wdGlvbnMucnN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUzMzdhZTIKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudHMvY29tbW9uLW9wdGlvbnMucnN0CkBAIC0wLDAgKzEsMTEgQEAKK2BgLXZgYCAodmVyYm9zZSkKKyAgIEluY3JlYXNlIG91dHB1dCB2ZXJib3NpdHkuIFRoaXMgb3B0aW9uIGNvbXBsZW1lbnRzIHRoZSBgYC1xYGAgb3B0aW9uLiBJdCBtYXkKKyAgIGJlIHNwZWNpZmllZCBtdWx0aXBsZSB0aW1lcy4KKworYGAtcWBgIChxdWlldCkKKyAgIERlY3JlYXNlIG91dHB1dCB2ZXJib3NpdHkuIFRoaXMgb3B0aW9uIGNvbXBsZW1lbnRzIHRoZSBgYC12YGAgb3B0aW9uLiBJdCBtYXkKKyAgIGJlIHNwZWNpZmllZCBtdWx0aXBsZSB0aW1lcy4KKworYGAtaGBgIChoZWxwKQorICAgV3JpdGUgYSBicmllZiBjb21tYW5kIGxpbmUgdXNhZ2Ugc3VtbWFyeSBvbiBzdGFuZGFyZCBvdXRwdXQsIGFuZCB0aGVuIGV4aXQuCisKZGlmZiAtLWdpdCBhL0RvY3VtZW50cy9jb25kaXRpb24tZGlyZWN0aXZlcy5yc3QgYi9Eb2N1bWVudHMvY29uZGl0aW9uLWRpcmVjdGl2ZXMucnN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg0MjNiYWIKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudHMvY29uZGl0aW9uLWRpcmVjdGl2ZXMucnN0CkBAIC0wLDAgKzEsMzggQEAKKy4uIHxkaXJlY3RpdmUgb3BlcmFuZHwgcmVwbGFjZTo6CisgICBUaGUgZGlyZWN0aXZlIHRoYXQgaXMgdG8gYmUgY29uZGl0aW9uYWxseSBwcm9jZXNzZWQuCisgICBJdCBtYXkgY29udGFpbiBzcGFjZXMuCisgICBUaGlzIG9wZXJhbmQgaXMgb3B0aW9uYWwuCisgICBJZiBpdCBpc24ndCBzdXBwbGllZCB0aGVuIHRoaXMgZGlyZWN0aXZlIGFwcGxpZXMgdG8gYWxsIHN1YnNlcXVlbnQgbGluZXMKKyAgIHVudGlsIGBUaGUgRW5kSWYgRGlyZWN0aXZlYF8gb3IgYFRoZSBFbHNlIERpcmVjdGl2ZWBfCisgICB0aGF0IGlzIGF0IHRoZSBzYW1lIGNvbmRpdGlvbmFsIG5lc3RpbmcgbGV2ZWwuCisKK1RoZSBFbmRJZiBEaXJlY3RpdmUKKy0tLS0tLS0tLS0tLS0tLS0tLS0KKworLi4gcGFyc2VkLWxpdGVyYWw6OiBlbmRJZgorCitVc2UgdGhpcyBkaXJlY3RpdmUgdG8gdGVybWluYXRlIHRoZSBjdXJyZW50IGNvbmRpdGlvbmFsIG5lc3RpbmcgbGV2ZWwuCisKK0V4YW1wbGVzOjoKKworICAgaWZWYXIgeAorICAgICAgVGhlc2UgbGluZXMgd2lsbCBiZSBwcm9jZXNzZWQgaWYgYSB2YXJpYWJsZSBuYW1lZCB4IGV4aXN0cy4KKyAgIGVuZElmCisKK1RoZSBFbHNlIERpcmVjdGl2ZQorLS0tLS0tLS0tLS0tLS0tLS0tCisKKy4uIHBhcnNlZC1saXRlcmFsOjogZWxzZQorCitVc2UgdGhpcyBkaXJlY3RpdmUgdG8gbmVnYXRlIHRoZSB0ZXN0IGFzc29jaWF0ZWQgd2l0aCB0aGUgY3VycmVudCBjb25kaXRpb25hbAorbmVzdGluZyBsZXZlbC4KKworRXhhbXBsZXM6OgorCisgICBhc3NpZ24geCBzb21lXHN2YWx1ZQorICAgaWZWYXIgeAorICAgICAgVGhlc2UgbGluZXMgd2lsbCBiZSBwcm9jZXNzZWQuCisgICBlbHNlCisgICAgICBUaGVzZSBsaW5lcyB3b24ndCBiZSBwcm9jZXNzZWQuCisgICBlbmRJZgorCmRpZmYgLS1naXQgYS9Eb2N1bWVudHMvY29udHJhY3Rpb24tdGFibGUuY3N2IGIvRG9jdW1lbnRzL2NvbnRyYWN0aW9uLXRhYmxlLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MjdlODI5Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRzL2NvbnRyYWN0aW9uLXRhYmxlLmNzdgpAQCAtMCwwICsxLDM5IEBACisibmFtZSIsImRlc2NyaXB0aW9uIgorImF1dG8iLCJsb2NhbGUtYmFzZWQgYXV0b3NlbGVjdGlvbiIKKyJhZiIsIkFmcmlrYWFucyAoY29udHJhY3RlZCkiCisiYW0iLCJBbWhhcmljICh1bmNvbnRyYWN0ZWQpIgorImRlIiwiR2VybWFuIgorImRlLWcwIiwiR2VybWFuICh1bmNvbnRyYWN0ZWQpIgorImRlLWcxIiwiR2VybWFuIChiYXNpYyBjb250cmFjdGlvbnMpIgorImRlLWcyIiwiR2VybWFuIChjb250cmFjdGVkKSIKKyJkZS0xOTk4IiwiR2VybWFuIChjb250cmFjdGVkIC0gMTk5OCBzdGFuZGFyZCkiCisiZGUtMjAxNSIsIkdlcm1hbiAoY29udHJhY3RlZCAtIDIwMTUgc3RhbmRhcmQpIgorImVuIiwiRW5nbGlzaCIKKyJlbl9VUyIsIkVuZ2xpc2ggKFVuaXRlZCBTdGF0ZXMpIgorImVuLXVlYi1nMSIsIkVuZ2xpc2ggKFVuaWZpZWQsIHVuY29udHJhY3RlZCkiCisiZW4tdWViLWcyIiwiRW5nbGlzaCAoVW5pZmllZCwgY29udHJhY3RlZCkiCisiZW4tdXMtZzIiLCJFbmdsaXNoIChVbml0ZWQgU3RhdGVzLCBjb250cmFjdGVkKSIKKyJlcyIsIlNwYW5pc2ggKGNvbnRyYWN0ZWQpIgorImZyIiwiRnJlbmNoIgorImZyLWcxIiwiRnJlbmNoICh1bmNvbnRyYWN0ZWQpIgorImZyLWcyIiwiRnJlbmNoIChjb250cmFjdGVkKSIKKyJoYSIsIkhhdXNhIChjb250cmFjdGVkKSIKKyJpZCIsIkluZG9uZXNpYW4gKGNvbnRyYWN0ZWQpIgorImlwYSIsIkludGVybmF0aW9uYWwgUGhvbmV0aWMgQWxwaGFiZXQiCisiamEiLCJKYXBhbmVzZSAodW5jb250cmFjdGVkKSIKKyJrbyIsIktvcmVhbiIKKyJrby1nMCIsIktvcmVhbiAodW5jb250cmFjdGVkKSIKKyJrby1nMSIsIktvcmVhbiAocGFydGlhbGx5IGNvbnRyYWN0ZWQpIgorImtvLWcyIiwiS29yZWFuIChjb250cmFjdGVkKSIKKyJsdCIsIkxpdGh1YW5pYW4gKHVuY29udHJhY3RlZCkiCisibWciLCJNYWxhZ2FzeSAoY29udHJhY3RlZCkiCisibXVuIiwiTXVuZGEgKGNvbnRyYWN0ZWQpIgorIm5sIiwiRHV0Y2ggKGNvbnRyYWN0ZWQpIgorIm55IiwiQ2hpY2hld2EgKGNvbnRyYWN0ZWQpIgorInB0IiwiUG9ydHVndWVzZSAoY29udHJhY3RlZCkiCisicnUiLCJSdXNzaWFuIChjb250cmFjdGVkKSIKKyJzaSIsIlNpbmhhbGVzZSAodW5jb250cmFjdGVkKSIKKyJzdyIsIlN3YWhpbGkgKGNvbnRyYWN0ZWQpIgorInRoIiwiVGhhaSAoY29udHJhY3RlZCkiCisiemhfVFciLCJDaGluZXNlIChUYWl3YW4sIHVuY29udHJhY3RlZCkiCisienUiLCJadWx1IChjb250cmFjdGVkKSIKZGlmZiAtLWdpdCBhL0RvY3VtZW50cy9rZXlib2FyZC10YWJsZS5jc3YgYi9Eb2N1bWVudHMva2V5Ym9hcmQtdGFibGUuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY1ZmQ3MzkKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudHMva2V5Ym9hcmQtdGFibGUuY3N2CkBAIC0wLDAgKzEsNyBAQAorIm5hbWUiLCJkZXNjcmlwdGlvbiIKKyJvZmYiLCJubyBrZXlib2FyZCB0YWJsZSIKKyJicmFpbGxlIiwiYmluZGluZ3MgZm9yIGJyYWlsbGUga2V5Ym9hcmRzIgorImRlc2t0b3AiLCJiaW5kaW5ncyBmb3IgZnVsbCBrZXlib2FyZHMiCisia2V5cGFkIiwiYmluZGluZ3MgZm9yIGtleXBhZC1iYXNlZCBuYXZpZ2F0aW9uIgorImxhcHRvcCIsImJpbmRpbmdzIGZvciBrZXlib2FyZHMgd2l0aG91dCBhIGtleXBhZCIKKyJzdW5fdHlwZTYiLCJiaW5kaW5ncyBmb3IgU3VuIFR5cGUgNiBrZXlib2FyZHMiCmRpZmYgLS1naXQgYS9Eb2N1bWVudHMvbmVzdGluZy1kaXJlY3RpdmVzLnJzdCBiL0RvY3VtZW50cy9uZXN0aW5nLWRpcmVjdGl2ZXMucnN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRkNDcxYTkKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudHMvbmVzdGluZy1kaXJlY3RpdmVzLnJzdApAQCAtMCwwICsxLDEzIEBACitUaGUgSW5jbHVkZSBEaXJlY3RpdmUKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisuLiBwYXJzZWQtbGl0ZXJhbDo6IGluY2x1ZGUgKmZpbGUqICMgKmNvbW1lbnQqCisKK1VzZSB0aGlzIGRpcmVjdGl2ZSB0byBpbmNsdWRlIHRoZSBjb250ZW50IG9mIGFub3RoZXIgZmlsZS4gSXQgaXMgcmVjdXJzaXZlLAord2hpY2ggbWVhbnMgdGhhdCBhbiBpbmNsdWRlZCBmaWxlIGNhbiBpdHNlbGYgaW5jbHVkZSB5ZXQgYW5vdGhlciBmaWxlLgorQ2FyZSBtdXN0IGJlIHRha2VuIHRvIGVuc3VyZSB0aGF0IGFuICJpbmNsdWRlIGxvb3AiIGlzIG5vdCBjcmVhdGVkLgorCisqZmlsZSoKKyAgIFRoZSBmaWxlIHRvIGJlIGluY2x1ZGVkLiBJdCBtYXkgYmUgZWl0aGVyIGEgcmVsYXRpdmUgb3IgYW4gYWJzb2x1dGUgcGF0aC4gSWYKKyAgIHJlbGF0aXZlLCBpdCBpcyBhbmNob3JlZCBhdCB0aGUgZGlyZWN0b3J5IGNvbnRhaW5pbmcgdGhlIGluY2x1ZGluZyBmaWxlLgorCmRpZmYgLS1naXQgYS9Eb2N1bWVudHMvcHJvbG9ndWUucnN0IGIvRG9jdW1lbnRzL3Byb2xvZ3VlLnJzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYzc1N2ZhCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRzL3Byb2xvZ3VlLnJzdApAQCAtMCwwICsxLDMgQEAKKy4uIGluY2x1ZGU6OiByZWZlcmVuY2VzLnJzdAorLi4gaW5jbHVkZTo6IHN1YnN0aXR1dGlvbnMucnN0CisuLiBjb250ZW50czo6CmRpZmYgLS1naXQgYS9Eb2N1bWVudHMvcmVmZXJlbmNlcy5yc3QgYi9Eb2N1bWVudHMvcmVmZXJlbmNlcy5yc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTYxYzMxZQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50cy9yZWZlcmVuY2VzLnJzdApAQCAtMCwwICsxLDI2IEBACisuLiBfQlJMVFRZIG9uIEFuZHJvaWQ6IEFuZHJvaWQuaHRtbAorLi4gX0F0dHJpYnV0ZXMgVGFibGVzOiBBdHRyaWJ1dGVzVGFibGVzLmh0bWwKKy4uIF9CbHVldG9vdGggQ29ubmVjdGlvbnM6IEJsdWV0b290aC5odG1sCisuLiBfQnJhaWxsZSBEb3RzOiBCcmFpbGxlRG90cy5odG1sCisuLiBfVGhlIENvbW1hbmQgUmVmZXJlbmNlOiBDb21tYW5kUmVmZXJlbmNlLmh0bWwKKy4uIF9Db250cmFjdGlvbiBUYWJsZXM6IENvbnRyYWN0aW9uVGFibGVzLmh0bWwKKy4uIF9Mb2NhbCBDdXN0b21pemF0aW9uOiBDdXN0b21pemUuaHRtbAorLi4gX0RldmljZSBJZGVudGlmaWVyczogRGV2aWNlcy5odG1sCisuLiBfQlJMVFRZIG9uIERPUzogRE9TLmh0bWwKKy4uIF9JbnRyb2R1Y3Rpb24gdG8gQlJMVFRZOiBJbnRyb2R1Y3Rpb24uaHRtbAorLi4gX0tleSBUYWJsZXM6IEtleVRhYmxlcy5odG1sCisuLiBfQlJMVFRZIG9uIExpbnV4OiBMaW51eC5odG1sCisuLiBfQlJMVFRZIG9uIE9wZW5CU0Q6IE9wZW5CU0QuaHRtbAorLi4gX1BvbGxpbmc6IFBvbGxpbmcuaHRtbAorLi4gX1ByaXZhY3kgUG9saWN5OiBQcml2YWN5UG9saWN5Lmh0bWwKKy4uIF9Qcm9maWxlczogUHJvZmlsZXMuaHRtbAorLi4gX1VzaW5nIHRoZSBTdG93IEJ1aWxkIE1hbmFnZXI6IFN0b3cuaHRtbAorLi4gX1VzaW5nIFN5c3RlbWQgU2VydmljZSBNYW5hZ2VtZW50OiBTeXN0ZW1kLmh0bWwKKy4uIF9UZXh0IFRhYmxlczogVGV4dFRhYmxlcy5odG1sCisuLiBfVXNpbmcgVXBzdGFydCBTZXJ2aWNlIE1hbmFnZW1lbnQ6IFVwc3RhcnQuaHRtbAorLi4gX0JSTFRUWSBvbiBXaW5kb3dzOiBXaW5kb3dzLmh0bWwKKy4uIF9CUkxUVFkgd2l0aCBYMTE6IFgxMS5odG1sCisKKy4uIF9CUkxUVFkncyBXZWIgU2l0ZTogaHR0cHM6Ly9icmx0dHkuYXBwLworLi4gX1RoZSBBbmRyb2lkIFNESyBXZWIgUGFnZTogaHR0cHM6Ly9kZXZlbG9wZXIuYW5kcm9pZC5jb20vc2RrL2luZGV4Lmh0bWwKKy4uIF9UaGUgQW5kcm9pZCBOREsgV2ViIFBhZ2U6IGh0dHBzOi8vZGV2ZWxvcGVyLmFuZHJvaWQuY29tL3Rvb2xzL3Nkay9uZGsvaW5kZXguaHRtbApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRzL3NjcmVlbi1kcml2ZXIuY3N2IGIvRG9jdW1lbnRzL3NjcmVlbi1kcml2ZXIuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYyMThkYjEKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudHMvc2NyZWVuLWRyaXZlci5jc3YKQEAgLTAsMCArMSwxMSBAQAorImNvZGUiLCJuYW1lIiwidXNhZ2UiCisiYW4iLCJBbmRyb2lkIiwiQW5kcm9pZCIKKyJhcyIsIkF0U3BpIiwiWDExIGRlc2t0b3AgdmlhIEFULVNQSSAxIgorImEyIiwiQXRTcGkyIiwiWDExIGRlc2t0b3AgdmlhIEFULVNQSSAyIgorImVtIiwiVGVybWluYWwgRW11bGF0b3IiLCIiCisiZnYiLCJGaWxlIFZpZXdlciIsIiIKKyJoZCIsIkh1cmQiLCJUaGUgSHVyZCIKKyJseCIsIkxpbnV4IiwiTGludXgiCisicGIiLCJQY0Jpb3MiLCJNUy1ET1MiCisic2MiLCJTY3JlZW4iLCJwYXRjaGVkIHNjcmVlbiBwcm9ncmFtIgorInduIiwiV2luZG93cyIsIk1pY3Jvc29mdCBXaW5kb3dzIgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRzL3NwZWVjaC1kcml2ZXIuY3N2IGIvRG9jdW1lbnRzL3NwZWVjaC1kcml2ZXIuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE1M2Q1MjkKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudHMvc3BlZWNoLWRyaXZlci5jc3YKQEAgLTAsMCArMSwxNyBAQAorImNvZGUiLCJuYW1lIiwiYWxpYXNlcyIsInVzYWdlIgorImF1dG8iLCJhdXRvZGV0ZWN0IiwiIiwiIgorImFsIiwiQWx2YSIsIiIsImJyYWlsbGUgZGV2aWNlIgorImFuIiwiQW5kcm9pZCIsIiIsIk9TLXNwZWNpZmljIgorImJsIiwiQnJhaWxsZUxpdGUiLCIiLCJicmFpbGxlIGRldmljZSIKKyJjYiIsIkNvbWJpQnJhaWxsZSIsIiIsImJyYWlsbGUgZGV2aWNlIgorImVuIiwiZVNwZWFrLU5HIiwiIiwic29mdHdhcmUgZW5naW5lIgorImVzIiwiZVNwZWFrIiwiIiwic29mdHdhcmUgZW5naW5lIgorImZsIiwiRmVzdGl2YWxMaXRlIiwiIiwic29mdHdhcmUgZW5naW5lIgorImZ2IiwiRmVzdGl2YWwiLCIiLCJzb2Z0d2FyZSBlbmdpbmUiCisiZ3MiLCJHZW5lcmljU2F5IiwiIiwicGlwZXMgdG8gL3Vzci9sb2NhbC9iaW4vc2F5IgorIm1wIiwiTWlrcm9wdWhlIiwiIiwic29mdHdhcmUgZW5naW5lIgorInNkIiwiU3BlZWNoRGlzcGF0Y2hlciIsIiIsIm11bHRpLWVuZ2luZSBzZXJ2ZXIiCisic3ciLCJTd2lmdCIsIiIsInNvZnR3YXJlIGVuZ2luZSIKKyJ0aCIsIlRoZXRhIiwiIiwic29mdHdhcmUgZW5naW5lIgorInZ2IiwiVmlhVm9pY2UiLCJWb3hpbiIsInNvZnR3YXJlIGVuZ2luZSIKKyJ4cyIsIkV4dGVybmFsU3BlZWNoIiwiIiwic2VuZHMgc3BlZWNoIHRvIGV4dGVybmFsIHByb2dyYW0gYW5kIHJlY2VpdmVzIHNwb2tlbiBwb3NpdGlvbiBpbmRleGVzIgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRzL3N0cmluZy1vcGVyYW5kLnJzdCBiL0RvY3VtZW50cy9zdHJpbmctb3BlcmFuZC5yc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWQwNDFkNgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50cy9zdHJpbmctb3BlcmFuZC5yc3QKQEAgLTAsMCArMSwzMiBAQAorVGhlIFN0cmluZyBPcGVyYW5kCistLS0tLS0tLS0tLS0tLS0tLS0KKworQSAqc3RyaW5nKiBvcGVyYW5kIG1heSBiZSBzcGVjaWZpZWQgYXMgYSBub24td2hpdGVzcGFjZSBzZXF1ZW5jZSBvZjoKKworKiAgQW55IHNpbmdsZSBjaGFyYWN0ZXIgb3RoZXIgdGhhbiBhIGJhY2tzbGFzaCAoXFxcXCkgb3IgYSB3aGl0ZS1zcGFjZQorICAgY2hhcmFjdGVyLgorCisqICBBIGJhY2tzbGFzaC1wcmVmaXhlZCBzcGVjaWFsIGNoYXJhY3Rlci4gVGhlc2UgYXJlOgorCisgICA9PT09PT09PT09PT09PT0gID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgIFNlcXVlbmNlICAgICAgICAgTWVhbmluZworICAgLS0tLS0tLS0tLS0tLS0tICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICBgYFxiYGAgICAgICAgICAgIFRoZSBiYWNrc3BhY2UgY2hhcmFjdGVyLgorICAgYGBcZmBgICAgICAgICAgICBUaGUgZm9ybWZlZWQgY2hhcmFjdGVyLgorICAgYGBcbmBgICAgICAgICAgICBUaGUgbmV3bGluZSBjaGFyYWN0ZXIuCisgICBgYFxvIyMjYGAgICAgICAgIFRoZSB0aHJlZS1kaWdpdCBvY3RhbCByZXByZXNlbnRhdGlvbiBvZiBhIGNoYXJhY3Rlci4KKyAgIGBgXHJgYCAgICAgICAgICAgVGhlIGNhcnJpYWdlIHJldHVybiBjaGFyYWN0ZXIuCisgICBgYFxSYGAgICAgICAgICAgIFRoZSBVbmljb2RlIHJlcGxhY2VtZW50IGNoYXJhY3Rlci4KKyAgIGBgXHNgYCAgICAgICAgICAgVGhlIHNwYWNlIGNoYXJhY3Rlci4KKyAgIGBgXHRgYCAgICAgICAgICAgVGhlIGhvcml6b250YWwgdGFiIGNoYXJhY3Rlci4KKyAgIGBgXHUjIyMjYGAgICAgICAgVGhlIGZvdXItZGlnaXQgaGV4YWRlY2ltYWwgcmVwcmVzZW50YXRpb24gb2YgYSBjaGFyYWN0ZXIuCisgICBgYFxVIyMjIyMjIyNgYCAgIFRoZSBlaWdodC1kaWdpdCBoZXhhZGVjaW1hbCByZXByZXNlbnRhdGlvbiBvZiBhIGNoYXJhY3Rlci4KKyAgIGBgXHZgYCAgICAgICAgICAgVGhlIHZlcnRpY2FsIHRhYiBjaGFyYWN0ZXIuCisgICBgYFx4IyNgYCAgICAgICAgIFRoZSB0d28tZGlnaXQgaGV4YWRlY2ltYWwgcmVwcmVzZW50YXRpb24gb2YgYSBjaGFyYWN0ZXIuCisgICBgYFxYIyNgYCAgICAgICAgICh0aGUgY2FzZSBvZiB0aGUgWCBhbmQgb2YgdGhlIGRpZ2l0cyBpc24ndCBzaWduaWZpY2FudCkKKyAgIGBgXDxuYW1lPmBgICAgICAgVGhlIFVuaWNvZGUgbmFtZSBvZiBhIGNoYXJhY3RlciAodXNlIF8gZm9yIHNwYWNlKS4KKyAgIGBgXHt2YXJpYWJsZX1gYCAgVGhlIHZhbHVlIG9mIGEgdmFyaWFibGUuCisgICBgYFxcYGAgICAgICAgICAgIEEgbGl0ZXJhbCBiYWNrc2xhc2guCisgICBgYFwjYGAgICAgICAgICAgIEEgbGl0ZXJhbCBudW1iZXIgc2lnbi4KKyAgID09PT09PT09PT09PT09PSAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCmRpZmYgLS1naXQgYS9Eb2N1bWVudHMvc3Vic3RpdHV0aW9ucy5yc3QgYi9Eb2N1bWVudHMvc3Vic3RpdHV0aW9ucy5yc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTc2ZGZmMwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50cy9zdWJzdGl0dXRpb25zLnJzdApAQCAtMCwwICsxLDIyIEBACisuLiB8UkVBRE1FLkFuZHJvaWR8IHJlcGxhY2U6OiBgQlJMVFRZIG9uIEFuZHJvaWRgXworLi4gfFJFQURNRS5BdHRyaWJ1dGVzVGFibGVzfCByZXBsYWNlOjogYEF0dHJpYnV0ZXMgVGFibGVzYF8KKy4uIHxSRUFETUUuQmx1ZXRvb3RofCByZXBsYWNlOjogYEJsdWV0b290aCBDb25uZWN0aW9uc2BfCisuLiB8UkVBRE1FLkJyYWlsbGVEb3RzfCByZXBsYWNlOjogYEJyYWlsbGUgRG90c2BfCisuLiB8UkVBRE1FLkNvbW1hbmRSZWZlcmVuY2V8IHJlcGxhY2U6OiBgVGhlIENvbW1hbmQgUmVmZXJlbmNlYF8KKy4uIHxSRUFETUUuQ29udHJhY3Rpb25UYWJsZXN8IHJlcGxhY2U6OiBgQ29udHJhY3Rpb24gVGFibGVzYF8KKy4uIHxSRUFETUUuQ3VzdG9taXplfCByZXBsYWNlOjogYExvY2FsIEN1c3RvbWl6YXRpb25gXworLi4gfFJFQURNRS5EZXZpY2VzfCByZXBsYWNlOjogYERldmljZSBJZGVudGlmaWVyc2BfCisuLiB8UkVBRE1FLkRPU3wgcmVwbGFjZTo6IGBCUkxUVFkgb24gRE9TYF8KKy4uIHxSRUFETUUuSW50cm9kdWN0aW9ufCByZXBsYWNlOjogYEludHJvZHVjdGlvbiB0byBCUkxUVFlgXworLi4gfFJFQURNRS5LZXlUYWJsZXN8IHJlcGxhY2U6OiBgS2V5IFRhYmxlc2BfCisuLiB8UkVBRE1FLkxpbnV4fCByZXBsYWNlOjogYEJSTFRUWSBvbiBMaW51eGBfCisuLiB8UkVBRE1FLk9wZW5CU0R8IHJlcGxhY2U6OiBgQlJMVFRZIG9uIE9wZW5CU0RgXworLi4gfFJFQURNRS5Qb2xsaW5nfCByZXBsYWNlOjogYFBvbGxpbmdgXworLi4gfFJFQURNRS5Qcml2YWN5UG9saWN5fCByZXBsYWNlOjogYFByaXZhY3kgUG9saWN5YF8KKy4uIHxSRUFETUUuUHJvZmlsZXN8IHJlcGxhY2U6OiBgUHJvZmlsZXNgXworLi4gfFJFQURNRS5TdG93fCByZXBsYWNlOjogYFVzaW5nIHRoZSBTdG93IEJ1aWxkIE1hbmFnZXJgXworLi4gfFJFQURNRS5TeXN0ZW1kfCByZXBsYWNlOjogYFVzaW5nIFN5c3RlbWQgU2VydmljZSBNYW5hZ2VtZW50YF8KKy4uIHxSRUFETUUuVGV4dFRhYmxlc3wgcmVwbGFjZTo6IGBUZXh0IFRhYmxlc2BfCisuLiB8UkVBRE1FLlVwc3RhcnR8IHJlcGxhY2U6OiBgVXNpbmcgVXBzdGFydCBTZXJ2aWNlIE1hbmFnZW1lbnRgXworLi4gfFJFQURNRS5XaW5kb3dzfCByZXBsYWNlOjogYEJSTFRUWSBvbiBXaW5kb3dzYF8KKy4uIHxSRUFETUUuWDExfCByZXBsYWNlOjogYEJSTFRUWSB3aXRoIFgxMWBfCmRpZmYgLS1naXQgYS9Eb2N1bWVudHMvdGV4dC10YWJsZS5jc3YgYi9Eb2N1bWVudHMvdGV4dC10YWJsZS5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODQ5OGVjMgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50cy90ZXh0LXRhYmxlLmNzdgpAQCAtMCwwICsxLDkwIEBACisibmFtZSIsImRlc2NyaXB0aW9uIgorImF1dG8iLCJsb2NhbGUtYmFzZWQgYXV0b3NlbGVjdGlvbiIKKyJhciIsIkFyYWJpYyAoZ2VuZXJpYykiCisiYXMiLCJBc3NhbWVzZSIKKyJhd2EiLCJBd2FkaGkiCisiYmciLCJCdWxnYXJpYW4iCisiYmgiLCJCaWhhcmkiCisiYm4iLCJCZW5nYWxpIgorImJvIiwiVGliZXRhbiIKKyJicmEiLCJCcmFqIgorImJyZiIsIkJyYWlsbGUgUmVhZHkgRm9ybWF0IChmb3Igdmlld2luZyAuYnJmIGZpbGVzIHdpdGhpbiBhbiBlZGl0b3Igb3IgcGFnZXIpIgorImNzIiwiQ3plY2giCisiY3kiLCJXZWxzaCIKKyJkYSIsIkRhbmlzaCIKKyJkYS0xMjUyIiwiRGFuaXNoIChTdmVuZCBUaG91Z2FhcmQsIDIwMDLigJMxMeKAkzE4KSIKKyJkYS1sdCIsIkRhbmlzaCAoTG9nVGV4dCkiCisiZGUiLCJHZXJtYW4iCisiZHJhIiwiRHJhdmlkaWFuIgorImVsIiwiR3JlZWsiCisiZW4iLCJFbmdsaXNoIgorImVuX0NBIiwiRW5nbGlzaCAoQ2FuYWRhKSIKKyJlbl9HQiIsIkVuZ2xpc2ggKFVuaXRlZCBLaW5nZG9tKSIKKyJlbl9VUyIsIkVuZ2xpc2ggKFVuaXRlZCBTdGF0ZXMpIgorImVuLW5hYmNjIiwiRW5nbGlzaCAoTm9ydGggQW1lcmljYW4gQnJhaWxsZSBDb21wdXRlciBDb2RlKSIKKyJlbyIsIkVzcGVyYW50byIKKyJlcyIsIlNwYW5pc2giCisiZXQiLCJFc3RvbmlhbiIKKyJmaSIsIkZpbm5pc2giCisiZnIiLCJGcmVuY2giCisiZnJfQ0EiLCJGcmVuY2ggKENhbmFkYSkiCisiZnJfRlIiLCJGcmVuY2ggKEZyYW5jZSkiCisiZnItMjAwNyIsIkZyZW5jaCAodW5pZmllZCAyMDA3KSIKKyJmci1jYmlmcyIsIkZyZW5jaCAoQ29kZSBCcmFpbGxlIEluZm9ybWF0aXF1ZSBGcmFuw6dhaXMgU3RhbmRhcmQpIgorImZyLXZzIiwiRnJlbmNoIChWaXNpb0JyYWlsbGUpIgorImdhIiwiSXJpc2giCisiZ2QiLCJHYWVsaWMiCisiZ29uIiwiR29uZGkiCisiZ3UiLCJHdWphcmF0aSIKKyJoZSIsIkhlYnJldyIKKyJoaSIsIkhpbmRpIgorImhyIiwiQ3JvYXRpYW4iCisiaHUiLCJIdW5nYXJpYW4iCisiaHkiLCJBcm1lbmlhbiIKKyJpcyIsIkljZWxhbmRpYyIKKyJpdCIsIkl0YWxpYW4iCisia2hhIiwiS2hhc2kiCisia24iLCJLYW5uYWRhIgorImtvayIsIktvbmthbmkiCisia3J1IiwiS3VydWtoIgorImx0IiwiTGl0dWFuaWFuIgorImx2IiwiTGF0dmlhbiIKKyJtZyIsIk1hbGFnYXN5IgorIm1pIiwiTWFvcmkiCisibWwiLCJNYWxheWFsYW0iCisibW5pIiwiTWFuaXB1cmkiCisibXIiLCJNYXJhdGhpIgorIm10IiwiTWFsdGVzZSIKKyJtdW4iLCJNdW5kYSIKKyJtd3IiLCJNYXJ3YXJpIgorIm5lIiwiTmVwYWxpIgorIm5ldyIsIk5ld2FyaSIKKyJubCIsIkR1dGNoIgorIm5sX0JFIiwiRHV0Y2ggKEJlbGdpdW0pIgorIm5sX05MIiwiRHV0Y2ggKE5ldGhlcmxhbmRzKSIKKyJubyIsIk5vcndlZ2lhbiIKKyJuby1nZW5lcmljIiwiTm9yd2VnaWFuICh3aXRoIHN1cHBvcnQgZm9yIG90aGVyIGxhbmd1YWdlcykiCisibm8tb3VwIiwiTm9yd2VnaWFuIChPZmZlbnRsaWcgdXR2YWxnIGZvciBwdW5rdHNrcmlmdCkiCisibndjIiwiTmV3YXJpIChvbGQpIgorIm9yIiwiT3JpeWEiCisicGEiLCJQYW5qYWJpIgorInBpIiwiUGFsaSIKKyJwbCIsIlBvbGlzaCIKKyJwdCIsIlBvcnR1Z3Vlc2UiCisicm8iLCJSb21hbmlhbiIKKyJydSIsIlJ1c3NpYW4iCisic2UiLCJTYW1pIChOb3J0aGVybikiCisic2EiLCJTYW5za3JpdCIKKyJzYXQiLCJTYW50YWxpIgorInNkIiwiU2luZGhpIgorInNrIiwiU2xvdmFrIgorInNsIiwiU2xvdmVuaWFuIgorInN2IiwiU3dlZGlzaCIKKyJzdi0xOTg5IiwiU3dlZGlzaCAoMTk4OSBzdGFuZGFyZCkiCisic3YtMTk5NiIsIlN3ZWRpc2ggKDE5OTYgc3RhbmRhcmQpIgorInN3IiwiU3dhaGlsaSIKKyJ0YSIsIlRhbWlsIgorInRlIiwiVGVsdWd1IgorInRyIiwiVHVya2lzaCIKKyJ1ayIsIlVrcmFpbmlhbiIKKyJ2aSIsIlZpZXRuYW1lc2UiCmRpZmYgLS1naXQgYS9Eb2N1bWVudHMvdmFyaWFibGUtZGlyZWN0aXZlcy5yc3QgYi9Eb2N1bWVudHMvdmFyaWFibGUtZGlyZWN0aXZlcy5yc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTdmMzI2OQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50cy92YXJpYWJsZS1kaXJlY3RpdmVzLnJzdApAQCAtMCwwICsxLDEyNiBAQAorVGhlIEFzc2lnbiBEaXJlY3RpdmUKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy4uIHBhcnNlZC1saXRlcmFsOjogYXNzaWduICp2YXJpYWJsZSogKnZhbHVlKgorCitVc2UgdGhpcyBkaXJlY3RpdmUgdG8gY3JlYXRlIG9yIHVwZGF0ZSBhIHZhcmlhYmxlIGFzc29jaWF0ZWQgd2l0aAordGhlIGN1cnJlbnQgbmVzdGluZyBsZXZlbCAoc2VlIGBUaGUgQmVnaW5WYXJpYWJsZXMgRGlyZWN0aXZlYF8pCitvZiB0aGUgY3VycmVudCBpbmNsdWRlIGxldmVsIChzZWUgYFRoZSBJbmNsdWRlIERpcmVjdGl2ZWBfKS4KK1RoZSB2YXJpYWJsZSBpcyB2aXNpYmxlIHRvIHRoZSBjdXJyZW50IGFuZCB0byBsb3dlciBpbmNsdWRlIGxldmVscywKK2J1dCBub3QgdG8gaGlnaGVyIGluY2x1ZGUgbGV2ZWxzLgorCisqdmFyaWFibGUqCisgICBUaGUgbmFtZSBvZiB0aGUgdmFyaWFibGUuIElmIHRoZSB2YXJpYWJsZSBkb2Vzbid0IGFscmVhZHkgZXhpc3QgYXQgdGhlCisgICBjdXJyZW50IGluY2x1ZGUgbGV2ZWwgdGhlbiBpdCBpcyBjcmVhdGVkLgorCisqdmFsdWUqCisgICBUaGUgdmFsdWUgdGhhdCBpcyB0byBiZSBhc3NpZ25lZCB0byB0aGUgdmFyaWFibGUuIElmIGl0J3Mgbm90IHN1cHBsaWVkIHRoZW4KKyAgIGEgemVyby1sZW5ndGggKG51bGwpIHZhbHVlIGlzIGFzc2lnbmVkLgorCitFeGFtcGxlczo6CisKKyAgIGFzc2lnbiBudWxsVmFsdWUKKyAgIGFzc2lnbiBzaG9ydFZhbHVlIHdvcmQKKyAgIGFzc2lnbiBsb25nVmFsdWUgYVxzdmFsdWVcc3dpdGhcc3NwYWNlcworICAgYXNzaWduIEluZGlyZWN0VmFsdWUgXHt2YXJpYWJsZU5hbWV9CisKK1RoZSBBc3NpZ25EZWZhdWx0IERpcmVjdGl2ZQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy4uIHBhcnNlZC1saXRlcmFsOjogYXNzaWduRGVmYXVsdCAqdmFyaWFibGUqICp2YWx1ZSoKKworVXNlIHRoaXMgZGlyZWN0aXZlIHRvIGFzc2lnbiBhIGRlZmF1bHQgdmFsdWUgdG8gYSB2YXJpYWJsZSBhc3NvY2lhdGVkIHdpdGgKK3RoZSBjdXJyZW50IG5lc3RpbmcgbGV2ZWwgKHNlZSBgVGhlIEJlZ2luVmFyaWFibGVzIERpcmVjdGl2ZWBfKQorb2YgdGhlIGN1cnJlbnQgaW5jbHVkZSBsZXZlbCAoc2VlIGBUaGUgSW5jbHVkZSBEaXJlY3RpdmVgXykuCitJdCdzIGZ1bmN0aW9uYWxseSBlcXVpdmFsZW50IHRvOgorCisuLiBwYXJzZWQtbGl0ZXJhbDo6IGlmTm90VmFyICp2YXJpYWJsZSogYXNzaWduICp2YXJpYWJsZSogKnZhbHVlKgorCitTZWUgYFRoZSBBc3NpZ24gRGlyZWN0aXZlYF8gYW5kIGBUaGUgSWZOb3RWYXIgRGlyZWN0aXZlYF8gZm9yIG1vcmUgZGV0YWlscy4KKworKnZhcmlhYmxlKgorICAgVGhlIG5hbWUgb2YgdGhlIHZhcmlhYmxlLiBJZiB0aGUgdmFyaWFibGUgZG9lc24ndCBhbHJlYWR5IGV4aXN0IGF0IHRoZQorICAgY3VycmVudCBpbmNsdWRlIGxldmVsIHRoZW4gaXQgaXMgY3JlYXRlZC4gSWYgaXQgZG9lcyBhbHJlYWR5IGV4aXN0IHRoZW4gaXQKKyAgIGlzICoqbm90KiogbW9kaWZpZWQuCisKKyp2YWx1ZSoKKyAgIFRoZSB2YWx1ZSB0aGF0IGlzIHRvIGJlIGFzc2lnbmVkIHRvIHRoZSB2YXJpYWJsZSBpZiBpdCBkb2Vzbid0IGFscmVhZHkKKyAgIGV4aXN0LiBJZiBpdCdzIG5vdCBzdXBwbGllZCB0aGVuIGEgemVyby1sZW5ndGggKG51bGwpIHZhbHVlIGlzIGFzc2lnbmVkLgorCitFeGFtcGxlczo6CisKKyAgIGFzc2lnbkRlZmF1bHQgZm9ybWF0IHBsYWluXHN0ZXh0CisKK1RoZSBJZlZhciBEaXJlY3RpdmUKKy0tLS0tLS0tLS0tLS0tLS0tLS0KKworLi4gcGFyc2VkLWxpdGVyYWw6OiBpZlZhciAqdmFyaWFibGUqICpkaXJlY3RpdmUqCisKK1VzZSB0aGlzIGRpcmVjdGl2ZSB0byBvbmx5IHByb2Nlc3Mgb25lIG9yIG1vcmUgZGlyZWN0aXZlcyBpZiBhIHZhcmlhYmxlIGV4aXN0cy4KKworKnZhcmlhYmxlKgorICAgVGhlIG5hbWUgb2YgdGhlIHZhcmlhYmxlIHdob3NlIGV4aXN0ZW5jZSBpcyB0byBiZSB0ZXN0ZWQuCisKKypkaXJlY3RpdmUqCisgICB8ZGlyZWN0aXZlIG9wZXJhbmR8CisKK0V4YW1wbGVzOjoKKworICAgaWZWYXIgdmFyMSBpZlZhciB2YXIyIGFzc2lnbiBjb25jYXRlbmF0aW9uIFx7dmFyMX1ce3ZhcjJ9CisKK1RoZSBJZk5vdFZhciBEaXJlY3RpdmUKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworLi4gcGFyc2VkLWxpdGVyYWw6OiBpZk5vdFZhciAqdmFyaWFibGUqICpkaXJlY3RpdmUqCisKK1VzZSB0aGlzIGRpcmVjdGl2ZSB0byBvbmx5IHByb2Nlc3Mgb25lIG9yIG1vcmUgZGlyZWN0aXZlcyBpZiBhIHZhcmlhYmxlIGRvZXNuJ3QKK2V4aXN0LgorCisqdmFyaWFibGUqCisgICBUaGUgbmFtZSBvZiB0aGUgdmFyaWFibGUgd2hvc2UgZXhpc3RlbmNlIGlzIHRvIGJlIHRlc3RlZC4KKworKmRpcmVjdGl2ZSoKKyAgIHxkaXJlY3RpdmUgb3BlcmFuZHwKKworRXhhbXBsZXM6OgorCisgICBpZk5vdFZhciB2YXIxIGFzc2lnbiB2YXIxIGRlZmF1bHRcc3ZhbHVlCisKK1RoZSBCZWdpblZhcmlhYmxlcyBEaXJlY3RpdmUKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworLi4gcGFyc2VkLWxpdGVyYWw6OiBiZWdpblZhcmlhYmxlcworCitVc2UgdGhpcyBkaXJlY3RpdmUgdG8gb3BlbiBhIG5ldyB2YXJpYWJsZSBuZXN0aW5nIGxldmVsLgorYFRoZSBBc3NpZ24gRGlyZWN0aXZlYF8pIHdpbGwgZGVmaW5lIHZhcmlhYmxlcyBhdCB0aGlzIG5ldyBuZXN0aW5nIGxldmVsLAorYW5kIHdpbGwgaGlkZSB2YXJpYWJsZXMgd2l0aCB0aGUgc2FtZSBuYW1lcyBpbiBhbnkgcHJldmlvdXMgbmVzdGluZyBsZXZlbC4KK1RoZXNlIHZhcmlhYmxlcyB3aWxsIHJlbWFpbiBkZWZpbmVkIHVudGlsIGBUaGUgRW5kVmFyaWFibGVzIERpcmVjdGl2ZWBfCit0aGF0IGlzIGF0IHRoZSBzYW1lIHZhcmlhYmxlIG5lc3RpbmcgbGV2ZWwuCisKK0V4YW1wbGVzOjoKKworICAgYXNzaWduIHggMQorICAgIyBce3h9IGV2YWx1YXRlcyB0byAxCisgICBiZWdpblZhcmlhYmxlcworICAgIyBce3h9IHN0aWxsIGV2YWx1YXRlcyB0byAxCisgICBhc3NpZ24geCAyCisgICAjIFx7eH0gbm93IGV2YWx1YXRlcyB0byAyCisgICBlbmRWYXJpYWJsZXMKKyAgICMgXHt4fSBldmFsdWF0ZXMgdG8gMSBhZ2FpbgorCitUaGUgRW5kVmFyaWFibGVzIERpcmVjdGl2ZQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworLi4gcGFyc2VkLWxpdGVyYWw6OiBlbmRWYXJpYWJsZXMKKworVXNlIHRoaXMgZGlyZWN0aXZlIHRvIGNsb3NlIHRoZSBjdXJyZW50IHZhcmlhYmxlIG5lc3RpbmcgbGV2ZWwuCitTZWUgYFRoZSBCZWdpblZhcmlhYmxlcyBEaXJlY3RpdmVgXyBmb3IgZGV0YWlscy4KKworVGhlIExpc3RWYXJpYWJsZXMgRGlyZWN0aXZlCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworLi4gcGFyc2VkLWxpdGVyYWw6OiBsaXN0VmFyaWFibGVzCisKK1VzZSB0aGlzIGRpcmVjdGl2ZSB0byBsaXN0IGFsbCBvZiB0aGUgY3VycmVudGx5IGRlZmlpbmVkIHZhcmlhYmxlcy4KK0l0IGNhbiBiZSBoZWxwZnVsIHdoZW4gZGVidWdnaW5nLgorCmRpZmYgLS1naXQgYS9Eb2N1bWVudHMveGJybGFwaS4xLmluIGIvRG9jdW1lbnRzL3hicmxhcGkuMS5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYTA4ZTgwCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRzL3hicmxhcGkuMS5pbgpAQCAtMCwwICsxLDYyIEBACisuVEggIlhCUkxBUEkiICIxIiAiSnVseSAyMDIzIiAiQGFwaV9uYW1lQCBAYXBpX3JlbGVhc2VAIiAiQGFwaV9uYW1lQCBVc2VyJ3MgTWFudWFsIgorLlNIIE5BTUUKK3hicmxhcGkgXC0gWDExIEJybEFQSSBoZWxwZXIgZm9yIExpbnV4L1VuaXgKKy5TSCBTWU5PUFNJUworXGZCeGJybGFwaVxmUiBbXGZJb3B0aW9uXGZSIC4uLl0KKy5TSCBERVNDUklQVElPTgorLkIgeGJybGFwaQorY29ubmVjdHMgdG8gYQorLkIgQnJsQVBJCitzZXJ2ZXIgaW4gb3JkZXIgdG8gcHJvdmlkZSBpdCB3aXRoIHRoZSBJRCBvZiB0aGUKKy5CIFgxMQord2luZG93IHdoaWNoIGN1cnJlbnRseSBoYXMgZm9jdXMuCitJdCBhbHNvIHNpbXVsYXRlcworLkIgWAora2V5c3ltcyBmcm9tIGJyYWlsbGUga2V5IHByZXNzZXMgKGVsc2UgYnJsdHR5IHdvdWxkIHNpbXVsYXRlIHRoZW0gdXNpbmcgYSBxd2VydHkKK2tleWJvYXJkKS4gQnkgZGVmYXVsdCwgaXQgcHV0cyBpdHNlbGYgaW4gdGhlIGJhY2tncm91bmQsIHVubGVzcyBvcHRpb24KKy5CIC1uCitpcyBnaXZlbi4KKy5TSCBPUFRJT05TCitPcHRpb25zIGFyZSBwcm9jZXNzZWQgc2VxdWVudGlhbGx5IGZyb20gbGVmdCB0byByaWdodC4KK0lmIGFuIG9wdGlvbiBpcyBzcGVjaWZpZWQgbW9yZSB0aGFuIG9uY2UsCitvciBpbiBjYXNlIG9mIGEgY29uZmxpY3QsCit0aGUgcmlnaHRtb3N0IHNwZWNpZmljYXRpb24gdGFrZXMgcHJlY2VkZW5jZS4KKy5QUAorVGhlIGZvbGxvd2luZyBvcHRpb25zIGFyZSBzdXBwb3J0ZWQ6CisuVFAKK1xmQi1iXGZSIFtcZklob3N0XGZSXVs6XGZJcG9ydFxmUl0gKFxmQi0tYnJsYXBpPVxmUikKK1RoZQorLkIgQnJsQVBJCitzZXJ2ZXIgdG8gY29ubmVjdCB0by4KKy5UUAorXGZCLWFcZlIgXGZJc3RyaW5nXGZSIChcZkItLWF1dGg9XGZSKQorVGhlCisuQiBCcmxBUEkKK2F1dGhvcml6YXRpb24vYXV0aGVudGljYXRpb24gc3RyaW5nLgorLlRQCitcZkItZFxmUiBcZklkaXNwbGF5XGZSIChcZkItLWRpc3BsYXk9XGZSKQorVGhlCisuQiBYCitkaXNwbGF5IHRvIGNvbm5lY3QgdG8uCitJZiBub3Qgc3BlY2lmaWVkLCB0aGUgY29udGVudCBvZiB0aGUKKy5CIERJU1BMQVkKK2Vudmlyb25tZW50IHZhcmlhYmxlIGlzIHVzZWQuCisuVFAKK1xmQi1uXGZSIChcZkItLW5vLWRhZW1vblxmUikKK0tlZXAgeGJybGFwaSBpbiB0aGUgZm9yZWdyb3VuZC4KKy5UUAorXGZCLXFcZlIgKFxmQi0tcXVpZXRcZlIpCitEbyBub3Qgd3JpdGUgYW55IHRleHQgdG8gdGhlIGJyYWlsbGUgZGV2aWNlLgorLlRQCitcZkItaFxmUiAoXGZCLS1oZWxwXGZSKQorUHJpbnQgYSBjb21tYW5kIGxpbmUgdXNhZ2Ugc3VtbWFyeSBhbmQgdGhlbiBleGl0LgorLlRQCitcZkItSFxmUiAoXGZCLS1mdWxsLWhlbHBcZlIpCitQcmludCBhIHRob3JvdWdoIGNvbW1hbmQgbGluZSB1c2FnZSBzdW1tYXJ5IGFuZCB0aGVuIGV4aXQuCisuU0ggIlNFRSBBTFNPIgorRm9yIG1vcmUgZGV0YWlscyBvbiB0aGUgcHVycG9zZSBvZgorLkJSIHhicmxhcGkgLAorc2VlCisuQlIgQnJsQVBJICdzCitvbi1saW5lIG1hbnVhbCBhdAorLlJCICJbIiAiaHR0cDovL2JybHR0eS5hcHAvZG9jL01hbnVhbC1CcmxBUEkvRW5nbGlzaC9CcmxBUEktMy5odG1sIiAiXS4iCmRpZmYgLS1naXQgYS9Ecml2ZXJzL0JyYWlsbGUvQWxiYXRyb3NzL01ha2VmaWxlLmluIGIvRHJpdmVycy9CcmFpbGxlL0FsYmF0cm9zcy9NYWtlZmlsZS5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNmIxOTM5Ci0tLSAvZGV2L251bGwKKysrIGIvRHJpdmVycy9CcmFpbGxlL0FsYmF0cm9zcy9NYWtlZmlsZS5pbgpAQCAtMCwwICsxLDI4IEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisjICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorIworIyBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisjCisjIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisjCisjIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyMgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorIyBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyMKKyMgV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworIworIyBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworRFJJVkVSX0NPREUgPSBhdAorRFJJVkVSX05BTUUgPSBBbGJhdHJvc3MKK0RSSVZFUl9VU0FHRSA9IDQ2LzgwCitEUklWRVJfVkVSU0lPTiA9IAorRFJJVkVSX0RFVkVMT1BFUlMgPSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+CitpbmNsdWRlICQoU1JDX1RPUClicmFpbGxlLm1rCisKK2JyYWlsbGUuJE86CisJJChDQykgJChCUkxfQ0ZMQUdTKSAtYyAkKFNSQ19ESVIpL2JyYWlsbGUuYworCmRpZmYgLS1naXQgYS9Ecml2ZXJzL0JyYWlsbGUvQWxiYXRyb3NzL1JFQURNRSBiL0RyaXZlcnMvQnJhaWxsZS9BbGJhdHJvc3MvUkVBRE1FCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlhYjliMWEKLS0tIC9kZXYvbnVsbAorKysgYi9Ecml2ZXJzL0JyYWlsbGUvQWxiYXRyb3NzL1JFQURNRQpAQCAtMCwwICsxLDMwIEBACitUaGlzIGRpcmVjdG9yeSBjb250YWlucyB0aGUgQlJMVFRZIGRyaXZlciBmb3IgdGhlIEFsYmF0cm9zcworW2h0dHA6Ly93d3cudGl2b21hdGljLmZpL2h0bWwvYWxiYXRyb3NzLmh0bWxdIGJyYWlsbGUgZGlzcGxheSBmcm9tIFRpdm9tYXRpYworW2h0dHA6Ly93d3cudGl2b21hdGljLmZpL10uIEl0IGhhcyBiZWVuIGltcGxlbWVudGVkLCBhbmQgaXMgYmVpbmcgbWFpbnRhaW5lZCwKK2J5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4gYW5kIFNhbWkgSGFhaHRpbmVuIDxyZXNzdUByZXNzdWtrYS5uZXQ+LgorCisKK1RoZSBrZXlzIG9uIHRoZSBmcm9udCBvZiB0aGUgZGlzcGxheSBhcmUgbmFtZWQgYXMgZGVwaWN0ZWQgYmVsb3cgd2l0aGluIHRoZQorZG9jdW1lbnRhdGlvbiBmb3IgdGhpcyBkcml2ZXIuIFNlZSB0aGUgaGVscCBmaWxlIGZvciB3aGF0IHRoZXkgZG8uCisKKyAgICstLS0rICstLS0rICstLS0tLS0rICstLS0tLS0tLS0tLSsgICAgICArLS0tLS0tLS0tLS0rICstLS0tLS0rICstLS0rICstLS0rCisgICB8VG9wfCB8QmFrfCB8ICBVcCAgfCB8ICAgICAgICAgICB8ICAgICAgfCAgICAgICAgICAgfCB8ICBVcCAgfCB8QmFrfCB8VG9wfAorICAgKy0tLSsgKy0tLSsgKy0tLS0tLSsgfCAgICAgICAgICAgfCAgICAgIHwgICAgICAgICAgIHwgKy0tLS0tLSsgKy0tLSsgKy0tLSsKKyAgICAgICAgICAgICAgICAgICAgICAgIHwgICBMZWZ0ICAgIHwgICAgICB8ICAgUmlnaHQgICB8CisgICArLS0tKyArLS0tKyArLS0tLS0tKyB8ICAgICAgICAgICB8ICAgICAgfCAgICAgICAgICAgfCArLS0tLS0tKyArLS0tKyArLS0tKworICAgfEJvdHwgfENzcnwgfCBEb3duIHwgfCAgICAgICAgICAgfCAgICAgIHwgICAgICAgICAgIHwgfCBEb3duIHwgfENzcnwgfEJvdHwKKyAgICstLS0rICstLS0rICstLS0tLS0rICstLS0tLS0tLS0tLSsgICAgICArLS0tLS0tLS0tLS0rICstLS0tLS0rICstLS0rICstLS0rCisKKworVGhlIGtleXMgb24gdGhlIHRvcCBvZiB0aGUgZGlzcGxheSBhcmUgbmFtZWQgYXMgZGVwaWN0ZWQgYmVsb3cgd2l0aGluIHRoZQorZG9jdW1lbnRhdGlvbiBmb3IgdGhpcyBkcml2ZXIuIFNlZSB0aGUgaGVscCBmaWxlIGZvciB3aGF0IHRoZXkgZG8uCisKKyAgICstLS0rICAgICAgICstLS0tLS0tKyAgICAgICArLS0tKyAgICAgICAgKy0tLSsgICAgICAgKy0tLS0tLS0rICAgICAgICstLS0rCisgICB8SGxwfCArLS0tKyB8IFBhc3RlIHwgKy0tLSsgfFByZnwgICAgICAgIHxQclV8ICstLS0rIHwgRGlmVXAgfCArLS0tKyB8UGdVfAorICAgKy0tLSsgfG13cHwgKy0tLS0tLS0rIHxnd3B8ICstLS0rICAgICAgICArLS0tKyB8aXVwfCArLS0tLS0tLSsgfGlkbnwgKy0tLSsKKyAgICAgICAgIHxSRjF8ICAgICAgICAgICB8UkYyfCAgICAgICAgICAgICAgICAgICAgfFJGM3wgICAgICAgICAgIHxSRjR8CisgICArLS0tKyB8Y3RufCArLS0tLS0tLSsgfGN0YXwgKy0tLSsgICAgICAgICstLS0rIHxjdGx8ICstLS0tLS0tKyB8Y3RyfCArLS0tKworICAgfExybnwgKy0tLSsgfCBUcmFjayB8ICstLS0rIHxTdHR8ICAgICAgICB8UHJEfCArLS0tKyB8IERpZkRuIHwgKy0tLSsgfFBnRHwKKyAgICstLS0rICAgICAgICstLS0tLS0tKyAgICAgICArLS0tKyAgICAgICAgKy0tLSsgICAgICAgKy0tLS0tLS0rICAgICAgICstLS0rCisKKwpkaWZmIC0tZ2l0IGEvRHJpdmVycy9CcmFpbGxlL0FsYmF0cm9zcy9icmFpbGxlLmMgYi9Ecml2ZXJzL0JyYWlsbGUvQWxiYXRyb3NzL2JyYWlsbGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYWM3ZWU3Ci0tLSAvZGV2L251bGwKKysrIGIvRHJpdmVycy9CcmFpbGxlL0FsYmF0cm9zcy9icmFpbGxlLmMKQEAgLTAsMCArMSw2MjcgQEAKKy8qCisgKiBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorICogICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorICoKKyAqIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorICoKKyAqIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyAqLworCisvKiBBbGJhdHJvc3MvYnJhaWxsZS5jIC0gQnJhaWxsZSBkaXNwbGF5IGxpYnJhcnkKKyAqIFRpdm9tYXRpYydzIEFsYmF0cm9zcyBzZXJpZXMKKyAqIEF1dGhvcjogRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPgorICovCisKKyNpbmNsdWRlICJwcm9sb2d1ZS5oIgorCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPHRpbWUuaD4KKworI2luY2x1ZGUgImxvZy5oIgorI2luY2x1ZGUgInRpbWluZy5oIgorI2luY2x1ZGUgImFzeW5jX3dhaXQuaCIKKworI2RlZmluZSBCUkxfSEFWRV9TVEFUVVNfQ0VMTFMKKyNpbmNsdWRlICJicmxfZHJpdmVyLmgiCisjaW5jbHVkZSAiYnJsZGVmcy1hdC5oIgorCitCRUdJTl9LRVlfTkFNRV9UQUJMRShhbGwpCisgIC8qIGZyb250IGxlZnQga2V5cyAqLworICBLRVlfTkFNRV9FTlRSWShBVF9LRVlfSG9tZTEsICJIb21lMSIpLAorICBLRVlfTkFNRV9FTlRSWShBVF9LRVlfRW5kMSwgIkVuZDEiKSwKKyAgS0VZX05BTUVfRU5UUlkoQVRfS0VZX0V4dHJhQ3Vyc29yMSwgIkV4dHJhQ3Vyc29yMSIpLAorICBLRVlfTkFNRV9FTlRSWShBVF9LRVlfQ3Vyc29yMSwgIkN1cnNvcjEiKSwKKyAgS0VZX05BTUVfRU5UUlkoQVRfS0VZX1VwMSwgIlVwMSIpLAorICBLRVlfTkFNRV9FTlRSWShBVF9LRVlfRG93bjEsICJEb3duMSIpLAorICBLRVlfTkFNRV9FTlRSWShBVF9LRVlfTGVmdCwgIkxlZnQiKSwKKworICAvKiBmcm9udCByaWdodCBrZXlzICovCisgIEtFWV9OQU1FX0VOVFJZKEFUX0tFWV9Ib21lMiwgIkhvbWUyIiksCisgIEtFWV9OQU1FX0VOVFJZKEFUX0tFWV9FbmQyLCAiRW5kMiIpLAorICBLRVlfTkFNRV9FTlRSWShBVF9LRVlfRXh0cmFDdXJzb3IyLCAiRXh0cmFDdXJzb3IyIiksCisgIEtFWV9OQU1FX0VOVFJZKEFUX0tFWV9DdXJzb3IyLCAiQ3Vyc29yMiIpLAorICBLRVlfTkFNRV9FTlRSWShBVF9LRVlfVXAyLCAiVXAyIiksCisgIEtFWV9OQU1FX0VOVFJZKEFUX0tFWV9Eb3duMiwgIkRvd24yIiksCisgIEtFWV9OQU1FX0VOVFJZKEFUX0tFWV9SaWdodCwgIlJpZ2h0IiksCisKKyAgLyogZnJvbnQgbWlkZGxlIGtleXMgKi8KKyAgS0VZX05BTUVfRU5UUlkoQVRfS0VZX1VwMywgIlVwMyIpLAorICBLRVlfTkFNRV9FTlRSWShBVF9LRVlfRG93bjMsICJEb3duMyIpLAorCisgIC8qIHRvcCBsZWZ0IGtleXMgKi8KKyAgS0VZX05BTUVfRU5UUlkoQVRfS0VZX0YxLCAiRjEiKSwKKyAgS0VZX05BTUVfRU5UUlkoQVRfS0VZX0YyLCAiRjIiKSwKKyAgS0VZX05BTUVfRU5UUlkoQVRfS0VZX0YzLCAiRjMiKSwKKyAgS0VZX05BTUVfRU5UUlkoQVRfS0VZX0Y0LCAiRjQiKSwKKyAgS0VZX05BTUVfRU5UUlkoQVRfS0VZX0Y1LCAiRjUiKSwKKyAgS0VZX05BTUVfRU5UUlkoQVRfS0VZX0Y2LCAiRjYiKSwKKyAgS0VZX05BTUVfRU5UUlkoQVRfS0VZX0Y3LCAiRjciKSwKKyAgS0VZX05BTUVfRU5UUlkoQVRfS0VZX0Y4LCAiRjgiKSwKKworICAvKiB0b3AgcmlnaHQga2V5cyAqLworICBLRVlfTkFNRV9FTlRSWShBVF9LRVlfRjksICJGOSIpLAorICBLRVlfTkFNRV9FTlRSWShBVF9LRVlfRjEwLCAiRjEwIiksCisgIEtFWV9OQU1FX0VOVFJZKEFUX0tFWV9GMTEsICJGMTEiKSwKKyAgS0VZX05BTUVfRU5UUlkoQVRfS0VZX0YxMiwgIkYxMiIpLAorICBLRVlfTkFNRV9FTlRSWShBVF9LRVlfRjEzLCAiRjEzIiksCisgIEtFWV9OQU1FX0VOVFJZKEFUX0tFWV9GMTQsICJGMTQiKSwKKyAgS0VZX05BTUVfRU5UUlkoQVRfS0VZX0YxNSwgIkYxNSIpLAorICBLRVlfTkFNRV9FTlRSWShBVF9LRVlfRjE2LCAiRjE2IiksCisKKyAgLyogYXR0cmlidXRlIGtleXMgKi8KKyAgS0VZX05BTUVfRU5UUlkoQVRfS0VZX0F0dHJpYnV0ZTEsICJBdHRyaWJ1dGUxIiksCisgIEtFWV9OQU1FX0VOVFJZKEFUX0tFWV9BdHRyaWJ1dGUyLCAiQXR0cmlidXRlMiIpLAorICBLRVlfTkFNRV9FTlRSWShBVF9LRVlfQXR0cmlidXRlMywgIkF0dHJpYnV0ZTMiKSwKKyAgS0VZX05BTUVfRU5UUlkoQVRfS0VZX0F0dHJpYnV0ZTQsICJBdHRyaWJ1dGU0IiksCisKKyAgLyogd2hlZWxzICovCisgIEtFWV9OQU1FX0VOVFJZKEFUX0tFWV9MZWZ0V2hlZWxSaWdodCwgIkxlZnRXaGVlbFJpZ2h0IiksCisgIEtFWV9OQU1FX0VOVFJZKEFUX0tFWV9MZWZ0V2hlZWxMZWZ0LCAiTGVmdFdoZWVsTGVmdCIpLAorICBLRVlfTkFNRV9FTlRSWShBVF9LRVlfTGVmdFdoZWVsVXAsICJMZWZ0V2hlZWxVcCIpLAorICBLRVlfTkFNRV9FTlRSWShBVF9LRVlfTGVmdFdoZWVsRG93biwgIkxlZnRXaGVlbERvd24iKSwKKyAgS0VZX05BTUVfRU5UUlkoQVRfS0VZX1JpZ2h0V2hlZWxSaWdodCwgIlJpZ2h0V2hlZWxSaWdodCIpLAorICBLRVlfTkFNRV9FTlRSWShBVF9LRVlfUmlnaHRXaGVlbExlZnQsICJSaWdodFdoZWVsTGVmdCIpLAorICBLRVlfTkFNRV9FTlRSWShBVF9LRVlfUmlnaHRXaGVlbFVwLCAiUmlnaHRXaGVlbFVwIiksCisgIEtFWV9OQU1FX0VOVFJZKEFUX0tFWV9SaWdodFdoZWVsRG93biwgIlJpZ2h0V2hlZWxEb3duIiksCisKKyAgLyogcm91dGluZyBrZXlzICovCisgIEtFWV9HUk9VUF9FTlRSWShBVF9HUlBfUm91dGluZ0tleXMxLCAiUm91dGluZ0tleTEiKSwKKyAgS0VZX0dST1VQX0VOVFJZKEFUX0dSUF9Sb3V0aW5nS2V5czIsICJSb3V0aW5nS2V5MiIpLAorRU5EX0tFWV9OQU1FX1RBQkxFCisKK0JFR0lOX0tFWV9OQU1FX1RBQkxFUyhhbGwpCisgIEtFWV9OQU1FX1RBQkxFKGFsbCksCitFTkRfS0VZX05BTUVfVEFCTEVTCisKK0RFRklORV9LRVlfVEFCTEUoYWxsKQorCitCRUdJTl9LRVlfVEFCTEVfTElTVAorICAmS0VZX1RBQkxFX0RFRklOSVRJT04oYWxsKSwKK0VORF9LRVlfVEFCTEVfTElTVAorCit0eXBlZGVmIHN0cnVjdCB7CisgIGludCAoKm9wZW5Qb3J0KSAoY29uc3QgY2hhciAqZGV2aWNlKTsKKyAgaW50ICgqY29uZmlndXJlUG9ydCkgKHVuc2lnbmVkIGludCBiYXVkKTsKKyAgdm9pZCAoKmNsb3NlUG9ydCkgKHZvaWQpOworICBpbnQgKCphd2FpdElucHV0KSAoaW50IG1pbGxpc2Vjb25kcyk7CisgIGludCAoKnJlYWRCeXRlcykgKHVuc2lnbmVkIGNoYXIgKmJ1ZmZlciwgc2l6ZV90IHNpemUsIGludCB3YWl0KTsKKyAgaW50ICgqd3JpdGVCeXRlcykgKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZmZlciwgc2l6ZV90IHNpemUpOworfSBJbnB1dE91dHB1dE9wZXJhdGlvbnM7CisKK3N0YXRpYyBjb25zdCBJbnB1dE91dHB1dE9wZXJhdGlvbnMgKmlvOworc3RhdGljIHVuc2lnbmVkIGludCBjaGFyYWN0ZXJzUGVyU2Vjb25kOworCisjaW5jbHVkZSAiaW9fc2VyaWFsLmgiCisKK3N0YXRpYyBTZXJpYWxEZXZpY2UgKnNlcmlhbERldmljZSA9IE5VTEw7CisKK3N0YXRpYyBpbnQKK29wZW5TZXJpYWxQb3J0IChjb25zdCBjaGFyICpkZXZpY2UpIHsKKyAgaWYgKChzZXJpYWxEZXZpY2UgPSBzZXJpYWxPcGVuRGV2aWNlKGRldmljZSkpKSByZXR1cm4gMTsKKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK2NvbmZpZ3VyZVNlcmlhbFBvcnQgKHVuc2lnbmVkIGludCBiYXVkKSB7CisgIHJldHVybiBzZXJpYWxSZXN0YXJ0RGV2aWNlKHNlcmlhbERldmljZSwgYmF1ZCk7Cit9CisKK3N0YXRpYyB2b2lkCitjbG9zZVNlcmlhbFBvcnQgKHZvaWQpIHsKKyAgaWYgKHNlcmlhbERldmljZSkgeworICAgIHNlcmlhbENsb3NlRGV2aWNlKHNlcmlhbERldmljZSk7CisgICAgc2VyaWFsRGV2aWNlID0gTlVMTDsKKyAgfQorfQorCitzdGF0aWMgaW50Cithd2FpdFNlcmlhbElucHV0IChpbnQgbWlsbGlzZWNvbmRzKSB7CisgIHJldHVybiBzZXJpYWxBd2FpdElucHV0KHNlcmlhbERldmljZSwgbWlsbGlzZWNvbmRzKTsKK30KKworc3RhdGljIGludAorcmVhZFNlcmlhbEJ5dGVzICh1bnNpZ25lZCBjaGFyICpidWZmZXIsIHNpemVfdCBzaXplLCBpbnQgd2FpdCkgeworICBjb25zdCBpbnQgdGltZW91dCA9IDEwMDsKKyAgcmV0dXJuIHNlcmlhbFJlYWREYXRhKHNlcmlhbERldmljZSwgYnVmZmVyLCBzaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgKHdhaXQ/IHRpbWVvdXQ6IDApLCB0aW1lb3V0KTsKK30KKworc3RhdGljIGludAord3JpdGVTZXJpYWxCeXRlcyAoY29uc3QgdW5zaWduZWQgY2hhciAqYnVmZmVyLCBzaXplX3Qgc2l6ZSkgeworICByZXR1cm4gc2VyaWFsV3JpdGVEYXRhKHNlcmlhbERldmljZSwgYnVmZmVyLCBzaXplKTsKK30KKworc3RhdGljIGNvbnN0IElucHV0T3V0cHV0T3BlcmF0aW9ucyBzZXJpYWxPcGVyYXRpb25zID0geworICBvcGVuU2VyaWFsUG9ydCwgY29uZmlndXJlU2VyaWFsUG9ydCwgY2xvc2VTZXJpYWxQb3J0LAorICBhd2FpdFNlcmlhbElucHV0LCByZWFkU2VyaWFsQnl0ZXMsIHdyaXRlU2VyaWFsQnl0ZXMKK307CisKKyNpbmNsdWRlICJpb191c2IuaCIKKworc3RhdGljIFVzYkNoYW5uZWwgKnVzYkNoYW5uZWwgPSBOVUxMOworCitzdGF0aWMgaW50CitvcGVuVXNiUG9ydCAoY29uc3QgY2hhciAqZGV2aWNlKSB7CisgIEJFR0lOX1VTQl9TVFJJTkdfTElTVCh1c2JNYW51ZmFjdHVyZXJzXzA0MDNfNjAwMSkKKyAgICAiVGl2b21hdGljIE95IiwKKyAgRU5EX1VTQl9TVFJJTkdfTElTVAorCisgIEJFR0lOX1VTQl9DSEFOTkVMX0RFRklOSVRJT05TCisgICAgeyAvKiBhbGwgbW9kZWxzICovCisgICAgICAudmVuZG9yPTBYMDQwMywgLnByb2R1Y3Q9MFg2MDAxLAorICAgICAgLm1hbnVmYWN0dXJlcnMgPSB1c2JNYW51ZmFjdHVyZXJzXzA0MDNfNjAwMSwKKyAgICAgIC5jb25maWd1cmF0aW9uPTEsIC5pbnRlcmZhY2U9MCwgLmFsdGVybmF0aXZlPTAsCisgICAgICAuaW5wdXRFbmRwb2ludD0xLCAub3V0cHV0RW5kcG9pbnQ9MgorICAgIH0sCisgIEVORF9VU0JfQ0hBTk5FTF9ERUZJTklUSU9OUworCisgIGlmICgodXNiQ2hhbm5lbCA9IHVzYk9wZW5DaGFubmVsKHVzYkNoYW5uZWxEZWZpbml0aW9ucywgKHZvaWQgKilkZXZpY2UpKSkgeworICAgIHJldHVybiAxOworICB9CisKKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK2NvbmZpZ3VyZVVzYlBvcnQgKHVuc2lnbmVkIGludCBiYXVkKSB7CisgIGNvbnN0IFNlcmlhbFBhcmFtZXRlcnMgcGFyYW1ldGVycyA9IHsKKyAgICBTRVJJQUxfREVGQVVMVF9QQVJBTUVURVJTLAorICAgIC5iYXVkID0gYmF1ZAorICB9OworCisgIHJldHVybiB1c2JTZXRTZXJpYWxQYXJhbWV0ZXJzKHVzYkNoYW5uZWwtPmRldmljZSwgJnBhcmFtZXRlcnMpOworfQorCitzdGF0aWMgdm9pZAorY2xvc2VVc2JQb3J0ICh2b2lkKSB7CisgIGlmICh1c2JDaGFubmVsKSB7CisgICAgdXNiQ2xvc2VDaGFubmVsKHVzYkNoYW5uZWwpOworICAgIHVzYkNoYW5uZWwgPSBOVUxMOworICB9Cit9CisKK3N0YXRpYyBpbnQKK2F3YWl0VXNiSW5wdXQgKGludCBtaWxsaXNlY29uZHMpIHsKKyAgcmV0dXJuIHVzYkF3YWl0SW5wdXQodXNiQ2hhbm5lbC0+ZGV2aWNlLCB1c2JDaGFubmVsLT5kZWZpbml0aW9uLT5pbnB1dEVuZHBvaW50LCBtaWxsaXNlY29uZHMpOworfQorCitzdGF0aWMgaW50CityZWFkVXNiQnl0ZXMgKHVuc2lnbmVkIGNoYXIgKmJ1ZmZlciwgc2l6ZV90IHNpemUsIGludCB3YWl0KSB7CisgIGNvbnN0IGludCB0aW1lb3V0ID0gMTAwOworICBpbnQgY291bnQgPSB1c2JSZWFkRGF0YSh1c2JDaGFubmVsLT5kZXZpY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHVzYkNoYW5uZWwtPmRlZmluaXRpb24tPmlucHV0RW5kcG9pbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlciwgc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKHdhaXQ/IHRpbWVvdXQ6IDApLCB0aW1lb3V0KTsKKworICBpZiAoY291bnQgIT0gLTEpIHJldHVybiBjb3VudDsKKyAgaWYgKGVycm5vID09IEVBR0FJTikgcmV0dXJuIDA7CisgIHJldHVybiAtMTsKK30KKworc3RhdGljIGludAord3JpdGVVc2JCeXRlcyAoY29uc3QgdW5zaWduZWQgY2hhciAqYnVmZmVyLCBzaXplX3Qgc2l6ZSkgeworICByZXR1cm4gdXNiV3JpdGVFbmRwb2ludCh1c2JDaGFubmVsLT5kZXZpY2UsIHVzYkNoYW5uZWwtPmRlZmluaXRpb24tPm91dHB1dEVuZHBvaW50LCBidWZmZXIsIHNpemUsIDEwMDApOworfQorCitzdGF0aWMgY29uc3QgSW5wdXRPdXRwdXRPcGVyYXRpb25zIHVzYk9wZXJhdGlvbnMgPSB7CisgIG9wZW5Vc2JQb3J0LCBjb25maWd1cmVVc2JQb3J0LCBjbG9zZVVzYlBvcnQsCisgIGF3YWl0VXNiSW5wdXQsIHJlYWRVc2JCeXRlcywgd3JpdGVVc2JCeXRlcworfTsKKworc3RhdGljIFRyYW5zbGF0aW9uVGFibGUgaW5wdXRNYXA7CitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciB0b3BMZWZ0S2V5c1tdICA9IHsKKyAgQVRfS0VZX0YxLCBBVF9LRVlfRjIsIEFUX0tFWV9GMywgQVRfS0VZX0Y0LAorICBBVF9LRVlfRjUsIEFUX0tFWV9GNiwgQVRfS0VZX0Y3LCBBVF9LRVlfRjgKK307CitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciB0b3BSaWdodEtleXNbXSA9IHsKKyAgQVRfS0VZX0Y5LCBBVF9LRVlfRjEwLCBBVF9LRVlfRjExLCBBVF9LRVlfRjEyLAorICBBVF9LRVlfRjEzLCBBVF9LRVlfRjE0LCBBVF9LRVlfRjE1LCBBVF9LRVlfRjE2Cit9OworCitzdGF0aWMgdW5zaWduZWQgY2hhciBjb250cm9sS2V5OworI2RlZmluZSBOT19DT05UUk9MX0tFWSAwWEZGCisKK3N0YXRpYyB1bnNpZ25lZCBjaGFyIGRpc3BsYXlDb250ZW50WzgwXTsKK3N0YXRpYyBpbnQgZGlzcGxheVNpemU7CitzdGF0aWMgaW50IHdpbmRvd1dpZHRoOworc3RhdGljIGludCB3aW5kb3dTdGFydDsKK3N0YXRpYyBpbnQgc3RhdHVzQ291bnQ7CitzdGF0aWMgaW50IHN0YXR1c1N0YXJ0OworCitzdGF0aWMgaW50CityZWFkQnl0ZSAodW5zaWduZWQgY2hhciAqYnl0ZSkgeworICBpbnQgcmVzdWx0ID0gaW8tPnJlYWRCeXRlcyhieXRlLCAxLCAwKTsKKworICBpZiAocmVzdWx0ID4gMCkgeworICAgIGxvZ0lucHV0UGFja2V0KGJ5dGUsIHJlc3VsdCk7CisgIH0gZWxzZSBpZiAocmVzdWx0ID09IC0xKSB7CisgICAgbG9nU3lzdGVtRXJyb3IoIkFsYmF0cm9zcyByZWFkIik7CisgIH0gZWxzZSBpZiAoIXJlc3VsdCkgeworICAgIGVycm5vID0gRUFHQUlOOworICB9CisKKyAgcmV0dXJuIHJlc3VsdCA9PSAxOworfQorCitzdGF0aWMgdm9pZAorZGlzY2FyZElucHV0ICh2b2lkKSB7CisgIHVuc2lnbmVkIGNoYXIgYnl0ZTsKKyAgd2hpbGUgKHJlYWRCeXRlKCZieXRlKSk7Cit9CisKK3N0YXRpYyBpbnQKK2F3YWl0Qnl0ZSAodW5zaWduZWQgY2hhciAqYnl0ZSkgeworICBpZiAocmVhZEJ5dGUoYnl0ZSkpIHJldHVybiAxOworCisgIGlmIChpby0+YXdhaXRJbnB1dCgxMDAwKSkKKyAgICBpZiAocmVhZEJ5dGUoYnl0ZSkpCisgICAgICByZXR1cm4gMTsKKworICByZXR1cm4gMDsKK30KKworc3RhdGljIGludAord3JpdGVCeXRlcyAoQnJhaWxsZURpc3BsYXkgKmJybCwgY29uc3QgdW5zaWduZWQgY2hhciAqYnl0ZXMsIGludCBjb3VudCkgeworICBicmwtPndyaXRlRGVsYXkgKz0gKGNvdW50ICogMTAwMCAvIGNoYXJhY3RlcnNQZXJTZWNvbmQpICsgMTsKKyAgbG9nT3V0cHV0UGFja2V0KGJ5dGVzLCBjb3VudCk7CisgIGlmIChpby0+d3JpdGVCeXRlcyhieXRlcywgY291bnQpICE9IC0xKSByZXR1cm4gMTsKKyAgbG9nU3lzdGVtRXJyb3IoIkFsYmF0cm9zcyB3cml0ZSIpOworICByZXR1cm4gMDsKK30KKworc3RhdGljIGludAorYWNrbm93bGVkZ2VEaXNwbGF5IChCcmFpbGxlRGlzcGxheSAqYnJsKSB7CisgIHVuc2lnbmVkIGNoYXIgZGVzY3JpcHRpb247CisgIGlmICghYXdhaXRCeXRlKCZkZXNjcmlwdGlvbikpIHJldHVybiAwOworICBpZiAoZGVzY3JpcHRpb24gPT0gMFhGRikgcmV0dXJuIDA7CisKKyAgeworICAgIHVuc2lnbmVkIGNoYXIgYnl0ZTsKKworICAgIGlmICghYXdhaXRCeXRlKCZieXRlKSkgcmV0dXJuIDA7CisgICAgaWYgKGJ5dGUgIT0gMFhGRikgcmV0dXJuIDA7CisKKyAgICBpZiAoIWF3YWl0Qnl0ZSgmYnl0ZSkpIHJldHVybiAwOworICAgIGlmIChieXRlICE9IGRlc2NyaXB0aW9uKSByZXR1cm4gMDsKKyAgfQorCisgIHsKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhY2tub3dsZWRnZW1lbnRbXSA9IHswWEZFLCAwWEZGLCAwWEZFLCAwWEZGfTsKKyAgICBpZiAoIXdyaXRlQnl0ZXMoYnJsLCBhY2tub3dsZWRnZW1lbnQsIHNpemVvZihhY2tub3dsZWRnZW1lbnQpKSkgcmV0dXJuIDA7CisKKyAgICBkaXNjYXJkSW5wdXQoKTsKKyAgICBhc3luY1dhaXQoMTAwKTsKKyAgICBkaXNjYXJkSW5wdXQoKTsKKyAgfQorICBsb2dNZXNzYWdlKExPR19ERUJVRywgIkFsYmF0cm9zcyBkZXNjcmlwdGlvbiBieXRlOiAlMDJYIiwgZGVzY3JpcHRpb24pOworCisgIHdpbmRvd1N0YXJ0ID0gc3RhdHVzU3RhcnQgPSAwOworICBkaXNwbGF5U2l6ZSA9IChkZXNjcmlwdGlvbiAmIDBYODApPyA4MDogNDY7CisgIGlmICgoc3RhdHVzQ291bnQgPSBkZXNjcmlwdGlvbiAmIDBYMEYpKSB7CisgICAgd2luZG93V2lkdGggPSBkaXNwbGF5U2l6ZSAtIHN0YXR1c0NvdW50IC0gMTsKKyAgICBpZiAoZGVzY3JpcHRpb24gJiAwWDIwKSB7CisgICAgICBzdGF0dXNTdGFydCA9IHdpbmRvd1dpZHRoICsgMTsKKyAgICAgIGRpc3BsYXlDb250ZW50W3N0YXR1c1N0YXJ0IC0gMV0gPSAwOworICAgIH0gZWxzZSB7CisgICAgICB3aW5kb3dTdGFydCA9IHN0YXR1c0NvdW50ICsgMTsKKyAgICAgIGRpc3BsYXlDb250ZW50W3dpbmRvd1N0YXJ0IC0gMV0gPSAwOworICAgIH0KKyAgfSBlbHNlIHsKKyAgICB3aW5kb3dXaWR0aCA9IGRpc3BsYXlTaXplOworICB9CisKKyAgeworICAgIGludCBpOworICAgIGZvciAoaT0wOyBpPHNpemVvZihpbnB1dE1hcCk7ICsraSkgaW5wdXRNYXBbaV0gPSBpOworCisgICAgLyogdG9wIGtleXBhZCByZW1hcHBpbmcgKi8KKyAgICB7CisgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpsZWZ0ID0gTlVMTDsKKyAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnJpZ2h0ID0gTlVMTDsKKworICAgICAgc3dpdGNoIChkZXNjcmlwdGlvbiAmIDBYNTApIHsKKyAgICAgICAgY2FzZSAwWDAwOiAvKiBsZWZ0IHJpZ2h0ICovCisgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSAwWDEwOiAvKiByaWdodCByaWdodCAqLworICAgICAgICAgIGxlZnQgPSB0b3BSaWdodEtleXM7CisgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSAwWDUwOiAvKiBsZWZ0IGxlZnQgKi8KKyAgICAgICAgICByaWdodCA9IHRvcExlZnRLZXlzOworICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgMFg0MDogLyogcmlnaHQgbGVmdCAqLworICAgICAgICAgIGxlZnQgPSB0b3BSaWdodEtleXM7CisgICAgICAgICAgcmlnaHQgPSB0b3BMZWZ0S2V5czsKKyAgICAgICAgICBicmVhazsKKyAgICAgIH0KKworICAgICAgaWYgKGxlZnQpCisgICAgICAgIGZvciAoaT0wOyBpPDg7ICsraSkKKyAgICAgICAgICBpbnB1dE1hcFt0b3BMZWZ0S2V5c1tpXV0gPSBsZWZ0W2ldOworCisgICAgICBpZiAocmlnaHQpCisgICAgICAgIGZvciAoaT0wOyBpPDg7ICsraSkKKyAgICAgICAgICBpbnB1dE1hcFt0b3BSaWdodEtleXNbaV1dID0gcmlnaHRbaV07CisgICAgfQorICB9CisKKyAgbG9nTWVzc2FnZShMT0dfSU5GTywgIkFsYmF0cm9zczogJWQgY2VsbHMgKCVkIHRleHQsICVkJXMgc3RhdHVzKSwgdG9wIGtleXBhZHMgWyVzLCVzXS4iLAorICAgICAgICAgICAgIGRpc3BsYXlTaXplLCB3aW5kb3dXaWR0aCwgc3RhdHVzQ291bnQsCisgICAgICAgICAgICAgIXN0YXR1c0NvdW50PyAiIjogc3RhdHVzU3RhcnQ/ICIgcmlnaHQiOiAiIGxlZnQiLAorICAgICAgICAgICAgIChpbnB1dE1hcFt0b3BMZWZ0S2V5c1swXV0gPT0gdG9wTGVmdEtleXNbMF0pPyAibGVmdCI6ICJyaWdodCIsCisgICAgICAgICAgICAgKGlucHV0TWFwW3RvcFJpZ2h0S2V5c1swXV0gPT0gdG9wUmlnaHRLZXlzWzBdKT8gInJpZ2h0IjogImxlZnQiKTsKKyAgcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQKK2NsZWFyRGlzcGxheSAoQnJhaWxsZURpc3BsYXkgKmJybCkgeworICB1bnNpZ25lZCBjaGFyIGJ5dGVzW10gPSB7MFhGQX07CisgIGludCBjbGVhcmVkID0gd3JpdGVCeXRlcyhicmwsIGJ5dGVzLCBzaXplb2YoYnl0ZXMpKTsKKyAgaWYgKGNsZWFyZWQpIG1lbXNldChkaXNwbGF5Q29udGVudCwgMCwgZGlzcGxheVNpemUpOworICByZXR1cm4gY2xlYXJlZDsKK30KKworc3RhdGljIGludAordXBkYXRlRGlzcGxheSAoQnJhaWxsZURpc3BsYXkgKmJybCwgY29uc3QgdW5zaWduZWQgY2hhciAqY2VsbHMsIHVuc2lnbmVkIGludCBjb3VudCwgdW5zaWduZWQgaW50IHN0YXJ0KSB7CisgIHN0YXRpYyB0aW1lX3QgbGFzdFVwZGF0ZSA9IDA7CisgIHVuc2lnbmVkIGNoYXIgYnl0ZXNbY291bnQgKiAyICsgMl07CisgIHVuc2lnbmVkIGNoYXIgKmJ5dGUgPSBieXRlczsKKyAgdW5zaWduZWQgaW50IGluZGV4OworICAqYnl0ZSsrID0gMFhGQjsKKyAgZm9yIChpbmRleD0wOyBpbmRleDxjb3VudDsgKytpbmRleCkgeworICAgIHVuc2lnbmVkIGNoYXIgY2VsbDsKKyAgICBpZiAoIWNlbGxzKSB7CisgICAgICBjZWxsID0gZGlzcGxheUNvbnRlbnRbc3RhcnQraW5kZXhdOworICAgIH0gZWxzZSBpZiAoKGNlbGwgPSB0cmFuc2xhdGVPdXRwdXRDZWxsKGNlbGxzW2luZGV4XSkpICE9IGRpc3BsYXlDb250ZW50W3N0YXJ0K2luZGV4XSkgeworICAgICAgZGlzcGxheUNvbnRlbnRbc3RhcnQraW5kZXhdID0gY2VsbDsKKyAgICB9IGVsc2UgeworICAgICAgY29udGludWU7CisgICAgfQorICAgICpieXRlKysgPSBzdGFydCArIGluZGV4ICsgMTsKKyAgICAqYnl0ZSsrID0gY2VsbDsKKyAgfQorCisgIGlmICgoKGJ5dGUgLSBieXRlcykgPiAxKSB8fCAodGltZShOVUxMKSAhPSBsYXN0VXBkYXRlKSkgeworICAgICpieXRlKysgPSAwWEZDOworICAgIGlmICghd3JpdGVCeXRlcyhicmwsIGJ5dGVzLCBieXRlLWJ5dGVzKSkgcmV0dXJuIDA7CisgICAgbGFzdFVwZGF0ZSA9IHRpbWUoTlVMTCk7CisgIH0KKyAgcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQKK3VwZGF0ZVdpbmRvdyAoQnJhaWxsZURpc3BsYXkgKmJybCwgY29uc3QgdW5zaWduZWQgY2hhciAqY2VsbHMpIHsKKyAgcmV0dXJuIHVwZGF0ZURpc3BsYXkoYnJsLCBjZWxscywgd2luZG93V2lkdGgsIHdpbmRvd1N0YXJ0KTsKK30KKworc3RhdGljIGludAordXBkYXRlU3RhdHVzIChCcmFpbGxlRGlzcGxheSAqYnJsLCBjb25zdCB1bnNpZ25lZCBjaGFyICpjZWxscykgeworICByZXR1cm4gdXBkYXRlRGlzcGxheShicmwsIGNlbGxzLCBzdGF0dXNDb3VudCwgc3RhdHVzU3RhcnQpOworfQorCitzdGF0aWMgaW50CityZWZyZXNoRGlzcGxheSAoQnJhaWxsZURpc3BsYXkgKmJybCkgeworICByZXR1cm4gdXBkYXRlRGlzcGxheShicmwsIE5VTEwsIGRpc3BsYXlTaXplLCAwKTsKK30KKworc3RhdGljIGludAorYnJsX2NvbnN0cnVjdCAoQnJhaWxsZURpc3BsYXkgKmJybCwgY2hhciAqKnBhcmFtZXRlcnMsIGNvbnN0IGNoYXIgKmRldmljZSkgeworICBpZiAoaXNTZXJpYWxEZXZpY2VJZGVudGlmaWVyKCZkZXZpY2UpKSB7CisgICAgaW8gPSAmc2VyaWFsT3BlcmF0aW9uczsKKyAgfSBlbHNlIGlmIChpc1VzYkRldmljZUlkZW50aWZpZXIoJmRldmljZSkpIHsKKyAgICBpbyA9ICZ1c2JPcGVyYXRpb25zOworICB9IGVsc2UgeworICAgIHVuc3VwcG9ydGVkRGV2aWNlSWRlbnRpZmllcihkZXZpY2UpOworICAgIHJldHVybiAwOworICB9CisKKyAgaWYgKGlvLT5vcGVuUG9ydChkZXZpY2UpKSB7CisgICAgdW5zaWduZWQgaW50IGJhdWRUYWJsZVtdID0gezE5MjAwLCA5NjAwLCAwfTsKKyAgICBjb25zdCB1bnNpZ25lZCBpbnQgKmJhdWQgPSBiYXVkVGFibGU7CisKKyAgICB3aGlsZSAoaW8tPmNvbmZpZ3VyZVBvcnQoKmJhdWQpKSB7CisgICAgICBUaW1lUGVyaW9kIHBlcmlvZDsKKyAgICAgIGludCBjb3VudCA9IDA7CisgICAgICB1bnNpZ25lZCBjaGFyIGJ5dGU7CisKKyAgICAgIHN0YXJ0VGltZVBlcmlvZCgmcGVyaW9kLCAxMDAwKTsKKyAgICAgIGNoYXJhY3RlcnNQZXJTZWNvbmQgPSAqYmF1ZCAvIDEwOworICAgICAgY29udHJvbEtleSA9IE5PX0NPTlRST0xfS0VZOworCisgICAgICBsb2dNZXNzYWdlKExPR19ERUJVRywgInRyeWluZyBBbGJhdHJvc3MgYXQgJXUgYmF1ZCIsICpiYXVkKTsKKworICAgICAgd2hpbGUgKGF3YWl0Qnl0ZSgmYnl0ZSkpIHsKKyAgICAgICAgaWYgKGJ5dGUgPT0gMFhGRikgeworICAgICAgICAgIGlmICghYWNrbm93bGVkZ2VEaXNwbGF5KGJybCkpIGJyZWFrOworCisgICAgICAgICAgYnJsLT50ZXh0Q29sdW1ucyA9IHdpbmRvd1dpZHRoOworICAgICAgICAgIGJybC0+dGV4dFJvd3MgPSAxOworCisgICAgICAgICAgc2V0QnJhaWxsZUtleVRhYmxlKGJybCwgJktFWV9UQUJMRV9ERUZJTklUSU9OKGFsbCkpOworICAgICAgICAgIE1BS0VfT1VUUFVUX1RBQkxFKDBYODAsIDBYNDAsIDBYMjAsIDBYMTAsIDBYMDgsIDBYMDQsIDBYMDIsIDBYMDEpOworICAgICAgICAgIGNsZWFyRGlzcGxheShicmwpOworCisgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgIH0KKworICAgICAgICBpZiAoKytjb3VudCA9PSAxMDApIGJyZWFrOworICAgICAgICBpZiAoYWZ0ZXJUaW1lUGVyaW9kKCZwZXJpb2QsIE5VTEwpKSBicmVhazsKKyAgICAgIH0KKworICAgICAgaWYgKCEqKytiYXVkKSBicmVhazsKKyAgICB9CisKKyAgICBpby0+Y2xvc2VQb3J0KCk7CisgIH0KKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkCiticmxfZGVzdHJ1Y3QgKEJyYWlsbGVEaXNwbGF5ICpicmwpIHsKKyAgaW8tPmNsb3NlUG9ydCgpOworfQorCitzdGF0aWMgaW50Citicmxfd3JpdGVXaW5kb3cgKEJyYWlsbGVEaXNwbGF5ICpicmwsIGNvbnN0IHdjaGFyX3QgKnRleHQpIHsKKyAgdXBkYXRlV2luZG93KGJybCwgYnJsLT5idWZmZXIpOworICByZXR1cm4gMTsKK30KKworc3RhdGljIGludAorYnJsX3dyaXRlU3RhdHVzIChCcmFpbGxlRGlzcGxheSAqYnJsLCBjb25zdCB1bnNpZ25lZCBjaGFyICpzdGF0dXMpIHsKKyAgdXBkYXRlU3RhdHVzKGJybCwgc3RhdHVzKTsKKyAgcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQKK2JybF9yZWFkQ29tbWFuZCAoQnJhaWxsZURpc3BsYXkgKmJybCwgS2V5VGFibGVDb21tYW5kQ29udGV4dCBjb250ZXh0KSB7CisgIHVuc2lnbmVkIGNoYXIgYnl0ZTsKKworICB3aGlsZSAocmVhZEJ5dGUoJmJ5dGUpKSB7CisgICAgaWYgKGJ5dGUgPT0gMFhGRikgeworICAgICAgaWYgKGFja25vd2xlZGdlRGlzcGxheShicmwpKSB7CisgICAgICAgIHJlZnJlc2hEaXNwbGF5KGJybCk7CisgICAgICAgIGJybC0+dGV4dENvbHVtbnMgPSB3aW5kb3dXaWR0aDsKKyAgICAgICAgYnJsLT50ZXh0Um93cyA9IDE7CisgICAgICAgIGJybC0+cmVzaXplUmVxdWlyZWQgPSAxOworICAgICAgfQorICAgICAgY29udGludWU7CisgICAgfQorCisgICAgYnl0ZSA9IGlucHV0TWFwW2J5dGVdOworICAgIHsKKyAgICAgIEtleUdyb3VwIGdyb3VwOworICAgICAgS2V5TnVtYmVyIG51bWJlcjsKKworICAgICAgaWYgKChieXRlID49IDIpICYmIChieXRlIDw9IDQxKSkgeworICAgICAgICBncm91cCA9IEFUX0dSUF9Sb3V0aW5nS2V5czE7CisgICAgICAgIG51bWJlciA9IGJ5dGUgLSAyOworICAgICAgfSBlbHNlIGlmICgoYnl0ZSA+PSAxMTEpICYmIChieXRlIDw9IDE1MCkpIHsKKyAgICAgICAgZ3JvdXAgPSBBVF9HUlBfUm91dGluZ0tleXMxOworICAgICAgICBudW1iZXIgPSBieXRlIC0gNzE7CisgICAgICB9IGVsc2UgaWYgKChieXRlID49IDQzKSAmJiAoYnl0ZSA8PSA4MikpIHsKKyAgICAgICAgZ3JvdXAgPSBBVF9HUlBfUm91dGluZ0tleXMyOworICAgICAgICBudW1iZXIgPSBieXRlIC0gNDM7CisgICAgICB9IGVsc2UgaWYgKChieXRlID49IDE1MikgJiYgKGJ5dGUgPD0gMTkxKSkgeworICAgICAgICBncm91cCA9IEFUX0dSUF9Sb3V0aW5nS2V5czI7CisgICAgICAgIG51bWJlciA9IGJ5dGUgLSAxMTI7CisgICAgICB9IGVsc2UgeworICAgICAgICBnb3RvIG5vdFJvdXRpbmc7CisgICAgICB9CisKKyAgICAgIGlmICgobnVtYmVyID49IHdpbmRvd1N0YXJ0KSAmJgorICAgICAgICAgIChudW1iZXIgPCAod2luZG93U3RhcnQgKyB3aW5kb3dXaWR0aCkpKSB7CisgICAgICAgIG51bWJlciAtPSB3aW5kb3dTdGFydDsKKyAgICAgICAgZW5xdWV1ZUtleShicmwsIGdyb3VwLCBudW1iZXIpOworICAgICAgICBjb250aW51ZTsKKyAgICAgIH0KKyAgICB9CisgIG5vdFJvdXRpbmc6CisKKyAgICBzd2l0Y2ggKGJ5dGUpIHsKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIGJyZWFrOworCisgICAgICBjYXNlIDBYRkI6CisgICAgICAgIHJlZnJlc2hEaXNwbGF5KGJybCk7CisgICAgICAgIGNvbnRpbnVlOworCisgICAgICBjYXNlIEFUX0tFWV9BdHRyaWJ1dGUxOgorICAgICAgY2FzZSBBVF9LRVlfQXR0cmlidXRlMjoKKyAgICAgIGNhc2UgQVRfS0VZX0F0dHJpYnV0ZTM6CisgICAgICBjYXNlIEFUX0tFWV9BdHRyaWJ1dGU0OgorICAgICAgY2FzZSBBVF9LRVlfRjE6CisgICAgICBjYXNlIEFUX0tFWV9GMjoKKyAgICAgIGNhc2UgQVRfS0VZX0Y3OgorICAgICAgY2FzZSBBVF9LRVlfRjg6CisgICAgICBjYXNlIEFUX0tFWV9GOToKKyAgICAgIGNhc2UgQVRfS0VZX0YxMDoKKyAgICAgIGNhc2UgQVRfS0VZX0YxNToKKyAgICAgIGNhc2UgQVRfS0VZX0YxNjoKKyAgICAgIGNhc2UgQVRfS0VZX0hvbWUxOgorICAgICAgY2FzZSBBVF9LRVlfSG9tZTI6CisgICAgICBjYXNlIEFUX0tFWV9FbmQxOgorICAgICAgY2FzZSBBVF9LRVlfRW5kMjoKKyAgICAgIGNhc2UgQVRfS0VZX0V4dHJhQ3Vyc29yMToKKyAgICAgIGNhc2UgQVRfS0VZX0V4dHJhQ3Vyc29yMjoKKyAgICAgIGNhc2UgQVRfS0VZX0N1cnNvcjE6CisgICAgICBjYXNlIEFUX0tFWV9DdXJzb3IyOgorICAgICAgICBpZiAoYnl0ZSA9PSBjb250cm9sS2V5KSB7CisgICAgICAgICAgY29udHJvbEtleSA9IE5PX0NPTlRST0xfS0VZOworICAgICAgICAgIGVucXVldWVLZXlFdmVudChicmwsIEFUX0dSUF9OYXZpZ2F0aW9uS2V5cywgYnl0ZSwgMCk7CisgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKworICAgICAgICBpZiAoY29udHJvbEtleSA9PSBOT19DT05UUk9MX0tFWSkgeworICAgICAgICAgIGNvbnRyb2xLZXkgPSBieXRlOworICAgICAgICAgIGVucXVldWVLZXlFdmVudChicmwsIEFUX0dSUF9OYXZpZ2F0aW9uS2V5cywgYnl0ZSwgMSk7CisgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKworICAgICAgY2FzZSBBVF9LRVlfVXAxOgorICAgICAgY2FzZSBBVF9LRVlfRG93bjE6CisgICAgICBjYXNlIEFUX0tFWV9MZWZ0OgorICAgICAgY2FzZSBBVF9LRVlfVXAyOgorICAgICAgY2FzZSBBVF9LRVlfRG93bjI6CisgICAgICBjYXNlIEFUX0tFWV9SaWdodDoKKyAgICAgIGNhc2UgQVRfS0VZX1VwMzoKKyAgICAgIGNhc2UgQVRfS0VZX0Rvd24zOgorICAgICAgY2FzZSBBVF9LRVlfRjM6CisgICAgICBjYXNlIEFUX0tFWV9GNDoKKyAgICAgIGNhc2UgQVRfS0VZX0Y1OgorICAgICAgY2FzZSBBVF9LRVlfRjY6CisgICAgICBjYXNlIEFUX0tFWV9GMTE6CisgICAgICBjYXNlIEFUX0tFWV9GMTI6CisgICAgICBjYXNlIEFUX0tFWV9GMTM6CisgICAgICBjYXNlIEFUX0tFWV9GMTQ6CisgICAgICBjYXNlIEFUX0tFWV9MZWZ0V2hlZWxSaWdodDoKKyAgICAgIGNhc2UgQVRfS0VZX0xlZnRXaGVlbExlZnQ6CisgICAgICBjYXNlIEFUX0tFWV9MZWZ0V2hlZWxVcDoKKyAgICAgIGNhc2UgQVRfS0VZX0xlZnRXaGVlbERvd246CisgICAgICBjYXNlIEFUX0tFWV9SaWdodFdoZWVsUmlnaHQ6CisgICAgICBjYXNlIEFUX0tFWV9SaWdodFdoZWVsTGVmdDoKKyAgICAgIGNhc2UgQVRfS0VZX1JpZ2h0V2hlZWxVcDoKKyAgICAgIGNhc2UgQVRfS0VZX1JpZ2h0V2hlZWxEb3duOgorICAgICAgICBlbnF1ZXVlS2V5KGJybCwgQVRfR1JQX05hdmlnYXRpb25LZXlzLCBieXRlKTsKKyAgICAgICAgY29udGludWU7CisgICAgfQorCisgICAgbG9nVW5leHBlY3RlZFBhY2tldCgmYnl0ZSwgMSk7CisgIH0KKworICBpZiAoZXJybm8gIT0gRUFHQUlOKSByZXR1cm4gQlJMX0NNRF9SRVNUQVJUQlJMOworICByZXR1cm4gRU9GOworfQpkaWZmIC0tZ2l0IGEvRHJpdmVycy9CcmFpbGxlL0FsYmF0cm9zcy9icmxkZWZzLWF0LmggYi9Ecml2ZXJzL0JyYWlsbGUvQWxiYXRyb3NzL2JybGRlZnMtYXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wY2UyNjYyCi0tLSAvZGV2L251bGwKKysrIGIvRHJpdmVycy9CcmFpbGxlL0FsYmF0cm9zcy9icmxkZWZzLWF0LmgKQEAgLTAsMCArMSw4OCBAQAorLyoKKyAqIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisgKiAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisgKgorICogQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKKyNpZm5kZWYgQlJMVFRZX0lOQ0xVREVEX0FUX0JSTERFRlMKKyNkZWZpbmUgQlJMVFRZX0lOQ0xVREVEX0FUX0JSTERFRlMKKwordHlwZWRlZiBlbnVtIHsKKyAgLyogZnJvbnQgbGVmdCBrZXlzICovCisgIEFUX0tFWV9Ib21lMSAgICAgICAgPSAgOTEsIC8qIGZyb250IGxlZnQgZmlyc3QgdXBwZXIgKi8KKyAgQVRfS0VZX0VuZDEgICAgICAgICA9ICA5MiwgLyogZnJvbnQgbGVmdCBmaXJzdCBsb3dlciAqLworICBBVF9LRVlfRXh0cmFDdXJzb3IxID0gIDkzLCAvKiBmcm9udCBsZWZ0IHNlY29uZCB1cHBlciAqLworICBBVF9LRVlfQ3Vyc29yMSAgICAgID0gIDk0LCAvKiBmcm9udCBsZWZ0IHNlY29uZCBsb3dlciAqLworICBBVF9LRVlfVXAxICAgICAgICAgID0gIDk1LCAvKiBmcm9udCBsZWZ0IHRoaXJkIHVwcGVyICovCisgIEFUX0tFWV9Eb3duMSAgICAgICAgPSAgOTYsIC8qIGZyb250IGxlZnQgdGhpcmQgbG93ZXIgKi8KKyAgQVRfS0VZX0xlZnQgICAgICAgICA9ICA5NywgLyogZnJvbnQgbGVmdCBmb3VydGggKi8KKworICAvKiBmcm9udCByaWdodCBrZXlzICovCisgIEFUX0tFWV9Ib21lMiAgICAgICAgPSAyMDEsIC8qIGZyb250IHJpZ2h0IGZpcnN0IHVwcGVyICovCisgIEFUX0tFWV9FbmQyICAgICAgICAgPSAyMDIsIC8qIGZyb250IHJpZ2h0IGZpcnN0IGxvd2VyICovCisgIEFUX0tFWV9FeHRyYUN1cnNvcjIgPSAyMDMsIC8qIGZyb250IHJpZ2h0IHNlY29uZCB1cHBlciAqLworICBBVF9LRVlfQ3Vyc29yMiAgICAgID0gMjA0LCAvKiBmcm9udCByaWdodCBzZWNvbmQgbG93ZXIgKi8KKyAgQVRfS0VZX1VwMiAgICAgICAgICA9IDIwNSwgLyogZnJvbnQgcmlnaHQgdGhpcmQgdXBwZXIgKi8KKyAgQVRfS0VZX0Rvd24yICAgICAgICA9IDIwNiwgLyogZnJvbnQgcmlnaHQgdGhpcmQgbG93ZXIgKi8KKyAgQVRfS0VZX1JpZ2h0ICAgICAgICA9IDIwNywgLyogZnJvbnQgcmlnaHQgZm91cnRoICovCisKKyAgLyogZnJvbnQgbWlkZGxlIGtleXMgKi8KKyAgQVRfS0VZX1VwMyAgICAgICAgICA9ICA5OCwgLyogZnJvbnQgbWlkZGxlIHVwcGVyICovCisgIEFUX0tFWV9Eb3duMyAgICAgICAgPSAyMDgsIC8qIGZyb250IG1pZGRsZSBsb3dlciAqLworCisgIC8qIHRvcCBsZWZ0IGtleXMgKi8KKyAgQVRfS0VZX0YxICAgICAgICAgICA9ICA4MywgLyogdG9wIGxlZnQgZmlyc3QgZnJvbnQgKi8KKyAgQVRfS0VZX0YyICAgICAgICAgICA9ICA4NCwgLyogdG9wIGxlZnQgZmlyc3QgcmVhciAqLworICBBVF9LRVlfRjMgICAgICAgICAgID0gIDg1LCAvKiB0b3AgbGVmdCB0aGlyZCByZWFyICovCisgIEFUX0tFWV9GNCAgICAgICAgICAgPSAgODYsIC8qIHRvcCBsZWZ0IHRoaXJkIGZyb250ICovCisgIEFUX0tFWV9GNSAgICAgICAgICAgPSAgODcsIC8qIHRvcCBsZWZ0IHNlY29uZCAqLworICBBVF9LRVlfRjYgICAgICAgICAgID0gIDg4LCAvKiB0b3AgbGVmdCBmb3VydGggKi8KKyAgQVRfS0VZX0Y3ICAgICAgICAgICA9ICA4OSwgLyogdG9wIGxlZnQgZmlmdGggcmVhciAqLworICBBVF9LRVlfRjggICAgICAgICAgID0gIDkwLCAvKiB0b3AgbGVmdCBmaWZ0aCBmcm9udCAqLworCisgIC8qIHRvcCByaWdodCBrZXlzICovCisgIEFUX0tFWV9GOSAgICAgICAgICAgPSAxOTMsIC8qIHRvcCByaWdodCBmaXJzdCBmcm9udCAqLworICBBVF9LRVlfRjEwICAgICAgICAgID0gMTk0LCAvKiB0b3AgcmlnaHQgZmlyc3QgcmVhciAqLworICBBVF9LRVlfRjExICAgICAgICAgID0gMTk1LCAvKiB0b3AgcmlnaHQgdGhpcmQgcmVhciAqLworICBBVF9LRVlfRjEyICAgICAgICAgID0gMTk2LCAvKiB0b3AgcmlnaHQgdGhpcmQgZnJvbnQgKi8KKyAgQVRfS0VZX0YxMyAgICAgICAgICA9IDE5NywgLyogdG9wIHJpZ2h0IHNlY29uZCAqLworICBBVF9LRVlfRjE0ICAgICAgICAgID0gMTk4LCAvKiB0b3AgcmlnaHQgZm91cnRoICovCisgIEFUX0tFWV9GMTUgICAgICAgICAgPSAxOTksIC8qIHRvcCByaWdodCBmaWZ0aCByZWFyICovCisgIEFUX0tFWV9GMTYgICAgICAgICAgPSAyMDAsIC8qIHRvcCByaWdodCBmaWZ0aCBmcm9udCAqLworCisgIC8qIGF0dHJpYnV0ZSBrZXlzICovCisgIEFUX0tFWV9BdHRyaWJ1dGUxICAgPSAgIDEsIC8qIGF0dHJpYnV0ZSBsZWZ0IGZyb250ICovCisgIEFUX0tFWV9BdHRyaWJ1dGUyICAgPSAgNDIsIC8qIGF0dHJpYnV0ZSBsZWZ0IHJlYXIgKi8KKyAgQVRfS0VZX0F0dHJpYnV0ZTMgICA9IDE1MSwgLyogYXR0cmlidXRlIHJpZ2h0IGZyb250ICovCisgIEFUX0tFWV9BdHRyaWJ1dGU0ICAgPSAxOTIsIC8qIGF0dHJpYnV0ZSByaWdodCByZWFyICovCisKKyAgLyogd2hlZWxzICovCisgIEFUX0tFWV9MZWZ0V2hlZWxSaWdodCAgPSAxMDMsIC8qIHdoZWVsIGxlZnQgaG9yaXpvbnRhbCByaWdodCAqLworICBBVF9LRVlfTGVmdFdoZWVsTGVmdCAgID0gMTA0LCAvKiB3aGVlbCBsZWZ0IGhvcml6b250YWwgbGVmdCAqLworICBBVF9LRVlfTGVmdFdoZWVsVXAgICAgID0gMTA1LCAvKiB3aGVlbCBsZWZ0IHZlcnRpY2FsIHVwICovCisgIEFUX0tFWV9MZWZ0V2hlZWxEb3duICAgPSAxMDYsIC8qIHdoZWVsIGxlZnQgdmVydGljYWwgZG93biAqLworICBBVF9LRVlfUmlnaHRXaGVlbFJpZ2h0ID0gMjEzLCAvKiB3aGVlbCByaWdodCBob3Jpem9udGFsIHJpZ2h0ICovCisgIEFUX0tFWV9SaWdodFdoZWVsTGVmdCAgPSAyMTQsIC8qIHdoZWVsIHJpZ2h0IGhvcml6b250YWwgbGVmdCAqLworICBBVF9LRVlfUmlnaHRXaGVlbFVwICAgID0gMjE1LCAvKiB3aGVlbCByaWdodCB2ZXJ0aWNhbCB1cCAqLworICBBVF9LRVlfUmlnaHRXaGVlbERvd24gID0gMjE2LCAvKiB3aGVlbCByaWdodCB2ZXJ0aWNhbCBkb3duICovCit9IEFUX05hdmlnYXRpb25LZXk7CisKK3R5cGVkZWYgZW51bSB7CisgIEFUX0dSUF9OYXZpZ2F0aW9uS2V5cyA9IDAsCisgIEFUX0dSUF9Sb3V0aW5nS2V5czEsCisgIEFUX0dSUF9Sb3V0aW5nS2V5czIKK30gQVRfS2V5R3JvdXA7CisKKyNlbmRpZiAvKiBCUkxUVFlfSU5DTFVERURfQVRfQlJMREVGUyAqLyAKZGlmZiAtLWdpdCBhL0RyaXZlcnMvQnJhaWxsZS9BbHZhL01ha2VmaWxlLmluIGIvRHJpdmVycy9CcmFpbGxlL0FsdmEvTWFrZWZpbGUuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTJkZTRmNwotLS0gL2Rldi9udWxsCisrKyBiL0RyaXZlcnMvQnJhaWxsZS9BbHZhL01ha2VmaWxlLmluCkBAIC0wLDAgKzEsMjggQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyMgICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisjCisjIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyMKKyMgQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitEUklWRVJfQ09ERSA9IGFsCitEUklWRVJfTkFNRSA9IEFsdmEKK0RSSVZFUl9VU0FHRSA9IEFCVCgzbm4pLCBEZWxwaGkoNG5uKSwgU2F0ZWxsaXRlKDVubiksIEJyYWlsbGUgU3lzdGVtIDQwLCBCcmFpbGxlIENvbnRyb2xsZXIgNjQwLzY4MCwgRWFzeSBMaW5rIDEyCitEUklWRVJfVkVSU0lPTiA9IDIuMgorRFJJVkVSX0RFVkVMT1BFUlMgPSBOaWNvbGFzIFBpdHJlIDxuaWNvQGZsdXhuaWMubmV0PgoraW5jbHVkZSAkKFNSQ19UT1ApYnJhaWxsZS5taworCiticmFpbGxlLiRPOgorCSQoQ0MpICQoQlJMX0NGTEFHUykgLWMgJChTUkNfRElSKS9icmFpbGxlLmMKKwpkaWZmIC0tZ2l0IGEvRHJpdmVycy9CcmFpbGxlL0FsdmEvUkVBRE1FIGIvRHJpdmVycy9CcmFpbGxlL0FsdmEvUkVBRE1FCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY0NjFhOTAKLS0tIC9kZXYvbnVsbAorKysgYi9Ecml2ZXJzL0JyYWlsbGUvQWx2YS9SRUFETUUKQEAgLTAsMCArMSwxNTUgQEAKK1JFQURNRSBmb3IgdGhlIEFsdmEgQnJhaWxsZSBEcml2ZXIKKworCitTdXBwb3J0ZWQgSGFyZHdhcmUKKz09PT09PT09PT09PT09PT09PQorCitUaGlzIGRyaXZlciBpcyBpbnRlbmRlZCB0byB3b3JrIHdpdGggYW55IEFsdmEgYnJhaWxsZSBkaXNwbGF5IGZyb20gdGhlIEFCVDMgCisoM25uKSwgRGVscGhpICg0bm4pLCBTYXRlbGxpdGUgKDVubiksIGFuZCBCcmFpbGxlIENvbnRyb2xsZXIgKDZubikgc2VyaWVzLiBJdCAKK3JlY29nbml6ZXMgdGhlIDMyMCwgMzQwLCAzNGQsIDM4MCwgMzgyLCAzOEQsIDQyMCwgNDQwLCA0NGQsIDQ4MCwgNTQ0LCA1NDR0LCAKKzU3MHAsIDU4NHAsIDYyMCwgNjMyLCA2NDAgYW5kIDY4MDsgb3RoZXIgbW9kZWxzIGNhbiBiZSBlYXNpbHkgYWRkZWQuIFRoZSAKK3NlcmlhbCwgVVNCLCBhbmQgQmx1ZXRvb3RoIHByb3RvY29scyBhcmUgc3VwcG9ydGVkOyB0aGUgcGFyYWxsZWwgcG9ydCBpcyBub3QuIAorCitJZiB5b3Ugd2FudCBhbnkgaW5mb3JtYXRpb24gYWJvdXQgQWx2YSBwcm9kdWN0cywgeW91IHNob3VsZCBsb29rIGF0IHRoaXMKK3dlYiBzaXRlOiBodHRwOi8vd3d3Lm9wdGVsZWMuY29tCisKKworS2V5IEJpbmRpbmdzCis9PT09PT09PT09PT0KKworQWxsIHRoZSBrZXkgZGVmaW5pdGlvbnMgYXJlIGxpc3RlZCBpbiB0aGUga2V5IGJpbmRpbmdzIGNvbmZpZ3VyYXRpb24gZmlsZXMgCisodXN1YWxseSBmb3VuZCBpbiAvZXRjL2JybHR0eS9icmwtYWwtKikuIEVhY2ggZmlsZSBjb3JyZXNwb25kcyB0byBhbiBBbHZhIAorbW9kZWwuIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZSBmdW5jdGlvbnMgbGlzdGVkLCBzZWUgdGhlIEJSTFRUWSBtYW51YWwuIAorCitGb3IgYSBxdWljayBzdGFydCwgZW50ZXIgdGhlIGhlbHAgc2NyZWVuIGJ5OgorCisgICAzbm4gYW5kIDRubiBtb2RlbHM6IHByZXNzIHRoZSBQUk9HIGtleS4KKyAgIDVubiBtb2RlbHM6IHByZXNzIHRoZSBsZWZ0IG91dGVyIGtleSBvZiB0aGUgcmlnaHQgc2F0ZWxsaXRlIGtleXBhZC4KKyAgIDZubiBtb2RlbHM6IHByZXNzIGJvdGggcmVhciBFVG91Y2gga2V5cyB0b2dldGhlci4KKworRW50ZXIgaW50ZXJhY3RpdmUgY29tbWFuZCBsZWFybiBtb2RlIGJ5OgorCisgICA1bm4gbW9kZWxzOiBwcmVzcyB0aGUgcmlnaHQgb3V0ZXIga2V5IG9mIHRoZSByaWdodCBzYXRlbGxpdGUga2V5cGFkLgorICAgNm5uIG1vZGVsczogcHJlc3MgdGhlICBsZWZ0IHJlYXIgYW5kIHJpZ2h0IGZyb250IEVUb3VjaCBrZXlzIHRvZ2V0aGVyLgorCitTb21lIGtleXMgZm91bmQgb24gbGFyZ2VyIGRpc3BsYXkgbW9kZWxzIG1pZ2h0IG5vdCBiZSBib3VuZCB0byBhbnkgZnVuY3Rpb25zCithdCB0aGUgbW9tZW50LiBIb3dldmVyLCBpdCBpcyBwcmV0dHkgZWFzeSB0byBhZGQgbmV3IGJpbmRpbmdzLiAKKworCitTcGVjaWFsIENvbnNpZGVyYXRpb25zIGZvciB0aGUgQkM2eHggbW9kZWxzCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1RoZSBCQzZ4eCBtb2RlbHMgaGF2ZSBhbiBpbnRlcm5hbCBtZW51IHdpdGggbWFueSBjb25maWd1cmF0aW9uIG9wdGlvbnMuCitVbmZvcnR1bmF0ZWx5IHRoZSBkZWZhdWx0IHZhbHVlIGZvciBhIGZldyBvcHRpb25zIGFyZSBzdWJvcHRpbWFsIHdpdGggQlJMVFRZCithbmQgeW91IG1pZ2h0IHdhbnQgdG8gY29uc2lkZXIgY2hhbmdpbmcgdGhvc2Ugc2V0dGluZ3MgZm9yIGEgYmV0dGVyIHVzZXIKK2V4cGVyaWVuY2UuICBUbyBlbnRlciB0aGUgbG9jYWwgbWVudSBwcmVzcyBTbWFydFBhZCBrZXlzIDIsIDMgYW5kIERvd24KK3NpbXVsdGFuZW91c2x5LiAgVGhlIFNtYXJ0UGFkIGRpcmVjdGlvbiBrZXlzIGFyZSB0aGVuIHVzZWQgdG8gc2VsZWN0IGEKK3NldHRpbmcsIHRoZSBjZW50ZXIga2V5IHRvIGFsbG93IGNoYW5naW5nIGEgc2V0dGluZy4KKworUmVwZWF0IEtleXM6IFRoaXMgZGV0ZXJtaW5lcyBpZiB0aGUgYnJhaWxsZSB0ZXJtaW5hbCBzaG91bGQgc2VuZCByZXBlYXRlZAora2V5IGV2ZW50cyB3aGVuIGEga2V5IGlzIGhlbGQgZG93bi4gQlJMVFRZIGNhbiBhbHJlYWR5IG1hbmFnZSBrZXkgcmVwZXRpdGlvbnMKK2J5IGl0c2VsZiBpbiBhIGJldHRlciB3YXkgYW5kIHRoaXMgc2V0dGluZyBwcmV2ZW50cyBCUkxUVFkncyBzdXBwb3J0IGZyb20KK3dvcmtpbmcgcHJvcGVybHkuIFRoZXJlZm9yZSB5b3Ugc2hvdWxkIGNoYW5nZSB0aGlzIHNldHRpbmcgdG8gIm9mZiIuCisKKzJuZCBDdXJzb3IgUm91dGluZyByb3c6IFRoaXMgc2V0dGluZyBhbGxvd3MgZm9yIHNpbXVsYXRpbmcgYSBzZWNvbmQgcm93IG9mCitjdXJzb3Igcm91dGluZyBrZXlzIGFzIGZvdW5kIG9uIHNvbWUgZWFybGllciBBbHZhIG1vZGVscyBieSBob2xkaW5nIGRvd24gYQorY3Vyc29yIHJvdXRpbmcga2V5IGR1cmluZyBhIHNob3J0IHBlcmlvZC4gVGhpcyBjYXVzZXMgcHJvYmxlbXMgd2l0aCBCUkxUVFkncworbXVsdGkta2V5IGJpbmRpbmdzIGlmIGtleXMgYXJlIG5vdCBwcmVzc2VkIGluIGEgcGFydGljdWxhciBvcmRlci4gVG8gbWl0aWdhdGUKK3RoZSBwcm9ibGVtIHNsaWdodGx5LCBCUkxUVFkgY29uc2lkZXJzIHRoZSBmaXJzdCBhbmQgc2Vjb25kIHJvdXRpbmcga2V5IHJvd3MKK2FzIGJlaW5nIHRoZSBzYW1lIG9uIHRoZSBCQzZ4eCwgdGhvc2UgbW9kZWxzIGFjdHVhbGx5IGhhdmluZyBvbmx5IG9uZSBzdWNoCityb3cgb2Yga2V5cyBhbnl3YXkuICBJdCBpcyBiZXN0IHRvIHVzZSBCUkxUVFkncyBhYmlsaXR5IHRvIGJpbmQgZnVuY3Rpb25zCitvbiBoZWxkLWRvd24ga2V5cyBpbnN0ZWFkIGlmIG9uZSB3aXNoZXMgdG8gcHJlc2VydmUgdGhlIGFkZGl0aW9uYWwKK3Bvc3NpYmlsaXRpZXMgdGhpcyBzZXR0aW5nIG9mZmVycy4gVGhlcmVmb3JlIHlvdSBzaG91bGQgY2hhbmdlIHRoaXMgc2V0dGluZwordG8gIm9mZiIuCisKKworUG9ydCBTcGVjaWZpY2F0aW9uCis9PT09PT09PT09PT09PT09PT0KKworVGhpcyBkcml2ZXIgc3VwcG9ydHMgc2VyaWFsLCBVU0IsIGFuZCBCbHVldG9vdGggY29tbXVuaWNhdGlvbiBvbmx5LiBTb21lIAorcGFyYWxsZWwgcG9ydCBjb21tdW5pY2F0aW9uIGZvciBBQlQgbW9kZWxzIHdhcyBwcmV2aW91c2x5IHN1cHBvcnRlZCwgYnV0CitzaW5jZSB0aGF0IHN1cHBvcnQgd2FzIGJhc2VkIG9uIGEgbm9uLUdQTCBjb21wYXRpYmxlIGFuZCBiaW5hcnkgb25seQorbGlicmFyeSwgaXQgaGFzIGJlZW4gcmVtb3ZlZC4gV2hlbi9pZiBzb21lb25lIGNhbiBoZWxwIHdpdGggcHJvdmlkaW5nIHVzCit3aXRoIHRoZSBwcm9wZXIgcHJvdG9jb2wgaW5mb3JtYXRpb24sIHdlJ2xsIGJlIHBsZWFzZWQgdG8gd3JpdGUgYW4gb3Blbgorc291cmNlIHBhcmFsbGVsIHBvcnQgZHJpdmVyIGluIGNvbmZvcm1hbmNlIHdpdGggQlJMVFRZJ3MgbGljZW5zZS4KKworQnJsdHR5J3MgZGVmYXVsdCBwb3J0IGlzIHVzYjouIElmIHlvdSBuZWVkIHRvIHNwZWNpZnkgc29tZXRoaW5nIGVsc2UgcGxlYXNlIAorZm9sbG93IHRoZSBzdWdnZXN0aW9ucyBiZWxvdy4KKworVGhlcmUgYXJlIGEgbnVtYmVyIG9mIHdheXMgdG8gc3BlY2lmeSB0aGUgcG9ydCBvbiB0aGUgUEMgdG8gd2hpY2ggdGhlIGRpc3BsYXkgCitpcyBjb25uZWN0ZWQuIEhlcmUncyBhIHN1bW1hcnksIGFsdGhvdWdoIHlvdSBzaG91bGQgY2hlY2sgQlJMVFRZJ3MgbWFudWFsIGZvciAKK2FsbCBvZiB0aGUgZGV0YWlscy4KKworVGhlIGRlZmF1bHQgcHJvdG9jb2wgaXMgVVNCLiBJZiB5b3UnZCBsaWtlIHlvdXIgYnJsdHR5IGV4ZWN1dGFibGUgdG8gaGF2ZSBpdHMgCitvd24gdW5pcXVlIGRlZmF1bHQgcG9ydCB0aGVuIHVzZSB0aGUgLS13aXRoLWJyYWlsbGUtZGV2aWNlPSBvcHRpb24gb2YgdGhlIAorY29uZmlndXJlIHNjcmlwdCBpbiBCUkxUVFkncyB0b3AtbGV2ZWwgZGlyZWN0b3J5IGF0IGJ1aWxkLXRpbWUuIElmIHlvdSdkIGxpa2UgCit5b3VyIHN5c3RlbSB0byBoYXZlIGl0cyBvd24gdW5pcXVlIGRlZmF1bHQgcG9ydCByZWdhcmRsZXNzIG9mIHdoaWNoIGJybHR0eSAKK2V4ZWN1dGFibGUgaXMgYmVpbmcgdXNlZCB0aGVuIHVzZSB0aGUgYnJhaWxsZS1kZXZpY2UgZGlyZWN0aXZlIG9mIEJSTFRUWSdzIAorY29uZmlndXJhdGlvbiBmaWxlICh1c3VhbGx5ICIvZXRjL2JybHR0eS5jb25mIikuIElmIHlvdSdkIGxpa2UgdG8gc3BlY2lmeSBhIAorc3BlY2lmaWMgcG9ydCB3aGVuIGludm9raW5nIGJybHR0eSB0aGVuIHVzZSB0aGUgLWQgKG9yIC0tYnJhaWxsZS1kZXZpY2U9KSAKK2NvbW1hbmQgbGluZSBvcHRpb24uCisKK0ZvciBhIHNlcmlhbCBwb3J0LCBzcGVjaWZ5ICJzZXJpYWw6L3BhdGgvdG8vZGV2aWNlIi4gVGhlICJzZXJpYWw6IiBxdWFsaWZpZXIgaXMgCitvcHRpb25hbCAoZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkpLiBJZiBhIHJlbGF0aXZlIHBhdGggaXMgZ2l2ZW4gdGhlbiBpdCdzIAorYW5jaG9yZWQgYXQgIi9kZXYiICh0aGUgdXN1YWwgcGxhY2UgdGhhdCBkZXZpY2VzIGFyZSBmb3VuZCBvbiBhIFVuaXgtYmFzZWQgCitzeXN0ZW0pLiBUaGUgZm9sbG93aW5nIGRldmljZSBzcGVjaWZpY2F0aW9ucyBhbGwgcmVmZXIgdG8gdGhlIHByaW1hcnkgc2VyaWFsIAorcG9ydCBvbiBMaW51eDoKKworICAgc2VyaWFsOi9kZXYvdHR5UzAKKyAgIHNlcmlhbDp0dHlTMAorICAgL2Rldi90dHlTMAorICAgdHR5UzAKKworRm9yIGEgVVNCIHBvcnQsIHNwZWNpZnkgInVzYjoiLiBCUkxUVFkgd2lsbCBzZWFyY2ggZm9yIHRoZSBmaXJzdCBVU0IgZGV2aWNlIAord2hpY2ggbWF0Y2hlcyB0aGUgYnJhaWxsZSBkaXNwbGF5IGRyaXZlciBiZWluZyB1c2VkLiBJZiB0aGlzIGlzIGluYWRlcXVhdGUsIAorZS5nLiBpZiB5b3UgaGF2ZSBtb3JlIHRoYW4gb25lIFVTQiBicmFpbGxlIGRpc3BsYXkgd2hpY2ggcmVxdWlyZSB0aGUgc2FtZSAKK2RyaXZlciwgdGhlbiB5b3UgY2FuIHJlZmluZSB0aGUgZGV2aWNlIHNwZWNpZmljYXRpb24gYnkgYXBwZW5kaW5nIHRoZSBzZXJpYWwgCitudW1iZXIgb2YgdGhlIGRpc3BsYXkgdG8gaXQsIGUuZy4gInVzYjoxMjM0NSIuCisKKworU2VyaWFsIFBvcnQgQ29tbXVuaWNhdGlvbgorPT09PT09PT09PT09PT09PT09PT09PT09PQorCitCeSBkZWZhdWx0LCB0aGUgQUJUIGNvbW11bmljYXRlcyBhdCA5NjAwIEJQUy4gQWx0aG91Z2ggaGlnaGVyIGJhdWQgcmF0ZXMgCitjYW4gYmUgdXNlZCwgdGhlIGNvbW11bmljYXRpb24gYmVjb21lcyB1bnJlbGlhYmxlIGNyZWF0aW5nIG9jY2FzaW9uYWwgZXJyb3JzCitpbiB0aGUgZGlzcGxheWVkIGJyYWlsbGUuIFRoZXJlZm9yZSB0aGUgYmF1ZCByYXRlIGluIHRoZSBsb2NhbCBtZW51IG9mIHlvdXIKK0FCVCBzaG91bGQgcmVtYWluIHNldCB0byA5NjAwLgorCitXaXRoIHNlcmlhbCBjb21tdW5pY2F0aW9uLCB0aGUgQUJUIHNlcmlhbCBwb3J0IG11c3QgYmUgc2V0IHRvIGFsdmEtbW9kZSAodGhlIAorZGVmYXVsdCk7IHNlZSB0aGUgZGVzY3JpcHRpb24gb2YgJ0xvY2FsIE1vZGUnIGluIHRoZSBBQlQgbWFudWFsLiBUaGUgQUJUIHNlcmlhbCAKK3BvcnQgaGFzIHRoZSBzYW1lIGNvbm5lY3Rpb25zIGFzIHRoZSBzdGFuZGFyZCA5LXBpbiBzZXJpYWwgcG9ydCBvZiBhbiBJQk0gUEMuIAorVGhlcmVmb3JlLCBhIGNhYmxlIGNvbm5lY3RpbmcgdGhlIEFCVCB3aXRoIGEgUEMgbXVzdCBoYXZlIHRoZSBmb2xsb3dpbmcgd2lyZXM6CisKKzkgcGluIChBQlQpICAgICAgICA5IHBpbiAoUEMpICAgb3IgICAgMjUgcGluIChQQykKKworMSAgICAgICAgICAgICAgICAgIDEgICAgICAgICAgICAgICAgICA4IChDRCkKKzIgICAgICAgICAgICAgICAgICAzICAgICAgICAgICAgICAgICAgMiAoVEQpCiszICAgICAgICAgICAgICAgICAgMiAgICAgICAgICAgICAgICAgIDMgKFJEKQorNCAgICAgICAgICAgICAgICAgIDYgICAgICAgICAgICAgICAgICA2IChEU1IpCis1ICAgICAgICAgICAgICAgICAgNSAgICAgICAgICAgICAgICAgIDcgKEdORCkKKzYgICAgICAgICAgICAgICAgICA0ICAgICAgICAgICAgICAgICAgMjAgKERUUikKKzcgICAgICAgICAgICAgICAgICA4ICAgICAgICAgICAgICAgICAgNSAoQ1RTKQorOCAgICAgICAgICAgICAgICAgIDcgICAgICAgICAgICAgICAgICA0IChSVFMpCis5ICAgICAgICAgICAgICAgICAgOSAgICAgICAgICAgICAgICAgIDIyIChSSSkKKworVGhpcyBraW5kIG9mIGNhYmxlIGlzIGNhbGxlZCBhICJudWxsIG1vZGVtIiAob3IgImNyb3NzIG92ZXIiKSBjYWJsZS4gQWxsIAorY29ubmVjdG9ycyBhcmUgZmVtYWxlIEQgY29ubmVjdG9ycy4KKworTk9URTogUHJvYmxlbXMgdXNpbmcgdGhlIHNlcmlhbCBwb3J0IG1heSBvY2N1ciBpbiBzb21lIGNpcmN1bXN0YW5jZXMgaWYKK3RoZSBwYXJhbGxlbCBwb3J0IGlzIGFsc28gY29ubmVjdGVkLiBJZiBCUkxUVFkgc2VlbXMgdG8gd29yayBidXQgZXhoaWJpdHMgCitzdHJhbmdlIGJlaGF2aW91ciwgdGhlbiB0cnlpbmcgZGlzY29ubmVjdGluZyB0aGUgcGFyYWxsZWwgcG9ydCBjYWJsZQorbWF5IGhlbHAuCisKKworQUJUM3h4IEZpcm13YXJlIFZlcnNpb24gCis9PT09PT09PT09PT09PT09PT09PT09PQorCitCUkxUVFkgbm8gbG9uZ2VyIHN1cHBvcnRzIEFCVDN4eCBmaXJtd2FyZSB2ZXJzaW9ucyBvbGRlciB0aGFuIDAxMDQ5NS4KK1RvIGdldCB0aGUgZmlybXdhcmUgdmVyc2lvbiwgc2ltcGx5IHBvd2VyIHVwIHlvdXIgQUJUIHdoaWxlIG5vdCBjb25uZWN0ZWQKK3RvIGEgY29tcHV0ZXIuIFRoZSBsYXN0IGRpZ2l0cyB0aGF0IHdpbGwgYXBwZWFyIG9uIHRoZSBicmFpbGxlIGRpc3BsYXkKK2NvcnJlc3BvbmQgdG8gdGhlIGZpcm13YXJlIHZlcnNpb24uIElmIHRoZSBmaXJtd2FyZSBpcyB0b28gb2xkIHRoZW4gaXQKK25lZWRzIHRvIGJlIHVwZ3JhZGVkIHRvIGF0IGxlYXN0IHZlcnNpb24gMDEwNDk1LgorCisKK05pY29sYXMgUGl0cmUgPG5pY29AZmx1eG5pYy5uZXQ+CitKYW51YXJ5IDE0LCAyMDE0CmRpZmYgLS1naXQgYS9Ecml2ZXJzL0JyYWlsbGUvQWx2YS9icmFpbGxlLmMgYi9Ecml2ZXJzL0JyYWlsbGUvQWx2YS9icmFpbGxlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDdmYjQ1NwotLS0gL2Rldi9udWxsCisrKyBiL0RyaXZlcnMvQnJhaWxsZS9BbHZhL2JyYWlsbGUuYwpAQCAtMCwwICsxLDIwMzIgQEAKKy8qCisgKiBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorICogICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorICoKKyAqIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorICoKKyAqIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyAqLworCisvKiBBbHZhL2JyYWlsbGUuY2MgLSBCcmFpbGxlIGRpc3BsYXkgbGlicmFyeSBmb3IgQWx2YSBicmFpbGxlIGRpc3BsYXlzCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAwMiBieSBOaWNvbGFzIFBpdHJlIDxuaWNvQGZsdXhuaWMubmV0PgorICogU2VlIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIGRldGFpbHMgaW4gdGhlIExJQ0VOU0UtTEdQTCBmaWxlCisgKgorICovCisKKy8qIENoYW5nZXM6CisgKiAgICBqYW51YXJ5IDIwMDQ6CisgKiAgICAgICAgICAgICAgLSBBZGRlZCBVU0Igc3VwcG9ydC4KKyAqICAgICAgICAgICAgICAtIEltcHJvdmVkIGtleSBiaW5kaW5ncyBmb3IgU2F0ZWxsaXRlIG1vZGVscy4KKyAqICAgICAgICAgICAgICAtIE1vdmVkIGF1dG9yZXBlYXQgKHR5cGVtYXRpYykgc3VwcG9ydCB0byB0aGUgY29yZS4KKyAqICAgIHNlcHRlbWJlciAyMDAyOgorICoJCS0gVGhpcyBwZXNreSBiaW5hcnkgb25seSBwYXJhbGxlbCBwb3J0IGxpYnJhcnkgaXMganVzdAorICoJCSAgY2F1c2luZyB0cm91YmxlIChub3QgY29tcGF0aWJsZSB3aXRoIG5ldyBjb21waWxlcnMsIGV0YykuCisgKgkJICBJdCBpcyBhbHNvIHVuY2xlYXIgaWYgZGlzdHJpYnV0aW9uIG9mIHN1Y2ggY2xvc2VkIHNvdXJjZQorICoJCSAgbGlicmFyeSBpcyBhbGxvd2VkIHdpdGhpbiBhIEdQTCdlZCBwcm9ncmFtIGFyY2hpdmUuCisgKgkJICBMZXQncyBqdXN0IG51a2UgaXQgdW50aWwgd2UgY2FuIHdyaXRlIGFuIG9wZW4gc291cmNlIG9uZS4KKyAqCQktIENvbnZlcnRlZCB0aGlzIGZpbGUgYmFjayB0byBwdXJlIEMgc291cmNlLgorICogICAgbWF5IDIxLCAxOTk5OgorICoJCS0gQWRkZWQgQWx2YSBEZWxwaGkgODAgc3VwcG9ydC4gIFRoYW5rcyB0byA/Pz8KKyoJCSAgPGNzdHJvYmVsQGNyb3NzbGluay5uZXQ+LgorICogICAgbWFyIDE0LCAxOTk5OgorICoJCS0gQWRkZWQgTG9nUHJpbnQncyAod2hpY2ggaXMgYSBnb29kIHRoaW5nLi4uKQorICoJCS0gVWdseSB1Z2x5IGhhY2sgZm9yIHBhcmFsbGVsIHBvcnQgc3VwcG9ydDogIHNlZW1zIHRoZXJlCisgKgkJICBpcyBhIGJ1ZyBpbiB0aGUgcGFyYWxsZWwgcG9ydCBsaWJyYXJ5IHNvIHRoYXQgdGhlIGRpc3BsYXkKKyAqCQkgIGNvbXBsZXRlbHkgaGFuZyBhZnRlciBhbiBhcmJpdHJhcnkgcGVyaW9kIG9mIHRpbWUuCisgKgkJICBKLiBMZW1tZW5zIGRpZG4ndCByZXNwb25kIHRvIG15IHF1ZXJ5IHlldC4uLiBhbmQgc2luY2UKKyAqCQkgIHRoZSBGKioqaW5nIGxpYnJhcnkgaXNuJ3QgT3BlbiBTb3VyY2UsIEkgY2FuJ3QgZml4IGl0LgorICogICAgZmViIDA1LCAxOTk5OgorICoJCS0gQWRkZWQgQWx2YSBEZWxwaGkgc3VwcG9ydCAgKHRoYW5rcyB0byBUZXJyeSBCYXJuYWJ5IAorICoJCSAgPHRlcnJ5QGJlYW0uZGVtb24uY28udWs+KS4KKyAqCQktIFJlbmFtZWQgQWx2YV9BQlQzIHRvIEFsdmEuCisgKgkJLSBTb21lIGltcHJvdmVtZW50cyB0byB0aGUgYXV0b2RldGVjdGlvbiBzdHVmZi4KKyAqICAgIGRlYyAwNiwgMTk5ODoKKyAqCQktIGFkZGVkIHBhcmFsbGVsIHBvcnQgY29tbXVuaWNhdGlvbiBzdXBwb3J0IHVzaW5nCisgKgkJICBKLiBsZW1tZW5zIDxqbGVtbWVuc0BpbnRlci5ubC5uZXQ+ICdzIGxpYnJhcnkuCisgKgkJICBUaGlzIHJlcXVpcmVkIGJybC5vIHRvIGJlIHNvdXJjZWQgd2l0aCBDKysgZm9yIHRoZSBwYXJhbGxlbCAKKyAqCQkgIHN0dWZmIHRvIGxpbmsuICBOb3cgYnJsLm8gaXMgYSBwYXJ0aWFsIGxpbmsgb2YgYnJsbWFpbi5vIAorICoJCSAgYW5kIHRoZSBhYm92ZSBsaWJyYXJ5LgorICogICAganVuIDIxLCAxOTk4OgorICoJCS0gcmVwbGFjZWQgQ01EX1dJTlVQL0ROIHdpdGggQ01EX0FUVFJVUC9ETiB3aWNoIHNlZW1zCisgKgkJICB0byBiZSBhIG1vcmUgdXNlZnVsIGJpbmRpbmcuICBNb2RpZmllZCBoZWxwIGZpbGVzIAorICoJCSAgYWNvcmRpbmdseS4KKyAqICAgIGFwciAyMywgMTk5ODoKKyAqCQktIEkgZmluYWxseSBoYWQgdGhlIGNoYW5jZSB0byB0ZXN0IHdpdGggYW4gQUJUMzgwLi4uIGFuZAorICoJCSAgY29ycmVjdGVkIHRoZSBBQlQzODAgbW9kZWwgSUQgZm9yIGF1dG9kZXRlY3Rpb24uCisgKgkJLSBBZGRlZCBhIHJlZnJlc2ggZGVsYXkgdG8gZm9yY2UgcmVkcmF3aW5nIHRoZSB3aG9sZSBkaXNwbGF5CisgKgkJICBpbiBvcmRlciB0byBtaW5pbWl6ZSBnYXJiYWdlIGR1ZSB0byBub2lzZSBvbiB0aGUgCisgKgkJICBzZXJpYWwgbGluZQorICogICAgb2N0IDAyLCAxOTk2OgorICoJCS0gYm91bmQgQ01EX1NBWV9MSU5FIGFuZCBDTURfTVVURQorICogICAgc2VwIDIyLCAxOTk2OgorICoJCS0gYm91bmQgQ01EX1BSRElGTE4gYW5kIENNRF9OWERJRkxOLgorICogICAgYXVnIDE1LCAxOTk2OgorICogICAgICAgICAgICAgIC0gYWRlZGVkIGF1dG9tYXRpYyBtb2RlbCBkZXRlY3Rpb24gZm9yIG5ldyBmaXJtd2FyZS4KKyAqICAgICAgICAgICAgICAtIHN1cHBvcnQgZm9yIHNlbGVjdGFibGUgaGVscCBzY3JlZW4uCisgKiAgICBmZWIgMTksIDE5OTY6IAorICogICAgICAgICAgICAgIC0gYWRkZWQgc21hbGwgaGFjayBmb3IgYXV0b21hdGljIHJld3JpdGUgb2YgZGlzcGxheSB3aGVuCisgKiAgICAgICAgICAgICAgICB0aGUgdGVybWluYWwgaXMgdHVybmVkIG9mZiBhbmQgYmFjayBvbiwgcmVwbHVnZ2VkLCBldGMuCisgKiAgICAgIGZlYiAxNSwgMTk5NjoKKyAqICAgICAgICAgICAgICAtIE1vZGlmaWVkIHdyaXRlYnJsKCkgZm9yIGxvd2VyIGJhbmR3aXRoCisgKiAgICAgICAgICAgICAgLSBKb2luZWQgdGhlIGZvcmNlZCBSZVdyaXRlIGZ1bmN0aW9uIHRvIHRoZSBDVVJTT1Iga2V5CisgKiAgICAgIGphbiAzMSwgMTk5NjoKKyAqICAgICAgICAgICAgICAtIG1vdmVkIHVzZXIgY29uZmlndXJhYmxlIHBhcmFtZXRlcnMgaW50byBicmxjb25mLmgKKyAqICAgICAgICAgICAgICAtIGFkZGVkIGlkZW50YnJsKCkKKyAqICAgICAgICAgICAgICAtIGFkZGVkIG92ZXJpZGUgcGFyYW1ldGVyIGZvciBzZXJpYWwgZGV2aWNlCisgKiAgICAgICAgICAgICAgLSBhZGRlZCBrZXliaW5kaW5ncyBmb3IgQlJMVFRZIHByZWZlcmVuY2VzIG1lbnUKKyAqICAgICAgamFuIDIzLCAxOTk2OgorICogICAgICAgICAgICAgIC0gbW9kaWZpY2F0aW9ucyB0byBiZSBjb21wYXRpYmxlIHdpdGggdGhlIEJSTFRUWSBicmFpbGxlCisgKiAgICAgICAgICAgICAgICBtYXBwaW5nIHN0YW5kYXJkLgorICogICAgICBkZWMgMjcsIDE5OTU6CisgKiAgICAgICAgICAgICAgLSBBZGRlZCBjb25kaXRpb25zIHRvIHN1cHBvcnQgYWxsIEFCVDN4eCBzZXJpZXMKKyAqICAgICAgICAgICAgICAtIGNoYW5nZWQgZGlyZWN0b3J5IEFsdmFfQUJUNDAgdG8gQWx2YV9BQlQzCisgKiAgICAgIGRlYyAwMiwgMTk5NToKKyAqICAgICAgICAgICAgICAtIG1hZGUgY2hhbmdlcyB0byBzdXBwb3J0IGxhdGVzdCBBbHZhIEFCVDMgZmlybXdhcmUgKG5ldworICogICAgICAgICAgICAgICAgc2VyaWFsIHByb3RvY29sKS4KKyAqICAgICAgbm92IDA1LCAxOTk1OgorICogICAgICAgICAgICAgIC0gYWRkZWQgdHlwZW1hdGljIGZhY2lsaXR5CisgKiAgICAgICAgICAgICAgLSBhZGRlZCBrZXkgYmluZGluZ3MgZm9yIFN0ZXBoYW5lIERveW9uJ3MgY3V0J24gcGFzdGUuCisgKiAgICAgICAgICAgICAgLSBhZGRlZCBjdXJzb3Igcm91dGluZyBrZXkgYmxvY2sgbWFya2luZworICogICAgICAgICAgICAgIC0gZml4ZWQgYSBidWcgaW4gcmVhZGJybCgpIGFib3V0IHJlbGVhc2VkIGtleXMKKyAqICAgICAgc2VwIDMwJyAxOTk1OgorICogICAgICAgICAgICAgIC0gaW5pdGlhbCBBbHZhIGRyaXZlciBjb2RlLCBpbnNwaXJlZCBmcm9tIHRoZQorICogICAgICAgICAgICAgICAgKG9sZCkgQnJhaWxsZUxpdGUgY29kZS4KKyAqLworCisjaW5jbHVkZSAicHJvbG9ndWUuaCIKKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKworI2luY2x1ZGUgImxvZy5oIgorI2luY2x1ZGUgInN0cmZtdC5oIgorI2luY2x1ZGUgInBhcnNlLmgiCisjaW5jbHVkZSAiYml0ZmllbGQuaCIKKyNpbmNsdWRlICJ0aW1pbmcuaCIKKyNpbmNsdWRlICJhc2NpaS5oIgorI2luY2x1ZGUgImhpZGtleXMuaCIKKyNpbmNsdWRlICJpb19nZW5lcmljLmgiCisjaW5jbHVkZSAiaW9fdXNiLmgiCisjaW5jbHVkZSAidXNiX2hpZC5oIgorCit0eXBlZGVmIGVudW0geworICBQQVJNX1JPVEFURURfQ0VMTFMsCisgIFBBUk1fU0VDT05EQVJZX1JPVVRJTkdfS0VZX0VNVUxBVElPTgorfSBEcml2ZXJQYXJhbWV0ZXI7CisjZGVmaW5lIEJSTFBBUk1TICJyb3RhdGVkY2VsbHMiLCAic2Vjb25kYXJ5cm91dGluZ2tleWVtdWxhdGlvbiIKKworI2RlZmluZSBCUkxfU1RBVFVTX0ZJRUxEUyBzZkFscGhhYmV0aWNDdXJzb3JDb29yZGluYXRlcywgc2ZBbHBoYWJldGljV2luZG93Q29vcmRpbmF0ZXMsIHNmU3RhdGVMZXR0ZXIKKyNkZWZpbmUgQlJMX0hBVkVfU1RBVFVTX0NFTExTCisjaW5jbHVkZSAiYnJsX2RyaXZlci5oIgorI2luY2x1ZGUgImJybGRlZnMtYWwuaCIKKyNpbmNsdWRlICJicmFpbGxlLmgiCisKK0JFR0lOX0tFWV9OQU1FX1RBQkxFKHJvdXRpbmcxKQorICBLRVlfR1JPVVBfRU5UUlkoQUxfR1JQX1JvdXRpbmdLZXlzMSwgIlJvdXRpbmdLZXkxIiksCitFTkRfS0VZX05BTUVfVEFCTEUKKworQkVHSU5fS0VZX05BTUVfVEFCTEUocm91dGluZzIpCisgIEtFWV9HUk9VUF9FTlRSWShBTF9HUlBfUm91dGluZ0tleXMyLCAiUm91dGluZ0tleTIiKSwKK0VORF9LRVlfTkFNRV9UQUJMRQorCitCRUdJTl9LRVlfTkFNRV9UQUJMRShzdGF0dXMxKQorICBLRVlfTkFNRV9FTlRSWShBTF9LRVlfU1RBVFVTMSswLCAiU3RhdHVzMUEiKSwKKyAgS0VZX05BTUVfRU5UUlkoQUxfS0VZX1NUQVRVUzErMSwgIlN0YXR1czFCIiksCisgIEtFWV9OQU1FX0VOVFJZKEFMX0tFWV9TVEFUVVMxKzIsICJTdGF0dXMxQyIpLAorICBLRVlfTkFNRV9FTlRSWShBTF9LRVlfU1RBVFVTMSszLCAiU3RhdHVzMUQiKSwKKyAgS0VZX05BTUVfRU5UUlkoQUxfS0VZX1NUQVRVUzErNCwgIlN0YXR1czFFIiksCisgIEtFWV9OQU1FX0VOVFJZKEFMX0tFWV9TVEFUVVMxKzUsICJTdGF0dXMxRiIpLAorRU5EX0tFWV9OQU1FX1RBQkxFCisKK0JFR0lOX0tFWV9OQU1FX1RBQkxFKHN0YXR1czIpCisgIEtFWV9OQU1FX0VOVFJZKEFMX0tFWV9TVEFUVVMyKzAsICJTdGF0dXMyQSIpLAorICBLRVlfTkFNRV9FTlRSWShBTF9LRVlfU1RBVFVTMisxLCAiU3RhdHVzMkIiKSwKKyAgS0VZX05BTUVfRU5UUlkoQUxfS0VZX1NUQVRVUzIrMiwgIlN0YXR1czJDIiksCisgIEtFWV9OQU1FX0VOVFJZKEFMX0tFWV9TVEFUVVMyKzMsICJTdGF0dXMyRCIpLAorICBLRVlfTkFNRV9FTlRSWShBTF9LRVlfU1RBVFVTMis0LCAiU3RhdHVzMkUiKSwKKyAgS0VZX05BTUVfRU5UUlkoQUxfS0VZX1NUQVRVUzIrNSwgIlN0YXR1czJGIiksCitFTkRfS0VZX05BTUVfVEFCTEUKKworQkVHSU5fS0VZX05BTUVfVEFCTEUoYWJ0X2Jhc2ljKQorICBLRVlfTkFNRV9FTlRSWShBTF9LRVlfUHJvZywgIlByb2ciKSwKKyAgS0VZX05BTUVfRU5UUlkoQUxfS0VZX0hvbWUsICJIb21lIiksCisgIEtFWV9OQU1FX0VOVFJZKEFMX0tFWV9DdXJzb3IsICJDdXJzb3IiKSwKKworICBLRVlfTkFNRV9FTlRSWShBTF9LRVlfVXAsICJVcCIpLAorICBLRVlfTkFNRV9FTlRSWShBTF9LRVlfTGVmdCwgIkxlZnQiKSwKKyAgS0VZX05BTUVfRU5UUlkoQUxfS0VZX1JpZ2h0LCAiUmlnaHQiKSwKKyAgS0VZX05BTUVfRU5UUlkoQUxfS0VZX0Rvd24sICJEb3duIiksCitFTkRfS0VZX05BTUVfVEFCTEUKKworQkVHSU5fS0VZX05BTUVfVEFCTEUoYWJ0X2V4dHJhKQorICBLRVlfTkFNRV9FTlRSWShBTF9LRVlfQ3Vyc29yMiwgIkN1cnNvcjIiKSwKKyAgS0VZX05BTUVfRU5UUlkoQUxfS0VZX0hvbWUyLCAiSG9tZTIiKSwKKyAgS0VZX05BTUVfRU5UUlkoQUxfS0VZX1Byb2cyLCAiUHJvZzIiKSwKK0VORF9LRVlfTkFNRV9UQUJMRQorCitCRUdJTl9LRVlfTkFNRV9UQUJMRShzYXRfYmFzaWMpCisgIEtFWV9OQU1FX0VOVFJZKEFMX0tFWV9Ib21lLCAiSG9tZSIpLAorICBLRVlfTkFNRV9FTlRSWShBTF9LRVlfQ3Vyc29yLCAiQ3Vyc29yIiksCisKKyAgS0VZX05BTUVfRU5UUlkoQUxfS0VZX1VwLCAiVXAiKSwKKyAgS0VZX05BTUVfRU5UUlkoQUxfS0VZX0xlZnQsICJMZWZ0IiksCisgIEtFWV9OQU1FX0VOVFJZKEFMX0tFWV9SaWdodCwgIlJpZ2h0IiksCisgIEtFWV9OQU1FX0VOVFJZKEFMX0tFWV9Eb3duLCAiRG93biIpLAorCisgIEtFWV9OQU1FX0VOVFJZKEFMX0tFWV9TcGVlY2hQYWRGMSwgIlNwZWVjaFBhZEYxIiksCisgIEtFWV9OQU1FX0VOVFJZKEFMX0tFWV9TcGVlY2hQYWRVcCwgIlNwZWVjaFBhZFVwIiksCisgIEtFWV9OQU1FX0VOVFJZKEFMX0tFWV9TcGVlY2hQYWRMZWZ0LCAiU3BlZWNoUGFkTGVmdCIpLAorICBLRVlfTkFNRV9FTlRSWShBTF9LRVlfU3BlZWNoUGFkRG93biwgIlNwZWVjaFBhZERvd24iKSwKKyAgS0VZX05BTUVfRU5UUlkoQUxfS0VZX1NwZWVjaFBhZFJpZ2h0LCAiU3BlZWNoUGFkUmlnaHQiKSwKKyAgS0VZX05BTUVfRU5UUlkoQUxfS0VZX1NwZWVjaFBhZEYyLCAiU3BlZWNoUGFkRjIiKSwKKworICBLRVlfTkFNRV9FTlRSWShBTF9LRVlfTmF2UGFkRjEsICJOYXZQYWRGMSIpLAorICBLRVlfTkFNRV9FTlRSWShBTF9LRVlfTmF2UGFkVXAsICJOYXZQYWRVcCIpLAorICBLRVlfTkFNRV9FTlRSWShBTF9LRVlfTmF2UGFkTGVmdCwgIk5hdlBhZExlZnQiKSwKKyAgS0VZX05BTUVfRU5UUlkoQUxfS0VZX05hdlBhZERvd24sICJOYXZQYWREb3duIiksCisgIEtFWV9OQU1FX0VOVFJZKEFMX0tFWV9OYXZQYWRSaWdodCwgIk5hdlBhZFJpZ2h0IiksCisgIEtFWV9OQU1FX0VOVFJZKEFMX0tFWV9OYXZQYWRGMiwgIk5hdlBhZEYyIiksCitFTkRfS0VZX05BTUVfVEFCTEUKKworQkVHSU5fS0VZX05BTUVfVEFCTEUoc2F0X2V4dHJhKQorICBLRVlfTkFNRV9FTlRSWShBTF9LRVlfTGVmdFR1bWJsZXJMZWZ0LCAiTGVmdFR1bWJsZXJMZWZ0IiksCisgIEtFWV9OQU1FX0VOVFJZKEFMX0tFWV9MZWZ0VHVtYmxlclJpZ2h0LCAiTGVmdFR1bWJsZXJSaWdodCIpLAorICBLRVlfTkFNRV9FTlRSWShBTF9LRVlfUmlnaHRUdW1ibGVyTGVmdCwgIlJpZ2h0VHVtYmxlckxlZnQiKSwKKyAgS0VZX05BTUVfRU5UUlkoQUxfS0VZX1JpZ2h0VHVtYmxlclJpZ2h0LCAiUmlnaHRUdW1ibGVyUmlnaHQiKSwKK0VORF9LRVlfTkFNRV9UQUJMRQorCitCRUdJTl9LRVlfTkFNRV9UQUJMRShldG91Y2gpCisgIEtFWV9OQU1FX0VOVFJZKEFMX0tFWV9FVG91Y2hMZWZ0UmVhciwgIkVUb3VjaExlZnRSZWFyIiksCisgIEtFWV9OQU1FX0VOVFJZKEFMX0tFWV9FVG91Y2hMZWZ0RnJvbnQsICJFVG91Y2hMZWZ0RnJvbnQiKSwKKyAgS0VZX05BTUVfRU5UUlkoQUxfS0VZX0VUb3VjaFJpZ2h0UmVhciwgIkVUb3VjaFJpZ2h0UmVhciIpLAorICBLRVlfTkFNRV9FTlRSWShBTF9LRVlfRVRvdWNoUmlnaHRGcm9udCwgIkVUb3VjaFJpZ2h0RnJvbnQiKSwKK0VORF9LRVlfTkFNRV9UQUJMRQorCitCRUdJTl9LRVlfTkFNRV9UQUJMRShzbWFydHBhZCkKKyAgS0VZX05BTUVfRU5UUlkoQUxfS0VZX1NtYXJ0cGFkRjEsICJTbWFydHBhZEYxIiksCisgIEtFWV9OQU1FX0VOVFJZKEFMX0tFWV9TbWFydHBhZEYyLCAiU21hcnRwYWRGMiIpLAorICBLRVlfTkFNRV9FTlRSWShBTF9LRVlfU21hcnRwYWRMZWZ0LCAiU21hcnRwYWRMZWZ0IiksCisgIEtFWV9OQU1FX0VOVFJZKEFMX0tFWV9TbWFydHBhZEVudGVyLCAiU21hcnRwYWRFbnRlciIpLAorICBLRVlfTkFNRV9FTlRSWShBTF9LRVlfU21hcnRwYWRVcCwgIlNtYXJ0cGFkVXAiKSwKKyAgS0VZX05BTUVfRU5UUlkoQUxfS0VZX1NtYXJ0cGFkRG93biwgIlNtYXJ0cGFkRG93biIpLAorICBLRVlfTkFNRV9FTlRSWShBTF9LRVlfU21hcnRwYWRSaWdodCwgIlNtYXJ0cGFkUmlnaHQiKSwKKyAgS0VZX05BTUVfRU5UUlkoQUxfS0VZX1NtYXJ0cGFkRjMsICJTbWFydHBhZEYzIiksCisgIEtFWV9OQU1FX0VOVFJZKEFMX0tFWV9TbWFydHBhZEY0LCAiU21hcnRwYWRGNCIpLAorRU5EX0tFWV9OQU1FX1RBQkxFCisKK0JFR0lOX0tFWV9OQU1FX1RBQkxFKHRodW1iKQorICBLRVlfTkFNRV9FTlRSWShBTF9LRVlfVEhVTUIrMCwgIlRodW1iTGVmdCIpLAorICBLRVlfTkFNRV9FTlRSWShBTF9LRVlfVEhVTUIrMSwgIlRodW1iVXAiKSwKKyAgS0VZX05BTUVfRU5UUlkoQUxfS0VZX1RIVU1CKzIsICJUaHVtYkhvbWUiKSwKKyAgS0VZX05BTUVfRU5UUlkoQUxfS0VZX1RIVU1CKzMsICJUaHVtYkRvd24iKSwKKyAgS0VZX05BTUVfRU5UUlkoQUxfS0VZX1RIVU1CKzQsICJUaHVtYlJpZ2h0IiksCitFTkRfS0VZX05BTUVfVEFCTEUKKworQkVHSU5fS0VZX05BTUVfVEFCTEUoZmVhdHVyZXBhY2spCisgIEtFWV9OQU1FX0VOVFJZKEFMX0tFWV9Eb3QxLCAiRG90MSIpLAorICBLRVlfTkFNRV9FTlRSWShBTF9LRVlfRG90MiwgIkRvdDIiKSwKKyAgS0VZX05BTUVfRU5UUlkoQUxfS0VZX0RvdDMsICJEb3QzIiksCisgIEtFWV9OQU1FX0VOVFJZKEFMX0tFWV9Eb3Q0LCAiRG90NCIpLAorICBLRVlfTkFNRV9FTlRSWShBTF9LRVlfRG90NSwgIkRvdDUiKSwKKyAgS0VZX05BTUVfRU5UUlkoQUxfS0VZX0RvdDYsICJEb3Q2IiksCisgIEtFWV9OQU1FX0VOVFJZKEFMX0tFWV9Eb3Q3LCAiRG90NyIpLAorICBLRVlfTkFNRV9FTlRSWShBTF9LRVlfRG90OCwgIkRvdDgiKSwKKyAgS0VZX05BTUVfRU5UUlkoQUxfS0VZX0NvbnRyb2wsICJDb250cm9sIiksCisgIEtFWV9OQU1FX0VOVFJZKEFMX0tFWV9XaW5kb3dzLCAiV2luZG93cyIpLAorICBLRVlfTkFNRV9FTlRSWShBTF9LRVlfU3BhY2UsICJTcGFjZSIpLAorICBLRVlfTkFNRV9FTlRSWShBTF9LRVlfQWx0LCAiQWx0IiksCisgIEtFWV9OQU1FX0VOVFJZKEFMX0tFWV9FbnRlciwgIkVudGVyIiksCitFTkRfS0VZX05BTUVfVEFCTEUKKworQkVHSU5fS0VZX05BTUVfVEFCTEUoZWwpCisgIEtFWV9OQU1FX0VOVFJZKEFMX0tFWV9Eb3QxLCAiRG90MSIpLAorICBLRVlfTkFNRV9FTlRSWShBTF9LRVlfRG90MiwgIkRvdDIiKSwKKyAgS0VZX05BTUVfRU5UUlkoQUxfS0VZX0RvdDMsICJEb3QzIiksCisgIEtFWV9OQU1FX0VOVFJZKEFMX0tFWV9Eb3Q0LCAiRG90NCIpLAorICBLRVlfTkFNRV9FTlRSWShBTF9LRVlfRG90NSwgIkRvdDUiKSwKKyAgS0VZX05BTUVfRU5UUlkoQUxfS0VZX0RvdDYsICJEb3Q2IiksCisKKyAgS0VZX05BTUVfRU5UUlkoQUxfS0VZX0RvdDcsICJTaGlmdCIpLAorICBLRVlfTkFNRV9FTlRSWShBTF9LRVlfU3BhY2UsICJTcGFjZSIpLAorICBLRVlfTkFNRV9FTlRSWShBTF9LRVlfRG90OCwgIkNvbnRyb2wiKSwKKworICBLRVlfTkFNRV9FTlRSWShBTF9LRVlfU21hcnRwYWRFbnRlciwgIkpveXN0aWNrRW50ZXIiKSwKKyAgS0VZX05BTUVfRU5UUlkoQUxfS0VZX1NtYXJ0cGFkTGVmdCwgIkpveXN0aWNrTGVmdCIpLAorICBLRVlfTkFNRV9FTlRSWShBTF9LRVlfU21hcnRwYWRSaWdodCwgIkpveXN0aWNrUmlnaHQiKSwKKyAgS0VZX05BTUVfRU5UUlkoQUxfS0VZX1NtYXJ0cGFkVXAsICJKb3lzdGlja1VwIiksCisgIEtFWV9OQU1FX0VOVFJZKEFMX0tFWV9TbWFydHBhZERvd24sICJKb3lzdGlja0Rvd24iKSwKKworICBLRVlfTkFNRV9FTlRSWShBTF9LRVlfVEhVTUIrMCwgIlNjcm9sbExlZnQiKSwKKyAgS0VZX05BTUVfRU5UUlkoQUxfS0VZX1RIVU1CKzQsICJTY3JvbGxSaWdodCIpLAorCisgIEtFWV9HUk9VUF9FTlRSWShBTF9HUlBfUm91dGluZ0tleXMxLCAiUm91dGluZ0tleSIpLAorRU5EX0tFWV9OQU1FX1RBQkxFCisKK0JFR0lOX0tFWV9OQU1FX1RBQkxFKHZveWFnZXIpCisgIEtFWV9OQU1FX0VOVFJZKEFMX0tFWV9USFVNQiswLCAiVGh1bWIxIiksCisgIEtFWV9OQU1FX0VOVFJZKEFMX0tFWV9USFVNQisxLCAiVGh1bWIyIiksCisgIEtFWV9OQU1FX0VOVFJZKEFMX0tFWV9USFVNQiszLCAiVGh1bWIzIiksCisgIEtFWV9OQU1FX0VOVFJZKEFMX0tFWV9USFVNQis0LCAiVGh1bWI0IiksCisKKyAgS0VZX05BTUVfRU5UUlkoQUxfS0VZX1NtYXJ0cGFkTGVmdCwgIkxlZnQiKSwKKyAgS0VZX05BTUVfRU5UUlkoQUxfS0VZX1NtYXJ0cGFkVXAsICJVcCIpLAorICBLRVlfTkFNRV9FTlRSWShBTF9LRVlfU21hcnRwYWREb3duLCAiRG93biIpLAorICBLRVlfTkFNRV9FTlRSWShBTF9LRVlfU21hcnRwYWRSaWdodCwgIlJpZ2h0IiksCisKKyAgS0VZX05BTUVfRU5UUlkoQUxfS0VZX1NtYXJ0cGFkRjEsICJEb3QxIiksCisgIEtFWV9OQU1FX0VOVFJZKEFMX0tFWV9TbWFydHBhZEYyLCAiRG90MiIpLAorICBLRVlfTkFNRV9FTlRSWShBTF9LRVlfU21hcnRwYWRGMywgIkRvdDMiKSwKKyAgS0VZX05BTUVfRU5UUlkoQUxfS0VZX1NtYXJ0cGFkRjQsICJEb3Q0IiksCisKKyAgS0VZX05BTUVfRU5UUlkoQUxfS0VZX0VUb3VjaExlZnRSZWFyLCAiRG90NSIpLAorICBLRVlfTkFNRV9FTlRSWShBTF9LRVlfRVRvdWNoTGVmdEZyb250LCAiRG90NiIpLAorICBLRVlfTkFNRV9FTlRSWShBTF9LRVlfRVRvdWNoUmlnaHRSZWFyLCAiRG90NyIpLAorICBLRVlfTkFNRV9FTlRSWShBTF9LRVlfRVRvdWNoUmlnaHRGcm9udCwgIkRvdDgiKSwKKworICBLRVlfR1JPVVBfRU5UUlkoQUxfR1JQX1JvdXRpbmdLZXlzMSwgIlJvdXRpbmdLZXkiKSwKK0VORF9LRVlfTkFNRV9UQUJMRQorCitCRUdJTl9LRVlfTkFNRV9UQUJMRVMoYWJ0X3NtYWxsKQorICBLRVlfTkFNRV9UQUJMRShhYnRfYmFzaWMpLAorICBLRVlfTkFNRV9UQUJMRShzdGF0dXMxKSwKKyAgS0VZX05BTUVfVEFCTEUocm91dGluZzEpLAorRU5EX0tFWV9OQU1FX1RBQkxFUworCitCRUdJTl9LRVlfTkFNRV9UQUJMRVMoYWJ0X2xhcmdlKQorICBLRVlfTkFNRV9UQUJMRShhYnRfYmFzaWMpLAorICBLRVlfTkFNRV9UQUJMRShhYnRfZXh0cmEpLAorICBLRVlfTkFNRV9UQUJMRShzdGF0dXMxKSwKKyAgS0VZX05BTUVfVEFCTEUocm91dGluZzEpLAorRU5EX0tFWV9OQU1FX1RBQkxFUworCitCRUdJTl9LRVlfTkFNRV9UQUJMRVMoc2F0X3NtYWxsKQorICBLRVlfTkFNRV9UQUJMRShzYXRfYmFzaWMpLAorICBLRVlfTkFNRV9UQUJMRShzdGF0dXMxKSwKKyAgS0VZX05BTUVfVEFCTEUoc3RhdHVzMiksCisgIEtFWV9OQU1FX1RBQkxFKHJvdXRpbmcxKSwKKyAgS0VZX05BTUVfVEFCTEUocm91dGluZzIpLAorRU5EX0tFWV9OQU1FX1RBQkxFUworCitCRUdJTl9LRVlfTkFNRV9UQUJMRVMoc2F0X2xhcmdlKQorICBLRVlfTkFNRV9UQUJMRShzYXRfYmFzaWMpLAorICBLRVlfTkFNRV9UQUJMRShzYXRfZXh0cmEpLAorICBLRVlfTkFNRV9UQUJMRShzdGF0dXMxKSwKKyAgS0VZX05BTUVfVEFCTEUoc3RhdHVzMiksCisgIEtFWV9OQU1FX1RBQkxFKHJvdXRpbmcxKSwKKyAgS0VZX05BTUVfVEFCTEUocm91dGluZzIpLAorRU5EX0tFWV9OQU1FX1RBQkxFUworCitCRUdJTl9LRVlfTkFNRV9UQUJMRVMoYmM2NDApCisgIEtFWV9OQU1FX1RBQkxFKGV0b3VjaCksCisgIEtFWV9OQU1FX1RBQkxFKHNtYXJ0cGFkKSwKKyAgS0VZX05BTUVfVEFCTEUodGh1bWIpLAorICBLRVlfTkFNRV9UQUJMRShmZWF0dXJlcGFjayksCisgIEtFWV9OQU1FX1RBQkxFKHJvdXRpbmcxKSwKKyAgS0VZX05BTUVfVEFCTEUocm91dGluZzIpLAorRU5EX0tFWV9OQU1FX1RBQkxFUworCitCRUdJTl9LRVlfTkFNRV9UQUJMRVMoYmM2ODApCisgIEtFWV9OQU1FX1RBQkxFKGV0b3VjaCksCisgIEtFWV9OQU1FX1RBQkxFKHNtYXJ0cGFkKSwKKyAgS0VZX05BTUVfVEFCTEUodGh1bWIpLAorICBLRVlfTkFNRV9UQUJMRShmZWF0dXJlcGFjayksCisgIEtFWV9OQU1FX1RBQkxFKHJvdXRpbmcxKSwKKyAgS0VZX05BTUVfVEFCTEUocm91dGluZzIpLAorRU5EX0tFWV9OQU1FX1RBQkxFUworCitCRUdJTl9LRVlfTkFNRV9UQUJMRVMoZWwpCisgIEtFWV9OQU1FX1RBQkxFKGVsKSwKK0VORF9LRVlfTkFNRV9UQUJMRVMKKworQkVHSU5fS0VZX05BTUVfVEFCTEVTKHZveWFnZXIpCisgIEtFWV9OQU1FX1RBQkxFKHZveWFnZXIpLAorRU5EX0tFWV9OQU1FX1RBQkxFUworCitERUZJTkVfS0VZX1RBQkxFKGFidF9zbWFsbCkKK0RFRklORV9LRVlfVEFCTEUoYWJ0X2xhcmdlKQorREVGSU5FX0tFWV9UQUJMRShzYXRfc21hbGwpCitERUZJTkVfS0VZX1RBQkxFKHNhdF9sYXJnZSkKK0RFRklORV9LRVlfVEFCTEUoYmM2NDApCitERUZJTkVfS0VZX1RBQkxFKGJjNjgwKQorREVGSU5FX0tFWV9UQUJMRShlbCkKK0RFRklORV9LRVlfVEFCTEUodm95YWdlcikKKworQkVHSU5fS0VZX1RBQkxFX0xJU1QKKyAgJktFWV9UQUJMRV9ERUZJTklUSU9OKGFidF9zbWFsbCksCisgICZLRVlfVEFCTEVfREVGSU5JVElPTihhYnRfbGFyZ2UpLAorICAmS0VZX1RBQkxFX0RFRklOSVRJT04oc2F0X3NtYWxsKSwKKyAgJktFWV9UQUJMRV9ERUZJTklUSU9OKHNhdF9sYXJnZSksCisgICZLRVlfVEFCTEVfREVGSU5JVElPTihiYzY0MCksCisgICZLRVlfVEFCTEVfREVGSU5JVElPTihiYzY4MCksCisgICZLRVlfVEFCTEVfREVGSU5JVElPTihlbCksCisgICZLRVlfVEFCTEVfREVGSU5JVElPTih2b3lhZ2VyKSwKK0VORF9LRVlfVEFCTEVfTElTVAorCitzdHJ1Y3QgQnJhaWxsZURhdGFTdHJ1Y3QgeworICB1bnNpZ25lZCBpbnQgcm90YXRlZENlbGxzOworCisgIHN0cnVjdCB7CisgICAgdW5zaWduZWQgY2hhciBidWZmZXJbMFgyMF07CisgICAgdW5zaWduZWQgY2hhciAqZW5kOworICB9IHJlc3RvcmU7CisKKyAgdW5pb24geworICAgIHN0cnVjdCB7CisgICAgICB1bnNpZ25lZCBpbnQgc2Vjb25kYXJ5Um91dGluZ0tleUVtdWxhdGlvbjsKKworICAgICAgdW5zaWduZWQgY2hhciBzcGxpdE9mZnNldDsKKyAgICAgIEhpZEtleWJvYXJkUGFja2V0IGhpZEtleWJvYXJkUGFja2V0OworCisgICAgICBzdHJ1Y3QgeworICAgICAgICB1aW50MzJfdCBoYXJkd2FyZTsKKyAgICAgICAgdWludDMyX3QgZmlybXdhcmU7CisgICAgICAgIHVpbnQzMl90IGJ0QmFzZTsKKyAgICAgICAgdWludDMyX3QgYnRGUDsKKyAgICAgIH0gdmVyc2lvbjsKKworICAgICAgc3RydWN0IHsKKyAgICAgICAgdWludDY0X3QgYmFzZTsKKyAgICAgICAgdWludDY0X3QgZmVhdHVyZVBhY2s7CisgICAgICB9IG1hY0FkZHJlc3M7CisgICAgfSBiYzsKKyAgfSBwcm90b2NvbDsKK307CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgY29uc3QgY2hhciAqbmFtZTsKKyAgY29uc3QgS2V5VGFibGVEZWZpbml0aW9uICprZXlUYWJsZURlZmluaXRpb247CisgIHVuc2lnbmVkIGNoYXIgaWRlbnRpZmllcjsKKyAgdW5zaWduZWQgY2hhciBjb2x1bW5zOworICB1bnNpZ25lZCBjaGFyIHN0YXR1c0NlbGxzOworICB1bnNpZ25lZCBjaGFyIGZsYWdzOworfSBNb2RlbEVudHJ5Oworc3RhdGljIGNvbnN0IE1vZGVsRW50cnkgKm1vZGVsOwkJLyogcG9pbnRzIHRvIHRlcm1pbmFsIG1vZGVsIGNvbmZpZyBzdHJ1Y3QgKi8KKworI2RlZmluZSBNT0RfRkxBR19DQU5fQ09ORklHVVJFICAgMFgwMQorI2RlZmluZSBNT0RfRkxBR19GT1JDRV9GUk9NXzAgICAgMFgwMgorCitzdGF0aWMgY29uc3QgTW9kZWxFbnRyeSBtb2RlbFRhYmxlW10gPSB7CisgIHsgLmlkZW50aWZpZXIgPSAwWDAwLAorICAgIC5uYW1lID0gIkFCVCAzMjAiLAorICAgIC5jb2x1bW5zID0gMjAsCisgICAgLnN0YXR1c0NlbGxzID0gMywKKyAgICAuZmxhZ3MgPSAwLAorICAgIC5rZXlUYWJsZURlZmluaXRpb24gPSAmS0VZX1RBQkxFX0RFRklOSVRJT04oYWJ0X3NtYWxsKQorICB9CisgICwKKyAgeyAuaWRlbnRpZmllciA9IDBYMDEsCisgICAgLm5hbWUgPSAiQUJUIDM0MCIsCisgICAgLmNvbHVtbnMgPSA0MCwKKyAgICAuc3RhdHVzQ2VsbHMgPSAzLAorICAgIC5mbGFncyA9IDAsCisgICAgLmtleVRhYmxlRGVmaW5pdGlvbiA9ICZLRVlfVEFCTEVfREVGSU5JVElPTihhYnRfc21hbGwpCisgIH0KKyAgLAorICB7IC5pZGVudGlmaWVyID0gMFgwMiwKKyAgICAubmFtZSA9ICJBQlQgMzQwIERlc2t0b3AiLAorICAgIC5jb2x1bW5zID0gNDAsCisgICAgLnN0YXR1c0NlbGxzID0gNSwKKyAgICAuZmxhZ3MgPSAwLAorICAgIC5rZXlUYWJsZURlZmluaXRpb24gPSAmS0VZX1RBQkxFX0RFRklOSVRJT04oYWJ0X3NtYWxsKQorICB9CisgICwKKyAgeyAuaWRlbnRpZmllciA9IDBYMDMsCisgICAgLm5hbWUgPSAiQUJUIDM4MCIsCisgICAgLmNvbHVtbnMgPSA4MCwKKyAgICAuc3RhdHVzQ2VsbHMgPSA1LAorICAgIC5mbGFncyA9IDAsCisgICAgLmtleVRhYmxlRGVmaW5pdGlvbiA9ICZLRVlfVEFCTEVfREVGSU5JVElPTihhYnRfbGFyZ2UpCisgIH0KKyAgLAorICB7IC5pZGVudGlmaWVyID0gMFgwNCwKKyAgICAubmFtZSA9ICJBQlQgMzgyIFR3aW4gU3BhY2UiLAorICAgIC5jb2x1bW5zID0gODAsCisgICAgLnN0YXR1c0NlbGxzID0gNSwKKyAgICAuZmxhZ3MgPSAwLAorICAgIC5rZXlUYWJsZURlZmluaXRpb24gPSAmS0VZX1RBQkxFX0RFRklOSVRJT04oYWJ0X2xhcmdlKQorICB9CisgICwKKyAgeyAuaWRlbnRpZmllciA9IDBYMEEsCisgICAgLm5hbWUgPSAiRGVscGhpIDQyMCIsCisgICAgLmNvbHVtbnMgPSAyMCwKKyAgICAuc3RhdHVzQ2VsbHMgPSAzLAorICAgIC5mbGFncyA9IDAsCisgICAgLmtleVRhYmxlRGVmaW5pdGlvbiA9ICZLRVlfVEFCTEVfREVGSU5JVElPTihhYnRfc21hbGwpCisgIH0KKyAgLAorICB7IC5pZGVudGlmaWVyID0gMFgwQiwKKyAgICAubmFtZSA9ICJEZWxwaGkgNDQwIiwKKyAgICAuY29sdW1ucyA9IDQwLAorICAgIC5zdGF0dXNDZWxscyA9IDMsCisgICAgLmZsYWdzID0gMCwKKyAgICAua2V5VGFibGVEZWZpbml0aW9uID0gJktFWV9UQUJMRV9ERUZJTklUSU9OKGFidF9zbWFsbCkKKyAgfQorICAsCisgIHsgLmlkZW50aWZpZXIgPSAwWDBDLAorICAgIC5uYW1lID0gIkRlbHBoaSA0NDAgRGVza3RvcCIsCisgICAgLmNvbHVtbnMgPSA0MCwKKyAgICAuc3RhdHVzQ2VsbHMgPSA1LAorICAgIC5mbGFncyA9IDAsCisgICAgLmtleVRhYmxlRGVmaW5pdGlvbiA9ICZLRVlfVEFCTEVfREVGSU5JVElPTihhYnRfc21hbGwpCisgIH0KKyAgLAorICB7IC5pZGVudGlmaWVyID0gMFgwRCwKKyAgICAubmFtZSA9ICJEZWxwaGkgNDgwIiwKKyAgICAuY29sdW1ucyA9IDgwLAorICAgIC5zdGF0dXNDZWxscyA9IDUsCisgICAgLmZsYWdzID0gMCwKKyAgICAua2V5VGFibGVEZWZpbml0aW9uID0gJktFWV9UQUJMRV9ERUZJTklUSU9OKGFidF9sYXJnZSkKKyAgfQorICAsCisgIHsgLmlkZW50aWZpZXIgPSAwWDBFLAorICAgIC5uYW1lID0gIlNhdGVsbGl0ZSA1NDQiLAorICAgIC5jb2x1bW5zID0gNDAsCisgICAgLnN0YXR1c0NlbGxzID0gMywKKyAgICAuZmxhZ3MgPSBNT0RfRkxBR19DQU5fQ09ORklHVVJFLAorICAgIC5rZXlUYWJsZURlZmluaXRpb24gPSAmS0VZX1RBQkxFX0RFRklOSVRJT04oc2F0X3NtYWxsKQorICB9CisgICwKKyAgeyAuaWRlbnRpZmllciA9IDBYMEYsCisgICAgLm5hbWUgPSAiU2F0ZWxsaXRlIDU3MCBQcm8iLAorICAgIC5jb2x1bW5zID0gNjYsCisgICAgLnN0YXR1c0NlbGxzID0gMywKKyAgICAuZmxhZ3MgPSBNT0RfRkxBR19DQU5fQ09ORklHVVJFLAorICAgIC5rZXlUYWJsZURlZmluaXRpb24gPSAmS0VZX1RBQkxFX0RFRklOSVRJT04oc2F0X2xhcmdlKQorICB9CisgICwKKyAgeyAuaWRlbnRpZmllciA9IDBYMTAsCisgICAgLm5hbWUgPSAiU2F0ZWxsaXRlIDU4NCBQcm8iLAorICAgIC5jb2x1bW5zID0gODAsCisgICAgLnN0YXR1c0NlbGxzID0gMywKKyAgICAuZmxhZ3MgPSBNT0RfRkxBR19DQU5fQ09ORklHVVJFLAorICAgIC5rZXlUYWJsZURlZmluaXRpb24gPSAmS0VZX1RBQkxFX0RFRklOSVRJT04oc2F0X2xhcmdlKQorICB9CisgICwKKyAgeyAuaWRlbnRpZmllciA9IDBYMTEsCisgICAgLm5hbWUgPSAiU2F0ZWxsaXRlIDU0NCBUcmF2ZWxsZXIiLAorICAgIC5jb2x1bW5zID0gNDAsCisgICAgLnN0YXR1c0NlbGxzID0gMywKKyAgICAuZmxhZ3MgPSBNT0RfRkxBR19DQU5fQ09ORklHVVJFLAorICAgIC5rZXlUYWJsZURlZmluaXRpb24gPSAmS0VZX1RBQkxFX0RFRklOSVRJT04oc2F0X3NtYWxsKQorICB9CisgICwKKyAgeyAuaWRlbnRpZmllciA9IDBYMTMsCisgICAgLm5hbWUgPSAiQnJhaWxsZSBTeXN0ZW0gNDAiLAorICAgIC5jb2x1bW5zID0gNDAsCisgICAgLnN0YXR1c0NlbGxzID0gMCwKKyAgICAuZmxhZ3MgPSBNT0RfRkxBR19DQU5fQ09ORklHVVJFLAorICAgIC5rZXlUYWJsZURlZmluaXRpb24gPSAmS0VZX1RBQkxFX0RFRklOSVRJT04oc2F0X3NtYWxsKQorICB9CisgICwKKyAgeyAubmFtZSA9IE5VTEwgfQorfTsKKworc3RhdGljIGNvbnN0IE1vZGVsRW50cnkgbW9kZWxCQzYyNCA9IHsKKyAgLmlkZW50aWZpZXIgPSAwWDI0LAorICAubmFtZSA9ICJCQzYyNCIsCisgIC5jb2x1bW5zID0gMjQsCisgIC5rZXlUYWJsZURlZmluaXRpb24gPSAmS0VZX1RBQkxFX0RFRklOSVRJT04oYmM2NDApCit9OworCitzdGF0aWMgY29uc3QgTW9kZWxFbnRyeSBtb2RlbEJDNjQwID0geworICAuaWRlbnRpZmllciA9IDBYNDAsCisgIC5uYW1lID0gIkJDNjQwIiwKKyAgLmNvbHVtbnMgPSA0MCwKKyAgLmtleVRhYmxlRGVmaW5pdGlvbiA9ICZLRVlfVEFCTEVfREVGSU5JVElPTihiYzY0MCkKK307CisKK3N0YXRpYyBjb25zdCBNb2RlbEVudHJ5IG1vZGVsQkM2ODAgPSB7CisgIC5pZGVudGlmaWVyID0gMFg4MCwKKyAgLm5hbWUgPSAiQkM2ODAiLAorICAuY29sdW1ucyA9IDgwLAorICAua2V5VGFibGVEZWZpbml0aW9uID0gJktFWV9UQUJMRV9ERUZJTklUSU9OKGJjNjgwKQorfTsKKworc3RhdGljIGNvbnN0IE1vZGVsRW50cnkgbW9kZWxFTDEyID0geworICAuaWRlbnRpZmllciA9IDBYNDAsCisgIC5uYW1lID0gIkVhc3lMaW5rIDEyIFRvdWNoIiwKKyAgLmNvbHVtbnMgPSAxMiwKKyAgLmZsYWdzID0gTU9EX0ZMQUdfRk9SQ0VfRlJPTV8wLAorICAua2V5VGFibGVEZWZpbml0aW9uID0gJktFWV9UQUJMRV9ERUZJTklUSU9OKGVsKQorfTsKKworc3RhdGljIGNvbnN0IE1vZGVsRW50cnkgbW9kZWxWb3lhZ2VyID0geworICAuaWRlbnRpZmllciA9IDBYMDAsCisgIC5uYW1lID0gIlZveWFnZXIgUHJvdG9jb2wgQ29udmVydGVyIiwKKyAgLmNvbHVtbnMgPSA3MCwKKyAgLmtleVRhYmxlRGVmaW5pdGlvbiA9ICZLRVlfVEFCTEVfREVGSU5JVElPTih2b3lhZ2VyKQorfTsKKwordHlwZWRlZiBzdHJ1Y3QgeworICBpbnQgKCp0ZXN0KSAoQnJhaWxsZURpc3BsYXkgKmJybCk7CisgIHVuc2lnbmVkIGNoYXIgZmVhdHVyZTsKKyAgdW5zaWduZWQgY2hhciBvZmZzZXQ7CisgIHVuc2lnbmVkIGNoYXIgZGlzYWJsZTsKKyAgdW5zaWduZWQgY2hhciBlbmFibGU7Cit9IFNldHRpbmdzVXBkYXRlRW50cnk7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgdm9pZCAoKmluaXRpYWxpemVWYXJpYWJsZXMpIChCcmFpbGxlRGlzcGxheSAqYnJsLCBjaGFyICoqcGFyYW1ldGVycyk7CisKKyAgQnJhaWxsZVBhY2tldFZlcmlmaWVyICp2ZXJpZnlQYWNrZXQ7CisgIGludCAoKnJlYWRQYWNrZXQpIChCcmFpbGxlRGlzcGxheSAqYnJsLCB1bnNpZ25lZCBjaGFyICpwYWNrZXQsIGludCBzaXplKTsKKworICBjb25zdCBTZXR0aW5nc1VwZGF0ZUVudHJ5ICpyZXF1aXJlZFNldHRpbmdzOworICBpbnQgKCpzZXRGZWF0dXJlKSAoQnJhaWxsZURpc3BsYXkgKmJybCwgY29uc3QgdW5zaWduZWQgY2hhciAqZGF0YSwgc2l6ZV90IHNpemUpOworICBzaXplX3QgKCpnZXRGZWF0dXJlKSAoQnJhaWxsZURpc3BsYXkgKmJybCwgdW5zaWduZWQgY2hhciBmZWF0dXJlLCB1bnNpZ25lZCBjaGFyICpidWZmZXIsIHNpemVfdCBzaXplKTsKKworICBpbnQgKCp1cGRhdGVDb25maWd1cmF0aW9uKSAoQnJhaWxsZURpc3BsYXkgKmJybCwgaW50IGF1dG9kZXRlY3RpbmcsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnBhY2tldCk7CisgIGludCAoKmRldGVjdE1vZGVsKSAoQnJhaWxsZURpc3BsYXkgKmJybCk7CisKKyAgaW50ICgqcmVhZENvbW1hbmQpIChCcmFpbGxlRGlzcGxheSAqYnJsKTsKKyAgaW50ICgqd3JpdGVCcmFpbGxlKSAoQnJhaWxsZURpc3BsYXkgKmJybCwgY29uc3QgdW5zaWduZWQgY2hhciAqY2VsbHMsIGludCBzdGFydCwgaW50IGNvdW50KTsKK30gUHJvdG9jb2xPcGVyYXRpb25zOworc3RhdGljIGNvbnN0IFByb3RvY29sT3BlcmF0aW9ucyAqcHJvdG9jb2w7CisKK3R5cGVkZWYgZW51bSB7CisgIFNUQVRVU19GSVJTVCwKKyAgU1RBVFVTX0xFRlQsCisgIFNUQVRVU19SSUdIVAorfSBTdGF0dXNUeXBlOworCitzdGF0aWMgdW5zaWduZWQgY2hhciAqcHJldmlvdXNUZXh0ID0gTlVMTDsKK3N0YXRpYyB1bnNpZ25lZCBjaGFyICpwcmV2aW91c1N0YXR1cyA9IE5VTEw7CisKK3N0YXRpYyB1bnNpZ25lZCBjaGFyIGFjdHVhbENvbHVtbnM7CitzdGF0aWMgdW5zaWduZWQgY2hhciB0ZXh0T2Zmc2V0Oworc3RhdGljIHVuc2lnbmVkIGNoYXIgc3RhdHVzT2Zmc2V0OworCitzdGF0aWMgdW5zaWduZWQgY2hhciB0ZXh0UmV3cml0ZVJlcXVpcmVkID0gMDsKK3N0YXRpYyB1bnNpZ25lZCBjaGFyIHN0YXR1c1Jld3JpdGVSZXF1aXJlZDsKKwordHlwZWRlZiB1bnNpZ25lZCBjaGFyIEZpZWxkQnl0ZUNvbnZlcnRlciAodW5zaWduZWQgY2hhciBieXRlKTsKKworc3RhdGljIHVpbnQ2NF90CitwYXJzZU51bWVyaWNGaWVsZCAoCisgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKipieXRlcywgc2l6ZV90ICpjb3VudCwKKyAgc2l6ZV90IHNpemUsIHNpemVfdCB3aWR0aCwKKyAgRmllbGRCeXRlQ29udmVydGVyICpjb252ZXJ0Qnl0ZQorKSB7CisgIHVpbnQ2NF90IHJlc3VsdCA9IDA7CisKKyAgd2hpbGUgKHdpZHRoID4gMCkgeworICAgIHJlc3VsdCA8PD0gODsKKworICAgIGlmIChzaXplID4gMCkgeworICAgICAgaWYgKCpjb3VudCA+IDApIHsKKyAgICAgICAgcmVzdWx0IHw9IGNvbnZlcnRCeXRlKCooKmJ5dGVzKSsrKTsKKyAgICAgICAgKmNvdW50IC09IDE7CisgICAgICB9CisKKyAgICAgIHNpemUgLT0gMTsKKyAgICB9CisKKyAgICB3aWR0aCAtPSAxOworICB9CisKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIHVuc2lnbmVkIGNoYXIKK2NvbnZlcnRIZXhhZGVjaW1hbEJ5dGUgKHVuc2lnbmVkIGNoYXIgYnl0ZSkgeworICByZXR1cm4gYnl0ZTsKK30KKworc3RhdGljIHVpbnQ2NF90CitwYXJzZUhleGFkZWNpbWFsRmllbGQgKAorICBjb25zdCB1bnNpZ25lZCBjaGFyICoqYnl0ZXMsIHNpemVfdCAqY291bnQsCisgIHNpemVfdCBzaXplLCBzaXplX3Qgd2lkdGgKKykgeworICByZXR1cm4gcGFyc2VOdW1lcmljRmllbGQoYnl0ZXMsIGNvdW50LCBzaXplLCB3aWR0aCwgY29udmVydEhleGFkZWNpbWFsQnl0ZSk7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBjaGFyCitjb252ZXJ0RGVjaW1hbEJ5dGUgKHVuc2lnbmVkIGNoYXIgYnl0ZSkgeworICByZXR1cm4gYnl0ZSAtICcwJzsKK30KKworc3RhdGljIHVpbnQ2NF90CitwYXJzZURlY2ltYWxGaWVsZCAoCisgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKipieXRlcywgc2l6ZV90ICpjb3VudCwKKyAgc2l6ZV90IHNpemUsIHNpemVfdCB3aWR0aAorKSB7CisgIHJldHVybiBwYXJzZU51bWVyaWNGaWVsZChieXRlcywgY291bnQsIHNpemUsIHdpZHRoLCBjb252ZXJ0RGVjaW1hbEJ5dGUpOworfQorCitzdGF0aWMgaW50CityZWFkUGFja2V0IChCcmFpbGxlRGlzcGxheSAqYnJsLCB1bnNpZ25lZCBjaGFyICpwYWNrZXQsIGludCBzaXplKSB7CisgIHJldHVybiByZWFkQnJhaWxsZVBhY2tldChicmwsIE5VTEwsIHBhY2tldCwgc2l6ZSwgcHJvdG9jb2wtPnZlcmlmeVBhY2tldCwgTlVMTCk7Cit9CisKK3N0YXRpYyBpbnQKK2ZsdXNoU2V0dGluZ3NVcGRhdGUgKAorICBCcmFpbGxlRGlzcGxheSAqYnJsLCBzaXplX3QgbGVuZ3RoLAorICBjb25zdCB1bnNpZ25lZCBjaGFyICpvbGQsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKm5ldworKSB7CisgIGlmIChsZW5ndGgpIHsKKyAgICBpZiAobWVtY21wKG9sZCwgbmV3LCBsZW5ndGgpICE9IDApIHsKKyAgICAgIGlmICghcHJvdG9jb2wtPnNldEZlYXR1cmUoYnJsLCBuZXcsIGxlbmd0aCkpIHJldHVybiAwOworCisgICAgICB7CisgICAgICAgIHVuc2lnbmVkIGNoYXIgKipjb25zdCBlbmQgPSAmYnJsLT5kYXRhLT5yZXN0b3JlLmVuZDsKKworICAgICAgICBpZiAobGVuZ3RoID4gVUlOVDhfTUFYKSB7CisgICAgICAgICAgbG9nQnl0ZXMoTE9HX1dBUk5JTkcsICJzZXR0aW5ncyB1cGRhdGUgdG9vIGxvbmciLCBuZXcsIGxlbmd0aCk7CisgICAgICAgIH0gZWxzZSBpZiAoKCplbmQgKyBsZW5ndGggKyAxKSA+IChicmwtPmRhdGEtPnJlc3RvcmUuYnVmZmVyICsgc2l6ZW9mKGJybC0+ZGF0YS0+cmVzdG9yZS5idWZmZXIpKSkgeworICAgICAgICAgIGxvZ0J5dGVzKExPR19XQVJOSU5HLCAic2V0dGluZ3MgdXBkYXRlIG5vdCBzYXZlZCIsIG5ldywgbGVuZ3RoKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAqZW5kID0gbWVtcGNweSgqZW5kLCBvbGQsIGxlbmd0aCk7CisgICAgICAgICAgKigqZW5kKSsrID0gbGVuZ3RoOworICAgICAgICB9CisgICAgICB9CisgICAgfQorICB9CisKKyAgcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQKK3VwZGF0ZVNldHRpbmdzIChCcmFpbGxlRGlzcGxheSAqYnJsKSB7CisgIHNpemVfdCBsZW5ndGggPSAwOworICBjb25zdCBzaXplX3Qgc2l6ZSA9IDBYMjA7CisgIHVuc2lnbmVkIGNoYXIgb2xkW3NpemVdOworICB1bnNpZ25lZCBjaGFyIG5ld1tzaXplXTsKKyAgY29uc3QgU2V0dGluZ3NVcGRhdGVFbnRyeSAqc2V0dGluZ3MgPSBwcm90b2NvbC0+cmVxdWlyZWRTZXR0aW5nczsKKworICBpZiAoc2V0dGluZ3MpIHsKKyAgICB1bnNpZ25lZCBjaGFyIHByZXZpb3VzID0gMDsKKworICAgIHdoaWxlIChzZXR0aW5ncy0+ZmVhdHVyZSkgeworICAgICAgaWYgKCFzZXR0aW5ncy0+dGVzdCB8fCBzZXR0aW5ncy0+dGVzdChicmwpKSB7CisgICAgICAgIGlmIChzZXR0aW5ncy0+ZmVhdHVyZSAhPSBwcmV2aW91cykgeworICAgICAgICAgIGlmICghZmx1c2hTZXR0aW5nc1VwZGF0ZShicmwsIGxlbmd0aCwgb2xkLCBuZXcpKSByZXR1cm4gMDsKKworICAgICAgICAgIGlmICghKGxlbmd0aCA9IHByb3RvY29sLT5nZXRGZWF0dXJlKGJybCwgc2V0dGluZ3MtPmZlYXR1cmUsIG9sZCwgc2l6ZSkpKSB7CisgICAgICAgICAgICBpZiAoZXJybm8gPT0gRUFHQUlOKSBnb3RvIG5leHQ7CisKKyNpZmRlZiBFVElNRURPVVQKKyAgICAgICAgICAgIGlmIChlcnJubyA9PSBFVElNRURPVVQpIGdvdG8gbmV4dDsKKyNlbmRpZiAvKiBFVElNRURPVVQgKi8KKworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgfQorCisgICAgICAgICAgbWVtY3B5KG5ldywgb2xkLCBsZW5ndGgpOworICAgICAgICAgIHByZXZpb3VzID0gc2V0dGluZ3MtPmZlYXR1cmU7CisgICAgICAgIH0KKworICAgICAgICB7CisgICAgICAgICAgdW5zaWduZWQgY2hhciAqYnl0ZSA9ICZuZXdbc2V0dGluZ3MtPm9mZnNldF07CisKKyAgICAgICAgICAqYnl0ZSAmPSB+c2V0dGluZ3MtPmRpc2FibGU7CisgICAgICAgICAgKmJ5dGUgfD0gc2V0dGluZ3MtPmVuYWJsZTsKKyAgICAgICAgfQorICAgICAgfQorCisgICAgbmV4dDoKKyAgICAgIHNldHRpbmdzICs9IDE7CisgICAgfQorICB9CisKKyAgcmV0dXJuIGZsdXNoU2V0dGluZ3NVcGRhdGUoYnJsLCBsZW5ndGgsIG9sZCwgbmV3KTsKK30KKworc3RhdGljIGludAorcmVzdG9yZVNldHRpbmdzIChCcmFpbGxlRGlzcGxheSAqYnJsKSB7CisgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnJlcXVlc3QgPSBicmwtPmRhdGEtPnJlc3RvcmUuZW5kOworCisgIHdoaWxlIChyZXF1ZXN0ID4gYnJsLT5kYXRhLT5yZXN0b3JlLmJ1ZmZlcikgeworICAgIHVuc2lnbmVkIGNoYXIgbGVuZ3RoID0gKi0tcmVxdWVzdDsKKworICAgIHJlcXVlc3QgLT0gbGVuZ3RoOworICAgIGlmICghcHJvdG9jb2wtPnNldEZlYXR1cmUoYnJsLCByZXF1ZXN0LCBsZW5ndGgpKSByZXR1cm4gMDsKKyAgfQorCisgIHJldHVybiAxOworfQorCitzdGF0aWMgaW50CityZWFsbG9jYXRlQnVmZmVyICh1bnNpZ25lZCBjaGFyICoqYnVmZmVyLCBpbnQgc2l6ZSkgeworICB2b2lkICphZGRyZXNzID0gcmVhbGxvYygqYnVmZmVyLCBzaXplKTsKKyAgaWYgKHNpemUgJiYgIWFkZHJlc3MpIHJldHVybiAwOworICAqYnVmZmVyID0gYWRkcmVzczsKKyAgcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQKK3JlYWxsb2NhdGVCdWZmZXJzIChCcmFpbGxlRGlzcGxheSAqYnJsKSB7CisgIGlmIChyZWFsbG9jYXRlQnVmZmVyKCZwcmV2aW91c1RleHQsIGJybC0+dGV4dENvbHVtbnMqYnJsLT50ZXh0Um93cykpCisgICAgaWYgKHJlYWxsb2NhdGVCdWZmZXIoJnByZXZpb3VzU3RhdHVzLCBicmwtPnN0YXR1c0NvbHVtbnMqYnJsLT5zdGF0dXNSb3dzKSkKKyAgICAgIHJldHVybiAxOworCisgIGxvZ01lc3NhZ2UoTE9HX0VSUiwgImNhbm5vdCBhbGxvY2F0ZSBicmFpbGxlIGJ1ZmZlcnMiKTsKKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK3NldERlZmF1bHRDb25maWd1cmF0aW9uIChCcmFpbGxlRGlzcGxheSAqYnJsKSB7CisgIGxvZ01lc3NhZ2UoTE9HX0lORk8sICJkZXRlY3RlZCBBbHZhICVzOiAlZCBjb2x1bW5zLCAlZCBzdGF0dXMgY2VsbHMiLAorICAgICAgICAgICAgIG1vZGVsLT5uYW1lLCBtb2RlbC0+Y29sdW1ucywgbW9kZWwtPnN0YXR1c0NlbGxzKTsKKworICBicmwtPnRleHRDb2x1bW5zID0gbW9kZWwtPmNvbHVtbnM7CisgIGJybC0+dGV4dFJvd3MgPSAxOworICBicmwtPnN0YXR1c0NvbHVtbnMgPSBtb2RlbC0+c3RhdHVzQ2VsbHM7CisgIGJybC0+c3RhdHVzUm93cyA9IDE7CisKKyAgYWN0dWFsQ29sdW1ucyA9IG1vZGVsLT5jb2x1bW5zOworICBzdGF0dXNPZmZzZXQgPSAwOworICB0ZXh0T2Zmc2V0ID0gc3RhdHVzT2Zmc2V0ICsgbW9kZWwtPnN0YXR1c0NlbGxzOworICB0ZXh0UmV3cml0ZVJlcXVpcmVkID0gMTsJCQkvKiBUbyB3cml0ZSB3aG9sZSBkaXNwbGF5IGF0IGZpcnN0IHRpbWUgKi8KKyAgc3RhdHVzUmV3cml0ZVJlcXVpcmVkID0gMTsKKyAgcmV0dXJuIHJlYWxsb2NhdGVCdWZmZXJzKGJybCk7Cit9CisKK3N0YXRpYyBpbnQKK3VwZGF0ZUNvbmZpZ3VyYXRpb24gKEJyYWlsbGVEaXNwbGF5ICpicmwsIGludCBhdXRvZGV0ZWN0aW5nLCBpbnQgdGV4dENvbHVtbnMsIGludCBzdGF0dXNDb2x1bW5zLCBTdGF0dXNUeXBlIHN0YXR1c1R5cGUpIHsKKyAgaW50IGNoYW5nZWQgPSAwOworICBpbnQgc2VwYXJhdG9yID0gMDsKKworICBhY3R1YWxDb2x1bW5zID0gdGV4dENvbHVtbnM7CisgIGlmIChzdGF0dXNUeXBlID09IFNUQVRVU19GSVJTVCkgeworICAgIHN0YXR1c09mZnNldCA9IDA7CisgICAgdGV4dE9mZnNldCA9IHN0YXR1c09mZnNldCArIHN0YXR1c0NvbHVtbnM7CisgIH0gZWxzZSBpZiAoKHN0YXR1c0NvbHVtbnMgPSBNSU4oc3RhdHVzQ29sdW1ucywgKGFjdHVhbENvbHVtbnMtMSkvMikpKSB7CisgICAgc2VwYXJhdG9yID0gMTsKKyAgICB0ZXh0Q29sdW1ucyAtPSBzdGF0dXNDb2x1bW5zICsgc2VwYXJhdG9yOworCisgICAgc3dpdGNoIChzdGF0dXNUeXBlKSB7CisgICAgICBjYXNlIFNUQVRVU19MRUZUOgorICAgICAgICBzdGF0dXNPZmZzZXQgPSAwOworICAgICAgICB0ZXh0T2Zmc2V0ID0gc3RhdHVzT2Zmc2V0ICsgc3RhdHVzQ29sdW1ucyArIHNlcGFyYXRvcjsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGNhc2UgU1RBVFVTX1JJR0hUOgorICAgICAgICB0ZXh0T2Zmc2V0ID0gMDsKKyAgICAgICAgc3RhdHVzT2Zmc2V0ID0gdGV4dE9mZnNldCArIHRleHRDb2x1bW5zICsgc2VwYXJhdG9yOworICAgICAgICBicmVhazsKKworICAgICAgZGVmYXVsdDoKKyAgICAgICAgYnJlYWs7CisgICAgfQorICB9IGVsc2UgeworICAgIHN0YXR1c09mZnNldCA9IDA7CisgICAgdGV4dE9mZnNldCA9IDA7CisgIH0KKworICBpZiAoc3RhdHVzQ29sdW1ucyAhPSBicmwtPnN0YXR1c0NvbHVtbnMpIHsKKyAgICBsb2dNZXNzYWdlKExPR19JTkZPLCAic3RhdHVzIGNlbGwgY291bnQgY2hhbmdlZCB0byAlZCIsIHN0YXR1c0NvbHVtbnMpOworICAgIGJybC0+c3RhdHVzQ29sdW1ucyA9IHN0YXR1c0NvbHVtbnM7CisgICAgY2hhbmdlZCA9IDE7CisgIH0KKworICBpZiAodGV4dENvbHVtbnMgIT0gYnJsLT50ZXh0Q29sdW1ucykgeworICAgIGxvZ01lc3NhZ2UoTE9HX0lORk8sICJ0ZXh0IGNvbHVtbiBjb3VudCBjaGFuZ2VkIHRvICVkIiwgdGV4dENvbHVtbnMpOworICAgIGJybC0+dGV4dENvbHVtbnMgPSB0ZXh0Q29sdW1uczsKKyAgICBpZiAoIWF1dG9kZXRlY3RpbmcpIGJybC0+cmVzaXplUmVxdWlyZWQgPSAxOworICAgIGNoYW5nZWQgPSAxOworICB9CisKKyAgaWYgKGNoYW5nZWQpCisgICAgaWYgKCFyZWFsbG9jYXRlQnVmZmVycyhicmwpKQorICAgICAgcmV0dXJuIDA7CisKKyAgaWYgKHNlcGFyYXRvcikgeworICAgIHVuc2lnbmVkIGNoYXIgY2VsbCA9IDA7CisgICAgaWYgKCFwcm90b2NvbC0+d3JpdGVCcmFpbGxlKGJybCwgJmNlbGwsIE1BWCh0ZXh0T2Zmc2V0LCBzdGF0dXNPZmZzZXQpLTEsIDEpKSByZXR1cm4gMDsKKyAgfQorCisgIHRleHRSZXdyaXRlUmVxdWlyZWQgPSAxOworICBzdGF0dXNSZXdyaXRlUmVxdWlyZWQgPSAxOworICByZXR1cm4gMTsKK30KKworI2RlZmluZSBQQUNLRVRfU0laRShjb3VudCkgKCgoY291bnQpICogMikgKyA0KQorI2RlZmluZSBNQVhJTVVNX1BBQ0tFVF9TSVpFIFBBQ0tFVF9TSVpFKDBYRkYpCisjZGVmaW5lIFBBQ0tFVF9CWVRFKHBhY2tldCwgaW5kZXgpICgocGFja2V0KVtQQUNLRVRfU0laRSgoaW5kZXgpKSAtIDFdKQorCitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBCUkxfSURbXSA9IHtBU0NJSV9FU0MsICdJJywgJ0QnLCAnPSd9OworI2RlZmluZSBCUkxfSURfTEVOR1RIIChzaXplb2YoQlJMX0lEKSkKKyNkZWZpbmUgQlJMX0lEX1NJWkUgKEJSTF9JRF9MRU5HVEggKyAxKQorCitzdGF0aWMgaW50Cit3cml0ZUZ1bmN0aW9uMSAoQnJhaWxsZURpc3BsYXkgKmJybCwgdW5zaWduZWQgY2hhciBjb2RlKSB7CisgIHVuc2lnbmVkIGNoYXIgYnl0ZXNbXSA9IHtBU0NJSV9FU0MsICdGJywgJ1UnLCAnTicsIGNvZGUsIEFTQ0lJX0NSfTsKKyAgcmV0dXJuIHdyaXRlQnJhaWxsZVBhY2tldChicmwsIE5VTEwsIGJ5dGVzLCBzaXplb2YoYnl0ZXMpKTsKK30KKworc3RhdGljIGludAord3JpdGVQYXJhbWV0ZXIxIChCcmFpbGxlRGlzcGxheSAqYnJsLCB1bnNpZ25lZCBjaGFyIHBhcmFtZXRlciwgdW5zaWduZWQgY2hhciBzZXR0aW5nKSB7CisgIHVuc2lnbmVkIGNoYXIgYnl0ZXNbXSA9IHtBU0NJSV9FU0MsICdQJywgJ0EnLCAzLCAwLCBwYXJhbWV0ZXIsIHNldHRpbmcsIEFTQ0lJX0NSfTsKKyAgcmV0dXJuIHdyaXRlQnJhaWxsZVBhY2tldChicmwsIE5VTEwsIGJ5dGVzLCBzaXplb2YoYnl0ZXMpKTsKK30KKworc3RhdGljIGludAordXBkYXRlQ29uZmlndXJhdGlvbjEgKEJyYWlsbGVEaXNwbGF5ICpicmwsIGludCBhdXRvZGV0ZWN0aW5nLCBjb25zdCB1bnNpZ25lZCBjaGFyICpwYWNrZXQpIHsKKyAgaW50IHRleHRDb2x1bW5zID0gYnJsLT50ZXh0Q29sdW1uczsKKyAgaW50IHN0YXR1c0NvbHVtbnMgPSBicmwtPnN0YXR1c0NvbHVtbnM7CisgIGludCBjb3VudCA9IFBBQ0tFVF9CWVRFKHBhY2tldCwgMCk7CisKKyAgaWYgKGNvdW50ID49IDMpIHN0YXR1c0NvbHVtbnMgPSBQQUNLRVRfQllURShwYWNrZXQsIDMpOworICBpZiAoY291bnQgPj0gNCkgdGV4dENvbHVtbnMgPSBQQUNLRVRfQllURShwYWNrZXQsIDQpOworICByZXR1cm4gdXBkYXRlQ29uZmlndXJhdGlvbihicmwsIGF1dG9kZXRlY3RpbmcsIHRleHRDb2x1bW5zLCBzdGF0dXNDb2x1bW5zLCBTVEFUVVNfRklSU1QpOworfQorCitzdGF0aWMgaW50CitzZXRCcmFpbGxlRmlybW5lc3MxIChCcmFpbGxlRGlzcGxheSAqYnJsLCBCcmFpbGxlRmlybW5lc3Mgc2V0dGluZykgeworICByZXR1cm4gd3JpdGVQYXJhbWV0ZXIxKGJybCwgMywKKyAgICAgICAgICAgICAgICAgICAgICAgICBzZXR0aW5nICogNCAvIEJSTF9GSVJNTkVTU19NQVhJTVVNKTsKK30KKworc3RhdGljIGludAoraWRlbnRpZnlNb2RlbDEgKEJyYWlsbGVEaXNwbGF5ICpicmwsIHVuc2lnbmVkIGNoYXIgaWRlbnRpZmllcikgeworICAvKiBGaW5kIG91dCB3aGljaCBtb2RlbCB3ZSBhcmUgY29ubmVjdGVkIHRvLi4uICovCisgIGZvciAoCisgICAgbW9kZWwgPSBtb2RlbFRhYmxlOworICAgIG1vZGVsLT5uYW1lICYmIChtb2RlbC0+aWRlbnRpZmllciAhPSBpZGVudGlmaWVyKTsKKyAgICBtb2RlbCArPSAxCisgICk7CisKKyAgaWYgKG1vZGVsLT5uYW1lKSB7CisgICAgaWYgKHNldERlZmF1bHRDb25maWd1cmF0aW9uKGJybCkpIHsKKyAgICAgIGlmIChtb2RlbC0+ZmxhZ3MgJiBNT0RfRkxBR19DQU5fQ09ORklHVVJFKSB7CisgICAgICAgIGJybC0+c2V0QnJhaWxsZUZpcm1uZXNzID0gc2V0QnJhaWxsZUZpcm1uZXNzMTsKKworICAgICAgICBpZiAoIXdyaXRlRnVuY3Rpb24xKGJybCwgMFgwNykpIHJldHVybiAwOworCisgICAgICAgIHdoaWxlIChhd2FpdEJyYWlsbGVJbnB1dChicmwsIDIwMCkpIHsKKyAgICAgICAgICB1bnNpZ25lZCBjaGFyIHBhY2tldFtNQVhJTVVNX1BBQ0tFVF9TSVpFXTsKKyAgICAgICAgICBpbnQgY291bnQgPSBwcm90b2NvbC0+cmVhZFBhY2tldChicmwsIHBhY2tldCwgc2l6ZW9mKHBhY2tldCkpOworCisgICAgICAgICAgaWYgKGNvdW50ID09IC0xKSBicmVhazsKKyAgICAgICAgICBpZiAoY291bnQgPT0gMCkgY29udGludWU7CisKKyAgICAgICAgICBpZiAoKHBhY2tldFswXSA9PSAwWDdGKSAmJiAocGFja2V0WzFdID09IDBYMDcpKSB7CisgICAgICAgICAgICB1cGRhdGVDb25maWd1cmF0aW9uMShicmwsIDEsIHBhY2tldCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZiAoIXdyaXRlRnVuY3Rpb24xKGJybCwgMFgwQikpIHJldHVybiAwOworICAgICAgfQorCisgICAgICByZXR1cm4gMTsKKyAgICB9CisgIH0gZWxzZSB7CisgICAgbG9nTWVzc2FnZShMT0dfRVJSLCAiZGV0ZWN0ZWQgdW5rbm93biBBbHZhIG1vZGVsIHdpdGggSUQgJTAyWCAoaGV4KSIsIGlkZW50aWZpZXIpOworICB9CisKKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkCitpbml0aWFsaXplVmFyaWFibGVzMSAoQnJhaWxsZURpc3BsYXkgKmJybCwgY2hhciAqKnBhcmFtZXRlcnMpIHsKK30KKworc3RhdGljIGludAorcmVhZFBhY2tldDEgKEJyYWlsbGVEaXNwbGF5ICpicmwsIHVuc2lnbmVkIGNoYXIgKnBhY2tldCwgaW50IHNpemUpIHsKKyAgaW50IG9mZnNldCA9IDA7CisgIGludCBsZW5ndGggPSAwOworCisgIHdoaWxlICgxKSB7CisgICAgdW5zaWduZWQgY2hhciBieXRlOworCisgICAgeworICAgICAgaW50IHN0YXJ0ZWQgPSBvZmZzZXQgPiAwOworCisgICAgICBpZiAoIWdpb1JlYWRCeXRlKGJybC0+Z2lvRW5kcG9pbnQsICZieXRlLCBzdGFydGVkKSkgeworICAgICAgICBpbnQgcmVzdWx0ID0gKGVycm5vID09IEVBR0FJTik/IDA6IC0xOworICAgICAgICBpZiAoc3RhcnRlZCkgbG9nUGFydGlhbFBhY2tldChwYWNrZXQsIG9mZnNldCk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICB9CisgICAgfQorCisgIGdvdEJ5dGU6CisgICAgaWYgKG9mZnNldCA9PSAwKSB7CisgICAgICBpZiAoYnl0ZSA9PSAwWDdGKSB7CisgICAgICAgIGxlbmd0aCA9IFBBQ0tFVF9TSVpFKDApOworICAgICAgfSBlbHNlIGlmICgoYnl0ZSAmIDBYRjApID09IDBYNzApIHsKKyAgICAgICAgbGVuZ3RoID0gMjsKKyAgICAgIH0gZWxzZSBpZiAoYnl0ZSA9PSBCUkxfSURbMF0pIHsKKyAgICAgICAgbGVuZ3RoID0gQlJMX0lEX1NJWkU7CisgICAgICB9IGVsc2UgaWYgKCFieXRlKSB7CisgICAgICAgIGxlbmd0aCA9IDI7CisgICAgICB9IGVsc2UgeworICAgICAgICBsb2dJZ25vcmVkQnl0ZShieXRlKTsKKyAgICAgICAgY29udGludWU7CisgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgIGludCB1bmV4cGVjdGVkID0gMDsKKworICAgICAgdW5zaWduZWQgY2hhciB0eXBlID0gcGFja2V0WzBdOworCisgICAgICBpZiAodHlwZSA9PSAwWDdGKSB7CisgICAgICAgIGlmIChvZmZzZXQgPT0gMykgbGVuZ3RoID0gUEFDS0VUX1NJWkUoYnl0ZSk7CisgICAgICAgIGlmICgoKG9mZnNldCAlIDIpID09IDApICYmIChieXRlICE9IDBYN0UpKSB1bmV4cGVjdGVkID0gMTsKKyAgICAgIH0gZWxzZSBpZiAodHlwZSA9PSBCUkxfSURbMF0pIHsKKyAgICAgICAgaWYgKChvZmZzZXQgPCBCUkxfSURfTEVOR1RIKSAmJiAoYnl0ZSAhPSBCUkxfSURbb2Zmc2V0XSkpIHVuZXhwZWN0ZWQgPSAxOworICAgICAgfSBlbHNlIGlmICghdHlwZSkgeworICAgICAgICBpZiAoYnl0ZSkgdW5leHBlY3RlZCA9IDE7CisgICAgICB9CisKKyAgICAgIGlmICh1bmV4cGVjdGVkKSB7CisgICAgICAgIGxvZ1Nob3J0UGFja2V0KHBhY2tldCwgb2Zmc2V0KTsKKyAgICAgICAgb2Zmc2V0ID0gMDsKKyAgICAgICAgbGVuZ3RoID0gMDsKKyAgICAgICAgZ290byBnb3RCeXRlOworICAgICAgfQorICAgIH0KKworICAgIGlmIChvZmZzZXQgPCBzaXplKSB7CisgICAgICBwYWNrZXRbb2Zmc2V0XSA9IGJ5dGU7CisgICAgfSBlbHNlIHsKKyAgICAgIGlmIChvZmZzZXQgPT0gc2l6ZSkgbG9nVHJ1bmNhdGVkUGFja2V0KHBhY2tldCwgb2Zmc2V0KTsKKyAgICAgIGxvZ0Rpc2NhcmRlZEJ5dGUoYnl0ZSk7CisgICAgfQorCisgICAgaWYgKCsrb2Zmc2V0ID09IGxlbmd0aCkgeworICAgICAgaWYgKChvZmZzZXQgPiBzaXplKSB8fCAhcGFja2V0WzBdKSB7CisgICAgICAgIG9mZnNldCA9IDA7CisgICAgICAgIGxlbmd0aCA9IDA7CisgICAgICAgIGNvbnRpbnVlOworICAgICAgfQorCisgICAgICBsb2dJbnB1dFBhY2tldChwYWNrZXQsIG9mZnNldCk7CisgICAgICByZXR1cm4gbGVuZ3RoOworICAgIH0KKyAgfQorfQorCitzdGF0aWMgaW50CitkZXRlY3RNb2RlbDEgKEJyYWlsbGVEaXNwbGF5ICpicmwpIHsKKyAgaW50IHByb2JlcyA9IDA7CisKKyAgd2hpbGUgKHdyaXRlRnVuY3Rpb24xKGJybCwgMFgwNikpIHsKKyAgICB3aGlsZSAoYXdhaXRCcmFpbGxlSW5wdXQoYnJsLCAyMDApKSB7CisgICAgICB1bnNpZ25lZCBjaGFyIHBhY2tldFtNQVhJTVVNX1BBQ0tFVF9TSVpFXTsKKworICAgICAgaWYgKHByb3RvY29sLT5yZWFkUGFja2V0KGJybCwgcGFja2V0LCBzaXplb2YocGFja2V0KSkgPiAwKSB7CisgICAgICAgIGlmIChtZW1jbXAocGFja2V0LCBCUkxfSUQsIEJSTF9JRF9MRU5HVEgpID09IDApIHsKKyAgICAgICAgICBpZiAoaWRlbnRpZnlNb2RlbDEoYnJsLCBwYWNrZXRbQlJMX0lEX0xFTkdUSF0pKSB7CisgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoZXJybm8gIT0gRUFHQUlOKSBicmVhazsKKyAgICBpZiAoKytwcm9iZXMgPT0gMykgYnJlYWs7CisgIH0KKworICByZXR1cm4gMDsKK30KKworc3RhdGljIGludAorcmVhZENvbW1hbmQxIChCcmFpbGxlRGlzcGxheSAqYnJsKSB7CisgIHVuc2lnbmVkIGNoYXIgcGFja2V0W01BWElNVU1fUEFDS0VUX1NJWkVdOworICBpbnQgbGVuZ3RoOworCisgIHdoaWxlICgobGVuZ3RoID0gcHJvdG9jb2wtPnJlYWRQYWNrZXQoYnJsLCBwYWNrZXQsIHNpemVvZihwYWNrZXQpKSkgPiAwKSB7CisgICAgdW5zaWduZWQgY2hhciBncm91cCA9IHBhY2tldFswXTsKKyAgICB1bnNpZ25lZCBjaGFyIGtleSA9IHBhY2tldFsxXTsKKyAgICBpbnQgcHJlc3MgPSAhKGtleSAmIEFMX0tFWV9SRUxFQVNFKTsKKyAgICBrZXkgJj0gfkFMX0tFWV9SRUxFQVNFOworCisgICAgc3dpdGNoIChncm91cCkgeworICAgICAgY2FzZSAwWDcxOiAvKiBvcGVyYXRpbmcga2V5cyBhbmQgc3RhdHVzIGtleXMgKi8KKyAgICAgICAgaWYgKGtleSA8PSAwWDBEKSB7CisgICAgICAgICAgZW5xdWV1ZUtleUV2ZW50KGJybCwgQUxfR1JQX05hdmlnYXRpb25LZXlzLCBrZXkrQUxfS0VZX09QRVJBVElPTiwgcHJlc3MpOworICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgaWYgKChrZXkgPj0gMFgyMCkgJiYgKGtleSA8PSAwWDI1KSkgeworICAgICAgICAgIGVucXVldWVLZXlFdmVudChicmwsIEFMX0dSUF9OYXZpZ2F0aW9uS2V5cywga2V5LTBYMjArQUxfS0VZX1NUQVRVUzEsIHByZXNzKTsKKyAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICgoa2V5ID49IDBYMzApICYmIChrZXkgPD0gMFgzNSkpIHsKKyAgICAgICAgICBlbnF1ZXVlS2V5RXZlbnQoYnJsLCBBTF9HUlBfTmF2aWdhdGlvbktleXMsIGtleS0wWDMwK0FMX0tFWV9TVEFUVVMyLCBwcmVzcyk7CisgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKworICAgICAgICBicmVhazsKKworICAgICAgY2FzZSAwWDcyOiAvKiBwcmltYXJ5IChsb3dlcikgcm91dGluZyBrZXlzICovCisgICAgICAgIGlmIChrZXkgPD0gMFg1RikgewkJCS8qIG1ha2UgKi8KKyAgICAgICAgICBlbnF1ZXVlS2V5RXZlbnQoYnJsLCBBTF9HUlBfUm91dGluZ0tleXMxLCBrZXksIHByZXNzKTsKKyAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIGJyZWFrOworCisgICAgICBjYXNlIDBYNzU6IC8qIHNlY29uZGFyeSAodXBwZXIpIHJvdXRpbmcga2V5cyAqLworICAgICAgICBpZiAoa2V5IDw9IDBYNUYpIHsJCQkvKiBtYWtlICovCisgICAgICAgICAgZW5xdWV1ZUtleUV2ZW50KGJybCwgQUxfR1JQX1JvdXRpbmdLZXlzMiwga2V5LCBwcmVzcyk7CisgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKworICAgICAgICBicmVhazsKKworICAgICAgY2FzZSAwWDc3OiAvKiBzYXRlbGxpdGUga2V5cGFkcyAqLworICAgICAgICBpZiAoa2V5IDw9IDBYMDUpIHsKKyAgICAgICAgICBlbnF1ZXVlS2V5RXZlbnQoYnJsLCBBTF9HUlBfTmF2aWdhdGlvbktleXMsIGtleStBTF9LRVlfU1BFRUNIX1BBRCwgcHJlc3MpOworICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgaWYgKChrZXkgPj0gMFgyMCkgJiYgKGtleSA8PSAwWDI1KSkgeworICAgICAgICAgIGVucXVldWVLZXlFdmVudChicmwsIEFMX0dSUF9OYXZpZ2F0aW9uS2V5cywga2V5LTBYMjArQUxfS0VZX05BVl9QQUQsIHByZXNzKTsKKyAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIGNvbnRpbnVlOworCisgICAgICBjYXNlIDBYN0Y6CisgICAgICAgIHN3aXRjaCAocGFja2V0WzFdKSB7CisgICAgICAgICAgY2FzZSAwWDA3OiAvKiB0ZXh0L3N0YXR1cyBjZWxscyByZWNvbmZpZ3VyZWQgKi8KKyAgICAgICAgICAgIGlmICghdXBkYXRlQ29uZmlndXJhdGlvbjEoYnJsLCAwLCBwYWNrZXQpKSByZXR1cm4gQlJMX0NNRF9SRVNUQVJUQlJMOworICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICBjYXNlIDBYMEI6IHsgLyogZGlzcGxheSBwYXJhbWV0ZXJzIHJlY29uZmlndXJlZCAqLworICAgICAgICAgICAgaW50IGNvdW50ID0gUEFDS0VUX0JZVEUocGFja2V0LCAwKTsKKworICAgICAgICAgICAgaWYgKGNvdW50ID49IDgpIHsKKyAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciBmcm9udEtleXMgPSBQQUNLRVRfQllURShwYWNrZXQsIDgpOworICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyIHByb2dLZXkgPSAwWDAyOworCisgICAgICAgICAgICAgIGlmIChmcm9udEtleXMgJiBwcm9nS2V5KSB7CisgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciBuZXdTZXR0aW5nID0gZnJvbnRLZXlzICYgfnByb2dLZXk7CisKKyAgICAgICAgICAgICAgICBsb2dNZXNzYWdlKExPR19ERUJVRywgIlJlY29uZmlndXJpbmcgZnJvbnQga2V5czogJTAyWCAtPiAlMDJYIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb250S2V5cywgbmV3U2V0dGluZyk7CisgICAgICAgICAgICAgICAgd3JpdGVQYXJhbWV0ZXIxKGJybCwgNiwgbmV3U2V0dGluZyk7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIGlmIChsZW5ndGggPj0gQlJMX0lEX1NJWkUpIHsKKyAgICAgICAgICBpZiAobWVtY21wKHBhY2tldCwgQlJMX0lELCBCUkxfSURfTEVOR1RIKSA9PSAwKSB7CisgICAgICAgICAgICAvKiBUaGUgdGVybWluYWwgaGFzIGJlZW4gdHVybmVkIG9mZiBhbmQgYmFjayBvbi4gKi8KKyAgICAgICAgICAgIGlmICghaWRlbnRpZnlNb2RlbDEoYnJsLCBwYWNrZXRbQlJMX0lEX0xFTkdUSF0pKSByZXR1cm4gQlJMX0NNRF9SRVNUQVJUQlJMOworICAgICAgICAgICAgYnJsLT5yZXNpemVSZXF1aXJlZCA9IDE7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBsb2dVbmV4cGVjdGVkUGFja2V0KHBhY2tldCwgbGVuZ3RoKTsKKyAgfQorCisgIHJldHVybiAobGVuZ3RoIDwgMCk/IEJSTF9DTURfUkVTVEFSVEJSTDogRU9GOworfQorCitzdGF0aWMgaW50Cit3cml0ZUJyYWlsbGUxIChCcmFpbGxlRGlzcGxheSAqYnJsLCBjb25zdCB1bnNpZ25lZCBjaGFyICpjZWxscywgaW50IHN0YXJ0LCBpbnQgY291bnQpIHsKKyAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaGVhZGVyW10gPSB7QVNDSUlfQ1IsIEFTQ0lJX0VTQywgJ0InfTsJLyogZXNjYXBlIGNvZGUgdG8gZGlzcGxheSBicmFpbGxlICovCisgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHRyYWlsZXJbXSA9IHtBU0NJSV9DUn07CQkvKiB0byBzZW5kIGFmdGVyIHRoZSBicmFpbGxlIHNlcXVlbmNlICovCisKKyAgdW5zaWduZWQgY2hhciBwYWNrZXRbc2l6ZW9mKGhlYWRlcikgKyAyICsgY291bnQgKyBzaXplb2YodHJhaWxlcildOworICB1bnNpZ25lZCBjaGFyICpieXRlID0gcGFja2V0OworCisgIGJ5dGUgPSBtZW1wY3B5KGJ5dGUsIGhlYWRlciwgc2l6ZW9mKGhlYWRlcikpOworICAqYnl0ZSsrID0gc3RhcnQ7CisgICpieXRlKysgPSBjb3VudDsKKyAgYnl0ZSA9IG1lbXBjcHkoYnl0ZSwgY2VsbHMsIGNvdW50KTsKKyAgYnl0ZSA9IG1lbXBjcHkoYnl0ZSwgdHJhaWxlciwgc2l6ZW9mKHRyYWlsZXIpKTsKKworICByZXR1cm4gd3JpdGVCcmFpbGxlUGFja2V0KGJybCwgTlVMTCwgcGFja2V0LCBieXRlLXBhY2tldCk7Cit9CisKK3N0YXRpYyBjb25zdCBQcm90b2NvbE9wZXJhdGlvbnMgcHJvdG9jb2wxT3BlcmF0aW9ucyA9IHsKKyAgLmluaXRpYWxpemVWYXJpYWJsZXMgPSBpbml0aWFsaXplVmFyaWFibGVzMSwKKworICAucmVhZFBhY2tldCA9IHJlYWRQYWNrZXQxLAorCisgIC51cGRhdGVDb25maWd1cmF0aW9uID0gdXBkYXRlQ29uZmlndXJhdGlvbjEsCisgIC5kZXRlY3RNb2RlbCA9IGRldGVjdE1vZGVsMSwKKworICAucmVhZENvbW1hbmQgPSByZWFkQ29tbWFuZDEsCisgIC53cml0ZUJyYWlsbGUgPSB3cml0ZUJyYWlsbGUxCit9OworCitzdGF0aWMgdm9pZAoraW5pdGlhbGl6ZVZhcmlhYmxlczIgKEJyYWlsbGVEaXNwbGF5ICpicmwsIGNoYXIgKipwYXJhbWV0ZXJzKSB7CisgIGJybC0+ZGF0YS0+cHJvdG9jb2wuYmMuc2Vjb25kYXJ5Um91dGluZ0tleUVtdWxhdGlvbiA9IDA7CisgIGlmICgqcGFyYW1ldGVyc1tQQVJNX1NFQ09OREFSWV9ST1VUSU5HX0tFWV9FTVVMQVRJT05dKSB7CisgICAgaWYgKCF2YWxpZGF0ZVllc05vKCZicmwtPmRhdGEtPnByb3RvY29sLmJjLnNlY29uZGFyeVJvdXRpbmdLZXlFbXVsYXRpb24sIHBhcmFtZXRlcnNbUEFSTV9TRUNPTkRBUllfUk9VVElOR19LRVlfRU1VTEFUSU9OXSkpIHsKKyAgICAgIGxvZ01lc3NhZ2UoTE9HX1dBUk5JTkcsICIlczogJXMiLCAiaW52YWxpZCBzZWNvbmRhcnkgcm91dGluZyBrZXkgZW11bGF0aW9uIHNldHRpbmciLAorICAgICAgICAgICAgICAgICBwYXJhbWV0ZXJzW1BBUk1fU0VDT05EQVJZX1JPVVRJTkdfS0VZX0VNVUxBVElPTl0pOworICAgIH0KKyAgfQorCisgIGluaXRpYWxpemVIaWRLZXlib2FyZFBhY2tldCgmYnJsLT5kYXRhLT5wcm90b2NvbC5iYy5oaWRLZXlib2FyZFBhY2tldCk7CisKKyAgYnJsLT5kYXRhLT5wcm90b2NvbC5iYy52ZXJzaW9uLmhhcmR3YXJlID0gMDsKKyAgYnJsLT5kYXRhLT5wcm90b2NvbC5iYy52ZXJzaW9uLmZpcm13YXJlID0gMDsKKyAgYnJsLT5kYXRhLT5wcm90b2NvbC5iYy52ZXJzaW9uLmJ0QmFzZSA9IDA7CisgIGJybC0+ZGF0YS0+cHJvdG9jb2wuYmMudmVyc2lvbi5idEZQID0gMDsKKworICBicmwtPmRhdGEtPnByb3RvY29sLmJjLm1hY0FkZHJlc3MuYmFzZSA9IDA7CisgIGJybC0+ZGF0YS0+cHJvdG9jb2wuYmMubWFjQWRkcmVzcy5mZWF0dXJlUGFjayA9IDA7Cit9CisKK3N0YXRpYyBpbnQKK3Rlc3RIYXZlRmVhdHVyZVBhY2syIChCcmFpbGxlRGlzcGxheSAqYnJsKSB7CisgIHJldHVybiBicmwtPmRhdGEtPnByb3RvY29sLmJjLm1hY0FkZHJlc3MuZmVhdHVyZVBhY2sgIT0gMDsKK30KKworc3RhdGljIGludAordGVzdEhhdmVSYXdLZXlib2FyZDIgKEJyYWlsbGVEaXNwbGF5ICpicmwpIHsKKyAgcmV0dXJuIHRlc3RIYXZlRmVhdHVyZVBhY2syKGJybCkgJiYKKyAgICAgICAgIChicmwtPmRhdGEtPnByb3RvY29sLmJjLnZlcnNpb24uZmlybXdhcmUgPj0gMFgwMjA4MDEpOworfQorCitzdGF0aWMgdm9pZAorbG9nVmVyc2lvbjIgKHVpbnQzMl90IHZlcnNpb24sIGNvbnN0IGNoYXIgKmxhYmVsKSB7CisgIEJ5dGVzT3ZlcmxheSBvdmVybGF5OworCisgIHVuc2lnbmVkIGNoYXIgKmJ5dGUgPSAmb3ZlcmxheS5ieXRlc1syXTsKKyAgY2hhciBzdHJpbmdbMFg0MF07CisKKyAgcHV0TGl0dGxlRW5kaWFuMzIoJm92ZXJsYXkudTMyLCB2ZXJzaW9uKTsKKyAgU1RSX0JFR0lOKHN0cmluZywgc2l6ZW9mKHN0cmluZykpOworCisgIHdoaWxlICgxKSB7CisgICAgU1RSX1BSSU5URigiJXUiLCAqYnl0ZSk7CisgICAgaWYgKGJ5dGUgPT0gb3ZlcmxheS5ieXRlcykgYnJlYWs7CisKKyAgICAqYnl0ZSA9IDA7CisgICAgaWYgKCFvdmVybGF5LnUzMikgYnJlYWs7CisKKyAgICBTVFJfUFJJTlRGKCIuIik7CisgICAgYnl0ZSAtPSAxOworICB9CisKKyAgU1RSX0VORDsKKyAgbG9nTWVzc2FnZShMT0dfREVCVUcsICIlczogJXMiLCBsYWJlbCwgc3RyaW5nKTsKK30KKworc3RhdGljIHVpbnQ2NF90CitwYXJzZUhhcmR3YXJlVmVyc2lvbjIgKAorICBjb25zdCB1bnNpZ25lZCBjaGFyICoqYnl0ZXMsIHNpemVfdCAqY291bnQKKykgeworICByZXR1cm4gcGFyc2VEZWNpbWFsRmllbGQoYnl0ZXMsIGNvdW50LCAyLCAzKTsKK30KKworc3RhdGljIHVpbnQ2NF90CitwYXJzZUZpcm13YXJlVmVyc2lvbjIgKAorICBjb25zdCB1bnNpZ25lZCBjaGFyICoqYnl0ZXMsIHNpemVfdCAqY291bnQKKykgeworICByZXR1cm4gcGFyc2VIZXhhZGVjaW1hbEZpZWxkKGJ5dGVzLCBjb3VudCwgMywgMyk7Cit9CisKK3N0YXRpYyB2b2lkCitzZXRWZXJzaW9uczIgKEJyYWlsbGVEaXNwbGF5ICpicmwsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ5dGVzLCBzaXplX3QgY291bnQpIHsKKyAgYnJsLT5kYXRhLT5wcm90b2NvbC5iYy52ZXJzaW9uLmhhcmR3YXJlID0gcGFyc2VIYXJkd2FyZVZlcnNpb24yKCZieXRlcywgJmNvdW50KTsKKyAgbG9nVmVyc2lvbjIoYnJsLT5kYXRhLT5wcm90b2NvbC5iYy52ZXJzaW9uLmhhcmR3YXJlLCAiSGFyZHdhcmUgVmVyc2lvbiIpOworCisgIGJybC0+ZGF0YS0+cHJvdG9jb2wuYmMudmVyc2lvbi5maXJtd2FyZSA9IHBhcnNlRmlybXdhcmVWZXJzaW9uMigmYnl0ZXMsICZjb3VudCk7CisgIGxvZ1ZlcnNpb24yKGJybC0+ZGF0YS0+cHJvdG9jb2wuYmMudmVyc2lvbi5maXJtd2FyZSwgIkZpcm13YXJlIFZlcnNpb24iKTsKKworICBicmwtPmRhdGEtPnByb3RvY29sLmJjLnZlcnNpb24uYnRCYXNlID0gcGFyc2VGaXJtd2FyZVZlcnNpb24yKCZieXRlcywgJmNvdW50KTsKKyAgbG9nVmVyc2lvbjIoYnJsLT5kYXRhLT5wcm90b2NvbC5iYy52ZXJzaW9uLmJ0QmFzZSwgIkJhc2UgQmx1ZXRvb3RoIE1vZHVsZSBWZXJzaW9uIik7CisKKyAgYnJsLT5kYXRhLT5wcm90b2NvbC5iYy52ZXJzaW9uLmJ0RlAgPSBwYXJzZUZpcm13YXJlVmVyc2lvbjIoJmJ5dGVzLCAmY291bnQpOworICBsb2dWZXJzaW9uMihicmwtPmRhdGEtPnByb3RvY29sLmJjLnZlcnNpb24uYnRGUCwgIkZlYXR1cmUgUGFjayBCbHVldG9vdGggTW9kdWxlIFZlcnNpb24iKTsKK30KKworc3RhdGljIHZvaWQKK2xvZ01hY0FkZHJlc3MyICh1aW50NjRfdCBhZGRyZXNzLCBjb25zdCBjaGFyICpsYWJlbCkgeworICBCeXRlc092ZXJsYXkgb3ZlcmxheTsKKworICBjb25zdCB1bnNpZ25lZCBjaGFyICpieXRlID0gJm92ZXJsYXkuYnl0ZXNbNV07CisgIGNoYXIgc3RyaW5nWzBYMjBdOworCisgIHB1dExpdHRsZUVuZGlhbjY0KCZvdmVybGF5LnU2NCwgYWRkcmVzcyk7CisgIFNUUl9CRUdJTihzdHJpbmcsIHNpemVvZihzdHJpbmcpKTsKKworICB3aGlsZSAoMSkgeworICAgIFNUUl9QUklOVEYoIiUwMlgiLCAqYnl0ZSk7CisgICAgaWYgKGJ5dGUgPT0gb3ZlcmxheS5ieXRlcykgYnJlYWs7CisgICAgYnl0ZSAtPSAxOworICAgIFNUUl9QUklOVEYoIiVjIiwgJzonKTsKKyAgfQorCisgIFNUUl9FTkQ7CisgIGxvZ01lc3NhZ2UoTE9HX0RFQlVHLCAiJXM6ICVzIiwgbGFiZWwsIHN0cmluZyk7Cit9CisKK3N0YXRpYyB1aW50NjRfdAorcGFyc2VNYWNBZGRyZXNzMiAoCisgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKipieXRlcywgc2l6ZV90ICpjb3VudAorKSB7CisgIEJ5dGVzT3ZlcmxheSBvdmVybGF5OworCisgIHB1dExpdHRsZUVuZGlhbjY0KCZvdmVybGF5LnU2NCwgcGFyc2VIZXhhZGVjaW1hbEZpZWxkKGJ5dGVzLCBjb3VudCwgNiwgNikpOworICBzd2FwQnl0ZXMoJm92ZXJsYXkuYnl0ZXNbNV0sICZvdmVybGF5LmJ5dGVzWzRdKTsKKyAgc3dhcEJ5dGVzKCZvdmVybGF5LmJ5dGVzWzJdLCAmb3ZlcmxheS5ieXRlc1swXSk7CisgIHJldHVybiBnZXRMaXR0bGVFbmRpYW42NChvdmVybGF5LnU2NCk7Cit9CisKK3N0YXRpYyB2b2lkCitzZXRNYWNBZGRyZXNzZXMyIChCcmFpbGxlRGlzcGxheSAqYnJsLCBjb25zdCB1bnNpZ25lZCBjaGFyICpieXRlcywgc2l6ZV90IGNvdW50KSB7CisgIGJybC0+ZGF0YS0+cHJvdG9jb2wuYmMubWFjQWRkcmVzcy5iYXNlID0gcGFyc2VNYWNBZGRyZXNzMigmYnl0ZXMsICZjb3VudCk7CisgIGxvZ01hY0FkZHJlc3MyKGJybC0+ZGF0YS0+cHJvdG9jb2wuYmMubWFjQWRkcmVzcy5iYXNlLCAiQmFzZSBNYWMgQWRkcmVzcyIpOworCisgIGJybC0+ZGF0YS0+cHJvdG9jb2wuYmMubWFjQWRkcmVzcy5mZWF0dXJlUGFjayA9IHBhcnNlTWFjQWRkcmVzczIoJmJ5dGVzLCAmY291bnQpOworICBsb2dNYWNBZGRyZXNzMihicmwtPmRhdGEtPnByb3RvY29sLmJjLm1hY0FkZHJlc3MuZmVhdHVyZVBhY2ssICJGZWF0dXJlIFBhY2sgTWFjIEFkZHJlc3MiKTsKK30KKworc3RhdGljIGludAoraW50ZXJwcmV0S2V5Ym9hcmRFdmVudDIgKEJyYWlsbGVEaXNwbGF5ICpicmwsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnBhY2tldCkgeworICBjb25zdCB2b2lkICpuZXdQYWNrZXQgPSBwYWNrZXQ7CisgIHByb2Nlc3NIaWRLZXlib2FyZFBhY2tldCgmYnJsLT5kYXRhLT5wcm90b2NvbC5iYy5oaWRLZXlib2FyZFBhY2tldCwgbmV3UGFja2V0KTsKKyAgcmV0dXJuIEVPRjsKK30KKworc3RhdGljIGludAoraW50ZXJwcmV0S2V5RXZlbnQyIChCcmFpbGxlRGlzcGxheSAqYnJsLCB1bnNpZ25lZCBjaGFyIGdyb3VwLCB1bnNpZ25lZCBjaGFyIGtleSkgeworICB1bnNpZ25lZCBjaGFyIHJlbGVhc2UgPSBncm91cCAmIDBYODA7CisgIGludCBwcmVzcyA9ICFyZWxlYXNlOworICBncm91cCAmPSB+cmVsZWFzZTsKKworICBzd2l0Y2ggKGdyb3VwKSB7CisgICAgY2FzZSAwWDAxOgorICAgICAgc3dpdGNoIChrZXkpIHsKKyAgICAgICAgY2FzZSAwWDAxOgorICAgICAgICAgIGlmICghcHJvdG9jb2wtPnVwZGF0ZUNvbmZpZ3VyYXRpb24oYnJsLCAwLCBOVUxMKSkgcmV0dXJuIEJSTF9DTURfUkVTVEFSVEJSTDsKKyAgICAgICAgICByZXR1cm4gRU9GOworCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgYnJlYWs7CisgICAgICB9CisgICAgICBicmVhazsKKworICAgIHsKKyAgICAgIHVuc2lnbmVkIGludCBiYXNlOworICAgICAgdW5zaWduZWQgaW50IGNvdW50OworICAgICAgaW50IHNlY29uZGFyeTsKKworICAgIGNhc2UgMFg3MTogLyogdGh1bWIga2V5ICovCisgICAgICBiYXNlID0gQUxfS0VZX1RIVU1COworICAgICAgY291bnQgPSBBTF9LRVlTX1RIVU1COworICAgICAgc2Vjb25kYXJ5ID0gMTsKKyAgICAgIGdvdG8gZG9LZXk7CisKKyAgICBjYXNlIDBYNzI6IC8qIGV0b3VjaCBrZXkgKi8KKyAgICAgIGJhc2UgPSBBTF9LRVlfRVRPVUNIOworICAgICAgY291bnQgPSBBTF9LRVlTX0VUT1VDSDsKKyAgICAgIHNlY29uZGFyeSA9IDA7CisgICAgICBnb3RvIGRvS2V5OworCisgICAgY2FzZSAwWDczOiAvKiBzbWFydHBhZCBrZXkgKi8KKyAgICAgIGJhc2UgPSBBTF9LRVlfU01BUlRQQUQ7CisgICAgICBjb3VudCA9IEFMX0tFWVNfU01BUlRQQUQ7CisgICAgICBzZWNvbmRhcnkgPSAxOworICAgICAgZ290byBkb0tleTsKKworICAgIGNhc2UgMFg3ODogLyogZmVhdHVyZSBwYWNrIGtleSAqLworICAgICAgYmFzZSA9IEFMX0tFWV9GRUFUVVJFUEFDSzsKKyAgICAgIGNvdW50ID0gQUxfS0VZU19GRUFUVVJFUEFDSzsKKyAgICAgIHNlY29uZGFyeSA9IDA7CisgICAgICBnb3RvIGRvS2V5OworCisgICAgZG9LZXk6CisgICAgICBpZiAoc2Vjb25kYXJ5KSB7CisgICAgICAgIGlmICgoa2V5IC8gY291bnQpID09IDEpIHsKKyAgICAgICAgICBrZXkgLT0gY291bnQ7CisgICAgICAgIH0KKyAgICAgIH0KKworICAgICAgaWYgKGtleSA8IGNvdW50KSB7CisgICAgICAgIGVucXVldWVLZXlFdmVudChicmwsIEFMX0dSUF9OYXZpZ2F0aW9uS2V5cywgYmFzZStrZXksIHByZXNzKTsKKyAgICAgICAgcmV0dXJuIEVPRjsKKyAgICAgIH0KKyAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2UgMFg3NDogeyAvKiByb3V0aW5nIGtleSAqLworICAgICAgdW5zaWduZWQgY2hhciBzZWNvbmRhcnkgPSBrZXkgJiAwWDgwOworICAgICAga2V5ICY9IH5zZWNvbmRhcnk7CisKKyAgICAgIC8qIAorICAgICAgICogVGhlIDZ4eCBzZXJpZXMgZG9uJ3QgaGF2ZSBhIHNlY29uZCByb3cgb2Ygcm91dGluZyBrZXlzIGJ1dAorICAgICAgICogZW11bGF0ZSB0aGVtIChpbiBvcmRlciB0byBhaWQgY29tcGF0aWJpbGl0eSB3aXRoIHRoZSA1eHggc2VyaWVzKQorICAgICAgICogdXNpbmcgYW4gYW5ub3lpbmcgcHJlc3MgZGVsYXkuICBJdCBpcyBhZHZpc2VhYmxlIHRvIHR1cm4gdGhpcworICAgICAgICogZnVuY3Rpb25hbGl0eSBvZmYgaW4gdGhlIGRldmljZSdzIG1lbnUsIGJ1dCwgaW4gY2FzZSBpdCdzIGxlZnQKKyAgICAgICAqIG9uLCB3ZSBqdXN0IGludGVycHJldCB0aGVzZSBrZXlzIGFzIHByaW1hcnkgcm91dGluZyBrZXlzIGJ5CisgICAgICAgKiBkZWZhdWx0LCB1bmxlc3Mgb3ZlcnJpZGVuIGJ5IGEgZHJpdmVyIHBhcmFtZXRlci4KKyAgICAgICAqLworICAgICAgaWYgKCFicmwtPmRhdGEtPnByb3RvY29sLmJjLnNlY29uZGFyeVJvdXRpbmdLZXlFbXVsYXRpb24pIHNlY29uZGFyeSA9IDA7CisKKyAgICAgIGlmIChicmwtPmRhdGEtPnByb3RvY29sLmJjLnZlcnNpb24uZmlybXdhcmUgPCAwWDAxMTEwMikgeworICAgICAgICBpZiAoa2V5ID49IGJybC0+ZGF0YS0+cHJvdG9jb2wuYmMuc3BsaXRPZmZzZXQpIHsKKyAgICAgICAgICBrZXkgLT0gYnJsLT5kYXRhLT5wcm90b2NvbC5iYy5zcGxpdE9mZnNldDsKKyAgICAgICAgfQorICAgICAgfQorCisgICAgICBpZiAoa2V5ID49IHRleHRPZmZzZXQpIHsKKyAgICAgICAgaWYgKChrZXkgLT0gdGV4dE9mZnNldCkgPCBicmwtPnRleHRDb2x1bW5zKSB7CisgICAgICAgICAgS2V5R3JvdXAgZ3JvdXAgPSBzZWNvbmRhcnk/IEFMX0dSUF9Sb3V0aW5nS2V5czI6IEFMX0dSUF9Sb3V0aW5nS2V5czE7CisKKyAgICAgICAgICBlbnF1ZXVlS2V5RXZlbnQoYnJsLCBncm91cCwga2V5LCBwcmVzcyk7CisgICAgICAgICAgcmV0dXJuIEVPRjsKKyAgICAgICAgfQorICAgICAgfQorICAgICAgYnJlYWs7CisgICAgfQorCisgICAgZGVmYXVsdDoKKyAgICAgIGJyZWFrOworICB9CisKKyAgbG9nTWVzc2FnZShMT0dfV0FSTklORywgInVua25vd24ga2V5OiBncm91cD0lMDJYIGtleT0lMDJYIiwgZ3JvdXAsIGtleSk7CisgIHJldHVybiBFT0Y7Cit9CisKK3N0YXRpYyBCcmFpbGxlUGFja2V0VmVyaWZpZXJSZXN1bHQKK3ZlcmlmeVBhY2tldDJzICgKKyAgQnJhaWxsZURpc3BsYXkgKmJybCwKKyAgdW5zaWduZWQgY2hhciAqYnl0ZXMsIHNpemVfdCBzaXplLAorICBzaXplX3QgKmxlbmd0aCwgdm9pZCAqZGF0YQorKSB7CisgIHVuc2lnbmVkIGNoYXIgYnl0ZSA9IGJ5dGVzW3NpemUtMV07CisKKyAgc3dpdGNoIChzaXplKSB7CisgICAgY2FzZSAxOgorICAgICAgc3dpdGNoIChieXRlKSB7CisgICAgICAgIGNhc2UgQVNDSUlfRVNDOgorICAgICAgICAgICpsZW5ndGggPSAyOworICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgcmV0dXJuIEJSTF9QVlJfSU5WQUxJRDsKKyAgICAgIH0KKyAgICAgIGJyZWFrOworCisgICAgY2FzZSAyOgorICAgICAgc3dpdGNoIChieXRlKSB7CisgICAgICAgIGNhc2UgMFgzMjogLyogMiAqLyAqbGVuZ3RoID0gIDU7IGJyZWFrOworICAgICAgICBjYXNlIDBYM0Y6IC8qID8gKi8gKmxlbmd0aCA9ICAzOyBicmVhazsKKyAgICAgICAgY2FzZSAwWDQ1OiAvKiBFICovICpsZW5ndGggPSAgMzsgYnJlYWs7CisgICAgICAgIGNhc2UgMFg0QjogLyogSyAqLyAqbGVuZ3RoID0gIDQ7IGJyZWFrOworICAgICAgICBjYXNlIDBYNEU6IC8qIE4gKi8gKmxlbmd0aCA9IDE0OyBicmVhazsKKyAgICAgICAgY2FzZSAwWDUwOiAvKiBQICovICpsZW5ndGggPSAgMzsgYnJlYWs7CisgICAgICAgIGNhc2UgMFg1NDogLyogVCAqLyAqbGVuZ3RoID0gIDQ7IGJyZWFrOworICAgICAgICBjYXNlIDBYNTY6IC8qIFYgKi8gKmxlbmd0aCA9IDEzOyBicmVhazsKKyAgICAgICAgY2FzZSAwWDY4OiAvKiBoICovICpsZW5ndGggPSAxMDsgYnJlYWs7CisgICAgICAgIGNhc2UgMFg3MjogLyogciAqLyAqbGVuZ3RoID0gMzsgYnJlYWs7CisKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICByZXR1cm4gQlJMX1BWUl9JTlZBTElEOworICAgICAgfQorICAgICAgYnJlYWs7CisKKyAgICBkZWZhdWx0OgorICAgICAgYnJlYWs7CisgIH0KKworICByZXR1cm4gQlJMX1BWUl9JTkNMVURFOworfQorCitzdGF0aWMgaW50CitzZXRGZWF0dXJlMnMgKEJyYWlsbGVEaXNwbGF5ICpicmwsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnJlcXVlc3QsIHNpemVfdCBzaXplKSB7CisgIHJldHVybiB3cml0ZUJyYWlsbGVQYWNrZXQoYnJsLCBOVUxMLCByZXF1ZXN0LCBzaXplKTsKK30KKworc3RhdGljIHNpemVfdAorZ2V0RmVhdHVyZTJzIChCcmFpbGxlRGlzcGxheSAqYnJsLCB1bnNpZ25lZCBjaGFyIGZlYXR1cmUsIHVuc2lnbmVkIGNoYXIgKnJlc3BvbnNlLCBzaXplX3Qgc2l6ZSkgeworICBjb25zdCB1bnNpZ25lZCBjaGFyIHJlcXVlc3RbXSA9IHtBU0NJSV9FU0MsIGZlYXR1cmUsIDBYM0Z9OworCisgIGlmIChwcm90b2NvbC0+c2V0RmVhdHVyZShicmwsIHJlcXVlc3QsIHNpemVvZihyZXF1ZXN0KSkpIHsKKyAgICB3aGlsZSAoYXdhaXRCcmFpbGxlSW5wdXQoYnJsLCAxMDAwKSkgeworICAgICAgaW50IGxlbmd0aCA9IHByb3RvY29sLT5yZWFkUGFja2V0KGJybCwgcmVzcG9uc2UsIHNpemUpOworCisgICAgICBpZiAobGVuZ3RoIDw9IDApIGJyZWFrOworICAgICAgaWYgKChyZXNwb25zZVswXSA9PSBBU0NJSV9FU0MpICYmIChyZXNwb25zZVsxXSA9PSBmZWF0dXJlKSkgcmV0dXJuIGxlbmd0aDsKKyAgICAgIGxvZ1VuZXhwZWN0ZWRQYWNrZXQocmVzcG9uc2UsIGxlbmd0aCk7CisgICAgfQorICB9CisKKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK3VwZGF0ZUNvbmZpZ3VyYXRpb24ycyAoQnJhaWxsZURpc3BsYXkgKmJybCwgaW50IGF1dG9kZXRlY3RpbmcsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnBhY2tldCkgeworICB1bnNpZ25lZCBjaGFyIHJlc3BvbnNlWzBYMjBdOworCisgIGlmIChwcm90b2NvbC0+Z2V0RmVhdHVyZShicmwsIDBYNDUsIHJlc3BvbnNlLCBzaXplb2YocmVzcG9uc2UpKSkgeworICAgIHVuc2lnbmVkIGNoYXIgdGV4dENvbHVtbnMgPSByZXNwb25zZVsyXTsKKworICAgIGlmIChhdXRvZGV0ZWN0aW5nKSB7CisgICAgICBpZiAoYnJsLT5kYXRhLT5wcm90b2NvbC5iYy52ZXJzaW9uLmZpcm13YXJlIDwgMFgwMTBBMDApIHsKKyAgICAgICAgc3dpdGNoICh0ZXh0Q29sdW1ucykgeworICAgICAgICAgIGNhc2UgMTI6CisgICAgICAgICAgICBpZiAobW9kZWwgPT0gJm1vZGVsQkM2NDApIHsKKyAgICAgICAgICAgICAgbW9kZWwgPSAmbW9kZWxFTDEyOworICAgICAgICAgICAgICBsb2dNZXNzYWdlKExPR19JTkZPLCAic3dpdGNoZWQgdG8gbW9kZWwgJXMiLCBtb2RlbC0+bmFtZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgfQorICAgIH0KKworICAgIGlmIChwcm90b2NvbC0+Z2V0RmVhdHVyZShicmwsIDBYNTQsIHJlc3BvbnNlLCBzaXplb2YocmVzcG9uc2UpKSkgeworICAgICAgdW5zaWduZWQgY2hhciBzdGF0dXNDb2x1bW5zID0gcmVzcG9uc2VbMl07CisgICAgICB1bnNpZ25lZCBjaGFyIHN0YXR1c1NpZGUgPSByZXNwb25zZVszXTsKKworICAgICAgaWYgKHVwZGF0ZUNvbmZpZ3VyYXRpb24oYnJsLCBhdXRvZGV0ZWN0aW5nLCB0ZXh0Q29sdW1ucywgc3RhdHVzQ29sdW1ucywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzdGF0dXNTaWRlID09ICdSJyk/IFNUQVRVU19SSUdIVDogU1RBVFVTX0xFRlQpKSB7CisgICAgICAgIGJybC0+ZGF0YS0+cHJvdG9jb2wuYmMuc3BsaXRPZmZzZXQgPSAobW9kZWwtPmNvbHVtbnMgPT0gYWN0dWFsQ29sdW1ucyk/IDA6IGFjdHVhbENvbHVtbnMrMTsKKyAgICAgICAgcmV0dXJuIDE7CisgICAgICB9CisgICAgfQorICB9CisKKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK2lkZW50aWZ5TW9kZWwycyAoQnJhaWxsZURpc3BsYXkgKmJybCwgdW5zaWduZWQgY2hhciBpZGVudGlmaWVyKSB7CisgIHN0YXRpYyBjb25zdCBNb2RlbEVudHJ5ICpjb25zdCBtb2RlbHNbXSA9IHsKKyAgICAmbW9kZWxCQzYyNCwgJm1vZGVsQkM2NDAsICZtb2RlbEJDNjgwLAorICAgIE5VTEwKKyAgfTsKKworICB1bnNpZ25lZCBjaGFyIHJlc3BvbnNlWzBYMjBdOworICBjb25zdCBNb2RlbEVudHJ5ICpjb25zdCAqbW9kZWxFbnRyeSA9IG1vZGVsczsKKworICB3aGlsZSAoKG1vZGVsID0gKm1vZGVsRW50cnkrKykpIHsKKyAgICBpZiAobW9kZWwtPmlkZW50aWZpZXIgPT0gaWRlbnRpZmllcikgeworICAgICAgaWYgKHByb3RvY29sLT5nZXRGZWF0dXJlKGJybCwgMFg1NiwgcmVzcG9uc2UsIHNpemVvZihyZXNwb25zZSkpKSB7CisgICAgICAgIHNldFZlcnNpb25zMihicmwsICZyZXNwb25zZVsyXSwgc2l6ZW9mKHJlc3BvbnNlKS0yKTsKKworICAgICAgICBpZiAocHJvdG9jb2wtPmdldEZlYXR1cmUoYnJsLCAwWDRFLCByZXNwb25zZSwgc2l6ZW9mKHJlc3BvbnNlKSkpIHsKKyAgICAgICAgICBzZXRNYWNBZGRyZXNzZXMyKGJybCwgJnJlc3BvbnNlWzJdLCBzaXplb2YocmVzcG9uc2UpLTIpOworCisgICAgICAgICAgaWYgKHNldERlZmF1bHRDb25maWd1cmF0aW9uKGJybCkpIHsKKyAgICAgICAgICAgIGlmICh1cGRhdGVDb25maWd1cmF0aW9uMnMoYnJsLCAxLCBOVUxMKSkgeworICAgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgIH0KKworICAgICAgcmV0dXJuIDA7CisgICAgfQorICB9CisKKyAgbG9nTWVzc2FnZShMT0dfRVJSLCAiZGV0ZWN0ZWQgdW5rbm93biBBbHZhIG1vZGVsIHdpdGggSUQgJTAyWCAoaGV4KSIsIGlkZW50aWZpZXIpOworICByZXR1cm4gMDsKK30KKworc3RhdGljIGludAorZGV0ZWN0TW9kZWwycyAoQnJhaWxsZURpc3BsYXkgKmJybCkgeworICBpbnQgcHJvYmVzID0gMDsKKworICBkbyB7CisgICAgdW5zaWduZWQgY2hhciByZXNwb25zZVswWDIwXTsKKworICAgIGlmIChwcm90b2NvbC0+Z2V0RmVhdHVyZShicmwsIDBYM0YsIHJlc3BvbnNlLCBzaXplb2YocmVzcG9uc2UpKSkgeworICAgICAgaWYgKGlkZW50aWZ5TW9kZWwycyhicmwsIHJlc3BvbnNlWzJdKSkgeworICAgICAgICByZXR1cm4gMTsKKyAgICAgIH0KKyAgICB9IGVsc2UgaWYgKGVycm5vICE9IEVBR0FJTikgeworICAgICAgYnJlYWs7CisgICAgfQorICB9IHdoaWxlICgrK3Byb2JlcyA8IDMpOworCisgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50CityZWFkQ29tbWFuZDJzIChCcmFpbGxlRGlzcGxheSAqYnJsKSB7CisgIHdoaWxlICgxKSB7CisgICAgdW5zaWduZWQgY2hhciBwYWNrZXRbTUFYSU1VTV9QQUNLRVRfU0laRV07CisgICAgaW50IGxlbmd0aCA9IHByb3RvY29sLT5yZWFkUGFja2V0KGJybCwgcGFja2V0LCBzaXplb2YocGFja2V0KSk7CisKKyAgICBpZiAoIWxlbmd0aCkgcmV0dXJuIEVPRjsKKyAgICBpZiAobGVuZ3RoIDwgMCkgcmV0dXJuIEJSTF9DTURfUkVTVEFSVEJSTDsKKworICAgIHN3aXRjaCAocGFja2V0WzBdKSB7CisgICAgICBjYXNlIEFTQ0lJX0VTQzoKKyAgICAgICAgc3dpdGNoIChwYWNrZXRbMV0pIHsKKyAgICAgICAgICBjYXNlIDBYNEI6IC8qIEsgKi8geworICAgICAgICAgICAgaW50IGNvbW1hbmQgPSBpbnRlcnByZXRLZXlFdmVudDIoYnJsLCBwYWNrZXRbMl0sIHBhY2tldFszXSk7CisgICAgICAgICAgICBpZiAoY29tbWFuZCAhPSBFT0YpIHJldHVybiBjb21tYW5kOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgfQorCisgICAgICAgICAgY2FzZSAwWDY4OiAvKiBoICovIHsKKyAgICAgICAgICAgIGludCBjb21tYW5kID0gaW50ZXJwcmV0S2V5Ym9hcmRFdmVudDIoYnJsLCAmcGFja2V0WzJdKTsKKyAgICAgICAgICAgIGlmIChjb21tYW5kICE9IEVPRikgcmV0dXJuIGNvbW1hbmQ7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICB9CisKKyAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGxvZ1VuZXhwZWN0ZWRQYWNrZXQocGFja2V0LCBsZW5ndGgpOworICB9Cit9CisKK3N0YXRpYyBpbnQKK3dyaXRlQnJhaWxsZTJzIChCcmFpbGxlRGlzcGxheSAqYnJsLCBjb25zdCB1bnNpZ25lZCBjaGFyICpjZWxscywgaW50IHN0YXJ0LCBpbnQgY291bnQpIHsKKyAgdW5zaWduZWQgY2hhciBwYWNrZXRbNCArIGNvdW50XTsKKyAgdW5zaWduZWQgY2hhciAqYnl0ZSA9IHBhY2tldDsKKworICAqYnl0ZSsrID0gQVNDSUlfRVNDOworICAqYnl0ZSsrID0gMFg0MjsKKyAgKmJ5dGUrKyA9IHN0YXJ0OworICAqYnl0ZSsrID0gY291bnQ7CisgIGJ5dGUgPSBtZW1wY3B5KGJ5dGUsIGNlbGxzLCBjb3VudCk7CisKKyAgcmV0dXJuIHdyaXRlQnJhaWxsZVBhY2tldChicmwsIE5VTEwsIHBhY2tldCwgYnl0ZS1wYWNrZXQpOworfQorCitzdGF0aWMgY29uc3QgU2V0dGluZ3NVcGRhdGVFbnRyeSByZXF1aXJlZFNldHRpbmdzMnNbXSA9IHsKKyAgeyAvKiBlbmFibGUgcmF3IGZlYXR1cmUgcGFjayBrZXlzICovCisgICAgLmZlYXR1cmUgPSAwWDcyIC8qIHIgKi8sCisgICAgLnRlc3QgPSB0ZXN0SGF2ZVJhd0tleWJvYXJkMiwKKyAgICAub2Zmc2V0ID0gMiwKKyAgICAuZGlzYWJsZSA9IDBYRkYsCisgICAgLmVuYWJsZSA9IDBYMDEKKyAgfSwKKworICB7IC8qIGRpc2FibGUga2V5IHJlcGVhdCAqLworICAgIC5mZWF0dXJlID0gMFg1MCAvKiBQICovLAorICAgIC5vZmZzZXQgPSAyLAorICAgIC5kaXNhYmxlID0gMFhGRgorICB9LAorCisgIHsgLyogZGlzYWJsZSBzZWNvbmQgcm91dGluZyBrZXkgcm93IGVtdWxhdGlvbiAqLworICAgIC5mZWF0dXJlID0gMFgzMiAvKiAyICovLAorICAgIC5vZmZzZXQgPSAyLAorICAgIC5kaXNhYmxlID0gMFhGRgorICB9LAorCisgIHsgLmZlYXR1cmUgPSAwIH0KK307CisKK3N0YXRpYyBjb25zdCBQcm90b2NvbE9wZXJhdGlvbnMgcHJvdG9jb2wyc09wZXJhdGlvbnMgPSB7CisgIC5pbml0aWFsaXplVmFyaWFibGVzID0gaW5pdGlhbGl6ZVZhcmlhYmxlczIsCisKKyAgLnZlcmlmeVBhY2tldCA9IHZlcmlmeVBhY2tldDJzLAorICAucmVhZFBhY2tldCA9IHJlYWRQYWNrZXQsCisKKyAgLnJlcXVpcmVkU2V0dGluZ3MgPSByZXF1aXJlZFNldHRpbmdzMnMsCisgIC5zZXRGZWF0dXJlID0gc2V0RmVhdHVyZTJzLAorICAuZ2V0RmVhdHVyZSA9IGdldEZlYXR1cmUycywKKworICAudXBkYXRlQ29uZmlndXJhdGlvbiA9IHVwZGF0ZUNvbmZpZ3VyYXRpb24ycywKKyAgLmRldGVjdE1vZGVsID0gZGV0ZWN0TW9kZWwycywKKworICAucmVhZENvbW1hbmQgPSByZWFkQ29tbWFuZDJzLAorICAud3JpdGVCcmFpbGxlID0gd3JpdGVCcmFpbGxlMnMKK307CisKK3N0YXRpYyBCcmFpbGxlUGFja2V0VmVyaWZpZXJSZXN1bHQKK3ZlcmlmeVBhY2tldDJ1ICgKKyAgQnJhaWxsZURpc3BsYXkgKmJybCwKKyAgdW5zaWduZWQgY2hhciAqYnl0ZXMsIHNpemVfdCBzaXplLAorICBzaXplX3QgKmxlbmd0aCwgdm9pZCAqZGF0YQorKSB7CisgIHVuc2lnbmVkIGNoYXIgYnl0ZSA9IGJ5dGVzW3NpemUtMV07CisKKyAgc3dpdGNoIChzaXplKSB7CisgICAgY2FzZSAxOgorICAgICAgc3dpdGNoIChieXRlKSB7CisgICAgICAgIGNhc2UgMFgwMTogKmxlbmd0aCA9IDk7IGJyZWFrOworICAgICAgICBjYXNlIDBYMDQ6ICpsZW5ndGggPSAzOyBicmVhazsKKworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgIHJldHVybiBCUkxfUFZSX0lOVkFMSUQ7CisgICAgICB9CisgICAgICBicmVhazsKKworICAgIGRlZmF1bHQ6CisgICAgICBicmVhazsKKyAgfQorCisgIHJldHVybiBCUkxfUFZSX0lOQ0xVREU7Cit9CisKK3N0YXRpYyBpbnQKK3NldEZlYXR1cmUydSAoQnJhaWxsZURpc3BsYXkgKmJybCwgY29uc3QgdW5zaWduZWQgY2hhciAqcmVxdWVzdCwgc2l6ZV90IHNpemUpIHsKKyAgbG9nT3V0cHV0UGFja2V0KHJlcXVlc3QsIHNpemUpOworICByZXR1cm4gZ2lvV3JpdGVIaWRGZWF0dXJlKGJybC0+Z2lvRW5kcG9pbnQsIHJlcXVlc3QsIHNpemUpICE9IC0xOworfQorCitzdGF0aWMgc2l6ZV90CitnZXRGZWF0dXJlMnUgKEJyYWlsbGVEaXNwbGF5ICpicmwsIEhpZFJlcG9ydElkZW50aWZpZXIgaWRlbnRpZmllciwgdW5zaWduZWQgY2hhciAqcmVzcG9uc2UsIHNpemVfdCBzaXplKSB7CisgIHNzaXplX3QgbGVuZ3RoID0gZ2lvR2V0SGlkRmVhdHVyZShicmwtPmdpb0VuZHBvaW50LCBpZGVudGlmaWVyLCByZXNwb25zZSwgc2l6ZSk7CisKKyAgaWYgKGxlbmd0aCA+IDApIHsKKyAgICBsb2dJbnB1dFBhY2tldChyZXNwb25zZSwgbGVuZ3RoKTsKKyAgICByZXR1cm4gbGVuZ3RoOworICB9CisKKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK3VwZGF0ZUNvbmZpZ3VyYXRpb24ydSAoQnJhaWxsZURpc3BsYXkgKmJybCwgaW50IGF1dG9kZXRlY3RpbmcsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnBhY2tldCkgeworICB1bnNpZ25lZCBjaGFyIGJ1ZmZlclswWDIwXTsKKyAgc2l6ZV90IGxlbmd0aCA9IHByb3RvY29sLT5nZXRGZWF0dXJlKGJybCwgMFgwNSwgYnVmZmVyLCBzaXplb2YoYnVmZmVyKSk7CisKKyAgaWYgKGxlbmd0aCA+IDApIHsKKyAgICBpbnQgdGV4dENvbHVtbnMgPSBicmwtPnRleHRDb2x1bW5zOworICAgIGludCBzdGF0dXNDb2x1bW5zID0gYnJsLT5zdGF0dXNDb2x1bW5zOworICAgIGludCBzdGF0dXNTaWRlID0gMDsKKworICAgIGlmIChsZW5ndGggPj0gMikgc3RhdHVzQ29sdW1ucyA9IGJ1ZmZlclsxXTsKKyAgICBpZiAobGVuZ3RoID49IDMpIHN0YXR1c1NpZGUgPSBidWZmZXJbMl07CisgICAgaWYgKGxlbmd0aCA+PSA3KSB0ZXh0Q29sdW1ucyA9IGJ1ZmZlcls2XTsKKworICAgIGlmICh1cGRhdGVDb25maWd1cmF0aW9uKGJybCwgYXV0b2RldGVjdGluZywgdGV4dENvbHVtbnMsIHN0YXR1c0NvbHVtbnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzU2lkZT8gU1RBVFVTX1JJR0hUOiBTVEFUVVNfTEVGVCkpIHsKKyAgICAgIGJybC0+ZGF0YS0+cHJvdG9jb2wuYmMuc3BsaXRPZmZzZXQgPSBtb2RlbC0+Y29sdW1ucyAtIGFjdHVhbENvbHVtbnM7CisgICAgICByZXR1cm4gMTsKKyAgICB9CisgIH0KKworICByZXR1cm4gMDsKK30KKworc3RhdGljIGludAorZGV0ZWN0TW9kZWwydSAoQnJhaWxsZURpc3BsYXkgKmJybCkgeworICB7CisgICAgdW5zaWduZWQgY2hhciBidWZmZXJbMFgyMF07CisgICAgc2l6ZV90IGxlbmd0aCA9IHByb3RvY29sLT5nZXRGZWF0dXJlKGJybCwgMFgwOSwgYnVmZmVyLCBzaXplb2YoYnVmZmVyKSk7CisKKyAgICBpZiAobGVuZ3RoID4gMykgc2V0VmVyc2lvbnMyKGJybCwgJmJ1ZmZlclszXSwgbGVuZ3RoLTMpOworICB9CisKKyAgeworICAgIHVuc2lnbmVkIGNoYXIgYnVmZmVyWzBYMjBdOworICAgIHNpemVfdCBsZW5ndGggPSBwcm90b2NvbC0+Z2V0RmVhdHVyZShicmwsIDBYMEQsIGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlcikpOworCisgICAgaWYgKGxlbmd0aCA+IDEpIHNldE1hY0FkZHJlc3NlczIoYnJsLCAmYnVmZmVyWzFdLCBsZW5ndGgtMSk7CisgIH0KKworICBpZiAoc2V0RGVmYXVsdENvbmZpZ3VyYXRpb24oYnJsKSkKKyAgICBpZiAodXBkYXRlQ29uZmlndXJhdGlvbjJ1KGJybCwgMSwgTlVMTCkpCisgICAgICByZXR1cm4gMTsKKworICByZXR1cm4gMDsKK30KKworc3RhdGljIGludAorcmVhZENvbW1hbmQydSAoQnJhaWxsZURpc3BsYXkgKmJybCkgeworICB3aGlsZSAoMSkgeworICAgIHVuc2lnbmVkIGNoYXIgcGFja2V0W01BWElNVU1fUEFDS0VUX1NJWkVdOworICAgIGludCBsZW5ndGggPSBwcm90b2NvbC0+cmVhZFBhY2tldChicmwsIHBhY2tldCwgc2l6ZW9mKHBhY2tldCkpOworCisgICAgaWYgKCFsZW5ndGgpIHJldHVybiBFT0Y7CisgICAgaWYgKGxlbmd0aCA8IDApIHJldHVybiBCUkxfQ01EX1JFU1RBUlRCUkw7CisKKyAgICBzd2l0Y2ggKHBhY2tldFswXSkgeworICAgICAgY2FzZSAwWDAxOiB7CisgICAgICAgIGludCBjb21tYW5kID0gaW50ZXJwcmV0S2V5Ym9hcmRFdmVudDIoYnJsLCAmcGFja2V0WzFdKTsKKyAgICAgICAgaWYgKGNvbW1hbmQgIT0gRU9GKSByZXR1cm4gY29tbWFuZDsKKyAgICAgICAgY29udGludWU7CisgICAgICB9CisKKyAgICAgIGNhc2UgMFgwNDogeworICAgICAgICBpbnQgY29tbWFuZCA9IGludGVycHJldEtleUV2ZW50MihicmwsIHBhY2tldFsyXSwgcGFja2V0WzFdKTsKKyAgICAgICAgaWYgKGNvbW1hbmQgIT0gRU9GKSByZXR1cm4gY29tbWFuZDsKKyAgICAgICAgY29udGludWU7CisgICAgICB9CisKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGxvZ1VuZXhwZWN0ZWRQYWNrZXQocGFja2V0LCBsZW5ndGgpOworICB9Cit9CisKK3N0YXRpYyBpbnQKK3dyaXRlQnJhaWxsZTJ1IChCcmFpbGxlRGlzcGxheSAqYnJsLCBjb25zdCB1bnNpZ25lZCBjaGFyICpjZWxscywgaW50IHN0YXJ0LCBpbnQgY291bnQpIHsKKyAgd2hpbGUgKGNvdW50ID4gMCkgeworICAgIGludCBsZW5ndGggPSBNSU4oY291bnQsIDQwKTsKKyAgICB1bnNpZ25lZCBjaGFyIHBhY2tldFszICsgbGVuZ3RoXTsKKyAgICB1bnNpZ25lZCBjaGFyICpieXRlID0gcGFja2V0OworCisgICAgKmJ5dGUrKyA9IDBYMDI7CisgICAgKmJ5dGUrKyA9IHN0YXJ0OworICAgICpieXRlKysgPSBsZW5ndGg7CisgICAgYnl0ZSA9IG1lbXBjcHkoYnl0ZSwgY2VsbHMsIGxlbmd0aCk7CisKKyAgICBpZiAoIXdyaXRlQnJhaWxsZVBhY2tldChicmwsIE5VTEwsIHBhY2tldCwgYnl0ZS1wYWNrZXQpKSByZXR1cm4gMDsKKyAgICBjZWxscyArPSBsZW5ndGg7CisgICAgc3RhcnQgKz0gbGVuZ3RoOworICAgIGNvdW50IC09IGxlbmd0aDsKKyAgfQorCisgIHJldHVybiAxOworfQorCitzdGF0aWMgc3NpemVfdAord3JpdGVEYXRhMnUgKAorICBVc2JEZXZpY2UgKmRldmljZSwgY29uc3QgVXNiQ2hhbm5lbERlZmluaXRpb24gKmRlZmluaXRpb24sCisgIGNvbnN0IHZvaWQgKmRhdGEsIHNpemVfdCBzaXplLCBpbnQgdGltZW91dAorKSB7CisgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ5dGVzID0gZGF0YTsKKworICByZXR1cm4gdXNiSGlkU2V0UmVwb3J0KGRldmljZSwgZGVmaW5pdGlvbi0+aW50ZXJmYWNlLAorICAgICAgICAgICAgICAgICAgICAgICAgIGJ5dGVzWzBdLCBieXRlcywgc2l6ZSwgdGltZW91dCk7Cit9CisKK3N0YXRpYyBjb25zdCBTZXR0aW5nc1VwZGF0ZUVudHJ5IHJlcXVpcmVkU2V0dGluZ3MydVtdID0geworICB7IC8qIGVuYWJsZSByYXcgZmVhdHVyZSBwYWNrIGtleXMgKi8KKyAgICAuZmVhdHVyZSA9IDYgLyogS2V5IFNldHRpbmdzIFJlcG9ydCAqLywKKyAgICAudGVzdCA9IHRlc3RIYXZlUmF3S2V5Ym9hcmQyLAorICAgIC5vZmZzZXQgPSAxLAorICAgIC5lbmFibGUgPSAwWDIwCisgIH0sCisKKyAgeyAvKiBkaXNhYmxlIGtleSByZXBlYXQgKi8KKyAgICAuZmVhdHVyZSA9IDYgLyogS2V5IFNldHRpbmdzIFJlcG9ydCAqLywKKyAgICAub2Zmc2V0ID0gMSwKKyAgICAuZGlzYWJsZSA9IDBYMDgKKyAgfSwKKworICB7IC8qIGRpc2FibGUgc2Vjb25kIHJvdXRpbmcga2V5IHJvdyBlbXVsYXRpb24gKi8KKyAgICAuZmVhdHVyZSA9IDcgLyogQ1IgS2V5IFNldHRpbmdzIFJlcG9ydCAqLywKKyAgICAub2Zmc2V0ID0gMSwKKyAgICAuZGlzYWJsZSA9IDBYMDIKKyAgfSwKKworICB7IC5mZWF0dXJlID0gMCB9Cit9OworCitzdGF0aWMgY29uc3QgUHJvdG9jb2xPcGVyYXRpb25zIHByb3RvY29sMnVPcGVyYXRpb25zID0geworICAuaW5pdGlhbGl6ZVZhcmlhYmxlcyA9IGluaXRpYWxpemVWYXJpYWJsZXMyLAorCisgIC52ZXJpZnlQYWNrZXQgPSB2ZXJpZnlQYWNrZXQydSwKKyAgLnJlYWRQYWNrZXQgPSByZWFkUGFja2V0LAorCisgIC5yZXF1aXJlZFNldHRpbmdzID0gcmVxdWlyZWRTZXR0aW5nczJ1LAorICAuc2V0RmVhdHVyZSA9IHNldEZlYXR1cmUydSwKKyAgLmdldEZlYXR1cmUgPSBnZXRGZWF0dXJlMnUsCisKKyAgLnVwZGF0ZUNvbmZpZ3VyYXRpb24gPSB1cGRhdGVDb25maWd1cmF0aW9uMnUsCisgIC5kZXRlY3RNb2RlbCA9IGRldGVjdE1vZGVsMnUsCisKKyAgLnJlYWRDb21tYW5kID0gcmVhZENvbW1hbmQydSwKKyAgLndyaXRlQnJhaWxsZSA9IHdyaXRlQnJhaWxsZTJ1Cit9OworCitzdGF0aWMgQnJhaWxsZURpc3BsYXkgKmJyYWlsbGVEaXNwbGF5ID0gTlVMTDsKKworaW50CitBTF93cml0ZURhdGEgKHVuc2lnbmVkIGNoYXIgKmRhdGEsIGludCBsZW4gKSB7CisgIHJldHVybiB3cml0ZUJyYWlsbGVQYWNrZXQoYnJhaWxsZURpc3BsYXksIE5VTEwsIGRhdGEsIGxlbik7Cit9CisKK3N0YXRpYyB2b2lkCitzZXRVc2JDb25uZWN0aW9uUHJvcGVydGllcyAoCisgIEdpb1VzYkNvbm5lY3Rpb25Qcm9wZXJ0aWVzICpwcm9wZXJ0aWVzLAorICBjb25zdCBVc2JDaGFubmVsRGVmaW5pdGlvbiAqZGVmaW5pdGlvbgorKSB7CisgIG1vZGVsID0gcHJvcGVydGllcy0+YXBwbGljYXRpb25EYXRhOworCisgIGlmIChkZWZpbml0aW9uLT5vdXRwdXRFbmRwb2ludCkgeworICAgIHByb3BlcnRpZXMtPmFwcGxpY2F0aW9uRGF0YSA9ICZwcm90b2NvbDFPcGVyYXRpb25zOworICB9IGVsc2UgeworICAgIHByb3BlcnRpZXMtPmFwcGxpY2F0aW9uRGF0YSA9ICZwcm90b2NvbDJ1T3BlcmF0aW9uczsKKyAgICBwcm9wZXJ0aWVzLT53cml0ZURhdGEgPSB3cml0ZURhdGEydTsKKyAgfQorfQorCitzdGF0aWMgaW50Citjb25uZWN0UmVzb3VyY2UgKEJyYWlsbGVEaXNwbGF5ICpicmwsIGNvbnN0IGNoYXIgKmlkZW50aWZpZXIpIHsKKyAgc3RhdGljIGNvbnN0IFNlcmlhbFBhcmFtZXRlcnMgc2VyaWFsUGFyYW1ldGVycyA9IHsKKyAgICBTRVJJQUxfREVGQVVMVF9QQVJBTUVURVJTLAorICAgIC5iYXVkID0gOTYwMAorICB9OworCisgIEJFR0lOX1VTQl9DSEFOTkVMX0RFRklOSVRJT05TCisgICAgeyAvKiBTYXRlbGxpdGUgKDVubikgKi8KKyAgICAgIC52ZW5kb3I9MFgwNkIwLCAucHJvZHVjdD0wWDAwMDEsCisgICAgICAuY29uZmlndXJhdGlvbj0xLCAuaW50ZXJmYWNlPTAsIC5hbHRlcm5hdGl2ZT0wLAorICAgICAgLmlucHV0RW5kcG9pbnQ9MSwgLm91dHB1dEVuZHBvaW50PTIKKyAgICB9LAorCisgICAgeyAvKiBWb3lhZ2VyIFByb3RvY29sIENvbnZlcnRlciAqLworICAgICAgLnZlbmRvcj0wWDA3OTgsIC5wcm9kdWN0PTBYMDYwMCwKKyAgICAgIC5jb25maWd1cmF0aW9uPTEsIC5pbnRlcmZhY2U9MCwgLmFsdGVybmF0aXZlPTAsCisgICAgICAuaW5wdXRFbmRwb2ludD0xLCAub3V0cHV0RW5kcG9pbnQ9MCwKKyAgICAgIC5kYXRhPSZtb2RlbFZveWFnZXIKKyAgICB9LAorCisgICAgeyAvKiBCQzYyNCAqLworICAgICAgLnZlbmRvcj0wWDA3OTgsIC5wcm9kdWN0PTBYMDYyNCwKKyAgICAgIC5jb25maWd1cmF0aW9uPTEsIC5pbnRlcmZhY2U9MCwgLmFsdGVybmF0aXZlPTAsCisgICAgICAuaW5wdXRFbmRwb2ludD0xLCAub3V0cHV0RW5kcG9pbnQ9MCwKKyAgICAgIC5kYXRhPSZtb2RlbEJDNjI0CisgICAgfSwKKworICAgIHsgLyogQkM2NDAgKi8KKyAgICAgIC52ZW5kb3I9MFgwNzk4LCAucHJvZHVjdD0wWDA2NDAsCisgICAgICAuY29uZmlndXJhdGlvbj0xLCAuaW50ZXJmYWNlPTAsIC5hbHRlcm5hdGl2ZT0wLAorICAgICAgLmlucHV0RW5kcG9pbnQ9MSwgLm91dHB1dEVuZHBvaW50PTAsCisgICAgICAuZGF0YT0mbW9kZWxCQzY0MAorICAgIH0sCisKKyAgICB7IC8qIEJDNjgwICovCisgICAgICAudmVuZG9yPTBYMDc5OCwgLnByb2R1Y3Q9MFgwNjgwLAorICAgICAgLmNvbmZpZ3VyYXRpb249MSwgLmludGVyZmFjZT0wLCAuYWx0ZXJuYXRpdmU9MCwKKyAgICAgIC5pbnB1dEVuZHBvaW50PTEsIC5vdXRwdXRFbmRwb2ludD0wLAorICAgICAgLmRhdGE9Jm1vZGVsQkM2ODAKKyAgICB9LAorICBFTkRfVVNCX0NIQU5ORUxfREVGSU5JVElPTlMKKworICBHaW9EZXNjcmlwdG9yIGRlc2NyaXB0b3I7CisgIGdpb0luaXRpYWxpemVEZXNjcmlwdG9yKCZkZXNjcmlwdG9yKTsKKworICBkZXNjcmlwdG9yLnNlcmlhbC5wYXJhbWV0ZXJzID0gJnNlcmlhbFBhcmFtZXRlcnM7CisgIGRlc2NyaXB0b3Iuc2VyaWFsLm9wdGlvbnMuYXBwbGljYXRpb25EYXRhID0gJnByb3RvY29sMU9wZXJhdGlvbnM7CisKKyAgZGVzY3JpcHRvci51c2IuY2hhbm5lbERlZmluaXRpb25zID0gdXNiQ2hhbm5lbERlZmluaXRpb25zOworICBkZXNjcmlwdG9yLnVzYi5zZXRDb25uZWN0aW9uUHJvcGVydGllcyA9IHNldFVzYkNvbm5lY3Rpb25Qcm9wZXJ0aWVzOworICBkZXNjcmlwdG9yLnVzYi5vcHRpb25zLmlucHV0VGltZW91dCA9IDEwMDsKKworICBkZXNjcmlwdG9yLmJsdWV0b290aC5jaGFubmVsTnVtYmVyID0gMTsKKyAgZGVzY3JpcHRvci5ibHVldG9vdGguZGlzY292ZXJDaGFubmVsID0gMTsKKyAgZGVzY3JpcHRvci5ibHVldG9vdGgub3B0aW9ucy5hcHBsaWNhdGlvbkRhdGEgPSAmcHJvdG9jb2wyc09wZXJhdGlvbnM7CisgIGRlc2NyaXB0b3IuYmx1ZXRvb3RoLm9wdGlvbnMuaW5wdXRUaW1lb3V0ID0gMjAwOworCisgIGlmIChjb25uZWN0QnJhaWxsZVJlc291cmNlKGJybCwgaWRlbnRpZmllciwgJmRlc2NyaXB0b3IsIE5VTEwpKSB7CisgICAgcHJvdG9jb2wgPSBnaW9HZXRBcHBsaWNhdGlvbkRhdGEoYnJsLT5naW9FbmRwb2ludCk7CisgICAgcmV0dXJuIDE7CisgIH0KKworICByZXR1cm4gMDsKK30KKworc3RhdGljIGludAorYnJsX2NvbnN0cnVjdCAoQnJhaWxsZURpc3BsYXkgKmJybCwgY2hhciAqKnBhcmFtZXRlcnMsIGNvbnN0IGNoYXIgKmRldmljZSkgeworICBpZiAoKGJybC0+ZGF0YSA9IG1hbGxvYyhzaXplb2YoKmJybC0+ZGF0YSkpKSkgeworICAgIG1lbXNldChicmwtPmRhdGEsIDAsIHNpemVvZigqYnJsLT5kYXRhKSk7CisgICAgYnJsLT5kYXRhLT5yZXN0b3JlLmVuZCA9IGJybC0+ZGF0YS0+cmVzdG9yZS5idWZmZXI7CisKKyAgICBpZiAoY29ubmVjdFJlc291cmNlKGJybCwgZGV2aWNlKSkgeworICAgICAgcHJvdG9jb2wtPmluaXRpYWxpemVWYXJpYWJsZXMoYnJsLCBwYXJhbWV0ZXJzKTsKKworICAgICAgYnJsLT5kYXRhLT5yb3RhdGVkQ2VsbHMgPSAwOworICAgICAgaWYgKCpwYXJhbWV0ZXJzW1BBUk1fUk9UQVRFRF9DRUxMU10pIHsKKyAgICAgICAgaWYgKCF2YWxpZGF0ZVllc05vKCZicmwtPmRhdGEtPnJvdGF0ZWRDZWxscywgcGFyYW1ldGVyc1tQQVJNX1JPVEFURURfQ0VMTFNdKSkgeworICAgICAgICAgIGxvZ01lc3NhZ2UoTE9HX1dBUk5JTkcsICIlczogJXMiLCAiaW52YWxpZCByb3RhdGVkIGNlbGxzIHNldHRpbmciLAorICAgICAgICAgICAgICAgICAgICAgcGFyYW1ldGVyc1tQQVJNX1JPVEFURURfQ0VMTFNdKTsKKyAgICAgICAgfQorICAgICAgfQorCisgICAgICBpZiAocHJvdG9jb2wtPmRldGVjdE1vZGVsKGJybCkpIHsKKyAgICAgICAgaWYgKHVwZGF0ZVNldHRpbmdzKGJybCkpIHsKKyAgICAgICAgICBzZXRCcmFpbGxlS2V5VGFibGUoYnJsLCBtb2RlbC0+a2V5VGFibGVEZWZpbml0aW9uKTsKKworICAgICAgICAgIGlmIChicmwtPmRhdGEtPnJvdGF0ZWRDZWxscykgeworICAgICAgICAgICAgbWFrZU91dHB1dFRhYmxlKGRvdHNUYWJsZV9yb3RhdGVkKTsKKyAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgbWFrZU91dHB1dFRhYmxlKGRvdHNUYWJsZV9JU08xMTU0OF8xKTsKKyAgICAgICAgICB9CisKKyAgICAgICAgICBicmFpbGxlRGlzcGxheSA9IGJybDsKKyAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgfQorICAgICAgfQorCisgICAgICBkaXNjb25uZWN0QnJhaWxsZVJlc291cmNlKGJybCwgTlVMTCk7CisgICAgfQorCisgICAgZnJlZShicmwtPmRhdGEpOworICB9IGVsc2UgeworICAgIGxvZ01hbGxvY0Vycm9yKCk7CisgIH0KKworICByZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQKK2JybF9kZXN0cnVjdCAoQnJhaWxsZURpc3BsYXkgKmJybCkgeworICBicmFpbGxlRGlzcGxheSA9IE5VTEw7CisgIHJlc3RvcmVTZXR0aW5ncyhicmwpOworICBkaXNjb25uZWN0QnJhaWxsZVJlc291cmNlKGJybCwgTlVMTCk7CisgIGZyZWUoYnJsLT5kYXRhKTsKKworICBpZiAocHJldmlvdXNUZXh0KSB7CisgICAgZnJlZShwcmV2aW91c1RleHQpOworICAgIHByZXZpb3VzVGV4dCA9IE5VTEw7CisgIH0KKworICBpZiAocHJldmlvdXNTdGF0dXMpIHsKKyAgICBmcmVlKHByZXZpb3VzU3RhdHVzKTsKKyAgICBwcmV2aW91c1N0YXR1cyA9IE5VTEw7CisgIH0KK30KKworc3RhdGljIGludAorYnJsX3dyaXRlV2luZG93IChCcmFpbGxlRGlzcGxheSAqYnJsLCBjb25zdCB3Y2hhcl90ICp0ZXh0KSB7CisgIHVuc2lnbmVkIGludCBmcm9tOworICB1bnNpZ25lZCBpbnQgdG87CisKKyAgaWYgKGNlbGxzSGF2ZUNoYW5nZWQocHJldmlvdXNUZXh0LCBicmwtPmJ1ZmZlciwgYnJsLT50ZXh0Q29sdW1ucywgJmZyb20sICZ0bywgJnRleHRSZXdyaXRlUmVxdWlyZWQpKSB7CisgICAgaWYgKG1vZGVsLT5mbGFncyAmIE1PRF9GTEFHX0ZPUkNFX0ZST01fMCkgZnJvbSA9IDA7CisKKyAgICB7CisgICAgICBzaXplX3QgY291bnQgPSB0byAtIGZyb207CisgICAgICB1bnNpZ25lZCBjaGFyIGNlbGxzW2NvdW50XTsKKworICAgICAgdHJhbnNsYXRlT3V0cHV0Q2VsbHMoY2VsbHMsICZicmwtPmJ1ZmZlcltmcm9tXSwgY291bnQpOworICAgICAgaWYgKCFwcm90b2NvbC0+d3JpdGVCcmFpbGxlKGJybCwgY2VsbHMsIHRleHRPZmZzZXQrZnJvbSwgY291bnQpKSByZXR1cm4gMDsKKyAgICB9CisgIH0KKworICByZXR1cm4gMTsKK30KKworc3RhdGljIGludAorYnJsX3dyaXRlU3RhdHVzIChCcmFpbGxlRGlzcGxheSAqYnJsLCBjb25zdCB1bnNpZ25lZCBjaGFyICpzdGF0dXMpIHsKKyAgc2l6ZV90IGNlbGxDb3VudCA9IGJybC0+c3RhdHVzQ29sdW1uczsKKworICBpZiAoY2VsbHNIYXZlQ2hhbmdlZChwcmV2aW91c1N0YXR1cywgc3RhdHVzLCBjZWxsQ291bnQsIE5VTEwsIE5VTEwsICZzdGF0dXNSZXdyaXRlUmVxdWlyZWQpKSB7CisgICAgdW5zaWduZWQgY2hhciBjZWxsc1tjZWxsQ291bnRdOworCisgICAgdHJhbnNsYXRlT3V0cHV0Q2VsbHMoY2VsbHMsIHN0YXR1cywgY2VsbENvdW50KTsKKyAgICBpZiAoIXByb3RvY29sLT53cml0ZUJyYWlsbGUoYnJsLCBjZWxscywgc3RhdHVzT2Zmc2V0LCBjZWxsQ291bnQpKSByZXR1cm4gMDsKKyAgfQorCisgIHJldHVybiAxOworfQorCitzdGF0aWMgaW50CiticmxfcmVhZENvbW1hbmQgKEJyYWlsbGVEaXNwbGF5ICpicmwsIEtleVRhYmxlQ29tbWFuZENvbnRleHQgY29udGV4dCkgeworICByZXR1cm4gcHJvdG9jb2wtPnJlYWRDb21tYW5kKGJybCk7Cit9CmRpZmYgLS1naXQgYS9Ecml2ZXJzL0JyYWlsbGUvQWx2YS9icmFpbGxlLmggYi9Ecml2ZXJzL0JyYWlsbGUvQWx2YS9icmFpbGxlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGM0ZmEwZAotLS0gL2Rldi9udWxsCisrKyBiL0RyaXZlcnMvQnJhaWxsZS9BbHZhL2JyYWlsbGUuaApAQCAtMCwwICsxLDI1IEBACisvKgorICogQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyAqICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyAqCisgKiBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorICoKKyAqIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyAqCisgKiBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisgKi8KKworLyogQWx2YS9icmFpbGxlLmggLSBDb25maWd1cmFibGUgZGVmaW5pdGlvbnMgZm9yIHRoZSBBbHZhIGRyaXZlcgorICogQ29weXJpZ2h0IChDKSAxOTk1LTE5OTggYnkgTmljb2xhcyBQaXRyZSA8bmljb0BmbHV4bmljLm5ldD4KKyAqCisgKi8KKworLyogdXNlZCBieSBzcGVlY2guYyAqLworZXh0ZXJuIGludCBBTF93cml0ZURhdGEgKHVuc2lnbmVkIGNoYXIgKmRhdGEsIGludCBsZW4gKTsKZGlmZiAtLWdpdCBhL0RyaXZlcnMvQnJhaWxsZS9BbHZhL2JybGRlZnMtYWwuaCBiL0RyaXZlcnMvQnJhaWxsZS9BbHZhL2JybGRlZnMtYWwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZGVlOWM0Ci0tLSAvZGV2L251bGwKKysrIGIvRHJpdmVycy9CcmFpbGxlL0FsdmEvYnJsZGVmcy1hbC5oCkBAIC0wLDAgKzEsMTA4IEBACisvKgorICogQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyAqICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyAqCisgKiBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorICoKKyAqIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyAqCisgKiBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisgKi8KKworI2lmbmRlZiBCUkxUVFlfSU5DTFVERURfQUxfQlJMREVGUworI2RlZmluZSBCUkxUVFlfSU5DTFVERURfQUxfQlJMREVGUworCisjZGVmaW5lIEFMX0tFWVNfT1BFUkFUSU9OIDE0CisjZGVmaW5lIEFMX0tFWVNfU1RBVFVTIDYKKyNkZWZpbmUgQUxfS0VZU19TQVRFTExJVEUgNgorI2RlZmluZSBBTF9LRVlTX0VUT1VDSCA0CisjZGVmaW5lIEFMX0tFWVNfU01BUlRQQUQgOQorI2RlZmluZSBBTF9LRVlTX1RIVU1CIDUKKyNkZWZpbmUgQUxfS0VZU19GRUFUVVJFUEFDSyAxNAorCit0eXBlZGVmIGVudW0geworICBBTF9LRVlfT1BFUkFUSU9OID0gMSwKKyAgQUxfS0VZX1NUQVRVUzEgPSBBTF9LRVlfT1BFUkFUSU9OICsgQUxfS0VZU19PUEVSQVRJT04sCisgIEFMX0tFWV9TVEFUVVMyID0gQUxfS0VZX1NUQVRVUzEgKyBBTF9LRVlTX1NUQVRVUywKKyAgQUxfS0VZX1NQRUVDSF9QQUQgPSBBTF9LRVlfU1RBVFVTMiArIEFMX0tFWVNfU1RBVFVTLAorICBBTF9LRVlfTkFWX1BBRCA9IEFMX0tFWV9TUEVFQ0hfUEFEICsgQUxfS0VZU19TQVRFTExJVEUsCisgIEFMX0tFWV9FVE9VQ0ggPSBBTF9LRVlfTkFWX1BBRCArIEFMX0tFWVNfU0FURUxMSVRFLAorICBBTF9LRVlfU01BUlRQQUQgPSBBTF9LRVlfRVRPVUNIICsgQUxfS0VZU19FVE9VQ0gsCisgIEFMX0tFWV9USFVNQiA9IEFMX0tFWV9TTUFSVFBBRCArIEFMX0tFWVNfU01BUlRQQUQsCisgIEFMX0tFWV9GRUFUVVJFUEFDSyA9IEFMX0tFWV9USFVNQiArIEFMX0tFWVNfVEhVTUIsCisKKyAgQUxfS0VZX1Byb2cgPSBBTF9LRVlfT1BFUkFUSU9OLAorICBBTF9LRVlfSG9tZSwKKyAgQUxfS0VZX0N1cnNvciwKKyAgQUxfS0VZX1VwLAorICBBTF9LRVlfTGVmdCwKKyAgQUxfS0VZX1JpZ2h0LAorICBBTF9LRVlfRG93biwKKyAgQUxfS0VZX0N1cnNvcjIsCisgIEFMX0tFWV9Ib21lMiwKKyAgQUxfS0VZX1Byb2cyLAorICBBTF9LRVlfTGVmdFR1bWJsZXJMZWZ0LAorICBBTF9LRVlfTGVmdFR1bWJsZXJSaWdodCwKKyAgQUxfS0VZX1JpZ2h0VHVtYmxlckxlZnQsCisgIEFMX0tFWV9SaWdodFR1bWJsZXJSaWdodCwKKworICBBTF9LRVlfU3BlZWNoUGFkRjEgPSBBTF9LRVlfU1BFRUNIX1BBRCwKKyAgQUxfS0VZX1NwZWVjaFBhZFVwLAorICBBTF9LRVlfU3BlZWNoUGFkTGVmdCwKKyAgQUxfS0VZX1NwZWVjaFBhZERvd24sCisgIEFMX0tFWV9TcGVlY2hQYWRSaWdodCwKKyAgQUxfS0VZX1NwZWVjaFBhZEYyLAorCisgIEFMX0tFWV9OYXZQYWRGMSA9IEFMX0tFWV9OQVZfUEFELAorICBBTF9LRVlfTmF2UGFkVXAsCisgIEFMX0tFWV9OYXZQYWRMZWZ0LAorICBBTF9LRVlfTmF2UGFkRG93biwKKyAgQUxfS0VZX05hdlBhZFJpZ2h0LAorICBBTF9LRVlfTmF2UGFkRjIsCisKKyAgQUxfS0VZX0VUb3VjaExlZnRSZWFyID0gQUxfS0VZX0VUT1VDSCwKKyAgQUxfS0VZX0VUb3VjaExlZnRGcm9udCwKKyAgQUxfS0VZX0VUb3VjaFJpZ2h0UmVhciwKKyAgQUxfS0VZX0VUb3VjaFJpZ2h0RnJvbnQsCisKKyAgQUxfS0VZX1NtYXJ0cGFkRjEgPSBBTF9LRVlfU01BUlRQQUQsCisgIEFMX0tFWV9TbWFydHBhZEYyLAorICBBTF9LRVlfU21hcnRwYWRMZWZ0LAorICBBTF9LRVlfU21hcnRwYWRFbnRlciwKKyAgQUxfS0VZX1NtYXJ0cGFkVXAsCisgIEFMX0tFWV9TbWFydHBhZERvd24sCisgIEFMX0tFWV9TbWFydHBhZFJpZ2h0LAorICBBTF9LRVlfU21hcnRwYWRGMywKKyAgQUxfS0VZX1NtYXJ0cGFkRjQsCisKKyAgQUxfS0VZX0RvdDEgPSBBTF9LRVlfRkVBVFVSRVBBQ0sgKyAxLAorICBBTF9LRVlfRG90MiwKKyAgQUxfS0VZX0RvdDMsCisgIEFMX0tFWV9Eb3Q0LAorICBBTF9LRVlfRG90NSwKKyAgQUxfS0VZX0RvdDYsCisgIEFMX0tFWV9Eb3Q3LAorICBBTF9LRVlfRG90OCwKKyAgQUxfS0VZX0NvbnRyb2wsCisgIEFMX0tFWV9XaW5kb3dzLAorICBBTF9LRVlfU3BhY2UsCisgIEFMX0tFWV9BbHQsCisgIEFMX0tFWV9FbnRlciwKKworICBBTF9LRVlfUkVMRUFTRSA9IDBYODAKK30gQUxfTmF2aWdhdGlvbktleTsKKwordHlwZWRlZiBlbnVtIHsKKyAgQUxfR1JQX05hdmlnYXRpb25LZXlzID0gMCwKKyAgQUxfR1JQX1JvdXRpbmdLZXlzMSwKKyAgQUxfR1JQX1JvdXRpbmdLZXlzMgorfSBBTF9LZXlHcm91cDsKKworI2VuZGlmIC8qIEJSTFRUWV9JTkNMVURFRF9BTF9CUkxERUZTICovIApkaWZmIC0tZ2l0IGEvRHJpdmVycy9CcmFpbGxlL0IyRy9NYWtlZmlsZS5pbiBiL0RyaXZlcnMvQnJhaWxsZS9CMkcvTWFrZWZpbGUuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGFkZmVhYwotLS0gL2Rldi9udWxsCisrKyBiL0RyaXZlcnMvQnJhaWxsZS9CMkcvTWFrZWZpbGUuaW4KQEAgLTAsMCArMSwyOCBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorIyAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyMKKyMgQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorIworIyBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorIworIyBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisjIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyMgbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisjCisjIFdlYiBQYWdlOiBodHRwOi8vbWllbGtlLmNjL2JybHR0eS8KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK0RSSVZFUl9DT0RFID0gYmcKK0RSSVZFUl9OQU1FID0gQjJHCitEUklWRVJfVVNBR0UgPSBOQlAgQjJHIHJlY292ZXJ5IG1vZGUKK0RSSVZFUl9WRVJTSU9OID0gCitEUklWRVJfREVWRUxPUEVSUyA9IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4KK2luY2x1ZGUgJChTUkNfVE9QKWJyYWlsbGUubWsKKworYnJhaWxsZS4kTzoKKwkkKENDKSAkKEJSTF9DRkxBR1MpIC1jICQoU1JDX0RJUikvYnJhaWxsZS5jCisKZGlmZiAtLWdpdCBhL0RyaXZlcnMvQnJhaWxsZS9CMkcvYnJhaWxsZS5jIGIvRHJpdmVycy9CcmFpbGxlL0IyRy9icmFpbGxlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjM4NjUxYwotLS0gL2Rldi9udWxsCisrKyBiL0RyaXZlcnMvQnJhaWxsZS9CMkcvYnJhaWxsZS5jCkBAIC0wLDAgKzEsMzg0IEBACisvKgorICogQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyAqICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyAqCisgKiBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorICoKKyAqIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyAqCisgKiBXZWIgUGFnZTogaHR0cDovL21pZWxrZS5jYy9icmx0dHkvCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisgKi8KKworI2luY2x1ZGUgInByb2xvZ3VlLmgiCisKKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKworI2luY2x1ZGUgImxvZy5oIgorI2luY2x1ZGUgImFzeW5jX2hhbmRsZS5oIgorI2luY2x1ZGUgImFzeW5jX2lvLmgiCisKKyNpbmNsdWRlICJicmxfZHJpdmVyLmgiCisjaW5jbHVkZSAiYnJsZGVmcy1iZy5oIgorCisjZGVmaW5lIEtFWUJPQVJEX0RFVklDRV9OQU1FICJjcDQzMF9rZXlwYWQiCisjZGVmaW5lIEJSQUlMTEVfREVWSUNFX1BBVEggIi9kZXYvYnJhaWxsZTAiCisjZGVmaW5lIFRFWFRfQ0VMTF9DT1VOVCAyMAorCitCRUdJTl9LRVlfTkFNRV9UQUJMRShuYXZpZ2F0aW9uKQorICBLRVlfTkFNRV9FTlRSWShCR19OQVZfRG90MSwgIkRvdDEiKSwKKyAgS0VZX05BTUVfRU5UUlkoQkdfTkFWX0RvdDIsICJEb3QyIiksCisgIEtFWV9OQU1FX0VOVFJZKEJHX05BVl9Eb3QzLCAiRG90MyIpLAorICBLRVlfTkFNRV9FTlRSWShCR19OQVZfRG90NCwgIkRvdDQiKSwKKyAgS0VZX05BTUVfRU5UUlkoQkdfTkFWX0RvdDUsICJEb3Q1IiksCisgIEtFWV9OQU1FX0VOVFJZKEJHX05BVl9Eb3Q2LCAiRG90NiIpLAorICBLRVlfTkFNRV9FTlRSWShCR19OQVZfRG90NywgIkRvdDciKSwKKyAgS0VZX05BTUVfRU5UUlkoQkdfTkFWX0RvdDgsICJEb3Q4IiksCisKKyAgS0VZX05BTUVfRU5UUlkoQkdfTkFWX1NwYWNlLCAiU3BhY2UiKSwKKyAgS0VZX05BTUVfRU5UUlkoQkdfTkFWX0JhY2t3YXJkLCAiQmFja3dhcmQiKSwKKyAgS0VZX05BTUVfRU5UUlkoQkdfTkFWX0ZvcndhcmQsICJGb3J3YXJkIiksCisKKyAgS0VZX05BTUVfRU5UUlkoQkdfTkFWX0NlbnRlciwgIkNlbnRlciIpLAorICBLRVlfTkFNRV9FTlRSWShCR19OQVZfTGVmdCwgIkxlZnQiKSwKKyAgS0VZX05BTUVfRU5UUlkoQkdfTkFWX1JpZ2h0LCAiUmlnaHQiKSwKKyAgS0VZX05BTUVfRU5UUlkoQkdfTkFWX1VwLCAiVXAiKSwKKyAgS0VZX05BTUVfRU5UUlkoQkdfTkFWX0Rvd24sICJEb3duIiksCisKKyAgS0VZX05BTUVfRU5UUlkoQkdfTkFWX0xvdWRlciwgIkxvdWRlciIpLAorICBLRVlfTkFNRV9FTlRSWShCR19OQVZfU29mdGVyLCAiU29mdGVyIiksCitFTkRfS0VZX05BTUVfVEFCTEUKKworQkVHSU5fS0VZX05BTUVfVEFCTEUocm91dGluZykKKyAgS0VZX0dST1VQX0VOVFJZKEJHX0dSUF9Sb3V0aW5nS2V5cywgIlJvdXRpbmdLZXkiKSwKK0VORF9LRVlfTkFNRV9UQUJMRQorCitCRUdJTl9LRVlfTkFNRV9UQUJMRVMoYWxsKQorICBLRVlfTkFNRV9UQUJMRShuYXZpZ2F0aW9uKSwKKyAgS0VZX05BTUVfVEFCTEUocm91dGluZyksCitFTkRfS0VZX05BTUVfVEFCTEVTCisKK0RFRklORV9LRVlfVEFCTEUoYWxsKQorCitCRUdJTl9LRVlfVEFCTEVfTElTVAorICAmS0VZX1RBQkxFX0RFRklOSVRJT04oYWxsKSwKK0VORF9LRVlfVEFCTEVfTElTVAorCitzdHJ1Y3QgQnJhaWxsZURhdGFTdHJ1Y3QgeworICBzdHJ1Y3QgeworICAgIGludCBmaWxlRGVzY3JpcHRvcjsKKyAgICBBc3luY0hhbmRsZSBpbnB1dEhhbmRsZXI7CisgIH0ga2V5Ym9hcmQ7CisKKyAgc3RydWN0IHsKKyAgICBpbnQgZmlsZURlc2NyaXB0b3I7CisgIH0gYnJhaWxsZTsKKworICBzdHJ1Y3QgeworICAgIHVuc2lnbmVkIGNoYXIgcmV3cml0ZTsKKyAgICB1bnNpZ25lZCBjaGFyIGNlbGxzW1RFWFRfQ0VMTF9DT1VOVF07CisgIH0gdGV4dDsKK307CisKKyNpZmRlZiBIQVZFX0xJTlVYX0lOUFVUX0gKKyNpbmNsdWRlIDxsaW51eC9pbnB1dC5oPgorCisjaWZuZGVmIEtFWV9CUkxfRE9UOQorI2RlZmluZSBLRVlfQlJMX0RPVDkgMFgxRjkKKyNlbmRpZiAvKiBLRVlfQlJMX0RPVDkgKi8KKworI2luY2x1ZGUgPGRpcmVudC5oPgorI2luY2x1ZGUgPHN5cy9pb2N0bC5oPgorI2luY2x1ZGUgIm1ldGVjX2ZsYXQyMF9pb2N0bC5oIgorCitzdGF0aWMgaW50CitoYW5kbGVLZXlFdmVudCAoQnJhaWxsZURpc3BsYXkgKmJybCwgaW50IGNvZGUsIGludCBwcmVzcykgeworICBLZXlOdW1iZXIgbnVtYmVyOworCisgIHN3aXRjaChjb2RlKSB7CisjZGVmaW5lIE5BVihDT0RFLEtFWSkgY2FzZSBLRVlfIyNDT0RFOiBudW1iZXIgPSBCR19OQVZfIyNLRVk7IGJyZWFrOworICAgIE5BVihVUCwgVXApCisgICAgTkFWKExFRlQsIExlZnQpCisgICAgTkFWKFJJR0hULCBSaWdodCkKKyAgICBOQVYoRE9XTiwgRG93bikKKyAgICBOQVYoT0ssIENlbnRlcikKKworICAgIE5BVihORVhULCBGb3J3YXJkKQorICAgIE5BVihQUkVWSU9VUywgQmFja3dhcmQpCisKKyAgICBOQVYoVk9MVU1FVVAsIExvdWRlcikKKyAgICBOQVYoVk9MVU1FRE9XTiwgU29mdGVyKQorCisgICAgTkFWKEJSTF9ET1QxLCBEb3Q3KQorICAgIE5BVihCUkxfRE9UMiwgRG90MykKKyAgICBOQVYoQlJMX0RPVDMsIERvdDIpCisgICAgTkFWKEJSTF9ET1Q0LCBEb3QxKQorICAgIE5BVihCUkxfRE9UNSwgRG90NCkKKyAgICBOQVYoQlJMX0RPVDYsIERvdDUpCisgICAgTkFWKEJSTF9ET1Q3LCBEb3Q2KQorICAgIE5BVihCUkxfRE9UOCwgRG90OCkKKyAgICBOQVYoQlJMX0RPVDksIFNwYWNlKQorI3VuZGVmIE5BVgorCisgICAgZGVmYXVsdDoKKyAgICAgIHsKKyAgICAgICAgaW50IGtleSA9IGNvZGUgLSAwWDJEMDsKKworICAgICAgICBpZiAoKGtleSA+PSAwKSAmJiAoa2V5IDwgVEVYVF9DRUxMX0NPVU5UKSkgeworICAgICAgICAgIHJldHVybiBlbnF1ZXVlS2V5RXZlbnQoYnJsLCBCR19HUlBfUm91dGluZ0tleXMsIGtleSwgcHJlc3MpOworICAgICAgICB9CisgICAgICB9CisKKyAgICAgIHJldHVybiAwOworICB9CisKKyAgcmV0dXJuIGVucXVldWVLZXlFdmVudChicmwsIEJHX0dSUF9OYXZpZ2F0aW9uS2V5cywgbnVtYmVyLCBwcmVzcyk7Cit9CisKK0FTWU5DX0lOUFVUX0NBTExCQUNLKGhhbmRsZUtleWJvYXJkRXZlbnQpIHsKKyAgQnJhaWxsZURpc3BsYXkgKmJybCA9IHBhcmFtZXRlcnMtPmRhdGE7CisgIHN0YXRpYyBjb25zdCBjaGFyIGxhYmVsW10gPSAia2V5Ym9hcmQiOworCisgIGlmIChwYXJhbWV0ZXJzLT5lcnJvcikgeworICAgIGxvZ01lc3NhZ2UoTE9HX0RFQlVHLCAiJXMgcmVhZCBlcnJvcjogZmQ9JWQ6ICVzIiwKKyAgICAgICAgICAgICAgIGxhYmVsLCBicmwtPmRhdGEtPmtleWJvYXJkLmZpbGVEZXNjcmlwdG9yLCBzdHJlcnJvcihwYXJhbWV0ZXJzLT5lcnJvcikpOworICB9IGVsc2UgaWYgKHBhcmFtZXRlcnMtPmVuZCkgeworICAgIGxvZ01lc3NhZ2UoTE9HX0RFQlVHLCAiJXMgZW5kLW9mLWZpbGU6IGZkPSVkIiwgCisgICAgICAgICAgICAgICBsYWJlbCwgYnJsLT5kYXRhLT5rZXlib2FyZC5maWxlRGVzY3JpcHRvcik7CisgIH0gZWxzZSB7CisgICAgY29uc3Qgc3RydWN0IGlucHV0X2V2ZW50ICpldmVudCA9IHBhcmFtZXRlcnMtPmJ1ZmZlcjsKKworICAgIGlmIChwYXJhbWV0ZXJzLT5sZW5ndGggPj0gc2l6ZW9mKCpldmVudCkpIHsKKyAgICAgIGxvZ0lucHV0UGFja2V0KGV2ZW50LCBzaXplb2YoKmV2ZW50KSk7CisKKyAgICAgIHN3aXRjaCAoZXZlbnQtPnR5cGUpIHsKKyAgICAgICAgY2FzZSBFVl9LRVk6IHsKKyAgICAgICAgICBpbnQgcmVsZWFzZSA9IGV2ZW50LT52YWx1ZSA9PSAwOworICAgICAgICAgIGludCBwcmVzcyAgID0gZXZlbnQtPnZhbHVlID09IDE7CisKKyAgICAgICAgICBpZiAocmVsZWFzZSB8fCBwcmVzcykgaGFuZGxlS2V5RXZlbnQoYnJsLCBldmVudC0+Y29kZSwgcHJlc3MpOworICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICBicmVhazsKKyAgICAgIH0KKworICAgICAgcmV0dXJuIHNpemVvZigqZXZlbnQpOworICAgIH0KKyAgfQorCisgIHJldHVybiAwOworfQorCitzdGF0aWMgY2hhciAqCitmaW5kRXZlbnREZXZpY2UgKGNvbnN0IGNoYXIgKmRldmljZU5hbWUpIHsKKyAgY2hhciAqZGV2aWNlUGF0aCA9IE5VTEw7CisgIGNoYXIgZGlyZWN0b3J5UGF0aFswWDgwXTsKKyAgRElSICpkaXJlY3Rvcnk7CisKKyAgc25wcmludGYoZGlyZWN0b3J5UGF0aCwgc2l6ZW9mKGRpcmVjdG9yeVBhdGgpLAorICAgICAgICAgICAiL3N5cy9idXMvcGxhdGZvcm0vZGV2aWNlcy8lcy9pbnB1dCIsIGRldmljZU5hbWUpOworCisgIGlmICgoZGlyZWN0b3J5ID0gb3BlbmRpcihkaXJlY3RvcnlQYXRoKSkpIHsKKyAgICBzdHJ1Y3QgZGlyZW50ICplbnRyeTsKKworICAgIHdoaWxlICgoZW50cnkgPSByZWFkZGlyKGRpcmVjdG9yeSkpKSB7CisgICAgICB1bnNpZ25lZCBpbnQgZXZlbnROdW1iZXI7CisgICAgICBjaGFyIGV4dHJhOworCisgICAgICBpZiAoc3NjYW5mKGVudHJ5LT5kX25hbWUsICJpbnB1dCV1JWMiLCAmZXZlbnROdW1iZXIsICZleHRyYSkgPT0gMSkgeworICAgICAgICBjaGFyIHBhdGhbMFg4MF07CisKKyAgICAgICAgc25wcmludGYocGF0aCwgc2l6ZW9mKHBhdGgpLCAiL2Rldi9pbnB1dC9ldmVudCV1IiwgZXZlbnROdW1iZXIpOworICAgICAgICBpZiAoIShkZXZpY2VQYXRoID0gc3RyZHVwKHBhdGgpKSkgbG9nTWFsbG9jRXJyb3IoKTsKKyAgICAgICAgYnJlYWs7CisgICAgICB9CisgICAgfQorCisgICAgY2xvc2VkaXIoZGlyZWN0b3J5KTsKKyAgfSBlbHNlIHsKKyAgICBsb2dNZXNzYWdlKExPR19FUlIsICJldmVudCBkZXZpY2UgaW5wdXQgZGlyZWN0b3J5IG9wZW4gZXJyb3I6ICVzOiAlcyIsCisgICAgICAgICAgICAgICBkaXJlY3RvcnlQYXRoLCBzdHJlcnJvcihlcnJubykpOworICB9CisKKyAgcmV0dXJuIGRldmljZVBhdGg7Cit9CisKK3N0YXRpYyBpbnQKK29wZW5FdmVudERldmljZSAoY29uc3QgY2hhciAqZGV2aWNlTmFtZSkgeworICBjaGFyICpkZXZpY2VQYXRoID0gZmluZEV2ZW50RGV2aWNlKGRldmljZU5hbWUpOworCisgIGlmIChkZXZpY2VQYXRoKSB7CisgICAgaW50IGRldmljZURlc2NyaXB0b3IgPSBvcGVuKGRldmljZVBhdGgsIE9fUkRPTkxZKTsKKworICAgIGlmIChkZXZpY2VEZXNjcmlwdG9yICE9IC0xKSB7CisgICAgICBpZiAoaW9jdGwoZGV2aWNlRGVzY3JpcHRvciwgRVZJT0NHUkFCLCAxKSAhPSAtMSkgeworICAgICAgICBsb2dNZXNzYWdlKExPR19JTkZPLCAiRXZlbnQgRGV2aWNlIE9wZW5lZDogJXM6ICVzOiBmZD0lZCIsCisgICAgICAgICAgICAgICAgICAgZGV2aWNlTmFtZSwgZGV2aWNlUGF0aCwgZGV2aWNlRGVzY3JpcHRvcik7CisKKyAgICAgICAgZnJlZShkZXZpY2VQYXRoKTsKKyAgICAgICAgcmV0dXJuIGRldmljZURlc2NyaXB0b3I7CisgICAgICB9IGVsc2UgeworICAgICAgICBsb2dTeXN0ZW1FcnJvcigiaW9jdGxbRVZJT0NHUkFCXSIpOworICAgICAgfQorCisgICAgICBjbG9zZShkZXZpY2VEZXNjcmlwdG9yKTsKKyAgICB9IGVsc2UgeworICAgICAgbG9nTWVzc2FnZShMT0dfRVJSLCAiZXZlbnQgZGV2aWNlIG9wZW4gZXJyb3I6ICVzOiAlcyIsCisgICAgICAgICAgICAgICAgIGRldmljZVBhdGgsIHN0cmVycm9yKGVycm5vKSk7CisgICAgfQorCisgICAgZnJlZShkZXZpY2VQYXRoKTsKKyAgfQorCisgIHJldHVybiAtMTsKK30KKyNlbmRpZiAvKiBIQVZFX0xJTlVYX0lOUFVUX0ggKi8KKworc3RhdGljIGludAorb3BlbktleWJvYXJkRGV2aWNlIChCcmFpbGxlRGlzcGxheSAqYnJsKSB7CisjaWZkZWYgSEFWRV9MSU5VWF9JTlBVVF9ICisgIGlmICgoYnJsLT5kYXRhLT5rZXlib2FyZC5maWxlRGVzY3JpcHRvciA9IG9wZW5FdmVudERldmljZShLRVlCT0FSRF9ERVZJQ0VfTkFNRSkpICE9IC0xKSB7CisgICAgaWYgKGFzeW5jUmVhZEZpbGUoJmJybC0+ZGF0YS0+a2V5Ym9hcmQuaW5wdXRIYW5kbGVyLAorICAgICAgICAgICAgICAgICAgICAgIGJybC0+ZGF0YS0+a2V5Ym9hcmQuZmlsZURlc2NyaXB0b3IsCisgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKHN0cnVjdCBpbnB1dF9ldmVudCksCisgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlS2V5Ym9hcmRFdmVudCwgYnJsKSkgeworICAgICAgcmV0dXJuIDE7CisgICAgfQorCisgICAgY2xvc2UoYnJsLT5kYXRhLT5rZXlib2FyZC5maWxlRGVzY3JpcHRvcik7CisgICAgYnJsLT5kYXRhLT5rZXlib2FyZC5maWxlRGVzY3JpcHRvciA9IC0xOworICB9IGVsc2UgeworICAgIGxvZ1N5c3RlbUVycm9yKCJvcGVuW2tleWJvYXJkXSIpOworICB9CisjZW5kaWYgLyogSEFWRV9MSU5VWF9JTlBVVF9IICovCisKKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkCitjbG9zZUtleWJvYXJkRGV2aWNlIChCcmFpbGxlRGlzcGxheSAqYnJsKSB7CisgIGlmIChicmwtPmRhdGEtPmtleWJvYXJkLmlucHV0SGFuZGxlcikgeworICAgIGFzeW5jQ2FuY2VsUmVxdWVzdChicmwtPmRhdGEtPmtleWJvYXJkLmlucHV0SGFuZGxlcik7CisgICAgYnJsLT5kYXRhLT5rZXlib2FyZC5pbnB1dEhhbmRsZXIgPSBOVUxMOworICB9CisKKyAgaWYgKGJybC0+ZGF0YS0+a2V5Ym9hcmQuZmlsZURlc2NyaXB0b3IgIT0gLTEpIHsKKyAgICBjbG9zZShicmwtPmRhdGEtPmtleWJvYXJkLmZpbGVEZXNjcmlwdG9yKTsKKyAgICBicmwtPmRhdGEtPmtleWJvYXJkLmZpbGVEZXNjcmlwdG9yID0gLTE7CisgIH0KK30KKworc3RhdGljIGludAorb3BlbkJyYWlsbGVEZXZpY2UgKEJyYWlsbGVEaXNwbGF5ICpicmwpIHsKKyAgaWYgKChicmwtPmRhdGEtPmJyYWlsbGUuZmlsZURlc2NyaXB0b3IgPSBvcGVuKEJSQUlMTEVfREVWSUNFX1BBVEgsIE9fV1JPTkxZKSkgIT0gLTEpIHsKKyAgICByZXR1cm4gMTsKKyAgfSBlbHNlIHsKKyAgICBsb2dTeXN0ZW1FcnJvcigib3BlblticmFpbGxlXSIpOworICB9CisKKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkCitjbG9zZUJyYWlsbGVEZXZpY2UgKEJyYWlsbGVEaXNwbGF5ICpicmwpIHsKKyAgaWYgKGJybC0+ZGF0YS0+YnJhaWxsZS5maWxlRGVzY3JpcHRvciAhPSAtMSkgeworICAgIGNsb3NlKGJybC0+ZGF0YS0+YnJhaWxsZS5maWxlRGVzY3JpcHRvcik7CisgICAgYnJsLT5kYXRhLT5icmFpbGxlLmZpbGVEZXNjcmlwdG9yID0gLTE7CisgIH0KK30KKworc3RhdGljIGludAord3JpdGVCcmFpbGxlQ2VsbHMgKEJyYWlsbGVEaXNwbGF5ICpicmwsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmNlbGxzLCBzaXplX3QgY291bnQpIHsKKyAgbG9nT3V0cHV0UGFja2V0KGNlbGxzLCBjb3VudCk7CisgIGlmICh3cml0ZShicmwtPmRhdGEtPmJyYWlsbGUuZmlsZURlc2NyaXB0b3IsIGNlbGxzLCBjb3VudCkgIT0gLTEpIHJldHVybiAxOworCisgIGxvZ1N5c3RlbUVycm9yKCJ3cml0ZVticmFpbGxlXSIpOworICByZXR1cm4gMDsKK30KKworc3RhdGljIGludAorY29ubmVjdFJlc291cmNlIChCcmFpbGxlRGlzcGxheSAqYnJsLCBjb25zdCBjaGFyICppZGVudGlmaWVyKSB7CisgIEdpb0Rlc2NyaXB0b3IgZGVzY3JpcHRvcjsKKyAgZ2lvSW5pdGlhbGl6ZURlc2NyaXB0b3IoJmRlc2NyaXB0b3IpOworCisgIGlmIChjb25uZWN0QnJhaWxsZVJlc291cmNlKGJybCwgIm51bGw6IiwgJmRlc2NyaXB0b3IsIE5VTEwpKSB7CisgICAgcmV0dXJuIDE7CisgIH0KKworICByZXR1cm4gMDsKK30KKworc3RhdGljIGludAorYnJsX2NvbnN0cnVjdCAoQnJhaWxsZURpc3BsYXkgKmJybCwgY2hhciAqKnBhcmFtZXRlcnMsIGNvbnN0IGNoYXIgKmRldmljZSkgeworICBpZiAoKGJybC0+ZGF0YSA9IG1hbGxvYyhzaXplb2YoKmJybC0+ZGF0YSkpKSkgeworICAgIG1lbXNldChicmwtPmRhdGEsIDAsIHNpemVvZigqYnJsLT5kYXRhKSk7CisgICAgYnJsLT5kYXRhLT5rZXlib2FyZC5maWxlRGVzY3JpcHRvciA9IC0xOworICAgIGJybC0+ZGF0YS0+a2V5Ym9hcmQuaW5wdXRIYW5kbGVyID0gTlVMTDsKKyAgICBicmwtPmRhdGEtPmJyYWlsbGUuZmlsZURlc2NyaXB0b3IgPSAtMTsKKworICAgIGlmIChjb25uZWN0UmVzb3VyY2UoYnJsLCBkZXZpY2UpKSB7CisgICAgICBpZiAob3BlbkJyYWlsbGVEZXZpY2UoYnJsKSkgeworICAgICAgICBpZiAob3BlbktleWJvYXJkRGV2aWNlKGJybCkpIHsKKyAgICAgICAgICBicmwtPnRleHRDb2x1bW5zID0gVEVYVF9DRUxMX0NPVU5UOworCisgICAgICAgICAgc2V0QnJhaWxsZUtleVRhYmxlKGJybCwgJktFWV9UQUJMRV9ERUZJTklUSU9OKGFsbCkpOworICAgICAgICAgIG1ha2VPdXRwdXRUYWJsZShkb3RzVGFibGVfSVNPMTE1NDhfMSk7CisgICAgICAgICAgYnJsLT5kYXRhLT50ZXh0LnJld3JpdGUgPSAxOworCisgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgIH0KKworICAgICAgICBjbG9zZUJyYWlsbGVEZXZpY2UoYnJsKTsKKyAgICAgIH0KKworICAgICAgZGlzY29ubmVjdEJyYWlsbGVSZXNvdXJjZShicmwsIE5VTEwpOworICAgIH0KKworICAgIGZyZWUoYnJsLT5kYXRhKTsKKyAgfSBlbHNlIHsKKyAgICBsb2dNYWxsb2NFcnJvcigpOworICB9CisKKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkCiticmxfZGVzdHJ1Y3QgKEJyYWlsbGVEaXNwbGF5ICpicmwpIHsKKyAgZGlzY29ubmVjdEJyYWlsbGVSZXNvdXJjZShicmwsIE5VTEwpOworCisgIGlmIChicmwtPmRhdGEpIHsKKyAgICBjbG9zZUtleWJvYXJkRGV2aWNlKGJybCk7CisgICAgY2xvc2VCcmFpbGxlRGV2aWNlKGJybCk7CisKKyAgICBmcmVlKGJybC0+ZGF0YSk7CisgICAgYnJsLT5kYXRhID0gTlVMTDsKKyAgfQorfQorCitzdGF0aWMgaW50Citicmxfd3JpdGVXaW5kb3cgKEJyYWlsbGVEaXNwbGF5ICpicmwsIGNvbnN0IHdjaGFyX3QgKnRleHQpIHsKKyAgaWYgKGNlbGxzSGF2ZUNoYW5nZWQoYnJsLT5kYXRhLT50ZXh0LmNlbGxzLCBicmwtPmJ1ZmZlciwgYnJsLT50ZXh0Q29sdW1ucywgTlVMTCwgTlVMTCwgJmJybC0+ZGF0YS0+dGV4dC5yZXdyaXRlKSkgeworICAgIHVuc2lnbmVkIGNoYXIgY2VsbHNbYnJsLT50ZXh0Q29sdW1uc107CisKKyAgICB0cmFuc2xhdGVPdXRwdXRDZWxscyhjZWxscywgYnJsLT5kYXRhLT50ZXh0LmNlbGxzLCBicmwtPnRleHRDb2x1bW5zKTsKKyAgICBpZiAoIXdyaXRlQnJhaWxsZUNlbGxzKGJybCwgY2VsbHMsIHNpemVvZihjZWxscykpKSByZXR1cm4gMDsKKyAgfQorCisgIHJldHVybiAxOworfQorCitzdGF0aWMgaW50CiticmxfcmVhZENvbW1hbmQgKEJyYWlsbGVEaXNwbGF5ICpicmwsIEtleVRhYmxlQ29tbWFuZENvbnRleHQgY29udGV4dCkgeworICByZXR1cm4gRU9GOworfQpkaWZmIC0tZ2l0IGEvRHJpdmVycy9CcmFpbGxlL0IyRy9icmxkZWZzLWJnLmggYi9Ecml2ZXJzL0JyYWlsbGUvQjJHL2JybGRlZnMtYmcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZjEyNjgyCi0tLSAvZGV2L251bGwKKysrIGIvRHJpdmVycy9CcmFpbGxlL0IyRy9icmxkZWZzLWJnLmgKQEAgLTAsMCArMSw1MSBAQAorLyoKKyAqIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisgKiAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisgKgorICogQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9taWVsa2UuY2MvYnJsdHR5LworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKKyNpZm5kZWYgQlJMVFRZX0lOQ0xVREVEX0JHX0JSTERFRlMKKyNkZWZpbmUgQlJMVFRZX0lOQ0xVREVEX0JHX0JSTERFRlMKKwordHlwZWRlZiBlbnVtIHsKKyAgQkdfTkFWX0RvdDEsCisgIEJHX05BVl9Eb3QyLAorICBCR19OQVZfRG90MywKKyAgQkdfTkFWX0RvdDQsCisgIEJHX05BVl9Eb3Q1LAorICBCR19OQVZfRG90NiwKKyAgQkdfTkFWX0RvdDcsCisgIEJHX05BVl9Eb3Q4LAorCisgIEJHX05BVl9TcGFjZSwKKyAgQkdfTkFWX0JhY2t3YXJkLAorICBCR19OQVZfRm9yd2FyZCwKKworICBCR19OQVZfQ2VudGVyLAorICBCR19OQVZfTGVmdCwKKyAgQkdfTkFWX1JpZ2h0LAorICBCR19OQVZfVXAsCisgIEJHX05BVl9Eb3duLAorCisgIEJHX05BVl9Mb3VkZXIsCisgIEJHX05BVl9Tb2Z0ZXIsCit9IEJHX05hdmlnYXRpb25LZXk7CisKK3R5cGVkZWYgZW51bSB7CisgIEJHX0dSUF9OYXZpZ2F0aW9uS2V5cywKKyAgQkdfR1JQX1JvdXRpbmdLZXlzCit9IEJHX0tleUdyb3VwOworCisjZW5kaWYgLyogQlJMVFRZX0lOQ0xVREVEX0JHX0JSTERFRlMgKi8gCmRpZmYgLS1naXQgYS9Ecml2ZXJzL0JyYWlsbGUvQjJHL21ldGVjX2ZsYXQyMF9pb2N0bC5oIGIvRHJpdmVycy9CcmFpbGxlL0IyRy9tZXRlY19mbGF0MjBfaW9jdGwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMzQ1ZGU0Ci0tLSAvZGV2L251bGwKKysrIGIvRHJpdmVycy9CcmFpbGxlL0IyRy9tZXRlY19mbGF0MjBfaW9jdGwuaApAQCAtMCwwICsxLDMyIEBACisjaWZuZGVmIF9NRVRFQ19GTEFUMjBfSU9DVExfSAorI2RlZmluZSBfTUVURUNfRkxBVDIwX0lPQ1RMX0gKKworI2RlZmluZSBNQVhfQlJBSUxMRV9MSU5FX1NJWkUJCQkyMAorCisjZGVmaW5lIE1FVEVDX0ZMQVQyMF9JT0NfTUFHSUMJCQkweEUyCisKKyNkZWZpbmUgVU9VVDFfRU5BQkxFCQkJCSgxIDw8IDQpCisjZGVmaW5lIFVPVVQyX0VOQUJMRQkJCQkoMSA8PCA1KQorI2RlZmluZSBVT1VUM19FTkFCTEUJCQkJKDEgPDwgNykKKworI2RlZmluZSBNRVRFQ19GTEFUMjBfR0VUX0RSSVZFUl9WRVJTSU9OCQlfSU9DKF9JT0NfUkVBRCwgIE1FVEVDX0ZMQVQyMF9JT0NfTUFHSUMsIDB4MDEsIDQpCisjZGVmaW5lIE1FVEVDX0ZMQVQyMF9ESVNQTEFZX0NPTlRST0wJCV9JT0MoX0lPQ19SRUFELCAgTUVURUNfRkxBVDIwX0lPQ19NQUdJQywgMHgwMiwgNCkKKwkvKiB7UEt9IHBhcmFtZXRlcnMgZm9yIE1FVEVDX0ZMQVQyMF9ESVNQTEFZX0NPTlRST0wgaW9jdGwgKi8KKwkjZGVmaW5lIERJU1BMQVlfRU5BQkxFCQkJCTEKKwkjZGVmaW5lIERJU1BMQVlfRElTQUJMRQkJCQkwCisjZGVmaW5lCU1FVEVDX0ZMQVQyMF9DTEVBUl9ESVNQTEFZCQlfSU9DKF9JT0NfV1JJVEUsIE1FVEVDX0ZMQVQyMF9JT0NfTUFHSUMsIDB4MDMsIDQpCisjZGVmaW5lCU1FVEVDX0ZMQVQyMF9ESVNQTEFZX1dSSVRFCQlfSU9DKF9JT0NfV1JJVEUsIE1FVEVDX0ZMQVQyMF9JT0NfTUFHSUMsIDB4MDQsIDQpCisjZGVmaW5lIE1FVEVDX0ZMQVQyMF9TRVRfRE9UX1NUUkVOR1RICQlfSU9DKF9JT0NfV1JJVEUsIE1FVEVDX0ZMQVQyMF9JT0NfTUFHSUMsIDB4MDUsIDQpCisJLyoge1BLfSBEb3QgU3RyZW5ndGggVmFsdWVzIGZvciBNRVRFQ19GTEFUMjBfU0VUX0RPVF9TVFJFTkdUSCBpb2N0bCAqLworCSNkZWZpbmUgVU9VVF8xNTVWX0NPTkZJR19WQUxVRQkJCTAKKwkjZGVmaW5lIFVPVVRfMTYyVl9DT05GSUdfVkFMVUUJCQkoVU9VVDFfRU5BQkxFKQorCSNkZWZpbmUgVU9VVF8xNjhWX0NPTkZJR19WQUxVRQkJCShVT1VUMl9FTkFCTEUpCisJI2RlZmluZSBVT1VUXzE3NFZfQ09ORklHX1ZBTFVFCQkJKFVPVVQyX0VOQUJMRSB8IFVPVVQxX0VOQUJMRSkKKwkjZGVmaW5lIFVPVVRfMTc3Vl9DT05GSUdfVkFMVUUJCQkoVU9VVDNfRU5BQkxFKQorCSNkZWZpbmUgVU9VVF8xODRWX0NPTkZJR19WQUxVRQkJCShVT1VUM19FTkFCTEUgfCBVT1VUMV9FTkFCTEUpCisJI2RlZmluZSBVT1VUXzE5MVZfQ09ORklHX1ZBTFVFCQkJKFVPVVQzX0VOQUJMRSB8IFVPVVQyX0VOQUJMRSkKKwkjZGVmaW5lIFVPVVRfMTk5Vl9DT05GSUdfVkFMVUUJCQkoVU9VVDNfRU5BQkxFIHwgVU9VVDJfRU5BQkxFIHwgVU9VVDFfRU5BQkxFKQorCQorI2RlZmluZSBNRVRFQ19GTEFUMjBfSU9DX01BWE5SCQkJMHgwNQorCisjZW5kaWYgLyogX01FVEVDX0ZMQVQyMF9JT0NUTF9IICovClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvRHJpdmVycy9CcmFpbGxlL0JhdW0vTWFrZWZpbGUuaW4gYi9Ecml2ZXJzL0JyYWlsbGUvQmF1bS9NYWtlZmlsZS5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZmM1MTcxCi0tLSAvZGV2L251bGwKKysrIGIvRHJpdmVycy9CcmFpbGxlL0JhdW0vTWFrZWZpbGUuaW4KQEAgLTAsMCArMSwyOCBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorIyAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyMKKyMgQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorIworIyBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorIworIyBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisjIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyMgbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisjCisjIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK0RSSVZFUl9DT0RFID0gYm0KK0RSSVZFUl9OQU1FID0gQmF1bQorRFJJVkVSX1VTQUdFID0gQnJhaWxsZUNvbm5lY3QgMTIvMjQvMzIvNDAvNjQvODAsIEJyYWlsbGlhbnQgMjQvMzIvNDAvNjQvODAsIENvbm55IDEyLCBETTgwIFBsdXMsIEVjb1ZhcmlvIDI0LzMyLzQwLzY0LzgwLCBJbmthLCBOTFMgZVJlYWRlciBab29tYXgsIE9yYml0IFJlYWRlciAyMC80MCwgUG9ja2V0VmFyaW8gMjQsIFByb250byEgVjMgMTgvNDAsIFByb250byEgVjQgMTgvNDAsIFJCVCA0MC84MCwgUmVmcmVzaGFicmFpbGxlIDE4LCBTdXBlclZhcmlvIDMyLzQwLzY0LzgwLCBWYXJpbyA0MC84MCwgVmFyaW9Db25uZWN0IDEyLzI0LzMyLzQwLzY0LzgwLCBWYXJpb1BybyA0MC82NC84MCwgVmFyaW9VbHRyYSAyMC8zMi80MAorRFJJVkVSX1ZFUlNJT04gPSAKK0RSSVZFUl9ERVZFTE9QRVJTID0gRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPgoraW5jbHVkZSAkKFNSQ19UT1ApYnJhaWxsZS5taworCiticmFpbGxlLiRPOgorCSQoQ0MpICQoQlJMX0NGTEFHUykgLWMgJChTUkNfRElSKS9icmFpbGxlLmMKKwpkaWZmIC0tZ2l0IGEvRHJpdmVycy9CcmFpbGxlL0JhdW0vUkVBRE1FLklua2EgYi9Ecml2ZXJzL0JyYWlsbGUvQmF1bS9SRUFETUUuSW5rYQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZjljNmIxCi0tLSAvZGV2L251bGwKKysrIGIvRHJpdmVycy9CcmFpbGxlL0JhdW0vUkVBRE1FLklua2EKQEAgLTAsMCArMSwyNCBAQAorQm90aCB0aGUga2V5Ym9hcmQgYW5kIHRoZSBzZXJpYWwgcG9ydHMgb2YgdGhlIElua2Egc2hvdWxkIGJlIGNvbm5lY3RlZCBpbiBvcmRlcgordG8gdXNlIGl0IHdpdGggQlJMVFRZLiBUaGUgSW5rYSBpdHNlbGYgaXMgY2FwYWJsZSBvZiBjb21tdW5pY2F0aW5nIGVudGlyZWx5IHZpYQordGhlIGtleWJvYXJkIHBvcnQsIGJ1dCB0aGUgTGludXgga2VybmVsIGtleWJvYXJkIGRyaXZlciBjYW4ndCBoYW5kbGUgdGhpcy4KKworSW4gb3JkZXIgdG8gdXNlIHRoZSBJbmthIHdpdGggQlJMVFRZIGl0IGlzIG5lY2Vzc2FyeSB0byBoYXZlIHRoZSBsYXRlc3QgdmVyc2lvbgorKGRhdGVkIDE5OTgpIG9mIHRoZSBmaXJtd2FyZS4gSWYgdGhlIElua2Egc2F5cyBlaXRoZXIgIm1vZGUgMSIgb3IgIm1vZGUgMiIgYXQKK3RoZSBlbmQgb2YgdGhlIHZlcnNpb24gbnVtYmVyIGFmdGVyIGl0J3MgY29ubmVjdGVkIHRvIGEgY29tcHV0ZXIgYW5kIHR1cm5lZCBvbgordGhlbiBpdCBoYXMgdGhlIG5lY2Vzc2FyeSBmaXJtd2FyZS4gSWYgaXQgZG9lc24ndCB0aGVuIGl0J2xsIHByb2JhYmx5IG5lZWQgYW4KK3VwZ3JhZGUuIFRvIGRvIHRoaXMsIGNvbnRhY3QgQmF1bSBhbmQgZ2l2ZSB0aGVtIHRoZSBzZXJpYWwgbnVtYmVyIG9mIHRoZSBJbmthCisod2hpY2ggaXMgcHJpbnRlZCBvbiB0aGUgdW5kZXIgc2lkZSBvZiB0aGUgZGV2aWNlKS4KKworVGhlIG5ld2VyIGZpcm13YXJlIHN1cHBvcnRzIHR3byBtb2RlcyBvZiBvcGVyYXRpb24uIE1vZGUgMSB1c2VzIHRoZSBvbGQgSW5rYQorcHJvdG9jb2wgYW5kIHRyYW5zZmVycyBkYXRhIGF0IDU3LDYwMCBiYXVkIHdpdGggbm9uLXN0YW5kYXJkIGZsb3cgY29udHJvbC4gTW9kZQorMiB1c2VzIHRoZSBuZXcgSW5rYSBwcm90b2NvbCBhbmQgdHJhbnNmZXJzIGRhdGEgYXQgMTksMjAwIGJhdWQgd2l0aCBubyBmbG93Citjb250cm9sLgorCitUaGUgSW5rYSBkZWZhdWx0cyB0byBtb2RlIDEuIFRoaXMgaXMgc2hvd24gb24gdGhlIGJyYWlsbGUgZGlzcGxheSB3aGVuIAordGhlIElua2EgZmlyc3QgaW5pdGlhbGl6ZXMgb3IgYWZ0ZXIgYSBzb2Z0IHJlc2V0LgorCitCZWZvcmUgcnVubmluZyBCUkxUVFksIGNoYW5nZSB0aGUgSW5rYSB0byBtb2RlIDIgYnkgcHJlc3NpbmcgdGwxK3RsMit0cjMgKHdoaWNoCitpcyB0aGUgZGlnaXQgMiByZXByZXNlbnRlZCBhcyBhIGRvdC1zaXggbnVtYmVyKS4gVG8gcmV0dXJuIHRvIG1vZGUgMSAobmVpdGhlcgorbmVjZXNzYXJ5IG5vciBkZXNpcmFibGUgdW5kZXIgTGludXgpLCBwcmVzcyB0bDErdHIzICh3aGljaCBpcyB0aGUgZGlnaXQgMQorcmVwcmVzZW50ZWQgYXMgYSBkb3Qtc2l4IG51bWJlcikuIFRoZSBuZXcgbW9kZSBzZXR0aW5nIGlzIHNob3duIG9uIHRoZSBkaXNwbGF5CithdCB0aGUgZW5kIG9mIHRoZSBsaW5lLCBhZnRlciB0aGUgdmVyc2lvbiBudW1iZXIgYW5kIGRhdGUgb2YgdGhlIGZpcm13YXJlLgpkaWZmIC0tZ2l0IGEvRHJpdmVycy9CcmFpbGxlL0JhdW0vYnJhaWxsZS5jIGIvRHJpdmVycy9CcmFpbGxlL0JhdW0vYnJhaWxsZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM3M2ZmMTQKLS0tIC9kZXYvbnVsbAorKysgYi9Ecml2ZXJzL0JyYWlsbGUvQmF1bS9icmFpbGxlLmMKQEAgLTAsMCArMSwzNDM2IEBACisvKgorICogQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyAqICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyAqCisgKiBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorICoKKyAqIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyAqCisgKiBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisgKi8KKworI2luY2x1ZGUgInByb2xvZ3VlLmgiCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisKKyNpbmNsdWRlICJsb2cuaCIKKyNpbmNsdWRlICJzdHJmbXQuaCIKKyNpbmNsdWRlICJwYXJzZS5oIgorI2luY2x1ZGUgImFzeW5jX3dhaXQuaCIKKyNpbmNsdWRlICJhc2NpaS5oIgorCit0eXBlZGVmIGVudW0geworICBQQVJNX1BST1RPQ09MLAorICBQQVJNX1ZBUklPS0VZUworfSBEcml2ZXJQYXJhbWV0ZXI7CisjZGVmaW5lIEJSTFBBUk1TICJwcm90b2NvbCIsICJ2YXJpb2tleXMiCisKKyNkZWZpbmUgQlJMU1RBVCBTVF9UaWVtYW5TdHlsZQorI2RlZmluZSBCUkxfSEFWRV9TVEFUVVNfQ0VMTFMKKyNkZWZpbmUgQlJMX0hBVkVfUEFDS0VUX0lPCisjaW5jbHVkZSAiYnJsX2RyaXZlci5oIgorI2luY2x1ZGUgImJybGRlZnMtYm0uaCIKKworQkVHSU5fS0VZX05BTUVfVEFCTEUoZGlzcGxheSkKKyAgS0VZX05BTUVfRU5UUlkoQk1fS0VZX0RJU1BMQVkrNywgIkRpc3BsYXk4IiksCisgIEtFWV9OQU1FX0VOVFJZKEJNX0tFWV9ESVNQTEFZKzYsICJEaXNwbGF5NyIpLAorICBLRVlfTkFNRV9FTlRSWShCTV9LRVlfRElTUExBWSs1LCAiRGlzcGxheTYiKSwKKyAgS0VZX05BTUVfRU5UUlkoQk1fS0VZX0RJU1BMQVkrNCwgIkRpc3BsYXk1IiksCisgIEtFWV9OQU1FX0VOVFJZKEJNX0tFWV9ESVNQTEFZKzMsICJEaXNwbGF5NCIpLAorICBLRVlfTkFNRV9FTlRSWShCTV9LRVlfRElTUExBWSsyLCAiRGlzcGxheTMiKSwKKyAgS0VZX05BTUVfRU5UUlkoQk1fS0VZX0RJU1BMQVkrMSwgIkRpc3BsYXkyIiksCisgIEtFWV9OQU1FX0VOVFJZKEJNX0tFWV9ESVNQTEFZKzAsICJEaXNwbGF5MSIpLAorRU5EX0tFWV9OQU1FX1RBQkxFCisKK0JFR0lOX0tFWV9OQU1FX1RBQkxFKGNvbW1hbmQpCisgIEtFWV9OQU1FX0VOVFJZKEJNX0tFWV9DT01NQU5EKzYsICJDb21tYW5kNyIpLAorICBLRVlfTkFNRV9FTlRSWShCTV9LRVlfQ09NTUFORCs1LCAiQ29tbWFuZDYiKSwKKyAgS0VZX05BTUVfRU5UUlkoQk1fS0VZX0NPTU1BTkQrNCwgIkNvbW1hbmQ1IiksCisgIEtFWV9OQU1FX0VOVFJZKEJNX0tFWV9DT01NQU5EKzMsICJDb21tYW5kNCIpLAorICBLRVlfTkFNRV9FTlRSWShCTV9LRVlfQ09NTUFORCsyLCAiQ29tbWFuZDMiKSwKKyAgS0VZX05BTUVfRU5UUlkoQk1fS0VZX0NPTU1BTkQrMSwgIkNvbW1hbmQyIiksCisgIEtFWV9OQU1FX0VOVFJZKEJNX0tFWV9DT01NQU5EKzAsICJDb21tYW5kMSIpLAorRU5EX0tFWV9OQU1FX1RBQkxFCisKK0JFR0lOX0tFWV9OQU1FX1RBQkxFKGZyb250KQorICBLRVlfTkFNRV9FTlRSWShCTV9LRVlfRlJPTlQrMCwgIkZyb250MSIpLAorICBLRVlfTkFNRV9FTlRSWShCTV9LRVlfRlJPTlQrMSwgIkZyb250MiIpLAorICBLRVlfTkFNRV9FTlRSWShCTV9LRVlfRlJPTlQrMiwgIkZyb250MyIpLAorICBLRVlfTkFNRV9FTlRSWShCTV9LRVlfRlJPTlQrMywgIkZyb250NCIpLAorICBLRVlfTkFNRV9FTlRSWShCTV9LRVlfRlJPTlQrNCwgIkZyb250NSIpLAorICBLRVlfTkFNRV9FTlRSWShCTV9LRVlfRlJPTlQrNSwgIkZyb250NiIpLAorICBLRVlfTkFNRV9FTlRSWShCTV9LRVlfRlJPTlQrNiwgIkZyb250NyIpLAorICBLRVlfTkFNRV9FTlRSWShCTV9LRVlfRlJPTlQrNywgIkZyb250OCIpLAorICBLRVlfTkFNRV9FTlRSWShCTV9LRVlfRlJPTlQrOCwgIkZyb250OSIpLAorICBLRVlfTkFNRV9FTlRSWShCTV9LRVlfRlJPTlQrOSwgIkZyb250MTAiKSwKK0VORF9LRVlfTkFNRV9UQUJMRQorCitCRUdJTl9LRVlfTkFNRV9UQUJMRShiYWNrKQorICBLRVlfTkFNRV9FTlRSWShCTV9LRVlfQkFDSyswLCAiQmFjazEiKSwKKyAgS0VZX05BTUVfRU5UUlkoQk1fS0VZX0JBQ0srMSwgIkJhY2syIiksCisgIEtFWV9OQU1FX0VOVFJZKEJNX0tFWV9CQUNLKzIsICJCYWNrMyIpLAorICBLRVlfTkFNRV9FTlRSWShCTV9LRVlfQkFDSyszLCAiQmFjazQiKSwKKyAgS0VZX05BTUVfRU5UUlkoQk1fS0VZX0JBQ0srNCwgIkJhY2s1IiksCisgIEtFWV9OQU1FX0VOVFJZKEJNX0tFWV9CQUNLKzUsICJCYWNrNiIpLAorICBLRVlfTkFNRV9FTlRSWShCTV9LRVlfQkFDSys2LCAiQmFjazciKSwKKyAgS0VZX05BTUVfRU5UUlkoQk1fS0VZX0JBQ0srNywgIkJhY2s4IiksCisgIEtFWV9OQU1FX0VOVFJZKEJNX0tFWV9CQUNLKzgsICJCYWNrOSIpLAorICBLRVlfTkFNRV9FTlRSWShCTV9LRVlfQkFDSys5LCAiQmFjazEwIiksCitFTkRfS0VZX05BTUVfVEFCTEUKKworQkVHSU5fS0VZX05BTUVfVEFCTEUoZW50cnkpCisgIEtFWV9OQU1FX0VOVFJZKEJNX0tFWV9COSwgIkI5IiksCisgIEtFWV9OQU1FX0VOVFJZKEJNX0tFWV9CMTAsICJCMTAiKSwKKyAgS0VZX05BTUVfRU5UUlkoQk1fS0VZX0IxMSwgIkIxMSIpLAorCisgIEtFWV9OQU1FX0VOVFJZKEJNX0tFWV9GMSwgIkYxIiksCisgIEtFWV9OQU1FX0VOVFJZKEJNX0tFWV9GMiwgIkYyIiksCisgIEtFWV9OQU1FX0VOVFJZKEJNX0tFWV9GMywgIkYzIiksCisgIEtFWV9OQU1FX0VOVFJZKEJNX0tFWV9GNCwgIkY0IiksCitFTkRfS0VZX05BTUVfVEFCTEUKKworQkVHSU5fS0VZX05BTUVfVEFCTEUoZG90cykKKyAgS0VZX05BTUVfRU5UUlkoQk1fS0VZX0RPVDEsICJEb3QxIiksCisgIEtFWV9OQU1FX0VOVFJZKEJNX0tFWV9ET1QyLCAiRG90MiIpLAorICBLRVlfTkFNRV9FTlRSWShCTV9LRVlfRE9UMywgIkRvdDMiKSwKKyAgS0VZX05BTUVfRU5UUlkoQk1fS0VZX0RPVDQsICJEb3Q0IiksCisgIEtFWV9OQU1FX0VOVFJZKEJNX0tFWV9ET1Q1LCAiRG90NSIpLAorICBLRVlfTkFNRV9FTlRSWShCTV9LRVlfRE9UNiwgIkRvdDYiKSwKKyAgS0VZX05BTUVfRU5UUlkoQk1fS0VZX0RPVDcsICJEb3Q3IiksCisgIEtFWV9OQU1FX0VOVFJZKEJNX0tFWV9ET1Q4LCAiRG90OCIpLAorRU5EX0tFWV9OQU1FX1RBQkxFCisKK0JFR0lOX0tFWV9OQU1FX1RBQkxFKGpveXN0aWNrKQorICBLRVlfTkFNRV9FTlRSWShCTV9LRVlfVVAsICJVcCIpLAorICBLRVlfTkFNRV9FTlRSWShCTV9LRVlfTEVGVCwgIkxlZnQiKSwKKyAgS0VZX05BTUVfRU5UUlkoQk1fS0VZX0RPV04sICJEb3duIiksCisgIEtFWV9OQU1FX0VOVFJZKEJNX0tFWV9SSUdIVCwgIlJpZ2h0IiksCisgIEtFWV9OQU1FX0VOVFJZKEJNX0tFWV9QUkVTUywgIlByZXNzIiksCitFTkRfS0VZX05BTUVfVEFCTEUKKworQkVHSU5fS0VZX05BTUVfVEFCTEUobmF2cGFkKQorICBLRVlfTkFNRV9FTlRSWShCTV9LRVlfVVAsICJVcCIpLAorICBLRVlfTkFNRV9FTlRSWShCTV9LRVlfTEVGVCwgIkxlZnQiKSwKKyAgS0VZX05BTUVfRU5UUlkoQk1fS0VZX0RPV04sICJEb3duIiksCisgIEtFWV9OQU1FX0VOVFJZKEJNX0tFWV9SSUdIVCwgIlJpZ2h0IiksCisgIEtFWV9OQU1FX0VOVFJZKEJNX0tFWV9QUkVTUywgIlNlbGVjdCIpLAorRU5EX0tFWV9OQU1FX1RBQkxFCisKK0JFR0lOX0tFWV9OQU1FX1RBQkxFKHdoZWVscykKKyAgS0VZX05BTUVfRU5UUlkoQk1fS0VZX1dIRUVMX1VQKzAsICJGaXJzdFdoZWVsVXAiKSwKKyAgS0VZX05BTUVfRU5UUlkoQk1fS0VZX1dIRUVMX0RPV04rMCwgIkZpcnN0V2hlZWxEb3duIiksCisgIEtFWV9OQU1FX0VOVFJZKEJNX0tFWV9XSEVFTF9QUkVTUyswLCAiRmlyc3RXaGVlbFByZXNzIiksCisKKyAgS0VZX05BTUVfRU5UUlkoQk1fS0VZX1dIRUVMX1VQKzEsICJTZWNvbmRXaGVlbFVwIiksCisgIEtFWV9OQU1FX0VOVFJZKEJNX0tFWV9XSEVFTF9ET1dOKzEsICJTZWNvbmRXaGVlbERvd24iKSwKKyAgS0VZX05BTUVfRU5UUlkoQk1fS0VZX1dIRUVMX1BSRVNTKzEsICJTZWNvbmRXaGVlbFByZXNzIiksCisKKyAgS0VZX05BTUVfRU5UUlkoQk1fS0VZX1dIRUVMX1VQKzIsICJUaGlyZFdoZWVsVXAiKSwKKyAgS0VZX05BTUVfRU5UUlkoQk1fS0VZX1dIRUVMX0RPV04rMiwgIlRoaXJkV2hlZWxEb3duIiksCisgIEtFWV9OQU1FX0VOVFJZKEJNX0tFWV9XSEVFTF9QUkVTUysyLCAiVGhpcmRXaGVlbFByZXNzIiksCisKKyAgS0VZX05BTUVfRU5UUlkoQk1fS0VZX1dIRUVMX1VQKzMsICJGb3VydGhXaGVlbFVwIiksCisgIEtFWV9OQU1FX0VOVFJZKEJNX0tFWV9XSEVFTF9ET1dOKzMsICJGb3VydGhXaGVlbERvd24iKSwKKyAgS0VZX05BTUVfRU5UUlkoQk1fS0VZX1dIRUVMX1BSRVNTKzMsICJGb3VydGhXaGVlbFByZXNzIiksCitFTkRfS0VZX05BTUVfVEFCTEUKKworQkVHSU5fS0VZX05BTUVfVEFCTEUoc3RhdHVzKQorICBLRVlfTkFNRV9FTlRSWShCTV9LRVlfU1RBVFVTKzAsICJTdGF0dXNCdXR0b24xIiksCisgIEtFWV9OQU1FX0VOVFJZKEJNX0tFWV9TVEFUVVMrMSwgIlN0YXR1c0J1dHRvbjIiKSwKKyAgS0VZX05BTUVfRU5UUlkoQk1fS0VZX1NUQVRVUysyLCAiU3RhdHVzQnV0dG9uMyIpLAorICBLRVlfTkFNRV9FTlRSWShCTV9LRVlfU1RBVFVTKzMsICJTdGF0dXNCdXR0b240IiksCisKKyAgS0VZX05BTUVfRU5UUlkoQk1fS0VZX1NUQVRVUys0LCAiU3RhdHVzS2V5MSIpLAorICBLRVlfTkFNRV9FTlRSWShCTV9LRVlfU1RBVFVTKzUsICJTdGF0dXNLZXkyIiksCisgIEtFWV9OQU1FX0VOVFJZKEJNX0tFWV9TVEFUVVMrNiwgIlN0YXR1c0tleTMiKSwKKyAgS0VZX05BTUVfRU5UUlkoQk1fS0VZX1NUQVRVUys3LCAiU3RhdHVzS2V5NCIpLAorRU5EX0tFWV9OQU1FX1RBQkxFCisKK0JFR0lOX0tFWV9OQU1FX1RBQkxFKHJvdXRpbmcpCisgIEtFWV9HUk9VUF9FTlRSWShCTV9HUlBfUm91dGluZ0tleXMsICJSb3V0aW5nS2V5IiksCitFTkRfS0VZX05BTUVfVEFCTEUKKworQkVHSU5fS0VZX05BTUVfVEFCTEUoaG9yaXpvbnRhbCkKKyAgS0VZX0dST1VQX0VOVFJZKEJNX0dSUF9Ib3Jpem9udGFsU2Vuc29ycywgIkhvcml6b250YWxTZW5zb3IiKSwKK0VORF9LRVlfTkFNRV9UQUJMRQorCitCRUdJTl9LRVlfTkFNRV9UQUJMRSh2ZXJ0aWNhbCkKKyAgS0VZX0dST1VQX0VOVFJZKEJNX0dSUF9MZWZ0U2Vuc29ycywgIkxlZnRTZW5zb3IiKSwKKyAgS0VZX0dST1VQX0VOVFJZKEJNX0dSUF9SaWdodFNlbnNvcnMsICJSaWdodFNlbnNvciIpLAorICBLRVlfR1JPVVBfRU5UUlkoQk1fR1JQX1NjYWxlZExlZnRTZW5zb3JzLCAiU2NhbGVkTGVmdFNlbnNvciIpLAorICBLRVlfR1JPVVBfRU5UUlkoQk1fR1JQX1NjYWxlZFJpZ2h0U2Vuc29ycywgIlNjYWxlZFJpZ2h0U2Vuc29yIiksCitFTkRfS0VZX05BTUVfVEFCTEUKKworQkVHSU5fS0VZX05BTUVfVEFCTEUoTkxTX1pvb21heCkKKyAgS0VZX05BTUVfRU5UUlkoQk1fS0VZX0I5LCAiQkwiKSwKKyAgS0VZX05BTUVfRU5UUlkoQk1fS0VZX0IxMCwgIlNwYWNlIiksCisKKyAgS0VZX05BTUVfRU5UUlkoQk1fS0VZX0YxLCAiUzEiKSwKKyAgS0VZX05BTUVfRU5UUlkoQk1fS0VZX0YyLCAiUzIiKSwKKyAgS0VZX05BTUVfRU5UUlkoQk1fS0VZX0YzLCAiUzMiKSwKKyAgS0VZX05BTUVfRU5UUlkoQk1fS0VZX0Y0LCAiUzQiKSwKK0VORF9LRVlfTkFNRV9UQUJMRQorCitCRUdJTl9LRVlfTkFNRV9UQUJMRShvcmJpdCkKKyAgS0VZX05BTUVfRU5UUlkoQk1fS0VZX0I5LCAiU3BhY2UiKSwKK0VORF9LRVlfTkFNRV9UQUJMRQorCitCRUdJTl9LRVlfTkFNRV9UQUJMRVMoZGVmYXVsdCkKKyAgS0VZX05BTUVfU1VCVEFCTEUoZGlzcGxheSw2KSwKKyAgS0VZX05BTUVfVEFCTEUoZW50cnkpLAorICBLRVlfTkFNRV9UQUJMRShkb3RzKSwKKyAgS0VZX05BTUVfVEFCTEUoam95c3RpY2spLAorICBLRVlfTkFNRV9UQUJMRShyb3V0aW5nKSwKK0VORF9LRVlfTkFNRV9UQUJMRVMKKworQkVHSU5fS0VZX05BTUVfVEFCTEVTKHJiKQorICBLRVlfTkFNRV9TVUJUQUJMRShkaXNwbGF5LDYpLAorICBLRVlfTkFNRV9UQUJMRShlbnRyeSksCisgIEtFWV9OQU1FX1RBQkxFKGRvdHMpLAorICBLRVlfTkFNRV9UQUJMRShqb3lzdGljayksCisgIEtFWV9OQU1FX1RBQkxFKHJvdXRpbmcpLAorRU5EX0tFWV9OQU1FX1RBQkxFUworCitCRUdJTl9LRVlfTkFNRV9UQUJMRVMob3JiaXQpCisgIEtFWV9OQU1FX1RBQkxFKG9yYml0KSwKKyAgS0VZX05BTUVfVEFCTEUoZG90cyksCisgIEtFWV9OQU1FX1RBQkxFKG5hdnBhZCksCisgIEtFWV9OQU1FX1NVQlRBQkxFKGRpc3BsYXksNiksCisgIEtFWV9OQU1FX1RBQkxFKHJvdXRpbmcpLAorRU5EX0tFWV9OQU1FX1RBQkxFUworCitCRUdJTl9LRVlfTkFNRV9UQUJMRVMoTkxTX1pvb21heCkKKyAgS0VZX05BTUVfVEFCTEUoTkxTX1pvb21heCksCisgIEtFWV9OQU1FX1RBQkxFKGRvdHMpLAorICBLRVlfTkFNRV9UQUJMRShuYXZwYWQpLAorICBLRVlfTkFNRV9TVUJUQUJMRShkaXNwbGF5LDYpLAorICBLRVlfTkFNRV9UQUJMRShyb3V0aW5nKSwKK0VORF9LRVlfTkFNRV9UQUJMRVMKKworQkVHSU5fS0VZX05BTUVfVEFCTEVTKGIyZykKKyAgS0VZX05BTUVfU1VCVEFCTEUoZGlzcGxheSw2KSwKKyAgS0VZX05BTUVfVEFCTEUoZW50cnkpLAorICBLRVlfTkFNRV9UQUJMRShkb3RzKSwKKyAgS0VZX05BTUVfVEFCTEUobmF2cGFkKSwKKyAgS0VZX05BTUVfVEFCTEUocm91dGluZyksCitFTkRfS0VZX05BTUVfVEFCTEVTCisKK0JFR0lOX0tFWV9OQU1FX1RBQkxFUyhjb25uZWN0KQorICBLRVlfTkFNRV9TVUJUQUJMRShkaXNwbGF5LDYpLAorICBLRVlfTkFNRV9UQUJMRShlbnRyeSksCisgIEtFWV9OQU1FX1RBQkxFKGRvdHMpLAorICBLRVlfTkFNRV9UQUJMRShqb3lzdGljayksCisgIEtFWV9OQU1FX1RBQkxFKHJvdXRpbmcpLAorRU5EX0tFWV9OQU1FX1RBQkxFUworCitCRUdJTl9LRVlfTkFNRV9UQUJMRVMoY29ubnkpCisgIEtFWV9OQU1FX1NVQlRBQkxFKGRpc3BsYXksNiksCisgIEtFWV9OQU1FX1RBQkxFKGVudHJ5KSwKKyAgS0VZX05BTUVfVEFCTEUoZG90cyksCisgIEtFWV9OQU1FX1RBQkxFKGpveXN0aWNrKSwKKyAgS0VZX05BTUVfVEFCTEUocm91dGluZyksCitFTkRfS0VZX05BTUVfVEFCTEVTCisKK0JFR0lOX0tFWV9OQU1FX1RBQkxFUyhwcm9udG8pCisgIEtFWV9OQU1FX1NVQlRBQkxFKGRpc3BsYXksNiksCisgIEtFWV9OQU1FX1RBQkxFKGVudHJ5KSwKKyAgS0VZX05BTUVfVEFCTEUoZG90cyksCisgIEtFWV9OQU1FX1RBQkxFKGpveXN0aWNrKSwKKyAgS0VZX05BTUVfVEFCTEUocm91dGluZyksCitFTkRfS0VZX05BTUVfVEFCTEVTCisKK0JFR0lOX0tFWV9OQU1FX1RBQkxFUyhwdikKKyAgS0VZX05BTUVfU1VCVEFCTEUoZGlzcGxheSw2KSwKKyAgS0VZX05BTUVfVEFCTEUoZW50cnkpLAorICBLRVlfTkFNRV9UQUJMRShkb3RzKSwKKyAgS0VZX05BTUVfVEFCTEUoam95c3RpY2spLAorICBLRVlfTkFNRV9UQUJMRShyb3V0aW5nKSwKK0VORF9LRVlfTkFNRV9UQUJMRVMKKworQkVHSU5fS0VZX05BTUVfVEFCTEVTKHN2KQorICBLRVlfTkFNRV9TVUJUQUJMRShkaXNwbGF5LDYpLAorICBLRVlfTkFNRV9UQUJMRShyb3V0aW5nKSwKK0VORF9LRVlfTkFNRV9UQUJMRVMKKworQkVHSU5fS0VZX05BTUVfVEFCTEVTKHVsdHJhKQorICBLRVlfTkFNRV9TVUJUQUJMRShkaXNwbGF5LDYpLAorICBLRVlfTkFNRV9UQUJMRShlbnRyeSksCisgIEtFWV9OQU1FX1RBQkxFKGRvdHMpLAorICBLRVlfTkFNRV9UQUJMRShqb3lzdGljayksCisgIEtFWV9OQU1FX1RBQkxFKHJvdXRpbmcpLAorRU5EX0tFWV9OQU1FX1RBQkxFUworCitCRUdJTl9LRVlfTkFNRV9UQUJMRVMoaW5rYSkKKyAgS0VZX05BTUVfU1VCVEFCTEUoZGlzcGxheSw2KSwKKyAgS0VZX05BTUVfVEFCTEUoaG9yaXpvbnRhbCksCisgIEtFWV9OQU1FX1RBQkxFKHZlcnRpY2FsKSwKK0VORF9LRVlfTkFNRV9UQUJMRVMKKworQkVHSU5fS0VZX05BTUVfVEFCTEVTKGRtODBwKQorICBLRVlfTkFNRV9TVUJUQUJMRShkaXNwbGF5LDcpLAorICBLRVlfTkFNRV9UQUJMRShyb3V0aW5nKSwKK0VORF9LRVlfTkFNRV9UQUJMRVMKKworQkVHSU5fS0VZX05BTUVfVEFCTEVTKHY0MCkKKyAgS0VZX05BTUVfU1VCVEFCTEUoZGlzcGxheSw2KSwKKyAgS0VZX05BTUVfVEFCTEUocm91dGluZyksCitFTkRfS0VZX05BTUVfVEFCTEVTCisKK0JFR0lOX0tFWV9OQU1FX1RBQkxFUyh2ODApCisgIEtFWV9OQU1FX1NVQlRBQkxFKGRpc3BsYXksNiksCisgIEtFWV9OQU1FX1RBQkxFKGNvbW1hbmQpLAorICBLRVlfTkFNRV9UQUJMRShmcm9udCksCisgIEtFWV9OQU1FX1RBQkxFKGJhY2spLAorICBLRVlfTkFNRV9UQUJMRShyb3V0aW5nKSwKK0VORF9LRVlfTkFNRV9UQUJMRVMKKworQkVHSU5fS0VZX05BTUVfVEFCTEVTKHBybykKKyAgS0VZX05BTUVfU1VCVEFCTEUoZGlzcGxheSw2KSwKKyAgS0VZX05BTUVfVEFCTEUod2hlZWxzKSwKKyAgS0VZX05BTUVfVEFCTEUoc3RhdHVzKSwKKyAgS0VZX05BTUVfVEFCTEUocm91dGluZyksCitFTkRfS0VZX05BTUVfVEFCTEVTCisKK0JFR0lOX0tFWV9OQU1FX1RBQkxFUyh2aykKKyAgS0VZX05BTUVfU1VCVEFCTEUoZGlzcGxheSw2KSwKKyAgS0VZX05BTUVfVEFCTEUocm91dGluZyksCitFTkRfS0VZX05BTUVfVEFCTEVTCisKK0RFRklORV9LRVlfVEFCTEUoZGVmYXVsdCkKK0RFRklORV9LRVlfVEFCTEUocmIpCitERUZJTkVfS0VZX1RBQkxFKG9yYml0KQorREVGSU5FX0tFWV9UQUJMRShOTFNfWm9vbWF4KQorREVGSU5FX0tFWV9UQUJMRShiMmcpCitERUZJTkVfS0VZX1RBQkxFKGNvbm5lY3QpCitERUZJTkVfS0VZX1RBQkxFKGNvbm55KQorREVGSU5FX0tFWV9UQUJMRShwcm9udG8pCitERUZJTkVfS0VZX1RBQkxFKHB2KQorREVGSU5FX0tFWV9UQUJMRShzdikKK0RFRklORV9LRVlfVEFCTEUodWx0cmEpCitERUZJTkVfS0VZX1RBQkxFKGlua2EpCitERUZJTkVfS0VZX1RBQkxFKGRtODBwKQorREVGSU5FX0tFWV9UQUJMRSh2NDApCitERUZJTkVfS0VZX1RBQkxFKHY4MCkKK0RFRklORV9LRVlfVEFCTEUocHJvKQorREVGSU5FX0tFWV9UQUJMRSh2aykKKworQkVHSU5fS0VZX1RBQkxFX0xJU1QKKyAgJktFWV9UQUJMRV9ERUZJTklUSU9OKGRlZmF1bHQpLAorICAmS0VZX1RBQkxFX0RFRklOSVRJT04ocmIpLAorICAmS0VZX1RBQkxFX0RFRklOSVRJT04ob3JiaXQpLAorICAmS0VZX1RBQkxFX0RFRklOSVRJT04oTkxTX1pvb21heCksCisgICZLRVlfVEFCTEVfREVGSU5JVElPTihiMmcpLAorICAmS0VZX1RBQkxFX0RFRklOSVRJT04oY29ubmVjdCksCisgICZLRVlfVEFCTEVfREVGSU5JVElPTihjb25ueSksCisgICZLRVlfVEFCTEVfREVGSU5JVElPTihwcm9udG8pLAorICAmS0VZX1RBQkxFX0RFRklOSVRJT04ocHYpLAorICAmS0VZX1RBQkxFX0RFRklOSVRJT04oc3YpLAorICAmS0VZX1RBQkxFX0RFRklOSVRJT04odWx0cmEpLAorICAmS0VZX1RBQkxFX0RFRklOSVRJT04oaW5rYSksCisgICZLRVlfVEFCTEVfREVGSU5JVElPTihkbTgwcCksCisgICZLRVlfVEFCTEVfREVGSU5JVElPTih2NDApLAorICAmS0VZX1RBQkxFX0RFRklOSVRJT04odjgwKSwKKyAgJktFWV9UQUJMRV9ERUZJTklUSU9OKHBybyksCisgICZLRVlfVEFCTEVfREVGSU5JVElPTih2ayksCitFTkRfS0VZX1RBQkxFX0xJU1QKKworLyogR2xvYmFsIERlZmluaXRpb25zICovCisKK3N0YXRpYyBjb25zdCBpbnQgcHJvYmVMaW1pdCA9IDI7CitzdGF0aWMgY29uc3QgaW50IHByb2JlVGltZW91dCA9IDIwMDsKKworI2RlZmluZSBLRVlfR1JPVVBfU0laRShjb3VudCkgKCgoY291bnQpICsgNykgLyA4KQorI2RlZmluZSBNQVhJTVVNX0NFTExfQ09VTlQgODQKKyNkZWZpbmUgVkVSVElDQUxfU0VOU09SX0NPVU5UIDI3CisKK3N0YXRpYyBpbnQgY2VsbENvdW50Oworc3RhdGljIGludCBjZWxsc1VwZGF0ZWQ7CitzdGF0aWMgdW5zaWduZWQgY2hhciBpbnRlcm5hbENlbGxzW01BWElNVU1fQ0VMTF9DT1VOVF07CitzdGF0aWMgdW5zaWduZWQgY2hhciBleHRlcm5hbENlbGxzW01BWElNVU1fQ0VMTF9DT1VOVF07CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgdW5zaWduZWQgY2hhciBuYXZpZ2F0aW9uS2V5c1tLRVlfR1JPVVBfU0laRShCTV9LRVlfQ09VTlQpXTsKKyAgdW5zaWduZWQgY2hhciByb3V0aW5nS2V5c1tLRVlfR1JPVVBfU0laRShNQVhJTVVNX0NFTExfQ09VTlQpXTsKKyAgdW5zaWduZWQgY2hhciBob3Jpem9udGFsU2Vuc29yc1tLRVlfR1JPVVBfU0laRShNQVhJTVVNX0NFTExfQ09VTlQpXTsKKyAgdW5zaWduZWQgY2hhciBsZWZ0U2Vuc29yc1tLRVlfR1JPVVBfU0laRShWRVJUSUNBTF9TRU5TT1JfQ09VTlQpXTsKKyAgdW5zaWduZWQgY2hhciByaWdodFNlbnNvcnNbS0VZX0dST1VQX1NJWkUoVkVSVElDQUxfU0VOU09SX0NPVU5UKV07Cit9IEtleXNTdGF0ZTsKKworc3RhdGljIEtleXNTdGF0ZSBrZXlzU3RhdGU7CitzdGF0aWMgdW5zaWduZWQgY2hhciBzd2l0Y2hTZXR0aW5nczsKKwordHlwZWRlZiBzdHJ1Y3QgeworICBjb25zdCBjaGFyICpuYW1lOworICBjb25zdCBEb3RzVGFibGUgKmRvdHNUYWJsZTsKKworICB1bnNpZ25lZCBpbnQgc2VyaWFsQmF1ZDsKKyAgU2VyaWFsUGFyaXR5IHNlcmlhbFBhcml0eTsKKworICBpbnQgKCpyZWFkUGFja2V0KSAoQnJhaWxsZURpc3BsYXkgKmJybCwgdW5zaWduZWQgY2hhciAqcGFja2V0LCBpbnQgc2l6ZSk7CisgIGludCAoKndyaXRlUGFja2V0KSAoQnJhaWxsZURpc3BsYXkgKmJybCwgY29uc3QgdW5zaWduZWQgY2hhciAqcGFja2V0LCBpbnQgbGVuZ3RoKTsKKworICBpbnQgKCpwcm9iZURldmljZSkgKEJyYWlsbGVEaXNwbGF5ICpicmwpOworICB2b2lkICgqcHJvY2Vzc1BhY2tldHMpIChCcmFpbGxlRGlzcGxheSAqYnJsKTsKKworICBpbnQgKCp3cml0ZUNlbGxzKSAoQnJhaWxsZURpc3BsYXkgKmJybCk7CisgIGludCAoKndyaXRlQ2VsbFJhbmdlKSAoQnJhaWxsZURpc3BsYXkgKmJybCwgdW5zaWduZWQgaW50IHN0YXJ0LCB1bnNpZ25lZCBpbnQgY291bnQpOworfSBQcm90b2NvbE9wZXJhdGlvbnM7CisKK3N0cnVjdCBCcmFpbGxlRGF0YVN0cnVjdCB7CisgIGNvbnN0IFByb3RvY29sT3BlcmF0aW9ucyAqcHJvdG9jb2w7CisKKyAgc3RydWN0IHsKKyAgICB1bnNpZ25lZCBjaGFyIHJvdXRpbmdLZXlzOworICB9IHBhY2tldFNpemU7Cit9OworCisvKiBJbnRlcm5hbCBSb3V0aW5lcyAqLworCitzdGF0aWMgdm9pZAorbG9nVGV4dEZpZWxkIChjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICphZGRyZXNzLCBpbnQgc2l6ZSkgeworICB3aGlsZSAoc2l6ZSA+IDApIHsKKyAgICBjb25zdCBjaGFyIGJ5dGUgPSBhZGRyZXNzW3NpemUgLSAxXTsKKworICAgIGlmIChieXRlICYmIChieXRlICE9ICcgJykpIGJyZWFrOworICAgIHNpemUgLT0gMTsKKyAgfQorCisgIGxvZ01lc3NhZ2UoTE9HX0lORk8sICIlczogJS4qcyIsIG5hbWUsIHNpemUsIGFkZHJlc3MpOworfQorCitzdGF0aWMgaW50CitzZXRHcm91cGVkS2V5ICh1bnNpZ25lZCBjaGFyICpzZXQsIEtleU51bWJlciBudW1iZXIsIGludCBwcmVzcykgeworICB1bnNpZ25lZCBjaGFyICpieXRlID0gJnNldFtudW1iZXIgLyA4XTsKKyAgdW5zaWduZWQgY2hhciBiaXQgPSAxIDw8IChudW1iZXIgJSA4KTsKKworICBpZiAoISgqYnl0ZSAmIGJpdCkgPT0gIXByZXNzKSByZXR1cm4gMDsKKworICBpZiAocHJlc3MpIHsKKyAgICAqYnl0ZSB8PSBiaXQ7CisgIH0gZWxzZSB7CisgICAgKmJ5dGUgJj0gfmJpdDsKKyAgfQorCisgIHJldHVybiAxOworfQorCitzdGF0aWMgdm9pZAorY2xlYXJLZXlHcm91cCAodW5zaWduZWQgY2hhciAqc2V0LCB1bnNpZ25lZCBjaGFyIGNvdW50KSB7CisgIG1lbXNldChzZXQsIDAsIEtFWV9HUk9VUF9TSVpFKGNvdW50KSk7Cit9CisKK3N0YXRpYyB2b2lkCityZXNldEtleUdyb3VwICh1bnNpZ25lZCBjaGFyICpzZXQsIHVuc2lnbmVkIGNoYXIgY291bnQsIEtleU51bWJlciBrZXkpIHsKKyAgY2xlYXJLZXlHcm91cChzZXQsIGNvdW50KTsKKyAgaWYgKGtleSA+IDApIHNldEdyb3VwZWRLZXkoc2V0LCBrZXktMSwgMSk7Cit9CisKK3N0YXRpYyB2b2lkCit1cGRhdGVLZXlHcm91cCAoCisgIEJyYWlsbGVEaXNwbGF5ICpicmwsCisgIHVuc2lnbmVkIGNoYXIgKm9sZCwgY29uc3QgdW5zaWduZWQgY2hhciAqbmV3LAorICBLZXlHcm91cCBncm91cCwgS2V5TnVtYmVyIGJhc2UsIHVuc2lnbmVkIGNoYXIgY291bnQsIGludCBzY2FsZWQKKykgeworICBLZXlOdW1iZXIgcHJlc3NUYWJsZVtjb3VudF07CisgIHVuc2lnbmVkIGNoYXIgcHJlc3NDb3VudCA9IDA7CisgIHVuc2lnbmVkIGNoYXIgb2Zmc2V0OworCisgIGZvciAob2Zmc2V0PTA7IG9mZnNldDxjb3VudDsgb2Zmc2V0Kz0xKSB7CisgICAgS2V5TnVtYmVyIG51bWJlciA9IGJhc2UgKyBvZmZzZXQ7CisgICAgaW50IHByZXNzID0gKG5ld1tvZmZzZXQgLyA4XSAmICgxIDw8IChvZmZzZXQgJSA4KSkpICE9IDA7CisKKyAgICBpZiAoc2V0R3JvdXBlZEtleShvbGQsIG51bWJlciwgcHJlc3MpKSB7CisgICAgICBpZiAoc2NhbGVkKSBudW1iZXIgPSByZXNjYWxlSW50ZWdlcihudW1iZXIsIGNvdW50LTEsIEJSTF9NU0tfQVJHKTsKKworICAgICAgaWYgKHByZXNzKSB7CisgICAgICAgIHByZXNzVGFibGVbcHJlc3NDb3VudCsrXSA9IG51bWJlcjsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIGVucXVldWVLZXlFdmVudChicmwsIGdyb3VwLCBudW1iZXIsIDApOworICAgICAgfQorICAgIH0KKyAgfQorCisgIHdoaWxlIChwcmVzc0NvdW50KSBlbnF1ZXVlS2V5RXZlbnQoYnJsLCBncm91cCwgcHJlc3NUYWJsZVstLXByZXNzQ291bnRdLCAxKTsKK30KKworc3RhdGljIHZvaWQKK3VwZGF0ZU5hdmlnYXRpb25LZXlzICgKKyAgQnJhaWxsZURpc3BsYXkgKmJybCwKKyAgY29uc3QgdW5zaWduZWQgY2hhciAqbmV3LCBLZXlOdW1iZXIgYmFzZSwgdW5zaWduZWQgY2hhciBjb3VudAorKSB7CisgIHVwZGF0ZUtleUdyb3VwKGJybCwga2V5c1N0YXRlLm5hdmlnYXRpb25LZXlzLCBuZXcsIEJNX0dSUF9OYXZpZ2F0aW9uS2V5cywgYmFzZSwgY291bnQsIDApOworfQorCitzdGF0aWMgdm9pZAordXBkYXRlRGlzcGxheUtleXMgKEJyYWlsbGVEaXNwbGF5ICpicmwsIHVuc2lnbmVkIGNoYXIgbmV3KSB7CisgIHVwZGF0ZU5hdmlnYXRpb25LZXlzKGJybCwgJm5ldywgQk1fS0VZX0RJU1BMQVksIEJNX0tFWVNfRElTUExBWSk7Cit9CisKK3N0YXRpYyB2b2lkCit1cGRhdGVFbnRyeUtleXMgKEJyYWlsbGVEaXNwbGF5ICpicmwsIHVuc2lnbmVkIGNoYXIgKm5ldykgeworICB1cGRhdGVOYXZpZ2F0aW9uS2V5cyhicmwsIG5ldywgQk1fS0VZX0VOVFJZLCBCTV9LRVlTX0VOVFJZKTsKK30KKworc3RhdGljIHZvaWQKK3VwZGF0ZUpveXN0aWNrIChCcmFpbGxlRGlzcGxheSAqYnJsLCB1bnNpZ25lZCBjaGFyICpuZXcpIHsKKyAgdXBkYXRlTmF2aWdhdGlvbktleXMoYnJsLCBuZXcsIEJNX0tFWV9KT1lTVElDSywgQk1fS0VZU19KT1lTVElDSyk7Cit9CisKK3N0YXRpYyB2b2lkCit1cGRhdGVSb3V0aW5nS2V5cyAoQnJhaWxsZURpc3BsYXkgKmJybCwgY29uc3QgdW5zaWduZWQgY2hhciAqbmV3LCB1bnNpZ25lZCBjaGFyIGNvdW50KSB7CisgIHVwZGF0ZUtleUdyb3VwKGJybCwga2V5c1N0YXRlLnJvdXRpbmdLZXlzLCBuZXcsIEJNX0dSUF9Sb3V0aW5nS2V5cywgMCwgY291bnQsIDApOworfQorCitzdGF0aWMgaW50Cit1cGRhdGVDZWxscyAoQnJhaWxsZURpc3BsYXkgKmJybCkgeworICBpZiAoY2VsbHNVcGRhdGVkKSB7CisgICAgaWYgKCFicmwtPmRhdGEtPnByb3RvY29sLT53cml0ZUNlbGxzKGJybCkpIHJldHVybiAwOworICAgIGNlbGxzVXBkYXRlZCA9IDA7CisgIH0KKyAgcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQKK3VwZGF0ZUNlbGxSYW5nZSAoQnJhaWxsZURpc3BsYXkgKmJybCwgdW5zaWduZWQgaW50IHN0YXJ0LCB1bnNpZ25lZCBpbnQgY291bnQpIHsKKyAgaWYgKGNvdW50KSB7CisgICAgdHJhbnNsYXRlT3V0cHV0Q2VsbHMoJmV4dGVybmFsQ2VsbHNbc3RhcnRdLCAmaW50ZXJuYWxDZWxsc1tzdGFydF0sIGNvdW50KTsKKyAgICBjZWxsc1VwZGF0ZWQgPSAxOworICAgIGlmICghYnJsLT5kYXRhLT5wcm90b2NvbC0+d3JpdGVDZWxsUmFuZ2UoYnJsLCBzdGFydCwgY291bnQpKSByZXR1cm4gMDsKKyAgfQorCisgIHJldHVybiAxOworfQorCitzdGF0aWMgaW50CitjbGVhckNlbGxSYW5nZSAoQnJhaWxsZURpc3BsYXkgKmJybCwgdW5zaWduZWQgaW50IHN0YXJ0LCB1bnNpZ25lZCBpbnQgY291bnQpIHsKKyAgbWVtc2V0KCZpbnRlcm5hbENlbGxzW3N0YXJ0XSwgMCwgY291bnQpOworICByZXR1cm4gdXBkYXRlQ2VsbFJhbmdlKGJybCwgc3RhcnQsIGNvdW50KTsKK30KKworc3RhdGljIGludAorcHV0Q2VsbHMgKEJyYWlsbGVEaXNwbGF5ICpicmwsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmNlbGxzLCB1bnNpZ25lZCBpbnQgc3RhcnQsIHVuc2lnbmVkIGludCBjb3VudCkgeworICB1bnNpZ25lZCBpbnQgZnJvbTsKKyAgdW5zaWduZWQgaW50IHRvOworCisgIGlmIChjZWxsc0hhdmVDaGFuZ2VkKCZpbnRlcm5hbENlbGxzW3N0YXJ0XSwgY2VsbHMsIGNvdW50LCAmZnJvbSwgJnRvLCBOVUxMKSkgeworICAgIGlmICghdXBkYXRlQ2VsbFJhbmdlKGJybCwgc3RhcnQrZnJvbSwgdG8tZnJvbSkpIHJldHVybiAwOworICB9CisKKyAgcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQKK2lzQWNjZXB0YWJsZUNlbGxDb3VudCAoaW50IGNvdW50KSB7CisgIHJldHVybiAoY291bnQgPiAwKSAmJiAoY291bnQgPD0gTUFYSU1VTV9DRUxMX0NPVU5UKTsKK30KKworc3RhdGljIHZvaWQKK2xvZ1VuZXhwZWN0ZWRDZWxsQ291bnQgKGludCBjb3VudCkgeworICBsb2dNZXNzYWdlKExPR19ERUJVRywgInVuZXhwZWN0ZWQgY2VsbCBjb3VudDogJWQiLCBjb3VudCk7Cit9CisKK3N0YXRpYyB2b2lkCitsb2dDZWxsQ291bnQgKEJyYWlsbGVEaXNwbGF5ICpicmwpIHsKKyAgc3dpdGNoICgoYnJsLT50ZXh0Q29sdW1ucyA9IGNlbGxDb3VudCkpIHsKKyAgICBjYXNlIDQ0OgorICAgIGNhc2UgNjg6CisgICAgY2FzZSA4NDoKKyAgICAgIGJybC0+dGV4dENvbHVtbnMgLT0gNDsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSA1NjoKKyAgICAgIGJybC0+dGV4dENvbHVtbnMgLT0gMTY7CisgICAgICBicmVhazsKKyAgfQorICBicmwtPnRleHRSb3dzID0gMTsKKyAgYnJsLT5zdGF0dXNSb3dzID0gKGJybC0+c3RhdHVzQ29sdW1ucyA9IGNlbGxDb3VudCAtIGJybC0+dGV4dENvbHVtbnMpPyAxOiAwOworCisgIGxvZ01lc3NhZ2UoTE9HX0lORk8sICJDZWxsIENvdW50OiAlZCAoJWQgdGV4dCwgJWQgc3RhdHVzKSIsCisgICAgICAgICAgICAgY2VsbENvdW50LCBicmwtPnRleHRDb2x1bW5zLCBicmwtPnN0YXR1c0NvbHVtbnMpOworfQorCitzdGF0aWMgaW50CitjaGFuZ2VDZWxsQ291bnQgKEJyYWlsbGVEaXNwbGF5ICpicmwsIGludCBjb3VudCkgeworICBpbnQgb2sgPSAxOworCisgIGlmIChjb3VudCAhPSBjZWxsQ291bnQpIHsKKyAgICBpZiAoY291bnQgPiBjZWxsQ291bnQpIHsKKyAgICAgIGlmICghY2xlYXJDZWxsUmFuZ2UoYnJsLCBjZWxsQ291bnQsIGNvdW50LWNlbGxDb3VudCkpIG9rID0gMDsKKworICAgICAgeworICAgICAgICBpbnQgbnVtYmVyOworICAgICAgICBmb3IgKG51bWJlcj1jZWxsQ291bnQ7IG51bWJlcjxjb3VudDsgbnVtYmVyKz0xKSB7CisgICAgICAgICAgc2V0R3JvdXBlZEtleShrZXlzU3RhdGUucm91dGluZ0tleXMsIG51bWJlciwgMCk7CisgICAgICAgICAgc2V0R3JvdXBlZEtleShrZXlzU3RhdGUuaG9yaXpvbnRhbFNlbnNvcnMsIG51bWJlciwgMCk7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9CisKKyAgICBjZWxsQ291bnQgPSBjb3VudDsKKyAgICBsb2dDZWxsQ291bnQoYnJsKTsKKyAgICBicmwtPnJlc2l6ZVJlcXVpcmVkID0gMTsKKyAgfQorCisgIHJldHVybiBvazsKK30KKworLyogQmF1bSBQcm90b2NvbCAqLworCit0eXBlZGVmIHVuc2lnbmVkIGNoYXIgQmF1bUludGVnZXJbMl07CisjZGVmaW5lIE1BS0VfQkFVTV9JTlRFR0VSX0ZJUlNUKGkpICgoaSkgJiAwWEZGKQorI2RlZmluZSBNQUtFX0JBVU1fSU5URUdFUl9TRUNPTkQoaSkgKCgoaSkgPj4gOCkgJiAwWEZGKQorI2RlZmluZSBNQUtFX0JBVU1fSU5URUdFUihpKSBNQUtFX0JBVU1fSU5URUdFUl9GSVJTVCgoaSkpLCBNQUtFX0JBVU1fSU5URUdFUl9TRUNPTkQoKGkpKQorCitzdGF0aWMgaW5saW5lIHVpbnQxNl90CitnZXRCYXVtSW50ZWdlciAoY29uc3QgQmF1bUludGVnZXIgaW50ZWdlcikgeworICByZXR1cm4gKGludGVnZXJbMV0gPDwgOCkgfCBpbnRlZ2VyWzBdOworfQorCit0eXBlZGVmIGVudW0geworICBCQVVNX1JFUV9EaXNwbGF5RGF0YSAgICAgICAgICAgICA9IDBYMDEsCisgIEJBVU1fUkVRX0dldFZlcnNpb25OdW1iZXIgICAgICAgID0gMFgwNSwKKyAgQkFVTV9SRVFfR2V0S2V5cyAgICAgICAgICAgICAgICAgPSAwWDA4LAorICBCQVVNX1JFUV9HZXRNb2RlICAgICAgICAgICAgICAgICA9IDBYMTEsCisgIEJBVU1fUkVRX1NldE1vZGUgICAgICAgICAgICAgICAgID0gMFgxMiwKKyAgQkFVTV9SRVFfU2V0UHJvdG9jb2xTdGF0ZSAgICAgICAgPSAwWDE1LAorICBCQVVNX1JFUV9TZXRDb21tdW5pY2F0aW9uQ2hhbm5lbCA9IDBYMTYsCisgIEJBVU1fUkVRX0NhdXNlUG93ZXJkb3duICAgICAgICAgID0gMFgxNywKKyAgQkFVTV9SRVFfTW9kdWxlUmVnaXN0cmF0aW9uICAgICAgPSAwWDUwLAorICBCQVVNX1JFUV9EYXRhUmVnaXN0ZXJzICAgICAgICAgICA9IDBYNTEsCisgIEJBVU1fUkVRX1NlcnZpY2VSZWdpc3RlcnMgICAgICAgID0gMFg1MiwKKyAgQkFVTV9SRVFfR2V0RGV2aWNlSWRlbnRpdHkgICAgICAgPSAwWDg0LAorICBCQVVNX1JFUV9HZXRTZXJpYWxOdW1iZXIgICAgICAgICA9IDBYOEEsCisgIEJBVU1fUkVRX0dldEJsdWV0b290aE5hbWUgICAgICAgID0gMFg4QywKKyAgQkFVTV9SRVFfU2V0Qmx1ZXRvb3RoTmFtZSAgICAgICAgPSAwWDhELAorICBCQVVNX1JFUV9TZXRCbHVldG9vdGhQaW4gICAgICAgICA9IDBYOEUKK30gQmF1bVJlcXVlc3RDb2RlOworCit0eXBlZGVmIGVudW0geworICBCQVVNX1JTUF9DZWxsQ291bnQgICAgICAgICAgICA9IDBYMDEsCisgIEJBVU1fUlNQX1ZlcnNpb25OdW1iZXIgICAgICAgID0gMFgwNSwKKyAgQkFVTV9SU1BfTW9kZVNldHRpbmcgICAgICAgICAgPSAwWDExLAorICBCQVVNX1JTUF9Db21tdW5pY2F0aW9uQ2hhbm5lbCA9IDBYMTYsCisgIEJBVU1fUlNQX1Bvd2VyZG93blNpZ25hbCAgICAgID0gMFgxNywKKyAgQkFVTV9SU1BfSG9yaXpvbnRhbFNlbnNvcnMgICAgPSAwWDIwLAorICBCQVVNX1JTUF9WZXJ0aWNhbFNlbnNvcnMgICAgICA9IDBYMjEsCisgIEJBVU1fUlNQX1JvdXRpbmdLZXlzICAgICAgICAgID0gMFgyMiwKKyAgQkFVTV9SU1BfU3dpdGNoZXMgICAgICAgICAgICAgPSAwWDIzLAorICBCQVVNX1JTUF9EaXNwbGF5S2V5cyAgICAgICAgICA9IDBYMjQsCisgIEJBVU1fUlNQX0hvcml6b250YWxTZW5zb3IgICAgID0gMFgyNSwKKyAgQkFVTV9SU1BfVmVydGljYWxTZW5zb3IgICAgICAgPSAwWDI2LAorICBCQVVNX1JTUF9Sb3V0aW5nS2V5ICAgICAgICAgICA9IDBYMjcsCisgIEJBVU1fUlNQX0Zyb250NiAgICAgICAgICAgICAgID0gMFgyOCwKKyAgQkFVTV9SU1BfQmFjazYgICAgICAgICAgICAgICAgPSAwWDI5LAorICBCQVVNX1JTUF9Db21tYW5kS2V5cyAgICAgICAgICA9IDBYMkIsCisgIEJBVU1fUlNQX0Zyb250MTAgICAgICAgICAgICAgID0gMFgyQywKKyAgQkFVTV9SU1BfQmFjazEwICAgICAgICAgICAgICAgPSAwWDJELAorICBCQVVNX1JTUF9FbnRyeUtleXMgICAgICAgICAgICA9IDBYMzMsCisgIEJBVU1fUlNQX0pveXN0aWNrICAgICAgICAgICAgID0gMFgzNCwKKyAgQkFVTV9SU1BfRXJyb3JDb2RlICAgICAgICAgICAgPSAwWDQwLAorICBCQVVNX1JTUF9Nb2R1bGVSZWdpc3RyYXRpb24gICA9IDBYNTAsCisgIEJBVU1fUlNQX0RhdGFSZWdpc3RlcnMgICAgICAgID0gMFg1MSwKKyAgQkFVTV9SU1BfU2VydmljZVJlZ2lzdGVycyAgICAgPSAwWDUyLAorICBCQVVNX1JTUF9EZXZpY2VJZGVudGl0eSAgICAgICA9IDBYODQsCisgIEJBVU1fUlNQX1NlcmlhbE51bWJlciAgICAgICAgID0gMFg4QSwKKyAgQkFVTV9SU1BfQmx1ZXRvb3RoTmFtZSAgICAgICAgPSAwWDhDLAorICBCQVVNX1JTUF9OTFNfWk1YX0JEICAgICAgICAgICA9IDBYQkQsCisgIEJBVU1fUlNQX05MU19aTVhfQkUgICAgICAgICAgID0gMFhCRSwKKyAgQkFVTV9SU1BfTkxTX1pNWF9CRiAgICAgICAgICAgPSAwWEJGLAorfSBCYXVtUmVzcG9uc2VDb2RlOworCit0eXBlZGVmIGVudW0geworICBCQVVNX01PREVfS2V5R3JvdXBDb21wcmVzc2VkICAgICAgICAgID0gMFgwMSwKKyAgQkFVTV9NT0RFX0hvcml6b250YWxTZW5zb3JzRW5hYmxlZCAgICA9IDBYMDYsCisgIEJBVU1fTU9ERV9MZWZ0U2Vuc29yc0VuYWJsZWQgID0gMFgwNywKKyAgQkFVTV9NT0RFX1JvdXRpbmdLZXlzRW5hYmxlZCAgICAgICAgICA9IDBYMDgsCisgIEJBVU1fTU9ERV9SaWdodFNlbnNvcnNFbmFibGVkID0gMFgwOSwKKyAgQkFVTV9NT0RFX0JhY2tLZXlzRW5hYmxlZCAgICAgICAgICAgICA9IDBYMEEsCisgIEJBVU1fTU9ERV9EaXNwbGF5Um90YXRlZCAgICAgICAgICAgICAgPSAwWDEwLAorICBCQVVNX01PREVfRGlzcGxheUVuYWJsZWQgICAgICAgICAgICAgID0gMFgyMCwKKyAgQkFVTV9NT0RFX1Bvd2VyZG93bkVuYWJsZWQgICAgICAgICAgICA9IDBYMjEsCisgIEJBVU1fTU9ERV9Qb3dlcmRvd25UaW1lICAgICAgICAgICAgICAgPSAwWDIyLAorICBCQVVNX01PREVfQmx1ZXRvb3RoRW5hYmxlZCAgICAgICAgICAgID0gMFgyMywKKyAgQkFVTV9NT0RFX1VzYkNoYXJnZSAgICAgICAgICAgICAgICAgICA9IDBYMjQKK30gQmF1bU1vZGU7CisKK3R5cGVkZWYgZW51bSB7CisgIEJBVU1fUERUXzVNaW51dGVzICA9IDEsCisgIEJBVU1fUERUXzEwTWludXRlcyA9IDIsCisgIEJBVU1fUERUXzFIb3VyICAgICA9IDMsCisgIEJBVU1fUERUXzJIb3VycyAgICA9IDQKK30gQmF1bVBvd2VyZG93blRpbWU7CisKK3R5cGVkZWYgZW51bSB7CisgIEJBVU1fUERSX1Byb3RvY29sUmVxdWVzdGVkID0gMFgwMSwKKyAgQkFVTV9QRFJfUG93ZXJTd2l0Y2ggICAgICAgPSAwWDAyLAorICBCQVVNX1BEUl9BdXRvUG93ZXJPZmYgICAgICA9IDBYMDQsCisgIEJBVU1fUERSX0JhdHRlcnlMb3cgICAgICAgID0gMFgwOCwKKyAgQkFVTV9QRFJfQ2hhcmdpbmcgICAgICAgICAgPSAwWDgwCit9IEJhdW1Qb3dlcmRvd25SZWFzb247CisKK3R5cGVkZWYgZW51bSB7CisgIEJBVU1fU1dUX0Rpc2FibGVTZW5zb3JzICA9IDBYMDEsCisgIEJBVU1fU1dUX1NjYWxlZFZlcnRpY2FsICA9IDBYMDIsCisgIEJBVU1fU1dUX1Nob3dTZW5zb3IgICAgICA9IDBYNDAsCisgIEJBVU1fU1dUX0JyYWlsbGVLZXlib2FyZCA9IDBYODAKK30gQmF1bVN3aXRjaDsKKwordHlwZWRlZiBlbnVtIHsKKyAgQkFVTV9FUlJfQmx1ZXRvb3RoU3VwcG9ydCAgICAgICA9IDBYMEEsCisgIEJBVU1fRVJSX1RyYW5zbWl0T3ZlcnJ1biAgICAgICAgPSAwWDEwLAorICBCQVVNX0VSUl9SZWNlaXZlT3ZlcnJ1biAgICAgICAgID0gMFgxMSwKKyAgQkFVTV9FUlJfVHJhbnNtaXRUaW1lb3V0ICAgICAgICA9IDBYMTIsCisgIEJBVU1fRVJSX1JlY2VpdmVUaW1lb3V0ICAgICAgICAgPSAwWDEzLAorICBCQVVNX0VSUl9QYWNrZXRUeXBlICAgICAgICAgICAgID0gMFgxNCwKKyAgQkFVTV9FUlJfUGFja2V0Q2hlY2tzdW0gICAgICAgICA9IDBYMTUsCisgIEJBVU1fRVJSX1BhY2tldERhdGEgICAgICAgICAgICAgPSAwWDE2LAorICBCQVVNX0VSUl9UZXN0ICAgICAgICAgICAgICAgICAgID0gMFgxOCwKKyAgQkFVTV9FUlJfRmxhc2hXcml0ZSAgICAgICAgICAgICA9IDBYMTksCisgIEJBVU1fRVJSX0NvbW11bmljYXRpb25DaGFubmVsICAgPSAwWDFGLAorICBCQVVNX0VSUl9TZXJpYWxOdW1iZXIgICAgICAgICAgID0gMFgyMCwKKyAgQkFVTV9FUlJfU2VyaWFsUGFyaXR5ICAgICAgICAgICA9IDBYMjEsCisgIEJBVU1fRVJSX1NlcmlhbE92ZXJydW4gICAgICAgICAgPSAwWDIyLAorICBCQVVNX0VSUl9TZXJpYWxGcmFtZSAgICAgICAgICAgID0gMFgyNCwKKyAgQkFVTV9FUlJfTG9jYWxpemF0aW9uSWRlbnRpZmllciA9IDBYMjUsCisgIEJBVU1fRVJSX0xvY2FsaXphdGlvbkluZGV4ICAgICAgPSAwWDI2LAorICBCQVVNX0VSUl9MYW5ndWFnZUlkZW50aWZpZXIgICAgID0gMFgyNywKKyAgQkFVTV9FUlJfTGFuZ3VhZ2VJbmRleCAgICAgICAgICA9IDBYMjgsCisgIEJBVU1fRVJSX0JyYWlsbGVUYWJsZUlkZW50aWZpZXIgPSAwWDI5LAorICBCQVVNX0VSUl9CcmFpbGxlVGFibGVJbmRleCAgICAgID0gMFgyQQorfSBCYXVtRXJyb3I7CisKKyNkZWZpbmUgQkFVTV9MRU5HVEhfRGV2aWNlSWRlbnRpdHkgMTgKKyNkZWZpbmUgQkFVTV9MRU5HVEhfU2VyaWFsTnVtYmVyIDgKKyNkZWZpbmUgQkFVTV9MRU5HVEhfQmx1ZXRvb3RoTmFtZSAxNAorCit0eXBlZGVmIGVudW0geworICBCQVVNX01SQ19BY2tub3dsZWRnZSA9IDBYMDEsCisgIEJBVU1fTVJDX1F1ZXJ5ICAgICAgID0gMFgwNAorfSBCYXVtTW9kdWxlUmVnaXN0cmF0aW9uQ29tbWFuZDsKKwordHlwZWRlZiBlbnVtIHsKKyAgQkFVTV9NUkVfQWRkaXRpb24gID0gMSwKKyAgQkFVTV9NUkVfUmVtb3ZhbCAgID0gMiwKKyAgQkFVTV9NUkVfUmVqZWN0aW9uID0gMworfSBCYXVtTW9kdWxlUmVnaXN0cmF0aW9uRXZlbnQ7CisKK3R5cGVkZWYgZW51bSB7CisgIEJBVU1fRFJDX1dyaXRlID0gMFgwMCwKKyAgQkFVTV9EUkNfUmVhZCAgPSAwWDAxLAorICBCQVVNX0RSQ19SZXNldCA9IDBYODAKK30gQmF1bURhdGFSZWdpc3RlcnNDb21tYW5kOworCit0eXBlZGVmIGVudW0geworICBCQVVNX0RSRl9XaGVlbHNDaGFuZ2VkICA9IDBYMDEsCisgIEJBVU1fRFJGX0J1dHRvbnNDaGFuZ2VkID0gMFgwMiwKKyAgQkFVTV9EUkZfS2V5c0NoYW5nZWQgICAgPSAwWDA0LAorICBCQVVNX0RSRl9Qb3RzQ2hhbmdlZCAgICA9IDBYMDQsCisgIEJBVU1fRFJGX1NlbnNvcnNDaGFuZ2VkID0gMFgwOCwKKyAgQkFVTV9EUkZfRXJyb3JPY2N1cnJlZCAgPSAwWDgwCit9IEJhdW1EYXRhUmVnaXN0ZXJzRmxhZzsKKwordHlwZWRlZiBlbnVtIHsKKyAgQkFVTV9EUkVfV2hlZWxzTm90Q29ubmVjdGVkID0gMFgwMSwKKyAgQkFVTV9EUkVfV2hlZWxzTm90QWRqdXN0ZWQgID0gMFgwMiwKKyAgQkFVTV9EUkVfS2V5QnVmZmVyRnVsbCAgICAgID0gMFgwNCwKKyAgQkFVTV9EUkVfU2VyaWFsRXJyb3IgICAgICAgID0gMFg4MAorfSBCYXVtRGF0YVJlZ2lzdGVyc0Vycm9yOworCit0eXBlZGVmIGVudW0geworICBCQVVNX1NSQ19Xcml0ZSA9IDBYMDAsCisgIEJBVU1fU1JDX1JlYWQgID0gMFgwMQorfSBCYXVtU2VydmljZVJlZ2lzdGVyc0NvbW1hbmQ7CisKK3R5cGVkZWYgdW5pb24geworICB1bnNpZ25lZCBjaGFyIGJ5dGVzWzIgKyAwWEZGXTsKKworICBzdHJ1Y3QgeworICAgIHVuc2lnbmVkIGNoYXIgY29kZTsKKworICAgIHVuaW9uIHsKKyAgICAgIHVuc2lnbmVkIGNoYXIgY2VsbENvdW50OworICAgICAgdW5zaWduZWQgY2hhciB2ZXJzaW9uTnVtYmVyOworCisgICAgICBzdHJ1Y3QgeworICAgICAgICB1bnNpZ25lZCBjaGFyIGlkZW50aWZpZXI7CisgICAgICAgIHVuc2lnbmVkIGNoYXIgc2V0dGluZzsKKyAgICAgIH0gUEFDS0VEIG1vZGU7CisKKyAgICAgIHVuc2lnbmVkIGNoYXIgY29tbXVuaWNhdGlvbkNoYW5uZWw7CisgICAgICB1bnNpZ25lZCBjaGFyIHBvd2VyZG93blJlYXNvbjsKKyAgICAgIHVuc2lnbmVkIGNoYXIgaG9yaXpvbnRhbFNlbnNvcnNbS0VZX0dST1VQX1NJWkUoTUFYSU1VTV9DRUxMX0NPVU5UKV07CisKKyAgICAgIHN0cnVjdCB7CisgICAgICAgIHVuc2lnbmVkIGNoYXIgbGVmdFtLRVlfR1JPVVBfU0laRShWRVJUSUNBTF9TRU5TT1JfQ09VTlQpXTsKKyAgICAgICAgdW5zaWduZWQgY2hhciByaWdodFtLRVlfR1JPVVBfU0laRShWRVJUSUNBTF9TRU5TT1JfQ09VTlQpXTsKKyAgICAgIH0gUEFDS0VEIHZlcnRpY2FsU2Vuc29yczsKKworICAgICAgdW5zaWduZWQgY2hhciByb3V0aW5nS2V5c1tLRVlfR1JPVVBfU0laRShNQVhJTVVNX0NFTExfQ09VTlQpXTsKKyAgICAgIHVuc2lnbmVkIGNoYXIgc3dpdGNoZXM7CisgICAgICB1bnNpZ25lZCBjaGFyIGRpc3BsYXlLZXlzOworICAgICAgdW5zaWduZWQgY2hhciBob3Jpem9udGFsU2Vuc29yOworCisgICAgICB1bmlvbiB7CisgICAgICAgIHVuc2lnbmVkIGNoYXIgbGVmdDsKKyAgICAgICAgdW5zaWduZWQgY2hhciByaWdodDsKKyAgICAgIH0gUEFDS0VEIHZlcnRpY2FsU2Vuc29yOworCisgICAgICB1bnNpZ25lZCBjaGFyIHJvdXRpbmdLZXk7CisgICAgICB1bnNpZ25lZCBjaGFyIGZyb250NlsxXTsKKyAgICAgIHVuc2lnbmVkIGNoYXIgYmFjazZbMV07CisgICAgICB1bnNpZ25lZCBjaGFyIGNvbW1hbmRLZXlzWzFdOworICAgICAgdW5zaWduZWQgY2hhciBmcm9udDEwWzJdOworICAgICAgdW5zaWduZWQgY2hhciBiYWNrMTBbMl07CisgICAgICB1bnNpZ25lZCBjaGFyIGVudHJ5S2V5c1syXTsKKyAgICAgIHVuc2lnbmVkIGNoYXIgam95c3RpY2tbMV07CisgICAgICB1bnNpZ25lZCBjaGFyIGVycm9yQ29kZTsKKworICAgICAgc3RydWN0IHsKKyAgICAgICAgdW5zaWduZWQgY2hhciBsZW5ndGg7CisgICAgICAgIEJhdW1JbnRlZ2VyIG1vZHVsZUlkZW50aWZpZXI7CisgICAgICAgIEJhdW1JbnRlZ2VyIHNlcmlhbE51bWJlcjsKKworICAgICAgICB1bmlvbiB7CisgICAgICAgICAgc3RydWN0IHsKKyAgICAgICAgICAgIEJhdW1JbnRlZ2VyIGhhcmR3YXJlVmVyc2lvbjsKKyAgICAgICAgICAgIEJhdW1JbnRlZ2VyIGZpcm13YXJlVmVyc2lvbjsKKyAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgZXZlbnQ7CisgICAgICAgICAgfSBQQUNLRUQgcmVnaXN0cmF0aW9uOworCisgICAgICAgICAgdW5pb24geworICAgICAgICAgICAgc3RydWN0IHsKKyAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciBmbGFnczsKKyAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciBlcnJvcnM7CisgICAgICAgICAgICAgIHNpZ25lZCBjaGFyIHdoZWVsc1s0XTsKKyAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciBidXR0b25zOworICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIGtleXM7CisgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgc2Vuc29yc1tLRVlfR1JPVVBfU0laRSg4MCldOworICAgICAgICAgICAgfSBQQUNLRUQgZGlzcGxheTgwOworCisgICAgICAgICAgICBzdHJ1Y3QgeworICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIGZsYWdzOworICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIGVycm9yczsKKyAgICAgICAgICAgICAgc2lnbmVkIGNoYXIgd2hlZWxzWzNdOworICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIGJ1dHRvbnM7CisgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIga2V5czsKKyAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciBzZW5zb3JzW0tFWV9HUk9VUF9TSVpFKDY0KV07CisgICAgICAgICAgICB9IFBBQ0tFRCBkaXNwbGF5NjQ7CisKKyAgICAgICAgICAgIHN0cnVjdCB7CisgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgZmxhZ3M7CisgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgZXJyb3JzOworICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIGJ1dHRvbnM7CisgICAgICAgICAgICB9IFBBQ0tFRCBzdGF0dXM7CisKKyAgICAgICAgICAgIHN0cnVjdCB7CisgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgZmxhZ3M7CisgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgZXJyb3JzOworICAgICAgICAgICAgICBzaWduZWQgY2hhciB3aGVlbDsKKyAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciBidXR0b25zOworICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIGtleXBhZFsyXTsKKyAgICAgICAgICAgIH0gUEFDS0VEIHBob25lOworCisgICAgICAgICAgICBzdHJ1Y3QgeworICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIGZsYWdzOworICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIGVycm9yczsKKyAgICAgICAgICAgICAgc2lnbmVkIGNoYXIgd2hlZWw7CisgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIga2V5czsKKyAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciBwb3RzWzZdOworICAgICAgICAgICAgfSBQQUNLRUQgYXVkaW87CisKKyAgICAgICAgICAgIHN0cnVjdCB7CisgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgZmxhZ3M7CisgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgZXJyb3JzOworICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIGJ1dHRvbnM7CisgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgY3Vyc29yOworICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIGtleXM7CisgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgcG90c1s0XTsKKyAgICAgICAgICAgIH0gUEFDS0VEIHZvaWNlOworICAgICAgICAgIH0gcmVnaXN0ZXJzOworICAgICAgICB9IGRhdGE7CisgICAgICB9IFBBQ0tFRCBtb2R1bGFyOworCisgICAgICBjaGFyIGRldmljZUlkZW50aXR5W0JBVU1fTEVOR1RIX0RldmljZUlkZW50aXR5XTsKKyAgICAgIGNoYXIgc2VyaWFsTnVtYmVyW0JBVU1fTEVOR1RIX1NlcmlhbE51bWJlcl07CisgICAgICBjaGFyIGJsdWV0b290aE5hbWVbQkFVTV9MRU5HVEhfQmx1ZXRvb3RoTmFtZV07CisgICAgfSBQQUNLRUQgdmFsdWVzOworICB9IFBBQ0tFRCBkYXRhOworfSBQQUNLRUQgQmF1bVJlc3BvbnNlUGFja2V0OworCit0eXBlZGVmIGVudW0geworICBCQVVNX0RFVklDRV9EZWZhdWx0ID0gMCwKKworICBCQVVNX0RFVklDRV9SZWZyZXNoYWJyYWlsbGUsCisgIEJBVU1fREVWSUNFX09yYml0LAorICBCQVVNX0RFVklDRV9OTFNfWm9vbWF4LAorICBCQVVNX0RFVklDRV9CMkcsCisKKyAgQkFVTV9ERVZJQ0VfQ29ubnksCisgIEJBVU1fREVWSUNFX1BvY2tldFZhcmlvLAorICBCQVVNX0RFVklDRV9Qcm9udG8sCisgIEJBVU1fREVWSUNFX1N1cGVyVmFyaW8sCisgIEJBVU1fREVWSUNFX1ZhcmlvQ29ubmVjdCwKKyAgQkFVTV9ERVZJQ0VfVmFyaW9VbHRyYSwKKworICBCQVVNX0RFVklDRV9JbmthLAorICBCQVVNX0RFVklDRV9ETTgwUCwKKyAgQkFVTV9ERVZJQ0VfVmFyaW80MCwKKyAgQkFVTV9ERVZJQ0VfVmFyaW84MCwKKyAgQkFVTV9ERVZJQ0VfTW9kdWxhcgorfSBCYXVtRGV2aWNlVHlwZTsKKwordHlwZWRlZiBzdHJ1Y3QgeworICBjb25zdCBjaGFyICpzdHJpbmc7CisgIEJhdW1EZXZpY2VUeXBlIHR5cGU7Cit9IEJhdW1EZXZpY2VJZGVudGl0eUVudHJ5OworCitzdGF0aWMgY29uc3QgQmF1bURldmljZUlkZW50aXR5RW50cnkgYmF1bURldmljZUlkZW50aXR5VGFibGVbXSA9IHsKKyAgeyAuc3RyaW5nID0gIlJlZnJlc2hhYnJhaWxsZSIsCisgICAgLnR5cGUgPSBCQVVNX0RFVklDRV9SZWZyZXNoYWJyYWlsbGUKKyAgfSwKKworICB7IC5zdHJpbmcgPSAiT3JiaXQiLAorICAgIC50eXBlID0gQkFVTV9ERVZJQ0VfT3JiaXQKKyAgfSwKKworICB7IC5zdHJpbmcgPSAiTkxTIGVSZWFkZXIgWm9vbWF4IiwKKyAgICAudHlwZSA9IEJBVU1fREVWSUNFX05MU19ab29tYXgKKyAgfSwKKworICB7IC5zdHJpbmcgPSAiQ29ubnkgKE5CUCBCMkcpIiwKKyAgICAudHlwZSA9IEJBVU1fREVWSUNFX0IyRworICB9LAorCisgIHsgLnN0cmluZyA9ICJCcmFpbGxlQ29ubmVjdCIsCisgICAgLnR5cGUgPSBCQVVNX0RFVklDRV9WYXJpb0Nvbm5lY3QKKyAgfSwKKworICB7IC5zdHJpbmcgPSAiQnJhaWxsaWFudCIsCisgICAgLnR5cGUgPSBCQVVNX0RFVklDRV9TdXBlclZhcmlvCisgIH0sCisKKyAgeyAuc3RyaW5nID0gIkNvbm55IiwKKyAgICAudHlwZSA9IEJBVU1fREVWSUNFX0Nvbm55CisgIH0sCisKKyAgeyAuc3RyaW5nID0gIlBvY2tldFZhcmlvIiwKKyAgICAudHlwZSA9IEJBVU1fREVWSUNFX1BvY2tldFZhcmlvCisgIH0sCisKKyAgeyAuc3RyaW5nID0gIlByb250byIsCisgICAgLnR5cGUgPSBCQVVNX0RFVklDRV9Qcm9udG8KKyAgfSwKKworICB7IC5zdHJpbmcgPSAiU3VwZXJWYXJpbyIsCisgICAgLnR5cGUgPSBCQVVNX0RFVklDRV9TdXBlclZhcmlvCisgIH0sCisKKyAgeyAuc3RyaW5nID0gIlNWYXJpbyIsCisgICAgLnR5cGUgPSBCQVVNX0RFVklDRV9TdXBlclZhcmlvCisgIH0sCisKKyAgeyAuc3RyaW5nID0gIlZhcmlvIDQwIiwKKyAgICAudHlwZSA9IEJBVU1fREVWSUNFX1ZhcmlvNDAKKyAgfSwKKworICB7IC5zdHJpbmcgPSAiVmFyaW9Db25uZWN0IiwKKyAgICAudHlwZSA9IEJBVU1fREVWSUNFX1ZhcmlvQ29ubmVjdAorICB9LAorCisgIHsgLnN0cmluZyA9ICJWYXJpb1VsdHJhIiwKKyAgICAudHlwZSA9IEJBVU1fREVWSUNFX1ZhcmlvVWx0cmEKKyAgfSwKK307CisKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGJhdW1EZXZpY2VJZGVudGl0eUNvdW50ID0gQVJSQVlfQ09VTlQoYmF1bURldmljZUlkZW50aXR5VGFibGUpOworc3RhdGljIEJhdW1EZXZpY2VUeXBlIGJhdW1EZXZpY2VUeXBlOworCitzdGF0aWMgdm9pZAorc2V0QmF1bURldmljZVR5cGUgKGNvbnN0IGNoYXIgKmlkZW50aXR5LCBzaXplX3Qgc2l6ZSkgeworICBjb25zdCBCYXVtRGV2aWNlSWRlbnRpdHlFbnRyeSAqYmRpID0gYmF1bURldmljZUlkZW50aXR5VGFibGU7CisgIGNvbnN0IEJhdW1EZXZpY2VJZGVudGl0eUVudHJ5ICplbmQgPSBiZGkgKyBiYXVtRGV2aWNlSWRlbnRpdHlDb3VudDsKKworICB3aGlsZSAoYmRpIDwgZW5kKSB7CisgICAgc2l6ZV90IGxlbmd0aCA9IHN0cmxlbihiZGktPnN0cmluZyk7CisgICAgY29uc3QgY2hhciAqZnJvbSA9IGlkZW50aXR5OworICAgIGNvbnN0IGNoYXIgKnRvID0gZnJvbSArIHNpemUgLSBsZW5ndGg7CisKKyAgICB3aGlsZSAoZnJvbSA8PSB0bykgeworICAgICAgaWYgKCpmcm9tID09ICpiZGktPnN0cmluZykgeworICAgICAgICBpZiAobWVtY21wKGZyb20sIGJkaS0+c3RyaW5nLCBsZW5ndGgpID09IDApIHsKKyAgICAgICAgICBiYXVtRGV2aWNlVHlwZSA9IGJkaS0+dHlwZTsKKyAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgIH0KKworICAgICAgZnJvbSArPSAxOworICAgIH0KKworICAgIGJkaSArPSAxOworICB9Cit9CisKK3R5cGVkZWYgZW51bSB7CisgIEJBVU1fTU9EVUxFX0Rpc3BsYXk4MCwKKyAgQkFVTV9NT0RVTEVfRGlzcGxheTY0LAorICBCQVVNX01PRFVMRV9TdGF0dXMsCisgIEJBVU1fTU9EVUxFX1Bob25lLAorICBCQVVNX01PRFVMRV9BdWRpbywKKyAgQkFVTV9NT0RVTEVfVm9pY2UKK30gQmF1bU1vZHVsZVR5cGU7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgdWludDE2X3QgaWRlbnRpZmllcjsKKyAgdW5zaWduZWQgY2hhciB0eXBlOworICB1bnNpZ25lZCBjaGFyIGNlbGxDb3VudDsKKyAgdW5zaWduZWQgY2hhciBrZXlDb3VudDsKKyAgdW5zaWduZWQgY2hhciBidXR0b25Db3VudDsKKyAgdW5zaWduZWQgY2hhciB3aGVlbENvdW50OworICB1bnNpZ25lZCBjaGFyIHBvdENvdW50OworICB1bnNpZ25lZCBpc0Rpc3BsYXk6MTsKKyAgdW5zaWduZWQgaGFzQ3Vyc29yS2V5czoxOworICB1bnNpZ25lZCBoYXNLZXlwYWQ6MTsKK30gQmF1bU1vZHVsZURlc2NyaXB0aW9uOworCitzdGF0aWMgY29uc3QgQmF1bU1vZHVsZURlc2NyaXB0aW9uIGJhdW1Nb2R1bGVEZXNjcmlwdGlvbnNbXSA9IHsKKyAgeyAuaWRlbnRpZmllciA9IDBYNDE4MCwKKyAgICAudHlwZSA9IEJBVU1fTU9EVUxFX0Rpc3BsYXk4MCwKKyAgICAuY2VsbENvdW50ID0gODAsCisgICAgLndoZWVsQ291bnQgPSA0LAorICAgIC5pc0Rpc3BsYXkgPSAxCisgIH0KKyAgLAorICB7IC5pZGVudGlmaWVyID0gMFg0MTgxLAorICAgIC50eXBlID0gQkFVTV9NT0RVTEVfRGlzcGxheTY0LAorICAgIC5jZWxsQ291bnQgPSA2NCwKKyAgICAud2hlZWxDb3VudCA9IDMsCisgICAgLmlzRGlzcGxheSA9IDEKKyAgfQorICAsCisgIHsgLmlkZW50aWZpZXIgPSAwWDQxOTAsCisgICAgLnR5cGUgPSBCQVVNX01PRFVMRV9TdGF0dXMsCisgICAgLmNlbGxDb3VudCA9IDQsCisgICAgLmJ1dHRvbkNvdW50ID0gNAorICB9CisgICwKKyAgeyAuaWRlbnRpZmllciA9IDBYNDE5MSwKKyAgICAudHlwZSA9IEJBVU1fTU9EVUxFX1Bob25lLAorICAgIC5jZWxsQ291bnQgPSAxMiwKKyAgICAuYnV0dG9uQ291bnQgPSA0LAorICAgIC53aGVlbENvdW50ID0gMSwKKyAgICAuaGFzS2V5cGFkID0gMQorICB9CisgICwKKyAgeyAuaWRlbnRpZmllciA9IDBYNDE5MiwKKyAgICAudHlwZSA9IEJBVU1fTU9EVUxFX0F1ZGlvLAorICAgIC5rZXlDb3VudCA9IDUsCisgICAgLndoZWVsQ291bnQgPSAxLAorICAgIC5wb3RDb3VudCA9IDYKKyAgfQorICAsCisgIHsgLmlkZW50aWZpZXIgPSAwWDQxOTMsCisgICAgLnR5cGUgPSBCQVVNX01PRFVMRV9Wb2ljZSwKKyAgICAua2V5Q291bnQgPSA0LAorICAgIC5idXR0b25Db3VudCA9IDMsCisgICAgLnBvdENvdW50ID0gNCwKKyAgICAuaGFzQ3Vyc29yS2V5cyA9IDEKKyAgfQorICAsCisgIHsgLmlkZW50aWZpZXIgPSAwIH0KK307CisKK3N0YXRpYyBjb25zdCBCYXVtTW9kdWxlRGVzY3JpcHRpb24gKgorZ2V0QmF1bU1vZHVsZURlc2NyaXB0aW9uICh1aW50MTZfdCBpZGVudGlmaWVyKSB7CisgIGNvbnN0IEJhdW1Nb2R1bGVEZXNjcmlwdGlvbiAqYm1kID0gYmF1bU1vZHVsZURlc2NyaXB0aW9uczsKKworICB3aGlsZSAoYm1kLT5pZGVudGlmaWVyKSB7CisgICAgaWYgKGJtZC0+aWRlbnRpZmllciA9PSBpZGVudGlmaWVyKSByZXR1cm4gYm1kOworICAgIGJtZCArPSAxOworICB9CisKKyAgbG9nTWVzc2FnZShMT0dfREVCVUcsICJ1bmtub3duIG1vZHVsZSBpZGVudGlmaWVyOiAlMDRYIiwgaWRlbnRpZmllcik7CisgIHJldHVybiBOVUxMOworfQorCit0eXBlZGVmIHN0cnVjdCB7CisgIGNvbnN0IEJhdW1Nb2R1bGVEZXNjcmlwdGlvbiAqZGVzY3JpcHRpb247CisgIHVpbnQxNl90IHNlcmlhbE51bWJlcjsKKyAgdWludDE2X3QgaGFyZHdhcmVWZXJzaW9uOworICB1aW50MTZfdCBmaXJtd2FyZVZlcnNpb247Cit9IEJhdW1Nb2R1bGVSZWdpc3RyYXRpb247CisKK3N0YXRpYyB2b2lkCitjbGVhckJhdW1Nb2R1bGVSZWdpc3RyYXRpb24gKEJhdW1Nb2R1bGVSZWdpc3RyYXRpb24gKmJtcikgeworICBibXItPmRlc2NyaXB0aW9uID0gTlVMTDsKKyAgYm1yLT5zZXJpYWxOdW1iZXIgPSAwOworICBibXItPmhhcmR3YXJlVmVyc2lvbiA9IDA7CisgIGJtci0+ZmlybXdhcmVWZXJzaW9uID0gMDsKK30KKworc3RhdGljIEJhdW1Nb2R1bGVSZWdpc3RyYXRpb24gYmF1bURpc3BsYXlNb2R1bGU7CitzdGF0aWMgQmF1bU1vZHVsZVJlZ2lzdHJhdGlvbiBiYXVtU3RhdHVzTW9kdWxlOworCitzdGF0aWMgQmF1bU1vZHVsZVJlZ2lzdHJhdGlvbiAqY29uc3QgYmF1bU1vZHVsZXNbXSA9IHsKKyAgJmJhdW1EaXNwbGF5TW9kdWxlLAorICAmYmF1bVN0YXR1c01vZHVsZSwKKyAgTlVMTAorfTsKKworc3RhdGljIEJhdW1Nb2R1bGVSZWdpc3RyYXRpb24gKgorZ2V0QmF1bU1vZHVsZVJlZ2lzdHJhdGlvbiAoY29uc3QgQmF1bU1vZHVsZURlc2NyaXB0aW9uICpibWQsIHVpbnQxNl90IHNlcmlhbE51bWJlcikgeworICBpZiAoYm1kKSB7CisgICAgQmF1bU1vZHVsZVJlZ2lzdHJhdGlvbiAqY29uc3QgKmJtciA9IGJhdW1Nb2R1bGVzOworCisgICAgd2hpbGUgKCpibXIpIHsKKyAgICAgIGlmICgoKCpibXIpLT5kZXNjcmlwdGlvbiA9PSBibWQpICYmICgoKmJtciktPnNlcmlhbE51bWJlciA9PSBzZXJpYWxOdW1iZXIpKSByZXR1cm4gKmJtcjsKKyAgICAgIGJtciArPSAxOworICAgIH0KKyAgfQorCisgIHJldHVybiBOVUxMOworfQorCitzdGF0aWMgaW50CitnZXRCYXVtTW9kdWxlQ2VsbENvdW50ICh2b2lkKSB7CisgIGludCBjb3VudCA9IDA7CisKKyAgeworICAgIEJhdW1Nb2R1bGVSZWdpc3RyYXRpb24gKmNvbnN0ICpibXIgPSBiYXVtTW9kdWxlczsKKworICAgIHdoaWxlICgqYm1yKSB7CisgICAgICBjb25zdCBCYXVtTW9kdWxlRGVzY3JpcHRpb24gKmJtZCA9ICgqYm1yKyspLT5kZXNjcmlwdGlvbjsKKyAgICAgIGlmIChibWQpIGNvdW50ICs9IGJtZC0+Y2VsbENvdW50OworICAgIH0KKyAgfQorCisgIHJldHVybiBjb3VudDsKK30KKworc3RhdGljIHZvaWQKK2Fzc3VtZUJhdW1EZXZpY2VJZGVudGl0eSAoY29uc3QgY2hhciAqaWRlbnRpdHkpIHsKKyAgbG9nTWVzc2FnZShMT0dfSU5GTywgIkJhdW0gRGV2aWNlIElkZW50aXR5OiAlcyIsIGlkZW50aXR5KTsKK30KKworc3RhdGljIHZvaWQKK2hhbmRsZUJhdW1EZXZpY2VJZGVudGl0eSAoY29uc3QgQmF1bVJlc3BvbnNlUGFja2V0ICpwYWNrZXQsIGludCBwcm9iaW5nKSB7CisgIGNvbnN0IGNoYXIgKmlkZW50aXR5ID0gcGFja2V0LT5kYXRhLnZhbHVlcy5kZXZpY2VJZGVudGl0eTsKKyAgc2l6ZV90IHNpemUgPSBzaXplb2YocGFja2V0LT5kYXRhLnZhbHVlcy5kZXZpY2VJZGVudGl0eSk7CisKKyAgbG9nVGV4dEZpZWxkKCJCYXVtIERldmljZSBJZGVudGl0eSIsIGlkZW50aXR5LCBzaXplKTsKKyAgaWYgKHByb2JpbmcpIHNldEJhdW1EZXZpY2VUeXBlKGlkZW50aXR5LCBzaXplKTsKK30KKworc3RhdGljIHZvaWQKK2xvZ0JhdW1TZXJpYWxOdW1iZXIgKGNvbnN0IEJhdW1SZXNwb25zZVBhY2tldCAqcGFja2V0KSB7CisgIGxvZ1RleHRGaWVsZCgiQmF1bSBTZXJpYWwgTnVtYmVyIiwKKyAgICAgICAgICAgICAgIHBhY2tldC0+ZGF0YS52YWx1ZXMuc2VyaWFsTnVtYmVyLAorICAgICAgICAgICAgICAgc2l6ZW9mKHBhY2tldC0+ZGF0YS52YWx1ZXMuc2VyaWFsTnVtYmVyKSk7Cit9CisKK3N0YXRpYyBpbnQKK2xvZ0JhdW1Qb3dlcmRvd25SZWFzb24gKEJhdW1Qb3dlcmRvd25SZWFzb24gcmVhc29uKSB7CisgIHR5cGVkZWYgc3RydWN0IHsKKyAgICBCYXVtUG93ZXJkb3duUmVhc29uIGJpdDsKKyAgICBjb25zdCBjaGFyICpleHBsYW5hdGlvbjsKKyAgfSBSZWFzb25FbnRyeTsKKworICBzdGF0aWMgY29uc3QgUmVhc29uRW50cnkgcmVhc29uVGFibGVbXSA9IHsKKyAgICB7QkFVTV9QRFJfUHJvdG9jb2xSZXF1ZXN0ZWQsIHN0cnRleHQoImRyaXZlciByZXF1ZXN0Iil9LAorICAgIHtCQVVNX1BEUl9Qb3dlclN3aXRjaCAgICAgICwgc3RydGV4dCgicG93ZXIgc3dpdGNoIil9LAorICAgIHtCQVVNX1BEUl9BdXRvUG93ZXJPZmYgICAgICwgc3RydGV4dCgiaWRsZSB0aW1lb3V0Iil9LAorICAgIHtCQVVNX1BEUl9CYXR0ZXJ5TG93ICAgICAgICwgc3RydGV4dCgiYmF0dGVyeSBsb3ciKX0sCisgICAgezB9CisgIH07CisKKyAgY2hhciBidWZmZXJbMFgxMDBdOworICBjaGFyIGRlbGltaXRlciA9ICc6JzsKKyAgaW50IGxlbmd0aDsKKworICBTVFJfQkVHSU4oYnVmZmVyLCBzaXplb2YoYnVmZmVyKSk7CisgIFNUUl9QUklOVEYoIiVzICVzIiwgU1RSSU5HSUZZKERSSVZFUl9OQU1FKSwgZ2V0dGV4dCgiUG93ZXJkb3duIikpOworCisgIGZvciAoY29uc3QgUmVhc29uRW50cnkgKmVudHJ5PXJlYXNvblRhYmxlOyBlbnRyeS0+Yml0OyBlbnRyeSs9MSkgeworICAgIGlmIChyZWFzb24gJiBlbnRyeS0+Yml0KSB7CisgICAgICBTVFJfUFJJTlRGKCIlYyAlcyIsIGRlbGltaXRlciwgZ2V0dGV4dChlbnRyeS0+ZXhwbGFuYXRpb24pKTsKKyAgICAgIGRlbGltaXRlciA9ICcsJzsKKyAgICB9CisgIH0KKworICBsZW5ndGggPSBTVFJfTEVOR1RIOworICBTVFJfRU5EOworCisgIGxvZ01lc3NhZ2UoTE9HX1dBUk5JTkcsICIlLipzIiwgbGVuZ3RoLCBidWZmZXIpOworICByZXR1cm4gMTsKK30KKworc3RhdGljIHZvaWQKK2FkanVzdFBhY2tldExlbmd0aCAoY29uc3QgdW5zaWduZWQgY2hhciAqYnl0ZXMsIHNpemVfdCBzaXplLCBzaXplX3QgKmxlbmd0aCkgeworICBzd2l0Y2ggKGJ5dGVzWzBdKSB7CisgICAgY2FzZSBCQVVNX1JTUF9EZXZpY2VJZGVudGl0eToKKyAgICAgIGlmIChzaXplID09IDE3KSB7CisgICAgICAgIGlmIChtZW1jbXAoJmJ5dGVzWzFdLCAiUmVmcmVzaGFicmFpbGxlICIsIChzaXplIC0gMSkpID09IDApIHsKKyAgICAgICAgICAqbGVuZ3RoICs9IDI7CisgICAgICAgIH0gZWxzZSBpZiAobWVtY21wKCZieXRlc1sxXSwgIk5MUyBlUmVhZGVyIFpvb20iLCAoc2l6ZSAtIDEpKSA9PSAwKSB7CisgICAgICAgICAgKmxlbmd0aCArPSAyOworICAgICAgICB9CisgICAgICB9CisgICAgICBicmVhazsKKworICAgIGRlZmF1bHQ6CisgICAgICBicmVhazsKKyAgfQorfQorCit0eXBlZGVmIGVudW0geworICBCQVVNX1BWU19XQUlUSU5HLAorICBCQVVNX1BWU19TVEFSVEVELAorICBCQVVNX1BWU19FU0NBUEVECit9IEJhdW1QYWNrZXRWZXJpZmljYXRpb25TdGF0ZTsKKwordHlwZWRlZiBzdHJ1Y3QgeworICBCYXVtUGFja2V0VmVyaWZpY2F0aW9uU3RhdGUgc3RhdGU7Cit9IEJhdW1QYWNrZXRWZXJpZmljYXRpb25EYXRhOworCitzdGF0aWMgQnJhaWxsZVBhY2tldFZlcmlmaWVyUmVzdWx0Cit2ZXJpZnlCYXVtUGFja2V0ICgKKyAgQnJhaWxsZURpc3BsYXkgKmJybCwKKyAgdW5zaWduZWQgY2hhciAqYnl0ZXMsIHNpemVfdCBzaXplLAorICBzaXplX3QgKmxlbmd0aCwgdm9pZCAqZGF0YQorKSB7CisgIEJhdW1QYWNrZXRWZXJpZmljYXRpb25EYXRhICpwdmQgPSBkYXRhOworICB1bnNpZ25lZCBjaGFyIGJ5dGUgPSBieXRlc1tzaXplLTFdOworICBpbnQgZXNjYXBlID0gYnl0ZSA9PSBBU0NJSV9FU0M7CisKKyAgc3dpdGNoIChwdmQtPnN0YXRlKSB7CisgICAgY2FzZSBCQVVNX1BWU19XQUlUSU5HOgorICAgICAgaWYgKCFlc2NhcGUpIHJldHVybiBCUkxfUFZSX0lOVkFMSUQ7CisgICAgICBwdmQtPnN0YXRlID0gQkFVTV9QVlNfU1RBUlRFRDsKKyAgICAgIHJldHVybiBCUkxfUFZSX0VYQ0xVREU7CisKKyAgICBjYXNlIEJBVU1fUFZTX1NUQVJURUQ6CisgICAgICBpZiAoZXNjYXBlKSB7CisgICAgICAgIHB2ZC0+c3RhdGUgPSBCQVVNX1BWU19FU0NBUEVEOworICAgICAgICByZXR1cm4gQlJMX1BWUl9FWENMVURFOworICAgICAgfQorICAgICAgYnJlYWs7CisKKyAgICBjYXNlIEJBVU1fUFZTX0VTQ0FQRUQ6CisgICAgICBwdmQtPnN0YXRlID0gQkFVTV9QVlNfU1RBUlRFRDsKKyAgICAgIGJyZWFrOworCisgICAgZGVmYXVsdDoKKyAgICAgIGxvZ01lc3NhZ2UoTE9HX05PVElDRSwgInVuZXhwZWN0ZWQgJXMgcGFja2V0IHZlcmlmaWNhdGlvbiBzdGF0ZTogJXUiLAorICAgICAgICAgICAgICAgICBicmwtPmRhdGEtPnByb3RvY29sLT5uYW1lLCBwdmQtPnN0YXRlKTsKKyAgICAgIHJldHVybiBCUkxfUFZSX0lOVkFMSUQ7CisgIH0KKworICBpZiAoc2l6ZSA9PSAxKSB7CisgICAgc3dpdGNoIChieXRlKSB7CisgICAgICBjYXNlIEJBVU1fUlNQX1N3aXRjaGVzOgorICAgICAgICBpZiAoIWNlbGxDb3VudCkgeworICAgICAgICAgIGFzc3VtZUJhdW1EZXZpY2VJZGVudGl0eSgiRE04MFAiKTsKKyAgICAgICAgICBiYXVtRGV2aWNlVHlwZSA9IEJBVU1fREVWSUNFX0RNODBQOworICAgICAgICAgIGNlbGxDb3VudCA9IDg0OworICAgICAgICB9CisKKyAgICAgIGNhc2UgQkFVTV9SU1BfQ2VsbENvdW50OgorICAgICAgY2FzZSBCQVVNX1JTUF9WZXJzaW9uTnVtYmVyOgorICAgICAgY2FzZSBCQVVNX1JTUF9Db21tdW5pY2F0aW9uQ2hhbm5lbDoKKyAgICAgIGNhc2UgQkFVTV9SU1BfUG93ZXJkb3duU2lnbmFsOgorICAgICAgY2FzZSBCQVVNX1JTUF9EaXNwbGF5S2V5czoKKyAgICAgIGNhc2UgQkFVTV9SU1BfSG9yaXpvbnRhbFNlbnNvcjoKKyAgICAgIGNhc2UgQkFVTV9SU1BfUm91dGluZ0tleToKKyAgICAgIGNhc2UgQkFVTV9SU1BfRnJvbnQ2OgorICAgICAgY2FzZSBCQVVNX1JTUF9CYWNrNjoKKyAgICAgIGNhc2UgQkFVTV9SU1BfQ29tbWFuZEtleXM6CisgICAgICBjYXNlIEJBVU1fUlNQX0pveXN0aWNrOgorICAgICAgY2FzZSBCQVVNX1JTUF9FcnJvckNvZGU6CisgICAgICBjYXNlIEJBVU1fUlNQX01vZHVsZVJlZ2lzdHJhdGlvbjoKKyAgICAgIGNhc2UgQkFVTV9SU1BfRGF0YVJlZ2lzdGVyczoKKyAgICAgIGNhc2UgQkFVTV9SU1BfU2VydmljZVJlZ2lzdGVyczoKKyAgICAgICAgKmxlbmd0aCA9IDI7CisgICAgICAgIGJyZWFrOworCisgICAgICBjYXNlIEJBVU1fUlNQX01vZGVTZXR0aW5nOgorICAgICAgY2FzZSBCQVVNX1JTUF9Gcm9udDEwOgorICAgICAgY2FzZSBCQVVNX1JTUF9CYWNrMTA6CisgICAgICBjYXNlIEJBVU1fUlNQX0VudHJ5S2V5czoKKyAgICAgICAgKmxlbmd0aCA9IDM7CisgICAgICAgIGJyZWFrOworCisgICAgICBjYXNlIEJBVU1fUlNQX1ZlcnRpY2FsU2Vuc29yOgorICAgICAgICAqbGVuZ3RoID0gKGJhdW1EZXZpY2VUeXBlID09IEJBVU1fREVWSUNFX0lua2EpPyAyOiAzOworICAgICAgICBicmVhazsKKworICAgICAgY2FzZSBCQVVNX1JTUF9WZXJ0aWNhbFNlbnNvcnM6CisgICAgICBjYXNlIEJBVU1fUlNQX1NlcmlhbE51bWJlcjoKKyAgICAgICAgKmxlbmd0aCA9IDk7CisgICAgICAgIGJyZWFrOworCisgICAgICBjYXNlIEJBVU1fUlNQX0JsdWV0b290aE5hbWU6CisgICAgICAgICpsZW5ndGggPSAxNTsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGNhc2UgQkFVTV9SU1BfRGV2aWNlSWRlbnRpdHk6CisgICAgICAgICpsZW5ndGggPSAxNzsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGNhc2UgQkFVTV9SU1BfUm91dGluZ0tleXM6CisgICAgICAgIGlmICghY2VsbENvdW50KSB7CisgICAgICAgICAgYXNzdW1lQmF1bURldmljZUlkZW50aXR5KCJJbmthIik7CisgICAgICAgICAgYmF1bURldmljZVR5cGUgPSBCQVVNX0RFVklDRV9JbmthOworICAgICAgICAgIGNlbGxDb3VudCA9IDU2OworICAgICAgICB9CisKKyAgICAgICAgaWYgKGJhdW1EZXZpY2VUeXBlID09IEJBVU1fREVWSUNFX0lua2EpIHsKKyAgICAgICAgICAqbGVuZ3RoID0gMjsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgICpsZW5ndGggPSBicmwtPmRhdGEtPnBhY2tldFNpemUucm91dGluZ0tleXMgKyAxOworICAgICAgICBicmVhazsKKworICAgICAgY2FzZSBCQVVNX1JTUF9Ib3Jpem9udGFsU2Vuc29yczoKKyAgICAgICAgKmxlbmd0aCA9IEtFWV9HUk9VUF9TSVpFKGJybC0+dGV4dENvbHVtbnMpICsgMTsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGNhc2UgQkFVTV9SU1BfTkxTX1pNWF9CRDoKKyAgICAgIGNhc2UgQkFVTV9SU1BfTkxTX1pNWF9CRToKKyAgICAgICAgKmxlbmd0aCA9IDI7CisgICAgICAgIGJyZWFrOworCisgICAgICBjYXNlIEJBVU1fUlNQX05MU19aTVhfQkY6CisgICAgICAgICpsZW5ndGggPSAyOworICAgICAgICBicmVhazsKKworICAgICAgZGVmYXVsdDoKKyAgICAgICAgcHZkLT5zdGF0ZSA9IEJBVU1fUFZTX1dBSVRJTkc7CisgICAgICAgIHJldHVybiBCUkxfUFZSX0lOVkFMSUQ7CisgICAgfQorICB9IGVsc2UgaWYgKHNpemUgPT0gMikgeworICAgIHN3aXRjaCAoYnl0ZXNbMF0pIHsKKyAgICAgIGNhc2UgQkFVTV9SU1BfTW9kdWxlUmVnaXN0cmF0aW9uOgorICAgICAgY2FzZSBCQVVNX1JTUF9EYXRhUmVnaXN0ZXJzOgorICAgICAgY2FzZSBCQVVNX1JTUF9TZXJ2aWNlUmVnaXN0ZXJzOgorICAgICAgICBpZiAoYnl0ZSA8IDQpIHJldHVybiBCUkxfUFZSX0lOVkFMSUQ7CisgICAgICAgICpsZW5ndGggKz0gYnl0ZTsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGNhc2UgQkFVTV9SU1BfTkxTX1pNWF9CRDoKKyAgICAgIGNhc2UgQkFVTV9SU1BfTkxTX1pNWF9CRToKKyAgICAgICAgaWYgKGJ5dGUgIT0gQVNDSUlfQ1IpIHJldHVybiBCUkxfUFZSX0VYQ0xVREU7CisgICAgICAgIGJyZWFrOworCisgICAgICBkZWZhdWx0OgorICAgICAgICBicmVhazsKKyAgICB9CisgIH0KKworICBhZGp1c3RQYWNrZXRMZW5ndGgoYnl0ZXMsIHNpemUsIGxlbmd0aCk7CisgIHJldHVybiBCUkxfUFZSX0lOQ0xVREU7Cit9CisKK3N0YXRpYyBpbnQKK3JlYWRCYXVtUGFja2V0IChCcmFpbGxlRGlzcGxheSAqYnJsLCB1bnNpZ25lZCBjaGFyICpwYWNrZXQsIGludCBzaXplKSB7CisgIEJhdW1QYWNrZXRWZXJpZmljYXRpb25EYXRhIHB2ZCA9IHsKKyAgICAuc3RhdGUgPSBCQVVNX1BWU19XQUlUSU5HCisgIH07CisKKyAgbWVtc2V0KHBhY2tldCwgMCwgc2l6ZSk7CisgIHJldHVybiByZWFkQnJhaWxsZVBhY2tldChicmwsIE5VTEwsIHBhY2tldCwgc2l6ZSwgdmVyaWZ5QmF1bVBhY2tldCwgJnB2ZCk7Cit9CisKK3N0YXRpYyBpbnQKK2dldEJhdW1QYWNrZXQgKEJyYWlsbGVEaXNwbGF5ICpicmwsIEJhdW1SZXNwb25zZVBhY2tldCAqcGFja2V0KSB7CisgIHJldHVybiByZWFkQmF1bVBhY2tldChicmwsIHBhY2tldC0+Ynl0ZXMsIHNpemVvZigqcGFja2V0KSk7Cit9CisKK3N0YXRpYyBpbnQKK3dyaXRlQmF1bVBhY2tldCAoQnJhaWxsZURpc3BsYXkgKmJybCwgY29uc3QgdW5zaWduZWQgY2hhciAqcGFja2V0LCBpbnQgbGVuZ3RoKSB7CisgIHVuc2lnbmVkIGNoYXIgYnVmZmVyWzEgKyAobGVuZ3RoICogMildOworICB1bnNpZ25lZCBjaGFyICpieXRlID0gYnVmZmVyOworICAqYnl0ZSsrID0gQVNDSUlfRVNDOworCisgIHsKKyAgICBpbnQgaW5kZXggPSAwOworICAgIHdoaWxlIChpbmRleCA8IGxlbmd0aCkKKyAgICAgIGlmICgoKmJ5dGUrKyA9IHBhY2tldFtpbmRleCsrXSkgPT0gQVNDSUlfRVNDKQorICAgICAgICAqYnl0ZSsrID0gQVNDSUlfRVNDOworICB9CisKKyAgcmV0dXJuIHdyaXRlQnJhaWxsZVBhY2tldChicmwsIE5VTEwsIGJ1ZmZlciwgKGJ5dGUgLSBidWZmZXIpKTsKK30KKworc3RhdGljIGludAord3JpdGVCYXVtTW9kdWxlUmVnaXN0cmF0aW9uQ29tbWFuZCAoCisgIEJyYWlsbGVEaXNwbGF5ICpicmwsCisgIHVpbnQxNl90IG1vZHVsZUlkZW50aWZpZXIsIHVpbnQxNl90IHNlcmlhbE51bWJlciwKKyAgQmF1bU1vZHVsZVJlZ2lzdHJhdGlvbkNvbW1hbmQgY29tbWFuZAorKSB7CisgIGNvbnN0IHVuc2lnbmVkIGNoYXIgcmVxdWVzdFtdID0geworICAgIEJBVU1fUkVRX01vZHVsZVJlZ2lzdHJhdGlvbiwKKyAgICA1LCAvKiBkYXRhIGxlbmd0aCAqLworICAgIE1BS0VfQkFVTV9JTlRFR0VSKG1vZHVsZUlkZW50aWZpZXIpLAorICAgIE1BS0VfQkFVTV9JTlRFR0VSKHNlcmlhbE51bWJlciksCisgICAgY29tbWFuZAorICB9OworCisgIHJldHVybiB3cml0ZUJhdW1QYWNrZXQoYnJsLCByZXF1ZXN0LCBzaXplb2YocmVxdWVzdCkpOworfQorCitzdGF0aWMgaW50Cit3cml0ZUJhdW1EYXRhUmVnaXN0ZXJzICgKKyAgQnJhaWxsZURpc3BsYXkgKmJybCwKKyAgY29uc3QgQmF1bU1vZHVsZVJlZ2lzdHJhdGlvbiAqYm1yLAorICBjb25zdCB1bnNpZ25lZCBjaGFyICpyZWdpc3RlcnMsCisgIHVuc2lnbmVkIGNoYXIgc3RhcnQsIHVuc2lnbmVkIGNoYXIgY291bnQKKykgeworICBjb25zdCBCYXVtTW9kdWxlRGVzY3JpcHRpb24gKmJtZCA9IGJtci0+ZGVzY3JpcHRpb247CisKKyAgaWYgKGJtZCkgeworICAgIGlmIChjb3VudCA8IGJtZC0+Y2VsbENvdW50KSBjb3VudCA9IGJtZC0+Y2VsbENvdW50OworCisgICAgaWYgKGNvdW50KSB7CisgICAgICB1bnNpZ25lZCBjaGFyIHBhY2tldFsyICsgNyArIGNvdW50XTsKKyAgICAgIHVuc2lnbmVkIGNoYXIgKmJ5dGUgPSBwYWNrZXQ7CisKKyAgICAgICpieXRlKysgPSBCQVVNX1JFUV9EYXRhUmVnaXN0ZXJzOworICAgICAgKmJ5dGUrKyA9IDcgKyBjb3VudDsKKworICAgICAgKmJ5dGUrKyA9IE1BS0VfQkFVTV9JTlRFR0VSX0ZJUlNUKGJtZC0+aWRlbnRpZmllcik7CisgICAgICAqYnl0ZSsrID0gTUFLRV9CQVVNX0lOVEVHRVJfU0VDT05EKGJtZC0+aWRlbnRpZmllcik7CisKKyAgICAgICpieXRlKysgPSBNQUtFX0JBVU1fSU5URUdFUl9GSVJTVChibXItPnNlcmlhbE51bWJlcik7CisgICAgICAqYnl0ZSsrID0gTUFLRV9CQVVNX0lOVEVHRVJfU0VDT05EKGJtci0+c2VyaWFsTnVtYmVyKTsKKworICAgICAgKmJ5dGUrKyA9IEJBVU1fRFJDX1dyaXRlOworICAgICAgKmJ5dGUrKyA9IHN0YXJ0OworICAgICAgKmJ5dGUrKyA9IGNvdW50OworICAgICAgYnl0ZSA9IG1lbXBjcHkoYnl0ZSwgcmVnaXN0ZXJzLCBjb3VudCk7CisKKyAgICAgIGlmICghd3JpdGVCYXVtUGFja2V0KGJybCwgcGFja2V0LCBieXRlLXBhY2tldCkpIHJldHVybiAwOworICAgIH0KKyAgfQorCisgIHJldHVybiAxOworfQorCit0eXBlZGVmIHN0cnVjdCB7CisgIGNvbnN0IEtleVRhYmxlRGVmaW5pdGlvbiAqa2V5VGFibGVEZWZpbml0aW9uOworICBpbnQgKCp3cml0ZUFsbENlbGxzKSAoQnJhaWxsZURpc3BsYXkgKmJybCk7CisgIGludCAoKndyaXRlQ2VsbFJhbmdlKSAoQnJhaWxsZURpc3BsYXkgKmJybCwgdW5zaWduZWQgaW50IHN0YXJ0LCB1bnNpZ25lZCBpbnQgY291bnQpOworfSBCYXVtRGV2aWNlT3BlcmF0aW9uczsKKworc3RhdGljIGludAord3JpdGVCYXVtQ2VsbHNfYWxsIChCcmFpbGxlRGlzcGxheSAqYnJsKSB7CisgIHVuc2lnbmVkIGNoYXIgcGFja2V0WzEgKyBjZWxsQ291bnRdOworICB1bnNpZ25lZCBjaGFyICpieXRlID0gcGFja2V0OworCisgICpieXRlKysgPSBCQVVNX1JFUV9EaXNwbGF5RGF0YTsKKyAgYnl0ZSA9IG1lbXBjcHkoYnl0ZSwgZXh0ZXJuYWxDZWxscywgY2VsbENvdW50KTsKKworICByZXR1cm4gd3JpdGVCYXVtUGFja2V0KGJybCwgcGFja2V0LCBieXRlLXBhY2tldCk7Cit9CisKK3N0YXRpYyBpbnQKK3dyaXRlQmF1bUNlbGxzX3N0YXJ0IChCcmFpbGxlRGlzcGxheSAqYnJsKSB7CisgIHVuc2lnbmVkIGNoYXIgcGFja2V0WzEgKyAxICsgY2VsbENvdW50XTsKKyAgdW5zaWduZWQgY2hhciAqYnl0ZSA9IHBhY2tldDsKKworICAqYnl0ZSsrID0gQkFVTV9SRVFfRGlzcGxheURhdGE7CisgICpieXRlKysgPSAwOworICBieXRlID0gbWVtcGNweShieXRlLCBleHRlcm5hbENlbGxzLCBjZWxsQ291bnQpOworCisgIHJldHVybiB3cml0ZUJhdW1QYWNrZXQoYnJsLCBwYWNrZXQsIGJ5dGUtcGFja2V0KTsKK30KKworc3RhdGljIGludAord3JpdGVCYXVtQ2VsbHNfbW9kdWxhciAoQnJhaWxsZURpc3BsYXkgKmJybCwgdW5zaWduZWQgaW50IHN0YXJ0LCB1bnNpZ25lZCBpbnQgY291bnQpIHsKKyAgaWYgKHN0YXJ0IDwgYnJsLT50ZXh0Q29sdW1ucykgeworICAgIHVuc2lnbmVkIGludCBhbW91bnQgPSBNSU4oY291bnQsIGJybC0+dGV4dENvbHVtbnMtc3RhcnQpOworCisgICAgaWYgKGFtb3VudCA+IDApIHsKKyAgICAgIGlmICghd3JpdGVCYXVtRGF0YVJlZ2lzdGVycyhicmwsICZiYXVtRGlzcGxheU1vZHVsZSwgJmV4dGVybmFsQ2VsbHNbc3RhcnRdLCBzdGFydCwgYW1vdW50KSkgcmV0dXJuIDA7CisgICAgICBzdGFydCArPSBhbW91bnQ7CisgICAgICBjb3VudCAtPSBhbW91bnQ7CisgICAgfQorICB9CisKKyAgaWYgKGNvdW50ID4gMCkgeworICAgIGlmICghd3JpdGVCYXVtRGF0YVJlZ2lzdGVycyhicmwsICZiYXVtU3RhdHVzTW9kdWxlLCAmZXh0ZXJuYWxDZWxsc1tzdGFydF0sIHN0YXJ0LWJybC0+dGV4dENvbHVtbnMsIGNvdW50KSkgcmV0dXJuIDA7CisgIH0KKworICByZXR1cm4gMTsKK30KKworc3RhdGljIGNvbnN0IEJhdW1EZXZpY2VPcGVyYXRpb25zIGJhdW1EZXZpY2VPcGVyYXRpb25zW10gPSB7CisgIFtCQVVNX0RFVklDRV9EZWZhdWx0XSA9IHsKKyAgICAua2V5VGFibGVEZWZpbml0aW9uID0gJktFWV9UQUJMRV9ERUZJTklUSU9OKGRlZmF1bHQpLAorICAgIC53cml0ZUFsbENlbGxzID0gd3JpdGVCYXVtQ2VsbHNfYWxsCisgIH0sCisKKyAgW0JBVU1fREVWSUNFX1JlZnJlc2hhYnJhaWxsZV0gPSB7CisgICAgLmtleVRhYmxlRGVmaW5pdGlvbiA9ICZLRVlfVEFCTEVfREVGSU5JVElPTihyYiksCisgICAgLndyaXRlQWxsQ2VsbHMgPSB3cml0ZUJhdW1DZWxsc19hbGwKKyAgfSwKKworICBbQkFVTV9ERVZJQ0VfT3JiaXRdID0geworICAgIC5rZXlUYWJsZURlZmluaXRpb24gPSAmS0VZX1RBQkxFX0RFRklOSVRJT04ob3JiaXQpLAorICAgIC53cml0ZUFsbENlbGxzID0gd3JpdGVCYXVtQ2VsbHNfYWxsCisgIH0sCisKKyAgW0JBVU1fREVWSUNFX05MU19ab29tYXhdID0geworICAgIC5rZXlUYWJsZURlZmluaXRpb24gPSAmS0VZX1RBQkxFX0RFRklOSVRJT04oTkxTX1pvb21heCksCisgICAgLndyaXRlQWxsQ2VsbHMgPSB3cml0ZUJhdW1DZWxsc19hbGwKKyAgfSwKKworICBbQkFVTV9ERVZJQ0VfQjJHXSA9IHsKKyAgICAua2V5VGFibGVEZWZpbml0aW9uID0gJktFWV9UQUJMRV9ERUZJTklUSU9OKGIyZyksCisgICAgLndyaXRlQWxsQ2VsbHMgPSB3cml0ZUJhdW1DZWxsc19hbGwKKyAgfSwKKworICBbQkFVTV9ERVZJQ0VfQ29ubnldID0geworICAgIC5rZXlUYWJsZURlZmluaXRpb24gPSAmS0VZX1RBQkxFX0RFRklOSVRJT04oY29ubnkpLAorICAgIC53cml0ZUFsbENlbGxzID0gd3JpdGVCYXVtQ2VsbHNfYWxsCisgIH0sCisKKyAgW0JBVU1fREVWSUNFX1BvY2tldFZhcmlvXSA9IHsKKyAgICAua2V5VGFibGVEZWZpbml0aW9uID0gJktFWV9UQUJMRV9ERUZJTklUSU9OKHB2KSwKKyAgICAud3JpdGVBbGxDZWxscyA9IHdyaXRlQmF1bUNlbGxzX2FsbAorICB9LAorCisgIFtCQVVNX0RFVklDRV9Qcm9udG9dID0geworICAgIC5rZXlUYWJsZURlZmluaXRpb24gPSAmS0VZX1RBQkxFX0RFRklOSVRJT04ocHJvbnRvKSwKKyAgICAud3JpdGVBbGxDZWxscyA9IHdyaXRlQmF1bUNlbGxzX2FsbAorICB9LAorCisgIFtCQVVNX0RFVklDRV9TdXBlclZhcmlvXSA9IHsKKyAgICAua2V5VGFibGVEZWZpbml0aW9uID0gJktFWV9UQUJMRV9ERUZJTklUSU9OKHN2KSwKKyAgICAud3JpdGVBbGxDZWxscyA9IHdyaXRlQmF1bUNlbGxzX2FsbAorICB9LAorCisgIFtCQVVNX0RFVklDRV9WYXJpb0Nvbm5lY3RdID0geworICAgIC5rZXlUYWJsZURlZmluaXRpb24gPSAmS0VZX1RBQkxFX0RFRklOSVRJT04oY29ubmVjdCksCisgICAgLndyaXRlQWxsQ2VsbHMgPSB3cml0ZUJhdW1DZWxsc19hbGwKKyAgfSwKKworICBbQkFVTV9ERVZJQ0VfVmFyaW9VbHRyYV0gPSB7CisgICAgLmtleVRhYmxlRGVmaW5pdGlvbiA9ICZLRVlfVEFCTEVfREVGSU5JVElPTih1bHRyYSksCisgICAgLndyaXRlQWxsQ2VsbHMgPSB3cml0ZUJhdW1DZWxsc19hbGwKKyAgfSwKKworICBbQkFVTV9ERVZJQ0VfSW5rYV0gPSB7CisgICAgLmtleVRhYmxlRGVmaW5pdGlvbiA9ICZLRVlfVEFCTEVfREVGSU5JVElPTihpbmthKSwKKyAgICAud3JpdGVBbGxDZWxscyA9IHdyaXRlQmF1bUNlbGxzX3N0YXJ0CisgIH0sCisKKyAgW0JBVU1fREVWSUNFX0RNODBQXSA9IHsKKyAgICAua2V5VGFibGVEZWZpbml0aW9uID0gJktFWV9UQUJMRV9ERUZJTklUSU9OKGRtODBwKSwKKyAgICAud3JpdGVBbGxDZWxscyA9IHdyaXRlQmF1bUNlbGxzX3N0YXJ0CisgIH0sCisKKyAgW0JBVU1fREVWSUNFX1ZhcmlvNDBdID0geworICAgIC5rZXlUYWJsZURlZmluaXRpb24gPSAmS0VZX1RBQkxFX0RFRklOSVRJT04odjQwKSwKKyAgICAud3JpdGVBbGxDZWxscyA9IHdyaXRlQmF1bUNlbGxzX2FsbAorICB9LAorCisgIFtCQVVNX0RFVklDRV9WYXJpbzgwXSA9IHsKKyAgICAua2V5VGFibGVEZWZpbml0aW9uID0gJktFWV9UQUJMRV9ERUZJTklUSU9OKHY4MCksCisgICAgLndyaXRlQWxsQ2VsbHMgPSB3cml0ZUJhdW1DZWxsc19hbGwKKyAgfSwKKworICBbQkFVTV9ERVZJQ0VfTW9kdWxhcl0gPSB7CisgICAgLmtleVRhYmxlRGVmaW5pdGlvbiA9ICZLRVlfVEFCTEVfREVGSU5JVElPTihwcm8pLAorICAgIC53cml0ZUNlbGxSYW5nZSA9IHdyaXRlQmF1bUNlbGxzX21vZHVsYXIKKyAgfQorfTsKKworc3RhdGljIGludAorc2V0QmF1bU1vZGUgKEJyYWlsbGVEaXNwbGF5ICpicmwsIHVuc2lnbmVkIGNoYXIgbW9kZSwgdW5zaWduZWQgY2hhciBzZXR0aW5nKSB7CisgIGNvbnN0IHVuc2lnbmVkIGNoYXIgcmVxdWVzdFtdID0ge0JBVU1fUkVRX1NldE1vZGUsIG1vZGUsIHNldHRpbmd9OworICByZXR1cm4gd3JpdGVCYXVtUGFja2V0KGJybCwgcmVxdWVzdCwgc2l6ZW9mKHJlcXVlc3QpKTsKK30KKworc3RhdGljIHZvaWQKK3NldEJhdW1Td2l0Y2hlcyAoQnJhaWxsZURpc3BsYXkgKmJybCwgdW5zaWduZWQgY2hhciBuZXdTZXR0aW5ncywgaW50IGluaXRpYWxpemUpIHsKKyAgdW5zaWduZWQgY2hhciBjaGFuZ2VkU2V0dGluZ3MgPSBuZXdTZXR0aW5ncyBeIHN3aXRjaFNldHRpbmdzOworICBzd2l0Y2hTZXR0aW5ncyA9IG5ld1NldHRpbmdzOworCisgIHsKKyAgICB0eXBlZGVmIHN0cnVjdCB7CisgICAgICB1bnNpZ25lZCBjaGFyIHN3aXRjaEJpdDsKKyAgICAgIHVuc2lnbmVkIGNoYXIgbW9kZU51bWJlcjsKKyAgICAgIHVuc2lnbmVkIGNoYXIgb2ZmVmFsdWU7CisgICAgICB1bnNpZ25lZCBjaGFyIG9uVmFsdWU7CisgICAgfSBTd2l0Y2hFbnRyeTsKKworICAgIHN0YXRpYyBjb25zdCBTd2l0Y2hFbnRyeSBzd2l0Y2hUYWJsZVtdID0geworICAgICAge0JBVU1fU1dUX1Nob3dTZW5zb3IsIDBYMDEsIDAsIDJ9LAorICAgICAge0JBVU1fU1dUX0JyYWlsbGVLZXlib2FyZCwgMFgwMywgMCwgM30sCisgICAgICB7MH0KKyAgICB9OworICAgIGNvbnN0IFN3aXRjaEVudHJ5ICplbnRyeSA9IHN3aXRjaFRhYmxlOworCisgICAgd2hpbGUgKGVudHJ5LT5zd2l0Y2hCaXQpIHsKKyAgICAgIGlmIChpbml0aWFsaXplIHx8IChjaGFuZ2VkU2V0dGluZ3MgJiBlbnRyeS0+c3dpdGNoQml0KSkKKyAgICAgICAgc2V0QmF1bU1vZGUoYnJsLCBlbnRyeS0+bW9kZU51bWJlciwKKyAgICAgICAgICAgICAgICAgICAgKChzd2l0Y2hTZXR0aW5ncyAmIGVudHJ5LT5zd2l0Y2hCaXQpPyBlbnRyeS0+b25WYWx1ZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnRyeS0+b2ZmVmFsdWUpKTsKKyAgICAgICsrZW50cnk7CisgICAgfQorICB9Cit9CisKK3N0YXRpYyB2b2lkCitzZXRJbmthU3dpdGNoZXMgKEJyYWlsbGVEaXNwbGF5ICpicmwsIHVuc2lnbmVkIGNoYXIgbmV3U2V0dGluZ3MsIGludCBpbml0aWFsaXplKSB7CisgIG5ld1NldHRpbmdzIF49IDBYMEY7CisgIHNldEJhdW1Td2l0Y2hlcyhicmwsICgobmV3U2V0dGluZ3MgJiAwWDAzKSB8ICgobmV3U2V0dGluZ3MgJiAwWDBDKSA8PCA0KSksIGluaXRpYWxpemUpOworfQorCitzdGF0aWMgaW50CitoYW5kbGVCYXVtTW9kdWxlUmVnaXN0cmF0aW9uRXZlbnQgKEJyYWlsbGVEaXNwbGF5ICpicmwsIGNvbnN0IEJhdW1SZXNwb25zZVBhY2tldCAqcGFja2V0KSB7CisgIHVpbnQxNl90IG1vZHVsZUlkZW50aWZpZXIgPSBnZXRCYXVtSW50ZWdlcihwYWNrZXQtPmRhdGEudmFsdWVzLm1vZHVsYXIubW9kdWxlSWRlbnRpZmllcik7CisgIHVpbnQxNl90IHNlcmlhbE51bWJlciA9IGdldEJhdW1JbnRlZ2VyKHBhY2tldC0+ZGF0YS52YWx1ZXMubW9kdWxhci5zZXJpYWxOdW1iZXIpOworICBjb25zdCBCYXVtTW9kdWxlRGVzY3JpcHRpb24gKmJtZCA9IGdldEJhdW1Nb2R1bGVEZXNjcmlwdGlvbihtb2R1bGVJZGVudGlmaWVyKTsKKworICBpZiAocGFja2V0LT5kYXRhLnZhbHVlcy5tb2R1bGFyLmRhdGEucmVnaXN0cmF0aW9uLmV2ZW50ID09IEJBVU1fTVJFX0FkZGl0aW9uKSB7CisgICAgaWYgKCF3cml0ZUJhdW1Nb2R1bGVSZWdpc3RyYXRpb25Db21tYW5kKGJybCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kdWxlSWRlbnRpZmllciwgc2VyaWFsTnVtYmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCQVVNX01SQ19BY2tub3dsZWRnZSkpIHsKKyAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIGlmIChibWQpIHsKKyAgICAgIEJhdW1Nb2R1bGVSZWdpc3RyYXRpb24gKmJtcjsKKworICAgICAgaWYgKGJtZC0+aXNEaXNwbGF5KSB7CisgICAgICAgIGJtciA9ICZiYXVtRGlzcGxheU1vZHVsZTsKKyAgICAgIH0gZWxzZSBpZiAoYm1kLT50eXBlID09IEJBVU1fTU9EVUxFX1N0YXR1cykgeworICAgICAgICBibXIgPSAmYmF1bVN0YXR1c01vZHVsZTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIGJtciA9IE5VTEw7CisgICAgICB9CisKKyAgICAgIGlmIChibXIpIHsKKyAgICAgICAgaWYgKGJtci0+ZGVzY3JpcHRpb24pIGNsZWFyQmF1bU1vZHVsZVJlZ2lzdHJhdGlvbihibXIpOworCisgICAgICAgIGJtci0+ZGVzY3JpcHRpb24gPSBibWQ7CisgICAgICAgIGJtci0+c2VyaWFsTnVtYmVyID0gc2VyaWFsTnVtYmVyOworICAgICAgICBibXItPmhhcmR3YXJlVmVyc2lvbiA9IGdldEJhdW1JbnRlZ2VyKHBhY2tldC0+ZGF0YS52YWx1ZXMubW9kdWxhci5kYXRhLnJlZ2lzdHJhdGlvbi5oYXJkd2FyZVZlcnNpb24pOworICAgICAgICBibXItPmZpcm13YXJlVmVyc2lvbiA9IGdldEJhdW1JbnRlZ2VyKHBhY2tldC0+ZGF0YS52YWx1ZXMubW9kdWxhci5kYXRhLnJlZ2lzdHJhdGlvbi5maXJtd2FyZVZlcnNpb24pOworICAgICAgfQorICAgIH0KKyAgfSBlbHNlIHsKKyAgICBCYXVtTW9kdWxlUmVnaXN0cmF0aW9uICpibXIgPSBnZXRCYXVtTW9kdWxlUmVnaXN0cmF0aW9uKGJtZCwgc2VyaWFsTnVtYmVyKTsKKyAgICBpZiAoYm1yKSBjbGVhckJhdW1Nb2R1bGVSZWdpc3RyYXRpb24oYm1yKTsKKyAgfQorCisgIHJldHVybiAxOworfQorCitzdGF0aWMgdm9pZAoraGFuZGxlQmF1bURhdGFSZWdpc3RlcnNFdmVudCAoQnJhaWxsZURpc3BsYXkgKmJybCwgY29uc3QgQmF1bVJlc3BvbnNlUGFja2V0ICpwYWNrZXQpIHsKKyAgY29uc3QgQmF1bU1vZHVsZURlc2NyaXB0aW9uICpibWQgPSBnZXRCYXVtTW9kdWxlRGVzY3JpcHRpb24oZ2V0QmF1bUludGVnZXIocGFja2V0LT5kYXRhLnZhbHVlcy5tb2R1bGFyLm1vZHVsZUlkZW50aWZpZXIpKTsKKyAgY29uc3QgQmF1bU1vZHVsZVJlZ2lzdHJhdGlvbiAqYm1yID0gZ2V0QmF1bU1vZHVsZVJlZ2lzdHJhdGlvbihibWQsIGdldEJhdW1JbnRlZ2VyKHBhY2tldC0+ZGF0YS52YWx1ZXMubW9kdWxhci5zZXJpYWxOdW1iZXIpKTsKKworICBpZiAoYm1yKSB7CisgICAgc3dpdGNoIChibWQtPnR5cGUpIHsKKyAgICAgIHsKKyAgICAgICAgdW5zaWduZWQgY2hhciBmbGFnczsKKyAgICAgICAgdW5zaWduZWQgY2hhciBVTlVTRUQgZXJyb3JzOworICAgICAgICBjb25zdCBzaWduZWQgY2hhciAqd2hlZWw7CisgICAgICAgIHVuc2lnbmVkIGNoYXIgd2hlZWxzOworICAgICAgICB1bnNpZ25lZCBjaGFyIGJ1dHRvbnM7CisgICAgICAgIHVuc2lnbmVkIGNoYXIga2V5czsKKyAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqc2Vuc29yczsKKworICAgICAgY2FzZSBCQVVNX01PRFVMRV9EaXNwbGF5ODA6CisgICAgICAgIGZsYWdzID0gcGFja2V0LT5kYXRhLnZhbHVlcy5tb2R1bGFyLmRhdGEucmVnaXN0ZXJzLmRpc3BsYXk4MC5mbGFnczsKKyAgICAgICAgZXJyb3JzID0gcGFja2V0LT5kYXRhLnZhbHVlcy5tb2R1bGFyLmRhdGEucmVnaXN0ZXJzLmRpc3BsYXk4MC5lcnJvcnM7CisgICAgICAgIHdoZWVsID0gcGFja2V0LT5kYXRhLnZhbHVlcy5tb2R1bGFyLmRhdGEucmVnaXN0ZXJzLmRpc3BsYXk4MC53aGVlbHM7CisgICAgICAgIHdoZWVscyA9IEFSUkFZX0NPVU5UKHBhY2tldC0+ZGF0YS52YWx1ZXMubW9kdWxhci5kYXRhLnJlZ2lzdGVycy5kaXNwbGF5ODAud2hlZWxzKTsKKyAgICAgICAgYnV0dG9ucyA9IHBhY2tldC0+ZGF0YS52YWx1ZXMubW9kdWxhci5kYXRhLnJlZ2lzdGVycy5kaXNwbGF5ODAuYnV0dG9uczsKKyAgICAgICAga2V5cyA9IHBhY2tldC0+ZGF0YS52YWx1ZXMubW9kdWxhci5kYXRhLnJlZ2lzdGVycy5kaXNwbGF5ODAua2V5czsKKyAgICAgICAgc2Vuc29ycyA9IHBhY2tldC0+ZGF0YS52YWx1ZXMubW9kdWxhci5kYXRhLnJlZ2lzdGVycy5kaXNwbGF5ODAuc2Vuc29yczsKKyAgICAgICAgZ290byBkb0Rpc3BsYXk7CisKKyAgICAgIGNhc2UgQkFVTV9NT0RVTEVfRGlzcGxheTY0OgorICAgICAgICBmbGFncyA9IHBhY2tldC0+ZGF0YS52YWx1ZXMubW9kdWxhci5kYXRhLnJlZ2lzdGVycy5kaXNwbGF5NjQuZmxhZ3M7CisgICAgICAgIGVycm9ycyA9IHBhY2tldC0+ZGF0YS52YWx1ZXMubW9kdWxhci5kYXRhLnJlZ2lzdGVycy5kaXNwbGF5NjQuZXJyb3JzOworICAgICAgICB3aGVlbCA9IHBhY2tldC0+ZGF0YS52YWx1ZXMubW9kdWxhci5kYXRhLnJlZ2lzdGVycy5kaXNwbGF5NjQud2hlZWxzOworICAgICAgICB3aGVlbHMgPSBBUlJBWV9DT1VOVChwYWNrZXQtPmRhdGEudmFsdWVzLm1vZHVsYXIuZGF0YS5yZWdpc3RlcnMuZGlzcGxheTY0LndoZWVscyk7CisgICAgICAgIGJ1dHRvbnMgPSBwYWNrZXQtPmRhdGEudmFsdWVzLm1vZHVsYXIuZGF0YS5yZWdpc3RlcnMuZGlzcGxheTY0LmJ1dHRvbnM7CisgICAgICAgIGtleXMgPSBwYWNrZXQtPmRhdGEudmFsdWVzLm1vZHVsYXIuZGF0YS5yZWdpc3RlcnMuZGlzcGxheTY0LmtleXM7CisgICAgICAgIHNlbnNvcnMgPSBwYWNrZXQtPmRhdGEudmFsdWVzLm1vZHVsYXIuZGF0YS5yZWdpc3RlcnMuZGlzcGxheTY0LnNlbnNvcnM7CisgICAgICAgIGdvdG8gZG9EaXNwbGF5OworCisgICAgICBkb0Rpc3BsYXk6CisgICAgICAgIGlmIChmbGFncyAmIEJBVU1fRFJGX1doZWVsc0NoYW5nZWQpIHsKKyAgICAgICAgICB1bnNpZ25lZCBpbnQgaW5kZXg7CisKKyAgICAgICAgICBmb3IgKGluZGV4PTA7IGluZGV4PHdoZWVsczsgaW5kZXgrPTEpIHsKKyAgICAgICAgICAgIHNpZ25lZCBjaGFyIGNvdW50ID0gd2hlZWxbaW5kZXhdOworCisgICAgICAgICAgICB3aGlsZSAoY291bnQgPiAwKSB7CisgICAgICAgICAgICAgIGVucXVldWVLZXkoYnJsLCBCTV9HUlBfTmF2aWdhdGlvbktleXMsIChCTV9LRVlfV0hFRUxfVVAgKyBpbmRleCkpOworICAgICAgICAgICAgICBjb3VudCAtPSAxOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICB3aGlsZSAoY291bnQgPCAwKSB7CisgICAgICAgICAgICAgIGVucXVldWVLZXkoYnJsLCBCTV9HUlBfTmF2aWdhdGlvbktleXMsIChCTV9LRVlfV0hFRUxfRE9XTiArIGluZGV4KSk7CisgICAgICAgICAgICAgIGNvdW50ICs9IDE7CisgICAgICAgICAgICB9CisgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYgKGZsYWdzICYgQkFVTV9EUkZfQnV0dG9uc0NoYW5nZWQpIHsKKyAgICAgICAgICB1cGRhdGVOYXZpZ2F0aW9uS2V5cyhicmwsICZidXR0b25zLCBCTV9LRVlfV0hFRUxfUFJFU1MsIHdoZWVscyk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoZmxhZ3MgJiBCQVVNX0RSRl9LZXlzQ2hhbmdlZCkgeworICAgICAgICAgIHVwZGF0ZURpc3BsYXlLZXlzKGJybCwga2V5cyk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoZmxhZ3MgJiBCQVVNX0RSRl9TZW5zb3JzQ2hhbmdlZCkgeworICAgICAgICAgIHVwZGF0ZVJvdXRpbmdLZXlzKGJybCwgc2Vuc29ycywgYnJsLT50ZXh0Q29sdW1ucyk7CisgICAgICAgIH0KKworICAgICAgICBicmVhazsKKyAgICAgIH0KKworICAgICAgY2FzZSBCQVVNX01PRFVMRV9TdGF0dXM6CisgICAgICAgIGlmIChwYWNrZXQtPmRhdGEudmFsdWVzLm1vZHVsYXIuZGF0YS5yZWdpc3RlcnMuc3RhdHVzLmZsYWdzICYgQkFVTV9EUkZfQnV0dG9uc0NoYW5nZWQpIHsKKyAgICAgICAgICB1cGRhdGVOYXZpZ2F0aW9uS2V5cyhicmwsICZwYWNrZXQtPmRhdGEudmFsdWVzLm1vZHVsYXIuZGF0YS5yZWdpc3RlcnMuc3RhdHVzLmJ1dHRvbnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQk1fS0VZX1NUQVRVUywgQk1fS0VZU19TVEFUVVMpOworICAgICAgICB9CisKKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIGxvZ01lc3NhZ2UoTE9HX1dBUk5JTkcsICJ1bnN1cHBvcnRlZCBkYXRhIHJlZ2lzdGVyIGNvbmZpZ3VyYXRpb246ICV1IiwgYm1kLT50eXBlKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICB9Cit9CisKK3N0YXRpYyBpbnQKK2dldElkZW50aXR5Q2VsbENvdW50IChjaGFyKiBkZXZpY2VJZGVudGl0eSwgY29uc3QgaW50IGxlbmd0aCkgeworICBjaGFyIGJ1ZmZlcltsZW5ndGgrMV07CisgIG1lbWNweShidWZmZXIsIGRldmljZUlkZW50aXR5LCBsZW5ndGgpOworICBidWZmZXJbbGVuZ3RoXSA9IDA7CisKKyAgY2hhciAqZGlnaXRzID0gc3RycGJyayhidWZmZXIsICIxMjM0NTY3ODkiKTsKKworICBpZiAoZGlnaXRzKSB7CisgICAgaW50IGNvdW50ID0gYXRvaShkaWdpdHMpOworICAgIGlmIChpc0FjY2VwdGFibGVDZWxsQ291bnQoY291bnQpKSByZXR1cm4gY291bnQ7CisgIH0KKworICByZXR1cm4gMDsKK30KKworc3RhdGljIGludAorcHJvYmVCYXVtRGV2aWNlIChCcmFpbGxlRGlzcGxheSAqYnJsKSB7CisgIGludCBwcm9iZXMgPSAwOworCisgIGRvIHsKKyAgICBpbnQgaWRlbnRpdHlDZWxsQ291bnQgPSAwOworCisgICAgYmF1bURldmljZVR5cGUgPSBCQVVNX0RFVklDRV9EZWZhdWx0OworICAgIGNlbGxDb3VudCA9IDA7CisKKyAgICB7CisgICAgICBCYXVtTW9kdWxlUmVnaXN0cmF0aW9uICpjb25zdCAqYm1yID0gYmF1bU1vZHVsZXM7CisgICAgICB3aGlsZSAoKmJtcikgY2xlYXJCYXVtTW9kdWxlUmVnaXN0cmF0aW9uKCpibXIrKyk7CisgICAgfQorCisgICAgLyogZ2V0IHRoZSBzZXJpYWwgbnVtYmVyIGZvciB0aGUgbG9nICovCisgICAgeworICAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgcmVxdWVzdFtdID0ge0JBVU1fUkVRX0dldFNlcmlhbE51bWJlcn07CisgICAgICBpZiAoIXdyaXRlQmF1bVBhY2tldChicmwsIHJlcXVlc3QsIHNpemVvZihyZXF1ZXN0KSkpIGJyZWFrOworICAgIH0KKworICAgIC8qIG5ld2VyIG1vZGVscyByZXR1cm4gYW4gaWRlbnRpdHkgc3RyaW5nIHdoaWNoIGNvbnRhaW5zIHRoZSBjZWxsIGNvdW50ICovCisgICAgeworICAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgcmVxdWVzdFtdID0ge0JBVU1fUkVRX0dldERldmljZUlkZW50aXR5fTsKKyAgICAgIGlmICghd3JpdGVCYXVtUGFja2V0KGJybCwgcmVxdWVzdCwgc2l6ZW9mKHJlcXVlc3QpKSkgYnJlYWs7CisgICAgfQorCisgICAgLyogdHJ5IGV4cGxpY2l0bHkgYXNraW5nIGZvciB0aGUgY2VsbCBjb3VudCAqLworICAgIHsKKyAgICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHJlcXVlc3RbXSA9IHtCQVVNX1JFUV9EaXNwbGF5RGF0YSwgMH07CisgICAgICBpZiAoIXdyaXRlQmF1bVBhY2tldChicmwsIHJlcXVlc3QsIHNpemVvZihyZXF1ZXN0KSkpIGJyZWFrOworICAgIH0KKworICAgIC8qIGVucXVldWUgYSByZXF1ZXN0IHRvIGdldCB0aGUgaW5pdGlhbCBrZXkgc3RhdGVzICovCisgICAgeworICAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgcmVxdWVzdFtdID0ge0JBVU1fUkVRX0dldEtleXN9OworICAgICAgaWYgKCF3cml0ZUJhdW1QYWNrZXQoYnJsLCByZXF1ZXN0LCBzaXplb2YocmVxdWVzdCkpKSBicmVhazsKKyAgICB9CisKKyAgICAvKiB0aGUgbW9kdWxhciBtb2RlbHMgbmVlZCB0byBiZSBwcm9iZWQgd2l0aCBhIGdlbmVyYWwgY2FsbCAqLworICAgIGlmICghd3JpdGVCYXVtTW9kdWxlUmVnaXN0cmF0aW9uQ29tbWFuZChicmwsIDAsIDAsIEJBVU1fTVJDX1F1ZXJ5KSkgYnJlYWs7CisKKyAgICB3aGlsZSAoYXdhaXRCcmFpbGxlSW5wdXQoYnJsLCBwcm9iZVRpbWVvdXQpKSB7CisgICAgICBCYXVtUmVzcG9uc2VQYWNrZXQgcmVzcG9uc2U7CisgICAgICBpbnQgc2l6ZSA9IGdldEJhdW1QYWNrZXQoYnJsLCAmcmVzcG9uc2UpOworCisgICAgICBpZiAoc2l6ZSkgeworICAgICAgICBzd2l0Y2ggKHJlc3BvbnNlLmRhdGEuY29kZSkgeworICAgICAgICAgIGNhc2UgQkFVTV9SU1BfVmVyc2lvbk51bWJlcjoKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAgY2FzZSBCQVVNX1JTUF9Sb3V0aW5nS2V5czogLyogSW5rYSAqLworICAgICAgICAgICAgc2V0SW5rYVN3aXRjaGVzKGJybCwgcmVzcG9uc2UuZGF0YS52YWx1ZXMuc3dpdGNoZXMsIDEpOworICAgICAgICAgICAgcmV0dXJuIDE7CisKKyAgICAgICAgICBjYXNlIEJBVU1fUlNQX1N3aXRjaGVzOiAvKiBETTgwUCAqLworICAgICAgICAgICAgc2V0QmF1bVN3aXRjaGVzKGJybCwgcmVzcG9uc2UuZGF0YS52YWx1ZXMuc3dpdGNoZXMsIDEpOworICAgICAgICAgICAgcmV0dXJuIDE7CisKKyAgICAgICAgICBjYXNlIEJBVU1fUlNQX0NlbGxDb3VudDogeyAvKiBuZXdlciBtb2RlbHMgKi8KKyAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgY291bnQgPSByZXNwb25zZS5kYXRhLnZhbHVlcy5jZWxsQ291bnQ7CisKKyAgICAgICAgICAgIGlmIChpc0FjY2VwdGFibGVDZWxsQ291bnQoY291bnQpKSB7CisgICAgICAgICAgICAgIGNlbGxDb3VudCA9IGNvdW50OworICAgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgbG9nVW5leHBlY3RlZENlbGxDb3VudChjb3VudCk7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICB9CisKKyAgICAgICAgICBjYXNlIEJBVU1fUlNQX01vZHVsZVJlZ2lzdHJhdGlvbjogLyogbW9kdWxhciBtb2RlbHMgKi8KKyAgICAgICAgICAgIGlmICghaGFuZGxlQmF1bU1vZHVsZVJlZ2lzdHJhdGlvbkV2ZW50KGJybCwgJnJlc3BvbnNlKSkgcmV0dXJuIDA7CisgICAgICAgICAgICBpZiAoIWJhdW1EaXNwbGF5TW9kdWxlLmRlc2NyaXB0aW9uKSBjb250aW51ZTsKKyAgICAgICAgICAgIGJhdW1EZXZpY2VUeXBlID0gQkFVTV9ERVZJQ0VfTW9kdWxhcjsKKyAgICAgICAgICAgIGNlbGxDb3VudCA9IGdldEJhdW1Nb2R1bGVDZWxsQ291bnQoKTsKKyAgICAgICAgICAgIHJldHVybiAxOworCisgICAgICAgICAgY2FzZSBCQVVNX1JTUF9EZXZpY2VJZGVudGl0eTogeworICAgICAgICAgICAgLyogc2hvdWxkIGNvbnRhaW4gZmFsbGJhY2sgY2VsbCBjb3VudCAqLworICAgICAgICAgICAgaW50IGNvdW50ID0gZ2V0SWRlbnRpdHlDZWxsQ291bnQocmVzcG9uc2UuZGF0YS52YWx1ZXMuZGV2aWNlSWRlbnRpdHksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YocmVzcG9uc2UuZGF0YS52YWx1ZXMuZGV2aWNlSWRlbnRpdHkpKTsKKyAgICAgICAgICAgIGlmIChjb3VudCkgaWRlbnRpdHlDZWxsQ291bnQgPSBjb3VudDsKKyAgICAgICAgICAgIGhhbmRsZUJhdW1EZXZpY2VJZGVudGl0eSgmcmVzcG9uc2UsIDEpOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgfQorCisgICAgICAgICAgY2FzZSBCQVVNX1JTUF9TZXJpYWxOdW1iZXI6CisgICAgICAgICAgICBsb2dCYXVtU2VyaWFsTnVtYmVyKCZyZXNwb25zZSk7CisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAgIGNhc2UgQkFVTV9SU1BfRXJyb3JDb2RlOgorICAgICAgICAgICAgaWYgKHJlc3BvbnNlLmRhdGEudmFsdWVzLmVycm9yQ29kZSAhPSBCQVVNX0VSUl9QYWNrZXRUeXBlKSBnb3RvIHVuZXhwZWN0ZWRQYWNrZXQ7CisgICAgICAgICAgICBsb2dNZXNzYWdlKExPR19ERUJVRywgInVuc3VwcG9ydGVkIHJlcXVlc3QiKTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICB1bmV4cGVjdGVkUGFja2V0OgorICAgICAgICAgICAgbG9nVW5leHBlY3RlZFBhY2tldChyZXNwb25zZS5ieXRlcywgc2l6ZSk7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgfSBlbHNlIGlmIChlcnJubyAhPSBFQUdBSU4pIHsKKyAgICAgICAgYnJlYWs7CisgICAgICB9CisgICAgfQorICAgIGlmIChlcnJubyAhPSBFQUdBSU4pIGJyZWFrOworCisgICAgaWYgKGlkZW50aXR5Q2VsbENvdW50KSB7CisgICAgICAvKiBPbGRlciBtb2RlbHMgZG9uJ3QgcHJvdmlkZSB0aGUgYWN0dWFsIGNlbGwgY291bnQKKyAgICAgICAqIHNvIGl0IG11c3QgYmUgZGVyaXZlZCBmcm9tIHRoZSBpZGVudGl0eSBzdHJpbmcuCisgICAgICAgKi8KKyAgICAgIHN3aXRjaCAoKGNlbGxDb3VudCA9IGlkZW50aXR5Q2VsbENvdW50KSkgeworICAgICAgICBjYXNlIDgwOiAvKiBwcm9iYWJseSBhIFZhcmlvIDgwICovCisgICAgICAgICAgYmF1bURldmljZVR5cGUgPSBCQVVNX0RFVklDRV9WYXJpbzgwOworICAgICAgICAgIGNlbGxDb3VudCArPSA0OworICAgICAgICAgIGJyZWFrOworICAgICAgfQorCisgICAgICByZXR1cm4gMTsKKyAgICB9CisgIH0gd2hpbGUgKCsrcHJvYmVzIDwgcHJvYmVMaW1pdCk7CisKKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkCitwcm9jZXNzQmF1bVBhY2tldHMgKEJyYWlsbGVEaXNwbGF5ICpicmwpIHsKKyAgQmF1bVJlc3BvbnNlUGFja2V0IHBhY2tldDsKKyAgaW50IHNpemU7CisKKyAgd2hpbGUgKChzaXplID0gZ2V0QmF1bVBhY2tldChicmwsICZwYWNrZXQpKSkgeworICAgIHN3aXRjaCAocGFja2V0LmRhdGEuY29kZSkgeworICAgICAgY2FzZSBCQVVNX1JTUF9DZWxsQ291bnQ6CisgICAgICAgIGlmICghY2hhbmdlQ2VsbENvdW50KGJybCwgcGFja2V0LmRhdGEudmFsdWVzLmNlbGxDb3VudCkpIHJldHVybjsKKyAgICAgICAgY29udGludWU7CisKKyAgICAgIGNhc2UgQkFVTV9SU1BfRGV2aWNlSWRlbnRpdHk6CisgICAgICAgIGhhbmRsZUJhdW1EZXZpY2VJZGVudGl0eSgmcGFja2V0LCAwKTsKKyAgICAgICAgY29udGludWU7CisKKyAgICAgIGNhc2UgQkFVTV9SU1BfU2VyaWFsTnVtYmVyOgorICAgICAgICBsb2dCYXVtU2VyaWFsTnVtYmVyKCZwYWNrZXQpOworICAgICAgICBjb250aW51ZTsKKworICAgICAgY2FzZSBCQVVNX1JTUF9Db21tdW5pY2F0aW9uQ2hhbm5lbDoKKyAgICAgICAgY29udGludWU7CisKKyAgICAgIGNhc2UgQkFVTV9SU1BfUG93ZXJkb3duU2lnbmFsOgorICAgICAgICBpZiAoIWxvZ0JhdW1Qb3dlcmRvd25SZWFzb24ocGFja2V0LmRhdGEudmFsdWVzLnBvd2VyZG93blJlYXNvbikpIGNvbnRpbnVlOworICAgICAgICBlcnJubyA9IEVOT0RFVjsKKyAgICAgICAgcmV0dXJuOworCisgICAgICBjYXNlIEJBVU1fUlNQX0Rpc3BsYXlLZXlzOiB7CisgICAgICAgIHVuc2lnbmVkIGNoYXIga2V5czsKKyAgICAgICAgdW5zaWduZWQgY2hhciBVTlVTRUQgY291bnQgPSA2OworCisgICAgICAgIHN3aXRjaCAoYmF1bURldmljZVR5cGUpIHsKKyAgICAgICAgICBjYXNlIEJBVU1fREVWSUNFX0lua2E6CisgICAgICAgICAgICBrZXlzID0gMDsKKyNkZWZpbmUgS0VZKGlua2EsYmF1bSkgaWYgKCEocGFja2V0LmRhdGEudmFsdWVzLmRpc3BsYXlLZXlzICYgKGlua2EpKSkga2V5cyB8PSAoYmF1bSkKKyAgICAgICAgICAgIEtFWSgwMDQsIDAwMSk7CisgICAgICAgICAgICBLRVkoMDAyLCAwMDIpOworICAgICAgICAgICAgS0VZKDAwMSwgMDA0KTsKKyAgICAgICAgICAgIEtFWSgwNDAsIDAxMCk7CisgICAgICAgICAgICBLRVkoMDIwLCAwMjApOworICAgICAgICAgICAgS0VZKDAxMCwgMDQwKTsKKyN1bmRlZiBLRVkKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgY2FzZSBCQVVNX0RFVklDRV9ETTgwUDoKKyAgICAgICAgICAgIGtleXMgPSBwYWNrZXQuZGF0YS52YWx1ZXMuZGlzcGxheUtleXMgXiAwWDdGOworICAgICAgICAgICAgY291bnQgPSA3OworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICBjYXNlIEJBVU1fREVWSUNFX09yYml0OgorICAgICAgICAgICAgY291bnQgPSA4OworICAgICAgICAgICAgLyogZmFsbCB0aHJvdWdoICovCisKKyAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAga2V5cyA9IHBhY2tldC5kYXRhLnZhbHVlcy5kaXNwbGF5S2V5czsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgdXBkYXRlRGlzcGxheUtleXMoYnJsLCBrZXlzKTsKKyAgICAgICAgY29udGludWU7CisgICAgICB9CisKKyAgICAgIGNhc2UgQkFVTV9SU1BfQ29tbWFuZEtleXM6CisgICAgICAgIHVwZGF0ZU5hdmlnYXRpb25LZXlzKGJybCwgcGFja2V0LmRhdGEudmFsdWVzLmNvbW1hbmRLZXlzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCTV9LRVlfQ09NTUFORCwgQk1fS0VZU19DT01NQU5EKTsKKyAgICAgICAgY29udGludWU7CisKKyAgICAgIGNhc2UgQkFVTV9SU1BfRnJvbnQ2OgorICAgICAgICB1cGRhdGVOYXZpZ2F0aW9uS2V5cyhicmwsIHBhY2tldC5kYXRhLnZhbHVlcy5mcm9udDYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJNX0tFWV9GUk9OVCwgNik7CisgICAgICAgIGNvbnRpbnVlOworCisgICAgICBjYXNlIEJBVU1fUlNQX0JhY2s2OgorICAgICAgICB1cGRhdGVOYXZpZ2F0aW9uS2V5cyhicmwsIHBhY2tldC5kYXRhLnZhbHVlcy5iYWNrNiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQk1fS0VZX0JBQ0ssIDYpOworICAgICAgICBjb250aW51ZTsKKworICAgICAgY2FzZSBCQVVNX1JTUF9Gcm9udDEwOiB7CisgICAgICAgIHVuc2lnbmVkIGNoYXIga2V5c1syXTsKKyAgICAgICAga2V5c1swXSA9IHBhY2tldC5kYXRhLnZhbHVlcy5mcm9udDEwWzFdOworICAgICAgICBrZXlzWzFdID0gcGFja2V0LmRhdGEudmFsdWVzLmZyb250MTBbMF07CisgICAgICAgIHVwZGF0ZU5hdmlnYXRpb25LZXlzKGJybCwga2V5cywgQk1fS0VZX0ZST05ULCAxMCk7CisgICAgICAgIGNvbnRpbnVlOworICAgICAgfQorCisgICAgICBjYXNlIEJBVU1fUlNQX0JhY2sxMDogeworICAgICAgICB1bnNpZ25lZCBjaGFyIGtleXNbMl07CisgICAgICAgIGtleXNbMF0gPSBwYWNrZXQuZGF0YS52YWx1ZXMuYmFjazEwWzFdOworICAgICAgICBrZXlzWzFdID0gcGFja2V0LmRhdGEudmFsdWVzLmJhY2sxMFswXTsKKyAgICAgICAgdXBkYXRlTmF2aWdhdGlvbktleXMoYnJsLCBrZXlzLCBCTV9LRVlfQkFDSywgMTApOworICAgICAgICBjb250aW51ZTsKKyAgICAgIH0KKworICAgICAgY2FzZSBCQVVNX1JTUF9FbnRyeUtleXM6CisgICAgICAgIHVwZGF0ZUVudHJ5S2V5cyhicmwsIHBhY2tldC5kYXRhLnZhbHVlcy5lbnRyeUtleXMpOworICAgICAgICBjb250aW51ZTsKKworICAgICAgY2FzZSBCQVVNX1JTUF9Kb3lzdGljazoKKyAgICAgICAgdXBkYXRlSm95c3RpY2soYnJsLCBwYWNrZXQuZGF0YS52YWx1ZXMuam95c3RpY2spOworICAgICAgICBjb250aW51ZTsKKworICAgICAgY2FzZSBCQVVNX1JTUF9Ib3Jpem9udGFsU2Vuc29yOgorICAgICAgICByZXNldEtleUdyb3VwKHBhY2tldC5kYXRhLnZhbHVlcy5ob3Jpem9udGFsU2Vuc29ycywgYnJsLT50ZXh0Q29sdW1ucywgcGFja2V0LmRhdGEudmFsdWVzLmhvcml6b250YWxTZW5zb3IpOworICAgICAgY2FzZSBCQVVNX1JTUF9Ib3Jpem9udGFsU2Vuc29yczoKKyAgICAgICAgaWYgKCEoc3dpdGNoU2V0dGluZ3MgJiBCQVVNX1NXVF9EaXNhYmxlU2Vuc29ycykpIHsKKyAgICAgICAgICB1cGRhdGVLZXlHcm91cChicmwsIGtleXNTdGF0ZS5ob3Jpem9udGFsU2Vuc29ycywgcGFja2V0LmRhdGEudmFsdWVzLmhvcml6b250YWxTZW5zb3JzLAorICAgICAgICAgICAgICAgICAgICAgICAgIEJNX0dSUF9Ib3Jpem9udGFsU2Vuc29ycywgMCwgYnJsLT50ZXh0Q29sdW1ucywgMCk7CisgICAgICAgIH0KKyAgICAgICAgY29udGludWU7CisKKyAgICAgIGNhc2UgQkFVTV9SU1BfVmVydGljYWxTZW5zb3I6IHsKKyAgICAgICAgdW5zaWduZWQgY2hhciBsZWZ0ID0gcGFja2V0LmRhdGEudmFsdWVzLnZlcnRpY2FsU2Vuc29yLmxlZnQ7CisgICAgICAgIHVuc2lnbmVkIGNoYXIgcmlnaHQ7CisKKyAgICAgICAgaWYgKGJhdW1EZXZpY2VUeXBlICE9IEJBVU1fREVWSUNFX0lua2EpIHsKKyAgICAgICAgICByaWdodCA9IHBhY2tldC5kYXRhLnZhbHVlcy52ZXJ0aWNhbFNlbnNvci5yaWdodDsKKyAgICAgICAgfSBlbHNlIGlmIChsZWZ0ICYgMFg0MCkgeworICAgICAgICAgIGxlZnQgLT0gMFg0MDsKKyAgICAgICAgICByaWdodCA9IDA7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgcmlnaHQgPSBsZWZ0OworICAgICAgICAgIGxlZnQgPSAwOworICAgICAgICB9CisKKyAgICAgICAgcmVzZXRLZXlHcm91cChwYWNrZXQuZGF0YS52YWx1ZXMudmVydGljYWxTZW5zb3JzLmxlZnQsIFZFUlRJQ0FMX1NFTlNPUl9DT1VOVCwgbGVmdCk7CisgICAgICAgIHJlc2V0S2V5R3JvdXAocGFja2V0LmRhdGEudmFsdWVzLnZlcnRpY2FsU2Vuc29ycy5yaWdodCwgVkVSVElDQUxfU0VOU09SX0NPVU5ULCByaWdodCk7CisgICAgICB9CisKKyAgICAgIGNhc2UgQkFVTV9SU1BfVmVydGljYWxTZW5zb3JzOgorICAgICAgICBpZiAoIShzd2l0Y2hTZXR0aW5ncyAmIEJBVU1fU1dUX0Rpc2FibGVTZW5zb3JzKSkgeworICAgICAgICAgIGludCBzY2FsZWQgPSAoc3dpdGNoU2V0dGluZ3MgJiBCQVVNX1NXVF9TY2FsZWRWZXJ0aWNhbCkgIT0gMDsKKworICAgICAgICAgIHVwZGF0ZUtleUdyb3VwKGJybCwga2V5c1N0YXRlLmxlZnRTZW5zb3JzLCBwYWNrZXQuZGF0YS52YWx1ZXMudmVydGljYWxTZW5zb3JzLmxlZnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgKHNjYWxlZD8gQk1fR1JQX1NjYWxlZExlZnRTZW5zb3JzOiBCTV9HUlBfTGVmdFNlbnNvcnMpLAorICAgICAgICAgICAgICAgICAgICAgICAgIDAsIFZFUlRJQ0FMX1NFTlNPUl9DT1VOVCwgc2NhbGVkKTsKKyAgICAgICAgICB1cGRhdGVLZXlHcm91cChicmwsIGtleXNTdGF0ZS5yaWdodFNlbnNvcnMsIHBhY2tldC5kYXRhLnZhbHVlcy52ZXJ0aWNhbFNlbnNvcnMucmlnaHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgKHNjYWxlZD8gQk1fR1JQX1NjYWxlZFJpZ2h0U2Vuc29yczogQk1fR1JQX1JpZ2h0U2Vuc29ycyksCisgICAgICAgICAgICAgICAgICAgICAgICAgMCwgVkVSVElDQUxfU0VOU09SX0NPVU5ULCBzY2FsZWQpOworICAgICAgICB9CisgICAgICAgIGNvbnRpbnVlOworCisgICAgICBjYXNlIEJBVU1fUlNQX1JvdXRpbmdLZXk6CisgICAgICAgIHJlc2V0S2V5R3JvdXAocGFja2V0LmRhdGEudmFsdWVzLnJvdXRpbmdLZXlzLCBjZWxsQ291bnQsIHBhY2tldC5kYXRhLnZhbHVlcy5yb3V0aW5nS2V5KTsKKyAgICAgICAgZ290byBkb1JvdXRpbmdLZXlzOworCisgICAgICBjYXNlIEJBVU1fUlNQX1JvdXRpbmdLZXlzOgorICAgICAgICBpZiAoYmF1bURldmljZVR5cGUgPT0gQkFVTV9ERVZJQ0VfSW5rYSkgeworICAgICAgICAgIHNldElua2FTd2l0Y2hlcyhicmwsIHBhY2tldC5kYXRhLnZhbHVlcy5zd2l0Y2hlcywgMCk7CisgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKworICAgICAgZG9Sb3V0aW5nS2V5czoKKyAgICAgICAgdXBkYXRlUm91dGluZ0tleXMoYnJsLCBwYWNrZXQuZGF0YS52YWx1ZXMucm91dGluZ0tleXMsIGNlbGxDb3VudCk7CisgICAgICAgIGNvbnRpbnVlOworCisgICAgICBjYXNlIEJBVU1fUlNQX1N3aXRjaGVzOgorICAgICAgICBzZXRCYXVtU3dpdGNoZXMoYnJsLCBwYWNrZXQuZGF0YS52YWx1ZXMuc3dpdGNoZXMsIDApOworICAgICAgICBjb250aW51ZTsKKworICAgICAgY2FzZSBCQVVNX1JTUF9Nb2R1bGVSZWdpc3RyYXRpb246CisgICAgICAgIGlmIChoYW5kbGVCYXVtTW9kdWxlUmVnaXN0cmF0aW9uRXZlbnQoYnJsLCAmcGFja2V0KSkgeworICAgICAgICB9CisKKyAgICAgICAgaWYgKCFjaGFuZ2VDZWxsQ291bnQoYnJsLCBnZXRCYXVtTW9kdWxlQ2VsbENvdW50KCkpKSByZXR1cm47CisgICAgICAgIGNvbnRpbnVlOworCisgICAgICBjYXNlIEJBVU1fUlNQX0RhdGFSZWdpc3RlcnM6CisgICAgICAgIGhhbmRsZUJhdW1EYXRhUmVnaXN0ZXJzRXZlbnQoYnJsLCAmcGFja2V0KTsKKyAgICAgICAgY29udGludWU7CisKKyAgICAgIGNhc2UgQkFVTV9SU1BfRXJyb3JDb2RlOgorICAgICAgICBpZiAocGFja2V0LmRhdGEudmFsdWVzLmVycm9yQ29kZSAhPSBCQVVNX0VSUl9QYWNrZXRUeXBlKSBnb3RvIHVuZXhwZWN0ZWRQYWNrZXQ7CisgICAgICAgIGxvZ01lc3NhZ2UoTE9HX0RFQlVHLCAidW5zdXBwb3J0ZWQgcmVxdWVzdCIpOworICAgICAgICBjb250aW51ZTsKKworICAgICAgY2FzZSBCQVVNX1JTUF9OTFNfWk1YX0JEOgorICAgICAgY2FzZSBCQVVNX1JTUF9OTFNfWk1YX0JFOgorICAgICAgY2FzZSBCQVVNX1JTUF9OTFNfWk1YX0JGOgorICAgICAgICBjb250aW51ZTsKKworICAgICAgZGVmYXVsdDoKKyAgICAgIHVuZXhwZWN0ZWRQYWNrZXQ6CisgICAgICAgIGxvZ1VuZXhwZWN0ZWRQYWNrZXQocGFja2V0LmJ5dGVzLCBzaXplKTsKKyAgICAgICAgY29udGludWU7CisgICAgfQorICB9Cit9CisKK3N0YXRpYyBpbnQKK3dyaXRlQmF1bUNlbGxzIChCcmFpbGxlRGlzcGxheSAqYnJsKSB7CisgIGNvbnN0IEJhdW1EZXZpY2VPcGVyYXRpb25zICpiZG8gPSAmYmF1bURldmljZU9wZXJhdGlvbnNbYmF1bURldmljZVR5cGVdOworICBpZiAoIWJkby0+d3JpdGVBbGxDZWxscykgcmV0dXJuIDE7CisgIHJldHVybiBiZG8tPndyaXRlQWxsQ2VsbHMoYnJsKTsKK30KKworc3RhdGljIGludAord3JpdGVCYXVtQ2VsbFJhbmdlIChCcmFpbGxlRGlzcGxheSAqYnJsLCB1bnNpZ25lZCBpbnQgc3RhcnQsIHVuc2lnbmVkIGludCBjb3VudCkgeworICBjb25zdCBCYXVtRGV2aWNlT3BlcmF0aW9ucyAqYmRvID0gJmJhdW1EZXZpY2VPcGVyYXRpb25zW2JhdW1EZXZpY2VUeXBlXTsKKyAgaWYgKCFiZG8tPndyaXRlQ2VsbFJhbmdlKSByZXR1cm4gMTsKKyAgcmV0dXJuIGJkby0+d3JpdGVDZWxsUmFuZ2UoYnJsLCBzdGFydCwgY291bnQpOworfQorCitzdGF0aWMgY29uc3QgUHJvdG9jb2xPcGVyYXRpb25zIGJhdW1Fc2NhcGVPcGVyYXRpb25zID0geworICAubmFtZSA9ICJCYXVtIEVzY2FwZSIsCisgIC5kb3RzVGFibGUgPSAmZG90c1RhYmxlX0lTTzExNTQ4XzEsCisKKyAgLnNlcmlhbEJhdWQgPSAxOTIwMCwKKyAgLnNlcmlhbFBhcml0eSA9IFNFUklBTF9QQVJJVFlfTk9ORSwKKworICAucmVhZFBhY2tldCA9IHJlYWRCYXVtUGFja2V0LAorICAud3JpdGVQYWNrZXQgPSB3cml0ZUJhdW1QYWNrZXQsCisKKyAgLnByb2JlRGV2aWNlID0gcHJvYmVCYXVtRGV2aWNlLAorICAucHJvY2Vzc1BhY2tldHMgPSBwcm9jZXNzQmF1bVBhY2tldHMsCisKKyAgLndyaXRlQ2VsbHMgPSB3cml0ZUJhdW1DZWxscywKKyAgLndyaXRlQ2VsbFJhbmdlID0gd3JpdGVCYXVtQ2VsbFJhbmdlCit9OworCisvKiBISUQgUHJvdG9jb2wgKi8KKwordHlwZWRlZiB1bmlvbiB7CisgIHVuc2lnbmVkIGNoYXIgYnl0ZXNbMF07CisKKyAgc3RydWN0IHsKKyAgICB1bnNpZ25lZCBjaGFyIHR5cGU7CisKKyAgICB1bmlvbiB7CisgICAgICB1bnNpZ25lZCBjaGFyIGNlbGxDb3VudFsxNl07CisgICAgICB1bnNpZ25lZCBjaGFyIHJvdXRpbmdLZXlzWzE2XTsKKyAgICAgIHVuc2lnbmVkIGNoYXIgZGlzcGxheUtleXNbMTZdOworICAgICAgdW5zaWduZWQgY2hhciByb3V0aW5nS2V5WzE2XTsKKyAgICAgIHVuc2lnbmVkIGNoYXIgZW50cnlLZXlzWzE2XTsKKyAgICAgIHVuc2lnbmVkIGNoYXIgam95c3RpY2tbMTZdOworICAgICAgY2hhciBkZXZpY2VJZGVudGl0eVtCQVVNX0xFTkdUSF9EZXZpY2VJZGVudGl0eV07CisgICAgICBjaGFyIHNlcmlhbE51bWJlcltCQVVNX0xFTkdUSF9TZXJpYWxOdW1iZXJdOworICAgIH0gZGF0YTsKKyAgfSBQQUNLRUQgZmllbGRzOworfSBIaWRSZXNwb25zZVBhY2tldDsKKwordHlwZWRlZiBzdHJ1Y3QgeworICBzdHJ1Y3QgeworICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnRhYmxlOworICAgIHVuc2lnbmVkIGNoYXIgY291bnQ7CisgIH0gY29uc3QgcGFja2V0TGVuZ3RoczsKK30gSGlkUGFja2V0VmVyaWZpY2F0aW9uRGF0YTsKKworc3RhdGljIEJyYWlsbGVQYWNrZXRWZXJpZmllclJlc3VsdAordmVyaWZ5SGlkUGFja2V0ICgKKyAgQnJhaWxsZURpc3BsYXkgKmJybCwKKyAgdW5zaWduZWQgY2hhciAqYnl0ZXMsIHNpemVfdCBzaXplLAorICBzaXplX3QgKmxlbmd0aCwgdm9pZCAqZGF0YQorKSB7CisgIEhpZFBhY2tldFZlcmlmaWNhdGlvbkRhdGEgKnB2ZCA9IGRhdGE7CisgIHVuc2lnbmVkIGNoYXIgYnl0ZSA9IGJ5dGVzW3NpemUtMV07CisKKyAgaWYgKHNpemUgPT0gMSkgeworICAgIGlmIChieXRlIDwgcHZkLT5wYWNrZXRMZW5ndGhzLmNvdW50KSB7CisgICAgICB1bnNpZ25lZCBjaGFyIGwgPSBwdmQtPnBhY2tldExlbmd0aHMudGFibGVbYnl0ZV07CisKKyAgICAgIGlmIChsKSB7CisgICAgICAgICpsZW5ndGggPSBsOworICAgICAgICByZXR1cm4gQlJMX1BWUl9JTkNMVURFOworICAgICAgfQorICAgIH0KKworICAgIGlmICghY2VsbENvdW50KSByZXR1cm4gQlJMX1BWUl9JTlZBTElEOworCisgICAgc3dpdGNoIChieXRlKSB7CisgICAgICBjYXNlIEJBVU1fUlNQX1JvdXRpbmdLZXlzOgorICAgICAgICAqbGVuZ3RoID0gYnJsLT5kYXRhLT5wYWNrZXRTaXplLnJvdXRpbmdLZXlzICsgMTsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBCUkxfUFZSX0lOVkFMSUQ7CisgICAgfQorICB9IGVsc2UgeworICAgIGFkanVzdFBhY2tldExlbmd0aChieXRlcywgc2l6ZSwgbGVuZ3RoKTsKKyAgfQorCisgIHJldHVybiBCUkxfUFZSX0lOQ0xVREU7Cit9CisKK3N0YXRpYyBpbnQKK3JlYWRIaWQxUGFja2V0IChCcmFpbGxlRGlzcGxheSAqYnJsLCB1bnNpZ25lZCBjaGFyICpwYWNrZXQsIGludCBzaXplKSB7CisgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHBhY2tldExlbmd0aHNbXSA9IHsKKyAgICBbQkFVTV9SU1BfQ2VsbENvdW50XSAgPSAyLAorICAgIFtCQVVNX1JTUF9EaXNwbGF5S2V5c10gID0gMiwKKyAgICBbQkFVTV9SU1BfUm91dGluZ0tleV0gID0gMiwKKyAgICBbQkFVTV9SU1BfRW50cnlLZXlzXSAgPSAzLAorICAgIFtCQVVNX1JTUF9Kb3lzdGlja10gID0gMiwKKyAgICBbQkFVTV9SU1BfRGV2aWNlSWRlbnRpdHldICA9IDE3LAorICAgIFtCQVVNX1JTUF9TZXJpYWxOdW1iZXJdICA9IDksCisgIH07CisKKyAgSGlkUGFja2V0VmVyaWZpY2F0aW9uRGF0YSBwdmQgPSB7CisgICAgLnBhY2tldExlbmd0aHMgPSB7CisgICAgICAudGFibGUgPSBwYWNrZXRMZW5ndGhzLAorICAgICAgLmNvdW50ID0gQVJSQVlfQ09VTlQocGFja2V0TGVuZ3RocykKKyAgICB9CisgIH07CisKKyAgbWVtc2V0KHBhY2tldCwgMCwgc2l6ZSk7CisgIHJldHVybiByZWFkQnJhaWxsZVBhY2tldChicmwsIE5VTEwsIHBhY2tldCwgc2l6ZSwgdmVyaWZ5SGlkUGFja2V0LCAmcHZkKTsKK30KKworc3RhdGljIGludAorcmVhZEhpZDJQYWNrZXQgKEJyYWlsbGVEaXNwbGF5ICpicmwsIHVuc2lnbmVkIGNoYXIgKnBhY2tldCwgaW50IHNpemUpIHsKKyAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgcGFja2V0TGVuZ3Roc1tdID0geworICAgIFtCQVVNX1JTUF9DZWxsQ291bnRdICA9IDE3LAorICAgIFtCQVVNX1JTUF9EaXNwbGF5S2V5c10gID0gMTcsCisgICAgW0JBVU1fUlNQX1JvdXRpbmdLZXldICA9IDE3LAorICAgIFtCQVVNX1JTUF9FbnRyeUtleXNdICA9IDE3LAorICAgIFtCQVVNX1JTUF9Kb3lzdGlja10gID0gMTcsCisgICAgW0JBVU1fUlNQX0RldmljZUlkZW50aXR5XSAgPSAxNywKKyAgICBbQkFVTV9SU1BfU2VyaWFsTnVtYmVyXSAgPSAxNywKKyAgfTsKKworICBIaWRQYWNrZXRWZXJpZmljYXRpb25EYXRhIHB2ZCA9IHsKKyAgICAucGFja2V0TGVuZ3RocyA9IHsKKyAgICAgIC50YWJsZSA9IHBhY2tldExlbmd0aHMsCisgICAgICAuY291bnQgPSBBUlJBWV9DT1VOVChwYWNrZXRMZW5ndGhzKQorICAgIH0KKyAgfTsKKworICBtZW1zZXQocGFja2V0LCAwLCBzaXplKTsKKyAgcmV0dXJuIHJlYWRCcmFpbGxlUGFja2V0KGJybCwgTlVMTCwgcGFja2V0LCBzaXplLCB2ZXJpZnlIaWRQYWNrZXQsICZwdmQpOworfQorCitzdGF0aWMgaW50CitnZXRIaWRQYWNrZXQgKEJyYWlsbGVEaXNwbGF5ICpicmwsIEhpZFJlc3BvbnNlUGFja2V0ICpwYWNrZXQpIHsKKyAgcmV0dXJuIGJybC0+ZGF0YS0+cHJvdG9jb2wtPnJlYWRQYWNrZXQoYnJsLCBwYWNrZXQtPmJ5dGVzLCBzaXplb2YoKnBhY2tldCkpOworfQorCitzdGF0aWMgaW50Cit3cml0ZUhpZFBhY2tldCAoQnJhaWxsZURpc3BsYXkgKmJybCwgY29uc3QgdW5zaWduZWQgY2hhciAqcGFja2V0LCBpbnQgbGVuZ3RoKSB7CisgIHJldHVybiB3cml0ZUJyYWlsbGVQYWNrZXQoYnJsLCBOVUxMLCBwYWNrZXQsIGxlbmd0aCk7Cit9CisKK3N0YXRpYyB2b2lkCitoYW5kbGVIaWREZXZpY2VJZGVudGl0eSAoY29uc3QgSGlkUmVzcG9uc2VQYWNrZXQgKnBhY2tldCwgaW50IHByb2JpbmcpIHsKKyAgY29uc3QgY2hhciAqaWRlbnRpdHkgPSBwYWNrZXQtPmZpZWxkcy5kYXRhLmRldmljZUlkZW50aXR5OworICBzaXplX3Qgc2l6ZSA9IHNpemVvZihwYWNrZXQtPmZpZWxkcy5kYXRhLmRldmljZUlkZW50aXR5KTsKKworICBsb2dUZXh0RmllbGQoIkJhdW0gRGV2aWNlIElkZW50aXR5IiwgaWRlbnRpdHksIHNpemUpOworICBpZiAocHJvYmluZykgc2V0QmF1bURldmljZVR5cGUoaWRlbnRpdHksIHNpemUpOworfQorCitzdGF0aWMgdm9pZAorbG9nSGlkU2VyaWFsTnVtYmVyIChjb25zdCBIaWRSZXNwb25zZVBhY2tldCAqcGFja2V0KSB7CisgIGxvZ1RleHRGaWVsZCgiQmF1bSBTZXJpYWwgTnVtYmVyIiwKKyAgICAgICAgICAgICAgIHBhY2tldC0+ZmllbGRzLmRhdGEuc2VyaWFsTnVtYmVyLAorICAgICAgICAgICAgICAgc2l6ZW9mKHBhY2tldC0+ZmllbGRzLmRhdGEuc2VyaWFsTnVtYmVyKSk7Cit9CisKK3N0YXRpYyBpbnQKK3Byb2JlSGlkRGV2aWNlIChCcmFpbGxlRGlzcGxheSAqYnJsKSB7CisgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHBhY2tldFtdID0gezBYMDIsIDBYMDB9OworCisgIGlmICh3cml0ZUJyYWlsbGVQYWNrZXQoYnJsLCBOVUxMLCBwYWNrZXQsIHNpemVvZihwYWNrZXQpKSkgeworICAgIGludCBoYXZlQ2VsbENvdW50ID0gMDsKKyAgICBpbnQgaGF2ZURldmljZUlkZW50aXR5ID0gMDsKKyAgICBpbnQgaWRlbnRpdHlDZWxsQ291bnQgPSAwOworCisgICAgYmF1bURldmljZVR5cGUgPSBCQVVNX0RFVklDRV9EZWZhdWx0OworICAgIGNlbGxDb3VudCA9IDA7CisKKyAgICB3aGlsZSAoYXdhaXRCcmFpbGxlSW5wdXQoYnJsLCBwcm9iZVRpbWVvdXQpKSB7CisgICAgICBIaWRSZXNwb25zZVBhY2tldCBwYWNrZXQ7CisgICAgICBzaXplX3Qgc2l6ZSA9IGdldEhpZFBhY2tldChicmwsICZwYWNrZXQpOworICAgICAgaWYgKCFzaXplKSBicmVhazsKKworICAgICAgc3dpdGNoIChwYWNrZXQuZmllbGRzLnR5cGUpIHsKKyAgICAgICAgY2FzZSBCQVVNX1JTUF9DZWxsQ291bnQ6IHsKKyAgICAgICAgICB1bnNpZ25lZCBjaGFyIGNvdW50ID0gcGFja2V0LmZpZWxkcy5kYXRhLmNlbGxDb3VudFswXTsKKworICAgICAgICAgIGlmIChpc0FjY2VwdGFibGVDZWxsQ291bnQoY291bnQpKSB7CisgICAgICAgICAgICBjZWxsQ291bnQgPSBjb3VudDsKKyAgICAgICAgICAgIGhhdmVDZWxsQ291bnQgPSAxOworICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBsb2dVbmV4cGVjdGVkQ2VsbENvdW50KGNvdW50KTsKKyAgICAgICAgICB9CisKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGNhc2UgQkFVTV9SU1BfRGV2aWNlSWRlbnRpdHk6IHsKKyAgICAgICAgICBpbnQgY291bnQgPSBnZXRJZGVudGl0eUNlbGxDb3VudChwYWNrZXQuZmllbGRzLmRhdGEuZGV2aWNlSWRlbnRpdHksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKHBhY2tldC5maWVsZHMuZGF0YS5kZXZpY2VJZGVudGl0eSkpOworICAgICAgICAgIGlmIChjb3VudCkgaWRlbnRpdHlDZWxsQ291bnQgPSBjb3VudDsKKyAgICAgICAgICBoYW5kbGVIaWREZXZpY2VJZGVudGl0eSgmcGFja2V0LCAxKTsKKyAgICAgICAgICBoYXZlRGV2aWNlSWRlbnRpdHkgPSAxOworICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgY2FzZSBCQVVNX1JTUF9TZXJpYWxOdW1iZXI6CisgICAgICAgICAgbG9nSGlkU2VyaWFsTnVtYmVyKCZwYWNrZXQpOworICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgbG9nVW5leHBlY3RlZFBhY2tldChwYWNrZXQuYnl0ZXMsIHNpemUpOworICAgICAgICAgIGJyZWFrOworICAgICAgfQorCisgICAgICBpZiAoaGF2ZUNlbGxDb3VudCAmJiBoYXZlRGV2aWNlSWRlbnRpdHkpIHJldHVybiAxOworICAgIH0KKworICAgIGlmICghY2VsbENvdW50ICYmIGlkZW50aXR5Q2VsbENvdW50KSB7CisgICAgICAvKiBPbGRlciBtb2RlbHMgZG9uJ3QgcHJvdmlkZSB0aGUgYWN0dWFsIGNlbGwgY291bnQKKyAgICAgICAqIHNvIGl0IG11c3QgYmUgZGVyaXZlZCBmcm9tIHRoZSBpZGVudGl0eSBzdHJpbmcuCisgICAgICAgKi8KKyAgICAgIGNlbGxDb3VudCA9IGlkZW50aXR5Q2VsbENvdW50OworICAgICAgcmV0dXJuIDE7CisgICAgfQorICB9CisKKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkCitwcm9jZXNzSGlkUGFja2V0cyAoQnJhaWxsZURpc3BsYXkgKmJybCkgeworICBIaWRSZXNwb25zZVBhY2tldCBwYWNrZXQ7CisgIHNpemVfdCBzaXplOworCisgIHdoaWxlICgoc2l6ZSA9IGdldEhpZFBhY2tldChicmwsICZwYWNrZXQpKSkgeworICAgIHN3aXRjaCAocGFja2V0LmZpZWxkcy50eXBlKSB7CisgICAgICBjYXNlIEJBVU1fUlNQX0NlbGxDb3VudDoKKyAgICAgICAgaWYgKCFjaGFuZ2VDZWxsQ291bnQoYnJsLCBwYWNrZXQuZmllbGRzLmRhdGEuY2VsbENvdW50WzBdKSkgcmV0dXJuOworICAgICAgICBjb250aW51ZTsKKworICAgICAgY2FzZSBCQVVNX1JTUF9Sb3V0aW5nS2V5OgorICAgICAgICByZXNldEtleUdyb3VwKHBhY2tldC5maWVsZHMuZGF0YS5yb3V0aW5nS2V5cywgY2VsbENvdW50LCBwYWNrZXQuZmllbGRzLmRhdGEucm91dGluZ0tleVswXSk7CisgICAgICBjYXNlIEJBVU1fUlNQX1JvdXRpbmdLZXlzOgorICAgICAgICB1cGRhdGVSb3V0aW5nS2V5cyhicmwsIHBhY2tldC5maWVsZHMuZGF0YS5yb3V0aW5nS2V5cywgY2VsbENvdW50KTsKKyAgICAgICAgY29udGludWU7CisKKyAgICAgIGNhc2UgQkFVTV9SU1BfRGlzcGxheUtleXM6CisgICAgICAgIHVwZGF0ZURpc3BsYXlLZXlzKGJybCwgcGFja2V0LmZpZWxkcy5kYXRhLmRpc3BsYXlLZXlzWzBdKTsKKyAgICAgICAgY29udGludWU7CisKKyAgICAgIGNhc2UgQkFVTV9SU1BfRW50cnlLZXlzOgorICAgICAgICB1cGRhdGVFbnRyeUtleXMoYnJsLCBwYWNrZXQuZmllbGRzLmRhdGEuZW50cnlLZXlzKTsKKyAgICAgICAgY29udGludWU7CisKKyAgICAgIGNhc2UgQkFVTV9SU1BfSm95c3RpY2s6CisgICAgICAgIHVwZGF0ZUpveXN0aWNrKGJybCwgcGFja2V0LmZpZWxkcy5kYXRhLmpveXN0aWNrKTsKKyAgICAgICAgY29udGludWU7CisKKyAgICAgIGNhc2UgQkFVTV9SU1BfRGV2aWNlSWRlbnRpdHk6CisgICAgICAgIGhhbmRsZUhpZERldmljZUlkZW50aXR5KCZwYWNrZXQsIDApOworICAgICAgICBjb250aW51ZTsKKworICAgICAgY2FzZSBCQVVNX1JTUF9TZXJpYWxOdW1iZXI6CisgICAgICAgIGxvZ0hpZFNlcmlhbE51bWJlcigmcGFja2V0KTsKKyAgICAgICAgY29udGludWU7CisKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIGxvZ1VuZXhwZWN0ZWRQYWNrZXQocGFja2V0LmJ5dGVzLCBzaXplKTsKKyAgICAgICAgY29udGludWU7CisgICAgfQorICB9Cit9CisKK3N0YXRpYyBpbnQKK3dyaXRlSGlkQ2VsbHMgKEJyYWlsbGVEaXNwbGF5ICpicmwpIHsKKyAgdW5zaWduZWQgY2hhciBwYWNrZXRbMSArIGNlbGxDb3VudF07CisgIHVuc2lnbmVkIGNoYXIgKmJ5dGUgPSBwYWNrZXQ7CisKKyAgKmJ5dGUrKyA9IEJBVU1fUkVRX0Rpc3BsYXlEYXRhOworICBieXRlID0gbWVtcGNweShieXRlLCBleHRlcm5hbENlbGxzLCBjZWxsQ291bnQpOworCisgIHJldHVybiB3cml0ZUhpZFBhY2tldChicmwsIHBhY2tldCwgYnl0ZS1wYWNrZXQpOworfQorCitzdGF0aWMgaW50Cit3cml0ZUhpZENlbGxSYW5nZSAoQnJhaWxsZURpc3BsYXkgKmJybCwgdW5zaWduZWQgaW50IHN0YXJ0LCB1bnNpZ25lZCBpbnQgY291bnQpIHsKKyAgcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBjb25zdCBQcm90b2NvbE9wZXJhdGlvbnMgYmF1bUhpZDFPcGVyYXRpb25zID0geworICAubmFtZSA9ICJCYXVtIEhJRDEiLAorICAuZG90c1RhYmxlID0gJmRvdHNUYWJsZV9JU08xMTU0OF8xLAorCisgIC5yZWFkUGFja2V0ID0gcmVhZEhpZDFQYWNrZXQsCisgIC53cml0ZVBhY2tldCA9IHdyaXRlSGlkUGFja2V0LAorCisgIC5wcm9iZURldmljZSA9IHByb2JlSGlkRGV2aWNlLAorICAucHJvY2Vzc1BhY2tldHMgPSBwcm9jZXNzSGlkUGFja2V0cywKKworICAud3JpdGVDZWxscyA9IHdyaXRlSGlkQ2VsbHMsCisgIC53cml0ZUNlbGxSYW5nZSA9IHdyaXRlSGlkQ2VsbFJhbmdlCit9OworCitzdGF0aWMgY29uc3QgUHJvdG9jb2xPcGVyYXRpb25zIGJhdW1IaWQyT3BlcmF0aW9ucyA9IHsKKyAgLm5hbWUgPSAiQmF1bSBISUQyIiwKKyAgLmRvdHNUYWJsZSA9ICZkb3RzVGFibGVfSVNPMTE1NDhfMSwKKworICAucmVhZFBhY2tldCA9IHJlYWRIaWQyUGFja2V0LAorICAud3JpdGVQYWNrZXQgPSB3cml0ZUhpZFBhY2tldCwKKworICAucHJvYmVEZXZpY2UgPSBwcm9iZUhpZERldmljZSwKKyAgLnByb2Nlc3NQYWNrZXRzID0gcHJvY2Vzc0hpZFBhY2tldHMsCisKKyAgLndyaXRlQ2VsbHMgPSB3cml0ZUhpZENlbGxzLAorICAud3JpdGVDZWxsUmFuZ2UgPSB3cml0ZUhpZENlbGxSYW5nZQorfTsKKworLyogSGFuZHlUZWNoIFByb3RvY29sICovCisKK3R5cGVkZWYgZW51bSB7CisgIEhUX1JFUV9XUklURSA9IDBYMDEsCisgIEhUX1JFUV9SRVNFVCA9IDBYRkYKK30gSGFuZHlUZWNoUmVxdWVzdENvZGU7CisKK3R5cGVkZWYgZW51bSB7CisgIEhUX1JTUF9LRVlfQjEgICAgPSAwWDAzLAorICBIVF9SU1BfS0VZX1VwICAgID0gMFgwNCwKKyAgSFRfUlNQX0tFWV9CMiAgICA9IDBYMDcsCisgIEhUX1JTUF9LRVlfRG4gICAgPSAwWDA4LAorICBIVF9SU1BfS0VZX0IzICAgID0gMFgwQiwKKyAgSFRfUlNQX0tFWV9CNCAgICA9IDBYMEYsCisgIEhUX1JTUF9LRVlfQ1IxICAgPSAwWDIwLAorICBIVF9SU1BfV1JJVEVfQUNLID0gMFg3RSwKKyAgSFRfUlNQX1JFTEVBU0UgICA9IDBYODAsCisgIEhUX1JTUF9JREVOVElUWSAgPSAwWEZFCit9IEhhbmR5VGVjaFJlc3BvbnNlQ29kZTsKKyNkZWZpbmUgSFRfSVNfUk9VVElOR19LRVkoY29kZSkgKCgoY29kZSkgPj0gSFRfUlNQX0tFWV9DUjEpICYmICgoY29kZSkgPCAoSFRfUlNQX0tFWV9DUjEgKyBicmwtPnRleHRDb2x1bW5zKSkpCisKK3R5cGVkZWYgdW5pb24geworICB1bnNpZ25lZCBjaGFyIGJ5dGVzWzJdOworCisgIHN0cnVjdCB7CisgICAgdW5zaWduZWQgY2hhciBjb2RlOworCisgICAgdW5pb24geworICAgICAgdW5zaWduZWQgY2hhciBpZGVudGl0eTsKKyAgICB9IFBBQ0tFRCB2YWx1ZXM7CisgIH0gUEFDS0VEIGRhdGE7Cit9IFBBQ0tFRCBIYW5keVRlY2hSZXNwb25zZVBhY2tldDsKKwordHlwZWRlZiBzdHJ1Y3QgeworICBjb25zdCBjaGFyICpuYW1lOworICB1bnNpZ25lZCBjaGFyIGlkZW50aXR5OworICB1bnNpZ25lZCBjaGFyIHRleHRDb3VudDsKKyAgdW5zaWduZWQgY2hhciBzdGF0dXNDb3VudDsKK30gSGFuZHlUZWNoTW9kZWxFbnRyeTsKKworc3RhdGljIGNvbnN0IEhhbmR5VGVjaE1vZGVsRW50cnkgaGFuZHlUZWNoTW9kZWxUYWJsZVtdID0geworICB7ICJNb2R1bGFyIDgwIiwKKyAgICAwWDg4LCA4MCwgNAorICB9CisgICwKKyAgeyAiTW9kdWxhciA0MCIsCisgICAgMFg4OSwgNDAsIDQKKyAgfQorICAsCisgIHtOVUxMfSAgICAgICAgCit9Oworc3RhdGljIGNvbnN0IEhhbmR5VGVjaE1vZGVsRW50cnkgKmh0OworCitzdGF0aWMgaW50CityZWFkSGFuZHlUZWNoUGFja2V0IChCcmFpbGxlRGlzcGxheSAqYnJsLCB1bnNpZ25lZCBjaGFyICpwYWNrZXQsIGludCBzaXplKSB7CisgIGludCBvZmZzZXQgPSAwOworICBpbnQgbGVuZ3RoID0gMDsKKworICB3aGlsZSAoMSkgeworICAgIHVuc2lnbmVkIGNoYXIgYnl0ZTsKKworICAgIGlmICghZ2lvUmVhZEJ5dGUoYnJsLT5naW9FbmRwb2ludCwgJmJ5dGUsIG9mZnNldD4wKSkgeworICAgICAgaWYgKG9mZnNldCA+IDApIGxvZ1BhcnRpYWxQYWNrZXQocGFja2V0LCBvZmZzZXQpOworICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgaWYgKG9mZnNldCA8IHNpemUpIHsKKyAgICAgIGlmIChvZmZzZXQgPT0gMCkgeworICAgICAgICBzd2l0Y2ggKGJ5dGUpIHsKKyAgICAgICAgICBjYXNlIEhUX1JTUF9JREVOVElUWToKKyAgICAgICAgICAgIGxlbmd0aCA9IDI7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgIGNhc2UgSFRfUlNQX1dSSVRFX0FDSzoKKyAgICAgICAgICAgIGxlbmd0aCA9IDE7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgIGRlZmF1bHQ6IHsKKyAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIga2V5ID0gYnl0ZSAmIH5IVF9SU1BfUkVMRUFTRTsKKyAgICAgICAgICAgIHN3aXRjaCAoa2V5KSB7CisgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgaWYgKCFIVF9JU19ST1VUSU5HX0tFWShrZXkpKSB7CisgICAgICAgICAgICAgICAgICBsb2dVbmtub3duUGFja2V0KGJ5dGUpOworICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgIGNhc2UgSFRfUlNQX0tFWV9VcDoKKyAgICAgICAgICAgICAgY2FzZSBIVF9SU1BfS0VZX0RuOgorICAgICAgICAgICAgICBjYXNlIEhUX1JTUF9LRVlfQjE6CisgICAgICAgICAgICAgIGNhc2UgSFRfUlNQX0tFWV9CMjoKKyAgICAgICAgICAgICAgY2FzZSBIVF9SU1BfS0VZX0IzOgorICAgICAgICAgICAgICBjYXNlIEhUX1JTUF9LRVlfQjQ6CisgICAgICAgICAgICAgICAgbGVuZ3RoID0gMTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgfQorCisgICAgICBwYWNrZXRbb2Zmc2V0XSA9IGJ5dGU7CisgICAgfSBlbHNlIHsKKyAgICAgIGlmIChvZmZzZXQgPT0gc2l6ZSkgbG9nVHJ1bmNhdGVkUGFja2V0KHBhY2tldCwgb2Zmc2V0KTsKKyAgICAgIGxvZ0Rpc2NhcmRlZEJ5dGUoYnl0ZSk7CisgICAgfQorCisgICAgaWYgKCsrb2Zmc2V0ID09IGxlbmd0aCkgeworICAgICAgaWYgKG9mZnNldCA+IHNpemUpIHsKKyAgICAgICAgb2Zmc2V0ID0gMDsKKyAgICAgICAgbGVuZ3RoID0gMDsKKyAgICAgICAgY29udGludWU7CisgICAgICB9CisKKyAgICAgIGxvZ0lucHV0UGFja2V0KHBhY2tldCwgb2Zmc2V0KTsKKyAgICAgIHJldHVybiBsZW5ndGg7CisgICAgfQorICB9Cit9CisKK3N0YXRpYyBpbnQKK2dldEhhbmR5VGVjaFBhY2tldCAoQnJhaWxsZURpc3BsYXkgKmJybCwgSGFuZHlUZWNoUmVzcG9uc2VQYWNrZXQgKnBhY2tldCkgeworICByZXR1cm4gcmVhZEhhbmR5VGVjaFBhY2tldChicmwsIHBhY2tldC0+Ynl0ZXMsIHNpemVvZigqcGFja2V0KSk7Cit9CisKK3N0YXRpYyBpbnQKK3dyaXRlSGFuZHlUZWNoUGFja2V0IChCcmFpbGxlRGlzcGxheSAqYnJsLCBjb25zdCB1bnNpZ25lZCBjaGFyICpwYWNrZXQsIGludCBsZW5ndGgpIHsKKyAgcmV0dXJuIHdyaXRlQnJhaWxsZVBhY2tldChicmwsIE5VTEwsIHBhY2tldCwgbGVuZ3RoKTsKK30KKworc3RhdGljIGNvbnN0IEhhbmR5VGVjaE1vZGVsRW50cnkgKgorZmluZEhhbmR5VGVjaE1vZGVsICh1bnNpZ25lZCBjaGFyIGlkZW50aXR5KSB7CisgIGNvbnN0IEhhbmR5VGVjaE1vZGVsRW50cnkgKm1vZGVsOworCisgIGZvciAobW9kZWw9aGFuZHlUZWNoTW9kZWxUYWJsZTsgbW9kZWwtPm5hbWU7ICsrbW9kZWwpIHsKKyAgICBpZiAoaWRlbnRpdHkgPT0gbW9kZWwtPmlkZW50aXR5KSB7CisgICAgICBsb2dNZXNzYWdlKExPR19JTkZPLCAiQmF1bSBlbXVsYXRpb246IEhhbmR5VGVjaCBNb2RlbDogJTAyWCAtPiAlcyIsIGlkZW50aXR5LCBtb2RlbC0+bmFtZSk7CisgICAgICByZXR1cm4gbW9kZWw7CisgICAgfQorICB9CisKKyAgbG9nTWVzc2FnZShMT0dfV0FSTklORywgIkJhdW0gZW11bGF0aW9uOiB1bmtub3duIEhhbmR5VGVjaCBpZGVudGl0eSBjb2RlOiAlMDJYIiwgaWRlbnRpdHkpOworICByZXR1cm4gTlVMTDsKK30KKworc3RhdGljIGludAorcHJvYmVIYW5keVRlY2hEZXZpY2UgKEJyYWlsbGVEaXNwbGF5ICpicmwpIHsKKyAgaW50IHByb2JlcyA9IDA7CisgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHJlcXVlc3RbXSA9IHtIVF9SRVFfUkVTRVR9OworICB3aGlsZSAod3JpdGVIYW5keVRlY2hQYWNrZXQoYnJsLCByZXF1ZXN0LCBzaXplb2YocmVxdWVzdCkpKSB7CisgICAgd2hpbGUgKGF3YWl0QnJhaWxsZUlucHV0KGJybCwgcHJvYmVUaW1lb3V0KSkgeworICAgICAgSGFuZHlUZWNoUmVzcG9uc2VQYWNrZXQgcmVzcG9uc2U7CisgICAgICBpZiAoZ2V0SGFuZHlUZWNoUGFja2V0KGJybCwgJnJlc3BvbnNlKSkgeworICAgICAgICBpZiAocmVzcG9uc2UuZGF0YS5jb2RlID09IEhUX1JTUF9JREVOVElUWSkgeworICAgICAgICAgIGlmICghKGh0ID0gZmluZEhhbmR5VGVjaE1vZGVsKHJlc3BvbnNlLmRhdGEudmFsdWVzLmlkZW50aXR5KSkpIHJldHVybiAwOworICAgICAgICAgIGNlbGxDb3VudCA9IGh0LT50ZXh0Q291bnQ7CisgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9CisgICAgaWYgKGVycm5vICE9IEVBR0FJTikgYnJlYWs7CisgICAgaWYgKCsrcHJvYmVzID09IHByb2JlTGltaXQpIGJyZWFrOworICB9CisKKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkCitwcm9jZXNzSGFuZHlUZWNoUGFja2V0cyAoQnJhaWxsZURpc3BsYXkgKmJybCkgeworICBIYW5keVRlY2hSZXNwb25zZVBhY2tldCBwYWNrZXQ7CisgIGludCBzaXplOworCisgIHdoaWxlICgoc2l6ZSA9IGdldEhhbmR5VGVjaFBhY2tldChicmwsICZwYWNrZXQpKSkgeworICAgIHVuc2lnbmVkIGNoYXIgY29kZSA9IHBhY2tldC5kYXRhLmNvZGU7CisKKyAgICBzd2l0Y2ggKGNvZGUpIHsKKyAgICAgIGNhc2UgSFRfUlNQX0lERU5USVRZOiB7CisgICAgICAgIGNvbnN0IEhhbmR5VGVjaE1vZGVsRW50cnkgKm1vZGVsID0gZmluZEhhbmR5VGVjaE1vZGVsKHBhY2tldC5kYXRhLnZhbHVlcy5pZGVudGl0eSk7CisgICAgICAgIGlmIChtb2RlbCAmJiAobW9kZWwgIT0gaHQpKSB7CisgICAgICAgICAgaHQgPSBtb2RlbDsKKyAgICAgICAgICBpZiAoIWNoYW5nZUNlbGxDb3VudChicmwsIGh0LT50ZXh0Q291bnQpKSByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgY29udGludWU7CisgICAgICB9CisKKyAgICAgIGNhc2UgSFRfUlNQX1dSSVRFX0FDSzoKKyAgICAgICAgY29udGludWU7CisgICAgfQorCisgICAgeworICAgICAgdW5zaWduZWQgY2hhciAqc2V0OworICAgICAgS2V5R3JvdXAgZ3JvdXA7CisgICAgICB1bnNpZ25lZCBjaGFyIGtleSA9IGNvZGUgJiB+SFRfUlNQX1JFTEVBU0U7CisgICAgICBpbnQgcHJlc3MgPSAoY29kZSAmIEhUX1JTUF9SRUxFQVNFKSA9PSAwOworCisgICAgICBpZiAoSFRfSVNfUk9VVElOR19LRVkoa2V5KSkgeworICAgICAgICBzZXQgPSBrZXlzU3RhdGUucm91dGluZ0tleXM7CisgICAgICAgIGdyb3VwID0gQk1fR1JQX1JvdXRpbmdLZXlzOworICAgICAgICBrZXkgLT0gSFRfUlNQX0tFWV9DUjE7CisgICAgICB9IGVsc2UgeworICAgICAgICBzZXQgPSBrZXlzU3RhdGUubmF2aWdhdGlvbktleXM7CisgICAgICAgIGdyb3VwID0gQk1fR1JQX05hdmlnYXRpb25LZXlzOworCisgICAgICAgIHN3aXRjaCAoa2V5KSB7CisjZGVmaW5lIEtFWShodCxiYXVtKSBjYXNlIEhUX1JTUF9LRVlfIyNodDoga2V5ID0gQk1fS0VZX0RJU1BMQVkgKyBiYXVtOyBicmVhaworICAgICAgICAgIEtFWShVcCwgMCk7CisgICAgICAgICAgS0VZKEIxLCAxKTsKKyAgICAgICAgICBLRVkoRG4sIDIpOworICAgICAgICAgIEtFWShCMiwgMyk7CisgICAgICAgICAgS0VZKEIzLCA0KTsKKyAgICAgICAgICBLRVkoQjQsIDUpOworI3VuZGVmIEtFWQorCisgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGxvZ1VuZXhwZWN0ZWRQYWNrZXQocGFja2V0LmJ5dGVzLCBzaXplKTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICB9CisKKyAgICAgIGlmIChzZXRHcm91cGVkS2V5KHNldCwga2V5LCBwcmVzcykpIGVucXVldWVLZXlFdmVudChicmwsIGdyb3VwLCBrZXksIHByZXNzKTsKKyAgICB9CisgIH0KK30KKworc3RhdGljIGludAord3JpdGVIYW5keVRlY2hDZWxscyAoQnJhaWxsZURpc3BsYXkgKmJybCkgeworICB1bnNpZ25lZCBjaGFyIHBhY2tldFsxICsgaHQtPnN0YXR1c0NvdW50ICsgaHQtPnRleHRDb3VudF07CisgIHVuc2lnbmVkIGNoYXIgKmJ5dGUgPSBwYWNrZXQ7CisKKyAgKmJ5dGUrKyA9IEhUX1JFUV9XUklURTsKKworICB7CisgICAgaW50IGNvdW50ID0gaHQtPnN0YXR1c0NvdW50OworICAgIHdoaWxlIChjb3VudC0tID4gMCkgKmJ5dGUrKyA9IDA7CisgIH0KKworICBieXRlID0gbWVtcGNweShieXRlLCBleHRlcm5hbENlbGxzLCBodC0+dGV4dENvdW50KTsKKworICByZXR1cm4gd3JpdGVIYW5keVRlY2hQYWNrZXQoYnJsLCBwYWNrZXQsIGJ5dGUtcGFja2V0KTsKK30KKworc3RhdGljIGludAord3JpdGVIYW5keVRlY2hDZWxsUmFuZ2UgKEJyYWlsbGVEaXNwbGF5ICpicmwsIHVuc2lnbmVkIGludCBzdGFydCwgdW5zaWduZWQgaW50IGNvdW50KSB7CisgIHJldHVybiAxOworfQorCitzdGF0aWMgY29uc3QgUHJvdG9jb2xPcGVyYXRpb25zIGhhbmR5VGVjaE9wZXJhdGlvbnMgPSB7CisgIC5uYW1lID0gIkhhbmR5VGVjaCIsCisgIC5kb3RzVGFibGUgPSAmZG90c1RhYmxlX0lTTzExNTQ4XzEsCisKKyAgLnNlcmlhbEJhdWQgPSAxOTIwMCwKKyAgLnNlcmlhbFBhcml0eSA9IFNFUklBTF9QQVJJVFlfT0RELAorCisgIC5yZWFkUGFja2V0ID0gcmVhZEhhbmR5VGVjaFBhY2tldCwKKyAgLndyaXRlUGFja2V0ID0gd3JpdGVIYW5keVRlY2hQYWNrZXQsCisKKyAgLnByb2JlRGV2aWNlID0gcHJvYmVIYW5keVRlY2hEZXZpY2UsCisgIC5wcm9jZXNzUGFja2V0cyA9IHByb2Nlc3NIYW5keVRlY2hQYWNrZXRzLAorCisgIC53cml0ZUNlbGxzID0gd3JpdGVIYW5keVRlY2hDZWxscywKKyAgLndyaXRlQ2VsbFJhbmdlID0gd3JpdGVIYW5keVRlY2hDZWxsUmFuZ2UKK307CisKKy8qIFBvd2VyQnJhaWxsZSBQcm90b2NvbCAqLworCisjZGVmaW5lIFBCX0JVVFRPTlMwX01BUktFUiAgICAwWDYwCisjZGVmaW5lIFBCMV9CVVRUT05TMF9EaXNwbGF5NiAwWDA4CisjZGVmaW5lIFBCMV9CVVRUT05TMF9EaXNwbGF5NSAwWDA0CisjZGVmaW5lIFBCMV9CVVRUT05TMF9EaXNwbGF5NCAwWDAyCisjZGVmaW5lIFBCMV9CVVRUT05TMF9EaXNwbGF5MiAwWDAxCisjZGVmaW5lIFBCMl9CVVRUT05TMF9EaXNwbGF5MyAwWDA4CisjZGVmaW5lIFBCMl9CVVRUT05TMF9EaXNwbGF5NSAwWDA0CisjZGVmaW5lIFBCMl9CVVRUT05TMF9EaXNwbGF5MSAwWDAyCisjZGVmaW5lIFBCMl9CVVRUT05TMF9EaXNwbGF5MiAwWDAxCisKKyNkZWZpbmUgUEJfQlVUVE9OUzFfTUFSS0VSICAgIDBYRTAKKyNkZWZpbmUgUEIxX0JVVFRPTlMxX0Rpc3BsYXkzIDBYMDgKKyNkZWZpbmUgUEIxX0JVVFRPTlMxX0Rpc3BsYXkxIDBYMDIKKyNkZWZpbmUgUEIyX0JVVFRPTlMxX0Rpc3BsYXk2IDBYMDgKKyNkZWZpbmUgUEIyX0JVVFRPTlMxX0Rpc3BsYXk0IDBYMDIKKwordHlwZWRlZiBlbnVtIHsKKyAgUEJfUkVRX1dSSVRFID0gMFgwNCwKKyAgUEJfUkVRX1JFU0VUID0gMFgwQQorfSBQb3dlckJyYWlsbGVSZXF1ZXN0Q29kZTsKKwordHlwZWRlZiBlbnVtIHsKKyAgUEJfUlNQX0lERU5USVRZID0gMFgwNSwKKyAgUEJfUlNQX1NFTlNPUlMgID0gMFgwOAorfSBQb3dlckJyYWlsbGVSZXNwb25zZUNvZGU7CisKK3R5cGVkZWYgdW5pb24geworICB1bnNpZ25lZCBjaGFyIGJ5dGVzWzExXTsKKworICB1bnNpZ25lZCBjaGFyIGJ1dHRvbnNbMl07CisKKyAgc3RydWN0IHsKKyAgICB1bnNpZ25lZCBjaGFyIHplcm87CisgICAgdW5zaWduZWQgY2hhciBjb2RlOworCisgICAgdW5pb24geworICAgICAgc3RydWN0IHsKKyAgICAgICAgdW5zaWduZWQgY2hhciBjZWxsczsKKyAgICAgICAgdW5zaWduZWQgY2hhciBkb3RzOworICAgICAgICB1bnNpZ25lZCBjaGFyIHZlcnNpb25bNF07CisgICAgICAgIHVuc2lnbmVkIGNoYXIgY2hlY2tzdW1bNF07CisgICAgICB9IFBBQ0tFRCBpZGVudGl0eTsKKworICAgICAgc3RydWN0IHsKKyAgICAgICAgdW5zaWduZWQgY2hhciBjb3VudDsKKyAgICAgICAgdW5zaWduZWQgY2hhciB2ZXJ0aWNhbFs0XTsKKyAgICAgICAgdW5zaWduZWQgY2hhciBob3Jpem9udGFsWzEwXTsKKyAgICAgIH0gUEFDS0VEIHNlbnNvcnM7CisgICAgfSBQQUNLRUQgdmFsdWVzOworICB9IFBBQ0tFRCBkYXRhOworfSBQQUNLRUQgUG93ZXJCcmFpbGxlUmVzcG9uc2VQYWNrZXQ7CisKK3N0YXRpYyBpbnQKK3JlYWRQb3dlckJyYWlsbGVQYWNrZXQgKEJyYWlsbGVEaXNwbGF5ICpicmwsIHVuc2lnbmVkIGNoYXIgKnBhY2tldCwgaW50IHNpemUpIHsKKyAgaW50IG9mZnNldCA9IDA7CisgIGludCBsZW5ndGggPSAwOworCisgIHdoaWxlICgxKSB7CisgICAgdW5zaWduZWQgY2hhciBieXRlOworCisgICAgaWYgKCFnaW9SZWFkQnl0ZShicmwtPmdpb0VuZHBvaW50LCAmYnl0ZSwgb2Zmc2V0PjApKSB7CisgICAgICBpZiAob2Zmc2V0ID4gMCkgbG9nUGFydGlhbFBhY2tldChwYWNrZXQsIG9mZnNldCk7CisgICAgICByZXR1cm4gMDsKKyAgICB9CisgIGhhdmVCeXRlOgorCisgICAgaWYgKG9mZnNldCA9PSAwKSB7CisgICAgICBpZiAoIWJ5dGUpIHsKKyAgICAgICAgbGVuZ3RoID0gMjsKKyAgICAgIH0gZWxzZSBpZiAoKGJ5dGUgJiBQQl9CVVRUT05TMF9NQVJLRVIpID09IFBCX0JVVFRPTlMwX01BUktFUikgeworICAgICAgICBsZW5ndGggPSAyOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgbG9nSWdub3JlZEJ5dGUoYnl0ZSk7CisgICAgICAgIGNvbnRpbnVlOworICAgICAgfQorICAgIH0gZWxzZSBpZiAocGFja2V0WzBdKSB7CisgICAgICBpZiAoKGJ5dGUgJiBQQl9CVVRUT05TMV9NQVJLRVIpICE9IFBCX0JVVFRPTlMxX01BUktFUikgeworICAgICAgICBsb2dTaG9ydFBhY2tldChwYWNrZXQsIG9mZnNldCk7CisgICAgICAgIG9mZnNldCA9IDA7CisgICAgICAgIGxlbmd0aCA9IDA7CisgICAgICAgIGdvdG8gaGF2ZUJ5dGU7CisgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgIGlmIChvZmZzZXQgPT0gMSkgeworICAgICAgICBzd2l0Y2ggKGJ5dGUpIHsKKyAgICAgICAgICBjYXNlIFBCX1JTUF9JREVOVElUWToKKyAgICAgICAgICAgIGxlbmd0aCA9IDEyOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICBjYXNlIFBCX1JTUF9TRU5TT1JTOgorICAgICAgICAgICAgbGVuZ3RoID0gMzsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGxvZ1Vua25vd25QYWNrZXQoYnl0ZSk7CisgICAgICAgICAgICBvZmZzZXQgPSAwOworICAgICAgICAgICAgbGVuZ3RoID0gMDsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICB9IGVsc2UgaWYgKChvZmZzZXQgPT0gMikgJiYgKHBhY2tldFsxXSA9PSBQQl9SU1BfU0VOU09SUykpIHsKKyAgICAgICAgbGVuZ3RoICs9IGJ5dGU7CisgICAgICB9CisgICAgfQorCisgICAgaWYgKG9mZnNldCA8IGxlbmd0aCkgeworICAgICAgcGFja2V0W29mZnNldF0gPSBieXRlOworICAgIH0gZWxzZSB7CisgICAgICBpZiAob2Zmc2V0ID09IHNpemUpIGxvZ1RydW5jYXRlZFBhY2tldChwYWNrZXQsIG9mZnNldCk7CisgICAgICBsb2dEaXNjYXJkZWRCeXRlKGJ5dGUpOworICAgIH0KKworICAgIGlmICgrK29mZnNldCA9PSBsZW5ndGgpIHsKKyAgICAgIGlmIChvZmZzZXQgPiBzaXplKSB7CisgICAgICAgIG9mZnNldCA9IDA7CisgICAgICAgIGxlbmd0aCA9IDA7CisgICAgICAgIGNvbnRpbnVlOworICAgICAgfQorCisgICAgICBsb2dJbnB1dFBhY2tldChwYWNrZXQsIG9mZnNldCk7CisgICAgICByZXR1cm4gbGVuZ3RoOworICAgIH0KKyAgfQorfQorCitzdGF0aWMgaW50CitnZXRQb3dlckJyYWlsbGVQYWNrZXQgKEJyYWlsbGVEaXNwbGF5ICpicmwsIFBvd2VyQnJhaWxsZVJlc3BvbnNlUGFja2V0ICpwYWNrZXQpIHsKKyAgcmV0dXJuIHJlYWRQb3dlckJyYWlsbGVQYWNrZXQoYnJsLCBwYWNrZXQtPmJ5dGVzLCBzaXplb2YoKnBhY2tldCkpOworfQorCitzdGF0aWMgaW50Cit3cml0ZVBvd2VyQnJhaWxsZVBhY2tldCAoQnJhaWxsZURpc3BsYXkgKmJybCwgY29uc3QgdW5zaWduZWQgY2hhciAqcGFja2V0LCBpbnQgbGVuZ3RoKSB7CisgIHVuc2lnbmVkIGNoYXIgYnVmZmVyWzIgKyBsZW5ndGhdOworICB1bnNpZ25lZCBjaGFyICpieXRlID0gYnVmZmVyOworCisgICpieXRlKysgPSAwWEZGOworICAqYnl0ZSsrID0gMFhGRjsKKyAgYnl0ZSA9IG1lbXBjcHkoYnl0ZSwgcGFja2V0LCBsZW5ndGgpOworCisgIHJldHVybiB3cml0ZUJyYWlsbGVQYWNrZXQoYnJsLCBOVUxMLCBidWZmZXIsIChieXRlIC0gYnVmZmVyKSk7Cit9CisKK3N0YXRpYyBpbnQKK3Byb2JlUG93ZXJCcmFpbGxlRGV2aWNlIChCcmFpbGxlRGlzcGxheSAqYnJsKSB7CisgIGludCBwcm9iZXMgPSAwOworICBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciByZXF1ZXN0W10gPSB7UEJfUkVRX1JFU0VUfTsKKyAgd2hpbGUgKHdyaXRlUG93ZXJCcmFpbGxlUGFja2V0KGJybCwgcmVxdWVzdCwgc2l6ZW9mKHJlcXVlc3QpKSkgeworICAgIHdoaWxlIChhd2FpdEJyYWlsbGVJbnB1dChicmwsIHByb2JlVGltZW91dCkpIHsKKyAgICAgIFBvd2VyQnJhaWxsZVJlc3BvbnNlUGFja2V0IHJlc3BvbnNlOworICAgICAgaWYgKGdldFBvd2VyQnJhaWxsZVBhY2tldChicmwsICZyZXNwb25zZSkpIHsKKyAgICAgICAgaWYgKHJlc3BvbnNlLmRhdGEuY29kZSA9PSBQQl9SU1BfSURFTlRJVFkpIHsKKyAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICp2ZXJzaW9uID0gcmVzcG9uc2UuZGF0YS52YWx1ZXMuaWRlbnRpdHkudmVyc2lvbjsKKyAgICAgICAgICBsb2dNZXNzYWdlKExPR19JTkZPLCAiQmF1bSBlbXVsYXRpb246IFBvd2VyQnJhaWxsZSBWZXJzaW9uOiAlYyVjJWMlYyIsCisgICAgICAgICAgICAgICAgICAgICB2ZXJzaW9uWzBdLCB2ZXJzaW9uWzFdLCB2ZXJzaW9uWzJdLCB2ZXJzaW9uWzNdKTsKKyAgICAgICAgICBjZWxsQ291bnQgPSByZXNwb25zZS5kYXRhLnZhbHVlcy5pZGVudGl0eS5jZWxsczsKKyAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgfQorICAgICAgfQorICAgIH0KKyAgICBpZiAoZXJybm8gIT0gRUFHQUlOKSBicmVhazsKKyAgICBpZiAoKytwcm9iZXMgPT0gcHJvYmVMaW1pdCkgYnJlYWs7CisgIH0KKworICByZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQKK3Byb2Nlc3NQb3dlckJyYWlsbGVQYWNrZXRzIChCcmFpbGxlRGlzcGxheSAqYnJsKSB7CisgIFBvd2VyQnJhaWxsZVJlc3BvbnNlUGFja2V0IHBhY2tldDsKKyAgaW50IHNpemU7CisKKyAgd2hpbGUgKChzaXplID0gZ2V0UG93ZXJCcmFpbGxlUGFja2V0KGJybCwgJnBhY2tldCkpKSB7CisgICAgaWYgKCFwYWNrZXQuZGF0YS56ZXJvKSB7CisgICAgICBzd2l0Y2ggKHBhY2tldC5kYXRhLmNvZGUpIHsKKyAgICAgICAgY2FzZSBQQl9SU1BfSURFTlRJVFk6CisgICAgICAgICAgaWYgKCFjaGFuZ2VDZWxsQ291bnQoYnJsLCBwYWNrZXQuZGF0YS52YWx1ZXMuaWRlbnRpdHkuY2VsbHMpKSByZXR1cm47CisgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgY2FzZSBQQl9SU1BfU0VOU09SUzoKKyAgICAgICAgICB1cGRhdGVLZXlHcm91cChicmwsIGtleXNTdGF0ZS5yb3V0aW5nS2V5cywgcGFja2V0LmRhdGEudmFsdWVzLnNlbnNvcnMuaG9yaXpvbnRhbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBCTV9HUlBfUm91dGluZ0tleXMsIDAsIGJybC0+dGV4dENvbHVtbnMsIDApOworICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgYnJlYWs7CisgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgIHVuc2lnbmVkIGNoYXIga2V5cyA9IDA7CisKKyNkZWZpbmUgS0VZKGtleSxpbmRleCkgaWYgKHBhY2tldC5idXR0b25zW2luZGV4XSAmIFBCMl9CVVRUT05TIyNpbmRleCMjX0Rpc3BsYXkjI2tleSkga2V5cyB8PSAxIDw8IChrZXkgLSAxKQorICAgICAgS0VZKDEsIDApOworICAgICAgS0VZKDIsIDApOworICAgICAgS0VZKDMsIDApOworICAgICAgS0VZKDQsIDEpOworICAgICAgS0VZKDUsIDApOworICAgICAgS0VZKDYsIDEpOworI3VuZGVmIEtFWQorCisgICAgICAvKgorICAgICAgICogVGhlIFBCIGVtdWxhdGlvbiBpcyBkZWZpY2llbnQgYXMgdGhlIHByb3RvY29sIGRvZXNuJ3QgcmVwb3J0IGFueQorICAgICAgICoga2V5IHN0YXR1cyB3aGVuIGFsbCBrZXlzIGFyZSByZWxlYXNlZC4gIFRoZSBhYmlsaXR5IHRvIGFjdCBvbgorICAgICAgICogcmVsZWFzZWQga2V5cyBhcyBuZWVkZWQgZm9yIG11bHRpcGxlIGtleSBjb21iaW5hdGlvbnMgaXMsCisgICAgICAgKiB0aGVyZWZvcmUsIGFuIHVuc29sdmFibGUgcHJvYmxlbS4gIFRoZSBUU0kgZHJpdmVyIHdvcmtzIGFyb3VuZAorICAgICAgICogdGhpcyBsaW1pdGF0aW9uIGJ5IGd1ZXNzaW5nIHRoZSAia2V5IGhlbGQiIHN0YXRlIGJhc2VkIG9uIHRoZSBmYWN0CisgICAgICAgKiB0aGF0IG5hdGl2ZSBOYXZpZ2F0b3IvUG93ZXJCcmFpbGxlIGRpc3BsYXlzIHNlbmQgcmVwZWF0ZWQga2V5CisgICAgICAgKiBzdGF0dXMgZm9yIGFzIGxvbmcgYXMgdGhlcmUgaXMgYXQgbGVhc3Qgb25lIGtleSBwcmVzc2VkLiBCYXVtJ3MgUEIKKyAgICAgICAqIGVtdWxhdGlvbiwgaG93ZXZlciwgZG9lc24ndCBkbyB0aGlzLgorICAgICAgICoKKyAgICAgICAqIExldCdzIHRyZWF0IGVhY2ggcGFja2V0IGFzIGEgZGlzY3JldGUgc2V0IG9mIHByZXNzL3JlbGVhc2UgZXZlbnRzLgorICAgICAgICogVGhlIGxpbWl0ZWQgc2V0IG9mIHNpbmdsZSBrZXkgYmluZGluZ3Mgd2lsbCB3b3JrIGp1c3QgZmluZS4KKyAgICAgICAqIE11bHRpLWtleSBjb21iaW5hdGlvbnMgd29uJ3Qgd29yayB2ZXJ5IHdlbGwgYXQgYWxsLCB0aG91Z2gsCisgICAgICAgKiBiZWNhdXNlIGl0J3MgdW5saWtlbHkgdGhhdCB0aGUgdXNlciB3aWxsIGJlIGFibGUgdG8gcHJlc3MgYW5kL29yCisgICAgICAgKiByZWxlYXNlIGFsbCBvZiB0aGUga2V5cyBxdWlja2x5IGVub3VnaCwgYW5kIGJlY2F1c2UgcmVsZWFzaW5nIG9uZQorICAgICAgICoga2V5IGJlZm9yZSB0aGUgb3RoZXJzIHdpbGwgZ2VuZXJhdGUgcHJlc3MgZXZlbnRzIGZvciB0aGUgcmVzdC4KKyAgICAgICAqCisgICAgICAgKiBUaGlzIGlzIGZhciBmcm9tIHBlcmZlY3QsIGJ1dCB0aGF0J3MgdGhlIGJlc3Qgd2UgY2FuIGRvLiBUaGUgUEIKKyAgICAgICAqIGVtdWxhdGlvbiBtb2RlcyAoZWl0aGVyIFBCMSBvciBQQjIpIHNob3VsZCBzaW1wbHkgYmUgYXZvaWRlZAorICAgICAgICogd2hlbmV2ZXIgcG9zc2libGUsIGFuZCBCQVVNIG9yIEhUIHNob3VsZCBiZSB1c2VkIGluc3RlYWQuCisgICAgICAgKi8KKworICAgICAgeworICAgICAgICBjb25zdCBLZXlHcm91cCBncm91cCA9IEJNX0dSUF9OYXZpZ2F0aW9uS2V5czsKKyAgICAgICAgS2V5TnVtYmVyIHByZXNzZWRLZXlzW0JNX0tFWVNfRElTUExBWV07CisgICAgICAgIHVuc2lnbmVkIGNoYXIgcHJlc3NlZENvdW50ID0gMDsKKyAgICAgICAgdW5zaWduZWQgY2hhciBvZmZzZXQ7CisKKyAgICAgICAgZm9yIChvZmZzZXQ9MDsgb2Zmc2V0PEJNX0tFWVNfRElTUExBWTsgb2Zmc2V0Kz0xKSB7CisgICAgICAgICAgaWYgKGtleXMgJiAoMSA8PCBvZmZzZXQpKSB7CisgICAgICAgICAgICBLZXlOdW1iZXIgbnVtYmVyID0gQk1fS0VZX0RJU1BMQVkgKyBvZmZzZXQ7CisKKyAgICAgICAgICAgIGVucXVldWVLZXlFdmVudChicmwsIGdyb3VwLCBudW1iZXIsIDEpOworICAgICAgICAgICAgcHJlc3NlZEtleXNbcHJlc3NlZENvdW50KytdID0gbnVtYmVyOworICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHdoaWxlIChwcmVzc2VkQ291bnQpIGVucXVldWVLZXlFdmVudChicmwsIGdyb3VwLCBwcmVzc2VkS2V5c1stLXByZXNzZWRDb3VudF0sIDApOworICAgICAgfQorCisgICAgICBjb250aW51ZTsKKyAgICB9CisKKyAgICBsb2dVbmV4cGVjdGVkUGFja2V0KHBhY2tldC5ieXRlcywgc2l6ZSk7CisgIH0KK30KKworc3RhdGljIGludAord3JpdGVQb3dlckJyYWlsbGVDZWxscyAoQnJhaWxsZURpc3BsYXkgKmJybCkgeworICB1bnNpZ25lZCBjaGFyIHBhY2tldFs2ICsgKGJybC0+dGV4dENvbHVtbnMgKiAyKV07CisgIHVuc2lnbmVkIGNoYXIgKmJ5dGUgPSBwYWNrZXQ7CisKKyAgKmJ5dGUrKyA9IFBCX1JFUV9XUklURTsKKyAgKmJ5dGUrKyA9IDA7IC8qIGN1cnNvciBtb2RlOiBkaXNhYmxlZCAqLworICAqYnl0ZSsrID0gMDsgLyogY3Vyc29yIHBvc2l0aW9uOiBub3doZXJlICovCisgICpieXRlKysgPSAxOyAvKiBjdXJzb3IgdHlwZTogY29tbWFuZCAqLworICAqYnl0ZSsrID0gYnJsLT50ZXh0Q29sdW1ucyAqIDI7IC8qIGF0dHJpYnV0ZS1kYXRhIHBhaXJzICovCisgICpieXRlKysgPSAwOyAvKiBzdGFydCAqLworCisgIHsKKyAgICBpbnQgaTsKKyAgICBmb3IgKGk9MDsgaTxicmwtPnRleHRDb2x1bW5zOyArK2kpIHsKKyAgICAgICpieXRlKysgPSAwOyAvKiBhdHRyaWJ1dGVzICovCisgICAgICAqYnl0ZSsrID0gZXh0ZXJuYWxDZWxsc1tpXTsgLyogZGF0YSAqLworICAgIH0KKyAgfQorCisgIHJldHVybiB3cml0ZVBvd2VyQnJhaWxsZVBhY2tldChicmwsIHBhY2tldCwgYnl0ZS1wYWNrZXQpOworfQorCitzdGF0aWMgaW50Cit3cml0ZVBvd2VyQnJhaWxsZUNlbGxSYW5nZSAoQnJhaWxsZURpc3BsYXkgKmJybCwgdW5zaWduZWQgaW50IHN0YXJ0LCB1bnNpZ25lZCBpbnQgY291bnQpIHsKKyAgcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBjb25zdCBQcm90b2NvbE9wZXJhdGlvbnMgcG93ZXJCcmFpbGxlT3BlcmF0aW9ucyA9IHsKKyAgLm5hbWUgPSAiUG93ZXJCcmFpbGxlIiwKKyAgLmRvdHNUYWJsZSA9ICZkb3RzVGFibGVfSVNPMTE1NDhfMSwKKworICAuc2VyaWFsQmF1ZCA9IDk2MDAsCisgIC5zZXJpYWxQYXJpdHkgPSBTRVJJQUxfUEFSSVRZX05PTkUsCisKKyAgLnJlYWRQYWNrZXQgPSByZWFkUG93ZXJCcmFpbGxlUGFja2V0LAorICAud3JpdGVQYWNrZXQgPSB3cml0ZVBvd2VyQnJhaWxsZVBhY2tldCwKKworICAucHJvYmVEZXZpY2UgPSBwcm9iZVBvd2VyQnJhaWxsZURldmljZSwKKyAgLnByb2Nlc3NQYWNrZXRzID0gcHJvY2Vzc1Bvd2VyQnJhaWxsZVBhY2tldHMsCisKKyAgLndyaXRlQ2VsbHMgPSB3cml0ZVBvd2VyQnJhaWxsZUNlbGxzLAorICAud3JpdGVDZWxsUmFuZ2UgPSB3cml0ZVBvd2VyQnJhaWxsZUNlbGxSYW5nZQorfTsKKworLyogRHJpdmVyIEhhbmRsZXJzICovCisKK3N0YXRpYyBpbnQKK2Nvbm5lY3RSZXNvdXJjZSAoQnJhaWxsZURpc3BsYXkgKmJybCwgY29uc3QgY2hhciAqaWRlbnRpZmllcikgeworICBzdGF0aWMgY29uc3QgU2VyaWFsUGFyYW1ldGVycyBzZXJpYWxQYXJhbWV0ZXJzID0geworICAgIFNFUklBTF9ERUZBVUxUX1BBUkFNRVRFUlMKKyAgfTsKKworICBCRUdJTl9VU0JfQ0hBTk5FTF9ERUZJTklUSU9OUworICAgIHsgLyogVmFyaW8gNDAgKDQwIGNlbGxzKSAqLworICAgICAgLnZlbmRvcj0wWDA0MDMsIC5wcm9kdWN0PTBYRkU3MCwKKyAgICAgIC5jb25maWd1cmF0aW9uPTEsIC5pbnRlcmZhY2U9MCwgLmFsdGVybmF0aXZlPTAsCisgICAgICAuaW5wdXRFbmRwb2ludD0xLCAub3V0cHV0RW5kcG9pbnQ9MiwKKyAgICAgIC5kaXNhYmxlQXV0b3N1c3BlbmQ9MSwKKyAgICAgIC5kYXRhPSZiYXVtRXNjYXBlT3BlcmF0aW9ucworICAgIH0sCisKKyAgICB7IC8qIFBvY2tldFZhcmlvICgyNCBjZWxscykgKi8KKyAgICAgIC52ZW5kb3I9MFgwNDAzLCAucHJvZHVjdD0wWEZFNzEsCisgICAgICAuY29uZmlndXJhdGlvbj0xLCAuaW50ZXJmYWNlPTAsIC5hbHRlcm5hdGl2ZT0wLAorICAgICAgLmlucHV0RW5kcG9pbnQ9MSwgLm91dHB1dEVuZHBvaW50PTIsCisgICAgICAuZGlzYWJsZUF1dG9zdXNwZW5kPTEsCisgICAgICAuZGF0YT0mYmF1bUVzY2FwZU9wZXJhdGlvbnMKKyAgICB9LAorCisgICAgeyAvKiBTdXBlclZhcmlvIDQwICg0MCBjZWxscykgKi8KKyAgICAgIC52ZW5kb3I9MFgwNDAzLCAucHJvZHVjdD0wWEZFNzIsCisgICAgICAuY29uZmlndXJhdGlvbj0xLCAuaW50ZXJmYWNlPTAsIC5hbHRlcm5hdGl2ZT0wLAorICAgICAgLmlucHV0RW5kcG9pbnQ9MSwgLm91dHB1dEVuZHBvaW50PTIsCisgICAgICAuZGlzYWJsZUF1dG9zdXNwZW5kPTEsCisgICAgICAuZGF0YT0mYmF1bUVzY2FwZU9wZXJhdGlvbnMKKyAgICB9LAorCisgICAgeyAvKiBTdXBlclZhcmlvIDMyICgzMiBjZWxscykgKi8KKyAgICAgIC52ZW5kb3I9MFgwNDAzLCAucHJvZHVjdD0wWEZFNzMsCisgICAgICAuY29uZmlndXJhdGlvbj0xLCAuaW50ZXJmYWNlPTAsIC5hbHRlcm5hdGl2ZT0wLAorICAgICAgLmlucHV0RW5kcG9pbnQ9MSwgLm91dHB1dEVuZHBvaW50PTIsCisgICAgICAuZGlzYWJsZUF1dG9zdXNwZW5kPTEsCisgICAgICAuZGF0YT0mYmF1bUVzY2FwZU9wZXJhdGlvbnMKKyAgICB9LAorCisgICAgeyAvKiBTdXBlclZhcmlvIDY0ICg2NCBjZWxscykgKi8KKyAgICAgIC52ZW5kb3I9MFgwNDAzLCAucHJvZHVjdD0wWEZFNzQsCisgICAgICAuY29uZmlndXJhdGlvbj0xLCAuaW50ZXJmYWNlPTAsIC5hbHRlcm5hdGl2ZT0wLAorICAgICAgLmlucHV0RW5kcG9pbnQ9MSwgLm91dHB1dEVuZHBvaW50PTIsCisgICAgICAuZGlzYWJsZUF1dG9zdXNwZW5kPTEsCisgICAgICAuZGF0YT0mYmF1bUVzY2FwZU9wZXJhdGlvbnMKKyAgICB9LAorCisgICAgeyAvKiBTdXBlclZhcmlvIDgwICg4MCBjZWxscykgKi8KKyAgICAgIC52ZW5kb3I9MFgwNDAzLCAucHJvZHVjdD0wWEZFNzUsCisgICAgICAuY29uZmlndXJhdGlvbj0xLCAuaW50ZXJmYWNlPTAsIC5hbHRlcm5hdGl2ZT0wLAorICAgICAgLmlucHV0RW5kcG9pbnQ9MSwgLm91dHB1dEVuZHBvaW50PTIsCisgICAgICAuZGlzYWJsZUF1dG9zdXNwZW5kPTEsCisgICAgICAuZGF0YT0mYmF1bUVzY2FwZU9wZXJhdGlvbnMKKyAgICB9LAorCisgICAgeyAvKiBWYXJpb1BybyA4MCAoODAgY2VsbHMpICovCisgICAgICAudmVuZG9yPTBYMDQwMywgLnByb2R1Y3Q9MFhGRTc2LAorICAgICAgLmNvbmZpZ3VyYXRpb249MSwgLmludGVyZmFjZT0wLCAuYWx0ZXJuYXRpdmU9MCwKKyAgICAgIC5pbnB1dEVuZHBvaW50PTEsIC5vdXRwdXRFbmRwb2ludD0yLAorICAgICAgLmRpc2FibGVBdXRvc3VzcGVuZD0xLAorICAgICAgLmRhdGE9JmJhdW1Fc2NhcGVPcGVyYXRpb25zCisgICAgfSwKKworICAgIHsgLyogVmFyaW9Qcm8gNjQgKDY0IGNlbGxzKSAqLworICAgICAgLnZlbmRvcj0wWDA0MDMsIC5wcm9kdWN0PTBYRkU3NywKKyAgICAgIC5jb25maWd1cmF0aW9uPTEsIC5pbnRlcmZhY2U9MCwgLmFsdGVybmF0aXZlPTAsCisgICAgICAuaW5wdXRFbmRwb2ludD0xLCAub3V0cHV0RW5kcG9pbnQ9MiwKKyAgICAgIC5kaXNhYmxlQXV0b3N1c3BlbmQ9MSwKKyAgICAgIC5kYXRhPSZiYXVtRXNjYXBlT3BlcmF0aW9ucworICAgIH0sCisKKyAgICB7IC8qIE9yYml0IFJlYWRlciAyMCAoMjAgY2VsbHMpICovCisgICAgICAudmVuZG9yPTBYMDQ4MywgLnByb2R1Y3Q9MFhBMUQzLAorICAgICAgLmNvbmZpZ3VyYXRpb249MSwgLmludGVyZmFjZT0wLCAuYWx0ZXJuYXRpdmU9MCwKKyAgICAgIC5pbnB1dEVuZHBvaW50PTEsIC5vdXRwdXRFbmRwb2ludD0xLAorICAgICAgLmRhdGE9JmJhdW1IaWQxT3BlcmF0aW9ucywKKyAgICB9LAorCisgICAgeyAvKiBPcmJpdCBSZWFkZXIgNDAgKDQwIGNlbGxzKSAqLworICAgICAgLnZlbmRvcj0wWDA0ODMsIC5wcm9kdWN0PTBYYTM2NiwKKyAgICAgIC5jb25maWd1cmF0aW9uPTEsIC5pbnRlcmZhY2U9MCwgLmFsdGVybmF0aXZlPTAsCisgICAgICAuaW5wdXRFbmRwb2ludD0xLCAub3V0cHV0RW5kcG9pbnQ9MSwKKyAgICAgIC5kYXRhPSZiYXVtSGlkMU9wZXJhdGlvbnMsCisgICAgfSwKKworICAgIHsgLyogVmFyaW9Qcm8gNDAgKDQwIGNlbGxzKSAqLworICAgICAgLnZlbmRvcj0wWDA5MDQsIC5wcm9kdWN0PTBYMjAwMCwKKyAgICAgIC5jb25maWd1cmF0aW9uPTEsIC5pbnRlcmZhY2U9MCwgLmFsdGVybmF0aXZlPTAsCisgICAgICAuaW5wdXRFbmRwb2ludD0xLCAub3V0cHV0RW5kcG9pbnQ9MiwKKyAgICAgIC5kaXNhYmxlQXV0b3N1c3BlbmQ9MSwKKyAgICAgIC5kYXRhPSZiYXVtRXNjYXBlT3BlcmF0aW9ucworICAgIH0sCisKKyAgICB7IC8qIEVjb1ZhcmlvIDI0ICgyNCBjZWxscykgKi8KKyAgICAgIC52ZW5kb3I9MFgwOTA0LCAucHJvZHVjdD0wWDIwMDEsCisgICAgICAuY29uZmlndXJhdGlvbj0xLCAuaW50ZXJmYWNlPTAsIC5hbHRlcm5hdGl2ZT0wLAorICAgICAgLmlucHV0RW5kcG9pbnQ9MSwgLm91dHB1dEVuZHBvaW50PTIsCisgICAgICAuZGlzYWJsZUF1dG9zdXNwZW5kPTEsCisgICAgICAuZGF0YT0mYmF1bUVzY2FwZU9wZXJhdGlvbnMKKyAgICB9LAorCisgICAgeyAvKiBFY29WYXJpbyA0MCAoNDAgY2VsbHMpICovCisgICAgICAudmVuZG9yPTBYMDkwNCwgLnByb2R1Y3Q9MFgyMDAyLAorICAgICAgLmNvbmZpZ3VyYXRpb249MSwgLmludGVyZmFjZT0wLCAuYWx0ZXJuYXRpdmU9MCwKKyAgICAgIC5pbnB1dEVuZHBvaW50PTEsIC5vdXRwdXRFbmRwb2ludD0yLAorICAgICAgLmRpc2FibGVBdXRvc3VzcGVuZD0xLAorICAgICAgLmRhdGE9JmJhdW1Fc2NhcGVPcGVyYXRpb25zCisgICAgfSwKKworICAgIHsgLyogVmFyaW9Db25uZWN0IDQwICg0MCBjZWxscykgKi8KKyAgICAgIC52ZW5kb3I9MFgwOTA0LCAucHJvZHVjdD0wWDIwMDcsCisgICAgICAuY29uZmlndXJhdGlvbj0xLCAuaW50ZXJmYWNlPTAsIC5hbHRlcm5hdGl2ZT0wLAorICAgICAgLmlucHV0RW5kcG9pbnQ9MSwgLm91dHB1dEVuZHBvaW50PTIsCisgICAgICAuZGlzYWJsZUF1dG9zdXNwZW5kPTEsCisgICAgICAuZGF0YT0mYmF1bUVzY2FwZU9wZXJhdGlvbnMKKyAgICB9LAorCisgICAgeyAvKiBWYXJpb0Nvbm5lY3QgMzIgKDMyIGNlbGxzKSAqLworICAgICAgLnZlbmRvcj0wWDA5MDQsIC5wcm9kdWN0PTBYMjAwOCwKKyAgICAgIC5jb25maWd1cmF0aW9uPTEsIC5pbnRlcmZhY2U9MCwgLmFsdGVybmF0aXZlPTAsCisgICAgICAuaW5wdXRFbmRwb2ludD0xLCAub3V0cHV0RW5kcG9pbnQ9MiwKKyAgICAgIC5kaXNhYmxlQXV0b3N1c3BlbmQ9MSwKKyAgICAgIC5kYXRhPSZiYXVtRXNjYXBlT3BlcmF0aW9ucworICAgIH0sCisKKyAgICB7IC8qIFZhcmlvQ29ubmVjdCAyNCAoMjQgY2VsbHMpICovCisgICAgICAudmVuZG9yPTBYMDkwNCwgLnByb2R1Y3Q9MFgyMDA5LAorICAgICAgLmNvbmZpZ3VyYXRpb249MSwgLmludGVyZmFjZT0wLCAuYWx0ZXJuYXRpdmU9MCwKKyAgICAgIC5pbnB1dEVuZHBvaW50PTEsIC5vdXRwdXRFbmRwb2ludD0yLAorICAgICAgLmRpc2FibGVBdXRvc3VzcGVuZD0xLAorICAgICAgLmRhdGE9JmJhdW1Fc2NhcGVPcGVyYXRpb25zCisgICAgfSwKKworICAgIHsgLyogVmFyaW9Db25uZWN0IDY0ICg2NCBjZWxscykgKi8KKyAgICAgIC52ZW5kb3I9MFgwOTA0LCAucHJvZHVjdD0wWDIwMTAsCisgICAgICAuY29uZmlndXJhdGlvbj0xLCAuaW50ZXJmYWNlPTAsIC5hbHRlcm5hdGl2ZT0wLAorICAgICAgLmlucHV0RW5kcG9pbnQ9MSwgLm91dHB1dEVuZHBvaW50PTIsCisgICAgICAuZGlzYWJsZUF1dG9zdXNwZW5kPTEsCisgICAgICAuZGF0YT0mYmF1bUVzY2FwZU9wZXJhdGlvbnMKKyAgICB9LAorCisgICAgeyAvKiBWYXJpb0Nvbm5lY3QgODAgKDgwIGNlbGxzKSAqLworICAgICAgLnZlbmRvcj0wWDA5MDQsIC5wcm9kdWN0PTBYMjAxMSwKKyAgICAgIC5jb25maWd1cmF0aW9uPTEsIC5pbnRlcmZhY2U9MCwgLmFsdGVybmF0aXZlPTAsCisgICAgICAuaW5wdXRFbmRwb2ludD0xLCAub3V0cHV0RW5kcG9pbnQ9MiwKKyAgICAgIC5kaXNhYmxlQXV0b3N1c3BlbmQ9MSwKKyAgICAgIC5kYXRhPSZiYXVtRXNjYXBlT3BlcmF0aW9ucworICAgIH0sCisKKyAgICB7IC8qIEVjb1ZhcmlvIDMyICgzMiBjZWxscykgKi8KKyAgICAgIC52ZW5kb3I9MFgwOTA0LCAucHJvZHVjdD0wWDIwMTQsCisgICAgICAuY29uZmlndXJhdGlvbj0xLCAuaW50ZXJmYWNlPTAsIC5hbHRlcm5hdGl2ZT0wLAorICAgICAgLmlucHV0RW5kcG9pbnQ9MSwgLm91dHB1dEVuZHBvaW50PTIsCisgICAgICAuZGlzYWJsZUF1dG9zdXNwZW5kPTEsCisgICAgICAuZGF0YT0mYmF1bUVzY2FwZU9wZXJhdGlvbnMKKyAgICB9LAorCisgICAgeyAvKiBFY29WYXJpbyA2NCAoNjQgY2VsbHMpICovCisgICAgICAudmVuZG9yPTBYMDkwNCwgLnByb2R1Y3Q9MFgyMDE1LAorICAgICAgLmNvbmZpZ3VyYXRpb249MSwgLmludGVyZmFjZT0wLCAuYWx0ZXJuYXRpdmU9MCwKKyAgICAgIC5pbnB1dEVuZHBvaW50PTEsIC5vdXRwdXRFbmRwb2ludD0yLAorICAgICAgLmRpc2FibGVBdXRvc3VzcGVuZD0xLAorICAgICAgLmRhdGE9JmJhdW1Fc2NhcGVPcGVyYXRpb25zCisgICAgfSwKKworICAgIHsgLyogRWNvVmFyaW8gODAgKDgwIGNlbGxzKSAqLworICAgICAgLnZlbmRvcj0wWDA5MDQsIC5wcm9kdWN0PTBYMjAxNiwKKyAgICAgIC5jb25maWd1cmF0aW9uPTEsIC5pbnRlcmZhY2U9MCwgLmFsdGVybmF0aXZlPTAsCisgICAgICAuaW5wdXRFbmRwb2ludD0xLCAub3V0cHV0RW5kcG9pbnQ9MiwKKyAgICAgIC5kaXNhYmxlQXV0b3N1c3BlbmQ9MSwKKyAgICAgIC5kYXRhPSZiYXVtRXNjYXBlT3BlcmF0aW9ucworICAgIH0sCisKKyAgICB7IC8qIFJlZnJlc2hhYnJhaWxsZSAxOCAoMTggY2VsbHMpICovCisgICAgICAudmVuZG9yPTBYMDkwNCwgLnByb2R1Y3Q9MFgzMDAwLAorICAgICAgLmNvbmZpZ3VyYXRpb249MSwgLmludGVyZmFjZT0wLCAuYWx0ZXJuYXRpdmU9MCwKKyAgICAgIC5pbnB1dEVuZHBvaW50PTEsIC5vdXRwdXRFbmRwb2ludD0yLAorICAgICAgLmRpc2FibGVBdXRvc3VzcGVuZD0xLAorICAgICAgLmRhdGE9JmJhdW1Fc2NhcGVPcGVyYXRpb25zCisgICAgfSwKKworICAgIHsgLyogT3JiaXQgaW4gUmVmcmVzaGFicmFpbGxlIEVtdWxhdGlvbiBNb2RlICgxOCBjZWxscykgKi8KKyAgICAgIC52ZW5kb3I9MFgwOTA0LCAucHJvZHVjdD0wWDMwMDEsCisgICAgICAuY29uZmlndXJhdGlvbj0xLCAuaW50ZXJmYWNlPTAsIC5hbHRlcm5hdGl2ZT0wLAorICAgICAgLmlucHV0RW5kcG9pbnQ9MSwgLm91dHB1dEVuZHBvaW50PTEsCisgICAgICAudmVyaWZ5SW50ZXJmYWNlPTEsCisgICAgICAuZGF0YT0mYmF1bUhpZDFPcGVyYXRpb25zCisgICAgfSwKKworICAgIHsgLyogUmVmcmVzaGFicmFpbGxlIDE4ICgxOCBjZWxscykgKi8KKyAgICAgIC52ZW5kb3I9MFgwOTA0LCAucHJvZHVjdD0wWDMwMDEsCisgICAgICAuY29uZmlndXJhdGlvbj0xLCAuaW50ZXJmYWNlPTAsIC5hbHRlcm5hdGl2ZT0wLAorICAgICAgLmlucHV0RW5kcG9pbnQ9MSwgLm91dHB1dEVuZHBvaW50PTIsCisgICAgICAudmVyaWZ5SW50ZXJmYWNlPTEsCisgICAgICAuZGF0YT0mYmF1bUhpZDFPcGVyYXRpb25zCisgICAgfSwKKworICAgIHsgLyogUHJvbnRvISBWMyAxOCAoMTggY2VsbHMpICovCisgICAgICAudmVuZG9yPTBYMDkwNCwgLnByb2R1Y3Q9MFg0MDA0LAorICAgICAgLmNvbmZpZ3VyYXRpb249MSwgLmludGVyZmFjZT0wLCAuYWx0ZXJuYXRpdmU9MCwKKyAgICAgIC5pbnB1dEVuZHBvaW50PTEsIC5vdXRwdXRFbmRwb2ludD0yLAorICAgICAgLmRhdGE9JmJhdW1IaWQxT3BlcmF0aW9ucworICAgIH0sCisKKyAgICB7IC8qIFByb250byEgVjMgNDAgKDQwIGNlbGxzKSAqLworICAgICAgLnZlbmRvcj0wWDA5MDQsIC5wcm9kdWN0PTBYNDAwNSwKKyAgICAgIC5jb25maWd1cmF0aW9uPTEsIC5pbnRlcmZhY2U9MCwgLmFsdGVybmF0aXZlPTAsCisgICAgICAuaW5wdXRFbmRwb2ludD0xLCAub3V0cHV0RW5kcG9pbnQ9MiwKKyAgICAgIC5kYXRhPSZiYXVtSGlkMU9wZXJhdGlvbnMKKyAgICB9LAorCisgICAgeyAvKiBQcm9udG8hIFY0IDE4ICgxOCBjZWxscykgKi8KKyAgICAgIC52ZW5kb3I9MFgwOTA0LCAucHJvZHVjdD0wWDQwMDcsCisgICAgICAuY29uZmlndXJhdGlvbj0xLCAuaW50ZXJmYWNlPTAsIC5hbHRlcm5hdGl2ZT0wLAorICAgICAgLmlucHV0RW5kcG9pbnQ9MSwgLm91dHB1dEVuZHBvaW50PTIsCisgICAgICAuZGF0YT0mYmF1bUhpZDJPcGVyYXRpb25zCisgICAgfSwKKworICAgIHsgLyogUHJvbnRvISBWNCA0MCAoNDAgY2VsbHMpICovCisgICAgICAudmVuZG9yPTBYMDkwNCwgLnByb2R1Y3Q9MFg0MDA4LAorICAgICAgLmNvbmZpZ3VyYXRpb249MSwgLmludGVyZmFjZT0wLCAuYWx0ZXJuYXRpdmU9MCwKKyAgICAgIC5pbnB1dEVuZHBvaW50PTEsIC5vdXRwdXRFbmRwb2ludD0yLAorICAgICAgLmRhdGE9JmJhdW1IaWQyT3BlcmF0aW9ucworICAgIH0sCisKKyAgICB7IC8qIFN1cGVyVmFyaW8yIDQwICg0MCBjZWxscykgKi8KKyAgICAgIC52ZW5kb3I9MFgwOTA0LCAucHJvZHVjdD0wWDYwMDEsCisgICAgICAuY29uZmlndXJhdGlvbj0xLCAuaW50ZXJmYWNlPTAsIC5hbHRlcm5hdGl2ZT0wLAorICAgICAgLmlucHV0RW5kcG9pbnQ9MSwgLm91dHB1dEVuZHBvaW50PTIsCisgICAgICAuZGF0YT0mYmF1bUhpZDFPcGVyYXRpb25zCisgICAgfSwKKworICAgIHsgLyogUG9ja2V0VmFyaW8yICgyNCBjZWxscykgKi8KKyAgICAgIC52ZW5kb3I9MFgwOTA0LCAucHJvZHVjdD0wWDYwMDIsCisgICAgICAuY29uZmlndXJhdGlvbj0xLCAuaW50ZXJmYWNlPTAsIC5hbHRlcm5hdGl2ZT0wLAorICAgICAgLmlucHV0RW5kcG9pbnQ9MSwgLm91dHB1dEVuZHBvaW50PTIsCisgICAgICAuZGF0YT0mYmF1bUhpZDFPcGVyYXRpb25zCisgICAgfSwKKworICAgIHsgLyogU3VwZXJWYXJpbzIgMzIgKDMyIGNlbGxzKSAqLworICAgICAgLnZlbmRvcj0wWDA5MDQsIC5wcm9kdWN0PTBYNjAwMywKKyAgICAgIC5jb25maWd1cmF0aW9uPTEsIC5pbnRlcmZhY2U9MCwgLmFsdGVybmF0aXZlPTAsCisgICAgICAuaW5wdXRFbmRwb2ludD0xLCAub3V0cHV0RW5kcG9pbnQ9MiwKKyAgICAgIC5kYXRhPSZiYXVtSGlkMU9wZXJhdGlvbnMKKyAgICB9LAorCisgICAgeyAvKiBTdXBlclZhcmlvMiA2NCAoNjQgY2VsbHMpICovCisgICAgICAudmVuZG9yPTBYMDkwNCwgLnByb2R1Y3Q9MFg2MDA0LAorICAgICAgLmNvbmZpZ3VyYXRpb249MSwgLmludGVyZmFjZT0wLCAuYWx0ZXJuYXRpdmU9MCwKKyAgICAgIC5pbnB1dEVuZHBvaW50PTEsIC5vdXRwdXRFbmRwb2ludD0yLAorICAgICAgLmRhdGE9JmJhdW1IaWQxT3BlcmF0aW9ucworICAgIH0sCisKKyAgICB7IC8qIFN1cGVyVmFyaW8yIDgwICg4MCBjZWxscykgKi8KKyAgICAgIC52ZW5kb3I9MFgwOTA0LCAucHJvZHVjdD0wWDYwMDUsCisgICAgICAuY29uZmlndXJhdGlvbj0xLCAuaW50ZXJmYWNlPTAsIC5hbHRlcm5hdGl2ZT0wLAorICAgICAgLmlucHV0RW5kcG9pbnQ9MSwgLm91dHB1dEVuZHBvaW50PTIsCisgICAgICAuZGF0YT0mYmF1bUhpZDFPcGVyYXRpb25zCisgICAgfSwKKworICAgIHsgLyogQnJhaWxsaWFudDIgNDAgKDQwIGNlbGxzKSAqLworICAgICAgLnZlbmRvcj0wWDA5MDQsIC5wcm9kdWN0PTBYNjAwNiwKKyAgICAgIC5jb25maWd1cmF0aW9uPTEsIC5pbnRlcmZhY2U9MCwgLmFsdGVybmF0aXZlPTAsCisgICAgICAuaW5wdXRFbmRwb2ludD0xLCAub3V0cHV0RW5kcG9pbnQ9MiwKKyAgICAgIC5kYXRhPSZiYXVtSGlkMU9wZXJhdGlvbnMKKyAgICB9LAorCisgICAgeyAvKiBCcmFpbGxpYW50MiAyNCAoMjQgY2VsbHMpICovCisgICAgICAudmVuZG9yPTBYMDkwNCwgLnByb2R1Y3Q9MFg2MDA3LAorICAgICAgLmNvbmZpZ3VyYXRpb249MSwgLmludGVyZmFjZT0wLCAuYWx0ZXJuYXRpdmU9MCwKKyAgICAgIC5pbnB1dEVuZHBvaW50PTEsIC5vdXRwdXRFbmRwb2ludD0yLAorICAgICAgLmRhdGE9JmJhdW1IaWQxT3BlcmF0aW9ucworICAgIH0sCisKKyAgICB7IC8qIEJyYWlsbGlhbnQyIDMyICgzMiBjZWxscykgKi8KKyAgICAgIC52ZW5kb3I9MFgwOTA0LCAucHJvZHVjdD0wWDYwMDgsCisgICAgICAuY29uZmlndXJhdGlvbj0xLCAuaW50ZXJmYWNlPTAsIC5hbHRlcm5hdGl2ZT0wLAorICAgICAgLmlucHV0RW5kcG9pbnQ9MSwgLm91dHB1dEVuZHBvaW50PTIsCisgICAgICAuZGF0YT0mYmF1bUhpZDFPcGVyYXRpb25zCisgICAgfSwKKworICAgIHsgLyogQnJhaWxsaWFudDIgNjQgKDY0IGNlbGxzKSAqLworICAgICAgLnZlbmRvcj0wWDA5MDQsIC5wcm9kdWN0PTBYNjAwOSwKKyAgICAgIC5jb25maWd1cmF0aW9uPTEsIC5pbnRlcmZhY2U9MCwgLmFsdGVybmF0aXZlPTAsCisgICAgICAuaW5wdXRFbmRwb2ludD0xLCAub3V0cHV0RW5kcG9pbnQ9MiwKKyAgICAgIC5kYXRhPSZiYXVtSGlkMU9wZXJhdGlvbnMKKyAgICB9LAorCisgICAgeyAvKiBCcmFpbGxpYW50MiA4MCAoODAgY2VsbHMpICovCisgICAgICAudmVuZG9yPTBYMDkwNCwgLnByb2R1Y3Q9MFg2MDBBLAorICAgICAgLmNvbmZpZ3VyYXRpb249MSwgLmludGVyZmFjZT0wLCAuYWx0ZXJuYXRpdmU9MCwKKyAgICAgIC5pbnB1dEVuZHBvaW50PTEsIC5vdXRwdXRFbmRwb2ludD0yLAorICAgICAgLmRhdGE9JmJhdW1IaWQxT3BlcmF0aW9ucworICAgIH0sCisKKyAgICB7IC8qIFZhcmlvQ29ubmVjdCAyNCAoMjQgY2VsbHMpICovCisgICAgICAudmVuZG9yPTBYMDkwNCwgLnByb2R1Y3Q9MFg2MDExLAorICAgICAgLmNvbmZpZ3VyYXRpb249MSwgLmludGVyZmFjZT0wLCAuYWx0ZXJuYXRpdmU9MCwKKyAgICAgIC5pbnB1dEVuZHBvaW50PTEsIC5vdXRwdXRFbmRwb2ludD0yLAorICAgICAgLmRhdGE9JmJhdW1IaWQxT3BlcmF0aW9ucworICAgIH0sCisKKyAgICB7IC8qIFZhcmlvQ29ubmVjdCAzMiAoMzIgY2VsbHMpICovCisgICAgICAudmVuZG9yPTBYMDkwNCwgLnByb2R1Y3Q9MFg2MDEyLAorICAgICAgLmNvbmZpZ3VyYXRpb249MSwgLmludGVyZmFjZT0wLCAuYWx0ZXJuYXRpdmU9MCwKKyAgICAgIC5pbnB1dEVuZHBvaW50PTEsIC5vdXRwdXRFbmRwb2ludD0yLAorICAgICAgLmRhdGE9JmJhdW1IaWQxT3BlcmF0aW9ucworICAgIH0sCisKKyAgICB7IC8qIFZhcmlvQ29ubmVjdCA0MCAoNDAgY2VsbHMpICovCisgICAgICAudmVuZG9yPTBYMDkwNCwgLnByb2R1Y3Q9MFg2MDEzLAorICAgICAgLmNvbmZpZ3VyYXRpb249MSwgLmludGVyZmFjZT0wLCAuYWx0ZXJuYXRpdmU9MCwKKyAgICAgIC5pbnB1dEVuZHBvaW50PTEsIC5vdXRwdXRFbmRwb2ludD0yLAorICAgICAgLmRhdGE9JmJhdW1IaWQxT3BlcmF0aW9ucworICAgIH0sCisKKyAgICB7IC8qIFZhcmlvVWx0cmEgMjAgKDIwIGNlbGxzKSAqLworICAgICAgLnZlbmRvcj0wWDA5MDQsIC5wcm9kdWN0PTBYNjEwMSwKKyAgICAgIC5jb25maWd1cmF0aW9uPTEsIC5pbnRlcmZhY2U9MCwgLmFsdGVybmF0aXZlPTAsCisgICAgICAuaW5wdXRFbmRwb2ludD0xLCAub3V0cHV0RW5kcG9pbnQ9MiwKKyAgICAgIC5kYXRhPSZiYXVtSGlkMk9wZXJhdGlvbnMKKyAgICB9LAorCisgICAgeyAvKiBWYXJpb1VsdHJhIDQwICg0MCBjZWxscykgKi8KKyAgICAgIC52ZW5kb3I9MFgwOTA0LCAucHJvZHVjdD0wWDYxMDIsCisgICAgICAuY29uZmlndXJhdGlvbj0xLCAuaW50ZXJmYWNlPTAsIC5hbHRlcm5hdGl2ZT0wLAorICAgICAgLmlucHV0RW5kcG9pbnQ9MSwgLm91dHB1dEVuZHBvaW50PTIsCisgICAgICAuZGF0YT0mYmF1bUhpZDJPcGVyYXRpb25zCisgICAgfSwKKworICAgIHsgLyogVmFyaW9VbHRyYSAzMiAoMzIgY2VsbHMpICovCisgICAgICAudmVuZG9yPTBYMDkwNCwgLnByb2R1Y3Q9MFg2MTAzLAorICAgICAgLmNvbmZpZ3VyYXRpb249MSwgLmludGVyZmFjZT0wLCAuYWx0ZXJuYXRpdmU9MCwKKyAgICAgIC5pbnB1dEVuZHBvaW50PTEsIC5vdXRwdXRFbmRwb2ludD0yLAorICAgICAgLmRhdGE9JmJhdW1IaWQyT3BlcmF0aW9ucworICAgIH0sCisKKyAgICB7IC8qIE5MUyBlUmVhZGVyIFpvb21heCAoMjAgY2VsbHMpICovCisgICAgICAudmVuZG9yPTBYMUE4NiwgLnByb2R1Y3Q9MFg3NTIzLAorICAgICAgLnBhcmVudFZlbmRvcj0wWDFBNDAsIC5wYXJlbnRQcm9kdWN0PTBYMDEwMSwKKyAgICAgIC5jb25maWd1cmF0aW9uPTEsIC5pbnRlcmZhY2U9MCwgLmFsdGVybmF0aXZlPTAsCisgICAgICAuaW5wdXRFbmRwb2ludD0yLCAub3V0cHV0RW5kcG9pbnQ9MiwKKyAgICAgIC5kYXRhPSZiYXVtRXNjYXBlT3BlcmF0aW9ucworICAgIH0sCisgIEVORF9VU0JfQ0hBTk5FTF9ERUZJTklUSU9OUworCisgIEdpb0Rlc2NyaXB0b3IgZGVzY3JpcHRvcjsKKyAgZ2lvSW5pdGlhbGl6ZURlc2NyaXB0b3IoJmRlc2NyaXB0b3IpOworCisgIGRlc2NyaXB0b3Iuc2VyaWFsLnBhcmFtZXRlcnMgPSAmc2VyaWFsUGFyYW1ldGVyczsKKyAgZGVzY3JpcHRvci5zZXJpYWwub3B0aW9ucy5hcHBsaWNhdGlvbkRhdGEgPSAmYmF1bUVzY2FwZU9wZXJhdGlvbnM7CisKKyAgZGVzY3JpcHRvci51c2IuY2hhbm5lbERlZmluaXRpb25zID0gdXNiQ2hhbm5lbERlZmluaXRpb25zOworICBkZXNjcmlwdG9yLnVzYi5vcHRpb25zLmlnbm9yZVdyaXRlVGltZW91dHMgPSAxOworCisgIGRlc2NyaXB0b3IuYmx1ZXRvb3RoLmNoYW5uZWxOdW1iZXIgPSAxOworICBkZXNjcmlwdG9yLmJsdWV0b290aC5kaXNjb3ZlckNoYW5uZWwgPSAxOworICBkZXNjcmlwdG9yLmJsdWV0b290aC5vcHRpb25zLmFwcGxpY2F0aW9uRGF0YSA9ICZiYXVtRXNjYXBlT3BlcmF0aW9uczsKKworICBpZiAoY29ubmVjdEJyYWlsbGVSZXNvdXJjZShicmwsIGlkZW50aWZpZXIsICZkZXNjcmlwdG9yLCBOVUxMKSkgeworICAgIHJldHVybiAxOworICB9CisKKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK2JybF9jb25zdHJ1Y3QgKEJyYWlsbGVEaXNwbGF5ICpicmwsIGNoYXIgKipwYXJhbWV0ZXJzLCBjb25zdCBjaGFyICpkZXZpY2UpIHsKKyAgY29uc3QgUHJvdG9jb2xPcGVyYXRpb25zICpyZXF1ZXN0ZWRQcm90b2NvbCA9IE5VTEw7CisgIHVuc2lnbmVkIGludCB1c2VWYXJpb0tleXMgPSAwOworCisgIHsKKyAgICBzdGF0aWMgY29uc3QgUHJvdG9jb2xPcGVyYXRpb25zICpjb25zdCB2YWx1ZXNbXSA9IHsKKyAgICAgIE5VTEwsCisgICAgICAmYmF1bUVzY2FwZU9wZXJhdGlvbnMsCisgICAgICAmYmF1bUhpZDFPcGVyYXRpb25zLAorICAgICAgJmJhdW1IaWQyT3BlcmF0aW9ucywKKyAgICAgICZoYW5keVRlY2hPcGVyYXRpb25zLAorICAgICAgJnBvd2VyQnJhaWxsZU9wZXJhdGlvbnMKKyAgICB9OworCisgICAgc3RhdGljIGNvbnN0IGNoYXIgKmNob2ljZXNbXSA9IHsiZGVmYXVsdCIsICJlc2NhcGUiLCAiaGlkMSIsICJoaWQyIiwgImh0IiwicGIiLCBOVUxMfTsKKyAgICB1bnNpZ25lZCBpbnQgaW5kZXggPSAwOworCisgICAgaWYgKHZhbGlkYXRlQ2hvaWNlKCZpbmRleCwgcGFyYW1ldGVyc1tQQVJNX1BST1RPQ09MXSwgY2hvaWNlcykpIHsKKyAgICAgIHJlcXVlc3RlZFByb3RvY29sID0gdmFsdWVzW2luZGV4XTsKKyAgICB9IGVsc2UgeworICAgICAgbG9nTWVzc2FnZShMT0dfV0FSTklORywgIiVzOiAlcyIsICJpbnZhbGlkIHByb3RvY29sIHNldHRpbmciLCBwYXJhbWV0ZXJzW1BBUk1fUFJPVE9DT0xdKTsKKyAgICB9CisgIH0KKworICBpZiAoIXZhbGlkYXRlWWVzTm8oJnVzZVZhcmlvS2V5cywgcGFyYW1ldGVyc1tQQVJNX1ZBUklPS0VZU10pKSB7CisgICAgbG9nTWVzc2FnZShMT0dfV0FSTklORywgIiVzOiAlcyIsICJpbnZhbGlkIHZhcmlvIGtleXMgc2V0dGluZyIsIHBhcmFtZXRlcnNbUEFSTV9WQVJJT0tFWVNdKTsKKyAgfQorCisgIGlmICgoYnJsLT5kYXRhID0gbWFsbG9jKHNpemVvZigqYnJsLT5kYXRhKSkpKSB7CisgICAgbWVtc2V0KGJybC0+ZGF0YSwgMCwgc2l6ZW9mKCpicmwtPmRhdGEpKTsKKworICAgIGlmIChjb25uZWN0UmVzb3VyY2UoYnJsLCBkZXZpY2UpKSB7CisgICAgICB1bnNpZ25lZCBpbnQgYXR0ZW1wdHMgPSAwOworCisgICAgICB3aGlsZSAoMSkgeworICAgICAgICBicmwtPmRhdGEtPnByb3RvY29sID0gcmVxdWVzdGVkUHJvdG9jb2w7CisgICAgICAgIGlmICghYnJsLT5kYXRhLT5wcm90b2NvbCkgYnJsLT5kYXRhLT5wcm90b2NvbCA9IGdpb0dldEFwcGxpY2F0aW9uRGF0YShicmwtPmdpb0VuZHBvaW50KTsKKyAgICAgICAgbG9nTWVzc2FnZShMT0dfREVCVUcsICJwcm9iaW5nIHdpdGggJXMgcHJvdG9jb2wiLCBicmwtPmRhdGEtPnByb3RvY29sLT5uYW1lKTsKKworICAgICAgICBpZiAoYnJsLT5kYXRhLT5wcm90b2NvbC0+c2VyaWFsQmF1ZCkgeworICAgICAgICAgIGNvbnN0IFNlcmlhbFBhcmFtZXRlcnMgcGFyYW1ldGVycyA9IHsKKyAgICAgICAgICAgIFNFUklBTF9ERUZBVUxUX1BBUkFNRVRFUlMsCisgICAgICAgICAgICAuYmF1ZCA9IGJybC0+ZGF0YS0+cHJvdG9jb2wtPnNlcmlhbEJhdWQsCisgICAgICAgICAgICAucGFyaXR5ID0gYnJsLT5kYXRhLT5wcm90b2NvbC0+c2VyaWFsUGFyaXR5CisgICAgICAgICAgfTsKKworICAgICAgICAgIGlmICghZ2lvUmVjb25maWd1cmVSZXNvdXJjZShicmwtPmdpb0VuZHBvaW50LCAmcGFyYW1ldGVycykpIGdvdG8gZmFpbGVkOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCFnaW9EaXNjYXJkSW5wdXQoYnJsLT5naW9FbmRwb2ludCkpIGdvdG8gZmFpbGVkOworCisgICAgICAgIG1lbXNldCgma2V5c1N0YXRlLCAwLCBzaXplb2Yoa2V5c1N0YXRlKSk7CisgICAgICAgIHN3aXRjaFNldHRpbmdzID0gMDsKKworICAgICAgICBpZiAoYnJsLT5kYXRhLT5wcm90b2NvbC0+cHJvYmVEZXZpY2UoYnJsKSkgeworICAgICAgICAgIGxvZ0NlbGxDb3VudChicmwpOworCisgICAgICAgICAgeworICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqc2l6ZSA9ICZicmwtPmRhdGEtPnBhY2tldFNpemUucm91dGluZ0tleXM7CisKKyAgICAgICAgICAgICpzaXplID0gS0VZX0dST1VQX1NJWkUoY2VsbENvdW50KTsKKyAgICAgICAgICAgIGlmICgoKnNpemUgPiAyKSAmJiAoKnNpemUgPCA1KSkgKnNpemUgPSA1OworICAgICAgICAgIH0KKworICAgICAgICAgIGlmICgoYmF1bURldmljZVR5cGUgPT0gQkFVTV9ERVZJQ0VfVmFyaW9Db25uZWN0KSAmJiAoY2VsbENvdW50ID09IDEyKSkgeworICAgICAgICAgICAgYmF1bURldmljZVR5cGUgPSBCQVVNX0RFVklDRV9Db25ueTsKKyAgICAgICAgICB9CisKKyAgICAgICAgICBtYWtlT3V0cHV0VGFibGUoYnJsLT5kYXRhLT5wcm90b2NvbC0+ZG90c1RhYmxlWzBdKTsKKyAgICAgICAgICBpZiAoIWNsZWFyQ2VsbFJhbmdlKGJybCwgMCwgY2VsbENvdW50KSkgZ290byBmYWlsZWQ7CisgICAgICAgICAgaWYgKCF1cGRhdGVDZWxscyhicmwpKSBnb3RvIGZhaWxlZDsKKworICAgICAgICAgIHsKKyAgICAgICAgICAgIGNvbnN0IEtleVRhYmxlRGVmaW5pdGlvbiAqa3RkOworCisgICAgICAgICAgICBpZiAodXNlVmFyaW9LZXlzKSB7CisgICAgICAgICAgICAgIGt0ZCA9ICZLRVlfVEFCTEVfREVGSU5JVElPTih2ayk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICBrdGQgPSBiYXVtRGV2aWNlT3BlcmF0aW9uc1tiYXVtRGV2aWNlVHlwZV0ua2V5VGFibGVEZWZpbml0aW9uOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBzZXRCcmFpbGxlS2V5VGFibGUoYnJsLCBrdGQpOworICAgICAgICAgIH0KKworICAgICAgICAgIHJldHVybiAxOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCsrYXR0ZW1wdHMgPT0gMikgYnJlYWs7CisgICAgICAgIGFzeW5jV2FpdCg3MDApOworICAgICAgfQorCisgICAgZmFpbGVkOgorICAgICAgZGlzY29ubmVjdEJyYWlsbGVSZXNvdXJjZShicmwsIE5VTEwpOworICAgIH0KKworICAgIGZyZWUoYnJsLT5kYXRhKTsKKyAgfSBlbHNlIHsKKyAgICBsb2dNYWxsb2NFcnJvcigpOworICB9CisKKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkCiticmxfZGVzdHJ1Y3QgKEJyYWlsbGVEaXNwbGF5ICpicmwpIHsKKyAgZGlzY29ubmVjdEJyYWlsbGVSZXNvdXJjZShicmwsIE5VTEwpOworICBmcmVlKGJybC0+ZGF0YSk7Cit9CisKK3N0YXRpYyBzc2l6ZV90CiticmxfcmVhZFBhY2tldCAoQnJhaWxsZURpc3BsYXkgKmJybCwgdm9pZCAqYnVmZmVyLCBzaXplX3Qgc2l6ZSkgeworICBpbnQgY291bnQgPSBicmwtPmRhdGEtPnByb3RvY29sLT5yZWFkUGFja2V0KGJybCwgYnVmZmVyLCBzaXplKTsKKyAgaWYgKCFjb3VudCkgY291bnQgPSAtMTsKKyAgcmV0dXJuIGNvdW50OworfQorCitzdGF0aWMgc3NpemVfdAorYnJsX3dyaXRlUGFja2V0IChCcmFpbGxlRGlzcGxheSAqYnJsLCBjb25zdCB2b2lkICpwYWNrZXQsIHNpemVfdCBsZW5ndGgpIHsKKyAgcmV0dXJuIGJybC0+ZGF0YS0+cHJvdG9jb2wtPndyaXRlUGFja2V0KGJybCwgcGFja2V0LCBsZW5ndGgpPyBsZW5ndGg6IC0xOworfQorCitzdGF0aWMgaW50CiticmxfcmVzZXQgKEJyYWlsbGVEaXNwbGF5ICpicmwpIHsKKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK2JybF93cml0ZVdpbmRvdyAoQnJhaWxsZURpc3BsYXkgKmJybCwgY29uc3Qgd2NoYXJfdCAqdGV4dCkgeworICBpZiAoIXB1dENlbGxzKGJybCwgYnJsLT5idWZmZXIsIDAsIGJybC0+dGV4dENvbHVtbnMpKSByZXR1cm4gMDsKKyAgcmV0dXJuIHVwZGF0ZUNlbGxzKGJybCk7Cit9CisKK3N0YXRpYyBpbnQKK2JybF93cml0ZVN0YXR1cyAoQnJhaWxsZURpc3BsYXkgKmJybCwgY29uc3QgdW5zaWduZWQgY2hhciAqc3RhdHVzKSB7CisgIHJldHVybiBwdXRDZWxscyhicmwsIHN0YXR1cywgYnJsLT50ZXh0Q29sdW1ucywgYnJsLT5zdGF0dXNDb2x1bW5zKTsKK30KKworc3RhdGljIGludAorYnJsX3JlYWRDb21tYW5kIChCcmFpbGxlRGlzcGxheSAqYnJsLCBLZXlUYWJsZUNvbW1hbmRDb250ZXh0IGNvbnRleHQpIHsKKyAgYnJsLT5kYXRhLT5wcm90b2NvbC0+cHJvY2Vzc1BhY2tldHMoYnJsKTsKKyAgcmV0dXJuIChlcnJubyA9PSBFQUdBSU4pPyBFT0Y6IEJSTF9DTURfUkVTVEFSVEJSTDsKK30KZGlmZiAtLWdpdCBhL0RyaXZlcnMvQnJhaWxsZS9CYXVtL2JybGRlZnMtYm0uaCBiL0RyaXZlcnMvQnJhaWxsZS9CYXVtL2JybGRlZnMtYm0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYWQ3MDhlCi0tLSAvZGV2L251bGwKKysrIGIvRHJpdmVycy9CcmFpbGxlL0JhdW0vYnJsZGVmcy1ibS5oCkBAIC0wLDAgKzEsNzcgQEAKKy8qCisgKiBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorICogICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorICoKKyAqIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorICoKKyAqIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyAqLworCisjaWZuZGVmIEJSTFRUWV9JTkNMVURFRF9CTV9CUkxERUZTCisjZGVmaW5lIEJSTFRUWV9JTkNMVURFRF9CTV9CUkxERUZTCisKKyNkZWZpbmUgQk1fS0VZU19ESVNQTEFZIDgKKyNkZWZpbmUgQk1fS0VZU19DT01NQU5EIDcKKyNkZWZpbmUgQk1fS0VZU19GUk9OVCAxMAorI2RlZmluZSBCTV9LRVlTX0VOVFJZIDE2CisjZGVmaW5lIEJNX0tFWVNfSk9ZU1RJQ0sgNQorI2RlZmluZSBCTV9LRVlTX1dIRUVMIDQKKyNkZWZpbmUgQk1fS0VZU19TVEFUVVMgOAorCit0eXBlZGVmIGVudW0geworICBCTV9LRVlfRElTUExBWSA9IDAsCisgIEJNX0tFWV9DT01NQU5EID0gQk1fS0VZX0RJU1BMQVkgKyBCTV9LRVlTX0RJU1BMQVksCisgIEJNX0tFWV9GUk9OVCA9IEJNX0tFWV9DT01NQU5EICsgQk1fS0VZU19DT01NQU5ELAorICBCTV9LRVlfQkFDSyA9IEJNX0tFWV9GUk9OVCArIEJNX0tFWVNfRlJPTlQsCisgIEJNX0tFWV9FTlRSWSA9IEJNX0tFWV9CQUNLICsgQk1fS0VZU19GUk9OVCwKKyAgQk1fS0VZX0pPWVNUSUNLID0gQk1fS0VZX0VOVFJZICsgQk1fS0VZU19FTlRSWSwKKyAgQk1fS0VZX1dIRUVMX1VQID0gQk1fS0VZX0pPWVNUSUNLICsgQk1fS0VZU19KT1lTVElDSywKKyAgQk1fS0VZX1dIRUVMX0RPV04gPSBCTV9LRVlfV0hFRUxfVVAgKyBCTV9LRVlTX1dIRUVMLAorICBCTV9LRVlfV0hFRUxfUFJFU1MgPSBCTV9LRVlfV0hFRUxfRE9XTiArIEJNX0tFWVNfV0hFRUwsCisgIEJNX0tFWV9TVEFUVVMgPSBCTV9LRVlfV0hFRUxfUFJFU1MgKyBCTV9LRVlTX1dIRUVMLAorICBCTV9LRVlfQ09VTlQgPSBCTV9LRVlfU1RBVFVTICsgQk1fS0VZU19TVEFUVVMsCisKKyAgQk1fS0VZX0I5ID0gQk1fS0VZX0VOVFJZLAorICBCTV9LRVlfQjEwLAorICBCTV9LRVlfQjExLAorICBCTV9LRVlfQjEyLAorICBCTV9LRVlfRjEsCisgIEJNX0tFWV9GMiwKKyAgQk1fS0VZX0YzLAorICBCTV9LRVlfRjQsCisgIEJNX0tFWV9ET1QxLAorICBCTV9LRVlfRE9UMiwKKyAgQk1fS0VZX0RPVDMsCisgIEJNX0tFWV9ET1Q0LAorICBCTV9LRVlfRE9UNSwKKyAgQk1fS0VZX0RPVDYsCisgIEJNX0tFWV9ET1Q3LAorICBCTV9LRVlfRE9UOCwKKworICBCTV9LRVlfVVAgPSBCTV9LRVlfSk9ZU1RJQ0ssCisgIEJNX0tFWV9MRUZULAorICBCTV9LRVlfRE9XTiwKKyAgQk1fS0VZX1JJR0hULAorICBCTV9LRVlfUFJFU1MsCit9IEJNX05hdmlnYXRpb25LZXk7CisKK3R5cGVkZWYgZW51bSB7CisgIEJNX0dSUF9OYXZpZ2F0aW9uS2V5cyA9IDAsCisgIEJNX0dSUF9Sb3V0aW5nS2V5cywKKyAgQk1fR1JQX0hvcml6b250YWxTZW5zb3JzLAorICBCTV9HUlBfTGVmdFNlbnNvcnMsCisgIEJNX0dSUF9SaWdodFNlbnNvcnMsCisgIEJNX0dSUF9TY2FsZWRMZWZ0U2Vuc29ycywKKyAgQk1fR1JQX1NjYWxlZFJpZ2h0U2Vuc29ycworfSBCTV9LZXlHcm91cDsKKworI2VuZGlmIC8qIEJSTFRUWV9JTkNMVURFRF9CTV9CUkxERUZTICovIApkaWZmIC0tZ2l0IGEvRHJpdmVycy9CcmFpbGxlL0JyYWlsQ29tbS9NYWtlZmlsZS5pbiBiL0RyaXZlcnMvQnJhaWxsZS9CcmFpbENvbW0vTWFrZWZpbGUuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTRkMzNkNAotLS0gL2Rldi9udWxsCisrKyBiL0RyaXZlcnMvQnJhaWxsZS9CcmFpbENvbW0vTWFrZWZpbGUuaW4KQEAgLTAsMCArMSwyOCBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorIyAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyMKKyMgQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorIworIyBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorIworIyBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisjIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyMgbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisjCisjIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK0RSSVZFUl9DT0RFID0gYmMKK0RSSVZFUl9OQU1FID0gQnJhaWxDb21tCitEUklWRVJfVVNBR0UgPSBJSUkKK0RSSVZFUl9WRVJTSU9OID0gCitEUklWRVJfREVWRUxPUEVSUyA9IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4KK2luY2x1ZGUgJChTUkNfVE9QKWJyYWlsbGUubWsKKworYnJhaWxsZS4kTzoKKwkkKENDKSAkKEJSTF9DRkxBR1MpIC1jICQoU1JDX0RJUikvYnJhaWxsZS5jCisKZGlmZiAtLWdpdCBhL0RyaXZlcnMvQnJhaWxsZS9CcmFpbENvbW0vYnJhaWxsZS5jIGIvRHJpdmVycy9CcmFpbGxlL0JyYWlsQ29tbS9icmFpbGxlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjE1OTgwNAotLS0gL2Rldi9udWxsCisrKyBiL0RyaXZlcnMvQnJhaWxsZS9CcmFpbENvbW0vYnJhaWxsZS5jCkBAIC0wLDAgKzEsMzA0IEBACisvKgorICogQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyAqICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyAqCisgKiBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorICoKKyAqIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyAqCisgKiBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisgKi8KKworI2luY2x1ZGUgInByb2xvZ3VlLmgiCisKKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorCisjaW5jbHVkZSAiaW9fc2VyaWFsLmgiCisKK3R5cGVkZWYgZW51bSB7CisgIFBBUk1fQkFVRAorfSBEcml2ZXJQYXJhbWV0ZXI7CisjZGVmaW5lIEJSTFBBUk1TICJiYXVkIgorCisjZGVmaW5lIEJSTF9TVEFUVVNfRklFTERTIHNmR2VuZXJpYworI2RlZmluZSBCUkxfSEFWRV9TVEFUVVNfQ0VMTFMKKyNpbmNsdWRlICJicmxfZHJpdmVyLmgiCisKK3N0YXRpYyBjb25zdCBpbnQgc2hvd091dHB1dE1hcHBpbmcgPSAwOworCitzdGF0aWMgU2VyaWFsRGV2aWNlICpzZXJpYWxEZXZpY2UgPSBOVUxMOworc3RhdGljIHVuc2lnbmVkIGludCBzZXJpYWxCYXVkOworc3RhdGljIHVuc2lnbmVkIGludCBjaGFyYWN0ZXJzUGVyU2Vjb25kOworc3RhdGljIGNvbnN0IGludCAqaW5pdGlhbENvbW1hbmQ7CisKK3R5cGVkZWYgZW51bSB7CisgIElQVF9NSU5JTVVNX0xJTkUgICAgID0gICAxLAorICBJUFRfTUFYSU1VTV9MSU5FICAgICA9ICAyNSwKKyAgSVBUX1NFQVJDSF9BVFRSSUJVVEUgPSAgOTAsCisgIElQVF9DVVJSRU5UX0xJTkUgICAgID0gMTAwLAorICBJUFRfQ1VSUkVOVF9MT0NBVElPTiA9IDEwMSwKK30gSW5wdXRQYWNrZXRUeXBlOworCit0eXBlZGVmIHVuaW9uIHsKKyAgdW5zaWduZWQgY2hhciBieXRlc1s0XTsKKworICBzdHJ1Y3QgeworICAgIHVuc2lnbmVkIGNoYXIgdHlwZTsKKworICAgIHVuaW9uIHsKKyAgICAgIHN0cnVjdCB7CisgICAgICAgIHVuc2lnbmVkIGNoYXIgbGluZTsKKyAgICAgICAgdW5zaWduZWQgY2hhciBjb2x1bW47CisgICAgICAgIHVuc2lnbmVkIGNoYXIgYXR0cmlidXRlczsKKyAgICAgIH0gUEFDS0VEIHNlYXJjaDsKKyAgICB9IGZpZWxkczsKKyAgfSBQQUNLRUQgZGF0YTsKK30gSW5wdXRQYWNrZXQ7CisKK3R5cGVkZWYgaW50ICgqV3JpdGVGdW5jdGlvbikgKEJyYWlsbGVEaXNwbGF5ICpicmwpOworc3RhdGljIFdyaXRlRnVuY3Rpb24gd3JpdGVGdW5jdGlvbjsKKworc3RhdGljIHVuc2lnbmVkIGNoYXIgc3RhdHVzQ2VsbHNbR1NDX0NPVU5UXTsKKworc3RhdGljIGludAorYnJsX2NvbnN0cnVjdCAoQnJhaWxsZURpc3BsYXkgKmJybCwgY2hhciAqKnBhcmFtZXRlcnMsIGNvbnN0IGNoYXIgKmRldmljZSkgeworICB7CisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBiYXVkVGFibGVbXSA9IHs5NjAwLCAxOTIwMCwgMH07CisgICAgY29uc3QgY2hhciAqYmF1ZFBhcmFtZXRlciA9IHBhcmFtZXRlcnNbUEFSTV9CQVVEXTsKKworICAgIGlmICghKmJhdWRQYXJhbWV0ZXIgfHwKKyAgICAgICAgIXNlcmlhbFZhbGlkYXRlQmF1ZCgmc2VyaWFsQmF1ZCwgImJhdWQiLCBiYXVkUGFyYW1ldGVyLCBiYXVkVGFibGUpKQorICAgICAgc2VyaWFsQmF1ZCA9IGJhdWRUYWJsZVswXTsKKyAgfQorCisgIGlmICghaXNTZXJpYWxEZXZpY2VJZGVudGlmaWVyKCZkZXZpY2UpKSB7CisgICAgdW5zdXBwb3J0ZWREZXZpY2VJZGVudGlmaWVyKGRldmljZSk7CisgICAgcmV0dXJuIDA7CisgIH0KKworICBpZiAoKHNlcmlhbERldmljZSA9IHNlcmlhbE9wZW5EZXZpY2UoZGV2aWNlKSkpIHsKKyAgICBpZiAoc2VyaWFsUmVzdGFydERldmljZShzZXJpYWxEZXZpY2UsIHNlcmlhbEJhdWQpKSB7CisgICAgICBjaGFyYWN0ZXJzUGVyU2Vjb25kID0gc2VyaWFsQmF1ZCAvIDEwOworICAgICAgd3JpdGVGdW5jdGlvbiA9IE5VTEw7CisKKyAgICAgIHsKKyAgICAgICAgc3RhdGljIGNvbnN0IFRyYW5zbGF0aW9uVGFibGUgb3V0cHV0VGFibGUgPSB7CisjZGVmaW5lIE1BUChieXRlLGNlbGwpIFtjZWxsXSA9IGJ5dGUKKyNpbmNsdWRlICJicmwtb3V0LmgiCisjdW5kZWYgTUFQCisgICAgICAgIH07CisgICAgICAgIHNldE91dHB1dFRhYmxlKG91dHB1dFRhYmxlKTsKKyAgICAgIH0KKworICAgICAgeworICAgICAgICBzdGF0aWMgY29uc3QgaW50IGluaXRpYWxDb21tYW5kc1tdID0geworICAgICAgICAgIEJSTF9DTURfVFVORVMgfCBCUkxfRkxHX1RPR0dMRV9PRkYsCisgICAgICAgICAgQlJMX0NNRF9DU1JUUksgfCBCUkxfRkxHX1RPR0dMRV9PRkYsCisgICAgICAgICAgQlJMX0NNRF9DU1JWSVMgfCBCUkxfRkxHX1RPR0dMRV9PRkYsCisgICAgICAgICAgQlJMX0NNRF9BVFRSVklTIHwgQlJMX0ZMR19UT0dHTEVfT0ZGLAorICAgICAgICAgIEVPRgorICAgICAgICB9OworCisgICAgICAgIGluaXRpYWxDb21tYW5kID0gaW5pdGlhbENvbW1hbmRzOworICAgICAgfQorCisgICAgICBicmwtPnRleHRDb2x1bW5zID0gODA7CisgICAgICByZXR1cm4gMTsKKyAgICB9CisKKyAgICBzZXJpYWxDbG9zZURldmljZShzZXJpYWxEZXZpY2UpOworICAgIHNlcmlhbERldmljZSA9IE5VTEw7CisgIH0KKworICByZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQKK2JybF9kZXN0cnVjdCAoQnJhaWxsZURpc3BsYXkgKmJybCkgeworICBpZiAoc2VyaWFsRGV2aWNlKSB7CisgICAgc2VyaWFsQ2xvc2VEZXZpY2Uoc2VyaWFsRGV2aWNlKTsKKyAgICBzZXJpYWxEZXZpY2UgPSBOVUxMOworICB9Cit9CisKK3N0YXRpYyBpbnQKK3dyaXRlUGFja2V0IChCcmFpbGxlRGlzcGxheSAqYnJsLCBjb25zdCB1bnNpZ25lZCBjaGFyICpwYWNrZXQsIHNpemVfdCBzaXplKSB7CisgIGxvZ091dHB1dFBhY2tldChwYWNrZXQsIHNpemUpOworICBicmwtPndyaXRlRGVsYXkgKz0gKHNpemUgKiAxMDAwIC8gY2hhcmFjdGVyc1BlclNlY29uZCkgKyAxOworICByZXR1cm4gc2VyaWFsV3JpdGVEYXRhKHNlcmlhbERldmljZSwgcGFja2V0LCBzaXplKSAhPSAtMTsKK30KKworc3RhdGljIGludAord3JpdGVMaW5lIChCcmFpbGxlRGlzcGxheSAqYnJsKSB7CisgIHVuc2lnbmVkIGNoYXIgcGFja2V0WzIgKyAoYnJsLT50ZXh0Q29sdW1ucyAqIDIpXTsKKyAgdW5zaWduZWQgY2hhciAqYnl0ZSA9IHBhY2tldDsKKworICAqYnl0ZSsrID0gc3RhdHVzQ2VsbHNbZ3NjU2NyZWVuQ3Vyc29yUm93XTsKKyAgKmJ5dGUrKyA9IHN0YXR1c0NlbGxzW2dzY1NjcmVlbkN1cnNvckNvbHVtbl07CisKKyAgeworICAgIGludCBpOworCisgICAgZm9yIChpPTA7IGk8YnJsLT50ZXh0Q29sdW1uczsgaSs9MSkgeworICAgICAgKmJ5dGUrKyA9IHRyYW5zbGF0ZU91dHB1dENlbGwoYnJsLT5idWZmZXJbaV0pOworICAgICAgKmJ5dGUrKyA9IDBYMDc7CisgICAgfQorICB9CisKKyAgaWYgKHNob3dPdXRwdXRNYXBwaW5nKSB7CisgICAgaW50IHJvdyA9IHN0YXR1c0NlbGxzW2dzY0JyYWlsbGVXaW5kb3dSb3ddOworCisgICAgaWYgKC0tcm93IDwgMFgxMCkgeworICAgICAgaW50IGNvbHVtbjsKKworICAgICAgZm9yIChjb2x1bW49MDsgY29sdW1uPDgwOyBjb2x1bW4rPTEpIHBhY2tldFsyKyhjb2x1bW4qMildID0gJyAnOworCisgICAgICBmb3IgKGNvbHVtbj0wOyBjb2x1bW48MFgxMDsgY29sdW1uKz0xKSB7CisgICAgICAgIHVuc2lnbmVkIGNoYXIgKmJ5dGUgPSAmcGFja2V0WzIgKyAoY29sdW1uICogOCldOworICAgICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBoZXhbXSA9ICIwMTIzNDU2Nzg5QUJDREVGIjsKKworICAgICAgICAqYnl0ZSA9IGhleFtyb3ddOworICAgICAgICBieXRlICs9IDI7CisKKyAgICAgICAgKmJ5dGUgPSBoZXhbY29sdW1uXTsKKyAgICAgICAgYnl0ZSArPSAyOworCisgICAgICAgICpieXRlID0gKHJvdyA8PCA0KSB8IGNvbHVtbjsKKyAgICAgIH0KKyAgICB9CisgIH0KKworICByZXR1cm4gd3JpdGVQYWNrZXQoYnJsLCBwYWNrZXQsIGJ5dGUtcGFja2V0KTsKK30KKworc3RhdGljIGludAord3JpdGVMb2NhdGlvbiAoQnJhaWxsZURpc3BsYXkgKmJybCkgeworICB1bnNpZ25lZCBjaGFyIHBhY2tldFsyXTsKKyAgdW5zaWduZWQgY2hhciAqYnl0ZSA9IHBhY2tldDsKKworICAqYnl0ZSsrID0gc3RhdHVzQ2VsbHNbZ3NjU2NyZWVuQ3Vyc29yUm93XTsKKyAgKmJ5dGUrKyA9IHN0YXR1c0NlbGxzW2dzY1NjcmVlbkN1cnNvckNvbHVtbl07CisKKyAgcmV0dXJuIHdyaXRlUGFja2V0KGJybCwgcGFja2V0LCBieXRlLXBhY2tldCk7Cit9CisKK3N0YXRpYyBpbnQKK2JybF93cml0ZVdpbmRvdyAoQnJhaWxsZURpc3BsYXkgKmJybCwgY29uc3Qgd2NoYXJfdCAqdGV4dCkgeworICBpZiAod3JpdGVGdW5jdGlvbikgeworICAgIGludCBvayA9IHdyaXRlRnVuY3Rpb24oYnJsKTsKKyAgICB3cml0ZUZ1bmN0aW9uID0gTlVMTDsKKyAgICBpZiAoIW9rKSByZXR1cm4gMDsKKyAgfQorCisgIHJldHVybiAxOworfQorCitzdGF0aWMgaW50Citicmxfd3JpdGVTdGF0dXMgKEJyYWlsbGVEaXNwbGF5ICpicmwsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnN0YXR1cykgeworICBtZW1jcHkoc3RhdHVzQ2VsbHMsIHN0YXR1cywgR1NDX0NPVU5UKTsKKyAgcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQKK3JlYWRCeXRlICh1bnNpZ25lZCBjaGFyICpieXRlLCBpbnQgd2FpdCkgeworICBjb25zdCBpbnQgdGltZW91dCA9IDEwMDsKKyAgc3NpemVfdCByZXN1bHQgPSBzZXJpYWxSZWFkRGF0YShzZXJpYWxEZXZpY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnl0ZSwgc2l6ZW9mKCpieXRlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAod2FpdD8gdGltZW91dDogMCksIHRpbWVvdXQpOworCisgIGlmIChyZXN1bHQgPiAwKSByZXR1cm4gMTsKKyAgaWYgKHJlc3VsdCA9PSAwKSBlcnJubyA9IEVBR0FJTjsKKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK3JlYWRQYWNrZXQgKEJyYWlsbGVEaXNwbGF5ICpicmwsIElucHV0UGFja2V0ICpwYWNrZXQpIHsKKyAgaW50IGxlbmd0aCA9IDE7CisgIGludCBvZmZzZXQgPSAwOworCisgIHdoaWxlICgxKSB7CisgICAgdW5zaWduZWQgY2hhciBieXRlOworCisgICAgeworICAgICAgaW50IHN0YXJ0ZWQgPSBvZmZzZXQgPiAwOworICAgICAgaWYgKCFyZWFkQnl0ZSgmYnl0ZSwgc3RhcnRlZCkpIHsKKyAgICAgICAgaWYgKHN0YXJ0ZWQpIGxvZ1BhcnRpYWxQYWNrZXQocGFja2V0LT5ieXRlcywgb2Zmc2V0KTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgICB9CisgICAgfQorCisgICAgaWYgKCFvZmZzZXQpIHsKKyAgICAgIHN3aXRjaCAoYnl0ZSkgeworICAgICAgICBjYXNlIElQVF9DVVJSRU5UX0xJTkU6CisgICAgICAgIGNhc2UgSVBUX0NVUlJFTlRfTE9DQVRJT046CisgICAgICAgICAgbGVuZ3RoID0gMTsKKyAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIElQVF9TRUFSQ0hfQVRUUklCVVRFOgorICAgICAgICAgIGxlbmd0aCA9IDQ7CisgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICBpZiAoKGJ5dGUgPj0gSVBUX01JTklNVU1fTElORSkgJiYgKGJ5dGUgPD0gSVBUX01BWElNVU1fTElORSkpIHsKKyAgICAgICAgICAgIGxlbmd0aCA9IDE7CisgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGxvZ0lnbm9yZWRCeXRlKGJ5dGUpOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgfQorICAgICAgICAgIGJyZWFrOworICAgICAgfQorICAgIH0KKworICAgIHBhY2tldC0+Ynl0ZXNbb2Zmc2V0KytdID0gYnl0ZTsKKyAgICBpZiAob2Zmc2V0ID09IGxlbmd0aCkgeworICAgICAgbG9nSW5wdXRQYWNrZXQocGFja2V0LT5ieXRlcywgb2Zmc2V0KTsKKyAgICAgIHJldHVybiBsZW5ndGg7CisgICAgfQorICB9Cit9CisKK3N0YXRpYyBpbnQKK2JybF9yZWFkQ29tbWFuZCAoQnJhaWxsZURpc3BsYXkgKmJybCwgS2V5VGFibGVDb21tYW5kQ29udGV4dCBjb250ZXh0KSB7CisgIElucHV0UGFja2V0IHBhY2tldDsKKyAgaW50IGxlbmd0aDsKKworICBpZiAoY29udGV4dCA9PSBLVEJfQ1RYX1dBSVRJTkcpIHJldHVybiBCUkxfQ01EX05PT1A7CisgIGlmICh3cml0ZUZ1bmN0aW9uKSByZXR1cm4gRU9GOworICB3aGlsZSAoKmluaXRpYWxDb21tYW5kICE9IEVPRikgZW5xdWV1ZUNvbW1hbmQoKmluaXRpYWxDb21tYW5kKyspOworCisgIHdoaWxlICgobGVuZ3RoID0gcmVhZFBhY2tldChicmwsICZwYWNrZXQpKSkgeworICAgIGlmICgocGFja2V0LmRhdGEudHlwZSA+PSBJUFRfTUlOSU1VTV9MSU5FKSAmJgorICAgICAgICAocGFja2V0LmRhdGEudHlwZSA8PSBJUFRfTUFYSU1VTV9MSU5FKSkgeworICAgICAgZW5xdWV1ZUNvbW1hbmQoQlJMX0NNRF9CTEsoR09UT0xJTkUpIHwgQlJMX0ZMR19NT1RJT05fVE9MRUZUIHwgKHBhY2tldC5kYXRhLnR5cGUgLSBJUFRfTUlOSU1VTV9MSU5FKSk7CisgICAgICB3cml0ZUZ1bmN0aW9uID0gd3JpdGVMaW5lOworICAgICAgcmV0dXJuIEVPRjsKKyAgICB9CisKKyAgICBzd2l0Y2ggKHBhY2tldC5kYXRhLnR5cGUpIHsKKyAgICAgIGNhc2UgSVBUX1NFQVJDSF9BVFRSSUJVVEU6CisgICAgICBjYXNlIElQVF9DVVJSRU5UX0xJTkU6CisgICAgICAgIGVucXVldWVDb21tYW5kKEJSTF9DTURfSE9NRSk7CisgICAgICAgIGVucXVldWVDb21tYW5kKEJSTF9DTURfTE5CRUcpOworICAgICAgICB3cml0ZUZ1bmN0aW9uID0gd3JpdGVMaW5lOworICAgICAgICByZXR1cm4gRU9GOworCisgICAgICBjYXNlIElQVF9DVVJSRU5UX0xPQ0FUSU9OOgorICAgICAgICB3cml0ZUZ1bmN0aW9uID0gd3JpdGVMb2NhdGlvbjsKKyAgICAgICAgcmV0dXJuIEVPRjsKKworICAgICAgZGVmYXVsdDoKKyAgICAgICAgbG9nVW5leHBlY3RlZFBhY2tldCgmcGFja2V0LCBsZW5ndGgpOworICAgICAgICBicmVhazsKKyAgICB9CisgIH0KKworICByZXR1cm4gKGVycm5vID09IEVBR0FJTik/IEVPRjogQlJMX0NNRF9SRVNUQVJUQlJMOworfQpkaWZmIC0tZ2l0IGEvRHJpdmVycy9CcmFpbGxlL0JyYWlsQ29tbS9icmwtb3V0LmggYi9Ecml2ZXJzL0JyYWlsbGUvQnJhaWxDb21tL2JybC1vdXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZDE4NzY4Ci0tLSAvZGV2L251bGwKKysrIGIvRHJpdmVycy9CcmFpbGxlL0JyYWlsQ29tbS9icmwtb3V0LmgKQEAgLTAsMCArMSwzMzkgQEAKKy8qCisgKiBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorICogICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorICoKKyAqIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorICoKKyAqIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyAqLworCisvKiBEb3QgY29tYmluYXRpb25zIG1hcHBlZCBtb3JlIHRoYW4gb25jZToKKyAqICAgIERvdHMgICAgIEJ5dGVzCisgKiAgICAwICAgICAgICAwWDAwIDBYMjAKKyAqICAgIDEyMzQ1Njc4IDBYREIgMFhGRgorICogICAgMTIzNDU2OCAgMFhDMCAwWEUxCisgKiAgICAxMjM0NiAgICAwWDJCIDBYOTgKKyAqICAgIDEyMzQ2OCAgIDBYMjYgMFhFMAorICogICAgMTI0NiAgICAgMFg4RCAwWDk1CisgKiAgICAxMjYgICAgICAwWDNDIDBYQTEKKyAqICAgIDE0NTYgICAgIDBYMjUgMFhBMgorICogICAgMTU2ICAgICAgMFgzRSAwWDhDCisgKiAgICAxNiAgICAgICAwWDg2IDBYQTAKKyAqICAgIDE2NyAgICAgIDBYOEYgMFhBNAorICogICAgMTY3OCAgICAgMFhFQiAwWEY4CisgKiAgICAyMzU2NzggICAwWEY2IDBYRkEKKyAqICAgIDIzNTY4ICAgIDBYQjcgMFhCRAorICogICAgMjM1OCAgICAgMFgyMSAwWDlFCisgKiAgICAyMzY4ICAgICAwWEI4IDBYRTgKKyAqICAgIDI1NzggICAgIDBYQzYgMFhGQworICogICAgMjY3ICAgICAgMFhCQSAwWEM1CisgKiAgICAzNDYgICAgICAwWDVGIDBYRjcKKyAqICAgIDM1NzggICAgIDBYOUQgMFhERQorICogICAgMzU4ICAgICAgMFg5QiAwWEVBCisgKiAgICAzOCAgICAgICAwWEE4IDBYQkIKKyAqICAgIDQgICAgICAgIDBYNDAgMFg2MAorICogICAgNDU3ICAgICAgMFg1RSAwWEJFCisgKiAgICA0NjcgICAgICAwWEI2IDBYRjQKKyAqICAgIDUgICAgICAgIDBYMjcgMFhCMgorICogICAgNTggICAgICAgMFg4NyAwWEFECisgKiAgICA3ICAgICAgICAwWEYyIDBYRkQKKyAqICAgIDggICAgICAgIDBYQjkgMFhGRQorICovCisKKy8qIFVubWFwcGVkIGRvdCBjb21iaW5hdGlvbnM6CisgKiAgICAxMjM0NTY3CisgKiAgICAxMjM1NjcKKyAqICAgIDEyNDY3CisgKiAgICAxMjU2OAorICogICAgMTM0NTY4CisgKiAgICAxMzQ1OAorICogICAgMTM1OAorICogICAgMTQ2NworICogICAgMTQ2OAorICogICAgMjM0NTY3CisgKiAgICAyMzQ1NjgKKyAqICAgIDIzNQorICogICAgMjM2NworICogICAgMjM3CisgKiAgICAyNDY4CisgKiAgICAyNTYKKyAqICAgIDI1Njc4CisgKiAgICAyOAorICogICAgMzQ1NjgKKyAqICAgIDM0NjgKKyAqICAgIDM0NworICogICAgMzQ4CisgKiAgICAzNTcKKyAqICAgIDM3CisgKiAgICA0NQorICogICAgNDU3OAorICogICAgNDU4CisgKiAgICA1NworICogICAgNjcKKyAqLworCitNQVAoMFgwMCwgMCksCitNQVAoMFgwMSwgQlJMX0RPVDF8QlJMX0RPVDd8QlJMX0RPVDgpLAorTUFQKDBYMDIsIEJSTF9ET1QxfEJSTF9ET1QyfEJSTF9ET1Q3fEJSTF9ET1Q4KSwKK01BUCgwWDAzLCBCUkxfRE9UMXxCUkxfRE9UNHxCUkxfRE9UN3xCUkxfRE9UOCksCitNQVAoMFgwNCwgQlJMX0RPVDF8QlJMX0RPVDR8QlJMX0RPVDV8QlJMX0RPVDd8QlJMX0RPVDgpLAorTUFQKDBYMDUsIEJSTF9ET1QxfEJSTF9ET1Q1fEJSTF9ET1Q3fEJSTF9ET1Q4KSwKK01BUCgwWDA2LCBCUkxfRE9UMXxCUkxfRE9UMnxCUkxfRE9UNHxCUkxfRE9UN3xCUkxfRE9UOCksCitNQVAoMFgwNywgQlJMX0RPVDF8QlJMX0RPVDJ8QlJMX0RPVDR8QlJMX0RPVDV8QlJMX0RPVDd8QlJMX0RPVDgpLAorTUFQKDBYMDgsIEJSTF9ET1QxfEJSTF9ET1QyfEJSTF9ET1Q1fEJSTF9ET1Q3fEJSTF9ET1Q4KSwKK01BUCgwWDA5LCBCUkxfRE9UMnxCUkxfRE9UNHxCUkxfRE9UN3xCUkxfRE9UOCksCitNQVAoMFgwQSwgQlJMX0RPVDJ8QlJMX0RPVDR8QlJMX0RPVDV8QlJMX0RPVDd8QlJMX0RPVDgpLAorTUFQKDBYMEIsIEJSTF9ET1QxfEJSTF9ET1QzfEJSTF9ET1Q3fEJSTF9ET1Q4KSwKK01BUCgwWDBDLCBCUkxfRE9UMXxCUkxfRE9UMnxCUkxfRE9UM3xCUkxfRE9UN3xCUkxfRE9UOCksCitNQVAoMFgwRCwgQlJMX0RPVDF8QlJMX0RPVDN8QlJMX0RPVDR8QlJMX0RPVDd8QlJMX0RPVDgpLAorTUFQKDBYMEUsIEJSTF9ET1QxfEJSTF9ET1QzfEJSTF9ET1Q0fEJSTF9ET1Q1fEJSTF9ET1Q3fEJSTF9ET1Q4KSwKK01BUCgwWDBGLCBCUkxfRE9UMXxCUkxfRE9UM3xCUkxfRE9UNXxCUkxfRE9UN3xCUkxfRE9UOCksCitNQVAoMFgxMCwgQlJMX0RPVDF8QlJMX0RPVDJ8QlJMX0RPVDN8QlJMX0RPVDR8QlJMX0RPVDd8QlJMX0RPVDgpLAorTUFQKDBYMTEsIEJSTF9ET1QxfEJSTF9ET1QyfEJSTF9ET1QzfEJSTF9ET1Q0fEJSTF9ET1Q1fEJSTF9ET1Q3fEJSTF9ET1Q4KSwKK01BUCgwWDEyLCBCUkxfRE9UMXxCUkxfRE9UMnxCUkxfRE9UM3xCUkxfRE9UNXxCUkxfRE9UN3xCUkxfRE9UOCksCitNQVAoMFgxMywgQlJMX0RPVDJ8QlJMX0RPVDN8QlJMX0RPVDR8QlJMX0RPVDd8QlJMX0RPVDgpLAorTUFQKDBYMTQsIEJSTF9ET1QyfEJSTF9ET1QzfEJSTF9ET1Q0fEJSTF9ET1Q1fEJSTF9ET1Q3fEJSTF9ET1Q4KSwKK01BUCgwWDE1LCBCUkxfRE9UMXxCUkxfRE9UM3xCUkxfRE9UNnxCUkxfRE9UN3xCUkxfRE9UOCksCitNQVAoMFgxNiwgQlJMX0RPVDF8QlJMX0RPVDJ8QlJMX0RPVDN8QlJMX0RPVDZ8QlJMX0RPVDd8QlJMX0RPVDgpLAorTUFQKDBYMTcsIEJSTF9ET1QyfEJSTF9ET1Q0fEJSTF9ET1Q1fEJSTF9ET1Q2fEJSTF9ET1Q3fEJSTF9ET1Q4KSwKK01BUCgwWDE4LCBCUkxfRE9UMXxCUkxfRE9UM3xCUkxfRE9UNHxCUkxfRE9UNnxCUkxfRE9UN3xCUkxfRE9UOCksCitNQVAoMFgxOSwgQlJMX0RPVDF8QlJMX0RPVDN8QlJMX0RPVDR8QlJMX0RPVDV8QlJMX0RPVDZ8QlJMX0RPVDd8QlJMX0RPVDgpLAorTUFQKDBYMUEsIEJSTF9ET1QxfEJSTF9ET1QzfEJSTF9ET1Q1fEJSTF9ET1Q2fEJSTF9ET1Q3fEJSTF9ET1Q4KSwKK01BUCgwWDFCLCBCUkxfRE9UMXxCUkxfRE9UMnxCUkxfRE9UM3xCUkxfRE9UNXxCUkxfRE9UNnxCUkxfRE9UN3xCUkxfRE9UOCksCitNQVAoMFgxQywgQlJMX0RPVDN8QlJMX0RPVDR8QlJMX0RPVDd8QlJMX0RPVDgpLAorTUFQKDBYMUQsIEJSTF9ET1QyfEJSTF9ET1QzfEJSTF9ET1Q0fEJSTF9ET1Q1fEJSTF9ET1Q2fEJSTF9ET1Q3fEJSTF9ET1Q4KSwKK01BUCgwWDFFLCBCUkxfRE9UMnxCUkxfRE9UM3xCUkxfRE9UNHxCUkxfRE9UNnxCUkxfRE9UN3xCUkxfRE9UOCksCitNQVAoMFgxRiwgQlJMX0RPVDR8QlJMX0RPVDV8QlJMX0RPVDZ8QlJMX0RPVDd8QlJMX0RPVDgpLAorTUFQKDBYMjAsIDApLAorTUFQKDBYMjEsIEJSTF9ET1QyfEJSTF9ET1QzfEJSTF9ET1Q1fEJSTF9ET1Q4KSwKK01BUCgwWDIyLCBCUkxfRE9UNXxCUkxfRE9UNiksCitNQVAoMFgyMywgQlJMX0RPVDN8QlJMX0RPVDR8QlJMX0RPVDV8QlJMX0RPVDYpLAorTUFQKDBYMjQsIEJSTF9ET1Q0fEJSTF9ET1Q2KSwKK01BUCgwWDI1LCBCUkxfRE9UMXxCUkxfRE9UNHxCUkxfRE9UNXxCUkxfRE9UNiksCitNQVAoMFgyNiwgQlJMX0RPVDF8QlJMX0RPVDJ8QlJMX0RPVDN8QlJMX0RPVDR8QlJMX0RPVDZ8QlJMX0RPVDgpLAorTUFQKDBYMjcsIEJSTF9ET1Q1KSwKK01BUCgwWDI4LCBCUkxfRE9UMnxCUkxfRE9UM3xCUkxfRE9UNiksCitNQVAoMFgyOSwgQlJMX0RPVDN8QlJMX0RPVDV8QlJMX0RPVDYpLAorTUFQKDBYMkEsIEJSTF9ET1QzfEJSTF9ET1Q1KSwKK01BUCgwWDJCLCBCUkxfRE9UMXxCUkxfRE9UMnxCUkxfRE9UM3xCUkxfRE9UNHxCUkxfRE9UNiksCitNQVAoMFgyQywgQlJMX0RPVDIpLAorTUFQKDBYMkQsIEJSTF9ET1QzfEJSTF9ET1Q2KSwKK01BUCgwWDJFLCBCUkxfRE9UMyksCitNQVAoMFgyRiwgQlJMX0RPVDN8QlJMX0RPVDQpLAorTUFQKDBYMzAsIEJSTF9ET1QyfEJSTF9ET1Q0fEJSTF9ET1Q1fEJSTF9ET1Q4KSwKK01BUCgwWDMxLCBCUkxfRE9UMXxCUkxfRE9UOCksCitNQVAoMFgzMiwgQlJMX0RPVDF8QlJMX0RPVDJ8QlJMX0RPVDgpLAorTUFQKDBYMzMsIEJSTF9ET1QxfEJSTF9ET1Q0fEJSTF9ET1Q4KSwKK01BUCgwWDM0LCBCUkxfRE9UMXxCUkxfRE9UNHxCUkxfRE9UNXxCUkxfRE9UOCksCitNQVAoMFgzNSwgQlJMX0RPVDF8QlJMX0RPVDV8QlJMX0RPVDgpLAorTUFQKDBYMzYsIEJSTF9ET1QxfEJSTF9ET1QyfEJSTF9ET1Q0fEJSTF9ET1Q4KSwKK01BUCgwWDM3LCBCUkxfRE9UMXxCUkxfRE9UMnxCUkxfRE9UNHxCUkxfRE9UNXxCUkxfRE9UOCksCitNQVAoMFgzOCwgQlJMX0RPVDF8QlJMX0RPVDJ8QlJMX0RPVDV8QlJMX0RPVDgpLAorTUFQKDBYMzksIEJSTF9ET1QyfEJSTF9ET1Q0fEJSTF9ET1Q4KSwKK01BUCgwWDNBLCBCUkxfRE9UMnxCUkxfRE9UNSksCitNQVAoMFgzQiwgQlJMX0RPVDJ8QlJMX0RPVDMpLAorTUFQKDBYM0MsIEJSTF9ET1QxfEJSTF9ET1QyfEJSTF9ET1Q2KSwKK01BUCgwWDNELCBCUkxfRE9UMnxCUkxfRE9UM3xCUkxfRE9UNXxCUkxfRE9UNiksCitNQVAoMFgzRSwgQlJMX0RPVDF8QlJMX0RPVDV8QlJMX0RPVDYpLAorTUFQKDBYM0YsIEJSTF9ET1QyfEJSTF9ET1Q2KSwKK01BUCgwWDQwLCBCUkxfRE9UNCksCitNQVAoMFg0MSwgQlJMX0RPVDF8QlJMX0RPVDcpLAorTUFQKDBYNDIsIEJSTF9ET1QxfEJSTF9ET1QyfEJSTF9ET1Q3KSwKK01BUCgwWDQzLCBCUkxfRE9UMXxCUkxfRE9UNHxCUkxfRE9UNyksCitNQVAoMFg0NCwgQlJMX0RPVDF8QlJMX0RPVDR8QlJMX0RPVDV8QlJMX0RPVDcpLAorTUFQKDBYNDUsIEJSTF9ET1QxfEJSTF9ET1Q1fEJSTF9ET1Q3KSwKK01BUCgwWDQ2LCBCUkxfRE9UMXxCUkxfRE9UMnxCUkxfRE9UNHxCUkxfRE9UNyksCitNQVAoMFg0NywgQlJMX0RPVDF8QlJMX0RPVDJ8QlJMX0RPVDR8QlJMX0RPVDV8QlJMX0RPVDcpLAorTUFQKDBYNDgsIEJSTF9ET1QxfEJSTF9ET1QyfEJSTF9ET1Q1fEJSTF9ET1Q3KSwKK01BUCgwWDQ5LCBCUkxfRE9UMnxCUkxfRE9UNHxCUkxfRE9UNyksCitNQVAoMFg0QSwgQlJMX0RPVDJ8QlJMX0RPVDR8QlJMX0RPVDV8QlJMX0RPVDcpLAorTUFQKDBYNEIsIEJSTF9ET1QxfEJSTF9ET1QzfEJSTF9ET1Q3KSwKK01BUCgwWDRDLCBCUkxfRE9UMXxCUkxfRE9UMnxCUkxfRE9UM3xCUkxfRE9UNyksCitNQVAoMFg0RCwgQlJMX0RPVDF8QlJMX0RPVDN8QlJMX0RPVDR8QlJMX0RPVDcpLAorTUFQKDBYNEUsIEJSTF9ET1QxfEJSTF9ET1QzfEJSTF9ET1Q0fEJSTF9ET1Q1fEJSTF9ET1Q3KSwKK01BUCgwWDRGLCBCUkxfRE9UMXxCUkxfRE9UM3xCUkxfRE9UNXxCUkxfRE9UNyksCitNQVAoMFg1MCwgQlJMX0RPVDF8QlJMX0RPVDJ8QlJMX0RPVDN8QlJMX0RPVDR8QlJMX0RPVDcpLAorTUFQKDBYNTEsIEJSTF9ET1QxfEJSTF9ET1QyfEJSTF9ET1QzfEJSTF9ET1Q0fEJSTF9ET1Q1fEJSTF9ET1Q3KSwKK01BUCgwWDUyLCBCUkxfRE9UMXxCUkxfRE9UMnxCUkxfRE9UM3xCUkxfRE9UNXxCUkxfRE9UNyksCitNQVAoMFg1MywgQlJMX0RPVDJ8QlJMX0RPVDN8QlJMX0RPVDR8QlJMX0RPVDcpLAorTUFQKDBYNTQsIEJSTF9ET1QyfEJSTF9ET1QzfEJSTF9ET1Q0fEJSTF9ET1Q1fEJSTF9ET1Q3KSwKK01BUCgwWDU1LCBCUkxfRE9UMXxCUkxfRE9UM3xCUkxfRE9UNnxCUkxfRE9UNyksCitNQVAoMFg1NiwgQlJMX0RPVDF8QlJMX0RPVDJ8QlJMX0RPVDN8QlJMX0RPVDZ8QlJMX0RPVDcpLAorTUFQKDBYNTcsIEJSTF9ET1QyfEJSTF9ET1Q0fEJSTF9ET1Q1fEJSTF9ET1Q2fEJSTF9ET1Q3KSwKK01BUCgwWDU4LCBCUkxfRE9UMXxCUkxfRE9UM3xCUkxfRE9UNHxCUkxfRE9UNnxCUkxfRE9UNyksCitNQVAoMFg1OSwgQlJMX0RPVDF8QlJMX0RPVDN8QlJMX0RPVDR8QlJMX0RPVDV8QlJMX0RPVDZ8QlJMX0RPVDcpLAorTUFQKDBYNUEsIEJSTF9ET1QxfEJSTF9ET1QzfEJSTF9ET1Q1fEJSTF9ET1Q2fEJSTF9ET1Q3KSwKK01BUCgwWDVCLCBCUkxfRE9UMXxCUkxfRE9UMnxCUkxfRE9UM3xCUkxfRE9UNXxCUkxfRE9UNiksCitNQVAoMFg1QywgQlJMX0RPVDF8QlJMX0RPVDR8QlJMX0RPVDYpLAorTUFQKDBYNUQsIEJSTF9ET1QyfEJSTF9ET1QzfEJSTF9ET1Q0fEJSTF9ET1Q1fEJSTF9ET1Q2KSwKK01BUCgwWDVFLCBCUkxfRE9UNHxCUkxfRE9UNXxCUkxfRE9UNyksCitNQVAoMFg1RiwgQlJMX0RPVDN8QlJMX0RPVDR8QlJMX0RPVDYpLAorTUFQKDBYNjAsIEJSTF9ET1Q0KSwKK01BUCgwWDYxLCBCUkxfRE9UMSksCitNQVAoMFg2MiwgQlJMX0RPVDF8QlJMX0RPVDIpLAorTUFQKDBYNjMsIEJSTF9ET1QxfEJSTF9ET1Q0KSwKK01BUCgwWDY0LCBCUkxfRE9UMXxCUkxfRE9UNHxCUkxfRE9UNSksCitNQVAoMFg2NSwgQlJMX0RPVDF8QlJMX0RPVDUpLAorTUFQKDBYNjYsIEJSTF9ET1QxfEJSTF9ET1QyfEJSTF9ET1Q0KSwKK01BUCgwWDY3LCBCUkxfRE9UMXxCUkxfRE9UMnxCUkxfRE9UNHxCUkxfRE9UNSksCitNQVAoMFg2OCwgQlJMX0RPVDF8QlJMX0RPVDJ8QlJMX0RPVDUpLAorTUFQKDBYNjksIEJSTF9ET1QyfEJSTF9ET1Q0KSwKK01BUCgwWDZBLCBCUkxfRE9UMnxCUkxfRE9UNHxCUkxfRE9UNSksCitNQVAoMFg2QiwgQlJMX0RPVDF8QlJMX0RPVDMpLAorTUFQKDBYNkMsIEJSTF9ET1QxfEJSTF9ET1QyfEJSTF9ET1QzKSwKK01BUCgwWDZELCBCUkxfRE9UMXxCUkxfRE9UM3xCUkxfRE9UNCksCitNQVAoMFg2RSwgQlJMX0RPVDF8QlJMX0RPVDN8QlJMX0RPVDR8QlJMX0RPVDUpLAorTUFQKDBYNkYsIEJSTF9ET1QxfEJSTF9ET1QzfEJSTF9ET1Q1KSwKK01BUCgwWDcwLCBCUkxfRE9UMXxCUkxfRE9UMnxCUkxfRE9UM3xCUkxfRE9UNCksCitNQVAoMFg3MSwgQlJMX0RPVDF8QlJMX0RPVDJ8QlJMX0RPVDN8QlJMX0RPVDR8QlJMX0RPVDUpLAorTUFQKDBYNzIsIEJSTF9ET1QxfEJSTF9ET1QyfEJSTF9ET1QzfEJSTF9ET1Q1KSwKK01BUCgwWDczLCBCUkxfRE9UMnxCUkxfRE9UM3xCUkxfRE9UNCksCitNQVAoMFg3NCwgQlJMX0RPVDJ8QlJMX0RPVDN8QlJMX0RPVDR8QlJMX0RPVDUpLAorTUFQKDBYNzUsIEJSTF9ET1QxfEJSTF9ET1QzfEJSTF9ET1Q2KSwKK01BUCgwWDc2LCBCUkxfRE9UMXxCUkxfRE9UMnxCUkxfRE9UM3xCUkxfRE9UNiksCitNQVAoMFg3NywgQlJMX0RPVDJ8QlJMX0RPVDR8QlJMX0RPVDV8QlJMX0RPVDYpLAorTUFQKDBYNzgsIEJSTF9ET1QxfEJSTF9ET1QzfEJSTF9ET1Q0fEJSTF9ET1Q2KSwKK01BUCgwWDc5LCBCUkxfRE9UMXxCUkxfRE9UM3xCUkxfRE9UNHxCUkxfRE9UNXxCUkxfRE9UNiksCitNQVAoMFg3QSwgQlJMX0RPVDF8QlJMX0RPVDN8QlJMX0RPVDV8QlJMX0RPVDYpLAorTUFQKDBYN0IsIEJSTF9ET1QyfEJSTF9ET1QzfEJSTF9ET1Q2fEJSTF9ET1Q3fEJSTF9ET1Q4KSwKK01BUCgwWDdDLCBCUkxfRE9UNHxCUkxfRE9UNXxCUkxfRE9UNiksCitNQVAoMFg3RCwgQlJMX0RPVDN8QlJMX0RPVDV8QlJMX0RPVDZ8QlJMX0RPVDd8QlJMX0RPVDgpLAorTUFQKDBYN0UsIEJSTF9ET1Q2KSwKK01BUCgwWDdGLCBCUkxfRE9UNHxCUkxfRE9UNXxCUkxfRE9UNnxCUkxfRE9UOCksCitNQVAoMFg4MCwgQlJMX0RPVDV8QlJMX0RPVDd8QlJMX0RPVDgpLAorTUFQKDBYODEsIEJSTF9ET1QxfEJSTF9ET1QyfEJSTF9ET1Q1fEJSTF9ET1Q2KSwKK01BUCgwWDgyLCBCUkxfRE9UMnxCUkxfRE9UM3xCUkxfRE9UNHxCUkxfRE9UNiksCitNQVAoMFg4MywgQlJMX0RPVDF8QlJMX0RPVDZ8QlJMX0RPVDgpLAorTUFQKDBYODQsIEJSTF9ET1QzfEJSTF9ET1Q0fEJSTF9ET1Q1KSwKK01BUCgwWDg1LCBCUkxfRE9UMXxCUkxfRE9UMnxCUkxfRE9UM3xCUkxfRE9UNXxCUkxfRE9UNnxCUkxfRE9UOCksCitNQVAoMFg4NiwgQlJMX0RPVDF8QlJMX0RPVDYpLAorTUFQKDBYODcsIEJSTF9ET1Q1fEJSTF9ET1Q4KSwKK01BUCgwWDg4LCBCUkxfRE9UMXxCUkxfRE9UMnxCUkxfRE9UNnxCUkxfRE9UOCksCitNQVAoMFg4OSwgQlJMX0RPVDF8QlJMX0RPVDJ8QlJMX0RPVDR8QlJMX0RPVDZ8QlJMX0RPVDgpLAorTUFQKDBYOEEsIEJSTF9ET1QyfEJSTF9ET1QzfEJSTF9ET1Q0fEJSTF9ET1Q2fEJSTF9ET1Q4KSwKK01BUCgwWDhCLCBCUkxfRE9UMXxCUkxfRE9UNXxCUkxfRE9UNnxCUkxfRE9UNyksCitNQVAoMFg4QywgQlJMX0RPVDF8QlJMX0RPVDV8QlJMX0RPVDYpLAorTUFQKDBYOEQsIEJSTF9ET1QxfEJSTF9ET1QyfEJSTF9ET1Q0fEJSTF9ET1Q2KSwKK01BUCgwWDhFLCBCUkxfRE9UM3xCUkxfRE9UNHxCUkxfRE9UNXxCUkxfRE9UNyksCitNQVAoMFg4RiwgQlJMX0RPVDF8QlJMX0RPVDZ8QlJMX0RPVDcpLAorTUFQKDBYOTAsIEJSTF9ET1QyfEJSTF9ET1QzfEJSTF9ET1Q0fEJSTF9ET1Q2fEJSTF9ET1Q3KSwKK01BUCgwWDkxLCBCUkxfRE9UM3xCUkxfRE9UNHxCUkxfRE9UNXxCUkxfRE9UOCksCitNQVAoMFg5MiwgQlJMX0RPVDN8QlJMX0RPVDR8QlJMX0RPVDV8QlJMX0RPVDd8QlJMX0RPVDgpLAorTUFQKDBYOTMsIEJSTF9ET1QxfEJSTF9ET1Q0fEJSTF9ET1Q1fEJSTF9ET1Q2fEJSTF9ET1Q4KSwKK01BUCgwWDk0LCBCUkxfRE9UMnxCUkxfRE9UNHxCUkxfRE9UNiksCitNQVAoMFg5NSwgQlJMX0RPVDF8QlJMX0RPVDJ8QlJMX0RPVDR8QlJMX0RPVDYpLAorTUFQKDBYOTYsIEJSTF9ET1QxfEJSTF9ET1Q1fEJSTF9ET1Q2fEJSTF9ET1Q4KSwKK01BUCgwWDk3LCBCUkxfRE9UMXxCUkxfRE9UMnxCUkxfRE9UM3xCUkxfRE9UNHxCUkxfRE9UNnxCUkxfRE9UNyksCitNQVAoMFg5OCwgQlJMX0RPVDF8QlJMX0RPVDJ8QlJMX0RPVDN8QlJMX0RPVDR8QlJMX0RPVDYpLAorTUFQKDBYOTksIEJSTF9ET1QyfEJSTF9ET1Q0fEJSTF9ET1Q2fEJSTF9ET1Q3KSwKK01BUCgwWDlBLCBCUkxfRE9UMXxCUkxfRE9UMnxCUkxfRE9UNXxCUkxfRE9UNnxCUkxfRE9UNyksCitNQVAoMFg5QiwgQlJMX0RPVDN8QlJMX0RPVDV8QlJMX0RPVDgpLAorTUFQKDBYOUMsIEJSTF9ET1Q1fEJSTF9ET1Q2fEJSTF9ET1Q4KSwKK01BUCgwWDlELCBCUkxfRE9UM3xCUkxfRE9UNXxCUkxfRE9UN3xCUkxfRE9UOCksCitNQVAoMFg5RSwgQlJMX0RPVDJ8QlJMX0RPVDN8QlJMX0RPVDV8QlJMX0RPVDgpLAorTUFQKDBYOUYsIEJSTF9ET1QyfEJSTF9ET1QzfEJSTF9ET1Q1fEJSTF9ET1Q3KSwKK01BUCgwWEEwLCBCUkxfRE9UMXxCUkxfRE9UNiksCitNQVAoMFhBMSwgQlJMX0RPVDF8QlJMX0RPVDJ8QlJMX0RPVDYpLAorTUFQKDBYQTIsIEJSTF9ET1QxfEJSTF9ET1Q0fEJSTF9ET1Q1fEJSTF9ET1Q2KSwKK01BUCgwWEEzLCBCUkxfRE9UMXxCUkxfRE9UMnxCUkxfRE9UNHxCUkxfRE9UNXxCUkxfRE9UNiksCitNQVAoMFhBNCwgQlJMX0RPVDF8QlJMX0RPVDZ8QlJMX0RPVDcpLAorTUFQKDBYQTUsIEJSTF9ET1QxfEJSTF9ET1QyfEJSTF9ET1Q2fEJSTF9ET1Q3KSwKK01BUCgwWEE2LCBCUkxfRE9UMXxCUkxfRE9UNHxCUkxfRE9UNXxCUkxfRE9UNnxCUkxfRE9UNyksCitNQVAoMFhBNywgQlJMX0RPVDF8QlJMX0RPVDJ8QlJMX0RPVDR8QlJMX0RPVDV8QlJMX0RPVDZ8QlJMX0RPVDcpLAorTUFQKDBYQTgsIEJSTF9ET1QzfEJSTF9ET1Q4KSwKK01BUCgwWEE5LCBCUkxfRE9UM3xCUkxfRE9UNnxCUkxfRE9UNyksCitNQVAoMFhBQSwgQlJMX0RPVDN8QlJMX0RPVDZ8QlJMX0RPVDgpLAorTUFQKDBYQUIsIEJSTF9ET1QyfEJSTF9ET1QzfEJSTF9ET1Q4KSwKK01BUCgwWEFDLCBCUkxfRE9UMnxCUkxfRE9UNXxCUkxfRE9UNnxCUkxfRE9UOCksCitNQVAoMFhBRCwgQlJMX0RPVDV8QlJMX0RPVDgpLAorTUFQKDBYQUUsIEJSTF9ET1Q0fEJSTF9ET1Q4KSwKK01BUCgwWEFGLCBCUkxfRE9UNHxCUkxfRE9UNyksCitNQVAoMFhCMCwgQlJMX0RPVDN8QlJMX0RPVDR8QlJMX0RPVDZ8QlJMX0RPVDcpLAorTUFQKDBYQjEsIEJSTF9ET1Q0fEJSTF9ET1Q2fEJSTF9ET1Q3fEJSTF9ET1Q4KSwKK01BUCgwWEIyLCBCUkxfRE9UNSksCitNQVAoMFhCMywgQlJMX0RPVDF8QlJMX0RPVDJ8QlJMX0RPVDN8QlJMX0RPVDR8QlJMX0RPVDV8QlJMX0RPVDYpLAorTUFQKDBYQjQsIEJSTF9ET1QyfEJSTF9ET1Q3KSwKK01BUCgwWEI1LCBCUkxfRE9UMnxCUkxfRE9UNXxCUkxfRE9UNyksCitNQVAoMFhCNiwgQlJMX0RPVDR8QlJMX0RPVDZ8QlJMX0RPVDcpLAorTUFQKDBYQjcsIEJSTF9ET1QyfEJSTF9ET1QzfEJSTF9ET1Q1fEJSTF9ET1Q2fEJSTF9ET1Q4KSwKK01BUCgwWEI4LCBCUkxfRE9UMnxCUkxfRE9UM3xCUkxfRE9UNnxCUkxfRE9UOCksCitNQVAoMFhCOSwgQlJMX0RPVDgpLAorTUFQKDBYQkEsIEJSTF9ET1QyfEJSTF9ET1Q2fEJSTF9ET1Q3KSwKK01BUCgwWEJCLCBCUkxfRE9UM3xCUkxfRE9UOCksCitNQVAoMFhCQywgQlJMX0RPVDV8QlJMX0RPVDZ8QlJMX0RPVDcpLAorTUFQKDBYQkQsIEJSTF9ET1QyfEJSTF9ET1QzfEJSTF9ET1Q1fEJSTF9ET1Q2fEJSTF9ET1Q4KSwKK01BUCgwWEJFLCBCUkxfRE9UNHxCUkxfRE9UNXxCUkxfRE9UNyksCitNQVAoMFhCRiwgQlJMX0RPVDJ8QlJMX0RPVDZ8QlJMX0RPVDgpLAorTUFQKDBYQzAsIEJSTF9ET1QxfEJSTF9ET1QyfEJSTF9ET1QzfEJSTF9ET1Q0fEJSTF9ET1Q1fEJSTF9ET1Q2fEJSTF9ET1Q4KSwKK01BUCgwWEMxLCBCUkxfRE9UM3xCUkxfRE9UN3xCUkxfRE9UOCksCitNQVAoMFhDMiwgQlJMX0RPVDF8QlJMX0RPVDR8QlJMX0RPVDV8QlJMX0RPVDZ8QlJMX0RPVDd8QlJMX0RPVDgpLAorTUFQKDBYQzMsIEJSTF9ET1QyfEJSTF9ET1Q0fEJSTF9ET1Q2fEJSTF9ET1Q3fEJSTF9ET1Q4KSwKK01BUCgwWEM0LCBCUkxfRE9UMnxCUkxfRE9UNXxCUkxfRE9UNnxCUkxfRE9UNyksCitNQVAoMFhDNSwgQlJMX0RPVDJ8QlJMX0RPVDZ8QlJMX0RPVDcpLAorTUFQKDBYQzYsIEJSTF9ET1QyfEJSTF9ET1Q1fEJSTF9ET1Q3fEJSTF9ET1Q4KSwKK01BUCgwWEM3LCBCUkxfRE9UMnxCUkxfRE9UM3xCUkxfRE9UNXxCUkxfRE9UNnxCUkxfRE9UNyksCitNQVAoMFhDOCwgQlJMX0RPVDd8QlJMX0RPVDgpLAorTUFQKDBYQzksIEJSTF9ET1QyfEJSTF9ET1Q1fEJSTF9ET1Q4KSwKK01BUCgwWENBLCBCUkxfRE9UM3xCUkxfRE9UNXxCUkxfRE9UNnxCUkxfRE9UNyksCitNQVAoMFhDQiwgQlJMX0RPVDF8QlJMX0RPVDN8QlJMX0RPVDgpLAorTUFQKDBYQ0MsIEJSTF9ET1QxfEJSTF9ET1QyfEJSTF9ET1QzfEJSTF9ET1Q4KSwKK01BUCgwWENELCBCUkxfRE9UMXxCUkxfRE9UM3xCUkxfRE9UNHxCUkxfRE9UOCksCitNQVAoMFhDRSwgQlJMX0RPVDR8QlJMX0RPVDd8QlJMX0RPVDgpLAorTUFQKDBYQ0YsIEJSTF9ET1QzfEJSTF9ET1Q0fEJSTF9ET1Q1fEJSTF9ET1Q2fEJSTF9ET1Q3fEJSTF9ET1Q4KSwKK01BUCgwWEQwLCBCUkxfRE9UMXxCUkxfRE9UMnxCUkxfRE9UM3xCUkxfRE9UNHxCUkxfRE9UOCksCitNQVAoMFhEMSwgQlJMX0RPVDF8QlJMX0RPVDJ8QlJMX0RPVDN8QlJMX0RPVDR8QlJMX0RPVDV8QlJMX0RPVDgpLAorTUFQKDBYRDIsIEJSTF9ET1QxfEJSTF9ET1QyfEJSTF9ET1QzfEJSTF9ET1Q1fEJSTF9ET1Q4KSwKK01BUCgwWEQzLCBCUkxfRE9UMnxCUkxfRE9UM3xCUkxfRE9UNHxCUkxfRE9UOCksCitNQVAoMFhENCwgQlJMX0RPVDJ8QlJMX0RPVDN8QlJMX0RPVDR8QlJMX0RPVDV8QlJMX0RPVDgpLAorTUFQKDBYRDUsIEJSTF9ET1QxfEJSTF9ET1QzfEJSTF9ET1Q2fEJSTF9ET1Q4KSwKK01BUCgwWEQ2LCBCUkxfRE9UMXxCUkxfRE9UMnxCUkxfRE9UM3xCUkxfRE9UNnxCUkxfRE9UOCksCitNQVAoMFhENywgQlJMX0RPVDJ8QlJMX0RPVDR8QlJMX0RPVDV8QlJMX0RPVDZ8QlJMX0RPVDgpLAorTUFQKDBYRDgsIEJSTF9ET1QxfEJSTF9ET1QzfEJSTF9ET1Q0fEJSTF9ET1Q2fEJSTF9ET1Q4KSwKK01BUCgwWEQ5LCBCUkxfRE9UNnxCUkxfRE9UN3xCUkxfRE9UOCksCitNQVAoMFhEQSwgQlJMX0RPVDF8QlJMX0RPVDN8QlJMX0RPVDV8QlJMX0RPVDZ8QlJMX0RPVDgpLAorTUFQKDBYREIsIEJSTF9ET1QxfEJSTF9ET1QyfEJSTF9ET1QzfEJSTF9ET1Q0fEJSTF9ET1Q1fEJSTF9ET1Q2fEJSTF9ET1Q3fEJSTF9ET1Q4KSwKK01BUCgwWERDLCBCUkxfRE9UM3xCUkxfRE9UNHxCUkxfRE9UNnxCUkxfRE9UN3xCUkxfRE9UOCksCitNQVAoMFhERCwgQlJMX0RPVDF8QlJMX0RPVDJ8QlJMX0RPVDN8QlJMX0RPVDR8QlJMX0RPVDZ8QlJMX0RPVDd8QlJMX0RPVDgpLAorTUFQKDBYREUsIEJSTF9ET1QzfEJSTF9ET1Q1fEJSTF9ET1Q3fEJSTF9ET1Q4KSwKK01BUCgwWERGLCBCUkxfRE9UNHxCUkxfRE9UNXxCUkxfRE9UNnxCUkxfRE9UNyksCitNQVAoMFhFMCwgQlJMX0RPVDF8QlJMX0RPVDJ8QlJMX0RPVDN8QlJMX0RPVDR8QlJMX0RPVDZ8QlJMX0RPVDgpLAorTUFQKDBYRTEsIEJSTF9ET1QxfEJSTF9ET1QyfEJSTF9ET1QzfEJSTF9ET1Q0fEJSTF9ET1Q1fEJSTF9ET1Q2fEJSTF9ET1Q4KSwKK01BUCgwWEUyLCBCUkxfRE9UMnxCUkxfRE9UM3xCUkxfRE9UNXxCUkxfRE9UN3xCUkxfRE9UOCksCitNQVAoMFhFMywgQlJMX0RPVDF8QlJMX0RPVDJ8QlJMX0RPVDR8QlJMX0RPVDV8QlJMX0RPVDZ8QlJMX0RPVDgpLAorTUFQKDBYRTQsIEJSTF9ET1Q0fEJSTF9ET1Q2fEJSTF9ET1Q4KSwKK01BUCgwWEU1LCBCUkxfRE9UMnxCUkxfRE9UN3xCUkxfRE9UOCksCitNQVAoMFhFNiwgQlJMX0RPVDN8QlJMX0RPVDZ8QlJMX0RPVDd8QlJMX0RPVDgpLAorTUFQKDBYRTcsIEJSTF9ET1Q2fEJSTF9ET1Q4KSwKK01BUCgwWEU4LCBCUkxfRE9UMnxCUkxfRE9UM3xCUkxfRE9UNnxCUkxfRE9UOCksCitNQVAoMFhFOSwgQlJMX0RPVDN8QlJMX0RPVDV8QlJMX0RPVDZ8QlJMX0RPVDgpLAorTUFQKDBYRUEsIEJSTF9ET1QzfEJSTF9ET1Q1fEJSTF9ET1Q4KSwKK01BUCgwWEVCLCBCUkxfRE9UMXxCUkxfRE9UNnxCUkxfRE9UN3xCUkxfRE9UOCksCitNQVAoMFhFQywgQlJMX0RPVDF8QlJMX0RPVDJ8QlJMX0RPVDZ8QlJMX0RPVDd8QlJMX0RPVDgpLAorTUFQKDBYRUQsIEJSTF9ET1QxfEJSTF9ET1Q0fEJSTF9ET1Q2fEJSTF9ET1Q3fEJSTF9ET1Q4KSwKK01BUCgwWEVFLCBCUkxfRE9UMXxCUkxfRE9UNXxCUkxfRE9UNnxCUkxfRE9UN3xCUkxfRE9UOCksCitNQVAoMFhFRiwgQlJMX0RPVDF8QlJMX0RPVDJ8QlJMX0RPVDR8QlJMX0RPVDZ8QlJMX0RPVDd8QlJMX0RPVDgpLAorTUFQKDBYRjAsIEJSTF9ET1QxfEJSTF9ET1QyfEJSTF9ET1Q0fEJSTF9ET1Q1fEJSTF9ET1Q2fEJSTF9ET1Q3fEJSTF9ET1Q4KSwKK01BUCgwWEYxLCBCUkxfRE9UMXxCUkxfRE9UMnxCUkxfRE9UNXxCUkxfRE9UNnxCUkxfRE9UN3xCUkxfRE9UOCksCitNQVAoMFhGMiwgQlJMX0RPVDcpLAorTUFQKDBYRjMsIEJSTF9ET1QzfEJSTF9ET1Q0fEJSTF9ET1Q1fEJSTF9ET1Q2fEJSTF9ET1Q3KSwKK01BUCgwWEY0LCBCUkxfRE9UNHxCUkxfRE9UNnxCUkxfRE9UNyksCitNQVAoMFhGNSwgQlJMX0RPVDJ8QlJMX0RPVDN8QlJMX0RPVDd8QlJMX0RPVDgpLAorTUFQKDBYRjYsIEJSTF9ET1QyfEJSTF9ET1QzfEJSTF9ET1Q1fEJSTF9ET1Q2fEJSTF9ET1Q3fEJSTF9ET1Q4KSwKK01BUCgwWEY3LCBCUkxfRE9UM3xCUkxfRE9UNHxCUkxfRE9UNiksCitNQVAoMFhGOCwgQlJMX0RPVDF8QlJMX0RPVDZ8QlJMX0RPVDd8QlJMX0RPVDgpLAorTUFQKDBYRjksIEJSTF9ET1Q1fEJSTF9ET1Q2fEJSTF9ET1Q3fEJSTF9ET1Q4KSwKK01BUCgwWEZBLCBCUkxfRE9UMnxCUkxfRE9UM3xCUkxfRE9UNXxCUkxfRE9UNnxCUkxfRE9UN3xCUkxfRE9UOCksCitNQVAoMFhGQiwgQlJMX0RPVDJ8QlJMX0RPVDZ8QlJMX0RPVDd8QlJMX0RPVDgpLAorTUFQKDBYRkMsIEJSTF9ET1QyfEJSTF9ET1Q1fEJSTF9ET1Q3fEJSTF9ET1Q4KSwKK01BUCgwWEZELCBCUkxfRE9UNyksCitNQVAoMFhGRSwgQlJMX0RPVDgpLAorTUFQKDBYRkYsIEJSTF9ET1QxfEJSTF9ET1QyfEJSTF9ET1QzfEJSTF9ET1Q0fEJSTF9ET1Q1fEJSTF9ET1Q2fEJSTF9ET1Q3fEJSTF9ET1Q4KQpkaWZmIC0tZ2l0IGEvRHJpdmVycy9CcmFpbGxlL0JyYWlsbGVMaXRlL01ha2VmaWxlLmluIGIvRHJpdmVycy9CcmFpbGxlL0JyYWlsbGVMaXRlL01ha2VmaWxlLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY0YjI3MGUKLS0tIC9kZXYvbnVsbAorKysgYi9Ecml2ZXJzL0JyYWlsbGUvQnJhaWxsZUxpdGUvTWFrZWZpbGUuaW4KQEAgLTAsMCArMSwyOCBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorIyAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyMKKyMgQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorIworIyBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorIworIyBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisjIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyMgbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisjCisjIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK0RSSVZFUl9DT0RFID0gYmwKK0RSSVZFUl9OQU1FID0gQnJhaWxsZUxpdGUKK0RSSVZFUl9VU0FHRSA9IDE4LzQwL00yMC9NNDAKK0RSSVZFUl9WRVJTSU9OID0gMC42LjAgKEp1bmUgMjAwMykKK0RSSVZFUl9ERVZFTE9QRVJTID0gTmlraGlsIE5haXIKK2luY2x1ZGUgJChTUkNfVE9QKWJyYWlsbGUubWsKKworYnJhaWxsZS4kTzoKKwkkKENDKSAkKEJSTF9DRkxBR1MpIC1jICQoU1JDX0RJUikvYnJhaWxsZS5jCisKZGlmZiAtLWdpdCBhL0RyaXZlcnMvQnJhaWxsZS9CcmFpbGxlTGl0ZS9SRUFETUUgYi9Ecml2ZXJzL0JyYWlsbGUvQnJhaWxsZUxpdGUvUkVBRE1FCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgwYzM0MWIKLS0tIC9kZXYvbnVsbAorKysgYi9Ecml2ZXJzL0JyYWlsbGUvQnJhaWxsZUxpdGUvUkVBRE1FCkBAIC0wLDAgKzEsMTIxIEBACitCcmFpbGxlIExpdGUgRHJpdmVyIGZvciBCUkxUVFkKKworVGhpcyBpcyBhIGJldGEgZHJpdmVyIGZvciB0aGUgQmxhemllIEVuZ2luZWVyaW5nIEJyYWlsbGUgTGl0ZS4KK3dyaXR0ZW4gYnkgTmlraGlsIE5haXIsCit3aXRoIGFkZGl0aW9ucyBmcm9tIE5pY29sYXMgUGl0cmUgPG5pY29AZmx1eG5pYy5uZXQ+CithbmQgUGV0ZSBEZSBWYXN0bywKK2Z1cnRoZXIgbW9kaWZpY2F0aW9ucyBieSBTdOlwaGFuZSBEb3lvbiA8cy5kb3lvbkB2aWRlb3Ryb24uY2E+LAorICAgIHN0YXJ0aW5nIEF1Z3VzdCAyMDAxLgorCitCb3RoIEJyYWlsbGVMaXRlIDE4IGFuZCA0MCBzaG91bGQgd29yaywgYW5kIHRoZXJlIGlzIG5vdyBjb2RlIHRoYXQgc2hvdWxkCithdXRvLWRldGVjdCB0aGUgZGlzcGxheSB0eXBlLgorCitFZGl0IGJyYWlsbGUuaCB0byBzZWxlY3QgYmF1ZHJhdGUgYW5kIHNvbWUgZmVhdHVyZXMuCisKK09uIHRoZSBCcmFpbGxlTGl0ZSwgeW91IHNob3VsZCB0eXBlIDM0NS1jaG9yZCBhbmQgcC1jaG9yZCB0byBlbnRlciB0aGUgCisic3BlZWNoIGJveCBtb2RlIiByZXF1aXJlZCBieSBCUkxUVFkuICBZb3Ugc2hvdWxkIHR5cGUgdGhlIHNhbWUgc2VxdWVuY2UgCit0byBleGl0IHRoYXQgbW9kZSB3aGVuZXZlciB5b3Ugd2lzaCB0byByZXR1cm4gdG8gdGhlIEJyYWlsbGVMaXRlIGludGVybmFsCitmdW5jdGlvbnMuCisKK0JlIHN1cmUgeW91ciBCcmFpbGxlTGl0ZSdzIHNlcmlhbCBwb3J0IGJhdWRyYXRlIGFuZCB0aGUgdmFsdWUgY29uZmlndXJlZAoraW4gdGhlIGJyYWlsbGUuaCBmaWxlIGFyZSB0aGUgc2FtZS4KKworVGhlIEJyYWlsbGUgTGl0ZSA0MCBoYXMgdHdvIGFkdmFuY2UgYmFycyBvbiBpdC4gIEJybHR0eSBoYXMgYmVlbiBzZXQgdXAKK3NvIHRoYXQgbW92aW5nIHRoZSBkaXNwbGF5IGxlZnQgb3IgcmlnaHQgd29ya3MgdGhlIHNhbWUgYXMgaXQgZG9lcword2hlbiB0aGUgdW5pdCBpcyBpbiBpdHMgaW50ZXJuYWwgbm90ZXRha2VyIG1vZGUuCisKK1NlZSBoZWxwLnNyYyBmb3IgYSBkZXNjcmlwdGlvbiBvZiB0aGUga2V5IGJpbmRpbmdzLgorCitIaXN0b3J5OgorU3TpcGhhbmUgRG95b24sIEFwcmlsIDIwMDIsIHZlcnNpb24gMC41LjEwOgorLUFjdCBhcyBpZiBrYmVtdSB3YXMgb2ZmIGluIGFueSBjb250ZXh0IG90aGVyIHRoYW4gQ01EU19TQ1JFRU4gKGluCisgICAgcGFydGljdWxhciB0eXBpbmcgYSBrZXkgd29uJ3QgdGhyb3cgeW91IG91dCBvZiBwcmVmZXJlbmNlcyBtZW51CisgICAgYW55bW9yZSkuCitTdOlwaGFuZSBEb3lvbiwgTWFyY2ggMjAwMiwgdmVyc2lvbiAwLjUuOToKKy1BZGRlZCAia2JlbXUiIGRyaXZlciBwYXJhbWV0ZXIsIHNvIGNhbiBzdGFydCB3aXRoIGtiZW11IGFscmVhZHkgYWN0aXZlLgorU3TpcGhhbmUgRG95b24sIEZlYnJ1YXJ5IDIwMDIsIHZlcnNpb24gMC41Ljg6CistQWRkZWQgQ01EX0xFQVJOLCBDTURfTlhQUk9NUFQvQ01EX1BSUFJPTVBUIGFuZCBDTURfU0lYRE9UUy4gU2V2ZXJhbAorICAgIFZBTF9QQVNTS0VZIGVmZmVjdHMgd2VyZSBkb25lIHRocm91Z2ggc3BlY2lhbCBjYXNlczogbW92ZWQgdGhlbQorICAgIGJhY2sgaW50byBjbWR0cmFucy4gSWRlbnRpZmllZCBzcGVjaWFsL3Jlc2VydmVkIGFuZCBmcmVlIGJpbmRpbmdzLgorICAgIENsZWFuZWQgb3V0IHNvbWUgI2lmIDBzLgorU3TpcGhhbmUgRG95b24sIEphbnVhcnkgMjAwMiwgdmVyc2lvbiAwLjUuNzoKKy1BZGRlZCBiaW5kaW5ncyBmb3IgQ1JfQ1VUQVBQRU5EIGFuZCBDUl9DVVRMSU5FLiBSZXBsYWNlZCBDTURfQ1VUX0JFRywKKyAgICBDTURfQ1VUX0VORCBhbmQgQ01EX0NTUkpNUCBieSBDUl8gZXF1aXZhbGVudHMuIEFkZGVkIENSX1NFVE1BUksgYW5kCisgICAgQ1JfR09UT01BUksuIFRoZXNlIGFyZSBhIGJpdCBuYXN0eTogdGhleSByZXVzZSBleGlzdGluZyBjb21tYW5kIGRvdAorICAgIHBhdHRlcm5zIGZyb20gd2l0aGluIG8tY2hvcmQuIFdlbGwgcHJhY3RpY2FsbHkgYWxsIHRoZSBwYXR0ZXJucyBhcmUKKyAgICB0YWtlbiEKK1N06XBoYW5lIERveW9uLCBKYW51YXJ5IDIwMDIsIHZlcnNpb24gMC41LjY6CistRml4ZWQgZG90IGNvbWJpbmF0aW9ucyB3aXRoIGRvdHMgNy04IG9uIEJMNDAgKGZvciB0eXBpbmcgY2FwcyBhbmQgY3RybCkuCitTdOlwaGFuZSBEb3lvbiwgRGVjZW1iZXIgMjAwMSwgdmVyc2lvbiAwLjUuNToKKy1NRVRBIGlzIGJhY2suIE5vdyB1c2UgVlBDIG1vZGlmaWVycyBvbiBWQUxQQVNTQ0hBUiB3aGVuIFRFWFRUUkFOUworICAgIG5vdCBkZWZpbmVkLiBGaXhlZCB1cHBlcmNhc2UgdGhhdCBhbHdheXMgbG9ja2VkIGFjdGl2ZS4gU3ViLWNvbW1hbmRzCisgICAgb2YgMzUtY2hvcmQgbm8gbG9uZ2VyIG5lZWQgdG8gYmUgY2hvcmRlZC4KK1N06XBoYW5lIERveW9uLCBOb3ZlbWJlciAyMDAxLCB2ZXJzaW9uIDAuNS40OgorLU5vdyB1c2luZyBuZXcgZ2VuZXJpYyBWQUxfUEFTUyogbWVjaGFuaXNtIGZvciB0eXBpbmcgaW4ga2V5cywgcmF0aGVyCisgICAgdGhhbiBoYXZpbmcgdGhlIGRyaXZlciBpdHNlbGYgaW5zZXJ0IHN0dWZmIGludG8gdGhlIGNvbnNvbGUuIFdlCisgICAgbm8gbG9uZ2VyIGhhdmUgdGhlIE1FVEEgZnVuY3Rpb24gdGhvdWdoLCBidXQgd2UgaGF2ZSBFU0NBUEUuCitTdOlwaGFuZSBEb3lvbiBhbmQgRGF2ZSBNaWVsa2UsIFNlcHRlbWJlciAyMDAxLCB2ZXJzaW9uIDAuNS4zOgorLWNsb3NlYnJsOiBkb24ndCBjbGVhciBkaXNwbGF5LCB1c2UgVENTQURSQUlOLgorLVNsaWdodCBBUEkgYW5kIG5hbWUgY2hhbmdlcyBmb3IgQlJMVFRZIDMuMC4gQ29tbWFuZHMgY2FuIG5vIGxvbmdlciBiZQorICAgIGFzc3VtZWQgdG8gYmUgY2hhcnMsIGNoYW5nZWQgdHlwZSBvZiBjbWR0cmFucy4KKy1GaXhlZCBiaW5kaW5nIGZvciBzd2l0Y2hpbmcgdmlydHVhbCB0ZXJtaW5hbCB3aXRoIG8tY2hvcmQuLi4gaXQgd2FzIHdyb25nLgorU3TpcGhhbmUgRG95b24sIFNlcHRlbWJlciAyMDAxLCB2ZXJzaW9uIDAuNS4yOgorLUFkZGVkIGJhdWRyYXRlIHBhcmFtZXRlci4gRml4ZWQgdXAgaW5pdGlhbGl6YXRpb24sIGluIHBhcnRpY3VsYXIgYSBidWcKKyAgICB3aXRoIHVzZSBvZiBxYmFzZSBidWZmZXIgdW5pdGlhbGl6ZWQuCitTdOlwaGFuZSBEb3lvbiwgU2VwdGVtYmVyIDIwMDEsIHZlcnNpb24gMC41LjE6CistQWRkZWQgYmluZGluZ3MgZm9yIENNRF9CQUNLIGFuZCBDUl9NU0dBVFRSSUIuCitTdOlwaGFuZSBEb3lvbiwgQXVndXN0IDIwMDEKKy1BZGRlZCBhIHZlcnNpb24gbnVtYmVyLCBhcyBtYW55IHBlb3BsZSBoYXZlIGJlZW4gcGxheWluZyB3aXRoIHRoaXMKKyAgIGRyaXZlci4gQXJiaXRyYXJpbHkgc3RhcnRlZCBhdCAwLjUuCistTWFkZSB0aGUgaGVscCBtb3JlIGNvbXBhY3QsIGFuZCByZW1vdmUgdGhlIGR1cGxpY2F0aW9uIG9mIHRoZSBrZXkKKyAgIGJpbmRpbmdzIGxpc3QgZnJvbSBSRUFETUUuCistVXNlIHNlcGFyYXRlIGhlbHAgZmlsZXMgZm9yIEJMMTggYW5kIEJMNDAsIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20KKyAgIGJybHR0eV9nZW5oZWxwLnR4dC4KKy1PcHRpb24gVVNFX1RFWFRUUkFOUyBpbiBicmFpbGxlLmgsIGFsbG93cyBtYXBwaW5nIG9mIGJyYWlsbGUga2V5Ym9hcmQKKyAgIGlucHV0IHRvIGNoYXJhY3RlcnMgdG8gYmUgcGVyZm9ybWVkIHVzaW5nIHRoZSBvdXRwdXQgdGV4dCB0cmFuc2xhdGlvbgorICAgdGFibGUgKHVzZSBkZWZpbmFibGUpIGluc3RlYWQgb2YgdGhlIGhhcmRjb2RlZCBVUyB0YWJsZS4gVXNlZnVsIGlmIHlvdQorICAgZG9uJ3QgdXNlIHRoZSBVUyB0YWJsZSBvciBpZiB5b3Ugd2FudCB0byBlbnRlciBjaGFyYWN0ZXJzIG51bWJlcmVkCisgICA+MTI3IChzdWNoIGFzIGFjY2VudHMgZm9yIG1lKS4gT2J2aW91c2x5IHlvdXIgb3V0cHV0IGRvdCB0cmFuc2xhdGlvbgorICAgdGFibGUgbXVzdCBub3QgaGF2ZSBkdXBsaWNhdGUgcmVwcmVzZW50YXRpb25zIGZvciBjaGFyYWN0ZXJzIHlvdSB3YW50CisgICB0byB0eXBlLiBJZiB0aGF0IG9wdGlvbiBpcyBzZWxlY3RlZCwgZG90IDggbm8gbG9uZ2VyIGdlbmVyYXRlcyBhIE1FVEEKKyAgIGtleS4KKy1BZGRlZCBET1Q4U0hJRlQgZm9yIHVzZSB3aXRoIFVTRV9URVhUVFJBTlM6IDI2LWNob3JkIG1lYW5zIHRoZSBuZXh0CisgICBpbnB1dCBjaGFyIHNob3VsZCBiZSBsb29rZWQgdXAgd2l0aCBkb3Q4IGFkZGVkLgorLUFkZGVkIGJpbmRpbmdzIGZvciBzZWFyY2ggZm9yd2FyZC9iYWNrd2FyZCAoTlhTRUFSQ0gpLCBtb3ZlIGJ5CisgICBwYXJhZ3JhcGhzIChOWEJMTktMTiksIHN3aXRjaCB0byBuZXh0L3ByZXZpb3VzIHZpcnR1YWwgdGVybWluYWwKKyAgIChTV0lUQ0hWVF9ORVhUKS4KKy1BZGRlZCBhIGJpbmRpbmcgKDI0NikgZm9yIGVzY2FwZS4gU29tZXRpbWVzIHlvdSB3YW50IGVzY2FwZSBhbG9uZSwgb3IKKyAgIGZvbGxvd2VkIGJ5IGRlbGV0ZS4uLiBhbmQgdGhlIE1FVEEga2V5IGRvZXNuJ3QgZG8gaXQgYXMgaXQgZXhwZWN0cyBhCisgICBjaGFyYWN0ZXIgdG8gY29tYmluZSB0aGUgTUVUQSB0by4KKy1NYWRlIHRoZSAicmVzdGFydCBkcml2ZXIiIGNvbW1hbmQgZGFuZ2Vyb3VzIChyZXF1aXJlZCBjaG9yZCksIGFzIGl0CisgICB0ZW5kZWQgdG8ga2lsbCB0aGUgZHJpdmVyIGZvciBtZSBpZiBJIGNvbnRpbnVlZCB0eXBpbmcgd2hpbGUgaXQKKyAgIHJlc2V0cy4uLgorLU1vZGlmaWVkIHJlcGVhdCBjb3VudCBzbyB0aGF0IHlvdSBjYW4gZ2l2ZSB0aGUgY29tbWFuZCByaWdodCBhd2F5LCBubworICAgbmVlZCB0byBkbyBlLWNob3JkLiBZb3UgY2FuIGRvIGEgb25lLWRpZ2l0IHJlcGVhdCBvZiBhIG1vdmVtZW50IGtleSBpbgorICAgdGhyZWUgc3Ryb2tlcyBub3cuCistQWJ1c2VkIHRoZSByZXBlYXQgY291bnQgZnVuY3Rpb24gdG8gYWxsb3cgc3dpdGNoaW5nIGRpcmVjdGx5IHRvIGEgVlQKKyAgIGdpdmVuIGl0J3MgbnVtYmVyOiBvLWNob3JkIHRoZW4gVlQgbnVtYmVyIHRoZW4gcy1jaG9yZCBvciA6LWNob3JkLgorICAgTkI6IENoYW5nZWQgdG8gdi1jaG9yZCAvICMtY2hvcmQuCistRml4ZWQgYSB2ZXJ5IG5pY2UgbGl0dGxlIGJ1ZyB0aGF0IGNhdXNlZCB0aGUgaW50ZXJuYWwgY3Vyc29yIHRvIGdvIG9mZgorICAgdGhlIGRpc3BsYXkgZHVyaW5nIGctY2hvcmQgd2l0aCBhZHZhbmNlIGJhciBsZWZ0LgorLUZpeGVkIGEgc3RhdGVtZW50IHRoYXQgY2F1c2VkIGEgcG9ydGFiaWxpdHkgcHJvYmxlbS4KKy1GaXhlZCBrLWNob3JkIHdoaWNoIGFjdGl2YXRlZCBidXQgZGlkIG5vdCB0b2dnbGUgb2ZmIGtleWJvYXJkIGVtdWxhdGlvbi4KKy1SZW5hbWVkIGJybHR0eV9nZW5oZWxwLnR4dCB0byBoZWxwLnNyYyBhbmQgYnJsdHR5aGVscD8udHh0IHRvIGhlbHA/LnR4dC4KKworQW5lY2RvdGVzIG9uIHdlaXJkIGJ1Z3M6CisKK1RoZSBjb2RlOgorICAgIGZvciAoaSA9IDA7IGkgPCBibGl0ZXN6OyByYXdkYXRhW2krK10gPSBibGl0ZXRyYW5zW3Jhd2RhdGFbaV1dKTsKK2NhbiwgaW4gc29tZSAobm90IHlldCBxdWl0ZSBjbGVhcikgY2lyY3Vtc3RhbmNlcyBhbmQgdW5kZXIgb3RoZXIKK3Byb2Nlc3NvciBhcmNoaXRlY3R1cmVzLCBub3QgaGF2ZSB0aGUgZGVzaXJlZCBlZmZlY3Q6IGFsbCB0aGUgdGV4dAorYXBwZWFycyBzaGlmdGVkIGJ5IG9uZSBjZWxsLiBTdXBwb3NlZGx5IHRoZSBiZWhhdmlvciBmb3Igc3VjaCBhIGNvbnN0cnVjdAoraXMgdW5kZWZpbmVkIHdpdGggZ2NjLiBTbyB3ZSBwdXQgdGhlIGkrKyBvdXRzaWRlIHRoZSBhc3NpZ25tZW50CitzdGF0ZW1lbnQuCisKK1RoZSBjb2RlOgorICAgaW50X2N1cnNvciA9IE1BWCAoaW50X2N1cnNvciAtIGJsaXRlc3ogLyA0LCAxKTsKK2RpZCBub3QgaGF2ZSB0aGUgaW50ZW5kZWQgZWZmZWN0LiBpbnRfY3Vyc29yIHdhcyBzaWduZWQgYW5kIGJsaXRlc3oKK3Vuc2lnbmVkLiBUaGUgY29tcGlsZXIgc29tZWhvdyBkZWNpZGVkIHRvIGV2YWx1YXRlIHRoZSBjb21wYXJpc29uIGFzIGlmCit0aGUgZmlyc3QgYXJndW1lbnQgd2FzIHVuc2lnbmVkLCB3aGljaCBjYXVzZWQgdGhlIE1BWCBzdHJhdGVneSB0byBmYWlsCithbmQgdGhlIGN1cnNvciB0byBnbyBvZmYgdGhlIGRpc3BsYXkuIERlY2xhcmluZyBibGl0ZXN6IGFzIHNpZ25lZCBmaXhlZAoraXQuCmRpZmYgLS1naXQgYS9Ecml2ZXJzL0JyYWlsbGUvQnJhaWxsZUxpdGUvYmluZGluZ3MuaCBiL0RyaXZlcnMvQnJhaWxsZS9CcmFpbGxlTGl0ZS9iaW5kaW5ncy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhiN2VjYTgKLS0tIC9kZXYvbnVsbAorKysgYi9Ecml2ZXJzL0JyYWlsbGUvQnJhaWxsZUxpdGUvYmluZGluZ3MuaApAQCAtMCwwICsxLDI3NiBAQAorLyoKKyAqIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisgKiAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisgKgorICogQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKKy8qIEJyYWlsbGVMaXRlL2JpbmRpbmdzLmggLSBrZXkgYmluZGluZ3MgZm9yIEJMYXppZSBFbmdpbmVlcmluZydzIEJyYWlsbGUgTGl0ZQorICogTi4gTmFpciwgNSBTZXB0ZW1iZXIgMTk5OAorICovCisKKyNpZm5kZWYgQlJMVFRZX0lOQ0xVREVEX0JMX0JJTkRJTkdTCisjZGVmaW5lIEJSTFRUWV9JTkNMVURFRF9CTF9CSU5ESU5HUworCisjaW5jbHVkZSAiYnJsX2NtZHMuaCIJCS8qIGZvciBCUkxfQ01EXyogY29kZXMgKi8KKworLyogV2hlbiB0aGUgQnJhaWxsZSBMaXRlIHNlbmRzIGJyYWlsbGUga2V5IGluZm9ybWF0aW9uLCBiaXRzIDAtNSByZXByZXNlbnQKKyAqIGRvdHMgMS02IGFuZCBiaXQgNiByZXByZXNlbnRzIHRoZSBzcGFjZSBiYXIuICBGb3Igbm93LCB3ZSBtYXNrIG91dCBiaXQgNgorICogYW5kIGp1c3QgdXNlIDY0LWJ5dGUgdGFibGVzLgorICovCisKKy8qIFRoZSBzdGF0aWMgYXJyYXlzIG11c3Qgb25seSBiZSBpbiBicmFpbGxlLmMsIHNvIGp1c3QgaW4gY2FzZSAuLi4gKi8KKyNpZmRlZiBCTF9ORUVEX0FSUkFZUworI3VuZGVmIEJMX05FRURfQVJSQVlTCisKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGJybHRyYW5zWzY0XSA9Cit7CisgICcgJywgJ2EnLCAnMScsICdiJywgJ1wnJywgJ2snLCAnMicsICdsJywKKyAgJ2AnLCAnYycsICdpJywgJ2YnLCAnLycsICdtJywgJ3MnLCAncCcsCisgICciJywgJ2UnLCAnMycsICdoJywgJzknLCAnbycsICc2JywgJ3InLAorICAnficsICdkJywgJ2onLCAnZycsICc+JywgJ24nLCAndCcsICdxJywKKyAgJywnLCAnKicsICc1JywgJzwnLCAnLScsICd1JywgJzgnLCAndicsCisgICcuJywgJyUnLCAneycsICckJywgJysnLCAneCcsICchJywgJyYnLAorICAnOycsICc6JywgJzQnLCAnfCcsICcwJywgJ3onLCAnNycsICcoJywKKyAgJ18nLCAnPycsICd3JywgJ30nLCAnIycsICd5JywgJyknLCAnPScKK307CisKKyNpZmRlZiBVU0VfVEVYVFRSQU5TCisvKiBNYXAgZnJvbSBrZXkgcmVwcmVzZW50YXRpb25zIChiaXRzIDAtNSBmb3IgZG90cyAxLTYpIHRvIEJSTFRUWSBkb3QKKyAgIHBhdHRlcm4gcmVwcmVzZW50YXRpb24gKGRvdCAxIGJpdCAwLCBkb3QgNCBiaXQgMSwgZG90IDIgYml0IDIsIGV0YykgKi8KK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGtleXNfdG9fZG90c1swMTAwXSA9IHsKKyAgLyogMDAwICovIDAsCisgIC8qIDAwMSAqLyBCUkxfRE9UMSwKKyAgLyogMDAyICovIEJSTF9ET1QyLAorICAvKiAwMDMgKi8gQlJMX0RPVDEgfCBCUkxfRE9UMiwKKyAgLyogMDA0ICovIEJSTF9ET1QzLAorICAvKiAwMDUgKi8gQlJMX0RPVDEgfCBCUkxfRE9UMywKKyAgLyogMDA2ICovIEJSTF9ET1QyIHwgQlJMX0RPVDMsCisgIC8qIDAwNyAqLyBCUkxfRE9UMSB8IEJSTF9ET1QyIHwgQlJMX0RPVDMsCisgIC8qIDAxMCAqLyBCUkxfRE9UNCwKKyAgLyogMDExICovIEJSTF9ET1QxIHwgQlJMX0RPVDQsCisgIC8qIDAxMiAqLyBCUkxfRE9UMiB8IEJSTF9ET1Q0LAorICAvKiAwMTMgKi8gQlJMX0RPVDEgfCBCUkxfRE9UMiB8IEJSTF9ET1Q0LAorICAvKiAwMTQgKi8gQlJMX0RPVDMgfCBCUkxfRE9UNCwKKyAgLyogMDE1ICovIEJSTF9ET1QxIHwgQlJMX0RPVDMgfCBCUkxfRE9UNCwKKyAgLyogMDE2ICovIEJSTF9ET1QyIHwgQlJMX0RPVDMgfCBCUkxfRE9UNCwKKyAgLyogMDE3ICovIEJSTF9ET1QxIHwgQlJMX0RPVDIgfCBCUkxfRE9UMyB8IEJSTF9ET1Q0LAorICAvKiAwMjAgKi8gQlJMX0RPVDUsCisgIC8qIDAyMSAqLyBCUkxfRE9UMSB8IEJSTF9ET1Q1LAorICAvKiAwMjIgKi8gQlJMX0RPVDIgfCBCUkxfRE9UNSwKKyAgLyogMDIzICovIEJSTF9ET1QxIHwgQlJMX0RPVDIgfCBCUkxfRE9UNSwKKyAgLyogMDI0ICovIEJSTF9ET1QzIHwgQlJMX0RPVDUsCisgIC8qIDAyNSAqLyBCUkxfRE9UMSB8IEJSTF9ET1QzIHwgQlJMX0RPVDUsCisgIC8qIDAyNiAqLyBCUkxfRE9UMiB8IEJSTF9ET1QzIHwgQlJMX0RPVDUsCisgIC8qIDAyNyAqLyBCUkxfRE9UMSB8IEJSTF9ET1QyIHwgQlJMX0RPVDMgfCBCUkxfRE9UNSwKKyAgLyogMDMwICovIEJSTF9ET1Q0IHwgQlJMX0RPVDUsCisgIC8qIDAzMSAqLyBCUkxfRE9UMSB8IEJSTF9ET1Q0IHwgQlJMX0RPVDUsCisgIC8qIDAzMiAqLyBCUkxfRE9UMiB8IEJSTF9ET1Q0IHwgQlJMX0RPVDUsCisgIC8qIDAzMyAqLyBCUkxfRE9UMSB8IEJSTF9ET1QyIHwgQlJMX0RPVDQgfCBCUkxfRE9UNSwKKyAgLyogMDM0ICovIEJSTF9ET1QzIHwgQlJMX0RPVDQgfCBCUkxfRE9UNSwKKyAgLyogMDM1ICovIEJSTF9ET1QxIHwgQlJMX0RPVDMgfCBCUkxfRE9UNCB8IEJSTF9ET1Q1LAorICAvKiAwMzYgKi8gQlJMX0RPVDIgfCBCUkxfRE9UMyB8IEJSTF9ET1Q0IHwgQlJMX0RPVDUsCisgIC8qIDAzNyAqLyBCUkxfRE9UMSB8IEJSTF9ET1QyIHwgQlJMX0RPVDMgfCBCUkxfRE9UNCB8IEJSTF9ET1Q1LAorICAvKiAwNDAgKi8gQlJMX0RPVDYsCisgIC8qIDA0MSAqLyBCUkxfRE9UMSB8IEJSTF9ET1Q2LAorICAvKiAwNDIgKi8gQlJMX0RPVDIgfCBCUkxfRE9UNiwKKyAgLyogMDQzICovIEJSTF9ET1QxIHwgQlJMX0RPVDIgfCBCUkxfRE9UNiwKKyAgLyogMDQ0ICovIEJSTF9ET1QzIHwgQlJMX0RPVDYsCisgIC8qIDA0NSAqLyBCUkxfRE9UMSB8IEJSTF9ET1QzIHwgQlJMX0RPVDYsCisgIC8qIDA0NiAqLyBCUkxfRE9UMiB8IEJSTF9ET1QzIHwgQlJMX0RPVDYsCisgIC8qIDA0NyAqLyBCUkxfRE9UMSB8IEJSTF9ET1QyIHwgQlJMX0RPVDMgfCBCUkxfRE9UNiwKKyAgLyogMDUwICovIEJSTF9ET1Q0IHwgQlJMX0RPVDYsCisgIC8qIDA1MSAqLyBCUkxfRE9UMSB8IEJSTF9ET1Q0IHwgQlJMX0RPVDYsCisgIC8qIDA1MiAqLyBCUkxfRE9UMiB8IEJSTF9ET1Q0IHwgQlJMX0RPVDYsCisgIC8qIDA1MyAqLyBCUkxfRE9UMSB8IEJSTF9ET1QyIHwgQlJMX0RPVDQgfCBCUkxfRE9UNiwKKyAgLyogMDU0ICovIEJSTF9ET1QzIHwgQlJMX0RPVDQgfCBCUkxfRE9UNiwKKyAgLyogMDU1ICovIEJSTF9ET1QxIHwgQlJMX0RPVDMgfCBCUkxfRE9UNCB8IEJSTF9ET1Q2LAorICAvKiAwNTYgKi8gQlJMX0RPVDIgfCBCUkxfRE9UMyB8IEJSTF9ET1Q0IHwgQlJMX0RPVDYsCisgIC8qIDA1NyAqLyBCUkxfRE9UMSB8IEJSTF9ET1QyIHwgQlJMX0RPVDMgfCBCUkxfRE9UNCB8IEJSTF9ET1Q2LAorICAvKiAwNjAgKi8gQlJMX0RPVDUgfCBCUkxfRE9UNiwKKyAgLyogMDYxICovIEJSTF9ET1QxIHwgQlJMX0RPVDUgfCBCUkxfRE9UNiwKKyAgLyogMDYyICovIEJSTF9ET1QyIHwgQlJMX0RPVDUgfCBCUkxfRE9UNiwKKyAgLyogMDYzICovIEJSTF9ET1QxIHwgQlJMX0RPVDIgfCBCUkxfRE9UNSB8IEJSTF9ET1Q2LAorICAvKiAwNjQgKi8gQlJMX0RPVDMgfCBCUkxfRE9UNSB8IEJSTF9ET1Q2LAorICAvKiAwNjUgKi8gQlJMX0RPVDEgfCBCUkxfRE9UMyB8IEJSTF9ET1Q1IHwgQlJMX0RPVDYsCisgIC8qIDA2NiAqLyBCUkxfRE9UMiB8IEJSTF9ET1QzIHwgQlJMX0RPVDUgfCBCUkxfRE9UNiwKKyAgLyogMDY3ICovIEJSTF9ET1QxIHwgQlJMX0RPVDIgfCBCUkxfRE9UMyB8IEJSTF9ET1Q1IHwgQlJMX0RPVDYsCisgIC8qIDA3MCAqLyBCUkxfRE9UNCB8IEJSTF9ET1Q1IHwgQlJMX0RPVDYsCisgIC8qIDA3MSAqLyBCUkxfRE9UMSB8IEJSTF9ET1Q0IHwgQlJMX0RPVDUgfCBCUkxfRE9UNiwKKyAgLyogMDcyICovIEJSTF9ET1QyIHwgQlJMX0RPVDQgfCBCUkxfRE9UNSB8IEJSTF9ET1Q2LAorICAvKiAwNzMgKi8gQlJMX0RPVDEgfCBCUkxfRE9UMiB8IEJSTF9ET1Q0IHwgQlJMX0RPVDUgfCBCUkxfRE9UNiwKKyAgLyogMDc0ICovIEJSTF9ET1QzIHwgQlJMX0RPVDQgfCBCUkxfRE9UNSB8IEJSTF9ET1Q2LAorICAvKiAwNzUgKi8gQlJMX0RPVDEgfCBCUkxfRE9UMyB8IEJSTF9ET1Q0IHwgQlJMX0RPVDUgfCBCUkxfRE9UNiwKKyAgLyogMDc2ICovIEJSTF9ET1QyIHwgQlJMX0RPVDMgfCBCUkxfRE9UNCB8IEJSTF9ET1Q1IHwgQlJMX0RPVDYsCisgIC8qIDA3NyAqLyBCUkxfRE9UMSB8IEJSTF9ET1QyIHwgQlJMX0RPVDMgfCBCUkxfRE9UNCB8IEJSTF9ET1Q1IHwgQlJMX0RPVDYKK307CisjZW5kaWYgLyogVVNFX1RFWFRUUkFOUyAqLworCisvKiBUaGlzIHRhYmxlIGlzIGZvciBnbG9iYWwgQlJMVFRZIGNvbW1hbmRzLCB0byBiZSBwYXNzZWQgc3RyYWlnaHQgYmFjayB0bworICogdGhlIG1haW4gbW9kdWxlLiAgSWYga2V5Ym9hcmQgZW11bGF0aW9uIGlzIG9mZiwgdGhleSB3aWxsIHdvcmsgd2l0aCBvcgorICogd2l0aG91dCBhIGNob3JkLCB1bmxlc3MgdGhleSBhcmUgbWFya2VkIGFzIGRhbmdlcm91cyBpbiBkYW5nY21kW10gYmVsb3cuCisgKgorICogTm90ZSB0aGF0IGtleSBjb21iaW5hdGlvbnMgdXNlZCB0byBpbml0aWF0ZSBpbnRlcm5hbCBjb21tYW5kcyBzaG91bGQgYmUKKyAqIGxlZnQgYXMgMCBoZXJlLgorICovCisKK3N0YXRpYyBjb25zdCBpbnQgY21kdHJhbnNbMDEwMF0gPSB7CisgIC8qIE9jdCAgIERvdHMgICAgICBDb21tYW5kICovCisgIC8qIDAwMCAoICAgICAgKSAqLyAwLAorICAvKiAwMDEgKDEgICAgICkgKi8gQlJMX0NNRF9MTlVQLAorICAvKiAwMDIgKCAyICAgICkgKi8gQlJMX0NNRF9LRVkoQ1VSU09SX0xFRlQpLAorICAvKiAwMDMgKDEyICAgICkgKi8gQlJMX0NNRF9LRVkoQkFDS1NQQUNFKSwKKyAgLyogMDA0ICggIDMgICApICovIEJSTF9DTURfQ0hSTFQsCisgIC8qIDAwNSAoMSAzICAgKSAqLyAwIC8qazoga2JlbXUqLywKKyAgLyogMDA2ICggMjMgICApICovIEJSTF9DTURfS0VZKENVUlNPUl9VUCksCisgIC8qIDAwNyAoMTIzICAgKSAqLyBCUkxfQ01EX1RPUF9MRUZULAorICAvKiAwMTAgKCAgIDQgICkgKi8gQlJMX0NNRF9MTkROLAorICAvKiAwMTEgKDEgIDQgICkgKi8gQlJMX0NNRF9DU1JUUkssCisgIC8qIDAxMiAoIDIgNCAgKSAqLyBCUkxfQ01EX0RJU1BNRCwKKyAgLyogMDEzICgxMiA0ICApICovIEJSTF9DTURfRlJFRVpFLAorICAvKiAwMTQgKCAgMzQgICkgKi8gQlJMX0NNRF9JTkZPLAorICAvKiAwMTUgKDEgMzQgICkgKi8gQlJMX0NNRF9NVVRFLAorICAvKiAwMTYgKCAyMzQgICkgKi8gQlJMX0NNRF9OWFNFQVJDSCwKKyAgLyogMDE3ICgxMjM0ICApICovIEJSTF9DTURfUEFTVEUsCisgIC8qIDAyMCAoICAgIDUgKSAqLyBCUkxfQ01EX0tFWShDVVJTT1JfUklHSFQpLAorICAvKiAwMjEgKDEgICA1ICkgKi8gMCAvKmU6IGVuZGNtZCovLAorICAvKiAwMjIgKCAyICA1ICkgKi8gMCAvKjI1OiBwcmVmcyovLAorICAvKiAwMjMgKDEyICA1ICkgKi8gQlJMX0NNRF9IT01FLAorICAvKiAwMjQgKCAgMyA1ICkgKi8gMCAvKjM1OiBtZXRhKi8sCisgIC8qIDAyNSAoMSAzIDUgKSAqLyAwIC8qbzogbnVtYmVyKi8sCisgIC8qIDAyNiAoIDIzIDUgKSAqLyBCUkxfQ01EX0xOQkVHLAorICAvKiAwMjcgKDEyMyA1ICkgKi8gQlJMX0NNRF9SRVNUQVJUQlJMLAorICAvKiAwMzAgKCAgIDQ1ICkgKi8gQlJMX0NNRF9DU1JKTVBfVkVSVCwKKyAgLyogMDMxICgxICA0NSApICovIEJSTF9DTURfS0VZKERFTEVURSksCisgIC8qIDAzMiAoIDIgNDUgKSAqLyBCUkxfQ01EX0JMSyhST1VURSksCisgIC8qIDAzMyAoMTIgNDUgKSAqLyAwIC8qZzogaW50ZXJuYWwgY3Vyc29yKi8sCisgIC8qIDAzNCAoICAzNDUgKSAqLyAwIC8qMzQ1OiBibGl0ZSBpbnRlcm5hbCBzcGVlY2hib3gqLywKKyAgLyogMDM1ICgxIDM0NSApICovIEJSTF9DTURfTlhQR1JQSCwKKyAgLyogMDM2ICggMjM0NSApICovIEJSTF9DTURfS0VZKFRBQiksCisgIC8qIDAzNyAoMTIzNDUgKSAqLyAwIC8qcTogZmluaXNoIHVwcGVyY2FzZSovLAorICAvKiAwNDAgKCAgICAgNikgKi8gQlJMX0NNRF9DSFJSVCwKKyAgLyogMDQxICgxICAgIDYpICovIEJSTF9DTURfQkxLKENPUFlfTElORSksCisgIC8qIDA0MiAoIDIgICA2KSAqLyAwIC8qMjY6IGRvdDhzaGlmdCovLAorICAvKiAwNDMgKDEyICAgNikgKi8gQlJMX0NNRF9CTEsoQ0xJUF9BREQpLAorICAvKiAwNDQgKCAgMyAgNikgKi8gQlJMX0NNRF9TQVlfTElORSwKKyAgLyogMDQ1ICgxIDMgIDYpICovIDAgLyp1OiB1cHBzZXJjYXNlKi8sCisgIC8qIDA0NiAoIDIzICA2KSAqLyBCUkxfQ01EX0JMSyhDTElQX05FVyksCisgIC8qIDA0NyAoMTIzICA2KSAqLyBCUkxfQ01EX1NXSVRDSFZUX05FWFQsCisgIC8qIDA1MCAoICAgNCA2KSAqLyBCUkxfQ01EX0tFWShFTlRFUiksCisgIC8qIDA1MSAoMSAgNCA2KSAqLyAwIC8qMTQ2OiBmcmVlKi8sCisgIC8qIDA1MiAoIDIgNCA2KSAqLyBCUkxfQ01EX0tFWShFU0NBUEUpLAorICAvKiAwNTMgKDEyIDQgNikgKi8gQlJMX0NNRF9QUlBHUlBILAorICAvKiAwNTQgKCAgMzQgNikgKi8gMCAvKjM0NjogZnJlZSovLAorICAvKiAwNTUgKDEgMzQgNikgKi8gMCAvKng6IHh0cmwqLywKKyAgLyogMDU2ICggMjM0IDYpICovIEJSTF9DTURfU0lYRE9UUywKKyAgLyogMDU3ICgxMjM0IDYpICovIDAgLyoxMjM0NjogZnJlZSovLAorICAvKiAwNjAgKCAgICA1NikgKi8gQlJMX0NNRF9LRVkoQ1VSU09SX0RPV04pLAorICAvKiAwNjEgKDEgICA1NikgKi8gQlJMX0NNRF9QUlNFQVJDSCwKKyAgLyogMDYyICggMiAgNTYpICovIEJSTF9DTURfTE5FTkQsCisgIC8qIDA2MyAoMTIgIDU2KSAqLyBCUkxfQ01EX0JBQ0ssCisgIC8qIDA2NCAoICAzIDU2KSAqLyBCUkxfQ01EX0JMSyhDT1BZX1JFQ1QpLAorICAvKiAwNjUgKDEgMyA1NikgKi8gMCAvKno6IGFib3J0Ki8sCisgIC8qIDA2NiAoIDIzIDU2KSAqLyAwIC8qMjM1Njogcm90YXRlKi8sCisgIC8qIDA2NyAoMTIzIDU2KSAqLyBCUkxfQ01EX05YUFJPTVBULAorICAvKiAwNzAgKCAgIDQ1NikgKi8gQlJMX0NNRF9CT1RfTEVGVCwKKyAgLyogMDcxICgxICA0NTYpICovIEJSTF9DTURfSEVMUCwKKyAgLyogMDcyICggMiA0NTYpICovIDAgLyp3OiBmcmVlKi8sCisgIC8qIDA3MyAoMTIgNDU2KSAqLyBCUkxfQ01EX0xFQVJOLAorICAvKiAwNzQgKCAgMzQ1NikgKi8gQlJMX0NNRF9TV0lUQ0hWVF9QUkVWLAorICAvKiAwNzUgKDEgMzQ1NikgKi8gMCAvKnk6IGZyZWUqLywKKyAgLyogMDc2ICggMjM0NTYpICovIEJSTF9DTURfUFJQUk9NUFQsCisgIC8qIDA3NyAoMTIzNDU2KSAqLyAwIC8qMTIzNDU2OiBub29wKi8KK307CisKKy8qIERhbmdlcm91cyBjb21tYW5kczsgMSBiaXQgcGVyIGNvbW1hbmQsIG9yZGVyIGFzIGNtZHRyYW5zW10sIHNldCBpZgorICogdGhlIGNvcnJlc3BvbmRpbmcgY29tbWFuZCBpcyBkYW5nZXJvdXMuCisgKi8KKworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgZGFuZ2NtZFs4XSA9Cit7IDB4MDAsIDB4ODgsIDB4ODAsIDB4MDUsIDB4NDAsIDB4MDAsIDB4MTAsIDB4MDAgfTsKKwordHlwZWRlZiBpbnQgQmFyQ21kc1sxNl07Citjb25zdCBCYXJDbWRzICpiYXJjbWRzOworCisvKiBUd28gYWR2YW5jZSBiYXIgY29tbWFuZHMuICovCitzdGF0aWMgY29uc3QgQmFyQ21kcyBiYXIyY21kcyA9Cit7CisvKiBMZWZ0QmFyXCBSaWdodEJhcj4gTm9uZSAgICAgICAgIFJpZ2h0ICAgICAgICBMZWZ0ICAgICAgICAgQm90aCAgICAgICAgICovCisvKiAgICAgICAgIE5vbmUgICAgKi8gMCAgICAgICAgICAsIEJSTF9DTURfRldJTlJUICwgQlJMX0NNRF9MTkROICAgLCBCUkxfQ01EX0hXSU5SVCAsCisvKiAgICAgICAgIFJpZ2h0ICAgKi8gQlJMX0NNRF9MTlVQICAgLCBCUkxfQ01EX0FUVFJETiAsIEJSTF9DTURfQVRUUlVQICwgMCAgICAgICAgICAsCisvKiAgICAgICAgIExlZnQgICAgKi8gQlJMX0NNRF9GV0lOTFQgLCBCUkxfQ01EX05YRElGTE4sIEJSTF9DTURfUFJESUZMTiwgMCAgICAgICAgICAsCisvKiAgICAgICAgIEJvdGggICAgKi8gQlJMX0NNRF9IV0lOTFQgLCBCUkxfQ01EX0JPVCAgICAsIEJSTF9DTURfVE9QICAgICwgMAorfTsKKworLyogT25lIGFkdmFuY2UgYmFyIGNvbW1hbmRzLiAqLworc3RhdGljIGNvbnN0IEJhckNtZHMgYmFyMWNtZHMgPQoreworLyogICAgICAgICAgTm9uZSAgICAgICAgIExlZnQgICAgICAgICBSaWdodCAgICAgICAgQm90aCAgICAgICAgICovCisvKiBOb25lICAqLyAwICAgICAgICAgICwgQlJMX0NNRF9GV0lOTFQgLCBCUkxfQ01EX0ZXSU5SVCAsIDAgICAgICAgICAgLAorLyogUmlnaHQgKi8gQlJMX0NNRF9GV0lOUlQgLCAwICAgICAgICAgICwgMCAgICAgICAgICAsIDAgICAgICAgICAgLAorLyogTGVmdCAgKi8gQlJMX0NNRF9GV0lOTFQgLCAwICAgICAgICAgICwgMCAgICAgICAgICAsIDAgICAgICAgICAgLAorLyogQm90aCAgKi8gMCAgICAgICAgICAsIDAgICAgICAgICAgLCAwICAgICAgICAgICwgMAorfTsKKworLyogTGVmdCB3aGl6IHdoZWVsIGNvbW1hbmRzLiAqLworc3RhdGljIGNvbnN0IGludCBsd3djbWRzW10gPQorLyogTm9uZSAgICAgICAgIFVwICAgICAgICAgICBEb3duICAgICAgICAgUHJlc3MgICAgICAgICovCisgIHswICAgICAgICAgICwgQlJMX0NNRF9MTlVQICAgLCBCUkxfQ01EX0xORE4gICAsIEJSTF9DTURfQVRUUlZJU307CisKKy8qIFJpZ2h0IHdoaXogd2hlZWwgY29tbWFuZHMuICovCitzdGF0aWMgY29uc3QgaW50IHJ3d2NtZHNbXSA9CisvKiBOb25lICAgICAgICAgVXAgICAgICAgICAgIERvd24gICAgICAgICBQcmVzcyAgICAgICAgKi8KKyAgezAgICAgICAgICAgLCBCUkxfQ01EX0ZXSU5MVCAsIEJSTF9DTURfRldJTlJUICwgQlJMX0NNRF9DU1JWSVMgfTsKKworI2VuZGlmIC8qIEJMX05FRURfQVJSQVlTICovCisKKworLyoKKyAqIEZ1bmN0aW9ucyBmb3IgdGhlIGFkdmFuY2UgYmFyLiAgQ3VycmVudGx5LCB0aGVzZSBhcmUgcGFzc2VkIHN0cmFpZ2h0CisgKiBiYWNrIHRvIHRoZSBtYWluIG1vZHVsZSwgc28gaGF2ZSB0byBiZSBnbG9iYWwgY29tbWFuZHMuCisgKi8KKworLyogQnJhaWxsZUxpdGUgMTggKi8KKyNkZWZpbmUgQkxUX0JBUkxUIEJSTF9DTURfRldJTkxUCisjZGVmaW5lIEJMVF9CQVJSVCBCUkxfQ01EX0ZXSU5SVAorCisKKy8qIEludGVybmFsIGNvbW1hbmRzLiAgVGhlIGRlZmluaXRpb25zIHVzZSB0aGUgQVNDSUkgY29kZXMgZnJvbSBicmx0cmFuc1tdCisgKiBhYm92ZS4gIEFsbCBtdXN0IGJlIGNob3JkZWQuCisgKi8KKworI2RlZmluZSBCTFRfS0JFTVUgJ2snCisjZGVmaW5lIEJMVF9ST1RBVEUgJzcnCisjZGVmaW5lIEJMVF9QT1NJVE4gJ2cnCisjZGVmaW5lIEJMVF9SRVBFQVQgJ28nCisjZGVmaW5lIEJMVF9DT05GSUcgJzMnCisjZGVmaW5lIEJMVF9FTkRDTUQgJ2UnCisjZGVmaW5lIEJMVF9BQk9SVCAneicKKyNkZWZpbmUgU1dJVENIVlRfTkVYVCAndicKKyNkZWZpbmUgU1dJVENIVlRfUFJFViAnIycKKy8qIFRoZXNlIGFyZSB2YWxpZCBvbmx5IGluIHJlcGVhdCBpbnB1dCBtb2RlLiBUaGV5IGR1cGxpY2F0ZSBleGlzdGluZworICAgbm9ybWFsIGNvbW1hbmRzLiAqLworI2RlZmluZSBPX1NFVE1BUksgJ3MnCisjZGVmaW5lIE9fR09UT01BUksgJ20nCisKKy8qIEZvciBrZXlib2FyZCBlbXVsYXRpb24gbW9kZTogKi8KKyNkZWZpbmUgQkxUX1VQQ0FTRSAndScKKyNkZWZpbmUgQkxUX1VQQ09GRiAncScKKyNkZWZpbmUgQkxUX0NUUkwgJ3gnCisjaWZkZWYgVVNFX1RFWFRUUkFOUworI2RlZmluZSBCTFRfRE9UOFNISUZUICc1JworI2VuZGlmIC8qIFVTRV9URVhUVFJBTlMgKi8KKyNkZWZpbmUgQkxUX01FVEEgJzknCisKKyNlbmRpZiAvKiBCUkxUVFlfSU5DTFVERURfQkxfQklORElOR1MgKi8KZGlmZiAtLWdpdCBhL0RyaXZlcnMvQnJhaWxsZS9CcmFpbGxlTGl0ZS9icmFpbGxlLmMgYi9Ecml2ZXJzL0JyYWlsbGUvQnJhaWxsZUxpdGUvYnJhaWxsZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMyNWMyNjAKLS0tIC9kZXYvbnVsbAorKysgYi9Ecml2ZXJzL0JyYWlsbGUvQnJhaWxsZUxpdGUvYnJhaWxsZS5jCkBAIC0wLDAgKzEsODUyIEBACisvKgorICogQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyAqICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyAqCisgKiBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorICoKKyAqIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyAqCisgKiBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisgKi8KKworLyogQnJhaWxsZUxpdGUvYnJhaWxsZS5jIC0gQnJhaWxsZSBkaXNwbGF5IGxpYnJhcnkKKyAqIEZvciBCbGF6aWUgRW5naW5lZXJpbmcncyBCcmFpbGxlIExpdGUgc2VyaWVzCisgKiBBdXRob3I6IE5pa2hpbCBOYWlyIDxubjIwMUBjdXMuY2FtLmFjLnVrPgorICogQ29weXJpZ2h0IChDKSAxOTk4IGJ5IE5pa2hpbCBOYWlyLgorICogU29tZSBhZGRpdGlvbnMgYnk6IE5pY29sYXMgUGl0cmUgPG5pY29AZmx1eG5pYy5uZXQ+CisgKiBTb21lIG1vZGlmaWNhdGlvbnMgY29weXJpZ2h0IDIwMDEgYnkgU3TpcGhhbmUgRG95b24gPHMuZG95b25AdmlkZW90cm9uLmNhPi4KKyAqIFNvbWUgYWRkaXRpb25zIGJ5OiBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+CisgKi8KKworI2luY2x1ZGUgInByb2xvZ3VlLmgiCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorCisjaW5jbHVkZSAibG9nLmgiCisjaW5jbHVkZSAicGFyc2UuaCIKKyNpbmNsdWRlICJ0aW1pbmcuaCIKKyNpbmNsdWRlICJhc3luY193YWl0LmgiCisjaW5jbHVkZSAibWVzc2FnZS5oIgorCit0eXBlZGVmIGVudW0geworICBQQVJNX0JBVURSQVRFLAorICBQQVJNX0tCRU1VCit9IERyaXZlclBhcmFtZXRlcjsKKyNkZWZpbmUgQlJMUEFSTVMgImJhdWRyYXRlIiwgImtiZW11IgorCisjaW5jbHVkZSAiYnJsX2RyaXZlci5oIgorI2luY2x1ZGUgImJyYWlsbGUuaCIKKyNpbmNsdWRlICJpb19zZXJpYWwuaCIKKworI2RlZmluZSBCTF9ORUVEX0FSUkFZUworI2luY2x1ZGUgImJpbmRpbmdzLmgiCQkvKiBmb3Iga2V5YmluZGluZ3MgKi8KKworI2RlZmluZSBRU1ogMjU2CQkJLyogc2l6ZSBvZiBpbnRlcm5hbCBpbnB1dCBxdWV1ZSBpbiBieXRlcyAqLworI2RlZmluZSBJTlRfQ1NSX1NQRUVEIDIJCS8qIG9uL29mZiB0aW1lIGluIGN5Y2xlcyAqLworI2RlZmluZSBBQ0tfVElNRU9VVCAxMDAwCS8qIHRpbWVvdXQgaW4gbXMgZm9yIGFuIEFDSyB0byBjb21lIGJhY2sgKi8KKworU2VyaWFsRGV2aWNlICpCTF9zZXJpYWxEZXZpY2UgPSBOVUxMOwkJLyogZmlsZSBkZXNjcmlwdG9yIGZvciBCcmFpbGxlIGRpc3BsYXkgKi8KKworc3RhdGljIHVuc2lnbmVkIGNoYXIgKnByZXZkYXRhID0gTlVMTDsJLyogcHJldmlvdXNseSByZWNlaXZlZCBkYXRhICovCitzdGF0aWMgdW5zaWduZWQgY2hhciAqcmF3ZGF0YSA9IE5VTEw7CS8qIHdyaXRlYnJsKCkgYnVmZmVyIGZvciByYXcgQnJhaWxsZSBkYXRhICovCitzdGF0aWMgaW50IGJsaXRlc3o7CS8qIHNldCB0byAxOCBvciA0MCAqLworc3RhdGljIGludCB3YWl0aW5nX2FjayA9IDA7CS8qIHdhaXRpbmcgYWNrbm93bGVkZ2VtZW50IGZsYWcgKi8KK3N0YXRpYyBpbnQgcmV2ZXJzZV9rYmQgPSAwOwkvKiByZXZlcnNlIGtleWJvYXJkIGZsYWcgKi8KK3N0YXRpYyBpbnQgaW50b3ZlcnJpZGUgPSAwOwkvKiBpbnRlcm5hbCBvdmVycmlkZSBmbGFnIC0KKwkJCQkgKiBoaWdobHkgZHViaW91cyBiZWhhdmlvdXIgLi4uCisJCQkJICovCitzdGF0aWMgaW50IGludF9jdXJzb3IgPSAwOwkvKiBwb3NpdGlvbiBvZiBpbnRlcm5hbCBjdXJzb3I6IDAgPSBub25lICovCitzdGF0aWMgdW5zaWduZWQgaW50IGtiZW11ID0gMTsgLyoga2V5Ym9hcmQgZW11bGF0aW9uICh3aGV0aGVyIHlvdSBjYW4gdHlwZSkgKi8KKworLyogVGhlIGlucHV0IHF1ZXVlIGlzIG9ubHkgbWFuaXB1bGF0ZWQgYnkgdGhlIHFwdXQoKSBhbmQgcWdldCgpCisgKiBmdW5jdGlvbnMuCisgKi8KK3N0YXRpYyB1bnNpZ25lZCBjaGFyICpxYmFzZSA9IE5VTEw7CS8qIHN0YXJ0IG9mIHF1ZXVlIGluIG1lbW9yeSAqLworc3RhdGljIGludCBxb2ZmID0gMDsJCS8qIG9mZnNldCBvZiBmaXJzdCBieXRlICovCitzdGF0aWMgaW50IHFsZW4gPSAwOwkJLyogbnVtYmVyIG9mIGl0ZW1zIGluIHRoZSBxdWV1ZSAqLworCisKKy8qIERhdGEgdHlwZSBmb3IgYSBCcmFpbGxlIExpdGUga2V5LCBpbmNsdWRpbmcgdHJhbnNsYXRpb24gaW50byBjb21tYW5kCisgKiBjb2RlczoKKyAqLwordHlwZWRlZiBzdHJ1Y3QKKyAgeworICAgIHVuc2lnbmVkIGNoYXIgcmF3OwkJLyogcmF3IHZhbHVlLCBhZnRlciBhbnkga2V5Ym9hcmQgcmV2ZXJzYWwgKi8KKyAgICBpbnQgY21kOwkJCS8qIGNvbW1hbmQgY29kZSAqLworICAgIHVuc2lnbmVkIGNoYXIgYXNjOwkJLyogQVNDSUkgdHJhbnNsYXRpb24gb2YgQnJhaWxsZSBrZXlzICovCisgICAgdW5zaWduZWQgY2hhciBzcGNiYXI7CS8qIDEgPSBvbiwgMCA9IG9mZiAqLworICAgIHVuc2lnbmVkIGNoYXIgcm91dGluZzsJLyogcm91dGluZyBrZXkgbnVtYmVyICovCisgIH0KK2Jsa2V5OworCisKK3N0YXRpYyBpbnQKK3FwdXQgKHVuc2lnbmVkIGNoYXIgYykKK3sKKyAgaWYgKHFsZW4gPT0gUVNaKQorICAgIHJldHVybiBFT0Y7CisgIHFiYXNlWyhxb2ZmICsgcWxlbisrKSAlIFFTWl0gPSBjOworICByZXR1cm4gMDsKK30KKworCitzdGF0aWMgaW50CitxZ2V0IChibGtleSAqIGtwKQoreworICB1bnNpZ25lZCBjaGFyIGM7CisgIGludCBob3c7CisgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGNvdW50c1tdID0gezEsIDMsIDN9OworICB1bnNpZ25lZCBjaGFyIGNvdW50OworCisgIGlmIChxbGVuID09IDApCisgICAgcmV0dXJuIEVPRjsKKyAgYyA9IHFiYXNlW3FvZmZdOworCisgIC8qIGV4dGVuZGVkIHNlcXVlbmNlcyBzdGFydCB3aXRoIGEgemVybyAqLworICBob3cgPSAoYyA9PSAwKT8gMToKKyAgICAgICAgKGMgPT0gMHg4MCAmJiBibGl0ZXN6ICE9IDE4KT8gMjoKKyAgICAgICAgMDsKKyAgY291bnQgPSBjb3VudHNbaG93XTsKKyAgaWYgKHFsZW4gPCBjb3VudCkKKyAgICByZXR1cm4gRU9GOworCisgIG1lbXNldCAoa3AsIDAsIHNpemVvZiAoKmtwKSk7CisgIHN3aXRjaCAoaG93KSB7CisgICAgY2FzZSAwOiAvKiBub24tZXh0ZW5kZWQgc2VxdWVuY2VzIChCTDE4KSAqLworICAgICAgLyogV2UgbXVzdCBkZWFsIHdpdGgga2V5Ym9hcmQgcmV2ZXJzYWwgaGVyZTogKi8KKyAgICAgIGlmIChyZXZlcnNlX2tiZCkKKwl7CisJICBpZiAoYyA+PSAweDgwKQkvKiBhZHZhbmNlIGJhciAqLworCSAgICBjIF49IDB4MDM7CisJICBlbHNlCisJICAgIGMgPSAoYyAmIDB4NDApIHwgKChjICYgMHgzOCkgPj4gMykgfCAoKGMgJiAweDA3KSA8PCAzKTsKKwl9CisKKyAgICAgIC8qIE5vdyB3ZSBmaWxsIGluIGFsbCB0aGUgaW5mbyBhYm91dCB0aGUga2V5cHJlc3M6ICovCisgICAgICBpZiAoYyA+PSAweDgwKQkJLyogYWR2YW5jZSBiYXIgKi8KKwl7CisJICBrcC0+cmF3ID0gYzsKKwkgIHN3aXRjaCAoYykgeworCSAgICBjYXNlIDB4ODM6CQkvKiBsZWZ0ICovCisJICAgICAga3AtPmNtZCA9IEJMVF9CQVJMVDsKKwkgICAgICBicmVhazsKKworCSAgICBjYXNlIDB4ODA6CQkvKiByaWdodCAqLworCSAgICAgIGtwLT5jbWQgPSBCTFRfQkFSUlQ7CisJICAgICAgYnJlYWs7CisKKwkgICAgZGVmYXVsdDoJCS8qIHVucmVjb2duaXNlZCBrZXlwcmVzcyAqLworCSAgICAgIGtwLT5jbWQgPSAwOworICAgICAgICAgICAgICBicmVhazsKKwkgIH0KKwl9CisgICAgICBlbHNlCisJeworCSAga3AtPnNwY2JhciA9ICgoYyAmIDB4NDApPyAxOiAwKTsKKwkgIGMgJj0gMHgzZjsJCS8qIGxlYXZlIG9ubHkgZG90IGtleSBpbmZvICovCisJICBrcC0+cmF3ID0gYzsKKwkgIGtwLT5jbWQgPSBjbWR0cmFuc1tjXTsKKwkgIGtwLT5hc2MgPSBicmx0cmFuc1tjXTsKKwl9CisgICAgICBicmVhazsKKworICAgIGNhc2UgMTogeyAvKiBleHRlbmRlZCBzZXF1ZW5jZXMgKEJMNDApICovCisgICAgICB1bnNpZ25lZCBjaGFyIGMyID0gcWJhc2VbKChxb2ZmICsgMSkgJSBRU1opXTsKKyAgICAgIHVuc2lnbmVkIGNoYXIgYzMgPSBxYmFzZVsoKHFvZmYgKyAyKSAlIFFTWildOworCisgICAgICAvKiBXZSBtdXN0IGRlYWwgd2l0aCBrZXlib2FyZCByZXZlcnNhbCBoZXJlOiAqLworICAgICAgaWYgKHJldmVyc2Vfa2JkKQorCXsKKwkgIGlmIChjMiA9PSAwKQorCSAgICB7CQkJLyogYWR2YW5jZSBiYXJzIG9yIHJvdXRpbmcga2V5cyAqLworCSAgICAgIGlmIChjMyAmIDB4ODApCS8qIGFkdmFuY2UgYmFycyAqLworCQljMyA9ICgoYzMgJiAweEYwKSB8CisJCSAgICAgICgoYzMgJiAweDEpIDw8IDMpIHwgKChjMyAmIDB4MikgPDwgMSkgfAorCQkgICAgICAoKGMzICYgMHg0KSA+PiAxKSB8ICgoYzMgJiAweDgpID4+IDMpKTsKKwkgICAgICBlbHNlIGlmIChjMyA+IDAgJiYgYzMgPD0gYmxpdGVzeikKKwkJYzMgPSBibGl0ZXN6IC0gYzMgKyAxOworCSAgICB9CisJICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGMyID0gKCgoYzIgJiAweDM4KSA+PiAzKSB8ICgoYzIgJiAweDA3KSA8PCAzKSB8CisgICAgICAgICAgICAgICAgICAgICgoYzIgJiAweDQwKSA8PCAxKSB8ICgoYzIgJiAweDgwKSA+PiAxKSk7CisgICAgICAgICAgICAgIGMzID0gKChjMyAmIDB4NDApIHwgKChjMyAmIDB4MzgpID4+IDMpIHwgKChjMyAmIDB4MDcpIDw8IDMpKTsKKyAgICAgICAgICAgIH0KKwl9CisKKyAgICAgIC8qIE5vdyB3ZSBmaWxsIGluIGFsbCB0aGUgaW5mbyBhYm91dCB0aGUga2V5cHJlc3M6ICovCisgICAgICBpZiAoYzIgPT0gMCkJCS8qIGFkdmFuY2UgYmFycyBvciByb3V0aW5nIGtleXMgKi8KKwl7CisJICBrcC0+cmF3ID0gYzM7CisJICBpZiAoYzMgJiAweDgwKQorICAgICAgICAgICAga3AtPmNtZCA9ICgqYmFyY21kcylbYzMgJiAweEZdOworCSAgZWxzZSBpZiAoYzMgPiAwICYmIGMzIDw9IGJsaXRlc3opCisJICAgIGtwLT5yb3V0aW5nID0gYzM7CisJfQorICAgICAgZWxzZQorCXsKKwkgIGtwLT5zcGNiYXIgPSAoKGMzICYgMHg0MCk/IDE6IDApOworCSAgYzMgJj0gMHgzZjsJCS8qIGxlYXZlIG9ubHkgZG90IGtleSBpbmZvICovCisJICBrcC0+cmF3ID0gKGMyICYgMHhDMCkgfCBjMzsgLyogY29tYmluZSBpbmZvIGZvciBhbGwgOCBkb3RzICovCisJICAvKiBjMiYweDNGIGFuZCBjMyYweDNGIGFyZSB0aGUgc2FtZSwgaS5lLiBkb3RzIDEtNi4gKi8KKwkgIGtwLT5jbWQgPSBjbWR0cmFuc1tjM107CisJICBrcC0+YXNjID0gYnJsdHJhbnNbYzNdOworCX0KKyAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2UgMjogeyAvKiBleHRlbmRlZCBzZXF1ZW5jZXMgKG1pbGxlbm5pdW0pICovCisgICAgICB1bnNpZ25lZCBjaGFyIGMzID0gcWJhc2VbKChxb2ZmICsgMikgJSBRU1opXTsKKworICAgICAgLyogV2UgbXVzdCBkZWFsIHdpdGgga2V5Ym9hcmQgcmV2ZXJzYWwgaGVyZTogKi8KKyAgICAgIGlmIChyZXZlcnNlX2tiZCkKKyAgICAgICAgYzMgPSAoKGMzICYgMHgxMSkgPDwgMykgfCAoKGMzICYgMHgyMikgPDwgMSkgfCAoKGMzICYgMHg0NCkgPj4gMSkgfCAoKGMzICYgMHg4OCkgPj4gMyk7CisgICAgICBrcC0+cmF3ID0gYzM7CisKKyAgICAgIGlmIChjMyAmIDB4MGYpCisgICAgICAgIGtwLT5jbWQgPSAoKmJhcmNtZHMpWygoYzMgJiAweDEpIDw8IDMpIHwgKChjMyAmIDB4MikgPDwgMSkgfCAoKGMzICYgMHg0KSA+PiAxKSB8ICgoYzMgJiAweDgpID4+IDMpXTsKKyAgICAgIGVsc2UgaWYgKGMzICYgMHgzMCkKKyAgICAgICAga3AtPmNtZCA9IHJ3d2NtZHNbKGMzID4+IDQpICYgMHgzXTsKKyAgICAgIGVsc2UgaWYgKGMzICYgMHhjMCkKKyAgICAgICAga3AtPmNtZCA9IGx3d2NtZHNbKGMzID4+IDYpICYgMHgzXTsKKyAgICAgIGVsc2UKKyAgICAgICAga3AtPmNtZCA9IDA7CisgICAgICBicmVhazsKKyAgICB9CisKKyAgICBkZWZhdWx0OgorICAgICAga3AtPmNtZCA9IDA7CisgICAgICBicmVhazsKKyAgfQorCisgIC8qIGFkanVzdCBxdWV1ZSB2YXJpYWJsZXMgZm9yIG5leHQgbWVtYmVyICovCisgIHFvZmYgPSAocW9mZiArIGNvdW50KSAlIFFTWjsKKyAgcWxlbiAtPSBjb3VudDsKKworICByZXR1cm4gMDsKK30KKworCitzdGF0aWMgdm9pZAorcWZpbGwgKHZvaWQpCit7CisgIHVuc2lnbmVkIGNoYXIgYzsJCS8qIGNoYXJhY3RlciBidWZmZXIgKi8KKworICB3aGlsZSAoc2VyaWFsUmVhZERhdGEgKEJMX3NlcmlhbERldmljZSwgJmMsIDEsIDAsIDApID09IDEpCisgICAgeworICAgICAgaWYgKHdhaXRpbmdfYWNrICYmIGMgPT0gNSkJLyogXmUgaXMgdGhlIGFja25vd2xlZGdlbWVudCBjaGFyYWN0ZXIgLi4uICovCisJd2FpdGluZ19hY2sgPSAwOworICAgICAgZWxzZQorCXFwdXQgKGMpOworICAgIH0KK30KKworCitzdGF0aWMgdm9pZAorcWZsdXNoICh2b2lkKQoreworICBxZmlsbCgpOworICBxbGVuID0gMDsKK30KKworc3RhdGljIGludAorYXdhaXRfYWNrICh2b2lkKSB7CisgIFRpbWVQZXJpb2QgcGVyaW9kOworICBzdGFydFRpbWVQZXJpb2QoJnBlcmlvZCwgQUNLX1RJTUVPVVQpOworICB3YWl0aW5nX2FjayA9IDE7CisgIGRvIHsKKyAgICBhc3luY1dhaXQoMTApOwkvKiBzbGVlcCBmb3IgMTAgbXMgKi8KKyAgICBxZmlsbCgpOworICAgIGlmICghd2FpdGluZ19hY2spIHJldHVybiAxOworICB9IHdoaWxlICghYWZ0ZXJUaW1lUGVyaW9kKCZwZXJpb2QsIE5VTEwpKTsKKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkCit3cml0ZV9wcmVicmwgKHZvaWQpIHsKKyAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgcmVxdWVzdFtdID0gezBYMDUsIDBYNDR9OwkJCS8qIGNvZGUgdG8gc2VuZCBiZWZvcmUgQnJhaWxsZSAqLworICBzZXJpYWxXcml0ZURhdGEoQkxfc2VyaWFsRGV2aWNlLCByZXF1ZXN0LCBzaXplb2YocmVxdWVzdCkpOworfQorCitzdGF0aWMgaW50CiticmxfY29uc3RydWN0IChCcmFpbGxlRGlzcGxheSAqYnJsLCBjaGFyICoqcGFyYW1ldGVycywgY29uc3QgY2hhciAqZGV2aWNlKQoreworICBzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IGdvb2RfYmF1ZHJhdGVzW10gPQorICAgIHszMDAsNjAwLDEyMDAsMjQwMCw0ODAwLDk2MDAsMTkyMDAsMzg0MDAsIDB9OworICB1bnNpZ25lZCBpbnQgYmF1ZHJhdGU7CisgIC8qIEluaXQgc3RyaW5nIGZvciBNb2RlbCBkZXRlY3Rpb24gKi8KKworICBpZiAoISpwYXJhbWV0ZXJzW1BBUk1fQkFVRFJBVEVdIHx8CisgICAgICAhc2VyaWFsVmFsaWRhdGVCYXVkKCZiYXVkcmF0ZSwgImJhdWQgcmF0ZSIsCisJCSAgICBwYXJhbWV0ZXJzW1BBUk1fQkFVRFJBVEVdLCBnb29kX2JhdWRyYXRlcykpCisgICAgYmF1ZHJhdGUgPSBCQVVEUkFURTsKKworICBpZiAoKnBhcmFtZXRlcnNbUEFSTV9LQkVNVV0pCisgICAgaWYgKCF2YWxpZGF0ZVllc05vKCZrYmVtdSwgcGFyYW1ldGVyc1tQQVJNX0tCRU1VXSkpCisgICAgICBsb2dNZXNzYWdlKExPR19XQVJOSU5HLCAiJXM6ICVzIiwgImludmFsaWQga2V5Ym9hcmQgZW11bGF0aW9uIHNldHRpbmciLCBwYXJhbWV0ZXJzW1BBUk1fS0JFTVVdKTsKKyAga2JlbXUgPSAhIWtiZW11OworCisgIGlmICghaXNTZXJpYWxEZXZpY2VJZGVudGlmaWVyKCZkZXZpY2UpKSB7CisgICAgdW5zdXBwb3J0ZWREZXZpY2VJZGVudGlmaWVyKGRldmljZSk7CisgICAgcmV0dXJuIDA7CisgIH0KKworICBsb2dNZXNzYWdlKExPR19ERUJVRywgIk9wZW5pbmcgc2VyaWFsIHBvcnQ6ICVzIiwgZGV2aWNlKTsKKyAgaWYgKChCTF9zZXJpYWxEZXZpY2UgPSBzZXJpYWxPcGVuRGV2aWNlKGRldmljZSkpKSB7CisgICAgaWYgKHNlcmlhbFJlc3RhcnREZXZpY2UoQkxfc2VyaWFsRGV2aWNlLCBiYXVkcmF0ZSkpIHsKKyAgICAgIGlmIChzZXJpYWxTZXRGbG93Q29udHJvbChCTF9zZXJpYWxEZXZpY2UsIFNFUklBTF9GTE9XX0hBUkRXQVJFKSkgeworICAgICAgICBpZiAoKHFiYXNlID0gbWFsbG9jKFFTWikpKSB7CisgICAgICAgICAgcWZsdXNoKCk7CisgICAgICAgICAgd3JpdGVfcHJlYnJsKCk7CisKKyAgICAgICAgICBpZiAoYXdhaXRfYWNrKCkpIHsKKyAgICAgICAgICAgIGxvZ01lc3NhZ2UoTE9HX0RFQlVHLCAiR290IHJlc3BvbnNlLiIpOworCisgICAgICAgICAgICAvKiBOZXh0LCBsZXQncyBkZXRlY3QgdGhlIEJMVC1Nb2RlbCAoMTgsIDQwLCBNMjAsIE00MCkuICovCisgICAgICAgICAgICBiYXJjbWRzID0gJmJhcjJjbWRzOworICAgICAgICAgICAgeworICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIGNlbGxzWzE4XTsKKworICAgICAgICAgICAgICBtZW1zZXQoY2VsbHMsIDAsIHNpemVvZihjZWxscykpOworICAgICAgICAgICAgICBzZXJpYWxXcml0ZURhdGEoQkxfc2VyaWFsRGV2aWNlLCBjZWxscywgc2l6ZW9mKGNlbGxzKSk7CisgICAgICAgICAgICAgIHdhaXRpbmdfYWNrID0gMTsKKyAgICAgICAgICAgICAgYXN5bmNXYWl0KDQwMCk7CisgICAgICAgICAgICAgIHFmaWxsKCk7CisKKyAgICAgICAgICAgICAgaWYgKHdhaXRpbmdfYWNrKSB7CisgICAgICAgICAgICAgICAgLyogbm8gcmVzcG9uc2UsIHNvIGl0IG11c3QgYmUgQkxUNDAgKi8KKyAgICAgICAgICAgICAgICBibGl0ZXN6ID0gNDA7CisgICAgICAgICAgICAgICAgYnJsLT5rZXlCaW5kaW5ncyA9ICI0MF9tMjBfbTQwIjsKKyAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBibGl0ZXN6ID0gc2l6ZW9mKGNlbGxzKTsKKyAgICAgICAgICAgICAgICBicmwtPmtleUJpbmRpbmdzID0gIjE4IjsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHJlcXVlc3RbXSA9IHswWDA1LCAwWDU3fTsJCQkvKiBjb2RlIHRvIHNlbmQgYmVmb3JlIEJyYWlsbGUgKi8KKworICAgICAgICAgICAgICBhc3luY1dhaXQoMjAwKTsKKyAgICAgICAgICAgICAgcWZsdXNoKCk7CisgICAgICAgICAgICAgIHNlcmlhbFdyaXRlRGF0YShCTF9zZXJpYWxEZXZpY2UsIHJlcXVlc3QsIHNpemVvZihyZXF1ZXN0KSk7CisgICAgICAgICAgICAgIHdhaXRpbmdfYWNrID0gMDsKKyAgICAgICAgICAgICAgYXN5bmNXYWl0KDIwMCk7CisgICAgICAgICAgICAgIHFmaWxsKCk7CisKKyAgICAgICAgICAgICAgaWYgKHFsZW4pIHsKKyAgICAgICAgICAgICAgICBjaGFyIHJlc3BvbnNlW3FsZW4gKyAxXTsKKyAgICAgICAgICAgICAgICBpbnQgbGVuZ3RoID0gMDsKKworICAgICAgICAgICAgICAgIGRvIHsKKyAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgYnl0ZSA9IHFiYXNlW3FvZmYgJSBRU1pdOworCisgICAgICAgICAgICAgICAgICBxb2ZmID0gKHFvZmYgKyAxKSAlIFFTWiwgLS1xbGVuOworICAgICAgICAgICAgICAgICAgaWYgKCFieXRlKSBicmVhazsKKyAgICAgICAgICAgICAgICAgIHJlc3BvbnNlW2xlbmd0aCsrXSA9IGJ5dGU7CisgICAgICAgICAgICAgICAgfSB3aGlsZSAocWxlbik7CisKKyAgICAgICAgICAgICAgICByZXNwb25zZVtsZW5ndGhdID0gMDsKKyAgICAgICAgICAgICAgICBsb2dNZXNzYWdlKExPR19JTkZPLCAiQnJhaWxsZSBMaXRlIGlkZW50aXR5OiAlcyIsIHJlc3BvbnNlKTsKKworICAgICAgICAgICAgICAgIGlmICgocmVzcG9uc2VbMF0gPT0gJ1gnKSAmJgorICAgICAgICAgICAgICAgICAgICAocmVzcG9uc2VbMV0gPT0gJyAnKSAmJgorICAgICAgICAgICAgICAgICAgICAocmVzcG9uc2VbMl0gPT0gJ0InKSkgeworICAgICAgICAgICAgICAgICAgYmxpdGVzeiA9IGF0b2koJnJlc3BvbnNlWzNdKTsKKyAgICAgICAgICAgICAgICAgIGlmIChibGl0ZXN6IDw9IDIwKSBiYXJjbWRzID0gJmJhcjFjbWRzOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBsb2dNZXNzYWdlKExPR19OT1RJQ0UsICJCcmFpbGxlIExpdGUgJWQgZGV0ZWN0ZWQuIiwgYmxpdGVzeik7CisgICAgICAgICAgICBicmwtPnRleHRDb2x1bW5zID0gYmxpdGVzejsJLyogaW5pdGlhbGlzZSBzaXplIG9mIGRpc3BsYXkgLSAqLworICAgICAgICAgICAgYnJsLT50ZXh0Um93cyA9IDE7CQkvKiBCcmFpbGxlIExpdGVzIGFyZSBzaW5nbGUgbGluZSBkaXNwbGF5cyAqLworCisgICAgICAgICAgICBtYWtlT3V0cHV0VGFibGUoZG90c1RhYmxlX0lTTzExNTQ4XzEpOworICAgICAgICAgICAgbWFrZUlucHV0VGFibGUoKTsKKworICAgICAgICAgICAgLyogQWxsb2NhdGUgc3BhY2UgZm9yIGJ1ZmZlcnMgKi8KKyAgICAgICAgICAgIGlmICgocHJldmRhdGEgPSBtYWxsb2MoYnJsLT50ZXh0Q29sdW1ucykpKSB7CisgICAgICAgICAgICAgIG1lbXNldChwcmV2ZGF0YSwgMCwgYnJsLT50ZXh0Q29sdW1ucyk7CisKKyAgICAgICAgICAgICAgaWYgKChyYXdkYXRhID0gbWFsbG9jKGJybC0+dGV4dENvbHVtbnMpKSkgeworICAgICAgICAgICAgICAgIHJldHVybiAxOworCisgICAgICAgICAgICAgIC8vZnJlZShyYXdkYXRhKTsKKyAgICAgICAgICAgICAgLy9yYXdkYXRhID0gTlVMTDsKKyAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBsb2dNYWxsb2NFcnJvcigpOworICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgZnJlZShwcmV2ZGF0YSk7CisgICAgICAgICAgICAgIHByZXZkYXRhID0gTlVMTDsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgIGxvZ01hbGxvY0Vycm9yKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGxvZ01lc3NhZ2UoTE9HX0RFQlVHLCAiQnJhaWxsZUxpdGUgbm90IHJlc3BvbmRpbmcuIik7CisgICAgICAgICAgfQorCisgICAgICAgICAgZnJlZShxYmFzZSk7CisgICAgICAgICAgcWJhc2UgPSBOVUxMOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgIGxvZ01hbGxvY0Vycm9yKCk7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9CisKKyAgICBzZXJpYWxDbG9zZURldmljZShCTF9zZXJpYWxEZXZpY2UpOworICAgIEJMX3NlcmlhbERldmljZSA9IE5VTEw7CisgIH0KKworICByZXR1cm4gMDsKK30KKworCitzdGF0aWMgdm9pZAorYnJsX2Rlc3RydWN0IChCcmFpbGxlRGlzcGxheSAqIGJybCkKK3sKKyAgaWYgKHJhd2RhdGEpIHsKKyAgICBmcmVlKHJhd2RhdGEpOworICAgIHJhd2RhdGEgPSBOVUxMOworICB9CisKKyAgaWYgKHByZXZkYXRhKSB7CisgICAgZnJlZShwcmV2ZGF0YSk7CisgICAgcHJldmRhdGEgPSBOVUxMOworICB9CisKKyAgaWYgKHFiYXNlKSB7CisgICAgZnJlZShxYmFzZSk7CisgICAgcWJhc2UgPSBOVUxMOworICB9CisKKyAgaWYgKEJMX3NlcmlhbERldmljZSkgeworICAgIHNlcmlhbENsb3NlRGV2aWNlKEJMX3NlcmlhbERldmljZSk7CisgICAgQkxfc2VyaWFsRGV2aWNlID0gTlVMTDsKKyAgfQorfQorCisKK3N0YXRpYyBpbnQKK2JybF93cml0ZVdpbmRvdyAoQnJhaWxsZURpc3BsYXkgKiBicmwsIGNvbnN0IHdjaGFyX3QgKnRleHQpCit7CisgIHNob3J0IGk7CQkJLyogbG9vcCBjb3VudGVyICovCisKKyAgLyogSWYgdGhlIGludG92ZXJyaWRlIGZsYWcgaXMgc2V0LCB0aGVuIGNhbGxzIHRvIHdyaXRlYnJsKCkgZnJvbSB0aGUgbWFpbgorICAgKiBtb2R1bGUgYXJlIGlnbm9yZWQsIGJlY2F1c2UgdGhlIGRpc3BsYXkgaXMgaW4gaW50ZXJuYWwgdXNlLgorICAgKiBUaGlzIGlzIGhpZ2hseSBhbnRpc29jaWFsIGJlaGF2aW91ciEKKyAgICovCisgIGlmIChpbnRvdmVycmlkZSkKKyAgICByZXR1cm4gMTsKKworICAvKiBGaXJzdCwgdGhlIGludGVybmFsIGN1cnNvcjogKi8KKyAgaWYgKGludF9jdXJzb3IpCisgICAgeworICAgICAgc3RhdGljIGludCB0aW1lciA9IDA7CQkvKiBmb3IgaW50ZXJuYWwgY3Vyc29yICovCisgICAgICB0aW1lciA9ICh0aW1lciArIDEpICUgKElOVF9DU1JfU1BFRUQgKiAyKTsKKyAgICAgIGJybC0+YnVmZmVyW2ludF9jdXJzb3IgLSAxXSA9ICh0aW1lciA8IElOVF9DU1JfU1BFRUQpPworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoQlJMX0RPVDEgfCBCUkxfRE9UMiB8IEJSTF9ET1QzIHwgQlJMX0RPVDcpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoQlJMX0RPVDQgfCBCUkxfRE9UNSB8IEJSTF9ET1Q2IHwgQlJMX0RPVDgpOworICAgIH0KKworICAvKiBOZXh0IHdlIG11c3QgaGFuZGxlIGRpc3BsYXkgcmV2ZXJzYWw6ICovCisgIGlmIChyZXZlcnNlX2tiZCkgeworICAgIGZvciAoaT0wOyBpPGJsaXRlc3o7IGkrPTEpIHsKKyAgICAgIHJhd2RhdGFbaV0gPSB0cmFuc2xhdGVJbnB1dENlbGwoYnJsLT5idWZmZXJbYmxpdGVzeiAtIDEgLSBpXSk7CisgICAgfQorICB9IGVsc2UgeworICAgIG1lbWNweShyYXdkYXRhLCBicmwtPmJ1ZmZlciwgYmxpdGVzeik7CisgIH0KKworICAvKiBPbmx5IHJlZnJlc2ggZGlzcGxheSBpZiB0aGUgZGF0YSBoYXMgY2hhbmdlZDogKi8KKyAgaWYgKGNlbGxzSGF2ZUNoYW5nZWQocHJldmRhdGEsIHJhd2RhdGEsIGJsaXRlc3osIE5VTEwsIE5VTEwsIE5VTEwpKQorICAgIHsKKyAgICAgIC8qIERvdCBtYXBwaW5nIGZyb20gc3RhbmRhcmQgdG8gQnJhaWxsZUxpdGU6ICovCisgICAgICB0cmFuc2xhdGVPdXRwdXRDZWxscyhyYXdkYXRhLCByYXdkYXRhLCBibGl0ZXN6KTsKKworICAgICAgLyogRmlyc3Qgd2UgcHJvY2VzcyBhbnkgcGVuZGluZyBrZXlzdHJva2VzLCBqdXN0IGluIGNhc2UgYW55IG9mIHRoZW0KKyAgICAgICAqIGFyZSBeZSAuLi4KKyAgICAgICAqLworICAgICAgd2FpdGluZ19hY2sgPSAwOwkJLyogTm90IHJlYWxseSBuZWNlc3NhcnksIGJ1dCAuLi4gKi8KKyAgICAgIHFmaWxsICgpOworCisgICAgICAvKiBOZXh0IHdlIHNlbmQgdGhlIF5lRCBzZXF1ZW5jZSwgYW5kIHdhaXQgZm9yIGFuIEFDSyAqLworICAgICAgd2FpdGluZ19hY2sgPSAxOworICAgICAgLyogc2VuZCB0aGUgXkVELi4uICovCisgICAgICB3cml0ZV9wcmVicmwoKTsKKyAgICAgIGlmICghYXdhaXRfYWNrKCkpIHJldHVybiAxOworCisgICAgICAvKiBPSywgbm93IHdlJ2xsIHN1cHBvc2Ugd2UncmUgYWxsIGNsZWFyIHRvIHNlbmQgQnJhaWxsZSBkYXRhLiAqLworICAgICAgc2VyaWFsV3JpdGVEYXRhKEJMX3NlcmlhbERldmljZSwgcmF3ZGF0YSwgYmxpdGVzeik7CisgICAgICBhd2FpdF9hY2soKTsKKyAgICB9CisgIHJldHVybiAxOworfQorCisKK3N0YXRpYyBpbnQKK2JybF9yZWFkQ29tbWFuZCAoQnJhaWxsZURpc3BsYXkgKmJybCwgS2V5VGFibGVDb21tYW5kQ29udGV4dCBjb250ZXh0KQoreworICBzdGF0aWMgZW51bSB7CisgICAgU1RfTk9STUFMLAkvKiB0cmFuc3BhcmVudCAqLworICAgIFNUX0NVUlNPUiwJLyogcG9zaXRpb24gaW50ZXJuYWwgY3Vyc29yICovCisgICAgU1RfUkVQRUFULAkvKiBzZXQgcmVwZWF0IGNvdW50ICovCisgICAgU1RfQ09ORklHCS8qIHByZWZlcmVuY2VzIG9wdGlvbnMgKi8KKyAgfSBzdGF0ZSA9IFNUX05PUk1BTDsKKyAgc3RhdGljIGludCByZXBlYXQgPSAwOwkJLyogcmVwZWF0IGNvdW50IGZvciBjb21tYW5kICovCisgIHN0YXRpYyBpbnQgcmVwZWF0TmV4dCA9IDA7IC8qIGZsYWcgdG8gaW5kaWNhdGUgIHdoZXRoZXIgMCB3ZSByZXBlYXQgdGhlCisJCQkJc2FtZSBjb21tYW5kIG9yIDEgd2UgZ2V0IHRoZSBuZXh0IGNvbW1hbmQKKwkJCQlhbmQgcmVwZWF0IHRoYXQuICovCisgIHN0YXRpYyBpbnQgaG9sZCwgc2hpZnQsIHNoaWZ0bGNrLCBjdHJsLCBtZXRhOworI2lmZGVmIFVTRV9URVhUVFJBTlMKKyAgc3RhdGljIGludCBkb3Q4c2hpZnQ7CisjZW5kaWYgLyogVVNFX1RFWFRUUkFOUyAqLworICBzdGF0aWMgYmxrZXkga2V5OworICBzdGF0aWMgY2hhciBvdXRtc2dbNDFdOworICBpbnQgdGVtcCA9IEJSTF9DTURfTk9PUDsKKworIGFnYWluOgorICBpZihyZXBlYXROZXh0IHx8IHJlcGVhdCA9PSAwKSB7CisgICAgLyogUHJvY2VzcyBhbnkgbmV3IGtleXN0cm9rZXM6ICovCisgICAgcWZpbGwgKCk7CisgICAgaWYgKHFnZXQgKCZrZXkpID09IEVPRikJLyogbm8ga2V5cyB0byBwcm9jZXNzICovCisgICAgICByZXR1cm4gRU9GOworICAgIHJlcGVhdE5leHQgPSAwOworICB9CisgIGlmKHJlcGVhdD4wKQorICAgIHJlcGVhdC0tOworCisgIC8qIE91ciBvdmVyYWxsIGJlaGF2aW91ciBkZXBlbmRzIG9uIHRoZSBzdGF0ZSB2YXJpYWJsZSAoc2VlIGFib3ZlKS4gKi8KKyAgc3dpdGNoIChzdGF0ZSkKKyAgICB7CisgICAgY2FzZSBTVF9OT1JNQUw6CQkJLyogdHJhbnNwYXJlbnQgKi8KKyAgICAgIC8qIEZpcnN0IHdlIGRlYWwgd2l0aCBleHRlcm5hbCBjb21tYW5kczogKi8KKyAgICAgIGRvCisJeworCSAgLyogaWYgaXQncyBub3QgYW4gZXh0ZXJuYWwgY29tbWFuZCwgZ28gb24gKi8KKwkgIGlmICgha2V5LmNtZCkKKwkgICAgYnJlYWs7CisKKwkgIC8qIGlmIGFkdmFuY2UgYmFyLCByZXR1cm4gd2l0aCBjb3JyZXNwb25kaW5nIGNvbW1hbmQgKi8KKwkgIGlmIChrZXkuYXNjID09IDApCisJICAgIHJldHVybiBrZXkuY21kOworCisJICAvKiBJIHRob3VnaHQgSSB3YXMgc21hcnQgd2hlbiBJIHN1Z2dlc3RlZCB0byByZW1vdmUgQ01EX0NVVF9FTkQuCisJICAgICBXZWxsIG5vdyB0aGVyZSdzIHRoaXMgbmFzdHkgZXhjZXB0aW9uOiB0aGUgY29tbWFuZCBvZmZzZXQKKwkgICAgIGRlcGVuZHMgb24gdGhlIGRpc3BsYXkgc2l6ZSEgKi8KKwkgIGlmKGtleS5jbWQgPT0gQlJMX0NNRF9CTEsoQ09QWV9SRUNUKSB8fCBrZXkuY21kID09IEJSTF9DTURfQkxLKENPUFlfTElORSkpCisJICAgIGtleS5jbWQgKz0gYmxpdGVzei0xOworCisJICBpZihrZXkuc3BjYmFyICYmIChrZXkuY21kICZCUkxfTVNLX0JMSykgPT0gQlJMX0NNRF9CTEsoUEFTU0tFWSkpIHsKKyAgICAgICAgICAvKgorCSAgICBpZigha2JlbXUpCisJICAgICAgcmV0dXJuIEVPRjsKKyAgICAgICAgICAqLworCSAgICBpZiAoIXNoaWZ0bGNrKQorCSAgICAgIHNoaWZ0ID0gMDsKKwkgICAgY3RybCA9IG1ldGEgPSAwOworI2lmZGVmIFVTRV9URVhUVFJBTlMKKwkgICAgZG90OHNoaWZ0ID0gMDsKKyNlbmRpZiAvKiBVU0VfVEVYVFRSQU5TICovCisJICB9CisKKwkgIC8qIGFsd2F5cyBPSyBpZiBjaG9yZGVkICovCisJICBpZiAoa2V5LnNwY2JhcikKKwkgICAgcmV0dXJuIGtleS5jbWQ7CisKKwkgIC8qIGtiZW11IGNvdWxkIGJlIG9uLCB0aGVuIGdvIG9uICovCisJICBpZiAoa2JlbXUgJiYgY29udGV4dCA9PSBLVEJfQ1RYX0RFRkFVTFQpCisJICAgIGJyZWFrOworCisJICAvKiBpZiBpdCdzIGEgZGFuZ2Vyb3VzIGNvbW1hbmQgaXQgc2hvdWxkIGhhdmUgYmVlbiBjaG9yZGVkICovCisJICBpZiAoZGFuZ2NtZFsoa2V5LnJhdyAmIDB4MzgpID4+IDNdICYgKDEgPDwgKGtleS5yYXcgJiAweDA3KSkpCisJICAgIGJyZWFrOworCisJICAvKiBmaW5hbGx5IHdlIGFyZSBPSyAqLworCSAgcmV0dXJuIGtleS5jbWQ7CisJfQorICAgICAgd2hpbGUgKDApOworCisgICAgICAvKiBOZXh0LCBpbnRlcm5hbCBjb21tYW5kczogKi8KKyAgICAgIGlmIChrZXkuc3BjYmFyKQorCXN3aXRjaCAoa2V5LmFzYykKKwkgIHsKKwkgIGNhc2UgQkxUX0tCRU1VOgkvKiBzZXQga2V5Ym9hcmQgZW11bGF0aW9uICovCisJICAgIGtiZW11IF49IDE7CisJICAgIHNoaWZ0ID0gc2hpZnRsY2sgPSBjdHJsID0gbWV0YSA9IDA7CisjaWZkZWYgVVNFX1RFWFRUUkFOUworCSAgICBkb3Q4c2hpZnQgPSAwOworI2VuZGlmIC8qIFVTRV9URVhUVFJBTlMgKi8KKwkgICAgaWYoa2JlbXUpCisJICAgICAgbWVzc2FnZSAoTlVMTCwgZ2V0dGV4dCgia2V5Ym9hcmQgZW11IG9uIiksIE1TR19TSUxFTlQpOworCSAgICBlbHNlIG1lc3NhZ2UgKE5VTEwsIGdldHRleHQoImtleWJvYXJkIGVtdSBvZmYiKSwgTVNHX1NJTEVOVCk7CisJICAgIHJldHVybiBCUkxfQ01EX05PT1A7CisJICBjYXNlIEJMVF9ST1RBVEU6CS8qIHJvdGF0ZSBCcmFpbGxlIExpdGUgYnkgMTgwIGRlZ3JlZXMgKi8KKwkgICAgcmV2ZXJzZV9rYmQgXj0gMTsKKwkgICAgcmV0dXJuIEJSTF9DTURfTk9PUDsKKwkgIGNhc2UgQkxUX1BPU0lUTjoJLyogcG9zaXRpb24gaW50ZXJuYWwgY3Vyc29yICovCisJICAgIGludF9jdXJzb3IgPSBibGl0ZXN6IC8gMjsKKwkgICAgc3RhdGUgPSBTVF9DVVJTT1I7CisJICAgIHJldHVybiBCUkxfQ01EX05PT1A7CisJICBjYXNlIEJMVF9SRVBFQVQ6CS8qIHNldCByZXBlYXQgY291bnQgKi8KKwkgICAgaG9sZCA9IDA7CisJICAgIHNucHJpbnRmIChvdXRtc2csIHNpemVvZihvdXRtc2cpLCAiJXM6IiwgZ2V0dGV4dCgicmVwZWF0IGNvdW50IikpOworCSAgICBtZXNzYWdlIChOVUxMLCBvdXRtc2csIE1TR19TSUxFTlQgfCBNU0dfTk9ERUxBWSk7CisJICAgIGludG92ZXJyaWRlID0gMTsKKwkgICAgc3RhdGUgPSBTVF9SRVBFQVQ7CisJICAgIHJldHVybiBCUkxfQ01EX05PT1A7CisJICBjYXNlIEJMVF9DT05GSUc6CS8qIGNvbmZpZ3VyYXRpb24gbWVudSAqLworCSAgICBzbnByaW50ZiAob3V0bXNnLCBzaXplb2Yob3V0bXNnKSwgIiVzPyBbbS9zL3Ivel0iLCBnZXR0ZXh0KCJjb25maWciKSk7CisJICAgIG1lc3NhZ2UgKE5VTEwsIG91dG1zZywgTVNHX1NJTEVOVCB8IE1TR19OT0RFTEFZKTsKKwkgICAgaW50b3ZlcnJpZGUgPSAxOworCSAgICBzdGF0ZSA9IFNUX0NPTkZJRzsKKwkgICAgcmV0dXJuIEJSTF9DTURfTk9PUDsKKwkgIGNhc2UgJyAnOgkJLyogcHJhY3RpY2FsIGV4Y2VwdGlvbiBmb3IgKi8KKwkgICAgLyogSWYga2V5Ym9hcmQgbW9kZSBvZmYsIHNwYWNlIGJhciA9PSBCUkxfQ01EX0hPTUUgKi8KKwkgICAgaWYgKCFrYmVtdSB8fCBjb250ZXh0ICE9IEtUQl9DVFhfREVGQVVMVCkKKwkgICAgICByZXR1cm4gQlJMX0NNRF9IT01FOworCSAgfQorCisgICAgICAvKiBjaGVjayBmb3Igcm91dGluZyBrZXlzICovCisgICAgICBpZiAoa2V5LnJvdXRpbmcpCisJcmV0dXJuIChCUkxfQ01EX0JMSyhST1VURSkgKyBrZXkucm91dGluZyAtIDEpOworCisgICAgICBpZiAoIWtiZW11KQorCXJldHVybiBCUkxfQ01EX05PT1A7CisKKyAgICAgIC8qIE5vdyBrYmVtdSBpcyBkZWZpbml0ZWx5IG9uLiAqLworICAgICAgc3dpdGNoIChrZXkucmF3ICYgMHhDMCkKKwl7CisJY2FzZSAweDQwOgkJLyogZG90IDcgKi8KKwkgIHNoaWZ0ID0gMTsKKwkgIGJyZWFrOworCWNhc2UgMHhDMDoJCS8qIGRvdCA3OCAqLworCSAgY3RybCA9IDE7CisJICBicmVhazsKKwljYXNlIDB4ODA6CQkvKiBkb3QgOCAqLworI2lmZGVmIFVTRV9URVhUVFJBTlMKKwkgIGRvdDhzaGlmdCA9IDE7CisjZWxzZSAvKiBVU0VfVEVYVFRSQU5TICovCisJICBtZXRhID0gMTsKKyNlbmRpZiAvKiBVU0VfVEVYVFRSQU5TICovCisJICBicmVhazsKKwl9CisKKyAgICAgIGlmIChrZXkuc3BjYmFyICYmIGtleS5hc2MgIT0gJyAnKQorCXN3aXRjaCAoa2V5LmFzYykKKwkgIHsKKwkgIGNhc2UgQkxUX1VQQ0FTRToJLyogdXBwZXIgY2FzZSBuZXh0ICovCisJICAgIGlmIChzaGlmdCkKKwkgICAgICBzaGlmdGxjayA9IDE7CisJICAgIGVsc2UKKwkgICAgICBzaGlmdCA9IDE7CisJICAgIHJldHVybiBCUkxfQ01EX05PT1A7CisJICBjYXNlIEJMVF9VUENPRkY6CS8qIGNhbmNlbCB1cHBlciBjYXNlICovCisJICAgIHNoaWZ0ID0gc2hpZnRsY2sgPSAwOworCSAgICByZXR1cm4gQlJMX0NNRF9OT09QOworCSAgY2FzZSBCTFRfQ1RSTDoJLyogY29udHJvbCBuZXh0ICovCisJICAgIGN0cmwgPSAxOworCSAgICByZXR1cm4gQlJMX0NNRF9OT09QOworI2lmZGVmIFVTRV9URVhUVFJBTlMKKwkgIGNhc2UgQkxUX0RPVDhTSElGVDoJLyogYWRkIGRvdCA4IHRvIG5leHQgcGF0dGVybiAqLworCSAgICBkb3Q4c2hpZnQgPSAxOworCSAgICByZXR1cm4gQlJMX0NNRF9OT09QOworI2VuZGlmIC8qIFVTRV9URVhUVFJBTlMgKi8KKwkgIGNhc2UgQkxUX01FVEE6CS8qIG1ldGEgbmV4dCAqLworCSAgICBtZXRhID0gMTsKKwkgICAgcmV0dXJuIEJSTF9DTURfTk9PUDsKKwkgIGNhc2UgQkxUX0FCT1JUOgkvKiBhYm9ydCAtIHF1aXQga2V5Ym9hcmQgZW11bGF0aW9uICovCisJICAgIGtiZW11ID0gMDsKKwkgICAgbWVzc2FnZSAoTlVMTCwgZ2V0dGV4dCgia2V5Ym9hcmQgZW11IG9mZiIpLCBNU0dfU0lMRU5UKTsKKwkgICAgcmV0dXJuIEJSTF9DTURfTk9PUDsKKwkgIGRlZmF1bHQ6CQkvKiB1bnJlY29nbmlzZWQgY29tbWFuZCAqLworCSAgICBzaGlmdCA9IHNoaWZ0bGNrID0gY3RybCA9IG1ldGEgPSAwOworI2lmZGVmIFVTRV9URVhUVFJBTlMKKwkgICAgZG90OHNoaWZ0ID0gMDsKKyNlbmRpZiAvKiBVU0VfVEVYVFRSQU5TICovCisJICAgIHJldHVybiBCUkxfQ01EX05PT1A7CisJICB9CisKKyAgICAgIC8qIE9LLCBpdCdzIGFuIG9yZGluYXJ5IChub24tY2hvcmRlZCkga2V5c3Ryb2tlLCBhbmQga2JlbXUgaXMgb24uICovCisjaWZuZGVmIFVTRV9URVhUVFJBTlMKKyAgICAgIGlmIChjdHJsICYmIGtleS5hc2MgPj0gOTYpCisJLyogb2xkIGNvZGUgd2FzIChrZXkuYXNjICYgMHgxZikgKi8KKwl0ZW1wID0gQlJMX0NNRF9CTEsoUEFTU0NIQVIpIHwga2V5LmFzYyB8IEJSTF9GTEdfSU5QVVRfQ09OVFJPTDsKKyAgICAgIGVsc2UgaWYgKG1ldGEgJiYga2V5LmFzYyA+PSA5NikKKwl0ZW1wID0gQlJMX0NNRF9CTEsoUEFTU0NIQVIpIHwga2V5LmFzYyB8IEJSTF9GTEdfSU5QVVRfTUVUQTsKKyAgICAgIGVsc2UgaWYgKHNoaWZ0ICYmIChrZXkuYXNjICYgMHg0MCkpCisJLyogb2xkIGNvZGUgd2FzIChrZXkuYXNjICYgMHhkZikgKi8KKwl0ZW1wID0gQlJMX0NNRF9CTEsoUEFTU0NIQVIpIHwga2V5LmFzYyB8IEJSTF9GTEdfSU5QVVRfU0hJRlQ7CisgICAgICBlbHNlCisJdGVtcCA9IEJSTF9DTURfQkxLKFBBU1NDSEFSKSB8IGtleS5hc2M7CisjZWxzZSAvKiBVU0VfVEVYVFRSQU5TICovCisgICAgICB0ZW1wID0gQlJMX0NNRF9CTEsoUEFTU0RPVFMpIHwKKwkoa2V5c190b19kb3RzW2tleS5yYXcgJjB4M0ZdCisJIHwgKChtZXRhKSA/IEJSTF9GTEdfSU5QVVRfTUVUQSA6IDApCisJIHwgKChjdHJsKSA/IChCUkxfRE9UNyB8IEJSTF9ET1Q4KSA6IAorCSAgICAoc2hpZnQpID8gQlJMX0RPVDcgOiAKKwkgICAgKGRvdDhzaGlmdCkgPyBCUkxfRE9UOCA6IDApKTsKKyNlbmRpZiAvKiBVU0VfVEVYVFRSQU5TICovCisgICAgICBpZiAoIXNoaWZ0bGNrKQorCXNoaWZ0ID0gMDsKKyAgICAgIGN0cmwgPSBtZXRhID0gMDsKKyNpZmRlZiBVU0VfVEVYVFRSQU5TCisgICAgICBkb3Q4c2hpZnQgPSAwOworI2VuZGlmIC8qIFVTRV9URVhUVFJBTlMgKi8KKyAgICAgIG91dG1zZ1swXSA9IDA7CisgICAgICByZXR1cm4gdGVtcDsKKworICAgIGNhc2UgU1RfQ1VSU09SOgkJCS8qIHBvc2l0aW9uIGludGVybmFsIGN1cnNvciAqLworICAgICAgc3dpdGNoIChrZXkuY21kKQorCXsKKwljYXNlIEJSTF9DTURfSE9NRToJCS8qIGdvIHRvIG1pZGRsZSAqLworCSAgaW50X2N1cnNvciA9IGJsaXRlc3ogLyAyOworCSAgYnJlYWs7CisJY2FzZSBCUkxfQ01EX0xOQkVHOgkvKiBiZWdpbm5pbmcgb2YgZGlzcGxheSAqLworCSAgaW50X2N1cnNvciA9IDE7CisJICBicmVhazsKKwljYXNlIEJSTF9DTURfTE5FTkQ6CS8qIGVuZCBvZiBkaXNwbGF5ICovCisJICBpbnRfY3Vyc29yID0gYmxpdGVzejsKKwkgIGJyZWFrOworCWNhc2UgQlJMX0NNRF9GV0lOTFQ6CS8qIHF1YXJ0ZXIgbGVmdCAqLworCSAgaW50X2N1cnNvciA9IE1BWCAoaW50X2N1cnNvciAtIGJsaXRlc3ogLyA0LCAxKTsKKwkgIGJyZWFrOworCWNhc2UgQlJMX0NNRF9GV0lOUlQ6CS8qIHF1YXJ0ZXIgcmlnaHQgKi8KKwkgIGludF9jdXJzb3IgPSBNSU4gKGludF9jdXJzb3IgKyBibGl0ZXN6IC8gNCwgYmxpdGVzeik7CisJICBicmVhazsKKwljYXNlIEJSTF9DTURfQ0hSTFQ6CS8qIG9uZSBjaGFyYWN0ZXIgbGVmdCAqLworCSAgaWYgKGludF9jdXJzb3IgPiAxKQorCSAgICBpbnRfY3Vyc29yLS07CisJICBicmVhazsKKwljYXNlIEJSTF9DTURfQ0hSUlQ6CS8qIG9uZSBjaGFyYWN0ZXIgcmlnaHQgKi8KKwkgIGlmIChpbnRfY3Vyc29yIDwgYmxpdGVzeikKKwkgICAgaW50X2N1cnNvcisrOworCSAgYnJlYWs7CisJY2FzZSBCUkxfQ01EX0JMSyhST1VURSk6CS8qIHJvdXRlIGN1cnNvciAqLworCSAgaWYgKGtleS5zcGNiYXIpCisJICAgIHsKKwkgICAgICB0ZW1wID0gQlJMX0NNRF9CTEsoUk9VVEUpICsgaW50X2N1cnNvciAtIDE7CisJICAgICAgaW50X2N1cnNvciA9IDA7CisJICAgICAgc3RhdGUgPSBTVF9OT1JNQUw7CisJICAgIH0KKwkgIHJldHVybiB0ZW1wOworCWNhc2UgQlJMX0NNRF9CTEsoQ0xJUF9ORVcpOgkvKiBiZWdpbiBjb3B5ICovCisJY2FzZSBCUkxfQ01EX0JMSyhDTElQX0FERCk6CisJICBpZiAoa2V5LnNwY2JhcikKKwkgICAgeworCSAgICAgIHRlbXAgPSBrZXkuY21kICsgaW50X2N1cnNvciAtIDE7CisJICAgICAgaW50X2N1cnNvciA9IDA7CisJICAgICAgc3RhdGUgPSBTVF9OT1JNQUw7CisJICAgIH0KKwkgIHJldHVybiB0ZW1wOworCWNhc2UgQlJMX0NNRF9CTEsoQ09QWV9SRUNUKToJLyogZW5kIGNvcHkgKi8KKwljYXNlIEJSTF9DTURfQkxLKENPUFlfTElORSk6CisJICBpZiAoa2V5LnNwY2JhcikKKwkgICAgeworCSAgICAgIHRlbXAgPSBrZXkuY21kICsgaW50X2N1cnNvciAtIDE7CisJICAgICAgaW50X2N1cnNvciA9IDA7CisJICAgICAgc3RhdGUgPSBTVF9OT1JNQUw7CisJICAgIH0KKwkgIHJldHVybiB0ZW1wOworCWNhc2UgQlJMX0NNRF9ESVNQTUQ6IC8qIGF0dHJpYnV0ZSBpbmZvICovCisJICB0ZW1wID0gQlJMX0NNRF9CTEsoREVTQ0NIQVIpICsgaW50X2N1cnNvciAtIDE7CisJICBpbnRfY3Vyc29yID0gMDsKKwkgIHN0YXRlID0gU1RfTk9STUFMOworCSAgcmV0dXJuIHRlbXA7CisJZGVmYXVsdDoKKwkgIGlmIChrZXkuYXNjID09IEJMVF9BQk9SVCkgeworICAgICAgICAgICAgLyogY2FuY2VsIGN1cnNvciBwb3NpdGlvbmluZyAqLworCSAgICBpbnRfY3Vyc29yID0gMDsKKwkgICAgc3RhdGUgPSBTVF9OT1JNQUw7CisgICAgICAgICAgfQorCSAgYnJlYWs7CisJfQorICAgICAgaWYgKGtleS5yb3V0aW5nKQorCWludF9jdXJzb3IgPSBrZXkucm91dGluZzsKKyAgICAgIHJldHVybiBCUkxfQ01EX05PT1A7CisgICAgY2FzZSBTVF9SRVBFQVQ6CQkJLyogc2V0IHJlcGVhdCBjb3VudCAqLworICAgICAgaWYgKGtleS5hc2MgPj0gJzAnICYmIGtleS5hc2MgPD0gJzknKQorCXsKKwkgIGhvbGQgPSAoaG9sZCAqIDEwICsga2V5LmFzYyAtICcwJykgJSAxMDA7CisJICBpZiAoaG9sZCkgeworCSAgICBzbnByaW50ZiAob3V0bXNnLCBzaXplb2Yob3V0bXNnKSwgIiVzOiAlZCIsIGdldHRleHQoInJlcGVhdCBjb3VudCIpLCBob2xkKTsKKwkgIH0gZWxzZSB7CisgICAgICAgICAgICBzbnByaW50ZiAob3V0bXNnLCBzaXplb2Yob3V0bXNnKSwgIiVzOiAiLCBnZXR0ZXh0KCJyZXBlYXQgY291bnQiKSk7CisgICAgICAgICAgfQorCSAgaW50b3ZlcnJpZGUgPSAwOworCSAgbWVzc2FnZSAoTlVMTCwgb3V0bXNnLCBNU0dfU0lMRU5UIHwgTVNHX05PREVMQVkpOworCSAgaW50b3ZlcnJpZGUgPSAxOworCX0KKyAgICAgIGVsc2UgaWYgKGtleS5yb3V0aW5nKQorCXsKKwkgIGhvbGQgPSBrZXkucm91dGluZyArMTsKKwkgIHNucHJpbnRmIChvdXRtc2csIHNpemVvZihvdXRtc2cpLCAiJXM6ICVkIiwgZ2V0dGV4dCgicmVwZWF0IGNvdW50IiksIGhvbGQpOworCSAgaW50b3ZlcnJpZGUgPSAwOworCSAgbWVzc2FnZSAoTlVMTCwgb3V0bXNnLCBNU0dfU0lMRU5UIHwgTVNHX05PREVMQVkpOworCSAgaW50b3ZlcnJpZGUgPSAxOworCX0KKyAgICAgIGVsc2UgeworCWludG92ZXJyaWRlID0gMDsKKwlvdXRtc2dbMF0gPSAwOworCXN0YXRlID0gU1RfTk9STUFMOworCWlmIChob2xkID4gMCkgeworCSAgaWYgKGtleS5hc2MgPT0gU1dJVENIVlRfTkVYVCB8fCBrZXkuYXNjID09IFNXSVRDSFZUX1BSRVYpCisJICAgIC8qIFRoYXQncyBjaG9yZGVkIG9yIG5vdC4uLiAqLworCSAgICByZXR1cm4gQlJMX0NNRF9CTEsoU1dJVENIVlQpICsgKGhvbGQtMSk7CisJICBlbHNlIGlmIChrZXkuYXNjID09IE9fU0VUTUFSSykKKwkgICAgcmV0dXJuIEJSTF9DTURfQkxLKFNFVE1BUkspICsgKGhvbGQtMSk7CisJICBlbHNlIGlmIChrZXkuYXNjID09IE9fR09UT01BUkspCisJICAgIHJldHVybiBCUkxfQ01EX0JMSyhHT1RPTUFSSykgKyAoaG9sZC0xKTsKKwkgIGVsc2UgaWYgKGtleS5zcGNiYXIpCQkvKiBjaG9yZGVkICovCisJICAgIHN3aXRjaCAoa2V5LmFzYykKKwkgICAgICB7CisJICAgICAgY2FzZSBCTFRfRU5EQ01EOgkvKiBzZXQgcmVwZWF0IGNvdW50ICovCisJCWlmIChob2xkID4gMSkgeworCQkgIC8qIHJlcGVhdCBuZXh0IGNvbW1hbmQgKi8KKwkJICByZXBlYXQgPSBob2xkOworCQkgIHJlcGVhdE5leHQgPSAxOworCQl9CisJCS8qIGZhbGwgdGhyb3VnaCAqLworCSAgICAgIGNhc2UgQkxUX0FCT1JUOgkvKiBhYm9ydCBvciBlbmRjbWQgKi8KKwkJcmV0dXJuIEJSTF9DTURfTk9PUDsKKwkgICAgICB9CisJICAvKiBpZiB0aGUga2V5IGlzIGFueSBvdGhlciwgc3RhcnQgcmVwZWF0aW5nIGl0LiAqLworCSAgcmVwZWF0ID0gaG9sZDsKKwkgIGdvdG8gYWdhaW47CisJfQorICAgICAgfQorICAgICAgcmV0dXJuIEJSTF9DTURfTk9PUDsKKyAgICBjYXNlIFNUX0NPTkZJRzoJCQkvKiBwcmVmZXJlbmNlcyBvcHRpb25zICovCisgICAgICBzd2l0Y2ggKGtleS5hc2MpCisJeworCWNhc2UgJ20nOgkJLyogcHJlZmVyZW5jZXMgbWVudSAqLworCSAgaW50b3ZlcnJpZGUgPSAwOworCSAgc3RhdGUgPSBTVF9OT1JNQUw7CisJICByZXR1cm4gQlJMX0NNRF9QUkVGTUVOVTsKKwljYXNlICdzJzoJCS8qIHNhdmUgcHJlZmVyZW5jZXMgKi8KKwkgIGludG92ZXJyaWRlID0gMDsKKwkgIHN0YXRlID0gU1RfTk9STUFMOworCSAgcmV0dXJuIEJSTF9DTURfUFJFRlNBVkU7CisJY2FzZSAncic6CQkvKiByZXN0b3JlIHNhdmVkIHByZWZlcmVuY2VzICovCisJICBpbnRvdmVycmlkZSA9IDA7CisJICBzdGF0ZSA9IFNUX05PUk1BTDsKKwkgIHJldHVybiBCUkxfQ01EX1BSRUZMT0FEOworCWNhc2UgQkxUX0FCT1JUOgkvKiBhYm9ydCAqLworCSAgaW50b3ZlcnJpZGUgPSAwOworCSAgc3RhdGUgPSBTVF9OT1JNQUw7CisJZGVmYXVsdDoJCS8qIGluIGFueSBjYXNlICovCisJICByZXR1cm4gQlJMX0NNRF9OT09QOworCX0KKyAgICB9CisKKyAgLyogV2Ugc2hvdWxkIG5ldmVyIHJlYWNoIHRoaXMgcG9pbnQgLi4uICovCisgIHJldHVybiBFT0Y7Cit9CmRpZmYgLS1naXQgYS9Ecml2ZXJzL0JyYWlsbGUvQnJhaWxsZUxpdGUvYnJhaWxsZS5oIGIvRHJpdmVycy9CcmFpbGxlL0JyYWlsbGVMaXRlL2JyYWlsbGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNzcwZmJlCi0tLSAvZGV2L251bGwKKysrIGIvRHJpdmVycy9CcmFpbGxlL0JyYWlsbGVMaXRlL2JyYWlsbGUuaApAQCAtMCwwICsxLDM3IEBACisvKgorICogQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyAqICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyAqCisgKiBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorICoKKyAqIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyAqCisgKiBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisgKi8KKworLyogQnJhaWxsZUxpdGUvYnJhaWxsZS5oIC0gQ29uZmlndXJhYmxlIGRlZmluaXRpb25zIGZvciB0aGUgQnJhaWxsZSBMaXRlIGRyaXZlcgorICogTi4gTmFpciwgNiBTZXB0ZW1iZXIgMTk5OAorICoKKyAqIEVkaXQgYXMgbmVjZXNzYXJ5IGZvciB5b3VyIHN5c3RlbS4KKyAqLworCisvKiB1c2VkIGJ5IHNwZWVjaC5jICovCisjaW5jbHVkZSAiaW9fc2VyaWFsLmgiCitleHRlcm4gU2VyaWFsRGV2aWNlICpCTF9zZXJpYWxEZXZpY2U7CisKKy8qIFdlIGFsd2F5cyBleHBlY3QgOCBkYXRhIGJpdHMsIG5vIHBhcml0eSwgMSBzdG9wIGJpdC4gKi8KKy8qIFNlbGVjdCBiYXVkcmF0ZSB0byB1c2UgKi8KKyNkZWZpbmUgQkFVRFJBVEUgOTYwMAorLy8jZGVmaW5lIEJBVURSQVRFIDM4NDAwCisKKy8qIERlZmluZSB0aGUgZm9sbG93aW5nIGZvciBkb3RzIHRvIGNoYXJhY3RlciBtYXBwaW5nIGZvciBpbnB1dCB0byB1c2UgCisgICB0aGUgc2FtZSAodXNlci1kZWZpbmVkKSB0YWJsZSBhcyBpcyB1c2VkIGZvciBvdXRwdXQsIGluc3RlYWQgb2YgdGhlCisgICBoYXJkLWNvZGVkIFVTIHRhYmxlLiAqLworI2RlZmluZSBVU0VfVEVYVFRSQU5TCmRpZmYgLS1naXQgYS9Ecml2ZXJzL0JyYWlsbGUvQnJhaWxsZU1lbW8vTWFrZWZpbGUuaW4gYi9Ecml2ZXJzL0JyYWlsbGUvQnJhaWxsZU1lbW8vTWFrZWZpbGUuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmQ1YjNkYgotLS0gL2Rldi9udWxsCisrKyBiL0RyaXZlcnMvQnJhaWxsZS9CcmFpbGxlTWVtby9NYWtlZmlsZS5pbgpAQCAtMCwwICsxLDI4IEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisjICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorIworIyBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisjCisjIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisjCisjIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyMgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorIyBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyMKKyMgV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworIworIyBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworRFJJVkVSX0NPREUgPSBtbQorRFJJVkVSX05BTUUgPSBCcmFpbGxlTWVtbworRFJJVkVSX1VTQUdFID0gUG9ja2V0ICgxNiksIFNtYXJ0ICgxNiksIDMyLCA0MAorRFJJVkVSX1ZFUlNJT04gPSAKK0RSSVZFUl9ERVZFTE9QRVJTID0gRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPgoraW5jbHVkZSAkKFNSQ19UT1ApYnJhaWxsZS5taworCiticmFpbGxlLiRPOgorCSQoQ0MpICQoQlJMX0NGTEFHUykgLWMgJChTUkNfRElSKS9icmFpbGxlLmMKKwpkaWZmIC0tZ2l0IGEvRHJpdmVycy9CcmFpbGxlL0JyYWlsbGVNZW1vL2JyYWlsbGUuYyBiL0RyaXZlcnMvQnJhaWxsZS9CcmFpbGxlTWVtby9icmFpbGxlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTU2MmMzMAotLS0gL2Rldi9udWxsCisrKyBiL0RyaXZlcnMvQnJhaWxsZS9CcmFpbGxlTWVtby9icmFpbGxlLmMKQEAgLTAsMCArMSw1MjggQEAKKy8qCisgKiBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorICogICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorICoKKyAqIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorICoKKyAqIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyAqLworCisjaW5jbHVkZSAicHJvbG9ndWUuaCIKKworI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisKKyNpbmNsdWRlICJsb2cuaCIKKworI2luY2x1ZGUgImJybF9kcml2ZXIuaCIKKyNpbmNsdWRlICJicmxkZWZzLW1tLmgiCisKKyNkZWZpbmUgUFJPQkVfUkVUUllfTElNSVQgMgorI2RlZmluZSBQUk9CRV9JTlBVVF9USU1FT1VUIDEwMDAKKyNkZWZpbmUgU1RBUlRfSU5QVVRfVElNRU9VVCAxMDAwCisKKyNkZWZpbmUgTU1fS0VZX0dST1VQX0VOVFJZKHMsbikgQlJMX0tFWV9HUk9VUF9FTlRSWShNTSwgcywgbikKKyNkZWZpbmUgTU1fS0VZX05BTUVfRU5UUlkocyxrLG4pIEJSTF9LRVlfTkFNRV9FTlRSWShNTSwgcywgaywgbikKKworI2RlZmluZSBNTV9TSElGVF9LRVlfRU5UUlkoayxuKSBNTV9LRVlfTkFNRV9FTlRSWShTSElGVCwgaywgbikKKyNkZWZpbmUgTU1fRE9UX0tFWV9FTlRSWShrKSBNTV9LRVlfTkFNRV9FTlRSWShET1QsIGssICJkb3QiICNrKQorI2RlZmluZSBNTV9FRElUX0tFWV9FTlRSWShrLG4pIE1NX0tFWV9OQU1FX0VOVFJZKEVESVQsIGssIG4pCisjZGVmaW5lIE1NX0FSUk9XX0tFWV9FTlRSWShrLG4pIE1NX0tFWV9OQU1FX0VOVFJZKEFSUk9XLCBrLCBuKQorI2RlZmluZSBNTV9ESVNQTEFZX0tFWV9FTlRSWShrLG4pIE1NX0tFWV9OQU1FX0VOVFJZKERJU1BMQVksIGssIG4pCisKK0JFR0lOX0tFWV9OQU1FX1RBQkxFKHNoaWZ0KQorICBNTV9TSElGVF9LRVlfRU5UUlkoRjEsICJQYW5MZWZ0IiksCisgIE1NX1NISUZUX0tFWV9FTlRSWShGMywgIkV4dGVuc2lvbiIpLAorICBNTV9TSElGVF9LRVlfRU5UUlkoRjQsICJQYW5SaWdodCIpLAorCisgIE1NX1NISUZUX0tFWV9FTlRSWShGMSwgIkYxIiksCisgIE1NX1NISUZUX0tFWV9FTlRSWShGMiwgIkYyIiksCisgIE1NX1NISUZUX0tFWV9FTlRSWShGMywgIkYzIiksCisgIE1NX1NISUZUX0tFWV9FTlRSWShGNCwgIkY0IiksCisKKyAgTU1fU0hJRlRfS0VZX0VOVFJZKENPTlRST0wsICJDb250cm9sIiksCisgIE1NX1NISUZUX0tFWV9FTlRSWShBTFQsICJBbHQiKSwKKyAgTU1fU0hJRlRfS0VZX0VOVFJZKFNFTEVDVCwgIlNlbGVjdCIpLAorICBNTV9TSElGVF9LRVlfRU5UUlkoUkVBRCwgIlJlYWQiKSwKK0VORF9LRVlfTkFNRV9UQUJMRQorCitCRUdJTl9LRVlfTkFNRV9UQUJMRShkb3QpCisgIE1NX0RPVF9LRVlfRU5UUlkoMSksCisgIE1NX0RPVF9LRVlfRU5UUlkoMiksCisgIE1NX0RPVF9LRVlfRU5UUlkoMyksCisgIE1NX0RPVF9LRVlfRU5UUlkoNCksCisgIE1NX0RPVF9LRVlfRU5UUlkoNSksCisgIE1NX0RPVF9LRVlfRU5UUlkoNiksCisgIE1NX0RPVF9LRVlfRU5UUlkoNyksCisgIE1NX0RPVF9LRVlfRU5UUlkoOCksCitFTkRfS0VZX05BTUVfVEFCTEUKKworQkVHSU5fS0VZX05BTUVfVEFCTEUoZWRpdCkKKyAgTU1fRURJVF9LRVlfRU5UUlkoRVNDLCAiRXNjYXBlIiksCisgIE1NX0VESVRfS0VZX0VOVFJZKElORiwgIkluZm8iKSwKKworICBNTV9FRElUX0tFWV9FTlRSWShCUywgIkJhY2tzcGFjZSIpLAorICBNTV9FRElUX0tFWV9FTlRSWShERUwsICJEZWxldGUiKSwKKyAgTU1fRURJVF9LRVlfRU5UUlkoSU5TLCAiSW5zZXJ0IiksCisKKyAgTU1fRURJVF9LRVlfRU5UUlkoQ0hBTkdFLCAiQ2hhbmdlIiksCisgIE1NX0VESVRfS0VZX0VOVFJZKE9LLCAiT0siKSwKKyAgTU1fRURJVF9LRVlfRU5UUlkoU0VULCAiU2V0IiksCitFTkRfS0VZX05BTUVfVEFCTEUKKworQkVHSU5fS0VZX05BTUVfVEFCTEUoYXJyb3cpCisgIE1NX0FSUk9XX0tFWV9FTlRSWShVUCwgIkFycm93VXAiKSwKKyAgTU1fQVJST1dfS0VZX0VOVFJZKERPV04sICJBcnJvd0Rvd24iKSwKKyAgTU1fQVJST1dfS0VZX0VOVFJZKExFRlQsICJBcnJvd0xlZnQiKSwKKyAgTU1fQVJST1dfS0VZX0VOVFJZKFJJR0hULCAiQXJyb3dSaWdodCIpLAorRU5EX0tFWV9OQU1FX1RBQkxFCisKK0JFR0lOX0tFWV9OQU1FX1RBQkxFKHJvdXRlKQorICBNTV9LRVlfR1JPVVBfRU5UUlkoUk9VVEUsICJSb3V0aW5nS2V5IiksCitFTkRfS0VZX05BTUVfVEFCTEUKKworQkVHSU5fS0VZX05BTUVfVEFCTEUoZGlzcGxheSkKKyAgTU1fRElTUExBWV9LRVlfRU5UUlkoQkFDS1dBUkQsICJCYWNrd2FyZCIpLAorICBNTV9ESVNQTEFZX0tFWV9FTlRSWShGT1JXQVJELCAiRm9yd2FyZCIpLAorCisgIE1NX0RJU1BMQVlfS0VZX0VOVFJZKExTQ1JPTEwsICJTY3JvbGxMZWZ0IiksCisgIE1NX0RJU1BMQVlfS0VZX0VOVFJZKFJTQ1JPTEwsICJTY3JvbGxSaWdodCIpLAorRU5EX0tFWV9OQU1FX1RBQkxFCisKK0JFR0lOX0tFWV9OQU1FX1RBQkxFUyhwb2NrZXQpCisgIEtFWV9OQU1FX1RBQkxFKHNoaWZ0KSwKKyAgS0VZX05BTUVfVEFCTEUoZG90KSwKKyAgS0VZX05BTUVfVEFCTEUoZWRpdCksCisgIEtFWV9OQU1FX1RBQkxFKGFycm93KSwKKyAgS0VZX05BTUVfVEFCTEUocm91dGUpLAorICBLRVlfTkFNRV9UQUJMRShkaXNwbGF5KSwKK0VORF9LRVlfTkFNRV9UQUJMRVMKKworQkVHSU5fS0VZX05BTUVfVEFCTEVTKHNtYXJ0KQorICBLRVlfTkFNRV9UQUJMRShzaGlmdCksCisgIEtFWV9OQU1FX1RBQkxFKGRvdCksCisgIEtFWV9OQU1FX1RBQkxFKGVkaXQpLAorICBLRVlfTkFNRV9UQUJMRShhcnJvdyksCisgIEtFWV9OQU1FX1RBQkxFKHJvdXRlKSwKKyAgS0VZX05BTUVfVEFCTEUoZGlzcGxheSksCitFTkRfS0VZX05BTUVfVEFCTEVTCisKK0RFRklORV9LRVlfVEFCTEUocG9ja2V0KQorREVGSU5FX0tFWV9UQUJMRShzbWFydCkKKworQkVHSU5fS0VZX1RBQkxFX0xJU1QKKyAgJktFWV9UQUJMRV9ERUZJTklUSU9OKHBvY2tldCksCisgICZLRVlfVEFCTEVfREVGSU5JVElPTihzbWFydCksCitFTkRfS0VZX1RBQkxFX0xJU1QKKwordHlwZWRlZiBzdHJ1Y3QgeworICBjb25zdCBjaGFyICppZGVudGl0eVByZWZpeDsKKyAgY29uc3QgY2hhciAqbW9kZWxOYW1lOworICBjb25zdCBLZXlUYWJsZURlZmluaXRpb24gKmtleVRhYmxlRGVmaW5pdGlvbjsKK30gTW9kZWxFbnRyeTsKKworc3RhdGljIGNvbnN0IE1vZGVsRW50cnkgbW9kZWxFbnRyeV9wb2NrZXQgPSB7CisgIC5pZGVudGl0eVByZWZpeCA9ICJCTXBrIiwKKyAgLm1vZGVsTmFtZSA9ICJCcmFpbGxlIE1lbW8gUG9ja2V0IiwKKyAgLmtleVRhYmxlRGVmaW5pdGlvbiA9ICZLRVlfVEFCTEVfREVGSU5JVElPTihwb2NrZXQpCit9OworCitzdGF0aWMgY29uc3QgTW9kZWxFbnRyeSBtb2RlbEVudHJ5X3NtYXJ0ID0geworICAuaWRlbnRpdHlQcmVmaXggPSAiQk1zbWFydCIsCisgIC5tb2RlbE5hbWUgPSAiQnJhaWxsZSBNZW1vIFNtYXJ0IiwKKyAgLmtleVRhYmxlRGVmaW5pdGlvbiA9ICZLRVlfVEFCTEVfREVGSU5JVElPTihzbWFydCkKK307CisKK3N0YXRpYyBjb25zdCBNb2RlbEVudHJ5ICpjb25zdCBtb2RlbEVudHJpZXNbXSA9IHsKKyAgJm1vZGVsRW50cnlfcG9ja2V0LAorICAmbW9kZWxFbnRyeV9zbWFydCwKKyAgTlVMTAorfTsKKworc3RydWN0IEJyYWlsbGVEYXRhU3RydWN0IHsKKyAgY29uc3QgTW9kZWxFbnRyeSAqbW9kZWw7CisKKyAgdW5zaWduZWQgY2hhciBmb3JjZVJld3JpdGU7CisgIHVuc2lnbmVkIGNoYXIgdGV4dENlbGxzW01NX01BWElNVU1fTElORV9MRU5HVEhdOworfTsKKworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2l6ZVRhYmxlW10gPSB7MTYsIDI0LCAzMiwgNDAsIDQ2fTsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNpemVDb3VudCA9IEFSUkFZX0NPVU5UKHNpemVUYWJsZSk7CisKK3N0YXRpYyBpbnQKK2lzVmFsaWRTaXplICh1bnNpZ25lZCBjaGFyIHNpemUpIHsKKyAgcmV0dXJuIG1lbWNocihzaXplVGFibGUsIHNpemUsIHNpemVDb3VudCkgIT0gTlVMTDsKK30KKworc3RhdGljIGludAord3JpdGVCeXRlcyAoQnJhaWxsZURpc3BsYXkgKmJybCwgY29uc3QgdW5zaWduZWQgY2hhciAqYnl0ZXMsIHNpemVfdCBjb3VudCkgeworICByZXR1cm4gd3JpdGVCcmFpbGxlUGFja2V0KGJybCwgTlVMTCwgYnl0ZXMsIGNvdW50KTsKK30KKworc3RhdGljIGludAord3JpdGVQYWNrZXQgKAorICBCcmFpbGxlRGlzcGxheSAqYnJsLAorICB1bnNpZ25lZCBjaGFyIGNvZGUsIHVuc2lnbmVkIGNoYXIgc3ViY29kZSwKKyAgY29uc3QgdW5zaWduZWQgY2hhciAqZGF0YSwgc2l6ZV90IGxlbmd0aAorKSB7CisgIHVuc2lnbmVkIGNoYXIgYnl0ZXNbc2l6ZW9mKE1NX0NvbW1hbmRIZWFkZXIpICsgbGVuZ3RoXTsKKyAgdW5zaWduZWQgY2hhciAqYnl0ZSA9IGJ5dGVzOworCisgICpieXRlKysgPSBNTV9IRUFERVJfSUQxOworICAqYnl0ZSsrID0gTU1fSEVBREVSX0lEMjsKKworICAqYnl0ZSsrID0gY29kZTsKKyAgKmJ5dGUrKyA9IHN1YmNvZGU7CisKKyAgKmJ5dGUrKyA9IChsZW5ndGggPj4gMCkgJiAwWEZGOworICAqYnl0ZSsrID0gKGxlbmd0aCA+PiA4KSAmIDBYRkY7CisKKyAgaWYgKGRhdGEpIGJ5dGUgPSBtZW1wY3B5KGJ5dGUsIGRhdGEsIGxlbmd0aCk7CisKKyAgcmV0dXJuIHdyaXRlQnl0ZXMoYnJsLCBieXRlcywgYnl0ZS1ieXRlcyk7Cit9CisKK3N0YXRpYyBCcmFpbGxlUGFja2V0VmVyaWZpZXJSZXN1bHQKK3ZlcmlmeVBhY2tldCAoCisgIEJyYWlsbGVEaXNwbGF5ICpicmwsCisgIHVuc2lnbmVkIGNoYXIgKmJ5dGVzLCBzaXplX3Qgc2l6ZSwKKyAgc2l6ZV90ICpsZW5ndGgsIHZvaWQgKmRhdGEKKykgeworICB1bnNpZ25lZCBjaGFyIGJ5dGUgPSBieXRlc1tzaXplLTFdOworCisgIHN3aXRjaCAoc2l6ZSkgeworICAgIGNhc2UgMToKKyAgICAgIHN3aXRjaCAoYnl0ZSkgeworICAgICAgICBjYXNlIE1NX0hFQURFUl9BQ0s6CisgICAgICAgIGNhc2UgTU1fSEVBREVSX05BSzoKKyAgICAgICAgICAqbGVuZ3RoID0gMTsKKyAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIE1NX0hFQURFUl9JRDE6CisgICAgICAgICAgKmxlbmd0aCA9IHNpemVvZihNTV9Db21tYW5kSGVhZGVyKTsKKyAgICAgICAgICBicmVhazsKKworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgIGlmIChpc1ZhbGlkU2l6ZShieXRlKSkgeworICAgICAgICAgICAgKmxlbmd0aCA9IDE7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICB9CisKKyAgICAgICAgICByZXR1cm4gQlJMX1BWUl9JTlZBTElEOworICAgICAgfQorICAgICAgYnJlYWs7CisKKyAgICBjYXNlIDI6CisgICAgICBpZiAoYnl0ZSAhPSBNTV9IRUFERVJfSUQyKSByZXR1cm4gQlJMX1BWUl9JTlZBTElEOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIDU6CisgICAgICAqbGVuZ3RoICs9IGJ5dGU7CisgICAgICBicmVhazsKKworICAgIGNhc2UgNjoKKyAgICAgICpsZW5ndGggKz0gYnl0ZSA8PCA4OworICAgICAgYnJlYWs7CisKKyAgICBkZWZhdWx0OgorICAgICAgYnJlYWs7CisgIH0KKworICByZXR1cm4gQlJMX1BWUl9JTkNMVURFOworfQorCitzdGF0aWMgc2l6ZV90CityZWFkQnl0ZXMgKEJyYWlsbGVEaXNwbGF5ICpicmwsIHZvaWQgKnBhY2tldCwgc2l6ZV90IHNpemUpIHsKKyAgcmV0dXJuIHJlYWRCcmFpbGxlUGFja2V0KGJybCwgTlVMTCwgcGFja2V0LCBzaXplLCB2ZXJpZnlQYWNrZXQsIE5VTEwpOworfQorCitzdGF0aWMgc2l6ZV90CityZWFkUGFja2V0IChCcmFpbGxlRGlzcGxheSAqYnJsLCBNTV9Db21tYW5kUGFja2V0ICpwYWNrZXQpIHsKKyAgcmV0dXJuIHJlYWRCeXRlcyhicmwsIHBhY2tldCwgc2l6ZW9mKCpwYWNrZXQpKTsKK30KKworc3RhdGljIGludAorc3RhcnREaXNwbGF5TW9kZSAoQnJhaWxsZURpc3BsYXkgKmJybCkgeworICBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBkYXRhW10gPSB7TU1fQkxJTktfTk8sIDB9OworCisgIGlmICh3cml0ZVBhY2tldChicmwsIE1NX0NNRF9TdGFydERpc3BsYXlNb2RlLCAwLCBkYXRhLCBzaXplb2YoZGF0YSkpKSB7CisgICAgaWYgKGF3YWl0QnJhaWxsZUlucHV0KGJybCwgU1RBUlRfSU5QVVRfVElNRU9VVCkpIHsKKyAgICAgIE1NX0NvbW1hbmRQYWNrZXQgcmVzcG9uc2U7CisgICAgICBzaXplX3Qgc2l6ZSA9IHJlYWRQYWNrZXQoYnJsLCAmcmVzcG9uc2UpOworCisgICAgICBpZiAoc2l6ZSkgeworICAgICAgICBpZiAocmVzcG9uc2UuZmllbGRzLmhlYWRlci5pZDEgPT0gTU1fSEVBREVSX0FDSykgcmV0dXJuIDE7CisgICAgICAgIGxvZ1VuZXhwZWN0ZWRQYWNrZXQocmVzcG9uc2UuYnl0ZXMsIHNpemUpOworICAgICAgfQorICAgIH0KKyAgfQorCisgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50CitlbmREaXNwbGF5TW9kZSAoQnJhaWxsZURpc3BsYXkgKmJybCkgeworICByZXR1cm4gd3JpdGVQYWNrZXQoYnJsLCBNTV9DTURfRW5kRGlzcGxheU1vZGUsIDAsIE5VTEwsIDApOworfQorCitzdGF0aWMgaW50CitzZW5kQnJhaWxsZURhdGEgKEJyYWlsbGVEaXNwbGF5ICpicmwsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmNlbGxzLCBzaXplX3QgY291bnQpIHsKKyAgcmV0dXJuIHdyaXRlUGFja2V0KGJybCwgTU1fQ01EX1NlbmRCcmFpbGxlRGF0YSwgMCwgY2VsbHMsIGNvdW50KTsKK30KKworc3RhdGljIGludAorY29ubmVjdFJlc291cmNlIChCcmFpbGxlRGlzcGxheSAqYnJsLCBjb25zdCBjaGFyICppZGVudGlmaWVyKSB7CisgIHN0YXRpYyBjb25zdCBTZXJpYWxQYXJhbWV0ZXJzIHNlcmlhbFBhcmFtZXRlcnMgPSB7CisgICAgU0VSSUFMX0RFRkFVTFRfUEFSQU1FVEVSUywKKyAgICAuYmF1ZCA9IDk2MDAKKyAgfTsKKworICBCRUdJTl9VU0JfU1RSSU5HX0xJU1QodXNiTWFudWZhY3R1cmVyc18xMEM0X0VBNjApCisgICAgIlNpbGljb24gTGFicyIsCisgIEVORF9VU0JfU1RSSU5HX0xJU1QKKworICBCRUdJTl9VU0JfQ0hBTk5FTF9ERUZJTklUSU9OUworICAgIHsgLyogUG9ja2V0ICovCisgICAgICAudmVuZG9yPTBYMTBDNCwgLnByb2R1Y3Q9MFhFQTYwLAorICAgICAgLm1hbnVmYWN0dXJlcnMgPSB1c2JNYW51ZmFjdHVyZXJzXzEwQzRfRUE2MCwKKyAgICAgIC5jb25maWd1cmF0aW9uPTEsIC5pbnRlcmZhY2U9MCwgLmFsdGVybmF0aXZlPTAsCisgICAgICAuaW5wdXRFbmRwb2ludD0xLCAub3V0cHV0RW5kcG9pbnQ9MSwKKyAgICAgIC5zZXJpYWw9JnNlcmlhbFBhcmFtZXRlcnMKKyAgICB9LAorCisgICAgeyAvKiBTbWFydCAqLworICAgICAgLnZlbmRvcj0wWDExNDgsIC5wcm9kdWN0PTBYMDMwMSwKKyAgICAgIC5jb25maWd1cmF0aW9uPTEsIC5pbnRlcmZhY2U9MSwgLmFsdGVybmF0aXZlPTAsCisgICAgICAuaW5wdXRFbmRwb2ludD0zLCAub3V0cHV0RW5kcG9pbnQ9MiwKKyAgICAgIC5zZXJpYWw9JnNlcmlhbFBhcmFtZXRlcnMKKyAgICB9LAorICBFTkRfVVNCX0NIQU5ORUxfREVGSU5JVElPTlMKKworICBHaW9EZXNjcmlwdG9yIGRlc2NyaXB0b3I7CisgIGdpb0luaXRpYWxpemVEZXNjcmlwdG9yKCZkZXNjcmlwdG9yKTsKKworICBkZXNjcmlwdG9yLnNlcmlhbC5wYXJhbWV0ZXJzID0gJnNlcmlhbFBhcmFtZXRlcnM7CisKKyAgZGVzY3JpcHRvci51c2IuY2hhbm5lbERlZmluaXRpb25zID0gdXNiQ2hhbm5lbERlZmluaXRpb25zOworCisgIGRlc2NyaXB0b3IuYmx1ZXRvb3RoLmNoYW5uZWxOdW1iZXIgPSAxOworCisgIGlmIChjb25uZWN0QnJhaWxsZVJlc291cmNlKGJybCwgaWRlbnRpZmllciwgJmRlc2NyaXB0b3IsIE5VTEwpKSB7CisgICAgcmV0dXJuIDE7CisgIH0KKworICByZXR1cm4gMDsKK30KKworc3RhdGljIGludAorZGV0ZWN0TW9kZWwgKEJyYWlsbGVEaXNwbGF5ICpicmwsIGNvbnN0IE1NX0lkZW50aXR5UGFja2V0ICppZGVudGl0eSkgeworICBjb25zdCBNb2RlbEVudHJ5ICpjb25zdCAqbW9kZWwgPSBtb2RlbEVudHJpZXM7CisKKyAgd2hpbGUgKCptb2RlbCkgeworICAgIGNvbnN0IGNoYXIgKnByZWZpeCA9ICgqbW9kZWwpLT5pZGVudGl0eVByZWZpeDsKKworICAgIGlmIChzdHJuY21wKGlkZW50aXR5LT5oYXJkd2FyZU5hbWUsIHByZWZpeCwgc3RybGVuKHByZWZpeCkpID09IDApIHsKKyAgICAgIGJybC0+ZGF0YS0+bW9kZWwgPSAqbW9kZWw7CisgICAgICBsb2dNZXNzYWdlKExPR19JTkZPLCAiZGV0ZWN0ZWQgbW9kZWw6ICVzIiwgYnJsLT5kYXRhLT5tb2RlbC0+bW9kZWxOYW1lKTsKKyAgICAgIHJldHVybiAxOworICAgIH0KKworICAgIG1vZGVsICs9IDE7CisgIH0KKworICBsb2dNZXNzYWdlKExPR19XQVJOSU5HLCAidW5yZWNvZ25pemVkIG1vZGVsOiAlcyIsIGlkZW50aXR5LT5oYXJkd2FyZU5hbWUpOworICBicmwtPmRhdGEtPm1vZGVsID0gJm1vZGVsRW50cnlfcG9ja2V0OworICBsb2dNZXNzYWdlKExPR19JTkZPLCAiYXNzdW1lZCBtb2RlbDogJXMiLCBicmwtPmRhdGEtPm1vZGVsLT5tb2RlbE5hbWUpOworICByZXR1cm4gMDsKK30KKworc3RhdGljIGludAord3JpdGVJZGVudGlmeVJlcXVlc3QgKEJyYWlsbGVEaXNwbGF5ICpicmwpIHsKKyAgcmV0dXJuIHdyaXRlUGFja2V0KGJybCwgTU1fQ01EX1F1ZXJ5SWRlbnRpdHksIDAsIE5VTEwsIDApOworfQorCitzdGF0aWMgQnJhaWxsZVBhY2tldFZlcmlmaWVyUmVzdWx0Cit2ZXJpZnlJZGVudGl0eVJlc3BvbnNlICgKKyAgQnJhaWxsZURpc3BsYXkgKmJybCwKKyAgdW5zaWduZWQgY2hhciAqYnl0ZXMsIHNpemVfdCBzaXplLAorICBzaXplX3QgKmxlbmd0aCwgdm9pZCAqZGF0YQorKSB7CisgIHVuc2lnbmVkIGNoYXIgYnl0ZSA9IGJ5dGVzW3NpemUtMV07CisKKyAgc3dpdGNoIChzaXplKSB7CisgICAgY2FzZSAxOgorICAgICAgc3dpdGNoIChieXRlKSB7CisgICAgICAgIGNhc2UgMFgwMToKKyAgICAgICAgICAqbGVuZ3RoID0gc2l6ZW9mKE1NX0lkZW50aXR5UGFja2V0KTsKKyAgICAgICAgICBicmVhazsKKworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgIHJldHVybiBCUkxfUFZSX0lOVkFMSUQ7CisgICAgICB9CisgICAgICBicmVhazsKKworICAgIGRlZmF1bHQ6CisgICAgICBicmVhazsKKyAgfQorCisgIHJldHVybiBCUkxfUFZSX0lOQ0xVREU7Cit9CisKK3N0YXRpYyBzaXplX3QKK3JlYWRJZGVudGl0eVJlc3BvbnNlIChCcmFpbGxlRGlzcGxheSAqYnJsLCB2b2lkICpwYWNrZXQsIHNpemVfdCBzaXplKSB7CisgIHJldHVybiByZWFkQnJhaWxsZVBhY2tldChicmwsIE5VTEwsIHBhY2tldCwgc2l6ZSwgdmVyaWZ5SWRlbnRpdHlSZXNwb25zZSwgTlVMTCk7Cit9CisKK3N0YXRpYyBCcmFpbGxlUmVzcG9uc2VSZXN1bHQKK2lzSWRlbnRpdHlSZXNwb25zZSAoQnJhaWxsZURpc3BsYXkgKmJybCwgY29uc3Qgdm9pZCAqcGFja2V0LCBzaXplX3Qgc2l6ZSkgeworICBjb25zdCBNTV9JZGVudGl0eVBhY2tldCAqaWRlbnRpdHkgPSBwYWNrZXQ7CisKKyAgaWYgKChpZGVudGl0eS0+bGluZUxlbmd0aCA9PSAwKSB8fCAoaWRlbnRpdHktPmxpbmVMZW5ndGggPiBNTV9NQVhJTVVNX0xJTkVfTEVOR1RIKSkgcmV0dXJuIEJSTF9SU1BfVU5FWFBFQ1RFRDsKKyAgaWYgKChpZGVudGl0eS0+bGluZUNvdW50ID09IDApIHx8IChpZGVudGl0eS0+bGluZUNvdW50ID4gTU1fTUFYSU1VTV9MSU5FX0NPVU5UKSkgcmV0dXJuIEJSTF9SU1BfVU5FWFBFQ1RFRDsKKworICB7CisgICAgY29uc3QgY2hhciAqYnl0ZSA9IGlkZW50aXR5LT5oYXJkd2FyZU5hbWU7CisgICAgY29uc3QgY2hhciAqZW5kID0gYnl0ZSArIHNpemVvZihpZGVudGl0eS0+aGFyZHdhcmVOYW1lKTsKKworICAgIHdoaWxlIChieXRlIDwgZW5kKSB7CisgICAgICBpZiAoISpieXRlKSBicmVhazsKKyAgICAgIGlmICghaXN3cHJpbnQoKmJ5dGUpKSByZXR1cm4gQlJMX1JTUF9VTkVYUEVDVEVEOworICAgICAgYnl0ZSArPSAxOworICAgIH0KKyAgfQorCisgIHJldHVybiBCUkxfUlNQX0RPTkU7Cit9CisKK3N0YXRpYyBpbnQKK2JybF9jb25zdHJ1Y3QgKEJyYWlsbGVEaXNwbGF5ICpicmwsIGNoYXIgKipwYXJhbWV0ZXJzLCBjb25zdCBjaGFyICpkZXZpY2UpIHsKKyAgaWYgKChicmwtPmRhdGEgPSBtYWxsb2Moc2l6ZW9mKCpicmwtPmRhdGEpKSkpIHsKKyAgICBtZW1zZXQoYnJsLT5kYXRhLCAwLCBzaXplb2YoKmJybC0+ZGF0YSkpOworCisgICAgaWYgKGNvbm5lY3RSZXNvdXJjZShicmwsIGRldmljZSkpIHsKKyAgICAgIE1NX0lkZW50aXR5UGFja2V0IGlkZW50aXR5OworCisgICAgICBpZiAocHJvYmVCcmFpbGxlRGlzcGxheShicmwsIFBST0JFX1JFVFJZX0xJTUlULCBOVUxMLCBQUk9CRV9JTlBVVF9USU1FT1VULAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVJZGVudGlmeVJlcXVlc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkSWRlbnRpdHlSZXNwb25zZSwgJmlkZW50aXR5LCBzaXplb2YoaWRlbnRpdHkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNJZGVudGl0eVJlc3BvbnNlKSkgeworICAgICAgICBkZXRlY3RNb2RlbChicmwsICZpZGVudGl0eSk7CisgICAgICAgIGJybC0+dGV4dENvbHVtbnMgPSBpZGVudGl0eS5saW5lTGVuZ3RoOworCisgICAgICAgIGlmIChzdGFydERpc3BsYXlNb2RlKGJybCkpIHsKKyAgICAgICAgICBzZXRCcmFpbGxlS2V5VGFibGUoYnJsLCBicmwtPmRhdGEtPm1vZGVsLT5rZXlUYWJsZURlZmluaXRpb24pOworICAgICAgICAgIE1BS0VfT1VUUFVUX1RBQkxFKDBYODAsIDBYNDAsIDBYMjAsIDBYMDgsIDBYMDQsIDBYMDIsIDBYMTAsIDBYMDEpOworCisgICAgICAgICAgYnJsLT5kYXRhLT5mb3JjZVJld3JpdGUgPSAxOworICAgICAgICAgIHJldHVybiAxOworICAgICAgICB9CisgICAgICB9CisKKyAgICAgIGRpc2Nvbm5lY3RCcmFpbGxlUmVzb3VyY2UoYnJsLCBOVUxMKTsKKyAgICB9CisKKyAgICBmcmVlKGJybC0+ZGF0YSk7CisgIH0gZWxzZSB7CisgICAgbG9nTWFsbG9jRXJyb3IoKTsKKyAgfQorCisgIHJldHVybiAwOworfQorCitzdGF0aWMgdm9pZAorYnJsX2Rlc3RydWN0IChCcmFpbGxlRGlzcGxheSAqYnJsKSB7CisgIGRpc2Nvbm5lY3RCcmFpbGxlUmVzb3VyY2UoYnJsLCBlbmREaXNwbGF5TW9kZSk7CisKKyAgaWYgKGJybC0+ZGF0YSkgeworICAgIGZyZWUoYnJsLT5kYXRhKTsKKyAgICBicmwtPmRhdGEgPSBOVUxMOworICB9Cit9CisKK3N0YXRpYyBpbnQKK2JybF93cml0ZVdpbmRvdyAoQnJhaWxsZURpc3BsYXkgKmJybCwgY29uc3Qgd2NoYXJfdCAqdGV4dCkgeworICBpZiAoY2VsbHNIYXZlQ2hhbmdlZChicmwtPmRhdGEtPnRleHRDZWxscywgYnJsLT5idWZmZXIsIGJybC0+dGV4dENvbHVtbnMsIE5VTEwsIE5VTEwsICZicmwtPmRhdGEtPmZvcmNlUmV3cml0ZSkpIHsKKyAgICB1bnNpZ25lZCBjaGFyIGNlbGxzW2JybC0+dGV4dENvbHVtbnNdOworCisgICAgdHJhbnNsYXRlT3V0cHV0Q2VsbHMoY2VsbHMsIGJybC0+ZGF0YS0+dGV4dENlbGxzLCBicmwtPnRleHRDb2x1bW5zKTsKKyAgICBpZiAoIXNlbmRCcmFpbGxlRGF0YShicmwsIGNlbGxzLCBzaXplb2YoY2VsbHMpKSkgcmV0dXJuIDA7CisgIH0KKworICByZXR1cm4gMTsKK30KKworc3RhdGljIGludAorYnJsX3JlYWRDb21tYW5kIChCcmFpbGxlRGlzcGxheSAqYnJsLCBLZXlUYWJsZUNvbW1hbmRDb250ZXh0IGNvbnRleHQpIHsKKyAgTU1fQ29tbWFuZFBhY2tldCBwYWNrZXQ7CisgIHNpemVfdCBzaXplOworCisgIHdoaWxlICgoc2l6ZSA9IHJlYWRQYWNrZXQoYnJsLCAmcGFja2V0KSkpIHsKKyAgICBpZiAoKHBhY2tldC5maWVsZHMuaGVhZGVyLmlkMSA9PSBNTV9IRUFERVJfSUQxKSAmJgorICAgICAgICAocGFja2V0LmZpZWxkcy5oZWFkZXIuaWQyID09IE1NX0hFQURFUl9JRDIpKSB7CisgICAgICBzd2l0Y2ggKHBhY2tldC5maWVsZHMuaGVhZGVyLmNvZGUpIHsKKyAgICAgICAgY2FzZSBNTV9DTURfS2V5Q29tYmluYXRpb246CisgICAgICAgICAgc3dpdGNoIChwYWNrZXQuZmllbGRzLmRhdGEua2V5cy5ncm91cCkgeworICAgICAgICAgICAgY2FzZSBNTV9HUlBfU0hJRlQ6CisgICAgICAgICAgICAgIGlmICghcGFja2V0LmZpZWxkcy5kYXRhLmtleXMudmFsdWUpIHsKKyAgICAgICAgICAgICAgICBlbnF1ZXVlS2V5cyhicmwsIHBhY2tldC5maWVsZHMuZGF0YS5rZXlzLnNoaWZ0LCBNTV9HUlBfU0hJRlQsIDApOworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBjYXNlIE1NX0dSUF9ET1Q6CisgICAgICAgICAgICBjYXNlIE1NX0dSUF9FRElUOgorICAgICAgICAgICAgY2FzZSBNTV9HUlBfQVJST1c6CisgICAgICAgICAgICBjYXNlIE1NX0dSUF9ESVNQTEFZOgorICAgICAgICAgICAgeworICAgICAgICAgICAgICBLZXlOdW1iZXJTZXQgc2hpZnQgPSAwOworCisgICAgICAgICAgICAgIGVucXVldWVVcGRhdGVkS2V5cyhicmwsIHBhY2tldC5maWVsZHMuZGF0YS5rZXlzLnNoaWZ0LCAmc2hpZnQsIE1NX0dSUF9TSElGVCwgMCk7CisgICAgICAgICAgICAgIGVucXVldWVLZXlzKGJybCwgcGFja2V0LmZpZWxkcy5kYXRhLmtleXMudmFsdWUsIHBhY2tldC5maWVsZHMuZGF0YS5rZXlzLmdyb3VwLCAwKTsKKyAgICAgICAgICAgICAgZW5xdWV1ZVVwZGF0ZWRLZXlzKGJybCwgMCwgJnNoaWZ0LCBNTV9HUlBfU0hJRlQsIDApOworICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgY2FzZSBNTV9HUlBfUk9VVEU6CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIga2V5ID0gcGFja2V0LmZpZWxkcy5kYXRhLmtleXMudmFsdWU7CisKKyAgICAgICAgICAgICAgaWYgKChrZXkgPiAwKSAmJiAoa2V5IDw9IGJybC0+dGV4dENvbHVtbnMpKSB7CisgICAgICAgICAgICAgICAgS2V5TnVtYmVyU2V0IHNoaWZ0ID0gMDsKKworICAgICAgICAgICAgICAgIGVucXVldWVVcGRhdGVkS2V5cyhicmwsIHBhY2tldC5maWVsZHMuZGF0YS5rZXlzLnNoaWZ0LCAmc2hpZnQsIE1NX0dSUF9TSElGVCwgMCk7CisgICAgICAgICAgICAgICAgZW5xdWV1ZUtleShicmwsIHBhY2tldC5maWVsZHMuZGF0YS5rZXlzLmdyb3VwLCBrZXktMSk7CisgICAgICAgICAgICAgICAgZW5xdWV1ZVVwZGF0ZWRLZXlzKGJybCwgMCwgJnNoaWZ0LCBNTV9HUlBfU0hJRlQsIDApOworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIH0KKyAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIE1NX0NNRF9TaGlmdFByZXNzOgorICAgICAgICBjYXNlIE1NX0NNRF9TaGlmdFJlbGVhc2U6CisgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICB9CisKKyAgICBsb2dVbmV4cGVjdGVkUGFja2V0KHBhY2tldC5ieXRlcywgc2l6ZSk7CisgIH0KKworICByZXR1cm4gKGVycm5vID09IEVBR0FJTik/IEVPRjogQlJMX0NNRF9SRVNUQVJUQlJMOworfQpkaWZmIC0tZ2l0IGEvRHJpdmVycy9CcmFpbGxlL0JyYWlsbGVNZW1vL2JybGRlZnMtbW0uaCBiL0RyaXZlcnMvQnJhaWxsZS9CcmFpbGxlTWVtby9icmxkZWZzLW1tLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2Q3NDFhZgotLS0gL2Rldi9udWxsCisrKyBiL0RyaXZlcnMvQnJhaWxsZS9CcmFpbGxlTWVtby9icmxkZWZzLW1tLmgKQEAgLTAsMCArMSwxNTggQEAKKy8qCisgKiBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorICogICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorICoKKyAqIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorICoKKyAqIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyAqLworCisjaWZuZGVmIEJSTFRUWV9JTkNMVURFRF9NTV9CUkxERUZTCisjZGVmaW5lIEJSTFRUWV9JTkNMVURFRF9NTV9CUkxERUZTCisKK3R5cGVkZWYgZW51bSB7CisgIE1NX0RFVl9Qb2NrZXQgID0gMFgwMiwKKyAgTU1fREVWX1NtYXJ0MTYgPSAwWDExLAorICBNTV9ERVZfU21hcnQ0MCA9IDBYMTIsCit9IE1NX0RldmljZUlkZW50aWZpZXI7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgdW5zaWduZWQgY2hhciBwYWNrZXRUeXBlOworICB1bnNpZ25lZCBjaGFyIGRldmljZUlkZW50aWZpZXI7CisgIHVuc2lnbmVkIGNoYXIgbWFqb3JWZXJzaW9uOworICB1bnNpZ25lZCBjaGFyIG1pbm9yVmVyc2lvbjsKKyAgdW5zaWduZWQgY2hhciBsaW5lQ291bnQ7CisgIHVuc2lnbmVkIGNoYXIgbGluZUxlbmd0aDsKKyAgdW5zaWduZWQgY2hhciByZXNlcnZlZDsKKyAgdW5zaWduZWQgY2hhciBwb3J0SWRlbnRpZmllcjsKKyAgY2hhciBoYXJkd2FyZU5hbWVbMjRdOworfSBNTV9JZGVudGl0eVBhY2tldDsKKworI2RlZmluZSBNTV9NQVhJTVVNX0xJTkVfTEVOR1RIIDgwCisjZGVmaW5lIE1NX01BWElNVU1fTElORV9DT1VOVCAxCisKKyNkZWZpbmUgTU1fSEVBREVSX0lEMSAwWEZGCisjZGVmaW5lIE1NX0hFQURFUl9JRDIgMFhGRgorCisjZGVmaW5lIE1NX0hFQURFUl9OQUsgMFgwMAorI2RlZmluZSBNTV9IRUFERVJfQUNLIDBYMDEKKwordHlwZWRlZiBlbnVtIHsKKyAgTU1fQ01EX1F1ZXJ5SWRlbnRpdHkgICAgPSAwWDEwLAorICBNTV9DTURfUXVlcnlMaW5lU2l6ZSAgICA9IDBYMTEsCisgIE1NX0NNRF9TdGFydERpc3BsYXlNb2RlID0gMFgyMCwKKyAgTU1fQ01EX0VuZERpc3BsYXlNb2RlICAgPSAwWDI4LAorICBNTV9DTURfU2VuZEJyYWlsbGVEYXRhICA9IDBYMzEsCisgIE1NX0NNRF9TZW5kRGlzcGxheURhdGEgID0gMFgzMiwKKyAgTU1fQ01EX0tleUNvbWJpbmF0aW9uICAgPSAwWGYwLAorICBNTV9DTURfU2hpZnRQcmVzcyAgICAgICA9IDBYZjIsCisgIE1NX0NNRF9TaGlmdFJlbGVhc2UgICAgID0gMFhmMworfSBNTV9Db21tYW5kQ29kZTsKKwordHlwZWRlZiBlbnVtIHsKKyAgTU1fQkxJTktfTk8gICA9IDAsCisgIE1NX0JMSU5LX1NMT1cgPSAxLAorICBNTV9CTElOS19GQVNUID0gMgorfSBNTV9CbGlua01vZGU7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgdW5zaWduZWQgY2hhciBpZDE7CisgIHVuc2lnbmVkIGNoYXIgaWQyOworICB1bnNpZ25lZCBjaGFyIGNvZGU7CisgIHVuc2lnbmVkIGNoYXIgc3ViY29kZTsKKyAgdW5zaWduZWQgY2hhciBsZW5ndGhMb3c7CisgIHVuc2lnbmVkIGNoYXIgbGVuZ3RoSGlnaDsKK30gTU1fQ29tbWFuZEhlYWRlcjsKKwordHlwZWRlZiB1bmlvbiB7CisgIHVuc2lnbmVkIGNoYXIgYnl0ZXNbMV07CisKKyAgc3RydWN0IHsKKyAgICBNTV9Db21tYW5kSGVhZGVyIGhlYWRlcjsKKworICAgIHVuaW9uIHsKKyAgICAgIHN0cnVjdCB7CisgICAgICAgIHVuc2lnbmVkIGNoYXIgYmxpbms7CisgICAgICAgIHVuc2lnbmVkIGNoYXIgcmVzZXJ2ZWQ7CisgICAgICB9IHN0YXJ0OworCisgICAgICBzdHJ1Y3QgeworICAgICAgICB1bnNpZ25lZCBjaGFyIGNlbGxzW01NX01BWElNVU1fTElORV9MRU5HVEggKiAyXTsKKyAgICAgIH0gc2VuZDsKKworICAgICAgc3RydWN0IHsKKyAgICAgICAgdW5zaWduZWQgY2hhciBncm91cDsKKyAgICAgICAgdW5zaWduZWQgY2hhciB2YWx1ZTsKKyAgICAgICAgdW5zaWduZWQgY2hhciBzaGlmdDsKKyAgICAgIH0ga2V5czsKKyAgICB9IGRhdGE7CisgIH0gZmllbGRzOworfSBNTV9Db21tYW5kUGFja2V0OworCit0eXBlZGVmIGVudW0geworICBNTV9TSElGVF9GMSAgICAgID0gMCwKKyAgTU1fU0hJRlRfRjQgICAgICA9IDEsCisgIE1NX1NISUZUX0NPTlRST0wgPSAyLAorICBNTV9TSElGVF9BTFQgICAgID0gMywKKyAgTU1fU0hJRlRfU0VMRUNUICA9IDQsCisgIE1NX1NISUZUX1JFQUQgICAgPSA1LAorICBNTV9TSElGVF9GMiAgICAgID0gNiwKKyAgTU1fU0hJRlRfRjMgICAgICA9IDcKK30gTU1fU2hpZnRLZXk7CisKK3R5cGVkZWYgZW51bSB7CisgIE1NX0RPVF84ID0gMCwKKyAgTU1fRE9UXzYgPSAxLAorICBNTV9ET1RfNSA9IDIsCisgIE1NX0RPVF80ID0gMywKKyAgTU1fRE9UXzcgPSA0LAorICBNTV9ET1RfMyA9IDUsCisgIE1NX0RPVF8yID0gNiwKKyAgTU1fRE9UXzEgPSA3Cit9IE1NX0RvdEtleTsKKwordHlwZWRlZiBlbnVtIHsKKyAgTU1fRURJVF9FU0MgICAgPSAwLAorICBNTV9FRElUX0lORiAgICA9IDEsCisgIE1NX0VESVRfQlMgICAgID0gMiwKKyAgTU1fRURJVF9ERUwgICAgPSAzLAorICBNTV9FRElUX0lOUyAgICA9IDQsCisgIE1NX0VESVRfQ0hBTkdFID0gNSwKKyAgTU1fRURJVF9PSyAgICAgPSA2LAorICBNTV9FRElUX1NFVCAgICA9IDcKK30gTU1fRWRpdEtleTsKKwordHlwZWRlZiBlbnVtIHsKKyAgTU1fQVJST1dfVVAgICAgPSAwLAorICBNTV9BUlJPV19ET1dOICA9IDEsCisgIE1NX0FSUk9XX0xFRlQgID0gMiwKKyAgTU1fQVJST1dfUklHSFQgPSAzCit9IE1NX0Fycm93S2V5OworCit0eXBlZGVmIGVudW0geworICBNTV9ESVNQTEFZX0JBQ0tXQVJEID0gMCwKKyAgTU1fRElTUExBWV9GT1JXQVJEICA9IDEsCisgIE1NX0RJU1BMQVlfTFNDUk9MTCAgPSAyLAorICBNTV9ESVNQTEFZX1JTQ1JPTEwgID0gMworfSBNTV9EaXNwbGF5S2V5OworCit0eXBlZGVmIGVudW0geworICBNTV9HUlBfU0hJRlQgICA9IDAsCisgIE1NX0dSUF9ET1QgICAgID0gMSwKKyAgTU1fR1JQX0VESVQgICAgPSAyLAorICBNTV9HUlBfQVJST1cgICA9IDMsCisgIE1NX0dSUF9ST1VURSAgID0gNCwKKyAgTU1fR1JQX0VSUk9SICAgPSA1LAorICBNTV9HUlBfRElTUExBWSA9IDYKK30gTU1fS2V5R3JvdXA7CisKKyNlbmRpZiAvKiBCUkxUVFlfSU5DTFVERURfTU1fQlJMREVGUyAqLyAKZGlmZiAtLWdpdCBhL0RyaXZlcnMvQnJhaWxsZS9CcmFpbGxlTm90ZS9NYWtlZmlsZS5pbiBiL0RyaXZlcnMvQnJhaWxsZS9CcmFpbGxlTm90ZS9NYWtlZmlsZS5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNDU5MzI3Ci0tLSAvZGV2L251bGwKKysrIGIvRHJpdmVycy9CcmFpbGxlL0JyYWlsbGVOb3RlL01ha2VmaWxlLmluCkBAIC0wLDAgKzEsMjggQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyMgICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisjCisjIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyMKKyMgQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitEUklWRVJfQ09ERSA9IGJuCitEUklWRVJfTkFNRSA9IEJyYWlsbGVOb3RlCitEUklWRVJfVVNBR0UgPSAxOC8zMiwgQXBleAorRFJJVkVSX1ZFUlNJT04gPSAxLjAKK0RSSVZFUl9ERVZFTE9QRVJTID0gRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPgoraW5jbHVkZSAkKFNSQ19UT1ApYnJhaWxsZS5taworCiticmFpbGxlLiRPOgorCSQoQ0MpICQoQlJMX0NGTEFHUykgLWMgJChTUkNfRElSKS9icmFpbGxlLmMKKwpkaWZmIC0tZ2l0IGEvRHJpdmVycy9CcmFpbGxlL0JyYWlsbGVOb3RlL1BST1RPQ09MIGIvRHJpdmVycy9CcmFpbGxlL0JyYWlsbGVOb3RlL1BST1RPQ09MCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFkZTA2ZTYKLS0tIC9kZXYvbnVsbAorKysgYi9Ecml2ZXJzL0JyYWlsbGUvQnJhaWxsZU5vdGUvUFJPVE9DT0wKQEAgLTAsMCArMSw1OCBAQAorVGhlIEJyYWlsbGVOb3RlIG9wZXJhdGVzIGF0IDM4LDQwMCBiYXVkLCB3aXRoIDggYml0cyBwZXIgY2hhcmFjdGVyLCB3aXRoCitubyBwYXJpdHksIGFuZCB3aXRoIDEgc3RvcCBiaXQuCisKK1doZW5ldmVyIGEga2V5LCBvciBjb21iaW5hdGlvbiBvZiBrZXlzIChjaG9yZCksIGlzIHByZXNzZWQsIHR3byBieXRlcyBhcmUKK3NlbnQgdG8gdGhlIGNvbXB1dGVyLiBUaGUgZmlyc3QgYnl0ZSBpbmRpY2F0ZXMgd2hpY2gga2luZCBvZiBrZXkgb3IgY2hvcmQKK2hhcyBiZWVuIHVzZWQsIGFuZCB0aGUgc2Vjb25kIGJ5dGUgaW5kaWNhdGVzIHdoaWNoIGtleXMgaGF2ZSBiZWVuIHByZXNzZWQuCitUaGUgYnl0ZSBzZXF1ZW5jZSBpcyBzZW50IG9uY2UgYWxsIG9mIHRoZSBrZXlzIGhhdmUgYmVlbiByZWxlYXNlZC4KKworMFg4MDogQW55IGNvbWJpbmF0aW9uIG9mIGRvdHMgMSB0aHJvdWdoIDYuIFRoZSBzZWNvbmQgYnl0ZSBjb25zaXN0cyBvZiBiaXQKKzAgKDBYMDEpIGZvciBkb3QgMSwgYml0IDEgKDBYMDIpIGZvciBkb3QgMiwgYml0IDIgKDBYMDQpIGZvciBkb3QgMywgYml0IDMKKygwWDA4KSBmb3IgZG90IDQsIGJpdCA0ICgwWDEwKSBmb3IgZG90IDUsIGFuZCBiaXQgNSAoMFgyMCkgZm9yIGRvdCA2LgorCiswWDgxOiBBbnkgY29tYmluYXRpb24gb2YgZG90cyAxIHRocm91Z2ggNiBpbiBjb25qdW5jdGlvbiB3aXRoIHRoZSBzcGFjZQorYmFyLiBUaGUgc2Vjb25kIGJ5dGUgaXMgYXMgZGVmaW5lZCBmb3IgMFg4MC4gVGhlIGZvbGxvd2luZyBkb3QKK2NvbWJpbmF0aW9ucyBhcmUgaW50ZXJjZXB0ZWQgYnkgdGhlIEJyYWlsbGVOb3RlLCBhbmQsIHRoZXJlZm9yZSwgYXJlbid0CitzZWVuIGJ5IHRoZSBjb21wdXRlcjogWzE1XSwgWzEyNV0sIFsxMzVdLCBbMTIzNV0sIFsxMzZdLCBbMTM1Nl0sIFsyMzVdLAorWzEyMzQ1NlwuCisKKzBYODI6IEFueSBjb21iaW5hdGlvbiBvZiBkb3RzIDEgdGhyb3VnaCA2IGluIGNvbmp1bmN0aW9uIHdpdGggYm90aCB0aGUKK3NwYWNlIGJhciBhbmQgdGhlIGJhY2tzcGFjZSBrZXkuIFRoZSBzZWNvbmQgYnl0ZSBpcyBhcyBkZWZpbmVkIGZvciAwWDgwLAorZXhjZXB0IHRoYXQgYml0IDYgKDBYNDApIGlzIGFsc28gYWx3YXlzIHNldC4KKworMFg4MzogQW55IGNvbWJpbmF0aW9uIG9mIGRvdHMgMSB0aHJvdWdoIDYgaW4gY29uanVuY3Rpb24gd2l0aCBib3RoIHRoZQorc3BhY2UgYmFyIGFuZCB0aGUgZW50ZXIga2V5LiBUaGUgc2Vjb25kIGJ5dGUgaXMgYXMgZm9yIDBYODAuIFRoZSBmb2xsb3dpbmcKK2RvdCBjb21iaW5hdGlvbnMgYXJlIGludGVyY2VwdGVkIGJ5IHRoZSBCcmFpbGxlTm90ZSwgYW5kLCB0aGVyZWZvcmUsCithcmVuJ3Qgc2VlbiBieSB0aGUgY29tcHV0ZXI6IFsxXSwgWzRdLCBbMl0sIFs1XSwgWzNdLCBbNl0sIFsxNDVdLCBbMTI1XSwKK1syMzRdLCBbMjM0NV0uCisKKzBYODQ6IEFueSBjb21iaW5hdGlvbiBvZiB0aGUgdGh1bWIga2V5cy4gVGhlIHNlY29uZCBieXRlIGNvbnNpc3RzIG9mIGJpdCAwCisoMFgwMSkgZm9yIFByZXZpb3VzLCBiaXQgMSAoMFgwMikgZm9yIEJhY2ssIGJpdCAyICgwWDA0KSBmb3IgQWR2YW5jZSwgYW5kCitiaXQgMyAoMFgwOCkgZm9yIE5leHQuIFRocmVlLSBhbmQgZm91ci1rZXkgY29tYmluYXRpb25zIGRvbid0IHdvcmsuCisKKzBYODU6IEEgY3Vyc29yIHJvdXRpbmcga2V5LiBUaGUgc2Vjb25kIGJ5dGUgaXMgMFgwMCBmb3IgdGhlIGZpcnN0CisobGVmdG1vc3QpIGtleSwgMHgwMSBmb3IgdGhlIHNlY29uZCwgZXRjLiBUaGlzIHNlcXVlbmNlIGlzIHNlbnQgd2hlbiB0aGUKK2tleSBpcyBwcmVzc2VkLCByYXRoZXIgdGhhbiB3aGVuIGl0IGlzIHJlbGVhc2VkLCBhbmQgaXMgYXV0by1yZXBlYXRlZCBhcworbG9uZyBhcyB0aGUga2V5IGlzIGhlbGQgZG93bi4KKworSWYgIjxlc2NhcGU+PyIgaXMgc2VudCB0byBpdCwgdGhlbiBpdCByZXNwb25kcyB3aXRoIHRocmVlIGJ5dGVzOgorCisgICAgMTogMFg4NgorICAgIDI6IFRoZSBudW1iZXIgb2Ygc3RhdHVzIGNlbGxzLgorICAgIDM6IFRoZSBudW1iZXIgb2YgdGV4dCBjZWxscy4KKworVG8gcmVmcmVzaCB0aGUgYnJhaWxsZSBjZWxsczogc2VuZCAiPGVzY2FwZT5CIiwgZm9sbG93ZWQgYnkgb25lIGJ5dGUgZm9yCitlYWNoIHN0YXR1cyBjZWxsLCBmb2xsb3dlZCBieSBvbmUgYnl0ZSBmb3IgZWFjaCB0ZXh0IGNlbGwuIFRob3NlIHN0YXR1cworYW5kIHRleHQgYnl0ZXMgd2hpY2ggbWF0Y2ggIjxlc2NhcGU+IiAoMFgxQikgbXVzdCBiZSBzZW50IHR3aWNlLiAxLWJpdHMKK3JlcHJlc2VudCByYWlzZWQgZG90cywgYW5kIDAtYml0cyByZXByZXNlbnQgbG93ZXJlZCBkb3RzLgorCisgICAgQml0ICBIZXggIERvdAorICAgICAwICAgIDAxICAgMQorICAgICAxICAgIDAyICAgMgorICAgICAyICAgIDA0ICAgMworICAgICAzICAgIDA4ICAgNAorICAgICA0ICAgIDEwICAgNQorICAgICA1ICAgIDIwICAgNgorICAgICA2ICAgIDQwICAgNworICAgICA3ICAgIDgwICAgOAorCmRpZmYgLS1naXQgYS9Ecml2ZXJzL0JyYWlsbGUvQnJhaWxsZU5vdGUvUkVBRE1FIGIvRHJpdmVycy9CcmFpbGxlL0JyYWlsbGVOb3RlL1JFQURNRQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ODM4MDAwCi0tLSAvZGV2L251bGwKKysrIGIvRHJpdmVycy9CcmFpbGxlL0JyYWlsbGVOb3RlL1JFQURNRQpAQCAtMCwwICsxLDcwIEBACitUaGlzIGRpcmVjdG9yeSBjb250YWlucyB0aGUgQlJMVFRZIGRyaXZlciBmb3IgdGhlIEJyYWlsbGVOb3RlCitbaHR0cDovL3d3dy5icmFpbGxlbm90ZS5jb21dLCB3aGljaCBpcyBtYW51ZmFjdHVyZWQgYnkgUHVsc2UgRGF0YSBJbnRlcm5hdGlvbmFsCitbaHR0cDovL3d3dy5wdWxzZWRhdGEuY28ubnpdIG9mIE5ldyBaZWFsYW5kLiBBcyBhIGNvbXBvbmVudCBvZiBCUkxUVFksIHRoaXMKK2RyaXZlciBpcyByZWxlYXNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBQdWJsaWMgTGljZW5zZS4gSXQgaGFzIGJlZW4KK3Rlc3RlZCB3aXRoIEJyYWlsbE5vdGVzIDE4LCAzMiwgYW5kIEFwZXguCisKK0l0IHdhcyBpbXBsZW1lbnRlZCwgYW5kIGlzIGJlaW5nIG1haW50YWluZWQsIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCitUaGFua3MgdG8gTWlrZSBQZWRlcnNlbiA8bXBlZGVyc2VuQG1pbmRzcHJpbmcuY29tPiBmb3IgaGlzIGhlbHAgYW5kIGFkdmljZS4KKworVGhlcmUgYXJlIGEgbnVtYmVyIG9mIHdheXMgdG8gcHV0IHRoZSBCcmFpbGxlTm90ZSBpbnRvIGl0cyBCcmFpbGxlIFRlcm1pbmFsCitNb2RlLiBUaGUgcXVpY2tlc3Qgd2F5IGlzIHRvIHVzZSB0aGUgZGlyZWN0IGtleWJvYXJkIHNob3J0Y3V0CitiYWNrc3BhY2UrZW50ZXIrWzIzNDVdLiBBbm90aGVyIHdheSBpcyB0byBnbyB0byB0aGUgTWFpbiBNZW51IGJ5IHByZXNzaW5nCitzcGFjZStbMTIzNDU2XSwgYW5kIHRoZW4gc2VsZWN0aW5nIEJyYWlsbGUgVGVybWluYWwgTW9kZSBieSBwcmVzc2luZyB0aGUgbGV0dGVyCisidCIgWzIzNDVdLiBZZXQgYW5vdGhlciB3YXkgaXMgdG8gZ28gdG8gdGhlIE9wdGlvbnMgTWVudSBieSBwcmVzc2luZworc3BhY2UrWzEzNV0sIHRoZW4gZ29pbmcgdG8gdGhlIFRhc2sgTWVudSBieSBwcmVzc2luZyB0aGUgbGV0dGVyICJjIiBbMTRdLCBhbmQKK3RoZW4gc2VsZWN0aW5nIEJyYWlsbGUgVGVybWluYWwgTW9kZSBieSBwcmVzc2luZyB0aGUgbGV0dGVyICJ0IiBbMjM0NV0uCisKK1RoZSBCcmFpbGxlTm90ZSBkb2VzIG5vdCBpbmZvcm0gdGhlIGNvbXB1dGVyIHRoYXQgaXQgaGFzIGJlZW4gc3dpdGNoZWQgaW50byBpdHMKK0JyYWlsbGUgVGVybWluYWwgTW9kZS4gVGhpcyBtZWFucyB0aGF0IGl0J3MgZGlzcGxheSB3aWxsIG5vdCBhdXRvbWF0aWNhbGx5CityZWZyZXNoIHdpdGggdGhlIGNvbnRlbnRzIG9mIHRoZSBjb21wdXRlciBzY3JlZW4gdW50aWwgc29tZXRoaW5nIGhhcHBlbnMgd2hpY2gKK3JlcXVpcmVzIGFuIHVwZGF0aW5nIG9mIHRoZSBzdGF0ZSBvZiBpdHMgYnJhaWxsZSBjZWxscywgZS5nLiB3aGVuIGNvbnRlbnQKK3dpdGhpbiB0aGUgdGV4dCB3aW5kb3cgY2hhbmdlcywgb3IsIG9uIHRob3NlIG1vZGVscyB3aGljaCBoYXZlIHRoZW0sIHdoZW4gdGhlCitpbmZvcm1hdGlvbiByZXByZXNlbnRlZCBieSBpdHMgc3RhdHVzIGNlbGxzIGNoYW5nZXMuIFRoaXMgY291bGQgYmUgY2F1c2VkIGJ5CitzdWNoIHRoaW5ncyBhcyBuZXcgb3V0cHV0IGZyb20gdGhlIGNvbXB1dGVyLCBjdXJzb3IgbW90aW9uLCBvciB3aW5kb3cgbW90aW9uLgorT25lIGJydXRhbCBidXQgYmVuaWduIHdheSB0byBmb3JjZSBhIHJlZnJlc2ggb2YgdGhlIGJyYWlsbGUgY2VsbHMgaXMgdG8KK21hbnVhbGx5IHJlc3RhcnQgdGhlIGJyYWlsbGUgZHJpdmVyIGJ5IHByZXNzaW5nIHNwYWNlK2VudGVyK1sxMjM0NTZdLgorCisqICBGb3IgYSBsaXN0IG9mIGNvbW1hbmRzIGJ5IGZ1bmN0aW9uLCBzZWUgImhlbHAtY21kcy50eHQiLgorKiAgRm9yIGEgbGlzdCBvZiBjb21tYW5kcyBieSBrZXkgY29tYmluYXRpb24sIHNlZSAiaGVscC1rZXlzLnR4dCIuCisKK1RoZSB0aHVtYiBrZXlzIHByb3ZpZGUgYWNjZXNzIHRvIHRoZSBtb3N0IGNvbW1vbmx5IHVzZWQgc2NyZWVuIG5hdmlnYXRpb24KK2NvbW1hbmRzLiBDb21iaW5hdGlvbnMgb2YgZG90cyAxIHRocm91Z2ggNiBlaXRoZXIgcHJvdmlkZSBhY2Nlc3MgdG8gdGhlIGZ1bGwKK3NldCBvZiBzY3JlZW4gbmF2aWdhdGlvbiBjb21tYW5kcyAoaW5jbHVkaW5nIHRob3NlIHdoaWNoIGFyZSBhY2Nlc3NpYmxlIHZpYSB0aGUKK3RodW1iIGtleXMpIG9yLCBpZiBvbmUgb2YgdGhlIGlucHV0IG1vZGVzIGhhcyBiZWVuIHNlbGVjdGVkLCBhcmUgYSBrZXlib2FyZCBmb3IKK3RoZSBjdXJyZW50IHZpcnR1YWwgdGVybWluYWwuIENvbWJpbmF0aW9ucyBvZiBkb3RzIDEgdGhyb3VnaCA2LCB0b2dldGhlciB3aXRoCit0aGUgc3BhY2UgYmFyLCBwcm92aWRlIGFjY2VzcyB0byBjb21tYW5kcyB3aGljaCBjb250cm9sLCBhbmQgbWFrZSBzcGVjaWFsCityZXF1ZXN0cyBvZiwgdGhlIGRyaXZlci4gRHJpdmVyIG9wdGlvbnMgY2FuIGJlIGVuYWJsZWQgdmlhIGNvbWJpbmF0aW9ucyBvZiBkb3RzCisxIHRocm91Z2ggNiB0b2dldGhlciB3aXRoIHRoZSBzcGFjZSBiYXIgYW5kIHRoZSBlbnRlciBrZXksIGFuZCBjYW4gYmUgZGlzYWJsZWQKK3ZpYSBjb21iaW5hdGlvbnMgb2YgZG90cyAxIHRocm91Z2ggNiB0b2dldGhlciB3aXRoIHRoZSBzcGFjZSBiYXIgYW5kIHRoZQorYmFja3NwYWNlIGtleS4gU29tZSBzcGVjaWFsIGNvbW1hbmRzLCBkdWUgdG8gdGhlIG5lZWQgdG8gYXNzaWduIGxvZ2ljYWwga2V5Citjb21iaW5hdGlvbnMsIGFuZCBhZ2dyYXZhdGVkIGJlY2F1c2UgdGhlIEJyYWlsbGVOb3RlIGl0c2VsZiBpbnRlcmNlcHRzIGNlcnRhaW4KK2tleSBjb21iaW5hdGlvbnMgZm9yIGl0cyBvd24gcHVycG9zZXMsIHZpb2xhdGUgdGhlc2UgY29udmVudGlvbnMuCisKK1RoZSBCcmFpbGxlTm90ZSwgYXQgbGVhc3QgYXMgb2YgdGhlIHRpbWUgb2YgdGhpcyB3cml0aW5nLCBkb2Vzbid0IHNpZ25hbCB0aGUKK3ByZXNzaW5nIG9mIGRvdCA3IChiYWNrc3BhY2UpIGFuZC9vciBkb3QgOCAoZW50ZXIpIHVubGVzcyB0aGUgc3BhY2UgYmFyIGlzIGFsc28KK3NpbXVsdGFuZW91c2x5IHByZXNzZWQuIFRoaXMgbWFrZXMgdGhlIHN0cmFpZ2h0Zm9yd2FyZCBlbnRyeSBvZiA4LWRvdCBjb21wdXRlcgorYnJhaWxsZSBpbXBvc3NpYmxlLiBBIHNjaGVtZSBoYXMgYmVlbiBpbXBsZW1lbnRlZCwgdGhlcmVmb3JlLCB0byBnZXQgYXJvdW5kCit0aGlzIGxpbWl0YXRpb24uIEl0IGFsbG93cyB0aGUgc3RhdGVzIChvbiBvciBvZmYpIG9mIGJvdGggZG90IDcgYW5kIGRvdCA4IHRvIGJlCitlaXRoZXIgdGVtcG9yYXJpbHkgKGp1c3QgZm9yIHRoZSBuZXh0IGNoYXJhY3Rlcikgb3IgcGVybWFuZW50bHkgY2hhbmdlZC4gSXQKK3VzZXMgdGhlIGNob3JkIG9mIGRvdCA0IGFuZCB0aGUgc3BhY2UgYmFyLCB0b2dldGhlciB3aXRoIGFsbCBwb3NzaWJsZQorY29tYmluYXRpb25zIG9mIGRvdHMgMywgNSwgYW5kIDYuCisKK0RvdCA1IHJlcXVlc3RzIGEgcGVybWFuZW50IHN0YXRlIGNoYW5nZSwgZG90IDMgcmVwcmVzZW50cyBkb3QgNywgYW5kIGRvdCA2CityZXByZXNlbnRzIGRvdCA4LiBQcmVzc2luZyBkb3QgNCB0b2dldGhlciB3aXRoIHRoZSBzcGFjZSBiYXIgaW5kaWNhdGVzIHRoYXQgeW91Cit3aXNoIHRvIGVudGVyIG9uZSBjaGFyYWN0ZXI7IGlmIGFuIGlucHV0IG1vZGUgaGFzIGFscmVhZHkgYmVlbiBzZWxlY3RlZCwgdGhlbgoraXQgaW5kaWNhdGVzIHRoYXQgeW91IHdpc2ggdG8gdGVtcG9yYXJpbHkgY2hhbmdlIHRoZSBzdGF0ZXMgb2YgZG90cyA3IGFuZCA4LgorUHJlc3NpbmcgYm90aCBkb3RzIDQgYW5kIDUgdG9nZXRoZXIgd2l0aCB0aGUgc3BhY2UgYmFyIGluZGljYXRlcyB0aGF0IHlvdSB3aXNoCit0byBwZXJtYW5lbnRseSBzd2l0Y2ggdG8gYW4gaW5wdXQgbW9kZTsgaWYgb25lIGhhcyBhbHJlYWR5IGJlZW4gc2VsZWN0ZWQsIHRoZW4KK2l0IGluZGljYXRlcyB0aGF0IHlvdSB3aXNoIHRvIHBlcm1hbmVudGx5IGNoYW5nZSB0aGUgc3RhdGVzIG9mIGRvdHMgNyBhbmQgOC4gSW4KK2Nvbmp1bmN0aW9uIHdpdGggZWl0aGVyIG9mIHRoZSBmb3JlLWdvaW5nOiBwcmVzc2luZyBkb3QgMyB0dXJucyBkb3QgNyBvbiwgYW5kCitwcmVzc2luZyBkb3QgNiB0dXJucyBkb3QgOCBvbi4gVGhlIGJyYWlsbGUga2V5Ym9hcmQgY2FuIGJlIHJldHVybmVkIHRvIHNjcmVlbgorbmF2aWdhdGlvbiBtb2RlIGJ5IHByZXNzaW5nIHRoZSBsZXR0ZXIgIm4iIChkb3RzIDEsIDMsIDQsIGFuZSA1KSB0b2dldGhlciB3aXRoCit0aGUgc3BhY2UgYmFyLgorCitXaGVuIHRoZSBCcmFpbGxlTm90ZSdzIFZpc3VhbCBEaXNwbGF5IGlzIGFzc2lnbmVkIHRvIHRoZSBzZXJpYWwgcG9ydCwgdGhlbiBhCitmcmVlIHZpcnR1YWwgdGVybWluYWwgaXMgYWN0aXZhdGVkIGFuZCBiZWNvbWVzIHRoYXQgZGlzcGxheS4gV2hlbiB0aGUgVmlzdWFsCitEaXNwbGF5IGlzIHN1YnNlcXVlbnRseSBlaXRoZXIgdHVybmVkIG9mZiBvciByZWFzc2lnbmVkIHRvIGEgZGlmZmVyZW50IHBvcnQsCit0aGVuIHRoaXMgdmlydHVhbCB0ZXJtaW5hbCBpcyByZWxlYXNlZCwgYW5kLCBpZiBpdCBpcyBhY3RpdmUsIHRoZW4gdGhlIHZpcnR1YWwKK3Rlcm1pbmFsIHdoaWNoIHdhcyBhY3RpdmUgd2hlbiB0aGUgZGlzcGxheSB3YXMgYXNzaWduZWQgdG8gdGhlIHNlcmlhbCBwb3J0IGlzCityZWFjdGl2YXRlZC4KZGlmZiAtLWdpdCBhL0RyaXZlcnMvQnJhaWxsZS9CcmFpbGxlTm90ZS9UT0RPIGIvRHJpdmVycy9CcmFpbGxlL0JyYWlsbGVOb3RlL1RPRE8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2M3NTA4MQotLS0gL2Rldi9udWxsCisrKyBiL0RyaXZlcnMvQnJhaWxsZS9CcmFpbGxlTm90ZS9UT0RPCkBAIC0wLDAgKzEgQEAKK0FkZCBzdXBwb3J0IGZvcjogQVRUUkJMSU5LIENTUkJMSU5LIENBUEJMSU5LIEFUVFJWSVMgQ1NSVklTIE5YQkxOS0xOIFBSQkxOS0xOIFNBWUFMTCBTTkQKZGlmZiAtLWdpdCBhL0RyaXZlcnMvQnJhaWxsZS9CcmFpbGxlTm90ZS9icmFpbGxlLmMgYi9Ecml2ZXJzL0JyYWlsbGUvQnJhaWxsZU5vdGUvYnJhaWxsZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA4ZjczOTAKLS0tIC9kZXYvbnVsbAorKysgYi9Ecml2ZXJzL0JyYWlsbGUvQnJhaWxsZU5vdGUvYnJhaWxsZS5jCkBAIC0wLDAgKzEsNTcxIEBACisvKgorICogQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyAqICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyAqCisgKiBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorICoKKyAqIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyAqCisgKiBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisgKi8KKworLyogQnJhaWxsZU5vdGUvYnJhaWxsZS5jIC0gQnJhaWxsZSBkaXNwbGF5IGxpYnJhcnkKKyAqIEZvciBQdWxzZSBEYXRhIEludGVybmF0aW9uYWwncyBCcmFpbGxlIE5vdGUgc2VyaWVzCisgKiBBdXRob3I6IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4KKyAqLworCisjaW5jbHVkZSAicHJvbG9ndWUuaCIKKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKworI2luY2x1ZGUgImxvZy5oIgorI2luY2x1ZGUgImRldmljZS5oIgorCisjZGVmaW5lIEJSTF9IQVZFX1BBQ0tFVF9JTworI2luY2x1ZGUgImJybF9kcml2ZXIuaCIKKyNpbmNsdWRlICJicmxkZWZzLWJuLmgiCisjaW5jbHVkZSAidHRiLmgiCisKK0JFR0lOX0tFWV9OQU1FX1RBQkxFKGFsbCkKKyAgS0VZX05BTUVfRU5UUlkoQk5fS0VZX0RvdDEsICJEb3QxIiksCisgIEtFWV9OQU1FX0VOVFJZKEJOX0tFWV9Eb3QyLCAiRG90MiIpLAorICBLRVlfTkFNRV9FTlRSWShCTl9LRVlfRG90MywgIkRvdDMiKSwKKyAgS0VZX05BTUVfRU5UUlkoQk5fS0VZX0RvdDQsICJEb3Q0IiksCisgIEtFWV9OQU1FX0VOVFJZKEJOX0tFWV9Eb3Q1LCAiRG90NSIpLAorICBLRVlfTkFNRV9FTlRSWShCTl9LRVlfRG90NiwgIkRvdDYiKSwKKworICBLRVlfTkFNRV9FTlRSWShCTl9LRVlfU3BhY2UsICJTcGFjZSIpLAorICBLRVlfTkFNRV9FTlRSWShCTl9LRVlfQmFja3NwYWNlLCAiQmFja3NwYWNlIiksCisgIEtFWV9OQU1FX0VOVFJZKEJOX0tFWV9FbnRlciwgIkVudGVyIiksCisKKyAgS0VZX05BTUVfRU5UUlkoQk5fS0VZX1ByZXZpb3VzLCAiUHJldmlvdXMiKSwKKyAgS0VZX05BTUVfRU5UUlkoQk5fS0VZX0JhY2ssICJCYWNrIiksCisgIEtFWV9OQU1FX0VOVFJZKEJOX0tFWV9BZHZhbmNlLCAiQWR2YW5jZSIpLAorICBLRVlfTkFNRV9FTlRSWShCTl9LRVlfTmV4dCwgIk5leHQiKSwKKworICBLRVlfR1JPVVBfRU5UUlkoQk5fR1JQX1JvdXRpbmdLZXlzLCAiUm91dGluZ0tleSIpLAorRU5EX0tFWV9OQU1FX1RBQkxFCisKK0JFR0lOX0tFWV9OQU1FX1RBQkxFUyhhbGwpCisgIEtFWV9OQU1FX1RBQkxFKGFsbCksCitFTkRfS0VZX05BTUVfVEFCTEVTCisKK0RFRklORV9LRVlfVEFCTEUoYWxsKQorCitCRUdJTl9LRVlfVEFCTEVfTElTVAorICAmS0VZX1RBQkxFX0RFRklOSVRJT04oYWxsKSwKK0VORF9LRVlfVEFCTEVfTElTVAorCit0eXBlZGVmIHVuaW9uIHsKKyAgdW5zaWduZWQgY2hhciBieXRlc1szXTsKKyAgc3RydWN0IHsKKyAgICB1bnNpZ25lZCBjaGFyIGNvZGU7CisgICAgdW5pb24geworICAgICAgdW5zaWduZWQgY2hhciBkb3RLZXlzOworICAgICAgdW5zaWduZWQgY2hhciB0aHVtYktleXM7CisgICAgICB1bnNpZ25lZCBjaGFyIHJvdXRpbmdLZXk7CisgICAgICB1bnNpZ25lZCBjaGFyIGlucHV0Q2hhcjsKKyAgICAgIHVuc2lnbmVkIGNoYXIgaW5wdXRWS2V5OworCisgICAgICBzdHJ1Y3QgeworICAgICAgICB1bnNpZ25lZCBjaGFyIHN0YXR1c0NlbGxzOworICAgICAgICB1bnNpZ25lZCBjaGFyIHRleHRDZWxsczsKKyAgICAgIH0gZGVzY3JpcHRpb247CisgICAgfSB2YWx1ZXM7CisgIH0gZGF0YTsKK30gUmVzcG9uc2VQYWNrZXQ7CisKKyNpZmRlZiBIQVZFX0xJTlVYX1ZUX0gKKyNpbmNsdWRlIDxmY250bC5oPgorI2luY2x1ZGUgPHN5cy9pb2N0bC5oPgorI2luY2x1ZGUgPGxpbnV4L3Z0Lmg+CisjZW5kaWYgLyogSEFWRV9MSU5VWF9WVF9IICovCitzdGF0aWMgaW50IGRpc3BsYXlEZXNjcmlwdG9yID0gLTE7CitzdGF0aWMgaW50IGRpc3BsYXlUZXJtaW5hbDsKKworc3RhdGljIHVuc2lnbmVkIGNoYXIgKmNlbGxCdWZmZXIgPSBOVUxMOworc3RhdGljIHVuc2lnbmVkIGludCBjZWxsQ291bnQgPSAwOworc3RhdGljIHVuc2lnbmVkIGNoYXIgKnN0YXR1c0FyZWE7CitzdGF0aWMgaW50IHN0YXR1c0NlbGxzOworc3RhdGljIHVuc2lnbmVkIGNoYXIgKmRhdGFBcmVhOworc3RhdGljIGludCBkYXRhQ2VsbHM7CisKK3N0YXRpYyBpbnQgaW5wdXRGbGFncyA9IDA7CisKK3N0YXRpYyBpbnQKK3JlYWRQYWNrZXQgKEJyYWlsbGVEaXNwbGF5ICpicmwsIHVuc2lnbmVkIGNoYXIgKnBhY2tldCwgaW50IHNpemUpIHsKKyAgaW50IG9mZnNldCA9IDA7CisgIGludCBsZW5ndGggPSAwOworCisgIHdoaWxlICgxKSB7CisgICAgdW5zaWduZWQgY2hhciBieXRlOworCisgICAgaWYgKCFnaW9SZWFkQnl0ZShicmwtPmdpb0VuZHBvaW50LCAmYnl0ZSwgKG9mZnNldCA+IDApKSkgeworICAgICAgaWYgKG9mZnNldCA+IDApIGxvZ1BhcnRpYWxQYWNrZXQocGFja2V0LCBvZmZzZXQpOworICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgaWYgKG9mZnNldCA8IHNpemUpIHsKKyAgICAgIGlmIChvZmZzZXQgPT0gMCkgeworICAgICAgICBzd2l0Y2ggKGJ5dGUpIHsKKyAgICAgICAgICBjYXNlIEJOX1JTUF9ESVNQTEFZOgorICAgICAgICAgICAgbGVuZ3RoID0gMTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgY2FzZSBCTl9SU1BfQ0hBUkFDVEVSOgorICAgICAgICAgIGNhc2UgQk5fUlNQX1NQQUNFOgorICAgICAgICAgIGNhc2UgQk5fUlNQX0JBQ0tTUEFDRToKKyAgICAgICAgICBjYXNlIEJOX1JTUF9FTlRFUjoKKyAgICAgICAgICBjYXNlIEJOX1JTUF9USFVNQjoKKyAgICAgICAgICBjYXNlIEJOX1JTUF9ST1VURToKKyAgICAgICAgICBjYXNlIEJOX1JTUF9JTlBVVF9DSEFSOgorICAgICAgICAgIGNhc2UgQk5fUlNQX0lOUFVUX1ZLRVk6CisgICAgICAgICAgY2FzZSBCTl9SU1BfSU5QVVRfUkVTRVQ6CisgICAgICAgICAgY2FzZSBCTl9SU1BfUVdFUlRZX0tFWToKKyAgICAgICAgICBjYXNlIEJOX1JTUF9RV0VSVFlfTU9EUzoKKyAgICAgICAgICAgIGxlbmd0aCA9IDI7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgIGNhc2UgQk5fUlNQX0RFU0NSSUJFOgorICAgICAgICAgICAgbGVuZ3RoID0gMzsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGxvZ1Vua25vd25QYWNrZXQoYnl0ZSk7CisgICAgICAgICAgICBvZmZzZXQgPSAwOworICAgICAgICAgICAgbGVuZ3RoID0gMDsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICB9CisKKyAgICAgIHBhY2tldFtvZmZzZXRdID0gYnl0ZTsKKyAgICB9IGVsc2UgeworICAgICAgaWYgKG9mZnNldCA9PSBzaXplKSBsb2dUcnVuY2F0ZWRQYWNrZXQocGFja2V0LCBvZmZzZXQpOworICAgICAgbG9nRGlzY2FyZGVkQnl0ZShieXRlKTsKKyAgICB9CisKKyAgICBpZiAoKytvZmZzZXQgPT0gbGVuZ3RoKSB7CisgICAgICBpZiAob2Zmc2V0ID4gc2l6ZSkgeworICAgICAgICBvZmZzZXQgPSAwOworICAgICAgICBsZW5ndGggPSAwOworICAgICAgICBjb250aW51ZTsKKyAgICAgIH0KKworICAgICAgbG9nSW5wdXRQYWNrZXQocGFja2V0LCBvZmZzZXQpOworICAgICAgcmV0dXJuIGxlbmd0aDsKKyAgICB9CisgIH0KK30KKworc3RhdGljIGludAorZ2V0UGFja2V0IChCcmFpbGxlRGlzcGxheSAqYnJsLCBSZXNwb25zZVBhY2tldCAqcGFja2V0KSB7CisgIHJldHVybiByZWFkUGFja2V0KGJybCwgcGFja2V0LT5ieXRlcywgc2l6ZW9mKCpwYWNrZXQpKTsKK30KKworc3RhdGljIGludAord3JpdGVQYWNrZXQgKEJyYWlsbGVEaXNwbGF5ICpicmwsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnBhY2tldCwgaW50IHNpemUpIHsKKyAgdW5zaWduZWQgY2hhciBidWZmZXJbMSArIChzaXplICogMildOworICB1bnNpZ25lZCBjaGFyICpieXRlID0gYnVmZmVyOworCisgICpieXRlKysgPSBCTl9SRVFfQkVHSU47CisKKyAgd2hpbGUgKHNpemUgPiAwKSB7CisgICAgaWYgKCgqYnl0ZSsrID0gKnBhY2tldCsrKSA9PSBCTl9SRVFfQkVHSU4pICpieXRlKysgPSBCTl9SRVFfQkVHSU47CisgICAgLS1zaXplOworICB9CisKKyAgcmV0dXJuIHdyaXRlQnJhaWxsZVBhY2tldChicmwsIE5VTEwsIGJ1ZmZlciwgYnl0ZS1idWZmZXIpOworfQorCitzdGF0aWMgaW50CityZWZyZXNoQ2VsbHMgKEJyYWlsbGVEaXNwbGF5ICpicmwpIHsKKyAgdW5zaWduZWQgY2hhciBidWZmZXJbMSArIGNlbGxDb3VudF07CisgIHVuc2lnbmVkIGNoYXIgKmJ5dGUgPSBidWZmZXI7CisKKyAgKmJ5dGUrKyA9IEJOX1JFUV9XUklURTsKKyAgYnl0ZSA9IHRyYW5zbGF0ZU91dHB1dENlbGxzKGJ5dGUsIGNlbGxCdWZmZXIsIGNlbGxDb3VudCk7CisKKyAgcmV0dXJuIHdyaXRlUGFja2V0KGJybCwgYnVmZmVyLCBieXRlLWJ1ZmZlcik7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBjaGFyCitnZXRCeXRlIChCcmFpbGxlRGlzcGxheSAqYnJsKSB7CisgIHVuc2lnbmVkIGNoYXIgYnl0ZTsKKyAgd2hpbGUgKCFhd2FpdEJyYWlsbGVJbnB1dChicmwsIDEwMDAwMDAwMDApKTsKKyAgZ2lvUmVhZEJ5dGUoYnJsLT5naW9FbmRwb2ludCwgJmJ5dGUsIDApOworICByZXR1cm4gYnl0ZTsKK30KKworc3RhdGljIGludAorZ2V0VmlydHVhbFRlcm1pbmFsICh2b2lkKSB7CisgIGludCB2dCA9IC0xOworI2lmZGVmIEhBVkVfTElOVVhfVlRfSAorICBGSUxFICpjb25zb2xlID0gZ2V0Q29uc29sZSgpOworICBpZiAoY29uc29sZSkgeworICAgIGludCBjb25zb2xlRGVzY3JpcHRvciA9IGZpbGVubyhjb25zb2xlKTsKKyAgICBzdHJ1Y3QgdnRfc3RhdCBzdGF0ZTsKKyAgICBpZiAoaW9jdGwoY29uc29sZURlc2NyaXB0b3IsIFZUX0dFVFNUQVRFLCAmc3RhdGUpICE9IC0xKSB7CisgICAgICB2dCA9IHN0YXRlLnZfYWN0aXZlOworICAgIH0KKyAgfQorI2VuZGlmIC8qIEhBVkVfTElOVVhfVlRfSCAqLworICByZXR1cm4gdnQ7Cit9CisKK3N0YXRpYyB2b2lkCitzZXRWaXJ0dWFsVGVybWluYWwgKGludCB2dCkgeworI2lmZGVmIEhBVkVfTElOVVhfVlRfSAorICBGSUxFICpjb25zb2xlID0gZ2V0Q29uc29sZSgpOworICBpZiAoY29uc29sZSkgeworICAgIGludCBjb25zb2xlRGVzY3JpcHRvciA9IGZpbGVubyhjb25zb2xlKTsKKyAgICBsb2dNZXNzYWdlKExPR19ERUJVRywgInN3aXRjaGluZyB0byB2aXJ0dWFsIHRlcm1pbmFsICVkIiwgdnQpOworICAgIGlmIChpb2N0bChjb25zb2xlRGVzY3JpcHRvciwgVlRfQUNUSVZBVEUsIHZ0KSAhPSAtMSkgeworICAgICAgaWYgKGlvY3RsKGNvbnNvbGVEZXNjcmlwdG9yLCBWVF9XQUlUQUNUSVZFLCB2dCkgIT0gLTEpIHsKKyAgICAgICAgbG9nTWVzc2FnZShMT0dfSU5GTywgInN3aXRjaGVkIHRvIHZpcnR1YWwgdGVybWluYWwgJWQiLCB2dCk7CisgICAgICB9IGVsc2UgeworICAgICAgICBsb2dTeXN0ZW1FcnJvcigidmlydHVhbCBjb25zb2xlIHdhaXQiKTsKKyAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgbG9nU3lzdGVtRXJyb3IoInZpcnR1YWwgY29uc29sZSBhY3RpdmF0ZSIpOworICAgIH0KKyAgfQorI2VuZGlmIC8qIEhBVkVfTElOVVhfVlRfSCAqLworfQorCitzdGF0aWMgdm9pZAorb3BlblZpc3VhbERpc3BsYXkgKHZvaWQpIHsKKyNpZmRlZiBIQVZFX0xJTlVYX1ZUX0gKKyAgaWYgKGRpc3BsYXlEZXNjcmlwdG9yID09IC0xKSB7CisgICAgRklMRSAqY29uc29sZSA9IGdldENvbnNvbGUoKTsKKyAgICBpZiAoY29uc29sZSkgeworICAgICAgaW50IGNvbnNvbGVEZXNjcmlwdG9yID0gZmlsZW5vKGNvbnNvbGUpOworICAgICAgaWYgKGlvY3RsKGNvbnNvbGVEZXNjcmlwdG9yLCBWVF9PUEVOUVJZLCAmZGlzcGxheVRlcm1pbmFsKSAhPSAtMSkgeworICAgICAgICBjaGFyIHBhdGhbMFgyMF07CisgICAgICAgIHNucHJpbnRmKHBhdGgsIHNpemVvZihwYXRoKSwgIi9kZXYvdHR5JWQiLCBkaXNwbGF5VGVybWluYWwpOworICAgICAgICBpZiAoKGRpc3BsYXlEZXNjcmlwdG9yID0gb3BlbihwYXRoLCBPX1dST05MWSkpICE9IC0xKSB7CisgICAgICAgICAgbG9nTWVzc2FnZShMT0dfSU5GTywgInZpc3VhbCBkaXNwbGF5IGlzICVzIiwgcGF0aCk7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9CisgIH0KKyBpZiAoZGlzcGxheURlc2NyaXB0b3IgIT0gLTEpIHsKKyAgIHNldFZpcnR1YWxUZXJtaW5hbChkaXNwbGF5VGVybWluYWwpOworICB9CisjZW5kaWYgLyogSEFWRV9MSU5VWF9WVF9IICovCit9CisKK3N0YXRpYyB2b2lkCitjbG9zZVZpc3VhbERpc3BsYXkgKGludCB2dCkgeworICBpZiAoZGlzcGxheURlc2NyaXB0b3IgIT0gLTEpIHsKKyAgICBpZiAoZ2V0VmlydHVhbFRlcm1pbmFsKCkgPT0gZGlzcGxheVRlcm1pbmFsKSB7CisgICAgICBzZXRWaXJ0dWFsVGVybWluYWwodnQpOworICAgIH0KKyAgICBjbG9zZShkaXNwbGF5RGVzY3JpcHRvcik7CisgICAgZGlzcGxheURlc2NyaXB0b3IgPSAtMTsKKyAgICBkaXNwbGF5VGVybWluYWwgPSAwOworICB9Cit9CisKK3N0YXRpYyBpbnQKK3dyaXRlVmlzdWFsRGlzcGxheSAodW5zaWduZWQgY2hhciBjKSB7CisgIGlmIChkaXNwbGF5RGVzY3JpcHRvciAhPSAtMSkgeworICAgIGlmICh3cml0ZShkaXNwbGF5RGVzY3JpcHRvciwgJmMsIDEpID09IC0xKSB7CisgICAgICBsb2dTeXN0ZW1FcnJvcigid3JpdGUiKTsKKyAgICAgIHJldHVybiAwOworICAgIH0KKyAgfQorCisgIHJldHVybiAxOworfQorCitzdGF0aWMgaW50Citkb1Zpc3VhbERpc3BsYXkgKEJyYWlsbGVEaXNwbGF5ICpicmwpIHsKKyAgaW50IHZ0ID0gZ2V0VmlydHVhbFRlcm1pbmFsKCk7CisgIGNvbnN0IHVuc2lnbmVkIGNoYXIgZW5kW10gPSB7QVNDSUlfRVNDLCAwfTsKKyAgdW5zaWduZWQgaW50IHN0YXRlID0gMDsKKyAgb3BlblZpc3VhbERpc3BsYXkoKTsKKyAgd3JpdGVWaXN1YWxEaXNwbGF5KEJOX1JTUF9ESVNQTEFZKTsKKyAgZm9yICg7OykgeworICAgIHVuc2lnbmVkIGNoYXIgY2hhcmFjdGVyID0gZ2V0Qnl0ZShicmwpOworICAgIGlmIChjaGFyYWN0ZXIgPT0gZW5kW3N0YXRlXSkgeworICAgICAgaWYgKCsrc3RhdGUgPT0gc2l6ZW9mKGVuZCkpIGJyZWFrOworICAgIH0gZWxzZSB7CisgICAgICBpZiAoc3RhdGUgPiAwKSB7CisgICAgICAgIGludCBpOworICAgICAgICBmb3IgKGk9MDsgaTxzdGF0ZTsgKytpKSB7CisgICAgICAgICAgd3JpdGVWaXN1YWxEaXNwbGF5KGVuZFtpXSk7CisgICAgICAgIH0KKyAgICAgICAgc3RhdGUgPSAwOworICAgICAgfQorICAgICAgaWYgKGNoYXJhY3RlciA9PSBlbmRbMF0pIHsKKyAgICAgICAgc3RhdGUgPSAxOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgd3JpdGVWaXN1YWxEaXNwbGF5KGNoYXJhY3Rlcik7CisgICAgICB9CisgICAgfQorICB9CisgIGNsb3NlVmlzdWFsRGlzcGxheSh2dCk7CisgIHJldHVybiBFT0Y7Cit9CisKK3N0YXRpYyBpbnQKK3dyaXRlSWRlbnRpZnlSZXF1ZXN0IChCcmFpbGxlRGlzcGxheSAqYnJsKSB7CisgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHJlcXVlc3RbXSA9IHtCTl9SRVFfREVTQ1JJQkV9OworCisgIHJldHVybiB3cml0ZVBhY2tldChicmwsIHJlcXVlc3QsIHNpemVvZihyZXF1ZXN0KSk7Cit9CisKK3N0YXRpYyBzaXplX3QKK3JlYWRSZXNwb25zZSAoQnJhaWxsZURpc3BsYXkgKmJybCwgdm9pZCAqcGFja2V0LCBzaXplX3Qgc2l6ZSkgeworICByZXR1cm4gcmVhZFBhY2tldChicmwsIHBhY2tldCwgc2l6ZSk7Cit9CisKK3N0YXRpYyBCcmFpbGxlUmVzcG9uc2VSZXN1bHQKK2lzSWRlbnRpdHlSZXNwb25zZSAoQnJhaWxsZURpc3BsYXkgKmJybCwgY29uc3Qgdm9pZCAqcGFja2V0LCBzaXplX3Qgc2l6ZSkgeworICBjb25zdCBSZXNwb25zZVBhY2tldCAqcmVzcG9uc2UgPSBwYWNrZXQ7CisKKyAgcmV0dXJuIChyZXNwb25zZS0+ZGF0YS5jb2RlID09IEJOX1JTUF9ERVNDUklCRSk/IEJSTF9SU1BfRE9ORTogQlJMX1JTUF9VTkVYUEVDVEVEOworfQorCitzdGF0aWMgaW50Citjb25uZWN0UmVzb3VyY2UgKEJyYWlsbGVEaXNwbGF5ICpicmwsIGNvbnN0IGNoYXIgKmlkZW50aWZpZXIpIHsKKyAgc3RhdGljIGNvbnN0IFNlcmlhbFBhcmFtZXRlcnMgc2VyaWFsUGFyYW1ldGVycyA9IHsKKyAgICBTRVJJQUxfREVGQVVMVF9QQVJBTUVURVJTLAorICAgIC5iYXVkID0gMzg0MDAKKyAgfTsKKworICBCRUdJTl9VU0JfQ0hBTk5FTF9ERUZJTklUSU9OUworICAgIHsgLyogSHVtYW5XYXJlIEFQRVggKi8KKyAgICAgIC52ZW5kb3I9MFgxQzcxLCAucHJvZHVjdD0wWEMwMDQsCisgICAgICAuY29uZmlndXJhdGlvbj0xLCAuaW50ZXJmYWNlPTAsIC5hbHRlcm5hdGl2ZT0wLAorICAgICAgLmlucHV0RW5kcG9pbnQ9MSwgLm91dHB1dEVuZHBvaW50PTIKKyAgICB9LAorICBFTkRfVVNCX0NIQU5ORUxfREVGSU5JVElPTlMKKworICBHaW9EZXNjcmlwdG9yIGRlc2NyaXB0b3I7CisgIGdpb0luaXRpYWxpemVEZXNjcmlwdG9yKCZkZXNjcmlwdG9yKTsKKworICBkZXNjcmlwdG9yLnNlcmlhbC5wYXJhbWV0ZXJzID0gJnNlcmlhbFBhcmFtZXRlcnM7CisKKyAgZGVzY3JpcHRvci51c2IuY2hhbm5lbERlZmluaXRpb25zID0gdXNiQ2hhbm5lbERlZmluaXRpb25zOworCisgIGlmIChjb25uZWN0QnJhaWxsZVJlc291cmNlKGJybCwgaWRlbnRpZmllciwgJmRlc2NyaXB0b3IsIE5VTEwpKSB7CisgICAgcmV0dXJuIDE7CisgIH0KKworICByZXR1cm4gMDsKK30KKworc3RhdGljIGludAordmlydHVhbEtleVRvQ29tbWFuZCAoaW50IHZrZXkpIHsKKyAgc3dpdGNoICh2a2V5KSB7CisgICAgY2FzZSAwWDBEOiByZXR1cm4gQlJMX0NNRF9CTEsoUEFTU0tFWSkgfCBCUkxfS0VZX0VOVEVSOworICAgIGNhc2UgMFgxQjogcmV0dXJuIEJSTF9DTURfQkxLKFBBU1NLRVkpIHwgQlJMX0tFWV9FU0NBUEU7CisgICAgY2FzZSAwWDI1OiByZXR1cm4gQlJMX0NNRF9CTEsoUEFTU0tFWSkgfCBCUkxfS0VZX0NVUlNPUl9MRUZUOworICAgIGNhc2UgMFgyNjogcmV0dXJuIEJSTF9DTURfQkxLKFBBU1NLRVkpIHwgQlJMX0tFWV9DVVJTT1JfVVA7CisgICAgY2FzZSAwWDI3OiByZXR1cm4gQlJMX0NNRF9CTEsoUEFTU0tFWSkgfCBCUkxfS0VZX0NVUlNPUl9SSUdIVDsKKyAgICBjYXNlIDBYMjg6IHJldHVybiBCUkxfQ01EX0JMSyhQQVNTS0VZKSB8IEJSTF9LRVlfQ1VSU09SX0RPV047CisgICAgY2FzZSAwWDJFOiByZXR1cm4gQlJMX0NNRF9CTEsoUEFTU0tFWSkgfCBCUkxfS0VZX0RFTEVURTsKKyAgICBkZWZhdWx0OiAgIHJldHVybiBCUkxfQ01EX05PT1A7CisgIH0KK30KKworc3RhdGljIGludAorYnJsX2NvbnN0cnVjdCAoQnJhaWxsZURpc3BsYXkgKmJybCwgY2hhciAqKnBhcmFtZXRlcnMsIGNvbnN0IGNoYXIgKmRldmljZSkgeworICBpZiAoY29ubmVjdFJlc291cmNlKGJybCwgZGV2aWNlKSkgeworICAgIFJlc3BvbnNlUGFja2V0IHJlc3BvbnNlOworCisgICAgaWYgKHByb2JlQnJhaWxsZURpc3BsYXkoYnJsLCAwLCBOVUxMLCAxMDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZUlkZW50aWZ5UmVxdWVzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRSZXNwb25zZSwgJnJlc3BvbnNlLCBzaXplb2YocmVzcG9uc2UpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNJZGVudGl0eVJlc3BvbnNlKSkgeworICAgICAgc3RhdHVzQ2VsbHMgPSByZXNwb25zZS5kYXRhLnZhbHVlcy5kZXNjcmlwdGlvbi5zdGF0dXNDZWxsczsKKyAgICAgIGJybC0+dGV4dENvbHVtbnMgPSByZXNwb25zZS5kYXRhLnZhbHVlcy5kZXNjcmlwdGlvbi50ZXh0Q2VsbHM7CisgICAgICBicmwtPnRleHRSb3dzID0gMTsKKworICAgICAgaWYgKChzdGF0dXNDZWxscyA9PSA1KSAmJiAoYnJsLT50ZXh0Q29sdW1ucyA9PSAzMCkpIHsKKyAgICAgICAgc3RhdHVzQ2VsbHMgLT0gMjsKKyAgICAgICAgYnJsLT50ZXh0Q29sdW1ucyArPSAyOworICAgICAgfQorCisgICAgICBkYXRhQ2VsbHMgPSBicmwtPnRleHRDb2x1bW5zICogYnJsLT50ZXh0Um93czsKKyAgICAgIGNlbGxDb3VudCA9IHN0YXR1c0NlbGxzICsgZGF0YUNlbGxzOworCisgICAgICBzZXRCcmFpbGxlS2V5VGFibGUoYnJsLCAmS0VZX1RBQkxFX0RFRklOSVRJT04oYWxsKSk7CisgICAgICBtYWtlT3V0cHV0VGFibGUoZG90c1RhYmxlX0lTTzExNTQ4XzEpOworICAgICAgbWFrZUlucHV0VGFibGUoKTsKKworICAgICAgaWYgKChjZWxsQnVmZmVyID0gbWFsbG9jKGNlbGxDb3VudCkpKSB7CisgICAgICAgIG1lbXNldChjZWxsQnVmZmVyLCAwLCBjZWxsQ291bnQpOworICAgICAgICBzdGF0dXNBcmVhID0gY2VsbEJ1ZmZlcjsKKyAgICAgICAgZGF0YUFyZWEgPSBzdGF0dXNBcmVhICsgc3RhdHVzQ2VsbHM7CisgICAgICAgIHJlZnJlc2hDZWxscyhicmwpOworICAgICAgICByZXR1cm4gMTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIGxvZ1N5c3RlbUVycm9yKCJjZWxsIGJ1ZmZlciBhbGxvY2F0aW9uIik7CisgICAgICB9CisgICAgfQorCisgICAgZGlzY29ubmVjdEJyYWlsbGVSZXNvdXJjZShicmwsIE5VTEwpOworICB9CisKKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkCiticmxfZGVzdHJ1Y3QgKEJyYWlsbGVEaXNwbGF5ICpicmwpIHsKKyAgZGlzY29ubmVjdEJyYWlsbGVSZXNvdXJjZShicmwsIE5VTEwpOworCisgIGlmIChjZWxsQnVmZmVyKSB7CisgICAgZnJlZShjZWxsQnVmZmVyKTsKKyAgICBjZWxsQnVmZmVyID0gTlVMTDsKKyAgfQorfQorCitzdGF0aWMgc3NpemVfdAorYnJsX3JlYWRQYWNrZXQgKEJyYWlsbGVEaXNwbGF5ICpicmwsIHZvaWQgKmJ1ZmZlciwgc2l6ZV90IHNpemUpIHsKKyAgaW50IGNvdW50ID0gcmVhZFBhY2tldChicmwsIGJ1ZmZlciwgc2l6ZSk7CisgIGlmICghY291bnQpIGNvdW50ID0gLTE7CisgIHJldHVybiBjb3VudDsKK30KKworc3RhdGljIHNzaXplX3QKK2JybF93cml0ZVBhY2tldCAoQnJhaWxsZURpc3BsYXkgKmJybCwgY29uc3Qgdm9pZCAqcGFja2V0LCBzaXplX3QgbGVuZ3RoKSB7CisgIHJldHVybiB3cml0ZVBhY2tldChicmwsIHBhY2tldCwgbGVuZ3RoKT8gbGVuZ3RoOiAtMTsKK30KKworc3RhdGljIGludAorYnJsX3Jlc2V0IChCcmFpbGxlRGlzcGxheSAqYnJsKSB7CisgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50Citicmxfd3JpdGVXaW5kb3cgKEJyYWlsbGVEaXNwbGF5ICpicmwsIGNvbnN0IHdjaGFyX3QgKnRleHQpIHsKKyAgaWYgKGNlbGxzSGF2ZUNoYW5nZWQoZGF0YUFyZWEsIGJybC0+YnVmZmVyLCBkYXRhQ2VsbHMsIE5VTEwsIE5VTEwsIE5VTEwpKSB7CisgICAgcmVmcmVzaENlbGxzKGJybCk7CisgIH0KKyAgcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQKK2JybF9yZWFkQ29tbWFuZCAoQnJhaWxsZURpc3BsYXkgKmJybCwgS2V5VGFibGVDb21tYW5kQ29udGV4dCBjb250ZXh0KSB7CisgIFJlc3BvbnNlUGFja2V0IHBhY2tldDsKKyAgaW50IHNpemU7CisKKyAgd2hpbGUgKChzaXplID0gZ2V0UGFja2V0KGJybCwgJnBhY2tldCkpKSB7CisgICAgc3dpdGNoIChwYWNrZXQuZGF0YS5jb2RlKSB7CisgICAgICBjYXNlIEJOX1JTUF9ST1VURToKKyAgICAgICAgZW5xdWV1ZUtleShicmwsIEJOX0dSUF9Sb3V0aW5nS2V5cywgcGFja2V0LmRhdGEudmFsdWVzLnJvdXRpbmdLZXkpOworICAgICAgICBicmVhazsKKworICAgICAgY2FzZSBCTl9SU1BfRElTUExBWToKKyAgICAgICAgZG9WaXN1YWxEaXNwbGF5KGJybCk7CisgICAgICAgIGJyZWFrOworCisgICAgICBjYXNlIEJOX1JTUF9JTlBVVF9DSEFSOiB7CisgICAgICAgIGludCBjb21tYW5kOworCisgICAgICAgIHN3aXRjaCAocGFja2V0LmRhdGEudmFsdWVzLmlucHV0Q2hhcikgeworICAgICAgICAgIGNhc2UgMFgwODoKKyAgICAgICAgICAgIGNvbW1hbmQgPSBCUkxfQ01EX0JMSyhQQVNTS0VZKSB8IEJSTF9LRVlfQkFDS1NQQUNFOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICBjYXNlIDBYMDk6CisgICAgICAgICAgICBjb21tYW5kID0gQlJMX0NNRF9CTEsoUEFTU0tFWSkgfCBCUkxfS0VZX1RBQjsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGNvbW1hbmQgPSBCUkxfQ01EX0JMSyhQQVNTQ0hBUikgfCBwYWNrZXQuZGF0YS52YWx1ZXMuaW5wdXRDaGFyOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBlbnF1ZXVlQ29tbWFuZChjb21tYW5kIHwgaW5wdXRGbGFncyk7CisgICAgICAgIGlucHV0RmxhZ3MgPSAwOworICAgICAgICBicmVhazsKKyAgICAgIH0KKworICAgICAgY2FzZSBCTl9SU1BfSU5QVVRfVktFWTogeworICAgICAgICB1bnNpZ25lZCBjaGFyIHZrZXkgPSBwYWNrZXQuZGF0YS52YWx1ZXMuaW5wdXRWS2V5OworCisgICAgICAgIHN3aXRjaCAodmtleSkgeworICAgICAgICAgIGNhc2UgMFhBMjoKKyAgICAgICAgICAgIGlucHV0RmxhZ3MgfD0gQlJMX0ZMR19JTlBVVF9DT05UUk9MOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICBjYXNlIDBYQTQ6CisgICAgICAgICAgICBpbnB1dEZsYWdzIHw9IEJSTF9GTEdfSU5QVVRfTUVUQTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgY2FzZSAwWDkxOgorICAgICAgICAgICAgaW5wdXRGbGFncyB8PSBCUkxfRkxHX0lOUFVUX1NISUZUOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICBkZWZhdWx0OiB7CisgICAgICAgICAgICBpbnQgY29tbWFuZCA9IHZpcnR1YWxLZXlUb0NvbW1hbmQodmtleSk7CisKKyAgICAgICAgICAgIGlmIChjb21tYW5kKSB7CisgICAgICAgICAgICAgIGVucXVldWVDb21tYW5kKGNvbW1hbmQgfCBpbnB1dEZsYWdzKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaW5wdXRGbGFncyA9IDA7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgICB9CisKKyAgICAgIGNhc2UgQk5fUlNQX0lOUFVUX1JFU0VUOgorICAgICAgICBpbnB1dEZsYWdzID0gMDsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGRlZmF1bHQ6IHsKKyAgICAgICAgY29uc3QgS2V5R3JvdXAgZ3JvdXAgPSBCTl9HUlBfTmF2aWdhdGlvbktleXM7CisgICAgICAgIEtleU51bWJlclNldCBrZXlzID0gcGFja2V0LmRhdGEudmFsdWVzLmRvdEtleXMgJiAwWDNGOworICAgICAgICBLZXlOdW1iZXIgYmFzZSA9IEJOX0tFWV9Eb3QxOworICAgICAgICBLZXlOdW1iZXIgbW9kaWZpZXIgPSAwOworCisgICAgICAgIHN3aXRjaCAocGFja2V0LmRhdGEuY29kZSkgeworICAgICAgICAgIGNhc2UgQk5fUlNQX0NIQVJBQ1RFUjoKKyAgICAgICAgICAgIGlmIChrZXlzKSBicmVhazsKKworICAgICAgICAgIGNhc2UgQk5fUlNQX1NQQUNFOgorICAgICAgICAgICAgbW9kaWZpZXIgPSBCTl9LRVlfU3BhY2U7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgIGNhc2UgQk5fUlNQX0JBQ0tTUEFDRToKKyAgICAgICAgICAgIG1vZGlmaWVyID0gQk5fS0VZX0JhY2tzcGFjZTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgY2FzZSBCTl9SU1BfRU5URVI6CisgICAgICAgICAgICBtb2RpZmllciA9IEJOX0tFWV9FbnRlcjsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgY2FzZSBCTl9SU1BfVEhVTUI6CisgICAgICAgICAgICBrZXlzID0gcGFja2V0LmRhdGEudmFsdWVzLnRodW1iS2V5cyAmIDBYMEY7CisgICAgICAgICAgICBiYXNlID0gQk5fS0VZX1ByZXZpb3VzOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgbG9nVW5leHBlY3RlZFBhY2tldChwYWNrZXQuYnl0ZXMsIHNpemUpOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKworICAgICAgICBpZiAobW9kaWZpZXIpIGVucXVldWVLZXlFdmVudChicmwsIGdyb3VwLCBtb2RpZmllciwgMSk7CisgICAgICAgIGVucXVldWVLZXlzKGJybCwga2V5cywgZ3JvdXAsIGJhc2UpOworICAgICAgICBpZiAobW9kaWZpZXIpIGVucXVldWVLZXlFdmVudChicmwsIGdyb3VwLCBtb2RpZmllciwgMCk7CisgICAgICAgIGJyZWFrOworICAgICAgfQorICAgIH0KKyAgfQorCisgIHJldHVybiAoZXJybm8gPT0gRUFHQUlOKT8gRU9GOiBCUkxfQ01EX1JFU1RBUlRCUkw7Cit9CmRpZmYgLS1naXQgYS9Ecml2ZXJzL0JyYWlsbGUvQnJhaWxsZU5vdGUvYnJsZGVmcy1ibi5oIGIvRHJpdmVycy9CcmFpbGxlL0JyYWlsbGVOb3RlL2JybGRlZnMtYm4uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZTFmYTUzCi0tLSAvZGV2L251bGwKKysrIGIvRHJpdmVycy9CcmFpbGxlL0JyYWlsbGVOb3RlL2JybGRlZnMtYm4uaApAQCAtMCwwICsxLDc2IEBACisvKgorICogQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyAqICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyAqCisgKiBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorICoKKyAqIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyAqCisgKiBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisgKi8KKworI2lmbmRlZiBCUkxUVFlfSU5DTFVERURfQk5fQlJMREVGUworI2RlZmluZSBCUkxUVFlfSU5DTFVERURfQk5fQlJMREVGUworCisjaW5jbHVkZSAiYXNjaWkuaCIKKwordHlwZWRlZiBlbnVtIHsKKyAgQk5fUkVRX0JFR0lOID0gQVNDSUlfRVNDLAorICBCTl9SRVFfREVTQ1JJQkUgPSAnPycsCisgIEJOX1JFUV9XUklURSA9ICdCJworfSBCTl9SZXF1ZXN0VHlwZTsKKwordHlwZWRlZiBlbnVtIHsKKyAgQk5fUlNQX0NIQVJBQ1RFUiA9IDBYODAsCisgIEJOX1JTUF9TUEFDRSA9IDBYODEsCisgIEJOX1JTUF9CQUNLU1BBQ0UgPSAwWDgyLAorICBCTl9SU1BfRU5URVIgPSAwWDgzLAorICBCTl9SU1BfVEhVTUIgPSAwWDg0LAorICBCTl9SU1BfUk9VVEUgPSAwWDg1LAorICBCTl9SU1BfREVTQ1JJQkUgPSAwWDg2LAorICBCTl9SU1BfSU5QVVRfQ0hBUiA9IDBYODgsCisgIEJOX1JTUF9JTlBVVF9WS0VZID0gMFg4OSwKKyAgQk5fUlNQX0lOUFVUX1JFU0VUID0gMFg4QSwKKyAgQk5fUlNQX1FXRVJUWV9LRVkgPSAwWDhDLAorICBCTl9SU1BfUVdFUlRZX01PRFMgPSAwWDhELAorICBCTl9SU1BfRElTUExBWSA9IEFTQ0lJX0VTQworfSBCTl9SZXNwb25zZVR5cGU7CisKK3R5cGVkZWYgZW51bSB7CisgIEJOX0tFWV9Eb3QxLAorICBCTl9LRVlfRG90MiwKKyAgQk5fS0VZX0RvdDMsCisgIEJOX0tFWV9Eb3Q0LAorICBCTl9LRVlfRG90NSwKKyAgQk5fS0VZX0RvdDYsCisKKyAgQk5fS0VZX1NwYWNlLAorICBCTl9LRVlfQmFja3NwYWNlLAorICBCTl9LRVlfRW50ZXIsCisKKyAgQk5fS0VZX1ByZXZpb3VzLAorICBCTl9LRVlfQmFjaywKKyAgQk5fS0VZX0FkdmFuY2UsCisgIEJOX0tFWV9OZXh0Cit9IEJOX05hdmlnYXRpb25LZXk7CisKK3R5cGVkZWYgZW51bSB7CisgIEJOX0dSUF9OYXZpZ2F0aW9uS2V5cywKKyAgQk5fR1JQX1JvdXRpbmdLZXlzCit9IFNLX0tleUdyb3VwOworCit0eXBlZGVmIGVudW0geworICBCTl9NT0RfRlVOQ1RJT04gPSAwWDAxLAorICBCTl9NT0RfU0hJRlQgICAgPSAwWDAyLAorICBCTl9NT0RfY09OVFJPTCAgPSAwWDA0LAorICBCTl9NT0RfckVBRCAgICAgPSAwWDA4Cit9IEJOX1F3ZXJ0eU1vZGlmaWVyOworCisjZW5kaWYgLyogQlJMVFRZX0lOQ0xVREVEX0JOX0JSTERFRlMgKi8gCmRpZmYgLS1naXQgYS9Ecml2ZXJzL0JyYWlsbGUvQnJhdWRpL01ha2VmaWxlLmluIGIvRHJpdmVycy9CcmFpbGxlL0JyYXVkaS9NYWtlZmlsZS5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZmFjYjkxCi0tLSAvZGV2L251bGwKKysrIGIvRHJpdmVycy9CcmFpbGxlL0JyYXVkaS9NYWtlZmlsZS5pbgpAQCAtMCwwICsxLDI4IEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisjICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorIworIyBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisjCisjIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisjCisjIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyMgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorIyBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyMKKyMgV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworIworIyBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworRFJJVkVSX0NPREUgPSBiZAorRFJJVkVSX05BTUUgPSBCcmF1ZGkKK0RSSVZFUl9VU0FHRSA9IFBybworRFJJVkVSX1ZFUlNJT04gPSAKK0RSSVZFUl9ERVZFTE9QRVJTID0gRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPgoraW5jbHVkZSAkKFNSQ19UT1ApYnJhaWxsZS5taworCiticmFpbGxlLiRPOgorCSQoQ0MpICQoQlJMX0NGTEFHUykgLWMgJChTUkNfRElSKS9icmFpbGxlLmMKKwpkaWZmIC0tZ2l0IGEvRHJpdmVycy9CcmFpbGxlL0JyYXVkaS9icmFpbGxlLmMgYi9Ecml2ZXJzL0JyYWlsbGUvQnJhdWRpL2JyYWlsbGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYzA1M2M3Ci0tLSAvZGV2L251bGwKKysrIGIvRHJpdmVycy9CcmFpbGxlL0JyYXVkaS9icmFpbGxlLmMKQEAgLTAsMCArMSwyOTAgQEAKKy8qCisgKiBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorICogICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorICoKKyAqIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorICoKKyAqIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyAqLworCisjaW5jbHVkZSAicHJvbG9ndWUuaCIKKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKworI2luY2x1ZGUgImxvZy5oIgorI2luY2x1ZGUgImFzY2lpLmgiCisKKyNpbmNsdWRlICJicmxfZHJpdmVyLmgiCisjaW5jbHVkZSAiaW9fc2VyaWFsLmgiCisKK3N0YXRpYyBTZXJpYWxEZXZpY2UgKnNlcmlhbERldmljZSA9IE5VTEw7CitzdGF0aWMgdW5zaWduZWQgaW50IGNoYXJhY3RlcnNQZXJTZWNvbmQ7CitzdGF0aWMgdW5zaWduZWQgY2hhciAqb3V0cHV0QnVmZmVyID0gTlVMTDsKKworc3RhdGljIGludAorcmVhZEJ5dGVzICh1bnNpZ25lZCBjaGFyICpidWZmZXIsIGludCBzaXplLCBzaXplX3QgKmxlbmd0aCkgeworICAqbGVuZ3RoID0gMDsKKworICB3aGlsZSAoKmxlbmd0aCA8IHNpemUpIHsKKyAgICB1bnNpZ25lZCBjaGFyIGJ5dGU7CisKKyAgICBpZiAoIXNlcmlhbFJlYWRDaHVuayhzZXJpYWxEZXZpY2UsIGJ1ZmZlciwgbGVuZ3RoLCAxLCAwLCAxMDApKSB7CisgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgYnl0ZSA9IGJ1ZmZlclsqbGVuZ3RoIC0gMV07CisKKyAgICBpZiAoKCpsZW5ndGggPT0gMSkgJiYgKGJ5dGUgPT0gQVNDSUlfQUNLKSkgeworICAgICAgKmxlbmd0aCA9IDA7CisgICAgICBjb250aW51ZTsKKyAgICB9CisKKyAgICBpZiAoYnl0ZSA9PSBBU0NJSV9DUikgeworICAgICAgbG9nQnl0ZXMoTE9HX0RFQlVHLCAiUmVhZCIsIGJ1ZmZlciwgKmxlbmd0aCk7CisgICAgICByZXR1cm4gMTsKKyAgICB9CisgIH0KKworICByZXR1cm4gMDsKK30KKworc3RhdGljIGludAord3JpdGVCeXRlcyAoQnJhaWxsZURpc3BsYXkgKmJybCwgY29uc3QgdW5zaWduZWQgY2hhciAqYnl0ZXMsIGludCBjb3VudCkgeworICBsb2dCeXRlcyhMT0dfREVCVUcsICJXcml0ZSIsIGJ5dGVzLCBjb3VudCk7CisgIGlmIChzZXJpYWxXcml0ZURhdGEoc2VyaWFsRGV2aWNlLCBieXRlcywgY291bnQpID09IC0xKSByZXR1cm4gMDsKKyAgYnJsLT53cml0ZURlbGF5ICs9IChjb3VudCAqIDEwMDAgLyBjaGFyYWN0ZXJzUGVyU2Vjb25kKSArIDE7CisgIHJldHVybiAxOworfQorCitzdGF0aWMgaW50Cit3cml0ZUFja25vd2xlZGdlbWVudCAoQnJhaWxsZURpc3BsYXkgKmJybCkgeworICBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhY2tub3dsZWRnZW1lbnRbXSA9IHtBU0NJSV9BQ0t9OworICByZXR1cm4gd3JpdGVCeXRlcyhicmwsIGFja25vd2xlZGdlbWVudCwgc2l6ZW9mKGFja25vd2xlZGdlbWVudCkpOworfQorCitzdGF0aWMgaW50Cit3cml0ZUNlbGxzIChCcmFpbGxlRGlzcGxheSAqYnJsKSB7CisgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhlYWRlcltdID0geydEJ307CisgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHRyYWlsZXJbXSA9IHtBU0NJSV9DUn07CisgIHVuc2lnbmVkIGNoYXIgYnVmZmVyW3NpemVvZihoZWFkZXIpICsgYnJsLT50ZXh0Q29sdW1ucyArIHNpemVvZih0cmFpbGVyKV07CisgIHVuc2lnbmVkIGNoYXIgKmJ5dGUgPSBidWZmZXI7CisKKyAgYnl0ZSA9IG1lbXBjcHkoYnl0ZSwgaGVhZGVyLCBzaXplb2YoaGVhZGVyKSk7CisgIGJ5dGUgPSB0cmFuc2xhdGVPdXRwdXRDZWxscyhieXRlLCBvdXRwdXRCdWZmZXIsIGJybC0+dGV4dENvbHVtbnMpOworICBieXRlID0gbWVtcGNweShieXRlLCB0cmFpbGVyLCBzaXplb2YodHJhaWxlcikpOworCisgIHJldHVybiB3cml0ZUJ5dGVzKGJybCwgYnVmZmVyLCBieXRlLWJ1ZmZlcik7Cit9CisKK3N0YXRpYyBpbnQKK3dyaXRlU3RyaW5nIChCcmFpbGxlRGlzcGxheSAqYnJsLCBjb25zdCBjaGFyICpzdHJpbmcpIHsKKyAgcmV0dXJuIHdyaXRlQnl0ZXMoYnJsLCAoY29uc3QgdW5zaWduZWQgY2hhciAqKXN0cmluZywgc3RybGVuKHN0cmluZykpOworfQorCitzdGF0aWMgaW50Citza2lwQ2hhcmFjdGVyICh1bnNpZ25lZCBjaGFyIGNoYXJhY3RlciwgY29uc3QgdW5zaWduZWQgY2hhciAqKmJ5dGVzLCBpbnQgKmNvdW50KSB7CisgIGludCBmb3VuZCA9IDA7CisKKyAgd2hpbGUgKCpjb3VudCkgeworICAgIGlmICgqKmJ5dGVzICE9IGNoYXJhY3RlcikgYnJlYWs7CisgICAgZm91bmQgPSAxOworICAgICsrKmJ5dGVzLCAtLSpjb3VudDsKKyAgfQorCisgIHJldHVybiBmb3VuZDsKK30KKworc3RhdGljIGludAoraW50ZXJwcmV0TnVtYmVyIChpbnQgKm51bWJlciwgY29uc3QgdW5zaWduZWQgY2hhciAqKmJ5dGVzLCBpbnQgKmNvdW50KSB7CisgIGludCBvayA9IHNraXBDaGFyYWN0ZXIoJzAnLCBieXRlcywgY291bnQpOworICAqbnVtYmVyID0gMDsKKworICB3aGlsZSAoKmNvdW50KSB7CisgICAgc3RhdGljIHVuc2lnbmVkIGNoYXIgZGlnaXRzW10gPSB7JzAnLCAnMScsICcyJywgJzMnLCAnNCcsICc1JywgJzYnLCAnNycsICc4JywgJzknfTsKKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpkaWdpdCA9IG1lbWNocihkaWdpdHMsICoqYnl0ZXMsIHNpemVvZihkaWdpdHMpKTsKKyAgICBpZiAoIWRpZ2l0KSBicmVhazsKKworICAgICpudW1iZXIgPSAoKm51bWJlciAqIDEwKSArIChkaWdpdCAtIGRpZ2l0cyk7CisgICAgb2sgPSAxOworICAgICsrKmJ5dGVzLCAtLSpjb3VudDsKKyAgfQorCisgIHJldHVybiBvazsKK30KKworc3RhdGljIGludAoraWRlbnRpZnlEaXNwbGF5IChCcmFpbGxlRGlzcGxheSAqYnJsKSB7CisgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGlkZW50aWZ5W10gPSB7J0knLCBBU0NJSV9DUn07CisKKyAgaWYgKHdyaXRlQnl0ZXMoYnJsLCBpZGVudGlmeSwgc2l6ZW9mKGlkZW50aWZ5KSkpIHsKKyAgICBpZiAoc2VyaWFsQXdhaXRJbnB1dChzZXJpYWxEZXZpY2UsIDEwMDApKSB7CisgICAgICB1bnNpZ25lZCBjaGFyIGlkZW50aXR5WzBYMTAwXTsKKyAgICAgIHNpemVfdCBsZW5ndGg7CisKKyAgICAgIGlmIChyZWFkQnl0ZXMoaWRlbnRpdHksIHNpemVvZihpZGVudGl0eSksICZsZW5ndGgpKSB7CisgICAgICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHByZWZpeFtdID0geydiJywgJ3InLCAnYScsICd1JywgJ2QnLCAnaScsICcgJ307CisgICAgICAgIGlmICgobGVuZ3RoID49IHNpemVvZihwcmVmaXgpKSAmJgorICAgICAgICAgICAgKG1lbWNtcChpZGVudGl0eSwgcHJlZml4LCBzaXplb2YocHJlZml4KSkgPT0gMCkpIHsKKyAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpieXRlcyA9IG1lbWNocihpZGVudGl0eSwgJywnLCBsZW5ndGgpOworICAgICAgICAgIGlmIChieXRlcykgeworICAgICAgICAgICAgaW50IGNvdW50ID0gbGVuZ3RoIC0gKGJ5dGVzIC0gaWRlbnRpdHkpOworICAgICAgICAgICAgaW50IGNlbGxzOworCisgICAgICAgICAgICArK2J5dGVzLCAtLWNvdW50OworICAgICAgICAgICAgc2tpcENoYXJhY3RlcignICcsICZieXRlcywgJmNvdW50KTsKKyAgICAgICAgICAgIGlmIChpbnRlcnByZXROdW1iZXIoJmNlbGxzLCAmYnl0ZXMsICZjb3VudCkpIHsKKyAgICAgICAgICAgICAgaWYgKCFjb3VudCkgeworICAgICAgICAgICAgICAgIGxvZ01lc3NhZ2UoTE9HX0lORk8sICJEZXRlY3RlZDogJS4qcyIsIChpbnQpbGVuZ3RoLCBpZGVudGl0eSk7CisKKyAgICAgICAgICAgICAgICBicmwtPnRleHRDb2x1bW5zID0gY2VsbHM7CisgICAgICAgICAgICAgICAgYnJsLT50ZXh0Um93cyA9IDE7CisKKyAgICAgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGxvZ1VuZXhwZWN0ZWRQYWNrZXQoaWRlbnRpdHksIGxlbmd0aCk7CisgICAgICB9CisgICAgfQorICB9CisgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50CitzZXRUYWJsZSAoQnJhaWxsZURpc3BsYXkgKmJybCwgaW50IHRhYmxlKSB7CisgIGNoYXIgYnVmZmVyWzBYMTBdOworICBzbnByaW50ZihidWZmZXIsIHNpemVvZihidWZmZXIpLCAiTCVkXHIiLCB0YWJsZSk7CisgIHJldHVybiB3cml0ZVN0cmluZyhicmwsIGJ1ZmZlcik7Cit9CisKK3N0YXRpYyBpbnQKK2JybF9jb25zdHJ1Y3QgKEJyYWlsbGVEaXNwbGF5ICpicmwsIGNoYXIgKipwYXJhbWV0ZXJzLCBjb25zdCBjaGFyICpkZXZpY2UpIHsKKyAgaWYgKCFpc1NlcmlhbERldmljZUlkZW50aWZpZXIoJmRldmljZSkpIHsKKyAgICB1bnN1cHBvcnRlZERldmljZUlkZW50aWZpZXIoZGV2aWNlKTsKKyAgICByZXR1cm4gMDsKKyAgfQorCisgIGlmICgoc2VyaWFsRGV2aWNlID0gc2VyaWFsT3BlbkRldmljZShkZXZpY2UpKSkgeworICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgYmF1ZCA9IDk2MDA7CisgICAgY2hhcmFjdGVyc1BlclNlY29uZCA9IGJhdWQgLyAxMDsKKyAgICBpZiAoc2VyaWFsUmVzdGFydERldmljZShzZXJpYWxEZXZpY2UsIGJhdWQpKSB7CisgICAgICBpZiAoaWRlbnRpZnlEaXNwbGF5KGJybCkpIHsKKyAgICAgICAgTUFLRV9PVVRQVVRfVEFCTEUoMFgwMSwgMFgwMiwgMFgwNCwgMFgxMCwgMFgyMCwgMFg0MCwgMFgwOCwgMFg4MCk7CisgIAorICAgICAgICBpZiAoKG91dHB1dEJ1ZmZlciA9IG1hbGxvYyhicmwtPnRleHRDb2x1bW5zKSkpIHsKKyAgICAgICAgICBpZiAoc2V0VGFibGUoYnJsLCAwKSkgeworICAgICAgICAgICAgbWVtc2V0KG91dHB1dEJ1ZmZlciwgMCwgYnJsLT50ZXh0Q29sdW1ucyk7CisgICAgICAgICAgICB3cml0ZUNlbGxzKGJybCk7CisKKyAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICAgIH0KKworICAgICAgICAgIGZyZWUob3V0cHV0QnVmZmVyKTsKKyAgICAgICAgICBvdXRwdXRCdWZmZXIgPSBOVUxMOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgIGxvZ1N5c3RlbUVycm9yKCJPdXRwdXQgYnVmZmVyIGFsbG9jYXRpb24iKTsKKyAgICAgICAgfQorICAgICAgfQorICAgIH0KKworICAgIHNlcmlhbENsb3NlRGV2aWNlKHNlcmlhbERldmljZSk7CisgICAgc2VyaWFsRGV2aWNlID0gTlVMTDsKKyAgfQorCisgIHJldHVybiAwOworfQorCitzdGF0aWMgdm9pZAorYnJsX2Rlc3RydWN0IChCcmFpbGxlRGlzcGxheSAqYnJsKSB7CisgIGlmIChvdXRwdXRCdWZmZXIpIHsKKyAgICBmcmVlKG91dHB1dEJ1ZmZlcik7CisgICAgb3V0cHV0QnVmZmVyID0gTlVMTDsKKyAgfQorCisgIGlmIChzZXJpYWxEZXZpY2UpIHsKKyAgICBzZXJpYWxDbG9zZURldmljZShzZXJpYWxEZXZpY2UpOworICAgIHNlcmlhbERldmljZSA9IE5VTEw7CisgIH0KK30KKworc3RhdGljIGludAorYnJsX3dyaXRlV2luZG93IChCcmFpbGxlRGlzcGxheSAqYnJsLCBjb25zdCB3Y2hhcl90ICp0ZXh0KSB7CisgIGlmIChjZWxsc0hhdmVDaGFuZ2VkKG91dHB1dEJ1ZmZlciwgYnJsLT5idWZmZXIsIGJybC0+dGV4dENvbHVtbnMsIE5VTEwsIE5VTEwsIE5VTEwpKSB7CisgICAgd3JpdGVDZWxscyhicmwpOworICB9CisgIHJldHVybiAxOworfQorCitzdGF0aWMgaW50CiticmxfcmVhZENvbW1hbmQgKEJyYWlsbGVEaXNwbGF5ICpicmwsIEtleVRhYmxlQ29tbWFuZENvbnRleHQgY29udGV4dCkgeworICB1bnNpZ25lZCBjaGFyIGJ1ZmZlclswWDEwMF07CisgIHNpemVfdCBsZW5ndGg7CisKKyAgd2hpbGUgKHJlYWRCeXRlcyhidWZmZXIsIHNpemVvZihidWZmZXIpLCAmbGVuZ3RoKSkgeworICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ5dGVzID0gYnVmZmVyOworICAgIGludCBjb3VudCA9IGxlbmd0aDsKKworICAgIGlmIChjb3VudCA+IDApIHsKKyAgICAgIHVuc2lnbmVkIGNoYXIgY2F0ZWdvcnkgPSAqYnl0ZXMrKzsKKyAgICAgIC0tY291bnQ7CisKKyAgICAgIHN3aXRjaCAoY2F0ZWdvcnkpIHsKKyAgICAgICAgY2FzZSAnRic6IHsKKyAgICAgICAgICBpbnQga2V5czsKKyAgICAgICAgICB3cml0ZUFja25vd2xlZGdlbWVudChicmwpOworCisgICAgICAgICAgaWYgKGludGVycHJldE51bWJlcigma2V5cywgJmJ5dGVzLCAmY291bnQpKSB7CisgICAgICAgICAgICBpZiAoIWNvdW50KSB7CisgICAgICAgICAgICAgIHN3aXRjaCAoa2V5cykgeworICAgICAgICAgICAgICAgIGNhc2UgIDE6IHJldHVybiBCUkxfQ01EX1RPUF9MRUZUOworICAgICAgICAgICAgICAgIGNhc2UgIDI6IHJldHVybiBCUkxfQ01EX0ZXSU5MVDsKKyAgICAgICAgICAgICAgICBjYXNlICAzOiByZXR1cm4gQlJMX0NNRF9MTkROOworICAgICAgICAgICAgICAgIGNhc2UgIDQ6IHJldHVybiBCUkxfQ01EX0xOVVA7CisgICAgICAgICAgICAgICAgY2FzZSAgNTogcmV0dXJuIEJSTF9DTURfRldJTlJUOworICAgICAgICAgICAgICAgIGNhc2UgIDY6IHJldHVybiBCUkxfQ01EX0JPVF9MRUZUOworICAgICAgICAgICAgICAgIGNhc2UgMjM6IHJldHVybiBCUkxfQ01EX0xOQkVHOworICAgICAgICAgICAgICAgIGNhc2UgNTY6IHJldHVybiBCUkxfQ01EX0xORU5EOworICAgICAgICAgICAgICAgIGNhc2UgMTQ6IHJldHVybiBCUkxfQ01EX0NTUlZJUzsKKyAgICAgICAgICAgICAgICBjYXNlIDI1OiByZXR1cm4gQlJMX0NNRF9ESVNQTUQ7CisgICAgICAgICAgICAgICAgY2FzZSAyNjogcmV0dXJuIEJSTF9DTURfSU5GTzsKKyAgICAgICAgICAgICAgICBjYXNlIDM2OiByZXR1cm4gQlJMX0NNRF9IT01FOworICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgfQorCisgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBjYXNlICdLJzogeworICAgICAgICAgIGludCBrZXk7CisgICAgICAgICAgd3JpdGVBY2tub3dsZWRnZW1lbnQoYnJsKTsKKworICAgICAgICAgIGlmIChpbnRlcnByZXROdW1iZXIoJmtleSwgJmJ5dGVzLCAmY291bnQpKSB7CisgICAgICAgICAgICBpZiAoIWNvdW50KSB7CisgICAgICAgICAgICAgIGlmICgoa2V5ID4gMCkgJiYgKGtleSA8PSBicmwtPnRleHRDb2x1bW5zKSkgcmV0dXJuIEJSTF9DTURfQkxLKFJPVVRFKSArIChrZXkgLSAxKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9CisKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgfQorICAgIH0KKworICAgIGxvZ1VuZXhwZWN0ZWRQYWNrZXQoYnVmZmVyLCBsZW5ndGgpOworICB9CisKKyAgaWYgKGVycm5vID09IEVBR0FJTikgcmV0dXJuIEVPRjsKKyAgcmV0dXJuIEJSTF9DTURfUkVTVEFSVEJSTDsKK30KZGlmZiAtLWdpdCBhL0RyaXZlcnMvQnJhaWxsZS9CcmxBUEkvTWFrZWZpbGUuaW4gYi9Ecml2ZXJzL0JyYWlsbGUvQnJsQVBJL01ha2VmaWxlLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJlMWM3ZTcKLS0tIC9kZXYvbnVsbAorKysgYi9Ecml2ZXJzL0JyYWlsbGUvQnJsQVBJL01ha2VmaWxlLmluCkBAIC0wLDAgKzEsMjkgQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyMgICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisjCisjIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyMKKyMgQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitEUklWRVJfQ09ERSA9IGJhCitEUklWRVJfTkFNRSA9IEJybEFQSQorRFJJVkVSX1VTQUdFID0gQnJsQVBJIGNsaWVudAorRFJJVkVSX1ZFUlNJT04gPSAwLjEsIDIwMDUKK0RSSVZFUl9ERVZFTE9QRVJTID0gU8OpYmFzdGllbiBIaW5kZXJlciA8U2ViYXN0aWVuLkhpbmRlcmVyQGVucy1seW9uLm9yZz4sIFNhbXVlbCBUaGliYXVsdCA8c2FtdWVsLnRoaWJhdWx0QGVucy1seW9uLm9yZz4KK0JSTF9PQkpTID0gQGJyYWlsbGVfbGlicmFyaWVzX2JhQAoraW5jbHVkZSAkKFNSQ19UT1ApYnJhaWxsZS5taworCiticmFpbGxlLiRPOiB8IGJybGFwaQorCSQoQ0MpICQoQlJMX0NGTEFHUykgLWMgJChTUkNfRElSKS9icmFpbGxlLmMKKwpkaWZmIC0tZ2l0IGEvRHJpdmVycy9CcmFpbGxlL0JybEFQSS9SRUFETUUgYi9Ecml2ZXJzL0JyYWlsbGUvQnJsQVBJL1JFQURNRQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ODRmMWQ3Ci0tLSAvZGV2L251bGwKKysrIGIvRHJpdmVycy9CcmFpbGxlL0JybEFQSS9SRUFETUUKQEAgLTAsMCArMSwyNCBAQAorVGhpcyBkcml2ZXIgYWxsb3dzIEJSTFRUWSB0byBhY2Nlc3MgYnJhaWxsZSBkaXNwbGF5cyB0aHJvdWdoIEJybEFQSS4gIE11bHRpcGxlCitpbnN0YW5jZXMgb2YgYnJsdHR5IGNhbiBoZW5jZSBiZSBydW4sIG9uZSB1c2luZyB0aGUgcmVhbCBicmFpbGxlIGRyaXZlciwgdGhlCitvdGhlcnMgYWNjZXNzaW5nIGl0IHRocm91Z2ggdGhlIEFQSS4gRWFjaCBpbnN0YW5jZSBvZiBCUkxUVFkgY2FuIHVzZSBhIGRpZmZlcmVudAorc2NyZWVuIGRyaXZlciB0aGFua3MgdG8gdGhlIC14IGNvbW1hbmQtbGluZSBvcHRpb24uCisKKworRm9yIGV4YW1wbGUsIGluIGEgZ25vbWUgZGVza3RvcCB5b3UgY2FuIHJ1biBhIHNlY29uZCBCUkxUVFkgdGhhdCByZWFkcworZ25vbWUtdGVybWluYWwgYnkgcnVubmluZworCiticmx0dHkgLWIgYmEgLXggYXMKKworZnJvbSB5b3VyIFggc2Vzc2lvbi4KKworCitBbm90aGVyIGV4YW1wbGUgaXMgYWNjZXNzaW5nIHRoZSBMaW51eCBjb25zb2xlIG9mIGEgcmVtb3RlIGhvc3Q6CisKK3NzaCAtUiA0MTAyOmxvY2FsaG9zdDo0MTAxIHJvb3RAdGhlcmVtb3RlaG9zdCBicmx0dHkgLWIgYmEgLUIgaG9zdD1sb2NhbGhvc3Q6MQorCitUaGlzIHdpbGwgZm9yd2FyZCB5b3VyIGxvY2FsIEJybEFQSSBwb3J0ICg0MTAxKSB0byB0aGUgcmVtb3RlIG1hY2hpbmUgKGFzIDQxMDIsCitpLmUuIDoxKSwgd2hlcmUgeW91IGNhbiB0aGVuIHJ1biBicmx0dHkgYW5kIHRlbGwgaXQgdG8gY29ubmVjdCB0byBsb2NhbGhvc3Q6MS4KK1RoaXMgd2lsbCBob3dldmVyIHRha2UgY29tcGxldGUgY29udHJvbCBvZiB5b3VyIGJyYWlsbGUgZGV2aWNlLiBUbyByZXN0cmljdCB0aGUKK2NvbnRyb2wgdG8gc29tZSBsb2NhbCBjb25zb2xlIChlLmcuIGNvbnNvbGUgNCksIHlvdSBjYW4gdXNlIGUuZy4KKworc3NoIC1SIDQxMDI6bG9jYWxob3N0OjQxMDEgcm9vdEB0aGVyZW1vdGVob3N0IFdJTkRPV1BBVEg9NCBicmx0dHkgLWIgYmEgLUIgaG9zdD1sb2NhbGhvc3Q6MQpkaWZmIC0tZ2l0IGEvRHJpdmVycy9CcmFpbGxlL0JybEFQSS9icmFpbGxlLmMgYi9Ecml2ZXJzL0JyYWlsbGUvQnJsQVBJL2JyYWlsbGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZThlNTNmCi0tLSAvZGV2L251bGwKKysrIGIvRHJpdmVycy9CcmFpbGxlL0JybEFQSS9icmFpbGxlLmMKQEAgLTAsMCArMSwyNTAgQEAKKy8qCisgKiBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorICogICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorICoKKyAqIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorICoKKyAqIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyAqLworCisjaW5jbHVkZSAicHJvbG9ndWUuaCIKKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKyNpbmNsdWRlICJsb2cuaCIKKyNpbmNsdWRlICJwYXJzZS5oIgorI2luY2x1ZGUgInNjci5oIgorI2luY2x1ZGUgImNtZF9icmxhcGkuaCIKKyNpbmNsdWRlICJjaGFyc2V0LmgiCisKKyNkZWZpbmUgQlJMQVBJX05PX0RFUFJFQ0FURUQKKyNpbmNsdWRlICJicmxhcGkuaCIKKwordHlwZWRlZiBlbnVtIHsKKyAgUEFSTV9IT1NULAorICBQQVJNX0FVVEgsCisgIFBBUk1fU1BFRUNIX0NIQU5HRVMsCit9IERyaXZlclBhcmFtZXRlcjsKKyNkZWZpbmUgQlJMUEFSTVMgImhvc3QiLCAiYXV0aCIsICJzcGVlY2hDaGFuZ2VzIgorCisjaW5jbHVkZSAiYnJsX2RyaXZlci5oIgorCisjZGVmaW5lIENIRUNLKGNvbmQsIGxhYmVsKSBcCisgIGRvIHsgXAorICAgIGlmICghKGNvbmQpKSB7IFwKKyAgICAgIGxvZ01lc3NhZ2UoTE9HX0VSUiwgIiVzIiwgYnJsYXBpX3N0cmVycm9yKCZicmxhcGlfZXJyb3IpKTsgXAorICAgICAgZ290byBsYWJlbDsgXAorICAgIH0gXAorICB9IHdoaWxlICgwKTsKKworc3RhdGljIGJybGFwaV9wYXJhbV9jbGllbnRQcmlvcml0eV90IGN1cnJlbnRQcmlvcml0eTsKK3N0YXRpYyBjb25zdCBicmxhcGlfcGFyYW1fY2xpZW50UHJpb3JpdHlfdCBxdWFsaXR5UHJpb3JpdGllc1tdID0geworICBbU0NRX05PTkVdID0gQlJMQVBJX1BBUkFNX0NMSUVOVF9QUklPUklUWV9ESVNBQkxFLAorICBbU0NRX0xPV10gID0gQlJMQVBJX1BBUkFNX0NMSUVOVF9QUklPUklUWV9ERUZBVUxUIC0gNDAsCisgIFtTQ1FfUE9PUl0gPSBCUkxBUElfUEFSQU1fQ0xJRU5UX1BSSU9SSVRZX0RFRkFVTFQgLSAyNSwKKyAgW1NDUV9GQUlSXSA9IEJSTEFQSV9QQVJBTV9DTElFTlRfUFJJT1JJVFlfREVGQVVMVCAtIDEwLAorICBbU0NRX0dPT0RdID0gQlJMQVBJX1BBUkFNX0NMSUVOVF9QUklPUklUWV9ERUZBVUxUICsgMTAsCisgIFtTQ1FfSElHSF0gPSBCUkxBUElfUEFSQU1fQ0xJRU5UX1BSSU9SSVRZX0RFRkFVTFQgKyAzMCwKK307CisKK3N0YXRpYyBpbnQgZGlzcGxheVNpemU7CitzdGF0aWMgdW5zaWduZWQgY2hhciAqcHJldkRhdGE7CitzdGF0aWMgd2NoYXJfdCAqcHJldlRleHQ7CitzdGF0aWMgaW50IHByZXZDdXJzb3I7CitzdGF0aWMgaW50IHByZXZTaG93bjsKKworc3RhdGljIGludCByZXN0YXJ0OworCitzdGF0aWMgaW50CitpZ25vcmVTcGVlY2hDaGFuZ2VDb21tYW5kcyAodm9pZCkgeworICBzdGF0aWMgY29uc3QgYnJsYXBpX2tleUNvZGVfdCBjb21tYW5kc1tdID0geworICAgIEJSTEFQSV9LRVlfVFlQRV9DTUQgfCBCUkxBUElfS0VZX0NNRF9TQVlfTE9VREVSLAorICAgIEJSTEFQSV9LRVlfVFlQRV9DTUQgfCBCUkxBUElfS0VZX0NNRF9TQVlfU09GVEVSLAorICAgIEJSTEFQSV9LRVlfVFlQRV9DTUQgfCBCUkxBUElfS0VZX0NNRF9TQVlfRkFTVEVSLAorICAgIEJSTEFQSV9LRVlfVFlQRV9DTUQgfCBCUkxBUElfS0VZX0NNRF9TQVlfU0xPV0VSLAorICAgIEJSTEFQSV9LRVlfVFlQRV9DTUQgfCBCUkxBUElfS0VZX0NNRF9TQVlfSElHSEVSLAorICAgIEJSTEFQSV9LRVlfVFlQRV9DTUQgfCBCUkxBUElfS0VZX0NNRF9TQVlfTE9XRVIsCisgIH07CisKKyAgQ0hFQ0soYnJsYXBpX2lnbm9yZUtleXMoYnJsYXBpX3JhbmdlVHlwZV9jb21tYW5kLCBjb21tYW5kcywgQVJSQVlfQ09VTlQoY29tbWFuZHMpKT49MCwgZmFpbGVkKTsKKyAgcmV0dXJuIDE7CisKK2ZhaWxlZDoKKyAgcmV0dXJuIDA7Cit9CisKKy8qIEZ1bmN0aW9uIDogYnJsX2NvbnN0cnVjdCAqLworLyogT3BlbnMgYSBjb25uZWN0aW9uIHdpdGggQnJsQVBJJ3Mgc2VydmVyICovCitzdGF0aWMgaW50IGJybF9jb25zdHJ1Y3QoQnJhaWxsZURpc3BsYXkgKmJybCwgY2hhciAqKnBhcmFtZXRlcnMsIGNvbnN0IGNoYXIgKmRldmljZSkKK3sKKyAgY3VycmVudFByaW9yaXR5ID0gQlJMQVBJX1BBUkFNX0NMSUVOVF9QUklPUklUWV9ERUZBVUxUOworCisgIGJybGFwaV9jb25uZWN0aW9uU2V0dGluZ3NfdCBzZXR0aW5nczsKKyAgc2V0dGluZ3MuaG9zdCA9IHBhcmFtZXRlcnNbUEFSTV9IT1NUXTsKKyAgc2V0dGluZ3MuYXV0aCA9IHBhcmFtZXRlcnNbUEFSTV9BVVRIXTsKKworICBDSEVDSygoYnJsYXBpX29wZW5Db25uZWN0aW9uKCZzZXR0aW5ncywgJnNldHRpbmdzKT49MCksIG91dCk7CisgIGxvZ01lc3NhZ2UoTE9HX0NBVEVHT1JZKEJSQUlMTEVfRFJJVkVSKSwKKyAgICAiY29ubmVjdGVkIHRvICVzIHVzaW5nICVzIiwgc2V0dGluZ3MuaG9zdCwgc2V0dGluZ3MuYXV0aAorICApOworCisgIENIRUNLKChicmxhcGlfZW50ZXJUdHlNb2RlV2l0aFBhdGgoTlVMTCwgMCwgTlVMTCk+PTApLCBvdXQwKTsKKyAgbG9nTWVzc2FnZShMT0dfQ0FURUdPUlkoQlJBSUxMRV9EUklWRVIpLAorICAgICJnb3QgdHR5IHN1Y2Nlc3NmdWxseSIKKyAgKTsKKworICBDSEVDSygoYnJsYXBpX2dldERpc3BsYXlTaXplKCZicmwtPnRleHRDb2x1bW5zLCAmYnJsLT50ZXh0Um93cyk9PTApLCBvdXQxKTsKKyAgZGlzcGxheVNpemUgPSBicmwtPnRleHRDb2x1bW5zICogYnJsLT50ZXh0Um93czsKKyAgbG9nTWVzc2FnZShMT0dfQ0FURUdPUlkoQlJBSUxMRV9EUklWRVIpLAorICAgICJnb3QgZGlzcGxheSBzaXplOiAlZHglZCIsIGJybC0+dGV4dENvbHVtbnMsIGJybC0+dGV4dFJvd3MKKyAgKTsKKworICB7CisgICAgdW5zaWduZWQgaW50IHNwZWVjaENoYW5nZXMgPSAxOworICAgIGNvbnN0IGNoYXIgKnBhcmFtZXRlciA9IHBhcmFtZXRlcnNbUEFSTV9TUEVFQ0hfQ0hBTkdFU107CisKKyAgICBpZiAoKnBhcmFtZXRlcikgeworICAgICAgaWYgKCF2YWxpZGF0ZVllc05vKCZzcGVlY2hDaGFuZ2VzLCBwYXJhbWV0ZXIpKSB7CisgICAgICAgICBsb2dNZXNzYWdlKExPR19XQVJOSU5HLCAiJXM6ICVzIiwgImludmFsaWQgc3BlZWNoIGNoYW5nZXMgc2V0dGluZyIsIHBhcmFtZXRlcik7CisgICAgICB9IGVsc2UgaWYgKCFzcGVlY2hDaGFuZ2VzKSB7CisgICAgICAgIGlnbm9yZVNwZWVjaENoYW5nZUNvbW1hbmRzKCk7CisgICAgICB9CisgICAgfQorICB9CisKKyAgYnJsLT5oaWRlQ3Vyc29yID0gMTsKKworICBwcmV2RGF0YSA9IG1hbGxvYyhkaXNwbGF5U2l6ZSk7CisgIENIRUNLKChwcmV2RGF0YSE9TlVMTCksIG91dDEpOworICBtZW1zZXQocHJldkRhdGEsIDAsIGRpc3BsYXlTaXplKTsKKworICBwcmV2VGV4dCA9IG1hbGxvYyhkaXNwbGF5U2l6ZSAqIHNpemVvZih3Y2hhcl90KSk7CisgIENIRUNLKChwcmV2VGV4dCE9TlVMTCksIG91dDIpOworICB3bWVtc2V0KHByZXZUZXh0LCBXQ19DKCcgJyksIGRpc3BsYXlTaXplKTsKKworICBwcmV2U2hvd24gPSAwOworICBwcmV2Q3Vyc29yID0gQlJMX05PX0NVUlNPUjsKKyAgcmVzdGFydCA9IDA7CisKKyAgbG9nTWVzc2FnZShMT0dfQ0FURUdPUlkoQlJBSUxMRV9EUklWRVIpLAorICAgICAgICAgICAgICJNZW1vcnkgYWxsb2NhdGVkLCByZXR1cm5pbmcgMSIpOworICByZXR1cm4gMTsKKyAgCitvdXQyOgorICBmcmVlKHByZXZEYXRhKTsKK291dDE6CisgIGJybGFwaV9sZWF2ZVR0eU1vZGUoKTsKK291dDA6CisgIGJybGFwaV9jbG9zZUNvbm5lY3Rpb24oKTsKK291dDoKKyAgbG9nTWVzc2FnZShMT0dfQ0FURUdPUlkoQlJBSUxMRV9EUklWRVIpLAorICAgICAgICAgICAgICJTb21ldGhpbmcgd2VudCB3cm9uZywgcmV0dXJuaW5nIDAiKTsKKyAgcmV0dXJuIDA7Cit9CisKKy8qIEZ1bmN0aW9uIDogYnJsX2Rlc3RydWN0ICovCisvKiBGcmVlcyBtZW1vcnkgYW5kIGNsb3NlcyB0aGUgY29ubmVjdGlvbiB3aXRoIEJybEFQSSAqLworc3RhdGljIHZvaWQgYnJsX2Rlc3RydWN0KEJyYWlsbGVEaXNwbGF5ICpicmwpCit7CisgIGZyZWUocHJldkRhdGEpOworICBmcmVlKHByZXZUZXh0KTsKKyAgYnJsYXBpX2Nsb3NlQ29ubmVjdGlvbigpOworfQorCitzdGF0aWMgaW50CitzZXRDbGllbnRQcmlvcml0eSAoQnJhaWxsZURpc3BsYXkgKmJybCkgeworICB1bnNpZ25lZCBjaGFyIHdvcnN0ID0gQVJSQVlfQ09VTlQocXVhbGl0eVByaW9yaXRpZXMpIC0gMTsKKyAgdW5zaWduZWQgY2hhciBxdWFsaXR5ID0gTUlOKGJybC0+cXVhbGl0eSwgd29yc3QpOworICBicmxhcGlfcGFyYW1fY2xpZW50UHJpb3JpdHlfdCBwcmlvcml0eSA9IHF1YWxpdHlQcmlvcml0aWVzW3F1YWxpdHldOworCisgIGlmIChwcmlvcml0eSAhPSBjdXJyZW50UHJpb3JpdHkpIHsKKyAgICBpbnQgcmVzdWx0ID0gYnJsYXBpX3NldFBhcmFtZXRlcigKKyAgICAgIEJSTEFQSV9QQVJBTV9DTElFTlRfUFJJT1JJVFksIDAsCisgICAgICBCUkxBUElfUEFSQU1GX0xPQ0FMLCAmcHJpb3JpdHksIHNpemVvZihwcmlvcml0eSkKKyAgICApOworCisgICAgaWYgKHJlc3VsdCA8IDApIHJldHVybiAwOworICAgIGN1cnJlbnRQcmlvcml0eSA9IHByaW9yaXR5OworICB9CisKKyAgcmV0dXJuIDE7Cit9CisKKy8qIGZ1bmN0aW9uIDogYnJsX3dyaXRlV2luZG93ICovCisvKiBEaXNwbGF5cyBhIHRleHQgb24gdGhlIGJyYWlsbGUgd2luZG93LCBvbmx5IGlmIGl0J3MgZGlmZmVyZW50IGZyb20gKi8KKy8qIHRoZSBvbmUgYWxyZWFkeSBkaXNwbGF5ZWQgKi8KK3N0YXRpYyBpbnQgYnJsX3dyaXRlV2luZG93KEJyYWlsbGVEaXNwbGF5ICpicmwsIGNvbnN0IHdjaGFyX3QgKnRleHQpCit7CisgIHNldENsaWVudFByaW9yaXR5KGJybCk7CisKKyAgYnJsYXBpX3dyaXRlQXJndW1lbnRzX3QgYXJndW1lbnRzID0gQlJMQVBJX1dSSVRFQVJHVU1FTlRTX0lOSVRJQUxJWkVSOworICBpbnQgdnQgPSBjdXJyZW50VmlydHVhbFRlcm1pbmFsKCk7CisKKyAgaWYgKHZ0ID09IFNDUl9OT19WVCkgeworICAgIC8qIHNob3VsZCBsZWF2ZSBkaXNwbGF5ICovCisgICAgaWYgKHByZXZTaG93bikgeworICAgICAgYnJsYXBpX3dyaXRlKCZhcmd1bWVudHMpOworICAgICAgcHJldlNob3duID0gMDsKKyAgICB9CisgIH0gZWxzZSB7CisgICAgaWYgKHByZXZTaG93biAmJgorICAgICAgICAobWVtY21wKHByZXZEYXRhLGJybC0+YnVmZmVyLGRpc3BsYXlTaXplKSA9PSAwKSAmJgorICAgICAgICAoIXRleHQgfHwgKHdtZW1jbXAocHJldlRleHQsdGV4dCxkaXNwbGF5U2l6ZSkgPT0gMCkpICYmCisgICAgICAgIChicmwtPmN1cnNvciA9PSBwcmV2Q3Vyc29yKSkgeworICAgICAgcmV0dXJuIDE7CisgICAgfQorCisgICAgdW5zaWduZWQgY2hhciBhbmRbZGlzcGxheVNpemVdOworICAgIG1lbXNldChhbmQsIDAsIHNpemVvZihhbmQpKTsKKyAgICBhcmd1bWVudHMuYW5kTWFzayA9IGFuZDsKKyAgICBhcmd1bWVudHMub3JNYXNrID0gYnJsLT5idWZmZXI7CisKKyAgICBpZiAodGV4dCkgeworICAgICAgYXJndW1lbnRzLnRleHQgPSAoY2hhciopIHRleHQ7CisgICAgICBhcmd1bWVudHMudGV4dFNpemUgPSBkaXNwbGF5U2l6ZSAqIHNpemVvZih3Y2hhcl90KTsKKyAgICAgIGFyZ3VtZW50cy5jaGFyc2V0ID0gKGNoYXIqKSBnZXRXY2hhckNoYXJzZXQoKTsKKyAgICB9CisKKyAgICBhcmd1bWVudHMucmVnaW9uQmVnaW4gPSAxOworICAgIGFyZ3VtZW50cy5yZWdpb25TaXplID0gZGlzcGxheVNpemU7CisgICAgYXJndW1lbnRzLmN1cnNvciA9IChicmwtPmN1cnNvciAhPSBCUkxfTk9fQ1VSU09SKT8gKGJybC0+Y3Vyc29yICsgMSk6IEJSTEFQSV9DVVJTT1JfT0ZGOworCisgICAgaWYgKGJybGFwaV93cml0ZSgmYXJndW1lbnRzKT09MCkgeworICAgICAgbWVtY3B5KHByZXZEYXRhLGJybC0+YnVmZmVyLGRpc3BsYXlTaXplKTsKKyAgICAgIGlmICh0ZXh0KQorCXdtZW1jcHkocHJldlRleHQsdGV4dCxkaXNwbGF5U2l6ZSk7CisgICAgICBlbHNlCisJd21lbXNldChwcmV2VGV4dCwwLGRpc3BsYXlTaXplKTsKKyAgICAgIHByZXZDdXJzb3IgPSBicmwtPmN1cnNvcjsKKyAgICAgIHByZXZTaG93biA9IDE7CisgICAgfSBlbHNlIHsKKyAgICAgIGxvZ01lc3NhZ2UoTE9HX0VSUiwgIndyaXRlOiAlcyIsIGJybGFwaV9zdHJlcnJvcigmYnJsYXBpX2Vycm9yKSk7CisgICAgICByZXN0YXJ0ID0gMTsKKyAgICB9CisgIH0KKworICByZXR1cm4gMTsKK30KKworLyogRnVuY3Rpb24gOiBicmxfcmVhZENvbW1hbmQgKi8KKy8qIFJlYWRzIGEgY29tbWFuZCBmcm9tIHRoZSBicmFpbGxlIGtleWJvYXJkICovCitzdGF0aWMgaW50IGJybF9yZWFkQ29tbWFuZChCcmFpbGxlRGlzcGxheSAqYnJsLCBLZXlUYWJsZUNvbW1hbmRDb250ZXh0IGNvbnRleHQpCit7CisgIGJybGFwaV9rZXlDb2RlX3Qga2V5Y29kZTsKKyAgaWYgKHJlc3RhcnQpIHJldHVybiBCUkxfQ01EX1JFU1RBUlRCUkw7CisgIHN3aXRjaCAoYnJsYXBpX3JlYWRLZXkoMCwgJmtleWNvZGUpKSB7CisgICAgY2FzZSAwOiByZXR1cm4gRU9GOworICAgIGNhc2UgMTogcmV0dXJuIGNtZEJybGFwaVRvQnJsdHR5KGtleWNvZGUpOworICAgIGRlZmF1bHQ6IHJldHVybiBCUkxfQ01EX1JFU1RBUlRCUkw7CisgIH0KK30KZGlmZiAtLWdpdCBhL0RyaXZlcnMvQnJhaWxsZS9DYW51dGUvTWFrZWZpbGUuaW4gYi9Ecml2ZXJzL0JyYWlsbGUvQ2FudXRlL01ha2VmaWxlLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU3OTcxMDIKLS0tIC9kZXYvbnVsbAorKysgYi9Ecml2ZXJzL0JyYWlsbGUvQ2FudXRlL01ha2VmaWxlLmluCkBAIC0wLDAgKzEsMjggQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyMgICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisjCisjIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyMKKyMgQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitEUklWRVJfQ09ERSA9IGNuCitEUklWRVJfTkFNRSA9IENhbnV0ZQorRFJJVkVSX1VTQUdFID0gMzYwICg0MHg5KQorRFJJVkVSX1ZFUlNJT04gPSAKK0RSSVZFUl9ERVZFTE9QRVJTID0gRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPgoraW5jbHVkZSAkKFNSQ19UT1ApYnJhaWxsZS5taworCiticmFpbGxlLiRPOgorCSQoQ0MpICQoQlJMX0NGTEFHUykgLWMgJChTUkNfRElSKS9icmFpbGxlLmMKKwpkaWZmIC0tZ2l0IGEvRHJpdmVycy9CcmFpbGxlL0NhbnV0ZS9icmFpbGxlLmMgYi9Ecml2ZXJzL0JyYWlsbGUvQ2FudXRlL2JyYWlsbGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZjgxNjllCi0tLSAvZGV2L251bGwKKysrIGIvRHJpdmVycy9CcmFpbGxlL0NhbnV0ZS9icmFpbGxlLmMKQEAgLTAsMCArMSw3NjcgQEAKKy8qCisgKiBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorICogICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorICoKKyAqIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorICoKKyAqIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyAqLworCisjaW5jbHVkZSAicHJvbG9ndWUuaCIKKworI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisKKyNpbmNsdWRlICJsb2cuaCIKKyNpbmNsdWRlICJjcmNfZ2VuZXJhdGUuaCIKKyNpbmNsdWRlICJhc3luY19oYW5kbGUuaCIKKyNpbmNsdWRlICJhc3luY19hbGFybS5oIgorI2luY2x1ZGUgInRpbWluZy5oIgorCisjaW5jbHVkZSAiYnJsX2RyaXZlci5oIgorI2luY2x1ZGUgImJybGRlZnMtY24uaCIKKworI2RlZmluZSBQUk9CRV9SRVRSWV9MSU1JVCAwCisjZGVmaW5lIFBST0JFX1JFU1BPTlNFX1RJTUVPVVQgMTAwMAorI2RlZmluZSBDT01NQU5EX1JFU1BPTlNFX1RJTUVPVVQgMTAwMDAKKyNkZWZpbmUgTUFYSU1VTV9SRVNQT05TRV9TSVpFIDBYMTAwCisKKyNkZWZpbmUgS0VZU19QT0xMX0lOVEVSVkFMIDEwMAorI2RlZmluZSBNT1RPUlNfUE9MTF9JTlRFUlZBTCA0MDAKKyNkZWZpbmUgUk9XX1VQREFURV9USU1FIDEyMDAKKyNkZWZpbmUgQ0VMTFNfUkVTRVRfVElNRSAxNDAwMAorI2RlZmluZSBVUERBVEVfUkVUUllfREVMQVkgNTAwMAorCitCRUdJTl9LRVlfTkFNRV9UQUJMRShuYXZpZ2F0aW9uKQorICBLRVlfTkFNRV9FTlRSWShDTl9LRVlfSGVscCwgIkhlbHAiKSwKKyAgS0VZX05BTUVfRU5UUlkoQ05fS0VZX1JlZnJlc2gsICJSZWZyZXNoIiksCisKKyAgS0VZX05BTUVfRU5UUlkoQ05fS0VZX0xpbmUxLCAiTGluZTEiKSwKKyAgS0VZX05BTUVfRU5UUlkoQ05fS0VZX0xpbmUyLCAiTGluZTIiKSwKKyAgS0VZX05BTUVfRU5UUlkoQ05fS0VZX0xpbmUzLCAiTGluZTMiKSwKKyAgS0VZX05BTUVfRU5UUlkoQ05fS0VZX0xpbmU0LCAiTGluZTQiKSwKKyAgS0VZX05BTUVfRU5UUlkoQ05fS0VZX0xpbmU1LCAiTGluZTUiKSwKKyAgS0VZX05BTUVfRU5UUlkoQ05fS0VZX0xpbmU2LCAiTGluZTYiKSwKKyAgS0VZX05BTUVfRU5UUlkoQ05fS0VZX0xpbmU3LCAiTGluZTciKSwKKyAgS0VZX05BTUVfRU5UUlkoQ05fS0VZX0xpbmU4LCAiTGluZTgiKSwKKyAgS0VZX05BTUVfRU5UUlkoQ05fS0VZX0xpbmU5LCAiTGluZTkiKSwKKworICBLRVlfTkFNRV9FTlRSWShDTl9LRVlfQmFjaywgIkJhY2siKSwKKyAgS0VZX05BTUVfRU5UUlkoQ05fS0VZX01lbnUsICJNZW51IiksCisgIEtFWV9OQU1FX0VOVFJZKENOX0tFWV9Gb3J3YXJkLCAiRm9yd2FyZCIpLAorRU5EX0tFWV9OQU1FX1RBQkxFCisKK0JFR0lOX0tFWV9OQU1FX1RBQkxFUyhhbGwpCisgIEtFWV9OQU1FX1RBQkxFKG5hdmlnYXRpb24pLAorRU5EX0tFWV9OQU1FX1RBQkxFUworCitERUZJTkVfS0VZX1RBQkxFKGFsbCkKKworQkVHSU5fS0VZX1RBQkxFX0xJU1QKKyAgJktFWV9UQUJMRV9ERUZJTklUSU9OKGFsbCksCitFTkRfS0VZX1RBQkxFX0xJU1QKKwordHlwZWRlZiBzdHJ1Y3QgeworICB1bnNpZ25lZCBjaGFyIGZvcmNlOworICB1bnNpZ25lZCBjaGFyIGhhdmVPbGRDZWxsczoxOworICB1bnNpZ25lZCBjaGFyIGhhdmVOZXdDZWxsczoxOworCisgIHVuc2lnbmVkIGNoYXIgKm9sZENlbGxzOworICB1bnNpZ25lZCBjaGFyIG5ld0NlbGxzW107Cit9IFJvd0VudHJ5OworCit0eXBlZGVmIEJyYWlsbGVSZXNwb25zZVJlc3VsdCBQcm9iZVJlc3BvbnNlSGFuZGxlciAoCisgIEJyYWlsbGVEaXNwbGF5ICpicmwsCisgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnJlc3BvbnNlLCBzaXplX3Qgc2l6ZQorKTsKKworc3RydWN0IEJyYWlsbGVEYXRhU3RydWN0IHsKKyAgQ1JDR2VuZXJhdG9yICpjcmNHZW5lcmF0b3I7CisgIEFzeW5jSGFuZGxlIGtleXNQb2xsZXJBbGFybTsKKworICBzdHJ1Y3QgeworICAgIFByb2JlUmVzcG9uc2VIYW5kbGVyICpyZXNwb25zZUhhbmRsZXI7CisgICAgdW5zaWduZWQgaW50IHByb3RvY29sVmVyc2lvbjsKKyAgfSBwcm9iZTsKKworICBzdHJ1Y3QgeworICAgIFRpbWVQZXJpb2QgdGltZW91dDsKKyAgICB1bnNpZ25lZCBjaGFyIGNvbW1hbmQ7CisgICAgdW5zaWduZWQgY2hhciB3YWl0aW5nOjE7CisgIH0gcmVzcG9uc2U7CisKKyAgc3RydWN0IHsKKyAgICBUaW1lUGVyaW9kIHJldHJ5RGVsYXk7CisgICAgUm93RW50cnkgKipyb3dFbnRyaWVzOworICAgIHVuc2lnbmVkIGludCBmaXJzdENoYW5nZWRSb3c7CisgICAgdW5zaWduZWQgaW50IGxhc3RSb3dTZW50OworICAgIHVuc2lnbmVkIGNoYXIgcmVzZXRDZWxsczoxOworICB9IHdpbmRvdzsKKworICBzdHJ1Y3QgeworICAgIFRpbWVQZXJpb2QgZGVsYXk7CisgICAgQ05fUGFja2V0SW50ZWdlciBmbGFnczsKKyAgfSBzdGF0dXM7CisKKyAgc3RydWN0IHsKKyAgICBLZXlOdW1iZXJTZXQgcHJlc3NlZDsKKyAgfSBrZXlzOworfTsKKworc3RhdGljIGNyY190CittYWtlUGFja2V0Q2hlY2tzdW0gKEJyYWlsbGVEaXNwbGF5ICpicmwsIGNvbnN0IHZvaWQgKnBhY2tldCwgc2l6ZV90IHNpemUpIHsKKyAgQ1JDR2VuZXJhdG9yICpjcmMgPSBicmwtPmRhdGEtPmNyY0dlbmVyYXRvcjsKKyAgY3JjUmVzZXRHZW5lcmF0b3IoY3JjKTsKKyAgY3JjQWRkRGF0YShjcmMsIHBhY2tldCwgc2l6ZSk7CisgIHJldHVybiBjcmNHZXRDaGVja3N1bShjcmMpOworfQorCit0eXBlZGVmIGVudW0geworICBQVlNfV0FJVElORywKKyAgUFZTX1NUQVJURUQsCisgIFBWU19ET05FCit9IFBhY2tldFZlcmlmaWNhdGlvblN0YXRlOworCit0eXBlZGVmIHN0cnVjdCB7CisgIFBhY2tldFZlcmlmaWNhdGlvblN0YXRlIHN0YXRlOworICB1bnNpZ25lZCBlc2NhcGVkOjE7Cit9IFBhY2tldFZlcmlmaWNhdGlvbkRhdGE7CisKK3N0YXRpYyBCcmFpbGxlUGFja2V0VmVyaWZpZXJSZXN1bHQKK3ZlcmlmeVBhY2tldCAoCisgIEJyYWlsbGVEaXNwbGF5ICpicmwsCisgIHVuc2lnbmVkIGNoYXIgKmJ5dGVzLCBzaXplX3Qgc2l6ZSwKKyAgc2l6ZV90ICpsZW5ndGgsIHZvaWQgKmRhdGEKKykgeworICBQYWNrZXRWZXJpZmljYXRpb25EYXRhICpwdmQgPSBkYXRhOworICB1bnNpZ25lZCBjaGFyICpieXRlID0gJmJ5dGVzW3NpemUtMV07CisKKyAgaWYgKCpieXRlID09IENOX1BBQ0tFVF9GUkFNSU5HX0JZVEUpIHsKKyAgICBpZiAoKHB2ZC0+c3RhdGUgKz0gMSkgPT0gUFZTX0RPTkUpIHsKKyAgICAgIGlmIChwdmQtPmVzY2FwZWQpIHJldHVybiBCUkxfUFZSX0lOVkFMSUQ7CisgICAgICAqbGVuZ3RoID0gc2l6ZSAtIDE7CisgICAgfSBlbHNlIHsKKyAgICAgICpsZW5ndGggPSBNQVhJTVVNX1JFU1BPTlNFX1NJWkU7CisgICAgfQorCisgICAgcmV0dXJuIEJSTF9QVlJfRVhDTFVERTsKKyAgfQorCisgIGlmIChwdmQtPnN0YXRlID09IFBWU19XQUlUSU5HKSB7CisgICAgcmV0dXJuIEJSTF9QVlJfSU5WQUxJRDsKKyAgfQorCisgIGlmICgqYnl0ZSA9PSBDTl9QQUNLRVRfRVNDQVBFX0JZVEUpIHsKKyAgICBpZiAocHZkLT5lc2NhcGVkKSByZXR1cm4gQlJMX1BWUl9JTlZBTElEOworICAgIHB2ZC0+ZXNjYXBlZCA9IDE7CisgICAgcmV0dXJuIEJSTF9QVlJfRVhDTFVERTsKKyAgfQorCisgIGlmIChwdmQtPmVzY2FwZWQpIHsKKyAgICBwdmQtPmVzY2FwZWQgPSAwOworICAgICpieXRlIF49IENOX1BBQ0tFVF9FU0NBUEVfQklUOworICB9CisKKyAgcmV0dXJuIEJSTF9QVlJfSU5DTFVERTsKK30KKworc3RhdGljIHNpemVfdAorcmVhZFBhY2tldCAoQnJhaWxsZURpc3BsYXkgKmJybCwgdm9pZCAqcGFja2V0LCBzaXplX3Qgc2l6ZSkgeworICB3aGlsZSAoMSkgeworICAgIFBhY2tldFZlcmlmaWNhdGlvbkRhdGEgcHZkID0geworICAgICAgLnN0YXRlID0gUFZTX1dBSVRJTkcKKyAgICB9OworCisgICAgc2l6ZV90IGxlbmd0aCA9IHJlYWRCcmFpbGxlUGFja2V0KGJybCwgTlVMTCwgcGFja2V0LCBzaXplLCB2ZXJpZnlQYWNrZXQsICZwdmQpOworCisgICAgaWYgKGxlbmd0aCA+IDApIHsKKyAgICAgIGlmIChsZW5ndGggPCAzKSB7CisgICAgICAgIGxvZ1Nob3J0UGFja2V0KHBhY2tldCwgbGVuZ3RoKTsKKyAgICAgICAgY29udGludWU7CisgICAgICB9CisKKyAgICAgIHsKKyAgICAgICAgY3JjX3QgZXhwZWN0ZWQgPSBDTl9nZXRSZXNwb25zZUludGVnZXIocGFja2V0LCAobGVuZ3RoIC09IDIpKTsKKyAgICAgICAgY3JjX3QgYWN0dWFsID0gbWFrZVBhY2tldENoZWNrc3VtKGJybCwgcGFja2V0LCBsZW5ndGgpOworCisgICAgICAgIGlmIChhY3R1YWwgIT0gZXhwZWN0ZWQpIHsKKyAgICAgICAgICBsb2dCeXRlcyhMT0dfV0FSTklORywKKyAgICAgICAgICAgICJpbnB1dCBwYWNrZXQgY2hlY2tzdW0gbWlzbWF0Y2g6IgorICAgICAgICAgICAgIiBBY3R1YWw6JSJQUkljcmMgIiBFeHBlY3RlZDolIlBSSWNyYywKKyAgICAgICAgICAgIHBhY2tldCwgbGVuZ3RoLAorICAgICAgICAgICAgYWN0dWFsLCBleHBlY3RlZAorICAgICAgICAgICk7CisKKyAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgfQorCisgICAgICB7CisgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ5dGVzID0gcGFja2V0OworICAgICAgICBzaXplX3QgZXhwZWN0ZWQgPSAwOworCisgICAgICAgIHN3aXRjaCAoYnl0ZXNbMF0pIHsKKyAgICAgICAgICBjYXNlIENOX0NNRF9DT0xVTU5fQ09VTlQ6CisgICAgICAgICAgY2FzZSBDTl9DTURfUk9XX0NPVU5UOgorICAgICAgICAgIGNhc2UgQ05fQ01EX1BST1RPQ09MX1ZFUlNJT046CisgICAgICAgICAgY2FzZSBDTl9DTURfRklSTVdBUkVfVkVSU0lPTjoKKyAgICAgICAgICBjYXNlIENOX0NNRF9ERVZJQ0VfU1RBVFVTOgorICAgICAgICAgIGNhc2UgQ05fQ01EX1BSRVNTRURfS0VZUzoKKyAgICAgICAgICBjYXNlIENOX0NNRF9TRU5EX1JPVzoKKyAgICAgICAgICBjYXNlIENOX0NNRF9SRVNFVF9DRUxMUzoKKyAgICAgICAgICAgIGV4cGVjdGVkID0gMzsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGxvZ1VuZXhwZWN0ZWRQYWNrZXQocGFja2V0LCBsZW5ndGgpOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKworICAgICAgICBpZiAobGVuZ3RoIDwgZXhwZWN0ZWQpIHsKKyAgICAgICAgICBsb2dUcnVuY2F0ZWRQYWNrZXQocGFja2V0LCBsZW5ndGgpOworICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIGxlbmd0aDsKKyAgfQorfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK2FkZEJ5dGVUb1BhY2tldCAodW5zaWduZWQgY2hhciAqKnRhcmdldCwgdW5zaWduZWQgY2hhciBieXRlKSB7CisgIGlmICgoYnl0ZSA9PSBDTl9QQUNLRVRfRVNDQVBFX0JZVEUpIHx8IChieXRlID09IENOX1BBQ0tFVF9GUkFNSU5HX0JZVEUpKSB7CisgICAgKigqdGFyZ2V0KSsrID0gQ05fUEFDS0VUX0VTQ0FQRV9CWVRFOworICAgIGJ5dGUgXj0gQ05fUEFDS0VUX0VTQ0FQRV9CSVQ7CisgIH0KKworICAqKCp0YXJnZXQpKysgPSBieXRlOworfQorCitzdGF0aWMgaW50Cit3cml0ZVBhY2tldCAoQnJhaWxsZURpc3BsYXkgKmJybCwgY29uc3QgdW5zaWduZWQgY2hhciAqcGFja2V0LCBzaXplX3Qgc2l6ZSkgeworICBsb2dCeXRlcyhMT0dfQ0FURUdPUlkoT1VUUFVUX1BBQ0tFVFMpLCAicmF3IiwgcGFja2V0LCBzaXplKTsKKworICB1bnNpZ25lZCBjaGFyIGJ1ZmZlclsxICsgKChzaXplICsgMikgKiAyKSArIDFdOworICB1bnNpZ25lZCBjaGFyICp0YXJnZXQgPSBidWZmZXI7CisgICp0YXJnZXQrKyA9IENOX1BBQ0tFVF9GUkFNSU5HX0JZVEU7CisKKyAgeworICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNvdXJjZSA9IHBhY2tldDsKKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyICplbmQgPSBzb3VyY2UgKyBzaXplOworICAgIHdoaWxlIChzb3VyY2UgPCBlbmQpIGFkZEJ5dGVUb1BhY2tldCgmdGFyZ2V0LCAqc291cmNlKyspOworICB9CisKKyAgeworICAgIHVpbnQxNl90IGNoZWNrc3VtID0gbWFrZVBhY2tldENoZWNrc3VtKGJybCwgcGFja2V0LCBzaXplKTsKKyAgICBhZGRCeXRlVG9QYWNrZXQoJnRhcmdldCwgKGNoZWNrc3VtICYgVUlOVDhfTUFYKSk7CisgICAgYWRkQnl0ZVRvUGFja2V0KCZ0YXJnZXQsIChjaGVja3N1bSA+PiA4KSk7CisgIH0KKworICAqdGFyZ2V0KysgPSBDTl9QQUNLRVRfRlJBTUlOR19CWVRFOworICBzaXplID0gdGFyZ2V0IC0gYnVmZmVyOworICBpbnQgb2sgPSB3cml0ZUJyYWlsbGVQYWNrZXQoYnJsLCBOVUxMLCBidWZmZXIsIHNpemUpOworCisgIGlmIChvaykgeworICAgIGJybC0+ZGF0YS0+cmVzcG9uc2Uud2FpdGluZyA9IDE7CisgICAgc3RhcnRUaW1lUGVyaW9kKCZicmwtPmRhdGEtPnJlc3BvbnNlLnRpbWVvdXQsIENPTU1BTkRfUkVTUE9OU0VfVElNRU9VVCk7CisgICAgYnJsLT5kYXRhLT5yZXNwb25zZS5jb21tYW5kID0gcGFja2V0WzBdOworICB9IGVsc2UgeworICAgIGJybC0+aGFzRmFpbGVkID0gMTsKKyAgfQorCisgIHJldHVybiBvazsKK30KKworc3RhdGljIGludAord3JpdGVTaW1wbGVDb21tYW5kIChCcmFpbGxlRGlzcGxheSAqYnJsLCB1bnNpZ25lZCBjaGFyIGNvbW1hbmQpIHsKKyAgY29uc3QgdW5zaWduZWQgY2hhciBwYWNrZXRbXSA9IHtjb21tYW5kfTsKKyAgcmV0dXJuIHdyaXRlUGFja2V0KGJybCwgcGFja2V0LCBzaXplb2YocGFja2V0KSk7Cit9CisKK3N0YXRpYyBSb3dFbnRyeSAqCitnZXRSb3dFbnRyeSAoQnJhaWxsZURpc3BsYXkgKmJybCwgdW5zaWduZWQgaW50IGluZGV4KSB7CisgIHJldHVybiBicmwtPmRhdGEtPndpbmRvdy5yb3dFbnRyaWVzW2luZGV4XTsKK30KKworc3RhdGljIHZvaWQKK2RlYWxsb2NhdGVSb3dFbnRyaWVzIChCcmFpbGxlRGlzcGxheSAqYnJsLCB1bnNpZ25lZCBpbnQgY291bnQpIHsKKyAgUm93RW50cnkgKioqcm93RW50cmllcyA9ICZicmwtPmRhdGEtPndpbmRvdy5yb3dFbnRyaWVzOworCisgIGlmICgqcm93RW50cmllcykgeworICAgIHdoaWxlIChjb3VudCA+IDApIGZyZWUoZ2V0Um93RW50cnkoYnJsLCAtLWNvdW50KSk7CisgICAgZnJlZSgqcm93RW50cmllcyk7CisgICAgKnJvd0VudHJpZXMgPSBOVUxMOworICB9Cit9CisKK3N0YXRpYyBpbnQKK2FsbG9jYXRlUm93RW50cmllcyAoQnJhaWxsZURpc3BsYXkgKmJybCkgeworICBSb3dFbnRyeSAqKipyb3dFbnRyaWVzID0gJmJybC0+ZGF0YS0+d2luZG93LnJvd0VudHJpZXM7CisKKyAgaWYgKCEoKnJvd0VudHJpZXMgPSBtYWxsb2MoQVJSQVlfU0laRSgqcm93RW50cmllcywgYnJsLT50ZXh0Um93cykpKSkgeworICAgIGxvZ01hbGxvY0Vycm9yKCk7CisgICAgcmV0dXJuIDA7CisgIH0KKworICBmb3IgKHVuc2lnbmVkIGludCBpbmRleD0wOyBpbmRleDxicmwtPnRleHRSb3dzOyBpbmRleCs9MSkgeworICAgIFJvd0VudHJ5ICoqcm93ID0gJigqcm93RW50cmllcylbaW5kZXhdOworICAgIHNpemVfdCByb3dMZW5ndGggPSBicmwtPnRleHRDb2x1bW5zOworICAgIHNpemVfdCBzaXplID0gc2l6ZW9mKCoqcm93KSArIChyb3dMZW5ndGggKiAyKTsKKworICAgIGlmICghKCpyb3cgPSBtYWxsb2Moc2l6ZSkpKSB7CisgICAgICBsb2dNYWxsb2NFcnJvcigpOworICAgICAgZGVhbGxvY2F0ZVJvd0VudHJpZXMoYnJsLCAoaW5kZXggKyAxKSk7CisgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBtZW1zZXQoKnJvdywgMCwgc2l6ZSk7CisgICAgKCpyb3cpLT5mb3JjZSA9IDE7CisgICAgKCpyb3cpLT5vbGRDZWxscyA9ICgqcm93KS0+bmV3Q2VsbHMgKyByb3dMZW5ndGg7CisgIH0KKworICByZXR1cm4gMTsKK30KKworc3RhdGljIHZvaWQKK3NldFJvd0hhc0NoYW5nZWQgKEJyYWlsbGVEaXNwbGF5ICpicmwsIHVuc2lnbmVkIGludCBpbmRleCkgeworICBnZXRSb3dFbnRyeShicmwsIGluZGV4KS0+aGF2ZU5ld0NlbGxzID0gMTsKKyAgbG9nTWVzc2FnZShMT0dfQ0FURUdPUlkoQlJBSUxMRV9EUklWRVIpLCAicm93IGhhcyBjaGFuZ2VkOiAldSIsIGluZGV4KTsKKworICBpZiAoaW5kZXggPCBicmwtPmRhdGEtPndpbmRvdy5maXJzdENoYW5nZWRSb3cpIHsKKyAgICBsb2dNZXNzYWdlKExPR19DQVRFR09SWShCUkFJTExFX0RSSVZFUiksICJmaXJzdCBjaGFuZ2VkIHJvdzogJXUiLCBpbmRleCk7CisgICAgYnJsLT5kYXRhLT53aW5kb3cuZmlyc3RDaGFuZ2VkUm93ID0gaW5kZXg7CisgIH0KK30KKworc3RhdGljIHZvaWQKK3Jlc2VuZFJvdyAoQnJhaWxsZURpc3BsYXkgKmJybCkgeworICBsb2dNZXNzYWdlKExPR19DQVRFR09SWShCUkFJTExFX0RSSVZFUiksICJyZXNlbmRpbmcgcm93OiAldSIsIGJybC0+ZGF0YS0+d2luZG93Lmxhc3RSb3dTZW50KTsKKyAgc2V0Um93SGFzQ2hhbmdlZChicmwsIGJybC0+ZGF0YS0+d2luZG93Lmxhc3RSb3dTZW50KTsKK30KKworc3RhdGljIGludAorcmVmcmVzaEFsbFJvd3MgKEJyYWlsbGVEaXNwbGF5ICpicmwpIHsKKyAgYnJsLT5kYXRhLT53aW5kb3cucmVzZXRDZWxscyA9IDE7CisgIHJldHVybiAxOworfQorCitzdGF0aWMgaW50CityZWZyZXNoUm93IChCcmFpbGxlRGlzcGxheSAqYnJsLCBpbnQgcm93KSB7CisgIHJldHVybiByZWZyZXNoQWxsUm93cyhicmwpOyAvLyBmb3Igbm93Cit9CisKK0FTWU5DX0FMQVJNX0NBTExCQUNLKENOX2tleXNQb2xsZXIpIHsKKyAgQnJhaWxsZURpc3BsYXkgKmJybCA9IHBhcmFtZXRlcnMtPmRhdGE7CisKKyAgaWYgKCFicmwtPmRhdGEtPnJlc3BvbnNlLndhaXRpbmcpIHsKKyAgICB3cml0ZVNpbXBsZUNvbW1hbmQoYnJsLCBDTl9DTURfUFJFU1NFRF9LRVlTKTsKKyAgfSBlbHNlIGlmIChhZnRlclRpbWVQZXJpb2QoJmJybC0+ZGF0YS0+cmVzcG9uc2UudGltZW91dCwgTlVMTCkpIHsKKyAgICB1bnNpZ25lZCBjaGFyIGNvbW1hbmQgPSBicmwtPmRhdGEtPnJlc3BvbnNlLmNvbW1hbmQ7CisgICAgbG9nTWVzc2FnZShMT0dfV0FSTklORywgImNvbW1hbmQgcmVzcG9uc2UgdGltZW91dDogQ21kOjBYJTAyWCIsIGNvbW1hbmQpOworCisgICAgc3dpdGNoIChjb21tYW5kKSB7CisgICAgICBjYXNlIENOX0NNRF9TRU5EX1JPVzoKKyAgICAgICAgcmVzZW5kUm93KGJybCk7CisgICAgICAgIGJyZWFrOworCisgICAgICBjYXNlIENOX0NNRF9SRVNFVF9DRUxMUzoKKyAgICAgICAgYnJsLT5kYXRhLT53aW5kb3cucmVzZXRDZWxscyA9IDE7OworICAgICAgICBicmVhazsKKworICAgICAgZGVmYXVsdDoKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgd3JpdGVTaW1wbGVDb21tYW5kKGJybCwgQ05fQ01EX0RFVklDRV9TVEFUVVMpOworICB9Cit9CisKK3N0YXRpYyB2b2lkCitzdG9wS2V5c1BvbGxlciAoQnJhaWxsZURpc3BsYXkgKmJybCkgeworICBBc3luY0hhbmRsZSAqYWxhcm0gPSAmYnJsLT5kYXRhLT5rZXlzUG9sbGVyQWxhcm07CisKKyAgaWYgKCphbGFybSkgeworICAgIGFzeW5jQ2FuY2VsUmVxdWVzdCgqYWxhcm0pOworICAgICphbGFybSA9IE5VTEw7CisgIH0KK30KKworc3RhdGljIGludAorc3RhcnRLZXlzUG9sbGVyIChCcmFpbGxlRGlzcGxheSAqYnJsKSB7CisgIEFzeW5jSGFuZGxlIGFsYXJtID0gYnJsLT5kYXRhLT5rZXlzUG9sbGVyQWxhcm07CisgIGlmIChhbGFybSkgcmV0dXJuIDE7CisKKyAgaWYgKGFzeW5jTmV3UmVsYXRpdmVBbGFybSgmYWxhcm0sIDAsIENOX2tleXNQb2xsZXIsIGJybCkpIHsKKyAgICBpZiAoYXN5bmNSZXNldEFsYXJtSW50ZXJ2YWwoYWxhcm0sIEtFWVNfUE9MTF9JTlRFUlZBTCkpIHsKKyAgICAgIGJybC0+ZGF0YS0+a2V5c1BvbGxlckFsYXJtID0gYWxhcm07CisgICAgICByZXR1cm4gMTsKKyAgICB9CisKKyAgICBhc3luY0NhbmNlbFJlcXVlc3QoYWxhcm0pOworICB9CisKKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBCcmFpbGxlUmVzcG9uc2VSZXN1bHQKK2lzSWRlbnRpdHlSZXNwb25zZSAoQnJhaWxsZURpc3BsYXkgKmJybCwgY29uc3Qgdm9pZCAqcGFja2V0LCBzaXplX3Qgc2l6ZSkgeworICBicmwtPmRhdGEtPnJlc3BvbnNlLndhaXRpbmcgPSAwOworICBQcm9iZVJlc3BvbnNlSGFuZGxlciAqaGFuZGxlciA9IGJybC0+ZGF0YS0+cHJvYmUucmVzcG9uc2VIYW5kbGVyOworICBicmwtPmRhdGEtPnByb2JlLnJlc3BvbnNlSGFuZGxlciA9IE5VTEw7CisgIHJldHVybiBoYW5kbGVyKGJybCwgcGFja2V0LCBzaXplKTsKK30KKworc3RhdGljIEJyYWlsbGVSZXNwb25zZVJlc3VsdAord3JpdGVQcm9iZUNvbW1hbmQgKEJyYWlsbGVEaXNwbGF5ICpicmwsIHVuc2lnbmVkIGNoYXIgY29tbWFuZCwgUHJvYmVSZXNwb25zZUhhbmRsZXIgKmhhbmRsZXIpIHsKKyAgaWYgKCF3cml0ZVNpbXBsZUNvbW1hbmQoYnJsLCBjb21tYW5kKSkgcmV0dXJuIDA7CisgIGJybC0+ZGF0YS0+cHJvYmUucmVzcG9uc2VIYW5kbGVyID0gaGFuZGxlcjsKKyAgcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBCcmFpbGxlUmVzcG9uc2VSZXN1bHQKK3dyaXRlTmV4dFByb2JlQ29tbWFuZCAoQnJhaWxsZURpc3BsYXkgKmJybCwgdW5zaWduZWQgY2hhciBjb21tYW5kLCBQcm9iZVJlc3BvbnNlSGFuZGxlciAqaGFuZGxlcikgeworICByZXR1cm4gd3JpdGVQcm9iZUNvbW1hbmQoYnJsLCBjb21tYW5kLCBoYW5kbGVyKT8gQlJMX1JTUF9DT05USU5VRTogQlJMX1JTUF9GQUlMOworfQorCitzdGF0aWMgQnJhaWxsZVJlc3BvbnNlUmVzdWx0CitoYW5kbGVEZXZpY2VTdGF0dXMgKEJyYWlsbGVEaXNwbGF5ICpicmwsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnJlc3BvbnNlLCBzaXplX3Qgc2l6ZSkgeworICBpZiAocmVzcG9uc2VbMF0gIT0gQ05fQ01EX0RFVklDRV9TVEFUVVMpIHJldHVybiBCUkxfUlNQX1VORVhQRUNURUQ7CisgIGJybC0+ZGF0YS0+c3RhdHVzLmZsYWdzID0gQ05fZ2V0UmVzcG9uc2VSZXN1bHQocmVzcG9uc2UpOworICByZXR1cm4gQlJMX1JTUF9ET05FOworfQorCitzdGF0aWMgQnJhaWxsZVJlc3BvbnNlUmVzdWx0CitoYW5kbGVGaXJtd2FyZVZlcnNpb24gKEJyYWlsbGVEaXNwbGF5ICpicmwsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnJlc3BvbnNlLCBzaXplX3Qgc2l6ZSkgeworICBpZiAocmVzcG9uc2VbMF0gIT0gQ05fQ01EX0ZJUk1XQVJFX1ZFUlNJT04pIHJldHVybiBCUkxfUlNQX1VORVhQRUNURUQ7CisKKyAgcmVzcG9uc2UgKz0gMTsKKyAgc2l6ZSAtPSAxOworICBsb2dNZXNzYWdlKExPR19JTkZPLCAiRmlybXdhcmUgVmVyc2lvbjogJS4qcyIsIChpbnQpc2l6ZSwgcmVzcG9uc2UpOworCisgIHJldHVybiB3cml0ZU5leHRQcm9iZUNvbW1hbmQoYnJsLCBDTl9DTURfREVWSUNFX1NUQVRVUywgaGFuZGxlRGV2aWNlU3RhdHVzKTsKK30KKworc3RhdGljIEJyYWlsbGVSZXNwb25zZVJlc3VsdAoraGFuZGxlUHJvdG9jb2xWZXJzaW9uIChCcmFpbGxlRGlzcGxheSAqYnJsLCBjb25zdCB1bnNpZ25lZCBjaGFyICpyZXNwb25zZSwgc2l6ZV90IHNpemUpIHsKKyAgaWYgKHJlc3BvbnNlWzBdICE9IENOX0NNRF9QUk9UT0NPTF9WRVJTSU9OKSByZXR1cm4gQlJMX1JTUF9VTkVYUEVDVEVEOworICBicmwtPmRhdGEtPnByb2JlLnByb3RvY29sVmVyc2lvbiA9IENOX2dldFJlc3BvbnNlUmVzdWx0KHJlc3BvbnNlKTsKKyAgbG9nTWVzc2FnZShMT0dfSU5GTywgIlByb3RvY29sIFZlcnNpb246ICV1IiwgYnJsLT5kYXRhLT5wcm9iZS5wcm90b2NvbFZlcnNpb24pOworICByZXR1cm4gd3JpdGVOZXh0UHJvYmVDb21tYW5kKGJybCwgQ05fQ01EX0ZJUk1XQVJFX1ZFUlNJT04sIGhhbmRsZUZpcm13YXJlVmVyc2lvbik7Cit9CisKK3N0YXRpYyBCcmFpbGxlUmVzcG9uc2VSZXN1bHQKK2hhbmRsZVJvd0NvdW50IChCcmFpbGxlRGlzcGxheSAqYnJsLCBjb25zdCB1bnNpZ25lZCBjaGFyICpyZXNwb25zZSwgc2l6ZV90IHNpemUpIHsKKyAgaWYgKHJlc3BvbnNlWzBdICE9IENOX0NNRF9ST1dfQ09VTlQpIHJldHVybiBCUkxfUlNQX1VORVhQRUNURUQ7CisgIGJybC0+dGV4dFJvd3MgPSBDTl9nZXRSZXNwb25zZVJlc3VsdChyZXNwb25zZSk7CisgIHJldHVybiB3cml0ZU5leHRQcm9iZUNvbW1hbmQoYnJsLCBDTl9DTURfUFJPVE9DT0xfVkVSU0lPTiwgaGFuZGxlUHJvdG9jb2xWZXJzaW9uKTsKK30KKworc3RhdGljIEJyYWlsbGVSZXNwb25zZVJlc3VsdAoraGFuZGxlQ29sdW1uQ291bnQgKEJyYWlsbGVEaXNwbGF5ICpicmwsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnJlc3BvbnNlLCBzaXplX3Qgc2l6ZSkgeworICBpZiAocmVzcG9uc2VbMF0gIT0gQ05fQ01EX0NPTFVNTl9DT1VOVCkgcmV0dXJuIEJSTF9SU1BfVU5FWFBFQ1RFRDsKKyAgYnJsLT50ZXh0Q29sdW1ucyA9IENOX2dldFJlc3BvbnNlUmVzdWx0KHJlc3BvbnNlKTsKKyAgcmV0dXJuIHdyaXRlTmV4dFByb2JlQ29tbWFuZChicmwsIENOX0NNRF9ST1dfQ09VTlQsIGhhbmRsZVJvd0NvdW50KTsKK30KKworc3RhdGljIGludAord3JpdGVJZGVudGlmeVJlcXVlc3QgKEJyYWlsbGVEaXNwbGF5ICpicmwpIHsKKyAgcmV0dXJuIHdyaXRlUHJvYmVDb21tYW5kKGJybCwgQ05fQ01EX0NPTFVNTl9DT1VOVCwgaGFuZGxlQ29sdW1uQ291bnQpOworfQorCitzdGF0aWMgaW50Citjb25uZWN0UmVzb3VyY2UgKEJyYWlsbGVEaXNwbGF5ICpicmwsIGNvbnN0IGNoYXIgKmlkZW50aWZpZXIpIHsKKyAgc3RhdGljIGNvbnN0IFNlcmlhbFBhcmFtZXRlcnMgc2VyaWFsUGFyYW1ldGVycyA9IHsKKyAgICBTRVJJQUxfREVGQVVMVF9QQVJBTUVURVJTLAorICAgIC5iYXVkID0gOTYwMAorICB9OworCisgIEJFR0lOX1VTQl9TVFJJTkdfTElTVCh1c2JNYW51ZmFjdHVyZXJzXzE2QzBfMDVFMSkKKyAgICAiYnJpc3RvbGJyYWlsbGUuY28udWsiLAorICBFTkRfVVNCX1NUUklOR19MSVNUCisKKyAgQkVHSU5fVVNCX1NUUklOR19MSVNUKHVzYlByb2R1Y3RzXzE2QzBfMDVFMSkKKyAgICAiQ2FudXRlIDM2MCIsCisgIEVORF9VU0JfU1RSSU5HX0xJU1QKKworICBCRUdJTl9VU0JfQ0hBTk5FTF9ERUZJTklUSU9OUworICAgIHsgLyogYWxsIG1vZGVscyAqLworICAgICAgLnZlbmRvcj0wWDE2QzAsIC5wcm9kdWN0PTBYMDVFMSwKKyAgICAgIC5tYW51ZmFjdHVyZXJzID0gdXNiTWFudWZhY3R1cmVyc18xNkMwXzA1RTEsCisgICAgICAucHJvZHVjdHMgPSB1c2JQcm9kdWN0c18xNkMwXzA1RTEsCisgICAgICAuY29uZmlndXJhdGlvbj0xLCAuaW50ZXJmYWNlPTEsIC5hbHRlcm5hdGl2ZT0wLAorICAgICAgLmlucHV0RW5kcG9pbnQ9MywgLm91dHB1dEVuZHBvaW50PTIsCisgICAgICAuc2VyaWFsID0gJnNlcmlhbFBhcmFtZXRlcnMsCisgICAgICAucmVzZXREZXZpY2UgPSAxCisgICAgfSwKKyAgRU5EX1VTQl9DSEFOTkVMX0RFRklOSVRJT05TCisKKyAgR2lvRGVzY3JpcHRvciBkZXNjcmlwdG9yOworICBnaW9Jbml0aWFsaXplRGVzY3JpcHRvcigmZGVzY3JpcHRvcik7CisKKyAgZGVzY3JpcHRvci5zZXJpYWwucGFyYW1ldGVycyA9ICZzZXJpYWxQYXJhbWV0ZXJzOworCisgIGRlc2NyaXB0b3IudXNiLmNoYW5uZWxEZWZpbml0aW9ucyA9IHVzYkNoYW5uZWxEZWZpbml0aW9uczsKKworICBpZiAoY29ubmVjdEJyYWlsbGVSZXNvdXJjZShicmwsIGlkZW50aWZpZXIsICZkZXNjcmlwdG9yLCBOVUxMKSkgeworICAgIHJldHVybiAxOworICB9CisKKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK2JybF9jb25zdHJ1Y3QgKEJyYWlsbGVEaXNwbGF5ICpicmwsIGNoYXIgKipwYXJhbWV0ZXJzLCBjb25zdCBjaGFyICpkZXZpY2UpIHsKKyAgaWYgKChicmwtPmRhdGEgPSBtYWxsb2Moc2l6ZW9mKCpicmwtPmRhdGEpKSkpIHsKKyAgICBtZW1zZXQoYnJsLT5kYXRhLCAwLCBzaXplb2YoKmJybC0+ZGF0YSkpOworCisgICAgYnJsLT5kYXRhLT5jcmNHZW5lcmF0b3IgPSBOVUxMOworICAgIGJybC0+ZGF0YS0+a2V5c1BvbGxlckFsYXJtID0gTlVMTDsKKworICAgIGJybC0+ZGF0YS0+cHJvYmUucmVzcG9uc2VIYW5kbGVyID0gTlVMTDsKKyAgICBicmwtPmRhdGEtPnByb2JlLnByb3RvY29sVmVyc2lvbiA9IDA7CisKKyAgICBicmwtPmRhdGEtPnJlc3BvbnNlLndhaXRpbmcgPSAwOworCisgICAgc3RhcnRUaW1lUGVyaW9kKCZicmwtPmRhdGEtPndpbmRvdy5yZXRyeURlbGF5LCAwKTsKKyAgICBicmwtPmRhdGEtPndpbmRvdy5yb3dFbnRyaWVzID0gTlVMTDsKKyAgICBicmwtPmRhdGEtPndpbmRvdy5yZXNldENlbGxzID0gMDsKKworICAgIGJybC0+ZGF0YS0+a2V5cy5wcmVzc2VkID0gMDsKKworICAgIHsKKyAgICAgIHN0YXRpYyBjb25zdCBDUkNBbGdvcml0aG0gYWxnb3JpdGhtID0geworICAgICAgICAucHJpbWFyeU5hbWUgPSBDTl9DUkNfQUxHT1JJVEhNX05BTUUsCisgICAgICAgIC5jaGVja3N1bVdpZHRoID0gQ05fQ1JDX0NIRUNLU1VNX1dJRFRILAorICAgICAgICAucmVmbGVjdERhdGEgPSBDTl9DUkNfUkVGTEVDVF9EQVRBLAorICAgICAgICAucmVmbGVjdFJlc3VsdCA9IENOX0NSQ19SRUZMRUNUX1JFU1VMVCwKKyAgICAgICAgLmdlbmVyYXRvclBvbHlub21pYWwgPSBVSU5UMTZfQyhDTl9DUkNfR0VORVJBVE9SX1BPTFlOT01JQUwpLAorICAgICAgICAuaW5pdGlhbFZhbHVlID0gVUlOVDE2X0MoQ05fQ1JDX0lOSVRJQUxfVkFMVUUpLAorICAgICAgICAueG9yTWFzayA9IFVJTlQxNl9DKENOX0NSQ19YT1JfTUFTSyksCisgICAgICAgIC5jaGVja1ZhbHVlID0gVUlOVDE2X0MoQ05fQ1JDX0NIRUNLX1ZBTFVFKSwKKyAgICAgICAgLnJlc2lkdWUgPSBVSU5UMTZfQyhDTl9DUkNfUkVTSURVRSksCisgICAgICB9OworCisgICAgICBicmwtPmRhdGEtPmNyY0dlbmVyYXRvciA9IGNyY05ld0dlbmVyYXRvcigmYWxnb3JpdGhtKTsKKyAgICB9CisKKyAgICBpZiAoYnJsLT5kYXRhLT5jcmNHZW5lcmF0b3IpIHsKKyAgICAgIGlmIChjb25uZWN0UmVzb3VyY2UoYnJsLCBkZXZpY2UpKSB7CisgICAgICAgIHVuc2lnbmVkIGNoYXIgcmVzcG9uc2VbTUFYSU1VTV9SRVNQT05TRV9TSVpFXTsKKworICAgICAgICBpZiAocHJvYmVCcmFpbGxlRGlzcGxheShicmwsIFBST0JFX1JFVFJZX0xJTUlULAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCBQUk9CRV9SRVNQT05TRV9USU1FT1VULAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZUlkZW50aWZ5UmVxdWVzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZFBhY2tldCwgJnJlc3BvbnNlLCBzaXplb2YocmVzcG9uc2UpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc0lkZW50aXR5UmVzcG9uc2UpKSB7CisgICAgICAgICAgaWYgKGFsbG9jYXRlUm93RW50cmllcyhicmwpKSB7CisgICAgICAgICAgICBicmwtPnJlZnJlc2hCcmFpbGxlRGlzcGxheSA9IHJlZnJlc2hBbGxSb3dzOworICAgICAgICAgICAgYnJsLT5yZWZyZXNoQnJhaWxsZVJvdyA9IHJlZnJlc2hSb3c7CisgICAgICAgICAgICBicmwtPmNlbGxTaXplID0gNjsKKworICAgICAgICAgICAgc2V0QnJhaWxsZUtleVRhYmxlKGJybCwgJktFWV9UQUJMRV9ERUZJTklUSU9OKGFsbCkpOworICAgICAgICAgICAgbWFrZU91dHB1dFRhYmxlKGRvdHNUYWJsZV9JU08xMTU0OF8xKTsKKworICAgICAgICAgICAgaWYgKHN0YXJ0S2V5c1BvbGxlcihicmwpKSB7CisgICAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBkZWFsbG9jYXRlUm93RW50cmllcyhicmwsIGJybC0+dGV4dFJvd3MpOworICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGRpc2Nvbm5lY3RCcmFpbGxlUmVzb3VyY2UoYnJsLCBOVUxMKTsKKyAgICAgIH0KKworICAgICAgY3JjRGVzdHJveUdlbmVyYXRvcihicmwtPmRhdGEtPmNyY0dlbmVyYXRvcik7CisgICAgfQorCisgICAgZnJlZShicmwtPmRhdGEpOworICB9IGVsc2UgeworICAgIGxvZ01hbGxvY0Vycm9yKCk7CisgIH0KKworICByZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQKK2JybF9kZXN0cnVjdCAoQnJhaWxsZURpc3BsYXkgKmJybCkgeworICBzdG9wS2V5c1BvbGxlcihicmwpOworICBkaXNjb25uZWN0QnJhaWxsZVJlc291cmNlKGJybCwgTlVMTCk7CisKKyAgZGVhbGxvY2F0ZVJvd0VudHJpZXMoYnJsLCBicmwtPnRleHRSb3dzKTsKKyAgY3JjRGVzdHJveUdlbmVyYXRvcihicmwtPmRhdGEtPmNyY0dlbmVyYXRvcik7CisKKyAgZnJlZShicmwtPmRhdGEpOworICBicmwtPmRhdGEgPSBOVUxMOworfQorCitzdGF0aWMgaW50Citicmxfd3JpdGVXaW5kb3cgKEJyYWlsbGVEaXNwbGF5ICpicmwsIGNvbnN0IHdjaGFyX3QgKnRleHQpIHsKKyAgdW5zaWduZWQgaW50IGxlbmd0aCA9IGJybC0+dGV4dENvbHVtbnM7CisgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmNlbGxzID0gYnJsLT5idWZmZXI7CisKKyAgZm9yICh1bnNpZ25lZCBpbnQgaW5kZXg9MDsgaW5kZXg8YnJsLT50ZXh0Um93czsgaW5kZXgrPTEpIHsKKyAgICBSb3dFbnRyeSAqcm93ID0gZ2V0Um93RW50cnkoYnJsLCBpbmRleCk7CisKKyAgICBpZiAoY2VsbHNIYXZlQ2hhbmdlZChyb3ctPm5ld0NlbGxzLCBjZWxscywgbGVuZ3RoLCBOVUxMLCBOVUxMLCAmcm93LT5mb3JjZSkpIHsKKyAgICAgIHNldFJvd0hhc0NoYW5nZWQoYnJsLCBpbmRleCk7CisgICAgfQorCisgICAgY2VsbHMgKz0gbGVuZ3RoOworICB9CisKKyAgcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQKK3N0YXJ0VXBkYXRlIChCcmFpbGxlRGlzcGxheSAqYnJsKSB7CisgIGlmICghYWZ0ZXJUaW1lUGVyaW9kKCZicmwtPmRhdGEtPndpbmRvdy5yZXRyeURlbGF5LCBOVUxMKSkgcmV0dXJuIDA7CisKKyAgaWYgKGJybC0+ZGF0YS0+d2luZG93LnJlc2V0Q2VsbHMpIHsKKyAgICBicmwtPmRhdGEtPndpbmRvdy5yZXNldENlbGxzID0gMDsKKyAgICBicmwtPmRhdGEtPndpbmRvdy5maXJzdENoYW5nZWRSb3cgPSAwOworCisgICAgZm9yICh1bnNpZ25lZCBpbnQgaW5kZXg9MDsgaW5kZXg8YnJsLT50ZXh0Um93czsgaW5kZXgrPTEpIHsKKyAgICAgIFJvd0VudHJ5ICpyb3cgPSBnZXRSb3dFbnRyeShicmwsIGluZGV4KTsKKyAgICAgIHJvdy0+aGF2ZU5ld0NlbGxzID0gMTsKKyAgICAgIHJvdy0+aGF2ZU9sZENlbGxzID0gMDsKKyAgICB9CisKKyAgICB3cml0ZVNpbXBsZUNvbW1hbmQoYnJsLCBDTl9DTURfUkVTRVRfQ0VMTFMpOworICAgIHJldHVybiAxOworICB9CisKKyAgd2hpbGUgKGJybC0+ZGF0YS0+d2luZG93LmZpcnN0Q2hhbmdlZFJvdyA8IGJybC0+dGV4dFJvd3MpIHsKKyAgICBSb3dFbnRyeSAqcm93ID0gZ2V0Um93RW50cnkoYnJsLCBicmwtPmRhdGEtPndpbmRvdy5maXJzdENoYW5nZWRSb3cpOworCisgICAgaWYgKHJvdy0+aGF2ZU5ld0NlbGxzKSB7CisgICAgICB1bnNpZ25lZCBpbnQgbGVuZ3RoID0gYnJsLT50ZXh0Q29sdW1uczsKKworICAgICAgaWYgKHJvdy0+aGF2ZU9sZENlbGxzKSB7CisgICAgICAgIGlmIChtZW1jbXAocm93LT5uZXdDZWxscywgcm93LT5vbGRDZWxscywgbGVuZ3RoKSA9PSAwKSB7CisgICAgICAgICAgcm93LT5oYXZlTmV3Q2VsbHMgPSAwOworICAgICAgICB9CisgICAgICB9CisKKyAgICAgIGlmIChyb3ctPmhhdmVOZXdDZWxscykgeworICAgICAgICB1bnNpZ25lZCBjaGFyIHBhY2tldFsyICsgbGVuZ3RoXTsKKyAgICAgICAgdW5zaWduZWQgY2hhciAqYnl0ZSA9IHBhY2tldDsKKworICAgICAgICAqYnl0ZSsrID0gQ05fQ01EX1NFTkRfUk9XOworICAgICAgICAqYnl0ZSsrID0gYnJsLT5kYXRhLT53aW5kb3cuZmlyc3RDaGFuZ2VkUm93OworICAgICAgICBieXRlID0gdHJhbnNsYXRlT3V0cHV0Q2VsbHMoYnl0ZSwgcm93LT5uZXdDZWxscywgbGVuZ3RoKTsKKworICAgICAgICBzaXplX3Qgc2l6ZSA9IGJ5dGUgLSBwYWNrZXQ7CisgICAgICAgIGxvZ0J5dGVzKExPR19DQVRFR09SWShCUkFJTExFX0RSSVZFUiksICJzZW5kaW5nIHJvdzogJXUiLCBwYWNrZXQsIHNpemUsIGJybC0+ZGF0YS0+d2luZG93LmZpcnN0Q2hhbmdlZFJvdyk7CisKKyAgICAgICAgaWYgKHdyaXRlUGFja2V0KGJybCwgcGFja2V0LCBzaXplKSkgeworICAgICAgICAgIHJvdy0+aGF2ZU5ld0NlbGxzID0gMDsKKyAgICAgICAgICBicmwtPmRhdGEtPndpbmRvdy5sYXN0Um93U2VudCA9IGJybC0+ZGF0YS0+d2luZG93LmZpcnN0Q2hhbmdlZFJvdysrOworICAgICAgICAgIG1lbWNweShyb3ctPm9sZENlbGxzLCByb3ctPm5ld0NlbGxzLCBsZW5ndGgpOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIDE7CisgICAgICB9CisgICAgfQorCisgICAgYnJsLT5kYXRhLT53aW5kb3cuZmlyc3RDaGFuZ2VkUm93ICs9IDE7CisgIH0KKworICByZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQKK3N0YXJ0TmV4dENvbW1hbmQgKEJyYWlsbGVEaXNwbGF5ICpicmwpIHsKKyAgaWYgKCEoYnJsLT5kYXRhLT5zdGF0dXMuZmxhZ3MgJiBDTl9TVEFUVVNfTU9UT1JTX0FDVElWRSkpIHsKKyAgICBzdGFydFVwZGF0ZShicmwpOworICB9IGVsc2UgaWYgKGFmdGVyVGltZVBlcmlvZCgmYnJsLT5kYXRhLT5zdGF0dXMuZGVsYXksIE5VTEwpKSB7CisgICAgc3RhcnRUaW1lUGVyaW9kKCZicmwtPmRhdGEtPnN0YXR1cy5kZWxheSwgTU9UT1JTX1BPTExfSU5URVJWQUwpOworICAgIHdyaXRlU2ltcGxlQ29tbWFuZChicmwsIENOX0NNRF9ERVZJQ0VfU1RBVFVTKTsKKyAgfQorfQorCitzdGF0aWMgaW50CiticmxfcmVhZENvbW1hbmQgKEJyYWlsbGVEaXNwbGF5ICpicmwsIEtleVRhYmxlQ29tbWFuZENvbnRleHQgY29udGV4dCkgeworICB1bnNpZ25lZCBjaGFyIHBhY2tldFtNQVhJTVVNX1JFU1BPTlNFX1NJWkVdOworICBzaXplX3Qgc2l6ZTsKKworICB3aGlsZSAoKHNpemUgPSByZWFkUGFja2V0KGJybCwgcGFja2V0LCBzaXplb2YocGFja2V0KSkpKSB7CisgICAgYnJsLT5kYXRhLT5yZXNwb25zZS53YWl0aW5nID0gMDsKKyAgICBicmwtPndyaXRlRGVsYXkgPSAwOworCisgICAgdW5zaWduZWQgY2hhciBjb21tYW5kID0gcGFja2V0WzBdOworICAgIENOX1BhY2tldEludGVnZXIgcmVzdWx0ID0gQ05fZ2V0UmVzcG9uc2VSZXN1bHQocGFja2V0KTsKKworICAgIHVuc2lnbmVkIGludCBtb3RvcnNUaW1lID0gMDsKKworICAgIHN3aXRjaCAoY29tbWFuZCkgeworICAgICAgY2FzZSBDTl9DTURfUFJFU1NFRF9LRVlTOgorICAgICAgICBlbnF1ZXVlVXBkYXRlZEtleXMoYnJsLCByZXN1bHQsICZicmwtPmRhdGEtPmtleXMucHJlc3NlZCwgQ05fR1JQX05hdmlnYXRpb25LZXlzLCAwKTsKKyAgICAgICAgc3RhcnROZXh0Q29tbWFuZChicmwpOworICAgICAgICBjb250aW51ZTsKKworICAgICAgY2FzZSBDTl9DTURfREVWSUNFX1NUQVRVUzoKKyAgICAgICAgYnJsLT5kYXRhLT5zdGF0dXMuZmxhZ3MgPSByZXN1bHQ7CisgICAgICAgIGNvbnRpbnVlOworCisgICAgICBjYXNlIENOX0NNRF9TRU5EX1JPVzogeworICAgICAgICBSb3dFbnRyeSAqcm93ID0gZ2V0Um93RW50cnkoYnJsLCBicmwtPmRhdGEtPndpbmRvdy5sYXN0Um93U2VudCk7CisKKyAgICAgICAgaWYgKHJvdy0+aGF2ZU9sZENlbGxzKSB7CisgICAgICAgICAgbW90b3JzVGltZSA9IFJPV19VUERBVEVfVElNRTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICByb3ctPmhhdmVPbGRDZWxscyA9IDE7CisgICAgICAgIH0KKworICAgICAgICBicmVhazsKKyAgICAgIH0KKworICAgICAgY2FzZSBDTl9DTURfUkVTRVRfQ0VMTFM6CisgICAgICAgIG1vdG9yc1RpbWUgPSBDRUxMU19SRVNFVF9USU1FOworICAgICAgICBicmVhazsKKworICAgICAgZGVmYXVsdDoKKyAgICAgICAgbG9nVW5leHBlY3RlZFBhY2tldChwYWNrZXQsIHNpemUpOworICAgICAgICBjb250aW51ZTsKKyAgICB9CisKKyAgICBpZiAocmVzdWx0KSB7CisgICAgICBsb2dNZXNzYWdlKExPR19XQVJOSU5HLAorICAgICAgICAiY29tbWFuZCBmYWlsZWQ6IENtZDowWCUwMlggRXJyOjBYJTAyWCIsCisgICAgICAgIGNvbW1hbmQsIHJlc3VsdAorICAgICAgKTsKKworICAgICAgc3dpdGNoIChjb21tYW5kKSB7CisgICAgICAgIGNhc2UgQ05fQ01EX1NFTkRfUk9XOgorICAgICAgICAgIHJlc2VuZFJvdyhicmwpOworICAgICAgICAgIGdvdG8gVVBEQVRFX0ZBSUxFRDsKKworICAgICAgICBjYXNlIENOX0NNRF9SRVNFVF9DRUxMUzoKKyAgICAgICAgICBicmwtPmRhdGEtPndpbmRvdy5yZXNldENlbGxzID0gMTsKKyAgICAgICAgICBnb3RvIFVQREFURV9GQUlMRUQ7CisKKyAgICAgICAgVVBEQVRFX0ZBSUxFRDoKKyAgICAgICAgICBzdGFydFRpbWVQZXJpb2QoJmJybC0+ZGF0YS0+d2luZG93LnJldHJ5RGVsYXksIFVQREFURV9SRVRSWV9ERUxBWSk7CisgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICBjb250aW51ZTs7CisgICAgICB9CisgICAgfSBlbHNlIGlmIChtb3RvcnNUaW1lKSB7CisgICAgICBicmwtPmRhdGEtPnN0YXR1cy5mbGFncyB8PSBDTl9TVEFUVVNfTU9UT1JTX0FDVElWRTsKKyAgICAgIHN0YXJ0VGltZVBlcmlvZCgmYnJsLT5kYXRhLT5zdGF0dXMuZGVsYXksIG1vdG9yc1RpbWUpOworICAgIH0KKyAgfQorCisgIHJldHVybiAoZXJybm8gPT0gRUFHQUlOKT8gRU9GOiBCUkxfQ01EX1JFU1RBUlRCUkw7Cit9CmRpZmYgLS1naXQgYS9Ecml2ZXJzL0JyYWlsbGUvQ2FudXRlL2JybGRlZnMtY24uaCBiL0RyaXZlcnMvQnJhaWxsZS9DYW51dGUvYnJsZGVmcy1jbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMyMDMwNTAKLS0tIC9kZXYvbnVsbAorKysgYi9Ecml2ZXJzL0JyYWlsbGUvQ2FudXRlL2JybGRlZnMtY24uaApAQCAtMCwwICsxLDg2IEBACisvKgorICogQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyAqICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyAqCisgKiBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorICoKKyAqIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyAqCisgKiBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisgKi8KKworI2lmbmRlZiBCUkxUVFlfSU5DTFVERURfQ05fQlJMREVGUworI2RlZmluZSBCUkxUVFlfSU5DTFVERURfQ05fQlJMREVGUworCit0eXBlZGVmIGVudW0geworICBDTl9DTURfQ09MVU1OX0NPVU5UID0gMFgwMCwKKyAgQ05fQ01EX1JPV19DT1VOVCA9IDBYMDEsCisgIENOX0NNRF9QUk9UT0NPTF9WRVJTSU9OID0gMFgwMywKKyAgQ05fQ01EX1NFTkRfUk9XID0gMFgwNiwKKyAgQ05fQ01EX1JFU0VUX0NFTExTID0gMFgwNywKKyAgQ05fQ01EX0xPV0VSX1JPV1MgPSAwWDA5LAorICBDTl9DTURfUFJFU1NFRF9LRVlTID0gMFgwQSwKKyAgQ05fQ01EX0ZJUk1XQVJFX1ZFUlNJT04gPSAwWDBCLAorICBDTl9DTURfREVWSUNFX1NUQVRVUyA9IDBYMEQsCisgIENOX0NNRF9TRVRfUk9XID0gMFgwRSwKK30gQ05fQ29tbWFuZDsKKwordHlwZWRlZiBlbnVtIHsKKyAgQ05fS0VZX0hlbHAgPSAwLAorICBDTl9LRVlfTGluZTEgPSAxLAorICBDTl9LRVlfTGluZTIgPSAyLAorICBDTl9LRVlfTGluZTMgPSAzLAorICBDTl9LRVlfTGluZTQgPSA0LAorICBDTl9LRVlfTGluZTUgPSA1LAorICBDTl9LRVlfTGluZTYgPSA2LAorICBDTl9LRVlfTGluZTcgPSA3LAorICBDTl9LRVlfTGluZTggPSA4LAorICBDTl9LRVlfTGluZTkgPSA5LAorICBDTl9LRVlfUmVmcmVzaCA9IDEwLAorICBDTl9LRVlfQmFjayA9IDExLAorICBDTl9LRVlfTWVudSA9IDEyLAorICBDTl9LRVlfRm9yd2FyZCA9IDEzLAorfSBDTl9OYXZpZ2F0aW9uS2V5OworCit0eXBlZGVmIGVudW0geworICBDTl9HUlBfTmF2aWdhdGlvbktleXMgPSAwLAorfSBDTl9LZXlHcm91cDsKKwordHlwZWRlZiBlbnVtIHsKKyAgQ05fU1RBVFVTX01PVE9SU19BQ1RJVkUgPSAwWDAxLAorfSBDTl9TdGF0dXM7CisKKyNkZWZpbmUgQ05fQ1JDX0FMR09SSVRITV9OQU1FICJDUkMtMTYvSVNPLUhETEMiCisjZGVmaW5lIENOX0NSQ19DSEVDS1NVTV9XSURUSCAxNgorI2RlZmluZSBDTl9DUkNfUkVGTEVDVF9EQVRBIDEKKyNkZWZpbmUgQ05fQ1JDX1JFRkxFQ1RfUkVTVUxUIDEKKyNkZWZpbmUgQ05fQ1JDX0dFTkVSQVRPUl9QT0xZTk9NSUFMIDBYMTAyMQorI2RlZmluZSBDTl9DUkNfSU5JVElBTF9WQUxVRSAwWEZGRkYKKyNkZWZpbmUgQ05fQ1JDX1hPUl9NQVNLIDBYRkZGRgorI2RlZmluZSBDTl9DUkNfQ0hFQ0tfVkFMVUUgMFg5MDZFCisjZGVmaW5lIENOX0NSQ19SRVNJRFVFIDBYRjBCOAorCisjZGVmaW5lIENOX1BBQ0tFVF9GUkFNSU5HX0JZVEUgMFg3RQorI2RlZmluZSBDTl9QQUNLRVRfRVNDQVBFX0JZVEUgMFg3RAorI2RlZmluZSBDTl9QQUNLRVRfRVNDQVBFX0JJVCAwWDIwCisKK3R5cGVkZWYgdWludDE2X3QgQ05fUGFja2V0SW50ZWdlcjsKKworc3RhdGljIGlubGluZSBDTl9QYWNrZXRJbnRlZ2VyIENOX2dldFJlc3BvbnNlSW50ZWdlcigKKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpyZXNwb25zZSwgdW5zaWduZWQgaW50IG9mZnNldCkgeworICByZXR1cm4gcmVzcG9uc2Vbb2Zmc2V0XSB8IChyZXNwb25zZVtvZmZzZXQgKyAxXSA8PCA4KTsKK30KKworc3RhdGljIGlubGluZSBDTl9QYWNrZXRJbnRlZ2VyIENOX2dldFJlc3BvbnNlUmVzdWx0KAorICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnJlc3BvbnNlKSB7CisgIHJldHVybiBDTl9nZXRSZXNwb25zZUludGVnZXIocmVzcG9uc2UsIDEpOworfQorCisjZW5kaWYgLyogQlJMVFRZX0lOQ0xVREVEX0NOX0JSTERFRlMgKi8KZGlmZiAtLWdpdCBhL0RyaXZlcnMvQnJhaWxsZS9DZWJyYS9NYWtlZmlsZS5pbiBiL0RyaXZlcnMvQnJhaWxsZS9DZWJyYS9NYWtlZmlsZS5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41Y2RmNGIwCi0tLSAvZGV2L251bGwKKysrIGIvRHJpdmVycy9CcmFpbGxlL0NlYnJhL01ha2VmaWxlLmluCkBAIC0wLDAgKzEsMjggQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyMgICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisjCisjIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyMKKyMgQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitEUklWRVJfQ09ERSA9IGNlCitEUklWRVJfTkFNRSA9IENlYnJhCitEUklWRVJfVVNBR0UgPSAyMC80MC82MC84MC8xMDAvMTIwLzE0MAorRFJJVkVSX1ZFUlNJT04gPSAKK0RSSVZFUl9ERVZFTE9QRVJTID0gRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPgoraW5jbHVkZSAkKFNSQ19UT1ApYnJhaWxsZS5taworCiticmFpbGxlLiRPOgorCSQoQ0MpICQoQlJMX0NGTEFHUykgLWMgJChTUkNfRElSKS9icmFpbGxlLmMKKwpkaWZmIC0tZ2l0IGEvRHJpdmVycy9CcmFpbGxlL0NlYnJhL2JyYWlsbGUuYyBiL0RyaXZlcnMvQnJhaWxsZS9DZWJyYS9icmFpbGxlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWQ1ZjE0ZQotLS0gL2Rldi9udWxsCisrKyBiL0RyaXZlcnMvQnJhaWxsZS9DZWJyYS9icmFpbGxlLmMKQEAgLTAsMCArMSw0MjMgQEAKKy8qCisgKiBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorICogICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorICoKKyAqIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorICoKKyAqIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyAqLworCisjaW5jbHVkZSAicHJvbG9ndWUuaCIKKworI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisKKyNpbmNsdWRlICJsb2cuaCIKKworI2luY2x1ZGUgImJybF9kcml2ZXIuaCIKKyNpbmNsdWRlICJicmxkZWZzLWNlLmgiCisKKyNkZWZpbmUgUFJPQkVfUkVUUllfTElNSVQgMgorI2RlZmluZSBQUk9CRV9JTlBVVF9USU1FT1VUIDEwMDAKKyNkZWZpbmUgTUFYSU1VTV9SRVNQT05TRV9TSVpFICgwWEZGICsgNCkKKyNkZWZpbmUgTUFYSU1VTV9DRUxMX0NPVU5UIDE0MAorCitCRUdJTl9LRVlfTkFNRV9UQUJMRShuYXZpZ2F0aW9uKQorICBLRVlfTkFNRV9FTlRSWShDRV9LRVlfUGFkTGVmdDEsICJQYWRMZWZ0MSIpLAorICBLRVlfTkFNRV9FTlRSWShDRV9LRVlfUGFkVXAxLCAiUGFkVXAxIiksCisgIEtFWV9OQU1FX0VOVFJZKENFX0tFWV9QYWRDZW50ZXIxLCAiUGFkQ2VudGVyMSIpLAorICBLRVlfTkFNRV9FTlRSWShDRV9LRVlfUGFkRG93bjEsICJQYWREb3duMSIpLAorICBLRVlfTkFNRV9FTlRSWShDRV9LRVlfUGFkUmlnaHQxLCAiUGFkUmlnaHQxIiksCisKKyAgS0VZX05BTUVfRU5UUlkoQ0VfS0VZX0xlZnRVcHBlcjEsICJMZWZ0VXBwZXIxIiksCisgIEtFWV9OQU1FX0VOVFJZKENFX0tFWV9MZWZ0TWlkZGxlMSwgIkxlZnRNaWRkbGUxIiksCisgIEtFWV9OQU1FX0VOVFJZKENFX0tFWV9MZWZ0TG93ZXIxLCAiTGVmdExvd2VyMSIpLAorICBLRVlfTkFNRV9FTlRSWShDRV9LRVlfUmlnaHRVcHBlcjEsICJSaWdodFVwcGVyMSIpLAorICBLRVlfTkFNRV9FTlRSWShDRV9LRVlfUmlnaHRNaWRkbGUxLCAiUmlnaHRNaWRkbGUxIiksCisgIEtFWV9OQU1FX0VOVFJZKENFX0tFWV9SaWdodExvd2VyMSwgIlJpZ2h0TG93ZXIxIiksCisKKyAgS0VZX05BTUVfRU5UUlkoQ0VfS0VZX1BhZExlZnQyLCAiUGFkTGVmdDIiKSwKKyAgS0VZX05BTUVfRU5UUlkoQ0VfS0VZX1BhZFVwMiwgIlBhZFVwMiIpLAorICBLRVlfTkFNRV9FTlRSWShDRV9LRVlfUGFkQ2VudGVyMiwgIlBhZENlbnRlcjIiKSwKKyAgS0VZX05BTUVfRU5UUlkoQ0VfS0VZX1BhZERvd24yLCAiUGFkRG93bjIiKSwKKyAgS0VZX05BTUVfRU5UUlkoQ0VfS0VZX1BhZFJpZ2h0MiwgIlBhZFJpZ2h0MiIpLAorCisgIEtFWV9OQU1FX0VOVFJZKENFX0tFWV9MZWZ0VXBwZXIyLCAiTGVmdFVwcGVyMiIpLAorICBLRVlfTkFNRV9FTlRSWShDRV9LRVlfTGVmdE1pZGRsZTIsICJMZWZ0TWlkZGxlMiIpLAorICBLRVlfTkFNRV9FTlRSWShDRV9LRVlfTGVmdExvd2VyMiwgIkxlZnRMb3dlcjIiKSwKKyAgS0VZX05BTUVfRU5UUlkoQ0VfS0VZX1JpZ2h0VXBwZXIyLCAiUmlnaHRVcHBlcjIiKSwKKyAgS0VZX05BTUVfRU5UUlkoQ0VfS0VZX1JpZ2h0TWlkZGxlMiwgIlJpZ2h0TWlkZGxlMiIpLAorICBLRVlfTkFNRV9FTlRSWShDRV9LRVlfUmlnaHRMb3dlcjIsICJSaWdodExvd2VyMiIpLAorCisgIEtFWV9HUk9VUF9FTlRSWShDRV9HUlBfUm91dGluZ0tleSwgIlJvdXRpbmdLZXkiKSwKK0VORF9LRVlfTkFNRV9UQUJMRQorCitCRUdJTl9LRVlfTkFNRV9UQUJMRShub3ZlbSkKKyAgS0VZX05BTUVfRU5UUlkoMFgwMywgIkRvdDciKSwKKyAgS0VZX05BTUVfRU5UUlkoMFgwNywgIkRvdDMiKSwKKyAgS0VZX05BTUVfRU5UUlkoMFgwQiwgIkRvdDIiKSwKKyAgS0VZX05BTUVfRU5UUlkoMFgwRiwgIkRvdDEiKSwKKyAgS0VZX05BTUVfRU5UUlkoMFgxMywgIkRvdDQiKSwKKyAgS0VZX05BTUVfRU5UUlkoMFgxNywgIkRvdDUiKSwKKyAgS0VZX05BTUVfRU5UUlkoMFgxQiwgIkRvdDYiKSwKKyAgS0VZX05BTUVfRU5UUlkoMFgxRiwgIkRvdDgiKSwKKworICBLRVlfTkFNRV9FTlRSWSgwWDEwLCAiTGVmdFNwYWNlIiksCisgIEtFWV9OQU1FX0VOVFJZKDBYMTgsICJSaWdodFNwYWNlIiksCitFTkRfS0VZX05BTUVfVEFCTEUKKworQkVHSU5fS0VZX05BTUVfVEFCTEVTKGFsbCkKKyAgS0VZX05BTUVfVEFCTEUobmF2aWdhdGlvbiksCitFTkRfS0VZX05BTUVfVEFCTEVTCisKK0JFR0lOX0tFWV9OQU1FX1RBQkxFUyhub3ZlbSkKKyAgS0VZX05BTUVfVEFCTEUobm92ZW0pLAorRU5EX0tFWV9OQU1FX1RBQkxFUworCitERUZJTkVfS0VZX1RBQkxFKGFsbCkKK0RFRklORV9LRVlfVEFCTEUobm92ZW0pCisKK0JFR0lOX0tFWV9UQUJMRV9MSVNUCisgICZLRVlfVEFCTEVfREVGSU5JVElPTihhbGwpLAorICAmS0VZX1RBQkxFX0RFRklOSVRJT04obm92ZW0pLAorRU5EX0tFWV9UQUJMRV9MSVNUCisKK3R5cGVkZWYgc3RydWN0IHsKKyAgdW5zaWduZWQgY2hhciBpZGVudGlmaWVyOworICB1bnNpZ25lZCBjaGFyIGNlbGxDb3VudDsKKyAgY29uc3QgS2V5VGFibGVEZWZpbml0aW9uICprdGQ7Cit9IE1vZGVsRW50cnk7CisKK3N0YXRpYyBjb25zdCBNb2RlbEVudHJ5IG1vZGVsVGFibGVbXSA9IHsKKyAgeyAuaWRlbnRpZmllciA9IDBYNjgsCisgICAgLmNlbGxDb3VudCA9IDAsCisgICAgLmt0ZCA9ICZLRVlfVEFCTEVfREVGSU5JVElPTihub3ZlbSkKKyAgfSwKKworICB7IC5pZGVudGlmaWVyID0gMFg3MCwKKyAgICAuY2VsbENvdW50ID0gMCwKKyAgICAua3RkID0gJktFWV9UQUJMRV9ERUZJTklUSU9OKGFsbCkKKyAgfSwKKworICB7IC5pZGVudGlmaWVyID0gMFg3MiwKKyAgICAuY2VsbENvdW50ID0gMjAsCisgICAgLmt0ZCA9ICZLRVlfVEFCTEVfREVGSU5JVElPTihhbGwpCisgIH0sCisKKyAgeyAuaWRlbnRpZmllciA9IDBYNzQsCisgICAgLmNlbGxDb3VudCA9IDQwLAorICAgIC5rdGQgPSAmS0VZX1RBQkxFX0RFRklOSVRJT04oYWxsKQorICB9LAorCisgIHsgLmlkZW50aWZpZXIgPSAwWDc2LAorICAgIC5jZWxsQ291bnQgPSA2MCwKKyAgICAua3RkID0gJktFWV9UQUJMRV9ERUZJTklUSU9OKGFsbCkKKyAgfSwKKworICB7IC5pZGVudGlmaWVyID0gMFg3OCwKKyAgICAuY2VsbENvdW50ID0gODAsCisgICAgLmt0ZCA9ICZLRVlfVEFCTEVfREVGSU5JVElPTihhbGwpCisgIH0sCisKKyAgeyAuaWRlbnRpZmllciA9IDBYN0EsCisgICAgLmNlbGxDb3VudCA9IDEwMCwKKyAgICAua3RkID0gJktFWV9UQUJMRV9ERUZJTklUSU9OKGFsbCkKKyAgfSwKKworICB7IC5pZGVudGlmaWVyID0gMFg3QywKKyAgICAuY2VsbENvdW50ID0gMTIwLAorICAgIC5rdGQgPSAmS0VZX1RBQkxFX0RFRklOSVRJT04oYWxsKQorICB9LAorCisgIHsgLmlkZW50aWZpZXIgPSAwWDdFLAorICAgIC5jZWxsQ291bnQgPSAxNDAsCisgICAgLmt0ZCA9ICZLRVlfVEFCTEVfREVGSU5JVElPTihhbGwpCisgIH0sCisKKyAgeyAuaWRlbnRpZmllciA9IDAgfQorfTsKKworc3RydWN0IEJyYWlsbGVEYXRhU3RydWN0IHsKKyAgY29uc3QgTW9kZWxFbnRyeSAqbW9kZWw7CisgIHVuc2lnbmVkIGNoYXIgZm9yY2VSZXdyaXRlOworICB1bnNpZ25lZCBjaGFyIGFja25vd2xlZGdlbWVudFBlbmRpbmc7CisgIHVuc2lnbmVkIGNoYXIgdGV4dENlbGxzW01BWElNVU1fQ0VMTF9DT1VOVF07Cit9OworCitzdGF0aWMgY29uc3QgTW9kZWxFbnRyeSAqCitnZXRNb2RlbEVudHJ5ICh1bnNpZ25lZCBjaGFyIGlkZW50aWZpZXIpIHsKKyAgY29uc3QgTW9kZWxFbnRyeSAqbW9kZWwgPSBtb2RlbFRhYmxlOworCisgIHdoaWxlIChtb2RlbC0+aWRlbnRpZmllcikgeworICAgIGlmIChpZGVudGlmaWVyID09IG1vZGVsLT5pZGVudGlmaWVyKSByZXR1cm4gbW9kZWw7CisgICAgbW9kZWwgKz0gMTsKKyAgfQorCisgIGxvZ01lc3NhZ2UoTE9HX1dBUk5JTkcsICJ1bmtub3duICVzIG1vZGVsOiAwWCUwMlgiLAorICAgICAgICAgICAgIFNUUklOR0lGWShEUklWRVJfTkFNRSksIGlkZW50aWZpZXIpOworICByZXR1cm4gTlVMTDsKK30KKworc3RhdGljIGludAorc2V0TW9kZWwgKEJyYWlsbGVEaXNwbGF5ICpicmwsIHVuc2lnbmVkIGNoYXIgaWRlbnRpZmllcikgeworICBjb25zdCBNb2RlbEVudHJ5ICptb2RlbCA9IGdldE1vZGVsRW50cnkoaWRlbnRpZmllcik7CisKKyAgaWYgKG1vZGVsKSB7CisgICAgbG9nTWVzc2FnZShMT0dfTk9USUNFLCAiJXMgTW9kZWw6IDBYJTAyWCwgJXUgY2VsbHMiLAorICAgICAgICAgICAgICAgU1RSSU5HSUZZKERSSVZFUl9OQU1FKSwgbW9kZWwtPmlkZW50aWZpZXIsIG1vZGVsLT5jZWxsQ291bnQpOworCisgICAgYnJsLT5kYXRhLT5tb2RlbCA9IG1vZGVsOworICAgIGJybC0+dGV4dENvbHVtbnMgPSBtb2RlbC0+Y2VsbENvdW50OworICAgIHJldHVybiAxOworICB9CisKKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK3dyaXRlQnl0ZXMgKEJyYWlsbGVEaXNwbGF5ICpicmwsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ5dGVzLCBzaXplX3QgY291bnQpIHsKKyAgcmV0dXJuIHdyaXRlQnJhaWxsZVBhY2tldChicmwsIE5VTEwsIGJ5dGVzLCBjb3VudCk7Cit9CisKK3N0YXRpYyBpbnQKK3dyaXRlUGFja2V0IChCcmFpbGxlRGlzcGxheSAqYnJsLCB1bnNpZ25lZCBjaGFyIHR5cGUsIHNpemVfdCBzaXplLCBjb25zdCB1bnNpZ25lZCBjaGFyICpkYXRhKSB7CisgIHVuc2lnbmVkIGNoYXIgYnl0ZXNbc2l6ZSArIDVdOworICB1bnNpZ25lZCBjaGFyICpieXRlID0gYnl0ZXM7CisKKyAgKmJ5dGUrKyA9IENFX1BLVF9CRUdJTjsKKyAgKmJ5dGUrKyA9IGJybC0+ZGF0YS0+bW9kZWwtPmlkZW50aWZpZXI7CisgICpieXRlKysgPSBzaXplICsgMTsKKyAgKmJ5dGUrKyA9IHR5cGU7CisgIGJ5dGUgPSBtZW1wY3B5KGJ5dGUsIGRhdGEsIHNpemUpOworICAqYnl0ZSsrID0gQ0VfUEtUX0VORDsKKworICByZXR1cm4gd3JpdGVCeXRlcyhicmwsIGJ5dGVzLCBieXRlLWJ5dGVzKTsKK30KKworc3RhdGljIEJyYWlsbGVQYWNrZXRWZXJpZmllclJlc3VsdAordmVyaWZ5UGFja2V0ICgKKyAgQnJhaWxsZURpc3BsYXkgKmJybCwKKyAgdW5zaWduZWQgY2hhciAqYnl0ZXMsIHNpemVfdCBzaXplLAorICBzaXplX3QgKmxlbmd0aCwgdm9pZCAqZGF0YQorKSB7CisgIGNvbnN0IHVuc2lnbmVkIGNoYXIgYnl0ZSA9IGJ5dGVzW3NpemUtMV07CisKKyAgaWYgKHNpemUgPT0gMSkgeworICAgIHN3aXRjaCAoYnl0ZSkgeworICAgICAgY2FzZSBDRV9SU1BfSWRlbnRpdHk6CisgICAgICAgICpsZW5ndGggPSAyOworICAgICAgICBicmVhazsKKworICAgICAgY2FzZSBDRV9QS1RfQkVHSU46CisgICAgICAgICpsZW5ndGggPSAzOworICAgICAgICBicmVhazsKKworICAgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIEJSTF9QVlJfSU5WQUxJRDsKKyAgICB9CisgIH0gZWxzZSB7CisgICAgc3dpdGNoIChieXRlc1swXSkgeworICAgICAgY2FzZSBDRV9QS1RfQkVHSU46CisgICAgICAgIGlmIChzaXplID09IDIpIHsKKyAgICAgICAgICBpZiAoYnl0ZSAhPSBicmwtPmRhdGEtPm1vZGVsLT5pZGVudGlmaWVyKSB7CisgICAgICAgICAgICBpZiAoIXNldE1vZGVsKGJybCwgYnl0ZSkpIHJldHVybiBCUkxfUFZSX0lOVkFMSUQ7CisgICAgICAgICAgICBicmwtPnJlc2l6ZVJlcXVpcmVkID0gMTsKKyAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSBpZiAoc2l6ZSA9PSAzKSB7CisgICAgICAgICAgKmxlbmd0aCArPSBieXRlICsgMTsKKyAgICAgICAgfSBlbHNlIGlmIChzaXplID09ICpsZW5ndGgpIHsKKyAgICAgICAgICBpZiAoYnl0ZSAhPSBDRV9QS1RfRU5EKSByZXR1cm4gQlJMX1BWUl9JTlZBTElEOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworCisgICAgICBkZWZhdWx0OgorICAgICAgICBicmVhazsKKyAgICB9CisgIH0KKworICByZXR1cm4gQlJMX1BWUl9JTkNMVURFOworfQorCitzdGF0aWMgc2l6ZV90CityZWFkUGFja2V0IChCcmFpbGxlRGlzcGxheSAqYnJsLCB2b2lkICpwYWNrZXQsIHNpemVfdCBzaXplKSB7CisgIHJldHVybiByZWFkQnJhaWxsZVBhY2tldChicmwsIE5VTEwsIHBhY2tldCwgc2l6ZSwgdmVyaWZ5UGFja2V0LCBOVUxMKTsKK30KKworc3RhdGljIGludAorY29ubmVjdFJlc291cmNlIChCcmFpbGxlRGlzcGxheSAqYnJsLCBjb25zdCBjaGFyICppZGVudGlmaWVyKSB7CisgIHN0YXRpYyBjb25zdCBTZXJpYWxQYXJhbWV0ZXJzIHNlcmlhbFBhcmFtZXRlcnMgPSB7CisgICAgU0VSSUFMX0RFRkFVTFRfUEFSQU1FVEVSUywKKyAgICAuYmF1ZCA9IDE5MjAwLAorICAgIC5wYXJpdHkgPSBTRVJJQUxfUEFSSVRZX09ERAorICB9OworCisgIEJFR0lOX1VTQl9DSEFOTkVMX0RFRklOSVRJT05TCisgICAgeyAvKiBhbGwgbW9kZWxzICovCisgICAgICAudmVuZG9yPTBYMDQwMywgLnByb2R1Y3Q9MFg2MDAxLCAKKyAgICAgIC5jb25maWd1cmF0aW9uPTEsIC5pbnRlcmZhY2U9MCwgLmFsdGVybmF0aXZlPTAsCisgICAgICAuaW5wdXRFbmRwb2ludD0xLCAub3V0cHV0RW5kcG9pbnQ9MiwKKyAgICAgIC5zZXJpYWwgPSAmc2VyaWFsUGFyYW1ldGVycworICAgIH0sCisgIEVORF9VU0JfQ0hBTk5FTF9ERUZJTklUSU9OUworCisgIEdpb0Rlc2NyaXB0b3IgZGVzY3JpcHRvcjsKKyAgZ2lvSW5pdGlhbGl6ZURlc2NyaXB0b3IoJmRlc2NyaXB0b3IpOworCisgIGRlc2NyaXB0b3IudXNiLmNoYW5uZWxEZWZpbml0aW9ucyA9IHVzYkNoYW5uZWxEZWZpbml0aW9uczsKKworICBkZXNjcmlwdG9yLmJsdWV0b290aC5jaGFubmVsTnVtYmVyID0gMTsKKworICBpZiAoY29ubmVjdEJyYWlsbGVSZXNvdXJjZShicmwsIGlkZW50aWZpZXIsICZkZXNjcmlwdG9yLCBOVUxMKSkgeworICAgIHJldHVybiAxOworICB9CisKKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK3dyaXRlSWRlbnRpZnlSZXF1ZXN0IChCcmFpbGxlRGlzcGxheSAqYnJsKSB7CisgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGJ5dGVzW10gPSB7Q0VfUkVRX0lkZW50aWZ5fTsKKyAgcmV0dXJuIHdyaXRlQnl0ZXMoYnJsLCBieXRlcywgc2l6ZW9mKGJ5dGVzKSk7Cit9CisKK3N0YXRpYyBCcmFpbGxlUmVzcG9uc2VSZXN1bHQKK2lzSWRlbnRpdHlSZXNwb25zZSAoQnJhaWxsZURpc3BsYXkgKmJybCwgY29uc3Qgdm9pZCAqcGFja2V0LCBzaXplX3Qgc2l6ZSkgeworICBjb25zdCB1bnNpZ25lZCBjaGFyICpieXRlcyA9IHBhY2tldDsKKworICByZXR1cm4gKGJ5dGVzWzBdID09IENFX1JTUF9JZGVudGl0eSk/IEJSTF9SU1BfRE9ORTogQlJMX1JTUF9VTkVYUEVDVEVEOworfQorCitzdGF0aWMgaW50CiticmxfY29uc3RydWN0IChCcmFpbGxlRGlzcGxheSAqYnJsLCBjaGFyICoqcGFyYW1ldGVycywgY29uc3QgY2hhciAqZGV2aWNlKSB7CisgIGlmICgoYnJsLT5kYXRhID0gbWFsbG9jKHNpemVvZigqYnJsLT5kYXRhKSkpKSB7CisgICAgbWVtc2V0KGJybC0+ZGF0YSwgMCwgc2l6ZW9mKCpicmwtPmRhdGEpKTsKKworICAgIGlmIChjb25uZWN0UmVzb3VyY2UoYnJsLCBkZXZpY2UpKSB7CisgICAgICB1bnNpZ25lZCBjaGFyIHJlc3BvbnNlW01BWElNVU1fUkVTUE9OU0VfU0laRV07CisKKyAgICAgIGlmIChwcm9iZUJyYWlsbGVEaXNwbGF5KGJybCwgUFJPQkVfUkVUUllfTElNSVQsIE5VTEwsIFBST0JFX0lOUFVUX1RJTUVPVVQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZUlkZW50aWZ5UmVxdWVzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRQYWNrZXQsICZyZXNwb25zZSwgc2l6ZW9mKHJlc3BvbnNlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzSWRlbnRpdHlSZXNwb25zZSkpIHsKKyAgICAgICAgaWYgKHNldE1vZGVsKGJybCwgcmVzcG9uc2VbMV0pKSB7CisgICAgICAgICAgc2V0QnJhaWxsZUtleVRhYmxlKGJybCwgYnJsLT5kYXRhLT5tb2RlbC0+a3RkKTsKKyAgICAgICAgICBtYWtlT3V0cHV0VGFibGUoZG90c1RhYmxlX0lTTzExNTQ4XzEpOworCisgICAgICAgICAgYnJsLT5kYXRhLT5mb3JjZVJld3JpdGUgPSAxOworICAgICAgICAgIGJybC0+ZGF0YS0+YWNrbm93bGVkZ2VtZW50UGVuZGluZyA9IDA7CisKKyAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgfQorICAgICAgfQorCisgICAgICBkaXNjb25uZWN0QnJhaWxsZVJlc291cmNlKGJybCwgTlVMTCk7CisgICAgfQorCisgICAgZnJlZShicmwtPmRhdGEpOworICB9IGVsc2UgeworICAgIGxvZ01hbGxvY0Vycm9yKCk7CisgIH0KKworICByZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQKK2JybF9kZXN0cnVjdCAoQnJhaWxsZURpc3BsYXkgKmJybCkgeworICBkaXNjb25uZWN0QnJhaWxsZVJlc291cmNlKGJybCwgTlVMTCk7CisKKyAgaWYgKGJybC0+ZGF0YSkgeworICAgIGZyZWUoYnJsLT5kYXRhKTsKKyAgICBicmwtPmRhdGEgPSBOVUxMOworICB9Cit9CisKK3N0YXRpYyBpbnQKK2JybF93cml0ZVdpbmRvdyAoQnJhaWxsZURpc3BsYXkgKmJybCwgY29uc3Qgd2NoYXJfdCAqdGV4dCkgeworICBpZiAoIWJybC0+ZGF0YS0+YWNrbm93bGVkZ2VtZW50UGVuZGluZykgeworICAgIGlmIChjZWxsc0hhdmVDaGFuZ2VkKGJybC0+ZGF0YS0+dGV4dENlbGxzLCBicmwtPmJ1ZmZlciwgYnJsLT50ZXh0Q29sdW1ucywgTlVMTCwgTlVMTCwgJmJybC0+ZGF0YS0+Zm9yY2VSZXdyaXRlKSkgeworICAgICAgdW5zaWduZWQgY2hhciBjZWxsc1ticmwtPnRleHRDb2x1bW5zXTsKKworICAgICAgdHJhbnNsYXRlT3V0cHV0Q2VsbHMoY2VsbHMsIGJybC0+ZGF0YS0+dGV4dENlbGxzLCBicmwtPnRleHRDb2x1bW5zKTsKKyAgICAgIGlmICghd3JpdGVQYWNrZXQoYnJsLCBDRV9QS1RfUkVRX1dyaXRlLCBicmwtPnRleHRDb2x1bW5zLCBjZWxscykpIHJldHVybiAwOworICAgICAgYnJsLT5kYXRhLT5hY2tub3dsZWRnZW1lbnRQZW5kaW5nID0gMTsKKyAgICB9CisgIH0KKworICByZXR1cm4gMTsKK30KKworc3RhdGljIGludAorYnJsX3JlYWRDb21tYW5kIChCcmFpbGxlRGlzcGxheSAqYnJsLCBLZXlUYWJsZUNvbW1hbmRDb250ZXh0IGNvbnRleHQpIHsKKyAgdW5zaWduZWQgY2hhciBwYWNrZXRbTUFYSU1VTV9SRVNQT05TRV9TSVpFXTsKKyAgc2l6ZV90IHNpemU7CisKKyAgd2hpbGUgKChzaXplID0gcmVhZFBhY2tldChicmwsIHBhY2tldCwgc2l6ZW9mKHBhY2tldCkpKSkgeworICAgIHN3aXRjaCAocGFja2V0WzBdKSB7CisgICAgICBjYXNlIENFX1BLVF9CRUdJTjogeworICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpieXRlcyA9ICZwYWNrZXRbNF07CisgICAgICAgIHNpemVfdCBjb3VudCA9IHBhY2tldFsyXSAtIDE7CisKKyAgICAgICAgc3dpdGNoIChwYWNrZXRbM10pIHsKKyAgICAgICAgICBjYXNlIENFX1BLVF9SU1BfTmF2aWdhdGlvbktleToKKyAgICAgICAgICAgIGlmIChjb3VudCA9PSAxKSB7CisgICAgICAgICAgICAgIEtleUdyb3VwIGdyb3VwOworICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIGtleSA9IGJ5dGVzWzBdOworICAgICAgICAgICAgICBpbnQgcHJlc3MgPSAhKGtleSAmIENFX0tFWV9SRUxFQVNFKTsKKyAgICAgICAgICAgICAga2V5ICY9IH5DRV9LRVlfUkVMRUFTRTsKKworICAgICAgICAgICAgICBpZiAoKGtleSA+PSBDRV9LRVlfUk9VVElOR19NSU4pICYmIChrZXkgPD0gQ0VfS0VZX1JPVVRJTkdfTUFYKSkgeworICAgICAgICAgICAgICAgIGdyb3VwID0gQ0VfR1JQX1JvdXRpbmdLZXk7CisgICAgICAgICAgICAgICAga2V5IC09IENFX0tFWV9ST1VUSU5HX01JTjsKKyAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBncm91cCA9IENFX0dSUF9OYXZpZ2F0aW9uS2V5OworICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgZW5xdWV1ZUtleUV2ZW50KGJybCwgZ3JvdXAsIGtleSwgcHJlc3MpOworICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgY2FzZSBDRV9QS1RfUlNQX0NvbmZpcm1hdGlvbjoKKyAgICAgICAgICAgIGlmIChjb3VudCA+IDApIHsKKyAgICAgICAgICAgICAgc3dpdGNoIChieXRlc1swXSkgeworICAgICAgICAgICAgICAgIGNhc2UgMFg3RDoKKyAgICAgICAgICAgICAgICAgIGJybC0+ZGF0YS0+Zm9yY2VSZXdyaXRlID0gMTsKKyAgICAgICAgICAgICAgICBjYXNlIDBYN0U6CisgICAgICAgICAgICAgICAgICBicmwtPmRhdGEtPmFja25vd2xlZGdlbWVudFBlbmRpbmcgPSAwOworICAgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgY2FzZSBDRV9QS1RfUlNQX0tleWJvYXJkS2V5OgorICAgICAgICAgICAgd2hpbGUgKGNvdW50LS0pIGVucXVldWVDb21tYW5kKEJSTF9DTURfQkxLKFBBU1NBVCkgfCBCUkxfQVJHX1BVVCgqYnl0ZXMrKykpOworICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBicmVhazsKKyAgICAgIH0KKworICAgICAgZGVmYXVsdDoKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgbG9nVW5leHBlY3RlZFBhY2tldChwYWNrZXQsIHNpemUpOworICB9CisKKyAgcmV0dXJuIChlcnJubyA9PSBFQUdBSU4pPyBFT0Y6IEJSTF9DTURfUkVTVEFSVEJSTDsKK30KZGlmZiAtLWdpdCBhL0RyaXZlcnMvQnJhaWxsZS9DZWJyYS9icmxkZWZzLWNlLmggYi9Ecml2ZXJzL0JyYWlsbGUvQ2VicmEvYnJsZGVmcy1jZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYxYzU1ZTMKLS0tIC9kZXYvbnVsbAorKysgYi9Ecml2ZXJzL0JyYWlsbGUvQ2VicmEvYnJsZGVmcy1jZS5oCkBAIC0wLDAgKzEsNzAgQEAKKy8qCisgKiBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorICogICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorICoKKyAqIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorICoKKyAqIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyAqLworCisjaWZuZGVmIEJSTFRUWV9JTkNMVURFRF9DRV9CUkxERUZTCisjZGVmaW5lIEJSTFRUWV9JTkNMVURFRF9DRV9CUkxERUZTCisKKyNkZWZpbmUgQ0VfUkVRX0lkZW50aWZ5IDBYRjgKKyNkZWZpbmUgQ0VfUlNQX0lkZW50aXR5IDBYRkUKKworI2RlZmluZSBDRV9QS1RfQkVHSU4gMFg3OQorI2RlZmluZSBDRV9QS1RfRU5EIDBYMTYKKyNkZWZpbmUgQ0VfUEtUX1JFUV9Xcml0ZSAwWDAxCisjZGVmaW5lIENFX1BLVF9SU1BfTmF2aWdhdGlvbktleSAwWDA0CisjZGVmaW5lIENFX1BLVF9SU1BfQ29uZmlybWF0aW9uIDBYMDcKKyNkZWZpbmUgQ0VfUEtUX1JTUF9LZXlib2FyZEtleSAwWDA5CisKK3R5cGVkZWYgZW51bSB7CisgIENFX0tFWV9QYWRMZWZ0MSAgICAgPSAwWDBDLAorICBDRV9LRVlfUGFkVXAxICAgICAgID0gMFgwRiwKKyAgQ0VfS0VZX1BhZENlbnRlcjEgICA9IDBYMTAsCisgIENFX0tFWV9QYWREb3duMSAgICAgPSAwWDEzLAorICBDRV9LRVlfUGFkUmlnaHQxICAgID0gMFgxNCwKKworICBDRV9LRVlfTGVmdFVwcGVyMSAgID0gMFgwNywKKyAgQ0VfS0VZX0xlZnRNaWRkbGUxICA9IDBYMEIsCisgIENFX0tFWV9MZWZ0TG93ZXIxICAgPSAwWDFCLAorICBDRV9LRVlfUmlnaHRVcHBlcjEgID0gMFgwMywKKyAgQ0VfS0VZX1JpZ2h0TWlkZGxlMSA9IDBYMTcsCisgIENFX0tFWV9SaWdodExvd2VyMSAgPSAwWDFGLAorCisgIENFX0tFWV9QYWRMZWZ0MiAgICAgPSAwWDA2LAorICBDRV9LRVlfUGFkVXAyICAgICAgID0gMFgxQSwKKyAgQ0VfS0VZX1BhZENlbnRlcjIgICA9IDBYMEEsCisgIENFX0tFWV9QYWREb3duMiAgICAgPSAwWDE5LAorICBDRV9LRVlfUGFkUmlnaHQyICAgID0gMFgwRSwKKworICBDRV9LRVlfTGVmdFVwcGVyMiAgID0gMFgxNiwKKyAgQ0VfS0VZX0xlZnRNaWRkbGUyICA9IDBYMTIsCisgIENFX0tFWV9MZWZ0TG93ZXIyICAgPSAwWDE1LAorICBDRV9LRVlfUmlnaHRVcHBlcjIgID0gMFgxRSwKKyAgQ0VfS0VZX1JpZ2h0TWlkZGxlMiA9IDBYMEQsCisgIENFX0tFWV9SaWdodExvd2VyMiAgPSAwWDFELAorCisgIENFX0tFWV9ST1VUSU5HX01JTiA9IDBYMjAsCisgIENFX0tFWV9ST1VUSU5HX01BWCA9IDBYNkYsCisKKyAgQ0VfS0VZX1JFTEVBU0UgICAgID0gMFg4MAorfSBDRV9OYXZpZ2F0aW9uS2V5OworCit0eXBlZGVmIGVudW0geworICBDRV9HUlBfTmF2aWdhdGlvbktleSwKKyAgQ0VfR1JQX1JvdXRpbmdLZXkKK30gQ0VfS2V5R3JvdXA7CisKKyNlbmRpZiAvKiBCUkxUVFlfSU5DTFVERURfQ0VfQlJMREVGUyAqLyAKZGlmZiAtLWdpdCBhL0RyaXZlcnMvQnJhaWxsZS9Db21iaUJyYWlsbGUvTWFrZWZpbGUuaW4gYi9Ecml2ZXJzL0JyYWlsbGUvQ29tYmlCcmFpbGxlL01ha2VmaWxlLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY3NjVmZTYKLS0tIC9kZXYvbnVsbAorKysgYi9Ecml2ZXJzL0JyYWlsbGUvQ29tYmlCcmFpbGxlL01ha2VmaWxlLmluCkBAIC0wLDAgKzEsMjggQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyMgICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisjCisjIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyMKKyMgQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitEUklWRVJfQ09ERSA9IGNiCitEUklWRVJfTkFNRSA9IENvbWJpQnJhaWxsZQorRFJJVkVSX1VTQUdFID0gMjUvNDUvODUKK0RSSVZFUl9WRVJTSU9OID0gCitEUklWRVJfREVWRUxPUEVSUyA9IE5pa2hpbCBOYWlyCitpbmNsdWRlICQoU1JDX1RPUClicmFpbGxlLm1rCisKK2JyYWlsbGUuJE86CisJJChDQykgJChCUkxfQ0ZMQUdTKSAtYyAkKFNSQ19ESVIpL2JyYWlsbGUuYworCmRpZmYgLS1naXQgYS9Ecml2ZXJzL0JyYWlsbGUvQ29tYmlCcmFpbGxlL1JFQURNRSBiL0RyaXZlcnMvQnJhaWxsZS9Db21iaUJyYWlsbGUvUkVBRE1FCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZkYzc3ZGIKLS0tIC9kZXYvbnVsbAorKysgYi9Ecml2ZXJzL0JyYWlsbGUvQ29tYmlCcmFpbGxlL1JFQURNRQpAQCAtMCwwICsxLDEzOCBAQAorRHJpdmVyIGZvciBUaWVtYW4gQi5WLidzIENvbWJpQnJhaWxsZSBzZXJpZXMKKworQ29weXJpZ2h0IChDKSAxOTk1LCAxOTk2IGJ5IE5pa2hpbCBOYWlyLgorCitUaGlzIGRyaXZlciBpcyBwYXJ0IG9mIEJSTFRUWSwgYW5kIGFzIHN1Y2ggaXQgaXMgcGxhY2VkIHVuZGVyIHRoZQordGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgaW4gdGhlIHRvcC1sZXZlbAorZGlyZWN0b3J5IGZvciBkZXRhaWxzLgorCitUaGlzIGRyaXZlciB3YXMgbWFpbnRhaW5lZCBieSBOaWtoaWwgTmFpciA8bm4yMDFAY3VzLmNhbS5hYy51az4uCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1NVUFBPUlRFRCBIQVJEV0FSRQorPT09PT09PT09PT09PT09PT09CisKK1RoaXMgZHJpdmVyIGhhcyBvbmx5IGJlZW4gdXNlZCBvbiBhIENvbWJpQnJhaWxsZSA0MCwgYWx0aG91Z2gsCithY2NvcmRpbmcgdG8gdGVjaG5pY2FsIHNwZWNpZmljYXRpb25zIHByb3ZpZGVkIGJ5IFRpZW1hbgorQi5WLiA8dGllbWFuQHhzNGFsbC5ubD4sIGl0IHNob3VsZCB3b3JrIG9uIHRoZSAyMCBhbmQgODAgY2VsbCBtb2RlbHMKK2FzIHdlbGwuICBUaGVyZSBpcyBubyBzdXBwb3J0IGZvciB0aGUgcGFyYWxsZWwgaW50ZXJmYWNlLCBhbmQgc28gbm8KK3Bvc3NpYmlsaXR5IG9mIGEgMi1kaW1lbnNpb25hbCBzZXR1cCB1c2luZyBhIHNlY29uZCBkaXNwbGF5LgorCitUaGVyZSBpcyBub3cgc29tZSB2ZXJ5IHJ1ZGltZW50YXJ5IHN1cHBvcnQgZm9yIHRoZSBpbnRlcm5hbCBzcGVlY2gKK3N5bnRoZXNpc2VyLiAgVGhpcywgaG93ZXZlciwgbGVhdmVzIG11Y2ggdG8gYmUgZGVzaXJlZDogdGhlcmUgYXJlIG9ubHkKK2BzcGVhayBsaW5lJyBhbmQgYG11dGUnIGZ1bmN0aW9ucywgYW5kIHRoZSBzcGVlZCBhbmQgcGl0Y2ggb2YgdGhlCitzcGVlY2ggaXMgbm90IHlldCBjb25maWd1cmFibGUuCisKKworQ09ORklHVVJBVElPTiBBTkQgQ09NUElMQVRJT04KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZvciBnZW5lcmFsIGluZm9ybWF0aW9uIGFib3V0IGNvbmZpZ3VyaW5nIGFuZCBjb21waWxpbmcgQlJMVFRZLCBwbGVhc2UKK3NlZSB0aGUgQlJMVFRZIG1hbnVhbC4KKworQW55IENvbWJpQnJhaWxsZS1zcGVjaWZpYyBjb25maWd1cmF0aW9uIGlzIGRvbmUgYnkgZWRpdGluZyB0aGUKK2JyYWlsbGUuaCBmaWxlIGluIHRoaXMgZGlyZWN0b3J5LiAgSG93ZXZlciwgc3VjaCBjb25maWd1cmF0aW9uIGlzCitwcm9iYWJseSB1bm5lY2Vzc2FyeSBhcyB0aGUgZGlzcGxheSBzaXplIGlzIGF1dG9kZXRlY3RlZCBkdXJpbmcKK2luaXRpYWxpc2F0aW9uIGF0IHJ1bi10aW1lLgorCitCeSBkZWZhdWx0LCBCUkxUVFkgY2FuIGJlIHN0YXJ0ZWQgZXZlbiBpZiB0aGUgQ29tYmlCcmFpbGxlIGlzIHN3aXRjaGVkCitvZmYgb3Igbm90IGNvbm5lY3RlZCAtIGl0IHdpbGwgd2FpdCBpbiB0aGUgYmFja2dyb3VuZCwgY2hlY2tpbmcgZXZlcnkKK2ZpdmUgc2Vjb25kcyBmb3IgYSBkaXNwbGF5LiAgVGhpcyBiZWhhdmlvdXIgY2FuIGJlIGNoYW5nZWQgYnkKK2FkanVzdGluZyB0aGUgdmFsdWVzIG9mIEFDS19USU1FT1VUIGFuZCBNQVhfQVRURU1QVFMuCisKK1RoZSBkcml2ZXIgc2hvdWxkIHByb2JhYmx5IHNldCB0aGUgYXV0b3JlcGVhdCBkZWxheSBhbmQgcmF0ZSBvZiB0aGUKK0JyYWlsbGUgZGlzcGxheSdzIGtleXMgZHVyaW5nIGluaXRpYWxpc2F0aW9uLiAgVGhpcyBpcyB5ZXQgdG8gYmUKK2ltcGxlbWVudGVkLgorCisKK0dFVFRJTkcgU1RBUlRFRAorPT09PT09PT09PT09PT09CisKK1RoZSBDb21iaUJyYWlsbGUgbXVzdCBiZSBjb25uZWN0ZWQgdG8gdGhlIHNlcmlhbCBkZXZpY2UgeW91IGNob3NlCitkdXJpbmcgY29uZmlndXJhdGlvbiwgdW5sZXNzIG9mIGNvdXJzZSB5b3UgdXNlIHRoZSAtZCBvcHRpb24gdG8KK0JSTFRUWS4gIFRoZSBzZXJpYWwgaW50ZXJmYWNlIG11c3QgYmUgc2VsZWN0ZWQ7IHRoaXMgaXMgZG9uZSBieQoraG9sZGluZyB0aGUgbGVmdC1tb3N0IHRodW1iIGtleSB3aGlsZSB0dXJuaW5nIG9uIHRoZSBkaXNwbGF5LiAgQlJMVFRZCitzaG91bGQgdGhlbiBkaXNwbGF5IGl0cyBzdGFydHVwIG1lc3NhZ2UgYmVmb3JlIHN0YXJ0aW5nIHRvIGVjaG8gdGhlCitzY3JlZW4uCisKKworS0VZIEJJTkRJTkdTCis9PT09PT09PT09PT0KKworVGhlIGtleSBiaW5kaW5ncyAtIHBhcnRpY3VsYXJseSB3aXRoIHJlZ2FyZCB0byB0aGUgQnJhaWxsZSBkb3Qga2V5cyAtCitoYXZlIGJlZW4gcmVkZXNpZ25lZCBmcm9tIHRoZSBET1MgZHJpdmVyIHByb3ZpZGVkIHdpdGggdGhlCitDb21iaUJyYWlsbGUuICBIb3dldmVyLCB0aGUgZml2ZSB0aHVtYiBrZXlzIHdvcmsgc2ltaWxhcmx5LiAgSWYgd2UKK2xhYmVsIHRoZW0gQSB0byBFIGZyb20gbGVmdCB0byByaWdodCwgdGhlbiBBIGlzIEZXSU5MVCAoZ28gbGVmdCBvbmUKK2Z1bGwgd2luZG93IHdpZHRoKSwgQiBpcyBMTlVQIChnbyB1cCBvbmUgbGluZSksIEQgaXMgTE5ETiAoZ28gZG93biBvbmUKK2xpbmUpIGFuZCBFIGlzIEZXSU5SVCAoZ28gcmlnaHQgb25lIGZ1bGwgd2luZG93IHdpZHRoKS4gIEMgdG9nZ2xlcworY3Vyc29yIHRyYWNraW5nLCBzbyBDIHR3aWNlIG1vdmVzIHRoZSB3aW5kb3cgdG8gdGhlIGN1cnNvciBwb3NpdGlvbi4KKworVGhlIGV4dHJhIGN1cnNvciByb3V0aW5nIGtleSAob3ZlciB0aGUgZ2FwIGJldHdlZW4gdGhlIHN0YXR1cyBjZWxscworYW5kIHRoZSBtYWluIGRpc3BsYXkpIGlzIHVzZWQgdG8gYnJpbmcgdXAgdGhlIGhlbHAgc2NyZWVuLiAgUHJlc3NpbmcKK3RoaXMga2V5IGFnYWluIGdvZXMgYmFjayB0byBub3JtYWwgb3BlcmF0aW9uLiAgVGhlIGhlbHAgc2NyZWVuIGhhcyBhCitmdWxsIGxpc3Qgb2Yga2V5IGJpbmRpbmdzIChhcGFydCBmcm9tIHRoZSBjdXJzb3Igcm91dGluZyBrZXlzKTsgaXQgY2FuCitiZSBmb3VuZCBpbiBwbGFpbiB0ZXh0IGZvcm1hdCBpbiB0aGUgZmlsZSBoZWxwLnR4dCBpbiB0aGlzCitkaXJlY3RvcnkuICBUaGUgZG90IGtleXMgaGF2ZSBiZWVuIG51bWJlcmVkIChmcm9tIGxlZnQgdG8gcmlnaHQpOiAzLAorMiwgMSwgNCwgNSwgNjsgY2FwaXRhbCBsZXR0ZXJzIGluIGJyYWNrZXRzIHJlZmVyIHRvIHRodW1iIGtleXMsCitlLmcuIChBKSBtZWFucyBBIGFsb25lLCAoQkQpIG1lYW5zIEIgYW5kIEQgcHJlc3NlZCB0b2dldGhlciBhbmQgKENDKQorbWVhbnMgQywgYWxvbmUsIHR3aWNlLgorCitBbGwgZnVuY3Rpb25zIGJvdW5kIHRvIHRoZSB0aHVtYiBrZXlzIGNhbiBhbHNvIGJlIGV4ZWN1dGVkIGJ5IHVzaW5nCit0aGUgQnJhaWxsZSBkb3Qga2V5cy4gIFRoZSBjb252ZXJzZSwgaG93ZXZlciwgaXMgbm90IHRoZSBjYXNlLCBhcwordGhlcmUgYXJlIGZhciBtb3JlIGF2YWlsYWJsZSBjb21iaW5hdGlvbnMgb2YgQnJhaWxsZSBkb3Qga2V5cyB0aGFuIG9mCit0aHVtYiBrZXlzICh1c2luZyBub3QgbW9yZSB0aGFuIHR3byBhdCBvbmNlKS4KKworQ3Vyc29yIFJvdXRpbmcgS2V5cworLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUga2V5cyBhYm92ZSB0aGUgMjAvNDAvODAgY2VsbHMgb2YgdGhlIG1haW4gZGlzcGxheSBjYW4gYmUgdXNlZCBmb3IKK2EgbW9yZSBhY2N1cmF0ZSBmb3JtIG9mIGN1cnNvciByb3V0aW5nLCBzcGVjaWZ5aW5nIHRoYXQgcGFydGljdWxhcgorcG9zaXRpb24gcmF0aGVyIHRoYW4gdGhlIHN0YXJ0IG9mIHRoZSBCcmFpbGxlIHdpbmRvdy4KKworVGhlIGV4dHJhIHNpeCBjdXJzb3Igcm91dGluZyBrZXlzIGhhdmUgc3BlY2lhbCBtZWFuaW5ncy4gIFRoZSBzaXh0aAorZnJvbSB0aGUgbGVmdCB0b2dnbGVzIGhlbHAgbW9kZTsgdGhlIGZpZnRoIHRvZ2dsZXMgZnJlZXplIG1vZGU7IHRoZQorZm91cnRoIGlzIHRoZSBSRVNFVCBidXR0b24gYW5kIHRoZSB0aGlyZCBpcyB0aGUgQ09ORk1FTlUgYnV0dG9uLgorCitTcGVjaWFsIEN1dCBGdW5jdGlvbgorLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIG1haW4gY3Vyc29yIHJvdXRpbmcga2V5cywgdG9nZXRoZXIgd2l0aCB0aGUgbGVmdG1vc3QgdHdvIG9mIHRoZQorZXh0cmEgb25lcywgY2FuIGJlIHVzZWQgZm9yIGEgbW9yZSBhZHZhbmNlZCBmb3JtIG9mIGN1dHRpbmcuCisKK1RvIG1hcmsgdGhlIHRvcCBsZWZ0IGNvcm5lciBvZiB0aGUgcmVjdGFuZ2xlIHRvIGJlIGN1dCwgcHJlc3MgdGhlCitsZWZ0bW9zdCBjdXJzb3Igcm91dGluZyBrZXkgZm9sbG93ZWQgaW1tZWRpYXRlbHkgYnkgdGhlIG9uZSBvdmVyIHRoZQorYXBwcm9wcmlhdGUgY2VsbC4gIFRoZW4sIHRvIG1hcmsgdGhlIGJvdHRvbSByaWdodCBjb3JuZXIsIHByZXNzIHRoZQorc2Vjb25kIGN1cnNvciByb3V0aW5nIGtleSBmb2xsb3dlZCBpbW1lZGlhdGVseSBieSB0aGUgb25lIG92ZXIgdGhlCithcHByb3ByaWF0ZSBjZWxsLgorCisKK1RIRSBTVEFUVVMgQ0VMTFMKKz09PT09PT09PT09PT09PT0KKworVGhlIHN0YXR1cyBjZWxscyBhcmUgdXNlZCBzbGlnaHRseSBkaWZmZXJlbnRseSBmcm9tIHRoZSBET1MgZHJpdmVyLgorVGhlIGZpcnN0IGZvdXIgY2VsbHMgYXJlIHVzZWQgdG8gZGVub3RlIHRoZSBwb3NpdGlvbnMgb2YgdGhlIGN1cnNvcgorYW5kIHRoZSBCcmFpbGxlIHdpbmRvdywgYW5kIGZvcm0gdHdvIGxpbmVzIG9mIGZvdXIgbnVtYmVycy4gIFRoZSB0b3AKK2xpbmUgaXMgdGhlIGN1cnNvciBwb3NpdGlvbiBpbiB0aGUgZm9ybWF0IENDUlIgd2hlcmUgQ0MgaXMgdGhlIGNvbHVtbgorbnVtYmVyIGFuZCBSUiBpcyB0aGUgcm93IG51bWJlci4gIFRoZSBzZWNvbmQgbGluZSBpcyB0aGUgd2luZG93Citwb3NpdGlvbiBpbiB0aGUgc2FtZSBmb3JtYXQuICBUaGUgdG9wIGxlZnQgY29ybmVyIG9mIHRoZSBzY3JlZW4gaXMKKzAwMDAsIGluIHRoaXMgbm90YXRpb24uCisKK1RoZSBmaWZ0aCBzdGF0dXMgY2VsbCBpcyBhIHNldCBvZiBmbGFncywgYXMgZm9sbG93czoKKworRG90IE51bWJlciAgICAgIERvdCBQcmVzZW50IE1lYW5zCisgICAgIDEgICAgICAgICAgVGhlIHNjcmVlbiBpcyBmcm96ZW4KKyAgICAgMiAgICAgICAgICBBdHRyaWJ1dGUgZGlzcGxheSBpcyBvbgorICAgICAzICAgICAgICAgIEF1ZGlvIHNpZ25hbHMgYXJlIG9uCisgICAgIDQgICAgICAgICAgVGhlIGN1cnNvciBpcyB2aXNpYmxlCisgICAgIDUgICAgICAgICAgQ3Vyc29yIHNoYXBlIGlzIGJsb2NrCisgICAgIDYgICAgICAgICAgQ3Vyc29yIGJsaW5rIGlzIG9uCisgICAgIDcgICAgICAgICAgQ3Vyc29yIHRyYWNraW5nIGlzIG9uCisgICAgIDggICAgICAgICAgU2xpZGluZyB3aW5kb3cgaXMgb24KKworCitOaWtoaWwgTmFpcgorVHJpbml0eSBDb2xsZWdlLCBDQU1CUklER0UsIENCMiAxVFEsIEVuZ2xhbmQKK1RlbC46ICs0NCAxMjIzIDM2ODM1MworRW1haWw6IG5uMjAxQGN1cy5jYW0uYWMudWsKZGlmZiAtLWdpdCBhL0RyaXZlcnMvQnJhaWxsZS9Db21iaUJyYWlsbGUvYnJhaWxsZS5jIGIvRHJpdmVycy9CcmFpbGxlL0NvbWJpQnJhaWxsZS9icmFpbGxlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWQ5ZjhmMgotLS0gL2Rldi9udWxsCisrKyBiL0RyaXZlcnMvQnJhaWxsZS9Db21iaUJyYWlsbGUvYnJhaWxsZS5jCkBAIC0wLDAgKzEsMzY4IEBACisvKgorICogQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyAqICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyAqCisgKiBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorICoKKyAqIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyAqCisgKiBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisgKi8KKworI2luY2x1ZGUgInByb2xvZ3VlLmgiCisKKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorCisjaW5jbHVkZSAibG9nLmgiCisjaW5jbHVkZSAiYXNjaWkuaCIKKworI2RlZmluZSBCUkxfU1RBVFVTX0ZJRUxEUyBzZkN1cnNvckFuZFdpbmRvd0NvbHVtbjIsIHNmQ3Vyc29yQW5kV2luZG93Um93Miwgc2ZTdGF0ZURvdHMKKyNkZWZpbmUgQlJMX0hBVkVfU1RBVFVTX0NFTExTCisjaW5jbHVkZSAiYnJsX2RyaXZlci5oIgorCisjaW5jbHVkZSAiYnJsZGVmcy1jYi5oIgorI2luY2x1ZGUgImJyYWlsbGUuaCIKKworQkVHSU5fS0VZX05BTUVfVEFCTEUoZG90KQorICBLRVlfTkFNRV9FTlRSWShDQl9LRVlfRG90MSwgIkRvdDEiKSwKKyAgS0VZX05BTUVfRU5UUlkoQ0JfS0VZX0RvdDIsICJEb3QyIiksCisgIEtFWV9OQU1FX0VOVFJZKENCX0tFWV9Eb3QzLCAiRG90MyIpLAorICBLRVlfTkFNRV9FTlRSWShDQl9LRVlfRG90NCwgIkRvdDQiKSwKKyAgS0VZX05BTUVfRU5UUlkoQ0JfS0VZX0RvdDUsICJEb3Q1IiksCisgIEtFWV9OQU1FX0VOVFJZKENCX0tFWV9Eb3Q2LCAiRG90NiIpLAorRU5EX0tFWV9OQU1FX1RBQkxFCisKK0JFR0lOX0tFWV9OQU1FX1RBQkxFKHRodW1iKQorICBLRVlfTkFNRV9FTlRSWShDQl9LRVlfVGh1bWIxLCAiVGh1bWIxIiksCisgIEtFWV9OQU1FX0VOVFJZKENCX0tFWV9UaHVtYjIsICJUaHVtYjIiKSwKKyAgS0VZX05BTUVfRU5UUlkoQ0JfS0VZX1RodW1iMywgIlRodW1iMyIpLAorICBLRVlfTkFNRV9FTlRSWShDQl9LRVlfVGh1bWI0LCAiVGh1bWI0IiksCisgIEtFWV9OQU1FX0VOVFJZKENCX0tFWV9UaHVtYjUsICJUaHVtYjUiKSwKK0VORF9LRVlfTkFNRV9UQUJMRQorCitCRUdJTl9LRVlfTkFNRV9UQUJMRShzdGF0dXMpCisgIEtFWV9OQU1FX0VOVFJZKENCX0tFWV9TdGF0dXMxLCAiU3RhdHVzMSIpLAorICBLRVlfTkFNRV9FTlRSWShDQl9LRVlfU3RhdHVzMiwgIlN0YXR1czIiKSwKKyAgS0VZX05BTUVfRU5UUlkoQ0JfS0VZX1N0YXR1czMsICJTdGF0dXMzIiksCisgIEtFWV9OQU1FX0VOVFJZKENCX0tFWV9TdGF0dXM0LCAiU3RhdHVzNCIpLAorICBLRVlfTkFNRV9FTlRSWShDQl9LRVlfU3RhdHVzNSwgIlN0YXR1czUiKSwKKyAgS0VZX05BTUVfRU5UUlkoQ0JfS0VZX1N0YXR1czYsICJTdGF0dXM2IiksCitFTkRfS0VZX05BTUVfVEFCTEUKKworQkVHSU5fS0VZX05BTUVfVEFCTEUocm91dGluZykKKyAgS0VZX0dST1VQX0VOVFJZKENCX0dSUF9Sb3V0aW5nS2V5cywgIlJvdXRpbmdLZXkiKSwKK0VORF9LRVlfTkFNRV9UQUJMRQorCitCRUdJTl9LRVlfTkFNRV9UQUJMRVMoYWxsKQorICBLRVlfTkFNRV9UQUJMRShkb3QpLAorICBLRVlfTkFNRV9UQUJMRSh0aHVtYiksCisgIEtFWV9OQU1FX1RBQkxFKHN0YXR1cyksCisgIEtFWV9OQU1FX1RBQkxFKHJvdXRpbmcpLAorRU5EX0tFWV9OQU1FX1RBQkxFUworCitERUZJTkVfS0VZX1RBQkxFKGFsbCkKKworQkVHSU5fS0VZX1RBQkxFX0xJU1QKKyAgJktFWV9UQUJMRV9ERUZJTklUSU9OKGFsbCksCitFTkRfS0VZX1RBQkxFX0xJU1QKKworI2RlZmluZSBDT05ORUNUSU9OX1RJTUVPVVQgMTAwMAorI2RlZmluZSBDT05ORUNUSU9OX1JFVFJJRVMgMAorI2RlZmluZSBNQVhfSU5QVVRfUEFDS0VUX1NJWkUgNAorI2RlZmluZSBNQVhfVEVYVF9DRUxMUyA4MAorI2RlZmluZSBTVEFUVVNfQ0VMTFMgNQorCitCcmFpbGxlRGlzcGxheSAqY2JCcmFpbGxlRGlzcGxheSA9IE5VTEw7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgY2hhciBpZGVudGlmaWVyOworICBjaGFyIHRleHRDb2x1bW5zOworfSBNb2RlbEVudHJ5OworCitzdGF0aWMgY29uc3QgTW9kZWxFbnRyeSBtb2RlbFRhYmxlW10gPSB7CisgIHsgLmlkZW50aWZpZXIgPSAwLAorICAgIC50ZXh0Q29sdW1ucyA9IDIwLAorICB9LAorCisgIHsgLmlkZW50aWZpZXIgPSAxLAorICAgIC50ZXh0Q29sdW1ucyA9IDQwLAorICB9LAorCisgIHsgLmlkZW50aWZpZXIgPSAyLAorICAgIC50ZXh0Q29sdW1ucyA9IDgwLAorICB9LAorCisgIHsgLmlkZW50aWZpZXIgPSA3LAorICAgIC50ZXh0Q29sdW1ucyA9IDIwLAorICB9LAorCisgIHsgLmlkZW50aWZpZXIgPSA4LAorICAgIC50ZXh0Q29sdW1ucyA9IDQwLAorICB9LAorCisgIHsgLmlkZW50aWZpZXIgPSA5LAorICAgIC50ZXh0Q29sdW1ucyA9IDgwLAorICB9LAorCisgIHsgLnRleHRDb2x1bW5zID0gMCB9Cit9OworCitzdGF0aWMgY29uc3QgTW9kZWxFbnRyeSAqCitmaW5kTW9kZWxFbnRyeSAodW5zaWduZWQgY2hhciBpZGVudGlmaWVyKSB7CisgIGNvbnN0IE1vZGVsRW50cnkgKm1vZGVsID0gbW9kZWxUYWJsZTsKKworICB3aGlsZSAobW9kZWwtPnRleHRDb2x1bW5zKSB7CisgICAgaWYgKGlkZW50aWZpZXIgPT0gbW9kZWwtPmlkZW50aWZpZXIpIHJldHVybiBtb2RlbDsKKyAgICBtb2RlbCArPSAxOworICB9CisgICAgICAgICAgCisgIHJldHVybiBOVUxMOworfQorCitzdHJ1Y3QgQnJhaWxsZURhdGFTdHJ1Y3QgeworICBjb25zdCBNb2RlbEVudHJ5ICptb2RlbDsKKworICBzdHJ1Y3QgeworICAgIHVuc2lnbmVkIGNoYXIgcmVmcmVzaDsKKyAgICB1bnNpZ25lZCBjaGFyIHByZXZpb3VzW01BWF9URVhUX0NFTExTXTsKKyAgfSB0ZXh0OworCisgIHN0cnVjdCB7CisgICAgdW5zaWduZWQgY2hhciByZWZyZXNoOworICAgIHVuc2lnbmVkIGNoYXIgY3VycmVudFtTVEFUVVNfQ0VMTFNdOworICAgIHVuc2lnbmVkIGNoYXIgcHJldmlvdXNbU1RBVFVTX0NFTExTXTsKKyAgfSBzdGF0dXM7Cit9OworCitzdGF0aWMgQnJhaWxsZVBhY2tldFZlcmlmaWVyUmVzdWx0Cit2ZXJpZnlQYWNrZXQgKAorICBCcmFpbGxlRGlzcGxheSAqYnJsLAorICB1bnNpZ25lZCBjaGFyICpieXRlcywgc2l6ZV90IHNpemUsCisgIHNpemVfdCAqbGVuZ3RoLCB2b2lkICpkYXRhCispIHsKKyAgdW5zaWduZWQgY2hhciBieXRlID0gYnl0ZXNbc2l6ZS0xXTsKKworICBzd2l0Y2ggKHNpemUpIHsKKyAgICBjYXNlIDE6CisgICAgICBpZiAoYnl0ZSAhPSBBU0NJSV9FU0MpIHJldHVybiBCUkxfUFZSX0lOVkFMSUQ7CisgICAgICAqbGVuZ3RoID0gMjsKKyAgICAgIHJldHVybiBCUkxfUFZSX0lOQ0xVREU7CisKKyAgICBjYXNlIDI6CisgICAgICBzd2l0Y2ggKGJ5dGUpIHsKKyAgICAgICAgY2FzZSBDQl9QS1RfS2VlcEFsaXZlOgorICAgICAgICAgICpsZW5ndGggPSAyOworICAgICAgICAgIHJldHVybiBCUkxfUFZSX0lOQ0xVREU7CisKKyAgICAgICAgY2FzZSBDQl9QS1RfRGV2aWNlSWRlbnRpdHk6CisgICAgICAgIGNhc2UgQ0JfUEtUX1JvdXRpbmdLZXk6CisgICAgICAgICAgKmxlbmd0aCA9IDM7CisgICAgICAgICAgcmV0dXJuIEJSTF9QVlJfSU5DTFVERTsKKworICAgICAgICBjYXNlIENCX1BLVF9OYXZpZ2F0aW9uS2V5czoKKyAgICAgICAgICAqbGVuZ3RoID0gNDsKKyAgICAgICAgICByZXR1cm4gQlJMX1BWUl9JTkNMVURFOworCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgcmV0dXJuIEJSTF9QVlJfSU5WQUxJRDsKKyAgICAgIH0KKworICAgIGRlZmF1bHQ6CisgICAgICByZXR1cm4gQlJMX1BWUl9JTkNMVURFOworICB9Cit9CisKK3N0YXRpYyBzaXplX3QKK3JlYWRQYWNrZXQgKEJyYWlsbGVEaXNwbGF5ICpicmwsIHZvaWQgKmJ5dGVzLCBzaXplX3Qgc2l6ZSkgeworICByZXR1cm4gcmVhZEJyYWlsbGVQYWNrZXQoYnJsLCBOVUxMLCBieXRlcywgc2l6ZSwgdmVyaWZ5UGFja2V0LCBOVUxMKTsKK30KKworc3RhdGljIGludAord3JpdGVQYWNrZXQgKEJyYWlsbGVEaXNwbGF5ICpicmwsIGNvbnN0IHZvaWQgKmJ5dGVzLCBzaXplX3Qgc2l6ZSkgeworICByZXR1cm4gd3JpdGVCcmFpbGxlUGFja2V0KGJybCwgTlVMTCwgYnl0ZXMsIHNpemUpOworfQorCitzdGF0aWMgaW50Cit3cml0ZUlkZW50aWZ5UmVxdWVzdCAoQnJhaWxsZURpc3BsYXkgKmJybCkgeworICBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBwYWNrZXRbXSA9IHsKKyAgICBBU0NJSV9FU0MsIENCX1BLVF9EZXZpY2VJZGVudGl0eQorICB9OworCisgIHJldHVybiB3cml0ZVBhY2tldChicmwsIHBhY2tldCwgc2l6ZW9mKHBhY2tldCkpOworfQorCitzdGF0aWMgQnJhaWxsZVJlc3BvbnNlUmVzdWx0Citpc0lkZW50aXR5UmVzcG9uc2UgKEJyYWlsbGVEaXNwbGF5ICpicmwsIGNvbnN0IHZvaWQgKnBhY2tldCwgc2l6ZV90IHNpemUpIHsKKyAgY29uc3QgdW5zaWduZWQgY2hhciAqYnl0ZXMgPSBwYWNrZXQ7CisgIHJldHVybiAoYnl0ZXNbMV0gPT0gQ0JfUEtUX0RldmljZUlkZW50aXR5KT8gQlJMX1JTUF9ET05FOiBCUkxfUlNQX1VORVhQRUNURUQ7Cit9CisKK3N0YXRpYyBpbnQKK2Nvbm5lY3RSZXNvdXJjZSAoQnJhaWxsZURpc3BsYXkgKmJybCwgY29uc3QgY2hhciAqaWRlbnRpZmllcikgeworICBzdGF0aWMgY29uc3QgU2VyaWFsUGFyYW1ldGVycyBzZXJpYWxQYXJhbWV0ZXJzID0geworICAgIFNFUklBTF9ERUZBVUxUX1BBUkFNRVRFUlMsCisgICAgLmJhdWQgPSBDQl9TRVJJQUxfQkFVRCwKKyAgICAuZmxvd0NvbnRyb2wgPSBTRVJJQUxfRkxPV19IQVJEV0FSRSwKKyAgfTsKKworICBHaW9EZXNjcmlwdG9yIGRlc2NyaXB0b3I7CisgIGdpb0luaXRpYWxpemVEZXNjcmlwdG9yKCZkZXNjcmlwdG9yKTsKKworICBkZXNjcmlwdG9yLnNlcmlhbC5wYXJhbWV0ZXJzID0gJnNlcmlhbFBhcmFtZXRlcnM7CisKKyAgaWYgKGNvbm5lY3RCcmFpbGxlUmVzb3VyY2UoYnJsLCBpZGVudGlmaWVyLCAmZGVzY3JpcHRvciwgTlVMTCkpIHsKKyAgICByZXR1cm4gMTsKKyAgfQorCisgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50CiticmxfY29uc3RydWN0IChCcmFpbGxlRGlzcGxheSAqYnJsLCBjaGFyICoqcGFyYW1ldGVycywgY29uc3QgY2hhciAqZGV2aWNlKSB7CisgIGlmICgoYnJsLT5kYXRhID0gbWFsbG9jKHNpemVvZigqYnJsLT5kYXRhKSkpKSB7CisgICAgbWVtc2V0KGJybC0+ZGF0YSwgMCwgc2l6ZW9mKCpicmwtPmRhdGEpKTsKKyAgICBicmwtPmRhdGEtPnRleHQucmVmcmVzaCA9IDE7CisgICAgYnJsLT5kYXRhLT5zdGF0dXMucmVmcmVzaCA9IDE7CisKKyAgICBpZiAoY29ubmVjdFJlc291cmNlKGJybCwgZGV2aWNlKSkgeworICAgICAgdW5zaWduZWQgY2hhciByZXNwb25zZVtNQVhfSU5QVVRfUEFDS0VUX1NJWkVdOworCisgICAgICBpbnQgZGV0ZWN0ZWQgPSBwcm9iZUJyYWlsbGVEaXNwbGF5KAorICAgICAgICBicmwsIENPTk5FQ1RJT05fUkVUUklFUywgTlVMTCwgQ09OTkVDVElPTl9USU1FT1VULAorICAgICAgICB3cml0ZUlkZW50aWZ5UmVxdWVzdCwKKyAgICAgICAgcmVhZFBhY2tldCwgcmVzcG9uc2UsIHNpemVvZihyZXNwb25zZSksCisgICAgICAgIGlzSWRlbnRpdHlSZXNwb25zZQorICAgICAgKTsKKworICAgICAgaWYgKGRldGVjdGVkKSB7CisgICAgICAgIHVuc2lnbmVkIGNoYXIgaWRlbnRpZmllciA9IHJlc3BvbnNlWzJdOworCisgICAgICAgIGlmICgoYnJsLT5kYXRhLT5tb2RlbCA9IGZpbmRNb2RlbEVudHJ5KGlkZW50aWZpZXIpKSkgeworICAgICAgICAgIGJybC0+dGV4dENvbHVtbnMgPSBicmwtPmRhdGEtPm1vZGVsLT50ZXh0Q29sdW1uczsKKyAgICAgICAgICBicmwtPnRleHRSb3dzID0gMTsKKworICAgICAgICAgIGJybC0+c3RhdHVzQ29sdW1ucyA9IFNUQVRVU19DRUxMUzsKKyAgICAgICAgICBicmwtPnN0YXR1c1Jvd3MgPSAxOworCisgICAgICAgICAgc2V0QnJhaWxsZUtleVRhYmxlKGJybCwgJktFWV9UQUJMRV9ERUZJTklUSU9OKGFsbCkpOworICAgICAgICAgIE1BS0VfT1VUUFVUX1RBQkxFKDBYMDEsIDBYMDIsIDBYMDQsIDBYODAsIDBYNDAsIDBYMjAsIDBYMDgsIDBYMTApOworCisgICAgICAgICAgY2JCcmFpbGxlRGlzcGxheSA9IGJybDsKKyAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICBsb2dNZXNzYWdlKExPR19FUlIsICJkZXRlY3RlZCB1bmtub3duIENvbWJpQnJhaWxsZSBtb2RlbCB3aXRoIElEICUwMlgiLCBpZGVudGlmaWVyKTsKKyAgICAgICAgfQorICAgICAgfQorCisgICAgICBkaXNjb25uZWN0QnJhaWxsZVJlc291cmNlKGJybCwgTlVMTCk7CisgICAgfQorCisgICAgZnJlZShicmwtPmRhdGEpOworICB9IGVsc2UgeworICAgIGxvZ01hbGxvY0Vycm9yKCk7CisgIH0KKworICByZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQKK2JybF9kZXN0cnVjdCAoQnJhaWxsZURpc3BsYXkgKmJybCkgeworICBjYkJyYWlsbGVEaXNwbGF5ID0gTlVMTDsKKyAgZGlzY29ubmVjdEJyYWlsbGVSZXNvdXJjZShicmwsIE5VTEwpOworICBmcmVlKGJybC0+ZGF0YSk7Cit9CisKK3N0YXRpYyBpbnQKK2JybF93cml0ZVN0YXR1cyAoQnJhaWxsZURpc3BsYXkgKmJybCwgY29uc3QgdW5zaWduZWQgY2hhciAqcykgeworICBtZW1jcHkoYnJsLT5kYXRhLT5zdGF0dXMuY3VycmVudCwgcywgYnJsLT5zdGF0dXNDb2x1bW5zKTsKKyAgcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQKK2JybF93cml0ZVdpbmRvdyAoQnJhaWxsZURpc3BsYXkgKmJybCwgY29uc3Qgd2NoYXJfdCAqdGV4dCkgeworICBpbnQgdGV4dENoYW5nZWQgPSBjZWxsc0hhdmVDaGFuZ2VkKAorICAgIGJybC0+ZGF0YS0+dGV4dC5wcmV2aW91cywgYnJsLT5idWZmZXIsIGJybC0+dGV4dENvbHVtbnMsCisgICAgTlVMTCwgTlVMTCwgJmJybC0+ZGF0YS0+dGV4dC5yZWZyZXNoCisgICk7CisKKyAgaW50IHN0YXR1c0NoYW5nZWQgPSBjZWxsc0hhdmVDaGFuZ2VkKAorICAgIGJybC0+ZGF0YS0+c3RhdHVzLnByZXZpb3VzLAorICAgIGJybC0+ZGF0YS0+c3RhdHVzLmN1cnJlbnQsCisgICAgYnJsLT5zdGF0dXNDb2x1bW5zLAorICAgIE5VTEwsIE5VTEwsICZicmwtPmRhdGEtPnN0YXR1cy5yZWZyZXNoCisgICk7CisKKyAgLyogT25seSByZWZyZXNoIGRpc3BsYXkgaWYgdGhlIGRhdGEgaGFzIGNoYW5nZWQ6ICovCisgIGlmICh0ZXh0Q2hhbmdlZCB8fCBzdGF0dXNDaGFuZ2VkKSB7CisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaGVhZGVyW10gPSB7CisgICAgICBBU0NJSV9FU0MsIENCX1BLVF9Xcml0ZUNlbGxzCisgICAgfTsKKworICAgIHVuc2lnbmVkIGNoYXIgYnVmZmVyW3NpemVvZihoZWFkZXIpICsgKChicmwtPnN0YXR1c0NvbHVtbnMgKyBicmwtPnRleHRDb2x1bW5zKSAqIDIpXTsKKworICAgIHVuc2lnbmVkIGNoYXIgKmJ5dGUgPSBidWZmZXI7CisgICAgYnl0ZSA9IG1lbXBjcHkoYnl0ZSwgaGVhZGVyLCBzaXplb2YoaGVhZGVyKSk7CisKKyAgICBmb3IgKGludCBpPTA7IGk8YnJsLT5zdGF0dXNDb2x1bW5zOyBpKz0xKSB7CisgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyIGMgPSB0cmFuc2xhdGVPdXRwdXRDZWxsKGJybC0+ZGF0YS0+c3RhdHVzLmN1cnJlbnRbaV0pOworICAgICAgaWYgKGMgPT0gQVNDSUlfRVNDKSAqYnl0ZSsrID0gYzsKKyAgICAgICpieXRlKysgPSBjOworICAgIH0KKworICAgIGZvciAoaW50IGk9MDsgaTxicmwtPnRleHRDb2x1bW5zOyBpKz0xKSB7CisgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyIGMgPSB0cmFuc2xhdGVPdXRwdXRDZWxsKGJybC0+YnVmZmVyW2ldKTsKKyAgICAgIGlmIChjID09IEFTQ0lJX0VTQykgKmJ5dGUrKyA9IGM7CisgICAgICAqYnl0ZSsrID0gYzsKKyAgICB9CisKKyAgICB7CisgICAgICBjb25zdCBzaXplX3Qgc2l6ZSA9IGJ5dGUgLSBidWZmZXI7CisgICAgICBpZiAoIXdyaXRlUGFja2V0KGJybCwgYnVmZmVyLCBzaXplKSkgcmV0dXJuIDA7CisgICAgfQorICB9CisKKyAgcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQKK2JybF9yZWFkQ29tbWFuZCAoQnJhaWxsZURpc3BsYXkgKmJybCwgS2V5VGFibGVDb21tYW5kQ29udGV4dCBjb250ZXh0KSB7CisgIHVuc2lnbmVkIGNoYXIgcGFja2V0W01BWF9JTlBVVF9QQUNLRVRfU0laRV07CisgIHNpemVfdCBsZW5ndGg7CisKKyAgd2hpbGUgKChsZW5ndGggPSByZWFkUGFja2V0KGJybCwgcGFja2V0LCBzaXplb2YocGFja2V0KSkpKSB7CisgICAgc3dpdGNoIChwYWNrZXRbMV0pIHsKKyAgICAgIGNhc2UgQ0JfUEtUX0tlZXBBbGl2ZToKKyAgICAgICAgY29udGludWU7CisKKyAgICAgIGNhc2UgQ0JfUEtUX1JvdXRpbmdLZXk6IHsKKyAgICAgICAgY2hhciBrZXkgPSBwYWNrZXRbMl07CisKKyAgICAgICAgaWYgKGtleSA8IDYpIHsKKyAgICAgICAgICBlbnF1ZXVlS2V5KGJybCwgQ0JfR1JQX05hdmlnYXRpb25LZXlzLCAoQ0JfS0VZX1N0YXR1czEgKyBrZXkpKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICBlbnF1ZXVlS2V5KGJybCwgQ0JfR1JQX1JvdXRpbmdLZXlzLCAoa2V5IC0gNikpOworICAgICAgICB9CisKKyAgICAgICAgY29udGludWU7CisgICAgICB9CisKKyAgICAgIGNhc2UgQ0JfUEtUX05hdmlnYXRpb25LZXlzOiB7CisgICAgICAgIEtleU51bWJlclNldCBrZXlzID0gcGFja2V0WzJdIHwgKHBhY2tldFszXSA8PCA4KTsKKyAgICAgICAgZW5xdWV1ZUtleXMoYnJsLCBrZXlzLCBDQl9HUlBfTmF2aWdhdGlvbktleXMsIENCX0tFWV9Eb3Q2KTsKKyAgICAgICAgY29udGludWU7CisgICAgICB9CisgICAgfQorCisgICAgbG9nVW5leHBlY3RlZFBhY2tldChwYWNrZXQsIGxlbmd0aCk7CisgIH0KKworICByZXR1cm4gKGVycm5vID09IEVBR0FJTik/IEVPRjogQlJMX0NNRF9SRVNUQVJUQlJMOworfQpkaWZmIC0tZ2l0IGEvRHJpdmVycy9CcmFpbGxlL0NvbWJpQnJhaWxsZS9icmFpbGxlLmggYi9Ecml2ZXJzL0JyYWlsbGUvQ29tYmlCcmFpbGxlL2JyYWlsbGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYTFmNTliCi0tLSAvZGV2L251bGwKKysrIGIvRHJpdmVycy9CcmFpbGxlL0NvbWJpQnJhaWxsZS9icmFpbGxlLmgKQEAgLTAsMCArMSwyMSBAQAorLyoKKyAqIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisgKiAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisgKgorICogQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKKy8qIHVzZWQgYnkgc3BlZWNoLmMgKi8KKyNpbmNsdWRlICJicmxfdHlwZXMuaCIKK2V4dGVybiBCcmFpbGxlRGlzcGxheSAqY2JCcmFpbGxlRGlzcGxheTsKZGlmZiAtLWdpdCBhL0RyaXZlcnMvQnJhaWxsZS9Db21iaUJyYWlsbGUvYnJsZGVmcy1jYi5oIGIvRHJpdmVycy9CcmFpbGxlL0NvbWJpQnJhaWxsZS9icmxkZWZzLWNiLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGE4YmM4NwotLS0gL2Rldi9udWxsCisrKyBiL0RyaXZlcnMvQnJhaWxsZS9Db21iaUJyYWlsbGUvYnJsZGVmcy1jYi5oCkBAIC0wLDAgKzEsNTkgQEAKKy8qCisgKiBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorICogICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorICoKKyAqIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorICoKKyAqIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyAqLworCisjaWZuZGVmIEJSTFRUWV9JTkNMVURFRF9DQl9CUkxERUZTCisjZGVmaW5lIEJSTFRUWV9JTkNMVURFRF9DQl9CUkxERUZTCisKKyNkZWZpbmUgQ0JfU0VSSUFMX0JBVUQgMzg0MDAgLyogYmF1ZCByYXRlIGZvciBCcmFpbGxlIGRpc3BsYXkgKi8KKwordHlwZWRlZiBlbnVtIHsKKyAgQ0JfUEtUX0tlZXBBbGl2ZSA9IDAsCisgIENCX1BLVF9EZXZpY2VJZGVudGl0eSA9ICc/JywKKyAgQ0JfUEtUX1dyaXRlQ2VsbHMgPSAnQicsCisgIENCX1BLVF9Sb3V0aW5nS2V5ID0gJ0MnLAorICBDQl9QS1RfTmF2aWdhdGlvbktleXMgPSAnSycsCit9IENCX1BhY2tldFR5cGU7CisKK3R5cGVkZWYgZW51bSB7CisgIENCX0tFWV9Eb3Q2ID0gMCwKKyAgQ0JfS0VZX0RvdDUsCisgIENCX0tFWV9Eb3Q0LAorICBDQl9LRVlfRG90MSwKKyAgQ0JfS0VZX0RvdDIsCisgIENCX0tFWV9Eb3QzLAorCisgIENCX0tFWV9UaHVtYjEgPSA4LAorICBDQl9LRVlfVGh1bWIyLAorICBDQl9LRVlfVGh1bWIzLAorICBDQl9LRVlfVGh1bWI0LAorICBDQl9LRVlfVGh1bWI1LAorCisgIENCX0tFWV9TdGF0dXMxID0gMTYsCisgIENCX0tFWV9TdGF0dXMyLAorICBDQl9LRVlfU3RhdHVzMywKKyAgQ0JfS0VZX1N0YXR1czQsCisgIENCX0tFWV9TdGF0dXM1LAorICBDQl9LRVlfU3RhdHVzNiwKK30gQ0JfTmF2aWdhdGlvbktleTsKKwordHlwZWRlZiBlbnVtIHsKKyAgQ0JfR1JQX05hdmlnYXRpb25LZXlzID0gMCwKKyAgQ0JfR1JQX1JvdXRpbmdLZXlzLAorfSBDQl9LZXlHcm91cDsKKworI2VuZGlmIC8qIEJSTFRUWV9JTkNMVURFRF9DQl9CUkxERUZTICovIApkaWZmIC0tZ2l0IGEvRHJpdmVycy9CcmFpbGxlL0RvdFBhZC9NYWtlZmlsZS5pbiBiL0RyaXZlcnMvQnJhaWxsZS9Eb3RQYWQvTWFrZWZpbGUuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmYyMTllMgotLS0gL2Rldi9udWxsCisrKyBiL0RyaXZlcnMvQnJhaWxsZS9Eb3RQYWQvTWFrZWZpbGUuaW4KQEAgLTAsMCArMSwyOCBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorIyAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyMKKyMgQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorIworIyBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorIworIyBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisjIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyMgbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisjCisjIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK0RSSVZFUl9DT0RFID0gZHAKK0RSSVZFUl9OQU1FID0gRG90UGFkCitEUklWRVJfVVNBR0UgPSAKK0RSSVZFUl9WRVJTSU9OID0gCitEUklWRVJfREVWRUxPUEVSUyA9IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4KK2luY2x1ZGUgJChTUkNfVE9QKWJyYWlsbGUubWsKKworYnJhaWxsZS4kTzoKKwkkKENDKSAkKEJSTF9DRkxBR1MpIC1jICQoU1JDX0RJUikvYnJhaWxsZS5jCisKZGlmZiAtLWdpdCBhL0RyaXZlcnMvQnJhaWxsZS9Eb3RQYWQvYnJhaWxsZS5jIGIvRHJpdmVycy9CcmFpbGxlL0RvdFBhZC9icmFpbGxlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGRmODNlMgotLS0gL2Rldi9udWxsCisrKyBiL0RyaXZlcnMvQnJhaWxsZS9Eb3RQYWQvYnJhaWxsZS5jCkBAIC0wLDAgKzEsMTE3OSBAQAorLyoKKyAqIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisgKiAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisgKgorICogQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKKyNpbmNsdWRlICJwcm9sb2d1ZS5oIgorCisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKworI2luY2x1ZGUgImxvZy5oIgorI2luY2x1ZGUgInN0cmZtdC5oIgorI2luY2x1ZGUgImJpdGZpZWxkLmgiCisjaW5jbHVkZSAicGFyc2UuaCIKKworI2RlZmluZSBCUkxfU1RBVFVTX0ZJRUxEUyBzZlRpbWUsIHNmU3BhY2UsIHNmQ3Vyc29yQW5kV2luZG93Q29sdW1uMywgc2ZTcGFjZSwgc2ZDdXJzb3JBbmRXaW5kb3dSb3cyLCBzZlNwYWNlLCBzZlNjcmVlbk51bWJlciwgc2ZTcGFjZSwgc2ZTdGF0ZUxldHRlcgorI2RlZmluZSBCUkxfSEFWRV9TVEFUVVNfQ0VMTFMKKwordHlwZWRlZiBlbnVtIHsKKyAgUEFSTV9ESVNQTEFZLAorfSBEUF9Ecml2ZXJQYXJhbWV0ZXI7CisKKyNkZWZpbmUgQlJMUEFSTVMgImRpc3BsYXkiCisjaW5jbHVkZSAiYnJsX2RyaXZlci5oIgorI2luY2x1ZGUgImJybGRlZnMtZHAuaCIKKworI2RlZmluZSBQUk9CRV9SRVRSWV9MSU1JVCAyCisjZGVmaW5lIFBST0JFX0lOUFVUX1RJTUVPVVQgMTAwMAorCisjZGVmaW5lIEdSQVBISUNfSE9SSVpPTlRBTF9TUEFDSU5HIDEKKyNkZWZpbmUgR1JBUEhJQ19WRVJUSUNBTF9TUEFDSU5HIDIKKworI2RlZmluZSBLRVlfRU5UUlkocyx0LGssbikgey52YWx1ZSA9IHsuZ3JvdXA9RFBfR1JQXyMjcywgLm51bWJlcj1EUF8jI3QjI18jI2t9LCAubmFtZT1ufQorI2RlZmluZSBTQ1JPTExfS0VZX0VOVFJZKGssbikgS0VZX0VOVFJZKFNjcm9sbEtleXMsIFNDTCwgaywgbikKKyNkZWZpbmUgS0VZQk9BUkRfS0VZX0VOVFJZKGssbikgS0VZX0VOVFJZKFBlcmtpbnNLZXlzLCBLQkQsIGssIG4pCisjZGVmaW5lIFBBTk5JTkdfS0VZX0VOVFJZKGssbikgS0VZX0VOVFJZKFBlcmtpbnNLZXlzLCBQQU4sIGssIG4pCisjZGVmaW5lIE5BVklHQVRJT05fS0VZX0VOVFJZKGssbikgS0VZX0VOVFJZKFBlcmtpbnNLZXlzLCBOQVYsIGssIG4pCisKK0JFR0lOX0tFWV9OQU1FX1RBQkxFKHNjcm9sbCkKKyAgU0NST0xMX0tFWV9FTlRSWShMRUZUX1BSRVYsICJMZWZ0UHJldiIpLAorICBTQ1JPTExfS0VZX0VOVFJZKExFRlRfTkVYVCwgIkxlZnROZXh0IiksCisgIFNDUk9MTF9LRVlfRU5UUlkoUklHSFRfUFJFViwgIlJpZ2h0UHJldiIpLAorICBTQ1JPTExfS0VZX0VOVFJZKFJJR0hUX05FWFQsICJSaWdodE5leHQiKSwKK0VORF9LRVlfTkFNRV9UQUJMRQorCitCRUdJTl9LRVlfTkFNRV9UQUJMRShrZXlib2FyZCkKKyAgS0VZQk9BUkRfS0VZX0VOVFJZKERPVDEsICJEb3QxIiksCisgIEtFWUJPQVJEX0tFWV9FTlRSWShET1QyLCAiRG90MiIpLAorICBLRVlCT0FSRF9LRVlfRU5UUlkoRE9UMywgIkRvdDMiKSwKKyAgS0VZQk9BUkRfS0VZX0VOVFJZKERPVDQsICJEb3Q0IiksCisgIEtFWUJPQVJEX0tFWV9FTlRSWShET1Q1LCAiRG90NSIpLAorICBLRVlCT0FSRF9LRVlfRU5UUlkoRE9UNiwgIkRvdDYiKSwKKyAgS0VZQk9BUkRfS0VZX0VOVFJZKERPVDcsICJEb3Q3IiksCisgIEtFWUJPQVJEX0tFWV9FTlRSWShET1Q4LCAiRG90OCIpLAorCisgIEtFWUJPQVJEX0tFWV9FTlRSWShTUEFDRSwgIlNwYWNlIiksCisgIEtFWUJPQVJEX0tFWV9FTlRSWShTSElGVF9MRUZULCAiTGVmdFNoaWZ0IiksCisgIEtFWUJPQVJEX0tFWV9FTlRSWShTSElGVF9SSUdIVCwgIlJpZ2h0U2hpZnQiKSwKKyAgS0VZQk9BUkRfS0VZX0VOVFJZKENPTlRST0xfTEVGVCwgIkxlZnRDb250cm9sIiksCisgIEtFWUJPQVJEX0tFWV9FTlRSWShDT05UUk9MX1JJR0hULCAiUmlnaHRDb250cm9sIiksCitFTkRfS0VZX05BTUVfVEFCTEUKKworQkVHSU5fS0VZX05BTUVfVEFCTEUocGFubmluZykKKyAgUEFOTklOR19LRVlfRU5UUlkoTEVGVCwgIlBhbkxlZnQiKSwKKyAgUEFOTklOR19LRVlfRU5UUlkoUklHSFQsICJQYW5SaWdodCIpLAorRU5EX0tFWV9OQU1FX1RBQkxFCisKK0JFR0lOX0tFWV9OQU1FX1RBQkxFKG5hdmlnYXRpb24pCisgIE5BVklHQVRJT05fS0VZX0VOVFJZKENFTlRFUiwgIk5hdkNlbnRlciIpLAorICBOQVZJR0FUSU9OX0tFWV9FTlRSWShMRUZULCAiTmF2TGVmdCIpLAorICBOQVZJR0FUSU9OX0tFWV9FTlRSWShSSUdIVCwgIk5hdlJpZ2h0IiksCisgIE5BVklHQVRJT05fS0VZX0VOVFJZKFVQLCAiTmF2VXAiKSwKKyAgTkFWSUdBVElPTl9LRVlfRU5UUlkoRE9XTiwgIk5hdkRvd24iKSwKK0VORF9LRVlfTkFNRV9UQUJMRQorCitCRUdJTl9LRVlfTkFNRV9UQUJMRShmdW5jdGlvbikKKyAgS0VZX0dST1VQX0VOVFJZKERQX0dSUF9GdW5jdGlvbktleXMsICJGdW5jdGlvbktleSIpLAorRU5EX0tFWV9OQU1FX1RBQkxFCisKK0JFR0lOX0tFWV9OQU1FX1RBQkxFKHJvdXRpbmcpCisgIEtFWV9HUk9VUF9FTlRSWShEUF9HUlBfUm91dGluZ0tleXMsICJSb3V0aW5nS2V5IiksCitFTkRfS0VZX05BTUVfVEFCTEUKKworQkVHSU5fS0VZX05BTUVfVEFCTEVTKGFsbCkKKyAgS0VZX05BTUVfVEFCTEUoc2Nyb2xsKSwKKyAgS0VZX05BTUVfVEFCTEUoa2V5Ym9hcmQpLAorICBLRVlfTkFNRV9UQUJMRShwYW5uaW5nKSwKKyAgS0VZX05BTUVfVEFCTEUobmF2aWdhdGlvbiksCisgIEtFWV9OQU1FX1RBQkxFKHJvdXRpbmcpLAorICBLRVlfTkFNRV9UQUJMRShmdW5jdGlvbiksCitFTkRfS0VZX05BTUVfVEFCTEVTCisKK0JFR0lOX0tFWV9OQU1FX1RBQkxFUyhwYW5mbjQpCisgIEtFWV9OQU1FX1RBQkxFKHBhbm5pbmcpLAorICBLRVlfTkFNRV9UQUJMRShmdW5jdGlvbiksCitFTkRfS0VZX05BTUVfVEFCTEVTCisKK0RFRklORV9LRVlfVEFCTEUoYWxsKQorREVGSU5FX0tFWV9UQUJMRShwYW5mbjQpCisKK0JFR0lOX0tFWV9UQUJMRV9MSVNUCisgICZLRVlfVEFCTEVfREVGSU5JVElPTihhbGwpLAorICAmS0VZX1RBQkxFX0RFRklOSVRJT04ocGFuZm40KSwKK0VORF9LRVlfVEFCTEVfTElTVAorCit0eXBlZGVmIHN0cnVjdCB7CisgIHVuc2lnbmVkIGNoYXIgKmNlbGxzOworICB1bnNpZ25lZCBjaGFyIGRlc3RpbmF0aW9uOworfSBFeHRlcm5hbFJvd0VudHJ5OworCit0eXBlZGVmIHN0cnVjdCB7CisgIHVuc2lnbmVkIGNoYXIgKmNlbGxzOworCisgIGNvbnN0IEV4dGVybmFsUm93RW50cnkgKnVwcGVyUm93OworICBjb25zdCBFeHRlcm5hbFJvd0VudHJ5ICpsb3dlclJvdzsKKworICB1bnNpZ25lZCBjaGFyIHVwcGVyU2hpZnQ7CisgIHVuc2lnbmVkIGNoYXIgbG93ZXJTaGlmdDsKKworICB1bnNpZ25lZCBjaGFyIHVwcGVyTWFzazsKKyAgdW5zaWduZWQgY2hhciBsb3dlck1hc2s7CisKKyAgdW5zaWduZWQgY2hhciBoYXNDaGFuZ2VkOworfSBJbnRlcm5hbFJvd0VudHJ5OworCitzdHJ1Y3QgQnJhaWxsZURhdGFTdHJ1Y3QgeworICBEUF9Cb2FyZEluZm9ybWF0aW9uIGJvYXJkSW5mb3JtYXRpb247CisgIHVuc2lnbmVkIGNoYXIgZmlybXdhcmVWZXJzaW9uWzhdOworICB1bnNpZ25lZCBjaGFyIGRldmljZU5hbWVbMTBdOworICBjb25zdCBLZXlOYW1lRW50cnkgKmtleU5hbWVUYWJsZVs3XTsKKworICBzdHJ1Y3QgeworICAgIHVuc2lnbmVkIGNoYXIgc2Nyb2xsWzRdOworICAgIHVuc2lnbmVkIGNoYXIgcGVya2luc1s0XTsKKyAgICB1bnNpZ25lZCBjaGFyIHJvdXRpbmdbOF07CisgICAgdW5zaWduZWQgY2hhciBmdW5jdGlvbls0XTsKKyAgfSBrZXlzOworCisgIHN0cnVjdCB7CisgICAgdW5zaWduZWQgY2hhciBkZXN0aW5hdGlvbjsKKyAgICB1bnNpZ25lZCBjaGFyIHJlZnJlc2hUaW1lOworCisgICAgdW5zaWduZWQgY2hhciBob3Jpem9udGFsU3BhY2luZzsKKyAgICB1bnNpZ25lZCBjaGFyIHZlcnRpY2FsU3BhY2luZzsKKworICAgIHVuc2lnbmVkIGNoYXIgY2VsbFdpZHRoOworICAgIHVuc2lnbmVkIGNoYXIgY2VsbEhlaWdodDsKKworICAgIHVuc2lnbmVkIGNoYXIgZXh0ZXJuYWxDb2x1bW5zOworICAgIHVuc2lnbmVkIGNoYXIgZXh0ZXJuYWxSb3dzOworCisgICAgdW5zaWduZWQgY2hhciBpbnRlcm5hbENvbHVtbnM7CisgICAgdW5zaWduZWQgY2hhciBpbnRlcm5hbFJvd3M7CisgIH0gZGlzcGxheTsKKworICBzdHJ1Y3QgeworICAgIHVuc2lnbmVkIGNoYXIgKmV4dGVybmFsQ2VsbHM7CisgICAgRXh0ZXJuYWxSb3dFbnRyeSAqZXh0ZXJuYWxSb3dzOworCisgICAgdW5zaWduZWQgY2hhciAqaW50ZXJuYWxDZWxsczsKKyAgICBJbnRlcm5hbFJvd0VudHJ5ICppbnRlcm5hbFJvd3M7CisKKyAgICB1bnNpZ25lZCBjaGFyICpzdGF0dXNDZWxsczsKKyAgfSBhcnJheXM7OworfTsKKworc3RhdGljIHZvaWQKK3NldEV4dGVybmFsRGlzcGxheVByb3BlcnRpZXMgKEJyYWlsbGVEaXNwbGF5ICpicmwsIGNvbnN0IERQX0Rpc3BsYXlEZXNjcmlwdG9yICpkaXNwbGF5KSB7CisgIHsKKyAgICB1bnNpZ25lZCBjaGFyIGRvdHNQZXJDZWxsID0gYnJsLT5kYXRhLT5ib2FyZEluZm9ybWF0aW9uLmRvdHNQZXJDZWxsOworCisgICAgdW5zaWduZWQgY2hhciAqd2lkdGggPSAmYnJsLT5kYXRhLT5kaXNwbGF5LmNlbGxXaWR0aDsKKyAgICB1bnNpZ25lZCBjaGFyICpoZWlnaHQgPSAmYnJsLT5kYXRhLT5kaXNwbGF5LmNlbGxIZWlnaHQ7CisKKyAgICBzd2l0Y2ggKGRvdHNQZXJDZWxsKSB7CisgICAgICBkZWZhdWx0OgorICAgICAgICBsb2dNZXNzYWdlKExPR19XQVJOSU5HLCAidW5leHBlY3RlZCBkb3RzIHBlciBjZWxsOiAldSIsIGRvdHNQZXJDZWxsKTsKKyAgICAgICAgLyogZmFsbCB0aHJvdWdoICovCisgICAgICBjYXNlIERQX0RQQ184OgorICAgICAgICAqd2lkdGggPSAyOworICAgICAgICAqaGVpZ2h0ID0gNDsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGNhc2UgRFBfRFBDXzY6CisgICAgICAgICp3aWR0aCA9IDI7CisgICAgICAgICpoZWlnaHQgPSAzOworICAgICAgICBicmVhazsKKyAgICB9CisgIH0KKworICBicmwtPmRhdGEtPmRpc3BsYXkucmVmcmVzaFRpbWUgPSBkaXNwbGF5LT5yZWZyZXNoVGltZTsKKyAgYnJsLT5kYXRhLT5kaXNwbGF5LmV4dGVybmFsQ29sdW1ucyA9IGRpc3BsYXktPmNvbHVtbkNvdW50OworICBicmwtPmRhdGEtPmRpc3BsYXkuZXh0ZXJuYWxSb3dzID0gZGlzcGxheS0+cm93Q291bnQ7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBjaGFyCit0b0ludGVybmFsRGltZW5zaW9uICh1bnNpZ25lZCBjaGFyIGV4dGVybmFsQ291bnQsIHVuc2lnbmVkIGNoYXIgZXh0ZXJuYWxEb3RzLCB1bnNpZ25lZCBjaGFyIGludGVybmFsRG90cywgdW5zaWduZWQgY2hhciBpbnRlcm5hbFNwYWNpbmcpIHsKKyAgcmV0dXJuICgoKGV4dGVybmFsQ291bnQgKiBleHRlcm5hbERvdHMpIC0gaW50ZXJuYWxEb3RzKSAvIChpbnRlcm5hbERvdHMgKyBpbnRlcm5hbFNwYWNpbmcpKSArIDE7Cit9CisKK3N0YXRpYyB2b2lkCitzZXRJbnRlcm5hbERpc3BsYXlQcm9wZXJ0aWVzIChCcmFpbGxlRGlzcGxheSAqYnJsKSB7CisgIGJybC0+ZGF0YS0+ZGlzcGxheS5pbnRlcm5hbENvbHVtbnMgPSB0b0ludGVybmFsRGltZW5zaW9uKAorICAgIGJybC0+ZGF0YS0+ZGlzcGxheS5leHRlcm5hbENvbHVtbnMsCisgICAgYnJsLT5kYXRhLT5kaXNwbGF5LmNlbGxXaWR0aCwKKyAgICAyLCBicmwtPmRhdGEtPmRpc3BsYXkuaG9yaXpvbnRhbFNwYWNpbmcKKyAgKTsKKworICBicmwtPmRhdGEtPmRpc3BsYXkuaW50ZXJuYWxSb3dzID0gdG9JbnRlcm5hbERpbWVuc2lvbigKKyAgICBicmwtPmRhdGEtPmRpc3BsYXkuZXh0ZXJuYWxSb3dzLAorICAgIGJybC0+ZGF0YS0+ZGlzcGxheS5jZWxsSGVpZ2h0LAorICAgIDQsIGJybC0+ZGF0YS0+ZGlzcGxheS52ZXJ0aWNhbFNwYWNpbmcKKyAgKTsKKworICBsb2dNZXNzYWdlKExPR19DQVRFR09SWShCUkFJTExFX0RSSVZFUiksCisgICAgImRpc3BsYXkgcHJvcGVydGllczogZ2hzcDoldSBndnNwOiV1IGNlbGw6JXV4JXUgZGlzcDoldXgldSBjb3JlOiV1eCV1IiwKKyAgICBicmwtPmRhdGEtPmRpc3BsYXkuaG9yaXpvbnRhbFNwYWNpbmcsIGJybC0+ZGF0YS0+ZGlzcGxheS52ZXJ0aWNhbFNwYWNpbmcsCisgICAgYnJsLT5kYXRhLT5kaXNwbGF5LmNlbGxXaWR0aCwgYnJsLT5kYXRhLT5kaXNwbGF5LmNlbGxIZWlnaHQsCisgICAgYnJsLT5kYXRhLT5kaXNwbGF5LmV4dGVybmFsQ29sdW1ucywgYnJsLT5kYXRhLT5kaXNwbGF5LmV4dGVybmFsUm93cywKKyAgICBicmwtPmRhdGEtPmRpc3BsYXkuaW50ZXJuYWxDb2x1bW5zLCBicmwtPmRhdGEtPmRpc3BsYXkuaW50ZXJuYWxSb3dzCisgICk7CisKKyAgYnJsLT50ZXh0Q29sdW1ucyA9IGJybC0+ZGF0YS0+ZGlzcGxheS5pbnRlcm5hbENvbHVtbnM7CisgIGJybC0+dGV4dFJvd3MgPSBicmwtPmRhdGEtPmRpc3BsYXkuaW50ZXJuYWxSb3dzOworfQorCitzdGF0aWMgdm9pZAordXNlVGV4dERpc3BsYXkgKEJyYWlsbGVEaXNwbGF5ICpicmwpIHsKKyAgbG9nTWVzc2FnZShMT0dfQ0FURUdPUlkoQlJBSUxMRV9EUklWRVIpLCAidXNpbmcgdGV4dCBkaXNwbGF5Iik7CisKKyAgYnJsLT5kYXRhLT5kaXNwbGF5LmRlc3RpbmF0aW9uID0gMDsKKyAgYnJsLT5kYXRhLT5kaXNwbGF5Lmhvcml6b250YWxTcGFjaW5nID0gMDsKKyAgYnJsLT5kYXRhLT5kaXNwbGF5LnZlcnRpY2FsU3BhY2luZyA9IDA7CisKKyAgc2V0RXh0ZXJuYWxEaXNwbGF5UHJvcGVydGllcyhicmwsICZicmwtPmRhdGEtPmJvYXJkSW5mb3JtYXRpb24udGV4dCk7CisgIHNldEludGVybmFsRGlzcGxheVByb3BlcnRpZXMoYnJsKTsKKworICBicmwtPmNlbGxTaXplID0gYnJsLT5kYXRhLT5kaXNwbGF5LmNlbGxXaWR0aCAqIGJybC0+ZGF0YS0+ZGlzcGxheS5jZWxsSGVpZ2h0OworfQorCitzdGF0aWMgdm9pZAordXNlR3JhcGhpY0Rpc3BsYXkgKEJyYWlsbGVEaXNwbGF5ICpicmwpIHsKKyAgbG9nTWVzc2FnZShMT0dfQ0FURUdPUlkoQlJBSUxMRV9EUklWRVIpLCAidXNpbmcgZ3JhcGhpYyBkaXNwbGF5Iik7CisKKyAgaWYgKGJybC0+ZGF0YS0+Ym9hcmRJbmZvcm1hdGlvbi5mZWF0dXJlcyAmIERQX0hBU19URVhUX0RJU1BMQVkpIHsKKyAgICBicmwtPmRhdGEtPmRpc3BsYXkuZGVzdGluYXRpb24gPSBicmwtPmRhdGEtPmJvYXJkSW5mb3JtYXRpb24udGV4dC5yb3dDb3VudDsKKyAgfSBlbHNlIHsKKyAgICBicmwtPmRhdGEtPmRpc3BsYXkuZGVzdGluYXRpb24gPSAxOworICB9CisKKyAgYnJsLT5kYXRhLT5kaXNwbGF5Lmhvcml6b250YWxTcGFjaW5nID0gR1JBUEhJQ19IT1JJWk9OVEFMX1NQQUNJTkc7CisgIGJybC0+ZGF0YS0+ZGlzcGxheS52ZXJ0aWNhbFNwYWNpbmcgPSBHUkFQSElDX1ZFUlRJQ0FMX1NQQUNJTkc7CisKKyAgc2V0RXh0ZXJuYWxEaXNwbGF5UHJvcGVydGllcyhicmwsICZicmwtPmRhdGEtPmJvYXJkSW5mb3JtYXRpb24uZ3JhcGhpYyk7CisgIHNldEludGVybmFsRGlzcGxheVByb3BlcnRpZXMoYnJsKTsKKworICBpZiAoYnJsLT5kYXRhLT5ib2FyZEluZm9ybWF0aW9uLmZlYXR1cmVzICYgRFBfSEFTX1RFWFRfRElTUExBWSkgeworICAgIGJybC0+c3RhdHVzQ29sdW1ucyA9IGJybC0+ZGF0YS0+Ym9hcmRJbmZvcm1hdGlvbi50ZXh0LmNvbHVtbkNvdW50OworICAgIGJybC0+c3RhdHVzUm93cyA9IDE7CisgIH0KK30KKworc3RhdGljIGludAorc2VsZWN0RGlzcGxheSAoQnJhaWxsZURpc3BsYXkgKmJybCwgY29uc3QgY2hhciAqcGFyYW1ldGVyKSB7CisgIHR5cGVkZWYgc3RydWN0IHsKKyAgICBjb25zdCBjaGFyICpuYW1lOyAvLyBtdXN0IGJlIGZpcnN0CisgICAgdm9pZCAoKnVzZURpc3BsYXkpIChCcmFpbGxlRGlzcGxheSAqYnJsKTsKKyAgICB1bnNpZ25lZCBjaGFyIGZlYXR1cmVCaXQ7CisgIH0gQ2hvaWNlRW50cnk7CisKKyAgc3RhdGljIGNvbnN0IENob2ljZUVudHJ5IGNob2ljZVRhYmxlW10gPSB7CisgICAgeyAubmFtZSA9ICJkZWZhdWx0IiB9LAorCisgICAgeyAubmFtZSA9ICJ0ZXh0IiwKKyAgICAgIC51c2VEaXNwbGF5ID0gdXNlVGV4dERpc3BsYXksCisgICAgICAuZmVhdHVyZUJpdCA9IERQX0hBU19URVhUX0RJU1BMQVksCisgICAgfSwKKworICAgIHsgLm5hbWUgPSAiZ3JhcGhpYyIsCisgICAgICAudXNlRGlzcGxheSA9IHVzZUdyYXBoaWNEaXNwbGF5LAorICAgICAgLmZlYXR1cmVCaXQgPSBEUF9IQVNfR1JBUEhJQ19ESVNQTEFZLAorICAgIH0sCisKKyAgICB7IC5uYW1lID0gTlVMTCB9CisgIH07CisKKyAgdW5zaWduZWQgY2hhciBmZWF0dXJlcyA9IGJybC0+ZGF0YS0+Ym9hcmRJbmZvcm1hdGlvbi5mZWF0dXJlczsKKyAgdW5zaWduZWQgaW50IGNob2ljZUluZGV4OworCisgIGlmICh2YWxpZGF0ZUNob2ljZUV4KCZjaG9pY2VJbmRleCwgcGFyYW1ldGVyLCBjaG9pY2VUYWJsZSwgc2l6ZW9mKGNob2ljZVRhYmxlWzBdKSkpIHsKKyAgICBjb25zdCBDaG9pY2VFbnRyeSAqY2hvaWNlID0gJmNob2ljZVRhYmxlW2Nob2ljZUluZGV4XTsKKworICAgIGlmIChmZWF0dXJlcyAmIGNob2ljZS0+ZmVhdHVyZUJpdCkgeworICAgICAgY2hvaWNlLT51c2VEaXNwbGF5KGJybCk7CisgICAgICByZXR1cm4gMTsKKyAgICB9CisKKyAgICBpZiAoY2hvaWNlLT5mZWF0dXJlQml0KSB7CisgICAgICBsb2dNZXNzYWdlKExPR19XQVJOSU5HLCAibm8gJXMgZGlzcGxheSIsIGNob2ljZS0+bmFtZSk7CisgICAgfQorICB9IGVsc2UgeworICAgIGxvZ01lc3NhZ2UoTE9HX1dBUk5JTkcsICJpbnZhbGlkIGRpc3BsYXkgc2V0dGluZzogJXMiLCBwYXJhbWV0ZXIpOworICB9CisKKyAgaWYgKGZlYXR1cmVzICYgRFBfSEFTX0dSQVBISUNfRElTUExBWSkgeworICAgIHVzZUdyYXBoaWNEaXNwbGF5KGJybCk7CisgIH0gZWxzZSBpZiAoZmVhdHVyZXMgJiBEUF9IQVNfVEVYVF9ESVNQTEFZKSB7CisgICAgdXNlVGV4dERpc3BsYXkoYnJsKTsKKyAgfSBlbHNlIHsKKyAgICBsb2dNZXNzYWdlKExPR19XQVJOSU5HLCAibm8gc3VwcG9ydGVkIGRpc3BsYXkiKTsKKyAgICByZXR1cm4gMDsKKyAgfQorCisgIHJldHVybiAxOworfQorCitzdGF0aWMgaW50Citwcm9jZXNzUGFyYW1ldGVycyAoQnJhaWxsZURpc3BsYXkgKmJybCwgY2hhciAqKnBhcmFtZXRlcnMpIHsKKyAgaWYgKCFzZWxlY3REaXNwbGF5KGJybCwgcGFyYW1ldGVyc1tQQVJNX0RJU1BMQVldKSkgcmV0dXJuIDA7CisgIHJldHVybiAxOworfQorCitzdGF0aWMgRXh0ZXJuYWxSb3dFbnRyeSAqCitnZXRFeHRlcm5hbFJvdyAoQnJhaWxsZURpc3BsYXkgKmJybCwgdW5zaWduZWQgaW50IGluZGV4KSB7CisgIHJldHVybiAmYnJsLT5kYXRhLT5hcnJheXMuZXh0ZXJuYWxSb3dzW2luZGV4XTsKK30KKworc3RhdGljIHZvaWQKK2luaXRpYWxpemVFeHRlcm5hbFJvd3MgKEJyYWlsbGVEaXNwbGF5ICpicmwpIHsKKyAgdW5zaWduZWQgY2hhciAqY2VsbHMgPSBicmwtPmRhdGEtPmFycmF5cy5leHRlcm5hbENlbGxzOworICB1bnNpZ25lZCBjaGFyIGRlc3RpbmF0aW9uID0gYnJsLT5kYXRhLT5kaXNwbGF5LmRlc3RpbmF0aW9uOworCisgIGZvciAodW5zaWduZWQgaW50IGluZGV4PTA7IGluZGV4PGJybC0+ZGF0YS0+ZGlzcGxheS5leHRlcm5hbFJvd3M7IGluZGV4Kz0xKSB7CisgICAgRXh0ZXJuYWxSb3dFbnRyeSAqcm93ID0gZ2V0RXh0ZXJuYWxSb3coYnJsLCBpbmRleCk7CisKKyAgICByb3ctPmNlbGxzID0gY2VsbHM7CisgICAgY2VsbHMgKz0gYnJsLT5kYXRhLT5kaXNwbGF5LmV4dGVybmFsQ29sdW1uczsKKworICAgIHJvdy0+ZGVzdGluYXRpb24gPSBkZXN0aW5hdGlvbjsKKyAgICBkZXN0aW5hdGlvbiArPSAxOworICB9Cit9CisKK3N0YXRpYyBJbnRlcm5hbFJvd0VudHJ5ICoKK2dldEludGVybmFsUm93IChCcmFpbGxlRGlzcGxheSAqYnJsLCB1bnNpZ25lZCBpbnQgaW5kZXgpIHsKKyAgcmV0dXJuICZicmwtPmRhdGEtPmFycmF5cy5pbnRlcm5hbFJvd3NbaW5kZXhdOworfQorCitzdGF0aWMgdm9pZAoraW5pdGlhbGl6ZUludGVybmFsUm93cyAoQnJhaWxsZURpc3BsYXkgKmJybCkgeworICB1bnNpZ25lZCBjaGFyICpjZWxscyA9IGJybC0+ZGF0YS0+YXJyYXlzLmludGVybmFsQ2VsbHMgKyBicmwtPmRhdGEtPmRpc3BsYXkudmVydGljYWxTcGFjaW5nOworCisgIGNvbnN0IHVuc2lnbmVkIGNoYXIgY2VsbEhlaWdodCA9IGJybC0+ZGF0YS0+ZGlzcGxheS5jZWxsSGVpZ2h0OworICBjb25zdCB1bnNpZ25lZCBjaGFyIHJvd0hlaWdodCA9IGNlbGxIZWlnaHQgKyBicmwtPmRhdGEtPmRpc3BsYXkudmVydGljYWxTcGFjaW5nOworICBjb25zdCB1bnNpZ25lZCBjaGFyIGNlbGxNYXNrID0gKDEgPDwgY2VsbEhlaWdodCkgLSAxOworCisgIGZvciAodW5zaWduZWQgaW50IGluZGV4PTA7IGluZGV4PGJybC0+ZGF0YS0+ZGlzcGxheS5pbnRlcm5hbFJvd3M7IGluZGV4Kz0xKSB7CisgICAgSW50ZXJuYWxSb3dFbnRyeSAqcm93ID0gZ2V0SW50ZXJuYWxSb3coYnJsLCBpbmRleCk7CisKKyAgICByb3ctPmNlbGxzID0gY2VsbHM7CisgICAgY2VsbHMgKz0gYnJsLT5kYXRhLT5kaXNwbGF5LmludGVybmFsQ29sdW1uczsKKworICAgIHsKKyAgICAgIHVuc2lnbmVkIGNoYXIgb2Zmc2V0ID0gcm93SGVpZ2h0ICogaW5kZXg7CisgICAgICByb3ctPnVwcGVyUm93ID0gZ2V0RXh0ZXJuYWxSb3coYnJsLCAob2Zmc2V0IC8gY2VsbEhlaWdodCkpOworICAgICAgcm93LT51cHBlclNoaWZ0ID0gb2Zmc2V0ICUgY2VsbEhlaWdodDsKKyAgICAgIHJvdy0+dXBwZXJNYXNrID0gKGNlbGxNYXNrIDw8IHJvdy0+dXBwZXJTaGlmdCkgJiBjZWxsTWFzazsKKyAgICAgIHJvdy0+dXBwZXJNYXNrIHw9IHJvdy0+dXBwZXJNYXNrIDw8IDQ7CisKKyAgICAgIG9mZnNldCArPSAzOworICAgICAgcm93LT5sb3dlclJvdyA9IGdldEV4dGVybmFsUm93KGJybCwgKG9mZnNldCAvIGNlbGxIZWlnaHQpKTsKKyAgICAgIHJvdy0+bG93ZXJTaGlmdCA9IGNlbGxIZWlnaHQgLSAob2Zmc2V0ICUgY2VsbEhlaWdodCkgLSAxOworICAgICAgcm93LT5sb3dlck1hc2sgPSBjZWxsTWFzayA+PiByb3ctPmxvd2VyU2hpZnQ7CisgICAgICByb3ctPmxvd2VyTWFzayB8PSByb3ctPmxvd2VyTWFzayA8PCA0OworICAgIH0KKworICAgIHJvdy0+aGFzQ2hhbmdlZCA9IDE7CisgIH0KK30KKworc3RhdGljIGludAorbWFrZUFycmF5cyAoQnJhaWxsZURpc3BsYXkgKmJybCkgeworICBpZiAoKGJybC0+ZGF0YS0+YXJyYXlzLmV4dGVybmFsQ2VsbHMgPSBjYWxsb2MoYnJsLT5kYXRhLT5kaXNwbGF5LmV4dGVybmFsUm93cywgYnJsLT5kYXRhLT5kaXNwbGF5LmV4dGVybmFsQ29sdW1ucykpKSB7CisgICAgaWYgKChicmwtPmRhdGEtPmFycmF5cy5pbnRlcm5hbENlbGxzID0gY2FsbG9jKGJybC0+ZGF0YS0+ZGlzcGxheS5pbnRlcm5hbFJvd3MsIGJybC0+ZGF0YS0+ZGlzcGxheS5pbnRlcm5hbENvbHVtbnMpKSkgeworICAgICAgaWYgKChicmwtPmRhdGEtPmFycmF5cy5leHRlcm5hbFJvd3MgPSBtYWxsb2MoQVJSQVlfU0laRShicmwtPmRhdGEtPmFycmF5cy5leHRlcm5hbFJvd3MsIGJybC0+ZGF0YS0+ZGlzcGxheS5leHRlcm5hbFJvd3MpKSkpIHsKKyAgICAgICAgaWYgKChicmwtPmRhdGEtPmFycmF5cy5pbnRlcm5hbFJvd3MgPSBtYWxsb2MoQVJSQVlfU0laRShicmwtPmRhdGEtPmFycmF5cy5pbnRlcm5hbFJvd3MsIGJybC0+ZGF0YS0+ZGlzcGxheS5pbnRlcm5hbFJvd3MpKSkpIHsKKyAgICAgICAgICBpbnQgc3RhdHVzQ2VsbHNBbGxvY2F0ZWQgPSAhYnJsLT5zdGF0dXNDb2x1bW5zOworCisgICAgICAgICAgaWYgKCFzdGF0dXNDZWxsc0FsbG9jYXRlZCkgeworICAgICAgICAgICAgaWYgKChicmwtPmRhdGEtPmFycmF5cy5zdGF0dXNDZWxscyA9IGNhbGxvYyhicmwtPnN0YXR1c0NvbHVtbnMsIDEpKSkgeworICAgICAgICAgICAgICBzdGF0dXNDZWxsc0FsbG9jYXRlZCA9IDE7CisgICAgICAgICAgICB9CisgICAgICAgICAgfQorCisgICAgICAgICAgaWYgKHN0YXR1c0NlbGxzQWxsb2NhdGVkKSB7CisgICAgICAgICAgICBpbml0aWFsaXplRXh0ZXJuYWxSb3dzKGJybCk7CisgICAgICAgICAgICBpbml0aWFsaXplSW50ZXJuYWxSb3dzKGJybCk7CisgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgICB9CisKKyAgICAgICAgICBmcmVlKGJybC0+ZGF0YS0+YXJyYXlzLmludGVybmFsUm93cyk7CisgICAgICAgIH0KKworICAgICAgICBmcmVlKGJybC0+ZGF0YS0+YXJyYXlzLmV4dGVybmFsUm93cyk7CisgICAgICB9CisKKyAgICAgIGZyZWUoYnJsLT5kYXRhLT5hcnJheXMuaW50ZXJuYWxDZWxscyk7CisgICAgfQorCisgICAgZnJlZShicmwtPmRhdGEtPmFycmF5cy5leHRlcm5hbENlbGxzKTsKKyAgfQorCisgIGxvZ01hbGxvY0Vycm9yKCk7CisgIHJldHVybiAwOworfQorCitzdGF0aWMgdm9pZAorZGVhbGxvY2F0ZUFycmF5cyAoQnJhaWxsZURpc3BsYXkgKmJybCkgeworICBmcmVlKGJybC0+ZGF0YS0+YXJyYXlzLnN0YXR1c0NlbGxzKTsKKworICBmcmVlKGJybC0+ZGF0YS0+YXJyYXlzLmludGVybmFsUm93cyk7CisgIGZyZWUoYnJsLT5kYXRhLT5hcnJheXMuaW50ZXJuYWxDZWxscyk7CisKKyAgZnJlZShicmwtPmRhdGEtPmFycmF5cy5leHRlcm5hbFJvd3MpOworICBmcmVlKGJybC0+ZGF0YS0+YXJyYXlzLmV4dGVybmFsQ2VsbHMpOworfQorCitzdGF0aWMgdWludDE2X3QKK2dldFVpbnQxNiAoY29uc3QgdW5zaWduZWQgY2hhciBieXRlc1syXSkgeworICB1bmlvbiB7CisgICAgY29uc3QgdW5zaWduZWQgY2hhciAqb2ZCeXRlczsKKyAgICBjb25zdCB1aW50MTZfdCAqb2ZVaW50MTY7CisgIH0gYWRkcmVzczsKKworICBhZGRyZXNzLm9mQnl0ZXMgPSBieXRlczsKKyAgcmV0dXJuIGdldEJpZ0VuZGlhbjE2KCphZGRyZXNzLm9mVWludDE2KTsKK30KKworc3RhdGljIHZvaWQKK3B1dFVpbnQxNiAodW5zaWduZWQgY2hhciBieXRlc1syXSwgdWludDE2X3QgdmFsdWUpIHsKKyAgdW5pb24geworICAgIHVuc2lnbmVkIGNoYXIgKm9mQnl0ZXM7CisgICAgdWludDE2X3QgKm9mVWludDE2OworICB9IGFkZHJlc3M7CisKKyAgYWRkcmVzcy5vZkJ5dGVzID0gYnl0ZXM7CisgIHB1dEJpZ0VuZGlhbjE2KGFkZHJlc3Mub2ZVaW50MTYsIHZhbHVlKTsKK30KKworc3RhdGljIHVuc2lnbmVkIGNoYXIKK21ha2VQYWNrZXRDaGVja3N1bSAoY29uc3QgRFBfUGFja2V0ICpwYWNrZXQpIHsKKyAgdW5zaWduZWQgY2hhciBjaGVja3N1bSA9IDBYQTU7CisKKyAgeworICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ5dGUgPSAmcGFja2V0LT5maWVsZHMuZGVzdGluYXRpb247CisgICAgY29uc3QgdW5zaWduZWQgY2hhciAqZW5kID0gYnl0ZSArIGdldFVpbnQxNihwYWNrZXQtPmZpZWxkcy5sZW5ndGgpIC0gMTsKKyAgICB3aGlsZSAoYnl0ZSA8IGVuZCkgY2hlY2tzdW0gXj0gKmJ5dGUrKzsKKyAgfQorCisgIHJldHVybiBjaGVja3N1bTsKK30KKworc3RhdGljIGludAord3JpdGVQYWNrZXQgKEJyYWlsbGVEaXNwbGF5ICpicmwsIGNvbnN0IERQX1BhY2tldCAqcGFja2V0KSB7CisgIHNpemVfdCBzaXplID0gZ2V0VWludDE2KHBhY2tldC0+ZmllbGRzLmxlbmd0aCk7CisgIHNpemUgKz0gJnBhY2tldC0+ZmllbGRzLmRlc3RpbmF0aW9uIC0gcGFja2V0LT5ieXRlczsKKworICB1bnNpZ25lZCBpbnQgdHlwZSA9IGdldFVpbnQxNihwYWNrZXQtPmZpZWxkcy5jb21tYW5kKSA8PCA4OworICB0eXBlIHw9IHBhY2tldC0+ZmllbGRzLmRlc3RpbmF0aW9uOworCisgIHJldHVybiB3cml0ZUJyYWlsbGVNZXNzYWdlKGJybCwgTlVMTCwgdHlwZSwgcGFja2V0LCBzaXplKTsKK30KKworc3RhdGljIGludAord3JpdGVSZXF1ZXN0IChCcmFpbGxlRGlzcGxheSAqYnJsLCB1aW50MTZfdCBjb21tYW5kLCB1aW50OF90IGRlc3RpbmF0aW9uLCBjb25zdCB2b2lkICpkYXRhLCBzaXplX3Qgc2l6ZSkgeworICBpZiAoIWRhdGEpIHNpemUgPSAwOworICBEUF9QYWNrZXQgcGFja2V0OworCisgIHBhY2tldC5maWVsZHMuc3luY1swXSA9IERQX1BTQl9TWU5DMTsKKyAgcGFja2V0LmZpZWxkcy5zeW5jWzFdID0gRFBfUFNCX1NZTkMyOworCisgIHBhY2tldC5maWVsZHMuZGVzdGluYXRpb24gPSBkZXN0aW5hdGlvbjsKKyAgcHV0VWludDE2KHBhY2tldC5maWVsZHMuY29tbWFuZCwgY29tbWFuZCk7CisgIHBhY2tldC5maWVsZHMuc2VxID0gMDsKKworICB1aW50OF90ICpjaGVja3N1bSA9IG1lbXBjcHkocGFja2V0LmZpZWxkcy5kYXRhLCBkYXRhLCBzaXplKTsKKyAgdWludDE2X3QgbGVuZ3RoID0gKGNoZWNrc3VtIC0gJnBhY2tldC5maWVsZHMuZGVzdGluYXRpb24pICsgMTsKKyAgcHV0VWludDE2KHBhY2tldC5maWVsZHMubGVuZ3RoLCBsZW5ndGgpOworICAqY2hlY2tzdW0gPSBtYWtlUGFja2V0Q2hlY2tzdW0oJnBhY2tldCk7CisKKyAgcmV0dXJuIHdyaXRlUGFja2V0KGJybCwgJnBhY2tldCk7Cit9CisKK3N0YXRpYyBpbnQKK3ZlcmlmeVBhY2tldENoZWNrc3VtIChjb25zdCBEUF9QYWNrZXQgKnBhY2tldCwgdW5zaWduZWQgY2hhciByZWNlaXZlZCkgeworICB1bnNpZ25lZCBjaGFyIGV4cGVjdGVkID0gbWFrZVBhY2tldENoZWNrc3VtKHBhY2tldCk7CisgIGlmIChyZWNlaXZlZCA9PSBleHBlY3RlZCkgcmV0dXJuIDE7CisKKyAgbG9nTWVzc2FnZShMT0dfV0FSTklORywKKyAgICAiY2hlY2tzdW0gbWlzbWF0Y2g6IFJlY2VpdmVkOiUwMlggRXhwZWN0ZWQ6JTAyWCIsCisgICAgcmVjZWl2ZWQsIGV4cGVjdGVkCisgICk7CisKKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK3ZlcmlmeVBhY2tldExlbmd0aCAoY29uc3QgRFBfUGFja2V0ICpwYWNrZXQsIGNvbnN0IEJyYWlsbGVEaXNwbGF5ICpicmwpIHsKKyAgdWludDE2X3QgcmVjZWl2ZWQgPSBnZXRVaW50MTYocGFja2V0LT5maWVsZHMubGVuZ3RoKTsKKyAgdWludDE2X3QgY29tbWFuZCA9IGdldFVpbnQxNihwYWNrZXQtPmZpZWxkcy5jb21tYW5kKTsKKyAgdWludDE2X3QgZXhwZWN0ZWQgPSA1OworCisgIHN3aXRjaCAoY29tbWFuZCkgeworICAgIGNhc2UgRFBfUlNQX0ZJUk1XQVJFX1ZFUlNJT046CisgICAgICBleHBlY3RlZCArPSBzaXplb2YoYnJsLT5kYXRhLT5maXJtd2FyZVZlcnNpb24pOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIERQX1JTUF9ERVZJQ0VfTkFNRToKKyAgICAgIGV4cGVjdGVkICs9IHNpemVvZihicmwtPmRhdGEtPmRldmljZU5hbWUpOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIERQX1JTUF9CT0FSRF9JTkZPUk1BVElPTjoKKyAgICAgIGV4cGVjdGVkICs9IHNpemVvZihicmwtPmRhdGEtPmJvYXJkSW5mb3JtYXRpb24pOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIERQX1JTUF9ESVNQTEFZX0xJTkU6CisgICAgICBleHBlY3RlZCArPSAxOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIERQX05URl9ESVNQTEFZX0xJTkU6CisgICAgICBleHBlY3RlZCArPSAxOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIERQX05URl9LRVlTX1NDUk9MTDoKKyAgICAgIGV4cGVjdGVkICs9IHNpemVvZihicmwtPmRhdGEtPmtleXMuc2Nyb2xsKTsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBEUF9OVEZfS0VZU19QRVJLSU5TOgorICAgICAgZXhwZWN0ZWQgKz0gc2l6ZW9mKGJybC0+ZGF0YS0+a2V5cy5wZXJraW5zKTsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBEUF9OVEZfS0VZU19ST1VUSU5HOgorICAgICAgZXhwZWN0ZWQgKz0gc2l6ZW9mKGJybC0+ZGF0YS0+a2V5cy5yb3V0aW5nKTsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBEUF9OVEZfS0VZU19GVU5DVElPTjoKKyAgICAgIGV4cGVjdGVkICs9IHNpemVvZihicmwtPmRhdGEtPmtleXMuZnVuY3Rpb24pOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIERQX05URl9FUlJPUjoKKyAgICAgIGV4cGVjdGVkICs9IDE7CisgICAgICBicmVhazsKKyAgfQorCisgIGlmIChyZWNlaXZlZCAhPSBleHBlY3RlZCkgeworICAgIGxvZ01lc3NhZ2UoTE9HX1dBUk5JTkcsCisgICAgICAibGVuZ3RoIG1pc21hdGNoIChjb21tYW5kICUwNFgpOiBSZWNlaXZlZDoldSBFeHBlY3RlZDoldSIsCisgICAgICBnZXRVaW50MTYocGFja2V0LT5maWVsZHMuY29tbWFuZCksIHJlY2VpdmVkLCBleHBlY3RlZAorICAgICk7CisgIH0KKworICByZXR1cm4gMTsKK30KKworc3RhdGljIEJyYWlsbGVQYWNrZXRWZXJpZmllclJlc3VsdAordmVyaWZ5UGFja2V0ICgKKyAgQnJhaWxsZURpc3BsYXkgKmJybCwKKyAgdW5zaWduZWQgY2hhciAqYnl0ZXMsIHNpemVfdCBzaXplLAorICBzaXplX3QgKmxlbmd0aCwgdm9pZCAqZGF0YQorKSB7CisgIHVuc2lnbmVkIGNoYXIgYnl0ZSA9IGJ5dGVzW3NpemUtMV07CisKKyAgc3dpdGNoIChzaXplKSB7CisgICAgY2FzZSAxOgorICAgICAgaWYgKGJ5dGUgIT0gRFBfUFNCX1NZTkMxKSByZXR1cm4gQlJMX1BWUl9JTlZBTElEOworICAgICAgKmxlbmd0aCA9IDQ7CisgICAgICBicmVhazsKKworICAgIGNhc2UgMjoKKyAgICAgIGlmIChieXRlICE9IERQX1BTQl9TWU5DMikgcmV0dXJuIEJSTF9QVlJfSU5WQUxJRDsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSA0OgorICAgICAgKmxlbmd0aCArPSBnZXRVaW50MTYoJmJ5dGVzWzJdKTsKKyAgICAgIGJyZWFrOworCisgICAgZGVmYXVsdDoKKyAgICAgIGJyZWFrOworICB9CisKKyAgaWYgKHNpemUgPT0gKmxlbmd0aCkgeworICAgIGNvbnN0IHZvaWQgKnBhY2tldCA9IGJ5dGVzOworICAgIHZlcmlmeVBhY2tldENoZWNrc3VtKHBhY2tldCwgYnl0ZSk7CisgICAgdmVyaWZ5UGFja2V0TGVuZ3RoKHBhY2tldCwgYnJsKTsKKyAgfQorCisgIHJldHVybiBCUkxfUFZSX0lOQ0xVREU7Cit9CisKK3N0YXRpYyBzaXplX3QKK3JlYWRQYWNrZXQgKEJyYWlsbGVEaXNwbGF5ICpicmwsIHZvaWQgKnBhY2tldCwgc2l6ZV90IHNpemUpIHsKKyAgcmV0dXJuIHJlYWRCcmFpbGxlUGFja2V0KGJybCwgTlVMTCwgcGFja2V0LCBzaXplLCB2ZXJpZnlQYWNrZXQsIE5VTEwpOworfQorCitzdGF0aWMgaW50Cit3cml0ZUNlbGxzIChCcmFpbGxlRGlzcGxheSAqYnJsLCB1bnNpZ25lZCBjaGFyIGRlc3RpbmF0aW9uLCBjb25zdCB1bnNpZ25lZCBjaGFyICpjZWxscywgdW5zaWduZWQgaW50IGNvdW50KSB7CisgIHVuc2lnbmVkIGNoYXIgZGF0YVsxICsgY291bnRdOworICB1bnNpZ25lZCBjaGFyICpieXRlID0gZGF0YTsKKworICAqYnl0ZSsrID0gMDsKKyAgYnl0ZSA9IG1lbXBjcHkoYnl0ZSwgY2VsbHMsIGNvdW50KTsKKworICByZXR1cm4gd3JpdGVSZXF1ZXN0KGJybCwgRFBfUkVRX0RJU1BMQVlfTElORSwgZGVzdGluYXRpb24sIGRhdGEsIChieXRlIC0gZGF0YSkpOworfQorCitzdGF0aWMgaW50Cit3cml0ZVN0YXR1c0NlbGxzIChCcmFpbGxlRGlzcGxheSAqYnJsKSB7CisgIHJldHVybiB3cml0ZUNlbGxzKGJybCwgMCwgYnJsLT5kYXRhLT5hcnJheXMuc3RhdHVzQ2VsbHMsIGJybC0+c3RhdHVzQ29sdW1ucyk7Cit9CisKK3N0YXRpYyBpbnQKK2JybF93cml0ZVN0YXR1cyAoQnJhaWxsZURpc3BsYXkgKmJybCwgY29uc3QgdW5zaWduZWQgY2hhciAqY2VsbHMpIHsKKyAgdHJhbnNsYXRlT3V0cHV0Q2VsbHMoYnJsLT5kYXRhLT5hcnJheXMuc3RhdHVzQ2VsbHMsIGNlbGxzLCBicmwtPnN0YXR1c0NvbHVtbnMpOworICByZXR1cm4gd3JpdGVTdGF0dXNDZWxscyhicmwpOworfQorCitzdGF0aWMgaW50Cit3cml0ZUV4dGVybmFsUm93IChCcmFpbGxlRGlzcGxheSAqYnJsLCBjb25zdCBFeHRlcm5hbFJvd0VudHJ5ICpyb3cpIHsKKyAgcmV0dXJuIHdyaXRlQ2VsbHMoYnJsLCByb3ctPmRlc3RpbmF0aW9uLCByb3ctPmNlbGxzLCBicmwtPmRhdGEtPmRpc3BsYXkuZXh0ZXJuYWxDb2x1bW5zKTsKK30KKworc3RhdGljIGludAorcmVmcmVzaENlbGxzIChCcmFpbGxlRGlzcGxheSAqYnJsKSB7CisgIGNvbnN0IEV4dGVybmFsUm93RW50cnkgKnJvdyA9IGJybC0+ZGF0YS0+YXJyYXlzLmV4dGVybmFsUm93czsKKyAgY29uc3QgRXh0ZXJuYWxSb3dFbnRyeSAqZW5kID0gcm93ICsgYnJsLT5kYXRhLT5kaXNwbGF5LmV4dGVybmFsUm93czsKKworICB3aGlsZSAocm93IDwgZW5kKSB7CisgICAgaWYgKCF3cml0ZUV4dGVybmFsUm93KGJybCwgcm93KSkgcmV0dXJuIDA7CisgICAgcm93ICs9IDE7CisgIH0KKworICBpZiAoIWJybC0+c3RhdHVzQ29sdW1ucykgcmV0dXJuIDE7CisgIHJldHVybiB3cml0ZVN0YXR1c0NlbGxzKGJybCk7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQKK2dldEV4dGVybmFsQ2VsbE9mZnNldCAoQnJhaWxsZURpc3BsYXkgKmJybCwgdW5zaWduZWQgaW50IGluZGV4KSB7CisgIHJldHVybiBpbmRleCAqIChicmwtPmRhdGEtPmRpc3BsYXkuY2VsbFdpZHRoICsgYnJsLT5kYXRhLT5kaXNwbGF5Lmhvcml6b250YWxTcGFjaW5nKTsKK30KKworc3RhdGljIHVuc2lnbmVkIGNoYXIKK2dldEV4dGVybmFsQ2VsbCAoQnJhaWxsZURpc3BsYXkgKmJybCwgY29uc3QgRXh0ZXJuYWxSb3dFbnRyeSAqcm93LCB1bnNpZ25lZCBpbnQgaW5kZXgpIHsKKyAgdW5zaWduZWQgaW50IG9mZnNldCA9IGdldEV4dGVybmFsQ2VsbE9mZnNldChicmwsIGluZGV4KTsKKyAgaW5kZXggPSBvZmZzZXQgLyAyOworICB1bnNpZ25lZCBjaGFyIGNlbGwgPSByb3ctPmNlbGxzW2luZGV4XTsKKworICBpZiAob2Zmc2V0ICUgMikgeworICAgIGNlbGwgPj49IDQ7CisgICAgY2VsbCB8PSByb3ctPmNlbGxzW2luZGV4ICsgMV0gPDwgNDsKKyAgfQorCisgIHJldHVybiBjZWxsOworfQorCitzdGF0aWMgdm9pZAorcHV0RXh0ZXJuYWxDZWxsIChCcmFpbGxlRGlzcGxheSAqYnJsLCBjb25zdCBFeHRlcm5hbFJvd0VudHJ5ICpyb3csIHVuc2lnbmVkIGludCBpbmRleCwgdW5zaWduZWQgY2hhciBjZWxsKSB7CisgIHVuc2lnbmVkIGludCBvZmZzZXQgPSBnZXRFeHRlcm5hbENlbGxPZmZzZXQoYnJsLCBpbmRleCk7CisgIGluZGV4ID0gb2Zmc2V0IC8gMjsKKworICBpZiAob2Zmc2V0ICUgMikgeworICAgIHVuc2lnbmVkIGNoYXIgKmRvdHMgPSAmcm93LT5jZWxsc1tpbmRleF07CisgICAgKmRvdHMgJj0gMFgwRjsKKyAgICAqZG90cyB8PSBjZWxsIDw8IDQ7CisKKyAgICBkb3RzICs9IDE7CisgICAgKmRvdHMgJj0gMFhGMDsKKyAgICAqZG90cyB8PSBjZWxsID4+IDQ7CisgIH0gZWxzZSB7CisgICAgcm93LT5jZWxsc1tpbmRleF0gPSBjZWxsOworICB9Cit9CisKK3N0YXRpYyBpbnQKK3dyaXRlSW50ZXJuYWxDZWxscyAoQnJhaWxsZURpc3BsYXkgKmJybCwgY29uc3QgSW50ZXJuYWxSb3dFbnRyeSAqaW50ZXJuYWxSb3csIHVuc2lnbmVkIGludCBmcm9tLCB1bnNpZ25lZCBpbnQgdG8pIHsKKyAgaW50IHVwcGVyVXBkYXRlZCA9IDA7CisgIGludCBsb3dlclVwZGF0ZWQgPSAwOworCisgIHdoaWxlIChmcm9tIDwgdG8pIHsKKyAgICB1bnNpZ25lZCBjaGFyIG5ld0NlbGwgPSB0cmFuc2xhdGVPdXRwdXRDZWxsKGludGVybmFsUm93LT5jZWxsc1tmcm9tXSk7CisKKyAgICB7CisgICAgICBjb25zdCBFeHRlcm5hbFJvd0VudHJ5ICp1cHBlclJvdyA9IGludGVybmFsUm93LT51cHBlclJvdzsKKyAgICAgIHVuc2lnbmVkIGNoYXIgdXBwZXJDZWxsID0gZ2V0RXh0ZXJuYWxDZWxsKGJybCwgdXBwZXJSb3csIGZyb20pOworICAgICAgdW5zaWduZWQgY2hhciBjaGFuZ2VkRG90cyA9ICh1cHBlckNlbGwgXiAobmV3Q2VsbCA8PCBpbnRlcm5hbFJvdy0+dXBwZXJTaGlmdCkpICYgaW50ZXJuYWxSb3ctPnVwcGVyTWFzazsKKworICAgICAgaWYgKGNoYW5nZWREb3RzKSB7CisgICAgICAgIHB1dEV4dGVybmFsQ2VsbChicmwsIHVwcGVyUm93LCBmcm9tLCAodXBwZXJDZWxsIF4gY2hhbmdlZERvdHMpKTsKKyAgICAgICAgdXBwZXJVcGRhdGVkID0gMTsKKyAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoaW50ZXJuYWxSb3ctPmxvd2VyUm93ICE9IGludGVybmFsUm93LT51cHBlclJvdykgeworICAgICAgY29uc3QgRXh0ZXJuYWxSb3dFbnRyeSAqbG93ZXJSb3cgPSBpbnRlcm5hbFJvdy0+bG93ZXJSb3c7CisgICAgICB1bnNpZ25lZCBjaGFyIGxvd2VyQ2VsbCA9IGdldEV4dGVybmFsQ2VsbChicmwsIGxvd2VyUm93LCBmcm9tKTsKKyAgICAgIHVuc2lnbmVkIGNoYXIgY2hhbmdlZERvdHMgPSAobG93ZXJDZWxsIF4gKG5ld0NlbGwgPj4gaW50ZXJuYWxSb3ctPmxvd2VyU2hpZnQpKSAmIGludGVybmFsUm93LT5sb3dlck1hc2s7CisKKyAgICAgIGlmIChjaGFuZ2VkRG90cykgeworICAgICAgICBwdXRFeHRlcm5hbENlbGwoYnJsLCBsb3dlclJvdywgZnJvbSwgKGxvd2VyQ2VsbCBeIGNoYW5nZWREb3RzKSk7CisgICAgICAgIGxvd2VyVXBkYXRlZCA9IDE7CisgICAgICB9CisgICAgfQorCisgICAgZnJvbSArPSAxOworICB9CisKKyAgaWYgKHVwcGVyVXBkYXRlZCkgeworICAgIGlmICghd3JpdGVFeHRlcm5hbFJvdyhicmwsIGludGVybmFsUm93LT51cHBlclJvdykpIHsKKyAgICAgIHJldHVybiAwOworICAgIH0KKyAgfQorCisgIGlmIChsb3dlclVwZGF0ZWQpIHsKKyAgICBpZiAoIXdyaXRlRXh0ZXJuYWxSb3coYnJsLCBpbnRlcm5hbFJvdy0+bG93ZXJSb3cpKSB7CisgICAgICByZXR1cm4gMDsKKyAgICB9CisgIH0KKworICByZXR1cm4gMTsKK30KKworc3RhdGljIGludAorYnJsX3dyaXRlV2luZG93IChCcmFpbGxlRGlzcGxheSAqYnJsLCBjb25zdCB3Y2hhcl90ICp0ZXh0KSB7CisgIHVuc2lnbmVkIGNoYXIgKmNlbGxzID0gYnJsLT5idWZmZXI7CisgIHVuc2lnbmVkIGNoYXIgcm93TGVuZ3RoID0gYnJsLT5kYXRhLT5kaXNwbGF5LmludGVybmFsQ29sdW1uczsKKworICBmb3IgKHVuc2lnbmVkIGludCByb3dJbmRleD0wOyByb3dJbmRleDxicmwtPmRhdGEtPmRpc3BsYXkuaW50ZXJuYWxSb3dzOyByb3dJbmRleCs9MSkgeworICAgIEludGVybmFsUm93RW50cnkgKnJvdyA9IGdldEludGVybmFsUm93KGJybCwgcm93SW5kZXgpOworCisgICAgdW5zaWduZWQgaW50IGZyb207CisgICAgdW5zaWduZWQgaW50IHRvOworCisgICAgaW50IHJvd0hhc0NoYW5nZWQgPSBjZWxsc0hhdmVDaGFuZ2VkKAorICAgICAgcm93LT5jZWxscywgY2VsbHMsIHJvd0xlbmd0aCwKKyAgICAgICZmcm9tLCAmdG8sICZyb3ctPmhhc0NoYW5nZWQKKyAgICApOworCisgICAgaWYgKHJvd0hhc0NoYW5nZWQpIHsKKyAgICAgIGlmICghd3JpdGVJbnRlcm5hbENlbGxzKGJybCwgcm93LCBmcm9tLCB0bykpIHsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgICB9CisgICAgfQorCisgICAgY2VsbHMgKz0gcm93TGVuZ3RoOworICB9CisKKyAgcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQKK2dldERhdGFTaXplIChjb25zdCBEUF9QYWNrZXQgKnBhY2tldCkgeworICByZXR1cm4gZ2V0VWludDE2KHBhY2tldC0+ZmllbGRzLmxlbmd0aCkKKyAgICAgICAtIDEgLy8gY2hlY2tzdW0KKyAgICAgICAtIChwYWNrZXQtPmZpZWxkcy5kYXRhIC0gJnBhY2tldC0+ZmllbGRzLmRlc3RpbmF0aW9uKSAvLyBoZWFkZXIKKyAgICAgICA7Cit9CisKK3N0YXRpYyB2b2lkCityZXBvcnRSZXF1ZXN0RXJyb3IgKHVuc2lnbmVkIGNoYXIgY29kZSkgeworICBzdGF0aWMgY29uc3QgY2hhciAqY29uc3QgcmVhc29uc1tdID0geworICAgIFtEUF9FUlJfTEVOR1RIXSAgICA9ICJ1bmV4cGVjdGVkIGxlbmd0aCIsCisgICAgW0RQX0VSUl9DT01NQU5EXSAgID0gInVucmVjb2duaXplZCBjb21tYW5kIiwKKyAgICBbRFBfRVJSX0NIRUNLU1VNXSAgPSAiaW5jb3JyZWN0IGNoZWNrc3VtIiwKKyAgICBbRFBfRVJSX1BBUkFNRVRFUl0gPSAiaW52YWxpZCBwYXJhbWV0ZXIiLAorICAgIFtEUF9FUlJfVElNRU9VVF0gICA9ICJyZWFkIHRpbWVkIG91dCIsCisgIH07CisKKyAgY29uc3QgY2hhciAqcmVhc29uID0gTlVMTDsKKyAgaWYgKGNvZGUgPCBBUlJBWV9DT1VOVChyZWFzb25zKSkgcmVhc29uID0gcmVhc29uc1tjb2RlXTsKKyAgaWYgKCFyZWFzb24pIHJlYXNvbiA9ICJ1bmtub3duIHByb2JsZW0iOworCisgIGxvZ01lc3NhZ2UoTE9HX1dBUk5JTkcsCisgICAgInJlcXVlc3QgcmVqZWN0ZWQgYnkgZGV2aWNlOiAldSAoJXMpIiwKKyAgICBjb2RlLCByZWFzb24KKyAgKTsKK30KKworc3RhdGljIHZvaWQKK3JlcG9ydERpc3BsYXlFcnJvciAodW5zaWduZWQgY2hhciBjb2RlKSB7CisgIHN0YXRpYyBjb25zdCBjaGFyICpjb25zdCByZWFzb25zW10gPSB7CisgICAgW0RQX0RSQ19BQ0tdICAgICAgPSAicG9zaXRpdmUgYWNrbm93bGVkZ2VtZW50IiwKKyAgICBbRFBfRFJDX05BQ0tdICAgICA9ICJuZWdhdGl2ZSBhY2tub3dsZWRnZW1lbnQiLAorICAgIFtEUF9EUkNfV0FJVF0gICAgID0gIndhaXQiLAorICAgIFtEUF9EUkNfQ0hFQ0tTVU1dID0gImluY29ycmVjdCBjaGVja3N1bSIsCisgIH07CisKKyAgY29uc3QgY2hhciAqcmVhc29uID0gTlVMTDsKKyAgaWYgKGNvZGUgPCBBUlJBWV9DT1VOVChyZWFzb25zKSkgcmVhc29uID0gcmVhc29uc1tjb2RlXTsKKyAgaWYgKCFyZWFzb24pIHJlYXNvbiA9ICJ1bmtub3duIHByb2JsZW0iOworCisgIGxvZ01lc3NhZ2UoTE9HX1dBUk5JTkcsCisgICAgImRpc3BsYXkgcmVqZWN0ZWQgYnkgZGV2aWNlOiAldSAoJXMpIiwKKyAgICBjb2RlLCByZWFzb24KKyAgKTsKK30KKworc3RhdGljIHZvaWQKK3NhdmVGaWVsZCAoCisgIGNvbnN0IERQX1BhY2tldCAqcGFja2V0LCBjb25zdCBjaGFyICpsYWJlbCwKKyAgdW5zaWduZWQgY2hhciAqZmllbGQsIGludCBmaWVsZFNpemUKKykgeworICBpbnQgZGF0YVNpemUgPSBnZXREYXRhU2l6ZShwYWNrZXQpOworCisgIGlmIChkYXRhU2l6ZSA+IGZpZWxkU2l6ZSkgZGF0YVNpemUgPSBmaWVsZFNpemU7CisgIG1lbWNweShmaWVsZCwgcGFja2V0LT5maWVsZHMuZGF0YSwgZGF0YVNpemUpOworICB3aGlsZSAoZGF0YVNpemUgPCBmaWVsZFNpemUpIGZpZWxkW2RhdGFTaXplKytdID0gJyAnOworCisgIGxvZ01lc3NhZ2UoTE9HX0NBVEVHT1JZKEJSQUlMTEVfRFJJVkVSKSwKKyAgICAiJXM6ICUuKnMiLCBsYWJlbCwgZmllbGRTaXplLCBmaWVsZAorICApOworfQorCitzdGF0aWMgdW5zaWduZWQgY2hhcgorcmV2ZXJzZUJ5dGVCaXRzICh1bnNpZ25lZCBjaGFyIGZyb21CeXRlKSB7CisgIHVuc2lnbmVkIGNoYXIgdG9CeXRlID0gMDsKKworICB1bnNpZ25lZCBjaGFyIGZyb21CaXQgPSAwWDgwOworICB1bnNpZ25lZCBjaGFyIHRvQml0ID0gMFgwMTsKKworICB3aGlsZSAoZnJvbUJpdCkgeworICAgIGlmIChmcm9tQnl0ZSAmIGZyb21CaXQpIHRvQnl0ZSB8PSB0b0JpdDsKKyAgICBmcm9tQml0ID4+PSAxOworICAgIHRvQml0IDw8PSAxOworICB9CisKKyAgcmV0dXJuIHRvQnl0ZTsKK30KKworc3RhdGljIGludAordXBkYXRlS2V5R3JvdXAgKAorICBCcmFpbGxlRGlzcGxheSAqYnJsLCBjb25zdCBEUF9QYWNrZXQgKnBhY2tldCwgS2V5R3JvdXAga2V5R3JvdXAsCisgIHVuc2lnbmVkIGNoYXIgKmFycmF5LCBzaXplX3QgYXJyYXlTaXplCispIHsKKyAgaW50IGRhdGFTaXplID0gZ2V0RGF0YVNpemUocGFja2V0KTsKKworICBpZiAoZGF0YVNpemUgPiAwKSB7CisgICAgdW5zaWduZWQgY2hhciBkYXRhW2FycmF5U2l6ZV07CisgICAgaWYgKGRhdGFTaXplID4gYXJyYXlTaXplKSBkYXRhU2l6ZSA9IGFycmF5U2l6ZTsKKworICAgIGZvciAoaW50IGk9MDsgaTxkYXRhU2l6ZTsgaSs9MSkgeworICAgICAgZGF0YVtpXSA9IHJldmVyc2VCeXRlQml0cyhwYWNrZXQtPmZpZWxkcy5kYXRhW2ldKTsKKyAgICB9CisKKyAgICB3aGlsZSAoZGF0YVNpemUgPCBhcnJheVNpemUpIHsKKyAgICAgIGRhdGFbZGF0YVNpemUrK10gPSAwOworICAgIH0KKworICAgIGlmICghZW5xdWV1ZVVwZGF0ZWRLZXlHcm91cChicmwsIChhcnJheVNpemUgKiA4KSwgZGF0YSwgYXJyYXksIGtleUdyb3VwKSkgeworICAgICAgcmV0dXJuIDA7CisgICAgfQorICB9CisKKyAgcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQKK2JybF9yZWFkQ29tbWFuZCAoQnJhaWxsZURpc3BsYXkgKmJybCwgS2V5VGFibGVDb21tYW5kQ29udGV4dCBjb250ZXh0KSB7CisgIERQX1BhY2tldCBwYWNrZXQ7CisgIHNpemVfdCBzaXplOworCisgIHdoaWxlICgoc2l6ZSA9IHJlYWRQYWNrZXQoYnJsLCBwYWNrZXQuYnl0ZXMsIHNpemVvZihwYWNrZXQpKSkpIHsKKyAgICBzd2l0Y2ggKGdldFVpbnQxNihwYWNrZXQuZmllbGRzLmNvbW1hbmQpKSB7CisgICAgICBjYXNlIERQX1JTUF9GSVJNV0FSRV9WRVJTSU9OOiB7CisgICAgICAgIHNhdmVGaWVsZCgKKyAgICAgICAgICAmcGFja2V0LCAiRmlybXdhcmUgVmVyc2lvbiIsCisgICAgICAgICAgYnJsLT5kYXRhLT5maXJtd2FyZVZlcnNpb24sCisgICAgICAgICAgc2l6ZW9mKGJybC0+ZGF0YS0+ZmlybXdhcmVWZXJzaW9uKQorICAgICAgICApOworCisgICAgICAgIGFja25vd2xlZGdlQnJhaWxsZU1lc3NhZ2UoYnJsKTsKKyAgICAgICAgY29udGludWU7CisgICAgICB9CisKKyAgICAgIGNhc2UgRFBfUlNQX0RFVklDRV9OQU1FOiB7CisgICAgICAgIHNhdmVGaWVsZCgKKyAgICAgICAgICAmcGFja2V0LCAiRGV2aWNlIE5hbWUiLAorICAgICAgICAgIGJybC0+ZGF0YS0+ZGV2aWNlTmFtZSwKKyAgICAgICAgICBzaXplb2YoYnJsLT5kYXRhLT5kZXZpY2VOYW1lKQorICAgICAgICApOworCisgICAgICAgIGFja25vd2xlZGdlQnJhaWxsZU1lc3NhZ2UoYnJsKTsKKyAgICAgICAgY29udGludWU7CisgICAgICB9CisKKyAgICAgIGNhc2UgRFBfUlNQX0RJU1BMQVlfTElORTogeworICAgICAgICB1bnNpZ25lZCBjaGFyIGNvZGUgPSBwYWNrZXQuZmllbGRzLmRhdGFbMF07CisKKyAgICAgICAgaWYgKGNvZGUgIT0gRFBfRFJDX0FDSykgeworICAgICAgICAgIHJlcG9ydERpc3BsYXlFcnJvcihjb2RlKTsKKyAgICAgICAgICBhY2tub3dsZWRnZUJyYWlsbGVNZXNzYWdlKGJybCk7CisgICAgICAgIH0KKworICAgICAgICBjb250aW51ZTsKKyAgICAgIH0KKworICAgICAgY2FzZSBEUF9OVEZfRElTUExBWV9MSU5FOgorICAgICAgICBhY2tub3dsZWRnZUJyYWlsbGVNZXNzYWdlKGJybCk7CisgICAgICAgIGNvbnRpbnVlOworCisgICAgICBjYXNlIERQX05URl9LRVlTX1NDUk9MTDogeworICAgICAgICB1cGRhdGVLZXlHcm91cCgKKyAgICAgICAgICBicmwsICZwYWNrZXQsIERQX0dSUF9TY3JvbGxLZXlzLAorICAgICAgICAgIGJybC0+ZGF0YS0+a2V5cy5zY3JvbGwsCisgICAgICAgICAgc2l6ZW9mKGJybC0+ZGF0YS0+a2V5cy5zY3JvbGwpCisgICAgICAgICk7CisKKyAgICAgICAgY29udGludWU7CisgICAgICB9CisKKyAgICAgIGNhc2UgRFBfTlRGX0tFWVNfUEVSS0lOUzogeworICAgICAgICB1cGRhdGVLZXlHcm91cCgKKyAgICAgICAgICBicmwsICZwYWNrZXQsIERQX0dSUF9QZXJraW5zS2V5cywKKyAgICAgICAgICBicmwtPmRhdGEtPmtleXMucGVya2lucywKKyAgICAgICAgICBzaXplb2YoYnJsLT5kYXRhLT5rZXlzLnBlcmtpbnMpCisgICAgICAgICk7CisKKyAgICAgICAgY29udGludWU7CisgICAgICB9CisKKyAgICAgIGNhc2UgRFBfTlRGX0tFWVNfUk9VVElORzogeworICAgICAgICB1cGRhdGVLZXlHcm91cCgKKyAgICAgICAgICBicmwsICZwYWNrZXQsIERQX0dSUF9Sb3V0aW5nS2V5cywKKyAgICAgICAgICBicmwtPmRhdGEtPmtleXMucm91dGluZywKKyAgICAgICAgICBzaXplb2YoYnJsLT5kYXRhLT5rZXlzLnJvdXRpbmcpCisgICAgICAgICk7CisKKyAgICAgICAgY29udGludWU7CisgICAgICB9CisKKyAgICAgIGNhc2UgRFBfTlRGX0tFWVNfRlVOQ1RJT046IHsKKyAgICAgICAgdXBkYXRlS2V5R3JvdXAoCisgICAgICAgICAgYnJsLCAmcGFja2V0LCBEUF9HUlBfRnVuY3Rpb25LZXlzLAorICAgICAgICAgIGJybC0+ZGF0YS0+a2V5cy5mdW5jdGlvbiwKKyAgICAgICAgICBzaXplb2YoYnJsLT5kYXRhLT5rZXlzLmZ1bmN0aW9uKQorICAgICAgICApOworCisgICAgICAgIGNvbnRpbnVlOworICAgICAgfQorCisgICAgICBjYXNlIERQX05URl9FUlJPUjogeworICAgICAgICByZXBvcnRSZXF1ZXN0RXJyb3IocGFja2V0LmZpZWxkcy5kYXRhWzBdKTsKKyAgICAgICAgYWNrbm93bGVkZ2VCcmFpbGxlTWVzc2FnZShicmwpOworICAgICAgICBjb250aW51ZTsKKyAgICAgIH0KKworICAgICAgZGVmYXVsdDoKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgbG9nVW5leHBlY3RlZFBhY2tldChwYWNrZXQuYnl0ZXMsIHNpemUpOworICB9CisKKyAgcmV0dXJuIChlcnJubyA9PSBFQUdBSU4pPyBFT0Y6IEJSTF9DTURfUkVTVEFSVEJSTDsKK30KKworc3RhdGljIGNvbnN0IEtleU5hbWVFbnRyeSAqKgorbWFrZUtleU5hbWVUYWJsZSAoQnJhaWxsZURpc3BsYXkgKmJybCkgeworICB0eXBlZGVmIHN0cnVjdCB7CisgICAgY29uc3QgY2hhciAqdHlwZTsKKyAgICBjb25zdCBLZXlOYW1lRW50cnkgKmtleU5hbWVzOworICAgIHVuc2lnbmVkIGNoYXIgZmVhdHVyZUJpdDsKKyAgfSBPcHRpb25hbEtleXNEZXNjcmlwdG9yOworCisgIHN0YXRpYyBjb25zdCBPcHRpb25hbEtleXNEZXNjcmlwdG9yIG9wdGlvbmFsS2V5c1RhYmxlW10gPSB7CisgICAgeyAudHlwZSA9ICJzY3JvbGwiLAorICAgICAgLmtleU5hbWVzID0gS0VZX05BTUVfVEFCTEUoc2Nyb2xsKSwKKyAgICAgIC8vIG5vdCBhY3R1YWxseSB1c2VkCisgICAgfSwKKworICAgIHsgLnR5cGUgPSAia2V5Ym9hcmQiLAorICAgICAgLmtleU5hbWVzID0gS0VZX05BTUVfVEFCTEUoa2V5Ym9hcmQpLAorICAgICAgLmZlYXR1cmVCaXQgPSBEUF9IQVNfUEVSS0lOU19LRVlTLAorICAgIH0sCisKKyAgICB7IC50eXBlID0gInBhbm5pbmciLAorICAgICAgLmtleU5hbWVzID0gS0VZX05BTUVfVEFCTEUocGFubmluZyksCisgICAgICAuZmVhdHVyZUJpdCA9IERQX0hBU19QQU5OSU5HX0tFWVMsCisgICAgfSwKKworICAgIHsgLnR5cGUgPSAibmF2aWdhdGlvbiIsCisgICAgICAua2V5TmFtZXMgPSBLRVlfTkFNRV9UQUJMRShuYXZpZ2F0aW9uKSwKKyAgICAgIC5mZWF0dXJlQml0ID0gRFBfSEFTX05BVklHQVRJT05fS0VZUywKKyAgICB9LAorCisgICAgeyAudHlwZSA9ICJyb3V0aW5nIiwKKyAgICAgIC5rZXlOYW1lcyA9IEtFWV9OQU1FX1RBQkxFKHJvdXRpbmcpLAorICAgICAgLmZlYXR1cmVCaXQgPSBEUF9IQVNfUk9VVElOR19LRVlTLAorICAgIH0sCisKKyAgICB7IC50eXBlID0gImZ1bmN0aW9uIiwKKyAgICAgIC5rZXlOYW1lcyA9IEtFWV9OQU1FX1RBQkxFKGZ1bmN0aW9uKSwKKyAgICAgIC5mZWF0dXJlQml0ID0gRFBfSEFTX0ZVTkNUSU9OX0tFWVMsCisgICAgfSwKKyAgfTsKKworICBjb25zdCBLZXlOYW1lRW50cnkgKipuYW1lcyA9IGJybC0+ZGF0YS0+a2V5TmFtZVRhYmxlOworICBjb25zdCBPcHRpb25hbEtleXNEZXNjcmlwdG9yICpva2QgPSBvcHRpb25hbEtleXNUYWJsZTsKKyAgY29uc3QgT3B0aW9uYWxLZXlzRGVzY3JpcHRvciAqZW5kID0gb2tkICsgQVJSQVlfQ09VTlQob3B0aW9uYWxLZXlzVGFibGUpOworCisgIHdoaWxlIChva2QgPCBlbmQpIHsKKyAgICBpZiAoYnJsLT5kYXRhLT5ib2FyZEluZm9ybWF0aW9uLmZlYXR1cmVzICYgb2tkLT5mZWF0dXJlQml0KSB7CisgICAgICBjaGFyIGxvZ1swWDQwXTsKKyAgICAgIFNUUl9CRUdJTihsb2csIHNpemVvZihsb2cpKTsKKyAgICAgIFNUUl9QUklOVEYoImhhcyIpOworCisgICAgICBpZiAob2tkLT5mZWF0dXJlQml0ID09IERQX0hBU19GVU5DVElPTl9LRVlTKSB7CisgICAgICAgIFNUUl9QUklOVEYoIiAldSIsIGJybC0+ZGF0YS0+Ym9hcmRJbmZvcm1hdGlvbi5mdW5jdGlvbktleUNvdW50KTsKKyAgICAgIH0KKworICAgICAgU1RSX1BSSU5URigiICVzIGtleXMiLCBva2QtPnR5cGUpOworICAgICAgU1RSX0VORDsKKyAgICAgIGxvZ01lc3NhZ2UoTE9HX0NBVEVHT1JZKEJSQUlMTEVfRFJJVkVSKSwgIiVzIiwgbG9nKTsKKworICAgICAgKm5hbWVzKysgPSBva2QtPmtleU5hbWVzOworICAgIH0KKworICAgIG9rZCArPSAxOworICB9CisKKyAgKm5hbWVzID0gTEFTVF9LRVlfTkFNRV9UQUJMRTsKKyAgcmV0dXJuIGJybC0+ZGF0YS0+a2V5TmFtZVRhYmxlOworfQorCitzdGF0aWMgdm9pZAorc2V0S2V5VGFibGUgKEJyYWlsbGVEaXNwbGF5ICpicmwpIHsKKyAgY29uc3QgS2V5VGFibGVEZWZpbml0aW9uICprdGQgPSAmS0VZX1RBQkxFX0RFRklOSVRJT04oYWxsKTsKKyAgYnJsLT5rZXlCaW5kaW5ncyA9IGt0ZC0+YmluZGluZ3M7CisgIGJybC0+a2V5TmFtZXMgPSBtYWtlS2V5TmFtZVRhYmxlKGJybCk7Cit9CisKK3N0YXRpYyBpbnQKK2Nvbm5lY3RSZXNvdXJjZSAoQnJhaWxsZURpc3BsYXkgKmJybCwgY29uc3QgY2hhciAqaWRlbnRpZmllcikgeworICBzdGF0aWMgY29uc3QgU2VyaWFsUGFyYW1ldGVycyBzZXJpYWxQYXJhbWV0ZXJzID0geworICAgIFNFUklBTF9ERUZBVUxUX1BBUkFNRVRFUlMsCisgICAgLmJhdWQgPSAxMTUyMDAsCisgIH07CisKKyAgQkVHSU5fVVNCX0NIQU5ORUxfREVGSU5JVElPTlMKKyAgICB7IC8qIGFsbCBtb2RlbHMgKi8KKyAgICAgIC52ZW5kb3I9MFgwNDAzLCAucHJvZHVjdD0wWDYwMTAsCisgICAgICAuY29uZmlndXJhdGlvbj0xLCAuaW50ZXJmYWNlPTAsIC5hbHRlcm5hdGl2ZT0wLAorICAgICAgLmlucHV0RW5kcG9pbnQ9MSwgLm91dHB1dEVuZHBvaW50PTIsCisgICAgICAuc2VyaWFsPSZzZXJpYWxQYXJhbWV0ZXJzCisgICAgfSwKKyAgRU5EX1VTQl9DSEFOTkVMX0RFRklOSVRJT05TCisKKyAgR2lvRGVzY3JpcHRvciBkZXNjcmlwdG9yOworICBnaW9Jbml0aWFsaXplRGVzY3JpcHRvcigmZGVzY3JpcHRvcik7CisKKyAgZGVzY3JpcHRvci5zZXJpYWwucGFyYW1ldGVycyA9ICZzZXJpYWxQYXJhbWV0ZXJzOworCisgIGRlc2NyaXB0b3IudXNiLmNoYW5uZWxEZWZpbml0aW9ucyA9IHVzYkNoYW5uZWxEZWZpbml0aW9uczsKKy8vZGVzY3JpcHRvci51c2Iub3B0aW9ucy5yZWFkeURlbGF5ID0gMzAwMDsKKworICBpZiAoY29ubmVjdEJyYWlsbGVSZXNvdXJjZShicmwsIGlkZW50aWZpZXIsICZkZXNjcmlwdG9yLCBOVUxMKSkgeworICAgIHJldHVybiAxOworICB9CisKKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK3dyaXRlSWRlbnRpZnlSZXF1ZXN0IChCcmFpbGxlRGlzcGxheSAqYnJsKSB7CisgIHJldHVybiB3cml0ZVJlcXVlc3QoYnJsLCBEUF9SRVFfQk9BUkRfSU5GT1JNQVRJT04sIDAsIE5VTEwsIDApOworfQorCitzdGF0aWMgQnJhaWxsZVJlc3BvbnNlUmVzdWx0Citpc0lkZW50aXR5UmVzcG9uc2UgKEJyYWlsbGVEaXNwbGF5ICpicmwsIGNvbnN0IHZvaWQgKnBhY2tldCwgc2l6ZV90IHNpemUpIHsKKyAgY29uc3QgRFBfUGFja2V0ICpyZXNwb25zZSA9IHBhY2tldDsKKworICBpZiAoZ2V0VWludDE2KHJlc3BvbnNlLT5maWVsZHMuY29tbWFuZCkgIT0gRFBfUlNQX0JPQVJEX0lORk9STUFUSU9OKSB7CisgICAgcmV0dXJuIEJSTF9SU1BfVU5FWFBFQ1RFRDsKKyAgfQorCisgIG1lbWNweSgKKyAgICAmYnJsLT5kYXRhLT5ib2FyZEluZm9ybWF0aW9uLCByZXNwb25zZS0+ZmllbGRzLmRhdGEsCisgICAgc2l6ZW9mKGJybC0+ZGF0YS0+Ym9hcmRJbmZvcm1hdGlvbikKKyAgKTsKKworICB7CisgICAgRFBfQm9hcmRJbmZvcm1hdGlvbiAqaW5mbyA9ICZicmwtPmRhdGEtPmJvYXJkSW5mb3JtYXRpb247CisKKyAgICBpZiAoaW5mby0+ZmVhdHVyZXMgJiBEUF9IQVNfRlVOQ1RJT05fS0VZUykgeworICAgICAgaWYgKCFpbmZvLT5mdW5jdGlvbktleUNvdW50KSB7CisgICAgICAgIGluZm8tPmZ1bmN0aW9uS2V5Q291bnQgPSA0OworICAgICAgfQorICAgIH0KKyAgfQorCisgIGxvZ0J5dGVzKExPR19DQVRFR09SWShCUkFJTExFX0RSSVZFUiksCisgICAgIkJvYXJkIEluZm9ybWF0aW9uIiwKKyAgICAmYnJsLT5kYXRhLT5ib2FyZEluZm9ybWF0aW9uLAorICAgIHNpemVvZihicmwtPmRhdGEtPmJvYXJkSW5mb3JtYXRpb24pCisgICk7CisKKyAgYWNrbm93bGVkZ2VCcmFpbGxlTWVzc2FnZShicmwpOworICByZXR1cm4gQlJMX1JTUF9ET05FOworfQorCitzdGF0aWMgaW50CiticmxfY29uc3RydWN0IChCcmFpbGxlRGlzcGxheSAqYnJsLCBjaGFyICoqcGFyYW1ldGVycywgY29uc3QgY2hhciAqZGV2aWNlKSB7CisgIGlmICgoYnJsLT5kYXRhID0gbWFsbG9jKHNpemVvZigqYnJsLT5kYXRhKSkpKSB7CisgICAgbWVtc2V0KGJybC0+ZGF0YSwgMCwgc2l6ZW9mKCpicmwtPmRhdGEpKTsKKworICAgIGlmIChjb25uZWN0UmVzb3VyY2UoYnJsLCBkZXZpY2UpKSB7CisgICAgICBEUF9QYWNrZXQgcmVzcG9uc2U7CisKKyAgICAgIGludCBwcm9iZWQgPSBwcm9iZUJyYWlsbGVEaXNwbGF5KAorICAgICAgICBicmwsIFBST0JFX1JFVFJZX0xJTUlULCBOVUxMLCBQUk9CRV9JTlBVVF9USU1FT1VULAorICAgICAgICB3cml0ZUlkZW50aWZ5UmVxdWVzdCwgcmVhZFBhY2tldCwKKyAgICAgICAgJnJlc3BvbnNlLCBzaXplb2YocmVzcG9uc2UpLAorICAgICAgICBpc0lkZW50aXR5UmVzcG9uc2UKKyAgICAgICk7CisKKyAgICAgIGlmIChwcm9iZWQpIHsKKyAgICAgICAgaWYgKHByb2Nlc3NQYXJhbWV0ZXJzKGJybCwgcGFyYW1ldGVycykpIHsKKyAgICAgICAgICBpZiAobWFrZUFycmF5cyhicmwpKSB7CisgICAgICAgICAgICBicmwtPmFja25vd2xlZGdlbWVudHMubWlzc2luZy50aW1lb3V0ID0gKGJybC0+ZGF0YS0+ZGlzcGxheS5yZWZyZXNoVGltZSAqIDEwMCkgKyAxMDAwOworCisgICAgICAgICAgICBpZiAod3JpdGVSZXF1ZXN0KGJybCwgRFBfUkVRX0ZJUk1XQVJFX1ZFUlNJT04sIDAsIE5VTEwsIDApKSB7CisgICAgICAgICAgICAgIGlmICh3cml0ZVJlcXVlc3QoYnJsLCBEUF9SRVFfREVWSUNFX05BTUUsIDAsIE5VTEwsIDApKSB7CisgICAgICAgICAgICAgICAgc2V0S2V5VGFibGUoYnJsKTsKKworICAgICAgICAgICAgICAgIE1BS0VfT1VUUFVUX1RBQkxFKAorICAgICAgICAgICAgICAgICAgRFBfRFNQX0RPVDEsIERQX0RTUF9ET1QyLCBEUF9EU1BfRE9UMywgRFBfRFNQX0RPVDQsCisgICAgICAgICAgICAgICAgICBEUF9EU1BfRE9UNSwgRFBfRFNQX0RPVDYsIERQX0RTUF9ET1Q3LCBEUF9EU1BfRE9UOAorICAgICAgICAgICAgICAgICk7CisKKyAgICAgICAgICAgICAgICBicmwtPnJlZnJlc2hCcmFpbGxlRGlzcGxheSA9IHJlZnJlc2hDZWxsczsKKyAgICAgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBkZWFsbG9jYXRlQXJyYXlzKGJybCk7CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICB9CisKKyAgICAgIGRpc2Nvbm5lY3RCcmFpbGxlUmVzb3VyY2UoYnJsLCBOVUxMKTsKKyAgICB9CisKKyAgICBmcmVlKGJybC0+ZGF0YSk7CisgIH0gZWxzZSB7CisgICAgbG9nTWFsbG9jRXJyb3IoKTsKKyAgfQorCisgIHJldHVybiAwOworfQorCitzdGF0aWMgdm9pZAorYnJsX2Rlc3RydWN0IChCcmFpbGxlRGlzcGxheSAqYnJsKSB7CisgIGVuZEJyYWlsbGVNZXNzYWdlcyhicmwpOworICBkaXNjb25uZWN0QnJhaWxsZVJlc291cmNlKGJybCwgTlVMTCk7CisKKyAgZGVhbGxvY2F0ZUFycmF5cyhicmwpOworICBmcmVlKGJybC0+ZGF0YSk7Cit9CmRpZmYgLS1naXQgYS9Ecml2ZXJzL0JyYWlsbGUvRG90UGFkL2JybGRlZnMtZHAuaCBiL0RyaXZlcnMvQnJhaWxsZS9Eb3RQYWQvYnJsZGVmcy1kcC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFjMGU5MzUKLS0tIC9kZXYvbnVsbAorKysgYi9Ecml2ZXJzL0JyYWlsbGUvRG90UGFkL2JybGRlZnMtZHAuaApAQCAtMCwwICsxLDE3MiBAQAorLyoKKyAqIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisgKiAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisgKgorICogQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKKyNpZm5kZWYgQlJMVFRZX0lOQ0xVREVEX0RQX0JSTERFRlMKKyNkZWZpbmUgQlJMVFRZX0lOQ0xVREVEX0RQX0JSTERFRlMKKworI2RlZmluZSBEUF9NQVhJTVVNX1RFWFRfQ09MVU1OUyA4MAorCit0eXBlZGVmIGVudW0geworICBEUF9SRVFfRklSTVdBUkVfVkVSU0lPTiA9IDBYMDAwMCwKKyAgRFBfUlNQX0ZJUk1XQVJFX1ZFUlNJT04gPSAwWDAwMDEsCisKKyAgRFBfUkVRX0RFVklDRV9OQU1FID0gMFgwMTAwLAorICBEUF9SU1BfREVWSUNFX05BTUUgPSAwWDAxMDEsCisKKyAgRFBfUkVRX0JPQVJEX0lORk9STUFUSU9OID0gMFgwMTEwLAorICBEUF9SU1BfQk9BUkRfSU5GT1JNQVRJT04gPSAwWDAxMTEsCisKKyAgRFBfUkVRX0RJU1BMQVlfTElORSA9IDBYMDIwMCwKKyAgRFBfUlNQX0RJU1BMQVlfTElORSA9IDBYMDIwMSwKKyAgRFBfTlRGX0RJU1BMQVlfTElORSA9IDBYMDIwMiwKKworICBEUF9SRVFfRElTUExBWV9DVVJTT1IgPSAwWDAyMTAsCisgIERQX1JTUF9ESVNQTEFZX0NVUlNPUiA9IDBYMDIxMSwKKyAgRFBfTlRGX0RJU1BMQVlfQ1VSU09SID0gMFgwMjEyLAorCisgIERQX05URl9LRVlTX1NDUk9MTCA9IDBYMDMwMiwKKyAgRFBfTlRGX0tFWVNfUEVSS0lOUyA9IDBYMDMxMiwKKyAgRFBfTlRGX0tFWVNfUk9VVElORyA9IDBYMDMyMiwKKyAgRFBfTlRGX0tFWVNfRlVOQ1RJT04gPSAwWDAzMzIsCisKKyAgRFBfTlRGX0VSUk9SID0gMFg5OTAyLAorfSBEUF9Db21tYW5kOworCit0eXBlZGVmIGVudW0geworICBEUF9IQVNfR1JBUEhJQ19ESVNQTEFZID0gMFg4MCwKKyAgRFBfSEFTX1RFWFRfRElTUExBWSA9IDBYNDAsCisgIERQX0hBU19QRVJLSU5TX0tFWVMgPSAwWDIwLAorICBEUF9IQVNfUk9VVElOR19LRVlTID0gMFgxMCwKKyAgRFBfSEFTX05BVklHQVRJT05fS0VZUyA9IDBYMDgsCisgIERQX0hBU19QQU5OSU5HX0tFWVMgPSAwWDA0LAorICBEUF9IQVNfRlVOQ1RJT05fS0VZUyA9IDBYMDIsCit9IERQX0ZlYXR1cmVzOworCit0eXBlZGVmIGVudW0geworICBEUF9EUENfNiA9IDAsCisgIERQX0RQQ184ID0gMSwKK30gRFBfRG90c1BlckNlbGw7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgdW5zaWduZWQgY2hhciByb3dDb3VudDsgICAgIC8vIDEsIDIKKyAgdW5zaWduZWQgY2hhciBjb2x1bW5Db3VudDsgIC8vIDEyLCAxNCwgMTUsIDE2LCAyMCwgMjQsIDI2LCAyOCwgMzAsIDMyLCAzNiwgNDAKKyAgdW5zaWduZWQgY2hhciBkaXZpZGVkTGluZTsKKyAgdW5zaWduZWQgY2hhciByZWZyZXNoVGltZTsgIC8vIDEwMG1zCit9IERQX0Rpc3BsYXlEZXNjcmlwdG9yOworCit0eXBlZGVmIHN0cnVjdCB7CisgIHVuc2lnbmVkIGNoYXIgZmVhdHVyZXM7CisgIHVuc2lnbmVkIGNoYXIgZG90c1BlckNlbGw7ICAgICAgICAgIC8vIDA6NiwgMTo4CisgIHVuc2lnbmVkIGNoYXIgZGlzdGFuY2VCZXR3ZWVuUGluczsgIC8vIDAuMW1tCisgIHVuc2lnbmVkIGNoYXIgZnVuY3Rpb25LZXlDb3VudDsKKworICBEUF9EaXNwbGF5RGVzY3JpcHRvciB0ZXh0OworICBEUF9EaXNwbGF5RGVzY3JpcHRvciBncmFwaGljOworfSBEUF9Cb2FyZEluZm9ybWF0aW9uOworCit0eXBlZGVmIGVudW0geworICBEUF9EU1BfRE9UMSA9IDBYMDEsCisgIERQX0RTUF9ET1QyID0gMFgwMiwKKyAgRFBfRFNQX0RPVDMgPSAwWDA0LAorICBEUF9EU1BfRE9UNCA9IDBYMTAsCisgIERQX0RTUF9ET1Q1ID0gMFgyMCwKKyAgRFBfRFNQX0RPVDYgPSAwWDQwLAorICBEUF9EU1BfRE9UNyA9IDBYMDgsCisgIERQX0RTUF9ET1Q4ID0gMFg4MCwKK30gRFBfRGlzcGxheURvdHM7CisKK3R5cGVkZWYgZW51bSB7CisgIERQX0RSQ19BQ0sgPSAwLAorICBEUF9EUkNfTkFDSyA9IDEsCisgIERQX0RSQ19XQUlUID0gMiwKKyAgRFBfRFJDX0NIRUNLU1VNID0gMywKK30gRFBfRGlzcGxheVJlc3BvbnNlQ29kZTsKKwordHlwZWRlZiBlbnVtIHsKKyAgRFBfU0NMX0xFRlRfTkVYVCA9IDI4LAorICBEUF9TQ0xfTEVGVF9QUkVWID0gMjksCisgIERQX1NDTF9SSUdIVF9ORVhUID0gMzAsCisgIERQX1NDTF9SSUdIVF9QUkVWID0gMzEsCit9IERQX1Njcm9sbEtleTsKKwordHlwZWRlZiBlbnVtIHsKKyAgRFBfS0JEX0RPVDcgPSAwLAorICBEUF9LQkRfRE9UMyA9IDEsCisgIERQX0tCRF9ET1QyID0gMiwKKyAgRFBfS0JEX0RPVDEgPSAzLAorICBEUF9LQkRfRE9UNCA9IDQsCisgIERQX0tCRF9ET1Q1ID0gNSwKKyAgRFBfS0JEX0RPVDYgPSA2LAorICBEUF9LQkRfRE9UOCA9IDcsCisKKyAgRFBfS0JEX1NQQUNFID0gOCwKKyAgRFBfS0JEX1NISUZUX0xFRlQgPSA5LAorICBEUF9LQkRfQ09OVFJPTF9MRUZUID0gMTAsCisgIERQX0tCRF9TSElGVF9SSUdIVCA9IDExLAorICBEUF9LQkRfQ09OVFJPTF9SSUdIVCA9IDEyLAorICBEUF9QQU5fTEVGVCA9IDEzLAorICBEUF9QQU5fUklHSFQgPSAxNCwKKworICBEUF9OQVZfQ0VOVEVSID0gMTYsCisgIERQX05BVl9VUCA9IDE3LAorICBEUF9OQVZfUklHSFQgPSAxOCwKKyAgRFBfTkFWX0RPV04gPSAxOSwKKyAgRFBfTkFWX0xFRlQgPSAyMCwKK30gRFBfUGVya2luc0tleTsKKwordHlwZWRlZiBlbnVtIHsKKyAgRFBfR1JQX1Njcm9sbEtleXMsCisgIERQX0dSUF9QZXJraW5zS2V5cywKKyAgRFBfR1JQX0Z1bmN0aW9uS2V5cywKKyAgRFBfR1JQX1JvdXRpbmdLZXlzLAorfSBEUF9LZXlHcm91cDsKKwordHlwZWRlZiBlbnVtIHsKKyAgRFBfRVJSX0xFTkdUSCA9IDEsCisgIERQX0VSUl9DT01NQU5EID0gMiwKKyAgRFBfRVJSX0NIRUNLU1VNID0gMywKKyAgRFBfRVJSX1BBUkFNRVRFUiA9IDQsCisgIERQX0VSUl9USU1FT1VUID0gNSwKK30gRFBfRXJyb3JDb2RlOworCit0eXBlZGVmIGVudW0geworICBEUF9QU0JfU1lOQzEgPSAwWEFBLAorICBEUF9QU0JfU1lOQzIgPSAwWDU1LAorfSBEUF9QYWNrZXRTeW5jQnl0ZTsKKwordHlwZWRlZiBlbnVtIHsKKyAgRFBfU0VRX1RFWFQgPSAwWDgwLAorfSBEUF9QYWNrZXRTZXFGbGFnOworCit0eXBlZGVmIHN0cnVjdCB7CisgIHVuc2lnbmVkIGNoYXIgc3luY1syXTsKKyAgdW5zaWduZWQgY2hhciBsZW5ndGhbMl07ICAvLyBiaWcgZW5kaWFuCisgIHVuc2lnbmVkIGNoYXIgZGVzdGluYXRpb247CisgIHVuc2lnbmVkIGNoYXIgY29tbWFuZFsyXTsgIC8vIGJpZyBlbmRpYW4KKyAgdW5zaWduZWQgY2hhciBzZXE7CisKKyAgdW5zaWduZWQgY2hhciBkYXRhW0RQX01BWElNVU1fVEVYVF9DT0xVTU5TICsgMV07CisgIC8vIGluY2x1ZGVzIG9uZS1ieXRlIHRyYWlsaW5nIGNoZWNrc3VtCit9IERQX1BhY2tldEZpZWxkczsKKwordHlwZWRlZiB1bmlvbiB7CisgIHVuc2lnbmVkIGNoYXIgYnl0ZXNbc2l6ZW9mKERQX1BhY2tldEZpZWxkcyldOworICBEUF9QYWNrZXRGaWVsZHMgZmllbGRzOworfSBEUF9QYWNrZXQ7CisKKyNlbmRpZiAvKiBCUkxUVFlfSU5DTFVERURfRFBfQlJMREVGUyAqLwpkaWZmIC0tZ2l0IGEvRHJpdmVycy9CcmFpbGxlL0Vjb0JyYWlsbGUvTEVFTUUgYi9Ecml2ZXJzL0JyYWlsbGUvRWNvQnJhaWxsZS9MRUVNRQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MWE3YTZmCi0tLSAvZGV2L251bGwKKysrIGIvRHJpdmVycy9CcmFpbGxlL0Vjb0JyYWlsbGUvTEVFTUUKQEAgLTAsMCArMSw0OSBAQAorRmljaGVybyBsZWVtZSBkZWwgZHJpdmVyIHBhcmEgbGEgRWNvQnJhaWxsZQorCitWZXJzaW9uIDEuMDEgKDEgZGUgTWFyem8gZGUgMjAwMCkKKworCitMaWNlbmNpYQorPT09PT09PT0KKworRXN0ZSBzb2Z0d2FyZSBlcyBncmF0dWl0by4KK0VzdGUgZHJpdmVyIHNlIGRpc3RyYnV5ZSBiYWpvIGxhIExpY2VuY2lhIFDDumJsaWNhIEdlbmVyYWwgUmVkdWNpZGEgZGUgR05VLgorTGVhc2UgZWwgZmljaGVybyAnTElDRU5TRS1MR1BMJyBwYXJhIG1hcyBkZXRhbGxlcyBkZSBsYSBsaWNlbmNpYS4KK01hbmRlbWUgc3VzIGNvbWVudGFyaW9zIG8gZXJyb3JlcyBlbmNvbnRyYWRvcyBhbCBlLW1haWwgb2ZhQG9uY2UuZXMKK3B1ZWRlIGhhY2VybG8gZW4gY2FzdGVsbGFubywgY2F0YWxhbiBvIGVuIGluZ2xlcy4KKworUHVlZGUgY29nZXIgbGEgdWx0aW1hIHZlcnNpb24gZW4gZnRwOi8vZnRwLm9uY2UuZXMvcHViL2FjY2Vzc2liaWxpdHkKKworCitIYXJkd2FyZSBzb3BvcnRhZG8KKz09PT09PT09PT09PT09PT09PQorCitFc3RlIGRyaXZlciB0cmFiYWphIGNvbiB0b2RvcyBsb3MgbW9kZWxvcyBkZSBsaW5lYXMgYnJhaWxsZSBFY29CcmFpbGxlLAoraW5jbHVpZG8gbGEgRWNvMjAsIEVjbzQwIHkgRWNvODAuCisKK1NpIG5lY2VzaXRhIGluZm9ybWFjaW9uIGRlIGxvcyBwcm9kdWN0byBFY29CcmFpbGxlLCB2aXNpdGUgbGEgcGFnaW5hIFdlYgoraHR0cDovL3d3dy5vbmNlLmVzLworCisKK0NvbmZpZ3VyYWNpb24gZGUgcHVlcnRvcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitFbiBlbCBmaWNoZXJvICdNYWtlZmlsZScgbG9jYWxpemFkbyBlbiBlbCBkaXJlY3RvcmlvIEJSTFRUWSwgc2UgZGlzcG9uZSBkZSAKK3VuYSBsaW5lYSBlbiBkb25kZSBzZSBwdWVkZSBkZWZpbmlyIGVsIHB1ZXJ0byBzZXJpZSB1dGlsaXphZG8uIFBvciBlamVtcGxvOworL2Rldi90dHlTMC4gIExhIHZlbG9jaWRhZCBkZSBjb25leGlvbiB2aWVuZSBkZWZpbmlkYSBlbiBlbCBmaWNoZXJvIGJyYWlsbGUuaAorCitQb3IgZGVmZWN0bywgbGEgbGluZWEgRWNvQnJhaWxsZSBzZSBjb211bmljYSBhIDE5MjAwIGJhdWRpb3MuCisKKworRWplY3V0YXIgZWwgZHJpdmVyCis9PT09PT09PT09PT09PT09PT0KKworUGFyYSBjb21waWxhciB5IGVqZWN1dGFyIGVsIHByb2dyYW1hIEJSTFRUWSwgbGVhc2UgbGEgZG9jdW1lbnRhY2lvbiBkZWwKK21pc21vLiAKKworRGViZSBlamVjdXRhciBlbCBwcm9ncmFtYSBCUkxUVFkgY29uIGxhIGxpbmVhIEVjb0JyYWlsbGUgY29uZWN0YWRhIGFsIAorcHVlcnRvIHNlcmllIHkgZW5jZW5kaWRhLgorCisKK09zY2FyIEZlcm5hbmRlegorb2ZhQG9uY2UuZXMKK0phbnVhcnksMjkgMTk5OQpkaWZmIC0tZ2l0IGEvRHJpdmVycy9CcmFpbGxlL0Vjb0JyYWlsbGUvTWFrZWZpbGUuaW4gYi9Ecml2ZXJzL0JyYWlsbGUvRWNvQnJhaWxsZS9NYWtlZmlsZS5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OWQ3ZDgwCi0tLSAvZGV2L251bGwKKysrIGIvRHJpdmVycy9CcmFpbGxlL0Vjb0JyYWlsbGUvTWFrZWZpbGUuaW4KQEAgLTAsMCArMSwyOCBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorIyAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyMKKyMgQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorIworIyBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorIworIyBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisjIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyMgbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisjCisjIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK0RSSVZFUl9DT0RFID0gZWMKK0RSSVZFUl9OQU1FID0gRWNvQnJhaWxsZQorRFJJVkVSX1VTQUdFID0gMjAvNDAvODAKK0RSSVZFUl9WRVJTSU9OID0gMS4wMAorRFJJVkVSX0RFVkVMT1BFUlMgPSBPc2NhciBGZXJuYW5kZXogPG9mYUBvbmNlLmVzPgoraW5jbHVkZSAkKFNSQ19UT1ApYnJhaWxsZS5taworCiticmFpbGxlLiRPOgorCSQoQ0MpICQoQlJMX0NGTEFHUykgLWMgJChTUkNfRElSKS9icmFpbGxlLmMKKwpkaWZmIC0tZ2l0IGEvRHJpdmVycy9CcmFpbGxlL0Vjb0JyYWlsbGUvUkVBRE1FIGIvRHJpdmVycy9CcmFpbGxlL0Vjb0JyYWlsbGUvUkVBRE1FCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ5ZTk0MjkKLS0tIC9kZXYvbnVsbAorKysgYi9Ecml2ZXJzL0JyYWlsbGUvRWNvQnJhaWxsZS9SRUFETUUKQEAgLTAsMCArMSw1NCBAQAorUkVBRE1FIGZpbGUgZm9yIHRoZSBFY29CcmFpbGxlIGRyaXZlcgorCitWZXJzaW9uIDEuMDEgKE1hcmNoIDEsIDIwMDApCisKKworQ29weXJpZ2h0Cis9PT09PT09PT0KKworVGhpcyBkcml2ZXIgaXMgY29weXJpZ2h0ZWQgdW5kZXIgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KK0l0IGlzIGZyZWUgc29mdHdhcmUuICBTZWUgdGhlIGZpbGUgJ0xJQ0VOU0UtTEdQTCcgZm9yIG1vcmUgZGV0YWlscy4KK0ZlZWwgZnJlZSB0byBzZW5kIHlvdXIgY29tbWVudHMgYW5kIHRvIHJlcG9ydCBidWdzIHRvIG1lIGF0IG9mYUBvbmNlLmVzCisKK0NhbiB5b3Ugd3JpdGUgbWUgaW4gU3BhbmlzaCwgY2F0YWxvbmlhbiBvciBlbmdsaXNoLgorCitDYW4gZ2V0IHRoZSBsYXRlc3QgdmVyc2lvbiBpbiBmdHA6Ly9mdHAub25jZS5lcy9wdWIvYWNjZXNzaWJpbGl0eQorCisKK1N1cHBvcnRlZCBIYXJkd2FyZQorPT09PT09PT09PT09PT09PT09CisKK1RoaXMgZHJpdmVyIGlzIHN1cHBvc2VkIHRvIHdvcmsgd2l0aCBhbnkgc3BhbmlzaCBFQ08gYnJhaWxsZSBkaXNwbGF5IGZyb20gdGhlIAorRUNPIHh4IHNlcmllcywgaW5jbHVkaW5nIHRoZSBFQ08gMjAsIHRoZSBFQ08gNDAgYW5kIHRoZSBFQ08gODAuCisKK0lmIHlvdSB3YW50IGFueSBpbmZvcm1hdGlvbiBhYm91dCBFQ08gYW5kIGl0cyBwcm9kdWN0cywgeW91IGNhbiBsb29rCithdCBodHRwOi8vd3d3Lm9uY2UuZXMvLgorCitQb3J0IFNldHRpbmdzCistLS0tLS0tLS0tLS0tCitJbiB0aGUgZmlsZSAnTWFrZWZpbGUnIGxvY2F0ZWQgaW4gdGhlIEJSTFRUWSBob21lIGRpcmVjdG9yeSwgdGhlcmUgaXMgYSAKK2xpbmUgd2hlcmUgeW91IGNhbiBkZWZpbmUgdGhlIGRlZmF1bHQgKGkuZS4gd2hlbiBub3QgZ2l2ZW4gb24gdGhlIGNvbW1hbmQgCitsaW5lKSBzZXJpYWwgcG9ydCBkZXZpY2UgKHN1Y2ggYXMgL2Rldi90dHlTMCkuICBUaGUgYmF1ZHJhdGUgc2V0dXAgaXMgCitob3dldmVyIGRlZmluZWQgaW4gdGhlIGJyYWlsbGUuaCBmaWxlLgorCitCeSBkZWZhdWx0LCB0aGUgRUNPIGNvbW11bmljYXRlcyBhdCAxOTIwMCBCYXVkLiAKKworCitSdW5uaW5nIHRoZSBEcml2ZXIKKz09PT09PT09PT09PT09PT09PQorCitUbyBjb21waWxlIGFuZCBydW4gQlJMVFRZLCBwbGVhc2UgcmVmZXIgdG8gdGhlIGRvY3VtZW50YXRpb24gYWJvdXQgCitCUkxUVFkgaXRzZWxmLiAgT25lIG5vdGUgdGhvdWdoOiB3aGVuIEJSTFRUWSBzdGFydHMsIGl0IHdpbGwgZGlzcGxheSAKK29uIHRoZSBzY3JlZW4gc29tZSBjb3B5cmlnaHQgc3R1ZmYsIGN1cnJlbnQgY29uZmlndXJhdGlvbiAobW9kZWwgYW5kIAorZmlybXdhcmUgdmVyc2lvbiBzZXR1cCkgYW5kIHRoZSBzZXJpYWwgZGV2aWNlIGluIHVzZS4gIFRoYXQgaW5mb3JtYXRpb24gCittYXkgYmUgdXNlZnVsIGlmIG5vdGhpbmcgaGFwcGVucyB3aXRoIHRoZSBicmFpbGxlIHRlcm1pbmFsLgorCitZb3UgbWF5IHJ1biBCUkxUVFkgZXZlbiBpZiBubyBFQ08gaXMgcGx1Z2dlZCB0byB0aGUgYXBwcm9wcmlhdGUgc2VyaWFsCitwb3J0LiAgQlJMVFRZIHdpbGwgd2FpdCBmb3IgaXQuCisKK1lvdSBuZWVkIHBvd2VyIG9uIHRoZSBlY28gYnJhaWxsZSBsaW5lIGJlZm9yZSB0byB1c2UuCisKKworT3NjYXIgRmVybmFuZGV6CitvZmFAb25jZS5lcworSmFudWFyeSwyOSAxOTk5CmRpZmYgLS1naXQgYS9Ecml2ZXJzL0JyYWlsbGUvRWNvQnJhaWxsZS9icmFpbGxlLmMgYi9Ecml2ZXJzL0JyYWlsbGUvRWNvQnJhaWxsZS9icmFpbGxlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTFmNGFmMwotLS0gL2Rldi9udWxsCisrKyBiL0RyaXZlcnMvQnJhaWxsZS9FY29CcmFpbGxlL2JyYWlsbGUuYwpAQCAtMCwwICsxLDQzNiBAQAorLyoKKyAqIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisgKiAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisgKgorICogQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKKy8qIEVjb0JyYWlsbGUvYnJhaWxsZS5jIC0gQnJhaWxsZSBkaXNwbGF5IGxpYnJhcnkgZm9yIEVDTyBCcmFpbGxlIHNlcmllcworICogQ29weXJpZ2h0IChDKSAxOTk5IGJ5IE9zY2FyIEZlcm5hbmRleiA8b2ZhQG9uY2UuZXM+CisgKiBTZWUgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgbGljZW5zZSBmb3IgZGV0YWlscyBpbiB0aGUgTElDRU5TRS1MR1BMIGZpbGUKKyAqCisgKiBGb3IgZGVidWdpbmcgZGVmaW5lIERFQlVHIHZhcmlhYmxlCisgKi8KKworLyogQ2hhbmdlczoKKyAqICAgICAgbWFyIDEnIDIwMDA6CisgKiAgICAgICAgICAgICAgLSBmaXggY29ycmVjdCBzaXplIG9mIGJyYWlsbGUgbGluZXMuCisgKi8KKworI2luY2x1ZGUgInByb2xvZ3VlLmgiCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorCisjaW5jbHVkZSAibG9nLmgiCisKKyNkZWZpbmUgQlJMX0hBVkVfU1RBVFVTX0NFTExTCisjaW5jbHVkZSAiYnJsX2RyaXZlci5oIgorI2luY2x1ZGUgImJyYWlsbGUuaCIKKyNpbmNsdWRlICJpb19zZXJpYWwuaCIKKworLyogQnJhaWxsZSBkaXNwbGF5IHBhcmFtZXRlcnMgKi8KK3R5cGVkZWYgc3RydWN0eworICAgIGNvbnN0IGNoYXIgKk5hbWU7CisgICAgaW50IENvbHM7CisgICAgaW50IE5iU3RDZWxsczsKK30gQlJMUEFSQU1TOworCitzdGF0aWMgY29uc3QgQlJMUEFSQU1TIE1vZGVsc1tOQl9NT0RFTF0gPXsKKyAgeworICAgIC8qIElEID09IDAgKi8KKyAgICAiRUNPMjAiLAorICAgIDIwLAorICAgIDIKKyAgfQorICAsCisgIHsKKyAgICAvKiBJRCA9PSAxICovCisgICAgIkVDTzQwIiwKKyAgICA0MCwKKyAgICA0CisgIH0KKyAgLAorICB7CisgICAgLyogSUQgPT0gMiAqLworICAgICJFQ084MCIsCisgICAgODAsCisgICAgNAorICB9Cit9OworCisjZGVmaW5lIEJSTFJPV1MJCTEKKyNkZWZpbmUgTUFYX1NUQ0VMTFMJNAkvKiBoaWVzdCBudW1iZXIgb2Ygc3RhdHVzIGNlbGxzICovCisKKy8qIEdsb2JhbCB2YXJpYWJsZXMgKi8KK3N0YXRpYyBTZXJpYWxEZXZpY2UgKnNlcmlhbERldmljZTsJCQkvKiBmaWxlIGRlc2NyaXB0b3IgZm9yIEJyYWlsbGUgZGlzcGxheSAqLworc3RhdGljIHVuc2lnbmVkIGNoYXIgKnJhd2RhdGE7CQkvKiB0cmFuc2xhdGVkIGRhdGEgdG8gc2VuZCB0byBCcmFpbGxlICovCitzdGF0aWMgdW5zaWduZWQgY2hhciBTdGF0dXNbTUFYX1NUQ0VMTFNdOyAvKiB0byBob2xkIHN0YXR1cyAqLworc3RhdGljIGNvbnN0IEJSTFBBUkFNUyAqbW9kZWw7CQkvKiBwb2ludHMgdG8gdGVybWluYWwgbW9kZWwgY29uZmlnIHN0cnVjdCAqLworc3RhdGljIGludCBCcmFpbGxlU2l6ZT0wOwkJLyogQnJhaWxsZSBzaXplIG9mIGJyYWlsbGUgbGluZSAqLworCisjaWZkZWYgREVCVUcKK2ludCBicmxfbG9nOworI2VuZGlmIC8qIERFQlVHICovCisKKy8qIENvbW11bmljYXRpb24gY29kZXMgKi8KK3N0YXRpYyBjaGFyIEJSTF9JRFtdID0gIlx4MTBceDAyXHhGMSI7CisjZGVmaW5lIERJTV9CUkxfSUQgMworc3RhdGljIHVuc2lnbmVkIGNoYXIgU1lTX1JFQURZW10gPSB7MFgxMCwgMFgwMiwgMFhGMSwgMFg1NywgMFg1NywgMFg1NywgMFgxMCwgMFgwM307CisjZGVmaW5lIERJTV9TWVNfUkVBRFkgc2l6ZW9mKFNZU19SRUFEWSkKK3N0YXRpYyBjaGFyIEJSTF9SRUFEWVtdIFVOVVNFRCA9ICJceDEwXHgwMlx4MkUiOworI2RlZmluZSBESU1fQlJMX1JFQURZIDMKK3N0YXRpYyBjaGFyIEJSTF9XUklURV9QUkVGSVhbXSA9ICJceDYxXHgxMFx4MDJceEJDIjsKKyNkZWZpbmUgRElNX0JSTF9XUklURV9QUkVGSVggNAorc3RhdGljIGNoYXIgQlJMX1dSSVRFX1NVRklYW10gPSAiXHgxMFx4MDMiOworI2RlZmluZSBESU1fQlJMX1dSSVRFX1NVRklYIDIKK3N0YXRpYyBjaGFyIEJSTF9LRVlbXSA9ICJceDEwXHgwMlx4ODgiOworI2RlZmluZSBESU1fQlJMX0tFWSAyCisKKworLyogU3RhdHVzIFNlbnNvcnMgKi8KKyNkZWZpbmUgS0VZX1NUX1NFTlNPUjEJMHhENSAgLyogQnl0ZSBBICovCisjZGVmaW5lIEtFWV9TVF9TRU5TT1IyCTB4RDYKKyNkZWZpbmUgS0VZX1NUX1NFTlNPUjMJMHhEMAorI2RlZmluZSBLRVlfU1RfU0VOU09SNAkweEQxCisKKy8qIE1haW4gU2Vuc29ycyAqLworI2RlZmluZSBLRVlfTUFJTl9NSU4JMHg4MAorI2RlZmluZSBLRVlfTUFJTl9NQVgJMHhDRgorCisvKiBGcm9udCBLZXlzICovCisjZGVmaW5lIEtFWV9ET1dOCTB4MDEgIC8qIEJ5dGUgQiAqLworI2RlZmluZSBLRVlfUklHSFQJMHgwMgorI2RlZmluZSBLRVlfQ0xJQ0sJMHgwNAorI2RlZmluZSBLRVlfTEVGVAkweDA4CisjZGVmaW5lIEtFWV9VUAkJMHgxMAorCisvKiBGdW5jdGlvbiBLZXlzICovCisjZGVmaW5lIEtFWV9GOQkJMHgwMSAgLyogYnl0ZSBDICovCisjZGVmaW5lIEtFWV9BTFQJCTB4MDIKKyNkZWZpbmUgS0VZX0YwCQkweDA0CisjZGVmaW5lIEtFWV9TSElGVAkweDQwCisKKyNkZWZpbmUgS0VZX0YxCQkweDAxICAvKiBCeXRlIEQgKi8KKyNkZWZpbmUgS0VZX0YyCQkweDAyCisjZGVmaW5lIEtFWV9GMwkJMHgwNAorI2RlZmluZSBLRVlfRjQJCTB4MDgKKyNkZWZpbmUgS0VZX0Y1CQkweDEwCisjZGVmaW5lIEtFWV9GNgkJMHgyMAorI2RlZmluZSBLRVlfRjcJCTB4NDAKKyNkZWZpbmUgS0VZX0Y4CQkweDgwCisKKworc3RhdGljIGludCBXcml0ZVRvQnJsRGlzcGxheSh1bnNpZ25lZCBjaGFyICpEYXRhKQoreworICB1bnNpZ25lZCBpbnQgc2l6ZSA9IERJTV9CUkxfV1JJVEVfUFJFRklYICsgQnJhaWxsZVNpemUgKyBESU1fQlJMX1dSSVRFX1NVRklYOworICB1bnNpZ25lZCBjaGFyIGJ1ZmZlcltzaXplXTsKKyAgdW5zaWduZWQgY2hhciAqYnl0ZSA9IGJ1ZmZlcjsKKyAgCisgIGJ5dGUgPSBtZW1wY3B5KGJ5dGUsIEJSTF9XUklURV9QUkVGSVgsIERJTV9CUkxfV1JJVEVfUFJFRklYKTsKKyAgYnl0ZSA9IG1lbXBjcHkoYnl0ZSwgRGF0YSwgQnJhaWxsZVNpemUpOworICBieXRlID0gbWVtcGNweShieXRlLCBCUkxfV1JJVEVfU1VGSVgsIERJTV9CUkxfV1JJVEVfU1VGSVgpOworIAorICBzZXJpYWxXcml0ZURhdGEoc2VyaWFsRGV2aWNlLCBidWZmZXIsIGJ5dGUtYnVmZmVyKTsKKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYnJsX2NvbnN0cnVjdChCcmFpbGxlRGlzcGxheSAqYnJsLCBjaGFyICoqcGFyYW1ldGVycywgY29uc3QgY2hhciAqZGV2aWNlKQoreworICBzaG9ydCBNb2RlbElEID0gTU9ERUw7CisgIHVuc2lnbmVkIGNoYXIgYnVmZmVyW0RJTV9CUkxfSUQgKyA2XTsKKworICBpZiAoIWlzU2VyaWFsRGV2aWNlSWRlbnRpZmllcigmZGV2aWNlKSkgeworICAgIHVuc3VwcG9ydGVkRGV2aWNlSWRlbnRpZmllcihkZXZpY2UpOworICAgIHJldHVybiAwOworICB9CisKKyAgcmF3ZGF0YSA9IE5VTEw7CS8qIGNsZWFyIHBvaW50ZXJzICovCisKKyAgLyogT3BlbiB0aGUgQnJhaWxsZSBkaXNwbGF5IGRldmljZSAqLworICBpZiAoIShzZXJpYWxEZXZpY2UgPSBzZXJpYWxPcGVuRGV2aWNlKGRldmljZSkpKSBnb3RvIGZhaWx1cmU7CisgIAorI2lmZGVmIERFQlVHCisgIGxvY2tVbWFzaygpOworICBicmxfbG9nID0gb3BlbigiL3RtcC9icmxsb2ciLCBPX0NSRUFUIHwgT19XUk9OTFkpOworICB1bmxvY2tVbWFzaygpOworCisgIGlmKGJybF9sb2cgPCAwKXsKKyAgICBnb3RvIGZhaWx1cmU7CisgIH0KKyNlbmRpZiAvKiBERUJVRyAqLworCisgIC8qIGF1dG9kZXRlY3RpbmcgRUNPIG1vZGVsICovCisgIGRveworICAgICAgLyogRFRSIGJhY2sgb24gKi8KKyAgICAgIHNlcmlhbFJlc3RhcnREZXZpY2Uoc2VyaWFsRGV2aWNlLCBCQVVEUkFURSk7CS8qIGFjdGl2YXRlIG5ldyBzZXR0aW5ncyAqLworICAgICAgCisgICAgICAvKiBUaGUgMiBuZXh0IGxpbmVzIGNhbiBiZSBjb21tZW50ZWQgb3V0IHRvIHRyeSBhdXRvZGV0ZWN0IG9uY2UgYW55d2F5ICovCisgICAgICBpZihNb2RlbElEICE9IEVDT19BVVRPKXsKKwlicmVhazsKKyAgICAgIH0KKyAgICAgIAkKKyAgICAgIGlmKHNlcmlhbFJlYWREYXRhKHNlcmlhbERldmljZSwgJmJ1ZmZlciwgRElNX0JSTF9JRCArIDYsIDYwMCwgMTAwKSA9PSBESU1fQlJMX0lEICsgNil7CisJICBpZihtZW1jbXAgKGJ1ZmZlciwgQlJMX0lELCBESU1fQlJMX0lEKSA9PSAwKXsKKwkgIAorCSAgICAvKiBQb3NzaWJsZSB2YWx1ZXM7IDB4MjAsIDB4NDAsIDB4ODAgKi8KKwkgICAgaW50IHRtcE1vZGVsPWJ1ZmZlcltESU1fQlJMX0lEXSAvIDB4MjA7CisKKwkgICAgc3dpdGNoKHRtcE1vZGVsKXsKKwkgICAgIGNhc2UgMTogTW9kZWxJRD0wOworCSAgICAgICBicmVhazsKKwkgICAgIGNhc2UgMjogTW9kZWxJRD0xOworCSAgICAgICBicmVhazsKKwkgICAgIGNhc2UgNDogTW9kZWxJRD0yOworCSAgICAgICBicmVhazsKKwkgICAgZGVmYXVsdDogTW9kZWxJRD0xOworCSAgICB9CisJICB9CisgICAgICB9CisgIH13aGlsZShNb2RlbElEID09IEVDT19BVVRPKTsKKyAgCisgIGlmKE1vZGVsSUQgPj0gTkJfTU9ERUwgfHwgTW9kZWxJRCA8IDApeworICAgIGdvdG8gZmFpbHVyZTsJCS8qIHVua25vd24gbW9kZWwgKi8KKyAgfQorICAgIAorICAvKiBOZWVkIGFuc3dlciB0byBCUiAqLworICAvKmRveyovCisgICAgICBzZXJpYWxXcml0ZURhdGEoc2VyaWFsRGV2aWNlLCBTWVNfUkVBRFksIERJTV9TWVNfUkVBRFkpOworICAgICAgc2VyaWFsUmVhZERhdGEoc2VyaWFsRGV2aWNlLCAmYnVmZmVyLCBESU1fQlJMX1JFQURZICsgNiwgMTAwLCAxMDApOworICAgICAgLyp9d2hpbGUoc3RybmNtcCAoYnVmZmVyLCBCUkxfUkVBRFksIERJTV9CUkxfUkVBRFkpKTsqLworICAgICAgCisgICAgICBsb2dNZXNzYWdlKExPR19ERUJVRywgImJ1ZmZlciBpczogJXMiLGJ1ZmZlcik7CisgIAorICAvKiBTZXQgbW9kZWwgcGFyYW1zICovCisgIG1vZGVsID0gJk1vZGVsc1tNb2RlbElEXTsKKyAgYnJsLT50ZXh0Q29sdW1ucyA9IG1vZGVsLT5Db2xzOwkJLyogaW5pdGlhbGlzZSBzaXplIG9mIG1haW4gZGlzcGxheSAqLworICBicmwtPnRleHRSb3dzID0gQlJMUk9XUzsJCS8qIGV2ZXIgaXMgMSBpbiB0aGlzIHR5cGUgb2YgYnJhaWxsZSBsaW5lcyAqLworICAKKyAgTUFLRV9PVVRQVVRfVEFCTEUoMFgxMCwgMFgyMCwgMFg0MCwgMFgwMSwgMFgwMiwgMFgwNCwgMFg4MCwgMFgwOCk7CisKKyAgLyogTmVlZCB0byBjYWxjdWxhdGUgdGhlIHNpemU7IENvbHMgKyBTdGF0dXMgKyAxIChzcGFjZSBiZXR3ZWVuKSAqLworICBCcmFpbGxlU2l6ZSA9IGJybC0+dGV4dENvbHVtbnMgKyBtb2RlbC0+TmJTdENlbGxzICsgMTsKKworICAvKiBBbGxvY2F0ZSBzcGFjZSBmb3IgYnVmZmVycyAqLworICByYXdkYXRhID0gbWFsbG9jKEJyYWlsbGVTaXplKTsgLyogUGhpc2ljYWwgc2l6ZSAqLworICBpZighcmF3ZGF0YSl7CisgICAgIGdvdG8gZmFpbHVyZTsKKyAgfSAgICAKKworICAvKiBFbXB0eSBidWZmZXJzICovCisgIG1lbXNldChyYXdkYXRhLCAwLCBCcmFpbGxlU2l6ZSk7CisgIG1lbXNldChTdGF0dXMsIDAsIE1BWF9TVENFTExTKTsKKworcmV0dXJuIDE7CisKK2ZhaWx1cmU6OworICBpZihyYXdkYXRhKXsKKyAgICAgZnJlZShyYXdkYXRhKTsKKyAgfQorICAgICAgIAorcmV0dXJuIDA7Cit9CisKKworc3RhdGljIHZvaWQgYnJsX2Rlc3RydWN0KEJyYWlsbGVEaXNwbGF5ICpicmwpCit7CisgIGZyZWUocmF3ZGF0YSk7CisgIHNlcmlhbENsb3NlRGV2aWNlKHNlcmlhbERldmljZSk7CisKKyNpZmRlZiBERUJVRyAgCisgIGNsb3NlKGJybF9sb2cpOworI2VuZGlmIC8qIERFQlVHICovCit9CisKKworc3RhdGljIGludCBicmxfd3JpdGVXaW5kb3coQnJhaWxsZURpc3BsYXkgKmJybCwgY29uc3Qgd2NoYXJfdCAqdGV4dCkKK3sKKyAgdW5zaWduZWQgY2hhciAqYnl0ZSA9IHJhd2RhdGE7CisgIC8qIFRoaXMgQnJhaWxsZSBMaW5lIG5lZWQgdG8gZGlzcGxheSBhbGwgaW5mb3JtYXRpb24sIGluY2x1ZGUgc3RhdHVzICovCisgIAorICAvKiBNYWtlIHN0YXR1cyBpbmZvIHRvIHJhd2RhdGEgKi8KKyAgYnl0ZSA9IHRyYW5zbGF0ZU91dHB1dENlbGxzKGJ5dGUsIFN0YXR1cywgbW9kZWwtPk5iU3RDZWxscyk7CisKKyAgLyogc3RlcCBhIHBoeXNpY2FsIHNwYWNlIHdpdGggbWFpbiBjZWxscyAqLworICAqYnl0ZSsrID0gMDsKKyAgCisgIC8qIE1ha2UgbWFpbiBpbmZvIHRvIHJhd2RhdGEgKi8KKyAgYnl0ZSA9IHRyYW5zbGF0ZU91dHB1dENlbGxzKGJ5dGUsIGJybC0+YnVmZmVyLCBicmwtPnRleHRDb2x1bW5zKTsKKyAgICAgCisgIC8qIFdyaXRlIHRvIEJyYWlsbGUgRGlzcGxheSAqLworICBXcml0ZVRvQnJsRGlzcGxheShyYXdkYXRhKTsKKyAgcmV0dXJuIDE7Cit9CisKKworc3RhdGljIGludCBicmxfd3JpdGVTdGF0dXMoQnJhaWxsZURpc3BsYXkgKmJybCwgY29uc3QgdW5zaWduZWQgY2hhciAqc3QpCit7CisgIC8qIFVwZGF0ZSBzdGF0dXMgY2VsbHMgKi8KKyAgbWVtY3B5KFN0YXR1cywgc3QsIG1vZGVsLT5OYlN0Q2VsbHMpOworICByZXR1cm4gMTsKK30KKworCitzdGF0aWMgaW50IGJybF9yZWFkQ29tbWFuZChCcmFpbGxlRGlzcGxheSAqYnJsLCBLZXlUYWJsZUNvbW1hbmRDb250ZXh0IGNvbnRleHQpCit7CisgIGludCByZXMgPSBFT0Y7CisgIGxvbmcgYnl0ZXMgPSAwOworICB1bnNpZ25lZCBjaGFyICpwQnVmZjsKKyAgdW5zaWduZWQgY2hhciBidWZmWzE4ICsgMV07CisgIAorI2lmZGVmIERFQlVHCisgIGNoYXIgdG1wWzgwXTsKKyNlbmRpZiAvKiBERUJVRyAqLworCisgIC8qIFJlYWQgaW5mbyBmcm9tIEJyYWlsbGUgTGluZSAqLworICBpZigoYnl0ZXMgPSBzZXJpYWxSZWFkRGF0YShzZXJpYWxEZXZpY2UsIGJ1ZmYsIDE4LCAwLCAwKSkgPj0gOSl7CisKKyNpZmRlZiBERUJVRworICAgICBzcHJpbnRmKHRtcCwgIlR5cGUgJWQsIEJ5dGVzIHJlYWQ6ICUuMnggJS4yeCAlLjJ4ICUuMnggJS4yeCAlLjJ4ICUuMnggJS4yeCAlLjJ4ICUuMnhcbiIsCisgICAgICAgIHR5cGUsIGJ1ZmZbMF0sIGJ1ZmZbMV0sIGJ1ZmZbMl0sIGJ1ZmZbM10sIGJ1ZmZbNF0sIGJ1ZmZbNV0sIGJ1ZmZbNl0sIGJ1ZmZbN10sIGJ1ZmZbOF0sIGJ1ZmZbOV0pOworICAgICB3cml0ZShicmxfbG9nLCB0bXAsIHN0cmxlbih0bXApKTsgCisjZW5kaWYgLyogREVCVUcgKi8KKyAgCisgICAgIC8qIElzIGEgS2V5PyAqLworICAgICBpZigocEJ1ZmY9KHVuc2lnbmVkIGNoYXIgKilzdHJzdHIoKGNoYXIgKilidWZmLCBCUkxfS0VZKSkpeyAgCisgICAgCisgICAgICAgIC8qIEJ5dGUgQS4gQ2hlY2sgU3RhdHVzIHNlbnNvcnMgKi8KKwlzd2l0Y2goKihwQnVmZiszKSl7CisJICAgY2FzZSBLRVlfU1RfU0VOU09SMToKKwkgICAgICAgIHJlcyA9IEJSTF9DTURfSEVMUDsKKwkgICAgICAgIGJyZWFrOworCisJICAgY2FzZSBLRVlfU1RfU0VOU09SMjoKKwkgICAgICAgIHJlcyA9IEJSTF9DTURfUFJFRk1FTlU7CisJICAgICAgICBicmVhazsKKworCSAgIGNhc2UgS0VZX1NUX1NFTlNPUjM6CisJICAgICAgICByZXMgPSBCUkxfQ01EX0RJU1BNRDsKKwkgICAgICAgIGJyZWFrOworCisJICAgY2FzZSBLRVlfU1RfU0VOU09SNDoKKwkgICAgICAgIHJlcyA9IEJSTF9DTURfSU5GTzsKKwkgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKwkvKiBDaGVjayBNYWluIFNlbnNvcnMgKi8KKwlpZigqKHBCdWZmKzMpID49IEtFWV9NQUlOX01JTiAmJiAqKHBCdWZmKzMpIDw9IEtFWV9NQUlOX01BWCl7CisJCisJICAgLyogTm90aGluZyAqLworCX0KKwkKKwkvKiBCeXRlIEIuIENoZWNrIEZyb250IEtleXMgKi8KKwlzd2l0Y2goKihwQnVmZis0KSl7CisJICAgY2FzZSBLRVlfRE9XTjogLyogRG93biAqLworCSAgICAgICAgcmVzID0gQlJMX0NNRF9MTkROOworCSAgICAgICAgYnJlYWs7CisKKwkgICBjYXNlIEtFWV9SSUdIVDogLyogUmlnaHQgKi8KKwkgICAgICAgIHJlcyA9IEJSTF9DTURfRldJTlJUOworCSAgICAgICAgYnJlYWs7CisKKwkgICBjYXNlIEtFWV9DTElDSzogLyogRWNvMjAgR28gdG8gY3Vyc29yICovCisJICAgCisJICAgICAgICAvKiBPbmx5IGZvciBFQ08yMCwgaGF2ZW4ndCBmdW5jdGlvbiBrZXlzICovCisJCWlmKG1vZGVsLT5Db2xzPT0yMCl7CisJICAgICAgICAgICByZXMgPSBCUkxfQ01EX0hPTUU7CisJCX0KKwkgICAgICAgIGJyZWFrOworCisJICAgY2FzZSBLRVlfTEVGVDogLyogTGVmdCAqLworCSAgICAgICAgcmVzID0gQlJMX0NNRF9GV0lOTFQ7CisJICAgICAgICBicmVhazsKKworCSAgIGNhc2UgS0VZX1VQOiAvKiBVcCAgKi8KKwkgICAgICAgIHJlcyA9IEJSTF9DTURfTE5VUDsKKwkgICAgICAgIGJyZWFrOworCisJICAgY2FzZSBLRVlfVVB8S0VZX0NMSUNLOiAvKiBUb3Agb2Ygc2NyZWVuICAqLworCSAgICAgICAgcmV0dXJuKEJSTF9DTURfVE9QKTsKKwkgICAgICAgIGJyZWFrOworCisJICAgY2FzZSBLRVlfRE9XTnxLRVlfQ0xJQ0s6IC8qIEJvdHRvbSBvZiBzY3JlZW4gKi8KKwkgICAgICAgIHJldHVybihCUkxfQ01EX0JPVCk7CisJICAgICAgICBicmVhazsKKworCSAgIGNhc2UgS0VZX0xFRlR8S0VZX0NMSUNLOiAvKiBMZWZ0IG9uZSBoYWxmIHdpbmRvdyAqLworCSAgICAgICAgcmV0dXJuKEJSTF9DTURfSFdJTkxUKTsKKwkgICAgICAgIGJyZWFrOworCisJICAgY2FzZSBLRVlfUklHSFR8S0VZX0NMSUNLOiAvKiBSaWdodCBvbmUgaGFsZiB3aW5kb3cgKi8KKwkgICAgICAgIHJldHVybihCUkxfQ01EX0hXSU5SVCk7CisJICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisJLyogQnl0ZSBDLiBTb21lIEZ1bmN0aW9uIEtleXMgKi8KKwlzd2l0Y2goKihwQnVmZis1KSl7CisJICAgY2FzZSBLRVlfRjk6CisJICAgICAgICAvKiBOb3RoaW5nICovCisJICAgICAgICBicmVhazsKKworICAgICAgICAgICBjYXNlIEtFWV9BTFQ6CisJICAgICAgICAvKiBOb3RoaW5nICovCisJICAgICAgICBicmVhazsKKworCSAgIGNhc2UgS0VZX0YwOgorCSAgICAgICAgLyogTm90aGluZyAqLworCSAgICAgICAgYnJlYWs7CisKKwkgICBjYXNlIEtFWV9TSElGVDogLyogQ3Vyc29yIHRyYWtpbmcgKi8KKwkJaWYoKihwQnVmZis2KT09S0VZX0Y4KXsKKwkJICAgICByZXR1cm4oQlJMX0NNRF9DU1JUUkspOworCQl9CisJICAgICAgICBicmVhazsKKyAgICAgICAgfQorCQorCisJLyogQnl0ZSBELiBSZXN0IG9mIEZ1bmN0aW9uIEtleXMgKi8KKwlzd2l0Y2goKihwQnVmZis2KSl7CisJICAgY2FzZSBLRVlfRjE6CisJICAgICAgICAvKiBOb3RoaW5nICovCisJICAgICAgICBicmVhazsKKworCSAgIGNhc2UgS0VZX0YyOiAgLyogZ28gdG8gY3Vyc29yICovCisgICAgICAgICAgICAgICAgcmVzID0gQlJMX0NNRF9IT01FOworCSAgICAgICAgYnJlYWs7CisKKwkgICBjYXNlIEtFWV9GMzoKKwkgICAgICAgIC8qIE5vdGhpbmcgKi8KKwkgICAgICAgIGJyZWFrOworCisJICAgY2FzZSBLRVlfRjQ6CisJICAgICAgICAvKiBOb3RoaW5nICovCisJICAgICAgICBicmVhazsKKworCSAgIGNhc2UgS0VZX0Y1OiAvKiB0b2dsZSBjdXJzb3IgdmlzaWJpbGl0eSAqLworCSAgICAgICAgcmVzID0gQlJMX0NNRF9DU1JWSVM7CisJICAgICAgICBicmVhazsKKworCSAgIGNhc2UgS0VZX0Y2OgorCSAgICAgICAgLyogTm90aGluZyAqLworCSAgICAgICAgYnJlYWs7CisKKwkgICBjYXNlIEtFWV9GNzoKKwkgICAgICAgIC8qIE5vdGhpbmcgKi8KKwkgICAgICAgIGJyZWFrOworCisJICAgY2FzZSBLRVlfRjg6IC8qIFNpeCBkb3QgbW9kZSAqLworCSAgICAgICAgcmVzID0gQlJMX0NNRF9TSVhET1RTOworCSAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgfQorICB9CisgIAorcmV0dXJuKHJlcyk7Cit9CmRpZmYgLS1naXQgYS9Ecml2ZXJzL0JyYWlsbGUvRWNvQnJhaWxsZS9icmFpbGxlLmggYi9Ecml2ZXJzL0JyYWlsbGUvRWNvQnJhaWxsZS9icmFpbGxlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDIxMjdhZAotLS0gL2Rldi9udWxsCisrKyBiL0RyaXZlcnMvQnJhaWxsZS9FY29CcmFpbGxlL2JyYWlsbGUuaApAQCAtMCwwICsxLDQ4IEBACisvKgorICogQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyAqICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyAqCisgKiBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorICoKKyAqIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyAqCisgKiBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisgKi8KKworLyogRWNvQnJhaWxsZS9icmFpbGxlLmggLSBDb25maWd1cmFibGUgZGVmaW5pdGlvbnMgZm9yIHRoZSBFY28gQnJhaWxsZSBzZXJpZXMKKyAqIENvcHlyaWdodCAoQykgMTk5OSBieSBPc2NhciBGZXJuYW5kZXogPG9mYUBvbmNlLmVzPgorICoKKyAqIEVkaXQgYXMgbmVjZXNzYXJ5IGZvciB5b3VyIHN5c3RlbS4KKyAqLworCisvKiBEZXZpY2UgSWRlbnRpZmljYXRpb24gTnVtYmVycyAobm90IHRvIGJlIGNoYW5nZWQpICovCisjZGVmaW5lIEVDT19BVVRPCS0xCisjZGVmaW5lIEVDT18yMAkJMQorI2RlZmluZSBFQ09fNDAJCTIKKyNkZWZpbmUgRUNPXzgwICAgICAJMworI2RlZmluZSBOQl9NT0RFTCAgICAgICAgNAorCisKKy8qKioqKiBVc2VyIFNldHRpbmdzICoqKioqLworI2RlZmluZSBNT0RFTCAgIEVDT19BVVRPCisKKy8qIHNlcmlhbCBsaW5lIGJhdWRyYXRlLi4uIAorICogTm90ZSB0aGF0IGRlZmF1bHQgYnJhaWxsZSBkZXZpY2UgaXMgZGVmaW5lZCBpbiAuLi9NYWtlZmlsZQorICovCisjZGVmaW5lIEJBVURSQVRFIDE5MjAwCisKKy8qIHR5cGVtYXRpYyBzZXR0aW5ncyAqLworI2RlZmluZSBUWVBFTUFUSUNfREVMQVkgMTAJLyogbmJyIG9mIGN5Y2xlcyBiZWZvcmUgYSBrZXkgaXMgcmVwZWF0ZWQgKi8KKyNkZWZpbmUgVFlQRU1BVElDX1JFUEVBVCAyCS8qIG5iciBvZiBjeWNsZXMgYmV0d2VlbiBlYWNoIGtleSByZXBlYXQgKi8KKworLyogRGVsYXkgaW4gbWlsaXNlY29uZHMgYmV0d2VlbiBmb3JjZWQgZnVsbCByZWZyZXNoIG9mIHRoZSBkaXNwbGF5LgorICogVGhpcyBpcyB0byBtaW5pbWl6ZSBnYXJiYWdlIGVmZmVjdHMgZHVlIHRvIG5vaXNlIG9uIHRoZSBzZXJpYWwgbGluZS4KKyAqLworI2RlZmluZSBSRUZSRVNIX1JBVEUgMTAwMApkaWZmIC0tZ2l0IGEvRHJpdmVycy9CcmFpbGxlL0V1cm9CcmFpbGxlL01ha2VmaWxlLmluIGIvRHJpdmVycy9CcmFpbGxlL0V1cm9CcmFpbGxlL01ha2VmaWxlLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFhZDMyOWIKLS0tIC9kZXYvbnVsbAorKysgYi9Ecml2ZXJzL0JyYWlsbGUvRXVyb0JyYWlsbGUvTWFrZWZpbGUuaW4KQEAgLTAsMCArMSw2NyBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorIyAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyMKKyMgQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorIworIyBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorIworIyBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisjIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyMgbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisjCisjIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK0RSSVZFUl9DT0RFID0gZXUKK0RSSVZFUl9OQU1FID0gRXVyb0JyYWlsbGUKK0RSSVZFUl9VU0FHRSA9IEF6ZXJCcmFpbGxlLCBDbGlvLCBFc3lzLCBJcmlzLCBOb3RlQnJhaWxsZSwgU2NyaWJhCitEUklWRVJfVkVSU0lPTiA9IDIuMAorRFJJVkVSX0RFVkVMT1BFUlMgPSBZYW5uaWNrIFBMQVNTSUFSRCA8eWFuQG1pc3RpZ3JpLm9yZz4sIE9saXZpZXIgQkVSVCA8b2JlcnQwMUBtaXN0aWdyaS5vcmc+LCBOaWNvbGFzIFBJVFJFIDxuaWNvQGZsdXhuaWMubmV0PgoraW5jbHVkZSAkKFNSQ19UT1ApYnJhaWxsZS5taworCitTUkNfRklMRVMgPSBldV9icmFpbGxlLmMgZXVfY2xpby5jIGV1X2VzeXNpcmlzLmMKKworT0JKX0ZJTEVTID0gJChTUkNfRklMRVM6LmM9LiRPKQorCiticmFpbGxlLiRPOiAkKE9CSl9GSUxFUykKKwkkKE1LUkVMKSAkQCAkKE9CSl9GSUxFUykKKworZXVfYnJhaWxsZS4kTzoKKwkkKENDKSAkKEJSTF9DRkxBR1MpIC1vICRAIC1jICQoU1JDX0RJUikvZXVfYnJhaWxsZS5jCisKK2V1X2NsaW8uJE86CisJJChDQykgJChCUkxfQ0ZMQUdTKSAtbyAkQCAtYyAkKFNSQ19ESVIpL2V1X2NsaW8uYworCitldV9lc3lzaXJpcy4kTzoKKwkkKENDKSAkKEJSTF9DRkxBR1MpIC1vICRAIC1jICQoU1JDX0RJUikvZXVfZXN5c2lyaXMuYworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK0VVX1RSQU5TRkVSX09CSkVDVFMgPSBldXRwX2JybC4kTyBldXRwX2NvbnZlcnQuJE8gZXV0cF9kZWJ1Zy4kTyBldXRwX3BjLiRPIGV1dHBfdG9vbHMuJE8gZXV0cF90cmFuc2Zlci4kTyBldXRwX21haW4uJE8KKworRVVfVFJBTlNGRVJfVE9PTCA9IGV1dHAkWAorRVVfVFJBTlNGRVJfTUFOID0gJChTUkNfRElSKS9ldXRwLjEKKworJChFVV9UUkFOU0ZFUl9UT09MKTogJChFVV9UUkFOU0ZFUl9PQkpFQ1RTKSBicmxhcGkKKwkkKENDKSAkKExERkxBR1MpIC1vICRAICQoRVVfVFJBTlNGRVJfT0JKRUNUUykgJChBUElfTElCUykKKworYXBpOiAkKEVVX1RSQU5TRkVSX1RPT0wpCiticmFpbGxlLWFsbDo6ICQoQlVJTERfQVBJKQorCitjbGVhbjo6CisJLXJtIC1mICQoRVVfVFJBTlNGRVJfVE9PTCkgJChFVV9UUkFOU0ZFUl9PQkpFQ1RTKQorCitpbnN0YWxsLWFwaTo6IGluc3RhbGwtZXUtdHJhbnNmZXItdG9vbAorCitpbnN0YWxsLWV1LXRyYW5zZmVyLXRvb2w6ICQoRVVfVFJBTlNGRVJfVE9PTCkgaW5zdGFsbC1wcm9ncmFtLWRpcmVjdG9yeSBpbnN0YWxsLW1hbjEtZGlyZWN0b3J5CisJJChJTlNUQUxMX1BST0dSQU0pICQoRVVfVFJBTlNGRVJfVE9PTCkgJChJTlNUQUxMX1BST0dSQU1fRElSRUNUT1JZKQorCSQoSU5TVEFMTF9EQVRBKSAkKEVVX1RSQU5TRkVSX01BTikgJChJTlNUQUxMX01BTjFfRElSRUNUT1JZKQorCit1bmluc3RhbGw6OgorCS1ybSAtZiAkKElOU1RBTExfUFJPR1JBTV9ESVJFQ1RPUlkpLyQoRVVfVFJBTlNGRVJfVE9PTCkKKwktcm0gLWYgJChJTlNUQUxMX01BTjFfRElSRUNUT1JZKS8kKEVVX1RSQU5TRkVSX01BTikKKwpkaWZmIC0tZ2l0IGEvRHJpdmVycy9CcmFpbGxlL0V1cm9CcmFpbGxlL1JFQURNRSBiL0RyaXZlcnMvQnJhaWxsZS9FdXJvQnJhaWxsZS9SRUFETUUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmE1ZWE2ZAotLS0gL2Rldi9udWxsCisrKyBiL0RyaXZlcnMvQnJhaWxsZS9FdXJvQnJhaWxsZS9SRUFETUUKQEAgLTAsMCArMSwxMjEgQEAKK1RoaXMgaXMgdGhlIEV1cm9CcmFpbGxlIGZhbWlseSBkcml2ZXIgZm9yIEJSTFRUWSwgdmVyc2lvbiAyLjAuMAorCitJbml0aWFsIHdyaXRpbmcgYnkgTmljb2xhcyBQaXRyZSA8bmljb0BmbHV4bmljLm5ldD4sIENvcHlyaWdodCAxOTk3LTE5OTguCisKK1RoaXMgY29kZSBpcyBjb3B5cmlnaHRlZCB1bmRlciB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgorU2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBpbmNsdWRlZCB3aXRoIEJSTFRUWSBmb3IgZGV0YWlscy4KKworVGhpcyBkcml2ZXIgaXMgY3VycmVudGx5IG1haW50YWluZWQgYnkgCisJKiBZYW5uaWNrIFBsYXNzaWFyZCA8eWFuQG1pc3RpZ3JpLm9yZz4KKwkqIE9saXZpZXIgQmVydCA8b2JlcnQwMUBtaXN0aWdyaS5vcmc+CisKK1NVUFBPUlRFRCBIQVJEV0FSRQorPT09PT09PT09PT09PT09PT09CitBbGwgRXVyb0JyYWlsbGUncyBkaXNwbGF5cyBzaG91bGQgYmUgc3VwcG9ydGVkIGhlcmUuIEhvd2V2ZXIgaXQgaGFzIGJlZW4gdGVzdGVkCitvbiB0aGUgZm9sbG93aW5nIGhhcmR3YXJlOgorICAgLSBhIENsaW8tTm90ZWJyYWlsbGUgKDIwLDQwLDgwKTsKKyAgIC0gYSBTY3JpYmEgKDIwLDQwKTsKKyAgIC0gYW4gQXplcmJyYWlsbGUgKDQwLDgwKTsKKyAgIC0gYSBDbGlvLVB1cGlCcmFpbGxlICg4MCk7CisgICAtIGFuIElyaXMgKFMyMCwgUzMyLCA0MCwgS0I0MCk7CisgICAtIGFuIEVzeVMgKDEyLDQwLDY0KS4KKyAgIC0gVGhlIGRyaXZlciBpcyBhbHNvIHRlc3RlZCB3aXRoIGEgTm90ZUJyYWlsbGUgZGlzcGxheSBpbiBvcmRlciB0byAKKyAgICAgbWFpbnRhaW4gYmFja3dhcmQgY29tcGF0aWJpbGl0eS4KKworCitGSVhFUy9BRERJVElPTlMKKz09PT09PT09PT09PT09PQorVmVyc2lvbiAyLjAuMDoKKwktIENvbXBsZXRlIHJld3JpdGUgb2YgdGhlIHdob2xlIGRyaXZlciB0byBzdXBwb3J0IG5ldyBFc3lzSXJpcworCSAgcHJvdG9jb2wgKHNlcmlhbCBhbmQgZXRoZXJuZXQgY29ubmVjdGlvbiBzdXBwb3J0ZWQpLgorCS0gU3VwcG9ydCBJcmlzIChmaXJtd2FyZSAxLjcxIGFuZCBsYXRlcikKKwktIFN1cHBvcnQgRVNZUyAxMi80MCBkaXNwbGF5LgorCS0gQWJpbGl0eSB0byBhdXRvZGV0ZWN0IHdoaWNoIHByb3RvY29sIHRvIHVzZS4KKworVmVyc2lvbiAxLjMuNDoKKwktIFN1cHBvcnQgdGhlIHN1c3BlbmQvcmVzdW1lIEJSTFRUWSBmZWF0dXJlLgorCitWZXJzaW9uIDEuMy4zOgorCS0gQ29ycmVjdGVkIHNldmVyYWwgYnVncyBpbiB3cml0ZS9yZWFkIG9wZXJhdGlvbnM7CisJLSBDb3JyZWN0ZWQgc2V2ZXJhbCBrZXkgYnVncyBvbiBJcmlzIG1vZGVscy4KKworVmVyc2lvbiAxLjMuMjoKKwktIFJlbWFkZSB0aGUgYnJsX1JlYWRQYWNrZXQgYW5kIGJybF9Xcml0ZVBhY2tldCwgdG8gYWxsb3cgd3JpdHRpbmcgb2YgCisJICBsb3ctbGV2ZWwgcGFja2V0cyBhbmQgZXJyb3IgY29kZSByZXRyaWV2aW5nOworCS0gRnVsbCBJcmlzIHN1cHBvcnQ7CisKK1ZlcnNpb24gMS4zLjE6CisJLSBNYW55IGNvZGUgY2xlYW51cHM7CisJLSBDb3JyZWN0ZWQgQXplckJyYWlsbGUgNDAgUHJvZ3JhbW1pbmcga2V5cyBidWdzOworCS0gQWRkZWQgYSBMT0dfSU8gZGVmaW5lIHRvIGxvZyBpbi9vdXQgcGFja2V0cyB0byBhIGZpbGU7CisJLSBTdGFydGVkIHRvIGRlYnVnIHRoZSBJcmlzIGlkZW50aWZpY2F0aW9uIGZhaWx1cmVzLCBzdGlsbCBub3Qgd29yaworCSAgcGVyZmVjdGx5OworCitWZXJzaW9uIDEuMyA6CisJLSBNYWRlIHRoZSBkcml2ZXIgQnJsQVBJIGNvbXBhdGlibGUKKwktIFRoZSB0cmFuc2ZlciBjb2RlIGhhcyBiZWVuIHJlbW92ZWQ6IGl0IHdpbGwgYmUgbm93IGluIGEgc2VwYXJhdGUgCisJICBwcm9ncmFtLCBjYWxsZWQgYHRwJyAoaW4gcHJvZ3Jlc3MpLgorCS0gY29kZSBjbGVhbnVwczsKKworVmVyc2lvbiAxLjIgOgorCS0gU2lnbmlmaWNhbnRseSByZWR1Y2VkIHRoZSBzaXplIG9mIHRoZSBzb3VyY2Vjb2RlOiBwcm9wcGVyIGFuZCBlYXNpZXIKKwkgIHRvIHVuZGVyc3RhbmQvY3VzdG9taXplOworCS0gQWRkZWQgTENEIHN1cHBvcnQ7CisJLSBCZXRhIG5ldyBJcmlzIDIwLzMyLzQwIHN1cHBvcnQsIG5vdCB0ZXN0ZWQgeWV0OworCS0gUmUtYWRkZWQgQ3V0LW4tcGFzdGUgcm91dGluZXM6IGl0IHdhcyBkaXNhYmxlZCwgZG9uJ3Qga25vdyB3aHkuLi4KKworVmVyc2lvbiAxLjFhIDoKKwktIE1pbm9yIGNoYW5nZXMgdG8gZnVuY3Rpb24ta2V5cyB0byBtYWtlIHRoZSBwcm9ncmFtIGVhc2llciB0byAKKwkgIHVuZGVwc3RhbmQuIAorCS0gVGhlIG9uLWxpbmUgaGVscCBmdW5jdGlvbiBkaXNhcHBlYXJlZCwgYW5kIGlzIHJlcGxhY2VkIGJ5IHRoZSAKKwkgIENNRF9MRUFSTiAobGVhcm4gbW9kZSkgZnVuY3Rpb24gZGlyZWN0bHkgaW1wbGVtZW50ZWQgd2l0aGluIEJybFR0eS4KKworCitWZXJzaW9uIDEuMToKKwktIEZpeGVkIGJ1Z3MgZHVlIHRvIGNoYW5nZXMgb2YgYnJsdHR5IGNvcmUgZnVuY3Rpb25zCisJLSBDaGFuZ2VkIGtleXMnIGluc2VydGlvbjogV2Ugbm93IHVzZSBzZXF1ZW5jaWFsIG1vZGUgZm9yIG1ldGEgYW5kCisJICBjb250cm9sIGtleXMsIHRvIGFsbG93IG1vcmUgY29tYmluYXRpb25zLiBNb3Jlb3ZlciB0aGUgaW5wdXQgdGFibGUgaXMKKwkgIG5vdyBhdHRhY2hlZCB0byB0aGUgb3V0cHV0IHRhYmxlLiAKKworVmVyc2lvbiAxLjAgOgorICAgCS0gYWRkZWQgYW4gaW50ZXJuYWwgbWVudSB0byBhbGxvdyBjb25zb2xlIHN3aXRjaGluZyBvciB0byBlbnRlciBpbiB0aGUKKwkgIGhlbHAgbWVudS4gCisgICAgIAkgIEhlcmUsIGEgU2NyaWJhLWxpa2UgaW50ZXJmYWNlIHdhcyBpbXBsZW1lbnRlZC4gUmVhZCB0aGUgIlJFQURNRS5tZW51IgorICAgICAJICBmaWxlIGlmIHlvdSBkaWRuJ3QgdXNlIGEgU2NyaWJhIChvciB0aGUgRHJhY3VsYXdpbiBwcm9ncmFtKSBiZWZvcmUgdG8KKyAgICAgCSAgbGVhcm4gbW9yZSBhYm91dCB0aGlzIG1lbnUuCisgICAJLSBXaGVuIHRoZSBkcml2ZXJzIHN0YXJ0cywgaXQgbm93IHBsYXlzIGEgbWVsb2R5IG9uIHRoZSB0ZXJtaW5hbCdzIAorCSAgaW50ZXJuYWwgc3BlYWtlci4gCisJICBUaGlzIHdhcyBtYWRlIHRvIGVuc3VyZSB0aGUgdXNlciB0aGF0IHRoZSBkcml2ZXIgaXMgbG9hZGVkIGFuZCBpcworICAgICAgIAkgIHJlYWR5IHRvIGJlIHVzZWQuCisKK1ZlcnNpb24gMC45OiAKKyAgIAktIFlvdSBjYW4gbm93IHZpZXcgdGhlIGludGVybmFsIGRhdGUvdGltZSBvZiB5b3VyIGRpc3BsYXksIHR5cGluZyAiI00iIAorCSAgKG9yICJBbHBoYStMOSIgb24gYSBTY3JpYmEpLiBUaGlzIGRvZXNuJ3Qgd29yayB2ZXJ5IHdlbGwgLSBkb24ndCBrbm93IAorCSAgd2h5Li4uCisKK1ZlcnNpb24gMC44OgorICAgCS0gTWlub3IgY2hhbmdlcyB3ZXJlIG1hZGUgaW4gdGhlIHVzZSBvZiB0aGUgImluc2tleSgpIiBmdW5jdGlvbi4KKyAgIAktIEZpeGVkIGJ1Z3MgaW4gdGhlIFZpZXdPbigpIGFuZCB0aGUgUHJvZ3JhbSgpIGZ1bmN0aW9ucy4KKworVmVyc2lvbiAwLjc6IAorICAgCS0gQWRkZWQgdGhlICJQcm9ncmFtbWluZyIgYW5kIHRoZSAiVmlldyBvbiIgZnVuY3Rpb25zLiBUaGVpciByZXNwZWN0aXZlIAorICAgICAJICBiZWhhdmlvcnMgYXJlIGFzIGluIHRoZSBET1MgcHJvZ3JhbSAoUmVhZEJyYWlsbGUpLiBTZWUgdGhlIAorCSAgIlJFQURNRS5tb2RlbCIgZmlsZSB3aGVyZSAiTW9kZWwiIGlzIHRoZSBuYW1lIG9mIHlvdXIgZGlzcGxheS4gCisJICBBY3R1YWxseSwgZmlsZXMgYXJlIHdyaXR0ZW4gZm9yIHRoZSBDbGlvLU5vdGVicmFpbGxlIGFuZCB0aGUgU2NyaWJhIAorCSAgZGlzcGxheXMuCisKK1ZlcnNpb24gMC42OgorICAgCS0gRml4ZWQgdGhlICJlbnRlciBidWciOiBUaGUgIlxuIiBpbnNlcnRlZCBjb2RlIGlzIG5vdyByZXBsYWNlZCBieSAKKwkgICJceDBEIi4KKworVmVyc2lvbiAwLjU6IAorICAgCS0gQWRkZWQgdGhlIGFiaWxpdHkgZm9yIHRoZSB1c2VyIHRvIHR5cGUgbGV0dGVycyBkaXJlY3RseSBmcm9tIGhpcy9oZXIKKyAgICAgCSAgdGVybWluYWwuIFRoZSB0YWJsZSBpbXBsZW1lbnRlZCBpcyB0aGUgQ0JJRlMgKEZyZW5jaCkgdGFibGUuCisKK0NvbW1lbnRzIGFyZSBzdHJvbmdseSB3ZWxjb21lZCwgYmVjYXVzZSBJIGRvbid0IGtub3cgaG93IG1hbnkgcGVvcGxlIHVzZSB0aGUgCitFdXJvQnJhaWxsZSB2ZXJzaW9uIG9mIEJSTFRUWSBpbiB0aGUgd29ybGQgc28gaWYgeW91IHVzZSB0aGlzIGRyaXZlciwganVzdCAKK2UtbWFpbCB1cyB3aGF0IGFyZSB5b3VyIHN1Z2dlc3Rpb25zIGZvciBuZXh0IHZlcnNpb25zLgorCitZYW5uaWNrIFBsYXNzaWFyZCA8eWFuQG1pc3RpZ3JpLm9yZz4KK09saXZpZXIgQmVydCA8b2JlcnQwMUBtaXN0aWdyaS5vcmc+CisgICAgT2N0b2JlciAxOSAyMDA3CmRpZmYgLS1naXQgYS9Ecml2ZXJzL0JyYWlsbGUvRXVyb0JyYWlsbGUvYnJsZGVmcy1ldS5oIGIvRHJpdmVycy9CcmFpbGxlL0V1cm9CcmFpbGxlL2JybGRlZnMtZXUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NjI3M2JiCi0tLSAvZGV2L251bGwKKysrIGIvRHJpdmVycy9CcmFpbGxlL0V1cm9CcmFpbGxlL2JybGRlZnMtZXUuaApAQCAtMCwwICsxLDIyNCBAQAorLyoKKyAqIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisgKiAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisgKgorICogQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKKyNpZm5kZWYgQlJMVFRZX0lOQ0xVREVEX0VVX0JSTERFRlMKKyNkZWZpbmUgQlJMVFRZX0lOQ0xVREVEX0VVX0JSTERFRlMKKworI2RlZmluZSBFVV9OQUtfUEFSIDBYMDEJCS8qIHBhcml0eSBlcnJvciAqLworI2RlZmluZSBFVV9OQUtfTlVNIDBYMDIJCS8qIGZyYW1lIG51bXZlciBlcnJvciAqLworI2RlZmluZSBFVV9OQUtfTE5HIDBYMDMJCS8qIGxlbmd0aCBlcnJvciAqLworI2RlZmluZSBFVV9OQUtfQ09NIDBYMDQJCS8qIGNvbW1hbmQgZXJyb3IgKi8KKyNkZWZpbmUgRVVfTkFLX0RPTiAwWDA1CQkvKiBkYXRhIGVycm9yICovCisjZGVmaW5lIEVVX05BS19TWU4gMFgwNgkJLyogc3ludGF4IGVycm9yICovCisjZGVmaW5lIEVVX05BS19WT0MgMFg4MAkJLyogUlY6IFLDqWdpbWUgVm9jYWwgbm90IHN1cHBvcnRlZCBieSBob3N0ICovCisKKyNkZWZpbmUgRVVfTENEX0NVUlNPUiAwWDAyCisKK3R5cGVkZWYgZW51bSB7CisgIEVVX0lSSVNfMjAgICAgICAgICAgICAgID0gMFgwMSwKKyAgRVVfSVJJU180MCAgICAgICAgICAgICAgPSAwWDAyLAorICBFVV9JUklTX1MyMCAgICAgICAgICAgICA9IDBYMDMsCisgIEVVX0lSSVNfUzMyICAgICAgICAgICAgID0gMFgwNCwKKyAgRVVfSVJJU19LQjIwICAgICAgICAgICAgPSAwWDA1LAorICBFVV9JUklTX0tCNDAgICAgICAgICAgICA9IDBYMDYsCisgIEVVX0VTWVNfMTIgICAgICAgICAgICAgID0gMFgwNywKKyAgRVVfRVNZU180MCAgICAgICAgICAgICAgPSAwWDA4LAorICBFVV9FU1lTX0xJR0hUXzQwICAgICAgICA9IDBYMDksCisgIEVVX0VTWVNfMjQgICAgICAgICAgICAgID0gMFgwQSwKKyAgRVVfRVNZU182NCAgICAgICAgICAgICAgPSAwWDBCLAorICBFVV9FU1lTXzgwICAgICAgICAgICAgICA9IDBYMEMsCisgIEVVX0VTWVNfTElHSFRfODAgICAgICAgID0gMHgwRCwKKyAgRVVfRVNZVElNRV8zMiAgICAgICAgICAgPSAwWDBFLAorICBFVV9FU1lUSU1FXzMyX1NUQU5EQVJEICA9IDBYMEYsCisgIEVVX0VTWVRJTUVfRVZPICAgICAgICAgID0gMHgxMCwKKyAgRVVfRVNZVElNRV9FVk9fU1RBTkRBUkQgPSAweDExCit9IEVVX0VzeXNpcmlzTW9kZWw7CisKK3R5cGVkZWYgZW51bSB7CisgIEVVX0lSSVNfT1BUX1VuaW1hbnVhbEtleWJvYXJkICAgID0gMFgwMDAwMDAwMSwKKyAgRVVfSVJJU19PUFRfRGlhbG9ndWVNb2RlICAgICAgICAgPSAwWDAwMDAwMDAyLAorICBFVV9JUklTX09QVF9HcmFkZTJCcmFpbGxlICAgICAgICA9IDBYMDAwMDEwMDAsCisgIEVVX0lSSVNfT1BUX01zbk1lc3NlbmdlciAgICAgICAgID0gMFgwMDAwMjAwMCwKKyAgRVVfSVJJU19PUFRfRGFpc3lSZWFkZXIgICAgICAgICAgPSAwWDAwMDA0MDAwLAorICBFVV9JUklTX09QVF9UZWxlcGhvbmVFeGNoYW5nZSAgICA9IDBYMDAwMDgwMDAsCisgIEVVX0lSSVNfT1BUX01hdGhlbWF0aWNzICAgICAgICAgID0gMFgwMDAxMDAwMCwKKyAgRVVfSVJJU19PUFRfTXVzaWMgICAgICAgICAgICAgICAgPSAwWDAwMDIwMDAwLAorICBFVV9JUklTX09QVF9IcVZvaWNlU3ludGhlc2lzICAgICA9IDBYMDAwNDAwMDAsCisgIEVVX0lSSVNfT1BUX0RvY3VtZW50YXRpb24gICAgICAgID0gMFgwMDA4MDAwMCwKKyAgRVVfSVJJU19PUFRfRmlsZUV4cGxvcmVyICAgICAgICAgPSAwWDAwMTAwMDAwLAorICBFVV9JUklTX09QVF9Wb2NhbE1lbW8gICAgICAgICAgICA9IDBYMDAyMDAwMDAsCisgIEVVX0lSSVNfT1BUX1BjU2VyaWFsICAgICAgICAgICAgID0gMFgwMDQwMDAwMCwKKyAgRVVfSVJJU19PUFRfUGNFdGhlcm5ldCAgICAgICAgICAgPSAwWDAwODAwMDAwLAorICBFVV9JUklTX09QVF9FZGl0b3IgICAgICAgICAgICAgICA9IDBYMDEwMDAwMDAsCisgIEVVX0lSSVNfT1BUX1NwcmVhZHNoZWV0ICAgICAgICAgID0gMFgwMjAwMDAwMCwKKyAgRVVfSVJJU19PUFRfSW50ZXJuZXQgICAgICAgICAgICAgPSAwWDA0MDAwMDAwLAorICBFVV9JUklTX09QVF9DYWxjdWxhdG9yICAgICAgICAgICA9IDBYMDgwMDAwMDAsCisgIEVVX0lSSVNfT1BUX1NjaWVudGlmaWNDYWxjdWxhdG9yID0gMFgxMDAwMDAwMCwKKyAgRVVfSVJJU19PUFRfQ29udGFjdCAgICAgICAgICAgICAgPSAwWDIwMDAwMDAwLAorICBFVV9JUklTX09QVF9BZ2VuZGEgICAgICAgICAgICAgICA9IDBYNDAwMDAwMDAsCisgIEVVX0lSSVNfT1BUX0xpYmJyYWlsbGUgICAgICAgICAgID0gMFg4MDAwMDAwMAorfSBFVV9JcmlzT3B0aW9uOworCit0eXBlZGVmIGVudW0geworICBFVV9FU1lTX09QVF9FZGl0b3IgICAgICAgICAgICAgICAgPSAwWDAwMDQwMDAxLAorICBFVV9FU1lTX09QVF9DYWxjdWxhdG9yICAgICAgICAgICAgPSAwWDAwMDQwMDAyLAorICBFVV9FU1lTX09QVF9BbGFybUNsb2NrICAgICAgICAgICAgPSAwWDAwMDQwMDA0LAorICBFVV9FU1lTX09QVF9CbHVldG9vdGggICAgICAgICAgICAgPSAwWDAwMDAwMDA4LAorICBFVV9FU1lTX09QVF9VU0IgICAgICAgICAgICAgICAgICAgPSAwWDAwMDAwMDEwLAorICBFVV9FU1lTX09QVF9SZWFkbWF0aCAgICAgICAgICAgICAgPSAwWDAwMDAwMTAwLAorICBFVV9FU1lTX09QVF9KYXdzICAgICAgICAgICAgICAgICAgPSAwWDAwMDEwMDAsCisgIEVVX0VTWVNfT1BUX1dpbmRvd0V5ZXMgICAgICAgICAgICA9IDBYMDAwMjAwMCwKKyAgRVVfRVNZU19PUFRfU3VwZXJOb3ZhICAgICAgICAgICAgID0gMFgwMDA0MDAwLAorICBFVV9FU1lTX09QVF9Nb2JpbGVTcGVha1BvY2tldCAgICAgPSAwWDAxMDAwMDAwLAorICBFVV9FU1lTX09QVF9Nb2JpbGVTcGVha1NtYXJ0cGhvbmUgPSAwWDAyMDAwMDAwLAorICBFVV9FU1lTX09QVF9UYWxrcyAgICAgICAgICAgICAgICAgPSAwWDA0MDAwMDAwLAorICBFVV9FU1lTX09QVF9PcmFuZ2UgICAgICAgICAgICAgICAgPSAwWDA4MDAwMDAwLAorICBFVV9FU1lTX09QVF9UcmFja2VyICAgICAgICAgICAgICAgPSAwWDEwMDAwMDAwCit9IEVVX0VzeXNPcHRpb247CisKK3R5cGVkZWYgZW51bSB7CisgIEVVX05BVl9TaGFycCA9IDBYMjMsCisgIEVVX05BVl9TdGFyICA9IDBYMkEsCisKKyAgRVVfTkFWX1plcm8gID0gMFgzMCwKKyAgRVVfTkFWX09uZSAgID0gMFgzMSwKKyAgRVVfTkFWX1R3byAgID0gMFgzMiwKKyAgRVVfTkFWX1RocmVlID0gMFgzMywKKyAgRVVfTkFWX0ZvdXIgID0gMFgzNCwKKyAgRVVfTkFWX0ZpdmUgID0gMFgzNSwKKyAgRVVfTkFWX1NpeCAgID0gMFgzNiwKKyAgRVVfTkFWX1NldmVuID0gMFgzNywKKyAgRVVfTkFWX0VpZ2h0ID0gMFgzOCwKKyAgRVVfTkFWX05pbmUgID0gMFgzOSwKKworICBFVV9OQVZfQSAgICAgPSAwWDQxLAorICBFVV9OQVZfQiAgICAgPSAwWDQyLAorICBFVV9OQVZfQyAgICAgPSAwWDQzLAorICBFVV9OQVZfRCAgICAgPSAwWDQ0LAorICBFVV9OQVZfRSAgICAgPSAwWDQ1LAorICBFVV9OQVZfRiAgICAgPSAwWDQ2LAorICBFVV9OQVZfRyAgICAgPSAwWDQ3LAorICBFVV9OQVZfSCAgICAgPSAwWDQ4LAorICBFVV9OQVZfSSAgICAgPSAwWDQ5LAorICBFVV9OQVZfSiAgICAgPSAwWDRBLAorICBFVV9OQVZfSyAgICAgPSAwWDRCLAorICBFVV9OQVZfTCAgICAgPSAwWDRDLAorICBFVV9OQVZfTSAgICAgPSAwWDRELAorfSBFVV9OYXZpZ2F0aW9uS2V5OworCit0eXBlZGVmIGVudW0geworICBFVV9JTlRfRG9sbGFyID0gMFg4MSwKKyAgRVVfSU5UX1UgICAgICA9IDBYODIsCisgIEVVX0lOVF9aICAgICAgPSAwWDgzLAorCisgIEVVX0lOVF9WICAgICAgPSAwWDg4LAorICBFVV9JTlRfVyAgICAgID0gMFg4OSwKKyAgRVVfSU5UX1ggICAgICA9IDBYOEEsCisgIEVVX0lOVF9ZICAgICAgPSAwWDhCCit9IEVVX0ludGVyYWN0aXZlS2V5OworCit0eXBlZGVmIGVudW0geworICBFVV9ET1RfMSA9ICAwLAorICBFVV9ET1RfMiA9ICAxLAorICBFVV9ET1RfMyA9ICAyLAorICBFVV9ET1RfNCA9ICAzLAorICBFVV9ET1RfNSA9ICA0LAorICBFVV9ET1RfNiA9ICA1LAorICBFVV9ET1RfQiA9ICA2LAorICBFVV9ET1RfUyA9ICA3LAorICBFVV9ET1RfNyA9ICA4LAorICBFVV9ET1RfOCA9ICA5Cit9IEVVX0RvdEtleTsKKwordHlwZWRlZiBlbnVtIHsKKyAgLyogSXJpcyBsaW5lYXIgYW5kIGFycm93IGtleXMgKi8KKyAgRVVfQ01EX0wxICAgID0gIDAsCisgIEVVX0NNRF9MMiAgICA9ICAxLAorICBFVV9DTURfTDMgICAgPSAgMiwKKyAgRVVfQ01EX0w0ICAgID0gIDMsCisgIEVVX0NNRF9MNSAgICA9ICA0LAorICBFVV9DTURfTDYgICAgPSAgNSwKKyAgRVVfQ01EX0w3ICAgID0gIDYsCisgIEVVX0NNRF9MOCAgICA9ICA3LAorICBFVV9DTURfVXAgICAgPSAgOCwKKyAgRVVfQ01EX0Rvd24gID0gIDksCisgIEVVX0NNRF9SaWdodCA9IDEwLAorICBFVV9DTURfTGVmdCAgPSAxMSwKKworICAvKiBFc3l0aW1lIGZ1bmN0aW9uIGtleXMgKi8KKyAgRVVfQ01EX0YxID0gIDAsCisgIEVVX0NNRF9GMiA9ICAxLAorICBFVV9DTURfRjMgPSAgMiwKKyAgRVVfQ01EX0Y0ID0gIDMsCisgIEVVX0NNRF9GOCA9ICA0LAorICBFVV9DTURfRjcgPSAgNSwKKyAgRVVfQ01EX0Y2ID0gIDYsCisgIEVVX0NNRF9GNSA9ICA3LAorCisgIC8qIEVzeXMgc3dpdGNoZXMgKi8KKyAgRVVfQ01EX1N3aXRjaDFSaWdodCA9ICAwLAorICBFVV9DTURfU3dpdGNoMUxlZnQgID0gIDEsCisgIEVVX0NNRF9Td2l0Y2gyUmlnaHQgPSAgMiwKKyAgRVVfQ01EX1N3aXRjaDJMZWZ0ICA9ICAzLAorICBFVV9DTURfU3dpdGNoM1JpZ2h0ID0gIDQsCisgIEVVX0NNRF9Td2l0Y2gzTGVmdCAgPSAgNSwKKyAgRVVfQ01EX1N3aXRjaDRSaWdodCA9ICA2LAorICBFVV9DTURfU3dpdGNoNExlZnQgID0gIDcsCisgIEVVX0NNRF9Td2l0Y2g1UmlnaHQgPSAgOCwKKyAgRVVfQ01EX1N3aXRjaDVMZWZ0ICA9ICA5LAorICBFVV9DTURfU3dpdGNoNlJpZ2h0ID0gMTAsCisgIEVVX0NNRF9Td2l0Y2g2TGVmdCAgPSAxMSwKKworICAvKiBFc3lzIGFuZCBFc3l0aW1lIGpveXN0aWNrICMxICovCisgIEVVX0NNRF9MZWZ0Sm95c3RpY2tVcCAgICA9IDE2LAorICBFVV9DTURfTGVmdEpveXN0aWNrRG93biAgPSAxNywKKyAgRVVfQ01EX0xlZnRKb3lzdGlja1JpZ2h0ID0gMTgsCisgIEVVX0NNRF9MZWZ0Sm95c3RpY2tMZWZ0ICA9IDE5LAorICBFVV9DTURfTGVmdEpveXN0aWNrUHJlc3MgPSAyMCwgLy8gYWN0aXZhdGVzIGludGVybmFsIG1lbnUKKworICAvKiBFc3lzIGFuZCBFc3l0aW1lIGpveXN0aWNrICMyICovCisgIEVVX0NNRF9SaWdodEpveXN0aWNrVXAgICAgPSAyNCwKKyAgRVVfQ01EX1JpZ2h0Sm95c3RpY2tEb3duICA9IDI1LAorICBFVV9DTURfUmlnaHRKb3lzdGlja1JpZ2h0ID0gMjYsCisgIEVVX0NNRF9SaWdodEpveXN0aWNrTGVmdCAgPSAyNywKKyAgRVVfQ01EX1JpZ2h0Sm95c3RpY2tQcmVzcyA9IDI4LAorfSBFVV9Db21tYW5kS2V5OworCit0eXBlZGVmIGVudW0geworICBFVV9CUkxfRG90MSAgICAgID0gIDAsCisgIEVVX0JSTF9Eb3QyICAgICAgPSAgMSwKKyAgRVVfQlJMX0RvdDMgICAgICA9ICAyLAorICBFVV9CUkxfRG90NCAgICAgID0gIDMsCisgIEVVX0JSTF9Eb3Q1ICAgICAgPSAgNCwKKyAgRVVfQlJMX0RvdDYgICAgICA9ICA1LAorICBFVV9CUkxfRG90NyAgICAgID0gIDYsCisgIEVVX0JSTF9Eb3Q4ICAgICAgPSAgNywKKyAgRVVfQlJMX0JhY2tzcGFjZSA9ICA4LAorICBFVV9CUkxfU3BhY2UgICAgID0gIDkKK30gRVVfQnJhaWxsZUtleTsKKwordHlwZWRlZiBlbnVtIHsKKyAgRVVfR1JQX05hdmlnYXRpb25LZXlzLAorICBFVV9HUlBfSW50ZXJhY3RpdmVLZXlzLAorICBFVV9HUlBfQ29tbWFuZEtleXMsCisgIEVVX0dSUF9CcmFpbGxlS2V5cywKKyAgRVVfR1JQX1JvdXRpbmdLZXlzMSwKKyAgRVVfR1JQX1JvdXRpbmdLZXlzMgorfSBFVV9LZXlHcm91cDsKKworI2VuZGlmIC8qIEJSTFRUWV9JTkNMVURFRF9FVV9CUkxERUZTICovIApkaWZmIC0tZ2l0IGEvRHJpdmVycy9CcmFpbGxlL0V1cm9CcmFpbGxlL2V1X2JyYWlsbGUuYyBiL0RyaXZlcnMvQnJhaWxsZS9FdXJvQnJhaWxsZS9ldV9icmFpbGxlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjZhNGNjNQotLS0gL2Rldi9udWxsCisrKyBiL0RyaXZlcnMvQnJhaWxsZS9FdXJvQnJhaWxsZS9ldV9icmFpbGxlLmMKQEAgLTAsMCArMSw0MDQgQEAKKy8qCisgKiBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorICogICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorICoKKyAqIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorICoKKyAqIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyAqLworCisvKioKKyAqKiBicmwuYyAtLSBFdXJvQnJhaWxsZSBjb3JlIGRyaXZlciBmaWxlLgorICoqIE1hZGUgYnkgWWFubmljayBQTEFTU0lBUkQgYW5kIE9saXZpZXIgQkVSVAorICovCisKKyNpbmNsdWRlICJwcm9sb2d1ZS5oIgorCit0eXBlZGVmIGVudW0geworICBQQVJNX1BST1RPQ09MCit9CQlEcml2ZXJQYXJhbWV0ZXI7CisKKyNkZWZpbmUgQlJMUEFSTVMgInByb3RvY29sIgorCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorCisjaW5jbHVkZSAibWVzc2FnZS5oIgorI2luY2x1ZGUgImxvZy5oIgorCisjZGVmaW5lIEJSTF9IQVZFX1BBQ0tFVF9JTworI2luY2x1ZGUgImJybF9kcml2ZXIuaCIKKyNpbmNsdWRlICJwYXJzZS5oIgorI2luY2x1ZGUgImFzeW5jX3dhaXQuaCIKKworI2luY2x1ZGUJImV1X3Byb3RvY29sLmgiCisKKworQkVHSU5fS0VZX1RBQkxFX0xJU1QKKyAgJktFWV9UQUJMRV9ERUZJTklUSU9OKGNsaW8pLAorICAmS0VZX1RBQkxFX0RFRklOSVRJT04oaXJpcyksCisgICZLRVlfVEFCTEVfREVGSU5JVElPTihlc3lzX3NtYWxsKSwKKyAgJktFWV9UQUJMRV9ERUZJTklUSU9OKGVzeXNfbWVkaXVtKSwKKyAgJktFWV9UQUJMRV9ERUZJTklUSU9OKGVzeXNfbGFyZ2UpLAorICAmS0VZX1RBQkxFX0RFRklOSVRJT04oZXN5dGltZSksCitFTkRfS0VZX1RBQkxFX0xJU1QKKworY29uc3QgSW5wdXRPdXRwdXRPcGVyYXRpb25zICppbyA9IE5VTEw7CitzdGF0aWMgY29uc3QgUHJvdG9jb2xPcGVyYXRpb25zICpwcm90b2NvbCA9IE5VTEw7CisKK3N0YXRpYyBpbmxpbmUgdm9pZAordXBkYXRlV3JpdGVEZWxheSAoQnJhaWxsZURpc3BsYXkgKmJybCwgc2l6ZV90IGNvdW50KSB7CisgIGJybC0+d3JpdGVEZWxheSArPSBnaW9HZXRNaWxsaXNlY29uZHNUb1RyYW5zZmVyKGJybC0+Z2lvRW5kcG9pbnQsIGNvdW50KTsKK30KKworc3RhdGljIGludAorYXdhaXRJbnB1dF9nZW5lcmljIChCcmFpbGxlRGlzcGxheSAqYnJsLCBpbnQgdGltZW91dCkgeworICByZXR1cm4gYXdhaXRCcmFpbGxlSW5wdXQoYnJsLCB0aW1lb3V0KTsKK30KKworc3RhdGljIGludAorcmVhZEJ5dGVfZ2VuZXJpYyAoQnJhaWxsZURpc3BsYXkgKmJybCwgdW5zaWduZWQgY2hhciAqYnl0ZSwgaW50IHdhaXQpIHsKKyAgcmV0dXJuIGdpb1JlYWRCeXRlKGJybC0+Z2lvRW5kcG9pbnQsIGJ5dGUsIHdhaXQpOworfQorCitzdGF0aWMgc3NpemVfdAord3JpdGVEYXRhX2dlbmVyaWMgKEJyYWlsbGVEaXNwbGF5ICpicmwsIGNvbnN0IHZvaWQgKmRhdGEsIHNpemVfdCBsZW5ndGgpIHsKKyAgdXBkYXRlV3JpdGVEZWxheShicmwsIGxlbmd0aCk7CisgIHJldHVybiBnaW9Xcml0ZURhdGEoYnJsLT5naW9FbmRwb2ludCwgZGF0YSwgbGVuZ3RoKTsKK30KKworc3RhdGljIHNzaXplX3QKK3dyaXRlRGF0YV9VU0IgKEJyYWlsbGVEaXNwbGF5ICpicmwsIGNvbnN0IHZvaWQgKmRhdGEsIHNpemVfdCBsZW5ndGgpIHsKKyAgc2l6ZV90IG9mZnNldCA9IDA7CisKKyAgd2hpbGUgKG9mZnNldCA8IGxlbmd0aCkgeworICAgIHVuc2lnbmVkIGNoYXIgcmVwb3J0WzY0XTsKKyAgICBzaXplX3QgY291bnQgPSBsZW5ndGggLSBvZmZzZXQ7CisKKyAgICBpZiAoY291bnQgPiBzaXplb2YocmVwb3J0KSkgeworICAgICAgY291bnQgPSBzaXplb2YocmVwb3J0KTsKKyAgICB9IGVsc2UgeworICAgICAgbWVtc2V0KCZyZXBvcnRbY291bnRdLCAwWDU1LCAoc2l6ZW9mKHJlcG9ydCkgLSBjb3VudCkpOworICAgIH0KKyAgICBtZW1jcHkocmVwb3J0LCBkYXRhK29mZnNldCwgY291bnQpOworCisgICAgdXBkYXRlV3JpdGVEZWxheShicmwsIHNpemVvZihyZXBvcnQpKTsKKyAgICBpZiAoZ2lvU2V0SGlkUmVwb3J0KGJybC0+Z2lvRW5kcG9pbnQsIDAsIHJlcG9ydCwgc2l6ZW9mKHJlcG9ydCkpIDwgMCkgcmV0dXJuIC0xOworCisgICAgb2Zmc2V0ICs9IGNvdW50OworICB9CisKKyAgcmV0dXJuIGxlbmd0aDsKK30KKworc3RhdGljIGNvbnN0IElucHV0T3V0cHV0T3BlcmF0aW9ucyBzZXJpYWxPcGVyYXRpb25zID0geworICAuYXdhaXRJbnB1dCA9IGF3YWl0SW5wdXRfZ2VuZXJpYywKKyAgLnJlYWRCeXRlID0gcmVhZEJ5dGVfZ2VuZXJpYywKKyAgLndyaXRlRGF0YSA9IHdyaXRlRGF0YV9nZW5lcmljCit9OworCitzdGF0aWMgY29uc3QgSW5wdXRPdXRwdXRPcGVyYXRpb25zIHVzYk9wZXJhdGlvbnMgPSB7CisgIC5wcm90b2NvbCA9ICZlc3lzaXJpc1Byb3RvY29sT3BlcmF0aW9ucywKKyAgLmF3YWl0SW5wdXQgPSBhd2FpdElucHV0X2dlbmVyaWMsCisgIC5yZWFkQnl0ZSA9IHJlYWRCeXRlX2dlbmVyaWMsCisgIC53cml0ZURhdGEgPSB3cml0ZURhdGFfVVNCCit9OworCitzdGF0aWMgY29uc3QgSW5wdXRPdXRwdXRPcGVyYXRpb25zIGJsdWV0b290aE9wZXJhdGlvbnMgPSB7CisgIC5wcm90b2NvbCA9ICZlc3lzaXJpc1Byb3RvY29sT3BlcmF0aW9ucywKKyAgLmF3YWl0SW5wdXQgPSBhd2FpdElucHV0X2dlbmVyaWMsCisgIC5yZWFkQnl0ZSA9IHJlYWRCeXRlX2dlbmVyaWMsCisgIC53cml0ZURhdGEgPSB3cml0ZURhdGFfZ2VuZXJpYworfTsKKworc3RhdGljIGludAorY29ubmVjdFJlc291cmNlIChCcmFpbGxlRGlzcGxheSAqYnJsLCBjb25zdCBjaGFyICppZGVudGlmaWVyKSB7CisgIHN0YXRpYyBjb25zdCBTZXJpYWxQYXJhbWV0ZXJzIHNlcmlhbFBhcmFtZXRlcnMgPSB7CisgICAgU0VSSUFMX0RFRkFVTFRfUEFSQU1FVEVSUywKKyAgICAuYmF1ZCA9IDk2MDAsCisgICAgLnBhcml0eSA9IFNFUklBTF9QQVJJVFlfRVZFTgorICB9OworCisgIEJFR0lOX1VTQl9DSEFOTkVMX0RFRklOSVRJT05TCisgICAgeyAvKiBFc3lzICh2ZXJzaW9uIDwgMy4wLCBubyBTRCBjYXJkKSAqLworICAgICAgLnZlbmRvcj0wWEMyNTEsIC5wcm9kdWN0PTBYMTEyMiwKKyAgICAgIC5jb25maWd1cmF0aW9uPTEsIC5pbnRlcmZhY2U9MCwgLmFsdGVybmF0aXZlPTAsCisgICAgICAuaW5wdXRFbmRwb2ludD0xLCAub3V0cHV0RW5kcG9pbnQ9MCwKKyAgICAgIC5kaXNhYmxlRW5kcG9pbnRSZXNldCA9IDEKKyAgICB9LAorCisgICAgeyAvKiByZXNlcnZlZCAqLworICAgICAgLnZlbmRvcj0wWEMyNTEsIC5wcm9kdWN0PTBYMTEyMywKKyAgICAgIC5jb25maWd1cmF0aW9uPTEsIC5pbnRlcmZhY2U9MCwgLmFsdGVybmF0aXZlPTAsCisgICAgICAuaW5wdXRFbmRwb2ludD0xLCAub3V0cHV0RW5kcG9pbnQ9MCwKKyAgICAgIC5kaXNhYmxlRW5kcG9pbnRSZXNldCA9IDEKKyAgICB9LAorCisgICAgeyAvKiBFc3lzICh2ZXJzaW9uIDwgMy4wLCB3aXRoIFNEIGNhcmQpICovCisgICAgICAudmVuZG9yPTBYQzI1MSwgLnByb2R1Y3Q9MFgxMTI0LAorICAgICAgLmNvbmZpZ3VyYXRpb249MSwgLmludGVyZmFjZT0wLCAuYWx0ZXJuYXRpdmU9MCwKKyAgICAgIC5pbnB1dEVuZHBvaW50PTEsIC5vdXRwdXRFbmRwb2ludD0wLAorICAgICAgLmRpc2FibGVFbmRwb2ludFJlc2V0ID0gMQorICAgIH0sCisKKyAgICB7IC8qIHJlc2VydmVkICovCisgICAgICAudmVuZG9yPTBYQzI1MSwgLnByb2R1Y3Q9MFgxMTI1LAorICAgICAgLmNvbmZpZ3VyYXRpb249MSwgLmludGVyZmFjZT0wLCAuYWx0ZXJuYXRpdmU9MCwKKyAgICAgIC5pbnB1dEVuZHBvaW50PTEsIC5vdXRwdXRFbmRwb2ludD0wLAorICAgICAgLmRpc2FibGVFbmRwb2ludFJlc2V0ID0gMQorICAgIH0sCisKKyAgICB7IC8qIEVzeXMgKHZlcnNpb24gPj0gMy4wLCBubyBTRCBjYXJkKSAqLworICAgICAgLnZlbmRvcj0wWEMyNTEsIC5wcm9kdWN0PTBYMTEyNiwKKyAgICAgIC5jb25maWd1cmF0aW9uPTEsIC5pbnRlcmZhY2U9MCwgLmFsdGVybmF0aXZlPTAsCisgICAgICAuaW5wdXRFbmRwb2ludD0xLCAub3V0cHV0RW5kcG9pbnQ9MCwKKyAgICAgIC5kaXNhYmxlRW5kcG9pbnRSZXNldCA9IDEKKyAgICB9LAorCisgICAgeyAvKiByZXNlcnZlZCAqLworICAgICAgLnZlbmRvcj0wWEMyNTEsIC5wcm9kdWN0PTBYMTEyNywKKyAgICAgIC5jb25maWd1cmF0aW9uPTEsIC5pbnRlcmZhY2U9MCwgLmFsdGVybmF0aXZlPTAsCisgICAgICAuaW5wdXRFbmRwb2ludD0xLCAub3V0cHV0RW5kcG9pbnQ9MCwKKyAgICAgIC5kaXNhYmxlRW5kcG9pbnRSZXNldCA9IDEKKyAgICB9LAorCisgICAgeyAvKiBFc3lzICh2ZXJzaW9uID49IDMuMCwgd2l0aCBTRCBjYXJkKSAqLworICAgICAgLnZlbmRvcj0wWEMyNTEsIC5wcm9kdWN0PTBYMTEyOCwKKyAgICAgIC5jb25maWd1cmF0aW9uPTEsIC5pbnRlcmZhY2U9MCwgLmFsdGVybmF0aXZlPTAsCisgICAgICAuaW5wdXRFbmRwb2ludD0xLCAub3V0cHV0RW5kcG9pbnQ9MCwKKyAgICAgIC5kaXNhYmxlRW5kcG9pbnRSZXNldCA9IDEKKyAgICB9LAorCisgICAgeyAvKiByZXNlcnZlZCAqLworICAgICAgLnZlbmRvcj0wWEMyNTEsIC5wcm9kdWN0PTBYMTEyOSwKKyAgICAgIC5jb25maWd1cmF0aW9uPTEsIC5pbnRlcmZhY2U9MCwgLmFsdGVybmF0aXZlPTAsCisgICAgICAuaW5wdXRFbmRwb2ludD0xLCAub3V0cHV0RW5kcG9pbnQ9MCwKKyAgICAgIC5kaXNhYmxlRW5kcG9pbnRSZXNldCA9IDEKKyAgICB9LAorCisgICAgeyAvKiByZXNlcnZlZCAqLworICAgICAgLnZlbmRvcj0wWEMyNTEsIC5wcm9kdWN0PTBYMTEyQSwKKyAgICAgIC5jb25maWd1cmF0aW9uPTEsIC5pbnRlcmZhY2U9MCwgLmFsdGVybmF0aXZlPTAsCisgICAgICAuaW5wdXRFbmRwb2ludD0xLCAub3V0cHV0RW5kcG9pbnQ9MCwKKyAgICAgIC5kaXNhYmxlRW5kcG9pbnRSZXNldCA9IDEKKyAgICB9LAorCisgICAgeyAvKiByZXNlcnZlZCAqLworICAgICAgLnZlbmRvcj0wWEMyNTEsIC5wcm9kdWN0PTBYMTEyQiwKKyAgICAgIC5jb25maWd1cmF0aW9uPTEsIC5pbnRlcmZhY2U9MCwgLmFsdGVybmF0aXZlPTAsCisgICAgICAuaW5wdXRFbmRwb2ludD0xLCAub3V0cHV0RW5kcG9pbnQ9MCwKKyAgICAgIC5kaXNhYmxlRW5kcG9pbnRSZXNldCA9IDEKKyAgICB9LAorCisgICAgeyAvKiByZXNlcnZlZCAqLworICAgICAgLnZlbmRvcj0wWEMyNTEsIC5wcm9kdWN0PTBYMTEyQywKKyAgICAgIC5jb25maWd1cmF0aW9uPTEsIC5pbnRlcmZhY2U9MCwgLmFsdGVybmF0aXZlPTAsCisgICAgICAuaW5wdXRFbmRwb2ludD0xLCAub3V0cHV0RW5kcG9pbnQ9MCwKKyAgICAgIC5kaXNhYmxlRW5kcG9pbnRSZXNldCA9IDEKKyAgICB9LAorCisgICAgeyAvKiByZXNlcnZlZCAqLworICAgICAgLnZlbmRvcj0wWEMyNTEsIC5wcm9kdWN0PTBYMTEyRCwKKyAgICAgIC5jb25maWd1cmF0aW9uPTEsIC5pbnRlcmZhY2U9MCwgLmFsdGVybmF0aXZlPTAsCisgICAgICAuaW5wdXRFbmRwb2ludD0xLCAub3V0cHV0RW5kcG9pbnQ9MCwKKyAgICAgIC5kaXNhYmxlRW5kcG9pbnRSZXNldCA9IDEKKyAgICB9LAorCisgICAgeyAvKiByZXNlcnZlZCAqLworICAgICAgLnZlbmRvcj0wWEMyNTEsIC5wcm9kdWN0PTBYMTEyRSwKKyAgICAgIC5jb25maWd1cmF0aW9uPTEsIC5pbnRlcmZhY2U9MCwgLmFsdGVybmF0aXZlPTAsCisgICAgICAuaW5wdXRFbmRwb2ludD0xLCAub3V0cHV0RW5kcG9pbnQ9MCwKKyAgICAgIC5kaXNhYmxlRW5kcG9pbnRSZXNldCA9IDEKKyAgICB9LAorCisgICAgeyAvKiByZXNlcnZlZCAqLworICAgICAgLnZlbmRvcj0wWEMyNTEsIC5wcm9kdWN0PTBYMTEyRiwKKyAgICAgIC5jb25maWd1cmF0aW9uPTEsIC5pbnRlcmZhY2U9MCwgLmFsdGVybmF0aXZlPTAsCisgICAgICAuaW5wdXRFbmRwb2ludD0xLCAub3V0cHV0RW5kcG9pbnQ9MCwKKyAgICAgIC5kaXNhYmxlRW5kcG9pbnRSZXNldCA9IDEKKyAgICB9LAorCisgICAgeyAvKiBFc3l0aW1lICovCisgICAgICAudmVuZG9yPTBYQzI1MSwgLnByb2R1Y3Q9MFgxMTMwLAorICAgICAgLmNvbmZpZ3VyYXRpb249MSwgLmludGVyZmFjZT0wLCAuYWx0ZXJuYXRpdmU9MCwKKyAgICAgIC5pbnB1dEVuZHBvaW50PTEsIC5vdXRwdXRFbmRwb2ludD0wLAorICAgICAgLnZlcmlmeUludGVyZmFjZSA9IDEsCisgICAgICAuZGlzYWJsZUVuZHBvaW50UmVzZXQgPSAxCisgICAgfSwKKworICAgIHsgLyogRXN5dGltZSAoZmlybXdhcmUgMS4wMywgMjAxNC0wMy0zMSkgKi8KKyAgICAgIC52ZW5kb3I9MFhDMjUxLCAucHJvZHVjdD0wWDExMzAsCisgICAgICAuY29uZmlndXJhdGlvbj0xLCAuaW50ZXJmYWNlPTAsIC5hbHRlcm5hdGl2ZT0wLAorICAgICAgLmlucHV0RW5kcG9pbnQ9NywgLm91dHB1dEVuZHBvaW50PTAsCisgICAgICAudmVyaWZ5SW50ZXJmYWNlID0gMSwKKyAgICAgIC5kaXNhYmxlRW5kcG9pbnRSZXNldCA9IDEKKyAgICB9LAorCisgICAgeyAvKiByZXNlcnZlZCAqLworICAgICAgLnZlbmRvcj0wWEMyNTEsIC5wcm9kdWN0PTBYMTEzMSwKKyAgICAgIC5jb25maWd1cmF0aW9uPTEsIC5pbnRlcmZhY2U9MCwgLmFsdGVybmF0aXZlPTAsCisgICAgICAuaW5wdXRFbmRwb2ludD0xLCAub3V0cHV0RW5kcG9pbnQ9MCwKKyAgICAgIC5kaXNhYmxlRW5kcG9pbnRSZXNldCA9IDEKKyAgICB9LAorCisgICAgeyAvKiByZXNlcnZlZCAqLworICAgICAgLnZlbmRvcj0wWEMyNTEsIC5wcm9kdWN0PTBYMTEzMiwKKyAgICAgIC5jb25maWd1cmF0aW9uPTEsIC5pbnRlcmZhY2U9MCwgLmFsdGVybmF0aXZlPTAsCisgICAgICAuaW5wdXRFbmRwb2ludD0xLCAub3V0cHV0RW5kcG9pbnQ9MCwKKyAgICAgIC5kaXNhYmxlRW5kcG9pbnRSZXNldCA9IDEKKyAgICB9LAorICBFTkRfVVNCX0NIQU5ORUxfREVGSU5JVElPTlMKKworICBHaW9EZXNjcmlwdG9yIGRlc2NyaXB0b3I7CisgIGdpb0luaXRpYWxpemVEZXNjcmlwdG9yKCZkZXNjcmlwdG9yKTsKKworICBkZXNjcmlwdG9yLnNlcmlhbC5wYXJhbWV0ZXJzID0gJnNlcmlhbFBhcmFtZXRlcnM7CisgIGRlc2NyaXB0b3Iuc2VyaWFsLm9wdGlvbnMuYXBwbGljYXRpb25EYXRhID0gJnNlcmlhbE9wZXJhdGlvbnM7CisKKyAgZGVzY3JpcHRvci51c2IuY2hhbm5lbERlZmluaXRpb25zID0gdXNiQ2hhbm5lbERlZmluaXRpb25zOworICBkZXNjcmlwdG9yLnVzYi5vcHRpb25zLmFwcGxpY2F0aW9uRGF0YSA9ICZ1c2JPcGVyYXRpb25zOworCisgIGRlc2NyaXB0b3IuYmx1ZXRvb3RoLmNoYW5uZWxOdW1iZXIgPSAxOworICBkZXNjcmlwdG9yLmJsdWV0b290aC5vcHRpb25zLmFwcGxpY2F0aW9uRGF0YSA9ICZibHVldG9vdGhPcGVyYXRpb25zOworCisgIGlmIChjb25uZWN0QnJhaWxsZVJlc291cmNlKGJybCwgaWRlbnRpZmllciwgJmRlc2NyaXB0b3IsIE5VTEwpKSB7CisgICAgaW8gPSBnaW9HZXRBcHBsaWNhdGlvbkRhdGEoYnJsLT5naW9FbmRwb2ludCk7CisgICAgcmV0dXJuIDE7CisgIH0KKworICByZXR1cm4gMDsKK30KKworc3RhdGljIGludAorYnJsX2NvbnN0cnVjdCAoQnJhaWxsZURpc3BsYXkgKmJybCwgY2hhciAqKnBhcmFtZXRlcnMsIGNvbnN0IGNoYXIgKmRldmljZSkgeworICBpbyA9IE5VTEw7CisgIHByb3RvY29sID0gTlVMTDsKKyAgbWFrZU91dHB1dFRhYmxlKGRvdHNUYWJsZV9JU08xMTU0OF8xKTsKKworICBpZiAocGFyYW1ldGVyc1tQQVJNX1BST1RPQ09MXSkgeworICAgIHN0YXRpYyBjb25zdCBjaGFyICpjb25zdCBjaG9pY2VzW10gPSB7CisgICAgICAiYXV0byIsCisgICAgICAiYXplcmJyYWlsbGUiLCAiY2xpbyIsICJldXJvYnJhaWxsZSIsCisgICAgICAibm90ZWJyYWlsbGUiLCAicHVwaWJyYWlsbGUiLCAic2NyaWJhIiwKKyAgICAgICJlc3lzIiwgImVzeXRpbWUiLCAiaXJpcyIsICJlc3lzaXJpcyIsCisgICAgICBOVUxMCisgICAgfTsKKworICAgIHN0YXRpYyBjb25zdCBQcm90b2NvbE9wZXJhdGlvbnMgKmNvbnN0IHByb3RvY29sc1tdID0geworICAgICAgTlVMTCwgLy8gYXV0bworCisgICAgICAmY2xpb1Byb3RvY29sT3BlcmF0aW9ucywgLy8gYXplcmJyYWlsbGUKKyAgICAgICZjbGlvUHJvdG9jb2xPcGVyYXRpb25zLCAvLyBjbGlvCisgICAgICAmY2xpb1Byb3RvY29sT3BlcmF0aW9ucywgLy8gZXVyb2JyYWlsbGUKKyAgICAgICZjbGlvUHJvdG9jb2xPcGVyYXRpb25zLCAvLyBub3RlYnJhaWxsZQorICAgICAgJmNsaW9Qcm90b2NvbE9wZXJhdGlvbnMsIC8vIHB1cGlicmFpbGxlCisgICAgICAmY2xpb1Byb3RvY29sT3BlcmF0aW9ucywgLy8gc2NyaWJhCisKKyAgICAgICZlc3lzaXJpc1Byb3RvY29sT3BlcmF0aW9ucywgLy8gZXN5cworICAgICAgJmVzeXNpcmlzUHJvdG9jb2xPcGVyYXRpb25zLCAvLyBlc3l0aW1lCisgICAgICAmZXN5c2lyaXNQcm90b2NvbE9wZXJhdGlvbnMsIC8vIGlyaXMKKyAgICAgICZlc3lzaXJpc1Byb3RvY29sT3BlcmF0aW9ucyAgLy8gZXN5c2lyaXMKKyAgICB9OworCisgICAgdW5zaWduZWQgaW50IGNob2ljZTsKKworICAgIGlmICghdmFsaWRhdGVDaG9pY2UoJmNob2ljZSwgcGFyYW1ldGVyc1tQQVJNX1BST1RPQ09MXSwgY2hvaWNlcykpIHsKKyAgICAgIGxvZ01lc3NhZ2UoTE9HX0VSUiwgInVua25vd24gRXVyb0JyYWlsbGUgcHJvdG9jb2w6ICVzIiwgCisgICAgICAgICAgICAgICAgIHBhcmFtZXRlcnNbUEFSTV9QUk9UT0NPTF0pOworICAgICAgY2hvaWNlID0gMDsKKyAgICB9CisKKyAgICBwcm90b2NvbCA9IHByb3RvY29sc1tjaG9pY2VdOworICB9CisKKyAgaWYgKGNvbm5lY3RSZXNvdXJjZShicmwsIGRldmljZSkpIHsKKyAgICBpZiAocHJvdG9jb2wpIHsKKyAgICAgIGlmICghaW8tPnByb3RvY29sIHx8IChpby0+cHJvdG9jb2wgPT0gcHJvdG9jb2wpKSB7CisgICAgICAgIGlmIChwcm90b2NvbC0+aW5pdGlhbGl6ZURldmljZShicmwpKSByZXR1cm4gMTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIGxvZ01lc3NhZ2UoTE9HX0VSUiwgInByb3RvY29sIG5vdCBzdXBwb3J0ZWQgYnkgZGV2aWNlOiAlcyIsIHByb3RvY29sLT5wcm90b2NvbE5hbWUpOworICAgICAgfQorICAgIH0gZWxzZSBpZiAoaW8tPnByb3RvY29sKSB7CisgICAgICBwcm90b2NvbCA9IGlvLT5wcm90b2NvbDsKKyAgICAgIGlmIChwcm90b2NvbC0+aW5pdGlhbGl6ZURldmljZShicmwpKSByZXR1cm4gMTsKKyAgICB9IGVsc2UgeworICAgICAgc3RhdGljIGNvbnN0IFByb3RvY29sT3BlcmF0aW9ucyAqY29uc3QgcHJvdG9jb2xzW10gPSB7CisgICAgICAgICZlc3lzaXJpc1Byb3RvY29sT3BlcmF0aW9ucywgJmNsaW9Qcm90b2NvbE9wZXJhdGlvbnMsCisgICAgICAgIE5VTEwKKyAgICAgIH07CisgICAgICBjb25zdCBQcm90b2NvbE9wZXJhdGlvbnMgKmNvbnN0ICpwID0gcHJvdG9jb2xzOworCisgICAgICB3aGlsZSAoKnApIHsKKyAgICAgICAgY29uc3QgUHJvdG9jb2xPcGVyYXRpb25zICpwcm90b2NvbCA9ICpwKys7CisKKyAgICAgICAgbG9nTWVzc2FnZShMT0dfTk9USUNFLCAidHJ5aW5nIHByb3RvY29sOiAlcyIsIHByb3RvY29sLT5wcm90b2NvbE5hbWUpOworICAgICAgICBpZiAocHJvdG9jb2wtPmluaXRpYWxpemVEZXZpY2UoYnJsKSkgcmV0dXJuIDE7CisJYXN5bmNXYWl0KDcwMCk7CisgICAgICB9CisgICAgfQorCisgICAgZGlzY29ubmVjdEJyYWlsbGVSZXNvdXJjZShicmwsIE5VTEwpOworICB9CisKKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkCiticmxfZGVzdHJ1Y3QgKEJyYWlsbGVEaXNwbGF5ICpicmwpIHsKKyAgaWYgKHByb3RvY29sKQorICAgIHsKKyAgICAgIHByb3RvY29sID0gTlVMTDsKKyAgICB9CisgIGRpc2Nvbm5lY3RCcmFpbGxlUmVzb3VyY2UoYnJsLCBOVUxMKTsKK30KKworI2lmZGVmIEJSTF9IQVZFX1BBQ0tFVF9JTworc3RhdGljIHNzaXplX3QKK2JybF9yZWFkUGFja2V0IChCcmFpbGxlRGlzcGxheSAqYnJsLCB2b2lkICpidWZmZXIsIHNpemVfdCBzaXplKSB7CisgIGlmICghcHJvdG9jb2wgfHwgIWlvKQorICAgIHJldHVybiAoLTEpOworICByZXR1cm4gcHJvdG9jb2wtPnJlYWRQYWNrZXQoYnJsLCBidWZmZXIsIHNpemUpOworfQorCitzdGF0aWMgc3NpemVfdAorYnJsX3dyaXRlUGFja2V0IChCcmFpbGxlRGlzcGxheSAqYnJsLCBjb25zdCB2b2lkICpwYWNrZXQsIHNpemVfdCBsZW5ndGgpIHsKKyAgaWYgKCFwcm90b2NvbCB8fCAhaW8pCisgICAgcmV0dXJuICgtMSk7CisgIHJldHVybiBwcm90b2NvbC0+d3JpdGVQYWNrZXQoYnJsLCBwYWNrZXQsIGxlbmd0aCk7Cit9CisKK3N0YXRpYyBpbnQKK2JybF9yZXNldCAoQnJhaWxsZURpc3BsYXkgKmJybCkgeworICBpZiAoIXByb3RvY29sIHx8ICFpbykKKyAgICByZXR1cm4gKC0xKTsKKyAgcmV0dXJuIHByb3RvY29sLT5yZXNldERldmljZShicmwpOworfQorI2VuZGlmIC8qIEJSTF9IQVZFX1BBQ0tFVF9JTyAqLworCitzdGF0aWMgaW50Citicmxfd3JpdGVXaW5kb3cgKEJyYWlsbGVEaXNwbGF5ICpicmwsIGNvbnN0IHdjaGFyX3QgKnRleHQpIHsKKyAgaWYgKCFwcm90b2NvbCkgcmV0dXJuIDE7CisKKyAgaWYgKHRleHQpCisgICAgaWYgKCFwcm90b2NvbC0+d3JpdGVWaXN1YWwoYnJsLCB0ZXh0KSkKKyAgICAgIHJldHVybiAwOworCisgIHJldHVybiBwcm90b2NvbC0+d3JpdGVXaW5kb3coYnJsKTsKK30KKworc3RhdGljIGludAorYnJsX3JlYWRDb21tYW5kIChCcmFpbGxlRGlzcGxheSAqYnJsLCBLZXlUYWJsZUNvbW1hbmRDb250ZXh0IGNvbnRleHQpIHsKKyAgaWYgKHByb3RvY29sKQorICAgIHJldHVybiBwcm90b2NvbC0+cmVhZENvbW1hbmQoYnJsLCBjb250ZXh0KTsKKyAgcmV0dXJuIEVPRjsKK30KZGlmZiAtLWdpdCBhL0RyaXZlcnMvQnJhaWxsZS9FdXJvQnJhaWxsZS9ldV9jbGlvLmMgYi9Ecml2ZXJzL0JyYWlsbGUvRXVyb0JyYWlsbGUvZXVfY2xpby5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMyNmZhM2EKLS0tIC9kZXYvbnVsbAorKysgYi9Ecml2ZXJzL0JyYWlsbGUvRXVyb0JyYWlsbGUvZXVfY2xpby5jCkBAIC0wLDAgKzEsNzQ2IEBACisvKgorICogQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyAqICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyAqCisgKiBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorICoKKyAqIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyAqCisgKiBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisgKi8KKworLyoqIEV1cm9CcmFpbGxlL2V1X2NsaW8uYyAKKyAqKiBJbXBsZW1lbnRzIHRoZSBOb3RlQnJhaWxsZS9DbGlvL1NjcmliYS9JcmlzIDw9IDEuNzAgcHJvdG9jb2wgCisgKiogTWFkZSBieSBPbGl2aWVyIEJFUmAgPG9iZXJ0MDFAbWlzdGlncmkub3JnPgorICovCisKKyNpbmNsdWRlICJwcm9sb2d1ZS5oIgorCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorCisjaW5jbHVkZSAibG9nLmgiCisjaW5jbHVkZSAidGltaW5nLmgiCisjaW5jbHVkZSAiYXNjaWkuaCIKKyNpbmNsdWRlICJicmxkZWZzLWV1LmgiCisjaW5jbHVkZSAiZXVfcHJvdG9jb2wuaCIKKworI2RlZmluZSBCUkFJTExFX0tFWV9FTlRSWShrLG4pIEtFWV9FTlRSWShCcmFpbGxlS2V5cywgRE9ULCBrLCBuKQorI2RlZmluZSBOQVZJR0FUSU9OX0tFWV9FTlRSWShrLG4pIEtFWV9FTlRSWShOYXZpZ2F0aW9uS2V5cywgTkFWLCBrLCBuKQorI2RlZmluZSBJTlRFUkFDVElWRV9LRVlfRU5UUlkoayxuKSBLRVlfRU5UUlkoSW50ZXJhY3RpdmVLZXlzLCBJTlQsIGssIG4pCisKK0JFR0lOX0tFWV9OQU1FX1RBQkxFKGJyYWlsbGUpCisgIEJSQUlMTEVfS0VZX0VOVFJZKDEsICJEb3QxIiksCisgIEJSQUlMTEVfS0VZX0VOVFJZKDIsICJEb3QyIiksCisgIEJSQUlMTEVfS0VZX0VOVFJZKDMsICJEb3QzIiksCisgIEJSQUlMTEVfS0VZX0VOVFJZKDQsICJEb3Q0IiksCisgIEJSQUlMTEVfS0VZX0VOVFJZKDUsICJEb3Q1IiksCisgIEJSQUlMTEVfS0VZX0VOVFJZKDYsICJEb3Q2IiksCisgIEJSQUlMTEVfS0VZX0VOVFJZKDcsICJEb3Q3IiksCisgIEJSQUlMTEVfS0VZX0VOVFJZKDgsICJEb3Q4IiksCisgIEJSQUlMTEVfS0VZX0VOVFJZKEIsICJCYWNrc3BhY2UiKSwKKyAgQlJBSUxMRV9LRVlfRU5UUlkoUywgIlNwYWNlIiksCitFTkRfS0VZX05BTUVfVEFCTEUKKworQkVHSU5fS0VZX05BTUVfVEFCTEUoZnVuY3Rpb24pCisgIE5BVklHQVRJT05fS0VZX0VOVFJZKEUsICJFIiksCisgIE5BVklHQVRJT05fS0VZX0VOVFJZKEYsICJGIiksCisgIE5BVklHQVRJT05fS0VZX0VOVFJZKEcsICJHIiksCisgIE5BVklHQVRJT05fS0VZX0VOVFJZKEgsICJIIiksCisgIE5BVklHQVRJT05fS0VZX0VOVFJZKEksICJJIiksCisgIE5BVklHQVRJT05fS0VZX0VOVFJZKEosICJKIiksCisgIE5BVklHQVRJT05fS0VZX0VOVFJZKEssICJLIiksCisgIE5BVklHQVRJT05fS0VZX0VOVFJZKEwsICJMIiksCisgIE5BVklHQVRJT05fS0VZX0VOVFJZKE0sICJNIiksCitFTkRfS0VZX05BTUVfVEFCTEUKKworQkVHSU5fS0VZX05BTUVfVEFCTEUoa2V5cGFkKQorICBOQVZJR0FUSU9OX0tFWV9FTlRSWShPbmUsICJPbmUiKSwKKyAgTkFWSUdBVElPTl9LRVlfRU5UUlkoVHdvLCAiVXAiKSwKKyAgTkFWSUdBVElPTl9LRVlfRU5UUlkoVGhyZWUsICJUaHJlZSIpLAorICBOQVZJR0FUSU9OX0tFWV9FTlRSWShBLCAiQSIpLAorCisgIE5BVklHQVRJT05fS0VZX0VOVFJZKEZvdXIsICJMZWZ0IiksCisgIE5BVklHQVRJT05fS0VZX0VOVFJZKEZpdmUsICJGaXZlIiksCisgIE5BVklHQVRJT05fS0VZX0VOVFJZKFNpeCwgIlJpZ2h0IiksCisgIE5BVklHQVRJT05fS0VZX0VOVFJZKEIsICJCIiksCisKKyAgTkFWSUdBVElPTl9LRVlfRU5UUlkoU2V2ZW4sICJTZXZlbiIpLAorICBOQVZJR0FUSU9OX0tFWV9FTlRSWShFaWdodCwgIkRvd24iKSwKKyAgTkFWSUdBVElPTl9LRVlfRU5UUlkoTmluZSwgIk5pbmUiKSwKKyAgTkFWSUdBVElPTl9LRVlfRU5UUlkoQywgIkMiKSwKKworICBOQVZJR0FUSU9OX0tFWV9FTlRSWShTdGFyLCAiU3RhciIpLAorICBOQVZJR0FUSU9OX0tFWV9FTlRSWShaZXJvLCAiWmVybyIpLAorICBOQVZJR0FUSU9OX0tFWV9FTlRSWShTaGFycCwgIlNoYXJwIiksCisgIE5BVklHQVRJT05fS0VZX0VOVFJZKEQsICJEIiksCitFTkRfS0VZX05BTUVfVEFCTEUKKworQkVHSU5fS0VZX05BTUVfVEFCTEUoaW50ZXJhY3RpdmUpCisgIElOVEVSQUNUSVZFX0tFWV9FTlRSWShEb2xsYXIsICJEb2xsYXIiKSwKKyAgS0VZX0dST1VQX0VOVFJZKEVVX0dSUF9Sb3V0aW5nS2V5czEsICJSb3V0aW5nS2V5IiksCisgIElOVEVSQUNUSVZFX0tFWV9FTlRSWShVLCAiVSIpLAorICBJTlRFUkFDVElWRV9LRVlfRU5UUlkoViwgIlYiKSwKKyAgSU5URVJBQ1RJVkVfS0VZX0VOVFJZKFcsICJXIiksCisgIElOVEVSQUNUSVZFX0tFWV9FTlRSWShYLCAiWCIpLAorICBJTlRFUkFDVElWRV9LRVlfRU5UUlkoWSwgIlkiKSwKKyAgSU5URVJBQ1RJVkVfS0VZX0VOVFJZKFosICJaIiksCitFTkRfS0VZX05BTUVfVEFCTEUKKworQkVHSU5fS0VZX05BTUVfVEFCTEVTKGNsaW8pCisgIEtFWV9OQU1FX1RBQkxFKGJyYWlsbGUpLAorICBLRVlfTkFNRV9UQUJMRShmdW5jdGlvbiksCisgIEtFWV9OQU1FX1RBQkxFKGtleXBhZCksCisgIEtFWV9OQU1FX1RBQkxFKGludGVyYWN0aXZlKSwKK0VORF9LRVlfTkFNRV9UQUJMRVMKKworUFVCTElDX0tFWV9UQUJMRShjbGlvKQorCisjZGVmaW5lCUlOUFVUX0JVRkZFUl9TSVpFIDEwMjQKKyNkZWZpbmUgTUFYSU1VTV9ESVNQTEFZX1NJWkUgODAKKwordHlwZWRlZiBzdHJ1Y3QgeworICBjaGFyIG1vZGVsQ29kZVszXTsKKyAgY29uc3QgY2hhciAqbW9kZWxOYW1lOworICB1bnNpZ25lZCBjaGFyIGNlbGxDb3VudDsKKyAgdW5zaWduZWQgaXNBemVyQnJhaWxsZToxOworICB1bnNpZ25lZCBpc0V1cm9CcmFpbGxlOjE7CisgIHVuc2lnbmVkIGlzSXJpczoxOworICB1bnNpZ25lZCBpc05vdGVCcmFpbGxlOjE7CisgIHVuc2lnbmVkIGlzUHVwaUJyYWlsbGU6MTsKKyAgdW5zaWduZWQgaXNTY3JpYmE6MTsKKyAgdW5zaWduZWQgaGFzUm91dGluZ0tleXM6MTsKKyAgdW5zaWduZWQgaGFzVmlzdWFsRGlzcGxheToxOworfSBNb2RlbEVudHJ5OworCitzdGF0aWMgY29uc3QgTW9kZWxFbnRyeSBtb2RlbFRhYmxlW10gPSB7CisgIHsgLm1vZGVsQ29kZSA9ICJDRTIiLAorICAgIC5tb2RlbE5hbWUgPSAiQ2xpby1FdXJvQnJhaWxsZSAyMCIsCisgICAgLmNlbGxDb3VudCA9IDIwLAorICAgIC5oYXNSb3V0aW5nS2V5cyA9IDEsCisgICAgLmlzRXVyb0JyYWlsbGUgPSAxCisgIH0sCisKKyAgeyAubW9kZWxDb2RlID0gIkNFNCIsCisgICAgLm1vZGVsTmFtZSA9ICJDbGlvLUV1cm9CcmFpbGxlIDQwIiwKKyAgICAuY2VsbENvdW50ID0gNDAsCisgICAgLmhhc1JvdXRpbmdLZXlzID0gMSwKKyAgICAuaXNFdXJvQnJhaWxsZSA9IDEKKyAgfSwKKworICB7IC5tb2RlbENvZGUgPSAiQ0U4IiwKKyAgICAubW9kZWxOYW1lID0gIkNsaW8tRXVyb0JyYWlsbGUgODAiLAorICAgIC5jZWxsQ291bnQgPSA4MCwKKyAgICAuaGFzUm91dGluZ0tleXMgPSAxLAorICAgIC5pc0V1cm9CcmFpbGxlID0gMQorICB9LAorCisgIHsgLm1vZGVsQ29kZSA9ICJDTjIiLAorICAgIC5tb2RlbE5hbWUgPSAiQ2xpby1Ob3RlQnJhaWxsZSAyMCIsCisgICAgLmNlbGxDb3VudCA9IDIwLAorICAgIC5oYXNSb3V0aW5nS2V5cyA9IDEsCisgICAgLmhhc1Zpc3VhbERpc3BsYXkgPSAxLAorICAgIC5pc05vdGVCcmFpbGxlID0gMQorICB9LAorCisgIHsgLm1vZGVsQ29kZSA9ICJDTjQiLAorICAgIC5tb2RlbE5hbWUgPSAiQ2xpby1Ob3RlQnJhaWxsZSA0MCIsCisgICAgLmNlbGxDb3VudCA9IDQwLAorICAgIC5oYXNSb3V0aW5nS2V5cyA9IDEsCisgICAgLmhhc1Zpc3VhbERpc3BsYXkgPSAxLAorICAgIC5pc05vdGVCcmFpbGxlID0gMQorICB9LAorCisgIHsgLm1vZGVsQ29kZSA9ICJDTjgiLAorICAgIC5tb2RlbE5hbWUgPSAiQ2xpby1Ob3RlQnJhaWxsZSA4MCIsCisgICAgLmNlbGxDb3VudCA9IDgwLAorICAgIC5oYXNSb3V0aW5nS2V5cyA9IDEsCisgICAgLmhhc1Zpc3VhbERpc3BsYXkgPSAxLAorICAgIC5pc05vdGVCcmFpbGxlID0gMQorICB9LAorCisgIHsgLm1vZGVsQ29kZSA9ICJDcDIiLAorICAgIC5tb2RlbE5hbWUgPSAiQ2xpby1QdXBpQnJhaWxsZSAyMCIsCisgICAgLmNlbGxDb3VudCA9IDIwLAorICAgIC5oYXNSb3V0aW5nS2V5cyA9IDEsCisgICAgLmlzUHVwaUJyYWlsbGUgPSAxCisgIH0sCisKKyAgeyAubW9kZWxDb2RlID0gIkNwNCIsCisgICAgLm1vZGVsTmFtZSA9ICJDbGlvLVB1cGlCcmFpbGxlIDQwIiwKKyAgICAuY2VsbENvdW50ID0gNDAsCisgICAgLmhhc1JvdXRpbmdLZXlzID0gMSwKKyAgICAuaXNQdXBpQnJhaWxsZSA9IDEKKyAgfSwKKworICB7IC5tb2RlbENvZGUgPSAiQ3A4IiwKKyAgICAubW9kZWxOYW1lID0gIkNsaW8tUHVwaUJyYWlsbGUgODAiLAorICAgIC5jZWxsQ291bnQgPSA4MCwKKyAgICAuaGFzUm91dGluZ0tleXMgPSAxLAorICAgIC5pc1B1cGlCcmFpbGxlID0gMQorICB9LAorCisgIHsgLm1vZGVsQ29kZSA9ICJDWjQiLAorICAgIC5tb2RlbE5hbWUgPSAiQ2xpby1BemVyQnJhaWxsZSA0MCIsCisgICAgLmNlbGxDb3VudCA9IDQwLAorICAgIC5oYXNSb3V0aW5nS2V5cyA9IDEsCisgICAgLmhhc1Zpc3VhbERpc3BsYXkgPSAxLAorICAgIC5pc0F6ZXJCcmFpbGxlID0gMQorICB9LAorCisgIHsgLm1vZGVsQ29kZSA9ICJKTjIiLAorICAgIC5tb2RlbE5hbWUgPSAiSnVuaW9yLU5vdGVCcmFpbGxlIDIwIiwKKyAgICAuY2VsbENvdW50ID0gMjAsCisgICAgLmhhc1Zpc3VhbERpc3BsYXkgPSAxLAorICAgIC5pc05vdGVCcmFpbGxlID0gMQorICB9LAorCisgIHsgLm1vZGVsQ29kZSA9ICJOQjIiLAorICAgIC5tb2RlbE5hbWUgPSAiTm90ZUJyYWlsbGUgMjAiLAorICAgIC5jZWxsQ291bnQgPSAyMCwKKyAgICAuaGFzVmlzdWFsRGlzcGxheSA9IDEsCisgICAgLmlzTm90ZUJyYWlsbGUgPSAxCisgIH0sCisKKyAgeyAubW9kZWxDb2RlID0gIk5CNCIsCisgICAgLm1vZGVsTmFtZSA9ICJOb3RlQnJhaWxsZSA0MCIsCisgICAgLmNlbGxDb3VudCA9IDQwLAorICAgIC5oYXNWaXN1YWxEaXNwbGF5ID0gMSwKKyAgICAuaXNOb3RlQnJhaWxsZSA9IDEKKyAgfSwKKworICB7IC5tb2RlbENvZGUgPSAiTkI4IiwKKyAgICAubW9kZWxOYW1lID0gIk5wb3RlQnJhaWxsZSA4MCIsCisgICAgLmNlbGxDb3VudCA9IDgwLAorICAgIC5oYXNWaXN1YWxEaXNwbGF5ID0gMSwKKyAgICAuaXNOb3RlQnJhaWxsZSA9IDEKKyAgfSwKKworICB7IC5tb2RlbENvZGUgPSAiSlMyIiwKKyAgICAubW9kZWxOYW1lID0gIkp1bmlvci1TY3JpYmEgMjAiLAorICAgIC5jZWxsQ291bnQgPSAyMCwKKyAgICAuaGFzUm91dGluZ0tleXMgPSAxLAorICAgIC5pc1NjcmliYSA9IDEKKyAgfSwKKworICB7IC5tb2RlbENvZGUgPSAiU0IyIiwKKyAgICAubW9kZWxOYW1lID0gIlNjcmliYSAyMCIsCisgICAgLmNlbGxDb3VudCA9IDIwLAorICAgIC5oYXNSb3V0aW5nS2V5cyA9IDEsCisgICAgLmlzU2NyaWJhID0gMQorICB9LAorCisgIHsgLm1vZGVsQ29kZSA9ICJTQjQiLAorICAgIC5tb2RlbE5hbWUgPSAiU2NyaWJhIDQwIiwKKyAgICAuY2VsbENvdW50ID0gNDAsCisgICAgLmhhc1JvdXRpbmdLZXlzID0gMSwKKyAgICAuaXNTY3JpYmEgPSAxCisgIH0sCisKKyAgeyAubW9kZWxDb2RlID0gIlNDMiIsCisgICAgLm1vZGVsTmFtZSA9ICJTY3JpYmEgMjAiLAorICAgIC5jZWxsQ291bnQgPSAyMAorICB9LAorCisgIHsgLm1vZGVsQ29kZSA9ICJTQzQiLAorICAgIC5tb2RlbE5hbWUgPSAiU2NyaWJhIDQwIiwKKyAgICAuY2VsbENvdW50ID0gNDAKKyAgfSwKKworICB7IC5tb2RlbENvZGUgPSAiSVIyIiwKKyAgICAubW9kZWxOYW1lID0gIklyaXMgMjAiLAorICAgIC5jZWxsQ291bnQgPSAyMCwKKyAgICAuaGFzVmlzdWFsRGlzcGxheSA9IDEsCisgICAgLmlzSXJpcyA9IDEKKyAgfSwKKworICB7IC5tb2RlbENvZGUgPSAiSVI0IiwKKyAgICAubW9kZWxOYW1lID0gIklyaXMgNDAiLAorICAgIC5jZWxsQ291bnQgPSA0MCwKKyAgICAuaGFzVmlzdWFsRGlzcGxheSA9IDEsCisgICAgLmlzSXJpcyA9IDEKKyAgfSwKKworICB7IC5tb2RlbENvZGUgPSAiSVMyIiwKKyAgICAubW9kZWxOYW1lID0gIklyaXMgUzIwIiwKKyAgICAuY2VsbENvdW50ID0gMjAsCisgICAgLmlzSXJpcyA9IDEKKyAgfSwKKworICB7IC5tb2RlbENvZGUgPSAiSVMzIiwKKyAgICAubW9kZWxOYW1lID0gIklyaXMgUzMyIiwKKyAgICAuY2VsbENvdW50ID0gMzIsCisgICAgLmlzSXJpcyA9IDEKKyAgfSwKKworICB7IC5tb2RlbENvZGUgPSAiIiB9Cit9OworCitzdGF0aWMgaW50IGhhdmVTeXN0ZW1JbmZvcm1hdGlvbjsKK3N0YXRpYyB1bnNpZ25lZCBjaGFyIGZpcm13YXJlVmVyc2lvblsyMV07CitzdGF0aWMgY29uc3QgTW9kZWxFbnRyeSAqbW9kZWw7CisKK3N0YXRpYyB1bnNpZ25lZCBjaGFyIGZvcmNlV2luZG93UmV3cml0ZTsKK3N0YXRpYyB1bnNpZ25lZCBjaGFyIGZvcmNlVmlzdWFsUmV3cml0ZTsKK3N0YXRpYyB1bnNpZ25lZCBjaGFyIGZvcmNlQ3Vyc29yUmV3cml0ZTsKK3N0YXRpYyBpbnQgaW5wdXRQYWNrZXROdW1iZXI7CitzdGF0aWMgaW50IG91dHB1dFBhY2tldE51bWJlcjsKKworc3RhdGljIGlubGluZSB2b2lkCitmb3JjZVJld3JpdGUgKHZvaWQpIHsKKyAgZm9yY2VXaW5kb3dSZXdyaXRlID0gMTsKKyAgZm9yY2VWaXN1YWxSZXdyaXRlID0gMTsKKyAgZm9yY2VDdXJzb3JSZXdyaXRlID0gMTsKK30KKworc3RhdGljIGludAorbmVlZHNFc2NhcGUgKHVuc2lnbmVkIGNoYXIgYnl0ZSkgeworICBzd2l0Y2ggKGJ5dGUpIHsKKyAgICBjYXNlIEFTQ0lJX1NPSDoKKyAgICBjYXNlIEFTQ0lJX0VPVDoKKyAgICBjYXNlIEFTQ0lJX0RMRToKKyAgICBjYXNlIEFTQ0lJX0FDSzoKKyAgICBjYXNlIEFTQ0lJX05BSzoKKyAgICAgIHJldHVybiAxOworICB9CisKKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzc2l6ZV90CityZWFkUGFja2V0IChCcmFpbGxlRGlzcGxheSAqYnJsLCB2b2lkICpwYWNrZXQsIHNpemVfdCBzaXplKSB7CisgIHVuc2lnbmVkIGNoYXIgYnVmZmVyW3NpemUgKyA0XTsKKyAgaW50IG9mZnNldCA9IDA7CisgIGludCBlc2NhcGUgPSAwOworCisgIHdoaWxlICgxKQorICAgIHsKKyAgICAgIGludCBzdGFydGVkID0gb2Zmc2V0ID4gMDsKKyAgICAgIGludCBlc2NhcGVkID0gMDsKKyAgICAgIHVuc2lnbmVkIGNoYXIgYnl0ZTsKKworICAgICAgaWYgKCFpby0+cmVhZEJ5dGUoYnJsLCAmYnl0ZSwgKHN0YXJ0ZWQgfHwgZXNjYXBlKSkpCisgICAgICAgIHsKKyAgICAgICAgICBpZiAoc3RhcnRlZCkgbG9nUGFydGlhbFBhY2tldChidWZmZXIsIG9mZnNldCk7CisgICAgICAgICAgcmV0dXJuIChlcnJubyA9PSBFQUdBSU4pPyAwOiAtMTsKKyAgICAgICAgfQorCisgICAgICBpZiAoZXNjYXBlKQorICAgICAgICB7CisgICAgICAgICAgZXNjYXBlID0gMDsKKyAgICAgICAgICBlc2NhcGVkID0gMTsKKyAgICAgICAgfQorICAgICAgZWxzZSBpZiAoYnl0ZSA9PSBBU0NJSV9ETEUpCisgICAgICAgIHsKKyAgICAgICAgICBlc2NhcGUgPSAxOworICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgIGlmICghZXNjYXBlZCkKKyAgICAgICAgeworICAgICAgICAgIHN3aXRjaCAoYnl0ZSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgIGNhc2UgQVNDSUlfU09IOgorICAgICAgICAgICAgICBpZiAoc3RhcnRlZCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICBsb2dTaG9ydFBhY2tldChidWZmZXIsIG9mZnNldCk7CisgICAgICAgICAgICAgICAgICBvZmZzZXQgPSAxOworICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICBnb3RvIGFkZEJ5dGU7CisKKyAgICAgICAgICAgIGNhc2UgQVNDSUlfRU9UOgorICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgaWYgKG5lZWRzRXNjYXBlKGJ5dGUpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgIGlmIChzdGFydGVkKSBsb2dTaG9ydFBhY2tldChidWZmZXIsIG9mZnNldCk7CisgICAgICAgICAgICAgICAgICBvZmZzZXQgPSAwOworICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICBpZiAoIXN0YXJ0ZWQpCisgICAgICAgIHsKKyAgICAgICAgICBsb2dJZ25vcmVkQnl0ZShieXRlKTsKKyAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgYWRkQnl0ZToKKyAgICAgIGlmIChvZmZzZXQgPCBzaXplb2YoYnVmZmVyKSkKKyAgICAgICAgeworICAgICAgICAgIGJ1ZmZlcltvZmZzZXRdID0gYnl0ZTsKKyAgICAgICAgfQorICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgaWYgKG9mZnNldCA9PSBzaXplb2YoYnVmZmVyKSkgbG9nVHJ1bmNhdGVkUGFja2V0KGJ1ZmZlciwgb2Zmc2V0KTsKKyAgICAgICAgICBsb2dEaXNjYXJkZWRCeXRlKGJ5dGUpOworICAgICAgICB9CisgICAgICBvZmZzZXQgKz0gMTsKKworICAgICAgaWYgKCFlc2NhcGVkICYmIChieXRlID09IEFTQ0lJX0VPVCkpCisgICAgICAgIHsKKyAgICAgICAgICBpZiAob2Zmc2V0ID4gc2l6ZW9mKGJ1ZmZlcikpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIG9mZnNldCA9IDA7CisgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgbG9nSW5wdXRQYWNrZXQoYnVmZmVyLCBvZmZzZXQpOworICAgICAgICAgIG9mZnNldCAtPSAxOyAvKiByZW1vdmUgRU9UICovCisKKyAgICAgICAgICB7CisgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIHBhcml0eSA9IDA7CisKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgaW50IGk7CisKKyAgICAgICAgICAgICAgZm9yIChpPTE7IGk8b2Zmc2V0OyBpKz0xKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgIHBhcml0eSBePSBidWZmZXJbaV07CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAocGFyaXR5KSB7CisgICAgICAgICAgICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIG1lc3NhZ2VbXSA9IHtBU0NJSV9OQUssIEVVX05BS19QQVJ9OworCisgICAgICAgICAgICAgIGlvLT53cml0ZURhdGEoYnJsLCBtZXNzYWdlLCBzaXplb2YobWVzc2FnZSkpOworICAgICAgICAgICAgICBvZmZzZXQgPSAwOworICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9CisKKyAgICAgICAgICBvZmZzZXQgLT0gMTsgLyogcmVtb3ZlIHBhcml0eSAqLworCisgICAgICAgICAgeworICAgICAgICAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgbWVzc2FnZVtdID0ge0FTQ0lJX0FDS307CisgICAgICAgICAgICBpby0+d3JpdGVEYXRhKGJybCwgbWVzc2FnZSwgc2l6ZW9mKG1lc3NhZ2UpKTsKKyAgICAgICAgICB9CisKKyAgICAgICAgICBpZiAoYnVmZmVyWy0tb2Zmc2V0XSA9PSBpbnB1dFBhY2tldE51bWJlcikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgb2Zmc2V0ID0gMDsKKyAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgaW5wdXRQYWNrZXROdW1iZXIgPSBidWZmZXJbb2Zmc2V0XTsKKworICAgICAgICAgIG1lbWNweShwYWNrZXQsICZidWZmZXJbMV0sIG9mZnNldC0xKTsKKyAgICAgICAgICByZXR1cm4gb2Zmc2V0OworICAgICAgICB9CisgICAgfQorfQorCitzdGF0aWMgc3NpemVfdAord3JpdGVQYWNrZXQgKEJyYWlsbGVEaXNwbGF5ICpicmwsIGNvbnN0IHZvaWQgKnBhY2tldCwgc2l6ZV90IHNpemUpIHsKKyNkZWZpbmUgUFVUKGJ5dGUpIFwKKyAgaWYgKG5lZWRzRXNjYXBlKChieXRlKSkpICp0YXJnZXQrKyA9IEFTQ0lJX0RMRTsgXAorICAqdGFyZ2V0KysgPSAoYnl0ZSk7IFwKKyAgcGFyaXR5IF49IChieXRlKTsKKworICAvKiBsaW1pdCBjYXNlLCBldmVyeSBjaGFyIGlzIGVzY2FwZWQgKi8KKyAgdW5zaWduZWQgY2hhcglidWZmZXJbKHNpemUgKyA0KSAqIDJdOyAKKyAgdW5zaWduZWQgY2hhcgkqdGFyZ2V0ID0gYnVmZmVyOworICBjb25zdCB1bnNpZ25lZCBjaGFyICpzb3VyY2UgPSBwYWNrZXQ7CisgIHVuc2lnbmVkIGNoYXIJcGFyaXR5ID0gMDsKKworICAqdGFyZ2V0KysgPSBBU0NJSV9TT0g7CisgIFBVVChzaXplKTsKKworICB3aGlsZSAoc2l6ZS0tKSB7CisgICAgUFVUKCpzb3VyY2UpOworICAgIHNvdXJjZSArPSAxOworICB9CisKKyAgUFVUKG91dHB1dFBhY2tldE51bWJlcik7CisgIGlmICgrK291dHB1dFBhY2tldE51bWJlciA+PSAyNTYpIG91dHB1dFBhY2tldE51bWJlciA9IDEyODsKKworICBQVVQocGFyaXR5KTsKKyAgKnRhcmdldCsrID0gQVNDSUlfRU9UOworCisgIHsKKyAgICBzaXplX3QgY291bnQgPSB0YXJnZXQgLSBidWZmZXI7CisgICAgbG9nT3V0cHV0UGFja2V0KGJ1ZmZlciwgY291bnQpOworICAgIHJldHVybiBpby0+d3JpdGVEYXRhKGJybCwgYnVmZmVyLCBjb3VudCk7CisgIH0KKyN1bmRlZiBQVVQKK30KKworc3RhdGljIGludAorcmVzZXREZXZpY2UgKEJyYWlsbGVEaXNwbGF5ICpicmwpIHsKKyAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgcGFja2V0W10gPSB7J1MnLCAnSSd9OworICByZXR1cm4gd3JpdGVQYWNrZXQoYnJsLCBwYWNrZXQsIHNpemVvZihwYWNrZXQpKSAhPSAtMTsKK30KKworc3RhdGljIGNvbnN0IE1vZGVsRW50cnkgKgorZ2V0TW9kZWxFbnRyeSAoY29uc3QgdW5zaWduZWQgY2hhciAqY29kZSkgeworICBjb25zdCBNb2RlbEVudHJ5ICptZGwgPSBtb2RlbFRhYmxlOworCisgIHdoaWxlIChtZGwtPm1vZGVsQ29kZVswXSkgeworICAgIGlmIChtZW1jbXAobWRsLT5tb2RlbENvZGUsIGNvZGUsIHNpemVvZihtZGwtPm1vZGVsQ29kZSkpID09IDApIHJldHVybiBtZGw7CisgICAgbWRsICs9IDE7CisgIH0KKworICByZXR1cm4gTlVMTDsKK30KKworc3RhdGljIHZvaWQKK2hhbmRsZVN5c3RlbUluZm9ybWF0aW9uIChCcmFpbGxlRGlzcGxheSAqYnJsLCBjb25zdCB1bnNpZ25lZCBjaGFyICpwYWNrZXQpIHsKKyAgY29uc3QgdW5zaWduZWQgY2hhciAqcCA9IHBhY2tldDsKKworICB3aGlsZSAoMSkgeworICAgIHVuc2lnbmVkIGNoYXIgbGVuZ3RoID0gKihwKyspOworCisgICAgc3dpdGNoIChwWzBdKSB7CisgICAgICBjYXNlICdTJzoKKyAgICAgICAgc3dpdGNoIChwWzFdKSB7CisgICAgICAgICAgY2FzZSAnSSc6IHsKKyAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgY291bnQgPSBsZW5ndGggLSAyOworICAgICAgICAgICAgaWYgKGNvdW50ID49IHNpemVvZihmaXJtd2FyZVZlcnNpb24pKSBjb3VudCA9IHNpemVvZihmaXJtd2FyZVZlcnNpb24pIC0gMTsKKyAgICAgICAgICAgIG1lbWNweShmaXJtd2FyZVZlcnNpb24sIHArMiwgY291bnQpOworICAgICAgICAgICAgbW9kZWwgPSBnZXRNb2RlbEVudHJ5KGZpcm13YXJlVmVyc2lvbik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgfQorCisgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworCisgICAgICBkZWZhdWx0OgorICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBwICs9IGxlbmd0aDsKKyAgfQorfQorCitzdGF0aWMgaW50Cit3cml0ZVdpbmRvdyAoQnJhaWxsZURpc3BsYXkgKmJybCkgeworICBzdGF0aWMgdW5zaWduZWQgY2hhciBwcmV2aW91c0NlbGxzW01BWElNVU1fRElTUExBWV9TSVpFXTsKKyAgc2l6ZV90IHNpemUgPSBicmwtPnRleHRDb2x1bW5zICogYnJsLT50ZXh0Um93czsKKyAgdW5zaWduZWQgY2hhciBidWZmZXJbc2l6ZSArIDJdOworCisgIGlmIChjZWxsc0hhdmVDaGFuZ2VkKHByZXZpb3VzQ2VsbHMsIGJybC0+YnVmZmVyLCBzaXplLCBOVUxMLCBOVUxMLCAmZm9yY2VXaW5kb3dSZXdyaXRlKSkgeworICAgIGJ1ZmZlclswXSA9ICdEJzsKKyAgICBidWZmZXJbMV0gPSAnUCc7CisgICAgdHJhbnNsYXRlT3V0cHV0Q2VsbHMoYnVmZmVyKzIsIGJybC0+YnVmZmVyLCBzaXplKTsKKyAgICB3cml0ZVBhY2tldChicmwsIGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlcikpOworICB9CisKKyAgcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQKK3dyaXRlVmlzdWFsIChCcmFpbGxlRGlzcGxheSAqYnJsLCBjb25zdCB3Y2hhcl90ICp0ZXh0KSB7CisgIGlmIChtb2RlbC0+aGFzVmlzdWFsRGlzcGxheSkgeworICAgIHNpemVfdCBzaXplID0gYnJsLT50ZXh0Q29sdW1ucyAqIGJybC0+dGV4dFJvd3M7CisgICAgaW50IGNoYW5nZWQgPSAwOworCisgICAgeworICAgICAgc3RhdGljIHdjaGFyX3QgcHJldmlvdXNUZXh0W01BWElNVU1fRElTUExBWV9TSVpFXTsKKworICAgICAgaWYgKHRleHRIYXNDaGFuZ2VkKHByZXZpb3VzVGV4dCwgdGV4dCwgc2l6ZSwgTlVMTCwgTlVMTCwgJmZvcmNlVmlzdWFsUmV3cml0ZSkpIGNoYW5nZWQgPSAxOworICAgIH0KKworICAgIHsKKyAgICAgIHN0YXRpYyBpbnQgcHJldmlvdXNDdXJzb3I7CisKKyAgICAgIGlmIChjdXJzb3JIYXNDaGFuZ2VkKCZwcmV2aW91c0N1cnNvciwgYnJsLT5jdXJzb3IsICZmb3JjZUN1cnNvclJld3JpdGUpKSBjaGFuZ2VkID0gMTsKKyAgICB9CisKKyAgICBpZiAoY2hhbmdlZCkgeworICAgICAgY29uc3Qgd2NoYXJfdCAqc291cmNlID0gdGV4dDsKKyAgICAgIGNvbnN0IHdjaGFyX3QgKmVuZCA9IHNvdXJjZSArIHNpemU7CisgICAgICBjb25zdCB3Y2hhcl90ICpjdXJzb3IgPSAoYnJsLT5jdXJzb3IgIT0gQlJMX05PX0NVUlNPUik/IHNvdXJjZSticmwtPmN1cnNvcjogTlVMTDsKKworICAgICAgdW5zaWduZWQgY2hhciBidWZmZXJbc2l6ZSArIDRdOyAvLyBjb2RlLCBzdWJjb2RlLCBhbmQgcG9zc2libHkgdHdvIGJ5dGVzIGZvciBjdXJzb3IKKyAgICAgIHVuc2lnbmVkIGNoYXIgKnRhcmdldCA9IGJ1ZmZlcjsKKworICAgICAgKnRhcmdldCsrID0gJ0QnOworICAgICAgKnRhcmdldCsrID0gJ0wnOworCisgICAgICB3aGlsZSAoc291cmNlIDwgZW5kKSB7CisgICAgICAgIGlmIChzb3VyY2UgPT0gY3Vyc29yKSB7CisgICAgICAgICAgKnRhcmdldCsrID0gQVNDSUlfRVNDOworICAgICAgICAgICp0YXJnZXQrKyA9IEVVX0xDRF9DVVJTT1I7CisgICAgICAgIH0KKworICAgICAgICB7CisgICAgICAgICAgd2NoYXJfdCB3YyA9ICpzb3VyY2UrKzsKKyAgICAgICAgICBpZiAoIWlzd0xhdGluMSh3YykpIHdjID0gJz8nOworICAgICAgICAgICp0YXJnZXQrKyA9IHdjOworICAgICAgICB9CisgICAgICB9CisKKyAgICAgIHdyaXRlUGFja2V0KGJybCwgYnVmZmVyLCB0YXJnZXQtYnVmZmVyKTsKKyAgICB9CisgIH0KKworICByZXR1cm4gMTsKK30KKworc3RhdGljIGludAoraGFzVmlzdWFsRGlzcGxheSAoQnJhaWxsZURpc3BsYXkgKmJybCkgeworICByZXR1cm4gbW9kZWwtPmhhc1Zpc3VhbERpc3BsYXk7Cit9CisKK3N0YXRpYyBpbnQKK2hhbmRsZU1vZGUgKEJyYWlsbGVEaXNwbGF5ICpicmwsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnBhY2tldCkgeworICBpZiAoKnBhY2tldCA9PSAnQicpIHsKKyAgICBmb3JjZVJld3JpdGUoKTsKKyAgICByZXR1cm4gMTsKKyAgfQorCisgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50CitoYW5kbGVLZXlFdmVudCAoQnJhaWxsZURpc3BsYXkgKmJybCwgY29uc3QgdW5zaWduZWQgY2hhciAqcGFja2V0KSB7CisgIHN3aXRjaCAocGFja2V0WzBdKSB7CisgICAgY2FzZSAnQic6IHsKKyAgICAgIEtleU51bWJlclNldCBrZXlzID0gKChwYWNrZXRbMl0gPDwgOCkgfCBwYWNrZXRbMV0pICYgMFgzRkY7CisKKyAgICAgIGVucXVldWVLZXlzKGJybCwga2V5cywgRVVfR1JQX0JyYWlsbGVLZXlzLCAwKTsKKyAgICAgIHJldHVybiAxOworICAgIH0KKworICAgIGNhc2UgJ0knOiB7CisgICAgICB1bnNpZ25lZCBjaGFyIGtleSA9IHBhY2tldFsxXTsKKworICAgICAgaWYgKChrZXkgPj0gMSkgJiYgKGtleSA8PSBicmwtPnRleHRDb2x1bW5zKSkgeworICAgICAgICBlbnF1ZXVlS2V5KGJybCwgRVVfR1JQX1JvdXRpbmdLZXlzMSwga2V5LTEpOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgZW5xdWV1ZUtleShicmwsIEVVX0dSUF9JbnRlcmFjdGl2ZUtleXMsIGtleSk7CisgICAgICB9CisKKyAgICAgIHJldHVybiAxOworICAgIH0KKworICAgIGNhc2UgJ1QnOiAKKyAgICAgIGVucXVldWVLZXkoYnJsLCBFVV9HUlBfTmF2aWdhdGlvbktleXMsIHBhY2tldFsxXSk7CisgICAgICByZXR1cm4gMTsKKworICAgIGRlZmF1bHQgOgorICAgICAgYnJlYWs7CisgIH0KKworICByZXR1cm4gMDsKK30KKworc3RhdGljIGludAorcmVhZENvbW1hbmQgKEJyYWlsbGVEaXNwbGF5ICpicmwsIEtleVRhYmxlQ29tbWFuZENvbnRleHQgY3R4KSB7CisgIHVuc2lnbmVkIGNoYXIJcGFja2V0W0lOUFVUX0JVRkZFUl9TSVpFXTsKKyAgc3NpemVfdCBsZW5ndGg7CisKKyAgd2hpbGUgKChsZW5ndGggPSByZWFkUGFja2V0KGJybCwgcGFja2V0LCBzaXplb2YocGFja2V0KSkpID4gMCkgeworICAgIHN3aXRjaCAocGFja2V0WzFdKSB7CisgICAgICBjYXNlICdTJzogCisgICAgICAgIGhhbmRsZVN5c3RlbUluZm9ybWF0aW9uKGJybCwgcGFja2V0KTsKKyAgICAgICAgaGF2ZVN5c3RlbUluZm9ybWF0aW9uID0gMTsKKyAgICAgICAgY29udGludWU7CisKKyAgICAgIGNhc2UgJ1InOiAKKyAgICAgICAgaWYgKGhhbmRsZU1vZGUoYnJsLCBwYWNrZXQrMikpIGNvbnRpbnVlOworICAgICAgICBicmVhazsKKworICAgICAgY2FzZSAnSyc6IAorICAgICAgICBpZiAoaGFuZGxlS2V5RXZlbnQoYnJsLCBwYWNrZXQrMikpIGNvbnRpbnVlOworICAgICAgICBicmVhazsKKworICAgICAgZGVmYXVsdDogCisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGxvZ1VuZXhwZWN0ZWRQYWNrZXQocGFja2V0LCBsZW5ndGgpOworICB9CisKKyAgcmV0dXJuIChsZW5ndGggPT0gLTEpPyBCUkxfQ01EX1JFU1RBUlRCUkw6IEVPRjsKK30KKworc3RhdGljIGludAoraW5pdGlhbGl6ZURldmljZSAoQnJhaWxsZURpc3BsYXkgKmJybCkgeworICBpbnQgcmV0cmllc0xlZnQgPSAyOworCisgIGhhdmVTeXN0ZW1JbmZvcm1hdGlvbiA9IDA7CisgIG1lbXNldChmaXJtd2FyZVZlcnNpb24sIDAsIHNpemVvZihmaXJtd2FyZVZlcnNpb24pKTsKKyAgbW9kZWwgPSBOVUxMOworCisgIGZvcmNlUmV3cml0ZSgpOworICBpbnB1dFBhY2tldE51bWJlciA9IC0xOworICBvdXRwdXRQYWNrZXROdW1iZXIgPSAxMjc7CisKKyAgZG8geworICAgIGlmICghcmVzZXREZXZpY2UoYnJsKSkgcmV0dXJuIDA7CisKKyAgICB3aGlsZSAoaW8tPmF3YWl0SW5wdXQoYnJsLCA1MDApKSB7CisgICAgICBpZiAocmVhZENvbW1hbmQoYnJsLCBLVEJfQ1RYX0RFRkFVTFQpID09IEJSTF9DTURfUkVTVEFSVEJSTCkgcmV0dXJuIDA7CisKKyAgICAgIGlmIChoYXZlU3lzdGVtSW5mb3JtYXRpb24pIHsKKyAgICAgICAgaWYgKCFtb2RlbCkgeworICAgICAgICAgIGludCBsZW5ndGggPSBzaXplb2YobW9kZWwtPm1vZGVsQ29kZSk7CisgICAgICAgICAgbG9nTWVzc2FnZShMT0dfV0FSTklORywgInVua25vd24gRXVyb0JyYWlsbGUgbW9kZWw6ICUuKnMiLAorICAgICAgICAgICAgICAgICAgICAgbGVuZ3RoLCBmaXJtd2FyZVZlcnNpb24pOworICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CisKKyAgICAgICAgYnJsLT50ZXh0Q29sdW1ucyA9IG1vZGVsLT5jZWxsQ291bnQ7CisKKyAgICAgICAgc3dpdGNoIChmaXJtd2FyZVZlcnNpb25bMl0pIHsKKyAgICAgICAgICBjYXNlICcyJzoKKyAgICAgICAgICAgIGJybC0+dGV4dENvbHVtbnMgPSAyMDsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgY2FzZSAnMyc6CisgICAgICAgICAgICBicmwtPnRleHRDb2x1bW5zID0gMzI7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgIGNhc2UgJzQnOgorICAgICAgICAgICAgYnJsLT50ZXh0Q29sdW1ucyA9IDQwOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICBjYXNlICc4JzoKKyAgICAgICAgICAgIGJybC0+dGV4dENvbHVtbnMgPSA4MDsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgc2V0QnJhaWxsZUtleVRhYmxlKGJybCwgJktFWV9UQUJMRV9ERUZJTklUSU9OKGNsaW8pKTsKKworICAgICAgICBsb2dNZXNzYWdlKExPR19JTkZPLCAiTW9kZWwgRGV0ZWN0ZWQ6ICVzICgldSBjZWxscykiLAorICAgICAgICAgICAgICAgICAgIG1vZGVsLT5tb2RlbE5hbWUsIGJybC0+dGV4dENvbHVtbnMpOworICAgICAgICByZXR1cm4gMTsKKyAgICAgIH0KKyAgICB9CisgIH0gd2hpbGUgKHJldHJpZXNMZWZ0LS0gJiYgKGVycm5vID09IEVBR0FJTikpOworCisgIHJldHVybiAwOworfQorCitjb25zdCBQcm90b2NvbE9wZXJhdGlvbnMgY2xpb1Byb3RvY29sT3BlcmF0aW9ucyA9IHsKKyAgLnByb3RvY29sTmFtZSA9ICJjbGlvIiwKKworICAuaW5pdGlhbGl6ZURldmljZSA9IGluaXRpYWxpemVEZXZpY2UsCisgIC5yZXNldERldmljZSA9IHJlc2V0RGV2aWNlLAorCisgIC5yZWFkUGFja2V0ID0gcmVhZFBhY2tldCwKKyAgLndyaXRlUGFja2V0ID0gd3JpdGVQYWNrZXQsCisKKyAgLnJlYWRDb21tYW5kID0gcmVhZENvbW1hbmQsCisgIC53cml0ZVdpbmRvdyA9IHdyaXRlV2luZG93LAorCisgIC5oYXNWaXN1YWxEaXNwbGF5ID0gaGFzVmlzdWFsRGlzcGxheSwKKyAgLndyaXRlVmlzdWFsID0gd3JpdGVWaXN1YWwKK307CmRpZmYgLS1naXQgYS9Ecml2ZXJzL0JyYWlsbGUvRXVyb0JyYWlsbGUvZXVfZXN5c2lyaXMuYyBiL0RyaXZlcnMvQnJhaWxsZS9FdXJvQnJhaWxsZS9ldV9lc3lzaXJpcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZlMGI4ZGQKLS0tIC9kZXYvbnVsbAorKysgYi9Ecml2ZXJzL0JyYWlsbGUvRXVyb0JyYWlsbGUvZXVfZXN5c2lyaXMuYwpAQCAtMCwwICsxLDkzOCBAQAorLyoKKyAqIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisgKiAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisgKgorICogQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKKy8qKiBFdXJvQnJhaWxsZS9ldV9lc3lzaXJpcy5jIAorICoqIEltcGxlbWVudHMgdGhlIEVTWVMgYW5kIElSSVMgcmV2ID49MS43MSBwcm90b2NvbCAKKyAqKiBNYWRlIGJ5IFlhbm5pY2sgUExBU1NJQVJEIDx5YW5AbWlzdGlncmkub3JnPgorICovCisKKyNpbmNsdWRlICJwcm9sb2d1ZS5oIgorCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorCisjaW5jbHVkZSAibG9nLmgiCisjaW5jbHVkZSAiYXNjaWkuaCIKKyNpbmNsdWRlICJicmxkZWZzLWV1LmgiCisjaW5jbHVkZSAiZXVfcHJvdG9jb2wuaCIKKyNpbmNsdWRlICJldV9wcm90b2NvbGRlZi5oIgorCisjZGVmaW5lIE1BWElNVU1fRElTUExBWV9TSVpFIDgwCisKKyNkZWZpbmUgQ09NTUFORF9LRVlfRU5UUlkoayxuKSBLRVlfRU5UUlkoQ29tbWFuZEtleXMsIENNRCwgaywgbikKKyNkZWZpbmUgQlJBSUxMRV9LRVlfRU5UUlkoayxuKSBLRVlfRU5UUlkoQnJhaWxsZUtleXMsIEJSTCwgaywgbikKKworQkVHSU5fS0VZX05BTUVfVEFCTEUobGluZWFyKQorICBDT01NQU5EX0tFWV9FTlRSWShMMSwgIkwxIiksCisgIENPTU1BTkRfS0VZX0VOVFJZKEwyLCAiTDIiKSwKKyAgQ09NTUFORF9LRVlfRU5UUlkoTDMsICJMMyIpLAorICBDT01NQU5EX0tFWV9FTlRSWShMNCwgIkw0IiksCisgIENPTU1BTkRfS0VZX0VOVFJZKEw1LCAiTDUiKSwKKyAgQ09NTUFORF9LRVlfRU5UUlkoTDYsICJMNiIpLAorICBDT01NQU5EX0tFWV9FTlRSWShMNywgIkw3IiksCisgIENPTU1BTkRfS0VZX0VOVFJZKEw4LCAiTDgiKSwKK0VORF9LRVlfTkFNRV9UQUJMRQorCitCRUdJTl9LRVlfTkFNRV9UQUJMRShhcnJvdykKKyAgQ09NTUFORF9LRVlfRU5UUlkoTGVmdCwgIkxlZnQiKSwKKyAgQ09NTUFORF9LRVlfRU5UUlkoUmlnaHQsICJSaWdodCIpLAorICBDT01NQU5EX0tFWV9FTlRSWShVcCwgIlVwIiksCisgIENPTU1BTkRfS0VZX0VOVFJZKERvd24sICJEb3duIiksCitFTkRfS0VZX05BTUVfVEFCTEUKKworQkVHSU5fS0VZX05BTUVfVEFCTEUoc3dpdGNoMSkKKyAgQ09NTUFORF9LRVlfRU5UUlkoU3dpdGNoMUxlZnQsICJTd2l0Y2gxTGVmdCIpLAorICBDT01NQU5EX0tFWV9FTlRSWShTd2l0Y2gxUmlnaHQsICJTd2l0Y2gxUmlnaHQiKSwKK0VORF9LRVlfTkFNRV9UQUJMRQorCitCRUdJTl9LRVlfTkFNRV9UQUJMRShzd2l0Y2gyKQorICBDT01NQU5EX0tFWV9FTlRSWShTd2l0Y2gyTGVmdCwgIlN3aXRjaDJMZWZ0IiksCisgIENPTU1BTkRfS0VZX0VOVFJZKFN3aXRjaDJSaWdodCwgIlN3aXRjaDJSaWdodCIpLAorRU5EX0tFWV9OQU1FX1RBQkxFCisKK0JFR0lOX0tFWV9OQU1FX1RBQkxFKHN3aXRjaDMpCisgIENPTU1BTkRfS0VZX0VOVFJZKFN3aXRjaDNMZWZ0LCAiU3dpdGNoM0xlZnQiKSwKKyAgQ09NTUFORF9LRVlfRU5UUlkoU3dpdGNoM1JpZ2h0LCAiU3dpdGNoM1JpZ2h0IiksCitFTkRfS0VZX05BTUVfVEFCTEUKKworQkVHSU5fS0VZX05BTUVfVEFCTEUoc3dpdGNoNCkKKyAgQ09NTUFORF9LRVlfRU5UUlkoU3dpdGNoNExlZnQsICJTd2l0Y2g0TGVmdCIpLAorICBDT01NQU5EX0tFWV9FTlRSWShTd2l0Y2g0UmlnaHQsICJTd2l0Y2g0UmlnaHQiKSwKK0VORF9LRVlfTkFNRV9UQUJMRQorCitCRUdJTl9LRVlfTkFNRV9UQUJMRShzd2l0Y2g1KQorICBDT01NQU5EX0tFWV9FTlRSWShTd2l0Y2g1TGVmdCwgIlN3aXRjaDVMZWZ0IiksCisgIENPTU1BTkRfS0VZX0VOVFJZKFN3aXRjaDVSaWdodCwgIlN3aXRjaDVSaWdodCIpLAorRU5EX0tFWV9OQU1FX1RBQkxFCisKK0JFR0lOX0tFWV9OQU1FX1RBQkxFKHN3aXRjaDYpCisgIENPTU1BTkRfS0VZX0VOVFJZKFN3aXRjaDZMZWZ0LCAiU3dpdGNoNkxlZnQiKSwKKyAgQ09NTUFORF9LRVlfRU5UUlkoU3dpdGNoNlJpZ2h0LCAiU3dpdGNoNlJpZ2h0IiksCitFTkRfS0VZX05BTUVfVEFCTEUKKworQkVHSU5fS0VZX05BTUVfVEFCTEUoam95c3RpY2sxKQorICBDT01NQU5EX0tFWV9FTlRSWShMZWZ0Sm95c3RpY2tMZWZ0LCAiTGVmdEpveXN0aWNrTGVmdCIpLAorICBDT01NQU5EX0tFWV9FTlRSWShMZWZ0Sm95c3RpY2tSaWdodCwgIkxlZnRKb3lzdGlja1JpZ2h0IiksCisgIENPTU1BTkRfS0VZX0VOVFJZKExlZnRKb3lzdGlja1VwLCAiTGVmdEpveXN0aWNrVXAiKSwKKyAgQ09NTUFORF9LRVlfRU5UUlkoTGVmdEpveXN0aWNrRG93biwgIkxlZnRKb3lzdGlja0Rvd24iKSwKKyAgQ09NTUFORF9LRVlfRU5UUlkoTGVmdEpveXN0aWNrUHJlc3MsICJMZWZ0Sm95c3RpY2tQcmVzcyIpLAorRU5EX0tFWV9OQU1FX1RBQkxFCisKK0JFR0lOX0tFWV9OQU1FX1RBQkxFKGpveXN0aWNrMikKKyAgQ09NTUFORF9LRVlfRU5UUlkoUmlnaHRKb3lzdGlja0xlZnQsICJSaWdodEpveXN0aWNrTGVmdCIpLAorICBDT01NQU5EX0tFWV9FTlRSWShSaWdodEpveXN0aWNrUmlnaHQsICJSaWdodEpveXN0aWNrUmlnaHQiKSwKKyAgQ09NTUFORF9LRVlfRU5UUlkoUmlnaHRKb3lzdGlja1VwLCAiUmlnaHRKb3lzdGlja1VwIiksCisgIENPTU1BTkRfS0VZX0VOVFJZKFJpZ2h0Sm95c3RpY2tEb3duLCAiUmlnaHRKb3lzdGlja0Rvd24iKSwKKyAgQ09NTUFORF9LRVlfRU5UUlkoUmlnaHRKb3lzdGlja1ByZXNzLCAiUmlnaHRKb3lzdGlja1ByZXNzIiksCitFTkRfS0VZX05BTUVfVEFCTEUKKworQkVHSU5fS0VZX05BTUVfVEFCTEUoa2V5Ym9hcmQpCisgIEJSQUlMTEVfS0VZX0VOVFJZKERvdDEsICJEb3QxIiksCisgIEJSQUlMTEVfS0VZX0VOVFJZKERvdDIsICJEb3QyIiksCisgIEJSQUlMTEVfS0VZX0VOVFJZKERvdDMsICJEb3QzIiksCisgIEJSQUlMTEVfS0VZX0VOVFJZKERvdDQsICJEb3Q0IiksCisgIEJSQUlMTEVfS0VZX0VOVFJZKERvdDUsICJEb3Q1IiksCisgIEJSQUlMTEVfS0VZX0VOVFJZKERvdDYsICJEb3Q2IiksCisgIEJSQUlMTEVfS0VZX0VOVFJZKERvdDcsICJEb3Q3IiksCisgIEJSQUlMTEVfS0VZX0VOVFJZKERvdDgsICJEb3Q4IiksCisgIEJSQUlMTEVfS0VZX0VOVFJZKEJhY2tzcGFjZSwgIkJhY2tzcGFjZSIpLAorICBCUkFJTExFX0tFWV9FTlRSWShTcGFjZSwgIlNwYWNlIiksCitFTkRfS0VZX05BTUVfVEFCTEUKKworQkVHSU5fS0VZX05BTUVfVEFCTEUocm91dGluZykKKyAgS0VZX0dST1VQX0VOVFJZKEVVX0dSUF9Sb3V0aW5nS2V5czEsICJSb3V0aW5nS2V5MSIpLAorICBLRVlfR1JPVVBfRU5UUlkoRVVfR1JQX1JvdXRpbmdLZXlzMiwgIlJvdXRpbmdLZXkyIiksCitFTkRfS0VZX05BTUVfVEFCTEUKKworQkVHSU5fS0VZX05BTUVfVEFCTEVTKGlyaXMpCisgIEtFWV9OQU1FX1RBQkxFKGxpbmVhciksCisgIEtFWV9OQU1FX1RBQkxFKGFycm93KSwKKyAgS0VZX05BTUVfVEFCTEUoa2V5Ym9hcmQpLAorICBLRVlfTkFNRV9UQUJMRShyb3V0aW5nKSwKK0VORF9LRVlfTkFNRV9UQUJMRVMKKworQkVHSU5fS0VZX05BTUVfVEFCTEVTKGVzeXNfc21hbGwpCisgIEtFWV9OQU1FX1RBQkxFKHN3aXRjaDEpLAorICBLRVlfTkFNRV9UQUJMRShzd2l0Y2gyKSwKKyAgS0VZX05BTUVfVEFCTEUoam95c3RpY2sxKSwKKyAgS0VZX05BTUVfVEFCTEUoam95c3RpY2syKSwKKyAgS0VZX05BTUVfVEFCTEUoa2V5Ym9hcmQpLAorICBLRVlfTkFNRV9UQUJMRShyb3V0aW5nKSwKK0VORF9LRVlfTkFNRV9UQUJMRVMKKworQkVHSU5fS0VZX05BTUVfVEFCTEVTKGVzeXNfbWVkaXVtKQorICBLRVlfTkFNRV9UQUJMRShzd2l0Y2gxKSwKKyAgS0VZX05BTUVfVEFCTEUoc3dpdGNoMiksCisgIEtFWV9OQU1FX1RBQkxFKHN3aXRjaDMpLAorICBLRVlfTkFNRV9UQUJMRShzd2l0Y2g0KSwKKyAgS0VZX05BTUVfVEFCTEUoam95c3RpY2sxKSwKKyAgS0VZX05BTUVfVEFCTEUoam95c3RpY2syKSwKKyAgS0VZX05BTUVfVEFCTEUoa2V5Ym9hcmQpLAorICBLRVlfTkFNRV9UQUJMRShyb3V0aW5nKSwKK0VORF9LRVlfTkFNRV9UQUJMRVMKKworQkVHSU5fS0VZX05BTUVfVEFCTEVTKGVzeXNfbGFyZ2UpCisgIEtFWV9OQU1FX1RBQkxFKHN3aXRjaDEpLAorICBLRVlfTkFNRV9UQUJMRShzd2l0Y2gyKSwKKyAgS0VZX05BTUVfVEFCTEUoc3dpdGNoMyksCisgIEtFWV9OQU1FX1RBQkxFKHN3aXRjaDQpLAorICBLRVlfTkFNRV9UQUJMRShzd2l0Y2g1KSwKKyAgS0VZX05BTUVfVEFCTEUoc3dpdGNoNiksCisgIEtFWV9OQU1FX1RBQkxFKGpveXN0aWNrMSksCisgIEtFWV9OQU1FX1RBQkxFKGpveXN0aWNrMiksCisgIEtFWV9OQU1FX1RBQkxFKGtleWJvYXJkKSwKKyAgS0VZX05BTUVfVEFCTEUocm91dGluZyksCitFTkRfS0VZX05BTUVfVEFCTEVTCisKK0JFR0lOX0tFWV9OQU1FX1RBQkxFUyhlc3l0aW1lKQorICBLRVlfTkFNRV9UQUJMRShqb3lzdGljazEpLAorICBLRVlfTkFNRV9UQUJMRShqb3lzdGljazIpLAorICBLRVlfTkFNRV9UQUJMRShsaW5lYXIpLAorICBLRVlfTkFNRV9UQUJMRShrZXlib2FyZCksICAgLy8gRm9yIGJyYWlsbGUga2V5Ym9hcmQgd2hlbiBub3QgaW4gdXNiLWhpZCBtb2RlLgorICBLRVlfTkFNRV9UQUJMRShyb3V0aW5nKSwKK0VORF9LRVlfTkFNRV9UQUJMRVMKKworUFVCTElDX0tFWV9UQUJMRShpcmlzKQorUFVCTElDX0tFWV9UQUJMRShlc3lzX3NtYWxsKQorUFVCTElDX0tFWV9UQUJMRShlc3lzX21lZGl1bSkKK1BVQkxJQ19LRVlfVEFCTEUoZXN5c19sYXJnZSkKK1BVQkxJQ19LRVlfVEFCTEUoZXN5dGltZSkKKwordHlwZWRlZiBzdHJ1Y3QgeworICBjb25zdCBjaGFyICptb2RlbE5hbWU7CisgIGNvbnN0IEtleVRhYmxlRGVmaW5pdGlvbiAqa2V5VGFibGU7CisgIHVuc2lnbmVkIGNoYXIgbW9kZWxJZGVudGlmaWVyOworICB1bnNpZ25lZCBjaGFyIGNlbGxDb3VudDsKKyAgdW5zaWduZWQgaGFzQnJhaWxsZUtleWJvYXJkOjE7CisgIHVuc2lnbmVkIGhhc0F6ZXJ0eUtleWJvYXJkOjE7CisgIHVuc2lnbmVkIGhhc1Zpc3VhbERpc3BsYXk6MTsKKyAgdW5zaWduZWQgaGFzT3B0aWNhbEJhcjoxOworICB1bnNpZ25lZCBpc0lyaXM6MTsKKyAgdW5zaWduZWQgaXNFc3lzOjE7CisgIHVuc2lnbmVkIGlzRXN5dGltZToxOworfSBNb2RlbEVudHJ5OworCitzdGF0aWMgY29uc3QgTW9kZWxFbnRyeSBtb2RlbFRhYmxlW10gPSB7CisgIHsgLm1vZGVsSWRlbnRpZmllciA9IEVVX0lSSVNfMjAsCisgICAgLm1vZGVsTmFtZSA9ICJJcmlzIDIwIiwKKyAgICAuY2VsbENvdW50ID0gMjAsCisgICAgLmhhc0JyYWlsbGVLZXlib2FyZCA9IDEsCisgICAgLmhhc1Zpc3VhbERpc3BsYXkgPSAxLAorICAgIC5pc0lyaXMgPSAxLAorICAgIC5rZXlUYWJsZSA9ICZLRVlfVEFCTEVfREVGSU5JVElPTihpcmlzKQorICB9LAorCisgIHsgLm1vZGVsSWRlbnRpZmllciA9IEVVX0lSSVNfNDAsCisgICAgLm1vZGVsTmFtZSA9ICJJcmlzIDQwIiwKKyAgICAuY2VsbENvdW50ID0gNDAsCisgICAgLmhhc0JyYWlsbGVLZXlib2FyZCA9IDEsCisgICAgLmhhc1Zpc3VhbERpc3BsYXkgPSAxLAorICAgIC5pc0lyaXMgPSAxLAorICAgIC5rZXlUYWJsZSA9ICZLRVlfVEFCTEVfREVGSU5JVElPTihpcmlzKQorICB9LAorCisgIHsgLm1vZGVsSWRlbnRpZmllciA9IEVVX0lSSVNfUzIwLAorICAgIC5tb2RlbE5hbWUgPSAiSXJpcyBTLTIwIiwKKyAgICAuY2VsbENvdW50ID0gMjAsCisgICAgLmhhc0JyYWlsbGVLZXlib2FyZCA9IDEsCisgICAgLmlzSXJpcyA9IDEsCisgICAgLmtleVRhYmxlID0gJktFWV9UQUJMRV9ERUZJTklUSU9OKGlyaXMpCisgIH0sCisKKyAgeyAubW9kZWxJZGVudGlmaWVyID0gRVVfSVJJU19TMzIsCisgICAgLm1vZGVsTmFtZSA9ICJJcmlzIFMtMzIiLAorICAgIC5jZWxsQ291bnQgPSAzMiwKKyAgICAuaGFzQnJhaWxsZUtleWJvYXJkID0gMSwKKyAgICAuaXNJcmlzID0gMSwKKyAgICAua2V5VGFibGUgPSAmS0VZX1RBQkxFX0RFRklOSVRJT04oaXJpcykKKyAgfSwKKworICB7IC5tb2RlbElkZW50aWZpZXIgPSBFVV9JUklTX0tCMjAsCisgICAgLm1vZGVsTmFtZSA9ICJJcmlzIEtCLTIwIiwKKyAgICAuY2VsbENvdW50ID0gMjAsCisgICAgLmhhc0F6ZXJ0eUtleWJvYXJkID0gMSwKKyAgICAuaXNJcmlzID0gMSwKKyAgICAua2V5VGFibGUgPSAmS0VZX1RBQkxFX0RFRklOSVRJT04oaXJpcykKKyAgfSwKKworICB7IC5tb2RlbElkZW50aWZpZXIgPSBFVV9JUklTX0tCNDAsCisgICAgLm1vZGVsTmFtZSA9ICJJcmlzIEtCLTQwIiwKKyAgICAuY2VsbENvdW50ID0gNDAsCisgICAgLmhhc0F6ZXJ0eUtleWJvYXJkID0gMSwKKyAgICAuaXNJcmlzID0gMSwKKyAgICAua2V5VGFibGUgPSAmS0VZX1RBQkxFX0RFRklOSVRJT04oaXJpcykKKyAgfSwKKworICB7IC5tb2RlbElkZW50aWZpZXIgPSBFVV9FU1lTXzEyLAorICAgIC5tb2RlbE5hbWUgPSAiRXN5cyAxMiIsCisgICAgLmNlbGxDb3VudCA9IDEyLAorICAgIC5oYXNCcmFpbGxlS2V5Ym9hcmQgPSAxLAorICAgIC5pc0VzeXMgPSAxLAorICAgIC5rZXlUYWJsZSA9ICZLRVlfVEFCTEVfREVGSU5JVElPTihlc3lzX3NtYWxsKQorICB9LAorCisgIHsgLm1vZGVsSWRlbnRpZmllciA9IEVVX0VTWVNfNDAsCisgICAgLm1vZGVsTmFtZSA9ICJFc3lzIDQwIiwKKyAgICAuY2VsbENvdW50ID0gNDAsCisgICAgLmhhc0JyYWlsbGVLZXlib2FyZCA9IDEsCisgICAgLmlzRXN5cyA9IDEsCisgICAgLmtleVRhYmxlID0gJktFWV9UQUJMRV9ERUZJTklUSU9OKGVzeXNfbWVkaXVtKQorICB9LAorCisgIHsgLm1vZGVsSWRlbnRpZmllciA9IEVVX0VTWVNfTElHSFRfNDAsCisgICAgLm1vZGVsTmFtZSA9ICJFc3lzIExpZ2h0IDQwIiwKKyAgICAuY2VsbENvdW50ID0gNDAsCisgICAgLmlzRXN5cyA9IDEsCisgICAgLmtleVRhYmxlID0gJktFWV9UQUJMRV9ERUZJTklUSU9OKGVzeXNfbWVkaXVtKQorICB9LAorCisgIHsgLm1vZGVsSWRlbnRpZmllciA9IEVVX0VTWVNfMjQsCisgICAgLm1vZGVsTmFtZSA9ICJFc3lzIDI0IiwKKyAgICAuY2VsbENvdW50ID0gMjQsCisgICAgLmhhc0JyYWlsbGVLZXlib2FyZCA9IDEsCisgICAgLmlzRXN5cyA9IDEsCisgICAgLmtleVRhYmxlID0gJktFWV9UQUJMRV9ERUZJTklUSU9OKGVzeXNfc21hbGwpCisgIH0sCisKKyAgeyAubW9kZWxJZGVudGlmaWVyID0gRVVfRVNZU182NCwKKyAgICAubW9kZWxOYW1lID0gIkVzeXMgNjQiLAorICAgIC5jZWxsQ291bnQgPSA2NCwKKyAgICAuaGFzQnJhaWxsZUtleWJvYXJkID0gMSwKKyAgICAuaXNFc3lzID0gMSwKKyAgICAua2V5VGFibGUgPSAmS0VZX1RBQkxFX0RFRklOSVRJT04oZXN5c19tZWRpdW0pCisgIH0sCisKKyAgeyAubW9kZWxJZGVudGlmaWVyID0gRVVfRVNZU184MCwKKyAgICAubW9kZWxOYW1lID0gIkVzeXMgODAiLAorICAgIC5jZWxsQ291bnQgPSA4MCwKKyAgICAuaGFzQnJhaWxsZUtleWJvYXJkID0gMSwKKyAgICAuaXNFc3lzID0gMSwKKyAgICAua2V5VGFibGUgPSAmS0VZX1RBQkxFX0RFRklOSVRJT04oZXN5c19sYXJnZSkKKyAgfSwKKworICB7IC5tb2RlbElkZW50aWZpZXIgPSBFVV9FU1lTX0xJR0hUXzgwLAorICAgIC5tb2RlbE5hbWUgPSAiRXN5cyBMaWdodCA4MCIsCisgICAgLmNlbGxDb3VudCA9IDgwLAorICAgIC5pc0VzeXMgPSAxLAorICAgIC5rZXlUYWJsZSA9ICZLRVlfVEFCTEVfREVGSU5JVElPTihlc3lzX2xhcmdlKQorICB9LAorCisgIHsgLm1vZGVsSWRlbnRpZmllciA9IEVVX0VTWVRJTUVfMzIsCisgICAgLm1vZGVsTmFtZSA9ICJFc3l0aW1lIDMyIiwKKyAgICAuY2VsbENvdW50ID0gMzIsCisgICAgLmhhc0JyYWlsbGVLZXlib2FyZCA9IDEsCisgICAgLmhhc09wdGljYWxCYXIgPSAxLAorICAgIC5pc0VzeXRpbWUgPSAxLAorICAgIC5rZXlUYWJsZSA9ICZLRVlfVEFCTEVfREVGSU5JVElPTihlc3l0aW1lKQorICB9LAorCisgIHsgLm1vZGVsSWRlbnRpZmllciA9IEVVX0VTWVRJTUVfMzJfU1RBTkRBUkQsCisgICAgLm1vZGVsTmFtZSA9ICJFc3l0aW1lIDMyIFN0YW5kYXJkIiwKKyAgICAuY2VsbENvdW50ID0gMzIsCisgICAgLmhhc0JyYWlsbGVLZXlib2FyZCA9IDEsCisgICAgLmlzRXN5dGltZSA9IDEsCisgICAgLmtleVRhYmxlID0gJktFWV9UQUJMRV9ERUZJTklUSU9OKGVzeXRpbWUpCisgIH0sCisKKyAgeyAubW9kZWxJZGVudGlmaWVyID0gRVVfRVNZVElNRV9FVk8sCisgICAgLm1vZGVsTmFtZSA9ICJFc3l0aW1lIEV2b2x1dGlvbiIsCisgICAgLmNlbGxDb3VudCA9IDMyLAorICAgIC5oYXNCcmFpbGxlS2V5Ym9hcmQgPSAxLAorICAgIC5oYXNPcHRpY2FsQmFyID0gMSwKKyAgICAuaXNFc3l0aW1lID0gMSwKKyAgICAua2V5VGFibGUgPSAmS0VZX1RBQkxFX0RFRklOSVRJT04oZXN5dGltZSkKKyAgfSwKKworICB7IC5tb2RlbElkZW50aWZpZXIgPSBFVV9FU1lUSU1FX0VWT19TVEFOREFSRCwKKyAgICAubW9kZWxOYW1lID0gIkVzeXRpbWUgRXZvbHV0aW9uIFN0YW5kYXJkIiwKKyAgICAuY2VsbENvdW50ID0gMzIsCisgICAgLmhhc0JyYWlsbGVLZXlib2FyZCA9IDEsCisgICAgLmlzRXN5dGltZSA9IDEsCisgICAgLmtleVRhYmxlID0gJktFWV9UQUJMRV9ERUZJTklUSU9OKGVzeXRpbWUpCisgIH0sCisKKyAgeyAubW9kZWxOYW1lID0gTlVMTCB9Cit9OworCitzdGF0aWMgaW50IGhhdmVTeXN0ZW1JbmZvcm1hdGlvbjsKK3N0YXRpYyBjb25zdCBNb2RlbEVudHJ5ICptb2RlbDsKK3N0YXRpYyB1aW50MzJfdCBmaXJtd2FyZVZlcnNpb247CitzdGF0aWMgdWludDMyX3QgcHJvdG9jb2xWZXJzaW9uOworc3RhdGljIHVpbnQzMl90IGRldmljZU9wdGlvbnM7CitzdGF0aWMgdWludDE2X3QgbWF4aW11bUZyYW1lTGVuZ3RoOworCitzdGF0aWMgdW5zaWduZWQgY2hhciBmb3JjZVdpbmRvd1Jld3JpdGU7CitzdGF0aWMgdW5zaWduZWQgY2hhciBmb3JjZVZpc3VhbFJld3JpdGU7CitzdGF0aWMgdW5zaWduZWQgY2hhciBmb3JjZUN1cnNvclJld3JpdGU7CisKK3N0YXRpYyB1bnNpZ25lZCBjaGFyIHNlcXVlbmNlQ2hlY2s7CitzdGF0aWMgdW5zaWduZWQgY2hhciBzZXF1ZW5jZUtub3duOworc3RhdGljIHVuc2lnbmVkIGNoYXIgc2VxdWVuY2VOdW1iZXI7CisKK3N0YXRpYyBLZXlOdW1iZXJTZXQgY29tbWFuZEtleXM7CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorZm9yY2VSZXdyaXRlICh2b2lkKSB7CisgIGZvcmNlV2luZG93UmV3cml0ZSA9IDE7CisgIGZvcmNlVmlzdWFsUmV3cml0ZSA9IDE7CisgIGZvcmNlQ3Vyc29yUmV3cml0ZSA9IDE7Cit9CisKK3N0YXRpYyBzc2l6ZV90CityZWFkUGFja2V0IChCcmFpbGxlRGlzcGxheSAqYnJsLCB2b2lkICpwYWNrZXQsIHNpemVfdCBzaXplKSB7CisgIHVuc2lnbmVkIGNoYXIgKmJ1ZmZlciA9IHBhY2tldDsKKyAgY29uc3QgdW5zaWduZWQgY2hhciBwYWQgPSAwWDU1OworICB1bnNpZ25lZCBpbnQgb2Zmc2V0ID0gMDsKKyAgdW5zaWduZWQgaW50IGxlbmd0aCA9IDM7CisKKyAgd2hpbGUgKDEpCisgICAgeworICAgICAgaW50IHN0YXJ0ZWQgPSBvZmZzZXQgPiAwOworICAgICAgdW5zaWduZWQgY2hhciBieXRlOworCisgICAgICBpZiAoIWlvLT5yZWFkQnl0ZShicmwsICZieXRlLCBzdGFydGVkKSkKKyAgICAgICAgeworICAgICAgICAgIGlmIChzdGFydGVkKSBsb2dQYXJ0aWFsUGFja2V0KGJ1ZmZlciwgb2Zmc2V0KTsKKyAgICAgICAgICByZXR1cm4gKGVycm5vID09IEVBR0FJTik/IDA6IC0xOworICAgICAgICB9CisKKyAgICAgIHN3aXRjaCAob2Zmc2V0KQorICAgICAgICB7CisgICAgICAgICAgY2FzZSAwOiB7CisgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIHNlcXVlbmNlID0gc2VxdWVuY2VDaGVjazsKKyAgICAgICAgICAgIHNlcXVlbmNlQ2hlY2sgPSAwOworCisgICAgICAgICAgICBpZiAoc2VxdWVuY2UgJiYgc2VxdWVuY2VLbm93bikgeworICAgICAgICAgICAgICBpZiAoYnl0ZSA9PSArK3NlcXVlbmNlTnVtYmVyKSBjb250aW51ZTsKKyAgICAgICAgICAgICAgbG9nSW5wdXRQcm9ibGVtKCJVbmV4cGVjdGVkIFNlcXVlbmNlIE51bWJlciIsICZieXRlLCAxKTsKKyAgICAgICAgICAgICAgc2VxdWVuY2VLbm93biA9IDA7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChieXRlID09IHBhZCkgY29udGludWU7CisgICAgICAgICAgICBpZiAoYnl0ZSA9PSBBU0NJSV9TVFgpIGJyZWFrOworCisgICAgICAgICAgICBpZiAoc2VxdWVuY2UgJiYgIXNlcXVlbmNlS25vd24pIHsKKyAgICAgICAgICAgICAgc2VxdWVuY2VOdW1iZXIgPSBieXRlOworICAgICAgICAgICAgICBzZXF1ZW5jZUtub3duID0gMTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgIGxvZ0lnbm9yZWRCeXRlKGJ5dGUpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICB9CisKKyAgICAgICAgICBjYXNlIDE6CisgICAgICAgICAgICBpZiAoKGJ5dGUgPT0gcGFkKSAmJiAhc2VxdWVuY2VLbm93bikgeworICAgICAgICAgICAgICBzZXF1ZW5jZU51bWJlciA9IGJ1ZmZlclswXTsKKyAgICAgICAgICAgICAgc2VxdWVuY2VLbm93biA9IDE7CisgICAgICAgICAgICAgIG9mZnNldCA9IDA7CisgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICBjYXNlIDI6CisgICAgICAgICAgICBsZW5ndGggPSAoKGJ1ZmZlclsxXSA8PCA4KSB8IGJ5dGUpICsgMjsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgIGlmIChvZmZzZXQgPCBzaXplKQorICAgICAgICB7CisgICAgICAgICAgYnVmZmVyW29mZnNldF0gPSBieXRlOworICAgICAgICB9CisgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICBpZiAob2Zmc2V0ID09IGxlbmd0aCkgbG9nVHJ1bmNhdGVkUGFja2V0KGJ1ZmZlciwgb2Zmc2V0KTsKKyAgICAgICAgICBsb2dEaXNjYXJkZWRCeXRlKGJ5dGUpOworICAgICAgICB9CisKKyAgICAgIGlmICgrK29mZnNldCA9PSBsZW5ndGgpCisgICAgICAgIHsKKyAgICAgICAgICBpZiAoYnl0ZSAhPSBBU0NJSV9FVFgpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGxvZ0NvcnJ1cHRQYWNrZXQoYnVmZmVyLCBvZmZzZXQpOworICAgICAgICAgICAgICBvZmZzZXQgPSAwOworICAgICAgICAgICAgICBsZW5ndGggPSAzOworICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgIHNlcXVlbmNlQ2hlY2sgPSAxOworICAgICAgICAgIGxvZ0lucHV0UGFja2V0KGJ1ZmZlciwgb2Zmc2V0KTsKKyAgICAgICAgICByZXR1cm4gb2Zmc2V0OworICAgICAgICB9CisgICAgfQorfQorCitzdGF0aWMgc3NpemVfdAord3JpdGVQYWNrZXQgKEJyYWlsbGVEaXNwbGF5ICpicmwsIGNvbnN0IHZvaWQgKnBhY2tldCwgc2l6ZV90IHNpemUpIHsKKyAgaW50IHBhY2tldFNpemUgPSBzaXplICsgMjsKKyAgdW5zaWduZWQgY2hhciBidWZbcGFja2V0U2l6ZSArIDJdOworICBpZiAoIWlvIHx8ICFwYWNrZXQgfHwgIXNpemUpCisgICAgcmV0dXJuICgtMSk7CisgIGJ1ZlswXSA9IEFTQ0lJX1NUWDsKKyAgYnVmWzFdID0gKHBhY2tldFNpemUgPj4gOCkgJiAweDAwRkY7CisgIGJ1ZlsyXSA9IHBhY2tldFNpemUgJiAweDAwRkY7CisgIG1lbWNweShidWYgKyAzLCBwYWNrZXQsIHNpemUpOworICBidWZbc2l6ZW9mKGJ1ZiktMV0gPSBBU0NJSV9FVFg7CisgIGxvZ091dHB1dFBhY2tldChidWYsIHNpemVvZihidWYpKTsKKyAgcmV0dXJuIGlvLT53cml0ZURhdGEoYnJsLCBidWYsIHNpemVvZihidWYpKTsKK30KKworc3RhdGljIGNvbnN0IE1vZGVsRW50cnkgKgorZ2V0TW9kZWxFbnRyeSAodW5zaWduZWQgY2hhciBpZGVudGlmaWVyKSB7CisgIGNvbnN0IE1vZGVsRW50cnkgKm1kbCA9IG1vZGVsVGFibGU7CisKKyAgd2hpbGUgKG1kbC0+bW9kZWxOYW1lKSB7CisgICAgaWYgKG1kbC0+bW9kZWxJZGVudGlmaWVyID09IGlkZW50aWZpZXIpIHJldHVybiBtZGw7CisgICAgbWRsICs9IDE7CisgIH0KKworICByZXR1cm4gTlVMTDsKK30KKworc3RhdGljIGludAoraGFuZGxlU3lzdGVtSW5mb3JtYXRpb24gKEJyYWlsbGVEaXNwbGF5ICpicmwsIHVuc2lnbmVkIGNoYXIgKnBhY2tldCkgeworICBpbnQgbG9nTGV2ZWwgPSBMT0dfSU5GTzsKKyAgY29uc3QgY2hhciAqaW5mb0Rlc2NyaXB0aW9uOworICBlbnVtIHtVbmtub3duLCBFbmQsIFN0cmluZywgRGVjOCwgRGVjMTYsIEhleDMyfSBpbmZvVHlwZTsKKworICBzd2l0Y2gocGFja2V0WzBdKSB7CisgICAgY2FzZSBMUF9TWVNURU1fU0hPUlROQU1FOiAKKyAgICAgIGluZm9UeXBlID0gU3RyaW5nOworICAgICAgaW5mb0Rlc2NyaXB0aW9uID0gIlNob3J0IE5hbWUiOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIExQX1NZU1RFTV9JREVOVElUWTogCisgICAgICBpbmZvVHlwZSA9IEVuZDsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBMUF9TWVNURU1fRElTUExBWV9MRU5HVEg6IAorICAgICAgaWYgKGhhdmVTeXN0ZW1JbmZvcm1hdGlvbikgYnJsLT5yZXNpemVSZXF1aXJlZCA9IDE7CisgICAgICBicmwtPnRleHRDb2x1bW5zID0gcGFja2V0WzFdOworCisgICAgICBpbmZvVHlwZSA9IERlYzg7CisgICAgICBpbmZvRGVzY3JpcHRpb24gPSAiQ2VsbCBDb3VudCI7CisgICAgICBicmVhazsKKworICAgIGNhc2UgTFBfU1lTVEVNX0xBTkdVQUdFOiAKKyAgICAgIGluZm9UeXBlID0gU3RyaW5nOworICAgICAgaW5mb0Rlc2NyaXB0aW9uID0gIkNvdW50cnkgQ29kZSI7CisgICAgICBicmVhazsKKworICAgIGNhc2UgTFBfU1lTVEVNX0ZSQU1FX0xFTkdUSDogCisgICAgICBtYXhpbXVtRnJhbWVMZW5ndGggPSAocGFja2V0WzFdIDw8IDgpCisgICAgICAgICAgICAgICAgICAgICAgICAgfCAocGFja2V0WzJdIDw8IDApCisgICAgICAgICAgICAgICAgICAgICAgICAgOworCisgICAgICBpbmZvVHlwZSA9IERlYzE2OworICAgICAgaW5mb0Rlc2NyaXB0aW9uID0gIk1heGltdW0gRnJhbWUgTGVuZ3RoIjsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBMUF9TWVNURU1fTkFNRTogCisgICAgICBpbmZvVHlwZSA9IFN0cmluZzsKKyAgICAgIGluZm9EZXNjcmlwdGlvbiA9ICJMb25nIE5hbWUiOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIExQX1NZU1RFTV9PUFRJT046IAorICAgICAgZGV2aWNlT3B0aW9ucyA9IChwYWNrZXRbMV0gPDwgMjQpCisgICAgICAgICAgICAgICAgICAgIHwgKHBhY2tldFsyXSA8PCAxNikKKyAgICAgICAgICAgICAgICAgICAgfCAocGFja2V0WzNdIDw8ICA4KQorICAgICAgICAgICAgICAgICAgICB8IChwYWNrZXRbNF0gPDwgIDApCisgICAgICAgICAgICAgICAgICAgIDsKKworICAgICAgaW5mb1R5cGUgPSBIZXgzMjsKKyAgICAgIGluZm9EZXNjcmlwdGlvbiA9ICJEZXZpY2UgT3B0aW9ucyI7CisgICAgICBicmVhazsKKworICAgIGNhc2UgTFBfU1lTVEVNX1BST1RPQ09MOiAKKyAgICAgIHByb3RvY29sVmVyc2lvbiA9ICgocGFja2V0WzFdIC0gJzAnKSA8PCAxNikKKyAgICAgICAgICAgICAgICAgICAgICB8ICgocGFja2V0WzNdIC0gJzAnKSA8PCAgOCkKKyAgICAgICAgICAgICAgICAgICAgICB8ICgocGFja2V0WzRdIC0gJzAnKSA8PCAgMCkKKyAgICAgICAgICAgICAgICAgICAgICA7CisKKyAgICAgIGluZm9UeXBlID0gU3RyaW5nOworICAgICAgaW5mb0Rlc2NyaXB0aW9uID0gIlByb3RvY29sIFZlcnNpb24iOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIExQX1NZU1RFTV9TRVJJQUw6IAorICAgICAgaW5mb1R5cGUgPSBTdHJpbmc7CisgICAgICBpbmZvRGVzY3JpcHRpb24gPSAiU2VyaWFsIE51bWJlciI7CisgICAgICBicmVhazsKKworICAgIGNhc2UgTFBfU1lTVEVNX1RZUEU6CisgICAgICB7CisgICAgICAgIHVuc2lnbmVkIGNoYXIgaWRlbnRpZmllciA9IHBhY2tldFsxXTsKKworICAgICAgICBpZiAoIShtb2RlbCA9IGdldE1vZGVsRW50cnkoaWRlbnRpZmllcikpKSB7CisgICAgICAgICAgbG9nTWVzc2FnZShMT0dfV0FSTklORywgInVua25vd24gRXVyb0JyYWlsbGUgbW9kZWw6IDBYJTAyWCIsIGlkZW50aWZpZXIpOworICAgICAgICB9CisgICAgICB9CisKKyAgICAgIGluZm9UeXBlID0gRGVjODsKKyAgICAgIGluZm9EZXNjcmlwdGlvbiA9ICJNb2RlbCBJZGVudGlmaWVyIjsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBMUF9TWVNURU1fU09GVFdBUkU6IAorICAgICAgZmlybXdhcmVWZXJzaW9uID0gKChwYWNrZXRbMV0gLSAnMCcpIDw8IDE2KQorICAgICAgICAgICAgICAgICAgICAgIHwgKChwYWNrZXRbM10gLSAnMCcpIDw8ICA4KQorICAgICAgICAgICAgICAgICAgICAgIHwgKChwYWNrZXRbNF0gLSAnMCcpIDw8ICAwKQorICAgICAgICAgICAgICAgICAgICAgIDsKKworICAgICAgaW5mb1R5cGUgPSBTdHJpbmc7CisgICAgICBpbmZvRGVzY3JpcHRpb24gPSAiRmlybXdhcmUgVmVyc2lvbiI7CisgICAgICBicmVhazsKKworICAgIGRlZmF1bHQ6CisgICAgICBpbmZvVHlwZSA9IFVua25vd247CisgICAgICBicmVhazsKKyAgfQorCisgIHN3aXRjaCAoaW5mb1R5cGUpIHsKKyAgICBjYXNlIFVua25vd246CisgICAgICBsb2dNZXNzYWdlKExPR19XQVJOSU5HLCAidW5rbm93biBFc3lzaXJpcyBzeXN0ZW0gaW5mb3JtYXRpb24gc3ViY29kZTogMFglMDJYIiwgcGFja2V0WzBdKTsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBFbmQ6CisgICAgICBsb2dNZXNzYWdlKExPR19ERUJVRywgImVuZCBvZiBFc3lzaXJpcyBzeXN0ZW0gaW5mb3JtYXRpb24iKTsKKyAgICAgIHJldHVybiAxOworCisgICAgY2FzZSBTdHJpbmc6CisgICAgICBsb2dNZXNzYWdlKGxvZ0xldmVsLCAiRXN5c2lyaXMgJXM6ICVzIiwgaW5mb0Rlc2NyaXB0aW9uLCAmcGFja2V0WzFdKTsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBEZWM4OgorICAgICAgbG9nTWVzc2FnZShsb2dMZXZlbCwgIkVzeXNpcmlzICVzOiAldSIsIGluZm9EZXNjcmlwdGlvbiwgcGFja2V0WzFdKTsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBEZWMxNjoKKyAgICAgIGxvZ01lc3NhZ2UobG9nTGV2ZWwsICJFc3lzaXJpcyAlczogJXUiLCBpbmZvRGVzY3JpcHRpb24sIChwYWNrZXRbMV0gPDwgOCkgfCBwYWNrZXRbMl0pOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIEhleDMyOgorICAgICAgbG9nTWVzc2FnZShsb2dMZXZlbCwgIkVzeXNpcmlzICVzOiAwWCUwMlglMDJYJTAyWCUwMlgiLAorICAgICAgICAgICAgICAgICBpbmZvRGVzY3JpcHRpb24sIHBhY2tldFsxXSwgcGFja2V0WzJdLCBwYWNrZXRbM10sIHBhY2tldFs0XSk7CisgICAgICBicmVhazsKKworICAgIGRlZmF1bHQ6CisgICAgICBsb2dNZXNzYWdlKExPR19XQVJOSU5HLCAidW5pbXBsZW1lbnRlZCBFc3lzaXJpcyBzeXN0ZW0gaW5mb3JtYXRpb24gc3ViY29kZSB0eXBlOiAwWCUwMlgiLCBpbmZvVHlwZSk7CisgICAgICBicmVhazsKKyAgfQorCisgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50CittYWtlS2V5Ym9hcmRDb21tYW5kIChCcmFpbGxlRGlzcGxheSAqYnJsLCBjb25zdCB1bnNpZ25lZCBjaGFyICpwYWNrZXQpIHsKKyAgdW5zaWduZWQgY2hhciBhID0gcGFja2V0WzFdOworICB1bnNpZ25lZCBjaGFyIGIgPSBwYWNrZXRbMl07CisgIHVuc2lnbmVkIGNoYXIgYyA9IHBhY2tldFszXTsKKyAgdW5zaWduZWQgY2hhciBkID0gcGFja2V0WzRdOworICBpbnQgY29tbWFuZCA9IDA7CisKKyAgc3dpdGNoIChhKSB7CisgICAgY2FzZSAwOgorICAgICAgc3dpdGNoIChiKSB7CisgICAgICAgIGNhc2UgMDoKKyAgICAgICAgICBjb21tYW5kID0gQlJMX0NNRF9CTEsoUEFTU0NIQVIpIHwgZDsKKyAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIEFTQ0lJX0JTOgorICAgICAgICAgIGNvbW1hbmQgPSBCUkxfQ01EX0JMSyhQQVNTS0VZKSB8IEJSTF9LRVlfQkFDS1NQQUNFOworICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgQVNDSUlfSFQ6CisgICAgICAgICAgY29tbWFuZCA9IEJSTF9DTURfQkxLKFBBU1NLRVkpIHwgQlJMX0tFWV9UQUI7CisgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBBU0NJSV9DUjoKKyAgICAgICAgICBjb21tYW5kID0gQlJMX0NNRF9CTEsoUEFTU0tFWSkgfCBCUkxfS0VZX0VOVEVSOworICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgQVNDSUlfRVNDOgorICAgICAgICAgIGNvbW1hbmQgPSBCUkxfQ01EX0JMSyhQQVNTS0VZKSB8IEJSTF9LRVlfRVNDQVBFOworICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgMFgyMDogLy8gc3BhY2UKKyAgICAgICAgICBjb21tYW5kID0gQlJMX0NNRF9CTEsoUEFTU0NIQVIpIHwgYjsKKyAgICAgICAgICBicmVhazsKKworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgIGlmICgoYiA+PSAwWDcwKSAmJiAoYiA8PSAwWDdCKSkgeworICAgICAgICAgICAgY29tbWFuZCA9IEJSTF9DTURfQkxLKFBBU1NLRVkpIHwgKEJSTF9LRVlfRlVOQ1RJT04gKyAoYiAtIDBYNzApKTsKKyAgICAgICAgICB9CisgICAgICAgICAgYnJlYWs7CisgICAgICB9CisgICAgICBicmVhazsKKworICAgIGNhc2UgMToKKyAgICAgIHN3aXRjaCAoYikgeworICAgICAgICBjYXNlIDBYMDc6CisgICAgICAgICAgY29tbWFuZCA9IEJSTF9DTURfQkxLKFBBU1NLRVkpIHwgQlJMX0tFWV9IT01FOworICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgMFgwODoKKyAgICAgICAgICBjb21tYW5kID0gQlJMX0NNRF9CTEsoUEFTU0tFWSkgfCBCUkxfS0VZX0VORDsKKyAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIDBYMDk6CisgICAgICAgICAgY29tbWFuZCA9IEJSTF9DTURfQkxLKFBBU1NLRVkpIHwgQlJMX0tFWV9QQUdFX1VQOworICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgMFgwQToKKyAgICAgICAgICBjb21tYW5kID0gQlJMX0NNRF9CTEsoUEFTU0tFWSkgfCBCUkxfS0VZX1BBR0VfRE9XTjsKKyAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIDBYMEI6CisgICAgICAgICAgY29tbWFuZCA9IEJSTF9DTURfQkxLKFBBU1NLRVkpIHwgQlJMX0tFWV9DVVJTT1JfTEVGVDsKKyAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIDBYMEM6CisgICAgICAgICAgY29tbWFuZCA9IEJSTF9DTURfQkxLKFBBU1NLRVkpIHwgQlJMX0tFWV9DVVJTT1JfUklHSFQ7CisgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSAwWDBEOgorICAgICAgICAgIGNvbW1hbmQgPSBCUkxfQ01EX0JMSyhQQVNTS0VZKSB8IEJSTF9LRVlfQ1VSU09SX1VQOworICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgMFgwRToKKyAgICAgICAgICBjb21tYW5kID0gQlJMX0NNRF9CTEsoUEFTU0tFWSkgfCBCUkxfS0VZX0NVUlNPUl9ET1dOOworICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgMFgwRjoKKyAgICAgICAgICBjb21tYW5kID0gQlJMX0NNRF9CTEsoUEFTU0tFWSkgfCBCUkxfS0VZX0lOU0VSVDsKKyAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIDBYMTA6CisgICAgICAgICAgY29tbWFuZCA9IEJSTF9DTURfQkxLKFBBU1NLRVkpIHwgQlJMX0tFWV9ERUxFVEU7CisgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICAgIGJyZWFrOworCisgICAgZGVmYXVsdDoKKyAgICAgIGJyZWFrOworICB9CisKKyAgaWYgKCFjb21tYW5kKSByZXR1cm4gQlJMX0NNRF9OT09QOworCisgIGlmIChjICYgMFgwMikgY29tbWFuZCB8PSBCUkxfRkxHX0lOUFVUX0NPTlRST0w7CisgIGlmIChjICYgMFgwNCkgY29tbWFuZCB8PSBCUkxfRkxHX0lOUFVUX01FVEE7CisgIHJldHVybiBjb21tYW5kOworfQorCitzdGF0aWMgaW50CitoYW5kbGVLZXlFdmVudCAoQnJhaWxsZURpc3BsYXkgKmJybCwgdW5zaWduZWQgY2hhciAqcGFja2V0KSB7CisgIHN3aXRjaCAocGFja2V0WzBdKSB7CisgICAgY2FzZSBMUF9LRVlfQlJBSUxMRTogeworICAgICAgS2V5TnVtYmVyU2V0IGtleXMgPSAoKHBhY2tldFsxXSA8PCA4KSB8IHBhY2tldFsyXSkgJiAwWDNGZjsKKyAgICAgIGVucXVldWVLZXlzKGJybCwga2V5cywgRVVfR1JQX0JyYWlsbGVLZXlzLCAwKTsKKyAgICAgIHJldHVybiAxOworICAgIH0KKworICAgIGNhc2UgTFBfS0VZX0lOVEVSQUNUSVZFOiB7CisgICAgICB1bnNpZ25lZCBjaGFyIGtleSA9IHBhY2tldFsyXTsKKworICAgICAgaWYgKChrZXkgPiAwKSAmJiAoa2V5IDw9IGJybC0+dGV4dENvbHVtbnMpKSB7CisgICAgICAgIGtleSAtPSAxOworCisgICAgICAgIHN3aXRjaCAocGFja2V0WzFdKSB7CisgICAgICAgICAgY2FzZSBJTlRFUkFDVElWRV9TSU5HTEVfQ0xJQzogLy8gc2luZ2xlIGNsaWNrCisgICAgICAgICAgICBlbnF1ZXVlS2V5KGJybCwgRVVfR1JQX1JvdXRpbmdLZXlzMSwga2V5KTsKKyAgICAgICAgICBjYXNlIElOVEVSQUNUSVZFX1JFUEVUSVRJT046IC8vIHJlcGVhdAorICAgICAgICAgICAgcmV0dXJuIDE7CisKKyAgICAgICAgICBjYXNlIElOVEVSQUNUSVZFX0RPVUJMRV9DTElDOiAvLyBkb3VibGUgY2xpY2sKKyAgICAgICAgICAgIGVucXVldWVLZXkoYnJsLCBFVV9HUlBfUm91dGluZ0tleXMyLCBrZXkpOworICAgICAgICAgICAgcmV0dXJuIDE7CisKKyAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgIH0KKworICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBMUF9LRVlfQ09NTUFORDogeworICAgICAgS2V5TnVtYmVyU2V0IGtleXM7CisKKyAgICAgIGlmIChtb2RlbC0+aXNJcmlzKSB7CisgICAgICAgIGtleXMgPSAoKHBhY2tldFsxXSA8PCA4KSB8IHBhY2tldFsyXSkgJiAwWEZGRjsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIGtleXMgPSAocGFja2V0WzFdIDw8IDI0KSArIChwYWNrZXRbMl0gPDwgMTYpICsgKHBhY2tldFszXSA8PCA4KSArIHBhY2tldFs0XTsKKyAgICAgIH0KKworICAgICAgaWYgKG1vZGVsLT5pc0lyaXMpIHsKKyAgICAgICAgZW5xdWV1ZUtleXMoYnJsLCBrZXlzLCBFVV9HUlBfQ29tbWFuZEtleXMsIDApOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgZW5xdWV1ZVVwZGF0ZWRLZXlzKGJybCwga2V5cywgJmNvbW1hbmRLZXlzLCBFVV9HUlBfQ29tbWFuZEtleXMsIDApOworICAgICAgfQorCisgICAgICByZXR1cm4gMTsKKyAgICB9CisKKyAgICBjYXNlIExQX0tFWV9QQzogeworICAgICAgaW50IGNvbW1hbmQgPSBtYWtlS2V5Ym9hcmRDb21tYW5kKGJybCwgcGFja2V0KTsKKworICAgICAgZW5xdWV1ZUNvbW1hbmQoY29tbWFuZCk7CisgICAgICBpZiAoY29tbWFuZCAhPSBCUkxfQ01EX05PT1ApIHJldHVybiAxOworICAgICAgYnJlYWs7CisgICAgfQorCisgICAgZGVmYXVsdDoKKyAgICAgIGJyZWFrOworICB9CisKKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK3JlYWRDb21tYW5kIChCcmFpbGxlRGlzcGxheSAqYnJsLCBLZXlUYWJsZUNvbW1hbmRDb250ZXh0IGN0eCkgeworICB1bnNpZ25lZCBjaGFyCXBhY2tldFsyMDQ4XTsKKyAgc3NpemVfdCBsZW5ndGg7CisKKyAgd2hpbGUgKChsZW5ndGggPSByZWFkUGFja2V0KGJybCwgcGFja2V0LCBzaXplb2YocGFja2V0KSkpID4gMCkgeworICAgIHN3aXRjaCAocGFja2V0WzNdKSB7CisgICAgICBjYXNlIExQX1NZU1RFTToKKyAgICAgICAgaWYgKGhhbmRsZVN5c3RlbUluZm9ybWF0aW9uKGJybCwgcGFja2V0KzQpKSBoYXZlU3lzdGVtSW5mb3JtYXRpb24gPSAxOworICAgICAgICBjb250aW51ZTsKKworICAgICAgY2FzZSBMUF9LRVk6CisgICAgICAgIGlmIChoYW5kbGVLZXlFdmVudChicmwsIHBhY2tldCs0KSkgY29udGludWU7CisgICAgICAgIGJyZWFrOworCisgICAgICBjYXNlIExQX01PREU6CisgICAgICAgIGlmIChwYWNrZXRbNF0gPT0gTFBfTU9ERV9QSUxPVCkgeworICAgICAgICAgIC8qIHJldHVybiBmcm9tIGludGVybmFsIG1lbnUgKi8KKyAgICAgICAgICBmb3JjZVJld3JpdGUoKTsKKyAgICAgICAgfQorICAgICAgICBjb250aW51ZTsKKworICAgICAgY2FzZSBMUF9WSVNVOgorICAgICAgICAvKiBpZ25vcmUgdmlzdWFsaXphdGlvbiAqLworICAgICAgICBjb250aW51ZTsKKworICAgICAgZGVmYXVsdDoKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgbG9nVW5leHBlY3RlZFBhY2tldChwYWNrZXQsIGxlbmd0aCk7CisgIH0KKworICByZXR1cm4gKGxlbmd0aCA9PSAtMSk/IEJSTF9DTURfUkVTVEFSVEJSTDogRU9GOworfQorCitzdGF0aWMgaW50Citpbml0aWFsaXplRGV2aWNlIChCcmFpbGxlRGlzcGxheSAqYnJsKSB7CisgIGludCByZXRyaWVzTGVmdCA9IDI7CisgICAgICAKKyAgaGF2ZVN5c3RlbUluZm9ybWF0aW9uID0gMDsKKyAgbW9kZWwgPSBOVUxMOworICBmaXJtd2FyZVZlcnNpb24gPSAwOworICBwcm90b2NvbFZlcnNpb24gPSAwOworICBkZXZpY2VPcHRpb25zID0gMDsKKyAgbWF4aW11bUZyYW1lTGVuZ3RoID0gMDsKKworICBmb3JjZVJld3JpdGUoKTsKKyAgc2VxdWVuY2VDaGVjayA9IDA7CisgIHNlcXVlbmNlS25vd24gPSAwOworCisgIGNvbW1hbmRLZXlzID0gMDsKKworICBkbyB7CisgICAgeworICAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgcGFja2V0W10gPSB7TFBfU1lTVEVNLCBMUF9TWVNURU1fSURFTlRJVFl9OworICAgICAgaWYgKHdyaXRlUGFja2V0KGJybCwgcGFja2V0LCBzaXplb2YocGFja2V0KSkgPT0gLTEpIHJldHVybiAwOworICAgIH0KKworICAgIHdoaWxlIChpby0+YXdhaXRJbnB1dChicmwsIDUwMCkpIHsKKyAgICAgIGlmIChyZWFkQ29tbWFuZChicmwsIEtUQl9DVFhfREVGQVVMVCkgPT0gQlJMX0NNRF9SRVNUQVJUQlJMKSByZXR1cm4gMDsKKworICAgICAgaWYgKGhhdmVTeXN0ZW1JbmZvcm1hdGlvbikgeworICAgICAgICBpZiAoIW1vZGVsKSByZXR1cm4gMDsKKyAgICAgICAgc2V0QnJhaWxsZUtleVRhYmxlKGJybCwgbW9kZWwtPmtleVRhYmxlKTsKKworICAgICAgICBpZiAoIW1heGltdW1GcmFtZUxlbmd0aCkgeworICAgICAgICAgIGlmIChtb2RlbC0+aXNJcmlzKSBtYXhpbXVtRnJhbWVMZW5ndGggPSAyMDQ4OworICAgICAgICAgIGlmIChtb2RlbC0+aXNFc3lzKSBtYXhpbXVtRnJhbWVMZW5ndGggPSAxMjg7CisgICAgICAgICAgaWYgKG1vZGVsLT5pc0VzeXRpbWUpIG1heGltdW1GcmFtZUxlbmd0aCA9IDUxMjsKKyAgICAgICAgfQorCisgICAgICAgIGxvZ01lc3NhZ2UoTE9HX0lORk8sICJNb2RlbCBEZXRlY3RlZDogJXMgKCV1IGNlbGxzKSIsCisgICAgICAgICAgICAgICAgICAgbW9kZWwtPm1vZGVsTmFtZSwgYnJsLT50ZXh0Q29sdW1ucyk7CisgICAgICAgIHJldHVybiAxOworICAgICAgfQorICAgIH0KKyAgfSB3aGlsZSAocmV0cmllc0xlZnQtLSAmJiAoZXJybm8gPT0gRUFHQUlOKSk7CisKKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK3Jlc2V0RGV2aWNlIChCcmFpbGxlRGlzcGxheSAqYnJsKSB7CisgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50Cit3cml0ZVdpbmRvdyAoQnJhaWxsZURpc3BsYXkgKmJybCkgeworICBzdGF0aWMgdW5zaWduZWQgY2hhciBwcmV2aW91c0NlbGxzW01BWElNVU1fRElTUExBWV9TSVpFXTsKKyAgdW5zaWduZWQgaW50IHNpemUgPSBicmwtPnRleHRDb2x1bW5zICogYnJsLT50ZXh0Um93czsKKyAgCisgIGlmIChjZWxsc0hhdmVDaGFuZ2VkKHByZXZpb3VzQ2VsbHMsIGJybC0+YnVmZmVyLCBzaXplLCBOVUxMLCBOVUxMLCAmZm9yY2VXaW5kb3dSZXdyaXRlKSkgeworICAgIHVuc2lnbmVkIGNoYXIgZGF0YVtzaXplICsgMl07CisgICAgdW5zaWduZWQgY2hhciAqYnl0ZSA9IGRhdGE7CisKKyAgICAqYnl0ZSsrID0gTFBfQlJBSUxMRV9ESVNQTEFZOworICAgICpieXRlKysgPSBMUF9CUkFJTExFX0RJU1BMQVlfU1RBVElDOworICAgIGJ5dGUgPSB0cmFuc2xhdGVPdXRwdXRDZWxscyhieXRlLCBicmwtPmJ1ZmZlciwgc2l6ZSk7CisKKyAgICBpZiAod3JpdGVQYWNrZXQoYnJsLCBkYXRhLCBieXRlLWRhdGEpID09IC0xKSByZXR1cm4gMDsKKyAgfQorCisgIHJldHVybiAxOworfQorCitzdGF0aWMgaW50CitoYXNWaXN1YWxEaXNwbGF5IChCcmFpbGxlRGlzcGxheSAqYnJsKSB7CisgIHJldHVybiBtb2RlbC0+aGFzVmlzdWFsRGlzcGxheTsKK30KKworc3RhdGljIGludAord3JpdGVWaXN1YWwgKEJyYWlsbGVEaXNwbGF5ICpicmwsIGNvbnN0IHdjaGFyX3QgKnRleHQpIHsKKyAgaWYgKG1vZGVsLT5oYXNWaXN1YWxEaXNwbGF5KSB7CisgICAgeworICAgICAgc3RhdGljIHdjaGFyX3QgcHJldmlvdXNUZXh0W01BWElNVU1fRElTUExBWV9TSVpFXTsKKyAgICAgIHVuc2lnbmVkIGludCBzaXplID0gYnJsLT50ZXh0Q29sdW1ucyAqIGJybC0+dGV4dFJvd3M7CisgICAgICAKKyAgICAgIGlmICh0ZXh0SGFzQ2hhbmdlZChwcmV2aW91c1RleHQsIHRleHQsIHNpemUsIE5VTEwsIE5VTEwsICZmb3JjZVZpc3VhbFJld3JpdGUpKSB7CisgICAgICAgIHVuc2lnbmVkIGNoYXIgZGF0YVtzaXplICsgMl07CisgICAgICAgIHVuc2lnbmVkIGNoYXIgKmJ5dGUgPSBkYXRhOworCisgICAgICAgICpieXRlKysgPSBMUF9MQ0RfRElTUExBWTsKKyAgICAgICAgKmJ5dGUrKyA9IExQX0xDRF9ESVNQTEFZX1RFWFQ7CisKKyAgICAgICAgeworICAgICAgICAgIGNvbnN0IHdjaGFyX3QgKmNoYXJhY3RlciA9IHRleHQ7CisgICAgICAgICAgY29uc3Qgd2NoYXJfdCAqZW5kID0gY2hhcmFjdGVyICsgc2l6ZTsKKworICAgICAgICAgIHdoaWxlIChjaGFyYWN0ZXIgPCBlbmQpIHsKKyAgICAgICAgICAgICpieXRlKysgPSBpc3dMYXRpbjEoKmNoYXJhY3Rlcik/ICpjaGFyYWN0ZXI6ICc/JzsKKyAgICAgICAgICAgIGNoYXJhY3RlciArPSAxOworICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmICh3cml0ZVBhY2tldChicmwsIGRhdGEsIGJ5dGUtZGF0YSkgPT0gLTEpIHJldHVybiAwOworICAgICAgfQorICAgIH0KKworICAgIHsKKyAgICAgIHN0YXRpYyBpbnQgcHJldmlvdXNDdXJzb3I7CisKKyAgICAgIGlmIChjdXJzb3JIYXNDaGFuZ2VkKCZwcmV2aW91c0N1cnNvciwgYnJsLT5jdXJzb3IsICZmb3JjZUN1cnNvclJld3JpdGUgKSkgeworICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyIHBhY2tldFtdID0geworICAgICAgICAgIExQX0xDRF9ESVNQTEFZLCBMUF9MQ0RfRElTUExBWV9DQVJFVCwgKChicmwtPmN1cnNvciAhPSBCUkxfTk9fQ1VSU09SKT8gKGJybC0+Y3Vyc29yICsgMSk6IDApCisgICAgICAgIH07CisKKyAgICAgICAgaWYgKHdyaXRlUGFja2V0KGJybCwgcGFja2V0LCBzaXplb2YocGFja2V0KSkgPT0gLTEpIHJldHVybiAwOworICAgICAgfQorICAgIH0KKyAgfQorCisgIHJldHVybiAxOworfQorCitjb25zdCBQcm90b2NvbE9wZXJhdGlvbnMgZXN5c2lyaXNQcm90b2NvbE9wZXJhdGlvbnMgPSB7CisgIC5wcm90b2NvbE5hbWUgPSAiZXN5c2lyaXMiLAorCisgIC5pbml0aWFsaXplRGV2aWNlID0gaW5pdGlhbGl6ZURldmljZSwKKyAgLnJlc2V0RGV2aWNlID0gcmVzZXREZXZpY2UsCisKKyAgLnJlYWRQYWNrZXQgPSByZWFkUGFja2V0LAorICAud3JpdGVQYWNrZXQgPSB3cml0ZVBhY2tldCwKKworICAucmVhZENvbW1hbmQgPSByZWFkQ29tbWFuZCwKKyAgLndyaXRlV2luZG93ID0gd3JpdGVXaW5kb3csCisKKyAgLmhhc1Zpc3VhbERpc3BsYXkgPSBoYXNWaXN1YWxEaXNwbGF5LAorICAud3JpdGVWaXN1YWwgPSB3cml0ZVZpc3VhbAorfTsKZGlmZiAtLWdpdCBhL0RyaXZlcnMvQnJhaWxsZS9FdXJvQnJhaWxsZS9ldV9wcm90b2NvbC5oIGIvRHJpdmVycy9CcmFpbGxlL0V1cm9CcmFpbGxlL2V1X3Byb3RvY29sLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWZiZTA3NgotLS0gL2Rldi9udWxsCisrKyBiL0RyaXZlcnMvQnJhaWxsZS9FdXJvQnJhaWxsZS9ldV9wcm90b2NvbC5oCkBAIC0wLDAgKzEsNzIgQEAKKy8qCisgKiBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorICogICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorICoKKyAqIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorICoKKyAqIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyAqLworCisvKiogRXVyb0JyYWlsbGUvZXVfcHJvdG9jb2wuaCAtLSBQcm90b2NvbCBkZWZpbmVzLCBzdHJ1Y3R1cmVzIGFuZCB1bmlvbnMKKyAqKiBUaGlzIGZpbGUgY29udGFpbnMgYWxsIGRlZmluaXRpb25zIGFib3V0IHRoZSB0d28gcHJvdG9jb2xzLgorICoqIEl0IGlzIGFsc28gdXNlZCB0byBzdG9yZSBwcm90b2NvbCBtZXRob2QgaGVhZGVycyBhbmQgdGhlIG1haW4gc3RydWN0dXJlCisgKiogdG8gYWNjZXNzIHRoZSB0ZXJtaW5hbCBnZW5lcmljYWxseSBieSB0aGUgSGlnaC1sZXZlbCBwYXJ0LgorICoqCisgKiogU2VlIGJyYWlsbGUuYyBmb3IgdGhlIGhpZ2gtbGV2ZWwgYWNjZXNzLCBhbmQgaW8uaCBmb3IgdGhlIGxvdy1sZXZlbCBhY2Nlc3MuCisqKi8KKworCisjaWZuZGVmIF9fRVVfUFJPVE9DT0xfSF9fCisjZGVmaW5lIF9fRVVfUFJPVE9DT0xfSF9fCisKKyNpbmNsdWRlICJjbWRfZW5xdWV1ZS5oIgorI2luY2x1ZGUgImt0Yl90eXBlcy5oIgorI2luY2x1ZGUgImJybF9jbWRzLmgiCisjaW5jbHVkZSAiYnJsX3V0aWxzLmgiCisjaW5jbHVkZSAiYnJsX2Jhc2UuaCIKKwordHlwZWRlZiBzdHJ1Y3QgeworICBjb25zdCBjaGFyICpwcm90b2NvbE5hbWU7CisKKyAgaW50ICgqaW5pdGlhbGl6ZURldmljZSkgKEJyYWlsbGVEaXNwbGF5ICpicmwpOworICBpbnQgKCpyZXNldERldmljZSkgKEJyYWlsbGVEaXNwbGF5ICpicmwpOworCisgIHNzaXplX3QgKCpyZWFkUGFja2V0KSAoQnJhaWxsZURpc3BsYXkgKmJybCwgdm9pZCAqcGFja2V0LCBzaXplX3Qgc2l6ZSk7CisgIHNzaXplX3QgKCp3cml0ZVBhY2tldCkgKEJyYWlsbGVEaXNwbGF5ICpicmwsIGNvbnN0IHZvaWQgKnBhY2tldCwgc2l6ZV90IHNpemUpOworCisgIGludCAoKnJlYWRDb21tYW5kKSAoQnJhaWxsZURpc3BsYXkgKmJybCwgS2V5VGFibGVDb21tYW5kQ29udGV4dCBjKTsKKyAgaW50ICgqd3JpdGVXaW5kb3cpIChCcmFpbGxlRGlzcGxheSAqYnJsKTsKKworICBpbnQgKCpoYXNWaXN1YWxEaXNwbGF5KSAoQnJhaWxsZURpc3BsYXkgKmJybCk7CisgIGludCAoKndyaXRlVmlzdWFsKSAoQnJhaWxsZURpc3BsYXkgKmJybCwgY29uc3Qgd2NoYXJfdCAqdGV4dCk7Cit9IFByb3RvY29sT3BlcmF0aW9uczsKKwordHlwZWRlZiBzdHJ1Y3QgeworICBjb25zdCBQcm90b2NvbE9wZXJhdGlvbnMgKnByb3RvY29sOworICBpbnQgKCphd2FpdElucHV0KSAoQnJhaWxsZURpc3BsYXkgKmJybCwgaW50IHRpbWVvdXQpOworICBpbnQgKCpyZWFkQnl0ZSkgKEJyYWlsbGVEaXNwbGF5ICpicmwsIHVuc2lnbmVkIGNoYXIgKmJ5dGUsIGludCB3YWl0KTsKKyAgc3NpemVfdCAoKndyaXRlRGF0YSkgKEJyYWlsbGVEaXNwbGF5ICpicmwsIGNvbnN0IHZvaWQgKmRhdGEsIHNpemVfdCBzaXplKTsKK30gSW5wdXRPdXRwdXRPcGVyYXRpb25zOworCitleHRlcm4gY29uc3QgSW5wdXRPdXRwdXRPcGVyYXRpb25zICppbzsKK2V4dGVybiBjb25zdCBQcm90b2NvbE9wZXJhdGlvbnMgY2xpb1Byb3RvY29sT3BlcmF0aW9uczsKK2V4dGVybiBjb25zdCBQcm90b2NvbE9wZXJhdGlvbnMgZXN5c2lyaXNQcm90b2NvbE9wZXJhdGlvbnM7CisKKyNkZWZpbmUgS0VZX0VOVFJZKHMsdCxrLG4pIHsudmFsdWUgPSB7Lmdyb3VwPUVVX0dSUF8jI3MsIC5udW1iZXI9RVVfIyN0IyNfIyNrfSwgLm5hbWU9bn0KK0VYVEVSTkFMX0tFWV9UQUJMRShjbGlvKQorRVhURVJOQUxfS0VZX1RBQkxFKGlyaXMpCitFWFRFUk5BTF9LRVlfVEFCTEUoZXN5c19zbWFsbCkKK0VYVEVSTkFMX0tFWV9UQUJMRShlc3lzX21lZGl1bSkKK0VYVEVSTkFMX0tFWV9UQUJMRShlc3lzX2xhcmdlKQorRVhURVJOQUxfS0VZX1RBQkxFKGVzeXRpbWUpCisKKyNlbmRpZiAvKiBfX0VVX1BST1RPQ09MX0hfXyAqLwpkaWZmIC0tZ2l0IGEvRHJpdmVycy9CcmFpbGxlL0V1cm9CcmFpbGxlL2V1X3Byb3RvY29sZGVmLmggYi9Ecml2ZXJzL0JyYWlsbGUvRXVyb0JyYWlsbGUvZXVfcHJvdG9jb2xkZWYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYmM3MjQ5Ci0tLSAvZGV2L251bGwKKysrIGIvRHJpdmVycy9CcmFpbGxlL0V1cm9CcmFpbGxlL2V1X3Byb3RvY29sZGVmLmgKQEAgLTAsMCArMSwxNzggQEAKKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vIExJTksgUFJPVE9DT0wgLSBLRVkKKyAgICAvLyB0aGlzIGtleSBpcyBvcGVyYXRpb25hbCBvbmx5IGlmIHN1YmtleSBpcyAnQicsJ0QnIG9yICdCJywnUycgKExQX0JSQUlMTEVfRElTUExBWSxMUF9CUkFJTExFX0RJU1BMQVlfU1RBVElDL0xQX0JSQUlMTEVfRElTUExBWV9EWU5BTUlDCisjZGVmaW5lIExQX1NQRUNJRklDX1BST1RPQ09MICcxJworCisjZGVmaW5lIExQX1NZU1RFTSAgICAgICAgICAgJ1MnCisjZGVmaW5lIExQX01PREUgICAgICAgICAgICAgJ1InCisjZGVmaW5lIExQX0tFWSAgICAgICAgICAgICAgJ0snCisjZGVmaW5lIExQX1BBUkFNRVRFUiAgICAgICAgJ1AnCQkvL3NwZWNpZmljIGVzeXRpbWUyCisjZGVmaW5lIExQX1RSQU5TRkVSVCAgICAgICAgJ3QnCQkvLyBTcGVjaWZpYyBFc3l0aW1lLgorI2RlZmluZSBMUF9FTkNSWVBUSU9OX0tFWSAgICdaJworI2RlZmluZSBMUF9CUkFJTExFX0RJU1BMQVkgICdCJworI2RlZmluZSBMUF9MQ0RfRElTUExBWSAgICAgICdMJworLy8jZGVmaW5lIExQX1RFU1QgICAgICAgICAgICAgJ1QnCisvLyNkZWZpbmUgTFBfU09VTkQgICAgICAgICAgICAnTScKKy8vI2RlZmluZSBMUF9ERUJVRyAgICAgICAgICAgICdEJyAgICAgIC8vIFRyYW1lIGRlIETDqWJ1ZworI2RlZmluZSBMUF9WSVNVICAgICAgICAgICAgICdWJyAgICAgIC8vIFRyYW1lIGRlIFZpc3VhbGlzYXRpb24KKworLy8gTElOSyBQUk9UT0NPTCBMUF9FTkNSWVBUSU9OX0tFWQorI2RlZmluZSBMUF9FTkNSWVBUSU9OX0tFWV8xICcxJworI2RlZmluZSBMUF9FTkNSWVBUSU9OX0tFWV8yICcyJworI2RlZmluZSBMUF9FTkNSWVBUSU9OX0tFWV8zICczJworI2RlZmluZSBMUF9FWFRfS0VZICAgICAgICAgICdYJworI2RlZmluZSBMUF9FTkRfS0VZICAgICAgICAgICdFJworCisvLyBMSU5LIFBST1RPQ09MIEtFWUJPQVJEIC0gU1VCS2V5CisjZGVmaW5lIExQX0tFWV9JTlRFUkFDVElWRSAgICdJJworI2RlZmluZSBMUF9LRVlfQ09NTUFORCAgICAgICAnQycKKyNkZWZpbmUgTFBfS0VZX09QVElDQUwgICAgICAgJ08nCisjZGVmaW5lIExQX0tFWV9CUkFJTExFICAgICAgICdCJworI2RlZmluZSBMUF9LRVlfUEMgICAgICAgICAgICAnWicKKyNkZWZpbmUgTFBfS0VZX0ZJTkdFUiAgICAgICAgJ0YnCisjZGVmaW5lIExQX0tFWV9VU0JfSElEX01PREUgICdVJworI2RlZmluZSBMUF9LRVlfVVNCCQkJICd1JwkJLy8gVHJhbWUgdG91Y2hlIMOgIGfDqW7DqXJlciB2aWEgbCdVU0IgKFNww6ljaWZpYyBFc3l0b3VjaCkKKworCisvLyBMSU5LIFBST1RPQ09MIEJSQUlMTEVESVNQTEFZIC0gU1VCS0VZCisjZGVmaW5lIExQX0JSQUlMTEVfRElTUExBWV9TVEFUSUMgICAgICAgJ1MnCisjZGVmaW5lIExQX0JSQUlMTEVfRElTUExBWV9EWU5BTUlDICAgICAgJ0MnCisjZGVmaW5lIExQX0JSQUlMTEVfRElTUExBWV9CTElOSyAgICAgICAgJ0InCisvLyNkZWZpbmUgTFBfQlJBSUxMRV9ESVNQTEFZX0RFQlVHX1RFWFQgICAgICdYJworCisvLyBMSU5LIFBST1RPQ09MIEJSQUlMTEVESVNQTEFZIC0gU1VCS0VZCisjZGVmaW5lIExQX0xDRF9ESVNQTEFZX1RFWFQgICAgICAgICAnVCcKKyNkZWZpbmUgTFBfTENEX0RJU1BMQVlfQ0FSRVQgICAgICAgICdDJworCisvLyBMSU5LIFBST1RPQ09MIFNZU1RFTSAtIFNVQktFWQorI2RlZmluZSBMUF9TWVNURU1fSURFTlRJVFkgICAgICAgICAgJ0knCisjZGVmaW5lIExQX1NZU1RFTV9OQU1FICAgICAgICAgICAgICAnTicKKyNkZWZpbmUgTFBfU1lTVEVNX1NIT1JUTkFNRSAgICAgICAgICdIJworI2RlZmluZSBMUF9TWVNURU1fU0VSSUFMICAgICAgICAgICAgJ1MnCisjZGVmaW5lIExQX1NZU1RFTV9MQU5HVUFHRSAgICAgICAgICAnTCcKKyNkZWZpbmUgTFBfU1lTVEVNX0xBTkdVQUdFX09QVElPTiAgICdsJworI2RlZmluZSBMUF9TWVNURU1fQkFUVEVSWSAgICAgICAgICAgJ0InCisjZGVmaW5lIExQX1NZU1RFTV9ESVNQTEFZX0xFTkdUSCAgICAnRycKKyNkZWZpbmUgTFBfU1lTVEVNX1RZUEUgICAgICAgICAgICAgICdUJworI2RlZmluZSBMUF9TWVNURU1fT1BUSU9OICAgICAgICAgICAgJ08nCisjZGVmaW5lIExQX1NZU1RFTV9TT0ZUV0FSRSAgICAgICAgICAnVycKKyNkZWZpbmUgTFBfU1lTVEVNX1BST1RPQ09MICAgICAgICAgICdQJworI2RlZmluZSBMUF9TWVNURU1fRlJBTUVfTEVOR1RIICAgICAgJ00nCisjZGVmaW5lIExQX1NZU1RFTV9EQVRFX0FORF9USU1FCQknRCcKKyNkZWZpbmUgTFBfU1lTVEVNX09QVElDQUxfVkFMVUUgICAgICdvJworCisvLyBMSU5LIFBST1RPQ09MIFBBUkFNRVRFUlMgLSBTVUJLRVkKKyNkZWZpbmUgTFBfUEFSQU1FVEVSX05BTUUJCQknTicKKyNkZWZpbmUgTFBfUEFSQU1FVEVSX1NIT1JUX05BTUUJCSdTJworI2RlZmluZSBMUF9QQVJBTUVURVJfU0VSSUFMCQkJJ1InCisjZGVmaW5lIExQX1BBUkFNRVRFUl9PUFRJT04JCQknTycKKworCisvLyBMSU5LIFBST1RPQ09MIFRFU1QgLSBTVUJLRVkKKyNkZWZpbmUgTFBfVEVTVF9MSU5LICAgICAgICAnTCcKKworLy8gTElOSyBQUk9UT0NPTCBNT0RFIC0gU1VCS0VZCisjZGVmaW5lIExQX01PREVfUElMT1QgICAgICAgJ1AnCisjZGVmaW5lIExQX01PREVfSU5URVJOQUwgICAgJ0knCisjZGVmaW5lIExQX01PREVfTUVOVSAgICAgICAgJ00nCisjZGVmaW5lIExQX01PREVfU1BFQ0lGSUNfUFJPVE9DT0wgJ1MnCisKKy8vIExJTksgUFJPVE9DT0wgU09VTkQgLSBTVUJLRVkKKyNkZWZpbmUgTFBfU09VTkRfUExBWSAgICAgICAnUCcKKyNkZWZpbmUgTFBfU09VTkRfU1RPUCAgICAgICAnQScKKworLy8gTElOSyBQUk9UT0NPTCBERUJVRyAtIFNVQktleQorI2RlZmluZSBMUF9ERUJVR19TSU1VICAgICAgICdTJyAgICAgLy8gRklYIE1FIMOgIHN1cHByaW1lciBkYW5zIHF1ZWxxdWVzIGpvdXJzLi4uCisjZGVmaW5lIExQX0RFQlVHX1RSQUNFICAgICAgJ1QnICAgICAvLyBGSVggTUUgw6Agc3VwcHJpbWVyIGRhbnMgcXVlbHF1ZXMgam91cnMuLi4KKyNkZWZpbmUgTFBfREVCVUdfTE9HICAgICAgICAnTCcgICAgIAorI2RlZmluZSBMUF9ERUJVR19XQVJOICAgICAgICdXJyAgICAgCisjZGVmaW5lIExQX0RFQlVHX0VSUk9SICAgICAgJ0UnICAgICAKKworLy8gTElOSyBQUk9UT0NPTCBWSVNVIC0gU1VCS2V5CisjZGVmaW5lIExQX1ZJU1VfVEVYVCAgICAgICAgJ1QnICAgICAKKyNkZWZpbmUgTFBfVklTVV9ET1QgICAgICAgICAnRCcgICAgIAorCisvLyBMSU5LIFBST1RPQ09MIFRSQU5TRkVSVCAtIFNVQktleQorI2RlZmluZSBMUF9UUkFOU0ZFUlRfUEFSQU1FVEVSUwkJJ3AnIC8vIFJlcXVlc3QgdG8gcmVjZWl2ZSBvciBzZW5kIHRoZSBhc3NpZ25tZW50IHRhYmxlLgorLy8jZGVmaW5lIExQX1RSQU5TRkVSVF9UQUJMRSAgICAgICAgICAndCcgLy8gUmVxdWVzdCB0byByZWNlaXZlIG9yIHNlbmQgdGhlIGFzc2lnbm1lbnQgdGFibGUuCisjZGVmaW5lIExQX1RSQU5TRkVSVF9GSVJNV0FSRSAgICAgICAnZicgLy8gUmVxdWVzdCB0byBzZW5kIHRoZSBhc3NpZ25tZW50IHRhYmxlLgorI2RlZmluZSBMUF9UUkFOU0ZFUlRfUkVDT1JEICAgICAgICAgJ3InCS8vIEEgcmVjb3JkIGluIEludGVsIEhleGEgZm9ybWF0LgorI2RlZmluZSBMUF9UUkFOU0ZFUlRfTkVYVF9SRUNPUkQgICAgJ24nIC8vIFJlcXVlc3QgdG8gcmVjZWl2ZSB0aGUgbmV4dCByZWNvcmQuCisjZGVmaW5lIExQX1RSQU5TRkVSVF9BU0tfQ0hFQ0tTVU0gICAnYycgLy8gQXNrIHRoZSBjaGVja3N1bSBvbiBjb21wbGV0ZSBoZXggZmlsZS4KKyNkZWZpbmUgTFBfVFJBTlNGRVJUX0VORCAgICAgICAgICAgICdlJyAvLyBOb3RpZnkgdGhlIGVuZCBvZiB0cmFuc2ZlcnQuCisjZGVmaW5lIExQX1RSQU5TRkVSVF9FUlJPUiAgICAgICAgICAnbycgLy8gRXJyb3IKKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vIFRZUEUgT0YgSU5URVJBQ1RJVkUgS0VZUworI2RlZmluZSBJTlRFUkFDVElWRV9TSU5HTEVfQ0xJQwkweDAxCisjZGVmaW5lIElOVEVSQUNUSVZFX1JFUEVUSVRJT04JMHgwMgorI2RlZmluZSBJTlRFUkFDVElWRV9ET1VCTEVfQ0xJQyAweDAzCisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLyBJUklTIENPTU1BTkRTIEtFWUJPQVJECit0eXBlZGVmIGVudW0geworICAgIElSSVNfTDFfS0VZICAgICAgICA9IDB4MDAwMDAwMDEsCisgICAgSVJJU19MMl9LRVkgICAgICAgID0gMHgwMDAwMDAwMiwgICAgICAgIAorICAgIElSSVNfTDNfS0VZICAgICAgICA9IDB4MDAwMDAwMDQsCisgICAgSVJJU19MNF9LRVkgICAgICAgID0gMHgwMDAwMDAwOCwKKyAgICBJUklTX0w1X0tFWSAgICAgICAgPSAweDAwMDAwMDEwLAorICAgIElSSVNfTDZfS0VZICAgICAgICA9IDB4MDAwMDAwMjAsCisgICAgSVJJU19MN19LRVkgICAgICAgID0gMHgwMDAwMDA0MCwKKyAgICBJUklTX0w4X0tFWSAgICAgICAgPSAweDAwMDAwMDgwLAorICAgIElSSVNfVVBfS0VZICAgICAgICA9IDB4MDAwMDAxMDAsCisgICAgSVJJU19MRUZUX0tFWSAgICAgID0gMHgwMDAwMDgwMCwKKyAgICBJUklTX1JJR0hUX0tFWSAgICAgPSAweDAwMDAwNDAwLAorICAgIElSSVNfRE9XTl9LRVkgICAgICA9IDB4MDAwMDAyMDAsCit9IElSSVNfQ09NTUFORCwgKiBQSVJJU19DT01NQU5EOworCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8gRVNZUyBDT01NQU5EUyBLRVlCT0FSRAordHlwZWRlZiBlbnVtIHsKKyAgICBFU1lTX1NDUk9MTEVSMV9SSUdIVF9LRVkgICAgICAgID0gMHgwMDAwMDAwMSwKKyAgICBFU1lTX1NDUk9MTEVSMV9MRUZUX0tFWSAgICAgICAgID0gMHgwMDAwMDAwMiwgICAgICAgIAorICAgIEVTWVNfU0NST0xMRVIyX1JJR0hUX0tFWSAgICAgICAgPSAweDAwMDAwMDA0LAorICAgIEVTWVNfU0NST0xMRVIyX0xFRlRfS0VZICAgICAgICAgPSAweDAwMDAwMDA4LAorICAgIEVTWVNfU0NST0xMRVIzX1JJR0hUX0tFWSAgICAgICAgPSAweDAwMDAwMDEwLAorICAgIEVTWVNfU0NST0xMRVIzX0xFRlRfS0VZICAgICAgICAgPSAweDAwMDAwMDIwLAorICAgIEVTWVNfU0NST0xMRVI0X1JJR0hUX0tFWSAgICAgICAgPSAweDAwMDAwMDQwLAorICAgIEVTWVNfU0NST0xMRVI0X0xFRlRfS0VZICAgICAgICAgPSAweDAwMDAwMDgwLAorICAgIEVTWVNfU0NST0xMRVI1X1JJR0hUX0tFWSAgICAgICAgPSAweDAwMDAwMTAwLAorICAgIEVTWVNfU0NST0xMRVI1X0xFRlRfS0VZICAgICAgICAgPSAweDAwMDAwMjAwLAorICAgIEVTWVNfU0NST0xMRVI2X1JJR0hUX0tFWSAgICAgICAgPSAweDAwMDAwNDAwLAorICAgIEVTWVNfU0NST0xMRVI2X0xFRlRfS0VZICAgICAgICAgPSAweDAwMDAwODAwLAorICAgIEVTWVNfSk9ZU1RJQ0sxX1VQX0tFWSAgICAgICAgICAgPSAweDAwMDEwMDAwLAorICAgIEVTWVNfSk9ZU1RJQ0sxX0RPV05fS0VZICAgICAgICAgPSAweDAwMDIwMDAwLAorICAgIEVTWVNfSk9ZU1RJQ0sxX1JJR0hUX0tFWSAgICAgICAgPSAweDAwMDQwMDAwLAorICAgIEVTWVNfSk9ZU1RJQ0sxX0xFRlRfS0VZICAgICAgICAgPSAweDAwMDgwMDAwLAorICAgIEVTWVNfSk9ZU1RJQ0sxX01JRERMRV9LRVkgICAgICAgPSAweDAwMTAwMDAwLCAgICAKKyAgICBFU1lTX0pPWVNUSUNLMl9VUF9LRVkgICAgICAgICAgID0gMHgwMTAwMDAwMCwKKyAgICBFU1lTX0pPWVNUSUNLMl9ET1dOX0tFWSAgICAgICAgID0gMHgwMjAwMDAwMCwKKyAgICBFU1lTX0pPWVNUSUNLMl9SSUdIVF9LRVkgICAgICAgID0gMHgwNDAwMDAwMCwKKyAgICBFU1lTX0pPWVNUSUNLMl9MRUZUX0tFWSAgICAgICAgID0gMHgwODAwMDAwMCwKKyAgICBFU1lTX0pPWVNUSUNLMl9NSURETEVfS0VZICAgICAgID0gMHgxMDAwMDAwMAorfSBFU1lTX0NPTU1BTkQsICogUEVTWVNfQ09NTUFORDsKKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vIEVTWVRJTUUgQ09NTUFORFMgS0VZQk9BUkQKK3R5cGVkZWYgZW51bSB7CisgICAgRVNZVElNRV9MMV9LRVkgICAgICAgICAgICAgICAgICAgICA9IDB4MDAwMDAwMDEsCisgICAgRVNZVElNRV9MMl9LRVkgICAgICAgICAgICAgICAgICAgICA9IDB4MDAwMDAwMDIsICAgICAgICAKKyAgICBFU1lUSU1FX0wzX0tFWSAgICAgICAgICAgICAgICAgICAgID0gMHgwMDAwMDAwNCwKKyAgICBFU1lUSU1FX0w0X0tFWSAgICAgICAgICAgICAgICAgICAgID0gMHgwMDAwMDAwOCwKKyAgICBFU1lUSU1FX0w1X0tFWSAgICAgICAgICAgICAgICAgICAgID0gMHgwMDAwMDAxMCwKKyAgICBFU1lUSU1FX0w2X0tFWSAgICAgICAgICAgICAgICAgICAgID0gMHgwMDAwMDAyMCwKKyAgICBFU1lUSU1FX0w3X0tFWSAgICAgICAgICAgICAgICAgICAgID0gMHgwMDAwMDA0MCwKKyAgICBFU1lUSU1FX0w4X0tFWSAgICAgICAgICAgICAgICAgICAgID0gMHgwMDAwMDA4MCwKKyAgICBFU1lUSU1FX0pPWVNUSUNLMV9VUF9LRVkgICAgICAgICAgID0gMHgwMDAxMDAwMCwKKyAgICBFU1lUSU1FX0pPWVNUSUNLMV9ET1dOX0tFWSAgICAgICAgID0gMHgwMDAyMDAwMCwKKyAgICBFU1lUSU1FX0pPWVNUSUNLMV9SSUdIVF9LRVkgICAgICAgID0gMHgwMDA0MDAwMCwKKyAgICBFU1lUSU1FX0pPWVNUSUNLMV9MRUZUX0tFWSAgICAgICAgID0gMHgwMDA4MDAwMCwKKyAgICBFU1lUSU1FX0pPWVNUSUNLMV9NSURETEVfS0VZICAgICAgID0gMHgwMDEwMDAwMCwgICAgCisgICAgRVNZVElNRV9KT1lTVElDSzJfVVBfS0VZICAgICAgICAgICA9IDB4MDEwMDAwMDAsCisgICAgRVNZVElNRV9KT1lTVElDSzJfRE9XTl9LRVkgICAgICAgICA9IDB4MDIwMDAwMDAsCisgICAgRVNZVElNRV9KT1lTVElDSzJfUklHSFRfS0VZICAgICAgICA9IDB4MDQwMDAwMDAsCisgICAgRVNZVElNRV9KT1lTVElDSzJfTEVGVF9LRVkgICAgICAgICA9IDB4MDgwMDAwMDAsCisgICAgRVNZVElNRV9KT1lTVElDSzJfTUlERExFX0tFWSAgICAgICA9IDB4MTAwMDAwMDAKK30gRVNZVElNRV9DT01NQU5ELCAqIFBFU1lTVElNRV9DT01NQU5EOworCmRpZmYgLS1naXQgYS9Ecml2ZXJzL0JyYWlsbGUvRXVyb0JyYWlsbGUvZXV0cC4xIGIvRHJpdmVycy9CcmFpbGxlL0V1cm9CcmFpbGxlL2V1dHAuMQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYTliMTAzCi0tLSAvZGV2L251bGwKKysrIGIvRHJpdmVycy9CcmFpbGxlL0V1cm9CcmFpbGxlL2V1dHAuMQpAQCAtMCwwICsxLDM1IEBACisuVEggIkVVVFAiICIxIiAiMjAxMy0xMS0xMyIgIkJybEFQSSIgIkJybEFQSSBVc2VyJ3MgTWFudWFsIgorLlNIIE5BTUUKK2V1dHAgXC0gRXVyb0JyYWlsbGUgZmlsZSB0cmFuc2ZlcnJpbmcKKy5TSCBTWU5PUFNJUworZXV0cAorLlNIIERFU0NSSVBUSU9OCitcZklldXRwXGZQIGxldHMgeW91IGV4Y2hhbmdlIGZpbGVzIHdpdGgKK2EgQ2xpbyB0ZXJtaW5hbCBmcm9tIEV1cm9CcmFpbGUuCisKKy5TSCAiQ09NTUFORFwtTElORSBPUFRJT05TIgorCitOb25lIHNvIGZhcgorCisuU0ggUkVUVVJORUQgVkFMVUUKKworLlRTCitsQiBsZkNXLgorMQllcnJvcgorLlRFCisKKy5TSCBTSEVMTCBFWFBBTlNJT05TCitCZXdhcmUgb2Ygc3BlY2lhbCBjaGFyczogKiBhbmQgLiBhcmUgb2Z0ZW4gZXhwYW5kZWQgYnkgeW91ciBzaGVsbCwgaGVuY2UKK1xmSXNlbmRpbmcgZmlsZXMgKlxmUiB3aWxsIHByb2JhYmx5IGRvIHdoYXQgeW91IHdhbnQsIHB1dHRpbmcgZXZlcnkgZmlsZSBleGlzdGluZyBpbgordGhlIGN1cnJlbnQgZGlyZWN0b3J5IG9udG8gdGhlIHRlcm1pbmFsLCBidXQgXGZJIHJlY2VpdmluZyBmaWxlcyAqXGZSIG1heSBub3QgZG8gd2hhdCB5b3UKK3dhbnQ6IGl0IHdpbGwgb25seSBnZXQgZXZlcnkgZmlsZSB3aGljaCBhbHJlYWR5IGV4aXN0IGluIHRoZSBjdXJyZW50CitkaXJlY3RvcnksIHNraXBwaW5nIHRob3NlIHlvdSBqdXN0IGNyZWF0ZWQgb24geW91ciB0ZXJtaW5hbCAhCitJZiB5b3Ugd2FudCB0byBnZXQgZXZlcnkgZmlsZSB3aGljaCBleGlzdCBpbiB0aGUgdGVybWluYWwsIHlvdQorc2hvdWxkIHVzZSBcZkknKidcZlIgb3Igc29tZXRoaW5nIHNpbWlsYXIgKHBsZWFzZSByZWFkIHlvdXIgc2hlbGwgbWFudWFsKS4KKworVGhlIHNhbWUgd2FybmluZyBhcHBsaWVzIHRvIG90aGVyIHNwZWNpYWwgY2hhcnMsIHN1Y2ggYXMgJCwgfiwgJiwuLi4gd2hpY2gKK3Nob3VsZCBiZSBwcm90ZWN0ZWQgYnkgc3Vycm91bmRpbmcgYXJndW1lbnRzIGJ5IHF1b3RlcyAoJykgb3IgYnkgdXNpbmcgc2luZ2xlCitiYWNrc2xhc2hlcyAoXFwpIGp1c3QgYmVmb3JlIHRoZW0gKHBsZWFzZSByZWFkIHlvdXIgc2hlbGwgbWFudWFsKS4KKworLlNIIEFVVEhPUgorT2xpdmllciBCZXJ0IDxvbGl2aWVyLmJlcnRAbGFwb3N0ZS5uZXQ+CmRpZmYgLS1naXQgYS9Ecml2ZXJzL0JyYWlsbGUvRXVyb0JyYWlsbGUvZXV0cF9icmwuYyBiL0RyaXZlcnMvQnJhaWxsZS9FdXJvQnJhaWxsZS9ldXRwX2JybC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJiMzQ2ZjkKLS0tIC9kZXYvbnVsbAorKysgYi9Ecml2ZXJzL0JyYWlsbGUvRXVyb0JyYWlsbGUvZXV0cF9icmwuYwpAQCAtMCwwICsxLDMyMiBAQAorLyoKKyoqIGJybC5jIGZvciBldXRwIGluIC9ob21lL29iZXJ0MDEvd29yay9ldXRwL3NyYworKioKKyoqIE1hZGUgYnkgT2xpdmllciBCRVJUCisqKiBMb2dpbiAgIDxvYmVydDAxQGVwaXRhLmZyPgorKi8KKworI2lmbmRlZiBfWE9QRU5fU09VUkNFCisjZGVmaW5lIF9YT1BFTl9TT1VSQ0UgNTAwCisjZW5kaWYgLyogX1hPUEVOX1NPVVJDRSAqLworCisvKiBnbG9iYWxzICovCit1bnNpZ25lZCBjaGFyIGV4dGVuc2lvbnNbXSA9IHsnSycsICdMJywgJ0InLCAnVCcsICdBJ307Cit1bnNpZ25lZCBjaGFyIHBvc2l0aW9uc1tdID0gezMsIDcsIDE2fTsKKworI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSAiYnJsYXBpLmgiCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8ZGlyZW50Lmg+CisKKyNpbmNsdWRlICJldXRwX2JybC5oIgorI2luY2x1ZGUgImV1dHBfcGMuaCIKKyNpbmNsdWRlICJldXRwX3Rvb2xzLmgiCisjaW5jbHVkZSAiZXV0cF90cmFuc2Zlci5oIgorCit2b2lkCQlldXRwX2Fib3J0KGludCBleGl0c3RhdHVzKQoreworICBicmxhcGlfbGVhdmVSYXdNb2RlKCk7CisgIGJybGFwaV9jbG9zZUNvbm5lY3Rpb24oKTsKKyAgZXhpdChleGl0c3RhdHVzKTsKK30KKworLyoKKyoqIEFza3MgYSBZZXMvTm8gcXVlc3Rpb24uCisqKiBJZiB0aGUgdXNlciBzYXlzIFllcyAoa2V5ICMgcHJlc3NlZCkgdGhlIGZ1bmN0aW9uIHJldHVybnMgMS4KKyoqIElGIHRoZSBhbnN3ZXIgaXMgTm8gKGtleSAqIHByZXNzZWQpIHRoZSBmdW5jdGlvbiByZXR1cm4gMC4KKyovCitpbnQJCWJybF95ZXNub19xdWVzdGlvbihjaGFyICpwcm9tcHQpCit7CisgIHVuc2lnbmVkIGNoYXIgYnVmW0JVRkZFUl9TSVpFXTsKKworICBicmxfbWVzc2FnZShwcm9tcHQsIDApOworICB3aGlsZSAoMSkKKyAgICB7CisgICAgICBicmxfcmVhZChidWYpOworICAgICAgaWYgKCFzdHJuY21wKChjaGFyKilidWYsICJcMDAzS1QjIiwgNCkpCisJcmV0dXJuIDE7CisgICAgICBpZiAoIXN0cm5jbXAoKGNoYXIqKWJ1ZiwgIlwwMDNLVCoiLCA0KSkKKwlyZXR1cm4gMDsKKwl9Cit9CisvKgorKiogUmVhZCByYXcgZGF0YSBmcm9tIHRoZSB0ZXJtaW5hbAorKi8KK3NzaXplX3QJCWJybF9yZWFkKHVuc2lnbmVkIGNoYXIgKmJ1ZikKK3sKKyAgc3NpemVfdCByZXM7CisKKyAgd2hpbGUgKDEpCisgICAgeworICAgICAgYWxhcm0oMjApOworICAgICAgcmVzID0gYnJsYXBpX3JlY3ZSYXcoYnVmLCBCVUZGRVJfU0laRSk7CisgICAgICBhbGFybSgwKTsKKyAgICAgIGlmIChyZXMgPCAwKQorCXsKKwkgIGJybGFwaV9wZXJyb3IoInJlYWRpbmcgb24gdGVybWluYWwiKTsKKwkgIGV1dHBfYWJvcnQoRV9SRUFEKTsKKwkgIHJldHVybiAwOworCX0KKyAgICAgIGlmIChyZXMpCisJYnJlYWs7CisgICAgfQorICByZXR1cm4gcmVzOworfQorCitzc2l6ZV90CQlicmxfd3JpdGUodW5zaWduZWQgY2hhciAqc3RyLCBzaXplX3QgbGVuKQoreworICBzc2l6ZV90IHJlczsKKworICBhbGFybSgyMCk7CisgIHJlcyA9IGJybGFwaV9zZW5kUmF3KHN0ciwgbGVuKTsKKyAgYWxhcm0oMCk7CisgIGlmIChyZXMgPCAwKQorICAgIHsKKyAgICAgIGJybGFwaV9wZXJyb3IoIkVycm9yIHdyaXRpbmcgdG8gdGhlIHRlcm1pbmFsIik7CisgICAgICBldXRwX2Fib3J0KEVfV1JJVEUpOworICAgICAgcmV0dXJuIDA7CisgICAgfQorICByZXR1cm4gcmVzOworfQorCisvKgorKiogR2V0IG1vZGVsIGlkZW50aWZpY2F0aW9uCisqKiBpZGVudCBtdXN0IGJlIGEgYnVmZmVyIG9mIGF0IGxlYXN0IDIwIGJ5dGVzLgorKi8KK3ZvaWQJCWdldF9pZGVudChjaGFyKiBpZGVudCkKK3sKKyAgY2hhcgkJYnVmWzI1Nl07CisgIGNoYXIgKnA7CisgIHVuc2lnbmVkIGNoYXIgbG4gPSAwOworCisgIGJybF93cml0ZVN0cigiU0kiKTsKKyAgYnJsX3JlYWQoKHVuc2lnbmVkIGNoYXIqKWJ1Zik7CisgIHAgPSBidWY7CisgIHdoaWxlICgxKQorICAgIHsKKyAgICAgIGxuID0gKihwKyspOworICAgICAgaWYgKGxuID09IDIyICYmICFzdHJuY21wKHAsICJTSSIsIDIpKQorCXsKKwkgIG1lbWNweShpZGVudCwgcCArIDIsIDIwKTsKKwkgIGJyZWFrOworCX0KKyAgICAgIGVsc2UKKwlwICs9IGxuOworICAgIH0KK30KKworLyoKKyoqIFdyaXRlIGEgc3RyaW5nIHRvIHRoZSB0ZXJtaW5hbAorKiogVGhlIHN0cmluZyBpcyBzdXBwb3NlZCB0ZXJtaW5hdGVkIGJ5IGEgXDAgY2hhcmFjdGVyCisqLwordm9pZAlicmxfd3JpdGVTdHIoY2hhciAqc3RyKQoreworICBicmxfd3JpdGUoKHVuc2lnbmVkIGNoYXIqKXN0ciwgc3RybGVuKHN0cikpOworfQorCisvKgorKiogSW5pdGlhbGl6ZSB0aGUgYXBwbGljYXRpb24gYW5kIGNvbm5lY3QgdG8gYnJsYXBpCisqKiBJbml0IGJybGFwaSByYXcgbW9kZSBhbmQgcHJpbnQgYSB3ZWxjb21lIG1lc3NhZ2Ugb24gdGhlIHRlcm1pbmFsCisqLworaW50CQlicmxfaW5pdCh0X2VudiAqZW52KQoreworICBpbnQgcmVzOworICBjaGFyIHBbMTAwXTsKKyAgdW5zaWduZWQgaW50IHgsIHk7CisKKyAgLyogQ29ubmVjdCB0byBCcmxBUEkgKi8KKyAgaWYgKGJybGFwaV9pbml0aWFsaXplQ29ubmVjdGlvbihOVUxMLCBOVUxMKSA8IDApCisgICAgeworICAgICAgYnJsYXBpX3BlcnJvcigiYnJsYXBpX2luaXRpYWxpemVDb25uZWN0aW9uIik7CisgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgIC8qIEdldCBkcml2ZXIgaWQgJiBuYW1lICovCisKKyAgcmVzID0gYnJsYXBpX2dldERyaXZlck5hbWUocCwgc2l6ZW9mKHApKTsKKyAgaWYgKHJlcyA9PSAtMSkKKyAgICBicmxhcGlfcGVycm9yKCJicmxhcGlfZ2V0RHJpdmVyTmFtZSIpOworICBlbHNlCisgICAgcHJpbnRmKCJEcml2ZXIgbmFtZTogJXNcbiIscCk7CisKKyAgLyogR2V0IGRpc3BsYXkgc2l6ZSAqLworICBpZiAoYnJsYXBpX2dldERpc3BsYXlTaXplKCZ4LCAmeSkgPCAwKQorICAgIGJybGFwaV9wZXJyb3IoImJybGFwaV9nZXREaXNwbGF5U2l6ZSIpOworICBlbHNlCisgICAgcHJpbnRmKCJCcmFpbGxlIGRpc3BsYXkgaGFzICVkIGxpbmUlcyBvZiAlZCBjb2x1bW4lc1xuIix5LHk+MT8icyI6IiIseCx4PjE/InMiOiIiKTsKKworICAvKiBUcnkgZW50ZXJpbmcgcmF3IG1vZGUsIGltbWVkaWF0ZWx5IGdvIG91dCBmcm9tIHJhdyBtb2RlICovCisgIHByaW50ZigiVHJ5aW5nIHRvIGVudGVyIGluIHJhdyBtb2RlLi4uICIpOworICBpZiAoYnJsYXBpX2VudGVyUmF3TW9kZSgiRXVyb0JyYWlsbGUiKSA8IDApCisgICAgYnJsYXBpX3BlcnJvcigiYnJsYXBpX2dldFJhdyIpOworICBlbHNlIHsKKyAgICBwcmludGYoIk9rXG4iKTsKKyAgfQorICAvKiB3ZWxjb21lIG1lc3NhZ2UgKi8KKyAgYnJsX2xhc3RpbmdfbWVzc2FnZShFVVRQX1ZFUlNJT04pOworICBnZXRfaWRlbnQoZW52LT5pZGVudCk7CisgIHByaW50ZigiSWRlbnRpZmljYXRpb246ICUyMHNcbiIsIGVudi0+aWRlbnQpOworICByZXR1cm4gMDsKK30KKworLyoKKyoqIENsb3NlcyB0aGUgY29ubmVjdGlvbiB0byBCUkxBUEkKKyovCitpbnQJCWJybF9jbG9zZSh2b2lkKQoreworICBicmxhcGlfbGVhdmVSYXdNb2RlKCk7CisgIGJybGFwaV9jbG9zZUNvbm5lY3Rpb24oKTsKKyAgcmV0dXJuIDA7Cit9CisKKy8qCisqKiBEaXNwbGF5cyBhIG1lc3NhZ2UgdG8gdGhlIGJyYWlsbGUgdGVybWluYWwKKyoqIFRoZSBjdXJzb3IgY2FuIGJlIHBvc2l0aW9ubmVkIHdpdGggdGhlIHNlY29uZCBhcmd1bWVudAorKi8KK2ludAkJYnJsX21lc3NhZ2UoY2hhciAqc3RyLCB1bnNpZ25lZCBjaGFyIGN1cnNvcnBvcykKK3sKKyAgaW50CQlyZXQgPSAwOworICB1bnNpZ25lZCBpbnQgbGVuID0gc3RybGVuKChjaGFyKilzdHIpOworICBjaGFyKglxID0gc3RyOworICB1bnNpZ25lZCBjaGFyCQlpID0gMTsKKyAgdW5zaWduZWQgY2hhciogYnVmZmVyID0gbWFsbG9jKDUxMik7CisgIHVuc2lnbmVkIGNoYXIqCXAgPSBidWZmZXI7CisKKyAgKnArKyA9ICdEJzsKKyAgKnArKyA9ICdNJzsKKyAgd2hpbGUgKCpxKQorICAgIHsKKyAgICAgIGlmIChjdXJzb3Jwb3MgPj0gMSAmJiBpID09IGN1cnNvcnBvcykgeworCSpwKysgPSAnXHgxYic7CisJKnArKyA9ICdceDAyJzsKKyAgICAgIH0KKyAgICAgICpwKysgPSAqcSsrOworICAgICAgaSsrOworICAgIH0KKyAgYnJsX3dyaXRlKGJ1ZmZlciwgY3Vyc29ycG9zID09IDAgPyBsZW4gKyAyIDogbGVuICsgNCk7CisgIGZyZWUoYnVmZmVyKTsKKyAgcmV0dXJuIHJldDsKK30KKworCitzdGF0aWMgaW50CQlzaG93YnJmaWxlKHRfZW52KiBlbnYpCit7CisgIHVuc2lnbmVkIGNoYXIJCWN1cnNvcnBvcyA9IHBvc2l0aW9uc1tlbnYtPnN0YXR1c107CisgIHVuc2lnbmVkIGNoYXIJCWV4dCA9IGV4dGVuc2lvbnNbZW52LT5jdXJleHRdOworICB1bnNpZ25lZCBjaGFyKiBidWYgPSBtYWxsb2MoMjU2KTsKKyAgdW5zaWduZWQgY2hhciogc3RyID0gbWFsbG9jKDI1Nik7IC8qIHRoZSBzdHJpbmcgdG8gZGlzcGxheSAqLworCisgIGJ1ZlswXSA9ICdcMDA1JzsKKyAgYnVmWzFdID0gJ0YnOworICBidWZbMl0gPSAnTic7CisgIGJ1ZlszXSA9IGV4dDsKKyAgYnVmWzRdID0gKGVudi0+YnJmaWxlbnVtICYgMHhmZjAwKSA+PiAyOworICBidWZbNV0gPSBlbnYtPmJyZmlsZW51bSAmIDB4MDBmZjsKKyAgYnJsX3dyaXRlKGJ1ZisxLCA1KTsKKyAgd2hpbGUgKDEpCisgICAgeworICAgICAgYnJsX3JlYWQoYnVmKTsKKyAgICAgIGlmICghc3RybmNtcCgoY2hhciopYnVmLCAiXDAwM0tUIiwgMykpCisJY29udGludWU7CisgICAgICBlbHNlCisJYnJlYWs7CisgICAgfQorICBpZiAoIXN0cm5jbXAoKGNoYXIqKWJ1ZiwgIlwwMDNGRSIsIDMpKQorICAgIHsKKyAgICAgIGVudi0+YnJmaWxlbnVtLS07CisgICAgICByZXR1cm4gMDsKKyAgICB9CisgIHN0cmNweSgoY2hhciopc3RyLCBlbnYtPmJycGMgPyAiQlI+UEMgIiA6ICJQQz5CUiAiKTsKKyAgc3RybmNhdCgoY2hhciopc3RyLCAoKGNoYXIqKSYoYnVmWzZdKSksIGJ1ZlswXSAtIDUpOworICBzdHJjYXQoKGNoYXIqKXN0ciwgIi4iKTsKKyAgc3RybmNhdCgoY2hhciopc3RyLCAoY2hhciopJmV4dCwgMSk7CisgIGJybF9tZXNzYWdlKChjaGFyKilzdHIsIGN1cnNvcnBvcyk7CisgIGZyZWUoYnVmKTsKKyAgZnJlZShzdHIpOworICByZXR1cm4gMDsKK30KKworCisKKy8qCisqKiBTaG93IHRoZSBsaXN0IG9mIGZpbGVzIGVpdGhlciBvZiB0aGUgYnJhaWxsZSB0ZXJtaW5hbCBvciBvZiB0aGUgUEMKKyoqIEl0IGlzIHRoZSBtYWluIGxvb3Agb2YgdGhlIHByb2dyYW0uCisqLworaW50CQlicmxfbGlzdGZpbGVzKHRfZW52KiBlbnYpCit7CisgIHVuc2lnbmVkIGNoYXIJCWVuZCA9IDA7CisgIHVuc2lnbmVkIGNoYXIqCWJ1ZiA9IG1hbGxvYygyNTYpOworCisgIGVudi0+Y3VyZXh0ID0gMDsKKyAgZW52LT5icnBjID0gMTsKKyAgZW52LT5icmZpbGVudW0gPSAxOworICBlbnYtPnBjZmlsZW51bSA9IDA7CisgIGVudi0+c3RhdHVzID0gMTsKKyAgd2hpbGUgKCFlbmQpCisgICAgeworICAgICAgaWYgKGVudi0+YnJwYyA9PSAxKQorCXNob3dicmZpbGUoZW52KTsKKyAgICAgIGVsc2UKKwlzaG93cGNmaWxlcyhlbnYpOworICAgICAgYnJsX3JlYWQoYnVmKTsKKyAgICAgIGlmICghc3RybmNtcCgiXDAwM0tUKiIsIChjaGFyKilidWYsIDQpKQorCWVuZCA9IDE7CisgICAgICBpZiAoIXN0cm5jbXAoIlwwMDNLVDQiLCAoY2hhciopYnVmLCA0KSAmJiBlbnYtPnN0YXR1cykKKwllbnYtPnN0YXR1cy0tOworICAgICAgaWYgKCFzdHJuY21wKCJcMDAzS1Q2IiwgKGNoYXIqKWJ1ZiwgNCkgJiYKKwkgICgoZW52LT5zdGF0dXMgIT0gMiAmJiBlbnYtPmJycGMpCisJICAgfHwgKCFlbnYtPmJycGMgJiYgZW52LT5zdGF0dXMgIT0gMSkpKQorCWVudi0+c3RhdHVzKys7CisgICAgICBpZiAoIXN0cm5jbXAoIlwwMDNLVDgiLCAoY2hhciopYnVmLCA0KSkKKwl7CisJICBpZiAoZW52LT5zdGF0dXMgPT0gMCkKKwkgICAgZW52LT5icnBjID0gIWVudi0+YnJwYzsKKwkgIGlmIChlbnYtPnN0YXR1cyA9PSAxICYmIGVudi0+YnJwYykKKwkgICAgZW52LT5icmZpbGVudW0rKzsKKwkgIGlmIChlbnYtPnN0YXR1cyA9PSAxICYmICFlbnYtPmJycGMgJiYgZW52LT5wY2ZpbGVudW0gPCBlbnYtPm4gLSAxKQorCSAgICBlbnYtPnBjZmlsZW51bSsrOworCSAgaWYgKGVudi0+c3RhdHVzID09IDIgJiYgZW52LT5jdXJleHQgPCBNQVhFTlQgLSAxKQorCSAgICBlbnYtPmN1cmV4dCsrLCBlbnYtPmJyZmlsZW51bSA9IDE7CisJfQorICAgICAgaWYgKCFzdHJuY21wKCJcMDAzS1QyIiwgKGNoYXIqKWJ1ZiwgNCkpCisJeworCSAgaWYgKGVudi0+c3RhdHVzID09IDApCisJICAgIGVudi0+YnJwYyA9ICFlbnYtPmJycGM7CisJICBpZiAoZW52LT5zdGF0dXMgPT0gMSAmJiBlbnYtPmJyZmlsZW51bSA+IDEgJiYgZW52LT5icnBjKQorCSAgICBlbnYtPmJyZmlsZW51bS0tOworCSAgaWYgKGVudi0+c3RhdHVzID09IDEgJiYgZW52LT5wY2ZpbGVudW0gPiAwKQorCSAgICBlbnYtPnBjZmlsZW51bS0tOworCSAgaWYgKGVudi0+c3RhdHVzID09IDIgJiYgZW52LT5jdXJleHQgPiAwKQorCSAgICBlbnYtPmN1cmV4dC0tLCBlbnYtPmJyZmlsZW51bSA9IDE7CisJfQorICAgICAgaWYgKCFzdHJuY21wKCJcMDAzS1QjIiwgKGNoYXIqKWJ1ZiwgNCkpCisJeworCSAgaWYgKGVudi0+YnJwYykgeworCSAgICBpZiAoIWJydG9wYyhlbnYpKQorCSAgICAgIGVuZCA9IDE7CisJICB9CisJICBlbHNlCisJICAgIHsKKwkgICAgICBpZiAoIXBjdG9icihlbnYpKQorCQllbmQgPSAxOworCSAgICB9CisJfQorICAgIH0KKyAgZnJlZShidWYpOworICByZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL0RyaXZlcnMvQnJhaWxsZS9FdXJvQnJhaWxsZS9ldXRwX2JybC5oIGIvRHJpdmVycy9CcmFpbGxlL0V1cm9CcmFpbGxlL2V1dHBfYnJsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2IwNDY4ZgotLS0gL2Rldi9udWxsCisrKyBiL0RyaXZlcnMvQnJhaWxsZS9FdXJvQnJhaWxsZS9ldXRwX2JybC5oCkBAIC0wLDAgKzEsODYgQEAKKy8qCisqKiBldXRwX2JybC5oIGZvciBldXRwIGluIC9ob21lL29iZXJ0MDEvd29yay9ldXRwL3NyYworKioKKyoqIE1hZGUgYnkgT2xpdmllciBCRVJUCisqKiBMb2dpbiAgIDxvYmVydDAxQGVwaXRhLmZyPgorKioKKyoqIFN0YXJ0ZWQgb24gIFdlZCBNYXIgMTYgMTg6NDE6MjkgMjAwNSBPbGl2aWVyIEJFUlQKK0xhc3QgdXBkYXRlIFRodSBKdW4gIDcgMTg6MDU6NDUgMjAwNyBPbGl2aWVyIEJFUlQKKyovCisKKyNpZm5kZWYgX19FVVRQX0JSTF9IXworIyBkZWZpbmUgX19FVVRQX0JSTF9IXworCisKKyNpbmNsdWRlIDxpY29udi5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSAiYnJsYXBpLmgiCisKKy8qIEVVVFAgdmVyc2lvbiBudW1iZXIgKi8KKyMgZGVmaW5lIEVVVFBfVkVSU0lPTgkiRVVUUCAwLjIuNiIKKworLyogRXhpdCBjb2RlcyAqLworIyBkZWZpbmUgRV9PSwkJMAorIyBkZWZpbmUgRV9CUkxBUElfRVJST1IJMworIyBkZWZpbmUgRV9SRUFECQk0CisjIGRlZmluZSBFX1dSSVRFCTUKKworLyogc29tZSBkZWZpbmVzICovCisjIGRlZmluZSBIRUFERVJfTElORSAiXHgwY0svQ1A4IDUuMDgtMEMgMSAxNiBGVSBceDFiaVx4MWIkIgorIyBkZWZpbmUgUlVMRV9MSU5FICJceDBiUiAyNSw4MCxUOCwxNiwyNCwzMiw0MCw0OCw1Niw2NCw3Mlx4MUJQXHgxQiQiCisjIGRlZmluZSBSRUFEX0xJTkUJIkZSIgorIyBkZWZpbmUgQ0xPU0VfRklMRQkiRkMiCisKKyMgZGVmaW5lIEJVRkZFUl9TSVpFCQk1MDAKKyMgZGVmaW5lIE1BWEVOVAkJNQorCisvKgorKiogQSBzdHJ1Y3R1cmUgdGhhdCBjb250YWlucyBhbGwgaW5mb3JtYXRpb25zIGFib3V0IHRoZSBmaWxlIHRyYW5zZmVyICovCit0eXBlZGVmIHN0cnVjdAoreworICAvKiB0aGUgYnJhaWxsZSB0ZXJtaW5hbCBzZWxlY3RlZCBmaWxlICovCisgIHVuc2lnbmVkIHNob3J0IGJyZmlsZW51bTsKKyAgdW5zaWduZWQgc2hvcnQgcGNmaWxlbnVtOworICAvKiB0aGUgZmlsZSBleHRlbnNpb24gaW5kZXggd2UgYXJlIHNlYXJjaGluZyBmb3Igb24gdGhlIGJyYWlsbGUgdGVybWluYWwKKyAgKiogSXQgaXMgYSBudW1iZXIgYmV0d2VlbiAwIGFuZCAzLiAwID0gJ0snIDEgPSAnTCcgZXRjLi4uICovCisgIHVuc2lnbmVkIGNoYXIJCWN1cmV4dG51bTsKKyAgLyogTCdleHRlbnNpb24gZHUgZmljaGllciA6IEssIEwsIEIsIFQsIEEuIENlIGNoYW1wIGVzdCB1dGlsaXPDqQorICAgICBxdWUgcG91ciBsZSB0cmFuc2ZlcnQgcGMtPmJyLiBDb25jcsOodGVtZW50LCBvbiBwb3VycmFpdCBzZSBwYXNzZXIKKyAgICAgZGUgY2V0dGUgdmFyaWFibGUgb3UgZGUgY2VsbGUgZHUgZGVzc3VzICovCisgIHVuc2lnbmVkIGNoYXIJY3VyZXh0OworICAvKiBjZXR0ZSB2YXJpYWJsZSBkaXQgc2kgb24gZXN0IGVuIHRyYWluIGRlIGNoYW5nZXIgbGUgdHlwZSBkZSB0cmFuc2ZlcnQgKGJyLT5wYyBvdSBwYy0+YnIsCisgICAgIHNpIG9uIGNoYW5nZSBsJ2V4dGVuc2lvbiBvdSBzaSBvbiBjaGFuZ2UgbGUgbm9tIGR1IGZpY2hpZXIuICovCisgIHVuc2lnbmVkIGNoYXIJCXN0YXR1czsKKyAgLyogQ2V0dGUgdmFyaWFibGUgZGl0IHNpIG9uIGVzdCBlbiB0cmFpbiBkZSB0cmFuc2bDqXJlciBkdSB0ZXJtaW5hbCB2ZXJzIGxlIHBjIG91IHBhcyAqLworICB1bnNpZ25lZCBjaGFyCQlicnBjOworICAvKiBMZSBub21icmUgZGUgZmljaGllcnMgc3VyIGxlIHLDqXBlcnRvaXJlIFBDIGNvdXJhbnQgKi8KKyAgaW50CQluOworICAvKiBMaXN0ZSBkZXMgZmljaGllcnMgUEMgZGFucyBsZSByw6lwZXJ0b2lyZSBjb3VyYW50ICovCisgIHN0cnVjdCBkaXJlbnQqKgkJbGlzdDsKKyAgLyogUG91ciBsZSB0cmFuc2ZlcnQgcGMtPmJyLCB1biBkZXNjcmlwdGV1ciBkZSBmaWNoaWVyIHBvaW50YW50IHN1ciBsZSBmaWNoaWVyIMOgIHRyYW5zZsOpcmVyICovCisgIGludAkJZmQ7CisgIC8qIFN0cmVhbSBhc3NvY2lhdGVkIHdpdGggZmQgKi8KKyAgRklMRSoJCWZzOworICAvKiBub20gZHUgZmljaGllciDDoCB0cmFuc2bDqXJlciAqLworICBjaGFyCWZpbGVuYW1lWzldOworICAvKiBjb252ZXJ0aXNzZXVycyBwb3VyIGxlcyBjYXJhY3TDqHJlcyAqLworICBpY29udl90CWRvczJ1bml4OworICBpY29udl90CXVuaXgyZG9zOworICBjaGFyCQlpZGVudFsyMF07Cit9IHRfZW52OworCisKK2ludAkJYnJsX2luaXQodF9lbnYgKik7CitpbnQJCWJybF9jbG9zZSh2b2lkKTsKK2ludCAgICAgICAgICAgICBicmxfbWVzc2FnZShjaGFyICpzdHIsIHVuc2lnbmVkIGNoYXIgY3Vyc29ycG9zKTsKK2ludCAgICAgICAgICAgICBicmxfeWVzbm9fcXVlc3Rpb24oY2hhciAqc3RyKTsKK2ludAkJYnJsX2xpc3RmaWxlcyh0X2VudiopOworCisKK3ZvaWQJCWV1dHBfYWJvcnQoaW50IGV4aXRzdGF0dXMpOworc3NpemVfdAkJYnJsX3JlYWQodW5zaWduZWQgY2hhciAqKTsKK3NzaXplX3QJCWJybF93cml0ZSh1bnNpZ25lZCBjaGFyICosIHNpemVfdCBsZW4pOwordm9pZAlicmxfd3JpdGVTdHIoY2hhciAqc3RyKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Ecml2ZXJzL0JyYWlsbGUvRXVyb0JyYWlsbGUvZXV0cF9jb252ZXJ0LmMgYi9Ecml2ZXJzL0JyYWlsbGUvRXVyb0JyYWlsbGUvZXV0cF9jb252ZXJ0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTE0MTRjMgotLS0gL2Rldi9udWxsCisrKyBiL0RyaXZlcnMvQnJhaWxsZS9FdXJvQnJhaWxsZS9ldXRwX2NvbnZlcnQuYwpAQCAtMCwwICsxLDIwMiBAQAorLyoKKyoqIGNvbnZlcnQuYyBmb3IgZXV0cCBpbiAvaG9tZS9vYmVydDAxL3dvcmsvZXV0cC9zcmMKKyoqCisqKiBNYWRlIGJ5CisqKiBMb2dpbiAgIDxvYmVydDAxQGVwaXRhLmZyPgorKioKKyoqIFN0YXJ0ZWQgb24gIFRodSBNYXIgMzEgMTc6MTE6NTkgMjAwNQorTGFzdCB1cGRhdGUgV2VkIEp1biAgNiAxMzowMzo0MSAyMDA3IE9saXZpZXIgQkVSVAorKi8KKworI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPGRpcmVudC5oPgorI2luY2x1ZGUgPGN0eXBlLmg+CisjaW5jbHVkZSAiYnJsYXBpLmgiCisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVkZSA8bGFuZ2luZm8uaD4KKyNpbmNsdWRlIDxsb2NhbGUuaD4KKyNpbmNsdWRlICJldXRwX2JybC5oIgorCisKK2ludAkgICAgICAgY29udmVydF9pbml0KHRfZW52KiBlbnYpCit7CisgIHNldGxvY2FsZShMQ19BTEwsICIiKTsKKyAgZW52LT5kb3MydW5peCA9IGljb252X29wZW4obmxfbGFuZ2luZm8oQ09ERVNFVCksICJDUDg1MCIpOworICBlbnYtPnVuaXgyZG9zID0gaWNvbnZfb3BlbigiQ1A4NTAvL3RyYW5zbGl0IiwgbmxfbGFuZ2luZm8oQ09ERVNFVCkpOworICByZXR1cm4gMDsKK30KKworc2l6ZV90CQlkb3MydW5peCh0X2VudiogZW52LCBjaGFyKiogbWFwLCBzaXplX3Qgc2l6ZSkKK3sKKyAgY2hhciAqdG1wbWFwLCAqdG1wbWFwMjsKKyAgY2hhciAqcCwgKnAyOworICBzaXplX3QgaSA9IHNpemU7CisgIHNpemVfdCBvID0gMiAqc2l6ZTsKKyAgc2l6ZV90IG5ld3NpemUgPSAwOworCisgIGlmICgodG1wbWFwID0gbWFsbG9jKHNpemUpKSA9PSBOVUxMKQorICAgIHsKKyAgICAgIHBlcnJvcigibWFsbG9jIik7CisgICAgICBldXRwX2Fib3J0KDkpOworICAgIH0KKyAgaWYgKCh0bXBtYXAyID0gbWFsbG9jKDIgKiBzaXplKSkgPT0gTlVMTCkKKyAgICB7CisgICAgICBwZXJyb3IoIm1hbGxvYyIpOworICAgICAgZXV0cF9hYm9ydCg5KTsKKyAgICB9CisgIGZvciAoaSA9IDA7IGkgPCBzaXplOyBpKyspCisgICAgdG1wbWFwW2ldID0gKCptYXApW2ldOworICBwID0gdG1wbWFwOworICBwMiA9IHRtcG1hcDI7CisgIGljb252KGVudi0+ZG9zMnVuaXgsICZwLCAmaSwgJnAyLCAmbyk7CisgIG5ld3NpemUgPSAoMiAqIHNpemUpIC0gbzsKKyAgKm1hcCA9IHJlYWxsb2MoKm1hcCwgbmV3c2l6ZSk7CisgIGZvciAoaSA9IDA7IGkgPCBuZXdzaXplOyBpKyspCisgICAgeworICAgICAgKCptYXApW2ldID0gdG1wbWFwMltpXTsKKyAgICB9CisgIGZyZWUodG1wbWFwKTsKKyAgZnJlZSh0bXBtYXAyKTsKKyAgcmV0dXJuIG5ld3NpemU7Cit9CisKK2ludAkJazJ0eHQodF9lbnYqIGVudiwgY2hhciogc3JjZmlsZSwgY2hhciogZGVzdGZpbGUpCit7CisgIHN0cnVjdCBzdGF0IHN0OworICBpbnQJCWZkOworICBzaXplX3QJc2l6ZTsKKyAgY2hhcgkqbWFwID0gMDsgCisgIGNoYXIJKm5ld21hcCA9IDA7CisgIHVuc2lnbmVkIGludAkJaSA9IDAsIG8gPSAwOworICBjaGFyCQlmbGdfaGRyID0gMTsKKworICBpZiAoKGZkID0gb3BlbihzcmNmaWxlLCBPX1JET05MWSkpID09IC0xKQorICAgIHsKKyAgICAgIHBlcnJvcigib3BlbiIpOworICAgICAgcmV0dXJuIDA7CisgICAgfQorICBmc3RhdChmZCwgJnN0KTsKKyAgc2l6ZSA9IHN0LnN0X3NpemU7CisgIG1hcCA9IG1hbGxvYyhzaXplICsgMSk7CisgIG5ld21hcCA9IG1hbGxvYyhzaXplICsgMSk7CisgIHJlYWQoZmQsIG1hcCwgc2l6ZSk7CisgIG1hcFtzaXplXSA9IDA7CisgIGNsb3NlKGZkKTsKKyAgaWYgKChmZCA9IG9wZW4oZGVzdGZpbGUsIE9fV1JPTkxZIHwgT19DUkVBVCB8IE9fVFJVTkMsIDA2MDApKSA9PSAtMSkKKyAgICB7CisgICAgICBwZXJyb3IoIm9wZW4iKTsKKyAgICAgIHJldHVybiAwOworICAgIH0KKyAgd2hpbGUgKGZsZ19oZHIpCisgICAgeworICAgICAgaWYgKG1hcFtpXSA9PSAnUicgJiYgbWFwWyBpIC0gMV0gPT0gJ1x4MGInKQorCWZsZ19oZHIgPSAyOworICAgICAgaWYgKGZsZ19oZHIgPT0gMiAmJiBtYXBbaV0gPT0gJyQnICYmIG1hcFtpIC0gMV0gPT0gJ1x4MWInKQorCXsKKwkgIGkrKzsKKwkgIGZsZ19oZHIgPSAwOworCSAgYnJlYWs7CisJfQorICAgICAgaSsrOworICAgIH0KKyAgd2hpbGUgKGkgPCBzaXplIC0gIDMpIAorICAgIC8qIHRoZSAzIGxhc3QgY2hhcmFjdGVycyBhcmUgc3BlY2lmaWMgdG8gdGhlIEsgZm9ybWF0ICovCisgICAgeworICAgICAgaWYgKG1hcFtpXSA9PSAnUCcgJiYgbWFwW2kgLSAxXSA9PSAnXHgxYicpCisJbmV3bWFwW28rK10gPSAnXG4nOworICAgICAgaWYgKG1hcFtpXSA9PSAnTCcgJiYgbWFwW2kgLSAxXSA9PSAnXHgxYicpCisJbmV3bWFwW28rK10gPSAnXG4nOworICAgICAgaWYgKG1hcFtpXSA9PSAnXHgxYicgJiYgbWFwW2kgLSAxXSA9PSAnXHgxYicpCisJbmV3bWFwW28rK10gPSAnXHgxYic7CisgICAgICBpZiAobWFwW2ldICE9ICdceDFiJyAmJiBtYXBbaSAtIDFdICE9ICdceDFiJykKKwluZXdtYXBbbysrXSA9IG1hcFtpXTsKKyAgICAgIGkrKzsKKyAgICB9CisgIC8qIENvbnZlcnQgdGV4dCBpbnRvIHRoZSBjdXJyZW50IGNoYXJzZXQgKi8KKyAgc2l6ZSA9IGRvczJ1bml4KGVudiwgJm5ld21hcCwgbyk7CisgIHdyaXRlKGZkLCBuZXdtYXAsIHNpemUpOworICBmcmVlKG1hcCk7CisgIGZyZWUobmV3bWFwKTsKKyAgY2xvc2UoZmQpOworICByZXR1cm4gMTsKK30KKworLyoKK0NldHRlIGZvbmN0aW9uIHByZW5kIGxlIG5vbSBkdSBmaWNoaWVyIFBDICgudHh0IG91IC5rIG91IGF1dHJlKSBldCBsZQorbWV0IHNvdXMgbGEgZm9ybWUgeHh4eHh4eHggKDggbGV0dHJlcykgZXQgZXhoaWJlIGwnZXh0ZW5zaW9uLgorRWxsZSByZXRvdXJuZSAxIHNpIHVuZSBjb252ZXJzaW9uIHZlcnMgLkwgZXN0IG7DqWNlc3NhaXJlLAorMCBzaW5vbi4gTGUgdHlwZSBkdSBmaWNoaWVyIGVzdCBkw6l0ZWN0w6kgdW5pcXVlbWVudCBwYXIgcmFwcG9ydCDDoCBsJ2V4dGVuc2lvbi4KKyovCitpbnQJCW5vcm1hbGl6ZV9maWxlbmFtZSh0X2VudiogZW52KQoreworICBjaGFyKiBuYW1lID0gTlVMTDsKKyAgaW50IGkgPSAwOworICBpbnQgaiA9IDA7CisgIGludCByZXR2YWwgPSAwOworCisgIGVudi0+Y3VyZXh0ID0gMDsKKyAgbmFtZSA9IGVudi0+bGlzdFtlbnYtPnBjZmlsZW51bV0tPmRfbmFtZTsKKyAgLyogUmVjb25uYWlzc2FuY2UgZGUgbCdleHRlbnNpb24gKi8KKyAgaSA9IHN0cmxlbigoY2hhciopbmFtZSk7CisgIGlmIChuYW1lW2kgLSAyXSA9PSAnLicgJiYgKHRvdXBwZXIobmFtZVtpIC0gMV0gPT0gJ0snKQorCQkJICAgICB8fCB0b3VwcGVyKG5hbWVbaSAtIDFdKSA9PSAnVCcKKwkJCSAgICAgfHwgdG91cHBlcihuYW1lW2kgLSAxXSA9PSAnQScpCisJCQkgICAgIHx8IHRvdXBwZXIobmFtZVtpIC0gMV0gPT0gJ0wnKQorCQkJICAgICB8fCB0b3VwcGVyKG5hbWVbaSAtIDFdKSA9PSAnQicpKQorICAgIHsKKyAgICAgIGVudi0+Y3VyZXh0ID0gdG91cHBlcihuYW1lW2kgLSAxXSk7CisgICAgICByZXR2YWwgPSAwOyAgLyogbm8gY29udmVyc2lvbiBuZWNjZXNhcnkgKi8KKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICBlbnYtPmN1cmV4dCA9ICdLJzsKKyAgICAgIHJldHZhbCA9IDE7IC8qIENvbnZlcnRpbmcgZnJvbSBUZXh0IGZpbGUgdG8gLksgbmVlZGVkICovCisgICAgfQorICBpID0gMDsKKyAgaiA9IDA7CisgIHdoaWxlIChuYW1lW2ldICYmIGkgPD0gNyAmJiBuYW1lW2ldICE9ICcuJykKKyAgICB7CisgICAgICBlbnYtPmZpbGVuYW1lW2orK10gPSBuYW1lW2krK107CisgICAgfQorICB3aGlsZSAoaSA8PSA3KQorICAgIHsKKyAgICAgIGVudi0+ZmlsZW5hbWVbaisrXSA9ICcgJzsKKyAgICAgIGkrKzsKKyAgICB9CisgIGVudi0+ZmlsZW5hbWVbaisrXSA9IDA7CisgIHJldHVybiByZXR2YWw7Cit9CisKKworaW50CQl0eHQyayhjaGFyKiBzcmNmaWxlLCBjaGFyKiBkZXN0ZmlsZSkKK3sKKyAgc3RydWN0IHN0YXQgc3Q7CisgIGludAkJZmQ7CisgIHNpemVfdAlzaXplOworICBjaGFyKiBtYXA7CisKKyAgaWYgKChmZCA9IG9wZW4oc3JjZmlsZSwgT19SRE9OTFkpKSA9PSAtMSkKKyAgICB7CisgICAgICBwZXJyb3IoIm9wZW4iKTsKKyAgICAgIHJldHVybiAwOworICAgIH0KKyAgZnN0YXQoZmQsICZzdCk7CisgIHNpemUgPSBzdC5zdF9zaXplOworICBtYXAgPSBtYWxsb2Moc2l6ZSArIDEpOworICByZWFkKGZkLCBtYXAsIHNpemUpOworICBtYXBbc2l6ZV0gPSAwOworICBjbG9zZShmZCk7CisgIGlmICgoZmQgPSBvcGVuKGRlc3RmaWxlLCBPX1dST05MWSB8IE9fQ1JFQVQgfCBPX1RSVU5DLCAwNjAwKSkgPT0gLTEpCisgICAgeworICAgICAgcGVycm9yKCJvcGVuIik7CisgICAgICByZXR1cm4gMDsKKyAgICB9CisgIC8qIGVjcml0dXJlIGRlIGwnZW4tdMOqdGUgKi8KKworICByZXR1cm4gMTsKK30KZGlmZiAtLWdpdCBhL0RyaXZlcnMvQnJhaWxsZS9FdXJvQnJhaWxsZS9ldXRwX2NvbnZlcnQuaCBiL0RyaXZlcnMvQnJhaWxsZS9FdXJvQnJhaWxsZS9ldXRwX2NvbnZlcnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMDIzNjhkCi0tLSAvZGV2L251bGwKKysrIGIvRHJpdmVycy9CcmFpbGxlL0V1cm9CcmFpbGxlL2V1dHBfY29udmVydC5oCkBAIC0wLDAgKzEsMTYgQEAKKy8qCisqKiBjb252ZXJ0LmggZm9yIGV1dHAgaW4gL2hvbWUvb2JlcnQwMS93b3JrL2V1dHAvc3JjCisqKgorKiogTWFkZSBieQorKiogTG9naW4gICA8b2JlcnQwMUBlcGl0YS5mcj4KKyoqCisqKiBTdGFydGVkIG9uICBUaHUgTWFyIDMxIDE3OjEyOjA1IDIwMDUKKyoqIExhc3QgdXBkYXRlIFR1ZSBNYXIgMTQgMTY6MTk6NDkgMjAwNiBPbGl2aWVyIEJFUlQKKyovCisjaWZuZGVmIF9fRVVUUF9DT05WRVJUX0hfCisjZGVmaW5lIF9fRVVUUF9DT05WRVJUX0hfCisKK2ludAkJazJ0eHQodF9lbnYqIGVudiwgY2hhciogc3JjZmlsZSwgY2hhciogZGVzdGZpbGUpOworaW50CW5vcm1hbGl6ZV9maWxlbmFtZSh0X2VudiopOworaW50CWNvbnZlcnRfaW5pdCh0X2VudiAqKTsKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvRHJpdmVycy9CcmFpbGxlL0V1cm9CcmFpbGxlL2V1dHBfZGVidWcuYyBiL0RyaXZlcnMvQnJhaWxsZS9FdXJvQnJhaWxsZS9ldXRwX2RlYnVnLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjZhOGZhZAotLS0gL2Rldi9udWxsCisrKyBiL0RyaXZlcnMvQnJhaWxsZS9FdXJvQnJhaWxsZS9ldXRwX2RlYnVnLmMKQEAgLTAsMCArMSwyMyBAQAorLyoKKyoqIGRlYnVnLmMgZm9yIGV1dHAgaW4gL2hvbWUvb2JlcnQwMS93b3JrL2V1dHAvc3JjCisqKgorKiogTWFkZSBieSBPbGl2aWVyIEJFUlQKKyoqIExvZ2luICAgPG9iZXJ0MDFAZXBpdGEuZnI+CisqKgorKiogU3RhcnRlZCBvbiAgV2VkIE1hciAzMCAxMjo1MDozNyAyMDA1IE9saXZpZXIgQkVSVAorKiogTGFzdCB1cGRhdGUgV2VkIE1hciAzMCAxMjo1NToyNCAyMDA1IE9saXZpZXIgQkVSVAorKi8KKworCisjaW5jbHVkZSA8c3RkaW8uaD4KKworaW50CQlkZWJ1Z19wcmludF9idWYodW5zaWduZWQgY2hhciogYnVmKQoreworICBpbnQgaSA9IDA7CisKKyAgcHJpbnRmKCJwcmludGluZyByZWNlaXZlZCBidWZmZXI6XG4iKTsKKyAgZm9yIChpID0gMDsgaSA8IDgwOyBpKyspCisgICAgcHJpbnRmKCIleCwiLCBidWZbaV0pOworICBwcmludGYoIlxuIik7CisgIHJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvRHJpdmVycy9CcmFpbGxlL0V1cm9CcmFpbGxlL2V1dHBfZGVidWcuaCBiL0RyaXZlcnMvQnJhaWxsZS9FdXJvQnJhaWxsZS9ldXRwX2RlYnVnLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGNjNzcyNQotLS0gL2Rldi9udWxsCisrKyBiL0RyaXZlcnMvQnJhaWxsZS9FdXJvQnJhaWxsZS9ldXRwX2RlYnVnLmgKQEAgLTAsMCArMSwxNCBAQAorLyoKKyoqIGRlYnVnLmggZm9yIGV1dHAgaW4gL2hvbWUvb2JlcnQwMS93b3JrL2V1dHAvc3JjCisqKgorKiogTWFkZSBieSBPbGl2aWVyIEJFUlQKKyoqIExvZ2luICAgPG9iZXJ0MDFAZXBpdGEuZnI+CisqKgorKiogU3RhcnRlZCBvbiAgV2VkIE1hciAzMCAxMjo1MzozNyAyMDA1IE9saXZpZXIgQkVSVAorKiogTGFzdCB1cGRhdGUgV2VkIE1hciAzMCAxMjo1OToxNiAyMDA1IE9saXZpZXIgQkVSVAorKi8KKyNpZm5kZWYgX19FVVRQX0RFQlVHX0hfCisjZGVmaW5lIF9fRVVUUF9ERUJVR19IXworCitpbnQJCWRlYnVnX3ByaW50X2J1Zih1bnNpZ25lZCBjaGFyKiBidWYpOworI2VuZGlmCmRpZmYgLS1naXQgYS9Ecml2ZXJzL0JyYWlsbGUvRXVyb0JyYWlsbGUvZXV0cF9tYWluLmMgYi9Ecml2ZXJzL0JyYWlsbGUvRXVyb0JyYWlsbGUvZXV0cF9tYWluLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmMyMjMwNgotLS0gL2Rldi9udWxsCisrKyBiL0RyaXZlcnMvQnJhaWxsZS9FdXJvQnJhaWxsZS9ldXRwX21haW4uYwpAQCAtMCwwICsxLDM2IEBACisvKgorKiogZXV0cC5jIGZvciBldXRwIGluIC9ob21lL29iZXJ0MDEvd29yay9ldXRwL3NyYworKioKKyoqIE1hZGUgYnkgT2xpdmllciBCRVJUCisqKiBMb2dpbiAgIDxvYmVydDAxQGVwaXRhLmZyPgorKioKKyoqIFN0YXJ0ZWQgb24gIFdlZCBNYXIgMTYgMTg6MzE6MTcgMjAwNSBPbGl2aWVyIEJFUlQKK0xhc3QgdXBkYXRlIFdlZCBKdW4gIDYgMTM6MzE6MTYgMjAwNyBPbGl2aWVyIEJFUlQKKyovCisKKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlICJldXRwX2JybC5oIgorI2luY2x1ZGUgImV1dHBfY29udmVydC5oIgorI2luY2x1ZGUgPHN0ZGlvLmg+CisKKyNpbmNsdWRlICJldXRwX3BjLmgiCisKKworCitpbnQJCSBtYWluKHZvaWQpCit7CisgIHRfZW52CQllbnY7CisKKyAgaWYgKGJybF9pbml0KCZlbnYpICE9IDApCisgICAgeworICAgICAgZnByaW50ZihzdGRlcnIsICJFcnJvciBpbml0aWFsaXppbmcgYnJsYXBpICFcbiIpOworICAgICAgZXhpdChFX0JSTEFQSV9FUlJPUik7CisgICAgfQorICBpZiAocGNfaW5pdCgmZW52KSA9PSAtMSkKKyAgICBleGl0KDIpOworICBjb252ZXJ0X2luaXQoJmVudik7CisgIGJybF9saXN0ZmlsZXMoJmVudik7CisgIGJybF9jbG9zZSgpOworICByZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL0RyaXZlcnMvQnJhaWxsZS9FdXJvQnJhaWxsZS9ldXRwX3BjLmMgYi9Ecml2ZXJzL0JyYWlsbGUvRXVyb0JyYWlsbGUvZXV0cF9wYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMxMzkxZjcKLS0tIC9kZXYvbnVsbAorKysgYi9Ecml2ZXJzL0JyYWlsbGUvRXVyb0JyYWlsbGUvZXV0cF9wYy5jCkBAIC0wLDAgKzEsNjkgQEAKKy8qCisqKiBwYy5jIGZvciBldXRwIGluIC9ob21lL29iZXJ0MDEvd29yay9ldXRwL3NyYworKioKKyoqIE1hZGUgYnkgT2xpdmllciBCRVJUCisqKiBMb2dpbiAgIDxvYmVydDAxQGVwaXRhLmZyPgorKioKKyoqIFN0YXJ0ZWQgb24gIFN1biBNYXIgMjAgMDE6Mjc6NTMgMjAwNSBPbGl2aWVyIEJFUlQKK0xhc3QgdXBkYXRlIFdlZCBKdW4gIDYgMjA6NDI6NDAgMjAwNyBPbGl2aWVyIEJFUlQKKyovCisKKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisjaW5jbHVkZSA8ZGlyZW50Lmg+CisKKyNpbmNsdWRlICJldXRwX2JybC5oIgorI2luY2x1ZGUgImV1dHBfcGMuaCIKKworCitleHRlcm4gdW5zaWduZWQgY2hhciBleHRlbnNpb25zW107CitleHRlcm4gdW5zaWduZWQgY2hhciBwb3NpdGlvbnNbXTsKKworLyoKKyoqIFRoZSBmaWx0ZXIgOiB3ZSBkb24ndCB3YW50IHRvIGhhdmUgZGlyZWN0b3JpZXMgaW4gdGhlIGxpc3QKKyovCitzdGF0aWMgaW50CWZpbHRlcl9maWxlcyhjb25zdCBzdHJ1Y3QgZGlyZW50KiBkKQoreworICBzdHJ1Y3Qgc3RhdCBzdDsKKworICBzdGF0KGQtPmRfbmFtZSwgJnN0KTsKKyAgaWYgKFNfSVNESVIoc3Quc3RfbW9kZSkpCisgICAgcmV0dXJuIDA7CisgIHJldHVybiAxOworfQorCitpbnQJCXNjYW5maWxlcyh0X2VudiAqZW52KQoreworICBlbnYtPm4gPSBzY2FuZGlyKCIuIiwgJihlbnYtPmxpc3QpLCBmaWx0ZXJfZmlsZXMsIGFscGhhc29ydCk7CisgIGlmIChlbnYtPm4gPCAwKQorICAgIHsKKyAgICAgIHBlcnJvcigic2NhbmRpciIpOworICAgICAgcmV0dXJuIC0xOworICAgIH0KKyAgcmV0dXJuIGVudi0+bjsKK30KKworaW50CQlwY19pbml0KHRfZW52ICplbnYpCit7CisgIHJldHVybiBzY2FuZmlsZXMoZW52KTsKK30KKworLyoKKyoqIFNob3cgUEMgZmlsZXMKKyovCitpbnQJCXNob3dwY2ZpbGVzKHRfZW52KiBlbnYpCit7CisgIHVuc2lnbmVkIGNoYXIJcG9zID0gcG9zaXRpb25zW2Vudi0+c3RhdHVzXTsKKyAgY2hhcgkJc3RyW0JVRkZFUl9TSVpFXTsgLyogd2hhdCB3ZSBkaXNwbGF5IHRvIHRoZSBicmFpbGxlIHRlcm1pbmFsICovCisKKyAgc3RyY3B5KHN0ciwgIlBDPkJSICIpOworICBzdHJjYXQoc3RyLCBlbnYtPmxpc3RbZW52LT5wY2ZpbGVudW1dLT5kX25hbWUpOworICBicmxfbWVzc2FnZShzdHIsIHBvcyk7CisgIHJldHVybiAwOworfQorCmRpZmYgLS1naXQgYS9Ecml2ZXJzL0JyYWlsbGUvRXVyb0JyYWlsbGUvZXV0cF9wYy5oIGIvRHJpdmVycy9CcmFpbGxlL0V1cm9CcmFpbGxlL2V1dHBfcGMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZTUxOTI3Ci0tLSAvZGV2L251bGwKKysrIGIvRHJpdmVycy9CcmFpbGxlL0V1cm9CcmFpbGxlL2V1dHBfcGMuaApAQCAtMCwwICsxLDE5IEBACisjaWZuZGVmIF9fRVVUUF9QQ19IXworI2RlZmluZSBfX0VVVFBfUENfSF8KKyNpbmNsdWRlIDxkaXJlbnQuaD4KKyNpbmNsdWRlICJldXRwX2JybC5oIgorCitpbnQJCXNob3dwY2ZpbGVzKHRfZW52Kik7CitpbnQJCXBjX2luaXQodF9lbnYqKTsKKworCisKKy8qCisqKiBMaWJjIHByb3RvdHlwZXMKKyovCitpbnQgYWxwaGFzb3J0KGNvbnN0IHN0cnVjdCBkaXJlbnQgKiphLCAKKwkgICAgICBjb25zdCBzdHJ1Y3QgZGlyZW50ICoqYik7CitpbnQgc2NhbmRpcihjb25zdCBjaGFyICpkaXIsIHN0cnVjdCBkaXJlbnQgKioqbmFtZWxpc3QsCisJICAgaW50KCpmaWx0ZXIpKGNvbnN0IHN0cnVjdCBkaXJlbnQgKiksCisJICAgaW50KCpjb21wYXIpKGNvbnN0IHN0cnVjdCBkaXJlbnQgKiosIGNvbnN0IHN0cnVjdCBkaXJlbnQgKiopKTsKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvRHJpdmVycy9CcmFpbGxlL0V1cm9CcmFpbGxlL2V1dHBfc3RhdGljLmggYi9Ecml2ZXJzL0JyYWlsbGUvRXVyb0JyYWlsbGUvZXV0cF9zdGF0aWMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNDcxNDRkCi0tLSAvZGV2L251bGwKKysrIGIvRHJpdmVycy9CcmFpbGxlL0V1cm9CcmFpbGxlL2V1dHBfc3RhdGljLmgKQEAgLTAsMCArMSwxNiBAQAorLyoKKyoqIHN0YXRpYy5oIGZvciBldXRwIGluIC9ob21lL29iZXJ0MDEvd29yay9ldXRwL3NyYworKioKKyoqIE1hZGUgYnkKKyoqIExvZ2luICAgPG9iZXJ0MDFAZXBpdGEuZnI+CisqKgorKiogU3RhcnRlZCBvbiAgV2VkIEp1biAgOCAxOToxNjozOSAyMDA1CisqKiBMYXN0IHVwZGF0ZSBXZWQgSnVuICA4IDE5OjE5OjU3IDIwMDUgCisqLworCisjaWZuZGVmIF9fRVVUUF9TVEFUSUNfSF8KKyNkZWZpbmUgX19FVVRQX1NUQVRJQ19IXworc3RhdGljIHVuc2lnbmVkIGNoYXIgZXh0ZW5zaW9uc1tdID0geydLJywgJ0wnLCAnQicsICdUJywgJ0EnfTsKK3N0YXRpYyB1bnNpZ25lZCBjaGFyIHBvc2l0aW9uc1tdID0gezMsIDcsIDE2fTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Ecml2ZXJzL0JyYWlsbGUvRXVyb0JyYWlsbGUvZXV0cF90b29scy5jIGIvRHJpdmVycy9CcmFpbGxlL0V1cm9CcmFpbGxlL2V1dHBfdG9vbHMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOTM5OTg2Ci0tLSAvZGV2L251bGwKKysrIGIvRHJpdmVycy9CcmFpbGxlL0V1cm9CcmFpbGxlL2V1dHBfdG9vbHMuYwpAQCAtMCwwICsxLDQ2IEBACisvKgorKiogdG9vbHMuYyBmb3IgZXV0cCBpbiAvaG9tZS9vYmVydDAxL3dvcmsvZXV0cC9zcmMKKyoqCisqKiBNYWRlIGJ5CisqKiBMb2dpbiAgIDxvYmVydDAxQGVwaXRhLmZyPgorKioKKyoqIFN0YXJ0ZWQgb24gIFRodSBNYXIgMzEgMTI6Mjg6MDcgMjAwNQorKiogTGFzdCB1cGRhdGUgRnJpIE1hciAyNCAxNzozMTozOSAyMDA2IE9saXZpZXIgQkVSVAorKi8KKworI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgImV1dHBfYnJsLmgiCisKK3ZvaWQJCQlicmxfbGFzdGluZ19tZXNzYWdlKGNoYXIqIG1zZykKK3sKKyAgYnJsX21lc3NhZ2UobXNnLCAwKTsKKyAgc2xlZXAoMSk7CisgIHJldHVybjsKK30KKworCisvKgorKiogV2hlbiBleHRyYWN0ZWQgZnJvbSB0aGUgYnJhaWxsZSB0ZXJtaW5hbCwgdGhlIGZpbGVuYW1lcyBhcmUgcGFkZGVkIHRvCisqKiA4IGNoYXJzIHdpdGggYmxhbmsgY2hhcmFjdGVycy4gVGhpcyBmdW5jdGlvbiByZW1vdmVzIHRoZWVzZSBibGFua3MuCisqLwordm9pZAkJcmVtb3ZlX2JsYW5rcyh1bnNpZ25lZCBjaGFyICpzdHIpCit7CisgIGludCBpID0gMDsKKworICB3aGlsZSAoc3RyW2ldICYmIHN0cltpXSAhPSAnICcpCisgICAgaSsrOworICBzdHJbaV0gPSAwOworfQorCit2b2lkCQlwYWRfYmxhbmtzKHVuc2lnbmVkIGNoYXIgKnN0cikKK3sKKyAgaW50IGkgPSAwOworCisgIHdoaWxlIChzdHJbaV0gJiYgaSA8IDgpCisgICAgaSsrOworICB3aGlsZSAoaSA8IDgpCisgICAgeworICAgICAgc3RyW2krK10gPSAnICc7CisgICAgfQorICBzdHJbaV0gPSAwOworfQpkaWZmIC0tZ2l0IGEvRHJpdmVycy9CcmFpbGxlL0V1cm9CcmFpbGxlL2V1dHBfdG9vbHMuaCBiL0RyaXZlcnMvQnJhaWxsZS9FdXJvQnJhaWxsZS9ldXRwX3Rvb2xzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzk1NjUxOQotLS0gL2Rldi9udWxsCisrKyBiL0RyaXZlcnMvQnJhaWxsZS9FdXJvQnJhaWxsZS9ldXRwX3Rvb2xzLmgKQEAgLTAsMCArMSwxOSBAQAorLyoKKyoqIHRvb2xzLmggZm9yIGV1dHAgaW4gL2hvbWUvb2JlcnQwMS93b3JrL2V1dHAvc3JjCisqKgorKiogTWFkZSBieQorKiogTG9naW4gICA8b2JlcnQwMUBlcGl0YS5mcj4KKyoqCisqKiBTdGFydGVkIG9uICBUaHUgTWFyIDMxIDEyOjM2OjU1IDIwMDUKKyoqIExhc3QgdXBkYXRlIEZyaSBNYXIgMjQgMTc6MzE6NDEgMjAwNiBPbGl2aWVyIEJFUlQKKyovCisKKyNpZm5kZWYgX19FVVRQX1RPT0xTX0hfCisjZGVmaW5lIF9fRVVUUF9UT09MU19IXwordm9pZAkJcmVtb3ZlX2JsYW5rcyh1bnNpZ25lZCBjaGFyICpzdHIpOwordm9pZAkJcGFkX2JsYW5rcyh1bnNpZ25lZCBjaGFyKiBzdHIpOworCisvKiBEaXNwbGF5IGEgbGFzdGluZyBtZXNzYWdlICovCit2b2lkCQkJYnJsX2xhc3RpbmdfbWVzc2FnZShjaGFyKiBtc2cpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL0RyaXZlcnMvQnJhaWxsZS9FdXJvQnJhaWxsZS9ldXRwX3RyYW5zZmVyLmMgYi9Ecml2ZXJzL0JyYWlsbGUvRXVyb0JyYWlsbGUvZXV0cF90cmFuc2Zlci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBkODk3ZmEKLS0tIC9kZXYvbnVsbAorKysgYi9Ecml2ZXJzL0JyYWlsbGUvRXVyb0JyYWlsbGUvZXV0cF90cmFuc2Zlci5jCkBAIC0wLDAgKzEsMjgyIEBACisvKgorKiogdHJhbnNmZXIuYyBmb3IgZXV0cCBpbiAvaG9tZS9vYmVydDAxL3dvcmsvZXV0cC9zcmMKKyoqCisqKiBNYWRlIGJ5IE9saXZpZXIgQkVSVAorKiogTG9naW4gICA8b2JlcnQwMUBlcGl0YS5mcj4KKyoqCisqKiBTdGFydGVkIG9uICBTdW4gTWFyIDIwIDE2OjEwOjA2IDIwMDUgT2xpdmllciBCRVJUCitMYXN0IHVwZGF0ZSBGcmkgSnVuICAxIDE1OjIzOjE3IDIwMDcgT2xpdmllciBCRVJUCisqLworCisjaWZuZGVmIF9YT1BFTl9TT1VSQ0UKKyNkZWZpbmUgX1hPUEVOX1NPVVJDRSA1MDAKKyNlbmRpZiAvKiBfWE9QRU5fU09VUkNFICovCisKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxkaXJlbnQuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVkZSAiYnJsYXBpLmgiCisjaW5jbHVkZSAiZXV0cF9icmwuaCIKKyNpbmNsdWRlICJldXRwX2RlYnVnLmgiCisjaW5jbHVkZSAiZXV0cF90b29scy5oIgorI2luY2x1ZGUgImV1dHBfY29udmVydC5oIgorCitleHRlcm4gdW5zaWduZWQgY2hhciBleHRlbnNpb25zW107CisKKworaW50CQlicnRvcGModF9lbnYqIGVudikKK3sKKyAgaW50CQlmZDsgLyogZmQgb2YgYSB0ZW1wb3JhcnkgZmlsZSAqLworICB1bnNpZ25lZCBpbnQJCWxpbmVzID0gMDsgLyogbnVtYmVyIG9mIHBhY2tldHMgdHJhbnNmZXJlZCAqLworICB1bnNpZ25lZCBjaGFyIGRlc3RleHQgPSAwOyAgLyogY29udmVyc2lvbiBvZiB0aGUgZGVzdGluYXRpb24gZmlsZSAqLworICB1bnNpZ25lZCBjaGFyCQlidWZbQlVGRkVSX1NJWkVdOyAvKiByZWNlaXZlZCBidWZmZXIgKi8KKyAgdW5zaWduZWQgY2hhcglzdHJbQlVGRkVSX1NJWkVdOyAgLyogc2VudCBidWZmZXIgKi8KKyAgdW5zaWduZWQgY2hhciBleHQgPSBleHRlbnNpb25zW2Vudi0+Y3VyZXh0XTsgIC8qIGN1cnJlbnQgZXh0ZW5zaW9uICovCisgIHVuc2lnbmVkIGNoYXIgZmlsZW5hbWVbMTVdOyAvKiBUaGUgdHJhbnNmZXJlZCBmaWxlIG5hbWUgKi8KKyAgdW5zaWduZWQgY2hhciBmaWxlbmFtZTFbMTVdOyAvKiBUaGUgZmlsZW5hbWUgd2l0aG91dCBleHRlbnNpb24gKi8KKworICB3aGlsZSAoMSkKKyAgICB7CisgICAgICAvKiBBc2tpbmcgbmFtZSBvZiBjdXJyZW50IHNlbGVjdGVkIGZpbGUgKi8KKyAgICAgIHN0cmNweSgoY2hhciopYnVmLCAiXDAwNUZOIik7CisgICAgICBidWZbM10gPSBleHQ7CisgICAgICBidWZbNF0gPSAoZW52LT5icmZpbGVudW0gJiAweGZmMDApID4+IDI7CisgICAgICBidWZbNV0gPSBlbnYtPmJyZmlsZW51bSAmIDB4MDBmZjsKKyAgICAgIGJybF93cml0ZShidWYrMSwgNSk7CisgICAgICBicmxfcmVhZChidWYpOworICAgICAgc3RyY3B5KChjaGFyKilzdHIsICJDb252ICIpOworICAgICAgc3RybmNhdCgoY2hhciopc3RyLCAoKGNoYXIqKSYoYnVmWzZdKSksIGJ1ZlswXSAtIDUpOworICAgICAgZmlsZW5hbWVbMF0gPSAwOworICAgICAgc3RybmNhdCgoY2hhciopZmlsZW5hbWUsICgoY2hhciopJihidWZbNl0pKSwgYnVmWzBdIC0gNSk7CisgICAgICBzdHJjYXQoKGNoYXIqKXN0ciwgIi4iKTsKKyAgICAgIHJlbW92ZV9ibGFua3MoZmlsZW5hbWUpOworICAgICAgc3RyY3B5KChjaGFyKilmaWxlbmFtZTEsIChjaGFyKilmaWxlbmFtZSk7CisgICAgICBzdHJjYXQoKGNoYXIqKWZpbGVuYW1lLCAiLiIpOworICAgICAgaWYgKGRlc3RleHQgPT0gMCkgeworCXN0cm5jYXQoKGNoYXIqKXN0ciwgKChjaGFyKikmKGV4dGVuc2lvbnNbZW52LT5jdXJleHRdKSksIDEpOworCXN0cm5jYXQoKGNoYXIqKWZpbGVuYW1lLCAoKGNoYXIqKSYoZXh0ZW5zaW9uc1tlbnYtPmN1cmV4dF0pKSwgMSk7CisgICAgICB9CisgICAgICBlbHNlIHsKKwlzdHJjYXQoKGNoYXIqKXN0ciwgIlRYVCIpOworCXN0cmNhdCgoY2hhciopZmlsZW5hbWUsICJUWFQiKTsKKyAgICAgIH0KKyAgICAgIGJybF9tZXNzYWdlKChjaGFyKilzdHIsIDApOworICAgICAgYnJsX3JlYWQoYnVmKTsKKyAgICAgIGlmICghc3RybmNtcCgoY2hhciopYnVmLCAiXDAwM0tUKiIsIDQpKQorCXJldHVybiAxOworICAgICAgaWYgKCFzdHJuY21wKChjaGFyKilidWYsICJcMDAzS1QjIiwgNCkpCisJYnJlYWs7CisgICAgICBpZiAoIXN0cm5jbXAoKGNoYXIqKWJ1ZiwgIlwwMDNLVDgiLCA0KSkKKwlkZXN0ZXh0ID0gIWRlc3RleHQ7CisgICAgICBpZiAoIXN0cm5jbXAoKGNoYXIqKWJ1ZiwgIlwwMDNLVDIiLCA0KSkKKwlkZXN0ZXh0ID0gIWRlc3RleHQ7CisgICAgfQorICBzdHJjcHkoKGNoYXIqKWJ1ZiwgIlwwMDVGTyIpOworICBidWZbM10gPSBleHQ7CisgIGJ1Zls0XSA9IChlbnYtPmJyZmlsZW51bSAmIDB4ZmYwMCkgPj4gMjsKKyAgYnVmWzVdID0gZW52LT5icmZpbGVudW0gJiAweDAwZmY7CisgIGJybF93cml0ZShidWYrMSwgNSk7CisgIGJybF9yZWFkKGJ1Zik7CisgIGlmIChzdHJuY21wKChjaGFyKilidWYsICJcMDAzRkVceDEwIiwgNCkpCisgICAgeworICAgICAgYnJsX2xhc3RpbmdfbWVzc2FnZSgiRXJyZXVyIG91diBiciIpOworICAgICAgcmV0dXJuIDE7CisgICAgfQorICBpZiAoKGZkID0gb3BlbigoY2hhciopZmlsZW5hbWUsIE9fV1JPTkxZIHwgT19DUkVBVCB8IE9fVFJVTkMsIDA2MDApKSA9PSAtMSkKKyAgICB7CisgICAgICBwZXJyb3IoIm9wZW4iKTsKKyAgICAgIGJybF9tZXNzYWdlKCIhIEVyciBlY3JpdHVyZSBQQyIsIDApOworICAgICAgc2xlZXAoMSk7CisgICAgICByZXR1cm4gMTsKKyAgICB9CisgIHdoaWxlICgxKQorICAgIHsKKyAgICAgIGJybF93cml0ZVN0cihSRUFEX0xJTkUpOworICAgICAgYnJsX3JlYWQoYnVmKTsKKyAgICAgIGlmICghc3RybmNtcCgoY2hhciopYnVmLCAiXDAwM0tUIiwgMykpCisJeworCSAgcHJpbnRmKCJ0b3VjaGUgYXBwdXnDqWVcbiIpOworCSAgaWYgKCFzdHJuY21wKChjaGFyKilidWYsICJcMDAzS1QqIiwgNCkpCisJICAgIHsKKwkgICAgICBwcmludGYoInRvdWNoZSAqIGFwcHV5w6llXG4iKTsKKwkgICAgICBicmxfbGFzdGluZ19tZXNzYWdlKCIhIGludGVycm9tcHUgIik7CisJICAgICAgcmV0dXJuIDE7CisJICAgIH0KKwl9CisgICAgICBpZiAoIXN0cm5jbXAoKGNoYXIqKWJ1ZiwgIlwwMDNGRSIsIDMpKQorCXsKKwkgIGlmIChidWZbM10gPT0gJ1x4MTMnKQorCSAgICAgIGJyZWFrOworCSAgZWxzZQorCSAgICB7CisJICAgICAgcHJpbnRmKCJjb2RlIGluYXR0ZW5kdVxuIik7CisJICAgICAgYnJsX2xhc3RpbmdfbWVzc2FnZSgiISB0cmFuc2ZlcnQgaW50ZXJyb21wdSIpOworCSAgICAgIHJldHVybiAxOworCSAgICB9CisJfQorICAgICAgc3ByaW50ZigoY2hhciopc3RyLCAiLi4uICVzICVkIiwgZmlsZW5hbWUsIGxpbmVzKTsKKyAgICAgIGJybF9tZXNzYWdlKChjaGFyKilzdHIsIDApOworICAgICAgd3JpdGUoZmQsICYoYnVmWzNdKSwgYnVmWzBdIC0gMik7CisgICAgICBsaW5lcysrOworICAgIH0KKyAgYnJsX3dyaXRlU3RyKENMT1NFX0ZJTEUpOworICBicmxfcmVhZChidWYpOworICBpZiAoc3RybmNtcCgoY2hhciopYnVmLCAiXDAwM0ZFXHgxMCIsIDQpKQorICAgIHsKKyAgICAgIGJybF9sYXN0aW5nX21lc3NhZ2UoIiEgZXJyZXVyIik7CisgICAgICByZXR1cm4gMTsKKyAgICB9CisgIHByaW50ZigiZmljaGllciBmZXJtw6lcbiIpOworICBjbG9zZShmZCk7CisgIGlmIChkZXN0ZXh0KQorICAgIHsKKyAgICAgIHN0cmNhdCgoY2hhciopZmlsZW5hbWUxLCAiLlRYVCIpOworICAgICAgaWYgKCFrMnR4dChlbnYsIChjaGFyKilmaWxlbmFtZSwgKGNoYXIqKWZpbGVuYW1lMSkpCisJeworCSAgYnJsX2xhc3RpbmdfbWVzc2FnZSgiISBFcnJldXIgY29udmVyc2lvbiIpOworCSAgcmV0dXJuIDE7CisJfQorICAgIH0KKyAgYnJsX2xhc3RpbmdfbWVzc2FnZSgiISBGaW4gdHJhbnNmZXJ0Iik7CisgIHJldHVybiAxOworfQorCisKKy8qCisqKiBXaGVuIHRoaXMgZnVuY3Rpb24gcmV0dXJucyA0MjQyLCBpdCdzIHRoZSBlbmQgb2YgZmlsZQorKiogT3RoZXJ3aXNlLCB0aGUgbGVuZ3RoIG9mIHRoZSB0cmFtZSBpcyByZXR1cm5lZC4KKyoqIFRoZSB0cmFtZSBpcyBmb3JtYXRlZCB0byBiZSBkaXJlY3RseSBzZW50IHRvIHRoZSBicmFpbGxlIHRlcm1pbmFsCisqLworc3RhdGljIHVuc2lnbmVkIGludAlyZWFkX3RyYW1lX2Zyb21fZmlsZSh0X2VudiogZW52LCB1bnNpZ25lZCBjaGFyKiByZXMsCisJCQkJCSAgICAgdW5zaWduZWQgaW50ICpzaXplKQoreworICB1bnNpZ25lZCBpbnQgcmV0dmFsID0gMDsKKyAgaW50IGNoOworICBpbnQgb2xkY2g7CisKKyAgKnNpemUgPSAwOworICByZXNbMV0gPSAnRic7CisgIHJlc1syXSA9ICdXJzsKKyAgb2xkY2ggPSBmZ2V0YyhlbnYtPmZzKTsKKyAgY2ggPSBmZ2V0YyhlbnYtPmZzKTsKKyAgKnNpemUgPSA0OworICByZXNbM10gPSBvbGRjaDsKKyAgcmVzWzRdID0gY2g7CisgIHdoaWxlICgoIShjaCA9PSAnJCcgJiYgb2xkY2ggPT0gJ1x4MUInKSkgJiYgKCEoY2ggPT0gJ0AnICYmIG9sZGNoID09ICdceDFCJykpICkKKyAgICB7CisgICAgICBvbGRjaCA9IGNoOworICAgICAgY2ggPSBmZ2V0YyhlbnYtPmZzKTsKKyAgICAgICgqc2l6ZSkrKzsKKyAgICAgIHJlc1sqc2l6ZV0gPSBjaDsKKyAgICB9CisgIGlmIChjaCA9PSAnQCcgJiYgb2xkY2ggPT0gJ1x4MUInKQorICAgIHsKKyAgICAgIHByaW50ZigiZmluIGR1IGZpY2hpZXIgZMOpdGVjdMOpZVxuIik7CisgICAgICByZXR2YWwgPSAxOworICAgIH0KKyAgcmVzWzBdID0gKnNpemU7CisgIHJldHVybiByZXR2YWw7Cit9CisKKworLyoKKyoqIFBDIHRvIEJSIG1ldGEtZnVuY3Rpb24KKyovCitpbnQJCXBjdG9icih0X2VudiogZW52KQoreworICBjaGFyIGVuZCA9IDA7CisgIGludCBpID0gMDsKKyAgdW5zaWduZWQgaW50IGNvdW50ID0gMDsKKyAgdW5zaWduZWQgY2hhciBjb252ID0gMDsKKyAgdW5zaWduZWQgaW50IGxpbmVzID0gMDsKKyAgdW5zaWduZWQgY2hhcgkJYnVmW0JVRkZFUl9TSVpFXTsgLyogcmVjZWl2ZWQgYnVmZmVyICovCisgIHVuc2lnbmVkIGNoYXIJc3RyW0JVRkZFUl9TSVpFXTsgIC8qIHNlbnQgYnVmZmVyICovCisgIGNoYXIqIHRtcGZpbGVuYW1lID0gIi90bXAvZXV0cC50bXAiOworCisgIGZvciAoaSA9IDA7IGkgPCBCVUZGRVJfU0laRTsgaSsrKQorICAgIHsKKyAgICAgIGJ1ZltpXSA9IDA7CisgICAgICBzdHJbaV0gPSAwOworICAgIH0KKyAgY29udiA9IG5vcm1hbGl6ZV9maWxlbmFtZShlbnYpOworICBpZiAoKGVudi0+ZmQgPSBvcGVuKGVudi0+bGlzdFtlbnYtPnBjZmlsZW51bV0tPmRfbmFtZSwgT19SRE9OTFkpKSA9PSAtMSkKKyAgICB7CisgICAgICBicmxfbWVzc2FnZSgiIUVycmV1ciBvdXYgcGMiLCAwKTsKKyAgICAgIHNsZWVwKDEpOworICAgICAgcmV0dXJuIDA7CisgICAgfQorICBlbnYtPmZzID0gZmRvcGVuKGVudi0+ZmQsICJyIik7CisgIC8qIE91dmVydHVyZSBmaWNoaWVyIGVuIMOpY3JpdHVyZSBzdXIgbGUgdGVybWluYWwgYnJhaWxsZSAqLworICBzdHJbMF0gPSAnXHgwQyc7CisgIHN0cm5jcHkoKGNoYXIqKSZzdHJbMV0sICJGb1x4MDAiLCAzKTsKKyAgc3RyWzRdID0gZW52LT5jdXJleHQ7CisgIHN0cm5jcHkoKGNoYXIqKSZzdHJbNV0sIGVudi0+ZmlsZW5hbWUsIDgpOworICBicmxfd3JpdGUoc3RyKzEsIDEyKTsKKyAgYnJsX3JlYWQoYnVmKTsKKyAgaWYgKCFzdHJuY21wKChjaGFyKilidWYsICJcMDAzRkVceDIxIiwgNCkpCisgICAgeworICAgICAgaWYgKGJybF95ZXNub19xdWVzdGlvbigiISBSZW1wbGFjZXIgPyAgICAgICMiKSkKKwkgIHN0clszXSA9IDE7CisgICAgICBlbHNlCisJcmV0dXJuIDE7CisgICAgICBicmxfd3JpdGUoc3RyKzEsIDEyKTsKKyAgICAgIGJybF9yZWFkKGJ1Zik7CisgICAgfQorICBpZiAoc3RybmNtcCgoY2hhciopYnVmLCAiXDAwMkZXIiwgMykpCisgICAgeworICAgICAgYnJsX2xhc3RpbmdfbWVzc2FnZSgiISBlcnJldXIgb3V2IGJyIik7CisgICAgICBicmxfd3JpdGVTdHIoQ0xPU0VfRklMRSk7CisgICAgICByZXR1cm4gMTsKKyAgICB9CisgIHdoaWxlICghZW5kKQorICAgIHsKKyAgICAgIGVuZCA9IHJlYWRfdHJhbWVfZnJvbV9maWxlKGVudiwgc3RyLCAmY291bnQpOworICAgICAgZm9yIChpID0gMDsgaSA8IDMwOyBpKyspCisJcHJpbnRmKCIsJWQsIiwgc3RyW2ldKTsKKyAgICAgIHByaW50ZigiXG4iKTsKKyAgICAgIGlmIChjb3VudCA9PSA0MjQyKSAvKiBmaW4gZmljaGllciAqLworCXsKKwkgIHByaW50ZigiZmluIGZpY2hpZXJcbiIpOworCSAgZW5kID0gMTsKKwl9CisgICAgICBicmxfd3JpdGUoc3RyKzEsIGNvdW50KTsKKyAgICAgIGJybF9yZWFkKGJ1Zik7CisgICAgICBpZiAoc3RybmNtcCgoY2hhciopYnVmLCAoY2hhciopIlwwMDJGVyIsIDMpKQorCXsKKwkgIHByaW50ZigiZXJyZXVyIHRyYW5zZmVydFxuIik7CisJICBmb3IgKGkgPSAwOyBpIDwgMzA7IGkrKykKKwkgICAgcHJpbnRmKCIsJWQsIiwgYnVmW2ldKTsKKwkgIHByaW50ZigiXG4iKTsKKwkgIGJybF9sYXN0aW5nX21lc3NhZ2UoIiEgRXJyZXVyIHRyYW5zZmVydCIpOworCSAgYnJsX3dyaXRlU3RyKENMT1NFX0ZJTEUpOworCSAgcmV0dXJuIDE7CisJfQorICAgICAgbGluZXMrKzsKKyAgICAgIHNwcmludGYoKGNoYXIqKXN0ciwgIi4uLiAlcy4lYyAlZCIsIGVudi0+ZmlsZW5hbWUsIGVudi0+Y3VyZXh0LCBsaW5lcyk7CisgICAgICBicmxfbWVzc2FnZSgoY2hhciopc3RyLCAwKTsKKyAgICB9CisgIGJybF93cml0ZVN0cihDTE9TRV9GSUxFKTsKKyAgYnJsX3JlYWQoYnVmKTsKKyAgaWYgKHN0cm5jbXAoKGNoYXIqKWJ1ZiwgIlwwMDNGRVx4MTAiLCA0KSkKKyAgICB7CisgICAgICBwcmludGYoImVycmVyIGZlcm1ldHVyZVxuIik7CisgICAgICBmb3IgKGkgPSAwOyBpIDwgMzA7IGkrKykKKwlwcmludGYoIiwlZCwiLCBidWZbaV0pOworICAgICAgcHJpbnRmKCJcbiIpOworICAgICAgYnJsX2xhc3RpbmdfbWVzc2FnZSgiISBlcnIgZmVybWV0dXJlIik7CisgICAgICBmY2xvc2UoZW52LT5mcyk7CisgICAgICBjbG9zZShlbnYtPmZkKTsKKyAgICAgIHJldHVybiAxOworICAgIH0KKyAgYnJsX21lc3NhZ2UoIiEgRmluIHRyYW5zZmVydCIsIDApOworICBzbGVlcCgxKTsKKyAgZmNsb3NlKGVudi0+ZnMpOworICBjbG9zZShlbnYtPmZkKTsKKyAgaWYgKGNvbnYpCisgICAgdW5saW5rKHRtcGZpbGVuYW1lKTsKKyAgcmV0dXJuIDE7Cit9CmRpZmYgLS1naXQgYS9Ecml2ZXJzL0JyYWlsbGUvRXVyb0JyYWlsbGUvZXV0cF90cmFuc2Zlci5oIGIvRHJpdmVycy9CcmFpbGxlL0V1cm9CcmFpbGxlL2V1dHBfdHJhbnNmZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YmQ5MThmCi0tLSAvZGV2L251bGwKKysrIGIvRHJpdmVycy9CcmFpbGxlL0V1cm9CcmFpbGxlL2V1dHBfdHJhbnNmZXIuaApAQCAtMCwwICsxLDE3IEBACisvKgorKiogdHJhbnNmZXIuaCBmb3IgZXV0cCBpbiAvaG9tZS9vYmVydDAxL3dvcmsvZXV0cC9zcmMKKyoqCisqKiBNYWRlIGJ5IE9saXZpZXIgQkVSVAorKiogTG9naW4gICA8b2JlcnQwMUBlcGl0YS5mcj4KKyoqCisqKiBTdGFydGVkIG9uICBTdW4gTWFyIDIwIDE2OjEwOjEyIDIwMDUgT2xpdmllciBCRVJUCisqKiBMYXN0IHVwZGF0ZSBUaHUgTWF5IDI2IDE0OjEwOjE4IDIwMDUgCisqLworCisjaWZuZGVmIF9fRVVUUF9UUkFOU0ZFUl9IXworI2RlZmluZSBfX0VVVFBfVFJBTlNGRVJfSF8KKworaW50CQlicnRvcGModF9lbnYqKTsKK2ludAkJcGN0b2JyKHRfZW52Kik7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvRHJpdmVycy9CcmFpbGxlL0ZyYW5rQXVkaW9kYXRhL01ha2VmaWxlLmluIGIvRHJpdmVycy9CcmFpbGxlL0ZyYW5rQXVkaW9kYXRhL01ha2VmaWxlLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMwODcwZjMKLS0tIC9kZXYvbnVsbAorKysgYi9Ecml2ZXJzL0JyYWlsbGUvRnJhbmtBdWRpb2RhdGEvTWFrZWZpbGUuaW4KQEAgLTAsMCArMSwyOCBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorIyAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyMKKyMgQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorIworIyBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorIworIyBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisjIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyMgbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisjCisjIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK0RSSVZFUl9DT0RFID0gZmEKK0RSSVZFUl9OQU1FID0gRnJhbmtBdWRpb2RhdGEKK0RSSVZFUl9VU0FHRSA9IEIySzg0CitEUklWRVJfVkVSU0lPTiA9IAorRFJJVkVSX0RFVkVMT1BFUlMgPSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+CitpbmNsdWRlICQoU1JDX1RPUClicmFpbGxlLm1rCisKK2JyYWlsbGUuJE86CisJJChDQykgJChCUkxfQ0ZMQUdTKSAtYyAkKFNSQ19ESVIpL2JyYWlsbGUuYworCmRpZmYgLS1naXQgYS9Ecml2ZXJzL0JyYWlsbGUvRnJhbmtBdWRpb2RhdGEvYnJhaWxsZS5jIGIvRHJpdmVycy9CcmFpbGxlL0ZyYW5rQXVkaW9kYXRhL2JyYWlsbGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NWE4ZGM1Ci0tLSAvZGV2L251bGwKKysrIGIvRHJpdmVycy9CcmFpbGxlL0ZyYW5rQXVkaW9kYXRhL2JyYWlsbGUuYwpAQCAtMCwwICsxLDQwOCBAQAorLyoKKyAqIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisgKiAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisgKgorICogQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKKyNpbmNsdWRlICJwcm9sb2d1ZS5oIgorCisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKworI2luY2x1ZGUgImxvZy5oIgorI2luY2x1ZGUgImlvX2dlbmVyaWMuaCIKKyNpbmNsdWRlICJpb191c2IuaCIKKyNpbmNsdWRlICJlenVzYi5oIgorCisjZGVmaW5lIEJSTF9TVEFUVVNfRklFTERTIHNmQ3Vyc29yQ29vcmRpbmF0ZXMyLCBzZldpbmRvd0Nvb3JkaW5hdGVzMgorI2RlZmluZSBCUkxfSEFWRV9TVEFUVVNfQ0VMTFMKKyNpbmNsdWRlICJicmxfZHJpdmVyLmgiCisjaW5jbHVkZSAiYnJsZGVmcy1mYS5oIgorCisjZGVmaW5lIFBST0JFX1JFVFJZX0xJTUlUIDIKKyNkZWZpbmUgUFJPQkVfSU5QVVRfVElNRU9VVCAxMDAwCisKKyNkZWZpbmUgTUFYSU1VTV9SRVNQT05TRV9TSVpFIDBYMjAKKyNkZWZpbmUgV1JJVEVfQ0VMTFNfTElNSVQgNjIKKworI2RlZmluZSBURVhUX0NFTExfQ09VTlQgODAKKyNkZWZpbmUgU1RBVFVTX0NFTExfQ09VTlQgNAorCitCRUdJTl9LRVlfTkFNRV9UQUJMRShuYXZpZ2F0aW9uKQorICBCUkxfS0VZX05BTUVfRU5UUlkoRkEsIE5BViwgSzEsICJLMSIpLAorICBCUkxfS0VZX05BTUVfRU5UUlkoRkEsIE5BViwgSzIsICJLMiIpLAorICBCUkxfS0VZX05BTUVfRU5UUlkoRkEsIE5BViwgSzMsICJLMyIpLAorCisgIEJSTF9LRVlfTkFNRV9FTlRSWShGQSwgTkFWLCBLNCwgIks0IiksCisgIEJSTF9LRVlfTkFNRV9FTlRSWShGQSwgTkFWLCBLNSwgIks1IiksCisgIEJSTF9LRVlfTkFNRV9FTlRSWShGQSwgTkFWLCBLNiwgIks2IiksCisKKyAgQlJMX0tFWV9OQU1FX0VOVFJZKEZBLCBOQVYsIEs3LCAiSzciKSwKKyAgQlJMX0tFWV9OQU1FX0VOVFJZKEZBLCBOQVYsIEs4LCAiSzgiKSwKKyAgQlJMX0tFWV9OQU1FX0VOVFJZKEZBLCBOQVYsIEs5LCAiSzkiKSwKKworICBCUkxfS0VZX05BTUVfRU5UUlkoRkEsIE5BViwgRjEsICJGMSIpLAorICBCUkxfS0VZX05BTUVfRU5UUlkoRkEsIE5BViwgRjIsICJGMiIpLAorICBCUkxfS0VZX05BTUVfRU5UUlkoRkEsIE5BViwgRjMsICJGMyIpLAorCisgIEJSTF9LRVlfTkFNRV9FTlRSWShGQSwgTkFWLCBGNCwgIkY0IiksCisgIEJSTF9LRVlfTkFNRV9FTlRSWShGQSwgTkFWLCBGNSwgIkY1IiksCisgIEJSTF9LRVlfTkFNRV9FTlRSWShGQSwgTkFWLCBGNiwgIkY2IiksCisKKyAgQlJMX0tFWV9HUk9VUF9FTlRSWShGQSwgUk9VVEUsICJSb3V0aW5nS2V5IiksCisgIEJSTF9LRVlfR1JPVVBfRU5UUlkoRkEsIFNMSURFLCAiU2xpZGVyIiksCitFTkRfS0VZX05BTUVfVEFCTEUKKworQkVHSU5fS0VZX05BTUVfVEFCTEVTKGFsbCkKKyAgS0VZX05BTUVfVEFCTEUobmF2aWdhdGlvbiksCitFTkRfS0VZX05BTUVfVEFCTEVTCisKK0RFRklORV9LRVlfVEFCTEUoYWxsKQorCitCRUdJTl9LRVlfVEFCTEVfTElTVAorICAmS0VZX1RBQkxFX0RFRklOSVRJT04oYWxsKSwKK0VORF9LRVlfVEFCTEVfTElTVAorCit0eXBlZGVmIHN0cnVjdCB7CisgIGludCAoKnByZXBhcmUpIChCcmFpbGxlRGlzcGxheSAqYnJsKTsKK30gUHJvZHVjdEVudHJ5OworCit0eXBlZGVmIHN0cnVjdCB7CisgIHNpemVfdCBsZW5ndGg7CisgIHVuc2lnbmVkIGNoYXIgYnVmZmVyWzhdOworfSBEZXZpY2VSZXNwb25zZTsKKworc3RydWN0IEJyYWlsbGVEYXRhU3RydWN0IHsKKyAgY29uc3QgUHJvZHVjdEVudHJ5ICpwcm9kdWN0OworCisgIHN0cnVjdCB7CisgICAgS2V5TnVtYmVyU2V0IG5hdmlnYXRpb247CisgICAgdW5zaWduZWQgY2hhciByb3V0aW5nW1RFWFRfQ0VMTF9DT1VOVCAvIDhdOworICB9IGtleXM7CisKKyAgc3RydWN0IHsKKyAgICB1bnNpZ25lZCBjaGFyIHJld3JpdGU7CisgICAgdW5zaWduZWQgY2hhciBjZWxsc1tURVhUX0NFTExfQ09VTlRdOworICB9IHRleHQ7CisKKyAgc3RydWN0IHsKKyAgICB1bnNpZ25lZCBjaGFyIHJld3JpdGU7CisgICAgdW5zaWduZWQgY2hhciBjZWxsc1tTVEFUVVNfQ0VMTF9DT1VOVF07CisgIH0gc3RhdHVzOworCisgIHN0cnVjdCB7CisgICAgRGV2aWNlUmVzcG9uc2UgcmVzcG9uc2UxOworICAgIERldmljZVJlc3BvbnNlIHNlcmlhbE51bWJlclsyXTsKKyAgICBEZXZpY2VSZXNwb25zZSByZXNwb25zZTQ7CisgICAgRGV2aWNlUmVzcG9uc2UgcmVzcG9uc2U1OworICAgIERldmljZVJlc3BvbnNlIHJlc3BvbnNlNjsKKyAgICBEZXZpY2VSZXNwb25zZSByZXNwb25zZTc7CisgICAgRGV2aWNlUmVzcG9uc2UgcmVzcG9uc2U4OworICB9IGRldmljZTsKK307CisKK3N0YXRpYyBVc2JEZXZpY2UgKgorZ2V0RGV2aWNlIChCcmFpbGxlRGlzcGxheSAqYnJsKSB7CisgIFVzYkNoYW5uZWwgKmNoYW5uZWwgPSBnaW9HZXRSZXNvdXJjZU9iamVjdChicmwtPmdpb0VuZHBvaW50KTsKKyAgcmV0dXJuIGNoYW5uZWwtPmRldmljZTsKK30KKworc3RhdGljIGludAoraW5zdGFsbFN0YWdlIChVc2JEZXZpY2UgKmRldmljZSwgdW5zaWduZWQgaW50IHN0YWdlLCBFenVzYkFjdGlvbiBhY3Rpb24pIHsKKyAgY2hhciBuYW1lWzBYNDBdOworCisgIHNucHJpbnRmKAorICAgIG5hbWUsIHNpemVvZihuYW1lKSwgIiVzLWJmYS1zdGFnZSV1IiwKKyAgICBQQUNLQUdFX1RBUk5BTUUsIHN0YWdlCisgICk7CisKKyAgcmV0dXJuIGV6dXNiSW5zdGFsbEJsb2IoZGV2aWNlLCBuYW1lLCBhY3Rpb24pOworfQorCitzdGF0aWMgaW50CitpbnN0YWxsRmlybXdhcmUgKEJyYWlsbGVEaXNwbGF5ICpicmwpIHsKKyAgVXNiRGV2aWNlICpkZXZpY2UgPSBnZXREZXZpY2UoYnJsKTsKKworICBpZiAoIWV6dXNiU3RvcENQVShkZXZpY2UpKSByZXR1cm4gMDsKKyAgaWYgKCFpbnN0YWxsU3RhZ2UoZGV2aWNlLCAxLCBFWlVTQl9BQ1RJT05fUldfSU5URVJOQUwpKSByZXR1cm4gMDsKKworICBpZiAoIWV6dXNiUmVzZXRDUFUoZGV2aWNlKSkgcmV0dXJuIDA7CisgIGlmICghaW5zdGFsbFN0YWdlKGRldmljZSwgMiwgRVpVU0JfQUNUSU9OX1JXX01FTU9SWSkpIHJldHVybiAwOworCisgIGlmICghZXp1c2JTdG9wQ1BVKGRldmljZSkpIHJldHVybiAwOworICBpZiAoIWluc3RhbGxTdGFnZShkZXZpY2UsIDMsIEVaVVNCX0FDVElPTl9SV19JTlRFUk5BTCkpIHJldHVybiAwOworCisgIGlmICghZXp1c2JSZXNldENQVShkZXZpY2UpKSByZXR1cm4gMDsKKyAgcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQKK3ByZXBhcmUxMDE2IChCcmFpbGxlRGlzcGxheSAqYnJsKSB7CisgIGlmICghaW5zdGFsbEZpcm13YXJlKGJybCkpIHJldHVybiAwOworICByZXR1cm4gMDsgLy8gZm9yY2UgYSByZXRyeSAtIHRoZSBwcm9kdWN0IElEIHNob3VsZCBub3cgYmUgMFgxMDE3Cit9CisKK3N0YXRpYyBjb25zdCBQcm9kdWN0RW50cnkgcHJvZHVjdEVudHJ5XzEwMTYgPSB7CisgIC5wcmVwYXJlID0gcHJlcGFyZTEwMTYsCit9OworCitzdGF0aWMgaW50Cithc2tEZXZpY2UgKFVzYkRldmljZSAqZGV2aWNlLCB1aW50MTZfdCB2YWx1ZSwgdWludDE2X3QgaW5kZXgsIERldmljZVJlc3BvbnNlICp2YWx1ZXMpIHsKKyAgc3NpemVfdCByZXN1bHQgPSB1c2JDb250cm9sUmVhZCgKKyAgICBkZXZpY2UsIFVzYkNvbnRyb2xSZWNpcGllbnRfRGV2aWNlLCBVc2JDb250cm9sVHlwZV9WZW5kb3IsCisgICAgMFhDMCwgdmFsdWUsIGluZGV4LAorICAgIHZhbHVlcy0+YnVmZmVyLCBzaXplb2YodmFsdWVzLT5idWZmZXIpLCAxMDAwCisgICk7CisKKyAgaWYgKHJlc3VsdCA9PSAtMSkgcmV0dXJuIDA7CisgIHZhbHVlcy0+bGVuZ3RoID0gcmVzdWx0OworCisgIGxvZ0J5dGVzKExPR19DQVRFR09SWShCUkFJTExFX0RSSVZFUiksCisgICAgInJlc3BvbnNlOiAlMDRYICUwNFgiLAorICAgIHZhbHVlcy0+YnVmZmVyLCB2YWx1ZXMtPmxlbmd0aCwgdmFsdWUsIGluZGV4CisgICk7CisKKyAgcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQKK3ByZXBhcmUxMDE3IChCcmFpbGxlRGlzcGxheSAqYnJsKSB7CisgIFVzYkRldmljZSAqZGV2aWNlID0gZ2V0RGV2aWNlKGJybCk7CisKKyAgaWYgKCFhc2tEZXZpY2UoZGV2aWNlLCAwWDAwMDAsIDBYMDAwMSwgJmJybC0+ZGF0YS0+ZGV2aWNlLnJlc3BvbnNlMSkpIHJldHVybiAwOworICBpZiAoIWFza0RldmljZShkZXZpY2UsIDBYMDAwMSwgMFgwMDAwLCAmYnJsLT5kYXRhLT5kZXZpY2Uuc2VyaWFsTnVtYmVyWzBdKSkgcmV0dXJuIDA7CisgIGlmICghYXNrRGV2aWNlKGRldmljZSwgMFgwMDAxLCAwWDAwMDEsICZicmwtPmRhdGEtPmRldmljZS5zZXJpYWxOdW1iZXJbMV0pKSByZXR1cm4gMDsKKyAgaWYgKCFhc2tEZXZpY2UoZGV2aWNlLCAwWDAwMDEsIDBYMDAwMiwgJmJybC0+ZGF0YS0+ZGV2aWNlLnJlc3BvbnNlNCkpIHJldHVybiAwOworICBpZiAoIWFza0RldmljZShkZXZpY2UsIDBYMDAwMSwgMFgwMDA0LCAmYnJsLT5kYXRhLT5kZXZpY2UucmVzcG9uc2U1KSkgcmV0dXJuIDA7CisgIGlmICghYXNrRGV2aWNlKGRldmljZSwgMFgwMDAxLCAwWDAwMDUsICZicmwtPmRhdGEtPmRldmljZS5yZXNwb25zZTYpKSByZXR1cm4gMDsKKyAgaWYgKCFhc2tEZXZpY2UoZGV2aWNlLCAwWDAwMDEsIDBYMDAwNiwgJmJybC0+ZGF0YS0+ZGV2aWNlLnJlc3BvbnNlNykpIHJldHVybiAwOworICBpZiAoIWFza0RldmljZShkZXZpY2UsIDBYMDAwMSwgMFgwMDA3LCAmYnJsLT5kYXRhLT5kZXZpY2UucmVzcG9uc2U4KSkgcmV0dXJuIDA7CisKKyAgcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBjb25zdCBQcm9kdWN0RW50cnkgcHJvZHVjdEVudHJ5XzEwMTcgPSB7CisgIC5wcmVwYXJlID0gcHJlcGFyZTEwMTcsCit9OworCitzdGF0aWMgaW50Cit3cml0ZUJ5dGVzIChCcmFpbGxlRGlzcGxheSAqYnJsLCBjb25zdCB1bnNpZ25lZCBjaGFyICpieXRlcywgc2l6ZV90IGNvdW50KSB7CisgIHJldHVybiB3cml0ZUJyYWlsbGVQYWNrZXQoYnJsLCBOVUxMLCBieXRlcywgY291bnQpOworfQorCitzdGF0aWMgQnJhaWxsZVBhY2tldFZlcmlmaWVyUmVzdWx0Cit2ZXJpZnlQYWNrZXQgKAorICBCcmFpbGxlRGlzcGxheSAqYnJsLAorICB1bnNpZ25lZCBjaGFyICpieXRlcywgc2l6ZV90IHNpemUsCisgIHNpemVfdCAqbGVuZ3RoLCB2b2lkICpkYXRhCispIHsKKyAgdW5zaWduZWQgY2hhciBieXRlID0gYnl0ZXNbc2l6ZS0xXTsKKworICBzd2l0Y2ggKHNpemUpIHsKKyAgICBjYXNlIDE6IHsKKyAgICAgIHN3aXRjaCAoYnl0ZSkgeworICAgICAgICBjYXNlIEZBX1BLVF9TTElERVI6CisgICAgICAgICAgKmxlbmd0aCArPSAzOworICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgRkFfUEtUX05BVjoKKyAgICAgICAgICAqbGVuZ3RoICs9IDQ7CisgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBGQV9QS1RfUk9VVEU6CisgICAgICAgICAgKmxlbmd0aCArPSBBUlJBWV9DT1VOVChicmwtPmRhdGEtPmtleXMucm91dGluZyk7CisgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICByZXR1cm4gQlJMX1BWUl9JTlZBTElEOworICAgICAgfQorCisgICAgICBicmVhazsKKyAgICB9CisKKyAgICBkZWZhdWx0OgorICAgICAgYnJlYWs7CisgIH0KKworICByZXR1cm4gQlJMX1BWUl9JTkNMVURFOworfQorCitzdGF0aWMgc2l6ZV90CityZWFkUGFja2V0IChCcmFpbGxlRGlzcGxheSAqYnJsLCB2b2lkICpwYWNrZXQsIHNpemVfdCBzaXplKSB7CisgIHJldHVybiByZWFkQnJhaWxsZVBhY2tldChicmwsIE5VTEwsIHBhY2tldCwgc2l6ZSwgdmVyaWZ5UGFja2V0LCBOVUxMKTsKK30KKworc3RhdGljIGludAorY29ubmVjdFJlc291cmNlIChCcmFpbGxlRGlzcGxheSAqYnJsLCBjb25zdCBjaGFyICppZGVudGlmaWVyKSB7CisgIEJFR0lOX1VTQl9DSEFOTkVMX0RFRklOSVRJT05TCisgICAgeyAvKiBCMks4NCAoYmVmb3JlIGZpcm13YXJlIGluc3RhbGxhdGlvbikgKi8KKyAgICAgIC52ZW5kb3I9MFgwOTA0LCAucHJvZHVjdD0wWDEwMTYsCisgICAgICAuY29uZmlndXJhdGlvbj0xLCAuaW50ZXJmYWNlPTAsIC5hbHRlcm5hdGl2ZT0wLAorICAgICAgLmRhdGEgPSAmcHJvZHVjdEVudHJ5XzEwMTYKKyAgICB9LAorCisgICAgeyAvKiBCMks4NCAoYWZ0ZXIgZmlybXdhcmUgaW5zdGFsbGF0aW9uKSAqLworICAgICAgLnZlbmRvcj0wWDA5MDQsIC5wcm9kdWN0PTBYMTAxNywKKyAgICAgIC5jb25maWd1cmF0aW9uPTEsIC5pbnRlcmZhY2U9MCwgLmFsdGVybmF0aXZlPTAsCisgICAgICAuaW5wdXRFbmRwb2ludD0xLCAub3V0cHV0RW5kcG9pbnQ9MiwKKyAgICAgIC5kYXRhID0gJnByb2R1Y3RFbnRyeV8xMDE3CisgICAgfSwKKyAgRU5EX1VTQl9DSEFOTkVMX0RFRklOSVRJT05TCisKKyAgR2lvRGVzY3JpcHRvciBkZXNjcmlwdG9yOworICBnaW9Jbml0aWFsaXplRGVzY3JpcHRvcigmZGVzY3JpcHRvcik7CisKKyAgZGVzY3JpcHRvci51c2IuY2hhbm5lbERlZmluaXRpb25zID0gdXNiQ2hhbm5lbERlZmluaXRpb25zOworCisgIGlmIChjb25uZWN0QnJhaWxsZVJlc291cmNlKGJybCwgaWRlbnRpZmllciwgJmRlc2NyaXB0b3IsIE5VTEwpKSB7CisgICAgYnJsLT5kYXRhLT5wcm9kdWN0ID0gZ2lvR2V0QXBwbGljYXRpb25EYXRhKGJybC0+Z2lvRW5kcG9pbnQpOworICAgIGlmIChicmwtPmRhdGEtPnByb2R1Y3QtPnByZXBhcmUoYnJsKSkgcmV0dXJuIDE7CisgICAgZGlzY29ubmVjdEJyYWlsbGVSZXNvdXJjZShicmwsIE5VTEwpOworICB9CisKKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK2JybF9jb25zdHJ1Y3QgKEJyYWlsbGVEaXNwbGF5ICpicmwsIGNoYXIgKipwYXJhbWV0ZXJzLCBjb25zdCBjaGFyICpkZXZpY2UpIHsKKyAgaWYgKChicmwtPmRhdGEgPSBtYWxsb2Moc2l6ZW9mKCpicmwtPmRhdGEpKSkpIHsKKyAgICBtZW1zZXQoYnJsLT5kYXRhLCAwLCBzaXplb2YoKmJybC0+ZGF0YSkpOworCisgICAgaWYgKGNvbm5lY3RSZXNvdXJjZShicmwsIGRldmljZSkpIHsKKyAgICAgIHNldEJyYWlsbGVLZXlUYWJsZShicmwsICZLRVlfVEFCTEVfREVGSU5JVElPTihhbGwpKTsKKyAgICAgIG1ha2VPdXRwdXRUYWJsZShkb3RzVGFibGVfSVNPMTE1NDhfMSk7CisKKyAgICAgIGJybC0+dGV4dENvbHVtbnMgPSBURVhUX0NFTExfQ09VTlQ7CisgICAgICBicmwtPnN0YXR1c0NvbHVtbnMgPSBTVEFUVVNfQ0VMTF9DT1VOVDsKKworICAgICAgYnJsLT5kYXRhLT5rZXlzLm5hdmlnYXRpb24gPSAwOworICAgICAgYnJsLT5kYXRhLT50ZXh0LnJld3JpdGUgPSAxOworICAgICAgYnJsLT5kYXRhLT5zdGF0dXMucmV3cml0ZSA9IDE7CisKKyAgICAgIHJldHVybiAxOworICAgIH0KKworICAgIGZyZWUoYnJsLT5kYXRhKTsKKyAgfSBlbHNlIHsKKyAgICBsb2dNYWxsb2NFcnJvcigpOworICB9CisKKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkCiticmxfZGVzdHJ1Y3QgKEJyYWlsbGVEaXNwbGF5ICpicmwpIHsKKyAgZGlzY29ubmVjdEJyYWlsbGVSZXNvdXJjZShicmwsIE5VTEwpOworCisgIGlmIChicmwtPmRhdGEpIHsKKyAgICBmcmVlKGJybC0+ZGF0YSk7CisgICAgYnJsLT5kYXRhID0gTlVMTDsKKyAgfQorfQorCitzdGF0aWMgaW50Cit3cml0ZUNlbGxzIChCcmFpbGxlRGlzcGxheSAqYnJsLCBjb25zdCB1bnNpZ25lZCBjaGFyICpjZWxscywgdW5zaWduZWQgaW50IGZyb20sIHVuc2lnbmVkIGludCB0bywgdW5zaWduZWQgaW50IG9mZnNldCkgeworICB1bnNpZ25lZCBjaGFyIHBhY2tldFsxICsgKHRvIC0gZnJvbSldOworCisgIHdoaWxlIChmcm9tIDwgdG8pIHsKKyAgICB1bnNpZ25lZCBjaGFyICpieXRlID0gcGFja2V0OworICAgIHVuc2lnbmVkIGludCBjb3VudCA9IHRvIC0gZnJvbTsKKyAgICBjb3VudCA9IE1JTihjb3VudCwgV1JJVEVfQ0VMTFNfTElNSVQpOworCisgICAgKmJ5dGUrKyA9IGZyb20gKyBvZmZzZXQ7CisgICAgYnl0ZSA9IG1lbXBjcHkoYnl0ZSwgY2VsbHMsIGNvdW50KTsKKyAgICBpZiAoIXdyaXRlQnl0ZXMoYnJsLCBwYWNrZXQsIChieXRlIC0gcGFja2V0KSkpIHJldHVybiAwOworCisgICAgZnJvbSArPSBjb3VudDsKKyAgICBjZWxscyArPSBjb3VudDsKKyAgfQorCisgIHJldHVybiAxOworfQorCitzdGF0aWMgaW50Citicmxfd3JpdGVTdGF0dXMgKEJyYWlsbGVEaXNwbGF5ICpicmwsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmNlbGxzKSB7CisgIHVuc2lnbmVkIGludCBmcm9tLCB0bzsKKworICBpZiAoY2VsbHNIYXZlQ2hhbmdlZChicmwtPmRhdGEtPnN0YXR1cy5jZWxscywgY2VsbHMsIGJybC0+c3RhdHVzQ29sdW1ucywKKyAgICAgICAgICAgICAgICAgICAgICAgJmZyb20sICZ0bywgJmJybC0+ZGF0YS0+c3RhdHVzLnJld3JpdGUpKSB7CisgICAgaWYgKCF3cml0ZUNlbGxzKGJybCwgJmNlbGxzW2Zyb21dLCBmcm9tLCB0bywgMCkpIHsKKyAgICAgIHJldHVybiAwOworICAgIH0KKyAgfQorCisgIHJldHVybiAxOworfQorCitzdGF0aWMgaW50Citicmxfd3JpdGVXaW5kb3cgKEJyYWlsbGVEaXNwbGF5ICpicmwsIGNvbnN0IHdjaGFyX3QgKnRleHQpIHsKKyAgdW5zaWduZWQgaW50IGZyb20sIHRvOworCisgIGlmIChjZWxsc0hhdmVDaGFuZ2VkKGJybC0+ZGF0YS0+dGV4dC5jZWxscywgYnJsLT5idWZmZXIsIGJybC0+dGV4dENvbHVtbnMsCisgICAgICAgICAgICAgICAgICAgICAgICZmcm9tLCAmdG8sICZicmwtPmRhdGEtPnRleHQucmV3cml0ZSkpIHsKKyAgICBzaXplX3QgY291bnQgPSB0byAtIGZyb207CisgICAgdW5zaWduZWQgY2hhciBjZWxsc1tjb3VudF07CisKKyAgICB0cmFuc2xhdGVPdXRwdXRDZWxscyhjZWxscywgJmJybC0+ZGF0YS0+dGV4dC5jZWxsc1tmcm9tXSwgY291bnQpOworICAgIGlmICghd3JpdGVDZWxscyhicmwsIGNlbGxzLCBmcm9tLCB0bywgU1RBVFVTX0NFTExfQ09VTlQpKSByZXR1cm4gMDsKKyAgfQorCisgIHJldHVybiAxOworfQorCitzdGF0aWMgaW50CiticmxfcmVhZENvbW1hbmQgKEJyYWlsbGVEaXNwbGF5ICpicmwsIEtleVRhYmxlQ29tbWFuZENvbnRleHQgY29udGV4dCkgeworICB1bnNpZ25lZCBjaGFyIHBhY2tldFtNQVhJTVVNX1JFU1BPTlNFX1NJWkVdOworICBzaXplX3Qgc2l6ZTsKKworICB3aGlsZSAoKHNpemUgPSByZWFkUGFja2V0KGJybCwgcGFja2V0LCBzaXplb2YocGFja2V0KSkpKSB7CisgICAgc3dpdGNoIChwYWNrZXRbMF0pIHsKKyAgICAgIGNhc2UgRkFfUEtUX05BVjogeworICAgICAgICBLZXlOdW1iZXJTZXQga2V5cyA9IChwYWNrZXRbMV0gPDwgIDApCisgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKHBhY2tldFsyXSA8PCAgOCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgfCAocGFja2V0WzNdIDw8IDE2KQorICAgICAgICAgICAgICAgICAgICAgICAgICB8IChwYWNrZXRbNF0gPDwgMjQpCisgICAgICAgICAgICAgICAgICAgICAgICAgIDsKKworICAgICAgICBlbnF1ZXVlVXBkYXRlZEtleXMoYnJsLCBrZXlzLCAmYnJsLT5kYXRhLT5rZXlzLm5hdmlnYXRpb24sIEZBX0dSUF9OQVYsIDApOworICAgICAgICBjb250aW51ZTsKKyAgICAgIH0KKworICAgICAgY2FzZSBGQV9QS1RfUk9VVEU6IHsKKyAgICAgICAgZW5xdWV1ZVVwZGF0ZWRLZXlHcm91cCgKKyAgICAgICAgICBicmwsIFRFWFRfQ0VMTF9DT1VOVCwKKyAgICAgICAgICAmcGFja2V0WzFdLCBicmwtPmRhdGEtPmtleXMucm91dGluZywKKyAgICAgICAgICBGQV9HUlBfUk9VVEUKKyAgICAgICAgKTsKKworICAgICAgICBjb250aW51ZTsKKyAgICAgIH0KKworICAgICAgY2FzZSBGQV9QS1RfU0xJREVSOiB7CisJaW50IHZhbHVlID0gKHBhY2tldFsyXSAqIDBYRkYpIC8gMFhGNDsKKyAgICAgICAgdmFsdWUgPSBNSU4odmFsdWUsIDBYRkYpOworICAgICAgICBlbnF1ZXVlS2V5KGJybCwgRkFfR1JQX1NMSURFLCB2YWx1ZSk7CisgICAgICAgIGNvbnRpbnVlOworICAgICAgfQorCisgICAgICBkZWZhdWx0OgorICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBsb2dVbmV4cGVjdGVkUGFja2V0KHBhY2tldCwgc2l6ZSk7CisgIH0KKworICByZXR1cm4gKGVycm5vID09IEVBR0FJTik/IEVPRjogQlJMX0NNRF9SRVNUQVJUQlJMOworfQpkaWZmIC0tZ2l0IGEvRHJpdmVycy9CcmFpbGxlL0ZyYW5rQXVkaW9kYXRhL2JybGRlZnMtZmEuaCBiL0RyaXZlcnMvQnJhaWxsZS9GcmFua0F1ZGlvZGF0YS9icmxkZWZzLWZhLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmQxNWVkMAotLS0gL2Rldi9udWxsCisrKyBiL0RyaXZlcnMvQnJhaWxsZS9GcmFua0F1ZGlvZGF0YS9icmxkZWZzLWZhLmgKQEAgLTAsMCArMSw1NiBAQAorLyoKKyAqIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisgKiAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisgKgorICogQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKKyNpZm5kZWYgQlJMVFRZX0lOQ0xVREVEX0ZBX0JSTERFRlMKKyNkZWZpbmUgQlJMVFRZX0lOQ0xVREVEX0ZBX0JSTERFRlMKKwordHlwZWRlZiBlbnVtIHsKKyAgRkFfUEtUX1NMSURFUiA9IDIsCisgIEZBX1BLVF9OQVYgPSA4LAorICBGQV9QS1RfUk9VVEUgPSA5LAorfSBGQV9QYWNrZXRUeXBlOworCit0eXBlZGVmIGVudW0geworICBGQV9OQVZfSzEgPSAyLAorICBGQV9OQVZfSzIgPSAxLAorICBGQV9OQVZfSzMgPSAwLAorCisgIEZBX05BVl9LNCA9IDgsCisgIEZBX05BVl9LNSA9IDksCisgIEZBX05BVl9LNiA9IDEwLAorCisgIEZBX05BVl9LNyA9IDMsCisgIEZBX05BVl9LOCA9IDQsCisgIEZBX05BVl9LOSA9IDUsCisKKyAgRkFfTkFWX0YxID0gMTgsCisgIEZBX05BVl9GMiA9IDE3LAorICBGQV9OQVZfRjMgPSAxNiwKKworICBGQV9OQVZfRjQgPSAxOSwKKyAgRkFfTkFWX0Y1ID0gMjAsCisgIEZBX05BVl9GNiA9IDIxLAorfSBGQV9OYXZpZ2F0aW9uS2V5OworCit0eXBlZGVmIGVudW0geworICBGQV9HUlBfTkFWLAorICBGQV9HUlBfUk9VVEUsCisgIEZBX0dSUF9TTElERSwKK30gRkFfS2V5R3JvdXA7CisKKyNlbmRpZiAvKiBCUkxUVFlfSU5DTFVERURfRkFfQlJMREVGUyAqLwpkaWZmIC0tZ2l0IGEvRHJpdmVycy9CcmFpbGxlL0ZyZWVkb21TY2llbnRpZmljL01ha2VmaWxlLmluIGIvRHJpdmVycy9CcmFpbGxlL0ZyZWVkb21TY2llbnRpZmljL01ha2VmaWxlLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVjNmYyMTYKLS0tIC9kZXYvbnVsbAorKysgYi9Ecml2ZXJzL0JyYWlsbGUvRnJlZWRvbVNjaWVudGlmaWMvTWFrZWZpbGUuaW4KQEAgLTAsMCArMSwyOCBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorIyAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyMKKyMgQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorIworIyBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorIworIyBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisjIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyMgbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisjCisjIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK0RSSVZFUl9DT0RFID0gZnMKK0RSSVZFUl9OQU1FID0gRnJlZWRvbVNjaWVudGlmaWMKK0RSSVZFUl9VU0FHRSA9IEZvY3VzIDEgNDQvNzAvODQsIEZvY3VzIDIgNDAvODAsIEZvY3VzIDMrIChCbHVlKSAxNC80MC84MCwgUEFDIE1hdGUgMjAvNDAKK0RSSVZFUl9WRVJTSU9OID0gCitEUklWRVJfREVWRUxPUEVSUyA9IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4KK2luY2x1ZGUgJChTUkNfVE9QKWJyYWlsbGUubWsKKworYnJhaWxsZS4kTzoKKwkkKENDKSAkKEJSTF9DRkxBR1MpIC1jICQoU1JDX0RJUikvYnJhaWxsZS5jCisKZGlmZiAtLWdpdCBhL0RyaXZlcnMvQnJhaWxsZS9GcmVlZG9tU2NpZW50aWZpYy9SRUFETUUgYi9Ecml2ZXJzL0JyYWlsbGUvRnJlZWRvbVNjaWVudGlmaWMvUkVBRE1FCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk1YzdkZTQKLS0tIC9kZXYvbnVsbAorKysgYi9Ecml2ZXJzL0JyYWlsbGUvRnJlZWRvbVNjaWVudGlmaWMvUkVBRE1FCkBAIC0wLDAgKzEsNDAgQEAKK1RoaXMgZGlyZWN0b3J5IGNvbnRhaW5zIHRoZSBCUkxUVFkgZHJpdmVyIGZvciB0aGUgRm9jdXMgYW5kIFBBQyBNYXRlIGJyYWlsbGUKK2Rpc3BsYXlzIGZyb20gRnJlZWRvbSBTY2llbnRpZmljIFtodHRwOi8vd3d3LmZyZWVkb21zY2llbnRpZmljLmNvbV0uIEl0IGhhcworYmVlbiBpbXBsZW1lbnRlZCwgYW5kIGlzIGJlaW5nIG1haW50YWluZWQsIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisKK1RoZSBtb3N0IGltcG9ydGFudCBzaW5nbGUgY29tbWFuZCBpcyB0aGUgb25lIHRvIGFjY2VzcyB0aGUgaGVscCBzY3JlZW4uIE9uIHRoZQorUEFDIE1hdGUgZGlzcGxheSB0aGlzIGlzIHRoZSBrZXkganVzdCB0byB0aGUgcmlnaHQgb2YgdGhlIGNlbnRlciBtYXJrZXIgKGFsc28KK3JlZmVycmVkIHRvIGFzIEhLNSBiZWxvdykuIE9uIHRoZSBGb2N1cywgdGhpcyBpcyBjaG9yZCBIIChTcGFjZStEb3RzMTI1KS4KKworU2VyaWFsLCBVU0IsIGFuZCBCbHVldG9vdGggYXJlIGFsbCBzdXBwb3J0ZWQuIFRoZSBmb2xsb3dpbmcgbW9kZWxzIGFyZSAKK3JlY29nbml6ZWQ6CisqICBGb2N1cyAxOiA0NCwgNzAsIDg0CisqICBGb2N1cyAyOiA0MCwgODAKKyogIEZvY3VzIEJsdWU6IDE0LCA0MCwgODAKKyogIFBBQyBNYXRlOiAyMCwgNDAKKworSWYgYW4gdW5yZWNvZ25pemVkIG1vZGVsIGlzIGNvbm5lY3RlZCB0aGVuIHRoZSBkcml2ZXIgbWFrZXMgYW4gYXR0ZW1wdCB0bworZGV0ZXJtaW5lIGl0cyBzaXplIGFuZCB0byBwcm92aWRlIGdlbmVyaWMgY2FwYWJpbGl0aWVzLgorCitUaGUgdXBwZXIgcm93IG9mIHJvdXRpbmcgYnV0dG9ucyBvbiB0aGUgUEFDIE1hdGUgYXJlIGEgc2V0IG9mIGhvdCBrZXlzLiBUaGV5Citwcm92aWRlIHF1aWNrIGFjY2VzcyB0byB2YXJpb3VzIGJyYWlsbGUgZGlzcGxheSBmdW5jdGlvbnMgYW5kIG9wdGlvbnMgKHNlZSB0aGUKK2hlbHAgc2NyZWVuIGZvciB3aGF0IHRoZXkgYWN0dWFsbHkgZG8pLiBUaGVyZSBhcmUgdGhyZWUgbWFya2VycyBhdCB0aGUgYmFjayBvZgordGhlIGRpc3BsYXkncyB0b3Agc3VyZmFjZSwgaS5lLiBqdXN0IGJlaGluZCB0aGUgcm91dGluZyBidXR0b25zLCB3aGljaCBoZWxwIHlvdQorbG9jYXRlIGFuZCBkaXN0aW5ndWlzaCBlYWNoIGhvdCBrZXkuIFRoZSBrZXlzIGltbWVkaWF0ZWx5IGJlbG93IHRoZSBsZWZ0IGFuZAorcmlnaHQgbWFya2VycyBhcmUgdGhlIGxlZnQgYW5kIHJpZ2h0IEdERiBrZXlzLiBCZXR3ZWVuIHRoZW0gYXJlIGVpZ2h0IGtleXMgLi4uCitmb3VyIG9uIGVhY2ggc2lkZSBvZiB0aGUgY2VudGVyIG1hcmtlci4gVGhlIGJ1dHRvbnMgYmV0d2VlbiB0aGUgbGVmdCBHREYga2V5CithbmQgdGhlIGNlbnRlciBtYXJrZXIgYXJlIG5hbWVkIChmcm9tIGxlZnQgdG8gcmlnaHQpIEhLMSwgSEsyLCBISzMsIGFuZCBISzQ7Cit0aG9zZSBiZXR3ZWVuIHRoZSBjZW50ZXIgbWFya2VyIGFuZCB0aGUgcmlnaHQgR0RGIGtleSBhcmUgbmFtZWQgKGZyb20gbGVmdCB0bworcmlnaHQpIEhLNSwgSEs2LCBISzcsIGFuZCBISzguIEFueSBidXR0b24gdG8gdGhlIGxlZnQgb2YgdGhlIGxlZnQgR0RGIGtleSBhY3RzCithcyB0aGUgbGVmdCBhZHZhbmNlIGtleSwgYW5kIGFueSBidXR0b24gdG8gdGhlIHJpZ2h0IG9mIHRoZSByaWdodCBHREYga2V5IGFjdHMKK2FzIHRoZSByaWdodCBhZHZhbmNlIGtleS4gVGhlIGZvbGxvd2luZyBkcmF3aW5nIGRlcGljdHMgdGhpcyBsYXlvdXQgdmlzdWFsbHk6CisKKyAgICAgICAgICAgICAgICArKyAgICAgICAgICAgICAgICAgICAgICsrICAgICAgICAgICAgICAgICAgICAgKysKKyAgICAgICAgICAgICAgICB8fCAgICAgICAgICAgICAgICAgICAgIHx8ICAgICAgICAgICAgICAgICAgICAgfHwKKyAgICAgICAgICAgICAgICB8fCAgICAgICAgICAgICAgICAgICAgIHx8ICAgICAgICAgICAgICAgICAgICAgfHwKKyAgLi4uKy0tLSsrLS0tKystLS0rKy0tLSsrLS0tKystLS0rKy0tLSsrLS0tKystLS0rKy0tLSsrLS0tKystLS0rKy0tLSsrLS0tKy4uLgorICBMZWZ0IEFkdmFuY2V8fEdERnx8SEsxfHxISzJ8fEhLM3x8SEs0fHxISzV8fEhLNnx8SEs3fHxISzh8fEdERnx8UmlnaHRBZHZhbmNlCisgIC4uListLS0rKy0tLSsrLS0tKystLS0rKy0tLSsrLS0tKystLS0rKy0tLSsrLS0tKystLS0rKy0tLSsrLS0tKystLS0rKy0tLSsuLi4KKworCisKZGlmZiAtLWdpdCBhL0RyaXZlcnMvQnJhaWxsZS9GcmVlZG9tU2NpZW50aWZpYy9icmFpbGxlLmMgYi9Ecml2ZXJzL0JyYWlsbGUvRnJlZWRvbVNjaWVudGlmaWMvYnJhaWxsZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI2MWIwMWIKLS0tIC9kZXYvbnVsbAorKysgYi9Ecml2ZXJzL0JyYWlsbGUvRnJlZWRvbVNjaWVudGlmaWMvYnJhaWxsZS5jCkBAIC0wLDAgKzEsMTA2OCBAQAorLyoKKyAqIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisgKiAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisgKgorICogQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKKy8qIEZyZWVkb21TY2llbnRpZmljL2JyYWlsbGUuYyAtIEJyYWlsbGUgZGlzcGxheSBsaWJyYXJ5CisgKiBGcmVlZG9tIFNjaWVudGlmaWMncyBGb2N1cyBhbmQgUGFjTWF0ZSBzZXJpZXMKKyAqIEF1dGhvcjogRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPgorICovCisKKyNpbmNsdWRlICJwcm9sb2d1ZS5oIgorCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorCisjaW5jbHVkZSAibG9nLmgiCisjaW5jbHVkZSAicGFyc2UuaCIKKyNpbmNsdWRlICJhc3luY19oYW5kbGUuaCIKKyNpbmNsdWRlICJhc3luY19hbGFybS5oIgorCisjZGVmaW5lIEJSTFNUQVQgU1RfQWx2YVN0eWxlCisjZGVmaW5lIEJSTF9IQVZFX1BBQ0tFVF9JTworI2luY2x1ZGUgImJybF9kcml2ZXIuaCIKKyNpbmNsdWRlICJicmxkZWZzLWZzLmgiCisKK0JFR0lOX0tFWV9OQU1FX1RBQkxFKGNvbW1vbikKKyAgS0VZX05BTUVfRU5UUlkoRlNfS0VZX1BhbkxlZnQsICJQYW5MZWZ0IiksCisgIEtFWV9OQU1FX0VOVFJZKEZTX0tFWV9QYW5SaWdodCwgIlBhblJpZ2h0IiksCisgIEtFWV9OQU1FX0VOVFJZKEZTX0tFWV9MZWZ0U2VsZWN0b3IsICJMZWZ0U2VsZWN0b3IiKSwKKyAgS0VZX05BTUVfRU5UUlkoRlNfS0VZX1JpZ2h0U2VsZWN0b3IsICJSaWdodFNlbGVjdG9yIiksCisKKyAgS0VZX0dST1VQX0VOVFJZKEZTX0dSUF9Sb3V0aW5nS2V5cywgIlJvdXRpbmdLZXkiKSwKKyAgS0VZX0dST1VQX0VOVFJZKEZTX0dSUF9OYXZyb3dLZXlzLCAiTmF2cm93S2V5IiksCitFTkRfS0VZX05BTUVfVEFCTEUKKworQkVHSU5fS0VZX05BTUVfVEFCTEUobmF2KQorICBLRVlfTkFNRV9FTlRSWShGU19LRVlfTGVmdFdoZWVsLCAiTGVmdE5hdlByZXNzIiksCisgIEtFWV9OQU1FX0VOVFJZKEZTX0tFWV9SaWdodFdoZWVsLCAiUmlnaHROYXZQcmVzcyIpLAorCisgIEtFWV9OQU1FX0VOVFJZKEZTX0tFWV9XSEVFTCswLCAiTGVmdE5hdlVwIiksCisgIEtFWV9OQU1FX0VOVFJZKEZTX0tFWV9XSEVFTCsxLCAiTGVmdE5hdkRvd24iKSwKKyAgS0VZX05BTUVfRU5UUlkoRlNfS0VZX1dIRUVMKzIsICJSaWdodE5hdkRvd24iKSwKKyAgS0VZX05BTUVfRU5UUlkoRlNfS0VZX1dIRUVMKzMsICJSaWdodE5hdlVwIiksCitFTkRfS0VZX05BTUVfVEFCTEUKKworQkVHSU5fS0VZX05BTUVfVEFCTEUoa2V5Ym9hcmQpCisgIEtFWV9OQU1FX0VOVFJZKEZTX0tFWV9Eb3QxLCAiRG90MSIpLAorICBLRVlfTkFNRV9FTlRSWShGU19LRVlfRG90MiwgIkRvdDIiKSwKKyAgS0VZX05BTUVfRU5UUlkoRlNfS0VZX0RvdDMsICJEb3QzIiksCisgIEtFWV9OQU1FX0VOVFJZKEZTX0tFWV9Eb3Q0LCAiRG90NCIpLAorICBLRVlfTkFNRV9FTlRSWShGU19LRVlfRG90NSwgIkRvdDUiKSwKKyAgS0VZX05BTUVfRU5UUlkoRlNfS0VZX0RvdDYsICJEb3Q2IiksCisgIEtFWV9OQU1FX0VOVFJZKEZTX0tFWV9Eb3Q3LCAiRG90NyIpLAorICBLRVlfTkFNRV9FTlRSWShGU19LRVlfRG90OCwgIkRvdDgiKSwKKworICBLRVlfTkFNRV9FTlRSWShGU19LRVlfU3BhY2UsICJTcGFjZSIpLAorICBLRVlfTkFNRV9FTlRSWShGU19LRVlfTGVmdFNoaWZ0LCAiTGVmdFNoaWZ0IiksCisgIEtFWV9OQU1FX0VOVFJZKEZTX0tFWV9SaWdodFNoaWZ0LCAiUmlnaHRTaGlmdCIpLAorRU5EX0tFWV9OQU1FX1RBQkxFCisKK0JFR0lOX0tFWV9OQU1FX1RBQkxFKHJvY2tlcnMpCisgIEtFWV9OQU1FX0VOVFJZKEZTX0tFWV9MZWZ0Um9ja2VyVXAsICJMZWZ0Um9ja2VyVXAiKSwKKyAgS0VZX05BTUVfRU5UUlkoRlNfS0VZX0xlZnRSb2NrZXJEb3duLCAiTGVmdFJvY2tlckRvd24iKSwKKyAgS0VZX05BTUVfRU5UUlkoRlNfS0VZX1JpZ2h0Um9ja2VyVXAsICJSaWdodFJvY2tlclVwIiksCisgIEtFWV9OQU1FX0VOVFJZKEZTX0tFWV9SaWdodFJvY2tlckRvd24sICJSaWdodFJvY2tlckRvd24iKSwKK0VORF9LRVlfTkFNRV9UQUJMRQorCitCRUdJTl9LRVlfTkFNRV9UQUJMRShidW1wZXJzKQorICBLRVlfTkFNRV9FTlRSWShGU19LRVlfTGVmdEJ1bXBlclVwLCAiTGVmdEJ1bXBlclVwIiksCisgIEtFWV9OQU1FX0VOVFJZKEZTX0tFWV9MZWZ0QnVtcGVyRG93biwgIkxlZnRCdW1wZXJEb3duIiksCisgIEtFWV9OQU1FX0VOVFJZKEZTX0tFWV9SaWdodEJ1bXBlclVwLCAiUmlnaHRCdW1wZXJVcCIpLAorICBLRVlfTkFNRV9FTlRSWShGU19LRVlfUmlnaHRCdW1wZXJEb3duLCAiUmlnaHRCdW1wZXJEb3duIiksCitFTkRfS0VZX05BTUVfVEFCTEUKKworQkVHSU5fS0VZX05BTUVfVEFCTEVTKGZvY3VzMSkKKyAgS0VZX05BTUVfVEFCTEUoY29tbW9uKSwKKyAgS0VZX05BTUVfVEFCTEUobmF2KSwKKyAgS0VZX05BTUVfVEFCTEUoa2V5Ym9hcmQpLAorRU5EX0tFWV9OQU1FX1RBQkxFUworCitCRUdJTl9LRVlfTkFNRV9UQUJMRVMoZm9jdXMxNCkKKyAgS0VZX05BTUVfVEFCTEUoY29tbW9uKSwKKyAgS0VZX05BTUVfVEFCTEUobmF2KSwKKyAgS0VZX05BTUVfVEFCTEUoa2V5Ym9hcmQpLAorICBLRVlfTkFNRV9UQUJMRShyb2NrZXJzKSwKK0VORF9LRVlfTkFNRV9UQUJMRVMKKworQkVHSU5fS0VZX05BTUVfVEFCTEVTKGZvY3VzNDApCisgIEtFWV9OQU1FX1RBQkxFKGNvbW1vbiksCisgIEtFWV9OQU1FX1RBQkxFKG5hdiksCisgIEtFWV9OQU1FX1RBQkxFKGtleWJvYXJkKSwKKyAgS0VZX05BTUVfVEFCTEUocm9ja2VycyksCitFTkRfS0VZX05BTUVfVEFCTEVTCisKK0JFR0lOX0tFWV9OQU1FX1RBQkxFUyhmb2N1czgwKQorICBLRVlfTkFNRV9UQUJMRShjb21tb24pLAorICBLRVlfTkFNRV9UQUJMRShuYXYpLAorICBLRVlfTkFNRV9UQUJMRShrZXlib2FyZCksCisgIEtFWV9OQU1FX1RBQkxFKHJvY2tlcnMpLAorICBLRVlfTkFNRV9UQUJMRShidW1wZXJzKSwKK0VORF9LRVlfTkFNRV9UQUJMRVMKKworQkVHSU5fS0VZX05BTUVfVEFCTEUod2hlZWwpCisgIEtFWV9OQU1FX0VOVFJZKEZTX0tFWV9MZWZ0V2hlZWwsICJMZWZ0V2hlZWxQcmVzcyIpLAorICBLRVlfTkFNRV9FTlRSWShGU19LRVlfUmlnaHRXaGVlbCwgIlJpZ2h0V2hlZWxQcmVzcyIpLAorCisgIEtFWV9OQU1FX0VOVFJZKEZTX0tFWV9XSEVFTCswLCAiTGVmdFdoZWVsVXAiKSwKKyAgS0VZX05BTUVfRU5UUlkoRlNfS0VZX1dIRUVMKzEsICJMZWZ0V2hlZWxEb3duIiksCisgIEtFWV9OQU1FX0VOVFJZKEZTX0tFWV9XSEVFTCsyLCAiUmlnaHRXaGVlbERvd24iKSwKKyAgS0VZX05BTUVfRU5UUlkoRlNfS0VZX1dIRUVMKzMsICJSaWdodFdoZWVsVXAiKSwKK0VORF9LRVlfTkFNRV9UQUJMRQorCitCRUdJTl9LRVlfTkFNRV9UQUJMRShob3QpCisgIEtFWV9OQU1FX0VOVFJZKEZTX0tFWV9IT1QrMCwgIkhvdDEiKSwKKyAgS0VZX05BTUVfRU5UUlkoRlNfS0VZX0hPVCsxLCAiSG90MiIpLAorICBLRVlfTkFNRV9FTlRSWShGU19LRVlfSE9UKzIsICJIb3QzIiksCisgIEtFWV9OQU1FX0VOVFJZKEZTX0tFWV9IT1QrMywgIkhvdDQiKSwKKyAgS0VZX05BTUVfRU5UUlkoRlNfS0VZX0hPVCs0LCAiSG90NSIpLAorICBLRVlfTkFNRV9FTlRSWShGU19LRVlfSE9UKzUsICJIb3Q2IiksCisgIEtFWV9OQU1FX0VOVFJZKEZTX0tFWV9IT1QrNiwgIkhvdDciKSwKKyAgS0VZX05BTUVfRU5UUlkoRlNfS0VZX0hPVCs3LCAiSG90OCIpLAorRU5EX0tFWV9OQU1FX1RBQkxFCisKK0JFR0lOX0tFWV9OQU1FX1RBQkxFUyhwYWNtYXRlKQorICBLRVlfTkFNRV9UQUJMRShjb21tb24pLAorICBLRVlfTkFNRV9UQUJMRSh3aGVlbCksCisgIEtFWV9OQU1FX1RBQkxFKGhvdCksCitFTkRfS0VZX05BTUVfVEFCTEVTCisKK0RFRklORV9LRVlfVEFCTEUoZm9jdXMxKQorREVGSU5FX0tFWV9UQUJMRShmb2N1czE0KQorREVGSU5FX0tFWV9UQUJMRShmb2N1czQwKQorREVGSU5FX0tFWV9UQUJMRShmb2N1czgwKQorREVGSU5FX0tFWV9UQUJMRShwYWNtYXRlKQorCitCRUdJTl9LRVlfVEFCTEVfTElTVAorICAmS0VZX1RBQkxFX0RFRklOSVRJT04oZm9jdXMxKSwKKyAgJktFWV9UQUJMRV9ERUZJTklUSU9OKGZvY3VzMTQpLAorICAmS0VZX1RBQkxFX0RFRklOSVRJT04oZm9jdXM0MCksCisgICZLRVlfVEFCTEVfREVGSU5JVElPTihmb2N1czgwKSwKKyAgJktFWV9UQUJMRV9ERUZJTklUSU9OKHBhY21hdGUpLAorRU5EX0tFWV9UQUJMRV9MSVNUCisKK3R5cGVkZWYgc3RydWN0IHsKKyAgY29uc3QgS2V5VGFibGVEZWZpbml0aW9uICprZXlUYWJsZURlZmluaXRpb247CisgIHNpZ25lZCBjaGFyIGhvdGtleXNSb3c7Cit9IE1vZGVsVHlwZUVudHJ5OworCit0eXBlZGVmIGVudW0geworICBNT0RfVFlQRV9Gb2N1cywKKyAgTU9EX1RZUEVfUGFjTWF0ZQorfSBNb2RlbFR5cGU7CisKK3N0YXRpYyBjb25zdCBNb2RlbFR5cGVFbnRyeSBtb2RlbFR5cGVUYWJsZVtdID0geworICBbTU9EX1RZUEVfRm9jdXNdID0geworICAgIC5rZXlUYWJsZURlZmluaXRpb24gPSAmS0VZX1RBQkxFX0RFRklOSVRJT04oZm9jdXMxKSwKKyAgICAuaG90a2V5c1JvdyA9IC0xCisgIH0sCisKKyAgW01PRF9UWVBFX1BhY01hdGVdID0geworICAgIC5rZXlUYWJsZURlZmluaXRpb24gPSAmS0VZX1RBQkxFX0RFRklOSVRJT04ocGFjbWF0ZSksCisgICAgLmhvdGtleXNSb3cgPSAxCisgIH0KK307CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgY29uc3QgY2hhciAqaWRlbnRpZmllcjsKKyAgY29uc3QgRG90c1RhYmxlICpkb3RzVGFibGU7CisgIHVuc2lnbmVkIGNoYXIgY2VsbENvdW50OworICB1bnNpZ25lZCBjaGFyIHR5cGU7Cit9IE1vZGVsRW50cnk7CisKK3N0YXRpYyBjb25zdCBEb3RzVGFibGUgZG90c1RhYmxlX0ZvY3VzMSA9IHsKKyAgMFgwMSwgMFgwMiwgMFgwNCwgMFgxMCwgMFgyMCwgMFg0MCwgMFgwOCwgMFg4MAorfTsKKworc3RhdGljIGNvbnN0IE1vZGVsRW50cnkgbW9kZWxUYWJsZVtdID0geworICB7IC5pZGVudGlmaWVyID0gIkZvY3VzIDE0IiwKKyAgICAuZG90c1RhYmxlID0gJmRvdHNUYWJsZV9JU08xMTU0OF8xLAorICAgIC5jZWxsQ291bnQgPSAxNCwKKyAgICAudHlwZSA9IE1PRF9UWVBFX0ZvY3VzCisgIH0sCisKKyAgeyAuaWRlbnRpZmllciA9ICJGb2N1cyA0MCIsCisgICAgLmRvdHNUYWJsZSA9ICZkb3RzVGFibGVfSVNPMTE1NDhfMSwKKyAgICAuY2VsbENvdW50ID0gNDAsCisgICAgLnR5cGUgPSBNT0RfVFlQRV9Gb2N1cworICB9LAorCisgIHsgLmlkZW50aWZpZXIgPSAiRm9jdXMgNDQiLAorICAgIC5kb3RzVGFibGUgPSAmZG90c1RhYmxlX0ZvY3VzMSwKKyAgICAuY2VsbENvdW50ID0gNDQsCisgICAgLnR5cGUgPSBNT0RfVFlQRV9Gb2N1cworICB9LAorCisgIHsgLmlkZW50aWZpZXIgPSAiRm9jdXMgNzAiLAorICAgIC5kb3RzVGFibGUgPSAmZG90c1RhYmxlX0ZvY3VzMSwKKyAgICAuY2VsbENvdW50ID0gNzAsCisgICAgLnR5cGUgPSBNT0RfVFlQRV9Gb2N1cworICB9LAorCisgIHsgLmlkZW50aWZpZXIgPSAiRm9jdXMgODAiLAorICAgIC5kb3RzVGFibGUgPSAmZG90c1RhYmxlX0lTTzExNTQ4XzEsCisgICAgLmNlbGxDb3VudCA9IDgwLAorICAgIC50eXBlID0gTU9EX1RZUEVfRm9jdXMKKyAgfSwKKworICB7IC5pZGVudGlmaWVyID0gIkZvY3VzIDg0IiwKKyAgICAuZG90c1RhYmxlID0gJmRvdHNUYWJsZV9Gb2N1czEsCisgICAgLmNlbGxDb3VudCA9IDg0LAorICAgIC50eXBlID0gTU9EX1RZUEVfRm9jdXMKKyAgfSwKKworICB7IC5pZGVudGlmaWVyID0gInBtIGRpc3BsYXkgMjAiLAorICAgIC5kb3RzVGFibGUgPSAmZG90c1RhYmxlX0lTTzExNTQ4XzEsCisgICAgLmNlbGxDb3VudCA9IDIwLAorICAgIC50eXBlID0gTU9EX1RZUEVfUGFjTWF0ZQorICB9LAorCisgIHsgLmlkZW50aWZpZXIgPSAicG0gZGlzcGxheSA0MCIsCisgICAgLmRvdHNUYWJsZSA9ICZkb3RzVGFibGVfSVNPMTE1NDhfMSwKKyAgICAuY2VsbENvdW50ID0gNDAsCisgICAgLnR5cGUgPSBNT0RfVFlQRV9QYWNNYXRlCisgIH0sCisKKyAgeyAuaWRlbnRpZmllciA9IE5VTEwgfQorfTsKKwordHlwZWRlZiB2b2lkICgqQWNrbm93bGVkZ2VtZW50SGFuZGxlcikgKEJyYWlsbGVEaXNwbGF5ICpicmwsIGludCBvayk7CisKK3N0cnVjdCBCcmFpbGxlRGF0YVN0cnVjdCB7CisgIGludCBxdWVyeUFja25vd2xlZGdlZDsKKyAgY29uc3QgTW9kZWxFbnRyeSAqbW9kZWw7CisgIGNvbnN0IEtleVRhYmxlRGVmaW5pdGlvbiAqa2V5VGFibGVEZWZpbml0aW9uOworCisgIE1vZGVsRW50cnkgZ2VuZXJpY01vZGVsRW50cnk7CisgIGNoYXIgZ2VuZXJpY01vZGVsSWRlbnRpZmllcltGU19JTkZPX01PREVMX1NJWkVdOworCisgIHVuc2lnbmVkIGNoYXIgb3V0cHV0QnVmZmVyW1VJTlQ4X01BWCArIDFdOworICBpbnQgd3JpdGVGaXJzdDsKKyAgaW50IHdyaXRlTGFzdDsKKyAgaW50IHdyaXRpbmdGaXJzdDsKKyAgaW50IHdyaXRpbmdMYXN0OworCisgIEFja25vd2xlZGdlbWVudEhhbmRsZXIgYWNrbm93bGVkZ2VtZW50SGFuZGxlcjsKKyAgQXN5bmNIYW5kbGUgbWlzc2luZ0Fja25vd2xlZGdlbWVudEFsYXJtOworCisgIHVuc2lnbmVkIGNoYXIgY29uZmlnRmxhZ3M7CisgIGludCBmaXJtbmVzc1NldHRpbmc7CisKKyAgaW50IG91dHB1dFBheWxvYWRMaW1pdDsKKworICB1aW50NjRfdCBvbGRLZXlzOworfTsKKworc3RhdGljIGludAord3JpdGVQYWNrZXQgKAorICBCcmFpbGxlRGlzcGxheSAqYnJsLAorICB1bnNpZ25lZCBjaGFyIHR5cGUsCisgIHVuc2lnbmVkIGNoYXIgYXJnMSwKKyAgdW5zaWduZWQgY2hhciBhcmcyLAorICB1bnNpZ25lZCBjaGFyIGFyZzMsCisgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGEKKykgeworICBGU19QYWNrZXQgcGFja2V0OworICBpbnQgc2l6ZSA9IHNpemVvZihwYWNrZXQuaGVhZGVyKTsKKyAgdW5zaWduZWQgY2hhciBjaGVja3N1bSA9IDA7CisKKyAgY2hlY2tzdW0gLT0gKHBhY2tldC5oZWFkZXIudHlwZSA9IHR5cGUpOworICBjaGVja3N1bSAtPSAocGFja2V0LmhlYWRlci5hcmcxID0gYXJnMSk7CisgIGNoZWNrc3VtIC09IChwYWNrZXQuaGVhZGVyLmFyZzIgPSBhcmcyKTsKKyAgY2hlY2tzdW0gLT0gKHBhY2tldC5oZWFkZXIuYXJnMyA9IGFyZzMpOworCisgIGlmIChkYXRhKSB7CisgICAgdW5zaWduZWQgY2hhciBsZW5ndGggPSBwYWNrZXQuaGVhZGVyLmFyZzE7CisgICAgaW50IGluZGV4OworCisgICAgZm9yIChpbmRleD0wOyBpbmRleDxsZW5ndGg7IGluZGV4Kz0xKQorICAgICAgY2hlY2tzdW0gLT0gKHBhY2tldC5wYXlsb2FkLmJ5dGVzW2luZGV4XSA9IGRhdGFbaW5kZXhdKTsKKworICAgIHBhY2tldC5wYXlsb2FkLmJ5dGVzW2xlbmd0aF0gPSBjaGVja3N1bTsKKyAgICBzaXplICs9IGxlbmd0aCArIDE7CisgIH0KKworICByZXR1cm4gd3JpdGVCcmFpbGxlUGFja2V0KGJybCwgTlVMTCwgJnBhY2tldCwgc2l6ZSk7Cit9CisKK3N0YXRpYyB2b2lkCitsb2dOZWdhdGl2ZUFja25vd2xlZGdlbWVudCAoY29uc3QgRlNfUGFja2V0ICpwYWNrZXQpIHsKKyAgY29uc3QgY2hhciAqcHJvYmxlbTsKKyAgY29uc3QgY2hhciAqY29tcG9uZW50OworCisgIHN3aXRjaCAocGFja2V0LT5oZWFkZXIuYXJnMSkgeworICAgIGRlZmF1bHQ6CisgICAgICBwcm9ibGVtID0gInVua25vd24gcHJvYmxlbSI7CisgICAgICBicmVhazsKKyAgICBjYXNlIEZTX0VSUl9USU1FT1VUOgorICAgICAgcHJvYmxlbSA9ICJ0aW1lb3V0IGR1cmluZyBwYWNrZXQgdHJhbnNtaXNzaW9uIjsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgRlNfRVJSX0NIRUNLU1VNOgorICAgICAgcHJvYmxlbSA9ICJpbmNvcnJlY3QgY2hlY2tzdW0iOworICAgICAgYnJlYWs7CisgICAgY2FzZSBGU19FUlJfVFlQRToKKyAgICAgIHByb2JsZW0gPSAidW5rbm93biBwYWNrZXQgdHlwZSI7CisgICAgICBicmVhazsKKyAgICBjYXNlIEZTX0VSUl9QQVJBTUVURVI6CisgICAgICBwcm9ibGVtID0gImludmFsaWQgcGFyYW1ldGVyIHZhbHVlIjsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgRlNfRVJSX1NJWkU6CisgICAgICBwcm9ibGVtID0gIndyaXRlIHNpemUgdG9vIGxhcmdlIjsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgRlNfRVJSX1BPU0lUSU9OOgorICAgICAgcHJvYmxlbSA9ICJ3cml0ZSBzdGFydCB0b28gbGFyZ2UiOworICAgICAgYnJlYWs7CisgICAgY2FzZSBGU19FUlJfT1ZFUlJVTjoKKyAgICAgIHByb2JsZW0gPSAibWVzc2FnZSBGSUZPIG92ZXJmbG93IjsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgRlNfRVJSX1BPV0VSOgorICAgICAgcHJvYmxlbSA9ICJpbnN1ZmZpY2llbnQgVVNCIHBvd2VyIjsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgRlNfRVJSX1NQSToKKyAgICAgIHByb2JsZW0gPSAiU1BJIGJ1cyB0aW1lb3V0IjsKKyAgICAgIGJyZWFrOworICB9CisKKyAgc3dpdGNoIChwYWNrZXQtPmhlYWRlci5hcmcyKSB7CisgICAgZGVmYXVsdDoKKyAgICAgIGNvbXBvbmVudCA9ICJ1bmtub3duIGNvbXBvbmVudCI7CisgICAgICBicmVhazsKKyAgICBjYXNlIEZTX0VYVF9IVkFESjoKKyAgICAgIGNvbXBvbmVudCA9ICJWYXJpQnJhaWxsZSBwYWNrZXQiOworICAgICAgYnJlYWs7CisgICAgY2FzZSBGU19FWFRfQkVFUDoKKyAgICAgIGNvbXBvbmVudCA9ICJiZWVwIHBhY2tldCI7CisgICAgICBicmVhazsKKyAgICBjYXNlIEZTX0VYVF9DTEVBUjoKKyAgICAgIGNvbXBvbmVudCA9ICJDbGVhck1zZ0J1ZiBmdW5jdGlvbiI7CisgICAgICBicmVhazsKKyAgICBjYXNlIEZTX0VYVF9MT09QOgorICAgICAgY29tcG9uZW50ID0gInRpbWluZyBsb29wIG9mIFBhcnNlQ29tbWFuZHMgZnVuY3Rpb24iOworICAgICAgYnJlYWs7CisgICAgY2FzZSBGU19FWFRfVFlQRToKKyAgICAgIGNvbXBvbmVudCA9ICJQYXJzZUNvbW1hbmRzIGZ1bmN0aW9uIjsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgRlNfRVhUX0NNRFdSSVRFOgorICAgICAgY29tcG9uZW50ID0gIkNtZFdyaXRlIGZ1bmN0aW9uIjsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgRlNfRVhUX1VQREFURToKKyAgICAgIGNvbXBvbmVudCA9ICJ1cGRhdGUgcGFja2V0IjsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgRlNfRVhUX0RJQUc6CisgICAgICBjb21wb25lbnQgPSAiZGlhZyBwYWNrZXQiOworICAgICAgYnJlYWs7CisgICAgY2FzZSBGU19FWFRfUVVFUlk6CisgICAgICBjb21wb25lbnQgPSAicXVlcnkgcGFja2V0IjsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgRlNfRVhUX1dSSVRFOgorICAgICAgY29tcG9uZW50ID0gIndyaXRlIHBhY2tldCI7CisgICAgICBicmVhazsKKyAgfQorCisgIGxvZ01lc3NhZ2UoTE9HX1dBUk5JTkcsICJOZWdhdGl2ZSBBY2tub3dsZWRnZW1lbnQ6IFslMDJYXSAlcyBpbiBbJTAyWF0gJXMiLAorICAgICAgICAgICAgIHBhY2tldC0+aGVhZGVyLmFyZzEsIHByb2JsZW0sCisgICAgICAgICAgICAgcGFja2V0LT5oZWFkZXIuYXJnMiwgY29tcG9uZW50KTsKK30KKworc3RhdGljIHZvaWQKK2hhbmRsZUNvbmZpZ0Fja25vd2xlZGdlbWVudCAoQnJhaWxsZURpc3BsYXkgKmJybCwgaW50IG9rKSB7CisgIGJybC0+ZGF0YS0+Y29uZmlnRmxhZ3MgPSAwOworfQorCitzdGF0aWMgdm9pZAoraGFuZGxlRmlybW5lc3NBY2tub3dsZWRnZW1lbnQgKEJyYWlsbGVEaXNwbGF5ICpicmwsIGludCBvaykgeworICBicmwtPmRhdGEtPmZpcm1uZXNzU2V0dGluZyA9IC0xOworfQorCitzdGF0aWMgdm9pZAoraGFuZGxlV3JpdGVBY2tub3dsZWRnZW1lbnQgKEJyYWlsbGVEaXNwbGF5ICpicmwsIGludCBvaykgeworICBpZiAoIW9rKSB7CisgICAgaWYgKChicmwtPmRhdGEtPndyaXRlRmlyc3QgPT0gLTEpIHx8CisgICAgICAgIChicmwtPmRhdGEtPndyaXRpbmdGaXJzdCA8IGJybC0+ZGF0YS0+d3JpdGVGaXJzdCkpCisgICAgICBicmwtPmRhdGEtPndyaXRlRmlyc3QgPSBicmwtPmRhdGEtPndyaXRpbmdGaXJzdDsKKworICAgIGlmICgoYnJsLT5kYXRhLT53cml0ZUxhc3QgPT0gLTEpIHx8CisgICAgICAgIChicmwtPmRhdGEtPndyaXRpbmdMYXN0ID4gYnJsLT5kYXRhLT53cml0ZUxhc3QpKQorICAgICAgYnJsLT5kYXRhLT53cml0ZUxhc3QgPSBicmwtPmRhdGEtPndyaXRpbmdMYXN0OworICB9Cit9CisKK3N0YXRpYyBpbnQgaGFuZGxlQWNrbm93bGVkZ2VtZW50IChCcmFpbGxlRGlzcGxheSAqYnJsLCBpbnQgb2spOworCitBU1lOQ19BTEFSTV9DQUxMQkFDSyhoYW5kbGVNaXNzaW5nQWNrbm93bGVkZ2VtZW50QWxhcm0pIHsKKyAgQnJhaWxsZURpc3BsYXkgKmJybCA9IHBhcmFtZXRlcnMtPmRhdGE7CisKKyAgYXN5bmNEaXNjYXJkSGFuZGxlKGJybC0+ZGF0YS0+bWlzc2luZ0Fja25vd2xlZGdlbWVudEFsYXJtKTsKKyAgYnJsLT5kYXRhLT5taXNzaW5nQWNrbm93bGVkZ2VtZW50QWxhcm0gPSBOVUxMOworCisgIGxvZ01lc3NhZ2UoTE9HX1dBUk5JTkcsICJtaXNzaW5nIEFDSzogYXNzdW1pbmcgTkFLIik7CisgIGhhbmRsZUFja25vd2xlZGdlbWVudChicmwsIDApOworfQorCitzdGF0aWMgaW50CitzZXRNaXNzaW5nQWNrbm93bGVkZ2VtZW50QWxhcm0gKEJyYWlsbGVEaXNwbGF5ICpicmwsIGludCB0aW1lb3V0KSB7CisgIGlmICghYnJsLT5kYXRhLT5taXNzaW5nQWNrbm93bGVkZ2VtZW50QWxhcm0pIHsKKyAgICBpZiAoIWFzeW5jTmV3UmVsYXRpdmVBbGFybSgmYnJsLT5kYXRhLT5taXNzaW5nQWNrbm93bGVkZ2VtZW50QWxhcm0sIHRpbWVvdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlTWlzc2luZ0Fja25vd2xlZGdlbWVudEFsYXJtLCBicmwpKSB7CisgICAgICByZXR1cm4gMDsKKyAgICB9CisgIH0KKworICByZXR1cm4gMTsKK30KKworc3RhdGljIHZvaWQKK2NhbmNlbE1pc3NpbmdBY2tub3dsZWRnZW1lbnRBbGFybSAoQnJhaWxsZURpc3BsYXkgKmJybCkgeworICBpZiAoYnJsLT5kYXRhLT5taXNzaW5nQWNrbm93bGVkZ2VtZW50QWxhcm0pIHsKKyAgICBhc3luY0NhbmNlbFJlcXVlc3QoYnJsLT5kYXRhLT5taXNzaW5nQWNrbm93bGVkZ2VtZW50QWxhcm0pOworICAgIGJybC0+ZGF0YS0+bWlzc2luZ0Fja25vd2xlZGdlbWVudEFsYXJtID0gTlVMTDsKKyAgfQorfQorCitzdGF0aWMgdm9pZAorc2V0QWNrbm93bGVkZ2VtZW50SGFuZGxlciAoQnJhaWxsZURpc3BsYXkgKmJybCwgQWNrbm93bGVkZ2VtZW50SGFuZGxlciBoYW5kbGVyKSB7CisgIGJybC0+ZGF0YS0+YWNrbm93bGVkZ2VtZW50SGFuZGxlciA9IGhhbmRsZXI7CisgIHNldE1pc3NpbmdBY2tub3dsZWRnZW1lbnRBbGFybShicmwsIDUwMCk7Cit9CisKK3N0YXRpYyBpbnQKK3dyaXRlUmVxdWVzdCAoQnJhaWxsZURpc3BsYXkgKmJybCkgeworICBpZiAoYnJsLT5kYXRhLT5hY2tub3dsZWRnZW1lbnRIYW5kbGVyKSByZXR1cm4gMTsKKworICBpZiAoYnJsLT5kYXRhLT5jb25maWdGbGFncykgeworICAgIGlmICghd3JpdGVQYWNrZXQoYnJsLCBGU19QS1RfQ09ORklHLCBicmwtPmRhdGEtPmNvbmZpZ0ZsYWdzLCAwLCAwLCBOVUxMKSkgeworICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgc2V0QWNrbm93bGVkZ2VtZW50SGFuZGxlcihicmwsIGhhbmRsZUNvbmZpZ0Fja25vd2xlZGdlbWVudCk7CisgICAgcmV0dXJuIDE7CisgIH0KKworICBpZiAoYnJsLT5kYXRhLT5maXJtbmVzc1NldHRpbmcgPj0gMCkgeworICAgIGlmICghd3JpdGVQYWNrZXQoYnJsLCBGU19QS1RfSFZBREosIGJybC0+ZGF0YS0+ZmlybW5lc3NTZXR0aW5nLCAwLCAwLCBOVUxMKSkgeworICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgc2V0QWNrbm93bGVkZ2VtZW50SGFuZGxlcihicmwsIGhhbmRsZUZpcm1uZXNzQWNrbm93bGVkZ2VtZW50KTsKKyAgICByZXR1cm4gMTsKKyAgfQorCisgIGlmIChicmwtPmRhdGEtPndyaXRlTGFzdCAhPSAtMSkgeworICAgIHVuc2lnbmVkIGludCBjb3VudCA9IGJybC0+ZGF0YS0+d3JpdGVMYXN0ICsgMSAtIGJybC0+ZGF0YS0+d3JpdGVGaXJzdDsKKyAgICB1bnNpZ25lZCBjaGFyIGJ1ZmZlcltjb3VudF07CisgICAgaW50IHRydW5jYXRlID0gY291bnQgPiBicmwtPmRhdGEtPm91dHB1dFBheWxvYWRMaW1pdDsKKworICAgIGlmICh0cnVuY2F0ZSkgY291bnQgPSBicmwtPmRhdGEtPm91dHB1dFBheWxvYWRMaW1pdDsKKyAgICB0cmFuc2xhdGVPdXRwdXRDZWxscyhidWZmZXIsICZicmwtPmRhdGEtPm91dHB1dEJ1ZmZlclticmwtPmRhdGEtPndyaXRlRmlyc3RdLCBjb3VudCk7CisgICAgaWYgKCF3cml0ZVBhY2tldChicmwsIEZTX1BLVF9XUklURSwgY291bnQsIGJybC0+ZGF0YS0+d3JpdGVGaXJzdCwgMCwgYnVmZmVyKSkgeworICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgc2V0QWNrbm93bGVkZ2VtZW50SGFuZGxlcihicmwsIGhhbmRsZVdyaXRlQWNrbm93bGVkZ2VtZW50KTsKKyAgICBicmwtPmRhdGEtPndyaXRpbmdGaXJzdCA9IGJybC0+ZGF0YS0+d3JpdGVGaXJzdDsKKworICAgIGlmICh0cnVuY2F0ZSkgeworICAgICAgYnJsLT5kYXRhLT53cml0aW5nTGFzdCA9IChicmwtPmRhdGEtPndyaXRlRmlyc3QgKz0gY291bnQpIC0gMTsKKyAgICB9IGVsc2UgeworICAgICAgYnJsLT5kYXRhLT53cml0aW5nTGFzdCA9IGJybC0+ZGF0YS0+d3JpdGVMYXN0OworICAgICAgYnJsLT5kYXRhLT53cml0ZUZpcnN0ID0gLTE7CisgICAgICBicmwtPmRhdGEtPndyaXRlTGFzdCA9IC0xOworICAgIH0KKworICAgIHJldHVybiAxOworICB9CisKKyAgcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQKK2hhbmRsZUFja25vd2xlZGdlbWVudCAoQnJhaWxsZURpc3BsYXkgKmJybCwgaW50IG9rKSB7CisgIGJybC0+ZGF0YS0+YWNrbm93bGVkZ2VtZW50SGFuZGxlcihicmwsIG9rKTsKKyAgYnJsLT5kYXRhLT5hY2tub3dsZWRnZW1lbnRIYW5kbGVyID0gTlVMTDsKKyAgcmV0dXJuIHdyaXRlUmVxdWVzdChicmwpOworfQorCitzdGF0aWMgdm9pZAordXBkYXRlQ2VsbHMgKAorICBCcmFpbGxlRGlzcGxheSAqYnJsLAorICBjb25zdCB1bnNpZ25lZCBjaGFyICpjZWxscywKKyAgdW5zaWduZWQgY2hhciBjb3VudCwKKyAgdW5zaWduZWQgY2hhciBvZmZzZXQKKykgeworICB1bnNpZ25lZCBpbnQgZnJvbTsKKyAgdW5zaWduZWQgaW50IHRvOworCisgIGlmIChjZWxsc0hhdmVDaGFuZ2VkKCZicmwtPmRhdGEtPm91dHB1dEJ1ZmZlcltvZmZzZXRdLCBjZWxscywgY291bnQsICZmcm9tLCAmdG8sIE5VTEwpKSB7CisgICAgaW50IGZpcnN0ID0gZnJvbSArIG9mZnNldDsKKyAgICBpbnQgbGFzdCA9IHRvICsgb2Zmc2V0IC0gMTsKKworICAgIGlmICgoYnJsLT5kYXRhLT53cml0ZUZpcnN0ID09IC0xKSB8fCAoZmlyc3QgPCBicmwtPmRhdGEtPndyaXRlRmlyc3QpKQorICAgICAgYnJsLT5kYXRhLT53cml0ZUZpcnN0ID0gZmlyc3Q7CisKKyAgICBpZiAobGFzdCA+IGJybC0+ZGF0YS0+d3JpdGVMYXN0KSBicmwtPmRhdGEtPndyaXRlTGFzdCA9IGxhc3Q7CisgIH0KK30KKwordHlwZWRlZiBzdHJ1Y3QgeworICB1bnNpZ25lZCBjaGFyIGNoZWNrc3VtOworfSBSZWFkUGFja2V0RGF0YTsKKworc3RhdGljIEJyYWlsbGVQYWNrZXRWZXJpZmllclJlc3VsdAordmVyaWZ5UGFja2V0ICgKKyAgQnJhaWxsZURpc3BsYXkgKmJybCwKKyAgdW5zaWduZWQgY2hhciAqYnl0ZXMsIHNpemVfdCBzaXplLAorICBzaXplX3QgKmxlbmd0aCwgdm9pZCAqZGF0YQorKSB7CisgIFJlYWRQYWNrZXREYXRhICpycGQgPSBkYXRhOworICB1bnNpZ25lZCBjaGFyIGJ5dGUgPSBieXRlc1tzaXplLTFdOworCisgIHN3aXRjaCAoc2l6ZSkgeworICAgIGNhc2UgMToKKyAgICAgIHN3aXRjaCAoYnl0ZSkgeworICAgICAgICBjYXNlIEZTX1BLVF9BQ0s6CisgICAgICAgIGNhc2UgRlNfUEtUX05BSzoKKyAgICAgICAgY2FzZSBGU19QS1RfS0VZOgorICAgICAgICBjYXNlIEZTX1BLVF9FWFRLRVk6CisgICAgICAgIGNhc2UgRlNfUEtUX0JVVFRPTjoKKyAgICAgICAgY2FzZSBGU19QS1RfV0hFRUw6CisgICAgICAgIGNhc2UgRlNfUEtUX0lORk86CisgICAgICAgICAgKmxlbmd0aCA9IHNpemVvZihGU19QYWNrZXRIZWFkZXIpOworICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgcmV0dXJuIEJSTF9QVlJfSU5WQUxJRDsKKyAgICAgIH0KKworICAgICAgcnBkLT5jaGVja3N1bSA9IDA7CisgICAgICBicmVhazsKKworICAgIGNhc2UgMjoKKyAgICAgIGlmIChieXRlc1swXSAmIDBYODApICpsZW5ndGggKz0gYnl0ZSArIDE7CisgICAgICBicmVhazsKKworICAgIGRlZmF1bHQ6CisgICAgICBicmVhazsKKyAgfQorCisgIHJwZC0+Y2hlY2tzdW0gLT0gYnl0ZTsKKyAgaWYgKChzaXplID09ICpsZW5ndGgpICYmIChzaXplID4gc2l6ZW9mKEZTX1BhY2tldEhlYWRlcikpICYmIHJwZC0+Y2hlY2tzdW0pIHJldHVybiBCUkxfUFZSX0lOVkFMSUQ7CisKKyAgcmV0dXJuIEJSTF9QVlJfSU5DTFVERTsKK30KKworc3RhdGljIHNpemVfdAorcmVhZFBhY2tldCAoQnJhaWxsZURpc3BsYXkgKmJybCwgRlNfUGFja2V0ICpwYWNrZXQpIHsKKyAgUmVhZFBhY2tldERhdGEgcnBkOworCisgIHJldHVybiByZWFkQnJhaWxsZVBhY2tldChicmwsIE5VTEwsIHBhY2tldCwgc2l6ZW9mKCpwYWNrZXQpLCB2ZXJpZnlQYWNrZXQsICZycGQpOworfQorCitzdGF0aWMgc2l6ZV90CitnZXRQYWNrZXQgKEJyYWlsbGVEaXNwbGF5ICpicmwsIEZTX1BhY2tldCAqcGFja2V0KSB7CisgIHdoaWxlICgxKSB7CisgICAgc2l6ZV90IGNvdW50ID0gcmVhZFBhY2tldChicmwsIHBhY2tldCk7CisKKyAgICBpZiAoY291bnQgPiAwKSB7CisgICAgICBzd2l0Y2ggKHBhY2tldC0+aGVhZGVyLnR5cGUpIHsKKyAgICAgICAgeworICAgICAgICAgIGludCBvazsKKworICAgICAgICBjYXNlIEZTX1BLVF9OQUs6CisgICAgICAgICAgY2FuY2VsTWlzc2luZ0Fja25vd2xlZGdlbWVudEFsYXJtKGJybCk7CisgICAgICAgICAgbG9nTmVnYXRpdmVBY2tub3dsZWRnZW1lbnQocGFja2V0KTsKKworICAgICAgICAgIGlmICghYnJsLT5kYXRhLT5hY2tub3dsZWRnZW1lbnRIYW5kbGVyKSB7CisgICAgICAgICAgICBsb2dNZXNzYWdlKExPR19XQVJOSU5HLCAidW5leHBlY3RlZCBOQUsiKTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgIH0KKworICAgICAgICAgIHN3aXRjaCAocGFja2V0LT5oZWFkZXIuYXJnMSkgeworICAgICAgICAgICAgY2FzZSBGU19FUlJfVElNRU9VVDogeworICAgICAgICAgICAgICBpbnQgb3JpZ2luYWxMaW1pdCA9IGJybC0+ZGF0YS0+b3V0cHV0UGF5bG9hZExpbWl0OworCisgICAgICAgICAgICAgIGlmIChicmwtPmRhdGEtPm91dHB1dFBheWxvYWRMaW1pdCA+IGJybC0+ZGF0YS0+bW9kZWwtPmNlbGxDb3VudCkKKyAgICAgICAgICAgICAgICBicmwtPmRhdGEtPm91dHB1dFBheWxvYWRMaW1pdCA9IGJybC0+ZGF0YS0+bW9kZWwtPmNlbGxDb3VudDsKKworICAgICAgICAgICAgICBpZiAoYnJsLT5kYXRhLT5vdXRwdXRQYXlsb2FkTGltaXQgPiAxKQorICAgICAgICAgICAgICAgIGJybC0+ZGF0YS0+b3V0cHV0UGF5bG9hZExpbWl0IC09IDE7CisKKyAgICAgICAgICAgICAgaWYgKGJybC0+ZGF0YS0+b3V0cHV0UGF5bG9hZExpbWl0ICE9IG9yaWdpbmFsTGltaXQpIHsKKyAgICAgICAgICAgICAgICBsb2dNZXNzYWdlKExPR19XQVJOSU5HLCAibWF4aW11bSBwYXlsb2FkIGxlbmd0aCByZWR1Y2VkIGZyb20gJWQgdG8gJWQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JpZ2luYWxMaW1pdCwgYnJsLT5kYXRhLT5vdXRwdXRQYXlsb2FkTGltaXQpOworICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgfQorCisgICAgICAgICAgb2sgPSAwOworICAgICAgICAgIGdvdG8gZG9BY2tub3dsZWRnZW1lbnQ7CisKKyAgICAgICAgY2FzZSBGU19QS1RfQUNLOgorICAgICAgICAgIGNhbmNlbE1pc3NpbmdBY2tub3dsZWRnZW1lbnRBbGFybShicmwpOworCisgICAgICAgICAgaWYgKCFicmwtPmRhdGEtPmFja25vd2xlZGdlbWVudEhhbmRsZXIpIHsKKyAgICAgICAgICAgIGxvZ01lc3NhZ2UoTE9HX1dBUk5JTkcsICJ1bmV4cGVjdGVkIEFDSyIpOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgfQorCisgICAgICAgICAgb2sgPSAxOworICAgICAgICAgIGdvdG8gZG9BY2tub3dsZWRnZW1lbnQ7CisKKyAgICAgICAgZG9BY2tub3dsZWRnZW1lbnQ6CisgICAgICAgICAgaWYgKGhhbmRsZUFja25vd2xlZGdlbWVudChicmwsIG9rKSkgY29udGludWU7CisgICAgICAgICAgY291bnQgPSAwOworICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gY291bnQ7CisgIH0KK30KKworc3RhdGljIGludAorc2V0QnJhaWxsZUZpcm1uZXNzIChCcmFpbGxlRGlzcGxheSAqYnJsLCBCcmFpbGxlRmlybW5lc3Mgc2V0dGluZykgeworICBicmwtPmRhdGEtPmZpcm1uZXNzU2V0dGluZyA9IHNldHRpbmcgKiAwWEZGIC8gQlJMX0ZJUk1ORVNTX01BWElNVU07CisgIHJldHVybiB3cml0ZVJlcXVlc3QoYnJsKTsKK30KKworc3RhdGljIGludAorY29ubmVjdFJlc291cmNlIChCcmFpbGxlRGlzcGxheSAqYnJsLCBjb25zdCBjaGFyICppZGVudGlmaWVyKSB7CisgIHN0YXRpYyBjb25zdCBTZXJpYWxQYXJhbWV0ZXJzIHNlcmlhbFBhcmFtZXRlcnMgPSB7CisgICAgU0VSSUFMX0RFRkFVTFRfUEFSQU1FVEVSUywKKyAgICAuYmF1ZCA9IDU3NjAwCisgIH07CisKKyAgQkVHSU5fVVNCX0NIQU5ORUxfREVGSU5JVElPTlMKKyAgICB7IC8qIEZvY3VzIDEgKi8KKyAgICAgIC52ZW5kb3I9MFgwRjRFLCAucHJvZHVjdD0wWDAxMDAsCisgICAgICAuY29uZmlndXJhdGlvbj0xLCAuaW50ZXJmYWNlPTAsIC5hbHRlcm5hdGl2ZT0wLAorICAgICAgLmlucHV0RW5kcG9pbnQ9MiwgLm91dHB1dEVuZHBvaW50PTEKKyAgICB9LAorCisgICAgeyAvKiBQQUMgTWF0ZSAqLworICAgICAgLnZlbmRvcj0wWDBGNEUsIC5wcm9kdWN0PTBYMDExMSwKKyAgICAgIC5jb25maWd1cmF0aW9uPTEsIC5pbnRlcmZhY2U9MCwgLmFsdGVybmF0aXZlPTAsCisgICAgICAuaW5wdXRFbmRwb2ludD0yLCAub3V0cHV0RW5kcG9pbnQ9MQorICAgIH0sCisKKyAgICB7IC8qIEZvY3VzIDIgKi8KKyAgICAgIC52ZW5kb3I9MFgwRjRFLCAucHJvZHVjdD0wWDAxMTIsCisgICAgICAuY29uZmlndXJhdGlvbj0xLCAuaW50ZXJmYWNlPTAsIC5hbHRlcm5hdGl2ZT0wLAorICAgICAgLmlucHV0RW5kcG9pbnQ9MiwgLm91dHB1dEVuZHBvaW50PTEKKyAgICB9LAorCisgICAgeyAvKiBGb2N1cyAzKyAqLworICAgICAgLnZlbmRvcj0wWDBGNEUsIC5wcm9kdWN0PTBYMDExNCwKKyAgICAgIC5jb25maWd1cmF0aW9uPTEsIC5pbnRlcmZhY2U9MCwgLmFsdGVybmF0aXZlPTAsCisgICAgICAuaW5wdXRFbmRwb2ludD0yLCAub3V0cHV0RW5kcG9pbnQ9MSwKKyAgICAgIC5kaXNhYmxlRW5kcG9pbnRSZXNldCA9IDEKKyAgICB9LAorICBFTkRfVVNCX0NIQU5ORUxfREVGSU5JVElPTlMKKworICBHaW9EZXNjcmlwdG9yIGRlc2NyaXB0b3I7CisgIGdpb0luaXRpYWxpemVEZXNjcmlwdG9yKCZkZXNjcmlwdG9yKTsKKworICBkZXNjcmlwdG9yLnNlcmlhbC5wYXJhbWV0ZXJzID0gJnNlcmlhbFBhcmFtZXRlcnM7CisKKyAgZGVzY3JpcHRvci51c2IuY2hhbm5lbERlZmluaXRpb25zID0gdXNiQ2hhbm5lbERlZmluaXRpb25zOworCisgIGRlc2NyaXB0b3IuYmx1ZXRvb3RoLmNoYW5uZWxOdW1iZXIgPSAxOworCisgIGlmIChjb25uZWN0QnJhaWxsZVJlc291cmNlKGJybCwgaWRlbnRpZmllciwgJmRlc2NyaXB0b3IsIE5VTEwpKSB7CisgICAgcmV0dXJuIDE7CisgIH0KKworICByZXR1cm4gMDsKK30KKworc3RhdGljIGludAorc2V0TW9kZWwgKEJyYWlsbGVEaXNwbGF5ICpicmwsIGNvbnN0IGNoYXIgKm1vZGVsTmFtZSwgY29uc3QgY2hhciAqZmlybXdhcmUpIHsKKyAgYnJsLT5kYXRhLT5tb2RlbCA9IG1vZGVsVGFibGU7CisgIHdoaWxlIChicmwtPmRhdGEtPm1vZGVsLT5pZGVudGlmaWVyKSB7CisgICAgaWYgKHN0cmNtcChicmwtPmRhdGEtPm1vZGVsLT5pZGVudGlmaWVyLCBtb2RlbE5hbWUpID09IDApIGJyZWFrOworICAgIGJybC0+ZGF0YS0+bW9kZWwgKz0gMTsKKyAgfQorCisgIGlmICghYnJsLT5kYXRhLT5tb2RlbC0+aWRlbnRpZmllcikgeworICAgIGxvZ01lc3NhZ2UoTE9HX1dBUk5JTkcsICJEZXRlY3RlZCB1bmtub3duIG1vZGVsOiAlcyIsIG1vZGVsTmFtZSk7CisKKyAgICBicmwtPmRhdGEtPm1vZGVsID0gJmJybC0+ZGF0YS0+Z2VuZXJpY01vZGVsRW50cnk7CisgICAgbWVtc2V0KCZicmwtPmRhdGEtPmdlbmVyaWNNb2RlbEVudHJ5LCAwLCBzaXplb2YoYnJsLT5kYXRhLT5nZW5lcmljTW9kZWxFbnRyeSkpOworCisgICAgYnJsLT5kYXRhLT5nZW5lcmljTW9kZWxFbnRyeS5pZGVudGlmaWVyID0gIkdlbmVyaWMiOworICAgIGJybC0+ZGF0YS0+Z2VuZXJpY01vZGVsRW50cnkuY2VsbENvdW50ID0gMjA7CisgICAgYnJsLT5kYXRhLT5nZW5lcmljTW9kZWxFbnRyeS5kb3RzVGFibGUgPSAmZG90c1RhYmxlX0lTTzExNTQ4XzE7CisgICAgYnJsLT5kYXRhLT5nZW5lcmljTW9kZWxFbnRyeS50eXBlID0gTU9EX1RZUEVfUGFjTWF0ZTsKKworICAgIHsKKyAgICAgIHR5cGVkZWYgc3RydWN0IHsKKwljb25zdCBjaGFyICppZGVudGlmaWVyOworCWNvbnN0IERvdHNUYWJsZSAqZG90c1RhYmxlOworICAgICAgfSBFeGNlcHRpb25FbnRyeTsKKworICAgICAgc3RhdGljIGNvbnN0IEV4Y2VwdGlvbkVudHJ5IGV4Y2VwdGlvblRhYmxlW10gPSB7CisJeyJGb2N1cyIsICZkb3RzVGFibGVfRm9jdXMxfSwKKwl7TlVMTCAgICwgTlVMTCAgICAgICAgIH0KKyAgICAgIH07CisgICAgICBjb25zdCBFeGNlcHRpb25FbnRyeSAqZXhjZXB0aW9uID0gZXhjZXB0aW9uVGFibGU7CisKKyAgICAgIHdoaWxlIChleGNlcHRpb24tPmlkZW50aWZpZXIpIHsKKwlpZiAoc3RybmNtcChleGNlcHRpb24tPmlkZW50aWZpZXIsIG1vZGVsTmFtZSwgc3RybGVuKGV4Y2VwdGlvbi0+aWRlbnRpZmllcikpID09IDApIHsKKwkgIGJybC0+ZGF0YS0+Z2VuZXJpY01vZGVsRW50cnkuZG90c1RhYmxlID0gZXhjZXB0aW9uLT5kb3RzVGFibGU7CisJICBicmVhazsKKwl9CisKKwlleGNlcHRpb24gKz0gMTsKKyAgICAgIH0KKyAgICB9CisKKyAgICB7CisgICAgICBjb25zdCBjaGFyICp3b3JkID0gc3RycmNocihtb2RlbE5hbWUsICcgJyk7CisKKyAgICAgIGlmICh3b3JkKSB7CisJdW5zaWduZWQgaW50IHNpemU7CisKKwlpZiAoaXNVbnNpZ25lZEludGVnZXIoJnNpemUsICsrd29yZCkpIHsKKyAgICAgICAgICBpZiAoc2l6ZSA8PSBBUlJBWV9DT1VOVChicmwtPmRhdGEtPm91dHB1dEJ1ZmZlcikpIHsKKyAgICAgICAgICAgIGJybC0+ZGF0YS0+Z2VuZXJpY01vZGVsRW50cnkuY2VsbENvdW50ID0gc2l6ZTsKKworICAgICAgICAgICAgc25wcmludGYoYnJsLT5kYXRhLT5nZW5lcmljTW9kZWxJZGVudGlmaWVyLCBzaXplb2YoYnJsLT5kYXRhLT5nZW5lcmljTW9kZWxJZGVudGlmaWVyKSwKKyAgICAgICAgICAgICAgICAgICAgICIlcyAlZCIsCisgICAgICAgICAgICAgICAgICAgICBicmwtPmRhdGEtPmdlbmVyaWNNb2RlbEVudHJ5LmlkZW50aWZpZXIsCisgICAgICAgICAgICAgICAgICAgICBicmwtPmRhdGEtPmdlbmVyaWNNb2RlbEVudHJ5LmNlbGxDb3VudCk7CisKKyAgICAgICAgICAgIGJybC0+ZGF0YS0+Z2VuZXJpY01vZGVsRW50cnkuaWRlbnRpZmllciA9IGJybC0+ZGF0YS0+Z2VuZXJpY01vZGVsSWRlbnRpZmllcjsKKyAgICAgICAgICB9CisJfQorICAgICAgfQorICAgIH0KKyAgfQorCisgIGlmIChicmwtPmRhdGEtPm1vZGVsKSB7CisgICAgYnJsLT5kYXRhLT5rZXlUYWJsZURlZmluaXRpb24gPSBtb2RlbFR5cGVUYWJsZVticmwtPmRhdGEtPm1vZGVsLT50eXBlXS5rZXlUYWJsZURlZmluaXRpb247CisgICAgbWFrZU91dHB1dFRhYmxlKGJybC0+ZGF0YS0+bW9kZWwtPmRvdHNUYWJsZVswXSk7CisKKyAgICBtZW1zZXQoYnJsLT5kYXRhLT5vdXRwdXRCdWZmZXIsIDAsIGJybC0+ZGF0YS0+bW9kZWwtPmNlbGxDb3VudCk7CisgICAgYnJsLT5kYXRhLT53cml0ZUZpcnN0ID0gMDsKKyAgICBicmwtPmRhdGEtPndyaXRlTGFzdCA9IGJybC0+ZGF0YS0+bW9kZWwtPmNlbGxDb3VudCAtIDE7CisKKyAgICBicmwtPmRhdGEtPmFja25vd2xlZGdlbWVudEhhbmRsZXIgPSBOVUxMOworICAgIGJybC0+ZGF0YS0+bWlzc2luZ0Fja25vd2xlZGdlbWVudEFsYXJtID0gTlVMTDsKKyAgICBicmwtPmRhdGEtPmNvbmZpZ0ZsYWdzID0gMDsKKyAgICBicmwtPmRhdGEtPmZpcm1uZXNzU2V0dGluZyA9IC0xOworCisgICAgaWYgKGJybC0+ZGF0YS0+bW9kZWwtPnR5cGUgPT0gTU9EX1RZUEVfRm9jdXMpIHsKKyAgICAgIHVuc2lnbmVkIGNoYXIgZmlybXdhcmVWZXJzaW9uID0gZmlybXdhcmVbMF0gLSAnMCc7CisKKyAgICAgIGlmIChmaXJtd2FyZVZlcnNpb24gPj0gMykgeworICAgICAgICAvKiBzZW5kIHRoZSBleHRlbmRlZCBrZXlzIHBhY2tldCAoRlNfUEtUX0VYVEtFWSkgKi8KKwlicmwtPmRhdGEtPmNvbmZpZ0ZsYWdzIHw9IEZTX0NGR19FWFRLRVk7CisKKwlpZiAoYnJsLT5kYXRhLT5tb2RlbC0+Y2VsbENvdW50IDwgMjApIHsKKwkgIGJybC0+ZGF0YS0+a2V5VGFibGVEZWZpbml0aW9uID0gJktFWV9UQUJMRV9ERUZJTklUSU9OKGZvY3VzMTQpOworCX0gZWxzZSBpZiAoYnJsLT5kYXRhLT5tb2RlbC0+Y2VsbENvdW50IDwgODApIHsKKwkgIGJybC0+ZGF0YS0+a2V5VGFibGVEZWZpbml0aW9uID0gJktFWV9UQUJMRV9ERUZJTklUSU9OKGZvY3VzNDApOworCX0gZWxzZSB7CisJICBicmwtPmRhdGEtPmtleVRhYmxlRGVmaW5pdGlvbiA9ICZLRVlfVEFCTEVfREVGSU5JVElPTihmb2N1czgwKTsKKwl9CisgICAgICB9CisgICAgfQorCisgICAgYnJsLT5kYXRhLT5vbGRLZXlzID0gMDsKKworICAgIGxvZ01lc3NhZ2UoTE9HX0lORk8sICJEZXRlY3RlZCAlczogY2VsbHM9JWQsIGZpcm13YXJlPSVzIiwKKwkgICAgICAgYnJsLT5kYXRhLT5tb2RlbC0+aWRlbnRpZmllciwKKwkgICAgICAgYnJsLT5kYXRhLT5tb2RlbC0+Y2VsbENvdW50LAorCSAgICAgICBmaXJtd2FyZSk7CisKKyAgICByZXR1cm4gMTsKKyAgfQorCisgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50Cit3cml0ZUlkZW50aWZ5UmVxdWVzdCAoQnJhaWxsZURpc3BsYXkgKmJybCkgeworICBicmwtPmRhdGEtPnF1ZXJ5QWNrbm93bGVkZ2VkID0gMDsKKyAgYnJsLT5kYXRhLT5tb2RlbCA9IE5VTEw7CisgIHJldHVybiB3cml0ZVBhY2tldChicmwsIEZTX1BLVF9RVUVSWSwgMCwgMCwgMCwgTlVMTCk7Cit9CisKK3N0YXRpYyBzaXplX3QKK3JlYWRSZXNwb25zZSAoQnJhaWxsZURpc3BsYXkgKmJybCwgdm9pZCAqcGFja2V0LCBzaXplX3Qgc2l6ZSkgeworICByZXR1cm4gcmVhZFBhY2tldChicmwsIHBhY2tldCk7Cit9CisKK3N0YXRpYyBCcmFpbGxlUmVzcG9uc2VSZXN1bHQKK2lzSWRlbnRpdHlSZXNwb25zZSAoQnJhaWxsZURpc3BsYXkgKmJybCwgY29uc3Qgdm9pZCAqcGFja2V0LCBzaXplX3Qgc2l6ZSkgeworICBjb25zdCBGU19QYWNrZXQgKnJlc3BvbnNlID0gcGFja2V0OworCisgIHN3aXRjaCAocmVzcG9uc2UtPmhlYWRlci50eXBlKSB7CisgICAgY2FzZSBGU19QS1RfSU5GTzoKKyAgICAgIGlmICghc2V0TW9kZWwoYnJsLCByZXNwb25zZS0+cGF5bG9hZC5pbmZvLm1vZGVsLCByZXNwb25zZS0+cGF5bG9hZC5pbmZvLmZpcm13YXJlKSkgcmV0dXJuIEJSTF9SU1BfRkFJTDsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBGU19QS1RfQUNLOgorICAgICAgYnJsLT5kYXRhLT5xdWVyeUFja25vd2xlZGdlZCA9IDE7CisgICAgICBicmVhazsKKworICAgIGNhc2UgRlNfUEtUX05BSzoKKyAgICAgIGxvZ05lZ2F0aXZlQWNrbm93bGVkZ2VtZW50KHJlc3BvbnNlKTsKKyAgICAgIGJybC0+ZGF0YS0+cXVlcnlBY2tub3dsZWRnZWQgPSAwOworICAgICAgYnJsLT5kYXRhLT5tb2RlbCA9IE5VTEw7CisgICAgICByZXR1cm4gQlJMX1JTUF9DT05USU5VRTsKKworICAgIGRlZmF1bHQ6CisgICAgICByZXR1cm4gQlJMX1JTUF9VTkVYUEVDVEVEOworICB9CisKKyAgcmV0dXJuIChicmwtPmRhdGEtPnF1ZXJ5QWNrbm93bGVkZ2VkICYmIGJybC0+ZGF0YS0+bW9kZWwpPyBCUkxfUlNQX0RPTkU6IEJSTF9SU1BfQ09OVElOVUU7Cit9CisKK3N0YXRpYyBpbnQKK2JybF9jb25zdHJ1Y3QgKEJyYWlsbGVEaXNwbGF5ICpicmwsIGNoYXIgKipwYXJhbWV0ZXJzLCBjb25zdCBjaGFyICpkZXZpY2UpIHsKKyAgaWYgKChicmwtPmRhdGEgPSBtYWxsb2Moc2l6ZW9mKCpicmwtPmRhdGEpKSkpIHsKKyAgICBtZW1zZXQoYnJsLT5kYXRhLCAwLCBzaXplb2YoKmJybC0+ZGF0YSkpOworICAgIGJybC0+ZGF0YS0+b3V0cHV0UGF5bG9hZExpbWl0ID0gMFhGRjsKKworICAgIGlmIChjb25uZWN0UmVzb3VyY2UoYnJsLCBkZXZpY2UpKSB7CisgICAgICBGU19QYWNrZXQgcmVzcG9uc2U7CisKKyAgICAgIGlmIChwcm9iZUJyYWlsbGVEaXNwbGF5KGJybCwgMiwgTlVMTCwgMTAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVJZGVudGlmeVJlcXVlc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkUmVzcG9uc2UsICZyZXNwb25zZSwgc2l6ZW9mKHJlc3BvbnNlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzSWRlbnRpdHlSZXNwb25zZSkpIHsKKyAgICAgICAgbG9nTWVzc2FnZShMT0dfREVCVUcsICJNYW51ZmFjdHVyZXI6ICVzIiwgcmVzcG9uc2UucGF5bG9hZC5pbmZvLm1hbnVmYWN0dXJlcik7CisgICAgICAgIGxvZ01lc3NhZ2UoTE9HX0RFQlVHLCAiTW9kZWw6ICVzIiwgcmVzcG9uc2UucGF5bG9hZC5pbmZvLm1vZGVsKTsKKyAgICAgICAgbG9nTWVzc2FnZShMT0dfREVCVUcsICJGaXJtd2FyZTogJXMiLCByZXNwb25zZS5wYXlsb2FkLmluZm8uZmlybXdhcmUpOworCisgICAgICAgIGJybC0+dGV4dENvbHVtbnMgPSBicmwtPmRhdGEtPm1vZGVsLT5jZWxsQ291bnQ7CisgICAgICAgIGJybC0+dGV4dFJvd3MgPSAxOworCisgICAgICAgIHNldEJyYWlsbGVLZXlUYWJsZShicmwsIGJybC0+ZGF0YS0+a2V5VGFibGVEZWZpbml0aW9uKTsKKyAgICAgICAgYnJsLT5zZXRCcmFpbGxlRmlybW5lc3MgPSBzZXRCcmFpbGxlRmlybW5lc3M7CisKKyAgICAgICAgcmV0dXJuIHdyaXRlUmVxdWVzdChicmwpOworICAgICAgfQorCisgICAgICBkaXNjb25uZWN0QnJhaWxsZVJlc291cmNlKGJybCwgTlVMTCk7CisgICAgfQorCisgICAgZnJlZShicmwtPmRhdGEpOworICAgIGJybC0+ZGF0YSA9IE5VTEw7CisgIH0gZWxzZSB7CisgICAgbG9nTWFsbG9jRXJyb3IoKTsKKyAgfQorCisgIHJldHVybiAwOworfQorCitzdGF0aWMgdm9pZAorYnJsX2Rlc3RydWN0IChCcmFpbGxlRGlzcGxheSAqYnJsKSB7CisgIGNhbmNlbE1pc3NpbmdBY2tub3dsZWRnZW1lbnRBbGFybShicmwpOworICBkaXNjb25uZWN0QnJhaWxsZVJlc291cmNlKGJybCwgTlVMTCk7CisKKyAgaWYgKGJybC0+ZGF0YSkgeworICAgIGZyZWUoYnJsLT5kYXRhKTsKKyAgICBicmwtPmRhdGEgPSBOVUxMOworICB9Cit9CisKK3N0YXRpYyBpbnQKK2JybF93cml0ZVdpbmRvdyAoQnJhaWxsZURpc3BsYXkgKmJybCwgY29uc3Qgd2NoYXJfdCAqdGV4dCkgeworICB1cGRhdGVDZWxscyhicmwsIGJybC0+YnVmZmVyLCBicmwtPmRhdGEtPm1vZGVsLT5jZWxsQ291bnQsIDApOworICByZXR1cm4gd3JpdGVSZXF1ZXN0KGJybCk7Cit9CisKK3N0YXRpYyB2b2lkCit1cGRhdGVLZXlzIChCcmFpbGxlRGlzcGxheSAqYnJsLCB1aW50NjRfdCBuZXdLZXlzLCBLZXlOdW1iZXIga2V5QmFzZSwgdW5zaWduZWQgY2hhciBrZXlDb3VudCkgeworICBjb25zdCBLZXlHcm91cCBncm91cCA9IEZTX0dSUF9OYXZpZ2F0aW9uS2V5czsKKyAgS2V5TnVtYmVyIG51bWJlciA9IGtleUJhc2U7CisKKyAgS2V5TnVtYmVyIHByZXNzS2V5c1trZXlDb3VudF07CisgIHVuc2lnbmVkIGludCBwcmVzc0NvdW50ID0gMDsKKworICB1aW50NjRfdCBrZXlCaXQgPSBVSU5UNjRfQygwWDEpIDw8IGtleUJhc2U7CisgIG5ld0tleXMgPDw9IGtleUJhc2U7CisgIG5ld0tleXMgfD0gYnJsLT5kYXRhLT5vbGRLZXlzICYgfigoKFVJTlQ2NF9DKDBYMSkgPDwga2V5Q291bnQpIC0gMSkgPDwga2V5QmFzZSk7CisKKyAgd2hpbGUgKGJybC0+ZGF0YS0+b2xkS2V5cyAhPSBuZXdLZXlzKSB7CisgICAgdWludDY0X3Qgb2xkS2V5ID0gYnJsLT5kYXRhLT5vbGRLZXlzICYga2V5Qml0OworICAgIHVpbnQ2NF90IG5ld0tleSA9IG5ld0tleXMgJiBrZXlCaXQ7CisKKyAgICBpZiAob2xkS2V5ICYmICFuZXdLZXkpIHsKKyAgICAgIGVucXVldWVLZXlFdmVudChicmwsIGdyb3VwLCBudW1iZXIsIDApOworICAgICAgYnJsLT5kYXRhLT5vbGRLZXlzICY9IH5rZXlCaXQ7CisgICAgfSBlbHNlIGlmIChuZXdLZXkgJiYgIW9sZEtleSkgeworICAgICAgcHJlc3NLZXlzW3ByZXNzQ291bnQrK10gPSBudW1iZXI7CisgICAgICBicmwtPmRhdGEtPm9sZEtleXMgfD0ga2V5Qml0OworICAgIH0KKworICAgIGtleUJpdCA8PD0gMTsKKyAgICBudW1iZXIgKz0gMTsKKyAgfQorCisgIHdoaWxlIChwcmVzc0NvdW50KSBlbnF1ZXVlS2V5RXZlbnQoYnJsLCBncm91cCwgcHJlc3NLZXlzWy0tcHJlc3NDb3VudF0sIDEpOworfQorCitzdGF0aWMgaW50CiticmxfcmVhZENvbW1hbmQgKEJyYWlsbGVEaXNwbGF5ICpicmwsIEtleVRhYmxlQ29tbWFuZENvbnRleHQgY29udGV4dCkgeworICBGU19QYWNrZXQgcGFja2V0OworICBzaXplX3QgY291bnQ7CisKKyAgd2hpbGUgKChjb3VudCA9IGdldFBhY2tldChicmwsICZwYWNrZXQpKSkgeworICAgIHN3aXRjaCAocGFja2V0LmhlYWRlci50eXBlKSB7CisgICAgICBjYXNlIEZTX1BLVF9LRVk6IHsKKyAgICAgICAgdWludDY0X3QgbmV3S2V5cyA9IHBhY2tldC5oZWFkZXIuYXJnMSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAocGFja2V0LmhlYWRlci5hcmcyIDw8IDgpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIChwYWNrZXQuaGVhZGVyLmFyZzMgPDwgMTYpOworCisgICAgICAgIHVwZGF0ZUtleXMoYnJsLCBuZXdLZXlzLCAwLCAyNCk7CisgICAgICAgIGNvbnRpbnVlOworICAgICAgfQorCisgICAgICBjYXNlIEZTX1BLVF9FWFRLRVk6IHsKKyAgICAgICAgdWludDY0X3QgbmV3S2V5cyA9IHBhY2tldC5wYXlsb2FkLmV4dGtleS5ieXRlc1swXTsKKworICAgICAgICB1cGRhdGVLZXlzKGJybCwgbmV3S2V5cywgMjQsIDgpOworICAgICAgICBjb250aW51ZTsKKyAgICAgIH0KKworICAgICAgY2FzZSBGU19QS1RfQlVUVE9OOiB7CisgICAgICAgIEtleU51bWJlciBudW1iZXIgPSBwYWNrZXQuaGVhZGVyLmFyZzE7CisgICAgICAgIHVuc2lnbmVkIGNoYXIgcHJlc3MgPSAocGFja2V0LmhlYWRlci5hcmcyICYgMFgwMSkgIT0gMDsKKyAgICAgICAgS2V5R3JvdXAgZ3JvdXAgPSBwYWNrZXQuaGVhZGVyLmFyZzM7CisKKyAgICAgICAgaWYgKGdyb3VwID09IG1vZGVsVHlwZVRhYmxlW2JybC0+ZGF0YS0+bW9kZWwtPnR5cGVdLmhvdGtleXNSb3cpIHsKKyAgICAgICAgICBzdGF0aWMgY29uc3QgS2V5TnVtYmVyIGtleXNbXSA9IHsKKyAgICAgICAgICAgIEZTX0tFWV9MZWZ0U2VsZWN0b3IsCisgICAgICAgICAgICBGU19LRVlfSE9UKzAsIEZTX0tFWV9IT1QrMSwgRlNfS0VZX0hPVCsyLCBGU19LRVlfSE9UKzMsCisgICAgICAgICAgICBGU19LRVlfSE9UKzQsIEZTX0tFWV9IT1QrNSwgRlNfS0VZX0hPVCs2LCBGU19LRVlfSE9UKzcsCisgICAgICAgICAgICBGU19LRVlfUmlnaHRTZWxlY3RvcgorICAgICAgICAgIH07CisKKyAgICAgICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBrZXlDb3VudCA9IEFSUkFZX0NPVU5UKGtleXMpOworICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgYmFzZSA9IChicmwtPmRhdGEtPm1vZGVsLT5jZWxsQ291bnQgLSBrZXlDb3VudCkgLyAyOworCisgICAgICAgICAgaWYgKG51bWJlciA8IGJhc2UpIHsKKyAgICAgICAgICAgIG51bWJlciA9IEZTX0tFWV9QYW5MZWZ0OworICAgICAgICAgIH0gZWxzZSBpZiAoKG51bWJlciAtPSBiYXNlKSA+PSBrZXlDb3VudCkgeworICAgICAgICAgICAgbnVtYmVyID0gRlNfS0VZX1BhblJpZ2h0OworICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBudW1iZXIgPSBrZXlzW251bWJlcl07CisgICAgICAgICAgfQorCisgICAgICAgICAgZ3JvdXAgPSBGU19HUlBfTmF2aWdhdGlvbktleXM7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgZ3JvdXAgKz0gMTsKKyAgICAgICAgfQorCisgICAgICAgIGVucXVldWVLZXlFdmVudChicmwsIGdyb3VwLCBudW1iZXIsIHByZXNzKTsKKyAgICAgICAgY29udGludWU7CisgICAgICB9CisKKyAgICAgIGNhc2UgRlNfUEtUX1dIRUVMOiB7CisgICAgICAgIGNvbnN0IEtleUdyb3VwIGdyb3VwID0gRlNfR1JQX05hdmlnYXRpb25LZXlzOworICAgICAgICBjb25zdCBLZXlOdW1iZXIgbnVtYmVyID0gRlNfS0VZX1dIRUVMICsgKChwYWNrZXQuaGVhZGVyLmFyZzEgPj4gMykgJiAwWDcpOworICAgICAgICB1bnNpZ25lZCBpbnQgY291bnQgPSBwYWNrZXQuaGVhZGVyLmFyZzEgJiAwWDc7CisKKyAgICAgICAgd2hpbGUgKGNvdW50KSB7CisgICAgICAgICAgZW5xdWV1ZUtleShicmwsIGdyb3VwLCBudW1iZXIpOworICAgICAgICAgIGNvdW50IC09IDE7CisgICAgICAgIH0KKworICAgICAgICBjb250aW51ZTsKKyAgICAgIH0KKworICAgICAgZGVmYXVsdDoKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgbG9nVW5leHBlY3RlZFBhY2tldCgmcGFja2V0LCBjb3VudCk7CisgIH0KKworICByZXR1cm4gKGVycm5vID09IEVBR0FJTik/IEVPRjogQlJMX0NNRF9SRVNUQVJUQlJMOworfQorCitzdGF0aWMgc3NpemVfdAorYnJsX3JlYWRQYWNrZXQgKEJyYWlsbGVEaXNwbGF5ICpicmwsIHZvaWQgKmJ1ZmZlciwgc2l6ZV90IGxlbmd0aCkgeworICBGU19QYWNrZXQgcGFja2V0OworICBzaXplX3QgY291bnQgPSByZWFkUGFja2V0KGJybCwgJnBhY2tldCk7CisKKyAgaWYgKGNvdW50ID09IDApIHJldHVybiAoZXJybm8gPT0gRUFHQUlOKT8gMDogLTE7CisgIGlmIChjb3VudCA+IHNpemVvZihwYWNrZXQuaGVhZGVyKSkgY291bnQgLT0gMTsKKworICBpZiAobGVuZ3RoIDwgY291bnQpIHsKKyAgICBsb2dNZXNzYWdlKExPR19XQVJOSU5HLAorICAgICAgICAgICAgICAgIklucHV0IHBhY2tldCBidWZmZXIgdG9vIHNtYWxsOiIKKyAgICAgICAgICAgICAgICIgJSJQUklzaXplCisgICAgICAgICAgICAgICAiIDwgJSJQUklzaXplLAorICAgICAgICAgICAgICAgbGVuZ3RoLCBjb3VudCk7CisgICAgY291bnQgPSBsZW5ndGg7CisgIH0KKworICBtZW1jcHkoYnVmZmVyLCAmcGFja2V0LCBjb3VudCk7CisgIHJldHVybiBjb3VudDsKK30KKworc3RhdGljIHNzaXplX3QKK2JybF93cml0ZVBhY2tldCAoQnJhaWxsZURpc3BsYXkgKmJybCwgY29uc3Qgdm9pZCAqcGFja2V0LCBzaXplX3QgbGVuZ3RoKSB7CisgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ5dGVzID0gcGFja2V0OworICBzaXplX3Qgc2l6ZSA9IDQ7CisKKyAgaWYgKGxlbmd0aCA+PSBzaXplKSB7CisgICAgaW50IGhhc1BheWxvYWQgPSAwOworCisgICAgaWYgKGJ5dGVzWzBdICYgMFg4MCkgeworICAgICAgc2l6ZSArPSBieXRlc1sxXTsKKyAgICAgIGhhc1BheWxvYWQgPSAxOworICAgIH0KKworICAgIGlmIChsZW5ndGggPj0gc2l6ZSkgeworICAgICAgaWYgKGxlbmd0aCA+IHNpemUpIHsKKyAgICAgICAgbG9nTWVzc2FnZShMT0dfV0FSTklORywKKyAgICAgICAgICAgICAgICAgICAib3V0cHV0IHBhY2tldCBidWZmZXIgbGFyZ2VyIHRoYW4gbmVjZXNzYXJ5OiIKKyAgICAgICAgICAgICAgICAgICAiICUiUFJJc2l6ZQorICAgICAgICAgICAgICAgICAgICIgPiAlIlBSSXNpemUsCisgICAgICAgICAgICAgICAgICAgbGVuZ3RoLCBzaXplKTsKKyAgICAgIH0KKworICAgICAgcmV0dXJuIHdyaXRlUGFja2V0KGJybCwgYnl0ZXNbMF0sIGJ5dGVzWzFdLCBieXRlc1syXSwgYnl0ZXNbM10sCisgICAgICAgICAgICAgICAgICAgICAgICAgKGhhc1BheWxvYWQ/ICZieXRlc1s0XTogTlVMTCkpPworICAgICAgICAgICAgIHNpemU6IC0xOworICAgIH0KKyAgfQorCisgIGxvZ01lc3NhZ2UoTE9HX1dBUk5JTkcsCisgICAgICAgICAgICAgIm91dHB1dCBwYWNrZXQgYnVmZmVyIHRvbyBzbWFsbDoiCisgICAgICAgICAgICAgIiAlIlBSSXNpemUKKyAgICAgICAgICAgICAiIDwgJSJQUklzaXplLAorICAgICAgICAgICAgIGxlbmd0aCwgc2l6ZSk7CisKKyAgZXJybm8gPSBFSU87CisgIHJldHVybiAtMTsKK30KKworc3RhdGljIGludAorYnJsX3Jlc2V0IChCcmFpbGxlRGlzcGxheSAqYnJsKSB7CisgIHJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvRHJpdmVycy9CcmFpbGxlL0ZyZWVkb21TY2llbnRpZmljL2JybGRlZnMtZnMuaCBiL0RyaXZlcnMvQnJhaWxsZS9GcmVlZG9tU2NpZW50aWZpYy9icmxkZWZzLWZzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGU1MjE0ZgotLS0gL2Rldi9udWxsCisrKyBiL0RyaXZlcnMvQnJhaWxsZS9GcmVlZG9tU2NpZW50aWZpYy9icmxkZWZzLWZzLmgKQEAgLTAsMCArMSwxMzggQEAKKy8qCisgKiBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorICogICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorICoKKyAqIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorICoKKyAqIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyAqLworCisjaWZuZGVmIEJSTFRUWV9JTkNMVURFRF9GU19CUkxERUZTCisjZGVmaW5lIEJSTFRUWV9JTkNMVURFRF9GU19CUkxERUZTCisKK3R5cGVkZWYgZW51bSB7CisgIEZTX1BLVF9RVUVSWSA9IDBYMDAsICAvKiBob3N0LT51bml0OiByZXF1ZXN0IGRldmljZSBpbmZvcm1hdGlvbiAqLworICBGU19QS1RfQUNLID0gMFgwMSwgICAgLyogdW5pdC0+aG9zdDogYWNrbm93bGVkZ2UgcGFja2V0IHJlY2VpcHQgKi8KKyAgRlNfUEtUX05BSyA9IDBYMDIsICAgIC8qIHVuaXQtPmhvc3Q6IG5lZ2F0aXZlIGFja25vd2xlZGdlLCByZXBvcnQgZXJyb3IgKi8KKyAgRlNfUEtUX0tFWSA9IDBYMDMsICAgIC8qIHVuaXQtPmhvc3Q6IGtleSBldmVudCAqLworICBGU19QS1RfQlVUVE9OID0gMFgwNCwgLyogdW5pdC0+aG9zdDogcm91dGluZyBidXR0b24gZXZlbnQgKi8KKyAgRlNfUEtUX1dIRUVMID0gMFgwNSwgIC8qIHVuaXQtPmhvc3Q6IHdoaXogd2hlZWwgZXZlbnQgKi8KKyAgRlNfUEtUX0hWQURKID0gMFgwOCwgIC8qIGhvc3QtPnVuaXQ6IHNldCBicmFpbGxlIGRpc3BsYXkgdm9sdGFnZSAqLworICBGU19QS1RfQkVFUCA9IDBYMDksICAgLyogaG9zdC0+dW5pdDogc291bmQgc2hvcnQgYmVlcCAqLworICBGU19QS1RfQ09ORklHID0gMFgwRiwgLyogaG9zdC0+dW5pdDogY29uZmlndXJlIGRldmljZSBvcHRpb25zICovCisgIEZTX1BLVF9JTkZPID0gMFg4MCwgICAvKiB1bml0LT5ob3N0OiByZXNwb25zZSB0byBxdWVyeSBwYWNrZXQgKi8KKyAgRlNfUEtUX1dSSVRFID0gMFg4MSwgIC8qIGhvc3QtPnVuaXQ6IHdyaXRlIHRvIGJyYWlsbGUgZGlzcGxheSAqLworICBGU19QS1RfRVhUS0VZID0gMFg4MiAgLyogdW5pdC0+aG9zdDogZXh0ZW5kZWQga2V5cyBldmVudCAqLworfSBGU19QYWNrZXRUeXBlOworCit0eXBlZGVmIGVudW0geworICBGU19FWFRfSFZBREogPSAwWDA4LCAgICAvKiBlcnJvciBpbiB2YXJpYnJhaWxsZSBwYWNrZXQgKi8KKyAgRlNfRVhUX0JFRVAgPSAwWDA5LCAgICAgLyogZXJyb3IgaW4gYmVlcCBwYWNrZXQgKi8KKyAgRlNfRVhUX0NMRUFSID0gMFgzMSwgICAgLyogZXJyb3IgaW4gQ2xlYXJNc2dCdWYgZnVuY3Rpb24gKi8KKyAgRlNfRVhUX0xPT1AgPSAwWDMyLCAgICAgLyogdGltaW5nIGxvb3AgaW4gUGFyc2VDb21tYW5kcyBmdW5jdGlvbiAqLworICBGU19FWFRfVFlQRSA9IDBYMzMsICAgICAvKiB1bmtub3duIHBhY2tldCB0eXBlIGluIFBhcnNlQ29tbWFuZHMgZnVuY3Rpb24gKi8KKyAgRlNfRVhUX0NNRFdSSVRFID0gMFgzNCwgLyogZXJyb3IgaW4gQ21kV3JpdGUgZnVuY3Rpb24gKi8KKyAgRlNfRVhUX1VQREFURSA9IDBYN0UsICAgLyogZXJyb3IgaW4gdXBkYXRlIHBhY2tldCAqLworICBGU19FWFRfRElBRyA9IDBYN0YsICAgICAvKiBlcnJvciBpbiBkaWFnIHBhY2tldCAqLworICBGU19FWFRfUVVFUlkgPSAwWDgwLCAgICAvKiBlcnJvciBpbiBxdWVyeSBwYWNrZXQgKi8KKyAgRlNfRVhUX1dSSVRFID0gMFg4MSAgICAgLyogZXJyb3IgaW4gd3JpdGUgcGFja2V0ICovCit9IEZTX0V4dGVuZGVkUGFja2V0VHlwZTsKKwordHlwZWRlZiBlbnVtIHsKKyAgRlNfRVJSX1RJTUVPVVQgPSAwWDMwLCAgIC8qIG5vIGRhdGEgcmVjZWl2ZWQgZnJvbSBob3N0IGZvciBhIHdoaWxlICovCisgIEZTX0VSUl9DSEVDS1NVTSA9IDBYMzEsICAvKiBpbmNvcnJlY3QgY2hlY2tzdW0gKi8KKyAgRlNfRVJSX1RZUEUgPSAwWDMyLCAgICAgIC8qIHVuc3VwcG9ydGVkIHBhY2tldCB0eXBlICovCisgIEZTX0VSUl9QQVJBTUVURVIgPSAwWDMzLCAvKiBpbnZhbGlkIHBhcmFtZXRlciAqLworICBGU19FUlJfU0laRSA9IDBYMzQsICAgICAgLyogd3JpdGUgc2l6ZSB0b28gbGFyZ2UgKi8KKyAgRlNfRVJSX1BPU0lUSU9OID0gMFgzNSwgIC8qIHdyaXRlIHBvc2l0aW9uIHRvbyBsYXJnZSAqLworICBGU19FUlJfT1ZFUlJVTiA9IDBYMzYsICAgLyogbWVzc2FnZSBxdWV1ZSBvdmVyZmxvdyAqLworICBGU19FUlJfUE9XRVIgPSAwWDM3LCAgICAgLyogaW5zdWZmaWNpZW50IFVTQiBwb3dlciAqLworICBGU19FUlJfU1BJID0gMFgzOCAgICAgICAgLyogdGltZW91dCBvbiBTUEkgYnVzICovCit9IEZTX0Vycm9yQ29kZTsKKwordHlwZWRlZiBlbnVtIHsKKyAgRlNfQ0ZHX0VYVEtFWSA9IDBYMDIgLyogc2VuZCBleHRlbmRlZCBrZXkgZXZlbnRzICovCit9IEZTX0NvbmZpZ0ZsYWc7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgdW5zaWduZWQgY2hhciB0eXBlOworICB1bnNpZ25lZCBjaGFyIGFyZzE7CisgIHVuc2lnbmVkIGNoYXIgYXJnMjsKKyAgdW5zaWduZWQgY2hhciBhcmczOworfSBGU19QYWNrZXRIZWFkZXI7CisKKyNkZWZpbmUgRlNfSU5GT19NQU5VRkFDVFVSRVJfU0laRSAyNAorI2RlZmluZSBGU19JTkZPX01PREVMX1NJWkUgMTYKKyNkZWZpbmUgRlNfSU5GT19GSVJNV0FSRV9TSVpFIDgKKwordHlwZWRlZiBzdHJ1Y3QgeworICBGU19QYWNrZXRIZWFkZXIgaGVhZGVyOworCisgIHVuaW9uIHsKKyAgICB1bnNpZ25lZCBjaGFyIGJ5dGVzWzBYMTAwXTsKKworICAgIHN0cnVjdCB7CisgICAgICBjaGFyIG1hbnVmYWN0dXJlcltGU19JTkZPX01BTlVGQUNUVVJFUl9TSVpFXTsKKyAgICAgIGNoYXIgbW9kZWxbRlNfSU5GT19NT0RFTF9TSVpFXTsKKyAgICAgIGNoYXIgZmlybXdhcmVbRlNfSU5GT19GSVJNV0FSRV9TSVpFXTsKKyAgICB9IGluZm87CisKKyAgICBzdHJ1Y3QgeworICAgICAgdW5zaWduZWQgY2hhciBieXRlc1s0XTsKKyAgICB9IGV4dGtleTsKKyAgfSBwYXlsb2FkOworfSBGU19QYWNrZXQ7CisKKyNkZWZpbmUgRlNfS0VZU19XSEVFTCA4CisjZGVmaW5lIEZTX0tFWVNfSE9UIDgKKwordHlwZWRlZiBlbnVtIHsKKyAgRlNfS0VZX0RvdDEgPSAwLAorICBGU19LRVlfRG90MiA9IDEsCisgIEZTX0tFWV9Eb3QzID0gMiwKKyAgRlNfS0VZX0RvdDQgPSAzLAorICBGU19LRVlfRG90NSA9IDQsCisgIEZTX0tFWV9Eb3Q2ID0gNSwKKyAgRlNfS0VZX0RvdDcgPSA2LAorICBGU19LRVlfRG90OCA9IDcsCisKKyAgRlNfS0VZX0xlZnRXaGVlbCA9IDgsCisgIEZTX0tFWV9SaWdodFdoZWVsID0gOSwKKyAgRlNfS0VZX0xlZnRTaGlmdCA9IDEwLAorICBGU19LRVlfUmlnaHRTaGlmdCA9IDExLAorICBGU19LRVlfUGFuTGVmdCA9IDEyLAorICBGU19LRVlfUGFuUmlnaHQgPSAxMywKKyAgRlNfS0VZX1NwYWNlID0gMTUsCisKKyAgRlNfS0VZX0xlZnRTZWxlY3RvciA9IDE2LAorICBGU19LRVlfUmlnaHRTZWxlY3RvciA9IDE3LAorICBGU19LRVlfTGVmdEJ1bXBlclVwID0gMjAsCisgIEZTX0tFWV9MZWZ0QnVtcGVyRG93biA9IDIxLAorICBGU19LRVlfUmlnaHRCdW1wZXJVcCA9IDIyLAorICBGU19LRVlfUmlnaHRCdW1wZXJEb3duID0gMjMsCisKKyAgRlNfS0VZX0xlZnRSb2NrZXJVcCA9IDI4LAorICBGU19LRVlfTGVmdFJvY2tlckRvd24gPSAyOSwKKyAgRlNfS0VZX1JpZ2h0Um9ja2VyVXAgPSAzMCwKKyAgRlNfS0VZX1JpZ2h0Um9ja2VyRG93biA9IDMxLAorCisgIEZTX0tFWV9XSEVFTCwKKyAgRlNfS0VZX0hPVCA9IEZTX0tFWV9XSEVFTCArIEZTX0tFWVNfV0hFRUwKK30gRlNfTmF2aWdhdGlvbktleTsKKwordHlwZWRlZiBlbnVtIHsKKyAgRlNfR1JQX05hdmlnYXRpb25LZXlzID0gMCwKKyAgRlNfR1JQX1JvdXRpbmdLZXlzLAorICBGU19HUlBfTmF2cm93S2V5cworfSBGU19LZXlHcm91cDsKKworI2VuZGlmIC8qIEJSTFRUWV9JTkNMVURFRF9GU19CUkxERUZTICovIApkaWZmIC0tZ2l0IGEvRHJpdmVycy9CcmFpbGxlL0hJRC9icmFpbGxlLmMgYi9Ecml2ZXJzL0JyYWlsbGUvSElEL2JyYWlsbGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYjNmYjRkCi0tLSAvZGV2L251bGwKKysrIGIvRHJpdmVycy9CcmFpbGxlL0hJRC9icmFpbGxlLmMKQEAgLTAsMCArMSw0NDcgQEAKKyNpbmNsdWRlIDxzdGRpbnQuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHdjaGFyLmg+CisKKyNpbmNsdWRlICJicmxkZWZzLWhpZC5oIgorI2luY2x1ZGUgInRoaXJkX3BhcnR5L2JybHR0eS9IZWFkZXJzL2JpdG1hc2suaCIKKyNpbmNsdWRlICJ0aGlyZF9wYXJ0eS9icmx0dHkvSGVhZGVycy9icmxfYmFzZS5oIgorI2luY2x1ZGUgInRoaXJkX3BhcnR5L2JybHR0eS9IZWFkZXJzL2JybF9kcml2ZXIuaCIKKyNpbmNsdWRlICJ0aGlyZF9wYXJ0eS9icmx0dHkvSGVhZGVycy9icmxfdHlwZXMuaCIKKyNpbmNsdWRlICJ0aGlyZF9wYXJ0eS9icmx0dHkvSGVhZGVycy9icmxfdXRpbHMuaCIKKyNpbmNsdWRlICJ0aGlyZF9wYXJ0eS9icmx0dHkvSGVhZGVycy9naW9fdHlwZXMuaCIKKyNpbmNsdWRlICJ0aGlyZF9wYXJ0eS9icmx0dHkvSGVhZGVycy9oaWRfZGVmcy5oIgorI2luY2x1ZGUgInRoaXJkX3BhcnR5L2JybHR0eS9IZWFkZXJzL2hpZF9pdGVtcy5oIgorI2luY2x1ZGUgInRoaXJkX3BhcnR5L2JybHR0eS9IZWFkZXJzL2hpZF90eXBlcy5oIgorI2luY2x1ZGUgInRoaXJkX3BhcnR5L2JybHR0eS9IZWFkZXJzL2lvX2dlbmVyaWMuaCIKKyNpbmNsdWRlICJ0aGlyZF9wYXJ0eS9icmx0dHkvSGVhZGVycy9rdGJfdHlwZXMuaCIKKyNpbmNsdWRlICJ0aGlyZF9wYXJ0eS9icmx0dHkvSGVhZGVycy9sb2cuaCIKKyNpbmNsdWRlICJ0aGlyZF9wYXJ0eS9icmx0dHkvUHJvZ3JhbXMvZ2lvX2ludGVybmFsLmgiCisKK3N0cnVjdCBCcmFpbGxlRGF0YVN0cnVjdCB7CisgIHN0cnVjdCB7CisgICAgdW5zaWduZWQgY2hhciBjb3VudDsKKyAgICBLRVlTX0JJVE1BU0sobWFzayk7CisgIH0gcHJlc3NlZEtleXM7CisKKyAgc3RydWN0IHsKKyAgICB1bnNpZ25lZCBjaGFyIHJld3JpdGU7CisgICAgdW5zaWduZWQgY2hhciBjZWxsc1tNQVhfT1VUUFVUX1NJWkVdOworICB9IHRleHQ7CisKKyAgc3RydWN0IHsKKyAgICAvLyBUaGUgSElEIHJlcG9ydCBJRCB1c2VkIGJ5IGJvdGggaW5wdXQgYW5kIG91dHB1dC4gQ3VycmVudGx5IGV4cGVjdHMgYm90aAorICAgIC8vIHRvIGJlIHRoZSBzYW1lLgorICAgIHVpbnQzMl90IHJlcG9ydElkOworICAgIC8vIFRoZSBzaXplIG9mIHRoZSBISUQgaW5wdXQgcmVwb3J0LgorICAgIHVpbnQzMl90IGlucHV0U2l6ZUJ5dGVzOworICAgIC8vIE1hcCBlYWNoIGlucHV0IHJlcG9ydCBiaXQgdG8gdGhlIEhJRCB1c2FnZSBpdCByZXByZXNlbnRzLgorICAgIHVpbnQzMl90IGlucHV0UmVwb3J0VXNhZ2VzW01BWF9JTlBVVF9TSVpFXTsKKyAgICAvLyBNYXAgZWFjaCBpbnB1dCByZXBvcnQgYml0IHRvIHRoZSBLZXkgKGludGVybmFsIG51bWJlcikgaXQgcmVwcmVzZW50cy4KKyAgICB1aW50MzJfdCBpbnB1dFJlcG9ydEtleXNbTUFYX0lOUFVUX1NJWkVdOworICAgIC8vIFRoZSBmaXJzdCAobG93ZXN0KSBiaXQgbnVtYmVyIG9mIHRoZSBjb250aWd1b3VzIGdyb3VwIG9mIHJvdXRpbmcga2V5cy4KKyAgICB1aW50MzJfdCBpbnB1dFJvdXRpbmdGaXJzdEJpdDsKKyAgfSByZXBvcnRJbmZvOworfTsKKworLy8gUGFyc2VzIHRoZSBCcmFpbGxlIGRpc3BsYXkncyBISUQgcmVwb3J0IGRlc2NyaXB0b3IsIGluIG9yZGVyIHRvIHVuZGVyc3RhbmQKKy8vIGhvdyB0byBwYXJzZSBpbnB1dCByZXBvcnRzIGFuZCBwcmVwYXJlIG91dHB1dCByZXBvcnRzLgorc3RhdGljIGludCBwcm9iZUhpZERpc3BsYXkoQnJhaWxsZURpc3BsYXkgKmJybCwgSGlkSXRlbXNEZXNjcmlwdG9yICppdGVtcykgeworICBtZW1zZXQoYnJsLT5kYXRhLT5yZXBvcnRJbmZvLmlucHV0UmVwb3J0VXNhZ2VzLCAwLAorICAgICAgICAgTUFYX0lOUFVUX1NJWkUgKiBzaXplb2YoYnJsLT5kYXRhLT5yZXBvcnRJbmZvLmlucHV0UmVwb3J0VXNhZ2VzWzBdKSk7CisgIG1lbXNldChicmwtPmRhdGEtPnJlcG9ydEluZm8uaW5wdXRSZXBvcnRLZXlzLCAwLAorICAgICAgICAgTUFYX0lOUFVUX1NJWkUgKiBzaXplb2YoYnJsLT5kYXRhLT5yZXBvcnRJbmZvLmlucHV0UmVwb3J0S2V5c1swXSkpOworICBicmwtPmRhdGEtPnJlcG9ydEluZm8uaW5wdXRSb3V0aW5nRmlyc3RCaXQgPSAtMTsKKworICAvLyBJZiB5b3UnZCBsaWtlIHRvIHByaW50IGFsbCBpdGVtcyBpbiB0aGUgSElEIHJlcG9ydCB0aGVuIGNhbGwKKyAgLy8gaGlkX2luc3BlY3QjaGlkTGlzdEl0ZW1zKCkKKworICAvLyBUaGVzZSB2YXJpYWJsZXMgc2F2ZSBhdHRyaWJ1dGVzIGZyb20gdGhlIGN1cnJlbnQgc3RhY2sgb2YgaXRlbXM6CisgIC8vICAgVGhlIGN1cnJlbnQgVXNhZ2UgUGFnZS4KKyAgdWludDMyX3QgdXNhZ2VQYWdlID0gMDsKKyAgLy8gICBOdW1iZXIgb2YgYml0cyBwZXIgdXNhZ2UuCisgIHVpbnQzMl90IHJlcG9ydFNpemUgPSAwOworICAvLyAgIE51bWJlciBvZiB1c2FnZXMgaW4gdGhpcyBzdGFjay4KKyAgdWludDMyX3QgcmVwb3J0Q291bnQgPSAwOworICAvLyAgIFRoZSBVc2FnZXMgaW4gdGhpcyBzdGFjaywgc3RvcmVkIGFzIGEgbGlzdCBvZiBpbmRpdmlkdWFsIHVzYWdlcy4KKyAgdWludDMyX3QgdXNhZ2VzW01BWF9VU0FHRV9DT1VOVF07CisgIHVpbnQzMl90IHVzYWdlSW5kZXggPSAwOworICAvLyAgIFRoZSBVc2FnZXMgaW4gdGhpcyBzdGFjaywgc3RvcmVkIGFzIGEgbWluaW11bSBhbmQgbWF4aW11bSB2YWx1ZS4KKyAgdWludDMyX3QgdXNhZ2VNaW4gPSAwOworICB1aW50MzJfdCB1c2FnZU1heCA9IDA7CisgIC8vICAgVGhlIHJlcG9ydCBJRC4gVGhpcyBpcyBpbXBsaWNpdGx5IHplcm8gYnkgZGVmYXVsdCwgdW50aWwgc29tZSB2YWx1ZQorICAvLyAgIHByb3ZpZGVkIGJ5IHRoZSBkZXNjcmlwdG9yLgorICB1aW50MzJfdCByZXBvcnRJZCA9IDA7CisKKyAgLy8gICBUaGUgY3VycmVudCBiaXQgb2YgdGhlIElOUFVUIHJlcG9ydCwgdXNlZCBmb3Igd3JpdGluZyB0byB0aGUKKyAgLy8gICBpbnB1dFJlcG9ydFVzYWdlcyBtYXAuCisgIHVpbnQzMl90IGlucHV0UmVwb3J0Qml0ID0gMDsKKworICAvLyBUaGVzZSB2YXJpYWJsZXMgd2lsbCBiZSAibGVhcm5lZCIgd2hpbGUgcGFyc2luZyB0aGUgcmVwb3J0IGRlc2NyaXB0b3I7CisgIC8vIHNldCB0aGVtIHRvICJ1bnNldCIgZGVmYXVsdHMgc28gdGhhdCBwYXJzaW5nIGNhbiBkZXRlY3QgaWYgYW4gaW5jb25zaXN0ZW5jeQorICAvLyBvY2N1cnMuCisgIC8vICAgU3RvcmVzIHRoZSBudW1iZXIgb2Ygb3V0cHV0IGNlbGxzIHNvIHRoYXQgYnJsdHR5IGtub3dzIGhvdyB0byBwcmVwYXJlCisgIC8vICAgb3V0cHV0IGNlbGxzLgorICBicmwtPnRleHRDb2x1bW5zID0gLTE7CisgIC8vICAgVGhlIHJlcG9ydCBJRCB0aGF0IHdpbGwgYmUgcHJvdmlkaW5nIEJyYWlsbGUgRGlzcGxheSBpbnB1dCBhbmQgb3V0cHV0LgorICBicmwtPmRhdGEtPnJlcG9ydEluZm8ucmVwb3J0SWQgPSAtMTsKKworICBjb25zdCB1bnNpZ25lZCBjaGFyICpuZXh0Qnl0ZSA9IGl0ZW1zLT5ieXRlczsKKyAgc2l6ZV90IGJ5dGVzTGVmdCA9IGl0ZW1zLT5jb3VudDsKKyAgSGlkSXRlbSBpdGVtOworICBpbnQgcGFyc2luZ0Vycm9yID0gMDsKKyAgd2hpbGUgKDEpIHsKKyAgICBpZiAoIWhpZE5leHRJdGVtKCZpdGVtLCAmbmV4dEJ5dGUsICZieXRlc0xlZnQpKSB7CisgICAgICBicmVhazsKKyAgICB9CisgICAgaWYgKGl0ZW0udGFnID09IEhJRF9JVE1fVXNhZ2VQYWdlKSB7CisgICAgICB1c2FnZVBhZ2UgPSBpdGVtLnZhbHVlLnU7CisgICAgfQorICAgIGlmIChpdGVtLnRhZyA9PSBISURfSVRNX0NvbGxlY3Rpb24pIHsKKyAgICAgIC8vIENvbGxlY3Rpb25zIGhlbHAgZGlmZmVyZW50aWF0ZSBiZXR3ZWVuIGdyb3VwaW5ncyBvZiB1c2FnZXMsIGUuZy4KKyAgICAgIC8vIGJldHdlZW4gbXVsdGlwbGUgcm93cyBvZiBvdXRwdXQgYnJhaWxsZSBjZWxscy4gQWxsIGRldmljZXMgd2UndmUgdGVzdGVkCisgICAgICAvLyBzbyBmYXIgcHJvdmlkZSB0aGVpciBCRCB1c2FnZXMgaW4gb25lIGNvbGxlY3Rpb24sIHNvIHRoaXMgZHJpdmVyIGRvZXMKKyAgICAgIC8vIG5vdCB5ZXQgc3VwcG9ydCBkaWZmZXJlbnRpYXRpbmcgYmV0d2VlbiBjb2xsZWN0aW9ucy4KKyAgICAgIC8vCisgICAgICAvLyBUaGUgdHlwZSBvZiBjb2xsZWN0aW9uIHdvdWxkIGhhdmUgYmVlbiBzcGVjaWZpZWQgYnkgdXNhZ2UgaXRlbXMgYmVmb3JlCisgICAgICAvLyB0aGlzIGNvbGxlY3Rpb24gaXRlbSwgc28gcmVzZXQgdGhlIHVzYWdlIGRhdGEgc3RydWN0dXJlIChzaW5jZSBhcyBub3RlZAorICAgICAgLy8gYWJvdmUgd2UgYXJlIGlnbm9yaW5nIGNvbGxlY3Rpb24gZGVzaWduYXRpb25zKS4KKyAgICAgIHVzYWdlSW5kZXggPSAwOworICAgIH0KKyAgICBpZiAoaXRlbS50YWcgPT0gSElEX0lUTV9SZXBvcnRJRCkgeworICAgICAgcmVwb3J0SWQgPSBpdGVtLnZhbHVlLnU7CisgICAgfQorICAgIGlmIChpdGVtLnRhZyA9PSBISURfSVRNX1VzYWdlKSB7CisgICAgICB1c2FnZU1pbiA9IHVzYWdlTWF4ID0gLTE7CisgICAgICB1aW50MzJfdCB1c2FnZSA9IGl0ZW0udmFsdWUudTsKKyAgICAgIHVzYWdlc1t1c2FnZUluZGV4KytdID0gdXNhZ2U7CisgICAgfQorICAgIGlmIChpdGVtLnRhZyA9PSBISURfSVRNX1VzYWdlTWluaW11bSkgeworICAgICAgdXNhZ2VNaW4gPSBpdGVtLnZhbHVlLnU7CisgICAgfQorICAgIGlmIChpdGVtLnRhZyA9PSBISURfSVRNX1VzYWdlTWF4aW11bSkgeworICAgICAgdXNhZ2VNYXggPSBpdGVtLnZhbHVlLnU7CisgICAgfQorICAgIGlmIChpdGVtLnRhZyA9PSBISURfSVRNX1JlcG9ydFNpemUpIHsKKyAgICAgIHJlcG9ydFNpemUgPSBpdGVtLnZhbHVlLnU7CisgICAgfQorICAgIGlmIChpdGVtLnRhZyA9PSBISURfSVRNX1JlcG9ydENvdW50KSB7CisgICAgICByZXBvcnRDb3VudCA9IGl0ZW0udmFsdWUudTsKKyAgICB9CisgICAgaWYgKGl0ZW0udGFnID09IEhJRF9JVE1fSW5wdXQgfHwgaXRlbS50YWcgPT0gSElEX0lUTV9PdXRwdXQgfHwKKyAgICAgICAgaXRlbS50YWcgPT0gSElEX0lUTV9GZWF0dXJlKSB7CisgICAgICAvLyBSZXNldCB0aGUgdXNhZ2UgaW5kZXggbm93IHRoYXQgd2UncmUgZ29pbmcgdG8gcHJvY2VzcyB0aGUgdXNhZ2VzIGFycmF5LgorICAgICAgdXNhZ2VJbmRleCA9IDA7CisgICAgICAvLyBTZXQgdGhlIEJEIHJlcG9ydCBJRCB0byB0aGUgY3VycmVudCByZXBvcnRJZC4KKyAgICAgIGlmICh1c2FnZVBhZ2UgPT0gSElEX1VQR19CcmFpbGxlKSB7CisgICAgICAgIGlmIChicmwtPmRhdGEtPnJlcG9ydEluZm8ucmVwb3J0SWQgIT0gLTEgJiYKKyAgICAgICAgICAgIGJybC0+ZGF0YS0+cmVwb3J0SW5mby5yZXBvcnRJZCAhPSByZXBvcnRJZCkgeworICAgICAgICAgIGxvZ01lc3NhZ2UoTE9HX0VSUiwKKyAgICAgICAgICAgICAgICAgICAgICJGb3VuZCBtdWx0aXBsZSByZXBvcnQgSURzIHRoYXQgaW5jbHVkZSBCcmFpbGxlIHVzYWdlcyIpOworICAgICAgICAgIHBhcnNpbmdFcnJvciA9IDE7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgYnJsLT5kYXRhLT5yZXBvcnRJbmZvLnJlcG9ydElkID0gcmVwb3J0SWQ7CisgICAgICB9CisgICAgfQorCisgICAgaWYgKGl0ZW0udGFnID09IEhJRF9JVE1fSW5wdXQpIHsKKyAgICAgIGlmIChyZXBvcnRJZCA9PSBicmwtPmRhdGEtPnJlcG9ydEluZm8ucmVwb3J0SWQpIHsKKyAgICAgICAgLy8gU2tpcCBwYXN0IGNvbnN0YW50IGJpdHMKKyAgICAgICAgaWYgKChpdGVtLnZhbHVlLnUgJiBISURfVVNHX0ZMR19DT05TVEFOVCkgPT0gSElEX1VTR19GTEdfQ09OU1RBTlQpIHsKKyAgICAgICAgICBpbnB1dFJlcG9ydEJpdCArPSByZXBvcnRTaXplICogcmVwb3J0Q291bnQ7CisgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAgICAgICAgLy8gU2tpcCBwYXN0IHVzYWdlcyBmcm9tIHVuZXhwZWN0ZWQgcGFnZXMuCisgICAgICAgIGlmICh1c2FnZVBhZ2UgIT0gSElEX1VQR19CcmFpbGxlICYmIHVzYWdlUGFnZSAhPSBISURfVVBHX0J1dHRvbikgeworICAgICAgICAgIGlucHV0UmVwb3J0Qml0ICs9IHJlcG9ydFNpemUgKiByZXBvcnRDb3VudDsKKyAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICAvLyBGYWlsIGlmIHdlIGdldCBhIHVzYWdlIG9mIHVuZXhwZWN0ZWQgdHlwZSBvciBzaXplCisgICAgICAgIGlmIChyZXBvcnRTaXplICE9IDEpIHsKKyAgICAgICAgICBsb2dNZXNzYWdlKExPR19FUlIsICJVbmV4cGVjdGVkIGlucHV0IGl0ZW0gaW5wdXQgc2l6ZSAldSAhPSAxIiwKKyAgICAgICAgICAgICAgICAgICAgIHJlcG9ydFNpemUpOworICAgICAgICAgIHBhcnNpbmdFcnJvciA9IDE7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgaWYgKChpdGVtLnZhbHVlLnUgJiBISURfVVNHX0ZMR19WQVJJQUJMRSkgIT0gSElEX1VTR19GTEdfVkFSSUFCTEUpIHsKKyAgICAgICAgICBsb2dNZXNzYWdlKExPR19FUlIsICJVbmV4cGVjdGVkIG5vbi12YXJpYWJsZSBpbnB1dCBpdGVtIik7CisgICAgICAgICAgcGFyc2luZ0Vycm9yID0gMTsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAvLyBGYWlsIGlmIHdlIGdldCBhIHVzYWdlIHJhbmdlIHRoYXQgZG9lc24ndCBtYXRjaCB0aGUgcmVwb3J0IGNvdW50CisgICAgICAgIGlmICh1c2FnZU1pbiAhPSAtMSAmJiAodXNhZ2VNaW4gKyByZXBvcnRDb3VudCAtIDEpICE9IHVzYWdlTWF4KSB7CisgICAgICAgICAgbG9nTWVzc2FnZShMT0dfRVJSLCAiSW52YWxpZCB1c2FnZSByYW5nZTogbWluPSV1IG1heD0ldSBjb3VudD0ldSIsCisgICAgICAgICAgICAgICAgICAgICB1c2FnZU1pbiwgdXNhZ2VNYXgsIHJlcG9ydENvdW50KTsKKyAgICAgICAgICBwYXJzaW5nRXJyb3IgPSAxOworICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGlmIChpbnB1dFJlcG9ydEJpdCA+IE1BWF9JTlBVVF9TSVpFKSB7CisgICAgICAgICAgbG9nTWVzc2FnZShMT0dfRVJSLCAiVW5leHBlY3RlZCBpbnB1dCByZXBvcnQgd2l0aCBtb3JlIHRoYW4gJXUgYml0cyIsCisgICAgICAgICAgICAgICAgICAgICBNQVhfSU5QVVRfU0laRSk7CisgICAgICAgICAgcGFyc2luZ0Vycm9yID0gMTsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHJlcG9ydENvdW50OyBpKyspIHsKKyAgICAgICAgICBpZiAodXNhZ2VNaW4gIT0gLTEpIHsKKyAgICAgICAgICAgIGJybC0+ZGF0YS0+cmVwb3J0SW5mby5pbnB1dFJlcG9ydFVzYWdlc1tpbnB1dFJlcG9ydEJpdCsrXSA9CisgICAgICAgICAgICAgICAgdXNhZ2VNaW4rKzsKKyAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgYnJsLT5kYXRhLT5yZXBvcnRJbmZvLmlucHV0UmVwb3J0VXNhZ2VzW2lucHV0UmVwb3J0Qml0KytdID0KKyAgICAgICAgICAgICAgICB1c2FnZXNbaV07CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICB9CisgICAgfQorICAgIGlmIChpdGVtLnRhZyA9PSBISURfSVRNX091dHB1dCkgeworICAgICAgaWYgKHVzYWdlUGFnZSA9PSBISURfVVBHX0JyYWlsbGUpIHsKKyAgICAgICAgaWYgKHJlcG9ydElkICE9IGJybC0+ZGF0YS0+cmVwb3J0SW5mby5yZXBvcnRJZCkgeworICAgICAgICAgIGxvZ01lc3NhZ2UoTE9HX0VSUiwKKyAgICAgICAgICAgICAgICAgICAgICJVbmV4cGVjdGVkIGRpZmZlcmluZyBvdXRwdXQgYW5kIGlucHV0IHJlcG9ydCBJRHMiKTsKKyAgICAgICAgICBwYXJzaW5nRXJyb3IgPSAxOworICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGlmIChyZXBvcnRTaXplICE9IDgpIHsKKyAgICAgICAgICBsb2dNZXNzYWdlKExPR19FUlIsICJJbnZhbGlkIG91dHB1dCBiaXQgc2l6ZSAldSIsIHJlcG9ydFNpemUpOworICAgICAgICAgIHBhcnNpbmdFcnJvciA9IDE7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGJybC0+dGV4dENvbHVtbnMgIT0gLTEpIHsKKyAgICAgICAgICBsb2dNZXNzYWdlKExPR19FUlIsICJVbmV4cGVjdGVkIHJlY2VpdmVkIG11bHRpcGxlIEJEIG91dHB1dCByZXBvcnRzIik7CisgICAgICAgICAgcGFyc2luZ0Vycm9yID0gMTsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBicmwtPnRleHRDb2x1bW5zID0gcmVwb3J0Q291bnQ7CisgICAgICB9CisgICAgfQorICB9CisgIGZyZWUoaXRlbXMpOworICBpZiAocGFyc2luZ0Vycm9yKSB7CisgICAgbG9nTWVzc2FnZShMT0dfRVJSLCAiVGhlcmUgd2VyZSBwYXJzaW5nIGVycm9ycy4iKTsKKyAgICByZXR1cm4gMDsKKyAgfQorICBpZiAoYnJsLT5kYXRhLT5yZXBvcnRJbmZvLnJlcG9ydElkID09IC0xKSB7CisgICAgbG9nTWVzc2FnZShMT0dfRVJSLCAiQ291bGQgbm90IGZpbmQgYSBCcmFpbGxlIERpc3BsYXkgcmVwb3J0IElEIik7CisgICAgcmV0dXJuIDA7CisgIH0KKyAgaWYgKGJybC0+dGV4dENvbHVtbnMgPT0gLTEpIHsKKyAgICBsb2dNZXNzYWdlKExPR19FUlIsICJDb3VsZCBub3QgZmluZCB0aGUgQnJhaWxsZSBEaXNwbGF5IG91dHB1dCBjZWxsIGNvdW50Iik7CisgICAgcmV0dXJuIDA7CisgIH0KKyAgZm9yIChpbnQgaSA9IDA7IGkgPCBNQVhfSU5QVVRfU0laRTsgaSsrKSB7CisgICAgbG9nTWVzc2FnZShMT0dfREVCVUcsICJiaXQ9JWQgcmVwb3J0PSVpIiwgaSwKKyAgICAgICAgICAgICAgIGJybC0+ZGF0YS0+cmVwb3J0SW5mby5pbnB1dFJlcG9ydFVzYWdlc1tpXSk7CisKKyAgICAvLyBXaGlsZSBwYXJzaW5nIHRoZSBkZXNjcmlwdCB3ZSBidWlsdCB1cCBtYXAgaW5wdXRSZXBvcnRVc2FnZXMgZnJvbQorICAgIC8vIGJpdC0+dXNhZ2UuIEhvd2V2ZXIsIGJybHR0eSBkb2Vzbid0IHVzZSB1c2FnZXMgdG8gZGVzY3JpYmUga2V5IGV2ZW50czoKKyAgICAvLyBicmx0dHkgdXNlcyBhIGtleSB0YWJsZSB0aGF0IHdhcyBwcm92aWRlZCBieSBicmxfY29uc3RydWN0LiBUaGlzIGxvZ2ljCisgICAgLy8gYnVpbGRzIHVwIGEgbmV3IG1hcCBmcm9tIGJpdC0+a2V5IHdoZXJlIHRoZSBrZXkgdmFsdWVzIGNvbWUgZnJvbSB0aGUga2V5CisgICAgLy8gdGFibGUgdGhhdCB3ZSBwcm92aWRlZCB0byBicmx0dHkuIFRoaXMgYWxsb3dzIHRoZSBkcml2ZXIgdG8gbWFwIGZyb20KKyAgICAvLyBJTlBVVCBiaXQgdG8gdGhlIGJybHR0eS1rbm93biBrZXkgbmFtZS4KKyAgICBmb3IgKGludCBqID0gMDsgaiA8IEtFWV9NQVBfQ09VTlQ7IGorKykgeworICAgICAgaWYgKEtFWV9NQVBbal1bMF0gPT0gYnJsLT5kYXRhLT5yZXBvcnRJbmZvLmlucHV0UmVwb3J0VXNhZ2VzW2ldKSB7CisgICAgICAgIGJybC0+ZGF0YS0+cmVwb3J0SW5mby5pbnB1dFJlcG9ydEtleXNbaV0gPSBLRVlfTUFQW2pdWzFdOworICAgICAgfQorICAgIH0KKyAgICAvLyBSb3V0aW5nIGtleXMgYXJlIGhhbmRsZWQgZGlmZmVyZW50bHkuIFRoZXkgYWxsIHVzZSB0aGUgc2FtZSB1c2FnZSwKKyAgICAvLyB3aGlsZSB0aGVpciBiaXQgbnVtYmVyIChzdGFydGluZyBmcm9tIHRoZSBmaXJzdCBvbmUpIGRlZmluZXMgdGhlIGFjdHVhbAorICAgIC8vIHJvdXRpbmcga2V5IG51bWJlci4KKyAgICBpZiAoYnJsLT5kYXRhLT5yZXBvcnRJbmZvLmlucHV0UmVwb3J0VXNhZ2VzW2ldID09IEhJRF9VU0dfQlJMX1JvdXRlcktleSkgeworICAgICAgaWYgKGJybC0+ZGF0YS0+cmVwb3J0SW5mby5pbnB1dFJvdXRpbmdGaXJzdEJpdCA9PSAtMSkgeworICAgICAgICBicmwtPmRhdGEtPnJlcG9ydEluZm8uaW5wdXRSb3V0aW5nRmlyc3RCaXQgPSBpOworICAgICAgfSBlbHNlIGlmIChicmwtPmRhdGEtPnJlcG9ydEluZm8uaW5wdXRSZXBvcnRVc2FnZXNbaSAtIDFdICE9CisgICAgICAgICAgICAgICAgIEhJRF9VU0dfQlJMX1JvdXRlcktleSkgeworICAgICAgICAvLyBFeHBlY3QgdGhhdCBhbGwgcm91dGluZyBrZXkgSU5QVVRzIGFyZSBzZW50IGFzIGEgY29udGlndW91cyBncm91cCwgc28KKyAgICAgICAgLy8gcmV0dXJuIGVycm9yIGlmIHRoZSBkZXNjcmlwdG9yIGRlc2NyaWJlcyBzb21ldGhpbmcgbGlrZSAiLi4uIFJPVVRJTkcKKyAgICAgICAgLy8gRE9UMSBST1VUSU5HIC4uLiIuCisgICAgICAgIGxvZ01lc3NhZ2UoTE9HX0VSUiwKKyAgICAgICAgICAgICAgICAgICAiVW5leHBlY3RlZCBub24tY29udGlndW91cyBncm91cCBvZiByb3V0ZXIga2V5cyBhdCAiCisgICAgICAgICAgICAgICAgICAgIiVkIHdpdGggcHJldmlvdXMgZW50cnkgJXUgYW5kIGZpcnN0IGJpdCAlZCIsCisgICAgICAgICAgICAgICAgICAgaSwgYnJsLT5kYXRhLT5yZXBvcnRJbmZvLmlucHV0UmVwb3J0VXNhZ2VzW2kgLSAxXSwKKyAgICAgICAgICAgICAgICAgICBicmwtPmRhdGEtPnJlcG9ydEluZm8uaW5wdXRSb3V0aW5nRmlyc3RCaXQpOworICAgICAgICByZXR1cm4gMDsKKyAgICAgIH0KKyAgICB9CisgIH0KKworICBpbnQgaW5wdXRTaXplQnl0ZXMgPSAoaW5wdXRSZXBvcnRCaXQgKyA3KSAvIDg7CisgIGludCBoYXNOdW1iZXJlZFJlcG9ydCA9IGJybC0+ZGF0YS0+cmVwb3J0SW5mby5yZXBvcnRJZCAhPSAwOworICBpZiAoaGFzTnVtYmVyZWRSZXBvcnQgIT0gMCkgeworICAgIC8vIFRoZSBmaXJzdCBieXRlIG9mIGlucHV0IHNob3VsZCBjb250YWluIHRoZSByZXBvcnQgSUQsIHRoZW4gYWxsIG90aGVyCisgICAgLy8gYnl0ZXMgc2hvdWxkIGJlIHBhcnNlZCBhcyBpbnB1dC4KKyAgICBicmwtPmRhdGEtPnJlcG9ydEluZm8uaW5wdXRTaXplQnl0ZXMgPSBpbnB1dFNpemVCeXRlcyArIDE7CisgIH0gZWxzZSB7CisgICAgLy8gVGhlIGVudGlyZSBpbnB1dCByZXBvcnQgc2hvdWxkIGJlIHBhcnNlZCBhcyBpbnB1dC4KKyAgICBicmwtPmRhdGEtPnJlcG9ydEluZm8uaW5wdXRTaXplQnl0ZXMgPSBpbnB1dFNpemVCeXRlczsKKyAgfQorICAvLyBaZXJvLW91dCB0aGUgaW5wdXQga2V5IG1hc2sgdXNlZCB0byB0cmFjayB0aGUgY3VycmVudCBzdGF0ZSBvZiBpbnB1dCBrZXkKKyAgLy8gcHJlc3Nlcy4KKyAgQklUTUFTS19aRVJPKGJybC0+ZGF0YS0+cHJlc3NlZEtleXMubWFzayk7CisgIHJldHVybiAxOworfQorCisvLyBFbnF1ZXVlcyBhIGtleSBldmVudCB0byBicmx0dHkncyBpbnRlcm5hbCBrZXkgcHJvY2Vzc2luZyBsb2dpYy4KKy8vIGJybHR0eSB3YWl0cyBmb3IgYWxsIGtleXMgdG8gYmUgcmVsZWFzZWQsIHRoZW4gbG9va3MgYXQgdGhlIGNvbWJpbmVkIHNldCBvZgorLy8ga2V5LWRvd24gZXZlbnRzIHRvIHVuZGVyc3RhbmQgd2hhdCBrZXkgY29tYmluYXRpb24gd2FzIHByZXNzZWQgYnkgbG9va2luZworLy8gdXAgcG9zc2libGUga2V5IGNvbWJpbmF0aW9ucyBmcm9tIHRoZSBISUQua3RiIGtleXRhYmxlLgorc3RhdGljIGludCBoYW5kbGVLZXlFdmVudChCcmFpbGxlRGlzcGxheSAqYnJsLCB1bnNpZ25lZCBjaGFyIGtleSwgaW50IHByZXNzKSB7CisgIEtleUdyb3VwIGdyb3VwOworICBpZiAoa2V5IDwgSElEX0tFWV9ST1VUSU5HKSB7CisgICAgZ3JvdXAgPSBISURfR1JQX05hdmlnYXRpb25LZXlzOworICB9IGVsc2UgeworICAgIGdyb3VwID0gSElEX0dSUF9Sb3V0aW5nS2V5czsKKyAgICBrZXkgLT0gSElEX0tFWV9ST1VUSU5HOworICB9CisgIHJldHVybiBlbnF1ZXVlS2V5RXZlbnQoYnJsLCBncm91cCwga2V5LCBwcmVzcyk7Cit9CisKKy8vIFBvc3NpYmx5IGVucXVldWVzIGEga2V5LWRvd24gYWN0aW9uLgorc3RhdGljIGludCBoYW5kbGVLZXlQcmVzcyhCcmFpbGxlRGlzcGxheSAqYnJsLCB1bnNpZ25lZCBjaGFyIGtleSkgeworICBpZiAoQklUTUFTS19URVNUKGJybC0+ZGF0YS0+cHJlc3NlZEtleXMubWFzaywga2V5KSkgcmV0dXJuIDA7CisKKyAgQklUTUFTS19TRVQoYnJsLT5kYXRhLT5wcmVzc2VkS2V5cy5tYXNrLCBrZXkpOworICBicmwtPmRhdGEtPnByZXNzZWRLZXlzLmNvdW50ICs9IDE7CisKKyAgaGFuZGxlS2V5RXZlbnQoYnJsLCBrZXksIDEpOworICByZXR1cm4gMTsKK30KKworLy8gUG9zc2libHkgZW5xdWV1ZXMgYSBrZXktYWN0aW9uIGFjdGlvbi4KK3N0YXRpYyBpbnQgaGFuZGxlS2V5UmVsZWFzZShCcmFpbGxlRGlzcGxheSAqYnJsLCB1bnNpZ25lZCBjaGFyIGtleSkgeworICBpZiAoIUJJVE1BU0tfVEVTVChicmwtPmRhdGEtPnByZXNzZWRLZXlzLm1hc2ssIGtleSkpIHJldHVybiAwOworCisgIEJJVE1BU0tfQ0xFQVIoYnJsLT5kYXRhLT5wcmVzc2VkS2V5cy5tYXNrLCBrZXkpOworICBicmwtPmRhdGEtPnByZXNzZWRLZXlzLmNvdW50IC09IDE7CisKKyAgaGFuZGxlS2V5RXZlbnQoYnJsLCBrZXksIDApOworICByZXR1cm4gMTsKK30KKworLy8gUGFyc2VzIGEgSElEIGlucHV0IHJlcG9ydCBpbnRvIGJybHR0eSBrZXkgYWN0aW9ucy4KKy8vIENhbGxlZCBieSBicmx0dHkgd2hlbiBpdCB3YW50cyB0byBwYXJzZSBhbiBpbnB1dCBieXRlIGFycmF5Lgorc3RhdGljIHZvaWQgaGFuZGxlUHJlc3NlZEtleXNBcnJheShCcmFpbGxlRGlzcGxheSAqYnJsLCB1bnNpZ25lZCBjaGFyICprZXlzKSB7CisgIC8vIFBlciBISURSQVcgc3BlYyBpZiBpbnB1dCBkZXNjcmlwdG9yIHJlcG9ydCBudW1iZXIgaXMgbm90IHplcm8gdGhlbiB0aGUKKyAgLy8gZmlyc3QgYnl0ZSBpbiB0aGUgaW5wdXQgc2hvdWxkIGJlIHRoZSByZXBvcnQgbnVtYmVyLgorICBpbnQgaGFzTnVtYmVyZWRSZXBvcnQgPSBicmwtPmRhdGEtPnJlcG9ydEluZm8ucmVwb3J0SWQgIT0gMDsKKyAgaWYgKGhhc051bWJlcmVkUmVwb3J0ICYmIGtleXNbMF0gIT0gYnJsLT5kYXRhLT5yZXBvcnRJbmZvLnJlcG9ydElkKSB7CisgICAgbG9nTWVzc2FnZShMT0dfV0FSTklORywgIlVuZXhwZWN0ZWQgaW5wdXQgcmVwb3J0ICV1Iiwga2V5c1swXSk7CisgICAgcmV0dXJuOworICB9CisKKyAgaW50IG51bUlucHV0Qnl0ZXMgPSBoYXNOdW1iZXJlZFJlcG9ydAorICAgICAgICAgICAgICAgICAgICAgICAgICA/IGJybC0+ZGF0YS0+cmVwb3J0SW5mby5pbnB1dFNpemVCeXRlcyAtIDEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgOiBicmwtPmRhdGEtPnJlcG9ydEluZm8uaW5wdXRTaXplQnl0ZXM7CisgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ5dGUgPSBoYXNOdW1iZXJlZFJlcG9ydCA/IGtleXMgKyAxIDoga2V5czsKKyAgZm9yIChpbnQgYnl0ZU51bSA9IDA7IGJ5dGVOdW0gPCBudW1JbnB1dEJ5dGVzOyBieXRlTnVtKyspIHsKKyAgICBmb3IgKGludCBiaXQgPSAwOyBiaXQgPD0gNzsgYml0KyspIHsKKyAgICAgIGludCBiaXROdW0gPSBieXRlTnVtICogOCArIGJpdDsKKyAgICAgIGNoYXIga2V5OworICAgICAgaWYgKGJybC0+ZGF0YS0+cmVwb3J0SW5mby5pbnB1dFJlcG9ydFVzYWdlc1tiaXROdW1dID09CisgICAgICAgICAgSElEX1VTR19CUkxfUm91dGVyS2V5KSB7CisgICAgICAgIGludCByb3V0aW5nS2V5TnVtID0gYml0TnVtIC0gYnJsLT5kYXRhLT5yZXBvcnRJbmZvLmlucHV0Um91dGluZ0ZpcnN0Qml0OworICAgICAgICBrZXkgPSBISURfS0VZX1JPVVRJTkcgKyByb3V0aW5nS2V5TnVtOworICAgICAgfSBlbHNlIHsKKyAgICAgICAga2V5ID0gYnJsLT5kYXRhLT5yZXBvcnRJbmZvLmlucHV0UmVwb3J0S2V5c1tiaXROdW1dOworICAgICAgfQorICAgICAgaWYgKGtleSAhPSAwKSB7CisgICAgICAgIGlmICgoKmJ5dGUpICYgKDEgPDwgYml0KSkgeworICAgICAgICAgIGxvZ01lc3NhZ2UoTE9HX0RFQlVHLCAiUHJlc3NlZCBiaXQgJWQgdXNhZ2UgJXUiLCBiaXROdW0sCisgICAgICAgICAgICAgICAgICAgICBicmwtPmRhdGEtPnJlcG9ydEluZm8uaW5wdXRSZXBvcnRVc2FnZXNbYml0TnVtXSk7CisgICAgICAgICAgaGFuZGxlS2V5UHJlc3MoYnJsLCBrZXkpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgIGhhbmRsZUtleVJlbGVhc2UoYnJsLCBrZXkpOworICAgICAgICB9CisgICAgICB9CisgICAgfQorICAgIGJ5dGUrKzsKKyAgfQorfQorCitzdGF0aWMgaW50IHdyaXRlSGlkQ2VsbHMoQnJhaWxsZURpc3BsYXkgKmJybCwgY29uc3QgdW5zaWduZWQgY2hhciAqY2VsbHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciBjZWxsQ291bnQpIHsKKyAgLy8gSElEUkFXIGV4cGVjdHMgdGhlIHJlcG9ydCBJRCBpbiB0aGUgZmlyc3QgYnl0ZSwgZm9sbG93ZWQgYnkgdGhlCisgIC8vIG91dHB1dCByZXBvcnQuCisgIGludCBidWZmZXJTaXplID0gY2VsbENvdW50ICsgMTsKKyAgdW5zaWduZWQgY2hhciBidWZmZXJbYnVmZmVyU2l6ZV07CisgIGJ1ZmZlclswXSA9IGJybC0+ZGF0YS0+cmVwb3J0SW5mby5yZXBvcnRJZDsKKyAgbWVtY3B5KGJ1ZmZlciArIDEsIGNlbGxzLCBjZWxsQ291bnQpOworICByZXR1cm4gYnJsLT5naW9FbmRwb2ludC0+aGFuZGxlTWV0aG9kcy0+d3JpdGVEYXRhKAorICAgICAgYnJsLT5naW9FbmRwb2ludC0+aGFuZGxlLCBidWZmZXIsIGJ1ZmZlclNpemUsIC8qdGltZW91dD0qLzApOworfQorCisvLyBTdGFuZGFyZCBmdW5jdGlvbnMgZXhwZWN0ZWQgYnkgYnJsdHR5IGZvciBhbnkgYnJsdHR5IGRyaXZlci4gVGhlc2Ugd2VyZQorLy8gZXNzZW50aWFsbHkgY29waWVkIHRoZSBIdW1hbndhcmUgZHJpdmVyIHdpdGggbWluaW1hbCBtb2RpZmljYXRpb25zLgorCitzdGF0aWMgaW50IGNvbm5lY3RSZXNvdXJjZShCcmFpbGxlRGlzcGxheSAqYnJsLCBjb25zdCBjaGFyICppZGVudGlmaWVyKSB7CisgIHN0YXRpYyBjb25zdCBIaWRNb2RlbEVudHJ5IGhpZE1vZGVsVGFibGVbXSA9IHsKKyAgICAgIHsKKyAgICAgICAgICAvLyBNb2RlbCBuYW1lIGlzIG5vdCB1c2VkIHRvIGNvbnRyb2wgZHJpdmVyIGJlaGF2aW9yLCBzbyBhbHdheXMKKyAgICAgICAgICAvLyBleHBlY3QgIkhJRCIgYXMgc2V0IGJ5IGhpZF9hbmRyb2lkLmMjZ2V0R2VuZXJpY0hJRERldmljZU5hbWUoKS4KKyAgICAgICAgICAubmFtZSA9ICJISUQiLAorICAgICAgfSwKKyAgICAgIHsubmFtZSA9IE5VTEwsIC52ZW5kb3IgPSAwfX07CisKKyAgR2lvRGVzY3JpcHRvciBkZXNjcmlwdG9yOworICBnaW9Jbml0aWFsaXplRGVzY3JpcHRvcigmZGVzY3JpcHRvcik7CisgIGRlc2NyaXB0b3IuaGlkLm1vZGVsVGFibGUgPSBoaWRNb2RlbFRhYmxlOworICByZXR1cm4gY29ubmVjdEJyYWlsbGVSZXNvdXJjZShicmwsIGlkZW50aWZpZXIsICZkZXNjcmlwdG9yLCBOVUxMKSA/IDEgOiAwOworfQorCitzdGF0aWMgaW50IGJybF9jb25zdHJ1Y3QoQnJhaWxsZURpc3BsYXkgKmJybCwgY2hhciAqKnBhcmFtZXRlcnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZGV2aWNlKSB7CisgIGlmICgoYnJsLT5kYXRhID0gbWFsbG9jKHNpemVvZigqYnJsLT5kYXRhKSkpKSB7CisgICAgbWVtc2V0KGJybC0+ZGF0YSwgMCwgc2l6ZW9mKCpicmwtPmRhdGEpKTsKKworICAgIGlmIChjb25uZWN0UmVzb3VyY2UoYnJsLCBkZXZpY2UpKSB7CisgICAgICBIaWRJdGVtc0Rlc2NyaXB0b3IgKml0ZW1zID0KKyAgICAgICAgICBicmwtPmdpb0VuZHBvaW50LT5oYW5kbGVNZXRob2RzLT5nZXRIaWREZXNjcmlwdG9yKAorICAgICAgICAgICAgICBicmwtPmdpb0VuZHBvaW50LT5oYW5kbGUpOworICAgICAgaWYgKHByb2JlSGlkRGlzcGxheShicmwsIGl0ZW1zKSkgeworICAgICAgICBzZXRCcmFpbGxlS2V5VGFibGUoYnJsLCAma2V5VGFibGVEZWZpbml0aW9uX0hJRCk7CisgICAgICAgIG1ha2VPdXRwdXRUYWJsZShkb3RzVGFibGVfSVNPMTE1NDhfMSk7CisgICAgICAgIGJybC0+ZGF0YS0+dGV4dC5yZXdyaXRlID0gMTsKKyAgICAgICAgcmV0dXJuIDE7CisgICAgICB9CisgICAgICBkaXNjb25uZWN0QnJhaWxsZVJlc291cmNlKGJybCwgTlVMTCk7CisgICAgfQorICAgIGZyZWUoYnJsLT5kYXRhKTsKKyAgICBicmwtPmRhdGEgPSBOVUxMOworICB9IGVsc2UgeworICAgIGxvZ01hbGxvY0Vycm9yKCk7CisgIH0KKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGJybF9kZXN0cnVjdChCcmFpbGxlRGlzcGxheSAqYnJsKSB7CisgIGRpc2Nvbm5lY3RCcmFpbGxlUmVzb3VyY2UoYnJsLCBOVUxMKTsKKyAgZnJlZShicmwtPmRhdGEpOworfQorCisvLyBDYWxsZWQgYnkgYnJsdHR5IHdoZW4gaXQgd2FudHMgdG8gd3JpdGUgb3V0cHV0IHRvIHRoZSBCcmFpbGxlIGRpc3BsYXkuCitzdGF0aWMgaW50IGJybF93cml0ZVdpbmRvdyhCcmFpbGxlRGlzcGxheSAqYnJsLCBjb25zdCB3Y2hhcl90ICp0ZXh0KSB7CisgIGNvbnN0IHNpemVfdCBjb3VudCA9IGJybC0+dGV4dENvbHVtbnM7CisgIGlmIChjZWxsc0hhdmVDaGFuZ2VkKGJybC0+ZGF0YS0+dGV4dC5jZWxscywgYnJsLT5idWZmZXIsIGNvdW50LCBOVUxMLCBOVUxMLAorICAgICAgICAgICAgICAgICAgICAgICAmYnJsLT5kYXRhLT50ZXh0LnJld3JpdGUpKSB7CisgICAgdW5zaWduZWQgY2hhciBjZWxsc1tjb3VudF07CisKKyAgICB0cmFuc2xhdGVPdXRwdXRDZWxscyhjZWxscywgYnJsLT5kYXRhLT50ZXh0LmNlbGxzLCBjb3VudCk7CisgICAgaWYgKCF3cml0ZUhpZENlbGxzKGJybCwgY2VsbHMsIGNvdW50KSkgcmV0dXJuIDA7CisgIH0KKyAgcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQgYnJsX3JlYWRDb21tYW5kKEJyYWlsbGVEaXNwbGF5ICpicmwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBLZXlUYWJsZUNvbW1hbmRDb250ZXh0IGNvbnRleHQpIHsKKyAgdW5zaWduZWQgY2hhciBwYWNrZXRbTUFYX0lOUFVUX1NJWkVdOworICB3aGlsZSAoMSkgeworICAgIHNpemVfdCBsZW5ndGggPSBicmwtPmdpb0VuZHBvaW50LT5oYW5kbGVNZXRob2RzLT5yZWFkRGF0YSgKKyAgICAgICAgYnJsLT5naW9FbmRwb2ludC0+aGFuZGxlLCBwYWNrZXQsIE1BWF9JTlBVVF9TSVpFLAorICAgICAgICAvKmluaXRpYWxUaW1lb3V0IHVudXNlZCovIDAsIC8qc3Vic2VxdWVudFRpbWVvdXQgdW51c2VkKi8gMCk7CisgICAgaWYgKGxlbmd0aCA9PSAwKSB7CisgICAgICBicmVhazsKKyAgICB9CisgICAgaGFuZGxlUHJlc3NlZEtleXNBcnJheShicmwsIHBhY2tldCk7CisgIH0KKyAgcmV0dXJuIEVPRjsKK30KZGlmZiAtLWdpdCBhL0RyaXZlcnMvQnJhaWxsZS9ISUQvYnJsZGVmcy1oaWQuaCBiL0RyaXZlcnMvQnJhaWxsZS9ISUQvYnJsZGVmcy1oaWQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZTBjOTk4Ci0tLSAvZGV2L251bGwKKysrIGIvRHJpdmVycy9CcmFpbGxlL0hJRC9icmxkZWZzLWhpZC5oCkBAIC0wLDAgKzEsOTcgQEAKKyNpZm5kZWYgQlJMVFRZX0lOQ0xVREVEX0hJRF9CUkxERUZTCisjZGVmaW5lIEJSTFRUWV9JTkNMVURFRF9ISURfQlJMREVGUworCisjaW5jbHVkZSAidGhpcmRfcGFydHkvYnJsdHR5L0hlYWRlcnMvaGlkX2RlZnMuaCIKKyNpbmNsdWRlICJ0aGlyZF9wYXJ0eS9icmx0dHkvSGVhZGVycy9rdGJfdHlwZXMuaCIKKworI2RlZmluZSBNQVhfSU5QVVRfU0laRSAwWEZGCisjZGVmaW5lIE1BWF9PVVRQVVRfU0laRSAwWEZGCisjZGVmaW5lIE1BWF9VU0FHRV9DT1VOVCAweEZGCisjZGVmaW5lIE1BWElNVU1fS0VZX1ZBTFVFIDBYRkYKKyNkZWZpbmUgS0VZU19CSVRNQVNLKG5hbWUpIEJJVE1BU0sobmFtZSwgKE1BWElNVU1fS0VZX1ZBTFVFICsgMSksIGludCkKKworLy8gRW51bSBvZiBLZXkgdmFsdWVzIHRoYXQgYXJlIHVzZWQgYnkgdGhlIEtFWVNfQklUTUFTSyBpbiBvcmRlciB0byB0cmFjaworLy8gd2hpY2gga2V5cyBhcmUgY3VycmVudGx5IHByZXNzZWQuIFRoZSBzcGVjaWZpYyB2YWx1ZXMgYXJlIG1lYW5pbmdsZXNzIGFuZAorLy8gb25seSBzZXJ2ZSBhcyBhIHRlbXBvcmFyeSBpZGVudGlmaWVyIGluIHRoZSBpbnB1dCBwYXJzaW5nIGxvZ2ljLgordHlwZWRlZiBlbnVtIHsKKyAgSElEX0tFWV9Eb3QxID0gMSwKKyAgSElEX0tFWV9Eb3QyLAorICBISURfS0VZX0RvdDMsCisgIEhJRF9LRVlfRG90NCwKKyAgSElEX0tFWV9Eb3Q1LAorICBISURfS0VZX0RvdDYsCisgIEhJRF9LRVlfRG90NywKKyAgSElEX0tFWV9Eb3Q4LAorICBISURfS0VZX1NwYWNlLAorCisgIEhJRF9LRVlfUGFuTGVmdCwKKyAgSElEX0tFWV9QYW5SaWdodCwKKworICBISURfS0VZX0RQYWRVcCwKKyAgSElEX0tFWV9EUGFkRG93biwKKyAgSElEX0tFWV9EUGFkTGVmdCwKKyAgSElEX0tFWV9EUGFkUmlnaHQsCisgIEhJRF9LRVlfRFBhZENlbnRlciwKKworICBISURfS0VZX1JvY2tlclVwLAorICBISURfS0VZX1JvY2tlckRvd24sCisKKyAgSElEX0tFWV9ST1VUSU5HLAorfSBISURfS2V5czsKKworLy8gTWFwcyBmcm9tIG9mZmljaWFsIEJyYWlsbGUgRGlzcGxheSBISUQgdXNhZ2VzIHRvIHRoZSBjdXN0b20gS2V5IGVudW0uCitpbnQgS0VZX01BUFtdWzJdID0geworICAgIHtISURfVVNHX0JSTF9LZXlib2FyZERvdDEsIEhJRF9LRVlfRG90MX0sCisgICAge0hJRF9VU0dfQlJMX0tleWJvYXJkRG90MiwgSElEX0tFWV9Eb3QyfSwKKyAgICB7SElEX1VTR19CUkxfS2V5Ym9hcmREb3QzLCBISURfS0VZX0RvdDN9LAorICAgIHtISURfVVNHX0JSTF9LZXlib2FyZERvdDQsIEhJRF9LRVlfRG90NH0sCisgICAge0hJRF9VU0dfQlJMX0tleWJvYXJkRG90NSwgSElEX0tFWV9Eb3Q1fSwKKyAgICB7SElEX1VTR19CUkxfS2V5Ym9hcmREb3Q2LCBISURfS0VZX0RvdDZ9LAorICAgIHtISURfVVNHX0JSTF9LZXlib2FyZERvdDcsIEhJRF9LRVlfRG90N30sCisgICAge0hJRF9VU0dfQlJMX0tleWJvYXJkRG90OCwgSElEX0tFWV9Eb3Q4fSwKKyAgICB7SElEX1VTR19CUkxfS2V5Ym9hcmRTcGFjZSwgSElEX0tFWV9TcGFjZX0sCisgICAge0hJRF9VU0dfQlJMX1BhbkxlZnQsIEhJRF9LRVlfUGFuTGVmdH0sCisgICAge0hJRF9VU0dfQlJMX1BhblJpZ2h0LCBISURfS0VZX1BhblJpZ2h0fSwKKyAgICB7SElEX1VTR19CUkxfRFBhZFVwLCBISURfS0VZX0RQYWRVcH0sCisgICAge0hJRF9VU0dfQlJMX0RQYWREb3duLCBISURfS0VZX0RQYWREb3dufSwKKyAgICB7SElEX1VTR19CUkxfRFBhZExlZnQsIEhJRF9LRVlfRFBhZExlZnR9LAorICAgIHtISURfVVNHX0JSTF9EUGFkUmlnaHQsIEhJRF9LRVlfRFBhZFJpZ2h0fSwKKyAgICB7SElEX1VTR19CUkxfRFBhZENlbnRlciwgSElEX0tFWV9EUGFkQ2VudGVyfSwKKyAgICB7SElEX1VTR19CUkxfUm9ja2VyVXAsIEhJRF9LRVlfUm9ja2VyVXB9LAorICAgIHtISURfVVNHX0JSTF9Sb2NrZXJEb3duLCBISURfS0VZX1JvY2tlckRvd259LAorICAgIC8vIFJvdXRlciBrZXlzIGFyZSBoYW5kbGVkIHNlcGFyYXRlbHkuCit9OworaW50IEtFWV9NQVBfQ09VTlQgPSBzaXplb2YoS0VZX01BUCkgLyBzaXplb2YoS0VZX01BUFswXSk7CisKK3R5cGVkZWYgZW51bSB7IEhJRF9HUlBfTmF2aWdhdGlvbktleXMgPSAwLCBISURfR1JQX1JvdXRpbmdLZXlzIH0gSElEX0tFWUdyb3VwOworCisvLyBNYXBzIGZyb20gdGhlIEtleSBlbnVtIHRvIGEgdGV4dHVhbCBLZXkgbmFtZSB1c2VkIGJ5IHRoZSBISUQua3RiIGtleXRhYmxlLgorc3RhdGljIGNvbnN0IEtleU5hbWVFbnRyeSBrZXlOYW1lVGFibGVbXSA9IHsKKyAgICB7LnZhbHVlLm51bWJlciA9IEhJRF9LRVlfRG90MSwgLm5hbWUgPSAiRG90MSJ9LAorICAgIHsudmFsdWUubnVtYmVyID0gSElEX0tFWV9Eb3QyLCAubmFtZSA9ICJEb3QyIn0sCisgICAgey52YWx1ZS5udW1iZXIgPSBISURfS0VZX0RvdDMsIC5uYW1lID0gIkRvdDMifSwKKyAgICB7LnZhbHVlLm51bWJlciA9IEhJRF9LRVlfRG90NCwgLm5hbWUgPSAiRG90NCJ9LAorICAgIHsudmFsdWUubnVtYmVyID0gSElEX0tFWV9Eb3Q1LCAubmFtZSA9ICJEb3Q1In0sCisgICAgey52YWx1ZS5udW1iZXIgPSBISURfS0VZX0RvdDYsIC5uYW1lID0gIkRvdDYifSwKKyAgICB7LnZhbHVlLm51bWJlciA9IEhJRF9LRVlfRG90NywgLm5hbWUgPSAiRG90NyJ9LAorICAgIHsudmFsdWUubnVtYmVyID0gSElEX0tFWV9Eb3Q4LCAubmFtZSA9ICJEb3Q4In0sCisgICAgey52YWx1ZS5udW1iZXIgPSBISURfS0VZX1NwYWNlLCAubmFtZSA9ICJTcGFjZSJ9LAorICAgIHsudmFsdWUubnVtYmVyID0gSElEX0tFWV9QYW5MZWZ0LCAubmFtZSA9ICJQYW5MZWZ0In0sCisgICAgey52YWx1ZS5udW1iZXIgPSBISURfS0VZX1BhblJpZ2h0LCAubmFtZSA9ICJQYW5SaWdodCJ9LAorICAgIHsudmFsdWUubnVtYmVyID0gSElEX0tFWV9EUGFkVXAsIC5uYW1lID0gIkRQYWRVcCJ9LAorICAgIHsudmFsdWUubnVtYmVyID0gSElEX0tFWV9EUGFkRG93biwgLm5hbWUgPSAiRFBhZERvd24ifSwKKyAgICB7LnZhbHVlLm51bWJlciA9IEhJRF9LRVlfRFBhZExlZnQsIC5uYW1lID0gIkRQYWRMZWZ0In0sCisgICAgey52YWx1ZS5udW1iZXIgPSBISURfS0VZX0RQYWRSaWdodCwgLm5hbWUgPSAiRFBhZFJpZ2h0In0sCisgICAgey52YWx1ZS5udW1iZXIgPSBISURfS0VZX0RQYWRDZW50ZXIsIC5uYW1lID0gIkRQYWRDZW50ZXIifSwKKyAgICB7LnZhbHVlLm51bWJlciA9IEhJRF9LRVlfUm9ja2VyVXAsIC5uYW1lID0gIlJvY2tlclVwIn0sCisgICAgey52YWx1ZS5udW1iZXIgPSBISURfS0VZX1JvY2tlckRvd24sIC5uYW1lID0gIlJvY2tlckRvd24ifSwKKyAgICB7LnZhbHVlID0gey5ncm91cCA9IEhJRF9HUlBfUm91dGluZ0tleXMsIC5udW1iZXIgPSBLVEJfS0VZX0FOWX0sCisgICAgIC5uYW1lID0gIlJvdXRpbmdLZXkifSwKKyAgICB7Lm5hbWUgPSBOVUxMfX07CisKK3N0YXRpYyBjb25zdCBLZXlOYW1lRW50cnkgKmNvbnN0IGtleU5hbWVUYWJsZXNfSElEW10gPSB7a2V5TmFtZVRhYmxlLCBOVUxMfTsKKworc3RhdGljIGNvbnN0IEtleVRhYmxlRGVmaW5pdGlvbiBrZXlUYWJsZURlZmluaXRpb25fSElEID0geworICAgIC5iaW5kaW5ncyA9ICJISUQiLCAubmFtZXMgPSBrZXlOYW1lVGFibGVzX0hJRH07CisKKyNlbmRpZiAvKiBCUkxUVFlfSU5DTFVERURfSElEX0JSTERFRlMgKi8KZGlmZiAtLWdpdCBhL0RyaXZlcnMvQnJhaWxsZS9ISU1TL01ha2VmaWxlLmluIGIvRHJpdmVycy9CcmFpbGxlL0hJTVMvTWFrZWZpbGUuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDZmODA2ZAotLS0gL2Rldi9udWxsCisrKyBiL0RyaXZlcnMvQnJhaWxsZS9ISU1TL01ha2VmaWxlLmluCkBAIC0wLDAgKzEsMjggQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyMgICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisjCisjIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyMKKyMgQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitEUklWRVJfQ09ERSA9IGhtCitEUklWRVJfTkFNRSA9IEhJTVMKK0RSSVZFUl9VU0FHRSA9IEJyYWlsbGUgU2Vuc2UsIFN5bmNCcmFpbGxlLCBCcmFpbGxlIEVkZ2UsIFNtYXJ0IEJlZXRsZSwgUUJyYWlsbGVYTAorRFJJVkVSX1ZFUlNJT04gPSAKK0RSSVZFUl9ERVZFTE9QRVJTID0gRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPgoraW5jbHVkZSAkKFNSQ19UT1ApYnJhaWxsZS5taworCiticmFpbGxlLiRPOgorCSQoQ0MpICQoQlJMX0NGTEFHUykgLWMgJChTUkNfRElSKS9icmFpbGxlLmMKKwpkaWZmIC0tZ2l0IGEvRHJpdmVycy9CcmFpbGxlL0hJTVMvYnJhaWxsZS5jIGIvRHJpdmVycy9CcmFpbGxlL0hJTVMvYnJhaWxsZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI4MjZjOWUKLS0tIC9kZXYvbnVsbAorKysgYi9Ecml2ZXJzL0JyYWlsbGUvSElNUy9icmFpbGxlLmMKQEAgLTAsMCArMSw3NDAgQEAKKy8qCisgKiBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorICogICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorICoKKyAqIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorICoKKyAqIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyAqLworCisjaW5jbHVkZSAicHJvbG9ndWUuaCIKKworI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisKKyNpbmNsdWRlICJsb2cuaCIKKworI2luY2x1ZGUgImJybF9kcml2ZXIuaCIKKyNpbmNsdWRlICJicmxkZWZzLWhtLmgiCisKKyNkZWZpbmUgTUFYSU1VTV9DRUxMX0NPVU5UIDQwCisKK0JFR0lOX0tFWV9OQU1FX1RBQkxFKGNvbW1vbikKKyAgS0VZX0dST1VQX0VOVFJZKEhNX0dSUF9Sb3V0aW5nS2V5cywgIlJvdXRpbmdLZXkiKSwKK0VORF9LRVlfTkFNRV9UQUJMRQorCitCRUdJTl9LRVlfTkFNRV9UQUJMRShicmFpbGxlKQorICBLRVlfTkFNRV9FTlRSWShITV9LRVlfRG90MSwgIkRvdDEiKSwKKyAgS0VZX05BTUVfRU5UUlkoSE1fS0VZX0RvdDIsICJEb3QyIiksCisgIEtFWV9OQU1FX0VOVFJZKEhNX0tFWV9Eb3QzLCAiRG90MyIpLAorICBLRVlfTkFNRV9FTlRSWShITV9LRVlfRG90NCwgIkRvdDQiKSwKKyAgS0VZX05BTUVfRU5UUlkoSE1fS0VZX0RvdDUsICJEb3Q1IiksCisgIEtFWV9OQU1FX0VOVFJZKEhNX0tFWV9Eb3Q2LCAiRG90NiIpLAorICBLRVlfTkFNRV9FTlRSWShITV9LRVlfRG90NywgIkRvdDciKSwKKyAgS0VZX05BTUVfRU5UUlkoSE1fS0VZX0RvdDgsICJEb3Q4IiksCisgIEtFWV9OQU1FX0VOVFJZKEhNX0tFWV9TcGFjZSwgIlNwYWNlIiksCitFTkRfS0VZX05BTUVfVEFCTEUKKworQkVHSU5fS0VZX05BTUVfVEFCTEUocGFuKQorICBLRVlfTkFNRV9FTlRSWShITV9LRVlfQmFja3dhcmQsICJCYWNrd2FyZCIpLAorICBLRVlfTkFNRV9FTlRSWShITV9LRVlfRm9yd2FyZCwgIkZvcndhcmQiKSwKK0VORF9LRVlfTkFNRV9UQUJMRQorCitCRUdJTl9LRVlfTkFNRV9UQUJMRShCU19zY3JvbGwpCisgIEtFWV9OQU1FX0VOVFJZKEhNX0tFWV9CU19MZWZ0U2Nyb2xsVXAsICJMZWZ0U2Nyb2xsVXAiKSwKKyAgS0VZX05BTUVfRU5UUlkoSE1fS0VZX0JTX0xlZnRTY3JvbGxEb3duLCAiTGVmdFNjcm9sbERvd24iKSwKKyAgS0VZX05BTUVfRU5UUlkoSE1fS0VZX0JTX1JpZ2h0U2Nyb2xsVXAsICJSaWdodFNjcm9sbFVwIiksCisgIEtFWV9OQU1FX0VOVFJZKEhNX0tFWV9CU19SaWdodFNjcm9sbERvd24sICJSaWdodFNjcm9sbERvd24iKSwKK0VORF9LRVlfTkFNRV9UQUJMRQorCitCRUdJTl9LRVlfTkFNRV9UQUJMRShCRV9zY3JvbGwpCisgIEtFWV9OQU1FX0VOVFJZKEhNX0tFWV9CRV9MZWZ0U2Nyb2xsVXAsICJMZWZ0U2Nyb2xsVXAiKSwKKyAgS0VZX05BTUVfRU5UUlkoSE1fS0VZX0JFX0xlZnRTY3JvbGxEb3duLCAiTGVmdFNjcm9sbERvd24iKSwKKyAgS0VZX05BTUVfRU5UUlkoSE1fS0VZX0JFX1JpZ2h0U2Nyb2xsVXAsICJSaWdodFNjcm9sbFVwIiksCisgIEtFWV9OQU1FX0VOVFJZKEhNX0tFWV9CRV9SaWdodFNjcm9sbERvd24sICJSaWdodFNjcm9sbERvd24iKSwKK0VORF9LRVlfTkFNRV9UQUJMRQorCitCRUdJTl9LRVlfTkFNRV9UQUJMRShmMTQpCisgIEtFWV9OQU1FX0VOVFJZKEhNX0tFWV9GMSwgIkYxIiksCisgIEtFWV9OQU1FX0VOVFJZKEhNX0tFWV9GMiwgIkYyIiksCisgIEtFWV9OQU1FX0VOVFJZKEhNX0tFWV9GMywgIkYzIiksCisgIEtFWV9OQU1FX0VOVFJZKEhNX0tFWV9GNCwgIkY0IiksCitFTkRfS0VZX05BTUVfVEFCTEUKKworQkVHSU5fS0VZX05BTUVfVEFCTEUoZjU4KQorICBLRVlfTkFNRV9FTlRSWShITV9LRVlfRjUsICJGNSIpLAorICBLRVlfTkFNRV9FTlRSWShITV9LRVlfRjYsICJGNiIpLAorICBLRVlfTkFNRV9FTlRSWShITV9LRVlfRjcsICJGNyIpLAorICBLRVlfTkFNRV9FTlRSWShITV9LRVlfRjgsICJGOCIpLAorRU5EX0tFWV9OQU1FX1RBQkxFCisKK0JFR0lOX0tFWV9OQU1FX1RBQkxFKGxwKQorICBLRVlfTkFNRV9FTlRSWShITV9LRVlfTGVmdFBhZFVwLCAiTGVmdFBhZFVwIiksCisgIEtFWV9OQU1FX0VOVFJZKEhNX0tFWV9MZWZ0UGFkRG93biwgIkxlZnRQYWREb3duIiksCisgIEtFWV9OQU1FX0VOVFJZKEhNX0tFWV9MZWZ0UGFkTGVmdCwgIkxlZnRQYWRMZWZ0IiksCisgIEtFWV9OQU1FX0VOVFJZKEhNX0tFWV9MZWZ0UGFkUmlnaHQsICJMZWZ0UGFkUmlnaHQiKSwKK0VORF9LRVlfTkFNRV9UQUJMRQorCitCRUdJTl9LRVlfTkFNRV9UQUJMRShycCkKKyAgS0VZX05BTUVfRU5UUlkoSE1fS0VZX1JpZ2h0UGFkVXAsICJSaWdodFBhZFVwIiksCisgIEtFWV9OQU1FX0VOVFJZKEhNX0tFWV9SaWdodFBhZERvd24sICJSaWdodFBhZERvd24iKSwKKyAgS0VZX05BTUVfRU5UUlkoSE1fS0VZX1JpZ2h0UGFkTGVmdCwgIlJpZ2h0UGFkTGVmdCIpLAorICBLRVlfTkFNRV9FTlRSWShITV9LRVlfUmlnaHRQYWRSaWdodCwgIlJpZ2h0UGFkUmlnaHQiKSwKK0VORF9LRVlfTkFNRV9UQUJMRQorCitCRUdJTl9LRVlfTkFNRV9UQUJMRVMocGFuKQorICBLRVlfTkFNRV9UQUJMRShjb21tb24pLAorICBLRVlfTkFNRV9UQUJMRShicmFpbGxlKSwKKyAgS0VZX05BTUVfVEFCTEUoZjE0KSwKKyAgS0VZX05BTUVfVEFCTEUocGFuKSwKK0VORF9LRVlfTkFNRV9UQUJMRVMKKworQkVHSU5fS0VZX05BTUVfVEFCTEVTKHNjcm9sbCkKKyAgS0VZX05BTUVfVEFCTEUoY29tbW9uKSwKKyAgS0VZX05BTUVfVEFCTEUoYnJhaWxsZSksCisgIEtFWV9OQU1FX1RBQkxFKGYxNCksCisgIEtFWV9OQU1FX1RBQkxFKEJTX3Njcm9sbCksCitFTkRfS0VZX05BTUVfVEFCTEVTCisKK0JFR0lOX0tFWV9OQU1FX1RBQkxFUyhxd2VydHkpCisgIEtFWV9OQU1FX1RBQkxFKGNvbW1vbiksCisgIEtFWV9OQU1FX1RBQkxFKGJyYWlsbGUpLAorICBLRVlfTkFNRV9UQUJMRShmMTQpLAorICBLRVlfTkFNRV9UQUJMRShCU19zY3JvbGwpLAorRU5EX0tFWV9OQU1FX1RBQkxFUworCitCRUdJTl9LRVlfTkFNRV9UQUJMRVMoZWRnZSkKKyAgS0VZX05BTUVfVEFCTEUoY29tbW9uKSwKKyAgS0VZX05BTUVfVEFCTEUoYnJhaWxsZSksCisgIEtFWV9OQU1FX1RBQkxFKGYxNCksCisgIEtFWV9OQU1FX1RBQkxFKGY1OCksCisgIEtFWV9OQU1FX1RBQkxFKEJFX3Njcm9sbCksCisgIEtFWV9OQU1FX1RBQkxFKGxwKSwKKyAgS0VZX05BTUVfVEFCTEUocnApLAorRU5EX0tFWV9OQU1FX1RBQkxFUworCitCRUdJTl9LRVlfTkFNRV9UQUJMRShTQl9zY3JvbGwpCisgIEtFWV9OQU1FX0VOVFJZKEhNX0tFWV9TQl9MZWZ0U2Nyb2xsVXAsICJMZWZ0U2Nyb2xsVXAiKSwKKyAgS0VZX05BTUVfRU5UUlkoSE1fS0VZX1NCX0xlZnRTY3JvbGxEb3duLCAiTGVmdFNjcm9sbERvd24iKSwKKyAgS0VZX05BTUVfRU5UUlkoSE1fS0VZX1NCX1JpZ2h0U2Nyb2xsVXAsICJSaWdodFNjcm9sbFVwIiksCisgIEtFWV9OQU1FX0VOVFJZKEhNX0tFWV9TQl9SaWdodFNjcm9sbERvd24sICJSaWdodFNjcm9sbERvd24iKSwKK0VORF9LRVlfTkFNRV9UQUJMRQorCitCRUdJTl9LRVlfTkFNRV9UQUJMRVMoc3luYykKKyAgS0VZX05BTUVfVEFCTEUoY29tbW9uKSwKKyAgS0VZX05BTUVfVEFCTEUoU0Jfc2Nyb2xsKSwKK0VORF9LRVlfTkFNRV9UQUJMRVMKKworQkVHSU5fS0VZX05BTUVfVEFCTEUoYmVldGxlKQorICBLRVlfTkFNRV9FTlRSWShITV9LRVlfQlNfUmlnaHRTY3JvbGxVcCwgIkJhY2t3YXJkIiksCisgIEtFWV9OQU1FX0VOVFJZKEhNX0tFWV9CU19SaWdodFNjcm9sbERvd24sICJGb3J3YXJkIiksCisKKyAgS0VZX05BTUVfRU5UUlkoSE1fS0VZX0YxLCAiRjEiKSwKKyAgS0VZX05BTUVfRU5UUlkoSE1fS0VZX0Y0LCAiRjIiKSwKKyAgS0VZX05BTUVfRU5UUlkoSE1fS0VZX0YzLCAiRjMiKSwKKyAgS0VZX05BTUVfRU5UUlkoSE1fS0VZX0YyLCAiRjQiKSwKK0VORF9LRVlfTkFNRV9UQUJMRQorCitCRUdJTl9LRVlfTkFNRV9UQUJMRVMoYmVldGxlKQorICBLRVlfTkFNRV9UQUJMRShjb21tb24pLAorICBLRVlfTkFNRV9UQUJMRShicmFpbGxlKSwKKyAgS0VZX05BTUVfVEFCTEUoYmVldGxlKSwKK0VORF9LRVlfTkFNRV9UQUJMRVMKKworREVGSU5FX0tFWV9UQUJMRShwYW4pCitERUZJTkVfS0VZX1RBQkxFKHNjcm9sbCkKK0RFRklORV9LRVlfVEFCTEUocXdlcnR5KQorREVGSU5FX0tFWV9UQUJMRShlZGdlKQorREVGSU5FX0tFWV9UQUJMRShzeW5jKQorREVGSU5FX0tFWV9UQUJMRShiZWV0bGUpCisKK0JFR0lOX0tFWV9UQUJMRV9MSVNUCisgICZLRVlfVEFCTEVfREVGSU5JVElPTihwYW4pLAorICAmS0VZX1RBQkxFX0RFRklOSVRJT04oc2Nyb2xsKSwKKyAgJktFWV9UQUJMRV9ERUZJTklUSU9OKHF3ZXJ0eSksCisgICZLRVlfVEFCTEVfREVGSU5JVElPTihlZGdlKSwKKyAgJktFWV9UQUJMRV9ERUZJTklUSU9OKHN5bmMpLAorICAmS0VZX1RBQkxFX0RFRklOSVRJT04oYmVldGxlKSwKK0VORF9LRVlfVEFCTEVfTElTVAorCit0eXBlZGVmIGVudW0geworICBJUFRfQ1VSU09SICA9IDBYMDAsCisgIElQVF9LRVlTICAgID0gMFgwMSwKKyAgSVBUX0NFTExTICAgPSAwWDAyCit9IElucHV0UGFja2V0VHlwZTsKKwordHlwZWRlZiB1bmlvbiB7CisgIHVuc2lnbmVkIGNoYXIgYnl0ZXNbMTBdOworCisgIHN0cnVjdCB7CisgICAgdW5zaWduZWQgY2hhciBzdGFydDsKKyAgICB1bnNpZ25lZCBjaGFyIHR5cGU7CisgICAgdW5zaWduZWQgY2hhciBjb3VudDsKKyAgICB1bnNpZ25lZCBjaGFyIGRhdGE7CisgICAgdW5zaWduZWQgY2hhciByZXNlcnZlZFs0XTsKKyAgICB1bnNpZ25lZCBjaGFyIGNoZWNrc3VtOworICAgIHVuc2lnbmVkIGNoYXIgZW5kOworICB9IFBBQ0tFRCBkYXRhOworfSBQQUNLRUQgSW5wdXRQYWNrZXQ7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgY29uc3QgS2V5VGFibGVEZWZpbml0aW9uICprZXlUYWJsZTsKKyAgdW5zaWduZWQgY2hhciBpZDE7CisgIHVuc2lnbmVkIGNoYXIgaWQyOworfSBJZGVudGl0eUVudHJ5OworCitzdGF0aWMgY29uc3QgSWRlbnRpdHlFbnRyeSBwYW5JZGVudGl0eSA9IHsKKyAgLmtleVRhYmxlID0gJktFWV9UQUJMRV9ERUZJTklUSU9OKHBhbikKK307CisKK3N0YXRpYyBjb25zdCBJZGVudGl0eUVudHJ5IHNjcm9sbElkZW50aXR5ID0geworICAuaWQxID0gMFg0QywgLmlkMiA9IDBYNTgsCisgIC5rZXlUYWJsZSA9ICZLRVlfVEFCTEVfREVGSU5JVElPTihzY3JvbGwpCit9OworCitzdGF0aWMgY29uc3QgSWRlbnRpdHlFbnRyeSBxd2VydHkySWRlbnRpdHkgPSB7CisgIC5pZDEgPSAwWDUzLCAuaWQyID0gMFg1OCwKKyAgLmtleVRhYmxlID0gJktFWV9UQUJMRV9ERUZJTklUSU9OKHF3ZXJ0eSkKK307CisKK3N0YXRpYyBjb25zdCBJZGVudGl0eUVudHJ5IHF3ZXJ0eTFJZGVudGl0eSA9IHsKKyAgLmlkMSA9IDBYNTEsIC5pZDIgPSAwWDU4LAorICAua2V5VGFibGUgPSAmS0VZX1RBQkxFX0RFRklOSVRJT04ocXdlcnR5KQorfTsKKworc3RhdGljIGNvbnN0IElkZW50aXR5RW50cnkgZWRnZUlkZW50aXR5ID0geworICAuaWQxID0gMFg0MiwgLmlkMiA9IDBYNDUsCisgIC5rZXlUYWJsZSA9ICZLRVlfVEFCTEVfREVGSU5JVElPTihlZGdlKQorfTsKKwordHlwZWRlZiBzdHJ1Y3QgeworICBjb25zdCBjaGFyICptb2RlbE5hbWU7CisgIGNvbnN0IGNoYXIgKnJlc291cmNlTmFtZVByZWZpeDsKKyAgY29uc3QgS2V5VGFibGVEZWZpbml0aW9uICprZXlUYWJsZTsKKyAgY29uc3QgS2V5VGFibGVEZWZpbml0aW9uICogKCp0ZXN0SWRlbnRpdGllcykgKEJyYWlsbGVEaXNwbGF5ICpicmwpOworICBpbnQgKCpnZXREZWZhdWx0Q2VsbENvdW50KSAoQnJhaWxsZURpc3BsYXkgKmJybCwgdW5zaWduZWQgaW50ICpjb3VudCk7Cit9IFByb3RvY29sRW50cnk7CisKK3N0cnVjdCBCcmFpbGxlRGF0YVN0cnVjdCB7CisgIGNvbnN0IFByb3RvY29sRW50cnkgKnByb3RvY29sOworICB1bnNpZ25lZCBjaGFyIHByZXZpb3VzQ2VsbHNbTUFYSU1VTV9DRUxMX0NPVU5UXTsKK307CisKK3N0YXRpYyBCcmFpbGxlUGFja2V0VmVyaWZpZXJSZXN1bHQKK3ZlcmlmeVBhY2tldCAoCisgIEJyYWlsbGVEaXNwbGF5ICpicmwsCisgIHVuc2lnbmVkIGNoYXIgKmJ5dGVzLCBzaXplX3Qgc2l6ZSwKKyAgc2l6ZV90ICpsZW5ndGgsIHZvaWQgKmRhdGEKKykgeworICB1bnNpZ25lZCBjaGFyIGJ5dGUgPSBieXRlc1tzaXplLTFdOworCisgIHN3aXRjaCAoc2l6ZSkgeworICAgIGNhc2UgMTogeworICAgICAgc3dpdGNoIChieXRlKSB7CisgICAgICAgIGNhc2UgMFgxQzoKKyAgICAgICAgICAqbGVuZ3RoID0gNDsKKyAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIDBYRkE6CisgICAgICAgICAgKmxlbmd0aCA9IDEwOworICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgcmV0dXJuIEJSTF9QVlJfSU5WQUxJRDsKKyAgICAgIH0KKworICAgICAgYnJlYWs7CisgICAgfQorCisgICAgZGVmYXVsdDoKKyAgICAgIGJyZWFrOworICB9CisKKyAgaWYgKHNpemUgPT0gKmxlbmd0aCkgeworICAgIHN3aXRjaCAoYnl0ZXNbMF0pIHsKKyAgICAgIGNhc2UgMFgxQzogeworICAgICAgICBpZiAoYnl0ZSAhPSAwWDFGKSByZXR1cm4gQlJMX1BWUl9JTlZBTElEOworICAgICAgICBicmVhazsKKyAgICAgIH0KKworICAgICAgY2FzZSAwWEZBOiB7CisgICAgICAgIGlmIChieXRlICE9IDBYRkIpIHJldHVybiBCUkxfUFZSX0lOVkFMSUQ7CisKKyAgICAgICAgY29uc3QgSW5wdXRQYWNrZXQgKnBhY2tldCA9IChjb25zdCB2b2lkICopYnl0ZXM7CisgICAgICAgIGludCBjaGVja3N1bSA9IC1wYWNrZXQtPmRhdGEuY2hlY2tzdW07CisgICAgICAgIGZvciAoc2l6ZV90IGk9MDsgaTxzaXplOyBpKz0xKSBjaGVja3N1bSArPSBwYWNrZXQtPmJ5dGVzW2ldOworCisgICAgICAgIGlmICgoY2hlY2tzdW0gJiAwWEZGKSAhPSBwYWNrZXQtPmRhdGEuY2hlY2tzdW0pIHsKKyAgICAgICAgICBsb2dJbnB1dFByb2JsZW0oImluY29ycmVjdCBpbnB1dCBjaGVja3N1bSIsIHBhY2tldC0+Ynl0ZXMsIHNpemUpOworICAgICAgICAgIHJldHVybiBCUkxfUFZSX0lOVkFMSUQ7CisgICAgICAgIH0KKworICAgICAgICBicmVhazsKKyAgICAgIH0KKworICAgICAgZGVmYXVsdDoKKyAgICAgICAgYnJlYWs7CisgICAgfQorICB9CisKKyAgcmV0dXJuIEJSTF9QVlJfSU5DTFVERTsKK30KKworc3RhdGljIHNpemVfdAorcmVhZFBhY2tldCAoQnJhaWxsZURpc3BsYXkgKmJybCwgSW5wdXRQYWNrZXQgKnBhY2tldCkgeworICByZXR1cm4gcmVhZEJyYWlsbGVQYWNrZXQoYnJsLCBOVUxMLCBwYWNrZXQsIHNpemVvZigqcGFja2V0KSwgdmVyaWZ5UGFja2V0LCBOVUxMKTsKK30KKworc3RhdGljIHNpemVfdAorcmVhZEJ5dGVzIChCcmFpbGxlRGlzcGxheSAqYnJsLCB2b2lkICpwYWNrZXQsIHNpemVfdCBzaXplKSB7CisgIHJldHVybiByZWFkUGFja2V0KGJybCwgcGFja2V0KTsKK30KKworc3RhdGljIGludAord3JpdGVCeXRlcyAoQnJhaWxsZURpc3BsYXkgKmJybCwgY29uc3QgdW5zaWduZWQgY2hhciAqYnl0ZXMsIHNpemVfdCBjb3VudCkgeworICByZXR1cm4gd3JpdGVCcmFpbGxlUGFja2V0KGJybCwgTlVMTCwgYnl0ZXMsIGNvdW50KTsKK30KKworc3RhdGljIGludAordGVzdElkZW50aXR5IChCcmFpbGxlRGlzcGxheSAqYnJsLCB1bnNpZ25lZCBjaGFyIGlkMSwgdW5zaWduZWQgY2hhciBpZDIpIHsKKyAgY29uc3QgdW5zaWduZWQgY2hhciBzZXF1ZW5jZVtdID0gezBYMUMsIGlkMSwgaWQyLCAwWDFGfTsKKyAgY29uc3Qgc2l6ZV90IGxlbmd0aCA9IHNpemVvZihzZXF1ZW5jZSk7CisKKyAgaWYgKHdyaXRlQnl0ZXMoYnJsLCBzZXF1ZW5jZSwgbGVuZ3RoKSkgeworICAgIHdoaWxlIChhd2FpdEJyYWlsbGVJbnB1dChicmwsIDIwMCkpIHsKKyAgICAgIElucHV0UGFja2V0IHJlc3BvbnNlOworICAgICAgc2l6ZV90IHNpemUgPSByZWFkUGFja2V0KGJybCwgJnJlc3BvbnNlKTsKKyAgICAgIGlmICghc2l6ZSkgYnJlYWs7CisKKyAgICAgIGlmIChyZXNwb25zZS5ieXRlc1swXSA9PSBzZXF1ZW5jZVswXSkgeworICAgICAgICByZXR1cm4gbWVtY21wKHJlc3BvbnNlLmJ5dGVzLCBzZXF1ZW5jZSwgbGVuZ3RoKSA9PSAwOworICAgICAgfQorICAgIH0KKyAgfQorCisgIHJldHVybiAwOworfQorCitzdGF0aWMgY29uc3QgS2V5VGFibGVEZWZpbml0aW9uICoKK3Rlc3RJZGVudGl0aWVzIChCcmFpbGxlRGlzcGxheSAqYnJsLCBjb25zdCBJZGVudGl0eUVudHJ5ICpjb25zdCAqaWRlbnRpdGllcykgeworICB3aGlsZSAoKmlkZW50aXRpZXMpIHsKKyAgICBjb25zdCBJZGVudGl0eUVudHJ5ICppZGVudGl0eSA9ICppZGVudGl0aWVzOworICAgIGNvbnN0IGNoYXIgKm5hbWUgPSBpZGVudGl0eS0+a2V5VGFibGUtPmJpbmRpbmdzOworCisgICAgaWYgKCFpZGVudGl0eS0+aWQxICYmICFpZGVudGl0eS0+aWQyKSB7CisgICAgICBsb2dNZXNzYWdlKExPR19DQVRFR09SWShCUkFJTExFX0RSSVZFUiksICJhc3N1bWluZyBpZGVudGl0eTogJXMiLCBuYW1lKTsKKyAgICB9IGVsc2UgeworICAgICAgbG9nTWVzc2FnZShMT0dfQ0FURUdPUlkoQlJBSUxMRV9EUklWRVIpLCAidGVzdGluZyBpZGVudGl0eTogJXMiLCBuYW1lKTsKKworICAgICAgaWYgKCF0ZXN0SWRlbnRpdHkoYnJsLCBpZGVudGl0eS0+aWQxLCBpZGVudGl0eS0+aWQyKSkgeworICAgICAgICBpZGVudGl0aWVzICs9IDE7CisgICAgICAgIGNvbnRpbnVlOworICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBpZGVudGl0eS0+a2V5VGFibGU7CisgIH0KKworICByZXR1cm4gTlVMTDsKK30KKworc3RhdGljIGNvbnN0IEtleVRhYmxlRGVmaW5pdGlvbiAqCit0ZXN0QnJhaWxsZVNlbnNlSWRlbnRpdGllcyAoQnJhaWxsZURpc3BsYXkgKmJybCkgeworICBzdGF0aWMgY29uc3QgSWRlbnRpdHlFbnRyeSAqY29uc3QgaWRlbnRpdGllc1tdID0geworICAgICZxd2VydHkySWRlbnRpdHksCisgICAgJnF3ZXJ0eTFJZGVudGl0eSwKKyAgICAmc2Nyb2xsSWRlbnRpdHksCisgICAgJnBhbklkZW50aXR5LAorICAgIE5VTEwKKyAgfTsKKworICByZXR1cm4gdGVzdElkZW50aXRpZXMoYnJsLCBpZGVudGl0aWVzKTsKK30KKworc3RhdGljIGNvbnN0IEtleVRhYmxlRGVmaW5pdGlvbiAqCit0ZXN0QnJhaWxsZUVkZ2VJZGVudGl0aWVzIChCcmFpbGxlRGlzcGxheSAqYnJsKSB7CisgIHN0YXRpYyBjb25zdCBJZGVudGl0eUVudHJ5ICpjb25zdCBpZGVudGl0aWVzW10gPSB7CisgICAgJmVkZ2VJZGVudGl0eSwKKyAgICBOVUxMCisgIH07CisKKyAgcmV0dXJuIHRlc3RJZGVudGl0aWVzKGJybCwgaWRlbnRpdGllcyk7Cit9CisKK3N0YXRpYyBpbnQKK3dyaXRlUGFja2V0ICgKKyAgQnJhaWxsZURpc3BsYXkgKmJybCwKKyAgdW5zaWduZWQgY2hhciB0eXBlLCB1bnNpZ25lZCBjaGFyIG1vZGUsCisgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGExLCBzaXplX3QgbGVuZ3RoMSwKKyAgY29uc3QgdW5zaWduZWQgY2hhciAqZGF0YTIsIHNpemVfdCBsZW5ndGgyCispIHsKKyAgdW5zaWduZWQgY2hhciBwYWNrZXRbMiArIDEgKyAxICsgMiArIGxlbmd0aDEgKyAxICsgMSArIDIgKyBsZW5ndGgyICsgMSArIDQgKyAxICsgMl07CisgIHVuc2lnbmVkIGNoYXIgKmJ5dGUgPSBwYWNrZXQ7CisgIHVuc2lnbmVkIGNoYXIgKmNoZWNrc3VtOworCisgIC8qIERTICovCisgICpieXRlKysgPSB0eXBlOworICAqYnl0ZSsrID0gdHlwZTsKKworICAvKiBNICovCisgICpieXRlKysgPSBtb2RlOworCisgIC8qIERTMSAqLworICAqYnl0ZSsrID0gMFhGMDsKKworICAvKiBDbnQxICovCisgICpieXRlKysgPSAobGVuZ3RoMSA+PiAwKSAmIDBYRkY7CisgICpieXRlKysgPSAobGVuZ3RoMSA+PiA4KSAmIDBYRkY7CisKKyAgLyogRDEgKi8KKyAgYnl0ZSA9IG1lbXBjcHkoYnl0ZSwgZGF0YTEsIGxlbmd0aDEpOworCisgIC8qIERFMSAqLworICAqYnl0ZSsrID0gMFhGMTsKKworICAvKiBEUzIgKi8KKyAgKmJ5dGUrKyA9IDBYRjI7CisKKyAgLyogQ250MiAqLworICAqYnl0ZSsrID0gKGxlbmd0aDIgPj4gMCkgJiAwWEZGOworICAqYnl0ZSsrID0gKGxlbmd0aDIgPj4gOCkgJiAwWEZGOworCisgIC8qIEQyICovCisgIGlmIChkYXRhMikgYnl0ZSA9IG1lbXBjcHkoYnl0ZSwgZGF0YTIsIGxlbmd0aDIpOworCisgIC8qIERFMiAqLworICAqYnl0ZSsrID0gMFhGMzsKKworICAvKiBSZXNlcnZlZCAqLworICB7CisgICAgaW50IGNvdW50ID0gNDsKKyAgICB3aGlsZSAoY291bnQtLSkgKmJ5dGUrKyA9IDA7CisgIH0KKworICAvKiBDaGsgKi8KKyAgKihjaGVja3N1bSA9IGJ5dGUrKykgPSAwOworCisgIC8qIERFICovCisgICpieXRlKysgPSAwWEZEOworICAqYnl0ZSsrID0gMFhGRDsKKworICB7CisgICAgdW5zaWduZWQgY2hhciBzdW0gPSAwOworICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnB0ciA9IHBhY2tldDsKKyAgICB3aGlsZSAocHRyICE9IGJ5dGUpIHN1bSArPSAqcHRyKys7CisgICAgKmNoZWNrc3VtID0gc3VtOworICB9CisKKyAgcmV0dXJuIHdyaXRlQnl0ZXMoYnJsLCBwYWNrZXQsIGJ5dGUgLSBwYWNrZXQpOworfQorCisKK3N0YXRpYyBpbnQKK2dldEJyYWlsbGVTZW5zZURlZmF1bHRDZWxsQ291bnQgKEJyYWlsbGVEaXNwbGF5ICpicmwsIHVuc2lnbmVkIGludCAqY291bnQpIHsKKyAgKmNvdW50ID0gMzI7CisgIHJldHVybiAxOworfQorCitzdGF0aWMgY29uc3QgUHJvdG9jb2xFbnRyeSBicmFpbGxlU2Vuc2VQcm90b2NvbCA9IHsKKyAgLm1vZGVsTmFtZSA9ICJCcmFpbGxlIFNlbnNlIiwKKyAgLmtleVRhYmxlID0gJktFWV9UQUJMRV9ERUZJTklUSU9OKHBhbiksCisgIC50ZXN0SWRlbnRpdGllcyA9IHRlc3RCcmFpbGxlU2Vuc2VJZGVudGl0aWVzLAorICAuZ2V0RGVmYXVsdENlbGxDb3VudCA9IGdldEJyYWlsbGVTZW5zZURlZmF1bHRDZWxsQ291bnQKK307CisKKworc3RhdGljIGludAorZ2V0U3luY0JyYWlsbGVEZWZhdWx0Q2VsbENvdW50IChCcmFpbGxlRGlzcGxheSAqYnJsLCB1bnNpZ25lZCBpbnQgKmNvdW50KSB7CisgIHJldHVybiAwOworfQorCitzdGF0aWMgY29uc3QgUHJvdG9jb2xFbnRyeSBzeW5jQnJhaWxsZVByb3RvY29sID0geworICAubW9kZWxOYW1lID0gIlN5bmNCcmFpbGxlIiwKKyAgLmtleVRhYmxlID0gJktFWV9UQUJMRV9ERUZJTklUSU9OKHN5bmMpLAorICAuZ2V0RGVmYXVsdENlbGxDb3VudCA9IGdldFN5bmNCcmFpbGxlRGVmYXVsdENlbGxDb3VudAorfTsKKworCitzdGF0aWMgaW50CitnZXRCcmFpbGxlRWRnZURlZmF1bHRDZWxsQ291bnQgKEJyYWlsbGVEaXNwbGF5ICpicmwsIHVuc2lnbmVkIGludCAqY291bnQpIHsKKyAgKmNvdW50ID0gNDA7CisgIHJldHVybiAxOworfQorCitzdGF0aWMgY29uc3QgUHJvdG9jb2xFbnRyeSBicmFpbGxlRWRnZVByb3RvY29sID0geworICAubW9kZWxOYW1lID0gIkJyYWlsbGUgRWRnZSIsCisgIC5yZXNvdXJjZU5hbWVQcmVmaXggPSAiQnJhaWxsZUVER0UiLAorICAua2V5VGFibGUgPSAmS0VZX1RBQkxFX0RFRklOSVRJT04oZWRnZSksCisgIC50ZXN0SWRlbnRpdGllcyA9IHRlc3RCcmFpbGxlRWRnZUlkZW50aXRpZXMsCisgIC5nZXREZWZhdWx0Q2VsbENvdW50ID0gZ2V0QnJhaWxsZUVkZ2VEZWZhdWx0Q2VsbENvdW50Cit9OworCisKK3N0YXRpYyBjb25zdCBQcm90b2NvbEVudHJ5ICpwcm90b2NvbFRhYmxlW10gPSB7CisgICZicmFpbGxlU2Vuc2VQcm90b2NvbCwKKyAgJnN5bmNCcmFpbGxlUHJvdG9jb2wsCisgICZicmFpbGxlRWRnZVByb3RvY29sLAorICBOVUxMCit9OworCisKK3N0YXRpYyBpbnQKK3dyaXRlQ2VsbHMgKEJyYWlsbGVEaXNwbGF5ICpicmwpIHsKKyAgY29uc3Qgc2l6ZV90IGNvdW50ID0gTUlOKGJybC0+dGV4dENvbHVtbnMqYnJsLT50ZXh0Um93cywgTUFYSU1VTV9DRUxMX0NPVU5UKTsKKyAgdW5zaWduZWQgY2hhciBjZWxsc1tjb3VudF07CisKKyAgdHJhbnNsYXRlT3V0cHV0Q2VsbHMoY2VsbHMsIGJybC0+ZGF0YS0+cHJldmlvdXNDZWxscywgY291bnQpOworICByZXR1cm4gd3JpdGVQYWNrZXQoYnJsLCAwWEZDLCAwWDAxLCBjZWxscywgY291bnQsIE5VTEwsIDApOworfQorCitzdGF0aWMgaW50CitjbGVhckNlbGxzIChCcmFpbGxlRGlzcGxheSAqYnJsKSB7CisgIG1lbXNldChicmwtPmRhdGEtPnByZXZpb3VzQ2VsbHMsIDAsIE1JTihicmwtPnRleHRDb2x1bW5zKmJybC0+dGV4dFJvd3MsIE1BWElNVU1fQ0VMTF9DT1VOVCkpOworICByZXR1cm4gd3JpdGVDZWxscyhicmwpOworfQorCitzdGF0aWMgaW50Cit3cml0ZUNlbGxDb3VudFJlcXVlc3QgKEJyYWlsbGVEaXNwbGF5ICpicmwpIHsKKyAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgZGF0YVtdID0geworICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMAorICB9OworCisgIHJldHVybiB3cml0ZVBhY2tldChicmwsIDBYRkIsIDBYMDEsIGRhdGEsIHNpemVvZihkYXRhKSwgTlVMTCwgMCk7Cit9CisKK3N0YXRpYyBCcmFpbGxlUmVzcG9uc2VSZXN1bHQKK2lzQ2VsbENvdW50UmVzcG9uc2UgKEJyYWlsbGVEaXNwbGF5ICpicmwsIGNvbnN0IHZvaWQgKnBhY2tldCwgc2l6ZV90IHNpemUpIHsKKyAgY29uc3QgSW5wdXRQYWNrZXQgKnJlc3BvbnNlID0gcGFja2V0OworCisgIHJldHVybiAocmVzcG9uc2UtPmRhdGEudHlwZSA9PSBJUFRfQ0VMTFMpPyBCUkxfUlNQX0RPTkU6IEJSTF9SU1BfVU5FWFBFQ1RFRDsKK30KKworc3RhdGljIGludAorZ2V0Q2VsbENvdW50IChCcmFpbGxlRGlzcGxheSAqYnJsLCB1bnNpZ25lZCBpbnQgKmNvdW50KSB7CisgIElucHV0UGFja2V0IHJlc3BvbnNlOworCisgIGlmIChwcm9iZUJyYWlsbGVEaXNwbGF5KGJybCwgMiwgTlVMTCwgMTAwMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVDZWxsQ291bnRSZXF1ZXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkQnl0ZXMsICZyZXNwb25zZSwgc2l6ZW9mKHJlc3BvbnNlLmJ5dGVzKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgaXNDZWxsQ291bnRSZXNwb25zZSkpIHsKKyAgICAqY291bnQgPSByZXNwb25zZS5kYXRhLmRhdGE7CisgICAgcmV0dXJuIDE7CisgIH0KKworICByZXR1cm4gYnJsLT5kYXRhLT5wcm90b2NvbC0+Z2V0RGVmYXVsdENlbGxDb3VudChicmwsIGNvdW50KTsKK30KKworc3RhdGljIHZvaWQKK3NldEtleVRhYmxlIChCcmFpbGxlRGlzcGxheSAqYnJsLCBjb25zdCBLZXlUYWJsZURlZmluaXRpb24gKmt0ZCkgeworICBpZiAoIWt0ZCkga3RkID0gYnJsLT5kYXRhLT5wcm90b2NvbC0+a2V5VGFibGU7CisKKyAgc3dpdGNoIChicmwtPnRleHRDb2x1bW5zKSB7CisgICAgY2FzZSAxNDoKKyAgICAgIGlmIChrdGQgPT0gJktFWV9UQUJMRV9ERUZJTklUSU9OKHNjcm9sbCkpIHsKKyAgICAgICAga3RkID0gJktFWV9UQUJMRV9ERUZJTklUSU9OKGJlZXRsZSk7CisgICAgICB9CisgICAgICBicmVhazsKKyAgfQorCisgIHNldEJyYWlsbGVLZXlUYWJsZShicmwsIGt0ZCk7Cit9CisKK3N0YXRpYyBpbnQKK2Nvbm5lY3RSZXNvdXJjZSAoQnJhaWxsZURpc3BsYXkgKmJybCwgY29uc3QgY2hhciAqaWRlbnRpZmllcikgeworICBzdGF0aWMgY29uc3QgU2VyaWFsUGFyYW1ldGVycyBzZXJpYWxQYXJhbWV0ZXJzID0geworICAgIFNFUklBTF9ERUZBVUxUX1BBUkFNRVRFUlMsCisgICAgLmJhdWQgPSAxMTUyMDAKKyAgfTsKKworICBCRUdJTl9VU0JfU1RSSU5HX0xJU1QodXNiTWFudWZhY3R1cmVyc18wNDAzXzYwMDEpCisgICAgIkZUREkiLAorICBFTkRfVVNCX1NUUklOR19MSVNUCisKKyAgQkVHSU5fVVNCX0NIQU5ORUxfREVGSU5JVElPTlMKKyAgICB7IC8qIEJyYWlsbGUgU2Vuc2UgKFVTQiAxLjEpICovCisgICAgICAudmVyc2lvbiA9IFVzYlNwZWNpZmljYXRpb25WZXJzaW9uXzFfMSwKKyAgICAgIC52ZW5kb3I9MFgwNDVFLCAucHJvZHVjdD0wWDkzMEEsCisgICAgICAuY29uZmlndXJhdGlvbj0xLCAuaW50ZXJmYWNlPTAsIC5hbHRlcm5hdGl2ZT0wLAorICAgICAgLmlucHV0RW5kcG9pbnQ9MSwgLm91dHB1dEVuZHBvaW50PTIsCisgICAgICAuZGlzYWJsZUF1dG9zdXNwZW5kPTEsCisgICAgICAuZGF0YT0mYnJhaWxsZVNlbnNlUHJvdG9jb2wKKyAgICB9LAorCisgICAgeyAvKiBCcmFpbGxlIFNlbnNlIChVU0IgMi4wKSAqLworICAgICAgLnZlcnNpb24gPSBVc2JTcGVjaWZpY2F0aW9uVmVyc2lvbl8yXzAsCisgICAgICAudmVuZG9yPTBYMDQ1RSwgLnByb2R1Y3Q9MFg5MzBBLAorICAgICAgLmNvbmZpZ3VyYXRpb249MSwgLmludGVyZmFjZT0xLCAuYWx0ZXJuYXRpdmU9MCwKKyAgICAgIC5pbnB1dEVuZHBvaW50PTEsIC5vdXRwdXRFbmRwb2ludD0yLAorICAgICAgLnZlcmlmeUludGVyZmFjZT0xLAorICAgICAgLmRpc2FibGVBdXRvc3VzcGVuZD0xLAorICAgICAgLmRhdGE9JmJyYWlsbGVTZW5zZVByb3RvY29sCisgICAgfSwKKworICAgIHsgLyogQnJhaWxsZSBTZW5zZSBVMiAoVVNCIDIuMCkgKi8KKyAgICAgIC52ZXJzaW9uID0gVXNiU3BlY2lmaWNhdGlvblZlcnNpb25fMl8wLAorICAgICAgLnZlbmRvcj0wWDA0NUUsIC5wcm9kdWN0PTBYOTMwQSwKKyAgICAgIC5jb25maWd1cmF0aW9uPTEsIC5pbnRlcmZhY2U9MCwgLmFsdGVybmF0aXZlPTAsCisgICAgICAuaW5wdXRFbmRwb2ludD0xLCAub3V0cHV0RW5kcG9pbnQ9MiwKKyAgICAgIC52ZXJpZnlJbnRlcmZhY2U9MSwKKyAgICAgIC5kaXNhYmxlQXV0b3N1c3BlbmQ9MSwKKyAgICAgIC5kYXRhPSZicmFpbGxlU2Vuc2VQcm90b2NvbAorICAgIH0sCisKKyAgICB7IC8qIFN5bmMgQnJhaWxsZSAqLworICAgICAgLnZlbmRvcj0wWDA0MDMsIC5wcm9kdWN0PTBYNjAwMSwKKyAgICAgIC5tYW51ZmFjdHVyZXJzID0gdXNiTWFudWZhY3R1cmVyc18wNDAzXzYwMDEsCisgICAgICAuY29uZmlndXJhdGlvbj0xLCAuaW50ZXJmYWNlPTAsIC5hbHRlcm5hdGl2ZT0wLAorICAgICAgLmlucHV0RW5kcG9pbnQ9MSwgLm91dHB1dEVuZHBvaW50PTIsCisgICAgICAuZGF0YT0mc3luY0JyYWlsbGVQcm90b2NvbAorICAgIH0sCisKKyAgICB7IC8qIEJyYWlsbGUgRWRnZSBhbmQgUUJyYWlsbGVYTCAqLworICAgICAgLnZlbmRvcj0wWDA0NUUsIC5wcm9kdWN0PTBYOTMwQiwKKyAgICAgIC5jb25maWd1cmF0aW9uPTEsIC5pbnRlcmZhY2U9MCwgLmFsdGVybmF0aXZlPTAsCisgICAgICAuaW5wdXRFbmRwb2ludD0xLCAub3V0cHV0RW5kcG9pbnQ9MiwKKyAgICAgIC5kaXNhYmxlQXV0b3N1c3BlbmQ9MSwKKyAgICAgIC5kYXRhPSZicmFpbGxlRWRnZVByb3RvY29sCisgICAgfSwKKyAgRU5EX1VTQl9DSEFOTkVMX0RFRklOSVRJT05TCisKKyAgR2lvRGVzY3JpcHRvciBkZXNjcmlwdG9yOworICBnaW9Jbml0aWFsaXplRGVzY3JpcHRvcigmZGVzY3JpcHRvcik7CisKKyAgZGVzY3JpcHRvci5zZXJpYWwucGFyYW1ldGVycyA9ICZzZXJpYWxQYXJhbWV0ZXJzOworICBkZXNjcmlwdG9yLnNlcmlhbC5vcHRpb25zLmFwcGxpY2F0aW9uRGF0YSA9ICZicmFpbGxlU2Vuc2VQcm90b2NvbDsKKworICBkZXNjcmlwdG9yLnVzYi5jaGFubmVsRGVmaW5pdGlvbnMgPSB1c2JDaGFubmVsRGVmaW5pdGlvbnM7CisKKyAgZGVzY3JpcHRvci5ibHVldG9vdGguY2hhbm5lbE51bWJlciA9IDQ7CisgIGRlc2NyaXB0b3IuYmx1ZXRvb3RoLmRpc2NvdmVyQ2hhbm5lbCA9IDE7CisKKyAgaWYgKGNvbm5lY3RCcmFpbGxlUmVzb3VyY2UoYnJsLCBpZGVudGlmaWVyLCAmZGVzY3JpcHRvciwgTlVMTCkpIHsKKyAgICByZXR1cm4gMTsKKyAgfQorCisgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50CiticmxfY29uc3RydWN0IChCcmFpbGxlRGlzcGxheSAqYnJsLCBjaGFyICoqcGFyYW1ldGVycywgY29uc3QgY2hhciAqZGV2aWNlKSB7CisgIGlmICgoYnJsLT5kYXRhID0gbWFsbG9jKHNpemVvZigqYnJsLT5kYXRhKSkpKSB7CisgICAgbWVtc2V0KGJybC0+ZGF0YSwgMCwgc2l6ZW9mKCpicmwtPmRhdGEpKTsKKworICAgIGlmIChjb25uZWN0UmVzb3VyY2UoYnJsLCBkZXZpY2UpKSB7CisgICAgICBpZiAoIShicmwtPmRhdGEtPnByb3RvY29sID0gZ2lvR2V0QXBwbGljYXRpb25EYXRhKGJybC0+Z2lvRW5kcG9pbnQpKSkgeworICAgICAgICBjaGFyICpuYW1lID0gZ2lvR2V0UmVzb3VyY2VOYW1lKGJybC0+Z2lvRW5kcG9pbnQpOworICAgICAgICBicmwtPmRhdGEtPnByb3RvY29sID0gJmJyYWlsbGVTZW5zZVByb3RvY29sOworCisgICAgICAgIGlmIChuYW1lKSB7CisgICAgICAgICAgY29uc3QgUHJvdG9jb2xFbnRyeSAqY29uc3QgKnByb3RvY29sQWRkcmVzcyA9IHByb3RvY29sVGFibGU7CisKKyAgICAgICAgICB3aGlsZSAoKnByb3RvY29sQWRkcmVzcykgeworICAgICAgICAgICAgY29uc3QgUHJvdG9jb2xFbnRyeSAqcHJvdG9jb2wgPSAqcHJvdG9jb2xBZGRyZXNzOworICAgICAgICAgICAgY29uc3QgY2hhciAqcHJlZml4ID0gcHJvdG9jb2wtPnJlc291cmNlTmFtZVByZWZpeDsKKworICAgICAgICAgICAgaWYgKHByZWZpeCkgeworICAgICAgICAgICAgICBpZiAoc3RybmNhc2VjbXAobmFtZSwgcHJlZml4LCBzdHJsZW4ocHJlZml4KSkgPT0gMCkgeworICAgICAgICAgICAgICAgIGJybC0+ZGF0YS0+cHJvdG9jb2wgPSBwcm90b2NvbDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBwcm90b2NvbEFkZHJlc3MgKz0gMTsKKyAgICAgICAgICB9CisKKyAgICAgICAgICBmcmVlKG5hbWUpOworICAgICAgICB9CisgICAgICB9CisKKyAgICAgIGxvZ01lc3NhZ2UoTE9HX0lORk8sICJkZXRlY3RlZDogJXMiLCBicmwtPmRhdGEtPnByb3RvY29sLT5tb2RlbE5hbWUpOworCisgICAgICBjb25zdCBLZXlUYWJsZURlZmluaXRpb24gKmt0ZCA9CisgICAgICAgIGJybC0+ZGF0YS0+cHJvdG9jb2wtPnRlc3RJZGVudGl0aWVzPworICAgICAgICAgIGJybC0+ZGF0YS0+cHJvdG9jb2wtPnRlc3RJZGVudGl0aWVzKGJybCk6CisgICAgICAgICAgTlVMTDsKKworICAgICAgaWYgKGdldENlbGxDb3VudChicmwsICZicmwtPnRleHRDb2x1bW5zKSkgeworICAgICAgICBicmwtPnRleHRSb3dzID0gMTsKKworICAgICAgICBzZXRLZXlUYWJsZShicmwsIGt0ZCk7CisgICAgICAgIG1ha2VPdXRwdXRUYWJsZShkb3RzVGFibGVfSVNPMTE1NDhfMSk7CisgIAorICAgICAgICBpZiAoY2xlYXJDZWxscyhicmwpKSByZXR1cm4gMTsKKyAgICAgIH0KKworICAgICAgZGlzY29ubmVjdEJyYWlsbGVSZXNvdXJjZShicmwsIE5VTEwpOworICAgIH0KKworICAgIGZyZWUoYnJsLT5kYXRhKTsKKyAgfSBlbHNlIHsKKyAgICBsb2dNYWxsb2NFcnJvcigpOworICB9CisKKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkCiticmxfZGVzdHJ1Y3QgKEJyYWlsbGVEaXNwbGF5ICpicmwpIHsKKyAgZGlzY29ubmVjdEJyYWlsbGVSZXNvdXJjZShicmwsIE5VTEwpOworCisgIGlmIChicmwtPmRhdGEpIHsKKyAgICBmcmVlKGJybC0+ZGF0YSk7CisgICAgYnJsLT5kYXRhID0gTlVMTDsKKyAgfQorfQorCitzdGF0aWMgaW50Citicmxfd3JpdGVXaW5kb3cgKEJyYWlsbGVEaXNwbGF5ICpicmwsIGNvbnN0IHdjaGFyX3QgKnRleHQpIHsKKyAgc2l6ZV90IGNvdW50ID0gYnJsLT50ZXh0Q29sdW1ucyAqIGJybC0+dGV4dFJvd3M7CisKKyAgaWYgKGNlbGxzSGF2ZUNoYW5nZWQoYnJsLT5kYXRhLT5wcmV2aW91c0NlbGxzLCBicmwtPmJ1ZmZlciwgY291bnQsIE5VTEwsIE5VTEwsIE5VTEwpKSB7CisgICAgaWYgKCF3cml0ZUNlbGxzKGJybCkpIHJldHVybiAwOworICB9CisKKyAgcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQKK2JybF9yZWFkQ29tbWFuZCAoQnJhaWxsZURpc3BsYXkgKmJybCwgS2V5VGFibGVDb21tYW5kQ29udGV4dCBjb250ZXh0KSB7CisgIElucHV0UGFja2V0IHBhY2tldDsKKyAgaW50IGxlbmd0aDsKKworICB3aGlsZSAoKGxlbmd0aCA9IHJlYWRQYWNrZXQoYnJsLCAmcGFja2V0KSkpIHsKKyAgICBzd2l0Y2ggKHBhY2tldC5kYXRhLnR5cGUpIHsKKyAgICAgIGNhc2UgSVBUX0NVUlNPUjogeworICAgICAgICB1bnNpZ25lZCBjaGFyIGtleSA9IHBhY2tldC5kYXRhLmRhdGE7CisKKyAgICAgICAgZW5xdWV1ZUtleShicmwsIEhNX0dSUF9Sb3V0aW5nS2V5cywga2V5KTsKKyAgICAgICAgY29udGludWU7CisgICAgICB9CisKKyAgICAgIGNhc2UgSVBUX0tFWVM6IHsKKyAgICAgICAgS2V5TnVtYmVyU2V0IGJpdHMgPSAocGFja2V0LmRhdGEucmVzZXJ2ZWRbMF0gPDwgMFgwMCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgfCAocGFja2V0LmRhdGEucmVzZXJ2ZWRbMV0gPDwgMFgwOCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgfCAocGFja2V0LmRhdGEucmVzZXJ2ZWRbMl0gPDwgMFgxMCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgfCAocGFja2V0LmRhdGEucmVzZXJ2ZWRbM10gPDwgMFgxOCk7CisKKyAgICAgICAgZW5xdWV1ZUtleXMoYnJsLCBiaXRzLCBITV9HUlBfTmF2aWdhdGlvbktleXMsIDApOworICAgICAgICBjb250aW51ZTsKKyAgICAgIH0KKworICAgICAgZGVmYXVsdDoKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgbG9nVW5leHBlY3RlZFBhY2tldCgmcGFja2V0LCBsZW5ndGgpOworICB9CisgIGlmIChlcnJubyAhPSBFQUdBSU4pIHJldHVybiBCUkxfQ01EX1JFU1RBUlRCUkw7CisKKyAgcmV0dXJuIEVPRjsKK30KZGlmZiAtLWdpdCBhL0RyaXZlcnMvQnJhaWxsZS9ISU1TL2JybGRlZnMtaG0uaCBiL0RyaXZlcnMvQnJhaWxsZS9ISU1TL2JybGRlZnMtaG0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOWMzZTU1Ci0tLSAvZGV2L251bGwKKysrIGIvRHJpdmVycy9CcmFpbGxlL0hJTVMvYnJsZGVmcy1obS5oCkBAIC0wLDAgKzEsODYgQEAKKy8qCisgKiBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorICogICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorICoKKyAqIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorICoKKyAqIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyAqLworCisjaWZuZGVmIEJSTFRUWV9JTkNMVURFRF9ITV9CUkxERUZTCisjZGVmaW5lIEJSTFRUWV9JTkNMVURFRF9ITV9CUkxERUZTCisKK3R5cGVkZWYgZW51bSB7CisgIC8qIGJyYWlsbGUga2V5Ym9hcmQga2V5cyAqLworICBITV9LRVlfRG90MSAgPSAwLAorICBITV9LRVlfRG90MiAgPSAxLAorICBITV9LRVlfRG90MyAgPSAyLAorICBITV9LRVlfRG90NCAgPSAzLAorICBITV9LRVlfRG90NSAgPSA0LAorICBITV9LRVlfRG90NiAgPSA1LAorICBITV9LRVlfRG90NyAgPSA2LAorICBITV9LRVlfRG90OCAgPSA3LAorICBITV9LRVlfU3BhY2UgPSA4LAorCisgIC8qIEJyYWlsbGUgU2Vuc2UvRWRnZSBmdW5jdGlvbiBrZXlzICovCisgIEhNX0tFWV9GMSA9ICA5LAorICBITV9LRVlfRjIgPSAxMCwKKyAgSE1fS0VZX0YzID0gMTEsCisgIEhNX0tFWV9GNCA9IDEyLAorCisgIC8qIEJyYWlsbGUgU2Vuc2UgcGFubmluZyBrZXlzICovCisgIEhNX0tFWV9CYWNrd2FyZCA9IDEzLAorICBITV9LRVlfRm9yd2FyZCAgPSAxNCwKKworICAvKiBTeW5jQnJhaWxsZSBzY3JvbGwga2V5cyAqLworICBITV9LRVlfU0JfTGVmdFNjcm9sbFVwICAgID0gMTIsCisgIEhNX0tFWV9TQl9SaWdodFNjcm9sbFVwICAgPSAxMywKKyAgSE1fS0VZX1NCX1JpZ2h0U2Nyb2xsRG93biA9IDE0LAorICBITV9LRVlfU0JfTGVmdFNjcm9sbERvd24gID0gMTUsCisKKyAgLyogQnJhaWxsZSBTZW5zZSBzY3JvbGwga2V5cyAqLworICBITV9LRVlfQlNfTGVmdFNjcm9sbFVwICAgID0gMTYsCisgIEhNX0tFWV9CU19MZWZ0U2Nyb2xsRG93biAgPSAxNywKKyAgSE1fS0VZX0JTX1JpZ2h0U2Nyb2xsVXAgICA9IDE4LAorICBITV9LRVlfQlNfUmlnaHRTY3JvbGxEb3duID0gMTksCisKKyAgLyogQnJhaWxsZSBFZGdlIHNjcm9sbCBrZXlzICovCisgIEhNX0tFWV9CRV9MZWZ0U2Nyb2xsVXAgICAgPSAxNiwKKyAgSE1fS0VZX0JFX1JpZ2h0U2Nyb2xsVXAgICA9IDE3LAorICBITV9LRVlfQkVfUmlnaHRTY3JvbGxEb3duID0gMTgsCisgIEhNX0tFWV9CRV9MZWZ0U2Nyb2xsRG93biAgPSAxOSwKKworICAvKiBCcmFpbGxlIEVkZ2UgZnVuY3Rpb24ga2V5cyAqLworICBITV9LRVlfRjUgPSAyMCwKKyAgSE1fS0VZX0Y2ID0gMjEsCisgIEhNX0tFWV9GNyA9IDIyLAorICBITV9LRVlfRjggPSAyMywKKworICAvKiBCcmFpbGxlIEVkZ2UgbGVmdCBwYWQgKi8KKyAgSE1fS0VZX0xlZnRQYWRVcCAgICAgPSAyNCwKKyAgSE1fS0VZX0xlZnRQYWREb3duICAgPSAyNSwKKyAgSE1fS0VZX0xlZnRQYWRMZWZ0ICAgPSAyNiwKKyAgSE1fS0VZX0xlZnRQYWRSaWdodCAgPSAyNywKKworICAvKiBCcmFpbGxlIEVkZ2UgcmlnaHQgcGFkICovCisgIEhNX0tFWV9SaWdodFBhZFVwICAgID0gMjgsCisgIEhNX0tFWV9SaWdodFBhZERvd24gID0gMjksCisgIEhNX0tFWV9SaWdodFBhZExlZnQgID0gMzAsCisgIEhNX0tFWV9SaWdodFBhZFJpZ2h0ID0gMzEKK30gSE1fTmF2aWdhdGlvbktleTsKKwordHlwZWRlZiBlbnVtIHsKKyAgSE1fR1JQX05hdmlnYXRpb25LZXlzID0gMCwKKyAgSE1fR1JQX1JvdXRpbmdLZXlzCit9IEhNX0tleUdyb3VwOworCisjZW5kaWYgLyogQlJMVFRZX0lOQ0xVREVEX0hNX0JSTERFRlMgKi8gCmRpZmYgLS1naXQgYS9Ecml2ZXJzL0JyYWlsbGUvSGFuZHlUZWNoL01ha2VmaWxlLmluIGIvRHJpdmVycy9CcmFpbGxlL0hhbmR5VGVjaC9NYWtlZmlsZS5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNTc2ZjA3Ci0tLSAvZGV2L251bGwKKysrIGIvRHJpdmVycy9CcmFpbGxlL0hhbmR5VGVjaC9NYWtlZmlsZS5pbgpAQCAtMCwwICsxLDI4IEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisjICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorIworIyBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisjCisjIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisjCisjIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyMgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorIyBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyMKKyMgV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworIworIyBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworRFJJVkVSX0NPREUgPSBodAorRFJJVkVSX05BTUUgPSBIYW5keVRlY2gKK0RSSVZFUl9VU0FHRSA9IE1vZHVsYXIgMjAvNDAvODAsIE1vZHVsYXIgRXZvbHV0aW9uIDY0Lzg4LCBNb2R1bGFyIENvbm5lY3QgODgsIEFjdGl2ZSBCcmFpbGxlLCBBY3RpdmUgQnJhaWxsZSBTLCBBY3RpdmUgU3RhciA0MCwgQWN0aWxpbm8sIEFjdGl2YXRvciwgQmFzaWMgQnJhaWxsZSAxNi8yMC8zMi80MC80OC82NC84MCwgQnJhaWxsaW5vLCBCcmFpbGxlIFdhdmUsIEVhc3kgQnJhaWxsZSwgQnJhaWxsZSBTdGFyIDQwLzgwLCBDb25uZWN0IEJyYWlsbGUgNDAsIEJvb2t3b3JtCitEUklWRVJfVkVSU0lPTiA9IDAuNgorRFJJVkVSX0RFVkVMT1BFUlMgPSBBbmRyZWFzIEdyb3NzIDxhbmRpLmdyb3NzQGdteC5kZT4sIERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4sIE1hcmlvIExhbmcgPG1sYW5nQGRlbHlzaWQub3JnPgoraW5jbHVkZSAkKFNSQ19UT1ApYnJhaWxsZS5taworCiticmFpbGxlLiRPOgorCSQoQ0MpICQoQlJMX0NGTEFHUykgLWMgJChTUkNfRElSKS9icmFpbGxlLmMKKwpkaWZmIC0tZ2l0IGEvRHJpdmVycy9CcmFpbGxlL0hhbmR5VGVjaC9SRUFETUUgYi9Ecml2ZXJzL0JyYWlsbGUvSGFuZHlUZWNoL1JFQURNRQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OGQyNjA4Ci0tLSAvZGV2L251bGwKKysrIGIvRHJpdmVycy9CcmFpbGxlL0hhbmR5VGVjaC9SRUFETUUKQEAgLTAsMCArMSw4MCBAQAorVGhpcyBkaXJlY3RvcnkgY29udGFpbnMgdGhlIEJSTFRUWSBkcml2ZXIgZm9yIGJyYWlsbGUgZGlzcGxheXMgd2hpY2ggYXJlCittYW51ZmFjdHVyZWQgYnkgSGFuZHkgVGVjaCBFbGVrdHJvbmlrIEdtYkggW2h0dHA6Ly93d3cuaGFuZHl0ZWNoLmNvbS9dIG9mCitHZXJtYW55LiBBcyBhIGNvbXBvbmVudCBvZiBCUkxUVFksIHRoaXMgZHJpdmVyIGlzIHJlbGVhc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZgordGhlIEdOVSBQdWJsaWMgTGljZW5zZS4KKworVGhpcyBkcml2ZXIgd2FzIG9yaWdpbmFsbHkgaW1wbGVtZW50ZWQgYnkgQW5kcmVhcyBHcm9zcyA8YW5kaUBhbmRpLWJpa2EuZGU+LiBJdAoraGFzIHNpbmNlIGJlZW4gZXh0ZW5kZWQsIGFuZCBpcyBiZWluZyBtYWludGFpbmVkLCBieSBEYXZlIE1pZWxrZQorPGRhdmVAbWllbGtlLmNjPi4gVGhhbmtzIHRvIE1pa2UgUGVkZXJzZW4gPG1wZWRlcnNlbkBtaW5kc3ByaW5nLmNvbT4gZm9yIGhpcworaGVscCB3aXRoIHRoZSBkZXNpZ24gYW5kIHRlc3Rpbmcgb2YgdGhlIEJyYWlsbGUgU3RhciBjb21wb25lbnQuIFRoYW5rcyB0byBKaWxsCitDbGFyayA8amlsbEBoYW5keXRlY2guY29tPiBvZiBIYW5keSBUZWNoIEVsZWt0cm9uaWsgZm9yIGhhdmluZyBncmFjaW91c2x5IGxlbnQKK3VzIGEgQm9va3dvcm0gc28gdGhhdCBpdHMgY29tcG9uZW50IGNvdWxkIGJlIHRlc3RlZC4gVGhhbmtzIHRvIE1hcmlvIExhbmcgCis8bWxhbmdAZGVseXNpZC5vcmc+IGZvciBoaXMgaGVscCB3aXRoIHRoZSBkZXZlbG9wbWVudCBvZiBVU0IgYW5kIGJsdWV0b290aCAKK3N1cHBvcnQuCisKK0EgSGFuZHlUZWNoIGRpc3BsYXkgY2FuIGJlIHVzZWQgdmlhIGl0cyBzZXJpYWwsIFVTQiwgb3IgYmx1ZXRvb3RoIGludGVyZmFjZS4gSWYKK3lvdSdyZSB1c2luZyBhIHNlcmlhbCBjb25uZWN0aW9uIHRoZW4gc3BlY2lmeSAic2VyaWFsOi9wYXRoL3RvL2RldmljZSIsIGUuZy4gCisic2VyaWFsOi9kZXYvdHR5UzAiLiBJZiB5b3UncmUgdXNpbmcgYSBVU0IgY29ubmVjdGlvbiB0aGVuIHNwZWNpZnkgInVzYjoiICh0aGUKK3RyYWlsaW5nIGNvbG9uIGlzIGltcG9ydGFudCkuIElmIHlvdSdyZSB1c2luZyBhIGJsdWV0b290aCBjb25uZWN0aW9uIHRoZW4KK3NwZWNpZnkgImJsdWV6OmFkZHJlc3MiLCBlLmcuICJibHVlejowMToyMzo0NTo2Nzo4OTpBQiIuCisKK0FjdGl2ZSBCcmFpbGxlOgorLS0tLS0tLS0tLS0tLS0tCisKK0FuIGV4dGVybmFsIGtleWJvYXJkIGNhbiBiZSBjb25uZWN0ZWQgdG8geW91ciBBY3RpdmUgQnJhaWxsZSB2aWEgVVNCLiBUaGUgCitrZXlib2FyZCBpcyBwcmVzZW50ZWQgdG8gdGhlIGhvc3QgYXMgdGhvdWdoIGl0IHdlcmUgYSB0cnVlIEhJRCAoSHVtYW4gSW50ZXJmYWNlIAorRGV2aWNlKSBpbiBpdHMgb3duIHJpZ2h0LiBJZiB5b3UgYXJlIHVzaW5nIFVTQiAobm90IHlldCBzdXBwb3J0ZWQpIHRvIGNvbm5lY3QgCit5b3VyIEFjdGl2ZSBCcmFpbGxlIHRvIHRoZSBob3N0LCBtb3N0IG1vZGVybiBvcGVyYXRpbmcgc3lzdGVtcyB3aWxsIAorYXV0b21hdGljYWxseSByZWNvZ25pemUgYW5kIGNvcnJlY3RseSBoYW5kbGUgdGhlIGtleWJvYXJkLiBJZiB5b3UgYXJlIHVzaW5nIAorQmx1ZXRvb3RoIHRvIGNvbm5lY3QgeW91ciBBY3RpdmUgQnJhaWxsZSB0byB0aGUgaG9zdCwgeW91IHdpbGwgbmVlZCB0byBkbyBzb21lIAorYWRkaXRpb25hbCBzZXR1cCB0byBnZXQgdGhlIGtleWJvYXJkIHdvcmtpbmcuCisKK0ZvciBCbHVldG9vdGggb24gTGludXg6IEFkZCB0aGUgQmx1ZXRvb3RoIGRldmljZSBhZGRyZXNzIGFuZCB0aGUgUElOIG9mIHlvdXIgCitBY3RpdmUgQnJhaWxsZSB0byB0aGUgZmlsZSAvdmFyL2xpYi9ibHVldG9vdGgvPGhvc3QtYWRkcmVzcz4vcGluY29kZXMgc28gdGhhdCAKK2l0IHdpbGwgc3VjY2Vzc2Z1bGx5IHBhaXIgd2l0aCB0aGUgaG9zdC4gVGhlbiwgdG8gZW5hYmxlIGtleWJvYXJkIGlucHV0IGZyb20gCit0aGUgQWN0aXZlIEJyYWlsbGUsIGV4ZWN1dGUgdGhlIGZvbGxvd2luZyBjb21tYW5kIGFzIHJvb3Q6CisKKyAgIGJsdWV6LXRlc3QtaW5wdXQgY29ubmVjdCAwMDowMTowMjowMzowNDowNQorCitOb3RlIHRoYXQgeW91IHdpbGwgbmVlZCB0byByZXBsYWNlIHRoZSBzYW1wbGUgQmx1ZXRvb3RoIGRldmljZSBhZGRyZXNzIGluIHRoZSAKK2V4YW1wbGUgYWJvdmUgd2l0aCB0aGF0IG9mIHlvdXIgQWN0aXZlIEJyYWlsbGUuCisKK0Jhc2ljIEJyYWlsbGU6CistLS0tLS0tLS0tLS0tLQorCitTdGFydGluZyB3aXRoIHRoZSBBY3RpdmUgQnJhaWxsZSwgSGFuZHkgVGVjaCBoYXMgaW50cm9kdWNlZCBhIHJlc2lzdG9yIAord2hpY2ggbGltaXRzIHRoZSBhbW91bnQgb2YgcG93ZXIgZHJhd24gdmlhIFVTQi4gVGhpcyBlbGltaW5hdGVzIAorZXhjZXNzaXZlIGRyYWluaW5nIG9mIHRoZSBob3N0J3MgYmF0dGVyeS4gVGhpcyBhcnRpZmljaWFsIHJlZHVjdGlvbiBpbiAKK3Bvd2VyIGNvbnN1bXRpb24gaGFzIHRoZSBzaWRlIGVmZmVjdCB0aGF0IHRoZSBkb3RzIGRvIG5vdCBsb3dlciBhcyAKK3F1aWNrbHkuIFRoaXMgbGVhZHMgdG8gYSBraW5kIG9mIGJsdXJyaW5nIHdoZW4geW91IHNjcm9sbCByYXBpZGx5IAordGhyb3VnaCBhIHNjcmVlbi4gSWYgeW91IGFyZSBhIHVzZXIgd2hvIGRvZXMgYSBsb3Qgb2YgcmFwaWQgc2Nyb2xsaW5nLCAKK3lvdSB3aWxsIGxpa2VseSBub3RpY2UgdGhpcyBlZmZlY3QuIFRoZSBCYXNpYyBCcmFpbGxlIGFsbG93cyB0aGlzIAorYmVoYXZpb3VyIHRvIGJlIGNvbmZpZ3VyZWQuIElmIHlvdSBjYW4gYWZmb3JkIHRvIGRyYXcgYSBsaXR0bGUgbW9yZSAKK3Bvd2VyIHZpYSBVU0IgYW5kIHdvdWxkIGxpa2UgdG8gZ2V0IHJpZCBvZiB0aGUgYmx1cnJpbmcsIGhlcmUgaXMgaG93IAordG8gY29uZmlndXJlIGl0OgorCisgIFByZXNzIGFsbCBzaXggZGlzcGxheSBrZXlzIGF0IG9uY2UgYW5kIGhvbGQgZm9yIGF0IGxlYXN0IG9uZSBzZWNvbmQuCisgIFlvdSB3aWxsIHNlZSAiQ29uZmlnIG1vZGUiIG9uIHRoZSBkaXNwbGF5LgorICBOb3cgcHJlc3MgY3Vyc29yIHJvdXRpbmcga2V5IDcgdG8gdG9nZ2xlICJISUdIIFVTQiBQT1dFUiIuCisgIFByZXNzaW5nIGRpc3BsYXkga2V5IDYgd2lsbCBsZWF2ZSBDb25maWcgbW9kZS4KKworVGhlIHN5bW1ldHJ5IG9mIHRoZSBCYXNpYyBCcmFpbGxlIG1ha2VzIGl0IGVhc3kgdG8gdXNlIHdoZW4gcm90YXRlZCAKKzE4MCBkZWdyZWVzIHN1Y2ggdGhhdCB0aGUgcm91dGluZyBrZXlzIGFyZSBiZWxvdyAocmF0aGVyIHRoYW4gYWJvdmUpIAordGhlIGJyYWlsbGUgY2VsbHMuIElmIHlvdSB3b3VsZCBwcmVmZXIgdG8gdXNlIHlvdXIgQmFzaWMgQnJhaWxsZSB0aGlzIAord2F5LCBzaW1wbHkgcHJlc3MgYm90aCB0aGUgZmlyc3QgYW5kIGxhc3Qgcm91dGluZyBrZXlzIHNpbXVsdGFuZW91c2x5IAord2hpbGUgaW4gQ29uZmlnIG1vZGUuCisKK0JyYWlsbGUgU3RhcjoKKy0tLS0tLS0tLS0tLS0KKworQnJhaWxsZSBTdGFyIG1vZGVscyBhbGxvdyB0aGUgdXNlIG9mIGFuIGV4dGVybmFsIGtleWJvYXJkIGZvciBpbnB1dC4gSXQgY2FuIGJlCit1c2VkIG5vdCBvbmx5IHdoaWxlIHRoZSBCcmFpbGxlIFN0YXIgaXMgaW4gIk5vdGV0YWtlciIgbW9kZSwgaS5lLiB3aGlsZSBub3QKK2Nvbm5lY3RlZCB0byBhbnkgZXh0ZXJuYWwgUEMgaGFyZHdhcmUsIGJ1dCBhbHNvIGFzIGEga2V5Ym9hcmQgZm9yIHRoZSBQQworaXRzZWxmLiBFaXRoZXIgY29ubmVjdCB0aGUgc2Vjb25kIFBTLzIgY2FibGUgZnJvbSB5b3VyIGRpc3BsYXkgdG8geW91ciBQQworKHRoYXQncyB0aGUgb2xkIHdheSksIG9yIGp1c3QgZGlzYWJsZSAiRXh0LiBrZXlib2FyZCBhdXRvc2VsZWN0IiBpbiB0aGUKK2ludGVybmFsIG1lbnUuIFRoaXMgbGF0dGVyLCBtdWNoIHNpbXBsZXIsIGFwcHJvYWNoIGNhdXNlcyB0aGUga2V5Ym9hcmQncworc2lnbmFscyB0byBiZSBzZW50IG92ZXIgd2hhdGV2ZXIgaW50ZXJmYWNlIChzZXJpYWwsIFVTQiwgb3IgYmx1ZXRvb3RoKSB5b3UncmUKK3VzaW5nIHRvIGNvbm5lY3QgeW91ciBkaXNwbGF5IHRvIHlvdXIgUEMuIEl0J3MgcGFydGljdWxhcmx5IGFkdmFudGFnZW91cyB0byB1c2UKK3RoZSBleHRlcm5hbCBrZXlib2FyZCBpbiBjb25qdW5jdGlvbiB3aXRoIGEgYmx1ZXRvb3RoIGNvbm5lY3Rpb24gc2luY2UgdGhpcworY29tYmluYXRpb24gZWZmZWN0aXZlbHkgdHJhbnNmb3JtcyB0aGUgQnJhaWxsZSBTdGFyIGludG8gYSBjb21wbGV0ZWx5IHdpcmVsZXNzCit5ZXQgZnVsbHkgZnVuY3Rpb25hbCBicmFpbGxlIHRlcm1pbmFsLgpkaWZmIC0tZ2l0IGEvRHJpdmVycy9CcmFpbGxlL0hhbmR5VGVjaC9icmFpbGxlLmMgYi9Ecml2ZXJzL0JyYWlsbGUvSGFuZHlUZWNoL2JyYWlsbGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YmMyYzQ0Ci0tLSAvZGV2L251bGwKKysrIGIvRHJpdmVycy9CcmFpbGxlL0hhbmR5VGVjaC9icmFpbGxlLmMKQEAgLTAsMCArMSwxNzY4IEBACisvKgorICogQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyAqICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyAqCisgKiBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorICoKKyAqIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyAqCisgKiBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisgKi8KKworI2luY2x1ZGUgInByb2xvZ3VlLmgiCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHRpbWUuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorCisjaW5jbHVkZSAibG9nLmgiCisjaW5jbHVkZSAicGFyYW1ldGVycy5oIgorI2luY2x1ZGUgImJpdGZpZWxkLmgiCisjaW5jbHVkZSAicGFyc2UuaCIKKyNpbmNsdWRlICJ0aW1pbmcuaCIKKyNpbmNsdWRlICJhc3luY193YWl0LmgiCisjaW5jbHVkZSAiYXNjaWkuaCIKKwordHlwZWRlZiBlbnVtIHsKKyAgUEFSTV9TRVRUSU1FCit9IERyaXZlclBhcmFtZXRlcjsKKyNkZWZpbmUgQlJMUEFSTVMgInNldHRpbWUiCisKKyNkZWZpbmUgQlJMU1RBVCBTVF9BbHZhU3R5bGUKKyNkZWZpbmUgQlJMX0hBVkVfU1RBVFVTX0NFTExTCisjZGVmaW5lIEJSTF9IQVZFX1BBQ0tFVF9JTworI2luY2x1ZGUgImJybF9kcml2ZXIuaCIKKyNpbmNsdWRlICJicmxkZWZzLWh0LmgiCisKK0JFR0lOX0tFWV9OQU1FX1RBQkxFKHJvdXRpbmcpCisgIEtFWV9HUk9VUF9FTlRSWShIVF9HUlBfUm91dGluZ0tleXMsICJSb3V0aW5nS2V5IiksCitFTkRfS0VZX05BTUVfVEFCTEUKKworQkVHSU5fS0VZX05BTUVfVEFCTEUoZG90cykKKyAgS0VZX05BTUVfRU5UUlkoSFRfS0VZX0IxLCAiQjEiKSwKKyAgS0VZX05BTUVfRU5UUlkoSFRfS0VZX0IyLCAiQjIiKSwKKyAgS0VZX05BTUVfRU5UUlkoSFRfS0VZX0IzLCAiQjMiKSwKKyAgS0VZX05BTUVfRU5UUlkoSFRfS0VZX0I0LCAiQjQiKSwKKworICBLRVlfTkFNRV9FTlRSWShIVF9LRVlfQjUsICJCNSIpLAorICBLRVlfTkFNRV9FTlRSWShIVF9LRVlfQjYsICJCNiIpLAorICBLRVlfTkFNRV9FTlRSWShIVF9LRVlfQjcsICJCNyIpLAorICBLRVlfTkFNRV9FTlRSWShIVF9LRVlfQjgsICJCOCIpLAorRU5EX0tFWV9OQU1FX1RBQkxFCisKK0JFR0lOX0tFWV9OQU1FX1RBQkxFKGtleXBhZCkKKyAgS0VZX05BTUVfRU5UUlkoSFRfS0VZX0IxMiwgIkIxMiIpLAorICBLRVlfTkFNRV9FTlRSWShIVF9LRVlfWmVybywgIlplcm8iKSwKKyAgS0VZX05BTUVfRU5UUlkoSFRfS0VZX0IxMywgIkIxMyIpLAorICBLRVlfTkFNRV9FTlRSWShIVF9LRVlfQjE0LCAiQjE0IiksCisKKyAgS0VZX05BTUVfRU5UUlkoSFRfS0VZX0IxMSwgIkIxMSIpLAorICBLRVlfTkFNRV9FTlRSWShIVF9LRVlfT25lLCAiT25lIiksCisgIEtFWV9OQU1FX0VOVFJZKEhUX0tFWV9Ud28sICJUd28iKSwKKyAgS0VZX05BTUVfRU5UUlkoSFRfS0VZX1RocmVlLCAiVGhyZWUiKSwKKworICBLRVlfTkFNRV9FTlRSWShIVF9LRVlfQjEwLCAiQjEwIiksCisgIEtFWV9OQU1FX0VOVFJZKEhUX0tFWV9Gb3VyLCAiRm91ciIpLAorICBLRVlfTkFNRV9FTlRSWShIVF9LRVlfRml2ZSwgIkZpdmUiKSwKKyAgS0VZX05BTUVfRU5UUlkoSFRfS0VZX1NpeCwgIlNpeCIpLAorCisgIEtFWV9OQU1FX0VOVFJZKEhUX0tFWV9COSwgIkI5IiksCisgIEtFWV9OQU1FX0VOVFJZKEhUX0tFWV9TZXZlbiwgIlNldmVuIiksCisgIEtFWV9OQU1FX0VOVFJZKEhUX0tFWV9FaWdodCwgIkVpZ2h0IiksCisgIEtFWV9OQU1FX0VOVFJZKEhUX0tFWV9OaW5lLCAiTmluZSIpLAorRU5EX0tFWV9OQU1FX1RBQkxFCisKK0JFR0lOX0tFWV9OQU1FX1RBQkxFKHJvY2tlcnMpCisgIEtFWV9OQU1FX0VOVFJZKEhUX0tFWV9Fc2NhcGUsICJMZWZ0Um9ja2VyVG9wIiksCisgIEtFWV9OQU1FX0VOVFJZKEhUX0tFWV9SZXR1cm4sICJMZWZ0Um9ja2VyQm90dG9tIiksCisKKyAgS0VZX05BTUVfRU5UUlkoSFRfS0VZX1VwLCAiUmlnaHRSb2NrZXJUb3AiKSwKKyAgS0VZX05BTUVfRU5UUlkoSFRfS0VZX0Rvd24sICJSaWdodFJvY2tlckJvdHRvbSIpLAorRU5EX0tFWV9OQU1FX1RBQkxFCisKK0JFR0lOX0tFWV9OQU1FX1RBQkxFKG5hdmlnYXRpb24pCisgIEtFWV9OQU1FX0VOVFJZKEhUX0tFWV9Fc2NhcGUsICJEaXNwbGF5MSIpLAorICBLRVlfTkFNRV9FTlRSWShIVF9LRVlfTGVmdENlbnRlciwgIkRpc3BsYXkyIiksCisgIEtFWV9OQU1FX0VOVFJZKEhUX0tFWV9SZXR1cm4sICJEaXNwbGF5MyIpLAorCisgIEtFWV9OQU1FX0VOVFJZKEhUX0tFWV9VcCwgIkRpc3BsYXk0IiksCisgIEtFWV9OQU1FX0VOVFJZKEhUX0tFWV9SaWdodENlbnRlciwgIkRpc3BsYXk1IiksCisgIEtFWV9OQU1FX0VOVFJZKEhUX0tFWV9Eb3duLCAiRGlzcGxheTYiKSwKK0VORF9LRVlfTkFNRV9UQUJMRQorCitCRUdJTl9LRVlfTkFNRV9UQUJMRShqb3lzdGljaykKKyAgS0VZX05BTUVfRU5UUlkoSFRfS0VZX0pveXN0aWNrTGVmdCwgIkxlZnQiKSwKKyAgS0VZX05BTUVfRU5UUlkoSFRfS0VZX0pveXN0aWNrUmlnaHQsICJSaWdodCIpLAorICBLRVlfTkFNRV9FTlRSWShIVF9LRVlfSm95c3RpY2tVcCwgIlVwIiksCisgIEtFWV9OQU1FX0VOVFJZKEhUX0tFWV9Kb3lzdGlja0Rvd24sICJEb3duIiksCisgIEtFWV9OQU1FX0VOVFJZKEhUX0tFWV9Kb3lzdGlja0FjdGlvbiwgIkFjdGlvbiIpLAorRU5EX0tFWV9OQU1FX1RBQkxFCisKK0JFR0lOX0tFWV9OQU1FX1RBQkxFKG1vZHVsYXIpCisgIEtFWV9OQU1FX0VOVFJZKEhUX0tFWV9VcCwgIkxlZnQiKSwKKyAgS0VZX05BTUVfRU5UUlkoSFRfS0VZX0Rvd24sICJSaWdodCIpLAorCisgIEtFWV9OQU1FX0VOVFJZKEhUX0tFWV9TVEFUVVMrMCwgIlN0YXR1czEiKSwKKyAgS0VZX05BTUVfRU5UUlkoSFRfS0VZX1NUQVRVUysxLCAiU3RhdHVzMiIpLAorICBLRVlfTkFNRV9FTlRSWShIVF9LRVlfU1RBVFVTKzIsICJTdGF0dXMzIiksCisgIEtFWV9OQU1FX0VOVFJZKEhUX0tFWV9TVEFUVVMrMywgIlN0YXR1czQiKSwKK0VORF9LRVlfTkFNRV9UQUJMRQorCitCRUdJTl9LRVlfTkFNRV9UQUJMRVMobWRscikKKyAgS0VZX05BTUVfVEFCTEUocm91dGluZyksCisgIEtFWV9OQU1FX1RBQkxFKGRvdHMpLAorICBLRVlfTkFNRV9UQUJMRShrZXlwYWQpLAorICBLRVlfTkFNRV9UQUJMRShtb2R1bGFyKSwKK0VORF9LRVlfTkFNRV9UQUJMRVMKKworQkVHSU5fS0VZX05BTUVfVEFCTEUobW9kdWxhckV2b2x1dGlvbikKKyAgS0VZX05BTUVfRU5UUlkoSFRfS0VZX1NwYWNlLCAiTGVmdCIpLAorICBLRVlfTkFNRV9FTlRSWShIVF9LRVlfU3BhY2VSaWdodCwgIlJpZ2h0IiksCitFTkRfS0VZX05BTUVfVEFCTEUKKworQkVHSU5fS0VZX05BTUVfVEFCTEVTKG1lNjQpCisgIEtFWV9OQU1FX1RBQkxFKHJvdXRpbmcpLAorICBLRVlfTkFNRV9UQUJMRShkb3RzKSwKKyAgS0VZX05BTUVfVEFCTEUocm9ja2VycyksCisgIEtFWV9OQU1FX1RBQkxFKG1vZHVsYXJFdm9sdXRpb24pLAorRU5EX0tFWV9OQU1FX1RBQkxFUworCitCRUdJTl9LRVlfTkFNRV9UQUJMRVMobWU4OCkKKyAgS0VZX05BTUVfVEFCTEUocm91dGluZyksCisgIEtFWV9OQU1FX1RBQkxFKGRvdHMpLAorICBLRVlfTkFNRV9UQUJMRShyb2NrZXJzKSwKKyAgS0VZX05BTUVfVEFCTEUoa2V5cGFkKSwKKyAgS0VZX05BTUVfVEFCTEUobW9kdWxhckV2b2x1dGlvbiksCitFTkRfS0VZX05BTUVfVEFCTEVTCisKK0JFR0lOX0tFWV9OQU1FX1RBQkxFUyhtYzg4KQorICBLRVlfTkFNRV9UQUJMRShyb3V0aW5nKSwKKyAgS0VZX05BTUVfVEFCTEUoZG90cyksCisgIEtFWV9OQU1FX1RBQkxFKHJvY2tlcnMpLAorICBLRVlfTkFNRV9UQUJMRShrZXlwYWQpLAorICBLRVlfTkFNRV9UQUJMRShtb2R1bGFyRXZvbHV0aW9uKSwKK0VORF9LRVlfTkFNRV9UQUJMRVMKKworQkVHSU5fS0VZX05BTUVfVEFCTEUoYnJhaWxsZVN0YXIpCisgIEtFWV9OQU1FX0VOVFJZKEhUX0tFWV9TcGFjZSwgIlNwYWNlTGVmdCIpLAorICBLRVlfTkFNRV9FTlRSWShIVF9LRVlfU3BhY2VSaWdodCwgIlNwYWNlUmlnaHQiKSwKK0VORF9LRVlfTkFNRV9UQUJMRQorCitCRUdJTl9LRVlfTkFNRV9UQUJMRVMoYnM0MCkKKyAgS0VZX05BTUVfVEFCTEUocm91dGluZyksCisgIEtFWV9OQU1FX1RBQkxFKGRvdHMpLAorICBLRVlfTkFNRV9UQUJMRShyb2NrZXJzKSwKKyAgS0VZX05BTUVfVEFCTEUoYnJhaWxsZVN0YXIpLAorRU5EX0tFWV9OQU1FX1RBQkxFUworCitCRUdJTl9LRVlfTkFNRV9UQUJMRVMoYnM4MCkKKyAgS0VZX05BTUVfVEFCTEUocm91dGluZyksCisgIEtFWV9OQU1FX1RBQkxFKGRvdHMpLAorICBLRVlfTkFNRV9UQUJMRShyb2NrZXJzKSwKKyAgS0VZX05BTUVfVEFCTEUoa2V5cGFkKSwKKyAgS0VZX05BTUVfVEFCTEUoYnJhaWxsZVN0YXIpLAorRU5EX0tFWV9OQU1FX1RBQkxFUworCitCRUdJTl9LRVlfTkFNRV9UQUJMRVMoYnJsbikKKyAgS0VZX05BTUVfVEFCTEUocm91dGluZyksCisgIEtFWV9OQU1FX1RBQkxFKGRvdHMpLAorICBLRVlfTkFNRV9UQUJMRShyb2NrZXJzKSwKKyAgS0VZX05BTUVfVEFCTEUoYnJhaWxsZVN0YXIpLAorRU5EX0tFWV9OQU1FX1RBQkxFUworCitCRUdJTl9LRVlfTkFNRV9UQUJMRVMoYXM0MCkKKyAgS0VZX05BTUVfVEFCTEUocm91dGluZyksCisgIEtFWV9OQU1FX1RBQkxFKGRvdHMpLAorICBLRVlfTkFNRV9UQUJMRShyb2NrZXJzKSwKKyAgS0VZX05BTUVfVEFCTEUoYnJhaWxsZVN0YXIpLAorRU5EX0tFWV9OQU1FX1RBQkxFUworCitCRUdJTl9LRVlfTkFNRV9UQUJMRVMoYWIpCisgIEtFWV9OQU1FX1RBQkxFKHJvdXRpbmcpLAorICBLRVlfTkFNRV9UQUJMRShkb3RzKSwKKyAgS0VZX05BTUVfVEFCTEUocm9ja2VycyksCisgIEtFWV9OQU1FX1RBQkxFKGJyYWlsbGVTdGFyKSwKK0VORF9LRVlfTkFNRV9UQUJMRVMKKworQkVHSU5fS0VZX05BTUVfVEFCTEVTKGFiX3MpCisgIEtFWV9OQU1FX1RBQkxFKHJvdXRpbmcpLAorICBLRVlfTkFNRV9UQUJMRShkb3RzKSwKKyAgS0VZX05BTUVfVEFCTEUocm9ja2VycyksCisgIEtFWV9OQU1FX1RBQkxFKGJyYWlsbGVTdGFyKSwKKyAgS0VZX05BTUVfVEFCTEUoam95c3RpY2spLAorRU5EX0tFWV9OQU1FX1RBQkxFUworCitCRUdJTl9LRVlfTkFNRV9UQUJMRVMoY2I0MCkKKyAgS0VZX05BTUVfVEFCTEUocm91dGluZyksCisgIEtFWV9OQU1FX1RBQkxFKGRvdHMpLAorICBLRVlfTkFNRV9UQUJMRShyb2NrZXJzKSwKKyAgS0VZX05BTUVfVEFCTEUoYnJhaWxsZVN0YXIpLAorRU5EX0tFWV9OQU1FX1RBQkxFUworCitCRUdJTl9LRVlfTkFNRV9UQUJMRShicmFpbGxlV2F2ZSkKKyAgS0VZX05BTUVfRU5UUlkoSFRfS0VZX1VwLCAiTGVmdCIpLAorICBLRVlfTkFNRV9FTlRSWShIVF9LRVlfRG93biwgIlJpZ2h0IiksCisKKyAgS0VZX05BTUVfRU5UUlkoSFRfS0VZX0VzY2FwZSwgIkVzY2FwZSIpLAorICBLRVlfTkFNRV9FTlRSWShIVF9LRVlfU3BhY2UsICJTcGFjZSIpLAorICBLRVlfTkFNRV9FTlRSWShIVF9LRVlfUmV0dXJuLCAiUmV0dXJuIiksCitFTkRfS0VZX05BTUVfVEFCTEUKKworQkVHSU5fS0VZX05BTUVfVEFCTEVTKHdhdmUpCisgIEtFWV9OQU1FX1RBQkxFKHJvdXRpbmcpLAorICBLRVlfTkFNRV9UQUJMRShkb3RzKSwKKyAgS0VZX05BTUVfVEFCTEUoYnJhaWxsZVdhdmUpLAorRU5EX0tFWV9OQU1FX1RBQkxFUworCitCRUdJTl9LRVlfTkFNRV9UQUJMRShlYXN5QnJhaWxsZSkKKyAgS0VZX05BTUVfRU5UUlkoSFRfS0VZX1VwLCAiTGVmdCIpLAorICBLRVlfTkFNRV9FTlRSWShIVF9LRVlfRG93biwgIlJpZ2h0IiksCitFTkRfS0VZX05BTUVfVEFCTEUKKworQkVHSU5fS0VZX05BTUVfVEFCTEVTKGVhc3kpCisgIEtFWV9OQU1FX1RBQkxFKHJvdXRpbmcpLAorICBLRVlfTkFNRV9UQUJMRShkb3RzKSwKKyAgS0VZX05BTUVfVEFCTEUoZWFzeUJyYWlsbGUpLAorRU5EX0tFWV9OQU1FX1RBQkxFUworCitCRUdJTl9LRVlfTkFNRV9UQUJMRShiYXNpY0JyYWlsbGUpCisgIEtFWV9OQU1FX0VOVFJZKEhUX0tFWV9CMiwgIkRpc3BsYXkzIiksCisgIEtFWV9OQU1FX0VOVFJZKEhUX0tFWV9CMywgIkRpc3BsYXkyIiksCisgIEtFWV9OQU1FX0VOVFJZKEhUX0tFWV9CNCwgIkRpc3BsYXkxIiksCisgIEtFWV9OQU1FX0VOVFJZKEhUX0tFWV9CNSwgIkRpc3BsYXk0IiksCisgIEtFWV9OQU1FX0VOVFJZKEhUX0tFWV9CNiwgIkRpc3BsYXk1IiksCisgIEtFWV9OQU1FX0VOVFJZKEhUX0tFWV9CNywgIkRpc3BsYXk2IiksCitFTkRfS0VZX05BTUVfVEFCTEUKKworQkVHSU5fS0VZX05BTUVfVEFCTEVTKGJiKQorICBLRVlfTkFNRV9UQUJMRShyb3V0aW5nKSwKKyAgS0VZX05BTUVfVEFCTEUoYmFzaWNCcmFpbGxlKSwKK0VORF9LRVlfTkFNRV9UQUJMRVMKKworQkVHSU5fS0VZX05BTUVfVEFCTEVTKGJicCkKKyAgS0VZX05BTUVfVEFCTEUocm91dGluZyksCisgIEtFWV9OQU1FX1RBQkxFKGRvdHMpLAorICBLRVlfTkFNRV9UQUJMRShyb2NrZXJzKSwKKyAgS0VZX05BTUVfVEFCTEUoYnJhaWxsZVN0YXIpLAorRU5EX0tFWV9OQU1FX1RBQkxFUworCitCRUdJTl9LRVlfTkFNRV9UQUJMRVMoYWxvKQorICBLRVlfTkFNRV9UQUJMRShyb3V0aW5nKSwKKyAgS0VZX05BTUVfVEFCTEUoZG90cyksCisgIEtFWV9OQU1FX1RBQkxFKHJvY2tlcnMpLAorICBLRVlfTkFNRV9UQUJMRShicmFpbGxlU3RhciksCisgIEtFWV9OQU1FX1RBQkxFKGpveXN0aWNrKSwKK0VORF9LRVlfTkFNRV9UQUJMRVMKKworQkVHSU5fS0VZX05BTUVfVEFCTEVTKGFjNCkKKyAgS0VZX05BTUVfVEFCTEUocm91dGluZyksCisgIEtFWV9OQU1FX1RBQkxFKGRvdHMpLAorICBLRVlfTkFNRV9UQUJMRShuYXZpZ2F0aW9uKSwKKyAgS0VZX05BTUVfVEFCTEUoYnJhaWxsZVN0YXIpLAorICBLRVlfTkFNRV9UQUJMRShqb3lzdGljayksCitFTkRfS0VZX05BTUVfVEFCTEVTCisKK3R5cGVkZWYgZW51bSB7CisgIEhUX0JXS19CYWNrd2FyZCA9IDBYMDEsCisgIEhUX0JXS19Gb3J3YXJkID0gMFgwOCwKKworICBIVF9CV0tfRXNjYXBlID0gMFgwMiwKKyAgSFRfQldLX0VudGVyID0gMFgwNAorfSBIVF9Cb29rd29ybUtleTsKKworQkVHSU5fS0VZX05BTUVfVEFCTEUoYm9va3dvcm0pCisgIEtFWV9OQU1FX0VOVFJZKEhUX0JXS19CYWNrd2FyZCwgIkJhY2t3YXJkIiksCisgIEtFWV9OQU1FX0VOVFJZKEhUX0JXS19Gb3J3YXJkLCAiRm9yd2FyZCIpLAorCisgIEtFWV9OQU1FX0VOVFJZKEhUX0JXS19Fc2NhcGUsICJFc2NhcGUiKSwKKyAgS0VZX05BTUVfRU5UUlkoSFRfQldLX0VudGVyLCAiRW50ZXIiKSwKK0VORF9LRVlfTkFNRV9UQUJMRQorCitCRUdJTl9LRVlfTkFNRV9UQUJMRVMoYmt3bSkKKyAgS0VZX05BTUVfVEFCTEUoYm9va3dvcm0pLAorRU5EX0tFWV9OQU1FX1RBQkxFUworCitERUZJTkVfS0VZX1RBQkxFKG1kbHIpCitERUZJTkVfS0VZX1RBQkxFKG1lNjQpCitERUZJTkVfS0VZX1RBQkxFKG1lODgpCitERUZJTkVfS0VZX1RBQkxFKG1jODgpCitERUZJTkVfS0VZX1RBQkxFKGJzNDApCitERUZJTkVfS0VZX1RBQkxFKGJzODApCitERUZJTkVfS0VZX1RBQkxFKGJybG4pCitERUZJTkVfS0VZX1RBQkxFKGFzNDApCitERUZJTkVfS0VZX1RBQkxFKGFiKQorREVGSU5FX0tFWV9UQUJMRShhYl9zKQorREVGSU5FX0tFWV9UQUJMRShjYjQwKQorREVGSU5FX0tFWV9UQUJMRSh3YXZlKQorREVGSU5FX0tFWV9UQUJMRShlYXN5KQorREVGSU5FX0tFWV9UQUJMRShiYikKK0RFRklORV9LRVlfVEFCTEUoYmJwKQorREVGSU5FX0tFWV9UQUJMRShhbG8pCitERUZJTkVfS0VZX1RBQkxFKGFjNCkKK0RFRklORV9LRVlfVEFCTEUoYmt3bSkKKworQkVHSU5fS0VZX1RBQkxFX0xJU1QKKyAgJktFWV9UQUJMRV9ERUZJTklUSU9OKG1kbHIpLAorICAmS0VZX1RBQkxFX0RFRklOSVRJT04obWU2NCksCisgICZLRVlfVEFCTEVfREVGSU5JVElPTihtZTg4KSwKKyAgJktFWV9UQUJMRV9ERUZJTklUSU9OKG1jODgpLAorICAmS0VZX1RBQkxFX0RFRklOSVRJT04oYnM0MCksCisgICZLRVlfVEFCTEVfREVGSU5JVElPTihiczgwKSwKKyAgJktFWV9UQUJMRV9ERUZJTklUSU9OKGJybG4pLAorICAmS0VZX1RBQkxFX0RFRklOSVRJT04oYXM0MCksCisgICZLRVlfVEFCTEVfREVGSU5JVElPTihhYiksCisgICZLRVlfVEFCTEVfREVGSU5JVElPTihhYl9zKSwKKyAgJktFWV9UQUJMRV9ERUZJTklUSU9OKGNiNDApLAorICAmS0VZX1RBQkxFX0RFRklOSVRJT04od2F2ZSksCisgICZLRVlfVEFCTEVfREVGSU5JVElPTihlYXN5KSwKKyAgJktFWV9UQUJMRV9ERUZJTklUSU9OKGJiKSwKKyAgJktFWV9UQUJMRV9ERUZJTklUSU9OKGJicCksCisgICZLRVlfVEFCTEVfREVGSU5JVElPTihhbG8pLAorICAmS0VZX1RBQkxFX0RFRklOSVRJT04oYWM0KSwKKyAgJktFWV9UQUJMRV9ERUZJTklUSU9OKGJrd20pLAorRU5EX0tFWV9UQUJMRV9MSVNUCisKK3N0YXRpYyBpbnQKK2VuZFNlc3Npb25fQm9va3dvcm0gKEJyYWlsbGVEaXNwbGF5ICpicmwpIHsKKyAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2Vzc2lvbkVuZFtdID0gezBYMDUsIDBYMDd9OworICByZXR1cm4gd3JpdGVCcmFpbGxlTWVzc2FnZShicmwsIE5VTEwsIDAsIHNlc3Npb25FbmQsIHNpemVvZihzZXNzaW9uRW5kKSk7Cit9CisKK3R5cGVkZWYgaW50IEJ5dGVJbnRlcnByZXRlciAoQnJhaWxsZURpc3BsYXkgKmJybCwgdW5zaWduZWQgY2hhciBieXRlKTsKK3N0YXRpYyBCeXRlSW50ZXJwcmV0ZXIgaW50ZXJwcmV0Qnl0ZV9rZXk7CitzdGF0aWMgQnl0ZUludGVycHJldGVyIGludGVycHJldEJ5dGVfQm9va3dvcm07CisKK3R5cGVkZWYgaW50IChDZWxsV3JpdGVyKSAoQnJhaWxsZURpc3BsYXkgKmJybCk7CitzdGF0aWMgQ2VsbFdyaXRlciB3cml0ZUNlbGxzX3N0YXR1c0FuZFRleHQ7CitzdGF0aWMgQ2VsbFdyaXRlciB3cml0ZUNlbGxzX0Jvb2t3b3JtOworc3RhdGljIENlbGxXcml0ZXIgd3JpdGVDZWxsc19Fdm9sdXRpb247CisKK3N0YXRpYyBTZXRCcmFpbGxlRmlybW5lc3NNZXRob2Qgc2V0QnJhaWxsZUZpcm1uZXNzOworCitzdGF0aWMgU2V0VG91Y2hTZW5zaXRpdml0eU1ldGhvZCBzZXRUb3VjaFNlbnNpdGl2aXR5X0V2b2x1dGlvbjsKK3N0YXRpYyBTZXRUb3VjaFNlbnNpdGl2aXR5TWV0aG9kIHNldFRvdWNoU2Vuc2l0aXZpdHlfQWN0aXZlQnJhaWxsZTsKKwordHlwZWRlZiBzdHJ1Y3QgeworICBjb25zdCBjaGFyICpuYW1lOworICBjb25zdCBLZXlUYWJsZURlZmluaXRpb24gKmtleVRhYmxlRGVmaW5pdGlvbjsKKworICBCeXRlSW50ZXJwcmV0ZXIgKmludGVycHJldEJ5dGU7CisgIENlbGxXcml0ZXIgKndyaXRlQ2VsbHM7CisgIFNldEJyYWlsbGVGaXJtbmVzc01ldGhvZCAqc2V0QnJhaWxsZUZpcm1uZXNzOworICBTZXRUb3VjaFNlbnNpdGl2aXR5TWV0aG9kICpzZXRUb3VjaFNlbnNpdGl2aXR5OworCisgIEJyYWlsbGVTZXNzaW9uRW5kZXIgKnNlc3Npb25FbmRlcjsKKworICBIVF9Nb2RlbElkZW50aWZpZXIgaWRlbnRpZmllcjo4OworICB1bnNpZ25lZCBjaGFyIHRleHRDZWxsczsKKyAgdW5zaWduZWQgY2hhciBzdGF0dXNDZWxsczsKKworICB1bnNpZ25lZCBoYXNBVEM6MTsgLyogQWN0aXZlIFRhY3RpbGUgQ29udHJvbCAqLworICB1bnNpZ25lZCBoYXNUaW1lOjE7Cit9IE1vZGVsRW50cnk7CisKK3N0YXRpYyBjb25zdCBNb2RlbEVudHJ5IG1vZGVsVGFibGVbXSA9IHsKKyAgeyAuaWRlbnRpZmllciA9IEhUX01PREVMX01vZHVsYXIyMCwKKyAgICAubmFtZSA9ICJNb2R1bGFyIDIwKzQiLAorICAgIC50ZXh0Q2VsbHMgPSAyMCwKKyAgICAuc3RhdHVzQ2VsbHMgPSA0LAorICAgIC5rZXlUYWJsZURlZmluaXRpb24gPSAmS0VZX1RBQkxFX0RFRklOSVRJT04obWRsciksCisgICAgLmludGVycHJldEJ5dGUgPSBpbnRlcnByZXRCeXRlX2tleSwKKyAgICAud3JpdGVDZWxscyA9IHdyaXRlQ2VsbHNfc3RhdHVzQW5kVGV4dAorICB9LAorCisgIHsgLmlkZW50aWZpZXIgPSBIVF9NT0RFTF9Nb2R1bGFyNDAsCisgICAgLm5hbWUgPSAiTW9kdWxhciA0MCs0IiwKKyAgICAudGV4dENlbGxzID0gNDAsCisgICAgLnN0YXR1c0NlbGxzID0gNCwKKyAgICAua2V5VGFibGVEZWZpbml0aW9uID0gJktFWV9UQUJMRV9ERUZJTklUSU9OKG1kbHIpLAorICAgIC5pbnRlcnByZXRCeXRlID0gaW50ZXJwcmV0Qnl0ZV9rZXksCisgICAgLndyaXRlQ2VsbHMgPSB3cml0ZUNlbGxzX3N0YXR1c0FuZFRleHQKKyAgfSwKKworICB7IC5pZGVudGlmaWVyID0gSFRfTU9ERUxfTW9kdWxhcjgwLAorICAgIC5uYW1lID0gIk1vZHVsYXIgODArNCIsCisgICAgLnRleHRDZWxscyA9IDgwLAorICAgIC5zdGF0dXNDZWxscyA9IDQsCisgICAgLmtleVRhYmxlRGVmaW5pdGlvbiA9ICZLRVlfVEFCTEVfREVGSU5JVElPTihtZGxyKSwKKyAgICAuaW50ZXJwcmV0Qnl0ZSA9IGludGVycHJldEJ5dGVfa2V5LAorICAgIC53cml0ZUNlbGxzID0gd3JpdGVDZWxsc19zdGF0dXNBbmRUZXh0CisgIH0sCisKKyAgeyAuaWRlbnRpZmllciA9IEhUX01PREVMX01vZHVsYXJFdm9sdXRpb242NCwKKyAgICAubmFtZSA9ICJNb2R1bGFyIEV2b2x1dGlvbiA2NCIsCisgICAgLnRleHRDZWxscyA9IDY0LAorICAgIC5zdGF0dXNDZWxscyA9IDAsCisgICAgLmtleVRhYmxlRGVmaW5pdGlvbiA9ICZLRVlfVEFCTEVfREVGSU5JVElPTihtZTY0KSwKKyAgICAuaW50ZXJwcmV0Qnl0ZSA9IGludGVycHJldEJ5dGVfa2V5LAorICAgIC53cml0ZUNlbGxzID0gd3JpdGVDZWxsc19Fdm9sdXRpb24sCisgICAgLnNldFRvdWNoU2Vuc2l0aXZpdHkgPSBzZXRUb3VjaFNlbnNpdGl2aXR5X0V2b2x1dGlvbiwKKyAgICAuaGFzQVRDID0gMQorICB9LAorCisgIHsgLmlkZW50aWZpZXIgPSBIVF9NT0RFTF9Nb2R1bGFyRXZvbHV0aW9uODgsCisgICAgLm5hbWUgPSAiTW9kdWxhciBFdm9sdXRpb24gODgiLAorICAgIC50ZXh0Q2VsbHMgPSA4OCwKKyAgICAuc3RhdHVzQ2VsbHMgPSAwLAorICAgIC5rZXlUYWJsZURlZmluaXRpb24gPSAmS0VZX1RBQkxFX0RFRklOSVRJT04obWU4OCksCisgICAgLmludGVycHJldEJ5dGUgPSBpbnRlcnByZXRCeXRlX2tleSwKKyAgICAud3JpdGVDZWxscyA9IHdyaXRlQ2VsbHNfRXZvbHV0aW9uLAorICAgIC5zZXRUb3VjaFNlbnNpdGl2aXR5ID0gc2V0VG91Y2hTZW5zaXRpdml0eV9Fdm9sdXRpb24sCisgICAgLmhhc0FUQyA9IDEKKyAgfSwKKworICB7IC5pZGVudGlmaWVyID0gSFRfTU9ERUxfQnJhaWxsZVdhdmUsCisgICAgLm5hbWUgPSAiQnJhaWxsZSBXYXZlIiwKKyAgICAudGV4dENlbGxzID0gNDAsCisgICAgLnN0YXR1c0NlbGxzID0gMCwKKyAgICAua2V5VGFibGVEZWZpbml0aW9uID0gJktFWV9UQUJMRV9ERUZJTklUSU9OKHdhdmUpLAorICAgIC5pbnRlcnByZXRCeXRlID0gaW50ZXJwcmV0Qnl0ZV9rZXksCisgICAgLndyaXRlQ2VsbHMgPSB3cml0ZUNlbGxzX3N0YXR1c0FuZFRleHQKKyAgfSwKKworICB7IC5pZGVudGlmaWVyID0gSFRfTU9ERUxfQm9va3dvcm0sCisgICAgLm5hbWUgPSAiQm9va3dvcm0iLAorICAgIC50ZXh0Q2VsbHMgPSA4LAorICAgIC5zdGF0dXNDZWxscyA9IDAsCisgICAgLmtleVRhYmxlRGVmaW5pdGlvbiA9ICZLRVlfVEFCTEVfREVGSU5JVElPTihia3dtKSwKKyAgICAuaW50ZXJwcmV0Qnl0ZSA9IGludGVycHJldEJ5dGVfQm9va3dvcm0sCisgICAgLndyaXRlQ2VsbHMgPSB3cml0ZUNlbGxzX0Jvb2t3b3JtLAorICAgIC5zZXNzaW9uRW5kZXIgPSBlbmRTZXNzaW9uX0Jvb2t3b3JtCisgIH0sCisKKyAgeyAuaWRlbnRpZmllciA9IEhUX01PREVMX0JyYWlsbGlubywKKyAgICAubmFtZSA9ICJCcmFpbGxpbm8iLAorICAgIC50ZXh0Q2VsbHMgPSAyMCwKKyAgICAuc3RhdHVzQ2VsbHMgPSAwLAorICAgIC5rZXlUYWJsZURlZmluaXRpb24gPSAmS0VZX1RBQkxFX0RFRklOSVRJT04oYnJsbiksCisgICAgLmludGVycHJldEJ5dGUgPSBpbnRlcnByZXRCeXRlX2tleSwKKyAgICAud3JpdGVDZWxscyA9IHdyaXRlQ2VsbHNfc3RhdHVzQW5kVGV4dAorICB9LAorCisgIHsgLmlkZW50aWZpZXIgPSBIVF9NT0RFTF9CcmFpbGxlU3RhcjQwLAorICAgIC5uYW1lID0gIkJyYWlsbGUgU3RhciA0MCIsCisgICAgLnRleHRDZWxscyA9IDQwLAorICAgIC5zdGF0dXNDZWxscyA9IDAsCisgICAgLmtleVRhYmxlRGVmaW5pdGlvbiA9ICZLRVlfVEFCTEVfREVGSU5JVElPTihiczQwKSwKKyAgICAuaW50ZXJwcmV0Qnl0ZSA9IGludGVycHJldEJ5dGVfa2V5LAorICAgIC53cml0ZUNlbGxzID0gd3JpdGVDZWxsc19zdGF0dXNBbmRUZXh0CisgIH0sCisKKyAgeyAuaWRlbnRpZmllciA9IEhUX01PREVMX0JyYWlsbGVTdGFyODAsCisgICAgLm5hbWUgPSAiQnJhaWxsZSBTdGFyIDgwIiwKKyAgICAudGV4dENlbGxzID0gODAsCisgICAgLnN0YXR1c0NlbGxzID0gMCwKKyAgICAua2V5VGFibGVEZWZpbml0aW9uID0gJktFWV9UQUJMRV9ERUZJTklUSU9OKGJzODApLAorICAgIC5pbnRlcnByZXRCeXRlID0gaW50ZXJwcmV0Qnl0ZV9rZXksCisgICAgLndyaXRlQ2VsbHMgPSB3cml0ZUNlbGxzX3N0YXR1c0FuZFRleHQKKyAgfSwKKworICB7IC5pZGVudGlmaWVyID0gSFRfTU9ERUxfRWFzeUJyYWlsbGUsCisgICAgLm5hbWUgPSAiRWFzeSBCcmFpbGxlIiwKKyAgICAudGV4dENlbGxzID0gNDAsCisgICAgLnN0YXR1c0NlbGxzID0gMCwKKyAgICAua2V5VGFibGVEZWZpbml0aW9uID0gJktFWV9UQUJMRV9ERUZJTklUSU9OKGVhc3kpLAorICAgIC5pbnRlcnByZXRCeXRlID0gaW50ZXJwcmV0Qnl0ZV9rZXksCisgICAgLndyaXRlQ2VsbHMgPSB3cml0ZUNlbGxzX0V2b2x1dGlvbgorICB9LAorCisgIHsgLmlkZW50aWZpZXIgPSBIVF9NT0RFTF9BY3RpdmVCcmFpbGxlLAorICAgIC5uYW1lID0gIkFjdGl2ZSBCcmFpbGxlIiwKKyAgICAudGV4dENlbGxzID0gNDAsCisgICAgLnN0YXR1c0NlbGxzID0gMCwKKyAgICAua2V5VGFibGVEZWZpbml0aW9uID0gJktFWV9UQUJMRV9ERUZJTklUSU9OKGFiKSwKKyAgICAuaW50ZXJwcmV0Qnl0ZSA9IGludGVycHJldEJ5dGVfa2V5LAorICAgIC53cml0ZUNlbGxzID0gd3JpdGVDZWxsc19Fdm9sdXRpb24sCisgICAgLnNldEJyYWlsbGVGaXJtbmVzcyA9IHNldEJyYWlsbGVGaXJtbmVzcywKKyAgICAuc2V0VG91Y2hTZW5zaXRpdml0eSA9IHNldFRvdWNoU2Vuc2l0aXZpdHlfQWN0aXZlQnJhaWxsZSwKKyAgICAuaGFzQVRDID0gMSwKKyAgICAuaGFzVGltZSA9IDEKKyAgfSwKKworI2RlZmluZSBIVF9CQVNJQ19CUkFJTExFKGNlbGxzKSAgICAgICAgICAgICAgICAgICAgIFwKKyAgeyAuaWRlbnRpZmllciA9IEhUX01PREVMX0Jhc2ljQnJhaWxsZSMjY2VsbHMsICAgICBcCisgICAgLm5hbWUgPSAiQmFzaWMgQnJhaWxsZSAiIFNUUklOR0lGWShjZWxscyksICAgICAgXAorICAgIC50ZXh0Q2VsbHMgPSBjZWxscywgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAuc3RhdHVzQ2VsbHMgPSAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgLmtleVRhYmxlRGVmaW5pdGlvbiA9ICZLRVlfVEFCTEVfREVGSU5JVElPTihiYiksXAorICAgIC5pbnRlcnByZXRCeXRlID0gaW50ZXJwcmV0Qnl0ZV9rZXksICAgICAgICAgICAgIFwKKyAgICAud3JpdGVDZWxscyA9IHdyaXRlQ2VsbHNfRXZvbHV0aW9uICAgICAgICAgICAgICBcCisgIH0KKyAgSFRfQkFTSUNfQlJBSUxMRSgxNiksCisgIEhUX0JBU0lDX0JSQUlMTEUoMjApLAorICBIVF9CQVNJQ19CUkFJTExFKDMyKSwKKyAgSFRfQkFTSUNfQlJBSUxMRSg0MCksCisgIEhUX0JBU0lDX0JSQUlMTEUoNDgpLAorICBIVF9CQVNJQ19CUkFJTExFKDY0KSwKKyAgSFRfQkFTSUNfQlJBSUxMRSg4MCksCisgIEhUX0JBU0lDX0JSQUlMTEUoMTYwKSwKKyN1bmRlZiBIVF9CQVNJQ19CUkFJTExFCisKKyNkZWZpbmUgSFRfQkFTSUNfQlJBSUxMRV9QTFVTKGNlbGxzKSAgICAgICAgICAgICAgICAgXAorICB7IC5pZGVudGlmaWVyID0gSFRfTU9ERUxfQmFzaWNCcmFpbGxlUGx1cyMjY2VsbHMsICBcCisgICAgLm5hbWUgPSAiQmFzaWMgQnJhaWxsZSBQbHVzICIgU1RSSU5HSUZZKGNlbGxzKSwgIFwKKyAgICAudGV4dENlbGxzID0gY2VsbHMsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIC5zdGF0dXNDZWxscyA9IDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgLmtleVRhYmxlRGVmaW5pdGlvbiA9ICZLRVlfVEFCTEVfREVGSU5JVElPTihiYnApLFwKKyAgICAuaW50ZXJwcmV0Qnl0ZSA9IGludGVycHJldEJ5dGVfa2V5LCAgICAgICAgICAgICAgXAorICAgIC53cml0ZUNlbGxzID0gd3JpdGVDZWxsc19Fdm9sdXRpb24gICAgICAgICAgICAgICBcCisgIH0KKyAgSFRfQkFTSUNfQlJBSUxMRV9QTFVTKDIwKSwKKyAgSFRfQkFTSUNfQlJBSUxMRV9QTFVTKDMyKSwKKyAgSFRfQkFTSUNfQlJBSUxMRV9QTFVTKDQwKSwKKyAgSFRfQkFTSUNfQlJBSUxMRV9QTFVTKDQ4KSwKKyAgSFRfQkFTSUNfQlJBSUxMRV9QTFVTKDY0KSwKKyAgSFRfQkFTSUNfQlJBSUxMRV9QTFVTKDgwKSwKKyAgSFRfQkFTSUNfQlJBSUxMRV9QTFVTKDg0KSwKKyN1bmRlZiBIVF9CQVNJQ19CUkFJTExFX1BMVVMKKworICB7IC5pZGVudGlmaWVyID0gSFRfTU9ERUxfQWN0aWxpbm8sCisgICAgLm5hbWUgPSAiQWN0aWxpbm8iLAorICAgIC50ZXh0Q2VsbHMgPSAxNiwKKyAgICAuc3RhdHVzQ2VsbHMgPSAwLAorICAgIC5rZXlUYWJsZURlZmluaXRpb24gPSAmS0VZX1RBQkxFX0RFRklOSVRJT04oYWxvKSwKKyAgICAuaW50ZXJwcmV0Qnl0ZSA9IGludGVycHJldEJ5dGVfa2V5LAorICAgIC53cml0ZUNlbGxzID0gd3JpdGVDZWxsc19Fdm9sdXRpb24sCisgICAgLnNldEJyYWlsbGVGaXJtbmVzcyA9IHNldEJyYWlsbGVGaXJtbmVzcywKKyAgICAuc2V0VG91Y2hTZW5zaXRpdml0eSA9IHNldFRvdWNoU2Vuc2l0aXZpdHlfQWN0aXZlQnJhaWxsZSwKKyAgICAuaGFzQVRDID0gMSwKKyAgICAuaGFzVGltZSA9IDEKKyAgfSwKKworICB7IC5pZGVudGlmaWVyID0gSFRfTU9ERUxfQWN0aXZhdG9yLAorICAgIC5uYW1lID0gIkFjdGl2YXRvciIsCisgICAgLnRleHRDZWxscyA9IDQwLAorICAgIC5zdGF0dXNDZWxscyA9IDAsCisgICAgLmtleVRhYmxlRGVmaW5pdGlvbiA9ICZLRVlfVEFCTEVfREVGSU5JVElPTihhYzQpLAorICAgIC5pbnRlcnByZXRCeXRlID0gaW50ZXJwcmV0Qnl0ZV9rZXksCisgICAgLndyaXRlQ2VsbHMgPSB3cml0ZUNlbGxzX0V2b2x1dGlvbiwKKyAgICAuc2V0QnJhaWxsZUZpcm1uZXNzID0gc2V0QnJhaWxsZUZpcm1uZXNzLAorICAgIC5zZXRUb3VjaFNlbnNpdGl2aXR5ID0gc2V0VG91Y2hTZW5zaXRpdml0eV9BY3RpdmVCcmFpbGxlLAorICAgIC5oYXNBVEMgPSAxLAorICAgIC5oYXNUaW1lID0gMQorICB9LAorCisgIHsgLmlkZW50aWZpZXIgPSBIVF9NT0RFTF9BY3RpdmVTdGFyNDAsCisgICAgLm5hbWUgPSAiQWN0aXZlIFN0YXIgNDAiLAorICAgIC50ZXh0Q2VsbHMgPSA0MCwKKyAgICAuc3RhdHVzQ2VsbHMgPSAwLAorICAgIC5rZXlUYWJsZURlZmluaXRpb24gPSAmS0VZX1RBQkxFX0RFRklOSVRJT04oYXM0MCksCisgICAgLmludGVycHJldEJ5dGUgPSBpbnRlcnByZXRCeXRlX2tleSwKKyAgICAud3JpdGVDZWxscyA9IHdyaXRlQ2VsbHNfRXZvbHV0aW9uLAorICAgIC5zZXRCcmFpbGxlRmlybW5lc3MgPSBzZXRCcmFpbGxlRmlybW5lc3MsCisgICAgLnNldFRvdWNoU2Vuc2l0aXZpdHkgPSBzZXRUb3VjaFNlbnNpdGl2aXR5X0FjdGl2ZUJyYWlsbGUsCisgICAgLmhhc0FUQyA9IDEsCisgICAgLmhhc1RpbWUgPSAxCisgIH0sCisKKyAgeyAuaWRlbnRpZmllciA9IEhUX01PREVMX01vZHVsYXJDb25uZWN0ODgsCisgICAgLm5hbWUgPSAiTW9kdWxhciBDb25uZWN0IDg4IiwKKyAgICAudGV4dENlbGxzID0gODgsCisgICAgLnN0YXR1c0NlbGxzID0gMCwKKyAgICAua2V5VGFibGVEZWZpbml0aW9uID0gJktFWV9UQUJMRV9ERUZJTklUSU9OKG1jODgpLAorICAgIC5pbnRlcnByZXRCeXRlID0gaW50ZXJwcmV0Qnl0ZV9rZXksCisgICAgLndyaXRlQ2VsbHMgPSB3cml0ZUNlbGxzX0V2b2x1dGlvbiwKKyAgfSwKKworICB7IC5pZGVudGlmaWVyID0gSFRfTU9ERUxfQ29ubmVjdEJyYWlsbGU0MCwKKyAgICAubmFtZSA9ICJDb25uZWN0IEJyYWlsbGUgNDAiLAorICAgIC50ZXh0Q2VsbHMgPSA0MCwKKyAgICAuc3RhdHVzQ2VsbHMgPSAwLAorICAgIC5rZXlUYWJsZURlZmluaXRpb24gPSAmS0VZX1RBQkxFX0RFRklOSVRJT04oY2I0MCksCisgICAgLmludGVycHJldEJ5dGUgPSBpbnRlcnByZXRCeXRlX2tleSwKKyAgICAud3JpdGVDZWxscyA9IHdyaXRlQ2VsbHNfRXZvbHV0aW9uLAorICAgIC5zZXRCcmFpbGxlRmlybW5lc3MgPSBzZXRCcmFpbGxlRmlybW5lc3MsCisgICAgLmhhc1RpbWUgPSAxCisgIH0sCisKKyAgeyAvKiBlbmQgb2YgdGFibGUgKi8KKyAgICAubmFtZSA9IE5VTEwKKyAgfQorfTsKKworc3RhdGljIGNvbnN0IE1vZGVsRW50cnkgbW9kZWxFbnRyeV9hYl9zID0geworICAuaWRlbnRpZmllciA9IEhUX01PREVMX0FjdGl2ZUJyYWlsbGUsCisgIC5uYW1lID0gIkFjdGl2ZSBCcmFpbGxlIFMiLAorICAudGV4dENlbGxzID0gNDAsCisgIC5zdGF0dXNDZWxscyA9IDAsCisgIC5rZXlUYWJsZURlZmluaXRpb24gPSAmS0VZX1RBQkxFX0RFRklOSVRJT04oYWJfcyksCisgIC5pbnRlcnByZXRCeXRlID0gaW50ZXJwcmV0Qnl0ZV9rZXksCisgIC53cml0ZUNlbGxzID0gd3JpdGVDZWxsc19Fdm9sdXRpb24sCisgIC5zZXRCcmFpbGxlRmlybW5lc3MgPSBzZXRCcmFpbGxlRmlybW5lc3MsCisgIC5zZXRUb3VjaFNlbnNpdGl2aXR5ID0gc2V0VG91Y2hTZW5zaXRpdml0eV9BY3RpdmVCcmFpbGxlLAorICAuaGFzQVRDID0gMSwKKyAgLmhhc1RpbWUgPSAxCit9OworCisjZGVmaW5lIE1BWElNVU1fVEVYVF9DRUxMUyAgIDE2MAorI2RlZmluZSBNQVhJTVVNX1NUQVRVU19DRUxMUyA0CisKK3R5cGVkZWYgZW51bSB7CisgIEJEU19PRkYsCisgIEJEU19SRUFEWQorfSBCcmFpbGxlRGlzcGxheVN0YXRlOworCitzdHJ1Y3QgQnJhaWxsZURhdGFTdHJ1Y3QgeworICBjb25zdCBNb2RlbEVudHJ5ICptb2RlbDsgICAgICAgICAgICAgIC8qIHBvaW50cyB0byB0ZXJtaW5hbCBtb2RlbCBjb25maWcgc3RydWN0ICovCisKKyAgdW5zaWduZWQgY2hhciByYXdEYXRhW01BWElNVU1fVEVYVF9DRUxMU107ICAgICAgICAgICAgLyogdHJhbnNsYXRlZCBkYXRhIHRvIHNlbmQgdG8gQnJhaWxsZSAqLworICB1bnNpZ25lZCBjaGFyIHByZXZEYXRhW01BWElNVU1fVEVYVF9DRUxMU107ICAgLyogcHJldmlvdXNseSBzZW50IHJhdyBkYXRhICovCisKKyAgdW5zaWduZWQgY2hhciByYXdTdGF0dXNbTUFYSU1VTV9TVEFUVVNfQ0VMTFNdOyAgICAgICAgIC8qIHRvIGhvbGQgc3RhdHVzIGluZm8gKi8KKyAgdW5zaWduZWQgY2hhciBwcmV2U3RhdHVzW01BWElNVU1fU1RBVFVTX0NFTExTXTsgICAgICAgIC8qIHRvIGhvbGQgcHJldmlvdXMgc3RhdHVzICovCisKKyAgQnJhaWxsZURpc3BsYXlTdGF0ZSBjdXJyZW50U3RhdGU7CisgIFRpbWVQZXJpb2Qgc3RhdGVQZXJpb2Q7CisKKyAgdW5zaWduZWQgaW50IHJldHJ5Q291bnQ7CisgIHVuc2lnbmVkIGNoYXIgdXBkYXRlUmVxdWlyZWQ7Cit9OworCisvKiBVU0IgSU8gKi8KKyNpbmNsdWRlICJpb191c2IuaCIKKyNpbmNsdWRlICJ1c2JfaGlkLmgiCisKKyNkZWZpbmUgSFRfSElEX1JFUE9SVF9USU1FT1VUIDEwMAorCit0eXBlZGVmIGVudW0geworICBIVF9ISURfUlBUX091dERhdGEgICAgPSAwWDAxLCAvKiByZWNlaXZlIGRhdGEgZnJvbSBkZXZpY2UgKi8KKyAgSFRfSElEX1JQVF9JbkRhdGEgICAgID0gMFgwMiwgLyogc2VuZCBkYXRhIHRvIGRldmljZSAqLworICBIVF9ISURfUlBUX0luQ29tbWFuZCAgPSAwWEZCLCAvKiBydW4gVVNCLUhJRCBmaXJtd2FyZSBjb21tYW5kICovCisgIEhUX0hJRF9SUFRfT3V0VmVyc2lvbiA9IDBYRkMsIC8qIGdldCB2ZXJzaW9uIG9mIFVTQi1ISUQgZmlybXdhcmUgKi8KKyAgSFRfSElEX1JQVF9PdXRCYXVkICAgID0gMFhGRCwgLyogZ2V0IGJhdWQgcmF0ZSBvZiBzZXJpYWwgY29ubmVjdGlvbiAqLworICBIVF9ISURfUlBUX0luQmF1ZCAgICAgPSAwWEZFLCAvKiBzZXQgYmF1ZCByYXRlIG9mIHNlcmlhbCBjb25uZWN0aW9uICovCit9IEhUX0hpZFJlcG9ydE51bWJlcjsKKwordHlwZWRlZiBlbnVtIHsKKyAgSFRfSElEX0NNRF9GbHVzaEJ1ZmZlcnMgPSAwWDAxLCAvKiBmbHVzaCBpbnB1dCBhbmQgb3V0cHV0IGJ1ZmZlcnMgKi8KK30gSHRIaWRDb21tYW5kOworCitzdGF0aWMgc2l6ZV90IGhpZE91dERhdGFTaXplID0gMDsKK3N0YXRpYyBzaXplX3QgaGlkSW5EYXRhU2l6ZSA9IDA7CitzdGF0aWMgc2l6ZV90IGhpZEluQ29tbWFuZFNpemUgPSAwOworc3RhdGljIHNpemVfdCBoaWRPdXRWZXJzaW9uU2l6ZSA9IDA7CitzdGF0aWMgc2l6ZV90IGhpZE91dEJhdWRTaXplID0gMDsKK3N0YXRpYyBzaXplX3QgaGlkSW5CYXVkU2l6ZSA9IDA7CisKK3N0YXRpYyB1aW50MTZfdCBoaWRGaXJtd2FyZVZlcnNpb247CitzdGF0aWMgdW5zaWduZWQgY2hhciAqaGlkSW5wdXRSZXBvcnQgPSBOVUxMOworI2RlZmluZSBoaWRJbnB1dExlbmd0aCAoaGlkSW5wdXRSZXBvcnRbMV0pCisjZGVmaW5lIGhpZElucHV0QnVmZmVyICgmaGlkSW5wdXRSZXBvcnRbMl0pCitzdGF0aWMgdW5zaWduZWQgY2hhciBoaWRJbnB1dE9mZnNldDsKKworc3RhdGljIHNzaXplX3QKK2dldEhpZFJlcG9ydCAoCisgIFVzYkRldmljZSAqZGV2aWNlLCBjb25zdCBVc2JDaGFubmVsRGVmaW5pdGlvbiAqZGVmaW5pdGlvbiwKKyAgdW5zaWduZWQgY2hhciBudW1iZXIsIHVuc2lnbmVkIGNoYXIgKmJ1ZmZlciwgdWludDE2X3Qgc2l6ZQorKSB7CisgIHNzaXplX3QgcmVzdWx0ID0gdXNiSGlkR2V0UmVwb3J0KGRldmljZSwgZGVmaW5pdGlvbi0+aW50ZXJmYWNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1iZXIsIGJ1ZmZlciwgc2l6ZSwgSFRfSElEX1JFUE9SVF9USU1FT1VUKTsKKyAgaWYgKHJlc3VsdCA+IDAgJiYgYnVmZmVyWzBdICE9IG51bWJlcikgeworICAgIGxvZ01lc3NhZ2UoTE9HX1dBUk5JTkcsICJ1bmV4cGVjdGVkIEhJRCByZXBvcnQgbnVtYmVyOiBleHBlY3RlZCAlMDJYLCByZWNlaXZlZCAlMDJYIiwKKyAgICAgICAgICAgICAgIG51bWJlciwgYnVmZmVyWzBdKTsKKyAgICBlcnJubyA9IEVJTzsKKyAgICByZXN1bHQgPSAtMTsKKyAgfQorCisgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBpbnQKK2FsbG9jYXRlSGlkSW5wdXRCdWZmZXIgKHZvaWQpIHsKKyAgaWYgKGhpZE91dERhdGFTaXplKSB7CisgICAgaWYgKChoaWRJbnB1dFJlcG9ydCA9IG1hbGxvYyhoaWRPdXREYXRhU2l6ZSkpKSB7CisgICAgICBoaWRJbnB1dExlbmd0aCA9IDA7CisgICAgICBoaWRJbnB1dE9mZnNldCA9IDA7CisgICAgICByZXR1cm4gMTsKKyAgICB9IGVsc2UgeworICAgICAgbG9nTWFsbG9jRXJyb3IoKTsKKyAgICB9CisgIH0KKworICByZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQKK2RlYWxsb2NhdGVIaWRJbnB1dEJ1ZmZlciAodm9pZCkgeworICBpZiAoaGlkSW5wdXRSZXBvcnQpIHsKKyAgICBmcmVlKGhpZElucHV0UmVwb3J0KTsKKyAgICBoaWRJbnB1dFJlcG9ydCA9IE5VTEw7CisgIH0KK30KKworc3RhdGljIGludAorZ2V0SGlkRmlybXdhcmVWZXJzaW9uIChCcmFpbGxlRGlzcGxheSAqYnJsKSB7CisgIGhpZEZpcm13YXJlVmVyc2lvbiA9IDA7CisKKyAgaWYgKGhpZE91dFZlcnNpb25TaXplKSB7CisgICAgdW5zaWduZWQgY2hhciByZXBvcnRbaGlkT3V0VmVyc2lvblNpemVdOworICAgIHNzaXplX3QgcmVzdWx0ID0gZ2lvR2V0SGlkUmVwb3J0KGJybC0+Z2lvRW5kcG9pbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSFRfSElEX1JQVF9PdXRWZXJzaW9uLCByZXBvcnQsIHNpemVvZihyZXBvcnQpKTsKKworICAgIGlmIChyZXN1bHQgPiAwKSB7CisgICAgICBoaWRGaXJtd2FyZVZlcnNpb24gPSAocmVwb3J0WzFdIDw8IDgpIHwgcmVwb3J0WzJdOworICAgICAgbG9nTWVzc2FnZShMT0dfSU5GTywgIlVTQi1ISUQgRmlybXdhcmUgVmVyc2lvbjogJXUuJXUiLCByZXBvcnRbMV0sIHJlcG9ydFsyXSk7CisgICAgICByZXR1cm4gMTsKKyAgICB9CisgIH0KKworICByZXR1cm4gMDsKK30KKworc3RhdGljIGludAorZXhlY3V0ZUhpZEZpcm13YXJlQ29tbWFuZCAoQnJhaWxsZURpc3BsYXkgKmJybCwgSHRIaWRDb21tYW5kIGNvbW1hbmQpIHsKKyAgaWYgKGhpZEluQ29tbWFuZFNpemUpIHsKKyAgICB1bnNpZ25lZCBjaGFyIHJlcG9ydFtoaWRJbkNvbW1hbmRTaXplXTsKKworICAgIHJlcG9ydFswXSA9IEhUX0hJRF9SUFRfSW5Db21tYW5kOworICAgIHJlcG9ydFsxXSA9IGNvbW1hbmQ7CisKKyAgICBpZiAoZ2lvV3JpdGVIaWRSZXBvcnQoYnJsLT5naW9FbmRwb2ludCwgcmVwb3J0LCBzaXplb2YocmVwb3J0KSkgIT0gLTEpIHsKKyAgICAgIHJldHVybiAxOworICAgIH0KKyAgfQorCisgIHJldHVybiAwOworfQorCit0eXBlZGVmIHN0cnVjdCB7CisgIGludCAoKmluaXRpYWxpemVTZXNzaW9uKSAoQnJhaWxsZURpc3BsYXkgKmJybCk7Cit9IEdlbmVyYWxPcGVyYXRpb25zOworCit0eXBlZGVmIHN0cnVjdCB7CisgIGNvbnN0IEdlbmVyYWxPcGVyYXRpb25zICpnZW5lcmFsOworICBHaW9Vc2JBd2FpdElucHV0TWV0aG9kICphd2FpdElucHV0OworICBHaW9Vc2JSZWFkRGF0YU1ldGhvZCAqcmVhZERhdGE7CisgIEdpb1VzYldyaXRlRGF0YU1ldGhvZCAqd3JpdGVEYXRhOworICBVc2JJbnB1dEZpbHRlciAqaW5wdXRGaWx0ZXI7Cit9IFVzYk9wZXJhdGlvbnM7CisKK3N0YXRpYyBpbnQKK2luaXRpYWxpemVVc2JTZXNzaW9uMiAoQnJhaWxsZURpc3BsYXkgKmJybCkgeworICBzdGF0aWMgY29uc3QgQnJhaWxsZVJlcG9ydFNpemVFbnRyeSByZXBvcnRUYWJsZVtdID0geworICAgIHsuaWRlbnRpZmllcj1IVF9ISURfUlBUX091dERhdGEsIC5pbnB1dD0maGlkT3V0RGF0YVNpemV9LAorICAgIHsuaWRlbnRpZmllcj1IVF9ISURfUlBUX0luRGF0YSwgLm91dHB1dD0maGlkSW5EYXRhU2l6ZX0sCisgICAgey5pZGVudGlmaWVyPUhUX0hJRF9SUFRfSW5Db21tYW5kLCAub3V0cHV0PSZoaWRJbkNvbW1hbmRTaXplfSwKKyAgICB7LmlkZW50aWZpZXI9SFRfSElEX1JQVF9PdXRWZXJzaW9uLCAuaW5wdXQ9JmhpZE91dFZlcnNpb25TaXplfSwKKyAgICB7LmlkZW50aWZpZXI9SFRfSElEX1JQVF9PdXRCYXVkLCAuaW5wdXQ9JmhpZE91dEJhdWRTaXplfSwKKyAgICB7LmlkZW50aWZpZXI9SFRfSElEX1JQVF9JbkJhdWQsIC5vdXRwdXQ9JmhpZEluQmF1ZFNpemV9LAorICAgIHsuaWRlbnRpZmllcj0wfQorICB9OworCisgIGlmIChnZXRCcmFpbGxlUmVwb3J0U2l6ZXMoYnJsLCByZXBvcnRUYWJsZSkpIHsKKyAgICBpZiAoYWxsb2NhdGVIaWRJbnB1dEJ1ZmZlcigpKSB7CisgICAgICBpZiAoZ2V0SGlkRmlybXdhcmVWZXJzaW9uKGJybCkpIHsKKyAgICAgICAgaWYgKGV4ZWN1dGVIaWRGaXJtd2FyZUNvbW1hbmQoYnJsLCBIVF9ISURfQ01EX0ZsdXNoQnVmZmVycykpIHsKKyAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgfQorICAgICAgfQorCisgICAgICBkZWFsbG9jYXRlSGlkSW5wdXRCdWZmZXIoKTsKKyAgICB9CisgIH0KKworICByZXR1cm4gMDsKK30KKworc3RhdGljIGludAorYXdhaXRVc2JJbnB1dDIgKAorICBVc2JEZXZpY2UgKmRldmljZSwgY29uc3QgVXNiQ2hhbm5lbERlZmluaXRpb24gKmRlZmluaXRpb24sIGludCBtaWxsaXNlY29uZHMKKykgeworICBpZiAoaGlkT3V0RGF0YVNpemUpIHsKKyAgICBpZiAoaGlkSW5wdXRPZmZzZXQgPCBoaWRJbnB1dExlbmd0aCkgcmV0dXJuIDE7CisKKyAgICBUaW1lUGVyaW9kIHBlcmlvZDsKKyAgICBzdGFydFRpbWVQZXJpb2QoJnBlcmlvZCwgbWlsbGlzZWNvbmRzKTsKKworICAgIHdoaWxlICgxKSB7CisgICAgICBzc2l6ZV90IHJlc3VsdCA9IGdldEhpZFJlcG9ydChkZXZpY2UsIGRlZmluaXRpb24sIEhUX0hJRF9SUFRfT3V0RGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhpZElucHV0UmVwb3J0LCBoaWRPdXREYXRhU2l6ZSk7CisKKyAgICAgIGlmIChyZXN1bHQgPT0gLTEpIHJldHVybiAwOworICAgICAgaGlkSW5wdXRPZmZzZXQgPSAwOworICAgICAgaWYgKGhpZElucHV0TGVuZ3RoID4gMCkgcmV0dXJuIDE7CisKKyAgICAgIGlmIChhZnRlclRpbWVQZXJpb2QoJnBlcmlvZCwgTlVMTCkpIGJyZWFrOworICAgICAgYXN5bmNXYWl0KEJSQUlMTEVfRFJJVkVSX0lOUFVUX1BPTExfSU5URVJWQUwpOworICAgIH0KKyAgfQorCisgIGVycm5vID0gRUFHQUlOOworICByZXR1cm4gMDsKK30KKworc3RhdGljIHNzaXplX3QKK3JlYWRVc2JEYXRhMiAoCisgIFVzYkRldmljZSAqZGV2aWNlLCBjb25zdCBVc2JDaGFubmVsRGVmaW5pdGlvbiAqZGVmaW5pdGlvbiwKKyAgdm9pZCAqZGF0YSwgc2l6ZV90IHNpemUsCisgIGludCBpbml0aWFsVGltZW91dCwgaW50IHN1YnNlcXVlbnRUaW1lb3V0CispIHsKKyAgdW5zaWduZWQgY2hhciAqYnVmZmVyID0gZGF0YTsKKyAgaW50IGNvdW50ID0gMDsKKworICB3aGlsZSAoY291bnQgPCBzaXplKSB7CisgICAgaWYgKCFhd2FpdFVzYklucHV0MihkZXZpY2UsIGRlZmluaXRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICBjb3VudD8gc3Vic2VxdWVudFRpbWVvdXQ6IGluaXRpYWxUaW1lb3V0KSkgeworICAgICAgaWYgKGVycm5vICE9IEVBR0FJTikgY291bnQgPSAtMTsKKyAgICAgIGJyZWFrOworICAgIH0KKworICAgIHsKKyAgICAgIHNpemVfdCBhbW91bnQgPSBNSU4oc2l6ZS1jb3VudCwgaGlkSW5wdXRMZW5ndGgtaGlkSW5wdXRPZmZzZXQpOworCisgICAgICBtZW1jcHkoJmJ1ZmZlcltjb3VudF0sICZoaWRJbnB1dEJ1ZmZlcltoaWRJbnB1dE9mZnNldF0sIGFtb3VudCk7CisgICAgICBoaWRJbnB1dE9mZnNldCArPSBhbW91bnQ7CisgICAgICBjb3VudCArPSBhbW91bnQ7CisgICAgfQorICB9CisKKyAgcmV0dXJuIGNvdW50OworfQorCitzdGF0aWMgc3NpemVfdAord3JpdGVVc2JEYXRhMiAoCisgIFVzYkRldmljZSAqZGV2aWNlLCBjb25zdCBVc2JDaGFubmVsRGVmaW5pdGlvbiAqZGVmaW5pdGlvbiwKKyAgY29uc3Qgdm9pZCAqZGF0YSwgc2l6ZV90IHNpemUsIGludCB0aW1lb3V0CispIHsKKyAgY29uc3QgdW5zaWduZWQgY2hhciAqYnVmZmVyID0gZGF0YTsKKyAgaW50IGluZGV4ID0gMDsKKworICBpZiAoaGlkSW5EYXRhU2l6ZSkgeworICAgIHdoaWxlIChzaXplKSB7CisgICAgICB1bnNpZ25lZCBjaGFyIHJlcG9ydFtoaWRJbkRhdGFTaXplXTsKKyAgICAgIHVuc2lnbmVkIGNoYXIgY291bnQgPSBNSU4oc2l6ZSwgKHNpemVvZihyZXBvcnQpIC0gMikpOworICAgICAgaW50IHJlc3VsdDsKKworICAgICAgcmVwb3J0WzBdID0gSFRfSElEX1JQVF9JbkRhdGE7CisgICAgICByZXBvcnRbMV0gPSBjb3VudDsKKyAgICAgIG1lbWNweShyZXBvcnQrMiwgJmJ1ZmZlcltpbmRleF0sIGNvdW50KTsKKyAgICAgIG1lbXNldCgmcmVwb3J0W2NvdW50KzJdLCAwLCBzaXplb2YocmVwb3J0KS1jb3VudC0yKTsKKworICAgICAgcmVzdWx0ID0gdXNiSGlkU2V0UmVwb3J0KGRldmljZSwgZGVmaW5pdGlvbi0+aW50ZXJmYWNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcG9ydFswXSwgcmVwb3J0LCBzaXplb2YocmVwb3J0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIVF9ISURfUkVQT1JUX1RJTUVPVVQpOworICAgICAgaWYgKHJlc3VsdCA9PSAtMSkgcmV0dXJuIC0xOworCisgICAgICBpbmRleCArPSBjb3VudDsKKyAgICAgIHNpemUgLT0gY291bnQ7CisgICAgfQorICB9CisKKyAgcmV0dXJuIGluZGV4OworfQorCitzdGF0aWMgY29uc3QgR2VuZXJhbE9wZXJhdGlvbnMgZ2VuZXJhbE9wZXJhdGlvbnMyID0geworICAuaW5pdGlhbGl6ZVNlc3Npb24gPSBpbml0aWFsaXplVXNiU2Vzc2lvbjIKK307CisKK3N0YXRpYyBjb25zdCBVc2JPcGVyYXRpb25zIHVzYk9wZXJhdGlvbnMyID0geworICAuZ2VuZXJhbCA9ICZnZW5lcmFsT3BlcmF0aW9uczIsCisgIC5hd2FpdElucHV0ID0gYXdhaXRVc2JJbnB1dDIsCisgIC5yZWFkRGF0YSA9IHJlYWRVc2JEYXRhMiwKKyAgLndyaXRlRGF0YSA9IHdyaXRlVXNiRGF0YTIKK307CisKK3N0YXRpYyBpbnQKK2luaXRpYWxpemVVc2JTZXNzaW9uMyAoQnJhaWxsZURpc3BsYXkgKmJybCkgeworICBzdGF0aWMgY29uc3QgQnJhaWxsZVJlcG9ydFNpemVFbnRyeSByZXBvcnRUYWJsZVtdID0geworICAgIHsuaWRlbnRpZmllcj1IVF9ISURfUlBUX091dERhdGEsIC5pbnB1dD0maGlkT3V0RGF0YVNpemV9LAorICAgIHsuaWRlbnRpZmllcj1IVF9ISURfUlBUX0luRGF0YSwgLm91dHB1dD0maGlkSW5EYXRhU2l6ZX0sCisgICAgey5pZGVudGlmaWVyPTB9CisgIH07CisKKyAgcmV0dXJuIGdldEJyYWlsbGVSZXBvcnRTaXplcyhicmwsIHJlcG9ydFRhYmxlKTsKK30KKworc3RhdGljIHNzaXplX3QKK3dyaXRlVXNiRGF0YTMgKAorICBVc2JEZXZpY2UgKmRldmljZSwgY29uc3QgVXNiQ2hhbm5lbERlZmluaXRpb24gKmRlZmluaXRpb24sCisgIGNvbnN0IHZvaWQgKmRhdGEsIHNpemVfdCBzaXplLCBpbnQgdGltZW91dAorKSB7CisgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZmZlciA9IGRhdGE7CisgIGludCBpbmRleCA9IDA7CisKKyAgaWYgKGhpZEluRGF0YVNpemUpIHsKKyAgICB3aGlsZSAoc2l6ZSkgeworICAgICAgdW5zaWduZWQgY2hhciByZXBvcnRbaGlkSW5EYXRhU2l6ZV07CisgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyIGNvdW50ID0gTUlOKHNpemUsIChzaXplb2YocmVwb3J0KSAtIDIpKTsKKyAgICAgIGludCByZXN1bHQ7CisKKyAgICAgIHJlcG9ydFswXSA9IEhUX0hJRF9SUFRfSW5EYXRhOworICAgICAgcmVwb3J0WzFdID0gY291bnQ7CisgICAgICBtZW1zZXQobWVtcGNweShyZXBvcnQrMiwgJmJ1ZmZlcltpbmRleF0sIGNvdW50KSwgMCwgc2l6ZW9mKHJlcG9ydCktY291bnQtMik7CisKKyAgICAgIHJlc3VsdCA9IHVzYldyaXRlRW5kcG9pbnQoZGV2aWNlLCBkZWZpbml0aW9uLT5vdXRwdXRFbmRwb2ludCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVwb3J0LCBzaXplb2YocmVwb3J0KSwgMTAwMCk7CisgICAgICBpZiAocmVzdWx0ID09IC0xKSByZXR1cm4gLTE7CisKKyAgICAgIGluZGV4ICs9IGNvdW50OworICAgICAgc2l6ZSAtPSBjb3VudDsKKyAgICB9CisgIH0KKworICByZXR1cm4gaW5kZXg7Cit9CisKK3N0YXRpYyBpbnQKK2ZpbHRlclVzYklucHV0MyAoVXNiSW5wdXRGaWx0ZXJEYXRhICpkYXRhKSB7CisgIHVuc2lnbmVkIGNoYXIgKmJ1ZmZlciA9IGRhdGEtPmJ1ZmZlcjsKKworICBpZiAoKGRhdGEtPmxlbmd0aCA+PSAyKSAmJgorICAgICAgKGRhdGEtPmxlbmd0aCA9PSBoaWRPdXREYXRhU2l6ZSkgJiYgCisgICAgICAoYnVmZmVyWzBdID09IEhUX0hJRF9SUFRfT3V0RGF0YSkgJiYKKyAgICAgIChidWZmZXJbMV0gPD0gKGRhdGEtPmxlbmd0aCAtIDIpKSkgeworICAgIGRhdGEtPmxlbmd0aCA9IGJ1ZmZlclsxXTsKKyAgICBtZW1tb3ZlKGRhdGEtPmJ1ZmZlciwgZGF0YS0+YnVmZmVyKzIsIGRhdGEtPmxlbmd0aCk7CisgIH0KKworICByZXR1cm4gMTsKK30KKworc3RhdGljIGNvbnN0IEdlbmVyYWxPcGVyYXRpb25zIGdlbmVyYWxPcGVyYXRpb25zMyA9IHsKKyAgLmluaXRpYWxpemVTZXNzaW9uID0gaW5pdGlhbGl6ZVVzYlNlc3Npb24zCit9OworCitzdGF0aWMgY29uc3QgVXNiT3BlcmF0aW9ucyB1c2JPcGVyYXRpb25zMyA9IHsKKyAgLmdlbmVyYWwgPSAmZ2VuZXJhbE9wZXJhdGlvbnMzLAorICAud3JpdGVEYXRhID0gd3JpdGVVc2JEYXRhMywKKyAgLmlucHV0RmlsdGVyID0gZmlsdGVyVXNiSW5wdXQzCit9OworCitzdGF0aWMgQnJhaWxsZVBhY2tldFZlcmlmaWVyUmVzdWx0Cit2ZXJpZnlQYWNrZXQgKAorICBCcmFpbGxlRGlzcGxheSAqYnJsLAorICB1bnNpZ25lZCBjaGFyICpieXRlcywgc2l6ZV90IHNpemUsCisgIHNpemVfdCAqbGVuZ3RoLCB2b2lkICpkYXRhCispIHsKKyAgdW5zaWduZWQgY2hhciBieXRlID0gYnl0ZXNbc2l6ZS0xXTsKKworICBzd2l0Y2ggKHNpemUpIHsKKyAgICBjYXNlIDE6CisgICAgICBzd2l0Y2ggKGJ5dGUpIHsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAqbGVuZ3RoID0gMTsKKyAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIEhUX1BLVF9PSzoKKyAgICAgICAgICAqbGVuZ3RoID0gMjsKKyAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIEhUX1BLVF9FeHRlbmRlZDoKKyAgICAgICAgICAqbGVuZ3RoID0gNDsKKyAgICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICAgIGJyZWFrOworCisgICAgY2FzZSAzOgorICAgICAgaWYgKGJ5dGVzWzBdID09IEhUX1BLVF9FeHRlbmRlZCkgKmxlbmd0aCArPSBieXRlOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIDU6CisgICAgICBpZiAoKGJ5dGVzWzBdID09IEhUX1BLVF9FeHRlbmRlZCkgJiYKKyAgICAgICAgICAoYnl0ZXNbMV0gPT0gSFRfTU9ERUxfQWN0aXZlQnJhaWxsZSkgJiYKKyAgICAgICAgICAoYnl0ZXNbMl0gPT0gMikgJiYKKyAgICAgICAgICAoYnl0ZXNbM10gPT0gSFRfRVhUUEtUX0NvbmZpcm1hdGlvbikgJiYKKyAgICAgICAgICAoYnl0ZSA9PSAwWDE1KSkKKyAgICAgICAgKmxlbmd0aCArPSAxOworICAgICAgYnJlYWs7CisKKyAgICBkZWZhdWx0OgorICAgICAgYnJlYWs7CisgIH0KKworICBpZiAoKHNpemUgPT0gKmxlbmd0aCkgJiYgKGJ5dGVzWzBdID09IEhUX1BLVF9FeHRlbmRlZCkgJiYgKGJ5dGUgIT0gQVNDSUlfU1lOKSkgeworICAgIHJldHVybiBCUkxfUFZSX0lOVkFMSUQ7CisgIH0KKworICByZXR1cm4gQlJMX1BWUl9JTkNMVURFOworfQorCitzdGF0aWMgc2l6ZV90CityZWFkUGFja2V0IChCcmFpbGxlRGlzcGxheSAqYnJsLCB2b2lkICpidWZmZXIsIHNpemVfdCBzaXplKSB7CisgIHJldHVybiByZWFkQnJhaWxsZVBhY2tldChicmwsIE5VTEwsIGJ1ZmZlciwgc2l6ZSwgdmVyaWZ5UGFja2V0LCBOVUxMKTsKK30KKworc3RhdGljIHNzaXplX3QKK2JybF9yZWFkUGFja2V0IChCcmFpbGxlRGlzcGxheSAqYnJsLCB2b2lkICpidWZmZXIsIHNpemVfdCBzaXplKSB7CisgIGNvbnN0IHNpemVfdCBsZW5ndGggPSByZWFkUGFja2V0KGJybCwgYnVmZmVyLCBzaXplKTsKKworICBpZiAobGVuZ3RoID09IDAgJiYgZXJybm8gIT0gRUFHQUlOKSByZXR1cm4gLTE7CisgIHJldHVybiBsZW5ndGg7Cit9CisKK3N0YXRpYyBzc2l6ZV90Citicmxfd3JpdGVQYWNrZXQgKEJyYWlsbGVEaXNwbGF5ICpicmwsIGNvbnN0IHZvaWQgKnBhY2tldCwgc2l6ZV90IGxlbmd0aCkgeworICByZXR1cm4gd3JpdGVCcmFpbGxlTWVzc2FnZShicmwsIE5VTEwsIDAsIHBhY2tldCwgbGVuZ3RoKT8gbGVuZ3RoOiAtMTsKK30KKworc3RhdGljIHZvaWQKK3NldFN0YXRlIChCcmFpbGxlRGlzcGxheSAqYnJsLCBCcmFpbGxlRGlzcGxheVN0YXRlIHN0YXRlKSB7CisgIGlmIChzdGF0ZSA9PSBicmwtPmRhdGEtPmN1cnJlbnRTdGF0ZSkgeworICAgICsrYnJsLT5kYXRhLT5yZXRyeUNvdW50OworICB9IGVsc2UgeworICAgIGJybC0+ZGF0YS0+cmV0cnlDb3VudCA9IDA7CisgICAgYnJsLT5kYXRhLT5jdXJyZW50U3RhdGUgPSBzdGF0ZTsKKyAgfQorCisgIHN0YXJ0VGltZVBlcmlvZCgmYnJsLT5kYXRhLT5zdGF0ZVBlcmlvZCwgMTAwMCk7CisgIC8vIGxvZ01lc3NhZ2UoTE9HX0RFQlVHLCAiU3RhdGU6ICVkKyVkIiwgYnJsLT5kYXRhLT5jdXJyZW50U3RhdGUsIGJybC0+ZGF0YS0+cmV0cnlDb3VudCk7Cit9CisKK3N0YXRpYyBpbnQKK2JybF9yZXNldCAoQnJhaWxsZURpc3BsYXkgKmJybCkgeworICBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBwYWNrZXRbXSA9IHtIVF9QS1RfUmVzZXR9OworICByZXR1cm4gd3JpdGVCcmFpbGxlUGFja2V0KGJybCwgTlVMTCwgcGFja2V0LCBzaXplb2YocGFja2V0KSk7Cit9CisKK3N0YXRpYyBpbnQKK2lkZW50aWZ5TW9kZWwgKEJyYWlsbGVEaXNwbGF5ICpicmwsIHVuc2lnbmVkIGNoYXIgaWRlbnRpZmllcikgeworICBmb3IgKAorICAgIGJybC0+ZGF0YS0+bW9kZWwgPSBtb2RlbFRhYmxlOworICAgIGJybC0+ZGF0YS0+bW9kZWwtPm5hbWUgJiYgKGJybC0+ZGF0YS0+bW9kZWwtPmlkZW50aWZpZXIgIT0gaWRlbnRpZmllcik7CisgICAgYnJsLT5kYXRhLT5tb2RlbCsrCisgICk7CisKKyAgaWYgKCFicmwtPmRhdGEtPm1vZGVsLT5uYW1lKSB7CisgICAgbG9nTWVzc2FnZShMT0dfRVJSLCAiRGV0ZWN0ZWQgdW5rbm93biBIYW5keVRlY2ggbW9kZWwgd2l0aCBJRCAlMDJYLiIsCisgICAgICAgICAgICAgICBpZGVudGlmaWVyKTsKKyAgICByZXR1cm4gMDsKKyAgfQorCisgIGlmIChicmwtPmRhdGEtPm1vZGVsLT5pZGVudGlmaWVyID09IEhUX01PREVMX0FjdGl2ZUJyYWlsbGUpIHsKKyAgICBHaW9FbmRwb2ludCAqZW5kcG9pbnQgPSBicmwtPmdpb0VuZHBvaW50OworICAgIGNoYXIgKnNlcmlhbE51bWJlciA9IE5VTEw7CisKKyAgICBzd2l0Y2ggKGdpb0dldFJlc291cmNlVHlwZShlbmRwb2ludCkpIHsKKyAgICAgIGNhc2UgR0lPX1RZUEVfVVNCOiB7CisgICAgICAgIFVzYkNoYW5uZWwgKmNoYW5uZWwgPSBnaW9HZXRSZXNvdXJjZU9iamVjdChlbmRwb2ludCk7CisgICAgICAgIHNlcmlhbE51bWJlciA9IHVzYkdldFNlcmlhbE51bWJlcihjaGFubmVsLT5kZXZpY2UsIDEwMDApOworICAgICAgICBicmVhazsKKyAgICAgIH0KKworICAgICAgZGVmYXVsdDogeworICAgICAgICBzZXJpYWxOdW1iZXIgPSBnaW9HZXRSZXNvdXJjZU5hbWUoZW5kcG9pbnQpOworICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoc2VyaWFsTnVtYmVyKSB7CisgICAgICBjb25zdCBjaGFyICpzbGFzaCA9IHN0cmNocihzZXJpYWxOdW1iZXIsICcvJyk7CisKKyAgICAgIGlmIChzbGFzaCkgeworICAgICAgICBpZiAoc2xhc2hbMV0gPT0gJ1MnKSBicmwtPmRhdGEtPm1vZGVsID0gJm1vZGVsRW50cnlfYWJfczsKKyAgICAgIH0KKworICAgICAgZnJlZShzZXJpYWxOdW1iZXIpOworICAgIH0KKyAgfQorCisgIGxvZ01lc3NhZ2UoTE9HX0lORk8sICJEZXRlY3RlZCAlczogJWQgZGF0YSAlcywgJWQgc3RhdHVzICVzLiIsCisgICAgICAgICAgICAgYnJsLT5kYXRhLT5tb2RlbC0+bmFtZSwKKyAgICAgICAgICAgICBicmwtPmRhdGEtPm1vZGVsLT50ZXh0Q2VsbHMsIChicmwtPmRhdGEtPm1vZGVsLT50ZXh0Q2VsbHMgPT0gMSk/ICJjZWxsIjogImNlbGxzIiwKKyAgICAgICAgICAgICBicmwtPmRhdGEtPm1vZGVsLT5zdGF0dXNDZWxscywgKGJybC0+ZGF0YS0+bW9kZWwtPnN0YXR1c0NlbGxzID09IDEpPyAiY2VsbCI6ICJjZWxscyIpOworCisgIGJybC0+dGV4dENvbHVtbnMgPSBicmwtPmRhdGEtPm1vZGVsLT50ZXh0Q2VsbHM7ICAgICAgICAgICAgICAgICAgICAgICAvKiBpbml0aWFsaXNlIHNpemUgb2YgZGlzcGxheSAqLworICBicmwtPnRleHRSb3dzID0gMTsKKyAgYnJsLT5zdGF0dXNDb2x1bW5zID0gYnJsLT5kYXRhLT5tb2RlbC0+c3RhdHVzQ2VsbHM7CisgIGJybC0+c3RhdHVzUm93cyA9IDE7CisKKyAgc2V0QnJhaWxsZUtleVRhYmxlKGJybCwgYnJsLT5kYXRhLT5tb2RlbC0+a2V5VGFibGVEZWZpbml0aW9uKTsKKyAgYnJsLT5zZXRCcmFpbGxlRmlybW5lc3MgPSBicmwtPmRhdGEtPm1vZGVsLT5zZXRCcmFpbGxlRmlybW5lc3M7CisgIGJybC0+c2V0VG91Y2hTZW5zaXRpdml0eSA9IGJybC0+ZGF0YS0+bW9kZWwtPnNldFRvdWNoU2Vuc2l0aXZpdHk7CisKKyAgbWVtc2V0KGJybC0+ZGF0YS0+cmF3U3RhdHVzLCAwLCBicmwtPmRhdGEtPm1vZGVsLT5zdGF0dXNDZWxscyk7CisgIG1lbXNldChicmwtPmRhdGEtPnJhd0RhdGEsIDAsIGJybC0+ZGF0YS0+bW9kZWwtPnRleHRDZWxscyk7CisKKyAgYnJsLT5kYXRhLT5yZXRyeUNvdW50ID0gMDsKKyAgYnJsLT5kYXRhLT51cGRhdGVSZXF1aXJlZCA9IDA7CisgIGJybC0+ZGF0YS0+Y3VycmVudFN0YXRlID0gQkRTX09GRjsKKyAgc2V0U3RhdGUoYnJsLCBCRFNfUkVBRFkpOworCisgIHJldHVybiAxOworfQorCitzdGF0aWMgaW50Cit3cml0ZUV4dGVuZGVkUGFja2V0ICgKKyAgQnJhaWxsZURpc3BsYXkgKmJybCwgSFRfRXh0ZW5kZWRQYWNrZXRUeXBlIHR5cGUsCisgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGEsIHVuc2lnbmVkIGNoYXIgc2l6ZQorKSB7CisgIEhUX1BhY2tldCBwYWNrZXQ7CisgIHBhY2tldC5maWVsZHMudHlwZSA9IEhUX1BLVF9FeHRlbmRlZDsKKyAgcGFja2V0LmZpZWxkcy5kYXRhLmV4dGVuZGVkLm1vZGVsID0gYnJsLT5kYXRhLT5tb2RlbC0+aWRlbnRpZmllcjsKKyAgcGFja2V0LmZpZWxkcy5kYXRhLmV4dGVuZGVkLmxlbmd0aCA9IHNpemUgKyAxOyAvKiB0eXBlIGJ5dGUgaXMgaW5jbHVkZWQgKi8KKyAgcGFja2V0LmZpZWxkcy5kYXRhLmV4dGVuZGVkLnR5cGUgPSB0eXBlOworICBpZiAoZGF0YSkgbWVtY3B5KHBhY2tldC5maWVsZHMuZGF0YS5leHRlbmRlZC5kYXRhLmJ5dGVzLCBkYXRhLCBzaXplKTsKKyAgcGFja2V0LmZpZWxkcy5kYXRhLmV4dGVuZGVkLmRhdGEuYnl0ZXNbc2l6ZV0gPSBBU0NJSV9TWU47CisgIHNpemUgKz0gNTsgLyogRVhULCBJRCwgTEVOLCBUWVBFLCAuLi4sIFNZTiAqLworICByZXR1cm4gd3JpdGVCcmFpbGxlTWVzc2FnZShicmwsIE5VTEwsIHR5cGUsICZwYWNrZXQsIHNpemUpOworfQorCitzdGF0aWMgaW50CitzZXRBdGNNb2RlIChCcmFpbGxlRGlzcGxheSAqYnJsLCB1bnNpZ25lZCBjaGFyIHZhbHVlKSB7CisgIGNvbnN0IHVuc2lnbmVkIGNoYXIgZGF0YVtdID0ge3ZhbHVlfTsKKyAgcmV0dXJuIHdyaXRlRXh0ZW5kZWRQYWNrZXQoYnJsLCBIVF9FWFRQS1RfU2V0QXRjTW9kZSwgZGF0YSwgc2l6ZW9mKGRhdGEpKTsKK30KKworc3RhdGljIGludAorc2V0QnJhaWxsZUZpcm1uZXNzIChCcmFpbGxlRGlzcGxheSAqYnJsLCBCcmFpbGxlRmlybW5lc3Mgc2V0dGluZykgeworICBjb25zdCB1bnNpZ25lZCBjaGFyIGRhdGFbXSA9IHtzZXR0aW5nICogMiAvIEJSTF9GSVJNTkVTU19NQVhJTVVNfTsKKyAgcmV0dXJuIHdyaXRlRXh0ZW5kZWRQYWNrZXQoYnJsLCBIVF9FWFRQS1RfU2V0RmlybW5lc3MsIGRhdGEsIHNpemVvZihkYXRhKSk7Cit9CisKK3N0YXRpYyBpbnQKK3NldFRvdWNoU2Vuc2l0aXZpdHlfRXZvbHV0aW9uIChCcmFpbGxlRGlzcGxheSAqYnJsLCBUb3VjaFNlbnNpdGl2aXR5IHNldHRpbmcpIHsKKyAgY29uc3QgdW5zaWduZWQgY2hhciBkYXRhW10gPSB7MFhGRiAtIChzZXR0aW5nICogMFhGMCAvIEJSTF9TRU5TSVRJVklUWV9NQVhJTVVNKX07CisgIHJldHVybiB3cml0ZUV4dGVuZGVkUGFja2V0KGJybCwgSFRfRVhUUEtUX1NldEF0Y1NlbnNpdGl2aXR5LCBkYXRhLCBzaXplb2YoZGF0YSkpOworfQorCitzdGF0aWMgaW50CitzZXRUb3VjaFNlbnNpdGl2aXR5X0FjdGl2ZUJyYWlsbGUgKEJyYWlsbGVEaXNwbGF5ICpicmwsIFRvdWNoU2Vuc2l0aXZpdHkgc2V0dGluZykgeworICBjb25zdCB1bnNpZ25lZCBjaGFyIGRhdGFbXSA9IHtzZXR0aW5nICogNiAvIEJSTF9TRU5TSVRJVklUWV9NQVhJTVVNfTsKKyAgcmV0dXJuIHdyaXRlRXh0ZW5kZWRQYWNrZXQoYnJsLCBIVF9FWFRQS1RfU2V0QXRjU2Vuc2l0aXZpdHkyLCBkYXRhLCBzaXplb2YoZGF0YSkpOworfQorCit0eXBlZGVmIGludCAoRGF0ZVRpbWVQcm9jZXNzb3IpIChCcmFpbGxlRGlzcGxheSAqYnJsLCBjb25zdCBIVF9EYXRlVGltZSAqZGF0ZVRpbWUpOworc3RhdGljIERhdGVUaW1lUHJvY2Vzc29yICpkYXRlVGltZVByb2Nlc3NvciA9IE5VTEw7CisKK3N0YXRpYyBpbnQKK3JlcXVlc3REYXRlVGltZSAoQnJhaWxsZURpc3BsYXkgKmJybCwgRGF0ZVRpbWVQcm9jZXNzb3IgKnByb2Nlc3NvcikgeworICBpbnQgcmVzdWx0ID0gd3JpdGVFeHRlbmRlZFBhY2tldChicmwsIEhUX0VYVFBLVF9HZXRSVEMsIE5VTEwsIDApOworCisgIGlmIChyZXN1bHQpIHsKKyAgICBkYXRlVGltZVByb2Nlc3NvciA9IHByb2Nlc3NvcjsKKyAgfQorCisgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBpbnQKK2xvZ0RhdGVUaW1lIChCcmFpbGxlRGlzcGxheSAqYnJsLCBjb25zdCBIVF9EYXRlVGltZSAqZGF0ZVRpbWUpIHsKKyAgbG9nTWVzc2FnZShMT0dfSU5GTywKKyAgICAgICAgICAgICAiZGF0ZSBhbmQgdGltZSBvZiAlczoiCisgICAgICAgICAgICAgIiAlMDQiIFBSSXUxNiAiLSUwMiIgUFJJdTggIi0lMDIiIFBSSXU4CisgICAgICAgICAgICAgIiAlMDIiIFBSSXU4ICI6JTAyIiBQUkl1OCAiOiUwMiIgUFJJdTgsCisgICAgICAgICAgICAgYnJsLT5kYXRhLT5tb2RlbC0+bmFtZSwKKyAgICAgICAgICAgICBnZXRCaWdFbmRpYW4xNihkYXRlVGltZS0+eWVhciksIGRhdGVUaW1lLT5tb250aCwgZGF0ZVRpbWUtPmRheSwKKyAgICAgICAgICAgICBkYXRlVGltZS0+aG91ciwgZGF0ZVRpbWUtPm1pbnV0ZSwgZGF0ZVRpbWUtPnNlY29uZCk7CisKKyAgcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQKK3N5bmNocm9uaXplRGF0ZVRpbWUgKEJyYWlsbGVEaXNwbGF5ICpicmwsIGNvbnN0IEhUX0RhdGVUaW1lICpkYXRlVGltZSkgeworICBsb25nIGludCBkZWx0YTsKKyAgVGltZVZhbHVlIGhvc3RUaW1lOworICBnZXRDdXJyZW50VGltZSgmaG9zdFRpbWUpOworCisgIHsKKyAgICBUaW1lVmFsdWUgZGV2aWNlVGltZTsKKworICAgIHsKKyAgICAgIFRpbWVDb21wb25lbnRzIGNvbXBvbmVudHMgPSB7CisgICAgICAgIC55ZWFyID0gZ2V0QmlnRW5kaWFuMTYoZGF0ZVRpbWUtPnllYXIpLAorICAgICAgICAubW9udGggPSBkYXRlVGltZS0+bW9udGggLSAxLAorICAgICAgICAuZGF5ID0gZGF0ZVRpbWUtPmRheSAtIDEsCisgICAgICAgIC5ob3VyID0gZGF0ZVRpbWUtPmhvdXIsCisgICAgICAgIC5taW51dGUgPSBkYXRlVGltZS0+bWludXRlLAorICAgICAgICAuc2Vjb25kID0gZGF0ZVRpbWUtPnNlY29uZAorICAgICAgfTsKKworICAgICAgbWFrZVRpbWVWYWx1ZSgmZGV2aWNlVGltZSwgJmNvbXBvbmVudHMpOworICAgIH0KKworICAgIGRlbHRhID0gbWlsbGlzZWNvbmRzQmV0d2VlbigmaG9zdFRpbWUsICZkZXZpY2VUaW1lKTsKKyAgICBpZiAoZGVsdGEgPCAwKSBkZWx0YSA9IC1kZWx0YTsKKyAgfQorCisgIGlmIChkZWx0YSA+IDEwMDApIHsKKyAgICBUaW1lQ29tcG9uZW50cyBjb21wb25lbnRzOworICAgIEhUX0RhdGVUaW1lIHBheWxvYWQ7CisKKyAgICBleHBhbmRUaW1lVmFsdWUoJmhvc3RUaW1lLCAmY29tcG9uZW50cyk7CisgICAgcHV0TGl0dGxlRW5kaWFuMTYoJnBheWxvYWQueWVhciwgY29tcG9uZW50cy55ZWFyKTsKKyAgICBwYXlsb2FkLm1vbnRoID0gY29tcG9uZW50cy5tb250aCArIDE7CisgICAgcGF5bG9hZC5kYXkgPSBjb21wb25lbnRzLmRheSArIDE7CisgICAgcGF5bG9hZC5ob3VyID0gY29tcG9uZW50cy5ob3VyOworICAgIHBheWxvYWQubWludXRlID0gY29tcG9uZW50cy5taW51dGU7CisgICAgcGF5bG9hZC5zZWNvbmQgPSBjb21wb25lbnRzLnNlY29uZDsKKworICAgIGxvZ01lc3NhZ2UoTE9HX0RFQlVHLCAiVGltZSBkaWZmZXJlbmNlIGJldHdlZW4gaG9zdCBhbmQgZGV2aWNlOiAlbGQuJTAzbGQiLAorICAgICAgICAgICAgICAgKGRlbHRhIC8gTVNFQ1NfUEVSX1NFQyksIChkZWx0YSAlIE1TRUNTX1BFUl9TRUMpKTsKKworICAgIGlmICh3cml0ZUV4dGVuZGVkUGFja2V0KGJybCwgSFRfRVhUUEtUX1NldFJUQywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAodW5zaWduZWQgY2hhciAqKSZwYXlsb2FkLCBzaXplb2YocGF5bG9hZCkpKSB7CisgICAgICByZXR1cm4gcmVxdWVzdERhdGVUaW1lKGJybCwgbG9nRGF0ZVRpbWUpOworICAgIH0KKyAgfQorCisgIHJldHVybiAxOworfQorCitzdGF0aWMgaW50Citpbml0aWFsaXplU2Vzc2lvbiAoQnJhaWxsZURpc3BsYXkgKmJybCkgeworICBjb25zdCBHZW5lcmFsT3BlcmF0aW9ucyAqb3BzID0gZ2lvR2V0QXBwbGljYXRpb25EYXRhKGJybC0+Z2lvRW5kcG9pbnQpOworCisgIGlmIChvcHMpIHsKKyAgICBpZiAob3BzLT5pbml0aWFsaXplU2Vzc2lvbikgeworICAgICAgaWYgKCFvcHMtPmluaXRpYWxpemVTZXNzaW9uKGJybCkpIHsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgICB9CisgICAgfQorICB9CisKKyAgcmV0dXJuIDE7Cit9CisKK3N0YXRpYyB2b2lkCitzZXRVc2JDb25uZWN0aW9uUHJvcGVydGllcyAoCisgIEdpb1VzYkNvbm5lY3Rpb25Qcm9wZXJ0aWVzICpwcm9wZXJ0aWVzLAorICBjb25zdCBVc2JDaGFubmVsRGVmaW5pdGlvbiAqZGVmaW5pdGlvbgorKSB7CisgIGlmIChkZWZpbml0aW9uLT5kYXRhKSB7CisgICAgY29uc3QgVXNiT3BlcmF0aW9ucyAqdXNiT3BzID0gZGVmaW5pdGlvbi0+ZGF0YTsKKworICAgIHByb3BlcnRpZXMtPmFwcGxpY2F0aW9uRGF0YSA9IHVzYk9wcy0+Z2VuZXJhbDsKKyAgICBwcm9wZXJ0aWVzLT53cml0ZURhdGEgPSB1c2JPcHMtPndyaXRlRGF0YTsKKyAgICBwcm9wZXJ0aWVzLT5yZWFkRGF0YSA9IHVzYk9wcy0+cmVhZERhdGE7CisgICAgcHJvcGVydGllcy0+YXdhaXRJbnB1dCA9IHVzYk9wcy0+YXdhaXRJbnB1dDsKKyAgICBwcm9wZXJ0aWVzLT5pbnB1dEZpbHRlciA9IHVzYk9wcy0+aW5wdXRGaWx0ZXI7CisgIH0KK30KKworc3RhdGljIGludAorY29ubmVjdFJlc291cmNlIChCcmFpbGxlRGlzcGxheSAqYnJsLCBjb25zdCBjaGFyICppZGVudGlmaWVyKSB7CisgIHN0YXRpYyBjb25zdCBTZXJpYWxQYXJhbWV0ZXJzIHNlcmlhbFBhcmFtZXRlcnMgPSB7CisgICAgU0VSSUFMX0RFRkFVTFRfUEFSQU1FVEVSUywKKyAgICAuYmF1ZCA9IDE5MjAwLAorICAgIC5wYXJpdHkgPSBTRVJJQUxfUEFSSVRZX09ERAorICB9OworCisgIEJFR0lOX1VTQl9TVFJJTkdfTElTVCh1c2JNYW51ZmFjdHVyZXJzXzA0MDNfNjAwMSkKKyAgICAiRlRESSIsCisgIEVORF9VU0JfU1RSSU5HX0xJU1QKKworICBCRUdJTl9VU0JfQ0hBTk5FTF9ERUZJTklUSU9OUworICAgIHsgLyogR29IdWJzIGNoaXAgKi8KKyAgICAgIC52ZW5kb3I9MFgwOTIxLCAucHJvZHVjdD0wWDEyMDAsCisgICAgICAuY29uZmlndXJhdGlvbj0xLCAuaW50ZXJmYWNlPTAsIC5hbHRlcm5hdGl2ZT0wLAorICAgICAgLmlucHV0RW5kcG9pbnQ9MSwgLm91dHB1dEVuZHBvaW50PTEsCisgICAgICAuc2VyaWFsID0gJnNlcmlhbFBhcmFtZXRlcnMKKyAgICB9LAorCisgICAgeyAvKiBGVERJIGNoaXAgKi8KKyAgICAgIC52ZW5kb3I9MFgwNDAzLCAucHJvZHVjdD0wWDYwMDEsCisgICAgICAubWFudWZhY3R1cmVycyA9IHVzYk1hbnVmYWN0dXJlcnNfMDQwM182MDAxLAorICAgICAgLmNvbmZpZ3VyYXRpb249MSwgLmludGVyZmFjZT0wLCAuYWx0ZXJuYXRpdmU9MCwKKyAgICAgIC5pbnB1dEVuZHBvaW50PTEsIC5vdXRwdXRFbmRwb2ludD0yLAorICAgICAgLnNlcmlhbCA9ICZzZXJpYWxQYXJhbWV0ZXJzCisgICAgfSwKKworICAgIHsgLyogRWFzeSBCcmFpbGxlIChISUQpICovCisgICAgICAudmVuZG9yPTBYMUZFNCwgLnByb2R1Y3Q9MFgwMDQ0LAorICAgICAgLmNvbmZpZ3VyYXRpb249MSwgLmludGVyZmFjZT0wLCAuYWx0ZXJuYXRpdmU9MCwKKyAgICAgIC5kYXRhPSZ1c2JPcGVyYXRpb25zMgorICAgIH0sCisKKyAgICB7IC8qIEJyYWlsbGUgU3RhciA0MCAoSElEKSAqLworICAgICAgLnZlbmRvcj0wWDFGRTQsIC5wcm9kdWN0PTBYMDA3NCwKKyAgICAgIC5jb25maWd1cmF0aW9uPTEsIC5pbnRlcmZhY2U9MCwgLmFsdGVybmF0aXZlPTAsCisgICAgICAuZGF0YT0mdXNiT3BlcmF0aW9uczIKKyAgICB9LAorCisgICAgeyAvKiBVU0ItSElEIGFkYXB0ZXIgKi8KKyAgICAgIC52ZW5kb3I9MFgxRkU0LCAucHJvZHVjdD0wWDAwMDMsCisgICAgICAuY29uZmlndXJhdGlvbj0xLCAuaW50ZXJmYWNlPTAsIC5hbHRlcm5hdGl2ZT0wLAorICAgICAgLmRhdGE9JnVzYk9wZXJhdGlvbnMyCisgICAgfSwKKworICAgIHsgLyogQWN0aXZlIEJyYWlsbGUgKi8KKyAgICAgIC52ZW5kb3I9MFgxRkU0LCAucHJvZHVjdD0wWDAwNTQsCisgICAgICAuY29uZmlndXJhdGlvbj0xLCAuaW50ZXJmYWNlPTAsIC5hbHRlcm5hdGl2ZT0wLAorICAgICAgLmlucHV0RW5kcG9pbnQ9MSwgLm91dHB1dEVuZHBvaW50PTEsCisgICAgICAuZGF0YT0mdXNiT3BlcmF0aW9uczMKKyAgICB9LAorCisgICAgeyAvKiBCYXNpYyBCcmFpbGxlIDE2ICovCisgICAgICAudmVuZG9yPTBYMUZFNCwgLnByb2R1Y3Q9MFgwMDgxLAorICAgICAgLmNvbmZpZ3VyYXRpb249MSwgLmludGVyZmFjZT0wLCAuYWx0ZXJuYXRpdmU9MCwKKyAgICAgIC5pbnB1dEVuZHBvaW50PTEsIC5vdXRwdXRFbmRwb2ludD0xLAorICAgICAgLmRhdGE9JnVzYk9wZXJhdGlvbnMzCisgICAgfSwKKworICAgIHsgLyogQmFzaWMgQnJhaWxsZSAyMCAqLworICAgICAgLnZlbmRvcj0wWDFGRTQsIC5wcm9kdWN0PTBYMDA4MiwKKyAgICAgIC5jb25maWd1cmF0aW9uPTEsIC5pbnRlcmZhY2U9MCwgLmFsdGVybmF0aXZlPTAsCisgICAgICAuaW5wdXRFbmRwb2ludD0xLCAub3V0cHV0RW5kcG9pbnQ9MSwKKyAgICAgIC5kYXRhPSZ1c2JPcGVyYXRpb25zMworICAgIH0sCisKKyAgICB7IC8qIEJhc2ljIEJyYWlsbGUgMzIgKi8KKyAgICAgIC52ZW5kb3I9MFgxRkU0LCAucHJvZHVjdD0wWDAwODMsCisgICAgICAuY29uZmlndXJhdGlvbj0xLCAuaW50ZXJmYWNlPTAsIC5hbHRlcm5hdGl2ZT0wLAorICAgICAgLmlucHV0RW5kcG9pbnQ9MSwgLm91dHB1dEVuZHBvaW50PTEsCisgICAgICAuZGF0YT0mdXNiT3BlcmF0aW9uczMKKyAgICB9LAorCisgICAgeyAvKiBCYXNpYyBCcmFpbGxlIDQwICovCisgICAgICAudmVuZG9yPTBYMUZFNCwgLnByb2R1Y3Q9MFgwMDg0LAorICAgICAgLmNvbmZpZ3VyYXRpb249MSwgLmludGVyZmFjZT0wLCAuYWx0ZXJuYXRpdmU9MCwKKyAgICAgIC5pbnB1dEVuZHBvaW50PTEsIC5vdXRwdXRFbmRwb2ludD0xLAorICAgICAgLmRhdGE9JnVzYk9wZXJhdGlvbnMzCisgICAgfSwKKworICAgIHsgLyogQmFzaWMgQnJhaWxsZSA0OCAqLworICAgICAgLnZlbmRvcj0wWDFGRTQsIC5wcm9kdWN0PTBYMDA4QSwKKyAgICAgIC5jb25maWd1cmF0aW9uPTEsIC5pbnRlcmZhY2U9MCwgLmFsdGVybmF0aXZlPTAsCisgICAgICAuaW5wdXRFbmRwb2ludD0xLCAub3V0cHV0RW5kcG9pbnQ9MSwKKyAgICAgIC5kYXRhPSZ1c2JPcGVyYXRpb25zMworICAgIH0sCisKKyAgICB7IC8qIEJhc2ljIEJyYWlsbGUgNjQgKi8KKyAgICAgIC52ZW5kb3I9MFgxRkU0LCAucHJvZHVjdD0wWDAwODYsCisgICAgICAuY29uZmlndXJhdGlvbj0xLCAuaW50ZXJmYWNlPTAsIC5hbHRlcm5hdGl2ZT0wLAorICAgICAgLmlucHV0RW5kcG9pbnQ9MSwgLm91dHB1dEVuZHBvaW50PTEsCisgICAgICAuZGF0YT0mdXNiT3BlcmF0aW9uczMKKyAgICB9LAorCisgICAgeyAvKiBCYXNpYyBCcmFpbGxlIDgwICovCisgICAgICAudmVuZG9yPTBYMUZFNCwgLnByb2R1Y3Q9MFgwMDg3LAorICAgICAgLmNvbmZpZ3VyYXRpb249MSwgLmludGVyZmFjZT0wLCAuYWx0ZXJuYXRpdmU9MCwKKyAgICAgIC5pbnB1dEVuZHBvaW50PTEsIC5vdXRwdXRFbmRwb2ludD0xLAorICAgICAgLmRhdGE9JnVzYk9wZXJhdGlvbnMzCisgICAgfSwKKworICAgIHsgLyogQmFzaWMgQnJhaWxsZSAxNjAgKi8KKyAgICAgIC52ZW5kb3I9MFgxRkU0LCAucHJvZHVjdD0wWDAwOEIsCisgICAgICAuY29uZmlndXJhdGlvbj0xLCAuaW50ZXJmYWNlPTAsIC5hbHRlcm5hdGl2ZT0wLAorICAgICAgLmlucHV0RW5kcG9pbnQ9MSwgLm91dHB1dEVuZHBvaW50PTEsCisgICAgICAuZGF0YT0mdXNiT3BlcmF0aW9uczMKKyAgICB9LAorCisgICAgeyAvKiBBY3RpbGlubyAqLworICAgICAgLnZlbmRvcj0wWDFGRTQsIC5wcm9kdWN0PTBYMDA2MSwKKyAgICAgIC5jb25maWd1cmF0aW9uPTEsIC5pbnRlcmZhY2U9MCwgLmFsdGVybmF0aXZlPTAsCisgICAgICAuaW5wdXRFbmRwb2ludD0xLCAub3V0cHV0RW5kcG9pbnQ9MSwKKyAgICAgIC5kYXRhPSZ1c2JPcGVyYXRpb25zMworICAgIH0sCisKKyAgICB7IC8qIEFjdGl2YXRvciAqLworICAgICAgLnZlbmRvcj0wWDFGRTQsIC5wcm9kdWN0PTBYMDBBNCwKKyAgICAgIC5jb25maWd1cmF0aW9uPTEsIC5pbnRlcmZhY2U9MCwgLmFsdGVybmF0aXZlPTAsCisgICAgICAuaW5wdXRFbmRwb2ludD0xLCAub3V0cHV0RW5kcG9pbnQ9MSwKKyAgICAgIC5kYXRhPSZ1c2JPcGVyYXRpb25zMworICAgIH0sCisKKyAgICB7IC8qIEFjdGl2ZSBTdGFyIDQwICovCisgICAgICAudmVuZG9yPTBYMUZFNCwgLnByb2R1Y3Q9MFgwMDY0LAorICAgICAgLmNvbmZpZ3VyYXRpb249MSwgLmludGVyZmFjZT0wLCAuYWx0ZXJuYXRpdmU9MCwKKyAgICAgIC5pbnB1dEVuZHBvaW50PTEsIC5vdXRwdXRFbmRwb2ludD0xLAorICAgICAgLmRhdGE9JnVzYk9wZXJhdGlvbnMzCisgICAgfSwKKworICAgIHsgLyogQ29ubmVjdCBCcmFpbGxlIDQwICovCisgICAgICAudmVuZG9yPTBYMUZFNCwgLnByb2R1Y3Q9MFgwMDU1LAorICAgICAgLmNvbmZpZ3VyYXRpb249MSwgLmludGVyZmFjZT0wLCAuYWx0ZXJuYXRpdmU9MCwKKyAgICAgIC5pbnB1dEVuZHBvaW50PTEsIC5vdXRwdXRFbmRwb2ludD0xLAorICAgICAgLmRhdGE9JnVzYk9wZXJhdGlvbnMzCisgICAgfSwKKyAgRU5EX1VTQl9DSEFOTkVMX0RFRklOSVRJT05TCisKKyAgR2lvRGVzY3JpcHRvciBkZXNjcmlwdG9yOworICBnaW9Jbml0aWFsaXplRGVzY3JpcHRvcigmZGVzY3JpcHRvcik7CisKKyAgZGVzY3JpcHRvci5zZXJpYWwucGFyYW1ldGVycyA9ICZzZXJpYWxQYXJhbWV0ZXJzOworCisgIGRlc2NyaXB0b3IudXNiLmNoYW5uZWxEZWZpbml0aW9ucyA9IHVzYkNoYW5uZWxEZWZpbml0aW9uczsKKyAgZGVzY3JpcHRvci51c2Iuc2V0Q29ubmVjdGlvblByb3BlcnRpZXMgPSBzZXRVc2JDb25uZWN0aW9uUHJvcGVydGllczsKKyAgZGVzY3JpcHRvci51c2Iub3B0aW9ucy5pbnB1dFRpbWVvdXQgPSAxMDA7CisgIGRlc2NyaXB0b3IudXNiLm9wdGlvbnMucmVxdWVzdFRpbWVvdXQgPSAxMDA7CisKKyAgZGVzY3JpcHRvci5ibHVldG9vdGguY2hhbm5lbE51bWJlciA9IDE7CisgIGRlc2NyaXB0b3IuYmx1ZXRvb3RoLmRpc2NvdmVyQ2hhbm5lbCA9IDE7CisKKyAgaWYgKGNvbm5lY3RCcmFpbGxlUmVzb3VyY2UoYnJsLCBpZGVudGlmaWVyLCAmZGVzY3JpcHRvciwgaW5pdGlhbGl6ZVNlc3Npb24pKSB7CisgICAgcmV0dXJuIDE7CisgIH0KKworICByZXR1cm4gMDsKK30KKworc3RhdGljIEJyYWlsbGVSZXNwb25zZVJlc3VsdAoraXNJZGVudGl0eVJlc3BvbnNlIChCcmFpbGxlRGlzcGxheSAqYnJsLCBjb25zdCB2b2lkICpwYWNrZXQsIHNpemVfdCBzaXplKSB7CisgIGNvbnN0IEhUX1BhY2tldCAqcmVzcG9uc2UgPSBwYWNrZXQ7CisKKyAgcmV0dXJuIChyZXNwb25zZS0+ZmllbGRzLnR5cGUgPT0gSFRfUEtUX09LKT8gQlJMX1JTUF9ET05FOiBCUkxfUlNQX1VORVhQRUNURUQ7Cit9CisKK3N0YXRpYyBpbnQKK2JybF9jb25zdHJ1Y3QgKEJyYWlsbGVEaXNwbGF5ICpicmwsIGNoYXIgKipwYXJhbWV0ZXJzLCBjb25zdCBjaGFyICpkZXZpY2UpIHsKKyAgaWYgKChicmwtPmRhdGEgPSBtYWxsb2Moc2l6ZW9mKCpicmwtPmRhdGEpKSkpIHsKKyAgICBtZW1zZXQoYnJsLT5kYXRhLCAwLCBzaXplb2YoKmJybC0+ZGF0YSkpOworCisgICAgaWYgKGNvbm5lY3RSZXNvdXJjZShicmwsIGRldmljZSkpIHsKKyAgICAgIHVuc2lnbmVkIGludCBzZXRUaW1lID0gMDsKKyAgICAgIEhUX1BhY2tldCByZXNwb25zZTsKKworICAgICAgaWYgKCpwYXJhbWV0ZXJzW1BBUk1fU0VUVElNRV0pIHsKKyAgICAgICAgaWYgKCF2YWxpZGF0ZVllc05vKCZzZXRUaW1lLCBwYXJhbWV0ZXJzW1BBUk1fU0VUVElNRV0pKSB7CisgICAgICAgICAgbG9nTWVzc2FnZShMT0dfV0FSTklORywgIiVzOiAlcyIsICJpbnZhbGlkIHNldCB0aW1lIHNldHRpbmciLAorICAgICAgICAgICAgICAgICAgICAgcGFyYW1ldGVyc1tQQVJNX1NFVFRJTUVdKTsKKyAgICAgICAgfQorICAgICAgfQorCisgICAgICBzZXRUaW1lID0gISFzZXRUaW1lOworCisgICAgICBpZiAocHJvYmVCcmFpbGxlRGlzcGxheShicmwsIDMsIE5VTEwsIDEwMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJybF9yZXNldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRQYWNrZXQsICZyZXNwb25zZSwgc2l6ZW9mKHJlc3BvbnNlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzSWRlbnRpdHlSZXNwb25zZSkpIHsKKyAgICAgICAgaWYgKGlkZW50aWZ5TW9kZWwoYnJsLCByZXNwb25zZS5maWVsZHMuZGF0YS5vay5tb2RlbCkpIHsKKyAgICAgICAgICBtYWtlT3V0cHV0VGFibGUoZG90c1RhYmxlX0lTTzExNTQ4XzEpOworCisgICAgICAgICAgaWYgKGJybC0+ZGF0YS0+bW9kZWwtPmhhc0FUQykgeworICAgICAgICAgICAgc2V0QXRjTW9kZShicmwsIDEpOworICAgICAgICAgIH0KKworICAgICAgICAgIGlmIChzZXRUaW1lKSB7CisgICAgICAgICAgICBpZiAoYnJsLT5kYXRhLT5tb2RlbC0+aGFzVGltZSkgeworICAgICAgICAgICAgICByZXF1ZXN0RGF0ZVRpbWUoYnJsLCBzeW5jaHJvbml6ZURhdGVUaW1lKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgIGxvZ01lc3NhZ2UoTE9HX0lORk8sICIlcyBkb2VzIG5vdCBzdXBwb3J0IHNldHRpbmcgdGhlIGNsb2NrIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBicmwtPmRhdGEtPm1vZGVsLT5uYW1lKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9CisKKyAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgfQorICAgICAgfQorCisgICAgICBkaXNjb25uZWN0QnJhaWxsZVJlc291cmNlKGJybCwgTlVMTCk7CisgICAgfQorCisgICAgZnJlZShicmwtPmRhdGEpOworICB9IGVsc2UgeworICAgIGxvZ01hbGxvY0Vycm9yKCk7CisgIH0KKworICByZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQKK2JybF9kZXN0cnVjdCAoQnJhaWxsZURpc3BsYXkgKmJybCkgeworICBpZiAoYnJsLT5kYXRhKSB7CisgICAgZGlzY29ubmVjdEJyYWlsbGVSZXNvdXJjZShicmwsIGJybC0+ZGF0YS0+bW9kZWwtPnNlc3Npb25FbmRlcik7CisKKyAgICBmcmVlKGJybC0+ZGF0YSk7CisgICAgYnJsLT5kYXRhID0gTlVMTDsKKyAgfQorCisgIGRlYWxsb2NhdGVIaWRJbnB1dEJ1ZmZlcigpOworfQorCitzdGF0aWMgaW50Cit3cml0ZUNlbGxzIChCcmFpbGxlRGlzcGxheSAqYnJsKSB7CisgIHJldHVybiBicmwtPmRhdGEtPm1vZGVsLT53cml0ZUNlbGxzKGJybCk7Cit9CisKK3N0YXRpYyBpbnQKK3dyaXRlQ2VsbHNfc3RhdHVzQW5kVGV4dCAoQnJhaWxsZURpc3BsYXkgKmJybCkgeworICB1bnNpZ25lZCBjaGFyIGJ1ZmZlclsxICsgYnJsLT5kYXRhLT5tb2RlbC0+c3RhdHVzQ2VsbHMgKyBicmwtPmRhdGEtPm1vZGVsLT50ZXh0Q2VsbHNdOworICB1bnNpZ25lZCBjaGFyICpieXRlID0gYnVmZmVyOworCisgICpieXRlKysgPSBIVF9QS1RfQnJhaWxsZTsKKyAgYnl0ZSA9IG1lbXBjcHkoYnl0ZSwgYnJsLT5kYXRhLT5yYXdTdGF0dXMsIGJybC0+ZGF0YS0+bW9kZWwtPnN0YXR1c0NlbGxzKTsKKyAgYnl0ZSA9IG1lbXBjcHkoYnl0ZSwgYnJsLT5kYXRhLT5yYXdEYXRhLCBicmwtPmRhdGEtPm1vZGVsLT50ZXh0Q2VsbHMpOworCisgIHJldHVybiB3cml0ZUJyYWlsbGVNZXNzYWdlKGJybCwgTlVMTCwgSFRfUEtUX0JyYWlsbGUsIGJ1ZmZlciwgYnl0ZS1idWZmZXIpOworfQorCitzdGF0aWMgaW50Cit3cml0ZUNlbGxzX0Jvb2t3b3JtIChCcmFpbGxlRGlzcGxheSAqYnJsKSB7CisgIHVuc2lnbmVkIGNoYXIgYnVmZmVyWzEgKyBicmwtPmRhdGEtPm1vZGVsLT5zdGF0dXNDZWxscyArIGJybC0+ZGF0YS0+bW9kZWwtPnRleHRDZWxscyArIDFdOworCisgIGJ1ZmZlclswXSA9IDBYMDE7CisgIG1lbWNweShidWZmZXIrMSwgYnJsLT5kYXRhLT5yYXdEYXRhLCBicmwtPmRhdGEtPm1vZGVsLT50ZXh0Q2VsbHMpOworICBidWZmZXJbc2l6ZW9mKGJ1ZmZlciktMV0gPSBBU0NJSV9TWU47CisgIHJldHVybiB3cml0ZUJyYWlsbGVNZXNzYWdlKGJybCwgTlVMTCwgMFgwMSwgYnVmZmVyLCBzaXplb2YoYnVmZmVyKSk7Cit9CisKK3N0YXRpYyBpbnQKK3dyaXRlQ2VsbHNfRXZvbHV0aW9uIChCcmFpbGxlRGlzcGxheSAqYnJsKSB7CisgIHJldHVybiB3cml0ZUV4dGVuZGVkUGFja2V0KGJybCwgSFRfRVhUUEtUX0JyYWlsbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJybC0+ZGF0YS0+cmF3RGF0YSwgYnJsLT5kYXRhLT5tb2RlbC0+dGV4dENlbGxzKTsKK30KKworc3RhdGljIGludAordXBkYXRlQ2VsbHMgKEJyYWlsbGVEaXNwbGF5ICpicmwpIHsKKyAgaWYgKCFicmwtPmRhdGEtPnVwZGF0ZVJlcXVpcmVkKSByZXR1cm4gMTsKKyAgaWYgKGJybC0+ZGF0YS0+Y3VycmVudFN0YXRlICE9IEJEU19SRUFEWSkgcmV0dXJuIDE7CisKKyAgaWYgKCF3cml0ZUNlbGxzKGJybCkpIHJldHVybiAwOworICBicmwtPmRhdGEtPnVwZGF0ZVJlcXVpcmVkID0gMDsKKyAgcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQKK2JybF93cml0ZVdpbmRvdyAoQnJhaWxsZURpc3BsYXkgKmJybCwgY29uc3Qgd2NoYXJfdCAqdGV4dCkgeworICBjb25zdCBzaXplX3QgY2VsbENvdW50ID0gYnJsLT5kYXRhLT5tb2RlbC0+dGV4dENlbGxzOworCisgIGlmIChjZWxsc0hhdmVDaGFuZ2VkKGJybC0+ZGF0YS0+cHJldkRhdGEsIGJybC0+YnVmZmVyLCBjZWxsQ291bnQsIE5VTEwsIE5VTEwsIE5VTEwpKSB7CisgICAgdHJhbnNsYXRlT3V0cHV0Q2VsbHMoYnJsLT5kYXRhLT5yYXdEYXRhLCBicmwtPmRhdGEtPnByZXZEYXRhLCBjZWxsQ291bnQpOworICAgIGJybC0+ZGF0YS0+dXBkYXRlUmVxdWlyZWQgPSAxOworICB9CisKKyAgcmV0dXJuIHVwZGF0ZUNlbGxzKGJybCk7Cit9CisKK3N0YXRpYyBpbnQKK2JybF93cml0ZVN0YXR1cyAoQnJhaWxsZURpc3BsYXkgKmJybCwgY29uc3QgdW5zaWduZWQgY2hhciAqc3QpIHsKKyAgY29uc3Qgc2l6ZV90IGNlbGxDb3VudCA9IGJybC0+ZGF0YS0+bW9kZWwtPnN0YXR1c0NlbGxzOworCisgIGlmIChjZWxsc0hhdmVDaGFuZ2VkKGJybC0+ZGF0YS0+cHJldlN0YXR1cywgc3QsIGNlbGxDb3VudCwgTlVMTCwgTlVMTCwgTlVMTCkpIHsKKyAgICB0cmFuc2xhdGVPdXRwdXRDZWxscyhicmwtPmRhdGEtPnJhd1N0YXR1cywgYnJsLT5kYXRhLT5wcmV2U3RhdHVzLCBjZWxsQ291bnQpOworICAgIGJybC0+ZGF0YS0+dXBkYXRlUmVxdWlyZWQgPSAxOworICB9CisKKyAgcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQKK2ludGVycHJldEJ5dGVfa2V5IChCcmFpbGxlRGlzcGxheSAqYnJsLCB1bnNpZ25lZCBjaGFyIGJ5dGUpIHsKKyAgaW50IHJlbGVhc2UgPSAoYnl0ZSAmIEhUX0tFWV9SRUxFQVNFKSAhPSAwOworICBpZiAocmVsZWFzZSkgYnl0ZSBePSBIVF9LRVlfUkVMRUFTRTsKKworICBpZiAoKGJ5dGUgPj0gSFRfS0VZX1JPVVRJTkcpICYmCisgICAgICAoYnl0ZSA8IChIVF9LRVlfUk9VVElORyArIGJybC0+ZGF0YS0+bW9kZWwtPnRleHRDZWxscykpKSB7CisgICAgcmV0dXJuIGVucXVldWVLZXlFdmVudChicmwsIEhUX0dSUF9Sb3V0aW5nS2V5cywgYnl0ZSAtIEhUX0tFWV9ST1VUSU5HLCAhcmVsZWFzZSk7CisgIH0KKworICBpZiAoKGJ5dGUgPj0gSFRfS0VZX1NUQVRVUykgJiYKKyAgICAgIChieXRlIDwgKEhUX0tFWV9TVEFUVVMgKyBicmwtPmRhdGEtPm1vZGVsLT5zdGF0dXNDZWxscykpKSB7CisgICAgcmV0dXJuIGVucXVldWVLZXlFdmVudChicmwsIEhUX0dSUF9OYXZpZ2F0aW9uS2V5cywgYnl0ZSwgIXJlbGVhc2UpOworICB9CisKKyAgaWYgKGJ5dGUgPiAwKSB7CisgICAgcmV0dXJuIGVucXVldWVLZXlFdmVudChicmwsIEhUX0dSUF9OYXZpZ2F0aW9uS2V5cywgYnl0ZSwgIXJlbGVhc2UpOworICB9CisKKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK2ludGVycHJldEJ5dGVfQm9va3dvcm0gKEJyYWlsbGVEaXNwbGF5ICpicmwsIHVuc2lnbmVkIGNoYXIgYnl0ZSkgeworICBzdGF0aWMgY29uc3QgS2V5TnVtYmVyIGtleXNbXSA9IHsKKyAgICBIVF9CV0tfQmFja3dhcmQsCisgICAgSFRfQldLX0ZvcndhcmQsCisgICAgSFRfQldLX0VzY2FwZSwKKyAgICBIVF9CV0tfRW50ZXIsCisgICAgMAorICB9OworCisgIGNvbnN0IEtleU51bWJlciAqa2V5ID0ga2V5czsKKyAgY29uc3QgS2V5R3JvdXAgZ3JvdXAgPSBIVF9HUlBfTmF2aWdhdGlvbktleXM7CisKKyAgaWYgKCFieXRlKSByZXR1cm4gMDsKKyAgeworICAgIHVuc2lnbmVkIGNoYXIgYml0cyA9IGJ5dGU7CisKKyAgICB3aGlsZSAoKmtleSkgYml0cyAmPSB+KmtleSsrOworICAgIGlmIChiaXRzKSByZXR1cm4gMDsKKyAgICBrZXkgPSBrZXlzOworICB9CisKKyAgd2hpbGUgKCprZXkpIHsKKyAgICBpZiAoKGJ5dGUgJiAqa2V5KSAmJiAhZW5xdWV1ZUtleUV2ZW50KGJybCwgZ3JvdXAsICprZXksIDEpKSByZXR1cm4gMDsKKyAgICBrZXkgKz0gMTsKKyAgfQorCisgIGRvIHsKKyAgICBrZXkgLT0gMTsKKyAgICBpZiAoKGJ5dGUgJiAqa2V5KSAmJiAhZW5xdWV1ZUtleUV2ZW50KGJybCwgZ3JvdXAsICprZXksIDApKSByZXR1cm4gMDsKKyAgfSB3aGlsZSAoa2V5ICE9IGtleXMpOworCisgIHJldHVybiAxOworfQorCitzdGF0aWMgaW50CiticmxfcmVhZENvbW1hbmQgKEJyYWlsbGVEaXNwbGF5ICpicmwsIEtleVRhYmxlQ29tbWFuZENvbnRleHQgY29udGV4dCkgeworICB3aGlsZSAoMSkgeworICAgIEhUX1BhY2tldCBwYWNrZXQ7CisgICAgc2l6ZV90IHNpemUgPSByZWFkUGFja2V0KGJybCwgJnBhY2tldCwgc2l6ZW9mKHBhY2tldCkpOworCisgICAgaWYgKHNpemUgPT0gMCkgeworICAgICAgaWYgKGVycm5vICE9IEVBR0FJTikgcmV0dXJuIEJSTF9DTURfUkVTVEFSVEJSTDsKKyAgICAgIGJyZWFrOworICAgIH0KKworICAgIC8qIGEga2x1ZGdlIHRvIGhhbmRsZSB0aGUgQm9va3dvcm0gZ29pbmcgb2ZmbGluZSAqLworICAgIGlmIChicmwtPmRhdGEtPm1vZGVsLT5pZGVudGlmaWVyID09IEhUX01PREVMX0Jvb2t3b3JtKSB7CisgICAgICBpZiAocGFja2V0LmZpZWxkcy50eXBlID09IDBYMDYpIHsKKyAgICAgICAgaWYgKGJybC0+ZGF0YS0+Y3VycmVudFN0YXRlICE9IEJEU19PRkYpIHsKKyAgICAgICAgICAvKiBpZiB3ZSBnZXQgYW5vdGhlciBieXRlIHJpZ2h0IGF3YXkgdGhlbiB0aGUgZGV2aWNlCisgICAgICAgICAgICogaGFzIGdvbmUgb2ZmbGluZSBhbmQgaXMgZWNob2luZyBpdHMgZGlzcGxheQorICAgICAgICAgICAqLworICAgICAgICAgIGlmIChhd2FpdEJyYWlsbGVJbnB1dChicmwsIDEwKSkgeworICAgICAgICAgICAgc2V0U3RhdGUoYnJsLCBCRFNfT0ZGKTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgIH0KKworICAgICAgICAgIC8qIGlmIGFuIGlucHV0IGVycm9yIG9jY3VycmVkIHRoZW4gcmVzdGFydCB0aGUgZHJpdmVyICovCisgICAgICAgICAgaWYgKGVycm5vICE9IEVBR0FJTikgcmV0dXJuIEJSTF9DTURfUkVTVEFSVEJSTDsKKworICAgICAgICAgIC8qIG5vIGFkZGl0aW9uYWwgaW5wdXQgc28gZmFsbCB0aHJvdWdoIGFuZCBpbnRlcnByZXQgdGhlIHBhY2tldCBhcyBrZXlzICovCisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9CisKKyAgICBzd2l0Y2ggKHBhY2tldC5maWVsZHMudHlwZSkgeworICAgICAgY2FzZSBIVF9QS1RfT0s6CisgICAgICAgIGlmIChwYWNrZXQuZmllbGRzLmRhdGEub2subW9kZWwgPT0gYnJsLT5kYXRhLT5tb2RlbC0+aWRlbnRpZmllcikgeworICAgICAgICAgIHJlbGVhc2VCcmFpbGxlS2V5cyhicmwpOworICAgICAgICAgIGJybC0+ZGF0YS0+dXBkYXRlUmVxdWlyZWQgPSAxOworICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworCisgICAgICBkZWZhdWx0OgorICAgICAgICBzd2l0Y2ggKGJybC0+ZGF0YS0+Y3VycmVudFN0YXRlKSB7CisgICAgICAgICAgY2FzZSBCRFNfT0ZGOgorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICBjYXNlIEJEU19SRUFEWToKKyAgICAgICAgICAgIHN3aXRjaCAocGFja2V0LmZpZWxkcy50eXBlKSB7CisgICAgICAgICAgICAgIGNhc2UgSFRfUEtUX05BSzoKKyAgICAgICAgICAgICAgICBicmwtPmRhdGEtPnVwZGF0ZVJlcXVpcmVkID0gMTsKKyAgICAgICAgICAgICAgY2FzZSBIVF9QS1RfQUNLOgorICAgICAgICAgICAgICAgIGFja25vd2xlZGdlQnJhaWxsZU1lc3NhZ2UoYnJsKTsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAgICAgICBjYXNlIEhUX1BLVF9FeHRlbmRlZDogeworICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgbGVuZ3RoID0gcGFja2V0LmZpZWxkcy5kYXRhLmV4dGVuZGVkLmxlbmd0aCAtIDE7CisgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqYnl0ZXMgPSAmcGFja2V0LmZpZWxkcy5kYXRhLmV4dGVuZGVkLmRhdGEuYnl0ZXNbMF07CisKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKHBhY2tldC5maWVsZHMuZGF0YS5leHRlbmRlZC50eXBlKSB7CisgICAgICAgICAgICAgICAgICBjYXNlIEhUX0VYVFBLVF9Db25maXJtYXRpb246CisgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoYnl0ZXNbMF0pIHsKKyAgICAgICAgICAgICAgICAgICAgICBjYXNlIEhUX1BLVF9OQUs6CisgICAgICAgICAgICAgICAgICAgICAgICBicmwtPmRhdGEtPnVwZGF0ZVJlcXVpcmVkID0gMTsKKyAgICAgICAgICAgICAgICAgICAgICBjYXNlIEhUX1BLVF9BQ0s6CisgICAgICAgICAgICAgICAgICAgICAgICBhY2tub3dsZWRnZUJyYWlsbGVNZXNzYWdlKGJybCk7CisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgICAgY2FzZSBIVF9FWFRQS1RfS2V5OgorICAgICAgICAgICAgICAgICAgICBpZiAoYnJsLT5kYXRhLT5tb2RlbC0+aW50ZXJwcmV0Qnl0ZShicmwsIGJ5dGVzWzBdKSkgeworICAgICAgICAgICAgICAgICAgICAgIHVwZGF0ZUNlbGxzKGJybCk7CisgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEVPRjsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgICAgY2FzZSBIVF9FWFRQS1RfU2NhbmNvZGU6IHsKKyAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGxlbmd0aC0tKQorICAgICAgICAgICAgICAgICAgICAgIGVucXVldWVDb21tYW5kKEJSTF9DTURfQkxLKFBBU1NBVCkgfCBCUkxfQVJHX1BVVCgqYnl0ZXMrKykpOworICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgY2FzZSBIVF9FWFRQS1RfR2V0UlRDOiB7CisgICAgICAgICAgICAgICAgICAgIGNvbnN0IEhUX0RhdGVUaW1lICpjb25zdCBwYXlsb2FkID0gKEhUX0RhdGVUaW1lICopYnl0ZXM7CisgICAgICAgICAgICAgICAgICAgIERhdGVUaW1lUHJvY2Vzc29yICpwcm9jZXNzb3IgPSBkYXRlVGltZVByb2Nlc3NvcjsKKyAgICAgICAgICAgICAgICAgICAgZGF0ZVRpbWVQcm9jZXNzb3IgPSBOVUxMOworCisgICAgICAgICAgICAgICAgICAgIGlmIChwcm9jZXNzb3IpIHsKKyAgICAgICAgICAgICAgICAgICAgICBpZiAoIXByb2Nlc3NvcihicmwsIHBheWxvYWQpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgY2FzZSBIVF9FWFRQS1RfQXRjSW5mbzogeworICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgcmVhZGluZ1Bvc2l0aW9uID0gQlJMX01TS19BUkc7CisgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBoaWdoZXN0UHJlc3N1cmUgPSAwOworCisgICAgICAgICAgICAgICAgICAgIGlmIChieXRlc1swXSkgeworICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBjZWxsQ291bnQgPSBicmwtPmRhdGEtPm1vZGVsLT50ZXh0Q2VsbHMgKyBicmwtPmRhdGEtPm1vZGVsLT5zdGF0dXNDZWxsczsKKyAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgY2VsbEluZGV4ID0gYnl0ZXNbMF0gLSAxOworICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBkYXRhSW5kZXg7CisKKyAgICAgICAgICAgICAgICAgICAgICBmb3IgKGRhdGFJbmRleD0xOyBkYXRhSW5kZXg8bGVuZ3RoOyBkYXRhSW5kZXgrPTEpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgYnl0ZSA9IGJ5dGVzW2RhdGFJbmRleF07CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgcHJlc3N1cmVzW10gPSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgIEhJR0hfTklCQkxFKGJ5dGUpID4+IDQsCisgICAgICAgICAgICAgICAgICAgICAgICAgIExPV19OSUJCTEUoYnl0ZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIH07CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBwcmVzc3VyZUNvdW50ID0gQVJSQVlfQ09VTlQocHJlc3N1cmVzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBwcmVzc3VyZUluZGV4OworCisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHByZXNzdXJlSW5kZXg9MDsgcHJlc3N1cmVJbmRleDxwcmVzc3VyZUNvdW50OyBwcmVzc3VyZUluZGV4Kz0xKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgcHJlc3N1cmUgPSBwcmVzc3VyZXNbcHJlc3N1cmVJbmRleF07CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHByZXNzdXJlID4gaGlnaGVzdFByZXNzdXJlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGlnaGVzdFByZXNzdXJlID0gcHJlc3N1cmU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZGluZ1Bvc2l0aW9uID0gY2VsbEluZGV4OworICAgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY2VsbEluZGV4ICs9IDE7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlYWRpbmdQb3NpdGlvbiA+PSBjZWxsQ291bnQpIHJlYWRpbmdQb3NpdGlvbiA9IEJSTF9NU0tfQVJHOworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgZW5xdWV1ZUNvbW1hbmQoQlJMX0NNRF9CTEsoVE9VQ0hfQVQpIHwgcmVhZGluZ1Bvc2l0aW9uKTsKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgIGNhc2UgSFRfRVhUUEtUX1JlYWRpbmdQb3NpdGlvbjogeworICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgY2VsbENvdW50ID0gYnJsLT5kYXRhLT5tb2RlbC0+dGV4dENlbGxzICsgYnJsLT5kYXRhLT5tb2RlbC0+c3RhdHVzQ2VsbHM7CisgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCByZWFkaW5nUG9zaXRpb24gPSBieXRlc1swXTsKKworICAgICAgICAgICAgICAgICAgICBpZiAoKHJlYWRpbmdQb3NpdGlvbiA9PSAwWEZGKSB8fCAocmVhZGluZ1Bvc2l0aW9uID49IGNlbGxDb3VudCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICByZWFkaW5nUG9zaXRpb24gPSBCUkxfTVNLX0FSRzsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIGVucXVldWVDb21tYW5kKEJSTF9DTURfQkxLKFRPVUNIX0FUKSB8IHJlYWRpbmdQb3NpdGlvbik7CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIGlmIChicmwtPmRhdGEtPm1vZGVsLT5pbnRlcnByZXRCeXRlKGJybCwgcGFja2V0LmZpZWxkcy50eXBlKSkgeworICAgICAgICAgICAgICAgICAgdXBkYXRlQ2VsbHMoYnJsKTsKKyAgICAgICAgICAgICAgICAgIHJldHVybiBFT0Y7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgbG9nVW5leHBlY3RlZFBhY2tldChwYWNrZXQuYnl0ZXMsIHNpemUpOworICAgIGxvZ01lc3NhZ2UoTE9HX1dBUk5JTkcsICJzdGF0ZSAlZCIsIGJybC0+ZGF0YS0+Y3VycmVudFN0YXRlKTsKKyAgfQorCisgIHVwZGF0ZUNlbGxzKGJybCk7CisKKyAgcmV0dXJuIEVPRjsKK30KZGlmZiAtLWdpdCBhL0RyaXZlcnMvQnJhaWxsZS9IYW5keVRlY2gvYnJsZGVmcy1odC5oIGIvRHJpdmVycy9CcmFpbGxlL0hhbmR5VGVjaC9icmxkZWZzLWh0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGQ3YTE2ZQotLS0gL2Rldi9udWxsCisrKyBiL0RyaXZlcnMvQnJhaWxsZS9IYW5keVRlY2gvYnJsZGVmcy1odC5oCkBAIC0wLDAgKzEsMjI5IEBACisvKgorICogQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyAqICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyAqCisgKiBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorICoKKyAqIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyAqCisgKiBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisgKi8KKworI2lmbmRlZiBCUkxUVFlfSU5DTFVERURfSFRfQlJMREVGUworI2RlZmluZSBCUkxUVFlfSU5DTFVERURfSFRfQlJMREVGUworCisjZGVmaW5lIEhUX1VTQl9WRU5ET1IgMFgxRkU0CisKK3R5cGVkZWYgZW51bSB7CisgIEhUX01PREVMX1VzYkhpZEFkYXB0ZXIgPSAwWDAzLAorICBIVF9NT0RFTF9CcmFpbGxlV2F2ZSA9IDBYMDUsCisgIEhUX01PREVMX01vZHVsYXJFdm9sdXRpb242NCA9IDBYMzYsCisgIEhUX01PREVMX01vZHVsYXJFdm9sdXRpb244OCA9IDBYMzgsCisgIEhUX01PREVMX01vZHVsYXJDb25uZWN0ODggPSAwWDNBLAorICBIVF9NT0RFTF9FYXN5QnJhaWxsZSA9IDBYNDQsCisgIEhUX01PREVMX0FjdGl2ZUJyYWlsbGUgPSAwWDU0LAorICBIVF9NT0RFTF9Db25uZWN0QnJhaWxsZTQwID0gMFg1NSwKKyAgSFRfTU9ERUxfQWN0aWxpbm8gPSAwWDYxLAorICBIVF9NT0RFTF9BY3RpdmVTdGFyNDAgPSAwWDY0LAorICBIVF9NT0RFTF9CcmFpbGxpbm8gPSAwWDcyLAorICBIVF9NT0RFTF9CcmFpbGxlU3RhcjQwID0gMFg3NCwKKyAgSFRfTU9ERUxfQnJhaWxsZVN0YXI4MCA9IDBYNzgsCisgIEhUX01PREVMX01vZHVsYXIyMCA9IDBYODAsCisgIEhUX01PREVMX0Jhc2ljQnJhaWxsZTE2ID0gMFg4MSwKKyAgSFRfTU9ERUxfQmFzaWNCcmFpbGxlMjAgPSAwWDgyLAorICBIVF9NT0RFTF9CYXNpY0JyYWlsbGUzMiA9IDBYODMsCisgIEhUX01PREVMX0Jhc2ljQnJhaWxsZTQwID0gMFg4NCwKKyAgSFRfTU9ERUxfQmFzaWNCcmFpbGxlNjQgPSAwWDg2LAorICBIVF9NT0RFTF9CYXNpY0JyYWlsbGU4MCA9IDBYODcsCisgIEhUX01PREVMX01vZHVsYXI4MCA9IDBYODgsCisgIEhUX01PREVMX01vZHVsYXI0MCA9IDBYODksCisgIEhUX01PREVMX0Jhc2ljQnJhaWxsZTQ4ID0gMFg4QSwKKyAgSFRfTU9ERUxfQmFzaWNCcmFpbGxlMTYwID0gMFg4QiwKKyAgSFRfTU9ERUxfQm9va3dvcm0gPSAwWDkwLAorICBIVF9NT0RFTF9CYXNpY0JyYWlsbGVQbHVzMjAgPSAwWDkyLAorICBIVF9NT0RFTF9CYXNpY0JyYWlsbGVQbHVzMzIgPSAwWDkzLAorICBIVF9NT0RFTF9CYXNpY0JyYWlsbGVQbHVzNDAgPSAwWDk0LAorICBIVF9NT0RFTF9CYXNpY0JyYWlsbGVQbHVzNjQgPSAwWDk2LAorICBIVF9NT0RFTF9CYXNpY0JyYWlsbGVQbHVzODAgPSAwWDk3LAorICBIVF9NT0RFTF9CYXNpY0JyYWlsbGVQbHVzNDggPSAwWDlBLAorICBIVF9NT0RFTF9CYXNpY0JyYWlsbGVQbHVzODQgPSAwWDlDLAorICBIVF9NT0RFTF9BY3RpdmF0b3IgPSAwWEE0Cit9IEhUX01vZGVsSWRlbnRpZmllcjsKKworLyogUGFja2V0IGRlZmluaXRpb24gKi8KK3R5cGVkZWYgZW51bSB7CisgIEhUX1BLVF9CcmFpbGxlICA9IDBYMDEsCisgIEhUX1BLVF9FeHRlbmRlZCA9IDBYNzksCisgIEhUX1BLVF9OQUsgICAgICA9IDBYN0QsCisgIEhUX1BLVF9BQ0sgICAgICA9IDBYN0UsCisgIEhUX1BLVF9PSyAgICAgICA9IDBYRkUsCisgIEhUX1BLVF9SZXNldCAgICA9IDBYRkYKK30gSFRfUGFja2V0VHlwZTsKKwordHlwZWRlZiBlbnVtIHsKKyAgSFRfRVhUUEtUX0JyYWlsbGUgICAgICAgICAgICAgICA9IEhUX1BLVF9CcmFpbGxlLAorICBIVF9FWFRQS1RfS2V5ICAgICAgICAgICAgICAgICAgID0gMFgwNCwKKyAgSFRfRVhUUEtUX0NvbmZpcm1hdGlvbiAgICAgICAgICA9IDBYMDcsCisgIEhUX0VYVFBLVF9TY2FuY29kZSAgICAgICAgICAgICAgPSAwWDA5LAorICBIVF9FWFRQS1RfUGluZyAgICAgICAgICAgICAgICAgID0gMFgxOSwKKyAgSFRfRVhUUEtUX0dldFNlcmlhbE51bWJlciAgICAgICA9IDBYNDEsCisgIEhUX0VYVFBLVF9TZXRSVEMgICAgICAgICAgICAgICAgPSAwWDQ0LAorICBIVF9FWFRQS1RfR2V0UlRDICAgICAgICAgICAgICAgID0gMFg0NSwKKyAgSFRfRVhUUEtUX0dldEJsdWV0b290aFBJTiAgICAgICA9IDBYNDcsCisgIEhUX0VYVFBLVF9TZXRBdGNNb2RlICAgICAgICAgICAgPSAwWDUwLAorICBIVF9FWFRQS1RfU2V0QXRjU2Vuc2l0aXZpdHkgICAgID0gMFg1MSwKKyAgSFRfRVhUUEtUX0F0Y0luZm8gICAgICAgICAgICAgICA9IDBYNTIsCisgIEhUX0VYVFBLVF9TZXRBdGNTZW5zaXRpdml0eTIgICAgPSAwWDUzLAorICBIVF9FWFRQS1RfR2V0QXRjU2Vuc2l0aXZpdHkyICAgID0gMFg1NCwKKyAgSFRfRVhUUEtUX1JlYWRpbmdQb3NpdGlvbiAgICAgICA9IDBYNTUsCisgIEhUX0VYVFBLVF9TZXRGaXJtbmVzcyAgICAgICAgICAgPSAwWDYwLAorICBIVF9FWFRQS1RfR2V0RmlybW5lc3MgICAgICAgICAgID0gMFg2MSwKKyAgSFRfRVhUUEtUX0dldFByb3RvY29sUHJvcGVydGllcyA9IDBYQzEsCisgIEhUX0VYVFBLVF9HZXRGaXJtd2FyZVZlcnNpb24gICAgPSAwWEMyCit9IEhUX0V4dGVuZGVkUGFja2V0VHlwZTsKKwordHlwZWRlZiBzdHJ1Y3QgeworICB1aW50MTZfdCB5ZWFyOworICB1aW50OF90IG1vbnRoOworICB1aW50OF90IGRheTsKKyAgdWludDhfdCBob3VyOworICB1aW50OF90IG1pbnV0ZTsKKyAgdWludDhfdCBzZWNvbmQ7Cit9IFBBQ0tFRCBIVF9EYXRlVGltZTsKKwordHlwZWRlZiBlbnVtIHsKKyAgSFRfTUNBUF9yZXFCYXR0ZXJ5TWFuYWdlbWVudEluZm9ybWF0aW9uICA9IDBYMDAxLAorICBIVF9NQ0FQX0JhdHRlcnlDYWxpYnJhdGlvbkFuZFRlc3RNb2RlICAgID0gMFgwMDIsCisgIEhUX01DQVBfZ2V0UmVhbFRpbWVDbG9jayAgICAgICAgICAgICAgICAgPSAwWDAwNCwKKyAgSFRfTUNBUF9zZXRSZWFsVGltZUNsb2NrICAgICAgICAgICAgICAgICA9IDBYMDA4LAorICBIVF9NQ0FQX2dldFNlcmlhbE51bWJlciAgICAgICAgICAgICAgICAgID0gMFgwMTAsCisgIEhUX01DQVBfc2V0U2VyaWFsTnVtYmVyICAgICAgICAgICAgICAgICAgPSAwWDAyMCwKKyAgSFRfTUNBUF9nZXRCbHVldG9vdGhQSU4gICAgICAgICAgICAgICAgICA9IDBYMDQwLAorICBIVF9NQ0FQX3NldEJsdWV0b290aFBJTiAgICAgICAgICAgICAgICAgID0gMFgwODAsCisgIEhUX01DQVBfc2V0U2VydmljZUluZm9ybWF0aW9uICAgICAgICAgICAgPSAwWDEwMCwKKyAgSFRfTUNBUF9nZXRTZXJ2aWNlSW5mb3JtYXRpb24gICAgICAgICAgICA9IDBYMjAwCit9IEhUX01haW50YWluYW5jZUNhcGFiaWxpdGllczsKKwordHlwZWRlZiBlbnVtIHsKKyAgSFRfSUNBUF9oYXNJbnRlcm5hbE1vZGUgICAgICAgICAgICAgICA9IDBYMDAxLAorICBIVF9JQ0FQX3VwZE5vcm1hbE1vZGVGaXJtd2FyZSAgICAgICAgID0gMFgwMDIsCisgIEhUX0lDQVBfdXBkQnJhaWxsZVByb2Nlc3NvckZpcm13YXJlICAgPSAwWDAwNCwKKyAgSFRfSUNBUF91cGRVc2JQcm9jZXNzb3JGaXJtd2FyZSAgICAgICA9IDBYMDA4LAorICBIVF9JQ0FQX3VwZEJsdWV0b290aE1vZHVsZUZpcm13YXJlICAgID0gMFgwMTAsCisgIEhUX0lDQVBfZ2V0QnJhaWxsZVN5c3RlbUNvbmZpZ3VyYXRpb24gPSAwWDAyMCwKKyAgSFRfSUNBUF9zZXRCcmFpbGxlU3lzdGVtQ29uZmlndXJhdGlvbiA9IDBYMDQwCit9IEhUX0ludGVybmFsTW9kZUNhcGFiaWxpdGllczsKKwordHlwZWRlZiBzdHJ1Y3QgeworICB1bnNpZ25lZCBjaGFyIG1ham9yVmVyc2lvbjsKKyAgdW5zaWduZWQgY2hhciBtaW5vclZlcnNpb247CisgIHVuc2lnbmVkIGNoYXIgY2VsbENvdW50OworICB1bnNpZ25lZCBjaGFyIGhhc1NlbnNpdGl2aXR5OworICB1bnNpZ25lZCBjaGFyIG1heGltdW1TZW5zaXRpdml0eTsKKyAgdW5zaWduZWQgY2hhciBoYXNGaXJtbmVzczsKKyAgdW5zaWduZWQgY2hhciBtYXhpbXVtRmlybW5lc3M7CisgIEhUX01haW50YWluYW5jZUNhcGFiaWxpdGllcyBtYWludGFpbmFuY2VDYXBhYmlsaXRpZXM6MTY7CisgIEhUX0ludGVybmFsTW9kZUNhcGFiaWxpdGllcyBpbnRlcm5hbE1vZGVDYXBhYmlsaXRpZXM6MTY7Cit9IFBBQ0tFRCBIVF9Qcm90b2NvbFByb3BlcnRpZXM7CisKK3R5cGVkZWYgdW5pb24geworICB1bnNpZ25lZCBjaGFyIGJ5dGVzWzQgKyAwWEZGXTsKKworICBzdHJ1Y3QgeworICAgIHVuc2lnbmVkIGNoYXIgdHlwZTsKKworICAgIHVuaW9uIHsKKyAgICAgIHN0cnVjdCB7CisgICAgICAgIHVuc2lnbmVkIGNoYXIgbW9kZWw7CisgICAgICB9IFBBQ0tFRCBvazsKKworICAgICAgc3RydWN0IHsKKyAgICAgICAgdW5zaWduZWQgY2hhciBtb2RlbDsKKyAgICAgICAgdW5zaWduZWQgY2hhciBsZW5ndGg7CisgICAgICAgIHVuc2lnbmVkIGNoYXIgdHlwZTsKKworICAgICAgICB1bmlvbiB7CisgICAgICAgICAgSFRfRGF0ZVRpbWUgZGF0ZVRpbWU7CisgICAgICAgICAgSFRfUHJvdG9jb2xQcm9wZXJ0aWVzIHByb3RvY29sUHJvcGVydGllczsKKyAgICAgICAgICB1bnNpZ25lZCBjaGFyIGJ5dGVzWzBYRkZdOworICAgICAgICB9IGRhdGE7CisgICAgICB9IFBBQ0tFRCBleHRlbmRlZDsKKyAgICB9IGRhdGE7CisgIH0gUEFDS0VEIGZpZWxkczsKK30gSFRfUGFja2V0OworCit0eXBlZGVmIGVudW0geworICBIVF9LRVlfTm9uZSA9IDAsCisKKyAgSFRfS0VZX0IxID0gMFgwMywKKyAgSFRfS0VZX0IyID0gMFgwNywKKyAgSFRfS0VZX0IzID0gMFgwQiwKKyAgSFRfS0VZX0I0ID0gMFgwRiwKKworICBIVF9LRVlfQjUgPSAwWDEzLAorICBIVF9LRVlfQjYgPSAwWDE3LAorICBIVF9LRVlfQjcgPSAwWDFCLAorICBIVF9LRVlfQjggPSAwWDFGLAorCisgIEhUX0tFWV9VcCA9IDBYMDQsCisgIEhUX0tFWV9Eb3duID0gMFgwOCwKKworICAvKiBLZXlwYWQga2V5cyAoc3RhcjgwIGFuZCBtb2R1bGFyKSAqLworICBIVF9LRVlfQjEyID0gMFgwMSwKKyAgSFRfS0VZX1plcm8gPSAwWDA1LAorICBIVF9LRVlfQjEzID0gMFgwOSwKKyAgSFRfS0VZX0IxNCA9IDBYMEQsCisKKyAgSFRfS0VZX0IxMSA9IDBYMTEsCisgIEhUX0tFWV9PbmUgPSAwWDE1LAorICBIVF9LRVlfVHdvID0gMFgxOSwKKyAgSFRfS0VZX1RocmVlID0gMFgxRCwKKworICBIVF9LRVlfQjEwID0gMFgwMiwKKyAgSFRfS0VZX0ZvdXIgPSAwWDA2LAorICBIVF9LRVlfRml2ZSA9IDBYMEEsCisgIEhUX0tFWV9TaXggPSAwWDBFLAorCisgIEhUX0tFWV9COSA9IDBYMTIsCisgIEhUX0tFWV9TZXZlbiA9IDBYMTYsCisgIEhUX0tFWV9FaWdodCA9IDBYMUEsCisgIEhUX0tFWV9OaW5lID0gMFgxRSwKKworICAvKiBCcmFpbGxlIHdhdmUvc3RhciBrZXlzICovCisgIEhUX0tFWV9Fc2NhcGUgPSAwWDBDLAorICBIVF9LRVlfU3BhY2UgPSAwWDEwLAorICBIVF9LRVlfUmV0dXJuID0gMFgxNCwKKworICAvKiBCcmFpbGxlIHN0YXIga2V5cyAqLworICBIVF9LRVlfU3BhY2VSaWdodCA9IDBYMTgsCisKKyAgLyogQWN0aWxpbm8ga2V5cyAqLworICBIVF9LRVlfSm95c3RpY2tMZWZ0ID0gMFg3NCwKKyAgSFRfS0VZX0pveXN0aWNrUmlnaHQgPSAwWDc1LAorICBIVF9LRVlfSm95c3RpY2tVcCA9IDBYNzYsCisgIEhUX0tFWV9Kb3lzdGlja0Rvd24gPSAwWDc3LAorICBIVF9LRVlfSm95c3RpY2tBY3Rpb24gPSAwWDc4LAorCisgIC8qIEFjdGl2YXRvciBrZXlzICovCisgIEhUX0tFWV9MZWZ0Q2VudGVyID0gMFg3QSwKKyAgSFRfS0VZX1JpZ2h0Q2VudGVyID0gMFg3QiwKKworICAvKiByYW5nZXMgYW5kIGZsYWdzICovCisgIEhUX0tFWV9ST1VUSU5HID0gMFgyMCwKKyAgSFRfS0VZX1NUQVRVUyA9IDBYNzAsCisgIEhUX0tFWV9SRUxFQVNFID0gMFg4MAorfSBIVF9OYXZpZ2F0aW9uS2V5OworCit0eXBlZGVmIGVudW0geworICBIVF9HUlBfTmF2aWdhdGlvbktleXMgPSAwLAorICBIVF9HUlBfUm91dGluZ0tleXMKK30gSFRfS2V5R3JvdXA7CisKKyNlbmRpZiAvKiBCUkxUVFlfSU5DTFVERURfSFRfQlJMREVGUyAqLyAKZGlmZiAtLWdpdCBhL0RyaXZlcnMvQnJhaWxsZS9IZWRvL01ha2VmaWxlLmluIGIvRHJpdmVycy9CcmFpbGxlL0hlZG8vTWFrZWZpbGUuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTkxYjNmZQotLS0gL2Rldi9udWxsCisrKyBiL0RyaXZlcnMvQnJhaWxsZS9IZWRvL01ha2VmaWxlLmluCkBAIC0wLDAgKzEsMjggQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyMgICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisjCisjIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyMKKyMgQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitEUklWRVJfQ09ERSA9IGhkCitEUklWRVJfTkFNRSA9IEhlZG8KK0RSSVZFUl9VU0FHRSA9IFByb2ZpTGluZSwgTW9iaWxMaW5lCitEUklWRVJfVkVSU0lPTiA9IAorRFJJVkVSX0RFVkVMT1BFUlMgPSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+CitpbmNsdWRlICQoU1JDX1RPUClicmFpbGxlLm1rCisKK2JyYWlsbGUuJE86CisJJChDQykgJChCUkxfQ0ZMQUdTKSAtYyAkKFNSQ19ESVIpL2JyYWlsbGUuYworCmRpZmYgLS1naXQgYS9Ecml2ZXJzL0JyYWlsbGUvSGVkby9icmFpbGxlLmMgYi9Ecml2ZXJzL0JyYWlsbGUvSGVkby9icmFpbGxlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjA4NjdiYgotLS0gL2Rldi9udWxsCisrKyBiL0RyaXZlcnMvQnJhaWxsZS9IZWRvL2JyYWlsbGUuYwpAQCAtMCwwICsxLDM5NSBAQAorLyoKKyAqIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisgKiAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisgKgorICogQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKKyNpbmNsdWRlICJwcm9sb2d1ZS5oIgorCisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKworI2luY2x1ZGUgImxvZy5oIgorCisjaW5jbHVkZSAiYnJsX2RyaXZlci5oIgorI2luY2x1ZGUgImJybGRlZnMtaGQuaCIKKworI2RlZmluZSBQUk9CRV9SRVRSWV9MSU1JVCAyCisjZGVmaW5lIFBST0JFX0lOUFVUX1RJTUVPVVQgMTAwMAorCisjZGVmaW5lIE1BWElNVU1fUkVTUE9OU0VfU0laRSAzCisjZGVmaW5lIE1BWElNVU1fVEVYVF9DRUxMX0NPVU5UIDgwCisjZGVmaW5lIE1BWElNVU1fU1RBVFVTX0NFTExfQ09VTlQgNAorCitCRUdJTl9LRVlfTkFNRV9UQUJMRShwZmwpCisgIEtFWV9OQU1FX0VOVFJZKEhEX1BGTF9LMSwgIksxIiksCisgIEtFWV9OQU1FX0VOVFJZKEhEX1BGTF9LMiwgIksyIiksCisgIEtFWV9OQU1FX0VOVFJZKEhEX1BGTF9LMywgIkszIiksCisKKyAgS0VZX05BTUVfRU5UUlkoSERfUEZMX0IxLCAiQjEiKSwKKyAgS0VZX05BTUVfRU5UUlkoSERfUEZMX0IyLCAiQjIiKSwKKyAgS0VZX05BTUVfRU5UUlkoSERfUEZMX0IzLCAiQjMiKSwKKyAgS0VZX05BTUVfRU5UUlkoSERfUEZMX0I0LCAiQjQiKSwKKyAgS0VZX05BTUVfRU5UUlkoSERfUEZMX0I1LCAiQjUiKSwKKyAgS0VZX05BTUVfRU5UUlkoSERfUEZMX0I2LCAiQjYiKSwKKyAgS0VZX05BTUVfRU5UUlkoSERfUEZMX0I3LCAiQjciKSwKKyAgS0VZX05BTUVfRU5UUlkoSERfUEZMX0I4LCAiQjgiKSwKK0VORF9LRVlfTkFNRV9UQUJMRQorCitCRUdJTl9LRVlfTkFNRV9UQUJMRShtYmwpCisgIEtFWV9OQU1FX0VOVFJZKEhEX01CTF9CMSwgIkIxIiksCisgIEtFWV9OQU1FX0VOVFJZKEhEX01CTF9CMiwgIkIyIiksCisgIEtFWV9OQU1FX0VOVFJZKEhEX01CTF9CMywgIkIzIiksCisKKyAgS0VZX05BTUVfRU5UUlkoSERfTUJMX0I0LCAiQjQiKSwKKyAgS0VZX05BTUVfRU5UUlkoSERfTUJMX0I1LCAiQjUiKSwKKyAgS0VZX05BTUVfRU5UUlkoSERfTUJMX0I2LCAiQjYiKSwKKworICBLRVlfTkFNRV9FTlRSWShIRF9NQkxfSzEsICJLMSIpLAorICBLRVlfTkFNRV9FTlRSWShIRF9NQkxfSzIsICJLMiIpLAorICBLRVlfTkFNRV9FTlRSWShIRF9NQkxfSzMsICJLMyIpLAorRU5EX0tFWV9OQU1FX1RBQkxFCisKK0JFR0lOX0tFWV9OQU1FX1RBQkxFKHJvdXRpbmcpCisgIEtFWV9HUk9VUF9FTlRSWShIRF9HUlBfUm91dGluZ0tleXMsICJSb3V0aW5nS2V5IiksCitFTkRfS0VZX05BTUVfVEFCTEUKKworQkVHSU5fS0VZX05BTUVfVEFCTEVTKHBmbCkKKyAgS0VZX05BTUVfVEFCTEUocGZsKSwKKyAgS0VZX05BTUVfVEFCTEUocm91dGluZyksCitFTkRfS0VZX05BTUVfVEFCTEVTCisKK0JFR0lOX0tFWV9OQU1FX1RBQkxFUyhtYmwpCisgIEtFWV9OQU1FX1RBQkxFKG1ibCksCisgIEtFWV9OQU1FX1RBQkxFKHJvdXRpbmcpLAorRU5EX0tFWV9OQU1FX1RBQkxFUworCitERUZJTkVfS0VZX1RBQkxFKHBmbCkKK0RFRklORV9LRVlfVEFCTEUobWJsKQorCitCRUdJTl9LRVlfVEFCTEVfTElTVAorICAmS0VZX1RBQkxFX0RFRklOSVRJT04ocGZsKSwKKyAgJktFWV9UQUJMRV9ERUZJTklUSU9OKG1ibCksCitFTkRfS0VZX1RBQkxFX0xJU1QKKwordHlwZWRlZiBpbnQgS2V5c1BhY2tldEludGVycHJldGVyIChCcmFpbGxlRGlzcGxheSAqYnJsLCBjb25zdCB1bnNpZ25lZCBjaGFyICpwYWNrZXQpOworCit0eXBlZGVmIHN0cnVjdCB7CisgIGNvbnN0IGNoYXIgKm1vZGVsTmFtZTsKKyAgY29uc3QgS2V5VGFibGVEZWZpbml0aW9uICprZXlUYWJsZURlZmluaXRpb247CisKKyAgQnJhaWxsZVBhY2tldFZlcmlmaWVyICp2ZXJpZnlQYWNrZXQ7CisgIEtleXNQYWNrZXRJbnRlcnByZXRlciAqaW50ZXJwcmV0S2V5c1BhY2tldDsKKworICB1bnNpZ25lZCBjaGFyIHRleHRDZWxsQ291bnQ7CisgIHVuc2lnbmVkIGNoYXIgc3RhdHVzQ2VsbENvdW50OworCisgIHVuc2lnbmVkIGNoYXIgZmlyc3RSb3V0aW5nS2V5OworICB1bnNpZ25lZCBjaGFyIGFja25vd2xlZGdlbWVudFJlc3BvbnNlOworfSBNb2RlbEVudHJ5OworCitzdHJ1Y3QgQnJhaWxsZURhdGFTdHJ1Y3QgeworICBjb25zdCBNb2RlbEVudHJ5ICptb2RlbDsKKworICB1bnNpZ25lZCBjaGFyIGZvcmNlUmV3cml0ZTsKKyAgdW5zaWduZWQgY2hhciB0ZXh0Q2VsbHNbTUFYSU1VTV9URVhUX0NFTExfQ09VTlRdOworICB1bnNpZ25lZCBjaGFyIHN0YXR1c0NlbGxzW01BWElNVU1fU1RBVFVTX0NFTExfQ09VTlRdOworCisgIEtleU51bWJlclNldCBuYXZpZ2F0aW9uS2V5czsKK307CisKK3N0YXRpYyBCcmFpbGxlUGFja2V0VmVyaWZpZXJSZXN1bHQKK3ZlcmlmeVBhY2tldF9Qcm9maUxpbmUgKAorICBCcmFpbGxlRGlzcGxheSAqYnJsLAorICB1bnNpZ25lZCBjaGFyICpieXRlcywgc2l6ZV90IHNpemUsCisgIHNpemVfdCAqbGVuZ3RoLCB2b2lkICpkYXRhCispIHsKKyAgc3dpdGNoIChzaXplKSB7CisgICAgY2FzZSAxOgorICAgICAgKmxlbmd0aCA9IDE7CisgICAgICBicmVhazsKKworICAgIGRlZmF1bHQ6CisgICAgICBicmVhazsKKyAgfQorCisgIHJldHVybiBCUkxfUFZSX0lOQ0xVREU7Cit9CisKK3N0YXRpYyBpbnQKK2ludGVycHJldEtleXNQYWNrZXRfUHJvZmlMaW5lIChCcmFpbGxlRGlzcGxheSAqYnJsLCBjb25zdCB1bnNpZ25lZCBjaGFyICpwYWNrZXQpIHsKKyAgY29uc3QgdW5zaWduZWQgY2hhciBjb2RlID0gcGFja2V0WzBdOworICBjb25zdCB1bnNpZ25lZCBjaGFyIHJlbGVhc2UgPSAwWDgwOworICBjb25zdCBpbnQgcHJlc3MgPSAhKGNvZGUgJiByZWxlYXNlKTsKKyAgdW5zaWduZWQgY2hhciBrZXkgPSBjb2RlICYgfnJlbGVhc2U7CisgIEtleUdyb3VwIGdyb3VwOworCisgIGlmIChrZXkgPCBicmwtPmRhdGEtPm1vZGVsLT5maXJzdFJvdXRpbmdLZXkpIHsKKyAgICBncm91cCA9IEhEX0dSUF9OYXZpZ2F0aW9uS2V5czsKKyAgfSBlbHNlIGlmIChrZXkgPCAoYnJsLT5kYXRhLT5tb2RlbC0+Zmlyc3RSb3V0aW5nS2V5ICsgYnJsLT50ZXh0Q29sdW1ucykpIHsKKyAgICBncm91cCA9IEhEX0dSUF9Sb3V0aW5nS2V5czsKKyAgICBrZXkgLT0gYnJsLT5kYXRhLT5tb2RlbC0+Zmlyc3RSb3V0aW5nS2V5OworICB9IGVsc2UgeworICAgIHJldHVybiAwOworICB9CisKKyAgZW5xdWV1ZUtleUV2ZW50KGJybCwgZ3JvdXAsIGtleSwgcHJlc3MpOworICByZXR1cm4gMTsKK30KKworc3RhdGljIGNvbnN0IE1vZGVsRW50cnkgbW9kZWxFbnRyeV9Qcm9maUxpbmUgPSB7CisgIC5tb2RlbE5hbWUgPSAiUHJvZmlMaW5lIFVTQiIsCisgIC5rZXlUYWJsZURlZmluaXRpb24gPSAmS0VZX1RBQkxFX0RFRklOSVRJT04ocGZsKSwKKworICAudmVyaWZ5UGFja2V0ID0gdmVyaWZ5UGFja2V0X1Byb2ZpTGluZSwKKyAgLmludGVycHJldEtleXNQYWNrZXQgPSBpbnRlcnByZXRLZXlzUGFja2V0X1Byb2ZpTGluZSwKKworICAudGV4dENlbGxDb3VudCA9IDgwLAorICAuc3RhdHVzQ2VsbENvdW50ID0gNCwKKworICAuZmlyc3RSb3V0aW5nS2V5ID0gMFgyMCwKKyAgLmFja25vd2xlZGdlbWVudFJlc3BvbnNlID0gMFg3RQorfTsKKworc3RhdGljIEJyYWlsbGVQYWNrZXRWZXJpZmllclJlc3VsdAordmVyaWZ5UGFja2V0X01vYmlsTGluZSAoCisgIEJyYWlsbGVEaXNwbGF5ICpicmwsCisgIHVuc2lnbmVkIGNoYXIgKmJ5dGVzLCBzaXplX3Qgc2l6ZSwKKyAgc2l6ZV90ICpsZW5ndGgsIHZvaWQgKmRhdGEKKykgeworICBvZmZfdCBpbmRleCA9IHNpemUgLSAxOworICB1bnNpZ25lZCBjaGFyIGJ5dGUgPSBieXRlc1tpbmRleF07CisKKyAgaWYgKChieXRlID4+IDQpID09IGluZGV4KSB7CisgICAgaWYgKGluZGV4ID09IDApICpsZW5ndGggPSAzOworICB9IGVsc2UgaWYgKHNpemUgPT0gMSkgeworICAgICpsZW5ndGggPSAxOworICB9IGVsc2UgeworICAgIHJldHVybiBCUkxfUFZSX0lOVkFMSUQ7CisgIH0KKworICByZXR1cm4gQlJMX1BWUl9JTkNMVURFOworfQorCitzdGF0aWMgaW50CitpbnRlcnByZXRLZXlzUGFja2V0X01vYmlsTGluZSAoQnJhaWxsZURpc3BsYXkgKmJybCwgY29uc3QgdW5zaWduZWQgY2hhciAqcGFja2V0KSB7CisgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ5dGUgPSBwYWNrZXQ7CisKKyAgaWYgKCEoKmJ5dGUgPj4gNCkpIHsKKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyICplbmQgPSBwYWNrZXQgKyAzOworICAgIEtleU51bWJlclNldCBrZXlzID0gMDsKKyAgICB1bnNpZ25lZCBjaGFyIHNoaWZ0ID0gMDsKKworICAgIHdoaWxlIChieXRlIDwgZW5kKSB7CisgICAgICBrZXlzIHw9ICgqYnl0ZSsrICYgMFhGKSA8PCBzaGlmdDsKKyAgICAgIHNoaWZ0ICs9IDQ7CisgICAgfQorCisgICAgZW5xdWV1ZVVwZGF0ZWRLZXlzKGJybCwga2V5cywgJmJybC0+ZGF0YS0+bmF2aWdhdGlvbktleXMsCisgICAgICAgICAgICAgICAgICAgICAgIEhEX0dSUF9OYXZpZ2F0aW9uS2V5cywgMCk7CisgICAgcmV0dXJuIDE7CisgIH0KKworICBpZiAoKmJ5dGUgPj0gYnJsLT5kYXRhLT5tb2RlbC0+Zmlyc3RSb3V0aW5nS2V5KSB7CisgICAgdW5zaWduZWQgY2hhciBrZXkgPSAqYnl0ZSAtIGJybC0+ZGF0YS0+bW9kZWwtPmZpcnN0Um91dGluZ0tleTsKKworICAgIGlmIChrZXkgPCBicmwtPnRleHRDb2x1bW5zKSB7CisgICAgICBlbnF1ZXVlS2V5KGJybCwgSERfR1JQX1JvdXRpbmdLZXlzLCBrZXkpOworICAgICAgcmV0dXJuIDE7CisgICAgfQorICB9CisKKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBNb2RlbEVudHJ5IG1vZGVsRW50cnlfTW9iaWxMaW5lID0geworICAubW9kZWxOYW1lID0gIk1vYmlsTGluZSBVU0IiLAorICAua2V5VGFibGVEZWZpbml0aW9uID0gJktFWV9UQUJMRV9ERUZJTklUSU9OKG1ibCksCisKKyAgLnZlcmlmeVBhY2tldCA9IHZlcmlmeVBhY2tldF9Nb2JpbExpbmUsCisgIC5pbnRlcnByZXRLZXlzUGFja2V0ID0gaW50ZXJwcmV0S2V5c1BhY2tldF9Nb2JpbExpbmUsCisKKyAgLnRleHRDZWxsQ291bnQgPSA0MCwKKyAgLnN0YXR1c0NlbGxDb3VudCA9IDIsCisKKyAgLmZpcnN0Um91dGluZ0tleSA9IDBYNDAsCisgIC5hY2tub3dsZWRnZW1lbnRSZXNwb25zZSA9IDBYMzAKK307CisKK3N0YXRpYyBzaXplX3QKK3JlYWRQYWNrZXQgKEJyYWlsbGVEaXNwbGF5ICpicmwsIHZvaWQgKnBhY2tldCwgc2l6ZV90IHNpemUpIHsKKyAgcmV0dXJuIHJlYWRCcmFpbGxlUGFja2V0KGJybCwgTlVMTCwgcGFja2V0LCBzaXplLCBicmwtPmRhdGEtPm1vZGVsLT52ZXJpZnlQYWNrZXQsIE5VTEwpOworfQorCitzdGF0aWMgaW50Citjb25uZWN0UmVzb3VyY2UgKEJyYWlsbGVEaXNwbGF5ICpicmwsIGNvbnN0IGNoYXIgKmlkZW50aWZpZXIpIHsKKyAgc3RhdGljIGNvbnN0IFNlcmlhbFBhcmFtZXRlcnMgc2VyaWFsUGFyYW1ldGVyc19Qcm9maUxpbmUgPSB7CisgICAgU0VSSUFMX0RFRkFVTFRfUEFSQU1FVEVSUywKKyAgICAuYmF1ZCA9IDE5MjAwLAorICAgIC5wYXJpdHkgPSBTRVJJQUxfUEFSSVRZX09ERAorICB9OworCisgIHN0YXRpYyBjb25zdCBTZXJpYWxQYXJhbWV0ZXJzIHNlcmlhbFBhcmFtZXRlcnNfTW9iaWxMaW5lID0geworICAgIFNFUklBTF9ERUZBVUxUX1BBUkFNRVRFUlMsCisgICAgLmJhdWQgPSA5NjAwLAorICAgIC5wYXJpdHkgPSBTRVJJQUxfUEFSSVRZX09ERAorICB9OworCisgIEJFR0lOX1VTQl9TVFJJTkdfTElTVCh1c2JNYW51ZmFjdHVyZXJzXzA0MDNfNjAwMSkKKyAgICAiSGVkbyBSZWhhIFRlY2huaWsgR21iSCIsCisgIEVORF9VU0JfU1RSSU5HX0xJU1QKKworICBCRUdJTl9VU0JfQ0hBTk5FTF9ERUZJTklUSU9OUworICAgIHsgLyogUHJvZmlMaW5lICovCisgICAgICAudmVuZG9yPTBYMDQwMywgLnByb2R1Y3Q9MFhERTU5LAorICAgICAgLmNvbmZpZ3VyYXRpb249MSwgLmludGVyZmFjZT0wLCAuYWx0ZXJuYXRpdmU9MCwKKyAgICAgIC5pbnB1dEVuZHBvaW50PTEsIC5vdXRwdXRFbmRwb2ludD0yLAorICAgICAgLnNlcmlhbCA9ICZzZXJpYWxQYXJhbWV0ZXJzX1Byb2ZpTGluZSwKKyAgICAgIC5kYXRhID0gJm1vZGVsRW50cnlfUHJvZmlMaW5lCisgICAgfSwKKworICAgIHsgLyogTW9iaWxMaW5lICovCisgICAgICAudmVuZG9yPTBYMDQwMywgLnByb2R1Y3Q9MFhERTU4LAorICAgICAgLmNvbmZpZ3VyYXRpb249MSwgLmludGVyZmFjZT0wLCAuYWx0ZXJuYXRpdmU9MCwKKyAgICAgIC5pbnB1dEVuZHBvaW50PTEsIC5vdXRwdXRFbmRwb2ludD0yLAorICAgICAgLnNlcmlhbCA9ICZzZXJpYWxQYXJhbWV0ZXJzX01vYmlsTGluZSwKKyAgICAgIC5kYXRhID0gJm1vZGVsRW50cnlfTW9iaWxMaW5lCisgICAgfSwKKworICAgIHsgLyogTW9iaWxMaW5lICovCisgICAgICAudmVuZG9yPTBYMDQwMywgLnByb2R1Y3Q9MFg2MDAxLAorICAgICAgLm1hbnVmYWN0dXJlcnMgPSB1c2JNYW51ZmFjdHVyZXJzXzA0MDNfNjAwMSwKKyAgICAgIC5jb25maWd1cmF0aW9uPTEsIC5pbnRlcmZhY2U9MCwgLmFsdGVybmF0aXZlPTAsCisgICAgICAuaW5wdXRFbmRwb2ludD0xLCAub3V0cHV0RW5kcG9pbnQ9MiwKKyAgICAgIC5zZXJpYWwgPSAmc2VyaWFsUGFyYW1ldGVyc19Nb2JpbExpbmUsCisgICAgICAuZGF0YSA9ICZtb2RlbEVudHJ5X01vYmlsTGluZQorICAgIH0sCisgIEVORF9VU0JfQ0hBTk5FTF9ERUZJTklUSU9OUworCisgIEdpb0Rlc2NyaXB0b3IgZGVzY3JpcHRvcjsKKyAgZ2lvSW5pdGlhbGl6ZURlc2NyaXB0b3IoJmRlc2NyaXB0b3IpOworCisgIGRlc2NyaXB0b3IudXNiLmNoYW5uZWxEZWZpbml0aW9ucyA9IHVzYkNoYW5uZWxEZWZpbml0aW9uczsKKworICBpZiAoY29ubmVjdEJyYWlsbGVSZXNvdXJjZShicmwsIGlkZW50aWZpZXIsICZkZXNjcmlwdG9yLCBOVUxMKSkgeworICAgIHJldHVybiAxOworICB9CisKKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkCitkaXNjb25uZWN0UmVzb3VyY2UgKEJyYWlsbGVEaXNwbGF5ICpicmwpIHsKKyAgZGlzY29ubmVjdEJyYWlsbGVSZXNvdXJjZShicmwsIE5VTEwpOworfQorCitzdGF0aWMgaW50Cit3cml0ZUNlbGxzIChCcmFpbGxlRGlzcGxheSAqYnJsLCBpbnQgd2FpdCkgeworICB1bnNpZ25lZCBjaGFyIHBhY2tldFsxICsgYnJsLT5kYXRhLT5tb2RlbC0+c3RhdHVzQ2VsbENvdW50ICsgYnJsLT5kYXRhLT5tb2RlbC0+dGV4dENlbGxDb3VudF07CisgIHVuc2lnbmVkIGNoYXIgKmJ5dGUgPSBwYWNrZXQ7CisKKyAgKmJ5dGUrKyA9IEhEX1JFUV9XUklURV9DRUxMUzsKKyAgYnl0ZSA9IG1lbXBjcHkoYnl0ZSwgYnJsLT5kYXRhLT5zdGF0dXNDZWxscywgYnJsLT5kYXRhLT5tb2RlbC0+c3RhdHVzQ2VsbENvdW50KTsKKyAgYnl0ZSA9IHRyYW5zbGF0ZU91dHB1dENlbGxzKGJ5dGUsIGJybC0+ZGF0YS0+dGV4dENlbGxzLCBicmwtPmRhdGEtPm1vZGVsLT50ZXh0Q2VsbENvdW50KTsKKworICB7CisgICAgc2l6ZV90IGNvdW50ID0gYnl0ZSAtIHBhY2tldDsKKworICAgIGlmICh3YWl0KSByZXR1cm4gd3JpdGVCcmFpbGxlTWVzc2FnZShicmwsIE5VTEwsIDAsIHBhY2tldCwgY291bnQpOworICAgIHJldHVybiB3cml0ZUJyYWlsbGVQYWNrZXQoYnJsLCBOVUxMLCBwYWNrZXQsIGNvdW50KTsKKyAgfQorfQorCitzdGF0aWMgaW50Cit3cml0ZUlkZW50aWZ5UmVxdWVzdCAoQnJhaWxsZURpc3BsYXkgKmJybCkgeworICBtZW1zZXQoYnJsLT5kYXRhLT50ZXh0Q2VsbHMsIDAsIHNpemVvZihicmwtPmRhdGEtPnRleHRDZWxscykpOworICBtZW1zZXQoYnJsLT5kYXRhLT5zdGF0dXNDZWxscywgMCwgc2l6ZW9mKGJybC0+ZGF0YS0+c3RhdHVzQ2VsbHMpKTsKKyAgcmV0dXJuIHdyaXRlQ2VsbHMoYnJsLCAwKTsKK30KKworc3RhdGljIEJyYWlsbGVSZXNwb25zZVJlc3VsdAoraXNJZGVudGl0eVJlc3BvbnNlIChCcmFpbGxlRGlzcGxheSAqYnJsLCBjb25zdCB2b2lkICpwYWNrZXQsIHNpemVfdCBzaXplKSB7CisgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ5dGVzID0gcGFja2V0OworCisgIHJldHVybiAoYnl0ZXNbMF0gPT0gYnJsLT5kYXRhLT5tb2RlbC0+YWNrbm93bGVkZ2VtZW50UmVzcG9uc2UpPyBCUkxfUlNQX0RPTkU6IEJSTF9SU1BfVU5FWFBFQ1RFRDsKK30KKworc3RhdGljIGludAorYnJsX2NvbnN0cnVjdCAoQnJhaWxsZURpc3BsYXkgKmJybCwgY2hhciAqKnBhcmFtZXRlcnMsIGNvbnN0IGNoYXIgKmRldmljZSkgeworICBpZiAoKGJybC0+ZGF0YSA9IG1hbGxvYyhzaXplb2YoKmJybC0+ZGF0YSkpKSkgeworICAgIG1lbXNldChicmwtPmRhdGEsIDAsIHNpemVvZigqYnJsLT5kYXRhKSk7CisKKyAgICBpZiAoY29ubmVjdFJlc291cmNlKGJybCwgZGV2aWNlKSkgeworICAgICAgdW5zaWduZWQgY2hhciByZXNwb25zZVtNQVhJTVVNX1JFU1BPTlNFX1NJWkVdOworCisgICAgICBicmwtPmRhdGEtPm1vZGVsID0gZ2lvR2V0QXBwbGljYXRpb25EYXRhKGJybC0+Z2lvRW5kcG9pbnQpOworICAgICAgYnJsLT50ZXh0Q29sdW1ucyA9IGJybC0+ZGF0YS0+bW9kZWwtPnRleHRDZWxsQ291bnQ7CisgICAgICBtYWtlT3V0cHV0VGFibGUoZG90c1RhYmxlX0lTTzExNTQ4XzEpOworCisgICAgICBpZiAocHJvYmVCcmFpbGxlRGlzcGxheShicmwsIFBST0JFX1JFVFJZX0xJTUlULCBOVUxMLCBQUk9CRV9JTlBVVF9USU1FT1VULAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVJZGVudGlmeVJlcXVlc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkUGFja2V0LCAmcmVzcG9uc2UsIHNpemVvZihyZXNwb25zZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc0lkZW50aXR5UmVzcG9uc2UpKSB7CisgICAgICAgIHNldEJyYWlsbGVLZXlUYWJsZShicmwsIGJybC0+ZGF0YS0+bW9kZWwtPmtleVRhYmxlRGVmaW5pdGlvbik7CisKKyAgICAgICAgYnJsLT5kYXRhLT5mb3JjZVJld3JpdGUgPSAxOworICAgICAgICByZXR1cm4gMTsKKyAgICAgIH0KKworICAgICAgZGlzY29ubmVjdFJlc291cmNlKGJybCk7CisgICAgfQorCisgICAgZnJlZShicmwtPmRhdGEpOworICB9IGVsc2UgeworICAgIGxvZ01hbGxvY0Vycm9yKCk7CisgIH0KKworICByZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQKK2JybF9kZXN0cnVjdCAoQnJhaWxsZURpc3BsYXkgKmJybCkgeworICBkaXNjb25uZWN0UmVzb3VyY2UoYnJsKTsKKworICBpZiAoYnJsLT5kYXRhKSB7CisgICAgZnJlZShicmwtPmRhdGEpOworICAgIGJybC0+ZGF0YSA9IE5VTEw7CisgIH0KK30KKworc3RhdGljIGludAorYnJsX3dyaXRlV2luZG93IChCcmFpbGxlRGlzcGxheSAqYnJsLCBjb25zdCB3Y2hhcl90ICp0ZXh0KSB7CisgIGlmIChjZWxsc0hhdmVDaGFuZ2VkKGJybC0+ZGF0YS0+dGV4dENlbGxzLCBicmwtPmJ1ZmZlciwgYnJsLT50ZXh0Q29sdW1ucywgTlVMTCwgTlVMTCwgJmJybC0+ZGF0YS0+Zm9yY2VSZXdyaXRlKSkgeworICAgIGlmICghd3JpdGVDZWxscyhicmwsIDEpKSByZXR1cm4gMDsKKyAgfQorCisgIHJldHVybiAxOworfQorCitzdGF0aWMgaW50CiticmxfcmVhZENvbW1hbmQgKEJyYWlsbGVEaXNwbGF5ICpicmwsIEtleVRhYmxlQ29tbWFuZENvbnRleHQgY29udGV4dCkgeworICB1bnNpZ25lZCBjaGFyIHBhY2tldFtNQVhJTVVNX1JFU1BPTlNFX1NJWkVdOworICBzaXplX3Qgc2l6ZTsKKworICB3aGlsZSAoKHNpemUgPSByZWFkUGFja2V0KGJybCwgcGFja2V0LCBzaXplb2YocGFja2V0KSkpKSB7CisgICAgaWYgKHBhY2tldFswXSA9PSBicmwtPmRhdGEtPm1vZGVsLT5hY2tub3dsZWRnZW1lbnRSZXNwb25zZSkgeworICAgICAgYWNrbm93bGVkZ2VCcmFpbGxlTWVzc2FnZShicmwpOworICAgIH0gZWxzZSBpZiAoIWJybC0+ZGF0YS0+bW9kZWwtPmludGVycHJldEtleXNQYWNrZXQoYnJsLCBwYWNrZXQpKSB7CisgICAgICBsb2dVbmV4cGVjdGVkUGFja2V0KHBhY2tldCwgc2l6ZSk7CisgICAgfQorICB9CisKKyAgcmV0dXJuIChlcnJubyA9PSBFQUdBSU4pPyBFT0Y6IEJSTF9DTURfUkVTVEFSVEJSTDsKK30KZGlmZiAtLWdpdCBhL0RyaXZlcnMvQnJhaWxsZS9IZWRvL2JybGRlZnMtaGQuaCBiL0RyaXZlcnMvQnJhaWxsZS9IZWRvL2JybGRlZnMtaGQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMGVmMmIzCi0tLSAvZGV2L251bGwKKysrIGIvRHJpdmVycy9CcmFpbGxlL0hlZG8vYnJsZGVmcy1oZC5oCkBAIC0wLDAgKzEsNjAgQEAKKy8qCisgKiBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorICogICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorICoKKyAqIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorICoKKyAqIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyAqLworCisjaWZuZGVmIEJSTFRUWV9JTkNMVURFRF9IRF9CUkxERUZTCisjZGVmaW5lIEJSTFRUWV9JTkNMVURFRF9IRF9CUkxERUZTCisKK3R5cGVkZWYgZW51bSB7CisgIEhEX1JFUV9XUklURV9DRUxMUyA9IDBYMDEKK30gSERfUmVxdWVzdENvZGU7CisKK3R5cGVkZWYgZW51bSB7CisgIEhEX1BGTF9LMSA9IDBYMDQsCisgIEhEX1BGTF9LMiA9IDBYMDMsCisgIEhEX1BGTF9LMyA9IDBYMDgsCisKKyAgSERfUEZMX0IxID0gMFgwMywKKyAgSERfUEZMX0IyID0gMFgwNywKKyAgSERfUEZMX0IzID0gMFgwQiwKKyAgSERfUEZMX0I0ID0gMFgwRiwKKyAgSERfUEZMX0I1ID0gMFgxMywKKyAgSERfUEZMX0I2ID0gMFgxNywKKyAgSERfUEZMX0I3ID0gMFgxQiwKKyAgSERfUEZMX0I4ID0gMFgxRgorfSBIRF9LZXlDb2RlX1Byb2ZpTGluZTsKKwordHlwZWRlZiBlbnVtIHsKKyAgSERfTUJMX0IxID0gIDAsCisgIEhEX01CTF9CMiA9ICAxLAorICBIRF9NQkxfQjMgPSAgMiwKKworICBIRF9NQkxfQjQgPSAgNCwKKyAgSERfTUJMX0I1ID0gIDUsCisgIEhEX01CTF9CNiA9ICA2LAorCisgIEhEX01CTF9LMSA9ICA4LAorICBIRF9NQkxfSzIgPSAgOSwKKyAgSERfTUJMX0szID0gMTAKK30gSERfS2V5Q29kZV9Nb2JpbExpbmU7CisKK3R5cGVkZWYgZW51bSB7CisgIEhEX0dSUF9OYXZpZ2F0aW9uS2V5cywKKyAgSERfR1JQX1JvdXRpbmdLZXlzCit9IEhEX0tleUdyb3VwOworCisjZW5kaWYgLyogQlJMVFRZX0lOQ0xVREVEX0hEX0JSTERFRlMgKi8gCmRpZmYgLS1naXQgYS9Ecml2ZXJzL0JyYWlsbGUvSHVtYW5XYXJlL01ha2VmaWxlLmluIGIvRHJpdmVycy9CcmFpbGxlL0h1bWFuV2FyZS9NYWtlZmlsZS5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMTA0NmE2Ci0tLSAvZGV2L251bGwKKysrIGIvRHJpdmVycy9CcmFpbGxlL0h1bWFuV2FyZS9NYWtlZmlsZS5pbgpAQCAtMCwwICsxLDI4IEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisjICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorIworIyBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisjCisjIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisjCisjIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyMgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorIyBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyMKKyMgV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworIworIyBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworRFJJVkVSX0NPREUgPSBodworRFJJVkVSX05BTUUgPSBIdW1hbldhcmUKK0RSSVZFUl9VU0FHRSA9IEJyYWlsbGlhbnQgQkkgMTQvMzIvNDAsIEJyYWlsbGlhbnQgQkkgMjBYLzQwWCwgQnJhaWxsaWFudCBCIDgwLCBCcmFpbGxlTm90ZSBUb3VjaCwgQnJhaWxsZU9uZSwgQVBIIENoYW1lbGVvbiAyMCwgQVBIIE1hbnRpcyBRNDAsIE5MUyBlUmVhZGVyCitEUklWRVJfVkVSU0lPTiA9IAorRFJJVkVSX0RFVkVMT1BFUlMgPSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+CitpbmNsdWRlICQoU1JDX1RPUClicmFpbGxlLm1rCisKK2JyYWlsbGUuJE86CisJJChDQykgJChCUkxfQ0ZMQUdTKSAtYyAkKFNSQ19ESVIpL2JyYWlsbGUuYworCmRpZmYgLS1naXQgYS9Ecml2ZXJzL0JyYWlsbGUvSHVtYW5XYXJlL2JyYWlsbGUuYyBiL0RyaXZlcnMvQnJhaWxsZS9IdW1hbldhcmUvYnJhaWxsZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYxMTUzMTYKLS0tIC9kZXYvbnVsbAorKysgYi9Ecml2ZXJzL0JyYWlsbGUvSHVtYW5XYXJlL2JyYWlsbGUuYwpAQCAtMCwwICsxLDEyNTYgQEAKKy8qCisgKiBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorICogICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorICoKKyAqIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorICoKKyAqIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyAqLworCisjaW5jbHVkZSAicHJvbG9ndWUuaCIKKworI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisKKyNpbmNsdWRlICJsb2cuaCIKKyNpbmNsdWRlICJhc2NpaS5oIgorI2luY2x1ZGUgImJpdG1hc2suaCIKKyNpbmNsdWRlICJhc3luY193YWl0LmgiCisKKyNpbmNsdWRlICJicmxfZHJpdmVyLmgiCisjaW5jbHVkZSAiYnJsZGVmcy1ody5oIgorCitCRUdJTl9LRVlfTkFNRV9UQUJMRShyb3V0aW5nKQorICBLRVlfR1JPVVBfRU5UUlkoSFdfR1JQX1JvdXRpbmdLZXlzLCAiUm91dGluZ0tleSIpLAorRU5EX0tFWV9OQU1FX1RBQkxFCisKK0JFR0lOX0tFWV9OQU1FX1RBQkxFKGJyYWlsbGUpCisgIEtFWV9OQU1FX0VOVFJZKEhXX0tFWV9Eb3QxLCAiRG90MSIpLAorICBLRVlfTkFNRV9FTlRSWShIV19LRVlfRG90MiwgIkRvdDIiKSwKKyAgS0VZX05BTUVfRU5UUlkoSFdfS0VZX0RvdDMsICJEb3QzIiksCisgIEtFWV9OQU1FX0VOVFJZKEhXX0tFWV9Eb3Q0LCAiRG90NCIpLAorICBLRVlfTkFNRV9FTlRSWShIV19LRVlfRG90NSwgIkRvdDUiKSwKKyAgS0VZX05BTUVfRU5UUlkoSFdfS0VZX0RvdDYsICJEb3Q2IiksCisgIEtFWV9OQU1FX0VOVFJZKEhXX0tFWV9Eb3Q3LCAiRG90NyIpLAorICBLRVlfTkFNRV9FTlRSWShIV19LRVlfRG90OCwgIkRvdDgiKSwKKyAgS0VZX05BTUVfRU5UUlkoSFdfS0VZX1NwYWNlLCAiU3BhY2UiKSwKK0VORF9LRVlfTkFNRV9UQUJMRQorCitCRUdJTl9LRVlfTkFNRV9UQUJMRShjb21tYW5kKQorICBLRVlfTkFNRV9FTlRSWShIV19LRVlfQ29tbWFuZDEsICJEaXNwbGF5MSIpLAorICBLRVlfTkFNRV9FTlRSWShIV19LRVlfQ29tbWFuZDIsICJEaXNwbGF5MiIpLAorICBLRVlfTkFNRV9FTlRSWShIV19LRVlfQ29tbWFuZDMsICJEaXNwbGF5MyIpLAorICBLRVlfTkFNRV9FTlRSWShIV19LRVlfQ29tbWFuZDQsICJEaXNwbGF5NCIpLAorICBLRVlfTkFNRV9FTlRSWShIV19LRVlfQ29tbWFuZDUsICJEaXNwbGF5NSIpLAorICBLRVlfTkFNRV9FTlRSWShIV19LRVlfQ29tbWFuZDYsICJEaXNwbGF5NiIpLAorRU5EX0tFWV9OQU1FX1RBQkxFCisKK0JFR0lOX0tFWV9OQU1FX1RBQkxFKGpveXN0aWNrKQorICBLRVlfTkFNRV9FTlRSWShIV19LRVlfVXAsICJVcCIpLAorICBLRVlfTkFNRV9FTlRSWShIV19LRVlfRG93biwgIkRvd24iKSwKKyAgS0VZX05BTUVfRU5UUlkoSFdfS0VZX0xlZnQsICJMZWZ0IiksCisgIEtFWV9OQU1FX0VOVFJZKEhXX0tFWV9SaWdodCwgIlJpZ2h0IiksCisgIEtFWV9OQU1FX0VOVFJZKEhXX0tFWV9BY3Rpb24sICJBY3Rpb24iKSwKK0VORF9LRVlfTkFNRV9UQUJMRQorCitCRUdJTl9LRVlfTkFNRV9UQUJMRSh0aHVtYikKKyAgS0VZX05BTUVfRU5UUlkoSFdfS0VZX1RodW1iUHJldmlvdXMsICJUaHVtYlByZXZpb3VzIiksCisgIEtFWV9OQU1FX0VOVFJZKEhXX0tFWV9UaHVtYkxlZnQsICJUaHVtYkxlZnQiKSwKKyAgS0VZX05BTUVfRU5UUlkoSFdfS0VZX1RodW1iUmlnaHQsICJUaHVtYlJpZ2h0IiksCisgIEtFWV9OQU1FX0VOVFJZKEhXX0tFWV9UaHVtYk5leHQsICJUaHVtYk5leHQiKSwKK0VORF9LRVlfTkFNRV9UQUJMRQorCitCRUdJTl9LRVlfTkFNRV9UQUJMRVMoQkkxNCkKKyAgS0VZX05BTUVfVEFCTEUocm91dGluZyksCisgIEtFWV9OQU1FX1RBQkxFKHRodW1iKSwKKyAgS0VZX05BTUVfVEFCTEUoYnJhaWxsZSksCisgIEtFWV9OQU1FX1RBQkxFKGpveXN0aWNrKSwKK0VORF9LRVlfTkFNRV9UQUJMRVMKKworQkVHSU5fS0VZX05BTUVfVEFCTEVTKEJJMzIpCisgIEtFWV9OQU1FX1RBQkxFKHJvdXRpbmcpLAorICBLRVlfTkFNRV9UQUJMRSh0aHVtYiksCisgIEtFWV9OQU1FX1RBQkxFKGJyYWlsbGUpLAorICBLRVlfTkFNRV9UQUJMRShjb21tYW5kKSwKK0VORF9LRVlfTkFNRV9UQUJMRVMKKworQkVHSU5fS0VZX05BTUVfVEFCTEVTKEJJNDApCisgIEtFWV9OQU1FX1RBQkxFKHJvdXRpbmcpLAorICBLRVlfTkFNRV9UQUJMRSh0aHVtYiksCisgIEtFWV9OQU1FX1RBQkxFKGJyYWlsbGUpLAorICBLRVlfTkFNRV9UQUJMRShjb21tYW5kKSwKK0VORF9LRVlfTkFNRV9UQUJMRVMKKworQkVHSU5fS0VZX05BTUVfVEFCTEVTKEI4MCkKKyAgS0VZX05BTUVfVEFCTEUocm91dGluZyksCisgIEtFWV9OQU1FX1RBQkxFKHRodW1iKSwKKyAgS0VZX05BTUVfVEFCTEUoY29tbWFuZCksCitFTkRfS0VZX05BTUVfVEFCTEVTCisKK0JFR0lOX0tFWV9OQU1FX1RBQkxFUyh0b3VjaCkKKyAgS0VZX05BTUVfVEFCTEUocm91dGluZyksCisgIEtFWV9OQU1FX1RBQkxFKHRodW1iKSwKKyAgS0VZX05BTUVfVEFCTEUoYnJhaWxsZSksCitFTkRfS0VZX05BTUVfVEFCTEVTCisKK0JFR0lOX0tFWV9OQU1FX1RBQkxFUyhDMjApCisgIEtFWV9OQU1FX1RBQkxFKHJvdXRpbmcpLAorICBLRVlfTkFNRV9UQUJMRSh0aHVtYiksCisgIEtFWV9OQU1FX1RBQkxFKGJyYWlsbGUpLAorRU5EX0tFWV9OQU1FX1RBQkxFUworCitCRUdJTl9LRVlfTkFNRV9UQUJMRVMoTTQwKQorICBLRVlfTkFNRV9UQUJMRShyb3V0aW5nKSwKKyAgS0VZX05BTUVfVEFCTEUodGh1bWIpLAorRU5EX0tFWV9OQU1FX1RBQkxFUworCitCRUdJTl9LRVlfTkFNRV9UQUJMRVMoTkxTKQorICBLRVlfTkFNRV9UQUJMRShyb3V0aW5nKSwKKyAgS0VZX05BTUVfVEFCTEUodGh1bWIpLAorICBLRVlfTkFNRV9UQUJMRShicmFpbGxlKSwKK0VORF9LRVlfTkFNRV9UQUJMRVMKKworQkVHSU5fS0VZX05BTUVfVEFCTEVTKG9uZSkKKyAgS0VZX05BTUVfVEFCTEUocm91dGluZyksCisgIEtFWV9OQU1FX1RBQkxFKHRodW1iKSwKKyAgS0VZX05BTUVfVEFCTEUoYnJhaWxsZSksCitFTkRfS0VZX05BTUVfVEFCTEVTCisKK0JFR0lOX0tFWV9OQU1FX1RBQkxFUyhCSTQwWCkKKyAgS0VZX05BTUVfVEFCTEUocm91dGluZyksCisgIEtFWV9OQU1FX1RBQkxFKHRodW1iKSwKKyAgS0VZX05BTUVfVEFCTEUoYnJhaWxsZSksCisgIEtFWV9OQU1FX1RBQkxFKGNvbW1hbmQpLAorRU5EX0tFWV9OQU1FX1RBQkxFUworCitCRUdJTl9LRVlfTkFNRV9UQUJMRVMoQkkyMFgpCisgIEtFWV9OQU1FX1RBQkxFKHJvdXRpbmcpLAorICBLRVlfTkFNRV9UQUJMRSh0aHVtYiksCisgIEtFWV9OQU1FX1RBQkxFKGJyYWlsbGUpLAorRU5EX0tFWV9OQU1FX1RBQkxFUworCitERUZJTkVfS0VZX1RBQkxFKEJJMTQpCitERUZJTkVfS0VZX1RBQkxFKEJJMzIpCitERUZJTkVfS0VZX1RBQkxFKEJJNDApCitERUZJTkVfS0VZX1RBQkxFKEI4MCkKK0RFRklORV9LRVlfVEFCTEUodG91Y2gpCitERUZJTkVfS0VZX1RBQkxFKEMyMCkKK0RFRklORV9LRVlfVEFCTEUoTTQwKQorREVGSU5FX0tFWV9UQUJMRShOTFMpCitERUZJTkVfS0VZX1RBQkxFKG9uZSkKK0RFRklORV9LRVlfVEFCTEUoQkk0MFgpCitERUZJTkVfS0VZX1RBQkxFKEJJMjBYKQorCitCRUdJTl9LRVlfVEFCTEVfTElTVAorICAmS0VZX1RBQkxFX0RFRklOSVRJT04oQkkxNCksCisgICZLRVlfVEFCTEVfREVGSU5JVElPTihCSTMyKSwKKyAgJktFWV9UQUJMRV9ERUZJTklUSU9OKEJJNDApLAorICAmS0VZX1RBQkxFX0RFRklOSVRJT04oQjgwKSwKKyAgJktFWV9UQUJMRV9ERUZJTklUSU9OKHRvdWNoKSwKKyAgJktFWV9UQUJMRV9ERUZJTklUSU9OKEMyMCksCisgICZLRVlfVEFCTEVfREVGSU5JVElPTihNNDApLAorICAmS0VZX1RBQkxFX0RFRklOSVRJT04oTkxTKSwKKyAgJktFWV9UQUJMRV9ERUZJTklUSU9OKG9uZSksCisgICZLRVlfVEFCTEVfREVGSU5JVElPTihCSTQwWCksCisgICZLRVlfVEFCTEVfREVGSU5JVElPTihCSTIwWCksCitFTkRfS0VZX1RBQkxFX0xJU1QKKwordHlwZWRlZiBzdHJ1Y3QgeworICBjb25zdCBjaGFyICptb2RlbE5hbWU7CisgIGNvbnN0IEtleVRhYmxlRGVmaW5pdGlvbiAqa2V5VGFibGVEZWZpbml0aW9uOworICBIV19Nb2RlbElkZW50aWZpZXIgbW9kZWxJZGVudGlmaWVyOworICB1bnNpZ25lZCBjaGFyIHByZXNzZWRLZXlzUmVwb3J0U2l6ZTsKKworICB1bnNpZ25lZCBjaGFyIGhhc0JyYWlsbGVLZXlzOjE7CisgIHVuc2lnbmVkIGNoYXIgaGFzQ29tbWFuZEtleXM6MTsKKyAgdW5zaWduZWQgY2hhciBoYXNKb3lzdGljazoxOworICB1bnNpZ25lZCBjaGFyIGhhc1NlY29uZFRodW1iS2V5czoxOworfSBNb2RlbEVudHJ5OworCitzdGF0aWMgY29uc3QgTW9kZWxFbnRyeSBtb2RlbEVudHJ5X0JJMTQgPSB7CisgIC5tb2RlbE5hbWUgPSAiQnJhaWxsaWFudCBCSSAxNCIsCisgIC5oYXNCcmFpbGxlS2V5cyA9IDEsCisgIC5oYXNKb3lzdGljayA9IDEsCisgIC5rZXlUYWJsZURlZmluaXRpb24gPSAmS0VZX1RBQkxFX0RFRklOSVRJT04oQkkxNCkKK307CisKK3N0YXRpYyBjb25zdCBNb2RlbEVudHJ5IG1vZGVsRW50cnlfQkkzMiA9IHsKKyAgLm1vZGVsTmFtZSA9ICJCcmFpbGxpYW50IEJJIDMyIiwKKyAgLmhhc0JyYWlsbGVLZXlzID0gMSwKKyAgLmhhc0NvbW1hbmRLZXlzID0gMSwKKyAgLmtleVRhYmxlRGVmaW5pdGlvbiA9ICZLRVlfVEFCTEVfREVGSU5JVElPTihCSTMyKQorfTsKKworc3RhdGljIGNvbnN0IE1vZGVsRW50cnkgbW9kZWxFbnRyeV9CSTQwID0geworICAubW9kZWxOYW1lID0gIkJyYWlsbGlhbnQgQkkgNDAiLAorICAuaGFzQnJhaWxsZUtleXMgPSAxLAorICAuaGFzQ29tbWFuZEtleXMgPSAxLAorICAua2V5VGFibGVEZWZpbml0aW9uID0gJktFWV9UQUJMRV9ERUZJTklUSU9OKEJJNDApCit9OworCitzdGF0aWMgY29uc3QgTW9kZWxFbnRyeSBtb2RlbEVudHJ5X0I4MCA9IHsKKyAgLm1vZGVsTmFtZSA9ICJCcmFpbGxpYW50IEIgODAiLAorICAuaGFzQ29tbWFuZEtleXMgPSAxLAorICAuaGFzU2Vjb25kVGh1bWJLZXlzID0gMSwKKyAgLmtleVRhYmxlRGVmaW5pdGlvbiA9ICZLRVlfVEFCTEVfREVGSU5JVElPTihCODApCit9OworCitzdGF0aWMgY29uc3QgTW9kZWxFbnRyeSBtb2RlbEVudHJ5X3RvdWNoID0geworICAubW9kZWxOYW1lID0gIkJyYWlsbGVOb3RlIFRvdWNoIiwKKyAgLm1vZGVsSWRlbnRpZmllciA9IEhXX01PREVMX0hXX0JSQUlMTEVfTk9URV9UT1VDSCwKKyAgLmhhc0JyYWlsbGVLZXlzID0gMSwKKyAgLmtleVRhYmxlRGVmaW5pdGlvbiA9ICZLRVlfVEFCTEVfREVGSU5JVElPTih0b3VjaCkKK307CisKK3N0YXRpYyBjb25zdCBNb2RlbEVudHJ5IG1vZGVsRW50cnlfQzIwID0geworICAubW9kZWxOYW1lID0gIkFQSCBDaGFtZWxlb24gMjAiLAorICAubW9kZWxJZGVudGlmaWVyID0gSFdfTU9ERUxfQVBIX0NIQU1FTEVPTl8yMCwKKyAgLmhhc0JyYWlsbGVLZXlzID0gMSwKKyAgLmtleVRhYmxlRGVmaW5pdGlvbiA9ICZLRVlfVEFCTEVfREVGSU5JVElPTihDMjApCit9OworCitzdGF0aWMgY29uc3QgTW9kZWxFbnRyeSBtb2RlbEVudHJ5X000MCA9IHsKKyAgLm1vZGVsTmFtZSA9ICJBUEggTWFudGlzIFE0MCIsCisgIC5tb2RlbElkZW50aWZpZXIgPSBIV19NT0RFTF9BUEhfTUFOVElTX1E0MCwKKyAgLmtleVRhYmxlRGVmaW5pdGlvbiA9ICZLRVlfVEFCTEVfREVGSU5JVElPTihNNDApCit9OworCitzdGF0aWMgY29uc3QgTW9kZWxFbnRyeSBtb2RlbEVudHJ5X05MUyA9IHsKKyAgLm1vZGVsTmFtZSA9ICJOTFMgZVJlYWRlciIsCisgIC5tb2RlbElkZW50aWZpZXIgPSBIV19NT0RFTF9OTFNfRVJFQURFUiwKKyAgLmhhc0JyYWlsbGVLZXlzID0gMSwKKyAgLmtleVRhYmxlRGVmaW5pdGlvbiA9ICZLRVlfVEFCTEVfREVGSU5JVElPTihOTFMpCit9OworCitzdGF0aWMgY29uc3QgTW9kZWxFbnRyeSBtb2RlbEVudHJ5X29uZSA9IHsKKyAgLm1vZGVsTmFtZSA9ICJIdW1hbldhcmUgQnJhaWxsZU9uZSIsCisgIC5tb2RlbElkZW50aWZpZXIgPSBIV19NT0RFTF9IV19CUkFJTExFX09ORSwKKyAgLmhhc0JyYWlsbGVLZXlzID0gMSwKKyAgLmtleVRhYmxlRGVmaW5pdGlvbiA9ICZLRVlfVEFCTEVfREVGSU5JVElPTihvbmUpCit9OworCitzdGF0aWMgY29uc3QgTW9kZWxFbnRyeSBtb2RlbEVudHJ5X0JJNDBYID0geworICAubW9kZWxOYW1lID0gIkJyYWlsbGlhbnQgQkkgNDBYIiwKKyAgLnByZXNzZWRLZXlzUmVwb3J0U2l6ZSA9IDQ2LAorICAuaGFzQnJhaWxsZUtleXMgPSAxLAorICAuaGFzQ29tbWFuZEtleXMgPSAxLAorICAua2V5VGFibGVEZWZpbml0aW9uID0gJktFWV9UQUJMRV9ERUZJTklUSU9OKEJJNDBYKQorfTsKKworc3RhdGljIGNvbnN0IE1vZGVsRW50cnkgbW9kZWxFbnRyeV9CSTIwWCA9IHsKKyAgLm1vZGVsTmFtZSA9ICJCcmFpbGxpYW50IEJJIDIwWCIsCisgIC5oYXNCcmFpbGxlS2V5cyA9IDEsCisgIC5rZXlUYWJsZURlZmluaXRpb24gPSAmS0VZX1RBQkxFX0RFRklOSVRJT04oQkkyMFgpCit9OworCitzdGF0aWMgY29uc3QgTW9kZWxFbnRyeSAqbW9kZWxUYWJsZVtdID0geworICAmbW9kZWxFbnRyeV9CSTE0LAorICAmbW9kZWxFbnRyeV9CSTMyLAorICAmbW9kZWxFbnRyeV9CSTQwLAorICAmbW9kZWxFbnRyeV9CODAsCisgICZtb2RlbEVudHJ5X3RvdWNoLAorICAmbW9kZWxFbnRyeV9DMjAsCisgICZtb2RlbEVudHJ5X000MCwKKyAgJm1vZGVsRW50cnlfTkxTLAorICAmbW9kZWxFbnRyeV9vbmUsCisgICZtb2RlbEVudHJ5X0JJNDBYLAorICAmbW9kZWxFbnRyeV9CSTIwWCwKK307CisKK3N0YXRpYyB1bnNpZ25lZCBjaGFyIG1vZGVsQ291bnQgPSBBUlJBWV9DT1VOVChtb2RlbFRhYmxlKTsKKworc3RhdGljIGNvbnN0IE1vZGVsRW50cnkgKgorZ2V0TW9kZWxCeUlkZW50aWZpZXIgKEhXX01vZGVsSWRlbnRpZmllciBpZGVudGlmaWVyKSB7CisgIGlmIChpZGVudGlmaWVyKSB7CisgICAgY29uc3QgTW9kZWxFbnRyeSAqY29uc3QgKm1vZGVsID0gbW9kZWxUYWJsZTsKKyAgICBjb25zdCBNb2RlbEVudHJ5ICpjb25zdCAqZW5kID0gbW9kZWwgKyBtb2RlbENvdW50OworCisgICAgd2hpbGUgKG1vZGVsIDwgZW5kKSB7CisgICAgICBpZiAoKCptb2RlbCktPm1vZGVsSWRlbnRpZmllciA9PSBpZGVudGlmaWVyKSByZXR1cm4gKm1vZGVsOworICAgICAgbW9kZWwgKz0gMTsKKyAgICB9CisgIH0KKworICBsb2dNZXNzYWdlKExPR19DQVRFR09SWShCUkFJTExFX0RSSVZFUiksCisgICAgInVua25vd24gbW9kZWwgaWRlbnRpZmllcjogJXUiLCBpZGVudGlmaWVyCisgICk7CisKKyAgcmV0dXJuIE5VTEw7Cit9CisKKyNkZWZpbmUgT1BFTl9SRUFEWV9ERUxBWSAxMDAKKworI2RlZmluZSBTRVJJQUxfUFJPQkVfUkVTUE9OU0VfVElNRU9VVCAxMDAwCisjZGVmaW5lIFNFUklBTF9QUk9CRV9SRVRSWV9MSU1JVCAwCisKKyNkZWZpbmUgU0VSSUFMX0lOSVRfUkVTRU5EX0RFTEFZIDEwMAorI2RlZmluZSBTRVJJQUxfSU5JVF9SRVNFTkRfTElNSVQgMTAKKworI2RlZmluZSBNQVhJTVVNX1RFWFRfQ0VMTF9DT1VOVCAwWEZGCisKKyNkZWZpbmUgTUFYSU1VTV9LRVlfVkFMVUUgMFhGRgorI2RlZmluZSBLRVlTX0JJVE1BU0sobmFtZSkgQklUTUFTSyhuYW1lLCAoTUFYSU1VTV9LRVlfVkFMVUUgKyAxKSwgaW50KQorCisjZGVmaW5lIEJSQUlMTEVfS0VZX0NPVU5UICg4ICsgMSkKKyNkZWZpbmUgQ09NTUFORF9LRVlfQ09VTlQgNgorI2RlZmluZSBUSFVNQl9LRVlfQ09VTlQgNAorI2RlZmluZSBKT1lTVElDS19LRVlfQ09VTlQgNQorCit0eXBlZGVmIHN0cnVjdCB7CisgIGNvbnN0IGNoYXIgKm5hbWU7CisgIGludCAoKnByb2JlRGlzcGxheSkgKEJyYWlsbGVEaXNwbGF5ICpicmwpOworICBpbnQgKCp3cml0ZUNlbGxzKSAoQnJhaWxsZURpc3BsYXkgKmJybCwgY29uc3QgdW5zaWduZWQgY2hhciAqY2VsbHMsIHVuc2lnbmVkIGNoYXIgY291bnQpOworICBpbnQgKCpwcm9jZXNzSW5wdXRQYWNrZXQpIChCcmFpbGxlRGlzcGxheSAqYnJsKTsKKyAgaW50ICgqa2VlcEF3YWtlKSAoQnJhaWxsZURpc3BsYXkgKmJybCk7Cit9IFByb3RvY29sRW50cnk7CisKK3N0cnVjdCBCcmFpbGxlRGF0YVN0cnVjdCB7CisgIGNvbnN0IFByb3RvY29sRW50cnkgKnByb3RvY29sOworICBjb25zdCBNb2RlbEVudHJ5ICptb2RlbDsKKworICB1aW50MzJfdCBmaXJtd2FyZVZlcnNpb247CisgIHVuc2lnbmVkIGlzT2ZmbGluZToxOworCisgIHN0cnVjdCB7CisgICAgdW5zaWduZWQgY2hhciBjb3VudDsKKyAgICBLRVlTX0JJVE1BU0sobWFzayk7CisgIH0gcHJlc3NlZEtleXM7CisKKyAgc3RydWN0IHsKKyAgICB1bnNpZ25lZCBjaGFyIHJld3JpdGU7CisgICAgdW5zaWduZWQgY2hhciBjZWxsc1tNQVhJTVVNX1RFWFRfQ0VMTF9DT1VOVF07CisgIH0gdGV4dDsKKworICBzdHJ1Y3QgeworICAgIHN0cnVjdCB7CisgICAgICB1bnNpZ25lZCBjaGFyIHJlc2VuZENvdW50OworICAgIH0gaW5pdDsKKyAgfSBzZXJpYWw7CisKKyAgc3RydWN0IHsKKyAgICBzdHJ1Y3QgeworICAgICAgdW5zaWduZWQgY2hhciByZXBvcnRTaXplOworICAgIH0gcHJlc3NlZEtleXM7CisgIH0gaGlkOworfTsKKworc3RhdGljIGNvbnN0IE1vZGVsRW50cnkgKgorZ2V0TW9kZWxCeUNlbGxDb3VudCAoQnJhaWxsZURpc3BsYXkgKmJybCkgeworICB1bnNpZ25lZCBpbnQgY2VsbENvdW50ID0gYnJsLT50ZXh0Q29sdW1uczsKKworICBzd2l0Y2ggKGNlbGxDb3VudCkgeworICAgIGNhc2UgMTQ6IHJldHVybiAmbW9kZWxFbnRyeV9CSTE0OworICAgIGNhc2UgMzI6IHJldHVybiAmbW9kZWxFbnRyeV9CSTMyOworICAgIGNhc2UgNDA6IHJldHVybiAmbW9kZWxFbnRyeV9CSTQwOworICAgIGNhc2UgODA6IHJldHVybiAmbW9kZWxFbnRyeV9CODA7CisKKyAgICBkZWZhdWx0OgorICAgICAgbG9nTWVzc2FnZShMT0dfV0FSTklORywgInVua25vd24gY2VsbCBjb3VudDogJXUiLCBjZWxsQ291bnQpOworICAgICAgcmV0dXJuIE5VTEw7CisgIH0KK30KKworc3RhdGljIGludAorc2V0TW9kZWwgKEJyYWlsbGVEaXNwbGF5ICpicmwpIHsKKyAgaWYgKCFicmwtPmRhdGEtPm1vZGVsKSB7CisgICAgaWYgKCEoYnJsLT5kYXRhLT5tb2RlbCA9IGdldE1vZGVsQnlDZWxsQ291bnQoYnJsKSkpIHsKKyAgICAgIHJldHVybiAwOworICAgIH0KKyAgfQorCisgIGxvZ01lc3NhZ2UoTE9HX0RFQlVHLCAiTW9kZWwgTmFtZTogJXMiLCBicmwtPmRhdGEtPm1vZGVsLT5tb2RlbE5hbWUpOworICByZXR1cm4gMTsKK30KKworc3RhdGljIGludAorZ2V0RGVjaW1hbFZhbHVlIChjb25zdCBjaGFyICpkaWdpdHMsIHVuc2lnbmVkIGludCBjb3VudCkgeworICBjb25zdCBjaGFyICplbmQgPSBkaWdpdHMgKyBjb3VudDsKKyAgdW5zaWduZWQgaW50IHJlc3VsdCA9IDA7CisgIGNvbnN0IGNoYXIgemVybyA9ICcwJzsKKworICB3aGlsZSAoZGlnaXRzIDwgZW5kKSB7CisgICAgY2hhciBkaWdpdCA9ICpkaWdpdHMrKzsKKyAgICBpZiAoZGlnaXQgPj0gemVybykgZGlnaXQgLT0gemVybzsKKworICAgIGlmIChkaWdpdCA8IDApIHJldHVybiAwOworICAgIGlmIChkaWdpdCA+IDkpIHJldHVybiAwOworCisgICAgcmVzdWx0ICo9IDEwOworICAgIHJlc3VsdCArPSBkaWdpdDsKKyAgfQorCisgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyB2b2lkCitzZXRGaXJtd2FyZVZlcnNpb24gKEJyYWlsbGVEaXNwbGF5ICpicmwsIHVuc2lnbmVkIGNoYXIgbWFqb3IsIHVuc2lnbmVkIGNoYXIgbWlub3IsIHVuc2lnbmVkIGNoYXIgYnVpbGQpIHsKKyAgbG9nTWVzc2FnZShMT0dfSU5GTywgIkZpcm13YXJlIFZlcnNpb246ICV1LiV1LiV1IiwgbWFqb3IsIG1pbm9yLCBidWlsZCk7CisgIGJybC0+ZGF0YS0+ZmlybXdhcmVWZXJzaW9uID0gKG1ham9yIDw8IDE2KSB8IChtaW5vciA8PCA4KSA8PCAoYnVpbGQgPDwgMCk7Cit9CisKK3N0YXRpYyBpbnQKK2hhbmRsZUtleUV2ZW50IChCcmFpbGxlRGlzcGxheSAqYnJsLCB1bnNpZ25lZCBjaGFyIGtleSwgaW50IHByZXNzKSB7CisgIEtleUdyb3VwIGdyb3VwOworCisgIGlmIChrZXkgPCBIV19LRVlfUk9VVElORykgeworICAgIGdyb3VwID0gSFdfR1JQX05hdmlnYXRpb25LZXlzOworICB9IGVsc2UgeworICAgIGdyb3VwID0gSFdfR1JQX1JvdXRpbmdLZXlzOworICAgIGtleSAtPSBIV19LRVlfUk9VVElORzsKKyAgfQorCisgIHJldHVybiBlbnF1ZXVlS2V5RXZlbnQoYnJsLCBncm91cCwga2V5LCBwcmVzcyk7Cit9CisKK3N0YXRpYyBpbnQKK2lzQ2FsaWJyYXRpb25LZXkgKEJyYWlsbGVEaXNwbGF5ICpicmwsIHVuc2lnbmVkIGNoYXIga2V5KSB7CisgIHN3aXRjaCAoa2V5KSB7CisgICAgZGVmYXVsdDoKKyAgICAgIHJldHVybiAwOworCisgICAgY2FzZSBIV19LRVlfQ0FMX09LOgorICAgIGNhc2UgSFdfS0VZX0NBTF9GQUlMOgorICAgIGNhc2UgSFdfS0VZX0NBTF9FTVBUWToKKyAgICBjYXNlIEhXX0tFWV9DQUxfUkVTRVQ6CisgICAgICBicmVhazsKKyAgfQorCisgIHJlbGVhc2VCcmFpbGxlS2V5cyhicmwpOworICBCSVRNQVNLX1pFUk8oYnJsLT5kYXRhLT5wcmVzc2VkS2V5cy5tYXNrKTsKKyAgYnJsLT5kYXRhLT5wcmVzc2VkS2V5cy5jb3VudCA9IDA7CisgIHJldHVybiAxOworfQorCitzdGF0aWMgaW50CitoYW5kbGVLZXlQcmVzcyAoQnJhaWxsZURpc3BsYXkgKmJybCwgdW5zaWduZWQgY2hhciBrZXkpIHsKKyAgaWYgKEJJVE1BU0tfVEVTVChicmwtPmRhdGEtPnByZXNzZWRLZXlzLm1hc2ssIGtleSkpIHJldHVybiAwOworCisgIEJJVE1BU0tfU0VUKGJybC0+ZGF0YS0+cHJlc3NlZEtleXMubWFzaywga2V5KTsKKyAgYnJsLT5kYXRhLT5wcmVzc2VkS2V5cy5jb3VudCArPSAxOworCisgIGhhbmRsZUtleUV2ZW50KGJybCwga2V5LCAxKTsKKyAgcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQKK2hhbmRsZUtleVJlbGVhc2UgKEJyYWlsbGVEaXNwbGF5ICpicmwsIHVuc2lnbmVkIGNoYXIga2V5KSB7CisgIGlmICghQklUTUFTS19URVNUKGJybC0+ZGF0YS0+cHJlc3NlZEtleXMubWFzaywga2V5KSkgcmV0dXJuIDA7CisKKyAgQklUTUFTS19DTEVBUihicmwtPmRhdGEtPnByZXNzZWRLZXlzLm1hc2ssIGtleSk7CisgIGJybC0+ZGF0YS0+cHJlc3NlZEtleXMuY291bnQgLT0gMTsKKworICBoYW5kbGVLZXlFdmVudChicmwsIGtleSwgMCk7CisgIHJldHVybiAxOworfQorCitzdGF0aWMgdm9pZAoraGFuZGxlUHJlc3NlZEtleXNBcnJheSAoQnJhaWxsZURpc3BsYXkgKmJybCwgdW5zaWduZWQgY2hhciAqa2V5cywgc2l6ZV90IGNvdW50KSB7CisgIEtFWVNfQklUTUFTSyhwcmVzc2VkTWFzayk7CisgIEJJVE1BU0tfWkVSTyhwcmVzc2VkTWFzayk7CisgIHVuc2lnbmVkIGludCBwcmVzc2VkQ291bnQgPSAwOworCisgIHsKKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyICprZXkgPSBrZXlzOworICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmVuZCA9IGtleXMgKyBjb3VudDsKKworICAgIHdoaWxlIChrZXkgPCBlbmQpIHsKKyAgICAgIGlmICghKmtleSkgYnJlYWs7CisKKyAgICAgIGlmICghQklUTUFTS19URVNUKHByZXNzZWRNYXNrLCAqa2V5KSkgeworICAgICAgICBCSVRNQVNLX1NFVChwcmVzc2VkTWFzaywgKmtleSk7CisgICAgICAgIHByZXNzZWRDb3VudCArPSAxOworCisgICAgICAgIGlmIChpc0NhbGlicmF0aW9uS2V5KGJybCwgKmtleSkpIHJldHVybjsKKyAgICAgICAgaGFuZGxlS2V5UHJlc3MoYnJsLCAqa2V5KTsKKyAgICAgIH0KKworICAgICAga2V5ICs9IDE7CisgICAgfQorICB9CisKKyAgaWYgKGJybC0+ZGF0YS0+cHJlc3NlZEtleXMuY291bnQgPiBwcmVzc2VkQ291bnQpIHsKKyAgICBmb3IgKHVuc2lnbmVkIGludCBrZXk9MDsga2V5PD1NQVhJTVVNX0tFWV9WQUxVRTsga2V5Kz0xKSB7CisgICAgICBpZiAoIUJJVE1BU0tfVEVTVChwcmVzc2VkTWFzaywga2V5KSkgeworICAgICAgICBpZiAoaGFuZGxlS2V5UmVsZWFzZShicmwsIGtleSkpIHsKKyAgICAgICAgICBpZiAoYnJsLT5kYXRhLT5wcmVzc2VkS2V5cy5jb3VudCA9PSBwcmVzc2VkQ291bnQpIHsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgfQorICAgIH0KKyAgfQorfQorCitzdGF0aWMgdm9pZAoraGFuZGxlUG93ZXJpbmdPZmYgKEJyYWlsbGVEaXNwbGF5ICpicmwpIHsKKyAgbG9nTWVzc2FnZShMT0dfQ0FURUdPUlkoQlJBSUxMRV9EUklWRVIpLCAicG93ZXJpbmcgb2ZmIik7CisgIGJybC0+ZGF0YS0+aXNPZmZsaW5lID0gMTsKK30KKworc3RhdGljIEJyYWlsbGVQYWNrZXRWZXJpZmllclJlc3VsdAordmVyaWZ5U2VyaWFsUGFja2V0ICgKKyAgQnJhaWxsZURpc3BsYXkgKmJybCwKKyAgdW5zaWduZWQgY2hhciAqYnl0ZXMsIHNpemVfdCBzaXplLAorICBzaXplX3QgKmxlbmd0aCwgdm9pZCAqZGF0YQorKSB7CisgIHVuc2lnbmVkIGNoYXIgYnl0ZSA9IGJ5dGVzW3NpemUtMV07CisKKyAgc3dpdGNoIChzaXplKSB7CisgICAgY2FzZSAxOgorICAgICAgaWYgKGJ5dGUgIT0gQVNDSUlfRVNDKSByZXR1cm4gQlJMX1BWUl9JTlZBTElEOworICAgICAgKmxlbmd0aCA9IDM7CisgICAgICBicmVhazsKKworICAgIGNhc2UgMzoKKyAgICAgICpsZW5ndGggKz0gYnl0ZTsKKyAgICAgIGJyZWFrOworCisgICAgZGVmYXVsdDoKKyAgICAgIGJyZWFrOworICB9CisKKyAgcmV0dXJuIEJSTF9QVlJfSU5DTFVERTsKK30KKworc3RhdGljIHNpemVfdAorcmVhZFNlcmlhbFBhY2tldCAoQnJhaWxsZURpc3BsYXkgKmJybCwgdm9pZCAqYnVmZmVyLCBzaXplX3Qgc2l6ZSkgeworICByZXR1cm4gcmVhZEJyYWlsbGVQYWNrZXQoYnJsLCBOVUxMLCBidWZmZXIsIHNpemUsIHZlcmlmeVNlcmlhbFBhY2tldCwgTlVMTCk7Cit9CisKK3N0YXRpYyBpbnQKK3dyaXRlU2VyaWFsUGFja2V0IChCcmFpbGxlRGlzcGxheSAqYnJsLCB1bnNpZ25lZCBjaGFyIHR5cGUsIHVuc2lnbmVkIGNoYXIgbGVuZ3RoLCBjb25zdCB2b2lkICpkYXRhKSB7CisgIEhXX1BhY2tldCBwYWNrZXQ7CisKKyAgcGFja2V0LmZpZWxkcy5oZWFkZXIgPSBBU0NJSV9FU0M7CisgIHBhY2tldC5maWVsZHMudHlwZSA9IHR5cGU7CisgIHBhY2tldC5maWVsZHMubGVuZ3RoID0gbGVuZ3RoOworCisgIGlmIChkYXRhKSBtZW1jcHkocGFja2V0LmZpZWxkcy5kYXRhLmJ5dGVzLCBkYXRhLCBsZW5ndGgpOworICBsZW5ndGggKz0gcGFja2V0LmZpZWxkcy5kYXRhLmJ5dGVzIC0gcGFja2V0LmJ5dGVzOworCisgIHJldHVybiB3cml0ZUJyYWlsbGVQYWNrZXQoYnJsLCBOVUxMLCAmcGFja2V0LCBsZW5ndGgpOworfQorCitzdGF0aWMgaW50Cit3cml0ZVNlcmlhbFJlcXVlc3QgKEJyYWlsbGVEaXNwbGF5ICpicmwsIHVuc2lnbmVkIGNoYXIgdHlwZSkgeworICByZXR1cm4gd3JpdGVTZXJpYWxQYWNrZXQoYnJsLCB0eXBlLCAwLCBOVUxMKTsKK30KKworc3RhdGljIGludAord3JpdGVTZXJpYWxJZGVudGlmeVJlcXVlc3QgKEJyYWlsbGVEaXNwbGF5ICpicmwpIHsKKyAgcmV0dXJuIHdyaXRlU2VyaWFsUmVxdWVzdChicmwsIEhXX01TR19JTklUKTsKK30KKworc3RhdGljIHNpemVfdAorcmVhZFNlcmlhbFJlc3BvbnNlIChCcmFpbGxlRGlzcGxheSAqYnJsLCB2b2lkICpwYWNrZXQsIHNpemVfdCBzaXplKSB7CisgIHJldHVybiByZWFkU2VyaWFsUGFja2V0KGJybCwgcGFja2V0LCBzaXplKTsKK30KKworc3RhdGljIEJyYWlsbGVSZXNwb25zZVJlc3VsdAoraXNTZXJpYWxJZGVudGl0eVJlc3BvbnNlIChCcmFpbGxlRGlzcGxheSAqYnJsLCBjb25zdCB2b2lkICpwYWNrZXQsIHNpemVfdCBzaXplKSB7CisgIGNvbnN0IEhXX1BhY2tldCAqcmVzcG9uc2UgPSBwYWNrZXQ7CisKKyAgaWYgKHJlc3BvbnNlLT5maWVsZHMudHlwZSAhPSBIV19NU0dfSU5JVF9SRVNQKSByZXR1cm4gQlJMX1JTUF9VTkVYUEVDVEVEOworICBpZiAoIXJlc3BvbnNlLT5maWVsZHMuZGF0YS5pbml0LnN0aWxsSW5pdGlhbGl6aW5nKSByZXR1cm4gQlJMX1JTUF9ET05FOworCisgIGlmICgrK2JybC0+ZGF0YS0+c2VyaWFsLmluaXQucmVzZW5kQ291bnQgPiBTRVJJQUxfSU5JVF9SRVNFTkRfTElNSVQpIHsKKyAgICBsb2dNZXNzYWdlKExPR19DQVRFR09SWShCUkFJTExFX0RSSVZFUiksICJjaGFubmVsIGluaXRpYWxpemF0aW9uIHRpbWVvdXQiKTsKKyAgICByZXR1cm4gQlJMX1JTUF9GQUlMOworICB9CisKKyAgbG9nTWVzc2FnZShMT0dfQ0FURUdPUlkoQlJBSUxMRV9EUklWRVIpLCAiY2hhbm5lbCBzdGlsbCBpbml0aWFsaXppbmciKTsKKyAgYXN5bmNXYWl0KFNFUklBTF9JTklUX1JFU0VORF9ERUxBWSk7CisKKyAgaWYgKHdyaXRlU2VyaWFsSWRlbnRpZnlSZXF1ZXN0KGJybCkpIHJldHVybiBCUkxfUlNQX0NPTlRJTlVFOworICByZXR1cm4gQlJMX1JTUF9GQUlMOworfQorCitzdGF0aWMgaW50Citwcm9iZVNlcmlhbERpc3BsYXkgKEJyYWlsbGVEaXNwbGF5ICpicmwpIHsKKyAgSFdfUGFja2V0IHJlc3BvbnNlOworCisgIGJybC0+ZGF0YS0+c2VyaWFsLmluaXQucmVzZW5kQ291bnQgPSAwOworCisgIGlmIChwcm9iZUJyYWlsbGVEaXNwbGF5KGJybCwgU0VSSUFMX1BST0JFX1JFVFJZX0xJTUlULAorICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCBTRVJJQUxfUFJPQkVfUkVTUE9OU0VfVElNRU9VVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVTZXJpYWxJZGVudGlmeVJlcXVlc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRTZXJpYWxSZXNwb25zZSwgJnJlc3BvbnNlLCBzaXplb2YocmVzcG9uc2UuYnl0ZXMpLAorICAgICAgICAgICAgICAgICAgICAgICAgICBpc1NlcmlhbElkZW50aXR5UmVzcG9uc2UpKSB7CisgICAgbG9nTWVzc2FnZShMT0dfSU5GTywgImRldGVjdGVkIEh1bWFud2FyZSBkZXZpY2U6IG1vZGVsPSV1IGNlbGxzPSV1IiwKKyAgICAgICAgICAgICAgIHJlc3BvbnNlLmZpZWxkcy5kYXRhLmluaXQubW9kZWxJZGVudGlmaWVyLAorICAgICAgICAgICAgICAgcmVzcG9uc2UuZmllbGRzLmRhdGEuaW5pdC5jZWxsQ291bnQpOworCisgICAgeworICAgICAgdW5zaWduZWQgY2hhciBpZGVudGlmaWVyID0gcmVzcG9uc2UuZmllbGRzLmRhdGEuaW5pdC5tb2RlbElkZW50aWZpZXI7CisgICAgICBjb25zdCBNb2RlbEVudHJ5ICptb2RlbCA9IGdldE1vZGVsQnlJZGVudGlmaWVyKGlkZW50aWZpZXIpOworCisgICAgICBpZiAobW9kZWwpIHsKKyAgICAgICAgaWYgKCFicmwtPmRhdGEtPm1vZGVsKSB7CisgICAgICAgICAgYnJsLT5kYXRhLT5tb2RlbCA9IG1vZGVsOworICAgICAgICB9IGVsc2UgaWYgKG1vZGVsICE9IGJybC0+ZGF0YS0+bW9kZWwpIHsKKyAgICAgICAgfQorICAgICAgfQorICAgIH0KKworICAgIGJybC0+dGV4dENvbHVtbnMgPSByZXNwb25zZS5maWVsZHMuZGF0YS5pbml0LmNlbGxDb3VudDsKKyAgICBzZXRNb2RlbChicmwpOworCisgICAgd3JpdGVTZXJpYWxSZXF1ZXN0KGJybCwgSFdfTVNHX0dFVF9GSVJNV0FSRV9WRVJTSU9OKTsKKyAgICB3cml0ZVNlcmlhbFJlcXVlc3QoYnJsLCBIV19NU0dfR0VUX0tFWVMpOworCisgICAgcmV0dXJuIDE7CisgIH0KKworICByZXR1cm4gMDsKK30KKworc3RhdGljIGludAord3JpdGVTZXJpYWxDZWxscyAoQnJhaWxsZURpc3BsYXkgKmJybCwgY29uc3QgdW5zaWduZWQgY2hhciAqY2VsbHMsIHVuc2lnbmVkIGNoYXIgY291bnQpIHsKKyAgcmV0dXJuIHdyaXRlU2VyaWFsUGFja2V0KGJybCwgSFdfTVNHX0RJU1BMQVksIGNvdW50LCBjZWxscyk7Cit9CisKK3N0YXRpYyBpbnQKK3Byb2Nlc3NTZXJpYWxJbnB1dFBhY2tldCAoQnJhaWxsZURpc3BsYXkgKmJybCkgeworICBIV19QYWNrZXQgcGFja2V0OworICBzaXplX3QgbGVuZ3RoID0gcmVhZFNlcmlhbFBhY2tldChicmwsICZwYWNrZXQsIHNpemVvZihwYWNrZXQpKTsKKyAgaWYgKCFsZW5ndGgpIHJldHVybiAwOworICBicmwtPmRhdGEtPmlzT2ZmbGluZSA9IDA7CisKKyAgc3dpdGNoIChwYWNrZXQuZmllbGRzLnR5cGUpIHsKKyAgICBjYXNlIEhXX01TR19LRVlTOgorICAgICAgaGFuZGxlUHJlc3NlZEtleXNBcnJheShicmwsIHBhY2tldC5maWVsZHMuZGF0YS5ieXRlcywgcGFja2V0LmZpZWxkcy5sZW5ndGgpOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIEhXX01TR19LRVlfRE9XTjogeworICAgICAgdW5zaWduZWQgY2hhciBrZXkgPSBwYWNrZXQuZmllbGRzLmRhdGEua2V5LmlkOworICAgICAgaWYgKGlzQ2FsaWJyYXRpb25LZXkoYnJsLCBrZXkpKSBicmVhazsKKworICAgICAgaGFuZGxlS2V5UHJlc3MoYnJsLCBrZXkpOworICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBIV19NU0dfS0VZX1VQOgorICAgICAgaGFuZGxlS2V5UmVsZWFzZShicmwsIHBhY2tldC5maWVsZHMuZGF0YS5rZXkuaWQpOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIEhXX01TR19GSVJNV0FSRV9WRVJTSU9OX1JFU1A6CisgICAgICBzZXRGaXJtd2FyZVZlcnNpb24oYnJsLAorICAgICAgICBwYWNrZXQuZmllbGRzLmRhdGEuZmlybXdhcmVWZXJzaW9uLm1ham9yLAorICAgICAgICBwYWNrZXQuZmllbGRzLmRhdGEuZmlybXdhcmVWZXJzaW9uLm1pbm9yLAorICAgICAgICBwYWNrZXQuZmllbGRzLmRhdGEuZmlybXdhcmVWZXJzaW9uLmJ1aWxkKTsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBIV19NU0dfS0VFUF9BV0FLRV9SRVNQOgorICAgICAgYnJlYWs7CisKKyAgICBjYXNlIEhXX01TR19QT1dFUklOR19PRkY6CisgICAgICBoYW5kbGVQb3dlcmluZ09mZihicmwpOworICAgICAgYnJlYWs7CisKKyAgICBkZWZhdWx0OgorICAgICAgbG9nVW5leHBlY3RlZFBhY2tldCgmcGFja2V0LCBsZW5ndGgpOworICAgICAgYnJlYWs7CisgIH0KKworICByZXR1cm4gMTsKK30KKworc3RhdGljIGludAora2VlcFNlcmlhbEF3YWtlIChCcmFpbGxlRGlzcGxheSAqYnJsKSB7CisgIHJldHVybiB3cml0ZVNlcmlhbFJlcXVlc3QoYnJsLCBIV19NU0dfS0VFUF9BV0FLRSk7Cit9CisKK3N0YXRpYyBjb25zdCBQcm90b2NvbEVudHJ5IHNlcmlhbFByb3RvY29sID0geworICAubmFtZSA9ICJzZXJpYWwiLAorICAucHJvYmVEaXNwbGF5ID0gcHJvYmVTZXJpYWxEaXNwbGF5LAorICAud3JpdGVDZWxscyA9IHdyaXRlU2VyaWFsQ2VsbHMsCisgIC5wcm9jZXNzSW5wdXRQYWNrZXQgPSBwcm9jZXNzU2VyaWFsSW5wdXRQYWNrZXQsCisgIC5rZWVwQXdha2UgPSBrZWVwU2VyaWFsQXdha2UKK307CisKK3N0YXRpYyBzc2l6ZV90CityZWFkSGlkRmVhdHVyZSAoCisgIEJyYWlsbGVEaXNwbGF5ICpicmwsIEhpZFJlcG9ydElkZW50aWZpZXIgaWRlbnRpZmllciwKKyAgdW5zaWduZWQgY2hhciAqYnVmZmVyLCBzaXplX3Qgc2l6ZQorKSB7CisgIHNzaXplX3QgbGVuZ3RoID0gZ2lvR2V0SGlkRmVhdHVyZShicmwtPmdpb0VuZHBvaW50LCBpZGVudGlmaWVyLCBidWZmZXIsIHNpemUpOworCisgIGlmIChsZW5ndGggIT0gLTEpIHsKKyAgICBpZiAoKGxlbmd0aCA+IDApICYmICgqYnVmZmVyID09IGlkZW50aWZpZXIpKSB7CisgICAgICBsb2dJbnB1dFBhY2tldChidWZmZXIsIGxlbmd0aCk7CisgICAgICByZXR1cm4gbGVuZ3RoOworICAgIH0KKworICAgIGVycm5vID0gRUFHQUlOOworICB9CisKKyAgbG9nU3lzdGVtRXJyb3IoIkhJRCBmZWF0dXJlIHJlYWQiKTsKKyAgcmV0dXJuIC0xOworfQorCitzdGF0aWMgaW50Cit3cml0ZUhpZFJlcG9ydCAoQnJhaWxsZURpc3BsYXkgKmJybCwgY29uc3Qgdm9pZCAqZGF0YSwgc2l6ZV90IHNpemUpIHsKKyAgbG9nT3V0cHV0UGFja2V0KGRhdGEsIHNpemUpOworCisgIHsKKyAgICBzc2l6ZV90IHJlc3VsdCA9IGdpb1dyaXRlSGlkUmVwb3J0KGJybC0+Z2lvRW5kcG9pbnQsIGRhdGEsIHNpemUpOworICAgIGlmIChyZXN1bHQgIT0gLTEpIHJldHVybiAxOworICB9CisKKyAgbG9nU3lzdGVtRXJyb3IoIkhJRCByZXBvcnQgd3JpdGUiKTsKKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBCcmFpbGxlUGFja2V0VmVyaWZpZXJSZXN1bHQKK3ZlcmlmeUhpZFBhY2tldCAoCisgIEJyYWlsbGVEaXNwbGF5ICpicmwsCisgIHVuc2lnbmVkIGNoYXIgKmJ5dGVzLCBzaXplX3Qgc2l6ZSwKKyAgc2l6ZV90ICpsZW5ndGgsIHZvaWQgKmRhdGEKKykgeworICB1bnNpZ25lZCBjaGFyIGJ5dGUgPSBieXRlc1tzaXplLTFdOworCisgIHN3aXRjaCAoc2l6ZSkgeworICAgIGNhc2UgMToKKyAgICAgIHN3aXRjaCAoYnl0ZSkgeworICAgICAgICBjYXNlIEhXX1JFUF9GVFJfQ2FwYWJpbGl0aWVzOgorICAgICAgICAgICpsZW5ndGggPSBzaXplb2YoSFdfQ2FwYWJpbGl0aWVzUmVwb3J0KTsKKyAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIEhXX1JFUF9GVFJfU2V0dGluZ3M6CisgICAgICAgICAgKmxlbmd0aCA9IHNpemVvZihIV19TZXR0aW5nc1JlcG9ydCk7CisgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBIV19SRVBfRlRSX0NvbmZpZ3VyYXRpb246CisgICAgICAgICAgKmxlbmd0aCA9IHNpemVvZihIV19Db25maWd1cmF0aW9uUmVwb3J0KTsKKyAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIEhXX1JFUF9JTl9QcmVzc2VkS2V5czoKKyAgICAgICAgICAqbGVuZ3RoID0gYnJsLT5kYXRhLT5oaWQucHJlc3NlZEtleXMucmVwb3J0U2l6ZTsKKyAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIEhXX1JFUF9GVFJfS2VlcEF3YWtlOgorICAgICAgICAgICpsZW5ndGggPSBzaXplb2YoSFdfS2VlcEF3YWtlUmVwb3J0KTsKKyAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIEhXX1JFUF9JTl9Qb3dlcmluZ09mZjoKKyAgICAgICAgICAqbGVuZ3RoID0gc2l6ZW9mKEhXX1Bvd2VyaW5nT2ZmUmVwb3J0KTsKKyAgICAgICAgICBicmVhazsKKworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgIHJldHVybiBCUkxfUFZSX0lOVkFMSUQ7CisgICAgICB9CisgICAgICBicmVhazsKKworICAgIGRlZmF1bHQ6CisgICAgICBicmVhazsKKyAgfQorCisgIHJldHVybiBCUkxfUFZSX0lOQ0xVREU7Cit9CisKK3N0YXRpYyBzaXplX3QKK3JlYWRIaWRQYWNrZXQgKEJyYWlsbGVEaXNwbGF5ICpicmwsIHZvaWQgKmJ1ZmZlciwgc2l6ZV90IHNpemUpIHsKKyAgcmV0dXJuIHJlYWRCcmFpbGxlUGFja2V0KGJybCwgTlVMTCwgYnVmZmVyLCBzaXplLCB2ZXJpZnlIaWRQYWNrZXQsIE5VTEwpOworfQorCitzdGF0aWMgc2l6ZV90CitnZXRQcmVzc2VkS2V5c1JlcG9ydFNpemUgKEJyYWlsbGVEaXNwbGF5ICpicmwpIHsKKyAgeworICAgIHNpemVfdCBzaXplID0gZ2lvR2V0SGlkSW5wdXRTaXplKGJybC0+Z2lvRW5kcG9pbnQsIEhXX1JFUF9JTl9QcmVzc2VkS2V5cyk7CisgICAgaWYgKHNpemUpIHJldHVybiBzaXplOworICB9CisKKyAgeworICAgIHNpemVfdCBzaXplID0gYnJsLT5kYXRhLT5tb2RlbC0+cHJlc3NlZEtleXNSZXBvcnRTaXplOworICAgIGlmIChzaXplKSByZXR1cm4gc2l6ZTsKKyAgfQorCisgIHNpemVfdCBzaXplID0gMTsKKyAgc2l6ZSArPSBicmwtPnRleHRDb2x1bW5zOworICBzaXplICs9IFRIVU1CX0tFWV9DT1VOVDsKKyAgaWYgKGJybC0+ZGF0YS0+bW9kZWwtPmhhc0JyYWlsbGVLZXlzKSBzaXplICs9IEJSQUlMTEVfS0VZX0NPVU5UOworICBpZiAoYnJsLT5kYXRhLT5tb2RlbC0+aGFzQ29tbWFuZEtleXMpIHNpemUgKz0gQ09NTUFORF9LRVlfQ09VTlQ7CisgIGlmIChicmwtPmRhdGEtPm1vZGVsLT5oYXNKb3lzdGljaykgc2l6ZSArPSBKT1lTVElDS19LRVlfQ09VTlQ7CisgIGlmIChicmwtPmRhdGEtPm1vZGVsLT5oYXNTZWNvbmRUaHVtYktleXMpIHNpemUgKz0gVEhVTUJfS0VZX0NPVU5UOworICByZXR1cm4gc2l6ZTsKK30KKworc3RhdGljIGludAorcHJvYmVIaWREaXNwbGF5IChCcmFpbGxlRGlzcGxheSAqYnJsKSB7CisgIGJybC0+dGV4dENvbHVtbnMgPSAwOworCisgIGlmICghYnJsLT50ZXh0Q29sdW1ucykgeworICAgIHNpemVfdCBzaXplID0gZ2lvR2V0SGlkT3V0cHV0U2l6ZShicmwtPmdpb0VuZHBvaW50LCBIV19SRVBfT1VUX1dyaXRlQ2VsbHMpOworICAgIGlmIChzaXplID4gNCkgYnJsLT50ZXh0Q29sdW1ucyA9IHNpemUgLSA0OworICB9CisKKyAgaWYgKCFicmwtPnRleHRDb2x1bW5zKSB7CisgICAgSFdfQ2FwYWJpbGl0aWVzUmVwb3J0IGNhcGFiaWxpdGllczsKKyAgICB1bnNpZ25lZCBjaGFyICpjb25zdCBidWZmZXIgPSAodW5zaWduZWQgY2hhciAqKSZjYXBhYmlsaXRpZXM7CisgICAgY29uc3Qgc2l6ZV90IHNpemUgPSBzaXplb2YoY2FwYWJpbGl0aWVzKTsKKworICAgIHNzaXplX3QgbGVuZ3RoID0gcmVhZEhpZEZlYXR1cmUoYnJsLCBIV19SRVBfRlRSX0NhcGFiaWxpdGllcywgYnVmZmVyLCBzaXplKTsKKyAgICBpZiAobGVuZ3RoID09IC0xKSByZXR1cm4gMDsKKyAgICBtZW1zZXQoJmJ1ZmZlcltsZW5ndGhdLCAwLCAoc2l6ZSAtIGxlbmd0aCkpOworCisgICAgc2V0RmlybXdhcmVWZXJzaW9uKGJybCwKKyAgICAgIGdldERlY2ltYWxWYWx1ZSgmY2FwYWJpbGl0aWVzLnZlcnNpb24ubWFqb3IsIDEpLAorICAgICAgZ2V0RGVjaW1hbFZhbHVlKCZjYXBhYmlsaXRpZXMudmVyc2lvbi5taW5vciwgMSksCisgICAgICBnZXREZWNpbWFsVmFsdWUoJmNhcGFiaWxpdGllcy52ZXJzaW9uLmJ1aWxkWzBdLCAyKQorICAgICk7CisKKyAgICBicmwtPnRleHRDb2x1bW5zID0gY2FwYWJpbGl0aWVzLmNlbGxDb3VudDsKKyAgfQorCisgIHsKKyAgICB1bnNpZ25lZCBjaGFyICpzaXplID0gJmJybC0+ZGF0YS0+aGlkLnByZXNzZWRLZXlzLnJlcG9ydFNpemU7CisgICAgKnNpemUgPSBnZXRQcmVzc2VkS2V5c1JlcG9ydFNpemUoYnJsKTsKKworICAgIGxvZ01lc3NhZ2UoTE9HX0NBVEVHT1JZKEJSQUlMTEVfRFJJVkVSKSwKKyAgICAgICJwcmVzc2VkIGtleXMgcmVwb3J0IHNpemU6ICV1IiwgKnNpemUKKyAgICApOworICB9CisKKyAgaWYgKCFzZXRNb2RlbChicmwpKSByZXR1cm4gMDsKKyAgcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQKK3dyaXRlSGlkQ2VsbHMgKEJyYWlsbGVEaXNwbGF5ICpicmwsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmNlbGxzLCB1bnNpZ25lZCBjaGFyIGNvdW50KSB7CisgIHVuc2lnbmVkIGNoYXIgYnVmZmVyWzQgKyBjb3VudF07CisgIHVuc2lnbmVkIGNoYXIgKmJ5dGUgPSBidWZmZXI7CisKKyAgKmJ5dGUrKyA9IEhXX1JFUF9PVVRfV3JpdGVDZWxsczsKKyAgKmJ5dGUrKyA9IDE7CisgICpieXRlKysgPSAwOworICAqYnl0ZSsrID0gY291bnQ7CisgIGJ5dGUgPSBtZW1wY3B5KGJ5dGUsIGNlbGxzLCBjb3VudCk7CisKKyAgcmV0dXJuIHdyaXRlSGlkUmVwb3J0KGJybCwgYnVmZmVyLCBieXRlLWJ1ZmZlcik7Cit9CisKK3N0YXRpYyBpbnQKK3Byb2Nlc3NIaWRJbnB1dFBhY2tldCAoQnJhaWxsZURpc3BsYXkgKmJybCkgeworICB1bnNpZ25lZCBjaGFyIHBhY2tldFswWEZGXTsKKyAgc2l6ZV90IGxlbmd0aCA9IHJlYWRIaWRQYWNrZXQoYnJsLCBwYWNrZXQsIHNpemVvZihwYWNrZXQpKTsKKyAgaWYgKCFsZW5ndGgpIHJldHVybiAwOworICBicmwtPmRhdGEtPmlzT2ZmbGluZSA9IDA7CisKKyAgc3dpdGNoIChwYWNrZXRbMF0pIHsKKyAgICBjYXNlIEhXX1JFUF9JTl9QcmVzc2VkS2V5czogeworICAgICAgY29uc3QgdW5zaWduZWQgaW50IG9mZnNldCA9IDE7CisKKyAgICAgIGhhbmRsZVByZXNzZWRLZXlzQXJyYXkoYnJsLCBwYWNrZXQrb2Zmc2V0LCBsZW5ndGgtb2Zmc2V0KTsKKyAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2UgSFdfUkVQX0lOX1Bvd2VyaW5nT2ZmOgorICAgICAgaGFuZGxlUG93ZXJpbmdPZmYoYnJsKTsKKyAgICAgIGJyZWFrOworCisgICAgZGVmYXVsdDoKKyAgICAgIGxvZ1VuZXhwZWN0ZWRQYWNrZXQocGFja2V0LCBsZW5ndGgpOworICAgIGNhc2UgSFdfUkVQX0ZUUl9TZXR0aW5nczoKKyAgICBjYXNlIEhXX1JFUF9GVFJfQ29uZmlndXJhdGlvbjoKKyAgICAgIGJyZWFrOworICB9CisKKyAgcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQKK2tlZXBIaWRBd2FrZSAoQnJhaWxsZURpc3BsYXkgKmJybCkgeworICBIV19LZWVwQXdha2VSZXBvcnQgcmVwb3J0OworCisgIG1lbXNldCgmcmVwb3J0LCAwLCBzaXplb2YocmVwb3J0KSk7CisgIHJlcG9ydC5yZXBvcnRJZGVudGlmaWVyID0gSFdfUkVQX0ZUUl9LZWVwQXdha2U7CisKKyAgcmV0dXJuIHdyaXRlSGlkUmVwb3J0KGJybCwgJnJlcG9ydCwgc2l6ZW9mKHJlcG9ydCkpOworfQorCitzdGF0aWMgY29uc3QgUHJvdG9jb2xFbnRyeSBoaWRQcm90b2NvbCA9IHsKKyAgLm5hbWUgPSAiSElEIiwKKyAgLnByb2JlRGlzcGxheSA9IHByb2JlSGlkRGlzcGxheSwKKyAgLndyaXRlQ2VsbHMgPSB3cml0ZUhpZENlbGxzLAorICAucHJvY2Vzc0lucHV0UGFja2V0ID0gcHJvY2Vzc0hpZElucHV0UGFja2V0LAorICAua2VlcEF3YWtlID0ga2VlcEhpZEF3YWtlCit9OworCit0eXBlZGVmIHN0cnVjdCB7CisgIGNvbnN0IFByb3RvY29sRW50cnkgKnByb3RvY29sOworICBjb25zdCBNb2RlbEVudHJ5ICptb2RlbDsKK30gUmVzb3VyY2VEYXRhOworCitzdGF0aWMgY29uc3QgUmVzb3VyY2VEYXRhIHJlc291cmNlRGF0YV9zZXJpYWxfZ2VuZXJpYyA9IHsKKyAgLnByb3RvY29sID0gJnNlcmlhbFByb3RvY29sCit9OworCitzdGF0aWMgY29uc3QgUmVzb3VyY2VEYXRhIHJlc291cmNlRGF0YV9zZXJpYWxfQkkxNCA9IHsKKyAgLm1vZGVsID0gJm1vZGVsRW50cnlfQkkxNCwKKyAgLnByb3RvY29sID0gJnNlcmlhbFByb3RvY29sCit9OworCitzdGF0aWMgY29uc3QgUmVzb3VyY2VEYXRhIHJlc291cmNlRGF0YV9zZXJpYWxfQzIwID0geworICAubW9kZWwgPSAmbW9kZWxFbnRyeV9DMjAsCisgIC5wcm90b2NvbCA9ICZzZXJpYWxQcm90b2NvbAorfTsKKworc3RhdGljIGNvbnN0IFJlc291cmNlRGF0YSByZXNvdXJjZURhdGFfc2VyaWFsX000MCA9IHsKKyAgLm1vZGVsID0gJm1vZGVsRW50cnlfTTQwLAorICAucHJvdG9jb2wgPSAmc2VyaWFsUHJvdG9jb2wKK307CisKK3N0YXRpYyBjb25zdCBSZXNvdXJjZURhdGEgcmVzb3VyY2VEYXRhX3NlcmlhbF9OTFMgPSB7CisgIC5tb2RlbCA9ICZtb2RlbEVudHJ5X05MUywKKyAgLnByb3RvY29sID0gJnNlcmlhbFByb3RvY29sCit9OworCitzdGF0aWMgY29uc3QgUmVzb3VyY2VEYXRhIHJlc291cmNlRGF0YV9zZXJpYWxfb25lID0geworICAubW9kZWwgPSAmbW9kZWxFbnRyeV9vbmUsCisgIC5wcm90b2NvbCA9ICZzZXJpYWxQcm90b2NvbAorfTsKKworc3RhdGljIGNvbnN0IFJlc291cmNlRGF0YSByZXNvdXJjZURhdGFfSElEX2dlbmVyaWMgPSB7CisgIC5wcm90b2NvbCA9ICZoaWRQcm90b2NvbAorfTsKKworc3RhdGljIGNvbnN0IFJlc291cmNlRGF0YSByZXNvdXJjZURhdGFfSElEX3RvdWNoID0geworICAubW9kZWwgPSAmbW9kZWxFbnRyeV90b3VjaCwKKyAgLnByb3RvY29sID0gJmhpZFByb3RvY29sCit9OworCitzdGF0aWMgY29uc3QgUmVzb3VyY2VEYXRhIHJlc291cmNlRGF0YV9ISURfQzIwID0geworICAubW9kZWwgPSAmbW9kZWxFbnRyeV9DMjAsCisgIC5wcm90b2NvbCA9ICZoaWRQcm90b2NvbAorfTsKKworc3RhdGljIGNvbnN0IFJlc291cmNlRGF0YSByZXNvdXJjZURhdGFfSElEX000MCA9IHsKKyAgLm1vZGVsID0gJm1vZGVsRW50cnlfTTQwLAorICAucHJvdG9jb2wgPSAmaGlkUHJvdG9jb2wKK307CisKK3N0YXRpYyBjb25zdCBSZXNvdXJjZURhdGEgcmVzb3VyY2VEYXRhX0hJRF9OTFMgPSB7CisgIC5tb2RlbCA9ICZtb2RlbEVudHJ5X05MUywKKyAgLnByb3RvY29sID0gJmhpZFByb3RvY29sCit9OworCitzdGF0aWMgY29uc3QgUmVzb3VyY2VEYXRhIHJlc291cmNlRGF0YV9ISURfb25lID0geworICAubW9kZWwgPSAmbW9kZWxFbnRyeV9vbmUsCisgIC5wcm90b2NvbCA9ICZoaWRQcm90b2NvbAorfTsKKworc3RhdGljIGNvbnN0IFJlc291cmNlRGF0YSByZXNvdXJjZURhdGFfSElEX0JJNDBYID0geworICAubW9kZWwgPSAmbW9kZWxFbnRyeV9CSTQwWCwKKyAgLnByb3RvY29sID0gJmhpZFByb3RvY29sCit9OworCitzdGF0aWMgY29uc3QgUmVzb3VyY2VEYXRhIHJlc291cmNlRGF0YV9ISURfQkkyMFggPSB7CisgIC5tb2RlbCA9ICZtb2RlbEVudHJ5X0JJMjBYLAorICAucHJvdG9jb2wgPSAmaGlkUHJvdG9jb2wKK307CisKK3N0YXRpYyBpbnQKK2Nvbm5lY3RSZXNvdXJjZSAoQnJhaWxsZURpc3BsYXkgKmJybCwgY29uc3QgY2hhciAqaWRlbnRpZmllcikgeworICBzdGF0aWMgY29uc3QgU2VyaWFsUGFyYW1ldGVycyBzZXJpYWxQYXJhbWV0ZXJzID0geworICAgIFNFUklBTF9ERUZBVUxUX1BBUkFNRVRFUlMsCisgICAgLmJhdWQgPSAxMTUyMDAsCisgICAgLnBhcml0eSA9IFNFUklBTF9QQVJJVFlfRVZFTgorICB9OworCisgIEJFR0lOX1VTQl9DSEFOTkVMX0RFRklOSVRJT05TCisgICAgeyAvKiBCcmFpbGxpYW50IEJJIDMyLzQwLCBCcmFpbGxpYW50IEIgODAgKHNlcmlhbCBwcm90b2NvbCkgKi8KKyAgICAgIC52ZW5kb3I9MFgxQzcxLCAucHJvZHVjdD0wWEMwMDUsIAorICAgICAgLmNvbmZpZ3VyYXRpb249MSwgLmludGVyZmFjZT0xLCAuYWx0ZXJuYXRpdmU9MCwKKyAgICAgIC5pbnB1dEVuZHBvaW50PTIsIC5vdXRwdXRFbmRwb2ludD0zLAorICAgICAgLnNlcmlhbCA9ICZzZXJpYWxQYXJhbWV0ZXJzLAorICAgICAgLmRhdGEgPSAmcmVzb3VyY2VEYXRhX3NlcmlhbF9nZW5lcmljLAorICAgICAgLnJlc2V0RGV2aWNlID0gMQorICAgIH0sCisKKyAgICB7IC8qIEJyYWlsbGlhbnQgQkkgMTQgKHNlcmlhbCBwcm90b2NvbCkgKi8KKyAgICAgIC52ZW5kb3I9MFgxQzcxLCAucHJvZHVjdD0wWEMwMjEsIAorICAgICAgLmNvbmZpZ3VyYXRpb249MSwgLmludGVyZmFjZT0xLCAuYWx0ZXJuYXRpdmU9MCwKKyAgICAgIC5pbnB1dEVuZHBvaW50PTEsIC5vdXRwdXRFbmRwb2ludD0xLAorICAgICAgLnNlcmlhbCA9ICZzZXJpYWxQYXJhbWV0ZXJzLAorICAgICAgLmRhdGEgPSAmcmVzb3VyY2VEYXRhX3NlcmlhbF9CSTE0LAorICAgICAgLnJlc2V0RGV2aWNlID0gMQorICAgIH0sCisKKyAgICB7IC8qIEFQSCBDaGFtZWxlb24gMjAgKHNlcmlhbCBwcm90b2NvbCkgKi8KKyAgICAgIC52ZW5kb3I9MFgxQzcxLCAucHJvZHVjdD0wWEMxMDQsIAorICAgICAgLmNvbmZpZ3VyYXRpb249MSwgLmludGVyZmFjZT01LCAuYWx0ZXJuYXRpdmU9MCwKKyAgICAgIC5pbnB1dEVuZHBvaW50PTEwLCAub3V0cHV0RW5kcG9pbnQ9MTEsCisgICAgICAuc2VyaWFsID0gJnNlcmlhbFBhcmFtZXRlcnMsCisgICAgICAuZGF0YSA9ICZyZXNvdXJjZURhdGFfc2VyaWFsX0MyMCwKKyAgICAgIC5yZXNldERldmljZSA9IDEKKyAgICB9LAorCisgICAgeyAvKiBBUEggTWFudGlzIFE0MCAoc2VyaWFsIHByb3RvY29sKSAqLworICAgICAgLnZlbmRvcj0wWDFDNzEsIC5wcm9kdWN0PTBYQzExNCwgCisgICAgICAuY29uZmlndXJhdGlvbj0xLCAuaW50ZXJmYWNlPTUsIC5hbHRlcm5hdGl2ZT0wLAorICAgICAgLmlucHV0RW5kcG9pbnQ9MTAsIC5vdXRwdXRFbmRwb2ludD0xMSwKKyAgICAgIC5zZXJpYWwgPSAmc2VyaWFsUGFyYW1ldGVycywKKyAgICAgIC5kYXRhID0gJnJlc291cmNlRGF0YV9zZXJpYWxfTTQwLAorICAgICAgLnJlc2V0RGV2aWNlID0gMQorICAgIH0sCisKKyAgICB7IC8qIE5MUyBlUmVhZGVyIChzZXJpYWwgcHJvdG9jb2wpICovCisgICAgICAudmVuZG9yPTBYMUM3MSwgLnByb2R1Y3Q9MFhDRTA0LCAKKyAgICAgIC5jb25maWd1cmF0aW9uPTEsIC5pbnRlcmZhY2U9NSwgLmFsdGVybmF0aXZlPTAsCisgICAgICAuaW5wdXRFbmRwb2ludD0xMCwgLm91dHB1dEVuZHBvaW50PTExLAorICAgICAgLnNlcmlhbCA9ICZzZXJpYWxQYXJhbWV0ZXJzLAorICAgICAgLmRhdGEgPSAmcmVzb3VyY2VEYXRhX3NlcmlhbF9OTFMsCisgICAgICAucmVzZXREZXZpY2UgPSAxCisgICAgfSwKKworICAgIHsgLyogSHVtYW53YXJlIEJyYWlsbGVPbmUgKHNlcmlhbCBwcm90b2NvbCkgKi8KKyAgICAgIC52ZW5kb3I9MFgxQzcxLCAucHJvZHVjdD0wWEMxMjQsIAorICAgICAgLmNvbmZpZ3VyYXRpb249MSwgLmludGVyZmFjZT01LCAuYWx0ZXJuYXRpdmU9MCwKKyAgICAgIC5pbnB1dEVuZHBvaW50PTEwLCAub3V0cHV0RW5kcG9pbnQ9MTEsCisgICAgICAuc2VyaWFsID0gJnNlcmlhbFBhcmFtZXRlcnMsCisgICAgICAuZGF0YSA9ICZyZXNvdXJjZURhdGFfc2VyaWFsX29uZSwKKyAgICAgIC5yZXNldERldmljZSA9IDEKKyAgICB9LAorCisgICAgeyAvKiBub24tVG91Y2ggbW9kZWxzIChISUQgcHJvdG9jb2wpICovCisgICAgICAudmVuZG9yPTBYMUM3MSwgLnByb2R1Y3Q9MFhDMDA2LAorICAgICAgLmNvbmZpZ3VyYXRpb249MSwgLmludGVyZmFjZT0wLCAuYWx0ZXJuYXRpdmU9MCwKKyAgICAgIC5pbnB1dEVuZHBvaW50PTEsCisgICAgICAuZGF0YSA9ICZyZXNvdXJjZURhdGFfSElEX2dlbmVyaWMKKyAgICB9LAorCisgICAgeyAvKiBCcmFpbGxlTm90ZSBUb3VjaCAoSElEIHByb3RvY29sKSAqLworICAgICAgLnZlbmRvcj0wWDFDNzEsIC5wcm9kdWN0PTBYQzAwQSwKKyAgICAgIC5jb25maWd1cmF0aW9uPTEsIC5pbnRlcmZhY2U9MCwgLmFsdGVybmF0aXZlPTAsCisgICAgICAuaW5wdXRFbmRwb2ludD0xLAorICAgICAgLmRhdGEgPSAmcmVzb3VyY2VEYXRhX0hJRF90b3VjaAorICAgIH0sCisKKyAgICB7IC8qIEFQSCBDaGFtZWxlb24gMjAgKEhJRCBwcm90b2NvbCwgZmlybXdhcmUgMS4wKSAqLworICAgICAgLnZlbmRvcj0wWDFDNzEsIC5wcm9kdWN0PTBYQzEwMSwgCisgICAgICAuY29uZmlndXJhdGlvbj0xLCAuaW50ZXJmYWNlPTEsIC5hbHRlcm5hdGl2ZT0wLAorICAgICAgLmlucHV0RW5kcG9pbnQ9NCwgLm91dHB1dEVuZHBvaW50PTUsCisgICAgICAudmVyaWZ5SW50ZXJmYWNlID0gMSwKKyAgICAgIC5kYXRhID0gJnJlc291cmNlRGF0YV9ISURfQzIwLAorICAgICAgLnJlc2V0RGV2aWNlID0gMQorICAgIH0sCisKKyAgICB7IC8qIEFQSCBDaGFtZWxlb24gMjAgKEhJRCBwcm90b2NvbCwgZmlybXdhcmUgMS4xKSAqLworICAgICAgLnZlbmRvcj0wWDFDNzEsIC5wcm9kdWN0PTBYQzEwMSwgCisgICAgICAuY29uZmlndXJhdGlvbj0xLCAuaW50ZXJmYWNlPTAsIC5hbHRlcm5hdGl2ZT0wLAorICAgICAgLmlucHV0RW5kcG9pbnQ9MSwgLm91dHB1dEVuZHBvaW50PTIsCisgICAgICAudmVyaWZ5SW50ZXJmYWNlID0gMSwKKyAgICAgIC5kYXRhID0gJnJlc291cmNlRGF0YV9ISURfQzIwLAorICAgICAgLnJlc2V0RGV2aWNlID0gMQorICAgIH0sCisKKyAgICB7IC8qIEFQSCBNYW50aXMgUTQwIChISUQgcHJvdG9jb2wsIGZpcm13YXJlIDEuMCkgKi8KKyAgICAgIC52ZW5kb3I9MFgxQzcxLCAucHJvZHVjdD0wWEMxMTEsIAorICAgICAgLmNvbmZpZ3VyYXRpb249MSwgLmludGVyZmFjZT0xLCAuYWx0ZXJuYXRpdmU9MCwKKyAgICAgIC5pbnB1dEVuZHBvaW50PTQsIC5vdXRwdXRFbmRwb2ludD01LAorICAgICAgLnZlcmlmeUludGVyZmFjZSA9IDEsCisgICAgICAuZGF0YSA9ICZyZXNvdXJjZURhdGFfSElEX000MCwKKyAgICAgIC5yZXNldERldmljZSA9IDEKKyAgICB9LAorCisgICAgeyAvKiBBUEggTWFudGlzIFE0MCAoSElEIHByb3RvY29sLCBmaXJtd2FyZSAxLjEpICovCisgICAgICAudmVuZG9yPTBYMUM3MSwgLnByb2R1Y3Q9MFhDMTExLCAKKyAgICAgIC5jb25maWd1cmF0aW9uPTEsIC5pbnRlcmZhY2U9MCwgLmFsdGVybmF0aXZlPTAsCisgICAgICAuaW5wdXRFbmRwb2ludD0xLCAub3V0cHV0RW5kcG9pbnQ9MiwKKyAgICAgIC52ZXJpZnlJbnRlcmZhY2UgPSAxLAorICAgICAgLmRhdGEgPSAmcmVzb3VyY2VEYXRhX0hJRF9NNDAsCisgICAgICAucmVzZXREZXZpY2UgPSAxCisgICAgfSwKKworICAgIHsgLyogTkxTIGVSZWFkZXIgKEhJRCBwcm90b2NvbCwgZmlybXdhcmUgMS4wKSAqLworICAgICAgLnZlbmRvcj0wWDFDNzEsIC5wcm9kdWN0PTBYQ0UwMSwgCisgICAgICAuY29uZmlndXJhdGlvbj0xLCAuaW50ZXJmYWNlPTEsIC5hbHRlcm5hdGl2ZT0wLAorICAgICAgLmlucHV0RW5kcG9pbnQ9NCwgLm91dHB1dEVuZHBvaW50PTUsCisgICAgICAudmVyaWZ5SW50ZXJmYWNlID0gMSwKKyAgICAgIC5kYXRhID0gJnJlc291cmNlRGF0YV9ISURfTkxTLAorICAgICAgLnJlc2V0RGV2aWNlID0gMQorICAgIH0sCisKKyAgICB7IC8qIE5MUyBlUmVhZGVyIChISUQgcHJvdG9jb2wsIGZpcm13YXJlIDEuMSkgKi8KKyAgICAgIC52ZW5kb3I9MFgxQzcxLCAucHJvZHVjdD0wWENFMDEsIAorICAgICAgLmNvbmZpZ3VyYXRpb249MSwgLmludGVyZmFjZT0wLCAuYWx0ZXJuYXRpdmU9MCwKKyAgICAgIC5pbnB1dEVuZHBvaW50PTEsIC5vdXRwdXRFbmRwb2ludD0yLAorICAgICAgLnZlcmlmeUludGVyZmFjZSA9IDEsCisgICAgICAuZGF0YSA9ICZyZXNvdXJjZURhdGFfSElEX05MUywKKyAgICAgIC5yZXNldERldmljZSA9IDEKKyAgICB9LAorCisgICAgeyAvKiBIdW1hbndhcmUgQnJhaWxsZU9uZSAoSElEIHByb3RvY29sLCBmaXJtd2FyZSAxLjApICovCisgICAgICAudmVuZG9yPTBYMUM3MSwgLnByb2R1Y3Q9MFhDMTIxLCAKKyAgICAgIC5jb25maWd1cmF0aW9uPTEsIC5pbnRlcmZhY2U9MSwgLmFsdGVybmF0aXZlPTAsCisgICAgICAuaW5wdXRFbmRwb2ludD00LCAub3V0cHV0RW5kcG9pbnQ9NSwKKyAgICAgIC52ZXJpZnlJbnRlcmZhY2UgPSAxLAorICAgICAgLmRhdGEgPSAmcmVzb3VyY2VEYXRhX0hJRF9vbmUsCisgICAgICAucmVzZXREZXZpY2UgPSAxCisgICAgfSwKKworICAgIHsgLyogSHVtYW53YXJlIEJyYWlsbGVPbmUgKEhJRCBwcm90b2NvbCwgZmlybXdhcmUgMS4xKSAqLworICAgICAgLnZlbmRvcj0wWDFDNzEsIC5wcm9kdWN0PTBYQzEyMSwgCisgICAgICAuY29uZmlndXJhdGlvbj0xLCAuaW50ZXJmYWNlPTAsIC5hbHRlcm5hdGl2ZT0wLAorICAgICAgLmlucHV0RW5kcG9pbnQ9MSwgLm91dHB1dEVuZHBvaW50PTIsCisgICAgICAudmVyaWZ5SW50ZXJmYWNlID0gMSwKKyAgICAgIC5kYXRhID0gJnJlc291cmNlRGF0YV9ISURfb25lLAorICAgICAgLnJlc2V0RGV2aWNlID0gMQorICAgIH0sCisKKyAgICB7IC8qIEh1bWFud2FyZSBCcmFpbGxpYW50IEJJIDQwWCAoSElEIHByb3RvY29sLCBmaXJtd2FyZSAxLjApICovCisgICAgICAudmVuZG9yPTBYMUM3MSwgLnByb2R1Y3Q9MFhDMTMxLCAKKyAgICAgIC5jb25maWd1cmF0aW9uPTEsIC5pbnRlcmZhY2U9MSwgLmFsdGVybmF0aXZlPTAsCisgICAgICAuaW5wdXRFbmRwb2ludD00LCAub3V0cHV0RW5kcG9pbnQ9NSwKKyAgICAgIC52ZXJpZnlJbnRlcmZhY2UgPSAxLAorICAgICAgLmRhdGEgPSAmcmVzb3VyY2VEYXRhX0hJRF9CSTQwWCwKKyAgICAgIC5yZXNldERldmljZSA9IDEKKyAgICB9LAorCisgICAgeyAvKiBIdW1hbndhcmUgQnJhaWxsaWFudCBCSSA0MFggKEhJRCBwcm90b2NvbCwgZmlybXdhcmUgMS4xKSAqLworICAgICAgLnZlbmRvcj0wWDFDNzEsIC5wcm9kdWN0PTBYQzEzMSwgCisgICAgICAuY29uZmlndXJhdGlvbj0xLCAuaW50ZXJmYWNlPTAsIC5hbHRlcm5hdGl2ZT0wLAorICAgICAgLmlucHV0RW5kcG9pbnQ9MSwgLm91dHB1dEVuZHBvaW50PTIsCisgICAgICAudmVyaWZ5SW50ZXJmYWNlID0gMSwKKyAgICAgIC5kYXRhID0gJnJlc291cmNlRGF0YV9ISURfQkk0MFgsCisgICAgICAucmVzZXREZXZpY2UgPSAxCisgICAgfSwKKworICAgIHsgLyogSHVtYW53YXJlIEJyYWlsbGlhbnQgQkkgMjBYIChISUQgcHJvdG9jb2wsIGZpcm13YXJlIDEuMCkgKi8KKyAgICAgIC52ZW5kb3I9MFgxQzcxLCAucHJvZHVjdD0wWEMxNDEsIAorICAgICAgLmNvbmZpZ3VyYXRpb249MSwgLmludGVyZmFjZT0xLCAuYWx0ZXJuYXRpdmU9MCwKKyAgICAgIC5pbnB1dEVuZHBvaW50PTQsIC5vdXRwdXRFbmRwb2ludD01LAorICAgICAgLnZlcmlmeUludGVyZmFjZSA9IDEsCisgICAgICAuZGF0YSA9ICZyZXNvdXJjZURhdGFfSElEX0JJMjBYLAorICAgICAgLnJlc2V0RGV2aWNlID0gMQorICAgIH0sCisKKyAgICB7IC8qIEh1bWFud2FyZSBCcmFpbGxpYW50IEJJIDIwWCAoSElEIHByb3RvY29sLCBmaXJtd2FyZSAxLjEpICovCisgICAgICAudmVuZG9yPTBYMUM3MSwgLnByb2R1Y3Q9MFhDMTQxLCAKKyAgICAgIC5jb25maWd1cmF0aW9uPTEsIC5pbnRlcmZhY2U9MCwgLmFsdGVybmF0aXZlPTAsCisgICAgICAuaW5wdXRFbmRwb2ludD0xLCAub3V0cHV0RW5kcG9pbnQ9MiwKKyAgICAgIC52ZXJpZnlJbnRlcmZhY2UgPSAxLAorICAgICAgLmRhdGEgPSAmcmVzb3VyY2VEYXRhX0hJRF9CSTIwWCwKKyAgICAgIC5yZXNldERldmljZSA9IDEKKyAgICB9LAorICBFTkRfVVNCX0NIQU5ORUxfREVGSU5JVElPTlMKKworICBCRUdJTl9ISURfTU9ERUxfVEFCTEUKKyAgICB7IC5uYW1lID0gIkFQSCBDaGFtZWxlb24gMjAiLAorICAgICAgLmRhdGEgPSAmcmVzb3VyY2VEYXRhX0hJRF9DMjAsCisgICAgfSwKKworICAgIHsgLm5hbWUgPSAiQVBIIE1hbnRpcyBRNDAiLAorICAgICAgLmRhdGEgPSAmcmVzb3VyY2VEYXRhX0hJRF9NNDAsCisgICAgfSwKKworICAgIHsgLm5hbWUgPSAiTkxTIGVSZWFkZXIgSHVtYW53YXJlIiwKKyAgICAgIC5kYXRhID0gJnJlc291cmNlRGF0YV9ISURfTkxTLAorICAgIH0sCisKKyAgICB7IC5uYW1lID0gIkh1bWFud2FyZSBCcmFpbGxlT25lIiwKKyAgICAgIC5kYXRhID0gJnJlc291cmNlRGF0YV9ISURfb25lLAorICAgIH0sCisKKyAgICB7IC5uYW1lID0gIkJyYWlsbGlhbnQgQkkgNDBYIiwKKyAgICAgIC5kYXRhID0gJnJlc291cmNlRGF0YV9ISURfQkk0MFgsCisgICAgfSwKKworICAgIHsgLm5hbWUgPSAiQnJhaWxsaWFudCBCSSAyMFgiLAorICAgICAgLmRhdGEgPSAmcmVzb3VyY2VEYXRhX0hJRF9CSTIwWCwKKyAgICB9LAorICBFTkRfSElEX01PREVMX1RBQkxFCisKKyAgR2lvRGVzY3JpcHRvciBkZXNjcmlwdG9yOworICBnaW9Jbml0aWFsaXplRGVzY3JpcHRvcigmZGVzY3JpcHRvcik7CisKKyAgZGVzY3JpcHRvci5zZXJpYWwucGFyYW1ldGVycyA9ICZzZXJpYWxQYXJhbWV0ZXJzOworICBkZXNjcmlwdG9yLnNlcmlhbC5vcHRpb25zLmFwcGxpY2F0aW9uRGF0YSA9ICZyZXNvdXJjZURhdGFfc2VyaWFsX2dlbmVyaWM7CisgIGRlc2NyaXB0b3Iuc2VyaWFsLm9wdGlvbnMucmVhZHlEZWxheSA9IE9QRU5fUkVBRFlfREVMQVk7CisKKyAgZGVzY3JpcHRvci51c2IuY2hhbm5lbERlZmluaXRpb25zID0gdXNiQ2hhbm5lbERlZmluaXRpb25zOworICBkZXNjcmlwdG9yLnVzYi5vcHRpb25zLnJlYWR5RGVsYXkgPSBPUEVOX1JFQURZX0RFTEFZOworCisgIGRlc2NyaXB0b3IuYmx1ZXRvb3RoLmNoYW5uZWxOdW1iZXIgPSAxOworICBkZXNjcmlwdG9yLmJsdWV0b290aC5kaXNjb3ZlckNoYW5uZWwgPSAxOworICBkZXNjcmlwdG9yLmJsdWV0b290aC5vcHRpb25zLmFwcGxpY2F0aW9uRGF0YSA9ICZyZXNvdXJjZURhdGFfc2VyaWFsX2dlbmVyaWM7CisgIGRlc2NyaXB0b3IuYmx1ZXRvb3RoLm9wdGlvbnMucmVhZHlEZWxheSA9IE9QRU5fUkVBRFlfREVMQVk7CisKKyAgZGVzY3JpcHRvci5oaWQubW9kZWxUYWJsZSA9IGhpZE1vZGVsVGFibGU7CisKKyAgaWYgKGNvbm5lY3RCcmFpbGxlUmVzb3VyY2UoYnJsLCBpZGVudGlmaWVyLCAmZGVzY3JpcHRvciwgTlVMTCkpIHsKKyAgICBjb25zdCBSZXNvdXJjZURhdGEgKnJlc291cmNlRGF0YSA9IGdpb0dldEFwcGxpY2F0aW9uRGF0YShicmwtPmdpb0VuZHBvaW50KTsKKyAgICBicmwtPmRhdGEtPnByb3RvY29sID0gcmVzb3VyY2VEYXRhLT5wcm90b2NvbDsKKyAgICBicmwtPmRhdGEtPm1vZGVsID0gcmVzb3VyY2VEYXRhLT5tb2RlbDsKKyAgICByZXR1cm4gMTsKKyAgfQorCisgIHJldHVybiAwOworfQorCitzdGF0aWMgdm9pZAorZGlzY29ubmVjdFJlc291cmNlIChCcmFpbGxlRGlzcGxheSAqYnJsKSB7CisgIGRpc2Nvbm5lY3RCcmFpbGxlUmVzb3VyY2UoYnJsLCBOVUxMKTsKK30KKworc3RhdGljIGludAorYnJsX2NvbnN0cnVjdCAoQnJhaWxsZURpc3BsYXkgKmJybCwgY2hhciAqKnBhcmFtZXRlcnMsIGNvbnN0IGNoYXIgKmRldmljZSkgeworICBpZiAoKGJybC0+ZGF0YSA9IG1hbGxvYyhzaXplb2YoKmJybC0+ZGF0YSkpKSkgeworICAgIG1lbXNldChicmwtPmRhdGEsIDAsIHNpemVvZigqYnJsLT5kYXRhKSk7CisKKyAgICBpZiAoY29ubmVjdFJlc291cmNlKGJybCwgZGV2aWNlKSkgeworICAgICAgaWYgKGJybC0+ZGF0YS0+cHJvdG9jb2wtPnByb2JlRGlzcGxheShicmwpKSB7CisgICAgICAgIHNldEJyYWlsbGVLZXlUYWJsZShicmwsIGJybC0+ZGF0YS0+bW9kZWwtPmtleVRhYmxlRGVmaW5pdGlvbik7CisgICAgICAgIG1ha2VPdXRwdXRUYWJsZShkb3RzVGFibGVfSVNPMTE1NDhfMSk7CisgICAgICAgIGJybC0+ZGF0YS0+dGV4dC5yZXdyaXRlID0gMTsKKyAgICAgICAgcmV0dXJuIDE7CisgICAgICB9CisKKyAgICAgIGRpc2Nvbm5lY3RSZXNvdXJjZShicmwpOworICAgIH0KKworICAgIGZyZWUoYnJsLT5kYXRhKTsKKyAgICBicmwtPmRhdGEgPSBOVUxMOworICB9IGVsc2UgeworICAgIGxvZ01hbGxvY0Vycm9yKCk7CisgIH0KKworICByZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQKK2JybF9kZXN0cnVjdCAoQnJhaWxsZURpc3BsYXkgKmJybCkgeworICBkaXNjb25uZWN0UmVzb3VyY2UoYnJsKTsKKyAgZnJlZShicmwtPmRhdGEpOworfQorCitzdGF0aWMgaW50Citicmxfd3JpdGVXaW5kb3cgKEJyYWlsbGVEaXNwbGF5ICpicmwsIGNvbnN0IHdjaGFyX3QgKnRleHQpIHsKKyAgY29uc3Qgc2l6ZV90IGNvdW50ID0gYnJsLT50ZXh0Q29sdW1uczsKKworICBpZiAoY2VsbHNIYXZlQ2hhbmdlZChicmwtPmRhdGEtPnRleHQuY2VsbHMsIGJybC0+YnVmZmVyLCBjb3VudCwgTlVMTCwgTlVMTCwgJmJybC0+ZGF0YS0+dGV4dC5yZXdyaXRlKSkgeworICAgIHVuc2lnbmVkIGNoYXIgY2VsbHNbY291bnRdOworCisgICAgdHJhbnNsYXRlT3V0cHV0Q2VsbHMoY2VsbHMsIGJybC0+ZGF0YS0+dGV4dC5jZWxscywgY291bnQpOworICAgIGlmICghYnJsLT5kYXRhLT5wcm90b2NvbC0+d3JpdGVDZWxscyhicmwsIGNlbGxzLCBjb3VudCkpIHJldHVybiAwOworICB9CisKKyAgcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQKK2JybF9yZWFkQ29tbWFuZCAoQnJhaWxsZURpc3BsYXkgKmJybCwgS2V5VGFibGVDb21tYW5kQ29udGV4dCBjb250ZXh0KSB7CisgIHdoaWxlIChicmwtPmRhdGEtPnByb3RvY29sLT5wcm9jZXNzSW5wdXRQYWNrZXQoYnJsKSk7CisgIGlmIChlcnJubyAhPSBFQUdBSU4pIHJldHVybiBCUkxfQ01EX1JFU1RBUlRCUkw7CisgIGlmIChicmwtPmRhdGEtPmlzT2ZmbGluZSkgcmV0dXJuIEJSTF9DTURfT0ZGTElORTsKKyAgcmV0dXJuIEVPRjsKK30KZGlmZiAtLWdpdCBhL0RyaXZlcnMvQnJhaWxsZS9IdW1hbldhcmUvYnJsZGVmcy1ody5oIGIvRHJpdmVycy9CcmFpbGxlL0h1bWFuV2FyZS9icmxkZWZzLWh3LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWM5ZmE1OAotLS0gL2Rldi9udWxsCisrKyBiL0RyaXZlcnMvQnJhaWxsZS9IdW1hbldhcmUvYnJsZGVmcy1ody5oCkBAIC0wLDAgKzEsMTg0IEBACisvKgorICogQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyAqICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyAqCisgKiBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorICoKKyAqIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyAqCisgKiBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisgKi8KKworI2lmbmRlZiBCUkxUVFlfSU5DTFVERURfSFdfQlJMREVGUworI2RlZmluZSBCUkxUVFlfSU5DTFVERURfSFdfQlJMREVGUworCit0eXBlZGVmIGVudW0geworICBIV19NU0dfSU5JVCAgICAgICAgICAgICAgICAgID0gMFgwMCwKKyAgSFdfTVNHX0lOSVRfUkVTUCAgICAgICAgICAgICA9IDBYMDEsCisgIEhXX01TR19ESVNQTEFZICAgICAgICAgICAgICAgPSAwWDAyLAorICBIV19NU0dfR0VUX0tFWVMgICAgICAgICAgICAgID0gMFgwMywKKyAgSFdfTVNHX0tFWVMgICAgICAgICAgICAgICAgICA9IDBYMDQsCisgIEhXX01TR19LRVlfRE9XTiAgICAgICAgICAgICAgPSAwWDA1LAorICBIV19NU0dfS0VZX1VQICAgICAgICAgICAgICAgID0gMFgwNiwKKyAgSFdfTVNHX0ZJUk1XQVJFX1VQREFURSAgICAgICA9IDBYMDcsCisgIEhXX01TR19GSVJNV0FSRV9SRVNQICAgICAgICAgPSAwWDA4LAorICBIV19NU0dfQ09ORklHVVJBVElPTl9VUERBVEUgID0gMFgwOSwKKyAgSFdfTVNHX0NPTkZJR1VSQVRJT05fUkVTUCAgICA9IDBYMEEsCisgIEhXX01TR19HRVRfQ09ORklHVVJBVElPTiAgICAgPSAwWDBCLAorICBIV19NU0dfR0VUX0ZJUk1XQVJFX1ZFUlNJT04gID0gMFgwQywKKyAgSFdfTVNHX0ZJUk1XQVJFX1ZFUlNJT05fUkVTUCA9IDBYMEQsCisgIEhXX01TR19LRUVQX0FXQUtFICAgICAgICAgICAgPSAwWDBFLAorICBIV19NU0dfS0VFUF9BV0FLRV9SRVNQICAgICAgID0gMFgwRiwKKyAgSFdfTVNHX1BPV0VSSU5HX09GRiAgICAgICAgICA9IDBYMTAKK30gSFdfTWVzc2FnZVR5cGU7CisKK3R5cGVkZWYgZW51bSB7CisgIEhXX01PREVMX0hXX0JSQUlMTEVfTk9URV9UT1VDSCA9IDBYMTAsCisgIEhXX01PREVMX0FQSF9DSEFNRUxFT05fMjAgPSAwWDExLAorICBIV19NT0RFTF9BUEhfTUFOVElTX1E0MCA9IDBYMTIsCisgIEhXX01PREVMX05MU19FUkVBREVSID0gMFgxMywKKyAgSFdfTU9ERUxfSFdfQlJBSUxMRV9PTkUgPSAwWDE0LAorfSBIV19Nb2RlbElkZW50aWZpZXI7CisKK3R5cGVkZWYgdW5pb24geworICB1bnNpZ25lZCBjaGFyIGJ5dGVzWzMgKyAwWEZGXTsKKworICBzdHJ1Y3QgeworICAgIHVuc2lnbmVkIGNoYXIgaGVhZGVyOworICAgIHVuc2lnbmVkIGNoYXIgdHlwZTsKKyAgICB1bnNpZ25lZCBjaGFyIGxlbmd0aDsKKworICAgIHVuaW9uIHsKKyAgICAgIHVuc2lnbmVkIGNoYXIgYnl0ZXNbMFhGRl07CisKKyAgICAgIHN0cnVjdCB7CisgICAgICAgIHVuc2lnbmVkIGNoYXIgc3RpbGxJbml0aWFsaXppbmc7CisgICAgICAgIHVuc2lnbmVkIGNoYXIgbW9kZWxJZGVudGlmaWVyOworICAgICAgICB1bnNpZ25lZCBjaGFyIGNlbGxDb3VudDsKKyAgICAgIH0gUEFDS0VEIGluaXQ7CisKKyAgICAgIHN0cnVjdCB7CisgICAgICAgIHVuc2lnbmVkIGNoYXIgaWQ7CisgICAgICB9IFBBQ0tFRCBrZXk7CisKKyAgICAgIHN0cnVjdCB7CisgICAgICAgIHVuc2lnbmVkIGNoYXIgaGF2ZTsKKyAgICAgICAgdW5zaWduZWQgY2hhciBtYWpvcjsKKyAgICAgICAgdW5zaWduZWQgY2hhciBtaW5vcjsKKyAgICAgICAgdW5zaWduZWQgY2hhciBidWlsZDsKKyAgICAgIH0gUEFDS0VEIGZpcm13YXJlVmVyc2lvbjsKKyAgICB9IGRhdGE7CisgIH0gUEFDS0VEIGZpZWxkczsKK30gSFdfUGFja2V0OworCit0eXBlZGVmIGVudW0geworICBIV19SRVBfRlRSX0NhcGFiaWxpdGllcyAgPSAxLAorICBIV19SRVBfRlRSX1NldHRpbmdzICAgICAgPSAyLAorICBIV19SRVBfRlRSX0NvbmZpZ3VyYXRpb24gPSAzLAorICBIV19SRVBfSU5fUHJlc3NlZEtleXMgICAgPSA0LAorICBIV19SRVBfT1VUX1dyaXRlQ2VsbHMgICAgPSA1LAorICBIV19SRVBfRlRSX0tlZXBBd2FrZSAgICAgPSA2LAorICBIV19SRVBfSU5fUG93ZXJpbmdPZmYgICAgPSA3Cit9IEhXX1JlcG9ydElkZW50aWZpZXI7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgdW5zaWduZWQgY2hhciByZXBvcnRJZGVudGlmaWVyOworICBjaGFyIHN5c3RlbUxhbmd1YWdlWzJdOworCisgIHN0cnVjdCB7CisgICAgY2hhciBtYWpvcjsKKyAgICBjaGFyIG1pbm9yOworICAgIGNoYXIgYnVpbGRbMl07CisgIH0gdmVyc2lvbjsKKworICBjaGFyIHNlcmlhbE51bWJlclsxNl07CisgIHVuc2lnbmVkIGNoYXIgemVybzsKKyAgdW5zaWduZWQgY2hhciBjZWxsQ291bnQ7CisgIHVuc2lnbmVkIGNoYXIgY2VsbFR5cGU7CisgIHVuc2lnbmVkIGNoYXIgcGFkWzEzXTsKK30gSFdfQ2FwYWJpbGl0aWVzUmVwb3J0OworCit0eXBlZGVmIHN0cnVjdCB7CisgIHVuc2lnbmVkIGNoYXIgcmVwb3J0SWRlbnRpZmllcjsKKyAgdW5zaWduZWQgY2hhciBkb3RQcmVzc3VyZTsKK30gSFdfU2V0dGluZ3NSZXBvcnQ7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgdW5zaWduZWQgY2hhciByZXBvcnRJZGVudGlmaWVyOworICB1bnNpZ25lZCBjaGFyIGZpbGwxOworICB1bnNpZ25lZCBjaGFyIGZpbGwyOworICB1bnNpZ25lZCBjaGFyIGNlbGxDb3VudDsKKworICBzdHJ1Y3QgeworICAgIHVuc2lnbmVkIGNoYXIgZmlyc3RJbmRleDsKKyAgICB1bnNpZ25lZCBjaGFyIGxhc3RJbmRleDsKKyAgfSBwcmltYXJ5Um91dGluZ0tleXM7CisKKyAgc3RydWN0IHsKKyAgICB1bnNpZ25lZCBjaGFyIGZpcnN0SW5kZXg7CisgICAgdW5zaWduZWQgY2hhciBsYXN0SW5kZXg7CisgIH0gc2Vjb25kYXJ5Um91dGluZ0tleXM7Cit9IEhXX0NvbmZpZ3VyYXRpb25SZXBvcnQ7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgdW5zaWduZWQgY2hhciByZXBvcnRJZGVudGlmaWVyOworICB1bnNpZ25lZCBjaGFyIGZpbGw7Cit9IEhXX0tlZXBBd2FrZVJlcG9ydDsKKwordHlwZWRlZiBzdHJ1Y3QgeworICB1bnNpZ25lZCBjaGFyIHJlcG9ydElkZW50aWZpZXI7CisgIHVuc2lnbmVkIGNoYXIgZmlsbDsKK30gSFdfUG93ZXJpbmdPZmZSZXBvcnQ7CisKK3R5cGVkZWYgZW51bSB7CisgIEhXX0tFWV9SZXNldCA9IDEsCisKKyAgSFdfS0VZX0RvdDEgPSAyLAorICBIV19LRVlfRG90MiA9IDMsCisgIEhXX0tFWV9Eb3QzID0gNCwKKyAgSFdfS0VZX0RvdDQgPSA1LAorICBIV19LRVlfRG90NSA9IDYsCisgIEhXX0tFWV9Eb3Q2ID0gNywKKyAgSFdfS0VZX0RvdDcgPSA4LAorICBIV19LRVlfRG90OCA9IDksCisgIEhXX0tFWV9TcGFjZSA9IDEwLAorCisgIEhXX0tFWV9Db21tYW5kMSA9IDExLAorICBIV19LRVlfQ29tbWFuZDIgPSAxMiwKKyAgSFdfS0VZX0NvbW1hbmQzID0gMTMsCisgIEhXX0tFWV9Db21tYW5kNCA9IDE0LAorICBIV19LRVlfQ29tbWFuZDUgPSAxNSwKKyAgSFdfS0VZX0NvbW1hbmQ2ID0gMTYsCisKKyAgSFdfS0VZX1RodW1iUHJldmlvdXMgPSAxNywKKyAgSFdfS0VZX1RodW1iTGVmdCA9IDE4LAorICBIV19LRVlfVGh1bWJSaWdodCA9IDE5LAorICBIV19LRVlfVGh1bWJOZXh0ID0gMjAsCisKKyAgSFdfS0VZX1VwID0gMjEsCisgIEhXX0tFWV9Eb3duID0gMjIsCisgIEhXX0tFWV9MZWZ0ID0gMjMsCisgIEhXX0tFWV9SaWdodCA9IDI0LAorICBIV19LRVlfQWN0aW9uID0gMjUsCisKKyAgSFdfS0VZX0NBTF9PSyA9IDMwLAorICBIV19LRVlfQ0FMX0ZBSUwgPSAzMSwKKyAgSFdfS0VZX0NBTF9FTVBUWSA9IDMyLAorICBIV19LRVlfQ0FMX1JFU0VUID0gMzQsCisKKyAgSFdfS0VZX1JPVVRJTkcgPSA4MAorfSBIV19OYXZpZ2F0aW9uS2V5OworCit0eXBlZGVmIGVudW0geworICBIV19HUlBfTmF2aWdhdGlvbktleXMgPSAwLAorICBIV19HUlBfUm91dGluZ0tleXMKK30gSFdfS2V5R3JvdXA7CisKKyNlbmRpZiAvKiBCUkxUVFlfSU5DTFVERURfSFdfQlJMREVGUyAqLyAKZGlmZiAtLWdpdCBhL0RyaXZlcnMvQnJhaWxsZS9JbmNlcHRvci9NYWtlZmlsZS5pbiBiL0RyaXZlcnMvQnJhaWxsZS9JbmNlcHRvci9NYWtlZmlsZS5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZTgyZGNkCi0tLSAvZGV2L251bGwKKysrIGIvRHJpdmVycy9CcmFpbGxlL0luY2VwdG9yL01ha2VmaWxlLmluCkBAIC0wLDAgKzEsMjggQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyMgICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisjCisjIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyMKKyMgQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitEUklWRVJfQ09ERSA9IGljCitEUklWRVJfTkFNRSA9IEluY2VwdG9yCitEUklWRVJfVVNBR0UgPSBCcmFpbGxlTWUgKDIwKQorRFJJVkVSX1ZFUlNJT04gPSAKK0RSSVZFUl9ERVZFTE9QRVJTID0gRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPiwgVmlwdWwgS3V0ZSA8dmlwdWwua3V0ZUBnbWFpbC5jb20+CitpbmNsdWRlICQoU1JDX1RPUClicmFpbGxlLm1rCisKK2JyYWlsbGUuJE86CisJJChDQykgJChCUkxfQ0ZMQUdTKSAtYyAkKFNSQ19ESVIpL2JyYWlsbGUuYworCmRpZmYgLS1naXQgYS9Ecml2ZXJzL0JyYWlsbGUvSW5jZXB0b3IvYnJhaWxsZS5jIGIvRHJpdmVycy9CcmFpbGxlL0luY2VwdG9yL2JyYWlsbGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYTk0OWRhCi0tLSAvZGV2L251bGwKKysrIGIvRHJpdmVycy9CcmFpbGxlL0luY2VwdG9yL2JyYWlsbGUuYwpAQCAtMCwwICsxLDYyNiBAQAorLyoKKyAqIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisgKiAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisgKgorICogQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKKyNpbmNsdWRlICJwcm9sb2d1ZS5oIgorCisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKworI2luY2x1ZGUgImxvZy5oIgorCisjaW5jbHVkZSAiYnJsX2RyaXZlci5oIgorI2luY2x1ZGUgImJybGRlZnMtaWMuaCIKKworI2RlZmluZSBQUk9CRV9SRVRSWV9MSU1JVCAyCisjZGVmaW5lIFBST0JFX0lOUFVUX1RJTUVPVVQgMTAwMAorI2RlZmluZSBNQVhJTVVNX1RFWFRfQ0VMTFMgMFhGRgorCitCRUdJTl9LRVlfTkFNRV9UQUJMRShjb21tb24pCisgIEtFWV9OQU1FX0VOVFJZKElDX0tFWV9Eb3QxLCAiRG90MSIpLAorICBLRVlfTkFNRV9FTlRSWShJQ19LRVlfRG90MiwgIkRvdDIiKSwKKyAgS0VZX05BTUVfRU5UUlkoSUNfS0VZX0RvdDMsICJEb3QzIiksCisgIEtFWV9OQU1FX0VOVFJZKElDX0tFWV9Eb3Q0LCAiRG90NCIpLAorICBLRVlfTkFNRV9FTlRSWShJQ19LRVlfRG90NSwgIkRvdDUiKSwKKyAgS0VZX05BTUVfRU5UUlkoSUNfS0VZX0RvdDYsICJEb3Q2IiksCisgIEtFWV9OQU1FX0VOVFJZKElDX0tFWV9Eb3Q3LCAiRG90NyIpLAorICBLRVlfTkFNRV9FTlRSWShJQ19LRVlfRG90OCwgIkRvdDgiKSwKKworICBLRVlfTkFNRV9FTlRSWShJQ19LRVlfU3BhY2UsICJTcGFjZSIpLAorICBLRVlfTkFNRV9FTlRSWShJQ19LRVlfTW92ZVVwLCAiTW92ZVVwIiksCisgIEtFWV9OQU1FX0VOVFJZKElDX0tFWV9Nb3ZlRG93biwgIk1vdmVEb3duIiksCisgIEtFWV9OQU1FX0VOVFJZKElDX0tFWV9QYW5MZWZ0LCAiUGFuTGVmdCIpLAorICBLRVlfTkFNRV9FTlRSWShJQ19LRVlfUGFuUmlnaHQsICJQYW5SaWdodCIpLAorCisgIEtFWV9HUk9VUF9FTlRSWShJQ19HUlBfUm91dGluZ0tleXMsICJSb3V0aW5nS2V5IiksCitFTkRfS0VZX05BTUVfVEFCTEUKKworQkVHSU5fS0VZX05BTUVfVEFCTEVTKGJiKQorICBLRVlfTkFNRV9UQUJMRShjb21tb24pLAorRU5EX0tFWV9OQU1FX1RBQkxFUworCitCRUdJTl9LRVlfTkFNRV9UQUJMRVMobnZkYSkKKyAgS0VZX05BTUVfVEFCTEUoY29tbW9uKSwKK0VORF9LRVlfTkFNRV9UQUJMRVMKKworREVGSU5FX0tFWV9UQUJMRShiYikKK0RFRklORV9LRVlfVEFCTEUobnZkYSkKKworQkVHSU5fS0VZX1RBQkxFX0xJU1QKKyAgJktFWV9UQUJMRV9ERUZJTklUSU9OKGJiKSwKKyAgJktFWV9UQUJMRV9ERUZJTklUSU9OKG52ZGEpLAorRU5EX0tFWV9UQUJMRV9MSVNUCisKK3R5cGVkZWYgc3RydWN0IHsKKyAgY29uc3QgS2V5VGFibGVEZWZpbml0aW9uICprZXlUYWJsZURlZmluaXRpb247CisgIHZvaWQgKCpyZW1hcEtleU51bWJlcnMpIChLZXlOdW1iZXJTZXQgKmtleXMpOworICB1bnNpZ25lZCBhZGp1c3RSb3V0aW5nS2V5OjE7CisKKyAgc3RydWN0IHsKKyAgICBjb25zdCBLZXlOdW1iZXJTZXRNYXBFbnRyeSAqZW50cmllczsKKyAgICBzaXplX3QgY291bnQ7CisgIH0ga2V5TnVtYmVyU2V0TWFwOworfSBJbnB1dE91dHB1dERhdGE7CisKK3N0cnVjdCBCcmFpbGxlRGF0YVN0cnVjdCB7CisgIGNvbnN0IElucHV0T3V0cHV0RGF0YSAqaW87CisgIEtleU51bWJlclNldE1hcCAqa2V5TnVtYmVyU2V0TWFwOworCisgIHN0cnVjdCB7CisgICAgdW5zaWduZWQgY2hhciByZXdyaXRlOworICAgIHVuc2lnbmVkIGNoYXIgY2VsbHNbTUFYSU1VTV9URVhUX0NFTExTXTsKKyAgfSBicmFpbGxlOworCisgIHN0cnVjdCB7CisgICAgdW5zaWduZWQgY2hhciByZXdyaXRlOworICAgIHdjaGFyX3QgY2hhcmFjdGVyc1tNQVhJTVVNX1RFWFRfQ0VMTFNdOworICB9IHRleHQ7CisKKyAgc3RydWN0IHsKKyAgICB1bnNpZ25lZCBjaGFyIHJld3JpdGU7CisgICAgaW50IHBvc2l0aW9uOworICB9IGN1cnNvcjsKK307CisKKyNkZWZpbmUgS0VZX0JJVF9Eb3QxIEtFWV9OVU1CRVJfQklUKElDX0tFWV9Eb3QxKQorI2RlZmluZSBLRVlfQklUX0RvdDIgS0VZX05VTUJFUl9CSVQoSUNfS0VZX0RvdDIpCisjZGVmaW5lIEtFWV9CSVRfRG90MyBLRVlfTlVNQkVSX0JJVChJQ19LRVlfRG90MykKKyNkZWZpbmUgS0VZX0JJVF9Eb3Q0IEtFWV9OVU1CRVJfQklUKElDX0tFWV9Eb3Q0KQorI2RlZmluZSBLRVlfQklUX0RvdDUgS0VZX05VTUJFUl9CSVQoSUNfS0VZX0RvdDUpCisjZGVmaW5lIEtFWV9CSVRfRG90NiBLRVlfTlVNQkVSX0JJVChJQ19LRVlfRG90NikKKyNkZWZpbmUgS0VZX0JJVF9Eb3Q3IEtFWV9OVU1CRVJfQklUKElDX0tFWV9Eb3Q3KQorI2RlZmluZSBLRVlfQklUX0RvdDggS0VZX05VTUJFUl9CSVQoSUNfS0VZX0RvdDgpCisKKyNkZWZpbmUgS0VZX0JJVF9TcGFjZSBLRVlfTlVNQkVSX0JJVChJQ19LRVlfU3BhY2UpCisjZGVmaW5lIEtFWV9CSVRfTW92ZVVwIEtFWV9OVU1CRVJfQklUKElDX0tFWV9Nb3ZlVXApCisjZGVmaW5lIEtFWV9CSVRfTW92ZURvd24gS0VZX05VTUJFUl9CSVQoSUNfS0VZX01vdmVEb3duKQorI2RlZmluZSBLRVlfQklUX1BhbkxlZnQgS0VZX05VTUJFUl9CSVQoSUNfS0VZX1BhbkxlZnQpCisjZGVmaW5lIEtFWV9CSVRfUGFuUmlnaHQgS0VZX05VTUJFUl9CSVQoSUNfS0VZX1BhblJpZ2h0KQorI2RlZmluZSBLRVlfQklUX0JhY2sgS0VZX05VTUJFUl9CSVQoSUNfS0VZX0JhY2spCisjZGVmaW5lIEtFWV9CSVRfRW50ZXIgS0VZX05VTUJFUl9CSVQoSUNfS0VZX0VudGVyKQorCitzdGF0aWMgdm9pZAorcmVtYXBLZXlOdW1iZXJzX0JyYWlsbGVCYWNrIChLZXlOdW1iZXJTZXQgKmtleXMpIHsKKyAgc3RhdGljIGNvbnN0IEtleU51bWJlck1hcEVudHJ5IG1hcFtdID0geworICAgIHsudG89SUNfS0VZX01vdmVVcCAgLCAuZnJvbT1JQ19LRVlfTW92ZURvd259LAorICAgIHsudG89SUNfS0VZX01vdmVEb3duLCAuZnJvbT1JQ19LRVlfUGFuTGVmdCB9LAorICAgIHsudG89SUNfS0VZX1BhbkxlZnQgLCAuZnJvbT1JQ19LRVlfQmFjayAgICB9LAorICAgIHsudG89SUNfS0VZX1BhblJpZ2h0LCAuZnJvbT1JQ19LRVlfRW50ZXIgICB9LAorICAgIHsudG89SUNfS0VZX0JhY2sgICAgLCAuZnJvbT1LVEJfS0VZX0FOWSAgICB9LAorICAgIHsudG89SUNfS0VZX0VudGVyICAgLCAuZnJvbT1LVEJfS0VZX0FOWSAgICB9LAorICB9OworCisgIHJlbWFwS2V5TnVtYmVycyhrZXlzLCBtYXAsIEFSUkFZX0NPVU5UKG1hcCkpOworfQorCitzdGF0aWMgY29uc3QgS2V5TnVtYmVyU2V0TWFwRW50cnkga2V5TnVtYmVyU2V0TWFwX0JyYWlsbGVCYWNrW10gPSB7CisgIHsgLnRvID0gS0VZX0JJVF9Eb3Q3LAorICAgIC5mcm9tID0gS0VZX0JJVF9TcGFjZSB8IEtFWV9CSVRfRG90NworICB9LAorCisgIHsgLnRvID0gS0VZX0JJVF9Eb3Q4LAorICAgIC5mcm9tID0gS0VZX0JJVF9TcGFjZSB8IEtFWV9CSVRfRG90OAorICB9LAorCisgIHsgLnRvID0gS0VZX0JJVF9TcGFjZSB8IEtFWV9CSVRfRG90MiB8IEtFWV9CSVRfRG90NCwKKyAgICAuZnJvbSA9IEtFWV9CSVRfU3BhY2UgfCBLRVlfQklUX0RvdDEgfCBLRVlfQklUX0RvdDIgfCBLRVlfQklUX0RvdDQgfCBLRVlfQklUX0RvdDUKKyAgfSwKKworICB7IC50byA9IEtFWV9CSVRfU3BhY2UgfCBLRVlfQklUX0RvdDQgfCBLRVlfQklUX0RvdDYsCisgICAgLmZyb20gPSBLRVlfQklUX1NwYWNlIHwgS0VZX0JJVF9Eb3QxIHwgS0VZX0JJVF9Eb3QzIHwgS0VZX0JJVF9Eb3Q0IHwgS0VZX0JJVF9Eb3Q1CisgIH0sCisKKyAgeyAudG8gPSBLRVlfQklUX0RvdDcgfCBLRVlfQklUX0RvdDEgfCBLRVlfQklUX0RvdDIgfCBLRVlfQklUX0RvdDQsCisgICAgLmZyb20gPSBLRVlfQklUX1NwYWNlIHwgS0VZX0JJVF9Eb3QxIHwgS0VZX0JJVF9Eb3Q0IHwgS0VZX0JJVF9Eb3Q3CisgIH0sCisKKyAgeyAudG8gPSBLRVlfQklUX0RvdDggfCBLRVlfQklUX0RvdDEgfCBLRVlfQklUX0RvdDIgfCBLRVlfQklUX0RvdDQsCisgICAgLmZyb20gPSBLRVlfQklUX1NwYWNlIHwgS0VZX0JJVF9Eb3QxIHwgS0VZX0JJVF9Eb3Q0CisgIH0sCisKKyAgeyAudG8gPSBLRVlfQklUX0RvdDcgfCBLRVlfQklUX0RvdDEgfCBLRVlfQklUX0RvdDIgfCBLRVlfQklUX0RvdDMsCisgICAgLmZyb20gPSBLRVlfQklUX1NwYWNlIHwgS0VZX0JJVF9Eb3QyIHwgS0VZX0JJVF9Eb3Q0IHwgS0VZX0JJVF9Eb3Q3CisgIH0sCisKKyAgeyAudG8gPSBLRVlfQklUX0RvdDggfCBLRVlfQklUX0RvdDEgfCBLRVlfQklUX0RvdDIgfCBLRVlfQklUX0RvdDMsCisgICAgLmZyb20gPSBLRVlfQklUX1NwYWNlIHwgS0VZX0JJVF9Eb3QyIHwgS0VZX0JJVF9Eb3Q0CisgIH0sCisKKyAgeyAudG8gPSBLRVlfQklUX0RvdDcgfCBLRVlfQklUX0RvdDIgfCBLRVlfQklUX0RvdDMgfCBLRVlfQklUX0RvdDQsCisgICAgLmZyb20gPSBLRVlfQklUX1NwYWNlIHwgS0VZX0JJVF9Eb3QyIHwgS0VZX0JJVF9Eb3QzIHwgS0VZX0JJVF9Eb3Q0IHwgS0VZX0JJVF9Eb3Q3CisgIH0sCisKKyAgeyAudG8gPSBLRVlfQklUX0RvdDggfCBLRVlfQklUX0RvdDIgfCBLRVlfQklUX0RvdDMgfCBLRVlfQklUX0RvdDQsCisgICAgLmZyb20gPSBLRVlfQklUX1NwYWNlIHwgS0VZX0JJVF9Eb3QyIHwgS0VZX0JJVF9Eb3QzIHwgS0VZX0JJVF9Eb3Q0CisgIH0sCit9OworCitzdGF0aWMgY29uc3QgSW5wdXRPdXRwdXREYXRhIGlvRGF0YV9CcmFpbGxlQmFjayA9IHsKKyAgLmtleVRhYmxlRGVmaW5pdGlvbiA9ICZLRVlfVEFCTEVfREVGSU5JVElPTihiYiksCisgIC5yZW1hcEtleU51bWJlcnMgPSByZW1hcEtleU51bWJlcnNfQnJhaWxsZUJhY2ssCisKKyAgLmtleU51bWJlclNldE1hcCA9IHsKKyAgICAuZW50cmllcyA9IGtleU51bWJlclNldE1hcF9CcmFpbGxlQmFjaywKKyAgICAuY291bnQgPSBBUlJBWV9DT1VOVChrZXlOdW1iZXJTZXRNYXBfQnJhaWxsZUJhY2spCisgIH0KK307CisKK3N0YXRpYyB2b2lkCityZW1hcEtleU51bWJlcnNfTlZEQSAoS2V5TnVtYmVyU2V0ICprZXlzKSB7Cit9CisKK3N0YXRpYyBjb25zdCBLZXlOdW1iZXJTZXRNYXBFbnRyeSBrZXlOdW1iZXJTZXRNYXBfTlZEQVtdID0geworICB7IC50byA9IEtFWV9CSVRfU3BhY2UgfCBLRVlfQklUX01vdmVVcCwKKyAgICAuZnJvbSA9IEtFWV9CSVRfU3BhY2UgfCBLRVlfQklUX01vdmVVcCB8IEtFWV9CSVRfRG90MgorICB9LAorCisgIHsgLnRvID0gS0VZX0JJVF9TcGFjZSB8IEtFWV9CSVRfTW92ZURvd24sCisgICAgLmZyb20gPSBLRVlfQklUX1NwYWNlIHwgS0VZX0JJVF9Nb3ZlRG93biB8IEtFWV9CSVRfRG90MgorICB9LAorCisgIHsgLnRvID0gS0VZX0JJVF9TcGFjZSB8IEtFWV9CSVRfUGFuTGVmdCwKKyAgICAuZnJvbSA9IEtFWV9CSVRfU3BhY2UgfCBLRVlfQklUX1BhbkxlZnQgfCBLRVlfQklUX0RvdDIKKyAgfSwKKworICB7IC50byA9IEtFWV9CSVRfU3BhY2UgfCBLRVlfQklUX1BhblJpZ2h0LAorICAgIC5mcm9tID0gS0VZX0JJVF9TcGFjZSB8IEtFWV9CSVRfUGFuUmlnaHQgfCBLRVlfQklUX0RvdDIKKyAgfSwKKworICB7IC50byA9IEtFWV9CSVRfRG90OCB8IEtFWV9CSVRfTW92ZVVwLAorICAgIC5mcm9tID0gS0VZX0JJVF9TcGFjZSB8IEtFWV9CSVRfTW92ZVVwIHwgS0VZX0JJVF9Eb3Q0CisgIH0sCisKKyAgeyAudG8gPSBLRVlfQklUX0RvdDggfCBLRVlfQklUX01vdmVEb3duLAorICAgIC5mcm9tID0gS0VZX0JJVF9TcGFjZSB8IEtFWV9CSVRfTW92ZURvd24gfCBLRVlfQklUX0RvdDQKKyAgfSwKKworICB7IC50byA9IEtFWV9CSVRfU3BhY2UgfCBLRVlfQklUX0RvdDMsCisgICAgLmZyb20gPSBLRVlfQklUX1NwYWNlIHwgS0VZX0JJVF9QYW5MZWZ0CisgIH0sCisKKyAgeyAudG8gPSBLRVlfQklUX1NwYWNlIHwgS0VZX0JJVF9Eb3Q2LAorICAgIC5mcm9tID0gS0VZX0JJVF9TcGFjZSB8IEtFWV9CSVRfUGFuUmlnaHQKKyAgfSwKKworICB7IC50byA9IEtFWV9CSVRfU3BhY2UgfCBLRVlfQklUX0RvdDIgfCBLRVlfQklUX0RvdDMsCisgICAgLmZyb20gPSBLRVlfQklUX1NwYWNlIHwgS0VZX0JJVF9Nb3ZlVXAKKyAgfSwKKworICB7IC50byA9IEtFWV9CSVRfU3BhY2UgfCBLRVlfQklUX0RvdDUgfCBLRVlfQklUX0RvdDYsCisgICAgLmZyb20gPSBLRVlfQklUX1NwYWNlIHwgS0VZX0JJVF9Nb3ZlRG93bgorICB9LAorCisgIHsgLnRvID0gS0VZX0JJVF9TcGFjZSB8IEtFWV9CSVRfRG90MSB8IEtFWV9CSVRfRG90MiB8IEtFWV9CSVRfRG90MywKKyAgICAuZnJvbSA9IEtFWV9CSVRfU3BhY2UgfCBLRVlfQklUX0RvdDEgfCBLRVlfQklUX0RvdDMgfCBLRVlfQklUX0RvdDgKKyAgfSwKKworICB7IC50byA9IEtFWV9CSVRfU3BhY2UgfCBLRVlfQklUX0RvdDQgfCBLRVlfQklUX0RvdDUgfCBLRVlfQklUX0RvdDYsCisgICAgLmZyb20gPSBLRVlfQklUX1NwYWNlIHwgS0VZX0JJVF9Eb3QxIHwgS0VZX0JJVF9Eb3Q2IHwgS0VZX0JJVF9Eb3Q4CisgIH0sCisKKyAgeyAudG8gPSBLRVlfQklUX1NwYWNlIHwgS0VZX0JJVF9Eb3QxIHwgS0VZX0JJVF9Eb3Q0IHwgS0VZX0JJVF9Eb3Q1IHwgS0VZX0JJVF9Eb3Q2LAorICAgIC5mcm9tID0gS0VZX0JJVF9TcGFjZSB8IEtFWV9CSVRfRG90NgorICB9LAorCisgIHsgLnRvID0gS0VZX0JJVF9TcGFjZSB8IEtFWV9CSVRfRG90MyB8IEtFWV9CSVRfRG90NCB8IEtFWV9CSVRfRG90NSB8IEtFWV9CSVRfRG90NiwKKyAgICAuZnJvbSA9IEtFWV9CSVRfU3BhY2UgfCBLRVlfQklUX0RvdDMKKyAgfSwKKworICB7IC50byA9IEtFWV9CSVRfRG90NyB8IEtFWV9CSVRfRG90MSwKKyAgICAuZnJvbSA9IEtFWV9CSVRfU3BhY2UgfCBLRVlfQklUX0RvdDEgfCBLRVlfQklUX01vdmVVcAorICB9LAorCisgIHsgLnRvID0gS0VZX0JJVF9Eb3Q4IHwgS0VZX0JJVF9Eb3Q0LAorICAgIC5mcm9tID0gS0VZX0JJVF9TcGFjZSB8IEtFWV9CSVRfRG90MSB8IEtFWV9CSVRfTW92ZURvd24KKyAgfSwKKworICB7IC50byA9IEtFWV9CSVRfU3BhY2UgfCBLRVlfQklUX0RvdDIgfCBLRVlfQklUX0RvdDMgfCBLRVlfQklUX0RvdDQsCisgICAgLmZyb20gPSBLRVlfQklUX0RvdDggfCBLRVlfQklUX0RvdDIgfCBLRVlfQklUX0RvdDMgfCBLRVlfQklUX0RvdDQsCisgIH0sCisKKyAgeyAudG8gPSBLRVlfQklUX1NwYWNlIHwgS0VZX0JJVF9Eb3QyIHwgS0VZX0JJVF9Eb3QzIHwgS0VZX0JJVF9Eb3Q0IHwgS0VZX0JJVF9Eb3Q1LAorICAgIC5mcm9tID0gS0VZX0JJVF9TcGFjZSB8IEtFWV9CSVRfRG90NQorICB9LAorCisgIHsgLnRvID0gS0VZX0JJVF9TcGFjZSB8IEtFWV9CSVRfRG90MSB8IEtFWV9CSVRfRG90MiB8IEtFWV9CSVRfRG90NSB8IEtFWV9CSVRfRG90NiwKKyAgICAuZnJvbSA9IEtFWV9CSVRfU3BhY2UgfCBLRVlfQklUX0RvdDQgfCBLRVlfQklUX0RvdDUKKyAgfSwKKworICB7IC50byA9IEtFWV9CSVRfU3BhY2UgfCBLRVlfQklUX0RvdDQgfCBLRVlfQklUX0RvdDYsCisgICAgLmZyb20gPSBLRVlfQklUX1NwYWNlIHwgS0VZX0JJVF9Eb3QxIHwgS0VZX0JJVF9Eb3QyIHwgS0VZX0JJVF9Eb3Q1IHwgS0VZX0JJVF9Eb3Q2CisgIH0sCisKKyAgeyAudG8gPSBLRVlfQklUX0RvdDcgfCBLRVlfQklUX0RvdDYsCisgICAgLmZyb20gPSBLRVlfQklUX1NwYWNlIHwgS0VZX0JJVF9Eb3QxIHwgS0VZX0JJVF9Eb3Q0CisgIH0sCisKKyAgeyAuZnJvbSA9IEtFWV9CSVRfRG90NyB8IEtFWV9CSVRfRG90OCB9LAorfTsKKworc3RhdGljIGNvbnN0IElucHV0T3V0cHV0RGF0YSBpb0RhdGFfTlZEQSA9IHsKKyAgLmtleVRhYmxlRGVmaW5pdGlvbiA9ICZLRVlfVEFCTEVfREVGSU5JVElPTihudmRhKSwKKyAgLnJlbWFwS2V5TnVtYmVycyA9IHJlbWFwS2V5TnVtYmVyc19OVkRBLAorICAuYWRqdXN0Um91dGluZ0tleSA9IDEsCisKKyAgLmtleU51bWJlclNldE1hcCA9IHsKKyAgICAuZW50cmllcyA9IGtleU51bWJlclNldE1hcF9OVkRBLAorICAgIC5jb3VudCA9IEFSUkFZX0NPVU5UKGtleU51bWJlclNldE1hcF9OVkRBKQorICB9Cit9OworCitzdGF0aWMgaW50Cit3cml0ZUJ5dGVzIChCcmFpbGxlRGlzcGxheSAqYnJsLCBjb25zdCB1bnNpZ25lZCBjaGFyICpieXRlcywgc2l6ZV90IGNvdW50KSB7CisgIHJldHVybiB3cml0ZUJyYWlsbGVQYWNrZXQoYnJsLCBOVUxMLCBieXRlcywgY291bnQpOworfQorCitzdGF0aWMgaW50Cit3cml0ZVBhY2tldCAoCisgIEJyYWlsbGVEaXNwbGF5ICpicmwsCisgIHVuc2lnbmVkIGNoYXIgdHlwZSwgdW5zaWduZWQgY2hhciBtb2RlLAorICBjb25zdCB1bnNpZ25lZCBjaGFyICpkYXRhMSwgc2l6ZV90IGxlbmd0aDEsCisgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGEyLCBzaXplX3QgbGVuZ3RoMgorKSB7CisgIHVuc2lnbmVkIGNoYXIgcGFja2V0WzIgKyAxICsgMSArIDIgKyBsZW5ndGgxICsgMSArIDEgKyAyICsgbGVuZ3RoMiArIDEgKyA0ICsgMSArIDJdOworICB1bnNpZ25lZCBjaGFyICpieXRlID0gcGFja2V0OworCisgIC8qIERTICovCisgICpieXRlKysgPSB0eXBlOworICAqYnl0ZSsrID0gdHlwZTsKKworICAvKiBNICovCisgICpieXRlKysgPSBtb2RlOworCisgIC8qIERTMSAqLworICAqYnl0ZSsrID0gMFhGMDsKKworICAvKiBDbnQxICovCisgICpieXRlKysgPSAobGVuZ3RoMSA+PiAwKSAmIDBYRkY7CisgICpieXRlKysgPSAobGVuZ3RoMSA+PiA4KSAmIDBYRkY7CisKKyAgLyogRDEgKi8KKyAgaWYgKGRhdGExKSBieXRlID0gbWVtcGNweShieXRlLCBkYXRhMSwgbGVuZ3RoMSk7CisKKyAgLyogREUxICovCisgICpieXRlKysgPSAwWEYxOworCisgIC8qIERTMiAqLworICAqYnl0ZSsrID0gMFhGMjsKKworICAvKiBDbnQyICovCisgICpieXRlKysgPSAobGVuZ3RoMiA+PiAwKSAmIDBYRkY7CisgICpieXRlKysgPSAobGVuZ3RoMiA+PiA4KSAmIDBYRkY7CisKKyAgLyogRDIgKi8KKyAgaWYgKGRhdGEyKSBieXRlID0gbWVtcGNweShieXRlLCBkYXRhMiwgbGVuZ3RoMik7CisKKyAgLyogREUyICovCisgICpieXRlKysgPSAwWEYzOworCisgIC8qIFJlc2VydmVkICovCisgIHsKKyAgICBpbnQgY291bnQgPSA0OworICAgIHdoaWxlIChjb3VudC0tKSAqYnl0ZSsrID0gMDsKKyAgfQorCisgIC8qIENoayAqLworICB1bnNpZ25lZCBjaGFyICpjaGVja3N1bSA9IGJ5dGUrKzsKKyAgKmNoZWNrc3VtID0gMDsKKworICAvKiBERSAqLworICAqYnl0ZSsrID0gMFhGRDsKKyAgKmJ5dGUrKyA9IDBYRkQ7CisKKyAgeworICAgIHVuc2lnbmVkIGNoYXIgc3VtID0gMDsKKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpwdHIgPSBwYWNrZXQ7CisKKyAgICB3aGlsZSAocHRyICE9IGJ5dGUpIHN1bSArPSAqcHRyKys7CisgICAgKmNoZWNrc3VtID0gc3VtOworICB9CisKKyAgcmV0dXJuIHdyaXRlQnl0ZXMoYnJsLCBwYWNrZXQsIChieXRlIC0gcGFja2V0KSk7Cit9CisKK3N0YXRpYyBCcmFpbGxlUGFja2V0VmVyaWZpZXJSZXN1bHQKK3ZlcmlmeVBhY2tldCAoCisgIEJyYWlsbGVEaXNwbGF5ICpicmwsCisgIHVuc2lnbmVkIGNoYXIgKmJ5dGVzLCBzaXplX3Qgc2l6ZSwKKyAgc2l6ZV90ICpsZW5ndGgsIHZvaWQgKmRhdGEKKykgeworICB1bnNpZ25lZCBjaGFyIGJ5dGUgPSBieXRlc1tzaXplLTFdOworCisgIHN3aXRjaCAoc2l6ZSkgeworICAgIGNhc2UgMTogeworICAgICAgc3dpdGNoIChieXRlKSB7CisgICAgICAgIGNhc2UgMFhGQToKKyAgICAgICAgICAqbGVuZ3RoID0gMTA7CisgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgLy8gYW4gQVNDSUkgTEYgaXMgYmVpbmcgc2VudCBhZnRlciBlYWNoIEJsdWV0b290aCBwYWNrZXQKKyAgICAgICAgY2FzZSAwWDBBOgorICAgICAgICAgIHJldHVybiBCUkxfUFZSX0lHTk9SRTsKKworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgIHJldHVybiBCUkxfUFZSX0lOVkFMSUQ7CisgICAgICB9CisKKyAgICAgIGJyZWFrOworICAgIH0KKworICAgIGRlZmF1bHQ6CisgICAgICBicmVhazsKKyAgfQorCisgIGlmIChzaXplID09ICpsZW5ndGgpIHsKKyAgICBzd2l0Y2ggKGJ5dGVzWzBdKSB7CisgICAgICBjYXNlIDBYRkE6IHsKKyAgICAgICAgaWYgKGJ5dGUgIT0gMFhGQikgcmV0dXJuIEJSTF9QVlJfSU5WQUxJRDsKKworICAgICAgICBjb25zdCBJbnB1dFBhY2tldCAqcGFja2V0ID0gKGNvbnN0IHZvaWQgKilieXRlczsKKyAgICAgICAgaW50IGNoZWNrc3VtID0gLXBhY2tldC0+ZmllbGRzLmNoZWNrc3VtOworICAgICAgICBmb3IgKHNpemVfdCBpPTA7IGk8c2l6ZTsgaSs9MSkgY2hlY2tzdW0gKz0gcGFja2V0LT5ieXRlc1tpXTsKKworICAgICAgICBpZiAoKGNoZWNrc3VtICYgMFhGRikgIT0gcGFja2V0LT5maWVsZHMuY2hlY2tzdW0pIHsKKyAgICAgICAgICBsb2dJbnB1dFByb2JsZW0oImluY29ycmVjdCBpbnB1dCBjaGVja3N1bSIsIHBhY2tldC0+Ynl0ZXMsIHNpemUpOworICAgICAgICAgIHJldHVybiBCUkxfUFZSX0lOVkFMSUQ7CisgICAgICAgIH0KKworICAgICAgICBicmVhazsKKyAgICAgIH0KKworICAgICAgZGVmYXVsdDoKKyAgICAgICAgYnJlYWs7CisgICAgfQorICB9CisKKyAgcmV0dXJuIEJSTF9QVlJfSU5DTFVERTsKK30KKworc3RhdGljIHNpemVfdAorcmVhZFBhY2tldCAoQnJhaWxsZURpc3BsYXkgKmJybCwgdm9pZCAqcGFja2V0LCBzaXplX3Qgc2l6ZSkgeworICByZXR1cm4gcmVhZEJyYWlsbGVQYWNrZXQoYnJsLCBOVUxMLCBwYWNrZXQsIHNpemUsIHZlcmlmeVBhY2tldCwgTlVMTCk7Cit9CisKK3N0YXRpYyBpbnQKK2Nvbm5lY3RSZXNvdXJjZSAoQnJhaWxsZURpc3BsYXkgKmJybCwgY29uc3QgY2hhciAqaWRlbnRpZmllcikgeworICBCRUdJTl9VU0JfQ0hBTk5FTF9ERUZJTklUSU9OUworICAgIHsgLyogYWxsIG1vZGVscyAqLworICAgICAgLnZlbmRvcj0wWDEyMDksIC5wcm9kdWN0PTBYQUJDMCwKKyAgICAgIC5jb25maWd1cmF0aW9uPTEsIC5pbnRlcmZhY2U9MCwgLmFsdGVybmF0aXZlPTAsCisgICAgICAuaW5wdXRFbmRwb2ludD0xLCAub3V0cHV0RW5kcG9pbnQ9MQorICAgIH0sCisgIEVORF9VU0JfQ0hBTk5FTF9ERUZJTklUSU9OUworCisgIEdpb0Rlc2NyaXB0b3IgZGVzY3JpcHRvcjsKKyAgZ2lvSW5pdGlhbGl6ZURlc2NyaXB0b3IoJmRlc2NyaXB0b3IpOworCisgIGRlc2NyaXB0b3IudXNiLmNoYW5uZWxEZWZpbml0aW9ucyA9IHVzYkNoYW5uZWxEZWZpbml0aW9uczsKKyAgZGVzY3JpcHRvci51c2Iub3B0aW9ucy5hcHBsaWNhdGlvbkRhdGEgPSAmaW9EYXRhX05WREE7CisKKyAgZGVzY3JpcHRvci5ibHVldG9vdGguY2hhbm5lbE51bWJlciA9IDE7CisgIGRlc2NyaXB0b3IuYmx1ZXRvb3RoLmRpc2NvdmVyQ2hhbm5lbCA9IDE7CisgIGRlc2NyaXB0b3IuYmx1ZXRvb3RoLm9wdGlvbnMuYXBwbGljYXRpb25EYXRhID0gJmlvRGF0YV9CcmFpbGxlQmFjazsKKworICBpZiAoY29ubmVjdEJyYWlsbGVSZXNvdXJjZShicmwsIGlkZW50aWZpZXIsICZkZXNjcmlwdG9yLCBOVUxMKSkgeworICAgIGJybC0+ZGF0YS0+aW8gPSBnaW9HZXRBcHBsaWNhdGlvbkRhdGEoYnJsLT5naW9FbmRwb2ludCk7CisKKyAgICBicmwtPmRhdGEtPmtleU51bWJlclNldE1hcCA9IG5ld0tleU51bWJlclNldE1hcCgKKyAgICAgIGJybC0+ZGF0YS0+aW8tPmtleU51bWJlclNldE1hcC5lbnRyaWVzLAorICAgICAgYnJsLT5kYXRhLT5pby0+a2V5TnVtYmVyU2V0TWFwLmNvdW50CisgICAgKTsKKworICAgIHJldHVybiAxOworICB9CisKKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK3dyaXRlSWRlbnRpZnlSZXF1ZXN0IChCcmFpbGxlRGlzcGxheSAqYnJsKSB7CisgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGRhdGExWzIwXSA9IHswfTsKKyAgcmV0dXJuIHdyaXRlUGFja2V0KGJybCwgMFhGQiwgMFgwMSwgZGF0YTEsIHNpemVvZihkYXRhMSksIE5VTEwsIDApOworfQorCitzdGF0aWMgQnJhaWxsZVJlc3BvbnNlUmVzdWx0Citpc0lkZW50aXR5UmVzcG9uc2UgKEJyYWlsbGVEaXNwbGF5ICpicmwsIGNvbnN0IHZvaWQgKmJ5dGVzLCBzaXplX3Qgc2l6ZSkgeworICBjb25zdCBJbnB1dFBhY2tldCAqcGFja2V0ID0gYnl0ZXM7CisgIGlmIChwYWNrZXQtPmZpZWxkcy50eXBlICE9IDBYMDIpIHJldHVybiBCUkxfUlNQX1VORVhQRUNURUQ7CisKKyAgYnJsLT50ZXh0Q29sdW1ucyA9IHBhY2tldC0+ZmllbGRzLmRhdGE7CisgIHJldHVybiBCUkxfUlNQX0RPTkU7Cit9CisKK3N0YXRpYyBpbnQKK2JybF9jb25zdHJ1Y3QgKEJyYWlsbGVEaXNwbGF5ICpicmwsIGNoYXIgKipwYXJhbWV0ZXJzLCBjb25zdCBjaGFyICpkZXZpY2UpIHsKKyAgaWYgKChicmwtPmRhdGEgPSBtYWxsb2Moc2l6ZW9mKCpicmwtPmRhdGEpKSkpIHsKKyAgICBtZW1zZXQoYnJsLT5kYXRhLCAwLCBzaXplb2YoKmJybC0+ZGF0YSkpOworICAgIGJybC0+ZGF0YS0+aW8gPSBOVUxMOworICAgIGJybC0+ZGF0YS0+a2V5TnVtYmVyU2V0TWFwID0gTlVMTDsKKworICAgIGlmIChjb25uZWN0UmVzb3VyY2UoYnJsLCBkZXZpY2UpKSB7CisgICAgICBJbnB1dFBhY2tldCByZXNwb25zZTsKKworICAgICAgaWYgKHByb2JlQnJhaWxsZURpc3BsYXkoYnJsLCBQUk9CRV9SRVRSWV9MSU1JVCwgTlVMTCwgUFJPQkVfSU5QVVRfVElNRU9VVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlSWRlbnRpZnlSZXF1ZXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZFBhY2tldCwgJnJlc3BvbnNlLCBzaXplb2YocmVzcG9uc2UpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNJZGVudGl0eVJlc3BvbnNlKSkgeworICAgICAgICBzZXRCcmFpbGxlS2V5VGFibGUoYnJsLCBicmwtPmRhdGEtPmlvLT5rZXlUYWJsZURlZmluaXRpb24pOworICAgICAgICBtYWtlT3V0cHV0VGFibGUoZG90c1RhYmxlX0lTTzExNTQ4XzEpOworICAgICAgICBicmwtPmNlbGxTaXplID0gNjsKKworICAgICAgICBicmwtPmRhdGEtPmJyYWlsbGUucmV3cml0ZSA9IDE7CisgICAgICAgIGJybC0+ZGF0YS0+dGV4dC5yZXdyaXRlID0gMTsKKyAgICAgICAgYnJsLT5kYXRhLT5jdXJzb3IucmV3cml0ZSA9IDE7CisgICAgICAgIHJldHVybiAxOworICAgICAgfQorCisgICAgICBkaXNjb25uZWN0QnJhaWxsZVJlc291cmNlKGJybCwgTlVMTCk7CisgICAgfQorCisgICAgZnJlZShicmwtPmRhdGEpOworICB9IGVsc2UgeworICAgIGxvZ01hbGxvY0Vycm9yKCk7CisgIH0KKworICByZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQKK2JybF9kZXN0cnVjdCAoQnJhaWxsZURpc3BsYXkgKmJybCkgeworICBkaXNjb25uZWN0QnJhaWxsZVJlc291cmNlKGJybCwgTlVMTCk7CisKKyAgaWYgKGJybC0+ZGF0YSkgeworICAgIHsKKyAgICAgIEtleU51bWJlclNldE1hcCAqbWFwID0gYnJsLT5kYXRhLT5rZXlOdW1iZXJTZXRNYXA7CisgICAgICBpZiAobWFwKSBkZXN0cm95S2V5TnVtYmVyU2V0TWFwKG1hcCk7CisgICAgfQorCisgICAgZnJlZShicmwtPmRhdGEpOworICAgIGJybC0+ZGF0YSA9IE5VTEw7CisgIH0KK30KKworc3RhdGljIGludAorYnJsX3dyaXRlV2luZG93IChCcmFpbGxlRGlzcGxheSAqYnJsLCBjb25zdCB3Y2hhcl90ICp0ZXh0KSB7CisgIGludCBjZWxsQ291bnQgPSBicmwtPnRleHRDb2x1bW5zOworCisgIGludCBuZXdCcmFpbGxlID0KKyAgICAgIGNlbGxzSGF2ZUNoYW5nZWQoYnJsLT5kYXRhLT5icmFpbGxlLmNlbGxzLCBicmwtPmJ1ZmZlciwgY2VsbENvdW50LAorICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCBOVUxMLCAmYnJsLT5kYXRhLT5icmFpbGxlLnJld3JpdGUpOworCisgIGludCBuZXdUZXh0ID0KKyAgICAgIHRleHRIYXNDaGFuZ2VkKGJybC0+ZGF0YS0+dGV4dC5jaGFyYWN0ZXJzLCB0ZXh0LCBjZWxsQ291bnQsCisgICAgICAgICAgICAgICAgICAgICBOVUxMLCBOVUxMLCAmYnJsLT5kYXRhLT50ZXh0LnJld3JpdGUpOworCisgIGlmIChuZXdCcmFpbGxlIHx8IG5ld1RleHQpIHsKKyAgICB1bnNpZ25lZCBjaGFyIGNlbGxzW2NlbGxDb3VudF07CisgICAgdHJhbnNsYXRlT3V0cHV0Q2VsbHMoY2VsbHMsIGJybC0+ZGF0YS0+YnJhaWxsZS5jZWxscywgY2VsbENvdW50KTsKKworICAgIHVuc2lnbmVkIGNoYXIgYXR0cmlidXRlc1tjZWxsQ291bnRdOworICAgIG1lbXNldChhdHRyaWJ1dGVzLCAwLCBzaXplb2YoYXR0cmlidXRlcykpOworCisgICAgZm9yIChpbnQgaT0wOyBpPGNlbGxDb3VudDsgaSs9MSkgeworICAgICAgdW5zaWduZWQgY2hhciAqYnl0ZSA9ICZhdHRyaWJ1dGVzW2ldOworCisgICAgICBpZiAodGV4dCkgeworICAgICAgICB3Y2hhcl90IGNoYXJhY3RlciA9IHRleHRbaV07CisKKyAgICAgICAgaWYgKGlzd3VwcGVyKGNoYXJhY3RlcikpICpieXRlIHw9IDBYMDE7CisgICAgICB9CisgICAgfQorCisgICAgaWYgKCF3cml0ZVBhY2tldChicmwsIDBYRkMsIDBYMDEsCisgICAgICAgICAgICAgICAgICAgICBjZWxscywgc2l6ZW9mKGNlbGxzKSwKKyAgICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXMsIHNpemVvZihhdHRyaWJ1dGVzKSkpIHJldHVybiAwOworICB9CisKKyAgcmV0dXJuIDE7Cit9CisKK3N0YXRpYyB2b2lkCitzcGxpdEtleXMgKEtleU51bWJlclNldCBrZXlzLCBLZXlOdW1iZXJTZXQgKm5hdmlnYXRpb24sIEtleU51bWJlclNldCAqcm91dGluZykgeworICB7CisgICAgY29uc3QgS2V5TnVtYmVyIHJvdXRpbmdTaGlmdCA9IElDX0tFWV9Sb3V0aW5nS2V5MTsKKyAgICBjb25zdCBLZXlOdW1iZXJTZXQgbmF2aWdhdGlvbk1hc2sgPSBLRVlfTlVNQkVSX0JJVChyb3V0aW5nU2hpZnQpIC0gMTsKKworICAgICpuYXZpZ2F0aW9uID0ga2V5cyAmIG5hdmlnYXRpb25NYXNrOworICAgICpyb3V0aW5nID0ga2V5cyA+PiByb3V0aW5nU2hpZnQ7CisgIH0KKworICBpZiAoKnJvdXRpbmcpIHsKKyAgICBLZXlOdW1iZXIgc2hpZnQgPSBJQ19LRVlfUm91dGluZ0tleTE3IC0gSUNfS0VZX1JvdXRpbmdLZXkxOworICAgIEtleU51bWJlclNldCBtYXNrID0gS0VZX05VTUJFUl9CSVQoc2hpZnQpIC0gMTsKKworICAgIEtleU51bWJlclNldCBsZWZ0ID0gKnJvdXRpbmcgJiBtYXNrOworICAgICpyb3V0aW5nICY9IH5tYXNrOworCisgICAgKnJvdXRpbmcgPDw9IDQ7CisgICAgKnJvdXRpbmcgfD0gbGVmdDsKKyAgfQorfQorCitzdGF0aWMgaW50CiticmxfcmVhZENvbW1hbmQgKEJyYWlsbGVEaXNwbGF5ICpicmwsIEtleVRhYmxlQ29tbWFuZENvbnRleHQgY29udGV4dCkgeworICBJbnB1dFBhY2tldCBwYWNrZXQ7CisgIHNpemVfdCBzaXplOworCisgIHdoaWxlICgoc2l6ZSA9IHJlYWRQYWNrZXQoYnJsLCAmcGFja2V0LCBzaXplb2YocGFja2V0KSkpKSB7CisgICAgc3dpdGNoIChwYWNrZXQuZmllbGRzLnR5cGUpIHsKKyAgICAgIGNhc2UgMFgwMDogeworICAgICAgICB1bnNpZ25lZCBjaGFyIGtleSA9IHBhY2tldC5maWVsZHMuZGF0YTsKKyAgICAgICAgaWYgKGJybC0+ZGF0YS0+aW8tPmFkanVzdFJvdXRpbmdLZXkpIGtleSAtPSAxOworICAgICAgICBpZiAoa2V5IDwgYnJsLT50ZXh0Q29sdW1ucykgZW5xdWV1ZUtleShicmwsIElDX0dSUF9Sb3V0aW5nS2V5cywga2V5KTsKKyAgICAgICAgY29udGludWU7CisgICAgICB9CisKKyAgICAgIGNhc2UgMFgwMTogeworICAgICAgICBLZXlOdW1iZXJTZXQgbmF2aWdhdGlvbjsKKyAgICAgICAgS2V5TnVtYmVyU2V0IHJvdXRpbmc7CisKKyAgICAgICAgeworICAgICAgICAgIEtleU51bWJlclNldCBrZXlzID0gKHBhY2tldC5maWVsZHMucmVzZXJ2ZWRbMF0gPDwgMFgwMCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChwYWNrZXQuZmllbGRzLnJlc2VydmVkWzFdIDw8IDBYMDgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAocGFja2V0LmZpZWxkcy5yZXNlcnZlZFsyXSA8PCAwWDEwKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKHBhY2tldC5maWVsZHMucmVzZXJ2ZWRbM10gPDwgMFgxOCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CisKKyAgICAgICAgICBicmwtPmRhdGEtPmlvLT5yZW1hcEtleU51bWJlcnMoJmtleXMpOworICAgICAgICAgIHNwbGl0S2V5cyhrZXlzLCAmbmF2aWdhdGlvbiwgJnJvdXRpbmcpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKG5hdmlnYXRpb24pIHsKKyAgICAgICAgICByZW1hcEtleU51bWJlclNldCgmbmF2aWdhdGlvbiwgYnJsLT5kYXRhLT5rZXlOdW1iZXJTZXRNYXApOworCisgICAgICAgICAgaWYgKG5hdmlnYXRpb24pIHsKKyAgICAgICAgICAgIGVucXVldWVLZXlFdmVudHMoYnJsLCBuYXZpZ2F0aW9uLCBJQ19HUlBfTmF2aWdhdGlvbktleXMsIDAsIDEpOworICAgICAgICAgICAgZW5xdWV1ZUtleXMoYnJsLCByb3V0aW5nLCBJQ19HUlBfUm91dGluZ0tleXMsIDApOworICAgICAgICAgICAgZW5xdWV1ZUtleUV2ZW50cyhicmwsIG5hdmlnYXRpb24sIElDX0dSUF9OYXZpZ2F0aW9uS2V5cywgMCwgMCk7CisgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgY29udGludWU7CisgICAgICB9CisKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGxvZ1VuZXhwZWN0ZWRQYWNrZXQoJnBhY2tldCwgc2l6ZSk7CisgIH0KKworICByZXR1cm4gKGVycm5vID09IEVBR0FJTik/IEVPRjogQlJMX0NNRF9SRVNUQVJUQlJMOworfQpkaWZmIC0tZ2l0IGEvRHJpdmVycy9CcmFpbGxlL0luY2VwdG9yL2JybGRlZnMtaWMuaCBiL0RyaXZlcnMvQnJhaWxsZS9JbmNlcHRvci9icmxkZWZzLWljLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWFmMDI3NgotLS0gL2Rldi9udWxsCisrKyBiL0RyaXZlcnMvQnJhaWxsZS9JbmNlcHRvci9icmxkZWZzLWljLmgKQEAgLTAsMCArMSw3OCBAQAorLyoKKyAqIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisgKiAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisgKgorICogQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKKyNpZm5kZWYgQlJMVFRZX0lOQ0xVREVEX0lDX0JSTERFRlMKKyNkZWZpbmUgQlJMVFRZX0lOQ0xVREVEX0lDX0JSTERFRlMKKwordHlwZWRlZiB1bmlvbiB7CisgIHVuc2lnbmVkIGNoYXIgYnl0ZXNbMTBdOworCisgIHN0cnVjdCB7CisgICAgdW5zaWduZWQgY2hhciBzdGFydDsKKyAgICB1bnNpZ25lZCBjaGFyIHR5cGU7CisgICAgdW5zaWduZWQgY2hhciBjb3VudDsKKyAgICB1bnNpZ25lZCBjaGFyIGRhdGE7CisgICAgdW5zaWduZWQgY2hhciByZXNlcnZlZFs0XTsKKyAgICB1bnNpZ25lZCBjaGFyIGNoZWNrc3VtOworICAgIHVuc2lnbmVkIGNoYXIgZW5kOworICB9IFBBQ0tFRCBmaWVsZHM7Cit9IElucHV0UGFja2V0OworCit0eXBlZGVmIGVudW0geworICBJQ19LRVlfRG90MSA9IDAsCisgIElDX0tFWV9Eb3QyID0gMSwKKyAgSUNfS0VZX0RvdDMgPSAyLAorICBJQ19LRVlfRG90NCA9IDMsCisgIElDX0tFWV9Eb3Q1ID0gNCwKKyAgSUNfS0VZX0RvdDYgPSA1LAorICBJQ19LRVlfRG90NyA9IDYsCisgIElDX0tFWV9Eb3Q4ID0gNywKKworICBJQ19LRVlfU3BhY2UgPSA4LAorICBJQ19LRVlfTW92ZVVwID0gOSwKKyAgSUNfS0VZX01vdmVEb3duID0gMTAsCisgIElDX0tFWV9QYW5MZWZ0ID0gMTEsCisgIElDX0tFWV9QYW5SaWdodCA9IDEyLAorICBJQ19LRVlfQmFjayA9IDEzLAorICBJQ19LRVlfRW50ZXIgPSAxNCwKKworICBJQ19LRVlfUm91dGluZ0tleTEgPSAxNiwKKyAgSUNfS0VZX1JvdXRpbmdLZXkyID0gMTcsCisgIElDX0tFWV9Sb3V0aW5nS2V5MyA9IDE4LAorICBJQ19LRVlfUm91dGluZ0tleTQgPSAxOSwKKyAgSUNfS0VZX1JvdXRpbmdLZXk1ID0gMjAsCisgIElDX0tFWV9Sb3V0aW5nS2V5NiA9IDIxLAorICBJQ19LRVlfUm91dGluZ0tleTcgPSAyMiwKKyAgSUNfS0VZX1JvdXRpbmdLZXk4ID0gMjMsCisKKyAgSUNfS0VZX1JvdXRpbmdLZXk5ID0gMjQsCisgIElDX0tFWV9Sb3V0aW5nS2V5MTAgPSAyNSwKKyAgSUNfS0VZX1JvdXRpbmdLZXkxMSA9IDI2LAorICBJQ19LRVlfUm91dGluZ0tleTEyID0gMjcsCisgIElDX0tFWV9Sb3V0aW5nS2V5MTcgPSAyOCwKKyAgSUNfS0VZX1JvdXRpbmdLZXkxOCA9IDI5LAorICBJQ19LRVlfUm91dGluZ0tleTE5ID0gMzAsCisgIElDX0tFWV9Sb3V0aW5nS2V5MjAgPSAzMSwKK30gSUNfTmF2aWdhdGlvbktleTsKKwordHlwZWRlZiBlbnVtIHsKKyAgSUNfR1JQX05hdmlnYXRpb25LZXlzID0gMCwKKyAgSUNfR1JQX1JvdXRpbmdLZXlzCit9IElDX0tleUdyb3VwOworCisjZW5kaWYgLyogQlJMVFRZX0lOQ0xVREVEX0lDX0JSTERFRlMgKi8gCmRpZmYgLS1naXQgYS9Ecml2ZXJzL0JyYWlsbGUvSXJpcy9NYWtlZmlsZS5pbiBiL0RyaXZlcnMvQnJhaWxsZS9JcmlzL01ha2VmaWxlLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE1N2Y1OTYKLS0tIC9kZXYvbnVsbAorKysgYi9Ecml2ZXJzL0JyYWlsbGUvSXJpcy9NYWtlZmlsZS5pbgpAQCAtMCwwICsxLDI4IEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisjICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorIworIyBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisjCisjIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisjCisjIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyMgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorIyBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyMKKyMgV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworIworIyBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworRFJJVkVSX0NPREUgPSBpcgorRFJJVkVSX05BTUUgPSBJcmlzCitEUklWRVJfVVNBR0UgPSBLQgorRFJJVkVSX1ZFUlNJT04gPSAKK0RSSVZFUl9ERVZFTE9QRVJTID0gU8OpYmFzdGllbiBIaW5kZXJlciA8U2ViYXN0aWVuLkhpbmRlcmVyQGVucy1seW9uLm9yZz4KK2luY2x1ZGUgJChTUkNfVE9QKWJyYWlsbGUubWsKKworYnJhaWxsZS4kTzoKKwkkKENDKSAkKEJSTF9DRkxBR1MpIC1jICQoU1JDX0RJUikvYnJhaWxsZS5jCisKZGlmZiAtLWdpdCBhL0RyaXZlcnMvQnJhaWxsZS9JcmlzL2JyYWlsbGUuYyBiL0RyaXZlcnMvQnJhaWxsZS9JcmlzL2JyYWlsbGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYzE4NWVjCi0tLSAvZGV2L251bGwKKysrIGIvRHJpdmVycy9CcmFpbGxlL0lyaXMvYnJhaWxsZS5jCkBAIC0wLDAgKzEsMjA5NyBAQAorLyoKKyAqIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisgKiAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisgKgorICogQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKKyNpbmNsdWRlICJwcm9sb2d1ZS5oIgorCisjaW5jbHVkZSA8ZmNudGwuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8c3RkYXJnLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKyNpbmNsdWRlICJsb2cuaCIKKyNpbmNsdWRlICJwYXJhbWV0ZXJzLmgiCisjaW5jbHVkZSAiYXNjaWkuaCIKKyNpbmNsdWRlICJjbWQuaCIKKyNpbmNsdWRlICJwYXJzZS5oIgorI2luY2x1ZGUgImFzeW5jX2hhbmRsZS5oIgorI2luY2x1ZGUgImFzeW5jX3dhaXQuaCIKKyNpbmNsdWRlICJhc3luY19hbGFybS5oIgorI2luY2x1ZGUgInRpbWluZy5oIgorI2luY2x1ZGUgInBvcnRzLmgiCisjaW5jbHVkZSAibWVzc2FnZS5oIgorCisjZGVmaW5lIEJSTF9IQVZFX1BBQ0tFVF9JTworCit0eXBlZGVmIGVudW0geworICBQQVJNX0VNQkVEREVELAorICBQQVJNX0xBVENIX0RFTEFZLAorICBQQVJNX1BST1RPQ09MCit9IERyaXZlclBhcmFtZXRlcjsKKyNkZWZpbmUgQlJMUEFSTVMgImVtYmVkZGVkIiwgImxhdGNoZGVsYXkiLCAicHJvdG9jb2wiCisKKyNpbmNsdWRlICJicmxfZHJpdmVyLmgiCisjaW5jbHVkZSAiYnJsZGVmcy1pci5oIgorCitCRUdJTl9LRVlfTkFNRV9UQUJMRShjb21tb24pCisgIEtFWV9OQU1FX0VOVFJZKElSX0tFWV9MMSwgIkwxIiksCisgIEtFWV9OQU1FX0VOVFJZKElSX0tFWV9MMiwgIkwyIiksCisgIEtFWV9OQU1FX0VOVFJZKElSX0tFWV9MMywgIkwzIiksCisgIEtFWV9OQU1FX0VOVFJZKElSX0tFWV9MNCwgIkw0IiksCisgIEtFWV9OQU1FX0VOVFJZKElSX0tFWV9MNSwgIkw1IiksCisgIEtFWV9OQU1FX0VOVFJZKElSX0tFWV9MNiwgIkw2IiksCisgIEtFWV9OQU1FX0VOVFJZKElSX0tFWV9MNywgIkw3IiksCisgIEtFWV9OQU1FX0VOVFJZKElSX0tFWV9MOCwgIkw4IiksCisKKyAgS0VZX05BTUVfRU5UUlkoSVJfS0VZX01lbnUsICJNZW51IiksCisgIEtFWV9OQU1FX0VOVFJZKElSX0tFWV9aLCAiWiIpLAorCisgIEtFWV9HUk9VUF9FTlRSWShJUl9HUlBfUm91dGluZ0tleXMsICJSb3V0aW5nS2V5IiksCitFTkRfS0VZX05BTUVfVEFCTEUKKworQkVHSU5fS0VZX05BTUVfVEFCTEUoYnJsKQorICBLRVlfTkFNRV9FTlRSWShJUl9LRVlfRG90MSwgIkRvdDEiKSwKKyAgS0VZX05BTUVfRU5UUlkoSVJfS0VZX0RvdDIsICJEb3QyIiksCisgIEtFWV9OQU1FX0VOVFJZKElSX0tFWV9Eb3QzLCAiRG90MyIpLAorICBLRVlfTkFNRV9FTlRSWShJUl9LRVlfRG90NCwgIkRvdDQiKSwKKyAgS0VZX05BTUVfRU5UUlkoSVJfS0VZX0RvdDUsICJEb3Q1IiksCisgIEtFWV9OQU1FX0VOVFJZKElSX0tFWV9Eb3Q2LCAiRG90NiIpLAorICBLRVlfTkFNRV9FTlRSWShJUl9LRVlfRG90NywgIkRvdDciKSwKKyAgS0VZX05BTUVfRU5UUlkoSVJfS0VZX0RvdDgsICJEb3Q4IiksCisgIEtFWV9OQU1FX0VOVFJZKElSX0tFWV9CYWNrc3BhY2UsICJCYWNrc3BhY2UiKSwKKyAgS0VZX05BTUVfRU5UUlkoSVJfS0VZX1NwYWNlLCAiU3BhY2UiKSwKK0VORF9LRVlfTkFNRV9UQUJMRQorCitCRUdJTl9LRVlfTkFNRV9UQUJMRShwYykKKyAgS0VZX0dST1VQX0VOVFJZKElSX0dSUF9YdCwgIlh0IiksCisgIEtFWV9HUk9VUF9FTlRSWShJUl9HUlBfWHRFMCwgIlh0RTAiKSwKKyAgS0VZX0dST1VQX0VOVFJZKElSX0dSUF9YdEUxLCAiWHRFMSIpLAorRU5EX0tFWV9OQU1FX1RBQkxFCisKK0JFR0lOX0tFWV9OQU1FX1RBQkxFUyhicmwpCisgIEtFWV9OQU1FX1RBQkxFKGNvbW1vbiksCisgIEtFWV9OQU1FX1RBQkxFKGJybCksCitFTkRfS0VZX05BTUVfVEFCTEVTCisKK0JFR0lOX0tFWV9OQU1FX1RBQkxFUyhwYykKKyAgS0VZX05BTUVfVEFCTEUoY29tbW9uKSwKKyAgS0VZX05BTUVfVEFCTEUocGMpLAorRU5EX0tFWV9OQU1FX1RBQkxFUworCitERUZJTkVfS0VZX1RBQkxFKGJybCkKK0RFRklORV9LRVlfVEFCTEUocGMpCisKK0JFR0lOX0tFWV9UQUJMRV9MSVNUCisgICZLRVlfVEFCTEVfREVGSU5JVElPTihicmwpLAorICAmS0VZX1RBQkxFX0RFRklOSVRJT04ocGMpLAorRU5EX0tFWV9UQUJMRV9MSVNUCisKKyNkZWZpbmUgSVJfTUFYSU1VTV9QQUNLRVRfU0laRSAwWDEwMAorCisjZGVmaW5lIElSX0lOVEVSTkFMX1NQRUVEIDk2MDAKKyNkZWZpbmUgSVJfRVhURVJOQUxfU1BFRURfRVVST0JSQUlMTEUgOTYwMAorI2RlZmluZSBJUl9FWFRFUk5BTF9TUEVFRF9OQVRJVkUgNTc2MDAKKworLyogSW5wdXQvb3V0cHV0IHBvcnRzICovCisjZGVmaW5lIElSX1BPUlRfQkFTRSAwWDM0MAorI2RlZmluZSBJUl9QT1JUX0lOUFVUICAgKElSX1BPUlRfQkFTRSArIDApCisjZGVmaW5lIElSX1BPUlRfT1VUUFVUICAoSVJfUE9SVF9CQVNFICsgMSkKKyNkZWZpbmUgSVJfUE9SVF9PVVRQVVQyIChJUl9QT1JUX0JBU0UgKyAyKQorCit0eXBlZGVmIHN0cnVjdCB7CisgIEdpb0VuZHBvaW50ICpnaW9FbmRwb2ludDsKKyAgU2VyaWFsUGFyYW1ldGVycyBzZXJpYWxQYXJhbWV0ZXJzOworCisgIGNvbnN0IGNoYXIgKm5hbWU7CisgIGludCBzcGVlZDsKKworICBpbnQgKCp3cml0ZU5hdGl2ZVBhY2tldCkgKAorICAgIEJyYWlsbGVEaXNwbGF5ICpicmwsIEdpb0VuZHBvaW50ICplbmRwb2ludCwKKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpwYWNrZXQsIHNpemVfdCBzaXplCisgICk7CisKKyAgdm9pZCAoKmhhbmRsZU5hdGl2ZUFja25vd2xlZGdlbWVudCkgKEJyYWlsbGVEaXNwbGF5ICpicmwpOworCisgIHVuc2lnbmVkIGludCBzdGF0ZTsKKyAgdW5zaWduZWQgaW50IGxlbmd0aDsgLyogdXNlZnVsIHdoZW4gcmVhZGluZyBFdXJvYnJhaWxsZSBwYWNrZXRzICovCisgIHVuc2lnbmVkIGludCBlc2NhcGU7CisKKyAgdW5zaWduZWQgY2hhciAqcG9zaXRpb247CisgIHVuc2lnbmVkIGNoYXIgcGFja2V0W0lSX01BWElNVU1fUEFDS0VUX1NJWkVdOworfSBQb3J0OworCit0eXBlZGVmIGVudW0geworICBJUl9QUk9UT0NPTF9FVVJPQlJBSUxMRSwKKyAgSVJfUFJPVE9DT0xfTkFUSVZFCit9IFByb3RvY29sSW5kZXg7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgY29uc3QgY2hhciAqcHJvdG9jb2xOYW1lOworICBpbnQgZXh0ZXJuYWxTcGVlZDsKKworICBzaXplX3QgKCpyZWFkRXh0ZXJuYWxQYWNrZXQpIChCcmFpbGxlRGlzcGxheSAqYnJsLCBQb3J0ICpwb3J0LCB2b2lkICpwYWNrZXQsIHNpemVfdCBzaXplKTsKKyAgdW5zaWduZWQgZm9yd2FyZEFja25vd2xlZGdlbWVudHM6MTsKKworICBpbnQgKCpmb3J3YXJkSW50ZXJuYWxQYWNrZXQpICgKKyAgICBCcmFpbGxlRGlzcGxheSAqYnJsLAorICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnBhY2tldCwgc2l6ZV90IHNpemUKKyAgKTsKKworICB2b2lkICgqZm9yd2FyZEV4dGVybmFsUGFja2V0KSAoCisgICAgQnJhaWxsZURpc3BsYXkgKmJybCwKKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpwYWNrZXQsIHNpemVfdCBzaXplLAorICAgIGludCBmb3J3YXJkCisgICk7CisKKyAgaW50ICgqYmVnaW5Gb3J3YXJkaW5nKSAoQnJhaWxsZURpc3BsYXkgKmJybCk7CisgIGludCAoKmVuZEZvcndhcmRpbmcpIChCcmFpbGxlRGlzcGxheSAqYnJsKTsKKworICBQcm90b2NvbEluZGV4IG5leHQ7Cit9IFByb3RvY29sRW50cnk7CisKK3N0YXRpYyB2b2lkIHNldEV4dGVybmFsUHJvdG9jb2wgKEJyYWlsbGVEaXNwbGF5ICpicmwsIFByb3RvY29sSW5kZXggaW5kZXgpOworI2RlZmluZSBJUl9QUk9UT0NPTF9ERUZBVUxUIElSX1BST1RPQ09MX0VVUk9CUkFJTExFCisKK3R5cGVkZWYgc3RydWN0IHsKKyAgdW5zaWduZWQgY2hhciBiYXNlOworICB1bnNpZ25lZCBjaGFyIGNvbXBvc2l0ZTsKK30gQ29tcG9zaXRlQ2hhcmFjdGVyRW50cnk7CisKK3N0YXRpYyBjb25zdCBDb21wb3NpdGVDaGFyYWN0ZXJFbnRyeSBjb21wb3NpdGVDaGFyYWN0ZXJUYWJsZV9jaXJjdW1mbGV4W10gPSB7CisgIHsuYmFzZT0wWDYxLCAuY29tcG9zaXRlPTBYRTJ9LCAvLyBhw6IKKyAgey5iYXNlPTBYNjUsIC5jb21wb3NpdGU9MFhFQX0sIC8vIGXDqgorICB7LmJhc2U9MFg2OSwgLmNvbXBvc2l0ZT0wWEVFfSwgLy8gacOuCisgIHsuYmFzZT0wWDZGLCAuY29tcG9zaXRlPTBYRjR9LCAvLyBvw7QKKyAgey5iYXNlPTBYNzUsIC5jb21wb3NpdGU9MFhGQn0sIC8vIHXDuworCisgIHsuYmFzZT0wWDQxLCAuY29tcG9zaXRlPTBYQzJ9LCAvLyBBw4IKKyAgey5iYXNlPTBYNDUsIC5jb21wb3NpdGU9MFhDQX0sIC8vIEXDigorICB7LmJhc2U9MFg0OSwgLmNvbXBvc2l0ZT0wWENFfSwgLy8gScOOCisgIHsuYmFzZT0wWDRGLCAuY29tcG9zaXRlPTBYRDR9LCAvLyBPw5QKKyAgey5iYXNlPTBYNTUsIC5jb21wb3NpdGU9MFhEQn0sIC8vIFXDmworCisgIHsuYmFzZT0wWDAwLCAuY29tcG9zaXRlPTBYQTh9Cit9OworCitzdGF0aWMgY29uc3QgQ29tcG9zaXRlQ2hhcmFjdGVyRW50cnkgY29tcG9zaXRlQ2hhcmFjdGVyVGFibGVfdHJlbWFbXSA9IHsKKyAgey5iYXNlPTBYNjEsIC5jb21wb3NpdGU9MFhFNH0sIC8vIGHDpAorICB7LmJhc2U9MFg2NSwgLmNvbXBvc2l0ZT0wWEVCfSwgLy8gZcOrCisgIHsuYmFzZT0wWDY5LCAuY29tcG9zaXRlPTBYRUZ9LCAvLyBpw68KKyAgey5iYXNlPTBYNkYsIC5jb21wb3NpdGU9MFhGNn0sIC8vIG/DtgorICB7LmJhc2U9MFg3NSwgLmNvbXBvc2l0ZT0wWEZDfSwgLy8gdcO8CisKKyAgey5iYXNlPTBYNDEsIC5jb21wb3NpdGU9MFhDNH0sIC8vIEHDhAorICB7LmJhc2U9MFg0NSwgLmNvbXBvc2l0ZT0wWENCfSwgLy8gRcOLCisgIHsuYmFzZT0wWDQ5LCAuY29tcG9zaXRlPTBYQ0Z9LCAvLyBJw48KKyAgey5iYXNlPTBYNEYsIC5jb21wb3NpdGU9MFhENn0sIC8vIE/DlgorICB7LmJhc2U9MFg1NSwgLmNvbXBvc2l0ZT0wWERDfSwgLy8gVcOcCisKKyAgey5iYXNlPTBYMDAsIC5jb21wb3NpdGU9MFg1RX0KK307CisKK3N0YXRpYyBjb25zdCBDb21wb3NpdGVDaGFyYWN0ZXJFbnRyeSAqY29tcG9zaXRlQ2hhcmFjdGVyVGFibGVzW10gPSB7CisgIGNvbXBvc2l0ZUNoYXJhY3RlclRhYmxlX2NpcmN1bWZsZXgsCisgIGNvbXBvc2l0ZUNoYXJhY3RlclRhYmxlX3RyZW1hCit9OworCit0eXBlZGVmIGVudW0geworICB4dHNMZWZ0U2hpZnRQcmVzc2VkLAorICB4dHNSaWdodFNoaWZ0UHJlc3NlZCwKKyAgeHRzU2hpZnRMb2NrZWQsCisKKyAgeHRzTGVmdENvbnRyb2xQcmVzc2VkLAorICB4dHNSaWdodENvbnRyb2xQcmVzc2VkLAorCisgIHh0c0xlZnRBbHRQcmVzc2VkLAorICB4dHNSaWdodEFsdFByZXNzZWQsCisKKyAgeHRzTGVmdFdpbmRvd3NQcmVzc2VkLAorICB4dHNSaWdodFdpbmRvd3NQcmVzc2VkLAorCisgIHh0c0luc2VydFByZXNzZWQsCisgIHh0c0ZuUHJlc3NlZAorfSBYdFN0YXRlOworCisjZGVmaW5lIFhUU19CSVQobnVtYmVyKSAoMSA8PCAobnVtYmVyKSkKKyNkZWZpbmUgWFRTX1RFU1QoYml0cykgKGJybC0+ZGF0YS0+eHQuc3RhdGUgJiAoYml0cykpCisjZGVmaW5lIFhUU19TSElGVCBYVFNfVEVTVChYVFNfQklUKHh0c0xlZnRTaGlmdFByZXNzZWQpIHwgWFRTX0JJVCh4dHNSaWdodFNoaWZ0UHJlc3NlZCkgfCBYVFNfQklUKHh0c1NoaWZ0TG9ja2VkKSkKKyNkZWZpbmUgWFRTX0NPTlRST0wgWFRTX1RFU1QoWFRTX0JJVCh4dHNMZWZ0Q29udHJvbFByZXNzZWQpIHwgWFRTX0JJVCh4dHNSaWdodENvbnRyb2xQcmVzc2VkKSkKKyNkZWZpbmUgWFRTX0FMVCBYVFNfVEVTVChYVFNfQklUKHh0c0xlZnRBbHRQcmVzc2VkKSkKKyNkZWZpbmUgWFRTX0FMVEdSIFhUU19URVNUKFhUU19CSVQoeHRzUmlnaHRBbHRQcmVzc2VkKSkKKyNkZWZpbmUgWFRTX1dJTiBYVFNfVEVTVChYVFNfQklUKHh0c0xlZnRXaW5kb3dzUHJlc3NlZCkpCisjZGVmaW5lIFhUU19JTlNFUlQgWFRTX1RFU1QoWFRTX0JJVCh4dHNJbnNlcnRQcmVzc2VkKSkKKyNkZWZpbmUgWFRTX0ZOIFhUU19URVNUKFhUU19CSVQoeHRzRm5QcmVzc2VkKSkKKwordHlwZWRlZiBlbnVtIHsKKyAgWHRLZXlUeXBlX2lnbm9yZSA9IDAsIC8qIHJlcXVpcmVkIGZvciB1bmluaXRpYWxpemVkIGVudHJpZXMgKi8KKyAgWHRLZXlUeXBlX21vZGlmaWVyLAorICBYdEtleVR5cGVfbG9jaywKKyAgWHRLZXlUeXBlX2NoYXJhY3RlciwKKyAgWHRLZXlUeXBlX2Z1bmN0aW9uLAorICBYdEtleVR5cGVfY29tcGxleCwKKyAgWHRLZXlUeXBlX2NvbXBvc2l0ZQorfSBYdEtleVR5cGU7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgdW5zaWduZWQgY2hhciB0eXBlOworICB1bnNpZ25lZCBjaGFyIGFyZzE7CisgIHVuc2lnbmVkIGNoYXIgYXJnMjsKKyAgdW5zaWduZWQgY2hhciBhcmczOworfSBYdEtleUVudHJ5OworCit0eXBlZGVmIGVudW0geworICBYVF9LRVlTXzAwLAorICBYVF9LRVlTX0UwLAorICBYVF9LRVlTX0UxCit9IFhUX0tFWV9TRVQ7CisKKyNkZWZpbmUgWFRfUkVMRUFTRSAwWDgwCisjZGVmaW5lIFhUX0tFWShzZXQsa2V5KSAoKFhUX0tFWVNfIyNzZXQgPDwgNykgfCAoa2V5KSkKKworc3RhdGljIGNvbnN0IFh0S2V5RW50cnkgeHRLZXlUYWJsZVtdID0geworICAvKiByb3cgMSAqLworICBbWFRfS0VZKDAwLDBYMDEpXSA9IHsgLy8ga2V5IDE6IGVzY2FwZQorICAgIC50eXBlID0gWHRLZXlUeXBlX2Z1bmN0aW9uLAorICAgIC5hcmcxPTBYMUIKKyAgfQorICAsCisgIFtYVF9LRVkoMDAsMFgzQildID0geyAvLyBrZXkgMjogRjEKKyAgICAudHlwZSA9IFh0S2V5VHlwZV9mdW5jdGlvbiwKKyAgICAuYXJnMT0wWDcwCisgIH0KKyAgLAorICBbWFRfS0VZKDAwLDBYM0MpXSA9IHsgLy8ga2V5IDM6IEYyCisgICAgLnR5cGUgPSBYdEtleVR5cGVfZnVuY3Rpb24sCisgICAgLmFyZzE9MFg3MQorICB9CisgICwKKyAgW1hUX0tFWSgwMCwwWDNEKV0gPSB7IC8vIGtleSA0OiBGMworICAgIC50eXBlID0gWHRLZXlUeXBlX2Z1bmN0aW9uLAorICAgIC5hcmcxPTBYNzIKKyAgfQorICAsCisgIFtYVF9LRVkoMDAsMFgzRSldID0geyAvLyBrZXkgNTogRjQKKyAgICAudHlwZSA9IFh0S2V5VHlwZV9mdW5jdGlvbiwKKyAgICAuYXJnMT0wWDczCisgIH0KKyAgLAorICBbWFRfS0VZKDAwLDBYM0YpXSA9IHsgLy8ga2V5IDY6IEY1CisgICAgLnR5cGUgPSBYdEtleVR5cGVfZnVuY3Rpb24sCisgICAgLmFyZzE9MFg3NAorICB9CisgICwKKyAgW1hUX0tFWSgwMCwwWDQwKV0gPSB7IC8vIGtleSA3OiBGNgorICAgIC50eXBlID0gWHRLZXlUeXBlX2Z1bmN0aW9uLAorICAgIC5hcmcxPTBYNzUKKyAgfQorICAsCisgIFtYVF9LRVkoMDAsMFg0MSldID0geyAvLyBrZXkgODogRjcKKyAgICAudHlwZSA9IFh0S2V5VHlwZV9mdW5jdGlvbiwKKyAgICAuYXJnMT0wWDc2CisgIH0KKyAgLAorICBbWFRfS0VZKDAwLDBYNDIpXSA9IHsgLy8ga2V5IDk6IEY4CisgICAgLnR5cGUgPSBYdEtleVR5cGVfZnVuY3Rpb24sCisgICAgLmFyZzE9MFg3NworICB9CisgICwKKyAgW1hUX0tFWSgwMCwwWDQzKV0gPSB7IC8vIGtleSAxMDogRjkKKyAgICAudHlwZSA9IFh0S2V5VHlwZV9mdW5jdGlvbiwKKyAgICAuYXJnMT0wWDc4CisgIH0KKyAgLAorICBbWFRfS0VZKDAwLDBYNDQpXSA9IHsgLy8ga2V5IDExOiBGMTAKKyAgICAudHlwZSA9IFh0S2V5VHlwZV9mdW5jdGlvbiwKKyAgICAuYXJnMT0wWDc5CisgIH0KKyAgLAorICBbWFRfS0VZKDAwLDBYNTcpXSA9IHsgLy8ga2V5IDEyOiBGMTEKKyAgICAudHlwZSA9IFh0S2V5VHlwZV9mdW5jdGlvbiwKKyAgICAuYXJnMT0wWDdBCisgIH0KKyAgLAorICBbWFRfS0VZKDAwLDBYNTgpXSA9IHsgLy8ga2V5IDEzOiBGMTIKKyAgICAudHlwZSA9IFh0S2V5VHlwZV9mdW5jdGlvbiwKKyAgICAuYXJnMT0wWDdCCisgIH0KKyAgLAorICBbWFRfS0VZKDAwLDBYNDYpXSA9IHsgLy8ga2V5IDE0OiBzY3JvbGwgbG9jaworICAgIC50eXBlID0gWHRLZXlUeXBlX2lnbm9yZQorICB9CisgICwKKyAgW1hUX0tFWShFMSwwWDFEKV0gPSB7IC8vIGtleSAxNTogcGF1c2UgYnJlYWsKKyAgICAudHlwZSA9IFh0S2V5VHlwZV9pZ25vcmUKKyAgfQorICAsCisgIFtYVF9LRVkoRTAsMFg1MildID0geyAvLyBrZXkgMTY6IGluc2VydAorICAgIC50eXBlID0gWHRLZXlUeXBlX2NvbXBsZXgsCisgICAgLmFyZzE9MFgwRiwgLmFyZzI9MSwgLmFyZzM9eHRzSW5zZXJ0UHJlc3NlZAorICB9CisgICwKKyAgW1hUX0tFWShFMCwwWDUzKV0gPSB7IC8vIGtleSAxNzogZGVsZXRlCisgICAgLnR5cGUgPSBYdEtleVR5cGVfZnVuY3Rpb24sCisgICAgLmFyZzE9MFgxMCwgLmFyZzI9MQorICB9CisgICwKKworICAvKiByb3cgMiAqLworICBbWFRfS0VZKDAwLDBYMDIpXSA9IHsgLy8ga2V5IDE6ICYxCisgICAgLnR5cGUgPSBYdEtleVR5cGVfY2hhcmFjdGVyLAorICAgIC5hcmcxPTBYMjYsIC5hcmcyPTBYMzEKKyAgfQorICAsCisgIFtYVF9LRVkoMDAsMFgwMyldID0geyAvLyBrZXkgMjogw6kyfgorICAgIC50eXBlID0gWHRLZXlUeXBlX2NoYXJhY3RlciwKKyAgICAuYXJnMT0wWEU5LCAuYXJnMj0wWDMyLCAuYXJnMz0wWDdFCisgIH0KKyAgLAorICBbWFRfS0VZKDAwLDBYMDQpXSA9IHsgLy8ga2V5IDM6ICIzIworICAgIC50eXBlID0gWHRLZXlUeXBlX2NoYXJhY3RlciwKKyAgICAuYXJnMT0wWDIyLCAuYXJnMj0wWDMzLCAuYXJnMz0wWDIzCisgIH0KKyAgLAorICBbWFRfS0VZKDAwLDBYMDUpXSA9IHsgLy8ga2V5IDQ6ICc0eworICAgIC50eXBlID0gWHRLZXlUeXBlX2NoYXJhY3RlciwKKyAgICAuYXJnMT0wWDI3LCAuYXJnMj0wWDM0LCAuYXJnMz0wWDdCCisgIH0KKyAgLAorICBbWFRfS0VZKDAwLDBYMDYpXSA9IHsgLy8ga2V5IDU6ICg1WworICAgIC50eXBlID0gWHRLZXlUeXBlX2NoYXJhY3RlciwKKyAgICAuYXJnMT0wWDI4LCAuYXJnMj0wWDM1LCAuYXJnMz0wWDVCCisgIH0KKyAgLAorICBbWFRfS0VZKDAwLDBYMDcpXSA9IHsgLy8ga2V5IDY6IC02fAorICAgIC50eXBlID0gWHRLZXlUeXBlX2NoYXJhY3RlciwKKyAgICAuYXJnMT0wWDJELCAuYXJnMj0wWDM2LCAuYXJnMz0wWDdDCisgIH0KKyAgLAorICBbWFRfS0VZKDAwLDBYMDgpXSA9IHsgLy8ga2V5IDc6IMOoN2AKKyAgICAudHlwZSA9IFh0S2V5VHlwZV9jaGFyYWN0ZXIsCisgICAgLmFyZzE9MFhFOCwgLmFyZzI9MFgzNywgLmFyZzM9MFg2MAorICB9CisgICwKKyAgW1hUX0tFWSgwMCwwWDA5KV0gPSB7IC8vIGtleSA4OiBfOAorICAgIC50eXBlID0gWHRLZXlUeXBlX2NoYXJhY3RlciwKKyAgICAuYXJnMT0wWDVGLCAuYXJnMj0wWDM4LCAuYXJnMz0wWDVDCisgIH0KKyAgLAorICBbWFRfS0VZKDAwLDBYMEEpXSA9IHsgLy8ga2V5IDk6IMOnOV4KKyAgICAudHlwZSA9IFh0S2V5VHlwZV9jaGFyYWN0ZXIsCisgICAgLmFyZzE9MFhFNywgLmFyZzI9MFgzOSwgLmFyZzM9MFg1RQorICB9CisgICwKKyAgW1hUX0tFWSgwMCwwWDBCKV0gPSB7IC8vIGtleSAxMDogw6AwQAorICAgIC50eXBlID0gWHRLZXlUeXBlX2NoYXJhY3RlciwKKyAgICAuYXJnMT0wWEUwLCAuYXJnMj0wWDMwLCAuYXJnMz0wWDQwCisgIH0KKyAgLAorICBbWFRfS0VZKDAwLDBYMEMpXSA9IHsgLy8ga2V5IDExOiApwrBdCisgICAgLnR5cGUgPSBYdEtleVR5cGVfY2hhcmFjdGVyLAorICAgIC5hcmcxPTBYMjksIC5hcmcyPTBYQjAsIC5hcmczPTBYNUQKKyAgfQorICAsCisgIFtYVF9LRVkoMDAsMFgwRCldID0geyAvLyBrZXkgMTI6ID0rfQorICAgIC50eXBlID0gWHRLZXlUeXBlX2NoYXJhY3RlciwKKyAgICAuYXJnMT0wWDNELCAuYXJnMj0wWDJCLCAuYXJnMz0wWDdECisgIH0KKyAgLAorICBbWFRfS0VZKDAwLDBYMjkpXSA9IHsgLy8ga2V5IDEzOiDCsgorICAgIC50eXBlID0gWHRLZXlUeXBlX2NoYXJhY3RlciwKKyAgICAuYXJnMT0wWEIyCisgIH0KKyAgLAorICBbWFRfS0VZKDAwLDBYMEUpXSA9IHsgLy8ga2V5IDE0OiBiYWNrc3BhY2UKKyAgICAudHlwZSA9IFh0S2V5VHlwZV9mdW5jdGlvbiwKKyAgICAuYXJnMT0wWDA4CisgIH0KKyAgLAorCisgIC8qIHJvdyAzICovCisgIFtYVF9LRVkoMDAsMFgwRildID0geyAvLyBrZXkgMTogdGFiCisgICAgLnR5cGUgPSBYdEtleVR5cGVfZnVuY3Rpb24sCisgICAgLmFyZzE9MFgwOQorICB9CisgICwKKyAgW1hUX0tFWSgwMCwwWDEwKV0gPSB7IC8vIGtleSAyOiBhQQorICAgIC50eXBlID0gWHRLZXlUeXBlX2NoYXJhY3RlciwKKyAgICAuYXJnMT0wWDYxLCAuYXJnMj0wWDQxCisgIH0KKyAgLAorICBbWFRfS0VZKDAwLDBYMTEpXSA9IHsgLy8ga2V5IDM6IHpaCisgICAgLnR5cGUgPSBYdEtleVR5cGVfY2hhcmFjdGVyLAorICAgIC5hcmcxPTBYN0EsIC5hcmcyPTBYNUEKKyAgfQorICAsCisgIFtYVF9LRVkoMDAsMFgxMildID0geyAvLyBrZXkgNDogZUXCgAorICAgIC50eXBlID0gWHRLZXlUeXBlX2NoYXJhY3RlciwKKyAgICAuYXJnMT0wWDY1LCAuYXJnMj0wWDQ1LCAuYXJnMz0wWDgwCisgIH0KKyAgLAorICBbWFRfS0VZKDAwLDBYMTMpXSA9IHsgLy8ga2V5IDU6IHJSwq4KKyAgICAudHlwZSA9IFh0S2V5VHlwZV9jaGFyYWN0ZXIsCisgICAgLmFyZzE9MFg3MiwgLmFyZzI9MFg1MiwgLmFyZzM9MFhBRQorICB9CisgICwKKyAgW1hUX0tFWSgwMCwwWDE0KV0gPSB7IC8vIGtleSA2OiB0VMKZCisgICAgLnR5cGUgPSBYdEtleVR5cGVfY2hhcmFjdGVyLAorICAgIC5hcmcxPTBYNzQsIC5hcmcyPTBYNTQsIC5hcmczPTBYOTkKKyAgfQorICAsCisgIFtYVF9LRVkoMDAsMFgxNSldID0geyAvLyBrZXkgNzogeVkKKyAgICAudHlwZSA9IFh0S2V5VHlwZV9jaGFyYWN0ZXIsCisgICAgLmFyZzE9MFg3OSwgLmFyZzI9MFg1OQorICB9CisgICwKKyAgW1hUX0tFWSgwMCwwWDE2KV0gPSB7IC8vIGtleSA4OiB1VQorICAgIC50eXBlID0gWHRLZXlUeXBlX2NoYXJhY3RlciwKKyAgICAuYXJnMT0wWDc1LCAuYXJnMj0wWDU1CisgIH0KKyAgLAorICBbWFRfS0VZKDAwLDBYMTcpXSA9IHsgLy8ga2V5IDk6IGlJCisgICAgLnR5cGUgPSBYdEtleVR5cGVfY2hhcmFjdGVyLAorICAgIC5hcmcxPTBYNjksIC5hcmcyPTBYNDkKKyAgfQorICAsCisgIFtYVF9LRVkoMDAsMFgxOCldID0geyAvLyBrZXkgMTA6IG9PCisgICAgLnR5cGUgPSBYdEtleVR5cGVfY2hhcmFjdGVyLAorICAgIC5hcmcxPTBYNkYsIC5hcmcyPTBYNEYKKyAgfQorICAsCisgIFtYVF9LRVkoMDAsMFgxOSldID0geyAvLyBrZXkgMTE6IHBQCisgICAgLnR5cGUgPSBYdEtleVR5cGVfY2hhcmFjdGVyLAorICAgIC5hcmcxPTBYNzAsIC5hcmcyPTBYNTAKKyAgfQorICAsCisgIFtYVF9LRVkoMDAsMFgxQSldID0geyAvLyBrZXkgMTI6IGNpcmN1bWZsZXggdHLDqW1hCisgICAgLnR5cGUgPSBYdEtleVR5cGVfY29tcG9zaXRlLAorICAgIC5hcmcxPTEsIC5hcmcyPTIKKyAgfQorICAsCisgIFtYVF9LRVkoMDAsMFgxQildID0geyAvLyBrZXkgMTM6ICTCo8KkCisgICAgLnR5cGUgPSBYdEtleVR5cGVfY2hhcmFjdGVyLAorICAgIC5hcmcxPTBYMjQsIC5hcmcyPTBYQTMsIC5hcmczPTBYQTQKKyAgfQorICAsCisgIFtYVF9LRVkoMDAsMFgxQyldID0geyAvLyBrZXkgMTQ6IHJldHVybgorICAgIC50eXBlID0gWHRLZXlUeXBlX2Z1bmN0aW9uLAorICAgIC5hcmcxPTBYMEQKKyAgfQorICAsCisKKyAgLyogcm93IDQgKi8KKyAgW1hUX0tFWSgwMCwwWDNBKV0gPSB7IC8vIGtleSAxOiBzaGlmdCBsb2NrCisgICAgLnR5cGUgPSBYdEtleVR5cGVfbG9jaywKKyAgICAuYXJnMT14dHNTaGlmdExvY2tlZAorICB9CisgICwKKyAgW1hUX0tFWSgwMCwwWDFFKV0gPSB7IC8vIGtleSAyOiBxUQorICAgIC50eXBlID0gWHRLZXlUeXBlX2NoYXJhY3RlciwKKyAgICAuYXJnMT0wWDcxLCAuYXJnMj0wWDUxCisgIH0KKyAgLAorICBbWFRfS0VZKDAwLDBYMUYpXSA9IHsgLy8ga2V5IDM6IHNTCisgICAgLnR5cGUgPSBYdEtleVR5cGVfY2hhcmFjdGVyLAorICAgIC5hcmcxPTBYNzMsIC5hcmcyPTBYNTMKKyAgfQorICAsCisgIFtYVF9LRVkoMDAsMFgyMCldID0geyAvLyBrZXkgNDogZEQKKyAgICAudHlwZSA9IFh0S2V5VHlwZV9jaGFyYWN0ZXIsCisgICAgLmFyZzE9MFg2NCwgLmFyZzI9MFg0NAorICB9CisgICwKKyAgW1hUX0tFWSgwMCwwWDIxKV0gPSB7IC8vIGtleSA1OiBmRgorICAgIC50eXBlID0gWHRLZXlUeXBlX2NoYXJhY3RlciwKKyAgICAuYXJnMT0wWDY2LCAuYXJnMj0wWDQ2CisgIH0KKyAgLAorICBbWFRfS0VZKDAwLDBYMjIpXSA9IHsgLy8ga2V5IDY6IGdHCisgICAgLnR5cGUgPSBYdEtleVR5cGVfY2hhcmFjdGVyLAorICAgIC5hcmcxPTBYNjcsIC5hcmcyPTBYNDcKKyAgfQorICAsCisgIFtYVF9LRVkoMDAsMFgyMyldID0geyAvLyBrZXkgNzogaEgKKyAgICAudHlwZSA9IFh0S2V5VHlwZV9jaGFyYWN0ZXIsCisgICAgLmFyZzE9MFg2OCwgLmFyZzI9MFg0OAorICB9CisgICwKKyAgW1hUX0tFWSgwMCwwWDI0KV0gPSB7IC8vIGtleSA4OiBqSgorICAgIC50eXBlID0gWHRLZXlUeXBlX2NoYXJhY3RlciwKKyAgICAuYXJnMT0wWDZBLCAuYXJnMj0wWDRBCisgIH0KKyAgLAorICBbWFRfS0VZKDAwLDBYMjUpXSA9IHsgLy8ga2V5IDk6IGtLCisgICAgLnR5cGUgPSBYdEtleVR5cGVfY2hhcmFjdGVyLAorICAgIC5hcmcxPTBYNkIsIC5hcmcyPTBYNEIKKyAgfQorICAsCisgIFtYVF9LRVkoMDAsMFgyNildID0geyAvLyBrZXkgMTA6IGxMCisgICAgLnR5cGUgPSBYdEtleVR5cGVfY2hhcmFjdGVyLAorICAgIC5hcmcxPTBYNkMsIC5hcmcyPTBYNEMKKyAgfQorICAsCisgIFtYVF9LRVkoMDAsMFgyNyldID0geyAvLyBrZXkgMTE6IG1NCisgICAgLnR5cGUgPSBYdEtleVR5cGVfY2hhcmFjdGVyLAorICAgIC5hcmcxPTBYNkQsIC5hcmcyPTBYNEQKKyAgfQorICAsCisgIFtYVF9LRVkoMDAsMFgyOCldID0geyAvLyBrZXkgMTI6IMO5JQorICAgIC50eXBlID0gWHRLZXlUeXBlX2NoYXJhY3RlciwKKyAgICAuYXJnMT0wWEY5LCAuYXJnMj0wWDI1CisgIH0KKyAgLAorICBbWFRfS0VZKDAwLDBYMkIpXSA9IHsgLy8ga2V5IDEzOiAqwrUKKyAgICAudHlwZSA9IFh0S2V5VHlwZV9jaGFyYWN0ZXIsCisgICAgLmFyZzE9MFgyQSwgLmFyZzI9MFhCNQorICB9CisgICwKKyAgW1hUX0tFWSgwMCwwWDFDKV0gPSB7IC8vIGtleSAxNDogcmV0dXJuCisgICAgLnR5cGUgPSBYdEtleVR5cGVfZnVuY3Rpb24sCisgICAgLmFyZzE9MFgwRAorICB9CisgICwKKworICAvKiByb3cgNSAqLworICBbWFRfS0VZKDAwLDBYMkEpXSA9IHsgLy8ga2V5IDE6IGxlZnQgc2hpZnQKKyAgICAudHlwZSA9IFh0S2V5VHlwZV9tb2RpZmllciwKKyAgICAuYXJnMT14dHNMZWZ0U2hpZnRQcmVzc2VkLCAuYXJnMj14dHNTaGlmdExvY2tlZAorICB9CisgICwKKyAgW1hUX0tFWSgwMCwwWDJDKV0gPSB7IC8vIGtleSAyOiB3VworICAgIC50eXBlID0gWHRLZXlUeXBlX2NoYXJhY3RlciwKKyAgICAuYXJnMT0wWDc3LCAuYXJnMj0wWDU3CisgIH0KKyAgLAorICBbWFRfS0VZKDAwLDBYMkQpXSA9IHsgLy8ga2V5IDM6IHhYCisgICAgLnR5cGUgPSBYdEtleVR5cGVfY2hhcmFjdGVyLAorICAgIC5hcmcxPTBYNzgsIC5hcmcyPTBYNTgKKyAgfQorICAsCisgIFtYVF9LRVkoMDAsMFgyRSldID0geyAvLyBrZXkgNDogY0PCqQorICAgIC50eXBlID0gWHRLZXlUeXBlX2NoYXJhY3RlciwKKyAgICAuYXJnMT0wWDYzLCAuYXJnMj0wWDQzLCAuYXJnMz0wWEE5CisgIH0KKyAgLAorICBbWFRfS0VZKDAwLDBYMkYpXSA9IHsgLy8ga2V5IDU6IHZWCisgICAgLnR5cGUgPSBYdEtleVR5cGVfY2hhcmFjdGVyLAorICAgIC5hcmcxPTBYNzYsIC5hcmcyPTBYNTYKKyAgfQorICAsCisgIFtYVF9LRVkoMDAsMFgzMCldID0geyAvLyBrZXkgNjogYkIKKyAgICAudHlwZSA9IFh0S2V5VHlwZV9jaGFyYWN0ZXIsCisgICAgLmFyZzE9MFg2MiwgLmFyZzI9MFg0MgorICB9CisgICwKKyAgW1hUX0tFWSgwMCwwWDMxKV0gPSB7IC8vIGtleSA3OiBuTgorICAgIC50eXBlID0gWHRLZXlUeXBlX2NoYXJhY3RlciwKKyAgICAuYXJnMT0wWDZFLCAuYXJnMj0wWDRFCisgIH0KKyAgLAorICBbWFRfS0VZKDAwLDBYMzIpXSA9IHsgLy8ga2V5IDg6ICw/CisgICAgLnR5cGUgPSBYdEtleVR5cGVfY2hhcmFjdGVyLAorICAgIC5hcmcxPTBYMkMsIC5hcmcyPTBYM0YKKyAgfQorICAsCisgIFtYVF9LRVkoMDAsMFgzMyldID0geyAvLyBrZXkgOTogOy4KKyAgICAudHlwZSA9IFh0S2V5VHlwZV9jaGFyYWN0ZXIsCisgICAgLmFyZzE9MFgzQiwgLmFyZzI9MFgyRQorICB9CisgICwKKyAgW1hUX0tFWSgwMCwwWDM0KV0gPSB7IC8vIGtleSAxMDogOi8KKyAgICAudHlwZSA9IFh0S2V5VHlwZV9jaGFyYWN0ZXIsCisgICAgLmFyZzE9MFgzQSwgLmFyZzI9MFgyRgorICB9CisgICwKKyAgW1hUX0tFWSgwMCwwWDM1KV0gPSB7IC8vIGtleSAxMTogIcKnCisgICAgLnR5cGUgPSBYdEtleVR5cGVfY2hhcmFjdGVyLAorICAgIC5hcmcxPTBYMjEsIC5hcmcyPTBYQTcKKyAgfQorICAsCisgIFtYVF9LRVkoMDAsMFg1NildID0geyAvLyBrZXkgMTI6IDw+CisgICAgLnR5cGUgPSBYdEtleVR5cGVfY2hhcmFjdGVyLAorICAgIC5hcmcxPTBYM0MsIC5hcmcyPTBYM0UKKyAgfQorICAsCisgIFtYVF9LRVkoMDAsMFgzNildID0geyAvLyBrZXkgMTM6IHJpZ2h0IHNoaWZ0CisgICAgLnR5cGUgPSBYdEtleVR5cGVfbW9kaWZpZXIsCisgICAgLmFyZzE9eHRzUmlnaHRTaGlmdFByZXNzZWQsIC5hcmcyPXh0c1NoaWZ0TG9ja2VkCisgIH0KKyAgLAorCisgIC8qIHJvdyA2ICovCisgIFtYVF9LRVkoMDAsMFgxRCldID0geyAvLyBrZXkgMTogbGVmdCBjb250cm9sCisgICAgLnR5cGUgPSBYdEtleVR5cGVfbW9kaWZpZXIsCisgICAgLmFyZzE9eHRzTGVmdENvbnRyb2xQcmVzc2VkCisgIH0KKyAgLAorICBbWFRfS0VZKEUxLDBYMDEpXSA9IHsgLy8ga2V5IDI6IGZuCisgICAgLnR5cGUgPSBYdEtleVR5cGVfbW9kaWZpZXIsCisgICAgLmFyZzE9eHRzRm5QcmVzc2VkCisgIH0KKyAgLAorICBbWFRfS0VZKEUwLDBYNUIpXSA9IHsgLy8ga2V5IDM6IGxlZnQgd2luZG93cworICAgIC50eXBlID0gWHRLZXlUeXBlX2NvbXBsZXgsCisgICAgLmFyZzE9MFg1QiwgLmFyZzM9eHRzTGVmdFdpbmRvd3NQcmVzc2VkCisgIH0KKyAgLAorICBbWFRfS0VZKDAwLDBYMzgpXSA9IHsgLy8ga2V5IDQ6IGxlZnQgYWx0CisgICAgLnR5cGUgPSBYdEtleVR5cGVfbW9kaWZpZXIsCisgICAgLmFyZzE9eHRzTGVmdEFsdFByZXNzZWQKKyAgfQorICAsCisgIFtYVF9LRVkoMDAsMFgzOSldID0geyAvLyBrZXkgNTogc3BhY2UKKyAgICAudHlwZSA9IFh0S2V5VHlwZV9mdW5jdGlvbiwKKyAgICAuYXJnMT0wWDIwCisgIH0KKyAgLAorICBbWFRfS0VZKEUwLDBYMzgpXSA9IHsgLy8ga2V5IDY6IHJpZ2h0IGFsdAorICAgIC50eXBlID0gWHRLZXlUeXBlX21vZGlmaWVyLAorICAgIC5hcmcxPXh0c1JpZ2h0QWx0UHJlc3NlZAorICB9CisgICwKKyAgW1hUX0tFWShFMCwwWDVEKV0gPSB7IC8vIGtleSA3OiByaWdodCB3aW5kb3dzCisgICAgLnR5cGUgPSBYdEtleVR5cGVfZnVuY3Rpb24sCisgICAgLmFyZzE9MFg1RAorICB9CisgICwKKyAgW1hUX0tFWShFMCwwWDFEKV0gPSB7IC8vIGtleSA4OiByaWdodCBjb250cm9sCisgICAgLnR5cGUgPSBYdEtleVR5cGVfbW9kaWZpZXIsCisgICAgLmFyZzE9eHRzUmlnaHRDb250cm9sUHJlc3NlZAorICB9CisgICwKKworICAvKiBhcnJvdyBrZXlzICovCisgIFtYVF9LRVkoRTAsMFg0OCldID0geyAvLyBrZXkgMTogdXAgYXJyb3cKKyAgICAudHlwZSA9IFh0S2V5VHlwZV9mdW5jdGlvbiwKKyAgICAuYXJnMT0wWDBELCAuYXJnMj0xCisgIH0KKyAgLAorICBbWFRfS0VZKEUwLDBYNEIpXSA9IHsgLy8ga2V5IDI6IGxlZnQgYXJyb3cKKyAgICAudHlwZSA9IFh0S2V5VHlwZV9mdW5jdGlvbiwKKyAgICAuYXJnMT0wWDBCLCAuYXJnMj0xCisgIH0KKyAgLAorICBbWFRfS0VZKEUwLDBYNTApXSA9IHsgLy8ga2V5IDM6IGRvd24gYXJyb3cKKyAgICAudHlwZSA9IFh0S2V5VHlwZV9mdW5jdGlvbiwKKyAgICAuYXJnMT0wWDBFLCAuYXJnMj0xCisgIH0KKyAgLAorICBbWFRfS0VZKEUwLDBYNEQpXSA9IHsgLy8ga2V5IDQ6IHJpZ2h0IGFycm93CisgICAgLnR5cGUgPSBYdEtleVR5cGVfZnVuY3Rpb24sCisgICAgLmFyZzE9MFgwQywgLmFyZzI9MQorICB9CisgICwKKyAgW1hUX0tFWShFMCwwWDQ5KV0gPSB7IC8vIGZuICsga2V5IDE6IHBhZ2UgdXAKKyAgICAudHlwZSA9IFh0S2V5VHlwZV9mdW5jdGlvbiwKKyAgICAuYXJnMT0wWDA5LCAuYXJnMj0xCisgIH0KKyAgLAorICBbWFRfS0VZKEUwLDBYNDcpXSA9IHsgLy8gZm4gKyBrZXkgMjogaG9tZQorICAgIC50eXBlID0gWHRLZXlUeXBlX2Z1bmN0aW9uLAorICAgIC5hcmcxPTBYMDcsIC5hcmcyPTEKKyAgfQorICAsCisgIFtYVF9LRVkoRTAsMFg1MSldID0geyAvLyBmbiArIGtleSAzOiBwYWdlIGRvd24KKyAgICAudHlwZSA9IFh0S2V5VHlwZV9mdW5jdGlvbiwKKyAgICAuYXJnMT0wWDBBLCAuYXJnMj0xCisgIH0KKyAgLAorICBbWFRfS0VZKEUwLDBYNEYpXSA9IHsgLy8gZm4gKyBrZXkgNDogZW5kCisgICAgLnR5cGUgPSBYdEtleVR5cGVfZnVuY3Rpb24sCisgICAgLmFyZzE9MFgwOCwgLmFyZzI9MQorICB9Cit9OworCitzdHJ1Y3QgQnJhaWxsZURhdGFTdHJ1Y3QgeworICB1bnNpZ25lZCBpc0Nvbm5lY3RlZDoxOworCisgIHVuc2lnbmVkIGlzRW1iZWRkZWQ6MTsKKyAgdW5zaWduZWQgaXNTdXNwZW5kZWQ6MTsKKyAgdW5zaWduZWQgaXNGb3J3YXJkaW5nOjE7CisKKyAgdW5zaWduZWQgaGF2ZVZpc3VhbERpc3BsYXk6MTsKKworICBzdHJ1Y3QgeworICAgIFBvcnQgcG9ydDsKKyAgICBpbnQgKCpoYW5kbGVQYWNrZXQpIChCcmFpbGxlRGlzcGxheSAqYnJsLCBjb25zdCB2b2lkICpwYWNrZXQsIHNpemVfdCBzaXplKTsKKyAgICBpbnQgKCppc09mZmxpbmUpIChCcmFpbGxlRGlzcGxheSAqYnJsKTsKKyAgICBLZXlOdW1iZXJTZXQgbGluZWFyS2V5czsKKyAgfSBpbnRlcm5hbDsKKworICBzdHJ1Y3QgeworICAgIFBvcnQgcG9ydDsKKyAgICBHaW9IYW5kbGVJbnB1dE9iamVjdCAqaGlvOworICAgIGNvbnN0IFByb3RvY29sRW50cnkgKnByb3RvY29sOworICAgIHVuc2lnbmVkIGNoYXIgY2VsbHNbMFhGRl07CisgIH0gZXh0ZXJuYWw7CisKKyAgc3RydWN0IHsKKyAgICBBc3luY0hhbmRsZSBtb25pdG9yOworCisgICAgaW50IGRlbGF5OworICAgIGludCBpbnRlcnZhbDsKKworICAgIFRpbWVWYWx1ZSBzdGFydGVkOworICAgIGxvbmcgaW50IGVsYXBzZWQ7CisgICAgdW5zaWduZWQgcHVsbGVkOjE7CisgIH0gbGF0Y2g7CisKKyAgc3RydWN0IHsKKyAgICB1bnNpZ25lZCBjaGFyIHJlZnJlc2g7CisgICAgdW5zaWduZWQgY2hhciBjZWxsc1swWEZGXTsKKyAgfSBicmFpbGxlOworCisgIHN0cnVjdCB7CisgICAgY29uc3QgQ29tcG9zaXRlQ2hhcmFjdGVyRW50cnkgKmNvbXBvc2l0ZTsKKyAgICBjb25zdCBYdEtleUVudHJ5ICprZXk7CisgICAgdWludDE2X3Qgc3RhdGU7CisgIH0geHQ7CisKKyAgdW5zaWduZWQgY2hhciAqZmlybXdhcmVWZXJzaW9uOworICBjaGFyIHNlcmlhbE51bWJlcls1XTsKK307CisKKy8qIEZ1bmN0aW9uIHJlYWROYXRpdmVQYWNrZXQgKi8KKy8qIFJldHVybnMgdGhlIHNpemUgb2YgdGhlIHJlYWQgcGFja2V0LiAqLworLyogMCBtZWFucyBubyBwYWNrZXQgaGFzIGJlZW4gcmVhZCBhbmQgdGhlcmUgaXMgbm8gZXJyb3IuICovCisvKiAtMSBtZWFucyBhbiBlcnJvciBvY2N1cnJlZCAqLworc3RhdGljIHNpemVfdAorcmVhZE5hdGl2ZVBhY2tldCAoQnJhaWxsZURpc3BsYXkgKmJybCwgUG9ydCAqcG9ydCwgdm9pZCAqcGFja2V0LCBzaXplX3Qgc2l6ZSkgeworICB1bnNpZ25lZCBjaGFyIGJ5dGU7CisgIGludCB3YWl0ID0gMDsKKworICB3aGlsZSAoZ2lvUmVhZEJ5dGUocG9ydC0+Z2lvRW5kcG9pbnQsICZieXRlLCAocG9ydC0+c3RhdGUgJiYgd2FpdCkpKSB7CisgICAgc2l6ZV90IGxlbmd0aCA9IHBvcnQtPnBvc2l0aW9uIC0gcG9ydC0+cGFja2V0OworCisgICAgd2FpdCA9IDE7CisKKyAgICBpZiAocG9ydC0+c3RhdGUpIHsKKyAgICAgIHN3aXRjaCAoYnl0ZSkgeworICAgICAgICBjYXNlIEFTQ0lJX0RMRToKKyAgICAgICAgICBpZiAoIXBvcnQtPmVzY2FwZSkgeworICAgICAgICAgICAgcG9ydC0+ZXNjYXBlID0gMTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgIH0KKworICAgICAgICBjYXNlIEFTQ0lJX0VPVDoKKyAgICAgICAgICBpZiAoIXBvcnQtPmVzY2FwZSkgeworICAgICAgICAgICAgcG9ydC0+c3RhdGUgPSAwOworCisgICAgICAgICAgICBpZiAobGVuZ3RoIDw9IHNpemUpIHsKKyAgICAgICAgICAgICAgbWVtY3B5KHBhY2tldCwgcG9ydC0+cGFja2V0LCBsZW5ndGgpOworICAgICAgICAgICAgICBsb2dJbnB1dFBhY2tldChwYWNrZXQsIGxlbmd0aCk7CisgICAgICAgICAgICAgIHJldHVybiBsZW5ndGg7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGxvZ0lucHV0UHJvYmxlbSgicGFja2V0IGJ1ZmZlciB0b28gc21hbGwiLCBwb3J0LT5wYWNrZXQsIGxlbmd0aCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICB9CisKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICBpZiAobGVuZ3RoIDwgc2l6ZW9mKHBvcnQtPnBhY2tldCkpIHsKKyAgICAgICAgICAgICpwb3J0LT5wb3NpdGlvbiA9IGJ5dGU7CisgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGlmIChsZW5ndGggPT0gc2l6ZW9mKHBvcnQtPnBhY2tldCkpIGxvZ1RydW5jYXRlZFBhY2tldChwb3J0LT5wYWNrZXQsIGxlbmd0aCk7CisgICAgICAgICAgICBsb2dEaXNjYXJkZWRCeXRlKGJ5dGUpOworICAgICAgICAgIH0KKworICAgICAgICAgIHBvcnQtPnBvc2l0aW9uICs9IDE7CisgICAgICAgICAgcG9ydC0+ZXNjYXBlID0gMDsKKyAgICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICB9IGVsc2UgaWYgKGJ5dGUgPT0gQVNDSUlfU09IKSB7CisgICAgICBwb3J0LT5zdGF0ZSA9IDE7CisgICAgICBwb3J0LT5lc2NhcGUgPSAwOworICAgICAgcG9ydC0+cG9zaXRpb24gPSBwb3J0LT5wYWNrZXQ7CisgICAgfSBlbHNlIGlmIChieXRlID09IEFTQ0lJX0FDSykgeworICAgICAgcG9ydC0+aGFuZGxlTmF0aXZlQWNrbm93bGVkZ2VtZW50KGJybCk7CisgICAgfSBlbHNlIHsKKyAgICAgIGxvZ0lnbm9yZWRCeXRlKGJ5dGUpOworICAgIH0KKyAgfQorCisgIGlmIChlcnJubyAhPSBFQUdBSU4pIGxvZ1N5c3RlbUVycm9yKCJyZWFkTmF0aXZlUGFja2V0Iik7CisgIHJldHVybiAwOworfQorCitzdGF0aWMgc2l6ZV90CityZWFkRXVyb2JyYWlsbGVQYWNrZXQgKEJyYWlsbGVEaXNwbGF5ICpicmwsIFBvcnQgKnBvcnQsIHZvaWQgKnBhY2tldCwgc2l6ZV90IHNpemUpIHsKKyAgdW5zaWduZWQgY2hhciBieXRlOworICBpbnQgd2FpdCA9IDA7CisKKyAgd2hpbGUgKGdpb1JlYWRCeXRlKHBvcnQtPmdpb0VuZHBvaW50LCAmYnl0ZSwgKHBvcnQtPnN0YXRlICYmIHdhaXQpKSkgeworICAgIHdhaXQgPSAxOworCisgICAgc3dpdGNoIChwb3J0LT5zdGF0ZSkgeworICAgICAgY2FzZSAwOgorICAgICAgICBpZiAoYnl0ZSA9PSBBU0NJSV9TVFgpIHsKKyAgICAgICAgICBwb3J0LT5zdGF0ZSA9IDE7CisgICAgICAgICAgcG9ydC0+cG9zaXRpb24gPSBwb3J0LT5wYWNrZXQ7CisgICAgICAgICAgcG9ydC0+bGVuZ3RoID0gMDsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICBsb2dJZ25vcmVkQnl0ZShieXRlKTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKworICAgICAgY2FzZSAxOgorICAgICAgICBwb3J0LT5sZW5ndGggfD0gYnl0ZSA8PCA4OworICAgICAgICBwb3J0LT5zdGF0ZSA9IDI7CisgICAgICAgIGJyZWFrOworCisgICAgICBjYXNlIDI6CisgICAgICAgIHBvcnQtPmxlbmd0aCB8PSBieXRlOworCisgICAgICAgIGlmIChwb3J0LT5sZW5ndGggPCAzKSB7CisgICAgICAgICAgbG9nTWVzc2FnZShMT0dfV0FSTklORywgImludmFsaWQgRXVyb2JyYWlsbGUgcGFja2V0IGRlY2xhcmVkIHNpemU6ICVkIiwgcG9ydC0+bGVuZ3RoKTsKKyAgICAgICAgICBwb3J0LT5zdGF0ZSA9IDA7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgcG9ydC0+bGVuZ3RoIC09IDI7CisKKyAgICAgICAgICBpZiAocG9ydC0+bGVuZ3RoID4gc2l6ZW9mKHBvcnQtPnBhY2tldCkpIHsKKyAgICAgICAgICAgIGxvZ01lc3NhZ2UoTE9HX0NBVEVHT1JZKEJSQUlMTEVfRFJJVkVSKSwgInJlYWRFdXJvQnJhaWxsZVBhY2tldDogcmVqZWN0aW5nIHBhY2tldCB3aG9zZSBkZWNsYXJlZCBzaXplIGlzIHRvbyBsYXJnZSIpOworICAgICAgICAgICAgcG9ydC0+c3RhdGUgPSAwOworICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBwb3J0LT5zdGF0ZSA9IDM7CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGJyZWFrOworCisgICAgICBjYXNlIDM6CisgICAgICAgICpwb3J0LT5wb3NpdGlvbisrID0gYnl0ZTsKKworICAgICAgICBpZiAoKHBvcnQtPnBvc2l0aW9uIC0gcG9ydC0+cGFja2V0KSA9PSBwb3J0LT5sZW5ndGgpIHBvcnQtPnN0YXRlID0gNDsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGNhc2UgNDoKKyAgICAgICAgaWYgKGJ5dGUgPT0gQVNDSUlfRVRYKSB7CisgICAgICAgICAgc2l6ZV90IGxlbmd0aCA9IHBvcnQtPnBvc2l0aW9uIC0gcG9ydC0+cGFja2V0OworCisgICAgICAgICAgcG9ydC0+c3RhdGUgPSAwOworCisgICAgICAgICAgaWYgKGxlbmd0aCA8PSBzaXplKSB7CisgICAgICAgICAgICBtZW1jcHkocGFja2V0LCBwb3J0LT5wYWNrZXQsIGxlbmd0aCk7CisgICAgICAgICAgICBsb2dJbnB1dFBhY2tldChwYWNrZXQsIGxlbmd0aCk7CisgICAgICAgICAgICByZXR1cm4gbGVuZ3RoOworICAgICAgICAgIH0KKworICAgICAgICAgIGxvZ0lucHV0UHJvYmxlbSgicGFja2V0IGJ1ZmZlciB0b28gc21hbGwiLCBwb3J0LT5wYWNrZXQsIGxlbmd0aCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgbG9nTWVzc2FnZShMT0dfV0FSTklORywgIkV1cm9icmFpbGxlIHBhY2tldCB3aXRoIHJlYWwgc2l6ZSBleGNlZWRpbmcgZGVjbGFyZWQgc2l6ZSIpOworICAgICAgICAgIGxvZ0Rpc2NhcmRlZEJ5dGUoYnl0ZSk7CisgICAgICAgICAgcG9ydC0+c3RhdGUgPSA1OworICAgICAgICB9CisgICAgICAgIGJyZWFrOworCisgICAgICBjYXNlIDU6CisgICAgICAgIGlmIChieXRlID09IEFTQ0lJX0VUWCkgeworICAgICAgICAgIHBvcnQtPnN0YXRlID0gMDsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICBsb2dEaXNjYXJkZWRCeXRlKGJ5dGUpOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworCisgICAgICBkZWZhdWx0OgorICAgICAgICBsb2dNZXNzYWdlKExPR19XQVJOSU5HLCAicmVhZEV1cm9icmFpbGxlUGFja2V0OiByZWFjaGVkIHVua25vd24gc3RhdGUgJWQiLCBwb3J0LT5zdGF0ZSk7CisgICAgICAgIHBvcnQtPnN0YXRlID0gMDsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICB9CisKKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50CituZWVkc0VzY2FwZSAodW5zaWduZWQgY2hhciBieXRlKSB7CisgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGVzY2FwZWRDaGFyc1swWDIwXSA9IHsKKyAgICBbQVNDSUlfU09IXSA9IDEsIFtBU0NJSV9FT1RdID0gMSwgW0FTQ0lJX0RMRV0gPSAxLAorICAgIFtBU0NJSV9BQ0tdID0gMSwgW0FTQ0lJX05BS10gPSAxLAorICB9OworCisgIGlmIChieXRlIDwgc2l6ZW9mKGVzY2FwZWRDaGFycykpIHJldHVybiBlc2NhcGVkQ2hhcnNbYnl0ZV07CisgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50Cit3cml0ZU5hdGl2ZVBhY2tldF9pbnRlcm5hbCAoCisgIEJyYWlsbGVEaXNwbGF5ICpicmwsIEdpb0VuZHBvaW50ICplbmRwb2ludCwKKyAgY29uc3QgdW5zaWduZWQgY2hhciAqcGFja2V0LCBzaXplX3Qgc2l6ZQorKSB7CisgIHJldHVybiB3cml0ZUJyYWlsbGVNZXNzYWdlKGJybCwgZW5kcG9pbnQsIDAsIHBhY2tldCwgc2l6ZSk7Cit9CisKK3N0YXRpYyBpbnQKK3dyaXRlTmF0aXZlUGFja2V0X2V4dGVybmFsICgKKyAgQnJhaWxsZURpc3BsYXkgKmJybCwgR2lvRW5kcG9pbnQgKmVuZHBvaW50LAorICBjb25zdCB1bnNpZ25lZCBjaGFyICpwYWNrZXQsIHNpemVfdCBzaXplCispIHsKKyAgcmV0dXJuIHdyaXRlQnJhaWxsZVBhY2tldChicmwsIGVuZHBvaW50LCBwYWNrZXQsIHNpemUpOworfQorCitzdGF0aWMgdm9pZAoraGFuZGxlTmF0aXZlQWNrbm93bGVkZ2VtZW50X2ludGVybmFsIChCcmFpbGxlRGlzcGxheSAqYnJsKSB7CisgIGFja25vd2xlZGdlQnJhaWxsZU1lc3NhZ2UoYnJsKTsKKworICBpZiAoYnJsLT5kYXRhLT5pc0ZvcndhcmRpbmcgJiYgYnJsLT5kYXRhLT5leHRlcm5hbC5wcm90b2NvbC0+Zm9yd2FyZEFja25vd2xlZGdlbWVudHMpIHsKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhY2tub3dsZWRnZW1lbnRbXSA9IHtBU0NJSV9BQ0t9OworCisgICAgd3JpdGVCcmFpbGxlUGFja2V0KGJybCwgYnJsLT5kYXRhLT5leHRlcm5hbC5wb3J0Lmdpb0VuZHBvaW50LAorICAgICAgICAgICAgICAgICAgICAgICBhY2tub3dsZWRnZW1lbnQsIHNpemVvZihhY2tub3dsZWRnZW1lbnQpKTsKKyAgfQorfQorCitzdGF0aWMgdm9pZAoraGFuZGxlTmF0aXZlQWNrbm93bGVkZ2VtZW50X2V4dGVybmFsIChCcmFpbGxlRGlzcGxheSAqYnJsKSB7Cit9CisKK3N0YXRpYyBzaXplX3QKK3dyaXRlTmF0aXZlUGFja2V0ICgKKyAgQnJhaWxsZURpc3BsYXkgKmJybCwgUG9ydCAqcG9ydCwKKyAgY29uc3QgdW5zaWduZWQgY2hhciAqcGFja2V0LCBzaXplX3Qgc2l6ZQorKSB7CisgIHVuc2lnbmVkIGNoYXIJYnVmZmVyWyhzaXplICogMikgKyAyXTsKKyAgc2l6ZV90IGNvdW50OworCisgIHsKKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpzb3VyY2UgPSBwYWNrZXQ7CisgICAgdW5zaWduZWQgY2hhciAqdGFyZ2V0ID0gYnVmZmVyOworCisgICAgKnRhcmdldCsrID0gQVNDSUlfU09IOworCisgICAgd2hpbGUgKHNpemUtLSkgeworICAgICAgaWYgKG5lZWRzRXNjYXBlKCpzb3VyY2UpKSAqdGFyZ2V0KysgPSBBU0NJSV9ETEU7CisgICAgICAqdGFyZ2V0KysgPSAqc291cmNlKys7CisgICAgfQorCisgICAgKnRhcmdldCsrID0gQVNDSUlfRU9UOworICAgIGNvdW50ID0gdGFyZ2V0IC0gYnVmZmVyOworICB9CisKKyAgaWYgKCFwb3J0LT53cml0ZU5hdGl2ZVBhY2tldChicmwsIHBvcnQtPmdpb0VuZHBvaW50LCBidWZmZXIsIGNvdW50KSkgcmV0dXJuIDA7CisgIHJldHVybiBjb3VudDsKK30KKworLyoKK3N0YXRpYyBzc2l6ZV90Cit0cnlXcml0ZU5hdGl2ZVBhY2tldCAoQnJhaWxsZURpc3BsYXkgKmJybCwgUG9ydCAqcG9ydCwgY29uc3Qgdm9pZCAqcGFja2V0LCBzaXplX3Qgc2l6ZSkgeworICBzc2l6ZV90IHJlczsKKyAgd2hpbGUgKCAhIChyZXMgPSB3cml0ZU5hdGl2ZVBhY2tldChicmwsIHBvcnQsIHBhY2tldCwgc2l6ZSkpICkgeworICAgIGlmIChlcnJubyAhPSBFQUdBSU4pIHJldHVybiAwOworICB9CisgIHJldHVybiByZXM7Cit9CisqLworCitzdGF0aWMgaW50Cit3cml0ZUV1cm9icmFpbGxlUGFja2V0IChCcmFpbGxlRGlzcGxheSAqYnJsLCBQb3J0ICpwb3J0LCBjb25zdCB2b2lkICpkYXRhLCBzaXplX3Qgc2l6ZSkgeworICBzaXplX3QgY291bnQ7CisgIHNpemVfdCBwYWNrZXRTaXplID0gc2l6ZSArIDI7CisgIHVuc2lnbmVkIGNoYXIJcGFja2V0W3BhY2tldFNpemUgKyAyXTsKKyAgdW5zaWduZWQgY2hhciAqcCA9IHBhY2tldDsKKworICAqcCsrID0gQVNDSUlfU1RYOworICAqcCsrID0gKHBhY2tldFNpemUgPj4gOCkgJiAwWDAwRkY7CisgICpwKysgPSBwYWNrZXRTaXplICYgMFgwMEZGOyAgCisgIHAgPSBtZW1wY3B5KHAsIGRhdGEsIHNpemUpOworICAqcCsrID0gQVNDSUlfRVRYOworCisgIGNvdW50ID0gcCAtIHBhY2tldDsKKyAgaWYgKCF3cml0ZUJyYWlsbGVQYWNrZXQoYnJsLCBwb3J0LT5naW9FbmRwb2ludCwgcGFja2V0LCBjb3VudCkpIHJldHVybiAwOworICByZXR1cm4gY291bnQ7Cit9CisKK3N0YXRpYyBpbnQKK3dyaXRlRXVyb2JyYWlsbGVTdHJpbmdQYWNrZXQgKEJyYWlsbGVEaXNwbGF5ICpicmwsIFBvcnQgKnBvcnQsIGNvbnN0IGNoYXIgKnN0cmluZykgeworICByZXR1cm4gd3JpdGVFdXJvYnJhaWxsZVBhY2tldChicmwsIHBvcnQsIHN0cmluZywgc3RybGVuKHN0cmluZykgKyAxKTsKK30KKworLyogTG93LWxldmVsIHdyaXRlIG9mIGRvdHMgdG8gdGhlIGJyYWlsZSBkaXNwbGF5ICovCisvKiBObyBjaGVjayBpcyBwZXJmb3JtZWQgdG8gYXZvaWQgc2V2ZXJhbCBjb25zZWN1dGl2ZSBpZGVudGljYWwgd3JpdGVzIGF0IHRoaXMgbGV2ZWwgKi8KK3N0YXRpYyBzaXplX3QKK3dyaXRlRG90cyAoQnJhaWxsZURpc3BsYXkgKmJybCwgUG9ydCAqcG9ydCwgY29uc3QgdW5zaWduZWQgY2hhciAqZG90cykgeworICBzaXplX3Qgc2l6ZSA9IGJybC0+dGV4dENvbHVtbnMgKiBicmwtPnRleHRSb3dzOworICB1bnNpZ25lZCBjaGFyIHBhY2tldFtJUl9XSU5ET1dfU0laRV9NQVhJTVVNICsgMV07CisgIHVuc2lnbmVkIGNoYXIgKnAgPSBwYWNrZXQ7CisgIGludCBpOworCisgICpwKysgPSBJUl9PUFRfV3JpdGVCcmFpbGxlOworICBmb3IgKGk9MDsgaTxJUl9XSU5ET1dfU0laRV9NQVhJTVVNLXNpemU7IGkrPTEpICpwKysgPSAwOyAKKyAgZm9yIChpPTA7IGk8c2l6ZTsgaSs9MSkgKnArKyA9IGRvdHNbc2l6ZS1pLTFdOworICByZXR1cm4gd3JpdGVOYXRpdmVQYWNrZXQoYnJsLCBwb3J0LCBwYWNrZXQsIHNpemVvZihwYWNrZXQpKTsKK30KKworLyogTG93LWxldmVsIHdyaXRlIG9mIHRleHQgdG8gdGhlIGJyYWlsZSBkaXNwbGF5ICovCisvKiBObyBjaGVjayBpcyBwZXJmb3JtZWQgdG8gYXZvaWQgc2V2ZXJhbCBjb25zZWN1dGl2ZSBpZGVudGljYWwgd3JpdGVzIGF0IHRoaXMgbGV2ZWwgKi8KK3N0YXRpYyBzaXplX3QKK3dyaXRlV2luZG93IChCcmFpbGxlRGlzcGxheSAqYnJsLCBjb25zdCB1bnNpZ25lZCBjaGFyICp0ZXh0KSB7CisgIHNpemVfdCBzaXplID0gYnJsLT50ZXh0Q29sdW1ucyAqIGJybC0+dGV4dFJvd3M7CisgIHVuc2lnbmVkIGNoYXIgZG90c1tzaXplXTsKKworICB0cmFuc2xhdGVPdXRwdXRDZWxscyhkb3RzLCB0ZXh0LCBzaXplKTsKKyAgcmV0dXJuIHdyaXRlRG90cyhicmwsICZicmwtPmRhdGEtPmludGVybmFsLnBvcnQsIGRvdHMpOworfQorCitzdGF0aWMgc2l6ZV90CitjbGVhcldpbmRvdyAoQnJhaWxsZURpc3BsYXkgKmJybCkgeworICBzaXplX3Qgc2l6ZSA9IGJybC0+dGV4dENvbHVtbnMgKiBicmwtPnRleHRSb3dzOworICB1bnNpZ25lZCBjaGFyIHdpbmRvd1tzaXplXTsKKworICBtZW1zZXQod2luZG93LCAwLCBzaXplb2Yod2luZG93KSk7CisgIHJldHVybiB3cml0ZVdpbmRvdyhicmwsIHdpbmRvdyk7Cit9CisKK3N0YXRpYyB2b2lkCithY3RpdmF0ZUJyYWlsbGUodm9pZCkgeworICB3cml0ZVBvcnQxKElSX1BPUlRfT1VUUFVULCAwWDAxKTsKKyAgYXN5bmNXYWl0KDkpOworICB3cml0ZVBvcnQxKElSX1BPUlRfT1VUUFVULCAwWDAwKTsKK30KKworc3RhdGljIHZvaWQKK2RlYWN0aXZhdGVCcmFpbGxlKHZvaWQpIHsKKyAgd3JpdGVQb3J0MShJUl9QT1JUX09VVFBVVCwgMFgwMik7CisgIGFzeW5jV2FpdCg5KTsKKyAgd3JpdGVQb3J0MShJUl9QT1JUX09VVFBVVCwgMFgwMCk7Cit9CisKK3N0YXRpYyBzc2l6ZV90IGJybF9yZWFkUGFja2V0IChCcmFpbGxlRGlzcGxheSAqYnJsLCB2b2lkICpwYWNrZXQsIHNpemVfdCBzaXplKQoreworICBpZiAoYnJsLT5kYXRhLT5pc0VtYmVkZGVkICYmIChicmwtPmRhdGEtPmlzU3VzcGVuZGVkIHx8IGJybC0+ZGF0YS0+aXNGb3J3YXJkaW5nKSkgcmV0dXJuIDA7CisgIHJldHVybiByZWFkTmF0aXZlUGFja2V0KGJybCwgJmJybC0+ZGF0YS0+aW50ZXJuYWwucG9ydCwgcGFja2V0LCBzaXplKTsKK30KKworLyogRnVuY3Rpb24gYnJsX3dyaXRlUGFja2V0ICovCisvKiBSZXR1cm5zIDEgaWYgdGhlIHBhY2tldCBpcyBhY3R1YWxseSB3cml0dGVuLCAwIGlmIHRoZSBwYWNrZXQgaXMgbm90IHdyaXR0ZW4gKi8KK3N0YXRpYyBzc2l6ZV90IGJybF93cml0ZVBhY2tldCAoQnJhaWxsZURpc3BsYXkgKmJybCwgY29uc3Qgdm9pZCAqcGFja2V0LCBzaXplX3Qgc2l6ZSkKK3sKKyAgaWYgKGJybC0+ZGF0YS0+aXNTdXNwZW5kZWQgfHwgYnJsLT5kYXRhLT5pc0ZvcndhcmRpbmcpIHsKKyAgICBlcnJubyA9IEVBR0FJTjsKKyAgICByZXR1cm4gMDsKKyAgfQorICByZXR1cm4gd3JpdGVOYXRpdmVQYWNrZXQoYnJsLCAmYnJsLT5kYXRhLT5pbnRlcm5hbC5wb3J0LCBwYWNrZXQsIHNpemUpOworfQorCitzdGF0aWMgaW50IGJybF9yZXNldCAoQnJhaWxsZURpc3BsYXkgKmJybCkKK3sKKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK3NlbmRJbnRlcmFjdGl2ZUtleSAoQnJhaWxsZURpc3BsYXkgKmJybCwgUG9ydCAqcG9ydCwgdW5zaWduZWQgY2hhciBrZXkpIHsKKyAgY29uc3QgdW5zaWduZWQgY2hhciBwYWNrZXRbXSA9IHtJUl9JUFRfSW50ZXJhY3RpdmVLZXksIGtleX07CisKKyAgcmV0dXJuIHdyaXRlTmF0aXZlUGFja2V0KGJybCwgcG9ydCwgcGFja2V0LCBzaXplb2YocGFja2V0KSk7Cit9CisKK3N0YXRpYyBpbnQKK3NlbmRNZW51S2V5IChCcmFpbGxlRGlzcGxheSAqYnJsLCBQb3J0ICpwb3J0KSB7CisgIHJldHVybiBzZW5kSW50ZXJhY3RpdmVLZXkoYnJsLCBwb3J0LCAnUScpOworfQorCit0eXBlZGVmIHN0cnVjdCB7CisgIGludCAoKmhhbmRsZVpLZXkpIChCcmFpbGxlRGlzcGxheSAqYnJsLCBQb3J0ICpwb3J0KTsKKyAgaW50ICgqaGFuZGxlUm91dGluZ0tleSkgKEJyYWlsbGVEaXNwbGF5ICpicmwsIFBvcnQgKnBvcnQsIHVuc2lnbmVkIGNoYXIga2V5KTsKKyAgaW50ICgqaGFuZGxlUENLZXkpIChCcmFpbGxlRGlzcGxheSAqYnJsLCBQb3J0ICpwb3J0LCBpbnQgcmVwZWF0LCB1bnNpZ25lZCBjaGFyIGVzY2FwZSwgdW5zaWduZWQgY2hhciBrZXkpOworICBpbnQgKCpoYW5kbGVGdW5jdGlvbktleXMpIChCcmFpbGxlRGlzcGxheSAqYnJsLCBQb3J0ICpwb3J0LCBLZXlOdW1iZXJTZXQga2V5cyk7CisgIGludCAoKmhhbmRsZUJyYWlsbGVLZXlzKSAoQnJhaWxsZURpc3BsYXkgKmJybCwgUG9ydCAqcG9ydCwgS2V5TnVtYmVyU2V0IGtleXMpOworfSBLZXlIYW5kbGVyczsKKworc3RhdGljIGludAorbnVsbF9oYW5kbGVaS2V5KEJyYWlsbGVEaXNwbGF5ICpicmwsIFBvcnQgKnBvcnQpIHsKKyAgbG9nTWVzc2FnZShMT0dfQ0FURUdPUlkoQlJBSUxMRV9EUklWRVIpLCAiaWdub3JpbmcgWiBrZXkiKTsKKyAgcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQKK2NvcmVfaGFuZGxlWktleShCcmFpbGxlRGlzcGxheSAqYnJsLCBQb3J0ICpwb3J0KSB7CisgIGxvZ01lc3NhZ2UoTE9HX0NBVEVHT1JZKEJSQUlMTEVfRFJJVkVSKSwgIloga2V5IHByZXNzZWQiKTsKKyAgc2V0RXh0ZXJuYWxQcm90b2NvbChicmwsIGJybC0+ZGF0YS0+ZXh0ZXJuYWwucHJvdG9jb2wtPm5leHQpOworCisgIHsKKyAgICBQb3J0ICpwb3J0ID0gJmJybC0+ZGF0YS0+ZXh0ZXJuYWwucG9ydDsKKworICAgIHBvcnQtPnNwZWVkID0gYnJsLT5kYXRhLT5leHRlcm5hbC5wcm90b2NvbC0+ZXh0ZXJuYWxTcGVlZDsKKyAgICBwb3J0LT5zZXJpYWxQYXJhbWV0ZXJzLmJhdWQgPSBwb3J0LT5zcGVlZDsKKyAgICBpZiAoIWdpb1JlY29uZmlndXJlUmVzb3VyY2UocG9ydC0+Z2lvRW5kcG9pbnQsICZwb3J0LT5zZXJpYWxQYXJhbWV0ZXJzKSkgcmV0dXJuIDA7CisgIH0KKworICByZXR1cm4gMTsKK30KKworc3RhdGljIGludAorY29yZV9oYW5kbGVSb3V0aW5nS2V5KEJyYWlsbGVEaXNwbGF5ICpicmwsIFBvcnQgKnBvcnQsIHVuc2lnbmVkIGNoYXIga2V5KSB7CisgIHJldHVybiBlbnF1ZXVlS2V5KGJybCwgSVJfR1JQX1JvdXRpbmdLZXlzLCBrZXktMSk7Cit9CisKK3N0YXRpYyBpbnQKK2NvcmVfaGFuZGxlUENLZXkoQnJhaWxsZURpc3BsYXkgKmJybCwgUG9ydCAqcG9ydCwgaW50IHJlcGVhdCwgdW5zaWduZWQgY2hhciBlc2NhcGUsIHVuc2lnbmVkIGNoYXIgY29kZSkgeworICByZXR1cm4gZW5xdWV1ZVh0U2NhbkNvZGUoYnJsLCBjb2RlLCBlc2NhcGUsIElSX0dSUF9YdCwgSVJfR1JQX1h0RTAsIElSX0dSUF9YdEUxKTsKK30KKworc3RhdGljIGludAorY29yZV9oYW5kbGVGdW5jdGlvbktleXMoQnJhaWxsZURpc3BsYXkgKmJybCwgUG9ydCAqcG9ydCwgS2V5TnVtYmVyU2V0IGtleXMpIHsKKyAgcmV0dXJuIGVucXVldWVVcGRhdGVkS2V5cyhicmwsIGtleXMsICZicmwtPmRhdGEtPmludGVybmFsLmxpbmVhcktleXMsIElSX0dSUF9OYXZpZ2F0aW9uS2V5cywgSVJfS0VZX0wxKTsKK30KKworc3RhdGljIGludAorY29yZV9oYW5kbGVCcmFpbGxlS2V5cyhCcmFpbGxlRGlzcGxheSAqYnJsLCBQb3J0ICpwb3J0LCBLZXlOdW1iZXJTZXQga2V5cykgeworICByZXR1cm4gZW5xdWV1ZUtleXMoYnJsLCBrZXlzLCBJUl9HUlBfTmF2aWdhdGlvbktleXMsIElSX0tFWV9Eb3QxKTsKK30KKworc3RhdGljIGNvbnN0IEtleUhhbmRsZXJzIGtleUhhbmRsZXJzX2VtYmVkZGVkID0geworICAuaGFuZGxlWktleSA9IGNvcmVfaGFuZGxlWktleSwKKyAgLmhhbmRsZVJvdXRpbmdLZXkgPSBjb3JlX2hhbmRsZVJvdXRpbmdLZXksCisgIC5oYW5kbGVQQ0tleSA9IGNvcmVfaGFuZGxlUENLZXksCisgIC5oYW5kbGVGdW5jdGlvbktleXMgPSBjb3JlX2hhbmRsZUZ1bmN0aW9uS2V5cywKKyAgLmhhbmRsZUJyYWlsbGVLZXlzID0gY29yZV9oYW5kbGVCcmFpbGxlS2V5cworfTsKKworc3RhdGljIGNvbnN0IEtleUhhbmRsZXJzIGtleUhhbmRsZXJzX25vbmVtYmVkZGVkID0geworICAuaGFuZGxlWktleSA9IG51bGxfaGFuZGxlWktleSwKKyAgLmhhbmRsZVJvdXRpbmdLZXkgPSBjb3JlX2hhbmRsZVJvdXRpbmdLZXksCisgIC5oYW5kbGVQQ0tleSA9IGNvcmVfaGFuZGxlUENLZXksCisgIC5oYW5kbGVGdW5jdGlvbktleXMgPSBjb3JlX2hhbmRsZUZ1bmN0aW9uS2V5cywKKyAgLmhhbmRsZUJyYWlsbGVLZXlzID0gY29yZV9oYW5kbGVCcmFpbGxlS2V5cworfTsKKworc3RhdGljIGludAorZXVyb2JybF9oYW5kbGVSb3V0aW5nS2V5KEJyYWlsbGVEaXNwbGF5ICpicmwsIFBvcnQgKnBvcnQsIHVuc2lnbmVkIGNoYXIga2V5KSB7CisgIHVuc2lnbmVkIGNoYXIgZGF0YVtdID0geworICAgIDBYNEIsIDBYNDksIDEsIGtleQorICB9OworICByZXR1cm4gd3JpdGVFdXJvYnJhaWxsZVBhY2tldChicmwsIHBvcnQsIGRhdGEsIHNpemVvZihkYXRhKSk7Cit9CisKK3N0YXRpYyBpbnQKK2V1cm9icmxfaGFuZGxlUENLZXkoQnJhaWxsZURpc3BsYXkgKmJybCwgUG9ydCAqcG9ydCwgaW50IHJlcGVhdCwgdW5zaWduZWQgY2hhciBlc2NhcGUsIHVuc2lnbmVkIGNoYXIga2V5KSB7CisgIHVuc2lnbmVkIGNoYXIgZGF0YVtdID0gezBYNEIsIDBYNUEsIDAsIDAsIDAsIDB9OworICBjb25zdCBYdEtleUVudHJ5ICp4a2UgPSAmeHRLZXlUYWJsZVtrZXkgJiB+WFRfUkVMRUFTRV07CisKKyAgc3dpdGNoIChlc2NhcGUpIHsKKyAgICBjYXNlIDBYRTA6CisgICAgICB4a2UgKz0gWFRfS0VZKEUwLCAwKTsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSAwWEUxOgorICAgICAgeGtlICs9IFhUX0tFWShFMSwgMCk7CisgICAgICBicmVhazsKKworICAgIGRlZmF1bHQ6CisgICAgY2FzZSAwWDAwOgorICAgICAgeGtlICs9IFhUX0tFWSgwMCwgMCk7CisgICAgICBicmVhazsKKyAgfQorCisgIGlmICh4a2UgPj0gKHh0S2V5VGFibGUgKyBBUlJBWV9DT1VOVCh4dEtleVRhYmxlKSkpIHsKKyAgICBzdGF0aWMgY29uc3QgWHRLZXlFbnRyeSB4dEtleUVudHJ5ID0geworICAgICAgLnR5cGUgPSBYdEtleVR5cGVfaWdub3JlCisgICAgfTsKKworICAgIHhrZSA9ICZ4dEtleUVudHJ5OworICB9CisKKyAgaWYgKGtleSAmIFhUX1JFTEVBU0UpIHsKKyAgICBpbnQgY3VycmVudCA9IHhrZSA9PSBicmwtPmRhdGEtPnh0LmtleTsKKyAgICBicmwtPmRhdGEtPnh0LmtleSA9IE5VTEw7CisKKyAgICBzd2l0Y2ggKHhrZS0+dHlwZSkgeworICAgICAgY2FzZSBYdEtleVR5cGVfbW9kaWZpZXI6CisgICAgICAgIGJybC0+ZGF0YS0+eHQuc3RhdGUgJj0gflhUU19CSVQoeGtlLT5hcmcxKTsKKyAgICAgICAgcmV0dXJuIDE7CisKKyAgICAgIGNhc2UgWHRLZXlUeXBlX2NvbXBsZXg6CisgICAgICAgIGJybC0+ZGF0YS0+eHQuc3RhdGUgJj0gflhUU19CSVQoeGtlLT5hcmczKTsKKyAgICAgICAgaWYgKGN1cnJlbnQpIGdvdG8gaXNGdW5jdGlvbjsKKyAgICAgICAgcmV0dXJuIDE7CisKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiAxOworICAgIH0KKyAgfSBlbHNlIHsKKyAgICBicmwtPmRhdGEtPnh0LmtleSA9IHhrZTsKKworICAgIHN3aXRjaCAoeGtlLT50eXBlKSB7CisgICAgICBjYXNlIFh0S2V5VHlwZV9tb2RpZmllcjoKKyAgICAgICAgYnJsLT5kYXRhLT54dC5zdGF0ZSB8PSBYVFNfQklUKHhrZS0+YXJnMSk7CisgICAgICAgIGJybC0+ZGF0YS0+eHQuc3RhdGUgJj0gflhUU19CSVQoeGtlLT5hcmcyKTsKKyAgICAgICAgcmV0dXJuIDE7CisKKyAgICAgIGNhc2UgWHRLZXlUeXBlX2NvbXBsZXg6CisgICAgICAgIGJybC0+ZGF0YS0+eHQuc3RhdGUgfD0gWFRTX0JJVCh4a2UtPmFyZzMpOworICAgICAgICByZXR1cm4gMTsKKworICAgICAgY2FzZSBYdEtleVR5cGVfbG9jazoKKyAgICAgICAgYnJsLT5kYXRhLT54dC5zdGF0ZSB8PSBYVFNfQklUKHhrZS0+YXJnMSk7CisgICAgICAgIHJldHVybiAxOworCisgICAgICBjYXNlIFh0S2V5VHlwZV9jaGFyYWN0ZXI6CisgICAgICAgIGlmICh4a2UtPmFyZzMgJiYgWFRTX0FMVEdSKSB7CisgICAgICAgICAgZGF0YVs1XSA9IHhrZS0+YXJnMzsKKyAgICAgICAgfSBlbHNlIGlmICh4a2UtPmFyZzIgJiYgWFRTX1NISUZUKSB7CisgICAgICAgICAgZGF0YVs1XSA9IHhrZS0+YXJnMjsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICBkYXRhWzVdID0geGtlLT5hcmcxOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworCisgICAgICBjYXNlIFh0S2V5VHlwZV9mdW5jdGlvbjoKKyAgICAgIGlzRnVuY3Rpb246CisgICAgICAgIGRhdGFbM10gPSB4a2UtPmFyZzE7CisgICAgICAgIGRhdGFbMl0gPSB4a2UtPmFyZzI7CisgICAgICAgIGJyZWFrOworCisgICAgICBjYXNlIFh0S2V5VHlwZV9jb21wb3NpdGU6IHsKKyAgICAgICAgdW5zaWduZWQgY2hhciBpbmRleDsKKworICAgICAgICBpZiAoeGtlLT5hcmcyICYmIFhUU19TSElGVCkgeworICAgICAgICAgIGluZGV4ID0geGtlLT5hcmcyOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgIGluZGV4ID0geGtlLT5hcmcxOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGluZGV4KSBicmwtPmRhdGEtPnh0LmNvbXBvc2l0ZSA9IGNvbXBvc2l0ZUNoYXJhY3RlclRhYmxlc1tpbmRleCAtIDFdOworICAgICAgICByZXR1cm4gMTsKKyAgICAgIH0KKworICAgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIDE7CisgICAgfQorICB9CisKKyAgaWYgKFhUU19URVNUKFhUU19CSVQoeHRzTGVmdFNoaWZ0UHJlc3NlZCkgfCBYVFNfQklUKHh0c1JpZ2h0U2hpZnRQcmVzc2VkKSkpIGRhdGFbNF0gfD0gMFgwMTsKKyAgaWYgKFhUU19DT05UUk9MKSBkYXRhWzRdIHw9IDBYMDI7CisgIGlmIChYVFNfQUxUKSBkYXRhWzRdIHw9IDBYMDQ7CisgIGlmIChYVFNfVEVTVChYVFNfQklUKHh0c1NoaWZ0TG9ja2VkKSkpIGRhdGFbNF0gfD0gMFgwODsKKyAgaWYgKFhUU19XSU4pIGRhdGFbNF0gfD0gMFgxMDsKKyAgaWYgKFhUU19BTFRHUikgZGF0YVs0XSB8PSAwWDIwOworICBpZiAoWFRTX0lOU0VSVCkgZGF0YVs0XSB8PSAwWDgwOworCisgIGlmIChicmwtPmRhdGEtPnh0LmNvbXBvc2l0ZSkgeworICAgIHVuc2lnbmVkIGNoYXIgKmJ5dGUgPSAmZGF0YVs1XTsKKworICAgIGlmICgqYnl0ZSkgeworICAgICAgY29uc3QgQ29tcG9zaXRlQ2hhcmFjdGVyRW50cnkgKmNjZSA9IGJybC0+ZGF0YS0+eHQuY29tcG9zaXRlOworCisgICAgICB3aGlsZSAoY2NlLT5iYXNlKSB7CisgICAgICAgIGlmIChjY2UtPmJhc2UgPT0gKmJ5dGUpIHsKKyAgICAgICAgICAqYnl0ZSA9IGNjZS0+Y29tcG9zaXRlOworICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgY2NlICs9IDE7CisgICAgICB9CisKKyAgICAgIGlmICghY2NlLT5iYXNlICYmIGNjZS0+Y29tcG9zaXRlKSB7CisgICAgICAgIHVuc2lnbmVkIGNoYXIgb3JpZ2luYWwgPSAqYnl0ZTsKKyAgICAgICAgKmJ5dGUgPSBjY2UtPmNvbXBvc2l0ZTsKKyAgICAgICAgaWYgKCF3cml0ZUV1cm9icmFpbGxlUGFja2V0KGJybCwgcG9ydCwgZGF0YSwgc2l6ZW9mKGRhdGEpKSkgcmV0dXJuIDA7CisgICAgICAgICpieXRlID0gb3JpZ2luYWw7CisgICAgICB9CisgICAgfQorCisgICAgYnJsLT5kYXRhLT54dC5jb21wb3NpdGUgPSBOVUxMOworICB9CisKKyAgcmV0dXJuIHdyaXRlRXVyb2JyYWlsbGVQYWNrZXQoYnJsLCBwb3J0LCBkYXRhLCBzaXplb2YoZGF0YSkpOworfQorCitzdGF0aWMgaW50CitldXJvYnJsX2hhbmRsZUZ1bmN0aW9uS2V5cyhCcmFpbGxlRGlzcGxheSAqYnJsLCBQb3J0ICpwb3J0LCBLZXlOdW1iZXJTZXQga2V5cykgeworICBpZiAoa2V5cykgeworICAgIHVuc2lnbmVkIGNoYXIgZGF0YVtdID0geworICAgICAgMFg0QiwgMFg0MywgMCwgKAorICAgICAgICAoa2V5cyAmIDBYRikgfAorICAgICAgICAoKGtleXMgPj4gMSkgJiAwWEYwKQorICAgICAgKQorICAgIH07CisKKyAgICBpZiAoIXdyaXRlRXVyb2JyYWlsbGVQYWNrZXQoYnJsLCBwb3J0LCBkYXRhLCBzaXplb2YoZGF0YSkpKSByZXR1cm4gMDsKKyAgfQorCisgIHJldHVybiAxOworfQorCitzdGF0aWMgaW50CitldXJvYnJsX2hhbmRsZUJyYWlsbGVLZXlzKEJyYWlsbGVEaXNwbGF5ICpicmwsIFBvcnQgKnBvcnQsIEtleU51bWJlclNldCBrZXlzKSB7CisgIHVuc2lnbmVkIGNoYXIgZGF0YVtdID0geworICAgIDBYNEIsIDBYNDIsCisgICAgKGtleXMgPj4gOCkgJiAwWEZGLAorICAgIGtleXMgJiAwWEZGCisgIH07CisKKyAgcmV0dXJuIHdyaXRlRXVyb2JyYWlsbGVQYWNrZXQoYnJsLCBwb3J0LCBkYXRhLCBzaXplb2YoZGF0YSkpOworfQorCitzdGF0aWMgY29uc3QgS2V5SGFuZGxlcnMga2V5SGFuZGxlcnNfZXVyb2JyYWlsbGUgPSB7CisgIC5oYW5kbGVaS2V5ID0gbnVsbF9oYW5kbGVaS2V5LAorICAuaGFuZGxlUm91dGluZ0tleSA9IGV1cm9icmxfaGFuZGxlUm91dGluZ0tleSwKKyAgLmhhbmRsZVBDS2V5ID0gZXVyb2JybF9oYW5kbGVQQ0tleSwKKyAgLmhhbmRsZUZ1bmN0aW9uS2V5cyA9IGV1cm9icmxfaGFuZGxlRnVuY3Rpb25LZXlzLAorICAuaGFuZGxlQnJhaWxsZUtleXMgPSBldXJvYnJsX2hhbmRsZUJyYWlsbGVLZXlzCit9OworCitzdGF0aWMgaW50Cit3cml0ZUV4dGVybmFsQ2VsbHMgKEJyYWlsbGVEaXNwbGF5ICpicmwpIHsKKyAgcmV0dXJuIHdyaXRlRG90cyhicmwsICZicmwtPmRhdGEtPmludGVybmFsLnBvcnQsIGJybC0+ZGF0YS0+ZXh0ZXJuYWwuY2VsbHMpOworfQorCitzdGF0aWMgdm9pZAorc2F2ZUV4dGVybmFsQ2VsbHMgKEJyYWlsbGVEaXNwbGF5ICpicmwsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmNlbGxzKSB7CisgIG1lbWNweShicmwtPmRhdGEtPmV4dGVybmFsLmNlbGxzLCBjZWxscywgYnJsLT50ZXh0Q29sdW1ucyk7Cit9CisKK3N0YXRpYyBpbnQKK2hhbmRsZU5hdGl2ZVBhY2tldCAoQnJhaWxsZURpc3BsYXkgKmJybCwgUG9ydCAqcG9ydCwgY29uc3QgS2V5SGFuZGxlcnMgKmtleUhhbmRsZXJzLCBjb25zdCB1bnNpZ25lZCBjaGFyICpwYWNrZXQsIHNpemVfdCBzaXplKSB7CisgIGlmIChzaXplID09IDIpIHsKKyAgICBpZiAocGFja2V0WzBdID09IElSX0lQVF9JbnRlcmFjdGl2ZUtleSkgeworICAgICAgaWYgKHBhY2tldFsxXSA9PSAnVycpIHsKKyAgICAgICAgcmV0dXJuIGtleUhhbmRsZXJzLT5oYW5kbGVaS2V5KGJybCwgcG9ydCk7CisgICAgICB9CisKKyAgICAgIGlmICgoMSA8PSBwYWNrZXRbMV0pICYmIChwYWNrZXRbMV0gPD0gKGJybC0+dGV4dENvbHVtbnMgKiBicmwtPnRleHRSb3dzKSkpIHsKKyAgICAgICAgcmV0dXJuIGtleUhhbmRsZXJzLT5oYW5kbGVSb3V0aW5nS2V5KGJybCwgcG9ydCwgcGFja2V0WzFdKTsKKyAgICAgIH0KKyAgICB9CisgIH0gZWxzZSBpZiAoc2l6ZSA9PSAzKSB7CisgICAgaW50IHJlcGVhdCA9IChwYWNrZXRbMF0gPT0gSVJfSVBUX1h0S2V5Q29kZVJlcGVhdCk7CisKKyAgICBpZiAoKHBhY2tldFswXSA9PSBJUl9JUFRfWHRLZXlDb2RlKSB8fCByZXBlYXQpIHsKKyAgICAgIHJldHVybiBrZXlIYW5kbGVycy0+aGFuZGxlUENLZXkoYnJsLCBwb3J0LCByZXBlYXQsIHBhY2tldFsxXSwgcGFja2V0WzJdKTsKKyAgICB9CisKKyAgICBpZiAocGFja2V0WzBdID09IElSX0lQVF9MaW5lYXJLZXlzKSB7CisgICAgICBLZXlOdW1iZXJTZXQga2V5cyA9IChwYWNrZXRbMV0gPDwgOCkgfCBwYWNrZXRbMl07CisKKyAgICAgIHJldHVybiBrZXlIYW5kbGVycy0+aGFuZGxlRnVuY3Rpb25LZXlzKGJybCwgcG9ydCwga2V5cyk7CisgICAgfQorCisgICAgaWYgKHBhY2tldFswXSA9PSBJUl9JUFRfQnJhaWxsZUtleXMpIHsKKyAgICAgIEtleU51bWJlclNldCBrZXlzID0gKHBhY2tldFsxXSA8PCA4KSB8IHBhY2tldFsyXTsKKworICAgICAgcmV0dXJuIGtleUhhbmRsZXJzLT5oYW5kbGVCcmFpbGxlS2V5cyhicmwsIHBvcnQsIGtleXMpOworICAgIH0KKyAgfQorCisgIGxvZ1VuZXhwZWN0ZWRQYWNrZXQocGFja2V0LCBzaXplKTsKKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK2ZvcndhcmRJbnRlcm5hbFBhY2tldF9uYXRpdmUgKAorICBCcmFpbGxlRGlzcGxheSAqYnJsLAorICBjb25zdCB1bnNpZ25lZCBjaGFyICpwYWNrZXQsIHNpemVfdCBzaXplCispIHsKKyAgcmV0dXJuIHdyaXRlTmF0aXZlUGFja2V0KGJybCwgJmJybC0+ZGF0YS0+ZXh0ZXJuYWwucG9ydCwgcGFja2V0LCBzaXplKTsKK30KKworc3RhdGljIGludAorZm9yd2FyZEludGVybmFsUGFja2V0X2V1cm9icmFpbGxlICgKKyAgQnJhaWxsZURpc3BsYXkgKmJybCwKKyAgY29uc3QgdW5zaWduZWQgY2hhciAqcGFja2V0LCBzaXplX3Qgc2l6ZQorKSB7CisgIGhhbmRsZU5hdGl2ZVBhY2tldChicmwsICZicmwtPmRhdGEtPmV4dGVybmFsLnBvcnQsICZrZXlIYW5kbGVyc19ldXJvYnJhaWxsZSwgcGFja2V0LCBzaXplKTsKKyAgcmV0dXJuIDE7Cit9CisKK3N0YXRpYyB2b2lkCitmb3J3YXJkRXh0ZXJuYWxQYWNrZXRfbmF0aXZlICgKKyAgQnJhaWxsZURpc3BsYXkgKmJybCwKKyAgY29uc3QgdW5zaWduZWQgY2hhciAqcGFja2V0LCBzaXplX3Qgc2l6ZSwKKyAgaW50IGZvcndhcmQKKykgeworICBpZiAoZm9yd2FyZCkgeworICAgIHdyaXRlTmF0aXZlUGFja2V0KGJybCwgJmJybC0+ZGF0YS0+aW50ZXJuYWwucG9ydCwgcGFja2V0LCBzaXplKTsKKyAgfQorfQorCitzdGF0aWMgdm9pZAorZm9yd2FyZEV4dGVybmFsUGFja2V0X2V1cm9icmFpbGxlICgKKyAgQnJhaWxsZURpc3BsYXkgKmJybCwKKyAgY29uc3QgdW5zaWduZWQgY2hhciAqcGFja2V0LCBzaXplX3Qgc2l6ZSwKKyAgaW50IGZvcndhcmQKKykgeworICBpZiAoc2l6ZT09MiAmJiBwYWNrZXRbMF09PSdTJyAmJiBwYWNrZXRbMV09PSdJJykgeworICAgIC8qIFNlbmQgc3lzdGVtIGluZm9ybWF0aW9uICovCisgICAgUG9ydCAqcG9ydCA9ICZicmwtPmRhdGEtPmV4dGVybmFsLnBvcnQ7CisgICAgY2hhciBzdHJbMjU2XTsKKworICAgIHdyaXRlRXVyb2JyYWlsbGVTdHJpbmdQYWNrZXQoYnJsLCBwb3J0LCAiU05JUklTX0tCXzQwIik7CisKKyAgICB3cml0ZUV1cm9icmFpbGxlU3RyaW5nUGFja2V0KGJybCwgcG9ydCwgIlNISVI0Iik7CisKKyAgICBzbnByaW50ZihzdHIsIHNpemVvZihzdHIpLCAiU1MlcyIsIGJybC0+ZGF0YS0+c2VyaWFsTnVtYmVyKTsKKyAgICB3cml0ZUV1cm9icmFpbGxlU3RyaW5nUGFja2V0KGJybCwgcG9ydCwgc3RyKTsKKworICAgIHdyaXRlRXVyb2JyYWlsbGVTdHJpbmdQYWNrZXQoYnJsLCBwb3J0LCAiU0xGUiIpOworCisgICAgc3RyWzBdID0gJ1MnOworICAgIHN0clsxXSA9ICdHJzsKKyAgICBzdHJbMl0gPSBicmwtPnRleHRDb2x1bW5zOworICAgIHdyaXRlRXVyb2JyYWlsbGVQYWNrZXQoYnJsLCBwb3J0LCBzdHIsIDMpOworCisgICAgc3RyWzBdID0gJ1MnOworICAgIHN0clsxXSA9ICdUJzsKKyAgICBzdHJbMl0gPSA2OworICAgIHdyaXRlRXVyb2JyYWlsbGVQYWNrZXQoYnJsLCBwb3J0LCBzdHIsIDMpOworCisgICAgc25wcmludGYoc3RyLCBzaXplb2Yoc3RyKSwgIlNvJWQlZGEiLCAwWEVGLCAwWEY4KTsKKyAgICB3cml0ZUV1cm9icmFpbGxlU3RyaW5nUGFja2V0KGJybCwgcG9ydCwgc3RyKTsKKworICAgIHdyaXRlRXVyb2JyYWlsbGVTdHJpbmdQYWNrZXQoYnJsLCBwb3J0LCAiU1cxLjkyIik7CisKKyAgICB3cml0ZUV1cm9icmFpbGxlU3RyaW5nUGFja2V0KGJybCwgcG9ydCwgIlNQMS4wMCAzMC0xMC0yMDA2Iik7CisKKyAgICBzbnByaW50ZihzdHIsIHNpemVvZihzdHIpLCAiU00lZCIsIDBYMDgpOworICAgIHdyaXRlRXVyb2JyYWlsbGVTdHJpbmdQYWNrZXQoYnJsLCBwb3J0LCBzdHIpOworCisgICAgd3JpdGVFdXJvYnJhaWxsZVN0cmluZ1BhY2tldChicmwsIHBvcnQsICJTSSIpOworICB9IGVsc2UgaWYgKHNpemU9PWJybC0+dGV4dENvbHVtbnMrMiAmJiBwYWNrZXRbMF09PSdCJyAmJiBwYWNrZXRbMV09PSdTJykgeworICAgIC8qIFdyaXRlIGRvdHMgdG8gYnJhaWxsZSBkaXNwbGF5ICovCisgICAgc2F2ZUV4dGVybmFsQ2VsbHMoYnJsLCBwYWNrZXQrMik7CisgICAgaWYgKGZvcndhcmQpIHdyaXRlRXh0ZXJuYWxDZWxscyhicmwpOworICB9IGVsc2UgeworICAgIGxvZ0J5dGVzKExPR19XQVJOSU5HLCAiZm9yd2FyZEV1cm9icmFpbGxlUGFja2V0IGNvdWxkIG5vdCBoYW5kbGUgdGhpcyBwYWNrZXQ6ICIsIHBhY2tldCwgc2l6ZSk7CisgIH0KK30KKworc3RhdGljIGludAorYmVnaW5Gb3J3YXJkaW5nX25hdGl2ZSAoQnJhaWxsZURpc3BsYXkgKmJybCkgeworICByZXR1cm4gc2VuZE1lbnVLZXkoYnJsLCAmYnJsLT5kYXRhLT5leHRlcm5hbC5wb3J0KTsKK30KKworc3RhdGljIGludAorZW5kRm9yd2FyZGluZ19uYXRpdmUgKEJyYWlsbGVEaXNwbGF5ICpicmwpIHsKKyAgcmV0dXJuIHNlbmRNZW51S2V5KGJybCwgJmJybC0+ZGF0YS0+ZXh0ZXJuYWwucG9ydCk7Cit9CisKK3N0YXRpYyBpbnQKK2JlZ2luRm9yd2FyZGluZ19ldXJvYnJhaWxsZSAoQnJhaWxsZURpc3BsYXkgKmJybCkgeworICBicmwtPmRhdGEtPnh0LmNvbXBvc2l0ZSA9IE5VTEw7CisgIGJybC0+ZGF0YS0+eHQua2V5ID0gTlVMTDsKKyAgYnJsLT5kYXRhLT54dC5zdGF0ZSA9IDA7CisKKyAgd3JpdGVFeHRlcm5hbENlbGxzKGJybCk7CisgIHJldHVybiAxOworfQorCitzdGF0aWMgaW50CitlbmRGb3J3YXJkaW5nX2V1cm9icmFpbGxlIChCcmFpbGxlRGlzcGxheSAqYnJsKSB7CisgIHJldHVybiAxOworfQorCitzdGF0aWMgY29uc3QgUHJvdG9jb2xFbnRyeSBwcm90b2NvbFRhYmxlW10gPSB7CisgIFtJUl9QUk9UT0NPTF9FVVJPQlJBSUxMRV0gPSB7CisgICAgLnByb3RvY29sTmFtZSA9IHN0cnRleHQoImV1cm9icmFpbGxlIiksCisgICAgLmV4dGVybmFsU3BlZWQgPSBJUl9FWFRFUk5BTF9TUEVFRF9FVVJPQlJBSUxMRSwKKworICAgIC5yZWFkRXh0ZXJuYWxQYWNrZXQgPSByZWFkRXVyb2JyYWlsbGVQYWNrZXQsCisgICAgLmZvcndhcmRBY2tub3dsZWRnZW1lbnRzID0gMCwKKworICAgIC5mb3J3YXJkSW50ZXJuYWxQYWNrZXQgPSBmb3J3YXJkSW50ZXJuYWxQYWNrZXRfZXVyb2JyYWlsbGUsCisgICAgLmZvcndhcmRFeHRlcm5hbFBhY2tldCA9IGZvcndhcmRFeHRlcm5hbFBhY2tldF9ldXJvYnJhaWxsZSwKKworICAgIC5iZWdpbkZvcndhcmRpbmcgPSBiZWdpbkZvcndhcmRpbmdfZXVyb2JyYWlsbGUsCisgICAgLmVuZEZvcndhcmRpbmcgPSBlbmRGb3J3YXJkaW5nX2V1cm9icmFpbGxlLAorCisgICAgLm5leHQgPSBJUl9QUk9UT0NPTF9OQVRJVkUKKyAgfSwKKworICBbSVJfUFJPVE9DT0xfTkFUSVZFXSA9IHsKKyAgICAucHJvdG9jb2xOYW1lID0gc3RydGV4dCgibmF0aXZlIiksCisgICAgLmV4dGVybmFsU3BlZWQgPSBJUl9FWFRFUk5BTF9TUEVFRF9OQVRJVkUsCisKKyAgICAucmVhZEV4dGVybmFsUGFja2V0ID0gcmVhZE5hdGl2ZVBhY2tldCwKKyAgICAuZm9yd2FyZEFja25vd2xlZGdlbWVudHMgPSAxLAorCisgICAgLmZvcndhcmRJbnRlcm5hbFBhY2tldCA9IGZvcndhcmRJbnRlcm5hbFBhY2tldF9uYXRpdmUsCisgICAgLmZvcndhcmRFeHRlcm5hbFBhY2tldCA9IGZvcndhcmRFeHRlcm5hbFBhY2tldF9uYXRpdmUsCisKKyAgICAuYmVnaW5Gb3J3YXJkaW5nID0gYmVnaW5Gb3J3YXJkaW5nX25hdGl2ZSwKKyAgICAuZW5kRm9yd2FyZGluZyA9IGVuZEZvcndhcmRpbmdfbmF0aXZlLAorCisgICAgLm5leHQgPSBJUl9QUk9UT0NPTF9FVVJPQlJBSUxMRQorICB9LAorfTsKKworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgcHJvdG9jb2xDb3VudCA9IEFSUkFZX0NPVU5UKHByb3RvY29sVGFibGUpOworCitzdGF0aWMgdm9pZAorc2V0RXh0ZXJuYWxQcm90b2NvbCAoQnJhaWxsZURpc3BsYXkgKmJybCwgUHJvdG9jb2xJbmRleCBpbmRleCkgeworICBicmwtPmRhdGEtPmV4dGVybmFsLnByb3RvY29sID0gJnByb3RvY29sVGFibGVbaW5kZXhdOworfQorCitzdGF0aWMgaW50CitlbnRlclBhY2tldEZvcndhcmRNb2RlIChCcmFpbGxlRGlzcGxheSAqYnJsKSB7CisgIGxvZ01lc3NhZ2UoTE9HX0lORk8sCisgICAgICAgICAgICAgImVudGVyaW5nIHBhY2tldCBmb3J3YXJkIG1vZGUgKHBvcnQ9JXMsIHByb3RvY29sPSVzLCBzcGVlZD0lZCkiLAorICAgICAgICAgICAgIGJybC0+ZGF0YS0+ZXh0ZXJuYWwucG9ydC5uYW1lLAorICAgICAgICAgICAgIGJybC0+ZGF0YS0+ZXh0ZXJuYWwucHJvdG9jb2wtPnByb3RvY29sTmFtZSwKKyAgICAgICAgICAgICBicmwtPmRhdGEtPmV4dGVybmFsLnBvcnQuc3BlZWQpOworCisgIHsKKyAgICBjaGFyIG1zZ1ticmwtPnRleHRDb2x1bW5zKzFdOworCisgICAgc25wcmludGYobXNnLCBzaXplb2YobXNnKSwgIiVzICglcykiLAorICAgICAgICAgICAgIGdldHRleHQoIlBDIG1vZGUiKSwKKyAgICAgICAgICAgICBnZXR0ZXh0KGJybC0+ZGF0YS0+ZXh0ZXJuYWwucHJvdG9jb2wtPnByb3RvY29sTmFtZSkpOworICAgIG1lc3NhZ2UoTlVMTCwgbXNnLCBNU0dfTk9ERUxBWSk7CisgIH0KKworICBpZiAoIWJybC0+ZGF0YS0+ZXh0ZXJuYWwucHJvdG9jb2wtPmJlZ2luRm9yd2FyZGluZyhicmwpKSByZXR1cm4gMDsKKyAgYnJsLT5kYXRhLT5pc0ZvcndhcmRpbmcgPSAxOworICByZXR1cm4gMTsKK30KKworc3RhdGljIGludAorbGVhdmVQYWNrZXRGb3J3YXJkTW9kZSAoQnJhaWxsZURpc3BsYXkgKmJybCkgeworICBsb2dNZXNzYWdlKExPR19JTkZPLCAibGVhdmluZyBwYWNrZXQgZm9yd2FyZCBtb2RlIik7CisgIGlmICghYnJsLT5kYXRhLT5leHRlcm5hbC5wcm90b2NvbC0+ZW5kRm9yd2FyZGluZyhicmwpKSByZXR1cm4gMDsKKyAgYnJsLT5kYXRhLT5pc0ZvcndhcmRpbmcgPSAwOworICBicmwtPmRhdGEtPmJyYWlsbGUucmVmcmVzaCA9IDE7CisgIHJldHVybiAxOworfQorCitzdGF0aWMgaW50Citmb3J3YXJkRXh0ZXJuYWxQYWNrZXRzIChCcmFpbGxlRGlzcGxheSAqYnJsKSB7CisgIGNvbnN0IFByb3RvY29sRW50cnkgKnByb3RvY29sID0gYnJsLT5kYXRhLT5leHRlcm5hbC5wcm90b2NvbDsKKyAgdW5zaWduZWQgY2hhciBwYWNrZXRbSVJfTUFYSU1VTV9QQUNLRVRfU0laRV07CisgIHNpemVfdCBzaXplOworCisgIHdoaWxlICgoc2l6ZSA9IHByb3RvY29sLT5yZWFkRXh0ZXJuYWxQYWNrZXQoYnJsLCAmYnJsLT5kYXRhLT5leHRlcm5hbC5wb3J0LCBwYWNrZXQsIHNpemVvZihwYWNrZXQpKSkpIHsKKyAgICBwcm90b2NvbC0+Zm9yd2FyZEV4dGVybmFsUGFja2V0KGJybCwgcGFja2V0LCBzaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGJybC0+ZGF0YS0+aXNGb3J3YXJkaW5nICYmICFicmwtPmRhdGEtPmlzU3VzcGVuZGVkKSk7CisgIH0KKworICByZXR1cm4gZXJybm8gPT0gRUFHQUlOOworfQorCitHSU9fSU5QVVRfSEFORExFUihpckhhbmRsZUV4dGVybmFsSW5wdXQpIHsKKyAgQnJhaWxsZURpc3BsYXkgKmJybCA9IHBhcmFtZXRlcnMtPmRhdGE7CisKKyAgaWYgKCFmb3J3YXJkRXh0ZXJuYWxQYWNrZXRzKGJybCkpIGJybC0+aGFzRmFpbGVkID0gMTsKKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50Citpc01lbnVLZXlQYWNrZXQgKGNvbnN0IHVuc2lnbmVkIGNoYXIgKnBhY2tldCwgc2l6ZV90IHNpemUpIHsKKyAgcmV0dXJuIChzaXplID09IDIpICYmIChwYWNrZXRbMF0gPT0gSVJfSVBUX0ludGVyYWN0aXZlS2V5KSAmJiAocGFja2V0WzFdID09ICdRJyk7Cit9CisKK3N0YXRpYyBpbnQKK2hhbmRsZUludGVybmFsUGFja2V0X2VtYmVkZGVkIChCcmFpbGxlRGlzcGxheSAqYnJsLCBjb25zdCB2b2lkICpwYWNrZXQsIHNpemVfdCBzaXplKSB7CisgIGlmIChicmwtPmRhdGEtPmlzU3VzcGVuZGVkKSByZXR1cm4gMTsKKworICAvKiBUaGUgdGVzdCBmb3IgTWVudSBrZXkgc2hvdWxkIGNvbWUgZmlyc3Qgc2luY2UgdGhpcyBrZXkgdG9nZ2xlcworICAgKiBwYWNrZXQgZm9yd2FyZCBtb2RlIG9uL29mZgorICAgKi8KKyAgaWYgKGlzTWVudUtleVBhY2tldChwYWNrZXQsIHNpemUpKSB7CisgICAgbG9nTWVzc2FnZShMT0dfQ0FURUdPUlkoQlJBSUxMRV9EUklWRVIpLCAibWVudSBrZXkgcHJlc3NlZCIpOworCisgICAgaWYgKGJybC0+ZGF0YS0+aXNGb3J3YXJkaW5nKSB7CisgICAgICBpZiAoIWxlYXZlUGFja2V0Rm9yd2FyZE1vZGUoYnJsKSkgcmV0dXJuIDA7CisgICAgfSBlbHNlIHsKKyAgICAgIGlmICghZW50ZXJQYWNrZXRGb3J3YXJkTW9kZShicmwpKSByZXR1cm4gMDsKKyAgICB9CisgIH0gZWxzZSBpZiAoYnJsLT5kYXRhLT5pc0ZvcndhcmRpbmcpIHsKKyAgICBpZiAoIWJybC0+ZGF0YS0+ZXh0ZXJuYWwucHJvdG9jb2wtPmZvcndhcmRJbnRlcm5hbFBhY2tldChicmwsIHBhY2tldCwgc2l6ZSkpIHJldHVybiAwOworICB9IGVsc2UgeworICAgIGhhbmRsZU5hdGl2ZVBhY2tldChicmwsIE5VTEwsICZrZXlIYW5kbGVyc19lbWJlZGRlZCwgcGFja2V0LCBzaXplKTsKKyAgfQorCisgIHJldHVybiAxOworfQorCitzdGF0aWMgaW50Citpc09mZmxpbmVfZW1iZWRkZWQgKEJyYWlsbGVEaXNwbGF5ICpicmwpIHsKKyAgcmV0dXJuIGJybC0+ZGF0YS0+aXNGb3J3YXJkaW5nIHx8IGJybC0+ZGF0YS0+aXNTdXNwZW5kZWQ7Cit9CisKK3N0YXRpYyBpbnQKK2hhbmRsZUludGVybmFsUGFja2V0X25vbmVtYmVkZGVkIChCcmFpbGxlRGlzcGxheSAqYnJsLCBjb25zdCB2b2lkICpwYWNrZXQsIHNpemVfdCBzaXplKSB7CisgIGludCBtZW51S2V5UHJlc3NlZCA9IGlzTWVudUtleVBhY2tldChwYWNrZXQsIHNpemUpOworCisgIGlmIChtZW51S2V5UHJlc3NlZCkgeworICAgIGxvZ01lc3NhZ2UoTE9HX0NBVEVHT1JZKEJSQUlMTEVfRFJJVkVSKSwgIm1lbnUga2V5IHByZXNzZWQiKTsKKworICAgIGlmIChicmwtPmRhdGEtPmlzQ29ubmVjdGVkKSB7CisgICAgICBsb2dNZXNzYWdlKExPR19JTkZPLCAiZGV2aWNlIGRpc2Nvbm5lY3RlZCIpOworICAgICAgYnJsLT5kYXRhLT5pc0Nvbm5lY3RlZCA9IDA7CisgICAgICByZXR1cm4gMTsKKyAgICB9CisgIH0KKworICBpZiAoIWJybC0+ZGF0YS0+aXNDb25uZWN0ZWQpIHsKKyAgICBsb2dNZXNzYWdlKExPR19JTkZPLCAiZGV2aWNlIHJlY29ubmVjdGVkIik7CisgICAgYnJsLT5kYXRhLT5pc0Nvbm5lY3RlZCA9IDE7CisgICAgYnJsLT5kYXRhLT5icmFpbGxlLnJlZnJlc2ggPSAxOworICAgIGlmIChtZW51S2V5UHJlc3NlZCkgcmV0dXJuIDE7CisgIH0KKyAgCisgIGhhbmRsZU5hdGl2ZVBhY2tldChicmwsIE5VTEwsICZrZXlIYW5kbGVyc19ub25lbWJlZGRlZCwgcGFja2V0LCBzaXplKTsKKyAgcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQKK2lzT2ZmbGluZV9ub25lbWJlZGRlZCAoQnJhaWxsZURpc3BsYXkgKmJybCkgeworICByZXR1cm4gIWJybC0+ZGF0YS0+aXNDb25uZWN0ZWQ7Cit9CisKK3N0YXRpYyBpbnQKK2JybF9yZWFkQ29tbWFuZCAoQnJhaWxsZURpc3BsYXkgKmJybCwgS2V5VGFibGVDb21tYW5kQ29udGV4dCBjb250ZXh0KSB7CisgIHVuc2lnbmVkIGNoYXIgcGFja2V0W0lSX01BWElNVU1fUEFDS0VUX1NJWkVdOworICBzaXplX3Qgc2l6ZTsKKworICB3aGlsZSAoKHNpemUgPSByZWFkTmF0aXZlUGFja2V0KGJybCwgJmJybC0+ZGF0YS0+aW50ZXJuYWwucG9ydCwgcGFja2V0LCBzaXplb2YocGFja2V0KSkpKSB7CisgICAgaWYgKCFicmwtPmRhdGEtPmludGVybmFsLmhhbmRsZVBhY2tldChicmwsIHBhY2tldCwgc2l6ZSkpIGdvdG8gZmFpbHVyZTsKKyAgfQorCisgIGlmIChlcnJubyAhPSBFQUdBSU4pIGdvdG8gZmFpbHVyZTsKKyAgaWYgKGJybC0+ZGF0YS0+aW50ZXJuYWwuaXNPZmZsaW5lKGJybCkpIHJldHVybiBCUkxfQ01EX09GRkxJTkU7CisgIHJldHVybiBFT0Y7CisKK2ZhaWx1cmU6CisgIHJldHVybiBCUkxfQ01EX1JFU1RBUlRCUkw7Cit9CisKK3N0YXRpYyBpbnQKK2JybF93cml0ZVdpbmRvdyAoQnJhaWxsZURpc3BsYXkgKmJybCwgY29uc3Qgd2NoYXJfdCAqY2hhcmFjdGVycykgeworICBjb25zdCBzaXplX3Qgc2l6ZSA9IGJybC0+dGV4dENvbHVtbnMgKiBicmwtPnRleHRSb3dzOworCisgIGlmIChicmwtPmRhdGEtPmlzRm9yd2FyZGluZykgcmV0dXJuIDE7CisKKyAgaWYgKGNlbGxzSGF2ZUNoYW5nZWQoYnJsLT5kYXRhLT5icmFpbGxlLmNlbGxzLCBicmwtPmJ1ZmZlciwgc2l6ZSwgTlVMTCwgTlVMTCwgJmJybC0+ZGF0YS0+YnJhaWxsZS5yZWZyZXNoKSkgeworICAgIHNpemVfdCBzaXplID0gd3JpdGVXaW5kb3coYnJsLCBicmwtPmJ1ZmZlcik7CisKKyAgICBpZiAoIXNpemUpIHJldHVybiAwOworICB9CisKKyAgcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBzc2l6ZV90IGFza0RldmljZShCcmFpbGxlRGlzcGxheSAqYnJsLCBJcmlzT3V0cHV0UGFja2V0VHlwZSByZXF1ZXN0LCB1bnNpZ25lZCBjaGFyICpyZXNwb25zZSwgc2l6ZV90IHNpemUpCit7CisgIHsKKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyIGRhdGFbXSA9IHtyZXF1ZXN0fTsKKyAgICBpZiAoISB3cml0ZU5hdGl2ZVBhY2tldChicmwsICZicmwtPmRhdGEtPmludGVybmFsLnBvcnQsIGRhdGEsIHNpemVvZihkYXRhKSkgKSByZXR1cm4gMDsKKyAgICBkcmFpbkJyYWlsbGVPdXRwdXQoYnJsLCAwKTsKKyAgfQorCisgIHdoaWxlIChnaW9Bd2FpdElucHV0KGJybC0+ZGF0YS0+aW50ZXJuYWwucG9ydC5naW9FbmRwb2ludCwgMTAwMCkpIHsKKyAgICBzaXplX3QgcmVzID0gcmVhZE5hdGl2ZVBhY2tldChicmwsICZicmwtPmRhdGEtPmludGVybmFsLnBvcnQsIHJlc3BvbnNlLCBzaXplKTsKKyAgICBpZiAocmVzKSByZXR1cm4gcmVzOworICAgIGlmIChlcnJubyAhPSBFQUdBSU4pIGJyZWFrOworICB9CisKKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK3N1c3BlbmREZXZpY2UgKEJyYWlsbGVEaXNwbGF5ICpicmwpIHsKKyAgaWYgKCFicmwtPmRhdGEtPmlzRW1iZWRkZWQpIHJldHVybiAxOworICBsb2dNZXNzYWdlKExPR19DQVRFR09SWShCUkFJTExFX0RSSVZFUiksICJzdXNwZW5kaW5nIGRldmljZSIpOworICBicmwtPmRhdGEtPmlzU3VzcGVuZGVkID0gMTsKKworICBpZiAoYnJsLT5kYXRhLT5pc0ZvcndhcmRpbmcpIHsKKyAgICBpZiAoIXNlbmRNZW51S2V5KGJybCwgJmJybC0+ZGF0YS0+ZXh0ZXJuYWwucG9ydCkpIHJldHVybiAwOworICB9CisKKyAgaWYgKCFjbGVhcldpbmRvdyhicmwpKSByZXR1cm4gMDsKKyAgZHJhaW5CcmFpbGxlT3V0cHV0KGJybCwgNTApOworICBkZWFjdGl2YXRlQnJhaWxsZSgpOworICBzZXRCcmFpbGxlT2ZmbGluZShicmwpOworICByZXR1cm4gMTsKK30KKworc3RhdGljIGludAorcmVzdW1lRGV2aWNlIChCcmFpbGxlRGlzcGxheSAqYnJsKSB7CisgIGlmICghYnJsLT5kYXRhLT5pc0VtYmVkZGVkKSByZXR1cm4gMTsKKyAgbG9nTWVzc2FnZShMT0dfQ0FURUdPUlkoQlJBSUxMRV9EUklWRVIpLCAicmVzdW1pbmcgZGV2aWNlIik7CisgIGFjdGl2YXRlQnJhaWxsZSgpOworCisgIGlmIChicmwtPmRhdGEtPmlzRm9yd2FyZGluZykgeworICAgIGlmICghc2VuZE1lbnVLZXkoYnJsLCAmYnJsLT5kYXRhLT5leHRlcm5hbC5wb3J0KSkgcmV0dXJuIDA7CisgIH0gZWxzZSB7CisgICAgYnJsLT5kYXRhLT5icmFpbGxlLnJlZnJlc2ggPSAxOworICAgIHNldEJyYWlsbGVPbmxpbmUoYnJsKTsKKyAgfQorCisgIGJybC0+ZGF0YS0+aXNTdXNwZW5kZWQgPSAwOworICByZXR1cm4gMTsKK30KKworc3RhdGljIHZvaWQKK2Nsb3NlUG9ydCAoUG9ydCAqcG9ydCkgeworICBpZiAocG9ydC0+Z2lvRW5kcG9pbnQpIHsKKyAgICBnaW9EaXNjb25uZWN0UmVzb3VyY2UocG9ydC0+Z2lvRW5kcG9pbnQpOworICAgIHBvcnQtPmdpb0VuZHBvaW50ID0gTlVMTDsKKyAgfQorfQorCitzdGF0aWMgaW50CitvcGVuUG9ydCAoUG9ydCAqcG9ydCkgeworICBzdGF0aWMgY29uc3QgU2VyaWFsUGFyYW1ldGVycyBzZXJpYWxQYXJhbWV0ZXJzID0geworICAgIFNFUklBTF9ERUZBVUxUX1BBUkFNRVRFUlMsCisgICAgLnBhcml0eSA9IFNFUklBTF9QQVJJVFlfRVZFTgorICB9OworCisgIEdpb0Rlc2NyaXB0b3IgZ2lvRGVzY3JpcHRvcjsKKyAgZ2lvSW5pdGlhbGl6ZURlc2NyaXB0b3IoJmdpb0Rlc2NyaXB0b3IpOworCisgIHBvcnQtPnNlcmlhbFBhcmFtZXRlcnMgPSBzZXJpYWxQYXJhbWV0ZXJzOworICBwb3J0LT5zZXJpYWxQYXJhbWV0ZXJzLmJhdWQgPSBwb3J0LT5zcGVlZDsKKyAgZ2lvRGVzY3JpcHRvci5zZXJpYWwucGFyYW1ldGVycyA9ICZwb3J0LT5zZXJpYWxQYXJhbWV0ZXJzOworCisgIGNsb3NlUG9ydChwb3J0KTsKKworICBpZiAoKHBvcnQtPmdpb0VuZHBvaW50ID0gZ2lvQ29ubmVjdFJlc291cmNlKHBvcnQtPm5hbWUsICZnaW9EZXNjcmlwdG9yKSkpIHsKKyAgICBwb3J0LT5zdGF0ZSA9IDA7CisgICAgcmV0dXJuIDE7CisgIH0KKworICByZXR1cm4gMDsKK30KKworc3RhdGljIGludAorb3BlbkludGVybmFsUG9ydCAoQnJhaWxsZURpc3BsYXkgKmJybCkgeworICBQb3J0ICpwb3J0ID0gJmJybC0+ZGF0YS0+aW50ZXJuYWwucG9ydDsKKworICBpZiAob3BlblBvcnQocG9ydCkpIHsKKyAgICBicmwtPmdpb0VuZHBvaW50ID0gcG9ydC0+Z2lvRW5kcG9pbnQ7CisgICAgcmV0dXJuIDE7CisgIH0KKworICByZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQKK2Nsb3NlSW50ZXJuYWxQb3J0IChCcmFpbGxlRGlzcGxheSAqYnJsKSB7CisgIGJybC0+Z2lvRW5kcG9pbnQgPSBOVUxMOworICBjbG9zZVBvcnQoJmJybC0+ZGF0YS0+aW50ZXJuYWwucG9ydCk7Cit9CisKK3N0YXRpYyB2b2lkCitzdG9wRXh0ZXJuYWxJbnB1dEhhbmRsZXIgKEJyYWlsbGVEaXNwbGF5ICpicmwpIHsKKyAgaWYgKGJybC0+ZGF0YS0+ZXh0ZXJuYWwuaGlvKSB7CisgICAgZ2lvRGVzdHJveUhhbmRsZUlucHV0T2JqZWN0KGJybC0+ZGF0YS0+ZXh0ZXJuYWwuaGlvKTsKKyAgICBicmwtPmRhdGEtPmV4dGVybmFsLmhpbyA9IE5VTEw7CisgIH0KK30KKworc3RhdGljIGludAorb3BlbkV4dGVybmFsUG9ydCAoQnJhaWxsZURpc3BsYXkgKmJybCkgeworICBzdG9wRXh0ZXJuYWxJbnB1dEhhbmRsZXIoYnJsKTsKKworICBpZiAob3BlblBvcnQoJmJybC0+ZGF0YS0+ZXh0ZXJuYWwucG9ydCkpIHsKKyAgICBicmwtPmRhdGEtPmV4dGVybmFsLmhpbyA9CisgICAgICBnaW9OZXdIYW5kbGVJbnB1dE9iamVjdChicmwtPmRhdGEtPmV4dGVybmFsLnBvcnQuZ2lvRW5kcG9pbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJSQUlMTEVfRFJJVkVSX0lOUFVUX1BPTExfSU5URVJWQUwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlySGFuZGxlRXh0ZXJuYWxJbnB1dCwgYnJsKTsKKworICAgIGlmIChicmwtPmRhdGEtPmV4dGVybmFsLmhpbykgcmV0dXJuIDE7CisgIH0KKworICByZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQKK2Nsb3NlRXh0ZXJuYWxQb3J0IChCcmFpbGxlRGlzcGxheSAqYnJsKSB7CisgIHN0b3BFeHRlcm5hbElucHV0SGFuZGxlcihicmwpOworICBjbG9zZVBvcnQoJmJybC0+ZGF0YS0+ZXh0ZXJuYWwucG9ydCk7Cit9CisKK3N0YXRpYyBpbnQKK2NoZWNrTGF0Y2hTdGF0ZSAoQnJhaWxsZURpc3BsYXkgKmJybCkgeworICB1bnNpZ25lZCBjaGFyIHB1bGxlZCA9ICEocmVhZFBvcnQxKElSX1BPUlRfSU5QVVQpICYgMFgwNCk7CisKKyAgaWYgKGJybC0+ZGF0YS0+bGF0Y2gucHVsbGVkKSB7CisgICAgaWYgKHB1bGxlZCkgeworICAgICAgbG9uZyBpbnQgZWxhcHNlZCA9IGdldE1vbm90b25pY0VsYXBzZWQoJmJybC0+ZGF0YS0+bGF0Y2guc3RhcnRlZCk7CisgICAgICBpbnQgcmVzdWx0ID0gKGJybC0+ZGF0YS0+bGF0Y2guZWxhcHNlZCA8PSBicmwtPmRhdGEtPmxhdGNoLmRlbGF5KSAmJgorICAgICAgICAgICAgICAgICAgIChlbGFwc2VkID4gYnJsLT5kYXRhLT5sYXRjaC5kZWxheSk7CisKKyAgICAgIGJybC0+ZGF0YS0+bGF0Y2guZWxhcHNlZCA9IGVsYXBzZWQ7CisgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIGJybC0+ZGF0YS0+bGF0Y2gucHVsbGVkID0gMDsKKyAgICBsb2dNZXNzYWdlKExPR19JTkZPLCAibGF0Y2ggcmVsZWFzZWQiKTsKKyAgfSBlbHNlIGlmIChwdWxsZWQpIHsKKyAgICBnZXRNb25vdG9uaWNUaW1lKCZicmwtPmRhdGEtPmxhdGNoLnN0YXJ0ZWQpOworICAgIGJybC0+ZGF0YS0+bGF0Y2guZWxhcHNlZCA9IDA7CisgICAgYnJsLT5kYXRhLT5sYXRjaC5wdWxsZWQgPSAxOworICAgIGxvZ01lc3NhZ2UoTE9HX0lORk8sICJsYXRjaCBwdWxsZWQiKTsgICAgCisgIH0KKworICByZXR1cm4gMDsKK30KKworQVNZTkNfQUxBUk1fQ0FMTEJBQ0soaXJNb25pdG9yTGF0Y2gpIHsKKyAgQnJhaWxsZURpc3BsYXkgKmJybCA9IHBhcmFtZXRlcnMtPmRhdGE7CisKKyAgaWYgKGNoZWNrTGF0Y2hTdGF0ZShicmwpKSB7CisgICAgaWYgKCEoYnJsLT5kYXRhLT5pc1N1c3BlbmRlZD8gcmVzdW1lRGV2aWNlKGJybCk6IHN1c3BlbmREZXZpY2UoYnJsKSkpIGJybC0+aGFzRmFpbGVkID0gMTsKKyAgfQorfQorCitzdGF0aWMgaW50CitzdGFydExhdGNoTW9uaXRvciAoQnJhaWxsZURpc3BsYXkgKmJybCkgeworICBpZiAoYnJsLT5kYXRhLT5sYXRjaC5tb25pdG9yKSByZXR1cm4gMTsKKyAgaWYgKCFicmwtPmRhdGEtPmxhdGNoLmRlbGF5KSByZXR1cm4gMTsKKworICBpZiAoYXN5bmNOZXdSZWxhdGl2ZUFsYXJtKCZicmwtPmRhdGEtPmxhdGNoLm1vbml0b3IsIDAsIGlyTW9uaXRvckxhdGNoLCBicmwpKSB7CisgICAgaWYgKGFzeW5jUmVzZXRBbGFybUludGVydmFsKGJybC0+ZGF0YS0+bGF0Y2gubW9uaXRvciwgYnJsLT5kYXRhLT5sYXRjaC5pbnRlcnZhbCkpIHsKKyAgICAgIGJybC0+ZGF0YS0+bGF0Y2gucHVsbGVkID0gMDsKKyAgICAgIHJldHVybiAxOworICAgIH0KKworICAgIGFzeW5jQ2FuY2VsUmVxdWVzdChicmwtPmRhdGEtPmxhdGNoLm1vbml0b3IpOworICAgIGJybC0+ZGF0YS0+bGF0Y2gubW9uaXRvciA9IE5VTEw7CisgIH0KKworICByZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQKK3N0b3BMYXRjaE1vbml0b3IgKEJyYWlsbGVEaXNwbGF5ICpicmwpIHsKKyAgaWYgKGJybC0+ZGF0YS0+bGF0Y2gubW9uaXRvcikgeworICAgIGFzeW5jQ2FuY2VsUmVxdWVzdChicmwtPmRhdGEtPmxhdGNoLm1vbml0b3IpOworICAgIGJybC0+ZGF0YS0+bGF0Y2gubW9uaXRvciA9IE5VTEw7CisgIH0KK30KKworc3RhdGljIGludAorYnJsX2NvbnN0cnVjdCAoQnJhaWxsZURpc3BsYXkgKmJybCwgY2hhciAqKnBhcmFtZXRlcnMsIGNvbnN0IGNoYXIgKmRldmljZSkgeworICBpZiAoKGJybC0+ZGF0YSA9IG1hbGxvYyhzaXplb2YoKmJybC0+ZGF0YSkpKSkgeworICAgIHVuc2lnbmVkIGludCBlbWJlZGRlZDsKKworICAgIG1lbXNldChicmwtPmRhdGEsIDAsIHNpemVvZigqYnJsLT5kYXRhKSk7CisKKyAgICBicmwtPmRhdGEtPmlzQ29ubmVjdGVkID0gMTsKKworICAgIGJybC0+ZGF0YS0+aXNTdXNwZW5kZWQgPSAwOworICAgIGJybC0+ZGF0YS0+aXNGb3J3YXJkaW5nID0gMDsKKworICAgIGJybC0+ZGF0YS0+aGF2ZVZpc3VhbERpc3BsYXkgPSAwOworCisgICAgYnJsLT5kYXRhLT5pbnRlcm5hbC5wb3J0Lmdpb0VuZHBvaW50ID0gTlVMTDsKKyAgICBicmwtPmRhdGEtPmludGVybmFsLnBvcnQud3JpdGVOYXRpdmVQYWNrZXQgPSB3cml0ZU5hdGl2ZVBhY2tldF9pbnRlcm5hbDsKKyAgICBicmwtPmRhdGEtPmludGVybmFsLnBvcnQuaGFuZGxlTmF0aXZlQWNrbm93bGVkZ2VtZW50ID0gaGFuZGxlTmF0aXZlQWNrbm93bGVkZ2VtZW50X2ludGVybmFsOworICAgIGJybC0+ZGF0YS0+aW50ZXJuYWwubGluZWFyS2V5cyA9IDA7CisKKyAgICBicmwtPmRhdGEtPmV4dGVybmFsLnBvcnQuZ2lvRW5kcG9pbnQgPSBOVUxMOworICAgIGJybC0+ZGF0YS0+ZXh0ZXJuYWwucG9ydC53cml0ZU5hdGl2ZVBhY2tldCA9IHdyaXRlTmF0aXZlUGFja2V0X2V4dGVybmFsOworICAgIGJybC0+ZGF0YS0+ZXh0ZXJuYWwucG9ydC5oYW5kbGVOYXRpdmVBY2tub3dsZWRnZW1lbnQgPSBoYW5kbGVOYXRpdmVBY2tub3dsZWRnZW1lbnRfZXh0ZXJuYWw7CisgICAgYnJsLT5kYXRhLT5leHRlcm5hbC5oaW8gPSBOVUxMOworICAgIG1lbXNldChicmwtPmRhdGEtPmV4dGVybmFsLmNlbGxzLCAwLCBzaXplb2YoYnJsLT5kYXRhLT5leHRlcm5hbC5jZWxscykpOworCisgICAgYnJsLT5kYXRhLT5sYXRjaC5tb25pdG9yID0gTlVMTDsKKyAgICBicmwtPmRhdGEtPmxhdGNoLmRlbGF5ID0gSVJfREVGQVVMVF9MQVRDSF9ERUxBWTsKKyAgICBicmwtPmRhdGEtPmxhdGNoLmludGVydmFsID0gSVJfREVGQVVMVF9MQVRDSF9JTlRFUlZBTDsKKworICAgIGJybC0+ZGF0YS0+YnJhaWxsZS5yZWZyZXNoID0gMTsKKworICAgIGlmICh2YWxpZGF0ZVllc05vKCZlbWJlZGRlZCwgcGFyYW1ldGVyc1tQQVJNX0VNQkVEREVEXSkpIHsKKyAgICAgIGludCBpbnRlcm5hbFBvcnRPcGVuZWQgPSAwOworCisgICAgICBicmwtPmRhdGEtPmlzRW1iZWRkZWQgPSAhIWVtYmVkZGVkOworICAgICAgbG9nTWVzc2FnZShMT0dfSU5GTywgIkRyaXZlciBNb2RlOiAlcyIsCisgICAgICAgICAgICAgICAgIChicmwtPmRhdGEtPmlzRW1iZWRkZWQ/ICJlbWJlZGRlZCI6ICJub24tZW1iZWRkZWQiKSk7CisKKyAgICAgIGlmIChicmwtPmRhdGEtPmlzRW1iZWRkZWQpIHsKKyAgICAgICAgeworICAgICAgICAgIGNvbnN0IGNoYXIgKnBhcmFtZXRlciA9IHBhcmFtZXRlcnNbUEFSTV9QUk9UT0NPTF07CisgICAgICAgICAgY29uc3QgY2hhciAqY2hvaWNlc1twcm90b2NvbENvdW50ICsgMV07CisgICAgICAgICAgdW5zaWduZWQgaW50IGNob2ljZTsKKworICAgICAgICAgIGZvciAoY2hvaWNlPTA7IGNob2ljZTxwcm90b2NvbENvdW50OyBjaG9pY2UrPTEpIHsKKyAgICAgICAgICAgIGNob2ljZXNbY2hvaWNlXSA9IHByb3RvY29sVGFibGVbY2hvaWNlXS5wcm90b2NvbE5hbWU7CisgICAgICAgICAgfQorICAgICAgICAgIGNob2ljZXNbcHJvdG9jb2xDb3VudF0gPSBOVUxMOworCisgICAgICAgICAgaWYgKCF2YWxpZGF0ZUNob2ljZSgmY2hvaWNlLCBwYXJhbWV0ZXIsIGNob2ljZXMpKSB7CisgICAgICAgICAgICBjaG9pY2UgPSBJUl9QUk9UT0NPTF9ERUZBVUxUOworICAgICAgICAgICAgbG9nTWVzc2FnZShMT0dfV0FSTklORywgImludmFsaWQgcHJvdG9jb2wgc2V0dGluZzogJXMiLCBwYXJhbWV0ZXIpOworICAgICAgICAgIH0KKworICAgICAgICAgIHNldEV4dGVybmFsUHJvdG9jb2woYnJsLCBjaG9pY2UpOworICAgICAgICAgIGxvZ01lc3NhZ2UoTE9HX0lORk8sICJFeHRlcm5hbCBQcm90b2NvbDogJXMiLCBicmwtPmRhdGEtPmV4dGVybmFsLnByb3RvY29sLT5wcm90b2NvbE5hbWUpOworICAgICAgICB9CisKKyAgICAgICAgeworICAgICAgICAgIGNvbnN0IGNoYXIgKnBhcmFtZXRlciA9IHBhcmFtZXRlcnNbUEFSTV9MQVRDSF9ERUxBWV07CisKKyAgICAgICAgICBpZiAoKnBhcmFtZXRlcikgeworICAgICAgICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5pbXVtID0gMDsKKyAgICAgICAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4aW11bSA9IDEwMDsKKyAgICAgICAgICAgIGludCB2YWx1ZTsKKworICAgICAgICAgICAgaWYgKHZhbGlkYXRlSW50ZWdlcigmdmFsdWUsIHBhcmFtZXRlciwgJm1pbmltdW0sICZtYXhpbXVtKSkgeworICAgICAgICAgICAgICBicmwtPmRhdGEtPmxhdGNoLmRlbGF5ID0gdmFsdWUgKiAxMDA7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICBsb2dNZXNzYWdlKExPR19XQVJOSU5HLCAiaW52YWxpZCBsYXRjaCBkZWxheSBzZXR0aW5nOiAlcyIsIHBhcmFtZXRlcik7CisgICAgICAgICAgICB9CisgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYgKHN0YXJ0TGF0Y2hNb25pdG9yKGJybCkpIHsKKyAgICAgICAgICBpZiAoZW5hYmxlUG9ydHMoTE9HX0VSUiwgSVJfUE9SVF9CQVNFLCAzKSAhPSAtMSkgeworICAgICAgICAgICAgYnJsLT5kYXRhLT5leHRlcm5hbC5wb3J0Lm5hbWUgPSBkZXZpY2U7CisgICAgICAgICAgICBicmwtPmRhdGEtPmV4dGVybmFsLnBvcnQuc3BlZWQgPSBicmwtPmRhdGEtPmV4dGVybmFsLnByb3RvY29sLT5leHRlcm5hbFNwZWVkOworCisgICAgICAgICAgICBpZiAob3BlbkV4dGVybmFsUG9ydChicmwpKSB7CisgICAgICAgICAgICAgIGJybC0+ZGF0YS0+aW50ZXJuYWwucG9ydC5uYW1lID0gInNlcmlhbDp0dHlTMSI7CisgICAgICAgICAgICAgIGJybC0+ZGF0YS0+aW50ZXJuYWwucG9ydC5zcGVlZCA9IElSX0lOVEVSTkFMX1NQRUVEOworCisgICAgICAgICAgICAgIGlmIChvcGVuSW50ZXJuYWxQb3J0KGJybCkpIHsKKyAgICAgICAgICAgICAgICBicmwtPmRhdGEtPmludGVybmFsLmhhbmRsZVBhY2tldCA9IGhhbmRsZUludGVybmFsUGFja2V0X2VtYmVkZGVkOworICAgICAgICAgICAgICAgIGJybC0+ZGF0YS0+aW50ZXJuYWwuaXNPZmZsaW5lID0gaXNPZmZsaW5lX2VtYmVkZGVkOworCisgICAgICAgICAgICAgICAgYWN0aXZhdGVCcmFpbGxlKCk7CisgICAgICAgICAgICAgICAgaW50ZXJuYWxQb3J0T3BlbmVkID0gMTsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBsb2dTeXN0ZW1FcnJvcigiaW9wZXJtIik7CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICB9IGVsc2UgeworICAgICAgICBicmwtPmRhdGEtPmludGVybmFsLnBvcnQubmFtZSA9IGRldmljZTsKKyAgICAgICAgYnJsLT5kYXRhLT5pbnRlcm5hbC5wb3J0LnNwZWVkID0gSVJfRVhURVJOQUxfU1BFRURfTkFUSVZFOworCisgICAgICAgIGlmIChvcGVuSW50ZXJuYWxQb3J0KGJybCkpIHsKKyAgICAgICAgICBicmwtPmRhdGEtPmludGVybmFsLmhhbmRsZVBhY2tldCA9IGhhbmRsZUludGVybmFsUGFja2V0X25vbmVtYmVkZGVkOworICAgICAgICAgIGJybC0+ZGF0YS0+aW50ZXJuYWwuaXNPZmZsaW5lID0gaXNPZmZsaW5lX25vbmVtYmVkZGVkOworCisgICAgICAgICAgYnJsLT5kYXRhLT5pc0Nvbm5lY3RlZCA9IDE7CisgICAgICAgICAgaW50ZXJuYWxQb3J0T3BlbmVkID0gMTsKKyAgICAgICAgfQorICAgICAgfQorCisgICAgICBpZiAoaW50ZXJuYWxQb3J0T3BlbmVkKSB7CisgICAgICAgIHVuc2lnbmVkIGNoYXIgZGV2aWNlUmVzcG9uc2VbSVJfTUFYSU1VTV9QQUNLRVRfU0laRV07CisgICAgICAgIHNzaXplX3Qgc2l6ZTsKKworICAgICAgICBpZiAoIShzaXplID0gYXNrRGV2aWNlKGJybCwgSVJfT1BUX1ZlcnNpb25SZXF1ZXN0LCBkZXZpY2VSZXNwb25zZSwgc2l6ZW9mKGRldmljZVJlc3BvbnNlKSkgKSkgeworICAgICAgICAgIGxvZ01lc3NhZ2UoTE9HX1dBUk5JTkcsICJyZWNlaXZlZCBubyByZXNwb25zZSB0byB2ZXJzaW9uIHJlcXVlc3QiKTsKKyAgICAgICAgfSBlbHNlIGlmIChzaXplIDwgMykgeworICAgICAgICAgIGxvZ0J5dGVzKExPR19XQVJOSU5HLCAic2hvcnQgZmlybXdhcmUgdmVyc2lvbiByZXNwb25zZSIsIGRldmljZVJlc3BvbnNlLCBzaXplKTsKKyAgICAgICAgfSAgZWxzZSBpZiAoZGV2aWNlUmVzcG9uc2VbMF0gIT0gSVJfSVBUX1ZlcnNpb25SZXNwb25zZSkgeworICAgICAgICAgIGxvZ0J5dGVzKExPR19XQVJOSU5HLCAidW5leHBlY3RlZCBmaXJtd2FyZSB2ZXJzaW9uIHJlc3BvbnNlIiwgZGV2aWNlUmVzcG9uc2UsIHNpemUpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgIGNvbnN0IEtleVRhYmxlRGVmaW5pdGlvbiAqa3RkOworCisgICAgICAgICAgc3dpdGNoIChkZXZpY2VSZXNwb25zZVsxXSkgeworICAgICAgICAgICAgY2FzZSAnYSc6CisgICAgICAgICAgICBjYXNlICdBJzoKKyAgICAgICAgICAgICAga3RkID0gJktFWV9UQUJMRV9ERUZJTklUSU9OKHBjKTsKKyAgICAgICAgICAgICAgYnJsLT50ZXh0Q29sdW1ucyA9IElSX1dJTkRPV19TSVpFX01BWElNVU07CisgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBjYXNlICdsJzoKKyAgICAgICAgICAgIGNhc2UgJ0wnOgorICAgICAgICAgICAgICBrdGQgPSAmS0VZX1RBQkxFX0RFRklOSVRJT04oYnJsKTsKKyAgICAgICAgICAgICAgYnJsLT50ZXh0Q29sdW1ucyA9IElSX1dJTkRPV19TSVpFX01BWElNVU07CisgICAgICAgICAgICAgIGJybC0+ZGF0YS0+aGF2ZVZpc3VhbERpc3BsYXkgPSAxOworICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgY2FzZSAncyc6CisgICAgICAgICAgICBjYXNlICdTJzoKKyAgICAgICAgICAgICAga3RkID0gJktFWV9UQUJMRV9ERUZJTklUSU9OKGJybCk7CisgICAgICAgICAgICAgIGJybC0+dGV4dENvbHVtbnMgPSBJUl9XSU5ET1dfU0laRV9TTUFMTDsKKyAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgIGxvZ0J5dGVzKExPR19XQVJOSU5HLCAidW5yZWNvZ25pemVkIGRldmljZSB0eXBlIGluIGZpcm13YXJlIHZlcnNpb24gcmVzcG9uc2UiLCBkZXZpY2VSZXNwb25zZSwgc2l6ZSk7CisgICAgICAgICAgICAgIGt0ZCA9IE5VTEw7CisgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIH0KKworICAgICAgICAgIGlmIChrdGQpIHsKKyAgICAgICAgICAgIHNldEJyYWlsbGVLZXlUYWJsZShicmwsIGt0ZCk7CisKKyAgICAgICAgICAgIGlmICgoYnJsLT5kYXRhLT5maXJtd2FyZVZlcnNpb24gPSBtYWxsb2Moc2l6ZSAtIDEpKSkgeworICAgICAgICAgICAgICBtZW1jcHkoYnJsLT5kYXRhLT5maXJtd2FyZVZlcnNpb24sIGRldmljZVJlc3BvbnNlKzIsIHNpemUtMik7CisgICAgICAgICAgICAgIGJybC0+ZGF0YS0+ZmlybXdhcmVWZXJzaW9uW3NpemUtMl0gPSAwOworICAgICAgICAgICAgICBsb2dNZXNzYWdlKExPR19JTkZPLCAiRmlybXdhcmUgVmVyc2lvbjogJXMiLCBicmwtPmRhdGEtPmZpcm13YXJlVmVyc2lvbik7CisKKyAgICAgICAgICAgICAgaWYgKCEoc2l6ZSA9IGFza0RldmljZShicmwsIElSX09QVF9TZXJpYWxOdW1iZXJSZXF1ZXN0LCBkZXZpY2VSZXNwb25zZSwgc2l6ZW9mKGRldmljZVJlc3BvbnNlKSkpKSB7CisgICAgICAgICAgICAgICAgbG9nTWVzc2FnZShMT0dfV0FSTklORywgIlJlY2VpdmVkIG5vIHJlc3BvbnNlIHRvIHNlcmlhbCBudW1iZXIgcmVxdWVzdC4iKTsKKyAgICAgICAgICAgICAgfSBlbHNlIGlmIChzaXplICE9IElSX09QVF9TRVJJQUxOVU1CRVJSRVNQT05TRV9MRU5HVEgpIHsKKyAgICAgICAgICAgICAgICBsb2dCeXRlcyhMT0dfV0FSTklORywgInNob3J0IHNlcmlhbCBudW1iZXIgcmVzcG9uc2UiLCBkZXZpY2VSZXNwb25zZSwgc2l6ZSk7CisgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZGV2aWNlUmVzcG9uc2VbMF0gIT0gSVJfSVBUX1NlcmlhbE51bWJlclJlc3BvbnNlKSB7CisgICAgICAgICAgICAgICAgbG9nQnl0ZXMoTE9HX1dBUk5JTkcsICJ1bmV4cGVjdGVkIHNlcmlhbCBudW1iZXIgcmVzcG9uc2UiLCBkZXZpY2VSZXNwb25zZSwgc2l6ZSk7CisgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgaWYgKGRldmljZVJlc3BvbnNlWzFdICE9IElSX09QVF9TRVJJQUxOVU1CRVJSRVNQT05TRV9OT1dJTkRPV0xFTkdUSCkgeworICAgICAgICAgICAgICAgICAgYnJsLT50ZXh0Q29sdW1ucyA9IGRldmljZVJlc3BvbnNlWzFdOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgIGNoYXIgKmJ5dGUgPSBicmwtPmRhdGEtPnNlcmlhbE51bWJlcjsKKworICAgICAgICAgICAgICAgICAgYnl0ZSA9IG1lbXBjcHkoYnl0ZSwgZGV2aWNlUmVzcG9uc2UrMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzaXplb2YoYnJsLT5kYXRhLT5zZXJpYWxOdW1iZXIpIC0gMSkpOworICAgICAgICAgICAgICAgICAgKmJ5dGUgPSAwOworICAgICAgICAgICAgICAgICAgbG9nTWVzc2FnZShMT0dfSU5GTywgIlNlcmlhbCBOdW1iZXI6ICVzIiwgYnJsLT5kYXRhLT5zZXJpYWxOdW1iZXIpOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGxvZ01lc3NhZ2UoTE9HX0lORk8sICJEaXNwbGF5IFNpemU6ICV1IiwgYnJsLT50ZXh0Q29sdW1ucyk7CisgICAgICAgICAgICAgICAgbG9nTWVzc2FnZShMT0dfSU5GTywgIlZpc3VhbCBEaXNwbGF5OiAlcyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAoYnJsLT5kYXRhLT5oYXZlVmlzdWFsRGlzcGxheT8gInllcyI6ICJubyIpKTsKKworICAgICAgICAgICAgICAgIG1ha2VPdXRwdXRUYWJsZShkb3RzVGFibGVfSVNPMTE1NDhfMSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICBmcmVlKGJybC0+ZGF0YS0+ZmlybXdhcmVWZXJzaW9uKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgIGxvZ01hbGxvY0Vycm9yKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgIGxvZ01lc3NhZ2UoTE9HX1dBUk5JTkcsICJpbnZhbGlkIGVtYmVkZGVkIHNldHRpbmc6ICVzIiwgcGFyYW1ldGVyc1tQQVJNX0VNQkVEREVEXSk7CisgICAgfQorCisgICAgc3RvcExhdGNoTW9uaXRvcihicmwpOworICAgIGNsb3NlRXh0ZXJuYWxQb3J0KGJybCk7CisgICAgY2xvc2VJbnRlcm5hbFBvcnQoYnJsKTsKKyAgICBmcmVlKGJybC0+ZGF0YSk7CisgIH0gZWxzZSB7CisgICAgbG9nTWFsbG9jRXJyb3IoKTsKKyAgfQorCisgIHJldHVybiAwOworfQorCitzdGF0aWMgdm9pZAorYnJsX2Rlc3RydWN0IChCcmFpbGxlRGlzcGxheSAqYnJsKSB7CisgIGlmIChicmwtPmRhdGEtPmlzRW1iZWRkZWQpIHsKKyAgICBjbGVhcldpbmRvdyhicmwpOworICAgIGRyYWluQnJhaWxsZU91dHB1dChicmwsIDUwKTsKKyAgICBkZWFjdGl2YXRlQnJhaWxsZSgpOworICB9CisKKyAgaWYgKGJybC0+ZGF0YSkgeworICAgIHN0b3BMYXRjaE1vbml0b3IoYnJsKTsKKyAgICBjbG9zZUV4dGVybmFsUG9ydChicmwpOworICAgIGNsb3NlSW50ZXJuYWxQb3J0KGJybCk7CisgICAgZnJlZShicmwtPmRhdGEtPmZpcm13YXJlVmVyc2lvbik7CisKKyAgICBmcmVlKGJybC0+ZGF0YSk7CisgICAgYnJsLT5kYXRhID0gTlVMTDsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvRHJpdmVycy9CcmFpbGxlL0lyaXMvYnJsZGVmcy1pci5oIGIvRHJpdmVycy9CcmFpbGxlL0lyaXMvYnJsZGVmcy1pci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJkNDc1NzgKLS0tIC9kZXYvbnVsbAorKysgYi9Ecml2ZXJzL0JyYWlsbGUvSXJpcy9icmxkZWZzLWlyLmgKQEAgLTAsMCArMSw4NCBAQAorLyoKKyAqIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisgKiAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisgKgorICogQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKKyNpZm5kZWYgQlJMVFRZX0lOQ0xVREVEX0lSX0JSTERFRlMKKyNkZWZpbmUgQlJMVFRZX0lOQ0xVREVEX0lSX0JSTERFRlMKKworI2RlZmluZSBJUl9ERUZBVUxUX0xBVENIX0RFTEFZIDEwMDAKKyNkZWZpbmUgSVJfREVGQVVMVF9MQVRDSF9JTlRFUlZBTCAxMDAKKworI2RlZmluZSBJUl9XSU5ET1dfU0laRV9NQVhJTVVNIDQwIC8qIE1heGltdW0gc2l6ZSBmb3IgYnJhaWxsZSB3aW5kb3cgYW5kIHZpc3VhbCBkaXNwbGF5ICovCisjZGVmaW5lIElSX1dJTkRPV19TSVpFX1NNQUxMIDMyIC8qIFNpemUgb2YgYnJhaWxsZSB3aW5kb3cgb24gdGhlIElyaXMgUyAqLworCisjZGVmaW5lIElSX09QVF9TRVJJQUxOVU1CRVJSRVNQT05TRV9MRU5HVEggNgorI2RlZmluZSBJUl9PUFRfU0VSSUFMTlVNQkVSUkVTUE9OU0VfTk9XSU5ET1dMRU5HVEggMHhmZgorCit0eXBlZGVmIGVudW0geworICBJUl9JUFRfQnJhaWxsZUtleXMgICAgID0gJ0InLAorICBJUl9JUFRfTGluZWFyS2V5cyAgICAgID0gJ0MnLAorICBJUl9JUFRfSW50ZXJhY3RpdmVLZXkgID0gJ0knLAorICBJUl9JUFRfU2VyaWFsTnVtYmVyUmVzcG9uc2UgICAgPSAnUycsIAorICBJUl9JUFRfWHRLZXlDb2RlICAgICAgID0gJ1UnLAorICBJUl9JUFRfWHRLZXlDb2RlUmVwZWF0ID0gJ3UnLAorICBJUl9JUFRfVmVyc2lvblJlc3BvbnNlID0gJ1YnCit9IElyaXNJbnB1dFBhY2tldFR5cGU7CisKK3R5cGVkZWYgZW51bSB7CisgIElSX09QVF9Xcml0ZUJyYWlsbGUgICA9ICdCJywKKyAgSVJfT1BUX1dyaXRlVmlzdWFsICAgID0gJ0wnLAorICBJUl9PUFRfU2VyaWFsTnVtYmVyUmVxdWVzdCA9ICdTJywKKyAgSVJfT1BUX1ZlcnNpb25SZXF1ZXN0ID0gJ1YnCit9IElyaXNPdXRwdXRQYWNrZXRUeXBlOworCit0eXBlZGVmIGVudW0geworICAvKiBsaW5lYXIga2V5cyAqLworICBJUl9LRVlfTDEgPSAwWDAwLAorICBJUl9LRVlfTDIgPSAwWDAxLAorICBJUl9LRVlfTDMgPSAwWDAyLAorICBJUl9LRVlfTDQgPSAwWDAzLAorICBJUl9LRVlfTDUgPSAwWDA1LAorICBJUl9LRVlfTDYgPSAwWDA2LAorICBJUl9LRVlfTDcgPSAwWDA3LAorICBJUl9LRVlfTDggPSAwWDA4LAorCisgIC8qIGJyYWlsbGUga2V5cyAqLworICBJUl9LRVlfRG90MSAgICAgID0gMFgxMCwKKyAgSVJfS0VZX0RvdDIgICAgICA9IDBYMTEsCisgIElSX0tFWV9Eb3QzICAgICAgPSAwWDEyLAorICBJUl9LRVlfRG90NCAgICAgID0gMFgxMywKKyAgSVJfS0VZX0RvdDUgICAgICA9IDBYMTQsCisgIElSX0tFWV9Eb3Q2ICAgICAgPSAwWDE1LAorICBJUl9LRVlfRG90NyAgICAgID0gMFgxNiwKKyAgSVJfS0VZX0RvdDggICAgICA9IDBYMTcsCisgIElSX0tFWV9CYWNrc3BhY2UgPSAwWDE4LAorICBJUl9LRVlfU3BhY2UgICAgID0gMFgxOSwKKworICAvKiBzcGVjaWFsIGtleXMgKi8KKyAgSVJfS0VZX01lbnUgPSAwWDIwLAorICBJUl9LRVlfWiAgICA9IDBYMjEKK30gSVJfTmF2aWdhdGlvbktleTsKKwordHlwZWRlZiBlbnVtIHsKKyAgSVJfR1JQX05hdmlnYXRpb25LZXlzID0gMCwKKyAgSVJfR1JQX1JvdXRpbmdLZXlzLAorICBJUl9HUlBfWHQsCisgIElSX0dSUF9YdEUwLAorICBJUl9HUlBfWHRFMQorfSBJUl9LZXlHcm91cDsKKworI2VuZGlmIC8qIEJSTFRUWV9JTkNMVURFRF9JUl9CUkxERUZTICovIApkaWZmIC0tZ2l0IGEvRHJpdmVycy9CcmFpbGxlL0xpYmJyYWlsbGUvTWFrZWZpbGUuaW4gYi9Ecml2ZXJzL0JyYWlsbGUvTGliYnJhaWxsZS9NYWtlZmlsZS5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMTJkY2E2Ci0tLSAvZGV2L251bGwKKysrIGIvRHJpdmVycy9CcmFpbGxlL0xpYmJyYWlsbGUvTWFrZWZpbGUuaW4KQEAgLTAsMCArMSwyOSBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorIyAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyMKKyMgQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorIworIyBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorIworIyBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisjIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyMgbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisjCisjIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK0RSSVZFUl9DT0RFID0gbGIKK0RSSVZFUl9OQU1FID0gTGliYnJhaWxsZQorRFJJVkVSX1VTQUdFID0gTGliYnJhaWxsZQorRFJJVkVSX1ZFUlNJT04gPSAKK0RSSVZFUl9ERVZFTE9QRVJTID0gU+liYXN0aWVuIFNhYmzpIDxzYWJsZUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitCUkxfT0JKUyA9IEBicmFpbGxlX2xpYnJhcmllc19sYkAKK2luY2x1ZGUgJChTUkNfVE9QKWJyYWlsbGUubWsKKworYnJhaWxsZS4kTzoKKwkkKENDKSAkKEJSTF9DRkxBR1MpIC1JJChMSUJCUkFJTExFX1JPT1QpL2luY2x1ZGUgLWMgJChTUkNfRElSKS9icmFpbGxlLmMKKwpkaWZmIC0tZ2l0IGEvRHJpdmVycy9CcmFpbGxlL0xpYmJyYWlsbGUvYnJhaWxsZS5jIGIvRHJpdmVycy9CcmFpbGxlL0xpYmJyYWlsbGUvYnJhaWxsZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgwZWM2NjEKLS0tIC9kZXYvbnVsbAorKysgYi9Ecml2ZXJzL0JyYWlsbGUvTGliYnJhaWxsZS9icmFpbGxlLmMKQEAgLTAsMCArMSwyMTkgQEAKKy8qCisgKiBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorICogICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorICoKKyAqIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorICoKKyAqIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyAqLworCisvKiBMaWJicmFpbGxlL2JyYWlsbGUuYyAtIEJyYWlsbGUgZGlzcGxheSBkcml2ZXIgdXNpbmcgbGliYnJhaWxsZQorICoKKyAqIFdyaXR0ZW4gYnkgU8OpYmFzdGllbiBTYWJsw6kgPHNhYmxlQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKyAqCisgKi8KKworI2luY2x1ZGUgInByb2xvZ3VlLmgiCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorCisjaW5jbHVkZSAibG9nLmgiCisjaW5jbHVkZSAiY29yZS5oIgorCisjaW5jbHVkZSA8YnJhaWxsZS5oPgorCit0eXBlZGVmIGVudW0geworICBQQVJNX0RFVklDRSwKKyAgUEFSTV9EUklWRVIsCisgIFBBUk1fVEFCTEUKK30gRHJpdmVyUGFyYW1ldGVyOworI2RlZmluZSBCUkxQQVJNUyAiZGV2aWNlIiwgImRyaXZlciIsICJ0YWJsZSIKKworI2luY2x1ZGUgImJybF9kcml2ZXIuaCIKKworc3RhdGljIGludAorYnJsX2NvbnN0cnVjdChCcmFpbGxlRGlzcGxheSAqYnJsLCBjaGFyICoqcGFyYW1ldGVycywgY29uc3QgY2hhciAqZGV2aWNlKQoreworICBpZigqcGFyYW1ldGVyc1tQQVJNX0RFVklDRV0pCisgICAgYnJhaWxsZV9jb25maWcoQlJMX0RFVklDRSwgcGFyYW1ldGVyc1tQQVJNX0RFVklDRV0pOworCisgIGlmKCpwYXJhbWV0ZXJzW1BBUk1fRFJJVkVSXSkKKyAgICBicmFpbGxlX2NvbmZpZyhCUkxfRFJJVkVSLCBwYXJhbWV0ZXJzW1BBUk1fRFJJVkVSXSk7CisKKyAgaWYoKnBhcmFtZXRlcnNbUEFSTV9UQUJMRV0pCisgICAgYnJhaWxsZV9jb25maWcoQlJMX1RBQkxFLCBwYXJhbWV0ZXJzW1BBUk1fVEFCTEVdKTsKKworICBpZihicmFpbGxlX2luaXQoKSkKKyAgICB7CisgICAgICBsb2dNZXNzYWdlKExPR19JTkZPLCAiTGliYnJhaWxsZSBWZXJzaW9uOiAlcyIsIGJyYWlsbGVfaW5mbyhCUkxfVkVSU0lPTikpOworCisjaWZkZWYgQlJMX1BBVEgKKyAgICAgIGxvZ01lc3NhZ2UoTE9HX0RFQlVHLCAiTGliYnJhaWxsZSBJbnN0YWxsYXRpb24gRGlyZWN0b3J5OiAlcyIsIGJyYWlsbGVfaW5mbyhCUkxfUEFUSCkpOworI2VuZGlmIC8qIEJSTF9QQVRIICovCisKKyNpZmRlZiBCUkxfUEFUSENPTkYKKyAgICAgIGxvZ01lc3NhZ2UoTE9HX0RFQlVHLCAiTGliYnJhaWxsZSBDb25maWd1cmF0aW9uIERpcmVjdG9yeTogJXMiLCBicmFpbGxlX2luZm8oQlJMX1BBVEhDT05GKSk7CisjZW5kaWYgLyogQlJMX1BBVEhDT05GICovCisKKyNpZmRlZiBCUkxfUEFUSFRCTAorICAgICAgbG9nTWVzc2FnZShMT0dfREVCVUcsICJMaWJicmFpbGxlIFRhYmxlcyBEaXJlY3Rvcnk6ICVzIiwgYnJhaWxsZV9pbmZvKEJSTF9QQVRIVEJMKSk7CisjZW5kaWYgLyogQlJMX1BBVEhUQkwgKi8KKworI2lmZGVmIEJSTF9QQVRIRFJWCisgICAgICBsb2dNZXNzYWdlKExPR19ERUJVRywgIkxpYmJyYWlsbGUgRHJpdmVycyBEaXJlY3Rvcnk6ICVzIiwgYnJhaWxsZV9pbmZvKEJSTF9QQVRIRFJWKSk7CisjZW5kaWYgLyogQlJMX1BBVEhEUlYgKi8KKworICAgICAgbG9nTWVzc2FnZShMT0dfSU5GTywgIkxpYmJyYWlsbGUgVGFibGU6ICVzIiwgYnJhaWxsZV9pbmZvKEJSTF9UQUJMRSkpOworICAgICAgbG9nTWVzc2FnZShMT0dfSU5GTywgIkxpYmJyYWlsbGUgRHJpdmVyOiAlcyIsIGJyYWlsbGVfaW5mbyhCUkxfRFJJVkVSKSk7CisgICAgICBsb2dNZXNzYWdlKExPR19JTkZPLCAiTGliYnJhaWxsZSBEZXZpY2U6ICVzIiwgYnJhaWxsZV9pbmZvKEJSTF9ERVZJQ0UpKTsKKworICAgICAgbG9nTWVzc2FnZShMT0dfSU5GTywgIkRpc3BsYXkgVHlwZTogJXMiLCBicmFpbGxlX2luZm8oQlJMX1RFUk1JTkFMKSk7CisgICAgICBsb2dNZXNzYWdlKExPR19JTkZPLCAiRGlzcGxheSBTaXplOiAlZCIsIGJyYWlsbGVfc2l6ZSgpKTsKKworICAgICAgYnJsLT50ZXh0Q29sdW1ucyA9IGJyYWlsbGVfc2l6ZSgpOyAgLyogaW5pdGlhbGlzZSBzaXplIG9mIGRpc3BsYXkgKi8KKyAgICAgIGJybC0+dGV4dFJvd3MgPSAxOworCisgICAgICBNQUtFX09VVFBVVF9UQUJMRSgKKyAgICAgICAgQlJBSUxMRSgxLCAwLCAwLCAwLCAwLCAwLCAwLCAwKSwKKyAgICAgICAgQlJBSUxMRSgwLCAxLCAwLCAwLCAwLCAwLCAwLCAwKSwKKyAgICAgICAgQlJBSUxMRSgwLCAwLCAxLCAwLCAwLCAwLCAwLCAwKSwKKyAgICAgICAgQlJBSUxMRSgwLCAwLCAwLCAxLCAwLCAwLCAwLCAwKSwKKyAgICAgICAgQlJBSUxMRSgwLCAwLCAwLCAwLCAxLCAwLCAwLCAwKSwKKyAgICAgICAgQlJBSUxMRSgwLCAwLCAwLCAwLCAwLCAxLCAwLCAwKSwKKyAgICAgICAgQlJBSUxMRSgwLCAwLCAwLCAwLCAwLCAwLCAxLCAwKSwKKyAgICAgICAgQlJBSUxMRSgwLCAwLCAwLCAwLCAwLCAwLCAwLCAxKQorICAgICAgKTsKKyAgICAgIG1ha2VJbnB1dFRhYmxlKCk7CisgIAorICAgICAgYnJhaWxsZV90aW1lb3V0KDEwMCk7CisKKyAgICAgIHJldHVybiAxOworICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIGxvZ01lc3NhZ2UoTE9HX0RFQlVHLCAiTGliYnJhaWxsZSBpbml0aWFsaXphdGlvbiBlcnJvcjogJXMiLCBicmFpbGxlX2dldGVycm9yKCkpOworICAgIH0KKyAgCisgIHJldHVybiAwOworfQorCitzdGF0aWMgdm9pZAorYnJsX2Rlc3RydWN0KEJyYWlsbGVEaXNwbGF5ICpicmwpCit7CisgIGJyYWlsbGVfY2xvc2UoKTsKK30KKworc3RhdGljIGludAorYnJsX3dyaXRlV2luZG93KEJyYWlsbGVEaXNwbGF5ICpicmwsIGNvbnN0IHdjaGFyX3QgKnRleHQpCit7CisgIGlmKHRleHQpCisgICAgeworICAgICAgY2hhciBieXRlc1ticmwtPnRleHRDb2x1bW5zXTsKKyAgICAgIGludCBpOworCisgICAgICBmb3IoaSA9IDA7IGkgPCBicmwtPnRleHRDb2x1bW5zOyArK2kpCisgICAgICAgIHsKKyAgICAgICAgICB3Y2hhcl90IGNoYXJhY3RlciA9IHRleHRbaV07CisgICAgICAgICAgYnl0ZXNbaV0gPSBpc3dMYXRpbjEoY2hhcmFjdGVyKT8gY2hhcmFjdGVyOiAnPyc7CisgICAgICAgIH0KKyAgICAgIGJyYWlsbGVfd3JpdGUoYnl0ZXMsIGJybC0+dGV4dENvbHVtbnMpOworCisgICAgICBpZihicmwtPmN1cnNvciAhPSBCUkxfTk9fQ1VSU09SKQorICAgICAgICB7CisgICAgICAgICAgYnJhaWxsZV9maWx0ZXIodHJhbnNsYXRlT3V0cHV0Q2VsbChnZXRTY3JlZW5DdXJzb3JEb3RzKCkpLCBicmwtPmN1cnNvcik7CisgICAgICAgIH0KKworICAgICAgYnJhaWxsZV9yZW5kZXIoKTsKKyAgICB9CisKKyAgcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQKK2JybF9yZWFkQ29tbWFuZChCcmFpbGxlRGlzcGxheSAqYnJsLCBLZXlUYWJsZUNvbW1hbmRDb250ZXh0IGNvbnRleHQpCit7CisgIGludCByZXMgPSBFT0Y7CisgIHNpZ25lZCBjaGFyIHN0YXR1czsKKyAgYnJsX2tleSBrZXk7CisKKyAgc3RhdHVzID0gYnJhaWxsZV9yZWFkKCZrZXkpOworICBpZihzdGF0dXMgPT0gLTEpCisgICAgeworICAgICAgbG9nTWVzc2FnZShMT0dfRVJSLCAiZXJyb3IgaW4gYnJhaWxsZV9yZWFkOiAlcyIsIGJyYWlsbGVfZ2V0ZXJyb3IoKSk7CisgICAgICByZXMgPSBCUkxfQ01EX1JFU1RBUlRCUkw7CisgICAgfQorICBlbHNlIGlmKHN0YXR1cykKKyAgICB7CisgICAgICBzd2l0Y2goa2V5LnR5cGUpCisJeworCWNhc2UgQlJMX05PTkU6CisJICBicmVhazsKKwljYXNlIEJSTF9DVVJTT1I6CisJICByZXMgPSBCUkxfQ01EX0JMSyhST1VURSkgKyBrZXkuY29kZTsKKwkgIGJyZWFrOworCWNhc2UgQlJMX0NNRDoKKwkgIHN3aXRjaChrZXkuY29kZSkKKwkgICAgeworCSAgICBjYXNlIEJSTEtfVVA6CisJICAgICAgcmVzID0gQlJMX0NNRF9LRVkoQ1VSU09SX1VQKTsKKwkgICAgICBicmVhazsKKwkgICAgY2FzZSBCUkxLX0RPV046CisJICAgICAgcmVzID0gQlJMX0NNRF9LRVkoQ1VSU09SX0RPV04pOworCSAgICAgIGJyZWFrOworCSAgICBjYXNlIEJSTEtfUklHSFQ6CisJICAgICAgcmVzID0gQlJMX0NNRF9LRVkoQ1VSU09SX1JJR0hUKTsKKwkgICAgICBicmVhazsKKwkgICAgY2FzZSBCUkxLX0xFRlQ6CisJICAgICAgcmVzID0gQlJMX0NNRF9LRVkoQ1VSU09SX0xFRlQpOworCSAgICAgIGJyZWFrOworCSAgICBjYXNlIEJSTEtfSU5TRVJUOgorCSAgICAgIHJlcyA9IEJSTF9DTURfS0VZKElOU0VSVCk7CisJICAgICAgYnJlYWs7CisJICAgIGNhc2UgQlJMS19IT01FOgorCSAgICAgIHJlcyA9IEJSTF9DTURfS0VZKEhPTUUpOworCSAgICAgIGJyZWFrOworCSAgICBjYXNlIEJSTEtfRU5EOgorCSAgICAgIHJlcyA9IEJSTF9DTURfS0VZKEVORCk7CisJICAgICAgYnJlYWs7CisJICAgIGNhc2UgQlJMS19QQUdFVVA6CisJICAgICAgcmVzID0gQlJMX0NNRF9LRVkoUEFHRV9VUCk7CisJICAgICAgYnJlYWs7CisJICAgIGNhc2UgQlJMS19QQUdFRE9XTjoKKwkgICAgICByZXMgPSBCUkxfQ01EX0tFWShQQUdFX0RPV04pOworCSAgICAgIGJyZWFrOworCSAgICBjYXNlIEJSTEtfQkFDS1dBUkQ6CisJICAgICAgcmVzID0gQlJMX0NNRF9GV0lOTFQ7CisJICAgICAgYnJlYWs7CisJICAgIGNhc2UgQlJMS19GT1JXQVJEOgorCSAgICAgIHJlcyA9IEJSTF9DTURfRldJTlJUOworCSAgICAgIGJyZWFrOworCSAgICBjYXNlIEJSTEtfQUJPVkU6CisJICAgICAgcmVzID0gQlJMX0NNRF9MTlVQOworCSAgICAgIGJyZWFrOworCSAgICBjYXNlIEJSTEtfQkVMT1c6CisJICAgICAgcmVzID0gQlJMX0NNRF9MTkROOworCSAgICAgIGJyZWFrOworCSAgICBkZWZhdWx0OgorCSAgICAgIGJyZWFrOworCSAgICB9CisJICBicmVhazsKKwljYXNlIEJSTF9LRVk6CisJICByZXMgPSBCUkxfQ01EX0JMSyhQQVNTRE9UUykgfCB0cmFuc2xhdGVJbnB1dENlbGwoa2V5LmJyYWlsbGUpOworCSAgYnJlYWs7CisJZGVmYXVsdDoKKyAgICAgICAgICBicmVhazsKKwl9CisgICAgfQorCisgIHJldHVybiByZXM7Cit9CmRpZmYgLS1naXQgYS9Ecml2ZXJzL0JyYWlsbGUvTG9nVGV4dC9ERVZFTE9QIGIvRHJpdmVycy9CcmFpbGxlL0xvZ1RleHQvREVWRUxPUApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYmU5YmU5Ci0tLSAvZGV2L251bGwKKysrIGIvRHJpdmVycy9CcmFpbGxlL0xvZ1RleHQvREVWRUxPUApAQCAtMCwwICsxLDEzMyBAQAorRmlsZTogUFJPVE9DT0wKK2J5IEhhbnMgU2Nob3UgPGJsaW5kQHNjaG91LmRrPgorCitHZW5lcmFsIGRlc2NyaXB0aW9uIG9mIExvZ1RleHQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoraHR0cDovL3d3dy5kaW5mLm9yZy90aXJlc2lhcy9FcXVpcG1lbnQvTm90ZXRha2Vycy5odG0KK1BlcnNvbmFsIGFpZCBmb3IgYnJhaWxsZSB1c2Vycy4gUGllem8tZWxlY3RyaWMsIDggZG90IG1hdHJpeCwgMzIgY2hhcmFjdGVyCiticmFpbGxlIGRpc3BsYXkgd2l0aCBhIGJyYWlsbGUga2V5Ym9hcmQuIEFsc28gcHJvdmlkZWQgd2l0aCBhIDMyIGNoYXJhY3RlcgorTENEIHRleHQgZGlzcGxheS4gQXZhaWxhYmxlIGluIHR3byB2ZXJzaW9uczogdHdvLWhhbmQgdmVyc2lvbiBoYXMgYSB0aWx0ZWQKK2tleWJvYXJkIGZvciBlYXN5IHBvc2l0aW9uaW5nIG9mIGhhbmRzOyBvbmUtaGFuZCBrZXlib2FyZCBpcyBkZXNpZ25lZCBmb3IKK29wZXJhdGlvbiBieSBlaXRoZXIgdGhlIHJpZ2h0IG9yIHRoZSBsZWZ0IGhhbmQuIEZ1bmN0aW9ucyBpbmNsdWRlIHJlYWRpbmcsCitlZGl0aW5nIGFuZCBzdG9yYWdlIG9mIHRleHQgYW5kIGEgY2xvY2suIFRleHQgc3RvcmFnZSBhcHByb3hpbWF0ZXMgMjAwCit0eXBld3JpdHRlbiBwYWdlcy4gRGF0YSBzdG9yYWdlOiA1MTJLQiBSQU0gKHdpdGggbGl0aGl1bSBiYXR0ZXJ5IGJhY2t1cCkgb2YKK3doaWNoIDMyOEtCIGlzIGZvciB0ZXh0IHN0b3JhZ2UsIDU2S0IgZm9yIHdvcmtpbmcgc3RvcmFnZSwgNTZLQiBmb3IKK3Rlcm1pbmFsIGJ1ZmZlciwgNTZLQiBmb3IgaW5wdXQvb3V0cHV0IGJ1ZmZlciBhbmQgMTZLQiBmb3Igc3lzdGVtLiBPbmUKK3N0YW5kYXJkIHBhcmFsbGVsIHBvcnQgYW5kIDIgUlMyMzItRSBjb21wYXRpYmxlIHBvcnRzLiBQb3dlciBzdXBwbHkgYnkKK21haW5zIGFkYXB0b3IgMjIwLzEyViBBQyArLy0gMTAlLCAyMFZBIG9yIGJ5IGJ1aWx0LWluIE5pQ2FkIHJlY2hhcmdlYWJsZQorYmF0dGVyaWVzLiBMZW5ndGg6IDM4MG1tIFdpZHRoOiAxODBtbSBIZWlnaHQ6IDY1bW0gV2VpZ2h0OiAyLjdrZworCitUZWNoaW5hbCBkZXNjcmlwdGlvbgorLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1RoZSBMb2dUZXh0IGlzIGFsbW9zdCBsaWtlIGEgVlQtMTAwIHRlcm1pbmFsIHJlZ2FyZGluZyBmdW5jdGlvbmFsaXR5LgorSXQgaGFzIGFuIGludGVybmFsIHNjcmVlbiBidWZmZXIgb2YgODB4MjUgY2hhcmFjdGVycyBhbmQgaXQgaXMgdGhlbgorb25seSBuZWNjZXNhcnkgdG8gdXBkYXRlIHRoZSBpbnRlcm5hbCBzY3JlZW4gd2hlbiB0aGVyZSBpcyBjaGFuZ2VzLgorVGhlIHVzZXIgY2FuIG1vdmUgYXJvdW5kIG9uIHRoZSBpbnRlcm5hbCBzY3JlZW4gd2l0aG91dCBjb21tdW5pY2F0aW5nCit3aXRoIHRoZSBjb21wdXRlci4gVGhlIExvZ1RleHQgZG8gcmVxdWVzdCB1cGRhdGVzIG9mIHRoZSBzcGVjZWZpYworbGluZSBidXQgaXQgaXMgbm90IG5lY2Nlc2FyeSB0byB1cGRhdGUgYSBsaW5lIGlmIGl0IGhhcyBub3QgY2hhbmdlZC4KK1doZW4gdGhlIExvZ1RleHQgaXMgaW4gY3Vyc29yIHRyYWNraW5nIG1vZGUgYW5kIHRoZSB1c2VyIHByZXNzZXMgb25lCitvZiB0aGUgYXJyb3cga2V5cywgdGhlIExvZ1RleHQgd2lsbCBmaXJzdCByZXF1ZXN0IGFuIHVwZGF0ZSBvZiB0aGUKK3NwZWNlZmljIGxpbmUgYW5kIHRoZW4gYSByZXF1ZXN0IGZvciB1cGRhdGUgb2YgdGhlIGxpbmUgb24gdGhlIGNvbXB1dGVyCitzY3JlZW4gd2hpY2ggaG9sZCB0aGUgY3Vyc29yLiBBIHNlcXVlbmNlIGNvdWxkIGxvb2sgbGlrZSAweGZmIDB4MDMgMHhmZgorMHgwMCB3aGVuIGluIGN1cnNvciB0cmFja2luZyBtb2RlLgorCitEb3Qga2V5IHN0cm9rZXMgYXJlIHNlbmQgYXMgcGxhaW4gQVNDSUkuIFByZXNzaW5nIGRvdC0xIHdpbGwganVzdCBzZW5kCitBU0NJSSAnYScgMHg2MSBhbmQgZG90LTE3IHdpbGwgc2VuZCBBU0NJSSAnQScgMHg0MS4gQ3Vyc29yIG1vdmVtZW50CitrZXlzIGlzIGVzY2FwZWQgd2l0aCAweDAwIGFuZCB0aGUgZm9sbG93aW5nIGNoYXJhY3RlciBpcyBzaW1pbGFyIHRvCitWVC0xMDAgY3Vyc29yIG1vdmVtZW50IGNvZGVzLiBBbiBhcnJvdyB1cCB3aWxsIHNlbmQgdGhlIHNlcXVlbmNlCisweDAwIDB4NDguIEFzIDB4MDAgaXMgdXNlZCBmb3IgZXNjYXBpbmcgY3Vyc29yIG1vdmVtZW50cyBhbmQgMHhmZiBpcwordXNlZCBmb3IgcmVxdWVzdGluZyB1cGRhdGVzLCB0aGVzZSB0d28gY29kZXMgY2FuIG5vdCBiZSBzZW5kIGZyb20gdGhlCitMb2dUZXh0LiBUaGlzIGdpdmVzIHRoYXQgdGhlIExvZ1RleHQgY2FuIHNlbmQgMjU0IGRpZmZlcmVudCBjaGFyY2F0ZXJzLgorVGhlIHRyYW5zbGF0aW9uIHRhYmxlIHVzZWQgaXMgY29kZXBhZ2UgWFhYIGFuZCBjYW4gdGhlbiBwcm9kdWNlIHNpeAorZGFuaXNoIGxldHRlcnMuIFRoZSByZXN0IG9mIHRoZSB0YWJsZSBpcyB1c2VkIGZvciBhYmJyZXZpYXRpb25zLgorCitEYXRhIGZyb20gdGhlIGNvbXB1dGVyIHRvIExvZ1RleHQgaXMgc2VuZCBhcyBhIHByb3RvY29sIHdpdGhvdXQgQUNLLgorQSBmdWxsIGRlc2NyaXB0aW9uIG9mIHRoZSBjb21wdXRlciB0byBMb2dUZXh0IHByb3RvY29sIGNhbiBiZSBmb3VuZAoraW4gdGhlIHByb3RvY29sIHNlY3Rpb24uCisKK0lmIHRoZSB1c2VyIGRvZXMgbm90IHByZXNzIGFueSBrZXlzIHRoZXJlIHdpbGwgYmUgbm8gY29tbXVuaWNhdGlvbgorZnJvbSB0aGUgTG9nVGV4dCB0byB0aGUgY29tcHV0ZXIuIFRoZSBkcml2ZXIgc2hvdWxkIGRldGVjdCBhbnkgY2hhbmdlcworb24gdGhlIGNvbXB1dGVyIHNjcmVlbiBhbmQgc2VuZCBhbiB1cGRhdGUgaWYgdGhlIGxpbmUgdGhlIHVzZXIgaXMKK2xvb2tpbmcgaGFzIGNoYW5nZWQuIFRoZSBjb21wdXRlciB3aWxsIGtub3cgd2hhdCB0aGUgY3VycmVudGxpbmUgaXMKK2J5IHNhdmluZyB0aGUgbGFzdCBhYnNvbHV0ZSBsaW5lIHdoaWNoIHdhcyByZXF1ZXN0ZWQgZnJvbSB0aGUgTG9nVGV4dC4KK1RoYXQgaXMsIGlmIHRoZSB1c2VyIHJlcXVlc3RlZCBsaW5lIDQgYW5kIGlzIGluIGN1cnNvciB0cmFja2luZyBtb2RlCit0aGUgc2VxdWVuY2Ugd291bGQgYmUgMHhmZiAweDA0IDB4ZmYgMHgwMC4gSW4gdGhlIGNhc2UgdGhlIGNvbXB1dGVyCit3aWxsIGtub3cgdGhhdCB0aGUgdXNlciBpcyBsb29raW5nIGF0IGxpbmUgNCBhbmQgdGhhdCB0aGUgTG9nVGV4dAorc2hvdWxkIGhhdmUgYW4gdXBkYXRlIGlmIGxpbmUgNCBjaGFuZ2VzLiBJdCBpcyBub3QgbmVjY2VzYXJ5IHRvIHVwZGF0ZQorbGluZXMgZnJvbSB0aGUgY29tcHV0ZXIgc2NyZWVuIGlmIHRoZSB1c2VyIGlzIG5vdCBsb29raW5nIGF0IHRoZW0uCitJZiB0aGUgY3Vyc29yIG1vdmVzIGFuIHVwZGF0ZSBzaG91bGQgYmUgc2VuZC4KKworSWYgYSB3cm9uZyBwcm90b2NvbCBwYWNrYWdlIGlzIHNlbmQgdG8gTG9ndGV4dCBpdCB3aWxsIGdvIGludG8gYW4gZXJyb3IKK21vZGUgYW5kIHN0b3AgcmVjZWl2aW5nLgorCitDb21tdW5pY2F0aW9uCistLS0tLS0tLS0tLS0tCitUaGUgUlMtMjMyIGNvbW11bmljYXRpb24gaXMgZml4ZWQgdG8gOTYwMCBiYXVkIG4gOCAxLgorCitMb2d0ZXh0IHByb3RvY29sCistLS0tLS0tLS0tLS0tLS0tCisKKzEuIFJlcXVlc3QgZnJvbSBMb2d0ZXh0CisKKzEuMS4gVXBkYXRlIGEgbGluZTogPHN0YXJ0PjxsaW5lPgorIHN0YXJ0OiBzdGFydCBjb2RlIDB4RkYKKyAKKyBsaW5lOiBsaW5lIG51bWJlciB0byB1cGRhdGUKKyAgIDB4MDEgPD0gbGluZSAweDE5CisKKyBFeGFtcGxlOgorICBVcGRhdGUgb2YgbGluZSA0OiAweGZmIDB4MDQKKworMS4yLiBVcGRhdGUgY3Vyc29yIGxpbmU6IDxzdGFydD48MD4KKyBzdGFydDogc3RhcnQgY29kZSAweEZGCisKKyAwOiBjb2RlIDB4MDAKKworIFRoZSBzZXF1ZW5jZSBpcyBzZW5kIGF0IHN0YXJ0IHVwIG9mIHRoZSBMb2dUZXh0IGFuZAorIHdoZW4gaW4gY3Vyc29yIHRyYWNraW5nIG1vZGUuCisKKyBFeGFtcGxlOgorICBVcGRhdGUgY3VycmVudCBsaW5lOiAweGZmIDB4MDAKKworMi4gQW5zd2VyIGZyb20gY29tcHV0ZXIKKworMi4xLiBQcm90b2NvbDogPHN0YXJ0PjxsaW5lPjxjdXJzb3I+PGNvbHVtbj48Y291bnQ+PHRleHQ+Cisgc3RhcnQ6IHN0YXJ0IGNvZGUgMHhGRi4KKworIGxpbmU6IGxpbmUgbnVtYmVyIG9uIHNjcmVlbi4KKyAgIDB4MDEgPD0gbGluZSAweDE5CisKKyBjdXJzb3I6IGN1cnNvciBwb3NpdGlvbiBvbiB0aGlzIGxpbmUuCisgICAweDAxIDw9IGN1cnNvciA8PSAweDUwCisgU3BlY2lhbCBjdXJzb3IgPT0gMHgwMCwgbm8gY3Vyc29yIG9uIHRoaXMgbGluZS4KKworIGNvbHVtbjogdGV4dCBzdGFydHMgZnJvbSB0aGlzIGNvbHVtbi4KKyAgIDB4MDEgPD0gY29sdW1uIDw9IDB4NTAKKworIGNvdW50OiBudW1iZXIgb2YgYnl0ZXMgaW4gdGV4dC4KKyAgIDB4MDAgPD0gY291bnQgPD0gMHg1MAorCisgdGV4dDogQVNDSUkgY2hhcmFjdGVycy4gQW55IGNoYXJhY3RlciBleGNlcHQgMHhGRi4KKyAgSXQgaXMgbm90IHBvc3NpYmxlIHRvIHR1cm4gb24gYWxsIGRvdHMgKDB4RkYpLgorCisgRXhhbXBsZToKKyAgIDB4ZmYgMHgwMSAweDA0IDB4MDEgMHgwMyAweDYxIDB4NjIgMHg2MworICAgd2lsbCBkaXNwbGF5ICdhYmMnIGF0IHRvcCBsZWZ0IHdpdGggdGhlIGN1cnNvciBhdCB0aGUgZW5kLgorCisyLjIuIEF1dG9tYXRpYyBjdXJzb3IgdHJhY2tpbmcuCitJZiB0aGUgbW9kZSBpcyBjdXJyZW50bHkgaW4gY3Vyc29yIHRyYWNraW5nIGFuZCB0aGUgY3Vyc29yIG1vdmVzCit0byBhbm90aGVyIGxpbmUsIHRoZSBjb21wdXRlciBzaG91bGQgc2VuZCBhIG5ldyB1cGRhdGVkIGxpbmUgdG8KK0xvZ1RleHQuIElmIHRoZSBjdXJzb3IgbW92ZXMgd2l0aGluIHRoZSBzYW1lIGxpbmUgdGhlIGNvbXB1dGVyIHNlbmRzCithbiB1cGRhdGUgb2YgdGhlIGN1cnNvciBwb3NpdGlvbi4KKworCitMb2d0ZXh0IG1hbnVmYWN0b3IKKy0tLS0tLS0tLS0tLS0tLS0tLQorIFRhY3RpbG9nCisgUm9za2lsZGV2ZWogMTUKKyBESy03NDQxIEJvcmRpbmcKKyBEZW5tYXJrCisKKyBDb250YWN0OiBQb3VsIEVyaWsgU2tvdgorIFBob25lOiArNDUgODYgODYgMjAgODgKKyBGYXg6ICs0NSA4NiA4NiAyMSA4OApkaWZmIC0tZ2l0IGEvRHJpdmVycy9CcmFpbGxlL0xvZ1RleHQvTWFrZWZpbGUuaW4gYi9Ecml2ZXJzL0JyYWlsbGUvTG9nVGV4dC9NYWtlZmlsZS5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYzIxZmIzCi0tLSAvZGV2L251bGwKKysrIGIvRHJpdmVycy9CcmFpbGxlL0xvZ1RleHQvTWFrZWZpbGUuaW4KQEAgLTAsMCArMSwyOCBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorIyAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyMKKyMgQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorIworIyBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorIworIyBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisjIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyMgbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisjCisjIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK0RSSVZFUl9DT0RFID0gbHQKK0RSSVZFUl9OQU1FID0gTG9nVGV4dAorRFJJVkVSX1VTQUdFID0gMzIKK0RSSVZFUl9WRVJTSU9OID0gCitEUklWRVJfREVWRUxPUEVSUyA9IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4KK2luY2x1ZGUgJChTUkNfVE9QKWJyYWlsbGUubWsKKworYnJhaWxsZS4kTzoKKwkkKENDKSAkKEJSTF9DRkxBR1MpIC1jICQoU1JDX0RJUikvYnJhaWxsZS5jCisKZGlmZiAtLWdpdCBhL0RyaXZlcnMvQnJhaWxsZS9Mb2dUZXh0L1BJQ1RVUkUgYi9Ecml2ZXJzL0JyYWlsbGUvTG9nVGV4dC9QSUNUVVJFCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMxZmU1NGIKLS0tIC9kZXYvbnVsbAorKysgYi9Ecml2ZXJzL0JyYWlsbGUvTG9nVGV4dC9QSUNUVVJFCkBAIC0wLDAgKzEsMjcgQEAKKyAgIExDRExDRExDRExDRExDRExDRExDRAorICAgICAgICAgMzIxICAgNDU2CisgICAgICBDNyAgICAgdSAgICAgOEEKKyAgICAgICAgICAgIGxqcgorICAgICAgICAgICAgIGQKKyAgICAgICAgICAgTCAgIFIKKyBlIEJSQUlMTEVCUkFJTExFQlJBSUxMRSBlCisKK0xDRDogTENEIGRpc3BsYXkKKzE6IGRvdCAxCisyOiBkb3QgMgorMzogZG90IDMKKzQ6IGRvdCA0Cis1OiBkb3QgNQorNjogZG90IDYKKzc6IGRvdCA3Cis4OiBkb3QgOAorQzogQ29udHJvbAorQTogQWx0Cit1OiBjdXJzb3IgdXAKK2w6IGN1cnNvciBsZWZ0CityOiBjdXJzb3IgcmlnaHQKK2Q6IGN1cnNvciBkb3duCitqOiBqdW1wIChJJ20gbm90IHN1cmUgd2hhdCBpdCBkb2VzKQorTDogTGVmdCwgSSBndWVzcyB0aGlzIGlzIGludGVybmFsIGxlZnQKK1I6IFJpZ2h0LCBJIGd1ZXNzIHRoaXMgaXMgaW50ZXJuYWwgcmlnaHQKK2U6IEVudGVyIGtleSAob25lIGluIGJvdGggc2lkZXMgb2YgdGhlIGJyYWlsbGUpCmRpZmYgLS1naXQgYS9Ecml2ZXJzL0JyYWlsbGUvTG9nVGV4dC9QUk9UT0NPTCBiL0RyaXZlcnMvQnJhaWxsZS9Mb2dUZXh0L1BST1RPQ09MCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQxOGViMmYKLS0tIC9kZXYvbnVsbAorKysgYi9Ecml2ZXJzL0JyYWlsbGUvTG9nVGV4dC9QUk9UT0NPTApAQCAtMCwwICsxLDcyIEBACitGaWxlOiBEZXZlbG9wCitieSBIYW5zIFNjaG91CisKK0xvZ3RleHQgbWFudWZhY3RvcjoKKyBUYWN0aWxvZworIFJvc2tpbGRldmVqIDE1CisgREstNzQ0MSBCb3JkaW5nCisKKyBDb250YWN0OiBQb3VsIEVyaWsgU2tvdgorIFBob25lOiArNDUgODYgODYgMjAgODgKKyBGYXg6ICs0NSA4NiA4NiAyMSA4OAorCis5NjAwIGJhdWQKKworTG9ndGV4dCBwcm90b2NvbAorLS0tLS0tLS0tLS0tLS0tLQorCisxLiBSZXF1ZXN0IGZyb20gTG9ndGV4dAorCisxLjEuIFVwZGF0ZSBhIGxpbmU6IDxzdGFydD48bGluZT4KKyBzdGFydDogc3RhcnQgY29kZSAweEZGCisgCisgbGluZTogbGluZSBudW1iZXIgdG8gdXBkYXRlCisgICAweDAxIDw9IGxpbmUgMHgxOQord2hlbiBnb2luZyBpbnRvIHRlcm1pbmFsCisKKzEuMi4gVXBkYXRlIGN1cnNvciBsaW5lOiA8c3RhcnQ+PDA+Cisgc3RhcnQ6IHN0YXJ0IGNvZGUgMHhGRgorCisgMDogY29kZSAweDAwCisKKzIuIEFuc3dlciBmcm9tIGNvbXB1dGVyCisKKzIuMS4gUHJvdG9jb2w6IDxzdGFydD48bGluZT48Y3Vyc29yPjxjb2x1bW4+PGNvdW50Pjx0ZXh0PgorIHN0YXJ0OiBzdGFydCBjb2RlIDB4RkYuCisKKyBsaW5lOiBsaW5lIG51bWJlciBvbiBzY3JlZW4uCisgICAweDAxIDw9IGxpbmUgMHgxOQorCisgY3Vyc29yOiBjdXJzb3IgcG9zaXRpb24gb24gdGhpcyBsaW5lLgorICAgMHgwMSA8PSBjdXJzb3IgPD0gMHg1MAorIFNwZWNpYWwgY3Vyc29yID09IDB4MDAsIG5vIGN1cnNvciBvbiB0aGlzIGxpbmUuCisKKyBjb2x1bW46IHRleHQgc3RhcnRzIGZyb20gdGhpcyBjb2x1bW4uCisgICAweDAxIDw9IGNvbHVtbiA8PSAweDUwCisKKyBjb3VudDogbnVtYmVyIG9mIGJ5dGVzIGluIHRleHQuCisgICAweDAwIDw9IGNvdW50IDw9IDB4NTAKKworIHRleHQ6IEFTQ0lJIGNoYXJhY3RlcnMuIEFueSBjaGFyYWN0ZXIgZXhjZXB0IDB4RkYuCisgIEl0IGlzIG5vdCBwb3NzaWJsZSB0byB0dXJuIG9uIGFsbCBkb3RzICgweEZGKS4KKworCisyLjIuIEF1dG9tYXRpYyBjdXJzb3IgdHJhY2tpbmcuCitJZiB0aGUgbW9kZSBpcyBjdXJyZW50bHkgaW4gY3Vyc29yIHRyYWNraW5nIGFuZCB0aGUKK2N1cnNvciBtb3ZlcyB0byBhbm90aGVyIGxpbmUsIHRoZSBjb21wdXRlciBzaG91bGQgc2VuZAorYSBuZXcgdXBkYXRlZCBsaW5lIHRvIExvZ3RleHQuIElmIHRoZSBjdXJzb3IgbW92ZXMKK3dpdGhpbiB0aGUgc2FtZSBsaW5lIHRoZSBjb21wdXRlciBzZW5kcyBhbiB1cGRhdGUgb2YKK3RoZSBjdXJzb3IgcG9zaXRpb24uCisKK1JlZ2FyZGxlc3Mgb2YgdGhlIG1vZGUsIHRoZSBjb21wdXRlciBhbHdheXMgc2VuZCBhbgordXBkYXRlZCBsaW5lIGlmIHRoZSBjb250ZW50IGhhcyBjaGFuZ2VkLgorCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0lmIGEgd3JvbmcgcHJvdG9jb2wgcGFja2FnZSBpcyBzZW5kCit0aGUgTG9ndGV4dCB3aWxsIGdvIGludG8gYW4gZXJyb3IgbW9kZQorYW5kIHN0b3AgcmVjZWl2aW5nLgorCitLZXkgcHJlc3NlZCBvbiBMb2d0ZXh0IGNvbWVzIGFzIEFOU0kgY29kZXMuCitQcmVzcyBkb3QgMSBnaXZlcyAnYScgYW5kIDEyIGdpdmVzICdiJy4KK0N1cnNvciBtb3ZlbWVudHMgY29tZXMgYXMgQU5TSSBzdGFydGluZyB3aXRoIDB4MDAuCmRpZmYgLS1naXQgYS9Ecml2ZXJzL0JyYWlsbGUvTG9nVGV4dC9SRUFETUUgYi9Ecml2ZXJzL0JyYWlsbGUvTG9nVGV4dC9SRUFETUUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzQ2MTVmNwotLS0gL2Rldi9udWxsCisrKyBiL0RyaXZlcnMvQnJhaWxsZS9Mb2dUZXh0L1JFQURNRQpAQCAtMCwwICsxLDEzIEBACitUaGlzIGRpcmVjdG9yeSBjb250YWlucyB0aGUgQlJMVFRZIGRyaXZlciBmb3IgdGhlIExvZ1RleHQsIHdoaWNoIGlzCittYW51ZmFjdHVyZWQgYnkgVGFjdGlsb2cgb2YgRGVubWFyay4gSXQgd2FzIGltcGxlbWVudGVkLCBhbmQgaXMgYmVpbmcKK21haW50YWluZWQsIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uIFRoYW5rcyB0byBIYW5zIFNjaG91Cis8Y2hsb3JAc2Nob3UuZGs+IGZvciBoaXMgaGVscCBhbmQgYWR2aWNlLCBhbmQgdG8gVGhvbWFzIFP4cmVuc2VuCis8dGhvbWFzc29lcmVuc0B3YW5hZG9vLmRrPiBmb3IgdGVzdGluZy4gQXMgYSBjb21wb25lbnQgb2YgQlJMVFRZLCB0aGlzIGRyaXZlcgoraXMgcmVsZWFzZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgUHVibGljIExpY2Vuc2UuCisKK0NvbnRhY3Q6IFBvdWwgRXJpayBTa292CisgIFBob25lOiArNDUgODYgODYgMjAgODgKKyAgICBGYXg6ICs0NSA4NiA4NiAyMSA4OAorQWRkcmVzczogVGFjdGlsb2cKKwkgUm9za2lsZGV2ZWogMTUKKwkgREstNzQ0MSBCb3JkaW5nCmRpZmYgLS1naXQgYS9Ecml2ZXJzL0JyYWlsbGUvTG9nVGV4dC9icmFpbGxlLmMgYi9Ecml2ZXJzL0JyYWlsbGUvTG9nVGV4dC9icmFpbGxlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWNlMjVjZQotLS0gL2Rldi9udWxsCisrKyBiL0RyaXZlcnMvQnJhaWxsZS9Mb2dUZXh0L2JyYWlsbGUuYwpAQCAtMCwwICsxLDYzMSBAQAorLyoKKyAqIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisgKiAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisgKgorICogQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKKy8qIExvZ1RleHQvYnJhaWxsZS5jIC0gQnJhaWxsZSBkaXNwbGF5IGxpYnJhcnkKKyAqIEZvciBUYWN0aWxvZydzIExvZ1RleHQKKyAqIEF1dGhvcjogRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPgorICovCisKKyNpbmNsdWRlICJwcm9sb2d1ZS5oIgorCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxjdHlwZS5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8ZmNudGwuaD4KKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorCisjaW5jbHVkZSAibG9nLmgiCisjaW5jbHVkZSAiZmlsZS5oIgorI2luY2x1ZGUgImRldmljZS5oIgorI2luY2x1ZGUgImFzeW5jX3dhaXQuaCIKKyNpbmNsdWRlICJhc2NpaS5oIgorCisjZGVmaW5lIEJSTF9TVEFUVVNfRklFTERTIHNmR2VuZXJpYworI2RlZmluZSBCUkxfSEFWRV9TVEFUVVNfQ0VMTFMKKyNpbmNsdWRlICJicmxfZHJpdmVyLmgiCisjaW5jbHVkZSAiYnJhaWxsZS5oIgorI2luY2x1ZGUgImlvX3NlcmlhbC5oIgorCitzdGF0aWMgU2VyaWFsRGV2aWNlICpzZXJpYWxEZXZpY2UgPSBOVUxMOworCisjZGVmaW5lIHNjcmVlbkhlaWdodCAyNQorI2RlZmluZSBzY3JlZW5XaWR0aCA4MAordHlwZWRlZiB1bnNpZ25lZCBjaGFyIFNjcmVlbkltYWdlW3NjcmVlbkhlaWdodF1bc2NyZWVuV2lkdGhdOworc3RhdGljIFNjcmVlbkltYWdlIHNvdXJjZUltYWdlOworc3RhdGljIFNjcmVlbkltYWdlIHRhcmdldEltYWdlOworCitzdGF0aWMgY29uc3QgY2hhciAqZG93bmxvYWRQYXRoID0gImxvZ3RleHQtZG93bmxvYWQiOworCit0eXBlZGVmIGVudW0geworICAgREVWX09GRkxJTkUsCisgICBERVZfT05MSU5FLAorICAgREVWX1JFQURZCit9IERldmljZVN0YXR1czsKK3N0YXRpYyBEZXZpY2VTdGF0dXMgZGV2aWNlU3RhdHVzOworCitzdGF0aWMgS2V5VGFibGVDb21tYW5kQ29udGV4dCBjdXJyZW50Q29udGV4dDsKK3N0YXRpYyB1bnNpZ25lZCBjaGFyIGN1cnJlbnRMaW5lOworc3RhdGljIHVuc2lnbmVkIGNoYXIgY3Vyc29yUm93Oworc3RhdGljIHVuc2lnbmVkIGNoYXIgY3Vyc29yQ29sdW1uOworCisjaWZuZGVmIF9fTUlOR1czMl9fCitzdGF0aWMgaW50CittYWtlRmlmbyAoY29uc3QgY2hhciAqcGF0aCwgbW9kZV90IG1vZGUpIHsKKyAgIHN0cnVjdCBzdGF0IHN0YXR1czsKKyAgIGlmIChsc3RhdChwYXRoLCAmc3RhdHVzKSAhPSAtMSkgeworICAgICAgaWYgKFNfSVNGSUZPKHN0YXR1cy5zdF9tb2RlKSkgcmV0dXJuIDE7CisgICAgICBsb2dNZXNzYWdlKExPR19FUlIsICJEb3dubG9hZCBvYmplY3Qgbm90IGEgRklGTzogJXMiLCBwYXRoKTsKKyAgIH0gZWxzZSBpZiAoZXJybm8gPT0gRU5PRU5UKSB7CisgICAgICBsb2NrVW1hc2soKTsKKyAgICAgIG1vZGVfdCBtYXNrID0gdW1hc2soMCk7CisgICAgICBpbnQgcmVzdWx0ID0gbWtmaWZvKHBhdGgsIG1vZGUpOworICAgICAgaW50IGVycm9yID0gZXJybm87CisgICAgICB1bWFzayhtYXNrKTsKKyAgICAgIHVubG9ja1VtYXNrKCk7CisKKyAgICAgIGlmIChyZXN1bHQgIT0gLTEpIHJldHVybiAxOworICAgICAgZXJybm8gPSBlcnJvcjsKKyAgICAgIGxvZ1N5c3RlbUVycm9yKCJEb3dubG9hZCBGSUZPIGNyZWF0aW9uIik7CisgICB9CisgICByZXR1cm4gMDsKK30KKyNlbmRpZiAvKiBfX01JTkdXMzJfXyAqLworCitzdGF0aWMgaW50CittYWtlRG93bmxvYWRGaWZvICh2b2lkKSB7CisjaWZkZWYgX19NSU5HVzMyX18KKyAgIHJldHVybiAwOworI2Vsc2UgLyogX19NSU5HVzMyX18gKi8KKyAgIHJldHVybiBtYWtlRmlmbyhkb3dubG9hZFBhdGgsIFNfSVJVU1J8U19JV1VTUnxTX0lXR1JQfFNfSVdPVEgpOworI2VuZGlmIC8qIF9fTUlOR1czMl9fICovCit9CisKK3N0YXRpYyBpbnQKK2JybF9jb25zdHJ1Y3QgKEJyYWlsbGVEaXNwbGF5ICpicmwsIGNoYXIgKipwYXJhbWV0ZXJzLCBjb25zdCBjaGFyICpkZXZpY2UpIHsKKyAgIHsKKyAgICAgIHN0YXRpYyBUcmFuc2xhdGlvblRhYmxlIG91dHB1dFRhYmxlID0geworI2luY2x1ZGUgImJybC1vdXQuaCIKKyAgICAgIH07CisKKyAgICAgIHNldE91dHB1dFRhYmxlKG91dHB1dFRhYmxlKTsKKyAgICAgIG1ha2VJbnB1dFRhYmxlKCk7CisKKyAgICAgIHsKKyAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgYnl0ZSA9IDBYRkY7CisKKyAgICAgICAgIGlmIChtZW1jaHIob3V0cHV0VGFibGUsIGJ5dGUsIHNpemVvZihvdXRwdXRUYWJsZSkpKSB7CisgICAgICAgICAgICBvdXRwdXRUYWJsZVt0cmFuc2xhdGVJbnB1dENlbGwoYnl0ZSldID0gQVNDSUlfU1VCOworICAgICAgICAgfQorICAgICAgfQorICAgfQorCisgICBpZiAoIWlzU2VyaWFsRGV2aWNlSWRlbnRpZmllcigmZGV2aWNlKSkgeworICAgICAgdW5zdXBwb3J0ZWREZXZpY2VJZGVudGlmaWVyKGRldmljZSk7CisgICAgICByZXR1cm4gMDsKKyAgIH0KKworICAgbWFrZURvd25sb2FkRmlmbygpOworICAgaWYgKChzZXJpYWxEZXZpY2UgPSBzZXJpYWxPcGVuRGV2aWNlKGRldmljZSkpKSB7CisgICAgICBpZiAoc2VyaWFsUmVzdGFydERldmljZShzZXJpYWxEZXZpY2UsIDk2MDApKSB7CisgICAgICAgICBicmwtPnRleHRSb3dzID0gc2NyZWVuSGVpZ2h0OworICAgICAgICAgYnJsLT50ZXh0Q29sdW1ucyA9IHNjcmVlbldpZHRoOworICAgICAgICAgYnJsLT5idWZmZXIgPSAmc291cmNlSW1hZ2VbMF1bMF07CisgICAgICAgICBtZW1zZXQoc291cmNlSW1hZ2UsIDAsIHNpemVvZihzb3VyY2VJbWFnZSkpOworICAgICAgICAgZGV2aWNlU3RhdHVzID0gREVWX09OTElORTsKKyAgICAgICAgIHJldHVybiAxOworICAgICAgfQorICAgICAgc2VyaWFsQ2xvc2VEZXZpY2Uoc2VyaWFsRGV2aWNlKTsKKyAgICAgIHNlcmlhbERldmljZSA9IE5VTEw7CisgICB9CisgICByZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQKK2JybF9kZXN0cnVjdCAoQnJhaWxsZURpc3BsYXkgKmJybCkgeworICAgc2VyaWFsQ2xvc2VEZXZpY2Uoc2VyaWFsRGV2aWNlKTsKKyAgIHNlcmlhbERldmljZSA9IE5VTEw7Cit9CisKK3N0YXRpYyBpbnQKK2NoZWNrRGF0YSAoY29uc3QgdW5zaWduZWQgY2hhciAqZGF0YSwgdW5zaWduZWQgaW50IGxlbmd0aCkgeworICAgaWYgKChsZW5ndGggPCA1KSB8fCAobGVuZ3RoICE9IChkYXRhWzRdICsgNSkpKSB7CisgICAgICBsb2dNZXNzYWdlKExPR19FUlIsICJCYWQgbGVuZ3RoOiAlZCIsIGxlbmd0aCk7CisgICB9IGVsc2UgaWYgKGRhdGFbMF0gIT0gMjU1KSB7CisgICAgICBsb2dNZXNzYWdlKExPR19FUlIsICJCYWQgaGVhZGVyOiAlZCIsIGRhdGFbMF0pOworICAgfSBlbHNlIGlmICgoZGF0YVsxXSA8IDEpIHx8IChkYXRhWzFdID4gc2NyZWVuSGVpZ2h0KSkgeworICAgICAgbG9nTWVzc2FnZShMT0dfRVJSLCAiQmFkIGxpbmU6ICVkIiwgZGF0YVsxXSk7CisgICB9IGVsc2UgaWYgKGRhdGFbMl0gPiBzY3JlZW5XaWR0aCkgeworICAgICAgbG9nTWVzc2FnZShMT0dfRVJSLCAiQmFkIGN1cnNvcjogJWQiLCBkYXRhWzJdKTsKKyAgIH0gZWxzZSBpZiAoKGRhdGFbM10gPCAxKSB8fCAoZGF0YVszXSA+IHNjcmVlbldpZHRoKSkgeworICAgICAgbG9nTWVzc2FnZShMT0dfRVJSLCAiQmFkIGNvbHVtbjogJWQiLCBkYXRhWzNdKTsKKyAgIH0gZWxzZSBpZiAoZGF0YVs0XSA+IChzY3JlZW5XaWR0aCAtIChkYXRhWzNdIC0gMSkpKSB7CisgICAgICBsb2dNZXNzYWdlKExPR19FUlIsICJCYWQgY291bnQ6ICVkIiwgZGF0YVs0XSk7CisgICB9IGVsc2UgeworICAgICAgcmV0dXJuIDE7CisgICB9CisgICByZXR1cm4gMDsKK30KKworc3RhdGljIGludAorc2VuZEJ5dGVzIChjb25zdCB1bnNpZ25lZCBjaGFyICpieXRlcywgc2l6ZV90IGNvdW50KSB7CisgICBpZiAoc2VyaWFsV3JpdGVEYXRhKHNlcmlhbERldmljZSwgYnl0ZXMsIGNvdW50KSA9PSAtMSkgeworICAgICAgbG9nU3lzdGVtRXJyb3IoIkxvZ1RleHQgd3JpdGUiKTsKKyAgICAgIHJldHVybiAwOworICAgfQorICAgcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQKK3NlbmREYXRhICh1bnNpZ25lZCBjaGFyIGxpbmUsIHVuc2lnbmVkIGNoYXIgY29sdW1uLCB1bnNpZ25lZCBjaGFyIGNvdW50KSB7CisgICB1bnNpZ25lZCBjaGFyIGRhdGFbNSArIGNvdW50XTsKKyAgIHVuc2lnbmVkIGNoYXIgKnRhcmdldCA9IGRhdGE7CisgICB1bnNpZ25lZCBjaGFyICpzb3VyY2UgPSAmdGFyZ2V0SW1hZ2VbbGluZV1bY29sdW1uXTsKKyAgICp0YXJnZXQrKyA9IDBYRkY7CisgICAqdGFyZ2V0KysgPSBsaW5lICsgMTsKKyAgICp0YXJnZXQrKyA9IChsaW5lID09IGN1cnNvclJvdyk/IGN1cnNvckNvbHVtbisxOiAwOworICAgKnRhcmdldCsrID0gY29sdW1uICsgMTsKKyAgICp0YXJnZXQrKyA9IGNvdW50OworICAgbG9nQnl0ZXMoTE9HX0RFQlVHLCAiT3V0cHV0IGRvdHMiLCBzb3VyY2UsIGNvdW50KTsKKyAgIHRhcmdldCA9IHRyYW5zbGF0ZU91dHB1dENlbGxzKHRhcmdldCwgc291cmNlLCBjb3VudCk7CisgICBjb3VudCA9IHRhcmdldCAtIGRhdGE7CisgICBsb2dCeXRlcyhMT0dfREVCVUcsICJMb2dUZXh0IHdyaXRlIiwgZGF0YSwgY291bnQpOworICAgaWYgKGNoZWNrRGF0YShkYXRhLCBjb3VudCkpIHsKKyAgICAgIGlmIChzZW5kQnl0ZXMoZGF0YSwgY291bnQpKSB7CisgICAgICAgICByZXR1cm4gMTsKKyAgICAgIH0KKyAgIH0KKyAgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50CitzZW5kTGluZSAodW5zaWduZWQgY2hhciBsaW5lLCBpbnQgZm9yY2UpIHsKKyAgIHVuc2lnbmVkIGNoYXIgKnNvdXJjZSA9ICZzb3VyY2VJbWFnZVtsaW5lXVswXTsKKyAgIHVuc2lnbmVkIGNoYXIgKnRhcmdldCA9ICZ0YXJnZXRJbWFnZVtsaW5lXVswXTsKKyAgIHVuc2lnbmVkIGNoYXIgc3RhcnQgPSAwOworICAgdW5zaWduZWQgY2hhciBjb3VudCA9IHNjcmVlbldpZHRoOworICAgd2hpbGUgKGNvdW50ID4gMCkgeworICAgICAgaWYgKHNvdXJjZVtjb3VudC0xXSAhPSB0YXJnZXRbY291bnQtMV0pIGJyZWFrOworICAgICAgLS1jb3VudDsKKyAgIH0KKyAgIHdoaWxlIChzdGFydCA8IGNvdW50KSB7CisgICAgICBpZiAoc291cmNlW3N0YXJ0XSAhPSB0YXJnZXRbc3RhcnRdKSBicmVhazsKKyAgICAgICsrc3RhcnQ7CisgICB9CisgICBpZiAoKGNvdW50IC09IHN0YXJ0KSB8fCBmb3JjZSkgeworICAgICAgbG9nTWVzc2FnZShMT0dfREVCVUcsICJMb2dUZXh0IGxpbmU6IGxpbmU9JWQsIGNvbHVtbj0lZCwgY291bnQ9JWQiLCBsaW5lLCBzdGFydCwgY291bnQpOworICAgICAgbWVtY3B5KCZ0YXJnZXRbc3RhcnRdLCAmc291cmNlW3N0YXJ0XSwgY291bnQpOworICAgICAgaWYgKCFzZW5kRGF0YShsaW5lLCBzdGFydCwgY291bnQpKSB7CisgICAgICAgICByZXR1cm4gMDsKKyAgICAgIH0KKyAgIH0KKyAgIHJldHVybiAxOworfQorCitzdGF0aWMgaW50CitzZW5kQ3VycmVudExpbmUgKHZvaWQpIHsKKyAgIHJldHVybiBzZW5kTGluZShjdXJyZW50TGluZSwgMCk7Cit9CisKK3N0YXRpYyBpbnQKK3NlbmRDdXJzb3JSb3cgKHZvaWQpIHsKKyAgIHJldHVybiBzZW5kTGluZShjdXJzb3JSb3csIDEpOworfQorCitzdGF0aWMgaW50CitoYW5kbGVVcGRhdGUgKHVuc2lnbmVkIGNoYXIgbGluZSkgeworICAgbG9nTWVzc2FnZShMT0dfREVCVUcsICJSZXF1ZXN0IGxpbmU6ICgwWCUyLjJYKSAwWCUyLjJYIGRlYz0lZCIsIEtFWV9VUERBVEUsIGxpbmUsIGxpbmUpOworICAgaWYgKCFsaW5lKSByZXR1cm4gc2VuZEN1cnNvclJvdygpOworICAgaWYgKGxpbmUgPD0gc2NyZWVuSGVpZ2h0KSB7CisgICAgICBjdXJyZW50TGluZSA9IGxpbmUgLSAxOworICAgICAgcmV0dXJuIHNlbmRDdXJyZW50TGluZSgpOworICAgfQorICAgbG9nTWVzc2FnZShMT0dfV0FSTklORywgIkludmFsaWQgbGluZSByZXF1ZXN0OiAlZCIsIGxpbmUpOworICAgcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQKK2JybF93cml0ZVdpbmRvdyAoQnJhaWxsZURpc3BsYXkgKmJybCwgY29uc3Qgd2NoYXJfdCAqdGV4dCkgeworICAgaWYgKGRldmljZVN0YXR1cyA9PSBERVZfUkVBRFkpIHsKKyAgICAgIHNlbmRDdXJyZW50TGluZSgpOworICAgfQorICAgcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQKK2lzT25saW5lICh2b2lkKSB7CisgICBpbnQgb25saW5lID0gc2VyaWFsVGVzdExpbmVEU1Ioc2VyaWFsRGV2aWNlKTsKKyAgIGlmIChvbmxpbmUpIHsKKyAgICAgIGlmIChkZXZpY2VTdGF0dXMgPCBERVZfT05MSU5FKSB7CisgICAgICAgICBkZXZpY2VTdGF0dXMgPSBERVZfT05MSU5FOworICAgICAgICAgbG9nTWVzc2FnZShMT0dfV0FSTklORywgIkxvZ1RleHQgb25saW5lLiIpOworICAgICAgfQorICAgfSBlbHNlIHsKKyAgICAgIGlmIChkZXZpY2VTdGF0dXMgPiBERVZfT0ZGTElORSkgeworICAgICAgICAgZGV2aWNlU3RhdHVzID0gREVWX09GRkxJTkU7CisgICAgICAgICBsb2dNZXNzYWdlKExPR19XQVJOSU5HLCAiTG9nVGV4dCBvZmZsaW5lLiIpOworICAgICAgfQorICAgfQorICAgcmV0dXJuIG9ubGluZTsKK30KKworc3RhdGljIGludAorYnJsX3dyaXRlU3RhdHVzIChCcmFpbGxlRGlzcGxheSAqYnJsLCBjb25zdCB1bnNpZ25lZCBjaGFyICpzdGF0dXMpIHsKKyAgIGlmIChpc09ubGluZSgpKSB7CisgICAgICBpZiAoc3RhdHVzW0dTQ19GSVJTVF0gPT0gR1NDX01BUktFUikgeworICAgICAgICAgdW5zaWduZWQgY2hhciByb3cgPSBzdGF0dXNbZ3NjU2NyZWVuQ3Vyc29yUm93XTsKKyAgICAgICAgIHVuc2lnbmVkIGNoYXIgY29sdW1uID0gc3RhdHVzW2dzY1NjcmVlbkN1cnNvckNvbHVtbl07CisgICAgICAgICByb3cgPSBNQVgoMSwgTUlOKHJvdywgc2NyZWVuSGVpZ2h0KSkgLSAxOworICAgICAgICAgY29sdW1uID0gTUFYKDEsIE1JTihjb2x1bW4sIHNjcmVlbldpZHRoKSkgLSAxOworICAgICAgICAgaWYgKGRldmljZVN0YXR1cyA8IERFVl9SRUFEWSkgeworICAgICAgICAgICAgbWVtc2V0KHRhcmdldEltYWdlLCAwLCBzaXplb2YodGFyZ2V0SW1hZ2UpKTsKKyAgICAgICAgICAgIGN1cnJlbnRDb250ZXh0ID0gS1RCX0NUWF9ERUZBVUxUOworICAgICAgICAgICAgY3VycmVudExpbmUgPSByb3c7CisgICAgICAgICAgICBjdXJzb3JSb3cgPSBzY3JlZW5IZWlnaHQ7CisgICAgICAgICAgICBjdXJzb3JDb2x1bW4gPSBzY3JlZW5XaWR0aDsKKyAgICAgICAgICAgIGRldmljZVN0YXR1cyA9IERFVl9SRUFEWTsKKyAgICAgICAgIH0KKyAgICAgICAgIGlmICgocm93ICE9IGN1cnNvclJvdykgfHwgKGNvbHVtbiAhPSBjdXJzb3JDb2x1bW4pKSB7CisgICAgICAgICAgICBsb2dNZXNzYWdlKExPR19ERUJVRywgImN1cnNvciBtb3ZlZDogWyVkLCVkXSAtPiBbJWQsJWRdIiwgY3Vyc29yQ29sdW1uLCBjdXJzb3JSb3csIGNvbHVtbiwgcm93KTsKKyAgICAgICAgICAgIGN1cnNvclJvdyA9IHJvdzsKKyAgICAgICAgICAgIGN1cnNvckNvbHVtbiA9IGNvbHVtbjsKKyAgICAgICAgICAgIHNlbmRDdXJzb3JSb3coKTsKKyAgICAgICAgIH0KKyAgICAgIH0KKyAgIH0KKyAgIHJldHVybiAxOworfQorCitzdGF0aWMgaW50CityZWFkS2V5ICh2b2lkKSB7CisgICB1bnNpZ25lZCBjaGFyIGtleTsKKyAgIHVuc2lnbmVkIGNoYXIgYXJnOworICAgaWYgKHNlcmlhbFJlYWREYXRhKHNlcmlhbERldmljZSwgJmtleSwgMSwgMCwgMCkgIT0gMSkgcmV0dXJuIEVPRjsKKyAgIHN3aXRjaCAoa2V5KSB7CisgICAgICBkZWZhdWx0OgorICAgICAgICAgYXJnID0gMDsKKyAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBLRVlfRlVOQ1RJT046CisgICAgICBjYXNlIEtFWV9GVU5DVElPTjI6CisgICAgICBjYXNlIEtFWV9VUERBVEU6CisgICAgICAgICB3aGlsZSAoc2VyaWFsUmVhZERhdGEoc2VyaWFsRGV2aWNlLCAmYXJnLCAxLCAwLCAwKSAhPSAxKSBhc3luY1dhaXQoMSk7CisgICAgICAgICBicmVhazsKKyAgIH0KKyAgIHsKKyAgICAgIGludCByZXN1bHQgPSBDT01QT1VORF9LRVkoa2V5LCBhcmcpOworICAgICAgbG9nTWVzc2FnZShMT0dfREVCVUcsICJLZXkgcmVhZDogJTQuNFgiLCByZXN1bHQpOworICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgIH0KK30KKworLyphc2tVc2VyCitzdGF0aWMgdW5zaWduZWQgY2hhciAqc2VsZWN0ZWRMaW5lOworCitzdGF0aWMgdm9pZAorcmVwbGFjZUNoYXJhY3RlcnMgKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmFkZHJlc3MsIHNpemVfdCBjb3VudCkgeworICAgdHJhbnNsYXRlSW5wdXRDZWxscygmc2VsZWN0ZWRMaW5lW2N1cnNvckNvbHVtbl0sIGFkZHJlc3MsIGNvdW50KTsKKyAgIGN1cnNvckNvbHVtbiArPSBjb3VudDsKK30KKworc3RhdGljIHZvaWQKK2luc2VydENoYXJhY3RlcnMgKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmFkZHJlc3MsIHNpemVfdCBjb3VudCkgeworICAgbWVtbW92ZSgmc2VsZWN0ZWRMaW5lW2N1cnNvckNvbHVtbitjb3VudF0sICZzZWxlY3RlZExpbmVbY3Vyc29yQ29sdW1uXSwgc2NyZWVuV2lkdGgtY3Vyc29yQ29sdW1uLWNvdW50KTsKKyAgIHJlcGxhY2VDaGFyYWN0ZXJzKGFkZHJlc3MsIGNvdW50KTsKK30KKworc3RhdGljIHZvaWQKK2RlbGV0ZUNoYXJhY3RlcnMgKHNpemVfdCBjb3VudCkgeworICAgbWVtbW92ZSgmc2VsZWN0ZWRMaW5lW2N1cnNvckNvbHVtbl0sICZzZWxlY3RlZExpbmVbY3Vyc29yQ29sdW1uK2NvdW50XSwgc2NyZWVuV2lkdGgtY3Vyc29yQ29sdW1uLWNvdW50KTsKKyAgIG1lbXNldCgmc2VsZWN0ZWRMaW5lW3NjcmVlbldpZHRoLWNvdW50XSwgdHJhbnNsYXRlSW5wdXRDZWxsKCcgJyksIGNvdW50KTsKK30KKworc3RhdGljIHZvaWQKK2NsZWFyQ2hhcmFjdGVycyAodm9pZCkgeworICAgY3Vyc29yQ29sdW1uID0gMDsKKyAgIGRlbGV0ZUNoYXJhY3RlcnMoc2NyZWVuV2lkdGgpOworfQorCitzdGF0aWMgdm9pZAorc2VsZWN0TGluZSAodW5zaWduZWQgY2hhciBsaW5lKSB7CisgICBzZWxlY3RlZExpbmUgPSAmc291cmNlSW1hZ2VbY3Vyc29yUm93ID0gbGluZV1bMF07CisgICBjbGVhckNoYXJhY3RlcnMoKTsKKyAgIGRldmljZVN0YXR1cyA9IERFVl9PTkxJTkU7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBjaGFyICoKK2Fza1VzZXIgKGNvbnN0IHVuc2lnbmVkIGNoYXIgKnByb21wdCkgeworICAgdW5zaWduZWQgY2hhciBmcm9tOworICAgdW5zaWduZWQgY2hhciB0bzsKKyAgIHNlbGVjdExpbmUoc2NyZWVuSGVpZ2h0LTEpOworICAgbG9nTWVzc2FnZShMT0dfREVCVUcsICJQcm9tcHQ6ICVzIiwgcHJvbXB0KTsKKyAgIHJlcGxhY2VDaGFyYWN0ZXJzKHByb21wdCwgc3RybGVuKHByb21wdCkpOworICAgZnJvbSA9IHRvID0gKytjdXJzb3JDb2x1bW47CisgICBzZW5kQ3Vyc29yUm93KCk7CisgICB3aGlsZSAoMSkgeworICAgICAgaW50IGtleSA9IHJlYWRLZXkoKTsKKyAgICAgIGlmIChrZXkgPT0gRU9GKSB7CisgICAgICAgICBhc3luY1dhaXQoMSk7CisgICAgICAgICBjb250aW51ZTsKKyAgICAgIH0KKyAgICAgIGlmICgoa2V5ICYgS0VZX01BU0spID09IEtFWV9VUERBVEUpIHsKKyAgICAgICAgIGhhbmRsZVVwZGF0ZShrZXkgPj4gS0VZX1NISUZUKTsKKyAgICAgICAgIGNvbnRpbnVlOworICAgICAgfQorICAgICAgaWYgKGlzZ3JhcGgoa2V5KSkgeworICAgICAgICAgaWYgKHRvIDwgc2NyZWVuV2lkdGgpIHsKKyAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgY2hhcmFjdGVyID0ga2V5ICYgS0VZX01BU0s7CisgICAgICAgICAgICBpbnNlcnRDaGFyYWN0ZXJzKCZjaGFyYWN0ZXIsIDEpOworICAgICAgICAgICAgKyt0bzsKKyAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICByaW5nQ29uc29sZUJlbGwoKTsKKyAgICAgICAgIH0KKyAgICAgIH0gZWxzZSB7CisgICAgICAgICBzd2l0Y2ggKGtleSkgeworICAgICAgICAgICAgY2FzZSBDUjoKKyAgICAgICAgICAgICAgIGlmICh0byA+IGZyb20pIHsKKyAgICAgICAgICAgICAgICAgIHNpemVfdCBsZW5ndGggPSB0byAtIGZyb207CisgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpyZXNwb25zZSA9IG1hbGxvYyhsZW5ndGgrMSk7CisgICAgICAgICAgICAgICAgICBpZiAocmVzcG9uc2UpIHsKKyAgICAgICAgICAgICAgICAgICAgIHRyYW5zbGF0ZU91dHB1dENlbGxzKHJlc3BvbnNlLCAmc2VsZWN0ZWRMaW5lW2Zyb21dLCBsZW5ndGgpOworICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2VbbGVuZ3RoXSA9IDA7CisgICAgICAgICAgICAgICAgICAgICBsb2dNZXNzYWdlKExPR19ERUJVRywgIlJlc3BvbnNlOiAlcyIsIHJlc3BvbnNlKTsKKyAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXNwb25zZTsKKyAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICBsb2dTeXN0ZW1FcnJvcigiRG93bmxvYWQgZmlsZSBwYXRoIGFsbG9jYXRpb24iKTsKKyAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICAgICAgY2FzZSBCUzoKKyAgICAgICAgICAgICAgIGlmIChjdXJzb3JDb2x1bW4gPiBmcm9tKSB7CisgICAgICAgICAgICAgICAgICAtLWN1cnNvckNvbHVtbjsKKyAgICAgICAgICAgICAgICAgIGRlbGV0ZUNoYXJhY3RlcnMoMSk7CisgICAgICAgICAgICAgICAgICAtLXRvOworICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgIHJpbmdDb25zb2xlQmVsbCgpOworICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIERFTDoKKyAgICAgICAgICAgICAgIGlmIChjdXJzb3JDb2x1bW4gPCB0bykgeworICAgICAgICAgICAgICAgICAgZGVsZXRlQ2hhcmFjdGVycygxKTsKKyAgICAgICAgICAgICAgICAgIC0tdG87CisgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgcmluZ0NvbnNvbGVCZWxsKCk7CisgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgS0VZX0ZVTkNUSU9OX0NVUlNPUl9MRUZUOgorICAgICAgICAgICAgICAgaWYgKGN1cnNvckNvbHVtbiA+IGZyb20pIHsKKyAgICAgICAgICAgICAgICAgIC0tY3Vyc29yQ29sdW1uOworICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgIHJpbmdDb25zb2xlQmVsbCgpOworICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEtFWV9GVU5DVElPTl9DVVJTT1JfTEVGVF9KVU1QOgorICAgICAgICAgICAgICAgaWYgKGN1cnNvckNvbHVtbiA+IGZyb20pIHsKKyAgICAgICAgICAgICAgICAgIGN1cnNvckNvbHVtbiA9IGZyb207CisgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgcmluZ0NvbnNvbGVCZWxsKCk7CisgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgS0VZX0ZVTkNUSU9OX0NVUlNPUl9SSUdIVDoKKyAgICAgICAgICAgICAgIGlmIChjdXJzb3JDb2x1bW4gPCB0bykgeworICAgICAgICAgICAgICAgICAgKytjdXJzb3JDb2x1bW47CisgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgcmluZ0NvbnNvbGVCZWxsKCk7CisgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgS0VZX0ZVTkNUSU9OX0NVUlNPUl9SSUdIVF9KVU1QOgorICAgICAgICAgICAgICAgaWYgKGN1cnNvckNvbHVtbiA8IHRvKSB7CisgICAgICAgICAgICAgICAgICBjdXJzb3JDb2x1bW4gPSB0bzsKKyAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICByaW5nQ29uc29sZUJlbGwoKTsKKyAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgIHJpbmdDb25zb2xlQmVsbCgpOworICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICB9CisgICAgICB9CisgICAgICBzZW5kQ3Vyc29yUm93KCk7CisgICB9Cit9CisqLworCitzdGF0aWMgdm9pZAorZG93bmxvYWRGaWxlICh2b2lkKSB7CisgICBpZiAobWFrZURvd25sb2FkRmlmbygpKSB7CisgICAgICBpbnQgZmlsZSA9IG9wZW4oZG93bmxvYWRQYXRoLCBPX1JET05MWSk7CisgICAgICBpZiAoZmlsZSAhPSAtMSkgeworICAgICAgICAgc3RydWN0IHN0YXQgc3RhdHVzOworICAgICAgICAgaWYgKGZzdGF0KGZpbGUsICZzdGF0dXMpICE9IC0xKSB7CisgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIGJ1ZmZlclswWDQwMF07CisgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICphZGRyZXNzID0gYnVmZmVyOworICAgICAgICAgICAgaW50IGNvdW50ID0gMDsKKyAgICAgICAgICAgIHdoaWxlICgxKSB7CisgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpuZXdsaW5lOworICAgICAgICAgICAgICAgaWYgKCFjb3VudCkgeworICAgICAgICAgICAgICAgICAgY291bnQgPSByZWFkKGZpbGUsIGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlcikpOworICAgICAgICAgICAgICAgICAgaWYgKCFjb3VudCkgeworICAgICAgICAgICAgICAgICAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgZmlsZVRyYWlsZXJbXSA9IHswWDFBfTsKKyAgICAgICAgICAgICAgICAgICAgIHNlbmRCeXRlcyhmaWxlVHJhaWxlciwgc2l6ZW9mKGZpbGVUcmFpbGVyKSk7CisgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgIGlmIChjb3VudCA9PSAtMSkgeworICAgICAgICAgICAgICAgICAgICAgbG9nU3lzdGVtRXJyb3IoIkRvd25sb2FkIGZpbGUgcmVhZCIpOworICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICBhZGRyZXNzID0gYnVmZmVyOworICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgaWYgKChuZXdsaW5lID0gbWVtY2hyKGFkZHJlc3MsICdcbicsIGNvdW50KSkpIHsKKyAgICAgICAgICAgICAgICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGxpbmVUcmFpbGVyW10gPSB7QVNDSUlfQ1IsIEFTQ0lJX0xGfTsKKyAgICAgICAgICAgICAgICAgIHNpemVfdCBsZW5ndGggPSBuZXdsaW5lIC0gYWRkcmVzczsKKyAgICAgICAgICAgICAgICAgIGlmICghc2VuZEJ5dGVzKGFkZHJlc3MsIGxlbmd0aCsrKSkgYnJlYWs7CisgICAgICAgICAgICAgICAgICBpZiAoIXNlbmRCeXRlcyhsaW5lVHJhaWxlciwgc2l6ZW9mKGxpbmVUcmFpbGVyKSkpIGJyZWFrOworICAgICAgICAgICAgICAgICAgYWRkcmVzcyArPSBsZW5ndGg7CisgICAgICAgICAgICAgICAgICBjb3VudCAtPSBsZW5ndGg7CisgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgaWYgKCFzZW5kQnl0ZXMoYWRkcmVzcywgY291bnQpKSBicmVhazsKKyAgICAgICAgICAgICAgICAgIGNvdW50ID0gMDsKKyAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBsb2dTeXN0ZW1FcnJvcigiRG93bmxvYWQgZmlsZSBzdGF0dXMiKTsKKyAgICAgICAgIH0KKyAgICAgICAgIGlmIChjbG9zZShmaWxlKSA9PSAtMSkgeworICAgICAgICAgICAgbG9nU3lzdGVtRXJyb3IoIkRvd25sb2FkIGZpbGUgY2xvc2UiKTsKKyAgICAgICAgIH0KKyAgICAgIH0gZWxzZSB7CisgICAgICAgICBsb2dTeXN0ZW1FcnJvcigiRG93bmxvYWQgZmlsZSBvcGVuIik7CisgICAgICB9CisgICB9IGVsc2UgeworICAgICAgbG9nTWVzc2FnZShMT0dfV0FSTklORywgIkRvd25sb2FkIHBhdGggbm90IHNwZWNpZmllZC4iKTsKKyAgIH0KK30KKworc3RhdGljIGludAorYnJsX3JlYWRDb21tYW5kIChCcmFpbGxlRGlzcGxheSAqYnJsLCBLZXlUYWJsZUNvbW1hbmRDb250ZXh0IGNvbnRleHQpIHsKKyAgIGludCBrZXkgPSByZWFkS2V5KCk7CisgICBpZiAoY29udGV4dCAhPSBjdXJyZW50Q29udGV4dCkgeworICAgICAgbG9nTWVzc2FnZShMT0dfREVCVUcsICJDb250ZXh0IHN3aXRjaDogJWQgLT4gJWQiLCBjdXJyZW50Q29udGV4dCwgY29udGV4dCk7CisgICAgICBzd2l0Y2ggKGN1cnJlbnRDb250ZXh0ID0gY29udGV4dCkgeworICAgICAgICAgY2FzZSBLVEJfQ1RYX0RFRkFVTFQ6CisgICAgICAgICAgICBkZXZpY2VTdGF0dXMgPSBERVZfT05MSU5FOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgYnJlYWs7CisgICAgICB9CisgICB9CisgICBpZiAoa2V5ICE9IEVPRikgeworICAgICAgc3dpdGNoIChrZXkpIHsKKyAgICAgICAgIGNhc2UgS0VZX0ZVTkNUSU9OX0VOVEVSOgorICAgICAgICAgICAgcmV0dXJuIEJSTF9DTURfS0VZKEVOVEVSKTsKKyAgICAgICAgIGNhc2UgS0VZX0ZVTkNUSU9OX1RBQjoKKyAgICAgICAgICAgIHJldHVybiBCUkxfQ01EX0tFWShUQUIpOworICAgICAgICAgY2FzZSBLRVlfRlVOQ1RJT05fQ1VSU09SX1VQOgorICAgICAgICAgICAgcmV0dXJuIEJSTF9DTURfS0VZKENVUlNPUl9VUCk7CisgICAgICAgICBjYXNlIEtFWV9GVU5DVElPTl9DVVJTT1JfRE9XTjoKKyAgICAgICAgICAgIHJldHVybiBCUkxfQ01EX0tFWShDVVJTT1JfRE9XTik7CisgICAgICAgICBjYXNlIEtFWV9GVU5DVElPTl9DVVJTT1JfTEVGVDoKKyAgICAgICAgICAgIHJldHVybiBCUkxfQ01EX0tFWShDVVJTT1JfTEVGVCk7CisgICAgICAgICBjYXNlIEtFWV9GVU5DVElPTl9DVVJTT1JfUklHSFQ6CisgICAgICAgICAgICByZXR1cm4gQlJMX0NNRF9LRVkoQ1VSU09SX1JJR0hUKTsKKyAgICAgICAgIGNhc2UgS0VZX0ZVTkNUSU9OX0NVUlNPUl9VUF9KVU1QOgorICAgICAgICAgICAgcmV0dXJuIEJSTF9DTURfS0VZKEhPTUUpOworICAgICAgICAgY2FzZSBLRVlfRlVOQ1RJT05fQ1VSU09SX0RPV05fSlVNUDoKKyAgICAgICAgICAgIHJldHVybiBCUkxfQ01EX0tFWShFTkQpOworICAgICAgICAgY2FzZSBLRVlfRlVOQ1RJT05fQ1VSU09SX0xFRlRfSlVNUDoKKyAgICAgICAgICAgIHJldHVybiBCUkxfQ01EX0tFWShQQUdFX1VQKTsKKyAgICAgICAgIGNhc2UgS0VZX0ZVTkNUSU9OX0NVUlNPUl9SSUdIVF9KVU1QOgorICAgICAgICAgICAgcmV0dXJuIEJSTF9DTURfS0VZKFBBR0VfRE9XTik7CisgICAgICAgICBjYXNlIEtFWV9GVU5DVElPTl9GMToKKyAgICAgICAgICAgIHJldHVybiBCUkxfQ01EX0tGTigxKTsKKyAgICAgICAgIGNhc2UgS0VZX0ZVTkNUSU9OX0YyOgorICAgICAgICAgICAgcmV0dXJuIEJSTF9DTURfS0ZOKDIpOworICAgICAgICAgY2FzZSBLRVlfRlVOQ1RJT05fRjM6CisgICAgICAgICAgICByZXR1cm4gQlJMX0NNRF9LRk4oMyk7CisgICAgICAgICBjYXNlIEtFWV9GVU5DVElPTl9GNDoKKyAgICAgICAgICAgIHJldHVybiBCUkxfQ01EX0tGTig0KTsKKyAgICAgICAgIGNhc2UgS0VZX0ZVTkNUSU9OX0Y1OgorICAgICAgICAgICAgcmV0dXJuIEJSTF9DTURfS0ZOKDUpOworICAgICAgICAgY2FzZSBLRVlfRlVOQ1RJT05fRjY6CisgICAgICAgICAgICByZXR1cm4gQlJMX0NNRF9LRk4oNik7CisgICAgICAgICBjYXNlIEtFWV9GVU5DVElPTl9GNzoKKyAgICAgICAgICAgIHJldHVybiBCUkxfQ01EX0tGTig3KTsKKyAgICAgICAgIGNhc2UgS0VZX0ZVTkNUSU9OX0Y5OgorICAgICAgICAgICAgcmV0dXJuIEJSTF9DTURfS0ZOKDkpOworICAgICAgICAgY2FzZSBLRVlfRlVOQ1RJT05fRjEwOgorICAgICAgICAgICAgcmV0dXJuIEJSTF9DTURfS0ZOKDEwKTsKKyAgICAgICAgIGNhc2UgS0VZX0NPTU1BTkQ6IHsKKyAgICAgICAgICAgIGludCBjb21tYW5kOworICAgICAgICAgICAgd2hpbGUgKChjb21tYW5kID0gcmVhZEtleSgpKSA9PSBFT0YpIGFzeW5jV2FpdCgxKTsKKyAgICAgICAgICAgIGxvZ01lc3NhZ2UoTE9HX0RFQlVHLCAiUmVjZWl2ZWQgY29tbWFuZDogKDB4JTIuMlgpIDB4JTQuNFgiLCBLRVlfQ09NTUFORCwgY29tbWFuZCk7CisgICAgICAgICAgICBzd2l0Y2ggKGNvbW1hbmQpIHsKKyAgICAgICAgICAgICAgIGNhc2UgS0VZX0NPTU1BTkQ6CisgICAgICAgICAgICAgICAgICAvKiBwcmVzc2luZyB0aGUgZXNjYXBlIGNvbW1hbmQgdHdpY2Ugd2lsbCBwYXNzIGl0IHRocm91Z2ggKi8KKyAgICAgICAgICAgICAgICAgIHJldHVybiBCUkxfQ01EX0JMSyhQQVNTRE9UUykgKyB0cmFuc2xhdGVJbnB1dENlbGwoS0VZX0NPTU1BTkQpOworICAgICAgICAgICAgICAgY2FzZSBLRVlfQ09NTUFORF9TV0lUQ0hWVF9QUkVWOgorICAgICAgICAgICAgICAgICAgcmV0dXJuIEJSTF9DTURfU1dJVENIVlRfUFJFVjsKKyAgICAgICAgICAgICAgIGNhc2UgS0VZX0NPTU1BTkRfU1dJVENIVlRfTkVYVDoKKyAgICAgICAgICAgICAgICAgIHJldHVybiBCUkxfQ01EX1NXSVRDSFZUX05FWFQ7CisgICAgICAgICAgICAgICBjYXNlIEtFWV9DT01NQU5EX1NXSVRDSFZUXzE6CisgICAgICAgICAgICAgICAgICByZXR1cm4gQlJMX0NNRF9CTEsoU1dJVENIVlQpICsgMDsKKyAgICAgICAgICAgICAgIGNhc2UgS0VZX0NPTU1BTkRfU1dJVENIVlRfMjoKKyAgICAgICAgICAgICAgICAgIHJldHVybiBCUkxfQ01EX0JMSyhTV0lUQ0hWVCkgKyAxOworICAgICAgICAgICAgICAgY2FzZSBLRVlfQ09NTUFORF9TV0lUQ0hWVF8zOgorICAgICAgICAgICAgICAgICAgcmV0dXJuIEJSTF9DTURfQkxLKFNXSVRDSFZUKSArIDI7CisgICAgICAgICAgICAgICBjYXNlIEtFWV9DT01NQU5EX1NXSVRDSFZUXzQ6CisgICAgICAgICAgICAgICAgICByZXR1cm4gQlJMX0NNRF9CTEsoU1dJVENIVlQpICsgMzsKKyAgICAgICAgICAgICAgIGNhc2UgS0VZX0NPTU1BTkRfU1dJVENIVlRfNToKKyAgICAgICAgICAgICAgICAgIHJldHVybiBCUkxfQ01EX0JMSyhTV0lUQ0hWVCkgKyA0OworICAgICAgICAgICAgICAgY2FzZSBLRVlfQ09NTUFORF9TV0lUQ0hWVF82OgorICAgICAgICAgICAgICAgICAgcmV0dXJuIEJSTF9DTURfQkxLKFNXSVRDSFZUKSArIDU7CisgICAgICAgICAgICAgICBjYXNlIEtFWV9DT01NQU5EX1NXSVRDSFZUXzc6CisgICAgICAgICAgICAgICAgICByZXR1cm4gQlJMX0NNRF9CTEsoU1dJVENIVlQpICsgNjsKKyAgICAgICAgICAgICAgIGNhc2UgS0VZX0NPTU1BTkRfU1dJVENIVlRfODoKKyAgICAgICAgICAgICAgICAgIHJldHVybiBCUkxfQ01EX0JMSyhTV0lUQ0hWVCkgKyA3OworICAgICAgICAgICAgICAgY2FzZSBLRVlfQ09NTUFORF9TV0lUQ0hWVF85OgorICAgICAgICAgICAgICAgICAgcmV0dXJuIEJSTF9DTURfQkxLKFNXSVRDSFZUKSArIDg7CisgICAgICAgICAgICAgICBjYXNlIEtFWV9DT01NQU5EX1NXSVRDSFZUXzEwOgorICAgICAgICAgICAgICAgICAgcmV0dXJuIEJSTF9DTURfQkxLKFNXSVRDSFZUKSArIDk7CisgICAgICAgICAgICAgICBjYXNlIEtFWV9DT01NQU5EX1BBR0VfVVA6CisgICAgICAgICAgICAgICAgICByZXR1cm4gQlJMX0NNRF9LRVkoUEFHRV9VUCk7CisgICAgICAgICAgICAgICBjYXNlIEtFWV9DT01NQU5EX1BBR0VfRE9XTjoKKyAgICAgICAgICAgICAgICAgIHJldHVybiBCUkxfQ01EX0tFWShQQUdFX0RPV04pOworICAgICAgICAgICAgICAgY2FzZSBLRVlfQ09NTUFORF9QUkVGTUVOVToKKyAgICAgICAgICAgICAgICAgIGN1cnJlbnRMaW5lID0gMDsKKyAgICAgICAgICAgICAgICAgIGN1cnNvclJvdyA9IDA7CisgICAgICAgICAgICAgICAgICBjdXJzb3JDb2x1bW4gPSAzMTsKKyAgICAgICAgICAgICAgICAgIHNlbmRDdXJzb3JSb3coKTsKKyAgICAgICAgICAgICAgICAgIHJldHVybiBCUkxfQ01EX1BSRUZNRU5VOworICAgICAgICAgICAgICAgY2FzZSBLRVlfQ09NTUFORF9QUkVGU0FWRToKKyAgICAgICAgICAgICAgICAgIHJldHVybiBCUkxfQ01EX1BSRUZTQVZFOworICAgICAgICAgICAgICAgY2FzZSBLRVlfQ09NTUFORF9QUkVGTE9BRDoKKyAgICAgICAgICAgICAgICAgIHJldHVybiBCUkxfQ01EX1BSRUZMT0FEOworICAgICAgICAgICAgICAgY2FzZSBLRVlfQ09NTUFORF9GUkVFWkVfT046CisgICAgICAgICAgICAgICAgICByZXR1cm4gQlJMX0NNRF9GUkVFWkUgfCBCUkxfRkxHX1RPR0dMRV9PTjsKKyAgICAgICAgICAgICAgIGNhc2UgS0VZX0NPTU1BTkRfRlJFRVpFX09GRjoKKyAgICAgICAgICAgICAgICAgIHJldHVybiBCUkxfQ01EX0ZSRUVaRSB8IEJSTF9GTEdfVE9HR0xFX09GRjsKKyAgICAgICAgICAgICAgIGNhc2UgS0VZX0NPTU1BTkRfUkVTVEFSVEJSTDoKKyAgICAgICAgICAgICAgICAgIHJldHVybiBCUkxfQ01EX1JFU1RBUlRCUkw7CisgICAgICAgICAgICAgICBjYXNlIEtFWV9DT01NQU5EX0RPV05MT0FEOgorICAgICAgICAgICAgICAgICAgZG93bmxvYWRGaWxlKCk7CisgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICBsb2dNZXNzYWdlKExPR19XQVJOSU5HLCAiVW5rbm93biBjb21tYW5kOiAoMFglMi4yWCkgMFglNC40WCIsIEtFWV9DT01NQU5ELCBjb21tYW5kKTsKKyAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICB9CisgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgc3dpdGNoIChrZXkgJiBLRVlfTUFTSykgeworICAgICAgICAgICAgICAgY2FzZSBLRVlfVVBEQVRFOgorICAgICAgICAgICAgICAgICAgaGFuZGxlVXBkYXRlKGtleSA+PiBLRVlfU0hJRlQpOworICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICBjYXNlIEtFWV9GVU5DVElPTjoKKyAgICAgICAgICAgICAgICAgIGxvZ01lc3NhZ2UoTE9HX1dBUk5JTkcsICJVbmtub3duIGZ1bmN0aW9uOiAoMFglMi4yWCkgMFglNC40WCIsIEtFWV9DT01NQU5ELCBrZXk+PktFWV9TSElGVCk7CisgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgIGRlZmF1bHQ6IHsKKyAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgZG90cyA9IHRyYW5zbGF0ZUlucHV0Q2VsbChrZXkpOworICAgICAgICAgICAgICAgICAgbG9nTWVzc2FnZShMT0dfREVCVUcsICJSZWNlaXZlZCBjaGFyYWN0ZXI6IDBYJTIuMlggZGVjPSVkIGRvdHM9JTIuMlgiLCBrZXksIGtleSwgZG90cyk7CisgICAgICAgICAgICAgICAgICByZXR1cm4gQlJMX0NNRF9CTEsoUEFTU0RPVFMpICsgZG90czsKKyAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgfQorICAgfQorICAgcmV0dXJuIEVPRjsKK30KZGlmZiAtLWdpdCBhL0RyaXZlcnMvQnJhaWxsZS9Mb2dUZXh0L2JyYWlsbGUuaCBiL0RyaXZlcnMvQnJhaWxsZS9Mb2dUZXh0L2JyYWlsbGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lOGUzZDU5Ci0tLSAvZGV2L251bGwKKysrIGIvRHJpdmVycy9CcmFpbGxlL0xvZ1RleHQvYnJhaWxsZS5oCkBAIC0wLDAgKzEsMTA5IEBACisvKgorICogQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyAqICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyAqCisgKiBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorICoKKyAqIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyAqCisgKiBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisgKi8KKworLyogTG9nVGV4dC9icmFpbGxlLmggLSBDb25maWd1cmFibGUgZGVmaW5pdGlvbnMgZm9yIHRoZSBMb2dUZXh0IGRyaXZlcgorICogRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPiAoT2N0b2JlciAyMDAxKQorICoKKyAqIEVkaXQgYXMgbmVjZXNzYXJ5IGZvciB5b3VyIHN5c3RlbS4KKyAqLworCisvKiBLRVlfQ09NTUFORCBjb21tYW5kcyAqLworI2RlZmluZSBLRVlfQ09NTUFORCAwWDlGIC8qIGRvdHMtMzcgKi8KKyNkZWZpbmUgS0VZX0NPTU1BTkRfU1dJVENIVlRfUFJFViAwWDJEIC8qICctJyBkb3RzLTM2OCAqLworI2RlZmluZSBLRVlfQ09NTUFORF9TV0lUQ0hWVF9ORVhUIDBYMkIgLyogJysnIGRvdHMtMjM1OCAqLworI2RlZmluZSBLRVlfQ09NTUFORF9TV0lUQ0hWVF8xICAgIDBYMzEgLyogJzEnIGRvdHMtMTggKi8KKyNkZWZpbmUgS0VZX0NPTU1BTkRfU1dJVENIVlRfMiAgICAwWDMyIC8qICcyJyBkb3RzLTEyOCAqLworI2RlZmluZSBLRVlfQ09NTUFORF9TV0lUQ0hWVF8zICAgIDBYMzMgLyogJzMnIGRvdHMtMTQ4ICovCisjZGVmaW5lIEtFWV9DT01NQU5EX1NXSVRDSFZUXzQgICAgMFgzNCAvKiAnNCcgZG90cy0xNDU4ICovCisjZGVmaW5lIEtFWV9DT01NQU5EX1NXSVRDSFZUXzUgICAgMFgzNSAvKiAnNScgZG90cy0xNTggKi8KKyNkZWZpbmUgS0VZX0NPTU1BTkRfU1dJVENIVlRfNiAgICAwWDM2IC8qICc2JyBkb3RzLTEyNDggKi8KKyNkZWZpbmUgS0VZX0NPTU1BTkRfU1dJVENIVlRfNyAgICAwWDM3IC8qICc3JyBkb3RzLTEyNDU4ICovCisjZGVmaW5lIEtFWV9DT01NQU5EX1NXSVRDSFZUXzggICAgMFgzOCAvKiAnOCcgZG90cy0xMjU4ICovCisjZGVmaW5lIEtFWV9DT01NQU5EX1NXSVRDSFZUXzkgICAgMFgzOSAvKiAnOScgZG90cy0yNDggKi8KKyNkZWZpbmUgS0VZX0NPTU1BTkRfU1dJVENIVlRfMTAgICAwWDMwIC8qICcwJyBkb3RzLTI0NTggKi8KKyNkZWZpbmUgS0VZX0NPTU1BTkRfUEFHRV9VUCAgICAgICAwWDc1IC8qICd1JyBkb3RzLTEzNiAqLworI2RlZmluZSBLRVlfQ09NTUFORF9QQUdFX0RPV04gICAgIDBYNjQgLyogJ2QnIGRvdHMtMTQ1ICovCisjZGVmaW5lIEtFWV9DT01NQU5EX0ZSRUVaRV9PRkYgICAgMFg2NiAvKiAnZicgZG90cy0xMjQgKi8KKyNkZWZpbmUgS0VZX0NPTU1BTkRfRlJFRVpFX09OICAgICAwWDQ2IC8qICdGJyBkb3RzLTEyNDcgKi8KKyNkZWZpbmUgS0VZX0NPTU1BTkRfSU5GTyAgICAgICAgICAwWDQ5IC8qICdJJyBkb3RzLTI0NyAqLworI2RlZmluZSBLRVlfQ09NTUFORF9QUkVGTUVOVSAgICAgIDBYNTAgLyogJ1AnIGRvdHMtMTIzNDcgKi8KKyNkZWZpbmUgS0VZX0NPTU1BTkRfUFJFRlNBVkUgICAgICAwWDUzIC8qICdTJyBkb3RzLTIzNDcgKi8KKyNkZWZpbmUgS0VZX0NPTU1BTkRfUFJFRkxPQUQgICAgICAwWDRDIC8qICdMJyBkb3RzLTEyMzcgKi8KKyNkZWZpbmUgS0VZX0NPTU1BTkRfUkVTVEFSVEJSTCAgICAwWDUyIC8qICdSJyBkb3RzLTEyMzU3ICovCisjZGVmaW5lIEtFWV9DT01NQU5EX0RPV05MT0FEICAgICAgMFg0NCAvKiAnRCcgZG90cy0xNDU3ICovCisKKyNkZWZpbmUgS0VZX1NISUZUIDgKKyNkZWZpbmUgS0VZX01BU0sgKCgxIDw8IEtFWV9TSElGVCkgLSAxKQorI2RlZmluZSBDT01QT1VORF9LRVkoa2V5LGFyZykgKChrZXkpIHwgKChhcmcpIDw8IEtFWV9TSElGVCkpCisKKy8qIGZ1bmN0aW9uIGtleXMgKi8KKyNkZWZpbmUgS0VZX0ZVTkNUSU9OIDBYMDAKKyNkZWZpbmUgRlVOQ1RJT05fS0VZKGFyZykgQ09NUE9VTkRfS0VZKEtFWV9GVU5DVElPTiwgYXJnKQorI2RlZmluZSBLRVlfRlVOQ1RJT05fRU5URVIgICAgICAgICAgICAgRlVOQ1RJT05fS0VZKDBYMUMpIC8qIEVudGVyICAgICAgICAgIHAgNiw4IEwvUiAqLworI2RlZmluZSBLRVlfRlVOQ1RJT05fQ1VSU09SX0xFRlRfSlVNUCAgRlVOQ1RJT05fS0VZKDBYNDcpCisjZGVmaW5lIEtFWV9GVU5DVElPTl9DVVJTT1JfVVAgICAgICAgICBGVU5DVElPTl9LRVkoMFg0OCkKKyNkZWZpbmUgS0VZX0ZVTkNUSU9OX0NVUlNPUl9VUF9KVU1QICAgIEZVTkNUSU9OX0tFWSgwWDQ5KQorI2RlZmluZSBLRVlfRlVOQ1RJT05fQ1VSU09SX0xFRlQgICAgICAgRlVOQ1RJT05fS0VZKDBYNEIpCisjZGVmaW5lIEtFWV9GVU5DVElPTl9DVVJTT1JfUklHSFQgICAgICBGVU5DVElPTl9LRVkoMFg0RCkKKyNkZWZpbmUgS0VZX0ZVTkNUSU9OX0NVUlNPUl9SSUdIVF9KVU1QIEZVTkNUSU9OX0tFWSgwWDRGKQorI2RlZmluZSBLRVlfRlVOQ1RJT05fQ1VSU09SX0RPV04gICAgICAgRlVOQ1RJT05fS0VZKDBYNTApCisjZGVmaW5lIEtFWV9GVU5DVElPTl9DVVJTT1JfRE9XTl9KVU1QICBGVU5DVElPTl9LRVkoMFg1MSkKKyNkZWZpbmUgS0VZX0ZVTkNUSU9OX0YxICAgICAgICAgICAgICAgIEZVTkNUSU9OX0tFWSgwWDc4KSAvKiBGMSAoMSkgICAgICAgICBwIDEsOCBML1IgKi8KKyNkZWZpbmUgS0VZX0ZVTkNUSU9OX0YyICAgICAgICAgICAgICAgIEZVTkNUSU9OX0tFWSgwWDc5KSAvKiBGMiAoMikgICAgICAgICBwIDEsMiw4IEwvUiAqLworI2RlZmluZSBLRVlfRlVOQ1RJT05fRjMgICAgICAgICAgICAgICAgRlVOQ1RJT05fS0VZKDBYN0EpIC8qIEYzICgzKSAgICAgICAgIHAgMSw0LDggTC9SICovCisjZGVmaW5lIEtFWV9GVU5DVElPTl9GNCAgICAgICAgICAgICAgICBGVU5DVElPTl9LRVkoMFg3QikgLyogRjQgKDQpICAgICAgICAgcCAxLDQsNSw4IEwvUiAqLworI2RlZmluZSBLRVlfRlVOQ1RJT05fRjUgICAgICAgICAgICAgICAgRlVOQ1RJT05fS0VZKDBYN0MpIC8qIEY1ICg1KSAgICAgICAgIHAgMSw1LDggTC9SICovCisjZGVmaW5lIEtFWV9GVU5DVElPTl9GNiAgICAgICAgICAgICAgICBGVU5DVElPTl9LRVkoMFg3RCkgLyogRjYgKDYpICAgICAgICAgcCAxLDIsNCw4IEwvUiAqLworI2RlZmluZSBLRVlfRlVOQ1RJT05fRjcgICAgICAgICAgICAgICAgRlVOQ1RJT05fS0VZKDBYN0UpIC8qIEY3ICg3KSAgICAgICAgIHAgMSwyLDQsNSw4IEwvUiAqLworI2RlZmluZSBLRVlfRlVOQ1RJT05fRjggICAgICAgICAgICAgIC8vRlVOQ1RJT05fS0VZKDBYN0UpIC8qIEY4ICg4KSAgICAgICAgIHAgMSwyLDUsOCBML1IgKi8KKyNkZWZpbmUgS0VZX0ZVTkNUSU9OX0Y5ICAgICAgICAgICAgICAgIEZVTkNUSU9OX0tFWSgwWDdGKSAvKiBGOSAoOSkgICAgICAgICBwIDIsNCw4IEwvUiAqLworI2RlZmluZSBLRVlfRlVOQ1RJT05fRjEwICAgICAgICAgICAgICAgRlVOQ1RJT05fS0VZKDBYODEpIC8qIEYxMCAoMCkgICAgICAgIHAgMiw0LDUsOCBML1IgKi8KKyNkZWZpbmUgS0VZX0ZVTkNUSU9OX1RBQiAgICAgICAgICAgICAgIEZVTkNUSU9OX0tFWSgwWEE1KSAvKiBUYWIgICAgICAgICAgICBwIDggIEwvUiAqLworLy8gVGhlIGZvbGxvd2luZyBhcmUgZGVmaW5lZCBpbiB0aGUgbWFudWFsIGJ1dCBkb24ndCBhcHBlYXIgdG8gd29yay4KKyNkZWZpbmUgS0VZX0ZVTkNUSU9OX0YxMSAgICAgICAgICAgICAvL0ZVTkNUSU9OX0tFWSgwWFhYKSAvKiBGMTEgKGsgKyBwIDgpICBwIDEsMyw4IEwvUiAqLworI2RlZmluZSBLRVlfRlVOQ1RJT05fRjEyICAgICAgICAgICAgIC8vRlVOQ1RJT05fS0VZKDBYWFgpIC8qIEYxMiAobCArIHAgOCkgIHAgMSwyLDMsOCBML1IgKi8KKyNkZWZpbmUgS0VZX0ZVTkNUSU9OX0hPTUUgICAgICAgICAgICAvL0ZVTkNUSU9OX0tFWSgwWFhYKSAvKiBIb21lIChNKSAgICAgICBwIDEsMyw0LDcgTC9SICovCisjZGVmaW5lIEtFWV9GVU5DVElPTl9VUF9BUlJPVyAgICAgICAgLy9GVU5DVElPTl9LRVkoMFhYWCkgLyogVXAgYXJyb3cgKFUpICAgcCAxLDMsNiw3IEwvUiAqLworI2RlZmluZSBLRVlfRlVOQ1RJT05fUEFHRV9VUCAgICAgICAgIC8vRlVOQ1RJT05fS0VZKDBYWFgpIC8qIFBhZ2UgdXAgKFApICAgIHAgMSwyLDMsNCw3IEwvUiAqLworI2RlZmluZSBLRVlfRlVOQ1RJT05fTEVGVF9BUlJPVyAgICAgIC8vRlVOQ1RJT05fS0VZKDBYWFgpIC8qIExlZnQgYXJyb3cgKFYpIHAgMSwyLDMsNiw3IEwvUiAqLworI2RlZmluZSBLRVlfRlVOQ1RJT05fUklHSFRfQVJST1cgICAgIC8vRlVOQ1RJT05fS0VZKDBYWFgpIC8qIFJpZ2h0IGFycm93KFIpIHAgMSwyLDMsNSw3IEwvUiAqLworI2RlZmluZSBLRVlfRlVOQ1RJT05fRU5ETiAgICAgICAgICAgIC8vRlVOQ1RJT05fS0VZKDBYWFgpIC8qIEVuZCAoTikgICAgICAgIHAgMSwzLDQsNSw3IEwvUiAqLworI2RlZmluZSBLRVlfRlVOQ1RJT05fRE9XTl9BUlJPVyAgICAgIC8vRlVOQ1RJT05fS0VZKDBYWFgpIC8qIERvd24gYXJyb3cgKFcpIHAgMiw0LDUsNiw3IEwvUiAqLworI2RlZmluZSBLRVlfRlVOQ1RJT05fUEFHRV9ET1dOICAgICAgIC8vRlVOQ1RJT05fS0VZKDBYWFgpIC8qIFBhZ2UgZG93biAoTykgIHAgMSwzLDUsNyBML1IgKi8KKyNkZWZpbmUgS0VZX0ZVTkNUSU9OX0RFTEVURSAgICAgICAgICAvL0ZVTkNUSU9OX0tFWSgwWFhYKSAvKiBEZWxldGUgKFQpICAgICBwIDIsMyw0LDUsNyBML1IgKi8KKyNkZWZpbmUgS0VZX0ZVTkNUSU9OX0xFRlRfQVJST1dfR1JBWSAvL0ZVTkNUSU9OX0tFWSgwWFhYKSAvKiBMZWZ0IGFycm93LCBnciBwIDEsMiwzLDYsNyw4IEwvUiAqLworI2RlZmluZSBLRVlfRlVOQ1RJT05fUFJJTlRfU0NSRUVOICAgIC8vRlVOQ1RJT05fS0VZKDBYWFgpIC8qIFByaW50IHNjcmVlbiAgIHAgMiw0LDYsOCBML1IgKi8KKyNkZWZpbmUgS0VZX0ZVTkNUSU9OX1BBVVNFX0JSRUFLICAgICAvL0ZVTkNUSU9OX0tFWSgwWFhYKSAvKiBQYXVzZS9icmVhayAgICBwIDQsNSw2LDggTC9SICovCisjZGVmaW5lIEtFWV9GVU5DVElPTl9CQUNLU1BBQ0UgICAgICAgLy9GVU5DVElPTl9LRVkoMFhYWCkgLyogQmFja3NwYWNlICAgICAgcCAxLDMsNSw4IEwvUiAqLworI2RlZmluZSBLRVlfRlVOQ1RJT05fTlVMTCAgICAgICAgICAgIC8vRlVOQ1RJT05fS0VZKDBYWFgpIC8qIE51bGwgICAgICAgICAgIHAgNyBML1IgKi8KKworI2RlZmluZSBLRVlfRlVOQ1RJT04yIDBYRTAKKyNkZWZpbmUgRlVOQ1RJT04yX0tFWShhcmcpIENPTVBPVU5EX0tFWShLRVlfRlVOQ1RJT04yLCBhcmcpCisjZGVmaW5lIEtFWV9GVU5DVElPTl9JTlNFUlQgICAgICAgICAgICBGVU5DVElPTjJfS0VZKDBYOTcpIC8qIEluc2VydCAoUykgICAgIHAgMiwzLDQsNyBML1IgKi8KKyNkZWZpbmUgS0VZX0ZVTkNUSU9OX0hPTUVfR1JBWSAgICAgICAvL0ZVTkNUSU9OMl9LRVkoMFg5NykgLyogSG9tZSwgZ3JheSAgICAgcCAxLDMsNCw3LDggTC9SICovCisjZGVmaW5lIEtFWV9GVU5DVElPTl9VUF9BUlJPV19HUkFZICAgICBGVU5DVElPTjJfS0VZKDBYOTgpIC8qIFVwIGFycm93LCBncmF5IHAgMSwzLDYsNyw4IEwvUiAqLworI2RlZmluZSBLRVlfRlVOQ1RJT05fUEFHRV9VUF9HUkFZICAgICAgRlVOQ1RJT04yX0tFWSgwWDk5KSAvKiBQYWdlIHVwLCBncmF5ICBwIDEsMiwzLDQsNyw4IEwvUiAqLworI2RlZmluZSBLRVlfRlVOQ1RJT05fRE9XTl9BUlJPV19HUkFZICAgRlVOQ1RJT04yX0tFWSgwWDlBKSAvKiBEb3duIGFycm93LCBnciBwIDIsNCw1LDYsNyw4IEwvUiAqLworI2RlZmluZSBLRVlfRlVOQ1RJT05fUklHSFRfQVJST1dfR1JBWSAgRlVOQ1RJT04yX0tFWSgwWDlEKSAvKiBSaWdodCBhcnJvdyxnciBwIDEsMiwzLDUsNyw4IEwvUiAqLworI2RlZmluZSBLRVlfRlVOQ1RJT05fRU5EX0dSQVkgICAgICAgICAgRlVOQ1RJT04yX0tFWSgwWDlGKSAvKiBFbmQsIGdyYXkgICAgICBwIDEsMyw0LDUsNyw4IEwvUiAqLworI2RlZmluZSBLRVlfRlVOQ1RJT05fUEFHRV9ET1dOX0dSQVkgICAgRlVOQ1RJT04yX0tFWSgwWEExKSAvKiBQYWdlIGRvd24sZ3JheSBwIDEsMyw1LDcsOCBML1IgKi8KKyNkZWZpbmUgS0VZX0ZVTkNUSU9OX0lOU0VSVF9HUkFZICAgICAgIEZVTkNUSU9OMl9LRVkoMFhBMikgLyogSW5zZXJ0LCBncmF5ICAgcCAyLDMsNCw3LDggTC9SICovCisjZGVmaW5lIEtFWV9GVU5DVElPTl9ERUxFVEVfR1JBWSAgICAgICBGVU5DVElPTjJfS0VZKDBYQTMpIC8qIERlbGV0ZSwgZ3JheSAgIHAgMiwzLDQsNSw3LDggTC9SICovCisKKy8qIFVwZGF0ZSBzY3JlZW4sIG5vdCBhIGtleSAqLworI2RlZmluZSBLRVlfVVBEQVRFIDBYRkYKZGlmZiAtLWdpdCBhL0RyaXZlcnMvQnJhaWxsZS9Mb2dUZXh0L2JybC1vdXQuaCBiL0RyaXZlcnMvQnJhaWxsZS9Mb2dUZXh0L2JybC1vdXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMTFkZWY1Ci0tLSAvZGV2L251bGwKKysrIGIvRHJpdmVycy9CcmFpbGxlL0xvZ1RleHQvYnJsLW91dC5oCkBAIC0wLDAgKzEsMjc0IEBACisvKgorICogQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyAqICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyAqCisgKiBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorICoKKyAqIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyAqCisgKiBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisgKi8KKworWzBdID0gMFgyMCwgLy8gbWVsbGVtcnVtCitbQlJMX0RPVDFdID0gMFg2MSwgLy8gYSBhdAorW0JSTF9ET1QxIHwgQlJMX0RPVDJdID0gMFg2MiwgLy8gYiBibGl2ZXIKK1tCUkxfRE9UMSB8IEJSTF9ET1QyIHwgQlJMX0RPVDNdID0gMFg2QywgLy8gbCBsaWdlCitbQlJMX0RPVDEgfCBCUkxfRE9UMiB8IEJSTF9ET1QzIHwgQlJMX0RPVDRdID0gMFg3MCwgLy8gcCBwfQorW0JSTF9ET1QxIHwgQlJMX0RPVDIgfCBCUkxfRE9UMyB8IEJSTF9ET1Q0IHwgQlJMX0RPVDVdID0gMFg3MSwgLy8gcSB1bmRlcgorW0JSTF9ET1QxIHwgQlJMX0RPVDIgfCBCUkxfRE9UMyB8IEJSTF9ET1Q0IHwgQlJMX0RPVDUgfCBCUkxfRE9UNl0gPSAwWDgyLCAvLyBza2FsCitbQlJMX0RPVDEgfCBCUkxfRE9UMiB8IEJSTF9ET1QzIHwgQlJMX0RPVDQgfCBCUkxfRE9UNSB8IEJSTF9ET1Q2IHwgQlJMX0RPVDddID0gMFg5MCwgLy8gU2thbAorW0JSTF9ET1QxIHwgQlJMX0RPVDIgfCBCUkxfRE9UMyB8IEJSTF9ET1Q0IHwgQlJMX0RPVDUgfCBCUkxfRE9UNiB8IEJSTF9ET1Q3IHwgQlJMX0RPVDhdID0gMFgwMCwgLy8gTlVMCitbQlJMX0RPVDEgfCBCUkxfRE9UMiB8IEJSTF9ET1QzIHwgQlJMX0RPVDQgfCBCUkxfRE9UNSB8IEJSTF9ET1Q2IHwgQlJMX0RPVDhdID0gMFhGMCwgLy8gCitbQlJMX0RPVDEgfCBCUkxfRE9UMiB8IEJSTF9ET1QzIHwgQlJMX0RPVDQgfCBCUkxfRE9UNSB8IEJSTF9ET1Q3XSA9IDBYNTEsIC8vIFEgVW5kZXIKK1tCUkxfRE9UMSB8IEJSTF9ET1QyIHwgQlJMX0RPVDMgfCBCUkxfRE9UNCB8IEJSTF9ET1Q1IHwgQlJMX0RPVDcgfCBCUkxfRE9UOF0gPSAwWDExLCAvLyBEQzEKK1tCUkxfRE9UMSB8IEJSTF9ET1QyIHwgQlJMX0RPVDMgfCBCUkxfRE9UNCB8IEJSTF9ET1Q1IHwgQlJMX0RPVDhdID0gMFhGMSwgLy8gCitbQlJMX0RPVDEgfCBCUkxfRE9UMiB8IEJSTF9ET1QzIHwgQlJMX0RPVDQgfCBCUkxfRE9UNl0gPSAwWDg3LCAvLyBkZW4KK1tCUkxfRE9UMSB8IEJSTF9ET1QyIHwgQlJMX0RPVDMgfCBCUkxfRE9UNCB8IEJSTF9ET1Q2IHwgQlJMX0RPVDddID0gMFg4MCwgLy8gRGVuCitbQlJMX0RPVDEgfCBCUkxfRE9UMiB8IEJSTF9ET1QzIHwgQlJMX0RPVDQgfCBCUkxfRE9UNiB8IEJSTF9ET1Q3IHwgQlJMX0RPVDhdID0gMFhCRSwgLy8gCitbQlJMX0RPVDEgfCBCUkxfRE9UMiB8IEJSTF9ET1QzIHwgQlJMX0RPVDQgfCBCUkxfRE9UNiB8IEJSTF9ET1Q4XSA9IDBYMjYsIC8vICYgYW1wZXIKK1tCUkxfRE9UMSB8IEJSTF9ET1QyIHwgQlJMX0RPVDMgfCBCUkxfRE9UNCB8IEJSTF9ET1Q3XSA9IDBYNTAsIC8vIFAgUH0KK1tCUkxfRE9UMSB8IEJSTF9ET1QyIHwgQlJMX0RPVDMgfCBCUkxfRE9UNCB8IEJSTF9ET1Q3IHwgQlJMX0RPVDhdID0gMFgxMCwgLy8gRExFCitbQlJMX0RPVDEgfCBCUkxfRE9UMiB8IEJSTF9ET1QzIHwgQlJMX0RPVDQgfCBCUkxfRE9UOF0gPSAwWDlFLCAvLyAKK1tCUkxfRE9UMSB8IEJSTF9ET1QyIHwgQlJMX0RPVDMgfCBCUkxfRE9UNV0gPSAwWDcyLCAvLyByIHJpZ3RpZworW0JSTF9ET1QxIHwgQlJMX0RPVDIgfCBCUkxfRE9UMyB8IEJSTF9ET1Q1IHwgQlJMX0RPVDZdID0gMFg4NSwgLy8gcmV0CitbQlJMX0RPVDEgfCBCUkxfRE9UMiB8IEJSTF9ET1QzIHwgQlJMX0RPVDUgfCBCUkxfRE9UNiB8IEJSTF9ET1Q3XSA9IDBYQjcsIC8vIFJldAorW0JSTF9ET1QxIHwgQlJMX0RPVDIgfCBCUkxfRE9UMyB8IEJSTF9ET1Q1IHwgQlJMX0RPVDYgfCBCUkxfRE9UNyB8IEJSTF9ET1Q4XSA9IDBYQjUsIC8vIAorW0JSTF9ET1QxIHwgQlJMX0RPVDIgfCBCUkxfRE9UMyB8IEJSTF9ET1Q1IHwgQlJMX0RPVDYgfCBCUkxfRE9UOF0gPSAwWEEwLCAvLyAKK1tCUkxfRE9UMSB8IEJSTF9ET1QyIHwgQlJMX0RPVDMgfCBCUkxfRE9UNSB8IEJSTF9ET1Q3XSA9IDBYNTIsIC8vIFIgUmlndGlnCitbQlJMX0RPVDEgfCBCUkxfRE9UMiB8IEJSTF9ET1QzIHwgQlJMX0RPVDUgfCBCUkxfRE9UNyB8IEJSTF9ET1Q4XSA9IDBYMTIsIC8vIERDMgorW0JSTF9ET1QxIHwgQlJMX0RPVDIgfCBCUkxfRE9UMyB8IEJSTF9ET1Q1IHwgQlJMX0RPVDhdID0gMFhBRiwgLy8gCitbQlJMX0RPVDEgfCBCUkxfRE9UMiB8IEJSTF9ET1QzIHwgQlJMX0RPVDZdID0gMFg3NiwgLy8gdiB2ZWQKK1tCUkxfRE9UMSB8IEJSTF9ET1QyIHwgQlJMX0RPVDMgfCBCUkxfRE9UNiB8IEJSTF9ET1Q3XSA9IDBYNTYsIC8vIFYgVmVkCitbQlJMX0RPVDEgfCBCUkxfRE9UMiB8IEJSTF9ET1QzIHwgQlJMX0RPVDYgfCBCUkxfRE9UNyB8IEJSTF9ET1Q4XSA9IDBYMTYsIC8vIFNZTgorW0JSTF9ET1QxIHwgQlJMX0RPVDIgfCBCUkxfRE9UMyB8IEJSTF9ET1Q2IHwgQlJMX0RPVDhdID0gMFg1QiwgLy8gwpIgdmVuLmthbnQKK1tCUkxfRE9UMSB8IEJSTF9ET1QyIHwgQlJMX0RPVDMgfCBCUkxfRE9UN10gPSAwWDRDLCAvLyBMIExpZ2UKK1tCUkxfRE9UMSB8IEJSTF9ET1QyIHwgQlJMX0RPVDMgfCBCUkxfRE9UNyB8IEJSTF9ET1Q4XSA9IDBYMEMsIC8vIEZGCitbQlJMX0RPVDEgfCBCUkxfRE9UMiB8IEJSTF9ET1QzIHwgQlJMX0RPVDhdID0gMFg5QywgLy8gCitbQlJMX0RPVDEgfCBCUkxfRE9UMiB8IEJSTF9ET1Q0XSA9IDBYNjYsIC8vIGYgZm9yCitbQlJMX0RPVDEgfCBCUkxfRE9UMiB8IEJSTF9ET1Q0IHwgQlJMX0RPVDVdID0gMFg2NywgLy8gZyBnfHIKK1tCUkxfRE9UMSB8IEJSTF9ET1QyIHwgQlJMX0RPVDQgfCBCUkxfRE9UNSB8IEJSTF9ET1Q2XSA9IDBYOEIsIC8vIGdlbm5lbQorW0JSTF9ET1QxIHwgQlJMX0RPVDIgfCBCUkxfRE9UNCB8IEJSTF9ET1Q1IHwgQlJMX0RPVDYgfCBCUkxfRE9UN10gPSAwWEQ4LCAvLyBHZW5uZW0KK1tCUkxfRE9UMSB8IEJSTF9ET1QyIHwgQlJMX0RPVDQgfCBCUkxfRE9UNSB8IEJSTF9ET1Q2IHwgQlJMX0RPVDcgfCBCUkxfRE9UOF0gPSAwWEE1LCAvLyAKK1tCUkxfRE9UMSB8IEJSTF9ET1QyIHwgQlJMX0RPVDQgfCBCUkxfRE9UNSB8IEJSTF9ET1Q2IHwgQlJMX0RPVDhdID0gMFhBNCwgLy8gCitbQlJMX0RPVDEgfCBCUkxfRE9UMiB8IEJSTF9ET1Q0IHwgQlJMX0RPVDUgfCBCUkxfRE9UN10gPSAwWDQ3LCAvLyBHIEd8cgorW0JSTF9ET1QxIHwgQlJMX0RPVDIgfCBCUkxfRE9UNCB8IEJSTF9ET1Q1IHwgQlJMX0RPVDcgfCBCUkxfRE9UOF0gPSAwWDA3LCAvLyBCRUwKK1tCUkxfRE9UMSB8IEJSTF9ET1QyIHwgQlJMX0RPVDQgfCBCUkxfRE9UNSB8IEJSTF9ET1Q4XSA9IDBYMzcsIC8vIDcgc3l2CitbQlJMX0RPVDEgfCBCUkxfRE9UMiB8IEJSTF9ET1Q0IHwgQlJMX0RPVDZdID0gMFg4OSwgLy8gbmVkCitbQlJMX0RPVDEgfCBCUkxfRE9UMiB8IEJSTF9ET1Q0IHwgQlJMX0RPVDYgfCBCUkxfRE9UN10gPSAwWEQzLCAvLyBOZWQKK1tCUkxfRE9UMSB8IEJSTF9ET1QyIHwgQlJMX0RPVDQgfCBCUkxfRE9UNiB8IEJSTF9ET1Q3IHwgQlJMX0RPVDhdID0gMFhFMywgLy8gCitbQlJMX0RPVDEgfCBCUkxfRE9UMiB8IEJSTF9ET1Q0IHwgQlJMX0RPVDYgfCBCUkxfRE9UOF0gPSAwWDk1LCAvLyAKK1tCUkxfRE9UMSB8IEJSTF9ET1QyIHwgQlJMX0RPVDQgfCBCUkxfRE9UN10gPSAwWDQ2LCAvLyBGIEZvcgorW0JSTF9ET1QxIHwgQlJMX0RPVDIgfCBCUkxfRE9UNCB8IEJSTF9ET1Q3IHwgQlJMX0RPVDhdID0gMFgwNiwgLy8gQUNLCitbQlJMX0RPVDEgfCBCUkxfRE9UMiB8IEJSTF9ET1Q0IHwgQlJMX0RPVDhdID0gMFgzNiwgLy8gNiBzZWtzCitbQlJMX0RPVDEgfCBCUkxfRE9UMiB8IEJSTF9ET1Q1XSA9IDBYNjgsIC8vIGggaGFyCitbQlJMX0RPVDEgfCBCUkxfRE9UMiB8IEJSTF9ET1Q1IHwgQlJMX0RPVDZdID0gMFg4MSwgLy8gdGUKK1tCUkxfRE9UMSB8IEJSTF9ET1QyIHwgQlJMX0RPVDUgfCBCUkxfRE9UNiB8IEJSTF9ET1Q3XSA9IDBYOUEsIC8vIFRlCitbQlJMX0RPVDEgfCBCUkxfRE9UMiB8IEJSTF9ET1Q1IHwgQlJMX0RPVDYgfCBCUkxfRE9UNyB8IEJSTF9ET1Q4XSA9IDBYRTcsIC8vIAorW0JSTF9ET1QxIHwgQlJMX0RPVDIgfCBCUkxfRE9UNSB8IEJSTF9ET1Q2IHwgQlJMX0RPVDhdID0gMFhGNSwgLy8gCitbQlJMX0RPVDEgfCBCUkxfRE9UMiB8IEJSTF9ET1Q1IHwgQlJMX0RPVDddID0gMFg0OCwgLy8gSCBIYXIKK1tCUkxfRE9UMSB8IEJSTF9ET1QyIHwgQlJMX0RPVDUgfCBCUkxfRE9UNyB8IEJSTF9ET1Q4XSA9IDBYMDgsIC8vIEJTCitbQlJMX0RPVDEgfCBCUkxfRE9UMiB8IEJSTF9ET1Q1IHwgQlJMX0RPVDhdID0gMFgzOCwgLy8gOCBvdHRlCitbQlJMX0RPVDEgfCBCUkxfRE9UMiB8IEJSTF9ET1Q2XSA9IDBYODgsIC8vIGVuCitbQlJMX0RPVDEgfCBCUkxfRE9UMiB8IEJSTF9ET1Q2IHwgQlJMX0RPVDddID0gMFhEMiwgLy8gRW4KK1tCUkxfRE9UMSB8IEJSTF9ET1QyIHwgQlJMX0RPVDYgfCBCUkxfRE9UNyB8IEJSTF9ET1Q4XSA9IDBYQ0YsIC8vIAorW0JSTF9ET1QxIHwgQlJMX0RPVDIgfCBCUkxfRE9UNiB8IEJSTF9ET1Q4XSA9IDBYMjgsIC8vICggdmVuLnBhci4KK1tCUkxfRE9UMSB8IEJSTF9ET1QyIHwgQlJMX0RPVDddID0gMFg0MiwgLy8gQiBCbGl2ZXIKK1tCUkxfRE9UMSB8IEJSTF9ET1QyIHwgQlJMX0RPVDcgfCBCUkxfRE9UOF0gPSAwWDAyLCAvLyBTVFgKK1tCUkxfRE9UMSB8IEJSTF9ET1QyIHwgQlJMX0RPVDhdID0gMFgzMiwgLy8gMiB0bworW0JSTF9ET1QxIHwgQlJMX0RPVDNdID0gMFg2QiwgLy8gayBrYW4KK1tCUkxfRE9UMSB8IEJSTF9ET1QzIHwgQlJMX0RPVDRdID0gMFg2RCwgLy8gbSBtZWQKK1tCUkxfRE9UMSB8IEJSTF9ET1QzIHwgQlJMX0RPVDQgfCBCUkxfRE9UNV0gPSAwWDZFLCAvLyBuIG59cgorW0JSTF9ET1QxIHwgQlJMX0RPVDMgfCBCUkxfRE9UNCB8IEJSTF9ET1Q1IHwgQlJMX0RPVDZdID0gMFg3OSwgLy8geSBoYW4KK1tCUkxfRE9UMSB8IEJSTF9ET1QzIHwgQlJMX0RPVDQgfCBCUkxfRE9UNSB8IEJSTF9ET1Q2IHwgQlJMX0RPVDddID0gMFg1OSwgLy8gWSBIYW4KK1tCUkxfRE9UMSB8IEJSTF9ET1QzIHwgQlJMX0RPVDQgfCBCUkxfRE9UNSB8IEJSTF9ET1Q2IHwgQlJMX0RPVDcgfCBCUkxfRE9UOF0gPSAwWDE5LCAvLyBFTQorW0JSTF9ET1QxIHwgQlJMX0RPVDMgfCBCUkxfRE9UNCB8IEJSTF9ET1Q1IHwgQlJMX0RPVDYgfCBCUkxfRE9UOF0gPSAwWEY3LCAvLyAKK1tCUkxfRE9UMSB8IEJSTF9ET1QzIHwgQlJMX0RPVDQgfCBCUkxfRE9UNSB8IEJSTF9ET1Q3XSA9IDBYNEUsIC8vIE4gTn1yCitbQlJMX0RPVDEgfCBCUkxfRE9UMyB8IEJSTF9ET1Q0IHwgQlJMX0RPVDUgfCBCUkxfRE9UNyB8IEJSTF9ET1Q4XSA9IDBYMEUsIC8vIFNPCitbQlJMX0RPVDEgfCBCUkxfRE9UMyB8IEJSTF9ET1Q0IHwgQlJMX0RPVDUgfCBCUkxfRE9UOF0gPSAwWEZDLCAvLyAKK1tCUkxfRE9UMSB8IEJSTF9ET1QzIHwgQlJMX0RPVDQgfCBCUkxfRE9UNl0gPSAwWDc4LCAvLyB4IG92ZXIKK1tCUkxfRE9UMSB8IEJSTF9ET1QzIHwgQlJMX0RPVDQgfCBCUkxfRE9UNiB8IEJSTF9ET1Q3XSA9IDBYNTgsIC8vIFggT3ZlcgorW0JSTF9ET1QxIHwgQlJMX0RPVDMgfCBCUkxfRE9UNCB8IEJSTF9ET1Q2IHwgQlJMX0RPVDcgfCBCUkxfRE9UOF0gPSAwWDE4LCAvLyBDQU4KK1tCUkxfRE9UMSB8IEJSTF9ET1QzIHwgQlJMX0RPVDQgfCBCUkxfRE9UNiB8IEJSTF9ET1Q4XSA9IDBYMkEsIC8vICogc3RqZXJuZQorW0JSTF9ET1QxIHwgQlJMX0RPVDMgfCBCUkxfRE9UNCB8IEJSTF9ET1Q3XSA9IDBYNEQsIC8vIE0gTWVkCitbQlJMX0RPVDEgfCBCUkxfRE9UMyB8IEJSTF9ET1Q0IHwgQlJMX0RPVDcgfCBCUkxfRE9UOF0gPSAwWDBELCAvLyBDUgorW0JSTF9ET1QxIHwgQlJMX0RPVDMgfCBCUkxfRE9UNCB8IEJSTF9ET1Q4XSA9IDBYM0MsIC8vIDwgbWluZHJlCitbQlJMX0RPVDEgfCBCUkxfRE9UMyB8IEJSTF9ET1Q1XSA9IDBYNkYsIC8vIG8gb3AKK1tCUkxfRE9UMSB8IEJSTF9ET1QzIHwgQlJMX0RPVDUgfCBCUkxfRE9UNl0gPSAwWDdBLCAvLyB6IGVmdGVyCitbQlJMX0RPVDEgfCBCUkxfRE9UMyB8IEJSTF9ET1Q1IHwgQlJMX0RPVDYgfCBCUkxfRE9UN10gPSAwWDVBLCAvLyBaIEVmdGVyCitbQlJMX0RPVDEgfCBCUkxfRE9UMyB8IEJSTF9ET1Q1IHwgQlJMX0RPVDYgfCBCUkxfRE9UNyB8IEJSTF9ET1Q4XSA9IDBYMUEsIC8vIFNVQgorW0JSTF9ET1QxIHwgQlJMX0RPVDMgfCBCUkxfRE9UNSB8IEJSTF9ET1Q2IHwgQlJMX0RPVDhdID0gMFhGMiwgLy8gCitbQlJMX0RPVDEgfCBCUkxfRE9UMyB8IEJSTF9ET1Q1IHwgQlJMX0RPVDddID0gMFg0RiwgLy8gTyBPcAorW0JSTF9ET1QxIHwgQlJMX0RPVDMgfCBCUkxfRE9UNSB8IEJSTF9ET1Q3IHwgQlJMX0RPVDhdID0gMFgwRiwgLy8gU0kKK1tCUkxfRE9UMSB8IEJSTF9ET1QzIHwgQlJMX0RPVDUgfCBCUkxfRE9UOF0gPSAwWDdELCAvLyDChiB0dWIgc2x1dAorW0JSTF9ET1QxIHwgQlJMX0RPVDMgfCBCUkxfRE9UNl0gPSAwWDc1LCAvLyB1IGh1bgorW0JSTF9ET1QxIHwgQlJMX0RPVDMgfCBCUkxfRE9UNiB8IEJSTF9ET1Q3XSA9IDBYNTUsIC8vIFUgSHVuCitbQlJMX0RPVDEgfCBCUkxfRE9UMyB8IEJSTF9ET1Q2IHwgQlJMX0RPVDcgfCBCUkxfRE9UOF0gPSAwWDE1LCAvLyBOQUMKK1tCUkxfRE9UMSB8IEJSTF9ET1QzIHwgQlJMX0RPVDYgfCBCUkxfRE9UOF0gPSAwWEVDLCAvLyAKK1tCUkxfRE9UMSB8IEJSTF9ET1QzIHwgQlJMX0RPVDddID0gMFg0QiwgLy8gSyBLYW4KK1tCUkxfRE9UMSB8IEJSTF9ET1QzIHwgQlJMX0RPVDcgfCBCUkxfRE9UOF0gPSAwWDBCLCAvLyBWVAorW0JSTF9ET1QxIHwgQlJMX0RPVDMgfCBCUkxfRE9UOF0gPSAwWEFCLCAvLyAKK1tCUkxfRE9UMSB8IEJSTF9ET1Q0XSA9IDBYNjMsIC8vIGMgb2cKK1tCUkxfRE9UMSB8IEJSTF9ET1Q0IHwgQlJMX0RPVDVdID0gMFg2NCwgLy8gZCBkdQorW0JSTF9ET1QxIHwgQlJMX0RPVDQgfCBCUkxfRE9UNSB8IEJSTF9ET1Q2XSA9IDBYOTMsIC8vIGRlCitbQlJMX0RPVDEgfCBCUkxfRE9UNCB8IEJSTF9ET1Q1IHwgQlJMX0RPVDYgfCBCUkxfRE9UN10gPSAwWEUyLCAvLyBEZQorW0JSTF9ET1QxIHwgQlJMX0RPVDQgfCBCUkxfRE9UNSB8IEJSTF9ET1Q2IHwgQlJMX0RPVDcgfCBCUkxfRE9UOF0gPSAwWEU4LCAvLyAKK1tCUkxfRE9UMSB8IEJSTF9ET1Q0IHwgQlJMX0RPVDUgfCBCUkxfRE9UNiB8IEJSTF9ET1Q4XSA9IDBYNUQsIC8vIMKPIGh8ai5rYW50CitbQlJMX0RPVDEgfCBCUkxfRE9UNCB8IEJSTF9ET1Q1IHwgQlJMX0RPVDddID0gMFg0NCwgLy8gRCBEdQorW0JSTF9ET1QxIHwgQlJMX0RPVDQgfCBCUkxfRE9UNSB8IEJSTF9ET1Q3IHwgQlJMX0RPVDhdID0gMFgwNCwgLy8gRU9UCitbQlJMX0RPVDEgfCBCUkxfRE9UNCB8IEJSTF9ET1Q1IHwgQlJMX0RPVDhdID0gMFgzNCwgLy8gNCBmaXJlCitbQlJMX0RPVDEgfCBCUkxfRE9UNCB8IEJSTF9ET1Q2XSA9IDBYOEMsIC8vIG1lbgorW0JSTF9ET1QxIHwgQlJMX0RPVDQgfCBCUkxfRE9UNiB8IEJSTF9ET1Q3XSA9IDBYRDcsIC8vIE1lbgorW0JSTF9ET1QxIHwgQlJMX0RPVDQgfCBCUkxfRE9UNiB8IEJSTF9ET1Q3IHwgQlJMX0RPVDhdID0gMFhFNiwgLy8gCitbQlJMX0RPVDEgfCBCUkxfRE9UNCB8IEJSTF9ET1Q2IHwgQlJMX0RPVDhdID0gMFhGQiwgLy8gCitbQlJMX0RPVDEgfCBCUkxfRE9UNCB8IEJSTF9ET1Q3XSA9IDBYNDMsIC8vIEMgT2cKK1tCUkxfRE9UMSB8IEJSTF9ET1Q0IHwgQlJMX0RPVDcgfCBCUkxfRE9UOF0gPSAwWDAzLCAvLyBFVFgKK1tCUkxfRE9UMSB8IEJSTF9ET1Q0IHwgQlJMX0RPVDhdID0gMFgzMywgLy8gMyB0cmUKK1tCUkxfRE9UMSB8IEJSTF9ET1Q1XSA9IDBYNjUsIC8vIGUgZWxsZXIKK1tCUkxfRE9UMSB8IEJSTF9ET1Q1IHwgQlJMX0RPVDZdID0gMFg5NiwgLy8gZXIKK1tCUkxfRE9UMSB8IEJSTF9ET1Q1IHwgQlJMX0RPVDYgfCBCUkxfRE9UN10gPSAwWEVBLCAvLyBFcgorW0JSTF9ET1QxIHwgQlJMX0RPVDUgfCBCUkxfRE9UNiB8IEJSTF9ET1Q3IHwgQlJMX0RPVDhdID0gMFhFNCwgLy8gCitbQlJMX0RPVDEgfCBCUkxfRE9UNSB8IEJSTF9ET1Q2IHwgQlJMX0RPVDhdID0gMFgyNCwgLy8gJCBkb2xsYXIKK1tCUkxfRE9UMSB8IEJSTF9ET1Q1IHwgQlJMX0RPVDddID0gMFg0NSwgLy8gRSBFbGxlcgorW0JSTF9ET1QxIHwgQlJMX0RPVDUgfCBCUkxfRE9UNyB8IEJSTF9ET1Q4XSA9IDBYMDUsIC8vIEVOUQorW0JSTF9ET1QxIHwgQlJMX0RPVDUgfCBCUkxfRE9UOF0gPSAwWDM1LCAvLyA1IGZlbQorW0JSTF9ET1QxIHwgQlJMX0RPVDZdID0gMFg4NiwgLy8gfSBzfQorW0JSTF9ET1QxIHwgQlJMX0RPVDYgfCBCUkxfRE9UN10gPSAwWDhGLCAvLyBdIFN9CitbQlJMX0RPVDEgfCBCUkxfRE9UNiB8IEJSTF9ET1Q3IHwgQlJMX0RPVDhdID0gMFgxRCwgLy8gR1MKK1tCUkxfRE9UMSB8IEJSTF9ET1Q2IHwgQlJMX0RPVDhdID0gMFg1QywgLy8gwp0gYmFja3NsLgorW0JSTF9ET1QxIHwgQlJMX0RPVDddID0gMFg0MSwgLy8gQSBBdAorW0JSTF9ET1QxIHwgQlJMX0RPVDcgfCBCUkxfRE9UOF0gPSAwWDAxLCAvLyBTT0gKK1tCUkxfRE9UMSB8IEJSTF9ET1Q4XSA9IDBYMzEsIC8vIDEgZW4sZXQKK1tCUkxfRE9UMl0gPSAwWDJDLCAvLyAsIGtvbW1hCitbQlJMX0RPVDIgfCBCUkxfRE9UM10gPSAwWDNCLCAvLyA7IHNlbWlrb2wuCitbQlJMX0RPVDIgfCBCUkxfRE9UMyB8IEJSTF9ET1Q0XSA9IDBYNzMsIC8vIHMgc29tCitbQlJMX0RPVDIgfCBCUkxfRE9UMyB8IEJSTF9ET1Q0IHwgQlJMX0RPVDVdID0gMFg3NCwgLy8gdCB0aWwKK1tCUkxfRE9UMiB8IEJSTF9ET1QzIHwgQlJMX0RPVDQgfCBCUkxfRE9UNSB8IEJSTF9ET1Q2XSA9IDBYOTcsIC8vIGRlcgorW0JSTF9ET1QyIHwgQlJMX0RPVDMgfCBCUkxfRE9UNCB8IEJSTF9ET1Q1IHwgQlJMX0RPVDYgfCBCUkxfRE9UN10gPSAwWEVCLCAvLyBEZXIKK1tCUkxfRE9UMiB8IEJSTF9ET1QzIHwgQlJMX0RPVDQgfCBCUkxfRE9UNSB8IEJSTF9ET1Q2IHwgQlJMX0RPVDcgfCBCUkxfRE9UOF0gPSAwWEU5LCAvLyAKK1tCUkxfRE9UMiB8IEJSTF9ET1QzIHwgQlJMX0RPVDQgfCBCUkxfRE9UNSB8IEJSTF9ET1Q2IHwgQlJMX0RPVDhdID0gMFhBMywgLy8gCitbQlJMX0RPVDIgfCBCUkxfRE9UMyB8IEJSTF9ET1Q0IHwgQlJMX0RPVDUgfCBCUkxfRE9UN10gPSAwWDU0LCAvLyBUIFRpbAorW0JSTF9ET1QyIHwgQlJMX0RPVDMgfCBCUkxfRE9UNCB8IEJSTF9ET1Q1IHwgQlJMX0RPVDcgfCBCUkxfRE9UOF0gPSAwWDE0LCAvLyBEQzQKK1tCUkxfRE9UMiB8IEJSTF9ET1QzIHwgQlJMX0RPVDQgfCBCUkxfRE9UNSB8IEJSTF9ET1Q4XSA9IDBYRjQsIC8vIAorW0JSTF9ET1QyIHwgQlJMX0RPVDMgfCBCUkxfRE9UNCB8IEJSTF9ET1Q2XSA9IDBYOEEsIC8vIGRldAorW0JSTF9ET1QyIHwgQlJMX0RPVDMgfCBCUkxfRE9UNCB8IEJSTF9ET1Q2IHwgQlJMX0RPVDddID0gMFhENCwgLy8gRGV0CitbQlJMX0RPVDIgfCBCUkxfRE9UMyB8IEJSTF9ET1Q0IHwgQlJMX0RPVDYgfCBCUkxfRE9UNyB8IEJSTF9ET1Q4XSA9IDBYRDAsIC8vIAorW0JSTF9ET1QyIHwgQlJMX0RPVDMgfCBCUkxfRE9UNCB8IEJSTF9ET1Q2IHwgQlJMX0RPVDhdID0gMFhGMywgLy8gCitbQlJMX0RPVDIgfCBCUkxfRE9UMyB8IEJSTF9ET1Q0IHwgQlJMX0RPVDddID0gMFg1MywgLy8gUyBTb20KK1tCUkxfRE9UMiB8IEJSTF9ET1QzIHwgQlJMX0RPVDQgfCBCUkxfRE9UNyB8IEJSTF9ET1Q4XSA9IDBYMTMsIC8vIERDMworW0JSTF9ET1QyIHwgQlJMX0RPVDMgfCBCUkxfRE9UNCB8IEJSTF9ET1Q4XSA9IDBYM0UsIC8vID4gc3R8cnJlCitbQlJMX0RPVDIgfCBCUkxfRE9UMyB8IEJSTF9ET1Q1XSA9IDBYQ0EsIC8vIGZyYQorW0JSTF9ET1QyIHwgQlJMX0RPVDMgfCBCUkxfRE9UNSB8IEJSTF9ET1Q2XSA9IDBYMjIsIC8vICIgYW5mfHJzZWwKK1tCUkxfRE9UMiB8IEJSTF9ET1QzIHwgQlJMX0RPVDUgfCBCUkxfRE9UNiB8IEJSTF9ET1Q3XSA9IDBYNjAsIC8vIGAgYWNjLmdyYXYKK1tCUkxfRE9UMiB8IEJSTF9ET1QzIHwgQlJMX0RPVDUgfCBCUkxfRE9UNiB8IEJSTF9ET1Q3IHwgQlJMX0RPVDhdID0gMFhERiwgLy8gCitbQlJMX0RPVDIgfCBCUkxfRE9UMyB8IEJSTF9ET1Q1IHwgQlJMX0RPVDYgfCBCUkxfRE9UOF0gPSAwWDNELCAvLyA9IGxpZyBtZWQKK1tCUkxfRE9UMiB8IEJSTF9ET1QzIHwgQlJMX0RPVDUgfCBCUkxfRE9UN10gPSAwWEMyLCAvLyBGcmEKK1tCUkxfRE9UMiB8IEJSTF9ET1QzIHwgQlJMX0RPVDUgfCBCUkxfRE9UNyB8IEJSTF9ET1Q4XSA9IDBYQUQsIC8vIAorW0JSTF9ET1QyIHwgQlJMX0RPVDMgfCBCUkxfRE9UNSB8IEJSTF9ET1Q4XSA9IDBYMkIsIC8vICsgcGx1cworW0JSTF9ET1QyIHwgQlJMX0RPVDMgfCBCUkxfRE9UNl0gPSAwWENCLCAvLyBoYW0KK1tCUkxfRE9UMiB8IEJSTF9ET1QzIHwgQlJMX0RPVDYgfCBCUkxfRE9UN10gPSAwWEMzLCAvLyBIYW0KK1tCUkxfRE9UMiB8IEJSTF9ET1QzIHwgQlJMX0RPVDYgfCBCUkxfRE9UNyB8IEJSTF9ET1Q4XSA9IDBYRTUsIC8vIAorW0JSTF9ET1QyIHwgQlJMX0RPVDMgfCBCUkxfRE9UNiB8IEJSTF9ET1Q4XSA9IDBYRkUsIC8vIAorW0JSTF9ET1QyIHwgQlJMX0RPVDMgfCBCUkxfRE9UN10gPSAwWEM2LCAvLyAKK1tCUkxfRE9UMiB8IEJSTF9ET1QzIHwgQlJMX0RPVDcgfCBCUkxfRE9UOF0gPSAwWEM3LCAvLyAKK1tCUkxfRE9UMiB8IEJSTF9ET1QzIHwgQlJMX0RPVDhdID0gMFhBQywgLy8gCitbQlJMX0RPVDIgfCBCUkxfRE9UNF0gPSAwWDY5LCAvLyBpCitbQlJMX0RPVDIgfCBCUkxfRE9UNCB8IEJSTF9ET1Q1XSA9IDBYNkEsIC8vIGogamVnCitbQlJMX0RPVDIgfCBCUkxfRE9UNCB8IEJSTF9ET1Q1IHwgQlJMX0RPVDZdID0gMFg3NywgLy8gdyBodmFkCitbQlJMX0RPVDIgfCBCUkxfRE9UNCB8IEJSTF9ET1Q1IHwgQlJMX0RPVDYgfCBCUkxfRE9UN10gPSAwWDU3LCAvLyBXIEh2YWQKK1tCUkxfRE9UMiB8IEJSTF9ET1Q0IHwgQlJMX0RPVDUgfCBCUkxfRE9UNiB8IEJSTF9ET1Q3IHwgQlJMX0RPVDhdID0gMFgxNywgLy8gRVRCCitbQlJMX0RPVDIgfCBCUkxfRE9UNCB8IEJSTF9ET1Q1IHwgQlJMX0RPVDYgfCBCUkxfRE9UOF0gPSAwWEFFLCAvLyAKK1tCUkxfRE9UMiB8IEJSTF9ET1Q0IHwgQlJMX0RPVDUgfCBCUkxfRE9UN10gPSAwWDRBLCAvLyBKIEplZworW0JSTF9ET1QyIHwgQlJMX0RPVDQgfCBCUkxfRE9UNSB8IEJSTF9ET1Q3IHwgQlJMX0RPVDhdID0gMFgwQSwgLy8gTEYKK1tCUkxfRE9UMiB8IEJSTF9ET1Q0IHwgQlJMX0RPVDUgfCBCUkxfRE9UOF0gPSAwWDMwLCAvLyAwIG51bAorW0JSTF9ET1QyIHwgQlJMX0RPVDQgfCBCUkxfRE9UNl0gPSAwWDlCLCAvLyB8IGZ8cgorW0JSTF9ET1QyIHwgQlJMX0RPVDQgfCBCUkxfRE9UNiB8IEJSTF9ET1Q3XSA9IDBYOUQsIC8vIFwgRnxyCitbQlJMX0RPVDIgfCBCUkxfRE9UNCB8IEJSTF9ET1Q2IHwgQlJMX0RPVDcgfCBCUkxfRE9UOF0gPSAwWDFDLCAvLyBGUworW0JSTF9ET1QyIHwgQlJMX0RPVDQgfCBCUkxfRE9UNiB8IEJSTF9ET1Q4XSA9IDBYN0IsIC8vIMKRIHR1YiBiZWcKK1tCUkxfRE9UMiB8IEJSTF9ET1Q0IHwgQlJMX0RPVDddID0gMFg0OSwgLy8gSQorW0JSTF9ET1QyIHwgQlJMX0RPVDQgfCBCUkxfRE9UNyB8IEJSTF9ET1Q4XSA9IDBYMDksIC8vIEhUCitbQlJMX0RPVDIgfCBCUkxfRE9UNCB8IEJSTF9ET1Q4XSA9IDBYMzksIC8vIDkgbmkKK1tCUkxfRE9UMiB8IEJSTF9ET1Q1XSA9IDBYM0EsIC8vIDoga29sb24KK1tCUkxfRE9UMiB8IEJSTF9ET1Q1IHwgQlJMX0RPVDZdID0gMFhDOSwgLy8gZGVyZXMKK1tCUkxfRE9UMiB8IEJSTF9ET1Q1IHwgQlJMX0RPVDYgfCBCUkxfRE9UN10gPSAwWEMxLCAvLyBEZXJlcworW0JSTF9ET1QyIHwgQlJMX0RPVDUgfCBCUkxfRE9UNiB8IEJSTF9ET1Q3IHwgQlJMX0RPVDhdID0gMFhFRCwgLy8gCitbQlJMX0RPVDIgfCBCUkxfRE9UNSB8IEJSTF9ET1Q2IHwgQlJMX0RPVDhdID0gMFhGNiwgLy8gCitbQlJMX0RPVDIgfCBCUkxfRE9UNSB8IEJSTF9ET1Q3XSA9IDBYQjgsIC8vIAorW0JSTF9ET1QyIHwgQlJMX0RPVDUgfCBCUkxfRE9UNyB8IEJSTF9ET1Q4XSA9IDBYQkQsIC8vIAorW0JSTF9ET1QyIHwgQlJMX0RPVDUgfCBCUkxfRE9UOF0gPSAwWDJGLCAvLyAvIGh8ai5za3J9CitbQlJMX0RPVDIgfCBCUkxfRE9UNl0gPSAwWDNGLCAvLyA/IHNwfHJnc20uCitbQlJMX0RPVDIgfCBCUkxfRE9UNiB8IEJSTF9ET1Q3XSA9IDBYQTcsIC8vIAorW0JSTF9ET1QyIHwgQlJMX0RPVDYgfCBCUkxfRE9UNyB8IEJSTF9ET1Q4XSA9IDBYQTgsIC8vIAorW0JSTF9ET1QyIHwgQlJMX0RPVDYgfCBCUkxfRE9UOF0gPSAwWEVFLCAvLyAKK1tCUkxfRE9UMiB8IEJSTF9ET1Q3XSA9IDBYQTYsIC8vIAorW0JSTF9ET1QyIHwgQlJMX0RPVDcgfCBCUkxfRE9UOF0gPSAwWEI2LCAvLyAKK1tCUkxfRE9UMiB8IEJSTF9ET1Q4XSA9IDBYODMsIC8vIAorW0JSTF9ET1QzXSA9IDBYMkUsIC8vIC4gcHVua3R1bQorW0JSTF9ET1QzIHwgQlJMX0RPVDRdID0gMFg5OCwgLy8gaHZvcgorW0JSTF9ET1QzIHwgQlJMX0RPVDQgfCBCUkxfRE9UNV0gPSAwWDkxLCAvLyB7IHZ7cmUKK1tCUkxfRE9UMyB8IEJSTF9ET1Q0IHwgQlJMX0RPVDUgfCBCUkxfRE9UNl0gPSAwWERDLCAvLyB2ZQorW0JSTF9ET1QzIHwgQlJMX0RPVDQgfCBCUkxfRE9UNSB8IEJSTF9ET1Q2IHwgQlJMX0RPVDddID0gMFhEQSwgLy8gVmUKK1tCUkxfRE9UMyB8IEJSTF9ET1Q0IHwgQlJMX0RPVDUgfCBCUkxfRE9UNiB8IEJSTF9ET1Q3IHwgQlJMX0RPVDhdID0gMFhERCwgLy8gCitbQlJMX0RPVDMgfCBCUkxfRE9UNCB8IEJSTF9ET1Q1IHwgQlJMX0RPVDYgfCBCUkxfRE9UOF0gPSAwWDIzLCAvLyAjIG51bW1lcgorW0JSTF9ET1QzIHwgQlJMX0RPVDQgfCBCUkxfRE9UNSB8IEJSTF9ET1Q3XSA9IDBYOTIsIC8vIFsgVntyZQorW0JSTF9ET1QzIHwgQlJMX0RPVDQgfCBCUkxfRE9UNSB8IEJSTF9ET1Q3IHwgQlJMX0RPVDhdID0gMFgxQiwgLy8gRVNDCitbQlJMX0RPVDMgfCBCUkxfRE9UNCB8IEJSTF9ET1Q1IHwgQlJMX0RPVDhdID0gMFgyOSwgLy8gKSBofGoucGFyLgorW0JSTF9ET1QzIHwgQlJMX0RPVDQgfCBCUkxfRE9UNl0gPSAwWERCLCAvLyBldAorW0JSTF9ET1QzIHwgQlJMX0RPVDQgfCBCUkxfRE9UNiB8IEJSTF9ET1Q3XSA9IDBYRDksIC8vIEV0CitbQlJMX0RPVDMgfCBCUkxfRE9UNCB8IEJSTF9ET1Q2IHwgQlJMX0RPVDcgfCBCUkxfRE9UOF0gPSAwWEUwLCAvLyAKK1tCUkxfRE9UMyB8IEJSTF9ET1Q0IHwgQlJMX0RPVDYgfCBCUkxfRE9UOF0gPSAwWEEyLCAvLyAKK1tCUkxfRE9UMyB8IEJSTF9ET1Q0IHwgQlJMX0RPVDddID0gMFhCMCwgLy8gSHZvcgorW0JSTF9ET1QzIHwgQlJMX0RPVDQgfCBCUkxfRE9UNyB8IEJSTF9ET1Q4XSA9IDBYRDYsIC8vIAorW0JSTF9ET1QzIHwgQlJMX0RPVDQgfCBCUkxfRE9UOF0gPSAwWEExLCAvLyAKK1tCUkxfRE9UMyB8IEJSTF9ET1Q1XSA9IDBYQ0MsIC8vIGlnZW4KK1tCUkxfRE9UMyB8IEJSTF9ET1Q1IHwgQlJMX0RPVDZdID0gMFhDOCwgLy8gYWYKK1tCUkxfRE9UMyB8IEJSTF9ET1Q1IHwgQlJMX0RPVDYgfCBCUkxfRE9UN10gPSAwWEMwLCAvLyBBZgorW0JSTF9ET1QzIHwgQlJMX0RPVDUgfCBCUkxfRE9UNiB8IEJSTF9ET1Q3IHwgQlJMX0RPVDhdID0gMFhEMSwgLy8gCitbQlJMX0RPVDMgfCBCUkxfRE9UNSB8IEJSTF9ET1Q2IHwgQlJMX0RPVDhdID0gMFgyNSwgLy8gJSBwcm9jZW50CitbQlJMX0RPVDMgfCBCUkxfRE9UNSB8IEJSTF9ET1Q3XSA9IDBYQzQsIC8vIElnZW4KK1tCUkxfRE9UMyB8IEJSTF9ET1Q1IHwgQlJMX0RPVDcgfCBCUkxfRE9UOF0gPSAwWDk5LCAvLyAKK1tCUkxfRE9UMyB8IEJSTF9ET1Q1IHwgQlJMX0RPVDhdID0gMFg5NCwgLy8gCitbQlJMX0RPVDMgfCBCUkxfRE9UNl0gPSAwWENELCAvLyB2YXIKK1tCUkxfRE9UMyB8IEJSTF9ET1Q2IHwgQlJMX0RPVDddID0gMFhDNSwgLy8gVmFyCitbQlJMX0RPVDMgfCBCUkxfRE9UNiB8IEJSTF9ET1Q3IHwgQlJMX0RPVDhdID0gMFgxRiwgLy8gVVMKK1tCUkxfRE9UMyB8IEJSTF9ET1Q2IHwgQlJMX0RPVDhdID0gMFgyRCwgLy8gLSBtaW4sYmluZAorW0JSTF9ET1QzIHwgQlJMX0RPVDddID0gMFg5RiwgLy8gCitbQlJMX0RPVDMgfCBCUkxfRE9UNyB8IEJSTF9ET1Q4XSA9IDBYQTksIC8vIAorW0JSTF9ET1QzIHwgQlJMX0RPVDhdID0gMFhGQSwgLy8gCitbQlJMX0RPVDRdID0gMFhCOSwgLy8gYW4KK1tCUkxfRE9UNCB8IEJSTF9ET1Q1XSA9IDBYQkEsIC8vIGJlCitbQlJMX0RPVDQgfCBCUkxfRE9UNSB8IEJSTF9ET1Q2XSA9IDBYQkMsIC8vIGxlCitbQlJMX0RPVDQgfCBCUkxfRE9UNSB8IEJSTF9ET1Q2IHwgQlJMX0RPVDddID0gMFhCNCwgLy8gTGUKK1tCUkxfRE9UNCB8IEJSTF9ET1Q1IHwgQlJMX0RPVDYgfCBCUkxfRE9UNyB8IEJSTF9ET1Q4XSA9IDBYRDUsIC8vIAorW0JSTF9ET1Q0IHwgQlJMX0RPVDUgfCBCUkxfRE9UNiB8IEJSTF9ET1Q4XSA9IDBYN0MsIC8vIMKbIGxvZHJldAorW0JSTF9ET1Q0IHwgQlJMX0RPVDUgfCBCUkxfRE9UN10gPSAwWEIyLCAvLyBCZQorW0JSTF9ET1Q0IHwgQlJMX0RPVDUgfCBCUkxfRE9UNyB8IEJSTF9ET1Q4XSA9IDBYMUUsIC8vIFJTCitbQlJMX0RPVDQgfCBCUkxfRE9UNSB8IEJSTF9ET1Q4XSA9IDBYRkQsIC8vIAorW0JSTF9ET1Q0IHwgQlJMX0RPVDZdID0gMFhCQiwgLy8ga2UKK1tCUkxfRE9UNCB8IEJSTF9ET1Q2IHwgQlJMX0RPVDddID0gMFhCMywgLy8gS2UKK1tCUkxfRE9UNCB8IEJSTF9ET1Q2IHwgQlJMX0RPVDcgfCBCUkxfRE9UOF0gPSAwWENFLCAvLyAKK1tCUkxfRE9UNCB8IEJSTF9ET1Q2IHwgQlJMX0RPVDhdID0gMFhFRiwgLy8gCitbQlJMX0RPVDQgfCBCUkxfRE9UN10gPSAwWEIxLCAvLyBBbgorW0JSTF9ET1Q0IHwgQlJMX0RPVDcgfCBCUkxfRE9UOF0gPSAwWDQwLCAvLyBAIG1hc3RlcgorW0JSTF9ET1Q0IHwgQlJMX0RPVDhdID0gMFhGOCwgLy8gCitbQlJMX0RPVDVdID0gMFhCRiwgLy8gb3BsfHNuLgorW0JSTF9ET1Q1IHwgQlJMX0RPVDZdID0gMFgyMSwgLy8gISB1ZHJ9YgorW0JSTF9ET1Q1IHwgQlJMX0RPVDYgfCBCUkxfRE9UN10gPSAwWDg0LCAvLyAKK1tCUkxfRE9UNSB8IEJSTF9ET1Q2IHwgQlJMX0RPVDcgfCBCUkxfRE9UOF0gPSAwWDhFLCAvLyAKK1tCUkxfRE9UNSB8IEJSTF9ET1Q2IHwgQlJMX0RPVDhdID0gMFhFMSwgLy8gCitbQlJMX0RPVDUgfCBCUkxfRE9UN10gPSAwWDhELCAvLyAKK1tCUkxfRE9UNSB8IEJSTF9ET1Q3IHwgQlJMX0RPVDhdID0gMFhERSwgLy8gCitbQlJMX0RPVDUgfCBCUkxfRE9UOF0gPSAwWEY5LCAvLyAKK1tCUkxfRE9UNl0gPSAwWDI3LCAvLyAnIGFwb3N0cm9mCitbQlJMX0RPVDYgfCBCUkxfRE9UN10gPSAwWDVFLCAvLyBeIGhhdAorW0JSTF9ET1Q2IHwgQlJMX0RPVDcgfCBCUkxfRE9UOF0gPSAwWEFBLCAvLyAKK1tCUkxfRE9UNiB8IEJSTF9ET1Q4XSA9IDBYN0UsIC8vIH4gdGlsZGUKK1tCUkxfRE9UN10gPSAwWEZGLCAvLyAoY2F1c2VzIHByb2JsZW1zIHNvIGNvbnZlcnRlZCB0byBTVUIpCitbQlJMX0RPVDcgfCBCUkxfRE9UOF0gPSAwWDVGLCAvLyBfIHVuZC5zdHIuCitbQlJMX0RPVDhdID0gMFg3RiAgLy8gCmRpZmYgLS1naXQgYS9Ecml2ZXJzL0JyYWlsbGUvTURWL01ha2VmaWxlLmluIGIvRHJpdmVycy9CcmFpbGxlL01EVi9NYWtlZmlsZS5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMTJhMmYwCi0tLSAvZGV2L251bGwKKysrIGIvRHJpdmVycy9CcmFpbGxlL01EVi9NYWtlZmlsZS5pbgpAQCAtMCwwICsxLDI4IEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisjICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorIworIyBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisjCisjIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisjCisjIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyMgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorIyBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyMKKyMgV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworIworIyBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworRFJJVkVSX0NPREUgPSBtZAorRFJJVkVSX05BTUUgPSBNRFYKK0RSSVZFUl9VU0FHRSA9IE1CMjA4LCBNQjI0OCwgTUI0MDhMLCBNQjQwOEwrLCBMaWxsaSBCbHUKK0RSSVZFUl9WRVJTSU9OID0gCitEUklWRVJfREVWRUxPUEVSUyA9IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4KK2luY2x1ZGUgJChTUkNfVE9QKWJyYWlsbGUubWsKKworYnJhaWxsZS4kTzoKKwkkKENDKSAkKEJSTF9DRkxBR1MpIC1jICQoU1JDX0RJUikvYnJhaWxsZS5jCisKZGlmZiAtLWdpdCBhL0RyaXZlcnMvQnJhaWxsZS9NRFYvUkVBRE1FIGIvRHJpdmVycy9CcmFpbGxlL01EVi9SRUFETUUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjI1MmI0OAotLS0gL2Rldi9udWxsCisrKyBiL0RyaXZlcnMvQnJhaWxsZS9NRFYvUkVBRE1FCkBAIC0wLDAgKzEsMTQgQEAKK0JyYWlsbGUgZGlzcGxheSBkcml2ZXIgZm9yIE1EViBkaXNwbGF5cworCitXcml0dGVuIGJ5IFN06XBoYW5lIERveW9uIChzLmRveW9uQHZpZGVvdHJvbi5jYSkgaW4gY29sbGFib3JhdGlvbiB3aXRoCitTaW1vbmUgRGFsIE1hc28gPHNkYWxtYXNvQHByb3RlYy5pdD4uCisKK1RoaXMgaXMgdmVyc2lvbiAwLjggKEF1Z3VzdCAyMDAwKSBvZiB0aGlzIGRyaXZlci4KK0l0IGlzIGJlaW5nIHRlc3RlZCBvbiBNQjQwOFMsIHNob3VsZCBhbHNvIHN1cHBvcnQgTUIyMDggYW5kIE1CNDA4TC4KKworU2V0IE1EViB0byB1c2UgcHJvdG9jb2wgNS4KKworVGhpcyB2ZXJzaW9uIGFkZHMgYSBsb3QgdG8gdGhlIHByZXZpb3VzbHkgcmVsZWFzZWQgdmVyc2lvbiwgYW5kIGF0dGVtcHRzIHRvCitjb3JyZWN0IGEgYnVnIGluIHRoZSBsYXN0IGFscGhhIGRldmVsb3BtZW50IHZlcnNpb24uIEhvd2V2ZXIgdGhlIGN1cnJlbnQKK3ZlcnNpb24gaGFzIG5vdCBiZWVuIHRlc3RlZCB5ZXQsIEkgYW0gc3RpbGwgd2FpdGluZyBmb3IgZmVlZGJhY2ssIHNvIGl0IGlzIG5vdAoraW1wb3NzaWJsZSBmb3IgaXQgdG8gYmUgY29tcGxldGVseSBicm9rZW4hCmRpZmYgLS1naXQgYS9Ecml2ZXJzL0JyYWlsbGUvTURWL2JyYWlsbGUuYyBiL0RyaXZlcnMvQnJhaWxsZS9NRFYvYnJhaWxsZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRkMWM3MWQKLS0tIC9kZXYvbnVsbAorKysgYi9Ecml2ZXJzL0JyYWlsbGUvTURWL2JyYWlsbGUuYwpAQCAtMCwwICsxLDUyNCBAQAorLyoKKyAqIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisgKiAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisgKgorICogQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKKyNpbmNsdWRlICJwcm9sb2d1ZS5oIgorCisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKworI2luY2x1ZGUgImxvZy5oIgorI2luY2x1ZGUgImFzY2lpLmgiCisKKyNkZWZpbmUgQlJMX1NUQVRVU19GSUVMRFMgc2ZXaW5kb3dDb29yZGluYXRlczIKKyNkZWZpbmUgQlJMX0hBVkVfU1RBVFVTX0NFTExTCisKKyNpbmNsdWRlICJicmxfZHJpdmVyLmgiCisjaW5jbHVkZSAiYnJsZGVmcy1tZC5oIgorCisjZGVmaW5lIFBST0JFX1JFVFJZX0xJTUlUIDIKKyNkZWZpbmUgUFJPQkVfSU5QVVRfVElNRU9VVCAxMDAwCisKKyNkZWZpbmUgTUFYSU1VTV9URVhUX0NFTExTIDgwCisjZGVmaW5lIE1BWElNVU1fU1RBVFVTX0NFTExTIDIKKworQkVHSU5fS0VZX05BTUVfVEFCTEUoY29tbW9uKQorICBCUkxfS0VZX05BTUVfRU5UUlkoTUQsIE5BViwgTEVGVCwgIkxlZnQiKSwKKyAgQlJMX0tFWV9OQU1FX0VOVFJZKE1ELCBOQVYsIFVQLCAiVXAiKSwKKyAgQlJMX0tFWV9OQU1FX0VOVFJZKE1ELCBOQVYsIFJJR0hULCAiUmlnaHQiKSwKKyAgQlJMX0tFWV9OQU1FX0VOVFJZKE1ELCBOQVYsIERPV04sICJEb3duIiksCisKKyAgQlJMX0tFWV9OQU1FX0VOVFJZKE1ELCBOQVYsIFNISUZULCAiU2hpZnQiKSwKKyAgQlJMX0tFWV9OQU1FX0VOVFJZKE1ELCBOQVYsIExPTkcsICJMb25nIiksCisKKyAgQlJMX0tFWV9HUk9VUF9FTlRSWShNRCwgUkssICJSb3V0aW5nS2V5IiksCitFTkRfS0VZX05BTUVfVEFCTEUKKworQkVHSU5fS0VZX05BTUVfVEFCTEUoa2V5Ym9hcmQpCisgIEJSTF9LRVlfTkFNRV9FTlRSWShNRCwgQlJMLCBET1QxLCAiRG90MSIpLAorICBCUkxfS0VZX05BTUVfRU5UUlkoTUQsIEJSTCwgRE9UMiwgIkRvdDIiKSwKKyAgQlJMX0tFWV9OQU1FX0VOVFJZKE1ELCBCUkwsIERPVDMsICJEb3QzIiksCisgIEJSTF9LRVlfTkFNRV9FTlRSWShNRCwgQlJMLCBET1Q0LCAiRG90NCIpLAorICBCUkxfS0VZX05BTUVfRU5UUlkoTUQsIEJSTCwgRE9UNSwgIkRvdDUiKSwKKyAgQlJMX0tFWV9OQU1FX0VOVFJZKE1ELCBCUkwsIERPVDYsICJEb3Q2IiksCisgIEJSTF9LRVlfTkFNRV9FTlRSWShNRCwgQlJMLCBET1Q3LCAiRG90NyIpLAorICBCUkxfS0VZX05BTUVfRU5UUlkoTUQsIEJSTCwgRE9UOCwgIkRvdDgiKSwKKyAgQlJMX0tFWV9OQU1FX0VOVFJZKE1ELCBCUkwsIFNQQUNFLCAiU3BhY2UiKSwKK0VORF9LRVlfTkFNRV9UQUJMRQorCitCRUdJTl9LRVlfTkFNRV9UQUJMRShma2V5cykKKyAgQlJMX0tFWV9OQU1FX0VOVFJZKE1ELCBOQVYsIEYxLCAiRjEiKSwKKyAgQlJMX0tFWV9OQU1FX0VOVFJZKE1ELCBOQVYsIEYyLCAiRjIiKSwKKyAgQlJMX0tFWV9OQU1FX0VOVFJZKE1ELCBOQVYsIEYzLCAiRjMiKSwKKyAgQlJMX0tFWV9OQU1FX0VOVFJZKE1ELCBOQVYsIEY0LCAiRjQiKSwKKyAgQlJMX0tFWV9OQU1FX0VOVFJZKE1ELCBOQVYsIEY1LCAiRjUiKSwKKyAgQlJMX0tFWV9OQU1FX0VOVFJZKE1ELCBOQVYsIEY2LCAiRjYiKSwKKyAgQlJMX0tFWV9OQU1FX0VOVFJZKE1ELCBOQVYsIEY3LCAiRjciKSwKKyAgQlJMX0tFWV9OQU1FX0VOVFJZKE1ELCBOQVYsIEY4LCAiRjgiKSwKKyAgQlJMX0tFWV9OQU1FX0VOVFJZKE1ELCBOQVYsIEY5LCAiRjkiKSwKKyAgQlJMX0tFWV9OQU1FX0VOVFJZKE1ELCBOQVYsIEYxMCwgIkYxMCIpLAorRU5EX0tFWV9OQU1FX1RBQkxFCisKK0JFR0lOX0tFWV9OQU1FX1RBQkxFKHN0YXR1cykKKyAgQlJMX0tFWV9HUk9VUF9FTlRSWShNRCwgU0ssICJTdGF0dXNLZXkiKSwKK0VORF9LRVlfTkFNRV9UQUJMRQorCitCRUdJTl9LRVlfTkFNRV9UQUJMRVMoZGVmYXVsdCkKKyAgS0VZX05BTUVfVEFCTEUoY29tbW9uKSwKKyAgS0VZX05BTUVfVEFCTEUoa2V5Ym9hcmQpLAorICBLRVlfTkFNRV9UQUJMRShma2V5cyksCisgIEtFWV9OQU1FX1RBQkxFKHN0YXR1cyksCitFTkRfS0VZX05BTUVfVEFCTEVTCisKK0JFR0lOX0tFWV9OQU1FX1RBQkxFUyhrYmQpCisgIEtFWV9OQU1FX1RBQkxFKGNvbW1vbiksCisgIEtFWV9OQU1FX1RBQkxFKGtleWJvYXJkKSwKK0VORF9LRVlfTkFNRV9UQUJMRVMKKworQkVHSU5fS0VZX05BTUVfVEFCTEVTKGZrKQorICBLRVlfTkFNRV9UQUJMRShjb21tb24pLAorICBLRVlfTkFNRV9UQUJMRShma2V5cyksCitFTkRfS0VZX05BTUVfVEFCTEVTCisKK0JFR0lOX0tFWV9OQU1FX1RBQkxFUyhma19zKQorICBLRVlfTkFNRV9UQUJMRShjb21tb24pLAorICBLRVlfTkFNRV9UQUJMRShma2V5cyksCisgIEtFWV9OQU1FX1RBQkxFKHN0YXR1cyksCitFTkRfS0VZX05BTUVfVEFCTEVTCisKK0RFRklORV9LRVlfVEFCTEUoZGVmYXVsdCkKK0RFRklORV9LRVlfVEFCTEUoa2JkKQorREVGSU5FX0tFWV9UQUJMRShmaykKK0RFRklORV9LRVlfVEFCTEUoZmtfcykKKworQkVHSU5fS0VZX1RBQkxFX0xJU1QKKyAgJktFWV9UQUJMRV9ERUZJTklUSU9OKGRlZmF1bHQpLAorICAmS0VZX1RBQkxFX0RFRklOSVRJT04oa2JkKSwKKyAgJktFWV9UQUJMRV9ERUZJTklUSU9OKGZrKSwKKyAgJktFWV9UQUJMRV9ERUZJTklUSU9OKGZrX3MpLAorRU5EX0tFWV9UQUJMRV9MSVNUCisKK3R5cGVkZWYgc3RydWN0IHsKKyAgY29uc3QgdW5zaWduZWQgaW50ICpiYXVkczsKK30gSW5wdXRPdXRwdXRPcGVyYXRpb25zOworCitzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IHNlcmlhbEJhdWRzW10gPSB7Mzg0MDAsIDE5MjAwLCAwfTsKKworc3RhdGljIGNvbnN0IElucHV0T3V0cHV0T3BlcmF0aW9ucyBzZXJpYWxPcGVyYXRpb25zID0geworICAuYmF1ZHMgPSBzZXJpYWxCYXVkcworfTsKKworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCB1c2JCYXVkc1tdID0gezM4NDAwLCAwfTsKKworc3RhdGljIGNvbnN0IElucHV0T3V0cHV0T3BlcmF0aW9ucyB1c2JPcGVyYXRpb25zID0geworICAuYmF1ZHMgPSB1c2JCYXVkcworfTsKKworc3RydWN0IEJyYWlsbGVEYXRhU3RydWN0IHsKKyAgY29uc3QgSW5wdXRPdXRwdXRPcGVyYXRpb25zICppbzsKKworICB1bnNpZ25lZCBzaGlmdFByZXNzZWQ6MTsKKworICBzdHJ1Y3QgeworICAgIHVuc2lnbmVkIGNoYXIgcmV3cml0ZTsKKyAgICB1bnNpZ25lZCBjaGFyIGNlbGxzW01BWElNVU1fVEVYVF9DRUxMU107CisgIH0gdGV4dDsKKworICBzdHJ1Y3QgeworICAgIHVuc2lnbmVkIGNoYXIgcmV3cml0ZTsKKyAgICB1bnNpZ25lZCBjaGFyIGNlbGxzW01BWElNVU1fU1RBVFVTX0NFTExTXTsKKyAgfSBzdGF0dXM7Cit9OworCitzdGF0aWMgY29uc3QgS2V5VGFibGVEZWZpbml0aW9uICoKK2dldEtleVRhYmxlRGVmaW5pdGlvbiAoQnJhaWxsZURpc3BsYXkgKmJybCkgeworICBzd2l0Y2ggKGJybC0+dGV4dENvbHVtbnMpIHsKKyAgICBjYXNlIDI0OgorICAgICAgaWYgKCFicmwtPnN0YXR1c0NvbHVtbnMpIHJldHVybiAmS0VZX1RBQkxFX0RFRklOSVRJT04oa2JkKTsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSA0MDoKKyAgICAgIGlmICghYnJsLT5zdGF0dXNDb2x1bW5zKSByZXR1cm4gJktFWV9UQUJMRV9ERUZJTklUSU9OKGZrKTsKKyAgICAgIHJldHVybiAmS0VZX1RBQkxFX0RFRklOSVRJT04oZmtfcyk7CisKKyAgICBkZWZhdWx0OgorICAgICAgYnJlYWs7CisgIH0KKworICByZXR1cm4gJktFWV9UQUJMRV9ERUZJTklUSU9OKGRlZmF1bHQpOworfQorCitzdGF0aWMgdWludDE2X3QKK2NhbGN1bGF0ZUNoZWNrc3VtIChjb25zdCB1bnNpZ25lZCBjaGFyICpmcm9tLCBjb25zdCB1bnNpZ25lZCBjaGFyICp0bykgeworICB1aW50MTZfdCBjaGVja3N1bSA9IDA7CisKKyAgd2hpbGUgKGZyb20gPCB0bykgeworICAgIGNoZWNrc3VtICs9ICpmcm9tKys7CisgIH0KKworICByZXR1cm4gY2hlY2tzdW0gXiAwWEFBNTU7Cit9CisKK3N0YXRpYyBpbnQKK3dyaXRlQnl0ZXMgKEJyYWlsbGVEaXNwbGF5ICpicmwsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ5dGVzLCBzaXplX3QgY291bnQpIHsKKyAgcmV0dXJuIHdyaXRlQnJhaWxsZVBhY2tldChicmwsIE5VTEwsIGJ5dGVzLCBjb3VudCk7Cit9CisKK3N0YXRpYyBpbnQKK3dyaXRlUGFja2V0IChCcmFpbGxlRGlzcGxheSAqYnJsLCB1bnNpZ25lZCBjaGFyIGNvZGUsIGNvbnN0IHZvaWQgKmRhdGEsIHVuc2lnbmVkIGNoYXIgbGVuZ3RoKSB7CisgIE1EX1BhY2tldCBwYWNrZXQ7CisgIHVuc2lnbmVkIGNoYXIgKmJ5dGUgPSBwYWNrZXQuZmllbGRzLmRhdGEuYnl0ZXM7CisKKyAgcGFja2V0LmZpZWxkcy5zb2ggPSBBU0NJSV9TT0g7CisgIHBhY2tldC5maWVsZHMuc3R4ID0gQVNDSUlfU1RYOworICBwYWNrZXQuZmllbGRzLmV0eCA9IEFTQ0lJX0VUWDsKKworICBwYWNrZXQuZmllbGRzLmNvZGUgPSBjb2RlOworICBwYWNrZXQuZmllbGRzLmxlbmd0aCA9IGxlbmd0aDsKKyAgYnl0ZSA9IG1lbXBjcHkoYnl0ZSwgZGF0YSwgbGVuZ3RoKTsKKworICB1aW50MTZfdCBjaGVja3N1bSA9IGNhbGN1bGF0ZUNoZWNrc3VtKCZwYWNrZXQuZmllbGRzLnN0eCwgYnl0ZSk7CisgICpieXRlKysgPSBjaGVja3N1bSAmIDBYRkY7CisgICpieXRlKysgPSBjaGVja3N1bSA+PiA4OworCisgIHJldHVybiB3cml0ZUJ5dGVzKGJybCwgcGFja2V0LmJ5dGVzLCBieXRlLXBhY2tldC5ieXRlcyk7Cit9CisKK3N0YXRpYyBCcmFpbGxlUGFja2V0VmVyaWZpZXJSZXN1bHQKK3ZlcmlmeVBhY2tldCAoCisgIEJyYWlsbGVEaXNwbGF5ICpicmwsCisgIHVuc2lnbmVkIGNoYXIgKmJ5dGVzLCBzaXplX3Qgc2l6ZSwKKyAgc2l6ZV90ICpsZW5ndGgsIHZvaWQgKmRhdGEKKykgeworICB1bnNpZ25lZCBjaGFyIGJ5dGUgPSBieXRlc1tzaXplLTFdOworCisgIHN3aXRjaCAoc2l6ZSkgeworICAgIGNhc2UgMToKKyAgICAgIGlmIChieXRlICE9IEFTQ0lJX1NPSCkgcmV0dXJuIEJSTF9QVlJfSU5WQUxJRDsKKyAgICAgICpsZW5ndGggPSA1OworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIDI6CisgICAgICBpZiAoYnl0ZSAhPSBBU0NJSV9TVFgpIHJldHVybiBCUkxfUFZSX0lOVkFMSUQ7CisgICAgICBicmVhazsKKworICAgIGNhc2UgNDoKKyAgICAgICpsZW5ndGggKz0gYnl0ZSArIDI7CisgICAgICBicmVhazsKKworICAgIGNhc2UgNToKKyAgICAgIGlmIChieXRlICE9IEFTQ0lJX0VUWCkgcmV0dXJuIEJSTF9QVlJfSU5WQUxJRDsKKyAgICAgIGJyZWFrOworCisgICAgZGVmYXVsdDoKKyAgICAgIGlmIChzaXplID09ICpsZW5ndGgpIHsKKyAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqZnJvbSA9ICZieXRlc1sxXTsKKyAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqdG8gPSAmYnl0ZXNbc2l6ZS0yXTsKKyAgICAgICAgdWludDE2X3QgY2hlY2tzdW0gPSAodG9bMV0gPDwgOCkgfCB0b1swXTsKKworICAgICAgICBpZiAoY2hlY2tzdW0gIT0gY2FsY3VsYXRlQ2hlY2tzdW0oZnJvbSwgdG8pKSB7CisgICAgICAgICAgcmV0dXJuIEJSTF9QVlJfSU5WQUxJRDsKKyAgICAgICAgfQorICAgICAgfQorCisgICAgICBicmVhazsKKyAgfQorCisgIHJldHVybiBCUkxfUFZSX0lOQ0xVREU7Cit9CisKK3N0YXRpYyBzaXplX3QKK3JlYWRCeXRlcyAoQnJhaWxsZURpc3BsYXkgKmJybCwgdm9pZCAqcGFja2V0LCBzaXplX3Qgc2l6ZSkgeworICBpbnQgb2sgPSByZWFkQnJhaWxsZVBhY2tldChicmwsIE5VTEwsIHBhY2tldCwgc2l6ZSwgdmVyaWZ5UGFja2V0LCBOVUxMKTsKKworICBpZiAob2spIHsKKyAgICBpZiAoIXdyaXRlUGFja2V0KGJybCwgTURfQ09ERV9BQ0tOT1dMRURHRSwgTlVMTCwgMCkpIHsKKyAgICAgIGJybC0+aGFzRmFpbGVkID0gMTsKKyAgICB9CisgIH0KKworICByZXR1cm4gb2s7Cit9CisKK3N0YXRpYyBzaXplX3QKK3JlYWRQYWNrZXQgKEJyYWlsbGVEaXNwbGF5ICpicmwsIE1EX1BhY2tldCAqcGFja2V0KSB7CisgIHJldHVybiByZWFkQnl0ZXMoYnJsLCBwYWNrZXQsIHNpemVvZigqcGFja2V0KSk7Cit9CisKK3N0YXRpYyBpbnQKK2Nvbm5lY3RSZXNvdXJjZSAoQnJhaWxsZURpc3BsYXkgKmJybCwgY29uc3QgY2hhciAqaWRlbnRpZmllcikgeworICBzdGF0aWMgY29uc3QgU2VyaWFsUGFyYW1ldGVycyBzZXJpYWxQYXJhbWV0ZXJzID0geworICAgIFNFUklBTF9ERUZBVUxUX1BBUkFNRVRFUlMsCisgICAgLmJhdWQgPSAxOTIwMAorICB9OworCisgIEJFR0lOX1VTQl9DSEFOTkVMX0RFRklOSVRJT05TCisgICAgeyAvKiBhbGwgbW9kZWxzICovCisgICAgICAudmVuZG9yPTBYMDQwMywgLnByb2R1Y3Q9MFg2MDAxLAorICAgICAgLmNvbmZpZ3VyYXRpb249MSwgLmludGVyZmFjZT0wLCAuYWx0ZXJuYXRpdmU9MCwKKyAgICAgIC5pbnB1dEVuZHBvaW50PTEsIC5vdXRwdXRFbmRwb2ludD0yLAorICAgICAgLnNlcmlhbCA9ICZzZXJpYWxQYXJhbWV0ZXJzCisgICAgfSwKKyAgRU5EX1VTQl9DSEFOTkVMX0RFRklOSVRJT05TCisKKyAgR2lvRGVzY3JpcHRvciBkZXNjcmlwdG9yOworICBnaW9Jbml0aWFsaXplRGVzY3JpcHRvcigmZGVzY3JpcHRvcik7CisKKyAgZGVzY3JpcHRvci5zZXJpYWwucGFyYW1ldGVycyA9ICZzZXJpYWxQYXJhbWV0ZXJzOworICBkZXNjcmlwdG9yLnNlcmlhbC5vcHRpb25zLmFwcGxpY2F0aW9uRGF0YSA9ICZzZXJpYWxPcGVyYXRpb25zOworCisgIGRlc2NyaXB0b3IudXNiLmNoYW5uZWxEZWZpbml0aW9ucyA9IHVzYkNoYW5uZWxEZWZpbml0aW9uczsKKyAgZGVzY3JpcHRvci51c2Iub3B0aW9ucy5hcHBsaWNhdGlvbkRhdGEgPSAmdXNiT3BlcmF0aW9uczsKKworICBkZXNjcmlwdG9yLmJsdWV0b290aC5kaXNjb3ZlckNoYW5uZWwgPSAxOworCisgIGlmIChjb25uZWN0QnJhaWxsZVJlc291cmNlKGJybCwgaWRlbnRpZmllciwgJmRlc2NyaXB0b3IsIE5VTEwpKSB7CisgICAgYnJsLT5kYXRhLT5pbyA9IGdpb0dldEFwcGxpY2F0aW9uRGF0YShicmwtPmdpb0VuZHBvaW50KTsKKyAgICByZXR1cm4gMTsKKyAgfQorCisgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50Cit3cml0ZUlkZW50aWZ5UmVxdWVzdCAoQnJhaWxsZURpc3BsYXkgKmJybCkgeworICByZXR1cm4gd3JpdGVQYWNrZXQoYnJsLCBNRF9DT0RFX0lERU5USUZZLCBOVUxMLCAwKTsKK30KKworc3RhdGljIEJyYWlsbGVSZXNwb25zZVJlc3VsdAoraXNJZGVudGl0eVJlc3BvbnNlIChCcmFpbGxlRGlzcGxheSAqYnJsLCBjb25zdCB2b2lkICpwYWNrZXQsIHNpemVfdCBzaXplKSB7CisgIGNvbnN0IE1EX1BhY2tldCAqcmVzcG9uc2UgPSBwYWNrZXQ7CisgIHVuc2lnbmVkIGNoYXIgY29kZSA9IHJlc3BvbnNlLT5maWVsZHMuY29kZTsKKworICBpZiAoY29kZSA9PSBNRF9DT0RFX0lERU5USVRZKSByZXR1cm4gQlJMX1JTUF9ET05FOworICBpZiAoY29kZSA9PSBNRF9DT0RFX0FDS05PV0xFREdFKSByZXR1cm4gQlJMX1JTUF9DT05USU5VRTsKKyAgcmV0dXJuIEJSTF9SU1BfVU5FWFBFQ1RFRDsKK30KKworc3RhdGljIGludAorcHJvYmVEZXZpY2UgKEJyYWlsbGVEaXNwbGF5ICpicmwsIE1EX1BhY2tldCAqcmVzcG9uc2UpIHsKKyAgcmV0dXJuIHByb2JlQnJhaWxsZURpc3BsYXkoCisgICAgYnJsLCBQUk9CRV9SRVRSWV9MSU1JVCwgTlVMTCwgUFJPQkVfSU5QVVRfVElNRU9VVCwgd3JpdGVJZGVudGlmeVJlcXVlc3QsCisgICAgcmVhZEJ5dGVzLCByZXNwb25zZSwgc2l6ZW9mKCpyZXNwb25zZSksIGlzSWRlbnRpdHlSZXNwb25zZQorICApOworfQorCitzdGF0aWMgaW50Citwcm9iZSAoQnJhaWxsZURpc3BsYXkgKmJybCwgTURfUGFja2V0ICpyZXNwb25zZSkgeworICBpZiAoYnJsLT5kYXRhLT5pbykgeworICAgIGlmIChicmwtPmRhdGEtPmlvLT5iYXVkcykgeworICAgICAgY29uc3QgdW5zaWduZWQgaW50ICpiYXVkID0gYnJsLT5kYXRhLT5pby0+YmF1ZHM7CisKKyAgICAgIGlmICgqYmF1ZCkgeworICAgICAgICBkbyB7CisgICAgICAgICAgU2VyaWFsUGFyYW1ldGVycyBwYXJhbWV0ZXJzOworICAgICAgICAgIGdpb0luaXRpYWxpemVTZXJpYWxQYXJhbWV0ZXJzKCZwYXJhbWV0ZXJzKTsKKworICAgICAgICAgIHBhcmFtZXRlcnMuYmF1ZCA9ICpiYXVkOworICAgICAgICAgIGxvZ01lc3NhZ2UoTE9HX0NBVEVHT1JZKEJSQUlMTEVfRFJJVkVSKSwgInByb2JpbmcgYXQgJXUgYmF1ZCIsIHBhcmFtZXRlcnMuYmF1ZCk7CisKKyAgICAgICAgICBpZiAoIWdpb1JlY29uZmlndXJlUmVzb3VyY2UoYnJsLT5naW9FbmRwb2ludCwgJnBhcmFtZXRlcnMpKSBicmVhazsKKyAgICAgICAgICBpZiAocHJvYmVEZXZpY2UoYnJsLCByZXNwb25zZSkpIHJldHVybiAxOworICAgICAgICB9IHdoaWxlICgqKytiYXVkKTsKKworICAgICAgICByZXR1cm4gMDsKKyAgICAgIH0KKyAgICB9CisgIH0KKworICByZXR1cm4gcHJvYmVEZXZpY2UoYnJsLCByZXNwb25zZSk7Cit9CisKK3N0YXRpYyBpbnQKK2JybF9jb25zdHJ1Y3QgKEJyYWlsbGVEaXNwbGF5ICpicmwsIGNoYXIgKipwYXJhbWV0ZXJzLCBjb25zdCBjaGFyICpkZXZpY2UpIHsKKyAgaWYgKChicmwtPmRhdGEgPSBtYWxsb2Moc2l6ZW9mKCpicmwtPmRhdGEpKSkpIHsKKyAgICBtZW1zZXQoYnJsLT5kYXRhLCAwLCBzaXplb2YoKmJybC0+ZGF0YSkpOworICAgIGJybC0+ZGF0YS0+aW8gPSBOVUxMOworCisgICAgaWYgKGNvbm5lY3RSZXNvdXJjZShicmwsIGRldmljZSkpIHsKKyAgICAgIE1EX1BhY2tldCByZXNwb25zZTsKKworICAgICAgaWYgKHByb2JlKGJybCwgJnJlc3BvbnNlKSkgeworICAgICAgICBsb2dNZXNzYWdlKExPR19JTkZPLAorICAgICAgICAgICJNRFYgTW9kZWwgRGVzY3JpcHRpb246IgorICAgICAgICAgICIgVmVyc2lvbjoldS4ldSBUZXh0OiV1IFN0YXR1czoldSBEb3RzOiV1IFJvdXRpbmc6JXMiLAorICAgICAgICAgIHJlc3BvbnNlLmZpZWxkcy5kYXRhLmlkZW50aXR5Lm1ham9yVmVyc2lvbiwKKyAgICAgICAgICByZXNwb25zZS5maWVsZHMuZGF0YS5pZGVudGl0eS5taW5vclZlcnNpb24sCisgICAgICAgICAgcmVzcG9uc2UuZmllbGRzLmRhdGEuaWRlbnRpdHkudGV4dENlbGxDb3VudCwKKyAgICAgICAgICByZXNwb25zZS5maWVsZHMuZGF0YS5pZGVudGl0eS5zdGF0dXNDZWxsQ291bnQsCisgICAgICAgICAgcmVzcG9uc2UuZmllbGRzLmRhdGEuaWRlbnRpdHkuZG90c1BlckNlbGwsCisgICAgICAgICAgKHJlc3BvbnNlLmZpZWxkcy5kYXRhLmlkZW50aXR5LmhhdmVSb3V0aW5nS2V5cz8gInllcyI6ICJubyIpCisgICAgICAgICk7CisKKyAgICAgICAgYnJsLT50ZXh0Q29sdW1ucyA9IHJlc3BvbnNlLmZpZWxkcy5kYXRhLmlkZW50aXR5LnRleHRDZWxsQ291bnQ7CisgICAgICAgIGJybC0+c3RhdHVzQ29sdW1ucyA9IHJlc3BvbnNlLmZpZWxkcy5kYXRhLmlkZW50aXR5LnN0YXR1c0NlbGxDb3VudDsKKyAgICAgICAgc2V0QnJhaWxsZUtleVRhYmxlKGJybCwgZ2V0S2V5VGFibGVEZWZpbml0aW9uKGJybCkpOworCisgICAgICAgIGJybC0+ZGF0YS0+c2hpZnRQcmVzc2VkID0gMDsKKyAgICAgICAgYnJsLT5kYXRhLT50ZXh0LnJld3JpdGUgPSAxOworICAgICAgICBicmwtPmRhdGEtPnN0YXR1cy5yZXdyaXRlID0gMTsKKworICAgICAgICBNQUtFX09VVFBVVF9UQUJMRSgwWDA4LCAwWDA0LCAwWDAyLCAwWDgwLCAwWDQwLCAwWDIwLCAwWDAxLCAwWDEwKTsKKyAgICAgICAgcmV0dXJuIDE7CisgICAgICB9CisKKyAgICAgIGRpc2Nvbm5lY3RCcmFpbGxlUmVzb3VyY2UoYnJsLCBOVUxMKTsKKyAgICB9CisKKyAgICBmcmVlKGJybC0+ZGF0YSk7CisgIH0gZWxzZSB7CisgICAgbG9nTWFsbG9jRXJyb3IoKTsKKyAgfQorCisgIHJldHVybiAwOworfQorCitzdGF0aWMgdm9pZAorYnJsX2Rlc3RydWN0IChCcmFpbGxlRGlzcGxheSAqYnJsKSB7CisgIGRpc2Nvbm5lY3RCcmFpbGxlUmVzb3VyY2UoYnJsLCBOVUxMKTsKKworICBpZiAoYnJsLT5kYXRhKSB7CisgICAgZnJlZShicmwtPmRhdGEpOworICAgIGJybC0+ZGF0YSA9IE5VTEw7CisgIH0KK30KKworc3RhdGljIGludAorYnJsX3dyaXRlU3RhdHVzIChCcmFpbGxlRGlzcGxheSAqYnJsLCBjb25zdCB1bnNpZ25lZCBjaGFyICpjZWxscykgeworICBpZiAoY2VsbHNIYXZlQ2hhbmdlZChicmwtPmRhdGEtPnN0YXR1cy5jZWxscywgY2VsbHMsIGJybC0+c3RhdHVzQ29sdW1ucywgTlVMTCwgTlVMTCwgJmJybC0+ZGF0YS0+c3RhdHVzLnJld3JpdGUpKSB7CisgICAgYnJsLT5kYXRhLT50ZXh0LnJld3JpdGUgPSAxOworICB9CisKKyAgcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQKK2JybF93cml0ZVdpbmRvdyAoQnJhaWxsZURpc3BsYXkgKmJybCwgY29uc3Qgd2NoYXJfdCAqdGV4dCkgeworICBpZiAoY2VsbHNIYXZlQ2hhbmdlZChicmwtPmRhdGEtPnRleHQuY2VsbHMsIGJybC0+YnVmZmVyLCBicmwtPnRleHRDb2x1bW5zLCBOVUxMLCBOVUxMLCAmYnJsLT5kYXRhLT50ZXh0LnJld3JpdGUpKSB7CisgICAgdW5zaWduZWQgY2hhciBjZWxsc1ticmwtPnN0YXR1c0NvbHVtbnMgKyBicmwtPnRleHRDb2x1bW5zXTsKKyAgICB1bnNpZ25lZCBjaGFyICpjZWxsID0gY2VsbHM7CisKKyAgICBjZWxsID0gbWVtcGNweShjZWxsLCBicmwtPmRhdGEtPnN0YXR1cy5jZWxscywgYnJsLT5zdGF0dXNDb2x1bW5zKTsKKyAgICBjZWxsID0gdHJhbnNsYXRlT3V0cHV0Q2VsbHMoY2VsbCwgYnJsLT5kYXRhLT50ZXh0LmNlbGxzLCBicmwtPnRleHRDb2x1bW5zKTsKKworICAgIGlmICghd3JpdGVQYWNrZXQoYnJsLCBNRF9DT0RFX1dSSVRFX0FMTCwgY2VsbHMsIChjZWxsIC0gY2VsbHMpKSkgcmV0dXJuIDA7CisgIH0KKworICByZXR1cm4gMTsKK30KKworc3RhdGljIGludAorYnJsX3JlYWRDb21tYW5kIChCcmFpbGxlRGlzcGxheSAqYnJsLCBLZXlUYWJsZUNvbW1hbmRDb250ZXh0IGNvbnRleHQpIHsKKyAgTURfUGFja2V0IHBhY2tldDsKKyAgc2l6ZV90IHNpemU7CisKKyAgd2hpbGUgKChzaXplID0gcmVhZFBhY2tldChicmwsICZwYWNrZXQpKSkgeworICAgIHN3aXRjaCAocGFja2V0LmZpZWxkcy5jb2RlKSB7CisgICAgICBjYXNlIE1EX0NPREVfTkFWSUdBVElPTl9LRVk6IHsKKyAgICAgICAgdW5zaWduZWQgY2hhciBrZXkgPSBwYWNrZXQuZmllbGRzLmRhdGEubmF2aWdhdGlvbktleS5rZXk7CisKKyAgICAgICAgc3dpdGNoIChrZXkpIHsKKyAgICAgICAgICBjYXNlIE1EX05BVl9TSElGVF9QUkVTUzoKKyAgICAgICAgICAgIGJybC0+ZGF0YS0+c2hpZnRQcmVzc2VkID0gMTsKKyAgICAgICAgICAgIGdvdG8gZG9TaGlmdEV2ZW50OworCisgICAgICAgICAgY2FzZSBNRF9OQVZfU0hJRlRfUkVMRUFTRToKKyAgICAgICAgICAgIGJybC0+ZGF0YS0+c2hpZnRQcmVzc2VkID0gMDsKKyAgICAgICAgICAgIGdvdG8gZG9TaGlmdEV2ZW50OworCisgICAgICAgICAgZG9TaGlmdEV2ZW50OgorICAgICAgICAgICAgZW5xdWV1ZUtleUV2ZW50KGJybCwgTURfR1JQX05BViwgTURfTkFWX1NISUZULCBicmwtPmRhdGEtPnNoaWZ0UHJlc3NlZCk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgIGRlZmF1bHQ6IHsKKyAgICAgICAgICAgIGludCBzaGlmdFByZXNzZWQgPSAoKGtleSAmIE1EX05BVl9TSElGVCkgIT0gMCkgJiYgIWJybC0+ZGF0YS0+c2hpZnRQcmVzc2VkOworICAgICAgICAgICAgaW50IGxvbmdQcmVzc2VkID0gKGtleSAmIE1EX05BVl9MT05HKSAhPSAwOworCisgICAgICAgICAgICBrZXkgJj0gTURfTkFWX01BU0tfS0VZOworICAgICAgICAgICAgTURfS2V5R3JvdXAgZ3JvdXAgPSBNRF9HUlBfTkFWOworCisgICAgICAgICAgICBpZiAoc2hpZnRQcmVzc2VkKSBlbnF1ZXVlS2V5RXZlbnQoYnJsLCBncm91cCwgTURfTkFWX1NISUZULCAxKTsKKyAgICAgICAgICAgIGlmIChsb25nUHJlc3NlZCkgZW5xdWV1ZUtleUV2ZW50KGJybCwgZ3JvdXAsIE1EX05BVl9MT05HLCAxKTsKKyAgICAgICAgICAgIGVucXVldWVLZXkoYnJsLCBncm91cCwga2V5KTsKKyAgICAgICAgICAgIGlmIChsb25nUHJlc3NlZCkgZW5xdWV1ZUtleUV2ZW50KGJybCwgZ3JvdXAsIE1EX05BVl9MT05HLCAwKTsKKyAgICAgICAgICAgIGlmIChzaGlmdFByZXNzZWQpIGVucXVldWVLZXlFdmVudChicmwsIGdyb3VwLCBNRF9OQVZfU0hJRlQsIDApOworCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBicmVhazsKKyAgICAgIH0KKworICAgICAgY2FzZSBNRF9DT0RFX0JSQUlMTEVfS0VZOiB7CisgICAgICAgIE1EX0tleUdyb3VwIGdyb3VwID0gTURfR1JQX0JSTDsKKyAgICAgICAgdW5zaWduZWQgY2hhciBzcGFjZVByZXNzZWQgPSBwYWNrZXQuZmllbGRzLmRhdGEuYnJhaWxsZUtleS5pc0Nob3JkICE9IDA7CisKKyAgICAgICAgaWYgKHNwYWNlUHJlc3NlZCkgZW5xdWV1ZUtleUV2ZW50KGJybCwgZ3JvdXAsIE1EX0JSTF9TUEFDRSwgMSk7CisgICAgICAgIGVucXVldWVLZXlzKGJybCwgcGFja2V0LmZpZWxkcy5kYXRhLmJyYWlsbGVLZXkuZG90cywgZ3JvdXAsIDApOworICAgICAgICBpZiAoc3BhY2VQcmVzc2VkKSBlbnF1ZXVlS2V5RXZlbnQoYnJsLCBncm91cCwgTURfQlJMX1NQQUNFLCAwKTsKKworICAgICAgICBicmVhazsKKyAgICAgIH0KKworICAgICAgeworICAgICAgICB1bnNpZ25lZCBjaGFyIGtleTsKKyAgICAgICAgaW50IHByZXNzOworCisgICAgICBjYXNlIE1EX0NPREVfUk9VVElOR19QUkVTUzoKKyAgICAgICAga2V5ID0gcGFja2V0LmZpZWxkcy5kYXRhLnJvdXRpbmdQcmVzcy5rZXk7CisgICAgICAgIHByZXNzID0gMTsKKyAgICAgICAgZ290byBkb1JvdXRpbmdLZXk7CisKKyAgICAgIGNhc2UgTURfQ09ERV9ST1VUSU5HX1JFTEVBU0U6CisgICAgICAgIGtleSA9IHBhY2tldC5maWVsZHMuZGF0YS5yb3V0aW5nUmVsZWFzZS5rZXk7CisgICAgICAgIHByZXNzID0gMDsKKyAgICAgICAgZ290byBkb1JvdXRpbmdLZXk7CisKKyAgICAgIGRvUm91dGluZ0tleToKKyAgICAgICAga2V5ICY9IH5NRF9ST1VUSU5HX1NISUZUOworCisgICAgICAgIGlmIChrZXkgPj0gTURfUk9VVElOR19GSVJTVCkgeworICAgICAgICAgIGtleSAtPSBNRF9ST1VUSU5HX0ZJUlNUOworICAgICAgICAgIE1EX0tleUdyb3VwIGdyb3VwOworCisgICAgICAgICAgaWYgKGtleSA8IGJybC0+c3RhdHVzQ29sdW1ucykgeworICAgICAgICAgICAgZ3JvdXAgPSBNRF9HUlBfU0s7CisgICAgICAgICAgfSBlbHNlIGlmICgoa2V5IC09IGJybC0+c3RhdHVzQ29sdW1ucykgPCBicmwtPnRleHRDb2x1bW5zKSB7CisgICAgICAgICAgICBncm91cCA9IE1EX0dSUF9SSzsKKyAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgfQorCisgICAgICAgICAgZW5xdWV1ZUtleUV2ZW50KGJybCwgZ3JvdXAsIGtleSwgcHJlc3MpOworICAgICAgICB9CisKKyAgICAgICAgYnJlYWs7CisgICAgICB9CisKKyAgICAgIGNhc2UgTURfQ09ERV9BQ0tOT1dMRURHRToKKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGxvZ1VuZXhwZWN0ZWRQYWNrZXQocGFja2V0LmJ5dGVzLCBzaXplKTsKKyAgfQorCisgIHJldHVybiAoZXJybm8gPT0gRUFHQUlOKT8gRU9GOiBCUkxfQ01EX1JFU1RBUlRCUkw7Cit9CmRpZmYgLS1naXQgYS9Ecml2ZXJzL0JyYWlsbGUvTURWL2JybGRlZnMtbWQuaCBiL0RyaXZlcnMvQnJhaWxsZS9NRFYvYnJsZGVmcy1tZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE5OGJmMjgKLS0tIC9kZXYvbnVsbAorKysgYi9Ecml2ZXJzL0JyYWlsbGUvTURWL2JybGRlZnMtbWQuaApAQCAtMCwwICsxLDEzNCBAQAorLyoKKyAqIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisgKiAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisgKgorICogQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKKyNpZm5kZWYgQlJMVFRZX0lOQ0xVREVEX01EX0JSTERFRlMKKyNkZWZpbmUgQlJMVFRZX0lOQ0xVREVEX01EX0JSTERFRlMKKwordHlwZWRlZiB1bmlvbiB7CisgIHVuc2lnbmVkIGNoYXIgYnl0ZXNbMV07CisKKyAgc3RydWN0IHsKKyAgICB1bnNpZ25lZCBjaGFyIHNvaDsKKyAgICB1bnNpZ25lZCBjaGFyIHN0eDsKKyAgICB1bnNpZ25lZCBjaGFyIGNvZGU7CisgICAgdW5zaWduZWQgY2hhciBsZW5ndGg7CisgICAgdW5zaWduZWQgY2hhciBldHg7CisKKyAgICB1bmlvbiB7CisgICAgICB1bnNpZ25lZCBjaGFyIGJ5dGVzWzBYRkZdOworCisgICAgICBzdHJ1Y3QgeworICAgICAgICB1bnNpZ25lZCBjaGFyIGtleTsKKyAgICAgIH0gbmF2aWdhdGlvbktleTsKKworICAgICAgc3RydWN0IHsKKyAgICAgICAgdW5zaWduZWQgY2hhciBrZXk7CisgICAgICB9IHJvdXRpbmdQcmVzczsKKworICAgICAgc3RydWN0IHsKKyAgICAgICAgdW5zaWduZWQgY2hhciBrZXk7CisgICAgICB9IHJvdXRpbmdSZWxlYXNlOworCisgICAgICBzdHJ1Y3QgeworICAgICAgICB1bnNpZ25lZCBjaGFyIGlzQ2hvcmQ7CisgICAgICAgIHVuc2lnbmVkIGNoYXIgZG90czsKKyAgICAgICAgdW5zaWduZWQgY2hhciBhc2NpaTsKKyAgICAgIH0gYnJhaWxsZUtleTsKKworICAgICAgc3RydWN0IHsKKyAgICAgICAgdW5zaWduZWQgY2hhciB0ZXh0Q2VsbENvdW50OworICAgICAgICB1bnNpZ25lZCBjaGFyIHN0YXR1c0NlbGxDb3VudDsKKyAgICAgICAgdW5zaWduZWQgY2hhciBkb3RzUGVyQ2VsbDsKKyAgICAgICAgdW5zaWduZWQgY2hhciBoYXZlUm91dGluZ0tleXM7CisgICAgICAgIHVuc2lnbmVkIGNoYXIgbWFqb3JWZXJzaW9uOworICAgICAgICB1bnNpZ25lZCBjaGFyIG1pbm9yVmVyc2lvbjsKKyAgICAgIH0gaWRlbnRpdHk7CisgICAgfSBkYXRhOworCisgICAgLyogRGVjbGFyZSB0aGUgY2hlY2tzdW0gYnl0ZXMgaGVyZSB0byBlbnN1cmUgdGhhdCB0aGUgc2l6ZSBpcyBjb3JyZWN0CisgICAgICogZXZlbiB0aG91Z2ggdGhlIGFjdHVhbCBjaGVja3N1bSBpcyBqdXN0IGFmdGVyIHRoZSBsYXN0IGRhdGEgYnl0ZS4KKyAgICAgKi8KKyAgICB1bnNpZ25lZCBjaGFyIGNoZWNrc3VtWzJdOworICB9IFBBQ0tFRCBmaWVsZHM7Cit9IE1EX1BhY2tldDsKKwordHlwZWRlZiBlbnVtIHsKKyAgTURfQ09ERV9XUklURV9BTEwgICAgICAgPSAgIDAsCisgIE1EX0NPREVfV1JJVEVfU1RBVFVTICAgID0gICAxLAorICBNRF9DT0RFX1dSSVRFX1RFWFQgICAgICA9ICAgMiwKKyAgTURfQ09ERV9XUklURV9MQ0QgICAgICAgPSAgIDUsCisgIE1EX0NPREVfTkFWSUdBVElPTl9LRVkgID0gIDE2LAorICBNRF9DT0RFX1JPVVRJTkdfUFJFU1MgICA9ICAxNywKKyAgTURfQ09ERV9ST1VUSU5HX1JFTEVBU0UgPSAgMTgsCisgIE1EX0NPREVfQlJBSUxMRV9LRVkgICAgID0gIDIxLAorICBNRF9DT0RFX0lERU5USUZZICAgICAgICA9ICAzNiwKKyAgTURfQ09ERV9JREVOVElUWSAgICAgICAgPSAgMzcsCisgIE1EX0NPREVfQUNLTk9XTEVER0UgICAgID0gMTI3LAorfSBNRF9QYWNrZXRDb2RlOworCit0eXBlZGVmIGVudW0geworICBNRF9OQVZfRjEgICAgICAgICAgICA9IDBYMDEsCisgIE1EX05BVl9GMiAgICAgICAgICAgID0gMFgwMiwKKyAgTURfTkFWX0YzICAgICAgICAgICAgPSAwWDAzLAorICBNRF9OQVZfRjQgICAgICAgICAgICA9IDBYMDQsCisgIE1EX05BVl9GNSAgICAgICAgICAgID0gMFgwNSwKKyAgTURfTkFWX0Y2ICAgICAgICAgICAgPSAwWDA2LAorICBNRF9OQVZfRjcgICAgICAgICAgICA9IDBYMDcsCisgIE1EX05BVl9GOCAgICAgICAgICAgID0gMFgwOCwKKyAgTURfTkFWX0Y5ICAgICAgICAgICAgPSAwWDA5LAorICBNRF9OQVZfRjEwICAgICAgICAgICA9IDBYMEEsCisgIE1EX05BVl9MRUZUICAgICAgICAgID0gMFgwQiwKKyAgTURfTkFWX1VQICAgICAgICAgICAgPSAwWDBDLAorICBNRF9OQVZfUklHSFQgICAgICAgICA9IDBYMEQsCisgIE1EX05BVl9ET1dOICAgICAgICAgID0gMFgwRSwKKyAgTURfTkFWX01BU0tfS0VZICAgICAgPSAwWDBGLAorCisgIE1EX05BVl9TSElGVCAgICAgICAgID0gMFgxMCwKKyAgTURfTkFWX0xPTkcgICAgICAgICAgPSAwWDIwLAorICBNRF9OQVZfTUFTS19NT0QgICAgICA9IDBYMzAsCisKKyAgTURfTkFWX1NISUZUX1BSRVNTICAgPSAwWDNGLAorICBNRF9OQVZfU0hJRlRfUkVMRUFTRSA9IDBYNDAsCit9IE1EX05hdmlnYXRpb25LZXk7CisKK3R5cGVkZWYgZW51bSB7CisgIE1EX0JSTF9ET1QxICA9IDAsCisgIE1EX0JSTF9ET1QyICA9IDEsCisgIE1EX0JSTF9ET1QzICA9IDIsCisgIE1EX0JSTF9ET1Q0ICA9IDMsCisgIE1EX0JSTF9ET1Q1ICA9IDQsCisgIE1EX0JSTF9ET1Q2ICA9IDUsCisgIE1EX0JSTF9ET1Q3ICA9IDYsCisgIE1EX0JSTF9ET1Q4ICA9IDcsCisgIE1EX0JSTF9TUEFDRSA9IDgsCit9IE1EX0JyYWlsbGVLZXk7CisKK3R5cGVkZWYgZW51bSB7CisgIE1EX1JPVVRJTkdfRklSU1QgPSAwWDAxLAorICBNRF9ST1VUSU5HX01BU0sgID0gMFg3RiwKKyAgTURfUk9VVElOR19TSElGVCA9IDBYODAsCit9IE1EX1JvdXRpbmdLZXk7CisKK3R5cGVkZWYgZW51bSB7CisgIE1EX0dSUF9OQVYsCisgIE1EX0dSUF9CUkwsCisgIE1EX0dSUF9SSywKKyAgTURfR1JQX1NLLAorfSBNRF9LZXlHcm91cDsKKworI2VuZGlmIC8qIEJSTFRUWV9JTkNMVURFRF9NRF9CUkxERUZTICovIApkaWZmIC0tZ2l0IGEvRHJpdmVycy9CcmFpbGxlL01ldGVjL01ha2VmaWxlLmluIGIvRHJpdmVycy9CcmFpbGxlL01ldGVjL01ha2VmaWxlLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIzZjZhNTkKLS0tIC9kZXYvbnVsbAorKysgYi9Ecml2ZXJzL0JyYWlsbGUvTWV0ZWMvTWFrZWZpbGUuaW4KQEAgLTAsMCArMSwyOCBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorIyAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyMKKyMgQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorIworIyBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorIworIyBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisjIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyMgbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisjCisjIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK0RSSVZFUl9DT0RFID0gbXQKK0RSSVZFUl9OQU1FID0gTWV0ZWMKK0RSSVZFUl9VU0FHRSA9IEJELTQwCitEUklWRVJfVkVSU0lPTiA9IAorRFJJVkVSX0RFVkVMT1BFUlMgPSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+CitpbmNsdWRlICQoU1JDX1RPUClicmFpbGxlLm1rCisKK2JyYWlsbGUuJE86CisJJChDQykgJChCUkxfQ0ZMQUdTKSAtYyAkKFNSQ19ESVIpL2JyYWlsbGUuYworCmRpZmYgLS1naXQgYS9Ecml2ZXJzL0JyYWlsbGUvTWV0ZWMvYnJhaWxsZS5jIGIvRHJpdmVycy9CcmFpbGxlL01ldGVjL2JyYWlsbGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44Y2Q1ZDVlCi0tLSAvZGV2L251bGwKKysrIGIvRHJpdmVycy9CcmFpbGxlL01ldGVjL2JyYWlsbGUuYwpAQCAtMCwwICsxLDQ5NSBAQAorLyoKKyAqIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisgKiAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisgKgorICogQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKKyNpbmNsdWRlICJwcm9sb2d1ZS5oIgorCisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKworI2luY2x1ZGUgImxvZy5oIgorI2luY2x1ZGUgInBhcmFtZXRlcnMuaCIKKyNpbmNsdWRlICJhc3luY19oYW5kbGUuaCIKKyNpbmNsdWRlICJhc3luY19hbGFybS5oIgorCisjZGVmaW5lIEJSTF9IQVZFX1NUQVRVU19DRUxMUworI2luY2x1ZGUgImJybF9kcml2ZXIuaCIKKyNpbmNsdWRlICJicmxkZWZzLW10LmgiCisKK0JFR0lOX0tFWV9OQU1FX1RBQkxFKDNrZXlzKQorICBLRVlfTkFNRV9FTlRSWShNVF9LRVlfTGVmdFVwLCAiVXAiKSwKKyAgS0VZX05BTUVfRU5UUlkoTVRfS0VZX0xlZnRTZWxlY3QsICJTZWxlY3QiKSwKKyAgS0VZX05BTUVfRU5UUlkoTVRfS0VZX0xlZnREb3duLCAiRG93biIpLAorRU5EX0tFWV9OQU1FX1RBQkxFCisKK0JFR0lOX0tFWV9OQU1FX1RBQkxFKDZrZXlzKQorICBLRVlfTkFNRV9FTlRSWShNVF9LRVlfTGVmdFVwLCAiTGVmdFVwIiksCisgIEtFWV9OQU1FX0VOVFJZKE1UX0tFWV9MZWZ0U2VsZWN0LCAiTGVmdFNlbGVjdCIpLAorICBLRVlfTkFNRV9FTlRSWShNVF9LRVlfTGVmdERvd24sICJMZWZ0RG93biIpLAorCisgIEtFWV9OQU1FX0VOVFJZKE1UX0tFWV9SaWdodFVwLCAiUmlnaHRVcCIpLAorICBLRVlfTkFNRV9FTlRSWShNVF9LRVlfUmlnaHRTZWxlY3QsICJSaWdodFNlbGVjdCIpLAorICBLRVlfTkFNRV9FTlRSWShNVF9LRVlfUmlnaHREb3duLCAiUmlnaHREb3duIiksCitFTkRfS0VZX05BTUVfVEFCTEUKKworQkVHSU5fS0VZX05BTUVfVEFCTEUoNGtleXMpCisgIEtFWV9OQU1FX0VOVFJZKE1UX0tFWV9MZWZ0VXAsICJMZWZ0VXAiKSwKKyAgS0VZX05BTUVfRU5UUlkoTVRfS0VZX0xlZnREb3duLCAiTGVmdERvd24iKSwKKworICBLRVlfTkFNRV9FTlRSWShNVF9LRVlfUmlnaHRVcCwgIlJpZ2h0VXAiKSwKKyAgS0VZX05BTUVfRU5UUlkoTVRfS0VZX1JpZ2h0RG93biwgIlJpZ2h0RG93biIpLAorRU5EX0tFWV9OQU1FX1RBQkxFCisKK0JFR0lOX0tFWV9OQU1FX1RBQkxFKHJvdXRpbmcxKQorICBLRVlfR1JPVVBfRU5UUlkoTVRfR1JQX1JvdXRpbmdLZXlzMSwgIlJvdXRpbmdLZXkiKSwKK0VORF9LRVlfTkFNRV9UQUJMRQorCitCRUdJTl9LRVlfTkFNRV9UQUJMRShzdGF0dXMxKQorICBLRVlfR1JPVVBfRU5UUlkoTVRfR1JQX1N0YXR1c0tleXMxLCAiU3RhdHVzS2V5IiksCitFTkRfS0VZX05BTUVfVEFCTEUKKworLyoKK0JFR0lOX0tFWV9OQU1FX1RBQkxFKGZyb250KQorICBLRVlfTkFNRV9FTlRSWShNVF9LRVlfQ3Vyc29yTGVmdCwgIkN1cnNvckxlZnQiKSwKKyAgS0VZX05BTUVfRU5UUlkoTVRfS0VZX0N1cnNvclVwLCAiQ3Vyc29yVXAiKSwKKyAgS0VZX05BTUVfRU5UUlkoTVRfS0VZX0N1cnNvclJpZ2h0LCAiQ3Vyc29yUmlnaHQiKSwKKyAgS0VZX05BTUVfRU5UUlkoTVRfS0VZX0N1cnNvckRvd24sICJDdXJzb3JEb3duIiksCitFTkRfS0VZX05BTUVfVEFCTEUKKworQkVHSU5fS0VZX05BTUVfVEFCTEUocm91dGluZzIpCisgIEtFWV9HUk9VUF9FTlRSWShNVF9HUlBfUm91dGluZ0tleXMyLCAiUm91dGluZ0tleTIiKSwKK0VORF9LRVlfTkFNRV9UQUJMRQorCitCRUdJTl9LRVlfTkFNRV9UQUJMRShzdGF0dXMyKQorICBLRVlfR1JPVVBfRU5UUlkoTVRfR1JQX1N0YXR1c0tleXMyLCAiU3RhdHVzS2V5MiIpLAorRU5EX0tFWV9OQU1FX1RBQkxFCisqLworCitCRUdJTl9LRVlfTkFNRV9UQUJMRVMoYmQxXzMpCisgIEtFWV9OQU1FX1RBQkxFKDNrZXlzKSwKKyAgS0VZX05BTUVfVEFCTEUocm91dGluZzEpLAorRU5EX0tFWV9OQU1FX1RBQkxFUworCitCRUdJTl9LRVlfTkFNRV9UQUJMRVMoYmQxXzNzKQorICBLRVlfTkFNRV9UQUJMRSgza2V5cyksCisgIEtFWV9OQU1FX1RBQkxFKHJvdXRpbmcxKSwKKyAgS0VZX05BTUVfVEFCTEUoc3RhdHVzMSksCitFTkRfS0VZX05BTUVfVEFCTEVTCisKK0JFR0lOX0tFWV9OQU1FX1RBQkxFUyhiZDFfNikKKyAgS0VZX05BTUVfVEFCTEUoNmtleXMpLAorICBLRVlfTkFNRV9UQUJMRShyb3V0aW5nMSksCitFTkRfS0VZX05BTUVfVEFCTEVTCisKK0JFR0lOX0tFWV9OQU1FX1RBQkxFUyhiZDFfNnMpCisgIEtFWV9OQU1FX1RBQkxFKDZrZXlzKSwKKyAgS0VZX05BTUVfVEFCTEUocm91dGluZzEpLAorICBLRVlfTkFNRV9UQUJMRShzdGF0dXMxKSwKK0VORF9LRVlfTkFNRV9UQUJMRVMKKworQkVHSU5fS0VZX05BTUVfVEFCTEVTKGJkMikKKyAgS0VZX05BTUVfVEFCTEUoNGtleXMpLAorICBLRVlfTkFNRV9UQUJMRShyb3V0aW5nMSksCitFTkRfS0VZX05BTUVfVEFCTEVTCisKK0RFRklORV9LRVlfVEFCTEUoYmQxXzMpCitERUZJTkVfS0VZX1RBQkxFKGJkMV8zcykKK0RFRklORV9LRVlfVEFCTEUoYmQxXzYpCitERUZJTkVfS0VZX1RBQkxFKGJkMV82cykKK0RFRklORV9LRVlfVEFCTEUoYmQyKQorCitCRUdJTl9LRVlfVEFCTEVfTElTVAorICAmS0VZX1RBQkxFX0RFRklOSVRJT04oYmQxXzMpLAorICAmS0VZX1RBQkxFX0RFRklOSVRJT04oYmQxXzNzKSwKKyAgJktFWV9UQUJMRV9ERUZJTklUSU9OKGJkMV82KSwKKyAgJktFWV9UQUJMRV9ERUZJTklUSU9OKGJkMV82cyksCisgICZLRVlfVEFCTEVfREVGSU5JVElPTihiZDIpLAorRU5EX0tFWV9UQUJMRV9MSVNUCisKKyNkZWZpbmUgTVRfSURFTlRJVFlfUEFDS0VUX1NJWkUgMFg0MDAKKyNkZWZpbmUgTVRfU1RBVFVTX1BBQ0tFVF9TSVpFIDgKKworI2RlZmluZSBNVF9ST1VUSU5HX0tFWVNfU0VDT05EQVJZIDEwMAorI2RlZmluZSBNVF9ST1VUSU5HX0tFWVNfTk9ORSAwWEZGCisKKyNkZWZpbmUgTVRfTU9EVUxFX1NJWkUgOAorI2RlZmluZSBNVF9NT0RVTEVTX01BWElNVU0gMTAKKyNkZWZpbmUgTVRfQ0VMTFNfTUFYSU1VTSAoTVRfTU9EVUxFU19NQVhJTVVNICogTVRfTU9EVUxFX1NJWkUpCisKK3R5cGVkZWYgc3RydWN0IHsKKyAgaW50ICgqYmVnaW5Qcm90b2NvbCkgKEJyYWlsbGVEaXNwbGF5ICpicmwpOworICB2b2lkICgqZW5kUHJvdG9jb2wpIChCcmFpbGxlRGlzcGxheSAqYnJsKTsKKworICBpbnQgKCpzZXRIaWdoVm9sdGFnZSkgKEJyYWlsbGVEaXNwbGF5ICpicmwsIGludCBvbik7CisgIGludCAoKmdldERldmljZUlkZW50aXR5KSAoQnJhaWxsZURpc3BsYXkgKmJybCk7CisKKyAgaW50ICgqaGFuZGxlSW5wdXQpIChCcmFpbGxlRGlzcGxheSAqYnJsKTsKK30gUHJvdG9jb2xPcGVyYXRpb25zOworCitzdHJ1Y3QgQnJhaWxsZURhdGFTdHJ1Y3QgeworICBjb25zdCBQcm90b2NvbE9wZXJhdGlvbnMgKnByb3RvY29sOworCisgIHVuc2lnbmVkIGNoYXIgb2xkQ2VsbHNbTVRfQ0VMTFNfTUFYSU1VTV07CisgIHVuc2lnbmVkIGNoYXIgbmV3Q2VsbHNbTVRfQ0VMTFNfTUFYSU1VTV07CisKKyAgdW5zaWduZWQgY2hhciBjZWxsQ291bnQ7CisgIHVuc2lnbmVkIGNoYXIgdGV4dENvdW50OworICB1bnNpZ25lZCBjaGFyIHN0YXR1c0NvdW50OworCisgIHVuc2lnbmVkIGNoYXIgbW9kdWxlQ291bnQ7CisgIHVuc2lnbmVkIGNoYXIgd3JpdGVNb2R1bGVbTVRfTU9EVUxFU19NQVhJTVVNXTsKKworICBLZXlOdW1iZXJTZXQgYWxsTmF2aWdhdGlvbktleXM7CisgIEtleU51bWJlclNldCBwcmVzc2VkTmF2aWdhdGlvbktleXM7CisgIHVuc2lnbmVkIGNoYXIgcm91dGluZ0tleTsKKworICB1bmlvbiB7CisgICAgc3RydWN0IHsKKyAgICAgIEFzeW5jSGFuZGxlIHN0YXR1c0FsYXJtOworICAgIH0gdXNiOworICB9IHByb3RvOworfTsKKworc3RhdGljIHZvaWQKK3NldENlbGxDb3VudCAoQnJhaWxsZURpc3BsYXkgKmJybCwgdW5zaWduZWQgY2hhciBjb3VudCkgeworICBicmwtPmRhdGEtPm1vZHVsZUNvdW50ID0gKGJybC0+ZGF0YS0+Y2VsbENvdW50ID0gY291bnQpIC8gTVRfTU9EVUxFX1NJWkU7CisKKyAgc3dpdGNoIChjb3VudCkgeworICAgIGNhc2UgMjI6CisgICAgY2FzZSA0MjoKKyAgICAgIGJybC0+ZGF0YS0+c3RhdHVzQ291bnQgPSAyOworICAgICAgYnJlYWs7CisKKyAgICBkZWZhdWx0OgorICAgICAgYnJsLT5kYXRhLT5zdGF0dXNDb3VudCA9IDA7CisgICAgICBicmVhazsKKyAgfQorCisgIGJybC0+ZGF0YS0+dGV4dENvdW50ID0gYnJsLT5kYXRhLT5jZWxsQ291bnQgLSBicmwtPmRhdGEtPnN0YXR1c0NvdW50OworICBicmwtPnRleHRDb2x1bW5zID0gYnJsLT5kYXRhLT50ZXh0Q291bnQ7CisgIGJybC0+c3RhdHVzQ29sdW1ucyA9IGJybC0+ZGF0YS0+c3RhdHVzQ291bnQ7Cit9CisKK3N0YXRpYyB2b2lkCitoYW5kbGVOYXZpZ2F0aW9uS2V5cyAoQnJhaWxsZURpc3BsYXkgKmJybCwgS2V5TnVtYmVyU2V0IGtleXMpIHsKKyAga2V5cyAmPSBicmwtPmRhdGEtPmFsbE5hdmlnYXRpb25LZXlzOworICBlbnF1ZXVlVXBkYXRlZEtleXMoYnJsLCBrZXlzLCAmYnJsLT5kYXRhLT5wcmVzc2VkTmF2aWdhdGlvbktleXMsIE1UX0dSUF9OYXZpZ2F0aW9uS2V5cywgMCk7Cit9CisKK3N0YXRpYyB2b2lkCitoYW5kbGVSb3V0aW5nS2V5RXZlbnQgKEJyYWlsbGVEaXNwbGF5ICpicmwsIHVuc2lnbmVkIGNoYXIga2V5LCBpbnQgcHJlc3MpIHsKKyAgaWYgKGtleSAhPSBNVF9ST1VUSU5HX0tFWVNfTk9ORSkgeworICAgIEtleUdyb3VwIGdyb3VwOworCisgICAgeworICAgICAgS2V5R3JvdXAgcm91dGluZzsKKyAgICAgIEtleUdyb3VwIHN0YXR1czsKKworICAgICAgaWYgKGtleSA8IE1UX1JPVVRJTkdfS0VZU19TRUNPTkRBUlkpIHsKKyAgICAgICAgcm91dGluZyA9IE1UX0dSUF9Sb3V0aW5nS2V5czE7CisgICAgICAgIHN0YXR1cyA9IE1UX0dSUF9TdGF0dXNLZXlzMTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIGtleSAtPSBNVF9ST1VUSU5HX0tFWVNfU0VDT05EQVJZOworICAgICAgICByb3V0aW5nID0gTVRfR1JQX1JvdXRpbmdLZXlzMjsKKyAgICAgICAgc3RhdHVzID0gTVRfR1JQX1N0YXR1c0tleXMyOworICAgICAgfQorCisgICAgICBpZiAoa2V5IDwgYnJsLT5kYXRhLT5zdGF0dXNDb3VudCkgeworICAgICAgICBncm91cCA9IHN0YXR1czsKKyAgICAgIH0gZWxzZSBpZiAoKGtleSAtPSBicmwtPmRhdGEtPnN0YXR1c0NvdW50KSA8IGJybC0+ZGF0YS0+dGV4dENvdW50KSB7CisgICAgICAgIGdyb3VwID0gcm91dGluZzsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIHJldHVybjsKKyAgICAgIH0KKyAgICB9CisKKyAgICBlbnF1ZXVlS2V5RXZlbnQoYnJsLCBncm91cCwga2V5LCBwcmVzcyk7CisgIH0KK30KKworc3RhdGljIHZvaWQKK2hhbmRsZVJvdXRpbmdLZXkgKEJyYWlsbGVEaXNwbGF5ICpicmwsIHVuc2lnbmVkIGNoYXIga2V5KSB7CisgIGlmIChrZXkgIT0gYnJsLT5kYXRhLT5yb3V0aW5nS2V5KSB7CisgICAgaGFuZGxlUm91dGluZ0tleUV2ZW50KGJybCwgYnJsLT5kYXRhLT5yb3V0aW5nS2V5LCAwKTsKKyAgICBoYW5kbGVSb3V0aW5nS2V5RXZlbnQoYnJsLCBrZXksIDEpOworICAgIGJybC0+ZGF0YS0+cm91dGluZ0tleSA9IGtleTsKKyAgfQorfQorCisjaW5jbHVkZSAiaW9fdXNiLmgiCisKKyNkZWZpbmUgTVRfVVNCX0NPTlRST0xfUkVDSVBJRU5UIFVzYkNvbnRyb2xSZWNpcGllbnRfRGV2aWNlCisjZGVmaW5lIE1UX1VTQl9DT05UUk9MX1RZUEUgVXNiQ29udHJvbFR5cGVfVmVuZG9yCisKK3N0YXRpYyBpbnQgc2V0VXNiU3RhdHVzQWxhcm0gKEJyYWlsbGVEaXNwbGF5ICpicmwpOworCitzdGF0aWMgc3NpemVfdAordGVsbFVzYkRldmljZSAoCisgIEJyYWlsbGVEaXNwbGF5ICpicmwsIHVuc2lnbmVkIGNoYXIgcmVxdWVzdCwKKyAgY29uc3Qgdm9pZCAqZGF0YSwgc2l6ZV90IGxlbmd0aAorKSB7CisgIHJldHVybiBnaW9UZWxsUmVzb3VyY2UoYnJsLT5naW9FbmRwb2ludCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBNVF9VU0JfQ09OVFJPTF9SRUNJUElFTlQsIE1UX1VTQl9DT05UUk9MX1RZUEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdCwgMCwgMCwgZGF0YSwgbGVuZ3RoKTsKK30KKworc3RhdGljIHNzaXplX3QKK2Fza1VzYkRldmljZSAoCisgIEJyYWlsbGVEaXNwbGF5ICpicmwsIHVuc2lnbmVkIGNoYXIgcmVxdWVzdCwKKyAgdm9pZCAqYnVmZmVyLCBzaXplX3Qgc2l6ZQorKSB7CisgIHJldHVybiBnaW9Bc2tSZXNvdXJjZShicmwtPmdpb0VuZHBvaW50LAorICAgICAgICAgICAgICAgICAgICAgICAgTVRfVVNCX0NPTlRST0xfUkVDSVBJRU5ULCBNVF9VU0JfQ09OVFJPTF9UWVBFLAorICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdCwgMCwgMCwgYnVmZmVyLCBzaXplKTsKK30KKworc3RhdGljIHNzaXplX3QKK2dldFVzYlN0YXR1c1BhY2tldCAoQnJhaWxsZURpc3BsYXkgKmJybCwgdW5zaWduZWQgY2hhciAqcGFja2V0KSB7CisgIHJldHVybiBhc2tVc2JEZXZpY2UoYnJsLCAwWDgwLCBwYWNrZXQsIE1UX1NUQVRVU19QQUNLRVRfU0laRSk7Cit9CisKK0FTWU5DX0FMQVJNX0NBTExCQUNLKGhhbmRsZVVzYlN0YXR1c0FsYXJtKSB7CisgIEJyYWlsbGVEaXNwbGF5ICpicmwgPSBwYXJhbWV0ZXJzLT5kYXRhOworICB1bnNpZ25lZCBjaGFyIHBhY2tldFtNVF9TVEFUVVNfUEFDS0VUX1NJWkVdOworCisgIGFzeW5jRGlzY2FyZEhhbmRsZShicmwtPmRhdGEtPnByb3RvLnVzYi5zdGF0dXNBbGFybSk7CisgIGJybC0+ZGF0YS0+cHJvdG8udXNiLnN0YXR1c0FsYXJtID0gTlVMTDsKKworICBtZW1zZXQocGFja2V0LCAwLCBzaXplb2YocGFja2V0KSk7CisKKyAgaWYgKGdldFVzYlN0YXR1c1BhY2tldChicmwsIHBhY2tldCkpICB7CisgICAgbG9nSW5wdXRQYWNrZXQocGFja2V0LCBzaXplb2YocGFja2V0KSk7CisgICAgaGFuZGxlUm91dGluZ0tleShicmwsIHBhY2tldFswXSk7CisgICAgaGFuZGxlTmF2aWdhdGlvbktleXMoYnJsLCAocGFja2V0WzJdIHwgKHBhY2tldFszXSA8PCA4KSkpOworICAgIHNldFVzYlN0YXR1c0FsYXJtKGJybCk7CisgIH0gZWxzZSB7CisgICAgZW5xdWV1ZUNvbW1hbmQoQlJMX0NNRF9SRVNUQVJUQlJMKTsKKyAgfQorfQorCitzdGF0aWMgaW50CitzZXRVc2JTdGF0dXNBbGFybSAoQnJhaWxsZURpc3BsYXkgKmJybCkgeworICByZXR1cm4gYXN5bmNOZXdSZWxhdGl2ZUFsYXJtKCZicmwtPmRhdGEtPnByb3RvLnVzYi5zdGF0dXNBbGFybSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBCUkFJTExFX0RSSVZFUl9JTlBVVF9QT0xMX0lOVEVSVkFMLAorICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZVVzYlN0YXR1c0FsYXJtLCBicmwpOworfQorCitzdGF0aWMgaW50CitiZWdpblVzYlByb3RvY29sIChCcmFpbGxlRGlzcGxheSAqYnJsKSB7CisgIGJybC0+ZGF0YS0+cHJvdG8udXNiLnN0YXR1c0FsYXJtID0gTlVMTDsKKyAgc2V0VXNiU3RhdHVzQWxhcm0oYnJsKTsKKworICByZXR1cm4gMTsKK30KKworc3RhdGljIHZvaWQKK2VuZFVzYlByb3RvY29sIChCcmFpbGxlRGlzcGxheSAqYnJsKSB7CisgIGlmIChicmwtPmRhdGEtPnByb3RvLnVzYi5zdGF0dXNBbGFybSkgeworICAgIGFzeW5jQ2FuY2VsUmVxdWVzdChicmwtPmRhdGEtPnByb3RvLnVzYi5zdGF0dXNBbGFybSk7CisgICAgYnJsLT5kYXRhLT5wcm90by51c2Iuc3RhdHVzQWxhcm0gPSBOVUxMOworICB9Cit9CisKK3N0YXRpYyBpbnQKK3NldFVzYkhpZ2hWb2x0YWdlIChCcmFpbGxlRGlzcGxheSAqYnJsLCBpbnQgb24pIHsKKyAgY29uc3QgdW5zaWduZWQgY2hhciBkYXRhW10gPSB7CisgICAgKG9uPyAwWEVGOiAwWDAwKSwKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwCisgIH07CisKKyAgcmV0dXJuIHRlbGxVc2JEZXZpY2UoYnJsLCAwWDAxLCBkYXRhLCBzaXplb2YoZGF0YSkpICE9IC0xOworfQorCitzdGF0aWMgaW50CitnZXRVc2JEZXZpY2VJZGVudGl0eSAoQnJhaWxsZURpc3BsYXkgKmJybCkgeworICBVc2JDaGFubmVsICpjaGFubmVsID0gZ2lvR2V0UmVzb3VyY2VPYmplY3QoYnJsLT5naW9FbmRwb2ludCk7CisgIFVzYkRldmljZSAqZGV2aWNlID0gY2hhbm5lbC0+ZGV2aWNlOworICB1bnNpZ25lZCBpbnQgY291bnRlciA9IDI7CisKKyAgZG8geworICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGRhdGFbXSA9IHswfTsKKworICAgIGlmICh0ZWxsVXNiRGV2aWNlKGJybCwgMFgwNCwgZGF0YSwgc2l6ZW9mKGRhdGEpKSAhPSAtMSkgeworICAgICAgdW5zaWduZWQgY2hhciBpZGVudGl0eVtNVF9JREVOVElUWV9QQUNLRVRfU0laRV07CisgICAgICBzc2l6ZV90IHJlc3VsdCA9IHVzYlJlYWRFbmRwb2ludChkZXZpY2UsIDEsIGlkZW50aXR5LCBzaXplb2YoaWRlbnRpdHkpLCAxMDAwKTsKKworICAgICAgaWYgKHJlc3VsdCAhPSAtMSkgcmV0dXJuIDE7CisgICAgfQorICB9IHdoaWxlICgtLWNvdW50ZXIpOworCisgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50CitoYW5kbGVVc2JJbnB1dCAoQnJhaWxsZURpc3BsYXkgKmJybCkgeworICByZXR1cm4gMTsKK30KKworc3RhdGljIGNvbnN0IFByb3RvY29sT3BlcmF0aW9ucyB1c2JQcm90b2NvbE9wZXJhdGlvbnMgPSB7CisgIC5iZWdpblByb3RvY29sID0gYmVnaW5Vc2JQcm90b2NvbCwKKyAgLmVuZFByb3RvY29sID0gZW5kVXNiUHJvdG9jb2wsCisKKyAgLnNldEhpZ2hWb2x0YWdlID0gc2V0VXNiSGlnaFZvbHRhZ2UsCisgIC5nZXREZXZpY2VJZGVudGl0eSA9IGdldFVzYkRldmljZUlkZW50aXR5LAorCisgIC5oYW5kbGVJbnB1dCA9IGhhbmRsZVVzYklucHV0Cit9OworCitzdGF0aWMgaW50Citjb25uZWN0UmVzb3VyY2UgKEJyYWlsbGVEaXNwbGF5ICpicmwsIGNvbnN0IGNoYXIgKmlkZW50aWZpZXIpIHsKKyAgQkVHSU5fVVNCX0NIQU5ORUxfREVGSU5JVElPTlMKKyAgICB7IC8qIGFsbCBtb2RlbHMgKi8KKyAgICAgIC52ZW5kb3I9MFgwNDUyLCAucHJvZHVjdD0wWDAxMDAsCisgICAgICAuY29uZmlndXJhdGlvbj0xLCAuaW50ZXJmYWNlPTAsIC5hbHRlcm5hdGl2ZT0wLAorICAgICAgLmRpc2FibGVFbmRwb2ludFJlc2V0PTEKKyAgICB9LAorICBFTkRfVVNCX0NIQU5ORUxfREVGSU5JVElPTlMKKworICBHaW9EZXNjcmlwdG9yIGRlc2NyaXB0b3I7CisgIGdpb0luaXRpYWxpemVEZXNjcmlwdG9yKCZkZXNjcmlwdG9yKTsKKworICBkZXNjcmlwdG9yLnVzYi5jaGFubmVsRGVmaW5pdGlvbnMgPSB1c2JDaGFubmVsRGVmaW5pdGlvbnM7CisgIGRlc2NyaXB0b3IudXNiLm9wdGlvbnMuYXBwbGljYXRpb25EYXRhID0gJnVzYlByb3RvY29sT3BlcmF0aW9uczsKKworICBpZiAoY29ubmVjdEJyYWlsbGVSZXNvdXJjZShicmwsIGlkZW50aWZpZXIsICZkZXNjcmlwdG9yLCBOVUxMKSkgeworICAgIGJybC0+ZGF0YS0+cHJvdG9jb2wgPSBnaW9HZXRBcHBsaWNhdGlvbkRhdGEoYnJsLT5naW9FbmRwb2ludCk7CisgICAgcmV0dXJuIDE7CisgIH0KKworICByZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQKK2Rpc2Nvbm5lY3RSZXNvdXJjZSAoQnJhaWxsZURpc3BsYXkgKmJybCkgeworICBkaXNjb25uZWN0QnJhaWxsZVJlc291cmNlKGJybCwgTlVMTCk7Cit9CisKK3N0YXRpYyBpbnQKK2JybF9jb25zdHJ1Y3QgKEJyYWlsbGVEaXNwbGF5ICpicmwsIGNoYXIgKipwYXJhbWV0ZXJzLCBjb25zdCBjaGFyICpkZXZpY2UpIHsKKyAgaWYgKChicmwtPmRhdGEgPSBtYWxsb2Moc2l6ZW9mKCpicmwtPmRhdGEpKSkpIHsKKyAgICBtZW1zZXQoYnJsLT5kYXRhLCAwLCBzaXplb2YoKmJybC0+ZGF0YSkpOworCisgICAgaWYgKGNvbm5lY3RSZXNvdXJjZShicmwsIGRldmljZSkpIHsKKyAgICAgIGlmIChicmwtPmRhdGEtPnByb3RvY29sLT5zZXRIaWdoVm9sdGFnZShicmwsIDEpKSB7CisgICAgICAgIHVuc2lnbmVkIGNoYXIgc3RhdHVzUGFja2V0W01UX1NUQVRVU19QQUNLRVRfU0laRV07CisKKyAgICAgICAgYnJsLT5kYXRhLT5wcm90b2NvbC0+Z2V0RGV2aWNlSWRlbnRpdHkoYnJsKTsKKworICAgICAgICBpZiAoZ2V0VXNiU3RhdHVzUGFja2V0KGJybCwgc3RhdHVzUGFja2V0KSkgeworICAgICAgICAgIHNldENlbGxDb3VudChicmwsIHN0YXR1c1BhY2tldFsxXSk7CisKKyAgICAgICAgICB7CisgICAgICAgICAgICB1bnNpZ25lZCBpbnQgbW9kdWxlTnVtYmVyOworCisgICAgICAgICAgICBmb3IgKG1vZHVsZU51bWJlcj0wOyBtb2R1bGVOdW1iZXI8YnJsLT5kYXRhLT5tb2R1bGVDb3VudDsgbW9kdWxlTnVtYmVyKz0xKSB7CisgICAgICAgICAgICAgIGJybC0+ZGF0YS0+d3JpdGVNb2R1bGVbbW9kdWxlTnVtYmVyXSA9IDE7CisgICAgICAgICAgICB9CisgICAgICAgICAgfQorCisgICAgICAgICAgTUFLRV9PVVRQVVRfVEFCTEUoMFg4MCwgMFg0MCwgMFgyMCwgMFgxMCwgMFgwOCwgMFgwNCwgMFgwMiwgMFgwMSk7CisKKyAgICAgICAgICB7CisgICAgICAgICAgICBjb25zdCBLZXlUYWJsZURlZmluaXRpb24gKmt0ZDsKKworICAgICAgICAgICAgaWYgKHN0YXR1c1BhY2tldFsyXSAmIDBYODApIHsKKyAgICAgICAgICAgICAga3RkID0gYnJsLT5kYXRhLT5zdGF0dXNDb3VudD8gJktFWV9UQUJMRV9ERUZJTklUSU9OKGJkMV8zcyk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZLRVlfVEFCTEVfREVGSU5JVElPTihiZDFfMyk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICBrdGQgPSBicmwtPmRhdGEtPnN0YXR1c0NvdW50PyAmS0VZX1RBQkxFX0RFRklOSVRJT04oYmQxXzZzKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJktFWV9UQUJMRV9ERUZJTklUSU9OKGJkMV82KTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgYnJsLT5kYXRhLT5hbGxOYXZpZ2F0aW9uS2V5cyA9IG1ha2VLZXlOdW1iZXJTZXQoa3RkLT5uYW1lcywgTVRfR1JQX05hdmlnYXRpb25LZXlzKTsKKyAgICAgICAgICAgIHNldEJyYWlsbGVLZXlUYWJsZShicmwsIGt0ZCk7CisgICAgICAgICAgfQorCisgICAgICAgICAgYnJsLT5kYXRhLT5wcmVzc2VkTmF2aWdhdGlvbktleXMgPSAwOworICAgICAgICAgIGJybC0+ZGF0YS0+cm91dGluZ0tleSA9IE1UX1JPVVRJTkdfS0VZU19OT05FOworCisgICAgICAgICAgaWYgKGJybC0+ZGF0YS0+cHJvdG9jb2wtPmJlZ2luUHJvdG9jb2woYnJsKSkgcmV0dXJuIDE7CisgICAgICAgIH0KKworICAgICAgICBicmwtPmRhdGEtPnByb3RvY29sLT5zZXRIaWdoVm9sdGFnZShicmwsIDApOworICAgICAgfQorCisgICAgICBkaXNjb25uZWN0UmVzb3VyY2UoYnJsKTsKKyAgICB9CisKKyAgICBmcmVlKGJybC0+ZGF0YSk7CisgIH0gZWxzZSB7CisgICAgbG9nTWFsbG9jRXJyb3IoKTsKKyAgfQorICAKKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkCiticmxfZGVzdHJ1Y3QgKEJyYWlsbGVEaXNwbGF5ICpicmwpIHsKKyAgYnJsLT5kYXRhLT5wcm90b2NvbC0+ZW5kUHJvdG9jb2woYnJsKTsKKyAgYnJsLT5kYXRhLT5wcm90b2NvbC0+c2V0SGlnaFZvbHRhZ2UoYnJsLCAwKTsKKyAgZGlzY29ubmVjdFJlc291cmNlKGJybCk7CisgIGZyZWUoYnJsLT5kYXRhKTsKK30KKworc3RhdGljIGludAorYnJsX3dyaXRlV2luZG93IChCcmFpbGxlRGlzcGxheSAqYnJsLCBjb25zdCB3Y2hhcl90ICp0ZXh0KSB7CisgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNvdXJjZSA9IGJybC0+ZGF0YS0+bmV3Q2VsbHM7CisgIHVuc2lnbmVkIGNoYXIgKnRhcmdldCA9IGJybC0+ZGF0YS0+b2xkQ2VsbHM7CisgIHVuc2lnbmVkIGludCBtb2R1bGVOdW1iZXI7CisKKyAgbWVtY3B5KCZicmwtPmRhdGEtPm5ld0NlbGxzW2JybC0+ZGF0YS0+c3RhdHVzQ291bnRdLCBicmwtPmJ1ZmZlciwgYnJsLT5kYXRhLT50ZXh0Q291bnQpOworCisgIGZvciAobW9kdWxlTnVtYmVyPTA7IG1vZHVsZU51bWJlcjxicmwtPmRhdGEtPm1vZHVsZUNvdW50OyBtb2R1bGVOdW1iZXIrPTEpIHsKKyAgICBpZiAoY2VsbHNIYXZlQ2hhbmdlZCh0YXJnZXQsIHNvdXJjZSwgTVRfTU9EVUxFX1NJWkUsIE5VTEwsIE5VTEwsICZicmwtPmRhdGEtPndyaXRlTW9kdWxlW21vZHVsZU51bWJlcl0pKSB7CisgICAgICB1bnNpZ25lZCBjaGFyIGNlbGxzW01UX01PRFVMRV9TSVpFXTsKKworICAgICAgdHJhbnNsYXRlT3V0cHV0Q2VsbHMoY2VsbHMsIHNvdXJjZSwgTVRfTU9EVUxFX1NJWkUpOworICAgICAgaWYgKHRlbGxVc2JEZXZpY2UoYnJsLCAwWDBBK21vZHVsZU51bWJlciwgY2VsbHMsIE1UX01PRFVMRV9TSVpFKSA9PSAtMSkgcmV0dXJuIDA7CisgICAgfQorCisgICAgc291cmNlICs9IE1UX01PRFVMRV9TSVpFOworICAgIHRhcmdldCArPSBNVF9NT0RVTEVfU0laRTsKKyAgfQorCisgIHJldHVybiAxOworfQorCitzdGF0aWMgaW50Citicmxfd3JpdGVTdGF0dXMgKEJyYWlsbGVEaXNwbGF5ICpicmwsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmNlbGxzKSB7CisgIGNvbnN0IHVuc2lnbmVkIGludCBjb3VudCA9IGJybC0+ZGF0YS0+c3RhdHVzQ291bnQ7CisKKyAgaWYgKGNvdW50KSB7CisgICAgdW5zaWduZWQgY2hhciAqdGFyZ2V0ID0gJmJybC0+ZGF0YS0+bmV3Q2VsbHNbMF07CisgICAgY29uc3QgdW5zaWduZWQgY2hhciAqZW5kID0gdGFyZ2V0ICsgY291bnQ7CisKKyAgICB3aGlsZSAodGFyZ2V0IDwgZW5kKSB7CisgICAgICB1bnNpZ25lZCBjaGFyIGNlbGwgPSAqY2VsbHMrKzsKKworICAgICAgaWYgKCFjZWxsKSBicmVhazsKKyAgICAgICp0YXJnZXQrKyA9IGNlbGw7CisgICAgfQorCisgICAgd2hpbGUgKHRhcmdldCA8IGVuZCkgKnRhcmdldCsrID0gMDsKKyAgfQorCisgIHJldHVybiAxOworfQorCitzdGF0aWMgaW50CiticmxfcmVhZENvbW1hbmQgKEJyYWlsbGVEaXNwbGF5ICpicmwsIEtleVRhYmxlQ29tbWFuZENvbnRleHQgY29udGV4dCkgeworICByZXR1cm4gYnJsLT5kYXRhLT5wcm90b2NvbC0+aGFuZGxlSW5wdXQoYnJsKT8gRU9GOiBCUkxfQ01EX1JFU1RBUlRCUkw7Cit9CmRpZmYgLS1naXQgYS9Ecml2ZXJzL0JyYWlsbGUvTWV0ZWMvYnJsZGVmcy1tdC5oIGIvRHJpdmVycy9CcmFpbGxlL01ldGVjL2JybGRlZnMtbXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZGE3ZjAyCi0tLSAvZGV2L251bGwKKysrIGIvRHJpdmVycy9CcmFpbGxlL01ldGVjL2JybGRlZnMtbXQuaApAQCAtMCwwICsxLDQ4IEBACisvKgorICogQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyAqICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyAqCisgKiBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorICoKKyAqIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyAqCisgKiBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisgKi8KKworI2lmbmRlZiBCUkxUVFlfSU5DTFVERURfTVRfQlJMREVGUworI2RlZmluZSBCUkxUVFlfSU5DTFVERURfTVRfQlJMREVGUworCit0eXBlZGVmIGVudW0geworICAvKiBzdGF0dXNbMl0gKi8KKyAgTVRfS0VZX0xlZnRVcCAgICAgID0gIDYsCisgIE1UX0tFWV9MZWZ0U2VsZWN0ICA9ICA0LAorICBNVF9LRVlfTGVmdERvd24gICAgPSAgMiwKKyAgTVRfS0VZX1JpZ2h0VXAgICAgID0gIDMsCisgIE1UX0tFWV9SaWdodFNlbGVjdCA9ICAxLAorICBNVF9LRVlfUmlnaHREb3duICAgPSAgMCwKKworICAvKiBzdGF0dXNbM10gKGZyb250IGtleXMgZnJvbSBsZWZ0IHRvIHJpZ2h0KSAqLworICBNVF9LRVlfQ3Vyc29yTGVmdCAgPSAxMCwKKyAgTVRfS0VZX0N1cnNvckRvd24gID0gMTQsCisgIE1UX0tFWV9DdXJzb3JVcCAgICA9IDExLAorICBNVF9LRVlfQ3Vyc29yUmlnaHQgPSAxMgorfSBNVF9OYXZpZ2F0aW9uS2V5OworCit0eXBlZGVmIGVudW0geworICBNVF9HUlBfTmF2aWdhdGlvbktleXMgPSAwLAorCisgIE1UX0dSUF9Sb3V0aW5nS2V5czEsCisgIE1UX0dSUF9TdGF0dXNLZXlzMSwKKworICBNVF9HUlBfUm91dGluZ0tleXMyLAorICBNVF9HUlBfU3RhdHVzS2V5czIKK30gTVRfS2V5R3JvdXA7CisKKyNlbmRpZiAvKiBCUkxUVFlfSU5DTFVERURfTVRfQlJMREVGUyAqLyAKZGlmZiAtLWdpdCBhL0RyaXZlcnMvQnJhaWxsZS9NaW5pQnJhaWxsZS9NYWtlZmlsZS5pbiBiL0RyaXZlcnMvQnJhaWxsZS9NaW5pQnJhaWxsZS9NYWtlZmlsZS5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZmFhMmI2Ci0tLSAvZGV2L251bGwKKysrIGIvRHJpdmVycy9CcmFpbGxlL01pbmlCcmFpbGxlL01ha2VmaWxlLmluCkBAIC0wLDAgKzEsMjggQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyMgICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisjCisjIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyMKKyMgQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitEUklWRVJfQ09ERSA9IG1uCitEUklWRVJfTkFNRSA9IE1pbmlCcmFpbGxlCitEUklWRVJfVVNBR0UgPSAyMAorRFJJVkVSX1ZFUlNJT04gPSAKK0RSSVZFUl9ERVZFTE9QRVJTID0gQnJhaWxjb20gby5wLnMuIDx0ZWNobmlrQGJyYWlsY29tLmN6PgoraW5jbHVkZSAkKFNSQ19UT1ApYnJhaWxsZS5taworCiticmFpbGxlLiRPOgorCSQoQ0MpICQoQlJMX0NGTEFHUykgLWMgJChTUkNfRElSKS9icmFpbGxlLmMKKwpkaWZmIC0tZ2l0IGEvRHJpdmVycy9CcmFpbGxlL01pbmlCcmFpbGxlL1JFQURNRSBiL0RyaXZlcnMvQnJhaWxsZS9NaW5pQnJhaWxsZS9SRUFETUUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmE4NWM5NwotLS0gL2Rldi9udWxsCisrKyBiL0RyaXZlcnMvQnJhaWxsZS9NaW5pQnJhaWxsZS9SRUFETUUKQEAgLTAsMCArMSwxOCBAQAorU3ViamVjdAorPT09PT09PQorQnJsdHR5IGRyaXZlciBmb3IgVGllbWFuIE1pbmlCcmFpbGxlICh0aGUgMjAtY2VsbCBicmFpbGxlIGRpc3BsYXkpCisKK0F1dGhvcnMKKz09PT09PT0KK1Byb2dyYW1tZXJzIGF0IEJyYWlsY29tIG8ucC5zLCBDemVjaCByZXB1YmxpYy4gU2VlIGh0dHA6Ly93d3cuYnJhaWxjb20uY3ovCisgIGZvciBtb3JlIGluZm8uCitDb250YWN0IGVtYWlsOiA8dGVjaG5pa0BicmFpbGNvbS5jej4KKworQ3JlZGl0cworPT09PT09PQorU3BlY2lhbCB0aGFua3MgdG8gVGllbWFuLCB3aGljaCBnaXZlcyBtZSBwcm9ncmFtbWluZyBpbmZvLgorCitTdGF0dXMKKz09PT09PQorVW5tYWludGFpbmVkLCBiZWNhdXNlIEkgaGF2ZSBubyBtb3JlIHRoaXMgSFcuCisKZGlmZiAtLWdpdCBhL0RyaXZlcnMvQnJhaWxsZS9NaW5pQnJhaWxsZS9icmFpbGxlLmMgYi9Ecml2ZXJzL0JyYWlsbGUvTWluaUJyYWlsbGUvYnJhaWxsZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEwZDUxN2EKLS0tIC9kZXYvbnVsbAorKysgYi9Ecml2ZXJzL0JyYWlsbGUvTWluaUJyYWlsbGUvYnJhaWxsZS5jCkBAIC0wLDAgKzEsNDc0IEBACisvKgorICogQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyAqICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyAqCisgKiBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorICoKKyAqIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyAqCisgKiBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisgKi8KKworLyogTWluaUJyYWlsbGUvYnJhaWxsZS5jIC0gQnJhaWxsZSBkaXNwbGF5IGxpYnJhcnkKKyAqIHRoZSBmb2xsb3dpbmcgVGllbWFuIEIuVi4gYnJhaWxsZSB0ZXJtaW5hbHMgYXJlIHN1cHBvcnRlZAorICoKKyAqIC0gTWluaUJyYWlsbGUgdiAxLjUgKDIwIGJyYWlsbGUgY2VsbHMgKyAyIHN0YXR1cykKKyAqICAgKHByb2JhYmx5IG90aGVyIHZlcnNpb25zIHRvbykKKyAqCisgKiBCcmFpbGNvbSBvLnAucy4gPHRlY2huaWtAYnJhaWxjb20uY3o+CisgKgorICogVGhhbmtzIHRvIFRpZW1hbiBCLlYuLCB3aGljaCBnaXZlcyBtZSBwcm90b2NvbCBpbmZvcm1hdGlvbi4gQXV0aG9yLgorICovCisKKyNpbmNsdWRlICJwcm9sb2d1ZS5oIgorCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDx0aW1lLmg+CisKKyNpbmNsdWRlICJsb2cuaCIKKyNpbmNsdWRlICJ0aW1pbmcuaCIKKyNpbmNsdWRlICJhc2NpaS5oIgorI2luY2x1ZGUgIm1lc3NhZ2UuaCIKKworI2RlZmluZSBCUkxfU1RBVFVTX0ZJRUxEUyBzZkN1cnNvckFuZFdpbmRvd0NvbHVtbjIsIHNmQ3Vyc29yQW5kV2luZG93Um93Miwgc2ZTdGF0ZURvdHMKKyNkZWZpbmUgQlJMX0hBVkVfU1RBVFVTX0NFTExTCisjaW5jbHVkZSAiYnJsX2RyaXZlci5oIgorCisjaW5jbHVkZSAiaW9fc2VyaWFsLmgiCitzdGF0aWMgU2VyaWFsRGV2aWNlICpzZXJpYWxEZXZpY2UgPSBOVUxMOworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBzZXJpYWxCYXVkID0gOTYwMDsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgc2VyaWFsQ2hhcmFjdGVyc1BlclNlY29uZDsKKworI2RlZmluZSBLRVlfRjEgICAgIDB4MDEKKyNkZWZpbmUgS0VZX0YyICAgICAweDAyCisjZGVmaW5lIEtFWV9MRUZUICAgMHgwNAorI2RlZmluZSBLRVlfVVAgICAgIDB4MDgKKyNkZWZpbmUgS0VZX0NFTlRFUiAweDEwCisjZGVmaW5lIEtFWV9ET1dOICAgMHgyMAorI2RlZmluZSBLRVlfUklHSFQgIDB4NDAKKworI2RlZmluZSBQT1NUX0NPTU1BTkRfREVMQVkgMzAKKworc3RhdGljIHVuc2lnbmVkIGNoYXIgdGV4dENlbGxzWzIwXTsKK3N0YXRpYyB1bnNpZ25lZCBjaGFyIHN0YXR1c0NlbGxzWzJdOworc3RhdGljIGludCByZWZyZXNoTmVlZGVkOworCitzdGF0aWMgaW50Cit3cml0ZURhdGEgKEJyYWlsbGVEaXNwbGF5ICpicmwsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ5dGVzLCBpbnQgY291bnQpIHsKKyAgc3NpemVfdCByZXN1bHQgPSBzZXJpYWxXcml0ZURhdGEoc2VyaWFsRGV2aWNlLCBieXRlcywgY291bnQpOworCisgIGlmIChyZXN1bHQgPT0gLTEpIHsKKyAgICBsb2dTeXN0ZW1FcnJvcigid3JpdGUiKTsKKyAgICByZXR1cm4gMDsKKyAgfQorCisgIGRyYWluQnJhaWxsZU91dHB1dChicmwsIDApOworICBicmwtPndyaXRlRGVsYXkgKz0gKHJlc3VsdCAqIDEwMDAgLyBzZXJpYWxDaGFyYWN0ZXJzUGVyU2Vjb25kKSArIFBPU1RfQ09NTUFORF9ERUxBWTsKKyAgcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQKK3dyaXRlQ2VsbHMgIChCcmFpbGxlRGlzcGxheSAqYnJsKSB7CisgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGJlZ2luU2VxdWVuY2VbXSA9IHtBU0NJSV9FU0MsICdaJywgJzEnfTsKKyAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgZW5kU2VxdWVuY2VbXSA9IHtBU0NJSV9DUn07CisKKyAgdW5zaWduZWQgY2hhciBidWZmZXJbc2l6ZW9mKGJlZ2luU2VxdWVuY2UpICsgc2l6ZW9mKHN0YXR1c0NlbGxzKSArIHNpemVvZih0ZXh0Q2VsbHMpICsgc2l6ZW9mKGVuZFNlcXVlbmNlKV07CisgIHVuc2lnbmVkIGNoYXIgKmJ5dGUgPSBidWZmZXI7CisKKyAgYnl0ZSA9IG1lbXBjcHkoYnl0ZSwgYmVnaW5TZXF1ZW5jZSwgc2l6ZW9mKGJlZ2luU2VxdWVuY2UpKTsKKyAgYnl0ZSA9IHRyYW5zbGF0ZU91dHB1dENlbGxzKGJ5dGUsIHN0YXR1c0NlbGxzLCBzaXplb2Yoc3RhdHVzQ2VsbHMpKTsKKyAgYnl0ZSA9IHRyYW5zbGF0ZU91dHB1dENlbGxzKGJ5dGUsIHRleHRDZWxscywgc2l6ZW9mKHRleHRDZWxscykpOworICBieXRlID0gbWVtcGNweShieXRlLCBlbmRTZXF1ZW5jZSwgc2l6ZW9mKGVuZFNlcXVlbmNlKSk7CisKKyAgcmV0dXJuIHdyaXRlRGF0YShicmwsIGJ1ZmZlciwgYnl0ZS1idWZmZXIpOworfQorCitzdGF0aWMgdm9pZAordXBkYXRlQ2VsbHMgKHVuc2lnbmVkIGNoYXIgKnRhcmdldCwgY29uc3QgdW5zaWduZWQgY2hhciAqc291cmNlLCBzaXplX3QgY291bnQpIHsKKyAgaWYgKGNlbGxzSGF2ZUNoYW5nZWQodGFyZ2V0LCBzb3VyY2UsIGNvdW50LCBOVUxMLCBOVUxMLCBOVUxMKSkgeworICAgIHJlZnJlc2hOZWVkZWQgPSAxOworICB9Cit9CisKK3N0YXRpYyB2b2lkCitjbGVhckNlbGxzICh1bnNpZ25lZCBjaGFyICpjZWxscywgc2l6ZV90IGNvdW50KSB7CisgIG1lbXNldChjZWxscywgMCwgY291bnQpOworICByZWZyZXNoTmVlZGVkID0gMTsKK30KKworc3RhdGljIGludAorYmVlcCAoQnJhaWxsZURpc3BsYXkgKmJybCkgeworICBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzZXF1ZW5jZVtdID0ge0FTQ0lJX0VTQywgJ0InLCBBU0NJSV9DUn07CisgIHJldHVybiB3cml0ZURhdGEoYnJsLCBzZXF1ZW5jZSwgc2l6ZW9mKHNlcXVlbmNlKSk7Cit9CisKK3N0YXRpYyBpbnQKK2lucHV0RnVuY3Rpb25fc2hvd1RpbWUgKEJyYWlsbGVEaXNwbGF5ICpicmwpIHsKKyAgdGltZV90IGNsb2NrID0gdGltZShOVUxMKTsKKyAgY29uc3Qgc3RydWN0IHRtICpsb2NhbCA9IGxvY2FsdGltZSgmY2xvY2spOworICBjaGFyIHRleHRbc2l6ZW9mKHRleHRDZWxscykgKyAxXTsKKyAgc3RyZnRpbWUodGV4dCwgc2l6ZW9mKHRleHQpLCAiJVktJW0tJWQgJUg6JU06JVMiLCBsb2NhbCk7CisgIG1lc3NhZ2UoTlVMTCwgdGV4dCwgMCk7CisgIHJldHVybiBCUkxfQ01EX05PT1A7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBjaGFyIGN1cnNvckRvdHM7CitzdGF0aWMgdW5zaWduZWQgY2hhciBjdXJzb3JPZmZzZXQ7CisKK3N0YXRpYyB2b2lkCitwdXRDdXJzb3IgKEJyYWlsbGVEaXNwbGF5ICpicmwpIHsKKyAgYnJsLT5idWZmZXJbY3Vyc29yT2Zmc2V0XSA9IGN1cnNvckRvdHM7Cit9CisKK3N0YXRpYyBpbnQKK2lucHV0RnVuY3Rpb25faW5jcmVtZW50Q3Vyc29yIChCcmFpbGxlRGlzcGxheSAqYnJsKSB7CisgIGlmICgrK2N1cnNvck9mZnNldCA8IHNpemVvZih0ZXh0Q2VsbHMpKSByZXR1cm4gQlJMX0NNRF9OT09QOworCisgIGN1cnNvck9mZnNldCA9IDA7CisgIHJldHVybiBCUkxfQ01EX0ZXSU5SVDsKK30KKworc3RhdGljIGludAoraW5wdXRGdW5jdGlvbl9kZWNyZW1lbnRDdXJzb3IgKEJyYWlsbGVEaXNwbGF5ICpicmwpIHsKKyAgaWYgKGN1cnNvck9mZnNldCkgeworICAgIC0tY3Vyc29yT2Zmc2V0OworICAgIHJldHVybiBCUkxfQ01EX05PT1A7CisgIH0KKworICBjdXJzb3JPZmZzZXQgPSBzaXplb2YodGV4dENlbGxzKSAtIDE7CisgIHJldHVybiBCUkxfQ01EX0ZXSU5MVDsKK30KKwordHlwZWRlZiBzdHJ1Y3QgSW5wdXRNb2RlU3RydWN0IElucHV0TW9kZTsKKwordHlwZWRlZiBlbnVtIHsKKyAgSUJUX3VuYm91bmQgPSAwLCAvKiBhdXRvbWF0aWNhbGx5IHNldCBpZiBub3QgZXhwbGljaXRseSBpbml0aWFsaXplZCAqLworICBJQlRfY29tbWFuZCwKKyAgSUJUX2Jsb2NrLAorICBJQlRfZnVuY3Rpb24sCisgIElCVF9zdWJtb2RlCit9IElucHV0QmluZGluZ1R5cGU7CisKK3R5cGVkZWYgdW5pb24geworICBpbnQgY29tbWFuZDsKKyAgaW50IGJsb2NrOworICBpbnQgKCpmdW5jdGlvbikgKEJyYWlsbGVEaXNwbGF5ICpicmwpOworICBjb25zdCBJbnB1dE1vZGUgKnN1Ym1vZGU7Cit9IElucHV0QmluZGluZ1ZhbHVlOworCit0eXBlZGVmIHN0cnVjdCB7CisgIElucHV0QmluZGluZ1R5cGUgdHlwZTsKKyAgSW5wdXRCaW5kaW5nVmFsdWUgdmFsdWU7Cit9IElucHV0QmluZGluZzsKKworc3RydWN0IElucHV0TW9kZVN0cnVjdCB7CisgIElucHV0QmluZGluZyBrZXlGMSwga2V5RjIsIGtleUxlZnQsIGtleVVwLCBrZXlDZW50ZXIsIGtleURvd24sIGtleVJpZ2h0OworCisgIHVuc2lnbmVkIHRlbXBvcmFyeToxOworICB2b2lkICgqbW9kaWZ5V2luZG93KSAoQnJhaWxsZURpc3BsYXkgKmJybCk7CisgIGNvbnN0IGNoYXIgKm5hbWU7Cit9OworCisjZGVmaW5lIEJJTkQoayx0LHYpIC5rZXkjI2sgPSB7LnR5cGUgPSBJQlRfIyN0LCAudmFsdWUudCA9ICh2KX0KKyNkZWZpbmUgQklORF9DT01NQU5EKGssYykgQklORChrLCBjb21tYW5kLCBCUkxfQ01EXyMjYykKKyNkZWZpbmUgQklORF9CTE9DSyhrLGIpIEJJTkQoaywgYmxvY2ssIEJSTF9DTURfQkxLKGIpKQorI2RlZmluZSBCSU5EX0ZVTkNUSU9OKGssZikgQklORChrLCBmdW5jdGlvbiwgaW5wdXRGdW5jdGlvbl8jI2YpCisjZGVmaW5lIEJJTkRfU1VCTU9ERShrLG0pIEJJTkQoaywgc3VibW9kZSwgJmlucHV0TW9kZV8jI20pCisKK3N0YXRpYyBjb25zdCBJbnB1dE1vZGUgaW5wdXRNb2RlX2NoYXJfZjEgPSB7CisgIEJJTkRfQkxPQ0soRjEsIFNFVExFRlQpLAorICBCSU5EX0JMT0NLKEYyLCBERVNDQ0hBUiksCisgIEJJTkRfQkxPQ0soTGVmdCwgQ0xJUF9BREQpLAorICBCSU5EX0JMT0NLKFVwLCBDTElQX05FVyksCisgIEJJTkRfQkxPQ0soQ2VudGVyLCBST1VURSksCisgIEJJTkRfQkxPQ0soRG93biwgQ09QWV9SRUNUKSwKKyAgQklORF9CTE9DSyhSaWdodCwgQ09QWV9MSU5FKSwKKworICAudGVtcG9yYXJ5ID0gMSwKKyAgLm5hbWUgPSAiQ2hhci1GMSIKK307CisKK3N0YXRpYyBjb25zdCBJbnB1dE1vZGUgaW5wdXRNb2RlX2YxX2YxID0geworICBCSU5EX0NPTU1BTkQoRjEsIEhFTFApLAorICBCSU5EX0NPTU1BTkQoRjIsIExFQVJOKSwKKyAgQklORF9DT01NQU5EKExlZnQsIElORk8pLAorICBCSU5EX0ZVTkNUSU9OKFJpZ2h0LCBzaG93VGltZSksCisgIEJJTkRfQ09NTUFORChVcCwgUFJFRkxPQUQpLAorICBCSU5EX0NPTU1BTkQoRG93biwgUFJFRk1FTlUpLAorICBCSU5EX0NPTU1BTkQoQ2VudGVyLCBQUkVGU0FWRSksCisKKyAgLnRlbXBvcmFyeSA9IDEsCisgIC5uYW1lID0gIkYxLUYxIgorfTsKKworc3RhdGljIGNvbnN0IElucHV0TW9kZSBpbnB1dE1vZGVfZjFfZjIgPSB7CisgIEJJTkRfQ09NTUFORChGMSwgRlJFRVpFKSwKKyAgQklORF9DT01NQU5EKEYyLCBESVNQTUQpLAorICBCSU5EX0NPTU1BTkQoTGVmdCwgQVRUUlZJUyksCisgIEJJTkRfQ09NTUFORChSaWdodCwgQ1NSVklTKSwKKyAgQklORF9DT01NQU5EKFVwLCBTS1BCTE5LV0lOUyksCisgIEJJTkRfQ09NTUFORChEb3duLCBTS1BJRExOUyksCisgIEJJTkRfQ09NTUFORChDZW50ZXIsIFNJWERPVFMpLAorCisgIC50ZW1wb3JhcnkgPSAxLAorICAubmFtZSA9ICJGMS1GMiIKK307CisKK3N0YXRpYyBjb25zdCBJbnB1dE1vZGUgaW5wdXRNb2RlX2YxX2xlZnQgPSB7CisKKyAgLnRlbXBvcmFyeSA9IDEsCisgIC5uYW1lID0gIkYxLUxlZnQiCit9OworCitzdGF0aWMgY29uc3QgSW5wdXRNb2RlIGlucHV0TW9kZV9mMV9yaWdodCA9IHsKKyAgQklORF9DT01NQU5EKEYyLCBBVVRPU1BFQUspLAorICBCSU5EX0NPTU1BTkQoTGVmdCwgU0FZX0FCT1ZFKSwKKyAgQklORF9DT01NQU5EKFJpZ2h0LCBTQVlfQkVMT1cpLAorICBCSU5EX0NPTU1BTkQoVXAsIE1VVEUpLAorICBCSU5EX0NPTU1BTkQoRG93biwgU0FZX0xJTkUpLAorICBCSU5EX0NPTU1BTkQoQ2VudGVyLCBTUEtIT01FKSwKKworICAudGVtcG9yYXJ5ID0gMSwKKyAgLm5hbWUgPSAiRjEtUmlnaHQiCit9OworCitzdGF0aWMgY29uc3QgSW5wdXRNb2RlIGlucHV0TW9kZV9mMV91cCA9IHsKKyAgQklORF9DT01NQU5EKEYxLCBQUlNFQVJDSCksCisgIEJJTkRfQ09NTUFORChGMiwgTlhTRUFSQ0gpLAorICBCSU5EX0NPTU1BTkQoTGVmdCwgQVRUUlVQKSwKKyAgQklORF9DT01NQU5EKFJpZ2h0LCBBVFRSRE4pLAorICBCSU5EX0NPTU1BTkQoVXAsIFBSUEdSUEgpLAorICBCSU5EX0NPTU1BTkQoRG93biwgTlhQR1JQSCksCisgIEJJTkRfQ09NTUFORChDZW50ZXIsIENTUkpNUF9WRVJUKSwKKworICAudGVtcG9yYXJ5ID0gMSwKKyAgLm5hbWUgPSAiRjEtVXAiCit9OworCitzdGF0aWMgY29uc3QgSW5wdXRNb2RlIGlucHV0TW9kZV9mMV9kb3duID0geworICBCSU5EX0NPTU1BTkQoRjEsIFBSUFJPTVBUKSwKKyAgQklORF9DT01NQU5EKEYyLCBOWFBST01QVCksCisgIEJJTkRfQ09NTUFORChMZWZ0LCBGV0lOTFRTS0lQKSwKKyAgQklORF9DT01NQU5EKFJpZ2h0LCBGV0lOUlRTS0lQKSwKKyAgQklORF9DT01NQU5EKFVwLCBQUkRJRkxOKSwKKyAgQklORF9DT01NQU5EKERvd24sIE5YRElGTE4pLAorICBCSU5EX0NPTU1BTkQoQ2VudGVyLCBQQVNURSksCisKKyAgLnRlbXBvcmFyeSA9IDEsCisgIC5uYW1lID0gIkYxLURvd24iCit9OworCitzdGF0aWMgY29uc3QgSW5wdXRNb2RlIGlucHV0TW9kZV9mMV9jZW50ZXIgPSB7CisgIEJJTkRfU1VCTU9ERShGMSwgY2hhcl9mMSksCisgIEJJTkRfRlVOQ1RJT04oTGVmdCwgZGVjcmVtZW50Q3Vyc29yKSwKKyAgQklORF9GVU5DVElPTihSaWdodCwgaW5jcmVtZW50Q3Vyc29yKSwKKyAgQklORF9DT01NQU5EKFVwLCBMTlVQKSwKKyAgQklORF9DT01NQU5EKERvd24sIExORE4pLAorCisgIC50ZW1wb3JhcnkgPSAwLAorICAubW9kaWZ5V2luZG93ID0gcHV0Q3Vyc29yLAorICAubmFtZSA9ICJGMS1DZW50ZXIiCit9OworCitzdGF0aWMgY29uc3QgSW5wdXRNb2RlIGlucHV0TW9kZV9mMSA9IHsKKyAgQklORF9TVUJNT0RFKEYxLCBmMV9mMSksCisgIEJJTkRfU1VCTU9ERShGMiwgZjFfZjIpLAorICBCSU5EX1NVQk1PREUoTGVmdCwgZjFfbGVmdCksCisgIEJJTkRfU1VCTU9ERShSaWdodCwgZjFfcmlnaHQpLAorICBCSU5EX1NVQk1PREUoVXAsIGYxX3VwKSwKKyAgQklORF9TVUJNT0RFKERvd24sIGYxX2Rvd24pLAorICBCSU5EX1NVQk1PREUoQ2VudGVyLCBmMV9jZW50ZXIpLAorCisgIC50ZW1wb3JhcnkgPSAxLAorICAubmFtZSA9ICJGMSIKK307CisKK3N0YXRpYyBjb25zdCBJbnB1dE1vZGUgaW5wdXRNb2RlX2YyID0geworICBCSU5EX0NPTU1BTkQoRjEsIFRPUF9MRUZUKSwKKyAgQklORF9DT01NQU5EKEYyLCBCT1RfTEVGVCksCisgIEJJTkRfQ09NTUFORChMZWZ0LCBMTkJFRyksCisgIEJJTkRfQ09NTUFORChSaWdodCwgTE5FTkQpLAorICBCSU5EX0NPTU1BTkQoVXAsIFRPUCksCisgIEJJTkRfQ09NTUFORChEb3duLCBCT1QpLAorICBCSU5EX0NPTU1BTkQoQ2VudGVyLCBDU1JUUkspLAorCisgIC50ZW1wb3JhcnkgPSAxLAorICAubmFtZSA9ICJGMiIKK307CisKK3N0YXRpYyBjb25zdCBJbnB1dE1vZGUgaW5wdXRNb2RlX2Jhc2ljID0geworICBCSU5EX1NVQk1PREUoRjEsIGYxKSwKKyAgQklORF9TVUJNT0RFKEYyLCBmMiksCisgIEJJTkRfQ09NTUFORChMZWZ0LCBGV0lOTFQpLAorICBCSU5EX0NPTU1BTkQoUmlnaHQsIEZXSU5SVCksCisgIEJJTkRfQ09NTUFORChVcCwgTE5VUCksCisgIEJJTkRfQ09NTUFORChEb3duLCBMTkROKSwKKyAgQklORF9DT01NQU5EKENlbnRlciwgUkVUVVJOKSwKKworICAudGVtcG9yYXJ5ID0gMCwKKyAgLm5hbWUgPSAiQmFzaWMiCit9OworCitzdGF0aWMgY29uc3QgSW5wdXRNb2RlICppbnB1dE1vZGU7CitzdGF0aWMgVGltZVBlcmlvZCBpbnB1dFBlcmlvZDsKKworc3RhdGljIHZvaWQKK3NldElucHV0TW9kZSAoY29uc3QgSW5wdXRNb2RlICptb2RlKSB7CisgIGlmIChtb2RlLT50ZW1wb3JhcnkpIHsKKyAgICBjaGFyIHRpdGxlW3NpemVvZih0ZXh0Q2VsbHMpICsgMV07CisgICAgc25wcmludGYodGl0bGUsIHNpemVvZih0aXRsZSksICIlcyBNb2RlIiwgbW9kZS0+bmFtZSk7CisgICAgbWVzc2FnZShOVUxMLCB0aXRsZSwgTVNHX05PREVMQVl8TVNHX1NJTEVOVCk7CisgIH0KKworICBpbnB1dE1vZGUgPSBtb2RlOworICBzdGFydFRpbWVQZXJpb2QoJmlucHV0UGVyaW9kLCAzMDAwKTsKK30KKworc3RhdGljIHZvaWQKK3Jlc2V0SW5wdXRNb2RlICh2b2lkKSB7CisgIHNldElucHV0TW9kZSgmaW5wdXRNb2RlX2Jhc2ljKTsKK30KKworc3RhdGljIGludAorYnJsX2NvbnN0cnVjdCAoQnJhaWxsZURpc3BsYXkgKmJybCwgY2hhciAqKnBhcmFtZXRlcnMsIGNvbnN0IGNoYXIgKmRldmljZSkgeworICBpZiAoIWlzU2VyaWFsRGV2aWNlSWRlbnRpZmllcigmZGV2aWNlKSkgeworICAgIHVuc3VwcG9ydGVkRGV2aWNlSWRlbnRpZmllcihkZXZpY2UpOworICAgIHJldHVybiAwOworICB9CisKKyAgaWYgKChzZXJpYWxEZXZpY2UgPSBzZXJpYWxPcGVuRGV2aWNlKGRldmljZSkpKSB7CisgICAgaWYgKHNlcmlhbFJlc3RhcnREZXZpY2Uoc2VyaWFsRGV2aWNlLCBzZXJpYWxCYXVkKSkgeworICAgICAgc2VyaWFsQ2hhcmFjdGVyc1BlclNlY29uZCA9IHNlcmlhbEJhdWQgLyBzZXJpYWxHZXRDaGFyYWN0ZXJCaXRzKHNlcmlhbERldmljZSk7CisKKyAgICAgIC8qIGhtLCBob3cgdG8gc3dpdGNoIHRvIDM4NDAwID8gCisgICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzZXF1ZW5jZVtdID0ge0FTQ0lJX0VTQywgJ1YnLCBBU0NJSV9DUn07CisgICAgICB3cml0ZURhdGEoYnJsLCBzZXF1ZW5jZSwgc2l6ZW9mKHNlcXVlbmNlKSk7CisgICAgICBzZXJpYWxEaXNjYXJkSW5wdXQoc2VyaWFsRGV2aWNlKTsKKyAgICAgIHNlcmlhbFNldEJhdWQoc2VyaWFsRGV2aWNlLCAzODQwMCk7CisgICAgICAqLworCisgICAgICBNQUtFX09VVFBVVF9UQUJMRSgwWDAxLCAwWDAyLCAwWDA0LCAwWDgwLCAwWDQwLCAwWDIwLCAwWDA4LCAwWDEwKTsKKyAgICAgIGNsZWFyQ2VsbHModGV4dENlbGxzLCAgc2l6ZW9mKHRleHRDZWxscykpOworICAgICAgY2xlYXJDZWxscyhzdGF0dXNDZWxscywgIHNpemVvZihzdGF0dXNDZWxscykpOworICAgICAgcmVzZXRJbnB1dE1vZGUoKTsKKworICAgICAgY3Vyc29yRG90cyA9IDBYRkY7CisgICAgICBjdXJzb3JPZmZzZXQgPSBzaXplb2YodGV4dENlbGxzKSAvIDI7CisKKyAgICAgIGJybC0+dGV4dENvbHVtbnMgPSBzaXplb2YodGV4dENlbGxzKTsKKyAgICAgIGJybC0+dGV4dFJvd3MgPSAxOworICAgICAgYnJsLT5zdGF0dXNDb2x1bW5zID0gc2l6ZW9mKHN0YXR1c0NlbGxzKTsKKyAgICAgIGJybC0+c3RhdHVzUm93cyA9IDE7CisKKyAgICAgIGJlZXAoYnJsKTsKKyAgICAgIHJldHVybiAxOworICAgIH0KKworICAgIHNlcmlhbENsb3NlRGV2aWNlKHNlcmlhbERldmljZSk7CisgICAgc2VyaWFsRGV2aWNlID0gTlVMTDsKKyAgfQorCisgIHJldHVybiAwOworfQorCitzdGF0aWMgdm9pZAorYnJsX2Rlc3RydWN0IChCcmFpbGxlRGlzcGxheSAqYnJsKSB7CisgIGlmIChzZXJpYWxEZXZpY2UpIHsKKyAgICBzZXJpYWxDbG9zZURldmljZShzZXJpYWxEZXZpY2UpOworICAgIHNlcmlhbERldmljZSA9IE5VTEw7CisgIH0KK30KKworc3RhdGljIGludAorYnJsX3dyaXRlV2luZG93IChCcmFpbGxlRGlzcGxheSAqYnJsLCBjb25zdCB3Y2hhcl90ICp0ZXh0KSB7CisgIGlmIChpbnB1dE1vZGUtPm1vZGlmeVdpbmRvdykgaW5wdXRNb2RlLT5tb2RpZnlXaW5kb3coYnJsKTsKKyAgdXBkYXRlQ2VsbHModGV4dENlbGxzLCBicmwtPmJ1ZmZlciwgc2l6ZW9mKHRleHRDZWxscykpOworICBpZiAocmVmcmVzaE5lZWRlZCAmJiAhaW5wdXRNb2RlLT50ZW1wb3JhcnkpIHsKKyAgICB3cml0ZUNlbGxzKGJybCk7CisgICAgcmVmcmVzaE5lZWRlZCA9IDA7CisgIH0KKyAgcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQKK2JybF93cml0ZVN0YXR1cyAoQnJhaWxsZURpc3BsYXkgKmJybCwgY29uc3QgdW5zaWduZWQgY2hhciAqcykgeworICB1cGRhdGVDZWxscyhzdGF0dXNDZWxscywgcywgc2l6ZW9mKHN0YXR1c0NlbGxzKSk7CisgIHJldHVybiAxOworfQorCitzdGF0aWMgaW50CiticmxfcmVhZENvbW1hbmQgKEJyYWlsbGVEaXNwbGF5ICpicmwsIEtleVRhYmxlQ29tbWFuZENvbnRleHQgY29udGV4dCkgeworICB1bnNpZ25lZCBjaGFyIGJ5dGU7CisgIGNvbnN0IElucHV0TW9kZSAqbW9kZTsKKyAgY29uc3QgSW5wdXRCaW5kaW5nICpiaW5kaW5nOworCisgIHsKKyAgICBpbnQgcmVzdWx0ID0gc2VyaWFsUmVhZERhdGEoc2VyaWFsRGV2aWNlLCAmYnl0ZSwgMSwgMCwgMCk7CisKKyAgICBpZiAocmVzdWx0ID09IDApIHsKKyAgICAgIGlmIChpbnB1dE1vZGUtPnRlbXBvcmFyeSkKKyAgICAgICAgaWYgKGFmdGVyVGltZVBlcmlvZCgmaW5wdXRQZXJpb2QsIE5VTEwpKQorICAgICAgICAgIHJlc2V0SW5wdXRNb2RlKCk7CisKKyAgICAgIHJldHVybiBFT0Y7CisgICAgfQorCisgICAgaWYgKHJlc3VsdCA9PSAtMSkgeworICAgICAgbG9nU3lzdGVtRXJyb3IoInJlYWQiKTsKKyAgICAgIHJldHVybiBCUkxfQ01EX1JFU1RBUlRCUkw7CisgICAgfQorICB9CisKKyAgbW9kZSA9IGlucHV0TW9kZTsKKyAgaWYgKG1vZGUtPnRlbXBvcmFyeSkgcmVzZXRJbnB1dE1vZGUoKTsKKworICBzd2l0Y2ggKGJ5dGUpIHsKKyAgICBjYXNlIEtFWV9GMTogICAgIGJpbmRpbmcgPSAmbW9kZS0+a2V5RjE7ICAgICBicmVhazsKKyAgICBjYXNlIEtFWV9GMjogICAgIGJpbmRpbmcgPSAmbW9kZS0+a2V5RjI7ICAgICBicmVhazsKKyAgICBjYXNlIEtFWV9MRUZUOiAgIGJpbmRpbmcgPSAmbW9kZS0+a2V5TGVmdDsgICBicmVhazsKKyAgICBjYXNlIEtFWV9SSUdIVDogIGJpbmRpbmcgPSAmbW9kZS0+a2V5UmlnaHQ7ICBicmVhazsKKyAgICBjYXNlIEtFWV9VUDogICAgIGJpbmRpbmcgPSAmbW9kZS0+a2V5VXA7ICAgICBicmVhazsKKyAgICBjYXNlIEtFWV9ET1dOOiAgIGJpbmRpbmcgPSAmbW9kZS0+a2V5RG93bjsgICBicmVhazsKKyAgICBjYXNlIEtFWV9DRU5URVI6IGJpbmRpbmcgPSAmbW9kZS0+a2V5Q2VudGVyOyBicmVhazsKKworICAgIGRlZmF1bHQ6CisgICAgICBsb2dNZXNzYWdlKExPR19XQVJOSU5HLCAidW5oYW5kbGVkIGtleTogJXMgLT4gJTAyWCIsIG1vZGUtPm5hbWUsIGJ5dGUpOworICAgICAgYmVlcChicmwpOworICAgICAgcmV0dXJuIEVPRjsKKyAgfQorCisgIHN3aXRjaCAoYmluZGluZy0+dHlwZSkgeworICAgIGNhc2UgSUJUX3VuYm91bmQ6CisgICAgICBsb2dNZXNzYWdlKExPR19XQVJOSU5HLCAidW5ib3VuZCBrZXk6ICVzIC0+ICUwMlgiLCBtb2RlLT5uYW1lLCBieXRlKTsKKyAgICAgIGJlZXAoYnJsKTsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBJQlRfY29tbWFuZDoKKyAgICAgIHJldHVybiBiaW5kaW5nLT52YWx1ZS5jb21tYW5kOworCisgICAgY2FzZSBJQlRfYmxvY2s6CisgICAgICByZXR1cm4gYmluZGluZy0+dmFsdWUuYmxvY2sgKyBjdXJzb3JPZmZzZXQ7CisKKyAgICBjYXNlIElCVF9mdW5jdGlvbjoKKyAgICAgIHJldHVybiBiaW5kaW5nLT52YWx1ZS5mdW5jdGlvbihicmwpOworCisgICAgY2FzZSBJQlRfc3VibW9kZTogeworICAgICAgc2V0SW5wdXRNb2RlKGJpbmRpbmctPnZhbHVlLnN1Ym1vZGUpOworICAgICAgYnJlYWs7CisgICAgfQorCisgICAgZGVmYXVsdDoKKyAgICAgIGxvZ01lc3NhZ2UoTE9HX1dBUk5JTkcsICJ1bmhhbmRsZWQgaW5wdXQgYmluZGluZyB0eXBlOiAlMDJYIiwgYmluZGluZy0+dHlwZSk7CisgICAgICBicmVhazsKKyAgfQorCisgIHJldHVybiBCUkxfQ01EX05PT1A7Cit9CmRpZmYgLS1naXQgYS9Ecml2ZXJzL0JyYWlsbGUvTXVsdGlCcmFpbGxlL01ha2VmaWxlLmluIGIvRHJpdmVycy9CcmFpbGxlL011bHRpQnJhaWxsZS9NYWtlZmlsZS5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZDhlZTFiCi0tLSAvZGV2L251bGwKKysrIGIvRHJpdmVycy9CcmFpbGxlL011bHRpQnJhaWxsZS9NYWtlZmlsZS5pbgpAQCAtMCwwICsxLDI4IEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisjICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorIworIyBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisjCisjIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisjCisjIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyMgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorIyBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyMKKyMgV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworIworIyBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworRFJJVkVSX0NPREUgPSBtYgorRFJJVkVSX05BTUUgPSBNdWx0aUJyYWlsbGUKK0RSSVZFUl9VU0FHRSA9IE1CMTI1Q1IsIE1CMTQ1Q1IsIE1CMTg1Q1IKK0RSSVZFUl9WRVJTSU9OID0gCitEUklWRVJfREVWRUxPUEVSUyA9IFdvbGZnYW5nIEFzdGxlaXRuZXIKK2luY2x1ZGUgJChTUkNfVE9QKWJyYWlsbGUubWsKKworYnJhaWxsZS4kTzoKKwkkKENDKSAkKEJSTF9DRkxBR1MpIC1jICQoU1JDX0RJUikvYnJhaWxsZS5jCisKZGlmZiAtLWdpdCBhL0RyaXZlcnMvQnJhaWxsZS9NdWx0aUJyYWlsbGUvUkVBRE1FIGIvRHJpdmVycy9CcmFpbGxlL011bHRpQnJhaWxsZS9SRUFETUUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzg0ZDY1MwotLS0gL2Rldi9udWxsCisrKyBiL0RyaXZlcnMvQnJhaWxsZS9NdWx0aUJyYWlsbGUvUkVBRE1FCkBAIC0wLDAgKzEsMjI0IEBACitWZXJzaW9uIFYxLjAsIE1hcmNoL0FwcmlsIDIwMDAKKworRHJpdmVyIGZvciBUaWVtYW4gQi5WLidzIE11bHRpQnJhaWxsZSBzZXJpZXMKKworQ29weXJpZ2h0IChDKSAyMDAwIGJ5IFdvbGZnYW5nIEFzdGxlaXRuZXIuCisoIE1vZGlmaWNhdGlvbiBvZiBDb21iaUJyYWlsbGUtZHJpdmVyOiAKKyAgQ29weXJpZ2h0IChDKSAxOTk1LCAxOTk2IGJ5IE5pa2hpbCBOYWlyLgorKQorCitUaGlzIGRyaXZlciBpcyBwYXJ0IG9mIEJSTFRUWSwgYW5kIGFzIHN1Y2ggaXQgaXMgcGxhY2VkIHVuZGVyIHRoZQordGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgaW4gdGhlIHRvcC1sZXZlbAorZGlyZWN0b3J5IGZvciBkZXRhaWxzLgorCitUaGlzIGRyaXZlciBpcyBtYWludGFpbmVkIGJ5IFdvbGZnYW5nIEFzdGxlaXRuZXIgPHdvbGZnYW5nLmFzdGxlaXRuZXJAbGl3ZXN0LmF0Pi4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworU1VQUE9SVEVEIEhBUkRXQVJFCis9PT09PT09PT09PT09PT09PT0KKworVGhpcyBkcml2ZXIgaGFzIG9ubHkgYmVlbiB0ZXN0ZWQgb24gYSAidGllbWFuIEJyYWlsbGVub3RlYm9vayBWMi4xIiB3aXRoIGEKK2J1aWxkLWluIE11bHRpQnJhaWxsZSBNQjE0NUNSLCBidXQgdGhlIGZvbGxvd2luZyBoYXJkd2FyZSBzaG91bGQgYWxzbyBiZQorc3VwcG9ydGVkOgorCistIEJyYWlsbGVsaW5lIDEyNSAoTUIxMjVDUikKKy0gQnJhaWxsZWxpbmUgMTQ1IChNQjE0NUNSKSAvIFBJQ08gSUkKKy0gQnJhaWxsZWxpbmUgMTg1IChNQjE4NUNSKQorCitJIHJlY2VpdmVkIHRoZSB0ZWNobmljYWwgZG9jdW1lbnRhdGlvbiBmb3IgdGhlc2UgZGlzcGxheXMgZnJvbSB0aWVtYW4gZ2VybWFueQorYW5kIGRldmVsb3BlZCB0aGUgZHJpdmVyIHNvIHRoYXQgaXQgc2hvdWxkIGJlIGFibGUgdG8gaWRlbnRpZnkgdGhlIGFib3ZlIGxpc3RlZAorZGlzcGxheXMuCisKK1Byb2JsZW06Cit0aGUgdGVjaC4gZG9jLiBpcyBwb29yIChJIGtub3cgdGhhdCBteSBzcG9rZW4vd3JpdHRlbiBlbmdsaXNoIGlzIG5vdAorZ29vZCwgYnV0IHdoYXQgSSBzYXcgdGhlcmUgbWFkZSBtZSBiZWxpZXZlIHRoYXQgSSBhbSBhIG5hdGl2ZSBzcGVha2VyIDstKQorWW91IGhhdmUgdG8gYmUgdmVyeSBjcmVhdGl2ZSB0byBnZXQgc29tZXRoaW5nIG91dCBmcm9tIHRoZXNlIGRvY3MuLi4KK0EgbG90IG9mIHRyaWFsIGFuZCBlcnJvci1wcm9ncmFtbWluZy4uLgorCitJIGRpZCBub3QgaW5jbHVkZSBzdXBwb3J0IGZvciB0aGUgc3BlZWNoIHN5bnRoZXNpc2VyIHlldC4KK01haW5seSBiZWNhdXNlIEkgZGlkbid0IGdldCB0aGUgY2x1ZSBob3cgdG8gcmVhbGl6ZSBpdCAtIHRoZSBzZWN0aW9uIGluIHRoZQordGVjaC4gZG9jcyBhYm91dCB0aGlzIGlzIHRvbyBwb29yIG9yIEkgZGlkbid0IGp1c3QgZ2V0IGl0IC4uLgorCisKK0NPTkZJR1VSQVRJT04gQU5EIENPTVBJTEFUSU9OCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitGb3IgZ2VuZXJhbCBpbmZvcm1hdGlvbiBhYm91dCBjb25maWd1cmluZyBhbmQgY29tcGlsaW5nIEJSTFRUWSwgcGxlYXNlCitzZWUgdGhlIEJSTFRUWSBtYW51YWwuCisKK0FueSBNdWx0aUJyYWlsbGUtc3BlY2lmaWMgY29uZmlndXJhdGlvbiBpcyBkb25lIGJ5IGVkaXRpbmcgdGhlCiticmFpbGxlLmggZmlsZSBpbiB0aGlzIGRpcmVjdG9yeS4gIEhvd2V2ZXIsIHN1Y2ggY29uZmlndXJhdGlvbiBpcworcHJvYmFibHkgdW5uZWNlc3NhcnkgYXMgdGhlIGRpc3BsYXkgc2l6ZSBpcyBhdXRvZGV0ZWN0ZWQgZHVyaW5nCitpbml0aWFsaXNhdGlvbiBhdCBydW4tdGltZS4KKworQnkgZGVmYXVsdCwgQlJMVFRZIGNhbiBiZSBzdGFydGVkIGV2ZW4gaWYgdGhlIE11bHRpQnJhaWxsZSBpcyBzd2l0Y2hlZAorb2ZmIG9yIG5vdCBjb25uZWN0ZWQgLSBpdCB3aWxsIHdhaXQgaW4gdGhlIGJhY2tncm91bmQsIGNoZWNraW5nIGV2ZXJ5CitmaXZlIHNlY29uZHMgZm9yIGEgZGlzcGxheS4gIFRoaXMgYmVoYXZpb3VyIGNhbiBiZSBjaGFuZ2VkIGJ5CithZGp1c3RpbmcgdGhlIHZhbHVlcyBvZiBBQ0tfVElNRU9VVCBhbmQgTUFYX0FUVEVNUFRTLgorCitUaGUgZHJpdmVyIHNob3VsZCBwcm9iYWJseSBzZXQgdGhlIGF1dG9yZXBlYXQgZGVsYXkgYW5kIHJhdGUgb2YgdGhlCitCcmFpbGxlIGRpc3BsYXkncyBrZXlzIGR1cmluZyBpbml0aWFsaXNhdGlvbi4gIFRoaXMgaXMgeWV0IHRvIGJlCitpbXBsZW1lbnRlZC4KKworVGhlIGJyYWlsbGUgZG90IGtleXMsIHRoZSBmcm9udCBrZXlzIGFuZCAzIGN1cnNvciByb3V0aW5nIGtleXMgY2FuIGJlCitjdXN0b21pemVkIGluICd0YWJsZXMuaCcgKHJlYWQgYWxzbyBiZWxvdykuCisKKworR0VUVElORyBTVEFSVEVECis9PT09PT09PT09PT09PT0KKworVGhlIE11bHRpQnJhaWxsZSBtdXN0IGJlIGNvbm5lY3RlZCB0byB0aGUgc2VyaWFsIGRldmljZSB5b3UgY2hvc2UKK2R1cmluZyBjb25maWd1cmF0aW9uLCB1bmxlc3Mgb2YgY291cnNlIHlvdSB1c2UgdGhlIC1kIG9wdGlvbiB0bworQlJMVFRZLiAgVGhlIHNlcmlhbCBpbnRlcmZhY2UgbXVzdCBiZSBzZWxlY3RlZDsgdGhpcyBpcyBkb25lIGJ5Citob2xkaW5nIHRoZSBsZWZ0LW1vc3QgdGh1bWIga2V5IHdoaWxlIHR1cm5pbmcgb24gdGhlIGRpc3BsYXkuICBCUkxUVFkKK3Nob3VsZCB0aGVuIGRpc3BsYXkgaXRzIHN0YXJ0dXAgbWVzc2FnZSBiZWZvcmUgc3RhcnRpbmcgdG8gZWNobyB0aGUKK3NjcmVlbi4KKworCitLRVkgQklORElOR1MKKz09PT09PT09PT09PQorCitUaGUga2V5IGJpbmRpbmdzIC0gcGFydGljdWxhcmx5IHdpdGggcmVnYXJkIHRvIHRoZSBCcmFpbGxlIGRvdCBrZXlzIC0KK2hhdmUgYmVlbiByZWRlc2lnbmVkIGZyb20gdGhlIERPUyBkcml2ZXIgcHJvdmlkZWQgd2l0aCB0aGUKK0NvbWJpQnJhaWxsZS4gIEhvd2V2ZXIsIHRoZSBmaXZlIHRodW1iIGtleXMgd29yayBzaW1pbGFybHkuICBJZiB3ZQorbGFiZWwgdGhlbSBBIHRvIEUgZnJvbSBsZWZ0IHRvIHJpZ2h0LCB0aGVuIEEgaXMgRldJTkxUIChnbyBsZWZ0IG9uZQorZnVsbCB3aW5kb3cgd2lkdGgpLCBCIGlzIExOVVAgKGdvIHVwIG9uZSBsaW5lKSwgRCBpcyBMTkROIChnbyBkb3duIG9uZQorbGluZSkgYW5kIEUgaXMgRldJTlJUIChnbyByaWdodCBvbmUgZnVsbCB3aW5kb3cgd2lkdGgpLiAgQyB0b2dnbGVzCitjdXJzb3IgdHJhY2tpbmcsIHNvIEMgdHdpY2UgbW92ZXMgdGhlIHdpbmRvdyB0byB0aGUgY3Vyc29yIHBvc2l0aW9uLgorCitUaGlzIGNhbiBiZSBjdXN0b21pemVkIGluICd0YWJsZXMuaCcgKGFycmF5IGNtZF9UX3RyYW5zW10pLgorCitUaGUgZXh0cmEgY3Vyc29yIHJvdXRpbmcga2V5IChvdmVyIHRoZSBnYXAgYmV0d2VlbiB0aGUgc3RhdHVzIGNlbGxzCithbmQgdGhlIG1haW4gZGlzcGxheSkgaXMgdXNlZCB0byBicmluZyB1cCB0aGUgaGVscCBzY3JlZW4uICBQcmVzc2luZwordGhpcyBrZXkgYWdhaW4gZ29lcyBiYWNrIHRvIG5vcm1hbCBvcGVyYXRpb24uICBUaGUgaGVscCBzY3JlZW4gaGFzIGEKK2Z1bGwgbGlzdCBvZiBrZXkgYmluZGluZ3MgKGFwYXJ0IGZyb20gdGhlIGN1cnNvciByb3V0aW5nIGtleXMpOyBpdCBjYW4KK2JlIGZvdW5kIGluIHBsYWluIHRleHQgZm9ybWF0IGluIHRoZSBmaWxlIGhlbHAudHh0IGluIHRoaXMKK2RpcmVjdG9yeS4gIFRoZSBkb3Qga2V5cyBoYXZlIGJlZW4gbnVtYmVyZWQgKGZyb20gbGVmdCB0byByaWdodCk6IDMsCisyLCAxLCA0LCA1LCA2OyBjYXBpdGFsIGxldHRlcnMgaW4gYnJhY2tldHMgcmVmZXIgdG8gdGh1bWIga2V5cywKK2UuZy4gKEEpIG1lYW5zIEEgYWxvbmUgYW5kIChDQykgbWVhbnMgQyB0d2ljZS4KKworQWxsIGZ1bmN0aW9ucyBib3VuZCB0byB0aGUgdGh1bWIga2V5cyBjYW4gYWxzbyBiZSBleGVjdXRlZCBieSB1c2luZwordGhlIEJyYWlsbGUgZG90IGtleXMuICBUaGUgY29udmVyc2UsIGhvd2V2ZXIsIGlzIG5vdCB0aGUgY2FzZSwgYXMKK3RoZXJlIGFyZSBmYXIgbW9yZSBhdmFpbGFibGUgY29tYmluYXRpb25zIG9mIEJyYWlsbGUgZG90IGtleXMgdGhhbiBvZgordGh1bWIga2V5cy4KKworVGhlIGNvbW1hbmRzIGJvdW5kIHRvIHRoZSBCcmFpbGxlIGRvdCBrZXlzIGNhbiBiZSBjdXN0b21pemVkIGluICd0YWJsZXMuaCcKKyhhcnJheSBjbWRfU190cmFuc1tdKS4KKworQ3Vyc29yIFJvdXRpbmcgS2V5cworLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUga2V5cyBhYm92ZSB0aGUgMjAvNDAvODAgY2VsbHMgb2YgdGhlIG1haW4gZGlzcGxheSBjYW4gYmUgdXNlZCBmb3IKK2EgbW9yZSBhY2N1cmF0ZSBmb3JtIG9mIGN1cnNvciByb3V0aW5nLCBzcGVjaWZ5aW5nIHRoYXQgcGFydGljdWxhcgorcG9zaXRpb24gcmF0aGVyIHRoYW4gdGhlIHN0YXJ0IG9mIHRoZSBCcmFpbGxlIHdpbmRvdy4KKworVGhlIGV4dHJhIHNpeCBjdXJzb3Igcm91dGluZyBrZXlzIGhhdmUgc3BlY2lhbCBtZWFuaW5ncy4gIFRoZSBzaXh0aAorZnJvbSB0aGUgbGVmdCB0b2dnbGVzIGhlbHAgbW9kZTsgdGhlIGZpZnRoIGlzIHRoZSBSRVNFVCBidXR0b24gYW5kIAordGhlIGZvdXJ0aCBpcyB0aGUgQ09ORk1FTlUgYnV0dG9uLgorS2V5IG51bWJlciAxIHNlZW1zIHRvIGRvIG5vdGhpbmcgKG5vdCBjb25uZWN0ZWQ/IC0gdGVjaC4gZG9jIHNheXMgc29tZXRoaW5nCithYm91dCB0aGF0IC0gZnVubnksIHdoeSB0aGVuIGV2ZW4gcHV0IGl0IHRoZXJlID8/Pz8pCisKK0N1cnNvciByb3V0aW5nIGtleXMgNCB0byA2IGNhbiBiZSBjdXN0b21pemVkIGluICd0YWJsZXMuaCcsIGFycmF5IGNtZF9SX3RyYW5zW10uCisKK1NwZWNpYWwgQ3V0IEZ1bmN0aW9uCistLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgbWFpbiBjdXJzb3Igcm91dGluZyBrZXlzLCB0b2dldGhlciB3aXRoIHRoZSBsZWZ0bW9zdCB0d28gb2YgdGhlCit3b3JraW5nIGV4dHJhIG9uZXMgKGtleSBudW1iZXIgMiBhbmQgMyksIGNhbiBiZSB1c2VkIGZvciBhIG1vcmUgYWR2YW5jZWQKK2Zvcm0gb2YgY3V0dGluZy4KKworVG8gbWFyayB0aGUgdG9wIGxlZnQgY29ybmVyIG9mIHRoZSByZWN0YW5nbGUgdG8gYmUgY3V0LCBwcmVzcyB0aGUKK2xlZnRtb3N0IGN1cnNvciByb3V0aW5nIGtleSBmb2xsb3dlZCBpbW1lZGlhdGVseSBieSB0aGUgb25lIG92ZXIgdGhlCithcHByb3ByaWF0ZSBjZWxsLiAgVGhlbiwgdG8gbWFyayB0aGUgYm90dG9tIHJpZ2h0IGNvcm5lciwgcHJlc3MgdGhlCitzZWNvbmQgY3Vyc29yIHJvdXRpbmcga2V5IGZvbGxvd2VkIGltbWVkaWF0ZWx5IGJ5IHRoZSBvbmUgb3ZlciB0aGUKK2FwcHJvcHJpYXRlIGNlbGwuCisKKworVEhFIFNUQVRVUyBDRUxMUworPT09PT09PT09PT09PT09PQorCitUaGUgc3RhdHVzIGNlbGxzIGFyZSB1c2VkIHNsaWdodGx5IGRpZmZlcmVudGx5IGZyb20gdGhlIERPUyBkcml2ZXIuCitUaGUgZmlyc3QgZm91ciBjZWxscyBhcmUgdXNlZCB0byBkZW5vdGUgdGhlIHBvc2l0aW9ucyBvZiB0aGUgY3Vyc29yCithbmQgdGhlIEJyYWlsbGUgd2luZG93LCBhbmQgZm9ybSB0d28gbGluZXMgb2YgZm91ciBudW1iZXJzLiAgVGhlIHRvcAorbGluZSBpcyB0aGUgY3Vyc29yIHBvc2l0aW9uIGluIHRoZSBmb3JtYXQgQ0NSUiB3aGVyZSBDQyBpcyB0aGUgY29sdW1uCitudW1iZXIgYW5kIFJSIGlzIHRoZSByb3cgbnVtYmVyLiAgVGhlIHNlY29uZCBsaW5lIGlzIHRoZSB3aW5kb3cKK3Bvc2l0aW9uIGluIHRoZSBzYW1lIGZvcm1hdC4gIFRoZSB0b3AgbGVmdCBjb3JuZXIgb2YgdGhlIHNjcmVlbiBpcworMDAwMCwgaW4gdGhpcyBub3RhdGlvbi4KKworVGhlIGZpZnRoIHN0YXR1cyBjZWxsIGlzIGEgc2V0IG9mIGZsYWdzLCBhcyBmb2xsb3dzOgorCitEb3QgTnVtYmVyICAgICAgRG90IFByZXNlbnQgTWVhbnMKKyAgICAgMSAgICAgICAgICBUaGUgc2NyZWVuIGlzIGZyb3plbgorICAgICAyICAgICAgICAgIEF0dHJpYnV0ZSBkaXNwbGF5IGlzIG9uCisgICAgIDMgICAgICAgICAgQXVkaW8gc2lnbmFscyBhcmUgb24KKyAgICAgNCAgICAgICAgICBUaGUgY3Vyc29yIGlzIHZpc2libGUKKyAgICAgNSAgICAgICAgICBDdXJzb3Igc2hhcGUgaXMgYmxvY2sKKyAgICAgNiAgICAgICAgICBDdXJzb3IgYmxpbmsgaXMgb24KKyAgICAgNyAgICAgICAgICBDdXJzb3IgdHJhY2tpbmcgaXMgb24KKyAgICAgOCAgICAgICAgICBTbGlkaW5nIHdpbmRvdyBpcyBvbgorCisKK1RIQU5LUworPT09PT09CisKK0d1ZW50ZXIgR3JpbGwgICBUaGUgb3duZXIgb2YgdGhlIGJyYWlsbGUgZGlzcGxheQorKG93bmVyKSAgICAgICAgIFRlc3RpbmcsIHRpcHMsIHBob25lIGNhbGxzIHRvIHRpZW1hbiBnZXJtYW55IGFuZCBuZXRoZXJsLgorICAgICAgICAgICAgICAgIHRvIG9yZ2FuaXNlIHRlY2huaWNhbCBkb2N1bWVudGF0aW9uICh3YXMgYSByZWFsbHkgaGFyZCBqb2IgLQorICAgICAgICAgICAgICAgIHRpZW1hbiBpZ25vcmVkIG15IGVtYWlscywgYnV0IEd1ZW50ZXIgZGlkbid0IGdpdmUgdXAgY2FsbGluZyAtCisgICAgICAgICAgICAgICAgZmluYWxseSB3ZSd2ZSByZWNlaXZlZCB0aGUgbmVlZGVkIGluZm9ybWF0aW9uIDstKQorCitNYXJpbyBMYW5nICAgICAgVGlwcywgZXhwbGFuYXRpb25zLCAuLi4KKyhUVSBHcmF6KSAgICAgICBNYXJpbyBpcyBhbHNvIHVzaW5nIGxpbnV4IGFuZCBicmx0dHkgYW5kIGhlIGhhZCBhY2Nlc3MgdG8gYQorICAgICAgICAgICAgICAgIGNvbWJpYnJhaWxsZS4gU28gaGUgY291bGQgaGVscCBtZSBmaW5kaW5nIHRoZSBkaWZmZXJlbmNlcworICAgICAgICAgICAgICAgIGJldHdlZW4gQ29tYmlCcmFpbGxlIGFuZCBNdWx0aUJyYWlsbGUKKworTmljb2xhcyBQaXRyZSAgIEZvciBhbHdheXMgZW1haWxpbmcgYmFjayBzbyBmYXN0IHdoZW4gSSBuZWVkZWQgc29tZQorKGJybHR0eSkgICAgICAgIGluZm9ybWF0aW9uIGFib3V0IGJybHR0eSBpdHNlbGYKKwordGllbWFuICAgICAgICAgIEZvciBzZW5kaW5nIG1lIHRlY2huaWNhbCBkb2N1bWVudGF0aW9uCisKKworUEVSU09OQUwgTk9URVMKKz09PT09PT09PT09PT09CisKK0kgbXlzZWxmIGNhbid0IHJlYWQgYnJhaWxsZS4gTmVpdGhlciB3aXRoIHNlbnNpbmcgbm9yIHZpc3VhbGx5LgorRm9yIG1lIGl0J3MgYWJzb2x1dGVseSBpbXByZXNzaW5nIGhvdyBibGluZCBwZW9wbGUgd29yayBvbiBjb21wdXRlcnMKK3VzaW5nIGEgYnJhaWxsZSBkaXNwbGF5IHRoYXQgb25seSBkaXNwbGF5cyA0MCBjaGFycyAvIDEgbGluZS4KK1RoZSBpbmZvcm1hdGlvbiAodGhlIHdob2xlIHNjcmVlbikgbmVlZHMgdG8gYmUgJ3JlYnVpbHQgaW50ZXJuYWxseScuCitJIGV2ZW4gY2FuJ3QgcmVtZW1iZXIgYSBudW1iZXIgd2l0aCBzaXggZGlnaXRzIC4uLiBJdCBpcyBhbWF6aW5nIHRvIG1lLgorCitNeSBmYXZvcml0ZSByZXNvbHV0aW9uIGlzIDEyODB4MTAyNC4gVGhpcyBpcyB3aGF0IGJsaW5kIHBlb3BsZSBvbmx5IGNhbgorZHJlYW0gYWJvdXQuIFdoZW4gd3JpdGluZyB0aGlzIGRyaXZlciBJIGNhbWUgaW4gY29udGFjdCB3aXRoIHRoZSAnb3RoZXIKK3dvcmxkJy4gQSB3b3JsZCB3aXRob3V0IGNvbG91cmVkIHRleHQsIGZhdC1wcmludGluZywgaGlnaGxpZ2h0ZWQgdGV4dCwgCithbmQgc28gb24gLSBmaW5hbGx5IEkgbGVhcm5lZCB0byB1c2UgJ2x5bngnISAoSSBiZWdhbiB0byBsaWtlIHRoaXMgdG9vbCkuCisKK0F0IHRoZSBiZWdpbm5pbmcgSSBvbmx5IHRob3VnaHQgdGhhdCBJIG5lZWQgdG8gaW5zdGFsbCBsaW51eCBvbiBHdWVudGVyJ3MKK25vdGVib29rLgorQnV0IC0gaGlzIGJyYWlsbGUgZGlzcGxheSB3YXNuJ3Qgc3VwcG9ydGVkLiBTbyBJIHdyb3RlIHRoaXMgZHJpdmVyLiBJIGxlYXJuZWQKK21hbnkgbmV3IHRoaW5ncyB3aGVuIHdyaXRpbmcgdGhlIGRyaXZlciBhbmQgSSBob3BlIHRoYXQgdGhpcyBkcml2ZXIgd2lsbCBoZWxwCittYW55IHBlb3BsZSB3aG8gbmVlZCBicmFpbGxlIGRpc3BsYXlzLiBJdCB3YXMgbXkgZmlyc3QgY29udGFjdCB3aXRoIGJyYWlsbGUgYW5kCitJIGhvcGUgdGhlIHJlc3VsdCBpcyBub3QgdGhhdCBiYWQgOy0pCisKK0lmIHlvdSBmaW5kIGJ1Z3MsIGhhdmUgc29tZSBjb21tZW50cyAoc29sdmluZyBzb21ldGhpbmcgaW4gYSBiZXR0ZXIgd2F5LCAuLiksCitwbGVhc2UgY29udGFjdCBtZToKKworV29sZmdhbmcgQXN0bGVpdG5lcgorRW1haWw6IHdvbGZnYW5nLmFzdGxlaXRuZXJAbGl3ZXN0LmF0CisKK1Byb2JsZW06IFJlc3BvbnNlcyB3aWxsIHRha2Ugc29tZSB0aW1lIGJlY2F1c2UgSSBhbSBub3QgdGhlIG93bmVyIG9mIHRoZQorYnJhaWxsZS1ub3RlYm9vay4gU28gaWYgSSB3YW50IHRvIGJ1aWxkIGluIGltcHJvdmVtZW50cyBJIGhhdmUgdG8gYm9ycm93Cit0aGUgbm90ZWJvb2sgZnJvbSBHdWVudGVyIGFnYWluIQorCisKK1BTOiBQbGVhc2UgZG9uJ3QgbWluZCBteSBlbmdsaXNoLiBBcyBJIHdyb3RlIGJlZm9yZSwgaXQncyBub3QgZ29vZC4uLgorCisKKyoqKioqKioKK1RoaXMgcmVhZG1lIGlzIG1haW5seSBiYXNlZCBvbiBDb21iaUJyYWlsbGUvUkVBRE1FCitOaWtoaWwgTmFpcgorVHJpbml0eSBDb2xsZWdlLCBDQU1CUklER0UsIENCMiAxVFEsIEVuZ2xhbmQKK1RlbC46ICs0NCAxMjIzIDM2ODM1MworRW1haWw6IG5uMjAxQGN1cy5jYW0uYWMudWsKKwpkaWZmIC0tZ2l0IGEvRHJpdmVycy9CcmFpbGxlL011bHRpQnJhaWxsZS9icmFpbGxlLmMgYi9Ecml2ZXJzL0JyYWlsbGUvTXVsdGlCcmFpbGxlL2JyYWlsbGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMGY4ZjI3Ci0tLSAvZGV2L251bGwKKysrIGIvRHJpdmVycy9CcmFpbGxlL011bHRpQnJhaWxsZS9icmFpbGxlLmMKQEAgLTAsMCArMSwzNTAgQEAKKy8qCisgKiBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorICogICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorICoKKyAqIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorICoKKyAqIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyAqLworCisvKiBNdWx0aUJyYWlsbGUvYnJhaWxsZS5jIC0gQnJhaWxsZSBkaXNwbGF5IGxpYnJhcnkKKyAqIHRoZSBmb2xsb3dpbmcgVGllbWFuIEIuVi4gYnJhaWxsZSB0ZXJtaW5hbHMgYXJlIHN1cHBvcnRlZAorICogKGluZm9zIG91dCBvZiBhIHRlY2huLiBwcm9kdWN0IGRlc2NyaXB0aW9uIHNlbnQgdG8gbWUgZnJvbSB0aWVtYW4gYnkgZmF4KToKKyAqCisgKiAtIEJyYWlsbGVsaW5lIDEyNSAobm8gZXhwbGljaXQgZGVzY3JpcHRpb24pCisgKiAtIEJyYWlsbGVsaW5lIFBJQ08gSUkgb3IgTUIxNDVDUiAoNDUgYnJhaWxsZSBtb2R1bGVzICsgMSBkdW1teSkKKyAqIC0gQnJhaWxsZWxpbmUgTUIxODVDUiAoODUgYnJhaWxsZSBtb2R1bGVzICsgMSBkdW1teSkKKyAqCisgKiBXb2xmZ2FuZyBBc3RsZWl0bmVyLCBNYXJjaC9BcHJpbCAyMDAwCisgKiBFbWFpbDogd29sZmdhbmcuYXN0bGVpdG5lckBsaXdlc3QuYXQKKyAqIGJyYWlsbGUuYyx2IDEuMAorICoKKyAqIE1vc3RseSBiYXNlZCBvbiBDb21iaUJyYWlsbGUvYnJhaWxsZS5jIGJ5IE5pa2hpbCBOYWlyCisgKi8KKworCisvKiBEZXNjcmlwdGlvbiBvZiB0aGUgZXNjYXBlLXNlcXVlbmNlcyB1c2VkIGJ5IHRoZXNlIGRpc3BsYXlzOgorIC0gW0VTQ11bMF0KKyAgIHNpZ25hbCBzZW50IHRvIHRoZSBicmFpbGxlIGRpc3BsYXkgc28gdGhhdCB3ZSBnZXQgdGhlIGluaXQgbWVzc2FnZQorIC0gW0VTQ11bVl1bYnJhaWxsZSBsZW5ndGhdW2Zpcm13YXJlIHZlcnNpb25dW0NSXQorICAgaW5pdCBtZXNzYWdlIHNlbnQgYmFjayBieSB0aGUgYnJhaWxsZSBkaXNwbGF5CisgICAqIGJyYWlsbGUgbGVuZ3RoOiAgIDIwIC8gMjUgLyA0MCAvIDgwIChkZWNpbWFsKQorICAgKiBmaXJtd2FyZSB2ZXJzaW9uOiBuZWVkcyB0byBiZSBkaXZpZGVkIGJ5IDEwLjA6IHNvIGlmIHdlIHJlY2VpdmUKKyAgICAgMjEgKGRlY2ltYWwpIC0tPiB2ZXJzaW9uIDIuMQorIC0gW0VTQ11bRl1bYnJhaWxsZWtleSBkYXRhXVtDUl0KKyAgIGRvbid0IGtub3cgd2hhdCB0aGlzIGlzIGdvb2QgZm9yLiBkZXNjcmlwdGlvbjogaW5pdCB0aGUgUEMgZm9yIHJlYWRpbmcKKyAgIHRoZSB0b3Aga2V5cyBhcyBicmFpbGxlIGtleXMgKDA6IG1vZGUgb2ZmLCAxOiBtb2RlIG9uKQorIC0gW0VTQ11bWl1bYnJhaWxsZSBkYXRhXVtDUl0KKyAgIGJyYWlsbGUgZGF0YSBmcm9tIFBDIHRvIGJyYWlsbGUgZGlzcGxheQorICAgKGJyYWlsbGUtZW5jb2RlZCBjaGFyYWN0ZXJzIChbMjB8MjV8NDB8ODBdICogOCBiaXQpCisgLSBbRVNDXVtCXVtiZWVwIGRhdGFdW0NSXQorICAgc2VuZCBhIGJlZXAgdG8gdGhlIHBpZXpvLWJlZXBlcjoKKyAgIDE6IGxvbmcgYmVlcAorICAgMDogc2hvcnQgYmVlcAorICovCisKKyNpbmNsdWRlICJwcm9sb2d1ZS5oIgorCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworI2luY2x1ZGUgImxvZy5oIgorI2luY2x1ZGUgInRpbWluZy5oIgorI2luY2x1ZGUgImFzeW5jX3dhaXQuaCIKKyNpbmNsdWRlICJhc2NpaS5oIgorCisjZGVmaW5lIEJSTF9TVEFUVVNfRklFTERTIHNmQ3Vyc29yQW5kV2luZG93Q29sdW1uMiwgc2ZDdXJzb3JBbmRXaW5kb3dSb3cyLCBzZlN0YXRlRG90cworI2RlZmluZSBCUkxfSEFWRV9TVEFUVVNfQ0VMTFMKKyNpbmNsdWRlICJicmxfZHJpdmVyLmgiCisjaW5jbHVkZSAiYnJhaWxsZS5oIgorI2luY2x1ZGUgInRhYmxlcy5oIgkJLyogZm9yIGtleWJpbmRpbmdzICovCisjaW5jbHVkZSAiaW9fc2VyaWFsLmgiCisKK1NlcmlhbERldmljZSAqTUJfc2VyaWFsRGV2aWNlOwkJCS8qIGZpbGUgZGVzY3JpcHRvciBmb3IgQnJhaWxsZSBkaXNwbGF5ICovCitzdGF0aWMgaW50IGJybGNvbHM7CQkvKiBsZW5ndGggb2YgYnJhaWxsZSBkaXNwbGF5IChhdXRvLWRldGVjdGVkKSAqLworc3RhdGljIHVuc2lnbmVkIGNoYXIgKnByZXZkYXRhOwkvKiBwcmV2aW91c2x5IHJlY2VpdmVkIGRhdGEgKi8KK3N0YXRpYyB1bnNpZ25lZCBjaGFyIHN0YXR1c1s1XSwgb2xkc3RhdHVzWzVdOwkvKiBzdGF0dXMgY2VsbHMgLSBhbHdheXMgZml2ZSAqLworc3RhdGljIHVuc2lnbmVkIGNoYXIgKnJhd2RhdGE7CQkvKiB3cml0ZWJybCgpIGJ1ZmZlciBmb3IgcmF3IEJyYWlsbGUgZGF0YSAqLworc3RhdGljIHNob3J0IHJhd2xlbjsJCQkvKiBsZW5ndGggb2YgcmF3ZGF0YSBidWZmZXIgKi8KKworLyogbWVzc2FnZSBldmVudCBjb21pbmcgZnJvbSB0aGUgYnJhaWxsZSBkaXNwbGF5IHRvIHRoZSBQQyAqLwordHlwZWRlZiBzdHJ1Y3QgS2V5U3Ryb2tlIHsKKwlpbnQgYmxvY2s7CQkJCS8qIEVPRiBvciBibG9ja251bWJlcjogKi8KKwkJCQkJCQkJCQkvKiBmcm9udCBrZXlzOiA4NCAofiBbRVNDXVtUXVtrZXludW1iZXJdW0NSXSApCisJCQkJCQkJCQkJICogICAoTUIxODVDUiBhbHNvIGJsb2NrIHdpdGggJzAnLSc5JywgJyonLCAnIycpCisJCQkJCQkJCQkJICogdG9wIGtleXM6IDgzICh+IFtFU0NdW1NdW2tleW51bWJlcl1bQ1JdICkKKwkJCQkJCQkJCQkgKiBjdXJzb3Jyb3V0aW5nIGtleXM6IDgyICh+IFtFU0NdW1JdW2tleW51bWJlcl1bQ1JdICkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisJaW50IGtleTsJCQkJCS8qID0+IGtleW51bWJlciAqLworfSBLZXlTdHJva2U7CisKKworLyogRnVuY3Rpb24gcHJvdG90eXBlczogKi8KK3N0YXRpYyBzdHJ1Y3QgS2V5U3Ryb2tlIGdldGJybGtleSAodm9pZCk7CQkvKiBnZXQgYSBrZXlzdHJva2UgZnJvbSB0aGUgTXVsdGlCcmFpbGxlICovCisKK3N0YXRpYyBpbnQgYnJsX2NvbnN0cnVjdCAoQnJhaWxsZURpc3BsYXkgKmJybCwgY2hhciAqKnBhcmFtZXRlcnMsIGNvbnN0IGNoYXIgKmRldmljZSkgeworCXNob3J0IG4sIHN1Y2Nlc3M7CQkvKiBsb29wIGNvdW50ZXJzLCBmbGFncywgZXRjLiAqLworCXVuc2lnbmVkIGNoYXIgKmluaXRfc2VxID0gKHVuc2lnbmVkIGNoYXIgKikiXDAwMlwwMzMwIjsJLyogc3RyaW5nIHRvIHNlbmQgdG8gQnJhaWxsZSB0byBpbml0aWFsaXNlOiBbRVNDXVswXSAqLworCXVuc2lnbmVkIGNoYXIgKmluaXRfYWNrID0gKHVuc2lnbmVkIGNoYXIgKikiXDAwMlwwMzNWIjsJLyogc3RyaW5nIHRvIGV4cGVjdCBhcyBhY2tub3dsZWRnZW1lbnQ6IFtFU0NdW1ZdLi4uICovCisJdW5zaWduZWQgY2hhciBjOworCVRpbWVQZXJpb2QgcGVyaW9kOworCisJaWYgKCFpc1NlcmlhbERldmljZUlkZW50aWZpZXIoJmRldmljZSkpIHsKKwkJdW5zdXBwb3J0ZWREZXZpY2VJZGVudGlmaWVyKGRldmljZSk7CisJCXJldHVybiAwOworCX0KKworCWJybGNvbHMgPSAtMTsJCS8qIGxlbmd0aCBvZiBicmFpbGxlIGRpc3BsYXkgKGF1dG8tZGV0ZWN0ZWQpICovCisJcHJldmRhdGEgPSByYXdkYXRhID0gTlVMTDsJCS8qIGNsZWFyIHBvaW50ZXJzICovCisKKwkvKiBObyBuZWVkIHRvIGxvYWQgdHJhbnNsYXRpb24gdGFibGVzLCBhcyB0aGVzZSBhcmUgbm93CisJICogZGVmaW5lZCBpbiB0YWJsZXMuaAorCSAqLworCisJLyogTm93IG9wZW4gdGhlIEJyYWlsbGUgZGlzcGxheSBkZXZpY2UgZm9yIHJhbmRvbSBhY2Nlc3MgKi8KKwlpZiAoIShNQl9zZXJpYWxEZXZpY2UgPSBzZXJpYWxPcGVuRGV2aWNlKGRldmljZSkpKSBnb3RvIGZhaWx1cmU7CisJaWYgKCFzZXJpYWxSZXN0YXJ0RGV2aWNlKE1CX3NlcmlhbERldmljZSwgQkFVRFJBVEUpKSBnb3RvIGZhaWx1cmU7CisJaWYgKCFzZXJpYWxTZXRGbG93Q29udHJvbChNQl9zZXJpYWxEZXZpY2UsIFNFUklBTF9GTE9XX0hBUkRXQVJFKSkgZ290byBmYWlsdXJlOworCisJLyogTXVsdGlCcmFpbGxlIGluaXRpYWxpc2F0aW9uIHByb2NlZHVyZToKKwkgKiBbRVNDXVtWXVtCcmFpbGxlbGVuZ3RoXVtTb2Z0d2FyZSBWZXJzaW9uXVtDUl0KKwkgKiBJIGd1ZXNzLCB0aGV5IG1lYW4gZmlybXdhcmUgdmVyc2lvbiB3aXRoIHNvZnR3YXJlIHZlcnNpb24gOip9CisJICogZmlybXdhcmUgdmVyc2lvbiA9PSBbU29mdHdhcmUgVmVyc2lvbl0gLyAxMC4wCisgICAgICAgICAqLworCXN1Y2Nlc3MgPSAwOworCWlmIChpbml0X3NlcVswXSkKKwkJaWYgKHNlcmlhbFdyaXRlRGF0YSAoTUJfc2VyaWFsRGV2aWNlLCBpbml0X3NlcSArIDEsIGluaXRfc2VxWzBdKSAhPSBpbml0X3NlcVswXSkKKwkJCWdvdG8gZmFpbHVyZTsKKwlzdGFydFRpbWVQZXJpb2QgKCZwZXJpb2QsIEFDS19USU1FT1VUKTsJCS8qIGluaXRpYWxpc2UgdGltZW91dCB0ZXN0aW5nICovCisJbiA9IDA7CisJZG8geworCQlhc3luY1dhaXQgKDIwKTsKKwkJaWYgKHNlcmlhbFJlYWREYXRhIChNQl9zZXJpYWxEZXZpY2UsICZjLCAxLCAwLCAwKSA9PSAwKQorCQkJY29udGludWU7CisJCWlmIChuIDwgaW5pdF9hY2tbMF0gJiYgYyAhPSBpbml0X2Fja1sxICsgbl0pCisJCQljb250aW51ZTsKKwkJaWYgKG4gPT0gaW5pdF9hY2tbMF0pIHsKKwkJCWJybGNvbHMgPSBjLCBzdWNjZXNzID0gMTsKKworCQkJLyogcmVhZGluZyB2ZXJzaW9uLWluZm8gKi8KKwkJCS8qIGZpcm13YXJlIHZlcnNpb24gPT0gW1NvZnR3YXJlIFZlcnNpb25dIC8gMTAuMCAqLworCQkJc2VyaWFsUmVhZERhdGEgKE1CX3NlcmlhbERldmljZSwgJmMsIDEsIDAsIDApOworCQkJbG9nTWVzc2FnZSAoTE9HX0lORk8sICJNdWx0aUJyYWlsbGU6IFZlcnNpb246ICUyLjFmIiwgYy8xMC4wKTsKKworCQkJLyogcmVhZCB0cmFpbGluZyBbQ1JdICovCisJCQlzZXJpYWxSZWFkRGF0YSAoTUJfc2VyaWFsRGV2aWNlLCAmYywgMSwgMCwgMCk7CisJCX0KKwkJbisrOworCX0KKwl3aGlsZSAoIWFmdGVyVGltZVBlcmlvZCAoJnBlcmlvZCwgTlVMTCkgJiYgbiA8PSBpbml0X2Fja1swXSk7CisKKwlpZiAoc3VjY2VzcyAmJiAoYnJsY29scyA+IDApKSB7CisgICAgICAgICAgaWYgKChwcmV2ZGF0YSA9IG1hbGxvYyhicmxjb2xzKSkpIHsKKyAgICAgICAgICAgIGlmICgocmF3ZGF0YSA9IG1hbGxvYygyMCArIChicmxjb2xzICogMikpKSkgeworICAgICAgICAgICAgICBicmwtPnRleHRDb2x1bW5zID0gYnJsY29sczsKKyAgICAgICAgICAgICAgYnJsLT50ZXh0Um93cyA9IDE7CisKKyAgICAgICAgICAgICAgYnJsLT5zdGF0dXNDb2x1bW5zID0gNTsKKyAgICAgICAgICAgICAgYnJsLT5zdGF0dXNSb3dzID0gMTsKKworICAgICAgICAgICAgICBNQUtFX09VVFBVVF9UQUJMRSgwWDAxLCAwWDAyLCAwWDA0LCAwWDgwLCAwWDQwLCAwWDIwLCAwWDA4LCAwWDEwKTsKKyAgICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICBsb2dNYWxsb2NFcnJvcigpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBmcmVlKHByZXZkYXRhKTsKKyAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgbG9nTWFsbG9jRXJyb3IoKTsKKyAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgZmFpbHVyZToKKwlpZiAoTUJfc2VyaWFsRGV2aWNlKSB7CisgICAgICAgICAgIHNlcmlhbENsb3NlRGV2aWNlKE1CX3NlcmlhbERldmljZSk7CisgICAgICAgICAgIE1CX3NlcmlhbERldmljZSA9IE5VTEw7CisgICAgICAgIH0KKwlyZXR1cm4gMDsKK30KKworCitzdGF0aWMgdm9pZCBicmxfZGVzdHJ1Y3QgKEJyYWlsbGVEaXNwbGF5ICpicmwpIHsKKwl1bnNpZ25lZCBjaGFyICpwcmVfZGF0YSA9ICh1bnNpZ25lZCBjaGFyICopIlwwMDJcMDMzWiI7CS8qIHN0cmluZyB0byBzZW5kIHRvICovCisJdW5zaWduZWQgY2hhciAqcG9zdF9kYXRhID0gKHVuc2lnbmVkIGNoYXIgKikiXDAwMVwwMTUiOworCXVuc2lnbmVkIGNoYXIgKmNsb3NlX3NlcSA9ICh1bnNpZ25lZCBjaGFyICopIiI7CisKKwlyYXdsZW4gPSAwOworCWlmIChwcmVfZGF0YVswXSkgeworCQltZW1jcHkgKHJhd2RhdGEgKyByYXdsZW4sIHByZV9kYXRhICsgMSwgcHJlX2RhdGFbMF0pOworCQlyYXdsZW4gKz0gcHJlX2RhdGFbMF07CisJfQorCS8qIENsZWFyIHRoZSBmaXZlIHN0YXR1cyBjZWxscyBhbmQgdGhlIG1haW4gZGlzcGxheTogKi8KKwltZW1zZXQgKHJhd2RhdGEgKyByYXdsZW4sIDAsIDUgKyAxKyBicmwtPnRleHRDb2x1bW5zICogYnJsLT50ZXh0Um93cyk7CisJcmF3bGVuICs9IDUgKyAxICsgYnJsLT50ZXh0Q29sdW1ucyAqIGJybC0+dGV4dFJvd3M7ICAvKiArMSBpcyBmb3IgZHVtbXkgbW9kdWxlICovCisJaWYgKHBvc3RfZGF0YVswXSkgeworCQltZW1jcHkgKHJhd2RhdGEgKyByYXdsZW4sIHBvc3RfZGF0YSArIDEsIHBvc3RfZGF0YVswXSk7CisJCXJhd2xlbiArPSBwb3N0X2RhdGFbMF07CisJfQorCisJLyogU2VuZCBjbG9zaW5nIHNlcXVlbmNlOiAqLworCWlmIChjbG9zZV9zZXFbMF0pIHsKKwkJbWVtY3B5IChyYXdkYXRhICsgcmF3bGVuLCBjbG9zZV9zZXEgKyAxLCBjbG9zZV9zZXFbMF0pOworCQlyYXdsZW4gKz0gY2xvc2Vfc2VxWzBdOworCX0KKwlzZXJpYWxXcml0ZURhdGEgKE1CX3NlcmlhbERldmljZSwgcmF3ZGF0YSwgcmF3bGVuKTsKKworCWZyZWUgKHByZXZkYXRhKTsKKwlmcmVlIChyYXdkYXRhKTsKKworCXNlcmlhbENsb3NlRGV2aWNlIChNQl9zZXJpYWxEZXZpY2UpOworfQorCisKKworc3RhdGljIGludCBicmxfd3JpdGVTdGF0dXMgKEJyYWlsbGVEaXNwbGF5ICpicmwsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnMpIHsKKwkvKiBEb3QgbWFwcGluZzogKi8KKwl0cmFuc2xhdGVPdXRwdXRDZWxscyhzdGF0dXMsIHMsIDUpOworCXJldHVybiAxOworfQorCisKK3N0YXRpYyBpbnQgYnJsX3dyaXRlV2luZG93IChCcmFpbGxlRGlzcGxheSAqYnJsLCBjb25zdCB3Y2hhcl90ICp0ZXh0KSB7CisJaW50IHRleHRDaGFuZ2VkID0gY2VsbHNIYXZlQ2hhbmdlZChwcmV2ZGF0YSwgYnJsLT5idWZmZXIsIGJybC0+dGV4dENvbHVtbnMqYnJsLT50ZXh0Um93cywgTlVMTCwgTlVMTCwgTlVMTCk7CisJaW50IHN0YXR1c0NoYW5nZWQgPSBjZWxsc0hhdmVDaGFuZ2VkKG9sZHN0YXR1cywgc3RhdHVzLCA1LCBOVUxMLCBOVUxMLCBOVUxMKTsKKwlzaG9ydCBpOwkJCS8qIGxvb3AgY291bnRlciAqLworCXVuc2lnbmVkIGNoYXIgKnByZV9kYXRhID0gKHVuc2lnbmVkIGNoYXIgKikiXDAwMlwwMzNaIjsJLyogYnl0ZXdpc2UgYWNjZXNzaWJsZSBjb3BpZXMgKi8KKwl1bnNpZ25lZCBjaGFyICpwb3N0X2RhdGEgPSAodW5zaWduZWQgY2hhciAqKSJcMDAxXDAxNSI7CisKKwkvKiBPbmx5IHJlZnJlc2ggZGlzcGxheSBpZiB0aGUgZGF0YSBoYXMgY2hhbmdlZDogKi8KKwlpZiAodGV4dENoYW5nZWQgfHwgc3RhdHVzQ2hhbmdlZCkgeworCQkvKiBEb3QgbWFwcGluZyBmcm9tIHN0YW5kYXJkIHRvIE11bHRpQnJhaWxsZTogKi8KKwkJdHJhbnNsYXRlT3V0cHV0Q2VsbHMoYnJsLT5idWZmZXIsIGJybC0+YnVmZmVyLCBicmwtPnRleHRDb2x1bW5zKmJybC0+dGV4dFJvd3MpOworCisgICAgcmF3bGVuID0gMDsKKwkJaWYgKHByZV9kYXRhWzBdKSB7CisJCQltZW1jcHkgKHJhd2RhdGEgKyByYXdsZW4sIHByZV9kYXRhICsgMSwgcHJlX2RhdGFbMF0pOworCQkJcmF3bGVuICs9IHByZV9kYXRhWzBdOworCQl9CisJCQorCQkvKiBIQUNLIC0gQUxFUlQgOy0pCisJCSAqIDZ0aCBtb2R1bGUgaXMgYSBkdW1teS1tb2R1bCBhbmQgbm90IHdpcmVkIQorCQkgKiBidXQgSSBuZWVkIHRvIGJ1dCBhIGR1bW15IGNoYXIgYXQgdGhlIGJlZ2lubmluZywgZWxzZSB0aGUgc3RhdGkgYXJlIHNoaWZ0ZWQgLi4uCisgICAgICAgICAgICAgICAgICovCisJCXJhd2RhdGFbcmF3bGVuKytdID0gMDsKKworCQkvKiB3cml0ZSBzdGF0aSAqLworCQlmb3IgKGkgPSAwOyBpIDwgNTsgaSsrKSB7CisJCQlyYXdkYXRhW3Jhd2xlbisrXSA9IHN0YXR1c1tpXTsKKwkJfQorCQkKKwkJCisJCS8qIHdyaXRlIGJyYWlsbGUgbWVzc2FnZSBpdHNlbGYgKi8KKwkJZm9yIChpID0gMDsgaSA8IGJybC0+dGV4dENvbHVtbnMgKiBicmwtPnRleHRSb3dzOyBpKyspIHsKKwkJCXJhd2RhdGFbcmF3bGVuKytdID0gYnJsLT5idWZmZXJbaV07CisJCX0KKyAgICAgIAorCQlpZiAocG9zdF9kYXRhWzBdKSB7CisJCQltZW1jcHkgKHJhd2RhdGEgKyByYXdsZW4sIHBvc3RfZGF0YSArIDEsIHBvc3RfZGF0YVswXSk7CisJCQlyYXdsZW4gKz0gcG9zdF9kYXRhWzBdOworCQl9CisgICAgCisJCXNlcmlhbFdyaXRlRGF0YSAoTUJfc2VyaWFsRGV2aWNlLCByYXdkYXRhLCByYXdsZW4pOworCX0KKwlyZXR1cm4gMTsKK30KKworCitzdGF0aWMgaW50IGJybF9yZWFkQ29tbWFuZCAoQnJhaWxsZURpc3BsYXkgKmJybCwgS2V5VGFibGVDb21tYW5kQ29udGV4dCBjb250ZXh0KSB7CisJc3RhdGljIHNob3J0IHN0YXR1cyA9IDA7CS8qIGN1cnNvciByb3V0aW5nIGtleXMgbW9kZSAqLworCQorCUtleVN0cm9rZSBrZXlzdHJva2U7CisKKwlrZXlzdHJva2UgPSBnZXRicmxrZXkgKCk7CisJaWYgKGtleXN0cm9rZS5ibG9jayA9PSBFT0YpCisJCXJldHVybiBFT0Y7CisJCQorCWlmIChrZXlzdHJva2UuYmxvY2sgIT0gJ1InKSB7CisJCS8qIHRyYW5zbGF0ZSBvbmx5ICdUJyBhbmQgJ1MnIGV2ZW50cworCQkgKiBJIGtpY2tlZCBhcmd0cmFuc1tdIChuZXZlciBldmVyIG5lZWRlZCkgLS0+IHNpbXBseSByZXR1cm4gMHgwMAorICAgICAgICAgICAgICAgICAqLworCQlpZiAoa2V5c3Ryb2tlLmJsb2NrID09ICdUJykKKwkJCWtleXN0cm9rZS5rZXkgPSBjbWRfVF90cmFuc1trZXlzdHJva2Uua2V5XTsKKwkJZWxzZQorCQkJa2V5c3Ryb2tlLmtleSA9IGNtZF9TX3RyYW5zW2tleXN0cm9rZS5rZXldOworCQlzdGF0dXMgPSAwOworICAgICAgICAgICAgICAgIGlmICgoa2V5c3Ryb2tlLmtleSA9PSBCUkxfQ01EX0JMSyhDT1BZX0xJTkUpKSB8fCAoa2V5c3Ryb2tlLmtleSA9PSBCUkxfQ01EX0JMSyhDT1BZX1JFQ1QpKSkKKyAgICAgICAgICAgICAgICAgIGtleXN0cm9rZS5rZXkgKz0gYnJsY29scyAtIDE7CisJCXJldHVybiBrZXlzdHJva2Uua2V5OworCX0gZWxzZSB7IC8qIGRpcmVjdGx5IHByb2Nlc3MgJ1InIGV2ZW50cyAqLworCSAgLyogY3Vyc29yIHJvdXRpbmcga2V5IDEgb3IgMiBwcmVzc2VkOiBiZWdpbiAvIGVuZCBibG9jayB0byBjb3B5J24ncGFzdGUgKi8KKwkJLyogKGNvdW50aW5nIHN0YXJ0cyB3aXRoIDAgISkgKi8KKwkJaWYgKGtleXN0cm9rZS5rZXkgPT0gMSB8fCBrZXlzdHJva2Uua2V5ID09IDIpIHsKKwkJCXN0YXR1cyA9IGtleXN0cm9rZS5rZXk7CisJCQlyZXR1cm4gRU9GOworCQl9CisJCS8qIGN1cnNvciByb3V0aW5nIGtleXMgMywgNCBhbmQgNTogaW52aWRpdWFsbHkgZGVmaW5lZCBmdW5jdGlvbnMgKi8KKwkJLyogKGNvdW50aW5nIHN0YXJ0cyB3aXRoIDAgISkgKi8KKwkJaWYgKGtleXN0cm9rZS5rZXkgPj0gMyAmJiBrZXlzdHJva2Uua2V5IDw9IDUpIHsKKwkJCXJldHVybiBjbWRfUl90cmFuc1trZXlzdHJva2Uua2V5XTsKKwkJfQorCQlzd2l0Y2ggKHN0YXR1cykgeworCQkJY2FzZSAwOgkJCS8qIG9yZGluYXJ5IGN1cnNvciByb3V0aW5nICovCisJCQkJcmV0dXJuIGtleXN0cm9rZS5rZXkgKyBCUkxfQ01EX0JMSyhST1VURSkgLSBNQl9DUl9FWFRSQUtFWVM7CisJCQljYXNlIDE6CQkJLyogYmVnaW4gYmxvY2sgKi8KKwkJCQlzdGF0dXMgPSAwOworCQkJCXJldHVybiBrZXlzdHJva2Uua2V5ICsgQlJMX0NNRF9CTEsoQ0xJUF9ORVcpIC0gTUJfQ1JfRVhUUkFLRVlTOworCQkJY2FzZSAyOgkJCS8qIGVuZCBibG9jayAqLworCQkJCXN0YXR1cyA9IDA7CisJCQkJcmV0dXJuIGtleXN0cm9rZS5rZXkgKyBCUkxfQ01EX0JMSyhDT1BZX1JFQ1QpIC0gTUJfQ1JfRVhUUkFLRVlTOworCQl9CisJCXN0YXR1cyA9IDA7CisJfQorCS8qIHNob3VsZCBuZXZlciByZWFjaCB0aGlzLCBqdXN0IHRvIGtlZXAgY29tcGlsZXIgaGFwcHkgOy0pICovCisJcmV0dXJuIEVPRjsKK30KKworCisvKiBnZXRicmxrZXkgKCkKKyAqIHJldHVybnMgYSBrZXlzdHJva2UgZXZlbnQKKyAqLworCitzdGF0aWMgc3RydWN0IEtleVN0cm9rZSBnZXRicmxrZXkgKHZvaWQpIHsKKwl1bnNpZ25lZCBjaGFyIGMsIGNfdGVtcDsJCS8qIGNoYXJhY3RlciBidWZmZXIgKi8KKwlLZXlTdHJva2Uga2V5c3Ryb2tlOworCQkKKwl3aGlsZSAoc2VyaWFsUmVhZERhdGEgKE1CX3NlcmlhbERldmljZSwgJmMsIDEsIDAsIDApID09IDEpIHsKKwkJaWYgKGMgIT0gQVNDSUlfRVNDKSBjb250aW51ZTsJLyogYWR2YW5jZSB0byBuZXh0IEVTQy1zZXF1ZW5jZSAqLworCisJCXNlcmlhbFJlYWREYXRhIChNQl9zZXJpYWxEZXZpY2UsICZjLCAxLCAwLCAwKTsJCS8qIHJlYWQgYmxvY2sgbnVtYmVyICovCisJCXN3aXRjaCAoYykgeworCQkJY2FzZSAnVCc6CQkJLyogZnJvbnQga2V5IG1lc3NhZ2UsIChNQjE4NUNSIG9ubHk6IGFsc28gJzAnLSc5JywgJyonLCAnIycpICovCisJCQljYXNlICdTJzoJCQkvKiB0b3Aga2V5IG1lc3NhZ2UgWzEtMi00LS04LTE2LTMyXSAqLworCQkJY2FzZSAnUic6CQkJLyogY3Vyc29yIHJvdXRpbmcga2V5IFswIC0gbWF4a2V5c10gKi8KKwkJCQlrZXlzdHJva2UuYmxvY2sgPSBjOworCQkJCXNlcmlhbFJlYWREYXRhIChNQl9zZXJpYWxEZXZpY2UsICZjLCAxLCAwLCAwKTsJCS8qIHJlYWQga2V5bnVtYmVyICovCisJCQkJa2V5c3Ryb2tlLmtleSA9IGM7CisJCQkJc2VyaWFsUmVhZERhdGEgKE1CX3NlcmlhbERldmljZSwgJmMsIDEsIDAsIDApOwkJLyogcmVhZCB0cmFpbGluZyBbQ1JdICovCisgIAkJCQkvKiBsb2dNZXNzYWdlKExPR19OT1RJQ0UsICJNdWx0aUJyYWlsbGUubzogUmVjZWl2aW5nOiBLZXk9JWQsIEJsb2NrPSVjIiwga2V5c3Ryb2tlLmtleSwga2V5c3Ryb2tlLmJsb2NrKTsgKi8KKwkJCQlyZXR1cm4ga2V5c3Ryb2tlOworCQkJZGVmYXVsdDoJCQkvKiBub3Qgc3VwcG9ydGVkIGNvbW1hbmQgLS0+IGlnbm9yZSAqLworCQkJCWNfdGVtcCA9IGM7CisJCQkJa2V5c3Ryb2tlLmJsb2NrID0gRU9GOwkvKiBpbnZhbGlkIC8gbm90IHN1cHBvcnRlZCBrZXlzdHJva2UgKi8KKwkJCQlzZXJpYWxSZWFkRGF0YSAoTUJfc2VyaWFsRGV2aWNlLCAmYywgMSwgMCwgMCk7CQkvKiByZWFkIGtleW51bWJlciAqLworICAJCQkJa2V5c3Ryb2tlLmtleSA9IDA7CisgIAkJCQlsb2dNZXNzYWdlKExPR19OT1RJQ0UsICJNdWx0aUJyYWlsbGUubzogSWdub3JlZDogS2V5PSVkLCBCbG9jaz0lYyIsIGtleXN0cm9rZS5rZXksIGNfdGVtcCk7CisJCQkJcmV0dXJuIGtleXN0cm9rZTsKKwkJfQorCX0KKwlrZXlzdHJva2UuYmxvY2sgPSBFT0Y7CisJa2V5c3Ryb2tlLmtleSA9IDA7CisJcmV0dXJuIGtleXN0cm9rZTsKK30KZGlmZiAtLWdpdCBhL0RyaXZlcnMvQnJhaWxsZS9NdWx0aUJyYWlsbGUvYnJhaWxsZS5oIGIvRHJpdmVycy9CcmFpbGxlL011bHRpQnJhaWxsZS9icmFpbGxlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjhjZWFiZgotLS0gL2Rldi9udWxsCisrKyBiL0RyaXZlcnMvQnJhaWxsZS9NdWx0aUJyYWlsbGUvYnJhaWxsZS5oCkBAIC0wLDAgKzEsNTQgQEAKKy8qCisgKiBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorICogICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorICoKKyAqIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorICoKKyAqIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyAqLworCisvKiBNdWx0aUJyYWlsbGUvYnJhaWxsZS5oIC0gQ29uZmlndXJhYmxlIGRlZmluaXRpb25zIGZvciB0aGUKKyAqIGZvbGxvd2luZyBUaWVtYW4gQi5WLiBicmFpbGxlIHRlcm1pbmFscworICogKGluZm9zIG91dCBvZiBhIHRlY2huLiBwcm9kdWN0IGRlc2NyaXB0aW9uIHNlbnQgdG8gbWUgZnJvbSB0aWVtYW4gYnkgZmF4KToKKyAqCisgKiAtIEJyYWlsbGVsaW5lIDEyNSAobm8gZXhwbGljaXQgZGVzY3JpcHRpb24gaW4gdGVjaC4gZG9jcykKKyAqIC0gQnJhaWxsZWxpbmUgUElDTyBJSSBvciBNQjE0NUNSICg0NSBicmFpbGxlIG1vZHVsZXMgKyAxIGR1bW15KQorICogLSBCcmFpbGxlbGluZSBNQjE4NUNSICg4NSBicmFpbGxlIG1vZHVsZXMgKyAxIGR1bW15KQorICoKKyAqIFdvbGZnYW5nIEFzdGxlaXRuZXIsIE1hcmNoL0FwcmlsIDIwMDAKKyAqIEVtYWlsOiB3b2xmZ2FuZy5hc3RsZWl0bmVyQGxpd2VzdC5hdAorICogYnJsY29uZi5oLHYgMS4wCisgKgorICogQmFzZWQgb24gQ29tYmlCcmFpbGxlL2JybGNvbmYuaCBieSBOaWtoaWwgTmFpcgorICoKKyAqIEVkaXQgYXMgbmVjZXNzYXJ5IGZvciB5b3VyIHN5c3RlbS4KKyAqLworCisvKiB1c2VkIGJ5IGJyYWlsbGUuYyAqLworI2luY2x1ZGUgImlvX3NlcmlhbC5oIgorZXh0ZXJuIFNlcmlhbERldmljZSAqTUJfc2VyaWFsRGV2aWNlOworCisjZGVmaW5lIEJBVURSQVRFIDM4NDAwCQkvKiBiYXVkIHJhdGUgZm9yIEJyYWlsbGUgZGlzcGxheSAqLworCisvKiBUaGUgZm9sbG93aW5nIHNlcXVlbmNlcyBhcmUgc2VudCBhdCBpbml0aWFsaXNhdGlvbiB0aW1lLCBhdCB0ZXJtaW5hdGlvbgorICogYW5kIGJlZm9yZSBhbmQgYWZ0ZXIgQnJhaWxsZSBkYXRhLiAgVGhlIGZpcnN0IGJ5dGUgaXMgdGhlIGxlbmd0aCBvZiB0aGUKKyAqIHNlcXVlbmNlLgorICoKKyAqIEluaXRpYWxpc2F0aW9uIGlzIHRyZWF0ZWQgc3BlY2lhbGx5LCBhcyB0aGVyZSBtYXkgbm90IGJlIGEgQnJhaWxsZQorICogZGlzcGxheSBjb25uZWN0ZWQuICBUaGlzIHJlbGllcyBvbiBhIHJlcGx5IGZyb20gdGhlIGRpc3BsYXkuCisgKi8KKyNkZWZpbmUgQUNLX1RJTUVPVVQgNTAwMAkvKiBhY2tub3dsZWRnZW1lbnQgdGltZW91dCBpbiBtaWxsaXNlY29uZHMgKi8KKyNkZWZpbmUgTUFYX0FUVEVNUFRTIDEwMAkJLyogdG90YWwgdGlpbWVvdXQgPSB0aW1lb3V0ICogYXR0ZW1wdHMgKi8KKwkJCQkvKiB0cnkgZm9yZXZlciBpZiBNQVhfQVRURU1QVFMgPSAwICovCisKKyNkZWZpbmUgTUJfQ1JfRVhUUkFLRVlTIDYgIC8qIGFtb3VudCBvZiBleHRyYSBjdXJzb3Igcm91dGluZyBrZXlzLiAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogc2hvdWxkIGFsd2F5cyBiZSA2ICgtPiB0ZWNoLiBkb2NzKSAqLyAKZGlmZiAtLWdpdCBhL0RyaXZlcnMvQnJhaWxsZS9NdWx0aUJyYWlsbGUvdGFibGVzLmggYi9Ecml2ZXJzL0JyYWlsbGUvTXVsdGlCcmFpbGxlL3RhYmxlcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI0ZjUzYmYKLS0tIC9kZXYvbnVsbAorKysgYi9Ecml2ZXJzL0JyYWlsbGUvTXVsdGlCcmFpbGxlL3RhYmxlcy5oCkBAIC0wLDAgKzEsMTMyIEBACisvKgorICogQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyAqICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyAqCisgKiBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorICoKKyAqIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyAqCisgKiBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisgKi8KKworLyogTXVsdGlCcmFpbGxlL3RhYmxlcy5oIC0ga2V5YmluZGluZ3MgZm9yIHRoZSBNdWx0aUJyYWlsbGUKKyAqIFdvbGZnYW5nIEFzdGxlaXRuZXIsIE1hcmNoIDIwMDAKKyAqIHRhYmxlcy5oLHYgMS4xCisgKi8KKworLyoKKyAgQ2FsY3VsYXRpb24gbWFzayBvZiBrZXktdmFsdWVzIGZvciB0b3Ata2V5czogMS0yLTQtLTgtMTYtMzIgIChLZXkgMy0yLTEtLTQtNS02KQorCisgaGV4LXZhbHVlcyByZXR1cm5lZCB3aGVuIHByZXNzaW5nIGVpdGhlciBhIGZyb250LWtleSBvciB0b3Ata2V5IGNvbWJpbmF0aW9uCisgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgICAgJ1MnICAgJ1QnICAgIFMtYml0cyAgJ1QnIG1lYW5pbmcgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VkIGJybHR0eS1jbWQKKyAgID09PT0gID09PT0gICA9PT09PT09ID09PT0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gID09PT09PT09PT09PT09PQorICAgTW92ZW1lbnQga2V5czoKKyAqIDB4MDcgICAgICAgICAzMjEgICAgICAgICAgdG9wIG9mIHNjcmVlbiAgICAgICAgICAgICAgICAgICAgIEJSTF9DTURfVE9QCisgKiAweDM4ICAgICAgICAgICAgIDQ1NiAgICAgIGJvdHRvbSBvZiBzY3JlZW4gICAgICAgICAgICAgICAgICBCUkxfQ01EX0JPVAorID8gMHgwNiAgICAgICAgICAyMSAgICAgICAgICB1cCBzZXZlcmFsIGxpbmVzICAgICAgICAgICAgICAgICAgQlJMX0NNRF9OWERJRkxOCisgPyAweDE4ICAgICAgICAgICAgIDQ1ICAgICAgIGRvd24gc2V2ZXJhbCBsaW5lcyAgICAgICAgICAgICAgICBCUkxfQ01EX1BSRElGTE4KKyAqIDB4MDQgIDB4MGUgICAgIDEgICAgIChCKSAgdXAgb25lIGxpbmUgICAgICAgICAgICAgICAgICAgICAgIEJSTF9DTURfTE5VUAorICogMHgwOCAgMHgxMyAgICAgICA0ICAgKEQpICBkb3duIG9uZSBsaW5lICAgICAgICAgICAgICAgICAgICAgQlJMX0NNRF9MTkROCisgPyAweDIxICAweDEwICAgMyAgICAgNiAoQ0MpIGN1cnNvciBwb3NpdGlvbiAgICAgICAgICAgICAgICAgICBCUkxfQ01EX0JMSyhST1VURSkKKyAqIDB4MDMgICAgICAgICAzMiAgICAgICAgICAgYmVnaW5uaW5nIG9mIGxpbmUgICAgICAgICAgICAgICAgIEJSTF9DTURfTE5CRUcKKyAqIDB4MzAgICAgICAgICAgICAgIDU2ICAgICAgZW5kIG9mIGxpbmUgICAgICAgICAgICAgICAgICAgICAgIEJSTF9DTURfTE5FTkQKKyAqIDB4MDUgICAgICAgICAzIDEgICAgICAgICAgbGVmdCBvbmUgY2hhcmFjdGVyICAgICAgICAgICAgICAgIEJSTF9DTURfQ0hSTFQKKyAqIDB4MjggICAgICAgICAgICAgNCA2ICAgICAgcmlnaHQgb25lIGNoYXJhY3RlciAgICAgICAgICAgICAgIEJSTF9DTURfQ0hSUlQKKyAqIDB4MmEgICAgICAgICAgMiAgNCA2ICAgICAgbGVmdCBvbmUgaGFsZiB3aW5kb3cgICAgICAgICAgICAgIEJSTF9DTURfSFdJTkxUCisgKiAweDE1ICAgICAgICAgMyAxICA1ICAgICAgIHJpZ2h0IG9uZSBoYWxmIHdpbmRvdyAgICAgICAgICAgICBCUkxfQ01EX0hXSU5SVAorICogMHgwMSAgMHgwZCAgIDMgICAgICAgKEEpICBsZWZ0IG9uZSBmdWxsIHdpbmRvdyAgICAgICAgICAgICAgQlJMX0NNRF9GV0lOTFQKKyAqIDB4MjAgIDB4MTQgICAgICAgICA2IChFKSAgcmlnaHQgb25lIGZ1bGwgd2luZG93ICAgICAgICAgICAgIEJSTF9DTURfRldJTlJUCisKKyAgT3RoZXIgZnVuY3Rpb25zOgorICogMHgzNCAgICAgICAgICAgMSAgNTYgICAgICBzcGVhayBjdXJyZW50IGxpbmUgICAgICAgICAgICAgICAgQlJMX0NNRF9TQVlfTElORQorICogMHgyNCAgICAgICAgICAgMSAgIDYgICAgICBtdXRlIHNwZWVjaCAgICAgICAgICAgICAgICAgICAgICAgQlJMX0NNRF9NVVRFCisgPyAweDFlICAgICAgICAgIDIxIDQ1ICAgICAgIHJvdXRlIGN1cnNvciB0byBzdGFydCBvZiB3aW5kb3cgICBCUkxfQ01EX0hPTUUKKyAqIDB4MjMgICAgICAgICAzMiAgICA2ICAgICAgY29weSBzdGFydCAgICAgICAgICAgICAgICAgICAgICAgICBCUkxfQ01EX0JMSyhDTElQX05FVykKKyAqIDB4MzEgICAgICAgICAzICAgIDU2ICAgICAgY29weSBlbmQgICAgICAgICAgICAgICAgICAgICAgICAgICBCUkxfQ01EX0JMSyhDT1BZX1JFQ1QpK2JybGNvbHMtMQorICogMHgwZiAgICAgICAgIDMyMSA0ICAgICAgICBwYXN0ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQlJMX0NNRF9QQVNURQorICogMHgxMCAgICAgICAgICAgICAgNSAgICAgICBjdXJzb3IgdmlzaWJpbGl0eSBvbi9vZmYgICAgICAgICAgQlJMX0NNRF9DU1JWSVMKKyAqIDB4MGMgIDB4MTAgICAgIDEgNCAgIChDKSAgY3Vyc29yIHRyYWNraW5nIG9uL29mZiAgICAgICAgICAgIEJSTF9DTURfQ1NSVFJLCisgKiAweDAyICAgICAgICAgIDIgICAgICAgICAgIGN1cnNvciBibGluayBvbi9vZmYgICAgICAgICAgICAgICBCUkxfQ01EX0NTUkJMSU5LCisgKiAweDJjICAgICAgICAgICAxIDQgNiAgICAgIGNhcGl0YWwgbGV0dGVyIGJsaW5rIG9uL29mZiAgICAgICBCUkxfQ01EX0NBUEJMSU5LCisgPyAweDEyICAgICAgICAgIDIgICA1ICAgICAgIGJsb2NrL3VuZGVybGluZSBjdXJzb3IgICAgICAgICAgICBCUkxfQ01EX0FUVFJWSVMKKyAqIDB4MTMgICAgICAgICAzMiAgIDUgICAgICAgc2l4L2VpZ2h0IGRvdCBicmFpbGxlIHRleHQgICAgICAgIEJSTF9DTURfU0lYRE9UUworICogMHgzYSAgICAgICAgICAyICA0NTYgICAgICBzbGlkaW5nIHdpbmRvdyBvbi9vZmYgICAgICAgICAgICAgQlJMX0NNRF9TTElERVdJTgorICogMHgxYSAgICAgICAgICAyICA0NSAgICAgICBza2lwIGlkZW50aWNhbCBsaW5lcyBvbi9vZmYgICAgICAgQlJMX0NNRF9TS1BJRExOUworICogMHgwYiAgICAgICAgIDMyICA0ICAgICAgICBhdWRpbyBzaWduYWxzIG9uL29mZiAgICAgICAgICAgICAgQlJMX0NNRF9UVU5FUworICogMHgwZCAgICAgICAgIDMgMSA0ICAgICAgICBhdHRyaWJ1dGUgZGlzcGxheSBvbi9vZmYgICAgICAgICAgQlJMX0NNRF9ESVNQTUQKKyAqIDB4MGUgICAgICAgICAgMjEgNCAgICAgICAgZnJlZXplIG1vZGUgb24vb2ZmICAgICAgICAgICAgICAgIEJSTF9DTURfRlJFRVpFCisgKiAweDE2ICAgICAgICAgIDIxICA1ICAgICAgIGhlbHAgZGlzcGxheSBvbi9vZmYgICAgICAgICAgICAgICBCUkxfQ01EX0hFTFAKKyAqIDB4MDkgICAgICAgICAzICAgNCAgICAgICAgc3RhdHVzIG1vZGUgb24vb2ZmICAgICAgICAgICAgICAgIEJSTF9DTURfSU5GTworCisgIFByZWZlcmVuY2VzIGNvbnRyb2w6CisgKiAweDNmICAgICAgICAgMzIxIDQ1NiAgICAgIHNhdmUgcHJlZmVyZW5jZXMgICAgICAgIEJSTF9DTURfUFJFRlNBVkUKKyAqIDB4MmQgICAgICAgICAzIDEgNCA2ICAgICAgZW50ZXIgcHJlZmVyZW5jZXMgbWVudSAgICAgICAgICBCUkxfQ01EX1BSRUZNRU5VCisgKiAweDE3ICAgICAgICAgMzIxICA1ICAgICAgIHJlc3RvcmUgcHJlZmVyZW5jZXMgICAgICAgICAgQlJMX0NNRF9QUkVGTE9BRAorCisgIEV4cGxhbmF0aW9uOgorCUEgJz8nIGJlZm9yZSBhIGxpbmUgbWVhbnMgdGhhdCBJIHdhcyBub3Qgc3VyZSBpZiB0aGUgdXNlZCBjb21tYW5kIGlzIHJlYWxseSBPSy4KKwlBICcqJyBtZWFucyB0aGF0IHRoZSB1c2VkIGNvbW1hbmQgc2hvdWxkIGJlIGZpbmUKKyAqLworCisKKworLyogCisgQ29tbWFuZCB0cmFuc2xhdGlvbiB0YWJsZSBmb3IgJ1QnIGV2ZW50cyAoZnJvbnQvdGh1bWIga2V5cywgYmxvY2sgd2l0aCBrZXlzICcwLTknLCAnKicsICcjJyk6IAorIGtleSBudW1iZXJzIGZvciBmcm9udCBrZXlzIGFyZTogKGtleXMgaW4gYnJhY2tldHMgYXJlIG5vdCBhdmFpbGFibGUgZm9yIGFsbCBicmFpbGxlIGxpbmVzIQorICAgMTMgLSAxNCAtICgxNSkgLSAxNiAtICgxNykgLSAoMTgpIC0gMTkgLSAyMCAtICgyMSkgLSAoMjIpCisga2V5IG51bWJlcnMgZm9yIGJsb2NrIGtleXMgKCAnMCcgLSAnOScsICcqJywgJyMnOyBNQjE4NUNSIG9ubHkpOgorICAgMSAtIDIgLSAzIC0gNCAtIDUgLSA2IC0gNyAtIDggLSA5IC0gMTAgLSAxMSAtIDEyCisJIAorIFNvIGlmIHlvdSBoYXZlIGZvciBleGFtcGxlIGEgTUIxODVDUiBhbmQgeW91IHdhbnQgdG8gcmVhY3QgZnJvbnQga2V5IHdpdGggbnVtYmVyIDE1CisgZm9yIGV4YW1wbGUgdG8ganVtcCB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBsaW5lLCB5b3UgaGF2ZSB0byBkbyB0aGUgZm9sbG93aW5nOgorICogU2VhcmNoIGluIHRhYmxlIGNtZF9UX3RyYW5zIHRoZSBlbGVtZW50IHdpdGggaW5kZXggMHgwZiAoPT0gZGVjaW1hbCAxNSkKKyAgIChBdHRlbnRpb246IGNvdW50aW5nIHN0YXJ0cyB3aXRoIDApCisgKiBpbnN0ZWFkIG9mIHRoZSBkZWZhdWx0IGVudHJ5ICcweDAwJyBlbnRlciBCUkxfQ01EX0xOQkVHIChhbGwgY29tbWFuZHMgYXJlIGV4cGxhaW5lZCBhYm92ZSkKKyAqIHJlYnVpbGQgYnJsdHR5IGFuZCB0aGUgbmV4dCB0aW1lIHlvdSBhcmUgcHJlc3NpbmcgZnJvbnQga2V5IDE1IHRoZSBjdXJzb3Igd2lsbAorICAganVtcCB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBsaW5lCisgCisqLworc3RhdGljIGludCBjbWRfVF90cmFuc1syM10gPSB7CisvKiAweDAwICovIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIAorLyogMHgwOCAqLyAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCBCUkxfQ01EX0ZXSU5MVCwgQlJMX0NNRF9MTlVQLCAweDAwLCAKKy8qIDB4MTAgKi8gQlJMX0NNRF9DU1JUUkssIDB4MDAsIDB4MDAsIEJSTF9DTURfTE5ETiwgQlJMX0NNRF9GV0lOUlQsIDB4MDAsIDB4MDAKK307CisKKworLyogQ29tbWFuZCB0cmFuc2xhdGlvbiB0YWJsZSBmb3IgJ1MnIGV2ZW50cyAoYnJhaWxsZSBkb3Qga2V5cykgKi8KKy8qIDYzIGN1c3RvbWl6YWJsZSBrZXktYmluZGluZ3MhIChpbmRleCAwIGNhbid0IGJlIGN1c3RvbWl6ZWQgLi4pICovCisvKiBjb21iaW5hdGlvbnMgcmV0dXJuaW5nIDB4MDAgYXJlIGlnbm9yZWQgKi8KK3N0YXRpYyBpbnQgY21kX1NfdHJhbnNbMHg0MF0gPSB7CisvKiAweDAwICovICAweDAwLCAgICAgICAgIEJSTF9DTURfRldJTkxULCAgIEJSTF9DTURfQ1NSQkxJTkssIEJSTF9DTURfTE5CRUcsICAgCisvKiAweDA0ICovICBCUkxfQ01EX0xOVVAsICAgICBCUkxfQ01EX0NIUkxULCAgICBCUkxfQ01EX05YRElGTE4sICBCUkxfQ01EX1RPUCwKKy8qIDB4MDggKi8gIEJSTF9DTURfTE5ETiwgICAgIEJSTF9DTURfSU5GTywgICAgIDB4MDAsICAgICAgICAgQlJMX0NNRF9UVU5FUywgICAgICAKKy8qIDB4MGMgKi8gIEJSTF9DTURfQ1NSVFJLLCAgIEJSTF9DTURfRElTUE1ELCAgIEJSTF9DTURfRlJFRVpFLCAgIEJSTF9DTURfUEFTVEUsIAorLyogMHgxMCAqLyAgQlJMX0NNRF9DU1JWSVMsICAgMHgwMCwgICAgICAgICBCUkxfQ01EX0FUVFJWSVMsICBCUkxfQ01EX1NJWERPVFMsICAgICAgICAKKy8qIDB4MTQgKi8gIDB4MDAsICAgICAgICAgQlJMX0NNRF9IV0lOUlQsICAgQlJMX0NNRF9IRUxQLCAgICAgQlJMX0NNRF9QUkVGTE9BRCwgCisvKiAweDE4ICovICBCUkxfQ01EX1BSRElGTE4sICAweDAwLCAgICAgICAgIEJSTF9DTURfU0tQSURMTlMsIDB4MDAsICAgICAgICAKKy8qIDB4MWMgKi8gIDB4MDAsICAgICAgICAgMHgwMCwgICAgICAgICBCUkxfQ01EX0hPTUUsICAgICAweDAwLCAKKy8qIDB4MjAgKi8gIEJSTF9DTURfRldJTlJULCAgIEJSTF9DTURfQkxLKFJPVVRFKSwgICAgIDB4MDAsICAgICAgICAgQlJMX0NNRF9CTEsoQ0xJUF9ORVcpLCAKKy8qIDB4MjQgKi8gIEJSTF9DTURfTVVURSwgICAgIDB4MDAsICAgICAgICAgMHgwMCwgICAgICAgICAweDAwLCAKKy8qIDB4MjggKi8gIEJSTF9DTURfQ0hSUlQsICAgIDB4MDAsICAgICAgICAgQlJMX0NNRF9IV0lOTFQsICAgMHgwMCwgICAgICAgIAorLyogMHgyYyAqLyAgQlJMX0NNRF9DQVBCTElOSywgQlJMX0NNRF9QUkVGTUVOVSwgMHgwMCwgICAgICAgICAweDAwLCAKKy8qIDB4MzAgKi8gIEJSTF9DTURfTE5FTkQsICAgIEJSTF9DTURfQkxLKENPUFlfUkVDVCksIDB4MDAsICAgICAgICAgMHgwMCwgICAgICAgIAorLyogMHgzNCAqLyAgQlJMX0NNRF9TQVlfTElORSwgMHgwMCwgICAgICAgICAweDAwLCAgICAgICAgIDB4MDAsIAorLyogMHgzOCAqLyAgQlJMX0NNRF9CT1QsICAgICAgMHgwMCwgICAgICAgICBCUkxfQ01EX1NMSURFV0lOLCAweDAwLCAgICAgICAgCisvKiAweDNjICovICAweDAwLCAgICAgICAgIDB4MDAsICAgICAgICAgMHgwMCwgICAgICAgICBCUkxfQ01EX1BSRUZTQVZFLCAKK307CisKKworLyogQ29tbWFuZCB0cmFuc2xhdGlvbiB0YWJsZSBmb3IgJ1InIGV2ZW50cyAoY3Vyc29yIHJvdXRpbmcga2V5cykqLworLyogb25seSBrZXlzIDMsIDQsIDUgKHN0YXJ0aW5kZXg6IDApIGNhbiBiZSBjdXN0b21pemVkISEgb3RoZXJzIGFyZQorICAgaWdub3JlZCAoaGFyZC1jb2RlZCkhICovCitzdGF0aWMgaW50IGNtZF9SX3RyYW5zW01CX0NSX0VYVFJBS0VZU10gPSB7CisvKiAweDAwICovIDB4MDAsIDB4MDAsIDB4MDAsIEJSTF9DTURfUFJFRk1FTlUsIEJSTF9DTURfUFJFRkxPQUQsIEJSTF9DTURfSEVMUAorfTsKZGlmZiAtLWdpdCBhL0RyaXZlcnMvQnJhaWxsZS9OaW5lUG9pbnQvTWFrZWZpbGUuaW4gYi9Ecml2ZXJzL0JyYWlsbGUvTmluZVBvaW50L01ha2VmaWxlLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRiNDllMzIKLS0tIC9kZXYvbnVsbAorKysgYi9Ecml2ZXJzL0JyYWlsbGUvTmluZVBvaW50L01ha2VmaWxlLmluCkBAIC0wLDAgKzEsMjggQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyMgICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisjCisjIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyMKKyMgQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitEUklWRVJfQ09ERSA9IG5wCitEUklWRVJfTkFNRSA9IE5pbmVQb2ludAorRFJJVkVSX1VTQUdFID0gOAorRFJJVkVSX1ZFUlNJT04gPSAKK0RSSVZFUl9ERVZFTE9QRVJTID0gRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPgoraW5jbHVkZSAkKFNSQ19UT1ApYnJhaWxsZS5taworCiticmFpbGxlLiRPOgorCSQoQ0MpICQoQlJMX0NGTEFHUykgLWMgJChTUkNfRElSKS9icmFpbGxlLmMKKwpkaWZmIC0tZ2l0IGEvRHJpdmVycy9CcmFpbGxlL05pbmVQb2ludC9icmFpbGxlLmMgYi9Ecml2ZXJzL0JyYWlsbGUvTmluZVBvaW50L2JyYWlsbGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNDU1M2I3Ci0tLSAvZGV2L251bGwKKysrIGIvRHJpdmVycy9CcmFpbGxlL05pbmVQb2ludC9icmFpbGxlLmMKQEAgLTAsMCArMSwyODAgQEAKKy8qCisgKiBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorICogICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorICoKKyAqIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorICoKKyAqIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyAqLworCisjaW5jbHVkZSAicHJvbG9ndWUuaCIKKworI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisKKyNpbmNsdWRlICJsb2cuaCIKKworI2luY2x1ZGUgImJybF9kcml2ZXIuaCIKKyNpbmNsdWRlICJicmxkZWZzLW5wLmgiCisKKyNkZWZpbmUgUFJPQkVfUkVUUllfTElNSVQgMworI2RlZmluZSBQUk9CRV9JTlBVVF9USU1FT1VUIDEwMDAKKyNkZWZpbmUgTUFYSU1VTV9SRVNQT05TRV9TSVpFIDMKKyNkZWZpbmUgTUFYSU1VTV9DRUxMX0NPVU5UIChOUF9LRVlfUk9VVElOR19NQVggLSBOUF9LRVlfUk9VVElOR19NSU4gKyAxKQorCitCRUdJTl9LRVlfTkFNRV9UQUJMRShuYXZpZ2F0aW9uKQorICBLRVlfTkFNRV9FTlRSWShOUF9LRVlfQnJsMSwgIkJybDEiKSwKKyAgS0VZX05BTUVfRU5UUlkoTlBfS0VZX0JybDIsICJCcmwyIiksCisgIEtFWV9OQU1FX0VOVFJZKE5QX0tFWV9CcmwzLCAiQnJsMyIpLAorICBLRVlfTkFNRV9FTlRSWShOUF9LRVlfQnJsNCwgIkJybDQiKSwKKyAgS0VZX05BTUVfRU5UUlkoTlBfS0VZX0JybDUsICJCcmw1IiksCisgIEtFWV9OQU1FX0VOVFJZKE5QX0tFWV9Ccmw2LCAiQnJsNiIpLAorICBLRVlfTkFNRV9FTlRSWShOUF9LRVlfQnJsNywgIkJybDciKSwKKyAgS0VZX05BTUVfRU5UUlkoTlBfS0VZX0JybDgsICJCcmw4IiksCisKKyAgS0VZX05BTUVfRU5UUlkoTlBfS0VZX0VudGVyLCAgICAgIkVudGVyIiksCisgIEtFWV9OQU1FX0VOVFJZKE5QX0tFWV9TcGFjZSwgICAgICJTcGFjZSIpLAorICBLRVlfTkFNRV9FTlRSWShOUF9LRVlfUGFkQ2VudGVyLCAiUGFkQ2VudGVyIiksCisgIEtFWV9OQU1FX0VOVFJZKE5QX0tFWV9QYWRMZWZ0LCAgICJQYWRMZWZ0IiksCisgIEtFWV9OQU1FX0VOVFJZKE5QX0tFWV9QYWRSaWdodCwgICJQYWRSaWdodCIpLAorICBLRVlfTkFNRV9FTlRSWShOUF9LRVlfUGFkVXAsICAgICAiUGFkVXAiKSwKKyAgS0VZX05BTUVfRU5UUlkoTlBfS0VZX1BhZERvd24sICAgIlBhZERvd24iKSwKKyAgS0VZX05BTUVfRU5UUlkoTlBfS0VZX05hdkxlZnQsICAgIk5hdkxlZnQiKSwKKyAgS0VZX05BTUVfRU5UUlkoTlBfS0VZX05hdlJpZ2h0LCAgIk5hdlJpZ2h0IiksCisKKyAgS0VZX0dST1VQX0VOVFJZKE5QX0dSUF9Sb3V0aW5nS2V5cywgIlJvdXRpbmdLZXkiKSwKK0VORF9LRVlfTkFNRV9UQUJMRQorCitCRUdJTl9LRVlfTkFNRV9UQUJMRVMoYWxsKQorICBLRVlfTkFNRV9UQUJMRShuYXZpZ2F0aW9uKSwKK0VORF9LRVlfTkFNRV9UQUJMRVMKKworREVGSU5FX0tFWV9UQUJMRShhbGwpCisKK0JFR0lOX0tFWV9UQUJMRV9MSVNUCisgICZLRVlfVEFCTEVfREVGSU5JVElPTihhbGwpLAorRU5EX0tFWV9UQUJMRV9MSVNUCisKK3N0cnVjdCBCcmFpbGxlRGF0YVN0cnVjdCB7CisgIHVuc2lnbmVkIGNoYXIgZm9yY2VSZXdyaXRlOworICB1bnNpZ25lZCBjaGFyIHRleHRDZWxsc1tNQVhJTVVNX0NFTExfQ09VTlRdOworfTsKKworc3RhdGljIGludAord3JpdGVCeXRlcyAoQnJhaWxsZURpc3BsYXkgKmJybCwgY29uc3QgdW5zaWduZWQgY2hhciAqYnl0ZXMsIHNpemVfdCBjb3VudCkgeworICByZXR1cm4gd3JpdGVCcmFpbGxlUGFja2V0KGJybCwgTlVMTCwgYnl0ZXMsIGNvdW50KTsKK30KKworc3RhdGljIHNpemVfdAorcmVhZFBhY2tldCAoQnJhaWxsZURpc3BsYXkgKmJybCwgdm9pZCAqcGFja2V0LCBzaXplX3Qgc2l6ZSkgeworICB1bnNpZ25lZCBjaGFyICpieXRlcyA9IHBhY2tldDsKKyAgc2l6ZV90IG9mZnNldCA9IDA7CisgIHNpemVfdCBsZW5ndGggPSAwOworCisgIHdoaWxlICgxKSB7CisgICAgdW5zaWduZWQgY2hhciBieXRlOworCisgICAgeworICAgICAgaW50IHN0YXJ0ZWQgPSBvZmZzZXQgPiAwOworCisgICAgICBpZiAoIWdpb1JlYWRCeXRlKGJybC0+Z2lvRW5kcG9pbnQsICZieXRlLCBzdGFydGVkKSkgeworICAgICAgICBpZiAoc3RhcnRlZCkgbG9nUGFydGlhbFBhY2tldChieXRlcywgb2Zmc2V0KTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgICB9CisgICAgfQorCisgIGdvdEJ5dGU6CisgICAgaWYgKG9mZnNldCA9PSAwKSB7CisgICAgICBzd2l0Y2ggKGJ5dGUpIHsKKyAgICAgICAgY2FzZSAwWEZDOgorICAgICAgICAgIGxlbmd0aCA9IDI7CisgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSAwWEZEOgorICAgICAgICAgIGxlbmd0aCA9IDI7CisgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICBsb2dJZ25vcmVkQnl0ZShieXRlKTsKKyAgICAgICAgICBjb250aW51ZTsKKyAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgaW50IHVuZXhwZWN0ZWQgPSAwOworCisgICAgICBpZiAob2Zmc2V0ID09IDEpIHsKKyAgICAgICAgaWYgKGJ5dGVzWzBdID09IDBYRkQpIHsKKyAgICAgICAgICBzd2l0Y2ggKGJ5dGUpIHsKKyAgICAgICAgICAgIGNhc2UgMFgyRjoKKyAgICAgICAgICAgICAgbGVuZ3RoID0gMzsKKyAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgIHVuZXhwZWN0ZWQgPSAxOworICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgIH0KKworICAgICAgaWYgKHVuZXhwZWN0ZWQpIHsKKyAgICAgICAgbG9nU2hvcnRQYWNrZXQoYnl0ZXMsIG9mZnNldCk7CisgICAgICAgIG9mZnNldCA9IDA7CisgICAgICAgIGxlbmd0aCA9IDA7CisgICAgICAgIGdvdG8gZ290Qnl0ZTsKKyAgICAgIH0KKyAgICB9CisKKyAgICBpZiAob2Zmc2V0IDwgc2l6ZSkgeworICAgICAgYnl0ZXNbb2Zmc2V0XSA9IGJ5dGU7CisKKyAgICAgIGlmIChvZmZzZXQgPT0gKGxlbmd0aCAtIDEpKSB7CisgICAgICAgIGxvZ0lucHV0UGFja2V0KGJ5dGVzLCBsZW5ndGgpOworICAgICAgICByZXR1cm4gbGVuZ3RoOworICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICBpZiAob2Zmc2V0ID09IHNpemUpIGxvZ1RydW5jYXRlZFBhY2tldChieXRlcywgb2Zmc2V0KTsKKyAgICAgIGxvZ0Rpc2NhcmRlZEJ5dGUoYnl0ZSk7CisgICAgfQorCisgICAgb2Zmc2V0ICs9IDE7CisgIH0KK30KKworc3RhdGljIGludAorY29ubmVjdFJlc291cmNlIChCcmFpbGxlRGlzcGxheSAqYnJsLCBjb25zdCBjaGFyICppZGVudGlmaWVyKSB7CisgIEdpb0Rlc2NyaXB0b3IgZGVzY3JpcHRvcjsKKyAgZ2lvSW5pdGlhbGl6ZURlc2NyaXB0b3IoJmRlc2NyaXB0b3IpOworCisgIGRlc2NyaXB0b3IuYmx1ZXRvb3RoLmNoYW5uZWxOdW1iZXIgPSAxOworCisgIGlmIChjb25uZWN0QnJhaWxsZVJlc291cmNlKGJybCwgaWRlbnRpZmllciwgJmRlc2NyaXB0b3IsIE5VTEwpKSB7CisgICAgcmV0dXJuIDE7CisgIH0KKworICByZXR1cm4gMDsKK30KKworc3RhdGljIGludAord3JpdGVJZGVudGlmeVJlcXVlc3QgKEJyYWlsbGVEaXNwbGF5ICpicmwpIHsKKyAgcmV0dXJuIDE7Cit9CisgIAorc3RhdGljIEJyYWlsbGVSZXNwb25zZVJlc3VsdAoraXNJZGVudGl0eVJlc3BvbnNlIChCcmFpbGxlRGlzcGxheSAqYnJsLCBjb25zdCB2b2lkICpwYWNrZXQsIHNpemVfdCBzaXplKSB7CisgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ5dGVzID0gcGFja2V0OworICAgIAorICByZXR1cm4gKChzaXplID09IDMpICYmIChieXRlc1swXSA9PSAwWEZEKSAmJiAoYnl0ZXNbMV0gPT0gMFgyRikpPworICAgICAgICAgQlJMX1JTUF9ET05FOgorICAgICAgICAgQlJMX1JTUF9VTkVYUEVDVEVEOworfQorICAgICAgICAgICAgICAgICAgICAgICAgCitzdGF0aWMgaW50CiticmxfY29uc3RydWN0IChCcmFpbGxlRGlzcGxheSAqYnJsLCBjaGFyICoqcGFyYW1ldGVycywgY29uc3QgY2hhciAqZGV2aWNlKSB7CisgIGlmICgoYnJsLT5kYXRhID0gbWFsbG9jKHNpemVvZigqYnJsLT5kYXRhKSkpKSB7CisgICAgbWVtc2V0KGJybC0+ZGF0YSwgMCwgc2l6ZW9mKCpicmwtPmRhdGEpKTsKKworICAgIGlmIChjb25uZWN0UmVzb3VyY2UoYnJsLCBkZXZpY2UpKSB7CisgICAgICB1bnNpZ25lZCBjaGFyIHJlc3BvbnNlW01BWElNVU1fUkVTUE9OU0VfU0laRV07CisKKyAgICAgIGlmIChwcm9iZUJyYWlsbGVEaXNwbGF5KGJybCwgUFJPQkVfUkVUUllfTElNSVQsIE5VTEwsIFBST0JFX0lOUFVUX1RJTUVPVVQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZUlkZW50aWZ5UmVxdWVzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRQYWNrZXQsICZyZXNwb25zZSwgc2l6ZW9mKHJlc3BvbnNlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzSWRlbnRpdHlSZXNwb25zZSkpIHsKKyAgICAgICAgc2V0QnJhaWxsZUtleVRhYmxlKGJybCwgJktFWV9UQUJMRV9ERUZJTklUSU9OKGFsbCkpOworICAgICAgICBNQUtFX09VVFBVVF9UQUJMRSgwWDAxLCAwWDA0LCAwWDEwLCAwWDAyLCAwWDA4LCAwWDIwLCAwWDQwLCAwWDgwKTsKKworICAgICAgICBicmwtPnRleHRDb2x1bW5zID0gTUFYSU1VTV9DRUxMX0NPVU5UOworICAgICAgICBicmwtPmRhdGEtPmZvcmNlUmV3cml0ZSA9IDE7CisgICAgICAgIHJldHVybiAxOworICAgICAgfQorCisgICAgICBkaXNjb25uZWN0QnJhaWxsZVJlc291cmNlKGJybCwgTlVMTCk7CisgICAgfQorCisgICAgZnJlZShicmwtPmRhdGEpOworICB9IGVsc2UgeworICAgIGxvZ01hbGxvY0Vycm9yKCk7CisgIH0KKworICByZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQKK2JybF9kZXN0cnVjdCAoQnJhaWxsZURpc3BsYXkgKmJybCkgeworICBkaXNjb25uZWN0QnJhaWxsZVJlc291cmNlKGJybCwgTlVMTCk7CisKKyAgaWYgKGJybC0+ZGF0YSkgeworICAgIGZyZWUoYnJsLT5kYXRhKTsKKyAgICBicmwtPmRhdGEgPSBOVUxMOworICB9Cit9CisKK3N0YXRpYyBpbnQKK2JybF93cml0ZVdpbmRvdyAoQnJhaWxsZURpc3BsYXkgKmJybCwgY29uc3Qgd2NoYXJfdCAqdGV4dCkgeworICBpZiAoY2VsbHNIYXZlQ2hhbmdlZChicmwtPmRhdGEtPnRleHRDZWxscywgYnJsLT5idWZmZXIsIGJybC0+dGV4dENvbHVtbnMsIE5VTEwsIE5VTEwsICZicmwtPmRhdGEtPmZvcmNlUmV3cml0ZSkpIHsKKyAgICB1bnNpZ25lZCBjaGFyIGJ5dGVzWyhicmwtPnRleHRDb2x1bW5zICogMikgKyAyXTsKKyAgICB1bnNpZ25lZCBjaGFyICpieXRlID0gYnl0ZXM7CisKKyAgICB7CisgICAgICBpbnQgaTsKKworICAgICAgZm9yIChpPWJybC0+dGV4dENvbHVtbnMtMTsgaT49MDsgaS09MSkgeworICAgICAgICAqYnl0ZSsrID0gMFhGQzsKKyAgICAgICAgKmJ5dGUrKyA9IHRyYW5zbGF0ZU91dHB1dENlbGwoYnJsLT5kYXRhLT50ZXh0Q2VsbHNbaV0pOworICAgICAgfQorICAgIH0KKworICAgICpieXRlKysgPSAwWEZEOworICAgICpieXRlKysgPSAwWDEwOworCisgICAgaWYgKCF3cml0ZUJ5dGVzKGJybCwgYnl0ZXMsIGJ5dGUtYnl0ZXMpKSByZXR1cm4gMDsKKyAgfQorCisgIHJldHVybiAxOworfQorCitzdGF0aWMgaW50CiticmxfcmVhZENvbW1hbmQgKEJyYWlsbGVEaXNwbGF5ICpicmwsIEtleVRhYmxlQ29tbWFuZENvbnRleHQgY29udGV4dCkgeworICB1bnNpZ25lZCBjaGFyIHBhY2tldFtNQVhJTVVNX1JFU1BPTlNFX1NJWkVdOworICBzaXplX3Qgc2l6ZTsKKworICB3aGlsZSAoKHNpemUgPSByZWFkUGFja2V0KGJybCwgcGFja2V0LCBzaXplb2YocGFja2V0KSkpKSB7CisgICAgc3dpdGNoIChwYWNrZXRbMF0pIHsKKyAgICAgIGNhc2UgMFhGRDoKKyAgICAgICAgc3dpdGNoIChwYWNrZXRbMV0pIHsKKyAgICAgICAgICBjYXNlIDBYMkY6CisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKworICAgICAgY2FzZSAwWEZDOiB7CisgICAgICAgIHVuc2lnbmVkIGludCBrZXkgPSBwYWNrZXRbMV07CisgICAgICAgIGlmICgoa2V5ID49IE5QX0tFWV9ST1VUSU5HX01JTikgJiYgKGtleSA8PSBOUF9LRVlfUk9VVElOR19NQVgpKSB7CisgICAgICAgICAgZW5xdWV1ZUtleShicmwsIE5QX0dSUF9Sb3V0aW5nS2V5cywgKGtleSAtIE5QX0tFWV9ST1VUSU5HX01JTikpOworICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgIGludCBwcmVzcyA9ICEhKGtleSAmIE5QX0tFWV9OQVZJR0FUSU9OX1BSRVNTKTsKKyAgICAgICAgICBpZiAocHJlc3MpIGtleSAmPSB+TlBfS0VZX05BVklHQVRJT05fUFJFU1M7CisgICAgICAgICAgZW5xdWV1ZUtleUV2ZW50KGJybCwgTlBfR1JQX05hdmlnYXRpb25LZXlzLCBrZXksIHByZXNzKTsKKyAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICB9CisKKyAgICBsb2dVbmV4cGVjdGVkUGFja2V0KHBhY2tldCwgc2l6ZSk7CisgIH0KKworICByZXR1cm4gKGVycm5vID09IEVBR0FJTik/IEVPRjogQlJMX0NNRF9SRVNUQVJUQlJMOworfQpkaWZmIC0tZ2l0IGEvRHJpdmVycy9CcmFpbGxlL05pbmVQb2ludC9icmxkZWZzLW5wLmggYi9Ecml2ZXJzL0JyYWlsbGUvTmluZVBvaW50L2JybGRlZnMtbnAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZjgxOTQzCi0tLSAvZGV2L251bGwKKysrIGIvRHJpdmVycy9CcmFpbGxlL05pbmVQb2ludC9icmxkZWZzLW5wLmgKQEAgLTAsMCArMSw1MSBAQAorLyoKKyAqIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisgKiAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisgKgorICogQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKKyNpZm5kZWYgQlJMVFRZX0lOQ0xVREVEX05QX0JSTERFRlMKKyNkZWZpbmUgQlJMVFRZX0lOQ0xVREVEX05QX0JSTERFRlMKKworI2RlZmluZSBOUF9LRVlfTkFWSUdBVElPTl9QUkVTUyAwWDIwCisjZGVmaW5lIE5QX0tFWV9ST1VUSU5HX01JTiAwWDgwCisjZGVmaW5lIE5QX0tFWV9ST1VUSU5HX01BWCAwWDg3CisKK3R5cGVkZWYgZW51bSB7CisgIE5QX0tFWV9CcmwxICAgICAgPSAwWDQxLAorICBOUF9LRVlfQnJsMiAgICAgID0gMFg0MiwKKyAgTlBfS0VZX0JybDMgICAgICA9IDBYNDMsCisgIE5QX0tFWV9Ccmw0ICAgICAgPSAwWDQ0LAorICBOUF9LRVlfQnJsNSAgICAgID0gMFg0NSwKKyAgTlBfS0VZX0JybDYgICAgICA9IDBYNDYsCisgIE5QX0tFWV9Ccmw3ICAgICAgPSAwWDQ3LAorICBOUF9LRVlfQnJsOCAgICAgID0gMFg0OCwKKyAgTlBfS0VZX0VudGVyICAgICA9IDBYNDksCisgIE5QX0tFWV9TcGFjZSAgICAgPSAwWDRBLAorICBOUF9LRVlfUGFkQ2VudGVyID0gMFg0QiwKKyAgTlBfS0VZX1BhZExlZnQgICA9IDBYNEMsCisgIE5QX0tFWV9QYWRSaWdodCAgPSAwWDRELAorICBOUF9LRVlfUGFkVXAgICAgID0gMFg1MSwKKyAgTlBfS0VZX1BhZERvd24gICA9IDBYNTMsCisgIE5QX0tFWV9OYXZMZWZ0ICAgPSAwWDU1LAorICBOUF9LRVlfTmF2UmlnaHQgID0gMFg1MgorfSBOUF9OYXZpZ2F0aW9uS2V5OworCit0eXBlZGVmIGVudW0geworICBOUF9HUlBfTmF2aWdhdGlvbktleXMsCisgIE5QX0dSUF9Sb3V0aW5nS2V5cworfSBOUF9LZXlHcm91cDsKKworI2VuZGlmIC8qIEJSTFRUWV9JTkNMVURFRF9OUF9CUkxERUZTICovIApkaWZmIC0tZ2l0IGEvRHJpdmVycy9CcmFpbGxlL1BhcGVubWVpZXIvTWFrZWZpbGUuaW4gYi9Ecml2ZXJzL0JyYWlsbGUvUGFwZW5tZWllci9NYWtlZmlsZS5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMDdlYjc4Ci0tLSAvZGV2L251bGwKKysrIGIvRHJpdmVycy9CcmFpbGxlL1BhcGVubWVpZXIvTWFrZWZpbGUuaW4KQEAgLTAsMCArMSwyOCBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorIyAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyMKKyMgQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorIworIyBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorIworIyBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisjIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyMgbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisjCisjIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK0RSSVZFUl9DT0RFID0gcG0KK0RSSVZFUl9OQU1FID0gUGFwZW5tZWllcgorRFJJVkVSX1VTQUdFID0gQ29tcGFjdCA0ODYsIENvbXBhY3QvVGlueSwgSUIgODAgQ1IgU29mdCwgMkQgTGl0ZSAocGx1cyksIDJEIFNjcmVlbiBTb2Z0LCBFTCA4MCwgRUwgMkQgNDAvNjYvODAsIEVMIDQwLzY2LzcwLzgwIFMsIEVMIDQwLzYwLzgwIEMsIEVMIDJEIDgwIFMsIEVMIDQwIFAsIEVMIDgwIElJLCBFbGJhIDIwLzMyLCBUcmlvIDQwL0VsYmEyMC9FbGJhMzIsIExpdmUgMjAvNDAKK0RSSVZFUl9WRVJTSU9OID0gCitEUklWRVJfREVWRUxPUEVSUyA9IEF1Z3VzdCBIw7ZyYW5kbCA8YXVndXN0LmhvZXJhbmRsQGdteC5hdD4sIEhlaW1vIFNjaMO2biA8aGVpbW8uc2Nob2VuQGdteC5hdD4KK2luY2x1ZGUgJChTUkNfVE9QKWJyYWlsbGUubWsKKworYnJhaWxsZS4kTzoKKwkkKENDKSAkKEJSTF9DRkxBR1MpIC1jICQoU1JDX0RJUikvYnJhaWxsZS5jCisKZGlmZiAtLWdpdCBhL0RyaXZlcnMvQnJhaWxsZS9QYXBlbm1laWVyL1JFQURNRSBiL0RyaXZlcnMvQnJhaWxsZS9QYXBlbm1laWVyL1JFQURNRQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YzNmOTc0Ci0tLSAvZGV2L251bGwKKysrIGIvRHJpdmVycy9CcmFpbGxlL1BhcGVubWVpZXIvUkVBRE1FCkBAIC0wLDAgKzEsMjMxIEBACitSRUFETUUgZmlsZSBmb3IgdGhlIFBhcGVubWVpZXIgRHJpdmVyCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1ZlcnNpb24gMi4xIChPY3RvYmVyIDIwMDEpCisKK0NvcHlyaWdodAorPT09PT09PT09CisKK1RoaXMgZHJpdmVyIGlzIGNvcHlyaWdodGVkIHVuZGVyIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuCitJdCBpcyBmcmVlIHNvZnR3YXJlLiAgU2VlIHRoZSBmaWxlICdMSUNFTlNFLUxHUEwnIGZvciBtb3JlIGRldGFpbHMuCitGZWVsIGZyZWUgdG8gc2VuZCB5b3VyIGNvbW1lbnRzIGFuZCB0byByZXBvcnQgYnVncyAoaWYgYW55IDopKSB0byB1cyBhdAorYXVndXN0LmhvZXJhbmRsQGdteC5hdCBvciBoZWltby5zY2hvZW5AZ214LmF0CisKK1N1cHBvcnRlZCBIYXJkd2FyZQorPT09PT09PT09PT09PT09PT09CitUaGlzIGRyaXZlciBpcyBzdXBwb3NlZCB0byB3b3JrIHdpdGggYWxsIHRoZSBQYXBlbm1laWVyIFRlcm1pbmFscy4KK1RoZSBkcml2ZXIgaXMgYWJsZSB0byBhdXRvZGV0ZWN0IHRoZSBjb25uZWN0ZWQgdGVybWluYWwuCisKK0Nvbm5lY3Rpb24KKz09PT09PT09PT0KK1RoaXMgZHJpdmVyIHN1cHBvcnRzIHNlcmlhbCBhbmQgVVNCIGNvbW11bmljYXRpb24uCisKK1J1bm5pbmcgdGhlIERyaXZlcgorPT09PT09PT09PT09PT09PT09CitUbyBjb21waWxlIGFuZCBydW4gQlJMVFRZLCBwbGVhc2UgcmVmZXIgdG8gdGhlIGRvY3VtZW50YXRpb24gYWJvdXQgCitCUkxUVFkgaXRzZWxmLiBPbmUgbm90ZSB0aG91Z2g6IHdoZW4gQlJMVFRZIHN0YXJ0cywgaXQgd2lsbCBkaXNwbGF5IAorb24gdGhlIHNjcmVlbiBzb21lIGNvcHlyaWdodCBzdHVmZiwgY3VycmVudCBjb25maWd1cmF0aW9uIChtb2RlbCBhbmQgCitmaXJtd2FyZSB2ZXJzaW9uIHNldHVwKSBhbmQgdGhlIGRldmljZSBpbiB1c2UuICBUaGF0IGluZm9ybWF0aW9uIAorbWF5IGJlIHVzZWZ1bCBpZiBub3RoaW5nIGhhcHBlbnMgd2l0aCB0aGUgYnJhaWxsZSB0ZXJtaW5hbC4KKworCitLZXkgQmluZGluZ3MgYW5kIFN0YXR1cyBDZWxscworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK1RoZSBkcml2ZXIgaXMgZnVsbHkgY29uZmlndXJhYmxlIC0gYWxsIGtleSBiaW5kaW5ncyBhbmQgdGhlIHN0YXR1cyBjZWxscworY2FuIGJlIGZ1bGx5IHByb2dyYW1tZWQ6CisKK1RoZSBjb25maWd1cmF0aW9uIGNhbiBiZSBkb25lIGJ5CistIGNoYW5naW5nIHRoZSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gaW4gdGhlIHNvdXJjZSBmaWxlIGJybC1jZmcuaAorICBhbnkgY2hhbmdlcyB3aWxsIGJlIGRpc3RyaWJ1dGVkIHRvIHRoZSBvbmxpbmUgaGVscCBkdXJpbmcgY29tcGlsZQorLSBlZGl0IHRoZSBjb25maWcgZmlsZSAvZXRjL2JybHR0eS9icmx0dHktcG0uY29uZjsgZG9uJ3QgZm9yZ2V0IHRvIHN1cHBseSAKKyAgYSBmaXR0aW5nIGhlbHAgZmlsZQorCitJZiB5b3UgZG9uJ3Qgd2FudCB0byB1c2UgdGhlIGNvbmZpZyBmaWxlIHlvdSBjYW4gc2FmZWx5IHJlbW92ZSB0aGUKK2NvbmZpZyBmaWxlIC9ldGMvYnJsdHR5L2JybHR0eS1wbS5jb25mIGFuZCB1c2UgdGhlIGNvbXBpbGVkIGluCitkZWZhdWx0cy4gQnkgZGVmYXVsdCB0aGUgZHJpdmVyIGlzIGNvbXBpbGVkIHdpdGggdGhlIFJFQURfQ09ORklHCitzeW1ib2wgZGVmaW5lZC4gIFdpdGhvdXQgdGhpcyBzeW1ib2xzIHRoZSBjb2RlIHRvIHJlYWQgdGhlIGNvbmZpZyBmaWxlCit3b24ndCBiZSBjb21waWxlZCBpbnRvIHRoZSBkcml2ZXIgd2hpY2ggeWllbGRzIGEgZHJpdmVyIHdpdGggYSBtdWNoCitzbWFsbGVyIHNpemUuCisKK0hlbHAgRmlsZToKKz09PT09PT09PT0KK1RoZSBvbmxpbmUgaGVscCBpcyBnZW5lcmF0ZWQgZnJvbSB0aGUgY29tcGlsZWQgaW4gZGVmYXVsdHMgLSBpdCB1c2VzCit0aGUgc2FtZSBzeW50YXggYXMgdGhlIGNvbmZpZyBmaWxlIHRvIGdpdmUgdGhlIHVzZXIgYSBzaG9ydCBvdmVydmlldyBvZgordGhlIHN0YXR1cyBjZWxscyBhbmQgdGhlIGtleW1hcHBpbmcuCitCeSBkZWZhdWx0IHRoZSBoZWxwIGNvbW1hbmQgaXMgbWFwcGVkIHRvIHRoZSBrZXkgb24gdGhlIGZpcnN0IHN0YXR1cyBjZWxsLgorCitDb25maWcgRmlsZQorPT09PT09PT09PT0KK1RoZSBjb25maWd1cmF0aW9uIGZpbGUgbWF5IGluY2x1ZGUgdGhlIGRlZmluaXRpb25zIGZvciBzZXZlcmFsIHRlcm1pbmFscy4KK0xvb2sgYXQgUGFwZW5tZWllci9icmx0dHktcG0uY29uZiBhbmQgdGhlIFBhcGVubWVpZXIvKi5obHAgZmlsZXMgZm9yIAorZXhhbXBsZXMuCisKK1N5bnRheDoKKyMgICAgIENvbW1lbnQgdG8gdGhlIGVuZCBvZiBsaW5lCituYW1lID0gdmFsdWUgICB5b3UgY2FuIHVzZSAnaXMnIGluc3RlYWQgb2YgJz0nOyBhY3R1YWxseSB5b3UgZG9uJ3QgaGF2ZSB0bworIHdyaXRlICc9JywgJ2lzJyBvciAnYW5kJyBhdCBhbGwuIFRoZSBmb2xsb3dpbmcgbGluZXMgYXJlIGVxdWl2YWxlbnQ6CituYW1lID0gdmFsCituYW1lIGlzIHZhbAorbmFtZSB2YWwKKworU3RhcnQgYSBuZXcgdGVybWluYWwgZGVmaW5pdGlvbjoKK2lkZW50aWZpY2F0aW9uID0gTlVNQkVSCit0aGUgbnVtYmVyIGlzIHRoZSBjb2RlIHJldHVybmVkIGJ5IHRoZSB0ZXJtaW5hbCBvbiBpZGVudGlmaWNhdGlvbiAKK3JlcXVlc3Q7IHRoaXMgc3RhcnRzIGEgbmV3IHRlcm1pbmFsIGRlZmludGlvbiAtIG5vIG5lZWQgdG8gY2hhbmdlIHRoaXMgaW5mbworCitJbmZvIGFib3V0IHRoZSB0ZXJtaW5hbCAtIE5hbWUgYW5kIHNpemUgb2YgdGhlIHRlcm1pbmFsOgordGVybWluYWwgPSAiU3RyaW5nIHRvIGRlc2NyaWJlIHRoZSBUZXJtaW5hbCIKK2hlbHBmaWxlID0gImJybHR0eS1wbTEuaGxwIiAgICMgbmFtZSBvZiB0aGUgaGVscGZpbGUKK2Rpc3BsYXlzaXplID0gNDAgICAgICAgIyBudW1iZXIgb2YgY2VsbHMgIAorc3RhdHVzY2VsbHMgPSAwICAgICAgICAjIG51bWJlciBvZiBzdGF0dXMgY2VsbHMgKGhvcml6b250YWwgb3IgdmVydGljYWwpCitmcm9udGtleXMgPSA5ICAgICAgICAgICMgbnVtYmVyIG9mIGtleXMgb24gdGhlIGZyb250IG9mIHRoZSB0ZXJtaW5hbAoraGFzZWFzeWJhciAgICAgICAgICAgICAjIHRlcm1pbmFsIGhhcyBhbiBlYXN5YmFyIChFTCB0eXBlcykKKworVGVybWluYWwgc2V0dGluZ3M6CitTdGF0dXNkaXNwbGF5IHNldHRpbmdzOgordGhlcmUgYXJlIGRpZmZlcmVudCBkaXNwbGF5IG1vZGVzOgorIGZsYWc6IGxlZnQgaGFsZjogbGluZSBudW1iZXIsIHJpZ2h0IGhhbGY6IG5vL2FsbCBiaXRzIHNldCAtIHVzZWQgd2l0aAorICAgdmVydGljYWwgc3RhdHVzIGNlbGxzCisgaG9yaXo6IHR3byBkaWdpdHMgb24gdGhlIHZlcnRpY2FsIHN0YXR1cy1kaXNwbGF5CisgbnVtYmVyOiBkaXNwbGF5IHR3byBkaWdpdHMgaW4gb25lIGNlbGwgKHN0YXR1cyBvbiBob3Jpei5kaXNwbGF5KQorZXhhbXBsZTogCitzdGF0dXMgNCA9IGhvcml6IGN1cnNvcmNvbAorc3RhdHVzIDYgPSBmbGFnIHRyYWNraW5nCithIGxpc3Qgb2YgdGhlIHBvc3NpYmxlIGluZm8gdG8gZGlzcGxheSAoc2VlIGJybC5oIGFuZC9vciBQYXBlbm1laWVyL2hscC5hdXRvLmgpCitjdXJyZW50IC0gY3VycmVudCBsaW5lIG51bWJlcgorcm93IC0gY3Vyc29yIHBvc2l0aW9uIC0gcm93Citjb2wgLSBjdXJzb3IgcG9zaXRpb24gLSBjb2x1bW4KK3RyYWNraW5nIC0gY3Vyc29yIHRyYWNraW5nCitkaXNwbW9kZSAtIGRpc3Btb2RlICh0ZXh0IC8gYXR0cmlidXQpCitmcm96ZW4gLSBzY3JlZW4gZnJvemVuCit2aXNpYmxlIC0gY3Vyc29yIHZpc2libGUKK3NpemUgLSBjdXJzb3Igc2l6ZQorYmxpbmsgLSBjdXJzb3IgYmxpbmsKK2NhcGl0YWxibGluayAtIGNhcGl0YWwgbGV0dGVyIGJsaW5rCitkb3RzIC0gNiBvciA4IGRvdHMKK3NvdW5kIC0gc291bmQKK3NraXAgLSBza2lwIGlkZW50aWNhbCBsaW5lcwordW5kZXJsaW5lIC0gYXR0cmlidXRlIHVuZGVybGluaW5nCitibGlua2F0dHIgLSBibGlua2luZyBvZiBhdHRyaWJ1dGUgdW5kZXJsaW5pbmcKKworS2V5IGRlZmluaXRpb246CitzdGF0dXMgTlVNQkVSICAgICAtIGtleSBvbiBzdGF0dXMgY2VsbAorZnJvbnQgTlVNQkVSICAgICAgLSBrZXkgb24gdGhlIGZyb250IHNpZGUgb2YgdGhlIHRlcm1pbmFsCityb3V0aW5nICAgICAgICAgICAtIG9uZSBvZiB0aGUgcm91dGluZyBrZXlzIGlzIHByZXNzZWQKK2Vhc3kgREVTQ1IgICAgICAgIC0gZWFzeSBiYXIga2V5IAorICBERVNDUiBtYXkgYmU6IGxlZnQsIGxlZnQyLCB1cCwgdXAyLCBkb3duLCBkb3duMiwgcmlnaHQsIHJpZ2h0Mgorc3dpdGNoIE5VTUJFUiAgICAgLSBzd2l0Y2hlcyBvbiB0aGUgbGVmdCBhbmQgcmlnaHQgc2lkZSBvZiB0aGUgCisgIGRpc3BsYXk7IG51bWJlcmVkIGZyb20gMSAobGVmdG1vc3Qgc3dpdGNoIHVwKSB0byA4IChyaWdodG1vc3Qgc3dpdGNoIGRvd24pCisKK01vZGlmaWVyIGtleSBzZXR0aW5nczoKK2FueSBrZXkgY2FuIGJlIGRlZmluZWQgYXMgYSBtb2RpZmllciAobGlrZSB0aGUgc2hpZnQgb3IgYWx0IGtleSBvbiB0aGUgCitzdGFuZGFyZCBrZXlib2FyZCkuIAorCitJbnB1dCBtb2RlOgorZHVyaW5nIGlucHV0bW9kZSB0aGUgbW9kaWZpZXIga2V5cyBhcmUgdXNlZCB0byBpbnB1dCB0aGUgOCBkb3RzIG9mIGEgCitjaGFyYWN0ZXIuIEF0dGVudGlvbjogdGhlIG1vZGlmaWVycyBrZXlzIGFyZSB1c2VkIHRvIHNpbXVsYXRlCit0aGUgZGlmZmVyZW50IGRvdHMsIHNvIElOUFVUTU9ERSBvciBJTlBVVE1PREUgT0ZGIHNob3VsZCBiZQorbWFwcGVkIHRvIGEgc2luZ2xlIGtleS4KKworQ29tbWFuZGtleSBzZXR0aW5nczoKK2xpc3Qgb2YgZGVmaW5pdGlvbnM6CisgIGNvbW1hbmQgPSBrZXkgCisgIGNvbW1hbmQgPSBtb2RpZmllciBhbmQga2V5CitUaGUgY29tbWFuZCBpcyBleGVjdXRlZCBvbiBrZXlwcmVzczsgaWYgeW91IHNwZWNpZnkgb25seSBtb2RpZmllcnMgCit0aGUgY29tbWFuZCBpcyBleGVjdXRlZCB3aGVuIHRoZSBmaXJzdCBtb2RpZmllciBpcyByZWxlYXNlZC4KK0ZvciBjb21tYW5kcyB3aGljaCB0b2dnbGUgYSBzZXR0aW5nIGl0IGlzIHBvc3NpYmxlIHRvIGFkZCBPTiBvciBPRkYgdG8gCit0aGUgY29tbWFuZCB0byBkZWZpbmUgYSBwcmVkaWN0YWJsZSBzdGF0ZSBjaGFuZ2UKKyAgY29tbWFuZCBPTiA9IDxhcyBhYm92ZT4KKyAgY29tbWFuZCBPRkYgPSA8YXMgYWJvdmU+CitBIGxpc3Qgb2YgdGhlIHBvc3NpYmxlIGNvbW1hbmRzICh0aGUgZm9sbG93aW5nIGxpc3QgaXMgc29tZXRpbWVzIG91dCBvZiAKK2RhdGUgLSBzZWUgYnJsZGVmcy5oIGFuZC9vciBQYXBlbm1laWVyL2hscC5hdXRvLmggZm9yIHRoZSBhY3R1YWwgdmFsdWVzKSwgdGhlIG5hbWVzIAorbWF5IGJlIHVzZWQgd2l0aCBvciB3aXRob3V0IHRoZSBsZWFkaW5nIENNRF86CitOT09QIC0gZG8gbm90aGluZworTE5VUCAtIGdvIHVwIG9uZSBsaW5lCitMTkROIC0gZ28gZG93biBvbmUgbGluZQorV0lOVVAgLSBnbyB1cCBzZXZlcmFsIGxpbmVzCitXSU5ETiAtIGdvIGRvd24gc2V2ZXJhbCBsaW5lcworUFJESUZMTiAtIGdvIHVwIHRvIGxpbmUgd2l0aCBkaWZmZXJlbnQgY29udGVudAorTlhESUZMTiAtIGdvIGRvd24gdG8gbGluZSB3aXRoIGRpZmZlcmVudCBjb250ZW50CitBVFRSVVAgLSBnbyB1cCB0byBsaW5lIHdpdGggZGlmZmVyZW50IGF0dHJpYnV0ZXMKK0FUVFJETiAtIGdvIGRvd24gdG8gbGluZSB3aXRoIGRpZmZlcmVudCBhdHRyaWJ1dGVzCitQUkJMTktMTiAtIGdvIHRvIGxhc3QgbGluZSBvZiBwcmV2aW91cyBwYXJhZ3JhcGgKK05YQkxOS0xOIC0gZ28gdG8gZmlyc3QgbGluZSBvZiBuZXh0IHBhcmFncmFwaAorUFJTRUFSQ0ggLSBzZWFyY2ggdXAgZm9yIGNvbnRlbnQgb2YgY3V0IGJ1ZmZlcgorTlhTRUFSQ0ggLSBzZWFyY2ggZG93biBmb3IgY29udGVudCBvZiBjdXQgYnVmZmVyCitUT1AgLSBnbyB0byB0b3AgbGluZQorQk9UIC0gZ28gdG8gYm90dG9tIGxpbmUKK1RPUF9MRUZUIC0gZ28gdG8gdG9wLWxlZnQgY29ybmVyCitCT1RfTEVGVCAtIGdvIHRvIGJvdHRvbS1sZWZ0IGNvcm5lcgorQ0hSTFQgLSBnbyBsZWZ0IG9uZSBjaGFyYWN0ZXIKK0NIUlJUIC0gZ28gcmlnaHQgb25lIGNoYXJhY3RlcgorSFdJTkxUIC0gZ28gbGVmdCBvbmUgaGFsZiB3aW5kb3cKK0hXSU5SVCAtIGdvIHJpZ2h0IG9uZSBoYWxmIHdpbmRvdworRldJTkxUIC0gZ28gbGVmdCBvbmUgZnVsbCB3aW5kb3cKK0ZXSU5SVCAtIGdvIHJpZ2h0IG9uZSBmdWxsIHdpbmRvdworRldJTkxUU0tJUCAtIGdvIGxlZnQgdG8gbm9uLWJsYW5rIHdpbmRvdworRldJTlJUU0tJUCAtIGdvIHJpZ2h0IHRvIG5vbi1ibGFuayB3aW5kb3cKK0xOQkVHIC0gZ28gdG8gYmVnaW5uaW5nIG9mIGxpbmUKK0xORU5EIC0gZ28gdG8gZW5kIG9mIGxpbmUKK0hPTUUgLSBnbyB0byBjdXJzb3IKK0JBQ0sgLSBnbyB0byBsYXN0IG1vdGlvbgorQ1NSSk1QIC0gcm91dGUgY3Vyc29yIHRvIHRvcC1sZWZ0IGNvcm5lciBvZiBicmFpbGxlIHdpbmRvdworQ1NSSk1QX1ZFUlQgLSByb3V0ZSBjdXJzb3IgdG8gdG9wIGxpbmUgb2Ygd2luZG93CitDVVRfQkVHIC0gY3V0IHRleHQgZnJvbSB0b3AtbGVmdCBjb3JuZXIgb2YgYnJhaWxsZSB3aW5kb3cKK0NVVF9FTkQgLSBjdXQgdGV4dCB0byBib3R0b20tcmlnaHQgY29ybmVyIG9mIGJyYWlsbGUgd2luZG93CitQQVNURSAtIGluc2VydCBjdXQgYnVmZmVyIGF0IGN1cnNvcgorRlJFRVpFIC0gZnJlZXplL3VuZnJlZXplIHNjcmVlbgorRElTUE1EIC0gdG9nZ2xlIGRpc3BsYXkgYXR0cmlidXRlcy90ZXh0CitTSVhET1RTIC0gdG9nZ2xlIHRleHQgc3R5bGUgNi1kb3QvOC1kb3QKK1NMSURFV0lOIC0gdG9nZ2xlIHNsaWRpbmcgd2luZG93IG9uL29mZgorU0tQSURMTlMgLSB0b2dnbGUgc2tpcHBpbmcgb2YgaWRlbnRpY2FsIGxpbmVzIG9uL29mZgorU0tQQkxOS1dJTlMgLSB0b2dnbGUgc2tpcHBpbmcgb2YgYmxhbmsgd2luZG93cyBvbi9vZmYKK0NTUlZJUyAtIHRvZ2dsZSBjdXJzb3IgdmlzaWJpbGl0eSBvbi9vZmYKK0NTUkhJREVfUUsgLSB0b2dnbGUgcXVpY2sgaGlkZSBvZiBjdXJzb3IKK0NTUlRSSyAtIHRvZ2dsZSBjdXJzb3IgdHJhY2tpbmcgb24vb2ZmCitDU1JTSVpFIC0gdG9nZ2xlIGN1cnNvciBzdHlsZSB1bmRlcmxpbmUvYmxvY2sKK0NTUkJMSU5LIC0gdG9nZ2xlIGN1cnNvciBibGlua2luZyBvbi9vZmYKK0FUVFJWSVMgLSB0b2dnbGUgYXR0cmlidXRlIHVuZGVybGluaW5nIG9uL29mZgorQVRUUkJMSU5LIC0gdG9nZ2xlIGF0dHJpYnV0ZSBibGlua2luZyBvbi9vZmYKK0NBUEJMSU5LIC0gdG9nZ2xlIGNhcGl0YWwgbGV0dGVyIGJsaW5raW5nIG9uL29mZgorU05EIC0gdG9nZ2xlIHNvdW5kIG9uL29mZgorSEVMUCAtIGRpc3BsYXkgZHJpdmVyIGhlbHAKK0lORk8gLSBkaXNwbGF5IHN0YXR1cyBzdW1tYXJ5CitQUkVGTUVOVSAtIHByZXNlbnQgcHJlZmVyZW5jZXMgbWVudQorUFJFRlNBVkUgLSBzYXZlIHByZWZlcmVuY2VzCitQUkVGTE9BRCAtIHJlbG9hZCBwcmVmZXJlbmNlcworU0FZIC0gc3BlYWsgY3VycmVudCBsaW5lCitTQVlBTEwgLSBzcGVhayByZXN0IG9mIHNjcmVlbgorTVVURSAtIHN0b3Agc3BlYWtpbmcgaW1tZWRpYXRlbHkKK1NQS0hPTUUgLSBnb3RvIGN1cnJlbnQvbGFzdCBzcGVlY2ggcG9zaXRpb24KK1NXSVRDSFZUX1BSRVYgLSBzd2l0Y2ggdG8gcHJldmlvdXMgdmlydHVhbCB0ZXJtaW5hbAorU1dJVENIVlRfTkVYVCAtIHN3aXRjaCB0byBuZXh0IHZpcnR1YWwgdGVybWluYWwKK1JFU1RBUlRCUkwgLSByZWluaXRpYWxpemUgYnJhaWxsZSBkcml2ZXIKK1JFU1RBUlRTUEVFQ0ggLSByZWluaXRpYWxpemUgc3BlZWNoIGRyaXZlcgorSU5QVVRNT0RFIC0gdG9nZ2xlIGlucHV0IG1vZGUKK1ZhbHVlcyB0byBiZSB1c2VkIGluIGNvbWJpbmF0aW9uIHdpdGggInJvdXRpbmciOgorbmFtZXMgbWF5IGJlIHVzZWQgd2l0aCBvciB3aXRob3V0IHRoZSBsZWFkaW5nIENSXzoKK1JPVVRFT0ZGU0VUIC0gcm91dGUgY3Vyc29yIHRvIGNoYXJhY3RlcgorQkVHQkxLT0ZGU0VUIC0gZGVmaW5lIHRoZSBiZWdpbm5pbmcgb2YgYSBibG9jaworRU5EQkxLT0ZGU0VUIC0gZGVmaW5lIHRoZSBlbmQgb2YgYSBibG9jaworU1dJVENIVlQgLSBzd2l0Y2ggdmlydHVhbCB0ZXJtaW5hbAorTlhJTkRFTlQgLSBmaW5kIG5leHQgbGluZSBub3QgbW9yZSBpbmRlbnRlZCB0aGFuIHJvdXRpbmcga2V5IGluZGljYXRlcworUFJJTkRFTlQgLSBmaW5kIHByZXZpb3VzIGxpbmUgbm90IG1vcmUgaW5kZW50ZWQgdGhhbiByb3V0aW5nIGtleSBpbmRpY2F0ZXMKK01TR0FUVFJJQiAtIG1lc3NhZ2UgYXR0cmlidXRlcyBvZiBjaGFyYWN0ZXIKK1NwZWNpYWwgY29tbWFuZHMgdG8gc2VuZCBrZXlzdHJva2VzLCAKK3RoZSBuYW1lcyBtYXkgYmUgdXNlZCB3aXRoIG9yIHdpdGhvdXQgdGhlIGxlYWRpbmcgVlBLXzoKK1JFVFVSTiAtIHNlbmQgUkVUVVJOIGtleQorVEFCIC0gc2VuZCBUQUIga2V5CitCQUNLU1BBQ0UgLSBzZW5kIEJBQ0tTUEFDRSBrZXkKK0VTQ0FQRSAtIHNlbmQgRVNDQVBFIGtleQorQ1VSU09SX0xFRlQgLSBzZW5kIENVUlNPUl9MRUZUIGtleQorQ1VSU09SX1JJR0hUIC0gc2VuZCBDVVJTT1JfUklHSFQga2V5CitDVVJTT1JfVVAgLSBzZW5kIENVUlNPUl9VUCBrZXkKK0NVUlNPUl9ET1dOIC0gc2VuZCBDVVJTT1JfRE9XTiBrZXkKK1BBR0VfVVAgLSBzZW5kIFBBR0VfVVAga2V5CitQQUdFX0RPV04gLSBzZW5kIFBBR0VfRE9XTiBrZXkKK0hPTUUgLSBzZW5kIEhPTUUga2V5CitFTkQgLSBzZW5kIEVORCBrZXkKK0lOU0VSVCAtIHNlbmQgSU5TRVJUIGtleQorREVMRVRFIC0gc2VuZCBERUxFVEUga2V5CitGVU5DVElPTiAtIHNlbmQgRlVOQ1RJT04ga2V5CmRpZmYgLS1naXQgYS9Ecml2ZXJzL0JyYWlsbGUvUGFwZW5tZWllci9icmFpbGxlLmMgYi9Ecml2ZXJzL0JyYWlsbGUvUGFwZW5tZWllci9icmFpbGxlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTY4NmE5YwotLS0gL2Rldi9udWxsCisrKyBiL0RyaXZlcnMvQnJhaWxsZS9QYXBlbm1laWVyL2JyYWlsbGUuYwpAQCAtMCwwICsxLDEzMDIgQEAKKy8qCisgKiBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorICogICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorICoKKyAqIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorICoKKyAqIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyAqLworCisvKiBUaGlzIERyaXZlciB3YXMgd3JpdHRlbiBhcyBhIHByb2plY3QgaW4gdGhlCisgKiAgIEhUTCBXMSwgQWJ0ZWlsdW5nIEVsZWt0cm90ZWNobmlrLCBXaWVuIC0g1nN0ZXJyZWljaAorICogICAoVGVjaG5pY2FsIEhpZ2ggU2Nob29sLCBEZXBhcnRtZW50IGZvciBlbGVjdHJpY2FsIGVuZ2luZWVyaW5nLAorICogICAgIFZpZW5uYSwgQXVzdHJpYSkgIGh0dHA6Ly93d3cuZWUuaHRsdzE2LmFjLmF0CisgKiAgYnkKKyAqICAgVGlib3IgQmVja2VyCisgKiAgIE1pY2hhZWwgQnVyZ2VyCisgKiAgIEhlcmJlcnQgR3J1YmVyCisgKiAgIEhlaW1vIFNjaPZuCisgKiBUZWFjaGVyOgorICogICBBdWd1c3QgSPZyYW5kbCA8YXVndXN0LmhvZXJhbmRsQGdteC5hdD4KKyAqLworLyoKKyAqIFN1cHBvcnQgZm9yIGFsbCBQYXBlbm1laWVyIFRlcm1pbmFsICsgY29uZmlnIGZpbGUKKyAqICAgSGVpbW8uU2No9m4gPGhlaW1vLnNjaG9lbkBnbXguYXQ+CisgKiAgIEF1Z3VzdCBI9nJhbmRsIDxhdWd1c3QuaG9lcmFuZGxAZ214LmF0PgorICovCisKKyNpbmNsdWRlICJwcm9sb2d1ZS5oIgorCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorCisjaW5jbHVkZSAibG9nLmgiCisjaW5jbHVkZSAiYml0ZmllbGQuaCIKKyNpbmNsdWRlICJhc3luY193YWl0LmgiCisjaW5jbHVkZSAiYXNjaWkuaCIKKyNpbmNsdWRlICJrdGIuaCIKKworI2RlZmluZSBCUkxfU1RBVFVTX0ZJRUxEUyBzZkdlbmVyaWMKKyNkZWZpbmUgQlJMX0hBVkVfU1RBVFVTX0NFTExTCisjaW5jbHVkZSAiYnJsX2RyaXZlci5oIgorI2luY2x1ZGUgImJybGRlZnMtcG0uaCIKKyNpbmNsdWRlICJtb2RlbHMuaCIKKyAKKy8qLS0tIElucHV0L091dHB1dCBPcGVyYXRpb25zIC0tLSovCisKK3R5cGVkZWYgc3RydWN0IHsKKyAgY29uc3QgdW5zaWduZWQgaW50ICpiYXVkTGlzdDsKKyAgY29uc3QgU2VyaWFsRmxvd0NvbnRyb2wgZmxvd0NvbnRyb2w7CisgIHVuc2lnbmVkIGNoYXIgcHJvdG9jb2wxOworICB1bnNpZ25lZCBjaGFyIHByb3RvY29sMjsKK30gSW5wdXRPdXRwdXRPcGVyYXRpb25zOworCisvKi0tLSBTZXJpYWwgT3BlcmF0aW9ucyAtLS0qLworCitzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IHNlcmlhbEJhdWRzW10gPSB7MTkyMDAsIDM4NDAwLCAwfTsKK3N0YXRpYyBjb25zdCBJbnB1dE91dHB1dE9wZXJhdGlvbnMgc2VyaWFsT3BlcmF0aW9ucyA9IHsKKyAgLmJhdWRMaXN0ID0gc2VyaWFsQmF1ZHMsCisgIC5mbG93Q29udHJvbCA9IFNFUklBTF9GTE9XX0hBUkRXQVJFLAorICAucHJvdG9jb2wxID0gMSwKKyAgLnByb3RvY29sMiA9IDEKK307CisKKy8qLS0tIFVTQiBPcGVyYXRpb25zIC0tLSovCisKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgdXNiQmF1ZHNbXSA9IHsxMTUyMDAsIDU3NjAwLCAwfTsKK3N0YXRpYyBjb25zdCBJbnB1dE91dHB1dE9wZXJhdGlvbnMgdXNiT3BlcmF0aW9ucyA9IHsKKyAgLmJhdWRMaXN0ID0gdXNiQmF1ZHMsCisgIC5mbG93Q29udHJvbCA9IFNFUklBTF9GTE9XX05PTkUsCisgIC5wcm90b2NvbDEgPSAwLAorICAucHJvdG9jb2wyID0gMworfTsKKworLyotLS0gQmx1ZXRvb3RoIE9wZXJhdGlvbnMgLS0tKi8KKworc3RhdGljIGNvbnN0IElucHV0T3V0cHV0T3BlcmF0aW9ucyBibHVldG9vdGhPcGVyYXRpb25zID0geworICAuYmF1ZExpc3QgPSBOVUxMLAorICAuZmxvd0NvbnRyb2wgPSBTRVJJQUxfRkxPV19OT05FLAorICAucHJvdG9jb2wxID0gMCwKKyAgLnByb3RvY29sMiA9IDMKK307CisKKy8qLS0tIFByb3RvY29sIE9wZXJhdGlvbiBVdGlsaXRpZXMgLS0tKi8KKwordHlwZWRlZiBzdHJ1Y3QgeworICB2b2lkICgqaW5pdGlhbGl6ZVRlcm1pbmFsKSAoQnJhaWxsZURpc3BsYXkgKmJybCk7CisgIHZvaWQgKCpyZWxlYXNlUmVzb3VyY2VzKSAoQnJhaWxsZURpc3BsYXkgKmJybCk7CisgIGludCAoKnJlYWRDb21tYW5kKSAoQnJhaWxsZURpc3BsYXkgKmJybCwgS2V5VGFibGVDb21tYW5kQ29udGV4dCBjb250ZXh0KTsKKyAgdm9pZCAoKndyaXRlVGV4dCkgKEJyYWlsbGVEaXNwbGF5ICpicmwsIHVuc2lnbmVkIGludCBzdGFydCwgdW5zaWduZWQgaW50IGNvdW50KTsKKyAgdm9pZCAoKndyaXRlU3RhdHVzKSAoQnJhaWxsZURpc3BsYXkgKmJybCwgdW5zaWduZWQgaW50IHN0YXJ0LCB1bnNpZ25lZCBpbnQgY291bnQpOworICB2b2lkICgqZmx1c2hDZWxscykgKEJyYWlsbGVEaXNwbGF5ICpicmwpOworICBpbnQgKCpzZXRCcmFpbGxlRmlybW5lc3MpIChCcmFpbGxlRGlzcGxheSAqYnJsLCBCcmFpbGxlRmlybW5lc3Mgc2V0dGluZyk7Cit9IFByb3RvY29sT3BlcmF0aW9uczsKKwordHlwZWRlZiBlbnVtIHsKKyAgUE1fR1NDX0RPVFMgPSAwLAorICBQTV9HU0NfRkxBRywKKyAgUE1fR1NDX05VTUJFUiwKKyAgUE1fR1NDX1BPU0lUSU9OCit9IFBNX0dlbmVyaWNTdGF0dXNGb3JtYXQ7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgdW5zaWduZWQgY2hhciBmb3JtYXQ7CisgIHVuc2lnbmVkIGNoYXIgdmFsdWU7Cit9IFBNX0dlbmVyaWNTdGF0dXNDb2RlOworCit0eXBlZGVmIHN0cnVjdCB7CisgIGludCBmaXJzdDsKKyAgaW50IGxhc3Q7Cit9IFBNX0tleVJhbmdlMTsKKwordHlwZWRlZiBzdHJ1Y3QgeworICBLZXlHcm91cCBncm91cDsKKyAgS2V5TnVtYmVyIG51bWJlcjsKK30gUE1fSW5wdXRNYXBwaW5nMjsKKworc3RydWN0IEJyYWlsbGVEYXRhU3RydWN0IHsKKyAgY29uc3QgSW5wdXRPdXRwdXRPcGVyYXRpb25zICppbzsKKyAgY29uc3QgTW9kZWxFbnRyeSAqbW9kZWw7CisgIGNvbnN0IFByb3RvY29sT3BlcmF0aW9ucyAqcHJvdG9jb2w7CisKKyAgdW5zaWduZWQgY2hhciB0ZXh0Q2VsbHNbUE1fTUFYSU1VTV9URVhUX0NFTExTXTsKKyAgdW5zaWduZWQgY2hhciBzdGF0dXNDZWxsc1tQTV9NQVhJTVVNX1NUQVRVU19DRUxMU107CisKKyAgc3RydWN0IHsKKyAgICBNYWtlTnVtYmVyRnVuY3Rpb24gKm1ha2VOdW1iZXI7CisgICAgTWFrZUZsYWdGdW5jdGlvbiAqbWFrZUZsYWc7CisKKyAgICBQTV9HZW5lcmljU3RhdHVzQ29kZSBjb2Rlc1tQTV9NQVhJTVVNX1NUQVRVU19DRUxMU107CisgICAgdW5zaWduZWQgY2hhciBpbml0aWFsaXplZDsKKyAgfSBnc2M7CisKKyAgdW5pb24geworICAgIHN0cnVjdCB7CisgICAgICBzdHJ1Y3QgeworICAgICAgICBQTV9LZXlSYW5nZTEgZnJvbnQ7CisgICAgICAgIFBNX0tleVJhbmdlMSBiYXI7CisgICAgICAgIFBNX0tleVJhbmdlMSBzd2l0Y2hlczsKKyAgICAgICAgUE1fS2V5UmFuZ2UxIHN0YXR1czsKKyAgICAgICAgUE1fS2V5UmFuZ2UxIGN1cnNvcjsKKyAgICAgICAgdW5zaWduZWQgY2hhciBzd2l0Y2hTdGF0ZTsKKyAgICAgIH0gcmN2OworCisgICAgICBzdHJ1Y3QgeworICAgICAgICB1bnNpZ25lZCBjaGFyIHRleHRPZmZzZXQ7CisgICAgICAgIHVuc2lnbmVkIGNoYXIgc3RhdHVzT2Zmc2V0OworICAgICAgfSB4bXQ7CisgICAgfSBwMTsKKworICAgIHN0cnVjdCB7CisgICAgICBQTV9JbnB1dE1hcHBpbmcyICppbnB1dE1hcDsKKyAgICAgIHVuc2lnbmVkIGNoYXIgKmlucHV0U3RhdGU7CisKKyAgICAgIGludCBpbnB1dEtleVNpemU7CisgICAgICBpbnQgaW5wdXRCeXRlczsKKyAgICAgIGludCBpbnB1dEJpdHM7CisKKyAgICAgIGludCByZWZyZXNoUmVxdWlyZWQ7CisgICAgfSBwMjsKKyAgfSBwcm90OworfTsKKworc3RhdGljIGludAord3JpdGVQYWNrZXQgKEJyYWlsbGVEaXNwbGF5ICpicmwsIGNvbnN0IHZvaWQgKnBhY2tldCwgc2l6ZV90IHNpemUpIHsKKyAgcmV0dXJuIHdyaXRlQnJhaWxsZVBhY2tldChicmwsIE5VTEwsIHBhY2tldCwgc2l6ZSk7Cit9CisKK3N0YXRpYyBpbnQKK2ludGVycHJldElkZW50aXR5IChCcmFpbGxlRGlzcGxheSAqYnJsLCB1bnNpZ25lZCBjaGFyIGlkLCBpbnQgbWFqb3IsIGludCBtaW5vcikgeworICB1bnNpZ25lZCBpbnQgbW9kZWxJbmRleDsKKworICBsb2dNZXNzYWdlKExPR19JTkZPLCAiUGFwZW5tZWllciBJRDogJWQgIFZlcnNpb246ICVkLiUwMmQiLCBpZCwgbWFqb3IsIG1pbm9yKTsKKworICBmb3IgKG1vZGVsSW5kZXg9MDsgbW9kZWxJbmRleDxtb2RlbENvdW50OyBtb2RlbEluZGV4Kz0xKSB7CisgICAgaWYgKG1vZGVsVGFibGVbbW9kZWxJbmRleF0ubW9kZWxJZGVudGlmaWVyID09IGlkKSB7CisgICAgICBicmwtPmRhdGEtPm1vZGVsID0gJm1vZGVsVGFibGVbbW9kZWxJbmRleF07CisgICAgICBsb2dNZXNzYWdlKExPR19JTkZPLCAiJXMgIFNpemU6ICVkIiwKKyAgICAgICAgICAgICAgICAgYnJsLT5kYXRhLT5tb2RlbC0+bW9kZWxOYW1lLAorICAgICAgICAgICAgICAgICBicmwtPmRhdGEtPm1vZGVsLT50ZXh0Q29sdW1ucyk7CisKKyAgICAgIGJybC0+dGV4dENvbHVtbnMgPSBicmwtPmRhdGEtPm1vZGVsLT50ZXh0Q29sdW1uczsKKyAgICAgIGJybC0+dGV4dFJvd3MgPSAxOworICAgICAgYnJsLT5zdGF0dXNSb3dzID0gKGJybC0+c3RhdHVzQ29sdW1ucyA9IGJybC0+ZGF0YS0+bW9kZWwtPnN0YXR1c0NvdW50KT8gMTogMDsKKworICAgICAgc2V0QnJhaWxsZUtleVRhYmxlKGJybCwgYnJsLT5kYXRhLT5tb2RlbC0+a2V5VGFibGVEZWZpbml0aW9uKTsKKworICAgICAgcmV0dXJuIDE7CisgICAgfQorICB9CisKKyAgbG9nTWVzc2FnZShMT0dfV0FSTklORywgInVua25vd24gUGFwZW5tZWllciBJRDogJWQiLCBpZCk7CisgIHJldHVybiAwOworfQorCisvKi0tLSBQcm90b2NvbCAxIE9wZXJhdGlvbnMgLS0tKi8KKworc3RhdGljIEJyYWlsbGVQYWNrZXRWZXJpZmllclJlc3VsdAordmVyaWZ5UGFja2V0MSAoCisgIEJyYWlsbGVEaXNwbGF5ICpicmwsCisgIHVuc2lnbmVkIGNoYXIgKmJ5dGVzLCBzaXplX3Qgc2l6ZSwKKyAgc2l6ZV90ICpsZW5ndGgsIHZvaWQgKmRhdGEKKykgeworICB1bnNpZ25lZCBjaGFyIGJ5dGUgPSBieXRlc1tzaXplLTFdOworCisgIHN3aXRjaCAoc2l6ZSkgeworICAgIGNhc2UgMToKKyAgICAgICpsZW5ndGggPSAyOworICAgICAgaWYgKGJ5dGUgIT0gQVNDSUlfU1RYKSByZXR1cm4gQlJMX1BWUl9JTlZBTElEOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIDI6CisgICAgICBzd2l0Y2ggKGJ5dGUpIHsKKyAgICAgICAgY2FzZSBQTV9QMV9QS1RfSURFTlRJVFk6CisgICAgICAgICAgKmxlbmd0aCA9IDEwOworICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgUE1fUDFfUEtUX1JFQ0VJVkU6CisgICAgICAgICAgKmxlbmd0aCA9IDY7CisgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSAwWDAzOgorICAgICAgICBjYXNlIDBYMDQ6CisgICAgICAgIGNhc2UgMFgwNToKKyAgICAgICAgY2FzZSAwWDA2OgorICAgICAgICBjYXNlIDBYMDc6CisgICAgICAgICAgKmxlbmd0aCA9IDM7CisgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICByZXR1cm4gQlJMX1BWUl9JTlZBTElEOworICAgICAgfQorICAgICAgYnJlYWs7CisKKyAgICBjYXNlIDY6CisgICAgICBzd2l0Y2ggKGJ5dGVzWzFdKSB7CisgICAgICAgIGNhc2UgUE1fUDFfUEtUX1JFQ0VJVkU6CisgICAgICAgICAgKmxlbmd0aCA9IChieXRlc1s0XSA8PCA4KSB8IGJ5dGU7CisgICAgICAgICAgaWYgKCpsZW5ndGggIT0gMTApIHJldHVybiBCUkxfUFZSX0lOVkFMSUQ7CisgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICAgIGJyZWFrOworCisgICAgZGVmYXVsdDoKKyAgICAgIGJyZWFrOworICB9CisKKyAgaWYgKHNpemUgPT0gKmxlbmd0aCkgeworICAgIGlmIChieXRlICE9IEFTQ0lJX0VUWCkgeworICAgICAgcmV0dXJuIEJSTF9QVlJfSU5WQUxJRDsKKyAgICB9CisgIH0KKworICByZXR1cm4gQlJMX1BWUl9JTkNMVURFOworfQorCitzdGF0aWMgc2l6ZV90CityZWFkUGFja2V0MSAoQnJhaWxsZURpc3BsYXkgKmJybCwgdm9pZCAqcGFja2V0LCBzaXplX3Qgc2l6ZSkgeworICByZXR1cm4gcmVhZEJyYWlsbGVQYWNrZXQoYnJsLCBOVUxMLCBwYWNrZXQsIHNpemUsIHZlcmlmeVBhY2tldDEsIE5VTEwpOworfQorCitzdGF0aWMgaW50Cit3cml0ZVBhY2tldDEgKEJyYWlsbGVEaXNwbGF5ICpicmwsIHVuc2lnbmVkIGludCB4bXRBZGRyZXNzLCB1bnNpZ25lZCBpbnQgY291bnQsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGEpIHsKKyAgaWYgKGNvdW50KSB7CisgICAgdW5zaWduZWQgY2hhciBoZWFkZXJbXSA9IHsKKyAgICAgIEFTQ0lJX1NUWCwKKyAgICAgIFBNX1AxX1BLVF9TRU5ELAorICAgICAgMCwgMCwgLyogYmlnIGVuZGlhbiBkYXRhIG9mZnNldCAqLworICAgICAgMCwgMCAgLyogYmlnIGVuZGlhbiBwYWNrZXQgbGVuZ3RoICovCisgICAgfTsKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciB0cmFpbGVyW10gPSB7QVNDSUlfRVRYfTsKKworICAgIHVuc2lnbmVkIGludCBzaXplID0gc2l6ZW9mKGhlYWRlcikgKyBjb3VudCArIHNpemVvZih0cmFpbGVyKTsKKyAgICB1bnNpZ25lZCBjaGFyIGJ1ZmZlcltzaXplXTsKKyAgICB1bnNpZ25lZCBjaGFyICpieXRlID0gYnVmZmVyOworCisgICAgaGVhZGVyWzJdID0geG10QWRkcmVzcyA+PiA4OworICAgIGhlYWRlclszXSA9IHhtdEFkZHJlc3MgJiAwWEZGOworCisgICAgaGVhZGVyWzRdID0gc2l6ZSA+PiA4OworICAgIGhlYWRlcls1XSA9IHNpemUgJiAwWEZGOworCisgICAgYnl0ZSA9IG1lbXBjcHkoYnl0ZSwgaGVhZGVyLCBzaXplb2YoaGVhZGVyKSk7CisgICAgYnl0ZSA9IG1lbXBjcHkoYnl0ZSwgZGF0YSwgY291bnQpOworICAgIGJ5dGUgPSBtZW1wY3B5KGJ5dGUsIHRyYWlsZXIsIHNpemVvZih0cmFpbGVyKSk7CisKKyAgICBpZiAoIXdyaXRlUGFja2V0KGJybCwgYnVmZmVyLCBieXRlLWJ1ZmZlcikpIHJldHVybiAwOworICB9CisgIHJldHVybiAxOworfQorCitzdGF0aWMgaW50CitpbnRlcnByZXRJZGVudGl0eTEgKEJyYWlsbGVEaXNwbGF5ICpicmwsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmlkZW50aXR5KSB7CisgIHsKKyAgICB1bnNpZ25lZCBjaGFyIGlkID0gaWRlbnRpdHlbMl07CisgICAgdW5zaWduZWQgY2hhciBtYWpvciA9IGlkZW50aXR5WzNdOworICAgIHVuc2lnbmVkIGNoYXIgbWlub3IgPSAoKGlkZW50aXR5WzRdICogMTApICsgaWRlbnRpdHlbNV0pOworICAgIGlmICghaW50ZXJwcmV0SWRlbnRpdHkoYnJsLCBpZCwgbWFqb3IsIG1pbm9yKSkgcmV0dXJuIDA7CisgIH0KKworICAvKiByb3V0aW5nIGtleSBjb2RlczogMFgzMDAgLT4gc3RhdHVzIC0+IGN1cnNvciAqLworICBicmwtPmRhdGEtPnByb3QucDEucmN2LnN0YXR1cy5maXJzdCA9IFBNX1AxX1JDVl9LRVlST1VURTsKKyAgYnJsLT5kYXRhLT5wcm90LnAxLnJjdi5zdGF0dXMubGFzdCAgPSBicmwtPmRhdGEtPnByb3QucDEucmN2LnN0YXR1cy5maXJzdCArIDMgKiAoYnJsLT5kYXRhLT5tb2RlbC0+c3RhdHVzQ291bnQgLSAxKTsKKyAgYnJsLT5kYXRhLT5wcm90LnAxLnJjdi5jdXJzb3IuZmlyc3QgPSBicmwtPmRhdGEtPnByb3QucDEucmN2LnN0YXR1cy5sYXN0ICsgMzsKKyAgYnJsLT5kYXRhLT5wcm90LnAxLnJjdi5jdXJzb3IubGFzdCAgPSBicmwtPmRhdGEtPnByb3QucDEucmN2LmN1cnNvci5maXJzdCArIDMgKiAoYnJsLT5kYXRhLT5tb2RlbC0+dGV4dENvbHVtbnMgLSAxKTsKKyAgbG9nTWVzc2FnZShMT0dfREVCVUcsICJSb3V0aW5nIEtleXM6IHN0YXR1cz0lMDNYLSUwM1ggY3Vyc29yPSUwM1gtJTAzWCIsCisgICAgICAgICAgICAgYnJsLT5kYXRhLT5wcm90LnAxLnJjdi5zdGF0dXMuZmlyc3QsIGJybC0+ZGF0YS0+cHJvdC5wMS5yY3Yuc3RhdHVzLmxhc3QsCisgICAgICAgICAgICAgYnJsLT5kYXRhLT5wcm90LnAxLnJjdi5jdXJzb3IuZmlyc3QsIGJybC0+ZGF0YS0+cHJvdC5wMS5yY3YuY3Vyc29yLmxhc3QpOworCisgIC8qIGZ1bmN0aW9uIGtleSBjb2RlczogMFgwMDAgLT4gZnJvbnQgLT4gYmFyIC0+IHN3aXRjaGVzICovCisgIGJybC0+ZGF0YS0+cHJvdC5wMS5yY3YuZnJvbnQuZmlyc3QgPSBQTV9QMV9SQ1ZfS0VZRlVOQyArIDM7CisgIGJybC0+ZGF0YS0+cHJvdC5wMS5yY3YuZnJvbnQubGFzdCAgPSBicmwtPmRhdGEtPnByb3QucDEucmN2LmZyb250LmZpcnN0ICsgMyAqIChicmwtPmRhdGEtPm1vZGVsLT5mcm9udEtleXMgLSAxKTsKKyAgYnJsLT5kYXRhLT5wcm90LnAxLnJjdi5iYXIuZmlyc3QgPSBicmwtPmRhdGEtPnByb3QucDEucmN2LmZyb250Lmxhc3QgKyAzOworICBicmwtPmRhdGEtPnByb3QucDEucmN2LmJhci5sYXN0ICA9IGJybC0+ZGF0YS0+cHJvdC5wMS5yY3YuYmFyLmZpcnN0ICsgMyAqICgoYnJsLT5kYXRhLT5tb2RlbC0+aGFzQmFyPyA4OiAwKSAtIDEpOworICBicmwtPmRhdGEtPnByb3QucDEucmN2LnN3aXRjaGVzLmZpcnN0ID0gYnJsLT5kYXRhLT5wcm90LnAxLnJjdi5iYXIubGFzdCArIDM7CisgIGJybC0+ZGF0YS0+cHJvdC5wMS5yY3Yuc3dpdGNoZXMubGFzdCAgPSBicmwtPmRhdGEtPnByb3QucDEucmN2LnN3aXRjaGVzLmZpcnN0ICsgMyAqICgoYnJsLT5kYXRhLT5tb2RlbC0+aGFzQmFyPyA4OiAwKSAtIDEpOworICBsb2dNZXNzYWdlKExPR19ERUJVRywgIkZ1bmN0aW9uIEtleXM6IGZyb250PSUwM1gtJTAzWCBiYXI9JTAzWC0lMDNYIHN3aXRjaGVzPSUwM1gtJTAzWCIsCisgICAgICAgICAgICAgYnJsLT5kYXRhLT5wcm90LnAxLnJjdi5mcm9udC5maXJzdCwgYnJsLT5kYXRhLT5wcm90LnAxLnJjdi5mcm9udC5sYXN0LAorICAgICAgICAgICAgIGJybC0+ZGF0YS0+cHJvdC5wMS5yY3YuYmFyLmZpcnN0LCBicmwtPmRhdGEtPnByb3QucDEucmN2LmJhci5sYXN0LAorICAgICAgICAgICAgIGJybC0+ZGF0YS0+cHJvdC5wMS5yY3Yuc3dpdGNoZXMuZmlyc3QsIGJybC0+ZGF0YS0+cHJvdC5wMS5yY3Yuc3dpdGNoZXMubGFzdCk7CisKKyAgLyogY2VsbCBvZmZzZXRzOiAwWDAwIC0+IHN0YXR1cyAtPiB0ZXh0ICovCisgIGJybC0+ZGF0YS0+cHJvdC5wMS54bXQuc3RhdHVzT2Zmc2V0ID0gMDsKKyAgYnJsLT5kYXRhLT5wcm90LnAxLnhtdC50ZXh0T2Zmc2V0ID0gYnJsLT5kYXRhLT5wcm90LnAxLnhtdC5zdGF0dXNPZmZzZXQgKyBicmwtPmRhdGEtPm1vZGVsLT5zdGF0dXNDb3VudDsKKyAgbG9nTWVzc2FnZShMT0dfREVCVUcsICJDZWxsIE9mZnNldHM6IHN0YXR1cz0lMDJYIHRleHQ9JTAyWCIsCisgICAgICAgICAgICAgYnJsLT5kYXRhLT5wcm90LnAxLnhtdC5zdGF0dXNPZmZzZXQsIGJybC0+ZGF0YS0+cHJvdC5wMS54bXQudGV4dE9mZnNldCk7CisKKyAgcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQKK2hhbmRsZVN3aXRjaGVzMSAoQnJhaWxsZURpc3BsYXkgKmJybCwgdWludDE2X3QgdGltZSkgeworICB1bnNpZ25lZCBjaGFyIHN0YXRlID0gdGltZSAmIDBYRkY7CisgIEtleU51bWJlciBwcmVzc1N0YWNrWzhdOworICB1bnNpZ25lZCBjaGFyIHByZXNzQ291bnQgPSAwOworICBjb25zdCBLZXlHcm91cCBncm91cCA9IFBNX0dSUF9TV1Q7CisgIEtleU51bWJlciBudW1iZXIgPSAwOworICB1bnNpZ25lZCBjaGFyIGJpdCA9IDBYMTsKKworICB3aGlsZSAoYnJsLT5kYXRhLT5wcm90LnAxLnJjdi5zd2l0Y2hTdGF0ZSAhPSBzdGF0ZSkgeworICAgIGlmICgoc3RhdGUgJiBiaXQpICYmICEoYnJsLT5kYXRhLT5wcm90LnAxLnJjdi5zd2l0Y2hTdGF0ZSAmIGJpdCkpIHsKKyAgICAgIHByZXNzU3RhY2tbcHJlc3NDb3VudCsrXSA9IG51bWJlcjsKKyAgICAgIGJybC0+ZGF0YS0+cHJvdC5wMS5yY3Yuc3dpdGNoU3RhdGUgfD0gYml0OworICAgIH0gZWxzZSBpZiAoIShzdGF0ZSAmIGJpdCkgJiYgKGJybC0+ZGF0YS0+cHJvdC5wMS5yY3Yuc3dpdGNoU3RhdGUgJiBiaXQpKSB7CisgICAgICBpZiAoIWVucXVldWVLZXlFdmVudChicmwsIGdyb3VwLCBudW1iZXIsIDApKSByZXR1cm4gMDsKKyAgICAgIGJybC0+ZGF0YS0+cHJvdC5wMS5yY3Yuc3dpdGNoU3RhdGUgJj0gfmJpdDsKKyAgICB9CisKKyAgICBudW1iZXIgKz0gMTsKKyAgICBiaXQgPDw9IDE7CisgIH0KKworICB3aGlsZSAocHJlc3NDb3VudCkgeworICAgIGlmICghZW5xdWV1ZUtleUV2ZW50KGJybCwgZ3JvdXAsIHByZXNzU3RhY2tbLS1wcmVzc0NvdW50XSwgMSkpIHsKKyAgICAgIHJldHVybiAwOworICAgIH0KKyAgfQorCisgIHJldHVybiAxOworfQorCitzdGF0aWMgaW50CitoYW5kbGVLZXkxIChCcmFpbGxlRGlzcGxheSAqYnJsLCB1aW50MTZfdCBjb2RlLCBpbnQgcHJlc3MsIHVpbnQxNl90IHRpbWUpIHsKKyAgaW50IGtleTsKKworICBpZiAoYnJsLT5kYXRhLT5wcm90LnAxLnJjdi5mcm9udC5maXJzdCA8PSBjb2RlICYmIAorICAgICAgY29kZSA8PSBicmwtPmRhdGEtPnByb3QucDEucmN2LmZyb250Lmxhc3QpIHsgLyogZnJvbnQga2V5ICovCisgICAga2V5ID0gKGNvZGUgLSBicmwtPmRhdGEtPnByb3QucDEucmN2LmZyb250LmZpcnN0KSAvIDM7CisgICAgcmV0dXJuIGVucXVldWVLZXlFdmVudChicmwsIFBNX0dSUF9GSzEsIGtleSwgcHJlc3MpOworICB9CisKKyAgaWYgKGJybC0+ZGF0YS0+cHJvdC5wMS5yY3Yuc3RhdHVzLmZpcnN0IDw9IGNvZGUgJiYgCisgICAgICBjb2RlIDw9IGJybC0+ZGF0YS0+cHJvdC5wMS5yY3Yuc3RhdHVzLmxhc3QpIHsgLyogc3RhdHVzIGtleSAqLworICAgIGtleSA9IChjb2RlIC0gYnJsLT5kYXRhLT5wcm90LnAxLnJjdi5zdGF0dXMuZmlyc3QpIC8gMzsKKyAgICByZXR1cm4gZW5xdWV1ZUtleUV2ZW50KGJybCwgUE1fR1JQX1NLMSwga2V5LCBwcmVzcyk7CisgIH0KKworICBpZiAoYnJsLT5kYXRhLT5wcm90LnAxLnJjdi5iYXIuZmlyc3QgPD0gY29kZSAmJiAKKyAgICAgIGNvZGUgPD0gYnJsLT5kYXRhLT5wcm90LnAxLnJjdi5iYXIubGFzdCkgeyAvKiBlYXN5IGFjY2VzcyBiYXIgKi8KKyAgICBpZiAoIWhhbmRsZVN3aXRjaGVzMShicmwsIHRpbWUpKSByZXR1cm4gMDsKKworICAgIGtleSA9IChjb2RlIC0gYnJsLT5kYXRhLT5wcm90LnAxLnJjdi5iYXIuZmlyc3QpIC8gMzsKKyAgICByZXR1cm4gZW5xdWV1ZUtleUV2ZW50KGJybCwgUE1fR1JQX0JBUiwga2V5LCBwcmVzcyk7CisgIH0KKworICBpZiAoYnJsLT5kYXRhLT5wcm90LnAxLnJjdi5zd2l0Y2hlcy5maXJzdCA8PSBjb2RlICYmIAorICAgICAgY29kZSA8PSBicmwtPmRhdGEtPnByb3QucDEucmN2LnN3aXRjaGVzLmxhc3QpIHsgLyogZWFzeSBhY2Nlc3MgYmFyICovCisgICAgcmV0dXJuIGhhbmRsZVN3aXRjaGVzMShicmwsIHRpbWUpOworICAvL2tleSA9IChjb2RlIC0gYnJsLT5kYXRhLT5wcm90LnAxLnJjdi5zd2l0Y2hlcy5maXJzdCkgLyAzOworICAvL3JldHVybiBlbnF1ZXVlS2V5RXZlbnQoYnJsLCBQTV9HUlBfU1dULCBrZXksIHByZXNzKTsKKyAgfQorCisgIGlmIChicmwtPmRhdGEtPnByb3QucDEucmN2LmN1cnNvci5maXJzdCA8PSBjb2RlICYmIAorICAgICAgY29kZSA8PSBicmwtPmRhdGEtPnByb3QucDEucmN2LmN1cnNvci5sYXN0KSB7IC8qIFJvdXRpbmcgS2V5cyAqLyAKKyAgICBrZXkgPSAoY29kZSAtIGJybC0+ZGF0YS0+cHJvdC5wMS5yY3YuY3Vyc29yLmZpcnN0KSAvIDM7CisgICAgcmV0dXJuIGVucXVldWVLZXlFdmVudChicmwsIFBNX0dSUF9SSzEsIGtleSwgcHJlc3MpOworICB9CisKKyAgbG9nTWVzc2FnZShMT0dfV0FSTklORywgInVuZXhwZWN0ZWQga2V5OiAlMDRYIiwgY29kZSk7CisgIHJldHVybiAxOworfQorCitzdGF0aWMgaW50CitkaXNhYmxlT3V0cHV0VHJhbnNsYXRpb24xIChCcmFpbGxlRGlzcGxheSAqYnJsLCB1bnNpZ25lZCBjaGFyIHhtdE9mZnNldCwgaW50IGNvdW50KSB7CisgIHVuc2lnbmVkIGNoYXIgYnVmZmVyW2NvdW50XTsKKyAgbWVtc2V0KGJ1ZmZlciwgMSwgc2l6ZW9mKGJ1ZmZlcikpOworICByZXR1cm4gd3JpdGVQYWNrZXQxKGJybCwgUE1fUDFfWE1UX0JSTFdSSVRFK3htdE9mZnNldCwKKyAgICAgICAgICAgICAgICAgICAgICBzaXplb2YoYnVmZmVyKSwgYnVmZmVyKTsKK30KKworc3RhdGljIHZvaWQKK2luaXRpYWxpemVUYWJsZTEgKEJyYWlsbGVEaXNwbGF5ICpicmwpIHsKKyAgZGlzYWJsZU91dHB1dFRyYW5zbGF0aW9uMShicmwsIGJybC0+ZGF0YS0+cHJvdC5wMS54bXQuc3RhdHVzT2Zmc2V0LCBicmwtPmRhdGEtPm1vZGVsLT5zdGF0dXNDb3VudCk7CisgIGRpc2FibGVPdXRwdXRUcmFuc2xhdGlvbjEoYnJsLCBicmwtPmRhdGEtPnByb3QucDEueG10LnRleHRPZmZzZXQsIGJybC0+ZGF0YS0+bW9kZWwtPnRleHRDb2x1bW5zKTsKK30KKworc3RhdGljIHZvaWQKK3dyaXRlVGV4dDEgKEJyYWlsbGVEaXNwbGF5ICpicmwsIHVuc2lnbmVkIGludCBzdGFydCwgdW5zaWduZWQgaW50IGNvdW50KSB7CisgIHVuc2lnbmVkIGNoYXIgYnVmZmVyW2NvdW50XTsKKyAgdHJhbnNsYXRlT3V0cHV0Q2VsbHMoYnVmZmVyLCBicmwtPmRhdGEtPnRleHRDZWxscytzdGFydCwgY291bnQpOworICB3cml0ZVBhY2tldDEoYnJsLCBQTV9QMV9YTVRfQlJMREFUQSticmwtPmRhdGEtPnByb3QucDEueG10LnRleHRPZmZzZXQrc3RhcnQsIGNvdW50LCBidWZmZXIpOworfQorCitzdGF0aWMgdm9pZAord3JpdGVTdGF0dXMxIChCcmFpbGxlRGlzcGxheSAqYnJsLCB1bnNpZ25lZCBpbnQgc3RhcnQsIHVuc2lnbmVkIGludCBjb3VudCkgeworICB1bnNpZ25lZCBjaGFyIGJ1ZmZlcltjb3VudF07CisgIHRyYW5zbGF0ZU91dHB1dENlbGxzKGJ1ZmZlciwgYnJsLT5kYXRhLT5zdGF0dXNDZWxscytzdGFydCwgY291bnQpOworICB3cml0ZVBhY2tldDEoYnJsLCBQTV9QMV9YTVRfQlJMREFUQSticmwtPmRhdGEtPnByb3QucDEueG10LnN0YXR1c09mZnNldCtzdGFydCwgY291bnQsIGJ1ZmZlcik7Cit9CisKK3N0YXRpYyB2b2lkCitmbHVzaENlbGxzMSAoQnJhaWxsZURpc3BsYXkgKmJybCkgeworfQorCitzdGF0aWMgdm9pZAoraW5pdGlhbGl6ZVRlcm1pbmFsMSAoQnJhaWxsZURpc3BsYXkgKmJybCkgeworICBpbml0aWFsaXplVGFibGUxKGJybCk7CisgIGRyYWluQnJhaWxsZU91dHB1dChicmwsIDApOworCisgIHdyaXRlU3RhdHVzMShicmwsIDAsIGJybC0+ZGF0YS0+bW9kZWwtPnN0YXR1c0NvdW50KTsKKyAgZHJhaW5CcmFpbGxlT3V0cHV0KGJybCwgMCk7CisKKyAgd3JpdGVUZXh0MShicmwsIDAsIGJybC0+ZGF0YS0+bW9kZWwtPnRleHRDb2x1bW5zKTsKKyAgZHJhaW5CcmFpbGxlT3V0cHV0KGJybCwgMCk7Cit9CisKK3N0YXRpYyBpbnQKK3JlYWRDb21tYW5kMSAoQnJhaWxsZURpc3BsYXkgKmJybCwgS2V5VGFibGVDb21tYW5kQ29udGV4dCBjb250ZXh0KSB7CisgIHVuc2lnbmVkIGNoYXIgcGFja2V0W1BNX1AxX01BWElNVU1fUEFDS0VUX1NJWkVdOworICBzaXplX3QgbGVuZ3RoOworCisgIHdoaWxlICgobGVuZ3RoID0gcmVhZFBhY2tldDEoYnJsLCBwYWNrZXQsIHNpemVvZihwYWNrZXQpKSkpIHsKKyAgICBzd2l0Y2ggKHBhY2tldFsxXSkgeworICAgICAgY2FzZSBQTV9QMV9QS1RfSURFTlRJVFk6CisgICAgICAgIGlmIChpbnRlcnByZXRJZGVudGl0eTEoYnJsLCBwYWNrZXQpKSBicmwtPnJlc2l6ZVJlcXVpcmVkID0gMTsKKyAgICAgICAgYXN5bmNXYWl0KDIwMCk7CisgICAgICAgIGluaXRpYWxpemVUZXJtaW5hbDEoYnJsKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGNhc2UgUE1fUDFfUEtUX1JFQ0VJVkU6CisgICAgICAgIGhhbmRsZUtleTEoYnJsLCAoKHBhY2tldFsyXSA8PCA4KSB8IHBhY2tldFszXSksCisgICAgICAgICAgICAgICAgICAgKHBhY2tldFs2XSA9PSBQTV9QMV9LRVlfUFJFU1NFRCksCisgICAgICAgICAgICAgICAgICAgKChwYWNrZXRbN10gPDwgOCkgfCBwYWNrZXRbOF0pKTsKKyAgICAgICAgY29udGludWU7CisKKyAgICAgIHsKKyAgICAgICAgY29uc3QgY2hhciAqbWVzc2FnZTsKKworICAgICAgY2FzZSAwWDAzOgorICAgICAgICBtZXNzYWdlID0gIm1pc3NpbmcgaWRlbnRpZmljYXRpb24gYnl0ZSI7CisgICAgICAgIGdvdG8gbG9nRXJyb3I7CisKKyAgICAgIGNhc2UgMFgwNDoKKyAgICAgICAgbWVzc2FnZSA9ICJkYXRhIHRvbyBsb25nIjsKKyAgICAgICAgZ290byBsb2dFcnJvcjsKKworICAgICAgY2FzZSAwWDA1OgorICAgICAgICBtZXNzYWdlID0gImRhdGEgc3RhcnRzIGJleW9uZCBlbmQgb2Ygc3RydWN0dXJlIjsKKyAgICAgICAgZ290byBsb2dFcnJvcjsKKworICAgICAgY2FzZSAwWDA2OgorICAgICAgICBtZXNzYWdlID0gImRhdGEgZXh0ZW5kcyBiZXlvbmQgZW5kIG9mIHN0cnVjdHVyZSI7CisgICAgICAgIGdvdG8gbG9nRXJyb3I7CisKKyAgICAgIGNhc2UgMFgwNzoKKyAgICAgICAgbWVzc2FnZSA9ICJkYXRhIGZyYW1pbmcgZXJyb3IiOworICAgICAgICBnb3RvIGxvZ0Vycm9yOworCisgICAgICBsb2dFcnJvcjoKKyAgICAgICAgbG9nTWVzc2FnZShMT0dfV0FSTklORywgIk91dHB1dCBwYWNrZXQgZXJyb3I6ICUwMlg6ICVzIiwgcGFja2V0WzFdLCBtZXNzYWdlKTsKKyAgICAgICAgaW5pdGlhbGl6ZVRlcm1pbmFsMShicmwpOworICAgICAgICBicmVhazsKKyAgICAgIH0KKworICAgICAgZGVmYXVsdDoKKyAgICAgICAgbG9nVW5leHBlY3RlZFBhY2tldChwYWNrZXQsIGxlbmd0aCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgfQorCisgIHJldHVybiAoZXJybm8gPT0gRUFHQUlOKT8gRU9GOiBCUkxfQ01EX1JFU1RBUlRCUkw7Cit9CisKK3N0YXRpYyB2b2lkCityZWxlYXNlUmVzb3VyY2VzMSAoQnJhaWxsZURpc3BsYXkgKmJybCkgeworfQorCitzdGF0aWMgY29uc3QgUHJvdG9jb2xPcGVyYXRpb25zIHByb3RvY29sT3BlcmF0aW9uczEgPSB7CisgIGluaXRpYWxpemVUZXJtaW5hbDEsIHJlbGVhc2VSZXNvdXJjZXMxLAorICByZWFkQ29tbWFuZDEsCisgIHdyaXRlVGV4dDEsIHdyaXRlU3RhdHVzMSwgZmx1c2hDZWxsczEsCisgIE5VTEwKK307CisKK3N0YXRpYyBpbnQKK3dyaXRlSWRlbnRpZnlSZXF1ZXN0MSAoQnJhaWxsZURpc3BsYXkgKmJybCkgeworICBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBiYWRQYWNrZXRbXSA9IHsKKyAgICBBU0NJSV9TVFgsCisgICAgUE1fUDFfUEtUX1NFTkQsCisgICAgMCwgMCwJCQkvKiBwb3NpdGlvbiAqLworICAgIDAsIDAsCQkJLyogd3JvbmcgbnVtYmVyIG9mIGJ5dGVzICovCisgICAgQVNDSUlfRVRYCisgIH07CisKKyAgcmV0dXJuIHdyaXRlUGFja2V0KGJybCwgYmFkUGFja2V0LCBzaXplb2YoYmFkUGFja2V0KSk7Cit9CisKK3N0YXRpYyBCcmFpbGxlUmVzcG9uc2VSZXN1bHQKK2lzSWRlbnRpdHlSZXNwb25zZTEgKEJyYWlsbGVEaXNwbGF5ICpicmwsIGNvbnN0IHZvaWQgKnBhY2tldCwgc2l6ZV90IHNpemUpIHsKKyAgY29uc3QgdW5zaWduZWQgY2hhciAqcGFja2V0MSA9IHBhY2tldDsKKworICByZXR1cm4gKHBhY2tldDFbMV0gPT0gUE1fUDFfUEtUX0lERU5USVRZKT8gQlJMX1JTUF9ET05FOiBCUkxfUlNQX1VORVhQRUNURUQ7Cit9CisKK3N0YXRpYyBpbnQKK2lkZW50aWZ5VGVybWluYWwxIChCcmFpbGxlRGlzcGxheSAqYnJsKSB7CisgIHVuc2lnbmVkIGNoYXIgcmVzcG9uc2VbUE1fUDFfTUFYSU1VTV9QQUNLRVRfU0laRV07CQkJLyogYW5zd2VyIGhhcyAxMCBjaGFycyAqLworICBpbnQgZGV0ZWN0ZWQgPSBwcm9iZUJyYWlsbGVEaXNwbGF5KGJybCwgMCwgTlVMTCwgMTAwMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZUlkZW50aWZ5UmVxdWVzdDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZFBhY2tldDEsIHJlc3BvbnNlLCBzaXplb2YocmVzcG9uc2UpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzSWRlbnRpdHlSZXNwb25zZTEpOworCisgIGlmIChkZXRlY3RlZCkgeworICAgIGlmIChpbnRlcnByZXRJZGVudGl0eTEoYnJsLCByZXNwb25zZSkpIHsKKyAgICAgIGJybC0+ZGF0YS0+cHJvdG9jb2wgPSAmcHJvdG9jb2xPcGVyYXRpb25zMTsKKyAgICAgIGJybC0+ZGF0YS0+cHJvdC5wMS5yY3Yuc3dpdGNoU3RhdGUgPSAwOworCisgICAgICBtYWtlT3V0cHV0VGFibGUoZG90c1RhYmxlX0lTTzExNTQ4XzEpOworICAgICAgcmV0dXJuIDE7CisgICAgfQorICB9CisKKyAgcmV0dXJuIDA7Cit9CisKKy8qLS0tIFByb3RvY29sIDIgT3BlcmF0aW9ucyAtLS0qLworCisjZGVmaW5lIFBNMl9NQVhfUEFDS0VUX1NJWkUgMFgyMDMKKyNkZWZpbmUgUE0yX01BS0VfQllURShoaWdoLCBsb3cpICgoTE9XX05JQkJMRSgoaGlnaCkpIDw8IDQpIHwgTE9XX05JQkJMRSgobG93KSkpCisjZGVmaW5lIFBNMl9NQUtFX0lOVEVHRVIyKHRlbnMsb25lcykgKChMT1dfTklCQkxFKCh0ZW5zKSkgKiAxMCkgKyBMT1dfTklCQkxFKChvbmVzKSkpCisKK3R5cGVkZWYgc3RydWN0IHsKKyAgdW5zaWduZWQgY2hhciBieXRlc1tQTTJfTUFYX1BBQ0tFVF9TSVpFXTsKKyAgdW5zaWduZWQgY2hhciB0eXBlOworICB1bnNpZ25lZCBjaGFyIGxlbmd0aDsKKworICB1bmlvbiB7CisgICAgdW5zaWduZWQgY2hhciBieXRlc1swWEZGXTsKKyAgfSBkYXRhOworfSBQYWNrZXQyOworCitzdGF0aWMgQnJhaWxsZVBhY2tldFZlcmlmaWVyUmVzdWx0Cit2ZXJpZnlQYWNrZXQyICgKKyAgQnJhaWxsZURpc3BsYXkgKmJybCwKKyAgdW5zaWduZWQgY2hhciAqYnl0ZXMsIHNpemVfdCBzaXplLAorICBzaXplX3QgKmxlbmd0aCwgdm9pZCAqZGF0YQorKSB7CisgIFBhY2tldDIgKnBhY2tldCA9IGRhdGE7CisgIHVuc2lnbmVkIGNoYXIgYnl0ZSA9IGJ5dGVzW3NpemUtMV07CisKKyAgc3dpdGNoIChieXRlKSB7CisgICAgY2FzZSBBU0NJSV9TVFg6CisgICAgICBpZiAoc2l6ZSAhPSAxKSBicmVhazsKKyAgICAgICpsZW5ndGggPSA1OworICAgICAgcmV0dXJuIEJSTF9QVlJfSU5DTFVERTsKKworICAgIGNhc2UgQVNDSUlfRVRYOgorICAgICAgaWYgKHNpemUgIT0gKmxlbmd0aCkgYnJlYWs7CisgICAgICByZXR1cm4gQlJMX1BWUl9JTkNMVURFOworCisgICAgZGVmYXVsdDogeworICAgICAgdW5zaWduZWQgY2hhciB0eXBlID0gSElHSF9OSUJCTEUoYnl0ZSk7CisgICAgICB1bnNpZ25lZCBjaGFyIHZhbHVlID0gTE9XX05JQkJMRShieXRlKTsKKyAgICAgIGludCBpc0lkZW50aXR5UGFja2V0ID0gcGFja2V0LT50eXBlID09IDBYMEE7CisKKyAgICAgIHN3aXRjaCAoc2l6ZSkgeworICAgICAgICBjYXNlIDE6CisgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSAyOgorICAgICAgICAgIGlmICh0eXBlICE9IDBYNDApIGJyZWFrOworICAgICAgICAgIHBhY2tldC0+dHlwZSA9IHZhbHVlOworICAgICAgICAgIHJldHVybiBCUkxfUFZSX0lOQ0xVREU7CisKKyAgICAgICAgY2FzZSAzOgorICAgICAgICAgIGlmICh0eXBlICE9IDBYNTApIGJyZWFrOworICAgICAgICAgIHBhY2tldC0+bGVuZ3RoID0gdmFsdWUgPDwgNDsKKyAgICAgICAgICByZXR1cm4gQlJMX1BWUl9JTkNMVURFOworCisgICAgICAgIGNhc2UgNDoKKyAgICAgICAgICBpZiAodHlwZSAhPSAwWDUwKSBicmVhazsKKyAgICAgICAgICBwYWNrZXQtPmxlbmd0aCB8PSB2YWx1ZTsKKworICAgICAgICAgIHsKKyAgICAgICAgICAgIHNpemVfdCBpbmNyZW1lbnQgPSBwYWNrZXQtPmxlbmd0aDsKKworICAgICAgICAgICAgaWYgKCFpc0lkZW50aXR5UGFja2V0KSBpbmNyZW1lbnQgKj0gMjsKKyAgICAgICAgICAgICpsZW5ndGggKz0gaW5jcmVtZW50OworCisgICAgICAgICAgICByZXR1cm4gQlJMX1BWUl9JTkNMVURFOworICAgICAgICAgIH0KKworICAgICAgICBkZWZhdWx0OiB7CisgICAgICAgICAgc2l6ZV90IGluZGV4OworCisgICAgICAgICAgaWYgKHR5cGUgIT0gMFgzMCkgYnJlYWs7CisgICAgICAgICAgaWYgKHNpemUgPT0gKmxlbmd0aCkgYnJlYWs7CisgICAgICAgICAgaW5kZXggPSBzaXplIC0gNTsKKworICAgICAgICAgIGlmIChpc0lkZW50aXR5UGFja2V0KSB7CisgICAgICAgICAgICBwYWNrZXQtPmRhdGEuYnl0ZXNbaW5kZXhdID0gYnl0ZTsKKyAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaW50IGhpZ2ggPSAhKGluZGV4ICUgMik7CisgICAgICAgICAgICBpbmRleCAvPSAyOworCisgICAgICAgICAgICBpZiAoaGlnaCkgeworICAgICAgICAgICAgICBwYWNrZXQtPmRhdGEuYnl0ZXNbaW5kZXhdID0gdmFsdWUgPDwgNDsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgIHBhY2tldC0+ZGF0YS5ieXRlc1tpbmRleF0gfD0gdmFsdWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgfQorCisgICAgICAgICAgcmV0dXJuIEJSTF9QVlJfSU5DTFVERTsKKyAgICAgICAgfQorICAgICAgfQorCisgICAgICBicmVhazsKKyAgICB9CisgIH0KKworICByZXR1cm4gQlJMX1BWUl9JTlZBTElEOworfQorCitzdGF0aWMgc2l6ZV90CityZWFkUGFja2V0MiAoQnJhaWxsZURpc3BsYXkgKmJybCwgdm9pZCAqcGFja2V0LCBzaXplX3Qgc2l6ZSkgeworICBQYWNrZXQyICpwYWNrZXQyID0gcGFja2V0OworCisgIHJldHVybiByZWFkQnJhaWxsZVBhY2tldChicmwsIE5VTEwsIHBhY2tldDItPmJ5dGVzLCBzaXplLCB2ZXJpZnlQYWNrZXQyLCBwYWNrZXQpOworfQorCitzdGF0aWMgaW50Cit3cml0ZVBhY2tldDIgKEJyYWlsbGVEaXNwbGF5ICpicmwsIHVuc2lnbmVkIGNoYXIgY29tbWFuZCwgdW5zaWduZWQgY2hhciBjb3VudCwgY29uc3QgdW5zaWduZWQgY2hhciAqZGF0YSkgeworICB1bnNpZ25lZCBjaGFyIGJ1ZmZlclsoY291bnQgKiAyKSArIDVdOworICB1bnNpZ25lZCBjaGFyICpieXRlID0gYnVmZmVyOworCisgICpieXRlKysgPSBBU0NJSV9TVFg7CisgICpieXRlKysgPSAwWDQwIHwgY29tbWFuZDsKKyAgKmJ5dGUrKyA9IDBYNTAgfCAoY291bnQgPj4gNCk7CisgICpieXRlKysgPSAwWDUwIHwgKGNvdW50ICYgMFhGKTsKKworICB3aGlsZSAoY291bnQtLSA+IDApIHsKKyAgICAqYnl0ZSsrID0gMFgzMCB8ICgqZGF0YSA+PiA0KTsKKyAgICAqYnl0ZSsrID0gMFgzMCB8ICgqZGF0YSAmIDBYRik7CisgICAgZGF0YSsrOworICB9CisKKyAgKmJ5dGUrKyA9IEFTQ0lJX0VUWDsKKyAgcmV0dXJuIHdyaXRlUGFja2V0KGJybCwgYnVmZmVyLCBieXRlLWJ1ZmZlcik7Cit9CisKK3N0YXRpYyBpbnQKK2ludGVycHJldElkZW50aXR5MiAoQnJhaWxsZURpc3BsYXkgKmJybCwgY29uc3QgdW5zaWduZWQgY2hhciAqaWRlbnRpdHkpIHsKKyAgeworICAgIHVuc2lnbmVkIGNoYXIgaWQgPSBQTTJfTUFLRV9CWVRFKGlkZW50aXR5WzBdLCBpZGVudGl0eVsxXSk7CisgICAgdW5zaWduZWQgY2hhciBtYWpvciA9IExPV19OSUJCTEUoaWRlbnRpdHlbMl0pOworICAgIHVuc2lnbmVkIGNoYXIgbWlub3IgPSBQTTJfTUFLRV9JTlRFR0VSMihpZGVudGl0eVszXSwgaWRlbnRpdHlbNF0pOworICAgIGlmICghaW50ZXJwcmV0SWRlbnRpdHkoYnJsLCBpZCwgbWFqb3IsIG1pbm9yKSkgcmV0dXJuIDA7CisgIH0KKworICByZXR1cm4gMTsKK30KKworc3RhdGljIHZvaWQKK3dyaXRlQ2VsbHMyIChCcmFpbGxlRGlzcGxheSAqYnJsLCB1bnNpZ25lZCBpbnQgc3RhcnQsIHVuc2lnbmVkIGludCBjb3VudCkgeworICBicmwtPmRhdGEtPnByb3QucDIucmVmcmVzaFJlcXVpcmVkID0gMTsKK30KKworc3RhdGljIHZvaWQKK2ZsdXNoQ2VsbHMyIChCcmFpbGxlRGlzcGxheSAqYnJsKSB7CisgIGlmIChicmwtPmRhdGEtPnByb3QucDIucmVmcmVzaFJlcXVpcmVkKSB7CisgICAgdW5zaWduZWQgY2hhciBidWZmZXJbMFhGRl07CisgICAgdW5zaWduZWQgY2hhciAqYnl0ZSA9IGJ1ZmZlcjsKKworICAgIC8qIFRoZSBzdGF0dXMgY2VsbHMuICovCisgICAgYnl0ZSA9IHRyYW5zbGF0ZU91dHB1dENlbGxzKGJ5dGUsIGJybC0+ZGF0YS0+c3RhdHVzQ2VsbHMsIGJybC0+ZGF0YS0+bW9kZWwtPnN0YXR1c0NvdW50KTsKKworICAgIC8qIFR3byBkdW1teSBjZWxscyBmb3IgZWFjaCBrZXkgb24gdGhlIGxlZnQgc2lkZS4gKi8KKyAgICBpZiAoYnJsLT5kYXRhLT5tb2RlbC0+cHJvdG9jb2xSZXZpc2lvbiA8IDIpIHsKKyAgICAgIGludCBjb3VudCA9IGJybC0+ZGF0YS0+bW9kZWwtPmxlZnRLZXlzOworICAgICAgd2hpbGUgKGNvdW50LS0gPiAwKSB7CisgICAgICAgICpieXRlKysgPSAwOworICAgICAgICAqYnl0ZSsrID0gMDsKKyAgICAgIH0KKyAgICB9CisKKyAgICAvKiBUaGUgdGV4dCBjZWxscy4gKi8KKyAgICBieXRlID0gdHJhbnNsYXRlT3V0cHV0Q2VsbHMoYnl0ZSwgYnJsLT5kYXRhLT50ZXh0Q2VsbHMsIGJybC0+ZGF0YS0+bW9kZWwtPnRleHRDb2x1bW5zKTsKKworICAgIC8qIFR3byBkdW1teSBjZWxscyBmb3IgZWFjaCBrZXkgb24gdGhlIHJpZ2h0IHNpZGUuICovCisgICAgaWYgKGJybC0+ZGF0YS0+bW9kZWwtPnByb3RvY29sUmV2aXNpb24gPCAyKSB7CisgICAgICBpbnQgY291bnQgPSBicmwtPmRhdGEtPm1vZGVsLT5yaWdodEtleXM7CisgICAgICB3aGlsZSAoY291bnQtLSA+IDApIHsKKyAgICAgICAgKmJ5dGUrKyA9IDA7CisgICAgICAgICpieXRlKysgPSAwOworICAgICAgfQorICAgIH0KKworICAgIHdyaXRlUGFja2V0MihicmwsIDMsIGJ5dGUtYnVmZmVyLCBidWZmZXIpOworICAgIGJybC0+ZGF0YS0+cHJvdC5wMi5yZWZyZXNoUmVxdWlyZWQgPSAwOworICB9Cit9CisKK3N0YXRpYyB2b2lkCitpbml0aWFsaXplVGVybWluYWwyIChCcmFpbGxlRGlzcGxheSAqYnJsKSB7CisgIG1lbXNldChicmwtPmRhdGEtPnByb3QucDIuaW5wdXRTdGF0ZSwgMCwgYnJsLT5kYXRhLT5wcm90LnAyLmlucHV0Qnl0ZXMpOworICBicmwtPmRhdGEtPnByb3QucDIucmVmcmVzaFJlcXVpcmVkID0gMTsKKworICAvKiBEb24ndCBzZW5kIHRoZSBpbml0IHBhY2tldCBieSBkZWZhdWx0IGFzIHRoYXQgd2FzIGRvbmUgYXQgdGhlIGZhY3RvcnkKKyAgICogYW5kIHNob3VsZG4ndCBuZWVkIHRvIGJlIGRvbmUgYWdhaW4uIFdlJ2xsIGtlZXAgdGhlIGNvZGUsIHRob3VnaCwKKyAgICoganVzdCBpbiBjYXNlIGl0J3MgZXZlciBuZWVkZWQuIFBlcmhhcHMgdGhlcmUgc2hvdWxkIGJlIGEgZHJpdmVyCisgICAqIHBhcmFtZXRlciB0byBjb250cm9sIGl0LgorICAgKi8KKyAgaWYgKDApIHsKKyAgICB1bnNpZ25lZCBjaGFyIGRhdGFbMTNdOworICAgIHVuc2lnbmVkIGNoYXIgc2l6ZSA9IDA7CisKKyAgICBkYXRhW3NpemUrK10gPSBicmwtPmRhdGEtPm1vZGVsLT5tb2RlbElkZW50aWZpZXI7IC8qIGRldmljZSBpZGVudGlmaWNhdGlvbiBjb2RlICovCisKKyAgICAvKiBzZXJpYWwgYmF1ZCAoYmNkLWVuY29kZWQsIHNpeCBkaWdpdHMsIG9uZSBwZXIgbmliYmxlKSAqLworICAgIC8qIHNldCB0byB6ZXJvIGZvciBkZWZhdWx0ICg1Nyw2MDApICovCisgICAgZGF0YVtzaXplKytdID0gMDsKKyAgICBkYXRhW3NpemUrK10gPSAwOworICAgIGRhdGFbc2l6ZSsrXSA9IDA7CisKKyAgICBkYXRhW3NpemUrK10gPSBicmwtPmRhdGEtPm1vZGVsLT5zdGF0dXNDb3VudDsgLyogbnVtYmVyIG9mIHZlcnRpY2FsIGJyYWlsbGUgY2VsbHMgKi8KKyAgICBkYXRhW3NpemUrK10gPSBicmwtPmRhdGEtPm1vZGVsLT5sZWZ0S2V5czsgLyogbnVtYmVyIG9mIGxlZnQga2V5cyBhbmQgc3dpdGNoZXMgKi8KKyAgICBkYXRhW3NpemUrK10gPSBicmwtPmRhdGEtPm1vZGVsLT50ZXh0Q29sdW1uczsgLyogbnVtYmVyIG9mIGhvcml6b250YWwgYnJhaWxsZSBjZWxscyAqLworICAgIGRhdGFbc2l6ZSsrXSA9IGJybC0+ZGF0YS0+bW9kZWwtPnJpZ2h0S2V5czsgLyogbnVtYmVyIG9mIHJpZ2h0IGtleXMgYW5kIHN3aXRjaGVzICovCisKKyAgICBkYXRhW3NpemUrK10gPSAyOyAvKiBudW1iZXIgb2Ygcm91dGluZyBrZXlzIHBlciBicmFpbGxlIGNlbGwgKi8KKyAgICBkYXRhW3NpemUrK10gPSAwOyAvKiBzaXplIG9mIExDRCAqLworCisgICAgZGF0YVtzaXplKytdID0gMTsgLyoga2V5cyBhbmQgc3dpdGNoZXMgbWl4ZWQgaW50byBicmFpbGxlIGRhdGEgc3RyZWFtICovCisgICAgZGF0YVtzaXplKytdID0gMDsgLyogZWFzeSBhY2Nlc3MgYmFyIG1peGVkIGludG8gYnJhaWxsZSBkYXRhIHN0cmVhbSAqLworICAgIGRhdGFbc2l6ZSsrXSA9IDE7IC8qIHJvdXRpbmcga2V5cyBtaXhlZCBpbnRvIGJyYWlsbGUgZGF0YSBzdHJlYW0gKi8KKworICAgIGxvZ0J5dGVzKExPR19ERUJVRywgIkluaXQgUGFja2V0IiwgZGF0YSwgc2l6ZSk7CisgICAgd3JpdGVQYWNrZXQyKGJybCwgMSwgc2l6ZSwgZGF0YSk7CisgIH0KK30KKworc3RhdGljIGludCAKK3JlYWRDb21tYW5kMiAoQnJhaWxsZURpc3BsYXkgKmJybCwgS2V5VGFibGVDb21tYW5kQ29udGV4dCBjb250ZXh0KSB7CisgIFBhY2tldDIgcGFja2V0OworCisgIHdoaWxlIChyZWFkUGFja2V0MihicmwsICZwYWNrZXQsIFBNMl9NQVhfUEFDS0VUX1NJWkUpKSB7CisgICAgc3dpdGNoIChwYWNrZXQudHlwZSkgeworICAgICAgZGVmYXVsdDoKKyAgICAgICAgbG9nTWVzc2FnZShMT0dfREVCVUcsICJQYWNrZXQgaWdub3JlZDogJTAyWCIsIHBhY2tldC50eXBlKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGNhc2UgMFgwQjogeworICAgICAgICBpbnQgYnl0ZXMgPSBNSU4ocGFja2V0Lmxlbmd0aCwgYnJsLT5kYXRhLT5wcm90LnAyLmlucHV0Qnl0ZXMpOworICAgICAgICBpbnQgYnl0ZTsKKworICAgICAgICAvKiBGaW5kIG91dCB3aGljaCBrZXlzIGhhdmUgYmVlbiByZWxlYXNlZC4gKi8KKyAgICAgICAgZm9yIChieXRlPTA7IGJ5dGU8Ynl0ZXM7IGJ5dGUrPTEpIHsKKyAgICAgICAgICB1bnNpZ25lZCBjaGFyIG9sZCA9IGJybC0+ZGF0YS0+cHJvdC5wMi5pbnB1dFN0YXRlW2J5dGVdOworICAgICAgICAgIHVuc2lnbmVkIGNoYXIgbmV3ID0gcGFja2V0LmRhdGEuYnl0ZXNbYnl0ZV07CisKKyAgICAgICAgICBpZiAobmV3ICE9IG9sZCkgeworICAgICAgICAgICAgUE1fSW5wdXRNYXBwaW5nMiAqbWFwcGluZyA9ICZicmwtPmRhdGEtPnByb3QucDIuaW5wdXRNYXBbYnl0ZSAqIDhdOworICAgICAgICAgICAgdW5zaWduZWQgY2hhciBiaXQgPSAwWDAxOworCisgICAgICAgICAgICB3aGlsZSAoYml0KSB7CisgICAgICAgICAgICAgIGlmICghKG5ldyAmIGJpdCkgJiYgKG9sZCAmIGJpdCkpIHsKKyAgICAgICAgICAgICAgICBlbnF1ZXVlS2V5RXZlbnQoYnJsLCBtYXBwaW5nLT5ncm91cCwgbWFwcGluZy0+bnVtYmVyLCAwKTsKKyAgICAgICAgICAgICAgICBpZiAoKGJybC0+ZGF0YS0+cHJvdC5wMi5pbnB1dFN0YXRlW2J5dGVdICY9IH5iaXQpID09IG5ldykgYnJlYWs7CisgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICBtYXBwaW5nICs9IDE7CisgICAgICAgICAgICAgIGJpdCA8PD0gMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvKiBGaW5kIG91dCB3aGljaCBrZXlzIGhhdmUgYmVlbiBwcmVzc2VkLiAqLworICAgICAgICBmb3IgKGJ5dGU9MDsgYnl0ZTxieXRlczsgYnl0ZSs9MSkgeworICAgICAgICAgIHVuc2lnbmVkIGNoYXIgb2xkID0gYnJsLT5kYXRhLT5wcm90LnAyLmlucHV0U3RhdGVbYnl0ZV07CisgICAgICAgICAgdW5zaWduZWQgY2hhciBuZXcgPSBwYWNrZXQuZGF0YS5ieXRlc1tieXRlXTsKKworICAgICAgICAgIGlmIChuZXcgIT0gb2xkKSB7CisgICAgICAgICAgICBQTV9JbnB1dE1hcHBpbmcyICptYXBwaW5nID0gJmJybC0+ZGF0YS0+cHJvdC5wMi5pbnB1dE1hcFtieXRlICogOF07CisgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIGJpdCA9IDBYMDE7CisKKyAgICAgICAgICAgIHdoaWxlIChiaXQpIHsKKyAgICAgICAgICAgICAgaWYgKChuZXcgJiBiaXQpICYmICEob2xkICYgYml0KSkgeworICAgICAgICAgICAgICAgIGVucXVldWVLZXlFdmVudChicmwsIG1hcHBpbmctPmdyb3VwLCBtYXBwaW5nLT5udW1iZXIsIDEpOworICAgICAgICAgICAgICAgIGlmICgoYnJsLT5kYXRhLT5wcm90LnAyLmlucHV0U3RhdGVbYnl0ZV0gfD0gYml0KSA9PSBuZXcpIGJyZWFrOworICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgbWFwcGluZyArPSAxOworICAgICAgICAgICAgICBiaXQgPDw9IDE7CisgICAgICAgICAgICB9CisgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgY29udGludWU7CisgICAgICB9CisKKyAgICAgIGNhc2UgMFgwQzogeworICAgICAgICB1bnNpZ25lZCBjaGFyIG1vZGlmaWVycyA9IHBhY2tldC5kYXRhLmJ5dGVzWzBdOworICAgICAgICB1bnNpZ25lZCBjaGFyIGNvZGUgPSBwYWNrZXQuZGF0YS5ieXRlc1sxXTsKKworICAgICAgICBpZiAobW9kaWZpZXJzICYgMFg4MCkgeworICAgICAgICAgIGludCBjb21tYW5kID0gQlJMX0NNRF9CTEsoUEFTU1hUKSB8IGNvZGU7CisKKyAgICAgICAgICBpZiAobW9kaWZpZXJzICYgMFgwMSkgY29tbWFuZCB8PSBCUkxfRkxHX0tCRF9SRUxFQVNFOworICAgICAgICAgIGlmIChtb2RpZmllcnMgJiAwWDAyKSBjb21tYW5kIHw9IEJSTF9GTEdfS0JEX0VNVUwwOworICAgICAgICAgIGlmIChtb2RpZmllcnMgJiAwWDA0KSBjb21tYW5kIHw9IEJSTF9GTEdfS0JEX0VNVUwxOworCisgICAgICAgICAgZW5xdWV1ZUNvbW1hbmQoY29tbWFuZCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgS2V5TnVtYmVyU2V0IGtleXMgPSAobW9kaWZpZXJzIDw8IDgpIHwgY29kZTsKKworI2RlZmluZSBCSVQoa2V5KSAoMSA8PCAoa2V5KSkKKyAgICAgICAgICBpZiAoa2V5cyAmIChCSVQoUE1fS0JEX0xlZnRTcGFjZSkgfCBCSVQoUE1fS0JEX1JpZ2h0U3BhY2UpKSkgeworICAgICAgICAgICAga2V5cyAmPSB+QklUKFBNX0tCRF9TcGFjZSk7CisgICAgICAgICAgfQorI3VuZGVmIEJJVAorCisgICAgICAgICAgZW5xdWV1ZUtleXMoYnJsLCBrZXlzLCBQTV9HUlBfS0JELCAwKTsKKyAgICAgICAgfQorCisgICAgICAgIGNvbnRpbnVlOworICAgICAgfQorICAgIH0KKyAgfQorCisgIGlmIChlcnJubyAhPSBFQUdBSU4pIHJldHVybiBCUkxfQ01EX1JFU1RBUlRCUkw7CisgIHJldHVybiBFT0Y7Cit9CisKK3N0YXRpYyB2b2lkCityZWxlYXNlUmVzb3VyY2VzMiAoQnJhaWxsZURpc3BsYXkgKmJybCkgeworICBpZiAoYnJsLT5kYXRhLT5wcm90LnAyLmlucHV0U3RhdGUpIHsKKyAgICBmcmVlKGJybC0+ZGF0YS0+cHJvdC5wMi5pbnB1dFN0YXRlKTsKKyAgICBicmwtPmRhdGEtPnByb3QucDIuaW5wdXRTdGF0ZSA9IE5VTEw7CisgIH0KKworICBpZiAoYnJsLT5kYXRhLT5wcm90LnAyLmlucHV0TWFwKSB7CisgICAgZnJlZShicmwtPmRhdGEtPnByb3QucDIuaW5wdXRNYXApOworICAgIGJybC0+ZGF0YS0+cHJvdC5wMi5pbnB1dE1hcCA9IE5VTEw7CisgIH0KK30KKworc3RhdGljIGludAorc2V0QnJhaWxsZUZpcm1uZXNzMiAoQnJhaWxsZURpc3BsYXkgKmJybCwgQnJhaWxsZUZpcm1uZXNzIHNldHRpbmcpIHsKKyAgdW5zaWduZWQgY2hhciBkYXRhW10gPSB7KHNldHRpbmcgKiA5OCAvIEJSTF9GSVJNTkVTU19NQVhJTVVNKSArIDIsIDBYOTl9OworICByZXR1cm4gd3JpdGVQYWNrZXQyKGJybCwgNiwgc2l6ZW9mKGRhdGEpLCBkYXRhKTsKK30KKworc3RhdGljIGNvbnN0IFByb3RvY29sT3BlcmF0aW9ucyBwcm90b2NvbE9wZXJhdGlvbnMyID0geworICBpbml0aWFsaXplVGVybWluYWwyLCByZWxlYXNlUmVzb3VyY2VzMiwKKyAgcmVhZENvbW1hbmQyLAorICB3cml0ZUNlbGxzMiwgd3JpdGVDZWxsczIsIGZsdXNoQ2VsbHMyLAorICBzZXRCcmFpbGxlRmlybW5lc3MyCit9OworCit0eXBlZGVmIHN0cnVjdCB7CisgIHVuc2lnbmVkIGNoYXIgYnl0ZTsKKyAgdW5zaWduZWQgY2hhciBiaXQ7CisgIHVuc2lnbmVkIGNoYXIgc2l6ZTsKK30gSW5wdXRNb2R1bGUyOworCitzdGF0aWMgdm9pZAorYWRkSW5wdXRNYXBwaW5nMiAoQnJhaWxsZURpc3BsYXkgKmJybCwgY29uc3QgSW5wdXRNb2R1bGUyICptb2R1bGUsIHVuc2lnbmVkIGNoYXIgYml0LCBLZXlHcm91cCBncm91cCwgS2V5TnVtYmVyIG51bWJlcikgeworICBpZiAoYnJsLT5kYXRhLT5tb2RlbC0+cHJvdG9jb2xSZXZpc2lvbiA8IDIpIHsKKyAgICBiaXQgKz0gbW9kdWxlLT5iaXQ7CisgIH0gZWxzZSB7CisgICAgYml0ICs9IDggLSBtb2R1bGUtPmJpdCAtIG1vZHVsZS0+c2l6ZTsKKyAgfQorCisgIHsKKyAgICBQTV9JbnB1dE1hcHBpbmcyICptYXBwaW5nID0gJmJybC0+ZGF0YS0+cHJvdC5wMi5pbnB1dE1hcFsobW9kdWxlLT5ieXRlICogOCkgKyBiaXRdOworICAgIG1hcHBpbmctPmdyb3VwID0gZ3JvdXA7CisgICAgbWFwcGluZy0+bnVtYmVyID0gbnVtYmVyOworICB9Cit9CisKK3N0YXRpYyBpbnQKK25leHRJbnB1dE1vZHVsZTIgKElucHV0TW9kdWxlMiAqbW9kdWxlLCB1bnNpZ25lZCBjaGFyIHNpemUpIHsKKyAgaWYgKCFtb2R1bGUtPmJpdCkgeworICAgIGlmICghbW9kdWxlLT5ieXRlKSByZXR1cm4gMDsKKyAgICBtb2R1bGUtPmJ5dGUgLT0gMTsKKyAgICBtb2R1bGUtPmJpdCA9IDg7CisgIH0KKyAgbW9kdWxlLT5iaXQgLT0gbW9kdWxlLT5zaXplID0gc2l6ZTsKKyAgcmV0dXJuIDE7Cit9CisKK3N0YXRpYyB2b2lkCittYXBJbnB1dEtleTIgKEJyYWlsbGVEaXNwbGF5ICpicmwsIGludCBjb3VudCwgSW5wdXRNb2R1bGUyICptb2R1bGUsIEtleUdyb3VwIGdyb3VwLCBLZXlOdW1iZXIgcmVhciwgS2V5TnVtYmVyIGZyb250KSB7CisgIHdoaWxlIChjb3VudC0tKSB7CisgICAgbmV4dElucHV0TW9kdWxlMihtb2R1bGUsIGJybC0+ZGF0YS0+cHJvdC5wMi5pbnB1dEtleVNpemUpOworICAgIGFkZElucHV0TWFwcGluZzIoYnJsLCBtb2R1bGUsIDAsIGdyb3VwLCByZWFyKTsKKyAgICBhZGRJbnB1dE1hcHBpbmcyKGJybCwgbW9kdWxlLCAxLCBncm91cCwgZnJvbnQpOworICB9Cit9CisKK3N0YXRpYyB2b2lkCittYXBJbnB1dE1vZHVsZXMyIChCcmFpbGxlRGlzcGxheSAqYnJsKSB7CisgIElucHV0TW9kdWxlMiBtb2R1bGU7CisgIG1vZHVsZS5ieXRlID0gYnJsLT5kYXRhLT5wcm90LnAyLmlucHV0Qnl0ZXM7CisgIG1vZHVsZS5iaXQgPSAwOworCisgIHsKKyAgICBpbnQgaTsKKyAgICBmb3IgKGk9MDsgaTxicmwtPmRhdGEtPnByb3QucDIuaW5wdXRCaXRzOyArK2kpIHsKKyAgICAgIFBNX0lucHV0TWFwcGluZzIgKm1hcHBpbmcgPSAmYnJsLT5kYXRhLT5wcm90LnAyLmlucHV0TWFwW2ldOworICAgICAgbWFwcGluZy0+Z3JvdXAgPSAwOworICAgICAgbWFwcGluZy0+bnVtYmVyID0gMDsKKyAgICB9CisgIH0KKworICBtYXBJbnB1dEtleTIoYnJsLCBicmwtPmRhdGEtPm1vZGVsLT5yaWdodEtleXMsICZtb2R1bGUsIFBNX0dSUF9TV1QsIFBNX1NXVF9SaWdodEtleVJlYXIsIFBNX1NXVF9SaWdodEtleUZyb250KTsKKworICB7CisgICAgdW5zaWduZWQgY2hhciBjb2x1bW4gPSBicmwtPmRhdGEtPm1vZGVsLT50ZXh0Q29sdW1uczsKKyAgICB3aGlsZSAoY29sdW1uKSB7CisgICAgICBuZXh0SW5wdXRNb2R1bGUyKCZtb2R1bGUsIDEpOworICAgICAgYWRkSW5wdXRNYXBwaW5nMihicmwsICZtb2R1bGUsIDAsIFBNX0dSUF9SSzIsIC0tY29sdW1uKTsKKworICAgICAgbmV4dElucHV0TW9kdWxlMigmbW9kdWxlLCAxKTsKKyAgICAgIGFkZElucHV0TWFwcGluZzIoYnJsLCAmbW9kdWxlLCAwLCBQTV9HUlBfUksxLCBjb2x1bW4pOworICAgIH0KKyAgfQorCisgIG1hcElucHV0S2V5MihicmwsIGJybC0+ZGF0YS0+bW9kZWwtPmxlZnRLZXlzLCAmbW9kdWxlLCBQTV9HUlBfU1dULCBQTV9TV1RfTGVmdEtleVJlYXIsIFBNX1NXVF9MZWZ0S2V5RnJvbnQpOworCisgIHsKKyAgICB1bnNpZ25lZCBjaGFyIGNlbGwgPSBicmwtPmRhdGEtPm1vZGVsLT5zdGF0dXNDb3VudDsKKyAgICB3aGlsZSAoY2VsbCkgeworICAgICAgbmV4dElucHV0TW9kdWxlMigmbW9kdWxlLCAxKTsKKyAgICAgIGFkZElucHV0TWFwcGluZzIoYnJsLCAmbW9kdWxlLCAwLCBQTV9HUlBfU0syLCBjZWxsLTEpOworCisgICAgICBuZXh0SW5wdXRNb2R1bGUyKCZtb2R1bGUsIDEpOworICAgICAgYWRkSW5wdXRNYXBwaW5nMihicmwsICZtb2R1bGUsIDAsIFBNX0dSUF9TSzEsIGNlbGwtLSk7CisgICAgfQorICB9CisKKyAgbW9kdWxlLmJpdCA9IDA7CisgIG5leHRJbnB1dE1vZHVsZTIoJm1vZHVsZSwgOCk7CisgIGFkZElucHV0TWFwcGluZzIoYnJsLCAmbW9kdWxlLCAwLCBQTV9HUlBfQkFSLCBQTV9CQVJfVXAyKTsKKyAgYWRkSW5wdXRNYXBwaW5nMihicmwsICZtb2R1bGUsIDEsIFBNX0dSUF9CQVIsIFBNX0JBUl9VcDEpOworICBhZGRJbnB1dE1hcHBpbmcyKGJybCwgJm1vZHVsZSwgMiwgUE1fR1JQX0JBUiwgUE1fQkFSX0Rvd24xKTsKKyAgYWRkSW5wdXRNYXBwaW5nMihicmwsICZtb2R1bGUsIDMsIFBNX0dSUF9CQVIsIFBNX0JBUl9Eb3duMik7CisgIGFkZElucHV0TWFwcGluZzIoYnJsLCAmbW9kdWxlLCA0LCBQTV9HUlBfQkFSLCBQTV9CQVJfUmlnaHQxKTsKKyAgYWRkSW5wdXRNYXBwaW5nMihicmwsICZtb2R1bGUsIDUsIFBNX0dSUF9CQVIsIFBNX0JBUl9MZWZ0MSk7CisgIGFkZElucHV0TWFwcGluZzIoYnJsLCAmbW9kdWxlLCA2LCBQTV9HUlBfQkFSLCBQTV9CQVJfUmlnaHQyKTsKKyAgYWRkSW5wdXRNYXBwaW5nMihicmwsICZtb2R1bGUsIDcsIFBNX0dSUF9CQVIsIFBNX0JBUl9MZWZ0Mik7Cit9CisKK3N0YXRpYyBpbnQKK3dyaXRlSWRlbnRpZnlSZXF1ZXN0MiAoQnJhaWxsZURpc3BsYXkgKmJybCkgeworICByZXR1cm4gd3JpdGVQYWNrZXQyKGJybCwgMiwgMCwgTlVMTCk7Cit9CisKK3N0YXRpYyBCcmFpbGxlUmVzcG9uc2VSZXN1bHQKK2lzSWRlbnRpdHlSZXNwb25zZTIgKEJyYWlsbGVEaXNwbGF5ICpicmwsIGNvbnN0IHZvaWQgKnBhY2tldCwgc2l6ZV90IHNpemUpIHsKKyAgY29uc3QgUGFja2V0MiAqcGFja2V0MiA9IHBhY2tldDsKKworICBpZiAocGFja2V0Mi0+dHlwZSA9PSAwWDBBKSByZXR1cm4gQlJMX1JTUF9ET05FOworICBsb2dVbmV4cGVjdGVkUGFja2V0KHBhY2tldDItPmJ5dGVzLCBzaXplKTsKKyAgcmV0dXJuIEJSTF9SU1BfQ09OVElOVUU7Cit9CisKK3N0YXRpYyBpbnQKK2lkZW50aWZ5VGVybWluYWwyIChCcmFpbGxlRGlzcGxheSAqYnJsKSB7CisgIFBhY2tldDIgcGFja2V0OwkJCS8qIGFuc3dlciBoYXMgMTAgY2hhcnMgKi8KKyAgaW50IGRldGVjdGVkID0gcHJvYmVCcmFpbGxlRGlzcGxheShicmwsIGJybC0+ZGF0YS0+aW8tPnByb3RvY29sMi0xLCBOVUxMLCAxMDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVJZGVudGlmeVJlcXVlc3QyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRQYWNrZXQyLCAmcGFja2V0LCBQTTJfTUFYX1BBQ0tFVF9TSVpFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzSWRlbnRpdHlSZXNwb25zZTIpOworCisgIGlmIChkZXRlY3RlZCkgeworICAgIGlmIChpbnRlcnByZXRJZGVudGl0eTIoYnJsLCBwYWNrZXQuZGF0YS5ieXRlcykpIHsKKyAgICAgIGJybC0+ZGF0YS0+cHJvdG9jb2wgPSAmcHJvdG9jb2xPcGVyYXRpb25zMjsKKworICAgICAgTUFLRV9PVVRQVVRfVEFCTEUoMFg4MCwgMFg0MCwgMFgyMCwgMFgxMCwgMFgwOCwgMFgwNCwgMFgwMiwgMFgwMSk7CisKKyAgICAgIGJybC0+ZGF0YS0+cHJvdC5wMi5pbnB1dEtleVNpemUgPSAoYnJsLT5kYXRhLT5tb2RlbC0+cHJvdG9jb2xSZXZpc2lvbiA8IDIpPyA0OiA4OworICAgICAgeworICAgICAgICBpbnQga2V5Q291bnQgPSBicmwtPmRhdGEtPm1vZGVsLT5sZWZ0S2V5cyArIGJybC0+ZGF0YS0+bW9kZWwtPnJpZ2h0S2V5czsKKworICAgICAgICBicmwtPmRhdGEtPnByb3QucDIuaW5wdXRCeXRlcyA9IGtleUNvdW50ICsgMSArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoKGtleUNvdW50ICogYnJsLT5kYXRhLT5wcm90LnAyLmlucHV0S2V5U2l6ZSkgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoYnJsLT5kYXRhLT5tb2RlbC0+dGV4dENvbHVtbnMgKyBicmwtPmRhdGEtPm1vZGVsLT5zdGF0dXNDb3VudCkgKiAyKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSArIDcpIC8gOCk7CisgICAgICB9CisgICAgICBicmwtPmRhdGEtPnByb3QucDIuaW5wdXRCaXRzID0gYnJsLT5kYXRhLT5wcm90LnAyLmlucHV0Qnl0ZXMgKiA4OworCisgICAgICBpZiAoKGJybC0+ZGF0YS0+cHJvdC5wMi5pbnB1dE1hcCA9IG1hbGxvYyhicmwtPmRhdGEtPnByb3QucDIuaW5wdXRCaXRzICogc2l6ZW9mKCpicmwtPmRhdGEtPnByb3QucDIuaW5wdXRNYXApKSkpIHsKKyAgICAgICAgbWFwSW5wdXRNb2R1bGVzMihicmwpOworCisgICAgICAgIGlmICgoYnJsLT5kYXRhLT5wcm90LnAyLmlucHV0U3RhdGUgPSBtYWxsb2MoYnJsLT5kYXRhLT5wcm90LnAyLmlucHV0Qnl0ZXMpKSkgeworICAgICAgICAgIHJldHVybiAxOworICAgICAgICB9CisKKyAgICAgICAgZnJlZShicmwtPmRhdGEtPnByb3QucDIuaW5wdXRNYXApOworICAgICAgICBicmwtPmRhdGEtPnByb3QucDIuaW5wdXRNYXAgPSBOVUxMOworICAgICAgfQorICAgIH0KKyAgfQorCisgIHJldHVybiAwOworfQorCisvKi0tLSBEcml2ZXIgT3BlcmF0aW9ucyAtLS0qLworCitzdGF0aWMgaW50CitpZGVudGlmeVRlcm1pbmFsIChCcmFpbGxlRGlzcGxheSAqYnJsKSB7CisgIGlmIChicmwtPmRhdGEtPmlvLT5wcm90b2NvbDEgJiYgaWRlbnRpZnlUZXJtaW5hbDEoYnJsKSkgcmV0dXJuIDE7CisgIGlmIChicmwtPmRhdGEtPmlvLT5wcm90b2NvbDIgJiYgaWRlbnRpZnlUZXJtaW5hbDIoYnJsKSkgcmV0dXJuIDE7CisgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50CitzdGFydFRlcm1pbmFsIChCcmFpbGxlRGlzcGxheSAqYnJsKSB7CisgIGlmIChnaW9EaXNjYXJkSW5wdXQoYnJsLT5naW9FbmRwb2ludCkpIHsKKyAgICBpZiAoaWRlbnRpZnlUZXJtaW5hbChicmwpKSB7CisgICAgICBicmwtPnNldEJyYWlsbGVGaXJtbmVzcyA9IGJybC0+ZGF0YS0+cHJvdG9jb2wtPnNldEJyYWlsbGVGaXJtbmVzczsKKworICAgICAgbWVtc2V0KGJybC0+ZGF0YS0+dGV4dENlbGxzLCAwLCBicmwtPmRhdGEtPm1vZGVsLT50ZXh0Q29sdW1ucyk7CisgICAgICBtZW1zZXQoYnJsLT5kYXRhLT5zdGF0dXNDZWxscywgMCwgYnJsLT5kYXRhLT5tb2RlbC0+c3RhdHVzQ291bnQpOworCisgICAgICBicmwtPmRhdGEtPnByb3RvY29sLT5pbml0aWFsaXplVGVybWluYWwoYnJsKTsKKyAgICAgIHJldHVybiAxOworICAgIH0KKyAgfQorCisgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50Citjb25uZWN0UmVzb3VyY2UgKEJyYWlsbGVEaXNwbGF5ICpicmwsIGNvbnN0IGNoYXIgKmlkZW50aWZpZXIpIHsKKyAgc3RhdGljIGNvbnN0IFNlcmlhbFBhcmFtZXRlcnMgc2VyaWFsUGFyYW1ldGVycyA9IHsKKyAgICBTRVJJQUxfREVGQVVMVF9QQVJBTUVURVJTCisgIH07CisKKyAgQkVHSU5fVVNCX0NIQU5ORUxfREVGSU5JVElPTlMKKyAgICB7IC8qIGFsbCBtb2RlbHMgKi8KKyAgICAgIC52ZW5kb3I9MFgwNDAzLCAucHJvZHVjdD0wWEYyMDgsCisgICAgICAuY29uZmlndXJhdGlvbj0xLCAuaW50ZXJmYWNlPTAsIC5hbHRlcm5hdGl2ZT0wLAorICAgICAgLmlucHV0RW5kcG9pbnQ9MSwgLm91dHB1dEVuZHBvaW50PTIsCisgICAgICAuc2VyaWFsID0gJnNlcmlhbFBhcmFtZXRlcnMKKyAgICB9LAorICBFTkRfVVNCX0NIQU5ORUxfREVGSU5JVElPTlMKKworICBHaW9EZXNjcmlwdG9yIGRlc2NyaXB0b3I7CisgIGdpb0luaXRpYWxpemVEZXNjcmlwdG9yKCZkZXNjcmlwdG9yKTsKKworICBkZXNjcmlwdG9yLnNlcmlhbC5wYXJhbWV0ZXJzID0gJnNlcmlhbFBhcmFtZXRlcnM7CisgIGRlc2NyaXB0b3Iuc2VyaWFsLm9wdGlvbnMuYXBwbGljYXRpb25EYXRhID0gJnNlcmlhbE9wZXJhdGlvbnM7CisKKyAgZGVzY3JpcHRvci51c2IuY2hhbm5lbERlZmluaXRpb25zID0gdXNiQ2hhbm5lbERlZmluaXRpb25zOworICBkZXNjcmlwdG9yLnVzYi5vcHRpb25zLmFwcGxpY2F0aW9uRGF0YSA9ICZ1c2JPcGVyYXRpb25zOworCisgIGRlc2NyaXB0b3IuYmx1ZXRvb3RoLmNoYW5uZWxOdW1iZXIgPSAxOworICBkZXNjcmlwdG9yLmJsdWV0b290aC5vcHRpb25zLmFwcGxpY2F0aW9uRGF0YSA9ICZibHVldG9vdGhPcGVyYXRpb25zOworCisgIGlmIChjb25uZWN0QnJhaWxsZVJlc291cmNlKGJybCwgaWRlbnRpZmllciwgJmRlc2NyaXB0b3IsIE5VTEwpKSB7CisgICAgYnJsLT5kYXRhLT5pbyA9IGdpb0dldEFwcGxpY2F0aW9uRGF0YShicmwtPmdpb0VuZHBvaW50KTsKKyAgICByZXR1cm4gMTsKKyAgfQorCisgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50CiticmxfY29uc3RydWN0IChCcmFpbGxlRGlzcGxheSAqYnJsLCBjaGFyICoqcGFyYW1ldGVycywgY29uc3QgY2hhciAqZGV2aWNlKSB7CisgIGlmICgoYnJsLT5kYXRhID0gbWFsbG9jKHNpemVvZigqYnJsLT5kYXRhKSkpKSB7CisgICAgbWVtc2V0KGJybC0+ZGF0YSwgMCwgc2l6ZW9mKCpicmwtPmRhdGEpKTsKKyAgICBicmwtPmRhdGEtPmlvID0gTlVMTDsKKyAgICBicmwtPmRhdGEtPm1vZGVsID0gTlVMTDsKKyAgICBicmwtPmRhdGEtPnByb3RvY29sID0gTlVMTDsKKyAgICBicmwtPmRhdGEtPmdzYy5pbml0aWFsaXplZCA9IDA7CisKKyAgICBpZiAoY29ubmVjdFJlc291cmNlKGJybCwgZGV2aWNlKSkgeworICAgICAgY29uc3QgdW5zaWduZWQgaW50ICpiYXVkID0gYnJsLT5kYXRhLT5pby0+YmF1ZExpc3Q7CisKKyAgICAgIGlmIChiYXVkKSB7CisgICAgICAgIHdoaWxlICgqYmF1ZCkgeworICAgICAgICAgIFNlcmlhbFBhcmFtZXRlcnMgc2VyaWFsUGFyYW1ldGVyczsKKworICAgICAgICAgIGdpb0luaXRpYWxpemVTZXJpYWxQYXJhbWV0ZXJzKCZzZXJpYWxQYXJhbWV0ZXJzKTsKKyAgICAgICAgICBzZXJpYWxQYXJhbWV0ZXJzLmJhdWQgPSAqYmF1ZDsKKyAgICAgICAgICBzZXJpYWxQYXJhbWV0ZXJzLmZsb3dDb250cm9sID0gYnJsLT5kYXRhLT5pby0+Zmxvd0NvbnRyb2w7CisgICAgICAgICAgbG9nTWVzc2FnZShMT0dfREVCVUcsICJwcm9iaW5nIFBhcGVubWVpZXIgZGlzcGxheSBhdCAldSBiYXVkIiwgKmJhdWQpOworCisgICAgICAgICAgaWYgKGdpb1JlY29uZmlndXJlUmVzb3VyY2UoYnJsLT5naW9FbmRwb2ludCwgJnNlcmlhbFBhcmFtZXRlcnMpKSB7CisgICAgICAgICAgICBpZiAoc3RhcnRUZXJtaW5hbChicmwpKSB7CisgICAgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9CisKKyAgICAgICAgICBiYXVkICs9IDE7CisgICAgICAgIH0KKyAgICAgIH0gZWxzZSBpZiAoc3RhcnRUZXJtaW5hbChicmwpKSB7CisgICAgICAgIHJldHVybiAxOworICAgICAgfQorCisgICAgICBkaXNjb25uZWN0QnJhaWxsZVJlc291cmNlKGJybCwgTlVMTCk7CisgICAgfQorCisgICAgZnJlZShicmwtPmRhdGEpOworICB9IGVsc2UgeworICAgIGxvZ01hbGxvY0Vycm9yKCk7CisgIH0KKworICByZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQKK2JybF9kZXN0cnVjdCAoQnJhaWxsZURpc3BsYXkgKmJybCkgeworICBkaXNjb25uZWN0QnJhaWxsZVJlc291cmNlKGJybCwgTlVMTCk7CisgIGJybC0+ZGF0YS0+cHJvdG9jb2wtPnJlbGVhc2VSZXNvdXJjZXMoYnJsKTsKKyAgZnJlZShicmwtPmRhdGEpOworfQorCitzdGF0aWMgdm9pZAordXBkYXRlQ2VsbHMgKAorICBCcmFpbGxlRGlzcGxheSAqYnJsLAorICB1bnNpZ25lZCBpbnQgY291bnQsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGEsIHVuc2lnbmVkIGNoYXIgKmNlbGxzLAorICB2b2lkICgqd3JpdGVDZWxscykgKEJyYWlsbGVEaXNwbGF5ICpicmwsIHVuc2lnbmVkIGludCBzdGFydCwgdW5zaWduZWQgaW50IGNvdW50KQorKSB7CisgIHVuc2lnbmVkIGludCBmcm9tLCB0bzsKKworICBpZiAoY2VsbHNIYXZlQ2hhbmdlZChjZWxscywgZGF0YSwgY291bnQsICZmcm9tLCAmdG8sIE5VTEwpKSB7CisgICAgd3JpdGVDZWxscyhicmwsIGZyb20sIHRvLWZyb20pOworICB9Cit9CisKK3N0YXRpYyBpbnQKK2JybF93cml0ZVdpbmRvdyAoQnJhaWxsZURpc3BsYXkgKmJybCwgY29uc3Qgd2NoYXJfdCAqdGV4dCkgeworICB1cGRhdGVDZWxscyhicmwsIGJybC0+ZGF0YS0+bW9kZWwtPnRleHRDb2x1bW5zLCBicmwtPmJ1ZmZlciwgYnJsLT5kYXRhLT50ZXh0Q2VsbHMsIGJybC0+ZGF0YS0+cHJvdG9jb2wtPndyaXRlVGV4dCk7CisgIGJybC0+ZGF0YS0+cHJvdG9jb2wtPmZsdXNoQ2VsbHMoYnJsKTsKKyAgcmV0dXJuIDE7Cit9CisKK3N0YXRpYyB2b2lkCitpbml0aWFsaXplR2VuZXJpY1N0YXR1c0NvZGVzIChCcmFpbGxlRGlzcGxheSAqYnJsKSB7CisgIGNvbnN0IHNpemVfdCBjb3VudCA9IEFSUkFZX0NPVU5UKGJybC0+ZGF0YS0+Z3NjLmNvZGVzKTsKKyAgaW50IGNvbW1hbmRzW2NvdW50XTsKKworICBnZXRLZXlHcm91cENvbW1hbmRzKGJybC0+a2V5VGFibGUsIFBNX0dSUF9TSzEsIGNvbW1hbmRzLCBjb3VudCk7CisKKyAgeworICAgIHVuc2lnbmVkIGludCBpOworCisgICAgZm9yIChpPTA7IGk8Y291bnQ7IGkrPTEpIHsKKyAgICAgIFBNX0dlbmVyaWNTdGF0dXNDb2RlICpjb2RlID0gJmJybC0+ZGF0YS0+Z3NjLmNvZGVzW2ldOworCisjZGVmaW5lIFNFVChDT01NQU5ELEZPUk1BVCxWQUxVRSkgY2FzZSAoQ09NTUFORCk6IGNvZGUtPmZvcm1hdCA9IChGT1JNQVQpOyBjb2RlLT52YWx1ZSA9IChWQUxVRSk7IGJyZWFrOworICAgICAgc3dpdGNoIChjb21tYW5kc1tpXSAmIEJSTF9NU0tfQ01EKSB7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgIFNFVChCUkxfQ01EX05PT1AsIFBNX0dTQ19ET1RTLCAwKTsKKworICAgICAgICBTRVQoQlJMX0NNRF9IRUxQLCBQTV9HU0NfTlVNQkVSLCBnc2NCcmFpbGxlV2luZG93Um93KTsKKyAgICAgICAgU0VUKEJSTF9DTURfTEVBUk4sIFBNX0dTQ19QT1NJVElPTiwgZ3NjQnJhaWxsZVdpbmRvd0NvbHVtbik7CisgICAgICAgIFNFVChCUkxfQ01EX0NTUkpNUF9WRVJULCBQTV9HU0NfTlVNQkVSLCBnc2NTY3JlZW5DdXJzb3JSb3cpOworICAgICAgICBTRVQoQlJMX0NNRF9JTkZPLCBQTV9HU0NfTlVNQkVSLCBnc2NTY3JlZW5DdXJzb3JDb2x1bW4pOworICAgICAgICBTRVQoQlJMX0NNRF9QUkVGTUVOVSwgUE1fR1NDX05VTUJFUiwgZ3NjU2NyZWVuTnVtYmVyKTsKKworICAgICAgICBTRVQoQlJMX0NNRF9GUkVFWkUsIFBNX0dTQ19GTEFHLCBnc2NGcm96ZW5TY3JlZW4pOworICAgICAgICBTRVQoQlJMX0NNRF9ESVNQTUQsIFBNX0dTQ19GTEFHLCBnc2NEaXNwbGF5TW9kZSk7CisgICAgICAgIFNFVChCUkxfQ01EX1NJWERPVFMsIFBNX0dTQ19GTEFHLCBnc2NTaXhEb3RDb21wdXRlckJyYWlsbGUpOworICAgICAgICBTRVQoQlJMX0NNRF9TTElERVdJTiwgUE1fR1NDX0ZMQUcsIGdzY1NsaWRpbmdCcmFpbGxlV2luZG93KTsKKyAgICAgICAgU0VUKEJSTF9DTURfU0tQSURMTlMsIFBNX0dTQ19GTEFHLCBnc2NTa2lwSWRlbnRpY2FsTGluZXMpOworICAgICAgICBTRVQoQlJMX0NNRF9TS1BCTE5LV0lOUywgUE1fR1NDX0ZMQUcsIGdzY1NraXBCbGFua0JyYWlsbGVXaW5kb3dzKTsKKyAgICAgICAgU0VUKEJSTF9DTURfQ1NSVklTLCBQTV9HU0NfRkxBRywgZ3NjU2hvd1NjcmVlbkN1cnNvcik7CisgICAgICAgIFNFVChCUkxfQ01EX0NTUkhJREUsIFBNX0dTQ19GTEFHLCBnc2NIaWRlU2NyZWVuQ3Vyc29yKTsKKyAgICAgICAgU0VUKEJSTF9DTURfQ1NSVFJLLCBQTV9HU0NfRkxBRywgZ3NjVHJhY2tTY3JlZW5DdXJzb3IpOworICAgICAgICBTRVQoQlJMX0NNRF9DU1JTSVpFLCBQTV9HU0NfRkxBRywgZ3NjU2NyZWVuQ3Vyc29yU3R5bGUpOworICAgICAgICBTRVQoQlJMX0NNRF9DU1JCTElOSywgUE1fR1NDX0ZMQUcsIGdzY0JsaW5raW5nU2NyZWVuQ3Vyc29yKTsKKyAgICAgICAgU0VUKEJSTF9DTURfQVRUUlZJUywgUE1fR1NDX0ZMQUcsIGdzY1Nob3dBdHRyaWJ1dGVzKTsKKyAgICAgICAgU0VUKEJSTF9DTURfQVRUUkJMSU5LLCBQTV9HU0NfRkxBRywgZ3NjQmxpbmtpbmdBdHRyaWJ1dGVzKTsKKyAgICAgICAgU0VUKEJSTF9DTURfQ0FQQkxJTkssIFBNX0dTQ19GTEFHLCBnc2NCbGlua2luZ0NhcGl0YWxzKTsKKyAgICAgICAgU0VUKEJSTF9DTURfVFVORVMsIFBNX0dTQ19GTEFHLCBnc2NBbGVydFR1bmVzKTsKKyAgICAgICAgU0VUKEJSTF9DTURfQVVUT1JFUEVBVCwgUE1fR1NDX0ZMQUcsIGdzY0F1dG9yZXBlYXQpOworICAgICAgICBTRVQoQlJMX0NNRF9BVVRPU1BFQUssIFBNX0dTQ19GTEFHLCBnc2NBdXRvc3BlYWspOworICAgICAgICBTRVQoQlJMX0NNRF9CUkxVQ0RPVFMsIFBNX0dTQ19GTEFHLCBnc2NCcmFpbGxlVHlwaW5nTW9kZSk7CisgICAgICB9CisjdW5kZWYgU0VUCisgICAgfQorICB9Cit9CisKK3N0YXRpYyBpbnQKK2JybF93cml0ZVN0YXR1cyAoQnJhaWxsZURpc3BsYXkgKmJybCwgY29uc3QgdW5zaWduZWQgY2hhciAqcykgeworICBpZiAoYnJsLT5kYXRhLT5tb2RlbC0+c3RhdHVzQ291bnQpIHsKKyAgICB1bnNpZ25lZCBjaGFyIGNlbGxzW2JybC0+ZGF0YS0+bW9kZWwtPnN0YXR1c0NvdW50XTsKKworICAgIGlmIChzW0dTQ19GSVJTVF0gPT0gR1NDX01BUktFUikgeworICAgICAgdW5zaWduZWQgaW50IGk7CisKKyAgICAgIGlmICghYnJsLT5kYXRhLT5nc2MuaW5pdGlhbGl6ZWQpIHsKKyAgICAgICAgaWYgKGJybC0+ZGF0YS0+bW9kZWwtPnN0YXR1c0NvdW50IDwgMTMpIHsKKyAgICAgICAgICBicmwtPmRhdGEtPmdzYy5tYWtlTnVtYmVyID0gbWFrZVBvcnRyYWl0TnVtYmVyOworICAgICAgICAgIGJybC0+ZGF0YS0+Z3NjLm1ha2VGbGFnID0gbWFrZVBvcnRyYWl0RmxhZzsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICBicmwtPmRhdGEtPmdzYy5tYWtlTnVtYmVyID0gbWFrZVNlYXNjYXBlTnVtYmVyOworICAgICAgICAgIGJybC0+ZGF0YS0+Z3NjLm1ha2VGbGFnID0gbWFrZVNlYXNjYXBlRmxhZzsKKyAgICAgICAgfQorCisgICAgICAgIGluaXRpYWxpemVHZW5lcmljU3RhdHVzQ29kZXMoYnJsKTsKKyAgICAgICAgYnJsLT5kYXRhLT5nc2MuaW5pdGlhbGl6ZWQgPSAxOworICAgICAgfQorCisgICAgICBmb3IgKGk9MDsgaTxicmwtPmRhdGEtPm1vZGVsLT5zdGF0dXNDb3VudDsgaSs9MSkgeworICAgICAgICB1bnNpZ25lZCBjaGFyICpjZWxsID0gJmNlbGxzW2ldOworCisgICAgICAgIGlmIChpIDwgQVJSQVlfQ09VTlQoYnJsLT5kYXRhLT5nc2MuY29kZXMpKSB7CisgICAgICAgICAgY29uc3QgUE1fR2VuZXJpY1N0YXR1c0NvZGUgKmNvZGUgPSAmYnJsLT5kYXRhLT5nc2MuY29kZXNbaV07CisKKyAgICAgICAgICBzd2l0Y2ggKGNvZGUtPmZvcm1hdCkgeworICAgICAgICAgICAgY2FzZSBQTV9HU0NfRE9UUzoKKyAgICAgICAgICAgICAgKmNlbGwgPSBjb2RlLT52YWx1ZTsKKyAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICAgIGNhc2UgUE1fR1NDX0ZMQUc6CisgICAgICAgICAgICAgICpjZWxsID0gYnJsLT5kYXRhLT5nc2MubWFrZUZsYWcoaSsxLCBzW2NvZGUtPnZhbHVlXSk7CisgICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAgICBjYXNlIFBNX0dTQ19QT1NJVElPTjoKKyAgICAgICAgICAgICAgaWYgKHNbY29kZS0+dmFsdWVdID09IDEpIGJyZWFrOworICAgICAgICAgICAgY2FzZSBQTV9HU0NfTlVNQkVSOgorICAgICAgICAgICAgICAqY2VsbCA9IGJybC0+ZGF0YS0+Z3NjLm1ha2VOdW1iZXIoc1tjb2RlLT52YWx1ZV0pOworICAgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgKmNlbGwgPSAwOworICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICB1bnNpZ25lZCBpbnQgaSA9IDA7CisKKyAgICAgIHdoaWxlIChpIDwgYnJsLT5kYXRhLT5tb2RlbC0+c3RhdHVzQ291bnQpIHsKKyAgICAgICAgdW5zaWduZWQgY2hhciBkb3RzID0gc1tpXTsKKworICAgICAgICBpZiAoIWRvdHMpIGJyZWFrOworICAgICAgICBjZWxsc1tpKytdID0gZG90czsKKyAgICAgIH0KKworICAgICAgd2hpbGUgKGkgPCBicmwtPmRhdGEtPm1vZGVsLT5zdGF0dXNDb3VudCkgY2VsbHNbaSsrXSA9IDA7CisgICAgfQorCisgICAgdXBkYXRlQ2VsbHMoYnJsLCBicmwtPmRhdGEtPm1vZGVsLT5zdGF0dXNDb3VudCwgY2VsbHMsIGJybC0+ZGF0YS0+c3RhdHVzQ2VsbHMsIGJybC0+ZGF0YS0+cHJvdG9jb2wtPndyaXRlU3RhdHVzKTsKKyAgfQorCisgIHJldHVybiAxOworfQorCitzdGF0aWMgaW50IAorYnJsX3JlYWRDb21tYW5kIChCcmFpbGxlRGlzcGxheSAqYnJsLCBLZXlUYWJsZUNvbW1hbmRDb250ZXh0IGNvbnRleHQpIHsKKyAgcmV0dXJuIGJybC0+ZGF0YS0+cHJvdG9jb2wtPnJlYWRDb21tYW5kKGJybCwgY29udGV4dCk7Cit9CmRpZmYgLS1naXQgYS9Ecml2ZXJzL0JyYWlsbGUvUGFwZW5tZWllci9icmxkZWZzLXBtLmggYi9Ecml2ZXJzL0JyYWlsbGUvUGFwZW5tZWllci9icmxkZWZzLXBtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTRmODNiMwotLS0gL2Rldi9udWxsCisrKyBiL0RyaXZlcnMvQnJhaWxsZS9QYXBlbm1laWVyL2JybGRlZnMtcG0uaApAQCAtMCwwICsxLDExNSBAQAorLyoKKyAqIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisgKiAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisgKgorICogQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKKyNpZm5kZWYgQlJMVFRZX0lOQ0xVREVEX1BNX0JSTERFRlMKKyNkZWZpbmUgQlJMVFRZX0lOQ0xVREVEX1BNX0JSTERFRlMKKworI2RlZmluZSBQTV9NQVhJTVVNX1RFWFRfQ0VMTFMgODAgCisjZGVmaW5lIFBNX01BWElNVU1fU1RBVFVTX0NFTExTIDIyCisKKyNkZWZpbmUgUE1fUDFfTUFYSU1VTV9QQUNLRVRfU0laRSAxMDAKKyNkZWZpbmUgUE1fUDFfUEtUX1NFTkQgICAgICdTJworI2RlZmluZSBQTV9QMV9QS1RfUkVDRUlWRSAgJ0snCisjZGVmaW5lIFBNX1AxX1BLVF9JREVOVElUWSAnSScKKyNkZWZpbmUgUE1fUDFfS0VZX1BSRVNTRUQgMQorCisvKiBwcm90b2NvbCAxIG9mZnNldHMgd2l0aGluIGlucHV0IGRhdGEgc3RydWN0dXJlICovCisjZGVmaW5lIFBNX1AxX1JDVl9LRVlGVU5DICAwWDAwMDAgLyogcGh5c2ljYWwgYW5kIGxvZ2ljYWwgZnVuY3Rpb24ga2V5cyAqLworI2RlZmluZSBQTV9QMV9SQ1ZfS0VZUk9VVEUgMFgwMzAwIC8qIHJvdXRpbmcga2V5cyAqLworI2RlZmluZSBQTV9QMV9SQ1ZfU0VOU09SICAgMFgwNjAwIC8qIHNlbnNvcnMgb3Igc2Vjb25kYXJ5IHJvdXRpbmcga2V5cyAqLworCisvKiBwcm90b2NvbCAxIG9mZnNldHMgd2l0aGluIG91dHB1dCBkYXRhIHN0cnVjdHVyZSAqLworI2RlZmluZSBQTV9QMV9YTVRfQlJMREFUQSAgMFgwMDAwIC8qIGRhdGEgZm9yIGJyYWlsbGUgZGlzcGxheSAqLworI2RlZmluZSBQTV9QMV9YTVRfTENEREFUQSAgMFgwMTAwIC8qIGRhdGEgZm9yIExDRCAqLworI2RlZmluZSBQTV9QMV9YTVRfQlJMV1JJVEUgMFgwMjAwIC8qIGhvdyB0byB3cml0ZSBlYWNoIGJyYWlsbGUgY2VsbDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiAwID0gY29udmVydCBkYXRhIGFjY29yZGluZyB0byBicmFpbGxlIHRhYmxlIChkZWZhdWx0KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIDEgPSB3cml0ZSBkaXJlY3RseQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIDIgPSBtYXJrIGVuZCBvZiBicmFpbGxlIGRpc3BsYXkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgUE1fUDFfWE1UX0JSTENFTEwgIDBYMDMwMCAvKiBkZXNjcmlwdGlvbiBvZiBlYWNoIGJyYWlsbGUgY2VsbDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiAwID0gaGFzIGN1cnNvciByb3V0aW5nIGtleQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIDEgPSBoYXMgY3Vyc29yIHJvdXRpbmcga2V5IGFuZCBzZW5zb3IKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgUE1fUDFfWE1UX0FTQzJCUkwgIDBYMDQwMCAvKiBBU0NJSSB0byBicmFpbGxlIHRyYW5zbGF0aW9uIHRhYmxlICovCisjZGVmaW5lIFBNX1AxX1hNVF9MQ0RVU0FHRSAwWDA1MDAgLyogc291cmNlIG9mIExDRCBkYXRhOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIDAgPSBzYW1lIGFzIGJyYWlsbGUgZGlzcGxheQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIDEgPSBub3Qgc2FtZSBhcyBicmFpbGxlIGRpc3BsYXkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgUE1fUDFfWE1UX0NTUlBPU04gIDBYMDUwMSAvKiBjdXJzb3IgcG9zaXRpb24gKDAgZm9yIG5vIGN1cnNvcikgKi8KKyNkZWZpbmUgUE1fUDFfWE1UX0NTUkRPVFMgIDBYMDUwMiAvKiBjdXJzb3IgcmVwcmVzZW5hdGlvbiBpbiBicmFpbGxlIGRvdHMgKi8KKyNkZWZpbmUgUE1fUDFfWE1UX0JSTDJBU0MgIDBYMDUwMyAvKiBicmFpbGxlIHRvIEFTQ0lJIHRyYW5zbGF0aW9uIHRhYmxlICovCisjZGVmaW5lIFBNX1AxX1hNVF9MRU5GQlNFUSAwWDA2MDMgLyogbGVuZ3RoIG9mIGZlZWRiYWNrIHNlcXVlbmNlIGZvciBzcGVlY2ggc3ludGhlc2l6ZXIgKi8KKyNkZWZpbmUgUE1fUDFfWE1UX0xFTktQU0VRIDBYMDYwNCAvKiBsZW5ndGggb2Yga2V5cGFkIHNlcXVlbmNlICovCisjZGVmaW5lIFBNX1AxX1hNVF9USU1FSzFLMiAwWDA2MDUgLyoga2V5IGNvZGUgc3VwcHJlc3Npb24gdGltZSBmb3IgbW92aW5nIGZyb20gSzEgdG8gSzIgKGxlZnQpICovCisjZGVmaW5lIFBNX1AxX1hNVF9USU1FSzNLNCAwWDA2MDYgLyoga2V5IGNvZGUgc3VwcHJlc3Npb24gdGltZSBmb3IgbW92aW5nIGZyb20gSzMgdG8gSzQgKHVwKSAqLworI2RlZmluZSBQTV9QMV9YTVRfVElNRUs1SzYgMFgwNjA3IC8qIGtleSBjb2RlIHN1cHByZXNzaW9uIHRpbWUgZm9yIG1vdmluZyBmcm9tIEs1IHRvIEs2IChyaWdodCkgKi8KKyNkZWZpbmUgUE1fUDFfWE1UX1RJTUVLN0s4IDBYMDYwOCAvKiBrZXkgY29kZSBzdXBwcmVzc2lvbiB0aW1lIGZvciBtb3ZpbmcgZnJvbSBLNyB0byBLOCAoZG93bikgKi8KKyNkZWZpbmUgUE1fUDFfWE1UX1RJTUVST1VUIDBYMDYwOSAvKiByb3V0aW5nIHRpbWUgaW50ZXJ2YWwgKi8KKyNkZWZpbmUgUE1fUDFfWE1UX1RJTUVPUFBPIDBYMDYwQSAvKiBrZXkgY29kZSBzdXBwcmVzc2lvbiB0aW1lIGZvciBvcHBvc2l0ZSBtb3ZlbWVudHMgKi8KKwordHlwZWRlZiBlbnVtIHsKKyAgUE1fQkFSX0xlZnQxID0gMCwKKyAgUE1fQkFSX0xlZnQyLAorICBQTV9CQVJfVXAxLAorICBQTV9CQVJfVXAyLAorICBQTV9CQVJfUmlnaHQxLAorICBQTV9CQVJfUmlnaHQyLAorICBQTV9CQVJfRG93bjEsCisgIFBNX0JBUl9Eb3duMiwKK30gUE1fQmFyS2V5OworCit0eXBlZGVmIGVudW0geworICBQTV9TV1RfTGVmdFN3aXRjaFJlYXIgPSAwLAorICBQTV9TV1RfTGVmdFN3aXRjaEZyb250LAorICBQTV9TV1RfTGVmdEtleVJlYXIsCisgIFBNX1NXVF9MZWZ0S2V5RnJvbnQsCisgIFBNX1NXVF9SaWdodEtleVJlYXIsCisgIFBNX1NXVF9SaWdodEtleUZyb250LAorICBQTV9TV1RfUmlnaHRTd2l0Y2hSZWFyLAorICBQTV9TV1RfUmlnaHRTd2l0Y2hGcm9udAorfSBQTV9Td2l0Y2hLZXk7CisKK3R5cGVkZWYgZW51bSB7CisgIFBNX0tCRF9Eb3QxID0gMCwKKyAgUE1fS0JEX0RvdDIsCisgIFBNX0tCRF9Eb3QzLAorICBQTV9LQkRfRG90NCwKKyAgUE1fS0JEX0RvdDUsCisgIFBNX0tCRF9Eb3Q2LAorICBQTV9LQkRfRG90NywKKyAgUE1fS0JEX0RvdDgsCisKKyAgUE1fS0JEX1JpZ2h0VGh1bWIsCisgIFBNX0tCRF9TcGFjZSwKKyAgUE1fS0JEX0xlZnRUaHVtYiwKKyAgUE1fS0JEX1JpZ2h0U3BhY2UsCisgIFBNX0tCRF9MZWZ0U3BhY2UKK30gUE1fS2V5Ym9hcmRLZXk7CisKK3R5cGVkZWYgZW51bSB7CisgIFBNX0dSUF9CQVIsCisgIFBNX0dSUF9TV1QsCisgIFBNX0dSUF9LQkQsCisgIFBNX0dSUF9GSzEsCisgIFBNX0dSUF9SSzEsCisgIFBNX0dSUF9SSzIsCisgIFBNX0dSUF9TSzEsCisgIFBNX0dSUF9TSzIKK30gUE1fS2V5R3JvdXA7CisKKyNlbmRpZiAvKiBCUkxUVFlfSU5DTFVERURfUE1fQlJMREVGUyAqLyAKZGlmZiAtLWdpdCBhL0RyaXZlcnMvQnJhaWxsZS9QYXBlbm1laWVyL21vZGVscy5oIGIvRHJpdmVycy9CcmFpbGxlL1BhcGVubWVpZXIvbW9kZWxzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjc5OTkyYwotLS0gL2Rldi9udWxsCisrKyBiL0RyaXZlcnMvQnJhaWxsZS9QYXBlbm1laWVyL21vZGVscy5oCkBAIC0wLDAgKzEsNTA2IEBACisvKgorICogQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyAqICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyAqCisgKiBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorICoKKyAqIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyAqCisgKiBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisgKi8KKwordHlwZWRlZiBzdHJ1Y3QgeworICB1bnNpZ25lZCBjaGFyIG1vZGVsSWRlbnRpZmllcjsKKyAgdW5zaWduZWQgY2hhciBwcm90b2NvbFJldmlzaW9uOworICBjb25zdCBjaGFyICptb2RlbE5hbWU7CisgIGNvbnN0IEtleVRhYmxlRGVmaW5pdGlvbiAqa2V5VGFibGVEZWZpbml0aW9uOworCisgIHVpbnQ4X3QgdGV4dENvbHVtbnM7CisgIHVpbnQ4X3QgZnJvbnRLZXlzOworICB1aW50OF90IGhhc0JhcjsKKyAgdWludDhfdCBsZWZ0U3dpdGNoZXM7CisgIHVpbnQ4X3QgcmlnaHRTd2l0Y2hlczsKKyAgdWludDhfdCBsZWZ0S2V5czsKKyAgdWludDhfdCByaWdodEtleXM7CisgIHVpbnQ4X3Qgc3RhdHVzQ291bnQ7Cit9IE1vZGVsRW50cnk7IAorCisjZGVmaW5lIFBNX01PREVMX0lERU5USVRZKGlkZW50aWZpZXIsIG1vZGVsLCBuYW1lLCBwcm90b2NvbCkJXAorICAubW9kZWxJZGVudGlmaWVyID0gaWRlbnRpZmllciwgXAorICAubW9kZWxOYW1lID0gbmFtZSwgXAorICAucHJvdG9jb2xSZXZpc2lvbiA9IHByb3RvY29sLCBcCisgIC5rZXlUYWJsZURlZmluaXRpb24gPSAmS0VZX1RBQkxFX0RFRklOSVRJT04obW9kZWwpCisKKyNkZWZpbmUgUE1fQ0VMTF9DT1VOVFMoY29sdW1ucywgc3RhdHVzKSBcCisgIC50ZXh0Q29sdW1ucyA9IGNvbHVtbnMsIFwKKyAgLnN0YXR1c0NvdW50ID0gc3RhdHVzCisKKyNkZWZpbmUgUE1fRlJPTlRfS0VZUyhmcm9udCkgXAorICAuZnJvbnRLZXlzID0gZnJvbnQKKworI2RlZmluZSBQTV9CQVIobHMsIHJzLCBsaywgcmspIFwKKyAgLmhhc0JhciA9IDEsIFwKKyAgLmxlZnRTd2l0Y2hlcyA9IGxzLCBcCisgIC5yaWdodFN3aXRjaGVzID0gcnMsIFwKKyAgLmxlZnRLZXlzID0gbGssIFwKKyAgLnJpZ2h0S2V5cyA9IHJrCisKKworQkVHSU5fS0VZX05BTUVfVEFCTEUoYmFyKQorICBCUkxfS0VZX05BTUVfRU5UUlkoUE0sIEJBUiwgTGVmdDEsICJCYXJMZWZ0MSIpLAorICBCUkxfS0VZX05BTUVfRU5UUlkoUE0sIEJBUiwgTGVmdDIsICJCYXJMZWZ0MiIpLAorICBCUkxfS0VZX05BTUVfRU5UUlkoUE0sIEJBUiwgUmlnaHQxLCAiQmFyUmlnaHQxIiksCisgIEJSTF9LRVlfTkFNRV9FTlRSWShQTSwgQkFSLCBSaWdodDIsICJCYXJSaWdodDIiKSwKKyAgQlJMX0tFWV9OQU1FX0VOVFJZKFBNLCBCQVIsIFVwMSwgIkJhclVwMSIpLAorICBCUkxfS0VZX05BTUVfRU5UUlkoUE0sIEJBUiwgVXAyLCAiQmFyVXAyIiksCisgIEJSTF9LRVlfTkFNRV9FTlRSWShQTSwgQkFSLCBEb3duMSwgIkJhckRvd24xIiksCisgIEJSTF9LRVlfTkFNRV9FTlRSWShQTSwgQkFSLCBEb3duMiwgIkJhckRvd24yIiksCitFTkRfS0VZX05BTUVfVEFCTEUKKworQkVHSU5fS0VZX05BTUVfVEFCTEUoc3dpdGNoZXMpCisgIEJSTF9LRVlfTkFNRV9FTlRSWShQTSwgU1dULCBMZWZ0U3dpdGNoUmVhciwgIkxlZnRTd2l0Y2hSZWFyIiksCisgIEJSTF9LRVlfTkFNRV9FTlRSWShQTSwgU1dULCBMZWZ0U3dpdGNoRnJvbnQsICJMZWZ0U3dpdGNoRnJvbnQiKSwKKyAgQlJMX0tFWV9OQU1FX0VOVFJZKFBNLCBTV1QsIFJpZ2h0U3dpdGNoUmVhciwgIlJpZ2h0U3dpdGNoUmVhciIpLAorICBCUkxfS0VZX05BTUVfRU5UUlkoUE0sIFNXVCwgUmlnaHRTd2l0Y2hGcm9udCwgIlJpZ2h0U3dpdGNoRnJvbnQiKSwKK0VORF9LRVlfTkFNRV9UQUJMRQorCitCRUdJTl9LRVlfTkFNRV9UQUJMRShrZXlzKQorICBCUkxfS0VZX05BTUVfRU5UUlkoUE0sIFNXVCwgTGVmdEtleVJlYXIsICJMZWZ0S2V5UmVhciIpLAorICBCUkxfS0VZX05BTUVfRU5UUlkoUE0sIFNXVCwgTGVmdEtleUZyb250LCAiTGVmdEtleUZyb250IiksCisgIEJSTF9LRVlfTkFNRV9FTlRSWShQTSwgU1dULCBSaWdodEtleVJlYXIsICJSaWdodEtleVJlYXIiKSwKKyAgQlJMX0tFWV9OQU1FX0VOVFJZKFBNLCBTV1QsIFJpZ2h0S2V5RnJvbnQsICJSaWdodEtleUZyb250IiksCitFTkRfS0VZX05BTUVfVEFCTEUKKworQkVHSU5fS0VZX05BTUVfVEFCTEUoZnJvbnQ5KQorICBCUkxfS0VZX05VTUJFUl9FTlRSWShQTSwgRksxLCAwLCAiRnVuY3Rpb24iKSwKKyAgQlJMX0tFWV9OVU1CRVJfRU5UUlkoUE0sIEZLMSwgMSwgIkN1cnNvciIpLAorICBCUkxfS0VZX05VTUJFUl9FTlRSWShQTSwgRksxLCAyLCAiQmFja3dhcmQiKSwKKyAgQlJMX0tFWV9OVU1CRVJfRU5UUlkoUE0sIEZLMSwgMywgIlVwIiksCisgIEJSTF9LRVlfTlVNQkVSX0VOVFJZKFBNLCBGSzEsIDQsICJIb21lIiksCisgIEJSTF9LRVlfTlVNQkVSX0VOVFJZKFBNLCBGSzEsIDUsICJEb3duIiksCisgIEJSTF9LRVlfTlVNQkVSX0VOVFJZKFBNLCBGSzEsIDYsICJGb3J3YXJkIiksCisgIEJSTF9LRVlfTlVNQkVSX0VOVFJZKFBNLCBGSzEsIDcsICJCcmFpbGxlIiksCisgIEJSTF9LRVlfTlVNQkVSX0VOVFJZKFBNLCBGSzEsIDgsICJBdHRyaWJ1dGUiKSwKK0VORF9LRVlfTkFNRV9UQUJMRQorCitCRUdJTl9LRVlfTkFNRV9UQUJMRShmcm9udDEzKQorICBCUkxfS0VZX05VTUJFUl9FTlRSWShQTSwgRksxLCAwLCAiRG90NyIpLAorICBCUkxfS0VZX05VTUJFUl9FTlRSWShQTSwgRksxLCAxLCAiRG90MyIpLAorICBCUkxfS0VZX05VTUJFUl9FTlRSWShQTSwgRksxLCAyLCAiRG90MiIpLAorICBCUkxfS0VZX05VTUJFUl9FTlRSWShQTSwgRksxLCAzLCAiRG90MSIpLAorICBCUkxfS0VZX05VTUJFUl9FTlRSWShQTSwgRksxLCA0LCAiVXAiKSwKKyAgQlJMX0tFWV9OVU1CRVJfRU5UUlkoUE0sIEZLMSwgNSwgIkhvbWUiKSwKKyAgQlJMX0tFWV9OVU1CRVJfRU5UUlkoUE0sIEZLMSwgNiwgIlNoaWZ0IiksCisgIEJSTF9LRVlfTlVNQkVSX0VOVFJZKFBNLCBGSzEsIDcsICJFbmQiKSwKKyAgQlJMX0tFWV9OVU1CRVJfRU5UUlkoUE0sIEZLMSwgOCwgIkRvd24iKSwKKyAgQlJMX0tFWV9OVU1CRVJfRU5UUlkoUE0sIEZLMSwgOSwgIkRvdDQiKSwKKyAgQlJMX0tFWV9OVU1CRVJfRU5UUlkoUE0sIEZLMSwgMTAsICJEb3Q1IiksCisgIEJSTF9LRVlfTlVNQkVSX0VOVFJZKFBNLCBGSzEsIDExLCAiRG90NiIpLAorICBCUkxfS0VZX05VTUJFUl9FTlRSWShQTSwgRksxLCAxMiwgIkRvdDgiKSwKK0VORF9LRVlfTkFNRV9UQUJMRQorCitCRUdJTl9LRVlfTkFNRV9UQUJMRShrZXlib2FyZCkKKyAgQlJMX0tFWV9OQU1FX0VOVFJZKFBNLCBLQkQsIERvdDEsICJEb3QxIiksCisgIEJSTF9LRVlfTkFNRV9FTlRSWShQTSwgS0JELCBEb3QyLCAiRG90MiIpLAorICBCUkxfS0VZX05BTUVfRU5UUlkoUE0sIEtCRCwgRG90MywgIkRvdDMiKSwKKyAgQlJMX0tFWV9OQU1FX0VOVFJZKFBNLCBLQkQsIERvdDQsICJEb3Q0IiksCisgIEJSTF9LRVlfTkFNRV9FTlRSWShQTSwgS0JELCBEb3Q1LCAiRG90NSIpLAorICBCUkxfS0VZX05BTUVfRU5UUlkoUE0sIEtCRCwgRG90NiwgIkRvdDYiKSwKKyAgQlJMX0tFWV9OQU1FX0VOVFJZKFBNLCBLQkQsIERvdDcsICJEb3Q3IiksCisgIEJSTF9LRVlfTkFNRV9FTlRSWShQTSwgS0JELCBEb3Q4LCAiRG90OCIpLAorCisgIEJSTF9LRVlfTkFNRV9FTlRSWShQTSwgS0JELCBTcGFjZSwgIlNwYWNlIiksCisgIEJSTF9LRVlfTkFNRV9FTlRSWShQTSwgS0JELCBMZWZ0U3BhY2UsICJMZWZ0U3BhY2UiKSwKKyAgQlJMX0tFWV9OQU1FX0VOVFJZKFBNLCBLQkQsIFJpZ2h0U3BhY2UsICJSaWdodFNwYWNlIiksCisgIEJSTF9LRVlfTkFNRV9FTlRSWShQTSwgS0JELCBMZWZ0VGh1bWIsICJMZWZ0VGh1bWIiKSwKKyAgQlJMX0tFWV9OQU1FX0VOVFJZKFBNLCBLQkQsIFJpZ2h0VGh1bWIsICJSaWdodFRodW1iIiksCitFTkRfS0VZX05BTUVfVEFCTEUKKworQkVHSU5fS0VZX05BTUVfVEFCTEUocm91dGluZ0tleXMxKQorICBCUkxfS0VZX0dST1VQX0VOVFJZKFBNLCBSSzEsICJSb3V0aW5nS2V5MSIpLAorRU5EX0tFWV9OQU1FX1RBQkxFCisKK0JFR0lOX0tFWV9OQU1FX1RBQkxFKHJvdXRpbmdLZXlzMikKKyAgQlJMX0tFWV9HUk9VUF9FTlRSWShQTSwgUksyLCAiUm91dGluZ0tleTIiKSwKK0VORF9LRVlfTkFNRV9UQUJMRQorCitCRUdJTl9LRVlfTkFNRV9UQUJMRShzdGF0dXNLZXlzMSkKKyAgQlJMX0tFWV9HUk9VUF9FTlRSWShQTSwgU0sxLCAiU3RhdHVzIiksCitFTkRfS0VZX05BTUVfVEFCTEUKKworQkVHSU5fS0VZX05BTUVfVEFCTEUoc3RhdHVzS2V5czIpCisgIEJSTF9LRVlfR1JPVVBfRU5UUlkoUE0sIFNLMiwgIlN0YXR1c0tleTIiKSwKK0VORF9LRVlfTkFNRV9UQUJMRQorCisKK0JFR0lOX0tFWV9OQU1FX1RBQkxFUyhjXzQ4NikKKyAgS0VZX05BTUVfVEFCTEUoZnJvbnQ5KSwKKyAgS0VZX05BTUVfVEFCTEUocm91dGluZ0tleXMxKSwKK0VORF9LRVlfTkFNRV9UQUJMRVMKKworQkVHSU5fS0VZX05BTUVfVEFCTEVTKDJkX2wpCisgIEtFWV9OQU1FX1RBQkxFKGZyb250OSksCisgIEtFWV9OQU1FX1RBQkxFKHN0YXR1c0tleXMxKSwKKyAgS0VZX05BTUVfVEFCTEUocm91dGluZ0tleXMxKSwKK0VORF9LRVlfTkFNRV9UQUJMRVMKKworQkVHSU5fS0VZX05BTUVfVEFCTEVTKGMpCisgIEtFWV9OQU1FX1RBQkxFKGZyb250OSksCisgIEtFWV9OQU1FX1RBQkxFKHJvdXRpbmdLZXlzMSksCitFTkRfS0VZX05BTUVfVEFCTEVTCisKK0JFR0lOX0tFWV9OQU1FX1RBQkxFUygyZF9zKQorICBLRVlfTkFNRV9UQUJMRShmcm9udDEzKSwKKyAgS0VZX05BTUVfVEFCTEUoc3RhdHVzS2V5czEpLAorICBLRVlfTkFNRV9UQUJMRShyb3V0aW5nS2V5czEpLAorRU5EX0tFWV9OQU1FX1RBQkxFUworCitCRUdJTl9LRVlfTkFNRV9UQUJMRVMoaWJfODApCisgIEtFWV9OQU1FX1RBQkxFKGZyb250OSksCisgIEtFWV9OQU1FX1RBQkxFKHN0YXR1c0tleXMxKSwKKyAgS0VZX05BTUVfVEFCTEUocm91dGluZ0tleXMxKSwKK0VORF9LRVlfTkFNRV9UQUJMRVMKKworQkVHSU5fS0VZX05BTUVfVEFCTEVTKGVsXzJkXzQwKQorICBLRVlfTkFNRV9UQUJMRShiYXIpLAorICBLRVlfTkFNRV9UQUJMRShzd2l0Y2hlcyksCisgIEtFWV9OQU1FX1RBQkxFKGtleXMpLAorICBLRVlfTkFNRV9UQUJMRShzdGF0dXNLZXlzMSksCisgIEtFWV9OQU1FX1RBQkxFKHJvdXRpbmdLZXlzMSksCitFTkRfS0VZX05BTUVfVEFCTEVTCisKK0JFR0lOX0tFWV9OQU1FX1RBQkxFUyhlbF8yZF82NikKKyAgS0VZX05BTUVfVEFCTEUoYmFyKSwKKyAgS0VZX05BTUVfVEFCTEUoc3dpdGNoZXMpLAorICBLRVlfTkFNRV9UQUJMRShrZXlzKSwKKyAgS0VZX05BTUVfVEFCTEUoc3RhdHVzS2V5czEpLAorICBLRVlfTkFNRV9UQUJMRShyb3V0aW5nS2V5czEpLAorRU5EX0tFWV9OQU1FX1RBQkxFUworCitCRUdJTl9LRVlfTkFNRV9UQUJMRVMoZWxfODApCisgIEtFWV9OQU1FX1RBQkxFKGJhciksCisgIEtFWV9OQU1FX1RBQkxFKHN3aXRjaGVzKSwKKyAgS0VZX05BTUVfVEFCTEUoa2V5cyksCisgIEtFWV9OQU1FX1RBQkxFKHN0YXR1c0tleXMxKSwKKyAgS0VZX05BTUVfVEFCTEUocm91dGluZ0tleXMxKSwKK0VORF9LRVlfTkFNRV9UQUJMRVMKKworQkVHSU5fS0VZX05BTUVfVEFCTEVTKGVsXzJkXzgwKQorICBLRVlfTkFNRV9UQUJMRShiYXIpLAorICBLRVlfTkFNRV9UQUJMRShzd2l0Y2hlcyksCisgIEtFWV9OQU1FX1RBQkxFKGtleXMpLAorICBLRVlfTkFNRV9UQUJMRShzdGF0dXNLZXlzMSksCisgIEtFWV9OQU1FX1RBQkxFKHJvdXRpbmdLZXlzMSksCitFTkRfS0VZX05BTUVfVEFCTEVTCisKK0JFR0lOX0tFWV9OQU1FX1RBQkxFUyhlbF80MF9wKQorICBLRVlfTkFNRV9UQUJMRShiYXIpLAorICBLRVlfTkFNRV9UQUJMRShzd2l0Y2hlcyksCisgIEtFWV9OQU1FX1RBQkxFKGtleXMpLAorICBLRVlfTkFNRV9UQUJMRShyb3V0aW5nS2V5czEpLAorRU5EX0tFWV9OQU1FX1RBQkxFUworCitCRUdJTl9LRVlfTkFNRV9UQUJMRVMoZWxiYV8zMikKKyAgS0VZX05BTUVfVEFCTEUoYmFyKSwKKyAgS0VZX05BTUVfVEFCTEUoc3dpdGNoZXMpLAorICBLRVlfTkFNRV9UQUJMRShrZXlzKSwKKyAgS0VZX05BTUVfVEFCTEUocm91dGluZ0tleXMxKSwKK0VORF9LRVlfTkFNRV9UQUJMRVMKKworQkVHSU5fS0VZX05BTUVfVEFCTEVTKGVsYmFfMjApCisgIEtFWV9OQU1FX1RBQkxFKGJhciksCisgIEtFWV9OQU1FX1RBQkxFKHN3aXRjaGVzKSwKKyAgS0VZX05BTUVfVEFCTEUoa2V5cyksCisgIEtFWV9OQU1FX1RBQkxFKHJvdXRpbmdLZXlzMSksCitFTkRfS0VZX05BTUVfVEFCTEVTCisKK0JFR0lOX0tFWV9OQU1FX1RBQkxFUyhlbDQwcykKKyAgS0VZX05BTUVfVEFCTEUoYmFyKSwKKyAgS0VZX05BTUVfVEFCTEUoa2V5cyksCisgIEtFWV9OQU1FX1RBQkxFKHJvdXRpbmdLZXlzMSksCitFTkRfS0VZX05BTUVfVEFCTEVTCisKK0JFR0lOX0tFWV9OQU1FX1RBQkxFUyhlbDgwX2lpKQorICBLRVlfTkFNRV9UQUJMRShiYXIpLAorICBLRVlfTkFNRV9UQUJMRShrZXlzKSwKKyAgS0VZX05BTUVfVEFCTEUoc3RhdHVzS2V5czEpLAorICBLRVlfTkFNRV9UQUJMRShyb3V0aW5nS2V5czEpLAorRU5EX0tFWV9OQU1FX1RBQkxFUworCitCRUdJTl9LRVlfTkFNRV9UQUJMRVMoZWw2NnMpCisgIEtFWV9OQU1FX1RBQkxFKGJhciksCisgIEtFWV9OQU1FX1RBQkxFKGtleXMpLAorICBLRVlfTkFNRV9UQUJMRShyb3V0aW5nS2V5czEpLAorICBLRVlfTkFNRV9UQUJMRShyb3V0aW5nS2V5czIpLAorRU5EX0tFWV9OQU1FX1RBQkxFUworCitCRUdJTl9LRVlfTkFNRV9UQUJMRVMoZWw4MHMpCisgIEtFWV9OQU1FX1RBQkxFKGJhciksCisgIEtFWV9OQU1FX1RBQkxFKGtleXMpLAorICBLRVlfTkFNRV9UQUJMRShyb3V0aW5nS2V5czEpLAorICBLRVlfTkFNRV9UQUJMRShyb3V0aW5nS2V5czIpLAorRU5EX0tFWV9OQU1FX1RBQkxFUworCitCRUdJTl9LRVlfTkFNRV9UQUJMRVModHJpbykKKyAgS0VZX05BTUVfVEFCTEUoYmFyKSwKKyAgS0VZX05BTUVfVEFCTEUoa2V5cyksCisgIEtFWV9OQU1FX1RBQkxFKGtleWJvYXJkKSwKKyAgS0VZX05BTUVfVEFCTEUocm91dGluZ0tleXMxKSwKK0VORF9LRVlfTkFNRV9UQUJMRVMKKworQkVHSU5fS0VZX05BTUVfVEFCTEVTKGVsNzBzKQorICBLRVlfTkFNRV9UQUJMRShiYXIpLAorICBLRVlfTkFNRV9UQUJMRShrZXlzKSwKKyAgS0VZX05BTUVfVEFCTEUocm91dGluZ0tleXMxKSwKKyAgS0VZX05BTUVfVEFCTEUocm91dGluZ0tleXMyKSwKK0VORF9LRVlfTkFNRV9UQUJMRVMKKworQkVHSU5fS0VZX05BTUVfVEFCTEVTKGVsMmRfODBzKQorICBLRVlfTkFNRV9UQUJMRShiYXIpLAorICBLRVlfTkFNRV9UQUJMRShrZXlzKSwKKyAgS0VZX05BTUVfVEFCTEUoc3RhdHVzS2V5czEpLAorICBLRVlfTkFNRV9UQUJMRShyb3V0aW5nS2V5czEpLAorICBLRVlfTkFNRV9UQUJMRShyb3V0aW5nS2V5czIpLAorICBLRVlfTkFNRV9UQUJMRShzdGF0dXNLZXlzMiksCitFTkRfS0VZX05BTUVfVEFCTEVTCisKK0JFR0lOX0tFWV9OQU1FX1RBQkxFUyhlbGJfdHJfMjApCisgIEtFWV9OQU1FX1RBQkxFKGJhciksCisgIEtFWV9OQU1FX1RBQkxFKGtleXMpLAorICBLRVlfTkFNRV9UQUJMRShyb3V0aW5nS2V5czEpLAorRU5EX0tFWV9OQU1FX1RBQkxFUworCitCRUdJTl9LRVlfTkFNRV9UQUJMRVMoZWxiX3RyXzMyKQorICBLRVlfTkFNRV9UQUJMRShiYXIpLAorICBLRVlfTkFNRV9UQUJMRShrZXlzKSwKKyAgS0VZX05BTUVfVEFCTEUocm91dGluZ0tleXMxKSwKK0VORF9LRVlfTkFNRV9UQUJMRVMKKworQkVHSU5fS0VZX05BTUVfVEFCTEVTKGVsNDBjKQorICBLRVlfTkFNRV9UQUJMRShiYXIpLAorICBLRVlfTkFNRV9UQUJMRShrZXlzKSwKKyAgS0VZX05BTUVfVEFCTEUocm91dGluZ0tleXMxKSwKKyAgS0VZX05BTUVfVEFCTEUocm91dGluZ0tleXMyKSwKK0VORF9LRVlfTkFNRV9UQUJMRVMKKworQkVHSU5fS0VZX05BTUVfVEFCTEVTKGVsNjBjKQorICBLRVlfTkFNRV9UQUJMRShiYXIpLAorICBLRVlfTkFNRV9UQUJMRShrZXlzKSwKKyAgS0VZX05BTUVfVEFCTEUocm91dGluZ0tleXMxKSwKKyAgS0VZX05BTUVfVEFCTEUocm91dGluZ0tleXMyKSwKK0VORF9LRVlfTkFNRV9UQUJMRVMKKworQkVHSU5fS0VZX05BTUVfVEFCTEVTKGVsODBjKQorICBLRVlfTkFNRV9UQUJMRShiYXIpLAorICBLRVlfTkFNRV9UQUJMRShrZXlzKSwKKyAgS0VZX05BTUVfVEFCTEUocm91dGluZ0tleXMxKSwKKyAgS0VZX05BTUVfVEFCTEUocm91dGluZ0tleXMyKSwKK0VORF9LRVlfTkFNRV9UQUJMRVMKKworQkVHSU5fS0VZX05BTUVfVEFCTEVTKGxpdmUpCisgIEtFWV9OQU1FX1RBQkxFKGJhciksCisgIEtFWV9OQU1FX1RBQkxFKGtleXMpLAorICBLRVlfTkFNRV9UQUJMRShrZXlib2FyZCksCisgIEtFWV9OQU1FX1RBQkxFKHJvdXRpbmdLZXlzMSksCitFTkRfS0VZX05BTUVfVEFCTEVTCisKK0RFRklORV9LRVlfVEFCTEUoY180ODYpCitERUZJTkVfS0VZX1RBQkxFKDJkX2wpCitERUZJTkVfS0VZX1RBQkxFKGMpCitERUZJTkVfS0VZX1RBQkxFKDJkX3MpCitERUZJTkVfS0VZX1RBQkxFKGliXzgwKQorREVGSU5FX0tFWV9UQUJMRShlbF8yZF80MCkKK0RFRklORV9LRVlfVEFCTEUoZWxfMmRfNjYpCitERUZJTkVfS0VZX1RBQkxFKGVsXzgwKQorREVGSU5FX0tFWV9UQUJMRShlbF8yZF84MCkKK0RFRklORV9LRVlfVEFCTEUoZWxfNDBfcCkKK0RFRklORV9LRVlfVEFCTEUoZWxiYV8zMikKK0RFRklORV9LRVlfVEFCTEUoZWxiYV8yMCkKK0RFRklORV9LRVlfVEFCTEUoZWw0MHMpCitERUZJTkVfS0VZX1RBQkxFKGVsODBfaWkpCitERUZJTkVfS0VZX1RBQkxFKGVsNjZzKQorREVGSU5FX0tFWV9UQUJMRShlbDgwcykKK0RFRklORV9LRVlfVEFCTEUodHJpbykKK0RFRklORV9LRVlfVEFCTEUoZWw3MHMpCitERUZJTkVfS0VZX1RBQkxFKGVsMmRfODBzKQorREVGSU5FX0tFWV9UQUJMRShlbGJfdHJfMjApCitERUZJTkVfS0VZX1RBQkxFKGVsYl90cl8zMikKK0RFRklORV9LRVlfVEFCTEUoZWw0MGMpCitERUZJTkVfS0VZX1RBQkxFKGVsNjBjKQorREVGSU5FX0tFWV9UQUJMRShlbDgwYykKK0RFRklORV9LRVlfVEFCTEUobGl2ZSkKKworQkVHSU5fS0VZX1RBQkxFX0xJU1QKKyAgJktFWV9UQUJMRV9ERUZJTklUSU9OKGNfNDg2KSwKKyAgJktFWV9UQUJMRV9ERUZJTklUSU9OKDJkX2wpLAorICAmS0VZX1RBQkxFX0RFRklOSVRJT04oYyksCisgICZLRVlfVEFCTEVfREVGSU5JVElPTigyZF9zKSwKKyAgJktFWV9UQUJMRV9ERUZJTklUSU9OKGliXzgwKSwKKyAgJktFWV9UQUJMRV9ERUZJTklUSU9OKGVsXzJkXzQwKSwKKyAgJktFWV9UQUJMRV9ERUZJTklUSU9OKGVsXzJkXzY2KSwKKyAgJktFWV9UQUJMRV9ERUZJTklUSU9OKGVsXzgwKSwKKyAgJktFWV9UQUJMRV9ERUZJTklUSU9OKGVsXzJkXzgwKSwKKyAgJktFWV9UQUJMRV9ERUZJTklUSU9OKGVsXzQwX3ApLAorICAmS0VZX1RBQkxFX0RFRklOSVRJT04oZWxiYV8zMiksCisgICZLRVlfVEFCTEVfREVGSU5JVElPTihlbGJhXzIwKSwKKyAgJktFWV9UQUJMRV9ERUZJTklUSU9OKGVsNDBzKSwKKyAgJktFWV9UQUJMRV9ERUZJTklUSU9OKGVsODBfaWkpLAorICAmS0VZX1RBQkxFX0RFRklOSVRJT04oZWw2NnMpLAorICAmS0VZX1RBQkxFX0RFRklOSVRJT04oZWw4MHMpLAorICAmS0VZX1RBQkxFX0RFRklOSVRJT04odHJpbyksCisgICZLRVlfVEFCTEVfREVGSU5JVElPTihlbDcwcyksCisgICZLRVlfVEFCTEVfREVGSU5JVElPTihlbDJkXzgwcyksCisgICZLRVlfVEFCTEVfREVGSU5JVElPTihlbGJfdHJfMjApLAorICAmS0VZX1RBQkxFX0RFRklOSVRJT04oZWxiX3RyXzMyKSwKKyAgJktFWV9UQUJMRV9ERUZJTklUSU9OKGVsNDBjKSwKKyAgJktFWV9UQUJMRV9ERUZJTklUSU9OKGVsNjBjKSwKKyAgJktFWV9UQUJMRV9ERUZJTklUSU9OKGVsODBjKSwKKyAgJktFWV9UQUJMRV9ERUZJTklUSU9OKGxpdmUpLAorRU5EX0tFWV9UQUJMRV9MSVNUCisKKworc3RhdGljIGNvbnN0IE1vZGVsRW50cnkgbW9kZWxUYWJsZVtdID0geworICB7IFBNX01PREVMX0lERU5USVRZKDAsIGNfNDg2LCAiQnJhaWxsZVggQ29tcGFjdCA0ODYiLCAxKSwKKyAgICBQTV9DRUxMX0NPVU5UUyg0MCwgMCksCisgICAgUE1fRlJPTlRfS0VZUyg5KQorICB9LAorCisgIHsgUE1fTU9ERUxfSURFTlRJVFkoMSwgMmRfbCwgIkJyYWlsbGVYIDJEIExpdGUgKHBsdXMpIiwgMSksCisgICAgUE1fQ0VMTF9DT1VOVFMoNDAsIDEzKSwKKyAgICBQTV9GUk9OVF9LRVlTKDkpCisgIH0sCisKKyAgeyBQTV9NT0RFTF9JREVOVElUWSgyLCBjLCAiQnJhaWxsZVggQ29tcGFjdC9UaW55IiwgMSksCisgICAgUE1fQ0VMTF9DT1VOVFMoNDAsIDApLAorICAgIFBNX0ZST05UX0tFWVMoOSkKKyAgfSwKKworICB7IFBNX01PREVMX0lERU5USVRZKDMsIDJkX3MsICJCcmFpbGxlWCAyRCBTY3JlZW4gU29mdCIsIDEpLAorICAgIFBNX0NFTExfQ09VTlRTKDgwLCAyMiksCisgICAgUE1fRlJPTlRfS0VZUygxMykKKyAgfSwKKworICB7IFBNX01PREVMX0lERU5USVRZKDYsIGliXzgwLCAiQnJhaWxsZVggSUIgODAgQ1IgU29mdCIsIDEpLAorICAgIFBNX0NFTExfQ09VTlRTKDgwLCA0KSwKKyAgICBQTV9GUk9OVF9LRVlTKDkpCisgIH0sCisKKyAgeyBQTV9NT0RFTF9JREVOVElUWSg2NCwgZWxfMmRfNDAsICJCcmFpbGxlWCBFTCAyRC00MCIsIDEpLAorICAgIFBNX0NFTExfQ09VTlRTKDQwLCAxMyksCisgICAgUE1fQkFSKDEsIDEsIDEsIDEpCisgIH0sCisKKyAgeyBQTV9NT0RFTF9JREVOVElUWSg2NSwgZWxfMmRfNjYsICJCcmFpbGxlWCBFTCAyRC02NiIsIDEpLAorICAgIFBNX0NFTExfQ09VTlRTKDY2LCAxMyksCisgICAgUE1fQkFSKDEsIDEsIDEsIDEpCisgIH0sCisKKyAgeyBQTV9NT0RFTF9JREVOVElUWSg2NiwgZWxfODAsICJCcmFpbGxlWCBFTCA4MCIsIDEpLAorICAgIFBNX0NFTExfQ09VTlRTKDgwLCAyKSwKKyAgICBQTV9CQVIoMSwgMSwgMSwgMSkKKyAgfSwKKworICB7IFBNX01PREVMX0lERU5USVRZKDY3LCBlbF8yZF84MCwgIkJyYWlsbGVYIEVMIDJELTgwIiwgMSksCisgICAgUE1fQ0VMTF9DT1VOVFMoODAsIDIwKSwKKyAgICBQTV9CQVIoMSwgMSwgMSwgMSkKKyAgfSwKKworICB7IFBNX01PREVMX0lERU5USVRZKDY4LCBlbF80MF9wLCAiQnJhaWxsZVggRUwgNDAgUCIsIDEpLAorICAgIFBNX0NFTExfQ09VTlRTKDQwLCAwKSwKKyAgICBQTV9CQVIoMSwgMSwgMSwgMCkKKyAgfSwKKworICB7IFBNX01PREVMX0lERU5USVRZKDY5LCBlbGJhXzMyLCAiQnJhaWxsZVggRWxiYSAzMiIsIDEpLAorICAgIFBNX0NFTExfQ09VTlRTKDMyLCAwKSwKKyAgICBQTV9CQVIoMSwgMSwgMSwgMSkKKyAgfSwKKworICB7IFBNX01PREVMX0lERU5USVRZKDcwLCBlbGJhXzIwLCAiQnJhaWxsZVggRWxiYSAyMCIsIDEpLAorICAgIFBNX0NFTExfQ09VTlRTKDIwLCAwKSwKKyAgICBQTV9CQVIoMSwgMSwgMSwgMSkKKyAgfSwKKworICB7IFBNX01PREVMX0lERU5USVRZKDg1LCBlbDQwcywgIkJyYWlsbGVYIEVMNDBzIiwgMSksCisgICAgUE1fQ0VMTF9DT1VOVFMoNDAsIDApLAorICAgIFBNX0JBUigwLCAwLCAxLCAxKQorICB9LAorCisgIHsgUE1fTU9ERUxfSURFTlRJVFkoODYsIGVsODBfaWksICJCcmFpbGxlWCBFTDgwLUlJIiwgMSksCisgICAgUE1fQ0VMTF9DT1VOVFMoODAsIDIpLAorICAgIFBNX0JBUigwLCAwLCAxLCAxKQorICB9LAorCisgIHsgUE1fTU9ERUxfSURFTlRJVFkoODcsIGVsNjZzLCAiQnJhaWxsZVggRUw2NnMiLCAxKSwKKyAgICBQTV9DRUxMX0NPVU5UUyg2NiwgMCksCisgICAgUE1fQkFSKDAsIDAsIDEsIDEpCisgIH0sCisKKyAgeyBQTV9NT0RFTF9JREVOVElUWSg4OCwgZWw4MHMsICJCcmFpbGxlWCBFTDgwcyIsIDEpLAorICAgIFBNX0NFTExfQ09VTlRTKDgwLCAwKSwKKyAgICBQTV9CQVIoMCwgMCwgMSwgMSkKKyAgfSwKKworICB7IFBNX01PREVMX0lERU5USVRZKDg5LCB0cmlvLCAiQnJhaWxsZVggVHJpbyIsIDIpLAorICAgIFBNX0NFTExfQ09VTlRTKDQwLCAwKSwKKyAgICBQTV9CQVIoMCwgMCwgMSwgMSkKKyAgfSwKKworICB7IFBNX01PREVMX0lERU5USVRZKDkwLCBlbDcwcywgIkJyYWlsbGVYIEVMNzBzIiwgMSksCisgICAgUE1fQ0VMTF9DT1VOVFMoNzAsIDApLAorICAgIFBNX0JBUigwLCAwLCAxLCAxKQorICB9LAorCisgIHsgUE1fTU9ERUxfSURFTlRJVFkoOTEsIGVsMmRfODBzLCAiQnJhaWxsZVggRUwyRC04MHMiLCAxKSwKKyAgICBQTV9DRUxMX0NPVU5UUyg4MCwgMjApLAorICAgIFBNX0JBUigwLCAwLCAxLCAxKQorICB9LAorCisgIHsgUE1fTU9ERUxfSURFTlRJVFkoOTIsIGVsYl90cl8yMCwgIkJyYWlsbGVYIEVsYmEgKFRyaW8gMjApIiwgMiksCisgICAgUE1fQ0VMTF9DT1VOVFMoMjAsIDApLAorICAgIFBNX0JBUigwLCAwLCAxLCAxKQorICB9LAorCisgIHsgUE1fTU9ERUxfSURFTlRJVFkoOTMsIGVsYl90cl8zMiwgIkJyYWlsbGVYIEVsYmEgKFRyaW8gMzIpIiwgMiksCisgICAgUE1fQ0VMTF9DT1VOVFMoMzIsIDApLAorICAgIFBNX0JBUigwLCAwLCAxLCAxKQorICB9LAorCisgIHsgUE1fTU9ERUxfSURFTlRJVFkoOTUsIGVsNDBjLCAiQnJhaWxsZVggRUw0MGMiLCAxKSwKKyAgICBQTV9DRUxMX0NPVU5UUyg0MCwgMCksCisgICAgUE1fQkFSKDAsIDAsIDEsIDEpCisgIH0sCisKKyAgeyBQTV9NT0RFTF9JREVOVElUWSg5NiwgZWw2MGMsICJCcmFpbGxlWCBFTDYwYyIsIDEpLAorICAgIFBNX0NFTExfQ09VTlRTKDYwLCAwKSwKKyAgICBQTV9CQVIoMCwgMCwgMSwgMSkKKyAgfSwKKworICB7IFBNX01PREVMX0lERU5USVRZKDk3LCBlbDgwYywgIkJyYWlsbGVYIEVMODBjIiwgMSksCisgICAgUE1fQ0VMTF9DT1VOVFMoODAsIDApLAorICAgIFBNX0JBUigwLCAwLCAxLCAxKQorICB9LAorCisgIHsgUE1fTU9ERUxfSURFTlRJVFkoOTgsIGxpdmUsICJCcmFpbGxlWCBMaXZlIDQwIiwgMiksCisgICAgUE1fQ0VMTF9DT1VOVFMoNDAsIDApLAorICAgIFBNX0JBUigwLCAwLCAxLCAxKQorICB9LAorCisgIHsgUE1fTU9ERUxfSURFTlRJVFkoOTksIGxpdmUsICJCcmFpbGxlWCBMaXZlKyA0MCIsIDIpLAorICAgIFBNX0NFTExfQ09VTlRTKDQwLCAwKSwKKyAgICBQTV9CQVIoMCwgMCwgMSwgMSkKKyAgfSwKKworICB7IFBNX01PREVMX0lERU5USVRZKDEwMCwgbGl2ZSwgIkJyYWlsbGVYIExpdmUgMjAiLCAyKSwKKyAgICBQTV9DRUxMX0NPVU5UUygyMCwgMCksCisgICAgUE1fQkFSKDAsIDAsIDEsIDEpCisgIH0KK307CisKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgbW9kZWxDb3VudCA9IEFSUkFZX0NPVU5UKG1vZGVsVGFibGUpOwpkaWZmIC0tZ2l0IGEvRHJpdmVycy9CcmFpbGxlL1BlZ2FzdXMvTWFrZWZpbGUuaW4gYi9Ecml2ZXJzL0JyYWlsbGUvUGVnYXN1cy9NYWtlZmlsZS5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYjcyZTczCi0tLSAvZGV2L251bGwKKysrIGIvRHJpdmVycy9CcmFpbGxlL1BlZ2FzdXMvTWFrZWZpbGUuaW4KQEAgLTAsMCArMSwyOCBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorIyAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyMKKyMgQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorIworIyBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorIworIyBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisjIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyMgbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisjCisjIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK0RSSVZFUl9DT0RFID0gcGcKK0RSSVZFUl9OQU1FID0gUGVnYXN1cworRFJJVkVSX1VTQUdFID0gMjAvMjcvNDAvODAKK0RSSVZFUl9WRVJTSU9OID0gCitEUklWRVJfREVWRUxPUEVSUyA9IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4KK2luY2x1ZGUgJChTUkNfVE9QKWJyYWlsbGUubWsKKworYnJhaWxsZS4kTzoKKwkkKENDKSAkKEJSTF9DRkxBR1MpIC1jICQoU1JDX0RJUikvYnJhaWxsZS5jCisKZGlmZiAtLWdpdCBhL0RyaXZlcnMvQnJhaWxsZS9QZWdhc3VzL2JyYWlsbGUuYyBiL0RyaXZlcnMvQnJhaWxsZS9QZWdhc3VzL2JyYWlsbGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YTZiM2Y1Ci0tLSAvZGV2L251bGwKKysrIGIvRHJpdmVycy9CcmFpbGxlL1BlZ2FzdXMvYnJhaWxsZS5jCkBAIC0wLDAgKzEsNjM4IEBACisvKgorICogQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyAqICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyAqCisgKiBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorICoKKyAqIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyAqCisgKiBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisgKi8KKworI2luY2x1ZGUgInByb2xvZ3VlLmgiCisKKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorCisjaW5jbHVkZSAicGFyc2UuaCIKKworLy8jZGVmaW5lIEJSTF9TVEFUVVNfRklFTERTIHNmLi4uCisjZGVmaW5lIEJSTF9IQVZFX1NUQVRVU19DRUxMUworI2luY2x1ZGUgImJybF9kcml2ZXIuaCIKKyNpbmNsdWRlICJicmxkZWZzLXBnLmgiCisKK3N0YXRpYyBjb25zdCBjaGFyIHByb2R1Y3RQcmVmaXhbXSA9ICJQQkMiOworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgcHJvZHVjdFByZWZpeExlbmd0aCA9IHNpemVvZihwcm9kdWN0UHJlZml4KSAtIDE7CisKK3N0YXRpYyBpbnQgcmV3cml0ZVJlcXVpcmVkOworc3RhdGljIHVuc2lnbmVkIGNoYXIgdGV4dENlbGxzWzgwXTsKK3N0YXRpYyB1bnNpZ25lZCBjaGFyIHN0YXR1c0NlbGxzWzJdOworCitCRUdJTl9LRVlfTkFNRV9UQUJMRShhbGwpCisgIEtFWV9OQU1FX0VOVFJZKFBHX0tFWV9MZWZ0U2hpZnQsICJMZWZ0U2hpZnQiKSwKKyAgS0VZX05BTUVfRU5UUlkoUEdfS0VZX1JpZ2h0U2hpZnQsICJSaWdodFNoaWZ0IiksCisgIEtFWV9OQU1FX0VOVFJZKFBHX0tFWV9MZWZ0Q29udHJvbCwgIkxlZnRDb250cm9sIiksCisgIEtFWV9OQU1FX0VOVFJZKFBHX0tFWV9SaWdoVENvbnRyb2wsICJSaWdoVENvbnRyb2wiKSwKKworICBLRVlfTkFNRV9FTlRSWShQR19LRVlfTGVmdCwgIkxlZnQiKSwKKyAgS0VZX05BTUVfRU5UUlkoUEdfS0VZX1JpZ2h0LCAiUmlnaHQiKSwKKyAgS0VZX05BTUVfRU5UUlkoUEdfS0VZX1VwLCAiVXAiKSwKKyAgS0VZX05BTUVfRU5UUlkoUEdfS0VZX0Rvd24sICJEb3duIiksCisKKyAgS0VZX05BTUVfRU5UUlkoUEdfS0VZX0hvbWUsICJIb21lIiksCisgIEtFWV9OQU1FX0VOVFJZKFBHX0tFWV9FbmQsICJFbmQiKSwKKyAgS0VZX05BTUVfRU5UUlkoUEdfS0VZX0VudGVyLCAiRW50ZXIiKSwKKyAgS0VZX05BTUVfRU5UUlkoUEdfS0VZX0VzY2FwZSwgIkVzY2FwZSIpLAorCisgIEtFWV9HUk9VUF9FTlRSWShQR19HUlBfUm91dGluZ0tleXMsICJSb3V0aW5nS2V5IiksCisgIEtFWV9OQU1FX0VOVFJZKFBHX0tFWV9TdGF0dXMrMCwgIlN0YXR1czEiKSwKKyAgS0VZX05BTUVfRU5UUlkoUEdfS0VZX1N0YXR1cysxLCAiU3RhdHVzMiIpLAorRU5EX0tFWV9OQU1FX1RBQkxFCisKK0JFR0lOX0tFWV9OQU1FX1RBQkxFUyhhbGwpCisgIEtFWV9OQU1FX1RBQkxFKGFsbCksCitFTkRfS0VZX05BTUVfVEFCTEVTCisKK0RFRklORV9LRVlfVEFCTEUoYWxsKQorCitCRUdJTl9LRVlfVEFCTEVfTElTVAorICAmS0VZX1RBQkxFX0RFRklOSVRJT04oYWxsKSwKK0VORF9LRVlfVEFCTEVfTElTVAorCit0eXBlZGVmIHN0cnVjdCB7CisgIGludCAoKmlkZW50aWZ5TW9kZWwpIChCcmFpbGxlRGlzcGxheSAqYnJsKTsKKyAgaW50ICgqd3JpdGVDZWxscykgKEJyYWlsbGVEaXNwbGF5ICpicmwsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmNlbGxzLCB1bnNpZ25lZCBpbnQgY291bnQpOworfSBJbnB1dE91dHB1dE1ldGhvZHM7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgaW50ICgqb3BlblBvcnQpIChjb25zdCBjaGFyICpkZXZpY2UpOworICB2b2lkICgqY2xvc2VQb3J0KSAoKTsKKyAgaW50ICgqYXdhaXRJbnB1dCkgKGludCBtaWxsaXNlY29uZHMpOworICBpbnQgKCpyZWFkQnl0ZXMpICh1bnNpZ25lZCBjaGFyICpidWZmZXIsIGludCBsZW5ndGgsIGludCB3YWl0KTsKKyAgaW50ICgqd3JpdGVCeXRlcykgKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZmZlciwgaW50IGxlbmd0aCk7CisgIGNvbnN0IElucHV0T3V0cHV0TWV0aG9kcyAqbWV0aG9kczsKK30gSW5wdXRPdXRwdXRPcGVyYXRpb25zOworc3RhdGljIGNvbnN0IElucHV0T3V0cHV0T3BlcmF0aW9ucyAqaW87CisKK3R5cGVkZWYgZW51bSB7CisgIElQVF9LRVlfTkFWSUdBVElPTiA9IDBYMTMsCisgIElQVF9LRVlfU0lNVUxBVElPTiA9IDBYRkUsCisgIElQVF9LRVlfUk9VVElORyAgICA9IDBYRkYKK30gSW5wdXRQYWNrZXRUeXBlOworCit0eXBlZGVmIHVuaW9uIHsKKyAgdW5zaWduZWQgY2hhciBieXRlc1sxXTsKKworICBjaGFyIHByb2R1Y3RbNDQgKyAxXTsKKworICBzdHJ1Y3QgeworICAgIHVuc2lnbmVkIGNoYXIgdHlwZTsKKworICAgIHVuaW9uIHsKKyAgICAgIHN0cnVjdCB7CisgICAgICAgIHVuc2lnbmVkIGNoYXIgdHlwZTsKKyAgICAgICAgdW5zaWduZWQgY2hhciB2YWx1ZTsKKyAgICAgICAgdW5zaWduZWQgY2hhciByZWxlYXNlOworICAgICAgfSBQQUNLRUQga2V5OworICAgIH0gZmllbGRzOworICB9IFBBQ0tFRCBkYXRhOworfSBQQUNLRUQgSW5wdXRQYWNrZXQ7CisKK3N0YXRpYyB2b2lkCitzZXRDZWxsQ291bnRzIChCcmFpbGxlRGlzcGxheSAqYnJsLCBpbnQgc2l6ZSkgeworICBicmwtPnN0YXR1c0NvbHVtbnMgPSBBUlJBWV9DT1VOVChzdGF0dXNDZWxscyk7CisgIGJybC0+c3RhdHVzUm93cyA9IDE7CisgIGJybC0+dGV4dENvbHVtbnMgPSBzaXplIC0gYnJsLT5zdGF0dXNDb2x1bW5zOworICBicmwtPnRleHRSb3dzID0gMTsKKworICBzZXRCcmFpbGxlS2V5VGFibGUoYnJsLCAmS0VZX1RBQkxFX0RFRklOSVRJT04oYWxsKSk7Cit9CisKK3N0YXRpYyBpbnQKK2dldENlbGxDb3VudHMgKEJyYWlsbGVEaXNwbGF5ICpicmwsIGNoYXIgKnByb2R1Y3QpIHsKKyAgdW5zaWduZWQgaW50IGxlbmd0aCA9IHN0cmxlbihwcm9kdWN0KTsKKworICB7CisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaW5kZXhlc1tdID0gezMsIDQyLCAwfTsKKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyICppbmRleCA9IGluZGV4ZXM7CisKKyAgICB3aGlsZSAoKmluZGV4KSB7CisgICAgICBpZiAoKmluZGV4IDwgbGVuZ3RoKSB7CisgICAgICAgIHVuc2lnbmVkIGNoYXIgc2l6ZSA9IHByb2R1Y3RbKmluZGV4XTsKKyAgICAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2l6ZXNbXSA9IHsyMiwgMjksIDQyLCA4Mn07CisKKyAgICAgICAgaWYgKG1lbWNocihzaXplcywgc2l6ZSwgc2l6ZW9mKHNpemVzKSkpIHsKKyAgICAgICAgICBzZXRDZWxsQ291bnRzKGJybCwgc2l6ZSk7CisgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgIH0KKyAgICAgIH0KKworICAgICAgaW5kZXggKz0gMTsKKyAgICB9CisgIH0KKworICB7CisgICAgc3RhdGljIGNvbnN0IGNoYXIgZGVsaW1pdGVyc1tdID0gIiAiOworICAgIGNoYXIgKndvcmQ7CisKKyAgICBpZiAoKHdvcmQgPSBzdHJ0b2socHJvZHVjdCwgZGVsaW1pdGVycykpKSB7CisgICAgICBpZiAoc3RybmNtcCh3b3JkLCBwcm9kdWN0UHJlZml4LCBwcm9kdWN0UHJlZml4TGVuZ3RoKSA9PSAwKSB7CisgICAgICAgIGlmICgod29yZCA9IHN0cnRvayhOVUxMLCBkZWxpbWl0ZXJzKSkpIHsKKyAgICAgICAgICBpbnQgc2l6ZTsKKworICAgICAgICAgIGlmICghKCp3b3JkICYmIGlzSW50ZWdlcigmc2l6ZSwgd29yZCkpKSBzaXplID0gMDsKKyAgICAgICAgICB3aGlsZSAoc3RydG9rKE5VTEwsIGRlbGltaXRlcnMpKTsKKworICAgICAgICAgIGlmICgoc2l6ZSA+IEFSUkFZX0NPVU5UKHN0YXR1c0NlbGxzKSkgJiYKKyAgICAgICAgICAgICAgKHNpemUgPD0gKEFSUkFZX0NPVU5UKHN0YXR1c0NlbGxzKSArIEFSUkFZX0NPVU5UKHRleHRDZWxscykpKSkgeworICAgICAgICAgICAgc2V0Q2VsbENvdW50cyhicmwsIHNpemUpOworICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICB9CisgICAgfQorICB9CisKKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK3JlYWRCeXRlICh1bnNpZ25lZCBjaGFyICpieXRlLCBpbnQgd2FpdCkgeworICBpbnQgY291bnQgPSBpby0+cmVhZEJ5dGVzKGJ5dGUsIDEsIHdhaXQpOworICBpZiAoY291bnQgPiAwKSByZXR1cm4gMTsKKworICBpZiAoY291bnQgPT0gMCkgZXJybm8gPSBFQUdBSU47CisgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50CityZWFkUGFja2V0IChCcmFpbGxlRGlzcGxheSAqYnJsLCBJbnB1dFBhY2tldCAqcGFja2V0KSB7CisgIHR5cGVkZWYgZW51bSB7CisgICAgSVBHX1BST0RVQ1QsCisgICAgSVBHX0tFWSwKKyAgICBJUEdfREVGQVVMVAorICB9IElucHV0UGFja2V0R3JvdXA7CisgIElucHV0UGFja2V0R3JvdXAgZ3JvdXAgPSBJUEdfREVGQVVMVDsKKworICBpbnQgbGVuZ3RoID0gMTsKKyAgaW50IG9mZnNldCA9IDA7CisKKyAgd2hpbGUgKDEpIHsKKyAgICB1bnNpZ25lZCBjaGFyIGJ5dGU7CisKKyAgICB7CisgICAgICBpbnQgc3RhcnRlZCA9IG9mZnNldCA+IDA7CisgICAgICBpZiAoIXJlYWRCeXRlKCZieXRlLCBzdGFydGVkKSkgeworICAgICAgICBpZiAoc3RhcnRlZCkgbG9nUGFydGlhbFBhY2tldChwYWNrZXQtPmJ5dGVzLCBvZmZzZXQpOworICAgICAgICByZXR1cm4gMDsKKyAgICAgIH0KKyAgICB9CisKKyAgZ290Qnl0ZToKKyAgICBpZiAoIW9mZnNldCkgeworICAgICAgc3dpdGNoIChieXRlKSB7CisgICAgICAgIGNhc2UgSVBUX0tFWV9OQVZJR0FUSU9OOgorICAgICAgICBjYXNlIElQVF9LRVlfU0lNVUxBVElPTjoKKyAgICAgICAgY2FzZSBJUFRfS0VZX1JPVVRJTkc6CisgICAgICAgICAgZ3JvdXAgPSBJUEdfS0VZOworICAgICAgICAgIGxlbmd0aCA9IDQ7CisgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICBpZiAoYnl0ZSA9PSBwcm9kdWN0UHJlZml4WzBdKSB7CisgICAgICAgICAgICBncm91cCA9IElQR19QUk9EVUNUOworICAgICAgICAgICAgbGVuZ3RoID0gc2l6ZW9mKHBhY2tldC0+cHJvZHVjdCkgLSAxOworICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBsb2dJZ25vcmVkQnl0ZShieXRlKTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgIH0KKyAgICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgaW50IHVuZXhwZWN0ZWQgPSAwOworCisgICAgICBzd2l0Y2ggKGdyb3VwKSB7CisgICAgICAgIGNhc2UgSVBHX1BST0RVQ1Q6CisgICAgICAgICAgaWYgKG9mZnNldCA8IHByb2R1Y3RQcmVmaXhMZW5ndGgpIHsKKyAgICAgICAgICAgIGlmIChieXRlICE9IHByb2R1Y3RQcmVmaXhbb2Zmc2V0XSkgdW5leHBlY3RlZCA9IDE7CisgICAgICAgICAgfSBlbHNlIGlmIChieXRlID09ICdAJykgeworICAgICAgICAgICAgbGVuZ3RoID0gb2Zmc2V0ICsgMTsKKyAgICAgICAgICB9CisgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBJUEdfS0VZOgorICAgICAgICAgIGlmIChvZmZzZXQgPT0gMSkgeworICAgICAgICAgICAgaWYgKGJ5dGUgIT0gcGFja2V0LT5ieXRlc1swXSkgdW5leHBlY3RlZCA9IDE7CisgICAgICAgICAgfSBlbHNlIGlmIChvZmZzZXQgPT0gMykgeworICAgICAgICAgICAgaWYgKGJ5dGUgIT0gMFgxOSkgdW5leHBlY3RlZCA9IDE7CisgICAgICAgICAgfQorICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgYnJlYWs7CisgICAgICB9CisKKyAgICAgIGlmICh1bmV4cGVjdGVkKSB7CisgICAgICAgIGxvZ1Nob3J0UGFja2V0KHBhY2tldC0+Ynl0ZXMsIG9mZnNldCk7CisgICAgICAgIGdyb3VwID0gSVBHX0RFRkFVTFQ7CisgICAgICAgIG9mZnNldCA9IDA7CisgICAgICAgIGxlbmd0aCA9IDE7CisgICAgICAgIGdvdG8gZ290Qnl0ZTsKKyAgICAgIH0KKyAgICB9CisKKyAgICBwYWNrZXQtPmJ5dGVzW29mZnNldCsrXSA9IGJ5dGU7CisgICAgaWYgKG9mZnNldCA9PSBsZW5ndGgpIHsKKyAgICAgIGlmIChncm91cCA9PSBJUEdfUFJPRFVDVCkgeworICAgICAgICBwYWNrZXQtPmJ5dGVzW2xlbmd0aF0gPSAwOworICAgICAgfQorCisgICAgICBsb2dJbnB1dFBhY2tldChwYWNrZXQtPmJ5dGVzLCBvZmZzZXQpOworICAgICAgcmV0dXJuIGxlbmd0aDsKKyAgICB9CisgIH0KK30KKworc3RhdGljIGludAord3JpdGVCeXRlcyAoQnJhaWxsZURpc3BsYXkgKmJybCwgY29uc3QgdW5zaWduZWQgY2hhciAqYnVmZmVyLCBpbnQgY291bnQpIHsKKyAgbG9nT3V0cHV0UGFja2V0KGJ1ZmZlciwgY291bnQpOworICBpZiAoaW8tPndyaXRlQnl0ZXMoYnVmZmVyLCBjb3VudCkgIT0gLTEpIHJldHVybiAxOworICByZXR1cm4gMDsKK30KKworc3RhdGljIGludAord3JpdGVDZWxscyAoQnJhaWxsZURpc3BsYXkgKmJybCkgeworICB1bnNpZ25lZCBpbnQgdGV4dENvdW50ID0gYnJsLT50ZXh0Q29sdW1uczsKKyAgdW5zaWduZWQgaW50IHN0YXR1c0NvdW50ID0gYnJsLT5zdGF0dXNDb2x1bW5zOworICB1bnNpZ25lZCBjaGFyIGNlbGxzW3RleHRDb3VudCArIHN0YXR1c0NvdW50XTsKKyAgdW5zaWduZWQgY2hhciAqY2VsbCA9IGNlbGxzOworCisgIHdoaWxlICh0ZXh0Q291bnQpICpjZWxsKysgPSB0cmFuc2xhdGVPdXRwdXRDZWxsKHRleHRDZWxsc1stLXRleHRDb3VudF0pOworICB3aGlsZSAoc3RhdHVzQ291bnQpICpjZWxsKysgPSB0cmFuc2xhdGVPdXRwdXRDZWxsKHN0YXR1c0NlbGxzWy0tc3RhdHVzQ291bnRdKTsKKworICByZXR1cm4gaW8tPm1ldGhvZHMtPndyaXRlQ2VsbHMoYnJsLCBjZWxscywgY2VsbC1jZWxscyk7Cit9CisKK3N0YXRpYyB2b2lkCit1cGRhdGVDZWxscyAodW5zaWduZWQgY2hhciAqdGFyZ2V0LCBjb25zdCB1bnNpZ25lZCBjaGFyICpzb3VyY2UsIHVuc2lnbmVkIGludCBjb3VudCkgeworICBpZiAoY2VsbHNIYXZlQ2hhbmdlZCh0YXJnZXQsIHNvdXJjZSwgY291bnQsIE5VTEwsIE5VTEwsIE5VTEwpKSB7CisgICAgcmV3cml0ZVJlcXVpcmVkID0gMTsKKyAgfQorfQorCisvKiBTZXJpYWwgSU8gKi8KKyNpbmNsdWRlICJpb19zZXJpYWwuaCIKKworc3RhdGljIFNlcmlhbERldmljZSAqc2VyaWFsRGV2aWNlID0gTlVMTDsKKyNkZWZpbmUgU0VSSUFMX0JBVUQgOTYwMAorCitzdGF0aWMgaW50CitvcGVuU2VyaWFsUG9ydCAoY29uc3QgY2hhciAqZGV2aWNlKSB7CisgIGlmICgoc2VyaWFsRGV2aWNlID0gc2VyaWFsT3BlbkRldmljZShkZXZpY2UpKSkgeworICAgIGlmIChzZXJpYWxSZXN0YXJ0RGV2aWNlKHNlcmlhbERldmljZSwgU0VSSUFMX0JBVUQpKQorICAgICAgaWYgKHNlcmlhbFNldEZsb3dDb250cm9sKHNlcmlhbERldmljZSwgU0VSSUFMX0ZMT1dfSEFSRFdBUkUpKQorICAgICAgICByZXR1cm4gMTsKKworICAgIHNlcmlhbENsb3NlRGV2aWNlKHNlcmlhbERldmljZSk7CisgICAgc2VyaWFsRGV2aWNlID0gTlVMTDsKKyAgfQorCisgIHJldHVybiAwOworfQorCitzdGF0aWMgdm9pZAorY2xvc2VTZXJpYWxQb3J0ICh2b2lkKSB7CisgIGlmIChzZXJpYWxEZXZpY2UpIHsKKyAgICBzZXJpYWxDbG9zZURldmljZShzZXJpYWxEZXZpY2UpOworICAgIHNlcmlhbERldmljZSA9IE5VTEw7CisgIH0KK30KKworc3RhdGljIGludAorYXdhaXRTZXJpYWxJbnB1dCAoaW50IG1pbGxpc2Vjb25kcykgeworICByZXR1cm4gc2VyaWFsQXdhaXRJbnB1dChzZXJpYWxEZXZpY2UsIG1pbGxpc2Vjb25kcyk7Cit9CisKK3N0YXRpYyBpbnQKK3JlYWRTZXJpYWxCeXRlcyAodW5zaWduZWQgY2hhciAqYnVmZmVyLCBpbnQgY291bnQsIGludCB3YWl0KSB7CisgIGNvbnN0IGludCB0aW1lb3V0ID0gMTAwOworICByZXR1cm4gc2VyaWFsUmVhZERhdGEoc2VyaWFsRGV2aWNlLCBidWZmZXIsIGNvdW50LAorICAgICAgICAgICAgICAgICAgICAgICAgKHdhaXQ/IHRpbWVvdXQ6IDApLCB0aW1lb3V0KTsKK30KKworc3RhdGljIGludAord3JpdGVTZXJpYWxCeXRlcyAoY29uc3QgdW5zaWduZWQgY2hhciAqYnVmZmVyLCBpbnQgbGVuZ3RoKSB7CisgIHJldHVybiBzZXJpYWxXcml0ZURhdGEoc2VyaWFsRGV2aWNlLCBidWZmZXIsIGxlbmd0aCk7Cit9CisKK3N0YXRpYyBpbnQKK2lkZW50aWZ5U2VyaWFsTW9kZWwgKEJyYWlsbGVEaXNwbGF5ICpicmwpIHsKKyAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgcmVxdWVzdFtdID0gezBYNDAsIDBYNTAsIDBYNTN9OworCisgIGlmICh3cml0ZUJ5dGVzKGJybCwgcmVxdWVzdCwgc2l6ZW9mKHJlcXVlc3QpKSkgeworICAgIHdoaWxlIChpby0+YXdhaXRJbnB1dCgxMDAwKSkgeworICAgICAgSW5wdXRQYWNrZXQgcmVzcG9uc2U7CisKKyAgICAgIHdoaWxlIChyZWFkUGFja2V0KGJybCwgJnJlc3BvbnNlKSkgeworICAgICAgICBpZiAocmVzcG9uc2UuZGF0YS50eXBlID09IHByb2R1Y3RQcmVmaXhbMF0pIHsKKyAgICAgICAgICBpZiAoZ2V0Q2VsbENvdW50cyhicmwsIHJlc3BvbnNlLnByb2R1Y3QpKSB7CisgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9CisgIH0KKworICByZXR1cm4gMDsKK30KKworc3RhdGljIGludAord3JpdGVTZXJpYWxDZWxscyAoQnJhaWxsZURpc3BsYXkgKmJybCwgY29uc3QgdW5zaWduZWQgY2hhciAqY2VsbHMsIHVuc2lnbmVkIGludCBjb3VudCkgeworICBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBoZWFkZXJbXSA9IHswWDQwLCAwWDUwLCAwWDRGfTsKKyAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgdHJhaWxlcltdID0gezBYMTgsIDBYMjAsIDBYMjB9OworCisgIHVuc2lnbmVkIGNoYXIgYnVmZmVyW3NpemVvZihoZWFkZXIpICsgY291bnQgKyBzaXplb2YodHJhaWxlcildOworICB1bnNpZ25lZCBjaGFyICpieXRlID0gYnVmZmVyOworCisgIGJ5dGUgPSBtZW1wY3B5KGJ5dGUsIGhlYWRlciwgc2l6ZW9mKGhlYWRlcikpOworICBieXRlID0gbWVtcGNweShieXRlLCBjZWxscywgY291bnQpOworICBieXRlID0gbWVtcGNweShieXRlLCB0cmFpbGVyLCBzaXplb2YodHJhaWxlcikpOworCisgIHJldHVybiB3cml0ZUJ5dGVzKGJybCwgYnVmZmVyLCBieXRlLWJ1ZmZlcik7Cit9CisKK3N0YXRpYyBjb25zdCBJbnB1dE91dHB1dE1ldGhvZHMgc2VyaWFsTWV0aG9kcyA9IHsKKyAgaWRlbnRpZnlTZXJpYWxNb2RlbCwgd3JpdGVTZXJpYWxDZWxscworfTsKKworc3RhdGljIGNvbnN0IElucHV0T3V0cHV0T3BlcmF0aW9ucyBzZXJpYWxPcGVyYXRpb25zID0geworICBvcGVuU2VyaWFsUG9ydCwgY2xvc2VTZXJpYWxQb3J0LAorICBhd2FpdFNlcmlhbElucHV0LCByZWFkU2VyaWFsQnl0ZXMsIHdyaXRlU2VyaWFsQnl0ZXMsCisgICZzZXJpYWxNZXRob2RzCit9OworCisvKiBVU0IgSU8gKi8KKyNpbmNsdWRlICJpb191c2IuaCIKKworc3RhdGljIFVzYkNoYW5uZWwgKnVzYkNoYW5uZWwgPSBOVUxMOworCitzdGF0aWMgaW50CitvcGVuVXNiUG9ydCAoY29uc3QgY2hhciAqZGV2aWNlKSB7CisgIEJFR0lOX1VTQl9DSEFOTkVMX0RFRklOSVRJT05TCisgICAgeyAvKiBhbGwgbW9kZWxzICovCisgICAgICAudmVuZG9yPTBYNDI0MiwgLnByb2R1Y3Q9MFgwMDAxLAorICAgICAgLmNvbmZpZ3VyYXRpb249MSwgLmludGVyZmFjZT0wLCAuYWx0ZXJuYXRpdmU9MCwKKyAgICAgIC5pbnB1dEVuZHBvaW50PTEsIC5vdXRwdXRFbmRwb2ludD0yCisgICAgfSwKKyAgRU5EX1VTQl9DSEFOTkVMX0RFRklOSVRJT05TCisKKyAgaWYgKCh1c2JDaGFubmVsID0gdXNiT3BlbkNoYW5uZWwodXNiQ2hhbm5lbERlZmluaXRpb25zLCAodm9pZCAqKWRldmljZSkpKSB7CisgICAgcmV0dXJuIDE7CisgIH0KKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkCitjbG9zZVVzYlBvcnQgKHZvaWQpIHsKKyAgaWYgKHVzYkNoYW5uZWwpIHsKKyAgICB1c2JDbG9zZUNoYW5uZWwodXNiQ2hhbm5lbCk7CisgICAgdXNiQ2hhbm5lbCA9IE5VTEw7CisgIH0KK30KKworc3RhdGljIGludAorYXdhaXRVc2JJbnB1dCAoaW50IG1pbGxpc2Vjb25kcykgeworICByZXR1cm4gdXNiQXdhaXRJbnB1dCh1c2JDaGFubmVsLT5kZXZpY2UsCisgICAgICAgICAgICAgICAgICAgICAgIHVzYkNoYW5uZWwtPmRlZmluaXRpb24tPmlucHV0RW5kcG9pbnQsCisgICAgICAgICAgICAgICAgICAgICAgIG1pbGxpc2Vjb25kcyk7Cit9CisKK3N0YXRpYyBpbnQKK3JlYWRVc2JCeXRlcyAodW5zaWduZWQgY2hhciAqYnVmZmVyLCBpbnQgbGVuZ3RoLCBpbnQgd2FpdCkgeworICBjb25zdCBpbnQgdGltZW91dCA9IDEwMDsKKyAgaW50IGNvdW50ID0gdXNiUmVhZERhdGEodXNiQ2hhbm5lbC0+ZGV2aWNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICB1c2JDaGFubmVsLT5kZWZpbml0aW9uLT5pbnB1dEVuZHBvaW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXIsIGxlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKHdhaXQ/IHRpbWVvdXQ6IDApLCB0aW1lb3V0KTsKKworICBpZiAoY291bnQgIT0gLTEpIHJldHVybiBjb3VudDsKKyAgaWYgKGVycm5vID09IEVBR0FJTikgcmV0dXJuIDA7CisgIHJldHVybiAtMTsKK30KKworc3RhdGljIGludAord3JpdGVVc2JCeXRlcyAoY29uc3QgdW5zaWduZWQgY2hhciAqYnVmZmVyLCBpbnQgbGVuZ3RoKSB7CisgIHJldHVybiB1c2JXcml0ZUVuZHBvaW50KHVzYkNoYW5uZWwtPmRldmljZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdXNiQ2hhbm5lbC0+ZGVmaW5pdGlvbi0+b3V0cHV0RW5kcG9pbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlciwgbGVuZ3RoLCAxMDAwKTsKK30KKworc3RhdGljIGludAoraWRlbnRpZnlVc2JNb2RlbCAoQnJhaWxsZURpc3BsYXkgKmJybCkgeworICBpbnQgb2sgPSAwOworICBjaGFyICpwcm9kdWN0OworCisgIGlmICgocHJvZHVjdCA9IHVzYkdldFByb2R1Y3QodXNiQ2hhbm5lbC0+ZGV2aWNlLCAxMDAwKSkpIHsKKyAgICBpZiAoZ2V0Q2VsbENvdW50cyhicmwsIHByb2R1Y3QpKSB7CisgICAgICBvayA9IDE7CisgICAgfQorCisgICAgZnJlZShwcm9kdWN0KTsKKyAgfQorCisgIHJldHVybiBvazsKK30KKworc3RhdGljIGludAord3JpdGVVc2JDZWxscyAoQnJhaWxsZURpc3BsYXkgKmJybCwgY29uc3QgdW5zaWduZWQgY2hhciAqY2VsbHMsIHVuc2lnbmVkIGludCBjb3VudCkgeworICB1bnNpZ25lZCBjaGFyIGJ1ZmZlclsxICsgY291bnRdOworICB1bnNpZ25lZCBjaGFyICpieXRlID0gYnVmZmVyOworCisgICpieXRlKysgPSAwWDQzOworICBieXRlID0gbWVtcGNweShieXRlLCBjZWxscywgY291bnQpOworCisgIHJldHVybiB3cml0ZUJ5dGVzKGJybCwgYnVmZmVyLCBieXRlLWJ1ZmZlcik7Cit9CisKK3N0YXRpYyBjb25zdCBJbnB1dE91dHB1dE1ldGhvZHMgdXNiTWV0aG9kcyA9IHsKKyAgaWRlbnRpZnlVc2JNb2RlbCwgd3JpdGVVc2JDZWxscworfTsKKworc3RhdGljIGNvbnN0IElucHV0T3V0cHV0T3BlcmF0aW9ucyB1c2JPcGVyYXRpb25zID0geworICBvcGVuVXNiUG9ydCwgY2xvc2VVc2JQb3J0LAorICBhd2FpdFVzYklucHV0LCByZWFkVXNiQnl0ZXMsIHdyaXRlVXNiQnl0ZXMsCisgICZ1c2JNZXRob2RzCit9OworCitzdGF0aWMgaW50CiticmxfY29uc3RydWN0IChCcmFpbGxlRGlzcGxheSAqYnJsLCBjaGFyICoqcGFyYW1ldGVycywgY29uc3QgY2hhciAqZGV2aWNlKSB7CisgIGlmIChpc1NlcmlhbERldmljZUlkZW50aWZpZXIoJmRldmljZSkpIHsKKyAgICBpbyA9ICZzZXJpYWxPcGVyYXRpb25zOworICB9IGVsc2UgaWYgKGlzVXNiRGV2aWNlSWRlbnRpZmllcigmZGV2aWNlKSkgeworICAgIGlvID0gJnVzYk9wZXJhdGlvbnM7CisgIH0gZWxzZSB7CisgICAgdW5zdXBwb3J0ZWREZXZpY2VJZGVudGlmaWVyKGRldmljZSk7CisgICAgcmV0dXJuIDA7CisgIH0KKworICBpZiAoaW8tPm9wZW5Qb3J0KGRldmljZSkpIHsKKyAgICBpZiAoaW8tPm1ldGhvZHMtPmlkZW50aWZ5TW9kZWwoYnJsKSkgeworICAgICAgbWFrZU91dHB1dFRhYmxlKGRvdHNUYWJsZV9JU08xMTU0OF8xKTsKKyAgCisgICAgICByZXdyaXRlUmVxdWlyZWQgPSAxOworICAgICAgbWVtc2V0KHRleHRDZWxscywgMCwgc2l6ZW9mKHRleHRDZWxscykpOworICAgICAgbWVtc2V0KHN0YXR1c0NlbGxzLCAwLCBzaXplb2Yoc3RhdHVzQ2VsbHMpKTsKKworICAgICAgcmV0dXJuIDE7CisgICAgfQorCisgICAgaW8tPmNsb3NlUG9ydCgpOworICB9CisKKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkCiticmxfZGVzdHJ1Y3QgKEJyYWlsbGVEaXNwbGF5ICpicmwpIHsKKyAgaW8tPmNsb3NlUG9ydCgpOworfQorCitzdGF0aWMgaW50Citicmxfd3JpdGVXaW5kb3cgKEJyYWlsbGVEaXNwbGF5ICpicmwsIGNvbnN0IHdjaGFyX3QgKnRleHQpIHsKKyAgdXBkYXRlQ2VsbHModGV4dENlbGxzLCBicmwtPmJ1ZmZlciwgYnJsLT50ZXh0Q29sdW1ucyk7CisKKyAgaWYgKHJld3JpdGVSZXF1aXJlZCkgeworICAgIGlmICghd3JpdGVDZWxscyhicmwpKSByZXR1cm4gMDsKKyAgICByZXdyaXRlUmVxdWlyZWQgPSAwOworICB9CisKKyAgcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQKK2JybF93cml0ZVN0YXR1cyAoQnJhaWxsZURpc3BsYXkgKmJybCwgY29uc3QgdW5zaWduZWQgY2hhciAqY2VsbHMpIHsKKyAgdXBkYXRlQ2VsbHMoc3RhdHVzQ2VsbHMsIGNlbGxzLCBicmwtPnN0YXR1c0NvbHVtbnMpOworICByZXR1cm4gMTsKK30KKworc3RhdGljIGludAorZW5xdWV1ZU5hdmlnYXRpb25LZXkgKEJyYWlsbGVEaXNwbGF5ICpicmwsIEtleU51bWJlciBtb2RpZmllciwgS2V5TnVtYmVyIGtleSkgeworICBjb25zdCBLZXlHcm91cCBncm91cCA9IFBHX0dSUF9OYXZpZ2F0aW9uS2V5czsKKyAgY29uc3QgaW50IG1vZGlmaWVyU3BlY2lmaWVkID0gbW9kaWZpZXIgIT0gUEdfS0VZX05vbmU7CisKKyAgaWYgKG1vZGlmaWVyU3BlY2lmaWVkICYmICFlbnF1ZXVlS2V5RXZlbnQoYnJsLCBncm91cCwgbW9kaWZpZXIsIDEpKSByZXR1cm4gMDsKKyAgaWYgKCFlbnF1ZXVlS2V5KGJybCwgZ3JvdXAsIGtleSkpIHJldHVybiAwOworICBpZiAobW9kaWZpZXJTcGVjaWZpZWQgJiYgIWVucXVldWVLZXlFdmVudChicmwsIGdyb3VwLCBtb2RpZmllciwgMCkpIHJldHVybiAwOworICByZXR1cm4gMTsKK30KKworc3RhdGljIGludAoraW50ZXJwcmV0TmF2aWdhdGlvbktleSAoQnJhaWxsZURpc3BsYXkgKmJybCwgdW5zaWduZWQgY2hhciBrZXkpIHsKKyNkZWZpbmUgS0VZKGNvZGUsbW9kaWZpZXIsa2V5KSBjYXNlIChjb2RlKTogcmV0dXJuIGVucXVldWVOYXZpZ2F0aW9uS2V5KGJybCwgKG1vZGlmaWVyKSwgKGtleSkpCisgIHN3aXRjaCAoa2V5KSB7CisgICAgS0VZKDBYMTUsIFBHX0tFWV9Ob25lLCBQR19LRVlfTGVmdCk7CisgICAgS0VZKDBYNEQsIFBHX0tFWV9Ob25lLCBQR19LRVlfUmlnaHQpOworICAgIEtFWSgwWDNELCBQR19LRVlfTm9uZSwgUEdfS0VZX1VwKTsKKyAgICBLRVkoMFg1NCwgUEdfS0VZX05vbmUsIFBHX0tFWV9Eb3duKTsKKworICAgIEtFWSgwWDE2LCBQR19LRVlfTm9uZSwgUEdfS0VZX0hvbWUpOworICAgIEtFWSgwWDFDLCBQR19LRVlfTm9uZSwgUEdfS0VZX0VudGVyKTsKKyAgICBLRVkoMFgzNiwgUEdfS0VZX05vbmUsIFBHX0tFWV9FbmQpOworICAgIEtFWSgwWDJDLCBQR19LRVlfTm9uZSwgUEdfS0VZX0VzY2FwZSk7CisKKyAgICBLRVkoMFgyNywgUEdfS0VZX0xlZnRDb250cm9sLCBQR19LRVlfTGVmdCk7CisgICAgS0VZKDBYMjgsIFBHX0tFWV9MZWZ0Q29udHJvbCwgUEdfS0VZX1JpZ2h0KTsKKyAgICBLRVkoMFgyMSwgUEdfS0VZX0xlZnRDb250cm9sLCBQR19LRVlfVXApOworICAgIEtFWSgwWDIyLCBQR19LRVlfTGVmdENvbnRyb2wsIFBHX0tFWV9Eb3duKTsKKworICAgIEtFWSgwWDNGLCBQR19LRVlfTGVmdENvbnRyb2wsIFBHX0tFWV9FbnRlcik7CisgICAgS0VZKDBYMkYsIFBHX0tFWV9MZWZ0Q29udHJvbCwgUEdfS0VZX0VuZCk7CisgICAgS0VZKDBYNTYsIFBHX0tFWV9MZWZ0Q29udHJvbCwgUEdfS0VZX0VzY2FwZSk7CisKKyAgICBLRVkoMFgxRiwgUEdfS0VZX0xlZnRTaGlmdCwgUEdfS0VZX0xlZnQpOworICAgIEtFWSgwWDIwLCBQR19LRVlfTGVmdFNoaWZ0LCBQR19LRVlfUmlnaHQpOworICAgIEtFWSgwWDVCLCBQR19LRVlfTGVmdFNoaWZ0LCBQR19LRVlfRG93bik7CisKKyAgICBLRVkoMFgxNywgUEdfS0VZX0xlZnRTaGlmdCwgUEdfS0VZX0hvbWUpOworICAgIEtFWSgwWDNBLCBQR19LRVlfTGVmdFNoaWZ0LCBQR19LRVlfRW50ZXIpOworICAgIEtFWSgwWDNCLCBQR19LRVlfTGVmdFNoaWZ0LCBQR19LRVlfRW5kKTsKKyAgICBLRVkoMFgxOCwgUEdfS0VZX0xlZnRTaGlmdCwgUEdfS0VZX0VzY2FwZSk7CisKKyAgICBLRVkoMFgzNywgUEdfS0VZX1JpZ2h0U2hpZnQsIFBHX0tFWV9MZWZ0KTsKKyAgICBLRVkoMFgzMywgUEdfS0VZX1JpZ2h0U2hpZnQsIFBHX0tFWV9SaWdodCk7CisgICAgS0VZKDBYMzgsIFBHX0tFWV9SaWdodFNoaWZ0LCBQR19LRVlfRG93bik7CisKKyAgICBLRVkoMFgyQSwgUEdfS0VZX1JpZ2h0U2hpZnQsIFBHX0tFWV9Ib21lKTsKKyAgICBLRVkoMFgzMSwgUEdfS0VZX1JpZ2h0U2hpZnQsIFBHX0tFWV9FbnRlcik7CisgICAgS0VZKDBYMzIsIFBHX0tFWV9SaWdodFNoaWZ0LCBQR19LRVlfRW5kKTsKKyAgICBLRVkoMFgzMCwgUEdfS0VZX1JpZ2h0U2hpZnQsIFBHX0tFWV9Fc2NhcGUpOworCisgICAgZGVmYXVsdDoKKyAgICAgIGJyZWFrOworICB9CisjdW5kZWYgS0VZCisKKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK2ludGVycHJldFNpbXVsYXRpb25LZXkgKEJyYWlsbGVEaXNwbGF5ICpicmwsIHVuc2lnbmVkIGNoYXIga2V5KSB7CisgIHN3aXRjaCAoa2V5KSB7CisgICAgZGVmYXVsdDoKKyAgICAgIGJyZWFrOworICB9CisKKyAgcmV0dXJuIGludGVycHJldE5hdmlnYXRpb25LZXkoYnJsLCBrZXkpOworfQorCitzdGF0aWMgaW50CiticmxfcmVhZENvbW1hbmQgKEJyYWlsbGVEaXNwbGF5ICpicmwsIEtleVRhYmxlQ29tbWFuZENvbnRleHQgY29udGV4dCkgeworICBJbnB1dFBhY2tldCBwYWNrZXQ7CisgIGludCBsZW5ndGg7CisKKyAgd2hpbGUgKChsZW5ndGggPSByZWFkUGFja2V0KGJybCwgJnBhY2tldCkpKSB7CisgICAgc3dpdGNoIChwYWNrZXQuZGF0YS50eXBlKSB7CisgICAgICBjYXNlIElQVF9LRVlfTkFWSUdBVElPTjoKKyAgICAgICAgaWYgKGludGVycHJldE5hdmlnYXRpb25LZXkoYnJsLCBwYWNrZXQuZGF0YS5maWVsZHMua2V5LnZhbHVlKSkgY29udGludWU7CisgICAgICAgIGJyZWFrOworCisgICAgICBjYXNlIElQVF9LRVlfU0lNVUxBVElPTjoKKyAgICAgICAgaWYgKGludGVycHJldFNpbXVsYXRpb25LZXkoYnJsLCBwYWNrZXQuZGF0YS5maWVsZHMua2V5LnZhbHVlKSkgY29udGludWU7CisgICAgICAgIGJyZWFrOworCisgICAgICBjYXNlIElQVF9LRVlfUk9VVElORzogeworICAgICAgICB1bnNpZ25lZCBjaGFyIGNvZGUgPSBwYWNrZXQuZGF0YS5maWVsZHMua2V5LnZhbHVlOworICAgICAgICBLZXlHcm91cCBncm91cDsKKyAgICAgICAgS2V5TnVtYmVyIG51bWJlcjsKKworICAgICAgICBpZiAoKGNvZGUgPj0gODEpICYmIChjb2RlIDw9IDgyKSkgeworICAgICAgICAgIGdyb3VwID0gUEdfR1JQX05hdmlnYXRpb25LZXlzOworICAgICAgICAgIG51bWJlciA9IFBHX0tFWV9TdGF0dXMgKyAoY29kZSAtIDgxKTsKKyAgICAgICAgfSBlbHNlIGlmICgoY29kZSA+IDApICYmIChjb2RlIDw9IGJybC0+dGV4dENvbHVtbnMpKSB7CisgICAgICAgICAgZ3JvdXAgPSBQR19HUlBfUm91dGluZ0tleXM7CisgICAgICAgICAgbnVtYmVyID0gY29kZSAtIDE7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBlbnF1ZXVlS2V5KGJybCwgZ3JvdXAsIG51bWJlcik7CisgICAgICAgIGNvbnRpbnVlOworICAgICAgfQorCisgICAgICBkZWZhdWx0OgorICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBsb2dVbmV4cGVjdGVkUGFja2V0KHBhY2tldC5ieXRlcywgbGVuZ3RoKTsKKyAgfQorICBpZiAoZXJybm8gIT0gRUFHQUlOKSByZXR1cm4gQlJMX0NNRF9SRVNUQVJUQlJMOworCisgIHJldHVybiBFT0Y7Cit9CmRpZmYgLS1naXQgYS9Ecml2ZXJzL0JyYWlsbGUvUGVnYXN1cy9icmxkZWZzLXBnLmggYi9Ecml2ZXJzL0JyYWlsbGUvUGVnYXN1cy9icmxkZWZzLXBnLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGVmOTU1NwotLS0gL2Rldi9udWxsCisrKyBiL0RyaXZlcnMvQnJhaWxsZS9QZWdhc3VzL2JybGRlZnMtcGcuaApAQCAtMCwwICsxLDQ4IEBACisvKgorICogQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyAqICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyAqCisgKiBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorICoKKyAqIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyAqCisgKiBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisgKi8KKworI2lmbmRlZiBCUkxUVFlfSU5DTFVERURfUEdfQlJMREVGUworI2RlZmluZSBCUkxUVFlfSU5DTFVERURfUEdfQlJMREVGUworCit0eXBlZGVmIGVudW0geworICBQR19LRVlfTm9uZSA9IDAsCisKKyAgUEdfS0VZX0xlZnRTaGlmdCwKKyAgUEdfS0VZX1JpZ2h0U2hpZnQsCisgIFBHX0tFWV9MZWZ0Q29udHJvbCwKKyAgUEdfS0VZX1JpZ2hUQ29udHJvbCwKKworICBQR19LRVlfTGVmdCwKKyAgUEdfS0VZX1JpZ2h0LAorICBQR19LRVlfVXAsCisgIFBHX0tFWV9Eb3duLAorCisgIFBHX0tFWV9Ib21lLAorICBQR19LRVlfRW5kLAorICBQR19LRVlfRW50ZXIsCisgIFBHX0tFWV9Fc2NhcGUsCisKKyAgUEdfS0VZX1N0YXR1cworfSBQR19OYXZpZ2F0aW9uS2V5OworCit0eXBlZGVmIGVudW0geworICBQR19HUlBfTmF2aWdhdGlvbktleXMgPSAwLAorICBQR19HUlBfUm91dGluZ0tleXMKK30gUEdfS2V5R3JvdXA7CisKKyNlbmRpZiAvKiBCUkxUVFlfSU5DTFVERURfUEdfQlJMREVGUyAqLyAKZGlmZiAtLWdpdCBhL0RyaXZlcnMvQnJhaWxsZS9TZWlrYS9NYWtlZmlsZS5pbiBiL0RyaXZlcnMvQnJhaWxsZS9TZWlrYS9NYWtlZmlsZS5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOGVmNjY1Ci0tLSAvZGV2L251bGwKKysrIGIvRHJpdmVycy9CcmFpbGxlL1NlaWthL01ha2VmaWxlLmluCkBAIC0wLDAgKzEsMjggQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyMgICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisjCisjIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyMKKyMgQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitEUklWRVJfQ09ERSA9IHNrCitEUklWRVJfTkFNRSA9IFNlaWthCitEUklWRVJfVVNBR0UgPSAzLzQvNSAoNDApLCA4MCwgTWluaSAoMTYpCitEUklWRVJfVkVSU0lPTiA9IAorRFJJVkVSX0RFVkVMT1BFUlMgPSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+CitpbmNsdWRlICQoU1JDX1RPUClicmFpbGxlLm1rCisKK2JyYWlsbGUuJE86CisJJChDQykgJChCUkxfQ0ZMQUdTKSAtYyAkKFNSQ19ESVIpL2JyYWlsbGUuYworCmRpZmYgLS1naXQgYS9Ecml2ZXJzL0JyYWlsbGUvU2Vpa2EvYnJhaWxsZS5jIGIvRHJpdmVycy9CcmFpbGxlL1NlaWthL2JyYWlsbGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mN2I3ZTE5Ci0tLSAvZGV2L251bGwKKysrIGIvRHJpdmVycy9CcmFpbGxlL1NlaWthL2JyYWlsbGUuYwpAQCAtMCwwICsxLDg1NiBAQAorLyoKKyAqIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisgKiAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisgKgorICogQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKKyNpbmNsdWRlICJwcm9sb2d1ZS5oIgorCisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKworI2luY2x1ZGUgImxvZy5oIgorCisjaW5jbHVkZSAiYnJsX2RyaXZlci5oIgorI2luY2x1ZGUgImJybGRlZnMtc2suaCIKKworQkVHSU5fS0VZX05BTUVfVEFCTEUoZGlzcGxheSkKKyAgS0VZX05BTUVfRU5UUlkoU0tfQkRQX0sxLCAiSzEiKSwKKyAgS0VZX05BTUVfRU5UUlkoU0tfQkRQX0syLCAiSzIiKSwKKyAgS0VZX05BTUVfRU5UUlkoU0tfQkRQX0szLCAiSzMiKSwKKyAgS0VZX05BTUVfRU5UUlkoU0tfQkRQX0s0LCAiSzQiKSwKKyAgS0VZX05BTUVfRU5UUlkoU0tfQkRQX0s1LCAiSzUiKSwKKyAgS0VZX05BTUVfRU5UUlkoU0tfQkRQX0s2LCAiSzYiKSwKKyAgS0VZX05BTUVfRU5UUlkoU0tfQkRQX0s3LCAiSzciKSwKKyAgS0VZX05BTUVfRU5UUlkoU0tfQkRQX0s4LCAiSzgiKSwKK0VORF9LRVlfTkFNRV9UQUJMRQorCitCRUdJTl9LRVlfTkFNRV9UQUJMRShub3RldGFrZXIpCisgIEtFWV9OQU1FX0VOVFJZKFNLX05US19Eb3QxLCAiRG90MSIpLAorICBLRVlfTkFNRV9FTlRSWShTS19OVEtfRG90MiwgIkRvdDIiKSwKKyAgS0VZX05BTUVfRU5UUlkoU0tfTlRLX0RvdDMsICJEb3QzIiksCisgIEtFWV9OQU1FX0VOVFJZKFNLX05US19Eb3Q0LCAiRG90NCIpLAorICBLRVlfTkFNRV9FTlRSWShTS19OVEtfRG90NSwgIkRvdDUiKSwKKyAgS0VZX05BTUVfRU5UUlkoU0tfTlRLX0RvdDYsICJEb3Q2IiksCisgIEtFWV9OQU1FX0VOVFJZKFNLX05US19Eb3Q3LCAiRG90NyIpLAorICBLRVlfTkFNRV9FTlRSWShTS19OVEtfRG90OCwgIkRvdDgiKSwKKworICBLRVlfTkFNRV9FTlRSWShTS19OVEtfQmFja3NwYWNlLCAiQmFja3NwYWNlIiksCisgIEtFWV9OQU1FX0VOVFJZKFNLX05US19TcGFjZSwgIlNwYWNlIiksCisKKyAgS0VZX05BTUVfRU5UUlkoU0tfTlRLX0xlZnRCdXR0b24sICJMZWZ0QnV0dG9uIiksCisgIEtFWV9OQU1FX0VOVFJZKFNLX05US19SaWdodEJ1dHRvbiwgIlJpZ2h0QnV0dG9uIiksCisKKyAgS0VZX05BTUVfRU5UUlkoU0tfTlRLX0xlZnRKb3lzdGlja1ByZXNzLCAiTGVmdEpveXN0aWNrUHJlc3MiKSwKKyAgS0VZX05BTUVfRU5UUlkoU0tfTlRLX0xlZnRKb3lzdGlja0xlZnQsICJMZWZ0Sm95c3RpY2tMZWZ0IiksCisgIEtFWV9OQU1FX0VOVFJZKFNLX05US19MZWZ0Sm95c3RpY2tSaWdodCwgIkxlZnRKb3lzdGlja1JpZ2h0IiksCisgIEtFWV9OQU1FX0VOVFJZKFNLX05US19MZWZ0Sm95c3RpY2tVcCwgIkxlZnRKb3lzdGlja1VwIiksCisgIEtFWV9OQU1FX0VOVFJZKFNLX05US19MZWZ0Sm95c3RpY2tEb3duLCAiTGVmdEpveXN0aWNrRG93biIpLAorCisgIEtFWV9OQU1FX0VOVFJZKFNLX05US19SaWdodEpveXN0aWNrUHJlc3MsICJSaWdodEpveXN0aWNrUHJlc3MiKSwKKyAgS0VZX05BTUVfRU5UUlkoU0tfTlRLX1JpZ2h0Sm95c3RpY2tMZWZ0LCAiUmlnaHRKb3lzdGlja0xlZnQiKSwKKyAgS0VZX05BTUVfRU5UUlkoU0tfTlRLX1JpZ2h0Sm95c3RpY2tSaWdodCwgIlJpZ2h0Sm95c3RpY2tSaWdodCIpLAorICBLRVlfTkFNRV9FTlRSWShTS19OVEtfUmlnaHRKb3lzdGlja1VwLCAiUmlnaHRKb3lzdGlja1VwIiksCisgIEtFWV9OQU1FX0VOVFJZKFNLX05US19SaWdodEpveXN0aWNrRG93biwgIlJpZ2h0Sm95c3RpY2tEb3duIiksCitFTkRfS0VZX05BTUVfVEFCTEUKKworQkVHSU5fS0VZX05BTUVfVEFCTEUocm91dGluZykKKyAgS0VZX0dST1VQX0VOVFJZKFNLX0dSUF9Sb3V0aW5nS2V5cywgIlJvdXRpbmdLZXkiKSwKK0VORF9LRVlfTkFNRV9UQUJMRQorCitCRUdJTl9LRVlfTkFNRV9UQUJMRVMoYmRwKQorICBLRVlfTkFNRV9UQUJMRShkaXNwbGF5KSwKKyAgS0VZX05BTUVfVEFCTEUocm91dGluZyksCitFTkRfS0VZX05BTUVfVEFCTEVTCisKK0JFR0lOX0tFWV9OQU1FX1RBQkxFUyhudGspCisgIEtFWV9OQU1FX1RBQkxFKG5vdGV0YWtlciksCisgIEtFWV9OQU1FX1RBQkxFKHJvdXRpbmcpLAorRU5EX0tFWV9OQU1FX1RBQkxFUworCitERUZJTkVfS0VZX1RBQkxFKGJkcCkKK0RFRklORV9LRVlfVEFCTEUobnRrKQorCitCRUdJTl9LRVlfVEFCTEVfTElTVAorICAmS0VZX1RBQkxFX0RFRklOSVRJT04oYmRwKSwKKyAgJktFWV9UQUJMRV9ERUZJTklUSU9OKG50ayksCitFTkRfS0VZX1RBQkxFX0xJU1QKKwordHlwZWRlZiBlbnVtIHsKKyAgSVBUX2lkZW50aXR5LAorICBJUFRfa2V5cywKKyAgSVBUX3JvdXRpbmcsCisgIElQVF9jb21iaW5lZAorfSBJbnB1dFBhY2tldFR5cGU7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgdW5zaWduZWQgY2hhciBieXRlc1s0ICsgMFhGRl07CisgIHVuc2lnbmVkIGNoYXIgdHlwZTsKKworICB1bmlvbiB7CisgICAgS2V5TnVtYmVyU2V0IGtleXM7CisgICAgY29uc3QgdW5zaWduZWQgY2hhciAqcm91dGluZzsKKworICAgIHN0cnVjdCB7CisgICAgICBLZXlOdW1iZXJTZXQga2V5czsKKyAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnJvdXRpbmc7CisgICAgfSBjb21iaW5lZDsKKworICAgIHN0cnVjdCB7CisgICAgICB1bnNpZ25lZCBjaGFyIGNlbGxDb3VudDsKKyAgICAgIHVuc2lnbmVkIGNoYXIga2V5Q291bnQ7CisgICAgICB1bnNpZ25lZCBjaGFyIHJvdXRpbmdDb3VudDsKKyAgICB9IGlkZW50aXR5OworICB9IGZpZWxkczsKK30gSW5wdXRQYWNrZXQ7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgY29uc3QgY2hhciAqbmFtZTsKKyAgY29uc3QgS2V5VGFibGVEZWZpbml0aW9uICprZXlUYWJsZURlZmluaXRpb247CisgIHZvaWQgKCppbml0aWFsaXplRGF0YSkgKHZvaWQpOworICBpbnQgKCpyZWFkUGFja2V0KSAoQnJhaWxsZURpc3BsYXkgKmJybCwgSW5wdXRQYWNrZXQgKnBhY2tldCk7CisgIEJyYWlsbGVSZXF1ZXN0V3JpdGVyICp3cml0ZUlkZW50aWZ5UmVxdWVzdDsKKyAgaW50ICgqd3JpdGVDZWxscykgKEJyYWlsbGVEaXNwbGF5ICpicmwpOworfSBQcm90b2NvbE9wZXJhdGlvbnM7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgY29uc3QgUHJvdG9jb2xPcGVyYXRpb25zICpjb25zdCAqcHJvdG9jb2xzOworfSBJbnB1dE91dHB1dE9wZXJhdGlvbnM7CisKK3N0YXRpYyBjb25zdCBJbnB1dE91dHB1dE9wZXJhdGlvbnMgKmlvOworc3RhdGljIGNvbnN0IFByb3RvY29sT3BlcmF0aW9ucyAqcHJvdG9jb2w7CisKK3N0YXRpYyB1bnNpZ25lZCBjaGFyIGtleUNvdW50Oworc3RhdGljIHVuc2lnbmVkIGNoYXIgcm91dGluZ0NvdW50OworCitzdGF0aWMgdW5zaWduZWQgY2hhciBmb3JjZVJld3JpdGU7CitzdGF0aWMgdW5zaWduZWQgY2hhciB0ZXh0Q2VsbHNbODBdOworCitzdGF0aWMgc2l6ZV90CityZWFkUGFja2V0IChCcmFpbGxlRGlzcGxheSAqYnJsLCB2b2lkICpwYWNrZXQsIHNpemVfdCBzaXplKSB7CisgIHJldHVybiBwcm90b2NvbC0+cmVhZFBhY2tldChicmwsIHBhY2tldCk7Cit9CisKK3N0YXRpYyBpbnQKK3dyaXRlUGFja2V0IChCcmFpbGxlRGlzcGxheSAqYnJsLCBjb25zdCB2b2lkICpwYWNrZXQsIHNpemVfdCBzaXplKSB7CisgIHJldHVybiB3cml0ZUJyYWlsbGVQYWNrZXQoYnJsLCBOVUxMLCBwYWNrZXQsIHNpemUpOworfQorCitzdGF0aWMgQnJhaWxsZVJlc3BvbnNlUmVzdWx0Citpc0lkZW50aXR5UmVzcG9uc2UgKEJyYWlsbGVEaXNwbGF5ICpicmwsIGNvbnN0IHZvaWQgKnBhY2tldCwgc2l6ZV90IHNpemUpIHsKKyAgY29uc3QgSW5wdXRQYWNrZXQgKnJlc3BvbnNlID0gcGFja2V0OworCisgIHJldHVybiAocmVzcG9uc2UtPnR5cGUgPT0gSVBUX2lkZW50aXR5KT8gQlJMX1JTUF9ET05FOiBCUkxfUlNQX1VORVhQRUNURUQ7Cit9CisKK3R5cGVkZWYgZW51bSB7CisgIFRCVF9BTlkgPSAwWDgwLAorICBUQlRfREVDSU1BTCwKKyAgVEJUX1NJWkUsCisgIFRCVF9JRDEsCisgIFRCVF9JRDIsCisgIFRCVF9LRVlTCit9IFRlbXBsYXRlQnl0ZVR5cGU7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgY29uc3QgdW5zaWduZWQgY2hhciAqYnl0ZXM7CisgIHVuc2lnbmVkIGNoYXIgbGVuZ3RoOworICB1bnNpZ25lZCBjaGFyIHR5cGU7Cit9IFRlbXBsYXRlRW50cnk7CisKKyNkZWZpbmUgVEVNUExBVEVfRU5UUlkobmFtZSkgeyBcCisgIC5ieXRlcyA9IHRlbXBsYXRlU3RyaW5nXyMjbmFtZSwgXAorICAubGVuZ3RoID0gc2l6ZW9mKHRlbXBsYXRlU3RyaW5nXyMjbmFtZSksIFwKKyAgLnR5cGUgPSBJUFRfIyNuYW1lIFwKK30KKworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgdGVtcGxhdGVTdHJpbmdfa2V5c1tdID0geworICBUQlRfS0VZUywgVEJUX0tFWVMKK307CitzdGF0aWMgY29uc3QgVGVtcGxhdGVFbnRyeSB0ZW1wbGF0ZUVudHJ5X2tleXMgPSBURU1QTEFURV9FTlRSWShrZXlzKTsKKworc3RhdGljIGludAorbnR2V3JpdGVDZWxsczAgKEJyYWlsbGVEaXNwbGF5ICpicmwpIHsKKyAgcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQKK250dldyaXRlQ2VsbHM0MCAoQnJhaWxsZURpc3BsYXkgKmJybCkgeworICBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBoZWFkZXJbXSA9IHsKKyAgICAwWEZGLCAwWEZGLAorICAgIDBYNzMsIDBYNjUsIDBYNjksIDBYNkIsIDBYNjEsCisgICAgMFgwMAorICB9OworCisgIHVuc2lnbmVkIGNoYXIgcGFja2V0W3NpemVvZihoZWFkZXIpICsgKGJybC0+dGV4dENvbHVtbnMqMildOworICB1bnNpZ25lZCBjaGFyICpieXRlID0gcGFja2V0OworCisgIGJ5dGUgPSBtZW1wY3B5KGJ5dGUsIGhlYWRlciwgc2l6ZW9mKGhlYWRlcikpOworCisgIHsKKyAgICB1bnNpZ25lZCBpbnQgaTsKKworICAgIGZvciAoaT0wOyBpPGJybC0+dGV4dENvbHVtbnM7IGkrPTEpIHsKKyAgICAgICpieXRlKysgPSAwOworICAgICAgKmJ5dGUrKyA9IHRyYW5zbGF0ZU91dHB1dENlbGwodGV4dENlbGxzW2ldKTsKKyAgICB9CisgIH0KKworICByZXR1cm4gd3JpdGVQYWNrZXQoYnJsLCBwYWNrZXQsIGJ5dGUtcGFja2V0KTsKK30KKworc3RhdGljIGludAorbnR2V3JpdGVDZWxsczgwIChCcmFpbGxlRGlzcGxheSAqYnJsKSB7CisgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhlYWRlcltdID0geworICAgIDBYRkYsIDBYRkYsCisgICAgMFg3MywgMFgzOCwgMFgzMCwKKyAgICAwWDAwLCAwWDAwLCAwWDAwCisgIH07CisKKyAgdW5zaWduZWQgY2hhciBwYWNrZXRbc2l6ZW9mKGhlYWRlcikgKyBicmwtPnRleHRDb2x1bW5zXTsKKyAgdW5zaWduZWQgY2hhciAqYnl0ZSA9IHBhY2tldDsKKworICBieXRlID0gbWVtcGNweShieXRlLCBoZWFkZXIsIHNpemVvZihoZWFkZXIpKTsKKyAgYnl0ZSA9IHRyYW5zbGF0ZU91dHB1dENlbGxzKGJ5dGUsIHRleHRDZWxscywgYnJsLT50ZXh0Q29sdW1ucyk7CisgIHJldHVybiB3cml0ZVBhY2tldChicmwsIHBhY2tldCwgYnl0ZS1wYWNrZXQpOworfQorCit0eXBlZGVmIHN0cnVjdCB7CisgIGludCAoKm50dldyaXRlQ2VsbHMpIChCcmFpbGxlRGlzcGxheSAqYnJsKTsKKyAgY29uc3QgVGVtcGxhdGVFbnRyeSAqcm91dGluZ1RlbXBsYXRlOworfSBNb2RlbEVudHJ5OworCitzdGF0aWMgY29uc3QgTW9kZWxFbnRyeSAqYmRwTW9kZWw7CisKK3N0YXRpYyBpbnQKK2JkcFNldE1vZGVsICh1bnNpZ25lZCBjaGFyIGNlbGxDb3VudCkgeworICBzd2l0Y2ggKGNlbGxDb3VudCkgeworICAgIGNhc2UgMDogeworICAgICAgc3RhdGljIGNvbnN0IE1vZGVsRW50cnkgbW9kZWxFbnRyeSA9IHsKKyAgICAgICAgLm50dldyaXRlQ2VsbHMgPSBudHZXcml0ZUNlbGxzMAorICAgICAgfTsKKworICAgICAgYmRwTW9kZWwgPSAmbW9kZWxFbnRyeTsKKyAgICAgIHJldHVybiAxOworICAgIH0KKworICAgIGNhc2UgNDA6IHsKKyAgICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHRlbXBsYXRlU3RyaW5nX3JvdXRpbmdbXSA9IHsKKyAgICAgICAgMFgwMCwgMFgwOCwgMFgwOSwgMFgwMCwgMFgwMCwgMFgwMCwgMFgwMCwKKyAgICAgICAgVEJUX0FOWSwgVEJUX0FOWSwgVEJUX0FOWSwgVEJUX0FOWSwgVEJUX0FOWSwKKyAgICAgICAgMFgwMCwgMFgwOCwgMFgwOSwgMFgwMCwgMFgwMCwgMFgwMCwgMFgwMCwKKyAgICAgICAgMFgwMCwgMFgwMCwgMFgwMCwgMFgwMCwgMFgwMAorICAgICAgfTsKKyAgICAgIHN0YXRpYyBjb25zdCBUZW1wbGF0ZUVudHJ5IHRlbXBsYXRlRW50cnlfcm91dGluZyA9IFRFTVBMQVRFX0VOVFJZKHJvdXRpbmcpOworCisgICAgICBzdGF0aWMgY29uc3QgTW9kZWxFbnRyeSBtb2RlbEVudHJ5ID0geworICAgICAgICAubnR2V3JpdGVDZWxscyA9IG50dldyaXRlQ2VsbHM0MCwKKyAgICAgICAgLnJvdXRpbmdUZW1wbGF0ZSA9ICZ0ZW1wbGF0ZUVudHJ5X3JvdXRpbmcKKyAgICAgIH07CisKKyAgICAgIGJkcE1vZGVsID0gJm1vZGVsRW50cnk7CisgICAgICByZXR1cm4gMTsKKyAgICB9CisKKyAgICBjYXNlIDgwOiB7CisgICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciB0ZW1wbGF0ZVN0cmluZ19yb3V0aW5nW10gPSB7CisgICAgICAgIDBYMDAsIDBYMDgsIDBYMEYsIDBYMDAsIDBYMDAsIDBYMDAsIDBYMDAsCisgICAgICAgIFRCVF9BTlksIFRCVF9BTlksIFRCVF9BTlksIFRCVF9BTlksIFRCVF9BTlksCisgICAgICAgIFRCVF9BTlksIFRCVF9BTlksIFRCVF9BTlksIFRCVF9BTlksIFRCVF9BTlksCisgICAgICAgIDBYMDAsIDBYMDAsIDBYMDAsIDBYMDAsIDBYMDAKKyAgICAgIH07CisgICAgICBzdGF0aWMgY29uc3QgVGVtcGxhdGVFbnRyeSB0ZW1wbGF0ZUVudHJ5X3JvdXRpbmcgPSBURU1QTEFURV9FTlRSWShyb3V0aW5nKTsKKworICAgICAgc3RhdGljIGNvbnN0IE1vZGVsRW50cnkgbW9kZWxFbnRyeSA9IHsKKyAgICAgICAgLm50dldyaXRlQ2VsbHMgPSBudHZXcml0ZUNlbGxzODAsCisgICAgICAgIC5yb3V0aW5nVGVtcGxhdGUgPSAmdGVtcGxhdGVFbnRyeV9yb3V0aW5nCisgICAgICB9OworCisgICAgICBiZHBNb2RlbCA9ICZtb2RlbEVudHJ5OworICAgICAgcmV0dXJuIDE7CisgICAgfQorCisgICAgZGVmYXVsdDoKKyAgICAgIGJyZWFrOworICB9CisKKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkCitiZHBJbml0aWFsaXplRGF0YSAodm9pZCkgeworICBiZHBTZXRNb2RlbCgwKTsKK30KKwordHlwZWRlZiBzdHJ1Y3QgeworICBjb25zdCBUZW1wbGF0ZUVudHJ5ICpjb25zdCAqY29uc3QgdGVtcGxhdGVzOworICBjb25zdCBUZW1wbGF0ZUVudHJ5ICp0ZW1wbGF0ZTsKKyAgY29uc3QgVGVtcGxhdGVFbnRyeSAqY29uc3QgYWx0ZXJuYXRlOworfSBCZHBSZWFkUGFja2V0RGF0YTsKKworc3RhdGljIEJyYWlsbGVQYWNrZXRWZXJpZmllclJlc3VsdAorYmRwVmVyaWZ5UGFja2V0ICgKKyAgQnJhaWxsZURpc3BsYXkgKmJybCwKKyAgdW5zaWduZWQgY2hhciAqYnl0ZXMsIHNpemVfdCBzaXplLAorICBzaXplX3QgKmxlbmd0aCwgdm9pZCAqZGF0YQorKSB7CisgIEJkcFJlYWRQYWNrZXREYXRhICpycGQgPSBkYXRhOworICBzaXplX3Qgb2Zmc2V0ID0gc2l6ZSAtIDE7CisgIHVuc2lnbmVkIGNoYXIgYnl0ZSA9IGJ5dGVzW29mZnNldF07CisKK2NoZWNrQnl0ZToKKyAgc3dpdGNoIChzaXplKSB7CisgICAgY2FzZSAxOiB7CisgICAgICBjb25zdCBUZW1wbGF0ZUVudHJ5ICpjb25zdCAqdGVtcGxhdGVBZGRyZXNzID0gcnBkLT50ZW1wbGF0ZXM7CisKKyAgICAgIHdoaWxlICgocnBkLT50ZW1wbGF0ZSA9ICp0ZW1wbGF0ZUFkZHJlc3MrKykpIHsKKyAgICAgICAgaWYgKGJ5dGUgPT0gKnJwZC0+dGVtcGxhdGUtPmJ5dGVzKSBicmVhazsKKyAgICAgIH0KKworICAgICAgaWYgKCFycGQtPnRlbXBsYXRlKSB7CisgICAgICAgIGlmICgoYnl0ZSAmIDBYRTApICE9IDBYNjApIHJldHVybiBCUkxfUFZSX0lOVkFMSUQ7CisgICAgICAgIHJwZC0+dGVtcGxhdGUgPSAmdGVtcGxhdGVFbnRyeV9rZXlzOworICAgICAgfQorCisgICAgICBicmVhazsKKyAgICB9CisKKyAgICBkZWZhdWx0OiB7CisgICAgICB1bnNpZ25lZCBjaGFyIHR5cGUgPSBycGQtPnRlbXBsYXRlLT5ieXRlc1tvZmZzZXRdOworCisgICAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICAgICAgY2FzZSBUQlRfQU5ZOgorICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgVEJUX0RFQ0lNQUw6CisgICAgICAgICAgaWYgKGJ5dGUgPCAnMCcpIGdvdG8gdW5leHBlY3RlZEJ5dGU7CisgICAgICAgICAgaWYgKGJ5dGUgPiAnOScpIGdvdG8gdW5leHBlY3RlZEJ5dGU7CisgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBUQlRfU0laRToKKyAgICAgICAgICBpZiAoYnl0ZSA9PSA0MCkgYnJlYWs7CisgICAgICAgICAgaWYgKGJ5dGUgPT0gODApIGJyZWFrOworICAgICAgICAgIGdvdG8gdW5leHBlY3RlZEJ5dGU7CisKKyAgICAgICAgY2FzZSBUQlRfSUQxOgorICAgICAgICAgIGlmICghc3RyY2hyKCIzNDU4IiwgYnl0ZSkpIGdvdG8gdW5leHBlY3RlZEJ5dGU7CisgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBUQlRfSUQyOgorICAgICAgICAgIGlmICghc3RyY2hyKCIwICIsIGJ5dGUpKSBnb3RvIHVuZXhwZWN0ZWRCeXRlOworICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgVEJUX0tFWVM6CisgICAgICAgICAgaWYgKChieXRlICYgMFhFMCkgIT0gMFhFMCkgZ290byB1bmV4cGVjdGVkQnl0ZTsKKyAgICAgICAgICBicmVhazsKKworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgIGlmIChieXRlICE9IHR5cGUpIGdvdG8gdW5leHBlY3RlZEJ5dGU7CisgICAgICAgICAgYnJlYWs7CisgICAgICB9CisKKyAgICAgIGJyZWFrOworICAgIH0KKyAgfQorCisgICpsZW5ndGggPSBycGQtPnRlbXBsYXRlLT5sZW5ndGg7CisgIHJldHVybiBCUkxfUFZSX0lOQ0xVREU7CisKK3VuZXhwZWN0ZWRCeXRlOgorICBpZiAoKG9mZnNldCA9PSAxKSAmJiAocnBkLT50ZW1wbGF0ZS0+dHlwZSA9PSBJUFRfaWRlbnRpdHkpKSB7CisgICAgcnBkLT50ZW1wbGF0ZSA9IHJwZC0+YWx0ZXJuYXRlOworICAgIGdvdG8gY2hlY2tCeXRlOworICB9CisKKyAgcmV0dXJuIEJSTF9QVlJfSU5WQUxJRDsKK30KKworc3RhdGljIGludAorYmRwUmVhZFBhY2tldCAoCisgIEJyYWlsbGVEaXNwbGF5ICpicmwsCisgIElucHV0UGFja2V0ICpwYWNrZXQsCisgIGNvbnN0IFRlbXBsYXRlRW50cnkgKmlkZW50aXR5VGVtcGxhdGUsCisgIGNvbnN0IFRlbXBsYXRlRW50cnkgKmFsdGVybmF0ZVRlbXBsYXRlLAorICB2b2lkICgqaW50ZXJwcmV0SWRlbnRpdHkpIChJbnB1dFBhY2tldCAqcGFja2V0KQorKSB7CisgIGNvbnN0IFRlbXBsYXRlRW50cnkgKmNvbnN0IHRlbXBsYXRlVGFibGVbXSA9IHsKKyAgICBpZGVudGl0eVRlbXBsYXRlLAorICAgIGJkcE1vZGVsLT5yb3V0aW5nVGVtcGxhdGUsCisgICAgTlVMTAorICB9OworCisgIEJkcFJlYWRQYWNrZXREYXRhIHJwZCA9IHsKKyAgICAudGVtcGxhdGVzID0gdGVtcGxhdGVUYWJsZSwKKyAgICAuYWx0ZXJuYXRlID0gYWx0ZXJuYXRlVGVtcGxhdGUsCisgICAgLnRlbXBsYXRlID0gTlVMTAorICB9OworCisgIHNpemVfdCBsZW5ndGggPSByZWFkQnJhaWxsZVBhY2tldChicmwsIE5VTEwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWNrZXQtPmJ5dGVzLCBzaXplb2YocGFja2V0LT5ieXRlcyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZHBWZXJpZnlQYWNrZXQsICZycGQpOworCisgIGlmIChsZW5ndGgpIHsKKyAgICBzd2l0Y2ggKChwYWNrZXQtPnR5cGUgPSBycGQudGVtcGxhdGUtPnR5cGUpKSB7CisgICAgICBjYXNlIElQVF9pZGVudGl0eToKKyAgICAgICAgaW50ZXJwcmV0SWRlbnRpdHkocGFja2V0KTsKKyAgICAgICAgYmRwU2V0TW9kZWwocGFja2V0LT5maWVsZHMuaWRlbnRpdHkuY2VsbENvdW50KTsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGNhc2UgSVBUX2tleXM6IHsKKyAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqYnl0ZSA9IHBhY2tldC0+Ynl0ZXMgKyBsZW5ndGg7CisgICAgICAgIHBhY2tldC0+ZmllbGRzLmtleXMgPSAwOworCisgICAgICAgIGRvIHsKKyAgICAgICAgICBwYWNrZXQtPmZpZWxkcy5rZXlzIDw8PSA4OworICAgICAgICAgIHBhY2tldC0+ZmllbGRzLmtleXMgfD0gKi0tYnl0ZSAmIDBYMUY7CisgICAgICAgIH0gd2hpbGUgKGJ5dGUgIT0gcGFja2V0LT5ieXRlcyk7CisKKyAgICAgICAgYnJlYWs7CisgICAgICB9CisKKyAgICAgIGNhc2UgSVBUX3JvdXRpbmc6CisgICAgICAgIHBhY2tldC0+ZmllbGRzLnJvdXRpbmcgPSAmcGFja2V0LT5ieXRlc1s3XTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICB9CisKKyAgcmV0dXJuIGxlbmd0aDsKK30KKworc3RhdGljIHZvaWQKK3BiY0ludGVycHJldElkZW50aXR5IChJbnB1dFBhY2tldCAqcGFja2V0KSB7CisgIHBhY2tldC0+ZmllbGRzLmlkZW50aXR5LmNlbGxDb3VudCA9IHBhY2tldC0+Ynl0ZXNbMl07CisgIHBhY2tldC0+ZmllbGRzLmlkZW50aXR5LmtleUNvdW50ID0gMTY7CisgIHBhY2tldC0+ZmllbGRzLmlkZW50aXR5LnJvdXRpbmdDb3VudCA9IHBhY2tldC0+ZmllbGRzLmlkZW50aXR5LmNlbGxDb3VudDsKK30KKworc3RhdGljIGludAorcGJjUmVhZFBhY2tldCAoQnJhaWxsZURpc3BsYXkgKmJybCwgSW5wdXRQYWNrZXQgKnBhY2tldCkgeworICBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciB0ZW1wbGF0ZVN0cmluZ19pZGVudGl0eVtdID0geworICAgIDBYMDAsIDBYMDUsIFRCVF9TSVpFLCAwWDA4LAorICAgIFRCVF9BTlksIFRCVF9BTlksIFRCVF9BTlksIFRCVF9BTlksCisgICAgVEJUX0FOWSwgVEJUX0FOWSwgVEJUX0FOWSwgVEJUX0FOWQorICB9OworICBzdGF0aWMgY29uc3QgVGVtcGxhdGVFbnRyeSBpZGVudGl0eVRlbXBsYXRlID0gVEVNUExBVEVfRU5UUlkoaWRlbnRpdHkpOworCisgIHJldHVybiBiZHBSZWFkUGFja2V0KGJybCwgcGFja2V0LCAmaWRlbnRpdHlUZW1wbGF0ZSwgYmRwTW9kZWwtPnJvdXRpbmdUZW1wbGF0ZSwgcGJjSW50ZXJwcmV0SWRlbnRpdHkpOworfQorCitzdGF0aWMgaW50CitwYmNXcml0ZUlkZW50aWZ5UmVxdWVzdCAoQnJhaWxsZURpc3BsYXkgKmJybCkgeworICBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBwYWNrZXRbXSA9IHswWEZGLCAwWEZGLCAwWDBBfTsKKyAgcmV0dXJuIHdyaXRlUGFja2V0KGJybCwgcGFja2V0LCBzaXplb2YocGFja2V0KSk7Cit9CisKK3N0YXRpYyBpbnQKK3BiY1dyaXRlQ2VsbHMgKEJyYWlsbGVEaXNwbGF5ICpicmwpIHsKKyAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaGVhZGVyW10gPSB7CisgICAgMFhGRiwgMFhGRiwgMFgwNCwKKyAgICAwWDAwLCAwWDYzLCAwWDAwCisgIH07CisKKyAgdW5zaWduZWQgY2hhciBwYWNrZXRbc2l6ZW9mKGhlYWRlcikgKyAyICsgKGJybC0+dGV4dENvbHVtbnMgKiAyKV07CisgIHVuc2lnbmVkIGNoYXIgKmJ5dGUgPSBwYWNrZXQ7CisKKyAgYnl0ZSA9IG1lbXBjcHkoYnl0ZSwgaGVhZGVyLCBzaXplb2YoaGVhZGVyKSk7CisgICpieXRlKysgPSBicmwtPnRleHRDb2x1bW5zICogMjsKKyAgKmJ5dGUrKyA9IDA7CisKKyAgeworICAgIGludCBpOworICAgIGZvciAoaT0wOyBpPGJybC0+dGV4dENvbHVtbnM7IGkrPTEpIHsKKyAgICAgICpieXRlKysgPSAwOworICAgICAgKmJ5dGUrKyA9IHRyYW5zbGF0ZU91dHB1dENlbGwodGV4dENlbGxzW2ldKTsKKyAgICB9CisgIH0KKworICByZXR1cm4gd3JpdGVQYWNrZXQoYnJsLCBwYWNrZXQsIGJ5dGUtcGFja2V0KTsKK30KKworc3RhdGljIGNvbnN0IFByb3RvY29sT3BlcmF0aW9ucyBwYmNQcm90b2NvbE9wZXJhdGlvbnMgPSB7CisgIC5uYW1lID0gIlBvd2VyQnJhaWxsZSBDb21wYXRpYmlsaXR5IiwKKyAgLmtleVRhYmxlRGVmaW5pdGlvbiA9ICZLRVlfVEFCTEVfREVGSU5JVElPTihiZHApLAorICAuaW5pdGlhbGl6ZURhdGEgPSBiZHBJbml0aWFsaXplRGF0YSwKKyAgLnJlYWRQYWNrZXQgPSBwYmNSZWFkUGFja2V0LAorICAud3JpdGVJZGVudGlmeVJlcXVlc3QgPSBwYmNXcml0ZUlkZW50aWZ5UmVxdWVzdCwKKyAgLndyaXRlQ2VsbHMgPSBwYmNXcml0ZUNlbGxzCit9OworCitzdGF0aWMgdm9pZAorbnR2SW50ZXJwcmV0SWRlbnRpdHkgKElucHV0UGFja2V0ICpwYWNrZXQpIHsKKyAgcGFja2V0LT5maWVsZHMuaWRlbnRpdHkuY2VsbENvdW50ID0gKHBhY2tldC0+Ynl0ZXNbNV0gPT0gJzgnKT8gODA6IDQwOworICBwYWNrZXQtPmZpZWxkcy5pZGVudGl0eS5rZXlDb3VudCA9IDE2OworICBwYWNrZXQtPmZpZWxkcy5pZGVudGl0eS5yb3V0aW5nQ291bnQgPSBwYWNrZXQtPmZpZWxkcy5pZGVudGl0eS5jZWxsQ291bnQ7Cit9CisKK3N0YXRpYyBpbnQKK250dlJlYWRQYWNrZXQgKEJyYWlsbGVEaXNwbGF5ICpicmwsIElucHV0UGFja2V0ICpwYWNrZXQpIHsKKyAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgdGVtcGxhdGVTdHJpbmdfaWRlbnRpdHlbXSA9IHsKKyAgICAwWDczLCAwWDY1LCAwWDY5LCAwWDZCLCAwWDYxLCBUQlRfSUQxLCBUQlRfSUQyLAorICAgIDBYNzYsIFRCVF9ERUNJTUFMLCAwWDJFLCBUQlRfREVDSU1BTCwgVEJUX0RFQ0lNQUwKKyAgfTsKKyAgc3RhdGljIGNvbnN0IFRlbXBsYXRlRW50cnkgaWRlbnRpdHlUZW1wbGF0ZSA9IFRFTVBMQVRFX0VOVFJZKGlkZW50aXR5KTsKKworICByZXR1cm4gYmRwUmVhZFBhY2tldChicmwsIHBhY2tldCwgJmlkZW50aXR5VGVtcGxhdGUsICZ0ZW1wbGF0ZUVudHJ5X2tleXMsIG50dkludGVycHJldElkZW50aXR5KTsKK30KKworc3RhdGljIGludAorbnR2V3JpdGVJZGVudGlmeVJlcXVlc3QgKEJyYWlsbGVEaXNwbGF5ICpicmwpIHsKKyAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgcGFja2V0W10gPSB7MFhGRiwgMFhGRiwgMFgxQ307CisgIHJldHVybiB3cml0ZVBhY2tldChicmwsIHBhY2tldCwgc2l6ZW9mKHBhY2tldCkpOworfQorCitzdGF0aWMgaW50CitudHZXcml0ZUNlbGxzIChCcmFpbGxlRGlzcGxheSAqYnJsKSB7CisgIHJldHVybiBiZHBNb2RlbC0+bnR2V3JpdGVDZWxscyhicmwpOworfQorCitzdGF0aWMgY29uc3QgUHJvdG9jb2xPcGVyYXRpb25zIG50dlByb3RvY29sT3BlcmF0aW9ucyA9IHsKKyAgLm5hbWUgPSAiU2Vpa2EgQnJhaWxsZSBEaXNwbGF5IiwKKyAgLmtleVRhYmxlRGVmaW5pdGlvbiA9ICZLRVlfVEFCTEVfREVGSU5JVElPTihiZHApLAorICAuaW5pdGlhbGl6ZURhdGEgPSBiZHBJbml0aWFsaXplRGF0YSwKKyAgLnJlYWRQYWNrZXQgPSBudHZSZWFkUGFja2V0LAorICAud3JpdGVJZGVudGlmeVJlcXVlc3QgPSBudHZXcml0ZUlkZW50aWZ5UmVxdWVzdCwKKyAgLndyaXRlQ2VsbHMgPSBudHZXcml0ZUNlbGxzCit9OworCitzdGF0aWMgdm9pZAorbnRrSW5pdGlhbGl6ZURhdGEgKHZvaWQpIHsKK30KKworc3RhdGljIEJyYWlsbGVQYWNrZXRWZXJpZmllclJlc3VsdAorbnRrVmVyaWZ5UGFja2V0ICgKKyAgQnJhaWxsZURpc3BsYXkgKmJybCwKKyAgdW5zaWduZWQgY2hhciAqYnl0ZXMsIHNpemVfdCBzaXplLAorICBzaXplX3QgKmxlbmd0aCwgdm9pZCAqZGF0YQorKSB7CisgIHVuc2lnbmVkIGNoYXIgYnl0ZSA9IGJ5dGVzW3NpemUtMV07CisKKyAgc3dpdGNoIChzaXplKSB7CisgICAgY2FzZSAxOgorICAgICAgKmxlbmd0aCA9IDQ7CisgICAgY2FzZSAyOgorICAgICAgaWYgKGJ5dGUgIT0gMFhGRikgcmV0dXJuIEJSTF9QVlJfSU5WQUxJRDsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSA0OgorICAgICAgKmxlbmd0aCArPSBieXRlOworICAgICAgYnJlYWs7CisKKyAgICBkZWZhdWx0OgorICAgICAgYnJlYWs7CisgIH0KKworICByZXR1cm4gQlJMX1BWUl9JTkNMVURFOworfQorCitzdGF0aWMgaW50CitudGtSZWFkUGFja2V0IChCcmFpbGxlRGlzcGxheSAqYnJsLCBJbnB1dFBhY2tldCAqcGFja2V0KSB7CisgIHNpemVfdCBsZW5ndGg7CisKKyAgd2hpbGUgKChsZW5ndGggPSByZWFkQnJhaWxsZVBhY2tldChicmwsIE5VTEwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFja2V0LT5ieXRlcywgc2l6ZW9mKHBhY2tldC0+Ynl0ZXMpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG50a1ZlcmlmeVBhY2tldCwgTlVMTCkpKSB7CisgICAgdW5zaWduZWQgY2hhciB0eXBlID0gcGFja2V0LT5ieXRlc1syXTsKKworICAgIHN3aXRjaCAodHlwZSkgeworICAgICAgY2FzZSAwWEEyOgorICAgICAgICBwYWNrZXQtPnR5cGUgPSBJUFRfaWRlbnRpdHk7CisgICAgICAgIHBhY2tldC0+ZmllbGRzLmlkZW50aXR5LmNlbGxDb3VudCA9IHBhY2tldC0+Ynl0ZXNbNV07CisgICAgICAgIHBhY2tldC0+ZmllbGRzLmlkZW50aXR5LmtleUNvdW50ID0gcGFja2V0LT5ieXRlc1s0XTsKKyAgICAgICAgcGFja2V0LT5maWVsZHMuaWRlbnRpdHkucm91dGluZ0NvdW50ID0gcGFja2V0LT5ieXRlc1s2XTsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGNhc2UgMFhBNDoKKyAgICAgICAgcGFja2V0LT50eXBlID0gSVBUX3JvdXRpbmc7CisgICAgICAgIHBhY2tldC0+ZmllbGRzLnJvdXRpbmcgPSAmcGFja2V0LT5ieXRlc1s0XTsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgIHsKKyAgICAgICAgS2V5TnVtYmVyU2V0ICprZXlzOworICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpieXRlOworCisgICAgICBjYXNlIDBYQTY6CisgICAgICAgIHBhY2tldC0+dHlwZSA9IElQVF9rZXlzOworICAgICAgICBrZXlzID0gJnBhY2tldC0+ZmllbGRzLmtleXM7CisgICAgICAgIGJ5dGUgPSBwYWNrZXQtPmJ5dGVzICsgbGVuZ3RoOworICAgICAgICBnb3RvIGRvS2V5czsKKworICAgICAgY2FzZSAwWEE4OgorICAgICAgICBwYWNrZXQtPnR5cGUgPSBJUFRfY29tYmluZWQ7CisgICAgICAgIGtleXMgPSAmcGFja2V0LT5maWVsZHMuY29tYmluZWQua2V5czsKKyAgICAgICAgYnl0ZSA9IHBhY2tldC0+ZmllbGRzLmNvbWJpbmVkLnJvdXRpbmcgPSBwYWNrZXQtPmJ5dGVzICsgIDQgKyAoKGtleUNvdW50ICsgNykgLyA4KTsKKyAgICAgICAgZ290byBkb0tleXM7CisKKyAgICAgIGRvS2V5czoKKyAgICAgICAgKmtleXMgPSAwOworCisgICAgICAgIHdoaWxlICgtLWJ5dGUgIT0gJnBhY2tldC0+Ynl0ZXNbM10pIHsKKyAgICAgICAgICAqa2V5cyA8PD0gODsKKyAgICAgICAgICAqa2V5cyB8PSAqYnl0ZTsKKyAgICAgICAgfQorCisgICAgICAgIGJyZWFrOworICAgICAgfQorCisgICAgICBkZWZhdWx0OgorICAgICAgICBsb2dVbmtub3duUGFja2V0KHR5cGUpOworICAgICAgICBjb250aW51ZTsKKyAgICB9CisKKyAgICBicmVhazsKKyAgfQorCisgIHJldHVybiBsZW5ndGg7Cit9CisKK3N0YXRpYyBpbnQKK250a1dyaXRlSWRlbnRpZnlSZXF1ZXN0IChCcmFpbGxlRGlzcGxheSAqYnJsKSB7CisgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHBhY2tldFtdID0gezBYRkYsIDBYRkYsIDBYQTF9OworICByZXR1cm4gd3JpdGVQYWNrZXQoYnJsLCBwYWNrZXQsIHNpemVvZihwYWNrZXQpKTsKK30KKworc3RhdGljIGludAorbnRrV3JpdGVDZWxscyAoQnJhaWxsZURpc3BsYXkgKmJybCkgeworICBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBoZWFkZXJbXSA9IHswWEZGLCAwWEZGLCAwWEEzfTsKKyAgdW5zaWduZWQgY2hhciBwYWNrZXRbc2l6ZW9mKGhlYWRlcikgKyAxICsgYnJsLT50ZXh0Q29sdW1uc107CisgIHVuc2lnbmVkIGNoYXIgKmJ5dGUgPSBwYWNrZXQ7CisKKyAgYnl0ZSA9IG1lbXBjcHkoYnl0ZSwgaGVhZGVyLCBzaXplb2YoaGVhZGVyKSk7CisgICpieXRlKysgPSBicmwtPnRleHRDb2x1bW5zOworICBieXRlID0gdHJhbnNsYXRlT3V0cHV0Q2VsbHMoYnl0ZSwgdGV4dENlbGxzLCBicmwtPnRleHRDb2x1bW5zKTsKKworICByZXR1cm4gd3JpdGVQYWNrZXQoYnJsLCBwYWNrZXQsIGJ5dGUtcGFja2V0KTsKK30KKworc3RhdGljIGNvbnN0IFByb3RvY29sT3BlcmF0aW9ucyBudGtQcm90b2NvbE9wZXJhdGlvbnMgPSB7CisgIC5uYW1lID0gIlNlaWthIE5vdGUgVGFrZXIiLAorICAua2V5VGFibGVEZWZpbml0aW9uID0gJktFWV9UQUJMRV9ERUZJTklUSU9OKG50ayksCisgIC5pbml0aWFsaXplRGF0YSA9IG50a0luaXRpYWxpemVEYXRhLAorICAucmVhZFBhY2tldCA9IG50a1JlYWRQYWNrZXQsCisgIC53cml0ZUlkZW50aWZ5UmVxdWVzdCA9IG50a1dyaXRlSWRlbnRpZnlSZXF1ZXN0LAorICAud3JpdGVDZWxscyA9IG50a1dyaXRlQ2VsbHMKK307CisKK3N0YXRpYyBjb25zdCBQcm90b2NvbE9wZXJhdGlvbnMgKmNvbnN0IGFsbFByb3RvY29sc1tdID0geworICAmbnRrUHJvdG9jb2xPcGVyYXRpb25zLAorICAmbnR2UHJvdG9jb2xPcGVyYXRpb25zLAorICAmcGJjUHJvdG9jb2xPcGVyYXRpb25zLAorICBOVUxMCit9OworCitzdGF0aWMgY29uc3QgUHJvdG9jb2xPcGVyYXRpb25zICpjb25zdCBuYXRpdmVQcm90b2NvbHNbXSA9IHsKKyAgJm50a1Byb3RvY29sT3BlcmF0aW9ucywKKyAgJm50dlByb3RvY29sT3BlcmF0aW9ucywKKyAgTlVMTAorfTsKKworc3RhdGljIGNvbnN0IElucHV0T3V0cHV0T3BlcmF0aW9ucyBzZXJpYWxPcGVyYXRpb25zID0geworICAucHJvdG9jb2xzID0gbmF0aXZlUHJvdG9jb2xzCit9OworCitzdGF0aWMgY29uc3QgSW5wdXRPdXRwdXRPcGVyYXRpb25zIHVzYk9wZXJhdGlvbnMgPSB7CisgIC5wcm90b2NvbHMgPSBhbGxQcm90b2NvbHMKK307CisKK3N0YXRpYyBjb25zdCBJbnB1dE91dHB1dE9wZXJhdGlvbnMgYmx1ZXRvb3RoT3BlcmF0aW9ucyA9IHsKKyAgLnByb3RvY29scyA9IG5hdGl2ZVByb3RvY29scworfTsKKworc3RhdGljIGludAorY29ubmVjdFJlc291cmNlIChCcmFpbGxlRGlzcGxheSAqYnJsLCBjb25zdCBjaGFyICppZGVudGlmaWVyKSB7CisgIHN0YXRpYyBjb25zdCBTZXJpYWxQYXJhbWV0ZXJzIHNlcmlhbFBhcmFtZXRlcnMgPSB7CisgICAgU0VSSUFMX0RFRkFVTFRfUEFSQU1FVEVSUywKKyAgICAuYmF1ZCA9IDk2MDAKKyAgfTsKKworICBCRUdJTl9VU0JfU1RSSU5HX0xJU1QodXNiTWFudWZhY3R1cmVyc18xMEM0X0VBNjApCisgICAgIlNpbGljb24gTGFicyIsCisgIEVORF9VU0JfU1RSSU5HX0xJU1QKKworICBCRUdJTl9VU0JfU1RSSU5HX0xJU1QodXNiTWFudWZhY3R1cmVyc18xMEM0X0VBODApCisgICAgIlNpbGljb24gTGFib3JhdG9yaWVzIiwKKyAgRU5EX1VTQl9TVFJJTkdfTElTVAorCisgIEJFR0lOX1VTQl9DSEFOTkVMX0RFRklOSVRJT05TCisgICAgeyAvKiBCcmFpbGxlIERpc3BsYXkgKi8KKyAgICAgIC52ZW5kb3I9MFgxMEM0LCAucHJvZHVjdD0wWEVBNjAsCisgICAgICAubWFudWZhY3R1cmVycyA9IHVzYk1hbnVmYWN0dXJlcnNfMTBDNF9FQTYwLAorICAgICAgLmNvbmZpZ3VyYXRpb249MSwgLmludGVyZmFjZT0wLCAuYWx0ZXJuYXRpdmU9MCwKKyAgICAgIC5pbnB1dEVuZHBvaW50PTEsIC5vdXRwdXRFbmRwb2ludD0xLAorICAgICAgLnNlcmlhbD0mc2VyaWFsUGFyYW1ldGVycworICAgIH0sCisKKyAgICB7IC8qIE5vdGUgVGFrZXIgKi8KKyAgICAgIC52ZW5kb3I9MFgxMEM0LCAucHJvZHVjdD0wWEVBODAsCisgICAgICAubWFudWZhY3R1cmVycyA9IHVzYk1hbnVmYWN0dXJlcnNfMTBDNF9FQTgwLAorICAgICAgLmNvbmZpZ3VyYXRpb249MSwgLmludGVyZmFjZT0wLCAuYWx0ZXJuYXRpdmU9MCwKKyAgICAgIC5pbnB1dEVuZHBvaW50PTEsCisgICAgICAuc2VyaWFsPSZzZXJpYWxQYXJhbWV0ZXJzCisgICAgfSwKKyAgRU5EX1VTQl9DSEFOTkVMX0RFRklOSVRJT05TCisKKyAgR2lvRGVzY3JpcHRvciBkZXNjcmlwdG9yOworICBnaW9Jbml0aWFsaXplRGVzY3JpcHRvcigmZGVzY3JpcHRvcik7CisKKyAgZGVzY3JpcHRvci5zZXJpYWwucGFyYW1ldGVycyA9ICZzZXJpYWxQYXJhbWV0ZXJzOworICBkZXNjcmlwdG9yLnNlcmlhbC5vcHRpb25zLmFwcGxpY2F0aW9uRGF0YSA9ICZzZXJpYWxPcGVyYXRpb25zOworCisgIGRlc2NyaXB0b3IudXNiLmNoYW5uZWxEZWZpbml0aW9ucyA9IHVzYkNoYW5uZWxEZWZpbml0aW9uczsKKyAgZGVzY3JpcHRvci51c2Iub3B0aW9ucy5hcHBsaWNhdGlvbkRhdGEgPSAmdXNiT3BlcmF0aW9uczsKKworICBkZXNjcmlwdG9yLmJsdWV0b290aC5jaGFubmVsTnVtYmVyID0gMTsKKyAgZGVzY3JpcHRvci5ibHVldG9vdGgub3B0aW9ucy5hcHBsaWNhdGlvbkRhdGEgPSAmYmx1ZXRvb3RoT3BlcmF0aW9uczsKKworICBpZiAoY29ubmVjdEJyYWlsbGVSZXNvdXJjZShicmwsIGlkZW50aWZpZXIsICZkZXNjcmlwdG9yLCBOVUxMKSkgeworICAgIGlvID0gZ2lvR2V0QXBwbGljYXRpb25EYXRhKGJybC0+Z2lvRW5kcG9pbnQpOworICAgIHJldHVybiAxOworICB9CisKKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK2JybF9jb25zdHJ1Y3QgKEJyYWlsbGVEaXNwbGF5ICpicmwsIGNoYXIgKipwYXJhbWV0ZXJzLCBjb25zdCBjaGFyICpkZXZpY2UpIHsKKyAgaWYgKGNvbm5lY3RSZXNvdXJjZShicmwsIGRldmljZSkpIHsKKyAgICBjb25zdCBQcm90b2NvbE9wZXJhdGlvbnMgKmNvbnN0ICpwcm90b2NvbEFkZHJlc3MgPSBpby0+cHJvdG9jb2xzOworCisgICAgd2hpbGUgKChwcm90b2NvbCA9ICpwcm90b2NvbEFkZHJlc3MrKykpIHsKKyAgICAgIElucHV0UGFja2V0IHJlc3BvbnNlOworCisgICAgICBsb2dNZXNzYWdlKExPR19ERUJVRywgInRyeWluZyBwcm90b2NvbCAlcyIsIHByb3RvY29sLT5uYW1lKTsKKyAgICAgIHByb3RvY29sLT5pbml0aWFsaXplRGF0YSgpOworCisgICAgICBpZiAocHJvYmVCcmFpbGxlRGlzcGxheShicmwsIDIsIE5VTEwsIDIwMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3RvY29sLT53cml0ZUlkZW50aWZ5UmVxdWVzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRQYWNrZXQsICZyZXNwb25zZSwgc2l6ZW9mKHJlc3BvbnNlLmJ5dGVzKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzSWRlbnRpdHlSZXNwb25zZSkpIHsKKyAgICAgICAgbG9nTWVzc2FnZShMT0dfREVCVUcsICJTZWlrYSBQcm90b2NvbDogJXMiLCBwcm90b2NvbC0+bmFtZSk7CisgICAgICAgIGxvZ01lc3NhZ2UoTE9HX0RFQlVHLCAiU2Vpa2EgU2l6ZTogJXUiLCByZXNwb25zZS5maWVsZHMuaWRlbnRpdHkuY2VsbENvdW50KTsKKworICAgICAgICBicmwtPnRleHRDb2x1bW5zID0gcmVzcG9uc2UuZmllbGRzLmlkZW50aXR5LmNlbGxDb3VudDsKKyAgICAgICAga2V5Q291bnQgPSByZXNwb25zZS5maWVsZHMuaWRlbnRpdHkua2V5Q291bnQ7CisgICAgICAgIHJvdXRpbmdDb3VudCA9IHJlc3BvbnNlLmZpZWxkcy5pZGVudGl0eS5yb3V0aW5nQ291bnQ7CisKKyAgICAgICAgc2V0QnJhaWxsZUtleVRhYmxlKGJybCwgcHJvdG9jb2wtPmtleVRhYmxlRGVmaW5pdGlvbik7CisgICAgICAgIG1ha2VPdXRwdXRUYWJsZShkb3RzVGFibGVfSVNPMTE1NDhfMSk7CisKKyAgICAgICAgZm9yY2VSZXdyaXRlID0gMTsKKyAgICAgICAgcmV0dXJuIDE7CisgICAgICB9CisgICAgfQorCisgICAgZGlzY29ubmVjdEJyYWlsbGVSZXNvdXJjZShicmwsIE5VTEwpOworICB9CisKKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkCiticmxfZGVzdHJ1Y3QgKEJyYWlsbGVEaXNwbGF5ICpicmwpIHsKKyAgZGlzY29ubmVjdEJyYWlsbGVSZXNvdXJjZShicmwsIE5VTEwpOworfQorCitzdGF0aWMgaW50Citicmxfd3JpdGVXaW5kb3cgKEJyYWlsbGVEaXNwbGF5ICpicmwsIGNvbnN0IHdjaGFyX3QgKnRleHQpIHsKKyAgaWYgKGNlbGxzSGF2ZUNoYW5nZWQodGV4dENlbGxzLCBicmwtPmJ1ZmZlciwgYnJsLT50ZXh0Q29sdW1ucywgTlVMTCwgTlVMTCwgJmZvcmNlUmV3cml0ZSkpIHsKKyAgICBpZiAoIXByb3RvY29sLT53cml0ZUNlbGxzKGJybCkpIHJldHVybiAwOworICB9CisKKyAgcmV0dXJuIDE7Cit9CisKK3N0YXRpYyB2b2lkCitwcm9jZXNzS2V5cyAoQnJhaWxsZURpc3BsYXkgKmJybCwgS2V5TnVtYmVyU2V0IGtleXMsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnJvdXRpbmcpIHsKKyAgS2V5VmFsdWUgcHJlc3NlZEtleXNba2V5Q291bnQgKyByb3V0aW5nQ291bnRdOworICB1bnNpZ25lZCBpbnQgcHJlc3NlZENvdW50ID0gMDsKKworICBpZiAoa2V5cykgeworICAgIEtleU51bWJlclNldCBiaXQgPSBLRVlfTlVNQkVSX0JJVCgwKTsKKyAgICBLZXlOdW1iZXIgbnVtYmVyID0gMDsKKworICAgIHdoaWxlIChudW1iZXIgPCBrZXlDb3VudCkgeworICAgICAgaWYgKGtleXMgJiBiaXQpIHsKKyAgICAgICAgS2V5VmFsdWUgKmt2ID0gJnByZXNzZWRLZXlzW3ByZXNzZWRDb3VudCsrXTsKKworICAgICAgICBlbnF1ZXVlS2V5RXZlbnQoYnJsLCAoa3YtPmdyb3VwID0gU0tfR1JQX05hdmlnYXRpb25LZXlzKSwgKGt2LT5udW1iZXIgPSBudW1iZXIpLCAxKTsKKyAgICAgICAgaWYgKCEoa2V5cyAmPSB+Yml0KSkgYnJlYWs7CisgICAgICB9CisKKyAgICAgIGJpdCA8PD0gMTsKKyAgICAgIG51bWJlciArPSAxOworICAgIH0KKyAgfQorCisgIGlmIChyb3V0aW5nKSB7CisgICAgY29uc3QgdW5zaWduZWQgY2hhciAqYnl0ZSA9IHJvdXRpbmc7CisgICAgdW5zaWduZWQgY2hhciBudW1iZXIgPSAwOworCisgICAgd2hpbGUgKG51bWJlciA8IHJvdXRpbmdDb3VudCkgeworICAgICAgaWYgKCpieXRlKSB7CisgICAgICAgIHVuc2lnbmVkIGNoYXIgYml0ID0gMFgxOworCisgICAgICAgIGRvIHsKKyAgICAgICAgICBpZiAoKmJ5dGUgJiBiaXQpIHsKKyAgICAgICAgICAgIEtleVZhbHVlICprdiA9ICZwcmVzc2VkS2V5c1twcmVzc2VkQ291bnQrK107CisKKyAgICAgICAgICAgIGVucXVldWVLZXlFdmVudChicmwsIChrdi0+Z3JvdXAgPSBTS19HUlBfUm91dGluZ0tleXMpLCAoa3YtPm51bWJlciA9IG51bWJlciksIDEpOworICAgICAgICAgIH0KKworICAgICAgICAgIG51bWJlciArPSAxOworICAgICAgICB9IHdoaWxlICgoYml0IDw8PSAxKSk7CisgICAgICB9IGVsc2UgeworICAgICAgICBudW1iZXIgKz0gODsKKyAgICAgIH0KKworICAgICAgYnl0ZSArPSAxOworICAgIH0KKyAgfQorCisgIHdoaWxlIChwcmVzc2VkQ291bnQpIHsKKyAgICBLZXlWYWx1ZSAqa3YgPSAmcHJlc3NlZEtleXNbLS1wcmVzc2VkQ291bnRdOworICAgIGVucXVldWVLZXlFdmVudChicmwsIGt2LT5ncm91cCwga3YtPm51bWJlciwgMCk7CisgIH0KK30KKworc3RhdGljIGludAorYnJsX3JlYWRDb21tYW5kIChCcmFpbGxlRGlzcGxheSAqYnJsLCBLZXlUYWJsZUNvbW1hbmRDb250ZXh0IGNvbnRleHQpIHsKKyAgSW5wdXRQYWNrZXQgcGFja2V0OworICBzaXplX3QgbGVuZ3RoOworCisgIHdoaWxlICgobGVuZ3RoID0gcHJvdG9jb2wtPnJlYWRQYWNrZXQoYnJsLCAmcGFja2V0KSkpIHsKKyAgICBzd2l0Y2ggKHBhY2tldC50eXBlKSB7CisgICAgICBjYXNlIElQVF9rZXlzOgorICAgICAgICBwcm9jZXNzS2V5cyhicmwsIHBhY2tldC5maWVsZHMua2V5cywgTlVMTCk7CisgICAgICAgIGNvbnRpbnVlOworCisgICAgICBjYXNlIElQVF9yb3V0aW5nOgorICAgICAgICBwcm9jZXNzS2V5cyhicmwsIDAsIHBhY2tldC5maWVsZHMucm91dGluZyk7CisgICAgICAgIGNvbnRpbnVlOworCisgICAgICBjYXNlIElQVF9jb21iaW5lZDoKKyAgICAgICAgcHJvY2Vzc0tleXMoYnJsLCBwYWNrZXQuZmllbGRzLmNvbWJpbmVkLmtleXMsIHBhY2tldC5maWVsZHMuY29tYmluZWQucm91dGluZyk7CisgICAgICAgIGNvbnRpbnVlOworCisgICAgICBkZWZhdWx0OgorICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBsb2dVbmV4cGVjdGVkUGFja2V0KHBhY2tldC5ieXRlcywgbGVuZ3RoKTsKKyAgfQorICBpZiAoZXJybm8gIT0gRUFHQUlOKSByZXR1cm4gQlJMX0NNRF9SRVNUQVJUQlJMOworCisgIHJldHVybiBFT0Y7Cit9CmRpZmYgLS1naXQgYS9Ecml2ZXJzL0JyYWlsbGUvU2Vpa2EvYnJsZGVmcy1zay5oIGIvRHJpdmVycy9CcmFpbGxlL1NlaWthL2JybGRlZnMtc2suaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NWYzZmY3Ci0tLSAvZGV2L251bGwKKysrIGIvRHJpdmVycy9CcmFpbGxlL1NlaWthL2JybGRlZnMtc2suaApAQCAtMCwwICsxLDY3IEBACisvKgorICogQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyAqICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyAqCisgKiBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorICoKKyAqIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyAqCisgKiBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisgKi8KKworI2lmbmRlZiBCUkxUVFlfSU5DTFVERURfU0tfQlJMREVGUworI2RlZmluZSBCUkxUVFlfSU5DTFVERURfU0tfQlJMREVGUworCit0eXBlZGVmIGVudW0geworICBTS19CRFBfSzEgPSAgMCwKKyAgU0tfQkRQX0s3ID0gIDEsCisgIFNLX0JEUF9LOCA9ICAyLAorICBTS19CRFBfSzYgPSAgMywKKyAgU0tfQkRQX0s1ID0gIDQsCisgIFNLX0JEUF9LMiA9ICA5LAorICBTS19CRFBfSzMgPSAxMSwKKyAgU0tfQkRQX0s0ID0gMTIKK30gU0tfQnJhaWxsZURpc3BsYXlLZXk7CisKK3R5cGVkZWYgZW51bSB7CisgIFNLX05US19Eb3QxICAgICAgICAgICAgICAgPSAgMCwKKyAgU0tfTlRLX0RvdDIgICAgICAgICAgICAgICA9ICAxLAorICBTS19OVEtfRG90MyAgICAgICAgICAgICAgID0gIDIsCisgIFNLX05US19Eb3Q0ICAgICAgICAgICAgICAgPSAgMywKKyAgU0tfTlRLX0RvdDUgICAgICAgICAgICAgICA9ICA0LAorICBTS19OVEtfRG90NiAgICAgICAgICAgICAgID0gIDUsCisgIFNLX05US19Eb3Q3ICAgICAgICAgICAgICAgPSAgNiwKKyAgU0tfTlRLX0RvdDggICAgICAgICAgICAgICA9ICA3LAorCisgIFNLX05US19CYWNrc3BhY2UgICAgICAgICAgPSAgOCwKKyAgU0tfTlRLX1NwYWNlICAgICAgICAgICAgICA9ICA5LAorCisgIFNLX05US19MZWZ0QnV0dG9uICAgICAgICAgPSAxMCwKKyAgU0tfTlRLX1JpZ2h0QnV0dG9uICAgICAgICA9IDExLAorCisgIFNLX05US19MZWZ0Sm95c3RpY2tQcmVzcyAgPSAxMiwKKyAgU0tfTlRLX0xlZnRKb3lzdGlja0xlZnQgICA9IDEzLAorICBTS19OVEtfTGVmdEpveXN0aWNrUmlnaHQgID0gMTQsCisgIFNLX05US19MZWZ0Sm95c3RpY2tVcCAgICAgPSAxNSwKKyAgU0tfTlRLX0xlZnRKb3lzdGlja0Rvd24gICA9IDE2LAorCisgIFNLX05US19SaWdodEpveXN0aWNrUHJlc3MgPSAxNywKKyAgU0tfTlRLX1JpZ2h0Sm95c3RpY2tMZWZ0ICA9IDE4LAorICBTS19OVEtfUmlnaHRKb3lzdGlja1JpZ2h0ID0gMTksCisgIFNLX05US19SaWdodEpveXN0aWNrVXAgICAgPSAyMCwKKyAgU0tfTlRLX1JpZ2h0Sm95c3RpY2tEb3duICA9IDIxCit9IFNLX05vdGVUYWtlcktleTsKKwordHlwZWRlZiBlbnVtIHsKKyAgU0tfR1JQX05hdmlnYXRpb25LZXlzID0gMCwKKyAgU0tfR1JQX1JvdXRpbmdLZXlzCit9IFNLX0tleUdyb3VwOworCisjZW5kaWYgLyogQlJMVFRZX0lOQ0xVREVEX1NLX0JSTERFRlMgKi8gCmRpZmYgLS1naXQgYS9Ecml2ZXJzL0JyYWlsbGUvU2tlbGV0b24vTWFrZWZpbGUuaW4gYi9Ecml2ZXJzL0JyYWlsbGUvU2tlbGV0b24vTWFrZWZpbGUuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTRmOGEwZQotLS0gL2Rldi9udWxsCisrKyBiL0RyaXZlcnMvQnJhaWxsZS9Ta2VsZXRvbi9NYWtlZmlsZS5pbgpAQCAtMCwwICsxLDI4IEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisjICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorIworIyBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisjCisjIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisjCisjIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyMgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorIyBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyMKKyMgV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworIworIyBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworRFJJVkVSX0NPREUgPSB4eAorRFJJVkVSX05BTUUgPSBEaXJlY3RvcnlOYW1lCitEUklWRVJfVVNBR0UgPSBiYXNpYyBleGFtcGxlCitEUklWRVJfVkVSU0lPTiA9IAorRFJJVkVSX0RFVkVMT1BFUlMgPSAKK2luY2x1ZGUgJChTUkNfVE9QKWJyYWlsbGUubWsKKworYnJhaWxsZS4kTzoKKwkkKENDKSAkKEJSTF9DRkxBR1MpIC1jICQoU1JDX0RJUikvYnJhaWxsZS5jCisKZGlmZiAtLWdpdCBhL0RyaXZlcnMvQnJhaWxsZS9Ta2VsZXRvbi9icmFpbGxlLmMgYi9Ecml2ZXJzL0JyYWlsbGUvU2tlbGV0b24vYnJhaWxsZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcwOTQ4YzMKLS0tIC9kZXYvbnVsbAorKysgYi9Ecml2ZXJzL0JyYWlsbGUvU2tlbGV0b24vYnJhaWxsZS5jCkBAIC0wLDAgKzEsMTk1IEBACisvKgorICogQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyAqICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyAqCisgKiBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorICoKKyAqIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyAqCisgKiBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisgKi8KKworI2luY2x1ZGUgInByb2xvZ3VlLmgiCisKKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorCisjaW5jbHVkZSAibG9nLmgiCisKKyNpbmNsdWRlICJicmxfZHJpdmVyLmgiCisjaW5jbHVkZSAiYnJsZGVmcy14eC5oIgorCisjZGVmaW5lIFBST0JFX1JFVFJZX0xJTUlUIDIKKyNkZWZpbmUgUFJPQkVfSU5QVVRfVElNRU9VVCAxMDAwCisjZGVmaW5lIE1BWElNVU1fUkVTUE9OU0VfU0laRSAoMFhGRiArIDQpCisjZGVmaW5lIE1BWElNVU1fVEVYVF9DRUxMUyAwWEZGCisKK0JFR0lOX0tFWV9OQU1FX1RBQkxFKG5hdmlnYXRpb24pCitFTkRfS0VZX05BTUVfVEFCTEUKKworQkVHSU5fS0VZX05BTUVfVEFCTEVTKGFsbCkKKyAgS0VZX05BTUVfVEFCTEUobmF2aWdhdGlvbiksCitFTkRfS0VZX05BTUVfVEFCTEVTCisKK0RFRklORV9LRVlfVEFCTEUoYWxsKQorCitCRUdJTl9LRVlfVEFCTEVfTElTVAorICAmS0VZX1RBQkxFX0RFRklOSVRJT04oYWxsKSwKK0VORF9LRVlfVEFCTEVfTElTVAorCitzdHJ1Y3QgQnJhaWxsZURhdGFTdHJ1Y3QgeworICBzdHJ1Y3QgeworICAgIHVuc2lnbmVkIGNoYXIgcmV3cml0ZTsKKyAgICB1bnNpZ25lZCBjaGFyIGNlbGxzW01BWElNVU1fVEVYVF9DRUxMU107CisgIH0gdGV4dDsKK307CisKK3N0YXRpYyBpbnQKK3dyaXRlQnl0ZXMgKEJyYWlsbGVEaXNwbGF5ICpicmwsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ5dGVzLCBzaXplX3QgY291bnQpIHsKKyAgcmV0dXJuIHdyaXRlQnJhaWxsZVBhY2tldChicmwsIE5VTEwsIGJ5dGVzLCBjb3VudCk7Cit9CisKK3N0YXRpYyBpbnQKK3dyaXRlUGFja2V0IChCcmFpbGxlRGlzcGxheSAqYnJsLCBjb25zdCB1bnNpZ25lZCBjaGFyICpwYWNrZXQsIHNpemVfdCBzaXplKSB7CisgIHVuc2lnbmVkIGNoYXIgYnl0ZXNbc2l6ZV07CisgIHVuc2lnbmVkIGNoYXIgKmJ5dGUgPSBieXRlczsKKworICBieXRlID0gbWVtcGNweShieXRlLCBwYWNrZXQsIHNpemUpOworCisgIHJldHVybiB3cml0ZUJ5dGVzKGJybCwgYnl0ZXMsIGJ5dGUtYnl0ZXMpOworfQorCitzdGF0aWMgQnJhaWxsZVBhY2tldFZlcmlmaWVyUmVzdWx0Cit2ZXJpZnlQYWNrZXQgKAorICBCcmFpbGxlRGlzcGxheSAqYnJsLAorICB1bnNpZ25lZCBjaGFyICpieXRlcywgc2l6ZV90IHNpemUsCisgIHNpemVfdCAqbGVuZ3RoLCB2b2lkICpkYXRhCispIHsKKyAgdW5zaWduZWQgY2hhciBieXRlID0gYnl0ZXNbc2l6ZS0xXTsKKworICBzd2l0Y2ggKHNpemUpIHsKKyAgICBjYXNlIDE6CisgICAgICBzd2l0Y2ggKGJ5dGUpIHsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICByZXR1cm4gQlJMX1BWUl9JTlZBTElEOworICAgICAgfQorICAgICAgYnJlYWs7CisKKyAgICBkZWZhdWx0OgorICAgICAgYnJlYWs7CisgIH0KKworICByZXR1cm4gQlJMX1BWUl9JTkNMVURFOworfQorCitzdGF0aWMgc2l6ZV90CityZWFkUGFja2V0IChCcmFpbGxlRGlzcGxheSAqYnJsLCB2b2lkICpwYWNrZXQsIHNpemVfdCBzaXplKSB7CisgIHJldHVybiByZWFkQnJhaWxsZVBhY2tldChicmwsIE5VTEwsIHBhY2tldCwgc2l6ZSwgdmVyaWZ5UGFja2V0LCBOVUxMKTsKK30KKworc3RhdGljIGludAorY29ubmVjdFJlc291cmNlIChCcmFpbGxlRGlzcGxheSAqYnJsLCBjb25zdCBjaGFyICppZGVudGlmaWVyKSB7CisgIHN0YXRpYyBjb25zdCBTZXJpYWxQYXJhbWV0ZXJzIHNlcmlhbFBhcmFtZXRlcnMgPSB7CisgICAgU0VSSUFMX0RFRkFVTFRfUEFSQU1FVEVSUworICB9OworCisgIEJFR0lOX1VTQl9DSEFOTkVMX0RFRklOSVRJT05TCisgIEVORF9VU0JfQ0hBTk5FTF9ERUZJTklUSU9OUworCisgIEdpb0Rlc2NyaXB0b3IgZGVzY3JpcHRvcjsKKyAgZ2lvSW5pdGlhbGl6ZURlc2NyaXB0b3IoJmRlc2NyaXB0b3IpOworCisgIGRlc2NyaXB0b3Iuc2VyaWFsLnBhcmFtZXRlcnMgPSAmc2VyaWFsUGFyYW1ldGVyczsKKworICBkZXNjcmlwdG9yLnVzYi5jaGFubmVsRGVmaW5pdGlvbnMgPSB1c2JDaGFubmVsRGVmaW5pdGlvbnM7CisKKyAgaWYgKGNvbm5lY3RCcmFpbGxlUmVzb3VyY2UoYnJsLCBpZGVudGlmaWVyLCAmZGVzY3JpcHRvciwgTlVMTCkpIHsKKyAgICByZXR1cm4gMTsKKyAgfQorCisgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50Cit3cml0ZUlkZW50aWZ5UmVxdWVzdCAoQnJhaWxsZURpc3BsYXkgKmJybCkgeworICBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBwYWNrZXRbXSA9IHswfTsKKyAgcmV0dXJuIHdyaXRlUGFja2V0KGJybCwgcGFja2V0LCBzaXplb2YocGFja2V0KSk7Cit9CisKK3N0YXRpYyBCcmFpbGxlUmVzcG9uc2VSZXN1bHQKK2lzSWRlbnRpdHlSZXNwb25zZSAoQnJhaWxsZURpc3BsYXkgKmJybCwgY29uc3Qgdm9pZCAqcGFja2V0LCBzaXplX3Qgc2l6ZSkgeworICByZXR1cm4gQlJMX1JTUF9VTkVYUEVDVEVEOworfQorCitzdGF0aWMgaW50CiticmxfY29uc3RydWN0IChCcmFpbGxlRGlzcGxheSAqYnJsLCBjaGFyICoqcGFyYW1ldGVycywgY29uc3QgY2hhciAqZGV2aWNlKSB7CisgIGlmICgoYnJsLT5kYXRhID0gbWFsbG9jKHNpemVvZigqYnJsLT5kYXRhKSkpKSB7CisgICAgbWVtc2V0KGJybC0+ZGF0YSwgMCwgc2l6ZW9mKCpicmwtPmRhdGEpKTsKKworICAgIGlmIChjb25uZWN0UmVzb3VyY2UoYnJsLCBkZXZpY2UpKSB7CisgICAgICB1bnNpZ25lZCBjaGFyIHJlc3BvbnNlW01BWElNVU1fUkVTUE9OU0VfU0laRV07CisKKyAgICAgIGlmIChwcm9iZUJyYWlsbGVEaXNwbGF5KGJybCwgUFJPQkVfUkVUUllfTElNSVQsIE5VTEwsIFBST0JFX0lOUFVUX1RJTUVPVVQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZUlkZW50aWZ5UmVxdWVzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRQYWNrZXQsICZyZXNwb25zZSwgc2l6ZW9mKHJlc3BvbnNlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzSWRlbnRpdHlSZXNwb25zZSkpIHsKKyAgICAgICAgc2V0QnJhaWxsZUtleVRhYmxlKGJybCwgJktFWV9UQUJMRV9ERUZJTklUSU9OKGFsbCkpOworCisgICAgICAgIG1ha2VPdXRwdXRUYWJsZShkb3RzVGFibGVfSVNPMTE1NDhfMSk7CisgICAgICAvL01BS0VfT1VUUFVUX1RBQkxFKDBYMDEsIDBYMDIsIDBYMDQsIDBYMDgsIDBYMTAsIDBYMjAsIDBYNDAsIDBYODApOworCisgICAgICAgIGJybC0+ZGF0YS0+dGV4dC5yZXdyaXRlID0gMTsKKyAgICAgICAgcmV0dXJuIDE7CisgICAgICB9CisKKyAgICAgIGRpc2Nvbm5lY3RCcmFpbGxlUmVzb3VyY2UoYnJsLCBOVUxMKTsKKyAgICB9CisKKyAgICBmcmVlKGJybC0+ZGF0YSk7CisgIH0gZWxzZSB7CisgICAgbG9nTWFsbG9jRXJyb3IoKTsKKyAgfQorCisgIHJldHVybiAwOworfQorCitzdGF0aWMgdm9pZAorYnJsX2Rlc3RydWN0IChCcmFpbGxlRGlzcGxheSAqYnJsKSB7CisgIGRpc2Nvbm5lY3RCcmFpbGxlUmVzb3VyY2UoYnJsLCBOVUxMKTsKKworICBpZiAoYnJsLT5kYXRhKSB7CisgICAgZnJlZShicmwtPmRhdGEpOworICAgIGJybC0+ZGF0YSA9IE5VTEw7CisgIH0KK30KKworc3RhdGljIGludAorYnJsX3dyaXRlV2luZG93IChCcmFpbGxlRGlzcGxheSAqYnJsLCBjb25zdCB3Y2hhcl90ICp0ZXh0KSB7CisgIGlmIChjZWxsc0hhdmVDaGFuZ2VkKGJybC0+ZGF0YS0+dGV4dC5jZWxscywgYnJsLT5idWZmZXIsIGJybC0+dGV4dENvbHVtbnMsCisgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIE5VTEwsICZicmwtPmRhdGEtPnRleHQucmV3cml0ZSkpIHsKKyAgICB1bnNpZ25lZCBjaGFyIGNlbGxzW2JybC0+dGV4dENvbHVtbnNdOworCisgICAgdHJhbnNsYXRlT3V0cHV0Q2VsbHMoY2VsbHMsIGJybC0+ZGF0YS0+dGV4dC5jZWxscywgYnJsLT50ZXh0Q29sdW1ucyk7CisgIH0KKworICByZXR1cm4gMTsKK30KKworc3RhdGljIGludAorYnJsX3JlYWRDb21tYW5kIChCcmFpbGxlRGlzcGxheSAqYnJsLCBLZXlUYWJsZUNvbW1hbmRDb250ZXh0IGNvbnRleHQpIHsKKyAgdW5zaWduZWQgY2hhciBwYWNrZXRbTUFYSU1VTV9SRVNQT05TRV9TSVpFXTsKKyAgc2l6ZV90IHNpemU7CisKKyAgd2hpbGUgKChzaXplID0gcmVhZFBhY2tldChicmwsIHBhY2tldCwgc2l6ZW9mKHBhY2tldCkpKSkgeworICAgIGxvZ1VuZXhwZWN0ZWRQYWNrZXQocGFja2V0LCBzaXplKTsKKyAgfQorCisgIHJldHVybiAoZXJybm8gPT0gRUFHQUlOKT8gRU9GOiBCUkxfQ01EX1JFU1RBUlRCUkw7Cit9CmRpZmYgLS1naXQgYS9Ecml2ZXJzL0JyYWlsbGUvU2tlbGV0b24vYnJsZGVmcy14eC5oIGIvRHJpdmVycy9CcmFpbGxlL1NrZWxldG9uL2JybGRlZnMteHguaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMTQwYTI5Ci0tLSAvZGV2L251bGwKKysrIGIvRHJpdmVycy9CcmFpbGxlL1NrZWxldG9uL2JybGRlZnMteHguaApAQCAtMCwwICsxLDIyIEBACisvKgorICogQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyAqICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyAqCisgKiBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorICoKKyAqIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyAqCisgKiBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisgKi8KKworI2lmbmRlZiBCUkxUVFlfSU5DTFVERURfWFhfQlJMREVGUworI2RlZmluZSBCUkxUVFlfSU5DTFVERURfWFhfQlJMREVGUworCisjZW5kaWYgLyogQlJMVFRZX0lOQ0xVREVEX1hYX0JSTERFRlMgKi8gCmRpZmYgLS1naXQgYS9Ecml2ZXJzL0JyYWlsbGUvVFNJL01ha2VmaWxlLmluIGIvRHJpdmVycy9CcmFpbGxlL1RTSS9NYWtlZmlsZS5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOGJmZWMwCi0tLSAvZGV2L251bGwKKysrIGIvRHJpdmVycy9CcmFpbGxlL1RTSS9NYWtlZmlsZS5pbgpAQCAtMCwwICsxLDI4IEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisjICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorIworIyBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisjCisjIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisjCisjIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyMgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorIyBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyMKKyMgV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworIworIyBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworRFJJVkVSX0NPREUgPSB0cworRFJJVkVSX05BTUUgPSBUU0kKK0RSSVZFUl9VU0FHRSA9IE5hdmlnYXRvciAyMC80MC84MCwgUG93ZXJCcmFpbGxlIDQwLzY1LzgwCitEUklWRVJfVkVSU0lPTiA9IDIuNzQgKEFwcmlsIDIwMDQpCitEUklWRVJfREVWRUxPUEVSUyA9IFN0w6lwaGFuZSBEb3lvbiA8cy5kb3lvbkB2aWRlb3Ryb24uY2E+CitpbmNsdWRlICQoU1JDX1RPUClicmFpbGxlLm1rCisKK2JyYWlsbGUuJE86CisJJChDQykgJChCUkxfQ0ZMQUdTKSAtYyAkKFNSQ19ESVIpL2JyYWlsbGUuYworCmRpZmYgLS1naXQgYS9Ecml2ZXJzL0JyYWlsbGUvVFNJL1JFQURNRSBiL0RyaXZlcnMvQnJhaWxsZS9UU0kvUkVBRE1FCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVlYmViMDcKLS0tIC9kZXYvbnVsbAorKysgYi9Ecml2ZXJzL0JyYWlsbGUvVFNJL1JFQURNRQpAQCAtMCwwICsxLDIzOSBAQAorVGhpcyBpcyB0aGUgQlJMVFRZIGRyaXZlciBmb3IgVFNJIGJyYWlsbGUgZGlzcGxheXMsCitWZXJzaW9uIDIuNzQgQXByaWwgMjAwNAorCitBdXRob3IgYW5kIG1haW50YWluZXI6CisgICAgICAgIFN06XBoYW5lIERveW9uCitFLU1haWw6IHMuZG95b25AdmlkZW90cm9uLmNhCisKK1RoaXMgZHJpdmVyIGNvbnRhaW5zIHRoZSBjb2RlIHRvIHN1cHBvcnQgbW9zdCBvZiBUZWxlc2Vuc29yeSBTeXN0ZW1zJyBicmFpbGxlCitkaXNwbGF5cy4gSXQgaXMgYSBwYXJ0IG9mIHRoZSBzb3VyY2UgY29kZSBmb3IgQlJMVFRZLiBUaGUgaW5mb3JtYXRpb24gaGVyZQorcGVydGFpbnMgb25seSB0byB0aGUgc3VwcG9ydCBvZiB0aGUgVFNJIGRpc3BsYXlzLiBZb3UgbXVzdCBhbHNvIHJlYWQgdGhlCitkb2N1bWVudGF0aW9uIG9mIHRoZSBtYWluIG1vZHVsZSBvZiBCUkxUVFkuCisKK1RoZXJlIGlzIG9ubHkgYSBoYW5kZnVsIG9mIEJSTFRUWSB1c2Vycy4gSWYgeW91IGFyZSB0cnlpbmcgb3V0IG15IGRyaXZlciwKK3BsZWFzZSBsZXQgbWUga25vdyEgSSBhbSB3aWxsaW5nIHRvIGhlbHAgYW5kIEkgYW0gb3BlbiB0byBzdWdnZXN0aW9ucy4KKworU2VlIHRoZSBoZWFkZXJzIG9mIGJybC5jIGZvciBoaXN0b3J5IG5vdGVzLgorCitTdXBwb3J0ZWQgYnJhaWxsZSBkaXNwbGF5cworPT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgTmF2aWdhdG9yIDIwIC8gNDAgLyA4MCAobGF0ZXN0IGZpcm13YXJlIHZlcnNpb24gb25seT8pCisgIFBvd2VyQnJhaWxsZSA0MCAvIDY1IC8gODAKKworVW5zdXBwb3J0ZWQgZGlzcGxheXM6CisgIE9sZGVyIGZpcm13YXJlIHZlcnNpb25zIG9mIHRoZSBuYXZpZ2F0b3IgbW9kZWxzIG1heSBub3Qgd29yay4KKworSSBoYXZlIHVzZWQgb2xkZXIgdmVyc2lvbnMgb2YgdGhpcyBkcml2ZXIgZXZlcnkgZGF5IGZvciBvdmVyIHR3byB5ZWFycyB3aXRoIGEKK05hdmlnYXRvciA0MCwgc28gSSBjYW4gc2F5IHRoYXQgQlJMVFRZIGFuZCB0aGlzIGRyaXZlciBhcmUgcHJldHR5IHN0YWJsZS4KK1NpbmNlIHZlcnNpb24gMi4wIG9mIHRoaXMgZHJpdmVyLCBJIGhhdmUgaW50ZWdyYXRlZCBzdXBwb3J0IGZvciBQQjgwCitkaXNwbGF5cy4gSSBoYXZlIHVzZWQgYSBQb3dlckJyYWlsbGUgODAgZm9yIG5lYXJseSBhIHllYXIgbm93LCBhbmQgYQorUG93ZXJCcmFpbGxlIDQwIGZvciBhIGZldyBtb250aHMuIEkgaGF2ZSBoYWQgc3VjY2VzcyByZXBvcnRzIGZyb20gYWJvdXQgMTAKK290aGVyIHBlb3BsZSAobW9zdCBvZiB0aGVtIHVzZSBhIFBvd2VyQnJhaWxsZSA0MCkuIE5hdmlnYXRvciA0MCBoYXMgbm90IGJlZW4KK3Rlc3RlZCBzaW5jZSB2ZXJzaW9uIDIuMSBvZiB0aGlzIGRyaXZlciAoSSBjaGFuZ2VkIG15IE5hdmlnYXRvciA0MCBmb3IgYQorUG93ZXJCcmFpbGxlIDQwKS4gTmF2aWdhdG9yIDIwIGFuZCA4MCBzaG91bGQgd29yayBidXQgaGFzIG5ldmVyIGJlZW4gdGVzdGVkLgorCitJIGFtIGN1cnJlbnRseSB0cnlpbmcgdG8gZGVidWcgc3VwcG9ydCBmb3IgdHdvIGVtdWxhdG9ycyBvZiB0aGUKK1Bvd2VyQnJhaWxsZSA0MC4gCistIEJBVU0gZGlzcGxheXMgKFZhcmlvPyk6IFRoaXMgZGlzcGxheSBlbXVsYXRlcyBhIFBvd2VyQnJhaWxsZSA0MC4gSG93ZXZlciwKKyAgICBpdCBjYW5ub3Qgb3BlcmF0ZSBhdCAxOTIwMGJhdWQgYXMgUG93ZXJCcmFpbGxlIG1vZGVscyBjYW4uIFRoZSBkcml2ZXIKKyAgICBub3cgZGV0ZWN0cyB0aGlzIGFuZCBmYWxscyBiYWNrIHRvIDk2MDBiYXVkLiBJIGRvbid0IGtub3cgbXVjaCBhYm91dAorICAgIEJBVU0gZGlzcGxheSBtb2RlbHMuIEkgaGF2ZSBoYWQgdHdvIHN1Y2Nlc3MgcmVwb3J0cyBidXQgYWxzbyBvbmUgZmFpbHVyZQorICAgIHJlcG9ydC4KKy0gbWR2IG1iNDA4czogVGhpcyBkaXNwbGF5IGFsc28gZW11bGF0ZXMgYSBQb3dlckJyYWlsbGUgNDAgYW5kIGl0IHRvbyBpcworICAgIGNhcGFibGUgb2Ygb3BlcmF0aW5nIG9ubHkgYXQgOTYwMGJhdWQuIEhvd2V2ZXIgaXQgYWxzbyBoYXMgYWRkaXRpb25hbAorICAgIHRpbWluZyBjb25zdHJhaW50cy4gUGxlYXNlIHVuY29tbWVudCB0aGUgRk9SQ0VfRlVMTF9TRU5EX0RFTEFZIG9wdGlvbiAKKyAgICBpbiBicmFpbGxlLmggYmVmb3JlIGNvbXBpbGluZy4gVGhpcyBoYXMgYmVlbiB0ZXN0ZWQgYnkgb25seSBvbmUgcGVyc29uLgorSG93ZXZlciB3aXRoIGJvdGggdGhlc2UgZW11bGF0b3JzLCB0aGVyZSBpcyBhbm90aGVyIGxpbWl0YXRpb246IHRoZSBrZXkKK2NvbmZpZ3VyYXRpb25zIGFyZSBub3QgdGhlIHNhbWUgYXMgdGhhdCBvZiBhbnkgVFNJIG1vZGVsIGFuZCBzb21lIGtleQorY29tYmluYXRpb25zIGZvciBjZXJ0YWluIGNvbW1hbmRzIG1heSBiZSBkaWZmaWN1bHQgb3IgaW1wb3NzaWJsZSB0bworcmVwcm9kdWNlLiBTcGVjaWZpYyBkcml2ZXJzIG5lZWQgdG8gYmUgd3JpdHRlbiBmb3IgdGhlc2UgbW9kZWxzLCBhbmQgZWZmb3J0cworYXJlIHVuZGVyIHdheS4gVW50aWwgdGhlbiwgdGhlIGRyaXZlciByZW1haW5zIHVzZWZ1bCBhbmQgYXQgbGVhc3QgcGFydGx5CitmdW5jdGlvbmFsIGV2ZW4gd2l0aCB0aGlzIGxpbWl0YXRpb24uCisKK0ZvciBpbXBhdGllbnRzCis9PT09PT09PT09PT09PQorCitJZiB5b3UgcmVhbGx5IHdhbnQgdG8gZ28gYWhlYWQgcmlnaHQgbm93IHdpdGhvdXQgZnVydGhlciByZWFkaW5nLCB3ZWxsIHRoZW4KK2dvIGZvciBpdDogbm8gc3BlY2lhbCBjb25maWd1cmF0aW9uIGlzIHJlYWxseSBuZWNlc3NhcnkuIEFsbCB5b3UgaGF2ZSB0byBrbm93CitpcyB0aGUga2V5IHRvIGJyaW5nIHVwIHRoZSBoZWxwIHNjcmVlbjoKKyAgLSBGb3IgbmF2aWdhdG9yIHVzZXJzOiBwcmVzcyB0aGUgImN1cnNvciBsZWZ0IiBhbmQgImN1cnNvciByaWdodCIga2V5cworICAgIHRvZ2V0aGVyLgorICAtIEZvciBQQjQwIHVzZXJzOiBwcmVzcyB0aGUgZmlyc3QgYW5kIHRoZSBsYXN0IGN1cnNvciByb3V0aW5nIGtleXMKKyAgICB0b2dldGhlciAoY3Vyc29yIHJvdXRpbmcga2V5cyAxIGFuZCA0MCkuCisgIC0gRm9yIFBCNjUvODAgdXNlcnM6IFByZXNzIGN1cnNvciByb3V0aW5nIGtleXMgMSBhbmQgODAgdG9nZXRoZXIsIG9yIHByZXNzCisgICAgdGhlIHR3byBzbWFsbCBzcXVhcmUgYnV0dG9ucyBvbiB0b3AgYW5kIHRvIHRoZSBsZWZ0IG9mIHRoZSBkaXNwbGF5LgorCitDb25uZWN0aW5nIHRoZSBkaXNwbGF5Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworTmF2aWdhdG9yIHVzZXJzIHNob3VsZCBjb25uZWN0IHRoZWlyIGRpc3BsYXlzIHRoZSBzYW1lIHdheSBhcyB0aGV5IGRvCitmb3IgdXNlIHVuZGVyIERPUy4gUG93ZXJCcmFpbGxlIHVzZXJzIGhvd2V2ZXIgbWlnaHQgcmVxdWlyZSBhZGRpdGlvbmFsCitpbnN0cnVjdGlvbnMuCisKK1RoaXMgZHJpdmVyIG9ubHkgc3VwcG9ydHMgdGhlIHNlcmlhbCBpbnRlcmZhY2UgdG8gdGhlIFBvd2VyQnJhaWxsZTogeW91CitjYW5ub3QgdXNlIGl0cyBwYXJhbGxlbCBwb3J0LiBZb3Ugd2lsbCB0aGVyZWZvcmUgbmVlZCBhIHNlcmlhbCBjYWJsZSB0bworY29ubmVjdCB5b3VyIFBvd2VyQnJhaWxsZSB0byB5b3VyIGNvbXB1dGVyLiBUaGUgY2FibGUgbXVzdCBiZSAic3RyYWlnaHQKK3Rocm91Z2giIChub3QgIm51bGwtbW9kZW0iKS4gQ29ubmVjdCBvbmUgZW5kIHRvIG9uZSBvZiB0aGUgQ09NIHBvcnRzIG9mCit5b3VyIGNvbXB1dGVyIGFuZCB0aGUgb3RoZXIgdG8gdGhlIERDRSBwb3J0ICh0aGUgOS1waW4gZmVtYWxlIGNvbm5lY3RvcikKK29uIHRoZSBQb3dlckJyYWlsbGUuCisKK0NvbmZpZ3VyYXRpb24gb2YgdGhlIGRyaXZlcgorPT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1RoZSBmaWxlIGJyYWlsbGUuaCBjb250YWlucyBzb21lIGZldyBwYXJhbWV0ZXJzIHNwZWNpZmljIHRvIHRoaXMgZHJpdmVyCit3aGljaCB5b3UgY2FuIG1vZGlmeSwgYnV0IHlvdSByZWFsbHkgZG9uJ3QgaGF2ZSB0by4gTm8gYWRqdXN0bWVudHMgYXJlCituZWNlc3Nhcnk6IGV2ZXJ5dGhpbmcgd2lsbCBiZSBhdXRvZGV0ZWN0ZWQgYnkgdGhlIGRyaXZlciB3aGVuIHlvdSBzdGFydCBCUkxUVFkuCisKK1Bvd2VyQnJhaWxsZSBkaXNwbGF5cyBjYW4gb3BlcmF0ZSBhdCAxOTIwMCBiYXVkLiBJZiB5b3UgZG9uJ3QgdHJ1c3QgeW91ciBzZXJpYWwgCitwb3J0IHRvIG9wZXJhdGUgYXQgdGhhdCBzcGVlZCAoZm9yIGV4YW1wbGUsIGlmIHlvdSdyZSB1c2luZyBET1MpLCB5b3UgY2FuIAorZGlzYWJsZSB0aGlzIGZlYXR1cmUgd2l0aCB0aGUgSGlnaEJhdWQ9bm8gZHJpdmVyIHBhcmFtZXRlciwgYW5kIGNyYXdsIGF0IDk2MDAgCitiYXVkLgorCitUaGUgSGlnaEJhdWQ9IGRyaXZlciBwYXJhbWV0ZXIgc3BlY2lmaWVzIHdoZXRoZXIgb3Igbm90IHRoZSBkcml2ZXIgaXMgcGVybWl0dGVkIAordG8gdXNlIDE5MjAwIGJhdWQuIEl0IGNhbiBiZSBzZXQgdG8gZWl0aGVyIHllcyAodGhlIGRlZmF1bHQpIG9yIG5vLiBOb3RlIHRoYXQgCitpZiB0aGlzIHBhcmFtZXRlciBpcyBzZXQgdG8gbm8gYnV0IHRoZSBkaXNwbGF5IGhhcyBiZWVuIGNvbmZpZ3VyZWQgdG8gb3BlcmF0ZSAKK2F0IDE5MjAwIGJhdWQgdGhlbiBpdCB3b24ndCBiZSBhdXRvZGV0ZWN0ZWQuCisKK1RoZSBTZXRCYXVkPSBkcml2ZXIgcGFyYW1ldGVyIHNwZWNpZmllcyB3aGljaCBiYXVkIGlzIHRvIGJlIHVzZWQuIEl0IGNhbiBiZSBzZXQgCit0byA0ODAwLCA5NjAwLCBvciAxOTIwMC4gVGhlIGRlZmF1bHQgaXMgdG8gdXNlIDE5MjAwIGJhdWQgaWYgdGhlIGRpc3BsYXkgCitzdXBwb3J0cyBpdCBvciB0byB1c2UgdGhlIGJhdWQgYXQgd2hpY2ggdGhlIGRpc3BsYXkgd2FzIGF1dG9kZXRlY3RlZCBpZiBpdCAKK2RvZXNuJ3QuCisKK1lvdSB1c3VhbGx5IHdvbid0IG5lZWQgdG8gc3BlY2lmeSBhbnkgb2YgdGhlc2UgZHJpdmVyIHBhcmFtZXRlcnMuIEEgY2FzZSB3aGVyZSAKK3lvdSB3b3VsZCwgdGhvdWdoLCBpcyBpZiB5b3UncmUgdXNpbmcgYSBQb3dlckJyYWlsbGUgb24gRE9TIGJlY2F1c2UgRE9TIAorZG9lc24ndCBzdXBwb3J0IGhpZ2hlciB0aGFuIDk2MDAgYmF1ZC4gSW4gdGhpcyBzaXR1YXRpb24sIHlvdSdsbCB3YW50IHRvIAorc3BlY2lmeSB0aGUgSGlnaEJhdWQ9bm8gZHJpdmVyIHBhcmFtZXRlci4gWW91J2xsIHN0aWxsIGhhdmUgYSBwcm9ibGVtLCB0aG91Z2gsIAoraWYgdGhlIFBvd2VyQnJhaWxsZSBpcyBjdXJyZW50bHkgY29uZmlndXJlZCB0byB1c2UgMTkyMDAgYmF1ZC4gSWYgdGhpcyBpcyB0aGUgCitjYXNlLCBmaXJzdCBjb25uZWN0IGl0IHRvIGEgc3lzdGVtIHRoYXQgZG9lcyBzdXBwb3J0IDE5MjAwIGJhdWQgYW5kIHNwZWNpZnkgdGhlIAorU2V0QmF1ZD05NjAwIGRyaXZlciBwYXJhbWV0ZXIuIFNvLCBmb3IgZXhhbXBsZToKKworICAgb24gTGludXg6IC1CIFNldEJhdWQ9OTYwMAorICAgb24gRE9TOiAtQiBIaWdoQmF1ZD1ubworCitOb3RlIHRoYXQgYnJhaWxsZSBkcml2ZXIgcGFyYW1ldGVycyBjYW4gYmUgc3BlY2lmaWVkIGVpdGhlciB2aWEgdGhlIC1CIAorKHVwcGVyY2FzZSkgY29tbWFuZCBsaW5lIG9wdGlvbiBvciB2aWEgdGhlIGJyYWlsbGUtcGFyYW1ldGVycyBicmx0dHkuY29uZiAKK2RpcmVjdGl2ZS4gVGhlIGZvcm1hdCBpcyBuYW1lPXZhbHVlLiBTbywgZm9yIGV4YW1wbGU6CisKKyAgIG9uIHRoZSBjb21tYW5kIGxpbmU6IC1CIEhpZ2hCYXVkPW5vCisgICBpbiBicmx0dHkuY29uZjogYnJhaWxsZS1wYXJhbWV0ZXJzIEhpZ2hCYXVkPW5vCisKK0luaXRpYWxpemF0aW9uIGFuZCByZXNldAorPT09PT09PT09PT09PT09PT09PT09PT09CisKK1doZW4gQlJMVFRZIGlzIHN0YXJ0ZWQsIGl0IHdpbGwgY2FsbCBhIGZ1bmN0aW9uIHdpdGhpbiB0aGlzIGRyaXZlciB0byBkZXRlY3QKK2FuZCBpbml0aWFsaXplIGEgYnJhaWxsZSBkaXNwbGF5LiBJZiBub25lIGlzIGNvbm5lY3RlZCwgdGhlbiB0aGUgd2hvbGUKK0JSTFRUWSBwcm9jZXNzIHdpbGwgc2xlZXAgdW50aWwgYSBicmFpbGxlIGRpc3BsYXkgaXMgY29ubmVjdGVkIGFuZCB0dXJuZWQgb24uCitJbW1lZGlhdGx5LCBpdCB3aWxsIGJlIGRldGVjdGVkLCBpZGVudGlmaWVkLCBpbml0aWFsaXplZCwgYW5kIHVwZGF0ZWQgd2l0aAorYSB3ZWxjb21lIG1lc3NhZ2UsIGFuZCB0aGVuIHdpdGggc29tZSB0ZXh0IGZyb20gdGhlIHNjcmVlbi4gSXQgd2lsbCB0aGVuIGJlCityZWFkeSBmb3IgdXNlLgorCitUaGlzIG1lYW5zIHRoYXQgeW91ciBicmFpbGxlIGRpc3BsYXkgbmVlZCBub3QgYmUgYWN0aXZlIHdoZW4geW91ciBtYWNoaW5lCitib290cyAod2hlbiBCUkxUVFkgc3RhcnRzIHVwKS4KKworRnVydGhlcm1vcmUsIHlvdSBtYXkgYWxzbyB0dXJuIG9mZiB5b3VyIGRpc3BsYXkgYXQgYW55IHRpbWUgd2hpbGUgQlJMVFRZIGlzCitydW5uaW5nLCB0YWtlIGl0IGF3YXkgZm9yIHRoZSBkYXkgd2hpbGUgeW91ciBjb21wdXRlciBpcyBzdGlsbCBydW5uaW5nLCBhbmQKK2Nvbm5lY3QgaXQgYmFjayBsYXRlci4gQWZ0ZXIgMiBvciAzIHNlY29uZHMsIEJSTFRUWSB3aWxsIHJlYWxpemUgdGhhdCB0aGUKK2Rpc3BsYXkgaXMgb2ZmIG9yIGRpc2Nvbm5lY3RlZC4gSXQgd2lsbCB0aGVuIGdvIGJhY2sgdG8gd2FpdGluZyBmb3IgeW91IHRvCitjb25uZWN0IGl0IGFuZCB0dXJuIGl0IG9uLCBhdCB3aGljaCBwb2ludCBpdCB3aWxsIHJlaW5pdGlhbGl6ZSBpdC4KKworS2V5IGJpbmRpbmdzCis9PT09PT09PT09PT0KKworVGhlIG9ubGluZSBoZWxwIGRlc2NyaWJlcyB0aGUga2V5IGJpbmRpbmdzOiBmb3IgZWFjaCBhdmFpbGFibGUgZnVuY3Rpb24sIHRoZQorZGlzcGxheSBrZXkgb3IgY29tYmluYXRpb24gb2Yga2V5cyB0aGF0IGFjdGl2YXRlcyBpdCBpcyBsaXN0ZWQuIEZvciBkZXRhaWxzCitvbiB0aGUgZnVuY3Rpb25zIHRoZW1zZWx2ZXMsIHNlZSB0aGUgZG9jdW1lbnRhdGlvbiBvZiB0aGUgbWFpbiBtb2R1bGUgb2YKK0JSTFRUWS4gSGVyZSBhZ2FpbiBpcyBob3cgdG8gYnJpbmcgdXAgdGhlIGhlbHAgc2NyZWVuOgorICAtIEZvciBuYXZpZ2F0b3IgdXNlcnM6IHByZXNzIHRoZSAiY3Vyc29yIGxlZnQiIGFuZCAiY3Vyc29yIHJpZ2h0IiBrZXlzCisgICAgdG9nZXRoZXIuCisgIC0gRm9yIFBCNDAgdXNlcnM6IHByZXNzIHRoZSBmaXJzdCBhbmQgdGhlIGxhc3QgY3Vyc29yIHJvdXRpbmcga2V5cworICAgIHRvZ2V0aGVyIChjdXJzb3Igcm91dGluZyBrZXlzIDEgYW5kIDQwKS4KKyAgLSBGb3IgUEI2NS84MCB1c2VyczogUHJlc3MgY3Vyc29yIHJvdXRpbmcga2V5cyAxIGFuZCA4MCB0b2dldGhlciwgb3IgcHJlc3MKKyAgICB0aGUgdHdvIHNtYWxsIHNxdWFyZSBidXR0b25zIG9uIHRvcCBhbmQgdG8gdGhlIGxlZnQgb2YgdGhlIGRpc3BsYXkuCisKK0kgYW0gb3BlbiB0byBzdWdnZXN0aW9ucy4gSWYgeW91IGRvbid0IGxpa2UgdGhlIGhlbHAgc2NyZWVuLCBpZiB5b3UgZmluZCB0aGUKK25hbWVzIG9mIHRoZSBrZXlzIGNvbmZ1c2luZywgaWYgeW91IGZpbmQgYW4gaW5jb25zaXN0ZW5jeSBvciBpZiB5b3UganVzdCBkb24ndAorbGlrZSB0aGUgYmluZGluZ3MgSSBoYXZlIGNob3Nlbiwgc2VuZCBtZSB5b3VyIGNvbW1lbnRzLiBJdCBpcyBub3QgdmVyeSBoYXJkIHRvCitjaGFuZ2Ugd2hpY2gga2V5cyB0cmlnZ2VyIHdoaWNoIGZ1bmN0aW9uLiBJIGhhdmUgdHJ5ZWQgdG8gY29tZSB1cCB3aXRoIHRoZQorYmVzdCBhcnJhbmdlbWVudCBidXQgeW91IG1pZ2h0IGhhdmUgYSBiZXR0ZXIgaWRlYS4KKworSWYgYW55IG9mIHRoZSBrZXlzIG1lbnRpb25lZCBpbiB0aGUgaGVscCBzY3JlZW4gZG8gbm90IHdvcmsgb3IgYXJlIHNvbWVob3cKK2luY29uc2lzdGFudCwgcGxlYXNlIGxldCBtZSBrbm93LgorCitJbiBnZW5lcmFsIHRoZSBrZXkgYmluZGluZ3MgYXJlIHRoZSBzYW1lIGZvciBhbGwgdGhlIGRpcGxheXMsIE5hdmlnYXRvcgorYW5kIFBvd2VyQnJhaWxsZSBtb2RlbHMgYWxpa2UuIFRoZSBOYXZpZ2F0b3IgODAgYW5kIHRoZSBQb2V3ckJyYWlsbGUgNDAgc2ltcGx5CitoYXZlIHNvbWUgYWRkZWQga2V5IGJpbmRpbmdzIHRvIHRha2UgYWR2YW50YWdlIG9mIHRoZWlyIHJvdXRpbmcga2V5cy4KK0Z1cnRoZXJtb3JlLCBjZXJ0YWluIGtleSBjb21iaW5hdGlvbnMgdGhhdCBjYW4gY29udmluaWVudGx5IGJlIHByZXNzZWQgb24KK3RoZSBOYXZpZ2F0b3IgMjAvNDAgY2Fubm90IGJlIGVudGVyZWQgb24gYSBQb3dlckJyYWlsbGUgc2luY2UgaXQgZG9lcyBub3QKK2hhdmUgdGhlIGN1cnNvciBsZWZ0L3JpZ2h0IGtleXMgYW5kIHNpbmNlIGl0IHVzZXMgcm9ja2VycyBpbnN0ZWFkIG9mIGJ1dHRvbgorcGFpcnMuCisKK0J1dCB5b3UgZG8gbm90IGhhdmUgdG8gd29ycnksIHNpbmNlIHRoZSBoZWxwIHNjcmVlbiB0aGF0IGlzIHByb3ZpZGVkIHdpbGwKK3ZhcnkgYWNjb3JkaW5nIHRvIHRoZSBtb2RlbCBvZiB0aGUgZGlzcGxheSB0aGF0IGlzIGRldGVjdGVkLiBJbiBmYWN0LCB0aGUKK2ZpcnN0IGxpbmUgb2YgdGhlIGhlbHAgc2NyZWVuIGlkZW50aWZpZXMgdGhlIGRpc3BsYXkgbW9kZWwgdGhhdCB3YXMgZGV0ZWN0ZWQuCitJZiB0aGlzIGlzIGluY29ycmVjdCwgdGhlbiB5b3UncmUgaW4gdHJvdWJsZSBhbmQgeW91IHNob3VsZCBjb250YWN0IG1lIQorCitJJ3ZlIHRyeWVkIHRvIGtlZXAga2V5IGJpbmRpbmdzIHNpbWlsYXIgdG8gd2hhdCBpcyB1c2VkIHVuZGVyIERPUywgYnV0IHRoZXJlCithcmUgc2V2ZXJhbCBkaWZmZXJlbmNlcy4gQmFzaWMgbW92ZW1lbnQgb2YgdGhlIGJyYWlsbGUgZGlzcGxheSBpcyB0aGUKK3NhbWUsIGJ1dCBzZXZlcmFsIGJpbmRpbmdzIGhhdmUgYmVlbiBhZGRlZCBmb3IgbW9yZSBlbGFib3JhdGUKK2Z1bmN0aW9uYWxpdGllcy4gWW91IGFsc28gaGF2ZSB0aG9zZSBrZXlzIHRoYXQgYXJlIG1hcHBlZCB0byB0aGUga2V5Ym9hcmQKK2Fycm93IGtleXMsIGJ1dCBJIGRpZCBub3QgdGhpbmsgaXQgd2FzIHJlYWxseSByZWxldmFudCB0byBoYXZlIGEga2V5IGFjdCBhcyB0aGUKK1JFVFVSTiBrZXkuIEFsc28gdGhlIGxpbmsvdW5saW5rIGJ1dHRvbiBkb2VzIG5vdCBleGFjdGx5IHdvcmsgdGhlIHNhbWU6IHRoZQorcmlnaHRtb3N0IG9mIHRoZSBmcm9udCBtaWRkbGUgYnV0dG9ucyBzaW1wbHkganVtcHMgdG8gdGhlIGN1cnNvcjsgaXQgaXMgbm90CithIHRvZ2dsZS4gVGhlIGxlZnQgYnV0dG9uIHRvZ2dsZXMgdGhlIGxpbmsvdW5saW5rICh3aGV0aGVyIG9yIG5vdCB0aGUgYnJhaWxsZQorZGlzcGxheSBzaG91bGQgZm9sbG93IHRoZSBjdXJzb3IgaWYgaXQgbW92ZXMpLCBidXQgdW5saW5raW5nIHRoZSBicmFpbGxlCitkaXNwbGF5IGZyb20gdGhlIGN1cnNvciBjYW4gYmUgZG9uZSB3aXRob3V0IGJyaW5naW5nIHRoZSBicmFpbGxlIHdpbmRvdyBiYWNrCit0byB0aGUgY3Vyc29yIGJlZWZvcmVoYW5kLgorCitBbHNvIG5vdGUgdGhhdCB0aGVyZSBpcyBubyBmdW5jdGlvbiB0byBjb21iaW5lIGxpbmVzIGFuZCB3cmFwIHdvcmRzLi4uCitUaGVyZSBpcyBob3dldmVyIGEgZnVuY3Rpb24gdG8gc2tpcCBpZGVudGljYWwgbGluZXMuCisKK0ZvciBOYXZpZ2F0b3IgMjAvNDAgdXNlcnM6CisgICAgWW91IHdpbGwgZmluZCBvbmUgaW50ZXJlc3RpbmcgYWRkaXRpb24gdG8gY3Vyc29yIHJvdXRpbmc6IG5vdyB5b3UgZG8gbm90Citvbmx5IGhhdmUgYSBmdW5jdGlvbiB0aGF0IHJvdXRlcyB0aGUgY3Vyc29yIHRvIHRoZSBiaWdpbm5pbmcgb2YgdGhlIGRpc3BsYXksCit5b3UgYWxzbyBoYXZlIGFub3RoZXIgZnVuY3Rpb24gdGhhdCBicmluZ3MgaXQgc29tZXdoZXJlIHRvd2FyZHMgdGhlIGVuZCBvZgordGhlIGRpc3BsYXkuIEkgZmluZCBpdCBxdWl0ZSB1c2VmdWwuIEJSTFRUWSBhbHNvIHN1cHBvcnRzIGEgY3V0LWFuZC1wYXN0ZQorZnVuY3Rpb25hbGl0eSB0aGF0IGNhbiBiZSB0cmlnZ2VyZWQgZnJvbSB0aGUgYnJhaWxsZSBkaXNwbGF5LiBUaGlzIGhhcworZm9yY2VkIG1lIHRvIGFkZCBhIHZlcnkgc3RyYW5nZSB0d2lzdCB0byB0aGUgaW50ZXJmYWNlLiBVc2VycyBvZiBicmFpbGxlCitkaXNwbGF5cyB3aXRoIGN1cnNvciByb3V0aW5nIGtleXMgbm9ybWFsbHkgd2lsbCBtYXJrIHRleHQgdG8gYmUgY3V0L2NvcGllZAorYnkgdXNpbmcgc29tZSBjb21iaW5hdGlvbiBvZiB0aGVzZSByb3V0aW5nIGtleXMuIFNpbmNlIHdlIGRvbid0IGhhdmUgdGhlbSwKK0kndmUgYWRkZWQgYSBrZXkgYmluZGluZyB0aGF0IGJyaW5ncyB5b3UgaW50byBhIHNwZWNpYWwgbW9kZSBpbiB3aGljaCBhCisidmlydHVhbCIgY3Vyc29yIGFwcGVhcnMuIEJ5IG1vdmluZyB0aGF0IHNwZWNpYWwgY3Vyc29yIGFyb3VuZCB5b3UgY2FuIG1hcmsgdXAKK3RoZSBzdGFydCBvZiB0aGUgdGV4dCB0byBjdXQuIEFzIHNvb24gYXMgdGhpcyBtYXJrIGlzIG1hZGUsIHlvdSBhcmUgcmV0dXJuZWQKK3RvIHRoZSBub3JtYWwgbW9kZSBvZiBvcGVyYXRpb24uIFlvdSBjYW4gdGhlbiBtb3ZlIHRvIHRoZSBlbmQgb2YgdGhlCit0ZXh0IHRvIG1hcmssIHJlYWN0aXZhdGUgdGhlIHNwZWNpYWwgY3Vyc29yIG1vZGUsIGFuZCBtYXJrIHRoZSBlbmQgb2YgdGhlCit0ZXh0LiBBdCB0aGF0IHBvaW50IHRoZSB0ZXh0IHdpbGwgYnkgY29waWVkIGluIGEgYnVmZmVyLCBhbmQgeW91J2xsIGJlIGFibGUgdG8KK3Bhc3RlIGl0IHdoZXJldmVyIHlvdSB3YW50LiBOb3RlIHRoYXQgdGhlcmUgYWxzbyBhcmUgdHdvIHNob3J0Y3V0IGtleXMgdG8gZG8KK2N1dCAmIHBhc3RlOiBvbmUgY29tYmluYXRpb24gc3RhdGVzIHRoYXQgdGhlIGJsb2NrIG9mIHRleHQgdG8gYmUgY29waWVkIHN0YXJ0cworYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgZGlzcGxheSBhbmQgdGhlIG90aGVyIHN0YXRlcyB0aGF0IHRoZSBibG9jayBvZiB0ZXh0CitlbmRzIGF0IHRoZSBlbmQgb2YgdGhlIGJyYWlsbGUgZGlzcGxheS4gSnVzdCBleHBlcmltZW50IHdpdGggaXQgaW4gYW4gZWRpdG9yLgoreW91J2xsIHNlZSBpdCdzIGdyZWF0ISBNYWlsIG1lIGlmIHlvdSdyZSBtaXhlZCB1cC4KKworRm9yIE5hdmlnYXRvciA4MCAvIFBvd2VyQnJhaWxlIHVzZXJzOgorICAgIFlvdSB3aWxsIGZpbmQgdGhhdCBzZXZlcmFsIGtleSBiaW5kaW5ncyB1c2UgY29tYmluYXRpb25zIG9mIGN1cnNvcgorcm91dGluZyBrZXlzLiBZb3UgbWF5IG5vdCBiZSB1c2VkIHRvIHRoYXQuIEluIHBhcnRpY3VsYXIgdGhlIGN1dC1hbmQtcGFzdGUKK2Z1bmN0aW9ucywgdXNlZCB0byBtYXJrIHRoZSBzdGFydCBhbmQgdGhlIGVuZCBvZiBhIGJsb2NrIG9mIHRleHQgdG8gYmUKK2NvcGllZCwgdXNlcyBjb21iaW5hdGlvbnMgb2YgdGhyZWUga2V5cy4gT25lIG1vcmUgdGhpbmcgc28gdGhhdCB5b3UgZG9uJ3QgZ2V0Citjb25mdXNlZDogaXQgaXMgaW1wb3NzaWJsZSB0byBtYXJrIHRoZSBiZWdpbm5pbmcgb2YgYSBibG9jayBvZiB0ZXh0IHRvCitjdXQvY29weSBpbiB0aGUgbGFzdCB0d28gY2VsbHMgb2YgdGhlIGJyYWlsbGUgZGlzcGxheSwgYW5kIGl0IGlzIGltcG9zc2libGUKK3RvIG1hcmsgdGhlIGVuZCBvZiBhIGJsb2NrIGluIHRoZSBmaXJzdCB0d28gY2VsbHMuIFRoZXJlIGlzIGEgZnVuY3Rpb24gdGhhdAorYWxsb3dzIG1vdmVtZW50IG9mIHRoZSBicmFpbGxlIHdpbmRvdyBieSBvbmx5IGEgZmV3IGNoYXJhY3RlcnMgbGVmdCBvcgorcmlnaHQ6IHRoaXMgdXN1YWxseSBzdWZmaWNlcyB0byBnZXQgYXJvdW5kIHRoaXMgbGltaXRhdGlvbi4gQWdhaW4gaWYgeW91CitoYXZlIHN1Z2dlc3Rpb25zIGFzIHRvIHdoYXQgd291bGQgYmUgbW9zdCBjb252ZW5pZW50LCBkbyBub3QgaGVzaXRhdGUgdG8KK2NvbnRhY3QgbWUuCisKK0NyZWRpdHMKKz09PT09PT0KKworVGhhbmtzIHRvIEphc29uIEZheXJlIChJIGRvbid0IGhhdmUgaGlzIGN1cnJlbnQgYWRkcmVzcykgZm9yIGhpcyBwYXRpZW50IGhlbHAKK2luIGdldHRpbmcgUG93ZXJCcmFpbGxlIDQwIHN1cHBvcnQgd29ya2luZzogaGUgdGVzdGVkIGVhY2ggdmVyc2lvbiBvZiB0aGUKK1Bvd2VyQnJhaWxlIHN1cHBvcnQgdW50aWwgaXQgd29ya2VkLiBJIG15c2VsZiBkaWQgbm90IGhhdmUgYWNjZXNzIHRvIGEgUEI0MC4KK1dlIHdvcmtlZCBvdmVyIEUtbWFpbC4KKworVGhhbmtzIHRvIE5pY29sYXMgUGl0cmUgPG5pY29AZmx1eG5pYy5uZXQ+IGZvciBleHRlbnNpdmUgaGVscCB3cml0aW5nIHRoZSB2ZXJ5CitmaXJzdCB2ZXJzaW9uIG9mIHRoaXMgZHJpdmVyLiBJbml0aWFsbHksIHRoaXMgY29kZSB3YXMgZGVyaXZlZCBmcm9tIHRoYXQgb2YKK3RoZSBkcml2ZXIgZm9yIHRoZSBBbHZhIEFCVDQwLiBTdXJwcmlzaW5nIGhvdyBsaXR0bGUgdGhleSBoYXZlIGluIGNvbW1vbiBub3cuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1dlbGwgdGhhdCdzIGFib3V0IGl0ISBUcnkgaXQgb3V0IGFuZCBkbyBsZXQgbWUga25vdyBob3cgaXQgZ29lcyBQTEVBU0UhCisKK0hvcGUgdGhpcyBpcyBvZiB1c2UgdG8geW91IQpkaWZmIC0tZ2l0IGEvRHJpdmVycy9CcmFpbGxlL1RTSS9UT0RPIGIvRHJpdmVycy9CcmFpbGxlL1RTSS9UT0RPCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI0MDk0NzIKLS0tIC9kZXYvbnVsbAorKysgYi9Ecml2ZXJzL0JyYWlsbGUvVFNJL1RPRE8KQEAgLTAsMCArMSw2IEBACitDb2V4aXN0YW5jZSBvZiB0aGUga2V5IGJpbmRpbmdzIGZvciBOYXYgNDAsIE5hdiA4MCwgUEI0MCBhbmQgUEI4MCBpcworYmVjb21pbmcgZGlmZmljdWx0IHRvIG1hbmFnZSwgYW5kIGltcG9zc2libGUgdG8gY3VzdG9taXplLiBTaG91bGQKK2NvbnNpZGVyIHNwbGl0dGluZyB0aGUgbGF5b3V0cy4gQWxzbyBzaG91bGQgY2hlY2sgaG93IG90aGVycyB0aG91Z2h0IG9mCitkb2luZyB1c2VyLWNvbmZpZ3VyYWJsZSBiaW5kaW5ncy4gRmluYWxseSBzaG91bGQgY29uc2lkZXIgc29tZSBtZWNoYW5pc20KK2ZvciBhdXRvbWF0aWMgaGVscCBmaWxlIGdlbmVyYXRpb24sIGJlY2F1c2UgdGhleSBhcmUgYSBudWlzYW5jZSB0bworbWFpbnRhaW4gYXMgd2VsbC4KZGlmZiAtLWdpdCBhL0RyaXZlcnMvQnJhaWxsZS9UU0kvYnJhaWxsZS5jIGIvRHJpdmVycy9CcmFpbGxlL1RTSS9icmFpbGxlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmRkYzBiNgotLS0gL2Rldi9udWxsCisrKyBiL0RyaXZlcnMvQnJhaWxsZS9UU0kvYnJhaWxsZS5jCkBAIC0wLDAgKzEsOTAzIEBACisvKgorICogQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyAqICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyAqCisgKiBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorICoKKyAqIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyAqCisgKiBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisgKi8KKworLyogVFNJL2JyYWlsbGUuYyAtIEJyYWlsbGUgZGlzcGxheSBkcml2ZXIgZm9yIFRTSSBkaXNwbGF5cworICoKKyAqIFdyaXR0ZW4gYnkgU3TpcGhhbmUgRG95b24gKHMuZG95b25AdmlkZW90cm9uLmNhKQorICoKKyAqIEl0IGF0dGVtcHRzIGZ1bGwgc3VwcG9ydCBmb3IgTmF2aWdhdG9yIDIwLzQwLzgwIGFuZCBQb3dlcmJyYWlsbGUgNDAvNjUvODAuCisgKiBJdCBpcyBkZXNpZ25lZCB0byBiZSBjb21waWxlZCBpbnRvIEJSTFRUWSB2ZXJzaW9uIDMuNS4KKyAqCisgKiBIaXN0b3J5OgorICogVmVyc2lvbiAyLjc0IGFwcjIwMDQ6IHVzZSBtZXNzYWdlKCkgdG8gcmVwb3J0IGxvdyBiYXR0ZXJ5IGNvbmRpdGlvbi4KKyAqIFZlcnNpb24gMi43MyBqYW4yMDA0OiBGaXgga2V5IGJpbmRpbmdzIGZvciBzcGVlY2ggY29tbWFuZHMgZm9yIFBCODAuCisgKiAgIEFkZCBDTURfU1BLSE9NRSB0byBoZWxwLgorICogVmVyc2lvbiAyLjcyIGphbjIwMDM6IGJybC0+YnVmZmVyIG5vdyBhbGxvY2F0ZWQgYnkgY29yZS4KKyAqIFZlcnNpb24gMi43MTogQWRkZWQgQ01EX0xFQVJOLCBCUkxfQ01EX05YUFJPTVBUL0NNRF9QUlBST01QVCBhbmQgQ01EX1NJWERPVFMuCisgKiBWZXJzaW9uIDIuNzA6IEFkZGVkIENSX0NVVEFQUEVORCwgQlJMX0JMS19DVVRMSU5FLCBCUkxfQkxLX1NFVE1BUkssIEJSTF9CTEtfR09UT01BUksKKyAqICAgYW5kIENSX1NFVExFRlQuIENoYW5nZWQgYmluZGluZyBmb3IgTlhTRUFSQ0guLiBBZGp1c3RlZCBQQjgwIGN1dCZwYXN0ZQorICogICBiaW5kaW5ncy4gUmVwbGFjZWQgQ01EX0NVVF9CRUcvQ01EX0NVVF9FTkQgYnkgQ1JfQ1VUQkVHSU4vQ1JfQ1VUUkVDVCwKKyAqICAgYW5kIENNRF9DU1JKTVAgYnkgQ1JfUk9VVEUrMC4gQWRqdXN0ZWQgY3V0X2N1cnNvciBmb3IgbmV3IGN1dCZwYXN0ZQorICogICBiaW5kaW5ncyAodW50ZXN0ZWQpLgorICogVmVyc2lvbiAyLjYxOiBBZGp1c3RlZCBrZXkgYmluZGluZ3MgZm9yIHByZWZlcmVuY2VzIG1lbnUuCisgKiBWZXJzaW9uIDIuNjA6IFVzZSBUQ1NBRFJBSU4gd2hlbiBjbG9zaW5nIHNlcmlhbCBwb3J0LiBTbGlnaHQgQVBJIGFuZAorICogICBuYW1lIGNoYW5nZXMgZm9yIEJSTFRUWSAzLjAuIEFyZ3VtZW50IHRvIHJlYWRicmwgbm93IGlnbm9yZSwgaW5zdGVhZAorICogICBvZiBiZWluZyB2YWxpZGF0ZWQuIAorICogVmVyc2lvbiAyLjU5OiBBZGRlZCBiaW5kaW5ncyBmb3IgQ01EX0xOQkVHL0xORU5ELgorICogVmVyc2lvbiAyLjU4OiBBZGRlZCBiaW5kaW5ncyBmb3IgQ01EX0JBQ0sgYW5kIENSX01TR0FUVFJJQi4KKyAqIFZlcnNpb24gMi41NzogRml4ZWQgaGVscCBzY3JlZW4vZmlsZSBmb3IgTmF2ODAuIFdlIGZpbmFsbHkgaGF2ZSBhCisgKiAgIHVzZXIgd2hvIGNvbmZpcm1zIGl0IHdvcmtzIQorICogVmVyc2lvbiAyLjU2OiBBZGRlZCBrZXkgYmluZGluZyBmb3IgTlhTRUFSQ0guCisgKiBWZXJzaW9uIDIuNTU6IEFkZGVkIGtleSBiaW5kaW5nIGZvciBOWElOREVOVCBhbmQgTlhCTE5LTE5TLgorICogVmVyc2lvbiAyLjU0OiBBZGRlZCBrZXkgYmluZGluZyBmb3Igc3dpdGNodnQuCisgKiBWZXJzaW9uIDIuNTM6IFRoZSBJWE9GRiBiaXQgaW4gdGhlIHRlcm1pb3Mgc2V0dGluZyB3YXMgaW52ZXJ0ZWQ/CisgKiBWZXJzaW9uIDIuNTI6IENoYW5nZWQgTE9HX05PVElDRSB0byBMT0dfSU5GTy4gV2FzIHRvbyBub2lzeS4KKyAqIFZlcnNpb24gMi41MTogQWRkZWQgQ01EX1JFU1RBUlRTUEVFQ0guCisgKiBWZXJzaW9uIDIuNTogQWRkZWQgQ01EX1NQS0hPTUUsIHNhY3JpZmljZWQgTE5CRUcgYW5kIExORU5ELgorICogVmVyc2lvbiAyLjQ6IFJlZnJlc2ggZGlzcGxheSBldmVuIGlmIHVuY2hhbmdlZCBhZnRlciBldmVyeSBub3cgYW5kIHRoZW4gc28KKyAqICAgdGhhdCBpdCB3aWxsIGNsZWFyIHVwIGlmIGl0IHdhcyBnYXJibGVkLiBBZGRlZCBzcGVlY2gga2V5IGJpbmRpbmdzIChoYWQKKyAqICAgdG8gY2hhbmdlIGEgZmV3IGJpbmRpbmdzIHRvIG1ha2Ugcm9vbSkuIEFkZGVkIFNLUEVPTEJMTksga2V5IGJpbmRpbmcuCisgKiBWZXJzaW9uIDIuMzogUmVzZXQgc2VyaWFsIHBvcnQgYXR0cmlidXRlcyBhdCBlYWNoIGRldGVjdGlvbiBhdHRlbXB0IGluCisgKiAgIGluaXRicmwuIFRoaXMgc2hvdWxkIGhlbHAgQlJMVFRZIHJlY292ZXIgaWYgYW5vdGhlciBhcHBsaWNhdGlvbiAoc3VjaAorICogICBhcyBrdWR6dSkgc2NyYW1ibGVzIHRoZSBzZXJpYWwgcG9ydCB3aGlsZSBCUkxUVFkgaXMgcnVubmluZy4KKyAqIFVubnVtYmVyZWQgdmVyc2lvbjogRml4ZXMgZm9yIGR5bm1pY2FsbHkgbG9hZGluZyBkcml2ZXJzIChkZWNsYXJlIGFsbAorICogICBub24tZXhwb3J0ZWQgZnVuY3Rpb25zIGFuZCB2YXJpYWJsZXMgc3RhdGljKS4KKyAqIFZlcnNpb24gMi4yYmV0YTM6IE9wdGlvbiB0byBkaXNhYmxlIENUUyBjaGVja2luZy4gQXBwYXJlbnRseSwgVmFyaW8KKyAqICAgZG9lcyBub3QgcmFpc2UgQ1RTIHdoZW4gY29ubmVjdGVkLgorICogVmVyc2lvbiAyLjJiZXRhMTogRXhwbG9yaW5nIHByb2JsZW1zIHdpdGggZW11bGF0b3JzIG9mIFRTSSAoUEI0MCk6IEJBVU0KKyAqICAgYW5kIG1kdiBtYjQwOHMuIFNlZSBpZiB3ZSBjYW4gcHJvdmlkZSB0aW1pbmcgb3B0aW9ucyBmb3IgbW9yZSBmbGV4aWJpbGl0eS4KKyAqIFZlcnNpb24gMi4xOiBIZWxwIHNjcmVlbiBmaXggZm9yIG5ldyBrZXlzIGluIHByZWZlcmVuY2VzIG1lbnUuCisgKiBWZXJzaW9uIDIuMWJldGExOiBMZXNzIGRlbGF5cyBpbiB3cml0aW5nIGJyYWlsbGUgdG8gZGlzcGxheSBmb3IKKyAqICAgbmF2MjAvNDAgYW5kIHBiNDAsIGRlbGF5cyBzdGlsbCBuZWNlc3NhcnkgZm9yIHBiODAgb24gcHJvYmFibHkgZm9yIG5hdjgwLgorICogICBBZGRpdGlvbmFsIHJvdXRpbmcga2V5cyBmb3IgbmF2aWdhdG9yLiBDdXQmcGFzdGUgYmluZGluZyB0aGF0IGNvbWJpbmVzCisgKiAgIHJvdXRpbmcga2V5IGFuZCBub3JtYWwga2V5LgorICogVmVyc2lvbiAyLjA6IFRlc3RlZCB3aXRoIE5hdjQwIFBCNDAgUEI4MC4gU3VwcG9ydCBmb3IgZnVuY3Rpb25zIGFkZGVkCisgKiAgIGluIEJSTFRUWSAyLjA6IGFkZGVkIGtleSBiaW5kaW5ncyBmb3IgbmV3IGZvbmN0aW9ucyAoYXR0cmlidXRlcyBhbmQKKyAqICAgcm91dGluZykuIFN1cHBvcnQgZm9yIFBCIGF0IDE5MjAwYmF1ZC4gTGl2ZSBkZXRlY3Rpb24gb2YgZGlzcGxheSwgY2hlY2tzCisgKiAgIGJvdGggYXQgOTYwMCBhbmQgMTkyMDBiYXVkLiBSUzIzMiB3aXJlIG1vbml0b3JpbmcuIFBpbmcgd2hlbiBpZGxlIHRvIAorICogICBkZXRlY3Qgd2hlbiBkaXNwbGF5IHR1cm5lZCBvZmYgYW5kIGlzc3VlIGEgQ01EX1JFU1RBUlRCUkwuCisgKiBWZXJzaW9uIDEuMiAobm90IHJlbGVhc2VkKSBpbnRyb2R1Y2VzIHN1cHBvcnQgZm9yIFBCNjUvODAuIFJld29yayBvZiBrZXkKKyAqICAgYmluZGluZyBtZWNoYW5pc20gYW5kIHJlYWRicmwoKS4gU2xpZ2h0IG1vZGlmaWNhdGlvbnMgdG8gcm91dGluZyBrZXlzCisgKiAgIHN1cHBvcnQsICsgY29ycmVjdGlvbnMuIE1heSBoYXZlIGJyb2tlbiByb3V0aW5nIGtleSBzdXBwb3J0IGZvciBQQjQwLgorICogVmVyc2lvbiAxLjEgd29ya2VkIG9uIG5hdjQwIGFuZCB3YXMgcmVwb3J0ZWQgdG8gd29yayBvbiBwYjQwLgorICovCisKKyNpbmNsdWRlICJwcm9sb2d1ZS5oIgorCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorCisjaW5jbHVkZSAibG9nLmgiCisjaW5jbHVkZSAicGFyc2UuaCIKKyNpbmNsdWRlICJpb19nZW5lcmljLmgiCisjaW5jbHVkZSAibWVzc2FnZS5oIgorCit0eXBlZGVmIGVudW0geworICBQQVJNX0hJR0hfQkFVRCwKKyAgUEFSTV9TRVRfQkFVRAorfSBEcml2ZXJQYXJhbWV0ZXI7CisjZGVmaW5lIEJSTFBBUk1TICJoaWdoYmF1ZCIsICJzZXRiYXVkIgorCisjaW5jbHVkZSAiYnJsX2RyaXZlci5oIgorI2luY2x1ZGUgImJyYWlsbGUuaCIKKyNpbmNsdWRlICJicmxkZWZzLXRzLmgiCisKK0JFR0lOX0tFWV9OQU1FX1RBQkxFKHJvdXRpbmcpCisgIEtFWV9HUk9VUF9FTlRSWShUU19HUlBfUm91dGluZ0tleXMsICJSb3V0aW5nS2V5IiksCitFTkRfS0VZX05BTUVfVEFCTEUKKworQkVHSU5fS0VZX05BTUVfVEFCTEUobmF2X3NtYWxsKQorICBLRVlfTkFNRV9FTlRSWShUU19LRVlfQ3Vyc29yTGVmdCwgIkN1cnNvckxlZnQiKSwKKyAgS0VZX05BTUVfRU5UUlkoVFNfS0VZX0N1cnNvclJpZ2h0LCAiQ3Vyc29yUmlnaHQiKSwKKyAgS0VZX05BTUVfRU5UUlkoVFNfS0VZX0N1cnNvclVwLCAiQ3Vyc29yVXAiKSwKKyAgS0VZX05BTUVfRU5UUlkoVFNfS0VZX0N1cnNvckRvd24sICJDdXJzb3JEb3duIiksCisKKyAgS0VZX05BTUVfRU5UUlkoVFNfS0VZX05hdkxlZnQsICJOYXZMZWZ0IiksCisgIEtFWV9OQU1FX0VOVFJZKFRTX0tFWV9OYXZSaWdodCwgIk5hdlJpZ2h0IiksCisgIEtFWV9OQU1FX0VOVFJZKFRTX0tFWV9OYXZVcCwgIk5hdlVwIiksCisgIEtFWV9OQU1FX0VOVFJZKFRTX0tFWV9OYXZEb3duLCAiTmF2RG93biIpLAorCisgIEtFWV9OQU1FX0VOVFJZKFRTX0tFWV9UaHVtYkxlZnQsICJUaHVtYkxlZnQiKSwKKyAgS0VZX05BTUVfRU5UUlkoVFNfS0VZX1RodW1iUmlnaHQsICJUaHVtYlJpZ2h0IiksCitFTkRfS0VZX05BTUVfVEFCTEUKKworQkVHSU5fS0VZX05BTUVfVEFCTEUobmF2X2xhcmdlKQorICBLRVlfTkFNRV9FTlRSWShUU19LRVlfQ3Vyc29yTGVmdCwgIkN1cnNvckxlZnQiKSwKKyAgS0VZX05BTUVfRU5UUlkoVFNfS0VZX0N1cnNvclJpZ2h0LCAiQ3Vyc29yUmlnaHQiKSwKKyAgS0VZX05BTUVfRU5UUlkoVFNfS0VZX0N1cnNvclVwLCAiQ3Vyc29yVXAiKSwKKyAgS0VZX05BTUVfRU5UUlkoVFNfS0VZX0N1cnNvckRvd24sICJDdXJzb3JEb3duIiksCisKKyAgS0VZX05BTUVfRU5UUlkoVFNfS0VZX05hdkxlZnQsICJMZWZ0T3V0ZXIiKSwKKyAgS0VZX05BTUVfRU5UUlkoVFNfS0VZX05hdlJpZ2h0LCAiUmlnaHRPdXRlciIpLAorICBLRVlfTkFNRV9FTlRSWShUU19LRVlfTmF2VXAsICJMZWZ0SW5uZXIiKSwKKyAgS0VZX05BTUVfRU5UUlkoVFNfS0VZX05hdkRvd24sICJSaWdodElubmVyIiksCisKKyAgS0VZX05BTUVfRU5UUlkoVFNfS0VZX1RodW1iTGVmdCwgIkxlZnRUaHVtYiIpLAorICBLRVlfTkFNRV9FTlRSWShUU19LRVlfVGh1bWJSaWdodCwgIlJpZ2h0VGh1bWIiKSwKK0VORF9LRVlfTkFNRV9UQUJMRQorCitCRUdJTl9LRVlfTkFNRV9UQUJMRShwYl9zbWFsbCkKKyAgS0VZX05BTUVfRU5UUlkoVFNfS0VZX0N1cnNvclVwLCAiTGVmdFJvY2tlclVwIiksCisgIEtFWV9OQU1FX0VOVFJZKFRTX0tFWV9DdXJzb3JEb3duLCAiTGVmdFJvY2tlckRvd24iKSwKKworICBLRVlfTkFNRV9FTlRSWShUU19LRVlfTmF2TGVmdCwgIkJhY2t3YXJkIiksCisgIEtFWV9OQU1FX0VOVFJZKFRTX0tFWV9OYXZSaWdodCwgIkZvcndhcmQiKSwKKyAgS0VZX05BTUVfRU5UUlkoVFNfS0VZX05hdlVwLCAiUmlnaHRSb2NrZXJVcCIpLAorICBLRVlfTkFNRV9FTlRSWShUU19LRVlfTmF2RG93biwgIlJpZ2h0Um9ja2VyRG93biIpLAorCisgIEtFWV9OQU1FX0VOVFJZKFRTX0tFWV9UaHVtYkxlZnQsICJDb252ZXgiKSwKKyAgS0VZX05BTUVfRU5UUlkoVFNfS0VZX1RodW1iUmlnaHQsICJDb25jYXZlIiksCitFTkRfS0VZX05BTUVfVEFCTEUKKworQkVHSU5fS0VZX05BTUVfVEFCTEUocGJfbGFyZ2UpCisgIEtFWV9OQU1FX0VOVFJZKFRTX0tFWV9CdXR0b24xLCAiQnV0dG9uMSIpLAorICBLRVlfTkFNRV9FTlRSWShUU19LRVlfQnV0dG9uMiwgIkJ1dHRvbjIiKSwKKyAgS0VZX05BTUVfRU5UUlkoVFNfS0VZX0J1dHRvbjMsICJCdXR0b24zIiksCisgIEtFWV9OQU1FX0VOVFJZKFRTX0tFWV9CdXR0b240LCAiQnV0dG9uNCIpLAorCisgIEtFWV9OQU1FX0VOVFJZKFRTX0tFWV9CYXIxLCAiQmFyMSIpLAorICBLRVlfTkFNRV9FTlRSWShUU19LRVlfQmFyMiwgIkJhcjIiKSwKKyAgS0VZX05BTUVfRU5UUlkoVFNfS0VZX0JhcjMsICJCYXIzIiksCisgIEtFWV9OQU1FX0VOVFJZKFRTX0tFWV9CYXI0LCAiQmFyNCIpLAorCisgIEtFWV9OQU1FX0VOVFJZKFRTX0tFWV9Td2l0Y2gxVXAsICJTd2l0Y2gxVXAiKSwKKyAgS0VZX05BTUVfRU5UUlkoVFNfS0VZX1N3aXRjaDFEb3duLCAiU3dpdGNoMURvd24iKSwKKyAgS0VZX05BTUVfRU5UUlkoVFNfS0VZX1N3aXRjaDJVcCwgIlN3aXRjaDJVcCIpLAorICBLRVlfTkFNRV9FTlRSWShUU19LRVlfU3dpdGNoMkRvd24sICJTd2l0Y2gyRG93biIpLAorICBLRVlfTkFNRV9FTlRSWShUU19LRVlfU3dpdGNoM1VwLCAiU3dpdGNoM1VwIiksCisgIEtFWV9OQU1FX0VOVFJZKFRTX0tFWV9Td2l0Y2gzRG93biwgIlN3aXRjaDNEb3duIiksCisgIEtFWV9OQU1FX0VOVFJZKFRTX0tFWV9Td2l0Y2g0VXAsICJTd2l0Y2g0VXAiKSwKKyAgS0VZX05BTUVfRU5UUlkoVFNfS0VZX1N3aXRjaDREb3duLCAiU3dpdGNoNERvd24iKSwKKworICBLRVlfTkFNRV9FTlRSWShUU19LRVlfTGVmdFJvY2tlclVwLCAiTGVmdFJvY2tlclVwIiksCisgIEtFWV9OQU1FX0VOVFJZKFRTX0tFWV9MZWZ0Um9ja2VyRG93biwgIkxlZnRSb2NrZXJEb3duIiksCisgIEtFWV9OQU1FX0VOVFJZKFRTX0tFWV9SaWdodFJvY2tlclVwLCAiUmlnaHRSb2NrZXJVcCIpLAorICBLRVlfTkFNRV9FTlRSWShUU19LRVlfUmlnaHRSb2NrZXJEb3duLCAiUmlnaHRSb2NrZXJEb3duIiksCisKKyAgS0VZX05BTUVfRU5UUlkoVFNfS0VZX0NvbnZleCwgIkNvbnZleCIpLAorICBLRVlfTkFNRV9FTlRSWShUU19LRVlfQ29uY2F2ZSwgIkNvbmNhdmUiKSwKK0VORF9LRVlfTkFNRV9UQUJMRQorCitCRUdJTl9LRVlfTkFNRV9UQUJMRVMobmF2MjApCisgIEtFWV9OQU1FX1RBQkxFKG5hdl9zbWFsbCksCitFTkRfS0VZX05BTUVfVEFCTEVTCisKK0JFR0lOX0tFWV9OQU1FX1RBQkxFUyhuYXY0MCkKKyAgS0VZX05BTUVfVEFCTEUobmF2X3NtYWxsKSwKK0VORF9LRVlfTkFNRV9UQUJMRVMKKworQkVHSU5fS0VZX05BTUVfVEFCTEVTKG5hdjgwKQorICBLRVlfTkFNRV9UQUJMRShuYXZfbGFyZ2UpLAorICBLRVlfTkFNRV9UQUJMRShyb3V0aW5nKSwKK0VORF9LRVlfTkFNRV9UQUJMRVMKKworQkVHSU5fS0VZX05BTUVfVEFCTEVTKHBiNDApCisgIEtFWV9OQU1FX1RBQkxFKHBiX3NtYWxsKSwKKyAgS0VZX05BTUVfVEFCTEUocm91dGluZyksCitFTkRfS0VZX05BTUVfVEFCTEVTCisKK0JFR0lOX0tFWV9OQU1FX1RBQkxFUyhwYjY1KQorICBLRVlfTkFNRV9UQUJMRShwYl9sYXJnZSksCisgIEtFWV9OQU1FX1RBQkxFKHJvdXRpbmcpLAorRU5EX0tFWV9OQU1FX1RBQkxFUworCitCRUdJTl9LRVlfTkFNRV9UQUJMRVMocGI4MCkKKyAgS0VZX05BTUVfVEFCTEUocGJfbGFyZ2UpLAorICBLRVlfTkFNRV9UQUJMRShyb3V0aW5nKSwKK0VORF9LRVlfTkFNRV9UQUJMRVMKKworREVGSU5FX0tFWV9UQUJMRShuYXYyMCkKK0RFRklORV9LRVlfVEFCTEUobmF2NDApCitERUZJTkVfS0VZX1RBQkxFKG5hdjgwKQorREVGSU5FX0tFWV9UQUJMRShwYjQwKQorREVGSU5FX0tFWV9UQUJMRShwYjY1KQorREVGSU5FX0tFWV9UQUJMRShwYjgwKQorCitCRUdJTl9LRVlfVEFCTEVfTElTVAorICAmS0VZX1RBQkxFX0RFRklOSVRJT04obmF2MjApLAorICAmS0VZX1RBQkxFX0RFRklOSVRJT04obmF2NDApLAorICAmS0VZX1RBQkxFX0RFRklOSVRJT04obmF2ODApLAorICAmS0VZX1RBQkxFX0RFRklOSVRJT04ocGI0MCksCisgICZLRVlfVEFCTEVfREVGSU5JVElPTihwYjY1KSwKKyAgJktFWV9UQUJMRV9ERUZJTklUSU9OKHBiODApLAorRU5EX0tFWV9UQUJMRV9MSVNUCisKKy8qIFN0YWJpbGl6YXRpb24gZGVsYXkgYWZ0ZXIgY2hhbmdpbmcgYmF1ZCByYXRlICovCisjZGVmaW5lIEJBVURfREVMQVkgMTAwCisKKy8qIGZvciByb3V0aW5nIGtleXMgKi8KKyNkZWZpbmUgUk9VVElOR19CWVRFU19WRVJUSUNBTCA0CisjZGVmaW5lIFJPVVRJTkdfQllURVNfTUFYSU1VTSAxMQorI2RlZmluZSBST1VUSU5HX0JZVEVTXzQwIDkKKyNkZWZpbmUgUk9VVElOR19CWVRFU184MCAxNAorI2RlZmluZSBST1VUSU5HX0JZVEVTXzgxIDE1CisKKy8qIERlc2NyaXB0aW9uIG9mIHJlcGx5IHRvIHF1ZXJ5ICovCisjZGVmaW5lIElERU5USVRZX0gxIDBYMDAKKyNkZWZpbmUgSURFTlRJVFlfSDIgMFgwNQorCisvKiBSb3V0aW5nIGtleXMgaW5mb3JtYXRpb24gKDIgYnl0ZXMgaGVhZGVyKSAqLworI2RlZmluZSBST1VUSU5HX0gxIDB4MDAKKyNkZWZpbmUgUk9VVElOR19IMiAweDA4CisKKy8qIGlucHV0IGNvZGVzIHNpZ25hbGluZyBsb3cgYmF0dGVyeSBwb3dlciAoMmJ5dGVzKSAqLworI2RlZmluZSBCQVRURVJZX0gxIDB4MDAKKyNkZWZpbmUgQkFUVEVSWV9IMiAweDAxCisKKy8qIEJpdCBkZWZpbml0aW9uIG9mIGtleSBjb2RlcyByZXR1cm5lZCBieSB0aGUgZGlzcGxheS4KKyAqIE5hdmlnYXRvciBhbmQgcGI0MCByZXR1cm4gMiBieXRlcywgcGI2NS84MCByZXR1cm5zIDYuIEVhY2ggYnl0ZSBoYXMgYQorICogZGlmZmVyZW50IHNwZWNpZmljIG1hc2svc2lnbmF0dXJlIGluIHRoZSAzIG1vc3Qgc2lnbmlmaWNhbnQgYml0cy4KKyAqIE90aGVyIGJpdHMgaW5kaWNhdGUgd2hldGhlciBhIHNwZWNpZmljIGtleSBpcyBwcmVzc2VkLgorICogU2VlIHJlYWRicmwoKS4KKyAqLworCisvKiBXZSBjb21iaW5lIGFsbCBrZXkgYml0cyBpbnRvIG9uZSBLZXlOdW1iZXJTZXQuIEVhY2ggYnl0ZSBpcyBtYXNrZWQgYnkgdGhlCisgKiBjb3JyZXNwb25kaW5nICJtYXNrIiB0byBleHRyYWN0IHZhbGlkIGJpdHMgdGhlbiB0aG9zZSBhcmUgc2hpZnRlZCBieQorICogInNoaWZ0IiBhbmQgb3InZWQgaW50byB0aGUgMzJiaXRzICJjb2RlIi4KKyAqLworCisvKiBiaXRzIHRvIHRha2UgaW50byBhY2NvdW50IHdoZW4gY2hlY2tpbmcgZWFjaCBieXRlJ3Mgc2lnbmF0dXJlICovCisjZGVmaW5lIEtFWVNfQllURV9TSUdOQVRVUkVfTUFTSyAwWEUwCisKKy8qIGhvdyB3ZSBkZXNjcmliZSBlYWNoIGJ5dGUgKi8KK3R5cGVkZWYgc3RydWN0IHsKKyAgdW5zaWduZWQgY2hhciBzaWduYXR1cmU7IC8qIGl0J3Mgc2lnbmF0dXJlICovCisgIHVuc2lnbmVkIGNoYXIgbWFzazsgLyogYml0cyB0aGF0IGRvIHJlcHJlc2VudCBrZXlzICovCisgIHVuc2lnbmVkIGNoYXIgc2hpZnQ7IC8qIHdoZXJlIHRvIHNoaWZ0IHRoZW0gaW50byAiY29kZSIgKi8KK30gS2V5c0J5dGVEZXNjcmlwdG9yOworCisvKiBEZXNjcmlwdGlvbiBvZiBieXRlcyBmb3IgbmF2aWdhdG9yIGFuZCBwYjQwLiAqLworc3RhdGljIGNvbnN0IEtleXNCeXRlRGVzY3JpcHRvciBrZXlzRGVzY3JpcHRvcl9OYXZpZ2F0b3JbXSA9IHsKKyAgey5zaWduYXR1cmU9MFg2MCwgLm1hc2s9MFgxRiwgLnNoaWZ0PTB9LAorICB7LnNpZ25hdHVyZT0wWEUwLCAubWFzaz0wWDFGLCAuc2hpZnQ9NX0KK307CisKKy8qIERlc2NyaXB0aW9uIG9mIGJ5dGVzIGZvciBwYjY1LzgwICovCitzdGF0aWMgY29uc3QgS2V5c0J5dGVEZXNjcmlwdG9yIGtleXNEZXNjcmlwdG9yX1Bvd2VyQnJhaWxsZVtdID0geworICB7LnNpZ25hdHVyZT0wWDQwLCAubWFzaz0wWDBGLCAuc2hpZnQ9MTB9LAorICB7LnNpZ25hdHVyZT0wWEMwLCAubWFzaz0wWDBGLCAuc2hpZnQ9MTR9LAorICB7LnNpZ25hdHVyZT0wWDIwLCAubWFzaz0wWDA1LCAuc2hpZnQ9MTh9LAorICB7LnNpZ25hdHVyZT0wWEEwLCAubWFzaz0wWDA1LCAuc2hpZnQ9MjF9LAorICB7LnNpZ25hdHVyZT0wWDYwLCAubWFzaz0wWDFGLCAuc2hpZnQ9MjR9LAorICB7LnNpZ25hdHVyZT0wWEUwLCAubWFzaz0wWDFGLCAuc2hpZnQ9NX0KK307CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgY29uc3QgY2hhciAqbW9kZWxOYW1lOworICBjb25zdCBLZXlUYWJsZURlZmluaXRpb24gKmtleVRhYmxlRGVmaW5pdGlvbjsKKworICB1bnNpZ25lZCBjaGFyIHJvdXRpbmdCeXRlczsKKyAgc2lnbmVkIGNoYXIgcm91dGluZ0tleUNvdW50OworCisgIHVuc2lnbmVkIHNsb3dVcGRhdGU6MjsKKyAgdW5zaWduZWQgaGlnaEJhdWRTdXBwb3J0ZWQ6MTsKK30gTW9kZWxFbnRyeTsKKworc3RhdGljIGNvbnN0IE1vZGVsRW50cnkgbW9kZWxOYXZpZ2F0b3IyMCA9IHsKKyAgLm1vZGVsTmFtZSA9ICJOYXZpZ2F0b3IgMjAiLAorCisgIC5yb3V0aW5nQnl0ZXMgPSBST1VUSU5HX0JZVEVTXzQwLAorICAucm91dGluZ0tleUNvdW50ID0gMjAsCisKKyAgLmtleVRhYmxlRGVmaW5pdGlvbiA9ICZLRVlfVEFCTEVfREVGSU5JVElPTihuYXYyMCkKK307CisKK3N0YXRpYyBjb25zdCBNb2RlbEVudHJ5IG1vZGVsTmF2aWdhdG9yNDAgPSB7CisgIC5tb2RlbE5hbWUgPSAiTmF2aWdhdG9yIDQwIiwKKworICAucm91dGluZ0J5dGVzID0gUk9VVElOR19CWVRFU180MCwKKyAgLnJvdXRpbmdLZXlDb3VudCA9IDQwLAorCisgIC5zbG93VXBkYXRlID0gMSwKKworICAua2V5VGFibGVEZWZpbml0aW9uID0gJktFWV9UQUJMRV9ERUZJTklUSU9OKG5hdjQwKQorfTsKKworc3RhdGljIGNvbnN0IE1vZGVsRW50cnkgbW9kZWxOYXZpZ2F0b3I4MCA9IHsKKyAgLm1vZGVsTmFtZSA9ICJOYXZpZ2F0b3IgODAiLAorCisgIC5yb3V0aW5nQnl0ZXMgPSBST1VUSU5HX0JZVEVTXzgwLAorICAucm91dGluZ0tleUNvdW50ID0gODAsCisKKyAgLnNsb3dVcGRhdGUgPSAyLAorCisgIC5rZXlUYWJsZURlZmluaXRpb24gPSAmS0VZX1RBQkxFX0RFRklOSVRJT04obmF2ODApCit9OworCitzdGF0aWMgY29uc3QgTW9kZWxFbnRyeSBtb2RlbFBvd2VyQnJhaWxsZTQwID0geworICAubW9kZWxOYW1lID0gIlBvd2VyIEJyYWlsbGUgNDAiLAorCisgIC5yb3V0aW5nQnl0ZXMgPSBST1VUSU5HX0JZVEVTXzQwLAorICAucm91dGluZ0tleUNvdW50ID0gNDAsCisKKyAgLmhpZ2hCYXVkU3VwcG9ydGVkID0gMSwKKworICAua2V5VGFibGVEZWZpbml0aW9uID0gJktFWV9UQUJMRV9ERUZJTklUSU9OKHBiNDApCit9OworCitzdGF0aWMgY29uc3QgTW9kZWxFbnRyeSBtb2RlbFBvd2VyQnJhaWxsZTY1ID0geworICAubW9kZWxOYW1lID0gIlBvd2VyIEJyYWlsbGUgNjUiLAorCisgIC5yb3V0aW5nQnl0ZXMgPSBST1VUSU5HX0JZVEVTXzgxLAorICAucm91dGluZ0tleUNvdW50ID0gNjUsCisKKyAgLnNsb3dVcGRhdGUgPSAyLAorICAuaGlnaEJhdWRTdXBwb3J0ZWQgPSAxLAorCisgIC5rZXlUYWJsZURlZmluaXRpb24gPSAmS0VZX1RBQkxFX0RFRklOSVRJT04ocGI2NSkKK307CisKK3N0YXRpYyBjb25zdCBNb2RlbEVudHJ5IG1vZGVsUG93ZXJCcmFpbGxlODAgPSB7CisgIC5tb2RlbE5hbWUgPSAiUG93ZXIgQnJhaWxsZSA4MCIsCisKKyAgLnJvdXRpbmdCeXRlcyA9IFJPVVRJTkdfQllURVNfODEsCisgIC5yb3V0aW5nS2V5Q291bnQgPSA4MSwKKworICAuc2xvd1VwZGF0ZSA9IDIsCisgIC5oaWdoQmF1ZFN1cHBvcnRlZCA9IDEsCisKKyAgLmtleVRhYmxlRGVmaW5pdGlvbiA9ICZLRVlfVEFCTEVfREVGSU5JVElPTihwYjgwKQorfTsKKwordHlwZWRlZiBlbnVtIHsKKyAgSVBUX0lERU5USVRZLAorICBJUFRfUk9VVElORywKKyAgSVBUX0JBVFRFUlksCisgIElQVF9LRVlTCit9IElucHV0UGFja2V0VHlwZTsKKwordHlwZWRlZiBzdHJ1Y3QgeworICB1bmlvbiB7CisgICAgdW5zaWduZWQgY2hhciBieXRlc1sxXTsKKworICAgIHN0cnVjdCB7CisgICAgICB1bnNpZ25lZCBjaGFyIGhlYWRlclsyXTsKKyAgICAgIHVuc2lnbmVkIGNoYXIgY29sdW1uczsKKyAgICAgIHVuc2lnbmVkIGNoYXIgZG90czsKKyAgICAgIGNoYXIgdmVyc2lvbls0XTsKKyAgICAgIHVuc2lnbmVkIGNoYXIgY2hlY2tzdW1bNF07CisgICAgfSBpZGVudGl0eTsKKworICAgIHN0cnVjdCB7CisgICAgICB1bnNpZ25lZCBjaGFyIGhlYWRlclsyXTsKKyAgICAgIHVuc2lnbmVkIGNoYXIgY291bnQ7CisgICAgICB1bnNpZ25lZCBjaGFyIHZlcnRpY2FsW1JPVVRJTkdfQllURVNfVkVSVElDQUxdOworICAgICAgdW5zaWduZWQgY2hhciBob3Jpem9udGFsWzBYMTAwIC0gNF07CisgICAgfSByb3V0aW5nOworCisgICAgdW5zaWduZWQgY2hhciBrZXlzWzZdOworICB9IGZpZWxkczsKKworICBJbnB1dFBhY2tldFR5cGUgdHlwZTsKKworICB1bmlvbiB7CisgICAgc3RydWN0IHsKKyAgICAgIHVuc2lnbmVkIGNoYXIgY291bnQ7CisgICAgfSByb3V0aW5nOworCisgICAgc3RydWN0IHsKKyAgICAgIGNvbnN0IEtleXNCeXRlRGVzY3JpcHRvciAqZGVzY3JpcHRvcjsKKyAgICAgIHVuc2lnbmVkIGNoYXIgY291bnQ7CisgICAgfSBrZXlzOworICB9IGRhdGE7Cit9IElucHV0UGFja2V0OworCitzdHJ1Y3QgQnJhaWxsZURhdGFTdHJ1Y3QgeworICBjb25zdCBNb2RlbEVudHJ5ICptb2RlbDsKKyAgU2VyaWFsUGFyYW1ldGVycyBzZXJpYWxQYXJhbWV0ZXJzOworICB1bnNpZ25lZCBjaGFyIHJvdXRpbmdLZXlzW1JPVVRJTkdfQllURVNfTUFYSU1VTV07CisKKyAgdW5zaWduZWQgY2hhciBmb3JjZVdyaXRlOworICB1bnNpZ25lZCBjaGFyIGNlbGxDb3VudDsKKyAgdW5zaWduZWQgY2hhciBjZWxsc1swWEZGXTsKKworICBzdHJ1Y3QgeworICAgIHVuc2lnbmVkIGNoYXIgbWFqb3I7CisgICAgdW5zaWduZWQgY2hhciBtaW5vcjsKKyAgfSB2ZXJzaW9uOworCisgIC8qIFR5cGUgb2YgZGVsYXkgdGhlIGRpc3BsYXkgcmVxdWlyZXMgYWZ0ZXIgc2VuZGluZyBpdCBhIGNvbW1hbmQuCisgICAqIDAgLT4gbm8gZGVsYXksIDEgLT4gZHJhaW4gb25seSwgMiAtPiBkcmFpbiArIHdhaXQgZm9yIFNFTkRfREVMQVkuCisgICAqLworICB1bnNpZ25lZCBjaGFyIHNsb3dVcGRhdGU7Cit9OworCitzdGF0aWMgc3NpemVfdAord3JpdGVCeXRlcyAoQnJhaWxsZURpc3BsYXkgKmJybCwgY29uc3Qgdm9pZCAqZGF0YSwgc2l6ZV90IHNpemUpIHsKKyAgYnJsLT53cml0ZURlbGF5ICs9IGJybC0+ZGF0YS0+c2xvd1VwZGF0ZSAqIDI0OworICByZXR1cm4gd3JpdGVCcmFpbGxlUGFja2V0KGJybCwgTlVMTCwgZGF0YSwgc2l6ZSk7Cit9CisKK3N0YXRpYyBCcmFpbGxlUGFja2V0VmVyaWZpZXJSZXN1bHQKK3ZlcmlmeVBhY2tldCAoCisgIEJyYWlsbGVEaXNwbGF5ICpicmwsCisgIHVuc2lnbmVkIGNoYXIgKmJ5dGVzLCBzaXplX3Qgc2l6ZSwKKyAgc2l6ZV90ICpsZW5ndGgsIHZvaWQgKmRhdGEKKykgeworICBJbnB1dFBhY2tldCAqcGFja2V0ID0gZGF0YTsKKyAgY29uc3Qgb2ZmX3QgaW5kZXggPSBzaXplIC0gMTsKKyAgY29uc3QgdW5zaWduZWQgY2hhciBieXRlID0gYnl0ZXNbaW5kZXhdOworCisgIGlmIChzaXplID09IDEpIHsKKyAgICBzd2l0Y2ggKGJ5dGUpIHsKKyAgICAgIGNhc2UgSURFTlRJVFlfSDE6CisgICAgICAgIHBhY2tldC0+dHlwZSA9IElQVF9JREVOVElUWTsKKyAgICAgICAgKmxlbmd0aCA9IDI7CisgICAgICAgIGJyZWFrOworCisgICAgICBkZWZhdWx0OgorICAgICAgICBpZiAoKGJ5dGUgJiBLRVlTX0JZVEVfU0lHTkFUVVJFX01BU0spID09IGtleXNEZXNjcmlwdG9yX05hdmlnYXRvclswXS5zaWduYXR1cmUpIHsKKyAgICAgICAgICBwYWNrZXQtPmRhdGEua2V5cy5kZXNjcmlwdG9yID0ga2V5c0Rlc2NyaXB0b3JfTmF2aWdhdG9yOworICAgICAgICAgIHBhY2tldC0+ZGF0YS5rZXlzLmNvdW50ID0gQVJSQVlfQ09VTlQoa2V5c0Rlc2NyaXB0b3JfTmF2aWdhdG9yKTsKKyAgICAgICAgICBnb3RvIGlzS2V5czsKKyAgICAgICAgfQorCisgICAgICAgIGlmICgoYnl0ZSAmIEtFWVNfQllURV9TSUdOQVRVUkVfTUFTSykgPT0ga2V5c0Rlc2NyaXB0b3JfUG93ZXJCcmFpbGxlWzBdLnNpZ25hdHVyZSkgeworICAgICAgICAgIHBhY2tldC0+ZGF0YS5rZXlzLmRlc2NyaXB0b3IgPSBrZXlzRGVzY3JpcHRvcl9Qb3dlckJyYWlsbGU7CisgICAgICAgICAgcGFja2V0LT5kYXRhLmtleXMuY291bnQgPSBBUlJBWV9DT1VOVChrZXlzRGVzY3JpcHRvcl9Qb3dlckJyYWlsbGUpOworICAgICAgICAgIGdvdG8gaXNLZXlzOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIEJSTF9QVlJfSU5WQUxJRDsKKworICAgICAgaXNLZXlzOgorICAgICAgICBwYWNrZXQtPnR5cGUgPSBJUFRfS0VZUzsKKyAgICAgICAgKmxlbmd0aCA9IHBhY2tldC0+ZGF0YS5rZXlzLmNvdW50OworICAgICAgICBicmVhazsKKyAgICB9CisgIH0gZWxzZSB7CisgICAgc3dpdGNoIChwYWNrZXQtPnR5cGUpIHsKKyAgICAgIGNhc2UgSVBUX0lERU5USVRZOgorICAgICAgICBpZiAoc2l6ZSA9PSAyKSB7CisgICAgICAgICAgc3dpdGNoIChieXRlKSB7CisgICAgICAgICAgICBjYXNlIElERU5USVRZX0gyOgorICAgICAgICAgICAgICAqbGVuZ3RoID0gc2l6ZW9mKHBhY2tldC0+ZmllbGRzLmlkZW50aXR5KTsKKyAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGNhc2UgUk9VVElOR19IMjoKKyAgICAgICAgICAgICAgcGFja2V0LT50eXBlID0gSVBUX1JPVVRJTkc7CisgICAgICAgICAgICAgICpsZW5ndGggPSAzOworICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgY2FzZSBCQVRURVJZX0gyOgorICAgICAgICAgICAgICBwYWNrZXQtPnR5cGUgPSBJUFRfQkFUVEVSWTsKKyAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgIHJldHVybiBCUkxfUFZSX0lOVkFMSUQ7CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGJyZWFrOworCisgICAgICBjYXNlIElQVF9ST1VUSU5HOgorICAgICAgICBpZiAoc2l6ZSA9PSAzKSB7CisgICAgICAgICAgcGFja2V0LT5kYXRhLnJvdXRpbmcuY291bnQgPSBieXRlOworICAgICAgICAgICpsZW5ndGggKz0gcGFja2V0LT5kYXRhLnJvdXRpbmcuY291bnQ7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGNhc2UgSVBUX0tFWVM6CisgICAgICAgIGlmICgoYnl0ZSAmIEtFWVNfQllURV9TSUdOQVRVUkVfTUFTSykgIT0gcGFja2V0LT5kYXRhLmtleXMuZGVzY3JpcHRvcltpbmRleF0uc2lnbmF0dXJlKSByZXR1cm4gQlJMX1BWUl9JTlZBTElEOworICAgICAgICBicmVhazsKKworICAgICAgZGVmYXVsdDoKKyAgICAgICAgYnJlYWs7CisgICAgfQorICB9CisKKyAgcmV0dXJuIEJSTF9QVlJfSU5DTFVERTsKK30KKworc3RhdGljIHNpemVfdAorcmVhZFBhY2tldCAoQnJhaWxsZURpc3BsYXkgKmJybCwgSW5wdXRQYWNrZXQgKnBhY2tldCkgeworICByZXR1cm4gcmVhZEJyYWlsbGVQYWNrZXQoYnJsLCBOVUxMLCAmcGFja2V0LT5maWVsZHMsIHNpemVvZihwYWNrZXQtPmZpZWxkcyksIHZlcmlmeVBhY2tldCwgcGFja2V0KTsKK30KKworc3RhdGljIGludAorZ2V0SWRlbnRpdHkgKEJyYWlsbGVEaXNwbGF5ICpicmwsIElucHV0UGFja2V0ICpyZXBseSkgeworICBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciByZXF1ZXN0W10gPSB7MHhGRiwgMHhGRiwgMHgwQX07CisKKyAgaWYgKHdyaXRlQnl0ZXMoYnJsLCByZXF1ZXN0LCBzaXplb2YocmVxdWVzdCkpKSB7CisgICAgaWYgKGF3YWl0QnJhaWxsZUlucHV0KGJybCwgMTAwKSkgeworICAgICAgc2l6ZV90IGNvdW50ID0gcmVhZFBhY2tldChicmwsIHJlcGx5KTsKKworICAgICAgaWYgKGNvdW50ID4gMCkgeworICAgICAgICBpZiAocmVwbHktPnR5cGUgPT0gSVBUX0lERU5USVRZKSByZXR1cm4gMTsKKyAgICAgICAgbG9nVW5leHBlY3RlZFBhY2tldChyZXBseS0+ZmllbGRzLmJ5dGVzLCBjb3VudCk7CisgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgIGxvZ01lc3NhZ2UoTE9HX0RFQlVHLCAibm8gcmVzcG9uc2UiKTsKKyAgICB9CisgIH0KKworICByZXR1cm4gMDsKK30KKworc3RhdGljIGludAorc2V0QXV0b3JlcGVhdFByb3BlcnRpZXMgKEJyYWlsbGVEaXNwbGF5ICpicmwsIGludCBvbiwgaW50IGRlbGF5LCBpbnQgaW50ZXJ2YWwpIHsKKyAgY29uc3QgdW5zaWduZWQgY2hhciByZXF1ZXN0W10gPSB7CisgICAgMFhGRiwgMFhGRiwgMFgwRCwKKyAgICBvbj8gKChkZWxheSArIDkpIC8gMTApIC8qIDEwbXMgKi86IDBYRkYgLyogbG9uZyBkZWxheSAqLywKKyAgICBvbj8gKChpbnRlcnZhbCArIDkpIC8gMTApIC8qIDEwbXMgKi86IDBYRkYgLyogbG9uZyBpbnRlcnZhbCAqLworICB9OworCisgIHJldHVybiB3cml0ZUJ5dGVzKGJybCwgcmVxdWVzdCwgc2l6ZW9mKHJlcXVlc3QpKTsKK30KKworc3RhdGljIGludAorc2V0TG9jYWxCYXVkIChCcmFpbGxlRGlzcGxheSAqYnJsLCB1bnNpZ25lZCBpbnQgYmF1ZCkgeworICBTZXJpYWxQYXJhbWV0ZXJzICpwYXJhbWV0ZXJzID0gJmJybC0+ZGF0YS0+c2VyaWFsUGFyYW1ldGVyczsKKworICBsb2dNZXNzYWdlKExPR19ERUJVRywgInRyeWluZyBhdCAldSBiYXVkIiwgYmF1ZCk7CisgIGlmIChwYXJhbWV0ZXJzLT5iYXVkID09IGJhdWQpIHJldHVybiAxOworCisgIHBhcmFtZXRlcnMtPmJhdWQgPSBiYXVkOworICByZXR1cm4gZ2lvUmVjb25maWd1cmVSZXNvdXJjZShicmwtPmdpb0VuZHBvaW50LCBwYXJhbWV0ZXJzKTsKK30KKworc3RhdGljIGludAorc2V0UmVtb3RlQmF1ZCAoQnJhaWxsZURpc3BsYXkgKmJybCwgdW5zaWduZWQgaW50IGJhdWQpIHsKKyAgdW5zaWduZWQgY2hhciByZXF1ZXN0W10gPSB7MHhGRiwgMHhGRiwgMHgwNSwgMH07CisgIHVuc2lnbmVkIGNoYXIgKmJ5dGUgPSAmcmVxdWVzdFtzaXplb2YocmVxdWVzdCkgLSAxXTsKKworICBzd2l0Y2ggKGJhdWQpIHsKKyAgICBjYXNlIFRTX0JBVURfTE9XOgorICAgICAgKmJ5dGUgPSAyOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFRTX0JBVURfTk9STUFMOgorICAgICAgKmJ5dGUgPSAzOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFRTX0JBVURfSElHSDoKKyAgICAgICpieXRlID0gNDsKKyAgICAgIGJyZWFrOworCisgICAgZGVmYXVsdDoKKyAgICAgIGxvZ01lc3NhZ2UoTE9HX1dBUk5JTkcsICJkaXNwbGF5IGRvZXMgbm90IHN1cHBvcnQgJXUgYmF1ZCIsIGJhdWQpOworICAgICAgcmV0dXJuIDA7CisgIH0KKworICBsb2dNZXNzYWdlKExPR19XQVJOSU5HLCAic3dpdGNoaW5nIGRpc3BsYXkgdG8gJXUgYmF1ZCIsIGJhdWQpOworICByZXR1cm4gd3JpdGVCcmFpbGxlUGFja2V0KGJybCwgTlVMTCwgcmVxdWVzdCwgc2l6ZW9mKHJlcXVlc3QpKTsKK30KKworc3RhdGljIGludAorY29ubmVjdFJlc291cmNlIChCcmFpbGxlRGlzcGxheSAqYnJsLCBjb25zdCBjaGFyICppZGVudGlmaWVyKSB7CisgIHN0YXRpYyBjb25zdCBTZXJpYWxQYXJhbWV0ZXJzIHNlcmlhbFBhcmFtZXRlcnMgPSB7CisgICAgU0VSSUFMX0RFRkFVTFRfUEFSQU1FVEVSUworICB9OworCisgIEdpb0Rlc2NyaXB0b3IgZGVzY3JpcHRvcjsKKyAgZ2lvSW5pdGlhbGl6ZURlc2NyaXB0b3IoJmRlc2NyaXB0b3IpOworCisgIGRlc2NyaXB0b3Iuc2VyaWFsLnBhcmFtZXRlcnMgPSAmc2VyaWFsUGFyYW1ldGVyczsKKworICBpZiAoY29ubmVjdEJyYWlsbGVSZXNvdXJjZShicmwsIGlkZW50aWZpZXIsICZkZXNjcmlwdG9yLCBOVUxMKSkgeworICAgIGJybC0+ZGF0YS0+c2VyaWFsUGFyYW1ldGVycyA9IHNlcmlhbFBhcmFtZXRlcnM7CisgICAgcmV0dXJuIDE7CisgIH0KKworICByZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQKK2Rpc2Nvbm5lY3RSZXNvdXJjZSAoQnJhaWxsZURpc3BsYXkgKmJybCkgeworICBkaXNjb25uZWN0QnJhaWxsZVJlc291cmNlKGJybCwgTlVMTCk7Cit9CisKK3N0YXRpYyBpbnQKK2JybF9jb25zdHJ1Y3QgKEJyYWlsbGVEaXNwbGF5ICpicmwsIGNoYXIgKipwYXJhbWV0ZXJzLCBjb25zdCBjaGFyICpkZXZpY2UpIHsKKyAgaWYgKChicmwtPmRhdGEgPSBtYWxsb2Moc2l6ZW9mKCpicmwtPmRhdGEpKSkpIHsKKyAgICBtZW1zZXQoYnJsLT5kYXRhLCAwLCBzaXplb2YoKmJybC0+ZGF0YSkpOworCisgICAgaWYgKGNvbm5lY3RSZXNvdXJjZShicmwsIGRldmljZSkpIHsKKyAgICAgIElucHV0UGFja2V0IHJlcGx5OworCisgICAgICB1bnNpZ25lZCBpbnQgYWxsb3dIaWdoQmF1ZCA9IDE7CisgICAgICB1bnNpZ25lZCBpbnQgb2xkQmF1ZDsKKyAgICAgIHVuc2lnbmVkIGludCBuZXdCYXVkOworCisgICAgICB7CisgICAgICAgIGNvbnN0IGNoYXIgKnBhcmFtZXRlciA9IHBhcmFtZXRlcnNbUEFSTV9ISUdIX0JBVURdOworCisgICAgICAgIGlmIChwYXJhbWV0ZXIgJiYgKnBhcmFtZXRlcikgeworICAgICAgICAgIGlmICghdmFsaWRhdGVZZXNObygmYWxsb3dIaWdoQmF1ZCwgcGFyYW1ldGVyKSkgeworICAgICAgICAgICAgbG9nTWVzc2FnZShMT0dfV0FSTklORywgInVuc3VwcG9ydGVkIGhpZ2ggYmF1ZCBzZXR0aW5nOiAlcyIsIHBhcmFtZXRlcik7CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICB9CisKKyAgICAgIHsKKyAgICAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBiYXVkc1tdID0geworICAgICAgICAgIFRTX0JBVURfTk9STUFMLCBUU19CQVVEX0hJR0gsIDAKKyAgICAgICAgfTsKKworICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgKmJhdWQgPSBiYXVkczsKKworICAgICAgICB3aGlsZSAoMSkgeworICAgICAgICAgIGlmICghKmJhdWQpIGdvdG8gZmFpbHVyZTsKKyAgICAgICAgICBvbGRCYXVkID0gKmJhdWQrKzsKKworICAgICAgICAgIGlmIChhbGxvd0hpZ2hCYXVkIHx8IChvbGRCYXVkIDw9IFRTX0JBVURfTk9STUFMKSkgeworICAgICAgICAgICAgaWYgKHNldExvY2FsQmF1ZChicmwsIG9sZEJhdWQpKSB7CisgICAgICAgICAgICAgIGlmIChnZXRJZGVudGl0eShicmwsICZyZXBseSkpIHsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgfQorCisgICAgICBicmwtPmRhdGEtPmNlbGxDb3VudCA9IHJlcGx5LmZpZWxkcy5pZGVudGl0eS5jb2x1bW5zOworICAgICAgYnJsLT5kYXRhLT52ZXJzaW9uLm1ham9yID0gcmVwbHkuZmllbGRzLmlkZW50aXR5LnZlcnNpb25bMV0gLSAnMCc7CisgICAgICBicmwtPmRhdGEtPnZlcnNpb24ubWlub3IgPSByZXBseS5maWVsZHMuaWRlbnRpdHkudmVyc2lvblszXSAtICcwJzsKKworICAgICAgbG9nTWVzc2FnZShMT0dfSU5GTywgImRpc3BsYXkgcmVwbGllZDogJXUgY2VsbHMsIHZlcnNpb24gJXUuJXUiLAorICAgICAgICAgICAgICAgICBicmwtPmRhdGEtPmNlbGxDb3VudCwKKyAgICAgICAgICAgICAgICAgYnJsLT5kYXRhLT52ZXJzaW9uLm1ham9yLAorICAgICAgICAgICAgICAgICBicmwtPmRhdGEtPnZlcnNpb24ubWlub3IpOworCisgICAgICBzd2l0Y2ggKGJybC0+ZGF0YS0+Y2VsbENvdW50KSB7CisgICAgICAgIGNhc2UgMjA6CisgICAgICAgICAgYnJsLT5kYXRhLT5tb2RlbCA9ICZtb2RlbE5hdmlnYXRvcjIwOworICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgNDA6CisgICAgICAgICAgYnJsLT5kYXRhLT5tb2RlbCA9IChicmwtPmRhdGEtPnZlcnNpb24ubWFqb3IgPiAzKT8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbW9kZWxQb3dlckJyYWlsbGU0MDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbW9kZWxOYXZpZ2F0b3I0MDsKKyAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIDgwOgorICAgICAgICAgIGJybC0+ZGF0YS0+bW9kZWwgPSAmbW9kZWxOYXZpZ2F0b3I4MDsKKyAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIDY1OgorICAgICAgICAgIGJybC0+ZGF0YS0+bW9kZWwgPSAmbW9kZWxQb3dlckJyYWlsbGU2NTsKKyAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIDgxOgorICAgICAgICAgIGJybC0+ZGF0YS0+bW9kZWwgPSAmbW9kZWxQb3dlckJyYWlsbGU4MDsKKyAgICAgICAgICBicmVhazsKKworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgIGxvZ01lc3NhZ2UoTE9HX0VSUiwgInVucmVjb2duaXplZCBicmFpbGxlIGRpc3BsYXkgc2l6ZTogJXUiLCBicmwtPmRhdGEtPmNlbGxDb3VudCk7CisgICAgICAgICAgZ290byBmYWlsdXJlOworICAgICAgfQorCisgICAgICBsb2dNZXNzYWdlKExPR19JTkZPLCAiZGV0ZWN0ZWQgJXMiLCBicmwtPmRhdGEtPm1vZGVsLT5tb2RlbE5hbWUpOworCisgICAgICBicmwtPmRhdGEtPnNsb3dVcGRhdGUgPSBicmwtPmRhdGEtPm1vZGVsLT5zbG93VXBkYXRlOworCisjaWZkZWYgRk9SQ0VfRFJBSU5fQUZURVJfU0VORAorICAgICAgYnJsLT5kYXRhLT5zbG93VXBkYXRlID0gMTsKKyNlbmRpZiAvKiBGT1JDRV9EUkFJTl9BRlRFUl9TRU5EICovCisKKyNpZmRlZiBGT1JDRV9GVUxMX1NFTkRfREVMQVkKKyAgICAgIGJybC0+ZGF0YS0+c2xvd1VwZGF0ZSA9IDI7CisjZW5kaWYgLyogRk9SQ0VfRlVMTF9TRU5EX0RFTEFZICovCisKKyAgICAgIG5ld0JhdWQgPSBvbGRCYXVkOworICAgICAgaWYgKGFsbG93SGlnaEJhdWQgJiYgYnJsLT5kYXRhLT5tb2RlbC0+aGlnaEJhdWRTdXBwb3J0ZWQpIG5ld0JhdWQgPSBUU19CQVVEX0hJR0g7CisKKyAgICAgIHsKKyAgICAgICAgY29uc3QgY2hhciAqcGFyYW1ldGVyID0gcGFyYW1ldGVyc1tQQVJNX1NFVF9CQVVEXTsKKworICAgICAgICBpZiAocGFyYW1ldGVyICYmICpwYXJhbWV0ZXIpIHsKKyAgICAgICAgICBzdGF0aWMgY29uc3QgaW50IG1pbmltdW0gPSAxOworICAgICAgICAgIGludCB2YWx1ZTsKKworICAgICAgICAgIGlmICh2YWxpZGF0ZUludGVnZXIoJnZhbHVlLCBwYXJhbWV0ZXIsICZtaW5pbXVtLCBOVUxMKSkgeworICAgICAgICAgICAgbmV3QmF1ZCA9IHZhbHVlOworICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBsb2dNZXNzYWdlKExPR19XQVJOSU5HLCAidW5zdXBwb3J0ZWQgc2V0IGJhdWQgc2V0dGluZzogJXMiLCBwYXJhbWV0ZXIpOworICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgfQorCisgICAgICBpZiAobmV3QmF1ZCAhPSBvbGRCYXVkKSB7CisgICAgICAgIGlmICghc2V0UmVtb3RlQmF1ZChicmwsIG5ld0JhdWQpKSBnb3RvIGZhaWx1cmU7CisgICAgICAgIGRyYWluQnJhaWxsZU91dHB1dChicmwsIEJBVURfREVMQVkpOworICAgICAgICBpZiAoIXNldExvY2FsQmF1ZChicmwsIG5ld0JhdWQpKSBnb3RvIGZhaWx1cmU7CisgICAgICAgIGxvZ01lc3NhZ2UoTE9HX0RFQlVHLCAibm93IHVzaW5nICV1IGJhdWQgLSBjaGVja2luZyBpZiBkaXNwbGF5IGZvbGxvd2VkIiwgbmV3QmF1ZCk7CisKKyAgICAgICAgaWYgKGdldElkZW50aXR5KGJybCwgJnJlcGx5KSkgeworICAgICAgICAgIGxvZ01lc3NhZ2UoTE9HX0RFQlVHLCAiZGlzcGxheSByZXNwb25kZWQgYXQgJXUgYmF1ZCIsIG5ld0JhdWQpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgIGxvZ01lc3NhZ2UoTE9HX0lORk8sCisgICAgICAgICAgICAgICAgICAgICAiZGlzcGxheSBkaWQgbm90IHJlc3BvbmQgYXQgJXUgYmF1ZCIKKyAgICAgICAgICAgICAgICAgICAgICIgLSBnb2luZyBiYWNrIHRvICV1IGJhdWQiLAorICAgICAgICAgICAgICAgICAgICAgbmV3QmF1ZCwgb2xkQmF1ZCk7CisKKyAgICAgICAgICBpZiAoIXNldExvY2FsQmF1ZChicmwsIG9sZEJhdWQpKSBnb3RvIGZhaWx1cmU7CisgICAgICAgICAgZHJhaW5CcmFpbGxlT3V0cHV0KGJybCwgQkFVRF9ERUxBWSk7CisKKyAgICAgICAgICBpZiAoZ2V0SWRlbnRpdHkoYnJsLCAmcmVwbHkpKSB7CisgICAgICAgICAgICBsb2dNZXNzYWdlKExPR19JTkZPLCAiZm91bmQgZGlzcGxheSBhZ2FpbiBhdCAldSBiYXVkIiwgb2xkQmF1ZCk7CisgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGxvZ01lc3NhZ2UoTE9HX0VSUiwgImRpc3BsYXkgbG9zdCBhZnRlciBiYXVkIHN3aXRjaCIpOworICAgICAgICAgICAgZ290byBmYWlsdXJlOworICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgfQorCisgICAgICBzZXRCcmFpbGxlS2V5VGFibGUoYnJsLCBicmwtPmRhdGEtPm1vZGVsLT5rZXlUYWJsZURlZmluaXRpb24pOworICAgICAgbWFrZU91dHB1dFRhYmxlKGRvdHNUYWJsZV9JU08xMTU0OF8xKTsKKworICAgICAgYnJsLT50ZXh0Q29sdW1ucyA9IGJybC0+ZGF0YS0+Y2VsbENvdW50OwkJLyogaW5pdGlhbGlzZSBzaXplIG9mIGRpc3BsYXkgKi8KKyAgICAgIGJybC0+c2V0QXV0b3JlcGVhdFByb3BlcnRpZXMgPSBzZXRBdXRvcmVwZWF0UHJvcGVydGllczsKKworICAgICAgbWVtc2V0KGJybC0+ZGF0YS0+cm91dGluZ0tleXMsIDAsIHNpemVvZihicmwtPmRhdGEtPnJvdXRpbmdLZXlzKSk7CisgICAgICBicmwtPmRhdGEtPmZvcmNlV3JpdGUgPSAxOworCisgICAgICByZXR1cm4gMTsKKworICAgIGZhaWx1cmU6CisgICAgICBkaXNjb25uZWN0UmVzb3VyY2UoYnJsKTsKKyAgICB9CisKKyAgICBmcmVlKGJybC0+ZGF0YSk7CisgIH0gZWxzZSB7CisgICAgbG9nTWFsbG9jRXJyb3IoKTsKKyAgfQorCisgIHJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCAKK2JybF9kZXN0cnVjdCAoQnJhaWxsZURpc3BsYXkgKmJybCkgeworICBkaXNjb25uZWN0UmVzb3VyY2UoYnJsKTsKKworICBpZiAoYnJsLT5kYXRhKSB7CisgICAgZnJlZShicmwtPmRhdGEpOworICAgIGJybC0+ZGF0YSA9IE5VTEw7CisgIH0KK30KKworc3RhdGljIGludAord3JpdGVDZWxscyAoQnJhaWxsZURpc3BsYXkgKmJybCwgdW5zaWduZWQgaW50IGZyb20sIHVuc2lnbmVkIGludCB0bykgeworICBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBoZWFkZXJbXSA9IHsKKyAgICAwWEZGLCAwWEZGLCAwWDA0LCAwWDAwLCAwWDk5LCAwWDAwCisgIH07CisKKyAgdW5zaWduZWQgaW50IGxlbmd0aCA9IHRvIC0gZnJvbTsKKyAgdW5zaWduZWQgY2hhciBwYWNrZXRbc2l6ZW9mKGhlYWRlcikgKyAyICsgKGxlbmd0aCAqIDIpXTsKKyAgdW5zaWduZWQgY2hhciAqYnl0ZSA9IHBhY2tldDsKKyAgdW5zaWduZWQgaW50IGk7CisKKyAgYnl0ZSA9IG1lbXBjcHkoYnl0ZSwgaGVhZGVyLCBzaXplb2YoaGVhZGVyKSk7CisgICpieXRlKysgPSAyICogbGVuZ3RoOworICAqYnl0ZSsrID0gZnJvbTsKKworICBmb3IgKGk9MDsgaTxsZW5ndGg7IGkrPTEpIHsKKyAgICAqYnl0ZSsrID0gMDsKKyAgICAqYnl0ZSsrID0gdHJhbnNsYXRlT3V0cHV0Q2VsbChicmwtPmRhdGEtPmNlbGxzW2Zyb20gKyBpXSk7CisgIH0KKworICAvKiBTb21lIGRpc3BsYXlzIGFwcGFyZW50bHkgZG9uJ3QgbGlrZSByYXBpZCB1cGRhdGluZy4gTW9zdCBvciBhbGwgYXBwcmVudGx5CisgICAqIGRvbid0IGRvIGZsb3cgY29udHJvbC4gSWYgd2UgdXBkYXRlIHRoZSBkaXNwbGF5IHRvbyBvZnRlbiBhbmQgdG9vIGZhc3QsCisgICAqIHRoZW4gdGhlIHBhY2tldHMgcXVldWUgdXAgaW4gdGhlIHNlbmQgcXVldWUsIHRoZSBpbmZvIGRpc3BsYXllZCBpcyBub3QgdXAKKyAgICogdG8gZGF0ZSwgYW5kIHRoZSBpbmZvIGRpc3BsYXllZCBjb250aW51ZXMgdG8gY2hhbmdlIGFmdGVyIHdlIHN0b3AKKyAgICogdXBkYXRpbmcgd2hpbGUgdGhlIHF1ZXVlIGVtcHRpZXMgKGxpa2Ugd2hlbiB5b3UgcmVsZWFzZSB0aGUgYXJyb3cga2V5IGFuZAorICAgKiB0aGUgZGlzcGxheSBjb250aW51ZXMgY2hhbmdpbmcgZm9yIGEgc2Vjb25kIG9yIHR3bykuIFdlIGFsc28gcmlzaworICAgKiBvdmVyZmxvd3Mgd2hpY2ggcHV0IGdhcmJhZ2Ugb24gdGhlIGRpc3BsYXksIG9yIG9mdGVuIHdoYXQgaGFwcGVucyBpcyB0aGF0CisgICAqIHNvbWUgY2VsbHMgZnJvbSBwcmV2aW91c2x5IGRpc3BsYXllZCBsaW5lcyB3aWxsIHJlbWFpbiBhbmQgbm90IGJlIGNsZWFyZWQKKyAgICogb3IgcmVwbGFjZWQ7IGFsc28gdGhlIHBpbmdpbmcgZmFpbHMgYW5kIHRoZSBkaXNwbGF5IGdldHMKKyAgICogcmVpbml0aWFsaXplZC4uLiBUbyBleHBvc2UgdGhlIHByb2JsZW0gc2tpbS9zY3JvbGwgdGhyb3VnaCBhIGxvbmcgZmlsZQorICAgKiAod2l0aCBsb25nIGxpbmVzKSBob2xkaW5nIGRvd24gdGhlIHVwL2Rvd24gYXJyb3cga2V5IG9uIHRoZSBQQyBrZXlib2FyZC4KKyAgICoKKyAgICogcGI0MCBoYXMgbm8gcHJvYmxlbXM6IGl0IGFwcGFyZW50bHkgY2FuIHRha2Ugd2hhdGV2ZXIgd2UgdGhyb3cgYXQKKyAgICogaXQuIE5hdjQwIGlzIGdvb2QgYnV0IHdlIGRyYWluIGp1c3QgdG8gYmUgc2FmZS4KKyAgICoKKyAgICogcGI4MCAodHdpY2UgbGFyZ2VyIGJ1dCB0d2ljZSBhcyBmYXN0IGFzIG5hdjQwKSBjYW5ub3QgdGFrZSBhIGNvbnRpbnVvdXMKKyAgICogZnVsbCBzcGVlZCBmbG93LiBUaGVyZSBpcyBubyBmbG93IGNvbnRyb2w6IGFwcGFyZW50bHkgbm90IHN1cHBvcnRlZAorICAgKiBwcm9wZXJseSBvbiBhdCBsZWFzdCBwYjgwLiBNeSBwYjgwIGlzIHJlY2VudCB5ZXQgdGhlIGhhcmR3YXJlIHZlcnNpb24gaXMKKyAgICogdjEuMGEsIHNvIHRoaXMgbWF5IGJlIGEgaGFyZHdhcmUgcHJvYmxlbSB0aGF0IHdhcyBmaXhlZCBvbiBwYjQwLiAgVGhlcmUncworICAgKiBzb21lIFVBUlQgaGFuZHNoYWtlIG1vZGUgdGhhdCBtaWdodCBiZSByZWxldmFudCBidXQgb25seSBzZWVtcyB0byBicmVhaworICAgKiBldmVyeXRoaW5nIChvbiBib3RoIHBiNDAgYW5kIHBiODApLi4uCisgICAqCisgICAqIE5hdjgwIGlzIHVudGVzdGVkIGJ1dCBhcyBpdCByZWNlaXZlcyBhdCA5NjAwLCB3ZSBwcm9iYWJseSBuZWVkIHRvCisgICAqIGNvbXBlbnNhdGUgdGhlcmUgdG9vLgorICAgKgorICAgKiBGaW5hbGx5LCBzb21lIFRTSSBlbXVsYXRvcnMgKGF0IGxlYXN0IHRoZSBtZHYgbWI0MDhzKSBtYXkgaGF2ZSB0aW1pbmcKKyAgICogbGltaXRhdGlvbnMuCisgICAqCisgICAqIEkgbm8gbG9uZ2VyIGhhdmUgYWNjZXNzIHRvIGEgTmF2NDAgYW5kIFBCODAgZm9yIHRlc3Rpbmc6IEkgb25seSBoYXZlIGEKKyAgICogUEI0MC4KKyAgICovCisKKyAgcmV0dXJuIHdyaXRlQnl0ZXMoYnJsLCBwYWNrZXQsIChieXRlIC0gcGFja2V0KSk7Cit9CisKK3N0YXRpYyBpbnQgCiticmxfd3JpdGVXaW5kb3cgKEJyYWlsbGVEaXNwbGF5ICpicmwsIGNvbnN0IHdjaGFyX3QgKnRleHQpIHsKKyAgdW5zaWduZWQgaW50IGZyb20sIHRvOworICAgIAorICBpZiAoY2VsbHNIYXZlQ2hhbmdlZChicmwtPmRhdGEtPmNlbGxzLCBicmwtPmJ1ZmZlciwgYnJsLT5kYXRhLT5jZWxsQ291bnQsCisgICAgICAgICAgICAgICAgICAgICAgICZmcm9tLCAmdG8sICZicmwtPmRhdGEtPmZvcmNlV3JpdGUpKSB7CisgICAgaWYgKCF3cml0ZUNlbGxzKGJybCwgZnJvbSwgdG8pKSByZXR1cm4gMDsKKyAgfQorCisgIHJldHVybiAxOworfQorCitzdGF0aWMgaW50CitoYW5kbGVJbnB1dFBhY2tldCAoQnJhaWxsZURpc3BsYXkgKmJybCwgY29uc3QgSW5wdXRQYWNrZXQgKnBhY2tldCkgeworICBzd2l0Y2ggKHBhY2tldC0+dHlwZSkgeworICAgIGNhc2UgSVBUX0tFWVM6IHsKKyAgICAgIEtleU51bWJlclNldCBrZXlzID0gMDsKKyAgICAgIHVuc2lnbmVkIGludCBpOworCisgICAgICBmb3IgKGk9MDsgaTxwYWNrZXQtPmRhdGEua2V5cy5jb3VudDsgaSs9MSkgeworICAgICAgICBjb25zdCBLZXlzQnl0ZURlc2NyaXB0b3IgKmtiZCA9ICZwYWNrZXQtPmRhdGEua2V5cy5kZXNjcmlwdG9yW2ldOworCisgICAgICAgIGtleXMgfD0gKHBhY2tldC0+ZmllbGRzLmtleXNbaV0gJiBrYmQtPm1hc2spIDw8IGtiZC0+c2hpZnQ7CisgICAgICB9CisKKyAgICAgIGVucXVldWVLZXlzKGJybCwga2V5cywgVFNfR1JQX05hdmlnYXRpb25LZXlzLCAwKTsKKyAgICAgIHJldHVybiAxOworICAgIH0KKworICAgIGNhc2UgSVBUX1JPVVRJTkc6IHsKKyAgICAgIGlmIChwYWNrZXQtPmRhdGEucm91dGluZy5jb3VudCAhPSBicmwtPmRhdGEtPm1vZGVsLT5yb3V0aW5nQnl0ZXMpIHJldHVybiAwOworCisgICAgICBlbnF1ZXVlVXBkYXRlZEtleUdyb3VwKGJybCwgYnJsLT5kYXRhLT5tb2RlbC0+cm91dGluZ0tleUNvdW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWNrZXQtPmZpZWxkcy5yb3V0aW5nLmhvcml6b250YWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJybC0+ZGF0YS0+cm91dGluZ0tleXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRTX0dSUF9Sb3V0aW5nS2V5cyk7CisgICAgICByZXR1cm4gMTsKKyAgICB9CisKKyAgICBjYXNlIElQVF9CQVRURVJZOgorICAgICAgbWVzc2FnZShOVUxMLCBnZXR0ZXh0KCJiYXR0ZXJ5IGxvdyIpLCAwKTsKKyAgICAgIHJldHVybiAxOworCisgICAgZGVmYXVsdDoKKyAgICAgIHJldHVybiAwOworICB9Cit9CisKK3N0YXRpYyBpbnQgCiticmxfcmVhZENvbW1hbmQgKEJyYWlsbGVEaXNwbGF5ICpicmwsIEtleVRhYmxlQ29tbWFuZENvbnRleHQgY29udGV4dCkgeworICAvKiBLZXkgcHJlc3MgY29kZXMgY29tZSBpbiBwYWlycyBvZiBieXRlcyBmb3IgbmF2IGFuZCBwYjQwLCBpbiA2Ynl0ZXMKKyAgICogZm9yIHBiNjUvODAuIEVhY2ggYnl0ZSBoYXMgYml0cyByZXByZXNlbnRpbmcgaW5kaXZpZHVhbCBrZXlzICsgYSBzcGVjaWFsCisgICAqIG1hc2svc2lnbmF0dXJlIGluIHRoZSBtb3N0IHNpZ25pZmljYW50IDNiaXRzLgorICAgKgorICAgKiBUaGUgbG93IGJhdHRlcnkgd2FybmluZyBmcm9tIHRoZSBkaXNwbGF5IGlzIGEgc3BlY2lmaWMgMmJ5dGVzIGNvZGUuCisgICAqCisgICAqIEZpbmFsbHksIHRoZSByb3V0aW5nIGtleXMgaGF2ZSBhIHNwZWNpYWwgMmJ5dGVzIGhlYWRlciBmb2xsb3dlZCBieSA5LCAxNAorICAgKiBvciAxNSBieXRlcyBvZiBpbmZvICgxYml0IGZvciBlYWNoIHJvdXRpbmcga2V5KS4gVGhlIGZpcnN0IDRieXRlcyBkZXNjcmliZQorICAgKiB2ZXJ0aWNhbCByb3V0aW5nIGtleXMgYW5kIGFyZSBpZ25vcmVkIGluIHRoaXMgZHJpdmVyLgorICAgKgorICAgKiBXZSBtaWdodCBnZXQgYSBxdWVyeSByZXBseSwgc2luY2Ugd2Ugc2VuZCBxdWVyaWVzIHdoZW4gd2UgZG9uJ3QgZ2V0CisgICAqIGFueSBrZXlzIGluIGEgY2VydGFpbiB0aW1lLiBUaGF0IGEgMmJ5dGUgaGVhZGVyICsgMTAgbW9yZSBieXRlcyBpZ25vcmVkLgorICAgKi8KKworICBJbnB1dFBhY2tldCBwYWNrZXQ7CisgIHNpemVfdCBzaXplOworCisgIHdoaWxlICgoc2l6ZSA9IHJlYWRQYWNrZXQoYnJsLCAmcGFja2V0KSkpIHsKKyAgICBpZiAoIWhhbmRsZUlucHV0UGFja2V0KGJybCwgJnBhY2tldCkpIHsKKyAgICAgIGxvZ1VuZXhwZWN0ZWRQYWNrZXQocGFja2V0LmZpZWxkcy5ieXRlcywgc2l6ZSk7CisgICAgfQorICB9CisKKyAgcmV0dXJuIChlcnJubyA9PSBFQUdBSU4pPyBFT0Y6IEJSTF9DTURfUkVTVEFSVEJSTDsKK30KZGlmZiAtLWdpdCBhL0RyaXZlcnMvQnJhaWxsZS9UU0kvYnJhaWxsZS5oIGIvRHJpdmVycy9CcmFpbGxlL1RTSS9icmFpbGxlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjIwMDRiMQotLS0gL2Rldi9udWxsCisrKyBiL0RyaXZlcnMvQnJhaWxsZS9UU0kvYnJhaWxsZS5oCkBAIC0wLDAgKzEsNjUgQEAKKy8qCisgKiBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorICogICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorICoKKyAqIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorICoKKyAqIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyAqLworCisvKiBUU0kvYnJhaWxsZS5oIC0gQ29uZmlndXJhdGlvbiBmaWxlIGZvciB0aGUgVFNJIGJyYWlsbGUKKyAqICAgICAgICAgICAgICAgICBkaXNwbGF5IGRyaXZlciAoYnJsLmMpCisgKiBXcml0dGVuIGJ5IFN06XBoYW5lIERveW9uIChzLmRveW9uQHZpZGVvdHJvbi5jYSkKKyAqCisgKiBUaGlzIGZpbGUgaXMgaW50ZW5kZWQgZm9yIHZlcnNpb24gMi4yYmV0YTMgb2YgdGhlIGRyaXZlci4KKyAqLworCisvKiBDb25maWd1cmF0aW9uIGZpbGUgZm9yIHRoZSBUU0kgZHJpdmVyLgorICogRWRpdCBhcyBuZWVkZWQuLi4KKyAqLworCisvKiBUaW1pbmcgb3B0aW9uczogSWYgeW91IGdldCBhIGdhcmJsZWQgZGlzcGxheSwgeW91IG1pZ2h0IHRyeSB0byB1bmNvbW1lbnQKKyAgIG9uZSBvZiB0aGUgZm9sbG93aW5nIGRlZmluZXMuIFRoaXMgYXR0ZW1wdHMgdG8gYXZvaWQgZmxvdyBjb250cm9sIHByb2JsZW1zCisgICBieSBpbnNlcnRpbmcgdmFyaW91cyBzbWFsbCBkZWxheXMuIFRoaXMgaXMgbm9ybWFsbHkgbm90IG5lZWRlZCBhbmQgaXQgd2lsbAorICAgbWFrZSB0aGUgZGlzcGxheSBzbGlnaHRseSBzbHVnZ2lzaC4gSG93ZXZlciB0aGVzZSBvcHRpb25zIG1heSBiZSBoZWxwZnVsCisgICBpbiBnZXR0aW5nIHNvbWUgVFNJIGVtdWxhdG9ycyB0byB3b3JrIGNvcnJlY3RseS4KKworICAgRm9yIHRoZSBUU0kgZW11bGF0aW9uIG1vZGUgb2YgdGhlIG1kdiBtYjQwOHMgZGlzcGxheSwgdGhlIGZvbGxvd2luZworICAgb3B0aW9ucyBhcmUgcmVjb21tZW5kZWQ6CisgICAgIHVuY29tbWVudCBGT1JDRV9GVUxMX1NFTkRfREVMQVkKKyAgICAgbGVhdmUgRk9SQ0VfRFJBSU5fQUZURVJfU0VORCBjb21tZW50ZWQgb3V0CisgICAgIGxlYXZlIFNFTkRfREVMQVkgc2V0IHRvIDMwCisqLworCisvKiBUaGlzIG9wdGlvbiBmb3JjZXMgQlJMVFRZIHRvIHdhaXQgZm9yIHRoZSBPUydzIGJ1ZmZlciBmb3IgdGhlIHNlcmlhbCBwb3J0CisgICB0byBiZSBmbHVzaGVkIGFmdGVyIGVhY2ggdXBkYXRlIHRvIHRoZSBicmFpbGxlIGRpc3BsYXkuIChOb3RlIHRoYXQgd2UgZG8KKyAgIG5vdCB3YWl0IGZvciB0aGUgYnVmZmVyIG9uIHRoZSBVQVJUIGNoaXAgdG8gYmUgZmx1c2hlZCwgd2hpY2ggbWlnaHQgdGFrZQorICAgc29tZXRoaW5nIGxpa2UgMzAtNjBtcy4pICovCisvKiNkZWZpbmUgRk9SQ0VfRFJBSU5fQUZURVJfU0VORCAxKi8KKworLyogVGhpcyBvcHRpb24sIGluIGFkZGl0aW9uIHRvIHdhaXRpbmcgbGlrZSB0aGUgcHJldmlvdXMgb3B0aW9uLCBhbHNvIGltcG9zZXMKKyAgIGEgd2FpdCBvZiBTRU5EX0RFTEFZIG1zIGFmdGVyIHNlbmRpbmcgYSBkaXNwbGF5IHVwZGF0ZS4gSXQgYWxzbyBpbXBvc2VzIGEKKyAgIHdhaXQgb2YgMipTRU5EX0RFTEFZIG1zIGJlZm9yZSBhbmQgU0VORF9ERUxBWSBhZnRlciBzZW5kaW5nIGEgcGluZy4gKi8KKy8qI2RlZmluZSBGT1JDRV9GVUxMX1NFTkRfREVMQVkgMSovCisKKy8qIE5vdGUgdGhhdCB0aGUgcHJldmlvdXMgb3B0aW9ucyBhcmUgYXV0b21hdGljYWxseSB0cmlnZ2VyZWQgd2hlbiBzb21lCisgICBkaXNwbGF5IG1vZGVscyBhcmUgcmVjb2duaXplZDogTmF2NDAgdHJpZ2dlcnMgRk9SQ0VfRFJBSU5fQUZURVJfU0VORCAoaXMgaXQKKyAgIG5lY2Vzc2FyeT8pLCBQQjY1LzgwIGFuZCBOYXY4MCB0cmlnZ2VyIEZPUkNFX0ZVTExfU0VORF9ERUxBWSAoYW5kIHNob3VsZCBiZQorICAgZmluZSB3aXRoIFNFTkRfREVMQVkgc2V0IHRvIDMwKS4gT25seSBQQjQwIChhbmQgcHJlc3VtYWJseSBOYXYyMD8pIGFyZSBmaW5lCisgICB3aXRob3V0IHRpbWluZyBhZGp1c3RtZW50LiBBbHNvIHJlbWVtYmVyIHRoYXQgdGhlcmUgaXMgYSA0MG1zIGRlbGF5IGZvcgorICAgZXZlcnkgY3ljbGUgb2YgdGhlIG1haW4gQlJMVFRZIGxvb3AuICovCisjZGVmaW5lIFNFTkRfREVMQVkgMzAKKworLyogVE9ETzogYW4gb3B0aW9uIHRoYXQgZGVhY3RpdmF0ZXMgcGFydGlhbCB1cGRhdGVzLCBzbyB0aGF0IHRoZSB3aG9sZSBkaXNwbGF5CisgICBpcyBhbHdheXMgdXBkYXRlZC4uLiAqLworCisvKiBFbmQgb2YgZHJpdmVyIGNvbmZpZyAqLwpkaWZmIC0tZ2l0IGEvRHJpdmVycy9CcmFpbGxlL1RTSS9icmxkZWZzLXRzLmggYi9Ecml2ZXJzL0JyYWlsbGUvVFNJL2JybGRlZnMtdHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZWFkYzhhCi0tLSAvZGV2L251bGwKKysrIGIvRHJpdmVycy9CcmFpbGxlL1RTSS9icmxkZWZzLXRzLmgKQEAgLTAsMCArMSw4OSBAQAorLyoKKyAqIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisgKiAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisgKgorICogQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKKyNpZm5kZWYgQlJMVFRZX0lOQ0xVREVEX1RTX0JSTERFRlMKKyNkZWZpbmUgQlJMVFRZX0lOQ0xVREVEX1RTX0JSTERFRlMKKworI2RlZmluZSBUU19CQVVEX0xPVyAgICAgNDgwMAorI2RlZmluZSBUU19CQVVEX05PUk1BTCAgOTYwMAorI2RlZmluZSBUU19CQVVEX0hJR0ggICAxOTIwMAorCit0eXBlZGVmIGVudW0geworICAvKiBOYXZpZ2F0b3IgLSBieXRlIDEKKyAgICogTmF2MjAvNDA6IHJpZ2h0IHNpZGUKKyAgICogTmF2ODA6IG5hdmlnYXRpb24ga2V5cywgcmlnaHQgdGh1bWIga2V5CisgICAqIFBCNDA6IHJpZ2h0IHJvY2tlciB1cC9kb3duLCBjb25jYXZlLCBmb3J3YXJkL2JhY2t3YXJkIChvbiB0b3ApCisgICAqLworICBUU19LRVlfTmF2TGVmdCAgICA9IDAsCisgIFRTX0tFWV9OYXZVcCAgICAgID0gMSwKKyAgVFNfS0VZX05hdlJpZ2h0ICAgPSAyLAorICBUU19LRVlfTmF2RG93biAgICA9IDMsCisgIFRTX0tFWV9UaHVtYlJpZ2h0ID0gNCwKKworICAvKiBOYXZpZ2F0b3IgLSBieXRlIDIKKyAgICogTmF2MjAvNDA6IGxlZnQgc2lkZQorICAgKiBuYXY4MDogY3Vyc29yIGtleXMsIGxlZnQgdGh1bWIga2V5CisgICAqIFBCNDA6IGxlZnQgcm9ja2VyIHVwL2Rvd24sIGNvbnZleAorICAgKi8KKyAgVFNfS0VZX0N1cnNvckxlZnQgID0gNSwKKyAgVFNfS0VZX0N1cnNvclVwICAgID0gNiwKKyAgVFNfS0VZX0N1cnNvclJpZ2h0ID0gNywKKyAgVFNfS0VZX0N1cnNvckRvd24gID0gOCwKKyAgVFNfS0VZX1RodW1iTGVmdCAgID0gOSwKKworICAvLyBQb3dlciBCcmFpbGxlIC0gYnl0ZSA2CisgIFRTX0tFWV9CdXR0b24xICAgICAgICA9IDUsCisgIFRTX0tFWV9MZWZ0Um9ja2VyVXAgICA9IDYsCisgIFRTX0tFWV9CdXR0b24yICAgICAgICA9IDcsCisgIFRTX0tFWV9MZWZ0Um9ja2VyRG93biA9IDgsCisgIFRTX0tFWV9Db252ZXggICAgICAgICA9IDksCisKKyAgLy8gUG93ZXIgQnJhaWxsZSAtIGJ5dGUgMQorICBUU19LRVlfU3dpdGNoMVVwICAgPSAxMCwKKyAgVFNfS0VZX1N3aXRjaDFEb3duID0gMTEsCisgIFRTX0tFWV9Td2l0Y2gyVXAgICA9IDEyLAorICBUU19LRVlfU3dpdGNoMkRvd24gPSAxMywKKworICAvLyBQb3dlciBCcmFpbGxlIC0gYnl0ZSAyCisgIFRTX0tFWV9Td2l0Y2gzVXAgICA9IDE0LAorICBUU19LRVlfU3dpdGNoM0Rvd24gPSAxNSwKKyAgVFNfS0VZX1N3aXRjaDRVcCAgID0gMTYsCisgIFRTX0tFWV9Td2l0Y2g0RG93biA9IDE3LAorCisgIC8vIFBvd2VyIEJyYWlsbGUgLSBieXRlIDMKKyAgVFNfS0VZX0JhcjMgPSAxOCwKKyAgVFNfS0VZX0JhcjQgPSAyMCwKKworICAvLyBQb3dlciBCcmFpbGxlIC0gYnl0ZSA0CisgIFRTX0tFWV9CdXR0b24zID0gMjEsCisgIFRTX0tFWV9CdXR0b240ID0gMjMsCisKKyAgLy8gUG93ZXIgQnJhaWxsZSAtIGJ5dGUgNQorICBUU19LRVlfQmFyMSAgICAgICAgICAgID0gMjQsCisgIFRTX0tFWV9SaWdodFJvY2tlclVwICAgPSAyNSwKKyAgVFNfS0VZX0JhcjIgICAgICAgICAgICA9IDI2LAorICBUU19LRVlfUmlnaHRSb2NrZXJEb3duID0gMjcsCisgIFRTX0tFWV9Db25jYXZlICAgICAgICAgPSAyOAorfSBUU19OYXZpZ2F0aW9uS2V5OworCit0eXBlZGVmIGVudW0geworICBUU19HUlBfTmF2aWdhdGlvbktleXMgPSAwLAorICBUU19HUlBfUm91dGluZ0tleXMKK30gVFNfS2V5R3JvdXA7CisKKyNlbmRpZiAvKiBCUkxUVFlfSU5DTFVERURfVFNfQlJMREVGUyAqLyAKZGlmZiAtLWdpdCBhL0RyaXZlcnMvQnJhaWxsZS9UVFkvTWFrZWZpbGUuaW4gYi9Ecml2ZXJzL0JyYWlsbGUvVFRZL01ha2VmaWxlLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjViOTdmZmIKLS0tIC9kZXYvbnVsbAorKysgYi9Ecml2ZXJzL0JyYWlsbGUvVFRZL01ha2VmaWxlLmluCkBAIC0wLDAgKzEsMjkgQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyMgICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisjCisjIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyMKKyMgQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitEUklWRVJfQ09ERSA9IHR0CitEUklWRVJfTkFNRSA9IFRUWQorRFJJVkVSX1VTQUdFID0gdGVybWluYWwgY29ubmVjdGVkIHZpYSBzZXJpYWwgcG9ydAorRFJJVkVSX1ZFUlNJT04gPSAwLjIgKEF1Z3VzdCwgMjAwNCkKK0RSSVZFUl9ERVZFTE9QRVJTID0gU2FtdWVsIFRoaWJhdWx0IDxzYW11ZWwudGhpYmF1bHRAZW5zLWx5b24ub3JnPgorQlJMX09CSlMgPSBAYnJhaWxsZV9saWJyYXJpZXNfdHRACitpbmNsdWRlICQoU1JDX1RPUClicmFpbGxlLm1rCisKK2JyYWlsbGUuJE86CisJJChDQykgJChCUkxfQ0ZMQUdTKSAtYyAkKFNSQ19ESVIpL2JyYWlsbGUuYworCmRpZmYgLS1naXQgYS9Ecml2ZXJzL0JyYWlsbGUvVFRZL1JFQURNRSBiL0RyaXZlcnMvQnJhaWxsZS9UVFkvUkVBRE1FCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUzYzg2YzUKLS0tIC9kZXYvbnVsbAorKysgYi9Ecml2ZXJzL0JyYWlsbGUvVFRZL1JFQURNRQpAQCAtMCwwICsxLDU0IEBACitUaGlzIGRyaXZlciBhbGxvd3MgdG8gdXNlIGFueSB0dHkgYXMgcGVyaXBoZXJhbCBmb3IgQnJsVFRZLiBUaGVyZSBhcmUgbWFueSB3YXlzCit0byB1c2UgaXQuCisKK0J5IHNzaC1pbmcgZnJvbSBhbm90aGVyIG1hY2hpbmUKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworc3NoIGZyb20gbWFjaEIgdG8gbWFjaEEsIGFuZCBnaXZlIHRoZSBjdXJyZW50IHR0eSBhcyBkZXZpY2UgdG8gYnJsdHR5OgorCitzYW15QG1hY2hCJCBzc2ggbWFjaEEKK3NhbXlAbWFjaEEkIHN1IC0KK1Bhc3N3b3JkOgorcm9vdEBtYWNoQSMgYnJsdHR5IC1iIHR0IC1kIGB0dHlgIC1CIHRlcm09JFRFUk0gLW4KKworQnkgdXNpbmcgYW4gWHRlcm0KKy0tLS0tLS0tLS0tLS0tLS0tCisKK0p1c3QgZ2l2ZSB0aGUgdHR5IHVzZWQgYnkgdGhlIHh0ZXJtIHRvIGJybHR0eS4KKworJCBzdSAtCitQYXNzd29yZDoKKyMgYnJsdHR5IC1iIHR0IC1kIGB0dHlgIC1CIHRlcm09JFRFUk0gLW4KKworQnkgdXNpbmcgYSByZWFsIHR0eQorLS0tLS0tLS0tLS0tLS0tLS0tLQorCitKdXN0IGdpdmUgdGhlIHNlcmlhbCBwb3J0IG9uIHdoaWNoIGl0IGlzIGNvbm5lY3RlZCB0byBicmx0dHk6CisKKyMgYnJsdHR5IC1iIHR0IC1kIC9kZXYvdHR5UzAgLUIgdGVybT1hbXBleDIzMixiYXVkPTE5MjAwLGNoYXJzZXQ9SUJNODUwLGxvY2FsZT1mcl9GUi5JQk04NTAKKworSSBoZXJlIGhhZCB0byBwcmVjaXNlIHRoZSB0eXBlIG9mIHRlcm1pbmFsIChJIGhhdmUgYW4gQW1wZXgyMzIsIHNlZSBzb21ld2hlcmUKK2xpa2UgL3Vzci9zaGFyZS90ZXJtaW5mbyBmb3IgeW91ciBvd24ncy4KKworSSBhbHNvIGhhZCB0byB0ZWxsIHRoYXQgaXQgdXNlcyB0aGUgSUJNODUwIGNvZGVwYWdlIHRhYmxlLiBBbmQgSSBoZW5jZSBhbHNvCitoYWQgdG8gdGVsbCB0byB1c2UgYSBzcGVjaWFsIGxvY2FsZTogZnJfRlIuSUJNODUwLCBzaW5jZSBJIHdhbnQgZnJlbmNoLAord2l0aCBJQk04NTAgY2hhcnNldC4gSSBoYWQgdG8gZ2VuZXJhdGUgc2luY2UgYnkgaGFuZCBieSBhZGRpbmcKK2ZyX0ZSLklCTTg1MCBJQk04NTAKK3RvIG15IC9ldGMvbG9jYWxlLmdlbiwgYW5kIHRoZW4gcmVsYXVuY2ggbG9jYWxlLWdlbgorCisKK05vdGVzCistLS0tLQorCitBbm90aGVyIG1hY2hpbmUgY29ubmVjdGVkIGJ5IGEgbnVsbC1tb2RlbSBjYW4gYmUgdXNlZCBhcyBhIHR0eToganVzdCBydW4KK21pbmljb20gb24gaXQsIGFuZCB1c2UgdnQxMDAgYXMgdHlwZSBvZiB0ZXJtaW5hbC4KKworSWYgYSBCcmxBUEkgYXBwbGljYXRpb24gd3JpdGVzIGRvdHMgKEdub3Blcm5pY3VzIGZvciBpbnN0YW5jZSkgeW91IHdvbid0CitnZXQgdGhlIHRleHQuCisKK1NlZSBoZWxwLnR4dCAob3IgcHJlc3MgRjEpIHRvIGdldCBoZWxwIG9uIGtleSBiaW5kaW5ncworRGVmYXVsdCBjb25maWd1cmF0aW9uIHNob3VsZCBiZSBmaW5lLCBidXQgaWYgbm90LCBnZXQgc3VyZSB0byB1c2UgOC1kb3QgdGV4dAorc3R5bGUgYW5kIG5vdCB0byBzaG93IGF0dHJpYnV0ZXMgaW4gdGhlIGNvbmZpZ3VyYXRpb24gbWVudSAoRjQpLgorCitOb3RlIHRoYXQgd2hlbiB0aGUgZGlzcGxheWVkIHdpbmRvdyBpcyBub3Qgc3VwcG9zZWQgdG8gY29udGFpbiB0aGUgY3Vyc29yLCB0aGUKK2N1cnNvciBpcyBhY3R1YWxseSBwdXQgYmVsb3cgdGhlIGRpc3BsYXllZCB3aW5kb3cuCmRpZmYgLS1naXQgYS9Ecml2ZXJzL0JyYWlsbGUvVFRZL2JyYWlsbGUuYyBiL0RyaXZlcnMvQnJhaWxsZS9UVFkvYnJhaWxsZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVlN2Q3ZmMKLS0tIC9kZXYvbnVsbAorKysgYi9Ecml2ZXJzL0JyYWlsbGUvVFRZL2JyYWlsbGUuYwpAQCAtMCwwICsxLDQyNSBAQAorLyoKKyAqIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisgKiAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisgKgorICogQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKKyNpbmNsdWRlICJwcm9sb2d1ZS5oIgorCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPGxvY2FsZS5oPgorCisjaW5jbHVkZSA8bGltaXRzLmg+CisjaWZuZGVmIE1CX0xFTl9NQVgKKyNkZWZpbmUgTUJfTEVOX01BWCAxNgorI2VuZGlmIC8qIE1CX0xFTl9NQVggKi8KKworI2lmZGVmIEhBVkVfSUNPTlZfSAorI2luY2x1ZGUgPGljb252Lmg+CitzdGF0aWMgaWNvbnZfdCBjb252ZXJzaW9uRGVzY3JpcHRvciA9IE5VTEw7CisjZW5kaWYgLyogSEFWRV9JQ09OVl9IICovCisKKyNpbmNsdWRlICJsb2cuaCIKKyNpbmNsdWRlICJwYXJzZS5oIgorI2luY2x1ZGUgImNoYXJzZXQuaCIKKyNpbmNsdWRlICJ1bmljb2RlLmgiCisjaW5jbHVkZSAiZ2V0X2N1cnNlcy5oIgorCisjaWZkZWYgR09UX0NVUlNFUworI2RlZmluZSBuZXdMaW5lKCkgYWRkY2goJ1xuJykKKyNlbHNlIC8qIEdPVF9DVVJTRVMgKi8KKyNkZWZpbmUgYWRkc3RyKHN0cmluZykgc2VyaWFsV3JpdGVEYXRhKHR0eURldmljZSwgc3RyaW5nLCBzdHJsZW4oc3RyaW5nKSkKKyNkZWZpbmUgYWRkY2goY2hhcmFjdGVyKSBkbyB7IHVuc2lnbmVkIGNoYXIgX19jID0gKGNoYXJhY3Rlcik7IHNlcmlhbFdyaXRlRGF0YSh0dHlEZXZpY2UsICZfX2MsIDEpOyB9IHdoaWxlKDApCisjZGVmaW5lIGdldGNoKCkgZ2V0Y2hfbm9DdXJzZXMoKQorI2RlZmluZSBuZXdMaW5lKCkgYWRkc3RyKCJcclxuIikKKyNlbmRpZiAvKiBHT1RfQ1VSU0VTICovCisKKyNpZmRlZiBHT1RfQ1VSU0VTCisjZGVmaW5lIEJSTFBBUk1fVEVSTSAidGVybSIsCisjZWxzZSAvKiBHT1RfQ1VSU0VTICovCisjZGVmaW5lIEJSTFBBUk1fVEVSTQorI2VuZGlmIC8qIEdPVF9DVVJTRVMgKi8KKworI2lmZGVmIEhBVkVfSUNPTlZfSAorI2RlZmluZSBCUkxQQVJNX0NIQVJTRVQgImNoYXJzZXQiLAorI2Vsc2UgLyogSEFWRV9JQ09OVl9IICovCisjZGVmaW5lIEJSTFBBUk1fQ0hBUlNFVAorI2VuZGlmIC8qIEhBVkVfSUNPTlZfSCAqLworCit0eXBlZGVmIGVudW0geworICBQQVJNX0JBVUQsCisKKyNpZmRlZiBHT1RfQ1VSU0VTCisgIFBBUk1fVEVSTSwKKyNlbmRpZiAvKiBHT1RfQ1VSU0VTICovCisKKyAgUEFSTV9MSU5FUywKKyAgUEFSTV9DT0xVTU5TLAorCisjaWZkZWYgSEFWRV9JQ09OVl9ICisgIFBBUk1fQ0hBUlNFVCwKKyNlbmRpZiAvKiBIQVZFX0lDT05WX0ggKi8KKworICBQQVJNX0xPQ0FMRQorfSBEcml2ZXJQYXJhbWV0ZXI7CisjZGVmaW5lIEJSTFBBUk1TICJiYXVkIiwgQlJMUEFSTV9URVJNICJsaW5lcyIsICJjb2x1bW5zIiwgQlJMUEFSTV9DSEFSU0VUICJsb2NhbGUiCisKKyNpbmNsdWRlICJicmxfZHJpdmVyLmgiCisjaW5jbHVkZSAiYnJhaWxsZS5oIgorI2luY2x1ZGUgImlvX3NlcmlhbC5oIgorCisjZGVmaW5lIE1BWF9XSU5ET1dfTElORVMgMworI2RlZmluZSBNQVhfV0lORE9XX0NPTFVNTlMgODAKKyNkZWZpbmUgTUFYX1dJTkRPV19TSVpFIChNQVhfV0lORE9XX0xJTkVTICogTUFYX1dJTkRPV19DT0xVTU5TKQorCitzdGF0aWMgU2VyaWFsRGV2aWNlICp0dHlEZXZpY2UgPSBOVUxMOworc3RhdGljIEZJTEUgKnR0eVN0cmVhbSA9IE5VTEw7CitzdGF0aWMgY2hhciAqY2xhc3NpZmljYXRpb25Mb2NhbGUgPSBOVUxMOworCisjaWZkZWYgR09UX0NVUlNFUworc3RhdGljIFNDUkVFTiAqdHR5U2NyZWVuID0gTlVMTDsKKyNlbHNlIC8qIEdPVF9DVVJTRVMgKi8KK3N0YXRpYyBpbmxpbmUgaW50CitnZXRjaF9ub0N1cnNlcyAodm9pZCkgeworICB1bnNpZ25lZCBjaGFyIGM7CisgIGlmIChzZXJpYWxSZWFkRGF0YSh0dHlEZXZpY2UsICZjLCAxLCAwLCAwKSA9PSAxKSByZXR1cm4gYzsKKyAgcmV0dXJuIEVPRjsKK30KKyNlbmRpZiAvKiBHT1RfQ1VSU0VTICovCisKK3N0YXRpYyBpbnQKK2JybF9jb25zdHJ1Y3QgKEJyYWlsbGVEaXNwbGF5ICpicmwsIGNoYXIgKipwYXJhbWV0ZXJzLCBjb25zdCBjaGFyICpkZXZpY2UpIHsKKyAgdW5zaWduZWQgaW50IHR0eUJhdWQgPSA5NjAwOworICBjb25zdCBjaGFyICp0dHlUeXBlID0gInZ0MTAwIjsKKyAgaW50IHdpbmRvd0xpbmVzID0gMTsKKyAgaW50IHdpbmRvd0NvbHVtbnMgPSA0MDsKKworI2lmZGVmIEhBVkVfSUNPTlZfSAorICBjb25zdCBjaGFyICpjaGFyYWN0ZXJTZXQgPSBnZXRMb2NhbGVDaGFyc2V0KCk7CisjZW5kaWYgLyogSEFWRV9JQ09OVl9IICovCisKKyAgaWYgKCFpc1NlcmlhbERldmljZUlkZW50aWZpZXIoJmRldmljZSkpIHsKKyAgICB1bnN1cHBvcnRlZERldmljZUlkZW50aWZpZXIoZGV2aWNlKTsKKyAgICByZXR1cm4gMDsKKyAgfQorCisgIHsKKyAgICB1bnNpZ25lZCBpbnQgYmF1ZCA9IHR0eUJhdWQ7CisKKyAgICBpZiAoc2VyaWFsVmFsaWRhdGVCYXVkKCZiYXVkLCAiVFRZIGJhdWQiLCBwYXJhbWV0ZXJzW1BBUk1fQkFVRF0sIE5VTEwpKSB7CisgICAgICB0dHlCYXVkID0gYmF1ZDsKKyAgICB9CisgIH0KKworI2lmZGVmIEdPVF9DVVJTRVMKKyAgaWYgKCpwYXJhbWV0ZXJzW1BBUk1fVEVSTV0pIHsKKyAgICB0dHlUeXBlID0gcGFyYW1ldGVyc1tQQVJNX1RFUk1dOworICB9CisjZW5kaWYgLyogR09UX0NVUlNFUyAqLworCisgIHsKKyAgICBzdGF0aWMgY29uc3QgaW50IG1pbmltdW0gPSAxOworICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4aW11bSA9IE1BWF9XSU5ET1dfTElORVM7CisgICAgaW50IGxpbmVzID0gd2luZG93TGluZXM7CisKKyAgICBpZiAodmFsaWRhdGVJbnRlZ2VyKCZsaW5lcywgcGFyYW1ldGVyc1tQQVJNX0xJTkVTXSwgJm1pbmltdW0sICZtYXhpbXVtKSkgeworICAgICAgd2luZG93TGluZXMgPSBsaW5lczsKKyAgICB9IGVsc2UgeworICAgICAgbG9nTWVzc2FnZShMT0dfV0FSTklORywgIiVzOiAlcyIsICJpbnZhbGlkIGxpbmUgY291bnQiLCBwYXJhbWV0ZXJzW1BBUk1fTElORVNdKTsKKyAgICB9CisgIH0KKworICB7CisgICAgc3RhdGljIGNvbnN0IGludCBtaW5pbXVtID0gMTsKKyAgICBzdGF0aWMgY29uc3QgaW50IG1heGltdW0gPSBNQVhfV0lORE9XX0NPTFVNTlM7CisgICAgaW50IGNvbHVtbnMgPSB3aW5kb3dDb2x1bW5zOworCisgICAgaWYgKHZhbGlkYXRlSW50ZWdlcigmY29sdW1ucywgcGFyYW1ldGVyc1tQQVJNX0NPTFVNTlNdLCAmbWluaW11bSwgJm1heGltdW0pKSB7CisgICAgICB3aW5kb3dDb2x1bW5zID0gY29sdW1uczsKKyAgICB9IGVsc2UgeworICAgICAgbG9nTWVzc2FnZShMT0dfV0FSTklORywgIiVzOiAlcyIsICJpbnZhbGlkIGNvbHVtbiBjb3VudCIsIHBhcmFtZXRlcnNbUEFSTV9DT0xVTU5TXSk7CisgICAgfQorICB9CisKKyNpZmRlZiBIQVZFX0lDT05WX0gKKyAgaWYgKCpwYXJhbWV0ZXJzW1BBUk1fQ0hBUlNFVF0pIHsKKyAgICBjaGFyYWN0ZXJTZXQgPSBwYXJhbWV0ZXJzW1BBUk1fQ0hBUlNFVF07CisgIH0KKyNlbmRpZiAvKiBIQVZFX0lDT05WX0ggKi8KKworICBpZiAoKnBhcmFtZXRlcnNbUEFSTV9MT0NBTEVdKSB7CisgICAgY2xhc3NpZmljYXRpb25Mb2NhbGUgPSBwYXJhbWV0ZXJzW1BBUk1fTE9DQUxFXTsKKyAgfQorCisjaWZkZWYgSEFWRV9JQ09OVl9ICisgIGlmICgoY29udmVyc2lvbkRlc2NyaXB0b3IgPSBpY29udl9vcGVuKGNoYXJhY3RlclNldCwgIldDSEFSX1QiKSkgIT0gKGljb252X3QpLTEpIHsKKyNlbmRpZiAvKiBIQVZFX0lDT05WX0ggKi8KKyAgICBpZiAoKHR0eURldmljZSA9IHNlcmlhbE9wZW5EZXZpY2UoZGV2aWNlKSkpIHsKKyAgICAgIGlmIChzZXJpYWxSZXN0YXJ0RGV2aWNlKHR0eURldmljZSwgdHR5QmF1ZCkpIHsKKyNpZmRlZiBHT1RfQ1VSU0VTCisgICAgICAgIGlmICgodHR5U3RyZWFtID0gc2VyaWFsR2V0U3RyZWFtKHR0eURldmljZSkpKSB7CisgICAgICAgICAgaWYgKCh0dHlTY3JlZW4gPSBuZXd0ZXJtKHR0eVR5cGUsIHR0eVN0cmVhbSwgdHR5U3RyZWFtKSkpIHsKKyAgICAgICAgICAgIGNicmVhaygpOworICAgICAgICAgICAgbm9lY2hvKCk7CisgICAgICAgICAgICBub25sKCk7CisKKyAgICAgICAgICAgIG5vZGVsYXkoc3Rkc2NyLCBUUlVFKTsKKyAgICAgICAgICAgIGludHJmbHVzaChzdGRzY3IsIEZBTFNFKTsKKyAgICAgICAgICAgIGtleXBhZChzdGRzY3IsIFRSVUUpOworCisgICAgICAgICAgICBjbGVhcigpOworICAgICAgICAgICAgcmVmcmVzaCgpOworI2VuZGlmIC8qIEdPVF9DVVJTRVMgKi8KKworICAgICAgICAgICAgYnJsLT50ZXh0Q29sdW1ucyA9IHdpbmRvd0NvbHVtbnM7CisgICAgICAgICAgICBicmwtPnRleHRSb3dzID0gd2luZG93TGluZXM7IAorCisgICAgICAgICAgICBsb2dNZXNzYWdlKExPR19JTkZPLCAiVFRZOiB0eXBlPSVzIGJhdWQ9JXUgc2l6ZT0lZHglZCIsCisgICAgICAgICAgICAgICAgICAgICAgIHR0eVR5cGUsIHR0eUJhdWQsIHdpbmRvd0NvbHVtbnMsIHdpbmRvd0xpbmVzKTsKKyAgICAgICAgICAgIHJldHVybiAxOworI2lmZGVmIEdPVF9DVVJTRVMKKyAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgbG9nU3lzdGVtRXJyb3IoIm5ld3Rlcm0iKTsKKyAgICAgICAgICB9CisKKyAgICAgICAgICB0dHlTdHJlYW0gPSBOVUxMOworICAgICAgICB9CisjZW5kaWYgLyogR09UX0NVUlNFUyAqLworICAgICAgfQorCisgICAgICBzZXJpYWxDbG9zZURldmljZSh0dHlEZXZpY2UpOworICAgICAgdHR5RGV2aWNlID0gTlVMTDsKKyAgICB9CisKKyNpZmRlZiBIQVZFX0lDT05WX0gKKyAgICBpY29udl9jbG9zZShjb252ZXJzaW9uRGVzY3JpcHRvcik7CisgIH0gZWxzZSB7CisgICAgbG9nU3lzdGVtRXJyb3IoImljb252X29wZW4iKTsKKyAgfQorCisgIGNvbnZlcnNpb25EZXNjcmlwdG9yID0gTlVMTDsKKyNlbmRpZiAvKiBIQVZFX0lDT05WX0ggKi8KKworICByZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQKK2JybF9kZXN0cnVjdCAoQnJhaWxsZURpc3BsYXkgKmJybCkgeworI2lmZGVmIEdPVF9DVVJTRVMKKyAgaWYgKHR0eVNjcmVlbikgeworICAgIGVuZHdpbigpOworCisjaWZuZGVmIF9fTUlOR1czMl9fCisgICAgZGVsc2NyZWVuKHR0eVNjcmVlbik7CisjZW5kaWYgLyogX19NSU5HVzMyX18gKi8KKworICAgIHR0eVNjcmVlbiA9IE5VTEw7CisgIH0KKyNlbmRpZiAvKiBHT1RfQ1VSU0VTICovCisKKyAgaWYgKHR0eURldmljZSkgeworICAgIHR0eVN0cmVhbSA9IE5VTEw7CisgICAgc2VyaWFsQ2xvc2VEZXZpY2UodHR5RGV2aWNlKTsKKyAgICB0dHlEZXZpY2UgPSBOVUxMOworICB9CisKKyNpZmRlZiBIQVZFX0lDT05WX0gKKyAgaWYgKGNvbnZlcnNpb25EZXNjcmlwdG9yKSB7CisgICAgaWNvbnZfY2xvc2UoY29udmVyc2lvbkRlc2NyaXB0b3IpOworICAgIGNvbnZlcnNpb25EZXNjcmlwdG9yID0gTlVMTDsKKyAgfQorI2VuZGlmIC8qIEhBVkVfSUNPTlZfSCAqLworfQorCitzdGF0aWMgdm9pZAord3JpdGVUZXh0IChjb25zdCB3Y2hhcl90ICpidWZmZXIsIGludCBjb2x1bW5zKSB7CisgIGludCBjb2x1bW47CisgIGZvciAoY29sdW1uPTA7IGNvbHVtbjxjb2x1bW5zOyBjb2x1bW4rKykgeworICAgIHdjaGFyX3QgYyA9IGJ1ZmZlcltjb2x1bW5dOworCisjaWZkZWYgSEFWRV9JQ09OVl9ICisgICAgY2hhciAqcGMgPSAoY2hhciopICZjOworICAgIHNpemVfdCBzYyA9IHNpemVvZih3Y2hhcl90KTsKKyAgICBjaGFyIGRbTUJfTEVOX01BWCsxXTsKKyAgICBjaGFyICpwZCA9IGQ7CisgICAgc2l6ZV90IHNkID0gTUJfTEVOX01BWDsKKworICAgIGlmIChpY29udihjb252ZXJzaW9uRGVzY3JpcHRvciwgJnBjLCAmc2MsICZwZCwgJnNkKSAhPSAoc2l6ZV90KS0xKSB7CisgICAgICAqcGQgPSAwOworICAgICAgYWRkc3RyKGQpOworICAgIH0gZWxzZQorI2VuZGlmIC8qIEhBVkVfSUNPTlZfSCAqLworICAgIHsKKyAgICAgIGFkZGNoKGMpOworICAgIH0KKyAgfQorfQorCitzdGF0aWMgaW50Citicmxfd3JpdGVXaW5kb3cgKEJyYWlsbGVEaXNwbGF5ICpicmwsIGNvbnN0IHdjaGFyX3QgKnRleHQpIHsKKyAgc3RhdGljIHVuc2lnbmVkIGNoYXIgcHJldmlvdXNDb250ZW50W01BWF9XSU5ET1dfU0laRV07CisgIHN0YXRpYyBpbnQgcHJldmlvdXNDdXJzb3IgPSAtMTsKKyAgY2hhciAqcHJldmlvdXNMb2NhbGU7CisKKyAgaWYgKCFjZWxsc0hhdmVDaGFuZ2VkKHByZXZpb3VzQ29udGVudCwgYnJsLT5idWZmZXIsIGJybC0+dGV4dENvbHVtbnMqYnJsLT50ZXh0Um93cywgTlVMTCwgTlVMTCwgTlVMTCkgJiYKKyAgICAgIChicmwtPmN1cnNvciA9PSBwcmV2aW91c0N1cnNvcikpIHsKKyAgICByZXR1cm4gMTsKKyAgfQorCisgIHByZXZpb3VzQ3Vyc29yID0gYnJsLT5jdXJzb3I7CisKKyAgaWYgKGNsYXNzaWZpY2F0aW9uTG9jYWxlKSB7CisgICAgcHJldmlvdXNMb2NhbGUgPSBzZXRsb2NhbGUoTENfQ1RZUEUsIE5VTEwpOworICAgIHNldGxvY2FsZShMQ19DVFlQRSwgY2xhc3NpZmljYXRpb25Mb2NhbGUpOworICB9IGVsc2UgeworICAgIHByZXZpb3VzTG9jYWxlID0gTlVMTDsKKyAgfQorCisjaWZkZWYgR09UX0NVUlNFUworICBjbGVhcigpOworI2Vsc2UgLyogR09UX0NVUlNFUyAqLworICBuZXdMaW5lKCk7CisjZW5kaWYgLyogR09UX0NVUlNFUyAqLworCisgIHsKKyAgICB3Y2hhcl90IGJyYWlsbGVbYnJsLT50ZXh0Q29sdW1uc107CisKKyAgICBmb3IgKHVuc2lnbmVkIGludCByb3c9MDsgcm93PGJybC0+dGV4dFJvd3M7IHJvdysrKSB7CisgICAgICB1bnNpZ25lZCBpbnQgb2Zmc2V0ID0gcm93ICogYnJsLT50ZXh0Q29sdW1uczsKKyAgICAgIHdyaXRlVGV4dCgmdGV4dFtvZmZzZXRdLCBicmwtPnRleHRDb2x1bW5zKTsKKworICAgICAgZm9yICh1bnNpZ25lZCBpbnQgY29sdW1uPTA7IGNvbHVtbjxicmwtPnRleHRDb2x1bW5zOyBjb2x1bW4rPTEpIHsKKyAgICAgICAgdW5zaWduZWQgY2hhciBjID0gYnJsLT5idWZmZXJbb2Zmc2V0ICsgY29sdW1uXTsKKyAgICAgICAgYnJhaWxsZVtjb2x1bW5dID0gVU5JQ09ERV9CUkFJTExFX1JPVworICAgICAgICAgICAgICAgICAgICAgICAgfCAoISEoYyAmIEJSTF9ET1QxKSA8PCAwKQorICAgICAgICAgICAgICAgICAgICAgICAgfCAoISEoYyAmIEJSTF9ET1QyKSA8PCAxKQorICAgICAgICAgICAgICAgICAgICAgICAgfCAoISEoYyAmIEJSTF9ET1QzKSA8PCAyKQorICAgICAgICAgICAgICAgICAgICAgICAgfCAoISEoYyAmIEJSTF9ET1Q0KSA8PCAzKQorICAgICAgICAgICAgICAgICAgICAgICAgfCAoISEoYyAmIEJSTF9ET1Q1KSA8PCA0KQorICAgICAgICAgICAgICAgICAgICAgICAgfCAoISEoYyAmIEJSTF9ET1Q2KSA8PCA1KQorICAgICAgICAgICAgICAgICAgICAgICAgfCAoISEoYyAmIEJSTF9ET1Q3KSA8PCA2KQorICAgICAgICAgICAgICAgICAgICAgICAgfCAoISEoYyAmIEJSTF9ET1Q4KSA8PCA3KQorICAgICAgICAgICAgICAgICAgICAgICAgOworICAgICAgfQorCisgICAgICBuZXdMaW5lKCk7CisgICAgICB3cml0ZVRleHQoYnJhaWxsZSwgYnJsLT50ZXh0Q29sdW1ucyk7CisKKyAgICAgIGlmIChyb3cgPCAoYnJsLT50ZXh0Um93cyAtIDEpKSB7CisgICAgICAgIG5ld0xpbmUoKTsKKyAgICAgIH0KKyAgICB9CisgIH0KKworI2lmZGVmIEdPVF9DVVJTRVMKKyAgaWYgKChicmwtPmN1cnNvciAhPSBCUkxfTk9fQ1VSU09SKSAmJiAoYnJsLT5jdXJzb3IgPCAoYnJsLT50ZXh0Q29sdW1ucyAqIGJybC0+dGV4dFJvd3MpKSkgeworICAgIG1vdmUoYnJsLT5jdXJzb3IvYnJsLT50ZXh0Q29sdW1ucywgYnJsLT5jdXJzb3IlYnJsLT50ZXh0Q29sdW1ucyk7CisgIH0gZWxzZSB7CisgICAgbW92ZShicmwtPnRleHRSb3dzLCAwKTsKKyAgfQorCisgIHJlZnJlc2goKTsKKyNlbHNlIC8qIEdPVF9DVVJTRVMgKi8KKyAgaWYgKChicmwtPnRleHRSb3dzID09IDEpICYmIChicmwtPmN1cnNvciAhPSBCUkxfTk9fQ1VSU09SKSAmJiAoYnJsLT5jdXJzb3IgPCBicmwtPnRleHRDb2x1bW5zKSkgeworICAgIGFkZGNoKCdccicpOworICAgIHdyaXRlVGV4dCh0ZXh0LCBicmwtPmN1cnNvcik7CisgIH0gZWxzZSB7CisgICAgbmV3TGluZSgpOworICB9CisjZW5kaWYgLyogR09UX0NVUlNFUyAqLworCisgIGlmIChwcmV2aW91c0xvY2FsZSkgc2V0bG9jYWxlKExDX0NUWVBFLCBwcmV2aW91c0xvY2FsZSk7CisgIHJldHVybiAxOworfQorCitzdGF0aWMgaW50CitrZXlUb0NvbW1hbmQgKEJyYWlsbGVEaXNwbGF5ICpicmwsIEtleVRhYmxlQ29tbWFuZENvbnRleHQgY29udGV4dCwgaW50IGtleSkgeworICBzd2l0Y2ggKGtleSkgeworICAgIGNhc2UgRU9GOiByZXR1cm4gRU9GOworCisgICAgZGVmYXVsdDoKKyAgICAgIGlmIChrZXkgPD0gMFhGRikgcmV0dXJuIEJSTF9DTURfQ0hBUihrZXkpOworICAgICAgbG9nTWVzc2FnZShMT0dfV0FSTklORywgInVucmVjb2duaXplZCBjdXJzZXMga2V5OiAlZCIsIGtleSk7CisgICAgICByZXR1cm4gQlJMX0NNRF9OT09QOworCisjaWZkZWYgR09UX0NVUlNFUworI2RlZmluZSBNQVAoa2V5LGNtZCkgY2FzZSBLRVlfIyNrZXk6IHJldHVybiBCUkxfQ01EXyMjY21kCisgICAgTUFQKEJBQ0tTUEFDRSwgS0VZKEJBQ0tTUEFDRSkpOworCisgICAgTUFQKExFRlQsIEZXSU5MVCk7CisgICAgTUFQKFJJR0hULCBGV0lOUlQpOworICAgIE1BUChVUCwgTE5VUCk7CisgICAgTUFQKERPV04sIExORE4pOworCisgICAgTUFQKFBQQUdFLCBQUkRJRkxOKTsKKyAgICBNQVAoTlBBR0UsIE5YRElGTE4pOworICAgIE1BUChBMywgUFJESUZMTik7CisgICAgTUFQKEMzLCBOWERJRkxOKTsKKworICAgIE1BUChIT01FLCBUT1ApOworICAgIE1BUChFTkQsIEJPVCk7CisgICAgTUFQKEExLCBUT1ApOworICAgIE1BUChDMSwgQk9UKTsKKworICAgIE1BUChJQywgQVRUUlVQKTsKKyAgICBNQVAoREMsIEFUVFJETik7CisgICAgTUFQKEIyLCBIT01FKTsKKworICAgIE1BUChGKDEpLCBIRUxQKTsKKyAgICBNQVAoRigyKSwgTEVBUk4pOworICAgIE1BUChGKDMpLCBJTkZPKTsKKyAgICBNQVAoRig0KSwgUFJFRk1FTlUpOworCisgICAgTUFQKEYoNSksIFBSUFJPTVBUKTsKKyAgICBNQVAoRig2KSwgTlhQUk9NUFQpOworICAgIE1BUChGKDcpLCBQUlBHUlBIKTsKKyAgICBNQVAoRig4KSwgTlhQR1JQSCk7CisKKyAgICBNQVAoRig5KSwgTE5CRUcpOworICAgIE1BUChGKDEwKSwgQ0hSTFQpOworICAgIE1BUChGKDExKSwgQ0hSUlQpOworICAgIE1BUChGKDEyKSwgTE5FTkQpOworI3VuZGVmIE1BUAorI2VuZGlmIC8qIEdPVF9DVVJTRVMgKi8KKyAgfQorfQorCitzdGF0aWMgaW50CityZWFkS2V5IChCcmFpbGxlRGlzcGxheSAqYnJsKSB7CisgIGludCBrZXkgPSBnZXRjaCgpOworCisjaWZkZWYgR09UX0NVUlNFUworICBpZiAoa2V5ID09IEVSUikgcmV0dXJuIEVPRjsKKyNlbmRpZiAvKiBHT1RfQ1VSU0VTICovCisKKyAgaWYgKGtleSAhPSBFT0YpIHsKKyAgICBsb2dNZXNzYWdlKExPR19DQVRFR09SWShCUkFJTExFX0RSSVZFUiksICJjdXJzZXMga2V5OiAlZCIsIGtleSk7CisgIH0KKworICByZXR1cm4ga2V5OworfQorCitzdGF0aWMgaW50CiticmxfcmVhZENvbW1hbmQgKEJyYWlsbGVEaXNwbGF5ICpicmwsIEtleVRhYmxlQ29tbWFuZENvbnRleHQgY29udGV4dCkgeworICBpbnQgY29tbWFuZCA9IGtleVRvQ29tbWFuZChicmwsIGNvbnRleHQsIHJlYWRLZXkoYnJsKSk7CisKKyAgaWYgKGNvbW1hbmQgIT0gRU9GKSB7CisgICAgbG9nTWVzc2FnZShMT0dfQ0FURUdPUlkoQlJBSUxMRV9EUklWRVIpLCAiY29tbWFuZDogMFglMDRYIiwgY29tbWFuZCk7CisgIH0KKworICByZXR1cm4gY29tbWFuZDsKK30KZGlmZiAtLWdpdCBhL0RyaXZlcnMvQnJhaWxsZS9UVFkvYnJhaWxsZS5oIGIvRHJpdmVycy9CcmFpbGxlL1RUWS9icmFpbGxlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWNiNWU3NwotLS0gL2Rldi9udWxsCisrKyBiL0RyaXZlcnMvQnJhaWxsZS9UVFkvYnJhaWxsZS5oCkBAIC0wLDAgKzEsMTcgQEAKKy8qCisgKiBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorICogICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorICoKKyAqIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorICoKKyAqIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyAqLwpkaWZmIC0tZ2l0IGEvRHJpdmVycy9CcmFpbGxlL1RlY2huaUJyYWlsbGUvTWFrZWZpbGUuaW4gYi9Ecml2ZXJzL0JyYWlsbGUvVGVjaG5pQnJhaWxsZS9NYWtlZmlsZS5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hM2JjMzFmCi0tLSAvZGV2L251bGwKKysrIGIvRHJpdmVycy9CcmFpbGxlL1RlY2huaUJyYWlsbGUvTWFrZWZpbGUuaW4KQEAgLTAsMCArMSwyOCBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorIyAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyMKKyMgQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorIworIyBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorIworIyBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisjIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyMgbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisjCisjIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK0RSSVZFUl9DT0RFID0gdG4KK0RSSVZFUl9OQU1FID0gVGVjaG5pQnJhaWxsZQorRFJJVkVSX1VTQUdFID0gTWFuYWdlciA0MAorRFJJVkVSX1ZFUlNJT04gPSAKK0RSSVZFUl9ERVZFTE9QRVJTID0gRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPgoraW5jbHVkZSAkKFNSQ19UT1ApYnJhaWxsZS5taworCiticmFpbGxlLiRPOgorCSQoQ0MpICQoQlJMX0NGTEFHUykgLWMgJChTUkNfRElSKS9icmFpbGxlLmMKKwpkaWZmIC0tZ2l0IGEvRHJpdmVycy9CcmFpbGxlL1RlY2huaUJyYWlsbGUvYnJhaWxsZS5jIGIvRHJpdmVycy9CcmFpbGxlL1RlY2huaUJyYWlsbGUvYnJhaWxsZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM2MTFjYjQKLS0tIC9kZXYvbnVsbAorKysgYi9Ecml2ZXJzL0JyYWlsbGUvVGVjaG5pQnJhaWxsZS9icmFpbGxlLmMKQEAgLTAsMCArMSwzNDEgQEAKKy8qCisgKiBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorICogICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorICoKKyAqIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorICoKKyAqIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyAqLworCisjaW5jbHVkZSAicHJvbG9ndWUuaCIKKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKworI2luY2x1ZGUgImxvZy5oIgorCisjaW5jbHVkZSAiYnJsX2RyaXZlci5oIgorCitzdGF0aWMgdW5zaWduZWQgY2hhciBicmFpbGxlQ2VsbHNbMFhGRl07CitzdGF0aWMgd2NoYXJfdCB2aXN1YWxUZXh0WzBYRkZdOworCisjaW5jbHVkZSAiaW9fc2VyaWFsLmgiCitzdGF0aWMgU2VyaWFsRGV2aWNlICpzZXJpYWxEZXZpY2UgPSBOVUxMOworc3RhdGljIHVuc2lnbmVkIGludCBjaGFyYWN0ZXJzUGVyU2Vjb25kOworCitzdGF0aWMgaW50CityZWFkUGFja2V0IChCcmFpbGxlRGlzcGxheSAqYnJsLCB1bnNpZ25lZCBjaGFyICpwYWNrZXQsIGludCBsZW5ndGgpIHsKKyAgc2l6ZV90IG9mZnNldCA9IDA7CisgIGludCBzaXplID0gLTE7CisKKyAgd2hpbGUgKG9mZnNldCA8IGxlbmd0aCkgeworICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ5dGUgPSAmcGFja2V0W29mZnNldF07CisKKyAgICBpZiAoIXNlcmlhbFJlYWRDaHVuayhzZXJpYWxEZXZpY2UsIHBhY2tldCwgJm9mZnNldCwgMSwgMCwgMTAwMCkpIHsKKyAgICAgIGlmIChlcnJubyA9PSBFQUdBSU4pIHsKKyAgICAgICAgaWYgKCFvZmZzZXQpIHJldHVybiAwOworICAgICAgICBsb2dQYXJ0aWFsUGFja2V0KHBhY2tldCwgb2Zmc2V0KTsKKyAgICAgIH0KKyAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICBpZiAob2Zmc2V0ID09IDEpIHsKKyAgICAgIGlmICgqYnl0ZSkgeworICAgICAgICBsb2dEaXNjYXJkZWRCeXRlKHBhY2tldFswXSk7CisgICAgICAgIG9mZnNldCA9IDA7CisgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgIGlmIChvZmZzZXQgPT0gMikgeworICAgICAgICBzd2l0Y2ggKCpieXRlKSB7CisgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHNpemUgPSAxOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgc2l6ZSArPSBvZmZzZXQ7CisgICAgICB9CisKKyAgICAgIGlmIChvZmZzZXQgPT0gc2l6ZSkgeworICAgICAgICBsb2dJbnB1dFBhY2tldChwYWNrZXQsIG9mZnNldCk7CisgICAgICAgIHJldHVybiBvZmZzZXQ7CisgICAgICB9CisgICAgfQorICB9CisKKyAgbG9nVHJ1bmNhdGVkUGFja2V0KHBhY2tldCwgb2Zmc2V0KTsKKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK3dyaXRlUGFja2V0IChCcmFpbGxlRGlzcGxheSAqYnJsLCB1bnNpZ25lZCBjaGFyIGZ1bmN0aW9uLCB1bnNpZ25lZCBjaGFyICpkYXRhLCB1bnNpZ25lZCBjaGFyIGNvdW50KSB7CisgIHVuc2lnbmVkIGNoYXIgYnVmZmVyW2NvdW50ICsgNF07CisgIHVuc2lnbmVkIGNoYXIgKmJ5dGUgPSBidWZmZXI7CisKKyAgKmJ5dGUrKyA9IDA7CisgICpieXRlKysgPSBmdW5jdGlvbjsKKyAgKmJ5dGUrKyA9IGNvdW50OworICBieXRlID0gbWVtcGNweShieXRlLCBkYXRhLCBjb3VudCk7CisKKyAgeworICAgIHVuc2lnbmVkIGNoYXIgY2hlY2tzdW0gPSAwOworICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnB0ciA9IGJ1ZmZlcjsKKyAgICB3aGlsZSAocHRyIDwgYnl0ZSkgY2hlY2tzdW0gXj0gKnB0cisrOworICAgICpieXRlKysgPSBjaGVja3N1bTsKKyAgfQorCisgIHsKKyAgICBpbnQgc2l6ZSA9IGJ5dGUgLSBidWZmZXI7CisgICAgbG9nT3V0cHV0UGFja2V0KGJ1ZmZlciwgc2l6ZSk7CisgICAgYnJsLT53cml0ZURlbGF5ICs9IChjb3VudCAqIDEwMDAgLyBjaGFyYWN0ZXJzUGVyU2Vjb25kKSArIDE7CisgICAgaWYgKHNlcmlhbFdyaXRlRGF0YShzZXJpYWxEZXZpY2UsIGJ1ZmZlciwgc2l6ZSkgIT0gLTEpIHJldHVybiAxOworICB9CisKKyAgbG9nU3lzdGVtRXJyb3IoInNlcmlhbCB3cml0ZSIpOworICByZXR1cm4gMDsKK30KKworc3RhdGljIGludAord3JpdGVCcmFpbGxlQ2VsbHMgKEJyYWlsbGVEaXNwbGF5ICpicmwpIHsKKyAgc2l6ZV90IGNvdW50ID0gYnJsLT50ZXh0Q29sdW1uczsKKyAgdW5zaWduZWQgY2hhciBjZWxsc1tjb3VudF07CisKKyAgdHJhbnNsYXRlT3V0cHV0Q2VsbHMoY2VsbHMsIGJyYWlsbGVDZWxscywgY291bnQpOworICByZXR1cm4gd3JpdGVQYWNrZXQoYnJsLCAxLCBjZWxscywgY291bnQpOworfQorCitzdGF0aWMgaW50CitjbGVhckJyYWlsbGVDZWxscyAoQnJhaWxsZURpc3BsYXkgKmJybCkgeworICBtZW1zZXQoYnJhaWxsZUNlbGxzLCAwLCBicmwtPnRleHRDb2x1bW5zKTsKKyAgcmV0dXJuIHdyaXRlQnJhaWxsZUNlbGxzKGJybCk7Cit9CisKK3N0YXRpYyBpbnQKK3dyaXRlVmlzdWFsVGV4dCAoQnJhaWxsZURpc3BsYXkgKmJybCkgeworICB1bnNpZ25lZCBjaGFyIGJ5dGVzW2JybC0+dGV4dENvbHVtbnNdOworICBpbnQgaTsKKworICBmb3IgKGk9MDsgaTxicmwtPnRleHRDb2x1bW5zOyArK2kpIHsKKyAgICB3Y2hhcl90IGNoYXJhY3RlciA9IHZpc3VhbFRleHRbaV07CisgICAgYnl0ZXNbaV0gPSBpc3dMYXRpbjEoY2hhcmFjdGVyKT8gY2hhcmFjdGVyOiAnPyc7CisgIH0KKworICByZXR1cm4gd3JpdGVQYWNrZXQoYnJsLCAyLCBieXRlcywgYnJsLT50ZXh0Q29sdW1ucyk7Cit9CisKK3N0YXRpYyBpbnQKK2NsZWFyVmlzdWFsVGV4dCAoQnJhaWxsZURpc3BsYXkgKmJybCkgeworICB3bWVtc2V0KHZpc3VhbFRleHQsIFdDX0MoJyAnKSwgYnJsLT50ZXh0Q29sdW1ucyk7CisgIHJldHVybiB3cml0ZVZpc3VhbFRleHQoYnJsKTsKK30KKworc3RhdGljIGludAorYnJsX2NvbnN0cnVjdCAoQnJhaWxsZURpc3BsYXkgKmJybCwgY2hhciAqKnBhcmFtZXRlcnMsIGNvbnN0IGNoYXIgKmRldmljZSkgeworICBpZiAoIWlzU2VyaWFsRGV2aWNlSWRlbnRpZmllcigmZGV2aWNlKSkgeworICAgIHVuc3VwcG9ydGVkRGV2aWNlSWRlbnRpZmllcihkZXZpY2UpOworICAgIHJldHVybiAwOworICB9CisKKyAgaWYgKChzZXJpYWxEZXZpY2UgPSBzZXJpYWxPcGVuRGV2aWNlKGRldmljZSkpKSB7CisgICAgdW5zaWduZWQgaW50IGJhdWQgPSAxOTIwMDsKKyAgICBjaGFyYWN0ZXJzUGVyU2Vjb25kID0gYmF1ZCAvIDExOworCisgICAgaWYgKHNlcmlhbFJlc3RhcnREZXZpY2Uoc2VyaWFsRGV2aWNlLCBiYXVkKSkgeworICAgICAgaWYgKHNlcmlhbFNldFBhcml0eShzZXJpYWxEZXZpY2UsIFNFUklBTF9QQVJJVFlfRVZFTikpIHsKKyAgICAgICAgaWYgKHdyaXRlUGFja2V0KGJybCwgNCwgTlVMTCwgMCkpIHsKKyAgICAgICAgICB3aGlsZSAoc2VyaWFsQXdhaXRJbnB1dChzZXJpYWxEZXZpY2UsIDUwMCkpIHsKKyAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgcmVzcG9uc2VbM107CisgICAgICAgICAgICBpbnQgc2l6ZSA9IHJlYWRQYWNrZXQoYnJsLCByZXNwb25zZSwgc2l6ZW9mKHJlc3BvbnNlKSk7CisgICAgICAgICAgICBpZiAoc2l6ZSA8PSAwKSBicmVhazsKKworICAgICAgICAgICAgaWYgKHJlc3BvbnNlWzFdID09IDQpIHsKKyAgICAgICAgICAgICAgYnJsLT50ZXh0Q29sdW1ucyA9IHJlc3BvbnNlWzJdOworICAgICAgICAgICAgICBicmwtPnRleHRSb3dzID0gMTsKKworICAgICAgICAgICAgICBtYWtlT3V0cHV0VGFibGUoZG90c1RhYmxlX0lTTzExNTQ4XzEpOworICAgICAgICAgICAgICBtYWtlSW5wdXRUYWJsZSgpOworCisgICAgICAgICAgICAgIGlmICghY2xlYXJCcmFpbGxlQ2VsbHMoYnJsKSkgYnJlYWs7CisgICAgICAgICAgICAgIGlmICghY2xlYXJWaXN1YWxUZXh0KGJybCkpIGJyZWFrOworICAgICAgICAgICAgICBpZiAoIXdyaXRlQnJhaWxsZUNlbGxzKGJybCkpIGJyZWFrOworCisgICAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICAgICAgfQorICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgfQorICAgIH0KKworICAgIHNlcmlhbENsb3NlRGV2aWNlKHNlcmlhbERldmljZSk7CisgICAgc2VyaWFsRGV2aWNlID0gTlVMTDsKKyAgfQorICAKKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkCiticmxfZGVzdHJ1Y3QgKEJyYWlsbGVEaXNwbGF5ICpicmwpIHsKKyAgaWYgKHNlcmlhbERldmljZSkgeworICAgIHNlcmlhbENsb3NlRGV2aWNlKHNlcmlhbERldmljZSk7CisgICAgc2VyaWFsRGV2aWNlID0gTlVMTDsKKyAgfQorfQorCitzdGF0aWMgaW50Citicmxfd3JpdGVXaW5kb3cgKEJyYWlsbGVEaXNwbGF5ICpicmwsIGNvbnN0IHdjaGFyX3QgKnRleHQpIHsKKyAgaWYgKHRleHQpIHsKKyAgICBpZiAod21lbWNtcCh0ZXh0LCB2aXN1YWxUZXh0LCBicmwtPnRleHRDb2x1bW5zKSAhPSAwKSB7CisgICAgICB3bWVtY3B5KHZpc3VhbFRleHQsIHRleHQsIGJybC0+dGV4dENvbHVtbnMpOworICAgICAgaWYgKCF3cml0ZVZpc3VhbFRleHQoYnJsKSkgcmV0dXJuIDA7CisgICAgfQorICB9CisKKyAgaWYgKGNlbGxzSGF2ZUNoYW5nZWQoYnJhaWxsZUNlbGxzLCBicmwtPmJ1ZmZlciwgYnJsLT50ZXh0Q29sdW1ucywgTlVMTCwgTlVMTCwgTlVMTCkpIHsKKyAgICBpZiAoIXdyaXRlQnJhaWxsZUNlbGxzKGJybCkpIHJldHVybiAwOworICB9CisgIHJldHVybiAxOworfQorCitzdGF0aWMgaW50CiticmxfcmVhZENvbW1hbmQgKEJyYWlsbGVEaXNwbGF5ICpicmwsIEtleVRhYmxlQ29tbWFuZENvbnRleHQgY29udGV4dCkgeworICB3aGlsZSAoMSkgeworICAgIHVuc2lnbmVkIGNoYXIgcGFja2V0WzNdOworICAgIGludCBzaXplID0gcmVhZFBhY2tldChicmwsIHBhY2tldCwgc2l6ZW9mKHBhY2tldCkpOworICAgIGlmIChzaXplID09IDApIGJyZWFrOworICAgIGlmIChzaXplIDwgMCkgcmV0dXJuIEJSTF9DTURfUkVTVEFSVEJSTDsKKworICAgIHN3aXRjaCAocGFja2V0WzFdKSB7CisgICAgICBkZWZhdWx0OgorICAgICAgICBicmVhazsKKworICAgICAgY2FzZSAxOgorICAgICAgICByZXR1cm4gQlJMX0NNRF9CTEsoUEFTU0RPVFMpIHwgdHJhbnNsYXRlSW5wdXRDZWxsKHBhY2tldFsyXSk7CisKKyAgICAgIGNhc2UgMjogeworICAgICAgICB1bnNpZ25lZCBjaGFyIGNvbHVtbiA9IHBhY2tldFsyXTsKKyAgICAgICAgaWYgKGNvbHVtbiAmJiAoY29sdW1uIDw9IGJybC0+dGV4dENvbHVtbnMpKSByZXR1cm4gQlJMX0NNRF9CTEsoUk9VVEUpICsgKGNvbHVtbiAtIDEpOworICAgICAgICBicmVhazsKKyAgICAgIH0KKworICAgICAgY2FzZSAzOgorICAgICAgICBzd2l0Y2ggKHBhY2tldFsyXSkgeworICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgIC8vIGxlZnQgcmVhcjogdHdvIGNvbHVtbnMsIG9uZSByb3cKKyAgICAgICAgICBjYXNlIDBYMDI6IC8vIEVTQworICAgICAgICAgICAgcmV0dXJuIEJSTF9DTURfTEVBUk47CisgICAgICAgICAgY2FzZSAwWDAxOiAvLyBNCisgICAgICAgICAgICByZXR1cm4gQlJMX0NNRF9QUkVGTUVOVTsKKworICAgICAgICAgIC8vIGxlZnQgbWlkZGxlOiBjcm9zcworICAgICAgICAgIGNhc2UgMFgwNjogLy8gdXAKKyAgICAgICAgICAgIHJldHVybiBCUkxfQ01EX0xOVVA7CisgICAgICAgICAgY2FzZSAwWDAzOiAvLyBsZWZ0CisgICAgICAgICAgICByZXR1cm4gQlJMX0NNRF9GV0lOTFQ7CisgICAgICAgICAgY2FzZSAwWDA1OiAvLyByaWdodAorICAgICAgICAgICAgcmV0dXJuIEJSTF9DTURfRldJTlJUOworICAgICAgICAgIGNhc2UgMFgwNDogLy8gZG93bgorICAgICAgICAgICAgcmV0dXJuIEJSTF9DTURfTE5ETjsKKworICAgICAgICAgIC8vIGxlZnQgZnJvbnQ6IHR3byBjb2x1bW5zLCB0aHJlZSByb3dzCisgICAgICAgICAgY2FzZSAwWDA5OiAvLyBpbnMKKyAgICAgICAgICAgIHJldHVybiBCUkxfQ01EX1JFVFVSTjsKKyAgICAgICAgICBjYXNlIDBYMEE6IC8vIEUKKyAgICAgICAgICAgIHJldHVybiBCUkxfQ01EX1RPUDsKKyAgICAgICAgICBjYXNlIDBYMEI6IC8vIHN1cHAKKyAgICAgICAgICAgIHJldHVybiBCUkxfQ01EX0NTUlRSSzsKKyAgICAgICAgICBjYXNlIDBYMEM6IC8vIEwKKyAgICAgICAgICAgIHJldHVybiBCUkxfQ01EX0JPVDsKKyAgICAgICAgICBjYXNlIDBYMDc6IC8vIGV4dHJhIDEgKDQwcyBvbmx5KQorICAgICAgICAgICAgcmV0dXJuIEJSTF9DTURfQ0hSTFQ7CisgICAgICAgICAgY2FzZSAwWDA4OiAvLyBleHRyYSAyICg0MHMgb25seSkKKyAgICAgICAgICAgIHJldHVybiBCUkxfQ01EX0NIUlJUOworCisgICAgICAgICAgY2FzZSAweDBFOiAvLyBsZWZ0IHRodW1iCisgICAgICAgICAgICByZXR1cm4gQlJMX0NNRF9LRVkoQkFDS1NQQUNFKTsKKyAgICAgICAgICBjYXNlIDB4MEY6IC8vIHJpZ2h0IHRodW1iCisgICAgICAgICAgICByZXR1cm4gQlJMX0NNRF9CTEsoUEFTU0RPVFMpOworICAgICAgICAgIGNhc2UgMHgzRjogLy8gYm90aCB0aHVtYnMKKyAgICAgICAgICAgIHJldHVybiBCUkxfQ01EX0tFWShFTlRFUik7CisKKyAgICAgICAgICBjYXNlIDBYMjk6IC8vIGtleSB1bmRlciBkb3QgNworICAgICAgICAgICAgcmV0dXJuIEJSTF9DTURfS0VZKEVTQ0FQRSk7CisgICAgICAgICAgY2FzZSAwWDJBOiAvLyBrZXkgdW5kZXIgZG90IDgKKyAgICAgICAgICAgIHJldHVybiBCUkxfQ01EX0tFWShUQUIpOworCisgICAgICAgICAgLy8gcmlnaHQgcmVhcjogb25lIGNvbHVtbiwgb25lIHJvdworICAgICAgICAgIGNhc2UgMFgxOTogLy8gZXh0cmEgMyAoNDBzIG9ubHkpCisgICAgICAgICAgICByZXR1cm4gQlJMX0NNRF9JTkZPOworCisgICAgICAgICAgLy8gcmlnaHQgbWlkZGxlOiBvbmUgY29sdW1uLCB0d28gcm93cworICAgICAgICAgIGNhc2UgMFgxQjogLy8gZXh0cmEgNCAoNDBzIG9ubHkpCisgICAgICAgICAgICByZXR1cm4gQlJMX0NNRF9QUkRJRkxOOworICAgICAgICAgIGNhc2UgMFgxQTogLy8gZXh0cmEgNSAoNDBzIG9ubHkpCisgICAgICAgICAgICByZXR1cm4gQlJMX0NNRF9OWERJRkxOOworCisgICAgICAgICAgLy8gcmlnaHQgZnJvbnQ6IG9uZSBjb2x1bW4sIGZvdXIgcm93cworICAgICAgICAgIGNhc2UgMFgyQjogLy8gc2xhc2ggKDQwcyBvbmx5KQorICAgICAgICAgICAgcmV0dXJuIEJSTF9DTURfRlJFRVpFOworICAgICAgICAgIGNhc2UgMFgyQzogLy8gYXN0ZXJpc2sgKDQwcyBvbmx5KQorICAgICAgICAgICAgcmV0dXJuIEJSTF9DTURfRElTUE1EOworICAgICAgICAgIGNhc2UgMFgyRDogLy8gbWludXMgKDQwcyBvbmx5KQorICAgICAgICAgICAgcmV0dXJuIEJSTF9DTURfQVRUUlZJUzsKKyAgICAgICAgICBjYXNlIDBYMkU6IC8vIHBsdXMgKDQwcyBvbmx5KQorICAgICAgICAgICAgcmV0dXJuIEJSTF9DTURfQ1NSVklTOworCisgICAgICAgICAgLy8gZmlyc3QgKHRvcCkgcm93IG9mIG51bWVyaWMgcGFkCisgICAgICAgICAgY2FzZSAwWDM3OiAvLyBzZXZlbiAoNDBzIG9ubHkpCisgICAgICAgICAgICByZXR1cm4gQlJMX0NNRF9LRVkoSE9NRSk7CisgICAgICAgICAgY2FzZSAwWDM4OiAvLyBlaWdodCAoNDBzIG9ubHkpCisgICAgICAgICAgICByZXR1cm4gQlJMX0NNRF9LRVkoQ1VSU09SX1VQKTsKKyAgICAgICAgICBjYXNlIDBYMzk6IC8vIG5pbmUgKDQwcyBvbmx5KQorICAgICAgICAgICAgcmV0dXJuIEJSTF9DTURfS0VZKFBBR0VfVVApOworCisgICAgICAgICAgLy8gc2Vjb25kIHJvdyBvZiBudW1lcmljIHBhZAorICAgICAgICAgIGNhc2UgMFgzNDogLy8gZm91ciAoNDBzIG9ubHkpCisgICAgICAgICAgICByZXR1cm4gQlJMX0NNRF9LRVkoQ1VSU09SX0xFRlQpOworICAgICAgICAgIGNhc2UgMFgzNTogLy8gZml2ZSAoNDBzIG9ubHkpCisgICAgICAgICAgICByZXR1cm4gQlJMX0NNRF9DU1JKTVBfVkVSVDsKKyAgICAgICAgICBjYXNlIDBYMzY6IC8vIHNpeCAoNDBzIG9ubHkpCisgICAgICAgICAgICByZXR1cm4gQlJMX0NNRF9LRVkoQ1VSU09SX1JJR0hUKTsKKworICAgICAgICAgIC8vIHRoaXJkIHJvdyBvZiBudW1lcmljIHBhZAorICAgICAgICAgIGNhc2UgMFgzMTogLy8gb25lICg0MHMgb25seSkKKyAgICAgICAgICAgIHJldHVybiBCUkxfQ01EX0tFWShFTkQpOworICAgICAgICAgIGNhc2UgMFgzMjogLy8gdHdvICg0MHMgb25seSkKKyAgICAgICAgICAgIHJldHVybiBCUkxfQ01EX0tFWShDVVJTT1JfRE9XTik7CisgICAgICAgICAgY2FzZSAwWDMzOiAvLyB0aHJlZSAoNDBzIG9ubHkpCisgICAgICAgICAgICByZXR1cm4gQlJMX0NNRF9LRVkoUEFHRV9ET1dOKTsKKworICAgICAgICAgIC8vIGZvdXJ0aCAoYm90dG9tKSByb3cgb2YgbnVtZXJpYyBwYWQKKyAgICAgICAgICBjYXNlIDBYMjg6IC8vIHZlcnIgbnVtICg0MHMgb25seSkKKyAgICAgICAgICAgIHJldHVybiBCUkxfQ01EX1NJWERPVFM7CisgICAgICAgICAgY2FzZSAwWDMwOiAvLyB6ZXJvICg0MHMgb25seSkKKyAgICAgICAgICAgIHJldHVybiBCUkxfQ01EX0tFWShJTlNFUlQpOworICAgICAgICAgIGNhc2UgMFgyRjogLy8gc3VwcCAoNDBzIG9ubHkpCisgICAgICAgICAgICByZXR1cm4gQlJMX0NNRF9LRVkoREVMRVRFKTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKworICAgICAgLyogV2hlbiBkYXRhIGlzIHdyaXR0ZW4gdG8gdGhlIGRpc3BsYXkgaXQgYWNrbm93bGVkZ2VzIHdpdGg6CisgICAgICAgKiAwWDAwIDBYMDQgMFh4eAorICAgICAgICogd2hlcmUgeHggaXMgdGhlIG51bWJlciBvZiBieXRlcyB3cml0dGVuLgorICAgICAgICovCisgICAgICBjYXNlIDQ6CisgICAgICAgIGNvbnRpbnVlOworICAgIH0KKworICAgIGxvZ1VuZXhwZWN0ZWRQYWNrZXQocGFja2V0LCBzaXplKTsKKyAgfQorCisgIHJldHVybiBFT0Y7Cit9CmRpZmYgLS1naXQgYS9Ecml2ZXJzL0JyYWlsbGUvVmlkZW9CcmFpbGxlL01ha2VmaWxlLmluIGIvRHJpdmVycy9CcmFpbGxlL1ZpZGVvQnJhaWxsZS9NYWtlZmlsZS5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MDIyODczCi0tLSAvZGV2L251bGwKKysrIGIvRHJpdmVycy9CcmFpbGxlL1ZpZGVvQnJhaWxsZS9NYWtlZmlsZS5pbgpAQCAtMCwwICsxLDI4IEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisjICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorIworIyBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisjCisjIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisjCisjIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyMgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorIyBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyMKKyMgV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworIworIyBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworRFJJVkVSX0NPREUgPSB2ZAorRFJJVkVSX05BTUUgPSBWaWRlb0JyYWlsbGUKK0RSSVZFUl9VU0FHRSA9IDQwCitEUklWRVJfVkVSU0lPTiA9IAorRFJJVkVSX0RFVkVMT1BFUlMgPSAKK2luY2x1ZGUgJChTUkNfVE9QKWJyYWlsbGUubWsKKworYnJhaWxsZS4kTzoKKwkkKENDKSAkKEJSTF9DRkxBR1MpIC1jICQoU1JDX0RJUikvYnJhaWxsZS5jCisJCmRpZmYgLS1naXQgYS9Ecml2ZXJzL0JyYWlsbGUvVmlkZW9CcmFpbGxlL1JFQURNRSBiL0RyaXZlcnMvQnJhaWxsZS9WaWRlb0JyYWlsbGUvUkVBRE1FCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFlOTUyMTUKLS0tIC9kZXYvbnVsbAorKysgYi9Ecml2ZXJzL0JyYWlsbGUvVmlkZW9CcmFpbGxlL1JFQURNRQpAQCAtMCwwICsxLDIzIEBACitJbnRyb2R1Y3Rpb24KKworVGhpcyBpcyB0aGUgZHJpdmVyIGZvciB0aGUgSXRhbGlhbiBWaWRlb2JyYWlsbGUsIHRoZSBicmFpbGxlIGRpc3BsYXkgZGlzdHJpYnV0ZWQgYnkgVGlmbG9zb2Z0LgorVGhpcyBkcml2ZXIgd29ya3MgT05MWSBvbiB0aGUgVkIgNDAgbW9kZWxzIGFuZCBkb2Vzbid0IHdvcmsgd2l0aCB0aGUgUFJPIDk2MDAgbW9kZWxzLgorSSBjYW4gd3JpdGUgYWxzbyBhIFBSTyA5NjAwIGV4dGVuc2lvbiBpZiBzb21lYm9keSBhc2tzIG1lLCBiZWNhdXNlIGl0IGNvbnNpc3RzIG9mIGEgc21hbGwgY2hhbmdlIHRvIHRoZSBjb2RlOyBJIGhhdmVuJ3QgaW1wbGVtZW50ZWQgaXQganVzdCBiZWNhdXNlIEkgY291bGRuJ3QgdGVzdCBpdC4KKworQWJvdXQgaW1wbGVtZW50YXRpb24KKworVGhpcyBkcml2ZXIgaXMgbm90IHBlcmZlY3QuIEkgZW5jb3VudGVyZWQgbWFueSBwcm9ibGVtcyBiYXNlZCBtYWlubHkgb24gdGltaW5nLCBhbmQgdGhlIHdyaXRlIGZ1bmN0aW9uIGhhcyB0byB3cml0ZSB0aGUgbGluZSB0byB0aGUgZGlzcGxheSB0d2ljZSwgZG9uJ3QgYXNrIG1lIHdoeTogaXQncyBvbmx5IHRoZSByZXN1bHQgb2YgdGVzdHMuCitUbyBpbXBsZW1lbnQgdGhlIGRyaXZlciwgSSBjb250YWN0ZWQgdGhlIGRlc2lnbmVyIGFuZCBhdXRob3Igb2YgdGhlIGRpc3BsYXkgdG8gaGF2ZSBzb21lIGRvY3VtZW50YXRpb24uCisKK0lmIHlvdSB3YW50IHRvIGNvbnRhY3QgbWUgZm9yIGFueSBraW5kIG9mIHByb2JsZW0gb3Igc3VnZ2VzdGlvbiwgbXkgZS1tYWlsIGFkZHJlc3MgaXMgY2hyaXN0aWFuX2NvbWFzY2hpQGxpYmVyby5pdAorQnV0LCBiZWZvcmUgeW91IGNvbnRhY3QgbWUgdGVsbGluZyBtZSB0aGF0IHRoZSBkcml2ZXIgZG9lc24ndCB3b3JrLCBjaGVjayB0aGF0OgorLSB5b3VyIFZpZGVvYnJhaWxsZSBpcyBub3QgUFJPIDk2MDAgKGlmIGl0IGlzIGFuZCB5b3UgbmVlZCB0aGUgZHJpdmVyLCBqdXN0IGFzayk7CistIGluIGJyYWlsbGUuaCBMUFRQT1JUIGlzIHNldCB0byB0aGUgY29ycmVjdCBhZGRyZXNzOiAweDM3OCBmb3IgTFBUMSwgMHgyNzggZm9yIExQVDIsLi4uCitJZiBhbGwgaXMgY29ycmVjdCwgdGhlbiB0cnkgY2hhbmdpbmcgaW4gYnJhaWxsZS5oIHRoZSBWQkRFTEFZLCBWQkNMT0NLIGFuZCBWQlJFRlJFU0hERUxBWSB2YWx1ZXM6IHRoZXNlIHZhbHVlcyBkZXBlbmQgb24gY29tcHV0ZXIgc3BlZWQsIHNvIHRoZXkgbmVlZCB0byBmaXQgeW91ciBjb21wdXRlci4gSSB0aGluayB0aGlzIGlzIG5vdCBhIGdvb2Qgd2F5IG9mIHRpbWluZywgYnV0IEkgd2FudGVkIHRvIHJlc3BlY3QgdGhlIG9yaWdpbmFsIGltcGxlbWVudGF0aW9uLCBiZWNhdXNlIHdoZW4gSSB1c2VkIG90aGVyIGtpbmRzIG9mIHRpbWluZyBJIGVuY291bnRlcmVkIHByb2JsZW1zLgorCitBYm91dCBjdXQgJiBwYXN0ZQorCitJIGhhdmUgdXBkYXRlZCB0aGUgZHJpdmVyIGxhdGVyIHRvIGltcGxlbWVudCBjdXQgJiBwYXN0ZSB0aGlzIHdheTogeW91IG1hcmsgdGhlIGJlZ2lubmluZyBvZiBhIGJsb2NrIGJ5IGtlZXBpbmcgb25lIG9mIHRoZSA0MCBzbWFsbCBidXR0b25zIHByZXNzZWQgYW5kIHByZXNzaW5nIHRoZSBFZGl0IGtleTsgeW91IG1hcmsgdGhlIGVuZCBvZiBhIGJsb2NrIGJ5IGtlZXBpbmcgYSBzbWFsbCBidXR0b24gcHJlc3NlZCBhbmQgcHJlc3NpbmcgTWVudS4KK1lvdSBoYXZlIHRvIGNob29zZSB0aGUgc21hbGwgYnV0dG9uIHRvIHByZXNzIGxpa2UgaW4gY3Vyc29yIHJvdXRpbmcuCitUaGVuLCB0byBwYXN0ZSB5b3UganVzdCBoYXZlIHRvIHByZXNzIHRoZSBBdHRyaWJ1dGVzIGtleSB0b2dldGhlciB3aXRoIHRoZSBNZW51IGtleS4KK0ZvciB0aGlzIGltcGxlbWVudGF0aW9uIEkgaGFkIHRvIGludmVudCBrZXkgYmluZGluZ3MgYmVjYXVzZSBjdXQgYW5kIHBhc3RlIHdhcyBub3QgYSBmZWF0dXJlIG9mIHRoZSBvcmlnaW5hbCBET1MgZHJpdmVyLiBBbnl3YXksIGl0J3MgZWFzeSB0byByZW1lbWJlciB0aGVtLgpkaWZmIC0tZ2l0IGEvRHJpdmVycy9CcmFpbGxlL1ZpZGVvQnJhaWxsZS9SRUFETUUuaXQgYi9Ecml2ZXJzL0JyYWlsbGUvVmlkZW9CcmFpbGxlL1JFQURNRS5pdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kY2ZkNmEzCi0tLSAvZGV2L251bGwKKysrIGIvRHJpdmVycy9CcmFpbGxlL1ZpZGVvQnJhaWxsZS9SRUFETUUuaXQKQEAgLTAsMCArMSwyMyBAQAorSW50cm9kdXppb25lCisKK1F1ZXN0byDoIGlsIGRyaXZlciBwZXIgaWwgZGlzcGxheSBicmFpbGxlIFZpZGVvYnJhaWxsZSwgZGlzdHJpYnVpdG8gZGFsbGEgVGlmbG9zb2Z0LgorUXVlc3RvIGRyaXZlciBmdW56aW9uYSBTT0xPIGNvbiBpbCBtb2RlbGxvIFZCIDQwIGUgbm9uIGZ1bnppb25hIGNvbiBsJ2FnZ2lvcm5hbWVudG8gUFJPIDk2MDAuCitQb3RyZWkgZXZlbnR1YWxtZW50ZSBhZ2dpdW5nZXJlIGFuY2hlIGlsIHN1cHBvcnRvIHBlciBpbCBtb2RlbGxvIFBSTyA5NjAwIHNlIG1pIGZvc3NlIHJpY2hpZXN0bywgcG9pY2jpIHNpIHRyYXR0YSBzb2xvIGRpIHF1YWxjaGUgYnJldmUgbW9kaWZpY2EgYWwgY29kaWNlOyBub24gaG8gaW1wbGVtZW50YXRvIGFuY29yYSBpbCBzdXBwb3J0byBwZXIgcXVlc3RvIG1vZGVsbG8gc2VtcGxpY2VtZW50ZSBwZXJjaOkgbm9uIGF2cmVpIGF2dXRvIG1vZG8gZGkgdGVzdGFybG8uCisKK0ltcGxlbWVudGF6aW9uZQorCitRdWVzdG8gZHJpdmVyIG5vbiDoIHBlcmZldHRvLiBIbyByaXNjb250cmF0byB2YXJpIHByb2JsZW1pIHJlbGF0aXZpIHNvcHJhdHR1dHRvIGFsbGEgdGVtcG9yaXp6YXppb25lLCBlIGhvIGRvdnV0byBpbXBsZW1lbnRhcmUgdW5hIGZ1bnppb25lIGRpIHNjcml0dHVyYSBjaGUgc2NyaXZlIG9nbmkgcmlnYSBkdWUgdm9sdGUgc3VsIGRpc3BsYXkgYnJhaWxsZSwgbm9uIGNoaWVkZXRlcm1pIHBlcmNo6Tog6CBzb2xvIHF1ZXN0aW9uZSBkaSB0ZXN0LgorUGVyIGltcGxlbWVudGFyZSBpbCBkcml2ZXIsIGhvIGNvbnRhdHRhdG8gZGlyZXR0YW1lbnRlIGNoaSBoYSBwcm9nZXR0YXRvIHF1ZXN0byBkaXNwbGF5IChBY3F1aXN0YXBhY2UpIHBlciBvdHRlbmVyZSBkZWxsYSBkb2N1bWVudGF6aW9uZS4KKworU2Ugdm9sZXRlIGNvbnRhdHRhcm1pIHBlciBxdWFsdW5xdWUgcHJvYmxlbWEgbyBzdWdnZXJpbWVudG8sIGlsIG1pbyBpbmRpcml6em8gZS1tYWlsIOggY2hyaXN0aWFuX2NvbWFzY2hpQGxpYmVyby5pdAorUGVy8iwgcHJpbWEgZGkgY29udGF0dGFybWkgZSBzY3JpdmVyZSBjaGUgaWwgZHJpdmVyIG5vbiBmdW56aW9uYSwgY29udHJvbGxhdGUgY2hlOgorLSBsYSB2b3N0cmEgVmlkZW9icmFpbGxlIG5vbiDoIFBSTyA5NjAwIChzZSBsbyDoIGUgdm9sZXRlIGlsIGRyaXZlciwgY2hpZWRldGUpOworLSBuZWwgZmlsZSBicmFpbGxlLmggTFBUUE9SVCDoIGltcG9zdGF0byBjb3JyZXR0YW1lbnRlOiAweDM3OCBwZXIgTFBUMSwgMHgyNzggcGVyIExQVDIsLi4uCitTZSB0dXR0byDoIGdpdXN0bywgcHJvdmF0ZSBhIG1vZGlmaWNhcmUgaW4gYnJhaWxsZS5oIGkgdmFsb3JpIFZCREVMQVksIFZCQ0xPQ0sgZSBWQlJFRlJFU0hERUxBWTogcXVlc3RpIHZhbG9yaSBkaXBlbmRvbm8gZGFsbGEgdmVsb2NpdOAgZGVsIGNvbXB1dGVyLCBkZXZvbm8gcXVpbmRpIGVzc2VyZSBhZGF0dGF0aSBhbCB2b3N0cm8gcHJvY2Vzc29yZS4gTm9uIHBlbnNvIGNoZSBxdWVzdG8gc2lhIHVuIGJ1b24gbW9kbyBkaSBpbXBvc3RhcmUgaSB0ZW1waSBkaSBhdHRlc2EsIG1hIGhvIHZvbHV0byByaXNwZXR0YXJlIGwnaW1wbGVtZW50YXppb25lIG9yaWdpbmFsZSwgcGVyY2jpIHF1YW5kbyBobyB1c2F0byBhbHRyaSB0aXBpIGRpIHRlbXBvcml6emF6aW9uZSBobyByaXNjb250cmF0byBwcm9ibGVtaS4KKworSW1wbGVtZW50YXppb25lIGRlbGxhIGZ1bnppb25lIHRhZ2xpYS9pbmNvbGxhCisKK0hvIGFnZ2lvcm5hdG8gaW4gc2VndWl0byBpbCBkcml2ZXIgcGVyIGltcGxlbWVudGFyZSBsYSBmdW56aW9uZSB0YWdsaWEvaW5jb2xsYSBpbiBxdWVzdG8gbW9kbzogc2kgc2VsZXppb25hIGwnaW5pemlvIGRpIHVuIGJsb2NjbyB0ZW5lbmRvIHByZW11dG8gdW5vIGRlaSA0MCB0YXN0aW5pIGRlbGwnYWdnYW5jaW8gY3Vyc29yZSBlIHByZW1lbmRvIEVkaXQ7IHNpIGNvbnRyYXNzZWduYSBsYSBmaW5lIGRpIHVuIGJsb2NjbyB0ZW5lbmRvIHByZW11dG8gdW5vIGRlaSA0MCB0YXN0aW5pIGUgcHJlbWVuZG8gTWVudS4KK0lsIHRhc3Rpbm8gZGEgcHJlbWVyZSB2YSBzZWxlemlvbmF0byBjb21lIG5lbGxhIHByb2NlZHVyYSBkaSBhZ2dhbmNpbyBjdXJzb3JlLgorUXVpbmRpLCBwZXIgaW5jb2xsYXJlIGlsIHRlc3RvLCBiYXN0YSBwcmVtZXJlIGNvbnRlbXBvcmFuZWFtZW50ZSBpIHRhc3RpIEF0dHIgZSBNZW51LgorUGVyIHF1ZXN0YSBpbXBsZW1lbnRhemlvbmUgaG8gZG92dXRvIGludmVudGFyZSBsZSBjb21iaW5hemlvbmkgZGVpIHRhc3RpIHBlcmNo6SBsYSBmdW56aW9uZSBjb3BpYS9pbmNvbGxhIG5vbiBlc2lzdGV2YSBuZWwgZHJpdmVyIERPUyBvcmlnaW5hbGUuCmRpZmYgLS1naXQgYS9Ecml2ZXJzL0JyYWlsbGUvVmlkZW9CcmFpbGxlL2JyYWlsbGUuYyBiL0RyaXZlcnMvQnJhaWxsZS9WaWRlb0JyYWlsbGUvYnJhaWxsZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVkMzBiMmIKLS0tIC9kZXYvbnVsbAorKysgYi9Ecml2ZXJzL0JyYWlsbGUvVmlkZW9CcmFpbGxlL2JyYWlsbGUuYwpAQCAtMCwwICsxLDIwNiBAQAorLyoKKyAqIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisgKiAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisgKgorICogQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKKy8qIFRoYW5rcyB0byB0aGUgYXV0aG9ycyBvZiB0aGUgVmFyaW8tSFQgZHJpdmVyOiB0aGUgaW1wbGVtZW50YXRpb24gb2YgdGhpcworICogZHJpdmVyIGlzIHNpbWlsYXIgdG8gdGhlIFZhcmlvLUhUIG9uZS4KKyAqLworCisjaW5jbHVkZSAicHJvbG9ndWUuaCIKKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKyNpbmNsdWRlICJsb2cuaCIKKyNpbmNsdWRlICJ0aW1pbmcuaCIKKyNpbmNsdWRlICJwb3J0cy5oIgorCisjaW5jbHVkZSAiYnJsX2RyaXZlci5oIgorI2luY2x1ZGUgImJyYWlsbGUuaCIKKworc3RhdGljIHVuc2lnbmVkIGNoYXIgbGFzdGJ1ZmZbNDBdOworCisjZGVmaW5lIExQVFNUQVRVU1BPUlQgTFBUUE9SVCsxCisjZGVmaW5lIExQVENPTlRST0xQT1JUIExQVFBPUlQrMgorICAKK3N0YXRpYyB2b2lkIHZiY2xvY2twYXVzZSgpIHsKKyAgaW50IGk7CisgIGZvciAoaSA9IDA7IGk8PVZCQ0xPQ0sqMTAwOyBpKyspIDsKK30KKworc3RhdGljIHZvaWQgdmJkaXNwbGF5KHVuc2lnbmVkIGNoYXIgKnZiQnVmKSB7CisgIGludCBpLGo7CisgIGNoYXIgYjsKKyAgZm9yIChqID0gMDsgajxWQlNJWkU7IGorKykgeworICAgIGZvciAoaSA9IDc7IGk+PTA7IGktLSkgeworICAgICAgYiA9ICh2YkJ1ZltqXSA8PCBpKSAmIFZCTFBUREFUQTsKKyAgICAgIHdyaXRlUG9ydDEoTFBUUE9SVCwgYik7CisgICAgICB2YmNsb2NrcGF1c2UoKTsKKyAgICAgIHdyaXRlUG9ydDEoTFBUUE9SVCwgYiB8IFZCTFBUQ0xPQ0spOworICAgICAgdmJjbG9ja3BhdXNlKCk7CisgICAgfQorICB9CisgIHdyaXRlUG9ydDEoTFBUUE9SVCwgYiB8IFZCTFBUQ0xPQ0spOworICBmb3IgKGkgPSAwOyBpPD03OyBpKyspIHZiY2xvY2twYXVzZSgpOworICB3cml0ZVBvcnQxKExQVFBPUlQsIDApOworICBmb3IgKGkgPSAwOyBpPD03OyBpKyspIHZiY2xvY2twYXVzZSgpOworICB3cml0ZVBvcnQxKExQVFBPUlQsIFZCTFBUU1RST0JFKTsKKyAgZm9yIChpID0gMDsgaTw9NzsgaSsrKSB2YmNsb2NrcGF1c2UoKTsKKyAgd3JpdGVQb3J0MShMUFRQT1JULCAwKTsKKyAgdmJjbG9ja3BhdXNlKCk7Cit9CisKK3N0YXRpYyBpbnQgdmJpbml0KCkgeworICBpZiAoZW5hYmxlUG9ydHMoTE9HX0VSUiwgTFBUUE9SVCwgMykpIHsKKyAgICBpZiAoZW5hYmxlUG9ydHMoTE9HX0VSUiwgMFg4MCwgMSkpIHsKKyAgICAgIG1ha2VPdXRwdXRUYWJsZShkb3RzVGFibGVfSVNPMTE1NDhfMSk7CisKKyAgICAgIHsKKyAgICAgICAgdW5zaWduZWQgY2hhciBhbGxkb3RzWzQwXTsKKyAgICAgICAgbWVtc2V0KGFsbGRvdHMsIDBYRkYsIDQwKTsKKyAgICAgICAgdmJkaXNwbGF5KGFsbGRvdHMpOworICAgICAgfQorCisgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgZGlzYWJsZVBvcnRzKExQVFBPUlQsIDMpOworICB9CisKKyAgbG9nTWVzc2FnZShMT0dfRVJSLCAiRXJyb3I6IG11c3QgYmUgc3VwZXJ1c2VyIik7CisgIHJldHVybiAtMTsKK30KKwordm9pZCB2YnNsZWVwKGxvbmcgeCkgeworICBpbnQgaTsKKyAgZm9yIChpID0gMDsgaTx4OyBpKyspIHdyaXRlUG9ydDEoMHg4MCwgMSk7Cit9CisKK3N0YXRpYyB2b2lkIEJyQnV0dG9ucyh2YkJ1dHRvbnMgKmRlc3QpIHsKKyAgY2hhciBpOworICBkZXN0LT5iaWdidXR0b25zID0gMDsKKyAgZGVzdC0+a2V5cHJlc3NlZCA9IDA7CisgIGZvciAoaSA9IDQ3OyBpPj00MDsgaS0tKSB7CisgICAgd3JpdGVQb3J0MShMUFRQT1JULCBpKTsKKyAgICB2YnNsZWVwKFZCREVMQVkpOworICAgIGlmICgocmVhZFBvcnQxKExQVFNUQVRVU1BPUlQpICYgMHgwOCk9PTApIHsKKyAgICAgIGRlc3QtPmJpZ2J1dHRvbnMgfD0gKDEgPDwgKGktNDApKTsKKyAgICAgIGRlc3QtPmtleXByZXNzZWQgPSAxOworICAgIH0KKyAgfQorICBkZXN0LT5yb3V0aW5na2V5ID0gMDsKKyAgZm9yIChpID0gNDA7IGk+MDsgaS0tKSB7CisgICAgd3JpdGVQb3J0MShMUFRQT1JULCBpLTEpOworICAgIHZic2xlZXAoVkJERUxBWSk7CisgICAgaWYgKChyZWFkUG9ydDEoTFBUU1RBVFVTUE9SVCkgJiAweDA4KT09MCkgeworICAgICAgZGVzdC0+cm91dGluZ2tleSA9IGk7CisgICAgICBkZXN0LT5rZXlwcmVzc2VkID0gMTsKKyAgICAgIGJyZWFrOworICAgIH0KKyAgfQorfQorCitzdGF0aWMgaW50IGJybF9jb25zdHJ1Y3QoQnJhaWxsZURpc3BsYXkgKmJybCwgY2hhciAqKnBhcmFtZXRlcnMsIGNvbnN0IGNoYXIgKmRldikgeworICAvKglTZWVtcyB0byBzaWduYWwgZW4gZXJyb3IgKi8gCisgIGlmICghdmJpbml0KCkpIHsKKyAgICAvKiBUaGVlc2UgYXJlIHByZXR0eSBzdGF0aWMgKi8gCisgICAgYnJsLT50ZXh0Q29sdW1ucz00MDsKKyAgICBicmwtPnRleHRSb3dzPTE7CisgICAgcmV0dXJuIDE7CisgIH0KKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGJybF9kZXN0cnVjdChCcmFpbGxlRGlzcGxheSAqYnJsKSB7Cit9CisKK3N0YXRpYyBpbnQgYnJsX3dyaXRlV2luZG93KEJyYWlsbGVEaXNwbGF5ICpicmwsIGNvbnN0IHdjaGFyX3QgKnRleHQpIHsKKyAgY29uc3Qgc2l6ZV90IGNlbGxzID0gNDA7CisgIHVuc2lnbmVkIGNoYXIgb3V0YnVmZltjZWxsc107CisKKyAgLyogT25seSBkaXNwbGF5IHNvbWV0aGluZyBpZiB0aGUgZGF0YSBhY3R1YWxseSBkaWZmZXJzLCB0aGlzIAorICAqICBjb3VsZCBtb3N0IGxpa2VseSBjYXVzZSBzb21lIHByb2JsZW1zIGluIHJlZHJhdyBzaXR1YXRpb25zIGV0YworICAqICBidXQgc2luY2UgdGhlIGRhcm4gdGhpbmcgd2FudHMgdG8gcmVkcmF3IHF1aXRlIGZyZXF1ZW50bHkgb3RoZXJ3aXNlIAorICAqICB0aGlzIHN0aWxsIG1ha2VzIGEgYmV0dGVyIGxvb2tpbiByZXN1bHQgKi8gCisgIGlmIChjZWxsc0hhdmVDaGFuZ2VkKGxhc3RidWZmLCBicmwtPmJ1ZmZlciwgY2VsbHMsIE5VTEwsIE5VTEwsIE5VTEwpKSB7CisgICAgdHJhbnNsYXRlT3V0cHV0Q2VsbHMob3V0YnVmZiwgYnJsLT5idWZmZXIsIGNlbGxzKTsKKyAgICB2YmRpc3BsYXkob3V0YnVmZik7CisgICAgdmJkaXNwbGF5KG91dGJ1ZmYpOworICAgIGJybC0+d3JpdGVEZWxheSArPSBWQlJFRlJFU0hERUxBWTsKKyAgfQorICByZXR1cm4gMTsKK30KKworc3RhdGljIGludCBicmxfcmVhZENvbW1hbmQoQnJhaWxsZURpc3BsYXkgKmJybCwgS2V5VGFibGVDb21tYW5kQ29udGV4dCBjb250ZXh0KSB7CisgIHZiQnV0dG9ucyBidXR0b25zOworICBCckJ1dHRvbnMoJmJ1dHRvbnMpOworICBpZiAoIWJ1dHRvbnMua2V5cHJlc3NlZCkgeworICAgIHJldHVybiBFT0Y7CisgIH0gZWxzZSB7CisgICAgdmJCdXR0b25zIGI7CisgICAgZG8geworICAgICAgQnJCdXR0b25zKCZiKTsKKyAgICAgIGJ1dHRvbnMuYmlnYnV0dG9ucyB8PSBiLmJpZ2J1dHRvbnM7CisKKyAgICAgIHsKKyAgICAgICAgY29uc3QgVGltZVZhbHVlIGR1cmF0aW9uID0geworICAgICAgICAgIC5zZWNvbmRzID0gMCwKKyAgICAgICAgICAubmFub3NlY29uZHMgPSAxICogTlNFQ1NfUEVSX1VTRUMKKyAgICAgICAgfTsKKworICAgICAgICBhY2N1cmF0ZURlbGF5KCZkdXJhdGlvbik7CisgICAgICB9CisgICAgfSB3aGlsZSAoYi5rZXlwcmVzc2VkKTsKKyAgICAvKiBUZXN0IHdoaWNoIGJ1dHRvbnMgaGFzIGJlZW4gcHJlc3NlZCAqLworICAgIGlmIChidXR0b25zLmJpZ2J1dHRvbnM9PUtFWV9VUCkgcmV0dXJuIEJSTF9DTURfTE5VUDsKKyAgICBlbHNlIGlmIChidXR0b25zLmJpZ2J1dHRvbnM9PUtFWV9MRUZUKSByZXR1cm4gQlJMX0NNRF9GV0lOTFQ7CisgICAgZWxzZSBpZiAoYnV0dG9ucy5iaWdidXR0b25zPT1LRVlfUklHSFQpIHJldHVybiBCUkxfQ01EX0ZXSU5SVDsKKyAgICBlbHNlIGlmIChidXR0b25zLmJpZ2J1dHRvbnM9PUtFWV9ET1dOKSByZXR1cm4gQlJMX0NNRF9MTkROOworICAgIGVsc2UgaWYgKGJ1dHRvbnMuYmlnYnV0dG9ucz09S0VZX0FUVFJJQlVURVMpIHJldHVybiBCUkxfQ01EX0FUVFJWSVM7CisgICAgZWxzZSBpZiAoYnV0dG9ucy5iaWdidXR0b25zPT1LRVlfQ1VSU09SKSByZXR1cm4gQlJMX0NNRF9DU1JWSVM7CisgICAgZWxzZSBpZiAoYnV0dG9ucy5iaWdidXR0b25zPT1LRVlfSE9NRSkgeworICAgICAgLyogSWYgYSByb3V0aW5nIGtleSBoYXMgYmVlbiBwcmVzc2VkLCB0aGVuIG1hcmsgdGhlIGJlZ2lubmluZyBvZiBhIGJsb2NrOworICAgICAgICAgZ28gdG8gY3Vyc29yIHBvc2l0aW9uIG90aGVyd2lzZSAqLworICAgICAgcmV0dXJuIChidXR0b25zLnJvdXRpbmdrZXk+MCkgPyBCUkxfQ01EX0JMSyhDTElQX05FVykrYnV0dG9ucy5yb3V0aW5na2V5LTEgOiBCUkxfQ01EX0hPTUU7CisgICAgfQorICAgIGVsc2UgaWYgKGJ1dHRvbnMuYmlnYnV0dG9ucz09S0VZX01FTlUpIHsKKyAgICAgIC8qIElmIGEgcm91dGluZyBrZXkgaGFzIGJlZW4gcHJlc3NlZCwgdGhlbiBtYXJrIHRoZSBlbmQgb2YgYSBibG9jazsKKyAgICAgICAgIGdvIHRvIHByZWZlcmVuY2VzIG1lbnUgb3RoZXJ3aXNlICovCisgICAgICByZXR1cm4gKGJ1dHRvbnMucm91dGluZ2tleT4wKSA/IEJSTF9DTURfQkxLKENPUFlfUkVDVCkrYnV0dG9ucy5yb3V0aW5na2V5LTEgOiBCUkxfQ01EX1BSRUZNRU5VOworICAgIH0KKyAgICBlbHNlIGlmIChidXR0b25zLmJpZ2J1dHRvbnM9PShLRVlfQVRUUklCVVRFUyB8IEtFWV9NRU5VKSkgcmV0dXJuIEJSTF9DTURfUEFTVEU7CisgICAgZWxzZSBpZiAoYnV0dG9ucy5iaWdidXR0b25zPT0oS0VZX0NVUlNPUiB8IEtFWV9MRUZUKSkgcmV0dXJuIEJSTF9DTURfQ0hSTFQ7CisgICAgZWxzZSBpZiAoYnV0dG9ucy5iaWdidXR0b25zPT0oS0VZX0hPTUUgfCBLRVlfUklHSFQpKSByZXR1cm4gQlJMX0NNRF9DSFJSVDsKKyAgICBlbHNlIGlmIChidXR0b25zLmJpZ2J1dHRvbnM9PShLRVlfVVAgfCBLRVlfTEVGVCkpIHJldHVybiBCUkxfQ01EX1RPUF9MRUZUOworICAgIGVsc2UgaWYgKGJ1dHRvbnMuYmlnYnV0dG9ucz09KEtFWV9SSUdIVCB8IEtFWV9ET1dOKSkgcmV0dXJuIEJSTF9DTURfQk9UX0xFRlQ7CisgICAgZWxzZSBpZiAoYnV0dG9ucy5iaWdidXR0b25zPT0oS0VZX0FUVFJJQlVURVMgfCBLRVlfRE9XTikpIHJldHVybiBCUkxfQ01EX0hFTFA7CisgICAgZWxzZSBpZiAoYnV0dG9ucy5iaWdidXR0b25zPT0oS0VZX01FTlUgfCBLRVlfQ1VSU09SKSkgcmV0dXJuIEJSTF9DTURfSU5GTzsKKyAgICBlbHNlIGlmIChidXR0b25zLmJpZ2J1dHRvbnM9PTApIHsKKyAgICAgIC8qIEEgY3Vyc29yIHJvdXRpbmcga2V5IGhhcyBiZWVuIHByZXNzZWQgKi8KKyAgICAgIGlmIChidXR0b25zLnJvdXRpbmdrZXk+MCkgeworICAgICAgICBjb25zdCBUaW1lVmFsdWUgZHVyYXRpb24gPSB7CisgICAgICAgICAgLnNlY29uZHMgPSAwLAorICAgICAgICAgIC5uYW5vc2Vjb25kcyA9IDUgKiBOU0VDU19QRVJfVVNFQworICAgICAgICB9OworCisgICAgICAgIGFjY3VyYXRlRGVsYXkoJmR1cmF0aW9uKTsKKyAgICAgICAgcmV0dXJuIEJSTF9DTURfQkxLKFJPVVRFKStidXR0b25zLnJvdXRpbmdrZXktMTsKKyAgICAgIH0KKyAgICAgIGVsc2UgcmV0dXJuIEVPRjsKKyAgICB9IGVsc2UKKyAgICAgIHJldHVybiBFT0Y7CisgIH0KK30KZGlmZiAtLWdpdCBhL0RyaXZlcnMvQnJhaWxsZS9WaWRlb0JyYWlsbGUvYnJhaWxsZS5oIGIvRHJpdmVycy9CcmFpbGxlL1ZpZGVvQnJhaWxsZS9icmFpbGxlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGFhZjI1MwotLS0gL2Rldi9udWxsCisrKyBiL0RyaXZlcnMvQnJhaWxsZS9WaWRlb0JyYWlsbGUvYnJhaWxsZS5oCkBAIC0wLDAgKzEsNDQgQEAKKy8qCisgKiBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorICogICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorICoKKyAqIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorICoKKyAqIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyAqLworCisjZGVmaW5lIFZCU0laRSA0MAorI2RlZmluZSBMUFRQT1JUIDB4Mjc4CisjZGVmaW5lIFZCREVMQVkgMworI2RlZmluZSBWQkNMT0NLIDUKKyNkZWZpbmUgVkJSRUZSRVNIREVMQVkgNDAgLy8gTWluLiB0aW1lIHRvIHdhaXQgYmVmb3JlIHVwZGF0aW5nIHRoZSBkaXNwbGF5CisKKy8vIERvbid0IHRvdWNoIHRoZSBmb2xsb3dpbmcgZGVmaW5pdGlvbnMKKyNkZWZpbmUgVkJMUFRTVFJPQkUgMHg0MAorI2RlZmluZSBWQkxQVENMT0NLIDB4MjAKKyNkZWZpbmUgVkJMUFREQVRBIDB4ODAKKworI2RlZmluZSBLRVlfVVAgMHgxCisjZGVmaW5lIEtFWV9MRUZUIDB4MgorI2RlZmluZSBLRVlfUklHSFQgMHg0CisjZGVmaW5lIEtFWV9ET1dOIDB4OAorI2RlZmluZSBLRVlfQVRUUklCVVRFUyAweDEwCisjZGVmaW5lIEtFWV9DVVJTT1IgMHgyMAorI2RlZmluZSBLRVlfSE9NRSAweDQwCisjZGVmaW5lIEtFWV9NRU5VIDB4ODAKKwordHlwZWRlZiBzdHJ1Y3QgeworICB1bnNpZ25lZCBjaGFyIGJpZ2J1dHRvbnM7CisgIGNoYXIgcm91dGluZ2tleSA6IDc7CisgIGNoYXIga2V5cHJlc3NlZCA6IDE7Cit9IHZiQnV0dG9uczsKKwpkaWZmIC0tZ2l0IGEvRHJpdmVycy9CcmFpbGxlL1ZpcnR1YWwvTWFrZWZpbGUuaW4gYi9Ecml2ZXJzL0JyYWlsbGUvVmlydHVhbC9NYWtlZmlsZS5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MjhmZDhjCi0tLSAvZGV2L251bGwKKysrIGIvRHJpdmVycy9CcmFpbGxlL1ZpcnR1YWwvTWFrZWZpbGUuaW4KQEAgLTAsMCArMSwyOCBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorIyAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyMKKyMgQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorIworIyBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorIworIyBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisjIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyMgbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisjCisjIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK0RSSVZFUl9DT0RFID0gdnIKK0RSSVZFUl9OQU1FID0gVmlydHVhbAorRFJJVkVSX1VTQUdFID0gcmVtb3RlIGNsaWVudC9zZXJ2ZXIgdmlhIFRDUC9JUCBvciBsb2NhbCBzb2NrZXQKK0RSSVZFUl9WRVJTSU9OID0gMC4xCitEUklWRVJfREVWRUxPUEVSUyA9IE1hcmlvIExhbmcgPG1sYW5nQGRlbHlzaWQub3JnPgoraW5jbHVkZSAkKFNSQ19UT1ApYnJhaWxsZS5taworCiticmFpbGxlLiRPOgorCSQoQ0MpICQoQlJMX0NGTEFHUykgLWMgJChTUkNfRElSKS9icmFpbGxlLmMKKwpkaWZmIC0tZ2l0IGEvRHJpdmVycy9CcmFpbGxlL1ZpcnR1YWwvUkVBRE1FIGIvRHJpdmVycy9CcmFpbGxlL1ZpcnR1YWwvUkVBRE1FCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIwYTUyY2EKLS0tIC9kZXYvbnVsbAorKysgYi9Ecml2ZXJzL0JyYWlsbGUvVmlydHVhbC9SRUFETUUKQEAgLTAsMCArMSwxNzAgQEAKK1RoZSBWaXJ0dWFsIEJyYWlsbGUgRGlzcGxheSBEcml2ZXIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhpcyBpcyBhIHZpcnR1YWwgYnJhaWxsZSBkaXNwbGF5IGRyaXZlciBmb3IgQlJMVFRZLiAgSXQgdXNlcyBhIHNpbXBsZQordGV4dC1iYXNlZCBwcm90b2NvbCBvdmVyIGEgc29ja2V0IHRvIHRyYW5zbWl0IGluZm9ybWF0aW9uIHRvLCBhbmQgdG8gcmVjZWl2ZQoraW5mb3JtYXRpb24gZnJvbSwgdGhlIHZpcnR1YWwgYnJhaWxsZSBkaXNwbGF5IGFwcGxpY2F0aW9uIChmcm9tIG5vdyBvbiwgInRoZQorZGlzcGxheSIpLiBUaGUgaW50ZW50aW9uIG9mIHRoaXMgZHJpdmVyIGlzIHR3by1mb2xkOgorICogR2l2ZSBpbnRlcmVzdGVkIGRldmVsb3BlcnMgdGhlIGFiaWxpdHkgdG8gdGVzdCBCUkxUVFkgd2l0aG91dCByZXF1aXJpbmcKKyAgIGFjY2VzcyB0byBhIHJlYWwgYnJhaWxsZSBkaXNwbGF5LgorICogRW5hYmxlIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBhIHZpc3VhbCBicmFpbGxlIGRpc3BsYXkgYmFzZWQgb24gdGhpcyBkcml2ZXIKKyAgIHdoaWNoIGFsbG93cyBhIHNpZ2h0ZWQgcGVyc29uIHRvIHNlZSwgYW5kIGV2ZW4gdG8gZXhwZXJpZW5jZSwgaG93IGEgYmxpbmQKKyAgIHBlcnNvbiB1c2VzIGEgYnJhaWxsZSBkaXNwbGF5IHRvIHdvcmsgd2l0aCBhIGNvbXB1dGVyLgorCitUaGlzIGRyaXZlciBzdXBwb3J0cyB0aGUgZm9sbG93aW5nIGRldmljZXM6CisgICBjbGllbnQ6W2FkZHJlc3NdCisgICAgICBUaGUgZHJpdmVyIHBlcmlvZGljYWxseSB0cmllcyB0byBjb25uZWN0IHRvIHRoZSBkaXNwbGF5IGF0IHRoZSBzcGVjaWZpZWQgCisgICAgICBuZXR3b3JrIGFkZHJlc3MuCisgICBzZXJ2ZXI6W2FkZHJlc3NdCisgICAgICBUaGUgZHJpdmVyIHdhaXRzIG9uIHRoZSBzcGVjaWZpZWQgbmV0d29yayBhZGRyZXNzIGZvciBhIGNvbm5lY3Rpb24gCisgICAgICByZXF1ZXN0IGZyb20gdGhlIGRpc3BsYXkuCisKK0lmIHRoZSBuZXR3b3JrIGFkZHJlc3MgaXNuJ3Qgc3BlY2lmaWVkIHRoZW4gdGhlIGRyaXZlcidzIGRlZmF1bHQgVENQL0lQIHBvcnQgb24KK3RoZSBsb2NhbCBob3N0IGlzIHVzZWQuIFRoZSBhZGRyZXNzIG1heSBiZToKKyAgIE9uIFVuaXggc3lzdGVtczogL3BhdGgvdG8vdW5peC1zb2NrZXQtZmlsZQorICAgICAgSWYgdGhlIGFkZHJlc3Mgc3RhcnRzIHdpdGggYSBzbGFzaCAoLykgdGhlbiBpdCdzIGludGVycHJldGVkIGFzIHRoZSBwYXRoIAorICAgICAgdG8gYSBVbml4IHNvY2tldCBmaWxlLiBJZiB0aGUgZHJpdmVyIGlzIHRoZSBjbGllbnQgdGhlbiB0aGUgc29ja2V0IGZpbGUgCisgICAgICBtdXN0IGFscmVhZHkgZXhpc3QuIElmIHRoZSBkcml2ZXIgaXMgdGhlIHNlcnZlciB0aGVuIHRoZSBzb2NrZXQgZmlsZSBpcyAKKyAgICAgIGNyZWF0ZWQgYnkgdGhlIGRyaXZlciBhbmQgbXVzdCBub3QgYWxyZWFkeSBleGlzdC4KKyAgIE9uIFdpbmRvd3MgTlQvMjAwMC9YUC8yMDAzIHN5c3RlbXM6IFxcLlxwaXBlXHBpcGVuYW1lCisgICAgICBJZiB0aGUgYWRkcmVzcyBzdGFydHMgd2l0aCBhIGJhY2tzbGFzaCAoXCkgdGhlbiBpdCdzIGludGVycHJldGVkIGFzIHRoZQorICAgICAgcGF0aCB0byBhIG5hbWVkIHBpcGUuIElmIHRoZSBkcml2ZXIgaXMgdGhlIGNsaWVudCwgdGhlbiB0aGUgbmFtZWQgcGlwZQorICAgICAgbXVzdCBhbHJlYWR5IGV4aXN0LiBJZiB0aGUgZHJpdmVyIGlzIHRoZSBzZXJ2ZXIgdGhlbiB0aGUgbmFtZWQgcGlwZSBpcworICAgICAgY3JlYXRlZCBieSB0aGUgZHJpdmVyIGFuZCBtdXN0IG5vdCBhbHJlYWR5IGV4aXN0LiBCZXdhcmUgb2YgdGhlIHNoZWxsJ3MKKyAgICAgIGludGVycHJldGF0aW9uIG9mIGJhY2tzbGFzaGVzLgorICAgT24gYWxsIHN5c3RlbXM6IFtob3N0XVs6W3BvcnRdXQorICAgICAgQSBUQ1AvSVAgYWRkcmVzcy4gQm90aCB0aGUgaG9zdCBhbmQgcG9ydCBjb21wb25lbnRzIG9mIHRoZSBhZGRyZXNzIGFyZSAKKyAgICAgIG9wdGlvbmFsLiBUaGUgZGVsaW1pdGluZyBjb2xvbiAoOikgaXMgb25seSByZXF1aXJlZCBpZiB0aGUgcG9ydCBpcyBiZWluZyAKKyAgICAgIHNwZWNpZmllZC4gVGhlIGhvc3QgbWF5IGJlIGEgbmFtZSwgYW4gYWxpYXMsIG9yIGFuIElQVjQgYWRkcmVzcyAoaW4gCisgICAgICBkb3R0ZWQtZGVjaW1hbCBmb3JtKTsgaWYgaXQncyBvbWl0dGVkIHRoZW4gdGhlIGxvY2FsIGhvc3QgaXMgYXNzdW1lZC4gVGhlIAorICAgICAgcG9ydCBtYXkgYmUgYSBzZXJ2aWNlIG5hbWUgb3IgYSBwb3J0IG51bWJlcjsgaWYgaXQncyBvbWl0dGVkIHRoZW4gMzU3NTIgCisgICAgICBpcyBhc3N1bWVkLgorCisKK1RoZSBQcm90b2NvbAorLS0tLS0tLS0tLS0tCisKK0FmdGVyIHRoZSBjb25uZWN0aW9uIGJldHdlZW4gdGhlIGRyaXZlciBhbmQgdGhlIGRpc3BsYXkgaXMgY29tcGxldGUsIGRhdGEgaXMKK2V4Y2hhbmdlZCBiZXR3ZWVuIHRoZW0gdmlhIGNvbW1hbmQgbGluZXMuIFRoZSBkcml2ZXIgZmlyc3Qgd2FpdHMgZm9yIGEgImNlbGxzIgorY29tbWFuZCBpbiBvcmRlciB0byBkZXRlcm1pbmUgdGhlIGRpbWVuc2lvbnMgb2YgdGhlIGJyYWlsbGUgd2luZG93LiBBZnRlciB0aGlzCitoYXMgYmVlbiB0YWtlbiBjYXJlIG9mLCBjb21tYW5kcyBmcmVlbHkgZmxvdyBpbiBib3RoIGRpcmVjdGlvbnMgd2l0aG91dCBhbnkKK3Jlc3RyaWN0aW9ucy4gVGhlIGJyYWlsbGUgd2luZG93IGRpbWVuc2lvbnMgYXJlIGFwcHJvcHJpYXRlbHkgcmVjb25maWd1cmVkCit3aGVuZXZlciBhbm90aGVyICJjZWxscyIgY29tbWFuZCBpcyByZWNlaXZlZC4gVGhlICJxdWl0IiBjb21tYW5kLCB3aGljaCBpcyBhbHNvCityZWNvZ25pemVkIGR1cmluZyB0aGUgaW5pdGlhbCB3YWl0IGZvciB0aGUgZmlyc3QgImNlbGxzIiBjb21tYW5kLCBpbnN0cnVjdHMgdGhlCitkcml2ZXIgdG8gY2xvc2UgaXRzIGVuZCBvZiB0aGUgY29ubmVjdGlvbiBhbmQgdG8gcmVzdGFydC4KKworVGhlIGNvbW1hbmQgbGluZXMgYXJlIGluIHBsYWluIHRleHQuIEVhY2ggaXMgdGVybWluYXRlZCBieSBhIGxpbmUtZmVlZCBbMFgwQV0KKyh1c3VhbGx5IGtub3duIG9uIFVuaXggc3lzdGVtcyBhcyBhIG5ldy1saW5lKS4gQSBjYXJyaWFnZS1yZXR1cm4gWzBYMERdIG1heQorb3B0aW9uYWxseSBwcmVjZWRlIHRoZSBsaW5lLWZlZWQuIENvbW1hbmQgbGluZXMgc2VudCB0byB0aGUgZGlzcGxheSBjb250YWluIGEKK2NhcnJpYWdlLXJldHVybiBpZiwgYW5kIG9ubHkgaWYsIHRoZSBtb3N0IHJlY2VudCBjb21tYW5kIGxpbmUgcmVjZWl2ZWQgZnJvbSB0aGUKK2Rpc3BsYXkgY29udGFpbmVkIG9uZS4KKworQ29tbWFuZCBsaW5lcyBhcmUgY29tcG9zZWQgb2Ygc3BhY2UtZGVsaW1pdGVkIHdvcmRzLCBudW1iZXJzLCBhbmQgc3RyaW5ncy4KK1NwYWNlIGNvbnNpc3RzIG9mIG9uZSBvciBtb3JlIGJsYW5rcyBhbmQvb3IgdGFicy4gQ2FzZSBpcyBvbmx5IHNpZ25pZmljYW50Cit3aXRoaW4gYSBzdHJpbmcuCisKK0EgIm51bWJlciIgbWF5IGJlIHNwZWNpZmllZCBhcyBkZWNpbWFsLCBvY3RhbCwgb3IgaGV4YWRlY2ltYWwuIFRoZSB1c3VhbCBDCitzeW50YXggaXMgcmVjb2duaXplZC4gSWYgdGhlIGZpcnN0IGRpZ2l0IGlzIDAgdGhlbiB0aGUgbnVtYmVyIGlzIG9jdGFsLiBJZiB0aGUKK2ZpcnN0IGRpZ2l0IGlzbid0IDAgdGhlbiB0aGUgbnVtYmVyIGlzIGRlY2ltYWwuIElmIHRoZSBudW1iZXIgYmVnaW5zIHdpdGgKK2VpdGhlciAwWCBvciAweCB0aGVuIHRoZSBudW1iZXIgaXMgaGV4YWRlY2ltYWwuIFRoZSBmb2xsb3dpbmcgdGhyZWUgbnVtYmVycyBhcmUKK3RoZSBzYW1lOgorICAgMTUgICBEZWNpbWFsCisgICAwMTcgIE9jdGFsCisgICAwWEYgIEhleGFkZWNpbWFsCisKK0EgInN0cmluZyIgaXMgYSBzZXF1ZW5jZSBvZiBjaGFyYWN0ZXJzIChpbmNsdWRpbmcgc3BhY2UgY2hhcmFjdGVycykgZW5jbG9zZWQKK3dpdGhpbiBkb3VibGUgcXVvdGVzICgiKS4gU3BlY2lhbCBjaGFyYWN0ZXJzIHdpdGhpbiBhIHN0cmluZyBhcmUgcHJlZml4ZWQgd2l0aAorYSBiYWNrc2xhc2ggKFwpLiBUaGUgZm9sbG93aW5nIHNwZWNpYWwgY2hhcmFjdGVycyBhcmUgc3VwcG9ydGVkOgorICAgXFwgICBBIGxpdGVyYWwgYmFja3NsYXNoLgorICAgXCIgICBBIGxpdGVyYWwgZG91YmxlIHF1b3RlLgorICAgXFh4eCBBbnkgY2hhcmFjdGVyIHNwZWNpZmllZCB2aWEgaXRzIGhleGFkZWNpbWFsIHZhbHVlLgorRm9yIGV4YW1wbGU6ICJBIFwiIChkb3VibGUgcXVvdGUpIG11c3QgYmUgZXNjYXBlZCB3aXRoIGEgXFwgKGJhY2tzbGFzaCkuIgorCitBICJkb3RzIiBpcyBhIHN0cmluZyB3aGljaCBkZXNjcmliZXMgYSBicmFpbGxlIGNoYXJhY3RlciBzZXF1ZW5jZS4gU3BhY2UKKyhibGFua3MgYW5kL29yIHRhYnMpIHdpdGhpbiB0aGUgc3RyaW5nIGFyZSBpZ25vcmVkLiBUaGUgYnJhaWxsZSBjaGFyYWN0ZXJzIGFyZQorc2VwYXJhdGVkIGZyb20gb25lIGFub3RoZXIgYnkgYSB2ZXJ0aWNhbCBiYXIgKHwpLiBFYWNoIGJyYWlsbGUgY2hhcmFjdGVyCitjb25zaXN0cyBvZiB0aGUgbnVtYmVycyAoMSB0aHJvdWdoIDgpIG9mIHRoZSBkb3RzIHdoaWNoIHJlcHJlc2VudCBpdC4gRm9yCitleGFtcGxlLCB0aGUgZmlyc3QgdGhyZWUgbGV0dGVycyBvZiB0aGUgRW5nbGlzaCBhbHBoYWJldCB3b3VsZCBiZSAiMXwxMnwxNCIuCisKKworQ29tbWFuZHMgUmVjb2duaXplZCBieSB0aGUgRHJpdmVyCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQ2VsbHMgY29sdW1ucyBbcm93c10KKyAgIFRoZSBudW1iZXIgb2YgY29sdW1ucyBhbmQgcm93cyBpbiB0aGUgdGV4dCBwb3J0aW9uIG9mIHRoZSBkaXNwbGF5LiBJZiB0aGUKKyAgIG51bWJlciBvZiByb3dzIGlzbid0IHN1cHBsaWVkIHRoZW4gMSBpcyBhc3N1bWVkLiBUaGlzIGlzIHRoZSBmaXJzdCBjb21tYW5kCisgICB3aGljaCB0aGUgZGlzcGxheSBtdXN0IHNlbmQgdG8gdGhlIGRyaXZlci4gSXQgbWF5IGJlIHNlbnQgYXQgYW55IG90aGVyIHRpbWUKKyAgIGFzIHdlbGwgdG8gbm90aWZ5IHRoZSBkcml2ZXIgdGhhdCB0aGUgZGltZW5zaW9ucyBvZiB0aGUgdGV4dCBwb3J0aW9uIG9mIHRoZQorICAgZGlzcGxheSBoYXZlIGNoYW5nZWQuCisKK1F1aXQKKyAgIFVwb24gcmVjZWlwdCBvZiB0aGlzIGNvbW1hbmQsIHRoZSBkcml2ZXIgY2xvc2VzIGl0cyBlbmQgb2YgdGhlIGNvbm5lY3Rpb24KKyAgIGFuZCB0aGVuIHJlc3RhcnRzLiBJdCdzIHJlY29nbml6ZWQgYXQgYW55IHRpbWUsIGluY2x1ZGluZyBkdXJpbmcgdGhlIGluaXRpYWwKKyAgIHdhaXQgZm9yIHRoZSBmaXJzdCAiY2VsbHMiIGNvbW1hbmQgZnJvbSB0aGUgZGlzcGxheS4KKworPGJhc2ljLWNvbW1hbmQ+IFtzdGF0ZV0KKyAgIEEgYmFzaWMgY29tbWFuZCBmb3IgdGhlIEJSTFRUWSBjb3JlLiBJdCBtYXkgYmUgYW55IG9mIHRoZSBCUkxfQ01EXyBjb25zdGFudHMKKyAgICh3aXRob3V0IHRoZSBCUkxfQ01EXyBwcmVmaXgpIGRlZmluZWQgd2l0aGluICJicmxkZWZzLmgiLCBlLmcuIExuRG4uIFRoZQorICAgb3B0aW9uYWwgPHN0YXRlPiBvcGVyYW5kICh3aGljaCBtYXkgYmUgZWl0aGVyIG9uIG9yIG9mZiksIHdoZW4gYXBwbGllZCB0byBhbgorICAgYXR0cmlidXRlIHRvZ2dsaW5nIGNvbW1hbmQsIGZvcmNlcyB0aGF0IGF0dHJpYnV0ZSB0byB0aGUgc3BlY2lmaWVkIHN0YXRlLgorCis8Y2VsbC1jb21tYW5kPiBudW1iZXIKKyAgIEEgY2VsbCBjb21tYW5kIGZvciB0aGUgQlJMVFRZIGNvcmUuIEl0IG1heSBiZSBhbnkgb2YgdGhlIEJSTF9CTEtfIGNvbnN0YW50cworICAgKHdpdGhvdXQgdGhlIEJSTF9CTEtfIHByZWZpeCkgZGVmaW5lZCB3aXRoaW4gImJybGRlZnMuaCIsIGUuZy4gUm91dGUuIFRoZSBjZWxsCisgICBudW1iZXIsIHN0YXJ0aW5nIGF0IDEgZm9yIHRoZSBsZWZ0bW9zdCBjZWxsLCBtdXN0IGJlIHN1cHBsaWVkLiBJZiB0aGUKKyAgIGRpc3BsYXkgaGFzIG1vcmUgdGhhbiBvbmUgcm93IHRoZW4gdGhlIGNlbGxzIGZvciB0aGUgdG9wIHJvdyBhcmUgY291bnRlZAorICAgZmlyc3QsIGUuZy4gaWYgdGhlIGRpc3BsYXkgaGFzIDMyIGNvbHVtbnMgYW5kIDIgcm93cyB0aGVuIDM1IHJlZmVycyB0byB0aGUKKyAgIHRoaXJkIGNlbGwgb24gdGhlIHNlY29uZCByb3cuCisKKzxrZXktY29tbWFuZD4gW251bWJlcl0KKyAgIEEga2V5IGNvbW1hbmQgZm9yIHRoZSBCUkxUVFkgY29yZS4gSXQgbWF5IGJlIGFueSBvZiB0aGUgVlBLXyBjb25zdGFudHMKKyAgICh3aXRob3V0IHRoZSBWUEtfIHByZWZpeCkgZGVmaW5lZCB3aXRoaW4gImJybGRlZnMuaCIsIGUuZy4gUmV0dXJuLiBUaGUKKyAgIEZ1bmN0aW9uIGNvbW1hbmQgcmVxdWlyZXMgdGhhdCB0aGUgZnVuY3Rpb24ga2V5IG51bWJlciwgc3RhcnRpbmcgYXQgMSwgYmUKKyAgIHN1cHBsaWVkLiBBbGwgdGhlIG90aGVyIGNvbW1hbmRzIGluIHRoaXMgc2V0IGRvbid0IGFjY2VwdCBhIG51bWJlciBvcGVyYW5kLgorCisKK0NvbW1hbmRzIFNlbnQgdG8gdGhlIERpc3BsYXkKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQnJhaWxsZSBkb3RzCisgICBDZWxscyB0byBiZSBwcmVzZW50ZWQgb24gdGhlIHRleHQgcG9ydGlvbiBvZiB0aGUgZGlzcGxheS4gRXhjZXNzIGNlbGxzIGluCisgICB0aGUgZGF0YSBzaG91bGQgYmUgaWdub3JlZC4gRXhjZXNzIGNlbGxzIG9uIHRoZSBkaXNwbGF5IHNob3VsZCBiZSBibGFuay4KKworVmlzdWFsIHN0cmluZworICAgQ2hhcmFjdGVycyB0byBiZSBwcmVzZW50ZWQgb24gdGhlIHZpc3VhbCBwb3J0aW9uIG9mIHRoZSBkaXNwbGF5LiBFeGNlc3MKKyAgIGNoYXJhY3RlcnMgaW4gdGhlIGRhdGEgc2hvdWxkIGJlIGlnbm9yZWQuIEV4Y2VzcyBjaGFyYWN0ZXJzIG9uIHRoZSBkaXNwbGF5CisgICBzaG91bGQgYmUgYmxhbmsuCisKK1N0YXR1cyBkb3RzCisgICBDZWxscyB0byBiZSBwcmVzZW50ZWQgb24gdGhlIHN0YXR1cyBwb3J0aW9uIG9mIHRoZSBkaXNwbGF5LiBFeGNlc3MgY2VsbHMgaW4KKyAgIHRoZSBkYXRhIHNob3VsZCBiZSBpZ25vcmVkLiBFeGNlc3MgY2VsbHMgb24gdGhlIGRpc3BsYXkgc2hvdWxkIGJlIGJsYW5rLgorCis8YXR0cmlidXRlPiA8c2V0dGluZz4KKyAgIFRoZSBjdXJyZW50IHNldHRpbmcgb2YgYW55IG9mIHNldmVyYWwgYXR0cmlidXRlcyB3aXRoaW4gdGhlIEJSTFRUWSBjb3JlLgorICAgVGhlc2UgYXJlIG9ubHkgc2VudCBpZiAiU3RhdHVzIFN0eWxlIiBpcyBzZXQgdG8gIkdlbmVyaWMiLiA8YXR0cmlidXRlPiBpcworICAgdGhlIG5hbWUgb2YgYW55IG9mIHRoZSBTVEFUXyBjb25zdGFudHMgKHdpdGhvdXQgdGhlIFNUQVRfIHByZWZpeCkgZGVmaW5lZAorICAgd2l0aGluICJicmxkZWZzLmgiLCBlLmcuIEJybFJvdy4gPHNldHRpbmc+IGlzIGEgbnVtYmVyLiBSb3dzIGFuZCBjb2x1bW5zCisgICBzdGFydCBhdCAxLiBGbGFncyB1c2UgMCBmb3IgIm9mZiIgYW5kIDEgZm9yICJvbiIuCisKKworU2VjdXJpdHkgSW1wbGljYXRpb25zCistLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworUGxlYXNlIGJlIGF3YXJlIHRoYXQgdGhpcyBkcml2ZXIsIHdoZW4gdXNlZCBjYXJlbGVzc2x5LCBtaWdodCBvcGVuIHNldmVyZQorc2VjdXJpdHkgaG9sZXMuIENvbm5lY3Rpb25zIHRvIG9yIGZyb20gdGhpcyBkcml2ZXIgYXJlIGluIG5vIHdheSBhdXRoZW50aWNhdGVkCitzbyB5b3UgeW91cnNlbGYgbmVlZCB0byB0YWtlIGNhcmUgb2YgcHJvdGVjdGluZyBhY2Nlc3MgdG8gYSBCUkxUVFkgaW5zdGFuY2UKK3doaWNoIHVzZXMgaXQuIEluIHBhcnRpY3VsYXIsIGJ5IHNlbmRpbmcgb3V0IGluZm9ybWF0aW9uIGFib3V0IHRoZSBjdXJyZW50bHkKK2FjdGl2ZSB2aXJ0dWFsIGNvbnNvbGUsIHRoaXMgZHJpdmVyIG1pZ2h0IGV4cG9zZSB2YWx1YWJsZSBpbmZvcm1hdGlvbiBhYm91dAoreW91ciBzeXN0ZW0gdG8gYSBwb3RlbnRpYWwgYXR0YWNrZXIuIFRoZSBhdHRhY2tlciBtaWdodCBhbHNvIHVzZSB0aGUKKzxrZXktY29tbWFuZD4gZmFtaWx5IG9mIGNvbW1hbmRzIHRvIGRpcmVjdGx5IG1hbmlwdWxhdGUsIHBvc3NpYmx5IGV2ZW4KK2lucHV0dGluZyBkYXRhIHRvLCB5b3VyIGN1cnJlbnQsIG9yIGV2ZW4gYW5vdGhlciwgdmlydHVhbCBjb25zb2xlLiBJbiBlZmZlY3QsCit0aGlzIGRyaXZlciBjb3VsZCBiZSB1c2VkIHRvIGNvbXBsZXRlbHkgcmVtb3RlLWNvbnRyb2wgeW91ciBzeXN0ZW0uCisKK1BsZWFzZSBiZSBhd2FyZSBvZiB0aGVzZSBpbXBsaWNhdGlvbnMgd2hlbiBleHBlcmltZW50aW5nIHdpdGggdGhpcyBkcml2ZXIuIElmCit5b3UncmUgdXNpbmcgVENQL0lQLCBiZSBzdXJlIHRvIHByb3RlY3QgYWNjZXNzIHRvIHRoZSB1c2VkIGhvc3QgYW5kIHBvcnQgdmlhCitmYWNpbGl0aWVzIHN1Y2ggYXMgZmlyZXdhbGxzLiBZb3Ugc2hvdWxkIHRha2Ugc3BlY2lhbCBwcmVjYXV0aW9ucyBvbiBtdWx0aS11c2VyCitzeXN0ZW1zIHdoZXJlIHVudHJ1c3RlZCBwZW9wbGUgY291bGQgdXNlIHVucHJvdGVjdGVkIGFjY2VzcyB0byB0aGlzIGRyaXZlciB0bworZ2FpbiByb290IGFjY2VzcyB0byB0aGUgbWFjaGluZS4KKworCisgLS0gTWFyaW8gTGFuZyA8bWxhbmdAZGVseXNpZC5vcmc+CmRpZmYgLS1naXQgYS9Ecml2ZXJzL0JyYWlsbGUvVmlydHVhbC9icmFpbGxlLmMgYi9Ecml2ZXJzL0JyYWlsbGUvVmlydHVhbC9icmFpbGxlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTQ1MWZjOAotLS0gL2Rldi9udWxsCisrKyBiL0RyaXZlcnMvQnJhaWxsZS9WaXJ0dWFsL2JyYWlsbGUuYwpAQCAtMCwwICsxLDEyNjYgQEAKKy8qCisgKiBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorICogICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorICoKKyAqIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorICoKKyAqIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyAqLworCisjaW5jbHVkZSAicHJvbG9ndWUuaCIKKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8c3RyaW5ncy5oPgorI2luY2x1ZGUgPGN0eXBlLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxmY250bC5oPgorCisjaWZkZWYgX19NSU5HVzMyX18KKyNpbmNsdWRlIDx3czJ0Y3BpcC5oPgorI2luY2x1ZGUgInN5c3RlbV93aW5kb3dzLmgiCisjZWxzZSAvKiBfX01JTkdXMzJfXyAqLworI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyNpbmNsdWRlIDxzeXMvdW4uaD4KKyNpbmNsdWRlIDxuZXRpbmV0L2luLmg+CisjaW5jbHVkZSA8YXJwYS9pbmV0Lmg+CisjaW5jbHVkZSA8bmV0ZGIuaD4KKyNlbmRpZiAvKiBfX01JTkdXMzJfXyAqLworI2luY2x1ZGUgImdldF9zZWxlY3QuaCIKKworI2lmICFkZWZpbmVkKEFGX0xPQ0FMKSAmJiBkZWZpbmVkKEFGX1VOSVgpCisjZGVmaW5lIEFGX0xPQ0FMIEFGX1VOSVgKKyNlbmRpZiAvKiAhZGVmaW5lZChBRl9MT0NBTCkgJiYgZGVmaW5lZChBRl9VTklYKSAqLworIAorI2lmICFkZWZpbmVkKFBGX0xPQ0FMKSAmJiBkZWZpbmVkKFBGX1VOSVgpCisjZGVmaW5lIFBGX0xPQ0FMIFBGX1VOSVgKKyNlbmRpZiAvKiAhZGVmaW5lZChQRl9MT0NBTCkgJiYgZGVmaW5lZChQRl9VTklYKSAqLworIAorI2lmZGVmIFdJTkRPV1MKKyN1bmRlZiBBRl9MT0NBTAorI2VuZGlmIC8qIFdJTkRPV1MgKi8KKworI2lmZGVmIF9fTUlOR1czMl9fCisjZGVmaW5lIGNsb3NlKGZkKSBDbG9zZUhhbmRsZSgoSEFORExFKShmZCkpCisjZGVmaW5lIExvZ1NvY2tldEVycm9yKG1zZykgbG9nV2luZG93c1NvY2tldEVycm9yKG1zZykKKyNlbHNlIC8qIF9fTUlOR1czMl9fICovCisjZGVmaW5lIExvZ1NvY2tldEVycm9yKG1zZykgbG9nU3lzdGVtRXJyb3IobXNnKQorI2VuZGlmIC8qIF9fTUlOR1czMl9fICovCisKKyNpbmNsdWRlICJsb2cuaCIKKyNpbmNsdWRlICJpb19taXNjLmgiCisjaW5jbHVkZSAicGFyc2UuaCIKKyNpbmNsdWRlICJhc3luY193YWl0LmgiCisjaW5jbHVkZSAiY2hhcnNldC5oIgorI2luY2x1ZGUgImNtZC5oIgorCisjZGVmaW5lIEJSTF9TVEFUVVNfRklFTERTIHNmR2VuZXJpYworI2RlZmluZSBCUkxfSEFWRV9TVEFUVVNfQ0VMTFMKKyNpbmNsdWRlICJicmxfZHJpdmVyLmgiCisjaW5jbHVkZSAiYnJhaWxsZS5oIgorCitzdGF0aWMgaW50IGZpbGVEZXNjcmlwdG9yID0gLTE7CisKKyNkZWZpbmUgSU5QVVRfU0laRSAwWDIwMAorc3RhdGljIGNoYXIgaW5wdXRCdWZmZXJbSU5QVVRfU0laRV07CitzdGF0aWMgc2l6ZV90IGlucHV0TGVuZ3RoOworc3RhdGljIHNpemVfdCBpbnB1dFN0YXJ0Oworc3RhdGljIGludCBpbnB1dEVuZDsKK3N0YXRpYyBpbnQgaW5wdXRDYXJyaWFnZVJldHVybjsKK3N0YXRpYyBjb25zdCBjaGFyICppbnB1dERlbGltaXRlcnMgPSAiICI7CisKKyNkZWZpbmUgT1VUUFVUX1NJWkUgMFgyMDAKK3N0YXRpYyBjaGFyIG91dHB1dEJ1ZmZlcltPVVRQVVRfU0laRV07CitzdGF0aWMgc2l6ZV90IG91dHB1dExlbmd0aDsKKwordHlwZWRlZiBzdHJ1Y3QgeworICBjb25zdCBDb21tYW5kRW50cnkgKmVudHJ5OworICB1bnNpZ25lZCBpbnQgY291bnQ7Cit9IENvbW1hbmREZXNjcmlwdG9yOworc3RhdGljIENvbW1hbmREZXNjcmlwdG9yICpjb21tYW5kRGVzY3JpcHRvcnMgPSBOVUxMOworc3RhdGljIGNvbnN0IHNpemVfdCBjb21tYW5kU2l6ZSA9IHNpemVvZigqY29tbWFuZERlc2NyaXB0b3JzKTsKK3N0YXRpYyBzaXplX3QgY29tbWFuZENvdW50OworCitzdGF0aWMgaW50IGJyYWlsbGVDb2x1bW5zOworc3RhdGljIGludCBicmFpbGxlUm93czsKK3N0YXRpYyBpbnQgYnJhaWxsZUNvdW50Oworc3RhdGljIHVuc2lnbmVkIGNoYXIgKmJyYWlsbGVDZWxscyA9IE5VTEw7CitzdGF0aWMgd2NoYXJfdCAqdGV4dENoYXJhY3RlcnMgPSBOVUxMOworCitzdGF0aWMgaW50IHN0YXR1c0NvbHVtbnM7CitzdGF0aWMgaW50IHN0YXR1c1Jvd3M7CitzdGF0aWMgaW50IHN0YXR1c0NvdW50Oworc3RhdGljIHVuc2lnbmVkIGNoYXIgKnN0YXR1c0NlbGxzID0gTlVMTDsKK3N0YXRpYyB1bnNpZ25lZCBjaGFyIGdlbmVyaWNDZWxsc1tHU0NfQ09VTlRdOworCit0eXBlZGVmIHN0cnVjdCB7CisjaWZkZWYgQUZfTE9DQUwKKyAgaW50ICgqZ2V0TG9jYWxDb25uZWN0aW9uKSAoY29uc3Qgc3RydWN0IHNvY2thZGRyX3VuICphZGRyZXNzKTsKKyNlbmRpZiAvKiBBRl9MT0NBTCAqLworCisjaWZkZWYgX19NSU5HVzMyX18KKyAgaW50ICgqZ2V0TmFtZWRQaXBlQ29ubmVjdGlvbikgKGNvbnN0IGNoYXIgKnBhdGgpOworI2VuZGlmIC8qIF9fTUlOR1czMl9fICovCisKKyAgaW50ICgqZ2V0SW5ldENvbm5lY3Rpb24pIChjb25zdCBzdHJ1Y3Qgc29ja2FkZHJfaW4gKmFkZHJlc3MpOworfSBNb2RlRW50cnk7CitzdGF0aWMgY29uc3QgTW9kZUVudHJ5ICptb2RlOworCit0eXBlZGVmIHN0cnVjdCB7CisgIGludCAoKnJlYWQpIChpbnQgZGVzY3JpcHRvciwgdm9pZCAqYnVmZmVyLCBpbnQgc2l6ZSk7Cit9IE9wZXJhdGlvbnNFbnRyeTsKK3N0YXRpYyBjb25zdCBPcGVyYXRpb25zRW50cnkgKm9wZXJhdGlvbnM7CisKK3N0YXRpYyBpbnQKK3JlYWROZXR3b3JrU29ja2V0IChpbnQgZGVzY3JpcHRvciwgdm9pZCAqYnVmZmVyLCBpbnQgc2l6ZSkgeworICBpZiAoYXdhaXRTb2NrZXRJbnB1dChkZXNjcmlwdG9yLCAwKSkgeworICAgIGludCBjb3VudCA9IHJlY3YoZGVzY3JpcHRvciwgYnVmZmVyLCBzaXplLCAwKTsKKyAgICBpZiAoY291bnQgIT0gLTEpIHJldHVybiBjb3VudDsKKyAgICBMb2dTb2NrZXRFcnJvcigicmVjdiIpOworICB9CisKKyAgcmV0dXJuIC0xOworfQorCitzdGF0aWMgY29uc3QgT3BlcmF0aW9uc0VudHJ5IHNvY2tldE9wZXJhdGlvbnNFbnRyeSA9IHsKKyAgcmVhZE5ldHdvcmtTb2NrZXQKK307CisKK3N0YXRpYyBjaGFyICoKK2Zvcm1hdFNvY2tldEFkZHJlc3MgKGNvbnN0IHN0cnVjdCBzb2NrYWRkciAqYWRkcmVzcykgeworICBjaGFyICpzdHJpbmc7CisKKyAgc3dpdGNoIChhZGRyZXNzLT5zYV9mYW1pbHkpIHsKKyNpZmRlZiBBRl9MT0NBTAorICAgIGNhc2UgQUZfTE9DQUw6IHsKKyAgICAgIGNvbnN0IHN0cnVjdCBzb2NrYWRkcl91biAqbG9jYWxBZGRyZXNzID0gKGNvbnN0IHN0cnVjdCBzb2NrYWRkcl91biAqKWFkZHJlc3M7CisKKyAgICAgIHN0cmluZyA9IHN0cmR1cChsb2NhbEFkZHJlc3MtPnN1bl9wYXRoKTsKKyAgICAgIGJyZWFrOworICAgIH0KKyNlbmRpZiAvKiBBRl9MT0NBTCAqLworCisgICAgY2FzZSBBRl9JTkVUOiB7CisgICAgICBjb25zdCBzdHJ1Y3Qgc29ja2FkZHJfaW4gKmluZXRBZGRyZXNzID0gKGNvbnN0IHN0cnVjdCBzb2NrYWRkcl9pbiAqKWFkZHJlc3M7CisgICAgICBjb25zdCBjaGFyICpob3N0ID0gaW5ldF9udG9hKGluZXRBZGRyZXNzLT5zaW5fYWRkcik7CisgICAgICB1bnNpZ25lZCBzaG9ydCBwb3J0ID0gbnRvaHMoaW5ldEFkZHJlc3MtPnNpbl9wb3J0KTsKKyAgICAgIGNoYXIgYnVmZmVyW3N0cmxlbihob3N0KSArIDddOworCisgICAgICBzbnByaW50ZihidWZmZXIsIHNpemVvZihidWZmZXIpLCAiJXM6JXUiLCBob3N0LCBwb3J0KTsKKyAgICAgIHN0cmluZyA9IHN0cmR1cChidWZmZXIpOworICAgICAgYnJlYWs7CisgICAgfQorCisgICAgZGVmYXVsdDoKKyAgICAgIHN0cmluZyA9IHN0cmR1cCgiIik7CisgICAgICBicmVhazsKKyAgfQorCisgIGlmICghc3RyaW5nKSBsb2dNYWxsb2NFcnJvcigpOworICByZXR1cm4gc3RyaW5nOworfQorCitzdGF0aWMgaW50CithY2NlcHRTb2NrZXRDb25uZWN0aW9uICgKKyAgaW50ICgqZ2V0U29ja2V0KSAodm9pZCksCisgIGludCAoKnByZXBhcmVRdWV1ZSkgKGludCBzb2NrZXQpLAorICB2b2lkICgqdW5iaW5kQWRkcmVzcykgKGNvbnN0IHN0cnVjdCBzb2NrYWRkciAqYWRkcmVzcyksCisgIGNvbnN0IHN0cnVjdCBzb2NrYWRkciAqbG9jYWxBZGRyZXNzLCBzb2NrbGVuX3QgbG9jYWxTaXplLAorICBzdHJ1Y3Qgc29ja2FkZHIgKnJlbW90ZUFkZHJlc3MsIHNvY2tsZW5fdCAqcmVtb3RlU2l6ZQorKSB7CisgIGludCBzZXJ2ZXJTb2NrZXQgPSAtMTsKKyAgaW50IHF1ZXVlU29ja2V0OworCisgIGlmICgocXVldWVTb2NrZXQgPSBnZXRTb2NrZXQoKSkgIT0gLTEpIHsKKyAgICBpZiAoIXByZXBhcmVRdWV1ZSB8fCBwcmVwYXJlUXVldWUocXVldWVTb2NrZXQpKSB7CisgICAgICBpZiAoYmluZChxdWV1ZVNvY2tldCwgbG9jYWxBZGRyZXNzLCBsb2NhbFNpemUpICE9IC0xKSB7CisgICAgICAgIGlmIChsaXN0ZW4ocXVldWVTb2NrZXQsIDEpICE9IC0xKSB7CisgICAgICAgICAgaW50IGF0dGVtcHRzID0gMDsKKworICAgICAgICAgIHsKKyAgICAgICAgICAgIGNoYXIgKmFkZHJlc3MgPSBmb3JtYXRTb2NrZXRBZGRyZXNzKGxvY2FsQWRkcmVzcyk7CisKKyAgICAgICAgICAgIGlmIChhZGRyZXNzKSB7CisgICAgICAgICAgICAgIGxvZ01lc3NhZ2UoTE9HX05PVElDRSwgImxpc3RlbmluZyBvbjogJXMiLCBhZGRyZXNzKTsKKyAgICAgICAgICAgICAgZnJlZShhZGRyZXNzKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9CisKKyAgICAgICAgICB3aGlsZSAoMSkgeworICAgICAgICAgICAgZmRfc2V0IHJlYWRNYXNrOworICAgICAgICAgICAgc3RydWN0IHRpbWV2YWwgdGltZW91dDsKKworICAgICAgICAgICAgRkRfWkVSTygmcmVhZE1hc2spOworICAgICAgICAgICAgRkRfU0VUKHF1ZXVlU29ja2V0LCAmcmVhZE1hc2spOworCisgICAgICAgICAgICBtZW1zZXQoJnRpbWVvdXQsIDAsIHNpemVvZih0aW1lb3V0KSk7CisgICAgICAgICAgICB0aW1lb3V0LnR2X3NlYyA9IDEwOworCisgICAgICAgICAgICArK2F0dGVtcHRzOworICAgICAgICAgICAgc3dpdGNoIChzZWxlY3QocXVldWVTb2NrZXQrMSwgJnJlYWRNYXNrLCBOVUxMLCBOVUxMLCAmdGltZW91dCkpIHsKKyAgICAgICAgICAgICAgY2FzZSAtMToKKyAgICAgICAgICAgICAgICBpZiAoZXJybm8gPT0gRUlOVFIpIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIExvZ1NvY2tldEVycm9yKCJzZWxlY3QiKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICBjYXNlIDA6CisgICAgICAgICAgICAgICAgbG9nTWVzc2FnZShMT0dfREVCVUcsICJubyBjb25uZWN0aW9uIHlldCwgc3RpbGwgd2FpdGluZyAoJWQpLiIsIGF0dGVtcHRzKTsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAgICAgICBkZWZhdWx0OiB7CisgICAgICAgICAgICAgICAgaWYgKCFGRF9JU1NFVChxdWV1ZVNvY2tldCwgJnJlYWRNYXNrKSkgY29udGludWU7CisKKyAgICAgICAgICAgICAgICBpZiAoKHNlcnZlclNvY2tldCA9IGFjY2VwdChxdWV1ZVNvY2tldCwgcmVtb3RlQWRkcmVzcywgcmVtb3RlU2l6ZSkpICE9IC0xKSB7CisgICAgICAgICAgICAgICAgICBjaGFyICphZGRyZXNzID0gZm9ybWF0U29ja2V0QWRkcmVzcyhyZW1vdGVBZGRyZXNzKTsKKworICAgICAgICAgICAgICAgICAgaWYgKGFkZHJlc3MpIHsKKyAgICAgICAgICAgICAgICAgICAgbG9nTWVzc2FnZShMT0dfTk9USUNFLCAiY2xpZW50IGlzOiAlcyIsIGFkZHJlc3MpOworICAgICAgICAgICAgICAgICAgICBmcmVlKGFkZHJlc3MpOworICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICBMb2dTb2NrZXRFcnJvcigiYWNjZXB0Iik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgTG9nU29ja2V0RXJyb3IoImxpc3RlbiIpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHVuYmluZEFkZHJlc3MpIHVuYmluZEFkZHJlc3MobG9jYWxBZGRyZXNzKTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIExvZ1NvY2tldEVycm9yKCJiaW5kIik7CisgICAgICB9CisgICAgfQorCisgICAgY2xvc2UocXVldWVTb2NrZXQpOworICB9IGVsc2UgeworICAgIExvZ1NvY2tldEVycm9yKCJzb2NrZXQiKTsKKyAgfQorCisgIG9wZXJhdGlvbnMgPSAmc29ja2V0T3BlcmF0aW9uc0VudHJ5OworICByZXR1cm4gc2VydmVyU29ja2V0OworfQorCitzdGF0aWMgaW50CityZXF1ZXN0Q29ubmVjdGlvbiAoCisgIGludCAoKmdldFNvY2tldCkgKHZvaWQpLAorICBjb25zdCBzdHJ1Y3Qgc29ja2FkZHIgKnJlbW90ZUFkZHJlc3MsIHNvY2tsZW5fdCByZW1vdGVTaXplCispIHsKKyAgaW50IGNsaWVudFNvY2tldDsKKworICB7CisgICAgY2hhciAqYWRkcmVzcyA9IGZvcm1hdFNvY2tldEFkZHJlc3MocmVtb3RlQWRkcmVzcyk7CisKKyAgICBpZiAoYWRkcmVzcykgeworICAgICAgbG9nTWVzc2FnZShMT0dfREVCVUcsICJjb25uZWN0aW5nIHRvOiAlcyIsIGFkZHJlc3MpOworICAgICAgZnJlZShhZGRyZXNzKTsKKyAgICB9CisgIH0KKworICBpZiAoKGNsaWVudFNvY2tldCA9IGdldFNvY2tldCgpKSAhPSAtMSkgeworICAgIGlmIChjb25uZWN0KGNsaWVudFNvY2tldCwgcmVtb3RlQWRkcmVzcywgcmVtb3RlU2l6ZSkgIT0gLTEpIHsKKyAgICAgIHsKKyAgICAgICAgY2hhciAqYWRkcmVzcyA9IGZvcm1hdFNvY2tldEFkZHJlc3MocmVtb3RlQWRkcmVzcyk7CisKKyAgICAgICAgaWYgKGFkZHJlc3MpIHsKKyAgICAgICAgICBsb2dNZXNzYWdlKExPR19OT1RJQ0UsICJjb25uZWN0ZWQgdG86ICVzIiwgYWRkcmVzcyk7CisgICAgICAgICAgZnJlZShhZGRyZXNzKTsKKyAgICAgICAgfQorICAgICAgfQorCisgICAgICBvcGVyYXRpb25zID0gJnNvY2tldE9wZXJhdGlvbnNFbnRyeTsKKyAgICAgIHJldHVybiBjbGllbnRTb2NrZXQ7CisgICAgfSBlbHNlIHsKKyAgICAgIGxvZ01lc3NhZ2UoTE9HX1dBUk5JTkcsICJjb25uZWN0IGVycm9yOiAlcyIsIHN0cmVycm9yKGVycm5vKSk7CisgICAgfQorCisgICAgY2xvc2UoY2xpZW50U29ja2V0KTsKKyAgfSBlbHNlIHsKKyAgICBMb2dTb2NrZXRFcnJvcigic29ja2V0Iik7CisgIH0KKworICByZXR1cm4gLTE7Cit9CisKK3N0YXRpYyBpbnQKK3NldFNvY2tldFJldXNlQWRkcmVzcyAoaW50IHNvY2tldCkgeworICBpbnQgeWVzID0gMTsKKworICBpZiAoc2V0c29ja29wdChzb2NrZXQsIFNPTF9TT0NLRVQsIFNPX1JFVVNFQUREUiwgKHZvaWQgKikmeWVzLCBzaXplb2YoeWVzKSkgIT0gLTEpIHsKKyAgICByZXR1cm4gMTsKKyAgfSBlbHNlIHsKKyAgICBMb2dTb2NrZXRFcnJvcigic2V0c29ja29wdCBSRVVTRUFERFIiKTsKKyAgfQorICByZXR1cm4gMDsKK30KKworI2lmZGVmIEFGX0xPQ0FMCitzdGF0aWMgaW50CitzZXRMb2NhbEFkZHJlc3MgKGNvbnN0IGNoYXIgKnN0cmluZywgc3RydWN0IHNvY2thZGRyX3VuICphZGRyZXNzKSB7CisgIGludCBvayA9IDE7CisKKyAgbWVtc2V0KGFkZHJlc3MsIDAsIHNpemVvZigqYWRkcmVzcykpOworICBhZGRyZXNzLT5zdW5fZmFtaWx5ID0gQUZfTE9DQUw7CisKKyAgaWYgKHN0cmxlbihzdHJpbmcpIDwgc2l6ZW9mKGFkZHJlc3MtPnN1bl9wYXRoKSkgeworICAgIHN0cm5jcHkoYWRkcmVzcy0+c3VuX3BhdGgsIHN0cmluZywgc2l6ZW9mKGFkZHJlc3MtPnN1bl9wYXRoKS0xKTsKKyAgfSBlbHNlIHsKKyAgICBvayA9IDA7CisgICAgbG9nTWVzc2FnZShMT0dfV0FSTklORywgIkxvY2FsIHNvY2tldCBwYXRoIHRvbyBsb25nOiAlcyIsIHN0cmluZyk7CisgIH0KKworICByZXR1cm4gb2s7Cit9CisKK3N0YXRpYyBpbnQKK2dldExvY2FsU29ja2V0ICh2b2lkKSB7CisgIHJldHVybiBzb2NrZXQoUEZfTE9DQUwsIFNPQ0tfU1RSRUFNLCAwKTsKK30KKworc3RhdGljIHZvaWQKK3VuYmluZExvY2FsQWRkcmVzcyAoY29uc3Qgc3RydWN0IHNvY2thZGRyICphZGRyZXNzKSB7CisgIGNvbnN0IHN0cnVjdCBzb2NrYWRkcl91biAqbG9jYWxBZGRyZXNzID0gKGNvbnN0IHN0cnVjdCBzb2NrYWRkcl91biAqKWFkZHJlc3M7CisgIGlmICh1bmxpbmsobG9jYWxBZGRyZXNzLT5zdW5fcGF0aCkgPT0gLTEpIHsKKyAgICBsb2dTeXN0ZW1FcnJvcigidW5saW5rIik7CisgIH0KK30KKworc3RhdGljIGludAorYWNjZXB0TG9jYWxDb25uZWN0aW9uIChjb25zdCBzdHJ1Y3Qgc29ja2FkZHJfdW4gKmxvY2FsQWRkcmVzcykgeworICBzdHJ1Y3Qgc29ja2FkZHJfdW4gcmVtb3RlQWRkcmVzczsKKyAgc29ja2xlbl90IHJlbW90ZVNpemUgPSBzaXplb2YocmVtb3RlQWRkcmVzcyk7CisKKyAgcmV0dXJuIGFjY2VwdFNvY2tldENvbm5lY3Rpb24oZ2V0TG9jYWxTb2NrZXQsIE5VTEwsIHVuYmluZExvY2FsQWRkcmVzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnN0IHN0cnVjdCBzb2NrYWRkciAqKWxvY2FsQWRkcmVzcywgc2l6ZW9mKCpsb2NhbEFkZHJlc3MpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc3RydWN0IHNvY2thZGRyICopJnJlbW90ZUFkZHJlc3MsICZyZW1vdGVTaXplKTsKK30KKworc3RhdGljIGludAorcmVxdWVzdExvY2FsQ29ubmVjdGlvbiAoY29uc3Qgc3RydWN0IHNvY2thZGRyX3VuICpyZW1vdGVBZGRyZXNzKSB7CisgIHJldHVybiByZXF1ZXN0Q29ubmVjdGlvbihnZXRMb2NhbFNvY2tldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb25zdCBzdHJ1Y3Qgc29ja2FkZHIgKilyZW1vdGVBZGRyZXNzLCBzaXplb2YoKnJlbW90ZUFkZHJlc3MpKTsKK30KKyNlbmRpZiAvKiBBRl9MT0NBTCAqLworCisjaWZkZWYgX19NSU5HVzMyX18KK3N0YXRpYyBpbnQKK3JlYWROYW1lZFBpcGUgKGludCBkZXNjcmlwdG9yLCB2b2lkICpidWZmZXIsIGludCBzaXplKSB7CisgIHsKKyAgICBEV09SRCBhdmFpbGFibGU7CisKKyAgICBpZiAoIVBlZWtOYW1lZFBpcGUoKEhBTkRMRSlkZXNjcmlwdG9yLCBOVUxMLCAwLCBOVUxMLCAmYXZhaWxhYmxlLCBOVUxMKSkgeworICAgICAgbG9nV2luZG93c1N5c3RlbUVycm9yKCJQZWVrTmFtZWRQaXBlIik7CisgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBpZiAoIWF2YWlsYWJsZSkgeworICAgICAgZXJybm8gPSBFQUdBSU47CisgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgaWYgKGF2YWlsYWJsZSA8IHNpemUpIHNpemUgPSBhdmFpbGFibGU7CisgIH0KKworICB7CisgICAgRFdPUkQgcmVjZWl2ZWQ7CisgICAgT1ZFUkxBUFBFRCBvdmVybCA9IHswLCAwLCB7ezAsIDB9fSwgTlVMTH07CisgICAgb3ZlcmwuaEV2ZW50ID0gQ3JlYXRlRXZlbnQoTlVMTCwgVFJVRSwgRkFMU0UsIE5VTEwpOworCisgICAgaWYgKCFSZWFkRmlsZSgoSEFORExFKWRlc2NyaXB0b3IsIGJ1ZmZlciwgc2l6ZSwgJnJlY2VpdmVkLCAmb3ZlcmwpKSB7CisgICAgICBpZiAoR2V0TGFzdEVycm9yKCkgIT0gRVJST1JfSU9fUEVORElORykgeworICAgICAgICBsb2dXaW5kb3dzU3lzdGVtRXJyb3IoIlJlYWRQaXBlIik7CisgICAgICAgIHJlY2VpdmVkID0gMDsKKyAgICAgIH0gZWxzZSBpZiAoIUdldE92ZXJsYXBwZWRSZXN1bHQoKEhBTkRMRSlkZXNjcmlwdG9yLCAmb3ZlcmwsICZyZWNlaXZlZCwgVFJVRSkpIHsKKyAgICAgICAgbG9nV2luZG93c1N5c3RlbUVycm9yKCJHZXRPdmVybGFwcGVkUmVzdWx0Iik7CisgICAgICAgIHJlY2VpdmVkID0gMDsKKyAgICAgIH0KKyAgICB9CisKKyAgICBDbG9zZUhhbmRsZShvdmVybC5oRXZlbnQpOworICAgIHJldHVybiByZWNlaXZlZDsKKyAgfQorfQorCitzdGF0aWMgY29uc3QgT3BlcmF0aW9uc0VudHJ5IG5hbWVkUGlwZU9wZXJhdGlvbnNFbnRyeSA9IHsKKyAgcmVhZE5hbWVkUGlwZQorfTsKKworc3RhdGljIGludAorYWNjZXB0TmFtZWRQaXBlQ29ubmVjdGlvbiAoY29uc3QgY2hhciAqcGF0aCkgeworICBIQU5ETEUgaDsKKyAgT1ZFUkxBUFBFRCBvdmVybCA9IHswLCAwLCB7ezAsIDB9fSwgTlVMTH07CisgIERXT1JEIHJlczsKKyAgaW50IGF0dGVtcHRzID0gMDsKKworICBpZiAoKGggPSBDcmVhdGVOYW1lZFBpcGUocGF0aCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBJUEVfQUNDRVNTX0RVUExFWCB8IEZJTEVfRkxBR19PVkVSTEFQUEVELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQSVBFX1RZUEVfQllURSB8IFBJUEVfUkVBRE1PREVfQllURSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSwgMCwgMCwgMCwgTlVMTCkpID09IElOVkFMSURfSEFORExFX1ZBTFVFKSB7CisgICAgbG9nV2luZG93c1N5c3RlbUVycm9yKCJDcmVhdGVOYW1lZFBpcGUiKTsKKyAgICByZXR1cm4gLTE7CisgIH0KKworICBvdmVybC5oRXZlbnQgPSBDcmVhdGVFdmVudChOVUxMLCBUUlVFLCBGQUxTRSwgTlVMTCk7CisgIGlmICghQ29ubmVjdE5hbWVkUGlwZShoLCAmb3ZlcmwpKSB7CisgICAgc3dpdGNoIChHZXRMYXN0RXJyb3IoKSkgeworICAgICAgY2FzZSBFUlJPUl9JT19QRU5ESU5HOgorICAgICAgICB3aGlsZSAoKHJlcyA9IFdhaXRGb3JTaW5nbGVPYmplY3Qob3ZlcmwuaEV2ZW50LCAxMDAwMCkpICE9IFdBSVRfT0JKRUNUXzApIHsKKyAgICAgICAgICBpZiAocmVzID09IFdBSVRfVElNRU9VVCkgeworICAgICAgICAgICAgKythdHRlbXB0czsKKyAgICAgICAgICAgIGxvZ01lc3NhZ2UoTE9HX0RFQlVHLCAibm8gY29ubmVjdGlvbiB5ZXQsIHN0aWxsIHdhaXRpbmcgKCVkKS4iLCBhdHRlbXB0cyk7CisgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGxvZ1dpbmRvd3NTeXN0ZW1FcnJvcigiQ29ubmVjdE5hbWVkUGlwZSIpOworICAgICAgICAgICAgQ2xvc2VIYW5kbGUoaCk7CisgICAgICAgICAgICBoID0gKEhBTkRMRSkgLTE7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgY2FzZSBFUlJPUl9QSVBFX0NPTk5FQ1RFRDoKKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIGxvZ1dpbmRvd3NTeXN0ZW1FcnJvcigiQ29ubmVjdE5hbWVkUGlwZSIpOworICAgICAgICBDbG9zZUhhbmRsZShoKTsKKyAgICAgICAgaCA9IChIQU5ETEUpIC0xOworICAgICAgICBicmVhazsKKyAgICB9CisgIH0KKworICBDbG9zZUhhbmRsZShvdmVybC5oRXZlbnQpOworICBvcGVyYXRpb25zID0gJm5hbWVkUGlwZU9wZXJhdGlvbnNFbnRyeTsKKyAgcmV0dXJuIChpbnQpaDsKK30KKworc3RhdGljIGludAorcmVxdWVzdE5hbWVkUGlwZUNvbm5lY3Rpb24gKGNvbnN0IGNoYXIgKnBhdGgpIHsKKyAgSEFORExFIGg7CisKKyAgaWYgKChoID0gQ3JlYXRlRmlsZShwYXRoLAorICAgICAgICAgICAgICAgICAgICAgIEdFTkVSSUNfUkVBRHxHRU5FUklDX1dSSVRFLAorICAgICAgICAgICAgICAgICAgICAgIEZJTEVfU0hBUkVfUkVBRHxGSUxFX1NIQVJFX1dSSVRFLAorICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIE9QRU5fRVhJU1RJTkcsIDAsIE5VTEwpKSA9PSBJTlZBTElEX0hBTkRMRV9WQUxVRSkgeworICAgIGxvZ1dpbmRvd3NTeXN0ZW1FcnJvcigiQ29ubmVjdCB0byBuYW1lZCBwaXBlIik7CisgICAgcmV0dXJuIC0xOworICB9CisKKyAgb3BlcmF0aW9ucyA9ICZuYW1lZFBpcGVPcGVyYXRpb25zRW50cnk7CisgIHJldHVybiAoaW50KWg7Cit9CisjZW5kaWYgLyogX19NSU5HVzMyX18gKi8KKworc3RhdGljIGludAorc2V0SW5ldEFkZHJlc3MgKGNvbnN0IGNoYXIgKnN0cmluZywgc3RydWN0IHNvY2thZGRyX2luICphZGRyZXNzKSB7CisgIGludCBvayA9IDE7CisgIGNoYXIgKmhvc3ROYW1lID0gc3RyZHVwKHN0cmluZyk7CisKKyAgaWYgKGhvc3ROYW1lKSB7CisgICAgY2hhciAqcG9ydE51bWJlciA9IHN0cmNocihob3N0TmFtZSwgJzonKTsKKworICAgIGlmIChwb3J0TnVtYmVyKSB7CisgICAgICAqcG9ydE51bWJlcisrID0gMDsKKyAgICAgIGlmICghKnBvcnROdW1iZXIpIHBvcnROdW1iZXIgPSBOVUxMOworICAgIH0KKworICAgIG1lbXNldChhZGRyZXNzLCAwLCBzaXplb2YoKmFkZHJlc3MpKTsKKyAgICBhZGRyZXNzLT5zaW5fZmFtaWx5ID0gQUZfSU5FVDsKKworICAgIGlmICgqaG9zdE5hbWUpIHsKKyAgICAgIGNvbnN0IHN0cnVjdCBob3N0ZW50ICpob3N0ID0gZ2V0aG9zdGJ5bmFtZShob3N0TmFtZSk7CisgICAgICBpZiAoaG9zdCAmJiAoaG9zdC0+aF9hZGRydHlwZSA9PSBBRl9JTkVUKSAmJiAoaG9zdC0+aF9sZW5ndGggPT0gc2l6ZW9mKGFkZHJlc3MtPnNpbl9hZGRyKSkpIHsKKyAgICAgICAgbWVtY3B5KCZhZGRyZXNzLT5zaW5fYWRkciwgaG9zdC0+aF9hZGRyLCBzaXplb2YoYWRkcmVzcy0+c2luX2FkZHIpKTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIG9rID0gMDsKKyAgICAgICAgbG9nTWVzc2FnZShMT0dfV0FSTklORywgIlVua25vd24gaG9zdCBuYW1lOiAlcyIsIGhvc3ROYW1lKTsKKyAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgYWRkcmVzcy0+c2luX2FkZHIuc19hZGRyID0gSU5BRERSX0FOWTsKKyAgICB9CisKKyAgICBpZiAocG9ydE51bWJlcikgeworICAgICAgaW50IHBvcnQ7CisKKyAgICAgIGlmIChpc0ludGVnZXIoJnBvcnQsIHBvcnROdW1iZXIpKSB7CisgICAgICAgIGlmICgocG9ydCA+IDApICYmIChwb3J0IDw9IDBYRkZGRikpIHsKKyAgICAgICAgICBhZGRyZXNzLT5zaW5fcG9ydCA9IGh0b25zKHBvcnQpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgIG9rID0gMDsKKyAgICAgICAgICBsb2dNZXNzYWdlKExPR19XQVJOSU5HLCAiSW52YWxpZCBwb3J0IG51bWJlcjogJXMiLCBwb3J0TnVtYmVyKTsKKyAgICAgICAgfQorICAgICAgfSBlbHNlIHsKKyAgICAgICAgY29uc3Qgc3RydWN0IHNlcnZlbnQgKnNlcnZpY2UgPSBnZXRzZXJ2YnluYW1lKHBvcnROdW1iZXIsICJ0Y3AiKTsKKworICAgICAgICBpZiAoc2VydmljZSkgeworICAgICAgICAgIGFkZHJlc3MtPnNpbl9wb3J0ID0gc2VydmljZS0+c19wb3J0OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgIG9rID0gMDsKKyAgICAgICAgICBsb2dNZXNzYWdlKExPR19XQVJOSU5HLCAiVW5rbm93biBzZXJ2aWNlOiAlcyIsIHBvcnROdW1iZXIpOworICAgICAgICB9CisgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgIGFkZHJlc3MtPnNpbl9wb3J0ID0gaHRvbnMoVlJfREVGQVVMVF9QT1JUKTsKKyAgICB9CisKKyAgICBmcmVlKGhvc3ROYW1lKTsKKyAgfSBlbHNlIHsKKyAgICBvayA9IDA7CisgICAgbG9nTWFsbG9jRXJyb3IoKTsKKyAgfQorCisgIHJldHVybiBvazsKK30KKworc3RhdGljIGludAorZ2V0SW5ldFNvY2tldCAodm9pZCkgeworICByZXR1cm4gc29ja2V0KFBGX0lORVQsIFNPQ0tfU1RSRUFNLCAwKTsKK30KKworc3RhdGljIGludAorcHJlcGFyZUluZXRRdWV1ZSAoaW50IHNvY2tldCkgeworICBpZiAoc2V0U29ja2V0UmV1c2VBZGRyZXNzKHNvY2tldCkpIHJldHVybiAxOworICByZXR1cm4gMDsKK30KKworc3RhdGljIGludAorYWNjZXB0SW5ldENvbm5lY3Rpb24gKGNvbnN0IHN0cnVjdCBzb2NrYWRkcl9pbiAqbG9jYWxBZGRyZXNzKSB7CisgIHN0cnVjdCBzb2NrYWRkcl9pbiByZW1vdGVBZGRyZXNzOworICBzb2NrbGVuX3QgcmVtb3RlU2l6ZSA9IHNpemVvZihyZW1vdGVBZGRyZXNzKTsKKworICByZXR1cm4gYWNjZXB0U29ja2V0Q29ubmVjdGlvbihnZXRJbmV0U29ja2V0LCBwcmVwYXJlSW5ldFF1ZXVlLCBOVUxMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29uc3Qgc3RydWN0IHNvY2thZGRyICopbG9jYWxBZGRyZXNzLCBzaXplb2YoKmxvY2FsQWRkcmVzcyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzdHJ1Y3Qgc29ja2FkZHIgKikmcmVtb3RlQWRkcmVzcywgJnJlbW90ZVNpemUpOworfQorCitzdGF0aWMgaW50CityZXF1ZXN0SW5ldENvbm5lY3Rpb24gKGNvbnN0IHN0cnVjdCBzb2NrYWRkcl9pbiAqcmVtb3RlQWRkcmVzcykgeworICByZXR1cm4gcmVxdWVzdENvbm5lY3Rpb24oZ2V0SW5ldFNvY2tldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb25zdCBzdHJ1Y3Qgc29ja2FkZHIgKilyZW1vdGVBZGRyZXNzLCBzaXplb2YoKnJlbW90ZUFkZHJlc3MpKTsKK30KKworc3RhdGljIGNoYXIgKgorbWFrZVN0cmluZyAoY29uc3QgY2hhciAqY2hhcmFjdGVycywgaW50IGNvdW50KSB7CisgIGNoYXIgKnN0cmluZyA9IG1hbGxvYyhjb3VudCsxKTsKKworICBpZiAoc3RyaW5nKSB7CisgICAgbWVtY3B5KHN0cmluZywgY2hhcmFjdGVycywgY291bnQpOworICAgIHN0cmluZ1tjb3VudF0gPSAwOworICB9IGVsc2UgeworICAgIGxvZ01hbGxvY0Vycm9yKCk7CisgIH0KKworICByZXR1cm4gc3RyaW5nOworfQorCitzdGF0aWMgY2hhciAqCitjb3B5U3RyaW5nIChjb25zdCBjaGFyICpzdHJpbmcpIHsKKyAgcmV0dXJuIG1ha2VTdHJpbmcoc3RyaW5nLCBzdHJsZW4oc3RyaW5nKSk7Cit9CisKK3N0YXRpYyBpbnQKK2ZpbGxJbnB1dEJ1ZmZlciAodm9pZCkgeworICBpZiAoKGlucHV0TGVuZ3RoIDwgSU5QVVRfU0laRSkgJiYgIWlucHV0RW5kKSB7CisgICAgaW50IGNvdW50ID0gb3BlcmF0aW9ucy0+cmVhZChmaWxlRGVzY3JpcHRvciwgJmlucHV0QnVmZmVyW2lucHV0TGVuZ3RoXSwgSU5QVVRfU0laRS1pbnB1dExlbmd0aCk7CisgICAgaWYgKCFjb3VudCkgeworICAgICAgaW5wdXRFbmQgPSAxOworICAgIH0gZWxzZSBpZiAoY291bnQgIT0gLTEpIHsKKyAgICAgIGlucHV0TGVuZ3RoICs9IGNvdW50OworICAgIH0gZWxzZSBpZiAoZXJybm8gIT0gRUFHQUlOKSB7CisgICAgICByZXR1cm4gMDsKKyAgICB9CisgIH0KKyAgcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBjaGFyICoKK3JlYWRDb21tYW5kTGluZSAodm9pZCkgeworICBpZiAoZmlsbElucHV0QnVmZmVyKCkpIHsKKyAgICBpZiAoaW5wdXRTdGFydCA8IGlucHV0TGVuZ3RoKSB7CisgICAgICBjb25zdCBjaGFyICpuZXdsaW5lID0gbWVtY2hyKCZpbnB1dEJ1ZmZlcltpbnB1dFN0YXJ0XSwgJ1xuJywgaW5wdXRMZW5ndGgtaW5wdXRTdGFydCk7CisKKyAgICAgIGlmIChuZXdsaW5lKSB7CisgICAgICAgIGNoYXIgKnN0cmluZzsKKyAgICAgICAgaW50IHN0cmluZ0xlbmd0aCA9IG5ld2xpbmUgLSBpbnB1dEJ1ZmZlcjsKKyAgICAgICAgaW5wdXRDYXJyaWFnZVJldHVybiA9IDA7CisKKyAgICAgICAgaWYgKChuZXdsaW5lICE9IGlucHV0QnVmZmVyKSAmJiAoKihuZXdsaW5lLTEpID09ICdccicpKSB7CisgICAgICAgICAgaW5wdXRDYXJyaWFnZVJldHVybiA9IDE7CisgICAgICAgICAgc3RyaW5nTGVuZ3RoIC09IDE7CisgICAgICAgIH0KKworICAgICAgICBzdHJpbmcgPSBtYWtlU3RyaW5nKGlucHV0QnVmZmVyLCBzdHJpbmdMZW5ndGgpOworICAgICAgICBpbnB1dExlbmd0aCAtPSArK25ld2xpbmUgLSBpbnB1dEJ1ZmZlcjsKKyAgICAgICAgbWVtbW92ZShpbnB1dEJ1ZmZlciwgbmV3bGluZSwgaW5wdXRMZW5ndGgpOworICAgICAgICBpbnB1dFN0YXJ0ID0gMDsKKyAgICAgICAgcmV0dXJuIHN0cmluZzsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIGlucHV0U3RhcnQgPSBpbnB1dExlbmd0aDsKKyAgICAgIH0KKyAgICB9IGVsc2UgaWYgKGlucHV0RW5kKSB7CisgICAgICBjaGFyICpzdHJpbmc7CisKKyAgICAgIGlmIChpbnB1dExlbmd0aCkgeworICAgICAgICBzdHJpbmcgPSBtYWtlU3RyaW5nKGlucHV0QnVmZmVyLCBpbnB1dExlbmd0aCk7CisgICAgICAgIGlucHV0TGVuZ3RoID0gMDsKKyAgICAgICAgaW5wdXRTdGFydCA9IDA7CisgICAgICB9IGVsc2UgeworICAgICAgICBzdHJpbmcgPSBjb3B5U3RyaW5nKCJxdWl0Iik7CisgICAgICB9CisKKyAgICAgIHJldHVybiBzdHJpbmc7CisgICAgfQorICB9CisKKyAgcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICoKK25leHRXb3JkICh2b2lkKSB7CisgIHJldHVybiBzdHJ0b2soTlVMTCwgaW5wdXREZWxpbWl0ZXJzKTsKK30KKworc3RhdGljIGludAorY29tcGFyZVdvcmRzIChjb25zdCBjaGFyICp3b3JkMSwgY29uc3QgY2hhciAqd29yZDIpIHsKKyAgcmV0dXJuIHN0cmNhc2VjbXAod29yZDEsIHdvcmQyKTsKK30KKworc3RhdGljIGludAordGVzdFdvcmQgKGNvbnN0IGNoYXIgKnN1cHBsaWVkV29yZCwgY29uc3QgY2hhciAqZGVzaXJlZFdvcmQpIHsKKyAgcmV0dXJuIGNvbXBhcmVXb3JkcyhzdXBwbGllZFdvcmQsIGRlc2lyZWRXb3JkKSA9PSAwOworfQorCitzdGF0aWMgaW50CitmbHVzaE91dHB1dCAodm9pZCkgeworICBjb25zdCBjaGFyICpidWZmZXIgPSBvdXRwdXRCdWZmZXI7CisgIHNpemVfdCBsZW5ndGggPSBvdXRwdXRMZW5ndGg7CisKKyAgd2hpbGUgKGxlbmd0aCkgeworI2lmZGVmIF9fTUlOR1czMl9fCisgICAgRFdPUkQgc2VudDsKKyAgICBPVkVSTEFQUEVEIG92ZXJsID0gezAsIDAsIHt7MCwgMH19LCBDcmVhdGVFdmVudChOVUxMLCBUUlVFLCBGQUxTRSwgTlVMTCl9OworICAgIGlmICgoIVdyaXRlRmlsZSgoSEFORExFKSBmaWxlRGVzY3JpcHRvciwgYnVmZmVyLCBsZW5ndGgsICZzZW50LCAmb3ZlcmwpCisgICAgICAmJiBHZXRMYXN0RXJyb3IoKSAhPSBFUlJPUl9JT19QRU5ESU5HKSB8fAorICAgICAgIUdldE92ZXJsYXBwZWRSZXN1bHQoKEhBTkRMRSkgZmlsZURlc2NyaXB0b3IsICZvdmVybCwgJnNlbnQsIFRSVUUpKSB7CisgICAgICAgIExvZ1NvY2tldEVycm9yKCJXcml0ZUZpbGUiKTsKKyAgICAgICAgQ2xvc2VIYW5kbGUob3ZlcmwuaEV2ZW50KTsKKyAgICAgICAgbWVtbW92ZShvdXRwdXRCdWZmZXIsIGJ1ZmZlciwgKG91dHB1dExlbmd0aCA9IGxlbmd0aCkpOworICAgICAgICByZXR1cm4gMDsKKyAgICAgIH0KKyAgICBDbG9zZUhhbmRsZShvdmVybC5oRXZlbnQpOworI2Vsc2UgLyogX19NSU5HVzMyX18gKi8KKyAgICBpbnQgc2VudDsKKyAgICBzZW50ID0gc2VuZChmaWxlRGVzY3JpcHRvciwgYnVmZmVyLCBsZW5ndGgsIDApOworCisgICAgaWYgKHNlbnQgPT0gLTEpIHsKKyAgICAgIGlmIChlcnJubyA9PSBFSU5UUikgY29udGludWU7CisgICAgICBMb2dTb2NrZXRFcnJvcigic2VuZCIpOworICAgICAgbWVtbW92ZShvdXRwdXRCdWZmZXIsIGJ1ZmZlciwgKG91dHB1dExlbmd0aCA9IGxlbmd0aCkpOworICAgICAgcmV0dXJuIDA7CisgICAgfQorI2VuZGlmIC8qIF9fTUlOR1czMl9fICovCisKKyAgICBidWZmZXIgKz0gc2VudDsKKyAgICBsZW5ndGggLT0gc2VudDsKKyAgfQorCisgIG91dHB1dExlbmd0aCA9IDA7CisgIHJldHVybiAxOworfQorCitzdGF0aWMgaW50Cit3cml0ZUJ5dGVzIChjb25zdCBjaGFyICpieXRlcywgc2l6ZV90IGxlbmd0aCkgeworICB3aGlsZSAobGVuZ3RoKSB7CisgICAgc2l6ZV90IGNvdW50ID0gT1VUUFVUX1NJWkUgLSBvdXRwdXRMZW5ndGg7CisgICAgaWYgKGxlbmd0aCA8IGNvdW50KSBjb3VudCA9IGxlbmd0aDsKKyAgICBtZW1jcHkoJm91dHB1dEJ1ZmZlcltvdXRwdXRMZW5ndGhdLCBieXRlcywgY291bnQpOworICAgIGJ5dGVzICs9IGNvdW50OworICAgIGxlbmd0aCAtPSBjb3VudDsKKyAgICBpZiAoKG91dHB1dExlbmd0aCArPSBjb3VudCkgPT0gT1VUUFVUX1NJWkUpCisgICAgICBpZiAoIWZsdXNoT3V0cHV0KCkpCisgICAgICAgIHJldHVybiAwOworICB9CisKKyAgcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQKK3dyaXRlQnl0ZSAoY2hhciBieXRlKSB7CisgIHJldHVybiB3cml0ZUJ5dGVzKCZieXRlLCAxKTsKK30KKworc3RhdGljIGludAord3JpdGVTdHJpbmcgKGNvbnN0IGNoYXIgKnN0cmluZykgeworICByZXR1cm4gd3JpdGVCeXRlcyhzdHJpbmcsIHN0cmxlbihzdHJpbmcpKTsKK30KKworc3RhdGljIGludAord3JpdGVDaGFyYWN0ZXIgKHdjaGFyX3QgY2hhcmFjdGVyKSB7CisgIFV0ZjhCdWZmZXIgYnVmZmVyOworICBzaXplX3QgY291bnQgPSBjb252ZXJ0V2NoYXJUb1V0ZjgoY2hhcmFjdGVyLCBidWZmZXIpOworICByZXR1cm4gd3JpdGVCeXRlcyhidWZmZXIsIGNvdW50KTsKK30KKworc3RhdGljIGludAord3JpdGVEb3RzIChjb25zdCB1bnNpZ25lZCBjaGFyICpjZWxscywgaW50IGNvdW50KSB7CisgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmNlbGwgPSBjZWxsczsKKworICB3aGlsZSAoY291bnQtLSA+IDApIHsKKyAgICBjaGFyIGRvdHNbOV07CisgICAgY2hhciAqZCA9IGRvdHM7CisKKyAgICBpZiAoY2VsbCAhPSBjZWxscykgKmQrKyA9ICd8JzsKKyAgICBpZiAoKmNlbGwpIHsKKyAgICAgIGlmICgqY2VsbCAmIEJSTF9ET1QxKSAqZCsrID0gJzEnOworICAgICAgaWYgKCpjZWxsICYgQlJMX0RPVDIpICpkKysgPSAnMic7CisgICAgICBpZiAoKmNlbGwgJiBCUkxfRE9UMykgKmQrKyA9ICczJzsKKyAgICAgIGlmICgqY2VsbCAmIEJSTF9ET1Q0KSAqZCsrID0gJzQnOworICAgICAgaWYgKCpjZWxsICYgQlJMX0RPVDUpICpkKysgPSAnNSc7CisgICAgICBpZiAoKmNlbGwgJiBCUkxfRE9UNikgKmQrKyA9ICc2JzsKKyAgICAgIGlmICgqY2VsbCAmIEJSTF9ET1Q3KSAqZCsrID0gJzcnOworICAgICAgaWYgKCpjZWxsICYgQlJMX0RPVDgpICpkKysgPSAnOCc7CisgICAgfSBlbHNlIHsKKyAgICAgICpkKysgPSAnICc7CisgICAgfQorICAgICsrY2VsbDsKKworICAgIGlmICghd3JpdGVCeXRlcyhkb3RzLCBkLWRvdHMpKSByZXR1cm4gMDsKKyAgfQorCisgIHJldHVybiAxOworfQorCitzdGF0aWMgaW50Cit3cml0ZUxpbmUgKHZvaWQpIHsKKyAgaWYgKGlucHV0Q2FycmlhZ2VSZXR1cm4pCisgICAgaWYgKCF3cml0ZUJ5dGUoJ1xyJykpCisgICAgICByZXR1cm4gMDsKKworICBpZiAod3JpdGVCeXRlKCdcbicpKQorICAgIGlmIChmbHVzaE91dHB1dCgpKQorICAgICAgcmV0dXJuIDE7CisKKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkCitzb3J0Q29tbWFuZHMgKGludCAoKmNvbXBhcmVDb21tYW5kcykgKGNvbnN0IHZvaWQgKml0ZW0xLCBjb25zdCB2b2lkICppdGVtMikpIHsKKyAgcXNvcnQoY29tbWFuZERlc2NyaXB0b3JzLCBjb21tYW5kQ291bnQsIGNvbW1hbmRTaXplLCBjb21wYXJlQ29tbWFuZHMpOworfQorCitzdGF0aWMgaW50Citjb21wYXJlQ29tbWFuZENvZGVzIChjb25zdCB2b2lkICppdGVtMSwgY29uc3Qgdm9pZCAqaXRlbTIpIHsKKyAgY29uc3QgQ29tbWFuZERlc2NyaXB0b3IgKmRlc2NyaXB0b3IxID0gaXRlbTE7CisgIGNvbnN0IENvbW1hbmREZXNjcmlwdG9yICpkZXNjcmlwdG9yMiA9IGl0ZW0yOworCisgIGludCBjb2RlMSA9IGRlc2NyaXB0b3IxLT5lbnRyeS0+Y29kZTsKKyAgaW50IGNvZGUyID0gZGVzY3JpcHRvcjItPmVudHJ5LT5jb2RlOworCisgIGlmIChjb2RlMSA8IGNvZGUyKSByZXR1cm4gLTE7CisgIGlmIChjb2RlMSA+IGNvZGUyKSByZXR1cm4gMTsKKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkCitzb3J0Q29tbWFuZHNCeUNvZGUgKHZvaWQpIHsKKyAgc29ydENvbW1hbmRzKGNvbXBhcmVDb21tYW5kQ29kZXMpOworfQorCitzdGF0aWMgaW50Citjb21wYXJlQ29tbWFuZE5hbWVzIChjb25zdCB2b2lkICppdGVtMSwgY29uc3Qgdm9pZCAqaXRlbTIpIHsKKyAgY29uc3QgQ29tbWFuZERlc2NyaXB0b3IgKmRlc2NyaXB0b3IxID0gaXRlbTE7CisgIGNvbnN0IENvbW1hbmREZXNjcmlwdG9yICpkZXNjcmlwdG9yMiA9IGl0ZW0yOworCisgIHJldHVybiBzdHJjbXAoZGVzY3JpcHRvcjEtPmVudHJ5LT5uYW1lLCBkZXNjcmlwdG9yMi0+ZW50cnktPm5hbWUpOworfQorCitzdGF0aWMgdm9pZAorc29ydENvbW1hbmRzQnlOYW1lICh2b2lkKSB7CisgIHNvcnRDb21tYW5kcyhjb21wYXJlQ29tbWFuZE5hbWVzKTsKK30KKworc3RhdGljIGludAorYWxsb2NhdGVDb21tYW5kRGVzY3JpcHRvcnMgKHZvaWQpIHsKKyAgaWYgKCFjb21tYW5kRGVzY3JpcHRvcnMpIHsKKyAgICBjb21tYW5kQ291bnQgPSBnZXRDb21tYW5kQ291bnQoKTsKKyAgICBjb21tYW5kRGVzY3JpcHRvcnMgPSBtYWxsb2MoY29tbWFuZENvdW50ICogY29tbWFuZFNpemUpOworCisgICAgaWYgKCFjb21tYW5kRGVzY3JpcHRvcnMpIHsKKyAgICAgIGxvZ01hbGxvY0Vycm9yKCk7CisgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICB7CisgICAgICBDb21tYW5kRGVzY3JpcHRvciAqZGVzY3JpcHRvciA9IGNvbW1hbmREZXNjcmlwdG9yczsKKyAgICAgIGNvbnN0IENvbW1hbmRFbnRyeSAqZW50cnkgPSBjb21tYW5kVGFibGU7CisgICAgICB3aGlsZSAoZW50cnktPm5hbWUpIHsKKyAgICAgICAgZGVzY3JpcHRvci0+ZW50cnkgPSBlbnRyeSsrOworICAgICAgICBkZXNjcmlwdG9yLT5jb3VudCA9IDA7CisgICAgICAgICsrZGVzY3JpcHRvcjsKKyAgICAgIH0KKyAgICB9CisKKyAgICBzb3J0Q29tbWFuZHNCeUNvZGUoKTsKKyAgICB7CisgICAgICBDb21tYW5kRGVzY3JpcHRvciAqZGVzY3JpcHRvciA9IGNvbW1hbmREZXNjcmlwdG9ycyArIGNvbW1hbmRDb3VudDsKKyAgICAgIGludCBwcmV2aW91c0Jsb2NrID0gLTE7CisKKyAgICAgIHdoaWxlIChkZXNjcmlwdG9yLS0gIT0gY29tbWFuZERlc2NyaXB0b3JzKSB7CisgICAgICAgIGludCBjb2RlID0gZGVzY3JpcHRvci0+ZW50cnktPmNvZGU7CisgICAgICAgIGludCBjdXJyZW50QmxvY2sgPSBjb2RlICYgQlJMX01TS19CTEs7CisKKyAgICAgICAgaWYgKGN1cnJlbnRCbG9jayAhPSBwcmV2aW91c0Jsb2NrKSB7CisgICAgICAgICAgaWYgKGN1cnJlbnRCbG9jaykgeworICAgICAgICAgICAgZGVzY3JpcHRvci0+Y291bnQgPSAoQlJMX01TS19BUkcgKyAxKSAtIChjb2RlICYgQlJMX01TS19BUkcpOworICAgICAgICAgIH0KKyAgICAgICAgICBwcmV2aW91c0Jsb2NrID0gY3VycmVudEJsb2NrOworICAgICAgICB9CisgICAgICB9CisgICAgfQorCisgICAgc29ydENvbW1hbmRzQnlOYW1lKCk7CisgIH0KKworICByZXR1cm4gMTsKK30KKworc3RhdGljIHZvaWQKK2RlYWxsb2NhdGVDb21tYW5kRGVzY3JpcHRvcnMgKHZvaWQpIHsKKyAgaWYgKGNvbW1hbmREZXNjcmlwdG9ycykgeworICAgIGZyZWUoY29tbWFuZERlc2NyaXB0b3JzKTsKKyAgICBjb21tYW5kRGVzY3JpcHRvcnMgPSBOVUxMOworICB9Cit9CisKK3N0YXRpYyBpbnQKK2NvbXBhcmVDb21tYW5kTmFtZSAoY29uc3Qgdm9pZCAqa2V5LCBjb25zdCB2b2lkICppdGVtKSB7CisgIGNvbnN0IGNoYXIgKm5hbWUgPSBrZXk7CisgIGNvbnN0IENvbW1hbmREZXNjcmlwdG9yICpkZXNjcmlwdG9yID0gaXRlbTsKKyAgcmV0dXJuIGNvbXBhcmVXb3JkcyhuYW1lLCBkZXNjcmlwdG9yLT5lbnRyeS0+bmFtZSk7Cit9CisKK3N0YXRpYyBjb25zdCBDb21tYW5kRGVzY3JpcHRvciAqCitmaW5kQ29tbWFuZCAoY29uc3QgY2hhciAqbmFtZSkgeworICByZXR1cm4gYnNlYXJjaChuYW1lLCBjb21tYW5kRGVzY3JpcHRvcnMsIGNvbW1hbmRDb3VudCwgY29tbWFuZFNpemUsIGNvbXBhcmVDb21tYW5kTmFtZSk7Cit9CisKK3N0YXRpYyBpbnQKK2RpbWVuc2lvbnNDaGFuZ2VkIChCcmFpbGxlRGlzcGxheSAqYnJsKSB7CisgIGludCBvayA9IDE7CisgIGNvbnN0IGNoYXIgKndvcmQ7CisKKyAgaW50IGNvbHVtbnMxOworICBpbnQgcm93czE7CisKKyAgaW50IGNvbHVtbnMyID0gMDsKKyAgaW50IHJvd3MyID0gMDsKKworICBpZiAoKHdvcmQgPSBuZXh0V29yZCgpKSkgeworICAgIGlmIChpc0ludGVnZXIoJmNvbHVtbnMxLCB3b3JkKSAmJiAoY29sdW1uczEgPiAwKSkgeworICAgICAgcm93czEgPSAxOworCisgICAgICBpZiAoKHdvcmQgPSBuZXh0V29yZCgpKSkgeworICAgICAgICBpZiAoaXNJbnRlZ2VyKCZyb3dzMSwgd29yZCkgJiYgKHJvd3MxID4gMCkpIHsKKyAgICAgICAgICBpZiAoKHdvcmQgPSBuZXh0V29yZCgpKSkgeworICAgICAgICAgICAgaWYgKGlzSW50ZWdlcigmY29sdW1uczIsIHdvcmQpICYmIChjb2x1bW5zMiA+IDApKSB7CisgICAgICAgICAgICAgIHJvd3MyID0gMDsKKworICAgICAgICAgICAgICBpZiAoKHdvcmQgPSBuZXh0V29yZCgpKSkgeworICAgICAgICAgICAgICAgIGlmIChpc0ludGVnZXIoJnJvd3MyLCB3b3JkKSAmJiAocm93czIgPiAwKSkgeworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICBsb2dNZXNzYWdlKExPR19XQVJOSU5HLCAiaW52YWxpZCBzdGF0dXMgcm93IGNvdW50OiAlcyIsIHdvcmQpOworICAgICAgICAgICAgICAgICAgb2sgPSAwOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgbG9nTWVzc2FnZShMT0dfV0FSTklORywgImludmFsaWQgc3RhdHVzIGNvbHVtbiBjb3VudDogJXMiLCB3b3JkKTsKKyAgICAgICAgICAgICAgb2sgPSAwOworICAgICAgICAgICAgfQorICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICBsb2dNZXNzYWdlKExPR19XQVJOSU5HLCAiaW52YWxpZCB0ZXh0IHJvdyBjb3VudDogJXMiLCB3b3JkKTsKKyAgICAgICAgICBvayA9IDA7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgbG9nTWVzc2FnZShMT0dfV0FSTklORywgImludmFsaWQgdGV4dCBjb2x1bW4gY291bnQ6ICVzIiwgd29yZCk7CisgICAgICBvayA9IDA7CisgICAgfQorICB9IGVsc2UgeworICAgIGxvZ01lc3NhZ2UoTE9HX1dBUk5JTkcsICJtaXNzaW5nIHRleHQgY29sdW1uIGNvdW50Iik7CisgICAgb2sgPSAwOworICB9CisKKyAgaWYgKG9rKSB7CisgICAgaW50IGNvdW50MSA9IGNvbHVtbnMxICogcm93czE7CisgICAgaW50IGNvdW50MiA9IGNvbHVtbnMyICogcm93czI7CisgICAgdW5zaWduZWQgY2hhciAqYnJhaWxsZTsKKyAgICB3Y2hhcl90ICp0ZXh0OworICAgIHVuc2lnbmVkIGNoYXIgKnN0YXR1czsKKworICAgIGlmICgoYnJhaWxsZSA9IGNhbGxvYyhjb3VudDEsIHNpemVvZigqYnJhaWxsZSkpKSkgeworICAgICAgaWYgKCh0ZXh0ID0gY2FsbG9jKGNvdW50MSwgc2l6ZW9mKCp0ZXh0KSkpKSB7CisgICAgICAgIGlmICgoc3RhdHVzID0gY2FsbG9jKGNvdW50Miwgc2l6ZW9mKCpzdGF0dXMpKSkpIHsKKyAgICAgICAgICBicmFpbGxlQ29sdW1ucyA9IGNvbHVtbnMxOworICAgICAgICAgIGJyYWlsbGVSb3dzID0gcm93czE7CisgICAgICAgICAgYnJhaWxsZUNvdW50ID0gY291bnQxOworCisgICAgICAgICAgc3RhdHVzQ29sdW1ucyA9IGNvbHVtbnMyOworICAgICAgICAgIHN0YXR1c1Jvd3MgPSByb3dzMjsKKyAgICAgICAgICBzdGF0dXNDb3VudCA9IGNvdW50MjsKKworICAgICAgICAgIGlmIChicmFpbGxlQ2VsbHMpIGZyZWUoYnJhaWxsZUNlbGxzKTsKKyAgICAgICAgICBicmFpbGxlQ2VsbHMgPSBicmFpbGxlOworICAgICAgICAgIG1lbXNldChicmFpbGxlQ2VsbHMsIDAsIGNvdW50MSk7CisKKyAgICAgICAgICBpZiAodGV4dENoYXJhY3RlcnMpIGZyZWUodGV4dENoYXJhY3RlcnMpOworICAgICAgICAgIHRleHRDaGFyYWN0ZXJzID0gdGV4dDsKKyAgICAgICAgICB3bWVtc2V0KHRleHRDaGFyYWN0ZXJzLCBXQ19DKCcgJyksIGNvdW50MSk7CisKKyAgICAgICAgICBpZiAoc3RhdHVzQ2VsbHMpIGZyZWUoc3RhdHVzQ2VsbHMpOworICAgICAgICAgIHN0YXR1c0NlbGxzID0gc3RhdHVzOworICAgICAgICAgIG1lbXNldChzdGF0dXNDZWxscywgMCwgY291bnQyKTsKKyAgICAgICAgICBtZW1zZXQoZ2VuZXJpY0NlbGxzLCAwLCBHU0NfQ09VTlQpOworCisgICAgICAgICAgYnJsLT50ZXh0Q29sdW1ucyA9IGJyYWlsbGVDb2x1bW5zOworICAgICAgICAgIGJybC0+dGV4dFJvd3MgPSBicmFpbGxlUm93czsKKyAgICAgICAgICBicmwtPnN0YXR1c0NvbHVtbnMgPSBzdGF0dXNDb2x1bW5zOworICAgICAgICAgIGJybC0+c3RhdHVzUm93cyA9IHN0YXR1c1Jvd3M7CisgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgIH0KKworICAgICAgICBmcmVlKHRleHQpOworICAgICAgfQorCisgICAgICBmcmVlKGJyYWlsbGUpOworICAgIH0KKyAgfQorCisgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50CiticmxfY29uc3RydWN0IChCcmFpbGxlRGlzcGxheSAqYnJsLCBjaGFyICoqcGFyYW1ldGVycywgY29uc3QgY2hhciAqZGV2aWNlKSB7CisgIGlmICghYWxsb2NhdGVDb21tYW5kRGVzY3JpcHRvcnMoKSkgcmV0dXJuIDA7CisKKyAgaW5wdXRMZW5ndGggPSAwOworICBpbnB1dFN0YXJ0ID0gMDsKKyAgaW5wdXRFbmQgPSAwOworICBvdXRwdXRMZW5ndGggPSAwOworCisgIGlmIChoYXNRdWFsaWZpZXIoJmRldmljZSwgImNsaWVudCIpKSB7CisgICAgc3RhdGljIGNvbnN0IE1vZGVFbnRyeSBjbGllbnRNb2RlRW50cnkgPSB7CisjaWZkZWYgQUZfTE9DQUwKKyAgICAgIHJlcXVlc3RMb2NhbENvbm5lY3Rpb24sCisjZW5kaWYgLyogQUZfTE9DQUwgKi8KKworI2lmZGVmIF9fTUlOR1czMl9fCisgICAgICByZXF1ZXN0TmFtZWRQaXBlQ29ubmVjdGlvbiwKKyNlbmRpZiAvKiBfX01JTkdXMzJfXyAqLworCisgICAgICByZXF1ZXN0SW5ldENvbm5lY3Rpb24KKyAgICB9OworICAgIG1vZGUgPSAmY2xpZW50TW9kZUVudHJ5OworICB9IGVsc2UgaWYgKGhhc1F1YWxpZmllcigmZGV2aWNlLCAic2VydmVyIikpIHsKKyAgICBzdGF0aWMgY29uc3QgTW9kZUVudHJ5IHNlcnZlck1vZGVFbnRyeSA9IHsKKyNpZmRlZiBBRl9MT0NBTAorICAgICAgYWNjZXB0TG9jYWxDb25uZWN0aW9uLAorI2VuZGlmIC8qIEFGX0xPQ0FMICovCisKKyNpZmRlZiBfX01JTkdXMzJfXworICAgICAgYWNjZXB0TmFtZWRQaXBlQ29ubmVjdGlvbiwKKyNlbmRpZiAvKiBfX01JTkdXMzJfXyAqLworCisgICAgICBhY2NlcHRJbmV0Q29ubmVjdGlvbgorICAgIH07CisgICAgbW9kZSA9ICZzZXJ2ZXJNb2RlRW50cnk7CisgIH0gZWxzZSB7CisgICAgdW5zdXBwb3J0ZWREZXZpY2VJZGVudGlmaWVyKGRldmljZSk7CisgICAgZ290byBmYWlsZWQ7CisgIH0KKyAgaWYgKCEqZGV2aWNlKSBkZXZpY2UgPSBWUl9ERUZBVUxUX1NPQ0tFVDsKKworI2lmZGVmIEFGX0xPQ0FMCisgIGlmIChkZXZpY2VbMF0gPT0gJy8nKSB7CisgICAgc3RydWN0IHNvY2thZGRyX3VuIGFkZHJlc3M7CisgICAgaWYgKHNldExvY2FsQWRkcmVzcyhkZXZpY2UsICZhZGRyZXNzKSkgeworICAgICAgZmlsZURlc2NyaXB0b3IgPSBtb2RlLT5nZXRMb2NhbENvbm5lY3Rpb24oJmFkZHJlc3MpOworICAgIH0KKyAgfSBlbHNlCisjZW5kaWYgLyogQUZfTE9DQUwgKi8KKworI2lmZGVmIF9fTUlOR1czMl9fCisgIGlmIChkZXZpY2VbMF0gPT0gJ1xcJykgeworICAgIGZpbGVEZXNjcmlwdG9yID0gbW9kZS0+Z2V0TmFtZWRQaXBlQ29ubmVjdGlvbihkZXZpY2UpOworICB9IGVsc2UgeworICAgIHN0YXRpYyBXU0FEQVRBIHdzYWRhdGE7CisgICAgaWYgKFdTQVN0YXJ0dXAoTUFLRVdPUkQoMSwgMSksICZ3c2FkYXRhKSkgeworICAgICAgbG9nV2luZG93c1N5c3RlbUVycm9yKCJzb2NrZXQgbGlicmFyeSBzdGFydCIpOworICAgICAgZ290byBmYWlsZWQ7CisgICAgfQorICB9CisjZW5kaWYgLyogX19NSU5HVzMyX18gKi8KKworICB7CisgICAgc3RydWN0IHNvY2thZGRyX2luIGFkZHJlc3M7CisgICAgaWYgKHNldEluZXRBZGRyZXNzKGRldmljZSwgJmFkZHJlc3MpKSB7CisgICAgICBmaWxlRGVzY3JpcHRvciA9IG1vZGUtPmdldEluZXRDb25uZWN0aW9uKCZhZGRyZXNzKTsKKyAgICB9CisgIH0KKworICBpZiAoZmlsZURlc2NyaXB0b3IgIT0gLTEpIHsKKyAgICBjaGFyICpsaW5lID0gTlVMTDsKKworICAgIHdoaWxlICgxKSB7CisgICAgICBpZiAobGluZSkgZnJlZShsaW5lKTsKKyAgICAgIGlmICgobGluZSA9IHJlYWRDb21tYW5kTGluZSgpKSkgeworICAgICAgICBjb25zdCBjaGFyICp3b3JkOworICAgICAgICBsb2dNZXNzYWdlKExPR19ERUJVRywgImNvbW1hbmQgcmVjZWl2ZWQ6ICVzIiwgbGluZSk7CisKKyAgICAgICAgaWYgKCh3b3JkID0gc3RydG9rKGxpbmUsIGlucHV0RGVsaW1pdGVycykpKSB7CisgICAgICAgICAgaWYgKHRlc3RXb3JkKHdvcmQsICJjZWxscyIpKSB7CisgICAgICAgICAgICBpZiAoZGltZW5zaW9uc0NoYW5nZWQoYnJsKSkgeworICAgICAgICAgICAgICBmcmVlKGxpbmUpOworICAgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9IGVsc2UgaWYgKHRlc3RXb3JkKHdvcmQsICJxdWl0IikpIHsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBsb2dNZXNzYWdlKExPR19XQVJOSU5HLCAidW5leHBlY3RlZCBjb21tYW5kOiAlcyIsIHdvcmQpOworICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgfSBlbHNlIHsKKyAgICAgICAgYXN5bmNXYWl0KDEwMDApOworICAgICAgfQorICAgIH0KKyAgICBpZiAobGluZSkgZnJlZShsaW5lKTsKKworICAgIGNsb3NlKGZpbGVEZXNjcmlwdG9yKTsKKyAgICBmaWxlRGVzY3JpcHRvciA9IC0xOworICB9CisKK2ZhaWxlZDoKKyAgZGVhbGxvY2F0ZUNvbW1hbmREZXNjcmlwdG9ycygpOworICByZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQKK2JybF9kZXN0cnVjdCAoQnJhaWxsZURpc3BsYXkgKmJybCkgeworICBpZiAoc3RhdHVzQ2VsbHMpIHsKKyAgICBmcmVlKHN0YXR1c0NlbGxzKTsKKyAgICBzdGF0dXNDZWxscyA9IE5VTEw7CisgIH0KKworICBpZiAodGV4dENoYXJhY3RlcnMpIHsKKyAgICBmcmVlKHRleHRDaGFyYWN0ZXJzKTsKKyAgICB0ZXh0Q2hhcmFjdGVycyA9IE5VTEw7CisgIH0KKworICBpZiAoYnJhaWxsZUNlbGxzKSB7CisgICAgZnJlZShicmFpbGxlQ2VsbHMpOworICAgIGJyYWlsbGVDZWxscyA9IE5VTEw7CisgIH0KKworICBpZiAoZmlsZURlc2NyaXB0b3IgIT0gLTEpIHsKKyAgICBjbG9zZShmaWxlRGVzY3JpcHRvcik7CisgICAgZmlsZURlc2NyaXB0b3IgPSAtMTsKKyAgfQorCisgIGRlYWxsb2NhdGVDb21tYW5kRGVzY3JpcHRvcnMoKTsKK30KKworc3RhdGljIGludAorYnJsX3dyaXRlV2luZG93IChCcmFpbGxlRGlzcGxheSAqYnJsLCBjb25zdCB3Y2hhcl90ICp0ZXh0KSB7CisgIGlmICh0ZXh0KSB7CisgICAgaWYgKHdtZW1jbXAodGV4dCwgdGV4dENoYXJhY3RlcnMsIGJyYWlsbGVDb3VudCkgIT0gMCkgeworICAgICAgY29uc3Qgd2NoYXJfdCAqYWRkcmVzcyA9IHRleHQ7CisgICAgICBpbnQgY291bnQgPSBicmFpbGxlQ291bnQ7CisKKyAgICAgIHdyaXRlU3RyaW5nKCJWaXN1YWwgXCIiKTsKKworICAgICAgd2hpbGUgKGNvdW50LS0gPiAwKSB7CisgICAgICAgIHdjaGFyX3QgY2hhcmFjdGVyID0gKmFkZHJlc3MrKzsKKworICAgICAgICBzd2l0Y2ggKGNoYXJhY3RlcikgeworICAgICAgICAgIGNhc2UgV0NfQygnIicpOgorICAgICAgICAgIGNhc2UgV0NfQygnXFwnKToKKyAgICAgICAgICAgIHdyaXRlQ2hhcmFjdGVyKFdDX0MoJ1xcJykpOworICAgICAgICAgICAgLyogZmFsbCB0aHJvdWdoICovCisgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHdyaXRlQ2hhcmFjdGVyKGNoYXJhY3Rlcik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgfQorCisgICAgICB3cml0ZVN0cmluZygiXCIiKTsKKyAgICAgIHdyaXRlTGluZSgpOworCisgICAgICB3bWVtY3B5KHRleHRDaGFyYWN0ZXJzLCB0ZXh0LCBicmFpbGxlQ291bnQpOworICAgIH0KKyAgfQorCisgIGlmIChjZWxsc0hhdmVDaGFuZ2VkKGJyYWlsbGVDZWxscywgYnJsLT5idWZmZXIsIGJyYWlsbGVDb3VudCwgTlVMTCwgTlVMTCwgTlVMTCkpIHsKKyAgICB3cml0ZVN0cmluZygiQnJhaWxsZSBcIiIpOworICAgIHdyaXRlRG90cyhicmwtPmJ1ZmZlciwgYnJhaWxsZUNvdW50KTsKKyAgICB3cml0ZVN0cmluZygiXCIiKTsKKyAgICB3cml0ZUxpbmUoKTsKKyAgfQorCisgIHJldHVybiAxOworfQorCitzdGF0aWMgaW50Citicmxfd3JpdGVTdGF0dXMgKEJyYWlsbGVEaXNwbGF5ICpicmwsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnN0YXR1cykgeworICBpbnQgZ2VuZXJpYyA9IHN0YXR1c1tHU0NfRklSU1RdID09IEdTQ19NQVJLRVI7CisgIHVuc2lnbmVkIGNoYXIgKmNlbGxzOworICBpbnQgY291bnQ7CisKKyAgaWYgKGdlbmVyaWMpIHsKKyAgICBjZWxscyA9IGdlbmVyaWNDZWxsczsKKyAgICBjb3VudCA9IEdTQ19DT1VOVDsKKyAgfSBlbHNlIHsKKyAgICBjZWxscyA9IHN0YXR1c0NlbGxzOworICAgIGNvdW50ID0gc3RhdHVzQ291bnQ7CisgIH0KKworICBpZiAoY2VsbHNIYXZlQ2hhbmdlZChjZWxscywgc3RhdHVzLCBjb3VudCwgTlVMTCwgTlVMTCwgTlVMTCkpIHsKKyAgICBpZiAoZ2VuZXJpYykgeworICAgICAgaW50IGFsbCA9IGNlbGxzW0dTQ19GSVJTVF0gIT0gR1NDX01BUktFUjsKKyAgICAgIGludCBpOworCisgICAgICBmb3IgKGk9MTsgaTxjb3VudDsgKytpKSB7CisgICAgICAgIHVuc2lnbmVkIGNoYXIgdmFsdWUgPSBzdGF0dXNbaV07CisgICAgICAgIGlmIChhbGwgfHwgKHZhbHVlICE9IGNlbGxzW2ldKSkgeworICAgICAgICAgIHN0YXRpYyBjb25zdCBjaGFyICpjb25zdCBuYW1lc1tdID0geworICAgICAgICAgICAgW0dTQ19GSVJTVF0gPSBOVUxMLAorICAgICAgICAgICAgW2dzY0JyYWlsbGVXaW5kb3dDb2x1bW5dID0gIkJSTENPTCIsCisgICAgICAgICAgICBbZ3NjQnJhaWxsZVdpbmRvd1Jvd10gPSAiQlJMUk9XIiwKKyAgICAgICAgICAgIFtnc2NTY3JlZW5DdXJzb3JDb2x1bW5dID0gIkNTUkNPTCIsCisgICAgICAgICAgICBbZ3NjU2NyZWVuQ3Vyc29yUm93XSA9ICJDU1JST1ciLAorICAgICAgICAgICAgW2dzY1NjcmVlbk51bWJlcl0gPSAiU0NSTlVNIiwKKyAgICAgICAgICAgIFtnc2NGcm96ZW5TY3JlZW5dID0gIkZSRUVaRSIsCisgICAgICAgICAgICBbZ3NjRGlzcGxheU1vZGVdID0gIkRJU1BNRCIsCisgICAgICAgICAgICBbZ3NjU2l4RG90Q29tcHV0ZXJCcmFpbGxlXSA9ICJTSVhET1RTIiwKKyAgICAgICAgICAgIFtnc2NDb250cmFjdGVkQnJhaWxsZV0gPSAiQ09OVFJBQ1RFRCIsCisgICAgICAgICAgICBbZ3NjU2xpZGluZ0JyYWlsbGVXaW5kb3ddID0gIlNMSURFV0lOIiwKKyAgICAgICAgICAgIFtnc2NTa2lwSWRlbnRpY2FsTGluZXNdID0gIlNLUElETE5TIiwKKyAgICAgICAgICAgIFtnc2NTa2lwQmxhbmtCcmFpbGxlV2luZG93c10gPSAiU0tQQkxOS1dJTlMiLAorICAgICAgICAgICAgW2dzY1Nob3dTY3JlZW5DdXJzb3JdID0gIkNTUlZJUyIsCisgICAgICAgICAgICBbZ3NjSGlkZVNjcmVlbkN1cnNvcl0gPSAiQ1NSSElERSIsCisgICAgICAgICAgICBbZ3NjVHJhY2tTY3JlZW5DdXJzb3JdID0gIkNTUlRSSyIsCisgICAgICAgICAgICBbZ3NjU2NyZWVuQ3Vyc29yU3R5bGVdID0gIkNTUlNJWkUiLAorICAgICAgICAgICAgW2dzY0JsaW5raW5nU2NyZWVuQ3Vyc29yXSA9ICJDU1JCTElOSyIsCisgICAgICAgICAgICBbZ3NjU2hvd0F0dHJpYnV0ZXNdID0gIkFUVFJWSVMiLAorICAgICAgICAgICAgW2dzY0JsaW5raW5nQXR0cmlidXRlc10gPSAiQVRUUkJMSU5LIiwKKyAgICAgICAgICAgIFtnc2NCbGlua2luZ0NhcGl0YWxzXSA9ICJDQVBCTElOSyIsCisgICAgICAgICAgICBbZ3NjQWxlcnRUdW5lc10gPSAiVFVORVMiLAorICAgICAgICAgICAgW2dzY0F1dG9yZXBlYXRdID0gIkFVVE9SRVBFQVQiLAorICAgICAgICAgICAgW2dzY0F1dG9zcGVha10gPSAiQVVUT1NQRUFLIiwKKyAgICAgICAgICAgIFtnc2NCcmFpbGxlVHlwaW5nTW9kZV0gPSAiQlJMVUNET1RTIgorICAgICAgICAgIH07CisgICAgICAgICAgY29uc3QgaW50IG5hbWVDb3VudCA9IEFSUkFZX0NPVU5UKG5hbWVzKTsKKworICAgICAgICAgIGlmIChpIDwgbmFtZUNvdW50KSB7CisgICAgICAgICAgICBjb25zdCBjaGFyICpuYW1lID0gbmFtZXNbaV07CisgICAgICAgICAgICBpZiAobmFtZSkgeworICAgICAgICAgICAgICBjaGFyIGJ1ZmZlclswWDQwXTsKKyAgICAgICAgICAgICAgc25wcmludGYoYnVmZmVyLCBzaXplb2YoYnVmZmVyKSwgIiVzICVkIiwgbmFtZSwgdmFsdWUpOworICAgICAgICAgICAgICB3cml0ZVN0cmluZyhidWZmZXIpOworICAgICAgICAgICAgICB3cml0ZUxpbmUoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgd3JpdGVTdHJpbmcoIlN0YXR1cyBcIiIpOworICAgICAgd3JpdGVEb3RzKGNlbGxzLCBjb3VudCk7CisgICAgICB3cml0ZVN0cmluZygiXCIiKTsKKyAgICAgIHdyaXRlTGluZSgpOworICAgIH0KKyAgfQorCisgIHJldHVybiAxOworfQorCitzdGF0aWMgaW50CiticmxfcmVhZENvbW1hbmQgKEJyYWlsbGVEaXNwbGF5ICpicmwsIEtleVRhYmxlQ29tbWFuZENvbnRleHQgY29udGV4dCkgeworICBpbnQgY29tbWFuZCA9IEVPRjsKKyAgY2hhciAqbGluZSA9IHJlYWRDb21tYW5kTGluZSgpOworCisgIGlmIChsaW5lKSB7CisgICAgY29uc3QgY2hhciAqd29yZDsKKyAgICBsb2dNZXNzYWdlKExPR19ERUJVRywgIkNvbW1hbmQgcmVjZWl2ZWQ6ICVzIiwgbGluZSk7CisKKyAgICBpZiAoKHdvcmQgPSBzdHJ0b2sobGluZSwgaW5wdXREZWxpbWl0ZXJzKSkpIHsKKyAgICAgIGlmICh0ZXN0V29yZCh3b3JkLCAiY2VsbHMiKSkgeworICAgICAgICBpZiAoZGltZW5zaW9uc0NoYW5nZWQoYnJsKSkgYnJsLT5yZXNpemVSZXF1aXJlZCA9IDE7CisgICAgICB9IGVsc2UgaWYgKHRlc3RXb3JkKHdvcmQsICJxdWl0IikpIHsKKyAgICAgICAgY29tbWFuZCA9IEJSTF9DTURfUkVTVEFSVEJSTDsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIGNvbnN0IENvbW1hbmREZXNjcmlwdG9yICpkZXNjcmlwdG9yID0gZmluZENvbW1hbmQod29yZCk7CisgICAgICAgIGlmIChkZXNjcmlwdG9yKSB7CisgICAgICAgICAgaW50IG5lZWRzTnVtYmVyID0gZGVzY3JpcHRvci0+Y291bnQgPiAwOworICAgICAgICAgIGludCBudW1iZXJTcGVjaWZpZWQgPSAwOworICAgICAgICAgIGludCBzd2l0Y2hTcGVjaWZpZWQgPSAwOworICAgICAgICAgIGludCBibG9jazsKKworICAgICAgICAgIGNvbW1hbmQgPSBkZXNjcmlwdG9yLT5lbnRyeS0+Y29kZTsKKyAgICAgICAgICBibG9jayA9IGNvbW1hbmQgJiBCUkxfTVNLX0JMSzsKKworICAgICAgICAgIHdoaWxlICgod29yZCA9IG5leHRXb3JkKCkpKSB7CisgICAgICAgICAgICBpZiAoYmxvY2sgPT0gMCkgeworICAgICAgICAgICAgICBpZiAoIXN3aXRjaFNwZWNpZmllZCkgeworICAgICAgICAgICAgICAgIGlmICh0ZXN0V29yZCh3b3JkLCAib24iKSkgeworICAgICAgICAgICAgICAgICAgc3dpdGNoU3BlY2lmaWVkID0gMTsKKyAgICAgICAgICAgICAgICAgIGNvbW1hbmQgfD0gQlJMX0ZMR19UT0dHTEVfT047CisgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBpZiAodGVzdFdvcmQod29yZCwgIm9mZiIpKSB7CisgICAgICAgICAgICAgICAgICBzd2l0Y2hTcGVjaWZpZWQgPSAxOworICAgICAgICAgICAgICAgICAgY29tbWFuZCB8PSBCUkxfRkxHX1RPR0dMRV9PRkY7CisgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKG5lZWRzTnVtYmVyICYmICFudW1iZXJTcGVjaWZpZWQpIHsKKyAgICAgICAgICAgICAgaW50IG51bWJlcjsKKyAgICAgICAgICAgICAgaWYgKGlzSW50ZWdlcigmbnVtYmVyLCB3b3JkKSkgeworICAgICAgICAgICAgICAgIGlmICgobnVtYmVyID4gMCkgJiYgKG51bWJlciA8PSBkZXNjcmlwdG9yLT5jb3VudCkpIHsKKyAgICAgICAgICAgICAgICAgIG51bWJlclNwZWNpZmllZCA9IDE7CisgICAgICAgICAgICAgICAgICBjb21tYW5kICs9IG51bWJlcjsKKyAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICBsb2dNZXNzYWdlKExPR19XQVJOSU5HLCAiTnVtYmVyIG91dCBvZiByYW5nZS4iKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgbG9nTWVzc2FnZShMT0dfV0FSTklORywgInVua25vd24gb3B0aW9uOiAlcyIsIHdvcmQpOworICAgICAgICAgIH0KKworICAgICAgICAgIGlmIChuZWVkc051bWJlciAmJiAhbnVtYmVyU3BlY2lmaWVkKSB7CisgICAgICAgICAgICBsb2dNZXNzYWdlKExPR19XQVJOSU5HLCAiTnVtYmVyIG5vdCBzcGVjaWZpZWQuIik7CisgICAgICAgICAgICBjb21tYW5kID0gRU9GOworICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICBsb2dNZXNzYWdlKExPR19XQVJOSU5HLCAidW5rbm93biBjb21tYW5kOiAlcyIsIHdvcmQpOworICAgICAgICB9CisgICAgICB9CisgICAgfQorCisgICAgZnJlZShsaW5lKTsKKyAgfQorCisgIHJldHVybiBjb21tYW5kOworfQpkaWZmIC0tZ2l0IGEvRHJpdmVycy9CcmFpbGxlL1ZpcnR1YWwvYnJhaWxsZS5oIGIvRHJpdmVycy9CcmFpbGxlL1ZpcnR1YWwvYnJhaWxsZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFkOTc3NzMKLS0tIC9kZXYvbnVsbAorKysgYi9Ecml2ZXJzL0JyYWlsbGUvVmlydHVhbC9icmFpbGxlLmgKQEAgLTAsMCArMSwyNSBAQAorLyoKKyAqIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisgKiAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisgKgorICogQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKKy8qIFZpcnR1YWwvYnJhaWxsZS5oIC0gQ29uZmlndXJhYmxlIGRlZmluaXRpb25zIGZvciB0aGUgVmlydHVhbCBkcml2ZXIKKyAqCisgKiBFZGl0IGFzIG5lY2Vzc2FyeSBmb3IgeW91ciBzeXN0ZW0uCisgKi8KKworI2RlZmluZSBWUl9ERUZBVUxUX1NPQ0tFVCAiMTI3LjAuMC4xIgorI2RlZmluZSBWUl9ERUZBVUxUX1BPUlQgMzU3NTIKZGlmZiAtLWdpdCBhL0RyaXZlcnMvQnJhaWxsZS9WaXNpb0JyYWlsbGUvTWFrZWZpbGUuaW4gYi9Ecml2ZXJzL0JyYWlsbGUvVmlzaW9CcmFpbGxlL01ha2VmaWxlLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZkYjA2MDMKLS0tIC9kZXYvbnVsbAorKysgYi9Ecml2ZXJzL0JyYWlsbGUvVmlzaW9CcmFpbGxlL01ha2VmaWxlLmluCkBAIC0wLDAgKzEsNTcgQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyMgICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisjCisjIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyMKKyMgQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitEUklWRVJfQ09ERSA9IHZzCitEUklWRVJfTkFNRSA9IFZpc2lvQnJhaWxsZQorRFJJVkVSX1VTQUdFID0gMjAvNDAKK0RSSVZFUl9WRVJTSU9OID0gMC4yICgyMDAyKQorRFJJVkVSX0RFVkVMT1BFUlMgPSBTw6liYXN0aWVuIEhpbmRlcmVyIDxTZWJhc3RpZW4uSGluZGVyZXJAZW5zLWx5b24ub3JnPgoraW5jbHVkZSAkKFNSQ19UT1ApYnJhaWxsZS5taworCiticmFpbGxlLiRPOgorCSQoQ0MpICQoQlJMX0NGTEFHUykgLWMgJChTUkNfRElSKS9icmFpbGxlLmMKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitWU1RQX09CSkVDVFMgPSB2c3RwX21haW4uJE8gdnN0cF90cmFuc2Zlci4kTworCit2c3RwJFg6ICQoVlNUUF9PQkpFQ1RTKSBicmxhcGkKKwkkKENDKSAkKExERkxBR1MpIC1vICRAICQoVlNUUF9PQkpFQ1RTKSAkKEFQSV9MSUJTKSAkKExETElCUykKKwordnN0cF9tYWluLiRPOgorCSQoQ0MpICQoQ0ZMQUdTKSAtYyAkKFNSQ19ESVIpL3ZzdHBfbWFpbi5jCisKK3ZzdHBfdHJhbnNmZXIuJE86CisJJChDQykgJChDRkxBR1MpIC1jICQoU1JDX0RJUikvdnN0cF90cmFuc2Zlci5jCisKK2FwaTogdnN0cCRYCiticmFpbGxlLWFsbDo6ICQoQlVJTERfQVBJKQorCitjbGVhbjo6CisJLXJtIC1mIHZzdHAkWAorCitpbnN0YWxsLWFwaTo6IGluc3RhbGwtdnN0cAorCitpbnN0YWxsLXZzdHA6IHZzdHAkWCBpbnN0YWxsLXByb2dyYW0tZGlyZWN0b3J5IGluc3RhbGwtbWFuMS1kaXJlY3RvcnkKKwkkKElOU1RBTExfUFJPR1JBTSkgdnN0cCRYICQoSU5TVEFMTF9QUk9HUkFNX0RJUkVDVE9SWSkKKwkkKElOU1RBTExfREFUQSkgJChTUkNfRElSKS92c3RwLjEgJChJTlNUQUxMX01BTjFfRElSRUNUT1JZKQorCit1bmluc3RhbGw6OgorCS1ybSAtZiAkKElOU1RBTExfUFJPR1JBTV9ESVJFQ1RPUlkpL3ZzdHAkWAorCS1ybSAtZiAkKElOU1RBTExfTUFOMV9ESVJFQ1RPUlkpL3ZzdHAuMQorCmRpZmYgLS1naXQgYS9Ecml2ZXJzL0JyYWlsbGUvVmlzaW9CcmFpbGxlL1JFQURNRSBiL0RyaXZlcnMvQnJhaWxsZS9WaXNpb0JyYWlsbGUvUkVBRE1FCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZlOGFlYzQKLS0tIC9kZXYvbnVsbAorKysgYi9Ecml2ZXJzL0JyYWlsbGUvVmlzaW9CcmFpbGxlL1JFQURNRQpAQCAtMCwwICsxLDEwMSBAQAorQ2VjaSBlc3QgbGUgZmljaGllciBSRUFETUUgcmVsYXRpZiDDoCBsYSB2ZXJzaW9uIDAuMiBkdSBwaWxvdGUgVmlzaW9CcmFpbGxlCitwb3VyIEJSTFRUWS4KKworQ2UgcGlsb3RlIGEgw6l0w6kgdGVzdMOpIGF2ZWMgc3VjY8OocyBhdmVjIGxlcyB0ZXJtaW5hdXggw6lxdWlww6lzIGRlIFBST01zIDAuMGcgZXQKKzUuMHEtZnIuIElsIGVzdCB2cmFpc2VtYmxhYmxlIHF1ZSB0b3V0ZXMgbGVzIFBST01zIGRlIHZlcnNpb24gPj00Citzb2llbnQgc3VwcG9ydMOpZXMgcGFyIGxlIHByw6lzZW50IHBpbG90ZS4KKworQXV0ZXVyIGV0IG1haW50ZW5ldXIgYWN0dWVsOgorU8OpYmFzdGllbiBIaW5kZXJlciA8U2ViYXN0aWVuLkhpbmRlcmVyQGVucy1seW9uLm9yZz4KKworQmllbiBxdWUgY2UgcGlsb3RlIHNvaXQgdXRpbGlzw6kgZGUgbWFuacOocmUgaW50ZW5zaXZlLCBpbCBuJ2VzdCBwYXMgaW1wb3NzaWJsZQorcXVlIGNlcnRhaW5lcyBlcnJldXJzIHN1YnNpc3RlbnQuCitTaSB2b3VzIGVuIHRyb3V2ZXosIG91IHNpIHZvdXMgYXZleiBkZXMgY29tbWVudGFpcmVzL3N1Z2dlc3Rpb25zIHF1YW50IMOgCitsJ8Opdm9sdXRpb24gZGUgY2UgcGlsb3RlLCBuJ2jDqXNpdGV6IHN1cnRvdXQgcGFzIMOgIG1lIGNvbnRhY3Rlci4gCisKK05vdGVzIHBvdXIgbCdpbnN0YWxsYXRpb24gZXQgUGFyYW3DqHRyZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitVbmUgdGFibGUgYnJhaWxsZSBjb21wYXRpYmxlIGF2ZWMgY2VsbGUgZm91cm5pZSBlbiBzdGFuZGFyZCBkYW5zIGxlIFRWQgorKGJhc8OpZSBzdXIgbGEgdGFibGUgU0FHRU0pIGVzdCBkaXNwb25pYmxlLCBkYW5zIGxlIGZpY2hpZXIgdGV4dC52aXNpb2IudGJsIGR1Cityw6lwZXJ0b2lyZSAuLi8uLi9CcmFpbGxlVGFibGVzCisKK1BhcmFtw6h0cmVzIGFjY2VwdMOpcyBwYXIgY2UgcGlsb3RlIDoKKworLSBkaXNwbGF5c2l6ZSA6IHBlcm1ldCBkZSBzcMOpY2lmaWVyIGxhIHRhaWxsZSBkZSBsYSBwbGFnZSB0YWN0aWxlLgorCistIHByb212ZXJzaW9uOiBwZXJtZXQgZGUgc3DDqWNpZmllciBsYSB2ZXJzaW9uIGRlIFBST00gdXRpbGlzw6llLgorQ2UgcGFyYW3DqHRyZSBuJ2VzdCBuw6ljZXNzYWlyZSBxdWUgcG91ciBkZXMgUFJPTXMgZGUgdmVyc2lvbiBpbmbDqXJpZXVyZSBvdQorw6lnYWxlIMOgIDMuIExlIHN1cHBvcnQgZGUgY2VzIFBST01zIG4nw6l0YW50IGRpc3BvbmlibGUgcXVlIHBvdXIgTGludXgsIGV0Cittb3llbm5hbnQgdW5lIG1vZGlmaWNhdGlvbiBkdSBub3lhdSwgbWVyY2kgZGUgY29udGFjdGVyIGRpcmVjdGVtZW50IGwnYXV0ZXVyCitzaSB2b3VzIHNvdWhhaXRleiB1dGlsaXNlciB1bmUgdGVsbGUgUFJPTS4KKworLSBiYXVkOiBwZXJtZXQgZGUgc3DDqWNpZmllciBsYSB2aXRlc3NlIGRlIGxhIGNvbW11bmljYXRpb24gc8OpcmllLgorQ2UgcGFybcOodHJlIG4nZXN0IHBhcyBuw6ljZXNzYWlyZSBwb3VyIGxlcyB0ZXJtaW5hdXggVmlzaW9CcmFpbGxlIGV0CituJ2VzdCBmb3VybmkgcXVlIHBvdXIgcGVybWV0dHJlIGwndXRpbGlzYXRpb24gZCfDqW11bGF0ZXVycyBkZSB0ZXJtaW5hdXggcXVpCituZSBwb3VycmFpZW50IHBhcyBjb21tdW5pcXVlciDDoCB1bmUgdml0ZXNzZSBzdWZmaXNhbnRlLiBQYXIgY29uc8OpcXVlbnQsCituJ3V0aWxpc2V6IHBhcyBjZSBwYXJhbcOodHJlLCDDoCBtb2lucyBkZSBzYXZvaXIgY2UgcXVlIHZvdXMgZmFpdGVzLgorCitQb3VyIGRlcyBpbmZvcm1hdGlvbnMgc3VyIGxhIG1hbmnDqHJlIGRlIHBhc3NlciBkZXMgcGFyYW3DqHRyZXMgYXUgcGlsb3RlLCBvdQorcG91ciB0b3V0ZSBhdXRyZSBwcsOpY2lzaW9uIGNvbmNlcm5hbnQgbCdpbnN0YWxsYXRpb24gZXQgbCd1dGlsaXNhdGlvbiBkZQorYnJsdHR5LCBtZXJjaSBkZSBjb25zdWx0ZXIgbGEgZG9jdW1lbnRhdGlvbiBkdSByw6lwZXJ0b2lyZSAuLi8uLi9Eb2N1bWVudHMKKworTm90ZXMgcG91ciBsJ3V0aWxpc2F0aW9uLiAKKz09PT09PT09PT09PT09PT09PT09PT09PT0KKworICBWb2ljaSBsYSBkZXNjcmlwdGlvbiBkZXMgZm9uY3Rpb25zIGF0dGFjaMOpZXMgYXV4IHRvdWNoZXMgZGVzIGNsYXZpZXJzCithdXhpbGlhaXJlcyBhaW5zaSBxdSdhdXggY29tbWFuZGVzIHBsb2MtcGxvYy4KKworfn5hIEFjdGl2ZSBsJ2FpZGUgZGUgQlJMVFRZCit+fmIgQWN0aXZlL2TDqXNhY3RpdmUgbGVzIGJpcHMKK35+YyBNZW51IGRlIGNvbmZpZ3VyYXRpb24gQlJMVFRZICh+fmMgcG91ciBsZSBxdWl0dGVyKQorfn5kIHBhZ2UgZG93bgorfn5lIGVuZAorfn5oIGhvbWUgCit+fmkgQWN0aXZlL2TDqXNhY3RpdmUgbGUgbW9kZSBpbmZvIChDZiBsZSBtYW51ZWwgQlJMVFRZIHBvdXIgZW4gc2F2b2lyIHBsdXMpCit+fnIgUsOpaW5pdGlhbGlzZSBsZXMgcGFyYW3DqHRyZXMgZGUgQlJMVFRZCit+fnMgU2F1dmVnYXJkZSBsYSBjb25maWd1cmF0aW9uIGRlcyBwYXJhbcOodHJlcyBCUkxUVFkgIAorfn51IHBhZ2UgdXAKKworQ2xhdmllciBhdXhpbGlhaXJlOiAKK1NvdXMgTGludXgsIGxlcyB0b3VjaGVzIEExLEEyLEEzLEE2LEE3LEE4IHBlcm1ldHRlbnQgZCdhY3RpdmVyIGxlcworNiBwcmVtacOocmVzIGNvbnNvbGVzIHZpcnR1ZWxsZXMgKGNvcnJlc3BvbmQgw6AgYWx0LWYxIMOgIGFsdC1mNikuCitMJ2FjdGlvbiBkZSBjZXMgdG91Y2hlcyBuJ2VzdCBwYXMgZMOpZmluaWUgc3VyIGxlcyBhdXRyZXMgc3lzdMOobWVzCitkJ2V4cGxvaXRhdGlvbi4KK0I2IGNvaW4gc3Vww6lyaWV1ciBnYXVjaGUgZGUgbCfDqWNyYW4KK0Q2IGNvaW4gaW5mw6lyaWV1ciBnYXVjaGUgZGUgbCfDqWNyYW4KK0E0IGZlbsOqdHJlIG5vbiB2aWRlIHByw6ljw6lkZW50ZQorQTUgZmVuw6p0cmUgbm9uIHZpZGUgc3VpdmFudGUKK0I3IGxpZ25lIHByw6ljw6lkZW50ZQorRDcgbGlnbmUgc3VpdmFudGUKK0M2IGZlbsOqdHJlIHByw6ljw6lkZW50ZQorQzggZmVuw6p0cmUgc3VpdmFudGUKK0M3IGZlbsOqdHJlIGNvbnRlbmFudCBsZSBjdXJzZXVyCitDMSBmbMOoY2hlIGdhdWNoZQorQzMgZmzDqGNoZSBkcm9pdGUKK0IyIGZsw6hjaGUgaGF1dAorRDIgZmzDqGNoZSBiYXMKK0IzIGN1cnNldXIgb24vb2ZmCitEMSBkZWxldGUKKworICBFbiBvdXRyZSwgbGVzIHRvdWNoZXMgYmFja3NwYWNlLCB0YWIsIGN0cmwsIGFsdC4uLiBzb250IHNpdWzDqWVzIGRlIGxhIG3Dqm1lCittYW5pw6hyZSBxdWUgc291cyBET1MgZXQgV2luZG93cy4KKworQXV0cmVzIGxpZW5zCis9PT09PT09PT09PT0KKworVW4gcHJvZ3JhbW1lIHBlcm1ldHRhbnQgbGUgdHJhbnNmZXJ0IGRlIHZpc2lvYmFzZXMgZW50cmUgUEMgZXQgVFZCIGVzdAorZGlzcG9uaWJsZSDDoCBsJ2FkcmVzc2Ugc3VpdmFudGUgOgorCitodHRwOi8vYnJsLnRoZWZyZWVjYXQub3JnCisKK0NlIHF1J2lsIHJlc3RlIMOgIGZhaXJlCis9PT09PT09PT09PT09PT09PT09PT09CisKKyAgUG91ciBsZXMgcHJvY2hhaW5lcyB2ZXJzaW9ucyBkdSBkcml2ZXIsIGlsIHNlcmFpdCBwZXV0LcOqdHJlIHNvdWhhaXRhYmxlCitkJ2luY2x1cmUgbGEgcG9zc2liaWxpdMOpIGRlIHJlcHJvaHJhbW1lciBsZXMgdG91Y2hlcywgdW4gcGV1IGNvbW1lIGNlbGEgc2UKK2ZhaXQgc291cyBET1MgYXZlYyBsYSBjb21tYW5kZSB+fmYuCisKKworLS0gCitTw6liYXN0aWVuIEhpbmRlcmVyIDxTZWJhc3RpZW4uSGluZGVyZXJAZW5zLWx5b24ub3JnPgpkaWZmIC0tZ2l0IGEvRHJpdmVycy9CcmFpbGxlL1Zpc2lvQnJhaWxsZS9icmFpbGxlLmMgYi9Ecml2ZXJzL0JyYWlsbGUvVmlzaW9CcmFpbGxlL2JyYWlsbGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xODFjOGI0Ci0tLSAvZGV2L251bGwKKysrIGIvRHJpdmVycy9CcmFpbGxlL1Zpc2lvQnJhaWxsZS9icmFpbGxlLmMKQEAgLTAsMCArMSw0NDMgQEAKKy8qCisgKiBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorICogICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorICoKKyAqIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorICoKKyAqIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyAqLworCisjaW5jbHVkZSAicHJvbG9ndWUuaCIKKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKyNpbmNsdWRlICJsb2cuaCIKKyNpbmNsdWRlICJwYXJzZS5oIgorI2luY2x1ZGUgInNjci5oIgorI2luY2x1ZGUgIm1lc3NhZ2UuaCIKKwordHlwZWRlZiBlbnVtIHsKKyAgUEFSTV9ESVNQU0laRT0wLAorICBQQVJNX1BST01WRVI9MSwKKyAgUEFSTV9CQVVEPTIKK30gRHJpdmVyUGFyYW1ldGVyOworI2RlZmluZSBCUkxQQVJNUyAiZGlzcGxheXNpemUiLCAicHJvbXZlcnNpb24iLCAiYmF1ZCIKKworI2RlZmluZSBCUkxfSEFWRV9QQUNLRVRfSU8KKyNpbmNsdWRlICJicmxfZHJpdmVyLmgiCisjaW5jbHVkZSAiYnJhaWxsZS5oIgorI2luY2x1ZGUgImJybGRlZnMtdnMuaCIKKyNpbmNsdWRlICJpb19zZXJpYWwuaCIKKworI2RlZmluZSBNQVhQQUNLRVRTSVpFIDUxMgorCitzdGF0aWMgU2VyaWFsRGV2aWNlICpzZXJpYWxEZXZpY2U7CisjaWZkZWYgU2VuZElkUmVxCitzdGF0aWMgc3RydWN0IFRlcm1JbmZvIHsKKyAgdW5zaWduZWQgY2hhciBjb2RlOyAKKyAgdW5zaWduZWQgY2hhciB2ZXJzaW9uWzNdOworICB1bnNpZ25lZCBjaGFyIGYxOworICB1bnNpZ25lZCBjaGFyIHNpemVbMl07CisgIHVuc2lnbmVkIGNoYXIgZG9uZ2xlOworICB1bnNpZ25lZCBjaGFyIGNsb2NrOworICB1bnNpZ25lZCBjaGFyIHJvdXRpbmc7CisgIHVuc2lnbmVkIGNoYXIgZmxhc2g7CisgIHVuc2lnbmVkIGNoYXIgcHJvZzsKKyAgdW5zaWduZWQgY2hhciBsY2Q7CisgIHVuc2lnbmVkIGNoYXIgZjJbMTFdOworfSB0ZXJtaW5mbzsKKyNlbmRpZiAvKiBTZW5kSWRSZXEgKi8KKworLyogRnVuY3Rpb24gOiBicmxfd3JpdGVQYWNrZXQgKi8gCisvKiBTZW5kcyBhIHBhY2tldCBvZiBzaXplIGJ5dGVzLCBzdG9yZWQgYXQgYWRkcmVzcyBwIHRvIHRoZSBicmFpbGxlIHRlcm1pbmFsICovCisvKiBSZXR1cm5zIDAgaWYgZXZlcnl0aGluZyBpcyByaWdodCwgLTEgaWYgYW4gZXJyb3Igb2NjdXJlZCB3aGlsZSBzZW5kaW5nICovCitzdGF0aWMgc3NpemVfdCBicmxfd3JpdGVQYWNrZXQoQnJhaWxsZURpc3BsYXkgKmJybCwgY29uc3Qgdm9pZCAqcGFja2V0LCBzaXplX3Qgc2l6ZSkKK3sKKyAgY29uc3QgdW5zaWduZWQgY2hhciAqcCA9IHBhY2tldDsKKyAgaW50IGxndGhvID0gMTsKKyAgdW5zaWduZWQgY2hhciBvYnVmW01BWFBBQ0tFVFNJWkVdOworICBjb25zdCB1bnNpZ25lZCBjaGFyICp4OworICB1bnNpZ25lZCBjaGFyICp5ID0gb2J1ZjsKKyAgdW5zaWduZWQgY2hhciBjaGtzdW09MDsKKyAgaW50IGkscmVzOworCisgICp5KysgPSAwMjsKKyAgZm9yICh4PXA7ICh4LXApIDwgc2l6ZTsgeCsrKSB7CisgICAgY2hrc3VtIF49ICp4OworICAgIGlmICgoKngpIDw9IDUpIHsKKyAgICAgICp5ID0gMDE7CisgICAgICB5Kys7IGxndGhvKys7IAorICAgICAgKnkgPSAoICp4ICkgfCAweDQwOworICAgIH0gZWxzZSAqeSA9ICp4OworICAgIHkrKzsgbGd0aG8rKzsgCisgIH0KKyAgaWYgKGNoa3N1bTw9NSkgeworICAgICp5ID0gMTsgeSsrOyBsZ3RobysrOyAgCisgICAgY2hrc3VtIHw9IDB4NDA7CisgIH0KKyAgKnkgPSBjaGtzdW07IHkrKzsgbGd0aG8rKzsgCisgICp5ID0gMzsgeSsrOyBsZ3RobysrOyAKKyAgZm9yIChpPTE7IGk8PTU7IGkrKykgeworICAgIGlmIChzZXJpYWxXcml0ZURhdGEoc2VyaWFsRGV2aWNlLG9idWYsbGd0aG8pICE9IGxndGhvKSBjb250aW51ZTsgLyogd3JpdGUgZmFpbGVkLCByZXRyeSAqLworICAgIHNlcmlhbEF3YWl0T3V0cHV0KHNlcmlhbERldmljZSk7CisgICAgc2VyaWFsQXdhaXRJbnB1dChzZXJpYWxEZXZpY2UsIDEwMDApOworICAgIHJlcyA9IHNlcmlhbFJlYWREYXRhKHNlcmlhbERldmljZSwmY2hrc3VtLDEsMCwwKTsKKyAgICBpZiAoKHJlcz09MSkgJiYgKGNoa3N1bSA9PSAweDA0KSkgcmV0dXJuIDA7CisgIH0KKyAgcmV0dXJuICgtMSk7Cit9CisKKy8qIEZ1bmN0aW9uIDogYnJsX3JlYWRQYWNrZXQgKi8KKy8qIFJlYWRzIGEgcGFja2V0IG9mIGF0IG1vc3Qgc2l6ZSBieXRlcyBmcm9tIHRoZSBicmFpbGxlIHRlcm1pbmFsICovCisvKiBhbmQgcHV0cyBpdCBhdCB0aGUgc3BlY2lmaWVkIGFkcmVzcyAqLworLyogUGFja2V0cyBhcmUgcmVhZCBpbnRvIGEgbG9jYWwgYnVmZmVyIHVudGlsIGNvbXBsZXRlZCBhbmQgdmFsaWQgKi8KKy8qIGFuZCBhcmUgdGhlbiBjb3BpZWQgdG8gdGhlIGJ1ZmZlciBwb2ludGVkIGJ5IHAuIEluIHRoaXMgY2FzZSwgKi8KKy8qIFRoZSBzaXplIG9mIHRoZSBwYWNrZXQgaXMgcmV0dXJuZWQgKi8KKy8qIElmIGEgcGFja2V0IGlzIHRvbyBsb25nLCBpdCBpcyBkaXNjYXJkZWQgYW5kIGEgbWVzc2FnZSBzZW50IHRvIHRoZSBzeXNsb2cgKi8KKy8qICIrIiBwYWNrZXRzIGFyZSBzaWxlbnRseSBkaXNjYXJkZWQsIHNpbmNlIHRoZXkgYXJlIG9ubHkgZGlzdHVyYmluZyB1cyAqLworc3RhdGljIHNzaXplX3QgYnJsX3JlYWRQYWNrZXQoQnJhaWxsZURpc3BsYXkgKmJybCwgdm9pZCAqcCwgc2l6ZV90IHNpemUpIAoreworICBzaXplX3Qgb2Zmc2V0ID0gMDsKKyAgc3RhdGljIHVuc2lnbmVkIGNoYXIgYWNrID0gMDQ7CisgIHN0YXRpYyB1bnNpZ25lZCBjaGFyIG5hY2sgPSAwNTsKKyAgc3RhdGljIGludCBhcGFja2V0ID0gMDsKKyAgc3RhdGljIHVuc2lnbmVkIGNoYXIgcHJlZml4LCBjaGVja3N1bTsKKyAgdW5zaWduZWQgY2hhciBjaDsKKyAgc3RhdGljIHVuc2lnbmVkIGNoYXIgYnVmW01BWFBBQ0tFVFNJWkVdOyAKKyAgc3RhdGljIHVuc2lnbmVkIGNoYXIgKnE7CisgIGlmICgocD09TlVMTCkgfHwgKHNpemU8MikgfHwgKHNpemU+TUFYUEFDS0VUU0laRSkpIHJldHVybiAwOyAKKyAgd2hpbGUgKHNlcmlhbFJlYWRDaHVuayhzZXJpYWxEZXZpY2UsJmNoLCZvZmZzZXQsMSwwLDEwMDApKSB7CisgICAgaWYgKGNoPT0weDAyKSB7CisgICAgICBhcGFja2V0ID0gMTsKKyAgICAgIHByZWZpeCA9IDB4ZmY7IAorICAgICAgY2hlY2tzdW0gPSAwOworICAgICAgcSA9ICZidWZbMF07CisgICAgfSBlbHNlIGlmIChhcGFja2V0KSB7CisgICAgICBpZiAoY2g9PTB4MDEpIHsKKyAgICAgICAgcHJlZml4ICY9IH4oMHg0MCk7IAorICAgICAgfSBlbHNlIGlmIChjaD09MHgwMykgeworICAgICAgICBpZiAoY2hlY2tzdW09PTApIHsKKyAgICAgICAgICBzZXJpYWxXcml0ZURhdGEoc2VyaWFsRGV2aWNlLCZhY2ssMSk7IAorICAgICAgICAgIGFwYWNrZXQgPSAwOyBxLS07CisgICAgICAgICAgaWYgKGJ1ZlswXSE9JysnKSB7CisgICAgICAgICAgICBtZW1jcHkocCxidWYsKHEtYnVmKSk7CisgICAgICAgICAgICByZXR1cm4gcS0mYnVmWzBdOyAKKyAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgc2VyaWFsV3JpdGVEYXRhKHNlcmlhbERldmljZSwmbmFjaywxKTsKKyAgICAgICAgICBhcGFja2V0ID0gMDsKKyAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQorICAgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKChxLSZidWZbMF0pPj1zaXplKSB7CisgICAgICAgICAgbG9nTWVzc2FnZShMT0dfV0FSTklORywiUGFja2V0IHRvbyBsb25nOiBkaXNjYXJkZWQiKTsKKyAgICAgICAgICBhcGFja2V0ID0gMDsKKyAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQorICAgICAgICBjaCAmPSBwcmVmaXg7IHByZWZpeCB8PSAweDQwOworICAgICAgICBjaGVja3N1bSBePSBjaDsKKyAgICAgICAgKCpxKSA9IGNoOyBxKys7ICAgCisgICAgICB9CisgICAgfQorICAgIG9mZnNldCA9IDA7CisgIH0gCisgIHJldHVybiAwOworfQorCisvKiBGdW5jdGlvbiA6IGJybF9yZXNldCAqLworLyogVGhpcyByb3V0aW5lIGlzIGNhbGxlZCBieSB0aGUgYnJsbmV0IHNlcnZlciwgd2hlbiBhbiBhcHBsaWNhdGlvbiB0aGF0ICovCisvKiByZXF1ZXN0ZWQgYSByYXctbW9kZSBjb21tdW5pY2F0aW9uIHdpdGggdGhlIGJyYWlsbGUgdGVybWluYWwgZGllcyBiZWZvcmUgKi8KKy8qIHJlc3RvcmluZyBhIG5vcm1hbCBjb21tdW5pY2F0aW9uIG1vZGUgKi8KK3N0YXRpYyBpbnQgYnJsX3Jlc2V0KEJyYWlsbGVEaXNwbGF5ICpicmwpCit7CisgIHN0YXRpYyB1bnNpZ25lZCBjaGFyIFJlc2N1ZVBhY2tldFtdID0geycjJ307IAorICBicmxfd3JpdGVQYWNrZXQoYnJsLFJlc2N1ZVBhY2tldCxzaXplb2YoUmVzY3VlUGFja2V0KSk7CisgIHJldHVybiAxOworfQorCisvKiBGdW5jdGlvbiA6IGJybF9jb25zdHJ1Y3QgKi8KKy8qIE9wZW5zIGFuZCBjb25maWd1cmVzIHRoZSBzZXJpYWwgcG9ydCBwcm9wZXJseSAqLworLyogaWYgYnJsLT50ZXh0Q29sdW1ucyA8PSAwIHdoZW4gYnJsX2NvbnN0cnVjdCBpcyBjYWxsZWQsIHRoZW4gYnJsLT50ZXh0Q29sdW1ucyBpcyBpbml0aWFsaXplZCAqLworLyogZWl0aGVyIHdpdGggdGhlIEJSQUlMTEVESVNQTEFZU0laRSBjb25zdGFudCwgZGVmaW5lZCBpbiBicmFpbGxlLmggKi8KKy8qIG9yIHdpdGggdGhlIHNpemUgZ290IHRocm91Z2ggaWRlbnRpZmljYXRpb24gcmVxdWVzdCBpZiBpdCBzdWNjZWVkcyAqLworLyogRWxzZSwgYnJsLT50ZXh0Q29sdW1ucyBpcyBsZWZ0IHVubW9kaWZpZWQgYnkgYnJsX2NvbnN0cnVjdCwgc28gdGhhdCAqLworLyogdGhlIGJyYWlsbGUgZGlzcGxheSBjYW4gYmUgcmVzaXplZCB3aXRob3V0IHJlbG9hZGluZyB0aGUgZHJpdmVyICovIAorc3RhdGljIGludCBicmxfY29uc3RydWN0KEJyYWlsbGVEaXNwbGF5ICpicmwsIGNoYXIgKipwYXJhbWV0ZXJzLCBjb25zdCBjaGFyICpkZXZpY2UpCit7CisjaWZkZWYgU2VuZElkUmVxCisgIHVuc2lnbmVkIGNoYXIgY2ggPSAnPyc7CisgIGludCBpOworI2VuZGlmIC8qIFNlbmRJZFJlcSAqLworICBpbnQgZHMgPSBCUkFJTExFRElTUExBWVNJWkU7CisgIGludCBwcm9tVmVyc2lvbiA9IDQ7CisgIHVuc2lnbmVkIGludCB0dHlCYXVkID0gNTc2MDA7CisgIGlmICgqcGFyYW1ldGVyc1tQQVJNX0RJU1BTSVpFXSkgeworICAgIGludCBkc21pbj0yMCwgZHNtYXg9NDA7CisgICAgaWYgKCF2YWxpZGF0ZUludGVnZXIoJmRzLCBwYXJhbWV0ZXJzW1BBUk1fRElTUFNJWkVdLCAmZHNtaW4sICZkc21heCkpCisgICAgICBsb2dNZXNzYWdlKExPR19XQVJOSU5HLCAiJXM6ICVzIiwgImludmFsaWQgYnJhaWxsZSBkaXNwbGF5IHNpemUiLCBwYXJhbWV0ZXJzW1BBUk1fRElTUFNJWkVdKTsKKyAgfQorICBpZiAoKnBhcmFtZXRlcnNbUEFSTV9QUk9NVkVSXSkgeworICAgIGludCBwdm1pbj0zLCBwdm1heD02OworICAgIGlmICghdmFsaWRhdGVJbnRlZ2VyKCZwcm9tVmVyc2lvbiwgcGFyYW1ldGVyc1tQQVJNX1BST01WRVJdLCAmcHZtaW4sICZwdm1heCkpCisgICAgICBsb2dNZXNzYWdlKExPR19XQVJOSU5HLCAiJXM6ICVzIiwgImludmFsaWQgUFJPTSB2ZXJzaW9uIiwgcGFyYW1ldGVyc1tQQVJNX1BST01WRVJdKTsKKyAgfQorICBpZiAoKnBhcmFtZXRlcnNbUEFSTV9CQVVEXSkgeworICAgIHVuc2lnbmVkIGludCBiYXVkOworICAgIGlmIChzZXJpYWxWYWxpZGF0ZUJhdWQoJmJhdWQsICJUVFkgYmF1ZCIsIHBhcmFtZXRlcnNbUEFSTV9CQVVEXSwgTlVMTCkpIHsKKyAgICAgIHR0eUJhdWQgPSBiYXVkOworICAgIH0KKyAgfQorCisgIGlmICghaXNTZXJpYWxEZXZpY2VJZGVudGlmaWVyKCZkZXZpY2UpKSB7CisgICAgdW5zdXBwb3J0ZWREZXZpY2VJZGVudGlmaWVyKGRldmljZSk7CisgICAgcmV0dXJuIDA7CisgIH0KKyAgaWYgKCEoc2VyaWFsRGV2aWNlID0gc2VyaWFsT3BlbkRldmljZShkZXZpY2UpKSkgcmV0dXJuIDA7CisgIHNlcmlhbFNldFBhcml0eShzZXJpYWxEZXZpY2UsIFNFUklBTF9QQVJJVFlfT0REKTsKKyAgaWYgKHByb21WZXJzaW9uPDQpIHNlcmlhbFNldEZsb3dDb250cm9sKHNlcmlhbERldmljZSwgU0VSSUFMX0ZMT1dfSU5QVVRfQ1RTKTsKKyAgc2VyaWFsUmVzdGFydERldmljZShzZXJpYWxEZXZpY2UsdHR5QmF1ZCk7IAorI2lmZGVmIFNlbmRJZFJlcQorICB7CisgICAgYnJsX3dyaXRlUGFja2V0KGJybCwodW5zaWduZWQgY2hhciAqKSAmY2gsMSk7IAorICAgIGk9NTsgCisgICAgd2hpbGUgKGk+MCkgeworICAgICAgaWYgKGJybF9yZWFkUGFja2V0KGJybCwodW5zaWduZWQgY2hhciAqKSAmdGVybWluZm8sc2l6ZW9mKHRlcm1pbmZvKSkhPTApIHsKKyAgICAgICAgaWYgKHRlcm1pbmZvLmNvZGU9PSc/JykgeworICAgICAgICAgIHRlcm1pbmZvLmYyWzEwXSA9ICdcMCc7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICAgIGktLTsKKyAgICB9CisgICAgaWYgKGk9PTApIHsKKyAgICAgIGxvZ01lc3NhZ2UoTE9HX1dBUk5JTkcsIlVuYWJsZSB0byBpZGVudGlmeSB0ZXJtaW5hbCBwcm9wZXJseSIpOyAgCisgICAgICBpZiAoIWJybC0+dGV4dENvbHVtbnMpIGJybC0+dGV4dENvbHVtbnMgPSBCUkFJTExFRElTUExBWVNJWkU7ICAKKyAgICB9IGVsc2UgeworICAgICAgbG9nTWVzc2FnZShMT0dfSU5GTywiQnJhaWxsZSB0ZXJtaW5hbCBkZXNjcmlwdGlvbjoiKTsKKyAgICAgIGxvZ01lc3NhZ2UoTE9HX0lORk8sIiAgIHZlcnNpb249JWMlYyVjIix0ZXJtaW5mby52ZXJzaW9uWzBdLHRlcm1pbmZvLnZlcnNpb25bMV0sdGVybWluZm8udmVyc2lvblsyXSk7CisgICAgICBsb2dNZXNzYWdlKExPR19JTkZPLCIgICBmMT0lYyIsdGVybWluZm8uZjEpOworICAgICAgbG9nTWVzc2FnZShMT0dfSU5GTywiICAgc2l6ZT0lYyVjIix0ZXJtaW5mby5zaXplWzBdLHRlcm1pbmZvLnNpemVbMV0pOworICAgICAgbG9nTWVzc2FnZShMT0dfSU5GTywiICAgZG9uZ2xlPSVjIix0ZXJtaW5mby5kb25nbGUpOworICAgICAgbG9nTWVzc2FnZShMT0dfSU5GTywiICAgY2xvY2s9JWMiLHRlcm1pbmZvLmNsb2NrKTsKKyAgICAgIGxvZ01lc3NhZ2UoTE9HX0lORk8sIiAgIHJvdXRpbmc9JWMiLHRlcm1pbmZvLnJvdXRpbmcpOworICAgICAgbG9nTWVzc2FnZShMT0dfSU5GTywiICAgZmxhc2g9JWMiLHRlcm1pbmZvLmZsYXNoKTsKKyAgICAgIGxvZ01lc3NhZ2UoTE9HX0lORk8sIiAgIHByb2c9JWMiLHRlcm1pbmZvLnByb2cpOworICAgICAgbG9nTWVzc2FnZShMT0dfSU5GTywiICAgbGNkPSVjIix0ZXJtaW5mby5sY2QpOworICAgICAgbG9nTWVzc2FnZShMT0dfSU5GTywiICAgZjI9JXMiLHRlcm1pbmZvLmYyKTsgIAorICAgICAgaWYgKGJybC0+dGV4dENvbHVtbnM8PTApCisgICAgICAgIGJybC0+dGV4dENvbHVtbnMgPSAodGVybWluZm8uc2l6ZVswXS0nMCcpKjEwICsgKHRlcm1pbmZvLnNpemVbMV0tJzAnKTsKKyAgICB9CisgIH0KKyNlbHNlIC8qIFNlbmRJZFJlcSAqLworICBicmwtPnRleHRDb2x1bW5zID0gZHM7CisjZW5kaWYgLyogU2VuZElkUmVxICovCisgIGJybC0+dGV4dFJvd3M9MTsgCisKKyAgeworICAgIC8qIFRoZSBmb2xsb3dpbmcgdGFibGUgZGVmaW5lcyBob3cgaW50ZXJuYWwgYnJsdHR5IGZvcm1hdCBpcyBjb252ZXJ0ZWQgdG8gKi8KKyAgICAvKiBWaXNpb0JyYWlsbGUgZm9ybWF0LiAqLworICAgIC8qIFRoZSB0YWJsZSBpcyBkZWNsYXJlZCBzdGF0aWMgc28gdGhhdCBpdCBpcyBpbiBkYXRhIHNlZ21lbnQgYW5kIG5vdCAqLworICAgIC8qIGluIHRoZSBzdGFjayAqLyAKKyAgICBzdGF0aWMgY29uc3QgVHJhbnNsYXRpb25UYWJsZSBvdXRwdXRUYWJsZSA9IHsKKyNpbmNsdWRlICJicmwtb3V0LmgiCisgICAgfTsKKyAgICBzZXRPdXRwdXRUYWJsZShvdXRwdXRUYWJsZSk7CisgIH0KKworICByZXR1cm4gMTsKK30KKworLyogRnVuY3Rpb24gOiBicmxfZGVzdHJ1Y3QgKi8KKy8qIENsb3NlcyB0aGUgYnJhaWxsZSBkZXZpY2UgYW5kIGRlYWxsb2NhdGVzIGR5bmFtaWMgc3RydWN0dXJlcyAqLworc3RhdGljIHZvaWQgYnJsX2Rlc3RydWN0KEJyYWlsbGVEaXNwbGF5ICpicmwpCit7CisgIGlmIChzZXJpYWxEZXZpY2UpIHsKKyAgICBzZXJpYWxDbG9zZURldmljZShzZXJpYWxEZXZpY2UpOworICB9Cit9CisKKy8qIGZ1bmN0aW9uIDogYnJsX3dyaXRlV2luZG93ICovCisvKiBEaXNwbGF5cyBhIHRleHQgb24gdGhlIGJyYWlsbGUgd2luZG93LCBvbmx5IGlmIGl0J3MgZGlmZmVyZW50IGZyb20gKi8KKy8qIHRoZSBvbmUgYWxyZWFkeiBkaXNwbGF5ZWQgKi8KK3N0YXRpYyBpbnQgYnJsX3dyaXRlV2luZG93KEJyYWlsbGVEaXNwbGF5ICpicmwsIGNvbnN0IHdjaGFyX3QgKnRleHQpCit7CisgIHN0YXRpYyB1bnNpZ25lZCBjaGFyIGJyYWlsbGVEaXNwbGF5WzgxXT0geyAweDNlIH07IC8qIHNob3VsZCBiZSBsYXJnZSBlbm91Z2ggZm9yIGV2ZXJ5b25lICovCisgIHN0YXRpYyB1bnNpZ25lZCBjaGFyIHByZXZEYXRhWzgwXTsKKworICBpZiAoY2VsbHNIYXZlQ2hhbmdlZChwcmV2RGF0YSwgYnJsLT5idWZmZXIsIGJybC0+dGV4dENvbHVtbnMsIE5VTEwsIE5VTEwsIE5VTEwpKSB7CisgICAgdHJhbnNsYXRlT3V0cHV0Q2VsbHMoYnJhaWxsZURpc3BsYXkrMSwgYnJsLT5idWZmZXIsIGJybC0+dGV4dENvbHVtbnMpOworICAgIGlmIChicmxfd3JpdGVQYWNrZXQoYnJsLCAodW5zaWduZWQgY2hhciAqKSZicmFpbGxlRGlzcGxheSwgYnJsLT50ZXh0Q29sdW1ucysxKSA9PSAtMSkgcmV0dXJuIDA7CisgIH0KKworICByZXR1cm4gMTsKK30KKworLyogRnVuY3Rpb24gOiBrZXlUb0NvbW1hbmQgKi8KKy8qIENvbnZlcnRzIGEga2V5IGNvZGUgdG8gYSBicmx0dHkgY29tbWFuZCBhY2NvcmRpbmcgdG8gdGhlIGNvbnRleHQgKi8KK3N0YXRpYyBpbnQga2V5VG9Db21tYW5kKEJyYWlsbGVEaXNwbGF5ICpicmwsIEtleVRhYmxlQ29tbWFuZENvbnRleHQgY29udGV4dCwgaW50IGNvZGUpCit7CisgIHN0YXRpYyBpbnQgY3RybHByZXNzZWQgPSAwOyAKKyAgc3RhdGljIGludCBhbHRwcmVzc2VkID0gMDsKKyAgc3RhdGljIGludCBjdXQgPSAwOworICBzdGF0aWMgaW50IGRlc2NjaGFyID0gMDsKKyAgdW5zaWduZWQgY2hhciBjaDsKKyAgaW50IHR5cGU7CisgIGNoID0gY29kZSAmIDB4ZmY7CisgIHR5cGUgPSBjb2RlICYgKH4gMHhmZik7CisgIGlmIChjb2RlPT0wKSByZXR1cm4gMDsKKyAgaWYgKGNvZGU9PUVPRikgcmV0dXJuIEVPRjsKKyAgaWYgKHR5cGU9PUJSTF9WU01TS19DSEFSKSB7CisgICAgaW50IGNvbW1hbmQgPSBjaCB8IEJSTF9DTURfQkxLKFBBU1NDSEFSKSB8IGFsdHByZXNzZWQgfCBjdHJscHJlc3NlZDsKKyAgICBhbHRwcmVzc2VkID0gY3RybHByZXNzZWQgPSAwOworICAgIHJldHVybiBjb21tYW5kOworICB9CisgIGlmICh0eXBlPT1CUkxfVlNNU0tfUk9VVElORykgeworICAgIGN0cmxwcmVzc2VkID0gYWx0cHJlc3NlZCA9IDA7CisgICAgc3dpdGNoIChjdXQpIHsKKyAgICAgIGNhc2UgMDoKKyAgICAgICAgaWYgKGRlc2NjaGFyKSB7IGRlc2NjaGFyID0gMDsgcmV0dXJuICgoaW50KSBjaCkgfCBCUkxfQ01EX0JMSyhERVNDQ0hBUik7IH0KKyAgICAgICAgZWxzZSByZXR1cm4gKChpbnQpIGNoKSB8IEJSTF9DTURfQkxLKFJPVVRFKTsKKyAgICAgIGNhc2UgMTogY3V0Kys7IHJldHVybiAoKGludCkgY2gpIHwgQlJMX0NNRF9CTEsoQ0xJUF9ORVcpOworICAgICAgY2FzZSAyOiBjdXQgPSAwOyByZXR1cm4gKChpbnQpIGNoKSB8IEJSTF9DTURfQkxLKENPUFlfTElORSk7CisgICAgfQorICAgIHJldHVybiBFT0Y7IC8qIFNob3VsZCBub3QgYmUgcmVhY2hlZCAqLworICB9IGVsc2UgaWYgKHR5cGU9PUJSTF9WU01TS19GVU5DVElPTktFWSkgeworICAgIGN0cmxwcmVzc2VkID0gYWx0cHJlc3NlZCA9IDA7CisgICAgc3dpdGNoIChjb2RlKSB7CisgICAgICBjYXNlIEJSTF9WU0tFWV9BMTogcmV0dXJuIEJSTF9DTURfQkxLKFNXSVRDSFZUKTsKKyAgICAgIGNhc2UgQlJMX1ZTS0VZX0EyOiByZXR1cm4gQlJMX0NNRF9CTEsoU1dJVENIVlQpKzE7CisgICAgICBjYXNlIEJSTF9WU0tFWV9BMzogcmV0dXJuIEJSTF9DTURfQkxLKFNXSVRDSFZUKSsyOworICAgICAgY2FzZSBCUkxfVlNLRVlfQTY6IHJldHVybiBCUkxfQ01EX0JMSyhTV0lUQ0hWVCkrMzsKKyAgICAgIGNhc2UgQlJMX1ZTS0VZX0E3OiByZXR1cm4gQlJMX0NNRF9CTEsoU1dJVENIVlQpKzQ7CisgICAgICBjYXNlIEJSTF9WU0tFWV9BODogcmV0dXJuIEJSTF9DTURfQkxLKFNXSVRDSFZUKSs1OworICAgICAgY2FzZSBCUkxfVlNLRVlfQjU6IGN1dCA9IDE7IHJldHVybiBFT0Y7CisgICAgICBjYXNlIEJSTF9WU0tFWV9CNjogcmV0dXJuIEJSTF9DTURfVE9QX0xFRlQ7IAorICAgICAgY2FzZSBCUkxfVlNLRVlfRDY6IHJldHVybiBCUkxfQ01EX0JPVF9MRUZUOworICAgICAgY2FzZSBCUkxfVlNLRVlfQTQ6IHJldHVybiBCUkxfQ01EX0ZXSU5MVFNLSVA7CisgICAgICBjYXNlIEJSTF9WU0tFWV9CODogcmV0dXJuIEJSTF9DTURfRldJTkxUU0tJUDsKKyAgICAgIGNhc2UgQlJMX1ZTS0VZX0E1OiByZXR1cm4gQlJMX0NNRF9GV0lOUlRTS0lQOworICAgICAgY2FzZSBCUkxfVlNLRVlfRDg6IHJldHVybiBCUkxfQ01EX0ZXSU5SVFNLSVA7CisgICAgICBjYXNlIEJSTF9WU0tFWV9CNzogcmV0dXJuIEJSTF9DTURfTE5VUDsKKyAgICAgIGNhc2UgQlJMX1ZTS0VZX0Q3OiByZXR1cm4gQlJMX0NNRF9MTkROOworICAgICAgY2FzZSBCUkxfVlNLRVlfQzg6IHJldHVybiBCUkxfQ01EX0ZXSU5SVDsKKyAgICAgIGNhc2UgQlJMX1ZTS0VZX0M2OiByZXR1cm4gQlJMX0NNRF9GV0lOTFQ7CisgICAgICBjYXNlIEJSTF9WU0tFWV9DNzogcmV0dXJuIEJSTF9DTURfSE9NRTsKKyAgICAgIGNhc2UgQlJMX1ZTS0VZX0IyOiByZXR1cm4gQlJMX0NNRF9LRVkoQ1VSU09SX1VQKTsKKyAgICAgIGNhc2UgQlJMX1ZTS0VZX0QyOiByZXR1cm4gQlJMX0NNRF9LRVkoQ1VSU09SX0RPV04pOworICAgICAgY2FzZSBCUkxfVlNLRVlfQzM6IHJldHVybiBCUkxfQ01EX0tFWShDVVJTT1JfUklHSFQpOworICAgICAgY2FzZSBCUkxfVlNLRVlfQzE6IHJldHVybiBCUkxfQ01EX0tFWShDVVJTT1JfTEVGVCk7CisgICAgICBjYXNlIEJSTF9WU0tFWV9CMzogcmV0dXJuIEJSTF9DTURfQ1NSVklTOworICAgICAgY2FzZSBCUkxfVlNLRVlfRDE6IHJldHVybiBCUkxfQ01EX0tFWShERUxFVEUpOyAgCisgICAgICBjYXNlIEJSTF9WU0tFWV9EMzogcmV0dXJuIEJSTF9DTURfS0VZKElOU0VSVCk7CisgICAgICBjYXNlIEJSTF9WU0tFWV9DNTogcmV0dXJuIEJSTF9DTURfUEFTVEU7CisgICAgICBjYXNlIEJSTF9WU0tFWV9ENTogZGVzY2NoYXIgPSAxOyByZXR1cm4gRU9GOworICAgICAgZGVmYXVsdDogcmV0dXJuIEVPRjsKKyAgICB9CisgIH0gZWxzZSBpZiAodHlwZT09QlJMX1ZTTVNLX09USEVSKSB7CisgICAgLyogY3RybHByZXNzZWQgPSAwOyAqLworICAgIGlmICgoY2g+PTB4ZTEpICYmIChjaDw9MHhlYSkpIHsKKyAgICAgIGludCBmbGFncyA9IGFsdHByZXNzZWQ7CisgICAgICBjaC09MHhlMTsKKyAgICAgIGFsdHByZXNzZWQgPSAwOworICAgICAgcmV0dXJuIGZsYWdzIHwgQlJMX0NNRF9CTEsoUEFTU0tFWSkgfCAoIEJSTF9LRVlfRlVOQ1RJT04gKyBjaCk7IAorICAgIH0KKyAgICAvKiBhbHRwcmVzc2VkID0gMDsgKi8KKyAgICBzd2l0Y2ggKGNvZGUpIHsKKyAgICAgIGNhc2UgQlJMX1ZTS0VZX1BMT0NfTFQ6IHJldHVybiBCUkxfQ01EX1NJWERPVFM7CisgICAgICBjYXNlIEJSTF9WU0tFWV9CQUNLU1BBQ0U6IHJldHVybiBCUkxfQ01EX0tFWShCQUNLU1BBQ0UpOworICAgICAgY2FzZSBCUkxfVlNLRVlfVEFCOiByZXR1cm4gQlJMX0NNRF9LRVkoVEFCKTsKKyAgICAgIGNhc2UgQlJMX1ZTS0VZX1JFVFVSTjogcmV0dXJuIEJSTF9DTURfS0VZKEVOVEVSKTsKKyAgICAgIGNhc2UgQlJMX1ZTS0VZX1BMT0NfUExPQ19BOiByZXR1cm4gQlJMX0NNRF9IRUxQOworICAgICAgY2FzZSBCUkxfVlNLRVlfUExPQ19QTE9DX0I6IHJldHVybiBCUkxfQ01EX1RVTkVTOyAKKyAgICAgIGNhc2UgQlJMX1ZTS0VZX1BMT0NfUExPQ19DOiByZXR1cm4gQlJMX0NNRF9QUkVGTUVOVTsKKyAgICAgIGNhc2UgQlJMX1ZTS0VZX1BMT0NfUExPQ19EOiByZXR1cm4gQlJMX0NNRF9LRVkoUEFHRV9ET1dOKTsKKyAgICAgIGNhc2UgQlJMX1ZTS0VZX1BMT0NfUExPQ19FOiByZXR1cm4gQlJMX0NNRF9LRVkoRU5EKTsKKyAgICAgIGNhc2UgQlJMX1ZTS0VZX1BMT0NfUExPQ19GOiByZXR1cm4gQlJMX0NNRF9GUkVFWkU7CisgICAgICBjYXNlIEJSTF9WU0tFWV9QTE9DX1BMT0NfSDogcmV0dXJuIEJSTF9DTURfS0VZKEhPTUUpOworICAgICAgY2FzZSBCUkxfVlNLRVlfUExPQ19QTE9DX0k6IHJldHVybiBCUkxfQ01EX0lORk87CisgICAgICBjYXNlIEJSTF9WU0tFWV9QTE9DX1BMT0NfTDogcmV0dXJuIEJSTF9DTURfTEVBUk47CisgICAgICBjYXNlIEJSTF9WU0tFWV9QTE9DX1BMT0NfUjogcmV0dXJuIEJSTF9DTURfUFJFRkxPQUQ7CisgICAgICBjYXNlIEJSTF9WU0tFWV9QTE9DX1BMT0NfUzogcmV0dXJuIEJSTF9DTURfUFJFRlNBVkU7CisgICAgICBjYXNlIEJSTF9WU0tFWV9QTE9DX1BMT0NfVDogcmV0dXJuIEJSTF9DTURfQ1NSVFJLOworICAgICAgY2FzZSBCUkxfVlNLRVlfUExPQ19QTE9DX1U6IHJldHVybiBCUkxfQ01EX0tFWShQQUdFX1VQKTsKKyAgICAgIGNhc2UgQlJMX1ZTS0VZX0NPTlRST0w6IGN0cmxwcmVzc2VkID0gQlJMX0ZMR19JTlBVVF9DT05UUk9MOyByZXR1cm4gQlJMX0NNRF9OT09QOworICAgICAgY2FzZSBCUkxfVlNLRVlfQUxUOiBhbHRwcmVzc2VkID0gQlJMX0ZMR19JTlBVVF9NRVRBOyByZXR1cm4gQlJMX0NNRF9OT09QOyAgIAorICAgICAgY2FzZSBCUkxfVlNLRVlfRVNDQVBFOiByZXR1cm4gQlJMX0NNRF9LRVkoRVNDQVBFKTsKKyAgICAgIGRlZmF1bHQ6IHJldHVybiBFT0Y7CisgICAgfQorICB9CisgIHJldHVybiBFT0Y7IAorfQorCisvKiBGdW5jdGlvbiA6IHJlYWRLZXkgKi8KKy8qIFJlYWRzIGEga2V5LiBUaGUgcmVzdWx0IGlzIGNvbnRleHQtaW5kZXBlbmRlbnQgKi8KKy8qIFRoZSBpbnRlcm1lZGlhdGUgdmFsdWUgY29udGFpbnMgYSBrZXljb2RlLCBtYXNrZWQgd2l0aCB0aGUga2V5IHR5cGUgKi8KKy8qIHRoZSBrZXl0eXBlIGlzIG9uZSBvZiBCUkxfTk9STUFMQ0hBUiwgQlJMX0ZVTkNUSU9OS0VZIG9yIEJSTF9ST1VUSU5HICovCisvKiBmb3IgYSBub3JtYWwgY2hhcmFjdGVyLCB0aGUga2V5Y29kZSBpcyB0aGUgbGF0aW4xLWNvZGUgb2YgdGhlIGNoYXJhY3RlciAqLworLyogZm9yIGZ1bmN0aW9uLWtleXMsIGNvZGVzIDAgdG8gMzEgYXJlIHJlc2VydmVkIGZvciBBMSB0byBEOCBrZXlzICovCisvKiBjb2RlcyBhZnRlciAzMiBhcmUgZm9yIH5+KiBjb21iaW5hdGlvbnMsIHRoZSBvcmRlciBoYXMgdG8gYmUgZGV0ZXJtaW5lZCAqLworLyogZm9yIEJSTF9ST1VUSU5HLCB0aGUgY29kZSBpcyB0aGUgb2ZzZXQgdG8gcm91dGUsIHN0YXJ0aW5nIGZyb20gMCAqLworc3RhdGljIGludCByZWFkS2V5KEJyYWlsbGVEaXNwbGF5ICpicmwpCit7CisgIHVuc2lnbmVkIGNoYXIgY2gsIHBhY2tldFtNQVhQQUNLRVRTSVpFXTsKKyAgc3RhdGljIGludCByb3V0aW5nID0gMDsKKyAgc3NpemVfdCBwYWNrZXRTaXplOworICBwYWNrZXRTaXplID0gYnJsX3JlYWRQYWNrZXQoYnJsLHBhY2tldCxzaXplb2YocGFja2V0KSk7CisgIGlmIChwYWNrZXRTaXplPT0wKSByZXR1cm4gRU9GOworICBpZiAoKHBhY2tldFswXSE9MHgzYykgJiYgKHBhY2tldFswXSE9MHgzZCkgJiYgKHBhY2tldFswXSE9MHgyMykpIHsKKyAgICBsb2dVbmV4cGVjdGVkUGFja2V0KHBhY2tldCwgcGFja2V0U2l6ZSk7CisgICAgcmV0dXJuIEVPRjsKKyAgfQorICBjaCA9IHBhY2tldFsxXTsKKyAgaWYgKHJvdXRpbmcpIHsKKyAgICByb3V0aW5nPTA7CisgICAgaWYgKGNoPj0weGMwKSAgcmV0dXJuIChwYWNrZXRbMV0tMHhjMCkgfCBCUkxfVlNNU0tfUk9VVElORzsKKyAgICByZXR1cm4gRU9GOworICB9CisgIGlmICgoY2g+PTB4YzApICYmIChjaDw9MHhkZikpIHJldHVybiAoY2gtMHhjMCkgfCBCUkxfVlNNU0tfRlVOQ1RJT05LRVk7CisgIGlmIChjaD09MHg5MSkgeworICAgIHJvdXRpbmcgPSAxOworICAgIHJldHVybiBCUkxfQ01EX05PT1A7CisgIH0gCisgIGlmICgoY2g+PTB4MjApICYmIChjaDw9MHg5ZSkpIHsKKyAgICBzd2l0Y2ggKGNoKSB7CisgICAgICBjYXNlIDB4ODA6IGNoID0gMHhjNzsgYnJlYWs7CisgICAgICBjYXNlIDB4ODE6IGNoID0gMHhmYzsgYnJlYWs7CisgICAgICBjYXNlIDB4ODI6IGNoID0gMHhlOTsgYnJlYWs7CisgICAgICBjYXNlIDB4ODM6IGNoID0gMHhlMjsgYnJlYWs7CisgICAgICBjYXNlIDB4ODQ6IGNoID0gMHhlNDsgYnJlYWs7CisgICAgICBjYXNlIDB4ODU6IGNoID0gMHhlMDsgYnJlYWs7CisgICAgICBjYXNlIDB4ODc6IGNoID0gMHhlNzsgYnJlYWs7CisgICAgICBjYXNlIDB4ODg6IGNoID0gMHhlYTsgYnJlYWs7CisgICAgICBjYXNlIDB4ODk6IGNoID0gMHhlYjsgYnJlYWs7CisgICAgICBjYXNlIDB4OGE6IGNoID0gMHhlODsgYnJlYWs7IAorICAgICAgY2FzZSAweDhiOiBjaCA9IDB4ZWY7IGJyZWFrOworICAgICAgY2FzZSAweDhjOiBjaCA9IDB4ZWU7IGJyZWFrOworICAgICAgY2FzZSAweDhmOiBjaCA9IDB4YzA7IGJyZWFrOworICAgICAgY2FzZSAweDkzOiBjaCA9IDB4ZjQ7IGJyZWFrOworICAgICAgY2FzZSAweDk0OiBjaCA9IDB4ZjY7IGJyZWFrOworICAgICAgY2FzZSAweDk2OiBjaCA9IDB4ZmI7IGJyZWFrOyAKKyAgICAgIGNhc2UgMHg5NzogY2ggPSAweGY5OyBicmVhazsKKyAgICAgIGNhc2UgMHg5ZTogY2ggPSAweDYwOyBicmVhazsKKyAgICB9CisgICAgcmV0dXJuIGNoIHwgQlJMX1ZTTVNLX0NIQVI7CisgIH0KKyAgcmV0dXJuIGNoIHwgQlJMX1ZTTVNLX09USEVSOworfQorCisvKiBGdW5jdGlvbiA6IGJybF9yZWFkQ29tbWFuZCAqLworLyogUmVhZHMgYSBjb21tYW5kIGZyb20gdGhlIGJyYWlsbGUga2V5Ym9hcmQgKi8KK3N0YXRpYyBpbnQgYnJsX3JlYWRDb21tYW5kKEJyYWlsbGVEaXNwbGF5ICpicmwsIEtleVRhYmxlQ29tbWFuZENvbnRleHQgY29udGV4dCkKK3sKKyAgcmV0dXJuIGtleVRvQ29tbWFuZChicmwsY29udGV4dCxyZWFkS2V5KGJybCkpOworfQpkaWZmIC0tZ2l0IGEvRHJpdmVycy9CcmFpbGxlL1Zpc2lvQnJhaWxsZS9icmFpbGxlLmggYi9Ecml2ZXJzL0JyYWlsbGUvVmlzaW9CcmFpbGxlL2JyYWlsbGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNzQ5MGRmCi0tLSAvZGV2L251bGwKKysrIGIvRHJpdmVycy9CcmFpbGxlL1Zpc2lvQnJhaWxsZS9icmFpbGxlLmgKQEAgLTAsMCArMSwyMiBAQAorLyoKKyAqIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisgKiAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisgKgorICogQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKKyNkZWZpbmUgQlJBSUxMRURJU1BMQVlTSVpFIDQwCisvKiAjZGVmaW5lIFNFTkRJRFJFUSAqLworI2RlZmluZSBCUkxSQVdDQVBBQkxFIC8qIFdlIHN1cHBvcnQgcmF3IG1vZGUgY29tbXVuaWNhdGlvbiAqLworI2RlZmluZSBCUkxLRVkyQ01EIC8qIFdlIHN1cHBvcnQga2V5IHRvIGJybHR0eSBjb21tYW5kcyBjb252ZXJzaW9uICovCmRpZmYgLS1naXQgYS9Ecml2ZXJzL0JyYWlsbGUvVmlzaW9CcmFpbGxlL2JybC1vdXQuaCBiL0RyaXZlcnMvQnJhaWxsZS9WaXNpb0JyYWlsbGUvYnJsLW91dC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdkYzljM2MKLS0tIC9kZXYvbnVsbAorKysgYi9Ecml2ZXJzL0JyYWlsbGUvVmlzaW9CcmFpbGxlL2JybC1vdXQuaApAQCAtMCwwICsxLDI3NCBAQAorLyoKKyAqIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisgKiAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisgKgorICogQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKK1swXSA9IDBYMjAsCitbQlJMX0RPVDFdID0gMFg0MSwKK1tCUkxfRE9UMSB8IEJSTF9ET1QyXSA9IDBYNDIsCitbQlJMX0RPVDEgfCBCUkxfRE9UMiB8IEJSTF9ET1QzXSA9IDBYNEMsCitbQlJMX0RPVDEgfCBCUkxfRE9UMiB8IEJSTF9ET1QzIHwgQlJMX0RPVDRdID0gMFg1MCwKK1tCUkxfRE9UMSB8IEJSTF9ET1QyIHwgQlJMX0RPVDMgfCBCUkxfRE9UNCB8IEJSTF9ET1Q1XSA9IDBYNTEsCitbQlJMX0RPVDEgfCBCUkxfRE9UMiB8IEJSTF9ET1QzIHwgQlJMX0RPVDQgfCBCUkxfRE9UNSB8IEJSTF9ET1Q2XSA9IDBYMkYsCitbQlJMX0RPVDEgfCBCUkxfRE9UMiB8IEJSTF9ET1QzIHwgQlJMX0RPVDQgfCBCUkxfRE9UNSB8IEJSTF9ET1Q2IHwgQlJMX0RPVDddID0gMFhFRiwKK1tCUkxfRE9UMSB8IEJSTF9ET1QyIHwgQlJMX0RPVDMgfCBCUkxfRE9UNCB8IEJSTF9ET1Q1IHwgQlJMX0RPVDYgfCBCUkxfRE9UNyB8IEJSTF9ET1Q4XSA9IDBYNkYsCitbQlJMX0RPVDEgfCBCUkxfRE9UMiB8IEJSTF9ET1QzIHwgQlJMX0RPVDQgfCBCUkxfRE9UNSB8IEJSTF9ET1Q2IHwgQlJMX0RPVDhdID0gMFhBRiwKK1tCUkxfRE9UMSB8IEJSTF9ET1QyIHwgQlJMX0RPVDMgfCBCUkxfRE9UNCB8IEJSTF9ET1Q1IHwgQlJMX0RPVDddID0gMFgxMSwKK1tCUkxfRE9UMSB8IEJSTF9ET1QyIHwgQlJMX0RPVDMgfCBCUkxfRE9UNCB8IEJSTF9ET1Q1IHwgQlJMX0RPVDcgfCBCUkxfRE9UOF0gPSAwWDkxLAorW0JSTF9ET1QxIHwgQlJMX0RPVDIgfCBCUkxfRE9UMyB8IEJSTF9ET1Q0IHwgQlJMX0RPVDUgfCBCUkxfRE9UOF0gPSAwWEQxLAorW0JSTF9ET1QxIHwgQlJMX0RPVDIgfCBCUkxfRE9UMyB8IEJSTF9ET1Q0IHwgQlJMX0RPVDZdID0gMFg0MCwKK1tCUkxfRE9UMSB8IEJSTF9ET1QyIHwgQlJMX0RPVDMgfCBCUkxfRE9UNCB8IEJSTF9ET1Q2IHwgQlJMX0RPVDddID0gMFgwMCwKK1tCUkxfRE9UMSB8IEJSTF9ET1QyIHwgQlJMX0RPVDMgfCBCUkxfRE9UNCB8IEJSTF9ET1Q2IHwgQlJMX0RPVDcgfCBCUkxfRE9UOF0gPSAwWDgwLAorW0JSTF9ET1QxIHwgQlJMX0RPVDIgfCBCUkxfRE9UMyB8IEJSTF9ET1Q0IHwgQlJMX0RPVDYgfCBCUkxfRE9UOF0gPSAwWEMwLAorW0JSTF9ET1QxIHwgQlJMX0RPVDIgfCBCUkxfRE9UMyB8IEJSTF9ET1Q0IHwgQlJMX0RPVDddID0gMFgxMCwKK1tCUkxfRE9UMSB8IEJSTF9ET1QyIHwgQlJMX0RPVDMgfCBCUkxfRE9UNCB8IEJSTF9ET1Q3IHwgQlJMX0RPVDhdID0gMFg5MCwKK1tCUkxfRE9UMSB8IEJSTF9ET1QyIHwgQlJMX0RPVDMgfCBCUkxfRE9UNCB8IEJSTF9ET1Q4XSA9IDBYRDAsCitbQlJMX0RPVDEgfCBCUkxfRE9UMiB8IEJSTF9ET1QzIHwgQlJMX0RPVDVdID0gMFg1MiwKK1tCUkxfRE9UMSB8IEJSTF9ET1QyIHwgQlJMX0RPVDMgfCBCUkxfRE9UNSB8IEJSTF9ET1Q2XSA9IDBYNWIsCitbQlJMX0RPVDEgfCBCUkxfRE9UMiB8IEJSTF9ET1QzIHwgQlJMX0RPVDUgfCBCUkxfRE9UNiB8IEJSTF9ET1Q3XSA9IDBYMUIsCitbQlJMX0RPVDEgfCBCUkxfRE9UMiB8IEJSTF9ET1QzIHwgQlJMX0RPVDUgfCBCUkxfRE9UNiB8IEJSTF9ET1Q3IHwgQlJMX0RPVDhdID0gMFg5QiwKK1tCUkxfRE9UMSB8IEJSTF9ET1QyIHwgQlJMX0RPVDMgfCBCUkxfRE9UNSB8IEJSTF9ET1Q2IHwgQlJMX0RPVDhdID0gMFhEQiwKK1tCUkxfRE9UMSB8IEJSTF9ET1QyIHwgQlJMX0RPVDMgfCBCUkxfRE9UNSB8IEJSTF9ET1Q3XSA9IDBYMTIsCitbQlJMX0RPVDEgfCBCUkxfRE9UMiB8IEJSTF9ET1QzIHwgQlJMX0RPVDUgfCBCUkxfRE9UNyB8IEJSTF9ET1Q4XSA9IDBYOTIsCitbQlJMX0RPVDEgfCBCUkxfRE9UMiB8IEJSTF9ET1QzIHwgQlJMX0RPVDUgfCBCUkxfRE9UOF0gPSAwWEQyLAorW0JSTF9ET1QxIHwgQlJMX0RPVDIgfCBCUkxfRE9UMyB8IEJSTF9ET1Q2XSA9IDBYNTYsCitbQlJMX0RPVDEgfCBCUkxfRE9UMiB8IEJSTF9ET1QzIHwgQlJMX0RPVDYgfCBCUkxfRE9UN10gPSAwWDE2LAorW0JSTF9ET1QxIHwgQlJMX0RPVDIgfCBCUkxfRE9UMyB8IEJSTF9ET1Q2IHwgQlJMX0RPVDcgfCBCUkxfRE9UOF0gPSAwWDk2LAorW0JSTF9ET1QxIHwgQlJMX0RPVDIgfCBCUkxfRE9UMyB8IEJSTF9ET1Q2IHwgQlJMX0RPVDhdID0gMFhENiwKK1tCUkxfRE9UMSB8IEJSTF9ET1QyIHwgQlJMX0RPVDMgfCBCUkxfRE9UN10gPSAwWDBDLAorW0JSTF9ET1QxIHwgQlJMX0RPVDIgfCBCUkxfRE9UMyB8IEJSTF9ET1Q3IHwgQlJMX0RPVDhdID0gMFg4QywKK1tCUkxfRE9UMSB8IEJSTF9ET1QyIHwgQlJMX0RPVDMgfCBCUkxfRE9UOF0gPSAwWENDLAorW0JSTF9ET1QxIHwgQlJMX0RPVDIgfCBCUkxfRE9UNF0gPSAwWDQ2LAorW0JSTF9ET1QxIHwgQlJMX0RPVDIgfCBCUkxfRE9UNCB8IEJSTF9ET1Q1XSA9IDBYNDcsCitbQlJMX0RPVDEgfCBCUkxfRE9UMiB8IEJSTF9ET1Q0IHwgQlJMX0RPVDUgfCBCUkxfRE9UNl0gPSAwWDM3LAorW0JSTF9ET1QxIHwgQlJMX0RPVDIgfCBCUkxfRE9UNCB8IEJSTF9ET1Q1IHwgQlJMX0RPVDYgfCBCUkxfRE9UN10gPSAwWEY3LAorW0JSTF9ET1QxIHwgQlJMX0RPVDIgfCBCUkxfRE9UNCB8IEJSTF9ET1Q1IHwgQlJMX0RPVDYgfCBCUkxfRE9UNyB8IEJSTF9ET1Q4XSA9IDBYNzcsCitbQlJMX0RPVDEgfCBCUkxfRE9UMiB8IEJSTF9ET1Q0IHwgQlJMX0RPVDUgfCBCUkxfRE9UNiB8IEJSTF9ET1Q4XSA9IDBYQjcsCitbQlJMX0RPVDEgfCBCUkxfRE9UMiB8IEJSTF9ET1Q0IHwgQlJMX0RPVDUgfCBCUkxfRE9UN10gPSAwWDA3LAorW0JSTF9ET1QxIHwgQlJMX0RPVDIgfCBCUkxfRE9UNCB8IEJSTF9ET1Q1IHwgQlJMX0RPVDcgfCBCUkxfRE9UOF0gPSAwWDg3LAorW0JSTF9ET1QxIHwgQlJMX0RPVDIgfCBCUkxfRE9UNCB8IEJSTF9ET1Q1IHwgQlJMX0RPVDhdID0gMFhDNywKK1tCUkxfRE9UMSB8IEJSTF9ET1QyIHwgQlJMX0RPVDQgfCBCUkxfRE9UNl0gPSAwWDM2LAorW0JSTF9ET1QxIHwgQlJMX0RPVDIgfCBCUkxfRE9UNCB8IEJSTF9ET1Q2IHwgQlJMX0RPVDddID0gMFhGNiwKK1tCUkxfRE9UMSB8IEJSTF9ET1QyIHwgQlJMX0RPVDQgfCBCUkxfRE9UNiB8IEJSTF9ET1Q3IHwgQlJMX0RPVDhdID0gMFg3NiwKK1tCUkxfRE9UMSB8IEJSTF9ET1QyIHwgQlJMX0RPVDQgfCBCUkxfRE9UNiB8IEJSTF9ET1Q4XSA9IDBYQjYsCitbQlJMX0RPVDEgfCBCUkxfRE9UMiB8IEJSTF9ET1Q0IHwgQlJMX0RPVDddID0gMFgwNiwKK1tCUkxfRE9UMSB8IEJSTF9ET1QyIHwgQlJMX0RPVDQgfCBCUkxfRE9UNyB8IEJSTF9ET1Q4XSA9IDBYODYsCitbQlJMX0RPVDEgfCBCUkxfRE9UMiB8IEJSTF9ET1Q0IHwgQlJMX0RPVDhdID0gMFhDNiwKK1tCUkxfRE9UMSB8IEJSTF9ET1QyIHwgQlJMX0RPVDVdID0gMFg0OCwKK1tCUkxfRE9UMSB8IEJSTF9ET1QyIHwgQlJMX0RPVDUgfCBCUkxfRE9UNl0gPSAwWDM4LAorW0JSTF9ET1QxIHwgQlJMX0RPVDIgfCBCUkxfRE9UNSB8IEJSTF9ET1Q2IHwgQlJMX0RPVDddID0gMFhGOCwKK1tCUkxfRE9UMSB8IEJSTF9ET1QyIHwgQlJMX0RPVDUgfCBCUkxfRE9UNiB8IEJSTF9ET1Q3IHwgQlJMX0RPVDhdID0gMFg3OCwKK1tCUkxfRE9UMSB8IEJSTF9ET1QyIHwgQlJMX0RPVDUgfCBCUkxfRE9UNiB8IEJSTF9ET1Q4XSA9IDBYQjgsCitbQlJMX0RPVDEgfCBCUkxfRE9UMiB8IEJSTF9ET1Q1IHwgQlJMX0RPVDddID0gMFgwOCwKK1tCUkxfRE9UMSB8IEJSTF9ET1QyIHwgQlJMX0RPVDUgfCBCUkxfRE9UNyB8IEJSTF9ET1Q4XSA9IDBYODgsCitbQlJMX0RPVDEgfCBCUkxfRE9UMiB8IEJSTF9ET1Q1IHwgQlJMX0RPVDhdID0gMFhDOCwKK1tCUkxfRE9UMSB8IEJSTF9ET1QyIHwgQlJMX0RPVDZdID0gMFgzMiwKK1tCUkxfRE9UMSB8IEJSTF9ET1QyIHwgQlJMX0RPVDYgfCBCUkxfRE9UN10gPSAwWEYyLAorW0JSTF9ET1QxIHwgQlJMX0RPVDIgfCBCUkxfRE9UNiB8IEJSTF9ET1Q3IHwgQlJMX0RPVDhdID0gMFg3MiwKK1tCUkxfRE9UMSB8IEJSTF9ET1QyIHwgQlJMX0RPVDYgfCBCUkxfRE9UOF0gPSAwWEIyLAorW0JSTF9ET1QxIHwgQlJMX0RPVDIgfCBCUkxfRE9UN10gPSAwWDAyLAorW0JSTF9ET1QxIHwgQlJMX0RPVDIgfCBCUkxfRE9UNyB8IEJSTF9ET1Q4XSA9IDBYODIsCitbQlJMX0RPVDEgfCBCUkxfRE9UMiB8IEJSTF9ET1Q4XSA9IDBYQzIsCitbQlJMX0RPVDEgfCBCUkxfRE9UM10gPSAwWDRCLAorW0JSTF9ET1QxIHwgQlJMX0RPVDMgfCBCUkxfRE9UNF0gPSAwWDRELAorW0JSTF9ET1QxIHwgQlJMX0RPVDMgfCBCUkxfRE9UNCB8IEJSTF9ET1Q1XSA9IDBYNEUsCitbQlJMX0RPVDEgfCBCUkxfRE9UMyB8IEJSTF9ET1Q0IHwgQlJMX0RPVDUgfCBCUkxfRE9UNl0gPSAwWDU5LAorW0JSTF9ET1QxIHwgQlJMX0RPVDMgfCBCUkxfRE9UNCB8IEJSTF9ET1Q1IHwgQlJMX0RPVDYgfCBCUkxfRE9UN10gPSAwWDE5LAorW0JSTF9ET1QxIHwgQlJMX0RPVDMgfCBCUkxfRE9UNCB8IEJSTF9ET1Q1IHwgQlJMX0RPVDYgfCBCUkxfRE9UNyB8IEJSTF9ET1Q4XSA9IDBYOTksCitbQlJMX0RPVDEgfCBCUkxfRE9UMyB8IEJSTF9ET1Q0IHwgQlJMX0RPVDUgfCBCUkxfRE9UNiB8IEJSTF9ET1Q4XSA9IDBYRDksCitbQlJMX0RPVDEgfCBCUkxfRE9UMyB8IEJSTF9ET1Q0IHwgQlJMX0RPVDUgfCBCUkxfRE9UN10gPSAwWDBFLAorW0JSTF9ET1QxIHwgQlJMX0RPVDMgfCBCUkxfRE9UNCB8IEJSTF9ET1Q1IHwgQlJMX0RPVDcgfCBCUkxfRE9UOF0gPSAwWDhFLAorW0JSTF9ET1QxIHwgQlJMX0RPVDMgfCBCUkxfRE9UNCB8IEJSTF9ET1Q1IHwgQlJMX0RPVDhdID0gMFhDRSwKK1tCUkxfRE9UMSB8IEJSTF9ET1QzIHwgQlJMX0RPVDQgfCBCUkxfRE9UNl0gPSAwWDU4LAorW0JSTF9ET1QxIHwgQlJMX0RPVDMgfCBCUkxfRE9UNCB8IEJSTF9ET1Q2IHwgQlJMX0RPVDddID0gMFgxOCwKK1tCUkxfRE9UMSB8IEJSTF9ET1QzIHwgQlJMX0RPVDQgfCBCUkxfRE9UNiB8IEJSTF9ET1Q3IHwgQlJMX0RPVDhdID0gMFg5OCwKK1tCUkxfRE9UMSB8IEJSTF9ET1QzIHwgQlJMX0RPVDQgfCBCUkxfRE9UNiB8IEJSTF9ET1Q4XSA9IDBYRDgsCitbQlJMX0RPVDEgfCBCUkxfRE9UMyB8IEJSTF9ET1Q0IHwgQlJMX0RPVDddID0gMFgwRCwKK1tCUkxfRE9UMSB8IEJSTF9ET1QzIHwgQlJMX0RPVDQgfCBCUkxfRE9UNyB8IEJSTF9ET1Q4XSA9IDBYOEQsCitbQlJMX0RPVDEgfCBCUkxfRE9UMyB8IEJSTF9ET1Q0IHwgQlJMX0RPVDhdID0gMFhDRCwKK1tCUkxfRE9UMSB8IEJSTF9ET1QzIHwgQlJMX0RPVDVdID0gMFg0RiwKK1tCUkxfRE9UMSB8IEJSTF9ET1QzIHwgQlJMX0RPVDUgfCBCUkxfRE9UNl0gPSAwWDVBLAorW0JSTF9ET1QxIHwgQlJMX0RPVDMgfCBCUkxfRE9UNSB8IEJSTF9ET1Q2IHwgQlJMX0RPVDddID0gMFgxQSwKK1tCUkxfRE9UMSB8IEJSTF9ET1QzIHwgQlJMX0RPVDUgfCBCUkxfRE9UNiB8IEJSTF9ET1Q3IHwgQlJMX0RPVDhdID0gMFg5QSwKK1tCUkxfRE9UMSB8IEJSTF9ET1QzIHwgQlJMX0RPVDUgfCBCUkxfRE9UNiB8IEJSTF9ET1Q4XSA9IDBYREEsCitbQlJMX0RPVDEgfCBCUkxfRE9UMyB8IEJSTF9ET1Q1IHwgQlJMX0RPVDddID0gMFgwRiwKK1tCUkxfRE9UMSB8IEJSTF9ET1QzIHwgQlJMX0RPVDUgfCBCUkxfRE9UNyB8IEJSTF9ET1Q4XSA9IDBYOEYsCitbQlJMX0RPVDEgfCBCUkxfRE9UMyB8IEJSTF9ET1Q1IHwgQlJMX0RPVDhdID0gMFhDRiwKK1tCUkxfRE9UMSB8IEJSTF9ET1QzIHwgQlJMX0RPVDZdID0gMFg1NSwKK1tCUkxfRE9UMSB8IEJSTF9ET1QzIHwgQlJMX0RPVDYgfCBCUkxfRE9UN10gPSAwWDE1LAorW0JSTF9ET1QxIHwgQlJMX0RPVDMgfCBCUkxfRE9UNiB8IEJSTF9ET1Q3IHwgQlJMX0RPVDhdID0gMFg5NSwKK1tCUkxfRE9UMSB8IEJSTF9ET1QzIHwgQlJMX0RPVDYgfCBCUkxfRE9UOF0gPSAwWEQ1LAorW0JSTF9ET1QxIHwgQlJMX0RPVDMgfCBCUkxfRE9UN10gPSAwWDBCLAorW0JSTF9ET1QxIHwgQlJMX0RPVDMgfCBCUkxfRE9UNyB8IEJSTF9ET1Q4XSA9IDBYOEIsCitbQlJMX0RPVDEgfCBCUkxfRE9UMyB8IEJSTF9ET1Q4XSA9IDBYQ0IsCitbQlJMX0RPVDEgfCBCUkxfRE9UNF0gPSAwWDQzLAorW0JSTF9ET1QxIHwgQlJMX0RPVDQgfCBCUkxfRE9UNV0gPSAwWDQ0LAorW0JSTF9ET1QxIHwgQlJMX0RPVDQgfCBCUkxfRE9UNSB8IEJSTF9ET1Q2XSA9IDBYMzQsCitbQlJMX0RPVDEgfCBCUkxfRE9UNCB8IEJSTF9ET1Q1IHwgQlJMX0RPVDYgfCBCUkxfRE9UN10gPSAwWEY0LAorW0JSTF9ET1QxIHwgQlJMX0RPVDQgfCBCUkxfRE9UNSB8IEJSTF9ET1Q2IHwgQlJMX0RPVDcgfCBCUkxfRE9UOF0gPSAwWDc0LAorW0JSTF9ET1QxIHwgQlJMX0RPVDQgfCBCUkxfRE9UNSB8IEJSTF9ET1Q2IHwgQlJMX0RPVDhdID0gMFhCNCwKK1tCUkxfRE9UMSB8IEJSTF9ET1Q0IHwgQlJMX0RPVDUgfCBCUkxfRE9UN10gPSAwWDA0LAorW0JSTF9ET1QxIHwgQlJMX0RPVDQgfCBCUkxfRE9UNSB8IEJSTF9ET1Q3IHwgQlJMX0RPVDhdID0gMFg4NCwKK1tCUkxfRE9UMSB8IEJSTF9ET1Q0IHwgQlJMX0RPVDUgfCBCUkxfRE9UOF0gPSAwWEM0LAorW0JSTF9ET1QxIHwgQlJMX0RPVDQgfCBCUkxfRE9UNl0gPSAwWDMzLAorW0JSTF9ET1QxIHwgQlJMX0RPVDQgfCBCUkxfRE9UNiB8IEJSTF9ET1Q3XSA9IDBYRjMsCitbQlJMX0RPVDEgfCBCUkxfRE9UNCB8IEJSTF9ET1Q2IHwgQlJMX0RPVDcgfCBCUkxfRE9UOF0gPSAwWDczLAorW0JSTF9ET1QxIHwgQlJMX0RPVDQgfCBCUkxfRE9UNiB8IEJSTF9ET1Q4XSA9IDBYQjMsCitbQlJMX0RPVDEgfCBCUkxfRE9UNCB8IEJSTF9ET1Q3XSA9IDBYMDMsCitbQlJMX0RPVDEgfCBCUkxfRE9UNCB8IEJSTF9ET1Q3IHwgQlJMX0RPVDhdID0gMFg4MywKK1tCUkxfRE9UMSB8IEJSTF9ET1Q0IHwgQlJMX0RPVDhdID0gMFhDMywKK1tCUkxfRE9UMSB8IEJSTF9ET1Q1XSA9IDBYNDUsCitbQlJMX0RPVDEgfCBCUkxfRE9UNSB8IEJSTF9ET1Q2XSA9IDBYMzUsCitbQlJMX0RPVDEgfCBCUkxfRE9UNSB8IEJSTF9ET1Q2IHwgQlJMX0RPVDddID0gMFhGNSwKK1tCUkxfRE9UMSB8IEJSTF9ET1Q1IHwgQlJMX0RPVDYgfCBCUkxfRE9UNyB8IEJSTF9ET1Q4XSA9IDBYNzUsCitbQlJMX0RPVDEgfCBCUkxfRE9UNSB8IEJSTF9ET1Q2IHwgQlJMX0RPVDhdID0gMFhCNSwKK1tCUkxfRE9UMSB8IEJSTF9ET1Q1IHwgQlJMX0RPVDddID0gMFgwNSwKK1tCUkxfRE9UMSB8IEJSTF9ET1Q1IHwgQlJMX0RPVDcgfCBCUkxfRE9UOF0gPSAwWDg1LAorW0JSTF9ET1QxIHwgQlJMX0RPVDUgfCBCUkxfRE9UOF0gPSAwWEM1LAorW0JSTF9ET1QxIHwgQlJMX0RPVDZdID0gMFgzMSwKK1tCUkxfRE9UMSB8IEJSTF9ET1Q2IHwgQlJMX0RPVDddID0gMFhGMSwKK1tCUkxfRE9UMSB8IEJSTF9ET1Q2IHwgQlJMX0RPVDcgfCBCUkxfRE9UOF0gPSAwWDcxLAorW0JSTF9ET1QxIHwgQlJMX0RPVDYgfCBCUkxfRE9UOF0gPSAwWEIxLAorW0JSTF9ET1QxIHwgQlJMX0RPVDddID0gMFgwMSwKK1tCUkxfRE9UMSB8IEJSTF9ET1Q3IHwgQlJMX0RPVDhdID0gMFg4MSwKK1tCUkxfRE9UMSB8IEJSTF9ET1Q4XSA9IDBYQzEsCitbQlJMX0RPVDJdID0gMFgyQywKK1tCUkxfRE9UMiB8IEJSTF9ET1QzXSA9IDBYM0IsCitbQlJMX0RPVDIgfCBCUkxfRE9UMyB8IEJSTF9ET1Q0XSA9IDBYNTMsCitbQlJMX0RPVDIgfCBCUkxfRE9UMyB8IEJSTF9ET1Q0IHwgQlJMX0RPVDVdID0gMFg1NCwKK1tCUkxfRE9UMiB8IEJSTF9ET1QzIHwgQlJMX0RPVDQgfCBCUkxfRE9UNSB8IEJSTF9ET1Q2XSA9IDBYNUQsCitbQlJMX0RPVDIgfCBCUkxfRE9UMyB8IEJSTF9ET1Q0IHwgQlJMX0RPVDUgfCBCUkxfRE9UNiB8IEJSTF9ET1Q3XSA9IDBYMUQsCitbQlJMX0RPVDIgfCBCUkxfRE9UMyB8IEJSTF9ET1Q0IHwgQlJMX0RPVDUgfCBCUkxfRE9UNiB8IEJSTF9ET1Q3IHwgQlJMX0RPVDhdID0gMFg5RCwKK1tCUkxfRE9UMiB8IEJSTF9ET1QzIHwgQlJMX0RPVDQgfCBCUkxfRE9UNSB8IEJSTF9ET1Q2IHwgQlJMX0RPVDhdID0gMFhERCwKK1tCUkxfRE9UMiB8IEJSTF9ET1QzIHwgQlJMX0RPVDQgfCBCUkxfRE9UNSB8IEJSTF9ET1Q3XSA9IDBYMTQsCitbQlJMX0RPVDIgfCBCUkxfRE9UMyB8IEJSTF9ET1Q0IHwgQlJMX0RPVDUgfCBCUkxfRE9UNyB8IEJSTF9ET1Q4XSA9IDBYOTQsCitbQlJMX0RPVDIgfCBCUkxfRE9UMyB8IEJSTF9ET1Q0IHwgQlJMX0RPVDUgfCBCUkxfRE9UOF0gPSAwWEQ0LAorW0JSTF9ET1QyIHwgQlJMX0RPVDMgfCBCUkxfRE9UNCB8IEJSTF9ET1Q2XSA9IDBYNUMsCitbQlJMX0RPVDIgfCBCUkxfRE9UMyB8IEJSTF9ET1Q0IHwgQlJMX0RPVDYgfCBCUkxfRE9UN10gPSAwWDFDLAorW0JSTF9ET1QyIHwgQlJMX0RPVDMgfCBCUkxfRE9UNCB8IEJSTF9ET1Q2IHwgQlJMX0RPVDcgfCBCUkxfRE9UOF0gPSAwWDlDLAorW0JSTF9ET1QyIHwgQlJMX0RPVDMgfCBCUkxfRE9UNCB8IEJSTF9ET1Q2IHwgQlJMX0RPVDhdID0gMFhEQywKK1tCUkxfRE9UMiB8IEJSTF9ET1QzIHwgQlJMX0RPVDQgfCBCUkxfRE9UN10gPSAwWDEzLAorW0JSTF9ET1QyIHwgQlJMX0RPVDMgfCBCUkxfRE9UNCB8IEJSTF9ET1Q3IHwgQlJMX0RPVDhdID0gMFg5MywKK1tCUkxfRE9UMiB8IEJSTF9ET1QzIHwgQlJMX0RPVDQgfCBCUkxfRE9UOF0gPSAwWEQzLAorW0JSTF9ET1QyIHwgQlJMX0RPVDMgfCBCUkxfRE9UNV0gPSAwWDIxLAorW0JSTF9ET1QyIHwgQlJMX0RPVDMgfCBCUkxfRE9UNSB8IEJSTF9ET1Q2XSA9IDBYM0QsCitbQlJMX0RPVDIgfCBCUkxfRE9UMyB8IEJSTF9ET1Q1IHwgQlJMX0RPVDYgfCBCUkxfRE9UN10gPSAwWGZkLAorW0JSTF9ET1QyIHwgQlJMX0RPVDMgfCBCUkxfRE9UNSB8IEJSTF9ET1Q2IHwgQlJMX0RPVDcgfCBCUkxfRE9UOF0gPSAwWDdELAorW0JSTF9ET1QyIHwgQlJMX0RPVDMgfCBCUkxfRE9UNSB8IEJSTF9ET1Q2IHwgQlJMX0RPVDhdID0gMFhCRCwKK1tCUkxfRE9UMiB8IEJSTF9ET1QzIHwgQlJMX0RPVDUgfCBCUkxfRE9UN10gPSAwWEUxLAorW0JSTF9ET1QyIHwgQlJMX0RPVDMgfCBCUkxfRE9UNSB8IEJSTF9ET1Q3IHwgQlJMX0RPVDhdID0gMFg2MSwKK1tCUkxfRE9UMiB8IEJSTF9ET1QzIHwgQlJMX0RPVDUgfCBCUkxfRE9UOF0gPSAwWEExLAorW0JSTF9ET1QyIHwgQlJMX0RPVDMgfCBCUkxfRE9UNl0gPSAwWDNDLAorW0JSTF9ET1QyIHwgQlJMX0RPVDMgfCBCUkxfRE9UNiB8IEJSTF9ET1Q3XSA9IDBYRkMsCitbQlJMX0RPVDIgfCBCUkxfRE9UMyB8IEJSTF9ET1Q2IHwgQlJMX0RPVDcgfCBCUkxfRE9UOF0gPSAwWDdDLAorW0JSTF9ET1QyIHwgQlJMX0RPVDMgfCBCUkxfRE9UNiB8IEJSTF9ET1Q4XSA9IDBYQkMsCitbQlJMX0RPVDIgfCBCUkxfRE9UMyB8IEJSTF9ET1Q3XSA9IDBYRkIsCitbQlJMX0RPVDIgfCBCUkxfRE9UMyB8IEJSTF9ET1Q3IHwgQlJMX0RPVDhdID0gMFg3QiwKK1tCUkxfRE9UMiB8IEJSTF9ET1QzIHwgQlJMX0RPVDhdID0gMFhCQiwKK1tCUkxfRE9UMiB8IEJSTF9ET1Q0XSA9IDBYNDksCitbQlJMX0RPVDIgfCBCUkxfRE9UNCB8IEJSTF9ET1Q1XSA9IDBYNEEsCitbQlJMX0RPVDIgfCBCUkxfRE9UNCB8IEJSTF9ET1Q1IHwgQlJMX0RPVDZdID0gMFg1NywKK1tCUkxfRE9UMiB8IEJSTF9ET1Q0IHwgQlJMX0RPVDUgfCBCUkxfRE9UNiB8IEJSTF9ET1Q3XSA9IDBYMTcsCitbQlJMX0RPVDIgfCBCUkxfRE9UNCB8IEJSTF9ET1Q1IHwgQlJMX0RPVDYgfCBCUkxfRE9UNyB8IEJSTF9ET1Q4XSA9IDBYOTcsCitbQlJMX0RPVDIgfCBCUkxfRE9UNCB8IEJSTF9ET1Q1IHwgQlJMX0RPVDYgfCBCUkxfRE9UOF0gPSAwWEQ3LAorW0JSTF9ET1QyIHwgQlJMX0RPVDQgfCBCUkxfRE9UNSB8IEJSTF9ET1Q3XSA9IDBYMEEsCitbQlJMX0RPVDIgfCBCUkxfRE9UNCB8IEJSTF9ET1Q1IHwgQlJMX0RPVDcgfCBCUkxfRE9UOF0gPSAwWDhBLAorW0JSTF9ET1QyIHwgQlJMX0RPVDQgfCBCUkxfRE9UNSB8IEJSTF9ET1Q4XSA9IDBYQ0EsCitbQlJMX0RPVDIgfCBCUkxfRE9UNCB8IEJSTF9ET1Q2XSA9IDBYMzksCitbQlJMX0RPVDIgfCBCUkxfRE9UNCB8IEJSTF9ET1Q2IHwgQlJMX0RPVDddID0gMFhGOSwKK1tCUkxfRE9UMiB8IEJSTF9ET1Q0IHwgQlJMX0RPVDYgfCBCUkxfRE9UNyB8IEJSTF9ET1Q4XSA9IDBYNzksCitbQlJMX0RPVDIgfCBCUkxfRE9UNCB8IEJSTF9ET1Q2IHwgQlJMX0RPVDhdID0gMFhCOSwKK1tCUkxfRE9UMiB8IEJSTF9ET1Q0IHwgQlJMX0RPVDddID0gMFgwOSwKK1tCUkxfRE9UMiB8IEJSTF9ET1Q0IHwgQlJMX0RPVDcgfCBCUkxfRE9UOF0gPSAwWDg5LAorW0JSTF9ET1QyIHwgQlJMX0RPVDQgfCBCUkxfRE9UOF0gPSAwWEM5LAorW0JSTF9ET1QyIHwgQlJMX0RPVDVdID0gMFgzQSwKK1tCUkxfRE9UMiB8IEJSTF9ET1Q1IHwgQlJMX0RPVDZdID0gMFgyRSwKK1tCUkxfRE9UMiB8IEJSTF9ET1Q1IHwgQlJMX0RPVDYgfCBCUkxfRE9UN10gPSAwWEVFLAorW0JSTF9ET1QyIHwgQlJMX0RPVDUgfCBCUkxfRE9UNiB8IEJSTF9ET1Q3IHwgQlJMX0RPVDhdID0gMFg2RSwKK1tCUkxfRE9UMiB8IEJSTF9ET1Q1IHwgQlJMX0RPVDYgfCBCUkxfRE9UOF0gPSAwWEFFLAorW0JSTF9ET1QyIHwgQlJMX0RPVDUgfCBCUkxfRE9UN10gPSAwWEZBLAorW0JSTF9ET1QyIHwgQlJMX0RPVDUgfCBCUkxfRE9UNyB8IEJSTF9ET1Q4XSA9IDBYN0EsCitbQlJMX0RPVDIgfCBCUkxfRE9UNSB8IEJSTF9ET1Q4XSA9IDBYQkEsCitbQlJMX0RPVDIgfCBCUkxfRE9UNl0gPSAwWDNGLAorW0JSTF9ET1QyIHwgQlJMX0RPVDYgfCBCUkxfRE9UN10gPSAwWEZGLAorW0JSTF9ET1QyIHwgQlJMX0RPVDYgfCBCUkxfRE9UNyB8IEJSTF9ET1Q4XSA9IDBYN0YsCitbQlJMX0RPVDIgfCBCUkxfRE9UNiB8IEJSTF9ET1Q4XSA9IDBYQkYsCitbQlJMX0RPVDIgfCBCUkxfRE9UN10gPSAwWEVDLAorW0JSTF9ET1QyIHwgQlJMX0RPVDcgfCBCUkxfRE9UOF0gPSAwWDZDLAorW0JSTF9ET1QyIHwgQlJMX0RPVDhdID0gMFhBQywKK1tCUkxfRE9UM10gPSAwWDI3LAorW0JSTF9ET1QzIHwgQlJMX0RPVDRdID0gMFgyQSwKK1tCUkxfRE9UMyB8IEJSTF9ET1Q0IHwgQlJMX0RPVDVdID0gMFgyNiwKK1tCUkxfRE9UMyB8IEJSTF9ET1Q0IHwgQlJMX0RPVDUgfCBCUkxfRE9UNl0gPSAwWDMwLAorW0JSTF9ET1QzIHwgQlJMX0RPVDQgfCBCUkxfRE9UNSB8IEJSTF9ET1Q2IHwgQlJMX0RPVDddID0gMFhGMCwKK1tCUkxfRE9UMyB8IEJSTF9ET1Q0IHwgQlJMX0RPVDUgfCBCUkxfRE9UNiB8IEJSTF9ET1Q3IHwgQlJMX0RPVDhdID0gMFg3MCwKK1tCUkxfRE9UMyB8IEJSTF9ET1Q0IHwgQlJMX0RPVDUgfCBCUkxfRE9UNiB8IEJSTF9ET1Q4XSA9IDBYQjAsCitbQlJMX0RPVDMgfCBCUkxfRE9UNCB8IEJSTF9ET1Q1IHwgQlJMX0RPVDddID0gMFhFNiwKK1tCUkxfRE9UMyB8IEJSTF9ET1Q0IHwgQlJMX0RPVDUgfCBCUkxfRE9UNyB8IEJSTF9ET1Q4XSA9IDBYNjYsCitbQlJMX0RPVDMgfCBCUkxfRE9UNCB8IEJSTF9ET1Q1IHwgQlJMX0RPVDhdID0gMFhBNiwKK1tCUkxfRE9UMyB8IEJSTF9ET1Q0IHwgQlJMX0RPVDZdID0gMFg1RSwKK1tCUkxfRE9UMyB8IEJSTF9ET1Q0IHwgQlJMX0RPVDYgfCBCUkxfRE9UN10gPSAwWDFFLAorW0JSTF9ET1QzIHwgQlJMX0RPVDQgfCBCUkxfRE9UNiB8IEJSTF9ET1Q3IHwgQlJMX0RPVDhdID0gMFg5RSwKK1tCUkxfRE9UMyB8IEJSTF9ET1Q0IHwgQlJMX0RPVDYgfCBCUkxfRE9UOF0gPSAwWERFLAorW0JSTF9ET1QzIHwgQlJMX0RPVDQgfCBCUkxfRE9UN10gPSAwWEVBLAorW0JSTF9ET1QzIHwgQlJMX0RPVDQgfCBCUkxfRE9UNyB8IEJSTF9ET1Q4XSA9IDBYNkEsCitbQlJMX0RPVDMgfCBCUkxfRE9UNCB8IEJSTF9ET1Q4XSA9IDBYQUEsCitbQlJMX0RPVDMgfCBCUkxfRE9UNV0gPSAwWDI5LAorW0JSTF9ET1QzIHwgQlJMX0RPVDUgfCBCUkxfRE9UNl0gPSAwWDNFLAorW0JSTF9ET1QzIHwgQlJMX0RPVDUgfCBCUkxfRE9UNiB8IEJSTF9ET1Q3XSA9IDBYRkUsCitbQlJMX0RPVDMgfCBCUkxfRE9UNSB8IEJSTF9ET1Q2IHwgQlJMX0RPVDcgfCBCUkxfRE9UOF0gPSAwWDdFLAorW0JSTF9ET1QzIHwgQlJMX0RPVDUgfCBCUkxfRE9UNiB8IEJSTF9ET1Q4XSA9IDBYQkUsCitbQlJMX0RPVDMgfCBCUkxfRE9UNSB8IEJSTF9ET1Q3XSA9IDBYRTksCitbQlJMX0RPVDMgfCBCUkxfRE9UNSB8IEJSTF9ET1Q3IHwgQlJMX0RPVDhdID0gMFg2OSwKK1tCUkxfRE9UMyB8IEJSTF9ET1Q1IHwgQlJMX0RPVDhdID0gMFhBOSwKK1tCUkxfRE9UMyB8IEJSTF9ET1Q2XSA9IDBYMkQsCitbQlJMX0RPVDMgfCBCUkxfRE9UNiB8IEJSTF9ET1Q3XSA9IDBYRUQsCitbQlJMX0RPVDMgfCBCUkxfRE9UNiB8IEJSTF9ET1Q3IHwgQlJMX0RPVDhdID0gMFg2RCwKK1tCUkxfRE9UMyB8IEJSTF9ET1Q2IHwgQlJMX0RPVDhdID0gMFhBRCwKK1tCUkxfRE9UMyB8IEJSTF9ET1Q3XSA9IDBYRTcsCitbQlJMX0RPVDMgfCBCUkxfRE9UNyB8IEJSTF9ET1Q4XSA9IDBYNjcsCitbQlJMX0RPVDMgfCBCUkxfRE9UOF0gPSAwWEE3LAorW0JSTF9ET1Q0XSA9IDBYMjIsCitbQlJMX0RPVDQgfCBCUkxfRE9UNV0gPSAwWDI1LAorW0JSTF9ET1Q0IHwgQlJMX0RPVDUgfCBCUkxfRE9UNl0gPSAwWDI0LAorW0JSTF9ET1Q0IHwgQlJMX0RPVDUgfCBCUkxfRE9UNiB8IEJSTF9ET1Q3XSA9IDBYRTQsCitbQlJMX0RPVDQgfCBCUkxfRE9UNSB8IEJSTF9ET1Q2IHwgQlJMX0RPVDcgfCBCUkxfRE9UOF0gPSAwWDY0LAorW0JSTF9ET1Q0IHwgQlJMX0RPVDUgfCBCUkxfRE9UNiB8IEJSTF9ET1Q4XSA9IDBYQTQsCitbQlJMX0RPVDQgfCBCUkxfRE9UNSB8IEJSTF9ET1Q3XSA9IDBYRTUsCitbQlJMX0RPVDQgfCBCUkxfRE9UNSB8IEJSTF9ET1Q3IHwgQlJMX0RPVDhdID0gMFg2NSwKK1tCUkxfRE9UNCB8IEJSTF9ET1Q1IHwgQlJMX0RPVDhdID0gMFhBNSwKK1tCUkxfRE9UNCB8IEJSTF9ET1Q2XSA9IDBYMjMsCitbQlJMX0RPVDQgfCBCUkxfRE9UNiB8IEJSTF9ET1Q3XSA9IDBYRTMsCitbQlJMX0RPVDQgfCBCUkxfRE9UNiB8IEJSTF9ET1Q3IHwgQlJMX0RPVDhdID0gMFg2MywKK1tCUkxfRE9UNCB8IEJSTF9ET1Q2IHwgQlJMX0RPVDhdID0gMFhBMywKK1tCUkxfRE9UNCB8IEJSTF9ET1Q3XSA9IDBYRTIsCitbQlJMX0RPVDQgfCBCUkxfRE9UNyB8IEJSTF9ET1Q4XSA9IDBYNjIsCitbQlJMX0RPVDQgfCBCUkxfRE9UOF0gPSAwWEEyLAorW0JSTF9ET1Q1XSA9IDBYNUYsCitbQlJMX0RPVDUgfCBCUkxfRE9UNl0gPSAwWDJCLAorW0JSTF9ET1Q1IHwgQlJMX0RPVDYgfCBCUkxfRE9UN10gPSAwWEVCLAorW0JSTF9ET1Q1IHwgQlJMX0RPVDYgfCBCUkxfRE9UNyB8IEJSTF9ET1Q4XSA9IDBYNkIsCitbQlJMX0RPVDUgfCBCUkxfRE9UNiB8IEJSTF9ET1Q4XSA9IDBYQUIsCitbQlJMX0RPVDUgfCBCUkxfRE9UN10gPSAwWDFGLAorW0JSTF9ET1Q1IHwgQlJMX0RPVDcgfCBCUkxfRE9UOF0gPSAwWDlGLAorW0JSTF9ET1Q1IHwgQlJMX0RPVDhdID0gMFhERiwKK1tCUkxfRE9UNl0gPSAwWDI4LAorW0JSTF9ET1Q2IHwgQlJMX0RPVDddID0gMFhFOCwKK1tCUkxfRE9UNiB8IEJSTF9ET1Q3IHwgQlJMX0RPVDhdID0gMFg2OCwKK1tCUkxfRE9UNiB8IEJSTF9ET1Q4XSA9IDBYQTgsCitbQlJMX0RPVDddID0gMFhFMCwKK1tCUkxfRE9UNyB8IEJSTF9ET1Q4XSA9IDBYNjAsCitbQlJMX0RPVDhdID0gMFhBMApkaWZmIC0tZ2l0IGEvRHJpdmVycy9CcmFpbGxlL1Zpc2lvQnJhaWxsZS9icmxkZWZzLXZzLmggYi9Ecml2ZXJzL0JyYWlsbGUvVmlzaW9CcmFpbGxlL2JybGRlZnMtdnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZDU1MGNkCi0tLSAvZGV2L251bGwKKysrIGIvRHJpdmVycy9CcmFpbGxlL1Zpc2lvQnJhaWxsZS9icmxkZWZzLXZzLmgKQEAgLTAsMCArMSwxMDAgQEAKKy8qCisgKiBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorICogICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorICoKKyAqIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorICoKKyAqIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyAqLworCisvKiBicmxkZWZzLXZzLmggOiBVc2VmdWwgZGVmaW5pdGlvbnMgdG8gaGFuZGxlIGtleXMgZW50ZXJlZCBhdCAqLworLyogVmlzaW9CcmFpbGxlJ3Mga2V5Ym9hcmQgKi8gCisKKyNpZm5kZWYgQlJMVFRZX0lOQ0xVREVEX1ZTX0JSTERFRlMKKyNkZWZpbmUgQlJMVFRZX0lOQ0xVREVEX1ZTX0JSTERFRlMKKworI2RlZmluZSBCUkxfVlNNU0tfQ0hBUiAgICAgICAgMHgxMDAKKyNkZWZpbmUgQlJMX1ZTTVNLX1JPVVRJTkcgICAgIDB4MjAwCisjZGVmaW5lIEJSTF9WU01TS19GVU5DVElPTktFWSAweDQwMAorI2RlZmluZSBCUkxfVlNNU0tfT1RIRVIgICAgICAgMHg4MDAKKworLyogU3ltYm9saWMgZGVmaW5pdGlvbnMgZm9yIFZpc2lvQnJhaWxsZSdzIGZ1bmN0aW9uIGtleXMgKi8KKyNkZWZpbmUgQlJMX1ZTS0VZX0ExIDB4NDAwCisjZGVmaW5lIEJSTF9WU0tFWV9BMiAweDQwMQorI2RlZmluZSBCUkxfVlNLRVlfQTMgMHg0MDIKKyNkZWZpbmUgQlJMX1ZTS0VZX0E0IDB4NDAzCisjZGVmaW5lIEJSTF9WU0tFWV9BNSAweDQwNAorI2RlZmluZSBCUkxfVlNLRVlfQTYgMHg0MDUKKyNkZWZpbmUgQlJMX1ZTS0VZX0E3IDB4NDA2CisjZGVmaW5lIEJSTF9WU0tFWV9BOCAweDQwNworI2RlZmluZSBCUkxfVlNLRVlfQjEgMHg0MDgKKyNkZWZpbmUgQlJMX1ZTS0VZX0IyIDB4NDA5CisjZGVmaW5lIEJSTF9WU0tFWV9CMyAweDQwYQorI2RlZmluZSBCUkxfVlNLRVlfQjQgMHg0MGIKKyNkZWZpbmUgQlJMX1ZTS0VZX0I1IDB4NDBjCisjZGVmaW5lIEJSTF9WU0tFWV9CNiAweDQwZAorI2RlZmluZSBCUkxfVlNLRVlfQjcgMHg0MGUKKyNkZWZpbmUgQlJMX1ZTS0VZX0I4IDB4NDBmCisjZGVmaW5lIEJSTF9WU0tFWV9DMSAweDQxMAorI2RlZmluZSBCUkxfVlNLRVlfQzIgMHg0MTEKKyNkZWZpbmUgQlJMX1ZTS0VZX0MzIDB4NDEyCisjZGVmaW5lIEJSTF9WU0tFWV9DNCAweDQxMworI2RlZmluZSBCUkxfVlNLRVlfQzUgMHg0MTQKKyNkZWZpbmUgQlJMX1ZTS0VZX0M2IDB4NDE1CisjZGVmaW5lIEJSTF9WU0tFWV9DNyAweDQxNgorI2RlZmluZSBCUkxfVlNLRVlfQzggMHg0MTcKKyNkZWZpbmUgQlJMX1ZTS0VZX0QxIDB4NDE4CisjZGVmaW5lIEJSTF9WU0tFWV9EMiAweDQxOQorI2RlZmluZSBCUkxfVlNLRVlfRDMgMHg0MWEKKyNkZWZpbmUgQlJMX1ZTS0VZX0Q0IDB4NDFiCisjZGVmaW5lIEJSTF9WU0tFWV9ENSAweDQxYworI2RlZmluZSBCUkxfVlNLRVlfRDYgMHg0MWQKKyNkZWZpbmUgQlJMX1ZTS0VZX0Q3IDB4NDFlCisjZGVmaW5lIEJSTF9WU0tFWV9EOCAweDQxZgorCisjZGVmaW5lIEJSTF9WU0tFWV9QTE9DX0xUIDB4ODAxCisjZGVmaW5lIEJSTF9WU0tFWV9CQUNLU1BBQ0UgMHg4MDgKKyNkZWZpbmUgQlJMX1ZTS0VZX1RBQiAweDgwOQorI2RlZmluZSBCUkxfVlNLRVlfUkVUVVJOIDB4ODBkCisKKyNkZWZpbmUgQlJMX1ZTS0VZX1BMT0NfUExPQ19BIDB4OEExCisjZGVmaW5lIEJSTF9WU0tFWV9QTE9DX1BMT0NfQiAweDhBMgorI2RlZmluZSBCUkxfVlNLRVlfUExPQ19QTE9DX0MgMHg4QTMKKyNkZWZpbmUgQlJMX1ZTS0VZX1BMT0NfUExPQ19EIDB4OEE0CisjZGVmaW5lIEJSTF9WU0tFWV9QTE9DX1BMT0NfRSAweDhBNQorI2RlZmluZSBCUkxfVlNLRVlfUExPQ19QTE9DX0YgMHg4QTYKKyNkZWZpbmUgQlJMX1ZTS0VZX1BMT0NfUExPQ19HIDB4OEE3CisjZGVmaW5lIEJSTF9WU0tFWV9QTE9DX1BMT0NfSCAweDhBOAorI2RlZmluZSBCUkxfVlNLRVlfUExPQ19QTE9DX0kgMHg4QTkKKyNkZWZpbmUgQlJMX1ZTS0VZX1BMT0NfUExPQ19KIDB4OEFBCisjZGVmaW5lIEJSTF9WU0tFWV9QTE9DX1BMT0NfSyAweDhBQgorI2RlZmluZSBCUkxfVlNLRVlfUExPQ19QTE9DX0wgMHg4QUMKKyNkZWZpbmUgQlJMX1ZTS0VZX1BMT0NfUExPQ19NIDB4OEFECisjZGVmaW5lIEJSTF9WU0tFWV9QTE9DX1BMT0NfTiAweDhBRQorI2RlZmluZSBCUkxfVlNLRVlfUExPQ19QTE9DX08gMHg4QUYKKyNkZWZpbmUgQlJMX1ZTS0VZX1BMT0NfUExPQ19QIDB4OEIwCisjZGVmaW5lIEJSTF9WU0tFWV9QTE9DX1BMT0NfUSAweDhCMQorI2RlZmluZSBCUkxfVlNLRVlfUExPQ19QTE9DX1IgMHg4QjIKKyNkZWZpbmUgQlJMX1ZTS0VZX1BMT0NfUExPQ19TIDB4OEIzCisjZGVmaW5lIEJSTF9WU0tFWV9QTE9DX1BMT0NfVCAweDhCNAorI2RlZmluZSBCUkxfVlNLRVlfUExPQ19QTE9DX1UgMHg4QjUKKyNkZWZpbmUgQlJMX1ZTS0VZX1BMT0NfUExPQ19WIDB4OEI2CisjZGVmaW5lIEJSTF9WU0tFWV9QTE9DX1BMT0NfVyAweDhCNworI2RlZmluZSBCUkxfVlNLRVlfUExPQ19QTE9DX1ggMHg4QjgKKyNkZWZpbmUgQlJMX1ZTS0VZX1BMT0NfUExPQ19ZIDB4OEI5CisjZGVmaW5lIEJSTF9WU0tFWV9QTE9DX1BMT0NfWiAweDhCQQorCisjZGVmaW5lIEJSTF9WU0tFWV9DT05UUk9MIDB4OEJFCisjZGVmaW5lIEJSTF9WU0tFWV9BTFQgMHg4QkYKKyNkZWZpbmUgQlJMX1ZTS0VZX0VTQ0FQRSAweDhlMAorCisjZW5kaWYgLyogQlJMVFRZX0lOQ0xVREVEX1ZTX0JSTERFRlMgKi8gCmRpZmYgLS1naXQgYS9Ecml2ZXJzL0JyYWlsbGUvVmlzaW9CcmFpbGxlL3ZzdHAuMSBiL0RyaXZlcnMvQnJhaWxsZS9WaXNpb0JyYWlsbGUvdnN0cC4xCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUzYzIxYzYKLS0tIC9kZXYvbnVsbAorKysgYi9Ecml2ZXJzL0JyYWlsbGUvVmlzaW9CcmFpbGxlL3ZzdHAuMQpAQCAtMCwwICsxLDExNyBAQAorLlRIICJWU1RQIiAiMSIgIjIwMDItMDctMTUiICJCcmxBUEkiICJCcmxBUEkgVXNlcidzIE1hbnVhbCIKKy5TSCBOQU1FCit2c3RwZywgdnN0cHAgXC0gVmlzaW9CcmFpbGxlIGZpbGUgdHJhbnNmZXJyaW5nCisuU0ggU1lOT1BTSVMKK3ZzdHBnIFtcLWlmYm5kXSBbXC1zIFxmSXNvY2tldHBvcnRcZlBdIFtcLWsgXGZJa2V5bmFtZVxmUF0gW1wtbyBcZkljb25maWduYW1lXGZQXSBmaWxlIC4uLgorLlNIIERFU0NSSVBUSU9OCitcZkl2c3RwZ1xmUCAocmVzcC4gXGZJdnN0cHBcZlApIGdldHMgKHJlc3AuIHB1dHMpIGZpbGVzIGZyb20gKHJlc3AuIG9udG8pCithIFZpc2lvQnJhaWxsZSB0ZXJtaW5hbC4KKworRm9yIGNvbW11bmljYXRpbmcgd2l0aCB0aGUgdGVybWluYWwsIHlvdSBtdXN0IGxhdW5jaCBicmx0dHkgd2l0aCB0aGUgQnJsTmV0Citkcml2ZXIsIGFuZCB0ZWxsaW5nIEJybE5ldCB0byB1c2UgdGhlIFZpc2lvQnJhaWxsZSBkcml2ZXIuCisKK0JlZm9yZSBwdXR0aW5nIG9uIHRoZSB0ZXJtaW5hbCwgZmlsZSBuYW1lcyBhcmUgdHJ1bmNhdGVkIHRvIDggY2hhcmFjdGVycword2l0aG91dCBhbnkgZXh0ZW5zaW9uLgorCitCZWZvcmUgZ2V0dGluZyBmcm9tIHRlcm1pbmFsLCBsZWFkaW5nIHBhdGggYW5kIHRyYWlsaW5nIGV4dGVuc2lvbnMgYXJlIHJlbW92ZWQsCitidXQgcHV0IGJhY2sgZm9yIGxvY2FsIGZpbGVuYW1lLgorCisuU0ggIkNPTU1BTkRcLUxJTkUgT1BUSU9OUyIKKworLlRQCitcZkJcLWlcZlIKK2FzayBmb3IgY29uZmlybWF0aW9uIG9mIHRyYW5zZmVyLCBmb3IgZWFjaCBmaWxlIChvbiB0aGUgdGVybWluYWwpCisuVFAKK1xmQlwtZlxmUgorZG9uJ3QgYXNrIGZvciBzdWNoIGEgY29uZmlybWF0aW9uIChkZWZhdWx0KQorLlRQCitcZkJcLWJcZlIKK2lmIHRoZXkgZXhpc3RzLCByZWN1cnNpdmVseSByZW5hbWUgdGhlIG9sZCBmaWxlcyB3aXRoIGFuIGFkZGVkIC54IHN1ZmZpeCwKK2p1c3QgbGlrZSBsb2dyb3RhdGUgZG9lcworLlRQCitcZkJcLW5cZlIKK2RvIG5vdCBrZWVwIHN1Y2ggYmFja3VwIGZpbGUgKGRlZmF1bHQpCisuVFAKK1xmQlwtc1xmUiBcZklzb2NrZXRwb3J0XGZSCit1c2Ugc29ja2V0cG9ydCBhcyB0aGUgcG9ydCBudW1iZXIgaW5zdGVhZCBvZiBkZWZhdWx0IGZvciBjb25uZWN0aW5nIHRvIEJybE5ldAorLlRQCitcZkJcLWtcZlIgXGZJZmlsZW5hbWVcZlIKK3VzZSBmaWxlbmFtZSBhcyBrZXkgcGF0aCBpbnN0ZWFkIG9mIGRlZmF1bHQgZm9yIHJlYWRpbmcgQnJsTmV0J3MKK2F1dGhlbnRpY2F0aW9uIGtleQorLlRQCitcZkJcLWRcZlIKK3VzZSBjdXJyZW50IGRpcmVjdG9yeSByYXRoZXIgdGhhbiB0aGUgZG93bmxvYWQgZGlyZWN0b3J5Cisoc2VlIFxmSXZic19kaXJcZlIgYmVsb3cpCisuVFAKK1xmQlwtb1xmUiBcZklmaWxlbmFtZVxmUgorYWxzbyByZWFkIGZpbGVuYW1lIGFzIGNvbmZpZyBmaWxlCisKKy5TSCBDT05GSUcgRklMRQorCitcZkl2c3RwZ1xmUCBhbmQgXGZJdnN0cHBcZlAgcmVhZCBhIGNvbmZpZ3VyYXRpb24gZmlsZSBcZkIkSE9NRS8udnN0cHJjXGZSIHdoaWNoCitjb250YWlucyBrZXl3b3JkcyBvciBlcXVhbGl0aWVzLCBvbmUgcGVyIGxpbmUgKHdoYXQgZm9sbG93cyBhICMgaXMKK2lnbm9yZWQpLgorCitZb3UgY2FuIGFzayB0aGVtIHRvIGFsc28gcmVhZCBhbnkgb3RoZXIgZmlsZSB0aGFua3MgdG8gdGhlIFxmQlwtb1xmUiBvcHRpb24uCisKK0hlcmUgYXJlIGtleXdvcmRzOgorCisuVFAKK1xmQmJhY2t1cFxmUgorbWFrZSBcZkJcLWJcZlIgb3B0aW9uIHRoZSBkZWZhdWx0CisKKy5UUAorXGZCbm9iYWNrdXBcZlIKK21ha2UgXGZCXC1mXGZSIG9wdGlvbiB0aGUgZGVmYXVsdAorCisuVFAKK2FuZCBlcXVhbGl0aWVzOgorCisuVFAKK1xmQmtleW5hbWVcZlIgPSBcZklmaWxlbmFtZVxmUgordXNlIHRoaXMgZmlsZSBpbnN0ZWFkIG9mIGRlZmF1bHQsIHRvIGZpbmQgQnJsTmV0J3MgYXV0aGVudGljYXRpb24ga2V5CisKKy5UUAorXGZCc29ja2V0cG9ydFxmUiA9IFxmSXBvcnRcZlIKK3VzZSB0aGlzIHBvcnQgbnVtYmVyLCBpbnN0ZWFkIG9mIGRlZmF1bHQsIHRvIGNvbm5lY3QgdG8gQnJsTmV0CisKKy5UUAorXGZCdmJzX2V4dFxmUiA9IFxmSS5leHRcZlIKK3VzZSAuZXh0IGFzIGFuIGV4dGVuc2lvbiBmb3IgZG93bmxvYWRlZCBmaWxlcyAoLnZpcyBieSBkZWZhdWx0KQordGhpcyBpcyBvdmVycmlkZGVuIG9uIGNvbW1hbmQgbGluZSBpZiBhbiBleHRlbnNpb24gaXMgcHJvdmlkZWQgaW4gdGhlIGZpbGUgbmFtZQorCisuVFAKK1xmQnZic19kaXJcZlIgPSBcZklwYXRoXGZSCit1c2UgcGF0aCBpbnN0ZWFkIG9mIGN1cnJlbnQgZGlyZWN0b3J5IGZvciBwdXR0aW5nIGZpbGVzLCBleGNlcHQgd2hlbgordXNpbmcgdGhlIFxmQlwtZFxmUiBvcHRpb24sIG9yIGlmIHRoZSBmaWxlbmFtZSBiZWdpbnMgd2l0aCAnLicKKworLlNIIFJFVFVSTkVEIFZBTFVFCisKKy5UUworbEIgbGZDVy4KKzEJc3ludGF4IGVycm9yIG9uIGNvbW1hbmQgbGluZQorMgljb25uZWN0aW9uIHdpdGggQnJsTmV0IGVycm9yCiszCVVuaXggZmlsZSBlcnJvcgorNAlQcm90b2NvbCBlcnJvcgorMTYJaW50ZXJydXB0ZWQgYnkgdXNlcgorLlRFCisKKy5TSCBTSEVMTCBFWFBBTlNJT05TCitCZXdhcmUgb2Ygc3BlY2lhbCBjaGFyczogKiBhbmQgLiBhcmUgb2Z0ZW4gZXhwYW5kZWQgYnkgeW91ciBzaGVsbCwgaGVuY2UKK1xmSXZzdHBwICpcZlIgd2lsbCBwcm9iYWJseSBkbyB3aGF0IHlvdSB3YW50LCBwdXR0aW5nIGV2ZXJ5IGZpbGUgZXhpc3RpbmcgaW4KK3RoZSBjdXJyZW50IGRpcmVjdG9yeSBvbnRvIHRoZSB0ZXJtaW5hbCwgYnV0IFxmSXZzdHBnICpcZlIgbWF5IG5vdCBkbyB3aGF0IHlvdQord2FudDogaXQgd2lsbCBvbmx5IGdldCBldmVyeSBmaWxlIHdoaWNoIGFscmVhZHkgZXhpc3QgaW4gdGhlIGN1cnJlbnQKK2RpcmVjdG9yeSwgc2tpcHBpbmcgdGhvc2UgeW91IGp1c3QgY3JlYXRlZCBvbiB5b3VyIHRlcm1pbmFsICEKK0lmIHlvdSB3YW50IHRvIGdldCBldmVyeSBmaWxlIHdoaWNoIGV4aXN0IGluIHRoZSB0ZXJtaW5hbCwgeW91CitzaG91bGQgdXNlIFxmSXZzdHBnICcqJ1xmUiBvciBzb21ldGhpbmcgc2ltaWxhciAocGxlYXNlIHJlYWQgeW91ciBzaGVsbCBtYW51YWwpLgorCitUaGUgc2FtZSB3YXJuaW5nIGFwcGxpZXMgdG8gb3RoZXIgc3BlY2lhbCBjaGFycywgc3VjaCBhcyAkLCB+LCAmLC4uLiB3aGljaAorc2hvdWxkIGJlIHByb3RlY3RlZCBieSBzdXJyb3VuZGluZyBhcmd1bWVudHMgYnkgcXVvdGVzICgnKSBvciBieSB1c2luZyBzaW5nbGUKK2JhY2tzbGFzaGVzIChcXCkganVzdCBiZWZvcmUgdGhlbSAocGxlYXNlIHJlYWQgeW91ciBzaGVsbCBtYW51YWwpLgorCisuU0ggQlVHUworVGhlIG9uZSB3ZSBjb3VsZCBmaW5kIGhhcyBiZWVuIGNvcnJlY3RlZCA6KQorCisuU0ggQVVUSE9SCitTYW11ZWwgVGhpYmF1bHQgPHNhbXVlbC50aGliYXVsdEBlbnNcLWx5b24ub3JnPgorYW5kIFNlYmFzdGllbiBIaW5kZXJlciA8c2ViYXN0aWVuLmhpbmRlcmVyQGVuc1wtbHlvbi5mcj4KZGlmZiAtLWdpdCBhL0RyaXZlcnMvQnJhaWxsZS9WaXNpb0JyYWlsbGUvdnN0cC5oIGIvRHJpdmVycy9CcmFpbGxlL1Zpc2lvQnJhaWxsZS92c3RwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjFhMmYxYQotLS0gL2Rldi9udWxsCisrKyBiL0RyaXZlcnMvQnJhaWxsZS9WaXNpb0JyYWlsbGUvdnN0cC5oCkBAIC0wLDAgKzEsOTAgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAyMDA2LTIwMjMgUyZTCisgKiAgU2FtdWVsIFRoaWJhdWx0IDxzYW11ZWwudGhpYmF1bHRAZW5zLWx5b24ub3JnPgorICogIFPDqWJhc3RpZW4gSGluZGVyZXIgPHNlYmFzdGllbi5oaW5kZXJlckBlbnMtbHlvbi5vcmc+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmUgOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiA7IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZIDsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhlIHByb2dyYW0gOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqLworCisvKiB2c3RwLmgKKyAqIGZpbGVzIHRyYW5zZmVycmluZyB3aXRoIFZpc2lvQnJhaWxsZSB0ZXJtaW5hbHMKKyAqLworI2lmbmRlZiBfX1ZCQ1BfSAorI2RlZmluZSBfX1ZCQ1BfSAorCisvKiBkaWZmZXJlbnQgcG9zc2libGUgbmFtZXMgZm9yIGZpbGUgKi8KKworI2RlZmluZSBWU1RQX1BVVAkidnN0cHAiCisjZGVmaW5lIFZTVFBfR0VUCSJ2c3RwZyIKKworI2RlZmluZSBTSVpFX1BVVAkyNTAgLyoganVzdCBsaWtlIHhmbCAqLworCisjZGVmaW5lIE5VTV9UUklFUwkzCisKKyNkZWZpbmUgVFJZX1RJTUVPVVQJMjAgLyogc2Vjb25kcyB0byB3YWl0IGJldHdlZW4gd3JpdGUgcmV0cmllcyAqLworCisvKiB2YXJpYWJsZXMgdXNlZCB3aGVuIHRyYW5zZmVycmluZyAqLworCitleHRlcm4gaW50IHRyYW5zZmVycmluZzsKK2V4dGVybiB1bnNpZ25lZCBjaGFyIGJ1cnN0bW9kZTsKK2V4dGVybiBpbnQgYmFja3VwOworZXh0ZXJuIGNoYXIgKnZpc2lvYmFzZXNfZGlyOworZXh0ZXJuIGNoYXIgKnZpc2lvYmFzZXNfZXh0OworCisvKiB0cmFuc2ZlciBmdW5jdGlvbnMgKi8KKwordHlwZWRlZiB2b2lkIHRyYW5zZmVyZnVuKGNoYXIgKmZpbGVuYW1lKTsKKworZXh0ZXJuIHRyYW5zZmVyZnVuIGZpbGVnZXQ7CitleHRlcm4gdHJhbnNmZXJmdW4gZmlsZXB1dDsKKworZXh0ZXJuIHZvaWQgdHJhbnNmZXJfaW5pdCh0cmFuc2ZlcmZ1biBmKTsKK2V4dGVybiB2b2lkIHRyYW5zZmVyX2ZpbmlzaCh0cmFuc2ZlcmZ1biBmKTsKKworZXh0ZXJuIHZvaWQgdHJhbnNmZXJfYWJvcnQoaW50IGV4aXRudW0pOworCitleHRlcm4gdm9pZCB0cmFuc2Zlcl90aW1lb3V0KGludCBzaWdudW0pOworCisvKiBQYWNrZXQgdHlwZXMgKi8KKworI2RlZmluZSBWQl9JTklUX1BBUkFNUwknSScKKyNkZWZpbmUgVkJfTE9BRAkJJ0wnCisjZGVmaW5lIFZCX1VOTE9BRAknVScKKyNkZWZpbmUgVkJfQVVUT01BVElDCSdBJworI2RlZmluZSBWQl9NQU5VQUwJJ00nCisjZGVmaW5lIFZCX09LCQknWScKKyNkZWZpbmUgVkJfRklMRUhFUkUJJ0YnCisjZGVmaW5lIFZCX05FWFQJCSdOJworI2RlZmluZSBWQl9BQ0tfREFUQQknSycKKyNkZWZpbmUgVkJfSEVSRVNfREFUQQknRCcKKyNkZWZpbmUgVkJfREFUQV9PVkVSCSdaJworI2RlZmluZSBWQl9GSUxFU19PVkVSCSJFIgorCisjZGVmaW5lIFZCX1JFU0VUCSIjIgorCisjZGVmaW5lIFZCX0ZJTEVUX0FHRU5EQQknQScKKyNkZWZpbmUgVkJfRklMRVRfVEVYVEUJJ1QnCisKKyNkZWZpbmUgVkJfTUFYRk5MRU4JOAorCisvKiByZXR1cm4gY29kZXMgKi8KKworI2RlZmluZSBSRVRfRVBBUlNFCTEJLyogc3ludGF4IGVycm9yIG9uIGNvbW1hbmQgbGluZSAqLworI2RlZmluZSBSRVRfRUNPTk4JMgkvKiBjb25uZWN0aW9uIHdpdGggQnJsTmV0IGVycm9yICovCisjZGVmaW5lIFJFVF9FVU5JWAkzCS8qIHVuaXggZmlsZSBlcnJvciAqLworI2RlZmluZSBSRVRfRVBST1RPCTQJLyogcHJvdG9jb2wgZXJyb3IgKi8KKyNkZWZpbmUgUkVUX0lOVAkJMTYJLyogaW50ZXJydXB0ZWQgYnkgdXNlciAqLworCisjZW5kaWYgLyogX19WQkNQX0ggKi8KZGlmZiAtLWdpdCBhL0RyaXZlcnMvQnJhaWxsZS9WaXNpb0JyYWlsbGUvdnN0cF9tYWluLmMgYi9Ecml2ZXJzL0JyYWlsbGUvVmlzaW9CcmFpbGxlL3ZzdHBfbWFpbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZlZDgzNjEKLS0tIC9kZXYvbnVsbAorKysgYi9Ecml2ZXJzL0JyYWlsbGUvVmlzaW9CcmFpbGxlL3ZzdHBfbWFpbi5jCkBAIC0wLDAgKzEsMjc2IEBACisvKgorICogIENvcHlyaWdodCAoQykgMjAwNi0yMDIzIFMmUworICogIFNhbXVlbCBUaGliYXVsdCA8c2FtdWVsLnRoaWJhdWx0QGVucy1seW9uLm9yZz4KKyAqICBTw6liYXN0aWVuIEhpbmRlcmVyIDxzZWJhc3RpZW4uaGluZGVyZXJAZW5zLWx5b24ub3JnPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlIDsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWSA7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoZSBwcm9ncmFtIDsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKi8KKworLyogdnN0cF9tYWluLmMKKyAqIGZpbGVzIHRyYW5zZmVycmluZyB3aXRoIFZpc2lvQnJhaWxsZSB0ZXJtaW5hbHMKKyAqLworCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxzaWduYWwuaD4KKyNpbmNsdWRlICJicmxhcGkuaCIKKyNpbmNsdWRlICJ2c3RwLmgiCisKKyNkZWZpbmUgVlNUUFJDICIudnN0cHJjIgorI2RlZmluZSBMSU5FTEVOR1RIIDI1NQorCitjaGFyICpzb2NrZXRwb3J0ID0gTlVMTDsKK2NoYXIgKmtleW5hbWU9TlVMTDsKKwordm9pZCBoYW5kbGVpbnQoaW50IHNpZ251bSkgeworIGZwcmludGYoc3RkZXJyLCJhYm9ydGluZyBvbiBzaWduYWwgJWRcbiIsc2lnbnVtKTsKKyB0cmFuc2Zlcl9hYm9ydChSRVRfSU5UKTsKK30KKworLyogZXZlcnkgcG9zc2libGUgb3B0aW9uICovCisjZGVmaW5lIE9QVElPTlMgImlmYm5za2QiCisKK3N0YXRpYyB2b2lkIHByaW50dXNhZ2UoY2hhciAqbmFtZSkgeworIHByaW50ZihWU1RQX0dFVCAiLyIgVlNUUF9QVVQgIiA6IGdldCBmaWxlcyBmcm9tIC8gcHV0IGZpbGVzIHRvIGEgVmlzaW9CcmFpbGxlIHRlcm1pbmFsXG4iKTsKKyBwcmludGYoIlVzYWdlOiAlcyBbb3B0aW9uc10gW2ZpbGVzXVxuIixuYW1lKTsKKyBwcmludGYoIltmaWxlc10gYXJlIFVuaXggZmlsZW5hbWVzXG4iKTsKKyBwcmludGYoIiAtaSAgICAgICAgICAgIGFzayBmb3IgY29uZmlybWF0aW9uXG4iKTsKKyBwcmludGYoIiAtZiAgICAgICAgICAgIGRvbid0IGFzayBmb3IgY29uZmlybWF0aW9uIChkZWZhdWx0KVxuIik7CisgcHJpbnRmKCIgLWIgICAgICAgICAgICBjcmVhdGUgYmFja3VwICgudmlzfikgZmlsZSBpZiBmaWxlIGFscmVhZHkgZXhpc3RzXG4iKTsKKyBwcmludGYoIiAtbiAgICAgICAgICAgIGRvIG5vdCBjcmVhdGUgYmFja3VwICgudmlzfikgZmlsZSAoZGVmYXVsdClcbiIpOworIHByaW50ZigiIC1zIHBvcnQgICAgICAgdXNlIHBvcnQgYXMgcG9ydCBudW1iZXIgaW5zdGVhZCBvZiBkZWZhdWx0XG4iKTsKKyBwcmludGYoIiAtayBmaWxlbmFtZSAgIHVzZSBmaWxlbmFtZSBhcyBrZXkgcGF0aCBpbnN0ZWFkIG9mIGRlZmF1bHRcbiIpOworIHByaW50ZigiIC1kICAgICAgICAgICAgcHV0IGZpbGVzIGludG8gY3VycmVudCBkaXJlY3RvcnlcbiIpOworIHByaW50ZigiIC1vIGZpbGVuYW1lICAgYWxzbyB1c2UgZmlsZW5hbWUgYXMgb3B0aW9ucyBmaWxlXG4iKTsKKyBleGl0KFJFVF9FUEFSU0UpOworfQorCitzdGF0aWMgdm9pZCBncnIoY2hhciAqbmFtZSkgeworIHByaW50dXNhZ2UobmFtZSk7CisgZXhpdChSRVRfRVBBUlNFKTsKK30KKworc3RhdGljIHRyYW5zZmVyZnVuICpDaGVja1NlbmRPclJlY3YoY2hhciAqbmFtZSl7CisgaWYgKHN0cnN0cihuYW1lLFZTVFBfUFVUKSAhPSBOVUxMKSByZXR1cm4gZmlsZXB1dDsKKyBpZiAoc3Ryc3RyKG5hbWUsVlNUUF9HRVQpICE9IE5VTEwpIHJldHVybiBmaWxlZ2V0OworIHByaW50ZigiUGxlYXNlIGNhbGwgbWUgYXMgIiBWU1RQX1BVVCAiIG9yIGFzICIgVlNUUF9HRVQgIi5cbiIpOworIGdycihuYW1lKTsKKyBleGl0KFJFVF9FUEFSU0UpOworfQorCitzdGF0aWMgdm9pZCBQYXJzZShjaGFyICpmaWxlbmFtZSkgeworIEZJTEUgKmZkOworIGNoYXIgc1tMSU5FTEVOR1RIKzFdOworIGNoYXIgKmMsKmQ7CisKKyBpZiAoIShmZD1mb3BlbihmaWxlbmFtZSwiciIpKSkgcmV0dXJuOworCisgd2hpbGUgKGZnZXRzKHMsTElORUxFTkdUSCxmZCkpIHsKKyAgaWYgKChjPXN0cmNocihzLCcjJykpKQorICAgKmM9J1wwJzsKKyAgaWYgKChjPXN0cmNocihzLCdcbicpKSkKKyAgICpjPSdcMCc7CisgIGlmICgoYz1zdHJjaHIocywnPScpKSkgeworICAgLyogJz0nIG9wdGlvbiA6IGtleSBuYW1lIGFuZCB2YWx1ZSAqLworICAgZm9yIChkPWMtMTsgKmQ9PScgJyB8fCAqZD09J1x0JzsgZC0tKTsKKyAgICooZCsxKT0nXDAnOworICAgZm9yIChjKys7ICAgKmM9PScgJyB8fCAqYz09J1x0JzsgYysrKTsKKyAgICooYy0xKT0nXDAnOworICAgaWYgKCFzdHJjbXAocywia2V5bmFtZSIpKSB7CisgICAga2V5bmFtZSA9IChjaGFyICopIG1hbGxvYyhzdHJsZW4oYykrMSk7CisgICAgc3RyY3B5KGtleW5hbWUsYyk7CisgICB9IGVsc2UgaWYgKCFzdHJjbXAocywic29ja2V0cG9ydCIpKSB7CisgICAgc29ja2V0cG9ydCA9IChjaGFyICopIG1hbGxvYyhzdHJsZW4oYykrMSk7CisgICAgc3RyY3B5KHNvY2tldHBvcnQsYyk7CisgICB9IGVsc2UgaWYgKCFzdHJjbXAocywidmJzX2V4dCIpKSB7CisgICAgdmlzaW9iYXNlc19leHQgPSAoY2hhciAqKSBtYWxsb2MoNSk7CisgICAgc3RybmNweSh2aXNpb2Jhc2VzX2V4dCxjLDQpOworICAgIHZpc2lvYmFzZXNfZXh0WzRdPTA7CisgICB9IGVsc2UgaWYgKCFzdHJjbXAocywidmJzX2RpciIpKSB7CisgICAgdmlzaW9iYXNlc19kaXIgPSAoY2hhciAqKSBtYWxsb2Moc3RybGVuKGMpKzEpOworICAgIHN0cmNweSh2aXNpb2Jhc2VzX2RpcixjKTsKKyAgIH0KKyAgfSBlbHNlIHsKKyAgIGlmICghc3RyY21wKHMsImJhY2t1cCIpKSB7CisgICAgYmFja3VwPTE7CisgICB9IGVsc2UgaWYgKCFzdHJjbXAocywibm9iYWNrdXAiKSkgeworICAgIGJhY2t1cD0wOworICAgfQorICB9CisgfQorIGZjbG9zZShmZCk7Cit9CisKK3N0YXRpYyB2b2lkIENoZWNrT3B0aW9ucyhpbnQgYXJnYywgY2hhciAqKmFyZ3YpIHsKKyBpbnQgbixtOworIGludCBpOworIGZvcihuPTE7bjxhcmdjO24rKykgeworLyogYW4gb3B0aW9uID8gKi8KKyAgaWYgKGFyZ3Zbbl1bMF09PSctJykgeworLyogaXMgaXQgIi0tIiA/ICovCisgICBpZiAoYXJndltuXVsxXT09Jy0nKSB7CisvKiAtLWJsYWJsYSBvcHRpb25zIGFyZSBub3QgdXNlZCAqLworICAgIGlmIChhcmd2W25dWzJdKSB7CisgICAgIHByaW50ZigibG9uZyBvcHRpb24gbm90IHJlY29nbml6ZWQgOiAlc1xuIixhcmd2W25dKTsKKyAgICAgZ3JyKGFyZ3ZbMF0pOworICAgIH0gZWxzZSByZXR1cm47CisgICB9CisKKyAgIG09bjsKKy8qIC1ibGFibGEsIGNoZWNrIGV2ZXJ5IGxldHRlciAqLworICAgZm9yIChpPTE7YXJndltuXVtpXTtpKyspIHsKKyAgICBpZiAoYXJndltuXVtpXT09J2QnKQorICAgICBpZiAodmlzaW9iYXNlc19kaXIpIHsKKyAgICAgIGZyZWUodmlzaW9iYXNlc19kaXIpOworICAgICAgdmlzaW9iYXNlc19kaXI9TlVMTDsKKyAgICAgfQorICAgIGlmIChhcmd2W25dW2ldPT0naCcpIHsKKyAgICAgcHJpbnR1c2FnZShhcmd2WzBdKTsKKyAgICAgZXhpdCgwKTsKKyAgICB9CisgICAgaWYgKGFyZ3Zbbl1baV09PSdzJykgeworICAgICBpZiAoKyttPT1hcmdjKSBncnIoYXJndlswXSk7CisgICAgIHNvY2tldHBvcnQ9YXJndlttXTsKKyAgICB9CisgICAgaWYgKGFyZ3Zbbl1baV09PSdrJykgeworICAgICBpZiAoKyttPT1hcmdjKSBncnIoYXJndlswXSk7CisgICAgIGtleW5hbWU9YXJndlttXTsKKyAgICB9CisgICAgaWYgKGFyZ3Zbbl1baV09PSdvJykgeworICAgICBpZiAoKyttPT1hcmdjKSBncnIoYXJndlswXSk7CisgICAgIFBhcnNlKGFyZ3ZbbV0pOworICAgIH0KKyAgICBpZiAoYXJndltuXVtpXT09J2InKQorICAgICBiYWNrdXA9MTsKKyAgICBpZiAoYXJndltuXVtpXT09J24nKQorICAgICBiYWNrdXA9MDsKKyAgICBpZiAoYXJndltuXVtpXT09J2YnKQorICAgICBidXJzdG1vZGU9VkJfQVVUT01BVElDOworICAgIGlmIChhcmd2W25dW2ldPT0naScpCisgICAgIGJ1cnN0bW9kZT1WQl9NQU5VQUw7CisgICAgaWYgKHN0cmNocihPUFRJT05TLGFyZ3Zbbl1baV0pPT1OVUxMKSB7CisgICAgIHByaW50Zigib3B0aW9uIG5vdCByZWNvZ25pemVkIDogLSVjXG4iLGFyZ3Zbbl1baV0pOworICAgICBncnIoYXJndlswXSk7CisgICAgfQorICAgfQorICAgbj1tOworICB9CisgfQorfQorCitpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKSB7CisgdHJhbnNmZXJmdW4gKnRyYW5zZmVyOworIGNoYXIgZHJpdmVyTmFtZVsxM107CisgaW50IHN0aWxsb3B0aW9ucz0xOworIGNoYXIgKmhvbWU7CisgYnJsYXBpX3NldHRpbmdzX3QgYnJsYXBpX3NldHRpbmdzOworIAorIHRyYW5zZmVyPUNoZWNrU2VuZE9yUmVjdihhcmd2WzBdKTsKKworLyogZmlyc3QgdXNlIG9wdGlvbnMgZmlsZSAqLworIGlmICgoaG9tZT1nZXRlbnYoIkhPTUUiKSkpIHsKKyAgY2hhciB2c3RwcmNbc3RybGVuKGhvbWUpK3N0cmxlbihWU1RQUkMpKzJdOworICBzdHJjcHkodnN0cHJjLGhvbWUpOworICBzdHJjYXQodnN0cHJjLCIvIiBWU1RQUkMpOworICBQYXJzZSh2c3RwcmMpOworIH0KKworLyogYSBmaXJzdCBwYXNzIHRvIGNoZWNrIG9wdGlvbnMgYW5kIHJlY29yZCB0aGVtLCBiZWZvcmUgZG9pbmcgYW55dGhpbmcgKi8KKyBDaGVja09wdGlvbnMoYXJnYy0tLGFyZ3YrKyk7CisKKy8qIG9rLCBvbmUgY2FuIHRyeSB0byBvcGVuIHRoZSBzb2NrZXQgKi8KKyBicmxhcGlfc2V0dGluZ3MuaG9zdCA9IHNvY2tldHBvcnQ7CisgYnJsYXBpX3NldHRpbmdzLmF1dGggPSBrZXluYW1lOyAKKyBpZiAoYnJsYXBpX2luaXRpYWxpemVDb25uZWN0aW9uKCZicmxhcGlfc2V0dGluZ3MsTlVMTCk8MCkKKyB7CisgIGJybGFwaV9wZXJyb3IoIkNvdWxkbid0IGluaXRpYWxpemUgY29ubmVjdGlvbiB3aXRoIEJybEFQSSIpOworICBleGl0KFJFVF9FQ09OTik7CisgfQorIGlmIChicmxhcGlfZ2V0RHJpdmVyTmFtZShkcml2ZXJOYW1lLCBzaXplb2YoZHJpdmVyTmFtZSkpPDEyKQorIHsKKyAgYnJsYXBpX3BlcnJvcigiQ291bGRuJ3QgZ2V0IGRyaXZlciBuYW1lIik7CisgIGJybGFwaV9jbG9zZUNvbm5lY3Rpb24oKTsKKyAgZXhpdChSRVRfRUNPTk4pOworIH0KKyBpZiAoc3RyY21wKGRyaXZlck5hbWUsIlZpc2lvQnJhaWxsZSIpKQorIHsKKyAgZnByaW50ZihzdGRlcnIsImJyYWlsbGUgZHJpdmVyIGlzIG5vdCBWaXNpb0JyYWlsbGVcbiIpOworICBicmxhcGlfY2xvc2VDb25uZWN0aW9uKCk7CisgIGV4aXQoUkVUX0VDT05OKTsgIAorIH0KKyAKKyBpZiAoYnJsYXBpX2VudGVyUmF3TW9kZSgiVmlzaW9CcmFpbGxlIik8MCkgeworICBmcHJpbnRmKHN0ZGVyciwiQ291bGRuJ3QgZ2V0IHJhdyBtb2RlXG4iKTsKKyAgYnJsYXBpX2Nsb3NlQ29ubmVjdGlvbigpOworICBleGl0KFJFVF9FQ09OTik7CisgfQorCisgc2lnbmFsKFNJR0lOVCxoYW5kbGVpbnQpOworIHNpZ25hbChTSUdURVJNLGhhbmRsZWludCk7CisKKyNpZmRlZiBTSUdIVVAKKyBzaWduYWwoU0lHSFVQLGhhbmRsZWludCk7CisjZW5kaWYgLyogU0lHSFVQICovCisKKyNpZmRlZiBTSUdRVUlUCisgc2lnbmFsKFNJR1FVSVQsaGFuZGxlaW50KTsKKyNlbmRpZiAvKiBTSUdRVUlUICovCisKKyNpZmRlZiBTSUdQSVBFCisgc2lnbmFsKFNJR1BJUEUsaGFuZGxlaW50KTsKKyNlbmRpZiAvKiBTSUdQSVBFICovCisKKyNpZmRlZiBTSUdBTFJNCisgc2lnbmFsKFNJR0FMUk0sdHJhbnNmZXJfdGltZW91dCk7CisjZW5kaWYgLyogU0lHQUxSTSAqLworCisgaWYgKHZpc2lvYmFzZXNfZGlyICYmIGNoZGlyKHZpc2lvYmFzZXNfZGlyKTwwKSB7CisgIHBlcnJvcih2aXNpb2Jhc2VzX2Rpcik7CisgIGZwcmludGYoc3RkZXJyLCJjb3VsZG4ndCBjaGRpciB0byBkb3dubG9hZCBkaXIsIHBsZWFzZSB1c2UgLWQgaWYgeW91IHdhbnQgdG8gc3RvcmUgZmlsZXMgaW4gLlxuIik7CisgIGV4aXQoUkVUX0VVTklYKTsKKyB9CisKKyBmb3IoO2FyZ2M7YXJnYy0tLCBhcmd2KyspIHsKKy8qIGlzIGl0IGFuIG9wdGlvbiA/ICovCisgIGlmIChzdGlsbG9wdGlvbnMpCisgIGlmIChhcmd2WzBdWzBdPT0nLScpIHsKKyAgIHN3aXRjaCAoYXJndlswXVsxXSkgeworICAgICBjYXNlICctJzogc3RpbGxvcHRpb25zPTA7IGNvbnRpbnVlOworICAgICBjYXNlICdzJzogLyogYWxyZWFkeSBwYXJzZWQgKi8KKyAgICAgY2FzZSAnayc6CisgICAgIGNhc2UgJ20nOgorCSAgICAgICBhcmdjLS07CisJICAgICAgIGFyZ3YrKzsKKyAgICAgY2FzZSAnYic6CisgICAgIGNhc2UgJ24nOgorICAgICBjYXNlICdmJzoKKyAgICAgY2FzZSAnaSc6CisgICAgIGNhc2UgJ2QnOgorICAgICBkZWZhdWx0OgorCSAgICAgICBjb250aW51ZTsKKyAgIH0KKyAgfQorICAKKy8qIG5vLCBhIGZpbGUgbmFtZSwgbGV0J3MgdHJ5IHRvIHRyYW5zZmVyIGl0ICovCisgIHRyYW5zZmVyKGFyZ3ZbMF0pOworIH0KKyBwcmludGYoInRyYW5zZmVycyBmaW5pc2hlZFxuIik7CisgdHJhbnNmZXJfZmluaXNoKHRyYW5zZmVyKTsKKyBicmxhcGlfbGVhdmVSYXdNb2RlKCk7IC8qIGNhbid0IGRvIG11Y2ggaXQgaXQgZmFpbHMgISAqLworIGJybGFwaV9jbG9zZUNvbm5lY3Rpb24oKTsKKyByZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL0RyaXZlcnMvQnJhaWxsZS9WaXNpb0JyYWlsbGUvdnN0cF90cmFuc2Zlci5jIGIvRHJpdmVycy9CcmFpbGxlL1Zpc2lvQnJhaWxsZS92c3RwX3RyYW5zZmVyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODgxMDFjMQotLS0gL2Rldi9udWxsCisrKyBiL0RyaXZlcnMvQnJhaWxsZS9WaXNpb0JyYWlsbGUvdnN0cF90cmFuc2Zlci5jCkBAIC0wLDAgKzEsNDE3IEBACisvKgorICogIENvcHlyaWdodCAoQykgMjAwNi0yMDIzIFMmUworICogIFNhbXVlbCBUaGliYXVsdCA8c2FtdWVsLnRoaWJhdWx0QGVucy1seW9uLm9yZz4KKyAqICBTw6liYXN0aWVuIEhpbmRlcmVyIDxzZWJhc3RpZW4uaGluZGVyZXJAZW5zLWx5b24ub3JnPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlIDsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWSA7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoZSBwcm9ncmFtIDsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKi8KKworLyoKKyAqIHZzdHBfdHJhbnNmZXIuYworICoKKyAqIGhhbmRsZXMgZmlsZSB0cmFuc2ZlcnMKKyAqLworCisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxjdHlwZS5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8ZmNudGwuaD4KKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorCisjaW5jbHVkZSAiYnJsYXBpLmgiCisjaW5jbHVkZSAiYnJsYXBpX3Byb3RvY29sLmgiCisKKyNpbmNsdWRlICJ2c3RwLmgiCisKKyNpZmRlZiBfX01JTkdXMzJfXworI2RlZmluZSBhbGFybSh0KSAodm9pZCkwCisjZW5kaWYKKworLyogU0VORCAqLworLyogdHJpZXMgdG8gc2VuZCBhIG1lc3NhZ2UgKi8KKyNkZWZpbmUgU0VORChidWYsc2l6ZSkgXAorZG8ge1wKKyBpZiAoYnJsYXBpX3NlbmRSYXcoYnVmLHNpemUpPDApIHtcCisgIHBlcnJvcigid2hpbGUgc2VuZGluZyIpO1wKKyAgdHJhbnNmZXJfYWJvcnQoUkVUX0VDT05OKTtcCisgfVwKK31cCit3aGlsZSAoMCkKKworLyogUkVDViAqLworLyogdHJpZXMgdG8gZ2V0IGEgbWVzc2FnZSAqLworLyogb24gZXJyb3IsIHRyeSB0byBjbGVhbiAqLworLyogYWxzbyBzZXQgYSB0aW1lb3V0ICovCisjZGVmaW5lIFJFQ1YoKSBcCit3aGlsZSAoMSkge1wKKyBhbGFybShUUllfVElNRU9VVCk7XAorIHJlcz1icmxhcGlfcmVjdlJhdyhpYnVmLEJSTEFQSV9NQVhQQUNLRVRTSVpFKTtcCisgYWxhcm0oMCk7XAorIGlmIChyZXM8MCkge1wKKyAgcGVycm9yKCJ3aGlsZSByZWNlaXZpbmciKTtcCisgIHRyYW5zZmVyX2Fib3J0KFJFVF9FQ09OTik7XAorIH1cCisgaWYgKGlidWZbMF09PVZCX1JFU0VUWzBdKSB7XAorICBmcHJpbnRmKHN0ZGVyciwidHJhbnNmZXIgaW50ZXJydXB0IGJ5IHVzZXIgIVxuIik7XAorICB0cmFuc2Zlcl9hYm9ydChSRVRfSU5UKTtcCisgfVwKKyBpZiAocmVzKSBicmVhaztcCit9CisKK2ludCB0cmFuc2ZlcnJpbmcgPSAwOwordW5zaWduZWQgY2hhciBidXJzdG1vZGUgPSBWQl9BVVRPTUFUSUM7CitpbnQgYmFja3VwID0gMDsKK2NoYXIgKnZpc2lvYmFzZXNfZGlyID0gTlVMTDsKK2NoYXIgKnZpc2lvYmFzZXNfZXh0ID0gIi52aXMiOworc3RhdGljIHVuc2lnbmVkIGNoYXIgbnVtcGFja2V0Oworc3RhdGljIGludCBzaXpldHJhbnNmZXJyZWQ7CitzdGF0aWMgY2hhciBpYnVmW0JSTEFQSV9NQVhQQUNLRVRTSVpFXTsKK3N0YXRpYyBpbnQgb3NpemU7CitzdGF0aWMgaW50IG90cmllczsKK3N0YXRpYyBjaGFyIG9idWZbQlJMQVBJX01BWFBBQ0tFVFNJWkVdOworc3RhdGljIHVuc2lnbmVkIGNoYXIgZmlsZW5hbWVbVkJfTUFYRk5MRU4rNCsxXTsKKworLyogc2hvd1BhY2tldCAqLworLyogZXZlbnR1YWxseSBzaG93IHRoZSBwYWNrZXQgYW5kIGFib3J0LCBpZiB0cmllcyBudW1iZXIgaXMgcmVhY2hlZCAqLworCitzdGF0aWMgdm9pZCBzaG93UGFja2V0KGludCBzaXplKSB7CisgaW50IGk7CisgZnByaW50ZihzdGRlcnIsInVuZXhwZWN0ZWQgJWMgcGFja2V0LCBzaXplICVkLCBjb250ZW50IDpcbiIsIGlidWZbMF0sIHNpemUpOworIGZvciAoaT0wO2k8c2l6ZTtpKyspIHsKKyAgZnByaW50ZihzdGRlcnIsIiUyeCAiLCBpYnVmW2ldKTsKKyAgaWYgKCEoKGkrMSklMTApKSBmcHJpbnRmKHN0ZGVyciwiXG4iKTsKKyB9CisgaWYgKG90cmllcysrPE5VTV9UUklFUykgcmV0dXJuOworIGZwcmludGYoc3RkZXJyLCJjb3VsZG4ndCByZWNvdmVyLCBzbyBhYm9ydGluZy4uLlxuIik7CisgdHJhbnNmZXJfYWJvcnQoUkVUX0VQUk9UTyk7Cit9CisvKiBXYWl0Rm9yT2sgKi8KKy8qIHdhaXQgZm9yICJZIiBwYWNrZXQgKi8KK3N0YXRpYyB2b2lkIFdhaXRGb3JPayh2b2lkKSB7CisgaW50IHJlczsKKyBkbyB7IFNFTkQob2J1Zixvc2l6ZSk7IFJFQ1YoKSB9Cisgd2hpbGUgKChyZXM9PTAgfHwgaWJ1ZlswXSE9VkJfT0spICYmIChzaG93UGFja2V0KHJlcyksMSkpOworfQorCisvKiByZW5hbWVCYWNrdXBzICovCisvKiByZW5hbWVzIGJhY2t1cHMsIGluY3JlYXNpbmcgdGhlaXIgbnVtYmVyLCBsaWtlIGxvZ3JvdGF0ZSBkb2VzICovCisvKiByZXR1cm5zIHZhbHVlIHJldHVybmVkIGJ5IHRoZSBsYXN0IHJlbmFtZSBjYWxsICovCitpbnQgcmVuYW1lQmFja3Vwcyhjb25zdCBjaGFyICpmaWxlbmFtZSkgeworI2RlZmluZSBTSVpFTUFYX1NVRkZJWCAoMSsyMCsxKQorIGludCBuPXN0cmxlbihmaWxlbmFtZSk7CisgY2hhciB0b1tuK1NJWkVNQVhfU1VGRklYXSxmcm9tW24rU0laRU1BWF9TVUZGSVhdOworIHN0cnVjdCBzdGF0IHN0OworIGludCBpLG1heDsKKworIG1lbWNweSh0byxmaWxlbmFtZSxuKTsKKyBmb3IgKG1heD0xO21heDttYXgrKykgeworICBzcHJpbnRmKHRvK24sIi4lYyIsbWF4KTsKKyAgaWYgKHN0YXQodG8sJnN0KTwwKSBicmVhazsKKyB9CisgaWYgKCFtYXgpIHsKKyAgZnByaW50ZihzdGRlcnIsInRvbyBtYW55IGJhY2t1cHMgZm9yICVzXG4iLGZpbGVuYW1lKTsKKyAgZXJybm89RU5BTUVUT09MT05HOworICByZXR1cm4gLTE7CisgfQorIG1lbWNweShmcm9tLGZpbGVuYW1lLG4pOworIHN0cmNweShmcm9tK24sIi4xIik7CisgaT1tYXgtMTsKKyB3aGlsZShpKSB7CisgIHNwcmludGYoZnJvbStuLCIuJXUiLGkpOworICBpZiAocmVuYW1lKGZyb20sdG8pPDApIHsKKyAgIGZwcmludGYoc3RkZXJyLCIlcyAtPiAlcyBmYWlsZWRcbiIsZnJvbSx0byk7CisgICByZXR1cm4gLTE7CisgIH0KKyAgaWYgKC0taSkgc3RyY3B5KHRvK24sZnJvbStuKTsKKyAgZWxzZSBicmVhazsKKyB9CisgcmV0dXJuKHJlbmFtZShmaWxlbmFtZSxmcm9tKSk7Cit9CisKKy8qIGZpbGVnZXQgKi8KKy8qIGdldCBmaWxlIGYgb24gVmlzaW9CcmFpbGxlICovCit2b2lkIGZpbGVnZXQoY2hhciAqZikgeworIGludCBuPXN0cmxlbihmKSxsbnBhdGgsbG5leHQ7CisgY2hhciAqYywqZDsKKyBpbnQgcmVzOworIGludCBmZDsKKyBzdHJ1Y3Qgc3RhdCBzdDsKKyBjaGFyICpwYXRoLCpleHQ7CisKKyBpZiAobj09MCkgcmV0dXJuOworCisvKiBmaW5kIHBhdGgsIGlmIGFueSAqLworIGZvciAoYz1mK24tMTsgYz49ZiAmJiAqYyE9Jy8nOyBjLS0pOworIGlmIChjPj1mKSB7CisgIHBhdGg9ZjsKKyAgbG5wYXRoPWMtZjsKKyAgKmMrKz0nXDAnOworICBmPWM7CisgfSBlbHNlIHsKKyAgcGF0aD1OVUxMOworICBsbnBhdGg9LTE7CisgfQorCisvKiByZW1vdmUgZXh0ZW5zaW9uICovCisgZm9yIChjPWY7ICpjICYmICpjIT0nLic7IGMrKyk7CisgaWYgKCpjKSB7CisgIGV4dD1jOworICBsbmV4dD1uLShleHQtZik7CisgfSBlbHNlIHsKKyAgZXh0PU5VTEw7CisgIGxuZXh0PS0xOworIH0KKyBuPWMtZjsKKworIGlmIChwYXRoKSBwcmludGYoImdldHRpbmcgJXMgaW4gJXNcbiIsZixwYXRoKTsKKyBlbHNlIHByaW50ZigiZ2V0dGluZyAlc1xuIixmKTsKKworIHRyYW5zZmVyX2luaXQoZmlsZWdldCk7CisKKy8qIHNlbmRpbmcgZmlsZW5hbWUgKGNhbiBjb250YWluICogYW5kID8pICovCisgb2J1ZlswXT1WQl9VTkxPQUQ7CisgbWVtY3B5KCZvYnVmWzFdLGYsbik7Cisgb3NpemU9bisxOworIG90cmllcz0wOworCisgd2hpbGUoMSkgeworICBTRU5EKG9idWYsb3NpemUpOworICBudW1wYWNrZXQ9JzEnOworICBSRUNWKCk7CisgIGlmIChpYnVmWzBdPT1WQl9GSUxFU19PVkVSWzBdKSBicmVhazsgLyogZW5kIG9mIGZpbGUgbGlzdCAqLworICBpZiAocmVzPDMpIHsgc2hvd1BhY2tldChyZXMpOyBjb250aW51ZTsgfQorICBpZiAoaWJ1ZlswXSE9VkJfRklMRUhFUkUpIHsgc2hvd1BhY2tldChyZXMpOyBjb250aW51ZTsgfQorICBpZiAoaWJ1ZlsxXSE9bnVtcGFja2V0KSB7IHNob3dQYWNrZXQocmVzKTsgY29udGludWU7IH0KKworLyogb2ssIFZpc2lvQnJhaWxsZSBwcm9wb3NlZCBhIGZpbGUsIGxldCdzIHRyeSB0byBnZXQgaXQgKi8KKyAgaWYgKHJlcy0zPlZCX01BWEZOTEVOKSB7CisgICBmcHJpbnRmKHN0ZGVyciwibmFtZSB0b28gbG9uZywgZ2l2aW5nIHVwIHRoYXQgZmlsZVxuIik7CisgICBvYnVmWzBdPVZCX05FWFQ7CisgICBvYnVmWzFdPWlidWZbMV07CisgICBvc2l6ZT0yOworICAgb3RyaWVzPTA7CisgICBjb250aW51ZTsKKyAgfQorLyogY29weSBpdHMgbmFtZSAqLworICB7CisgICBjaGFyIGZ1bGxwYXRoWyhsbnBhdGgrMSkrKHJlcy0zKSsoZXh0P2xuZXh0KzE6c3RybGVuKHZpc2lvYmFzZXNfZXh0KSkrMV07CisgICBpZiAocGF0aCkgeworICAgIHN0cmNweShmdWxscGF0aCxwYXRoKTsKKyAgICBzdHJjYXQoZnVsbHBhdGgsIi8iKTsKKyAgIH0KKyAgIGZvcihjPWlidWYrMyxkPWZ1bGxwYXRoK2xucGF0aCsxO2MtaWJ1ZjxyZXM7KmQrKz10b2xvd2VyKCpjKyspKQorICAgZnVsbHBhdGhbbG5wYXRoKzErcmVzLTNdPSdcMCc7CisgICBzdHJjYXQoZnVsbHBhdGgsZXh0P2V4dDp2aXNpb2Jhc2VzX2V4dCk7CisKKyAgIGlmIChiYWNrdXAgJiYgc3RhdChmdWxscGF0aCwmc3QpPj0wKQorICAgIGlmIChyZW5hbWVCYWNrdXBzKGZ1bGxwYXRoKT09LTEpCisgICAgIHBlcnJvcigiY291bGRuJ3QgcmVuYW1lIGJhY2t1cHMsIG92ZXJ3cml0aW5nIik7CisgICBpZiAoKGZkPW9wZW4oZnVsbHBhdGgsT19XUk9OTFl8T19DUkVBVHxPX1RSVU5DLDA2NDQpKTwwKSB7CisgICAgLyogb3Blbm91dCBmYWlsZWQsIGdpdmUgdXAgdGhhdCBmaWxlICovCisgICAgcGVycm9yKGZ1bGxwYXRoKTsKKyAgICBmcHJpbnRmKHN0ZGVyciwib3BlbiBmYWlsZWQsIGdpdmluZyB1cCB0aGF0IGZpbGVcbiIpOworICAgIG9idWZbMF09VkJfTkVYVDsKKyAgICBvYnVmWzFdPWlidWZbMV07CisgICAgb3NpemU9MjsKKyAgICBvdHJpZXM9MDsKKyAgICBjb250aW51ZTsKKyAgIH0KKworLyogc3RhcnQgdHJhbnNmZXIgOiAqLworICAgb2J1ZlswXT1WQl9BQ0tfREFUQTsKKyAgIG9idWZbMV09bnVtcGFja2V0OworICAgb3NpemU9MjsKKyAgIG90cmllcz0wOworICAgbnVtcGFja2V0PShudW1wYWNrZXQrMSkmJzcnOworICAgc2l6ZXRyYW5zZmVycmVkPTA7CisvKiByZWFkeSB0byB0cmFuc2ZlciAhICovCisgICB3aGlsZSAoMSkgeworICAgIFNFTkQob2J1Zixvc2l6ZSk7CisgICAgcHJpbnRmKCJcciVzOiAlZEtvLi4uIixmdWxscGF0aCxzaXpldHJhbnNmZXJyZWQ+PjEwKTsKKyAgICBmZmx1c2goc3Rkb3V0KTsKKyAgICBSRUNWKCk7CisgICAgaWYgKGlidWZbMF09PVZCX0RBVEFfT1ZFUikgYnJlYWs7CisgICAgaWYgKHJlczwyKSB7IHNob3dQYWNrZXQocmVzKTsgY29udGludWU7IH0KKyAgICBpZiAoaWJ1ZlswXSE9VkJfSEVSRVNfREFUQSkgeyBzaG93UGFja2V0KHJlcyk7IGNvbnRpbnVlOyB9CisgICAgaWYgKGlidWZbMV0hPW51bXBhY2tldCkgeyBzaG93UGFja2V0KHJlcyk7IGNvbnRpbnVlOyB9CisgICAgaWYgKHdyaXRlKGZkLGlidWYrMixyZXMtMik8cmVzLTIpIHsKKyAgICAgZnByaW50ZihzdGRlcnIsIndyaXRpbmcgZGF0YSBvbiBkaXNrIGZvciBmaWxlICVzXG4iCisgCQkgICAgIlNvIGdpdmluZyB1cFxuIixmdWxscGF0aCk7CisgICAgIHRyYW5zZmVyX2Fib3J0KFJFVF9FVU5JWCk7CisgICAgfQorICAgIG9idWZbMF09VkJfQUNLX0RBVEE7CisgICAgb2J1ZlsxXT1udW1wYWNrZXQ7CisgICAgb3NpemU9MjsKKyAgICBvdHJpZXM9MDsKKyAgICBzaXpldHJhbnNmZXJyZWQrPXJlcy0yOworICAgIG51bXBhY2tldD0obnVtcGFja2V0KzEpJic3JzsKKyAgIH0KKy8qIHRyYW5zZmVyIGZpbmlzaGVkICovCisgICBjbG9zZShmZCk7CisgICBwcmludGYoIm9rXG4iKTsKKyAgIG9idWZbMF09VkJfT0s7CisgICBvc2l6ZT0xOworICAgb3RyaWVzPTA7CisgIH0KKyB9CisgdHJhbnNmZXJyaW5nPTA7Cit9CisKKworc3RhdGljIGludCB0cnlUb0ZpbmQoY2hhciAqZiwgaW50ICpmZCkgeworIGlmICgoKmZkPW9wZW4oZixPX1JET05MWSkpPDApIHsKKyAgc3RyY3B5KGlidWYsZik7CisgIHN0cmNhdChpYnVmLHZpc2lvYmFzZXNfZXh0KTsKKyAgaWYgKCgqZmQ9b3BlbihpYnVmLE9fUkRPTkxZKSk8MCkgeworICAgc3RyY3B5KGlidWYsZik7CisgICBzdHJjYXQoaWJ1ZiwiLnZpcyIpOworICAgaWYgKCgqZmQ9b3BlbihpYnVmLE9fUkRPTkxZKSk8MCkgeworICAgIHN0cmNweShpYnVmLGYpOworICAgIHN0cmNhdChpYnVmLCIuVmlzIik7CisgICAgaWYgKCgqZmQ9b3BlbihpYnVmLE9fUkRPTkxZKSk8MCkgeworICAgICBzdHJjcHkoaWJ1ZixmKTsKKyAgICAgc3RyY2F0KGlidWYsIi5WSVMiKTsKKyAgICAgaWYgKCgqZmQ9b3BlbihpYnVmLE9fUkRPTkxZKSk8MCkgeworICAgICAgcmV0dXJuIDA7CisgICAgIH0KKyAgICB9CisgICB9CisgIH0KKyB9CisgcmV0dXJuIDE7Cit9CisKKy8qIGZpbGVwdXQgKi8KKy8qIHNlbmQgZmlsZSBmIHRvIFZpc2lvQnJhaWxsZSAqLwordm9pZCBmaWxlcHV0KGNoYXIgKmYpIHsKKyBpbnQgbjsKKyBjaGFyICpjOworIGludCByZXM7CisgaW50IGZkOworCisgaWYgKHZpc2lvYmFzZXNfZGlyICYmIChmWzBdIT0nLicgfHwgKGZbMV0hPScuJyAmJiBmWzFdIT0nLycpIHx8IChmWzFdPT0nLicgJiYgZlsyXSE9Jy8nKSkpIHsKKyAgY2hhciAqZjIgPSBtYWxsb2Moc3RybGVuKHZpc2lvYmFzZXNfZGlyKSsxK3N0cmxlbihmKSk7CisgIHN0cmNweShmMix2aXNpb2Jhc2VzX2Rpcik7CisgIHN0cmNhdChmMixmKTsKKyAgaWYgKHRyeVRvRmluZChmMiwgJmZkKSkgeworICAgZnJlZShmMik7CisgICBnb3RvIG9rOworICB9CisgIGZwcmludGYoc3RkZXJyLCJjb3VsZG4ndCBnZXQgaXQgZnJvbSBkb3dubG9hZCBkaXJlY3RvcnksIHRyeWluZyBmcm9tIGN1cnJlbnQgZGlyZWN0b3J5LlxuIik7CisgIGZyZWUoZjIpOworIH0KKyBpZiAoIXRyeVRvRmluZChmLCAmZmQpKSB7CisgIGZwcmludGYoc3RkZXJyLCJvcGVuIGZhaWxlZCwgZ2l2aW5nIHVwIHRoYXQgZmlsZVxuIik7CisgIHJldHVybjsKKyB9CisKK29rOgorIHRyYW5zZmVyX2luaXQoZmlsZXB1dCk7CisKKyBwcmludGYoInB1dHRpbmcgJXNcbiIsZik7CisKKy8qIHRydW5jYXRlIGZpbGVuYW1lIDogbm8gZXh0ZW5zaW9uLCA4IGNoYXJzIG1heCAqLworIGlmICgoYz1zdHJyY2hyKGYsJy8nKSkpIGY9YysxOworIGZvciAoYz1mOypjICYmICpjIT0nLicgJiYgYzxmK1ZCX01BWEZOTEVOO2MrKyk7Cisgbj1jLWY7CisKKyBvYnVmWzBdPVZCX0ZJTEVIRVJFOworIG9idWZbMV09bnVtcGFja2V0PScxJzsKKyBvYnVmWzJdPVZCX0ZJTEVUX0FHRU5EQTsKKyBtZW1jcHkoJm9idWZbM10sZixuKTsKKyBtZW1jcHkoZmlsZW5hbWUsZixuKTsKKyBmaWxlbmFtZVtuXT0wOworIG9zaXplPW4rMzsKKyBvdHJpZXM9MDsKKworIHNpemV0cmFuc2ZlcnJlZD0wOworIHdoaWxlKDEpIHsKKyAgU0VORChvYnVmLG9zaXplKTsKKyAgcHJpbnRmKCJcciVzOiAlZEtvLi4uIixmaWxlbmFtZSxzaXpldHJhbnNmZXJyZWQ+PjEwKTsKKyAgZmZsdXNoKHN0ZG91dCk7CisgIFJFQ1YoKTsKKyAgaWYgKGlidWZbMF09PVZCX05FWFQpIGJyZWFrOworICBpZiAocmVzPDIpIHsgc2hvd1BhY2tldChyZXMpOyBjb250aW51ZTsgfQorICBpZiAoaWJ1ZlswXSE9VkJfQUNLX0RBVEEpIHsgc2hvd1BhY2tldChyZXMpOyBjb250aW51ZTsgfQorICBpZiAoaWJ1ZlsxXSE9bnVtcGFja2V0KSB7IHNob3dQYWNrZXQocmVzKTsgY29udGludWU7IH0KKyAgaWYgKChyZXM9cmVhZChmZCwmb2J1ZlsyXSxTSVpFX1BVVCkpPDApIHsKKyAgIGZwcmludGYoc3RkZXJyLCJyZWFkaW5nIGRhdGEgb24gZGlzayBmb3IgZmlsZSAlcyBmYWlsZWQ6ICVzXG4iCisJCSAgIlNvIGdpdmluZyB1cCBmb3IgdGhpcyBmaWxlXG4iLHN0cmVycm9yKGVycm5vKSxmaWxlbmFtZSk7CisgICBicmVhazsKKyAgfQorICBpZiAocmVzPT0wKSB7IC8qIGVvZiAqLworICAgb2J1ZlswXT1WQl9EQVRBX09WRVI7CisgICBvc2l6ZT0xOworICAgb3RyaWVzPTA7CisgICBXYWl0Rm9yT2soKTsKKyAgIGJyZWFrOworICB9CisgIG9idWZbMF09VkJfSEVSRVNfREFUQTsKKyAgb2J1ZlsxXT1udW1wYWNrZXQ9KG51bXBhY2tldCsxKSYnNyc7CisgIG9zaXplPXJlcysyOworICBvdHJpZXM9MDsKKyAgc2l6ZXRyYW5zZmVycmVkKz1yZXM7CisgfQorLyogdHJhbnNmZXIgZmluaXNoZWQgKi8KKyBjbG9zZShmZCk7CisgcHJpbnRmKCJva1xuIik7Cit9CisKKy8qIHRyYW5zZmVyX2luaXQgKi8KKy8qIHNlbmQgdGhlIGNvcnJlY3QgIkkiIHBhY2tldCwgYWNjb3JkaW5nIHRvIG9wdGlvbnMgKi8KK3ZvaWQgdHJhbnNmZXJfaW5pdCh0cmFuc2ZlcmZ1biAqZikgeworIGlmICh0cmFuc2ZlcnJpbmcpIHJldHVybjsKKyB0cmFuc2ZlcnJpbmc9MTsKKworIG9idWZbMF09VkJfSU5JVF9QQVJBTVM7Cisgb2J1ZlsxXT0oZj09ZmlsZWdldD9WQl9VTkxPQUQ6VkJfTE9BRCk7Cisgb2J1ZlsyXT1idXJzdG1vZGU7Cisgb3NpemU9MzsKKyBvdHJpZXM9MDsKKyBXYWl0Rm9yT2soKTsKKyBudW1wYWNrZXQ9JzEnOworfQorCisvKiB0cmFuc2Zlcl9maW5pc2ggKi8KKy8qIHRlcm1pbmF0ZSB0cmFuc2ZlciAoYWxzbyBlbmQgb2YgZmlsZSBsaXN0KSAqLwordm9pZCB0cmFuc2Zlcl9maW5pc2godHJhbnNmZXJmdW4gKmYpIHsKKyBpZiAoIXRyYW5zZmVycmluZykgcmV0dXJuOworIHRyYW5zZmVycmluZz0wOworIGlmIChmPT1maWxlcHV0KQorICBTRU5EKFZCX0ZJTEVTX09WRVIsc3RybGVuKFZCX0ZJTEVTX09WRVIpKTsKK30KKworLyogdHJhbnNmZXJfYWJvcnQgKi8KKy8qIGlmIHNvbWV0aGluZyBuYXN0eSBvY2N1cmVkLCB0cnkgdG8gY2xlYW4gKi8KK3ZvaWQgdHJhbnNmZXJfYWJvcnQoaW50IGV4aXRudW0pIHsKKyBicmxhcGlfc2VuZFJhdyhWQl9SRVNFVCxzdHJsZW4oVkJfUkVTRVQpKTsKKyBicmxhcGlfbGVhdmVSYXcoKTsKKyBicmxhcGlfY2xvc2VDb25uZWN0aW9uKCk7CisgZXhpdChleGl0bnVtKTsKK30KKworLyogdHJhbnNmZXJfdGltZW91dCAqLworLyogY2FsbGVkIHdoZW4gUmVjdlBhY2tldCB0aW1lZCBvdXQgKi8KK3ZvaWQgdHJhbnNmZXJfdGltZW91dChpbnQgc2lnbnVtKSB7CisgaWYgKG90cmllcysrPj1OVU1fVFJJRVMpIHsKKyAgZnByaW50ZihzdGRlcnIsIk5vIHJlcGx5IGZyb20gdGVybWluYWwgISBBc3N1bWluZyBkZWFkLCBoZW5jZSBhYm9ydGluZ1xuIik7CisgIHRyYW5zZmVyX2Fib3J0KFJFVF9FUFJPVE8pOworIH0KKyBTRU5EKG9idWYsb3NpemUpOworIGFsYXJtKDEpOworfQpkaWZmIC0tZ2l0IGEvRHJpdmVycy9CcmFpbGxlL1ZveWFnZXIvTWFrZWZpbGUuaW4gYi9Ecml2ZXJzL0JyYWlsbGUvVm95YWdlci9NYWtlZmlsZS5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYjUyNWFjCi0tLSAvZGV2L251bGwKKysrIGIvRHJpdmVycy9CcmFpbGxlL1ZveWFnZXIvTWFrZWZpbGUuaW4KQEAgLTAsMCArMSwyOCBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorIyAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyMKKyMgQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorIworIyBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorIworIyBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisjIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyMgbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisjCisjIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK0RSSVZFUl9DT0RFID0gdm8KK0RSSVZFUl9OQU1FID0gVm95YWdlcgorRFJJVkVSX1VTQUdFID0gNDQvNzAsIFBhcnQyMzIgKHNlcmlhbCBhZGFwdGVyKSwgQnJhaWxsZVBlbi9FYXN5TGluaworRFJJVkVSX1ZFUlNJT04gPSAwLjMgKEp1bmUgMjAwOSkKK0RSSVZFUl9ERVZFTE9QRVJTID0gU3TDqXBoYW5lIERveW9uIDxzLmRveW9uQHZpZGVvdHJvbi5jYT4KK2luY2x1ZGUgJChTUkNfVE9QKWJyYWlsbGUubWsKKworYnJhaWxsZS4kTzoKKwkkKENDKSAkKEJSTF9DRkxBR1MpICQoS0RSSVZFUikgLWMgJChTUkNfRElSKS9icmFpbGxlLmMKKwpkaWZmIC0tZ2l0IGEvRHJpdmVycy9CcmFpbGxlL1ZveWFnZXIvUkVBRE1FIGIvRHJpdmVycy9CcmFpbGxlL1ZveWFnZXIvUkVBRE1FCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJhM2M2YmUKLS0tIC9kZXYvbnVsbAorKysgYi9Ecml2ZXJzL0JyYWlsbGUvVm95YWdlci9SRUFETUUKQEAgLTAsMCArMSw4MiBAQAorQlJMVFRZIERyaXZlciBmb3IgdGhlIFRpZW1hbiBWb3lhZ2VyIEJyYWlsbGUgRGlzcGxheQorVGhpcyBpcyB0aGUgdXNlci1zcGFjZS1vbmx5IHZlcnNpb24gb2YgdGhlIGRyaXZlci4KK1ZlcnNpb24gMC4xMCAoTWFyY2ggMjAwNCkKKworQ29weXJpZ2h0IDIwMDQgYnkgU3TpcGhhbmUgRG95b24gIDxzLmRveW9uQHZpZGVvdHJvbi5jYT4KKworVGhpcyBpcyBhIHBhcnRpYWwgcmV3cml0ZSBvZiB0aGUgZHJpdmVyIHdoaWNoIGZ1bmN0aW9ucyBlbnRpcmVseSBmcm9tCit1c2VyLXNwYWNlICh3aGVyZWFzIHRoZSBwcmV2aW91cyBkcml2ZXIgZGVwZW5kZWQgb24gYSBrZXJuZWwgZHJpdmVyIGZvcgordGhlIFVTQiBjb21tdW5pY2F0aW9uIHdpdGggdGhlIFZveWFnZXIgZGlzcGxheSkuCisKK1RoaXMgZHJpdmVyIHN1cHBvcnRzIHRoZSBUaWVtYW4gVm95YWdlciA0NCBhbmQgNzAuCisKK1RoZSBkcml2ZXIgd29ya3Mgd2l0aCBsYXRlciAyLjQueCBrZXJuZWxzIGFuZCB3aXRoIGF0IGxlYXN0IHNvbWUgdmVyc2lvbnMKK2luIHRoZSAyLjYueCBzZXJpZXMuCitOb3RlIHRoYXQgdGhlIGtlcm5lbCBicmx2Z2VyIGRyaXZlciB1c2VkIHdpdGggdGhlIG9sZCBCUkxUVFkgZHJpdmVyIGRvZXMKK25vdCB3b3JrIHByb3Blcmx5IHdpdGggMi42Lngga2VybmVscy4KKworTWFueSB0aGFua3MgdG8gdGhlIFRpZW1hbiBwZW9wbGU6IENvcmFuZCB2YW4gU3RyaWVuLCBJdmFyIElsbGluZywgRGFwaG5lCitWb2dlbGFhciBhbmQgSW5ncmlkIFZvZ2VsLiBUaGV5IHByb3ZpZGVkIHVzIHdpdGggYSBCcmFpbGxlIGRpc3BsYXkgKGFzCit3ZWxsIGFzIHByb2dyYW1taW5nIGluZm9ybWF0aW9uKSBzbyB0aGF0IHdlIGNvdWxkIHdyaXRlIHRoaXMgZHJpdmVyLiBUaGV5CityZXBsYWNlZCB0aGUgZGlzcGxheSB3aGVuIGl0IGJyb2tlIGFuZCB0aGV5IGFuc3dlcmVkIG91ciB0ZWNobmljYWwKK3F1ZXN0aW9ucy4gSXQgaXMgdmVyeSBtb3RpdmF0aW5nIHdoZW4gY29tcGFuaWVzIHRha2UgYW4gaW50ZXJlc3QgaW4gc3VjaAorcHJvamVjdHMgYW5kIGFyZSBzbyBzdXBwb3J0aXZlLgorCitUaGFua3MgdG8gQW5kb3IgRGVtYXJ0ZWF1IDxhZGVtYXJ0ZUBzdHVkZW50cy5jcy51dS5ubD4gd2hvIGdvdCB0aGlzIHdob2xlCitwcm9qZWN0IHN0YXJ0ZWQgYW5kIGJldGEtdGVzdGVkIGFsbCBvdXIgZWFybHkgYnVnZ3kgYXR0ZW1wdHMuCisKK1RoYW5rcyB0byBTdOlwaGFuZSBEYWx0b24gd2hvIHdyb3RlIHRoZSBpbml0aWFsIHZlcnNpb24gb2YgdGhlIG9sZCBrZXJuZWwKK2RyaXZlci4gV2l0aG91dCBoaXMgaW5pdGlhdGl2ZSB0aGlzIHByb2plY3Qgd291bGQgbm90IGhhdmUgYmVlbiBhIHN1Y2Nlc3MuCisKK1RoaXMgcmV3cml0ZSBvZiB0aGUgZHJpdmVyIHNob3VsZCBhbGxvdyBtb3JlIGZsZXhpYmlsaXR5LCBidXQgaXMgYXMgb2YgeWV0Cit2ZXJ5IHlvdW5nIGFuZCBub3QgdGhvcm91Z2hseSB0ZXN0ZWQuCisKK1doZW4gQlJMVFRZIHdpbGwgYmUgcnVubmluZywgcHJlc3MgdGhlIGxlZnRtb3N0IHJvdXRpbmcga2V5IHRvIGJyaW5nIHVwCit0aGUgaGVscCBzY3JlZW4gc28geW91IGNhbiByZWFkIHRoZSBkZXRhaWxzIG9mIHRoZSBrZXkgYmluZGluZ3MuCisKK1VzZXJzIG9mIHRoZSAyLjYueCBrZXJuZWwgbWF5IGV4cGVyaWVuY2Ugc29tZSBkaWZmaWN1bHRpZXMuICBUaGUgb2xkCitrZXJuZWwgZHJpdmVyLCB3aGljaCBpcyBpbmNsdWRlZCBpbiB0aGUgb2ZmaWNpYWwga2VybmVscywgd2lsbCBhY3R1YWxseQorZ2V0IGluIHRoZSB3YXkgb2YgdGhpcyBkcml2ZXIgYXMgaXQgd2lsbCBjbGFpbSB0aGUgVVNCIGludGVyZmFjZSB0byB0aGUKK2Rpc3BsYXksIGFuZCBJJ3ZlIHNlZW4gc29tZSBoYW5ncyBvY2N1ciB3aGVuIEJSTFRUWSBhc2tzIHRvIGRpc2Nvbm5lY3QKK3RoZSBrZXJuZWwgZHJpdmVyLiBJZiB5b3UgaGF2ZSB0aGlzIHByb2JsZW0geW91IHNob3VsZCBtYWtlIHN1cmUgdGhlCitrZXJuZWwgbW9kdWxlIGNhbGxlZCBicmx2Z2VyIGlzIG5vdCBpbnNlcnRlZCBpbnRvIHlvdXIga2VybmVsLiBPbmUgc2ltcGxlCit3YXkgdG8gcHJldmVudCB0aGF0IG1vZHVsZSBmcm9tIGF1dG8tbG9hZGluZyBpcyB0byByZW5hbWUgdGhlIG1vZHVsZSBmaWxlCitzbyBpdCBpc24ndCBmb3VuZC4KK2NkIC9saWIvbW9kdWxlcy9gdW5hbWUgLXJgL2tlcm5lbC9kcml2ZXJzL3VzYi8KK212IGJybHZnZXIubyBicmx2Z2VyLm8uaG9sZAorSWYgbHNtb2Qgc2hvd3MgdGhlIGJybHZnZXIgbW9kdWxlIGFzIGFscmVhZHkgbG9hZGVkIHRoZW4gZG8KK3JtbW9kIGJybHZnZXIKKworVGhlIG9sZCBrZXJuZWwgZHJpdmVyIHdpbGwgc29vbiBiZSBwdWxsZWQgb3V0IG9mIDIuNi54IGtlcm5lbHMuCisKK0JSTFRUWSBjdXJyZW50bHkgYXNzdW1lcyB0aGUgZGVmYXVsdCBicmFpbGxlIGRldmljZSB0byBiZSBhIHNlcmlhbCBwb3J0LAorc28geW91IG11c3QgdGVsbCBpdCB0aGF0IGl0IGlzIGluIGZhY3QgVVNCLgorRWl0aGVyIHByb3ZpZGUgdGhlICItLXdpdGgtYnJhaWxsZS1kZXZpY2U9dXNiOiIgb3B0aW9uIHdoZW4gcnVubmluZyB0aGUKK0JSTFRUWSB0b3AtbGV2ZWwgLi9jb25maWd1cmUgY29tbWFuZCwgb3IgdXNlIHRoZSBicmFpbGxlLWRldmljZSBwYXJhbWV0ZXIKK2luIHlvdXIgQlJMVFRZIGNvbmZpZ3VyYXRpb24gZmlsZSAoL2V0Yy9icmx0dHkuY29uZik6CiticmFpbGxlLWRldmljZSB1c2I6CisKK0lmIHlvdSBhY3R1YWxseSBoYXZlIG1vcmUgdGhhbiBvbmUgVm95YWdlciBkaXNwbGF5IGNvbm5lY3RlZCBhdCB0aGUgc2FtZQordGltZSwgeW91IGNhbiBhbHNvIHNwZWNpZnkgdGhlIHNlcmlhbCBudW1iZXIgb2YgdGhlIGRldmljZSB0aGF0IHlvdSB3YW50Cit0byB1c2UuCisKK1RoaXMgZHJpdmVyIGtub3dzIGEgbnVtYmVyIG9mIGRyaXZlciBwYXJhbWV0ZXJzIHdoaWNoIHlvdSBjYW4gcGFzcyB2aWEKK3RoZSBicmFpbGxlLXBhcmFtZXRlcnMgY2xhdXNlIGluIHlvdXIgQlJMVFRZIGNvbmZpZ3VyYXRpb24gZmlsZQorKC9ldGMvYnJsdHR5LmNvbmYpIG9yIHZpYSBicmx0dHkncyAtQiAoLS1icmFpbGxlLXBhcmFtZXRlcnM9KSBjb21tYW5kCitsaW5lIG9wdGlvbi4KKworSW5wdXRNb2RlOiBUaGlzIHBhcmFtZXRlciBzcGVjaWZpZXMgd2hldGhlciBvciBub3QgdGhlIGVpZ2h0IHRvcCBrZXlzCitmdW5jdGlvbiBhcyBhIGJyYWlsbGUga2V5Ym9hcmQuIFdoZW4gc2V0IHRvICJubyIgKHRoZSBkZWZhdWx0KSwgdG9wCitrZXkgY29tYmluYXRpb25zIHBlcmZvcm0gdmFyaW91cyBuYXZpZ2F0aW9uYWwgYW5kIG9wZXJhdGlvbmFsCitmdW5jdGlvbnMuIFdoZW4gc2V0IHRvIHllcyIsIHRoZXkgZnVuY3Rpb24gYXMgYW4gOC1kb3QgYnJhaWxsZQora2V5Ym9hcmQuIElmIEIsIEMsIG9yIEIrQyBpcyBwcmVzc2VkIGFsb25nIHdpdGggYW55IHRvcCBrZXkKK2NvbWJpbmF0aW9uIHRoZW4gaXQncyBhcyBpZiB0aGlzIHBhcmFtZXRlciB3ZXJlIHNldCB0byAibm8iLgorCitUaGVyZSBhcmUgb25seSBhIGhhbmRmdWwgb2YgQlJMVFRZIHVzZXJzLCBzbyBpZiB5b3UgYXJlIHRyeWluZyBvdXQgdGhpcworZHJpdmVyLCBwbGVhc2UgZHJvcCB1cyBhIG5vdGUsIGV2ZW4gaWYgeW91IGhhdmUgbm8gcHJvYmxlbXMhCisKK05vdGUgdG8gQlJMVFRZIGRldmVsb3BlcnM6IFRoaXMgaXMgbXkgZmlyc3QgYXR0ZW1wdCBhdCBjb21iaW5pbmcgdGhlIGtleQorYmluZGluZyBkZWZpbml0aW9ucyB3aXRoIHRoZSBoZWxwIGZpbGUgdGV4dCBpbiBvbmUgcGxhY2UsIHRocm91Z2gKK2Fubm90YXRpb25zIGluIHRoZSBicmFpbGxlLmMgZmlsZS4gSWYgeW91IGNoYW5nZSB0aGUga2V5IGJpbmRpbmdzLAorY3VycmVudGx5IHlvdSBuZWVkIHB5dGhvbiBpbnN0YWxsZWQgdG8gYmUgYWJsZSB0byByZWJ1aWxkIHRoZSBoZWxwCitmaWxlcy4KZGlmZiAtLWdpdCBhL0RyaXZlcnMvQnJhaWxsZS9Wb3lhZ2VyL1RPRE8gYi9Ecml2ZXJzL0JyYWlsbGUvVm95YWdlci9UT0RPCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBmOTY5ZjUKLS0tIC9kZXYvbnVsbAorKysgYi9Ecml2ZXJzL0JyYWlsbGUvVm95YWdlci9UT0RPCkBAIC0wLDAgKzEsNSBAQAorUG9zc2libGUgaW1wcm92ZW1lbnRzOgorLUdldCBjb21tZW50cyBhbmQgcG9zc2libHkgcmV3b3JrIGtleSBiaW5kaW5ncy4KKy1BZGQgc29tZSBtb3JlIGJpbmRpbmdzOiBmb3IgdG9nZ2xpbmcgc29tZSBlbnZpcm9ubWVudCBzZXR0aW5ncworICAgZm9yIGluc3RhbmNlLgorLVR1cm4gdGhlIGRpc3BsYXkgb2ZmIHdoZW4gaWRsZSB0byBzYXZlIHBvd2VyIG9uIGxhcHRvcHMuCmRpZmYgLS1naXQgYS9Ecml2ZXJzL0JyYWlsbGUvVm95YWdlci9icmFpbGxlLmMgYi9Ecml2ZXJzL0JyYWlsbGUvVm95YWdlci9icmFpbGxlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2FmNTFjYgotLS0gL2Rldi9udWxsCisrKyBiL0RyaXZlcnMvQnJhaWxsZS9Wb3lhZ2VyL2JyYWlsbGUuYwpAQCAtMCwwICsxLDEwMzEgQEAKKy8qCisgKiBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorICogICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorICoKKyAqIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorICoKKyAqIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyAqLworCisvKiBWb3lhZ2VyL2JyYWlsbGUuYyAtIEJyYWlsbGUgZGlzcGxheSBkcml2ZXIgZm9yIFRpZW1hbiBWb3lhZ2VyIGRpc3BsYXlzLgorICoKKyAqIFdyaXR0ZW4gYnkgU3TpcGhhbmUgRG95b24gIDxzLmRveW9uQHZpZGVvdHJvbi5jYT4KKyAqCisgKiBJdCBpcyBiZWluZyB0ZXN0ZWQgb24gVm95YWdlciA0NCwgc2hvdWxkIGFsc28gc3VwcG9ydCBWb3lhZ2VyIDcwLgorICogSXQgaXMgZGVzaWduZWQgdG8gYmUgY29tcGlsZWQgaW4gQlJMVFRZIHZlcnNpb24gNC4xLgorICoKKyAqIEhpc3Rvcnk6CisgKiAwLjIxLCBKYW51YXJ5IDIwMDU6CisgKiAgICAgICBSZW1vdmUgZ2NjNCBzaWduZWRuZXNzL3Vuc2lnbmVkbmVzcyBpbmNvbXBhdGliaWxpdGllcy4KKyAqIDAuMjAsIEp1bmUgMjAwNDoKKyAqICAgICAgIEFkZCBzdGF0dXNjZWxscyBwYXJhbWV0ZXIuCisgKiAgICAgICBSZW5hbWUgYnJsaW5wdXQgcGFyYW1ldGVyIHRvIGlucHV0bW9kZS4KKyAqICAgICAgIENoYW5nZSBkZWZhdWx0IGlucHV0bW9kZSB0byBuby4KKyAqICAgICAgIENob3JkZWQgZnVuY3Rpb25zIHdvcmsgd2l0aG91dCBjaG9yZGluZyB3aGVuIGlucHV0bW9kZSBpcyBuby4KKyAqICAgICAgIE1vdmUgY29tcGxleCByb3V0aW5nIGtleSBjb21iaW5hdGlvbnMgdG8gZnJvbnQvZG90IGtleXMuCisgKiAgICAgICBEdXBsaWNhdGUgc3RhdHVzIGtleSBiaW5kaW5ncyBvbiBmcm9udC9kb3Qga2V5cy4KKyAqICAgICAgIEV4ZWN1dGUgb24gZmlyc3QgcmVsZWFzZSByYXRoZXIgdGhhbiBvbiBhbGwgcmVsZWFzZWQuCisgKiAgICAgICBBZGQgc3VwcG9ydCBmb3IgdGhlIHBhcnQyMzIgc2VyaWFsIGFkYXB0ZXIuCisgKiAwLjEwLCBNYXJjaCAyMDA0OiBVc2UgQlJMVFRZIGNvcmUgcmVwZWF0IGZ1bmN0aW9ucy4gQWRkIGJybGlucHV0IHBhcmFtZXRlcgorICogICBhbmQgdG9nZ2xlIHRvIGRpc2FsbG93IGJyYWlsbGUgdHlwaW5nLgorICogMC4wMSwgSmFudWFyeSAyMDA0OiBmb3JrIGZyb20gdGhlIG9yaWdpbmFsIGRyaXZlciB3aGljaCByZWxpZWQgb24gYW4KKyAqICAgaW4ta2VybmVsIFVTQiBkcml2ZXIuCisgKi8KKworI2luY2x1ZGUgInByb2xvZ3VlLmgiCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisKKyNpbmNsdWRlICJsb2cuaCIKKyNpbmNsdWRlICJhc3luY193YWl0LmgiCisjaW5jbHVkZSAiYXNjaWkuaCIKKyNpbmNsdWRlICJiaXRmaWVsZC5oIgorCisjaW5jbHVkZSAiYnJsX2RyaXZlci5oIgorI2luY2x1ZGUgImJybGRlZnMtdm8uaCIKKworCitCRUdJTl9LRVlfTkFNRV9UQUJMRShhbGwpCisgIEtFWV9HUk9VUF9FTlRSWShWT19HUlBfUm91dGluZ0tleXMsICJSb3V0aW5nS2V5IiksCisKKyAgS0VZX05BTUVfRU5UUlkoVk9fS0VZX0RvdDEsICJEb3QxIiksCisgIEtFWV9OQU1FX0VOVFJZKFZPX0tFWV9Eb3QyLCAiRG90MiIpLAorICBLRVlfTkFNRV9FTlRSWShWT19LRVlfRG90MywgIkRvdDMiKSwKKyAgS0VZX05BTUVfRU5UUlkoVk9fS0VZX0RvdDQsICJEb3Q0IiksCisgIEtFWV9OQU1FX0VOVFJZKFZPX0tFWV9Eb3Q1LCAiRG90NSIpLAorICBLRVlfTkFNRV9FTlRSWShWT19LRVlfRG90NiwgIkRvdDYiKSwKKyAgS0VZX05BTUVfRU5UUlkoVk9fS0VZX0RvdDcsICJEb3Q3IiksCisgIEtFWV9OQU1FX0VOVFJZKFZPX0tFWV9Eb3Q4LCAiRG90OCIpLAorCisgIEtFWV9OQU1FX0VOVFJZKFZPX0tFWV9UaHVtYjEsICJUaHVtYjEiKSwKKyAgS0VZX05BTUVfRU5UUlkoVk9fS0VZX1RodW1iMiwgIlRodW1iMiIpLAorICBLRVlfTkFNRV9FTlRSWShWT19LRVlfTGVmdCwgIkxlZnQiKSwKKyAgS0VZX05BTUVfRU5UUlkoVk9fS0VZX1VwLCAiVXAiKSwKKyAgS0VZX05BTUVfRU5UUlkoVk9fS0VZX0Rvd24sICJEb3duIiksCisgIEtFWV9OQU1FX0VOVFJZKFZPX0tFWV9SaWdodCwgIlJpZ2h0IiksCisgIEtFWV9OQU1FX0VOVFJZKFZPX0tFWV9UaHVtYjMsICJUaHVtYjMiKSwKKyAgS0VZX05BTUVfRU5UUlkoVk9fS0VZX1RodW1iNCwgIlRodW1iNCIpLAorRU5EX0tFWV9OQU1FX1RBQkxFCisKK0JFR0lOX0tFWV9OQU1FX1RBQkxFKGJwKQorICBLRVlfR1JPVVBfRU5UUlkoVk9fR1JQX1JvdXRpbmdLZXlzLCAiUm91dGluZ0tleSIpLAorCisgIEtFWV9OQU1FX0VOVFJZKEJQX0tFWV9Eb3QxLCAiRG90MSIpLAorICBLRVlfTkFNRV9FTlRSWShCUF9LRVlfRG90MiwgIkRvdDIiKSwKKyAgS0VZX05BTUVfRU5UUlkoQlBfS0VZX0RvdDMsICJEb3QzIiksCisgIEtFWV9OQU1FX0VOVFJZKEJQX0tFWV9Eb3Q0LCAiRG90NCIpLAorICBLRVlfTkFNRV9FTlRSWShCUF9LRVlfRG90NSwgIkRvdDUiKSwKKyAgS0VZX05BTUVfRU5UUlkoQlBfS0VZX0RvdDYsICJEb3Q2IiksCisKKyAgS0VZX05BTUVfRU5UUlkoQlBfS0VZX1NoaWZ0LCAiU2hpZnQiKSwKKyAgS0VZX05BTUVfRU5UUlkoQlBfS0VZX1NwYWNlLCAiU3BhY2UiKSwKKyAgS0VZX05BTUVfRU5UUlkoQlBfS0VZX0NvbnRyb2wsICJDb250cm9sIiksCisKKyAgS0VZX05BTUVfRU5UUlkoQlBfS0VZX0pveXN0aWNrRW50ZXIsICJKb3lzdGlja0VudGVyIiksCisgIEtFWV9OQU1FX0VOVFJZKEJQX0tFWV9Kb3lzdGlja0xlZnQsICJKb3lzdGlja0xlZnQiKSwKKyAgS0VZX05BTUVfRU5UUlkoQlBfS0VZX0pveXN0aWNrUmlnaHQsICJKb3lzdGlja1JpZ2h0IiksCisgIEtFWV9OQU1FX0VOVFJZKEJQX0tFWV9Kb3lzdGlja1VwLCAiSm95c3RpY2tVcCIpLAorICBLRVlfTkFNRV9FTlRSWShCUF9LRVlfSm95c3RpY2tEb3duLCAiSm95c3RpY2tEb3duIiksCisKKyAgS0VZX05BTUVfRU5UUlkoQlBfS0VZX1Njcm9sbExlZnQsICJTY3JvbGxMZWZ0IiksCisgIEtFWV9OQU1FX0VOVFJZKEJQX0tFWV9TY3JvbGxSaWdodCwgIlNjcm9sbFJpZ2h0IiksCitFTkRfS0VZX05BTUVfVEFCTEUKKworQkVHSU5fS0VZX05BTUVfVEFCTEVTKGFsbCkKKyAgS0VZX05BTUVfVEFCTEUoYWxsKSwKK0VORF9LRVlfTkFNRV9UQUJMRVMKKworQkVHSU5fS0VZX05BTUVfVEFCTEVTKGJwKQorICBLRVlfTkFNRV9UQUJMRShicCksCitFTkRfS0VZX05BTUVfVEFCTEVTCisKK0RFRklORV9LRVlfVEFCTEUoYWxsKQorREVGSU5FX0tFWV9UQUJMRShicCkKKworQkVHSU5fS0VZX1RBQkxFX0xJU1QKKyAgJktFWV9UQUJMRV9ERUZJTklUSU9OKGFsbCksCisgICZLRVlfVEFCTEVfREVGSU5JVElPTihicCksCitFTkRfS0VZX1RBQkxFX0xJU1QKKworCisjZGVmaW5lIFJFQURZX0JFRVBfRFVSQVRJT04gMjAwCisjZGVmaW5lIE1BWElNVU1fQ0VMTF9DT1VOVCA3MCAvKiBhcmJpdHJhcnkgbWF4IGZvciBhbGxvY2F0aW9ucyAqLworCitzdGF0aWMgdW5zaWduZWQgY2hhciBmb3JjZVdyaXRlOworc3RhdGljIHVuc2lnbmVkIGNoYXIgY2VsbENvdW50OworI2RlZmluZSBJU19URVhUX1JBTkdFKGtleTEsa2V5MikgKCgoa2V5MSkgPD0gKGtleTIpKSAmJiAoKGtleTIpIDwgY2VsbENvdW50KSkKKyNkZWZpbmUgSVNfVEVYVF9LRVkoa2V5KSBJU19URVhUX1JBTkdFKChrZXkpLCAoa2V5KSkKKworLyogU3RydWN0dXJlIHRvIHJlbWVtYmVyIHdoaWNoIGtleXMgYXJlIHByZXNzZWQgKi8KK3R5cGVkZWYgc3RydWN0IHsKKyAgdWludDE2X3QgbmF2aWdhdGlvbjsKKyAgdW5zaWduZWQgY2hhciByb3V0aW5nW01BWElNVU1fQ0VMTF9DT1VOVF07Cit9IEtleXM7CisKK3N0YXRpYyBLZXlzIHByZXNzZWRLZXlzOworc3RhdGljIGNoYXIga2V5c0luaXRpYWxpemVkOworCitzdGF0aWMgdm9pZAoraW5pdGlhbGl6ZUtleXMgKHZvaWQpIHsKKyAgaWYgKCFrZXlzSW5pdGlhbGl6ZWQpIHsKKyAgICBtZW1zZXQoJnByZXNzZWRLZXlzLCAwLCBzaXplb2YocHJlc3NlZEtleXMpKTsKKyAgICBrZXlzSW5pdGlhbGl6ZWQgPSAxOworICB9Cit9CisKK3N0YXRpYyB2b2lkCit1cGRhdGVLZXlzIChCcmFpbGxlRGlzcGxheSAqYnJsLCBjb25zdCB1bnNpZ25lZCBjaGFyICpwYWNrZXQpIHsKKyAgS2V5cyBjdXJyZW50S2V5czsKKworICB1bnNpZ25lZCBjaGFyIG5hdmlnYXRpb25QcmVzc2VzWzBYMTBdOworICBpbnQgbmF2aWdhdGlvblByZXNzQ291bnQgPSAwOworCisgIHVuc2lnbmVkIGNoYXIgcm91dGluZ1ByZXNzZXNbNl07CisgIGludCByb3V0aW5nUHJlc3NDb3VudCA9IDA7CisKKyAgaW5pdGlhbGl6ZUtleXMoKTsKKyAgbWVtc2V0KCZjdXJyZW50S2V5cywgMCwgc2l6ZW9mKGN1cnJlbnRLZXlzKSk7CisgIGN1cnJlbnRLZXlzLm5hdmlnYXRpb24gPSAocGFja2V0WzFdIDw8IDgpIHwgcGFja2V0WzBdOworCisgIHsKKyAgICB1bnNpZ25lZCBjaGFyIGtleSA9IDA7CisgICAgdWludDE2X3QgYml0ID0gMFgxOworCisgICAgd2hpbGUgKGtleSA8IDBYMTApIHsKKyAgICAgIGlmICgocHJlc3NlZEtleXMubmF2aWdhdGlvbiAmIGJpdCkgJiYgIShjdXJyZW50S2V5cy5uYXZpZ2F0aW9uICYgYml0KSkgeworICAgICAgICBlbnF1ZXVlS2V5RXZlbnQoYnJsLCBWT19HUlBfTmF2aWdhdGlvbktleXMsIGtleSwgMCk7CisgICAgICB9IGVsc2UgaWYgKCEocHJlc3NlZEtleXMubmF2aWdhdGlvbiAmIGJpdCkgJiYgKGN1cnJlbnRLZXlzLm5hdmlnYXRpb24gJiBiaXQpKSB7CisgICAgICAgIG5hdmlnYXRpb25QcmVzc2VzW25hdmlnYXRpb25QcmVzc0NvdW50KytdID0ga2V5OworICAgICAgfQorCisgICAgICBiaXQgPDw9IDE7CisgICAgICBrZXkgKz0gMTsKKyAgICB9CisgIH0KKyAgCisgIHsKKyAgICBpbnQgaTsKKworICAgIGZvciAoaT0yOyBpPDg7IGkrPTEpIHsKKyAgICAgIHVuc2lnbmVkIGNoYXIga2V5ID0gcGFja2V0W2ldOworICAgICAgaWYgKCFrZXkpIGJyZWFrOworCisgICAgICBpZiAoKGtleSA8IDEpIHx8IChrZXkgPiBjZWxsQ291bnQpKSB7CisgICAgICAgIGxvZ01lc3NhZ2UoTE9HX05PVElDRSwgImludmFsaWQgcm91dGluZyBrZXkgbnVtYmVyOiAldSIsIGtleSk7CisgICAgICAgIGNvbnRpbnVlOworICAgICAgfQorICAgICAga2V5IC09IDE7CisKKyAgICAgIGN1cnJlbnRLZXlzLnJvdXRpbmdba2V5XSA9IDE7CisgICAgICBpZiAoIXByZXNzZWRLZXlzLnJvdXRpbmdba2V5XSkgcm91dGluZ1ByZXNzZXNbcm91dGluZ1ByZXNzQ291bnQrK10gPSBrZXk7CisgICAgfQorICB9CisKKyAgeworICAgIHVuc2lnbmVkIGNoYXIga2V5OworCisgICAgZm9yIChrZXk9MDsga2V5PGNlbGxDb3VudDsga2V5Kz0xKQorICAgICAgaWYgKHByZXNzZWRLZXlzLnJvdXRpbmdba2V5XSAmJiAhY3VycmVudEtleXMucm91dGluZ1trZXldKQorICAgICAgICBlbnF1ZXVlS2V5RXZlbnQoYnJsLCBWT19HUlBfUm91dGluZ0tleXMsIGtleSwgMCk7CisgIH0KKworICB3aGlsZSAobmF2aWdhdGlvblByZXNzQ291bnQpCisgICAgZW5xdWV1ZUtleUV2ZW50KGJybCwgVk9fR1JQX05hdmlnYXRpb25LZXlzLCBuYXZpZ2F0aW9uUHJlc3Nlc1stLW5hdmlnYXRpb25QcmVzc0NvdW50XSwgMSk7CisKKyAgd2hpbGUgKHJvdXRpbmdQcmVzc0NvdW50KQorICAgIGVucXVldWVLZXlFdmVudChicmwsIFZPX0dSUF9Sb3V0aW5nS2V5cywgcm91dGluZ1ByZXNzZXNbLS1yb3V0aW5nUHJlc3NDb3VudF0sIDEpOworCisgIHByZXNzZWRLZXlzID0gY3VycmVudEtleXM7Cit9CisKKwordHlwZWRlZiBzdHJ1Y3QgeworICBpbnQgKCpnZXRDZWxsQ291bnQpIChCcmFpbGxlRGlzcGxheSAqYnJsLCB1bnNpZ25lZCBjaGFyICpsZW5ndGgpOworICBpbnQgKCpsb2dTZXJpYWxOdW1iZXIpIChCcmFpbGxlRGlzcGxheSAqYnJsKTsKKyAgaW50ICgqbG9nSGFyZHdhcmVWZXJzaW9uKSAoQnJhaWxsZURpc3BsYXkgKmJybCk7CisgIGludCAoKmxvZ0Zpcm13YXJlVmVyc2lvbikgKEJyYWlsbGVEaXNwbGF5ICpicmwpOworICBpbnQgKCpzZXREaXNwbGF5Vm9sdGFnZSkgKEJyYWlsbGVEaXNwbGF5ICpicmwsIHVuc2lnbmVkIGNoYXIgdm9sdGFnZSk7CisgIGludCAoKmdldERpc3BsYXlWb2x0YWdlKSAoQnJhaWxsZURpc3BsYXkgKmJybCwgdW5zaWduZWQgY2hhciAqdm9sdGFnZSk7CisgIGludCAoKmdldERpc3BsYXlDdXJyZW50KSAoQnJhaWxsZURpc3BsYXkgKmJybCwgdW5zaWduZWQgY2hhciAqY3VycmVudCk7CisgIGludCAoKnNldERpc3BsYXlTdGF0ZSkgKEJyYWlsbGVEaXNwbGF5ICpicmwsIHVuc2lnbmVkIGNoYXIgc3RhdGUpOworICBpbnQgKCp3cml0ZUJyYWlsbGUpIChCcmFpbGxlRGlzcGxheSAqYnJsLCBjb25zdCB1bnNpZ25lZCBjaGFyICpjZWxscywgdW5zaWduZWQgY2hhciBjb3VudCwgdW5zaWduZWQgY2hhciBzdGFydCk7CisgIGludCAoKnVwZGF0ZUtleXMpIChCcmFpbGxlRGlzcGxheSAqYnJsKTsKKyAgaW50ICgqc291bmRCZWVwKSAoQnJhaWxsZURpc3BsYXkgKmJybCwgdW5zaWduZWQgY2hhciBkdXJhdGlvbik7Cit9IFByb3RvY29sT3BlcmF0aW9uczsKKworc3RhdGljIGNvbnN0IFByb3RvY29sT3BlcmF0aW9ucyAqcHJvdG9jb2w7CisKKworI2RlZmluZSBTRVJJQUxfQkFVRCAzODQwMAorI2RlZmluZSBTRVJJQUxfUkVBRFlfREVMQVkgNDAwCisjZGVmaW5lIFNFUklBTF9JTlBVVF9USU1FT1VUIDEwMAorI2RlZmluZSBTRVJJQUxfV0FJVF9USU1FT1VUIDIwMAorCisjZGVmaW5lIEJMVUVUT09USF9DSEFOTkVMX05VTUJFUiAxCisjZGVmaW5lIEJMVUVUT09USF9SRUFEWV9ERUxBWSA4MDAKKworc3RhdGljIGludAordGVsbFJlc291cmNlICgKKyAgQnJhaWxsZURpc3BsYXkgKmJybCwKKyAgdWludDhfdCByZXF1ZXN0LCB1aW50MTZfdCB2YWx1ZSwgdWludDE2X3QgaW5kZXgsCisgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGEsIHVpbnQxNl90IHNpemUKKykgeworICBzc2l6ZV90IHJlc3VsdCA9IGdpb1RlbGxSZXNvdXJjZShicmwtPmdpb0VuZHBvaW50LCBVc2JDb250cm9sUmVjaXBpZW50X0VuZHBvaW50LCBVc2JDb250cm9sVHlwZV9WZW5kb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3QsIHZhbHVlLCBpbmRleCwgZGF0YSwgc2l6ZSk7CisgIHJldHVybiByZXN1bHQgIT0gLTE7Cit9CisKK3N0YXRpYyBpbnQKK2Fza1Jlc291cmNlICgKKyAgQnJhaWxsZURpc3BsYXkgKmJybCwKKyAgdWludDhfdCByZXF1ZXN0LCB1aW50MTZfdCB2YWx1ZSwgdWludDE2X3QgaW5kZXgsCisgIHVuc2lnbmVkIGNoYXIgKmJ1ZmZlciwgdWludDE2X3Qgc2l6ZQorKSB7CisgIHNzaXplX3QgcmVzdWx0ID0gZ2lvQXNrUmVzb3VyY2UoYnJsLT5naW9FbmRwb2ludCwgVXNiQ29udHJvbFJlY2lwaWVudF9FbmRwb2ludCwgVXNiQ29udHJvbFR5cGVfVmVuZG9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3QsIHZhbHVlLCBpbmRleCwgYnVmZmVyLCBzaXplKTsKKyAgaW50IG9rID0gcmVzdWx0ICE9IC0xOworCisgIGlmIChvaykgeworICAgIGxvZ0lucHV0UGFja2V0KGJ1ZmZlciwgcmVzdWx0KTsKKyAgfQorCisgIHJldHVybiBvazsKK30KKworCitzdGF0aWMgY29uc3QgY2hhciAqY29uc3Qgc2VyaWFsRGV2aWNlTmFtZXNbXSA9IHsiU2VyaWFsIEFkYXB0ZXIiLCAiQmFzZSBVbml0In07CisKK3N0YXRpYyBpbnQKK3dyaXRlU2VyaWFsUGFja2V0IChCcmFpbGxlRGlzcGxheSAqYnJsLCB1bnNpZ25lZCBjaGFyIGNvZGUsIHVuc2lnbmVkIGNoYXIgKmRhdGEsIHVuc2lnbmVkIGNoYXIgY291bnQpIHsKKyAgdW5zaWduZWQgY2hhciBidWZmZXJbMiArIChjb3VudCAqIDIpXTsKKyAgdW5zaWduZWQgY2hhciBzaXplID0gMDsKKyAgdW5zaWduZWQgY2hhciBpbmRleDsKKworICBidWZmZXJbc2l6ZSsrXSA9IEFTQ0lJX0VTQzsKKyAgYnVmZmVyW3NpemUrK10gPSBjb2RlOworCisgIGZvciAoaW5kZXg9MDsgaW5kZXg8Y291bnQ7ICsraW5kZXgpCisgICAgaWYgKChidWZmZXJbc2l6ZSsrXSA9IGRhdGFbaW5kZXhdKSA9PSBidWZmZXJbMF0pCisgICAgICBidWZmZXJbc2l6ZSsrXSA9IGJ1ZmZlclswXTsKKworICByZXR1cm4gd3JpdGVCcmFpbGxlUGFja2V0KGJybCwgTlVMTCwgYnVmZmVyLCBzaXplKTsKK30KKworc3RhdGljIGludAorcmVhZFNlcmlhbFBhY2tldCAoQnJhaWxsZURpc3BsYXkgKmJybCwgdW5zaWduZWQgY2hhciAqcGFja2V0LCBpbnQgc2l6ZSkgeworICBpbnQgc3RhcnRlZCA9IDA7CisgIGludCBlc2NhcGUgPSAwOworICBpbnQgb2Zmc2V0ID0gMDsKKyAgaW50IGxlbmd0aCA9IDA7CisKKyAgd2hpbGUgKDEpIHsKKyAgICB1bnNpZ25lZCBjaGFyIGJ5dGU7CisKKyAgICBpZiAoIWdpb1JlYWRCeXRlKGJybC0+Z2lvRW5kcG9pbnQsICZieXRlLCAoc3RhcnRlZCB8fCBlc2NhcGUpKSkgeworICAgICAgaWYgKHN0YXJ0ZWQpIGxvZ1BhcnRpYWxQYWNrZXQocGFja2V0LCBvZmZzZXQpOworICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgaWYgKGJ5dGUgPT0gQVNDSUlfRVNDKSB7CisgICAgICBpZiAoKGVzY2FwZSA9ICFlc2NhcGUpKSBjb250aW51ZTsKKyAgICB9IGVsc2UgaWYgKGVzY2FwZSkgeworICAgICAgZXNjYXBlID0gMDsKKworICAgICAgaWYgKG9mZnNldCA+IDApIHsKKyAgICAgICAgbG9nU2hvcnRQYWNrZXQocGFja2V0LCBvZmZzZXQpOworICAgICAgICBvZmZzZXQgPSAwOworICAgICAgICBsZW5ndGggPSAwOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgc3RhcnRlZCA9IDE7CisgICAgICB9CisgICAgfQorCisgICAgaWYgKCFzdGFydGVkKSB7CisgICAgICBsb2dJZ25vcmVkQnl0ZShieXRlKTsKKyAgICAgIGNvbnRpbnVlOworICAgIH0KKworICAgIGlmIChvZmZzZXQgPCBzaXplKSB7CisgICAgICBpZiAob2Zmc2V0ID09IDApIHsKKyAgICAgICAgc3dpdGNoIChieXRlKSB7CisgICAgICAgICAgY2FzZSAwWDQzOgorICAgICAgICAgIGNhc2UgMFg0NzoKKyAgICAgICAgICAgIGxlbmd0aCA9IDI7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgIGNhc2UgMFg0QzoKKyAgICAgICAgICAgIGxlbmd0aCA9IDM7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgIGNhc2UgMFg0NjoKKyAgICAgICAgICBjYXNlIDBYNDg6CisgICAgICAgICAgICBsZW5ndGggPSA1OworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICBjYXNlIDBYNEI6CisgICAgICAgICAgICBsZW5ndGggPSA5OworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICBjYXNlIDBYNTM6CisgICAgICAgICAgICBsZW5ndGggPSAxMDsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGxvZ1Vua25vd25QYWNrZXQoYnl0ZSk7CisgICAgICAgICAgICBzdGFydGVkID0gMDsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICB9CisKKyAgICAgIHBhY2tldFtvZmZzZXRdID0gYnl0ZTsKKyAgICB9IGVsc2UgeworICAgICAgaWYgKG9mZnNldCA9PSBzaXplKSBsb2dUcnVuY2F0ZWRQYWNrZXQocGFja2V0LCBvZmZzZXQpOworICAgICAgbG9nRGlzY2FyZGVkQnl0ZShieXRlKTsKKyAgICB9CisKKyAgICBpZiAoKytvZmZzZXQgPT0gbGVuZ3RoKSB7CisgICAgICBpZiAob2Zmc2V0ID4gc2l6ZSkgeworICAgICAgICBvZmZzZXQgPSAwOworICAgICAgICBsZW5ndGggPSAwOworICAgICAgICBzdGFydGVkID0gMDsKKyAgICAgICAgY29udGludWU7CisgICAgICB9CisKKyAgICAgIGxvZ0lucHV0UGFja2V0KHBhY2tldCwgb2Zmc2V0KTsKKyAgICAgIHJldHVybiBsZW5ndGg7CisgICAgfQorICB9Cit9CisKK3N0YXRpYyBpbnQKK25leHRTZXJpYWxQYWNrZXQgKEJyYWlsbGVEaXNwbGF5ICpicmwsIHVuc2lnbmVkIGNoYXIgY29kZSwgdW5zaWduZWQgY2hhciAqYnVmZmVyLCBpbnQgc2l6ZSwgaW50IHdhaXQpIHsKKyAgaW50IGxlbmd0aDsKKworICBpZiAod2FpdCkKKyAgICBpZiAoIWF3YWl0QnJhaWxsZUlucHV0KGJybCwgU0VSSUFMX1dBSVRfVElNRU9VVCkpCisgICAgICByZXR1cm4gMDsKKworICB3aGlsZSAoKGxlbmd0aCA9IHJlYWRTZXJpYWxQYWNrZXQoYnJsLCBidWZmZXIsIHNpemUpKSkgeworICAgIGlmIChidWZmZXJbMF0gPT0gY29kZSkgcmV0dXJuIGxlbmd0aDsKKyAgICBsb2dVbmV4cGVjdGVkUGFja2V0KGJ1ZmZlciwgbGVuZ3RoKTsKKyAgfQorCisgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50CitnZXRTZXJpYWxDZWxsQ291bnQgKEJyYWlsbGVEaXNwbGF5ICpicmwsIHVuc2lnbmVkIGNoYXIgKmNvdW50KSB7CisgIGNvbnN0IHVuc2lnbmVkIGludCBjb2RlID0gMFg0QzsKKyAgaWYgKHdyaXRlU2VyaWFsUGFja2V0KGJybCwgY29kZSwgTlVMTCwgMCkpIHsKKyAgICB1bnNpZ25lZCBjaGFyIGJ1ZmZlclszXTsKKyAgICBpZiAobmV4dFNlcmlhbFBhY2tldChicmwsIGNvZGUsIGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlciksIDEpKSB7CisgICAgICAqY291bnQgPSBidWZmZXJbMl07CisgICAgICByZXR1cm4gMTsKKyAgICB9CisgIH0KKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK2xvZ1NlcmlhbFNlcmlhbE51bWJlciAoQnJhaWxsZURpc3BsYXkgKmJybCkgeworICB1bnNpZ25lZCBjaGFyIGRldmljZTsKKworICBmb3IgKGRldmljZT0wOyBkZXZpY2U8QVJSQVlfQ09VTlQoc2VyaWFsRGV2aWNlTmFtZXMpOyArK2RldmljZSkgeworICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgY29kZSA9IDBYNTM7CisgICAgdW5zaWduZWQgY2hhciBidWZmZXJbMTBdOworCisgICAgaWYgKCF3cml0ZVNlcmlhbFBhY2tldChicmwsIGNvZGUsICZkZXZpY2UsIDEpKSByZXR1cm4gMDsKKyAgICBpZiAoIW5leHRTZXJpYWxQYWNrZXQoYnJsLCBjb2RlLCBidWZmZXIsIHNpemVvZihidWZmZXIpLCAxKSkgcmV0dXJuIDA7CisgICAgbG9nTWVzc2FnZShMT0dfSU5GTywgIiVzIFNlcmlhbCBOdW1iZXI6ICUwMlglMDJYJTAyWCUwMlglMDJYJTAyWCUwMlglMDJYIiwKKyAgICAgICAgICAgICAgIHNlcmlhbERldmljZU5hbWVzW2J1ZmZlclsxXV0sCisgICAgICAgICAgICAgICBidWZmZXJbMl0sIGJ1ZmZlclszXSwgYnVmZmVyWzRdLCBidWZmZXJbNV0sCisgICAgICAgICAgICAgICBidWZmZXJbNl0sIGJ1ZmZlcls3XSwgYnVmZmVyWzhdLCBidWZmZXJbOV0pOworICB9CisKKyAgcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQKK2xvZ1NlcmlhbEhhcmR3YXJlVmVyc2lvbiAoQnJhaWxsZURpc3BsYXkgKmJybCkgeworICB1bnNpZ25lZCBjaGFyIGRldmljZTsKKworICBmb3IgKGRldmljZT0wOyBkZXZpY2U8QVJSQVlfQ09VTlQoc2VyaWFsRGV2aWNlTmFtZXMpOyArK2RldmljZSkgeworICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgY29kZSA9IDBYNDg7CisgICAgdW5zaWduZWQgY2hhciBidWZmZXJbNV07CisKKyAgICBpZiAoIXdyaXRlU2VyaWFsUGFja2V0KGJybCwgY29kZSwgJmRldmljZSwgMSkpIHJldHVybiAwOworICAgIGlmICghbmV4dFNlcmlhbFBhY2tldChicmwsIGNvZGUsIGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlciksIDEpKSByZXR1cm4gMDsKKyAgICBsb2dNZXNzYWdlKExPR19JTkZPLCAiJXMgSGFyZHdhcmUgVmVyc2lvbjogJWMuJWMuJWMiLCAKKyAgICAgICAgICAgICAgIHNlcmlhbERldmljZU5hbWVzW2J1ZmZlclsxXV0sCisgICAgICAgICAgICAgICBidWZmZXJbMl0sIGJ1ZmZlclszXSwgYnVmZmVyWzRdKTsKKyAgfQorCisgIHJldHVybiAxOworfQorCitzdGF0aWMgaW50Citsb2dTZXJpYWxGaXJtd2FyZVZlcnNpb24gKEJyYWlsbGVEaXNwbGF5ICpicmwpIHsKKyAgdW5zaWduZWQgY2hhciBkZXZpY2U7CisKKyAgZm9yIChkZXZpY2U9MDsgZGV2aWNlPEFSUkFZX0NPVU5UKHNlcmlhbERldmljZU5hbWVzKTsgKytkZXZpY2UpIHsKKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyIGNvZGUgPSAwWDQ2OworICAgIHVuc2lnbmVkIGNoYXIgYnVmZmVyWzVdOworCisgICAgaWYgKCF3cml0ZVNlcmlhbFBhY2tldChicmwsIGNvZGUsICZkZXZpY2UsIDEpKSByZXR1cm4gMDsKKyAgICBpZiAoIW5leHRTZXJpYWxQYWNrZXQoYnJsLCBjb2RlLCBidWZmZXIsIHNpemVvZihidWZmZXIpLCAxKSkgcmV0dXJuIDA7CisgICAgbG9nTWVzc2FnZShMT0dfSU5GTywgIiVzIEZpcm13YXJlIFZlcnNpb246ICVjLiVjLiVjIiwgCisgICAgICAgICAgICAgICBzZXJpYWxEZXZpY2VOYW1lc1tidWZmZXJbMV1dLAorICAgICAgICAgICAgICAgYnVmZmVyWzJdLCBidWZmZXJbM10sIGJ1ZmZlcls0XSk7CisgIH0KKworICByZXR1cm4gMTsKK30KKworc3RhdGljIGludAorc2V0U2VyaWFsRGlzcGxheVZvbHRhZ2UgKEJyYWlsbGVEaXNwbGF5ICpicmwsIHVuc2lnbmVkIGNoYXIgdm9sdGFnZSkgeworICByZXR1cm4gd3JpdGVTZXJpYWxQYWNrZXQoYnJsLCAwWDU2LCAmdm9sdGFnZSwgMSk7Cit9CisKK3N0YXRpYyBpbnQKK2dldFNlcmlhbERpc3BsYXlWb2x0YWdlIChCcmFpbGxlRGlzcGxheSAqYnJsLCB1bnNpZ25lZCBjaGFyICp2b2x0YWdlKSB7CisgIGNvbnN0IHVuc2lnbmVkIGNoYXIgY29kZSA9IDBYNDc7CisgIGlmICh3cml0ZVNlcmlhbFBhY2tldChicmwsIGNvZGUsIE5VTEwsIDApKSB7CisgICAgdW5zaWduZWQgY2hhciBidWZmZXJbMl07CisgICAgaWYgKG5leHRTZXJpYWxQYWNrZXQoYnJsLCBjb2RlLCBidWZmZXIsIHNpemVvZihidWZmZXIpLCAxKSkgeworICAgICAgKnZvbHRhZ2UgPSBidWZmZXJbMV07CisgICAgICByZXR1cm4gMTsKKyAgICB9CisgIH0KKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK2dldFNlcmlhbERpc3BsYXlDdXJyZW50IChCcmFpbGxlRGlzcGxheSAqYnJsLCB1bnNpZ25lZCBjaGFyICpjdXJyZW50KSB7CisgIGNvbnN0IHVuc2lnbmVkIGludCBjb2RlID0gMFg0MzsKKyAgaWYgKHdyaXRlU2VyaWFsUGFja2V0KGJybCwgY29kZSwgTlVMTCwgMCkpIHsKKyAgICB1bnNpZ25lZCBjaGFyIGJ1ZmZlclsyXTsKKyAgICBpZiAobmV4dFNlcmlhbFBhY2tldChicmwsIGNvZGUsIGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlciksIDEpKSB7CisgICAgICAqY3VycmVudCA9IGJ1ZmZlclsxXTsKKyAgICAgIHJldHVybiAxOworICAgIH0KKyAgfQorICByZXR1cm4gMDsKK30KKworc3RhdGljIGludAorc2V0U2VyaWFsRGlzcGxheVN0YXRlIChCcmFpbGxlRGlzcGxheSAqYnJsLCB1bnNpZ25lZCBjaGFyIHN0YXRlKSB7CisgIHJldHVybiB3cml0ZVNlcmlhbFBhY2tldChicmwsIDBYNDQsICZzdGF0ZSwgMSk7Cit9CisKK3N0YXRpYyBpbnQKK3dyaXRlU2VyaWFsQnJhaWxsZSAoQnJhaWxsZURpc3BsYXkgKmJybCwgY29uc3QgdW5zaWduZWQgY2hhciAqY2VsbHMsIHVuc2lnbmVkIGNoYXIgY291bnQsIHVuc2lnbmVkIGNoYXIgc3RhcnQpIHsKKyAgdW5zaWduZWQgY2hhciBidWZmZXJbMiArIGNvdW50XTsKKyAgdW5zaWduZWQgY2hhciBzaXplID0gMDsKKyAgYnVmZmVyW3NpemUrK10gPSBzdGFydDsKKyAgYnVmZmVyW3NpemUrK10gPSBjb3VudDsKKyAgbWVtY3B5KCZidWZmZXJbc2l6ZV0sIGNlbGxzLCBjb3VudCk7CisgIHNpemUgKz0gY291bnQ7CisgIHJldHVybiB3cml0ZVNlcmlhbFBhY2tldChicmwsIDBYNDIsIGJ1ZmZlciwgc2l6ZSk7Cit9CisKK3N0YXRpYyBpbnQKK3VwZGF0ZVNlcmlhbEtleXMgKEJyYWlsbGVEaXNwbGF5ICpicmwpIHsKKyAgY29uc3QgdW5zaWduZWQgY2hhciBjb2RlID0gMFg0QjsKKyAgdW5zaWduZWQgY2hhciBwYWNrZXRbOV07CisKKyAgd2hpbGUgKG5leHRTZXJpYWxQYWNrZXQoYnJsLCBjb2RlLCBwYWNrZXQsIHNpemVvZihwYWNrZXQpLCAwKSkgeworICAgIHVwZGF0ZUtleXMoYnJsLCAmcGFja2V0WzFdKTsKKyAgfQorCisgIHJldHVybiBlcnJubyA9PSBFQUdBSU47Cit9CisKK3N0YXRpYyBpbnQKK3NvdW5kU2VyaWFsQmVlcCAoQnJhaWxsZURpc3BsYXkgKmJybCwgdW5zaWduZWQgY2hhciBkdXJhdGlvbikgeworICByZXR1cm4gd3JpdGVTZXJpYWxQYWNrZXQoYnJsLCAwWDQxLCAmZHVyYXRpb24sIDEpOworfQorCitzdGF0aWMgY29uc3QgUHJvdG9jb2xPcGVyYXRpb25zIHNlcmlhbFByb3RvY29sT3BlcmF0aW9ucyA9IHsKKyAgLmdldENlbGxDb3VudCA9IGdldFNlcmlhbENlbGxDb3VudCwKKyAgLmxvZ1NlcmlhbE51bWJlciA9IGxvZ1NlcmlhbFNlcmlhbE51bWJlciwKKyAgLmxvZ0hhcmR3YXJlVmVyc2lvbiA9IGxvZ1NlcmlhbEhhcmR3YXJlVmVyc2lvbiwKKyAgLmxvZ0Zpcm13YXJlVmVyc2lvbiA9IGxvZ1NlcmlhbEZpcm13YXJlVmVyc2lvbiwKKyAgLnNldERpc3BsYXlWb2x0YWdlID0gc2V0U2VyaWFsRGlzcGxheVZvbHRhZ2UsCisgIC5nZXREaXNwbGF5Vm9sdGFnZSA9IGdldFNlcmlhbERpc3BsYXlWb2x0YWdlLAorICAuZ2V0RGlzcGxheUN1cnJlbnQgPSBnZXRTZXJpYWxEaXNwbGF5Q3VycmVudCwKKyAgLnNldERpc3BsYXlTdGF0ZSA9IHNldFNlcmlhbERpc3BsYXlTdGF0ZSwKKyAgLndyaXRlQnJhaWxsZSA9IHdyaXRlU2VyaWFsQnJhaWxsZSwKKyAgLnVwZGF0ZUtleXMgPSB1cGRhdGVTZXJpYWxLZXlzLAorICAuc291bmRCZWVwID0gc291bmRTZXJpYWxCZWVwCit9OworCisKK3N0YXRpYyBpbnQKK2dldFVzYkNlbGxDb3VudCAoQnJhaWxsZURpc3BsYXkgKmJybCwgdW5zaWduZWQgY2hhciAqY291bnQpIHsKKyAgdW5zaWduZWQgY2hhciBidWZmZXJbMl07CisKKyAgaWYgKCFhc2tSZXNvdXJjZShicmwsIDBYMDYsIDAsIDAsIGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlcikpKSByZXR1cm4gMDsKKyAgKmNvdW50ID0gYnVmZmVyWzFdOworICByZXR1cm4gMTsKK30KKworc3RhdGljIHdjaGFyX3QgKgorZ2V0VXNiU3RyaW5nIChCcmFpbGxlRGlzcGxheSAqYnJsLCB1aW50OF90IHJlcXVlc3QpIHsKKyAgVXNiRGVzY3JpcHRvciBkZXNjcmlwdG9yOworCisgIGlmIChhc2tSZXNvdXJjZShicmwsIHJlcXVlc3QsIDAsIDAsIGRlc2NyaXB0b3IuYnl0ZXMsIHNpemVvZihkZXNjcmlwdG9yLmJ5dGVzKSkpIHsKKyAgICBzaXplX3QgY291bnQgPSAoZGVzY3JpcHRvci5zdHJpbmcuYkxlbmd0aCAtIDIpIC8gc2l6ZW9mKGRlc2NyaXB0b3Iuc3RyaW5nLndEYXRhWzBdKTsKKyAgICB3Y2hhcl90ICpzdHJpbmcgPSBtYWxsb2MoKGNvdW50ICsgMSkgKiBzaXplb2YoKnN0cmluZykpOworCisgICAgaWYgKHN0cmluZykgeworICAgICAgc3RyaW5nW2NvdW50XSA9IDA7CisKKyAgICAgIHdoaWxlIChjb3VudCkgeworICAgICAgICBjb3VudCAtPSAxOworICAgICAgICBzdHJpbmdbY291bnRdID0gZ2V0TGl0dGxlRW5kaWFuMTYoZGVzY3JpcHRvci5zdHJpbmcud0RhdGFbY291bnRdKTsKKyAgICAgIH0KKworICAgICAgcmV0dXJuIHN0cmluZzsKKyAgICB9IGVsc2UgeworICAgICAgbG9nTWFsbG9jRXJyb3IoKTsKKyAgICB9CisgIH0KKworICByZXR1cm4gTlVMTDsKK30KKworc3RhdGljIGludAorbG9nVXNiU3RyaW5nIChCcmFpbGxlRGlzcGxheSAqYnJsLCB1aW50OF90IHJlcXVlc3QsIGNvbnN0IGNoYXIgKmRlc2NyaXB0aW9uKSB7CisgIHdjaGFyX3QgKnN0cmluZyA9IGdldFVzYlN0cmluZyhicmwsIHJlcXVlc3QpOworCisgIGlmIChzdHJpbmcpIHsKKyAgICBsb2dNZXNzYWdlKExPR19JTkZPLCAiJXM6ICUiIFBSSXdzLCBkZXNjcmlwdGlvbiwgc3RyaW5nKTsKKyAgICBmcmVlKHN0cmluZyk7CisgICAgcmV0dXJuIDE7CisgIH0KKworICByZXR1cm4gMDsKK30KKworc3RhdGljIGludAorbG9nVXNiU2VyaWFsTnVtYmVyIChCcmFpbGxlRGlzcGxheSAqYnJsKSB7CisgIHJldHVybiBsb2dVc2JTdHJpbmcoYnJsLCAwWDAzLCAiU2VyaWFsIE51bWJlciIpOworfQorCitzdGF0aWMgaW50Citsb2dVc2JIYXJkd2FyZVZlcnNpb24gKEJyYWlsbGVEaXNwbGF5ICpicmwpIHsKKyAgdW5zaWduZWQgY2hhciBidWZmZXJbMl07CisKKyAgaWYgKCFhc2tSZXNvdXJjZShicmwsIDBYMDQsIDAsIDAsIGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlcikpKSByZXR1cm4gMDsKKyAgbG9nTWVzc2FnZShMT0dfSU5GTywgIkhhcmR3YXJlIFZlcnNpb246ICV1LiV1IiwKKyAgICAgICAgICAgICBidWZmZXJbMF0sIGJ1ZmZlclsxXSk7CisgIHJldHVybiAxOworfQorCitzdGF0aWMgaW50Citsb2dVc2JGaXJtd2FyZVZlcnNpb24gKEJyYWlsbGVEaXNwbGF5ICpicmwpIHsKKyAgcmV0dXJuIGxvZ1VzYlN0cmluZyhicmwsIDBYMDUsICJGaXJtd2FyZSBWZXJzaW9uIik7Cit9CisKK3N0YXRpYyBpbnQKK3NldFVzYkRpc3BsYXlWb2x0YWdlIChCcmFpbGxlRGlzcGxheSAqYnJsLCB1bnNpZ25lZCBjaGFyIHZvbHRhZ2UpIHsKKyAgcmV0dXJuIHRlbGxSZXNvdXJjZShicmwsIDBYMDEsIHZvbHRhZ2UsIDAsIE5VTEwsIDApOworfQorCitzdGF0aWMgaW50CitnZXRVc2JEaXNwbGF5Vm9sdGFnZSAoQnJhaWxsZURpc3BsYXkgKmJybCwgdW5zaWduZWQgY2hhciAqdm9sdGFnZSkgeworICB1bnNpZ25lZCBjaGFyIGJ1ZmZlclsxXTsKKworICBpZiAoIWFza1Jlc291cmNlKGJybCwgMFgwMiwgMCwgMCwgYnVmZmVyLCBzaXplb2YoYnVmZmVyKSkpIHJldHVybiAwOworICAqdm9sdGFnZSA9IGJ1ZmZlclswXTsKKyAgcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQKK2dldFVzYkRpc3BsYXlDdXJyZW50IChCcmFpbGxlRGlzcGxheSAqYnJsLCB1bnNpZ25lZCBjaGFyICpjdXJyZW50KSB7CisgIHVuc2lnbmVkIGNoYXIgYnVmZmVyWzFdOworCisgIGlmICghYXNrUmVzb3VyY2UoYnJsLCAwWDA4LCAwLCAwLCBidWZmZXIsIHNpemVvZihidWZmZXIpKSkgcmV0dXJuIDA7CisgICpjdXJyZW50ID0gYnVmZmVyWzBdOworICByZXR1cm4gMTsKK30KKworc3RhdGljIGludAorc2V0VXNiRGlzcGxheVN0YXRlIChCcmFpbGxlRGlzcGxheSAqYnJsLCB1bnNpZ25lZCBjaGFyIHN0YXRlKSB7CisgIHJldHVybiB0ZWxsUmVzb3VyY2UoYnJsLCAwWDAwLCBzdGF0ZSwgMCwgTlVMTCwgMCk7Cit9CisKK3N0YXRpYyBpbnQKK3dyaXRlVXNiQnJhaWxsZSAoQnJhaWxsZURpc3BsYXkgKmJybCwgY29uc3QgdW5zaWduZWQgY2hhciAqY2VsbHMsIHVuc2lnbmVkIGNoYXIgY291bnQsIHVuc2lnbmVkIGNoYXIgc3RhcnQpIHsKKyAgcmV0dXJuIHRlbGxSZXNvdXJjZShicmwsIDBYMDcsIDAsIHN0YXJ0LCBjZWxscywgY291bnQpOworfQorCitzdGF0aWMgaW50Cit1cGRhdGVVc2JLZXlzIChCcmFpbGxlRGlzcGxheSAqYnJsKSB7CisgIHdoaWxlICgxKSB7CisgICAgdW5zaWduZWQgY2hhciBwYWNrZXRbOF07CisKKyAgICB7CisgICAgICBzc2l6ZV90IHJlc3VsdCA9IGdpb1JlYWREYXRhKGJybC0+Z2lvRW5kcG9pbnQsIHBhY2tldCwgc2l6ZW9mKHBhY2tldCksIDApOworICAgICAgaWYgKCFyZXN1bHQpIHJldHVybiAxOworCisgICAgICBpZiAocmVzdWx0IDwgMCkgeworICAgICAgICBpZiAoZXJybm8gPT0gRU5PREVWKSB7CisgICAgICAgICAgLyogRGlzcGxheSB3YXMgZGlzY29ubmVjdGVkICovCisgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKworICAgICAgICBsb2dNZXNzYWdlKExPR19FUlIsICJVU0IgcmVhZCBlcnJvcjogJXMiLCBzdHJlcnJvcihlcnJubykpOworICAgICAgICBrZXlzSW5pdGlhbGl6ZWQgPSAwOworICAgICAgICByZXR1cm4gMTsKKyAgICAgIH0KKworICAgICAgaWYgKHJlc3VsdCA8IHNpemVvZihwYWNrZXQpKSB7CisgICAgICAgIC8qIFRoZSBkaXNwbGF5IHNob3VsZCBvbmx5IGV2ZXIgZGVsaXZlciBwYWNrZXRzIG9mIGV4YWN0bHkgOCBieXRlcyAqLworICAgICAgICBsb2dQYXJ0aWFsUGFja2V0KHBhY2tldCwgcmVzdWx0KTsKKyAgICAgICAga2V5c0luaXRpYWxpemVkID0gMDsKKyAgICAgICAgcmV0dXJuIDE7CisgICAgICB9CisKKyAgICAgIGxvZ0lucHV0UGFja2V0KHBhY2tldCwgcmVzdWx0KTsKKyAgICB9CisKKyAgICB1cGRhdGVLZXlzKGJybCwgcGFja2V0KTsKKyAgfQorfQorCitzdGF0aWMgaW50Citzb3VuZFVzYkJlZXAgKEJyYWlsbGVEaXNwbGF5ICpicmwsIHVuc2lnbmVkIGNoYXIgZHVyYXRpb24pIHsKKyAgcmV0dXJuIHRlbGxSZXNvdXJjZShicmwsIDBYMDksIGR1cmF0aW9uLCAwLCBOVUxMLCAwKTsKK30KKworc3RhdGljIGNvbnN0IFByb3RvY29sT3BlcmF0aW9ucyB1c2JQcm90b2NvbE9wZXJhdGlvbnMgPSB7CisgIC5nZXRDZWxsQ291bnQgPSBnZXRVc2JDZWxsQ291bnQsCisgIC5sb2dTZXJpYWxOdW1iZXIgPSBsb2dVc2JTZXJpYWxOdW1iZXIsCisgIC5sb2dIYXJkd2FyZVZlcnNpb24gPSBsb2dVc2JIYXJkd2FyZVZlcnNpb24sCisgIC5sb2dGaXJtd2FyZVZlcnNpb24gPSBsb2dVc2JGaXJtd2FyZVZlcnNpb24sCisgIC5zZXREaXNwbGF5Vm9sdGFnZSA9IHNldFVzYkRpc3BsYXlWb2x0YWdlLAorICAuZ2V0RGlzcGxheVZvbHRhZ2UgPSBnZXRVc2JEaXNwbGF5Vm9sdGFnZSwKKyAgLmdldERpc3BsYXlDdXJyZW50ID0gZ2V0VXNiRGlzcGxheUN1cnJlbnQsCisgIC5zZXREaXNwbGF5U3RhdGUgPSBzZXRVc2JEaXNwbGF5U3RhdGUsCisgIC53cml0ZUJyYWlsbGUgPSB3cml0ZVVzYkJyYWlsbGUsCisgIC51cGRhdGVLZXlzID0gdXBkYXRlVXNiS2V5cywKKyAgLnNvdW5kQmVlcCA9IHNvdW5kVXNiQmVlcAorfTsKKworCitzdGF0aWMgaW50Citjb25uZWN0UmVzb3VyY2UgKEJyYWlsbGVEaXNwbGF5ICpicmwsIGNvbnN0IGNoYXIgKmlkZW50aWZpZXIpIHsKKyAgU2VyaWFsUGFyYW1ldGVycyBzZXJpYWxQYXJhbWV0ZXJzOworCisgIEJFR0lOX1VTQl9DSEFOTkVMX0RFRklOSVRJT05TCisgICAgeyAvKiBhbGwgbW9kZWxzICovCisgICAgICAudmVuZG9yPTBYMDc5OCwgLnByb2R1Y3Q9MFgwMDAxLCAKKyAgICAgIC5jb25maWd1cmF0aW9uPTEsIC5pbnRlcmZhY2U9MCwgLmFsdGVybmF0aXZlPTAsCisgICAgICAuaW5wdXRFbmRwb2ludD0xCisgICAgfSwKKyAgRU5EX1VTQl9DSEFOTkVMX0RFRklOSVRJT05TCisKKyAgR2lvRGVzY3JpcHRvciBkZXNjcmlwdG9yOworICBnaW9Jbml0aWFsaXplRGVzY3JpcHRvcigmZGVzY3JpcHRvcik7CisKKyAgZ2lvSW5pdGlhbGl6ZVNlcmlhbFBhcmFtZXRlcnMoJnNlcmlhbFBhcmFtZXRlcnMpOworICBzZXJpYWxQYXJhbWV0ZXJzLmJhdWQgPSBTRVJJQUxfQkFVRDsKKyAgc2VyaWFsUGFyYW1ldGVycy5mbG93Q29udHJvbCA9IFNFUklBTF9GTE9XX0hBUkRXQVJFOworCisgIGRlc2NyaXB0b3Iuc2VyaWFsLnBhcmFtZXRlcnMgPSAmc2VyaWFsUGFyYW1ldGVyczsKKyAgZGVzY3JpcHRvci5zZXJpYWwub3B0aW9ucy5hcHBsaWNhdGlvbkRhdGEgPSAmc2VyaWFsUHJvdG9jb2xPcGVyYXRpb25zOworICBkZXNjcmlwdG9yLnNlcmlhbC5vcHRpb25zLnJlYWR5RGVsYXkgPSBTRVJJQUxfUkVBRFlfREVMQVk7CisgIGRlc2NyaXB0b3Iuc2VyaWFsLm9wdGlvbnMuaW5wdXRUaW1lb3V0ID0gU0VSSUFMX0lOUFVUX1RJTUVPVVQ7CisKKyAgZGVzY3JpcHRvci51c2IuY2hhbm5lbERlZmluaXRpb25zID0gdXNiQ2hhbm5lbERlZmluaXRpb25zOworICBkZXNjcmlwdG9yLnVzYi5vcHRpb25zLmFwcGxpY2F0aW9uRGF0YSA9ICZ1c2JQcm90b2NvbE9wZXJhdGlvbnM7CisKKyAgZGVzY3JpcHRvci5ibHVldG9vdGguY2hhbm5lbE51bWJlciA9IEJMVUVUT09USF9DSEFOTkVMX05VTUJFUjsKKyAgZGVzY3JpcHRvci5ibHVldG9vdGgub3B0aW9ucy5hcHBsaWNhdGlvbkRhdGEgPSAmc2VyaWFsUHJvdG9jb2xPcGVyYXRpb25zOworICBkZXNjcmlwdG9yLmJsdWV0b290aC5vcHRpb25zLnJlYWR5RGVsYXkgPSBCTFVFVE9PVEhfUkVBRFlfREVMQVk7CisgIGRlc2NyaXB0b3IuYmx1ZXRvb3RoLm9wdGlvbnMuaW5wdXRUaW1lb3V0ID0gU0VSSUFMX0lOUFVUX1RJTUVPVVQ7CisKKyAgaWYgKGNvbm5lY3RCcmFpbGxlUmVzb3VyY2UoYnJsLCBpZGVudGlmaWVyLCAmZGVzY3JpcHRvciwgTlVMTCkpIHsKKyAgICBwcm90b2NvbCA9IGdpb0dldEFwcGxpY2F0aW9uRGF0YShicmwtPmdpb0VuZHBvaW50KTsKKyAgICByZXR1cm4gMTsKKyAgfQorCisgIHJldHVybiAwOworfQorCisKK3R5cGVkZWYgc3RydWN0IHsKKyAgY29uc3QgY2hhciAqbmFtZTsKKyAgY29uc3QgS2V5VGFibGVEZWZpbml0aW9uICprZXlUYWJsZTsKK30gUHJvZHVjdEVudHJ5OworCitzdGF0aWMgY29uc3QgUHJvZHVjdEVudHJ5IHByb2R1Y3RFbnRyeV9Wb3lhZ2VyID0geworICAubmFtZSA9ICJWb3lhZ2VyIiwKKyAgLmtleVRhYmxlID0gJktFWV9UQUJMRV9ERUZJTklUSU9OKGFsbCkKK307CisKK3N0YXRpYyBjb25zdCBQcm9kdWN0RW50cnkgcHJvZHVjdEVudHJ5X0JyYWlsbGVQZW4gPSB7CisgIC5uYW1lID0gIkJyYWlsbGUgUGVuIiwKKyAgLmtleVRhYmxlID0gJktFWV9UQUJMRV9ERUZJTklUSU9OKGJwKQorfTsKKworCit0eXBlZGVmIHN0cnVjdCB7CisgIGNvbnN0IFByb2R1Y3RFbnRyeSAqcHJvZHVjdDsKKyAgaW50ICgqd3JpdGVCcmFpbGxlKSAoQnJhaWxsZURpc3BsYXkgKmJybCwgY29uc3QgdW5zaWduZWQgY2hhciAqY2VsbHMsIHVuc2lnbmVkIGNoYXIgY291bnQsIHVuc2lnbmVkIGNoYXIgc3RhcnQpOworICB1bnNpZ25lZCBjaGFyIHJlcG9ydGVkQ2VsbENvdW50OworICB1bnNpZ25lZCBjaGFyIGFjdHVhbENlbGxDb3VudDsKKyAgdW5zaWduZWQgcGFydGlhbFVwZGF0ZXM6MTsKK30gTW9kZWxFbnRyeTsKKworc3RhdGljIGNvbnN0IE1vZGVsRW50cnkgKm1vZGVsOworCit0eXBlZGVmIHN0cnVjdCB7CisgIHN0cnVjdCB7CisgICAgY29uc3QgdW5zaWduZWQgY2hhciAqY2VsbHM7CisgICAgdW5zaWduZWQgY2hhciBvZmZzZXQ7CisgICAgdW5zaWduZWQgY2hhciBjb3VudDsKKyAgfSBmcm9tOworCisgIHN0cnVjdCB7CisgICAgdW5zaWduZWQgY2hhciAqY2VsbHM7CisgICAgdW5zaWduZWQgY2hhciBvZmZzZXQ7CisgIH0gdG87Cit9IFdyaXRlQnJhaWxsZURhdGE7CisKK3N0YXRpYyB2b2lkCithZGRIaWRkZW5DZWxscyAoV3JpdGVCcmFpbGxlRGF0YSAqd2JkLCB1bnNpZ25lZCBjaGFyIHNpemUpIHsKKyAgd2hpbGUgKHNpemUpIHsKKyAgICB3YmQtPnRvLmNlbGxzW3diZC0+dG8ub2Zmc2V0KytdID0gMDsKKyAgICBzaXplIC09IDE7CisgIH0KK30KKworc3RhdGljIHZvaWQKK2FkZEFjdHVhbENlbGxzIChXcml0ZUJyYWlsbGVEYXRhICp3YmQsIHVuc2lnbmVkIGNoYXIgc2l6ZSkgeworICB1bnNpZ25lZCBjaGFyIGNvdW50OworCisgIGlmICghc2l6ZSkgc2l6ZSA9IHdiZC0+ZnJvbS5jb3VudDsKKyAgaWYgKChjb3VudCA9IHNpemUpID4gd2JkLT5mcm9tLmNvdW50KSBjb3VudCA9IHdiZC0+ZnJvbS5jb3VudDsKKworICBpZiAoY291bnQpIHsKKyAgICBtZW1jcHkoJndiZC0+dG8uY2VsbHNbd2JkLT50by5vZmZzZXRdLCAmd2JkLT5mcm9tLmNlbGxzW3diZC0+ZnJvbS5vZmZzZXRdLCBjb3VudCk7CisgICAgd2JkLT5mcm9tLmNvdW50IC09IGNvdW50OworICAgIHdiZC0+ZnJvbS5vZmZzZXQgKz0gY291bnQ7CisgICAgd2JkLT50by5vZmZzZXQgKz0gY291bnQ7CisgIH0KKworICBhZGRIaWRkZW5DZWxscyh3YmQsIHNpemUtY291bnQpOworfQorCitzdGF0aWMgaW50Cit3cml0ZUJyYWlsbGUwIChCcmFpbGxlRGlzcGxheSAqYnJsLCBjb25zdCB1bnNpZ25lZCBjaGFyICpjZWxscywgdW5zaWduZWQgY2hhciBjb3VudCwgdW5zaWduZWQgY2hhciBzdGFydCkgeworICByZXR1cm4gcHJvdG9jb2wtPndyaXRlQnJhaWxsZShicmwsIGNlbGxzLCBjb3VudCwgc3RhcnQpOworfQorCitzdGF0aWMgaW50Cit3cml0ZUJyYWlsbGUyIChCcmFpbGxlRGlzcGxheSAqYnJsLCBjb25zdCB1bnNpZ25lZCBjaGFyICpjZWxscywgdW5zaWduZWQgY2hhciBjb3VudCwgdW5zaWduZWQgY2hhciBzdGFydCkgeworICBpZiAoIW1vZGVsLT5wYXJ0aWFsVXBkYXRlcykgeworICAgIHVuc2lnbmVkIGNoYXIgYnVmZmVyW2NvdW50ICsgMl07CisgICAgV3JpdGVCcmFpbGxlRGF0YSB3YmQgPSB7CisgICAgICAuZnJvbSA9IHsKKyAgICAgICAgLmNlbGxzID0gY2VsbHMsCisgICAgICAgIC5vZmZzZXQgPSAwLAorICAgICAgICAuY291bnQgPSBjZWxsQ291bnQKKyAgICAgIH0sCisKKyAgICAgIC50byA9IHsKKyAgICAgICAgLmNlbGxzID0gYnVmZmVyLAorICAgICAgICAub2Zmc2V0ID0gMAorICAgICAgfQorICAgIH07CisKKyAgICBhZGRIaWRkZW5DZWxscygmd2JkLCAyKTsKKyAgICBhZGRBY3R1YWxDZWxscygmd2JkLCAwKTsKKyAgICByZXR1cm4gcHJvdG9jb2wtPndyaXRlQnJhaWxsZShicmwsIGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlciksIDApOworICB9CisKKyAgcmV0dXJuIHByb3RvY29sLT53cml0ZUJyYWlsbGUoYnJsLCBjZWxscywgY291bnQsIHN0YXJ0KzIpOworfQorCitzdGF0aWMgaW50Cit3cml0ZUJyYWlsbGU0IChCcmFpbGxlRGlzcGxheSAqYnJsLCBjb25zdCB1bnNpZ25lZCBjaGFyICpjZWxscywgdW5zaWduZWQgY2hhciBjb3VudCwgdW5zaWduZWQgY2hhciBzdGFydCkgeworICBpZiAoIW1vZGVsLT5wYXJ0aWFsVXBkYXRlcykgeworICAgIHVuc2lnbmVkIGNoYXIgYnVmZmVyW2NvdW50ICsgNF07CisgICAgV3JpdGVCcmFpbGxlRGF0YSB3YmQgPSB7CisgICAgICAuZnJvbSA9IHsKKyAgICAgICAgLmNlbGxzID0gY2VsbHMsCisgICAgICAgIC5vZmZzZXQgPSAwLAorICAgICAgICAuY291bnQgPSBjZWxsQ291bnQKKyAgICAgIH0sCisKKyAgICAgIC50byA9IHsKKyAgICAgICAgLmNlbGxzID0gYnVmZmVyLAorICAgICAgICAub2Zmc2V0ID0gMAorICAgICAgfQorICAgIH07CisKKyAgICBhZGRIaWRkZW5DZWxscygmd2JkLCAyKTsKKyAgICBhZGRBY3R1YWxDZWxscygmd2JkLCA2KTsKKyAgICBhZGRIaWRkZW5DZWxscygmd2JkLCAyKTsKKyAgICBhZGRBY3R1YWxDZWxscygmd2JkLCAwKTsKKyAgICByZXR1cm4gcHJvdG9jb2wtPndyaXRlQnJhaWxsZShicmwsIGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlciksIDApOworICB9CisKKyAgaWYgKHN0YXJ0ID49IDYpIHsKKyAgICByZXR1cm4gcHJvdG9jb2wtPndyaXRlQnJhaWxsZShicmwsICZjZWxsc1tzdGFydF0sIGNvdW50LCBzdGFydCs0KTsKKyAgfQorCisgIGlmICgoc3RhcnQgKyBjb3VudCkgPD0gNikgeworICAgIHJldHVybiBwcm90b2NvbC0+d3JpdGVCcmFpbGxlKGJybCwgJmNlbGxzW3N0YXJ0XSwgY291bnQsIHN0YXJ0KzIpOworICB9CisKKyAgeworICAgIHVuc2lnbmVkIGNoYXIgYnVmZmVyW2NvdW50ICsgMl07CisgICAgV3JpdGVCcmFpbGxlRGF0YSB3YmQgPSB7CisgICAgICAuZnJvbSA9IHsKKyAgICAgICAgLmNlbGxzID0gY2VsbHMsCisgICAgICAgIC5vZmZzZXQgPSBzdGFydCwKKyAgICAgICAgLmNvdW50ID0gY291bnQKKyAgICAgIH0sCisKKyAgICAgIC50byA9IHsKKyAgICAgICAgLmNlbGxzID0gYnVmZmVyLAorICAgICAgICAub2Zmc2V0ID0gMAorICAgICAgfQorICAgIH07CisKKyAgICBhZGRBY3R1YWxDZWxscygmd2JkLCA2LXN0YXJ0KTsKKyAgICBhZGRIaWRkZW5DZWxscygmd2JkLCAyKTsKKyAgICBhZGRBY3R1YWxDZWxscygmd2JkLCAwKTsKKyAgICByZXR1cm4gcHJvdG9jb2wtPndyaXRlQnJhaWxsZShicmwsIGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlciksIHN0YXJ0KzIpOworICB9Cit9CisKK3N0YXRpYyBjb25zdCBNb2RlbEVudHJ5IG1vZGVsVGFibGVbXSA9IHsKKyAgeyAucHJvZHVjdCA9ICZwcm9kdWN0RW50cnlfVm95YWdlciwKKyAgICAucmVwb3J0ZWRDZWxsQ291bnQgPSA0OCwKKyAgICAuYWN0dWFsQ2VsbENvdW50ID0gNDQsCisgICAgLndyaXRlQnJhaWxsZSA9IHdyaXRlQnJhaWxsZTQsCisgICAgLnBhcnRpYWxVcGRhdGVzID0gMSwKKyAgfSwKKworICB7IC5wcm9kdWN0ID0gJnByb2R1Y3RFbnRyeV9Wb3lhZ2VyLAorICAgIC5yZXBvcnRlZENlbGxDb3VudCA9IDcyLAorICAgIC5hY3R1YWxDZWxsQ291bnQgPSA3MCwKKyAgICAud3JpdGVCcmFpbGxlID0gd3JpdGVCcmFpbGxlMiwKKyAgICAucGFydGlhbFVwZGF0ZXMgPSAxLAorICB9LAorCisgIHsgLnByb2R1Y3QgPSAmcHJvZHVjdEVudHJ5X0JyYWlsbGVQZW4sCisgICAgLnJlcG9ydGVkQ2VsbENvdW50ID0gMTIsCisgICAgLmFjdHVhbENlbGxDb3VudCA9IDEyLAorICAgIC53cml0ZUJyYWlsbGUgPSB3cml0ZUJyYWlsbGUwLAorICB9LAorCisgIHsgLnByb2R1Y3QgPSBOVUxMIH0KK307CisKKworLyogR2xvYmFsIHZhcmlhYmxlcyAqLworc3RhdGljIHVuc2lnbmVkIGNoYXIgKnByZXZpb3VzQ2VsbHMgPSBOVUxMOyAvKiBwcmV2aW91cyBwYXR0ZXJuIGRpc3BsYXllZCAqLworc3RhdGljIHVuc2lnbmVkIGNoYXIgKnRyYW5zbGF0ZWRDZWxscyA9IE5VTEw7IC8qIGJ1ZmZlciB0byBwcmVwYXJlIG5ldyBwYXR0ZXJuICovCisKKy8qIFZvbHRhZ2U6IGZyb20gMC0+MzAwViB0byAyNTUtPjIwMFYuCisgKiBQcmVzdW1hYmx5IHRoaXMgaXMgdm9sdGFnZSBmb3IgZG90IGZpcm1uZXNzLgorICogUHJlc3VtYWJseSAwIG1ha2VzIGRvdHMgaGFyZGVzdCwgMjU1IG1ha2VzIHRoZW0gc29mdGVzdC4KKyAqIFdlIGFyZSB0b2xkIDI2NVYgaXMgbm9ybWFsIG9wZXJhdGluZyB2b2x0YWdlIGJ1dCB3ZSBkb24ndCBrbm93IHRoZSBzY2FsZS4KKyAqLworc3RhdGljIGludAorc2V0QnJhaWxsZUZpcm1uZXNzIChCcmFpbGxlRGlzcGxheSAqYnJsLCBCcmFpbGxlRmlybW5lc3Mgc2V0dGluZykgeworICB1bnNpZ25lZCBjaGFyIHZvbHRhZ2UgPSAwWEZGIC0gKHNldHRpbmcgKiAwWEZGIC8gQlJMX0ZJUk1ORVNTX01BWElNVU0pOworICBsb2dNZXNzYWdlKExPR19ERUJVRywgInNldHRpbmcgZGlzcGxheSB2b2x0YWdlOiAlMDJYIiwgdm9sdGFnZSk7CisgIHJldHVybiBwcm90b2NvbC0+c2V0RGlzcGxheVZvbHRhZ2UoYnJsLCB2b2x0YWdlKTsKK30KKworc3RhdGljIGludAorc291bmRCZWVwIChCcmFpbGxlRGlzcGxheSAqYnJsLCB1bnNpZ25lZCBjaGFyIGR1cmF0aW9uKSB7CisgIGlmICghcHJvdG9jb2wtPnNvdW5kQmVlcChicmwsIGR1cmF0aW9uKSkgcmV0dXJuIDA7CisgIGFzeW5jV2FpdChkdXJhdGlvbik7CisgIHJldHVybiAxOworfQorCitzdGF0aWMgaW50CiticmxfY29uc3RydWN0IChCcmFpbGxlRGlzcGxheSAqYnJsLCBjaGFyICoqcGFyYW1ldGVycywgY29uc3QgY2hhciAqZGV2aWNlKSB7CisgIGlmIChjb25uZWN0UmVzb3VyY2UoYnJsLCBkZXZpY2UpKSB7CisgICAgaWYgKHByb3RvY29sLT5nZXRDZWxsQ291bnQoYnJsLCAmY2VsbENvdW50KSkgeworICAgICAgbW9kZWwgPSBtb2RlbFRhYmxlOworCisgICAgICB3aGlsZSAobW9kZWwtPnByb2R1Y3QpIHsKKyAgICAgICAgaWYgKG1vZGVsLT5yZXBvcnRlZENlbGxDb3VudCA9PSBjZWxsQ291bnQpIHsKKyAgICAgICAgICBjb25zdCBQcm9kdWN0RW50cnkgKnByb2R1Y3QgPSBtb2RlbC0+cHJvZHVjdDsKKyAgICAgICAgICBsb2dNZXNzYWdlKExPR19JTkZPLCAiUHJvZHVjdDogJXMiLCBwcm9kdWN0LT5uYW1lKTsKKworICAgICAgICAgIGNlbGxDb3VudCA9IG1vZGVsLT5hY3R1YWxDZWxsQ291bnQ7CisgICAgICAgICAgbG9nTWVzc2FnZShMT0dfSU5GTywgIkNlbGwgQ291bnQ6ICV1IiwgY2VsbENvdW50KTsKKworICAgICAgICAgIHByb3RvY29sLT5sb2dTZXJpYWxOdW1iZXIoYnJsKTsKKyAgICAgICAgICBwcm90b2NvbC0+bG9nSGFyZHdhcmVWZXJzaW9uKGJybCk7CisgICAgICAgICAgcHJvdG9jb2wtPmxvZ0Zpcm13YXJlVmVyc2lvbihicmwpOworCisgICAgICAgICAgLyogdHJhbnNsYXRlZENlbGxzIGhvbGRzIHRoZSBzdGF0dXMgY2VsbHMgYW5kIHRoZSB0ZXh0IGNlbGxzLgorICAgICAgICAgICAqIFdlIGV4cG9ydCBkaXJlY3RseSB0byBCUkxUVFkgb25seSB0aGUgdGV4dCBjZWxscy4KKyAgICAgICAgICAgKi8KKyAgICAgICAgICBicmwtPnRleHRDb2x1bW5zID0gY2VsbENvdW50OwkJLyogaW5pdGlhbGl6ZSBzaXplIG9mIGRpc3BsYXkgKi8KKyAgICAgICAgICBicmwtPnRleHRSb3dzID0gMTsJCS8qIGFsd2F5cyAxICovCisKKyAgICAgICAgICBzZXRCcmFpbGxlS2V5VGFibGUoYnJsLCBwcm9kdWN0LT5rZXlUYWJsZSk7CisgICAgICAgICAgYnJsLT5zZXRCcmFpbGxlRmlybW5lc3MgPSBzZXRCcmFpbGxlRmlybW5lc3M7CisKKyAgICAgICAgICBpZiAoKHByZXZpb3VzQ2VsbHMgPSBtYWxsb2MoY2VsbENvdW50KSkpIHsKKyAgICAgICAgICAgIGlmICgodHJhbnNsYXRlZENlbGxzID0gbWFsbG9jKGNlbGxDb3VudCkpKSB7CisgICAgICAgICAgICAgIGlmIChwcm90b2NvbC0+c2V0RGlzcGxheVN0YXRlKGJybCwgMSkpIHsKKyAgICAgICAgICAgICAgICBtYWtlT3V0cHV0VGFibGUoZG90c1RhYmxlX0lTTzExNTQ4XzEpOworICAgICAgICAgICAgICAgIGtleXNJbml0aWFsaXplZCA9IDA7CisgICAgICAgICAgICAgICAgZm9yY2VXcml0ZSA9IDE7CisKKyAgICAgICAgICAgICAgICBzb3VuZEJlZXAoYnJsLCBSRUFEWV9CRUVQX0RVUkFUSU9OKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgIGZyZWUodHJhbnNsYXRlZENlbGxzKTsKKyAgICAgICAgICAgICAgdHJhbnNsYXRlZENlbGxzID0gTlVMTDsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgIGxvZ01hbGxvY0Vycm9yKCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGZyZWUocHJldmlvdXNDZWxscyk7CisgICAgICAgICAgICBwcmV2aW91c0NlbGxzID0gTlVMTDsKKyAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgbG9nTWFsbG9jRXJyb3IoKTsKKyAgICAgICAgICB9CisKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIG1vZGVsICs9IDE7CisgICAgICB9CisKKyAgICAgIGlmICghbW9kZWwtPnJlcG9ydGVkQ2VsbENvdW50KSB7CisgICAgICAgIGxvZ01lc3NhZ2UoTE9HX0VSUiwgInVuc3VwcG9ydGVkIGNlbGwgY291bnQ6ICV1IiwgY2VsbENvdW50KTsKKyAgICAgICAgbW9kZWwgPSBOVUxMOworICAgICAgfQorICAgIH0KKworICAgIGRpc2Nvbm5lY3RCcmFpbGxlUmVzb3VyY2UoYnJsLCBOVUxMKTsKKyAgfQorCisgIHJldHVybiAwOworfQorCitzdGF0aWMgdm9pZAorYnJsX2Rlc3RydWN0IChCcmFpbGxlRGlzcGxheSAqYnJsKSB7CisgIGRpc2Nvbm5lY3RCcmFpbGxlUmVzb3VyY2UoYnJsLCBOVUxMKTsKKworICBpZiAodHJhbnNsYXRlZENlbGxzKSB7CisgICAgZnJlZSh0cmFuc2xhdGVkQ2VsbHMpOworICAgIHRyYW5zbGF0ZWRDZWxscyA9IE5VTEw7CisgIH0KKworICBpZiAocHJldmlvdXNDZWxscykgeworICAgIGZyZWUocHJldmlvdXNDZWxscyk7CisgICAgcHJldmlvdXNDZWxscyA9IE5VTEw7CisgIH0KK30KKworc3RhdGljIGludAorYnJsX3dyaXRlV2luZG93IChCcmFpbGxlRGlzcGxheSAqYnJsLCBjb25zdCB3Y2hhcl90ICp0ZXh0KSB7CisgIHVuc2lnbmVkIGludCBmcm9tID0gMDsKKyAgdW5zaWduZWQgaW50IHRvID0gY2VsbENvdW50OworICBpbnQgY2hhbmdlZDsKKworICBpZiAobW9kZWwtPnBhcnRpYWxVcGRhdGVzKSB7CisgICAgY2hhbmdlZCA9IGNlbGxzSGF2ZUNoYW5nZWQocHJldmlvdXNDZWxscywgYnJsLT5idWZmZXIsIGNlbGxDb3VudCwgJmZyb20sICZ0bywgJmZvcmNlV3JpdGUpOworICB9IGVsc2UgeworICAgIGNoYW5nZWQgPSBjZWxsc0hhdmVDaGFuZ2VkKHByZXZpb3VzQ2VsbHMsIGJybC0+YnVmZmVyLCBjZWxsQ291bnQsIE5VTEwsIE5VTEwsICZmb3JjZVdyaXRlKTsKKyAgfQorCisgIGlmIChjaGFuZ2VkKSB7CisgICAgdHJhbnNsYXRlT3V0cHV0Q2VsbHMoJnRyYW5zbGF0ZWRDZWxsc1tmcm9tXSwgJmJybC0+YnVmZmVyW2Zyb21dLCB0by1mcm9tKTsKKyAgICBpZiAoIW1vZGVsLT53cml0ZUJyYWlsbGUoYnJsLCB0cmFuc2xhdGVkQ2VsbHMsIHRvLWZyb20sIGZyb20pKSByZXR1cm4gMDsKKyAgfQorCisgIHJldHVybiAxOworfQorCitzdGF0aWMgaW50CiticmxfcmVhZENvbW1hbmQgKEJyYWlsbGVEaXNwbGF5ICpicmwsIEtleVRhYmxlQ29tbWFuZENvbnRleHQgY29udGV4dCkgeworICByZXR1cm4gcHJvdG9jb2wtPnVwZGF0ZUtleXMoYnJsKT8gRU9GOiBCUkxfQ01EX1JFU1RBUlRCUkw7Cit9CmRpZmYgLS1naXQgYS9Ecml2ZXJzL0JyYWlsbGUvVm95YWdlci9icmxkZWZzLXZvLmggYi9Ecml2ZXJzL0JyYWlsbGUvVm95YWdlci9icmxkZWZzLXZvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTA2NTk4MwotLS0gL2Rldi9udWxsCisrKyBiL0RyaXZlcnMvQnJhaWxsZS9Wb3lhZ2VyL2JybGRlZnMtdm8uaApAQCAtMCwwICsxLDcxIEBACisvKgorICogQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyAqICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyAqCisgKiBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorICoKKyAqIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyAqCisgKiBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisgKi8KKworI2lmbmRlZiBCUkxUVFlfSU5DTFVERURfVk9fQlJMREVGUworI2RlZmluZSBCUkxUVFlfSU5DTFVERURfVk9fQlJMREVGUworCit0eXBlZGVmIGVudW0geworICAvKiBUaGUgdG9wIHJvdW5kIGtleXMgYmVoaW5kIHRoZSByb3V0aW5nIGtleXMsIG5hbWVkIGFzIGlmIHRoZXkKKyAgICogYXJlIHRvIGJlIHVzZWQgZm9yIGJyYWlsbGUgaW5wdXQuCisgICAqLworICBWT19LRVlfRG90MSA9IDAsCisgIFZPX0tFWV9Eb3QyID0gMSwKKyAgVk9fS0VZX0RvdDMgPSAyLAorICBWT19LRVlfRG90NCA9IDMsCisgIFZPX0tFWV9Eb3Q1ID0gNCwKKyAgVk9fS0VZX0RvdDYgPSA1LAorICBWT19LRVlfRG90NyA9IDYsCisgIFZPX0tFWV9Eb3Q4ID0gNywKKworICAvKiBUaGUgZnJvbnQga2V5cyAqLworICBWT19LRVlfVGh1bWIxID0gIDgsIC8qIExlZnRtb3N0ICovCisgIFZPX0tFWV9UaHVtYjIgPSAgOSwgLyogU2Vjb25kIGZyb20gbGVmdCAqLworICBWT19LRVlfTGVmdCAgID0gMTAsIC8qIFJvdW5kIGtleSB0byB0aGUgbGVmdCBvZiB0aGUgY2VudHJhbCBwYWQgKi8KKyAgVk9fS0VZX1VwICAgICA9IDExLCAvKiBVcCBwb3NpdGlvbiBvZiBjZW50cmFsIHBhZCAqLworICBWT19LRVlfRG93biAgID0gMTIsIC8qIERvd24gcG9zaXRpb24gb2YgY2VudHJhbCBwYWQgKi8KKyAgVk9fS0VZX1JpZ2h0ICA9IDEzLCAvKiBSb3VuZCBrZXkgdG8gdGhlIHJpZ2h0IG9mIHRoZSBjZW50cmFsIHBhZCAqLworICBWT19LRVlfVGh1bWIzID0gMTQsIC8qIFNlY29uZCBmcm9tIHJpZ2h0ICovCisgIFZPX0tFWV9UaHVtYjQgPSAxNSAgLyogUmlnaHRtb3N0ICovCit9IFZPX05hdmlnYXRpb25LZXk7CisKK3R5cGVkZWYgZW51bSB7CisgIEJQX0tFWV9Eb3QxICAgID0gMCwKKyAgQlBfS0VZX0RvdDIgICAgPSAxLAorICBCUF9LRVlfRG90MyAgICA9IDIsCisgIEJQX0tFWV9Eb3Q0ICAgID0gMywKKyAgQlBfS0VZX0RvdDUgICAgPSA0LAorICBCUF9LRVlfRG90NiAgICA9IDUsCisgIEJQX0tFWV9TaGlmdCAgID0gNiwKKyAgQlBfS0VZX0NvbnRyb2wgPSA3LAorCisgIEJQX0tFWV9TY3JvbGxMZWZ0ICAgICA9ICA4LAorICBCUF9LRVlfSm95c3RpY2tFbnRlciAgPSAgOSwKKyAgQlBfS0VZX0pveXN0aWNrTGVmdCAgID0gMTAsCisgIEJQX0tFWV9Kb3lzdGlja1VwICAgICA9IDExLAorICBCUF9LRVlfSm95c3RpY2tEb3duICAgPSAxMiwKKyAgQlBfS0VZX0pveXN0aWNrUmlnaHQgID0gMTMsCisgIEJQX0tFWV9TcGFjZSAgICAgICAgICA9IDE0LAorICBCUF9LRVlfU2Nyb2xsUmlnaHQgICAgPSAxNQorfSBCUF9OYXZpZ2F0aW9uS2V5OworCit0eXBlZGVmIGVudW0geworICBWT19HUlBfTmF2aWdhdGlvbktleXMgPSAwLAorICBWT19HUlBfUm91dGluZ0tleXMKK30gVk9fS2V5R3JvdXA7CisKKyNlbmRpZiAvKiBCUkxUVFlfSU5DTFVERURfVk9fQlJMREVGUyAqLyAKZGlmZiAtLWdpdCBhL0RyaXZlcnMvQnJhaWxsZS9YV2luZG93L01ha2VmaWxlLmluIGIvRHJpdmVycy9CcmFpbGxlL1hXaW5kb3cvTWFrZWZpbGUuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjFmNWRkMwotLS0gL2Rldi9udWxsCisrKyBiL0RyaXZlcnMvQnJhaWxsZS9YV2luZG93L01ha2VmaWxlLmluCkBAIC0wLDAgKzEsMjkgQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyMgICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisjCisjIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyMKKyMgQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitEUklWRVJfQ09ERSA9IHh3CitEUklWRVJfTkFNRSA9IFhXaW5kb3cKK0RSSVZFUl9VU0FHRSA9IGdyYXBoaWNhbCAoWDExLCBXaW5kb3dzKQorRFJJVkVSX1ZFUlNJT04gPSAwLjEsIDIwMDQKK0RSSVZFUl9ERVZFTE9QRVJTID0gU2FtdWVsIFRoaWJhdWx0IDxzYW11ZWwudGhpYmF1bHRAZW5zLWx5b24ub3JnPgorQlJMX09CSlMgPSBAYnJhaWxsZV9saWJyYXJpZXNfeHdACitpbmNsdWRlICQoU1JDX1RPUClicmFpbGxlLm1rCisKK2JyYWlsbGUuJE86CisJJChDQykgJChCUkxfQ0ZMQUdTKSAkKFgxMV9JTkNMVURFUykgLWMgJChTUkNfRElSKS9icmFpbGxlLmMKKwpkaWZmIC0tZ2l0IGEvRHJpdmVycy9CcmFpbGxlL1hXaW5kb3cvUkVBRE1FIGIvRHJpdmVycy9CcmFpbGxlL1hXaW5kb3cvUkVBRE1FCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVjYTlmYTYKLS0tIC9kZXYvbnVsbAorKysgYi9Ecml2ZXJzL0JyYWlsbGUvWFdpbmRvdy9SRUFETUUKQEAgLTAsMCArMSw3MSBAQAorRGVzY3JpcHRpb24KKz09PT09PT09PT09CisKK1RoaXMgZHJpdmVyIGxldHMgdXNlIGEgR3JhcGhpY2FsIFVzZXIgSW50ZXJmYWNlIGFzIEJybFRUWSBkZXZpY2U6CitpdCBiZWhhdmVzIGp1c3QgbGlrZSBhIHJlYWwgYnJhaWxsZSBkZXZpY2UsIGl0cyBjb3N0IGV4Y2VwdGVkIDopCisKK0l0IGlzIG1vc3RseSBpbnRlbmRlZCBmb3Igc2lnaHRlZCBkZXZlbG9wZXJzIHdobyBkb24ndCBoYXZlIGFjY2VzcyB0byBhIHJlYWwKK2RldmljZSwgYnV0IHN0aWxsIHdhbnQgdG8gaGF2ZSBhbiBpZGVhIG9mIHRoZSBhY2Nlc3NpYmxpdHkgb2YgdGhlaXIgYXBwbGljYXRpb24uCisKK0hvdyB0byBydW4gYmFzaWNhbGx5Cis9PT09PT09PT09PT09PT09PT09PQorCitBc3N1bWluZyB5b3UncmUgdW5kZXIgWCwgZmlyc3QgbGF1bmNoIGJybHR0eToKKyQgYnJsdHR5IC1iIHh3IC14IGFzIC1BIGF1dGg9bm9uZQorCitUaGVuIHlvdSBjYW4gbGF1bmNoIGEgQnJsQVBJIGFwcGxpY2F0aW9uOgorJCB+L2JybHR0eS9Qcm9ncmFtcy9hcGl0ZXN0CitvciB5b3UgY2FuIGxhdW5jaCB0ZXh0IGFwcGxpY2F0aW9ucyBpbiBBVC1TUEkgdGVybWluYWxzIGxpa2UgZ25vbWUtdGVybWluYWwuCitNb3JlIGRldGFpbHMgY2FuIGJlIGZvdW5kIG9uIGh0dHA6Ly9icmwudGhlZnJlZWNhdC5vcmcvdGV4dC1hcHBzLWExMXktdGVzdC5odG1sCisKK1lvdSBtYXkgZ2l2ZSBzZXZlcmFsIHBhcmFtZXRlcnMgdG8gdGhlIGRyaXZlcjoKKyQgYnJsdHR5IC1iIHh3IC10IGlkZW50aXR5IC1CIHRrcGFybXM9Ii1nZW9tZXRyeSAtMCswIC1kaXNwbGF5IDoxIixsaW5lcz0yLGNvbHM9MjAsbW9kZWw9YmFyZQord2lsbCBzZXQgYSAyMHgyIGJyYWlsbGUgZGlzcGxheSBhcHBlYXIgaW4gdGhlIHVwcGVyIHJpZ2h0IGNvcm5lciBvZiB0aGUKKzoxIGRpc3BsYXksIHdpdGhvdXQgYW55IG5hdmlnYXRpb24ga2V5LiBUaGVyZSBpcyBhbHNvIHRoZSB2cyBtb2RlbCB3aGljaAord2lsbCBzaG93IHVwIG1vc3Qgb2YgVmlzaW9CcmFpbGxlIGRldmljZSdzIGtleXMuCisKK1lvdSBzaG91bGQgY29uZmlndXJlIHlvdXIgd2luZG93IG1hbmFnZXIgbm90IHRvIGxldCB0aGUgQlJMVFRZIHdpbmRvdyBnZXQKK2tleWJvYXJkIGZvY3VzLCBzbyBhcyB0byBiZSBhYmxlIHRvIHNpbXVsYXRlIGtleXByZXNzZXMgYnkgcHJlc3NpbmcgYnV0dG9ucy4KKworUmVkaXJlY3RpbmcgdGhlIG91dHB1dAorPT09PT09PT09PT09PT09PT09PT09PQorCitUaGUgb3V0cHV0IG9mIHRoaXMgdmlydHVhbCBicmFpbGxlIGRldmljZSBjYW4gYmUgc2hvd24gb24gYW5vdGhlciBjb21wdXRlciwgYnkKK3JlZGlyZWN0aW5nIHRoZSBYIG91dHB1dC4gTGV0J3Mgc2F5IHlvdSB3aWxsIHJ1biBicmx0dHkgb24gIm15Y29tcHV0ZXIiLCB3aXRoCit0aGUgb3V0cHV0IG9uICJvdGhlcmNvbXB1dGVyIi4gRmlyc3QgeW91IGhhdmUgdG8gbGV0IG15Y29tcHV0ZXIgY29ubmVjdCB0bworb3RoZXJjb21wdXRlcidzIFggc2VydmVyOgorCitvdGhlcmNvbXB1dGVyJCB4aG9zdCArbXljb21wdXRlcgorCitBbmQgdGhlbiB5b3UgY2FuIHN0YXJ0IGJybHR0eSBvbiBteWNvbXB1dGVyOgorCitteWNvbXB1dGVyJCBESVNQTEFZPW90aGVyY29tcHV0ZXI6MCBicmx0dHkgLWIgeHcgLUIgaW5wdXQ9b24KKworTW9yZSBmaW5lLWdyYWluIGFjY2VzcyBjb250cm9sIGNhbiBiZSBhY2hpZXZlZCBieSB1c2luZyB4YXV0aC4KKworQW5vdGhlciB3YXksIHdoaWNoIG1pZ2h0IGJlIGVhc2llciBkZXBlbmRpbmcgb24geW91ciBjb25maWd1cmF0aW9uLCBpcyB0bworZm9yd2FyZCBYIHRocm91Z2ggc3NoOgorCitvdGhlcmNvbXB1dGVyJCBzc2ggLVggbXljb21wdXRlcgorbXljb21wdXRlciQgYnJsdHR5IC1iIHh3IC1CIGlucHV0PW9uCisKKworVGhlIGlucHV0PW9uIG9wdGlvbiBtYWtlcyB0aGUga2V5cHJlc3NlcyBpbiB0aGUgZGV2aWNlIHdpbmRvdyBnZXQgc2ltdWxhdGVkCitvbiBteWNvbXB1dGVyLCBqdXN0IGxpa2UgYSByZWFsIGJyYWlsbGUgZGV2aWNlLgorCisqKiogRG9uJ3Qgc2V0IGlucHV0PW9uIHdpdGhvdXQgdXNpbmcgRElTUExBWSB3aXRoIGEgZGlmZmVyZW50IGRpc3BsYXksCitiZWNhdXNlIG90aGVyd2lzZSBlbXVsYXRlZCBrZXlwcmVzc2VzIHdpbGwganVzdCBsb29wICEgKioqCisKK0JyYWlsbGUgY2VsbHMKKz09PT09PT09PT09PT0KKworSWYgeW91IHdhbnQgYnJhaWxsZSBkaXNwbGF5IGFzIHdlbGwsIHlvdSdsbCBuZWVkIHRoZSBDbGVhcmx5VSBmb250CisoaW5jbHVkZWQgaW4gcmVjZW50IHhmb250cy1iYXNlIHBhY2thZ2VzKSBhbmQgYSBVVEYtOCBsb2NhbGUgZm9yCitjaGFyYWN0ZXJzOiBpZiB5b3VyIHVzdWFsIGxvY2FsZSBpcyBlbl9VUywgbGF1bmNoIGJybHR0eSB3aXRoIGEKK3ByZXBlbmRlZCBMQ19DVFlQRToKKworTENfQ1RZUEU9ZW5fVVMuVVRGLTggYnJsdHR5IC4uLgorCitPbiB3aW5kb3dzLCB5b3UgbmVlZCB0byBjb3B5IHRoZSBmaWxlIFVCcmFpbGxlLnR0ZiBpbnRvIHRoZSBDOlxXaW5kb3dzXEZvbnRzXAorZm9sZGVyLiBJdCBjYW4gYmUgZm91bmQgaW4gdGhpcyBkaXJlY3RvcnkgYXMgd2VsbCBhcyBpbiB0aGUgRm9udHNcIHRvcC1sZXZlbAorZm9sZGVyIG9mIEJSTFRUWSdzIFdpbmRvd3MgaW5zdGFsbGVkIGZpbGVzIGhpZXJhcmNoeS4KZGlmZiAtLWdpdCBhL0RyaXZlcnMvQnJhaWxsZS9YV2luZG93L1JFQURNRS5VQnJhaWxsZSBiL0RyaXZlcnMvQnJhaWxsZS9YV2luZG93L1JFQURNRS5VQnJhaWxsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYzVlNjNkCi0tLSAvZGV2L251bGwKKysrIGIvRHJpdmVycy9CcmFpbGxlL1hXaW5kb3cvUkVBRE1FLlVCcmFpbGxlCkBAIC0wLDAgKzEsMyBAQAorVUJyYWlsbGUudHRmIGlzIGEgc2V0IG9mIHRydWUgdHlwZSBmb250IGdseXBocyBmb3IgdGhlIFVuaWNvZGUgYnJhaWxsZSByYW5nZSAKK1tVKzI4eXhdLiBJdCB3YXMgZGV2ZWxvcGVkIGJ5IFZ5YWNoZXNsYXYgRGlrb25vdiA8c2RpY29ub3ZAbWFpbC5ydT4sIGFuZCBjYW4gYmUgCitkb3dubG9hZGVkIGZyb206IGh0dHA6Ly95dWRpdC5vcmcvZG93bmxvYWQvZm9udHMvVUJyYWlsbGUvCmRpZmYgLS1naXQgYS9Ecml2ZXJzL0JyYWlsbGUvWFdpbmRvdy9VQnJhaWxsZS50dGYgYi9Ecml2ZXJzL0JyYWlsbGUvWFdpbmRvdy9VQnJhaWxsZS50dGYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMThhOWYxMgotLS0gL2Rldi9udWxsCisrKyBiL0RyaXZlcnMvQnJhaWxsZS9YV2luZG93L1VCcmFpbGxlLnR0ZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9Ecml2ZXJzL0JyYWlsbGUvWFdpbmRvdy9icmFpbGxlLmMgYi9Ecml2ZXJzL0JyYWlsbGUvWFdpbmRvdy9icmFpbGxlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmY4MTE0ZgotLS0gL2Rldi9udWxsCisrKyBiL0RyaXZlcnMvQnJhaWxsZS9YV2luZG93L2JyYWlsbGUuYwpAQCAtMCwwICsxLDEzMjAgQEAKKy8qCisgKiBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorICogICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorICoKKyAqIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorICoKKyAqIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyAqLworCisjaW5jbHVkZSAicHJvbG9ndWUuaCIKKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8bG9jYWxlLmg+CisjaW5jbHVkZSA8c2lnbmFsLmg+CisKKyNpbmNsdWRlICJsb2cuaCIKKyNpbmNsdWRlICJwYXJzZS5oIgorI2luY2x1ZGUgImNoYXJzZXQuaCIKKyNpbmNsdWRlICJ1bmljb2RlLmgiCisKKyNpZiBkZWZpbmVkKFdJTkRPV1MpCisjZGVmaW5lIFVTRV9XSU5ET1dTCisjZWxpZiBkZWZpbmVkKEhBVkVfUEtHX1hBVykKKyNkZWZpbmUgVVNFX1hBVworI2RlZmluZSBVU0VfWFQKKyNpbmNsdWRlIDxYMTEvSW50cmluc2ljLmg+CisjaW5jbHVkZSA8WDExL1hhdy9Gb3JtLmg+CisjaW5jbHVkZSA8WDExL1hhdy9QYW5lZC5oPgorI2luY2x1ZGUgPFgxMS9YYXcvTGFiZWwuaD4KKyNpbmNsdWRlIDxYMTEvWGF3L0NvbW1hbmQuaD4KKyNpbmNsdWRlIDxYMTEvWGF3L1JlcGVhdGVyLmg+CisjaW5jbHVkZSA8WDExL1hhdy9TaW1wbGVNZW51Lmg+CisjaW5jbHVkZSA8WDExL1hhdy9TbWVMaW5lLmg+CisjaW5jbHVkZSA8WDExL1hhdy9TbWVCU0IuaD4KKyNlbGlmIGRlZmluZWQoSEFWRV9QS0dfWEFXM0QpCisjZGVmaW5lIFVTRV9YQVcKKyNkZWZpbmUgVVNFX1hUCisjZGVmaW5lIFhBV19JTlRFUk5BVElPTkFMSVpBVElPTgorI2luY2x1ZGUgPFgxMS9JbnRyaW5zaWMuaD4KKyNpbmNsdWRlIDxYMTEvWGF3M2QvRm9ybS5oPgorI2luY2x1ZGUgPFgxMS9YYXczZC9QYW5lZC5oPgorI2luY2x1ZGUgPFgxMS9YYXczZC9MYWJlbC5oPgorI2luY2x1ZGUgPFgxMS9YYXczZC9Db21tYW5kLmg+CisjaW5jbHVkZSA8WDExL1hhdzNkL1JlcGVhdGVyLmg+CisjaW5jbHVkZSA8WDExL1hhdzNkL1NpbXBsZU1lbnUuaD4KKyNpbmNsdWRlIDxYMTEvWGF3M2QvU21lTGluZS5oPgorI2luY2x1ZGUgPFgxMS9YYXczZC9TbWVCU0IuaD4KKyNlbGlmIGRlZmluZWQoSEFWRV9QS0dfTkVYVEFXKQorI2RlZmluZSBVU0VfWEFXCisjZGVmaW5lIFVTRV9YVAorI2luY2x1ZGUgPFgxMS9JbnRyaW5zaWMuaD4KKyNpbmNsdWRlIDxYMTEvbmVYdGF3L0Zvcm0uaD4KKyNpbmNsdWRlIDxYMTEvbmVYdGF3L1BhbmVkLmg+CisjaW5jbHVkZSA8WDExL25lWHRhdy9MYWJlbC5oPgorI2luY2x1ZGUgPFgxMS9uZVh0YXcvQ29tbWFuZC5oPgorI2luY2x1ZGUgPFgxMS9uZVh0YXcvUmVwZWF0ZXIuaD4KKyNpbmNsdWRlIDxYMTEvbmVYdGF3L1NpbXBsZU1lbnUuaD4KKyNpbmNsdWRlIDxYMTEvbmVYdGF3L1NtZUxpbmUuaD4KKyNpbmNsdWRlIDxYMTEvbmVYdGF3L1NtZUJTQi5oPgorI2VsaWYgZGVmaW5lZChIQVZFX1BLR19YQVdQTFVTKQorI2RlZmluZSBVU0VfWEFXCisjZGVmaW5lIFVTRV9YVAorI2luY2x1ZGUgPFgxMS9JbnRyaW5zaWMuaD4KKyNpbmNsdWRlIDxYMTEvWGF3UGx1cy9Gb3JtLmg+CisjaW5jbHVkZSA8WDExL1hhd1BsdXMvUGFuZWQuaD4KKyNpbmNsdWRlIDxYMTEvWGF3UGx1cy9MYWJlbC5oPgorI2luY2x1ZGUgPFgxMS9YYXdQbHVzL0NvbW1hbmQuaD4KKyNpbmNsdWRlIDxYMTEvWGF3UGx1cy9SZXBlYXRlci5oPgorI2luY2x1ZGUgPFgxMS9YYXdQbHVzL1NpbXBsZU1lbnUuaD4KKyNpbmNsdWRlIDxYMTEvWGF3UGx1cy9TbWVMaW5lLmg+CisjaW5jbHVkZSA8WDExL1hhd1BsdXMvU21lQlNCLmg+CisjZWxpZiBkZWZpbmVkKEhBVkVfUEtHX1hNKQorI2RlZmluZSBVU0VfWE0KKyNkZWZpbmUgVVNFX1hUCisjaW5jbHVkZSA8WDExL0ludHJpbnNpYy5oPgorI2luY2x1ZGUgPFhtL1htLmg+CisjaW5jbHVkZSA8WG0vRm9ybS5oPgorI2luY2x1ZGUgPFhtL1BhbmVkVy5oPgorI2luY2x1ZGUgPFhtL0xhYmVsLmg+CisjaW5jbHVkZSA8WG0vUHVzaEIuaD4KKyNpbmNsdWRlIDxYbS9Ub2dnbGVCLmg+CisjaW5jbHVkZSA8WG0vUm93Q29sdW1uLmg+CisjaW5jbHVkZSA8WG0vTWVudVNoZWxsLmg+CisjZWxzZSAvKiBIQVZFX1BLR18gKi8KKyNlcnJvciBHVUkgdG9vbGtpdCBlaXRoZXIgdW5zcGVjaWZpZWQgb3IgdW5zdXBwb3J0ZWQKKyNlbmRpZiAvKiBIQVZFX1BLR18gKi8KKworI2lmZGVmIFVTRV9YVAorI2RlZmluZSBYS19NSVNDRUxMQU5ZCisjaW5jbHVkZSA8WDExL1hsaWIuaD4KKyNpbmNsdWRlIDxYMTEvU3RyaW5nRGVmcy5oPgorI2luY2x1ZGUgPFgxMS9rZXlzeW1kZWYuaD4KKyNpbmNsdWRlIDxYMTEvU2hlbGwuaD4KKyNlbmRpZiAvKiBVU0VfWFQgKi8KKworI2lmZGVmIFVTRV9XSU5ET1dTCisjaW5jbHVkZSA8Y29tbWN0cmwuaD4KKyNpbmNsdWRlIDx3aW5kb3dzeC5oPgorI2RlZmluZSBYdE51bWJlcih0KSAoc2l6ZW9mKHQpL3NpemVvZigqdCkpCit0eXBlZGVmIHZvaWQgKlh0UG9pbnRlcjsKKyNlbmRpZiAvKiBVU0VfV0lORE9XUyAqLworCisjaWYgZGVmaW5lZChVU0VfWEFXKQorI2RlZmluZSBmb3JtV2lkZ2V0Q2xhc3MgICAgICAgZm9ybVdpZGdldENsYXNzCisjZGVmaW5lIHBhbmVkV2lkZ2V0Q2xhc3MgICAgICBwYW5lZFdpZGdldENsYXNzCisjZGVmaW5lIGxhYmVsV2lkZ2V0Q2xhc3MgICAgICBsYWJlbFdpZGdldENsYXNzCisjZGVmaW5lIGNvbW1hbmRXaWRnZXRDbGFzcyAgICBjb21tYW5kV2lkZ2V0Q2xhc3MKKyNkZWZpbmUgcmVwZWF0ZXJXaWRnZXRDbGFzcyAgIHJlcGVhdGVyV2lkZ2V0Q2xhc3MKKyNkZWZpbmUgbWVudUVudHJ5V2lkZ2V0Q2xhc3MgIHNtZUJTQk9iamVjdENsYXNzCisjZGVmaW5lIENyZWF0ZVBvcHVwTWVudSh0aXRsZSwgdG9wbGV2ZWwpIFwKKwlYdENyZWF0ZVBvcHVwU2hlbGwodGl0bGUsIHNpbXBsZU1lbnVXaWRnZXRDbGFzcywgdG9wbGV2ZWwsIE5VTEwsIDApCisjZGVmaW5lIEFkZE1lbnVTZXBhcmF0b3IodGl0bGUsIG1lbnUpIFwKKwlYdFZhQ3JlYXRlTWFuYWdlZFdpZGdldCh0aXRsZSwgc21lTGluZU9iamVjdENsYXNzLCBtZW51LCBOVUxMKQorI2RlZmluZSBBZGRNZW51TGFiZWwodGl0bGUsIG1lbnUpIFwKKwlYdFZhQ3JlYXRlTWFuYWdlZFdpZGdldCh0aXRsZSwgc21lQlNCT2JqZWN0Q2xhc3MsIG1lbnUsIE5VTEwpOworI2RlZmluZSBBZGRNZW51UmFkaW8odGl0bGUsIG1lbnUsIGNiLCBjaGVja2VkKSBcCisJWHRWYUNyZWF0ZU1hbmFnZWRXaWRnZXQodGl0bGUsIG1lbnVFbnRyeVdpZGdldENsYXNzLCBtZW51LCBcCisJTnZhbHVlQ2hhbmdlZENhbGxiYWNrLCBjYiwgTnRvZ2dsZVN0YXRlLCBjaGVja2VkID8gY2hlY2sgOiBOb25lLCBcCisJWHRObGVmdE1hcmdpbiwgOSwgXAorCU5VTEwpOworI2RlZmluZSBObGFiZWwgICAgICAgICAgICAgICAgWHRObGFiZWwKKyNkZWZpbmUgTmNhbGxiYWNrICAgICAgICAgICAgIFh0TmNhbGxiYWNrCisjZGVmaW5lIE52YWx1ZUNoYW5nZWRDYWxsYmFjayBYdE5jYWxsYmFjaworI2RlZmluZSBOdG9wICAgICAgICAgICAgICAgICAgWHROdG9wCisjZGVmaW5lIE5ib3R0b20gICAgICAgICAgICAgICBYdE5ib3R0b20KKyNkZWZpbmUgTmxlZnQgICAgICAgICAgICAgICAgIFh0TmxlZnQKKyNkZWZpbmUgTnJpZ2h0ICAgICAgICAgICAgICAgIFh0TnJpZ2h0CisjZGVmaW5lIENoYWluVG9wICAgICAgICAgICAgICBYdENoYWluVG9wCisjZGVmaW5lIENoYWluQm90dG9tICAgICAgICAgICBYdENoYWluVG9wCisjZGVmaW5lIENoYWluTGVmdCAgICAgICAgICAgICBYdENoYWluTGVmdAorI2RlZmluZSBDaGFpblJpZ2h0ICAgICAgICAgICAgWHRDaGFpbkxlZnQKKyNkZWZpbmUgTnZlcnREaXN0YW5jZSAgICAgICAgIFh0TnZlcnREaXN0YW5jZQorI2RlZmluZSBOaG9yaXpEaXN0YW5jZSAgICAgICAgWHROaG9yaXpEaXN0YW5jZQorI2RlZmluZSBOdG9nZ2xlU3RhdGUgICAgICAgICAgWHRObGVmdEJpdG1hcAorI2RlZmluZSBNZW51V2lkZ2V0ICAgICAgICAgICAgV2lkZ2V0CisjZWxpZiBkZWZpbmVkKFVTRV9YTSkKKyNkZWZpbmUgZm9ybVdpZGdldENsYXNzICAgICAgIHhtRm9ybVdpZGdldENsYXNzCisjZGVmaW5lIHBhbmVkV2lkZ2V0Q2xhc3MgICAgICB4bVBhbmVkV2luZG93V2lkZ2V0Q2xhc3MKKyNkZWZpbmUgbGFiZWxXaWRnZXRDbGFzcyAgICAgIHhtTGFiZWxXaWRnZXRDbGFzcworI2RlZmluZSBjb21tYW5kV2lkZ2V0Q2xhc3MgICAgeG1QdXNoQnV0dG9uV2lkZ2V0Q2xhc3MKKyNkZWZpbmUgcmVwZWF0ZXJXaWRnZXRDbGFzcyAgIHhtUHVzaEJ1dHRvbldpZGdldENsYXNzCisjZGVmaW5lIG1lbnVFbnRyeVdpZGdldENsYXNzICB4bVRvZ2dsZUJ1dHRvbldpZGdldENsYXNzCisjZGVmaW5lIENyZWF0ZVBvcHVwTWVudSh0aXRsZSwgdG9wbGV2ZWwpIFwKKwlYbUNyZWF0ZVBvcHVwTWVudSh0b3BsZXZlbCwgdGl0bGUsIE5VTEwsIDApCisjZGVmaW5lIEFkZE1lbnVTZXBhcmF0b3IodGl0bGUsIG1lbnUpIHdoaWxlICgwKSB7IH0KKyNkZWZpbmUgQWRkTWVudUxhYmVsKHRpdGxlLCBtZW51KSBcCisJWHRWYUNyZWF0ZU1hbmFnZWRXaWRnZXQodGl0bGUsIHhtVG9nZ2xlQnV0dG9uV2lkZ2V0Q2xhc3MsIG1lbnUsIE5VTEwpOworI2RlZmluZSBBZGRNZW51UmFkaW8odGl0bGUsIG1lbnUsIGNiLCBjaGVja2VkKSBcCisJWHRWYUNyZWF0ZU1hbmFnZWRXaWRnZXQodGl0bGUsIG1lbnVFbnRyeVdpZGdldENsYXNzLCBtZW51LCBcCisJTnZhbHVlQ2hhbmdlZENhbGxiYWNrLCBjYiwgTnRvZ2dsZVN0YXRlLCBjaGVja2VkID8gWG1TRVQgOiBYbVVOU0VULCBcCisJTlVMTCk7CisjZGVmaW5lIE5sYWJlbCAgICAgICAgICAgICAgICBYbU5sYWJlbFN0cmluZworI2RlZmluZSBOY2FsbGJhY2sgICAgICAgICAgICAgWG1OYWN0aXZhdGVDYWxsYmFjaworI2RlZmluZSBOdmFsdWVDaGFuZ2VkQ2FsbGJhY2sgWG1OdmFsdWVDaGFuZ2VkQ2FsbGJhY2sKKyNkZWZpbmUgTnRvcCAgICAgICAgICAgICAgICAgIFhtTnRvcEF0dGFjaG1lbnQKKyNkZWZpbmUgTmJvdHRvbSAgICAgICAgICAgICAgIFhtTmJvdHRvbUF0dGFjaG1lbnQKKyNkZWZpbmUgTmxlZnQgICAgICAgICAgICAgICAgIFhtTmxlZnRBdHRhY2htZW50CisjZGVmaW5lIE5yaWdodCAgICAgICAgICAgICAgICBYbU5yaWdodEF0dGFjaG1lbnQKKyNkZWZpbmUgQ2hhaW5Ub3AgICAgICAgICAgICAgIFhtQVRUQUNIX0ZPUk0KKyNkZWZpbmUgQ2hhaW5Cb3R0b20gICAgICAgICAgIFhtQVRUQUNIX05PTkUKKyNkZWZpbmUgQ2hhaW5MZWZ0ICAgICAgICAgICAgIFhtQVRUQUNIX0ZPUk0KKyNkZWZpbmUgQ2hhaW5SaWdodCAgICAgICAgICAgIFhtQVRUQUNIX05PTkUKKyNkZWZpbmUgTnZlcnREaXN0YW5jZSAgICAgICAgIFhtTnRvcE9mZnNldAorI2RlZmluZSBOaG9yaXpEaXN0YW5jZSAgICAgICAgWG1ObGVmdE9mZnNldAorI2RlZmluZSBOdG9nZ2xlU3RhdGUgICAgICAgICAgWG1Oc2V0CisjZGVmaW5lIE1lbnVXaWRnZXQgICAgICAgICAgICBXaWRnZXQKKyNlbGlmIGRlZmluZWQoVVNFX1dJTkRPV1MpCisjZGVmaW5lIFdpZGdldCAgICAgICAgICAgICAgICBIV05ECisjZGVmaW5lIE1lbnVXaWRnZXQgICAgICAgICAgICBITUVOVQorI2RlZmluZSBDcmVhdGVQb3B1cE1lbnUodGl0bGUsIHRvcGxldmVsKSBcCisJQ3JlYXRlUG9wdXBNZW51KCkKKyNkZWZpbmUgQWRkTWVudVNlcGFyYXRvcih0aXRsZSwgbWVudSkgXAorCUFwcGVuZE1lbnUobWVudSwgTUZfU0VQQVJBVE9SLCAwLCBOVUxMKQorI2RlZmluZSBBZGRNZW51TGFiZWwodGl0bGUsIG1lbnUpIFwKKwlBcHBlbmRNZW51KG1lbnUsIE1GX1NUUklORyB8IE1GX0RJU0FCTEVELCAwLCB0aXRsZSkKKyNkZWZpbmUgQWRkTWVudVJhZGlvKHRpdGxlLCBtZW51LCBjYiwgY2hlY2spIFwKKwlBcHBlbmRNZW51KG1lbnUsIE1GX1NUUklORyB8IChjaGVjaz9NRl9DSEVDS0VEOjApLCBjYiwgdGl0bGUpCisjZGVmaW5lIENIUlggMTYKKyNkZWZpbmUgQ0hSWSAyMAorI2RlZmluZSBSSUdIVE1BUkdJTiAxMDAKKyNlbHNlIC8qIFVTRV8gKi8KKyNlcnJvciBHVUkgdG9vbGtpdCBwYXJhZGlnbSBlaXRoZXIgdW5zcGVjaWZpZWQgb3IgdW5zdXBwb3J0ZWQKKyNlbmRpZiAvKiBVU0VfICovCisKK3R5cGVkZWYgZW51bSB7CisgIFBBUk1fVEtQQVJNUywKKyAgUEFSTV9MSU5FUywKKyAgUEFSTV9DT0xVTU5TLAorICBQQVJNX01PREVMLAorICBQQVJNX0lOUFVULAorICBQQVJNX0ZPTlQKK30gRHJpdmVyUGFyYW1ldGVyOworI2RlZmluZSBCUkxQQVJNUyAidGtwYXJtcyIsICJsaW5lcyIsICJjb2x1bW5zIiwgIm1vZGVsIiwgImlucHV0IiwgImZvbnQiCisKKyNpbmNsdWRlICJicmxfZHJpdmVyLmgiCisjaW5jbHVkZSAiYnJhaWxsZS5oIgorCisjZGVmaW5lIE1BWExJTkVTIDMKKyNkZWZpbmUgTUFYQ09MUyA4OAorI2RlZmluZSBXSE9MRVNJWkUgKE1BWExJTkVTICogTUFYQ09MUykKK3N0YXRpYyBpbnQgY29scyxsaW5lczsKK3N0YXRpYyBpbnQgaW5wdXQ7CitzdGF0aWMgY29uc3QgY2hhciAqbW9kZWwgPSAic2ltcGxlIjsKK3N0YXRpYyBjb25zdCBjaGFyICpmb250bmFtZSA9ICItKi1jbGVhcmx5dS0qLSotKi0qLSotKi0qLSotKi0qLWlzbzEwNjQ2LTEsLSotZml4ZWQtKi0qLSotKi0qLSotKi0qLSotKi1pc28xMDY0Ni0xLC0qLXVuaWZvbnQtKi0qLSotKi0qLSotKi0qLSotKi1pc28xMDY0Ni0xLC0qLWZpeGVkLSotKi0qLSotKi0qLSotKi0qLSotaXNvODg1OS0xIjsKK3N0YXRpYyBpbnQgeHRBcmdjID0gMTsKK3N0YXRpYyBjaGFyICp4dERlZkFyZ3ZbXT0geyAiYnJsdHR5IiwgTlVMTCB9Oworc3RhdGljIGNoYXIgKip4dEFyZ3YgPSB4dERlZkFyZ3Y7CitzdGF0aWMgaW50IHJlZ2VuZXJhdGU7CitzdGF0aWMgaW50IGdlbmVyYXRlVG9wbGV2ZWwodm9pZCk7CitzdGF0aWMgdm9pZCBkZXN0cm95VG9wbGV2ZWwodm9pZCk7CisjaWYgZGVmaW5lZChVU0VfWEFXKSB8fCBkZWZpbmVkKFVTRV9XSU5ET1dTKQorc3RhdGljIHVuc2lnbmVkIGNoYXIgZGlzcGxheWVkV2luZG93W1dIT0xFU0laRV07CisjZW5kaWYgLyogVVNFX1hBVyB8fCBVU0VfV0lORE9XUyAqLworc3RhdGljIHdjaGFyX3QgZGlzcGxheWVkVmlzdWFsW1dIT0xFU0laRV07CisKKyNkZWZpbmUgQlVUV0lEVEggNDgKKyNkZWZpbmUgQlVUSEVJR0hUIDMyCisKK3N0YXRpYyBXaWRnZXQgdG9wbGV2ZWwsaGJveCxkaXNwbGF5W1dIT0xFU0laRV07CitzdGF0aWMgTWVudVdpZGdldCBtZW51OworI2lmIGRlZmluZWQoVVNFX1hBVykgfHwgZGVmaW5lZChVU0VfV0lORE9XUykKK3N0YXRpYyBXaWRnZXQgZGlzcGxheWJbV0hPTEVTSVpFXTsKKyNlbmRpZiAvKiBVU0VfWEFXIHx8IFVTRV9XSU5ET1dTICovCisjaWZkZWYgVVNFX1hBVworc3RhdGljIFBpeG1hcCBjaGVjazsKKyNlbmRpZiAvKiBVU0VfWEFXICovCitzdGF0aWMgaW50IGxhc3RjdXJzb3IgPSBCUkxfTk9fQ1VSU09SOworI2lmZGVmIFVTRV9YVAorc3RhdGljIEF0b20gd21fZGVsZXRlX3dpbmRvdzsKK3N0YXRpYyBXaWRnZXQgdmJveCxrZXlib3g7CitzdGF0aWMgUGl4ZWwgZGlzcGxheUZvcmVncm91bmQsZGlzcGxheUJhY2tncm91bmQ7CitzdGF0aWMgWHRBcHBDb250ZXh0IGFwcF9jb247CisjaWZkZWYgVVNFX1hNCitzdGF0aWMgWG1TdHJpbmcgZGlzcGxheV9jczsKKyNlbmRpZiAvKiBVU0VfWEFXICovCisjZW5kaWYgLyogVVNFX1hUICovCisjaWZkZWYgVVNFX1hBVworc3RhdGljIFhGb250U2V0IGZvbnRzZXQ7CisjZWxpZiBkZWZpbmVkKFVTRV9XSU5ET1dTKQorc3RhdGljIEhGT05UIGZvbnQ7CitzdGF0aWMgaW50IHRvdGxpbmVzOworI2VuZGlmIC8qIFVTRV9XSU5ET1dTICovCisKKyNpZmRlZiBVU0VfV0lORE9XUworc3RhdGljIGludCBtb2RlbFdpZHRoLG1vZGVsSGVpZ2h0OworI2VuZGlmIC8qIFVTRV9XSU5ET1dTICovCisKKyNpZmRlZiBVU0VfWFQKK3N0YXRpYyB2b2lkIEtleVByZXNzQ0IoV2lkZ2V0IHcsIFh0UG9pbnRlciBjbG9zdXJlLCBYdFBvaW50ZXIgY2FsbERhdGEpCit7CisgIGxvZ01lc3NhZ2UoTE9HX0RFQlVHLCJrZXlwcmVzc2NiKCVwKSIsIGNsb3N1cmUpOworICBlbnF1ZXVlQ29tbWFuZCgobG9uZykgY2xvc3VyZSk7Cit9CisKK3N0YXRpYyB2b2lkIGtleXByZXNzKFdpZGdldCB3LCBYRXZlbnQgKmV2ZW50LCBTdHJpbmcgKnBhcmFtcywgQ2FyZGluYWwgKm51bV9wYXJhbXMpIHsKKyAgc3RhdGljIE1vZGlmaWVycyBteV9tb2RpZmllcnM7CisgIGxvbmcga2V5cHJlc3NlZDsKKyAgTW9kaWZpZXJzIG1vZGlmaWVycywgbW9kaWZpZXI7CisgIEtleVN5bSBrZXlzeW07CisKKyAgaWYgKGV2ZW50LT50eXBlICE9IEtleVByZXNzICYmIGV2ZW50LT50eXBlICE9IEtleVJlbGVhc2UpIHsKKyAgICBsb2dNZXNzYWdlKExPR19FUlIsImtleXByZXNzIGlzIG5vdCBhIEtleVByZXNzIik7CisgICAgcmV0dXJuOworICB9CisgIGtleXN5bSA9IFh0R2V0QWN0aW9uS2V5c3ltKGV2ZW50LCAmbW9kaWZpZXJzKTsKKyAgbW9kaWZpZXJzIHw9IG15X21vZGlmaWVyczsKKyAgbG9nTWVzc2FnZShMT0dfREVCVUcsImtleXByZXNzKCUjbHgpLCBtb2RpZiglI3gpIiwga2V5c3ltLCBtb2RpZmllcnMpOworCisgIC8qIGxhdGluMSAqLworICBpZiAoa2V5c3ltIDwgMHgxMDApIGtleXN5bSB8PSAweDEwMDAwMDA7CisKKyAgaWYgKChrZXlzeW0gJiAweDFmMDAwMDAwKSA9PSAweDEwMDAwMDApIHsKKyAgICAvKiB1bmljb2RlICovCisgICAgaWYgKChrZXlzeW0gJiB+VU5JQ09ERV9DRUxMX01BU0spID09IFVOSUNPREVfQlJBSUxMRV9ST1cpCisgICAgICBrZXlwcmVzc2VkID0gQlJMX0NNRF9CTEsoUEFTU0RPVFMpIHwgKGtleXN5bSAmIDB4ZmYpOworICAgIGVsc2UgeworICAgICAgaW50IGMgPSBjb252ZXJ0V2NoYXJUb0NoYXIoa2V5c3ltICYgMHhmZmZmZmYpOworICAgICAgaWYgKGMgPT0gRU9GKSB7CisJbG9nTWVzc2FnZShMT0dfREVCVUcsICJub24gdHJhbnNsYXRhYmxlIHVuaWNvZGUgVSslbHgiLCBrZXlzeW0gJiAweGZmZmZmZik7CisJcmV0dXJuOworICAgICAgfQorICAgICAga2V5cHJlc3NlZCA9IEJSTF9DTURfQkxLKFBBU1NDSEFSKSB8IGM7CisgICAgfQorICB9CisgIGVsc2Ugc3dpdGNoKGtleXN5bSkgeworICAgIGNhc2UgWEtfU2hpZnRfTDoKKyAgICBjYXNlIFhLX1NoaWZ0X1I6ICAgbW9kaWZpZXIgPSBTaGlmdE1hc2s7ICAgZ290byBtb2RpZjsKKyAgICBjYXNlIFhLX0NvbnRyb2xfTDoKKyAgICBjYXNlIFhLX0NvbnRyb2xfUjogbW9kaWZpZXIgPSBDb250cm9sTWFzazsgZ290byBtb2RpZjsKKyAgICBjYXNlIFhLX0FsdF9MOgorICAgIGNhc2UgWEtfQWx0X1I6CisgICAgY2FzZSBYS19NZXRhX0w6CisgICAgY2FzZSBYS19NZXRhX1I6ICAgIG1vZGlmaWVyID0gTW9kMU1hc2s7ICAgIGdvdG8gbW9kaWY7CisgICAgY2FzZSBYS19LUF9FbnRlcjoKKyAgICBjYXNlIFhLX1JldHVybjogICAgICAga2V5cHJlc3NlZCA9IEJSTF9DTURfQkxLKFBBU1NLRVkpIHwgQlJMX0tFWV9FTlRFUjsgICAgICAgICAgIGJyZWFrOworICAgIGNhc2UgWEtfS1BfVGFiOgorICAgIGNhc2UgWEtfVGFiOiAgICAgICAgICBrZXlwcmVzc2VkID0gQlJMX0NNRF9CTEsoUEFTU0tFWSkgfCBCUkxfS0VZX1RBQjsgICAgICAgICAgICAgYnJlYWs7CisgICAgY2FzZSBYS19CYWNrU3BhY2U6ICAgIGtleXByZXNzZWQgPSBCUkxfQ01EX0JMSyhQQVNTS0VZKSB8IEJSTF9LRVlfQkFDS1NQQUNFOyAgICAgICBicmVhazsKKyAgICBjYXNlIFhLX0VzY2FwZTogICAgICAga2V5cHJlc3NlZCA9IEJSTF9DTURfQkxLKFBBU1NLRVkpIHwgQlJMX0tFWV9FU0NBUEU7ICAgICAgICAgIGJyZWFrOworICAgIGNhc2UgWEtfS1BfTGVmdDoKKyAgICBjYXNlIFhLX0xlZnQ6ICAgICAgICAga2V5cHJlc3NlZCA9IEJSTF9DTURfQkxLKFBBU1NLRVkpIHwgQlJMX0tFWV9DVVJTT1JfTEVGVDsgICAgIGJyZWFrOworICAgIGNhc2UgWEtfS1BfUmlnaHQ6CisgICAgY2FzZSBYS19SaWdodDogICAgICAgIGtleXByZXNzZWQgPSBCUkxfQ01EX0JMSyhQQVNTS0VZKSB8IEJSTF9LRVlfQ1VSU09SX1JJR0hUOyAgICBicmVhazsKKyAgICBjYXNlIFhLX0tQX1VwOgorICAgIGNhc2UgWEtfVXA6ICAgICAgICAgICBrZXlwcmVzc2VkID0gQlJMX0NNRF9CTEsoUEFTU0tFWSkgfCBCUkxfS0VZX0NVUlNPUl9VUDsgICAgICAgYnJlYWs7CisgICAgY2FzZSBYS19LUF9Eb3duOgorICAgIGNhc2UgWEtfRG93bjogICAgICAgICBrZXlwcmVzc2VkID0gQlJMX0NNRF9CTEsoUEFTU0tFWSkgfCBCUkxfS0VZX0NVUlNPUl9ET1dOOyAgICAgYnJlYWs7CisgICAgY2FzZSBYS19LUF9QYWdlX1VwOgorICAgIGNhc2UgWEtfUGFnZV9VcDogICAgICBrZXlwcmVzc2VkID0gQlJMX0NNRF9CTEsoUEFTU0tFWSkgfCBCUkxfS0VZX1BBR0VfVVA7ICAgICAgICAgYnJlYWs7CisgICAgY2FzZSBYS19LUF9QYWdlX0Rvd246CisgICAgY2FzZSBYS19QYWdlX0Rvd246ICAgIGtleXByZXNzZWQgPSBCUkxfQ01EX0JMSyhQQVNTS0VZKSB8IEJSTF9LRVlfUEFHRV9ET1dOOyAgICAgICBicmVhazsKKyAgICBjYXNlIFhLX0tQX0hvbWU6CisgICAgY2FzZSBYS19Ib21lOiAgICAgICAgIGtleXByZXNzZWQgPSBCUkxfQ01EX0JMSyhQQVNTS0VZKSB8IEJSTF9LRVlfSE9NRTsgICAgICAgICAgICBicmVhazsKKyAgICBjYXNlIFhLX0tQX0VuZDoKKyAgICBjYXNlIFhLX0VuZDogICAgICAgICAga2V5cHJlc3NlZCA9IEJSTF9DTURfQkxLKFBBU1NLRVkpIHwgQlJMX0tFWV9FTkQ7ICAgICAgICAgICAgIGJyZWFrOworICAgIGNhc2UgWEtfS1BfSW5zZXJ0OgorICAgIGNhc2UgWEtfSW5zZXJ0OiAgICAgICBrZXlwcmVzc2VkID0gQlJMX0NNRF9CTEsoUEFTU0tFWSkgfCBCUkxfS0VZX0lOU0VSVDsgICAgICAgICAgYnJlYWs7CisgICAgY2FzZSBYS19LUF9EZWxldGU6CisgICAgY2FzZSBYS19EZWxldGU6ICAgICAgIGtleXByZXNzZWQgPSBCUkxfQ01EX0JMSyhQQVNTS0VZKSB8IEJSTF9LRVlfREVMRVRFOyAgICAgICAgICBicmVhazsKKyAgICBjYXNlIFhLX0tQX0YxOgorICAgIGNhc2UgWEtfRjE6ICAgICAgICAgICBrZXlwcmVzc2VkID0gQlJMX0NNRF9CTEsoUEFTU0tFWSkgfCAoQlJMX0tFWV9GVU5DVElPTiArICAwKTsgYnJlYWs7CisgICAgY2FzZSBYS19LUF9GMjoKKyAgICBjYXNlIFhLX0YyOiAgICAgICAgICAga2V5cHJlc3NlZCA9IEJSTF9DTURfQkxLKFBBU1NLRVkpIHwgKEJSTF9LRVlfRlVOQ1RJT04gKyAgMSk7IGJyZWFrOworICAgIGNhc2UgWEtfS1BfRjM6CisgICAgY2FzZSBYS19GMzogICAgICAgICAgIGtleXByZXNzZWQgPSBCUkxfQ01EX0JMSyhQQVNTS0VZKSB8IChCUkxfS0VZX0ZVTkNUSU9OICsgIDIpOyBicmVhazsKKyAgICBjYXNlIFhLX0tQX0Y0OgorICAgIGNhc2UgWEtfRjQ6ICAgICAgICAgICBrZXlwcmVzc2VkID0gQlJMX0NNRF9CTEsoUEFTU0tFWSkgfCAoQlJMX0tFWV9GVU5DVElPTiArICAzKTsgYnJlYWs7CisgICAgY2FzZSBYS19GNTogICAgICAgICAgIGtleXByZXNzZWQgPSBCUkxfQ01EX0JMSyhQQVNTS0VZKSB8IChCUkxfS0VZX0ZVTkNUSU9OICsgIDQpOyBicmVhazsKKyAgICBjYXNlIFhLX0Y2OiAgICAgICAgICAga2V5cHJlc3NlZCA9IEJSTF9DTURfQkxLKFBBU1NLRVkpIHwgKEJSTF9LRVlfRlVOQ1RJT04gKyAgNSk7IGJyZWFrOworICAgIGNhc2UgWEtfRjc6ICAgICAgICAgICBrZXlwcmVzc2VkID0gQlJMX0NNRF9CTEsoUEFTU0tFWSkgfCAoQlJMX0tFWV9GVU5DVElPTiArICA2KTsgYnJlYWs7CisgICAgY2FzZSBYS19GODogICAgICAgICAgIGtleXByZXNzZWQgPSBCUkxfQ01EX0JMSyhQQVNTS0VZKSB8IChCUkxfS0VZX0ZVTkNUSU9OICsgIDcpOyBicmVhazsKKyAgICBjYXNlIFhLX0Y5OiAgICAgICAgICAga2V5cHJlc3NlZCA9IEJSTF9DTURfQkxLKFBBU1NLRVkpIHwgKEJSTF9LRVlfRlVOQ1RJT04gKyAgOCk7IGJyZWFrOworICAgIGNhc2UgWEtfRjEwOiAgICAgICAgICBrZXlwcmVzc2VkID0gQlJMX0NNRF9CTEsoUEFTU0tFWSkgfCAoQlJMX0tFWV9GVU5DVElPTiArICA5KTsgYnJlYWs7CisgICAgY2FzZSBYS19GMTE6ICAgICAgICAgIGtleXByZXNzZWQgPSBCUkxfQ01EX0JMSyhQQVNTS0VZKSB8IChCUkxfS0VZX0ZVTkNUSU9OICsgMTApOyBicmVhazsKKyAgICBjYXNlIFhLX0YxMjogICAgICAgICAga2V5cHJlc3NlZCA9IEJSTF9DTURfQkxLKFBBU1NLRVkpIHwgKEJSTF9LRVlfRlVOQ1RJT04gKyAxMSk7IGJyZWFrOworICAgIGNhc2UgWEtfRjEzOiAgICAgICAgICBrZXlwcmVzc2VkID0gQlJMX0NNRF9CTEsoUEFTU0tFWSkgfCAoQlJMX0tFWV9GVU5DVElPTiArIDEyKTsgYnJlYWs7CisgICAgY2FzZSBYS19GMTQ6ICAgICAgICAgIGtleXByZXNzZWQgPSBCUkxfQ01EX0JMSyhQQVNTS0VZKSB8IChCUkxfS0VZX0ZVTkNUSU9OICsgMTMpOyBicmVhazsKKyAgICBjYXNlIFhLX0YxNTogICAgICAgICAga2V5cHJlc3NlZCA9IEJSTF9DTURfQkxLKFBBU1NLRVkpIHwgKEJSTF9LRVlfRlVOQ1RJT04gKyAxNCk7IGJyZWFrOworICAgIGNhc2UgWEtfRjE2OiAgICAgICAgICBrZXlwcmVzc2VkID0gQlJMX0NNRF9CTEsoUEFTU0tFWSkgfCAoQlJMX0tFWV9GVU5DVElPTiArIDE1KTsgYnJlYWs7CisgICAgY2FzZSBYS19GMTc6ICAgICAgICAgIGtleXByZXNzZWQgPSBCUkxfQ01EX0JMSyhQQVNTS0VZKSB8IChCUkxfS0VZX0ZVTkNUSU9OICsgMTYpOyBicmVhazsKKyAgICBjYXNlIFhLX0YxODogICAgICAgICAga2V5cHJlc3NlZCA9IEJSTF9DTURfQkxLKFBBU1NLRVkpIHwgKEJSTF9LRVlfRlVOQ1RJT04gKyAxNyk7IGJyZWFrOworICAgIGNhc2UgWEtfRjE5OiAgICAgICAgICBrZXlwcmVzc2VkID0gQlJMX0NNRF9CTEsoUEFTU0tFWSkgfCAoQlJMX0tFWV9GVU5DVElPTiArIDE4KTsgYnJlYWs7CisgICAgY2FzZSBYS19GMjA6ICAgICAgICAgIGtleXByZXNzZWQgPSBCUkxfQ01EX0JMSyhQQVNTS0VZKSB8IChCUkxfS0VZX0ZVTkNUSU9OICsgMTkpOyBicmVhazsKKyAgICBjYXNlIFhLX0YyMTogICAgICAgICAga2V5cHJlc3NlZCA9IEJSTF9DTURfQkxLKFBBU1NLRVkpIHwgKEJSTF9LRVlfRlVOQ1RJT04gKyAyMCk7IGJyZWFrOworICAgIGNhc2UgWEtfRjIyOiAgICAgICAgICBrZXlwcmVzc2VkID0gQlJMX0NNRF9CTEsoUEFTU0tFWSkgfCAoQlJMX0tFWV9GVU5DVElPTiArIDIxKTsgYnJlYWs7CisgICAgY2FzZSBYS19GMjM6ICAgICAgICAgIGtleXByZXNzZWQgPSBCUkxfQ01EX0JMSyhQQVNTS0VZKSB8IChCUkxfS0VZX0ZVTkNUSU9OICsgMjIpOyBicmVhazsKKyAgICBjYXNlIFhLX0YyNDogICAgICAgICAga2V5cHJlc3NlZCA9IEJSTF9DTURfQkxLKFBBU1NLRVkpIHwgKEJSTF9LRVlfRlVOQ1RJT04gKyAyMyk7IGJyZWFrOworICAgIGNhc2UgWEtfRjI1OiAgICAgICAgICBrZXlwcmVzc2VkID0gQlJMX0NNRF9CTEsoUEFTU0tFWSkgfCAoQlJMX0tFWV9GVU5DVElPTiArIDI0KTsgYnJlYWs7CisgICAgY2FzZSBYS19GMjY6ICAgICAgICAgIGtleXByZXNzZWQgPSBCUkxfQ01EX0JMSyhQQVNTS0VZKSB8IChCUkxfS0VZX0ZVTkNUSU9OICsgMjUpOyBicmVhazsKKyAgICBjYXNlIFhLX0YyNzogICAgICAgICAga2V5cHJlc3NlZCA9IEJSTF9DTURfQkxLKFBBU1NLRVkpIHwgKEJSTF9LRVlfRlVOQ1RJT04gKyAyNik7IGJyZWFrOworICAgIGNhc2UgWEtfRjI4OiAgICAgICAgICBrZXlwcmVzc2VkID0gQlJMX0NNRF9CTEsoUEFTU0tFWSkgfCAoQlJMX0tFWV9GVU5DVElPTiArIDI3KTsgYnJlYWs7CisgICAgY2FzZSBYS19GMjk6ICAgICAgICAgIGtleXByZXNzZWQgPSBCUkxfQ01EX0JMSyhQQVNTS0VZKSB8IChCUkxfS0VZX0ZVTkNUSU9OICsgMjgpOyBicmVhazsKKyAgICBjYXNlIFhLX0YzMDogICAgICAgICAga2V5cHJlc3NlZCA9IEJSTF9DTURfQkxLKFBBU1NLRVkpIHwgKEJSTF9LRVlfRlVOQ1RJT04gKyAyOSk7IGJyZWFrOworICAgIGNhc2UgWEtfRjMxOiAgICAgICAgICBrZXlwcmVzc2VkID0gQlJMX0NNRF9CTEsoUEFTU0tFWSkgfCAoQlJMX0tFWV9GVU5DVElPTiArIDMwKTsgYnJlYWs7CisgICAgY2FzZSBYS19GMzI6ICAgICAgICAgIGtleXByZXNzZWQgPSBCUkxfQ01EX0JMSyhQQVNTS0VZKSB8IChCUkxfS0VZX0ZVTkNUSU9OICsgMzEpOyBicmVhazsKKyAgICBjYXNlIFhLX0YzMzogICAgICAgICAga2V5cHJlc3NlZCA9IEJSTF9DTURfQkxLKFBBU1NLRVkpIHwgKEJSTF9LRVlfRlVOQ1RJT04gKyAzMik7IGJyZWFrOworICAgIGNhc2UgWEtfRjM0OiAgICAgICAgICBrZXlwcmVzc2VkID0gQlJMX0NNRF9CTEsoUEFTU0tFWSkgfCAoQlJMX0tFWV9GVU5DVElPTiArIDMzKTsgYnJlYWs7CisgICAgY2FzZSBYS19GMzU6ICAgICAgICAgIGtleXByZXNzZWQgPSBCUkxfQ01EX0JMSyhQQVNTS0VZKSB8IChCUkxfS0VZX0ZVTkNUSU9OICsgMzQpOyBicmVhazsKKyAgICBjYXNlIFhLX0tQX1NwYWNlOiAgICAga2V5cHJlc3NlZCA9IEJSTF9DTURfQkxLKFBBU1NDSEFSKSB8ICcgJzsgYnJlYWs7CisgICAgY2FzZSBYS19LUF9FcXVhbDogICAgIGtleXByZXNzZWQgPSBCUkxfQ01EX0JMSyhQQVNTQ0hBUikgfCAnPSc7IGJyZWFrOworICAgIGNhc2UgWEtfS1BfTXVsdGlwbHk6ICBrZXlwcmVzc2VkID0gQlJMX0NNRF9CTEsoUEFTU0NIQVIpIHwgJyonOyBicmVhazsKKyAgICBjYXNlIFhLX0tQX0FkZDogICAgICAga2V5cHJlc3NlZCA9IEJSTF9DTURfQkxLKFBBU1NDSEFSKSB8ICcrJzsgYnJlYWs7CisgICAgY2FzZSBYS19LUF9TZXBhcmF0b3I6IGtleXByZXNzZWQgPSBCUkxfQ01EX0JMSyhQQVNTQ0hBUikgfCAnLCc7IGJyZWFrOworICAgIGNhc2UgWEtfS1BfU3VidHJhY3Q6ICBrZXlwcmVzc2VkID0gQlJMX0NNRF9CTEsoUEFTU0NIQVIpIHwgJy0nOyBicmVhazsKKyAgICBjYXNlIFhLX0tQX0RlY2ltYWw6ICAga2V5cHJlc3NlZCA9IEJSTF9DTURfQkxLKFBBU1NDSEFSKSB8ICcuJzsgYnJlYWs7CisgICAgY2FzZSBYS19LUF9EaXZpZGU6ICAgIGtleXByZXNzZWQgPSBCUkxfQ01EX0JMSyhQQVNTQ0hBUikgfCAnLyc7IGJyZWFrOworICAgIGNhc2UgWEtfS1BfMDogICAgICAgICBrZXlwcmVzc2VkID0gQlJMX0NNRF9CTEsoUEFTU0NIQVIpIHwgJzAnOyBicmVhazsKKyAgICBjYXNlIFhLX0tQXzE6ICAgICAgICAga2V5cHJlc3NlZCA9IEJSTF9DTURfQkxLKFBBU1NDSEFSKSB8ICcxJzsgYnJlYWs7CisgICAgY2FzZSBYS19LUF8yOiAgICAgICAgIGtleXByZXNzZWQgPSBCUkxfQ01EX0JMSyhQQVNTQ0hBUikgfCAnMic7IGJyZWFrOworICAgIGNhc2UgWEtfS1BfMzogICAgICAgICBrZXlwcmVzc2VkID0gQlJMX0NNRF9CTEsoUEFTU0NIQVIpIHwgJzMnOyBicmVhazsKKyAgICBjYXNlIFhLX0tQXzQ6ICAgICAgICAga2V5cHJlc3NlZCA9IEJSTF9DTURfQkxLKFBBU1NDSEFSKSB8ICc0JzsgYnJlYWs7CisgICAgY2FzZSBYS19LUF81OiAgICAgICAgIGtleXByZXNzZWQgPSBCUkxfQ01EX0JMSyhQQVNTQ0hBUikgfCAnNSc7IGJyZWFrOworICAgIGNhc2UgWEtfS1BfNjogICAgICAgICBrZXlwcmVzc2VkID0gQlJMX0NNRF9CTEsoUEFTU0NIQVIpIHwgJzYnOyBicmVhazsKKyAgICBjYXNlIFhLX0tQXzc6ICAgICAgICAga2V5cHJlc3NlZCA9IEJSTF9DTURfQkxLKFBBU1NDSEFSKSB8ICc3JzsgYnJlYWs7CisgICAgY2FzZSBYS19LUF84OiAgICAgICAgIGtleXByZXNzZWQgPSBCUkxfQ01EX0JMSyhQQVNTQ0hBUikgfCAnOCc7IGJyZWFrOworICAgIGNhc2UgWEtfS1BfOTogICAgICAgICBrZXlwcmVzc2VkID0gQlJMX0NNRF9CTEsoUEFTU0NIQVIpIHwgJzknOyBicmVhazsKKyAgICBkZWZhdWx0OiBsb2dNZXNzYWdlKExPR19ERUJVRywidW5zdXBwb3J0ZWQga2V5c3ltICVseCIsa2V5c3ltKTsgcmV0dXJuOworICB9CisKKyAgaWYgKG1vZGlmaWVycyAmIENvbnRyb2xNYXNrKSBrZXlwcmVzc2VkIHw9IEJSTF9GTEdfSU5QVVRfQ09OVFJPTDsKKyAgaWYgKG1vZGlmaWVycyAmIE1vZDFNYXNrKSBrZXlwcmVzc2VkIHw9IEJSTF9GTEdfSU5QVVRfTUVUQTsKKyAgaWYgKG1vZGlmaWVycyAmIFNoaWZ0TWFzaykga2V5cHJlc3NlZCB8PSBCUkxfRkxHX0lOUFVUX1NISUZUOworICBpZiAobW9kaWZpZXJzICYgTG9ja01hc2spIGtleXByZXNzZWQgfD0gQlJMX0ZMR19JTlBVVF9VUFBFUjsKKyAgaWYgKGV2ZW50LT50eXBlICE9IEtleVByZXNzKSBrZXlwcmVzc2VkID0gQlJMX0NNRF9OT09QOworCisgIGxvZ01lc3NhZ2UoTE9HX0RFQlVHLCJrZXlwcmVzc2VkICUjbHgiLCBrZXlwcmVzc2VkKTsKKyAgZW5xdWV1ZUNvbW1hbmQoa2V5cHJlc3NlZCk7CisgIHJldHVybjsKKworbW9kaWY6CisgIGxvZ01lc3NhZ2UoTE9HX0RFQlVHLCJtb2RpZmllciAlI3giLCBtb2RpZmllcik7CisgIGlmIChldmVudC0+dHlwZSA9PSBLZXlQcmVzcykKKyAgICBteV9tb2RpZmllcnMgfD0gbW9kaWZpZXI7CisgIGVsc2UKKyAgICBteV9tb2RpZmllcnMgJj0gfm1vZGlmaWVyOworfQorCitzdGF0aWMgdm9pZCByb3V0ZShXaWRnZXQgdywgWEV2ZW50ICpldmVudCwgU3RyaW5nICpwYXJhbXMsIENhcmRpbmFsICpudW1fcGFyYW1zKQoreworICBpbnQgaW5kZXggPSBhdG9pKHBhcmFtc1swXSk7CisgIGxvZ01lc3NhZ2UoTE9HX0RFQlVHLCJyb3V0ZSgldSkiLCBpbmRleCk7CisKKyAgaWYgKGV2ZW50LT54YnV0dG9uLnN0YXRlICYgQ29udHJvbE1hc2spIHsKKyAgICBlbnF1ZXVlQ29tbWFuZChCUkxfQ01EX0JMSyhDTElQX05FVykgfCAoaW5kZXgmQlJMX01TS19BUkcpKTsKKyAgfSBlbHNlIGlmIChldmVudC0+eGJ1dHRvbi5zdGF0ZSAmIE1vZDFNYXNrKSB7CisgICAgZW5xdWV1ZUNvbW1hbmQoQlJMX0NNRF9CTEsoQ09QWV9MSU5FKSB8IChpbmRleCZCUkxfTVNLX0FSRykpOworICB9IGVsc2UgeworICAgIGVucXVldWVDb21tYW5kKEJSTF9DTURfQkxLKFJPVVRFKSB8IChpbmRleCZCUkxfTVNLX0FSRykpOworICB9Cit9CisKK3N0YXRpYyB2b2lkIHF1aXQoV2lkZ2V0IHcsIFhFdmVudCAqZXZlbnQsIFN0cmluZyAqcGFyYW1zLCBDYXJkaW5hbCAqbnVtX3BhcmFtcykKK3sKKyAgWHRBcHBTZXRFeGl0RmxhZyhhcHBfY29uKTsKK30KKyNlbmRpZiAvKiBVU0VfWFQgKi8KKworc3RhdGljIGlubGluZSBXaWRnZXQgY3JLZXlCdXQoY2hhciAqbmFtZSwgbG9uZyBrZXljb2RlLCBpbnQgcmVwZWF0LAorICAgIGludCBob3JpekRpc3RhbmNlLCBpbnQgdmVydERpc3RhbmNlKQoreworICBXaWRnZXQgYnV0dG9uOworI2lmIGRlZmluZWQoVVNFX1hUKQorICBidXR0b24gPSBYdFZhQ3JlYXRlTWFuYWdlZFdpZGdldChuYW1lLAorICAgIHJlcGVhdD9yZXBlYXRlcldpZGdldENsYXNzOmNvbW1hbmRXaWRnZXRDbGFzcywga2V5Ym94LAorICAgIFh0TndpZHRoLCBCVVRXSURUSCwgWHROaGVpZ2h0LCBCVVRIRUlHSFQsCisjaWZkZWYgVVNFX1hBVworICAgIFh0TmluaXRpYWxEZWxheSwgNTAwLCBYdE5taW5pbXVtRGVsYXksIDEwMCwKKyNlbmRpZiAvKiBVU0VfWEFXICovCisgICAgTmhvcml6RGlzdGFuY2UsIGhvcml6RGlzdGFuY2UsCisgICAgTnZlcnREaXN0YW5jZSwgdmVydERpc3RhbmNlLAorICAgIE50b3AsIENoYWluVG9wLAorICAgIE5ib3R0b20sIENoYWluQm90dG9tLAorICAgIE5sZWZ0LCBDaGFpbkxlZnQsCisgICAgTnJpZ2h0LCBDaGFpblJpZ2h0LAorICAgIE5VTEwpOworICBYdEFkZENhbGxiYWNrKGJ1dHRvbiwgTmNhbGxiYWNrLCBLZXlQcmVzc0NCLCAoWHRQb2ludGVyKSBrZXljb2RlKTsKKyNlbGlmIGRlZmluZWQoVVNFX1dJTkRPV1MpCisgIGJ1dHRvbiA9IENyZWF0ZVdpbmRvdyhXQ19CVVRUT04sIG5hbWUsIFdTX0NISUxEIHwgV1NfVklTSUJMRSwgaG9yaXpEaXN0YW5jZSwgdG90bGluZXMqQ0hSWSsxK3ZlcnREaXN0YW5jZSwgQlVUV0lEVEgsIEJVVEhFSUdIVCwgdG9wbGV2ZWwsIE5VTEwsIE5VTEwsIE5VTEwpOworICBTZXRXaW5kb3dMb25nUHRyKGJ1dHRvbiwgR1dMUF9VU0VSREFUQSwgKExPTkdfUFRSKSBrZXljb2RlKTsKKyNlbHNlIC8qIFVTRV8gKi8KKyNlcnJvciBUb29sa2l0IGJ1dHRvbiBjcmVhdGlvbiB1bnNwZWNpZmllZAorI2VuZGlmIC8qIFVTRV8gKi8KKyAgcmV0dXJuIGJ1dHRvbjsKK30KKworc3RydWN0IGJ1dHRvbiB7CisgIGNoYXIgKmxhYmVsOworICBsb25nIGtleWNvZGU7CisgIGludCByZXBlYXQ7CisgIGludCB4LHk7Cit9OworCitzdHJ1Y3QgbW9kZWwgeworICBjb25zdCBjaGFyICpuYW1lOworICBzdHJ1Y3QgYnV0dG9uICpidXR0b25zOworICBpbnQgd2lkdGgsaGVpZ2h0OworfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBtb2RlbCAqa2V5TW9kZWw7CisKK3N0YXRpYyBzdHJ1Y3QgYnV0dG9uIGJ1dHRvbnNfc2ltcGxlW10gPSB7CisgIHsgIkRvdDEiLCAgIEJSTF9DTURfQkxLKFBBU1NET1RTKSAgfCBCUkxfRE9UMSAgLCAwLCAwLCAwIH0sCisgIHsgIkRvdDIiLCAgIEJSTF9DTURfQkxLKFBBU1NET1RTKSAgfCBCUkxfRE9UMiAgLCAwLCAwLCAxIH0sCisgIHsgIkRvdDMiLCAgIEJSTF9DTURfQkxLKFBBU1NET1RTKSAgfCBCUkxfRE9UMyAgLCAwLCAwLCAyIH0sCisgIHsgIkRvdDQiLCAgIEJSTF9DTURfQkxLKFBBU1NET1RTKSAgfCBCUkxfRE9UNCAgLCAwLCAxLCAwIH0sCisgIHsgIkRvdDUiLCAgIEJSTF9DTURfQkxLKFBBU1NET1RTKSAgfCBCUkxfRE9UNSAgLCAwLCAxLCAxIH0sCisgIHsgIkRvdDYiLCAgIEJSTF9DTURfQkxLKFBBU1NET1RTKSAgfCBCUkxfRE9UNiAgLCAwLCAxLCAyIH0sCisgIHsgIkRvdDciLCAgIEJSTF9DTURfQkxLKFBBU1NET1RTKSAgfCBCUkxfRE9UNyAgLCAwLCAwLCAzIH0sCisgIHsgIkRvdDgiLCAgIEJSTF9DTURfQkxLKFBBU1NET1RTKSAgfCBCUkxfRE9UOCAgLCAwLCAxLCAzIH0sCisgIHsgImAiLCAgICAgIEJSTF9DTURfVE9QX0xFRlQsIDAsIDMsIDAgfSwKKyAgeyAiXiIsICAgICAgQlJMX0NNRF9MTlVQLCAgIDEsIDQsIDAgfSwKKyAgeyAiUGFzdGUiLCAgQlJMX0NNRF9QQVNURSwgIDAsIDUsIDAgfSwKKyAgeyAiPCIsICAgICAgQlJMX0NNRF9GV0lOTFQsIDEsIDMsIDEgfSwKKyAgeyAiSG9tZSIsICAgQlJMX0NNRF9IT01FLCAgIDAsIDQsIDEgfSwKKyAgeyAiPiIsICAgICAgQlJMX0NNRF9GV0lOUlQsIDEsIDUsIDEgfSwKKyAgeyAiPD0iLCAgICAgQlJMX0NNRF9GV0lOTFRTS0lQLCAwLCAzLCAyIH0sCisgIHsgInYiLCAgICAgIEJSTF9DTURfTE5ETiwgICAxLCA0LCAyIH0sCisgIHsgIj0+IiwgICAgIEJSTF9DTURfRldJTlJUU0tJUCwgMCwgNSwgMiB9LAorICB7ICJhbHQtYyIsICBCUkxfRkxHX0lOUFVUX01FVEEgICAgfCBCUkxfQ01EX0JMSyhQQVNTQ0hBUikgfCAnYycsIDAsIDMsIDMgfSwKKyAgeyAiY3RybC1jIiwgQlJMX0ZMR19JTlBVVF9DT05UUk9MIHwgQlJMX0NNRF9CTEsoUEFTU0NIQVIpIHwgJ2MnLCAwLCA0LCAzIH0sCisgIHsgImEiLCAgICAgIEJSTF9DTURfQkxLKFBBU1NDSEFSKSAgICAgICAgICAgICAgICAgICAgICAgIHwgJ2EnLCAwLCA1LCAzIH0sCisgIHsgIkEiLCAgICAgIEJSTF9DTURfQkxLKFBBU1NDSEFSKSAgICAgICAgICAgICAgICAgICAgICAgIHwgJ0EnLCAwLCA2LCAzIH0sCisgIHsgIkFsdC1GMSIsIEJSTF9GTEdfSU5QVVRfTUVUQSB8IEJSTF9LRVlfRlVOQ1RJT04gfCBCUkxfQ01EX0JMSyhQQVNTS0VZKSAsIDAsIDcsIDMgfSwKKyAgeyAiRnJleiIsICAgQlJMX0NNRF9GUkVFWkUsICAgMCwgNiwgMCB9LAorICB7ICJCa3NwIiwgICBCUkxfQ01EX0tFWShCQUNLU1BBQ0UpLCAgIDAsIDYsIDEgfSwKKyAgeyAiSGVscCIsICAgQlJMX0NNRF9IRUxQLCAgICAgMCwgNywgMCB9LAorICB7ICJQcmVmIiwgICBCUkxfQ01EX1BSRUZNRU5VLCAwLCA3LCAxIH0sCisgIHsgIlBMIiwgICAgIEJSTF9DTURfUFJFRkxPQUQsIDAsIDYsIDIgfSwKKyAgeyAiUFMiLCAgICAgQlJMX0NNRF9QUkVGU0FWRSwgMCwgNywgMiB9LAorICB7IE5VTEwsICAgICAwLCAgICAgICAgICAgICAgICAwLCAwLCAwfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgYnV0dG9uIGJ1dHRvbnNfdnNbXSA9IHsKKwkvKgorICB7ICJWVDEiLCAgQlJMX0NNRF9CTEsoU1dJVENIVlQpKzAsICAgMSwgMCwgMSB9LAorICB7ICJWVDIiLCAgQlJMX0NNRF9CTEsoU1dJVENIVlQpKzEsIDEsIDEsIDEgfSwKKyAgeyAiVlQzIiwgIEJSTF9DTURfQkxLKFNXSVRDSFZUKSsyLCAxLCAyLCAxIH0sCisgIHsgIlZUNCIsICBCUkxfQ01EX0JMSyhTV0lUQ0hWVCkrMywgMSwgNiwgMSB9LAorICB7ICJWVDUiLCAgQlJMX0NNRF9CTEsoU1dJVENIVlQpKzQsIDEsIDcsIDEgfSwKKyAgeyAiVlQ2IiwgIEJSTF9DTURfQkxLKFNXSVRDSFZUKSs1LCAxLCA4LCAxIH0sCisJKi8KKyAgLy97ICJCNSIsIEVPRiwgLyogY3V0ICovICAgICAgMSwgNSwgMiB9LAorICB7ICJUT1AiLCAgQlJMX0NNRF9UT1BfTEVGVCwgICAxLCA2LCAyIH0sCisgIHsgIkJPVCIsICBCUkxfQ01EX0JPVF9MRUZULCAgIDEsIDYsIDQgfSwKKyAgeyAiPD0iLCAgIEJSTF9DTURfRldJTkxUU0tJUCwgMSwgMSwgMCB9LAorICB7ICI8PSIsICAgQlJMX0NNRF9GV0lOTFRTS0lQLCAxLCA4LCAyIH0sCisgIHsgIj0+IiwgICBCUkxfQ01EX0ZXSU5SVFNLSVAsIDEsIDIsIDAgfSwKKyAgeyAiPT4iLCAgIEJSTF9DTURfRldJTlJUU0tJUCwgMSwgOCwgNCB9LAorICB7ICItXi0iLCAgQlJMX0NNRF9MTlVQLCAgICAgICAxLCA3LCAyIH0sCisgIHsgIi12LSIsICBCUkxfQ01EX0xORE4sICAgICAgIDEsIDcsIDQgfSwKKyAgeyAiLT4iLCAgIEJSTF9DTURfRldJTlJULCAgICAgMSwgOCwgMyB9LAorICB7ICI8LSIsICAgQlJMX0NNRF9GV0lOTFQsICAgICAxLCA2LCAzIH0sCisgIHsgIkhPTUUiLCBCUkxfQ01EX0hPTUUsICAgICAgIDEsIDcsIDMgfSwKKyAgeyAiXiIsICAgIEJSTF9DTURfS0VZKENVUlNPUl9VUCksICAgIDEsIDEsIDIgfSwKKyAgeyAidiIsICAgIEJSTF9DTURfS0VZKENVUlNPUl9ET1dOKSwgIDEsIDEsIDQgfSwKKyAgeyAiPiIsICAgIEJSTF9DTURfS0VZKENVUlNPUl9SSUdIVCksIDEsIDIsIDMgfSwKKyAgeyAiPCIsICAgIEJSTF9DTURfS0VZKENVUlNPUl9MRUZUKSwgIDEsIDAsIDMgfSwKKyAgLy97ICJCMyIsICAgQlJMX0NNRF9DU1JWSVMsICAgICAxLCAyLCAyIH0sCisgIHsgIkRFTCIsICBCUkxfQ01EX0tFWShERUxFVEUpLCAgICAgICAxLCAwLCA0IH0sCisgIHsgIklOUyIsICBCUkxfQ01EX0tFWShJTlNFUlQpLCAgICAgICAxLCAyLCA0IH0sCisgIC8veyAiQzUiLCAgIEJSTF9DTURfUEFTVEUsICAgICAgMSwgNSwgMyB9LAorICAvL3sgIkQ1IiwgICBFT0YsICAgICAgICAgICAgICAgIDEsIDUsIDQgfSwKKyAgLy97ICJCNCIsICAgRU9GLCAgICAgICAgICAgICAgICAxLCAzLCAyIH0sCisKKyAgLy97ICJCMSIsICAgRU9GLCAgICAgICAgICAgICAgICAxLCAwLCAyIH0sCisgIC8veyAiQzIiLCAgIEVPRiwgICAgICAgICAgICAgICAgMSwgMSwgMyB9LAorICAvL3sgIkM0IiwgICBFT0YsICAgICAgICAgICAgICAgIDEsIDMsIDMgfSwKKyAgLy97ICJENCIsICAgRU9GLCAgICAgICAgICAgICAgICAxLCAzLCA0IH0sCisgIHsgTlVMTCwgICAwLCAgICAgICAgICAgICAgICAgIDAsIDAsIDB9LAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBtb2RlbCBtb2RlbHNbXSA9IHsKKyAgeyAibm9ybWFsIiwJYnV0dG9uc19zaW1wbGUsCTQsIDQgfSwKKyAgeyAidnMiLAlidXR0b25zX3ZzLAk5LCA1IH0sCit9OworCitzdGF0aWMgdm9pZCBzZXRNb2RlbChXaWRnZXQgdywgWHRQb2ludGVyIGNsb3N1cmUsIFh0UG9pbnRlciBkYXRhKQoreworICBpbnRwdHJfdCBuZXdNb2RlbCA9IChpbnRwdHJfdCkgY2xvc3VyZTsKKyAgaWYgKG5ld01vZGVsID09IFh0TnVtYmVyKG1vZGVscykpCisgICAga2V5TW9kZWwgPSBOVUxMOworICBlbHNlCisgICAga2V5TW9kZWwgPSAmbW9kZWxzW25ld01vZGVsXTsKKyAgcmVnZW5lcmF0ZSA9IDE7Cit9CisKK3N0YXRpYyB2b2lkIGNyZWF0ZUtleUJ1dHRvbnMoc3RydWN0IGJ1dHRvbiAqYnV0dG9ucykgeworICBzdHJ1Y3QgYnV0dG9uICpiOworICBmb3IgKGI9YnV0dG9uczsgYi0+bGFiZWw7IGIrKykKKyAgICBjcktleUJ1dChiLT5sYWJlbCwgYi0+a2V5Y29kZSwgYi0+cmVwZWF0LCBiLT54KihCVVRXSURUSCsxKSwgYi0+eSooQlVUSEVJR0hUKzEpKTsKK30KKworc3RydWN0IHJhZGlvSW50IHsKKyAgY29uc3QgY2hhciAqbmFtZTsKKyAgaW50IHZhbHVlOworfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCByYWRpb0ludCBjb2xzUmFkaW8gW10gPSB7CisgIHsgIjgwIiwgODAgfSwKKyAgeyAiNjAiLCA2MCB9LAorICB7ICI0MCIsIDQwIH0sCisgIHsgIjIwIiwgMjAgfSwKKyAgeyAiOCIsICA4ICB9LAorfTsKKworc3RhdGljIHN0cnVjdCByYWRpb0ludCBsaW5lc1JhZGlvIFtdID0geworICB7ICIzIiwgMyB9LAorICB7ICIyIiwgMiB9LAorICB7ICIxIiwgMSB9LAorfTsKKworc3RhdGljIHZvaWQgc2V0V2lkdGgoV2lkZ2V0IHcsIFh0UG9pbnRlciBjbG9zdXJlLCBYdFBvaW50ZXIgZGF0YSkKK3sKKyAgaW50cHRyX3QgbmV3Q29scyA9IChpbnRwdHJfdCkgY2xvc3VyZTsKKyAgY29scyA9IG5ld0NvbHM7CisgIHJlZ2VuZXJhdGUgPSAxOworfQorCitzdGF0aWMgdm9pZCBzZXRIZWlnaHQoV2lkZ2V0IHcsIFh0UG9pbnRlciBjbG9zdXJlLCBYdFBvaW50ZXIgZGF0YSkKK3sKKyAgaW50cHRyX3QgbmV3TGluZXMgPSAoaW50cHRyX3QpIGNsb3N1cmU7CisgIGxpbmVzID0gbmV3TGluZXM7CisgIHJlZ2VuZXJhdGUgPSAxOworfQorCit0eXBlZGVmIHZvaWQgKCphY3Rpb25mdW5fdCkoV2lkZ2V0LCBYdFBvaW50ZXIsIFh0UG9pbnRlcik7CisKK2VudW0gYWN0aW9ucyB7CisgIFNFVE1PREVMLAorICBTRVRXSURUSCwKKyAgU0VUSEVJR0hULAorfTsKKworc3RhdGljIGFjdGlvbmZ1bl90IGFjdGlvbmZ1bltdID0geworICBbU0VUTU9ERUxdID0gc2V0TW9kZWwsCisgIFtTRVRXSURUSF0gPSBzZXRXaWR0aCwKKyAgW1NFVEhFSUdIVF0gPSBzZXRIZWlnaHQsCit9OworCisjaWYgZGVmaW5lZChVU0VfWFQpCisjZGVmaW5lIFNFVF9BQ1RJT04oY2IsIHNldCkgXAorICAoY2IpWzBdLmNhbGxiYWNrID0gKFh0Q2FsbGJhY2tQcm9jKSBhY3Rpb25mdW5bc2V0XQorI2RlZmluZSBTRVRfVkFMVUUoY2IsIHZhbHVlKSBcCisgIChjYilbMF0uY2xvc3VyZSA9ICh2b2lkKikoaW50cHRyX3QpICh2YWx1ZSkKKyNlbGlmIGRlZmluZWQoVVNFX1dJTkRPV1MpCisjZGVmaW5lIFNFVF9BQ1RJT04oY2IsIHNldCkgXAorICAoY2IpID0gKHNldCkgPDwgOAorI2RlZmluZSBTRVRfVkFMVUUoY2IsIHZhbHVlKSBcCisgIChjYikgPSAoKGNiKSAmICh+MHhmZikpIHwgKHZhbHVlKQorI2RlZmluZSBHRVRfQUNUSU9ORlVOKGNiaW50KSBcCisgIGFjdGlvbmZ1blsoY2JpbnQpID4+IDhdCisjZGVmaW5lIEdFVF9WQUxVRShjYmludCkgXAorICAoKGNiaW50KSAmIDB4ZmYpCisjZWxzZSAvKiBVU0VfICovCisjZXJyb3IgVG9vbGtpdCBjYWxsYmFjayByZWNvcmRpbmcgdW5zcGVjaWZpZWQKKyNlbmRpZiAvKiBVU0VfICovCisgIAorI2lmZGVmIFVTRV9XSU5ET1dTCitzdGF0aWMgTFJFU1VMVCBDQUxMQkFDSyB3bmRQcm9jKEhXTkQgaHduZCwgVUlOVCB1TXNnLCBXUEFSQU0gd1BhcmFtLCBMUEFSQU0gbFBhcmFtKSB7CisgIGlmICh1TXNnID09IFdNX0NPTU1BTkQpIHsKKyAgICBsb25nIGtleXByZXNzZWQ7CisgICAgaHduZCA9IEdFVF9XTV9DT01NQU5EX0hXTkQod1BhcmFtLCBsUGFyYW0pOworICAgIGtleXByZXNzZWQgPSBHZXRXaW5kb3dMb25nUHRyKGh3bmQsIEdXTFBfVVNFUkRBVEEpOworICAgIGlmIChrZXlwcmVzc2VkKSB7CisgICAgICBlbnF1ZXVlQ29tbWFuZChrZXlwcmVzc2VkKTsKKyAgICB9IGVsc2UgeworICAgICAgLyogbWVudSBlbnRyeSAqLworICAgICAgR0VUX0FDVElPTkZVTih3UGFyYW0pKE5VTEwsIChYdFBvaW50ZXIpKEdFVF9WQUxVRSh3UGFyYW0pKSwgTlVMTCk7CisgICAgfQorICAgIHJldHVybiAwOworICB9CisgIGlmICh1TXNnID09IFdNX0NPTlRFWFRNRU5VKSB7CisgICAgVHJhY2tQb3B1cE1lbnUobWVudSwgVFBNX0xFRlRBTElHTnxUUE1fUklHSFRCVVRUT04sIEdFVF9YX0xQQVJBTShsUGFyYW0pLCBHRVRfWV9MUEFSQU0obFBhcmFtKSwgMCwgdG9wbGV2ZWwsIE5VTEwpOworICAgIHJldHVybiAwOworICB9CisgIHJldHVybiBEZWZXaW5kb3dQcm9jKGh3bmQsIHVNc2csIHdQYXJhbSwgbFBhcmFtKTsKK30KKworI2RlZmluZSBCUkFJTExFX1VTQiA4MgoraW50IENBTExCQUNLIGZvbnRFbnVtUHJvYyhFTlVNTE9HRk9OVEVYICpscGVsZmUsIE5FV1RFWFRNRVRSSUNFWCAqbHBudG1lLCBEV09SRCBGb250VHlwZSwgTFBBUkFNIGxQYXJhbSkgeworCWludCBzaGlmdCA9IDgqc2l6ZW9mKGxwbnRtZS0+bnRtRm9udFNpZy5mc1VzYlswXSk7CisJaWYgKCEobHBudG1lLT5udG1Gb250U2lnLmZzVXNiW0JSQUlMTEVfVVNCIC8gc2hpZnRdICYKKwkJKDEgPDwgKEJSQUlMTEVfVVNCICUgc2hpZnQpKSkpCisJCXJldHVybiAxOworCWZvbnQgPSBDcmVhdGVGb250KENIUlktNiwgQ0hSWC00LCAwLCAwLCAwLCBGQUxTRSwgRkFMU0UsIEZBTFNFLCBERUZBVUxUX0NIQVJTRVQsIE9VVF9ERUZBVUxUX1BSRUNJUywgQ0xJUF9ERUZBVUxUX1BSRUNJUywgREVGQVVMVF9RVUFMSVRZLCBERUZBVUxUX1BJVENILCAoTFBDVFNUUikgbHBlbGZlLT5lbGZGdWxsTmFtZSk7CisJaWYgKCFmb250KSB7CisJCWxvZ1dpbmRvd3NTeXN0ZW1FcnJvcigiQ291bGRuJ3QgbG9hZCBmb250Iik7CisJCWxvZ01lc3NhZ2UoTE9HX0VSUiwiZm9udCAlcyIsIGxwZWxmZS0+ZWxmRnVsbE5hbWUpOworCQlyZXR1cm4gMTsKKwl9CisJbG9nTWVzc2FnZShMT0dfSU5GTywgIlVzaW5nIGJyYWlsbGUgZm9udCBgJXNcJyIsbHBlbGZlLT5lbGZGdWxsTmFtZSk7CisJcmV0dXJuIDA7Cit9CisjZW5kaWYgLyogVVNFX1dJTkRPV1MgKi8KKworc3RhdGljIGludCBicmxfcmVhZENvbW1hbmQoQnJhaWxsZURpc3BsYXkgKmJybCwgS2V5VGFibGVDb21tYW5kQ29udGV4dCBjb250ZXh0KQoreworI2lmIGRlZmluZWQoVVNFX1hUKQorICB3aGlsZSAoWHRBcHBQZW5kaW5nKGFwcF9jb24pKSB7CisgICAgWHRBcHBQcm9jZXNzRXZlbnQoYXBwX2NvbixYdElNQWxsKTsKKyAgICBpZiAoWHRBcHBHZXRFeGl0RmxhZyhhcHBfY29uKSkKKyAgICAgIHJhaXNlKFNJR1RFUk0pOworI2VsaWYgZGVmaW5lZChVU0VfV0lORE9XUykKKyAgICBNU0cgbXNnOworCisgICAgd2hpbGUgKFBlZWtNZXNzYWdlKCZtc2csIE5VTEwsIDAsIDAsIFBNX1JFTU9WRSkpIHsKKyAgICAgIGlmIChtc2cubWVzc2FnZSA9PSBXTV9RVUlUCisJICB8fCBtc2cubWVzc2FnZSA9PSBXTV9ERVNUUk9ZCisJICB8fCBtc2cubWVzc2FnZSA9PSBXTV9DTE9TRSkKKwlyYWlzZShTSUdURVJNKTsKKyAgICAgIGVsc2UgeworCVRyYW5zbGF0ZU1lc3NhZ2UoJm1zZyk7CisJRGlzcGF0Y2hNZXNzYWdlKCZtc2cpOworICAgICAgfQorI2Vsc2UgLyogVVNFXyAqLworI2Vycm9yIFRvb2xraXQgbG9vcCB1bnNwZWNpZmllZAorI2VuZGlmIC8qIFVTRV8gKi8KKyAgICBpZiAocmVnZW5lcmF0ZSkgeworICAgICAgcmVnZW5lcmF0ZSA9IDA7CisgICAgICBkZXN0cm95VG9wbGV2ZWwoKTsKKyAgICAgIGdlbmVyYXRlVG9wbGV2ZWwoKTsKKyAgICAgIGJybC0+dGV4dENvbHVtbnMgPSBjb2xzOworICAgICAgYnJsLT50ZXh0Um93cyA9IGxpbmVzOworICAgICAgYnJsLT5yZXNpemVSZXF1aXJlZCA9IDE7CisgICAgfQorICB9CisgIHJldHVybiBFT0Y7Cit9CisKKyNpZmRlZiBVU0VfWFQKK3N0YXRpYyBjaGFyICpmYWxsYmFja19yZXNvdXJjZXNbXSA9IHsKKyAgIipkaXNwbGF5LmJhY2tncm91bmQ6IGxpZ2h0Z3JlZW4iLAorI2lmZGVmIFVTRV9YQVcKKyAgIipkaXNwbGF5Yi5iYWNrZ3JvdW5kOiBibGFjayIsCisgICIqZGlzcGxheWIuZm9yZWdyb3VuZDogd2hpdGUiLAorI2VuZGlmIC8qIFVTRV9YQVcgKi8KKyAgIiprZXlib3guYmFja2dyb3VuZDogbGlnaHRncmV5IiwKKyAgIiptZW51LkxhYmVsOiBCcmx0dHkiLAorICAiKm1lbnUuYmFja2dyb3VuZDogbGlnaHRncmV5IiwKKyAgTlVMTAorfTsKKyNlbmRpZiAvKiBVU0VfWFQgKi8KKworI2lmZGVmIFVTRV9YTQorc3RhdGljIHZvaWQgcG9wdXAoV2lkZ2V0IHcsIFhFdmVudCAqZXZlbnQsIFN0cmluZyAqcGFyYW1zLCBDYXJkaW5hbCAqbnVtX3BhcmFtcykKK3sKKyAgV2lkZ2V0IHNoZWxsID0gWHRQYXJlbnQobWVudSk7CisgIFhtTWVudVBvc2l0aW9uKG1lbnUsICZldmVudC0+eGJ1dHRvbik7CisgIFh0TWFuYWdlQ2hpbGQobWVudSk7CisgIFh0UG9wdXAoc2hlbGwsIFh0R3JhYk5vbmUpOworfQorI2VuZGlmIC8qIFVTRV9YTSAqLworCitzdGF0aWMgaW50IGdlbmVyYXRlVG9wbGV2ZWwodm9pZCkKK3sKKyNpZmRlZiBVU0VfWFQKKyAgaW50IGFyZ2M7CisgIGNoYXIgKiphcmd2OworI2lmZGVmIFVTRV9YQVcKKyAgY2hhciAqZGVmX3N0cmluZ19yZXR1cm47CisgIGNoYXIgKiptaXNzaW5nX2NoYXJzZXRfbGlzdF9yZXR1cm47CisgIGludCBtaXNzaW5nX2NoYXJzZXRfY291bnRfcmV0dXJuOworI2VuZGlmIC8qIFVTRV9YQVcgKi8KKyAgWHRBY3Rpb25zUmVjIGFjdGlvbnMgW10gPSB7CisgICAgeyAicm91dGUiLCByb3V0ZSB9LAorICAgIHsgImtleXByZXNzIiwga2V5cHJlc3MgfSwKKyNpZmRlZiBVU0VfWE0KKyAgICB7ICJwb3B1cCIsIHBvcHVwIH0sCisjZW5kaWYgLyogVVNFX1hNICovCisgICAgeyAiUXVpdCIsIHF1aXQgfSwKKyAgICB9OworICBjaGFyIHRyYW5zbGF0aW9uc1tdID0gIjxNZXNzYWdlPldNX1BST1RPQ09MUzogUXVpdCgpIjsKKyAgY2hhciBpbnB1dEFjdGlvbnNbXSA9ICJcCis6PEtleT46IGtleXByZXNzKClcblwKKzo8S2V5VXA+OiBrZXlwcmVzcygpXG4iOworICBjaGFyIHBvcHVwQWN0aW9uW10gPQorCSJOb25lPEJ0bjNEb3duPjogIgorI2lmIGRlZmluZWQoVVNFX1hBVykKKwkiWGF3UG9zaXRpb25TaW1wbGVNZW51KG1lbnUpIE1lbnVQb3B1cChtZW51KSIKKyNlbGlmIGRlZmluZWQoVVNFX1hNKQorCSJwb3B1cCgpIgorI2VuZGlmIC8qIFVTRV8gKi8KKwkiXG4iOworICBXaWRnZXQgdG1wX3Zib3g7CisgIGNoYXIgKmRpc3A7CisjaWZkZWYgVVNFX1hBVworICBjaGFyICpkaXNwYjsKKyNlbmRpZiAvKiBVU0VfWEFXICovCisgIFh0Q2FsbGJhY2tSZWMgY2JbMl0gPSB7IHsgTlVMTCwgTlVMTCB9LCB7IE5VTEwsIE5VTEwgfSB9OworI2VuZGlmIC8qIFVTRV9YVCAqLworI2lmZGVmIFVTRV9XSU5ET1dTCisgIFVJTlQgY2IgPSAwOworI2VuZGlmIC8qIFVTRV9XSU5ET1dTICovCisgIGNvbnN0IHN0cnVjdCByYWRpb0ludCAqcmFkaW9JbnQ7CisgIGNvbnN0IHN0cnVjdCBtb2RlbCAqcmFkaW9Nb2RlbDsKKyAgaW50IHkseDsKKworI2lmIGRlZmluZWQoVVNFX1hUKQorICBhcmdjID0geHRBcmdjOworICBpZiAoKGFyZ3YgPSBtYWxsb2MoKHh0QXJnYyArIDEpICogc2l6ZW9mKCp4dEFyZ3YpKSkpIHsKKyAgICBtZW1jcHkoYXJndiwgeHRBcmd2LCAoeHRBcmdjICsgMSkgKiBzaXplb2YoKnh0QXJndikpOworCisgICAgLyogdG9wbGV2ZWwgKi8KKyAgICB0b3BsZXZlbCA9IFh0VmFPcGVuQXBwbGljYXRpb24oJmFwcF9jb24sICJCcmx0dHkiLAorICAgICAgTlVMTCwgMCwKKyAgICAgICZhcmdjLCBhcmd2LCBmYWxsYmFja19yZXNvdXJjZXMsCisgICAgICBzZXNzaW9uU2hlbGxXaWRnZXRDbGFzcywKKyAgICAgIFh0TmFsbG93U2hlbGxSZXNpemUsIFRydWUsCisgICAgICBYdE5pbnB1dCwgaW5wdXQgPyBUcnVlIDogRmFsc2UsCisgICAgICBOVUxMKTsKKworICAgIFh0QXBwQWRkQWN0aW9ucyhhcHBfY29uLGFjdGlvbnMsWHROdW1iZXIoYWN0aW9ucykpOworICAgIFh0T3ZlcnJpZGVUcmFuc2xhdGlvbnModG9wbGV2ZWwsWHRQYXJzZVRyYW5zbGF0aW9uVGFibGUodHJhbnNsYXRpb25zKSk7CisKKyAgICBmcmVlKGFyZ3YpOworICB9IGVsc2UgeworICAgIGxvZ01hbGxvY0Vycm9yKCk7CisgICAgdG9wbGV2ZWwgPSBOVUxMOworICB9CisKKyNlbGlmIGRlZmluZWQoVVNFX1dJTkRPV1MpCisgIHsKKyAgICBIV05EIHJvb3QgPSBHZXREZXNrdG9wV2luZG93KCk7CisgICAgSERDIGhkYyA9IEdldERDKHJvb3QpOworICAgIEVudW1Gb250RmFtaWxpZXNFeChoZGMsIE5VTEwsICh2b2lkKikgZm9udEVudW1Qcm9jLCAwLCAwKTsKKyAgICBSZWxlYXNlREMocm9vdCwgaGRjKTsKKyAgICBpZiAoIWZvbnQpIHsKKyAgICAgIGxvZ01lc3NhZ2UoTE9HX0VSUiwiRXJyb3Igd2hpbGUgbG9hZGluZyBicmFpbGxlIGZvbnQiKTsKKyAgICAgIHRvdGxpbmVzID0gbGluZXM7CisgICAgfSBlbHNlIHsKKyAgICAgIHRvdGxpbmVzID0gMipsaW5lczsKKyAgICB9CisgIH0KKworICB7CisgICAgV05EQ0xBU1Mgd25kY2xhc3MgPSB7CisgICAgICAuc3R5bGUgPSAwLAorICAgICAgLmxwZm5XbmRQcm9jID0gd25kUHJvYywKKyAgICAgIC5jYkNsc0V4dHJhID0gMCwKKyAgICAgIC5jYlduZEV4dHJhID0gMCwKKyAgICAgIC5oSW5zdGFuY2UgPSBOVUxMLAorICAgICAgLmhJY29uID0gTG9hZEljb24oTlVMTCwgSURJX0FQUExJQ0FUSU9OKSwgLyogVE9ETzogbmljZSBpY29uICovCisgICAgICAuaEN1cnNvciA9IExvYWRDdXJzb3IoTlVMTCwgSURDX0FSUk9XKSwKKyAgICAgIC5oYnJCYWNrZ3JvdW5kID0gTlVMTCwKKyAgICAgIC5scHN6TWVudU5hbWUgPSBOVUxMLAorICAgICAgLmxwc3pDbGFzc05hbWUgPSAiQlJMVFRZV0NsYXNzIiwKKyAgICB9OworICAgIGlmICghKFJlZ2lzdGVyQ2xhc3MoJnduZGNsYXNzKSkgJiYKKwlHZXRMYXN0RXJyb3IoKSAhPSBFUlJPUl9DTEFTU19BTFJFQURZX0VYSVNUUykgeworICAgICAgbG9nV2luZG93c1N5c3RlbUVycm9yKCJSZWdpc3RlckNsYXNzIik7CisgICAgICBpZiAoZm9udCkgeworCURlbGV0ZU9iamVjdChmb250KTsKKwlmb250ID0gTlVMTDsKKyAgICAgIH0KKyAgICAgIHJldHVybiAwOworICAgIH0KKyAgICBtb2RlbFdpZHRoID0gY29scypDSFJYOworICAgIGlmIChrZXlNb2RlbCkgeworICAgICAgaWYgKGtleU1vZGVsLT53aWR0aCooQlVUV0lEVEgrMSkrMSA+IG1vZGVsV2lkdGgpCisJbW9kZWxXaWR0aCA9IGtleU1vZGVsLT53aWR0aCAqKEJVVFdJRFRIICsxKS0xOworICAgICAgbW9kZWxIZWlnaHQgPSBrZXlNb2RlbC0+aGVpZ2h0KihCVVRIRUlHSFQrMSk7CisgICAgfSBlbHNlIHsKKyAgICAgIG1vZGVsSGVpZ2h0ID0gMDsKKyAgICB9CisgICAgaWYgKCEodG9wbGV2ZWwgPSBDcmVhdGVXaW5kb3dFeChXU19FWF9UT1BNT1NUIHwgV1NfRVhfVE9PTFdJTkRPVywKKwkgICAgIkJSTFRUWVdDbGFzcyIsICJCUkxUVFkiLAorCSAgICBXU19QT1BVUCwgR2V0U3lzdGVtTWV0cmljcyhTTV9DWFNDUkVFTiktbW9kZWxXaWR0aC1SSUdIVE1BUkdJTiwgMCwKKwkgICAgbW9kZWxXaWR0aCwgdG90bGluZXMqQ0hSWSttb2RlbEhlaWdodCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCkpKSB7CisgICAgICBsb2dXaW5kb3dzU3lzdGVtRXJyb3IoIkNyZWF0ZVdpbmRvdyIpOworICAgICAgaWYgKGZvbnQpIHsKKwlEZWxldGVPYmplY3QoZm9udCk7CisJZm9udCA9IE5VTEw7CisgICAgICB9CisgICAgICByZXR1cm4gMDsKKyAgICB9CisgIH0KKyNlbHNlIC8qIFVTRV8gKi8KKyNlcnJvciBUb29sa2l0IHRvcGxldmVsIGNyZWF0aW9uIHVuc3BlY2lmaWVkCisjZW5kaWYgLyogVVNFXyAqLworCisgIC8qIHZlcnRpY2FsIHNlcGFyYXRpb24gKi8KKyNpZmRlZiBVU0VfWFQKKyAgdmJveCA9IFh0VmFDcmVhdGVNYW5hZ2VkV2lkZ2V0KCJ2Ym94IixwYW5lZFdpZGdldENsYXNzLHRvcGxldmVsLAorI2lmZGVmIFVTRV9YTQorICAgIFhtTm1hcmdpbkhlaWdodCwgMCwKKyAgICBYbU5tYXJnaW5XaWR0aCwgMCwKKyAgICBYbU5zcGFjaW5nLCAxLAorI2VuZGlmIC8qIFVTRV9YTSAqLworICAgIFh0TnJlc2l6ZSwgVHJ1ZSwKKyAgICBYdE50cmFuc2xhdGlvbnMsIFh0UGFyc2VUcmFuc2xhdGlvblRhYmxlKHBvcHVwQWN0aW9uKSwKKyAgICBOVUxMKTsKKyAgaWYgKGlucHV0KQorICAgIFh0QXVnbWVudFRyYW5zbGF0aW9ucyh2Ym94LCBYdFBhcnNlVHJhbnNsYXRpb25UYWJsZShpbnB1dEFjdGlvbnMpKTsKKyNlbmRpZiAvKiBVU0VfWFQgKi8KKworI2lmZGVmIFVTRV9YQVcKKyAgaWYgKCEoZm9udHNldCA9IFhDcmVhdGVGb250U2V0KFh0RGlzcGxheSh0b3BsZXZlbCksIGZvbnRuYW1lLCAmbWlzc2luZ19jaGFyc2V0X2xpc3RfcmV0dXJuLCAmbWlzc2luZ19jaGFyc2V0X2NvdW50X3JldHVybiwgJmRlZl9zdHJpbmdfcmV0dXJuKSkpCisgICAgbG9nTWVzc2FnZShMT0dfRVJSLCJFcnJvciB3aGlsZSBsb2FkaW5nIHVuaWNvZGUgZm9udCIpOworICBpZiAobWlzc2luZ19jaGFyc2V0X2NvdW50X3JldHVybikgeworICAgIGludCBpOworICAgIGZvciAoaT0wOyBpPG1pc3NpbmdfY2hhcnNldF9jb3VudF9yZXR1cm47IGkrKykKKyAgICAgIGxvZ01lc3NhZ2UoTE9HX0lORk8sIkNvdWxkIG5vdCBsb2FkIGEgdW5pY29kZSBmb250IGZvciBjaGFyc2V0ICVzIixtaXNzaW5nX2NoYXJzZXRfbGlzdF9yZXR1cm5baV0pOworICAgIFhGcmVlU3RyaW5nTGlzdChtaXNzaW5nX2NoYXJzZXRfbGlzdF9yZXR1cm4pOworICB9CisjZW5kaWYgLyogVVNFX1hBVyAqLworICAKKyNpZmRlZiBVU0VfWFQKKyAgLyogaG9yaXpvbnRhbCBzZXBhcmF0aW9uICovCisgIGhib3ggPSBYdFZhQ3JlYXRlTWFuYWdlZFdpZGdldCgiaGJveCIscGFuZWRXaWRnZXRDbGFzcyx2Ym94LAorICAgIFh0Tm9yaWVudGF0aW9uLCBYdEVob3Jpem9udGFsLAorI2lmZGVmIFVTRV9YTQorICAgIFhtTm1hcmdpbkhlaWdodCwgMCwKKyAgICBYbU5tYXJnaW5XaWR0aCwgMCwKKyAgICBYbU5zcGFjaW5nLCAwLAorI2VuZGlmIC8qIFVTRV9YTSAqLworI2lmZGVmIFVTRV9YQVcKKyAgICBYdE5zaG93R3JpcCxGYWxzZSwKKyNlbHNlIC8qIFVTRV9YQVcgKi8KKyAgICBYbU5wYW5lTWF4aW11bSwyMCpsaW5lcywKKyAgICBYbU5wYW5lTWluaW11bSwyMCpsaW5lcywKKyAgICBYbU5za2lwQWRqdXN0LCBUcnVlLAorI2VuZGlmIC8qIFVTRV9YQVcgKi8KKyAgICBYdE5yZXNpemUsIFRydWUsCisgICAgTlVMTCk7CisKKyAgLyogZGlzcGxheSBMYWJlbCAqLworICBkaXNwPVh0TWFsbG9jKDIpOworICBkaXNwWzBdPScgJzsKKyAgZGlzcFsxXT0wOworCisjaWZkZWYgVVNFX1hBVworICBkaXNwYj1YdE1hbGxvYyg0KTsKKyAgZGlzcGJbMF09MHhlMHwoKDB4Mjg+PjQpJjB4MGYpOworICBkaXNwYlsxXT0weDgwfCgoMHgyODw8MikmMHgzZik7CisgIGRpc3BiWzJdPTB4ODA7CisgIGRpc3BiWzNdPTA7CisjZW5kaWYgLyogVVNFX1hBVyAqLworCisjaWZkZWYgVVNFX1hNCisgIGRpc3BsYXlfY3MgPSBYbVN0cmluZ0NyZWF0ZUxvY2FsaXplZChkaXNwKTsKKyNlbmRpZiAvKiBVU0VfWE0gKi8KKyNlbmRpZiAvKiBVU0VfWFQgKi8KKworI2lmZGVmIFVTRV9XSU5ET1dTCisgIGhib3ggPSBDcmVhdGVXaW5kb3coV0NfU1RBVElDLCAiIiwgV1NfQ0hJTEQgfCBXU19WSVNJQkxFLCAwLCAwLAorICAgICAgIG1vZGVsV2lkdGgsIHRvdGxpbmVzKkNIUlkrbW9kZWxIZWlnaHQsIHRvcGxldmVsLCBOVUxMLCBOVUxMLCBOVUxMKTsKKyNlbmRpZiAvKiBVU0VfV0lORE9XUyAqLworCisgIGZvciAoeD0wO3g8Y29sczt4KyspIHsKKyNpZmRlZiBVU0VfWFQKKyAgICAvKiB2ZXJ0aWNhbCBzZXBhcmF0aW9uICovCisgICAgdG1wX3Zib3ggPSBYdFZhQ3JlYXRlTWFuYWdlZFdpZGdldCgidG1wX3Zib3giLHBhbmVkV2lkZ2V0Q2xhc3MsaGJveCwKKyNpZmRlZiBVU0VfWEFXCisgICAgICBYdE5zaG93R3JpcCxGYWxzZSwKKyNlbHNlIC8qIFVTRV9YQVcgKi8KKyAgICAgIFhtTnBhbmVNYXhpbXVtLDIwLAorICAgICAgWG1OcGFuZU1pbmltdW0sMjAsCisgICAgICBYbU5za2lwQWRqdXN0LCBUcnVlLAorI2VuZGlmIC8qIFVTRV9YQVcgKi8KKyNpZmRlZiBVU0VfWE0KKyAgICAgIFhtTm1hcmdpbkhlaWdodCwgMCwKKyAgICAgIFhtTm1hcmdpbldpZHRoLCAwLAorICAgICAgWG1Oc3BhY2luZywgMCwKKyNlbmRpZiAvKiBVU0VfWE0gKi8KKyAgICAgIFh0TnJlc2l6ZSwgVHJ1ZSwKKyAgICAgIE5VTEwpOworI2VuZGlmIC8qIFVTRV9YVCAqLworCisgICAgZm9yICh5PTA7eTxsaW5lczt5KyspIHsKKyNpZiBkZWZpbmVkKFVTRV9YVCkKKyAgICAgIGNoYXIgYWN0aW9uW10gPSAiPEJ0bjFVcD46IHJvdXRlKDEwMCkiOworICAgICAgWHRUcmFuc2xhdGlvbnMgdHJhbnNsOworCisgICAgICBzbnByaW50ZihhY3Rpb24sc2l6ZW9mKGFjdGlvbiksIjxCdG4xVXA+OiByb3V0ZSgldSkiLHkqY29scyt4KTsKKyAgICAgIHRyYW5zbCA9IFh0UGFyc2VUcmFuc2xhdGlvblRhYmxlKGFjdGlvbik7CisKKyAgICAgIGRpc3BsYXlbeSpjb2xzK3hdID0gWHRWYUNyZWF0ZU1hbmFnZWRXaWRnZXQoImRpc3BsYXkiLGxhYmVsV2lkZ2V0Q2xhc3MsdG1wX3Zib3gsCisJWHROdHJhbnNsYXRpb25zLCB0cmFuc2wsCisjaWZkZWYgVVNFX1hBVworCVh0TnNob3dHcmlwLEZhbHNlLAorCVh0TmludGVybmF0aW9uYWwsIFRydWUsCisjZWxzZSAvKiBVU0VfWEFXICovCisJWG1OcGFuZU1heGltdW0sMjAsCisJWG1OcGFuZU1pbmltdW0sMjAsCisJWG1Oc2tpcEFkanVzdCwgVHJ1ZSwKKyNlbmRpZiAvKiBVU0VfWEFXICovCisjaWZkZWYgVVNFX1hBVworCVh0TmxhYmVsLCBkaXNwLAorCWZvbnRzZXQgPyBYTkZvbnRTZXQgOiBOVUxMLCBmb250c2V0LCBOVUxMCisjZWxzZSAvKiBVU0VfWEFXICovCisJWG1ObGFiZWxTdHJpbmcsIGRpc3BsYXlfY3MsIE5VTEwKKyNlbmRpZiAvKiBVU0VfWEFXICovCisJKTsKKworI2lmZGVmIFVTRV9YQVcKKyAgICAgIGlmIChmb250c2V0KSB7CisJZGlzcGxheWJbeSpjb2xzK3hdID0gWHRWYUNyZWF0ZU1hbmFnZWRXaWRnZXQoImRpc3BsYXliIixsYWJlbFdpZGdldENsYXNzLHRtcF92Ym94LAorCSAgWHROdHJhbnNsYXRpb25zLCB0cmFuc2wsCisJICBYdE5pbnRlcm5hdGlvbmFsLCBUcnVlLAorCSAgWE5Gb250U2V0LCBmb250c2V0LAorCSAgWHROc2hvd0dyaXAsRmFsc2UsCisJICBYdE5sYWJlbCwgZGlzcGIsCisJICBOVUxMKTsKKyAgICAgIH0KKyNlbmRpZiAvKiBVU0VfWEFXICovCisjZWxpZiBkZWZpbmVkKFVTRV9XSU5ET1dTKQorICAgICAgZGlzcGxheVt5KmNvbHMreF0gPSBDcmVhdGVXaW5kb3coV0NfQlVUVE9OLCAiICIsIFdTX0NISUxEIHwgV1NfVklTSUJMRSB8IEJTX0NIRUNLQk9YIHwgQlNfUFVTSExJS0UsIHgqQ0hSWCwgeSpDSFJZLCBDSFJYLCBDSFJZLCB0b3BsZXZlbCwgTlVMTCwgTlVMTCwgTlVMTCk7CisgICAgICBTZXRXaW5kb3dMb25nUHRyKGRpc3BsYXlbeSpjb2xzK3hdLCBHV0xQX1VTRVJEQVRBLCAoTE9OR19QVFIpIChCUkxfQ01EX0JMSyhST1VURSkgfCAoKHkqY29scyt4KSZCUkxfTVNLX0FSRykpKTsKKyAgICAgIGlmIChmb250KSB7CisgICAgICAgIGRpc3BsYXliW3kqY29scyt4XSA9IENyZWF0ZVdpbmRvd1coV0NfQlVUVE9OVywgV1NfQygiICIpLCBXU19DSElMRCB8IFdTX1ZJU0lCTEUgfCBCU19DSEVDS0JPWCB8IEJTX1BVU0hMSUtFLCB4KkNIUlgsIChsaW5lcyt5KSpDSFJZLCBDSFJYLCBDSFJZLCB0b3BsZXZlbCwgTlVMTCwgTlVMTCwgTlVMTCk7CisgICAgICAgIFNldFdpbmRvd0xvbmdQdHIoZGlzcGxheWJbeSpjb2xzK3hdLCBHV0xQX1VTRVJEQVRBLCAoTE9OR19QVFIpIChCUkxfQ01EX0JMSyhST1VURSkgfCAoKHkqY29scyt4KSZCUkxfTVNLX0FSRykpKTsKKwlTZW5kTWVzc2FnZShkaXNwbGF5Ylt5KmNvbHMreF0sIFdNX1NFVEZPTlQsIChXUEFSQU0pIGZvbnQsIFRSVUUpOworICAgICAgfQorI2Vsc2UgLyogVVNFXyAqLworI2Vycm9yIFRvb2xraXQgZGlzcGxheSB1bnNwZWNpZmllZAorI2VuZGlmIC8qIFVTRV8gKi8KKyAgICB9CisgIH0KKyNpZmRlZiBVU0VfWFQKKyNpZmRlZiBVU0VfWE0KKyAgWG1TdHJpbmdGcmVlKGRpc3BsYXlfY3MpOworI2VuZGlmIC8qIFVTRV9YTSAqLworICBYdEZyZWUoZGlzcCk7CisjaWZkZWYgVVNFX1hBVworICBYdEZyZWUoZGlzcGIpOworI2VuZGlmIC8qIFVTRV9YQVcgKi8KKyNlbmRpZiAvKiBVU0VfWFQgKi8KKyNpZmRlZiBVU0VfWFQKKyAgWHRWYUdldFZhbHVlcyhkaXNwbGF5WzBdLAorICAgIFh0TmZvcmVncm91bmQsICZkaXNwbGF5Rm9yZWdyb3VuZCwKKyAgICBYdE5iYWNrZ3JvdW5kLCAmZGlzcGxheUJhY2tncm91bmQsCisgICAgTlVMTCk7CisjZW5kaWYgLyogVVNFX1hUICovCisKKyAgaWYgKGtleU1vZGVsKSB7CisgICAgLyoga2V5IGJveCAqLworI2lmZGVmIFVTRV9YVAorICAgIGtleWJveCA9IFh0VmFDcmVhdGVNYW5hZ2VkV2lkZ2V0KCJrZXlib3giLGZvcm1XaWRnZXRDbGFzcyx2Ym94LAorI2lmZGVmIFVTRV9YQVcKKyAgICAgIFh0TmRlZmF1bHREaXN0YW5jZSwwLAorI2VuZGlmIC8qIFVTRV9YQVcgKi8KKyAgICAgIE5VTEwpOworI2VuZGlmIC8qIFVTRV9YVCAqLworICAgIGNyZWF0ZUtleUJ1dHRvbnMoa2V5TW9kZWwtPmJ1dHRvbnMpOworICB9CisKKyAgbWVudSA9IENyZWF0ZVBvcHVwTWVudSgibWVudSIsIHRvcGxldmVsKTsKKworI2lmZGVmIFVTRV9YQVcKKyAgaWYgKCFjaGVjaykgeworICAgIHN0YXRpYyB1bnNpZ25lZCBjaGFyIGNoZWNraW1nIFtdID0geworICAgICAgMHgwMCwgMHgwMCwgMHhjMCwgMHg2MCwgMHgzMywgMHgxZSwgMHgwYywgMHgwMAorICAgIH07CisgICAgY2hlY2sgPSBYQ3JlYXRlQml0bWFwRnJvbURhdGEoWHREaXNwbGF5KHRvcGxldmVsKSwKKwlSb290V2luZG93T2ZTY3JlZW4oWHRTY3JlZW4odG9wbGV2ZWwpKSwgKGNoYXIgKikgY2hlY2tpbWcsIDgsIDgpOworICB9CisjZW5kaWYgLyogVVNFX1hBVyAqLworCisjaWZkZWYgVVNFX1hBVworICBBZGRNZW51U2VwYXJhdG9yKCJXaWR0aExpbmUiLCBtZW51KTsKKyNlbmRpZiAvKiBVU0VfWEFXICovCisgIEFkZE1lbnVMYWJlbCgiV2lkdGgiLCBtZW51KTsKKyAgU0VUX0FDVElPTihjYiwgU0VUV0lEVEgpOworICBmb3IgKHJhZGlvSW50ID0gY29sc1JhZGlvOyByYWRpb0ludCA8ICZjb2xzUmFkaW9bWHROdW1iZXIoY29sc1JhZGlvKV07IHJhZGlvSW50KyspIHsKKyAgICBTRVRfVkFMVUUoY2IsIHJhZGlvSW50LT52YWx1ZSk7CisgICAgQWRkTWVudVJhZGlvKHJhZGlvSW50LT5uYW1lLCBtZW51LCBjYiwgcmFkaW9JbnQtPnZhbHVlID09IGNvbHMpOworICB9CisKKyAgQWRkTWVudVNlcGFyYXRvcigiSGVpZ2h0TGluZSIsIG1lbnUpOworICBBZGRNZW51TGFiZWwoIkhlaWdodCIsIG1lbnUpOworICBTRVRfQUNUSU9OKGNiLCBTRVRIRUlHSFQpOworICBmb3IgKHJhZGlvSW50ID0gbGluZXNSYWRpbzsgcmFkaW9JbnQgPCAmbGluZXNSYWRpb1tYdE51bWJlcihsaW5lc1JhZGlvKV07IHJhZGlvSW50KyspIHsKKyAgICBTRVRfVkFMVUUoY2IsIHJhZGlvSW50LT52YWx1ZSk7CisgICAgQWRkTWVudVJhZGlvKHJhZGlvSW50LT5uYW1lLCBtZW51LCBjYiwgcmFkaW9JbnQtPnZhbHVlID09IGxpbmVzKTsKKyAgfQorCisgIEFkZE1lbnVTZXBhcmF0b3IoIk1vZGVsTGluZSIsIG1lbnUpOworICBBZGRNZW51TGFiZWwoIk1vZGVsIiwgbWVudSk7CisgIFNFVF9BQ1RJT04oY2IsIFNFVE1PREVMKTsKKyAgZm9yIChyYWRpb01vZGVsID0gbW9kZWxzOyByYWRpb01vZGVsIDwgJm1vZGVsc1tYdE51bWJlcihtb2RlbHMpXTsgcmFkaW9Nb2RlbCsrKSB7CisgICAgU0VUX1ZBTFVFKGNiLCByYWRpb01vZGVsLW1vZGVscyk7CisgICAgQWRkTWVudVJhZGlvKHJhZGlvTW9kZWwtPm5hbWUsIG1lbnUsIGNiLCByYWRpb01vZGVsID09IGtleU1vZGVsKTsKKyAgfQorCisgIFNFVF9WQUxVRShjYiwgWHROdW1iZXIobW9kZWxzKSk7CisgIEFkZE1lbnVSYWRpbygiYmFyZSIsIG1lbnUsIGNiLCAha2V5TW9kZWwpOworCisgIC8qIGdvIGdvIGdvICovCisjaWYgZGVmaW5lZChVU0VfWFQpCisgIFh0UmVhbGl6ZVdpZGdldCh0b3BsZXZlbCk7CisgIGlmICghd21fZGVsZXRlX3dpbmRvdykKKyAgICB3bV9kZWxldGVfd2luZG93ID0gWEludGVybkF0b20oWHREaXNwbGF5KHRvcGxldmVsKSwgIldNX0RFTEVURV9XSU5ET1ciLCBGYWxzZSk7CisgIFhTZXRXTVByb3RvY29scyhYdERpc3BsYXkodG9wbGV2ZWwpLFh0V2luZG93KHRvcGxldmVsKSwmd21fZGVsZXRlX3dpbmRvdywxKTsKKyNlbGlmIGRlZmluZWQoVVNFX1dJTkRPV1MpCisgIFNob3dXaW5kb3codG9wbGV2ZWwsIFNXX1NIT1dERUZBVUxUKTsKKyAgVXBkYXRlV2luZG93KHRvcGxldmVsKTsKKyNlbHNlIC8qIFVTRV8gKi8KKyNlcnJvciBUb29sa2l0IHRvcGxldmVsIHJlYWxpemF0aW9uIHVuc3BlY2lmaWVkCisjZW5kaWYgLyogVVNFXyAqLworI2lmIGRlZmluZWQoVVNFX1hBVykgfHwgZGVmaW5lZChVU0VfV0lORE9XUykKKyAgbWVtc2V0KGRpc3BsYXllZFdpbmRvdywwLHNpemVvZihkaXNwbGF5ZWRXaW5kb3cpKTsKKyNlbmRpZiAvKiBVU0VfWEFXIHx8IFVTRV9XSU5ET1dTICovCisgIG1lbXNldChkaXNwbGF5ZWRWaXN1YWwsMCxzaXplb2YoZGlzcGxheWVkVmlzdWFsKSk7CisgIGxhc3RjdXJzb3IgPSBCUkxfTk9fQ1VSU09SOworICByZXR1cm4gMTsKK30KKworc3RhdGljIGludCBicmxfY29uc3RydWN0KEJyYWlsbGVEaXNwbGF5ICpicmwsIGNoYXIgKipwYXJhbWV0ZXJzLCBjb25zdCBjaGFyICpkZXZpY2UpCit7CisgIGxpbmVzPTE7CisgIGlmICgqcGFyYW1ldGVyc1tQQVJNX0xJTkVTXSkgeworICAgIHN0YXRpYyBjb25zdCBpbnQgbWluaW11bSA9IDE7CisgICAgc3RhdGljIGNvbnN0IGludCBtYXhpbXVtID0gTUFYTElORVM7CisgICAgaW50IHZhbHVlOworICAgIGlmICh2YWxpZGF0ZUludGVnZXIoJnZhbHVlLCBwYXJhbWV0ZXJzW1BBUk1fTElORVNdLCAmbWluaW11bSwgJm1heGltdW0pKSB7CisgICAgICBsaW5lcz12YWx1ZTsKKyAgICB9IGVsc2UgeworICAgICAgbG9nTWVzc2FnZShMT0dfV0FSTklORywgIiVzOiAlcyIsICJpbnZhbGlkIGxpbmUgY291bnQiLCBwYXJhbWV0ZXJzW1BBUk1fTElORVNdKTsKKyAgICB9CisgIH0KKworICBjb2xzPTQwOworICBpZiAoKnBhcmFtZXRlcnNbUEFSTV9DT0xVTU5TXSkgeworICAgIHN0YXRpYyBjb25zdCBpbnQgbWluaW11bSA9IDE7CisgICAgc3RhdGljIGNvbnN0IGludCBtYXhpbXVtID0gTUFYQ09MUzsKKyAgICBpbnQgdmFsdWU7CisgICAgaWYgKHZhbGlkYXRlSW50ZWdlcigmdmFsdWUsIHBhcmFtZXRlcnNbUEFSTV9DT0xVTU5TXSwgJm1pbmltdW0sICZtYXhpbXVtKSkgeworICAgICAgY29scz12YWx1ZTsKKyAgICB9IGVsc2UgeworICAgICAgbG9nTWVzc2FnZShMT0dfV0FSTklORywgIiVzOiAlcyIsICJpbnZhbGlkIGNvbHVtbiBjb3VudCIsIHBhcmFtZXRlcnNbUEFSTV9DT0xVTU5TXSk7CisgICAgfQorICB9CisKKyAgaWYgKCpwYXJhbWV0ZXJzW1BBUk1fSU5QVVRdKSB7CisgICAgdW5zaWduZWQgaW50IHZhbHVlOworICAgIGlmICh2YWxpZGF0ZU9uT2ZmKCZ2YWx1ZSwgcGFyYW1ldGVyc1tQQVJNX0lOUFVUXSkpIHsKKyAgICAgIGlucHV0ID0gdmFsdWU7CisgICAgfSBlbHNlIHsKKyAgICAgIGxvZ01lc3NhZ2UoTE9HX1dBUk5JTkcsICIlczogJXMiLCAiaW52YWxpZCBpbnB1dCBzZXR0aW5nIiwgcGFyYW1ldGVyc1tQQVJNX0lOUFVUXSk7CisgICAgfQorICB9CisKKyAgaWYgKCpwYXJhbWV0ZXJzW1BBUk1fVEtQQVJNU10pIHsKKyAgICBpbnQgcmVhbGxvY2F0ZWQgPSAwOworCisgICAgeworICAgICAgaW50IGNvdW50OworICAgICAgY2hhciAqKmFyZ3MxID0gc3BsaXRTdHJpbmcocGFyYW1ldGVyc1tQQVJNX1RLUEFSTVNdLCAnICcsICZjb3VudCk7CisKKyAgICAgIGlmIChhcmdzMSkgeworICAgICAgICBjaGFyICoqYXJnczIgPSByZWFsbG9jKGFyZ3MxLCAoY291bnQrMikgKiBzaXplb2YoY2hhciAqKSk7CisKKyAgICAgICAgaWYgKGFyZ3MyKSB7CisgICAgICAgICAgY2hhciAqbmFtZSA9IHN0cmR1cCh4dERlZkFyZ3ZbMF0pOworCisgICAgICAgICAgYXJnczEgPSBOVUxMOworCisgICAgICAgICAgaWYgKG5hbWUpIHsKKyAgICAgICAgICAgIG1lbW1vdmUoYXJnczIrMSwgYXJnczIsIChjb3VudCsxKSAqIHNpemVvZihjaGFyICopKTsKKyAgICAgICAgICAgIGFyZ3MyWzBdID0gbmFtZTsKKyAgICAgICAgICAgIGNvdW50ICs9IDE7CisKKyAgICAgICAgICAgIGlmICh4dEFyZ3YgIT0geHREZWZBcmd2KSBkZWFsbG9jYXRlU3RyaW5ncyh4dEFyZ3YpOworICAgICAgICAgICAgeHRBcmd2ID0gYXJnczI7CisgICAgICAgICAgICB4dEFyZ2MgPSBjb3VudDsKKyAgICAgICAgICAgIGFyZ3MyID0gTlVMTDsKKworICAgICAgICAgICAgcmVhbGxvY2F0ZWQgPSAxOworICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBsb2dNYWxsb2NFcnJvcigpOworICAgICAgICAgIH0KKworICAgICAgICAgIGlmIChhcmdzMikgZGVhbGxvY2F0ZVN0cmluZ3MoYXJnczIpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgIGxvZ01hbGxvY0Vycm9yKCk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoYXJnczEpIGRlYWxsb2NhdGVTdHJpbmdzKGFyZ3MxKTsKKyAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoIXJlYWxsb2NhdGVkKSByZXR1cm4gMDsKKyAgfQorCisgIGlmICgqcGFyYW1ldGVyc1tQQVJNX01PREVMXSkgeworICAgIG1vZGVsID0gcGFyYW1ldGVyc1tQQVJNX01PREVMXTsKKyAgICBmb3IgKGtleU1vZGVsID0gbW9kZWxzOyBrZXlNb2RlbCA8ICZtb2RlbHNbWHROdW1iZXIobW9kZWxzKV0gJiYgc3RyY21wKGtleU1vZGVsLT5uYW1lLG1vZGVsKTsga2V5TW9kZWwrKyk7CisgICAgaWYgKGtleU1vZGVsID09ICZtb2RlbHNbWHROdW1iZXIobW9kZWxzKV0pIGtleU1vZGVsID0gTlVMTDsKKyAgfQorCisgIGlmICgqcGFyYW1ldGVyc1tQQVJNX0ZPTlRdKSB7CisgICAgZm9udG5hbWUgPSBwYXJhbWV0ZXJzW1BBUk1fRk9OVF07CisgIH0KKworI2lmIGRlZmluZWQoVVNFX1hUKQorICBYdFRvb2xraXRUaHJlYWRJbml0aWFsaXplKCk7CisgIFh0U2V0TGFuZ3VhZ2VQcm9jKE5VTEwsIE5VTEwsIE5VTEwpOworI2VuZGlmIC8qIFVTRV9YVCAqLyAKKworICBicmwtPnRleHRDb2x1bW5zPWNvbHM7CisgIGJybC0+dGV4dFJvd3M9bGluZXM7CisKKyAgcmV0dXJuIGdlbmVyYXRlVG9wbGV2ZWwoKTsKK30KK3N0YXRpYyB2b2lkIGRlc3Ryb3lUb3BsZXZlbCh2b2lkKQoreworI2lmIGRlZmluZWQoVVNFX1hUKQorI2lmZGVmIFVTRV9YQVcKKyAgaWYgKGZvbnRzZXQpIHsKKyAgICBYRnJlZUZvbnRTZXQoWHREaXNwbGF5KHRvcGxldmVsKSxmb250c2V0KTsKKyAgICBmb250c2V0ID0gTlVMTDsKKyAgfQorICBjaGVjayA9IE5vbmU7CisjZW5kaWYgLyogVVNFX1hBVyAqLworICBYdERlc3Ryb3lBcHBsaWNhdGlvbkNvbnRleHQoYXBwX2Nvbik7CisgIGFwcF9jb24gPSBOVUxMOworI2VsaWYgZGVmaW5lZChVU0VfV0lORE9XUykKKyAgRGVzdHJveU1lbnUobWVudSk7CisgIGlmICghRGVzdHJveVdpbmRvdyh0b3BsZXZlbCkpCisgICAgbG9nV2luZG93c1N5c3RlbUVycm9yKCJEZXN0cm95V2luZG93Iik7CisgIGlmIChmb250KSB7CisgICAgRGVsZXRlT2JqZWN0KGZvbnQpOworICAgIGZvbnQgPSBOVUxMOworICB9CisjZWxzZSAvKiBVU0VfICovCisjZXJyb3IgVG9vbGtpdCB0b3BsZXZlbCBkZXN0cnVjdGlvbiB1bnNwZWNpZmllZAorI2VuZGlmIC8qIFVTRV8gKi8KK30KKworc3RhdGljIHZvaWQgYnJsX2Rlc3RydWN0KEJyYWlsbGVEaXNwbGF5ICpicmwpCit7CisgIGRlc3Ryb3lUb3BsZXZlbCgpOworfQorCitzdGF0aWMgaW50IGJybF93cml0ZVdpbmRvdyhCcmFpbGxlRGlzcGxheSAqYnJsLCBjb25zdCB3Y2hhcl90ICp0ZXh0KQoreworICB1bnNpZ25lZCBpbnQgZnJvbSwgdG87CisgIHdjaGFyX3Qgd2M7CisgIGludCBpOworI2lmZGVmIFVTRV9YTQorICBjaGFyIGRhdGFbMl07CisjZWxpZiBkZWZpbmVkKFVTRV9YQVcpCisgIFV0ZjhCdWZmZXIgdXRmODsKKyNlbGlmIGRlZmluZWQoVVNFX1dJTkRPV1MpCisgIHdjaGFyX3QgZGF0YVszXTsKKyNlbmRpZgorCisgIGlmIChsYXN0Y3Vyc29yICE9IGJybC0+Y3Vyc29yKSB7CisgICAgaWYgKGxhc3RjdXJzb3IgIT0gQlJMX05PX0NVUlNPUikgeworI2lmIGRlZmluZWQoVVNFX1hUKQorICAgICAgWHRWYVNldFZhbHVlcyhkaXNwbGF5W2xhc3RjdXJzb3JdLAorCVh0TmZvcmVncm91bmQsIGRpc3BsYXlGb3JlZ3JvdW5kLAorCVh0TmJhY2tncm91bmQsIGRpc3BsYXlCYWNrZ3JvdW5kLAorCU5VTEwpOworI2VsaWYgZGVmaW5lZChVU0VfV0lORE9XUykKKyAgICAgIFNlbmRNZXNzYWdlKGRpc3BsYXlbbGFzdGN1cnNvcl0sQk1fU0VUU1RBVEUsRkFMU0UsMCk7CisjZWxzZSAvKiBVU0VfICovCisjZXJyb3IgVG9vbGtpdCBjdXJzb3Igbm90IHNwZWNpZmllZAorI2VuZGlmIC8qIFVTRV8gKi8KKyAgICB9CisgICAgbGFzdGN1cnNvciA9IGJybC0+Y3Vyc29yOworICAgIGlmIChsYXN0Y3Vyc29yICE9IEJSTF9OT19DVVJTT1IpIHsKKyNpZiBkZWZpbmVkKFVTRV9YVCkKKyAgICAgIFh0VmFTZXRWYWx1ZXMoZGlzcGxheVtsYXN0Y3Vyc29yXSwKKwlYdE5mb3JlZ3JvdW5kLCBkaXNwbGF5QmFja2dyb3VuZCwKKwlYdE5iYWNrZ3JvdW5kLCBkaXNwbGF5Rm9yZWdyb3VuZCwKKwlOVUxMKTsKKyNlbGlmIGRlZmluZWQoVVNFX1dJTkRPV1MpCisgICAgICBTZW5kTWVzc2FnZShkaXNwbGF5W2xhc3RjdXJzb3JdLEJNX1NFVFNUQVRFLFRSVUUsMCk7CisjZWxzZSAvKiBVU0VfICovCisjZXJyb3IgVG9vbGtpdCBjdXJzb3Igbm90IHNwZWNpZmllZAorI2VuZGlmIC8qIFVTRV8gKi8KKyAgICB9CisgIH0KKworICBpZiAodGV4dCAmJiB3bWVtY21wKHRleHQsZGlzcGxheWVkVmlzdWFsLGJybC0+dGV4dFJvd3MqYnJsLT50ZXh0Q29sdW1ucykpIHsKKyAgICBmb3IgKGk9MDtpPGJybC0+dGV4dFJvd3MqYnJsLT50ZXh0Q29sdW1ucztpKyspIHsKKyAgICAgIGlmIChkaXNwbGF5ZWRWaXN1YWxbaV0gIT0gdGV4dFtpXSkgeworCXdjID0gdGV4dFtpXTsKKwlpZiAod2MgPT0gMCkgd2MgPSBXQ19DKCcgJyk7CisjaWZkZWYgVVNFX1hNCisJaWYgKHdjIDwgMHgxMDApCisJICBkYXRhWzBdID0gd2M7CisJZWxzZQorCSAgZGF0YVswXSA9ICc/JzsKKwlkYXRhWzFdID0gMDsKKyNlbGlmIGRlZmluZWQoVVNFX1hBVykKKwljb252ZXJ0V2NoYXJUb1V0Zjgod2MsIHV0ZjgpOworI2VsaWYgZGVmaW5lZChVU0VfV0lORE9XUykKKwlkYXRhWzBdID0gd2M7CisJaWYgKGRhdGFbMF09PVdDX0MoJyYnKSkgeworCSAgZGF0YVsxXSA9IFdDX0MoJyYnKTsKKwkgIGRhdGFbMl0gPSAwOworCX0gZWxzZQorCSAgZGF0YVsxXT0wOworI2Vsc2UgLyogVVNFXyAqLworI2Vycm9yIFRvb2xraXQgY3Vyc29yIG5vdCBzcGVjaWZpZWQKKyNlbmRpZiAvKiBVU0VfICovCisKKyNpZiBkZWZpbmVkKFVTRV9YVCkKKyNpZmRlZiBVU0VfWE0KKwlkaXNwbGF5X2NzID0gWG1TdHJpbmdDcmVhdGVMb2NhbGl6ZWQoZGF0YSk7CisjZW5kaWYgLyogVVNFX1hNICovCisJWHRWYVNldFZhbHVlcyhkaXNwbGF5W2ldLAorI2lmZGVmIFVTRV9YQVcKKwkgIFh0TmxhYmVsLCB1dGY4LAorI2Vsc2UgLyogVVNFX1hBVyAqLworCSAgWG1ObGFiZWxTdHJpbmcsIGRpc3BsYXlfY3MsCisjZW5kaWYgLyogVVNFX1hBVyAqLworCSAgTlVMTCk7CisjaWZkZWYgVVNFX1hNCisJWG1TdHJpbmdGcmVlKGRpc3BsYXlfY3MpOworI2VuZGlmIC8qIFVTRV9YTSAqLworI2VsaWYgZGVmaW5lZChVU0VfV0lORE9XUykKKwlTZXRXaW5kb3dUZXh0VyhkaXNwbGF5W2ldLGRhdGEpOworI2Vsc2UgLyogVVNFXyAqLworI2Vycm9yIFRvb2xraXQgZGlzcGxheSByZWZyZXNoIHVuc3BlY2lmaWVkCisjZW5kaWYgLyogVVNFXyAqLworCWRpc3BsYXllZFZpc3VhbFtpXSA9IHRleHRbaV07CisgICAgICB9CisgICAgfQorICB9CisKKyNpZiBkZWZpbmVkKFVTRV9YQVcpIHx8IGRlZmluZWQoVVNFX1dJTkRPV1MpCisgIGlmICghY2VsbHNIYXZlQ2hhbmdlZChkaXNwbGF5ZWRXaW5kb3csYnJsLT5idWZmZXIsYnJsLT50ZXh0Um93cypicmwtPnRleHRDb2x1bW5zLCZmcm9tLCZ0byxOVUxMKSB8fCAhZGlzcGxheWJbMF0pIHJldHVybiAxOworCisgIGZvciAoaT1mcm9tO2k8dG87aSsrKSB7CisgICAgdW5zaWduZWQgY2hhciBjID0gYnJsLT5idWZmZXJbaV07CisgICAgYyA9CisgICAgICAgKCEhKGMmQlJMX0RPVDEpKTw8MAorICAgICAgfCghIShjJkJSTF9ET1QyKSk8PDEKKyAgICAgIHwoISEoYyZCUkxfRE9UMykpPDwyCisgICAgICB8KCEhKGMmQlJMX0RPVDQpKTw8MworICAgICAgfCghIShjJkJSTF9ET1Q1KSk8PDQKKyAgICAgIHwoISEoYyZCUkxfRE9UNikpPDw1CisgICAgICB8KCEhKGMmQlJMX0RPVDcpKTw8NgorICAgICAgfCghIShjJkJSTF9ET1Q4KSk8PDc7CisjaWZkZWYgVVNFX1hBVworICAgIGNvbnZlcnRXY2hhclRvVXRmOChVTklDT0RFX0JSQUlMTEVfUk9XIHwgYywgdXRmOCk7CisKKyAgICBYdFZhU2V0VmFsdWVzKGRpc3BsYXliW2ldLCBYdE5sYWJlbCwgdXRmOCwgTlVMTCk7CisjZWxpZiBkZWZpbmVkKFVTRV9XSU5ET1dTKQorICAgIGRhdGFbMF0gPSBVTklDT0RFX0JSQUlMTEVfUk9XIHwgYzsKKyAgICBkYXRhWzFdID0gMDsKKyAgICBTZXRXaW5kb3dUZXh0VyhkaXNwbGF5YltpXSxkYXRhKTsKKyNlbmRpZiAvKiBVU0VfV0lORE9XUyAqLworICB9CisjZW5kaWYgLyogVVNFX1hBVyB8fCBVU0VfV0lORE9XUyAqLworICByZXR1cm4gMTsKK30KZGlmZiAtLWdpdCBhL0RyaXZlcnMvQnJhaWxsZS9YV2luZG93L2JyYWlsbGUuaCBiL0RyaXZlcnMvQnJhaWxsZS9YV2luZG93L2JyYWlsbGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xY2I1ZTc3Ci0tLSAvZGV2L251bGwKKysrIGIvRHJpdmVycy9CcmFpbGxlL1hXaW5kb3cvYnJhaWxsZS5oCkBAIC0wLDAgKzEsMTcgQEAKKy8qCisgKiBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorICogICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorICoKKyAqIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorICoKKyAqIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyAqLwpkaWZmIC0tZ2l0IGEvRHJpdmVycy9CcmxBUEkvV2luZG93RXllcy9NYWtlZmlsZS5pbiBiL0RyaXZlcnMvQnJsQVBJL1dpbmRvd0V5ZXMvTWFrZWZpbGUuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2M0MjhiMQotLS0gL2Rldi9udWxsCisrKyBiL0RyaXZlcnMvQnJsQVBJL1dpbmRvd0V5ZXMvTWFrZWZpbGUuaW4KQEAgLTAsMCArMSw0MCBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorIyAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyMKKyMgQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorIworIyBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorIworIyBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisjIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyMgbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisjCisjIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK1dFX09CSlMgPSB3ZWJybG9lbS4kTworV0VfTkFNRSA9IHdlYnJsb2VtMTA5CitXRV9MSUIgPSAkKFdFX05BTUUpLiQoTElCX0VYVCkKK1dFX0RMTCA9ICQoV0VfTkFNRSkuJChMSUJfRVhUKQorV0VfSU1QTElCID0gJChBUkNfUEZYKSQoV0VfTkFNRSkuJChBUkNfRVhUKQorV0VfSU1QTElCX1ZFUlNJT05FRCA9ICQoQVJDX1BGWCkkKFdFX05BTUUpLiQoQVJDX0VYVCkKK1dFX0RFRiA9ICQoV0VfTkFNRSkuZGVmCisKK3dlOiAkKFdFX0RZTkFNSUNfTElCUkFSWSkKKword2UtZHluYW1pYy1saWJyYXJ5LXdpbmRvd3M6ICQoV0VfRExMKQorJChXRV9ETEwpOiAkKFdFX09CSlMpIGJybGFwaQorCS1ybSAtZiBpbXBsaWIuYSBsaWIuZGVmCisJJChNS0xJQjo8bmFtZT49JHtXRV9MSUJ9KSAkQCAkKFdFX09CSlMpICQoQVBJX0xJQlMpCisJWyAhIC1mIGltcGxpYi5hIF0gfHwgbXYgaW1wbGliLmEgJChXRV9JTVBMSUIpCisJWyAhIC1mIGxpYi5kZWYgXSB8fCBtdiBsaWIuZGVmICQoV0VfREVGKQorCit3ZWJybG9lbS4kTzoKKwkkKENDKSAkKExJQkNGTEFHUykgLWMgJChTUkNfRElSKS93ZWJybG9lbS5jCisKK3Rlc3QkWDogd2UtZHluYW1pYy1saWJyYXJ5LXdpbmRvd3MgJChTUkNfRElSKS90ZXN0LmMKKwkkKENDKSAkKExERkxBR1MpIC1vICRAICQoU1JDX0RJUikvdGVzdC5jIC1MLiAtbCQoV0VfTkFNRSkgJChMRExJQlMpCmRpZmYgLS1naXQgYS9Ecml2ZXJzL0JybEFQSS9XaW5kb3dFeWVzL1JFQURNRSBiL0RyaXZlcnMvQnJsQVBJL1dpbmRvd0V5ZXMvUkVBRE1FCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY2ZjY4NGYKLS0tIC9kZXYvbnVsbAorKysgYi9Ecml2ZXJzL0JybEFQSS9XaW5kb3dFeWVzL1JFQURNRQpAQCAtMCwwICsxLDM1IEBACitTdGFydGluZyBmcm9tIHZlcnNpb24gNy4wLCBXaW5kb3dFeWVzIGNhbiB1c2UgT0VNLXByb3ZpZGVkIGRyaXZlcnMsIHRoaXMgaXMKK3N1Y2ggZHJpdmVyIGZvciBtYWtpbmcgaXQgdXNlIHRoZSBCcmxBUEkgaW50ZXJmYWNlLgorCitJdCBjYW4gYmUgYWRkZWQgYnkKKyogY29weWluZyBiaW4vd2VicmxvZW0xMDkuZGxsIGFuZCBiaW4vYnJsYXBpLTAuNS5kbGwgdG8gdGhlIHdpbmRvdyBleWVzCitkaXJlY3RvcnksIGFsb25nIHdpbmV5ZXMuZXhlLAorKiBjb3B5L3Bhc3RpbmcgdGhlIGNvbnRlbnQgb2YgYnJhaWxsZS5pbmkgaW50byB5b3VyIGJyYWlsbGUuaW5pIChmb3VuZCBpbiB0aGUKK0FwcGxpY2F0aW9uIERhdGFcR1cgTWljcm9cV2luZG93LUV5ZXMvdXNlcnMvZGVmYXVsdC8gKSwgYW5kIGluIHRoZSBzYW1lIGZpbGUsCithcHBlbmRpbmcgdGhlIGZvbGxvd2luZyB0d28gbGluZXMgdG8gdGhlIFtCcmFpbGxlRGlzcGxheXNdIHNlY3Rpb246CisKK2JybCMjPW9lbTEwOQorYnJsIyMjPW9lbTEwOS1yYXcKKword2hlcmUgIyMgYW5kICMjIyBhcmUgdGhlIG51bWJlcnMgcmlnaHQgYWZ0ZXIgdGhlIGxhc3Qgb25lIG9mIHRoYXQgc2VjdGlvbiwgZS5nLgoraWYgdGhlcmUgd2FzCisKK2JybDU1PXplcGh5cgorCit0aGVuIHRoZXNlIGxpbmVzIHNob3VsZCBiZSBhZGRlZDoKKworYnJsNTY9b2VtMTA5Citicmw1Nz1vZW0xMDktcmF3CisKK1Jlc3RhcnQgV2luZG93RXllcywgdHdvIEJybEFQSSBjaG9pY2VzIHNob3VsZCBub3cgYXBwZWFyIGxhc3QgaW4gdGhlIGxpc3QuCisKKy0gQnJsQVBJIGdlbmVyaWMgc2hvdWxkIHdvcmsgd2l0aCBhbnkgZGV2aWNlLCBhcyBpdCBiaW5kcyB0aGUgYnJsdHR5IGNvbW1hbmRzIHRvCisgIFdpbmRvd0V5ZXMgY29tbWFuZHMuCistIEJybEFQSSBkZXZpY2Utc3BlY2lmaWMgcGVybWl0cyB0byBkZWZpbmUgZGV2aWNlLXNwZWNpZmljIGJpbmRpbmdzOiBXaW5kb3dFeWVzCisgIHdpbGwgZ2V0IGtleWJvYXJkIGtleWNvZGUgYXMgc3VjaCwgdGhlIHVzZXIgY2FuIHRoZW4gYmluZCB0aGVtIGF0IHdpbGwgZnJvbQorICB0aGUgV2luZG93RXllcyBpbnRlcmZhY2UuCisKK05vdGUgdGhhdCBoZXJlIHRoZSBDb20xL0NvbTIgcGFyYW1ldGVyIGRvZXMgbm90IHJlZmVyIHRvIGFuIGFjdHVhbCBzZXJpYWwKK2RldmljZSAodGhlIHNlcmlhbC91c2IgY29uZmlndXJhdGlvbiBzaGFsbCBiZSBkb25lIGluIGJybHR0eS5jb25mKSwgaXQgcmVmZXJzIHRvCitob3cga2V5Y29kZXMgc2hvdWxkIGJlIHJlcG9ydGVkIHRvIFdpbmRvd0V5ZXM6IENvbTEgc2hvdWxkIGFsd2F5cyBiZSB1c2VkIGZvcgorQnJsQVBJIGdlbmVyaWMsIGFuZCBDb20yIGZvciBCcmxBUEkgZGV2aWNlLXNwZWNpZmljLgpkaWZmIC0tZ2l0IGEvRHJpdmVycy9CcmxBUEkvV2luZG93RXllcy9icmFpbGxlLmluaSBiL0RyaXZlcnMvQnJsQVBJL1dpbmRvd0V5ZXMvYnJhaWxsZS5pbmkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTNmYmMyZAotLS0gL2Rldi9udWxsCisrKyBiL0RyaXZlcnMvQnJsQVBJL1dpbmRvd0V5ZXMvYnJhaWxsZS5pbmkKQEAgLTAsMCArMSwxMzkgQEAKK1tvZW0xMDldCitOYW1lPUJybEFQSSBnZW5lcmljCitUeXBlPTEwOQorYjE9Z28gdXAgb25lIGxpbmUKK2IyPWdvIGRvd24gb25lIGxpbmUKK2IzPWdvIHVwIHNldmVyYWwgbGluZXMKK2I0PWdvIGRvd24gc2V2ZXJhbCBsaW5lcworYjU9Z28gdXAgdG8gbmVhcmVzdCBsaW5lIHdpdGggZGlmZmVyZW50IGNvbnRlbnQKK2I2PWdvIGRvd24gdG8gbmVhcmVzdCBsaW5lIHdpdGggZGlmZmVyZW50IGNvbnRlbnQKK2I3PWdvIHVwIHRvIG5lYXJlc3QgbGluZSB3aXRoIGRpZmZlcmVudCBoaWdobGlnaHRpbmcKK2I4PWdvIGRvd24gdG8gbmVhcmVzdCBsaW5lIHdpdGggZGlmZmVyZW50IGhpZ2hsaWdodGluZworYjk9Z28gdG8gdG9wIGxpbmUKK2IxMD1nbyB0byBib3R0b20gbGluZQorYjExPWdvIHRvIGJlZ2lubmluZyBvZiB0b3AgbGluZQorYjEyPWdvIHRvIGJlZ2lubmluZyBvZiBib3R0b20gbGluZQorYjEzPWdvIHVwIHRvIGxhc3QgbGluZSBvZiBwcmV2aW91cyBwYXJhZ3JhcGgKK2IxND1nbyBkb3duIHRvIGZpcnN0IGxpbmUgb2YgbmV4dCBwYXJhZ3JhcGgKK2IxNT1nbyB1cCB0byBwcmV2aW91cyBjb21tYW5kIHByb21wdAorYjE2PWdvIGRvd24gdG8gbmV4dCBjb21tYW5kIHByb21wdAorYjE3PWdvIGxlZnQgb25lIGNoYXJhY3RlcgorYjE4PWdvIHJpZ2h0IG9uZSBjaGFyYWN0ZXIKK2IxOT1nbyBsZWZ0IGhhbGYgYSB3aW5kb3cKK2IyMD1nbyByaWdodCBoYWxmIGEgd2luZG93CitiMjE9Z28gbGVmdCBvbmUgd2luZG93CitiMjI9Z28gcmlnaHQgb25lIHdpbmRvdworYjIzPWdvIGxlZnQgdG8gbmVhcmVzdCBub24tYmxhbmsgd2luZG93CitiMjQ9Z28gcmlnaHQgdG8gbmVhcmVzdCBub24tYmxhbmsgd2luZG93CitiMjU9Z28gdG8gYmVnaW5uaW5nIG9mIGxpbmUKK2IyNj1nbyB0byBlbmQgb2YgbGluZQorYjI3PWdvIHRvIGN1cnNvcgorYjI4PWdvIGJhY2sgKHVuZG8gdW5leHBlY3RlZCBjdXJzb3IgdHJhY2tpbmcgbW90aW9uKQorYjI5PXRvZ2dsZSBzY3JlZW4gbW9kZSBmcm96ZW4vbGl2ZQorYjMwPXRvZ2dsZSBkaXNwbGF5IG1vZGUgYXR0cmlidXRlcy90ZXh0CitiMzE9dG9nZ2xlIHRleHQgc3R5bGUgNi1kb3QvOC1kb3QKK2IzMj10b2dnbGUgc2xpZGluZyB3aW5kb3cgb24vb2ZmCitiMzM9dG9nZ2xlIHNraXBwaW5nIG9mIGxpbmVzIHdpdGggaWRlbnRpY2FsIGNvbnRlbnQgb24vb2ZmCitiMzQ9dG9nZ2xlIHNraXBwaW5nIG9mIGJsYW5rIHdpbmRvd3Mgb24vb2ZmCitiMzU9dG9nZ2xlIGN1cnNvciB2aXNpYmlsaXR5IG9uL29mZgorYjM2PXRvZ2dsZSBjdXJzb3IgdHJhY2tpbmcgb24vb2ZmCitiMzc9dG9nZ2xlIGN1cnNvciBzdHlsZSBibG9jay91bmRlcmxpbmUKK2IzOD10b2dnbGUgY3Vyc29yIGJsaW5raW5nIG9uL29mZgorYjM5PXRvZ2dsZSBhdHRyaWJ1dGUgdW5kZXJsaW5pbmcgb24vb2ZmCitiNDA9dG9nZ2xlIGF0dHJpYnV0ZSBibGlua2luZyBvbi9vZmYKK2I0MT10b2dnbGUgY2FwaXRhbCBsZXR0ZXIgYmxpbmtpbmcgb24vb2ZmCitiNDI9dG9nZ2xlIGFsZXJ0IHR1bmVzIG9uL29mZgorYjQzPXRvZ2dsZSBhdXRvcmVwZWF0IG9uL29mZgorYjQ0PXRvZ2dsZSBhdXRvc3BlYWsgb24vb2ZmCitiNDU9ZW50ZXIvbGVhdmUgaGVscCBkaXNwbGF5CitiNDY9ZW50ZXIvbGVhdmUgc3RhdHVzIGRpc3BsYXkKK2I0Nz1lbnRlci9sZWF2ZSBjb21tYW5kIGxlYXJuIG1vZGUKK2I0OD1lbnRlci9sZWF2ZSBwcmVmZXJlbmNlcyBtZW51CitiNDk9c2F2ZSBjdXJyZW50IHByZWZlcmVuY2VzCitiNTA9cmVzdG9yZSBzYXZlZCBwcmVmZXJlbmNlcworYjUxPXN0b3Agc3BlYWtpbmcgaW1tZWRpYXRlbHkKK2I1Mj1nbyB0byBjdXJyZW50IChtb3N0IHJlY2VudCkgc3BlZWNoIHBvc2l0aW9uCitiNTM9c3BlYWsgY3VycmVudCBsaW5lCitiNTQ9c3BlYWsgZnJvbSB0b3Agb2Ygc2NyZWVuIHRocm91Z2ggY3VycmVudCBsaW5lCitiNTU9c3BlYWsgZnJvbSBjdXJyZW50IGxpbmUgdGhyb3VnaCBib3R0b20gb2Ygc2NyZWVuCitiNTY9ZGVjcmVhc2Ugc3BlZWNoIHJhdGUKK2I1Nz1pbmNyZWFzZSBzcGVlY2ggcmF0ZQorYjU4PWRlY3JlYXNlIHNwZWVjaCB2b2x1bWUKK2I1OT1pbmNyZWFzZSBzcGVlY2ggdm9sdW1lCitiNjA9c3dpdGNoIHRvIHByZXZpb3VzIHZpcnR1YWwgdGVybWluYWwKK2I2MT1zd2l0Y2ggdG8gbmV4dCB2aXJ0dWFsIHRlcm1pbmFsCitiNjI9YnJpbmcgY3Vyc29yIHRvIGxpbmUgKG5vIGhvcml6b250YWwgbW90aW9uKQorYjYzPXJlaW5pdGlhbGl6ZSBicmFpbGxlIGRyaXZlcgorYjY0PXJlaW5pdGlhbGl6ZSBzcGVlY2ggZHJpdmVyCiticmFpbGxlcG9ydD1Db20xCithY3Rpb24xPTEwNDg1NzY7MDsxMDAzCithY3Rpb24xPTIwOTcxNTI7MDsxMDA0CisKK1tvZW0xMDktcmF3XQorTmFtZT1CcmxBUEkgZGV2aWNlLXNwZWNpZmljCitUeXBlPTEwOQorYjE9YjAKK2IyPWIxCitiMz1iMgorYjQ9YjMKK2I1PWI0CitiNj1iNQorYjc9YjYKK2I4PWI3CitiOT1iOAorYjEwPWI5CitiMTE9YjEwCitiMTI9YjExCitiMTM9YjEyCitiMTQ9YjEzCitiMTU9YjE0CitiMTY9YjE1CitiMTc9YjE2CitiMTg9YjE3CitiMTk9YjE4CitiMjA9YjE5CitiMjE9YjIwCitiMjI9YjIxCitiMjM9YjIyCitiMjQ9YjIzCitiMjU9YjI0CitiMjY9YjI1CitiMjc9YjI2CitiMjg9YjI3CitiMjk9YjI4CitiMzA9YjI5CitiMzE9YjMwCitiMzI9YjMxCitiMzM9YjMyCitiMzQ9YjMzCitiMzU9YjM0CitiMzY9YjM1CitiMzc9YjM2CitiMzg9YjM3CitiMzk9YjM4CitiNDA9YjM5CitiNDE9YjQwCitiNDI9YjQxCitiNDM9YjQyCitiNDQ9YjQzCitiNDU9YjQ0CitiNDY9YjQ1CitiNDc9YjQ2CitiNDg9YjQ3CitiNDk9YjQ4CitiNTA9YjQ5CitiNTE9YjUwCitiNTI9YjUxCitiNTM9YjUyCitiNTQ9YjUzCitiNTU9YjU0CitiNTY9YjU1CitiNTc9YjU2CitiNTg9YjU3CitiNTk9YjU4CitiNjA9YjU5CitiNjE9YjYwCitiNjI9YjYxCitiNjM9YjYyCitiNjQ9YjYzCiticmFpbGxlcG9ydD1Db20yCmRpZmYgLS1naXQgYS9Ecml2ZXJzL0JybEFQSS9XaW5kb3dFeWVzL3Rlc3QuYyBiL0RyaXZlcnMvQnJsQVBJL1dpbmRvd0V5ZXMvdGVzdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZiODMyZTYKLS0tIC9kZXYvbnVsbAorKysgYi9Ecml2ZXJzL0JybEFQSS9XaW5kb3dFeWVzL3Rlc3QuYwpAQCAtMCwwICsxLDU1IEBACisvKgorICogQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyAqICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyAqCisgKiBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorICoKKyAqIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyAqCisgKiBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisgKi8KKworI2luY2x1ZGUgPHdpbmRvd3MuaD4KKyNpbmNsdWRlIDxzdGRib29sLmg+CisjaW5jbHVkZSA8YXNzZXJ0Lmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKworI2luY2x1ZGUgIndlYnJsb2VtLmgiCisKK2ludCBtYWluKHZvaWQpIHsKKyAgRFdPUkQgaGFuZGxlOworICBEV09SRCBrZXkxLCBrZXkyOworICBpbnQgcm91dGUsIHJvdXRlMjsKKyAgYm9vbCBzdGF0dXM7CisgIGludCB4LCBzOworICB1bnNpZ25lZCBjaGFyIHRlc3RbXSA9ezAsIDEsIDIsIDQsIDgsIDE2LCAzMiwgNjQsIDEyOCwgMjU1fTsKKyAgcHJpbnRmKCJjb25uZWN0aW5nXG4iKTsKKyAgYXNzZXJ0KFdFQnJhaWxsZU9wZW4oMCwgMCwgJmhhbmRsZSkpOworICBwcmludGYoImdldHRpbmcgaW5mb1xuIik7CisgIGFzc2VydChXRUdldEJyYWlsbGVEaXNwbGF5SW5mbyhoYW5kbGUsICZ4LCAmcykpOworICBwcmludGYoImRpc3BsYXkgJWQrJWRcbiIsIHgsIHMpOworICBhc3NlcnQoV0VVcGRhdGVCcmFpbGxlRGlzcGxheShoYW5kbGUsIHRlc3QsIHNpemVvZih0ZXN0KSwgTlVMTCwgMCkpOworICBwcmludGYoIndyb3RlXG4iKTsKKyAgd2hpbGUgKCFXRUdldEJyYWlsbGVLZXkoaGFuZGxlLCAma2V5MSwgJmtleTIsICZyb3V0ZSwgJnJvdXRlMiwgJnN0YXR1cykpCisgICAgU2xlZXAoNTApOworICBwcmludGYoImtleSAlMDhseCUwOGx4ICVkICVkICVkXG4iLCBrZXkyLCBrZXkxLCByb3V0ZSwgcm91dGUyLCBzdGF0dXMpOworICB3aGlsZSAoIVdFR2V0QnJhaWxsZUtleShoYW5kbGUsICZrZXkxLCAma2V5MiwgJnJvdXRlLCAmcm91dGUyLCAmc3RhdHVzKSkKKyAgICBTbGVlcCg1MCk7CisgIHByaW50Zigia2V5ICUwOGx4JTA4bHggJWQgJWQgJWRcbiIsIGtleTIsIGtleTEsIHJvdXRlLCByb3V0ZTIsIHN0YXR1cyk7CisgIHdoaWxlICghV0VHZXRCcmFpbGxlS2V5KGhhbmRsZSwgJmtleTEsICZrZXkyLCAmcm91dGUsICZyb3V0ZTIsICZzdGF0dXMpKQorICAgIFNsZWVwKDUwKTsKKyAgcHJpbnRmKCJrZXkgJTA4bHglMDhseCAlZCAlZCAlZFxuIiwga2V5Miwga2V5MSwgcm91dGUsIHJvdXRlMiwgc3RhdHVzKTsKKyAgd2hpbGUgKCFXRUdldEJyYWlsbGVLZXkoaGFuZGxlLCAma2V5MSwgJmtleTIsICZyb3V0ZSwgJnJvdXRlMiwgJnN0YXR1cykpCisgICAgU2xlZXAoNTApOworICBwcmludGYoImtleSAlMDhseCUwOGx4ICVkICVkICVkXG4iLCBrZXkyLCBrZXkxLCByb3V0ZSwgcm91dGUyLCBzdGF0dXMpOworICBhc3NlcnQoV0VCcmFpbGxlQ2xvc2UoaGFuZGxlKSk7CisgIHJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvRHJpdmVycy9CcmxBUEkvV2luZG93RXllcy93ZWJybG9lbS5jIGIvRHJpdmVycy9CcmxBUEkvV2luZG93RXllcy93ZWJybG9lbS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMyNGE0YjIKLS0tIC9kZXYvbnVsbAorKysgYi9Ecml2ZXJzL0JybEFQSS9XaW5kb3dFeWVzL3dlYnJsb2VtLmMKQEAgLTAsMCArMSwyNDQgQEAKKy8qCisgKiBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorICogICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorICoKKyAqIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorICoKKyAqIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyAqLworCisjZGVmaW5lIEJSTEFQSV9OT19TSU5HTEVfU0VTU0lPTgorI2RlZmluZSBCUkxBUElfTk9fREVQUkVDQVRFRAorCisjaW5jbHVkZSA8d2luZG93cy5oPgorI2luY2x1ZGUgPHN0ZGJvb2wuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgImJybGFwaS5oIgorCisjaW5jbHVkZSAid2VicmxvZW0uaCIKKworI2RlZmluZSBDKGNtZCkgKEJSTEFQSV9LRVlfQ01EXyMjY21kICYgQlJMQVBJX0tFWV9DTURfQVJHX01BU0spCisKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjb21tYW5kX2J1dHRvbltdID0geworICBbIEMoTE5VUCkgXSA9CQkJMSAgLyogZ28gdXAgb25lIGxpbmUgKi8sCisgIFsgQyhMTkROKSBdID0JCQkyICAvKiBnbyBkb3duIG9uZSBsaW5lICovLAorICBbIEMoV0lOVVApIF0gPQkJMyAgLyogZ28gdXAgc2V2ZXJhbCBsaW5lcyAqLywKKyAgWyBDKFdJTkROKSBdID0JCTQgIC8qIGdvIGRvd24gc2V2ZXJhbCBsaW5lcyAqLywKKyAgWyBDKFBSRElGTE4pIF0gPQkJNSAgLyogZ28gdXAgdG8gbmVhcmVzdCBsaW5lIHdpdGggZGlmZmVyZW50IGNvbnRlbnQgKi8sCisgIFsgQyhOWERJRkxOKSBdID0JCTYgIC8qIGdvIGRvd24gdG8gbmVhcmVzdCBsaW5lIHdpdGggZGlmZmVyZW50IGNvbnRlbnQgKi8sCisgIFsgQyhBVFRSVVApIF0gPQkJNyAgLyogZ28gdXAgdG8gbmVhcmVzdCBsaW5lIHdpdGggZGlmZmVyZW50IGhpZ2hsaWdodGluZyAqLywKKyAgWyBDKEFUVFJETikgXSA9CQk4ICAvKiBnbyBkb3duIHRvIG5lYXJlc3QgbGluZSB3aXRoIGRpZmZlcmVudCBoaWdobGlnaHRpbmcgKi8sCisgIFsgQyhUT1ApIF0gPQkJCTkgIC8qIGdvIHRvIHRvcCBsaW5lICovLAorICBbIEMoQk9UKSBdID0JCQkxMCAvKiBnbyB0byBib3R0b20gbGluZSAqLywKKyAgWyBDKFRPUF9MRUZUKSBdID0JCTExIC8qIGdvIHRvIGJlZ2lubmluZyBvZiB0b3AgbGluZSAqLywKKyAgWyBDKEJPVF9MRUZUKSBdID0JCTEyIC8qIGdvIHRvIGJlZ2lubmluZyBvZiBib3R0b20gbGluZSAqLywKKyAgWyBDKFBSUEdSUEgpIF0gPQkJMTMgLyogZ28gdXAgdG8gbGFzdCBsaW5lIG9mIHByZXZpb3VzIHBhcmFncmFwaCAqLywKKyAgWyBDKE5YUEdSUEgpIF0gPQkJMTQgLyogZ28gZG93biB0byBmaXJzdCBsaW5lIG9mIG5leHQgcGFyYWdyYXBoICovLAorICBbIEMoUFJQUk9NUFQpIF0gPQkJMTUgLyogZ28gdXAgdG8gcHJldmlvdXMgY29tbWFuZCBwcm9tcHQgKi8sCisgIFsgQyhOWFBST01QVCkgXSA9CQkxNiAvKiBnbyBkb3duIHRvIG5leHQgY29tbWFuZCBwcm9tcHQgKi8sCisgIFsgQyhDSFJMVCkgXSA9CQkxNyAvKiBnbyBsZWZ0IG9uZSBjaGFyYWN0ZXIgKi8sCisgIFsgQyhDSFJSVCkgXSA9CQkxOCAvKiBnbyByaWdodCBvbmUgY2hhcmFjdGVyICovLAorICBbIEMoSFdJTkxUKSBdID0JCTE5IC8qIGdvIGxlZnQgaGFsZiBhIHdpbmRvdyAqLywKKyAgWyBDKEhXSU5SVCkgXSA9CQkyMCAvKiBnbyByaWdodCBoYWxmIGEgd2luZG93ICovLAorICBbIEMoRldJTkxUKSBdID0JCTIxIC8qIGdvIGxlZnQgb25lIHdpbmRvdyAqLywKKyAgWyBDKEZXSU5SVCkgXSA9CQkyMiAvKiBnbyByaWdodCBvbmUgd2luZG93ICovLAorICBbIEMoRldJTkxUU0tJUCkgXSA9CQkyMyAvKiBnbyBsZWZ0IHRvIG5lYXJlc3Qgbm9uLWJsYW5rIHdpbmRvdyAqLywKKyAgWyBDKEZXSU5SVFNLSVApIF0gPQkJMjQgLyogZ28gcmlnaHQgdG8gbmVhcmVzdCBub24tYmxhbmsgd2luZG93ICovLAorICBbIEMoTE5CRUcpIF0gPQkJMjUgLyogZ28gdG8gYmVnaW5uaW5nIG9mIGxpbmUgKi8sCisgIFsgQyhMTkVORCkgXSA9CQkyNiAvKiBnbyB0byBlbmQgb2YgbGluZSAqLywKKyAgWyBDKEhPTUUpIF0gPQkJCTI3IC8qIGdvIHRvIGN1cnNvciAqLywKKyAgWyBDKEJBQ0spIF0gPQkJCTI4IC8qIGdvIGJhY2sgKHVuZG8gdW5leHBlY3RlZCBjdXJzb3IgdHJhY2tpbmcgbW90aW9uKSAqLywKKyAgWyBDKEZSRUVaRSkgXSA9CQkyOSAvKiB0b2dnbGUgc2NyZWVuIG1vZGUgZnJvemVuL2xpdmUgKi8sCisgIFsgQyhESVNQTUQpIF0gPQkJMzAgLyogdG9nZ2xlIGRpc3BsYXkgbW9kZSBhdHRyaWJ1dGVzL3RleHQgKi8sCisgIFsgQyhTSVhET1RTKSBdID0JCTMxIC8qIHRvZ2dsZSB0ZXh0IHN0eWxlIDYtZG90LzgtZG90ICovLAorICBbIEMoU0xJREVXSU4pIF0gPQkJMzIgLyogdG9nZ2xlIHNsaWRpbmcgd2luZG93IG9uL29mZiAqLywKKyAgWyBDKFNLUElETE5TKSBdID0JCTMzIC8qIHRvZ2dsZSBza2lwcGluZyBvZiBsaW5lcyB3aXRoIGlkZW50aWNhbCBjb250ZW50IG9uL29mZiAqLywKKyAgWyBDKFNLUEJMTktXSU5TKSBdID0JCTM0IC8qIHRvZ2dsZSBza2lwcGluZyBvZiBibGFuayB3aW5kb3dzIG9uL29mZiAqLywKKyAgWyBDKENTUlZJUykgXSA9CQkzNSAvKiB0b2dnbGUgY3Vyc29yIHZpc2liaWxpdHkgb24vb2ZmICovLAorICBbIEMoQ1NSVFJLKSBdID0JCTM2IC8qIHRvZ2dsZSBjdXJzb3IgdHJhY2tpbmcgb24vb2ZmICovLAorICBbIEMoQ1NSU0laRSkgXSA9CQkzNyAvKiB0b2dnbGUgY3Vyc29yIHN0eWxlIGJsb2NrL3VuZGVybGluZSAqLywKKyAgWyBDKENTUkJMSU5LKSBdID0JCTM4IC8qIHRvZ2dsZSBjdXJzb3IgYmxpbmtpbmcgb24vb2ZmICovLAorICBbIEMoQVRUUlZJUykgXSA9CQkzOSAvKiB0b2dnbGUgYXR0cmlidXRlIHVuZGVybGluaW5nIG9uL29mZiAqLywKKyAgWyBDKEFUVFJCTElOSykgXSA9CQk0MCAvKiB0b2dnbGUgYXR0cmlidXRlIGJsaW5raW5nIG9uL29mZiAqLywKKyAgWyBDKENBUEJMSU5LKSBdID0JCTQxIC8qIHRvZ2dsZSBjYXBpdGFsIGxldHRlciBibGlua2luZyBvbi9vZmYgKi8sCisgIFsgQyhUVU5FUykgXSA9CQk0MiAvKiB0b2dnbGUgYWxlcnQgdHVuZXMgb24vb2ZmICovLAorICBbIEMoQVVUT1JFUEVBVCkgXSA9CQk0MyAvKiB0b2dnbGUgYXV0b3JlcGVhdCBvbi9vZmYgKi8sCisgIFsgQyhBVVRPU1BFQUspIF0gPQkJNDQgLyogdG9nZ2xlIGF1dG9zcGVhayBvbi9vZmYgKi8sCisgIFsgQyhIRUxQKSBdID0JCQk0NSAvKiBlbnRlci9sZWF2ZSBoZWxwIGRpc3BsYXkgKi8sCisgIFsgQyhJTkZPKSBdID0JCQk0NiAvKiBlbnRlci9sZWF2ZSBzdGF0dXMgZGlzcGxheSAqLywKKyAgWyBDKExFQVJOKSBdID0JCTQ3IC8qIGVudGVyL2xlYXZlIGNvbW1hbmQgbGVhcm4gbW9kZSAqLywKKyAgWyBDKFBSRUZNRU5VKSBdID0JCTQ4IC8qIGVudGVyL2xlYXZlIHByZWZlcmVuY2VzIG1lbnUgKi8sCisgIFsgQyhQUkVGU0FWRSkgXSA9CQk0OSAvKiBzYXZlIGN1cnJlbnQgcHJlZmVyZW5jZXMgKi8sCisgIFsgQyhQUkVGTE9BRCkgXSA9CQk1MCAvKiByZXN0b3JlIHNhdmVkIHByZWZlcmVuY2VzICovLAorICBbIEMoTVVURSkgXSA9CQkJNTEgLyogc3RvcCBzcGVha2luZyBpbW1lZGlhdGVseSAqLywKKyAgWyBDKFNQS0hPTUUpIF0gPQkJNTIgLyogZ28gdG8gY3VycmVudCAobW9zdCByZWNlbnQpIHNwZWVjaCBwb3NpdGlvbiAqLywKKyAgWyBDKFNBWV9MSU5FKSBdID0JCTUzIC8qIHNwZWFrIGN1cnJlbnQgbGluZSAqLywKKyAgWyBDKFNBWV9BQk9WRSkgXSA9CQk1NCAvKiBzcGVhayBmcm9tIHRvcCBvZiBzY3JlZW4gdGhyb3VnaCBjdXJyZW50IGxpbmUgKi8sCisgIFsgQyhTQVlfQkVMT1cpIF0gPQkJNTUgLyogc3BlYWsgZnJvbSBjdXJyZW50IGxpbmUgdGhyb3VnaCBib3R0b20gb2Ygc2NyZWVuICovLAorICBbIEMoU0FZX1NMT1dFUikgXSA9CQk1NiAvKiBkZWNyZWFzZSBzcGVlY2ggcmF0ZSAqLywKKyAgWyBDKFNBWV9GQVNURVIpIF0gPQkJNTcgLyogaW5jcmVhc2Ugc3BlZWNoIHJhdGUgKi8sCisgIFsgQyhTQVlfU09GVEVSKSBdID0JCTU4IC8qIGRlY3JlYXNlIHNwZWVjaCB2b2x1bWUgKi8sCisgIFsgQyhTQVlfTE9VREVSKSBdID0JCTU5IC8qIGluY3JlYXNlIHNwZWVjaCB2b2x1bWUgKi8sCisgIFsgQyhTV0lUQ0hWVF9QUkVWKSBdID0JNjAgLyogc3dpdGNoIHRvIHByZXZpb3VzIHZpcnR1YWwgdGVybWluYWwgKi8sCisgIFsgQyhTV0lUQ0hWVF9ORVhUKSBdID0JNjEgLyogc3dpdGNoIHRvIG5leHQgdmlydHVhbCB0ZXJtaW5hbCAqLywKKyAgWyBDKENTUkpNUF9WRVJUKSBdID0JCTYyIC8qIGJyaW5nIGN1cnNvciB0byBsaW5lIChubyBob3Jpem9udGFsIG1vdGlvbikgKi8sCisgIFsgQyhSRVNUQVJUQlJMKSBdID0JCTYzIC8qIHJlaW5pdGlhbGl6ZSBicmFpbGxlIGRyaXZlciAqLywKKyAgWyBDKFJFU1RBUlRTUEVFQ0gpIF0gPQk2NCAvKiByZWluaXRpYWxpemUgc3BlZWNoIGRyaXZlciAqLywKK307CisKK2ludCByYXc7CisKK2Jvb2wgV0VCcmFpbGxlT3BlbihpbnQgcG9ydFR5cGUsIGludCBwb3J0TnVtYmVyLCBEV09SRCAqaGFuZGxlKQoreworICBicmxhcGlfaGFuZGxlX3QgKmJybF9oYW5kbGUgPSBtYWxsb2MoYnJsYXBpX2dldEhhbmRsZVNpemUoKSk7CisgIGJybGFwaV9yYW5nZV90IHJhbmdlc1tdID0geworICAgIHsKKyAgICAgIC5maXJzdCA9IEJSTEFQSV9LRVlfVFlQRV9DTUQgfCBCUkxBUElfS0VZX0NNRF9ST1VURSwKKyAgICAgIC5sYXN0ID0gQlJMQVBJX0tFWV9UWVBFX0NNRCB8IEJSTEFQSV9LRVlfQ01EX1JPVVRFIHwgQlJMQVBJX0tFWV9DTURfQVJHX01BU0ssCisgICAgfQorICB9OworICBpbnQgaSxqOworICBicmxhcGlfcmFuZ2VfdCAqY21kX3JhbmdlczsKKworICBpZiAoYnJsYXBpX19vcGVuQ29ubmVjdGlvbihicmxfaGFuZGxlLCBOVUxMLCBOVUxMKSA9PSBJTlZBTElEX0hBTkRMRV9WQUxVRSkKKyAgICBnb3RvIGVycm9yOworCisgIHJhdyA9IHBvcnROdW1iZXIgPT0gMjsKKyAgCisgIGlmIChyYXcpIHsKKyAgICBjaGFyIG5hbWVbQlJMQVBJX01BWE5BTUVMRU5HVEgrMV07CisgICAgaWYgKGJybGFwaV9fZ2V0RHJpdmVyTmFtZShicmxfaGFuZGxlLCBuYW1lLCBzaXplb2YobmFtZSkpID09IC0xKQorICAgICAgZ290byBlcnJvcjsKKyAgICBpZiAoYnJsYXBpX19lbnRlclR0eU1vZGVXaXRoUGF0aChicmxfaGFuZGxlLCBOVUxMLCAwLCBuYW1lKSA9PSAtMSkKKyAgICAgIGdvdG8gZXJyb3I7CisgIH0gZWxzZSB7CisgICAgaWYgKGJybGFwaV9fZW50ZXJUdHlNb2RlV2l0aFBhdGgoYnJsX2hhbmRsZSwgTlVMTCwgMCwgTlVMTCkgPT0gLTEpCisgICAgICBnb3RvIGVycm9yOworICB9CisgIGlmIChicmxhcGlfX2lnbm9yZUFsbEtleXMoYnJsX2hhbmRsZSkgPT0gLTEpCisgICAgZ290byBlcnJvcjsKKyAgaWYgKGJybGFwaV9fYWNjZXB0S2V5UmFuZ2VzKGJybF9oYW5kbGUsIHJhbmdlcywgc2l6ZW9mKHJhbmdlcykvc2l6ZW9mKHJhbmdlc1swXSkpID09IC0xKQorICAgIGdvdG8gZXJyb3I7CisKKyAgY21kX3JhbmdlcyA9IG1hbGxvYyg2NCAqIHNpemVvZihjbWRfcmFuZ2VzWzBdKSk7CisgIGZvciAoaSA9IDAsIGogPSAwOyBpIDwgc2l6ZW9mKGNvbW1hbmRfYnV0dG9uKS9zaXplb2YoY29tbWFuZF9idXR0b25bMF0pOyBpKyspIHsKKyAgICBpZiAoY29tbWFuZF9idXR0b25baV0pIHsKKyAgICAgIGNtZF9yYW5nZXNbal0uZmlyc3QgPSBjbWRfcmFuZ2VzW2pdLmxhc3QgPSBCUkxBUElfS0VZX1RZUEVfQ01EIHwgKEJSTEFQSV9LRVlfQ01EKDApICsgY29tbWFuZF9idXR0b25baV0pOworICAgICAgaisrOworICAgIH0KKyAgfQorICBpZiAoYnJsYXBpX19hY2NlcHRLZXlSYW5nZXMoYnJsX2hhbmRsZSwgY21kX3JhbmdlcywgaikgPT0gLTEpCisgICAgZ290byBlcnJvcjsKKyAgZnJlZShjbWRfcmFuZ2VzKTsKKworICAqaGFuZGxlID0gKERXT1JEKSBicmxfaGFuZGxlOworICByZXR1cm4gVFJVRTsKKworZXJyb3I6CisgIGZyZWUoYnJsX2hhbmRsZSk7CisgIHJldHVybiBGQUxTRTsKK30KKworYm9vbCBXRUJyYWlsbGVDbG9zZShEV09SRCBoYW5kbGUpCit7CisgIGJybGFwaV9oYW5kbGVfdCAqYnJsX2hhbmRsZSA9ICh2b2lkKikgaGFuZGxlOworICBicmxhcGlfX2Nsb3NlQ29ubmVjdGlvbihicmxfaGFuZGxlKTsKKyAgcmV0dXJuIFRSVUU7Cit9CisKK2Jvb2wgV0VHZXRCcmFpbGxlRGlzcGxheUluZm8oRFdPUkQgaGFuZGxlLCBpbnQgKm51bWJlck9mQ2VsbHMsIGludCAqbnVtYmVyT2ZTdGF0dXNDZWxscykKK3sKKyAgYnJsYXBpX2hhbmRsZV90ICpicmxfaGFuZGxlID0gKHZvaWQqKSBoYW5kbGU7CisgIHVuc2lnbmVkIGludCB4LCB5OworICAKKyAgaWYgKGJybGFwaV9fZ2V0RGlzcGxheVNpemUoYnJsX2hhbmRsZSwgJngsICZ5KSA9PSAtMSkKKyAgICByZXR1cm4gRkFMU0U7CisKKyAgKm51bWJlck9mQ2VsbHMgPSB4ICogeTsKKyAgKm51bWJlck9mU3RhdHVzQ2VsbHMgPSAwOworICByZXR1cm4gVFJVRTsKK30KKworc3RhdGljIGJvb2wga2V5c2VudCA9IEZBTFNFOworCitib29sIFdFR2V0QnJhaWxsZUtleShEV09SRCBoYW5kbGUsIERXT1JEICprZXkxLCBEV09SRCAqa2V5MiwgaW50ICpyb3V0aW5nS2V5LCBpbnQgKmRvdWJsZVJvdXRpbmdLZXksIGJvb2wgKnJvdXRpbmdPdmVyU3RhdHVzQ2VsbCkKK3sKKyAgYnJsYXBpX2hhbmRsZV90ICpicmxfaGFuZGxlID0gKHZvaWQqKSBoYW5kbGU7CisgIGJybGFwaV9rZXlDb2RlX3QgY29kZTsKKyAgdW5zaWduZWQgY21kOworCisgICprZXkxID0gMDsKKyAgKmtleTIgPSAwOworICAqcm91dGluZ0tleSA9IDA7CisgICpkb3VibGVSb3V0aW5nS2V5ID0gMDsKKyAgKnJvdXRpbmdPdmVyU3RhdHVzQ2VsbCA9IEZBTFNFOworCisgIGlmIChrZXlzZW50KSB7CisgICAga2V5c2VudCA9IEZBTFNFOworICAgIHJldHVybiBUUlVFOworICB9CisKKyAgaWYgKGJybGFwaV9fcmVhZEtleShicmxfaGFuZGxlLCAwLCAmY29kZSkgIT0gMSkKKyAgICByZXR1cm4gRkFMU0U7CisKKyAgaWYgKHJhdykgeworICAgIGtleXNlbnQgPSBUUlVFOworICAgICprZXkxID0gY29kZSAmIDB4ZmZmZmZmZmZ1OworICAgICprZXkyID0gY29kZSA+PiAzMjsKKyAgICByZXR1cm4gVFJVRTsKKyAgfQorCisgIGlmICgoY29kZSAmIEJSTEFQSV9LRVlfVFlQRV9NQVNLKSAhPSBCUkxBUElfS0VZX1RZUEVfQ01EKQorICAgIHJldHVybiBGQUxTRTsKKworICBjbWQgPSBjb2RlICYgQlJMQVBJX0tFWV9DTURfQkxLX01BU0s7CisKKyAgaWYgKGNtZCA9PSBCUkxBUElfS0VZX0NNRF9ST1VURSkgeworICAgICpyb3V0aW5nS2V5ID0gKGNvZGUgJiBCUkxBUElfS0VZX0NNRF9BUkdfTUFTSykgKyAxOworICB9IGVsc2UgeworICAgIHVuc2lnbmVkIGJ1dHRvbjsKKyAgICB1bnNpZ25lZCBhcmcgPSBjb2RlICYgQlJMQVBJX0tFWV9DTURfQVJHX01BU0s7CisKKyAgICBpZiAoYXJnID49IHNpemVvZihjb21tYW5kX2J1dHRvbikvc2l6ZW9mKGNvbW1hbmRfYnV0dG9uWzBdKSkKKyAgICAgIHJldHVybiBGQUxTRTsKKworICAgIGJ1dHRvbiA9IGNvbW1hbmRfYnV0dG9uW2FyZ107CisgICAgaWYgKChidXR0b24gPiA2NCkgfHwgKGJ1dHRvbiA9PSAwKSkKKyAgICAgIHJldHVybiBGQUxTRTsKKyAgICBpZiAoYnV0dG9uID4gMzIpCisgICAgICAqa2V5MiA9IDEgPDwgKGJ1dHRvbiAtIDEgLSAzMik7CisgICAgZWxzZQorICAgICAgKmtleTEgPSAxIDw8IChidXR0b24gLSAxKTsKKyAgfQorCisgIGtleXNlbnQgPSBUUlVFOworICByZXR1cm4gVFJVRTsKK30KKworYm9vbCBXRVVwZGF0ZUJyYWlsbGVEaXNwbGF5KERXT1JEIGhhbmRsZSwgQllURSAqcE1haW5DZWxscywgaW50IG1haW5DZWxsc0NvdW50LCBCWVRFICpwU3RhdHVzQ2VsbHMsIGludCBzdGF0dXNDZWxsc0NvdW50KQoreworICBicmxhcGlfaGFuZGxlX3QgKmJybF9oYW5kbGUgPSAodm9pZCopIGhhbmRsZTsKKyAgaW50IG51bUNlbGxzLCBudW1TdGF0Q2VsbHM7CisKKyAgaWYgKCFXRUdldEJyYWlsbGVEaXNwbGF5SW5mbyhoYW5kbGUsICZudW1DZWxscywgJm51bVN0YXRDZWxscykpCisgICAgcmV0dXJuIEZBTFNFOworCisgIHsKKyAgICB1bnNpZ25lZCBjaGFyIGRvdHNbbnVtQ2VsbHNdOworICAgIG1lbWNweShkb3RzLCBwTWFpbkNlbGxzLCBtYWluQ2VsbHNDb3VudCk7CisgICAgbWVtc2V0KGRvdHMgKyBtYWluQ2VsbHNDb3VudCwgMCwgbnVtQ2VsbHMgLSBtYWluQ2VsbHNDb3VudCk7CisgICAgaWYgKGJybGFwaV9fd3JpdGVEb3RzKGJybF9oYW5kbGUsIGRvdHMpID09IC0xKQorICAgICAgcmV0dXJuIEZBTFNFOworICB9CisKKyAgcmV0dXJuIFRSVUU7Cit9CmRpZmYgLS1naXQgYS9Ecml2ZXJzL0JybEFQSS9XaW5kb3dFeWVzL3dlYnJsb2VtLmggYi9Ecml2ZXJzL0JybEFQSS9XaW5kb3dFeWVzL3dlYnJsb2VtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGIzNDRlMgotLS0gL2Rldi9udWxsCisrKyBiL0RyaXZlcnMvQnJsQVBJL1dpbmRvd0V5ZXMvd2VicmxvZW0uaApAQCAtMCwwICsxLDIzIEBACisvKgorICogQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyAqICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyAqCisgKiBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorICoKKyAqIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyAqCisgKiBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisgKi8KKworZXh0ZXJuIGJvb2wgV0VCcmFpbGxlT3BlbihpbnQsIGludCwgRFdPUkQgKik7CitleHRlcm4gYm9vbCBXRUdldEJyYWlsbGVLZXkoRFdPUkQsIERXT1JEICosIERXT1JEICosIGludCAqLCBpbnQgKiwgYm9vbCAqKTsKK2V4dGVybiBib29sIFdFR2V0QnJhaWxsZURpc3BsYXlJbmZvKERXT1JELCBpbnQqLCBpbnQgKik7CitleHRlcm4gYm9vbCBXRVVwZGF0ZUJyYWlsbGVEaXNwbGF5KERXT1JELCBCWVRFICosIGludCAsIEJZVEUgKiwgaW50KTsKK2V4dGVybiBib29sIFdFQnJhaWxsZUNsb3NlKERXT1JEKTsKZGlmZiAtLWdpdCBhL0RyaXZlcnMvU2NyZWVuL0FuZHJvaWQvTWFrZWZpbGUuaW4gYi9Ecml2ZXJzL1NjcmVlbi9BbmRyb2lkL01ha2VmaWxlLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY4OGU4ODYKLS0tIC9kZXYvbnVsbAorKysgYi9Ecml2ZXJzL1NjcmVlbi9BbmRyb2lkL01ha2VmaWxlLmluCkBAIC0wLDAgKzEsMjggQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyMgICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisjCisjIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyMKKyMgQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitEUklWRVJfQ09ERSA9IGFuCitEUklWRVJfTkFNRSA9IEFuZHJvaWQKK0RSSVZFUl9VU0FHRSA9IEFuZHJvaWQKK0RSSVZFUl9WRVJTSU9OID0gCitEUklWRVJfREVWRUxPUEVSUyA9IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4KK2luY2x1ZGUgJChTUkNfVE9QKXNjcmVlbi5taworCitzY3JlZW4uJE86CisJJChDQykgJChTQ1JfQ0ZMQUdTKSAtYyAkKFNSQ19ESVIpL3NjcmVlbi5jCisKZGlmZiAtLWdpdCBhL0RyaXZlcnMvU2NyZWVuL0FuZHJvaWQvc2NyZWVuLmMgYi9Ecml2ZXJzL1NjcmVlbi9BbmRyb2lkL3NjcmVlbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFlY2I0MWEKLS0tIC9kZXYvbnVsbAorKysgYi9Ecml2ZXJzL1NjcmVlbi9BbmRyb2lkL3NjcmVlbi5jCkBAIC0wLDAgKzEsNTg4IEBACisvKgorICogQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyAqICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyAqCisgKiBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorICoKKyAqIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyAqCisgKiBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisgKi8KKworI2luY2x1ZGUgInByb2xvZ3VlLmgiCisKKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorCisjaW5jbHVkZSAibG9nLmgiCisjaW5jbHVkZSAicmVwb3J0LmgiCisjaW5jbHVkZSAiYWxlcnQuaCIKKyNpbmNsdWRlICJicmxfY21kcy5oIgorI2luY2x1ZGUgInVuaWNvZGUuaCIKKworI2luY2x1ZGUgInNjcl9kcml2ZXIuaCIKKyNpbmNsdWRlICJzeXN0ZW1famF2YS5oIgorI2luY2x1ZGUgImNvcmUuaCIKKworc3RhdGljIEpOSUVudiAqZW52ID0gTlVMTDsKK3N0YXRpYyBqY2xhc3Mgc2NyZWVuRHJpdmVyQ2xhc3MgPSBOVUxMOworc3RhdGljIGpjbGFzcyBpbnB1dEhhbmRsZXJzQ2xhc3MgPSBOVUxMOworCitzdGF0aWMgamludCBzY3JlZW5OdW1iZXIsIHNjcmVlbkNvbHVtbnMsIHNjcmVlblJvd3M7CitzdGF0aWMgamludCBsb2NhdGlvbkxlZnQsIGxvY2F0aW9uVG9wLCBsb2NhdGlvblJpZ2h0LCBsb2NhdGlvbkJvdHRvbTsKK3N0YXRpYyBqaW50IHNlbGVjdGlvbkxlZnQsIHNlbGVjdGlvblRvcCwgc2VsZWN0aW9uUmlnaHQsIHNlbGVjdGlvbkJvdHRvbTsKKworc3RhdGljIGNvbnN0IGNoYXIgKnByb2JsZW1UZXh0OworCitzdGF0aWMgaW50CitmaW5kU2NyZWVuRHJpdmVyQ2xhc3MgKHZvaWQpIHsKKyAgcmV0dXJuIGZpbmRKYXZhQ2xhc3MoZW52LCAmc2NyZWVuRHJpdmVyQ2xhc3MsIEpBVkFfT0JKX0JSTFRUWSgiU2NyZWVuRHJpdmVyIikpOworfQorCitzdGF0aWMgaW50CitmaW5kSW5wdXRIYW5kbGVyc0NsYXNzICh2b2lkKSB7CisgIHJldHVybiBmaW5kSmF2YUNsYXNzKGVudiwgJmlucHV0SGFuZGxlcnNDbGFzcywgSkFWQV9PQkpfQlJMVFRZKCJJbnB1dEhhbmRsZXJzIikpOworfQorCitzdGF0aWMgaW50CitjYWxsU2ltcGxlSW5wdXRIYW5kbGVyIChqbWV0aG9kSUQgKm1ldGhvZCwgY29uc3QgY2hhciAqbmFtZSkgeworICBpZiAoZmluZElucHV0SGFuZGxlcnNDbGFzcygpKSB7CisgICAgaWYgKGZpbmRKYXZhU3RhdGljTWV0aG9kKGVudiwgbWV0aG9kLCBpbnB1dEhhbmRsZXJzQ2xhc3MsIG5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpBVkFfU0lHX01FVEhPRChKQVZBX1NJR19CT09MRUFOLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApKSkgeworICAgICAgamJvb2xlYW4gcmVzdWx0ID0gKCplbnYpLT5DYWxsU3RhdGljQm9vbGVhbk1ldGhvZCgKKyAgICAgICAgZW52LCBpbnB1dEhhbmRsZXJzQ2xhc3MsICptZXRob2QKKyAgICAgICk7CisKKyAgICAgIGlmICghY2xlYXJKYXZhRXhjZXB0aW9uKGVudiwgMSkpIHsKKyAgICAgICAgaWYgKHJlc3VsdCAhPSBKTklfRkFMU0UpIHsKKyAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgfQorICAgICAgfQorICAgIH0KKyAgfQorCisgIHJldHVybiAwOworfQorCitSRVBPUlRfTElTVEVORVIoYW5kcm9pZFNjcmVlbkRyaXZlclJlcG9ydExpc3RlbmVyKSB7CisgIGNoYXIgKmV2ZW50ID0gcGFyYW1ldGVycy0+bGlzdGVuZXJEYXRhOworCisgIGlmIChmaW5kU2NyZWVuRHJpdmVyQ2xhc3MoKSkgeworICAgIHN0YXRpYyBqbWV0aG9kSUQgbWV0aG9kID0gMDsKKworICAgIGlmIChmaW5kSmF2YVN0YXRpY01ldGhvZChlbnYsICZtZXRob2QsIHNjcmVlbkRyaXZlckNsYXNzLCAicmVwb3J0RXZlbnQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKQVZBX1NJR19NRVRIT0QoSkFWQV9TSUdfVk9JRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpBVkFfU0lHX0NIQVIgLy8gZXZlbnQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSkpIHsKKyAgICAgICgqZW52KS0+Q2FsbFN0YXRpY1ZvaWRNZXRob2QoZW52LCBzY3JlZW5Ecml2ZXJDbGFzcywgbWV0aG9kLCAqZXZlbnQpOworICAgICAgY2xlYXJKYXZhRXhjZXB0aW9uKGVudiwgMSk7CisgICAgfQorICB9Cit9CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgUmVwb3J0TGlzdGVuZXJJbnN0YW5jZSAqbGlzdGVuZXI7CisgIFJlcG9ydElkZW50aWZpZXIgaWRlbnRpZmllcjsKKyAgY2hhciBjaGFyYWN0ZXI7Cit9IFJlcG9ydEVudHJ5OworCitzdGF0aWMgUmVwb3J0RW50cnkgcmVwb3J0RW50cmllc1tdID0geworICB7IC5jaGFyYWN0ZXIgPSAnYicsCisgICAgLmlkZW50aWZpZXIgPSBSRVBPUlRfQlJBSUxMRV9ERVZJQ0VfT05MSU5FCisgIH0sCisKKyAgeyAuY2hhcmFjdGVyID0gJ0InLAorICAgIC5pZGVudGlmaWVyID0gUkVQT1JUX0JSQUlMTEVfREVWSUNFX09GRkxJTkUKKyAgfSwKKworICB7IC5jaGFyYWN0ZXIgPSAnaycsCisgICAgLmlkZW50aWZpZXIgPSBSRVBPUlRfQlJBSUxMRV9LRVlfRVZFTlQKKyAgfSwKKworICB7IC5jaGFyYWN0ZXIgPSAwIH0KK307CisKK3N0YXRpYyBpbnQKK2NvbnN0cnVjdF9BbmRyb2lkU2NyZWVuICh2b2lkKSB7CisgIGZvciAoUmVwb3J0RW50cnkgKnJwdD1yZXBvcnRFbnRyaWVzOyBycHQtPmNoYXJhY3RlcjsgcnB0Kz0xKSB7CisgICAgcnB0LT5saXN0ZW5lciA9IHJlZ2lzdGVyUmVwb3J0TGlzdGVuZXIoCisgICAgICBycHQtPmlkZW50aWZpZXIsIGFuZHJvaWRTY3JlZW5Ecml2ZXJSZXBvcnRMaXN0ZW5lciwgJnJwdC0+Y2hhcmFjdGVyCisgICAgKTsKKworICAgIGlmICghcnB0LT5saXN0ZW5lcikgYnJlYWs7CisgIH0KKworICByZXR1cm4gMTsKK30KKworc3RhdGljIHZvaWQKK2Rlc3RydWN0X0FuZHJvaWRTY3JlZW4gKHZvaWQpIHsKKyAgZm9yIChSZXBvcnRFbnRyeSAqcnB0PXJlcG9ydEVudHJpZXM7IHJwdC0+Y2hhcmFjdGVyOyBycHQrPTEpIHsKKyAgICBpZiAocnB0LT5saXN0ZW5lcikgeworICAgICAgdW5yZWdpc3RlclJlcG9ydExpc3RlbmVyKHJwdC0+bGlzdGVuZXIpOworICAgICAgcnB0LT5saXN0ZW5lciA9IE5VTEw7CisgICAgfQorICB9Cit9CisKK3N0YXRpYyBpbnQKK3BvbGxfQW5kcm9pZFNjcmVlbiAodm9pZCkgeworICByZXR1cm4gMDsKK30KKworSkFWQV9TVEFUSUNfTUVUSE9EICgKKyAgb3JnX2ExMXlfYnJsdHR5X2FuZHJvaWRfU2NyZWVuRHJpdmVyLCBzY3JlZW5VcGRhdGVkLCB2b2lkCispIHsKKyAgbWFpblNjcmVlblVwZGF0ZWQoKTsKK30KKworSkFWQV9TVEFUSUNfTUVUSE9EICgKKyAgb3JnX2ExMXlfYnJsdHR5X2FuZHJvaWRfU2NyZWVuRHJpdmVyLCBleHBvcnRTY3JlZW5Qcm9wZXJ0aWVzLCB2b2lkLAorICBqaW50IG51bWJlciwgamludCBjb2x1bW5zLCBqaW50IHJvd3MsCisgIGppbnQgbG9jTGVmdCwgamludCBsb2NUb3AsIGludCBsb2NSaWdodCwgaW50IGxvY0JvdHRvbSwKKyAgamludCBzZWxMZWZ0LCBqaW50IHNlbFRvcCwgaW50IHNlbFJpZ2h0LCBpbnQgc2VsQm90dG9tCispIHsKKyAgc2NyZWVuTnVtYmVyID0gbnVtYmVyOworICBzY3JlZW5Db2x1bW5zID0gY29sdW1uczsKKyAgc2NyZWVuUm93cyA9IHJvd3M7CisKKyAgbG9jYXRpb25MZWZ0ID0gbG9jTGVmdDsKKyAgbG9jYXRpb25Ub3AgPSBsb2NUb3A7CisgIGxvY2F0aW9uUmlnaHQgPSBsb2NSaWdodDsKKyAgbG9jYXRpb25Cb3R0b20gPSBsb2NCb3R0b207CisKKyAgc2VsZWN0aW9uTGVmdCA9IHNlbExlZnQ7CisgIHNlbGVjdGlvblRvcCA9IHNlbFRvcDsKKyAgc2VsZWN0aW9uUmlnaHQgPSBzZWxSaWdodDsKKyAgc2VsZWN0aW9uQm90dG9tID0gc2VsQm90dG9tOworfQorCitzdGF0aWMgaW50CityZWZyZXNoX0FuZHJvaWRTY3JlZW4gKHZvaWQpIHsKKyAgcHJvYmxlbVRleHQgPSBOVUxMOworCisgIGlmIChmaW5kU2NyZWVuRHJpdmVyQ2xhc3MoKSkgeworICAgIHN0YXRpYyBqbWV0aG9kSUQgbWV0aG9kID0gMDsKKworICAgIGlmIChmaW5kSmF2YVN0YXRpY01ldGhvZChlbnYsICZtZXRob2QsIHNjcmVlbkRyaXZlckNsYXNzLCAicmVmcmVzaFNjcmVlbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpBVkFfU0lHX01FVEhPRChKQVZBX1NJR19DSEFSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApKSkgeworICAgICAgamNoYXIgcmVzdWx0ID0gKCplbnYpLT5DYWxsU3RhdGljQ2hhck1ldGhvZChlbnYsIHNjcmVlbkRyaXZlckNsYXNzLCBtZXRob2QpOworCisgICAgICBpZiAoY2xlYXJKYXZhRXhjZXB0aW9uKGVudiwgMSkpIHsKKyAgICAgICAgcHJvYmxlbVRleHQgPSBnZXR0ZXh0KCJKYXZhIGV4Y2VwdGlvbiBvY2N1cnJlZCIpOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKHJlc3VsdCA9PSAnbCcpIHsKKyAgICAgICAgICBzZXRCcmFpbGxlT2ZmKGdldHRleHQoInNjcmVlbiBsb2NrZWQiKSk7CisgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgIH0KKworICAgICAgICBpZiAocmVzdWx0ID09ICdyJykgeworICAgICAgICAgIHNldEJyYWlsbGVPZmYoZ2V0dGV4dCgiYnJhaWxsZSByZWxlYXNlZCIpKTsKKyAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgfQorICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICBwcm9ibGVtVGV4dCA9IGdldHRleHQoIkphdmEgbWV0aG9kIG5vdCBmb3VuZCIpOworICAgIH0KKyAgfSBlbHNlIHsKKyAgICBwcm9ibGVtVGV4dCA9IGdldHRleHQoIkphdmEgY2xhc3Mgbm90IGZvdW5kIik7CisgIH0KKworICBzZXRCcmFpbGxlT24oKTsKKyAgcmV0dXJuIDE7Cit9CisKK3N0YXRpYyB2b2lkCitkZXNjcmliZV9BbmRyb2lkU2NyZWVuIChTY3JlZW5EZXNjcmlwdGlvbiAqZGVzY3JpcHRpb24pIHsKKyAgaWYgKChkZXNjcmlwdGlvbi0+dW5yZWFkYWJsZSA9IHByb2JsZW1UZXh0KSkgeworICAgIGRlc2NyaXB0aW9uLT5jb2xzID0gc3RybGVuKHByb2JsZW1UZXh0KTsKKyAgICBkZXNjcmlwdGlvbi0+cm93cyA9IDE7CisgICAgZGVzY3JpcHRpb24tPnBvc3ggPSAwOworICAgIGRlc2NyaXB0aW9uLT5wb3N5ID0gMDsKKyAgICBkZXNjcmlwdGlvbi0+bnVtYmVyID0gMDsKKyAgfSBlbHNlIHsKKyAgICBkZXNjcmlwdGlvbi0+bnVtYmVyID0gc2NyZWVuTnVtYmVyOworCisgICAgZGVzY3JpcHRpb24tPmNvbHMgPSBzY3JlZW5Db2x1bW5zOworICAgIGRlc2NyaXB0aW9uLT5yb3dzID0gc2NyZWVuUm93czsKKworICAgIGRlc2NyaXB0aW9uLT5wb3N4ID0gbG9jYXRpb25MZWZ0ICsgc2VsZWN0aW9uTGVmdDsKKyAgICBkZXNjcmlwdGlvbi0+cG9zeSA9IGxvY2F0aW9uVG9wICsgc2VsZWN0aW9uVG9wOworCisgICAgZGVzY3JpcHRpb24tPmhhc0N1cnNvciA9IDA7CisgICAgZGVzY3JpcHRpb24tPmhhc1NlbGVjdGlvbiA9IDA7CisKKyAgICBpZiAoc2VsZWN0aW9uTGVmdCA+PSAwKSB7CisgICAgICBpZiAoKHNlbGVjdGlvbkxlZnQgPT0gc2VsZWN0aW9uUmlnaHQpICYmIChzZWxlY3Rpb25Ub3AgPT0gc2VsZWN0aW9uQm90dG9tKSkgeworICAgICAgICBkZXNjcmlwdGlvbi0+aGFzQ3Vyc29yID0gMTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIGRlc2NyaXB0aW9uLT5oYXNTZWxlY3Rpb24gPSAxOworICAgICAgfQorICAgIH0KKyAgfQorfQorCitzdGF0aWMgaW50CitnZXRSb3dDaGFyYWN0ZXJzIChKTklFbnYgKmVudiwgU2NyZWVuQ2hhcmFjdGVyICpjaGFyYWN0ZXJzLCBqY2hhckFycmF5IGpDaGFyYWN0ZXJzLCBqaW50IHJvd0luZGV4LCBqaW50IGNvbHVtbkluZGV4LCBqaW50IGNvbHVtbkNvdW50KSB7CisgIGppbnQgY2hhcmFjdGVyQ291bnQgPSAoKmVudiktPkdldEFycmF5TGVuZ3RoKGVudiwgakNoYXJhY3RlcnMpOworICBpZiAoY2xlYXJKYXZhRXhjZXB0aW9uKGVudiwgMSkpIHJldHVybiAwOworCisgIHsKKyAgICBTY3JlZW5DaGFyYWN0ZXIgKnRhcmdldCA9IGNoYXJhY3RlcnM7CisgICAgU2NyZWVuQ2hhcmFjdGVyICp0YXJnZXRFbmQgPSB0YXJnZXQgKyBjb2x1bW5Db3VudDsKKworICAgIGlmIChjaGFyYWN0ZXJDb3VudCA+IDApIHsKKyAgICAgIGpjaGFyIGNDaGFyYWN0ZXJzW2NoYXJhY3RlckNvdW50XTsKKyAgICAgICgqZW52KS0+R2V0Q2hhckFycmF5UmVnaW9uKGVudiwgakNoYXJhY3RlcnMsIDAsIGNoYXJhY3RlckNvdW50LCBjQ2hhcmFjdGVycyk7CisgICAgICBpZiAoY2xlYXJKYXZhRXhjZXB0aW9uKGVudiwgMSkpIHJldHVybiAwOworCisgICAgICBjb25zdCBqY2hhciAqc291cmNlID0gY0NoYXJhY3RlcnM7CisgICAgICBjb25zdCBqY2hhciAqc291cmNlRW5kID0gc291cmNlICsgY2hhcmFjdGVyQ291bnQ7CisKKyAgICAgIHdoaWxlIChzb3VyY2UgPCBzb3VyY2VFbmQpIHsKKyAgICAgICAgaWYgKHRhcmdldCA9PSB0YXJnZXRFbmQpIGJyZWFrOworCisgICAgICAgIHRhcmdldC0+dGV4dCA9ICpzb3VyY2U7CisgICAgICAgIHRhcmdldC0+YXR0cmlidXRlcyA9IFNDUl9DT0xPVVJfREVGQVVMVDsKKworICAgICAgICB0YXJnZXQgKz0gMTsKKyAgICAgICAgc291cmNlICs9IDE7CisgICAgICB9CisgICAgfQorCisgICAgY2xlYXJTY3JlZW5DaGFyYWN0ZXJzKHRhcmdldCwgKHRhcmdldEVuZCAtIHRhcmdldCkpOworICB9CisKKyAgaW50IHRvcCA9IGxvY2F0aW9uVG9wICsgc2VsZWN0aW9uVG9wOworICBpbnQgYm90dG9tID0gbG9jYXRpb25Ub3AgKyBzZWxlY3Rpb25Cb3R0b207CisKKyAgaWYgKChyb3dJbmRleCA+PSB0b3ApICYmIChyb3dJbmRleCA8IGJvdHRvbSkpIHsKKyAgICBpbnQgZnJvbSA9IE1BWChsb2NhdGlvbkxlZnQsIGNvbHVtbkluZGV4KTsKKyAgICBpbnQgdG8gPSBNSU4obG9jYXRpb25SaWdodCwgKGNvbHVtbkluZGV4ICsgY29sdW1uQ291bnQpKTsKKworICAgIGlmIChyb3dJbmRleCA9PSB0b3ApIHsKKyAgICAgIGludCBsZWZ0ID0gbG9jYXRpb25MZWZ0ICsgc2VsZWN0aW9uTGVmdDsKKyAgICAgIGlmIChsZWZ0ID4gZnJvbSkgZnJvbSA9IGxlZnQ7CisgICAgfQorCisgICAgaWYgKChyb3dJbmRleCArIDEpID09IGJvdHRvbSkgeworICAgICAgaW50IHJpZ2h0ID0gbG9jYXRpb25MZWZ0ICsgc2VsZWN0aW9uUmlnaHQ7CisgICAgICBpZiAocmlnaHQgPCB0bykgdG8gPSByaWdodDsKKyAgICB9CisKKyAgICBpZiAoZnJvbSA8IHRvKSB7CisgICAgICBmcm9tIC09IGNvbHVtbkluZGV4OworICAgICAgdG8gLT0gY29sdW1uSW5kZXg7CisgICAgICBpZiAodG8gPiBjaGFyYWN0ZXJDb3VudCkgdG8gPSBjaGFyYWN0ZXJDb3VudDsKKworICAgICAgU2NyZWVuQ2hhcmFjdGVyICp0YXJnZXQgPSBjaGFyYWN0ZXJzICsgZnJvbTsKKyAgICAgIGNvbnN0IFNjcmVlbkNoYXJhY3RlciAqdGFyZ2V0RW5kID0gY2hhcmFjdGVycyArIHRvOworCisgICAgICB3aGlsZSAodGFyZ2V0IDwgdGFyZ2V0RW5kKSB7CisgICAgICAgIHRhcmdldC0+YXR0cmlidXRlcyA9IFNDUl9DT0xPVVJfRkdfQkxBQ0sgfCBTQ1JfQ09MT1VSX0JHX0xJR0hUX0dSRVk7CisgICAgICAgIHRhcmdldCArPSAxOworICAgICAgfQorICAgIH0KKyAgfQorCisgIHJldHVybiAxOworfQorCitzdGF0aWMgaW50CityZWFkUm93Q2hhcmFjdGVycyAoU2NyZWVuQ2hhcmFjdGVyICpjaGFyYWN0ZXJzLCBqaW50IHJvd0luZGV4LCBqaW50IGNvbHVtbkluZGV4LCBqaW50IGNvbHVtbkNvdW50KSB7CisgIGlmIChmaW5kU2NyZWVuRHJpdmVyQ2xhc3MoKSkgeworICAgIHN0YXRpYyBqbWV0aG9kSUQgbWV0aG9kID0gMDsKKworICAgIGlmIChmaW5kSmF2YVN0YXRpY01ldGhvZChlbnYsICZtZXRob2QsIHNjcmVlbkRyaXZlckNsYXNzLCAiZ2V0Um93VGV4dCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpBVkFfU0lHX01FVEhPRChKQVZBX1NJR19BUlJBWShKQVZBX1NJR19DSEFSKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpBVkFfU0lHX0lOVCAvLyByb3cKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpBVkFfU0lHX0lOVCAvLyBjb2x1bW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSkpIHsKKyAgICAgIGpjaGFyQXJyYXkgakNoYXJhY3RlcnMgPSAoKmVudiktPkNhbGxTdGF0aWNPYmplY3RNZXRob2QoCisgICAgICAgIGVudiwgc2NyZWVuRHJpdmVyQ2xhc3MsIG1ldGhvZCwgcm93SW5kZXgsIGNvbHVtbkluZGV4CisgICAgICApOworCisgICAgICBpZiAoIWNsZWFySmF2YUV4Y2VwdGlvbihlbnYsIDEpKSB7CisgICAgICAgIGlmIChqQ2hhcmFjdGVycykgeworICAgICAgICAgIGludCBvayA9IGdldFJvd0NoYXJhY3RlcnMoCisgICAgICAgICAgICBlbnYsIGNoYXJhY3RlcnMsIGpDaGFyYWN0ZXJzLAorICAgICAgICAgICAgcm93SW5kZXgsIGNvbHVtbkluZGV4LCBjb2x1bW5Db3VudAorICAgICAgICAgICk7CisKKyAgICAgICAgICAoKmVudiktPkRlbGV0ZUxvY2FsUmVmKGVudiwgakNoYXJhY3RlcnMpOworICAgICAgICAgIGpDaGFyYWN0ZXJzID0gTlVMTDsKKworICAgICAgICAgIHJldHVybiBvazsKKyAgICAgICAgfQorICAgICAgfQorICAgIH0KKyAgfQorCisgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50CityZWFkQ2hhcmFjdGVyc19BbmRyb2lkU2NyZWVuIChjb25zdCBTY3JlZW5Cb3ggKmJveCwgU2NyZWVuQ2hhcmFjdGVyICpidWZmZXIpIHsKKyAgaWYgKHZhbGlkYXRlU2NyZWVuQm94KGJveCwgc2NyZWVuQ29sdW1ucywgc2NyZWVuUm93cykpIHsKKyAgICBpZiAocHJvYmxlbVRleHQpIHsKKyAgICAgIHNldFNjcmVlbk1lc3NhZ2UoYm94LCBidWZmZXIsIHByb2JsZW1UZXh0KTsKKyAgICB9IGVsc2UgeworICAgICAgZm9yIChpbnQgcm93SW5kZXg9MDsgcm93SW5kZXg8Ym94LT5oZWlnaHQ7IHJvd0luZGV4Kz0xKSB7CisgICAgICAgIGlmICghcmVhZFJvd0NoYXJhY3RlcnMoJmJ1ZmZlcltyb3dJbmRleCAqIGJveC0+d2lkdGhdLCAocm93SW5kZXggKyBib3gtPnRvcCksIGJveC0+bGVmdCwgYm94LT53aWR0aCkpIHJldHVybiAwOworICAgICAgfQorICAgIH0KKworICAgIHJldHVybiAxOworICB9CisKKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK3JvdXRlQ3Vyc29yX0FuZHJvaWRTY3JlZW4gKGludCBjb2x1bW4sIGludCByb3csIGludCBzY3JlZW4pIHsKKyAgaWYgKGZpbmRTY3JlZW5Ecml2ZXJDbGFzcygpKSB7CisgICAgc3RhdGljIGptZXRob2RJRCBtZXRob2QgPSAwOworCisgICAgaWYgKGZpbmRKYXZhU3RhdGljTWV0aG9kKGVudiwgJm1ldGhvZCwgc2NyZWVuRHJpdmVyQ2xhc3MsICJyb3V0ZUN1cnNvciIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpBVkFfU0lHX01FVEhPRChKQVZBX1NJR19CT09MRUFOLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSkFWQV9TSUdfSU5UIC8vIGNvbHVtbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSkFWQV9TSUdfSU5UIC8vIHJvdworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApKSkgeworICAgICAgamJvb2xlYW4gcmVzdWx0ID0gKCplbnYpLT5DYWxsU3RhdGljQm9vbGVhbk1ldGhvZChlbnYsIHNjcmVlbkRyaXZlckNsYXNzLCBtZXRob2QsIGNvbHVtbiwgcm93KTsKKworICAgICAgaWYgKCFjbGVhckphdmFFeGNlcHRpb24oZW52LCAxKSkgeworICAgICAgICBpZiAocmVzdWx0ICE9IEpOSV9GQUxTRSkgeworICAgICAgICAgIHJldHVybiAxOworICAgICAgICB9CisgICAgICB9CisgICAgfQorICB9CisKKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK2luc2VydEtleV9BbmRyb2lkU2NyZWVuIChTY3JlZW5LZXkga2V5KSB7CisgIGlmIChmaW5kSW5wdXRIYW5kbGVyc0NsYXNzKCkpIHsKKyAgICB3Y2hhcl90IGNoYXJhY3RlciA9IGtleSAmIFNDUl9LRVlfQ0hBUl9NQVNLOworCisgICAgc2V0U2NyZWVuS2V5TW9kaWZpZXJzKCZrZXksIDApOworCisgICAgaWYgKCFpc1NwZWNpYWxLZXkoa2V5KSkgeworICAgICAgc3RhdGljIGptZXRob2RJRCBtZXRob2QgPSAwOworCisgICAgICBpZiAoZmluZEphdmFTdGF0aWNNZXRob2QoZW52LCAmbWV0aG9kLCBpbnB1dEhhbmRsZXJzQ2xhc3MsICJpbnB1dENoYXJhY3RlciIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSkFWQV9TSUdfTUVUSE9EKEpBVkFfU0lHX0JPT0xFQU4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpBVkFfU0lHX0NIQVIgLy8gY2hhcmFjdGVyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSkpIHsKKyAgICAgICAgamJvb2xlYW4gcmVzdWx0ID0gKCplbnYpLT5DYWxsU3RhdGljQm9vbGVhbk1ldGhvZChlbnYsIGlucHV0SGFuZGxlcnNDbGFzcywgbWV0aG9kLCBjaGFyYWN0ZXIpOworCisgICAgICAgIGlmICghY2xlYXJKYXZhRXhjZXB0aW9uKGVudiwgMSkpIHsKKyAgICAgICAgICBpZiAocmVzdWx0ICE9IEpOSV9GQUxTRSkgeworICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICB9CisgICAgfSBlbHNlIGlmIChjaGFyYWN0ZXIgPCBTQ1JfS0VZX0ZVTkNUSU9OKSB7CisjZGVmaW5lIFNJWkUgVU5JQ09ERV9DRUxMX05VTUJFUihTQ1JfS0VZX0ZVTkNUSU9OKQorI2RlZmluZSBLRVkoa2V5LG1ldGhvZCkgW1VOSUNPREVfQ0VMTF9OVU1CRVIoU0NSX0tFWV8jI2tleSldID0gbWV0aG9kCisKKyAgICAgIHN0YXRpYyBjb25zdCBjaGFyICpjb25zdCBtZXRob2ROYW1lc1tTSVpFXSA9IHsKKyAgICAgICAgS0VZKEVOVEVSLCAia2V5SGFuZGxlcl9lbnRlciIpLAorICAgICAgICBLRVkoVEFCLCAia2V5SGFuZGxlcl90YWIiKSwKKyAgICAgICAgS0VZKEJBQ0tTUEFDRSwgImtleUhhbmRsZXJfYmFja3NwYWNlIiksCisgICAgICAgIEtFWShFU0NBUEUsICJrZXlIYW5kbGVyX2VzY2FwZSIpLAorICAgICAgICBLRVkoQ1VSU09SX0xFRlQsICJrZXlIYW5kbGVyX2N1cnNvckxlZnQiKSwKKyAgICAgICAgS0VZKENVUlNPUl9SSUdIVCwgImtleUhhbmRsZXJfY3Vyc29yUmlnaHQiKSwKKyAgICAgICAgS0VZKENVUlNPUl9VUCwgImtleUhhbmRsZXJfY3Vyc29yVXAiKSwKKyAgICAgICAgS0VZKENVUlNPUl9ET1dOLCAia2V5SGFuZGxlcl9jdXJzb3JEb3duIiksCisgICAgICAgIEtFWShQQUdFX1VQLCAia2V5SGFuZGxlcl9wYWdlVXAiKSwKKyAgICAgICAgS0VZKFBBR0VfRE9XTiwgImtleUhhbmRsZXJfcGFnZURvd24iKSwKKyAgICAgICAgS0VZKEhPTUUsICJrZXlIYW5kbGVyX2hvbWUiKSwKKyAgICAgICAgS0VZKEVORCwgImtleUhhbmRsZXJfZW5kIiksCisgICAgICAgIEtFWShJTlNFUlQsICJrZXlIYW5kbGVyX2luc2VydCIpLAorICAgICAgICBLRVkoREVMRVRFLCAia2V5SGFuZGxlcl9kZWxldGUiKSwKKyAgICAgIH07CisKKyAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBrZXkgPSBVTklDT0RFX0NFTExfTlVNQkVSKGNoYXJhY3Rlcik7CisgICAgICBjb25zdCBjaGFyICptZXRob2ROYW1lID0gbWV0aG9kTmFtZXNba2V5XTsKKyAgICAgIGlmICghbWV0aG9kTmFtZSkgcmV0dXJuIDA7CisKKyAgICAgIHN0YXRpYyBqbWV0aG9kSUQgbWV0aG9kSWRlbnRpZmllcnNbU0laRV07CisgICAgICBqbWV0aG9kSUQgKm1ldGhvZElkZW50aWZpZXIgPSAmbWV0aG9kSWRlbnRpZmllcnNba2V5XTsKKworI3VuZGVmIFNJWkUKKyN1bmRlZiBLRVkKKworICAgICAgaWYgKGZpbmRKYXZhU3RhdGljTWV0aG9kKGVudiwgbWV0aG9kSWRlbnRpZmllciwgaW5wdXRIYW5kbGVyc0NsYXNzLCBtZXRob2ROYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpBVkFfU0lHX01FVEhPRChKQVZBX1NJR19CT09MRUFOLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkpKSB7CisgICAgICAgIGpib29sZWFuIHJlc3VsdCA9ICgqZW52KS0+Q2FsbFN0YXRpY0Jvb2xlYW5NZXRob2QoZW52LCBpbnB1dEhhbmRsZXJzQ2xhc3MsICptZXRob2RJZGVudGlmaWVyKTsKKworICAgICAgICBpZiAoIWNsZWFySmF2YUV4Y2VwdGlvbihlbnYsIDEpKSB7CisgICAgICAgICAgaWYgKHJlc3VsdCAhPSBKTklfRkFMU0UpIHsKKyAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICBzdGF0aWMgam1ldGhvZElEIG1ldGhvZCA9IDA7CisKKyAgICAgIGlmIChmaW5kSmF2YVN0YXRpY01ldGhvZChlbnYsICZtZXRob2QsIGlucHV0SGFuZGxlcnNDbGFzcywgImtleUhhbmRsZXJfZnVuY3Rpb24iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpBVkFfU0lHX01FVEhPRChKQVZBX1NJR19CT09MRUFOLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKQVZBX1NJR19JTlQgLy8ga2V5CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSkpIHsKKyAgICAgICAgamJvb2xlYW4gcmVzdWx0ID0gKCplbnYpLT5DYWxsU3RhdGljQm9vbGVhbk1ldGhvZChlbnYsIGlucHV0SGFuZGxlcnNDbGFzcywgbWV0aG9kLCBjaGFyYWN0ZXItU0NSX0tFWV9GVU5DVElPTik7CisKKyAgICAgICAgaWYgKCFjbGVhckphdmFFeGNlcHRpb24oZW52LCAxKSkgeworICAgICAgICAgIGlmIChyZXN1bHQgIT0gSk5JX0ZBTFNFKSB7CisgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9CisgIH0KKworICBsb2dNZXNzYWdlKExPR19XQVJOSU5HLCAidW5zdXBwb3J0ZWQga2V5OiAlMDRYIiwga2V5KTsKKyAgcmV0dXJuIDA7Cit9CisKKyNkZWZpbmUgU0lNUExFX0lOUFVUX0hBTkRMRVJfQ09NTUFORChjb21tYW5kLCBoYW5kbGVyKSBcCisgIGNhc2UgQlJMX0NNRF8jI2NvbW1hbmQ6IHsgXAorICAgIHN0YXRpYyBqbWV0aG9kSUQgbWV0aG9kID0gMDsgXAorICAgIGlmIChjYWxsU2ltcGxlSW5wdXRIYW5kbGVyKCZtZXRob2QsIGhhbmRsZXIpKSByZXR1cm4gMTsgXAorICAgIGJyZWFrOyBcCisgIH0KKworc3RhdGljIGludAoraGFuZGxlQ29tbWFuZF9BbmRyb2lkU2NyZWVuIChpbnQgY29tbWFuZCkgeworICBpbnQgYmxrID0gY29tbWFuZCAmIEJSTF9NU0tfQkxLOworICBpbnQgYXJnID0gY29tbWFuZCAmIEJSTF9NU0tfQVJHOworICBpbnQgY21kID0gYmxrIHwgYXJnOworCisgIHN3aXRjaCAoY21kKSB7CisgICAgU0lNUExFX0lOUFVUX0hBTkRMRVJfQ09NTUFORChUWFRTRUxfQUxMLCAidGV4dEhhbmRsZXJfc2VsZWN0QWxsIikKKyAgICBTSU1QTEVfSU5QVVRfSEFORExFUl9DT01NQU5EKEhPU1RfQ09QWSwgInRleHRIYW5kbGVyX2NvcHlTZWxlY3Rpb24iKQorICAgIFNJTVBMRV9JTlBVVF9IQU5ETEVSX0NPTU1BTkQoSE9TVF9DVVQsICJ0ZXh0SGFuZGxlcl9jdXRTZWxlY3Rpb24iKQorICAgIFNJTVBMRV9JTlBVVF9IQU5ETEVSX0NPTU1BTkQoSE9TVF9QQVNURSwgInRleHRIYW5kbGVyX3Bhc3RlQ2xpcGJvYXJkIikKKworICAgIFNJTVBMRV9JTlBVVF9IQU5ETEVSX0NPTU1BTkQoSU5ESUNBVE9SUywgImdsb2JhbEFjdGlvbl9zaG93U3RhdHVzSW5kaWNhdG9ycyIpCisKKyAgICBTSU1QTEVfSU5QVVRfSEFORExFUl9DT01NQU5EKEdVSV9USVRMRSwgImdsb2JhbEFjdGlvbl9zaG93V2luZG93VGl0bGUiKQorICAgIFNJTVBMRV9JTlBVVF9IQU5ETEVSX0NPTU1BTkQoR1VJX0JSTF9BQ1RJT05TLCAiZ2xvYmFsQWN0aW9uX2JyYWlsbGVBY3Rpb25zIikKKyAgICBTSU1QTEVfSU5QVVRfSEFORExFUl9DT01NQU5EKEdVSV9IT01FLCAiZ2xvYmFsQWN0aW9uX2hvbWVTY3JlZW4iKQorICAgIFNJTVBMRV9JTlBVVF9IQU5ETEVSX0NPTU1BTkQoR1VJX0JBQ0ssICJnbG9iYWxBY3Rpb25fYmFja0J1dHRvbiIpCisgICAgU0lNUExFX0lOUFVUX0hBTkRMRVJfQ09NTUFORChHVUlfREVWX1NFVFRJTkdTLCAiZ2xvYmFsQWN0aW9uX3F1aWNrU2V0dGluZ3MiKQorICAgIFNJTVBMRV9JTlBVVF9IQU5ETEVSX0NPTU1BTkQoR1VJX0RFVl9PUFRJT05TLCAiZ2xvYmFsQWN0aW9uX2RldmljZU9wdGlvbnMiKQorICAgIFNJTVBMRV9JTlBVVF9IQU5ETEVSX0NPTU1BTkQoR1VJX0FQUF9MSVNULCAiZ2xvYmFsQWN0aW9uX3JlY2VudEFwcGxpY2F0aW9ucyIpCisgICAgU0lNUExFX0lOUFVUX0hBTkRMRVJfQ09NTUFORChHVUlfQVBQX01FTlUsICJnbG9iYWxBY3Rpb25fbWVudUJ1dHRvbiIpCisgICAgU0lNUExFX0lOUFVUX0hBTkRMRVJfQ09NTUFORChHVUlfQVBQX0FMRVJUUywgImdsb2JhbEFjdGlvbl9ub3RpZmljYXRpb25zU2hhZGUiKQorCisgICAgU0lNUExFX0lOUFVUX0hBTkRMRVJfQ09NTUFORChHVUlfQVJFQV9BQ1RWLCAiZ2xvYmFsQWN0aW9uX3RvQWN0aXZlV2luZG93IikKKyAgICBTSU1QTEVfSU5QVVRfSEFORExFUl9DT01NQU5EKEdVSV9BUkVBX1BSRVYsICJnbG9iYWxBY3Rpb25fdG9QcmV2aW91c1dpbmRvdyIpCisgICAgU0lNUExFX0lOUFVUX0hBTkRMRVJfQ09NTUFORChHVUlfQVJFQV9ORVhULCAiZ2xvYmFsQWN0aW9uX3RvTmV4dFdpbmRvdyIpCisKKyAgICBTSU1QTEVfSU5QVVRfSEFORExFUl9DT01NQU5EKEdVSV9JVEVNX0ZSU1QsICJnbG9iYWxBY3Rpb25fdG9GaXJzdEl0ZW0iKQorICAgIFNJTVBMRV9JTlBVVF9IQU5ETEVSX0NPTU1BTkQoR1VJX0lURU1fUFJFViwgImdsb2JhbEFjdGlvbl90b1ByZXZpb3VzSXRlbSIpCisgICAgU0lNUExFX0lOUFVUX0hBTkRMRVJfQ09NTUFORChHVUlfSVRFTV9ORVhULCAiZ2xvYmFsQWN0aW9uX3RvTmV4dEl0ZW0iKQorICAgIFNJTVBMRV9JTlBVVF9IQU5ETEVSX0NPTU1BTkQoR1VJX0lURU1fTEFTVCwgImdsb2JhbEFjdGlvbl90b0xhc3RJdGVtIikKKworICAgIGRlZmF1bHQ6IHsKKyAgICAgIHN3aXRjaCAoYmxrKSB7CisgICAgICAgIGNhc2UgQlJMX0NNRF9CTEsoUEFTU0RPVFMpOiB7CisgICAgICAgICAgaWYgKChjb21tYW5kICYgQlJMX0ZMR19JTlBVVF9NRVRBKSA9PSAwKSByZXR1cm4gMDsKKworICAgICAgICAgIGlmIChmaW5kSW5wdXRIYW5kbGVyc0NsYXNzKCkpIHsKKyAgICAgICAgICAgIHN0YXRpYyBqbWV0aG9kSUQgbWV0aG9kID0gMDsKKworICAgICAgICAgICAgaWYgKGZpbmRKYXZhU3RhdGljTWV0aG9kKGVudiwgJm1ldGhvZCwgaW5wdXRIYW5kbGVyc0NsYXNzLCAicGVyZm9ybVN0cnVjdHVyYWxNb3Rpb24iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpBVkFfU0lHX01FVEhPRChKQVZBX1NJR19CT09MRUFOLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKQVZBX1NJR19CWVRFIC8vIGRvdHMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApKSkgeworICAgICAgICAgICAgICBqYnl0ZSBkb3RzID0gYXJnOworICAgICAgICAgICAgICBqYm9vbGVhbiByZXN1bHQgPSAoKmVudiktPkNhbGxTdGF0aWNCb29sZWFuTWV0aG9kKGVudiwgaW5wdXRIYW5kbGVyc0NsYXNzLCBtZXRob2QsIGRvdHMpOworICAgICAgICAgICAgICBpZiAoY2xlYXJKYXZhRXhjZXB0aW9uKGVudiwgMSkpIHJlc3VsdCA9IEpOSV9GQUxTRTsKKyAgICAgICAgICAgICAgaWYgKHJlc3VsdCA9PSBKTklfVFJVRSkgcmV0dXJuIDE7CisgICAgICAgICAgICB9CisgICAgICAgICAgfQorCisgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgIHJldHVybiAwOworICAgICAgfQorCisgICAgICBicmVhazsKKyAgICB9CisgIH0KKworICBhbGVydChBTEVSVF9DT01NQU5EX1JFSkVDVEVEKTsKKyAgcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQKK2NsZWFyU2VsZWN0aW9uX0FuZHJvaWRTY3JlZW4gKHZvaWQpIHsKKyAgc3RhdGljIGptZXRob2RJRCBtZXRob2QgPSAwOworICByZXR1cm4gY2FsbFNpbXBsZUlucHV0SGFuZGxlcigmbWV0aG9kLCAidGV4dEhhbmRsZXJfY2xlYXJTZWxlY3Rpb24iKTsKK30KKworc3RhdGljIGludAorc2V0U2VsZWN0aW9uX0FuZHJvaWRTY3JlZW4gKGludCBzdGFydENvbHVtbiwgaW50IHN0YXJ0Um93LCBpbnQgZW5kQ29sdW1uLCBpbnQgZW5kUm93KSB7CisgIGlmIChmaW5kSW5wdXRIYW5kbGVyc0NsYXNzKCkpIHsKKyAgICBzdGF0aWMgam1ldGhvZElEIG1ldGhvZCA9IDA7CisKKyAgICBpZiAoZmluZEphdmFTdGF0aWNNZXRob2QoZW52LCAmbWV0aG9kLCBpbnB1dEhhbmRsZXJzQ2xhc3MsICJ0ZXh0SGFuZGxlcl9zZXRTZWxlY3Rpb24iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKQVZBX1NJR19NRVRIT0QoSkFWQV9TSUdfQk9PTEVBTiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpBVkFfU0lHX0lOVCAvLyBzdGFydENvbHVtbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSkFWQV9TSUdfSU5UIC8vIHN0YXJ0Um93CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKQVZBX1NJR19JTlQgLy8gZW5kQ29sdW1uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKQVZBX1NJR19JTlQgLy8gZW5kUm93CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkpKSB7CisgICAgICBqYm9vbGVhbiByZXN1bHQgPSAoKmVudiktPkNhbGxTdGF0aWNCb29sZWFuTWV0aG9kKAorICAgICAgICBlbnYsIGlucHV0SGFuZGxlcnNDbGFzcywgbWV0aG9kLAorICAgICAgICBzdGFydENvbHVtbiwgc3RhcnRSb3csIGVuZENvbHVtbiwgZW5kUm93CisgICAgICApOworCisgICAgICBpZiAoIWNsZWFySmF2YUV4Y2VwdGlvbihlbnYsIDEpKSB7CisgICAgICAgIGlmIChyZXN1bHQgIT0gSk5JX0ZBTFNFKSB7CisgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9CisgIH0KKworICByZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQKK3Njcl9pbml0aWFsaXplIChNYWluU2NyZWVuICptYWluKSB7CisgIGluaXRpYWxpemVSZWFsU2NyZWVuKG1haW4pOworCisgIG1haW4tPmJhc2UucG9sbCA9IHBvbGxfQW5kcm9pZFNjcmVlbjsKKyAgbWFpbi0+YmFzZS5yZWZyZXNoID0gcmVmcmVzaF9BbmRyb2lkU2NyZWVuOworICBtYWluLT5iYXNlLmRlc2NyaWJlID0gZGVzY3JpYmVfQW5kcm9pZFNjcmVlbjsKKworICBtYWluLT5iYXNlLnJlYWRDaGFyYWN0ZXJzID0gcmVhZENoYXJhY3RlcnNfQW5kcm9pZFNjcmVlbjsKKyAgbWFpbi0+YmFzZS5yb3V0ZUN1cnNvciA9IHJvdXRlQ3Vyc29yX0FuZHJvaWRTY3JlZW47CisKKyAgbWFpbi0+YmFzZS5pbnNlcnRLZXkgPSBpbnNlcnRLZXlfQW5kcm9pZFNjcmVlbjsKKyAgbWFpbi0+YmFzZS5oYW5kbGVDb21tYW5kID0gaGFuZGxlQ29tbWFuZF9BbmRyb2lkU2NyZWVuOworCisgIG1haW4tPmJhc2UuY2xlYXJTZWxlY3Rpb24gPSBjbGVhclNlbGVjdGlvbl9BbmRyb2lkU2NyZWVuOworICBtYWluLT5iYXNlLnNldFNlbGVjdGlvbiA9IHNldFNlbGVjdGlvbl9BbmRyb2lkU2NyZWVuOworCisgIG1haW4tPmNvbnN0cnVjdCA9IGNvbnN0cnVjdF9BbmRyb2lkU2NyZWVuOworICBtYWluLT5kZXN0cnVjdCA9IGRlc3RydWN0X0FuZHJvaWRTY3JlZW47CisKKyAgZW52ID0gZ2V0SmF2YU5hdGl2ZUludGVyZmFjZSgpOworfQpkaWZmIC0tZ2l0IGEvRHJpdmVycy9TY3JlZW4vQXRTcGkvTWFrZWZpbGUuaW4gYi9Ecml2ZXJzL1NjcmVlbi9BdFNwaS9NYWtlZmlsZS5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYzczNmViCi0tLSAvZGV2L251bGwKKysrIGIvRHJpdmVycy9TY3JlZW4vQXRTcGkvTWFrZWZpbGUuaW4KQEAgLTAsMCArMSwyOSBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorIyAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyMKKyMgQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorIworIyBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorIworIyBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisjIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyMgbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisjCisjIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK0RSSVZFUl9DT0RFID0gYXMKK0RSSVZFUl9OQU1FID0gQXRTcGkKK0RSSVZFUl9VU0FHRSA9IFgxMSBkZXNrdG9wIHZpYSBBVC1TUEkgMQorRFJJVkVSX1ZFUlNJT04gPSAKK0RSSVZFUl9ERVZFTE9QRVJTID0gCitTQ1JfT0JKUyA9IEBzY3JlZW5fbGlicmFyaWVzX2FzQAoraW5jbHVkZSAkKFNSQ19UT1Apc2NyZWVuLm1rCisKK3NjcmVlbi4kTzoKKwkkKENDKSAkKFNDUl9DRkxBR1MpICQoQ1NQSV9JTkNMVURFUykgLWMgJChTUkNfRElSKS9zY3JlZW4uYworCmRpZmYgLS1naXQgYS9Ecml2ZXJzL1NjcmVlbi9BdFNwaS9zY3JlZW4uYyBiL0RyaXZlcnMvU2NyZWVuL0F0U3BpL3NjcmVlbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY3MDdhNGEKLS0tIC9kZXYvbnVsbAorKysgYi9Ecml2ZXJzL1NjcmVlbi9BdFNwaS9zY3JlZW4uYwpAQCAtMCwwICsxLDc0OSBAQAorLyoKKyAqIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisgKiAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisgKgorICogQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKKyNpbmNsdWRlICJwcm9sb2d1ZS5oIgorCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVkZSA8bGltaXRzLmg+CisjaW5jbHVkZSA8bG9jYWxlLmg+CisKKyNpZmRlZiBfX01JTkdXMzJfXworI2luY2x1ZGUgIndpbl9wdGhyZWFkLmgiCisjZWxzZSAvKiBfX01JTkdXMzJfXyAqLworI2luY2x1ZGUgPHNlbWFwaG9yZS5oPgorI2VuZGlmIC8qIF9fTUlOR1czMl9fICovCisKKyNpbmNsdWRlIDxjc3BpL3NwaS5oPgorI2luY2x1ZGUgPFgxMS9rZXlzeW0uaD4KKyNpbmNsdWRlIDxYMTEvWGxpYi5oPgorCisjaW5jbHVkZSAibG9nLmgiCisjaW5jbHVkZSAicGFyc2UuaCIKKyNpbmNsdWRlICJ0aHJlYWQuaCIKKyNpbmNsdWRlICJicmxfY21kcy5oIgorCit0eXBlZGVmIGVudW0geworICBQQVJNX1RZUEUKK30gU2NyZWVuUGFyYW1ldGVyczsKKyNkZWZpbmUgU0NSUEFSTVMgInR5cGUiCisKKyNpbmNsdWRlICJzY3JfZHJpdmVyLmgiCisKK3N0YXRpYyBpbnQgdHlwZVRleHQgPSAwLCB0eXBlVGVybWluYWwgPSAxLCB0eXBlQWxsID0gMDsKK3N0YXRpYyBBY2Nlc3NpYmxlVGV4dCAqY3VyVGVybTsKK3N0YXRpYyBBY2Nlc3NpYmxlICpjdXJGb2N1czsKKworc3RhdGljIGxvbmcgY3VyTnVtUm93cywgY3VyTnVtQ29sczsKK3N0YXRpYyB3Y2hhcl90ICoqY3VyUm93czsKK3N0YXRpYyBsb25nICpjdXJSb3dMZW5ndGhzOworc3RhdGljIGxvbmcgY3VyUG9zWCxjdXJQb3NZOworc3RhdGljIHB0aHJlYWRfbXV0ZXhfdCB1cGRhdGVNdXRleCA9IFBUSFJFQURfTVVURVhfSU5JVElBTElaRVI7CisKK3B0aHJlYWRfdCBTUElfbWFpbl90aHJlYWQ7CisKKy8qIGhhdmluZyBvdXIgb3duIGltcGxlbWVudGF0aW9uIGlzIG11Y2ggbW9yZSBpbmRlcGVuZGFudCBvbiBsb2NhbGVzICovCisKK3R5cGVkZWYgc3RydWN0IHsKKyAgaW50IHJlbWFpbmluZzsKKyAgd2ludF90IGN1cnJlbnQ7Cit9IG15X21ic3RhdGVfdDsKKworc3RhdGljIG15X21ic3RhdGVfdCBpbnRlcm5hbDsKKworc3RhdGljIHNpemVfdCBteV9tYnJ0b3djKHdjaGFyX3QgKnB3YywgY29uc3QgY2hhciAqcywgc2l6ZV90IG4sIG15X21ic3RhdGVfdCAqcHMpIHsKKyAgY29uc3QgdW5zaWduZWQgY2hhciAqYyA9IChjb25zdCB1bnNpZ25lZCBjaGFyICopIHM7CisgIGludCByZWFkID0gMDsKKyAgaWYgKCFjKSB7CisgICAgaWYgKHBzLT5yZW1haW5pbmcpIHsKKyAgICAgIGVycm5vID0gRUlMU0VROworICAgICAgcmV0dXJuIChzaXplX3QpKC0xKTsKKyAgICB9CisgICAgcmV0dXJuIDA7CisgIH0KKworICBpZiAobiAmJiAhcHMtPnJlbWFpbmluZykgeworICAgIC8qIGluaXRpYWwgc3RhdGUgKi8KKyAgICBpZiAoISgqYyYweDgwKSkgeworICAgICAgLyogbW9zdCBmcmVxdWVudCBjYXNlOiBhc2NpaSAqLworICAgICAgaWYgKHB3YykKKwkqcHdjID0gKmM7CisgICAgICBpZiAoISpjKQorCXJldHVybiAwOworICAgICAgcmV0dXJuIDE7CisgICAgfSBlbHNlIGlmICghKCpjJjB4NDApKSB7CisgICAgICAvKiB1dGYtOCBjaGFyIGNvbnRpbnVhdGlvbiwgc2hvdWxkbid0IGhhcHBlbiB3aXRoIHJlbWFpbmluZyA9PSAwICEgKi8KKyAgICAgIGdvdG8gZXJyb3I7CisgICAgfSBlbHNlIHsKKyAgICAgIC8qIG5ldyB1dGYtOCBjaGFyLCBnZXQgcmVtYWluaW5nIGNoYXJzICovCisgICAgICByZWFkID0gMTsKKyAgICAgIGlmICghKCpjJjB4MjApKSB7CisJcHMtPnJlbWFpbmluZyA9IDE7CisJcHMtPmN1cnJlbnQgPSAqYyYoKDE8PDUpLTEpOworICAgICAgfSBlbHNlIGlmICghKCpjJjB4MTApKSB7CisJcHMtPnJlbWFpbmluZyA9IDI7CisJcHMtPmN1cnJlbnQgPSAqYyYoKDE8PDQpLTEpOworICAgICAgfSBlbHNlIGlmICghKCpjJjB4MDgpKSB7CisJcHMtPnJlbWFpbmluZyA9IDM7CisJcHMtPmN1cnJlbnQgPSAqYyYoKDE8PDMpLTEpOworICAgICAgfSBlbHNlIGlmICghKCpjJjB4MDQpKSB7CisJcHMtPnJlbWFpbmluZyA9IDQ7CisJcHMtPmN1cnJlbnQgPSAqYyYoKDE8PDIpLTEpOworICAgICAgfSBlbHNlIGlmICghKCpjJjB4MDIpKSB7CisJcHMtPnJlbWFpbmluZyA9IDU7CisJcHMtPmN1cnJlbnQgPSAqYyYoKDE8PDEpLTEpOworICAgICAgfSBlbHNlCisJLyogMHhmZiBhbmQgMHhmZSBhcmUgbm90IGFsbG93ZWQgKi8KKwlnb3RvIGVycm9yOworICAgICAgYysrOworICAgIH0KKyAgfQorICAvKiBsb29raW5nIGZvciBjb250aW51YXRpb24gY2hhcnMgKi8KKyAgd2hpbGUgKG4tcmVhZCkgeworICAgIGlmICgoKmMmMHhjMCkgIT0gMFg4MCkKKyAgICAgIC8qIG5vdCBjb250aW51YXRpb24gY2hhciwgZXJyb3IgISAqLworICAgICAgZ290byBlcnJvcjsKKyAgICAvKiB1dGYtOCBjaGFyIGNvbnRpbnVhdGlvbiAqLworICAgIHBzLT5jdXJyZW50ID0gKHBzLT5jdXJyZW50PDw2KSB8ICgqYyYoKDE8PDYpLTEpKTsKKyAgICByZWFkKys7CisgICAgaWYgKCEoLS1wcy0+cmVtYWluaW5nKSkgeworICAgICAgaWYgKHB3YykKKwkqcHdjID0gcHMtPmN1cnJlbnQ7CisgICAgICBpZiAoIXBzLT5jdXJyZW50KQorCS8qIHNob3VsZG4ndCBjb2RlZCB0aGlzIHdheSwgYnV0IHdlbGwuLi4gKi8KKwlyZXR1cm4gMDsKKyAgICAgIHJldHVybiByZWFkOworICAgIH0KKyAgICBjKys7CisgIH0KKyAgcmV0dXJuIChzaXplX3QpKC0yKTsKK2Vycm9yOgorICBlcnJubyA9IEVJTFNFUTsKKyAgcmV0dXJuIChzaXplX3QpKC0xKTsKK30KKworc3RhdGljIHNpemVfdCBteV9tYnNydG93Y3Mod2NoYXJfdCAqZGVzdCwgY29uc3QgY2hhciAqKnNyYywgc2l6ZV90IGxlbiwgbXlfbWJzdGF0ZV90ICpwcykgeworICBpbnQgcHV0ID0gMDsKKyAgc2l6ZV90IHNraXA7CisgIHdjaGFyX3QgYnVmLCpidWZwOworCisgIGlmICghcHMpIHBzID0gJmludGVybmFsOworICBpZiAoZGVzdCkKKyAgICBidWZwID0gZGVzdDsKKyAgZWxzZQorICAgIGJ1ZnAgPSAmYnVmOworCisgIHdoaWxlIChsZW4tcHV0IHx8ICFkZXN0KSB7CisgICAgc2tpcCA9IG15X21icnRvd2MoYnVmcCwgKnNyYywgNiwgcHMpOworICAgIHN3aXRjaCAoc2tpcCkgeworICAgICAgY2FzZSAoc2l6ZV90KSgtMik6IGVycm5vID0gRUlMU0VROyAvKiBzaG91bGRuJ3QgaGFwcGVuICEgKi8KKyAgICAgIGNhc2UgKHNpemVfdCkoLTEpOiByZXR1cm4gKHNpemVfdCkoLTEpOworICAgICAgY2FzZSAwOiAqc3JjID0gTlVMTDsgcmV0dXJuIHB1dDsKKyAgICB9CisgICAgKnNyYyArPSBza2lwOworICAgIGlmIChkZXN0KSBidWZwKys7CisgICAgcHV0Kys7CisgIH0KKyAgcmV0dXJuIHB1dDsKK30KKworc3RhdGljIHNpemVfdCBteV9tYnJsZW4oY29uc3QgY2hhciAqcywgc2l6ZV90IG4sIG15X21ic3RhdGVfdCAqcHMpIHsKKyAgcmV0dXJuIG15X21icnRvd2MoTlVMTCwgcywgbiwgcHM/cHM6JmludGVybmFsKTsKK30KKworc3RhdGljIHNpemVfdCBteV9tYnNsZW4oY29uc3QgY2hhciAqcywgc2l6ZV90IG4pIHsKKyAgbXlfbWJzdGF0ZV90IHBzOworICBzaXplX3QgcmV0PTA7CisgIHNpemVfdCBlYXRlbjsKKyAgbWVtc2V0KCZwcywwLHNpemVvZihwcykpOworICB3aGlsZShuKSB7CisgICAgaWYgKChlYXRlbiA9IG15X21icmxlbihzLG4sJnBzKSk8MCkKKyAgICAgIHJldHVybiBlYXRlbjsKKyAgICBpZiAoIShlYXRlbikpIHJldHVybiByZXQ7CisgICAgcys9ZWF0ZW47CisgICAgbi09ZWF0ZW47CisgICAgcmV0Kys7CisgIH0KKyAgcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgYWRkUm93cyhsb25nIHBvcywgbG9uZyBudW0pIHsKKyAgY3VyTnVtUm93cyArPSBudW07CisgIGN1clJvd3MgPSByZWFsbG9jKGN1clJvd3MsY3VyTnVtUm93cypzaXplb2YoKmN1clJvd3MpKTsKKyAgY3VyUm93TGVuZ3RocyA9IHJlYWxsb2MoY3VyUm93TGVuZ3RocyxjdXJOdW1Sb3dzKnNpemVvZigqY3VyUm93TGVuZ3RocykpOworICBtZW1tb3ZlKGN1clJvd3MgICAgICArcG9zK251bSxjdXJSb3dzICAgICAgK3BvcywoY3VyTnVtUm93cy0ocG9zK251bSkpKnNpemVvZigqY3VyUm93cykpOworICBtZW1tb3ZlKGN1clJvd0xlbmd0aHMrcG9zK251bSxjdXJSb3dMZW5ndGhzK3BvcywoY3VyTnVtUm93cy0ocG9zK251bSkpKnNpemVvZigqY3VyUm93TGVuZ3RocykpOworfQorCitzdGF0aWMgdm9pZCBkZWxSb3dzKGxvbmcgcG9zLCBsb25nIG51bSkgeworICBsb25nIHk7CisgIGZvciAoeT1wb3M7eTxwb3MrbnVtO3krKykKKyAgICBmcmVlKGN1clJvd3NbeV0pOworICBtZW1tb3ZlKGN1clJvd3MgICAgICArcG9zLGN1clJvd3MgICAgICArcG9zK251bSwoY3VyTnVtUm93cy0ocG9zK251bSkpKnNpemVvZigqY3VyUm93cykpOworICBtZW1tb3ZlKGN1clJvd0xlbmd0aHMrcG9zLGN1clJvd0xlbmd0aHMrcG9zK251bSwoY3VyTnVtUm93cy0ocG9zK251bSkpKnNpemVvZigqY3VyUm93TGVuZ3RocykpOworICBjdXJOdW1Sb3dzIC09IG51bTsKKyAgY3VyUm93cyA9IHJlYWxsb2MoY3VyUm93cyxjdXJOdW1Sb3dzKnNpemVvZigqY3VyUm93cykpOworICBjdXJSb3dMZW5ndGhzID0gcmVhbGxvYyhjdXJSb3dMZW5ndGhzLGN1ck51bVJvd3Mqc2l6ZW9mKCpjdXJSb3dMZW5ndGhzKSk7Cit9CisKK3N0YXRpYyBpbnQKK3Byb2Nlc3NQYXJhbWV0ZXJzX0F0U3BpU2NyZWVuIChjaGFyICoqcGFyYW1ldGVycykgeworICBpZiAoKnBhcmFtZXRlcnNbUEFSTV9UWVBFXSkgeworICAgIHN0YXRpYyBjb25zdCBjaGFyICpjb25zdCBjaG9pY2VzW10gPSB7InRleHQiICAgLCAidGVybWluYWwiICAgLCAiYWxsIiAgICwgTlVMTH07IAorICAgIHN0YXRpYyAgICAgICBpbnQgICpjb25zdCBmbGFncyAgW10gPSB7JnR5cGVUZXh0LCAmdHlwZVRlcm1pbmFsLCAmdHlwZUFsbCwgTlVMTH07CisgICAgaW50IGNvdW50OworICAgIGNoYXIgKip0eXBlcyA9IHNwbGl0U3RyaW5nKHBhcmFtZXRlcnNbUEFSTV9UWVBFXSwgJysnLCAmY291bnQpOworCisgICAgeworICAgICAgaW50ICpjb25zdCAqZmxhZyA9IGZsYWdzOworICAgICAgd2hpbGUgKCpmbGFnKSAqKmZsYWcrKyA9IDA7CisgICAgfQorCisgICAgeworICAgICAgaW50IGluZGV4OworICAgICAgZm9yIChpbmRleD0wOyBpbmRleDxjb3VudDsgaW5kZXgrKykgeworICAgICAgICBjb25zdCBjaGFyICp0eXBlID0gdHlwZXNbaW5kZXhdOworICAgICAgICB1bnNpZ25lZCBpbnQgY2hvaWNlOworCisgICAgICAgIGlmICh2YWxpZGF0ZUNob2ljZSgmY2hvaWNlLCB0eXBlLCBjaG9pY2VzKSkgeworICAgICAgICAgIGludCAqZmxhZyA9IGZsYWdzW2Nob2ljZV07CisgICAgICAgICAgaWYgKChmbGFnID09ICZ0eXBlQWxsKSAmJiAoaW5kZXggPiAwKSkgeworICAgICAgICAgICAgbG9nTWVzc2FnZShMT0dfV0FSTklORywgIndpZGdldCB0eXBlIGlzIG11dHVhbGx5IGV4Y2x1c2l2ZTogJXMiLCB0eXBlKTsKKyAgICAgICAgICB9IGVsc2UgaWYgKCpmbGFnIHx8IHR5cGVBbGwpIHsKKyAgICAgICAgICAgIGxvZ01lc3NhZ2UoTE9HX1dBUk5JTkcsICJ3aWRnZXQgdHlwZSBzcGVjaWZpZWQgbW9yZSB0aGFuIG9uY2U6ICVzIiwgdHlwZSk7CisgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICpmbGFnID0gMTsKKyAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgbG9nTWVzc2FnZShMT0dfV0FSTklORywgIiVzOiAlcyIsICJpbnZhbGlkIHdpZGdldCB0eXBlIiwgdHlwZSk7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9CisKKyAgICBkZWFsbG9jYXRlU3RyaW5ncyh0eXBlcyk7CisgIH0KKworICByZXR1cm4gMTsKK30KKworc3RhdGljIHZvaWQgZmluZFBvc2l0aW9uKGxvbmcgcG9zaXRpb24sIGxvbmcgKnB4LCBsb25nICpweSkgeworICBsb25nIG9mZnNldD0wLCBuZXdvZmZzZXQsIHgsIHk7CisgIC8qIFhYWDogSSBkb24ndCBrbm93IHdoYXQgdGhleSBkbyB3aXRoIG5lY2Vzc2FyeSBjb21iaW5pbmcgYWNjZW50cyAqLworICBmb3IgKHk9MDsgeTxjdXJOdW1Sb3dzOyB5KyspIHsKKyAgICBpZiAoKG5ld29mZnNldCA9IG9mZnNldCArIGN1clJvd0xlbmd0aHNbeV0pID4gcG9zaXRpb24pCisgICAgICBicmVhazsKKyAgICBvZmZzZXQgPSBuZXdvZmZzZXQ7CisgIH0KKyAgaWYgKHk9PWN1ck51bVJvd3MpIHsKKyAgICBpZiAoIWN1ck51bVJvd3MpIHsKKyAgICAgIHkgPSAwOworICAgICAgeCA9IDA7CisgICAgfSBlbHNlIHsKKyAgICAgIC8qIHRoaXMgX2Nhbl8gaGFwcGVuLCB3aGVuIGRlbGV0aW5nIHdoaWxlIGNhcmV0IGlzIGF0IHRoZSBlbmQgb2YgdGhlCisgICAgICAgKiB0ZXJtaW5hbDogY2FyZXQgcG9zaXRpb24gaXMgb25seSB1cGRhdGVkIGFmdGVyd2FyZHMuLi4gSW4gdGhlCisgICAgICAgKiBtZWFud2hpbGUsIGtlZXAgY2FyZXQgYXQgdGhlIGVuZCBvZiBsYXN0IGxpbmUuICovCisgICAgICB5ID0gY3VyTnVtUm93cy0xOworICAgICAgeCA9IGN1clJvd0xlbmd0aHNbeV07CisgICAgfQorICB9IGVsc2UKKyAgICB4ID0gcG9zaXRpb24tb2Zmc2V0OworICAqcHggPSB4OworICAqcHkgPSB5OworfQorCitzdGF0aWMgdm9pZCBjYXJldFBvc2l0aW9uKGxvbmcgY2FyZXQpIHsKKyAgZmluZFBvc2l0aW9uKGNhcmV0LCZjdXJQb3NYLCZjdXJQb3NZKTsKK30KKworc3RhdGljIHZvaWQgZmluaVRlcm0odm9pZCkgeworICBsb2dNZXNzYWdlKExPR19ERUJVRywiZW5kIG9mIHRlcm0gJXAiLGN1clRlcm0pOworICBBY2Nlc3NpYmxlX3VucmVmKGN1clRlcm0pOworICBjdXJUZXJtID0gTlVMTDsKKyAgQWNjZXNzaWJsZV91bnJlZihjdXJGb2N1cyk7CisgIGN1ckZvY3VzID0gTlVMTDsKKyAgY3VyUG9zWCA9IGN1clBvc1kgPSAwOworfQorCitzdGF0aWMgdm9pZCByZXN0YXJ0VGVybShBY2Nlc3NpYmxlICpuZXdUZXJtLCBBY2Nlc3NpYmxlVGV4dCAqbmV3VGV4dFRlcm0pIHsKKyAgY2hhciAqYywqZDsKKyAgY29uc3QgY2hhciAqZTsKKyAgbG9uZyBpLGxlbjsKKyAgY2hhciAqdGV4dDsKKworICBpZiAoY3VyRm9jdXMpCisgICAgZmluaVRlcm0oKTsKKyAgQWNjZXNzaWJsZV9yZWYoY3VyRm9jdXMgPSBuZXdUZXJtKTsKKyAgY3VyVGVybSA9IG5ld1RleHRUZXJtOworICBsb2dNZXNzYWdlKExPR19ERUJVRywibmV3IHRlcm0gJXAiLGN1clRlcm0pOworICB0ZXh0ID0gQWNjZXNzaWJsZVRleHRfZ2V0VGV4dChjdXJUZXJtLDAsTE9OR19NQVgpOworICBjdXJOdW1Sb3dzID0gMDsKKyAgaWYgKGN1clJvd3MpIHsKKyAgICBmb3IgKGk9MDtpPGN1ck51bVJvd3M7aSsrKQorICAgICAgZnJlZShjdXJSb3dzW2ldKTsKKyAgICBmcmVlKGN1clJvd3MpOworICB9CisgIGZyZWUoY3VyUm93TGVuZ3Rocyk7CisgIGMgPSB0ZXh0OworICB3aGlsZSAoKmMpIHsKKyAgICBjdXJOdW1Sb3dzKys7CisgICAgaWYgKCEoYyA9IHN0cmNocihjLCdcbicpKSkKKyAgICAgIGJyZWFrOworICAgIGMrKzsKKyAgfQorICBsb2dNZXNzYWdlKExPR19ERUJVRywiJWxkIHJvd3MiLGN1ck51bVJvd3MpOworICBjdXJSb3dzID0gbWFsbG9jKGN1ck51bVJvd3MgKiBzaXplb2YoKmN1clJvd3MpKTsKKyAgY3VyUm93TGVuZ3RocyA9IG1hbGxvYyhjdXJOdW1Sb3dzICogc2l6ZW9mKCpjdXJSb3dMZW5ndGhzKSk7CisgIGkgPSAwOworICBjdXJOdW1Db2xzID0gMDsKKyAgZm9yIChjID0gdGV4dDsgKmM7IGMgPSBkKzEpIHsKKyAgICBkID0gc3RyY2hyKGMsJ1xuJyk7CisgICAgaWYgKGQpCisgICAgICAqZCA9IDA7CisgICAgZSA9IGM7CisgICAgY3VyUm93TGVuZ3Roc1tpXSA9IChsZW4gPSBteV9tYnNydG93Y3MoTlVMTCwmZSwwLE5VTEwpKSArIChkICE9IE5VTEwpOworICAgIGlmIChsZW4gPiBjdXJOdW1Db2xzKQorICAgICAgY3VyTnVtQ29scyA9IGxlbjsKKyAgICBlbHNlIGlmIChsZW4gPCAwKSB7CisgICAgICBpZiAobGVuPT0tMikKKwlsb2dNZXNzYWdlKExPR19FUlIsInVudGVybWluYXRlZCBzZXF1ZW5jZSAlcyIsYyk7CisgICAgICBlbHNlIGlmIChsZW49PS0xKQorCWxvZ1N5c3RlbUVycm9yKCJtYnJsZW4iKTsKKyAgICAgIGN1clJvd0xlbmd0aHNbaV0gPSAobGVuID0gLTEpICsgKGQgIT0gTlVMTCk7CisgICAgfQorICAgIGN1clJvd3NbaV0gPSBtYWxsb2MoKGxlbiArIChkIT1OVUxMKSkgKiBzaXplb2YoKmN1clJvd3NbaV0pKTsKKyAgICBlID0gYzsKKyAgICBteV9tYnNydG93Y3MoY3VyUm93c1tpXSwmZSxsZW4sTlVMTCk7CisgICAgaWYgKGQpCisgICAgICBjdXJSb3dzW2ldW2xlbl09J1xuJzsKKyAgICBlbHNlCisgICAgICBicmVhazsKKyAgICBpKys7CisgIH0KKyAgbG9nTWVzc2FnZShMT0dfREVCVUcsIiVsZCBjb2xzIixjdXJOdW1Db2xzKTsKKyAgU1BJX2ZyZWVTdHJpbmcodGV4dCk7CisgIGNhcmV0UG9zaXRpb24oQWNjZXNzaWJsZVRleHRfZ2V0Q2FyZXRPZmZzZXQoY3VyVGVybSkpOworfQorCitzdGF0aWMgc3RydWN0IGV2TGlzdCB7CisgIHN0cnVjdCBldkxpc3QgKm5leHQ7CisgIGNvbnN0IEFjY2Vzc2libGVFdmVudCAqZXY7Cit9ICpldnM7CisKK3N0YXRpYyB2b2lkIGV2TGlzdGVuZXJDQihjb25zdCBBY2Nlc3NpYmxlRXZlbnQgKmV2ZW50LCB2b2lkICp1c2VyX2RhdGEpIHsKKyAgc3RhdGljIGludCBydW5uaW5nID0gMDsKKyAgc3RydWN0IGV2TGlzdCAqZXYgPSBtYWxsb2Moc2l6ZW9mKCpldikpOworICBBY2Nlc3NpYmxlRXZlbnRfcmVmKGV2ZW50KTsKKyAgQWNjZXNzaWJsZVRleHQgKm5ld1RleHQ7CisgIGV2LT5uZXh0ID0gZXZzOworICBldi0+ZXYgPSBldmVudDsKKyAgZXZzID0gZXY7CisgIGludCBzdGF0ZV9jaGFuZ2VkX2ZvY3VzZWQ7CisKKyAgLyogdGhpcyBpcyBub3QgYXRvbWljIGJ1dCB3ZSBjYW4gb25seSBiZSByZWN1cnNpdmVseSBjYWxsZWQgd2l0aGluIGNhbGxzCisgICAqIHRvIHRoZSBsaWIgKi8KKyAgaWYgKHJ1bm5pbmcpCisgICAgcmV0dXJuOworICBlbHNlCisgICAgcnVubmluZyA9IDE7CisKKyAgd2hpbGUgKGV2cykgeworICAgIHB0aHJlYWRfbXV0ZXhfbG9jaygmdXBkYXRlTXV0ZXgpOworICAgIC8qIHBpY2t1cCBhIGxpc3Qgb2YgZXZlbnRzIHRvIGhhbmRsZSAqLworICAgIGV2ID0gZXZzOworICAgIGV2cyA9IE5VTEw7CisgICAgZm9yICg7IGV2OyBBY2Nlc3NpYmxlRXZlbnRfdW5yZWYoZXYtPmV2KSwgZXYgPSBldi0+bmV4dCkgeworICAgICAgZXZlbnQgPSBldi0+ZXY7CisgICAgICBzdGF0ZV9jaGFuZ2VkX2ZvY3VzZWQgPSAhc3RyY21wKGV2ZW50LT50eXBlLCJvYmplY3Q6c3RhdGUtY2hhbmdlZDpmb2N1c2VkIik7CisgICAgICBpZiAoc3RhdGVfY2hhbmdlZF9mb2N1c2VkICYmICFldmVudC0+ZGV0YWlsMSkgeworCWlmIChldmVudC0+c291cmNlID09IGN1ckZvY3VzKQorCSAgZmluaVRlcm0oKTsKKyAgICAgIH0gZWxzZSBpZiAoIXN0cmNtcChldmVudC0+dHlwZSwiZm9jdXM6IikgfHwgKHN0YXRlX2NoYW5nZWRfZm9jdXNlZCAmJiBldmVudC0+ZGV0YWlsMSkpIHsKKwlpZiAoIShuZXdUZXh0ID0gQWNjZXNzaWJsZV9nZXRUZXh0KGV2ZW50LT5zb3VyY2UpKSkgeworCSAgaWYgKGN1ckZvY3VzKSBmaW5pVGVybSgpOworCX0gZWxzZSB7CisgICAgICAgICAgQWNjZXNzaWJsZVJvbGUgcm9sZSA9IEFjY2Vzc2libGVfZ2V0Um9sZShldmVudC0+c291cmNlKTsKKwkgIGlmICh0eXBlQWxsIHx8CisJICAgICAgKHR5cGVUZXh0ICYmICgocm9sZSA9PSBTUElfUk9MRV9URVhUKSB8fCAocm9sZSA9PSBTUElfUk9MRV9QQVNTV09SRF9URVhUKSB8fCAocm9sZSA9PSBTUElfUk9MRV9QQVJBR1JBUEgpKSkgfHwKKwkgICAgICAodHlwZVRlcm1pbmFsICYmIChyb2xlID09IFNQSV9ST0xFX1RFUk1JTkFMKSkpIHsKKwkgICAgcmVzdGFydFRlcm0oZXZlbnQtPnNvdXJjZSwgbmV3VGV4dCk7CisJICB9IGVsc2UgeworCSAgICBsb2dNZXNzYWdlKExPR19ERUJVRywiQVQgU1BJIHdpZGdldCBub3QgZm9yIHVzIik7CisJICAgIGlmIChjdXJGb2N1cykgZmluaVRlcm0oKTsKKwkgIH0KKwl9CisgICAgICB9IGVsc2UgaWYgKCFzdHJjbXAoZXZlbnQtPnR5cGUsIm9iamVjdDp0ZXh0LWNhcmV0LW1vdmVkIikpIHsKKwlpZiAoZXZlbnQtPnNvdXJjZSAhPSBjdXJGb2N1cykgY29udGludWU7CisJbG9nTWVzc2FnZShMT0dfREVCVUcsImNhcmV0IG1vdmUgdG8gJWx1IixldmVudC0+ZGV0YWlsMSk7CisJY2FyZXRQb3NpdGlvbihldmVudC0+ZGV0YWlsMSk7CisgICAgICB9IGVsc2UgaWYgKCFzdHJjbXAoZXZlbnQtPnR5cGUsIm9iamVjdDp0ZXh0LWNoYW5nZWQ6ZGVsZXRlIikpIHsKKwlsb25nIHgseSx0b0RlbGV0ZSA9IGV2ZW50LT5kZXRhaWwyOworCWxvbmcgbGVuZ3RoID0gMCwgdG9Db3B5OworCWxvbmcgZG93blRvOyAvKiBsaW5lIHRoYXQgd2lsbCBwcm92aWRlIHdoYXQgd2lsbCBmb2xsb3cgeCAqLworCWxvZ01lc3NhZ2UoTE9HX0RFQlVHLCJkZWxldGUgJWx1IGZyb20gJWx1IixldmVudC0+ZGV0YWlsMixldmVudC0+ZGV0YWlsMSk7CisJaWYgKGV2ZW50LT5zb3VyY2UgIT0gY3VyRm9jdXMpIGNvbnRpbnVlOworCWZpbmRQb3NpdGlvbihldmVudC0+ZGV0YWlsMSwmeCwmeSk7CisJZG93blRvID0geTsKKwlpZiAoZG93blRvIDwgY3VyTnVtUm93cykKKwkJbGVuZ3RoID0gY3VyUm93TGVuZ3Roc1tkb3duVG9dOworCXdoaWxlICh4K3RvRGVsZXRlID49IGxlbmd0aCkgeworCSAgZG93blRvKys7CisJICBpZiAoZG93blRvIDw9IGN1ck51bVJvd3MgLSAxKQorCSAgICBsZW5ndGggKz0gY3VyUm93TGVuZ3Roc1tkb3duVG9dOworCSAgZWxzZSB7CisJICAgIC8qIGltYWdpbmFyeSBleHRyYSBsaW5lIGRvZXNuJ3QgcHJvdmlkZSBtb3JlIGxlbmd0aCwgYW5kIHNob3VsZG4ndCBuZWVkIHRvICEgKi8KKwkgICAgaWYgKHgrdG9EZWxldGUgPiBsZW5ndGgpIHsKKwkgICAgICBsb2dNZXNzYWdlKExPR19FUlIsImRlbGV0aW5nIHBhc3QgZW5kIG9mIHRleHQgISIpOworCSAgICAgIC8qIGRpc2NhcmRpbmcgKi8KKwkgICAgICB0b0RlbGV0ZSA9IGxlbmd0aCAtIHg7CisJICAgIH0KKwkgICAgYnJlYWs7IC8qIGRlbGV0aW5nIHVwIHRvIGVuZCAqLworCSAgfQorCX0KKwlpZiAobGVuZ3RoLXRvRGVsZXRlPjApIHsKKwkgIC8qIHN0aWxsIHNvbWV0aGluZyBvbiBsaW5lIHkgKi8KKwkgIGlmICh5IT1kb3duVG8pIHsKKwkgICAgY3VyUm93TGVuZ3Roc1t5XSA9IGxlbmd0aC10b0RlbGV0ZTsKKwkgICAgY3VyUm93c1t5XT1yZWFsbG9jKGN1clJvd3NbeV0sY3VyUm93TGVuZ3Roc1t5XSpzaXplb2YoKmN1clJvd3NbeV0pKTsKKwkgIH0KKwkgIGlmICgodG9Db3B5ID0gbGVuZ3RoLXRvRGVsZXRlLXgpKQorCSAgICBtZW1tb3ZlKGN1clJvd3NbeV0reCxjdXJSb3dzW2Rvd25Ub10rY3VyUm93TGVuZ3Roc1tkb3duVG9dLXRvQ29weSx0b0NvcHkqc2l6ZW9mKCpjdXJSb3dzW2Rvd25Ub10pKTsKKwkgIGlmICh5PT1kb3duVG8pIHsKKwkgICAgY3VyUm93TGVuZ3Roc1t5XSA9IGxlbmd0aC10b0RlbGV0ZTsKKwkgICAgY3VyUm93c1t5XT1yZWFsbG9jKGN1clJvd3NbeV0sY3VyUm93TGVuZ3Roc1t5XSpzaXplb2YoKmN1clJvd3NbeV0pKTsKKwkgIH0KKwl9IGVsc2UgeworCSAgLyoga2lsbHMgdGhpcyBsaW5lIGFzIHdlbGwgISAqLworCSAgeS0tOworCX0KKwlpZiAoZG93blRvPj1jdXJOdW1Sb3dzKQorCSAgLyogaW1hZ2luYXJ5IGV4dHJhIGxpbmVzIGRvbid0IG5lZWQgdG8gYmUgZGVsZXRlZCAqLworCSAgZG93blRvPWN1ck51bVJvd3MtMTsKKwlkZWxSb3dzKHkrMSxkb3duVG8teSk7CisJY2FyZXRQb3NpdGlvbihBY2Nlc3NpYmxlVGV4dF9nZXRDYXJldE9mZnNldChjdXJUZXJtKSk7CisgICAgICB9IGVsc2UgaWYgKCFzdHJjbXAoZXZlbnQtPnR5cGUsIm9iamVjdDp0ZXh0LWNoYW5nZWQ6aW5zZXJ0IikpIHsKKwlsb25nIGxlbj1ldmVudC0+ZGV0YWlsMixzZW1pbGVuLHgseTsKKwljaGFyICphZGRlZDsKKwljb25zdCBjaGFyICphZGRpbmcsKmM7CisJbG9nTWVzc2FnZShMT0dfREVCVUcsImluc2VydCAlbHUgZnJvbSAlbHUiLGV2ZW50LT5kZXRhaWwyLGV2ZW50LT5kZXRhaWwxKTsKKwlpZiAoZXZlbnQtPnNvdXJjZSAhPSBjdXJGb2N1cykgY29udGludWU7CisJZmluZFBvc2l0aW9uKGV2ZW50LT5kZXRhaWwxLCZ4LCZ5KTsKKwlhZGRpbmcgPSBjID0gYWRkZWQgPSBBY2Nlc3NpYmxlVGV4dENoYW5nZWRFdmVudF9nZXRDaGFuZ2VTdHJpbmcoZXZlbnQpOworCWlmICh4ICYmIChjID0gc3RyY2hyKGFkZGluZywnXG4nKSkpIHsKKwkgIC8qIHNwbGl0dGluZyBsaW5lICovCisJICBhZGRSb3dzKHksMSk7CisJICBzZW1pbGVuPW15X21ic2xlbihhZGRpbmcsYysxLWFkZGluZyk7CisJICBjdXJSb3dMZW5ndGhzW3ldPXgrc2VtaWxlbjsKKwkgIGlmICh4K3NlbWlsZW4tMT5jdXJOdW1Db2xzKQorCSAgICBjdXJOdW1Db2xzPXgrc2VtaWxlbi0xOworCisJICAvKiBjb3B5IGJlZ2lubmluZyAqLworCSAgY3VyUm93c1t5XT1tYWxsb2MoY3VyUm93TGVuZ3Roc1t5XSpzaXplb2YoKmN1clJvd3NbeV0pKTsKKwkgIG1lbWNweShjdXJSb3dzW3ldLGN1clJvd3NbeSsxXSx4KnNpemVvZigqY3VyUm93c1t5XSkpOworCSAgLyogYWRkICovCisJICBteV9tYnNydG93Y3MoY3VyUm93c1t5XSt4LCZhZGRpbmcsc2VtaWxlbixOVUxMKTsKKwkgIGxlbi09c2VtaWxlbjsKKwkgIGFkZGluZz1jKzE7CisJICAvKiBzaGlmdCBlbmQgKi8KKwkgIGN1clJvd0xlbmd0aHNbeSsxXS09eDsKKwkgIG1lbW1vdmUoY3VyUm93c1t5KzFdLGN1clJvd3NbeSsxXSt4LGN1clJvd0xlbmd0aHNbeSsxXSpzaXplb2YoKmN1clJvd3NbeSsxXSkpOworCSAgeD0wOworCSAgeSsrOworCX0KKwl3aGlsZSAoKGMgPSBzdHJjaHIoYWRkaW5nLCdcbicpKSkgeworCSAgLyogYWRkaW5nIGxpbmVzICovCisJICBhZGRSb3dzKHksMSk7CisJICBzZW1pbGVuPW15X21ic2xlbihhZGRpbmcsYysxLWFkZGluZyk7CisJICBjdXJSb3dMZW5ndGhzW3ldPXNlbWlsZW47CisJICBpZiAoc2VtaWxlbi0xPmN1ck51bUNvbHMpCisJICAgIGN1ck51bUNvbHM9c2VtaWxlbi0xOworCSAgY3VyUm93c1t5XT1tYWxsb2Moc2VtaWxlbipzaXplb2YoKmN1clJvd3NbeV0pKTsKKwkgIG15X21ic3J0b3djcyhjdXJSb3dzW3ldLCZhZGRpbmcsc2VtaWxlbixOVUxMKTsKKwkgIGxlbi09c2VtaWxlbjsKKwkgIGFkZGluZz1jKzE7CisJICB5Kys7CisJfQorCWlmIChsZW4pIHsKKwkgIC8qIHN0aWxsIGxlbmd0aCB0byBhZGQgb24gdGhlIGxpbmUgZm9sbG93aW5nIGl0ICovCisJICBpZiAoeT09Y3VyTnVtUm93cykgeworCSAgICAvKiBJdCB3b24ndCBpbnNlcnQgZW5kaW5nIFxuIHlldCAqLworCSAgICBhZGRSb3dzKHksMSk7CisJICAgIGN1clJvd3NbeV09TlVMTDsKKwkgICAgY3VyUm93TGVuZ3Roc1t5XT0wOworCSAgfQorCSAgY3VyUm93TGVuZ3Roc1t5XSArPSBsZW47CisJICBjdXJSb3dzW3ldPXJlYWxsb2MoY3VyUm93c1t5XSxjdXJSb3dMZW5ndGhzW3ldKnNpemVvZigqY3VyUm93c1t5XSkpOworCSAgbWVtbW92ZShjdXJSb3dzW3ldK3grbGVuLGN1clJvd3NbeV0reCwoY3VyUm93TGVuZ3Roc1t5XS0oeCtsZW4pKSpzaXplb2YoKmN1clJvd3NbeV0pKTsKKwkgIG15X21ic3J0b3djcyhjdXJSb3dzW3ldK3gsJmFkZGluZyxsZW4sTlVMTCk7CisJICBpZiAoY3VyUm93TGVuZ3Roc1t5XS0oY3VyUm93c1t5XVtjdXJSb3dMZW5ndGhzW3ldLTFdPT0nXG4nKT5jdXJOdW1Db2xzKQorCSAgICBjdXJOdW1Db2xzPWN1clJvd0xlbmd0aHNbeV0tKGN1clJvd3NbeV1bY3VyUm93TGVuZ3Roc1t5XS0xXT09J1xuJyk7CisJfQorCVNQSV9mcmVlU3RyaW5nKGFkZGVkKTsKKwljYXJldFBvc2l0aW9uKEFjY2Vzc2libGVUZXh0X2dldENhcmV0T2Zmc2V0KGN1clRlcm0pKTsKKyAgICAgIH0gZWxzZQorCWxvZ01lc3NhZ2UoTE9HX0lORk8sImV2ZW50ICVzLCBzb3VyY2UgJXAsIGRldGFpbDEgJWx1IGRldGFpbDIgJWx1IixldmVudC0+dHlwZSxldmVudC0+c291cmNlLGV2ZW50LT5kZXRhaWwxLGV2ZW50LT5kZXRhaWwyKTsKKyAgICB9CisgICAgcHRocmVhZF9tdXRleF91bmxvY2soJnVwZGF0ZU11dGV4KTsKKyAgfQorICBydW5uaW5nID0gMDsKK30KKworVEhSRUFEX0ZVTkNUSU9OKGFzT3BlblNjcmVlblRocmVhZCkgeworICBBY2Nlc3NpYmxlRXZlbnRMaXN0ZW5lciAqZXZMaXN0ZW5lcjsKKyAgc2VtX3QgKlNQSV9pbml0X3NlbSA9IGFyZ3VtZW50OworICBpbnQgcmVzOworICBzdGF0aWMgY29uc3QgY2hhciAqZXZlbnRzW10gPSB7CisgICAgIm9iamVjdDp0ZXh0LWNoYW5nZWQiLAorICAgICJvYmplY3Q6dGV4dC1jYXJldC1tb3ZlZCIsCisgICAgIm9iamVjdDpzdGF0ZS1jaGFuZ2VkOmZvY3VzZWQiLAorICAgICJmb2N1czoiLAorICB9OworICBjb25zdCBjaGFyICoqZXZlbnQ7CisgIGlmICgocmVzPVNQSV9pbml0KCkpKSB7CisgICAgbG9nTWVzc2FnZShMT0dfRVJSLCJTUElfaW5pdCByZXR1cm5lZCAlZCIscmVzKTsKKyAgICByZXR1cm4gMDsKKyAgfQorICBpZiAoIShldkxpc3RlbmVyID0gU1BJX2NyZWF0ZUFjY2Vzc2libGVFdmVudExpc3RlbmVyKGV2TGlzdGVuZXJDQixOVUxMKSkpCisgICAgbG9nTWVzc2FnZShMT0dfRVJSLCJTUElfY3JlYXRlQWNjZXNzaWJsZUV2ZW50TGlzdGVuZXIgZmFpbGVkIik7CisgIGVsc2UgZm9yIChldmVudD1ldmVudHM7IGV2ZW50PCZldmVudHNbc2l6ZW9mKGV2ZW50cykvc2l6ZW9mKCpldmVudHMpXTsgZXZlbnQrKykKKyAgICBpZiAoIShTUElfcmVnaXN0ZXJHbG9iYWxFdmVudExpc3RlbmVyKGV2TGlzdGVuZXIsKmV2ZW50KSkpCisgICAgICBsb2dNZXNzYWdlKExPR19FUlIsIlNQSV9yZWdpc3Rlckdsb2JhbEV2ZW50TGlzdGVuZXIoJXMpIGZhaWxlZCIsKmV2ZW50KTsKKyAgc2VtX3Bvc3QoU1BJX2luaXRfc2VtKTsKKyAgU1BJX2V2ZW50X21haW4oKTsKKyAgaWYgKCEoU1BJX2RlcmVnaXN0ZXJHbG9iYWxFdmVudExpc3RlbmVyQWxsKGV2TGlzdGVuZXIpKSkKKyAgICBsb2dNZXNzYWdlKExPR19FUlIsIlNQSV9kZXJlZ2lzdGVyR2xvYmFsRXZlbnRMaXN0ZW5lckFsbCBmYWlsZWQiKTsKKyAgQWNjZXNzaWJsZUV2ZW50TGlzdGVuZXJfdW5yZWYoZXZMaXN0ZW5lcik7CisgIGlmIChjdXJGb2N1cykKKyAgICBmaW5pVGVybSgpOworICBpZiAoKHJlcz1TUElfZXhpdCgpKSkKKyAgICBsb2dNZXNzYWdlKExPR19FUlIsIlNQSV9leGl0IHJldHVybmVkICVkIixyZXMpOworICByZXR1cm4gTlVMTDsKK30KKworc3RhdGljIGludAorY29uc3RydWN0X0F0U3BpU2NyZWVuICh2b2lkKSB7CisgIHNlbV90IFNQSV9pbml0X3NlbTsKKyAgc2VtX2luaXQoJlNQSV9pbml0X3NlbSwwLDApOworICBYSW5pdFRocmVhZHMoKTsKKyAgaWYgKGNyZWF0ZVRocmVhZCgiZHJpdmVyLXNjcmVlbi1BdFNwaSIsCisgICAgICAgICAgICAgICAgICAgICAgICAmU1BJX21haW5fdGhyZWFkLCBOVUxMLAorICAgICAgICAgICAgICAgICAgICAgICAgYXNPcGVuU2NyZWVuVGhyZWFkLCAodm9pZCAqKSZTUElfaW5pdF9zZW0pKSB7CisgICAgbG9nTWVzc2FnZShMT0dfRVJSLCJtYWluIFNQSSB0aHJlYWQgZmFpbGVkIHRvIGJlIGxhdW5jaGVkIik7CisgICAgcmV0dXJuIDA7CisgIH0KKyAgZG8geworICAgIGVycm5vID0gMDsKKyAgfSB3aGlsZSAoc2VtX3dhaXQoJlNQSV9pbml0X3NlbSkgPT0gLTEgJiYgZXJybm8gPT0gRUlOVFIpOworICBpZiAoZXJybm8pIHsKKyAgICBsb2dTeXN0ZW1FcnJvcigiU1BJIGluaXRpYWxpemF0aW9uIHdhaXQgZmFpbGVkIik7CisgICAgcmV0dXJuIDA7CisgIH0KKyAgbG9nTWVzc2FnZShMT0dfREVCVUcsIlNQSSBpbml0aWFsaXplZCIpOworICByZXR1cm4gMTsKK30KKworc3RhdGljIHZvaWQKK2Rlc3RydWN0X0F0U3BpU2NyZWVuICh2b2lkKSB7CisgIFNQSV9ldmVudF9xdWl0KCk7CisgIHB0aHJlYWRfam9pbihTUElfbWFpbl90aHJlYWQsTlVMTCk7CisgIGxvZ01lc3NhZ2UoTE9HX0RFQlVHLCJTUEkgc3RvcHBlZCIpOworfQorCitzdGF0aWMgaW50CitjdXJyZW50VmlydHVhbFRlcm1pbmFsX0F0U3BpU2NyZWVuICh2b2lkKSB7CisgIHJldHVybiBjdXJUZXJtPyAwOiAtMTsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgbm9uYXRzcGkgW10gPSAibm90IGFuIEFULVNQSSB0ZXh0IHdpZGdldCI7CisKK3N0YXRpYyB2b2lkCitkZXNjcmliZV9BdFNwaVNjcmVlbiAoU2NyZWVuRGVzY3JpcHRpb24gKmRlc2NyaXB0aW9uKSB7CisgIHB0aHJlYWRfbXV0ZXhfbG9jaygmdXBkYXRlTXV0ZXgpOworICBpZiAoY3VyVGVybSkgeworICAgIGRlc2NyaXB0aW9uLT5jb2xzID0gY3VyTnVtQ29sczsKKyAgICBkZXNjcmlwdGlvbi0+cm93cyA9IGN1ck51bVJvd3M/Y3VyTnVtUm93czoxOworICAgIGRlc2NyaXB0aW9uLT5wb3N4ID0gY3VyUG9zWDsKKyAgICBkZXNjcmlwdGlvbi0+cG9zeSA9IGN1clBvc1k7CisgIH0gZWxzZSB7CisgICAgZGVzY3JpcHRpb24tPnVucmVhZGFibGUgPSBub25hdHNwaTsKKyAgICBkZXNjcmlwdGlvbi0+cm93cyA9IDE7CisgICAgZGVzY3JpcHRpb24tPmNvbHMgPSBzdHJsZW4obm9uYXRzcGkpOworICAgIGRlc2NyaXB0aW9uLT5wb3N4ID0gMDsKKyAgICBkZXNjcmlwdGlvbi0+cG9zeSA9IDA7CisgIH0KKyAgcHRocmVhZF9tdXRleF91bmxvY2soJnVwZGF0ZU11dGV4KTsKKyAgZGVzY3JpcHRpb24tPm51bWJlciA9IGN1cnJlbnRWaXJ0dWFsVGVybWluYWxfQXRTcGlTY3JlZW4oKTsKK30KKworc3RhdGljIGludAorcmVhZENoYXJhY3RlcnNfQXRTcGlTY3JlZW4gKGNvbnN0IFNjcmVlbkJveCAqYm94LCBTY3JlZW5DaGFyYWN0ZXIgKmJ1ZmZlcikgeworICBsb25nIHgseTsKKyAgY2xlYXJTY3JlZW5DaGFyYWN0ZXJzKGJ1ZmZlcixib3gtPmhlaWdodCpib3gtPndpZHRoKTsKKyAgcHRocmVhZF9tdXRleF9sb2NrKCZ1cGRhdGVNdXRleCk7CisgIGlmICghY3VyVGVybSkgeworICAgIHNldFNjcmVlbk1lc3NhZ2UoYm94LCBidWZmZXIsIG5vbmF0c3BpKTsKKyAgICBnb3RvIG91dDsKKyAgfQorICBpZiAoIWN1ck51bVJvd3MpIHsKKyAgICBnb3RvIG91dDsKKyAgfQorICBpZiAoIXZhbGlkYXRlU2NyZWVuQm94KGJveCwgY3VyTnVtQ29scywgY3VyTnVtUm93cykpIHsKKyAgICBnb3RvIG91dDsKKyAgfQorICBmb3IgKHk9MDsgeTxib3gtPmhlaWdodDsgeSsrKSB7CisgICAgaWYgKGN1clJvd0xlbmd0aHNbYm94LT50b3AreV0pIHsKKyAgICAgIGZvciAoeD0wOyB4PGJveC0+d2lkdGg7IHgrKykgeworICAgICAgICBpZiAoYm94LT5sZWZ0K3g8Y3VyUm93TGVuZ3Roc1tib3gtPnRvcCt5XSAtIChjdXJSb3dzW2JveC0+dG9wK3ldW2N1clJvd0xlbmd0aHNbYm94LT50b3AreV0tMV09PSdcbicpKSB7CisgICAgICAgICAgYnVmZmVyW3kqYm94LT53aWR0aCt4XS50ZXh0ID0gY3VyUm93c1tib3gtPnRvcCt5XVtib3gtPmxlZnQreF07CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9CisgIH0KK291dDoKKyAgcHRocmVhZF9tdXRleF91bmxvY2soJnVwZGF0ZU11dGV4KTsKKyAgcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQKK2luc2VydEtleV9BdFNwaVNjcmVlbiAoU2NyZWVuS2V5IGtleSkgeworICBsb25nIGtleXN5bTsKKyAgaW50IG1vZE1ldGE9MCwgbW9kQ29udHJvbD0wOworCisgIHNldFNjcmVlbktleU1vZGlmaWVycygma2V5LCBTQ1JfS0VZX0NPTlRST0wpOworCisgIGlmIChpc1NwZWNpYWxLZXkoa2V5KSkgeworICAgIHN3aXRjaCAoa2V5ICYgU0NSX0tFWV9DSEFSX01BU0spIHsKKyAgICAgIGNhc2UgU0NSX0tFWV9FTlRFUjogICAgICAgICBrZXlzeW0gPSBYS19LUF9FbnRlcjsgIGJyZWFrOworICAgICAgY2FzZSBTQ1JfS0VZX1RBQjogICAgICAgICAgIGtleXN5bSA9IFhLX1RhYjsgICAgICAgYnJlYWs7CisgICAgICBjYXNlIFNDUl9LRVlfQkFDS1NQQUNFOiAgICAga2V5c3ltID0gWEtfQmFja1NwYWNlOyBicmVhazsKKyAgICAgIGNhc2UgU0NSX0tFWV9FU0NBUEU6ICAgICAgICBrZXlzeW0gPSBYS19Fc2NhcGU7ICAgIGJyZWFrOworICAgICAgY2FzZSBTQ1JfS0VZX0NVUlNPUl9MRUZUOiAgIGtleXN5bSA9IFhLX0xlZnQ7ICAgICAgYnJlYWs7CisgICAgICBjYXNlIFNDUl9LRVlfQ1VSU09SX1JJR0hUOiAga2V5c3ltID0gWEtfUmlnaHQ7ICAgICBicmVhazsKKyAgICAgIGNhc2UgU0NSX0tFWV9DVVJTT1JfVVA6ICAgICBrZXlzeW0gPSBYS19VcDsgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBTQ1JfS0VZX0NVUlNPUl9ET1dOOiAgIGtleXN5bSA9IFhLX0Rvd247ICAgICAgYnJlYWs7CisgICAgICBjYXNlIFNDUl9LRVlfUEFHRV9VUDogICAgICAga2V5c3ltID0gWEtfUGFnZV9VcDsgICBicmVhazsKKyAgICAgIGNhc2UgU0NSX0tFWV9QQUdFX0RPV046ICAgICBrZXlzeW0gPSBYS19QYWdlX0Rvd247IGJyZWFrOworICAgICAgY2FzZSBTQ1JfS0VZX0hPTUU6ICAgICAgICAgIGtleXN5bSA9IFhLX0hvbWU7ICAgICAgYnJlYWs7CisgICAgICBjYXNlIFNDUl9LRVlfRU5EOiAgICAgICAgICAga2V5c3ltID0gWEtfRW5kOyAgICAgICBicmVhazsKKyAgICAgIGNhc2UgU0NSX0tFWV9JTlNFUlQ6ICAgICAgICBrZXlzeW0gPSBYS19JbnNlcnQ7ICAgIGJyZWFrOworICAgICAgY2FzZSBTQ1JfS0VZX0RFTEVURTogICAgICAgIGtleXN5bSA9IFhLX0RlbGV0ZTsgICAgYnJlYWs7CisgICAgICBjYXNlIFNDUl9LRVlfRlVOQ1RJT04gKyAwOiAga2V5c3ltID0gWEtfRjE7ICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgU0NSX0tFWV9GVU5DVElPTiArIDE6ICBrZXlzeW0gPSBYS19GMjsgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBTQ1JfS0VZX0ZVTkNUSU9OICsgMjogIGtleXN5bSA9IFhLX0YzOyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIFNDUl9LRVlfRlVOQ1RJT04gKyAzOiAga2V5c3ltID0gWEtfRjQ7ICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgU0NSX0tFWV9GVU5DVElPTiArIDQ6ICBrZXlzeW0gPSBYS19GNTsgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBTQ1JfS0VZX0ZVTkNUSU9OICsgNTogIGtleXN5bSA9IFhLX0Y2OyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIFNDUl9LRVlfRlVOQ1RJT04gKyA2OiAga2V5c3ltID0gWEtfRjc7ICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgU0NSX0tFWV9GVU5DVElPTiArIDc6ICBrZXlzeW0gPSBYS19GODsgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBTQ1JfS0VZX0ZVTkNUSU9OICsgODogIGtleXN5bSA9IFhLX0Y5OyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIFNDUl9LRVlfRlVOQ1RJT04gKyA5OiAga2V5c3ltID0gWEtfRjEwOyAgICAgICBicmVhazsKKyAgICAgIGNhc2UgU0NSX0tFWV9GVU5DVElPTiArIDEwOiBrZXlzeW0gPSBYS19GMTE7ICAgICAgIGJyZWFrOworICAgICAgY2FzZSBTQ1JfS0VZX0ZVTkNUSU9OICsgMTE6IGtleXN5bSA9IFhLX0YxMjsgICAgICAgYnJlYWs7CisgICAgICBjYXNlIFNDUl9LRVlfRlVOQ1RJT04gKyAxMjoga2V5c3ltID0gWEtfRjEzOyAgICAgICBicmVhazsKKyAgICAgIGNhc2UgU0NSX0tFWV9GVU5DVElPTiArIDEzOiBrZXlzeW0gPSBYS19GMTQ7ICAgICAgIGJyZWFrOworICAgICAgY2FzZSBTQ1JfS0VZX0ZVTkNUSU9OICsgMTQ6IGtleXN5bSA9IFhLX0YxNTsgICAgICAgYnJlYWs7CisgICAgICBjYXNlIFNDUl9LRVlfRlVOQ1RJT04gKyAxNToga2V5c3ltID0gWEtfRjE2OyAgICAgICBicmVhazsKKyAgICAgIGNhc2UgU0NSX0tFWV9GVU5DVElPTiArIDE2OiBrZXlzeW0gPSBYS19GMTc7ICAgICAgIGJyZWFrOworICAgICAgY2FzZSBTQ1JfS0VZX0ZVTkNUSU9OICsgMTc6IGtleXN5bSA9IFhLX0YxODsgICAgICAgYnJlYWs7CisgICAgICBjYXNlIFNDUl9LRVlfRlVOQ1RJT04gKyAxODoga2V5c3ltID0gWEtfRjE5OyAgICAgICBicmVhazsKKyAgICAgIGNhc2UgU0NSX0tFWV9GVU5DVElPTiArIDE5OiBrZXlzeW0gPSBYS19GMjA7ICAgICAgIGJyZWFrOworICAgICAgY2FzZSBTQ1JfS0VZX0ZVTkNUSU9OICsgMjA6IGtleXN5bSA9IFhLX0YyMTsgICAgICAgYnJlYWs7CisgICAgICBjYXNlIFNDUl9LRVlfRlVOQ1RJT04gKyAyMToga2V5c3ltID0gWEtfRjIyOyAgICAgICBicmVhazsKKyAgICAgIGNhc2UgU0NSX0tFWV9GVU5DVElPTiArIDIyOiBrZXlzeW0gPSBYS19GMjM7ICAgICAgIGJyZWFrOworICAgICAgY2FzZSBTQ1JfS0VZX0ZVTkNUSU9OICsgMjM6IGtleXN5bSA9IFhLX0YyNDsgICAgICAgYnJlYWs7CisgICAgICBjYXNlIFNDUl9LRVlfRlVOQ1RJT04gKyAyNDoga2V5c3ltID0gWEtfRjI1OyAgICAgICBicmVhazsKKyAgICAgIGNhc2UgU0NSX0tFWV9GVU5DVElPTiArIDI1OiBrZXlzeW0gPSBYS19GMjY7ICAgICAgIGJyZWFrOworICAgICAgY2FzZSBTQ1JfS0VZX0ZVTkNUSU9OICsgMjY6IGtleXN5bSA9IFhLX0YyNzsgICAgICAgYnJlYWs7CisgICAgICBjYXNlIFNDUl9LRVlfRlVOQ1RJT04gKyAyNzoga2V5c3ltID0gWEtfRjI4OyAgICAgICBicmVhazsKKyAgICAgIGNhc2UgU0NSX0tFWV9GVU5DVElPTiArIDI4OiBrZXlzeW0gPSBYS19GMjk7ICAgICAgIGJyZWFrOworICAgICAgY2FzZSBTQ1JfS0VZX0ZVTkNUSU9OICsgMjk6IGtleXN5bSA9IFhLX0YzMDsgICAgICAgYnJlYWs7CisgICAgICBjYXNlIFNDUl9LRVlfRlVOQ1RJT04gKyAzMDoga2V5c3ltID0gWEtfRjMxOyAgICAgICBicmVhazsKKyAgICAgIGNhc2UgU0NSX0tFWV9GVU5DVElPTiArIDMxOiBrZXlzeW0gPSBYS19GMzI7ICAgICAgIGJyZWFrOworICAgICAgY2FzZSBTQ1JfS0VZX0ZVTkNUSU9OICsgMzI6IGtleXN5bSA9IFhLX0YzMzsgICAgICAgYnJlYWs7CisgICAgICBjYXNlIFNDUl9LRVlfRlVOQ1RJT04gKyAzMzoga2V5c3ltID0gWEtfRjM0OyAgICAgICBicmVhazsKKyAgICAgIGNhc2UgU0NSX0tFWV9GVU5DVElPTiArIDM0OiBrZXlzeW0gPSBYS19GMzU7ICAgICAgIGJyZWFrOworICAgICAgZGVmYXVsdDogbG9nTWVzc2FnZShMT0dfV0FSTklORywgImtleSBub3QgaW5zZXJ0YWJsZTogJTA0WCIsIGtleSk7IHJldHVybiAwOworICAgIH0KKyAgfSBlbHNlIHsKKyAgICB3Y2hhcl90IHdjOworCisgICAgaWYgKGtleSAmIFNDUl9LRVlfQUxUX0xFRlQpIHsKKyAgICAgIGtleSAmPSB+U0NSX0tFWV9BTFRfTEVGVDsKKyAgICAgIG1vZE1ldGEgPSAxOworICAgIH0KKworICAgIGlmIChrZXkgJiBTQ1JfS0VZX0NPTlRST0wpIHsKKyAgICAgIGtleSAmPSB+U0NSX0tFWV9DT05UUk9MOworICAgICAgbW9kQ29udHJvbCA9IDE7CisgICAgfQorCisgICAgd2MgPSBrZXkgJiBTQ1JfS0VZX0NIQVJfTUFTSzsKKyAgICBpZiAod2MgPCAweDEwMCkKKyAgICAgIGtleXN5bSA9IHdjOyAvKiBsYXRpbjEgY2hhcmFjdGVyICovCisgICAgZWxzZQorICAgICAga2V5c3ltID0gMHgxMDAwMDAwIHwgd2M7CisgIH0KKyAgbG9nTWVzc2FnZShMT0dfREVCVUcsICJpbnNlcnRpbmcga2V5OiAlMDRYIC0+ICVzJXMlbGQiLAorICAgICAgICAgICAgIGtleSwKKyAgICAgICAgICAgICAobW9kTWV0YT8gIm1ldGEgIjogIiIpLAorICAgICAgICAgICAgIChtb2RDb250cm9sPyAiY29udHJvbCAiOiAiIiksCisgICAgICAgICAgICAga2V5c3ltKTsKKworICB7CisgICAgaW50IG9rID0gMDsKKworICAgIGlmICghbW9kTWV0YSB8fCBTUElfZ2VuZXJhdGVLZXlib2FyZEV2ZW50KFhLX01ldGFfTCxOVUxMLFNQSV9LRVlfUFJFU1MpKSB7CisgICAgICBpZiAoIW1vZENvbnRyb2wgfHwgU1BJX2dlbmVyYXRlS2V5Ym9hcmRFdmVudChYS19Db250cm9sX0wsTlVMTCxTUElfS0VZX1BSRVNTKSkgeworICAgICAgICBpZiAoU1BJX2dlbmVyYXRlS2V5Ym9hcmRFdmVudChrZXlzeW0sTlVMTCxTUElfS0VZX1NZTSkpIHsKKyAgICAgICAgICBvayA9IDE7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgbG9nTWVzc2FnZShMT0dfV0FSTklORywgImtleSBpbnNlcnRpb24gZmFpbGVkLiIpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKG1vZENvbnRyb2wgJiYgIVNQSV9nZW5lcmF0ZUtleWJvYXJkRXZlbnQoWEtfQ29udHJvbF9MLE5VTEwsU1BJX0tFWV9SRUxFQVNFKSkgeworICAgICAgICAgIGxvZ01lc3NhZ2UoTE9HX1dBUk5JTkcsICJjb250cm9sIHJlbGVhc2UgZmFpbGVkLiIpOworICAgICAgICAgIG9rID0gMDsKKyAgICAgICAgfQorICAgICAgfSBlbHNlIHsKKyAgICAgICAgbG9nTWVzc2FnZShMT0dfV0FSTklORywgImNvbnRyb2wgcHJlc3MgZmFpbGVkLiIpOworICAgICAgfQorCisgICAgICBpZiAobW9kTWV0YSAmJiAhU1BJX2dlbmVyYXRlS2V5Ym9hcmRFdmVudChYS19NZXRhX0wsTlVMTCxTUElfS0VZX1JFTEVBU0UpKSB7CisgICAgICAgIGxvZ01lc3NhZ2UoTE9HX1dBUk5JTkcsICJtZXRhIHJlbGVhc2UgZmFpbGVkLiIpOworICAgICAgICBvayA9IDA7CisgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgIGxvZ01lc3NhZ2UoTE9HX1dBUk5JTkcsICJtZXRhIHByZXNzIGZhaWxlZC4iKTsKKyAgICB9CisKKyAgICByZXR1cm4gb2s7CisgIH0KK30KKworc3RhdGljIHZvaWQKK3Njcl9pbml0aWFsaXplIChNYWluU2NyZWVuICptYWluKSB7CisgIGluaXRpYWxpemVSZWFsU2NyZWVuKG1haW4pOworICBtYWluLT5iYXNlLmRlc2NyaWJlID0gZGVzY3JpYmVfQXRTcGlTY3JlZW47CisgIG1haW4tPmJhc2UucmVhZENoYXJhY3RlcnMgPSByZWFkQ2hhcmFjdGVyc19BdFNwaVNjcmVlbjsKKyAgbWFpbi0+YmFzZS5pbnNlcnRLZXkgPSBpbnNlcnRLZXlfQXRTcGlTY3JlZW47CisgIG1haW4tPmJhc2UuY3VycmVudFZpcnR1YWxUZXJtaW5hbCA9IGN1cnJlbnRWaXJ0dWFsVGVybWluYWxfQXRTcGlTY3JlZW47CisgIG1haW4tPnByb2Nlc3NQYXJhbWV0ZXJzID0gcHJvY2Vzc1BhcmFtZXRlcnNfQXRTcGlTY3JlZW47CisgIG1haW4tPmNvbnN0cnVjdCA9IGNvbnN0cnVjdF9BdFNwaVNjcmVlbjsKKyAgbWFpbi0+ZGVzdHJ1Y3QgPSBkZXN0cnVjdF9BdFNwaVNjcmVlbjsKK30KZGlmZiAtLWdpdCBhL0RyaXZlcnMvU2NyZWVuL0F0U3BpMi9NYWtlZmlsZS5pbiBiL0RyaXZlcnMvU2NyZWVuL0F0U3BpMi9NYWtlZmlsZS5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40N2JmYWMzCi0tLSAvZGV2L251bGwKKysrIGIvRHJpdmVycy9TY3JlZW4vQXRTcGkyL01ha2VmaWxlLmluCkBAIC0wLDAgKzEsMzcgQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyMgICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisjCisjIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyMKKyMgQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitEUklWRVJfQ09ERSA9IGEyCitEUklWRVJfTkFNRSA9IEF0U3BpMgorRFJJVkVSX1VTQUdFID0gWDExIGRlc2t0b3AgdmlhIEFULVNQSSAyCitEUklWRVJfVkVSU0lPTiA9IAorRFJJVkVSX0RFVkVMT1BFUlMgPSAKK1NDUl9PQkpTID0gQHNjcmVlbl9saWJyYXJpZXNfYTJACitpbmNsdWRlICQoU1JDX1RPUClzY3JlZW4ubWsKKworT0JKRUNUX0ZJTEVTID0gYTJfc2NyZWVuLiRPIHhzZWwuJE8KKworc2NyZWVuLiRPOiAkKE9CSkVDVF9GSUxFUykKKwkkKE1LUkVMKSAkQCAkKE9CSkVDVF9GSUxFUykKKworYTJfc2NyZWVuLiRPOgorCSQoQ0MpICQoU0NSX0NGTEFHUykgJChBVFNQSTJfSU5DTFVERVMpICQoREJVU19JTkNMVURFUykgJChHTElCMl9JTkNMVURFUykgLWMgJChTUkNfRElSKS9hMl9zY3JlZW4uYworCislLiRPOiAkKFNSQ19UT1ApJChQR01fRElSKS8lLmMgJChTUkNfVE9QKSQoSERSX0RJUikvJS5oCisJJChDQykgJChTQ1JfQ0ZMQUdTKSAtYyAkPAorCmRpZmYgLS1naXQgYS9Ecml2ZXJzL1NjcmVlbi9BdFNwaTIvYTJfc2NyZWVuLmMgYi9Ecml2ZXJzL1NjcmVlbi9BdFNwaTIvYTJfc2NyZWVuLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWQ1Y2ExZAotLS0gL2Rldi9udWxsCisrKyBiL0RyaXZlcnMvU2NyZWVuL0F0U3BpMi9hMl9zY3JlZW4uYwpAQCAtMCwwICsxLDE4OTIgQEAKKy8qCisgKiBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorICogICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorICoKKyAqIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorICoKKyAqIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyAqLworCisjaW5jbHVkZSAicHJvbG9ndWUuaCIKKyNpbmNsdWRlICJlbWJlZC5oIgorCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVkZSA8bGltaXRzLmg+CisjaW5jbHVkZSA8bG9jYWxlLmg+CisKKyNpZmRlZiBIQVZFX0FUU1BJX0dFVF9BMTFZX0JVUworI2luY2x1ZGUgPGF0c3BpL2F0c3BpLmg+CisjZW5kaWYgLyogSEFWRV9BVFNQSV9HRVRfQTExWV9CVVMgKi8KKworI2lmZGVmIF9fTUlOR1czMl9fCisjaW5jbHVkZSAid2luX3B0aHJlYWQuaCIKKyNlbHNlIC8qIF9fTUlOR1czMl9fICovCisjaW5jbHVkZSA8c2VtYXBob3JlLmg+CisjZW5kaWYgLyogX19NSU5HVzMyX18gKi8KKworI2luY2x1ZGUgPGRidXMvZGJ1cy5oPgorI2RlZmluZSBTUEkyX0RCVVNfSU5URVJGQUNFCQkib3JnLmExMXkuYXRzcGkiCisjZGVmaW5lIFNQSTJfREJVU19JTlRFUkZBQ0VfUkVHCQlTUEkyX0RCVVNfSU5URVJGQUNFIi5SZWdpc3RyeSIKKyNkZWZpbmUgU1BJMl9EQlVTX1BBVEhfUkVHCQkiL29yZy9hMTF5L2F0c3BpL3JlZ2lzdHJ5IgorI2RlZmluZSBTUEkyX0RCVVNfUEFUSF9ST09UCQkiL29yZy9hMTF5L2F0c3BpL2FjY2Vzc2libGUvcm9vdCIKKyNkZWZpbmUgU1BJMl9EQlVTX1BBVEhfREVDCQlTUEkyX0RCVVNfUEFUSF9SRUcgIi9kZXZpY2VldmVudGNvbnRyb2xsZXIiCisjZGVmaW5lIFNQSTJfREJVU19JTlRFUkZBQ0VfREVDCQlTUEkyX0RCVVNfSU5URVJGQUNFIi5EZXZpY2VFdmVudENvbnRyb2xsZXIiCisjZGVmaW5lIFNQSTJfREJVU19JTlRFUkZBQ0VfREVMCQlTUEkyX0RCVVNfSU5URVJGQUNFIi5EZXZpY2VFdmVudExpc3RlbmVyIgorI2RlZmluZSBTUEkyX0RCVVNfSU5URVJGQUNFX0VWRU5UCVNQSTJfREJVU19JTlRFUkZBQ0UiLkV2ZW50IgorI2RlZmluZSBTUEkyX0RCVVNfSU5URVJGQUNFX1RSRUUJU1BJMl9EQlVTX0lOVEVSRkFDRSIuVHJlZSIKKyNkZWZpbmUgU1BJMl9EQlVTX0lOVEVSRkFDRV9URVhUCVNQSTJfREJVU19JTlRFUkZBQ0UiLlRleHQiCisjZGVmaW5lIFNQSTJfREJVU19JTlRFUkZBQ0VfQUNDRVNTSUJMRQlTUEkyX0RCVVNfSU5URVJGQUNFIi5BY2Nlc3NpYmxlIgorCisKKyNkZWZpbmUgQVRTUElfU1RBVEVfQUNUSVZFIDEKKyNkZWZpbmUgQVRTUElfU1RBVEVfRk9DVVNFRCAxMgorCisjaWZkZWYgSEFWRV9YMTFfS0VZU1lNX0gKKyNpbmNsdWRlIDxYMTEva2V5c3ltLmg+CisjZW5kaWYgLyogSEFWRV9YMTFfS0VZU1lNX0ggKi8KKworI2lmZGVmIEhBVkVfUEtHX1gxMQorI2luY2x1ZGUgInhzZWwuaCIKKyNpbmNsdWRlICJjbGlwYm9hcmQuaCIKKyNlbmRpZiAvKiBIQVZFX1BLR19YMTEgKi8KKworI2luY2x1ZGUgImxvZy5oIgorI2luY2x1ZGUgInJlcG9ydC5oIgorI2luY2x1ZGUgInBhcnNlLmgiCisjaW5jbHVkZSAidGhyZWFkLmgiCisjaW5jbHVkZSAiYnJsX2NtZHMuaCIKKyNpbmNsdWRlICJhc3luY19oYW5kbGUuaCIKKyNpbmNsdWRlICJhc3luY19pby5oIgorI2luY2x1ZGUgImFzeW5jX2FsYXJtLmgiCisjaW5jbHVkZSAiYXN5bmNfZXZlbnQuaCIKKwordHlwZWRlZiBlbnVtIHsKKyAgUEFSTV9SRUxFQVNFLAorICBQQVJNX1RZUEUKK30gU2NyZWVuUGFyYW1ldGVyczsKKyNkZWZpbmUgU0NSUEFSTVMgInJlbGVhc2UiLCAidHlwZSIKKworI2luY2x1ZGUgInNjcl9kcml2ZXIuaCIKKwordHlwZWRlZiBlbnVtIHsKKyAgVFlQRV9BTEwsCisgIFRZUEVfVEVSTUlOQUwsCisgIFRZUEVfVEVYVCwKKyAgVFlQRV9DT1VOVAorfSBUeXBlVmFsdWU7CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgcmVsZWFzZVNjcmVlbjsKK3N0YXRpYyB1bnNpZ25lZCBjaGFyIHR5cGVGbGFnc1tUWVBFX0NPVU5UXTsKKworc3RhdGljIGNoYXIgKmN1clNlbmRlcjsKK3N0YXRpYyBjaGFyICpjdXJQYXRoOworc3RhdGljIGNoYXIgKmN1clJvbGU7CitzdGF0aWMgU2NyZWVuQ29udGVudFF1YWxpdHkgY3VyUXVhbGl0eTsKKworc3RhdGljIGxvbmcgY3VyTnVtUm93cywgY3VyTnVtQ29sczsKK3N0YXRpYyB3Y2hhcl90ICoqY3VyUm93czsKK3N0YXRpYyBsb25nICpjdXJSb3dMZW5ndGhzOworc3RhdGljIGxvbmcgY3VyQ2FyZXQsY3VyUG9zWCxjdXJQb3NZOworCitzdGF0aWMgREJ1c0Nvbm5lY3Rpb24gKmJ1cyA9IE5VTEw7CisKK3N0YXRpYyBpbnQgdXBkYXRlZDsKKworI2lmZGVmIEhBVkVfUEtHX1gxMQorc3RhdGljIERpc3BsYXkgKmRweTsKK3N0YXRpYyBYU2VsRGF0YSB4c2VsRGF0YTsKK3N0YXRpYyBjaGFyICpjbGlwYm9hcmRDb250ZW50OworI2VuZGlmIC8qIEhBVkVfUEtHX1gxMSAqLworCisvKiBoYXZpbmcgb3VyIG93biBpbXBsZW1lbnRhdGlvbiBpcyBtdWNoIG1vcmUgaW5kZXBlbmRhbnQgb24gbG9jYWxlcyAqLworCit0eXBlZGVmIHN0cnVjdCB7CisgIGludCByZW1haW5pbmc7CisgIHdpbnRfdCBjdXJyZW50OworfSBteV9tYnN0YXRlX3Q7CisKK3N0YXRpYyBteV9tYnN0YXRlX3QgaW50ZXJuYWw7CisKK3N0YXRpYyBzaXplX3QgbXlfbWJydG93Yyh3Y2hhcl90ICpwd2MsIGNvbnN0IGNoYXIgKnMsIHNpemVfdCBuLCBteV9tYnN0YXRlX3QgKnBzKSB7CisgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmMgPSAoY29uc3QgdW5zaWduZWQgY2hhciAqKSBzOworICBpbnQgcmVhZCA9IDA7CisgIGlmICghYykgeworICAgIGlmIChwcy0+cmVtYWluaW5nKSB7CisgICAgICBlcnJubyA9IEVJTFNFUTsKKyAgICAgIHJldHVybiAoc2l6ZV90KSgtMSk7CisgICAgfQorICAgIHJldHVybiAwOworICB9CisKKyAgaWYgKG4gJiYgIXBzLT5yZW1haW5pbmcpIHsKKyAgICAvKiBpbml0aWFsIHN0YXRlICovCisgICAgaWYgKCEoKmMmMHg4MCkpIHsKKyAgICAgIC8qIG1vc3QgZnJlcXVlbnQgY2FzZTogYXNjaWkgKi8KKyAgICAgIGlmIChwd2MpCisJKnB3YyA9ICpjOworICAgICAgaWYgKCEqYykKKwlyZXR1cm4gMDsKKyAgICAgIHJldHVybiAxOworICAgIH0gZWxzZSBpZiAoISgqYyYweDQwKSkgeworICAgICAgLyogdXRmLTggY2hhciBjb250aW51YXRpb24sIHNob3VsZG4ndCBoYXBwZW4gd2l0aCByZW1haW5pbmcgPT0gMCAhICovCisgICAgICBnb3RvIGVycm9yOworICAgIH0gZWxzZSB7CisgICAgICAvKiBuZXcgdXRmLTggY2hhciwgZ2V0IHJlbWFpbmluZyBjaGFycyAqLworICAgICAgcmVhZCA9IDE7CisgICAgICBpZiAoISgqYyYweDIwKSkgeworCXBzLT5yZW1haW5pbmcgPSAxOworCXBzLT5jdXJyZW50ID0gKmMmKCgxPDw1KS0xKTsKKyAgICAgIH0gZWxzZSBpZiAoISgqYyYweDEwKSkgeworCXBzLT5yZW1haW5pbmcgPSAyOworCXBzLT5jdXJyZW50ID0gKmMmKCgxPDw0KS0xKTsKKyAgICAgIH0gZWxzZSBpZiAoISgqYyYweDA4KSkgeworCXBzLT5yZW1haW5pbmcgPSAzOworCXBzLT5jdXJyZW50ID0gKmMmKCgxPDwzKS0xKTsKKyAgICAgIH0gZWxzZSBpZiAoISgqYyYweDA0KSkgeworCXBzLT5yZW1haW5pbmcgPSA0OworCXBzLT5jdXJyZW50ID0gKmMmKCgxPDwyKS0xKTsKKyAgICAgIH0gZWxzZSBpZiAoISgqYyYweDAyKSkgeworCXBzLT5yZW1haW5pbmcgPSA1OworCXBzLT5jdXJyZW50ID0gKmMmKCgxPDwxKS0xKTsKKyAgICAgIH0gZWxzZQorCS8qIDB4ZmYgYW5kIDB4ZmUgYXJlIG5vdCBhbGxvd2VkICovCisJZ290byBlcnJvcjsKKyAgICAgIGMrKzsKKyAgICB9CisgIH0KKyAgLyogbG9va2luZyBmb3IgY29udGludWF0aW9uIGNoYXJzICovCisgIHdoaWxlIChuLXJlYWQpIHsKKyAgICBpZiAoKCpjJjB4YzApICE9IDBYODApCisgICAgICAvKiBub3QgY29udGludWF0aW9uIGNoYXIsIGVycm9yICEgKi8KKyAgICAgIGdvdG8gZXJyb3I7CisgICAgLyogdXRmLTggY2hhciBjb250aW51YXRpb24gKi8KKyAgICBwcy0+Y3VycmVudCA9IChwcy0+Y3VycmVudDw8NikgfCAoKmMmKCgxPDw2KS0xKSk7CisgICAgcmVhZCsrOworICAgIGlmICghKC0tcHMtPnJlbWFpbmluZykpIHsKKyAgICAgIGlmIChwd2MpCisJKnB3YyA9IHBzLT5jdXJyZW50OworICAgICAgaWYgKCFwcy0+Y3VycmVudCkKKwkvKiBzaG91bGRuJ3QgY29kZWQgdGhpcyB3YXksIGJ1dCB3ZWxsLi4uICovCisJcmV0dXJuIDA7CisgICAgICByZXR1cm4gcmVhZDsKKyAgICB9CisgICAgYysrOworICB9CisgIHJldHVybiAoc2l6ZV90KSgtMik7CitlcnJvcjoKKyAgZXJybm8gPSBFSUxTRVE7CisgIHJldHVybiAoc2l6ZV90KSgtMSk7Cit9CisKK3N0YXRpYyBzaXplX3QgbXlfbWJzcnRvd2NzKHdjaGFyX3QgKmRlc3QsIGNvbnN0IGNoYXIgKipzcmMsIHNpemVfdCBsZW4sIG15X21ic3RhdGVfdCAqcHMpIHsKKyAgaW50IHB1dCA9IDA7CisgIHNpemVfdCBza2lwOworICB3Y2hhcl90IGJ1ZiwqYnVmcDsKKworICBpZiAoIXBzKSBwcyA9ICZpbnRlcm5hbDsKKyAgaWYgKGRlc3QpCisgICAgYnVmcCA9IGRlc3Q7CisgIGVsc2UKKyAgICBidWZwID0gJmJ1ZjsKKworICB3aGlsZSAobGVuLXB1dCB8fCAhZGVzdCkgeworICAgIHNraXAgPSBteV9tYnJ0b3djKGJ1ZnAsICpzcmMsIDYsIHBzKTsKKyAgICBzd2l0Y2ggKHNraXApIHsKKyAgICAgIGNhc2UgKHNpemVfdCkoLTIpOgorICAgICAgICBlcnJubyA9IEVJTFNFUTsgLyogc2hvdWxkbid0IGhhcHBlbiAhICovCisgICAgICAgIC8qIGZhbGwgdGhyb3VnaCAqLworICAgICAgY2FzZSAoc2l6ZV90KSgtMSk6CisgICAgICAgIHJldHVybiAoc2l6ZV90KSgtMSk7CisKKyAgICAgIGNhc2UgMDoKKyAgICAgICAgKnNyYyA9IE5VTEw7CisgICAgICAgIHJldHVybiBwdXQ7CisgICAgfQorICAgICpzcmMgKz0gc2tpcDsKKyAgICBpZiAoZGVzdCkgYnVmcCsrOworICAgIHB1dCsrOworICB9CisgIHJldHVybiBwdXQ7Cit9CisKK3N0YXRpYyBzaXplX3QgbXlfbWJybGVuKGNvbnN0IGNoYXIgKnMsIHNpemVfdCBuLCBteV9tYnN0YXRlX3QgKnBzKSB7CisgIHJldHVybiBteV9tYnJ0b3djKE5VTEwsIHMsIG4sIHBzP3BzOiZpbnRlcm5hbCk7Cit9CisKK3N0YXRpYyBzaXplX3QgbXlfbWJzbGVuKGNvbnN0IGNoYXIgKnMsIHNpemVfdCBuKSB7CisgIG15X21ic3RhdGVfdCBwczsKKyAgc2l6ZV90IHJldD0wOworICBzaXplX3QgZWF0ZW47CisgIG1lbXNldCgmcHMsMCxzaXplb2YocHMpKTsKKyAgd2hpbGUobikgeworICAgIGlmICgoc3NpemVfdCkoZWF0ZW4gPSBteV9tYnJsZW4ocyxuLCZwcykpPDApCisgICAgICByZXR1cm4gZWF0ZW47CisgICAgaWYgKCEoZWF0ZW4pKSByZXR1cm4gcmV0OworICAgIHMrPWVhdGVuOworICAgIG4tPWVhdGVuOworICAgIHJldCsrOworICB9CisgIHJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIGFkZFJvd3MobG9uZyBwb3MsIGxvbmcgbnVtKSB7CisgIGN1ck51bVJvd3MgKz0gbnVtOworICBjdXJSb3dzID0gcmVhbGxvYyhjdXJSb3dzLGN1ck51bVJvd3Mqc2l6ZW9mKCpjdXJSb3dzKSk7CisgIGN1clJvd0xlbmd0aHMgPSByZWFsbG9jKGN1clJvd0xlbmd0aHMsY3VyTnVtUm93cypzaXplb2YoKmN1clJvd0xlbmd0aHMpKTsKKyAgbWVtbW92ZShjdXJSb3dzICAgICAgK3BvcytudW0sY3VyUm93cyAgICAgICtwb3MsKGN1ck51bVJvd3MtKHBvcytudW0pKSpzaXplb2YoKmN1clJvd3MpKTsKKyAgbWVtbW92ZShjdXJSb3dMZW5ndGhzK3BvcytudW0sY3VyUm93TGVuZ3Rocytwb3MsKGN1ck51bVJvd3MtKHBvcytudW0pKSpzaXplb2YoKmN1clJvd0xlbmd0aHMpKTsKK30KKworc3RhdGljIHZvaWQgZGVsUm93cyhsb25nIHBvcywgbG9uZyBudW0pIHsKKyAgbG9uZyB5OworICBmb3IgKHk9cG9zO3k8cG9zK251bTt5KyspCisgICAgZnJlZShjdXJSb3dzW3ldKTsKKyAgbWVtbW92ZShjdXJSb3dzICAgICAgK3BvcyxjdXJSb3dzICAgICAgK3BvcytudW0sKGN1ck51bVJvd3MtKHBvcytudW0pKSpzaXplb2YoKmN1clJvd3MpKTsKKyAgbWVtbW92ZShjdXJSb3dMZW5ndGhzK3BvcyxjdXJSb3dMZW5ndGhzK3BvcytudW0sKGN1ck51bVJvd3MtKHBvcytudW0pKSpzaXplb2YoKmN1clJvd0xlbmd0aHMpKTsKKyAgY3VyTnVtUm93cyAtPSBudW07CisgIGN1clJvd3MgPSByZWFsbG9jKGN1clJvd3MsY3VyTnVtUm93cypzaXplb2YoKmN1clJvd3MpKTsKKyAgY3VyUm93TGVuZ3RocyA9IHJlYWxsb2MoY3VyUm93TGVuZ3RocyxjdXJOdW1Sb3dzKnNpemVvZigqY3VyUm93TGVuZ3RocykpOworfQorCitzdGF0aWMgaW50Citwcm9jZXNzUGFyYW1ldGVyc19BdFNwaTJTY3JlZW4gKGNoYXIgKipwYXJhbWV0ZXJzKSB7CisgIHJlbGVhc2VTY3JlZW4gPSAxOworICB7CisgICAgY29uc3QgY2hhciAqcGFyYW1ldGVyID0gcGFyYW1ldGVyc1tQQVJNX1JFTEVBU0VdOworCisgICAgaWYgKCpwYXJhbWV0ZXIpIHsKKyAgICAgIGlmICghdmFsaWRhdGVZZXNObygmcmVsZWFzZVNjcmVlbiwgcGFyYW1ldGVyKSkgeworICAgICAgICBsb2dNZXNzYWdlKExPR19XQVJOSU5HLCAiaW52YWxpZCByZWxlYXNlIHNjcmVlbiBzZXR0aW5nOiAlcyIsIHBhcmFtZXRlcik7CisgICAgICB9CisgICAgfQorICB9CisKKyAgeworICAgIGNvbnN0IGNoYXIgKnBhcmFtZXRlciA9IHBhcmFtZXRlcnNbUEFSTV9UWVBFXTsKKworICAgIGZvciAodW5zaWduZWQgaW50IGluZGV4PTA7IGluZGV4PFRZUEVfQ09VTlQ7IGluZGV4Kz0xKSB7CisgICAgICB0eXBlRmxhZ3NbaW5kZXhdID0gMDsKKyAgICB9CisKKyAgICBpZiAoKnBhcmFtZXRlcikgeworICAgICAgaWYgKCFpc0FiYnJldmlhdGlvbigiZGVmYXVsdCIsIHBhcmFtZXRlcikpIHsKKyAgICAgICAgaW50IGNvdW50OworICAgICAgICBjaGFyICoqdHlwZXMgPSBzcGxpdFN0cmluZyhwYXJhbWV0ZXIsICcrJywgJmNvdW50KTsKKworICAgICAgICBpZiAodHlwZXMpIHsKKyAgICAgICAgICBzdGF0aWMgY29uc3QgY2hhciAqY29uc3QgY2hvaWNlc1tdID0geworICAgICAgICAgICAgW1RZUEVfQUxMXSA9ICJhbGwiLAorICAgICAgICAgICAgW1RZUEVfVEVSTUlOQUxdID0gInRlcm1pbmFsIiwKKyAgICAgICAgICAgIFtUWVBFX1RFWFRdID0gInRleHQiLAorICAgICAgICAgICAgW1RZUEVfQ09VTlRdID0gTlVMTAorICAgICAgICAgIH07CisKKyAgICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpbmRleD0wOyBpbmRleDxjb3VudDsgaW5kZXgrPTEpIHsKKyAgICAgICAgICAgIGNvbnN0IGNoYXIgKnR5cGUgPSB0eXBlc1tpbmRleF07CisgICAgICAgICAgICB1bnNpZ25lZCBpbnQgY2hvaWNlOworCisgICAgICAgICAgICBpZiAoIXZhbGlkYXRlQ2hvaWNlKCZjaG9pY2UsIHR5cGUsIGNob2ljZXMpKSB7CisgICAgICAgICAgICAgIGxvZ01lc3NhZ2UoTE9HX1dBUk5JTkcsICIlczogJXMiLCAiaW52YWxpZCB3aWRnZXQgdHlwZSIsIHR5cGUpOworICAgICAgICAgICAgfSBlbHNlIGlmICgoY2hvaWNlID09IFRZUEVfQUxMKSAmJiAoaW5kZXggPiAwKSkgeworICAgICAgICAgICAgICBsb2dNZXNzYWdlKExPR19XQVJOSU5HLCAid2lkZ2V0IHR5cGUgaXMgbXV0dWFsbHkgZXhjbHVzaXZlOiAlcyIsIHR5cGUpOworICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlRmxhZ3NbY2hvaWNlXSB8fCB0eXBlRmxhZ3NbVFlQRV9BTExdKSB7CisgICAgICAgICAgICAgIGxvZ01lc3NhZ2UoTE9HX1dBUk5JTkcsICJ3aWRnZXQgdHlwZSBzcGVjaWZpZWQgbW9yZSB0aGFuIG9uY2U6ICVzIiwgdHlwZSk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICB0eXBlRmxhZ3NbY2hvaWNlXSA9IDE7CisgICAgICAgICAgICB9CisgICAgICAgICAgfQorCisgICAgICAgICAgZGVhbGxvY2F0ZVN0cmluZ3ModHlwZXMpOworICAgICAgICB9CisgICAgICB9CisgICAgfQorICB9CisKKyAgcmV0dXJuIDE7Cit9CisKKy8qIENyZWF0ZXMgYSBtZXRob2QgY2FsbCBtZXNzYWdlICovCitzdGF0aWMgREJ1c01lc3NhZ2UgKgorbmV3X21ldGhvZF9jYWxsKGNvbnN0IGNoYXIgKnNlbmRlciwgY29uc3QgY2hhciAqcGF0aCwgY29uc3QgY2hhciAqaW50ZXJmYWNlLCBjb25zdCBjaGFyICptZXRob2QpCit7CisgIERCdXNFcnJvciBlcnJvcjsKKyAgREJ1c01lc3NhZ2UgKm1zZzsKKworICBkYnVzX2Vycm9yX2luaXQoJmVycm9yKTsKKyAgbXNnID0gZGJ1c19tZXNzYWdlX25ld19tZXRob2RfY2FsbChzZW5kZXIsIHBhdGgsIGludGVyZmFjZSwgbWV0aG9kKTsKKyAgaWYgKGRidXNfZXJyb3JfaXNfc2V0KCZlcnJvcikpIHsKKyAgICBsb2dNZXNzYWdlKExPR19DQVRFR09SWShTQ1JFRU5fRFJJVkVSKSwKKyAgICAgICAgICAgICAgICJlcnJvciB3aGlsZSBtYWtpbmcgJXMgbWVzc2FnZTogJXMgJXMiLCBtZXRob2QsIGVycm9yLm5hbWUsIGVycm9yLm1lc3NhZ2UpOworCisgICAgZGJ1c19lcnJvcl9mcmVlKCZlcnJvcik7CisgICAgcmV0dXJuIE5VTEw7CisgIH0KKyAgaWYgKCFtc2cpIHsKKyAgICBsb2dNZXNzYWdlKExPR19DQVRFR09SWShTQ1JFRU5fRFJJVkVSKSwKKyAgICAgICAgICAgICAgICJubyBtZW1vcnkgd2hpbGUgbWFraW5nICVzIG1lc3NhZ2UiLCBtZXRob2QpOworICAgIHJldHVybiBOVUxMOworICB9CisgIHJldHVybiBtc2c7Cit9CisKKy8qIFNlbmRzIGEgbWV0aG9kIGNhbGwgbWVzc2FnZSwgYW5kIHJldHVybnMgdGhlIHJlcGx5LCBpZiBhbnkuIFRoaXMgdW5yZWZzIHRoZSBtZXNzYWdlLiAgKi8KK3N0YXRpYyBEQnVzTWVzc2FnZSAqCitzZW5kX3dpdGhfcmVwbHlfYW5kX2Jsb2NrKERCdXNDb25uZWN0aW9uICpidXMsIERCdXNNZXNzYWdlICptc2csIGludCB0aW1lb3V0X21zLCBjb25zdCBjaGFyICpkb2luZykKK3sKKyAgREJ1c0Vycm9yIGVycm9yOworICBEQnVzTWVzc2FnZSAqcmVwbHk7CisKKyAgZGJ1c19lcnJvcl9pbml0KCZlcnJvcik7CisgIHJlcGx5ID0gZGJ1c19jb25uZWN0aW9uX3NlbmRfd2l0aF9yZXBseV9hbmRfYmxvY2soYnVzLCBtc2csIHRpbWVvdXRfbXMsICZlcnJvcik7CisgIGRidXNfbWVzc2FnZV91bnJlZihtc2cpOworICBpZiAoZGJ1c19lcnJvcl9pc19zZXQoJmVycm9yKSkgeworICAgIGxvZ01lc3NhZ2UoTE9HX0NBVEVHT1JZKFNDUkVFTl9EUklWRVIpLAorICAgICAgICAgICAgICAgImVycm9yIHdoaWxlICVzOiAlcyAlcyIsIGRvaW5nLCBlcnJvci5uYW1lLCBlcnJvci5tZXNzYWdlKTsKKyAgICBkYnVzX2Vycm9yX2ZyZWUoJmVycm9yKTsKKyAgICByZXR1cm4gTlVMTDsKKyAgfQorICBpZiAoIXJlcGx5KSB7CisgICAgbG9nTWVzc2FnZShMT0dfQ0FURUdPUlkoU0NSRUVOX0RSSVZFUiksCisgICAgICAgICAgICAgICAidGltZW91dCB3aGlsZSAlcyIsIGRvaW5nKTsKKyAgICByZXR1cm4gTlVMTDsKKyAgfQorICBpZiAoZGJ1c19tZXNzYWdlX2dldF90eXBlIChyZXBseSkgPT0gREJVU19NRVNTQUdFX1RZUEVfRVJST1IpIHsKKyAgICBsb2dNZXNzYWdlKExPR19DQVRFR09SWShTQ1JFRU5fRFJJVkVSKSwKKyAgICAgICAgICAgICAgICJlcnJvciB3aGlsZSAlcyIsIGRvaW5nKTsKKyAgICBkYnVzX21lc3NhZ2VfdW5yZWYocmVwbHkpOworICAgIHJldHVybiBOVUxMOworICB9CisgIHJldHVybiByZXBseTsKK30KKworc3RhdGljIHZvaWQgZmluZFBvc2l0aW9uKGxvbmcgcG9zaXRpb24sIGxvbmcgKnB4LCBsb25nICpweSkgeworICBsb25nIG9mZnNldD0wLCBuZXdvZmZzZXQsIHgsIHk7CisgIC8qIFhYWDogSSBkb24ndCBrbm93IHdoYXQgdGhleSBkbyB3aXRoIG5lY2Vzc2FyeSBjb21iaW5pbmcgYWNjZW50cyAqLworICBmb3IgKHk9MDsgeTxjdXJOdW1Sb3dzOyB5KyspIHsKKyAgICBpZiAoKG5ld29mZnNldCA9IG9mZnNldCArIGN1clJvd0xlbmd0aHNbeV0pID4gcG9zaXRpb24pCisgICAgICBicmVhazsKKyAgICBvZmZzZXQgPSBuZXdvZmZzZXQ7CisgIH0KKyAgaWYgKHk9PWN1ck51bVJvd3MpIHsKKyAgICBpZiAoIWN1ck51bVJvd3MpIHsKKyAgICAgIHkgPSAwOworICAgICAgeCA9IDA7CisgICAgfSBlbHNlIHsKKyAgICAgIC8qIHRoaXMgX2Nhbl8gaGFwcGVuLCB3aGVuIGRlbGV0aW5nIHdoaWxlIGNhcmV0IGlzIGF0IHRoZSBlbmQgb2YgdGhlCisgICAgICAgKiB0ZXJtaW5hbDogY2FyZXQgcG9zaXRpb24gaXMgb25seSB1cGRhdGVkIGFmdGVyd2FyZHMuLi4gSW4gdGhlCisgICAgICAgKiBtZWFud2hpbGUsIGtlZXAgY2FyZXQgYXQgdGhlIGVuZCBvZiBsYXN0IGxpbmUuICovCisgICAgICB5ID0gY3VyTnVtUm93cy0xOworICAgICAgeCA9IGN1clJvd0xlbmd0aHNbeV07CisgICAgfQorICB9IGVsc2UKKyAgICB4ID0gcG9zaXRpb24tb2Zmc2V0OworICAqcHggPSB4OworICAqcHkgPSB5OworfQorCitzdGF0aWMgbG9uZyBmaW5kQ29vcmRpbmF0ZXMobG9uZyB4eCwgbG9uZyB5eSkgeworICBsb25nIG9mZnNldD0wLCB5OworICAvKiBYWFg6IEkgZG9uJ3Qga25vdyB3aGF0IHRoZXkgZG8gd2l0aCBuZWNlc3NhcnkgY29tYmluaW5nIGFjY2VudHMgKi8KKyAgaWYgKHl5ID49IGN1ck51bVJvd3MpIHsKKyAgICByZXR1cm4gLTE7CisgIH0KKyAgZm9yICh5PTA7IHk8eXk7IHkrKykgeworICAgIG9mZnNldCArPSBjdXJSb3dMZW5ndGhzW3ldOworICB9CisgIGlmICh4eCA+PSBjdXJSb3dMZW5ndGhzW3ldKQorICAgIHh4ID0gY3VyUm93TGVuZ3Roc1t5XS0xOworICByZXR1cm4gb2Zmc2V0ICsgeHg7Cit9CisKK3N0YXRpYyB2b2lkIGNhcmV0UG9zaXRpb24obG9uZyBjYXJldCkgeworICBpZiAoY2FyZXQgPCAwKSB7CisgICAgY2FyZXQgPSAwOworICB9CisgIGZpbmRQb3NpdGlvbihjYXJldCwmY3VyUG9zWCwmY3VyUG9zWSk7CisgIGN1ckNhcmV0ID0gY2FyZXQ7Cit9CisKK3N0YXRpYyB2b2lkIGZpbmlUZXJtKHZvaWQpIHsKKyAgdW5zaWduZWQgaTsKKyAgbG9nTWVzc2FnZShMT0dfQ0FURUdPUlkoU0NSRUVOX0RSSVZFUiksCisgICAgICAgICAgICAgImVuZCBvZiB0ZXJtICVzOiVzIixjdXJTZW5kZXIsY3VyUGF0aCk7CisgIGZyZWUoY3VyU2VuZGVyKTsKKyAgY3VyU2VuZGVyID0gTlVMTDsKKyAgZnJlZShjdXJQYXRoKTsKKyAgY3VyUGF0aCA9IE5VTEw7CisgIGZyZWUoY3VyUm9sZSk7CisgIGN1clJvbGUgPSBOVUxMOworICBjdXJQb3NYID0gY3VyUG9zWSA9IDA7CisgIGlmIChjdXJSb3dzKSB7CisgICAgZm9yIChpPTA7aTxjdXJOdW1Sb3dzO2krKykKKyAgICAgIGZyZWUoY3VyUm93c1tpXSk7CisgICAgZnJlZShjdXJSb3dzKTsKKyAgfQorICBjdXJSb3dzID0gTlVMTDsKKyAgZnJlZShjdXJSb3dMZW5ndGhzKTsKKyAgY3VyUm93TGVuZ3RocyA9IE5VTEw7CisgIGN1ck51bUNvbHMgPSBjdXJOdW1Sb3dzID0gMDsKK30KKworI2RlZmluZSBST0xFX1RFUk1JTkFMICJ0ZXJtaW5hbCIKKyNkZWZpbmUgUk9MRV9URVhUICJ0ZXh0IgorCitzdGF0aWMgaW50Citpc1JvbGUgKGNvbnN0IGNoYXIgKnJvbGUpIHsKKyAgaWYgKCFjdXJSb2xlKSByZXR1cm4gMDsKKyAgcmV0dXJuIHN0cmNtcChjdXJSb2xlLCByb2xlKSA9PSAwOworfQorCitzdGF0aWMgaW50Citpc1Rlcm1pbmFsICh2b2lkKSB7CisgIHJldHVybiBpc1JvbGUoUk9MRV9URVJNSU5BTCk7Cit9CisKK3N0YXRpYyBpbnQKK2lzVGV4dCAodm9pZCkgeworICByZXR1cm4gaXNSb2xlKFJPTEVfVEVYVCk7Cit9CisKKy8qIEdldCB0aGUgcm9sZSBvZiBhbiBBVC1TUEkyIG9iamVjdCAqLworc3RhdGljIGNoYXIgKmdldFJvbGUoY29uc3QgY2hhciAqc2VuZGVyLCBjb25zdCBjaGFyICpwYXRoKSB7CisgIGNvbnN0IGNoYXIgKnRleHQ7CisgIGNoYXIgKnJlcyA9IE5VTEw7CisgIERCdXNNZXNzYWdlICptc2csICpyZXBseTsKKyAgREJ1c01lc3NhZ2VJdGVyIGl0ZXI7CisKKyAgbXNnID0gbmV3X21ldGhvZF9jYWxsKHNlbmRlciwgcGF0aCwgU1BJMl9EQlVTX0lOVEVSRkFDRV9BQ0NFU1NJQkxFLCAiR2V0Um9sZU5hbWUiKTsKKyAgaWYgKCFtc2cpCisgICAgcmV0dXJuIE5VTEw7CisgIHJlcGx5ID0gc2VuZF93aXRoX3JlcGx5X2FuZF9ibG9jayhidXMsIG1zZywgMTAwMCwgImdldHRpbmcgcm9sZSIpOworICBpZiAoIXJlcGx5KQorICAgIHJldHVybiBOVUxMOworCisgIGRidXNfbWVzc2FnZV9pdGVyX2luaXQocmVwbHksICZpdGVyKTsKKyAgaWYgKGRidXNfbWVzc2FnZV9pdGVyX2dldF9hcmdfdHlwZSgmaXRlcikgIT0gREJVU19UWVBFX1NUUklORykgeworICAgIGxvZ01lc3NhZ2UoTE9HX0NBVEVHT1JZKFNDUkVFTl9EUklWRVIpLAorICAgICAgICAgICAgICAgIkdldFJvbGVOYW1lIGRpZG4ndCByZXR1cm4gYSBzdHJpbmcgYnV0ICclYyciLCBkYnVzX21lc3NhZ2VfaXRlcl9nZXRfYXJnX3R5cGUoJml0ZXIpKTsKKyAgICBnb3RvIG91dDsKKyAgfQorICBkYnVzX21lc3NhZ2VfaXRlcl9nZXRfYmFzaWMoJml0ZXIsICZ0ZXh0KTsKKyAgcmVzID0gc3RyZHVwKHRleHQpOworCitvdXQ6CisgIGRidXNfbWVzc2FnZV91bnJlZihyZXBseSk7CisgIHJldHVybiByZXM7Cit9CisKKy8qIEdldCB0aGUgZ2V0IGludGVyZmFjZXMgb2YgYW4gQVQtU1BJMiBvYmplY3QgKi8KK3N0YXRpYyBpbnQgZ2V0SGFzVGV4dEludGVyZmFjZShjb25zdCBjaGFyICpzZW5kZXIsIGNvbnN0IGNoYXIgKnBhdGgpIHsKKyAgREJ1c01lc3NhZ2UgKm1zZywgKnJlcGx5OworICBEQnVzTWVzc2FnZUl0ZXIgaXRlcjsKKyAgREJ1c01lc3NhZ2VJdGVyIGl0ZXJfYXJyYXk7CisgIGludCByZXQgPSAwOworCisgIG1zZyA9IG5ld19tZXRob2RfY2FsbChzZW5kZXIsIHBhdGgsIFNQSTJfREJVU19JTlRFUkZBQ0VfQUNDRVNTSUJMRSwgIkdldEludGVyZmFjZXMiKTsKKyAgaWYgKCFtc2cpCisgICAgcmV0dXJuIDA7CisgIHJlcGx5ID0gc2VuZF93aXRoX3JlcGx5X2FuZF9ibG9jayhidXMsIG1zZywgMTAwMCwgImdldHRpbmcgaW50ZXJmYWNlcyIpOworICBpZiAoIXJlcGx5KQorICAgIHJldHVybiAwOworCisgIGRidXNfbWVzc2FnZV9pdGVyX2luaXQocmVwbHksICZpdGVyKTsKKyAgZGJ1c19tZXNzYWdlX2l0ZXJfcmVjdXJzZSAoJml0ZXIsICZpdGVyX2FycmF5KTsKKyAgd2hpbGUgKGRidXNfbWVzc2FnZV9pdGVyX2dldF9hcmdfdHlwZSAoJml0ZXJfYXJyYXkpICE9IERCVVNfVFlQRV9JTlZBTElEKQorICB7CisgICAgY29uc3QgY2hhciAqaWZhY2U7CisgICAgZGJ1c19tZXNzYWdlX2l0ZXJfZ2V0X2Jhc2ljICgmaXRlcl9hcnJheSwgJmlmYWNlKTsKKworICAgIGlmICghc3RyY21wIChpZmFjZSwgIm9yZy5hMTF5LmF0c3BpLlRleHQiKSkKKyAgICB7CisgICAgICByZXQgPSAxOworICAgICAgZ290byBvdXQ7CisgICAgfQorICAgIGRidXNfbWVzc2FnZV9pdGVyX25leHQgKCZpdGVyX2FycmF5KTsKKyAgfQorCitvdXQ6CisgIGRidXNfbWVzc2FnZV91bnJlZihyZXBseSk7CisgIHJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBjaGFyICpnZXROYW1lKGNvbnN0IGNoYXIgKnNlbmRlciwgY29uc3QgY2hhciAqcGF0aCkgeworICBjb25zdCBjaGFyICpuYW1lOworICBjaGFyICpyZXMgPSBOVUxMOworICBEQnVzTWVzc2FnZSAqbXNnLCAqcmVwbHkgPSBOVUxMOworICBjb25zdCBjaGFyICppbnRlcmZhY2UgPSBTUEkyX0RCVVNfSU5URVJGQUNFX0FDQ0VTU0lCTEU7CisgIGNvbnN0IGNoYXIgKnByb3BlcnR5ID0gIk5hbWUiOworICBEQnVzTWVzc2FnZUl0ZXIgaXRlciwgaXRlcl92YXJpYW50OworCisgIG1zZyA9IG5ld19tZXRob2RfY2FsbChzZW5kZXIsIHBhdGgsIERCVVNfSU5URVJGQUNFX1BST1BFUlRJRVMsICJHZXQiKTsKKyAgaWYgKCFtc2cpCisgICAgcmV0dXJuIE5VTEw7CisgIGRidXNfbWVzc2FnZV9hcHBlbmRfYXJncyhtc2csIERCVVNfVFlQRV9TVFJJTkcsICZpbnRlcmZhY2UsIERCVVNfVFlQRV9TVFJJTkcsICZwcm9wZXJ0eSwgREJVU19UWVBFX0lOVkFMSUQpOworICByZXBseSA9IHNlbmRfd2l0aF9yZXBseV9hbmRfYmxvY2soYnVzLCBtc2csIDEwMDAsICJnZXR0aW5nIG5hbWUiKTsKKyAgaWYgKCFyZXBseSkKKyAgICByZXR1cm4gTlVMTDsKKworICBkYnVzX21lc3NhZ2VfaXRlcl9pbml0KHJlcGx5LCAmaXRlcik7CisgIGlmIChkYnVzX21lc3NhZ2VfaXRlcl9nZXRfYXJnX3R5cGUoJml0ZXIpICE9IERCVVNfVFlQRV9WQVJJQU5UKSB7CisgICAgbG9nTWVzc2FnZShMT0dfQ0FURUdPUlkoU0NSRUVOX0RSSVZFUiksCisgICAgICAgICAgICAgICAiZ2V0TmFtZSBkaWRuJ3QgcmV0dXJuIGEgdmFyaWFudCBidXQgJyVjJyIsIGRidXNfbWVzc2FnZV9pdGVyX2dldF9hcmdfdHlwZSgmaXRlcikpOworICAgIGdvdG8gb3V0OworICB9CisgIGRidXNfbWVzc2FnZV9pdGVyX3JlY3Vyc2UoJml0ZXIsICZpdGVyX3ZhcmlhbnQpOworICBpZiAoZGJ1c19tZXNzYWdlX2l0ZXJfZ2V0X2FyZ190eXBlKCZpdGVyX3ZhcmlhbnQpICE9IERCVVNfVFlQRV9TVFJJTkcpIHsKKyAgICBsb2dNZXNzYWdlKExPR19DQVRFR09SWShTQ1JFRU5fRFJJVkVSKSwKKyAgICAgICAgICAgICAgICJnZXROYW1lIGRpZG4ndCByZXR1cm4gYSB2YXJpYW50IGJ1dCAnJWMnIiwgZGJ1c19tZXNzYWdlX2l0ZXJfZ2V0X2FyZ190eXBlKCZpdGVyX3ZhcmlhbnQpKTsKKyAgICBnb3RvIG91dDsKKyAgfQorICBkYnVzX21lc3NhZ2VfaXRlcl9nZXRfYmFzaWMoJml0ZXJfdmFyaWFudCwgJm5hbWUpOworICByZXMgPSBzdHJkdXAobmFtZSk7CisKK291dDoKKyAgZGJ1c19tZXNzYWdlX3VucmVmKHJlcGx5KTsKKyAgcmV0dXJuIHJlczsKK30KKworLyogR2V0IHRoZSB0ZXh0IG9mIGFuIEFULVNQSTIgb2JqZWN0ICovCitzdGF0aWMgY2hhciAqZ2V0VGV4dChjb25zdCBjaGFyICpzZW5kZXIsIGNvbnN0IGNoYXIgKnBhdGgpIHsKKyAgY29uc3QgY2hhciAqdGV4dDsKKyAgY2hhciAqcmVzID0gTlVMTDsKKyAgREJ1c01lc3NhZ2UgKm1zZywgKnJlcGx5OworICBkYnVzX2ludDMyX3QgYmVnaW4gPSAwOworICBkYnVzX2ludDMyX3QgZW5kID0gLTE7CisgIERCdXNNZXNzYWdlSXRlciBpdGVyOworCisgIG1zZyA9IG5ld19tZXRob2RfY2FsbChzZW5kZXIsIHBhdGgsIFNQSTJfREJVU19JTlRFUkZBQ0VfVEVYVCwgIkdldFRleHQiKTsKKyAgaWYgKCFtc2cpCisgICAgcmV0dXJuIE5VTEw7CisgIGRidXNfbWVzc2FnZV9hcHBlbmRfYXJncyhtc2csIERCVVNfVFlQRV9JTlQzMiwgJmJlZ2luLCBEQlVTX1RZUEVfSU5UMzIsICZlbmQsIERCVVNfVFlQRV9JTlZBTElEKTsKKyAgcmVwbHkgPSBzZW5kX3dpdGhfcmVwbHlfYW5kX2Jsb2NrKGJ1cywgbXNnLCAxMDAwLCAiZ2V0dGluZyB0ZXh0Iik7CisgIGlmICghcmVwbHkpCisgICAgcmV0dXJuIE5VTEw7CisKKyAgZGJ1c19tZXNzYWdlX2l0ZXJfaW5pdChyZXBseSwgJml0ZXIpOworICBpZiAoZGJ1c19tZXNzYWdlX2l0ZXJfZ2V0X2FyZ190eXBlKCZpdGVyKSAhPSBEQlVTX1RZUEVfU1RSSU5HKSB7CisgICAgbG9nTWVzc2FnZShMT0dfQ0FURUdPUlkoU0NSRUVOX0RSSVZFUiksCisgICAgICAgICAgICAgICAiR2V0VGV4dCBkaWRuJ3QgcmV0dXJuIGEgc3RyaW5nIGJ1dCAnJWMnIiwgZGJ1c19tZXNzYWdlX2l0ZXJfZ2V0X2FyZ190eXBlKCZpdGVyKSk7CisgICAgZ290byBvdXQ7CisgIH0KKyAgZGJ1c19tZXNzYWdlX2l0ZXJfZ2V0X2Jhc2ljKCZpdGVyLCAmdGV4dCk7CisgIHJlcyA9IHN0cmR1cCh0ZXh0KTsKKworb3V0OgorICBkYnVzX21lc3NhZ2VfdW5yZWYocmVwbHkpOworICByZXR1cm4gcmVzOworfQorCisvKiBHZXQgdGhlIGNhcmV0IG9mIGFuIEFULVNQSTIgb2JqZWN0ICovCitzdGF0aWMgZGJ1c19pbnQzMl90IGdldENhcmV0KGNvbnN0IGNoYXIgKnNlbmRlciwgY29uc3QgY2hhciAqcGF0aCkgeworICBkYnVzX2ludDMyX3QgcmVzID0gLTE7CisgIERCdXNNZXNzYWdlICptc2csICpyZXBseSA9IE5VTEw7CisgIGNvbnN0IGNoYXIgKmludGVyZmFjZSA9IFNQSTJfREJVU19JTlRFUkZBQ0VfVEVYVDsKKyAgY29uc3QgY2hhciAqcHJvcGVydHkgPSAiQ2FyZXRPZmZzZXQiOworICBEQnVzTWVzc2FnZUl0ZXIgaXRlciwgaXRlcl92YXJpYW50OworCisgIG1zZyA9IG5ld19tZXRob2RfY2FsbChzZW5kZXIsIHBhdGgsIERCVVNfSU5URVJGQUNFX1BST1BFUlRJRVMsICJHZXQiKTsKKyAgaWYgKCFtc2cpCisgICAgcmV0dXJuIC0xOworICBkYnVzX21lc3NhZ2VfYXBwZW5kX2FyZ3MobXNnLCBEQlVTX1RZUEVfU1RSSU5HLCAmaW50ZXJmYWNlLCBEQlVTX1RZUEVfU1RSSU5HLCAmcHJvcGVydHksIERCVVNfVFlQRV9JTlZBTElEKTsKKyAgcmVwbHkgPSBzZW5kX3dpdGhfcmVwbHlfYW5kX2Jsb2NrKGJ1cywgbXNnLCAxMDAwLCAiZ2V0dGluZyBjYXJldCIpOworICBpZiAoIXJlcGx5KQorICAgIHJldHVybiAtMTsKKworICBkYnVzX21lc3NhZ2VfaXRlcl9pbml0KHJlcGx5LCAmaXRlcik7CisgIGlmIChkYnVzX21lc3NhZ2VfaXRlcl9nZXRfYXJnX3R5cGUoJml0ZXIpICE9IERCVVNfVFlQRV9WQVJJQU5UKSB7CisgICAgbG9nTWVzc2FnZShMT0dfQ0FURUdPUlkoU0NSRUVOX0RSSVZFUiksCisgICAgICAgICAgICAgICAiZ2V0Q2FyZXQgZGlkbid0IHJldHVybiBhIHZhcmlhbnQgYnV0ICclYyciLCBkYnVzX21lc3NhZ2VfaXRlcl9nZXRfYXJnX3R5cGUoJml0ZXIpKTsKKyAgICBnb3RvIG91dDsKKyAgfQorICBkYnVzX21lc3NhZ2VfaXRlcl9yZWN1cnNlKCZpdGVyLCAmaXRlcl92YXJpYW50KTsKKyAgaWYgKGRidXNfbWVzc2FnZV9pdGVyX2dldF9hcmdfdHlwZSgmaXRlcl92YXJpYW50KSAhPSBEQlVTX1RZUEVfSU5UMzIpIHsKKyAgICBsb2dNZXNzYWdlKExPR19DQVRFR09SWShTQ1JFRU5fRFJJVkVSKSwKKyAgICAgICAgICAgICAgICJnZXRDYXJldCBkaWRuJ3QgcmV0dXJuIGFuIGludDMyIGJ1dCAnJWMnIiwgZGJ1c19tZXNzYWdlX2l0ZXJfZ2V0X2FyZ190eXBlKCZpdGVyX3ZhcmlhbnQpKTsKKyAgICBnb3RvIG91dDsKKyAgfQorICBkYnVzX21lc3NhZ2VfaXRlcl9nZXRfYmFzaWMoJml0ZXJfdmFyaWFudCwgJnJlcyk7CisgIGxvZ01lc3NhZ2UoTE9HX0NBVEVHT1JZKFNDUkVFTl9EUklWRVIpLAorICAgICAgICAgICAgICJHb3QgY2FyZXQgJWQiLCByZXMpOworCitvdXQ6CisgIGRidXNfbWVzc2FnZV91bnJlZihyZXBseSk7CisgIHJldHVybiByZXM7Cit9CisKKy8qIFN3aXRjaGVkIHRvIGEgbmV3IHRlcm1pbmFsLCByZXN0YXJ0IGZyb20gc2NyYXRjaCAqLworc3RhdGljIHZvaWQgcmVzdGFydFRlcm0oY29uc3QgY2hhciAqc2VuZGVyLCBjb25zdCBjaGFyICpwYXRoKSB7CisgIGNoYXIgKnRleHQgPSBnZXRUZXh0KHNlbmRlciwgcGF0aCk7CisgIGlmICghdGV4dCkgeworICAgIHRleHQgPSBnZXROYW1lKHNlbmRlciwgcGF0aCk7CisgICAgaWYgKCF0ZXh0KSByZXR1cm47CisgIH0KKworICBjaGFyICpjLCpkOworICBjb25zdCBjaGFyICplOworICBsb25nIGksbGVuOworCisgIGN1clNlbmRlciA9IHN0cmR1cChzZW5kZXIpOworICBjdXJQYXRoID0gc3RyZHVwKHBhdGgpOworICBsb2dNZXNzYWdlKExPR19DQVRFR09SWShTQ1JFRU5fRFJJVkVSKSwKKyAgICAgICAgICAgICAibmV3IHRlcm0gJXM6JXMgd2l0aCB0ZXh0ICVzIiwgY3VyU2VuZGVyLCBjdXJQYXRoLCB0ZXh0KTsKKworICBpZiAoY3VyUm93cykgeworICAgIGZvciAoaT0wO2k8Y3VyTnVtUm93cztpKyspCisgICAgICBmcmVlKGN1clJvd3NbaV0pOworICAgIGZyZWUoY3VyUm93cyk7CisgIH0KKyAgY3VyTnVtUm93cyA9IDA7CisgIGZyZWUoY3VyUm93TGVuZ3Rocyk7CisgIGMgPSB0ZXh0OworICB3aGlsZSAoKmMpIHsKKyAgICBjdXJOdW1Sb3dzKys7CisgICAgaWYgKCEoYyA9IHN0cmNocihjLCdcbicpKSkKKyAgICAgIGJyZWFrOworICAgIGMrKzsKKyAgfQorICBsb2dNZXNzYWdlKExPR19DQVRFR09SWShTQ1JFRU5fRFJJVkVSKSwKKyAgICAgICAgICAgICAiJWxkIHJvd3MiLGN1ck51bVJvd3MpOworICBjdXJSb3dzID0gbWFsbG9jKGN1ck51bVJvd3MgKiBzaXplb2YoKmN1clJvd3MpKTsKKyAgY3VyUm93TGVuZ3RocyA9IG1hbGxvYyhjdXJOdW1Sb3dzICogc2l6ZW9mKCpjdXJSb3dMZW5ndGhzKSk7CisgIGkgPSAwOworICBjdXJOdW1Db2xzID0gMDsKKyAgZm9yIChjID0gdGV4dDsgKmM7IGMgPSBkKzEpIHsKKyAgICBkID0gc3RyY2hyKGMsJ1xuJyk7CisgICAgaWYgKGQpCisgICAgICAqZCA9IDA7CisgICAgZSA9IGM7CisgICAgY3VyUm93TGVuZ3Roc1tpXSA9IChsZW4gPSBteV9tYnNydG93Y3MoTlVMTCwmZSwwLE5VTEwpKSArIChkICE9IE5VTEwpOworICAgIGlmIChsZW4gPiBjdXJOdW1Db2xzKQorICAgICAgY3VyTnVtQ29scyA9IGxlbjsKKyAgICBlbHNlIGlmIChsZW4gPCAwKSB7CisgICAgICBpZiAobGVuPT0tMikKKwlsb2dNZXNzYWdlKExPR19FUlIsInVudGVybWluYXRlZCBzZXF1ZW5jZSAlcyIsYyk7CisgICAgICBlbHNlIGlmIChsZW49PS0xKQorCWxvZ1N5c3RlbUVycm9yKCJtYnJsZW4iKTsKKyAgICAgIGN1clJvd0xlbmd0aHNbaV0gPSAobGVuID0gMCkgKyAoZCAhPSBOVUxMKTsKKyAgICB9CisgICAgY3VyUm93c1tpXSA9IG1hbGxvYygobGVuICsgKGQhPU5VTEwpKSAqIHNpemVvZigqY3VyUm93c1tpXSkpOworICAgIGUgPSBjOworICAgIG15X21ic3J0b3djcyhjdXJSb3dzW2ldLCZlLGxlbixOVUxMKTsKKyAgICBpZiAoZCkKKyAgICAgIGN1clJvd3NbaV1bbGVuXT0nXG4nOworICAgIGVsc2UKKyAgICAgIGJyZWFrOworICAgIGkrKzsKKyAgfQorICBsb2dNZXNzYWdlKExPR19DQVRFR09SWShTQ1JFRU5fRFJJVkVSKSwKKyAgICAgICAgICAgICAiJWxkIGNvbHMiLGN1ck51bUNvbHMpOworICBjYXJldFBvc2l0aW9uKGdldENhcmV0KHNlbmRlciwgcGF0aCkpOworICBmcmVlKHRleHQpOworfQorCisvKiBTd2l0Y2hlZCB0byBhIG5ldyBvYmplY3QsIGNoZWNrIHdoZXRoZXIgd2Ugd2FudCB0byByZWFkIGl0LCBhbmQgaWYgc28sIHJlc3RhcnQgd2l0aCBpdCAqLworc3RhdGljIHZvaWQgdHJ5UmVzdGFydFRlcm0oY29uc3QgY2hhciAqc2VuZGVyLCBjb25zdCBjaGFyICpwYXRoKSB7CisgIGlmIChjdXJQYXRoKSBmaW5pVGVybSgpOworICByZXN0YXJ0VGVybShzZW5kZXIsIHBhdGgpOworCisgIGN1clJvbGUgPSBnZXRSb2xlKHNlbmRlciwgcGF0aCk7CisgIGxvZ01lc3NhZ2UoTE9HX0NBVEVHT1JZKFNDUkVFTl9EUklWRVIpLAorICAgICAgICAgICAgICJzdGF0ZSBjaGFuZ2VkIGZvY3VzIHRvIHJvbGUgJXMiLCBjdXJSb2xlKTsKKworICBjdXJRdWFsaXR5ID0gZ2V0SGFzVGV4dEludGVyZmFjZShzZW5kZXIsIHBhdGgpPyBTQ1FfUE9PUjogU0NRX05PTkU7CisgIHVuc2lnbmVkIGNoYXIgcmVxdWVzdGVkID0gdHlwZUZsYWdzW1RZUEVfQUxMXTsKKworICBpZiAoIXJlcXVlc3RlZCkgeworICAgIGlmIChpc1Rlcm1pbmFsKCkpIHsKKyAgICAgIGN1clF1YWxpdHkgPSBTQ1FfR09PRDsKKyAgICAgIHJlcXVlc3RlZCA9IHR5cGVGbGFnc1tUWVBFX1RFUk1JTkFMXTsKKyAgICB9IGVsc2UgaWYgKGlzVGV4dCgpKSB7CisgICAgICBjdXJRdWFsaXR5ID0gU0NRX0ZBSVI7CisgICAgICByZXF1ZXN0ZWQgPSB0eXBlRmxhZ3NbVFlQRV9URVhUXTsKKyAgICB9CisgIH0KKworICBpZiAocmVxdWVzdGVkKSBjdXJRdWFsaXR5ID0gU0NRX0dPT0Q7ICAgICAKK30KKworLyogR2V0IHRoZSBzdGF0ZSBvZiBhbiBvYmplY3QgKi8KK3N0YXRpYyBkYnVzX3VpbnQzMl90ICpnZXRTdGF0ZShjb25zdCBjaGFyICpzZW5kZXIsIGNvbnN0IGNoYXIgKnBhdGgpCit7CisgIERCdXNNZXNzYWdlICptc2csICpyZXBseTsKKyAgREJ1c01lc3NhZ2VJdGVyIGl0ZXIsIGl0ZXJfYXJyYXk7CisgIGRidXNfdWludDMyX3QgKnN0YXRlcywgKnJldCA9IE5VTEw7CisgIGludCBjb3VudDsKKworICBtc2cgPSBuZXdfbWV0aG9kX2NhbGwoc2VuZGVyLCBwYXRoLCBTUEkyX0RCVVNfSU5URVJGQUNFX0FDQ0VTU0lCTEUsICJHZXRTdGF0ZSIpOworICBpZiAoIW1zZykKKyAgICByZXR1cm4gTlVMTDsKKyAgcmVwbHkgPSBzZW5kX3dpdGhfcmVwbHlfYW5kX2Jsb2NrKGJ1cywgbXNnLCAxMDAwLCAiZ2V0dGluZyBzdGF0ZSIpOworICBpZiAoIXJlcGx5KQorICAgIHJldHVybiBOVUxMOworCisgIGlmIChzdHJjbXAgKGRidXNfbWVzc2FnZV9nZXRfc2lnbmF0dXJlIChyZXBseSksICJhdSIpICE9IDApCisgIHsKKyAgICBsb2dNZXNzYWdlKExPR19DQVRFR09SWShTQ1JFRU5fRFJJVkVSKSwKKyAgICAgICAgICAgICAgICJ1bmV4cGVjdGVkIHNpZ25hdHVyZSAlcyB3aGlsZSBnZXR0aW5nIGFjdGl2ZSBzdGF0ZSIsIGRidXNfbWVzc2FnZV9nZXRfc2lnbmF0dXJlKHJlcGx5KSk7CisgICAgZ290byBvdXQ7CisgIH0KKyAgZGJ1c19tZXNzYWdlX2l0ZXJfaW5pdCAocmVwbHksICZpdGVyKTsKKyAgZGJ1c19tZXNzYWdlX2l0ZXJfcmVjdXJzZSAoJml0ZXIsICZpdGVyX2FycmF5KTsKKyAgZGJ1c19tZXNzYWdlX2l0ZXJfZ2V0X2ZpeGVkX2FycmF5ICgmaXRlcl9hcnJheSwgJnN0YXRlcywgJmNvdW50KTsKKyAgaWYgKGNvdW50ICE9IDIpCisgIHsKKyAgICBsb2dNZXNzYWdlKExPR19DQVRFR09SWShTQ1JFRU5fRFJJVkVSKSwKKyAgICAgICAgICAgICAgICJ1bmV4cGVjdGVkIHNpZ25hdHVyZSAlcyB3aGlsZSBnZXR0aW5nIGFjdGl2ZSBzdGF0ZSIsIGRidXNfbWVzc2FnZV9nZXRfc2lnbmF0dXJlKHJlcGx5KSk7CisgICAgZ290byBvdXQ7CisgIH0KKyAgcmV0ID0gbWFsbG9jKHNpemVvZigqcmV0KSAqIGNvdW50KTsKKyAgbWVtY3B5KHJldCwgc3RhdGVzLCBzaXplb2YoKnJldCkgKiBjb3VudCk7CisKK291dDoKKyAgZGJ1c19tZXNzYWdlX3VucmVmKHJlcGx5KTsKKyAgcmV0dXJuIHJldDsKK30KKworLyogQ2hlY2sgd2hldGhlciBhbiBhbmNlc3RvciBvZiB0aGlzIG9iamVjdCBpcyBhY3RpdmUgKi8KK3N0YXRpYyBpbnQgY2hlY2tBY3RpdmVQYXJlbnQoY29uc3QgY2hhciAqc2VuZGVyLCBjb25zdCBjaGFyICpwYXRoKSB7CisgIERCdXNNZXNzYWdlICptc2csICpyZXBseTsKKyAgREJ1c01lc3NhZ2VJdGVyIGl0ZXIsIGl0ZXJfdmFyaWFudCwgaXRlcl9zdHJ1Y3Q7CisgIGludCByZXMgPSAwOworICBjb25zdCBjaGFyICppbnRlcmZhY2UgPSBTUEkyX0RCVVNfSU5URVJGQUNFX0FDQ0VTU0lCTEU7CisgIGNvbnN0IGNoYXIgKnByb3BlcnR5ID0gIlBhcmVudCI7CisgIGRidXNfdWludDMyX3QgKnN0YXRlczsKKworICBtc2cgPSBuZXdfbWV0aG9kX2NhbGwoc2VuZGVyLCBwYXRoLCBEQlVTX0lOVEVSRkFDRV9QUk9QRVJUSUVTLCAiR2V0Iik7CisgIGlmICghbXNnKQorICAgIHJldHVybiAwOworICBkYnVzX21lc3NhZ2VfYXBwZW5kX2FyZ3MobXNnLCBEQlVTX1RZUEVfU1RSSU5HLCAmaW50ZXJmYWNlLCBEQlVTX1RZUEVfU1RSSU5HLCAmcHJvcGVydHksIERCVVNfVFlQRV9JTlZBTElEKTsKKyAgcmVwbHkgPSBzZW5kX3dpdGhfcmVwbHlfYW5kX2Jsb2NrKGJ1cywgbXNnLCAxMDAwLCAiY2hlY2tpbmcgYWN0aXZlIG9iamVjdCIpOworICBpZiAoIXJlcGx5KQorICAgIHJldHVybiAwOworCisgIGlmIChzdHJjbXAgKGRidXNfbWVzc2FnZV9nZXRfc2lnbmF0dXJlIChyZXBseSksICJ2IikgIT0gMCkKKyAgeworICAgIGxvZ01lc3NhZ2UoTE9HX0NBVEVHT1JZKFNDUkVFTl9EUklWRVIpLAorICAgICAgICAgICAgICAgInVuZXhwZWN0ZWQgc2lnbmF0dXJlICVzIHdoaWxlIGNoZWNraW5nIGFjdGl2ZSBvYmplY3QiLCBkYnVzX21lc3NhZ2VfZ2V0X3NpZ25hdHVyZShyZXBseSkpOworICAgIGdvdG8gb3V0OworICB9CisKKyAgZGJ1c19tZXNzYWdlX2l0ZXJfaW5pdCAocmVwbHksICZpdGVyKTsKKyAgZGJ1c19tZXNzYWdlX2l0ZXJfcmVjdXJzZSAoJml0ZXIsICZpdGVyX3ZhcmlhbnQpOworICBkYnVzX21lc3NhZ2VfaXRlcl9yZWN1cnNlICgmaXRlcl92YXJpYW50LCAmaXRlcl9zdHJ1Y3QpOworICBkYnVzX21lc3NhZ2VfaXRlcl9nZXRfYmFzaWMgKCZpdGVyX3N0cnVjdCwgJnNlbmRlcik7CisgIGRidXNfbWVzc2FnZV9pdGVyX25leHQgKCZpdGVyX3N0cnVjdCk7CisgIGRidXNfbWVzc2FnZV9pdGVyX2dldF9iYXNpYyAoJml0ZXJfc3RydWN0LCAmcGF0aCk7CisKKyAgc3RhdGVzID0gZ2V0U3RhdGUoc2VuZGVyLCBwYXRoKTsKKyAgaWYgKHN0YXRlcykgeworICAgIHJlcyA9IChzdGF0ZXNbMF0gJiAoMTw8QVRTUElfU1RBVEVfQUNUSVZFKSkgIT0gMCB8fCBjaGVja0FjdGl2ZVBhcmVudChzZW5kZXIsIHBhdGgpOworICAgIGZyZWUoc3RhdGVzKTsKKyAgfSBlbHNlIHsKKyAgICByZXMgPSAwOworICB9CisKK291dDoKKyAgZGJ1c19tZXNzYWdlX3VucmVmKHJlcGx5KTsKKyAgcmV0dXJuIHJlczsKK30KKworLyogQ2hlY2sgd2hldGhlciB0aGlzIG9iamVjdCBpcyB0aGUgZm9jdXNlZCBvYmplY3QgKHdoaWNoIGlzIHdheSBmYXN0ZXIgdGhhbgorICogYnJvd3NpbmcgYWxsIG9iamVjdHMgb2YgdGhlIGRlc2t0b3ApICovCitzdGF0aWMgaW50IHJlaW5pdFRlcm0oY29uc3QgY2hhciAqc2VuZGVyLCBjb25zdCBjaGFyICpwYXRoKSB7CisgIGRidXNfdWludDMyX3QgKnN0YXRlcyA9IGdldFN0YXRlKHNlbmRlciwgcGF0aCk7CisgIGludCBhY3RpdmUgPSAwOworCisgIGlmICghc3RhdGVzKQorICAgIHJldHVybiAwOworCisgIC8qIFdoZXRoZXIgdGhpcyB3aWRnZXQgaXMgYWN0aXZlICovCisgIGFjdGl2ZSA9IChzdGF0ZXNbMF0gJiAoMTw8QVRTUElfU1RBVEVfQUNUSVZFKSkgIT0gMDsKKworICBpZiAoc3RhdGVzWzBdICYgKDE8PEFUU1BJX1NUQVRFX0ZPQ1VTRUQpKSB7CisgICAgZnJlZShzdGF0ZXMpOworICAgIGxvZ01lc3NhZ2UoTE9HX0NBVEVHT1JZKFNDUkVFTl9EUklWRVIpLAorICAgICAgICAgICAgICAgIiVzICVzIGlzIGZvY3VzZWQhIiwgc2VuZGVyLCBwYXRoKTsKKyAgICAvKiBUaGlzIHdpZGdldCBpcyBmb2N1c2VkICovCisgICAgaWYgKGFjdGl2ZSkgeworICAgICAgLyogQW5kIGl0IGlzIGFjdGl2ZSwgd2UgYXJlIGRvbmUuICAqLworICAgICAgdHJ5UmVzdGFydFRlcm0oc2VuZGVyLCBwYXRoKTsKKyAgICAgIHJldHVybiAxOworICAgIH0gZWxzZSB7CisgICAgICAvKiBDaGVjayB0aGF0IGEgcGFyZW50IGlzIGFjdGl2ZS4gICovCisgICAgICByZXR1cm4gY2hlY2tBY3RpdmVQYXJlbnQoc2VuZGVyLCBwYXRoKTsKKyAgICB9CisgIH0KKworICBmcmVlKHN0YXRlcyk7CisgIHJldHVybiAwOworfQorCisvKiBUcnkgdG8gZmluZCBhbiBhY3RpdmUgb2JqZWN0IGFtb25nIGNoaWxkcmVuIG9mIHRoZSBnaXZlbiBvYmplY3QgKi8KKworLyogV2UgbmVlZCB0byB0YWtlIGNhcmUgb2YgYm9ndXMgYXBwbGljYXRpb25zIHdoaWNoIGhhdmUgY2hpbGRyZW4gbG9vcHMsIHNvIHdlCisgKiBuZWVkIHRvIGNvbXBhcmUgbmV3bHkgZm91bmQgY2hpbGRyZW4gd2l0aCB0aGUgbGlzdCBvZiBhbmNlc3RvcnMgKi8KK3N0cnVjdCBwYXRoTGlzdCB7CisgIGNvbnN0IGNoYXIgKnNlbmRlcjsKKyAgY29uc3QgY2hhciAqcGF0aDsKKyAgc3RydWN0IHBhdGhMaXN0ICpwcmV2OworICBpbnQgbG9vcDsKK307CitzdGF0aWMgaW50IGZpbmRUZXJtKGNvbnN0IGNoYXIgKnNlbmRlciwgY29uc3QgY2hhciAqcGF0aCwgaW50IGFjdGl2ZSwgaW50IGRlcHRoLCBzdHJ1Y3QgcGF0aExpc3QgKmxpc3QpOworc3RhdGljIGludCByZWN1cnNlRmluZFRlcm0oY29uc3QgY2hhciAqc2VuZGVyLCBjb25zdCBjaGFyICpwYXRoLCBpbnQgYWN0aXZlLCBpbnQgZGVwdGgsIHN0cnVjdCBwYXRoTGlzdCAqbGlzdCkgeworICBEQnVzTWVzc2FnZSAqbXNnLCAqcmVwbHk7CisgIERCdXNNZXNzYWdlSXRlciBpdGVyLCBpdGVyX2FycmF5LCBpdGVyX3N0cnVjdDsKKyAgaW50IHJlcyA9IDA7CisKKyAgbXNnID0gbmV3X21ldGhvZF9jYWxsKHNlbmRlciwgcGF0aCwgU1BJMl9EQlVTX0lOVEVSRkFDRV9BQ0NFU1NJQkxFLCAiR2V0Q2hpbGRyZW4iKTsKKyAgaWYgKCFtc2cpCisgICAgcmV0dXJuIDA7CisgIHJlcGx5ID0gc2VuZF93aXRoX3JlcGx5X2FuZF9ibG9jayhidXMsIG1zZywgMTAwMCwgImdldHRpbmcgYWN0aXZlIG9iamVjdCIpOworICBpZiAoIXJlcGx5KQorICAgIHJldHVybiAwOworCisgIGlmIChzdHJjbXAgKGRidXNfbWVzc2FnZV9nZXRfc2lnbmF0dXJlIChyZXBseSksICJhKHNvKSIpICE9IDApCisgIHsKKyAgICBsb2dNZXNzYWdlKExPR19DQVRFR09SWShTQ1JFRU5fRFJJVkVSKSwKKyAgICAgICAgICAgICAgICJ1bmV4cGVjdGVkIHNpZ25hdHVyZSAlcyB3aGlsZSBnZXR0aW5nIGFjdGl2ZSBvYmplY3QiLCBkYnVzX21lc3NhZ2VfZ2V0X3NpZ25hdHVyZShyZXBseSkpOworICAgIGdvdG8gb3V0OworICB9CisgIGRidXNfbWVzc2FnZV9pdGVyX2luaXQocmVwbHksICZpdGVyKTsKKyAgZGJ1c19tZXNzYWdlX2l0ZXJfcmVjdXJzZSAoJml0ZXIsICZpdGVyX2FycmF5KTsKKyAgd2hpbGUgKGRidXNfbWVzc2FnZV9pdGVyX2dldF9hcmdfdHlwZSAoJml0ZXJfYXJyYXkpICE9IERCVVNfVFlQRV9JTlZBTElEKQorICB7CisgICAgY29uc3QgY2hhciAqY2hpbGRzZW5kZXIsICpjaGlsZHBhdGg7CisgICAgc3RydWN0IHBhdGhMaXN0ICpjdXI7CisKKyAgICBkYnVzX21lc3NhZ2VfaXRlcl9yZWN1cnNlICgmaXRlcl9hcnJheSwgJml0ZXJfc3RydWN0KTsKKyAgICBkYnVzX21lc3NhZ2VfaXRlcl9nZXRfYmFzaWMgKCZpdGVyX3N0cnVjdCwgJmNoaWxkc2VuZGVyKTsKKyAgICBkYnVzX21lc3NhZ2VfaXRlcl9uZXh0ICgmaXRlcl9zdHJ1Y3QpOworICAgIGRidXNfbWVzc2FnZV9pdGVyX2dldF9iYXNpYyAoJml0ZXJfc3RydWN0LCAmY2hpbGRwYXRoKTsKKworICAgIC8qIE1ha2Ugc3VyZSB0aGF0IHRoZSBjaGlsZCBpcyBub3QgdGhlIHNhbWUgYXMgYW4gYW5jZXN0b3IsIHRvIGF2b2lkCisgICAgICogcmVjdXJzaW5nIGluZGVmaW5pdGVseS4gICovCisgICAgZm9yIChjdXIgPSBsaXN0OyBjdXI7IGN1ciA9IGN1ci0+cHJldikKKyAgICAgIGlmICghc3RyY21wKGNoaWxkc2VuZGVyLCBjdXItPnNlbmRlcikgJiYgIXN0cmNtcChjaGlsZHBhdGgsIGN1ci0+cGF0aCkpCisgICAgICB7CisJLyogTG9vcCBkZXRlY3RlZCwgYXZvaWQgY29udGludWluZyBsb29raW5nIGF0IHRoaXMgcGFydCBvZiB0aGUgdHJlZQorCXdoaWNoIGlzIG5vdCBhY3R1YWxseSBhIHRyZWUhICovCisJY3VyLT5sb29wID0gMTsKKwlicmVhazsKKyAgICAgIH0KKyAgICBpZiAoISBjdXIpCisgICAgeworICAgICAgc3RydWN0IHBhdGhMaXN0IG1lID0geworCS5zZW5kZXIgPSBzZW5kZXIsCisJLnBhdGggPSBwYXRoLAorCS5wcmV2ID0gbGlzdCwKKyAgICAgIH07CisgICAgICBpZiAoZmluZFRlcm0oY2hpbGRzZW5kZXIsIGNoaWxkcGF0aCwgYWN0aXZlLCBkZXB0aCwgJm1lKSkKKyAgICAgIHsKKwlyZXMgPSAxOworCWdvdG8gb3V0OworICAgICAgfQorICAgICAgaWYgKG1lLmxvb3ApIHsKKyAgICAgICAgLyogVGhlcmUgaXMgYSBsb29wIHVwIHRvIHVzLiAgQXZvaWQgY29udGludWluZyBsb29raW5nIGhlcmUgd2hpY2ggbWF5CisgICAgICAgICAqIGVudGFpbCBhbiBleHBvbmVudGlhbCBudW1iZXIgb2YgbG9va3Vwcy4gKi8KKwlicmVhazsKKyAgICAgIH0KKyAgICB9CisKKyAgICBkYnVzX21lc3NhZ2VfaXRlcl9uZXh0ICgmaXRlcl9hcnJheSk7CisgIH0KKworb3V0OgorICBkYnVzX21lc3NhZ2VfdW5yZWYocmVwbHkpOworICByZXR1cm4gcmVzOworfQorCisvKiBUZXN0IHdoZXRoZXIgdGhpcyBvYmplY3QgaXMgYWN0aXZlLCBhbmQgaWYgbm90IHJlY3Vyc2UgaW4gaXRzIGNoaWxkcmVuICovCitzdGF0aWMgaW50IGZpbmRUZXJtKGNvbnN0IGNoYXIgKnNlbmRlciwgY29uc3QgY2hhciAqcGF0aCwgaW50IGFjdGl2ZSwgaW50IGRlcHRoLCBzdHJ1Y3QgcGF0aExpc3QgKmxpc3QpIHsKKyAgZGJ1c191aW50MzJfdCAqc3RhdGVzID0gZ2V0U3RhdGUoc2VuZGVyLCBwYXRoKTsKKworICBpZiAoIXN0YXRlcykKKyAgICByZXR1cm4gMDsKKworICBpZiAoc3RhdGVzWzBdICYgKDE8PEFUU1BJX1NUQVRFX0FDVElWRSkpCisgICAgLyogVGhpcyBhcHBsaWNhdGlvbiBpcyBhY3RpdmUgKi8KKyAgICBhY3RpdmUgPSAxOworCisgIGlmIChzdGF0ZXNbMF0gJiAoMTw8QVRTUElfU1RBVEVfRk9DVVNFRCkgJiYgYWN0aXZlKQorICB7CisgICAgLyogQW5kIHRoaXMgd2lkZ2V0IGlzIGZvY3VzZWQgKi8KKyAgICBsb2dNZXNzYWdlKExPR19DQVRFR09SWShTQ1JFRU5fRFJJVkVSKSwKKyAgICAgICAgICAgICAgICIlcyAlcyBpcyBmb2N1c2VkISIsIHNlbmRlciwgcGF0aCk7CisgICAgZnJlZShzdGF0ZXMpOworICAgIHRyeVJlc3RhcnRUZXJtKHNlbmRlciwgcGF0aCk7CisgICAgcmV0dXJuIDE7CisgIH0KKworICBmcmVlKHN0YXRlcyk7CisgIHJldHVybiByZWN1cnNlRmluZFRlcm0oc2VuZGVyLCBwYXRoLCBhY3RpdmUsIGRlcHRoKzEsIGxpc3QpOworfQorCisvKiBGaW5kIG91dCBjdXJyZW50bHkgZm9jdXNlZCB0ZXJtaW5hbCwgc3RhcnRpbmcgZnJvbSByZWdpc3RyeSAqLworc3RhdGljIHZvaWQgaW5pdFRlcm0odm9pZCkgeworICByZWN1cnNlRmluZFRlcm0oU1BJMl9EQlVTX0lOVEVSRkFDRV9SRUcsIFNQSTJfREJVU19QQVRIX1JPT1QsIDAsIDAsIE5VTEwpOworfQorCisvKiBIYW5kbGUgaW5jb21pbmcgZXZlbnRzICovCitzdGF0aWMgdm9pZCBBdFNwaTJIYW5kbGVFdmVudChjb25zdCBjaGFyICppbnRlcmZhY2UsIERCdXNNZXNzYWdlICptZXNzYWdlKQoreworICBEQnVzTWVzc2FnZUl0ZXIgaXRlciwgaXRlcl92YXJpYW50OworICBjb25zdCBjaGFyICpkZXRhaWw7CisgIGRidXNfaW50MzJfdCBkZXRhaWwxLCBkZXRhaWwyOworICBjb25zdCBjaGFyICptZW1iZXIgPSBkYnVzX21lc3NhZ2VfZ2V0X21lbWJlcihtZXNzYWdlKTsKKyAgY29uc3QgY2hhciAqc2VuZGVyID0gZGJ1c19tZXNzYWdlX2dldF9zZW5kZXIobWVzc2FnZSk7CisgIGNvbnN0IGNoYXIgKnBhdGggPSBkYnVzX21lc3NhZ2VfZ2V0X3BhdGgobWVzc2FnZSk7CisgIGludCBTdGF0ZUNoYW5nZWRfZm9jdXNlZDsKKworICBkYnVzX21lc3NhZ2VfaXRlcl9pbml0KG1lc3NhZ2UsICZpdGVyKTsKKworICBpZiAoZGJ1c19tZXNzYWdlX2l0ZXJfZ2V0X2FyZ190eXBlKCZpdGVyKSA9PSBEQlVTX1RZUEVfU1RSVUNUKSB7CisgICAgLyogc2tpcCBzdHJ1Y3QgKi8KKyAgICBkYnVzX21lc3NhZ2VfaXRlcl9uZXh0KCZpdGVyKTsKKyAgfQorCisgIGlmIChkYnVzX21lc3NhZ2VfaXRlcl9nZXRfYXJnX3R5cGUoJml0ZXIpICE9IERCVVNfVFlQRV9TVFJJTkcpIHsKKyAgICBsb2dNZXNzYWdlKExPR19DQVRFR09SWShTQ1JFRU5fRFJJVkVSKSwKKyAgICAgICAgICAgICAgICJtZXNzYWdlIGRldGFpbCBub3QgYSBzdHJpbmcgYnV0ICclYyciLCBkYnVzX21lc3NhZ2VfaXRlcl9nZXRfYXJnX3R5cGUoJml0ZXIpKTsKKyAgICByZXR1cm47CisgIH0KKyAgZGJ1c19tZXNzYWdlX2l0ZXJfZ2V0X2Jhc2ljKCZpdGVyLCAmZGV0YWlsKTsKKworICBkYnVzX21lc3NhZ2VfaXRlcl9uZXh0KCZpdGVyKTsKKyAgaWYgKGRidXNfbWVzc2FnZV9pdGVyX2dldF9hcmdfdHlwZSgmaXRlcikgIT0gREJVU19UWVBFX0lOVDMyKSB7CisgICAgbG9nTWVzc2FnZShMT0dfQ0FURUdPUlkoU0NSRUVOX0RSSVZFUiksCisgICAgICAgICAgICAgICAibWVzc2FnZSBkZXRhaWwxIG5vdCBhbiBpbnQzMiBidXQgJyVjJyIsIGRidXNfbWVzc2FnZV9pdGVyX2dldF9hcmdfdHlwZSgmaXRlcikpOworICAgIHJldHVybjsKKyAgfQorICBkYnVzX21lc3NhZ2VfaXRlcl9nZXRfYmFzaWMoJml0ZXIsICZkZXRhaWwxKTsKKworICBkYnVzX21lc3NhZ2VfaXRlcl9uZXh0KCZpdGVyKTsKKyAgaWYgKGRidXNfbWVzc2FnZV9pdGVyX2dldF9hcmdfdHlwZSgmaXRlcikgIT0gREJVU19UWVBFX0lOVDMyKSB7CisgICAgbG9nTWVzc2FnZShMT0dfQ0FURUdPUlkoU0NSRUVOX0RSSVZFUiksCisgICAgICAgICAgICAgICAibWVzc2FnZSBkZXRhaWwyIG5vdCBhbiBpbnQzMiBidXQgJyVjJyIsIGRidXNfbWVzc2FnZV9pdGVyX2dldF9hcmdfdHlwZSgmaXRlcikpOworICAgIHJldHVybjsKKyAgfQorICBkYnVzX21lc3NhZ2VfaXRlcl9nZXRfYmFzaWMoJml0ZXIsICZkZXRhaWwyKTsKKworICBkYnVzX21lc3NhZ2VfaXRlcl9uZXh0KCZpdGVyKTsKKyAgaWYgKGRidXNfbWVzc2FnZV9pdGVyX2dldF9hcmdfdHlwZSgmaXRlcikgIT0gREJVU19UWVBFX1ZBUklBTlQpIHsKKyAgICBsb2dNZXNzYWdlKExPR19DQVRFR09SWShTQ1JFRU5fRFJJVkVSKSwKKyAgICAgICAgICAgICAgICJtZXNzYWdlIGRldGFpbDIgbm90IGEgdmFyaWFudCBidXQgJyVjJyIsIGRidXNfbWVzc2FnZV9pdGVyX2dldF9hcmdfdHlwZSgmaXRlcikpOworICAgIHJldHVybjsKKyAgfQorICBkYnVzX21lc3NhZ2VfaXRlcl9yZWN1cnNlKCZpdGVyLCAmaXRlcl92YXJpYW50KTsKKworICBTdGF0ZUNoYW5nZWRfZm9jdXNlZCA9CisgICAgICAgIXN0cmNtcChpbnRlcmZhY2UsICJPYmplY3QiKQorICAgICYmICFzdHJjbXAobWVtYmVyLCAiU3RhdGVDaGFuZ2VkIikKKyAgICAmJiAhc3RyY21wKGRldGFpbCwgImZvY3VzZWQiKTsKKworICBpZiAoU3RhdGVDaGFuZ2VkX2ZvY3VzZWQgJiYgIWRldGFpbDEpIHsKKyAgICBpZiAoY3VyU2VuZGVyICYmICFzdHJjbXAoc2VuZGVyLCBjdXJTZW5kZXIpICYmICFzdHJjbXAocGF0aCwgY3VyUGF0aCkpCisgICAgICBmaW5pVGVybSgpOworICB9IGVsc2UgaWYgKCFzdHJjbXAoaW50ZXJmYWNlLCJGb2N1cyIpIHx8IChTdGF0ZUNoYW5nZWRfZm9jdXNlZCAmJiBkZXRhaWwxKSkgeworICAgIHRyeVJlc3RhcnRUZXJtKHNlbmRlciwgcGF0aCk7CisgIH0gZWxzZSBpZiAoIXN0cmNtcChpbnRlcmZhY2UsICJPYmplY3QiKSAmJiAhc3RyY21wKG1lbWJlciwgIlRleHRDYXJldE1vdmVkIikpIHsKKyAgICBpZiAoIWN1clNlbmRlciB8fCBzdHJjbXAoc2VuZGVyLCBjdXJTZW5kZXIpIHx8IHN0cmNtcChwYXRoLCBjdXJQYXRoKSkgcmV0dXJuOworICAgIGxvZ01lc3NhZ2UoTE9HX0NBVEVHT1JZKFNDUkVFTl9EUklWRVIpLAorICAgICAgICAgICAgICAgImNhcmV0IG1vdmUgdG8gJWQiLCBkZXRhaWwxKTsKKyAgICBjYXJldFBvc2l0aW9uKGRldGFpbDEpOworICB9IGVsc2UgaWYgKCFzdHJjbXAoaW50ZXJmYWNlLCAiT2JqZWN0IikgJiYgIXN0cmNtcChtZW1iZXIsICJUZXh0Q2hhbmdlZCIpICYmICFzdHJjbXAoZGV0YWlsLCAiZGVsZXRlIikpIHsKKyAgICBsb25nIHgseSx0b0RlbGV0ZSA9IGRldGFpbDI7CisgICAgY29uc3QgY2hhciAqZGVsZXRlZDsKKyAgICBsb25nIGxlbmd0aCA9IDAsIHRvQ29weTsKKyAgICBsb25nIGRvd25UbzsgLyogbGluZSB0aGF0IHdpbGwgcHJvdmlkZSB3aGF0IHdpbGwgZm9sbG93IHggKi8KKyAgICBpZiAoIWN1clNlbmRlciB8fCBzdHJjbXAoc2VuZGVyLCBjdXJTZW5kZXIpIHx8IHN0cmNtcChwYXRoLCBjdXJQYXRoKSkgcmV0dXJuOworICAgIGxvZ01lc3NhZ2UoTE9HX0NBVEVHT1JZKFNDUkVFTl9EUklWRVIpLAorICAgICAgICAgICAgICAgImRlbGV0ZSAlZCBmcm9tICVkIixkZXRhaWwyLGRldGFpbDEpOworICAgIGlmIChkZXRhaWwxIDwgMCkgeworICAgICAgbG9nTWVzc2FnZShMT0dfRVJSLCJkZWxldGluZyAlbGQgJWQgYmVmb3JlIGJlZ2lubmluZyBvZiB0ZXh0ISIsIHRvRGVsZXRlLCBkZXRhaWwxKTsKKyAgICAgIHRvRGVsZXRlIC09IC1kZXRhaWwxOworICAgICAgZGV0YWlsMSA9IDA7CisgICAgfQorICAgIGlmICh0b0RlbGV0ZSA8PSAwKSB7CisgICAgICByZXR1cm47CisgICAgfQorICAgIGZpbmRQb3NpdGlvbihkZXRhaWwxLCZ4LCZ5KTsKKyAgICBpZiAoZGJ1c19tZXNzYWdlX2l0ZXJfZ2V0X2FyZ190eXBlKCZpdGVyX3ZhcmlhbnQpICE9IERCVVNfVFlQRV9TVFJJTkcpIHsKKyAgICAgIGxvZ01lc3NhZ2UoTE9HX0NBVEVHT1JZKFNDUkVFTl9EUklWRVIpLAorICAgICAgICAgICAgICAgICAiZXJnbCwgbm90IHN0cmluZyBidXQgJyVjJyIsIGRidXNfbWVzc2FnZV9pdGVyX2dldF9hcmdfdHlwZSgmaXRlcl92YXJpYW50KSk7CisgICAgICByZXR1cm47CisgICAgfQorICAgIGRidXNfbWVzc2FnZV9pdGVyX2dldF9iYXNpYygmaXRlcl92YXJpYW50LCAmZGVsZXRlZCk7CisgICAgbG9nTWVzc2FnZShMT0dfQ0FURUdPUlkoU0NSRUVOX0RSSVZFUiksCisgICAgICAgICAgICAgICAiJyVzJyIsZGVsZXRlZCk7CisgICAgZG93blRvID0geTsKKyAgICBpZiAoZG93blRvIDwgY3VyTnVtUm93cykKKyAgICAgIGxlbmd0aCA9IGN1clJvd0xlbmd0aHNbZG93blRvXTsKKyAgICB3aGlsZSAoeCt0b0RlbGV0ZSA+PSBsZW5ndGgpIHsKKyAgICAgIGRvd25UbysrOworICAgICAgaWYgKGRvd25UbyA8PSBjdXJOdW1Sb3dzIC0gMSkKKwlsZW5ndGggKz0gY3VyUm93TGVuZ3Roc1tkb3duVG9dOworICAgICAgZWxzZSB7CisJLyogaW1hZ2luYXJ5IGV4dHJhIGxpbmUgZG9lc24ndCBwcm92aWRlIG1vcmUgbGVuZ3RoLCBhbmQgc2hvdWxkbid0IG5lZWQgdG8gISAqLworCWlmICh4K3RvRGVsZXRlID4gbGVuZ3RoKSB7CisJICBsb2dNZXNzYWdlKExPR19FUlIsImRlbGV0aW5nICVsZCAlbGQgcGFzdCBlbmQgb2YgdGV4dCAhIiwgdG9EZWxldGUsIHgrdG9EZWxldGUgLSBsZW5ndGgpOworCSAgLyogZGlzY2FyZGluZyAqLworCSAgaWYgKHggPiBsZW5ndGgpCisJICAgIHggPSBsZW5ndGg7CisJICB0b0RlbGV0ZSA9IGxlbmd0aCAtIHg7CisJfQorCWJyZWFrOyAvKiBkZWxldGluZyB1cCB0byBlbmQgKi8KKyAgICAgIH0KKyAgICB9CisgICAgaWYgKHRvRGVsZXRlIDw9IDApCisgICAgICByZXR1cm47CisgICAgaWYgKGxlbmd0aC10b0RlbGV0ZT4wKSB7CisgICAgICAvKiBzdGlsbCBzb21ldGhpbmcgb24gbGluZSB5ICovCisgICAgICBpZiAoeSE9ZG93blRvKSB7CisJY3VyUm93TGVuZ3Roc1t5XSA9IGxlbmd0aC10b0RlbGV0ZTsKKwljdXJSb3dzW3ldPXJlYWxsb2MoY3VyUm93c1t5XSxjdXJSb3dMZW5ndGhzW3ldKnNpemVvZigqY3VyUm93c1t5XSkpOworICAgICAgfQorICAgICAgaWYgKCh0b0NvcHkgPSBsZW5ndGgtdG9EZWxldGUteCkpCisJbWVtbW92ZShjdXJSb3dzW3ldK3gsY3VyUm93c1tkb3duVG9dK2N1clJvd0xlbmd0aHNbZG93blRvXS10b0NvcHksdG9Db3B5KnNpemVvZigqY3VyUm93c1tkb3duVG9dKSk7CisgICAgICBpZiAoeT09ZG93blRvKSB7CisJY3VyUm93TGVuZ3Roc1t5XSA9IGxlbmd0aC10b0RlbGV0ZTsKKwljdXJSb3dzW3ldPXJlYWxsb2MoY3VyUm93c1t5XSxjdXJSb3dMZW5ndGhzW3ldKnNpemVvZigqY3VyUm93c1t5XSkpOworICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAvKiBraWxscyB0aGlzIGxpbmUgYXMgd2VsbCAhICovCisgICAgICB5LS07CisgICAgfQorICAgIGlmIChkb3duVG8+PWN1ck51bVJvd3MpCisgICAgICAvKiBpbWFnaW5hcnkgZXh0cmEgbGluZXMgZG9uJ3QgbmVlZCB0byBiZSBkZWxldGVkICovCisgICAgICBkb3duVG89Y3VyTnVtUm93cy0xOworICAgIGlmIChkb3duVG8+eSkgeworICAgICAgZGVsUm93cyh5KzEsZG93blRvLXkpOworICAgIH0KKyAgICBjYXJldFBvc2l0aW9uKGN1ckNhcmV0KTsKKyAgfSBlbHNlIGlmICghc3RyY21wKGludGVyZmFjZSwgIk9iamVjdCIpICYmICFzdHJjbXAobWVtYmVyLCAiVGV4dENoYW5nZWQiKSAmJiAhc3RyY21wKGRldGFpbCwgImluc2VydCIpKSB7CisgICAgbG9uZyBsZW49ZGV0YWlsMixzZW1pbGVuLHgseTsKKyAgICBjb25zdCBjaGFyICphZGRlZDsKKyAgICBjb25zdCBjaGFyICphZGRpbmcsKmM7CisgICAgaWYgKCFjdXJTZW5kZXIgfHwgc3RyY21wKHNlbmRlciwgY3VyU2VuZGVyKSB8fCBzdHJjbXAocGF0aCwgY3VyUGF0aCkpIHJldHVybjsKKyAgICBsb2dNZXNzYWdlKExPR19DQVRFR09SWShTQ1JFRU5fRFJJVkVSKSwKKyAgICAgICAgICAgICAgICJpbnNlcnQgJWQgZnJvbSAlZCIsZGV0YWlsMixkZXRhaWwxKTsKKyAgICBmaW5kUG9zaXRpb24oZGV0YWlsMSwmeCwmeSk7CisgICAgaWYgKGRidXNfbWVzc2FnZV9pdGVyX2dldF9hcmdfdHlwZSgmaXRlcl92YXJpYW50KSAhPSBEQlVTX1RZUEVfU1RSSU5HKSB7CisgICAgICBsb2dNZXNzYWdlKExPR19DQVRFR09SWShTQ1JFRU5fRFJJVkVSKSwKKyAgICAgICAgICAgICAgICAgImVyZ2wsIG5vdCBzdHJpbmcgYnV0ICclYyciLCBkYnVzX21lc3NhZ2VfaXRlcl9nZXRfYXJnX3R5cGUoJml0ZXJfdmFyaWFudCkpOworICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAoZGV0YWlsMSA8IDApIHsKKyAgICAgIGxvZ01lc3NhZ2UoTE9HX0VSUiwiYWRkaW5nICVsZCAlZCBiZWZvcmUgYmVnaW5uaW5nIG9mIHRleHQhIiwgbGVuLCBkZXRhaWwxKTsKKyAgICAgIGRldGFpbDEgPSAwOworICAgIH0KKyAgICBkYnVzX21lc3NhZ2VfaXRlcl9nZXRfYmFzaWMoJml0ZXJfdmFyaWFudCwgJmFkZGVkKTsKKyAgICBsb2dNZXNzYWdlKExPR19DQVRFR09SWShTQ1JFRU5fRFJJVkVSKSwKKyAgICAgICAgICAgICAgICInJXMnIixhZGRlZCk7CisgICAgYWRkaW5nID0gYyA9IGFkZGVkOworICAgIGlmICh5IDwgY3VyTnVtUm93cyAmJiB4ID4gY3VyUm93TGVuZ3Roc1t5XSkgeworICAgICAgbG9nTWVzc2FnZShMT0dfRVJSLCJhZGRpbmcgJWxkICVsZCBwYXN0IGVuZCBvZiB0ZXh0ISIsIGxlbiwgeCAtIGN1clJvd0xlbmd0aHNbeV0pOworICAgICAgeCA9IGN1clJvd0xlbmd0aHNbeV07CisgICAgfQorICAgIGlmICh4ICYmIChjID0gc3RyY2hyKGFkZGluZywnXG4nKSkpIHsKKyAgICAgIC8qIHNwbGl0dGluZyBsaW5lICovCisgICAgICBhZGRSb3dzKHksMSk7CisgICAgICBzZW1pbGVuPW15X21ic2xlbihhZGRpbmcsYysxLWFkZGluZyk7CisgICAgICBjdXJSb3dMZW5ndGhzW3ldPXgrc2VtaWxlbjsKKyAgICAgIGlmICh4K3NlbWlsZW4tMT5jdXJOdW1Db2xzKQorCWN1ck51bUNvbHM9eCtzZW1pbGVuLTE7CisKKyAgICAgIC8qIGNvcHkgYmVnaW5uaW5nICovCisgICAgICBjdXJSb3dzW3ldPW1hbGxvYyhjdXJSb3dMZW5ndGhzW3ldKnNpemVvZigqY3VyUm93c1t5XSkpOworICAgICAgbWVtY3B5KGN1clJvd3NbeV0sY3VyUm93c1t5KzFdLHgqc2l6ZW9mKCpjdXJSb3dzW3ldKSk7CisgICAgICAvKiBhZGQgKi8KKyAgICAgIG15X21ic3J0b3djcyhjdXJSb3dzW3ldK3gsJmFkZGluZyxzZW1pbGVuLE5VTEwpOworICAgICAgbGVuLT1zZW1pbGVuOworICAgICAgYWRkaW5nPWMrMTsKKyAgICAgIC8qIHNoaWZ0IGVuZCAqLworICAgICAgY3VyUm93TGVuZ3Roc1t5KzFdLT14OworICAgICAgbWVtbW92ZShjdXJSb3dzW3krMV0sY3VyUm93c1t5KzFdK3gsY3VyUm93TGVuZ3Roc1t5KzFdKnNpemVvZigqY3VyUm93c1t5KzFdKSk7CisgICAgICB4PTA7CisgICAgICB5Kys7CisgICAgfQorICAgIHdoaWxlICgoYyA9IHN0cmNocihhZGRpbmcsJ1xuJykpKSB7CisgICAgICAvKiBhZGRpbmcgbGluZXMgKi8KKyAgICAgIGFkZFJvd3MoeSwxKTsKKyAgICAgIHNlbWlsZW49bXlfbWJzbGVuKGFkZGluZyxjKzEtYWRkaW5nKTsKKyAgICAgIGN1clJvd0xlbmd0aHNbeV09c2VtaWxlbjsKKyAgICAgIGlmIChzZW1pbGVuLTE+Y3VyTnVtQ29scykKKwljdXJOdW1Db2xzPXNlbWlsZW4tMTsKKyAgICAgIGN1clJvd3NbeV09bWFsbG9jKHNlbWlsZW4qc2l6ZW9mKCpjdXJSb3dzW3ldKSk7CisgICAgICBteV9tYnNydG93Y3MoY3VyUm93c1t5XSwmYWRkaW5nLHNlbWlsZW4sTlVMTCk7CisgICAgICBsZW4tPXNlbWlsZW47CisgICAgICBhZGRpbmc9YysxOworICAgICAgeSsrOworICAgIH0KKyAgICBpZiAobGVuKSB7CisgICAgICAvKiBzdGlsbCBsZW5ndGggdG8gYWRkIG9uIHRoZSBsaW5lIGZvbGxvd2luZyBpdCAqLworICAgICAgaWYgKHk9PWN1ck51bVJvd3MpIHsKKwkvKiBJdCB3b24ndCBpbnNlcnQgZW5kaW5nIFxuIHlldCAqLworCWFkZFJvd3MoeSwxKTsKKwljdXJSb3dzW3ldPU5VTEw7CisJY3VyUm93TGVuZ3Roc1t5XT0wOworICAgICAgfQorICAgICAgY3VyUm93TGVuZ3Roc1t5XSArPSBsZW47CisgICAgICBjdXJSb3dzW3ldPXJlYWxsb2MoY3VyUm93c1t5XSxjdXJSb3dMZW5ndGhzW3ldKnNpemVvZigqY3VyUm93c1t5XSkpOworICAgICAgbWVtbW92ZShjdXJSb3dzW3ldK3grbGVuLGN1clJvd3NbeV0reCwoY3VyUm93TGVuZ3Roc1t5XS0oeCtsZW4pKSpzaXplb2YoKmN1clJvd3NbeV0pKTsKKyAgICAgIG15X21ic3J0b3djcyhjdXJSb3dzW3ldK3gsJmFkZGluZyxsZW4sTlVMTCk7CisgICAgICBpZiAoY3VyUm93TGVuZ3Roc1t5XS0oY3VyUm93c1t5XVtjdXJSb3dMZW5ndGhzW3ldLTFdPT0nXG4nKT5jdXJOdW1Db2xzKQorCWN1ck51bUNvbHM9Y3VyUm93TGVuZ3Roc1t5XS0oY3VyUm93c1t5XVtjdXJSb3dMZW5ndGhzW3ldLTFdPT0nXG4nKTsKKyAgICB9CisgICAgY2FyZXRQb3NpdGlvbihjdXJDYXJldCk7CisgIH0gZWxzZSB7CisgICAgcmV0dXJuOworICB9CisgIHVwZGF0ZWQgPSAxOworfQorCitzdGF0aWMgaW50IGNsb3NlWCA9IDE7CisKK3N0YXRpYyB2b2lkCitvblNjcmVlbkRyaXZlckZhaWx1cmUgKGNvbnN0IGNoYXIgKmNhdXNlKSB7CisgIGxvZ01lc3NhZ2UoTE9HX0VSUiwgInNjcmVlbiBkcml2ZXIgZmFpbHVyZTogJXMiLCBjYXVzZSk7CisgIGNsb3NlWCA9IDE7CisgIGJybHR0eUludGVycnVwdChXQUlUX1NUT1ApOworfQorCisjaWZkZWYgSEFWRV9QS0dfWDExCisvKiBJbnRlZ3JhdGlvbiBvZiBYMTEgZXZlbnRzIHdpdGggYnJsdHR5IG1vbml0b3JzICovCitzdGF0aWMgQXN5bmNIYW5kbGUgYTJYV2F0Y2g7CitzdGF0aWMgUmVwb3J0TGlzdGVuZXJJbnN0YW5jZSAqY29yZVNlbFVwZGF0ZWRMaXN0ZW5lcjsKK3N0YXRpYyBpbnQgc2V0dGluZ0NsaXBib2FyZDsKKworLyogQ2FsbGVkIHdoZW4gWCBzZWxlY3Rpb24gZ290IHVwZGF0ZWQsIHVwZGF0ZSB0aGUgQlJMVFRZIGNsaXBib2FyZCBjb250ZW50ICovCit2b2lkIGEyWFNlbFVwZGF0ZWQoY29uc3QgY2hhciAqZGF0YSwgdW5zaWduZWQgbG9uZyBzaXplKSB7CisgIGlmICghZGF0YSkgcmV0dXJuOworCisgIGNoYXIgY29udGVudFtzaXplICsgMV07CisgIG1lbWNweShjb250ZW50LCBkYXRhLCBzaXplKTsKKyAgY29udGVudFtzaXplXSA9IDA7CisKKyAgbG9nTWVzc2FnZShMT0dfQ0FURUdPUlkoU0NSRUVOX0RSSVZFUiksICJYIFNlbGVjdGlvbiBnb3QgJyVzJyIsIGNvbnRlbnQpOworICBzZXR0aW5nQ2xpcGJvYXJkID0gMTsKKyAgc2V0TWFpbkNsaXBib2FyZENvbnRlbnQoY29udGVudCk7CisgIHNldHRpbmdDbGlwYm9hcmQgPSAwOworfQorCisjaWZkZWYgSEFWRV9QVEhSRUFEX0FURk9SSworLyogRHJvcCBYIGNvbm5lY3Rpb24gd2l0aG91dCBzaHV0dGluZyBkb3duIGl0cyByZXNvdXJjZXMuIE5lZWRlZCBhdCBmb3JrLiAqLwordm9pZCBhMkRyb3BYKHZvaWQpIHsKKyAgY2xvc2UoWENvbm5lY3Rpb25OdW1iZXIoZHB5KSk7CisgIGRweSA9IE5VTEw7Cit9CisjZW5kaWYgLyogSEFWRV9QVEhSRUFEX0FURk9SSyAqLworCisvKiBDYWxsZWQgd2hlbiBYIGV2ZW50cyBhcmUgYXZhaWxhYmxlLCBwcm9jZXNzIHRoZW0gKi8KK0FTWU5DX01PTklUT1JfQ0FMTEJBQ0soYTJQcm9jZXNzWCkgeworICBYRXZlbnQgZXY7CisKKyAgaWYgKGNsb3NlWCkgeworICAgIGFzeW5jQ2FuY2VsUmVxdWVzdChhMlhXYXRjaCk7CisgICAgYTJYV2F0Y2ggPSBOVUxMOworICAgIHJldHVybiAxOworICB9CisKKyAgd2hpbGUgKFhQZW5kaW5nKGRweSkpIHsKKyAgICBYTmV4dEV2ZW50KGRweSwgJmV2KTsKKyAgICBYU2VsUHJvY2VzcyhkcHksICZ4c2VsRGF0YSwgJmV2LCBjbGlwYm9hcmRDb250ZW50LCBhMlhTZWxVcGRhdGVkKTsKKyAgfQorCisgIHJldHVybiAxOworfQorCisvKiBDYWxsZWQgd2hlbiBCUkxUVFkgc2VsZWN0aW9uIGdvdCB1cGRhdGVkLCB1cGRhdGUgdGhlIFggY2xpcGJvYXJkIGNvbnRlbnQgKi8KK1JFUE9SVF9MSVNURU5FUihhMkNvcmVTZWxVcGRhdGVkKSB7CisgIGNvbnN0IEFwaVBhcmFtZXRlclVwZGF0ZWRSZXBvcnQgKnJlcG9ydCA9IHBhcmFtZXRlcnMtPnJlcG9ydERhdGE7CisgIGlmIChyZXBvcnQtPnBhcmFtZXRlciAhPSBCUkxBUElfUEFSQU1fQ0xJUEJPQVJEX0NPTlRFTlQpIHJldHVybjsKKyAgaWYgKHNldHRpbmdDbGlwYm9hcmQpIHJldHVybjsKKyAgY2hhciAqbmV3Q29udGVudCA9IGdldE1haW5DbGlwYm9hcmRDb250ZW50KCk7CisKKyAgaWYgKG5ld0NvbnRlbnQpIHsKKyAgICBpZiAoIWNsaXBib2FyZENvbnRlbnQgfHwgKHN0cmNtcChjbGlwYm9hcmRDb250ZW50LCBuZXdDb250ZW50KSAhPSAwKSkgeworICAgICAgZnJlZShjbGlwYm9hcmRDb250ZW50KTsKKyAgICAgIGxvZ01lc3NhZ2UoTE9HX0NBVEVHT1JZKFNDUkVFTl9EUklWRVIpLCAiY29yZSBTZWxlY3Rpb24gZ290ICclcyciLCBuZXdDb250ZW50KTsKKyAgICAgIGNsaXBib2FyZENvbnRlbnQgPSBuZXdDb250ZW50OworICAgICAgWFNlbFNldChkcHksICZ4c2VsRGF0YSk7CisgICAgfSBlbHNlIHsKKyAgICAgIGZyZWUobmV3Q29udGVudCk7CisgICAgfQorICB9Cit9CisKK3N0YXRpYyBpbnQgRXJyb3JIYW5kbGVyKERpc3BsYXkgKmRweSwgWEVycm9yRXZlbnQgKmV2KSB7CisgIGNoYXIgYnVmZmVyWzEyOF07CisgIFhHZXRFcnJvclRleHQoZHB5LCBldi0+ZXJyb3JfY29kZSwgYnVmZmVyLCBzaXplb2YoYnVmZmVyKSk7CisgIGxvZ01lc3NhZ2UoTE9HX0VSUiwgIlggRXJyb3IgJWQsICVzIiwgZXYtPnR5cGUsIGJ1ZmZlcik7CisgIGxvZ01lc3NhZ2UoTE9HX0VSUiwgInJlc291cmNlICUjMDEwbHgsIHJlcSAldToldSIsZXYtPnJlc291cmNlaWQsZXYtPnJlcXVlc3RfY29kZSxldi0+bWlub3JfY29kZSk7CisgIG9uU2NyZWVuRHJpdmVyRmFpbHVyZSgiWCBlcnJvciIpOworICByZXR1cm4gMDsKK30KKworc3RhdGljIGludCBJT0Vycm9ySGFuZGxlcihEaXNwbGF5ICpkcHkpIHsKKyAgb25TY3JlZW5Ecml2ZXJGYWlsdXJlKCJYIEkvTyBlcnJvciIpOworICByZXR1cm4gMDsKK30KKworI2lmZGVmIEhBVkVfWFNFVElPRVJST1JFWElUSEFORExFUgorc3RhdGljIHZvaWQgSU9FcnJvckV4aXRIYW5kbGVyKERpc3BsYXkgKmRweSwgdm9pZCAqZGF0YSkgeworICBvblNjcmVlbkRyaXZlckZhaWx1cmUoIlggSS9PIEVycm9yIEV4aXQiKTsKKyAgcmV0dXJuOworfQorI2VuZGlmCisKKyNlbmRpZiAvKiBIQVZFX1BLR19YMTEgKi8KKworLyogSW50ZWdyYXRpb24gb2YgREJ1cyB3YXRjaGVzIHdpdGggYnJsdHR5IG1vbml0b3JzICovCisKK3N0cnVjdCBhMldhdGNoCit7CisgIEFzeW5jSGFuZGxlIGlucHV0X21vbml0b3I7CisgIEFzeW5jSGFuZGxlIG91dHB1dF9tb25pdG9yOworICBEQnVzV2F0Y2ggKndhdGNoOworfTsKKworaW50IGEyUHJvY2Vzc1dhdGNoKGNvbnN0IEFzeW5jTW9uaXRvckNhbGxiYWNrUGFyYW1ldGVycyAqcGFyYW1ldGVycywgaW50IGZsYWdzKQoreworICBzdHJ1Y3QgYTJXYXRjaCAqYTJXYXRjaCA9IHBhcmFtZXRlcnMtPmRhdGE7CisgIERCdXNXYXRjaCAqd2F0Y2ggPSBhMldhdGNoLT53YXRjaDsKKyAgLyogUmVhZC9Xcml0ZSBvbiBzb2NrZXQgKi8KKyAgZGJ1c193YXRjaF9oYW5kbGUod2F0Y2gsIHBhcmFtZXRlcnMtPmVycm9yP0RCVVNfV0FUQ0hfRVJST1I6ZmxhZ3MpOworICAvKiBBbmQgcHJvY2VzcyBtZXNzYWdlcyAqLworICB3aGlsZSAoZGJ1c19jb25uZWN0aW9uX2Rpc3BhdGNoKGJ1cykgIT0gREJVU19ESVNQQVRDSF9DT01QTEVURSkKKyAgICA7CisgIGlmICh1cGRhdGVkKQorICB7CisgICAgdXBkYXRlZCA9IDA7CisgICAgbWFpblNjcmVlblVwZGF0ZWQoKTsKKyAgfQorICByZXR1cm4gZGJ1c193YXRjaF9nZXRfZW5hYmxlZCh3YXRjaCk7Cit9CisKK0FTWU5DX01PTklUT1JfQ0FMTEJBQ0soYTJQcm9jZXNzSW5wdXQpIHsKKyAgaWYgKGEyUHJvY2Vzc1dhdGNoKHBhcmFtZXRlcnMsIERCVVNfV0FUQ0hfUkVBREFCTEUpKSByZXR1cm4gMTsKKworICBzdHJ1Y3QgYTJXYXRjaCAqYTJXYXRjaCA9IHBhcmFtZXRlcnMtPmRhdGE7CisgIGFzeW5jRGlzY2FyZEhhbmRsZShhMldhdGNoLT5pbnB1dF9tb25pdG9yKTsKKyAgYTJXYXRjaC0+aW5wdXRfbW9uaXRvciA9IE5VTEw7CisgIHJldHVybiAwOworfQorCitBU1lOQ19NT05JVE9SX0NBTExCQUNLKGEyUHJvY2Vzc091dHB1dCkgeworICBpZiAoYTJQcm9jZXNzV2F0Y2gocGFyYW1ldGVycywgREJVU19XQVRDSF9XUklUQUJMRSkpIHJldHVybiAxOworCisgIHN0cnVjdCBhMldhdGNoICphMldhdGNoID0gcGFyYW1ldGVycy0+ZGF0YTsKKyAgYXN5bmNEaXNjYXJkSGFuZGxlKGEyV2F0Y2gtPm91dHB1dF9tb25pdG9yKTsKKyAgYTJXYXRjaC0+b3V0cHV0X21vbml0b3IgPSBOVUxMOworICByZXR1cm4gMDsKK30KKworZGJ1c19ib29sX3QgYTJBZGRXYXRjaChEQnVzV2F0Y2ggKndhdGNoLCB2b2lkICpkYXRhKQoreworICBzdHJ1Y3QgYTJXYXRjaCAqYTJXYXRjaCA9IGNhbGxvYygxLCBzaXplb2YoKmEyV2F0Y2gpKTsKKyAgYTJXYXRjaC0+d2F0Y2ggPSB3YXRjaDsKKyAgaW50IGZsYWdzID0gZGJ1c193YXRjaF9nZXRfZmxhZ3Mod2F0Y2gpOworICBpZiAoZGJ1c193YXRjaF9nZXRfZW5hYmxlZCh3YXRjaCkpCisgIHsKKyAgICBpZiAoZmxhZ3MgJiBEQlVTX1dBVENIX1JFQURBQkxFKQorICAgICAgYXN5bmNNb25pdG9yRmlsZUlucHV0KCZhMldhdGNoLT5pbnB1dF9tb25pdG9yLCBkYnVzX3dhdGNoX2dldF91bml4X2ZkKHdhdGNoKSwgYTJQcm9jZXNzSW5wdXQsIGEyV2F0Y2gpOworICAgIGlmIChmbGFncyAmIERCVVNfV0FUQ0hfV1JJVEFCTEUpCisgICAgICBhc3luY01vbml0b3JGaWxlT3V0cHV0KCZhMldhdGNoLT5vdXRwdXRfbW9uaXRvciwgZGJ1c193YXRjaF9nZXRfdW5peF9mZCh3YXRjaCksIGEyUHJvY2Vzc091dHB1dCwgYTJXYXRjaCk7CisgIH0KKyAgZGJ1c193YXRjaF9zZXRfZGF0YSh3YXRjaCwgYTJXYXRjaCwgTlVMTCk7CisgIHJldHVybiBUUlVFOworfQorCit2b2lkIGEyUmVtb3ZlV2F0Y2goREJ1c1dhdGNoICp3YXRjaCwgdm9pZCAqZGF0YSkKK3sKKyAgc3RydWN0IGEyV2F0Y2ggKmEyV2F0Y2ggPSBkYnVzX3dhdGNoX2dldF9kYXRhKHdhdGNoKTsKKyAgZGJ1c193YXRjaF9zZXRfZGF0YSh3YXRjaCwgTlVMTCwgTlVMTCk7CisgIGlmIChhMldhdGNoLT5pbnB1dF9tb25pdG9yKQorICAgIGFzeW5jQ2FuY2VsUmVxdWVzdChhMldhdGNoLT5pbnB1dF9tb25pdG9yKTsKKyAgaWYgKGEyV2F0Y2gtPm91dHB1dF9tb25pdG9yKQorICAgIGFzeW5jQ2FuY2VsUmVxdWVzdChhMldhdGNoLT5vdXRwdXRfbW9uaXRvcik7CisgIGZyZWUoYTJXYXRjaCk7Cit9CisKK3ZvaWQgYTJXYXRjaFRvZ2dsZWQoREJ1c1dhdGNoICp3YXRjaCwgdm9pZCAqZGF0YSkKK3sKKyAgaWYgKGRidXNfd2F0Y2hfZ2V0X2VuYWJsZWQod2F0Y2gpKSB7CisgICAgaWYgKCFkYnVzX3dhdGNoX2dldF9kYXRhKHdhdGNoKSkKKyAgICAgIGEyQWRkV2F0Y2god2F0Y2gsIGRhdGEpOworICB9IGVsc2UgeworICAgIGlmIChkYnVzX3dhdGNoX2dldF9kYXRhKHdhdGNoKSkKKyAgICAgIGEyUmVtb3ZlV2F0Y2god2F0Y2gsIGRhdGEpOworICB9Cit9CisKKy8qIEludGVncmF0aW9uIG9mIERCdXMgdGltZW91dHMgd2l0aCBicmx0dHkgbW9uaXRvcnMgKi8KKworc3RydWN0IGEyVGltZW91dAoreworICBBc3luY0hhbmRsZSBtb25pdG9yOworICBEQnVzVGltZW91dCAqdGltZW91dDsKK307CisKK0FTWU5DX0FMQVJNX0NBTExCQUNLKGEyUHJvY2Vzc1RpbWVvdXQpCit7CisgIHN0cnVjdCBhMlRpbWVvdXQgKmEyVGltZW91dCA9IHBhcmFtZXRlcnMtPmRhdGE7CisgIERCdXNUaW1lb3V0ICp0aW1lb3V0ID0gYTJUaW1lb3V0LT50aW1lb3V0OworICAvKiBQcm9jZXNzIHRpbWVvdXQgKi8KKyAgZGJ1c190aW1lb3V0X2hhbmRsZSh0aW1lb3V0KTsKKyAgLyogQW5kIHByb2Nlc3MgbWVzc2FnZXMgKi8KKyAgd2hpbGUgKGRidXNfY29ubmVjdGlvbl9kaXNwYXRjaChidXMpICE9IERCVVNfRElTUEFUQ0hfQ09NUExFVEUpCisgICAgOworICBpZiAodXBkYXRlZCkKKyAgeworICAgIHVwZGF0ZWQgPSAwOworICAgIG1haW5TY3JlZW5VcGRhdGVkKCk7CisgIH0KKyAgYXN5bmNEaXNjYXJkSGFuZGxlKGEyVGltZW91dC0+bW9uaXRvcik7CisgIGEyVGltZW91dC0+bW9uaXRvciA9IE5VTEw7CisgIGlmIChkYnVzX3RpbWVvdXRfZ2V0X2VuYWJsZWQodGltZW91dCkpCisgICAgLyogU3RpbGwgZW5hYmxlZCwgcmVxdWV1ZSBpdCAqLworICAgIGFzeW5jTmV3UmVsYXRpdmVBbGFybSgmYTJUaW1lb3V0LT5tb25pdG9yLCBkYnVzX3RpbWVvdXRfZ2V0X2ludGVydmFsKHRpbWVvdXQpLCBhMlByb2Nlc3NUaW1lb3V0LCBhMlRpbWVvdXQpOworfQorCitkYnVzX2Jvb2xfdCBhMkFkZFRpbWVvdXQoREJ1c1RpbWVvdXQgKnRpbWVvdXQsIHZvaWQgKmRhdGEpCit7CisgIHN0cnVjdCBhMlRpbWVvdXQgKmEyVGltZW91dCA9IGNhbGxvYygxLCBzaXplb2YoKmEyVGltZW91dCkpOworICBhMlRpbWVvdXQtPnRpbWVvdXQgPSB0aW1lb3V0OworICBpZiAoZGJ1c190aW1lb3V0X2dldF9lbmFibGVkKHRpbWVvdXQpKQorICAgIGFzeW5jTmV3UmVsYXRpdmVBbGFybSgmYTJUaW1lb3V0LT5tb25pdG9yLCBkYnVzX3RpbWVvdXRfZ2V0X2ludGVydmFsKHRpbWVvdXQpLCBhMlByb2Nlc3NUaW1lb3V0LCBhMlRpbWVvdXQpOworICBkYnVzX3RpbWVvdXRfc2V0X2RhdGEodGltZW91dCwgYTJUaW1lb3V0LCBOVUxMKTsKKyAgcmV0dXJuIFRSVUU7Cit9CisKK3ZvaWQgYTJSZW1vdmVUaW1lb3V0KERCdXNUaW1lb3V0ICp0aW1lb3V0LCB2b2lkICpkYXRhKQoreworICBzdHJ1Y3QgYTJUaW1lb3V0ICphMlRpbWVvdXQgPSBkYnVzX3RpbWVvdXRfZ2V0X2RhdGEodGltZW91dCk7CisgIGRidXNfdGltZW91dF9zZXRfZGF0YSh0aW1lb3V0LCBOVUxMLCBOVUxMKTsKKyAgaWYgKGEyVGltZW91dC0+bW9uaXRvcikKKyAgICBhc3luY0NhbmNlbFJlcXVlc3QoYTJUaW1lb3V0LT5tb25pdG9yKTsKKyAgZnJlZShhMlRpbWVvdXQpOworfQorCit2b2lkIGEyVGltZW91dFRvZ2dsZWQoREJ1c1RpbWVvdXQgKnRpbWVvdXQsIHZvaWQgKmRhdGEpCit7CisgIGlmIChkYnVzX3RpbWVvdXRfZ2V0X2VuYWJsZWQodGltZW91dCkpIHsKKyAgICBpZiAoIWRidXNfdGltZW91dF9nZXRfZGF0YSh0aW1lb3V0KSkKKyAgICAgIGEyQWRkVGltZW91dCh0aW1lb3V0LCBkYXRhKTsKKyAgfSBlbHNlIHsKKyAgICBpZiAoZGJ1c190aW1lb3V0X2dldF9kYXRhKHRpbWVvdXQpKQorICAgICAgYTJSZW1vdmVUaW1lb3V0KHRpbWVvdXQsIGRhdGEpOworICB9Cit9CisKKy8qIERyaXZlciBjb25zdHJ1Y3Rpb24gLyBkZXN0cnVjdGlvbiAqLworCitzdGF0aWMgaW50IGFkZFdhdGNoKGNvbnN0IGNoYXIgKm1lc3NhZ2UsIGNvbnN0IGNoYXIgKmV2ZW50KSB7CisgIERCdXNFcnJvciBlcnJvcjsKKyAgREJ1c01lc3NhZ2UgKm1zZywgKnJlcGx5OworCisgIGRidXNfZXJyb3JfaW5pdCgmZXJyb3IpOworICBkYnVzX2J1c19hZGRfbWF0Y2goYnVzLCBtZXNzYWdlLCAmZXJyb3IpOworICBpZiAoZGJ1c19lcnJvcl9pc19zZXQoJmVycm9yKSkgeworICAgIGxvZ01lc3NhZ2UoTE9HX0VSUiwgImVycm9yIHdoaWxlIGFkZGluZyB3YXRjaCAlczogJXMgJXMiLCBtZXNzYWdlLCBlcnJvci5uYW1lLCBlcnJvci5tZXNzYWdlKTsKKyAgICBkYnVzX2Vycm9yX2ZyZWUoJmVycm9yKTsKKyAgICByZXR1cm4gMDsKKyAgfQorIAorICBpZiAoIWV2ZW50KQorICAgIHJldHVybiAxOworCisgIC8qIFJlZ2lzdGVyIGFzIGV2ZW50IGxpc3RlbmVyLiAqLworICBtc2cgPSBuZXdfbWV0aG9kX2NhbGwoU1BJMl9EQlVTX0lOVEVSRkFDRV9SRUcsIFNQSTJfREJVU19QQVRIX1JFRywgU1BJMl9EQlVTX0lOVEVSRkFDRV9SRUcsICJSZWdpc3RlckV2ZW50Iik7CisgIGlmICghbXNnKQorICAgIHJldHVybiAwOworICBkYnVzX21lc3NhZ2VfYXBwZW5kX2FyZ3MobXNnLCBEQlVTX1RZUEVfU1RSSU5HLCAmZXZlbnQsIERCVVNfVFlQRV9JTlZBTElEKTsKKyAgcmVwbHkgPSBzZW5kX3dpdGhfcmVwbHlfYW5kX2Jsb2NrKGJ1cywgbXNnLCAxMDAwLCAicmVnaXN0ZXJpbmcgbGlzdGVuZXIiKTsKKyAgaWYgKCFyZXBseSkKKyAgICByZXR1cm4gMDsKKworICBkYnVzX21lc3NhZ2VfdW5yZWYocmVwbHkpOworICByZXR1cm4gMTsKK30KKworc3RhdGljIGludAorYWRkV2F0Y2hlcyAodm9pZCkgeworICB0eXBlZGVmIHN0cnVjdCB7CisgICAgY29uc3QgY2hhciAqbWVzc2FnZTsKKyAgICBjb25zdCBjaGFyICpldmVudDsKKyAgfSBXYXRjaEVudHJ5OworCisgIHN0YXRpYyBjb25zdCBXYXRjaEVudHJ5IHdhdGNoVGFibGVbXSA9IHsKKyAgICB7IC5tZXNzYWdlID0gInR5cGU9J21ldGhvZF9jYWxsJyxpbnRlcmZhY2U9JyJTUEkyX0RCVVNfSU5URVJGQUNFX1RSRUUiJyIsCisgICAgICAuZXZlbnQgPSBOVUxMCisgICAgfSwKKworICAgIHsgLm1lc3NhZ2UgPSAidHlwZT0nc2lnbmFsJyxpbnRlcmZhY2U9JyJTUEkyX0RCVVNfSU5URVJGQUNFX0VWRU5UIi5Gb2N1cyciLAorICAgICAgLmV2ZW50ID0gImZvY3VzIgorICAgIH0sCisKKyAgICB7IC5tZXNzYWdlID0gInR5cGU9J3NpZ25hbCcsaW50ZXJmYWNlPSciU1BJMl9EQlVTX0lOVEVSRkFDRV9FVkVOVCIuT2JqZWN0JyIsCisgICAgICAuZXZlbnQgPSAib2JqZWN0IgorICAgIH0sCisKKyAgICB7IC5tZXNzYWdlID0gInR5cGU9J3NpZ25hbCcsaW50ZXJmYWNlPSciU1BJMl9EQlVTX0lOVEVSRkFDRV9FVkVOVCIuT2JqZWN0JyxtZW1iZXI9J0NoaWxkcmVuQ2hhbmdlZCciLAorICAgICAgLmV2ZW50ID0gIm9iamVjdDpjaGlsZHJlbmNoYW5nZWQiCisgICAgfSwKKworICAgIHsgLm1lc3NhZ2UgPSAidHlwZT0nc2lnbmFsJyxpbnRlcmZhY2U9JyJTUEkyX0RCVVNfSU5URVJGQUNFX0VWRU5UIi5PYmplY3QnLG1lbWJlcj0nVGV4dENoYW5nZWQnIiwKKyAgICAgIC5ldmVudCA9ICJvYmplY3Q6dGV4dGNoYW5nZWQiCisgICAgfSwKKworICAgIHsgLm1lc3NhZ2UgPSAidHlwZT0nc2lnbmFsJyxpbnRlcmZhY2U9JyJTUEkyX0RCVVNfSU5URVJGQUNFX0VWRU5UIi5PYmplY3QnLG1lbWJlcj0nVGV4dENhcmV0TW92ZWQnIiwKKyAgICAgIC5ldmVudCA9ICJvYmplY3Q6dGV4dGNhcmV0bW92ZWQiCisgICAgfSwKKworICAgIHsgLm1lc3NhZ2UgPSAidHlwZT0nc2lnbmFsJyxpbnRlcmZhY2U9JyJTUEkyX0RCVVNfSU5URVJGQUNFX0VWRU5UIi5PYmplY3QnLG1lbWJlcj0nU3RhdGVDaGFuZ2VkJyIsCisgICAgICAuZXZlbnQgPSAib2JqZWN0OnN0YXRlY2hhbmdlZCIKKyAgICB9LAorCisgICAgeyAubWVzc2FnZSA9IE5VTEwgfQorICB9OworCisgIGZvciAoY29uc3QgV2F0Y2hFbnRyeSAqd2F0Y2g9d2F0Y2hUYWJsZTsgd2F0Y2gtPm1lc3NhZ2U7IHdhdGNoKz0xKSB7CisgICAgaWYgKCFhZGRXYXRjaCh3YXRjaC0+bWVzc2FnZSwgd2F0Y2gtPmV2ZW50KSkgeworICAgICAgbG9nTWVzc2FnZShMT0dfRVJSLCAiY2FuJ3QgYWRkIHdhdGNoICVzICVzIiwgd2F0Y2gtPm1lc3NhZ2UsIHdhdGNoLT5ldmVudCk7CisgICAgICByZXR1cm4gMDsKKyAgICB9CisgIH0KKworICByZXR1cm4gMTsKK30KKworc3RhdGljIERCdXNIYW5kbGVyUmVzdWx0IEF0U3BpMkZpbHRlcihEQnVzQ29ubmVjdGlvbiAqY29ubmVjdGlvbiwgREJ1c01lc3NhZ2UgKm1lc3NhZ2UsIHZvaWQgKnVzZXJfZGF0YSkKK3sKKyAgaW50IHR5cGUgPSBkYnVzX21lc3NhZ2VfZ2V0X3R5cGUobWVzc2FnZSk7CisgIGNvbnN0IGNoYXIgKmludGVyZmFjZSA9IGRidXNfbWVzc2FnZV9nZXRfaW50ZXJmYWNlKG1lc3NhZ2UpOworICBjb25zdCBjaGFyICptZW1iZXIgPSBkYnVzX21lc3NhZ2VfZ2V0X21lbWJlcihtZXNzYWdlKTsKKworICBpZiAodHlwZSA9PSBEQlVTX01FU1NBR0VfVFlQRV9TSUdOQUwpIHsKKyAgICBpZiAoIXN0cm5jbXAoaW50ZXJmYWNlLCBTUEkyX0RCVVNfSU5URVJGQUNFX0VWRU5UIi4iLCBzdHJsZW4oU1BJMl9EQlVTX0lOVEVSRkFDRV9FVkVOVCIuIikpKSB7CisgICAgICBBdFNwaTJIYW5kbGVFdmVudChpbnRlcmZhY2UgKyBzdHJsZW4oU1BJMl9EQlVTX0lOVEVSRkFDRV9FVkVOVCIuIiksIG1lc3NhZ2UpOworICAgIH0gZWxzZSBpZiAoIXN0cmNtcChpbnRlcmZhY2UsIERCVVNfSU5URVJGQUNFX0xPQ0FMKSAmJgorICAgICAgICAgICAgICAgIXN0cmNtcChtZW1iZXIsICJEaXNjb25uZWN0ZWQiKSkgeworICAgICAgb25TY3JlZW5Ecml2ZXJGYWlsdXJlKCJEQnVzIGRpc2Nvbm5lY3RlZCIpOworICAgIH0gZWxzZSB7CisgICAgICBsb2dNZXNzYWdlKExPR19DQVRFR09SWShTQ1JFRU5fRFJJVkVSKSwKKyAgICAgICAgICAgICAgICAgInVua25vd24gc2lnbmFsOiBJbnRmOiVzIE1zZzolcyIsIGludGVyZmFjZSwgbWVtYmVyKTsKKyAgICB9CisgIH0gZWxzZSB7CisgICAgbG9nTWVzc2FnZShMT0dfQ0FURUdPUlkoU0NSRUVOX0RSSVZFUiksCisgICAgICAgICAgICAgICAidW5rbm93biBtZXNzYWdlOiBUeXBlOiVkIEludGY6JXMgTXNnOiVzIiwgdHlwZSwgaW50ZXJmYWNlLCBtZW1iZXIpOworICB9CisKKyAgcmV0dXJuIERCVVNfSEFORExFUl9SRVNVTFRfSEFORExFRDsKK30KKworc3RhdGljIGludAorY29uc3RydWN0X0F0U3BpMlNjcmVlbiAodm9pZCkgeworICBEQnVzRXJyb3IgZXJyb3I7CisKKyAgZGJ1c19lcnJvcl9pbml0KCZlcnJvcik7CisjaWZkZWYgSEFWRV9BVFNQSV9HRVRfQTExWV9CVVMKKyAgYnVzID0gYXRzcGlfZ2V0X2ExMXlfYnVzKCk7CisgIGlmICghYnVzKQorI2VuZGlmIC8qIEhBVkVfQVRTUElfR0VUX0ExMVlfQlVTICovCisgIHsKKyAgICBidXMgPSBkYnVzX2J1c19nZXQoREJVU19CVVNfU0VTU0lPTiwgJmVycm9yKTsKKyAgICBpZiAoZGJ1c19lcnJvcl9pc19zZXQoJmVycm9yKSkgeworICAgICAgbG9nTWVzc2FnZShMT0dfRVJSLCAiY2FuJ3QgZ2V0IGRidXMgc2Vzc2lvbiBidXM6ICVzICVzIiwgZXJyb3IubmFtZSwgZXJyb3IubWVzc2FnZSk7CisgICAgICBkYnVzX2Vycm9yX2ZyZWUoJmVycm9yKTsKKyAgICAgIGdvdG8gbm9CdXM7CisgICAgfQorICB9CisKKyAgaWYgKCFidXMpIHsKKyAgICBsb2dNZXNzYWdlKExPR19FUlIsICJjYW4ndCBnZXQgZGJ1cyBzZXNzaW9uIGJ1cyIpOworICAgIGdvdG8gbm9CdXM7CisgIH0KKworICBpZiAoIWRidXNfY29ubmVjdGlvbl9hZGRfZmlsdGVyKGJ1cywgQXRTcGkyRmlsdGVyLCBOVUxMLCBOVUxMKSkgeworICAgIGxvZ01lc3NhZ2UoTE9HX0VSUiwgImNhbid0IGFkZCBhdHNwaTIgZmlsdGVyIik7CisgICAgZ290byBub0Nvbm5lY3Rpb247CisgIH0KKyAgaWYgKCFhZGRXYXRjaGVzKCkpIGdvdG8gbm9XYXRjaGVzOworCisgIGlmICghY3VyUGF0aCkgeworICAgIGluaXRUZXJtKCk7CisgIH0gZWxzZSBpZiAoIXJlaW5pdFRlcm0oY3VyU2VuZGVyLCBjdXJQYXRoKSkgeworICAgIGxvZ01lc3NhZ2UoTE9HX0NBVEVHT1JZKFNDUkVFTl9EUklWRVIpLAorICAgICAgICAgICAgICAgImNhY2hpbmcgZmFpbGVkLCByZXN0YXJ0aW5nIGZyb20gc2NyYXRjaCIpOworICAgIGluaXRUZXJtKCk7CisgIH0KKworICBkYnVzX2Nvbm5lY3Rpb25fc2V0X3dhdGNoX2Z1bmN0aW9ucyhidXMsIGEyQWRkV2F0Y2gsIGEyUmVtb3ZlV2F0Y2gsIGEyV2F0Y2hUb2dnbGVkLCBOVUxMLCBOVUxMKTsKKyAgZGJ1c19jb25uZWN0aW9uX3NldF90aW1lb3V0X2Z1bmN0aW9ucyhidXMsIGEyQWRkVGltZW91dCwgYTJSZW1vdmVUaW1lb3V0LCBhMlRpbWVvdXRUb2dnbGVkLCBOVUxMLCBOVUxMKTsKKworI2lmZGVmIEhBVkVfUEtHX1gxMQorICBjbG9zZVggPSAwOworICBkcHkgPSBYT3BlbkRpc3BsYXkoTlVMTCk7CisgIGlmIChkcHkpIHsKKyAgICBYU2V0RXJyb3JIYW5kbGVyKEVycm9ySGFuZGxlcik7CisgICAgWFNldElPRXJyb3JIYW5kbGVyKElPRXJyb3JIYW5kbGVyKTsKKyNpZmRlZiBIQVZFX1hTRVRJT0VSUk9SRVhJVEhBTkRMRVIKKyAgICBYU2V0SU9FcnJvckV4aXRIYW5kbGVyKGRweSwgSU9FcnJvckV4aXRIYW5kbGVyLCBOVUxMKTsKKyNlbmRpZgorICAgIFhTZWxJbml0KGRweSwgJnhzZWxEYXRhKTsKKyAgICBYRmx1c2goZHB5KTsKKyNpZmRlZiBIQVZFX1BUSFJFQURfQVRGT1JLCisgICAgcHRocmVhZF9hdGZvcmsoTlVMTCwgTlVMTCwgYTJEcm9wWCk7CisjZW5kaWYgLyogSEFWRV9QVEhSRUFEX0FURk9SSyAqLworICAgIGFzeW5jTW9uaXRvckZpbGVJbnB1dCgmYTJYV2F0Y2gsIFhDb25uZWN0aW9uTnVtYmVyKGRweSksIGEyUHJvY2Vzc1gsIE5VTEwpOworICAgIGNvcmVTZWxVcGRhdGVkTGlzdGVuZXIgPSByZWdpc3RlclJlcG9ydExpc3RlbmVyKFJFUE9SVF9BUElfUEFSQU1FVEVSX1VQREFURUQsIGEyQ29yZVNlbFVwZGF0ZWQgLCBOVUxMKTsKKyAgfQorI2VuZGlmIC8qIEhBVkVfUEtHX1gxMSAqLworCisgIGxvZ01lc3NhZ2UoTE9HX0NBVEVHT1JZKFNDUkVFTl9EUklWRVIpLCAiU1BJMiBpbml0aWFsaXplZCIpOworICBicmx0dHlFbmFibGVJbnRlcnJ1cHQoKTsKKyAgcmV0dXJuIDE7CisKK25vV2F0Y2hlczoKKworbm9Db25uZWN0aW9uOgorICBkYnVzX2Nvbm5lY3Rpb25fdW5yZWYoYnVzKTsKKworbm9CdXM6CisgIG9uU2NyZWVuRHJpdmVyRmFpbHVyZSgiZHJpdmVyIGNvdWxkbid0IHN0YXJ0Iik7CisgIHJldHVybiAwOworfQorCitzdGF0aWMgdm9pZAorZGVzdHJ1Y3RfQXRTcGkyU2NyZWVuICh2b2lkKSB7CisgIGJybHR0eURpc2FibGVJbnRlcnJ1cHQoKTsKKyNpZmRlZiBIQVZFX1BLR19YMTEKKyAgaWYgKGRweSkgeworICAgIGlmIChjb3JlU2VsVXBkYXRlZExpc3RlbmVyKSB7CisgICAgICB1bnJlZ2lzdGVyUmVwb3J0TGlzdGVuZXIoY29yZVNlbFVwZGF0ZWRMaXN0ZW5lcik7CisgICAgICBjb3JlU2VsVXBkYXRlZExpc3RlbmVyID0gTlVMTDsKKyAgICB9CisgICAgaWYgKGEyWFdhdGNoKSB7CisgICAgICBhc3luY0NhbmNlbFJlcXVlc3QoYTJYV2F0Y2gpOworICAgICAgYTJYV2F0Y2ggPSBOVUxMOworICAgIH0KKyAgICBYQ2xvc2VEaXNwbGF5KGRweSk7CisgICAgZHB5ID0gTlVMTDsKKyAgICBmcmVlKGNsaXBib2FyZENvbnRlbnQpOworICAgIGNsaXBib2FyZENvbnRlbnQgPSBOVUxMOworICB9CisjZW5kaWYgLyogSEFWRV9QS0dfWDExICovCisgIGRidXNfY29ubmVjdGlvbl9yZW1vdmVfZmlsdGVyKGJ1cywgQXRTcGkyRmlsdGVyLCBOVUxMKTsKKyAgZGJ1c19jb25uZWN0aW9uX2Nsb3NlKGJ1cyk7CisgIGRidXNfY29ubmVjdGlvbl91bnJlZihidXMpOworICBsb2dNZXNzYWdlKExPR19DQVRFR09SWShTQ1JFRU5fRFJJVkVSKSwKKyAgICAgICAgICAgICAiU1BJMiBzdG9wcGVkIik7CisgIGZpbmlUZXJtKCk7Cit9CisKK3N0YXRpYyBpbnQKK2N1cnJlbnRWaXJ0dWFsVGVybWluYWxfQXRTcGkyU2NyZWVuICh2b2lkKSB7CisgIHJldHVybiAoY3VyUGF0aCB8fCAhcmVsZWFzZVNjcmVlbik/IDA6IFNDUl9OT19WVDsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgbXNnTm90QXRTcGkgW10gPSAibm90IGFuIEFULVNQSTIgdGV4dCB3aWRnZXQiOworCitzdGF0aWMgaW50Citwb2xsX0F0U3BpMlNjcmVlbiAodm9pZCkKK3sKKyAgcmV0dXJuIDA7Cit9CisKK0FTWU5DX0VWRU5UX0NBTExCQUNLKEF0U3BpMlNjcmVlblVwZGF0ZWQpIHsKKyAgbWFpblNjcmVlblVwZGF0ZWQoKTsKK30KKworc3RhdGljIGludAorcmVmcmVzaF9BdFNwaTJTY3JlZW4gKHZvaWQpCit7CisgIHJldHVybiAxOworfQorCitzdGF0aWMgdm9pZAorZGVzY3JpYmVfQXRTcGkyU2NyZWVuIChTY3JlZW5EZXNjcmlwdGlvbiAqZGVzY3JpcHRpb24pIHsKKyAgaWYgKGN1clBhdGgpIHsKKyAgICBkZXNjcmlwdGlvbi0+Y29scyA9IGN1clBvc1g+PWN1ck51bUNvbHM/Y3VyUG9zWCsxOmN1ck51bUNvbHM7CisgICAgZGVzY3JpcHRpb24tPnJvd3MgPSBjdXJOdW1Sb3dzP2N1ck51bVJvd3M6MTsKKyAgICBkZXNjcmlwdGlvbi0+cG9zeCA9IGN1clBvc1g7CisgICAgZGVzY3JpcHRpb24tPnBvc3kgPSBjdXJQb3NZOworICAgIGRlc2NyaXB0aW9uLT5xdWFsaXR5ID0gY3VyUXVhbGl0eTsKKyAgfSBlbHNlIHsKKyAgICBjb25zdCBjaGFyICptZXNzYWdlID0gbXNnTm90QXRTcGk7CisgICAgaWYgKHJlbGVhc2VTY3JlZW4pIGRlc2NyaXB0aW9uLT51bnJlYWRhYmxlID0gbWVzc2FnZTsKKworICAgIGRlc2NyaXB0aW9uLT5yb3dzID0gMTsKKyAgICBkZXNjcmlwdGlvbi0+Y29scyA9IHN0cmxlbihtZXNzYWdlKTsKKyAgICBkZXNjcmlwdGlvbi0+cG9zeCA9IDA7CisgICAgZGVzY3JpcHRpb24tPnBvc3kgPSAwOworICAgIGRlc2NyaXB0aW9uLT5xdWFsaXR5ID0gU0NRX05PTkU7CisgIH0KKworICBkZXNjcmlwdGlvbi0+bnVtYmVyID0gY3VycmVudFZpcnR1YWxUZXJtaW5hbF9BdFNwaTJTY3JlZW4oKTsKK30KKworc3RhdGljIGludAorcmVhZENoYXJhY3RlcnNfQXRTcGkyU2NyZWVuIChjb25zdCBTY3JlZW5Cb3ggKmJveCwgU2NyZWVuQ2hhcmFjdGVyICpidWZmZXIpIHsKKyAgY2xlYXJTY3JlZW5DaGFyYWN0ZXJzKGJ1ZmZlciwgKGJveC0+aGVpZ2h0ICogYm94LT53aWR0aCkpOworCisgIGlmICghY3VyUGF0aCkgeworICAgIHNldFNjcmVlbk1lc3NhZ2UoYm94LCBidWZmZXIsIG1zZ05vdEF0U3BpKTsKKyAgICByZXR1cm4gMTsKKyAgfQorCisgIGlmICghY3VyTnVtQ29scyB8fCAhY3VyTnVtUm93cykgcmV0dXJuIDA7CisgIHNob3J0IGNvbHMgPSAoY3VyUG9zWCA+PSBjdXJOdW1Db2xzKT8gKGN1clBvc1ggKyAxKTogY3VyTnVtQ29sczsKKyAgaWYgKCF2YWxpZGF0ZVNjcmVlbkJveChib3gsIGNvbHMsIGN1ck51bVJvd3MpKSByZXR1cm4gMDsKKworICBmb3IgKHVuc2lnbmVkIGludCB5PTA7IHk8Ym94LT5oZWlnaHQ7IHkrPTEpIHsKKyAgICBpZiAoY3VyUm93TGVuZ3Roc1tib3gtPnRvcCt5XSkgeworICAgICAgZm9yICh1bnNpZ25lZCBpbnQgeD0wOyB4PGJveC0+d2lkdGg7IHgrPTEpIHsKKyAgICAgICAgaWYgKGJveC0+bGVmdCt4IDwgY3VyUm93TGVuZ3Roc1tib3gtPnRvcCt5XSAtIChjdXJSb3dzW2JveC0+dG9wK3ldW2N1clJvd0xlbmd0aHNbYm94LT50b3AreV0tMV09PVdDX0MoJ1xuJykpKSB7CisgICAgICAgICAgYnVmZmVyW3kqYm94LT53aWR0aCt4XS50ZXh0ID0gY3VyUm93c1tib3gtPnRvcCt5XVtib3gtPmxlZnQreF07CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9CisgIH0KKworICByZXR1cm4gMTsKK30KKworZW51bSBrZXlfdHlwZV9lIHsKKyAgUFJFU1MsCisgIFJFTEVBU0UsCisgIFBSRVNTUkVMRUFTRSwKKyAgU1lNCit9OworCitzdGF0aWMgaW50CitBdFNwaTJHZW5lcmF0ZUtleWJvYXJkRXZlbnQgKGRidXNfdWludDMyX3Qga2V5c3ltLCBlbnVtIGtleV90eXBlX2Uga2V5X3R5cGUpCit7CisgIERCdXNNZXNzYWdlICptc2csICpyZXBseTsKKyAgY29uc3QgY2hhciAqcyA9ICIiOworCisgIG1zZyA9IG5ld19tZXRob2RfY2FsbChTUEkyX0RCVVNfSU5URVJGQUNFX1JFRywgU1BJMl9EQlVTX1BBVEhfREVDLCBTUEkyX0RCVVNfSU5URVJGQUNFX0RFQywgIkdlbmVyYXRlS2V5Ym9hcmRFdmVudCIpOworICBpZiAoIW1zZykKKyAgICByZXR1cm4gMDsKKyAgZGJ1c19tZXNzYWdlX2FwcGVuZF9hcmdzKG1zZywgREJVU19UWVBFX0lOVDMyLCAma2V5c3ltLCBEQlVTX1RZUEVfU1RSSU5HLCAmcywgREJVU19UWVBFX1VJTlQzMiwgJmtleV90eXBlLCBEQlVTX1RZUEVfSU5WQUxJRCk7CisgIHJlcGx5ID0gc2VuZF93aXRoX3JlcGx5X2FuZF9ibG9jayhidXMsIG1zZywgMTAwMCwgImdlbmVyYXRpbmcga2V5Ym9hcmQgZXZlbnQiKTsKKyAgaWYgKCFyZXBseSkKKyAgICByZXR1cm4gMDsKKworICByZXR1cm4gMTsKK30KKworc3RhdGljIGludAoraW5zZXJ0S2V5X0F0U3BpMlNjcmVlbiAoU2NyZWVuS2V5IGtleSkgeworICBsb25nIGtleXN5bTsKKyAgaW50IG1vZE1ldGE9MCwgbW9kQ29udHJvbD0wOworCisgIG1hcFNjcmVlbktleSgma2V5KTsKKyAgc2V0U2NyZWVuS2V5TW9kaWZpZXJzKCZrZXksIFNDUl9LRVlfQ09OVFJPTCk7CisKKyAgaWYgKGlzU3BlY2lhbEtleShrZXkpKSB7CisgICAgc3dpdGNoIChrZXkgJiBTQ1JfS0VZX0NIQVJfTUFTSykgeworI2lmZGVmIEhBVkVfWDExX0tFWVNZTV9ICisgICAgICBjYXNlIFNDUl9LRVlfRU5URVI6ICAgICAgICAga2V5c3ltID0gWEtfS1BfRW50ZXI7ICBicmVhazsKKyAgICAgIGNhc2UgU0NSX0tFWV9UQUI6ICAgICAgICAgICBrZXlzeW0gPSBYS19UYWI7ICAgICAgIGJyZWFrOworICAgICAgY2FzZSBTQ1JfS0VZX0JBQ0tTUEFDRTogICAgIGtleXN5bSA9IFhLX0JhY2tTcGFjZTsgYnJlYWs7CisgICAgICBjYXNlIFNDUl9LRVlfRVNDQVBFOiAgICAgICAga2V5c3ltID0gWEtfRXNjYXBlOyAgICBicmVhazsKKyAgICAgIGNhc2UgU0NSX0tFWV9DVVJTT1JfTEVGVDogICBrZXlzeW0gPSBYS19MZWZ0OyAgICAgIGJyZWFrOworICAgICAgY2FzZSBTQ1JfS0VZX0NVUlNPUl9SSUdIVDogIGtleXN5bSA9IFhLX1JpZ2h0OyAgICAgYnJlYWs7CisgICAgICBjYXNlIFNDUl9LRVlfQ1VSU09SX1VQOiAgICAga2V5c3ltID0gWEtfVXA7ICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgU0NSX0tFWV9DVVJTT1JfRE9XTjogICBrZXlzeW0gPSBYS19Eb3duOyAgICAgIGJyZWFrOworICAgICAgY2FzZSBTQ1JfS0VZX1BBR0VfVVA6ICAgICAgIGtleXN5bSA9IFhLX1BhZ2VfVXA7ICAgYnJlYWs7CisgICAgICBjYXNlIFNDUl9LRVlfUEFHRV9ET1dOOiAgICAga2V5c3ltID0gWEtfUGFnZV9Eb3duOyBicmVhazsKKyAgICAgIGNhc2UgU0NSX0tFWV9IT01FOiAgICAgICAgICBrZXlzeW0gPSBYS19Ib21lOyAgICAgIGJyZWFrOworICAgICAgY2FzZSBTQ1JfS0VZX0VORDogICAgICAgICAgIGtleXN5bSA9IFhLX0VuZDsgICAgICAgYnJlYWs7CisgICAgICBjYXNlIFNDUl9LRVlfSU5TRVJUOiAgICAgICAga2V5c3ltID0gWEtfSW5zZXJ0OyAgICBicmVhazsKKyAgICAgIGNhc2UgU0NSX0tFWV9ERUxFVEU6ICAgICAgICBrZXlzeW0gPSBYS19EZWxldGU7ICAgIGJyZWFrOworICAgICAgY2FzZSBTQ1JfS0VZX0ZVTkNUSU9OICsgMDogIGtleXN5bSA9IFhLX0YxOyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIFNDUl9LRVlfRlVOQ1RJT04gKyAxOiAga2V5c3ltID0gWEtfRjI7ICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgU0NSX0tFWV9GVU5DVElPTiArIDI6ICBrZXlzeW0gPSBYS19GMzsgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBTQ1JfS0VZX0ZVTkNUSU9OICsgMzogIGtleXN5bSA9IFhLX0Y0OyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIFNDUl9LRVlfRlVOQ1RJT04gKyA0OiAga2V5c3ltID0gWEtfRjU7ICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgU0NSX0tFWV9GVU5DVElPTiArIDU6ICBrZXlzeW0gPSBYS19GNjsgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBTQ1JfS0VZX0ZVTkNUSU9OICsgNjogIGtleXN5bSA9IFhLX0Y3OyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIFNDUl9LRVlfRlVOQ1RJT04gKyA3OiAga2V5c3ltID0gWEtfRjg7ICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgU0NSX0tFWV9GVU5DVElPTiArIDg6ICBrZXlzeW0gPSBYS19GOTsgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBTQ1JfS0VZX0ZVTkNUSU9OICsgOTogIGtleXN5bSA9IFhLX0YxMDsgICAgICAgYnJlYWs7CisgICAgICBjYXNlIFNDUl9LRVlfRlVOQ1RJT04gKyAxMDoga2V5c3ltID0gWEtfRjExOyAgICAgICBicmVhazsKKyAgICAgIGNhc2UgU0NSX0tFWV9GVU5DVElPTiArIDExOiBrZXlzeW0gPSBYS19GMTI7ICAgICAgIGJyZWFrOworICAgICAgY2FzZSBTQ1JfS0VZX0ZVTkNUSU9OICsgMTI6IGtleXN5bSA9IFhLX0YxMzsgICAgICAgYnJlYWs7CisgICAgICBjYXNlIFNDUl9LRVlfRlVOQ1RJT04gKyAxMzoga2V5c3ltID0gWEtfRjE0OyAgICAgICBicmVhazsKKyAgICAgIGNhc2UgU0NSX0tFWV9GVU5DVElPTiArIDE0OiBrZXlzeW0gPSBYS19GMTU7ICAgICAgIGJyZWFrOworICAgICAgY2FzZSBTQ1JfS0VZX0ZVTkNUSU9OICsgMTU6IGtleXN5bSA9IFhLX0YxNjsgICAgICAgYnJlYWs7CisgICAgICBjYXNlIFNDUl9LRVlfRlVOQ1RJT04gKyAxNjoga2V5c3ltID0gWEtfRjE3OyAgICAgICBicmVhazsKKyAgICAgIGNhc2UgU0NSX0tFWV9GVU5DVElPTiArIDE3OiBrZXlzeW0gPSBYS19GMTg7ICAgICAgIGJyZWFrOworICAgICAgY2FzZSBTQ1JfS0VZX0ZVTkNUSU9OICsgMTg6IGtleXN5bSA9IFhLX0YxOTsgICAgICAgYnJlYWs7CisgICAgICBjYXNlIFNDUl9LRVlfRlVOQ1RJT04gKyAxOToga2V5c3ltID0gWEtfRjIwOyAgICAgICBicmVhazsKKyAgICAgIGNhc2UgU0NSX0tFWV9GVU5DVElPTiArIDIwOiBrZXlzeW0gPSBYS19GMjE7ICAgICAgIGJyZWFrOworICAgICAgY2FzZSBTQ1JfS0VZX0ZVTkNUSU9OICsgMjE6IGtleXN5bSA9IFhLX0YyMjsgICAgICAgYnJlYWs7CisgICAgICBjYXNlIFNDUl9LRVlfRlVOQ1RJT04gKyAyMjoga2V5c3ltID0gWEtfRjIzOyAgICAgICBicmVhazsKKyAgICAgIGNhc2UgU0NSX0tFWV9GVU5DVElPTiArIDIzOiBrZXlzeW0gPSBYS19GMjQ7ICAgICAgIGJyZWFrOworICAgICAgY2FzZSBTQ1JfS0VZX0ZVTkNUSU9OICsgMjQ6IGtleXN5bSA9IFhLX0YyNTsgICAgICAgYnJlYWs7CisgICAgICBjYXNlIFNDUl9LRVlfRlVOQ1RJT04gKyAyNToga2V5c3ltID0gWEtfRjI2OyAgICAgICBicmVhazsKKyAgICAgIGNhc2UgU0NSX0tFWV9GVU5DVElPTiArIDI2OiBrZXlzeW0gPSBYS19GMjc7ICAgICAgIGJyZWFrOworICAgICAgY2FzZSBTQ1JfS0VZX0ZVTkNUSU9OICsgMjc6IGtleXN5bSA9IFhLX0YyODsgICAgICAgYnJlYWs7CisgICAgICBjYXNlIFNDUl9LRVlfRlVOQ1RJT04gKyAyODoga2V5c3ltID0gWEtfRjI5OyAgICAgICBicmVhazsKKyAgICAgIGNhc2UgU0NSX0tFWV9GVU5DVElPTiArIDI5OiBrZXlzeW0gPSBYS19GMzA7ICAgICAgIGJyZWFrOworICAgICAgY2FzZSBTQ1JfS0VZX0ZVTkNUSU9OICsgMzA6IGtleXN5bSA9IFhLX0YzMTsgICAgICAgYnJlYWs7CisgICAgICBjYXNlIFNDUl9LRVlfRlVOQ1RJT04gKyAzMToga2V5c3ltID0gWEtfRjMyOyAgICAgICBicmVhazsKKyAgICAgIGNhc2UgU0NSX0tFWV9GVU5DVElPTiArIDMyOiBrZXlzeW0gPSBYS19GMzM7ICAgICAgIGJyZWFrOworICAgICAgY2FzZSBTQ1JfS0VZX0ZVTkNUSU9OICsgMzM6IGtleXN5bSA9IFhLX0YzNDsgICAgICAgYnJlYWs7CisgICAgICBjYXNlIFNDUl9LRVlfRlVOQ1RJT04gKyAzNDoga2V5c3ltID0gWEtfRjM1OyAgICAgICBicmVhazsKKyNlbHNlIC8qIEhBVkVfWDExX0tFWVNZTV9IICovCisjd2FybmluZyBpbnNlcnRpb24gb2Ygbm9uLWNoYXJhY3RlciBrZXkgcHJlc3NlcyBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgYnVpbGQgLSBjaGVjayB0aGF0IFgxMSBwcm90b2NvbCBoZWFkZXJzIGhhdmUgYmVlbiBpbnN0YWxsZWQKKyNlbmRpZiAvKiBIQVZFX1gxMV9LRVlTWU1fSCAqLworICAgICAgZGVmYXVsdDogbG9nTWVzc2FnZShMT0dfV0FSTklORywgImtleSBub3QgaW5zZXJ0YWJsZTogJTA0WCIsIGtleSk7IHJldHVybiAwOworICAgIH0KKyAgfSBlbHNlIHsKKyAgICB3Y2hhcl90IHdjOworCisgICAgaWYgKGtleSAmIFNDUl9LRVlfQUxUX0xFRlQpIHsKKyAgICAgIGtleSAmPSB+U0NSX0tFWV9BTFRfTEVGVDsKKyAgICAgIG1vZE1ldGEgPSAxOworICAgIH0KKworICAgIGlmIChrZXkgJiBTQ1JfS0VZX0NPTlRST0wpIHsKKyAgICAgIGtleSAmPSB+U0NSX0tFWV9DT05UUk9MOworICAgICAgbW9kQ29udHJvbCA9IDE7CisgICAgfQorCisgICAgd2MgPSBrZXkgJiBTQ1JfS0VZX0NIQVJfTUFTSzsKKyAgICBpZiAod2MgPCAweDEwMCkKKyAgICAgIGtleXN5bSA9IHdjOyAvKiBsYXRpbjEgY2hhcmFjdGVyICovCisgICAgZWxzZQorICAgICAga2V5c3ltID0gMHgxMDAwMDAwIHwgd2M7CisgIH0KKyAgbG9nTWVzc2FnZShMT0dfQ0FURUdPUlkoU0NSRUVOX0RSSVZFUiksCisgICAgICAgICAgICAgImluc2VydGluZyBrZXk6ICUwNFggLT4gJXMlcyVsZCIsCisgICAgICAgICAgICAga2V5LAorICAgICAgICAgICAgIChtb2RNZXRhPyAibWV0YSAiOiAiIiksCisgICAgICAgICAgICAgKG1vZENvbnRyb2w/ICJjb250cm9sICI6ICIiKSwKKyAgICAgICAgICAgICBrZXlzeW0pOworCisgIHsKKyAgICBpbnQgb2sgPSAwOworCisjaWZkZWYgSEFWRV9YMTFfS0VZU1lNX0gKKyAgICBpZiAoIW1vZE1ldGEgfHwgQXRTcGkyR2VuZXJhdGVLZXlib2FyZEV2ZW50KFhLX01ldGFfTCxQUkVTUykpIHsKKyAgICAgIGlmICghbW9kQ29udHJvbCB8fCBBdFNwaTJHZW5lcmF0ZUtleWJvYXJkRXZlbnQoWEtfQ29udHJvbF9MLFBSRVNTKSkgeworI2VuZGlmIC8qIEhBVkVfWDExX0tFWVNZTV9IICovCisKKyAgICAgICAgaWYgKEF0U3BpMkdlbmVyYXRlS2V5Ym9hcmRFdmVudChrZXlzeW0sU1lNKSkgeworICAgICAgICAgIG9rID0gMTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICBsb2dNZXNzYWdlKExPR19XQVJOSU5HLCAia2V5IGluc2VydGlvbiBmYWlsZWQuIik7CisgICAgICAgIH0KKworI2lmZGVmIEhBVkVfWDExX0tFWVNZTV9ICisgICAgICAgIGlmIChtb2RDb250cm9sICYmICFBdFNwaTJHZW5lcmF0ZUtleWJvYXJkRXZlbnQoWEtfQ29udHJvbF9MLFJFTEVBU0UpKSB7CisgICAgICAgICAgbG9nTWVzc2FnZShMT0dfV0FSTklORywgImNvbnRyb2wgcmVsZWFzZSBmYWlsZWQuIik7CisgICAgICAgICAgb2sgPSAwOworICAgICAgICB9CisgICAgICB9IGVsc2UgeworICAgICAgICBsb2dNZXNzYWdlKExPR19XQVJOSU5HLCAiY29udHJvbCBwcmVzcyBmYWlsZWQuIik7CisgICAgICB9CisKKyAgICAgIGlmIChtb2RNZXRhICYmICFBdFNwaTJHZW5lcmF0ZUtleWJvYXJkRXZlbnQoWEtfTWV0YV9MLFJFTEVBU0UpKSB7CisgICAgICAgIGxvZ01lc3NhZ2UoTE9HX1dBUk5JTkcsICJtZXRhIHJlbGVhc2UgZmFpbGVkLiIpOworICAgICAgICBvayA9IDA7CisgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgIGxvZ01lc3NhZ2UoTE9HX1dBUk5JTkcsICJtZXRhIHByZXNzIGZhaWxlZC4iKTsKKyAgICB9CisjZW5kaWYgLyogSEFWRV9YMTFfS0VZU1lNX0ggKi8KKworICAgIHJldHVybiBvazsKKyAgfQorfQorCitzdGF0aWMgaW50CitzZXRTZWxlY3Rpb25fQXRTcGkyU2NyZWVuIChpbnQgYmVnaW5PZmZzZXQsIGludCBlbmRPZmZzZXQpIHsKKyAgZGJ1c19ib29sX3QgcmVzdWx0OworICBEQnVzTWVzc2FnZSAqbXNnLCAqcmVwbHk7CisgIERCdXNNZXNzYWdlSXRlciBpdGVyOworICBkYnVzX2ludDMyX3QgbnVtID0gMDsKKyAgZGJ1c19pbnQzMl90IGJlZ2luID0gYmVnaW5PZmZzZXQ7CisgIGRidXNfaW50MzJfdCBlbmQgPSBlbmRPZmZzZXQ7CisKKyAgbXNnID0gbmV3X21ldGhvZF9jYWxsKGN1clNlbmRlciwgY3VyUGF0aCwgU1BJMl9EQlVTX0lOVEVSRkFDRV9URVhULCAiU2V0U2VsZWN0aW9uIik7CisgIGlmICghbXNnKQorICAgIHJldHVybiAwOworICBkYnVzX21lc3NhZ2VfYXBwZW5kX2FyZ3MobXNnLCBEQlVTX1RZUEVfSU5UMzIsICZudW0sIERCVVNfVFlQRV9JTlQzMiwgJmJlZ2luLCBEQlVTX1RZUEVfSU5UMzIsICZlbmQsIERCVVNfVFlQRV9JTlZBTElEKTsKKyAgcmVwbHkgPSBzZW5kX3dpdGhfcmVwbHlfYW5kX2Jsb2NrKGJ1cywgbXNnLCAxMDAwLCAic2V0dGluZyBzZWxlY3Rpb24iKTsKKyAgaWYgKCFyZXBseSkKKyAgICByZXR1cm4gMDsKKworICBkYnVzX21lc3NhZ2VfaXRlcl9pbml0KHJlcGx5LCAmaXRlcik7CisgIGlmIChkYnVzX21lc3NhZ2VfaXRlcl9nZXRfYXJnX3R5cGUoJml0ZXIpICE9IERCVVNfVFlQRV9CT09MRUFOKSB7CisgICAgbG9nTWVzc2FnZShMT0dfQ0FURUdPUlkoU0NSRUVOX0RSSVZFUiksCisgICAgICAgICAgICAgICAiU2V0U2VsZWN0aW9uIGRpZG4ndCByZXR1cm4gYSBib29sZWFuIGJ1dCAnJWMnIiwgZGJ1c19tZXNzYWdlX2l0ZXJfZ2V0X2FyZ190eXBlKCZpdGVyKSk7CisgICAgcmVzdWx0ID0gMDsKKyAgICBnb3RvIG91dDsKKyAgfQorICBkYnVzX21lc3NhZ2VfaXRlcl9nZXRfYmFzaWMoJml0ZXIsICZyZXN1bHQpOworCitvdXQ6CisgIGRidXNfbWVzc2FnZV91bnJlZihyZXBseSk7CisgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBpbnQKK2hpZ2hsaWdodFJlZ2lvbl9BdFNwaTJTY3JlZW4gKGludCBsZWZ0LCBpbnQgcmlnaHQsIGludCB0b3AsIGludCBib3R0b20pIHsKKyAgaW50IGJlZ2luLCBlbmQ7CisKKyAgLyogSXQgaXMgc2FmZSB0byBwbGF5IHdpdGggc2VsZWN0aW9ucyBvbmx5IHdpdGggdGVybWluYWxzICovCisgIGlmICghaXNUZXJtaW5hbCgpKSByZXR1cm4gMDsKKworICBpZiAodG9wICE9IGJvdHRvbSkKKyAgICAvKiBBdFNwaSBzZWxlY3Rpb24gb25seSBzdXBwb3J0cyBsaW5lYXIgc2VsZWN0aW9uICovCisgICAgcmV0dXJuIDA7CisKKyAgYmVnaW4gPSBmaW5kQ29vcmRpbmF0ZXMobGVmdCwgdG9wKTsKKyAgaWYgKGJlZ2luID09IC0xKQorICAgIHJldHVybiAwOworICBlbmQgPSBmaW5kQ29vcmRpbmF0ZXMocmlnaHQsIGJvdHRvbSk7CisgIGlmIChlbmQgPT0gLTEpCisgICAgcmV0dXJuIDA7CisKKyAgcmV0dXJuIHNldFNlbGVjdGlvbl9BdFNwaTJTY3JlZW4oYmVnaW4sIGVuZCsxKTsKK30KKworc3RhdGljIGludAordW5oaWdobGlnaHRSZWdpb25fQXRTcGkyU2NyZWVuICh2b2lkKSB7CisgIC8qIEl0IGlzIHNhZmUgdG8gcGxheSB3aXRoIHNlbGVjdGlvbnMgb25seSB3aXRoIHRlcm1pbmFscyAqLworICBpZiAoIWlzVGVybWluYWwoKSkgcmV0dXJuIDA7CisKKyAgcmV0dXJuIHNldFNlbGVjdGlvbl9BdFNwaTJTY3JlZW4oMCwgMCk7Cit9CisKK3N0YXRpYyB2b2lkCitzY3JfaW5pdGlhbGl6ZSAoTWFpblNjcmVlbiAqbWFpbikgeworICBpbml0aWFsaXplUmVhbFNjcmVlbihtYWluKTsKKyAgbWFpbi0+YmFzZS5wb2xsID0gcG9sbF9BdFNwaTJTY3JlZW47CisgIG1haW4tPmJhc2UucmVmcmVzaCA9IHJlZnJlc2hfQXRTcGkyU2NyZWVuOworICBtYWluLT5iYXNlLmRlc2NyaWJlID0gZGVzY3JpYmVfQXRTcGkyU2NyZWVuOworICBtYWluLT5iYXNlLnJlYWRDaGFyYWN0ZXJzID0gcmVhZENoYXJhY3RlcnNfQXRTcGkyU2NyZWVuOworICBtYWluLT5iYXNlLmluc2VydEtleSA9IGluc2VydEtleV9BdFNwaTJTY3JlZW47CisgIG1haW4tPmJhc2UuaGlnaGxpZ2h0UmVnaW9uID0gaGlnaGxpZ2h0UmVnaW9uX0F0U3BpMlNjcmVlbjsKKyAgbWFpbi0+YmFzZS51bmhpZ2hsaWdodFJlZ2lvbiA9IHVuaGlnaGxpZ2h0UmVnaW9uX0F0U3BpMlNjcmVlbjsKKyAgbWFpbi0+YmFzZS5jdXJyZW50VmlydHVhbFRlcm1pbmFsID0gY3VycmVudFZpcnR1YWxUZXJtaW5hbF9BdFNwaTJTY3JlZW47CisgIG1haW4tPnByb2Nlc3NQYXJhbWV0ZXJzID0gcHJvY2Vzc1BhcmFtZXRlcnNfQXRTcGkyU2NyZWVuOworICBtYWluLT5jb25zdHJ1Y3QgPSBjb25zdHJ1Y3RfQXRTcGkyU2NyZWVuOworICBtYWluLT5kZXN0cnVjdCA9IGRlc3RydWN0X0F0U3BpMlNjcmVlbjsKK30KZGlmZiAtLWdpdCBhL0RyaXZlcnMvU2NyZWVuL0ZpbGVWaWV3ZXIvTWFrZWZpbGUuaW4gYi9Ecml2ZXJzL1NjcmVlbi9GaWxlVmlld2VyL01ha2VmaWxlLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQyZjdjODkKLS0tIC9kZXYvbnVsbAorKysgYi9Ecml2ZXJzL1NjcmVlbi9GaWxlVmlld2VyL01ha2VmaWxlLmluCkBAIC0wLDAgKzEsMjggQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyMgICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisjCisjIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyMKKyMgQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitEUklWRVJfQ09ERSA9IGZ2CitEUklWRVJfTkFNRSA9IEZpbGVWaWV3ZXIKK0RSSVZFUl9VU0FHRSA9IGZpbGUgdmlld2VyCitEUklWRVJfVkVSU0lPTiA9IAorRFJJVkVSX0RFVkVMT1BFUlMgPSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+CitpbmNsdWRlICQoU1JDX1RPUClzY3JlZW4ubWsKKworc2NyZWVuLiRPOgorCSQoQ0MpICQoU0NSX0NGTEFHUykgLWMgJChTUkNfRElSKS9zY3JlZW4uYworCmRpZmYgLS1naXQgYS9Ecml2ZXJzL1NjcmVlbi9GaWxlVmlld2VyL3NjcmVlbi5jIGIvRHJpdmVycy9TY3JlZW4vRmlsZVZpZXdlci9zY3JlZW4uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NGI3NWI0Ci0tLSAvZGV2L251bGwKKysrIGIvRHJpdmVycy9TY3JlZW4vRmlsZVZpZXdlci9zY3JlZW4uYwpAQCAtMCwwICsxLDM5NyBAQAorLyoKKyAqIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisgKiAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisgKgorICogQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKKyNpbmNsdWRlICJwcm9sb2d1ZS5oIgorCisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxmY250bC5oPgorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisKKyNpbmNsdWRlICJsb2cuaCIKKyNpbmNsdWRlICJhbGVydC5oIgorI2luY2x1ZGUgInN0cmZtdC5oIgorI2luY2x1ZGUgInV0ZjguaCIKKyNpbmNsdWRlICJicmxfY21kcy5oIgorI2luY2x1ZGUgImVtYmVkLmgiCisKK3R5cGVkZWYgZW51bSB7CisgIFBBUk1fRklMRSwKK30gU2NyZWVuUGFyYW1ldGVyczsKKworI2RlZmluZSBTQ1JQQVJNUyAiZmlsZSIKKyNpbmNsdWRlICJzY3JfZHJpdmVyLmgiCisKK3N0YXRpYyBjb25zdCBjaGFyICpmaWxlUGF0aDsKK3N0YXRpYyB3Y2hhcl90ICpmaWxlQ2hhcmFjdGVyczsKKwordHlwZWRlZiBzdHJ1Y3QgeworICB1bnNpZ25lZCBpbnQgb2Zmc2V0OworICB1bnNpZ25lZCBpbnQgbGVuZ3RoOworfSBMaW5lRGVzY3JpcHRvcjsKKworc3RhdGljIExpbmVEZXNjcmlwdG9yICpsaW5lRGVzY3JpcHRvcnM7CitzdGF0aWMgdW5zaWduZWQgaW50IGxpbmVTaXplOworc3RhdGljIHVuc2lnbmVkIGludCBsaW5lQ291bnQ7CisKK3N0YXRpYyBpbnQgc2NyZWVuV2lkdGg7CitzdGF0aWMgaW50IGN1cnNvck9mZnNldDsKKworc3RhdGljIHZvaWQKK2Rlc3RydWN0X0ZpbGVWaWV3ZXJTY3JlZW4gKHZvaWQpIHsKKyAgYnJsdHR5RGlzYWJsZUludGVycnVwdCgpOworCisgIGlmIChsaW5lRGVzY3JpcHRvcnMpIHsKKyAgICBmcmVlKGxpbmVEZXNjcmlwdG9ycyk7CisgICAgbGluZURlc2NyaXB0b3JzID0gTlVMTDsKKyAgfQorCisgIGlmIChmaWxlQ2hhcmFjdGVycykgeworICAgIGZyZWUoZmlsZUNoYXJhY3RlcnMpOworICAgIGZpbGVDaGFyYWN0ZXJzID0gTlVMTDsKKyAgfQorfQorCitzdGF0aWMgaW50Citwcm9jZXNzUGFyYW1ldGVyc19GaWxlVmlld2VyU2NyZWVuIChjaGFyICoqcGFyYW1ldGVycykgeworICBmaWxlUGF0aCA9IHBhcmFtZXRlcnNbUEFSTV9GSUxFXTsKKyAgaWYgKGZpbGVQYXRoICYmICEqZmlsZVBhdGgpIGZpbGVQYXRoID0gTlVMTDsKKworICByZXR1cm4gMTsKK30KKworc3RhdGljIGludAorYWRkTGluZSAoY29uc3Qgd2NoYXJfdCAqZnJvbSwgY29uc3Qgd2NoYXJfdCAqdG8pIHsKKyAgc2l6ZV90IGxpbmVMZW5ndGggPSB0byAtIGZyb207CisgIGlmIChsaW5lTGVuZ3RoID4gc2NyZWVuV2lkdGgpIHNjcmVlbldpZHRoID0gbGluZUxlbmd0aDsKKworICBpZiAobGluZUNvdW50ID09IGxpbmVTaXplKSB7CisgICAgc2l6ZV90IG5ld1NpemUgPSBsaW5lU2l6ZT8gbGluZVNpemU8PDE6IDBYODA7CisgICAgTGluZURlc2NyaXB0b3IgKm5ld0FycmF5ID0gcmVhbGxvYyhsaW5lRGVzY3JpcHRvcnMsIEFSUkFZX1NJWkUobGluZURlc2NyaXB0b3JzLCBuZXdTaXplKSk7CisKKyAgICBpZiAoIW5ld0FycmF5KSB7CisgICAgICBsb2dNYWxsb2NFcnJvcigpOworICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgbGluZURlc2NyaXB0b3JzID0gbmV3QXJyYXk7CisgICAgbGluZVNpemUgPSBuZXdTaXplOworICB9CisKKyAgTGluZURlc2NyaXB0b3IgKmxpbmUgPSAmbGluZURlc2NyaXB0b3JzW2xpbmVDb3VudCsrXTsKKyAgbGluZS0+b2Zmc2V0ID0gZnJvbSAtIGZpbGVDaGFyYWN0ZXJzOworICBsaW5lLT5sZW5ndGggPSB0byAtIGZyb207CisKKyAgcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQKK3NldFNjcmVlbkNvbnRlbnQgKGNvbnN0IGNoYXIgKnRleHQpIHsKKyAgdW5zaWduZWQgaW50IGNoYXJhY3RlckNvdW50ID0gY291bnRVdGY4Q2hhcmFjdGVycyh0ZXh0KTsKKyAgZmlsZUNoYXJhY3RlcnMgPSBtYWxsb2MoY2hhcmFjdGVyQ291bnQgKiBzaXplb2YoKmZpbGVDaGFyYWN0ZXJzKSk7CisKKyAgaWYgKGZpbGVDaGFyYWN0ZXJzKSB7CisgICAgbWFrZVdjaGFyc0Zyb21VdGY4KHRleHQsIGZpbGVDaGFyYWN0ZXJzLCBjaGFyYWN0ZXJDb3VudCk7CisKKyAgICBjb25zdCB3Y2hhcl90ICpjdXJyZW50ID0gZmlsZUNoYXJhY3RlcnM7CisgICAgY29uc3Qgd2NoYXJfdCAqZW5kID0gY3VycmVudCArIGNoYXJhY3RlckNvdW50OworCisgICAgd2hpbGUgKGN1cnJlbnQgPCBlbmQpIHsKKyAgICAgIHdjaGFyX3QgKm5leHQgPSB3Y3NjaHIoY3VycmVudCwgV0NfQygnXG4nKSk7CisKKyAgICAgIGlmICghbmV4dCkgeworICAgICAgICBpZiAoIWFkZExpbmUoY3VycmVudCwgZW5kKSkgcmV0dXJuIDA7CisgICAgICAgIGJyZWFrOworICAgICAgfQorCisgICAgICBpZiAoIWFkZExpbmUoY3VycmVudCwgbmV4dCkpIHJldHVybiAwOworICAgICAgY3VycmVudCA9IG5leHQgKyAxOworICAgIH0KKworICAgIHJldHVybiAxOworICB9IGVsc2UgeworICAgIGxvZ01hbGxvY0Vycm9yKCk7CisgIH0KKworICByZXR1cm4gMDsKK30KKworc3RhdGljIGludAorbG9hZEZpbGUgKHZvaWQpIHsKKyAgY29uc3QgY2hhciAqcHJvYmxlbSA9IE5VTEw7CisKKyAgaWYgKGZpbGVQYXRoKSB7CisgICAgc3RydWN0IHN0YXQgc3RhdHVzOworCisgICAgaWYgKHN0YXQoZmlsZVBhdGgsICZzdGF0dXMpICE9IC0xKSB7CisgICAgICBzaXplX3QgZmlsZVNpemUgPSBzdGF0dXMuc3Rfc2l6ZTsKKyAgICAgIGNoYXIgKnRleHQgPSBtYWxsb2MoZmlsZVNpemUgKyAxKTsKKworICAgICAgaWYgKHRleHQpIHsKKyAgICAgICAgaW50IGZpbGVEZXNjcmlwdG9yID0gb3BlbihmaWxlUGF0aCwgT19SRE9OTFkpOworCisgICAgICAgIGlmIChmaWxlRGVzY3JpcHRvciAhPSAtMSkgeworICAgICAgICAgIHNzaXplX3QgcmVzdWx0ID0gcmVhZChmaWxlRGVzY3JpcHRvciwgdGV4dCwgZmlsZVNpemUpOworCisgICAgICAgICAgaWYgKHJlc3VsdCAhPSAtMSkgeworICAgICAgICAgICAgaWYgKHJlc3VsdCA8IGZpbGVTaXplKSBmaWxlU2l6ZSA9IHJlc3VsdDsKKyAgICAgICAgICAgIHRleHRbZmlsZVNpemVdID0gMDsKKyAgICAgICAgICAgIHNldFNjcmVlbkNvbnRlbnQodGV4dCk7CisgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHByb2JsZW0gPSBzdHJlcnJvcihlcnJubyk7CisgICAgICAgICAgfQorCisgICAgICAgICAgY2xvc2UoZmlsZURlc2NyaXB0b3IpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgIHByb2JsZW0gPSBzdHJlcnJvcihlcnJubyk7CisgICAgICAgIH0KKworICAgICAgICBmcmVlKHRleHQpOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgcHJvYmxlbSA9IHN0cmVycm9yKGVycm5vKTsKKyAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgcHJvYmxlbSA9IHN0cmVycm9yKGVycm5vKTsKKyAgICB9CisgIH0gZWxzZSB7CisgICAgcHJvYmxlbSA9IGdldHRleHQoImZpbGUgbm90IHNwZWNpZmllZCIpOworICAgIGZpbGVQYXRoID0gTlVMTDsKKyAgfQorCisgIGlmICghcHJvYmxlbSkgcmV0dXJuIDE7CisgIGNoYXIgbG9nWzBYMTAwXTsKKyAgU1RSX0JFR0lOKGxvZywgc2l6ZW9mKGxvZykpOworCisgIGlmIChmaWxlUGF0aCkgU1RSX1BSSU5URigiJXM6ICIsIGZpbGVQYXRoKTsKKyAgU1RSX1BSSU5URigiJXMiLCBwcm9ibGVtKTsKKworICBTVFJfRU5EOworICBsb2dNZXNzYWdlKExPR19XQVJOSU5HLCAiJXMiLCBsb2cpOworCisgIHNldFNjcmVlbkNvbnRlbnQobG9nKTsKKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK2NvbnN0cnVjdF9GaWxlVmlld2VyU2NyZWVuICh2b2lkKSB7CisgIGZpbGVDaGFyYWN0ZXJzID0gTlVMTDsKKworICBsaW5lRGVzY3JpcHRvcnMgPSBOVUxMOworICBsaW5lU2l6ZSA9IDA7CisgIGxpbmVDb3VudCA9IDA7CisKKyAgc2NyZWVuV2lkdGggPSAwOworICBjdXJzb3JPZmZzZXQgPSAwOworCisgIGxvYWRGaWxlKCk7CisgIGJybHR0eUVuYWJsZUludGVycnVwdCgpOworICByZXR1cm4gMTsKK30KKworc3RhdGljIGludAorcG9sbF9GaWxlVmlld2VyU2NyZWVuICh2b2lkKSB7CisgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50CityZWZyZXNoX0ZpbGVWaWV3ZXJTY3JlZW4gKHZvaWQpIHsKKyAgcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQKK3RvU2NyZWVuUm93IChpbnQgb2Zmc2V0KSB7CisgIHJldHVybiBvZmZzZXQgLyBzY3JlZW5XaWR0aDsKK30KKworc3RhdGljIGludAordG9TY3JlZW5Db2x1bW4gKGludCBvZmZzZXQpIHsKKyAgcmV0dXJuIG9mZnNldCAlIHNjcmVlbldpZHRoOworfQorCitzdGF0aWMgdm9pZAorZGVzY3JpYmVfRmlsZVZpZXdlclNjcmVlbiAoU2NyZWVuRGVzY3JpcHRpb24gKmRlc2NyaXB0aW9uKSB7CisgIGRlc2NyaXB0aW9uLT5yb3dzID0gbGluZUNvdW50OworICBkZXNjcmlwdGlvbi0+Y29scyA9IHNjcmVlbldpZHRoOworICBkZXNjcmlwdGlvbi0+cG9zeSA9IHRvU2NyZWVuUm93KGN1cnNvck9mZnNldCk7CisgIGRlc2NyaXB0aW9uLT5wb3N4ID0gdG9TY3JlZW5Db2x1bW4oY3Vyc29yT2Zmc2V0KTsKK30KKworc3RhdGljIGludAorcmVhZENoYXJhY3RlcnNfRmlsZVZpZXdlclNjcmVlbiAoY29uc3QgU2NyZWVuQm94ICpib3gsIFNjcmVlbkNoYXJhY3RlciAqYnVmZmVyKSB7CisgIGlmICh2YWxpZGF0ZVNjcmVlbkJveChib3gsIHNjcmVlbldpZHRoLCBsaW5lQ291bnQpKSB7CisgICAgU2NyZWVuQ2hhcmFjdGVyICp0YXJnZXQgPSBidWZmZXI7CisKKyAgICBmb3IgKHVuc2lnbmVkIGludCByb3c9MDsgcm93PGJveC0+aGVpZ2h0OyByb3crPTEpIHsKKyAgICAgIGNvbnN0IExpbmVEZXNjcmlwdG9yICpsaW5lID0gJmxpbmVEZXNjcmlwdG9yc1tib3gtPnRvcCArIHJvd107CisKKyAgICAgIHVuc2lnbmVkIGludCBmcm9tID0gYm94LT5sZWZ0OworICAgICAgdW5zaWduZWQgaW50IHRvID0gZnJvbSArIGJveC0+d2lkdGg7CisKKyAgICAgIGZvciAodW5zaWduZWQgaW50IGNvbHVtbj1mcm9tOyBjb2x1bW48dG87IGNvbHVtbis9MSkgeworICAgICAgICB0YXJnZXQtPnRleHQgPSAoY29sdW1uIDwgbGluZS0+bGVuZ3RoKT8gZmlsZUNoYXJhY3RlcnNbbGluZS0+b2Zmc2V0ICsgY29sdW1uXTogV0NfQygnICcpOworICAgICAgICB0YXJnZXQtPmF0dHJpYnV0ZXMgPSBTQ1JfQ09MT1VSX0RFRkFVTFQ7CisgICAgICAgIHRhcmdldCArPSAxOworICAgICAgfQorICAgIH0KKworICAgIHJldHVybiAxOworICB9CisKKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK3RvU2NyZWVuT2Zmc2V0IChpbnQgcm93LCBpbnQgY29sdW1uKSB7CisgIHJldHVybiAocm93ICogc2NyZWVuV2lkdGgpICsgY29sdW1uOworfQorCitzdGF0aWMgaW50Cityb3V0ZUN1cnNvcl9GaWxlVmlld2VyU2NyZWVuIChpbnQgY29sdW1uLCBpbnQgcm93LCBpbnQgc2NyZWVuKSB7CisgIGN1cnNvck9mZnNldCA9IHRvU2NyZWVuT2Zmc2V0KHJvdywgY29sdW1uKTsKKyAgcmV0dXJuIDE7Cit9CisKK3N0YXRpYyB2b2lkCittb3ZlQ3Vyc29yIChpbnQgYW1vdW50KSB7CisgIGludCBuZXdPZmZzZXQgPSBjdXJzb3JPZmZzZXQgKyBhbW91bnQ7CisKKyAgaWYgKChuZXdPZmZzZXQgPj0gMCkgJiYgKG5ld09mZnNldCA8IChsaW5lQ291bnQgKiBzY3JlZW5XaWR0aCkpKSB7CisgICAgY3Vyc29yT2Zmc2V0ID0gbmV3T2Zmc2V0OworICB9IGVsc2UgeworICAgIGFsZXJ0KEFMRVJUX0NPTU1BTkRfUkVKRUNURUQpOworICB9Cit9CisKK3N0YXRpYyBpbnQKK2lzQmxhbmtSb3cgKGludCByb3cpIHsKKyAgY29uc3QgTGluZURlc2NyaXB0b3IgKmxpbmUgPSAmbGluZURlc2NyaXB0b3JzW3Jvd107CisgIGNvbnN0IHdjaGFyX3QgKmNoYXJhY3RlciA9ICZmaWxlQ2hhcmFjdGVyc1tsaW5lLT5vZmZzZXRdOworICBjb25zdCB3Y2hhcl90ICplbmQgPSBjaGFyYWN0ZXIgKyBsaW5lLT5sZW5ndGg7CisKKyAgd2hpbGUgKGNoYXJhY3RlciA8IGVuZCkgeworICAgIGlmICghaXN3c3BhY2UoKmNoYXJhY3RlcikpIHJldHVybiAwOworICAgIGNoYXJhY3RlciArPSAxOworICB9CisKKyAgcmV0dXJuIDE7Cit9CisKK3N0YXRpYyB2b2lkCitmaW5kUHJldmlvdXNQYXJhZ3JhcGggKHZvaWQpIHsKKyAgaW50IHdhc0JsYW5rID0gMTsKKyAgaW50IHJvdyA9IHRvU2NyZWVuUm93KGN1cnNvck9mZnNldCk7CisKKyAgd2hpbGUgKHJvdyA+IDApIHsKKyAgICBpbnQgaXNCbGFuayA9IGlzQmxhbmtSb3coLS1yb3cpOworCisgICAgaWYgKGlzQmxhbmsgIT0gd2FzQmxhbmspIHsKKyAgICAgIGlmICgod2FzQmxhbmsgPSBpc0JsYW5rKSkgeworICAgICAgICBjdXJzb3JPZmZzZXQgPSB0b1NjcmVlbk9mZnNldChyb3crMSwgMCk7CisgICAgICAgIHJldHVybjsKKyAgICAgIH0KKyAgICB9CisgIH0KKworICBpZiAod2FzQmxhbmspIHsKKyAgICBhbGVydChBTEVSVF9DT01NQU5EX1JFSkVDVEVEKTsKKyAgfSBlbHNlIHsKKyAgICBjdXJzb3JPZmZzZXQgPSB0b1NjcmVlbk9mZnNldChyb3csIDApOworICB9Cit9CisKK3N0YXRpYyB2b2lkCitmaW5kTmV4dFBhcmFncmFwaCAodm9pZCkgeworICBpbnQgd2FzQmxhbmsgPSAwOworICBpbnQgcm93ID0gdG9TY3JlZW5Sb3coY3Vyc29yT2Zmc2V0KTsKKworICB3aGlsZSAocm93IDwgbGluZUNvdW50KSB7CisgICAgaW50IGlzQmxhbmsgPSBpc0JsYW5rUm93KHJvdyk7CisKKyAgICBpZiAoaXNCbGFuayAhPSB3YXNCbGFuaykgeworICAgICAgaWYgKCEod2FzQmxhbmsgPSBpc0JsYW5rKSkgeworICAgICAgICBjdXJzb3JPZmZzZXQgPSB0b1NjcmVlbk9mZnNldChyb3csIDApOworICAgICAgICByZXR1cm47CisgICAgICB9CisgICAgfQorCisgICAgcm93ICs9IDE7CisgIH0KKworICBhbGVydChBTEVSVF9DT01NQU5EX1JFSkVDVEVEKTsKK30KKworc3RhdGljIGludAoraGFuZGxlQ29tbWFuZF9GaWxlVmlld2VyU2NyZWVuIChpbnQgY29tbWFuZCkgeworICBzd2l0Y2ggKGNvbW1hbmQpIHsKKyAgICBjYXNlIEJSTF9DTURfS0VZKEVTQ0FQRSk6CisgICAgICBicmx0dHlJbnRlcnJ1cHQoV0FJVF9TVE9QKTsKKyAgICAgIHJldHVybiAxOworCisgICAgY2FzZSBCUkxfQ01EX0tFWShDVVJTT1JfTEVGVCk6CisgICAgICBtb3ZlQ3Vyc29yKC0xKTsKKyAgICAgIHJldHVybiAxOworCisgICAgY2FzZSBCUkxfQ01EX0tFWShDVVJTT1JfUklHSFQpOgorICAgICAgbW92ZUN1cnNvcigxKTsKKyAgICAgIHJldHVybiAxOworCisgICAgY2FzZSBCUkxfQ01EX0tFWShDVVJTT1JfVVApOgorICAgICAgbW92ZUN1cnNvcigtc2NyZWVuV2lkdGgpOworICAgICAgcmV0dXJuIDE7CisKKyAgICBjYXNlIEJSTF9DTURfS0VZKENVUlNPUl9ET1dOKToKKyAgICAgIG1vdmVDdXJzb3Ioc2NyZWVuV2lkdGgpOworICAgICAgcmV0dXJuIDE7CisKKyAgICBjYXNlIEJSTF9DTURfS0VZKFBBR0VfVVApOgorICAgICAgZmluZFByZXZpb3VzUGFyYWdyYXBoKCk7CisgICAgICByZXR1cm4gMTsKKworICAgIGNhc2UgQlJMX0NNRF9LRVkoUEFHRV9ET1dOKToKKyAgICAgIGZpbmROZXh0UGFyYWdyYXBoKCk7CisgICAgICByZXR1cm4gMTsKKworICAgIGNhc2UgQlJMX0NNRF9LRVkoSE9NRSk6CisgICAgICBjdXJzb3JPZmZzZXQgPSAwOworICAgICAgcmV0dXJuIDE7CisKKyAgICBjYXNlIEJSTF9DTURfS0VZKEVORCk6CisgICAgICBjdXJzb3JPZmZzZXQgPSB0b1NjcmVlbk9mZnNldChsaW5lQ291bnQtMSwgMCk7CisgICAgICByZXR1cm4gMTsKKyAgfQorCisgIHJldHVybiAwOworfQorCitzdGF0aWMgdm9pZAorc2NyX2luaXRpYWxpemUgKE1haW5TY3JlZW4gKm1haW4pIHsKKyAgaW5pdGlhbGl6ZVJlYWxTY3JlZW4obWFpbik7CisKKyAgbWFpbi0+YmFzZS5wb2xsID0gcG9sbF9GaWxlVmlld2VyU2NyZWVuOworICBtYWluLT5iYXNlLnJlZnJlc2ggPSByZWZyZXNoX0ZpbGVWaWV3ZXJTY3JlZW47CisKKyAgbWFpbi0+YmFzZS5kZXNjcmliZSA9IGRlc2NyaWJlX0ZpbGVWaWV3ZXJTY3JlZW47CisgIG1haW4tPmJhc2UucmVhZENoYXJhY3RlcnMgPSByZWFkQ2hhcmFjdGVyc19GaWxlVmlld2VyU2NyZWVuOworCisgIG1haW4tPmJhc2Uucm91dGVDdXJzb3IgPSByb3V0ZUN1cnNvcl9GaWxlVmlld2VyU2NyZWVuOworICBtYWluLT5iYXNlLmhhbmRsZUNvbW1hbmQgPSBoYW5kbGVDb21tYW5kX0ZpbGVWaWV3ZXJTY3JlZW47CisKKyAgbWFpbi0+cHJvY2Vzc1BhcmFtZXRlcnMgPSBwcm9jZXNzUGFyYW1ldGVyc19GaWxlVmlld2VyU2NyZWVuOworICBtYWluLT5jb25zdHJ1Y3QgPSBjb25zdHJ1Y3RfRmlsZVZpZXdlclNjcmVlbjsKKyAgbWFpbi0+ZGVzdHJ1Y3QgPSBkZXN0cnVjdF9GaWxlVmlld2VyU2NyZWVuOworfQpkaWZmIC0tZ2l0IGEvRHJpdmVycy9TY3JlZW4vR3J1Yi9NYWtlZmlsZS5pbiBiL0RyaXZlcnMvU2NyZWVuL0dydWIvTWFrZWZpbGUuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDViNzI4NgotLS0gL2Rldi9udWxsCisrKyBiL0RyaXZlcnMvU2NyZWVuL0dydWIvTWFrZWZpbGUuaW4KQEAgLTAsMCArMSwyOCBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorIyAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyMKKyMgQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorIworIyBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorIworIyBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisjIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyMgbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisjCisjIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK0RSSVZFUl9DT0RFID0gZ2IKK0RSSVZFUl9OQU1FID0gR3J1YgorRFJJVkVSX1VTQUdFID0gR3J1YiBib290IGxvYWRlcgorRFJJVkVSX1ZFUlNJT04gPSAKK0RSSVZFUl9ERVZFTE9QRVJTID0gCitpbmNsdWRlICQoU1JDX1RPUClzY3JlZW4ubWsKKworc2NyZWVuLiRPOgorCSQoQ0MpICQoU0NSX0NGTEFHUykgLWMgJChTUkNfRElSKS9zY3JlZW4uYworCmRpZmYgLS1naXQgYS9Ecml2ZXJzL1NjcmVlbi9HcnViL3NjcmVlbi5jIGIvRHJpdmVycy9TY3JlZW4vR3J1Yi9zY3JlZW4uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kODEwZDgyCi0tLSAvZGV2L251bGwKKysrIGIvRHJpdmVycy9TY3JlZW4vR3J1Yi9zY3JlZW4uYwpAQCAtMCwwICsxLDI4IEBACisvKgorICogQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyAqICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyAqCisgKiBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorICoKKyAqIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyAqCisgKiBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisgKi8KKworI2luY2x1ZGUgInByb2xvZ3VlLmgiCisKKyNpbmNsdWRlIDxzdGRpby5oPgorCisjaW5jbHVkZSAic2NyX2RyaXZlci5oIgorCitzdGF0aWMgdm9pZAorc2NyX2luaXRpYWxpemUgKE1haW5TY3JlZW4gKm1haW4pIHsKKyAgaW5pdGlhbGl6ZVJlYWxTY3JlZW4obWFpbik7Cit9CmRpZmYgLS1naXQgYS9Ecml2ZXJzL1NjcmVlbi9IdXJkL01ha2VmaWxlLmluIGIvRHJpdmVycy9TY3JlZW4vSHVyZC9NYWtlZmlsZS5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MmM4NzBlCi0tLSAvZGV2L251bGwKKysrIGIvRHJpdmVycy9TY3JlZW4vSHVyZC9NYWtlZmlsZS5pbgpAQCAtMCwwICsxLDI4IEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisjICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorIworIyBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisjCisjIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisjCisjIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyMgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorIyBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyMKKyMgV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworIworIyBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworRFJJVkVSX0NPREUgPSBoZAorRFJJVkVSX05BTUUgPSBIdXJkCitEUklWRVJfVVNBR0UgPSBUaGUgSHVyZAorRFJJVkVSX1ZFUlNJT04gPSAKK0RSSVZFUl9ERVZFTE9QRVJTID0gCitpbmNsdWRlICQoU1JDX1RPUClzY3JlZW4ubWsKKworc2NyZWVuLiRPOgorCSQoQ0MpICQoU0NSX0NGTEFHUykgLWMgJChTUkNfRElSKS9zY3JlZW4uYworCmRpZmYgLS1naXQgYS9Ecml2ZXJzL1NjcmVlbi9IdXJkL3NjcmVlbi5jIGIvRHJpdmVycy9TY3JlZW4vSHVyZC9zY3JlZW4uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NmVjMzcwCi0tLSAvZGV2L251bGwKKysrIGIvRHJpdmVycy9TY3JlZW4vSHVyZC9zY3JlZW4uYwpAQCAtMCwwICsxLDQ0NyBAQAorLyoKKyAqIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisgKiAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisgKgorICogQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKKyNpbmNsdWRlICJwcm9sb2d1ZS5oIgorCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKyNpbmNsdWRlIDxzeXMvaW9jdGwuaD4KKyNpbmNsdWRlIDxzeXMvbW1hbi5oPgorI2luY2x1ZGUgPGh1cmQvY29uc29sZS5oPgorCisjaW5jbHVkZSAibG9nLmgiCisjaW5jbHVkZSAiYnJsX2NtZHMuaCIKKyNpbmNsdWRlICJ1dGY4LmgiCisKKyNpbmNsdWRlICJzY3JfZHJpdmVyLmgiCisjaW5jbHVkZSAic2NyZWVuLmgiCisjaW5jbHVkZSAidW5pY29kZS5oIgorCitzdGF0aWMgY2hhciAqCit2dFBhdGggKGNvbnN0IGNoYXIgKmJhc2UsIHVuc2lnbmVkIGNoYXIgdnQpIHsKKyAgc2l6ZV90IGxlbmd0aCA9IHN0cmxlbihiYXNlKTsKKyAgY2hhciBidWZmZXJbbGVuZ3RoKzFdOworICBzbnByaW50ZihidWZmZXIsIGxlbmd0aCwgYmFzZSwgdnQpOworICBidWZmZXJbbGVuZ3RoXSA9IDA7CisgIHJldHVybiBzdHJkdXAoYnVmZmVyKTsKK30KKworc3RhdGljIGludAorY3VycmVudFZ0KHZvaWQpIHsKKyAgY2hhciBsaW5rW109SFVSRF9WQ1NESVIgIi8wMCI7CisgIGNoYXIgKmMsKmQ7CisgIGludCBzaXplLHJldDsKKyAgaWYgKChzaXplID0gcmVhZGxpbmsoSFVSRF9DVVJWQ1NQQVRILGxpbmssc2l6ZW9mKGxpbmspKSkgPT0gLTEpIHsKKyAgICAvKiBjb25zb2xlIG1heSBub3QgYmUgc3RhcnRlZCB5ZXQgb3IgaW4gWCBtb2RlLCBkb24ndCBmbG9vZCAqLworICAgIGlmIChlcnJubyAhPSBFTk9FTlQgJiYgZXJybm8gIT0gRU5PVERJUiAmJiBlcnJubyAhPSBFTk9ERVYpCisgICAgICBsb2dTeXN0ZW1FcnJvcigicmVhZGluZyAiIEhVUkRfQ1VSVkNTUEFUSCAiIGxpbmsiKTsKKyAgICByZXR1cm4gMTsKKyAgfQorICBsaW5rW3NpemVdPSdcMCc7CisgIGlmICghKGMgPSBzdHJyY2hyKGxpbmssJy8nKSkpCisgICAgYyA9IGxpbms7CisgIGVsc2UKKyAgICBjKys7CisgIGlmICghKmMpCisgICAgLyogYmFkIG51bWJlciAqLworICAgIHJldHVybiAxOworICByZXQgPSBzdHJ0b2woYywmZCwxMCk7CisgIGlmICgqZCkKKyAgICAvKiBiYWQgbnVtYmVyICovCisgICAgcmV0dXJuIDE7CisgIHJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQKK29wZW5EZXZpY2UgKGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IGNoYXIgKmRlc2NyaXB0aW9uLCBpbnQgZmxhZ3MpIHsKKyAgaW50IGZpbGU7CisgIGxvZ01lc3NhZ2UoTE9HX0RFQlVHLCAiT3BlbmluZyAlcyBkZXZpY2U6ICVzIiwgZGVzY3JpcHRpb24sIHBhdGgpOworICBpZiAoKGZpbGUgPSBvcGVuKHBhdGgsIGZsYWdzKSkgPT0gLTEpIHsKKyAgICBsb2dNZXNzYWdlKExPR19FUlIsICJDYW5ub3Qgb3BlbiAlcyBkZXZpY2U6ICVzOiAlcyIsCisgICAgICAgICAgICAgICBkZXNjcmlwdGlvbiwgcGF0aCwgc3RyZXJyb3IoZXJybm8pKTsKKyAgfQorICByZXR1cm4gZmlsZTsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IGNvbnNvbGVQYXRoID0gSFVSRF9JTlBVVFBBVEg7CitzdGF0aWMgaW50IGNvbnNvbGVEZXNjcmlwdG9yOworCitzdGF0aWMgdm9pZAorY2xvc2VDb25zb2xlICh2b2lkKSB7CisgIGlmIChjb25zb2xlRGVzY3JpcHRvciAhPSAtMSkgeworICAgIGlmIChjbG9zZShjb25zb2xlRGVzY3JpcHRvcikgPT0gLTEpIHsKKyAgICAgIGxvZ1N5c3RlbUVycm9yKCJDb25zb2xlIGNsb3NlIik7CisgICAgfQorICAgIGxvZ01lc3NhZ2UoTE9HX0RFQlVHLCAiQ29uc29sZSBjbG9zZWQ6IGZkPSVkIiwgY29uc29sZURlc2NyaXB0b3IpOworICAgIGNvbnNvbGVEZXNjcmlwdG9yID0gLTE7CisgIH0KK30KKworc3RhdGljIGludAorb3BlbkNvbnNvbGUgKHVuc2lnbmVkIGNoYXIgdnQpIHsKKyAgY2hhciAqcGF0aCA9IHZ0UGF0aChjb25zb2xlUGF0aCwgdnQ/dnQ6Y3VycmVudFZ0KCkpOworICBpZiAocGF0aCkgeworICAgIGludCBjb25zb2xlID0gb3BlbkRldmljZShwYXRoLCAiY29uc29sZSIsIE9fUkRXUnxPX05PQ1RUWSk7CisgICAgaWYgKGNvbnNvbGUgIT0gLTEpIHsKKyAgICAgIGNsb3NlQ29uc29sZSgpOworICAgICAgY29uc29sZURlc2NyaXB0b3IgPSBjb25zb2xlOworICAgICAgbG9nTWVzc2FnZShMT0dfREVCVUcsICJDb25zb2xlIG9wZW5lZDogJXM6IGZkPSVkIiwgcGF0aCwgY29uc29sZURlc2NyaXB0b3IpOworICAgICAgZnJlZShwYXRoKTsKKyAgICAgIHJldHVybiAxOworICAgIH0KKyAgICBsb2dTeXN0ZW1FcnJvcigiQ29uc29sZSBvcGVuIik7CisgICAgZnJlZShwYXRoKTsKKyAgfQorICByZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IHNjcmVlblBhdGggPSBIVVJEX0RJU1BMQVlQQVRIOworc3RhdGljIGludCBzY3JlZW5EZXNjcmlwdG9yOworc3RhdGljIGNvbnN0IHN0cnVjdCBjb25zX2Rpc3BsYXkgKnNjcmVlbk1hcDsKK3N0YXRpYyBzaXplX3Qgc2NyZWVuTWFwU2l6ZTsKKyNkZWZpbmUgc2NyZWVuRGlzcGxheSAoKGNvbmNoYXJfdCAqKSgod2NoYXJfdCAqKSBzY3JlZW5NYXAgKyBzY3JlZW5NYXAtPnNjcmVlbi5tYXRyaXgpKQorc3RhdGljIHVuc2lnbmVkIGNoYXIgdmlydHVhbFRlcm1pbmFsOyAvKiBjdXJyZW50bHkgc2hvd24gKDAgbWVhbnMgc3lzdGVtJ3MpICovCitzdGF0aWMgdW5zaWduZWQgY2hhciBsYXN0UmVhZFZ0OyAvKiBsYXN0IHNob3duICovCisKK3N0YXRpYyB2b2lkCitjbG9zZVNjcmVlbiAodm9pZCkgeworICBpZiAoc2NyZWVuRGVzY3JpcHRvciAhPSAtMSkgeworICAgIGlmIChtdW5tYXAoKHZvaWQgKikgc2NyZWVuTWFwLCBzY3JlZW5NYXBTaXplKSA9PSAtMSkgeworICAgICAgbG9nU3lzdGVtRXJyb3IoIlNjcmVlbiB1bm1hcCIpOworICAgIH0KKyAgICBpZiAoY2xvc2Uoc2NyZWVuRGVzY3JpcHRvcikgPT0gLTEpIHsKKyAgICAgIGxvZ1N5c3RlbUVycm9yKCJTY3JlZW4gY2xvc2UiKTsKKyAgICB9CisgICAgbG9nTWVzc2FnZShMT0dfREVCVUcsICJTY3JlZW4gY2xvc2VkOiBmZD0lZCBtbWFwPSVwIiwgc2NyZWVuRGVzY3JpcHRvciwgc2NyZWVuTWFwKTsKKyAgICBzY3JlZW5EZXNjcmlwdG9yID0gLTE7CisgICAgc2NyZWVuTWFwID0gTlVMTDsKKyAgfQorfQorCitzdGF0aWMgaW50CitvcGVuU2NyZWVuICh1bnNpZ25lZCBjaGFyIHZ0KSB7CisgIGNoYXIgKnBhdGggPSB2dFBhdGgoc2NyZWVuUGF0aCwgdnQ/dnQ6Y3VycmVudFZ0KCkpOworICBpZiAocGF0aCkgeworICAgIGludCBzY3JlZW4gPSBvcGVuRGV2aWNlKHBhdGgsICJzY3JlZW4iLCBPX1JET05MWSk7CisgICAgaWYgKHNjcmVlbiAhPSAtMSkgeworICAgICAgc3RydWN0IHN0YXQgc3Q7CisgICAgICBpZiAoZnN0YXQoc2NyZWVuLCAmc3QpICE9IC0xKSB7CisgICAgICAgIGNvbnN0IHN0cnVjdCBjb25zX2Rpc3BsYXkgKm1hcCA9IG1tYXAoTlVMTCwgc3Quc3Rfc2l6ZSwgUFJPVF9SRUFELCBNQVBfU0hBUkVELCBzY3JlZW4sIDApOworICAgICAgICBpZiAobWFwICE9IE1BUF9GQUlMRUQpIHsKKyAgICAgICAgICBpZiAobWFwLT5tYWdpYyA9PSBDT05TX01BR0lDICYmIG1hcC0+dmVyc2lvbiA+PiBDT05TX1ZFUlNJT05fTUFKX1NISUZUID09MCAmJiBvcGVuQ29uc29sZSh2dCkpIHsKKyAgICAgICAgICAgIGNsb3NlU2NyZWVuKCk7CisgICAgICAgICAgICBzY3JlZW5EZXNjcmlwdG9yID0gc2NyZWVuOworICAgICAgICAgICAgc2NyZWVuTWFwID0gbWFwOworICAgICAgICAgICAgc2NyZWVuTWFwU2l6ZSA9IHN0LnN0X3NpemU7CisgICAgICAgICAgICBsb2dNZXNzYWdlKExPR19ERUJVRywgIlNjcmVlbiBvcGVuZWQ6ICVzOiBmZD0lZCBtYXA9JXAiLCBwYXRoLCBzY3JlZW5EZXNjcmlwdG9yLCBzY3JlZW5NYXApOworICAgICAgICAgICAgZnJlZShwYXRoKTsKKyAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICAgIH0KKyAgICAgICAgICBtdW5tYXAoKHZvaWQgKikgbWFwLCBzdC5zdF9zaXplKTsKKyAgICAgICAgfSBlbHNlIGxvZ1N5c3RlbUVycm9yKCJTY3JlZW4gbWFwIik7CisgICAgICB9IGVsc2UgbG9nU3lzdGVtRXJyb3IoIkdldHRpbmcgc2l6ZSBvZiBTY3JlZW4iKTsKKyAgICAgIGNsb3NlKHNjcmVlbik7CisgICAgfQorICAgIGZyZWUocGF0aCk7CisgIH0KKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK3Byb2Nlc3NQYXJhbWV0ZXJzX0h1cmRTY3JlZW4gKGNoYXIgKipwYXJhbWV0ZXJzKSB7CisgIHJldHVybiAxOworfQorCitzdGF0aWMgaW50Citjb25zdHJ1Y3RfSHVyZFNjcmVlbiAodm9pZCkgeworICBzY3JlZW5EZXNjcmlwdG9yID0gLTE7CisgIGNvbnNvbGVEZXNjcmlwdG9yID0gLTE7CisgIHJldHVybiBvcGVuU2NyZWVuKDApOworfQorCitzdGF0aWMgdm9pZAorZGVzdHJ1Y3RfSHVyZFNjcmVlbiAodm9pZCkgeworICBjbG9zZUNvbnNvbGUoKTsKKyAgY2xvc2VTY3JlZW4oKTsKK30KKworc3RhdGljIHZvaWQKK2dldFNjcmVlbkRlc2NyaXB0aW9uIChTY3JlZW5EZXNjcmlwdGlvbiAqZGVzY3JpcHRpb24pIHsKKyAgZGVzY3JpcHRpb24tPnJvd3MgPSBzY3JlZW5NYXAtPnNjcmVlbi5oZWlnaHQ7CisgIGRlc2NyaXB0aW9uLT5jb2xzID0gc2NyZWVuTWFwLT5zY3JlZW4ud2lkdGg7CisgIGRlc2NyaXB0aW9uLT5wb3N4ID0gc2NyZWVuTWFwLT5jdXJzb3IuY29sOworICBkZXNjcmlwdGlvbi0+cG9zeSA9IHNjcmVlbk1hcC0+Y3Vyc29yLnJvdzsKK30KKworc3RhdGljIHZvaWQKK2dldENvbnNvbGVEZXNjcmlwdGlvbiAoU2NyZWVuRGVzY3JpcHRpb24gKmRlc2NyaXB0aW9uKSB7CisgIGRlc2NyaXB0aW9uLT5udW1iZXIgPSB2aXJ0dWFsVGVybWluYWwgPyB2aXJ0dWFsVGVybWluYWwgOiBjdXJyZW50VnQoKTsKK30KKworc3RhdGljIHZvaWQKK2Rlc2NyaWJlX0h1cmRTY3JlZW4gKFNjcmVlbkRlc2NyaXB0aW9uICpkZXNjcmlwdGlvbikgeworICBnZXRTY3JlZW5EZXNjcmlwdGlvbihkZXNjcmlwdGlvbik7CisgIGdldENvbnNvbGVEZXNjcmlwdGlvbihkZXNjcmlwdGlvbik7Cit9CisKKyNpZm5kZWYgb2Zmc2V0b2YKKyNkZWZpbmUgb2Zmc2V0b2YodHlwZSxmaWVsZCkgKChzaXplX3QpICYoKHR5cGUgKikgMCktPmZpZWxkKQorI2VuZGlmCitzdGF0aWMgaW50CityZWFkQ2hhcmFjdGVyc19IdXJkU2NyZWVuIChjb25zdCBTY3JlZW5Cb3ggKmJveCwgU2NyZWVuQ2hhcmFjdGVyICpidWZmZXIpIHsKKyAgdWludDMyX3QgbGluZXMsIHN0YXJ0LCByb3csIGNvbDsKKyAgU2NyZWVuRGVzY3JpcHRpb24gZGVzY3JpcHRpb247CisgIGRlc2NyaWJlX0h1cmRTY3JlZW4oJmRlc2NyaXB0aW9uKTsKKyAgaWYgKGxhc3RSZWFkVnQgIT0gZGVzY3JpcHRpb24ubnVtYmVyKSB7CisgICAgb3BlblNjcmVlbihkZXNjcmlwdGlvbi5udW1iZXIpOworICAgIGxhc3RSZWFkVnQgPSBkZXNjcmlwdGlvbi5udW1iZXI7CisgIH0KKyAgaWYgKCF2YWxpZGF0ZVNjcmVlbkJveChib3gsIGRlc2NyaXB0aW9uLmNvbHMsIGRlc2NyaXB0aW9uLnJvd3MpKSByZXR1cm4gMDsKKworICBsaW5lcyA9IHNjcmVlbk1hcC0+c2NyZWVuLmxpbmVzOworICBzdGFydCA9IHNjcmVlbk1hcC0+c2NyZWVuLmN1cl9saW5lOworICBmb3IgKHJvdz1zdGFydCtib3gtPnRvcDsgcm93PHN0YXJ0K2JveC0+dG9wK2JveC0+aGVpZ2h0OyArK3JvdykKKyAgICBmb3IgKGNvbD1ib3gtPmxlZnQ7IGNvbDxib3gtPmxlZnQrYm94LT53aWR0aDsgKytjb2wpIHsKKyAgICAgIHdjaGFyX3QgdGV4dDsKKyAgICAgIGNvbmNoYXJfYXR0cl90IGF0dHI7CisgICAgICB0ZXh0ID0gc2NyZWVuRGlzcGxheVsocm93JWxpbmVzKSpkZXNjcmlwdGlvbi5jb2xzK2NvbF0uY2hyOworI2lmZGVmIENPTlNfV0NIQVJfTUFTSworICAgICAgdGV4dCAmPSBDT05TX1dDSEFSX01BU0s7CisjZW5kaWYKKyNpZmRlZiBDT05TX1dDSEFSX0NPTlRJTlVFRAorICAgICAgaWYgKHRleHQgJiBDT05TX1dDSEFSX0NPTlRJTlVFRCkKKwl0ZXh0ID0gVU5JQ09ERV9aRVJPX1dJRFRIX1NQQUNFOworI2VuZGlmCisgICAgICBidWZmZXItPnRleHQgPSB0ZXh0OworICAgICAgYXR0ciA9IHNjcmVlbkRpc3BsYXlbKHJvdyVsaW5lcykqZGVzY3JpcHRpb24uY29scytjb2xdLmF0dHI7CisgICAgICBidWZmZXItPmF0dHJpYnV0ZXMgPSBhdHRyLmZnY29sIHwgKGF0dHIuYmdjb2wgPDwgNCkKKwl8IChhdHRyLmludGVuc2l0eSA9PSBDT05TX0FUVFJfSU5URU5TSVRZX0JPTEQ/U0NSX0FUVFJfRkdfQlJJR0hUOjApCisJfCAoYXR0ci5ibGlua2luZz9TQ1JfQVRUUl9CTElOSzowKTsKKyAgICAgIGJ1ZmZlcisrOworICAgIH0KKyAgcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQKK2luc2VydEJ5dGUgKHVuc2lnbmVkIGNoYXIgYnl0ZSkgeworICBpZiAod3JpdGUoY29uc29sZURlc2NyaXB0b3IsICZieXRlLCAxKSAhPSAtMSkKKyAgICByZXR1cm4gMTsKKyAgbG9nU3lzdGVtRXJyb3IoIkNvbnNvbGUgd3JpdGUiKTsKKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK2luc2VydE1hcHBlZCAoU2NyZWVuS2V5IGtleSwgaW50ICgqaW5zZXJ0Q2hhcmFjdGVyKSh3Y2hhcl90IGNoYXJhY3RlcikpIHsKKyAgd2NoYXJfdCBidWZmZXJbMl07CisgIHdjaGFyX3QgKnNlcXVlbmNlOworICB3Y2hhcl90ICplbmQ7CisKKyAgc2V0U2NyZWVuS2V5TW9kaWZpZXJzKCZrZXksIDApOworCisgIGlmIChpc1NwZWNpYWxLZXkoa2V5KSkgeworICAgIHN3aXRjaCAoa2V5ICYgU0NSX0tFWV9DSEFSX01BU0spIHsKKyAgICAgIGNhc2UgU0NSX0tFWV9FTlRFUjoKKyAgICAgICAgc2VxdWVuY2UgPSBXU19DKCJcciIpOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgU0NSX0tFWV9UQUI6CisgICAgICAgIHNlcXVlbmNlID0gV1NfQygiXHQiKTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIFNDUl9LRVlfQkFDS1NQQUNFOgorICAgICAgICBzZXF1ZW5jZSA9IFdTX0MoIlx4N2YiKTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIFNDUl9LRVlfRVNDQVBFOgorICAgICAgICBzZXF1ZW5jZSA9IFdTX0MoIlx4MWIiKTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIFNDUl9LRVlfQ1VSU09SX0xFRlQ6CisgICAgICAgIHNlcXVlbmNlID0gV1NfQygiXHgxYltEIik7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBTQ1JfS0VZX0NVUlNPUl9SSUdIVDoKKyAgICAgICAgc2VxdWVuY2UgPSBXU19DKCJceDFiW0MiKTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIFNDUl9LRVlfQ1VSU09SX1VQOgorICAgICAgICBzZXF1ZW5jZSA9IFdTX0MoIlx4MWJbQSIpOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgU0NSX0tFWV9DVVJTT1JfRE9XTjoKKyAgICAgICAgc2VxdWVuY2UgPSBXU19DKCJceDFiW0IiKTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIFNDUl9LRVlfUEFHRV9VUDoKKyAgICAgICAgc2VxdWVuY2UgPSBXU19DKCJceDFiWzV+Iik7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBTQ1JfS0VZX1BBR0VfRE9XTjoKKyAgICAgICAgc2VxdWVuY2UgPSBXU19DKCJceDFiWzZ+Iik7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBTQ1JfS0VZX0hPTUU6CisgICAgICAgIHNlcXVlbmNlID0gV1NfQygiXHgxYlsxfiIpOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgU0NSX0tFWV9FTkQ6CisgICAgICAgIHNlcXVlbmNlID0gV1NfQygiXHgxYls0fiIpOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgU0NSX0tFWV9JTlNFUlQ6CisgICAgICAgIHNlcXVlbmNlID0gV1NfQygiXHgxYlsyfiIpOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgU0NSX0tFWV9ERUxFVEU6CisgICAgICAgIHNlcXVlbmNlID0gV1NfQygiXHgxYlszfiIpOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgU0NSX0tFWV9GVU5DVElPTiArIDA6CisgICAgICAgIHNlcXVlbmNlID0gV1NfQygiXHgxYk9QIik7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBTQ1JfS0VZX0ZVTkNUSU9OICsgMToKKyAgICAgICAgc2VxdWVuY2UgPSBXU19DKCJceDFiT1EiKTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIFNDUl9LRVlfRlVOQ1RJT04gKyAyOgorICAgICAgICBzZXF1ZW5jZSA9IFdTX0MoIlx4MWJPUiIpOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgU0NSX0tFWV9GVU5DVElPTiArIDM6CisgICAgICAgIHNlcXVlbmNlID0gV1NfQygiXHgxYk9TIik7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBTQ1JfS0VZX0ZVTkNUSU9OICsgNDoKKyAgICAgICAgc2VxdWVuY2UgPSBXU19DKCJceDFiWzE1fiIpOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgU0NSX0tFWV9GVU5DVElPTiArIDU6CisgICAgICAgIHNlcXVlbmNlID0gV1NfQygiXHgxYlsxN34iKTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIFNDUl9LRVlfRlVOQ1RJT04gKyA2OgorICAgICAgICBzZXF1ZW5jZSA9IFdTX0MoIlx4MWJbMTh+Iik7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBTQ1JfS0VZX0ZVTkNUSU9OICsgNzoKKyAgICAgICAgc2VxdWVuY2UgPSBXU19DKCJceDFiWzE5fiIpOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgU0NSX0tFWV9GVU5DVElPTiArIDg6CisgICAgICAgIHNlcXVlbmNlID0gV1NfQygiXHgxYlsyMH4iKTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIFNDUl9LRVlfRlVOQ1RJT04gKyA5OgorICAgICAgICBzZXF1ZW5jZSA9IFdTX0MoIlx4MWJbMjF+Iik7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBTQ1JfS0VZX0ZVTkNUSU9OICsgMTA6CisgICAgICAgIHNlcXVlbmNlID0gV1NfQygiXHgxYlsyM34iKTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIFNDUl9LRVlfRlVOQ1RJT04gKyAxMToKKyAgICAgICAgc2VxdWVuY2UgPSBXU19DKCJceDFiWzI0fiIpOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgU0NSX0tFWV9GVU5DVElPTiArIDEyOgorICAgICAgICBzZXF1ZW5jZSA9IFdTX0MoIlx4MWJbMjV+Iik7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBTQ1JfS0VZX0ZVTkNUSU9OICsgMTM6CisgICAgICAgIHNlcXVlbmNlID0gV1NfQygiXHgxYlsyNn4iKTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIFNDUl9LRVlfRlVOQ1RJT04gKyAxNDoKKyAgICAgICAgc2VxdWVuY2UgPSBXU19DKCJceDFiWzI4fiIpOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgU0NSX0tFWV9GVU5DVElPTiArIDE1OgorICAgICAgICBzZXF1ZW5jZSA9IFdTX0MoIlx4MWJbMjl+Iik7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBTQ1JfS0VZX0ZVTkNUSU9OICsgMTY6CisgICAgICAgIHNlcXVlbmNlID0gV1NfQygiXHgxYlszMX4iKTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIFNDUl9LRVlfRlVOQ1RJT04gKyAxNzoKKyAgICAgICAgc2VxdWVuY2UgPSBXU19DKCJceDFiWzMyfiIpOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgU0NSX0tFWV9GVU5DVElPTiArIDE4OgorICAgICAgICBzZXF1ZW5jZSA9IFdTX0MoIlx4MWJbMzN+Iik7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBTQ1JfS0VZX0ZVTkNUSU9OICsgMTk6CisgICAgICAgIHNlcXVlbmNlID0gV1NfQygiXHgxYlszNH4iKTsKKyAgICAgICAgYnJlYWs7CisgICAgICBkZWZhdWx0OgorICAgICAgICBsb2dNZXNzYWdlKExPR19XQVJOSU5HLCAiS2V5ICUwNFggbm90IHN1cG9ydGVkIGluIEFOU0kgbW9kZS4iLCBrZXkpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgZW5kID0gc2VxdWVuY2UgKyB3Y3NsZW4oc2VxdWVuY2UpOworICB9IGVsc2UgeworICAgIHNlcXVlbmNlID0gZW5kID0gYnVmZmVyICsgQVJSQVlfQ09VTlQoYnVmZmVyKTsKKyAgICAqLS1zZXF1ZW5jZSA9IGtleSAmIFNDUl9LRVlfQ0hBUl9NQVNLOworCisgICAgaWYgKGtleSAmIFNDUl9LRVlfQUxUX0xFRlQpCisgICAgICAqLS1zZXF1ZW5jZSA9IDBYMUI7CisgIH0KKworICB3aGlsZSAoc2VxdWVuY2UgIT0gZW5kKQorICAgIGlmICghaW5zZXJ0Q2hhcmFjdGVyKCpzZXF1ZW5jZSsrKSkKKyAgICAgIHJldHVybiAwOworICByZXR1cm4gMTsKK30KKworc3RhdGljIGludAoraW5zZXJ0VXRmOCAod2NoYXJfdCBjaGFyYWN0ZXIpIHsKKyAgVXRmOEJ1ZmZlciB1dGY4OworICBzaXplX3QgdXRmcyA9IGNvbnZlcnRXY2hhclRvVXRmOChjaGFyYWN0ZXIsIHV0ZjgpOworICBpbnQgaTsKKyAgZm9yIChpPTA7IGk8dXRmczsgKytpKQorICAgIGlmICghaW5zZXJ0Qnl0ZSh1dGY4W2ldKSkKKyAgICAgIHJldHVybiAwOworICByZXR1cm4gMTsKK30KKworc3RhdGljIGludAoraW5zZXJ0S2V5X0h1cmRTY3JlZW4gKFNjcmVlbktleSBrZXkpIHsKKyAgbG9nTWVzc2FnZShMT0dfREVCVUcsICJJbnNlcnQga2V5OiAlNC40WCIsIGtleSk7CisgIHJldHVybiBpbnNlcnRNYXBwZWQoa2V5LCBpbnNlcnRVdGY4KTsgCit9CisKK3N0YXRpYyBpbnQKK3ZhbGlkYXRlVnQgKGludCB2dCkgeworICBpZiAoKHZ0ID49IDEpICYmICh2dCA8PSA5OSkpIHJldHVybiAxOworICBsb2dNZXNzYWdlKExPR19ERUJVRywgIlZpcnR1YWwgdGVybWluYWwgJWQgaXMgb3V0IG9mIHJhbmdlLiIsIHZ0KTsKKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK3NlbGVjdFZpcnR1YWxUZXJtaW5hbF9IdXJkU2NyZWVuIChpbnQgdnQpIHsKKyAgaWYgKHZ0ID09IHZpcnR1YWxUZXJtaW5hbCkgcmV0dXJuIDE7CisgIGlmICh2dCAmJiAhdmFsaWRhdGVWdCh2dCkpIHJldHVybiAwOworICByZXR1cm4gb3BlblNjcmVlbih2dCk7Cit9CisKK3N0YXRpYyBpbnQKK3N3aXRjaFZpcnR1YWxUZXJtaW5hbF9IdXJkU2NyZWVuIChpbnQgdnQpIHsKKyAgaWYgKHZhbGlkYXRlVnQodnQpKSB7CisgICAgY2hhciBsaW5rW109SFVSRF9WQ1NESVIgIi8wMCI7CisgICAgc25wcmludGYobGluaywgc2l6ZW9mKGxpbmspLCBIVVJEX1ZDU0RJUiAiLyV1IiwgdnQpOworICAgIGlmIChzeW1saW5rKGxpbmssIEhVUkRfQ1VSVkNTUEFUSCkgIT0gLTEpIHsKKyAgICAgIGxvZ01lc3NhZ2UoTE9HX0RFQlVHLCAiU3dpdGNoZWQgdG8gdmlydHVhbCB0ZXJtaW5hbCAlZC4iLCB2dCk7CisgICAgICByZXR1cm4gMTsKKyAgICB9IGVsc2UgeworICAgICAgbG9nU3lzdGVtRXJyb3IoInN5bWxpbmtpbmcgdG8gc3dpdGNoIHZ0Iik7CisgICAgfQorICB9CisgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50CitjdXJyZW50VmlydHVhbFRlcm1pbmFsX0h1cmRTY3JlZW4gKHZvaWQpIHsKKyAgU2NyZWVuRGVzY3JpcHRpb24gZGVzY3JpcHRpb247CisgIGdldENvbnNvbGVEZXNjcmlwdGlvbigmZGVzY3JpcHRpb24pOworICByZXR1cm4gZGVzY3JpcHRpb24ubnVtYmVyOworfQorCitzdGF0aWMgdm9pZAorc2NyX2luaXRpYWxpemUgKE1haW5TY3JlZW4gKm1haW4pIHsKKyAgaW5pdGlhbGl6ZVJlYWxTY3JlZW4obWFpbik7CisgIG1haW4tPmJhc2UuZGVzY3JpYmUgPSBkZXNjcmliZV9IdXJkU2NyZWVuOworICBtYWluLT5iYXNlLnJlYWRDaGFyYWN0ZXJzID0gcmVhZENoYXJhY3RlcnNfSHVyZFNjcmVlbjsKKyAgbWFpbi0+YmFzZS5pbnNlcnRLZXkgPSBpbnNlcnRLZXlfSHVyZFNjcmVlbjsKKyAgbWFpbi0+YmFzZS5zZWxlY3RWaXJ0dWFsVGVybWluYWwgPSBzZWxlY3RWaXJ0dWFsVGVybWluYWxfSHVyZFNjcmVlbjsKKyAgbWFpbi0+YmFzZS5zd2l0Y2hWaXJ0dWFsVGVybWluYWwgPSBzd2l0Y2hWaXJ0dWFsVGVybWluYWxfSHVyZFNjcmVlbjsKKyAgbWFpbi0+YmFzZS5jdXJyZW50VmlydHVhbFRlcm1pbmFsID0gY3VycmVudFZpcnR1YWxUZXJtaW5hbF9IdXJkU2NyZWVuOworICBtYWluLT5wcm9jZXNzUGFyYW1ldGVycyA9IHByb2Nlc3NQYXJhbWV0ZXJzX0h1cmRTY3JlZW47CisgIG1haW4tPmNvbnN0cnVjdCA9IGNvbnN0cnVjdF9IdXJkU2NyZWVuOworICBtYWluLT5kZXN0cnVjdCA9IGRlc3RydWN0X0h1cmRTY3JlZW47Cit9CmRpZmYgLS1naXQgYS9Ecml2ZXJzL1NjcmVlbi9IdXJkL3NjcmVlbi5oIGIvRHJpdmVycy9TY3JlZW4vSHVyZC9zY3JlZW4uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZGEzODhjCi0tLSAvZGV2L251bGwKKysrIGIvRHJpdmVycy9TY3JlZW4vSHVyZC9zY3JlZW4uaApAQCAtMCwwICsxLDM2IEBACisvKgorICogQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyAqICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyAqCisgKiBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorICoKKyAqIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyAqCisgKiBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisgKi8KKworI2lmbmRlZiBCUkxUVFlfSU5DTFVERURfU0NSX0hVUkQKKyNkZWZpbmUgQlJMVFRZX0lOQ0xVREVEX1NDUl9IVVJECisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYgLyogX19jcGx1c3BsdXMgKi8KKworI2RlZmluZSBIVVJEX0NPTlNESVIJCSIvZGV2L2NvbnMiCisjZGVmaW5lIEhVUkRfVkNTRElSCQkiL2Rldi92Y3MiCisjZGVmaW5lIEhVUkRfSU5QVVRQQVRICQlIVVJEX1ZDU0RJUiAiLyV1L2lucHV0IgorI2RlZmluZSBIVVJEX0RJU1BMQVlQQVRICUhVUkRfVkNTRElSICIvJXUvZGlzcGxheSIKKyNkZWZpbmUgSFVSRF9DVVJWQ1NQQVRICQlIVVJEX0NPTlNESVIgIi92Y3MiCisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmIC8qIF9fY3BsdXNwbHVzICovCisKKyNlbmRpZiAvKiBCUkxUVFlfSU5DTFVERURfU0NSX0hVUkQgKi8KZGlmZiAtLWdpdCBhL0RyaXZlcnMvU2NyZWVuL0xpbnV4L01ha2VmaWxlLmluIGIvRHJpdmVycy9TY3JlZW4vTGludXgvTWFrZWZpbGUuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzQyNTFhMAotLS0gL2Rldi9udWxsCisrKyBiL0RyaXZlcnMvU2NyZWVuL0xpbnV4L01ha2VmaWxlLmluCkBAIC0wLDAgKzEsMjggQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyMgICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisjCisjIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyMKKyMgQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitEUklWRVJfQ09ERSA9IGx4CitEUklWRVJfTkFNRSA9IExpbnV4CitEUklWRVJfVVNBR0UgPSBMaW51eAorRFJJVkVSX1ZFUlNJT04gPSAKK0RSSVZFUl9ERVZFTE9QRVJTID0gCitpbmNsdWRlICQoU1JDX1RPUClzY3JlZW4ubWsKKworc2NyZWVuLiRPOgorCSQoQ0MpICQoU0NSX0NGTEFHUykgLWMgJChTUkNfRElSKS9zY3JlZW4uYworCmRpZmYgLS1naXQgYS9Ecml2ZXJzL1NjcmVlbi9MaW51eC9zY3JlZW4uYyBiL0RyaXZlcnMvU2NyZWVuL0xpbnV4L3NjcmVlbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVmYjUxZDYKLS0tIC9kZXYvbnVsbAorKysgYi9Ecml2ZXJzL1NjcmVlbi9MaW51eC9zY3JlZW4uYwpAQCAtMCwwICsxLDI1MDcgQEAKKy8qCisgKiBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorICogICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorICoKKyAqIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorICoKKyAqIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyAqLworCisjaW5jbHVkZSAicHJvbG9ndWUuaCIKKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxsaW1pdHMuaD4KKyNpbmNsdWRlIDxmY250bC5oPgorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisjaW5jbHVkZSA8c3lzL2lvY3RsLmg+CisjaW5jbHVkZSA8bGludXgvdHR5Lmg+CisjaW5jbHVkZSA8bGludXgvdnQuaD4KKyNpbmNsdWRlIDxsaW51eC9rZC5oPgorI2luY2x1ZGUgPGxpbnV4L3Rpb2NsLmg+CisjaW5jbHVkZSA8bGludXgvbWFqb3IuaD4KKworI2lmbmRlZiBWVF9HRVRISUZPTlRNQVNLCisjZGVmaW5lIFZUX0dFVEhJRk9OVE1BU0sgMFg1NjBECisjZW5kaWYgLyogVlRfR0VUSElGT05UTUFTSyAqLworCisjaW5jbHVkZSAibG9nLmgiCisjaW5jbHVkZSAicmVwb3J0LmgiCisjaW5jbHVkZSAibWVzc2FnZS5oIgorI2luY2x1ZGUgImFzeW5jX2hhbmRsZS5oIgorI2luY2x1ZGUgImFzeW5jX2lvLmgiCisjaW5jbHVkZSAiZGV2aWNlLmgiCisjaW5jbHVkZSAiaW9fbWlzYy5oIgorI2luY2x1ZGUgInRpbWluZy5oIgorI2luY2x1ZGUgInBhcnNlLmgiCisjaW5jbHVkZSAiYnJsX2NtZHMuaCIKKyNpbmNsdWRlICJrYmRfa2V5Y29kZXMuaCIKKyNpbmNsdWRlICJhc2NpaS5oIgorI2luY2x1ZGUgInVuaWNvZGUuaCIKKyNpbmNsdWRlICJjaGFyc2V0LmgiCisjaW5jbHVkZSAic2NyX2dwbS5oIgorI2luY2x1ZGUgInN5c3RlbV9saW51eC5oIgorCit0eXBlZGVmIGVudW0geworICBQQVJNX0NIQVJTRVQsCisgIFBBUk1fRkFMTEJBQ0tfVEVYVCwKKyAgUEFSTV9ISUdIX0ZPTlRfQklULAorICBQQVJNX0xPR19TQ1JFRU5fRk9OVF9NQVAsCisgIFBBUk1fUlBJX1NQQUNFU19CVUcsCisgIFBBUk1fVU5JQ09ERSwKKyAgUEFSTV9WSVJUVUFMX1RFUk1JTkFMX05VTUJFUiwKKyAgUEFSTV9XSURFQ0hBUl9QQURESU5HLAorfSBTY3JlZW5QYXJhbWV0ZXJzOworI2RlZmluZSBTQ1JQQVJNUyAiY2hhcnNldCIsICJmYWxsYmFja3RleHQiLCAiaGZiIiwgImxvZ3NmbSIsICJycGlzcGFjZXNidWciLCAidW5pY29kZSIsICJ2dCIsICJ3aWRlY2hhcnBhZGRpbmciCisKKyNpbmNsdWRlICJzY3JfZHJpdmVyLmgiCisjaW5jbHVkZSAic2NyZWVuLmgiCisKK3N0YXRpYyBjb25zdCBjaGFyICpwcm9ibGVtVGV4dDsKK3N0YXRpYyBjb25zdCBjaGFyICpmYWxsYmFja1RleHQ7CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgbG9nU2NyZWVuRm9udE1hcDsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgcnBpU3BhY2VzQnVnOworc3RhdGljIHVuc2lnbmVkIGludCB1bmljb2RlRW5hYmxlZDsKK3N0YXRpYyBpbnQgdmlydHVhbFRlcm1pbmFsTnVtYmVyOworc3RhdGljIHVuc2lnbmVkIGludCB3aWRlY2hhclBhZGRpbmc7CisKKyNkZWZpbmUgVU5JQ09ERV9ST1dfRElSRUNUIDBYRjAwMAorCit0eXBlZGVmIGVudW0geworICBDT05WX09LLAorICBDT05WX0lMTEVHQUwsCisgIENPTlZfU0hPUlQsCisgIENPTlZfT1ZFUkZMT1csCisgIENPTlZfRVJST1IKK30gQ2hhcmFjdGVyQ29udmVyc2lvblJlc3VsdDsKKworI2lmIGRlZmluZWQoSEFWRV9JQ09OVl9IKQorI2luY2x1ZGUgPGljb252Lmg+CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgaWNvbnZfdCBpY29udkhhbmRsZTsKK30gQ2hhcnNldENvbnZlcnRlcjsKKworI2RlZmluZSBJQ09OVl9OVUxMICgoaWNvbnZfdCktMSkKKyNkZWZpbmUgQ0hBUlNFVF9DT05WRVJURVJfSU5JVElBTElaRVIgey5pY29udkhhbmRsZSA9IElDT05WX05VTEx9CisKK3N0YXRpYyBpbnQKK2FsbG9jYXRlQ2hhcnNldENvbnZlcnRlciAoQ2hhcnNldENvbnZlcnRlciAqY29udmVydGVyLCBjb25zdCBjaGFyICpzb3VyY2VDaGFyc2V0LCBjb25zdCBjaGFyICp0YXJnZXRDaGFyc2V0KSB7CisgIGlmIChjb252ZXJ0ZXItPmljb252SGFuZGxlID09IElDT05WX05VTEwpIHsKKyAgICBpZiAoKGNvbnZlcnRlci0+aWNvbnZIYW5kbGUgPSBpY29udl9vcGVuKHRhcmdldENoYXJzZXQsIHNvdXJjZUNoYXJzZXQpKSA9PSBJQ09OVl9OVUxMKSB7CisgICAgICBsb2dTeXN0ZW1FcnJvcigiaWNvbnZfb3BlbiIpOworICAgICAgcmV0dXJuIDA7CisgICAgfQorICB9CisgIHJldHVybiAxOworfQorCitzdGF0aWMgdm9pZAorZGVhbGxvY2F0ZUNoYXJzZXRDb252ZXJ0ZXIgKENoYXJzZXRDb252ZXJ0ZXIgKmNvbnZlcnRlcikgeworICBpZiAoY29udmVydGVyLT5pY29udkhhbmRsZSAhPSBJQ09OVl9OVUxMKSB7CisgICAgaWNvbnZfY2xvc2UoY29udmVydGVyLT5pY29udkhhbmRsZSk7CisgICAgY29udmVydGVyLT5pY29udkhhbmRsZSA9IElDT05WX05VTEw7CisgIH0KK30KKworc3RhdGljIENoYXJhY3RlckNvbnZlcnNpb25SZXN1bHQKK2NvbnZlcnRDaGFyYWN0ZXJzICgKKyAgQ2hhcnNldENvbnZlcnRlciAqY29udmVydGVyLAorICBjb25zdCBjaGFyICoqaW5wdXRBZGRyZXNzLCBzaXplX3QgKmlucHV0TGVuZ3RoLAorICBjaGFyICoqb3V0cHV0QWRkcmVzcywgc2l6ZV90ICpvdXRwdXRMZW5ndGgKKykgeworICBzc2l6ZV90IHJlc3VsdCA9IGljb252KGNvbnZlcnRlci0+aWNvbnZIYW5kbGUsIChjaGFyICoqKWlucHV0QWRkcmVzcywgaW5wdXRMZW5ndGgsIG91dHB1dEFkZHJlc3MsIG91dHB1dExlbmd0aCk7CisgIGlmIChyZXN1bHQgIT0gLTEpIHJldHVybiBDT05WX09LOworICBpZiAoZXJybm8gPT0gRUlMU0VRKSByZXR1cm4gQ09OVl9JTExFR0FMOworICBpZiAoZXJybm8gPT0gRUlOVkFMKSByZXR1cm4gQ09OVl9TSE9SVDsKKyAgaWYgKGVycm5vID09IEUyQklHKSByZXR1cm4gQ09OVl9PVkVSRkxPVzsKKyAgbG9nU3lzdGVtRXJyb3IoImljb252Iik7CisgIHJldHVybiBDT05WX0VSUk9SOworfQorI2Vsc2UgLyogY2hhcnNldCBjb252ZXJzaW9uIGRlZmluaXRpb25zICovCit0eXBlZGVmIHN0cnVjdCB7CisgIGNoYXIgYVN0cnVjdE5lZWRzQXRMZWFzdE9uZUZpZWxkOworfSBDaGFyc2V0Q29udmVydGVyOworCisjZGVmaW5lIENIQVJTRVRfQ09OVkVSVEVSX0lOSVRJQUxJWkVSIHswfQorCitzdGF0aWMgaW50CithbGxvY2F0ZUNoYXJzZXRDb252ZXJ0ZXIgKENoYXJzZXRDb252ZXJ0ZXIgKmNvbnZlcnRlciwgY29uc3QgY2hhciAqc291cmNlQ2hhcnNldCwgY29uc3QgY2hhciAqdGFyZ2V0Q2hhcnNldCkgeworICByZXR1cm4gMTsKK30KKworc3RhdGljIHZvaWQKK2RlYWxsb2NhdGVDaGFyc2V0Q29udmVydGVyIChDaGFyc2V0Q29udmVydGVyICpjb252ZXJ0ZXIpIHsKK30KKworc3RhdGljIENoYXJhY3RlckNvbnZlcnNpb25SZXN1bHQKK2NvbnZlcnRDaGFyYWN0ZXJzICgKKyAgQ2hhcnNldENvbnZlcnRlciAqY29udmVydGVyLAorICBjb25zdCBjaGFyICoqaW5wdXRBZGRyZXNzLCBzaXplX3QgKmlucHV0TGVuZ3RoLAorICBjaGFyICoqb3V0cHV0QWRkcmVzcywgc2l6ZV90ICpvdXRwdXRMZW5ndGgKKykgeworICAqKCpvdXRwdXRBZGRyZXNzKSsrID0gKigqaW5wdXRBZGRyZXNzKSsrOworICAqaW5wdXRMZW5ndGggLT0gMTsKKyAgKm91dHB1dExlbmd0aCAtPSAxOworICByZXR1cm4gQ09OVl9PSzsKK30KKyNlbmRpZiAvKiBjaGFyc2V0IGNvbnZlcnNpb24gZGVmaW5pdGlvbnMgKi8KKwordHlwZWRlZiBzdHJ1Y3QgeworICBjaGFyICpuYW1lOworICB1bnNpZ25lZCBpc011bHRpQnl0ZToxOworICBDaGFyc2V0Q29udmVydGVyIGNoYXJzZXRUb1djaGFyOworICBDaGFyc2V0Q29udmVydGVyIHdjaGFyVG9DaGFyc2V0OworfSBDaGFyc2V0RW50cnk7CisKK3N0YXRpYyBDaGFyc2V0RW50cnkgKmNoYXJzZXRFbnRyaWVzID0gTlVMTDsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgY2hhcnNldENvdW50ID0gMDsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgY2hhcnNldEluZGV4ID0gMDsKKworc3RhdGljIGlubGluZSBDaGFyc2V0RW50cnkgKgorZ2V0Q2hhcnNldEVudHJ5ICh2b2lkKSB7CisgIHJldHVybiAmY2hhcnNldEVudHJpZXNbY2hhcnNldEluZGV4XTsKK30KKworc3RhdGljIHZvaWQKK2RlYWxsb2NhdGVDaGFyc2V0RW50cmllcyAodm9pZCkgeworICBpZiAoY2hhcnNldEVudHJpZXMpIHsKKyAgICB3aGlsZSAoY2hhcnNldENvdW50KSB7CisgICAgICBDaGFyc2V0RW50cnkgKmNoYXJzZXQgPSAmY2hhcnNldEVudHJpZXNbLS1jaGFyc2V0Q291bnRdOworICAgICAgZnJlZShjaGFyc2V0LT5uYW1lKTsKKyAgICAgIGRlYWxsb2NhdGVDaGFyc2V0Q29udmVydGVyKCZjaGFyc2V0LT5jaGFyc2V0VG9XY2hhcik7CisgICAgICBkZWFsbG9jYXRlQ2hhcnNldENvbnZlcnRlcigmY2hhcnNldC0+d2NoYXJUb0NoYXJzZXQpOworICAgIH0KKworICAgIGZyZWUoY2hhcnNldEVudHJpZXMpOworICAgIGNoYXJzZXRFbnRyaWVzID0gTlVMTDsKKyAgfQorfQorCitzdGF0aWMgaW50CithbGxvY2F0ZUNoYXJzZXRFbnRyaWVzIChjb25zdCBjaGFyICpuYW1lcykgeworICBpbnQgb2sgPSAwOworICBpbnQgY291bnQ7CisgIGNoYXIgKipuYW1lc0FycmF5ID0gc3BsaXRTdHJpbmcobmFtZXMsICcrJywgJmNvdW50KTsKKworICBpZiAobmFtZXNBcnJheSkgeworICAgIENoYXJzZXRFbnRyeSAqZW50cmllcyA9IGNhbGxvYyhjb3VudCwgc2l6ZW9mKCplbnRyaWVzKSk7CisKKyAgICBpZiAoZW50cmllcykgeworICAgICAgY2hhcnNldEVudHJpZXMgPSBlbnRyaWVzOworICAgICAgY2hhcnNldENvdW50ID0gMDsKKyAgICAgIGNoYXJzZXRJbmRleCA9IDA7CisgICAgICBvayA9IDE7CisKKyAgICAgIHdoaWxlIChjaGFyc2V0Q291bnQgPCBjb3VudCkgeworICAgICAgICBDaGFyc2V0RW50cnkgKmNoYXJzZXQgPSAmY2hhcnNldEVudHJpZXNbY2hhcnNldENvdW50XTsKKworICAgICAgICBpZiAoIShjaGFyc2V0LT5uYW1lID0gc3RyZHVwKG5hbWVzQXJyYXlbY2hhcnNldENvdW50XSkpKSB7CisgICAgICAgICAgbG9nTWFsbG9jRXJyb3IoKTsKKyAgICAgICAgICBvayA9IDA7CisgICAgICAgICAgZGVhbGxvY2F0ZUNoYXJzZXRFbnRyaWVzKCk7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBjaGFyc2V0LT5pc011bHRpQnl0ZSA9IDA7CisKKyAgICAgICAgeworICAgICAgICAgIHN0YXRpYyBjb25zdCBDaGFyc2V0Q29udmVydGVyIG51bGxDaGFyc2V0Q29udmVydGVyID0gQ0hBUlNFVF9DT05WRVJURVJfSU5JVElBTElaRVI7CisgICAgICAgICAgY2hhcnNldC0+Y2hhcnNldFRvV2NoYXIgPSBudWxsQ2hhcnNldENvbnZlcnRlcjsKKyAgICAgICAgICBjaGFyc2V0LT53Y2hhclRvQ2hhcnNldCA9IG51bGxDaGFyc2V0Q29udmVydGVyOworICAgICAgICB9CisKKyAgICAgICAgY2hhcnNldENvdW50ICs9IDE7CisgICAgICB9CisgICAgfQorCisgICAgZGVhbGxvY2F0ZVN0cmluZ3MobmFtZXNBcnJheSk7CisgIH0KKworICByZXR1cm4gb2s7Cit9CisKK3N0YXRpYyBDaGFyYWN0ZXJDb252ZXJzaW9uUmVzdWx0Citjb252ZXJ0Q2hhcnNUb1djaGFyIChjb25zdCBjaGFyICpjaGFycywgc2l6ZV90IGxlbmd0aCwgd2NoYXJfdCAqY2hhcmFjdGVyLCBzaXplX3QgKnNpemUpIHsKKyAgdW5zaWduZWQgaW50IGNvdW50ID0gY2hhcnNldENvdW50OworCisgIHdoaWxlIChjb3VudC0tKSB7CisgICAgQ2hhcnNldEVudHJ5ICpjaGFyc2V0ID0gZ2V0Q2hhcnNldEVudHJ5KCk7CisgICAgQ2hhcnNldENvbnZlcnRlciAqY29udmVydGVyID0gJmNoYXJzZXQtPmNoYXJzZXRUb1djaGFyOworICAgIENoYXJhY3RlckNvbnZlcnNpb25SZXN1bHQgcmVzdWx0ID0gQ09OVl9FUlJPUjsKKworICAgIGlmIChhbGxvY2F0ZUNoYXJzZXRDb252ZXJ0ZXIoY29udmVydGVyLCBjaGFyc2V0LT5uYW1lLCBnZXRXY2hhckNoYXJzZXQoKSkpIHsKKyAgICAgIGNvbnN0IGNoYXIgKmlucHRyID0gY2hhcnM7CisgICAgICBzaXplX3QgaW5sZW4gPSBsZW5ndGg7CisgICAgICBjaGFyICpvdXRwdHIgPSAoY2hhciAqKWNoYXJhY3RlcjsKKyAgICAgIHNpemVfdCBvdXRsZW4gPSBzaXplb2YoKmNoYXJhY3Rlcik7CisKKyAgICAgIGlmICgocmVzdWx0ID0gY29udmVydENoYXJhY3RlcnMoY29udmVydGVyLCAmaW5wdHIsICZpbmxlbiwgJm91dHB0ciwgJm91dGxlbikpID09IENPTlZfT0spCisgICAgICAgIGlmIChzaXplKQorICAgICAgICAgICpzaXplID0gaW5wdHIgLSBjaGFyczsKKyAgICB9CisKKyAgICBpZiAocmVzdWx0ID09IENPTlZfU0hPUlQpIGNoYXJzZXQtPmlzTXVsdGlCeXRlID0gMTsKKyAgICBpZiAocmVzdWx0ICE9IENPTlZfSUxMRUdBTCkgcmV0dXJuIHJlc3VsdDsKKyAgICBpZiAoKytjaGFyc2V0SW5kZXggPT0gY2hhcnNldENvdW50KSBjaGFyc2V0SW5kZXggPSAwOworICB9CisKKyAgcmV0dXJuIENPTlZfSUxMRUdBTDsKK30KKworc3RhdGljIENoYXJhY3RlckNvbnZlcnNpb25SZXN1bHQKK2NvbnZlcnRXY2hhclRvQ2hhcnMgKHdjaGFyX3QgY2hhcmFjdGVyLCBjaGFyICpjaGFycywgc2l6ZV90IGxlbmd0aCwgc2l6ZV90ICpzaXplKSB7CisgIENoYXJzZXRFbnRyeSAqY2hhcnNldCA9IGdldENoYXJzZXRFbnRyeSgpOworICBDaGFyc2V0Q29udmVydGVyICpjb252ZXJ0ZXIgPSAmY2hhcnNldC0+d2NoYXJUb0NoYXJzZXQ7CisgIENoYXJhY3RlckNvbnZlcnNpb25SZXN1bHQgcmVzdWx0ID0gQ09OVl9FUlJPUjsKKworICBpZiAoYWxsb2NhdGVDaGFyc2V0Q29udmVydGVyKGNvbnZlcnRlciwgZ2V0V2NoYXJDaGFyc2V0KCksIGNoYXJzZXQtPm5hbWUpKSB7CisgICAgY29uc3QgY2hhciAqaW5wdHIgPSAoY2hhciAqKSZjaGFyYWN0ZXI7CisgICAgc2l6ZV90IGlubGVuID0gc2l6ZW9mKGNoYXJhY3Rlcik7CisgICAgY2hhciAqb3V0cHRyID0gY2hhcnM7CisgICAgc2l6ZV90IG91dGxlbiA9IGxlbmd0aDsKKworICAgIGlmICgocmVzdWx0ID0gY29udmVydENoYXJhY3RlcnMoY29udmVydGVyLCAmaW5wdHIsICZpbmxlbiwgJm91dHB0ciwgJm91dGxlbikpID09IENPTlZfT0spIHsKKyAgICAgIHNpemVfdCBjb3VudCA9IG91dHB0ciAtIGNoYXJzOworICAgICAgaWYgKHNpemUpICpzaXplID0gY291bnQ7CisgICAgICBpZiAoY291bnQgPiAxKSBjaGFyc2V0LT5pc011bHRpQnl0ZSA9IDE7CisgICAgfSBlbHNlIGlmICgocmVzdWx0ID09IENPTlZfT1ZFUkZMT1cpICYmIGxlbmd0aCkgeworICAgICAgY2hhcnNldC0+aXNNdWx0aUJ5dGUgPSAxOworICAgIH0KKyAgfQorCisgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyB3aW50X3QKK2NvbnZlcnRDaGFyYWN0ZXIgKGNvbnN0IHdjaGFyX3QgKmNoYXJhY3RlcikgeworICBzdGF0aWMgdW5zaWduZWQgY2hhciBzcGFjZXMgPSAwOworICBzdGF0aWMgdW5zaWduZWQgY2hhciBsZW5ndGggPSAwOworICBzdGF0aWMgY2hhciBidWZmZXJbTUJfTEVOX01BWF07CisgIGNvbnN0IHdjaGFyX3QgY2VsbE1hc2sgPSAwWEZGOworCisgIGlmICghY2hhcmFjdGVyKSB7CisgICAgbGVuZ3RoID0gMDsKKyAgICBpZiAoIXNwYWNlcykgcmV0dXJuIFdFT0Y7CisgICAgc3BhY2VzIC09IDE7CisgICAgcmV0dXJuIFdDX0MoJyAnKTsKKyAgfQorCisgIGlmICgoKmNoYXJhY3RlciAmIH5jZWxsTWFzaykgIT0gVU5JQ09ERV9ST1dfRElSRUNUKSB7CisgICAgbGVuZ3RoID0gMDsKKyAgICByZXR1cm4gKmNoYXJhY3RlcjsKKyAgfQorCisgIGlmIChsZW5ndGggPCBzaXplb2YoYnVmZmVyKSkgeworICAgIGJ1ZmZlcltsZW5ndGgrK10gPSAqY2hhcmFjdGVyICYgY2VsbE1hc2s7CisKKyAgICB3aGlsZSAoMSkgeworICAgICAgd2NoYXJfdCB3YzsKKyAgICAgIENoYXJhY3RlckNvbnZlcnNpb25SZXN1bHQgcmVzdWx0ID0gY29udmVydENoYXJzVG9XY2hhcihidWZmZXIsIGxlbmd0aCwgJndjLCBOVUxMKTsKKworICAgICAgaWYgKHJlc3VsdCA9PSBDT05WX09LKSB7CisgICAgICAgIGxlbmd0aCA9IDA7CisgICAgICAgIHJldHVybiB3YzsKKyAgICAgIH0KKworICAgICAgaWYgKHJlc3VsdCA9PSBDT05WX1NIT1JUKSBicmVhazsKKyAgICAgIGlmIChyZXN1bHQgIT0gQ09OVl9JTExFR0FMKSBicmVhazsKKworICAgICAgaWYgKCEtLWxlbmd0aCkgYnJlYWs7CisgICAgICBtZW1tb3ZlKGJ1ZmZlciwgYnVmZmVyKzEsIGxlbmd0aCk7CisgICAgfQorICB9CisKKyAgc3BhY2VzICs9IDE7CisgIHJldHVybiBXRU9GOworfQorCitzdGF0aWMgaW50CitzZXREZXZpY2VOYW1lIChjb25zdCBjaGFyICoqbmFtZSwgY29uc3QgY2hhciAqY29uc3QgKm5hbWVzLCBpbnQgc3RyaWN0LCBjb25zdCBjaGFyICpkZXNjcmlwdGlvbikgeworICByZXR1cm4gKCpuYW1lID0gcmVzb2x2ZURldmljZU5hbWUobmFtZXMsIHN0cmljdCwgZGVzY3JpcHRpb24pKSAhPSBOVUxMOworfQorCitzdGF0aWMgY2hhciAqCit2dE5hbWUgKGNvbnN0IGNoYXIgKm5hbWUsIHVuc2lnbmVkIGNoYXIgdnQpIHsKKyAgY2hhciAqc3RyaW5nOworCisgIGlmICh2dCkgeworICAgIGludCBsZW5ndGggPSBzdHJsZW4obmFtZSk7CisgICAgaWYgKG5hbWVbbGVuZ3RoLTFdID09ICcwJykgbGVuZ3RoIC09IDE7CisKKyAgICBjaGFyIGJ1ZmZlcltsZW5ndGgrNF07CisgICAgc25wcmludGYoYnVmZmVyLCBzaXplb2YoYnVmZmVyKSwgIiUuKnMldSIsIGxlbmd0aCwgbmFtZSwgdnQpOworCisgICAgc3RyaW5nID0gc3RyZHVwKGJ1ZmZlcik7CisgIH0gZWxzZSB7CisgICAgc3RyaW5nID0gc3RyZHVwKG5hbWUpOworICB9CisKKyAgaWYgKCFzdHJpbmcpIGxvZ01hbGxvY0Vycm9yKCk7CisgIHJldHVybiBzdHJpbmc7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICpjb25zb2xlTmFtZSA9IE5VTEw7CisKK3N0YXRpYyBpbnQKK3NldENvbnNvbGVOYW1lICh2b2lkKSB7CisgIHN0YXRpYyBjb25zdCBjaGFyICpjb25zdCBuYW1lc1tdID0geyJ0dHkwIiwgInZjLzAiLCBOVUxMfTsKKyAgcmV0dXJuIHNldERldmljZU5hbWUoJmNvbnNvbGVOYW1lLCBuYW1lcywgMCwgImNvbnNvbGUiKTsKK30KKworc3RhdGljIHZvaWQKK2Nsb3NlQ29uc29sZSAoaW50ICpmZCkgeworICBpZiAoKmZkICE9IC0xKSB7CisgICAgbG9nTWVzc2FnZShMT0dfQ0FURUdPUlkoU0NSRUVOX0RSSVZFUiksICJjbG9zaW5nIGNvbnNvbGU6IGZkPSVkIiwgKmZkKTsKKyAgICBpZiAoY2xvc2UoKmZkKSA9PSAtMSkgbG9nU3lzdGVtRXJyb3IoImNsb3NlW2NvbnNvbGVdIik7CisgICAgKmZkID0gLTE7CisgIH0KK30KKworc3RhdGljIGludAorb3BlbkNvbnNvbGUgKGludCAqZmQsIGludCB2dCkgeworICBpbnQgb3BlbmVkID0gMDsKKyAgY2hhciAqbmFtZSA9IHZ0TmFtZShjb25zb2xlTmFtZSwgdnQpOworCisgIGlmIChuYW1lKSB7CisgICAgaW50IGNvbnNvbGUgPSBvcGVuQ2hhcmFjdGVyRGV2aWNlKG5hbWUsIE9fV1JPTkxZfE9fTk9DVFRZLCBUVFlfTUFKT1IsIHZ0KTsKKworICAgIGlmIChjb25zb2xlICE9IC0xKSB7CisgICAgICBsb2dNZXNzYWdlKExPR19DQVRFR09SWShTQ1JFRU5fRFJJVkVSKSwKKyAgICAgICAgICAgICAgICAgImNvbnNvbGUgb3BlbmVkOiAlczogZmQ9JWQiLCBuYW1lLCBjb25zb2xlKTsKKworICAgICAgY2xvc2VDb25zb2xlKGZkKTsKKyAgICAgICpmZCA9IGNvbnNvbGU7CisgICAgICBvcGVuZWQgPSAxOworICAgIH0KKworICAgIGZyZWUobmFtZSk7CisgIH0KKworICByZXR1cm4gb3BlbmVkOworfQorCitzdGF0aWMgaW50Citjb250cm9sQ29uc29sZSAoaW50ICpmZCwgaW50IHZ0LCBpbnQgb3BlcmF0aW9uLCB2b2lkICphcmd1bWVudCkgeworICBpbnQgcmVzdWx0ID0gaW9jdGwoKmZkLCBvcGVyYXRpb24sIGFyZ3VtZW50KTsKKworICBpZiAocmVzdWx0ID09IC0xKSB7CisgICAgaWYgKGVycm5vID09IEVJTykgeworICAgICAgbG9nTWVzc2FnZShMT0dfRVJSLAorICAgICAgICAgICAgICAgICAiY29uc29sZSBjb250cm9sIGVycm9yICVkOiBmZD0lZCB2dD0lZCBvcD0wWCUwNFg6ICVzIiwKKyAgICAgICAgICAgICAgICAgZXJybm8sICpmZCwgdnQsIG9wZXJhdGlvbiwgc3RyZXJyb3IoZXJybm8pKTsKKworICAgICAgaWYgKG9wZW5Db25zb2xlKGZkLCB2dCkpIHsKKyAgICAgICAgcmVzdWx0ID0gaW9jdGwoKmZkLCBvcGVyYXRpb24sIGFyZ3VtZW50KTsKKyAgICAgIH0KKyAgICB9CisgIH0KKworICByZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgaW50IGNvbnNvbGVEZXNjcmlwdG9yOworCitzdGF0aWMgdm9pZAorY2xvc2VDdXJyZW50Q29uc29sZSAodm9pZCkgeworICBjbG9zZUNvbnNvbGUoJmNvbnNvbGVEZXNjcmlwdG9yKTsKK30KKworc3RhdGljIGludAorb3BlbkN1cnJlbnRDb25zb2xlICh2b2lkKSB7CisgIHJldHVybiBvcGVuQ29uc29sZSgmY29uc29sZURlc2NyaXB0b3IsIHZpcnR1YWxUZXJtaW5hbE51bWJlcik7Cit9CisKK3N0YXRpYyBpbnQKK2NvbnRyb2xDdXJyZW50Q29uc29sZSAoaW50IG9wZXJhdGlvbiwgdm9pZCAqYXJndW1lbnQpIHsKKyAgaWYgKGNvbnNvbGVEZXNjcmlwdG9yICE9IC0xKSB7CisgICAgcmV0dXJuIGNvbnRyb2xDb25zb2xlKCZjb25zb2xlRGVzY3JpcHRvciwgdmlydHVhbFRlcm1pbmFsTnVtYmVyLCBvcGVyYXRpb24sIGFyZ3VtZW50KTsKKyAgfQorCisgIHN3aXRjaCAob3BlcmF0aW9uKSB7CisgICAgY2FzZSBHSU9fVU5JTUFQOiB7CisgICAgICBzdHJ1Y3QgdW5pbWFwZGVzYyAqc2ZtID0gYXJndW1lbnQ7CisgICAgICBtZW1zZXQoc2ZtLCAwLCBzaXplb2YoKnNmbSkpOworICAgICAgc2ZtLT5lbnRyaWVzID0gTlVMTDsKKyAgICAgIHNmbS0+ZW50cnlfY3QgPSAwOworICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgY2FzZSBLREZPTlRPUDogeworICAgICAgc3RydWN0IGNvbnNvbGVfZm9udF9vcCAqY2ZvID0gYXJndW1lbnQ7CisKKyAgICAgIGlmIChjZm8tPm9wID09IEtEX0ZPTlRfT1BfR0VUKSB7CisgICAgICAgIGNmby0+Y2hhcmNvdW50ID0gMDsKKyAgICAgICAgY2ZvLT53aWR0aCA9IDg7CisgICAgICAgIGNmby0+aGVpZ2h0ID0gMTY7CisgICAgICAgIHJldHVybiAwOworICAgICAgfQorCisgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIFZUX0dFVEhJRk9OVE1BU0s6IHsKKyAgICAgIHVuc2lnbmVkIHNob3J0ICptYXNrID0gYXJndW1lbnQ7CisgICAgICAqbWFzayA9IDA7CisgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBjYXNlIEtER0VUTU9ERTogeworICAgICAgaW50ICptb2RlID0gYXJndW1lbnQ7CisgICAgICAqbW9kZSA9IEtEX1RFWFQ7CisgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBkZWZhdWx0OgorICAgICAgYnJlYWs7CisgIH0KKworICBlcnJubyA9IEVBR0FJTjsKKyAgcmV0dXJuIC0xOworfQorCitzdGF0aWMgY29uc3QgaW50IE5PX0NPTlNPTEUgPSAwOworc3RhdGljIGNvbnN0IGludCBNQUlOX0NPTlNPTEUgPSAwOworc3RhdGljIGludCBtYWluQ29uc29sZURlc2NyaXB0b3I7CisKK3N0YXRpYyB2b2lkCitjbG9zZU1haW5Db25zb2xlICh2b2lkKSB7CisgIGNsb3NlQ29uc29sZSgmbWFpbkNvbnNvbGVEZXNjcmlwdG9yKTsKK30KKworc3RhdGljIGludAorb3Blbk1haW5Db25zb2xlICh2b2lkKSB7CisgIHJldHVybiBvcGVuQ29uc29sZSgmbWFpbkNvbnNvbGVEZXNjcmlwdG9yLCBNQUlOX0NPTlNPTEUpOworfQorCitzdGF0aWMgaW50Citjb250cm9sTWFpbkNvbnNvbGUgKGludCBvcGVyYXRpb24sIHZvaWQgKmFyZ3VtZW50KSB7CisgIHJldHVybiBjb250cm9sQ29uc29sZSgmbWFpbkNvbnNvbGVEZXNjcmlwdG9yLCBNQUlOX0NPTlNPTEUsIG9wZXJhdGlvbiwgYXJndW1lbnQpOworfQorCitzdGF0aWMgY29uc3QgY2hhciAqdW5pY29kZU5hbWUgPSBOVUxMOworCitzdGF0aWMgaW50CitzZXRVbmljb2RlTmFtZSAodm9pZCkgeworICBzdGF0aWMgY29uc3QgY2hhciAqY29uc3QgbmFtZXNbXSA9IHsidmNzdSIsICJ2Y3N1MCIsIE5VTEx9OworICByZXR1cm4gc2V0RGV2aWNlTmFtZSgmdW5pY29kZU5hbWUsIG5hbWVzLCAxLCAidW5pY29kZSIpOworfQorCitzdGF0aWMgdm9pZAorY2xvc2VVbmljb2RlIChpbnQgKmZkKSB7CisgIGlmICgqZmQgIT0gLTEpIHsKKyAgICBsb2dNZXNzYWdlKExPR19DQVRFR09SWShTQ1JFRU5fRFJJVkVSKSwgImNsb3NpbmcgdW5pY29kZTogZmQ9JWQiLCAqZmQpOworICAgIGlmIChjbG9zZSgqZmQpID09IC0xKSBsb2dTeXN0ZW1FcnJvcigiY2xvc2VbdW5pY29kZV0iKTsKKyAgICAqZmQgPSAtMTsKKyAgfQorfQorCitzdGF0aWMgaW50CitvcGVuVW5pY29kZSAoaW50ICpmZCwgaW50IHZ0KSB7CisgIGlmICghdW5pY29kZU5hbWUpIHJldHVybiAwOworICBpZiAoKmZkICE9IC0xKSByZXR1cm4gMTsKKworICBpbnQgb3BlbmVkID0gMDsKKyAgY2hhciAqbmFtZSA9IHZ0TmFtZSh1bmljb2RlTmFtZSwgdnQpOworCisgIGlmIChuYW1lKSB7CisgICAgaW50IHVuaWNvZGUgPSBvcGVuQ2hhcmFjdGVyRGV2aWNlKG5hbWUsIE9fUkRXUiwgVkNTX01BSk9SLCAwWDQwfHZ0KTsKKworICAgIGlmICh1bmljb2RlICE9IC0xKSB7CisgICAgICBsb2dNZXNzYWdlKExPR19DQVRFR09SWShTQ1JFRU5fRFJJVkVSKSwKKyAgICAgICAgICAgICAgICAgInVuaWNvZGUgb3BlbmVkOiAlczogZmQ9JWQiLCBuYW1lLCB1bmljb2RlKTsKKworICAgICAgY2xvc2VVbmljb2RlKGZkKTsKKyAgICAgICpmZCA9IHVuaWNvZGU7CisgICAgICBvcGVuZWQgPSAxOworICAgIH0gZWxzZSB7CisgICAgICB1bmljb2RlTmFtZSA9IE5VTEw7CisgICAgfQorCisgICAgZnJlZShuYW1lKTsKKyAgfQorCisgIHJldHVybiBvcGVuZWQ7Cit9CisKK3N0YXRpYyBpbnQgdW5pY29kZURlc2NyaXB0b3I7CisKK3N0YXRpYyB2b2lkCitjbG9zZUN1cnJlbnRVbmljb2RlICh2b2lkKSB7CisgIGNsb3NlVW5pY29kZSgmdW5pY29kZURlc2NyaXB0b3IpOworfQorCitzdGF0aWMgaW50CitvcGVuQ3VycmVudFVuaWNvZGUgKHZvaWQpIHsKKyAgaWYgKCF1bmljb2RlRW5hYmxlZCkgcmV0dXJuIDA7CisgIHJldHVybiBvcGVuVW5pY29kZSgmdW5pY29kZURlc2NyaXB0b3IsIHZpcnR1YWxUZXJtaW5hbE51bWJlcik7Cit9CisKK3N0YXRpYyBzaXplX3QKK3JlYWRVbmljb2RlRGV2aWNlIChvZmZfdCBvZmZzZXQsIHZvaWQgKmJ1ZmZlciwgc2l6ZV90IHNpemUpIHsKKyAgaWYgKG9wZW5DdXJyZW50VW5pY29kZSgpKSB7CisgICAgY29uc3Qgc3NpemVfdCBjb3VudCA9IHByZWFkKHVuaWNvZGVEZXNjcmlwdG9yLCBidWZmZXIsIHNpemUsIG9mZnNldCk7CisKKyAgICBpZiAoY291bnQgIT0gLTEpIHsKKyAgICAgIGlmIChycGlTcGFjZXNCdWcpIHsKKyAgICAgICAgdWludDMyX3QgKmNoYXJhY3RlciA9IGJ1ZmZlcjsKKyAgICAgICAgY29uc3QgdWludDMyX3QgKmVuZCA9IGNoYXJhY3RlciArIChjb3VudCAvIHNpemVvZigqY2hhcmFjdGVyKSk7CisKKyAgICAgICAgd2hpbGUgKGNoYXJhY3RlciA8IGVuZCkgeworICAgICAgICAgIGlmICgqY2hhcmFjdGVyID09IDBYMjAyMDIwMjApIHsKKyAgICAgICAgICAgIHN0YXRpYyB1bnNpZ25lZCBjaGFyIGJ1Z0xvZ2dlZCA9IDA7CisKKyAgICAgICAgICAgIGlmICghYnVnTG9nZ2VkKSB7CisgICAgICAgICAgICAgIGxvZ01lc3NhZ2UoTE9HX1dBUk5JTkcsICJMaW51eCBzY3JlZW4gZHJpdmVyOiBSUEkgc3BhY2VzIGJ1ZyBkZXRlY3RlZCIpOworICAgICAgICAgICAgICBidWdMb2dnZWQgPSAxOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAqY2hhcmFjdGVyID0gJyAnOworICAgICAgICAgIH0KKworICAgICAgICAgIGNoYXJhY3RlciArPSAxOworICAgICAgICB9CisgICAgICB9CisKKyAgICAgIHJldHVybiBjb3VudDsKKyAgICB9CisKKyAgICBpZiAoZXJybm8gIT0gRU5PREFUQSkgbG9nU3lzdGVtRXJyb3IoInVuaWNvZGUgcmVhZCIpOworICB9CisKKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBjaGFyICp1bmljb2RlQ2FjaGVCdWZmZXI7CitzdGF0aWMgc2l6ZV90IHVuaWNvZGVDYWNoZVNpemU7CitzdGF0aWMgc2l6ZV90IHVuaWNvZGVDYWNoZVVzZWQ7CisKK3N0YXRpYyBzaXplX3QKK3JlYWRVbmljb2RlQ2FjaGUgKG9mZl90IG9mZnNldCwgdm9pZCAqYnVmZmVyLCBzaXplX3Qgc2l6ZSkgeworICBpZiAob2Zmc2V0IDw9IHVuaWNvZGVDYWNoZVVzZWQpIHsKKyAgICBzaXplX3QgbGVmdCA9IHVuaWNvZGVDYWNoZVVzZWQgLSBvZmZzZXQ7CisgICAgaWYgKHNpemUgPiBsZWZ0KSBzaXplID0gbGVmdDsKKworICAgIG1lbWNweShidWZmZXIsICZ1bmljb2RlQ2FjaGVCdWZmZXJbb2Zmc2V0XSwgc2l6ZSk7CisgICAgcmV0dXJuIHNpemU7CisgIH0gZWxzZSB7CisgICAgbG9nTWVzc2FnZShMT0dfRVJSLCAiaW52YWxpZCB1bmljb2RlIGNhY2hlIG9mZnNldDogJXUiLCAodW5zaWduZWQgaW50KW9mZnNldCk7CisgIH0KKworICByZXR1cm4gMDsKK30KKworc3RhdGljIGludAorcmVhZFVuaWNvZGVEYXRhIChvZmZfdCBvZmZzZXQsIHZvaWQgKmJ1ZmZlciwgc2l6ZV90IHNpemUpIHsKKyAgc2l6ZV90IGNvdW50ID0gKHVuaWNvZGVDYWNoZUJ1ZmZlcj8gcmVhZFVuaWNvZGVDYWNoZTogcmVhZFVuaWNvZGVEZXZpY2UpKG9mZnNldCwgYnVmZmVyLCBzaXplKTsKKyAgaWYgKGNvdW50ID09IHNpemUpIHJldHVybiAxOworCisgIGxvZ01lc3NhZ2UoTE9HX0VSUiwKKyAgICAgICAgICAgICAidHJ1bmNhdGVkIHVuaWNvZGUgZGF0YTogZXhwZWN0ZWQgJXp1IGJ5dGVzIGJ1dCByZWFkICV6dSIsCisgICAgICAgICAgICAgc2l6ZSwgY291bnQpOworCisgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50CityZWFkVW5pY29kZUNvbnRlbnQgKG9mZl90IG9mZnNldCwgdWludDMyX3QgKmJ1ZmZlciwgc2l6ZV90IGNvdW50KSB7CisgIGNvdW50ICo9IHNpemVvZigqYnVmZmVyKTsKKyAgb2Zmc2V0ICo9IHNpemVvZigqYnVmZmVyKTsKKyAgcmV0dXJuIHJlYWRVbmljb2RlRGF0YShvZmZzZXQsIGJ1ZmZlciwgY291bnQpOworfQorCitzdGF0aWMgaW50CityZWZyZXNoVW5pY29kZUNhY2hlIChzaXplX3Qgc2l6ZSkgeworICBzaXplICo9IDQ7CisKKyAgaWYgKHNpemUgPiB1bmljb2RlQ2FjaGVTaXplKSB7CisgICAgY29uc3QgdW5zaWduZWQgaW50IGJpdHMgPSAxMDsKKyAgICBjb25zdCB1bnNpZ25lZCBpbnQgbWFzayA9ICgxIDw8IGJpdHMpIC0gMTsKKworICAgIHNpemUgfD0gbWFzazsKKyAgICBzaXplICs9IDE7CisgICAgdW5zaWduZWQgY2hhciAqYnVmZmVyID0gbWFsbG9jKHNpemUpOworCisgICAgaWYgKCFidWZmZXIpIHsKKyAgICAgIGxvZ01hbGxvY0Vycm9yKCk7CisgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBpZiAodW5pY29kZUNhY2hlQnVmZmVyKSBmcmVlKHVuaWNvZGVDYWNoZUJ1ZmZlcik7CisgICAgdW5pY29kZUNhY2hlQnVmZmVyID0gYnVmZmVyOworICAgIHVuaWNvZGVDYWNoZVNpemUgPSBzaXplOworICB9CisKKyAgdW5pY29kZUNhY2hlVXNlZCA9IHJlYWRVbmljb2RlRGV2aWNlKDAsIHVuaWNvZGVDYWNoZUJ1ZmZlciwgdW5pY29kZUNhY2hlU2l6ZSk7CisgIHJldHVybiAxOworfQorCitzdGF0aWMgY29uc3QgY2hhciAqc2NyZWVuTmFtZSA9IE5VTEw7CitzdGF0aWMgaW50IHNjcmVlbkRlc2NyaXB0b3I7CisKK3N0YXRpYyBpbnQgaXNNb25pdG9yYWJsZTsKK3N0YXRpYyBUSFJFQURfTE9DQUwgQXN5bmNIYW5kbGUgc2NyZWVuTW9uaXRvciA9IE5VTEw7CisKK3N0YXRpYyBpbnQgc2NyZWVuVXBkYXRlZDsKKworc3RhdGljIGludCBjdXJyZW50Q29uc29sZU51bWJlcjsKK3N0YXRpYyBpbnQgaW5UZXh0TW9kZTsKK3N0YXRpYyBUaW1lUGVyaW9kIG1hcHBpbmdSZWNhbGN1bGF0aW9uVGltZXI7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgdW5zaWduZWQgY2hhciByb3dzOworICB1bnNpZ25lZCBjaGFyIGNvbHVtbnM7Cit9IFNjcmVlblNpemU7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgdW5zaWduZWQgY2hhciBjb2x1bW47CisgIHVuc2lnbmVkIGNoYXIgcm93OworfSBTY3JlZW5Mb2NhdGlvbjsKKwordHlwZWRlZiBzdHJ1Y3QgeworICBTY3JlZW5TaXplIHNpemU7CisgIFNjcmVlbkxvY2F0aW9uIGxvY2F0aW9uOworfSBTY3JlZW5IZWFkZXI7CisKKyNpZmRlZiBIQVZFX1NZU19QT0xMX0gKKyNpbmNsdWRlIDxwb2xsLmg+CisKK3N0YXRpYyBpbnQKK2Nhbk1vbml0b3JTY3JlZW4gKHZvaWQpIHsKKyAgc3RydWN0IHBvbGxmZCBwb2xsRGVzY3JpcHRvciA9IHsKKyAgICAuZmQgPSBzY3JlZW5EZXNjcmlwdG9yLAorICAgIC5ldmVudHMgPSBQT0xMUFJJCisgIH07CisKKyAgcmV0dXJuIHBvbGwoJnBvbGxEZXNjcmlwdG9yLCAxLCAwKSA9PSAxOworfQorCisjZWxzZSAvKiBjYW4gcG9sbCAqLworc3RhdGljIGludAorY2FuTW9uaXRvclNjcmVlbiAodm9pZCkgeworICByZXR1cm4gMDsKK30KKyNlbmRpZiAvKiBjYW4gcG9sbCAqLworCitzdGF0aWMgaW50CitzZXRTY3JlZW5OYW1lICh2b2lkKSB7CisgIHN0YXRpYyBjb25zdCBjaGFyICpjb25zdCBuYW1lc1tdID0geyJ2Y3NhIiwgInZjc2EwIiwgInZjYy9hIiwgTlVMTH07CisgIHJldHVybiBzZXREZXZpY2VOYW1lKCZzY3JlZW5OYW1lLCBuYW1lcywgMCwgInNjcmVlbiIpOworfQorCitzdGF0aWMgaW50CitvcGVuU2NyZWVuRGV2aWNlIChpbnQgKmZkLCBpbnQgdnQpIHsKKyAgaW50IG9wZW5lZCA9IDA7CisgIGNoYXIgKm5hbWUgPSB2dE5hbWUoc2NyZWVuTmFtZSwgdnQpOworCisgIGlmIChuYW1lKSB7CisgICAgaW50IHNjcmVlbiA9IG9wZW5DaGFyYWN0ZXJEZXZpY2UobmFtZSwgT19SRFdSLCBWQ1NfTUFKT1IsIDBYODB8dnQpOworCisgICAgaWYgKHNjcmVlbiAhPSAtMSkgeworICAgICAgbG9nTWVzc2FnZShMT0dfQ0FURUdPUlkoU0NSRUVOX0RSSVZFUiksCisgICAgICAgICAgICAgICAgICJzY3JlZW4gb3BlbmVkOiAlczogZmQ9JWQiLCBuYW1lLCBzY3JlZW4pOworCisgICAgICAqZmQgPSBzY3JlZW47CisgICAgICBvcGVuZWQgPSAxOworICAgIH0KKworICAgIGZyZWUobmFtZSk7CisgIH0KKworICByZXR1cm4gb3BlbmVkOworfQorCitzdGF0aWMgdm9pZAorY2xvc2VDdXJyZW50U2NyZWVuICh2b2lkKSB7CisgIGlmIChzY3JlZW5Nb25pdG9yKSB7CisgICAgYXN5bmNDYW5jZWxSZXF1ZXN0KHNjcmVlbk1vbml0b3IpOworICAgIHNjcmVlbk1vbml0b3IgPSBOVUxMOworICB9CisKKyAgaWYgKHNjcmVlbkRlc2NyaXB0b3IgIT0gLTEpIHsKKyAgICBsb2dNZXNzYWdlKExPR19DQVRFR09SWShTQ1JFRU5fRFJJVkVSKSwKKyAgICAgICAgICAgICAgICJjbG9zaW5nIHNjcmVlbjogZmQ9JWQiLCBzY3JlZW5EZXNjcmlwdG9yKTsKKworICAgIGlmIChjbG9zZShzY3JlZW5EZXNjcmlwdG9yKSA9PSAtMSkgbG9nU3lzdGVtRXJyb3IoImNsb3NlW3NjcmVlbl0iKTsKKyAgICBzY3JlZW5EZXNjcmlwdG9yID0gLTE7CisgIH0KK30KKworc3RhdGljIGludAorc2V0Q3VycmVudFNjcmVlbiAodW5zaWduZWQgY2hhciB2dCkgeworICBpbnQgc2NyZWVuOworICBpZiAoIW9wZW5TY3JlZW5EZXZpY2UoJnNjcmVlbiwgdnQpKSByZXR1cm4gMDsKKworICBjbG9zZUN1cnJlbnRDb25zb2xlKCk7CisgIGNsb3NlQ3VycmVudFVuaWNvZGUoKTsKKyAgY2xvc2VDdXJyZW50U2NyZWVuKCk7CisgIHNjcmVlbkRlc2NyaXB0b3IgPSBzY3JlZW47CisgIHZpcnR1YWxUZXJtaW5hbE51bWJlciA9IHZ0OworCisgIGlzTW9uaXRvcmFibGUgPSBjYW5Nb25pdG9yU2NyZWVuKCk7CisgIGxvZ01lc3NhZ2UoTE9HX0NBVEVHT1JZKFNDUkVFTl9EUklWRVIpLAorICAgICAgICAgICAgICJzY3JlZW4gaXMgbW9uaXRvcmFibGU6ICVzIiwKKyAgICAgICAgICAgICAoaXNNb25pdG9yYWJsZT8gInllcyI6ICJubyIpKTsKKworICBzY3JlZW5Nb25pdG9yID0gTlVMTDsKKyAgc2NyZWVuVXBkYXRlZCA9IDE7CisgIHJldHVybiAxOworfQorCitzdGF0aWMgc2l6ZV90CityZWFkU2NyZWVuRGV2aWNlIChvZmZfdCBvZmZzZXQsIHZvaWQgKmJ1ZmZlciwgc2l6ZV90IHNpemUpIHsKKyAgY29uc3Qgc3NpemVfdCBjb3VudCA9IHByZWFkKHNjcmVlbkRlc2NyaXB0b3IsIGJ1ZmZlciwgc2l6ZSwgb2Zmc2V0KTsKKyAgaWYgKGNvdW50ICE9IC0xKSByZXR1cm4gY291bnQ7CisKKyAgbG9nU3lzdGVtRXJyb3IoInNjcmVlbiByZWFkIik7CisgIHJldHVybiAwOworfQorCitzdGF0aWMgdW5zaWduZWQgY2hhciAqc2NyZWVuQ2FjaGVCdWZmZXI7CitzdGF0aWMgc2l6ZV90IHNjcmVlbkNhY2hlU2l6ZTsKKworc3RhdGljIHNpemVfdAorcmVhZFNjcmVlbkNhY2hlIChvZmZfdCBvZmZzZXQsIHZvaWQgKmJ1ZmZlciwgc2l6ZV90IHNpemUpIHsKKyAgaWYgKG9mZnNldCA8PSBzY3JlZW5DYWNoZVNpemUpIHsKKyAgICBzaXplX3QgbGVmdCA9IHNjcmVlbkNhY2hlU2l6ZSAtIG9mZnNldDsKKworICAgIGlmIChzaXplID4gbGVmdCkgc2l6ZSA9IGxlZnQ7CisgICAgbWVtY3B5KGJ1ZmZlciwgJnNjcmVlbkNhY2hlQnVmZmVyW29mZnNldF0sIHNpemUpOworICAgIHJldHVybiBzaXplOworICB9IGVsc2UgeworICAgIGxvZ01lc3NhZ2UoTE9HX0VSUiwgImludmFsaWQgc2NyZWVuIGNhY2hlIG9mZnNldDogJXUiLCAodW5zaWduZWQgaW50KW9mZnNldCk7CisgIH0KKworICByZXR1cm4gMDsKK30KKworc3RhdGljIGludAorcmVhZFNjcmVlbkRhdGEgKG9mZl90IG9mZnNldCwgdm9pZCAqYnVmZmVyLCBzaXplX3Qgc2l6ZSkgeworICBzaXplX3QgY291bnQgPSAoc2NyZWVuQ2FjaGVCdWZmZXI/IHJlYWRTY3JlZW5DYWNoZTogcmVhZFNjcmVlbkRldmljZSkob2Zmc2V0LCBidWZmZXIsIHNpemUpOworICBpZiAoY291bnQgPT0gc2l6ZSkgcmV0dXJuIDE7CisKKyAgbG9nTWVzc2FnZShMT0dfRVJSLAorICAgICAgICAgICAgICJ0cnVuY2F0ZWQgc2NyZWVuIGRhdGE6IGV4cGVjdGVkICV6dSBieXRlcyBidXQgcmVhZCAlenUiLAorICAgICAgICAgICAgIHNpemUsIGNvdW50KTsKKworICByZXR1cm4gMDsKK30KKworc3RhdGljIGludAorcmVhZFNjcmVlbkhlYWRlciAoU2NyZWVuSGVhZGVyICpoZWFkZXIpIHsKKyAgcmV0dXJuIHJlYWRTY3JlZW5EYXRhKDAsIGhlYWRlciwgc2l6ZW9mKCpoZWFkZXIpKTsKK30KKworc3RhdGljIGludAorcmVhZFNjcmVlblNpemUgKFNjcmVlblNpemUgKnNpemUpIHsKKyAgcmV0dXJuIHJlYWRTY3JlZW5EYXRhKDAsIHNpemUsIHNpemVvZigqc2l6ZSkpOworfQorCitzdGF0aWMgaW50CityZWFkU2NyZWVuQ29udGVudCAob2ZmX3Qgb2Zmc2V0LCB1aW50MTZfdCAqYnVmZmVyLCBzaXplX3QgY291bnQpIHsKKyAgY291bnQgKj0gc2l6ZW9mKCpidWZmZXIpOworICBvZmZzZXQgKj0gc2l6ZW9mKCpidWZmZXIpOworICBvZmZzZXQgKz0gc2l6ZW9mKFNjcmVlbkhlYWRlcik7CisgIHJldHVybiByZWFkU2NyZWVuRGF0YShvZmZzZXQsIGJ1ZmZlciwgY291bnQpOworfQorCitzdGF0aWMgc2l6ZV90CitnZXRTY3JlZW5CdWZmZXJTaXplIChjb25zdCBTY3JlZW5TaXplICpzY3JlZW5TaXplKSB7CisgIHJldHVybiAoc2NyZWVuU2l6ZS0+Y29sdW1ucyAqIHNjcmVlblNpemUtPnJvd3MgKiAyKSArIHNpemVvZihTY3JlZW5IZWFkZXIpOworfQorCitzdGF0aWMgc2l6ZV90CityZWZyZXNoU2NyZWVuQnVmZmVyICh1bnNpZ25lZCBjaGFyICoqc2NyZWVuQnVmZmVyLCBzaXplX3QgKnNjcmVlblNpemUpIHsKKyAgaWYgKCEqc2NyZWVuQnVmZmVyKSB7CisgICAgU2NyZWVuSGVhZGVyIGhlYWRlcjsKKworICAgIHsKKyAgICAgIHNpemVfdCBzaXplID0gc2l6ZW9mKGhlYWRlcik7CisgICAgICBzaXplX3QgY291bnQgPSByZWFkU2NyZWVuRGV2aWNlKDAsICZoZWFkZXIsIHNpemUpOworICAgICAgaWYgKCFjb3VudCkgcmV0dXJuIDA7CisKKyAgICAgIGlmIChjb3VudCA8IHNpemUpIHsKKyAgICAgICAgbG9nQnl0ZXMoTE9HX0VSUiwgInRydW5jYXRlZCBzY3JlZW4gaGVhZGVyIiwgJmhlYWRlciwgY291bnQpOworICAgICAgICByZXR1cm4gMDsKKyAgICAgIH0KKyAgICB9CisKKyAgICB7CisgICAgICBzaXplX3Qgc2l6ZSA9IGdldFNjcmVlbkJ1ZmZlclNpemUoJmhlYWRlci5zaXplKTsKKyAgICAgIHVuc2lnbmVkIGNoYXIgKmJ1ZmZlciA9IG1hbGxvYyhzaXplKTsKKworICAgICAgaWYgKCFidWZmZXIpIHsKKyAgICAgICAgbG9nTWFsbG9jRXJyb3IoKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgICB9CisKKyAgICAgICpzY3JlZW5CdWZmZXIgPSBidWZmZXI7CisgICAgICAqc2NyZWVuU2l6ZSA9IHNpemU7CisgICAgfQorICB9CisKKyAgd2hpbGUgKDEpIHsKKyAgICBzaXplX3QgY291bnQgPSByZWFkU2NyZWVuRGV2aWNlKDAsICpzY3JlZW5CdWZmZXIsICpzY3JlZW5TaXplKTsKKyAgICBpZiAoIWNvdW50KSByZXR1cm4gMDsKKworICAgIGlmIChjb3VudCA8IHNpemVvZihTY3JlZW5IZWFkZXIpKSB7CisgICAgICBsb2dCeXRlcyhMT0dfRVJSLCAidHJ1bmNhdGVkIHNjcmVlbiBoZWFkZXIiLCAqc2NyZWVuQnVmZmVyLCBjb3VudCk7CisgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICB7CisgICAgICBTY3JlZW5IZWFkZXIgKmhlYWRlciA9ICh2b2lkICopKnNjcmVlbkJ1ZmZlcjsKKyAgICAgIHNpemVfdCBzaXplID0gZ2V0U2NyZWVuQnVmZmVyU2l6ZSgmaGVhZGVyLT5zaXplKTsKKyAgICAgIGlmIChjb3VudCA+PSBzaXplKSByZXR1cm4gaGVhZGVyLT5zaXplLmNvbHVtbnMgKiBoZWFkZXItPnNpemUucm93czsKKworICAgICAgeworICAgICAgICB1bnNpZ25lZCBjaGFyICpidWZmZXIgPSByZWFsbG9jKCpzY3JlZW5CdWZmZXIsIHNpemUpOworCisgICAgICAgIGlmICghYnVmZmVyKSB7CisgICAgICAgICAgbG9nTWFsbG9jRXJyb3IoKTsKKyAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQorCisgICAgICAgICpzY3JlZW5CdWZmZXIgPSBidWZmZXI7CisgICAgICAgICpzY3JlZW5TaXplID0gc2l6ZTsKKyAgICAgIH0KKyAgICB9CisgIH0KK30KKworc3RhdGljIHN0cnVjdCB1bmlwYWlyICpzY3JlZW5Gb250TWFwVGFibGUgPSBOVUxMOworc3RhdGljIHVuc2lnbmVkIHNob3J0IHNjcmVlbkZvbnRNYXBTaXplID0gMDsKK3N0YXRpYyB1bnNpZ25lZCBzaG9ydCBzY3JlZW5Gb250TWFwQ291bnQ7CisKK3N0YXRpYyBpbnQKK3NldFNjcmVlbkZvbnRNYXAgKGludCBmb3JjZSkgeworICBzdHJ1Y3QgdW5pbWFwZGVzYyBzZm07CisgIHVuc2lnbmVkIHNob3J0IHNpemUgPSBmb3JjZT8gMDogc2NyZWVuRm9udE1hcENvdW50OworCisgIGlmICghc2l6ZSkgc2l6ZSA9IDBYMTAwOworCisgIHdoaWxlICgxKSB7CisgICAgc2ZtLmVudHJ5X2N0ID0gc2l6ZTsKKworICAgIGlmICghKHNmbS5lbnRyaWVzID0gbWFsbG9jKHNmbS5lbnRyeV9jdCAqIHNpemVvZigqc2ZtLmVudHJpZXMpKSkpIHsKKyAgICAgIGxvZ01hbGxvY0Vycm9yKCk7CisgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBpZiAoY29udHJvbEN1cnJlbnRDb25zb2xlKEdJT19VTklNQVAsICZzZm0pICE9IC0xKSBicmVhazsKKyAgICBmcmVlKHNmbS5lbnRyaWVzKTsKKworICAgIGlmIChlcnJubyAhPSBFTk9NRU0pIHsKKyAgICAgIGxvZ1N5c3RlbUVycm9yKCJpb2N0bFtHSU9fVU5JTUFQXSIpOworICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgaWYgKCEoc2l6ZSA8PD0gMSkpIHsKKyAgICAgIGxvZ01lc3NhZ2UoTE9HX0VSUiwgInNjcmVlbiBmb250IG1hcCB0b28gYmlnIik7CisgICAgICByZXR1cm4gMDsKKyAgICB9CisgIH0KKworICBpZiAoIWZvcmNlKSB7CisgICAgaWYgKHNmbS5lbnRyeV9jdCA9PSBzY3JlZW5Gb250TWFwQ291bnQpIHsKKyAgICAgIGlmIChtZW1jbXAoc2ZtLmVudHJpZXMsIHNjcmVlbkZvbnRNYXBUYWJsZSwgc2ZtLmVudHJ5X2N0KnNpemVvZihzZm0uZW50cmllc1swXSkpID09IDApIHsKKyAgICAgICAgZnJlZShzZm0uZW50cmllcyk7CisgICAgICAgIHJldHVybiAwOworICAgICAgfQorICAgIH0KKyAgfQorCisgIGlmIChzY3JlZW5Gb250TWFwVGFibGUpIGZyZWUoc2NyZWVuRm9udE1hcFRhYmxlKTsKKyAgc2NyZWVuRm9udE1hcFRhYmxlID0gc2ZtLmVudHJpZXM7CisgIHNjcmVlbkZvbnRNYXBDb3VudCA9IHNmbS5lbnRyeV9jdDsKKyAgc2NyZWVuRm9udE1hcFNpemUgPSBzaXplOworICBsb2dNZXNzYWdlKExPR19DQVRFR09SWShTQ1JFRU5fRFJJVkVSKSwKKyAgICAgICAgICAgICAiRm9udCBNYXAgU2l6ZTogJWQiLCBzY3JlZW5Gb250TWFwQ291bnQpOworCisgIGlmIChsb2dTY3JlZW5Gb250TWFwKSB7CisgICAgZm9yICh1bnNpZ25lZCBpbnQgaT0wOyBpPHNjcmVlbkZvbnRNYXBDb3VudDsgaSs9MSkgeworICAgICAgY29uc3Qgc3RydWN0IHVuaXBhaXIgKm1hcCA9ICZzY3JlZW5Gb250TWFwVGFibGVbaV07CisKKyAgICAgIGxvZ01lc3NhZ2UoTE9HX0NBVEVHT1JZKFNDUkVFTl9EUklWRVIpLAorICAgICAgICAgICAgICAgICAiU0ZNWyUwM3VdOiBVKyUwNFhAJTA0WCIsCisgICAgICAgICAgICAgICAgIGksIG1hcC0+dW5pY29kZSwgbWFwLT5mb250cG9zKTsKKyAgICB9CisgIH0KKworICByZXR1cm4gMTsKK30KKworc3RhdGljIGludCB2Z2FDaGFyYWN0ZXJDb3VudDsKK3N0YXRpYyBpbnQgdmdhTGFyZ2VUYWJsZTsKKworc3RhdGljIGludAorc2V0VmdhQ2hhcmFjdGVyQ291bnQgKGludCBmb3JjZSkgeworICBpbnQgb2xkQ291bnQgPSB2Z2FDaGFyYWN0ZXJDb3VudDsKKworICB7CisgICAgc3RydWN0IGNvbnNvbGVfZm9udF9vcCBjZm8gPSB7CisgICAgICAud2lkdGggPSBVSU5UX01BWCwKKyAgICAgIC5oZWlnaHQgPSBVSU5UX01BWCwKKyAgICAgIC5vcCA9IEtEX0ZPTlRfT1BfR0VUCisgICAgfTsKKworICAgIHZnYUNoYXJhY3RlckNvdW50ID0gMDsKKyAgICB7CisgICAgICBzdGF0aWMgdW5zaWduZWQgY2hhciBpc05vdEltcGxlbWVudGVkID0gMDsKKworICAgICAgaWYgKCFpc05vdEltcGxlbWVudGVkKSB7CisgICAgICAgIGlmIChjb250cm9sQ3VycmVudENvbnNvbGUoS0RGT05UT1AsICZjZm8pICE9IC0xKSB7CisgICAgICAgICAgbG9nTWVzc2FnZShMT0dfQ0FURUdPUlkoU0NSRUVOX0RSSVZFUiksCisgICAgICAgICAgICAgICAgICAgICAiRm9udCBQcm9wZXJ0aWVzOiAldXgldSoldSIsCisgICAgICAgICAgICAgICAgICAgICBjZm8ud2lkdGgsIGNmby5oZWlnaHQsIGNmby5jaGFyY291bnQpOworICAgICAgICAgIHZnYUNoYXJhY3RlckNvdW50ID0gY2ZvLmNoYXJjb3VudDsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICBpZiAoZXJybm8gPT0gRU5PU1lTKSBpc05vdEltcGxlbWVudGVkID0gMTsKKworICAgICAgICAgIGlmIChlcnJubyAhPSBFSU5WQUwpIHsKKyAgICAgICAgICAgIGxvZ01lc3NhZ2UoTE9HX1dBUk5JTkcsICJpb2N0bFtLREZPTlRPUFtHRVRdXTogJXMiLCBzdHJlcnJvcihlcnJubykpOworICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgfQorICAgIH0KKyAgfQorCisgIGlmICghdmdhQ2hhcmFjdGVyQ291bnQpIHsKKyAgICB1bnNpZ25lZCBpbnQgaW5kZXg7CisKKyAgICBmb3IgKGluZGV4PTA7IGluZGV4PHNjcmVlbkZvbnRNYXBDb3VudDsgKytpbmRleCkgeworICAgICAgY29uc3Qgc3RydWN0IHVuaXBhaXIgKm1hcCA9ICZzY3JlZW5Gb250TWFwVGFibGVbaW5kZXhdOworCisgICAgICBpZiAodmdhQ2hhcmFjdGVyQ291bnQgPD0gbWFwLT5mb250cG9zKSB2Z2FDaGFyYWN0ZXJDb3VudCA9IG1hcC0+Zm9udHBvcyArIDE7CisgICAgfQorICB9CisKKyAgdmdhQ2hhcmFjdGVyQ291bnQgPSAoKHZnYUNoYXJhY3RlckNvdW50IC0gMSkgfCAwWEZGKSArIDE7CisgIHZnYUxhcmdlVGFibGUgPSB2Z2FDaGFyYWN0ZXJDb3VudCA+IDBYMTAwOworCisgIGlmICghZm9yY2UpIHsKKyAgICBpZiAodmdhQ2hhcmFjdGVyQ291bnQgPT0gb2xkQ291bnQpIHsKKyAgICAgIHJldHVybiAwOworICAgIH0KKyAgfQorCisgIGxvZ01lc3NhZ2UoTE9HX0NBVEVHT1JZKFNDUkVFTl9EUklWRVIpLAorICAgICAgICAgICAgICJWR0EgQ2hhcmFjdGVyIENvdW50OiAlZCglcykiLAorICAgICAgICAgICAgIHZnYUNoYXJhY3RlckNvdW50LAorICAgICAgICAgICAgIHZnYUxhcmdlVGFibGU/ICJsYXJnZSI6ICJzbWFsbCIpOworCisgIHJldHVybiAxOworfQorCitzdGF0aWMgdW5zaWduZWQgc2hvcnQgaGlnaEZvbnRCaXQ7CitzdGF0aWMgdW5zaWduZWQgc2hvcnQgZm9udEF0dHJpYnV0ZXNNYXNrOworc3RhdGljIHVuc2lnbmVkIHNob3J0IHVuc2hpZnRlZEF0dHJpYnV0ZXNNYXNrOworc3RhdGljIHVuc2lnbmVkIHNob3J0IHNoaWZ0ZWRBdHRyaWJ1dGVzTWFzazsKKworc3RhdGljIHZvaWQKK3NldEF0dHJpYnV0ZXNNYXNrcyAodW5zaWduZWQgc2hvcnQgYml0KSB7CisgIGZvbnRBdHRyaWJ1dGVzTWFzayA9IGJpdDsKKyAgdW5zaGlmdGVkQXR0cmlidXRlc01hc2sgPSBiaXQgLSAxOworICBzaGlmdGVkQXR0cmlidXRlc01hc2sgPSB+dW5zaGlmdGVkQXR0cmlidXRlc01hc2sgJiB+Yml0OworICB1bnNoaWZ0ZWRBdHRyaWJ1dGVzTWFzayAmPSAwWEZGMDA7CisgIGxvZ01lc3NhZ2UoTE9HX0NBVEVHT1JZKFNDUkVFTl9EUklWRVIpLAorICAgICAgICAgICAgICJBdHRyaWJ1dGVzIE1hc2tzOiBGb250OiUwNFggVW5zaGlmdGVkOiUwNFggU2hpZnRlZDolMDRYIiwKKyAgICAgICAgICAgICBmb250QXR0cmlidXRlc01hc2ssIHVuc2hpZnRlZEF0dHJpYnV0ZXNNYXNrLCBzaGlmdGVkQXR0cmlidXRlc01hc2spOworfQorCitzdGF0aWMgaW50CitkZXRlcm1pbmVBdHRyaWJ1dGVzTWFza3MgKHZvaWQpIHsKKyAgaWYgKCF2Z2FMYXJnZVRhYmxlKSB7CisgICAgc2V0QXR0cmlidXRlc01hc2tzKDApOworICB9IGVsc2UgaWYgKGhpZ2hGb250Qml0KSB7CisgICAgc2V0QXR0cmlidXRlc01hc2tzKGhpZ2hGb250Qml0KTsKKyAgfSBlbHNlIHsKKyAgICB7CisgICAgICB1bnNpZ25lZCBzaG9ydCBtYXNrOworCisgICAgICBpZiAoY29udHJvbEN1cnJlbnRDb25zb2xlKFZUX0dFVEhJRk9OVE1BU0ssICZtYXNrKSA9PSAtMSkgeworICAgICAgICBpZiAoZXJybm8gIT0gRUlOVkFMKSBsb2dTeXN0ZW1FcnJvcigiaW9jdGxbVlRfR0VUSElGT05UTUFTS10iKTsKKyAgICAgIH0gZWxzZSBpZiAobWFzayAmIDBYRkYpIHsKKyAgICAgICAgbG9nTWVzc2FnZShMT0dfRVJSLCAiaGlnaCBmb250IG1hc2sgaGFzIGJpdCBzZXQgaW4gbG93LW9yZGVyIGJ5dGU6ICUwNFgiLCBtYXNrKTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIHNldEF0dHJpYnV0ZXNNYXNrcyhtYXNrKTsKKyAgICAgICAgcmV0dXJuIDE7CisgICAgICB9CisgICAgfQorCisgICAgeworICAgICAgU2NyZWVuU2l6ZSBzaXplOworCisgICAgICBpZiAocmVhZFNjcmVlblNpemUoJnNpemUpKSB7CisgICAgICAgIGNvbnN0IHNpemVfdCBjb3VudCA9IHNpemUuY29sdW1ucyAqIHNpemUucm93czsKKyAgICAgICAgdW5zaWduZWQgc2hvcnQgYnVmZmVyW2NvdW50XTsKKworICAgICAgICBpZiAocmVhZFNjcmVlbkNvbnRlbnQoMCwgYnVmZmVyLCBBUlJBWV9DT1VOVChidWZmZXIpKSkgeworICAgICAgICAgIHVuc2lnbmVkIGludCBjb3VudHNbMFgxMF07CisgICAgICAgICAgbWVtc2V0KGNvdW50cywgMCwgc2l6ZW9mKGNvdW50cykpOworCisgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaW5kZXg9MDsgaW5kZXg8Y291bnQ7IGluZGV4Kz0xKSB7CisgICAgICAgICAgICBjb3VudHNbKGJ1ZmZlcltpbmRleF0gJiAwWDBGMDApID4+IDhdICs9IDE7CisgICAgICAgICAgfQorCisgICAgICAgICAgc2V0QXR0cmlidXRlc01hc2tzKChjb3VudHNbMFhFXSA+IGNvdW50c1swWDddKT8gMFgwMTAwOiAwWDA4MDApOworICAgICAgICAgIHJldHVybiAxOworICAgICAgICB9CisgICAgICB9CisgICAgfQorICB9CisKKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB3Y2hhcl90IHRyYW5zbGF0aW9uVGFibGVbMFgyMDBdOworCitzdGF0aWMgaW50CitzZXRUcmFuc2xhdGlvblRhYmxlIChpbnQgZm9yY2UpIHsKKyAgaW50IG1hcHBpbmdDaGFuZ2VkID0gMDsKKyAgaW50IHNmbUNoYW5nZWQgPSBzZXRTY3JlZW5Gb250TWFwKGZvcmNlKTsKKyAgaW50IHZjY0NoYW5nZWQgPSAoc2ZtQ2hhbmdlZCB8fCBmb3JjZSk/IHNldFZnYUNoYXJhY3RlckNvdW50KGZvcmNlKTogMDsKKworICBpZiAodmNjQ2hhbmdlZCB8fCBmb3JjZSkgZGV0ZXJtaW5lQXR0cmlidXRlc01hc2tzKCk7CisKKyAgaWYgKHNmbUNoYW5nZWQgfHwgdmNjQ2hhbmdlZCkgeworICAgIHVuc2lnbmVkIGludCBjb3VudCA9IEFSUkFZX0NPVU5UKHRyYW5zbGF0aW9uVGFibGUpOworCisgICAgZm9yICh1bnNpZ25lZCBpbnQgaT0wOyBpPGNvdW50OyBpKz0xKSB7CisgICAgICB0cmFuc2xhdGlvblRhYmxlW2ldID0gVU5JQ09ERV9ST1dfRElSRUNUIHwgaTsKKyAgICB9CisKKyAgICB7CisgICAgICB1bnNpZ25lZCBpbnQgc2NyZWVuRm9udE1hcEluZGV4ID0gc2NyZWVuRm9udE1hcENvdW50OworCisgICAgICB3aGlsZSAoc2NyZWVuRm9udE1hcEluZGV4ID4gMCkgeworICAgICAgICBjb25zdCBzdHJ1Y3QgdW5pcGFpciAqc2ZtID0gJnNjcmVlbkZvbnRNYXBUYWJsZVstLXNjcmVlbkZvbnRNYXBJbmRleF07CisKKyAgICAgICAgaWYgKHNmbS0+Zm9udHBvcyA8IGNvdW50KSB7CisgICAgICAgICAgd2NoYXJfdCAqY2hhcmFjdGVyID0gJnRyYW5zbGF0aW9uVGFibGVbc2ZtLT5mb250cG9zXTsKKyAgICAgICAgICBpZiAoKmNoYXJhY3RlciA9PSAwWDIwKSBjb250aW51ZTsKKyAgICAgICAgICAqY2hhcmFjdGVyID0gc2ZtLT51bmljb2RlOworICAgICAgICB9CisgICAgICB9CisgICAgfQorCisgICAgbWFwcGluZ0NoYW5nZWQgPSAxOworICB9CisKKyAgaWYgKG1hcHBpbmdDaGFuZ2VkKSB7CisgICAgbG9nTWVzc2FnZShMT0dfQ0FURUdPUlkoU0NSRUVOX0RSSVZFUiksICJjaGFyYWN0ZXIgbWFwcGluZyBjaGFuZ2VkIik7CisgIH0KKworICByZXN0YXJ0VGltZVBlcmlvZCgmbWFwcGluZ1JlY2FsY3VsYXRpb25UaW1lcik7CisgIHJldHVybiBtYXBwaW5nQ2hhbmdlZDsKK30KKworc3RhdGljIGludAorcmVhZFNjcmVlblJvdyAoaW50IHJvdywgc2l6ZV90IHNpemUsIFNjcmVlbkNoYXJhY3RlciAqY2hhcmFjdGVycywgaW50ICpvZmZzZXRzKSB7CisgIG9mZl90IG9mZnNldCA9IHJvdyAqIHNpemU7CisKKyAgdWludDE2X3QgdmdhQnVmZmVyW3NpemVdOworICBpZiAoIXJlYWRTY3JlZW5Db250ZW50KG9mZnNldCwgdmdhQnVmZmVyLCBzaXplKSkgcmV0dXJuIDA7CisKKyAgdWludDMyX3QgdW5pY29kZUJ1ZmZlcltzaXplXTsKKyAgY29uc3QgdWludDMyX3QgKnVuaWNvZGUgPSBOVUxMOworCisgIGlmICh1bmljb2RlRW5hYmxlZCkgeworICAgIGlmIChyZWFkVW5pY29kZUNvbnRlbnQob2Zmc2V0LCB1bmljb2RlQnVmZmVyLCBzaXplKSkgeworICAgICAgdW5pY29kZSA9IHVuaWNvZGVCdWZmZXI7CisgICAgfQorICB9CisKKyAgU2NyZWVuQ2hhcmFjdGVyICpjaGFyYWN0ZXIgPSBjaGFyYWN0ZXJzOworICBpbnQgY29sdW1uID0gMDsKKworICB7CisgICAgY29uc3QgdWludDE2X3QgKnZnYSA9IHZnYUJ1ZmZlcjsKKyAgICBjb25zdCB1aW50MTZfdCAqZW5kID0gdmdhICsgc2l6ZTsKKyAgICBpbnQgYmxhbmtzID0gMDsKKworICAgIHdoaWxlICh2Z2EgPCBlbmQpIHsKKyAgICAgIHdpbnRfdCB3YzsKKworICAgICAgaWYgKHVuaWNvZGUpIHsKKyAgICAgICAgd2MgPSAqdW5pY29kZSsrOworCisgICAgICAgIGlmICgoYmxhbmtzID4gMCkgJiYgKHdjID09IFdDX0MoJyAnKSkpIHsKKyAgICAgICAgICBibGFua3MgLT0gMTsKKyAgICAgICAgICB3YyA9IFdFT0Y7CisgICAgICAgIH0gZWxzZSBpZiAod2lkZWNoYXJQYWRkaW5nKSB7CisgICAgICAgICAgYmxhbmtzID0gMDsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICBibGFua3MgPSBnZXRDaGFyYWN0ZXJXaWR0aCh3YykgLSAxOworICAgICAgICB9CisgICAgICB9IGVsc2UgeworICAgICAgICB1aW50MTZfdCBwb3NpdGlvbiA9ICp2Z2EgJiAwWEZGOworICAgICAgICBpZiAoKnZnYSAmIGZvbnRBdHRyaWJ1dGVzTWFzaykgcG9zaXRpb24gfD0gMFgxMDA7CisgICAgICAgIHdjID0gY29udmVydENoYXJhY3RlcigmdHJhbnNsYXRpb25UYWJsZVtwb3NpdGlvbl0pOworICAgICAgfQorCisgICAgICBpZiAod2MgIT0gV0VPRikgeworICAgICAgICBpZiAoY2hhcmFjdGVyKSB7CisgICAgICAgICAgY2hhcmFjdGVyLT5hdHRyaWJ1dGVzID0gKCgqdmdhICYgdW5zaGlmdGVkQXR0cmlidXRlc01hc2spIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgqdmdhICYgc2hpZnRlZEF0dHJpYnV0ZXNNYXNrKSA+PiAxKSkgPj4gODsKKworICAgICAgICAgIGNoYXJhY3Rlci0+dGV4dCA9IHdjOworICAgICAgICAgIGNoYXJhY3RlciArPSAxOworICAgICAgICB9CisKKyAgICAgICAgaWYgKG9mZnNldHMpIG9mZnNldHNbY29sdW1uXSA9IHZnYSAtIHZnYUJ1ZmZlcjsKKyAgICAgICAgY29sdW1uICs9IDE7CisgICAgICB9CisKKyAgICAgIHZnYSArPSAxOworICAgIH0KKyAgfQorCisgIGlmICghdW5pY29kZSkgeworICAgIHdpbnRfdCB3YzsKKworICAgIHdoaWxlICgod2MgPSBjb252ZXJ0Q2hhcmFjdGVyKE5VTEwpKSAhPSBXRU9GKSB7CisgICAgICBpZiAoY29sdW1uIDwgc2l6ZSkgeworICAgICAgICBpZiAoY2hhcmFjdGVyKSB7CisgICAgICAgICAgY2hhcmFjdGVyLT50ZXh0ID0gd2M7CisgICAgICAgICAgY2hhcmFjdGVyLT5hdHRyaWJ1dGVzID0gU0NSX0NPTE9VUl9ERUZBVUxUOworICAgICAgICAgIGNoYXJhY3RlciArPSAxOworICAgICAgICB9CisKKyAgICAgICAgaWYgKG9mZnNldHMpIG9mZnNldHNbY29sdW1uXSA9IHNpemUgLSAxOworICAgICAgICBjb2x1bW4gKz0gMTsKKyAgICAgIH0KKyAgICB9CisgIH0KKworICB3aGlsZSAoY29sdW1uIDwgc2l6ZSkgeworICAgIGlmIChjaGFyYWN0ZXIpIHsKKyAgICAgIHN0YXRpYyBjb25zdCBTY3JlZW5DaGFyYWN0ZXIgcGFkID0geworICAgICAgICAudGV4dCA9IFdDX0MoJyAnKSwKKyAgICAgICAgLmF0dHJpYnV0ZXMgPSBTQ1JfQ09MT1VSX0RFRkFVTFQKKyAgICAgIH07CisKKyAgICAgICpjaGFyYWN0ZXIrKyA9IHBhZDsKKyAgICB9CisKKyAgICBpZiAob2Zmc2V0cykgb2Zmc2V0c1tjb2x1bW5dID0gc2l6ZSAtIDE7CisgICAgY29sdW1uICs9IDE7CisgIH0KKworICByZXR1cm4gMTsKK30KKworc3RhdGljIHZvaWQKK2FkanVzdEN1cnNvckNvbHVtbiAoc2hvcnQgKmNvbHVtbiwgc2hvcnQgcm93LCBzaG9ydCBjb2x1bW5zKSB7CisgIGludCBvZmZzZXRzW2NvbHVtbnNdOworCisgIGlmIChyZWFkU2NyZWVuUm93KHJvdywgY29sdW1ucywgTlVMTCwgb2Zmc2V0cykpIHsKKyAgICBpbnQgZmlyc3QgPSAwOworICAgIGludCBsYXN0ID0gY29sdW1ucyAtIDE7CisKKyAgICB3aGlsZSAoZmlyc3QgPD0gbGFzdCkgeworICAgICAgaW50IGN1cnJlbnQgPSAoZmlyc3QgKyBsYXN0KSAvIDI7CisKKyAgICAgIGlmIChvZmZzZXRzW2N1cnJlbnRdIDwgKmNvbHVtbikgeworICAgICAgICBmaXJzdCA9IGN1cnJlbnQgKyAxOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgbGFzdCA9IGN1cnJlbnQgLSAxOworICAgICAgfQorICAgIH0KKworICAgIGlmIChmaXJzdCA9PSBjb2x1bW5zKSBmaXJzdCAtPSAxOworICAgICpjb2x1bW4gPSBmaXJzdDsKKyAgfQorfQorCisjaWZkZWYgSEFWRV9MSU5VWF9JTlBVVF9ICisjaW5jbHVkZSA8bGludXgvaW5wdXQuaD4KKworc3RhdGljIGNvbnN0IExpbnV4S2V5Q29kZSAqeHRLZXlzOworc3RhdGljIGNvbnN0IExpbnV4S2V5Q29kZSAqYXRLZXlzOworc3RhdGljIGludCBhdEtleVByZXNzZWQ7CitzdGF0aWMgaW50IHBzMktleVByZXNzZWQ7CisjZW5kaWYgLyogSEFWRV9MSU5VWF9JTlBVVF9IICovCisKK3N0YXRpYyBVaW5wdXRPYmplY3QgKnVpbnB1dEtleWJvYXJkID0gTlVMTDsKK3N0YXRpYyBSZXBvcnRMaXN0ZW5lckluc3RhbmNlICpicmFpbGxlRGV2aWNlT2ZmbGluZUxpc3RlbmVyOworCitzdGF0aWMgdm9pZAorY2xvc2VLZXlib2FyZCAodm9pZCkgeworICBpZiAodWlucHV0S2V5Ym9hcmQpIHsKKyAgICBkZXN0cm95VWlucHV0T2JqZWN0KHVpbnB1dEtleWJvYXJkKTsKKyAgICB1aW5wdXRLZXlib2FyZCA9IE5VTEw7CisgIH0KK30KKworc3RhdGljIGludAorb3BlbktleWJvYXJkICh2b2lkKSB7CisgIGlmICghdWlucHV0S2V5Ym9hcmQpIHsKKyAgICBpZiAoISh1aW5wdXRLZXlib2FyZCA9IG5ld1VpbnB1dEtleWJvYXJkKCJMaW51eCBTY3JlZW4gRHJpdmVyIEtleWJvYXJkIikpKSB7CisgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBhdGV4aXQoY2xvc2VLZXlib2FyZCk7CisgIH0KKworICByZXR1cm4gMTsKK30KKworc3RhdGljIHZvaWQKK3Jlc2V0S2V5Ym9hcmQgKHZvaWQpIHsKKyAgaWYgKHVpbnB1dEtleWJvYXJkKSB7CisgICAgcmVsZWFzZVByZXNzZWRLZXlzKHVpbnB1dEtleWJvYXJkKTsKKyAgfQorfQorCitzdGF0aWMgaW50Citwcm9jZXNzUGFyYW1ldGVyc19MaW51eFNjcmVlbiAoY2hhciAqKnBhcmFtZXRlcnMpIHsKKyAgZmFsbGJhY2tUZXh0ID0gcGFyYW1ldGVyc1tQQVJNX0ZBTExCQUNLX1RFWFRdOworCisgIHsKKyAgICBjb25zdCBjaGFyICpuYW1lcyA9IHBhcmFtZXRlcnNbUEFSTV9DSEFSU0VUXTsKKworICAgIGlmICghbmFtZXMgfHwgISpuYW1lcykgbmFtZXMgPSBnZXRMb2NhbGVDaGFyc2V0KCk7CisgICAgaWYgKCFhbGxvY2F0ZUNoYXJzZXRFbnRyaWVzKG5hbWVzKSkgcmV0dXJuIDA7CisgIH0KKworICBoaWdoRm9udEJpdCA9IDA7CisgIHsKKyAgICBjb25zdCBjaGFyICpwYXJhbWV0ZXIgPSBwYXJhbWV0ZXJzW1BBUk1fSElHSF9GT05UX0JJVF07CisKKyAgICBpZiAocGFyYW1ldGVyICYmICpwYXJhbWV0ZXIpIHsKKyAgICAgIGludCBiaXQgPSAwOworCisgICAgICBzdGF0aWMgY29uc3QgaW50IG1pbmltdW0gPSAwOworICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhpbXVtID0gNzsKKworICAgICAgc3RhdGljIGNvbnN0IGNoYXIgKmNob2ljZXNbXSA9IHsiYXV0byIsICJ2Z2EiLCAiZmIiLCBOVUxMfTsKKyAgICAgIHVuc2lnbmVkIGludCBjaG9pY2U7CisKKyAgICAgIGlmICh2YWxpZGF0ZUludGVnZXIoJmJpdCwgcGFyYW1ldGVyLCAmbWluaW11bSwgJm1heGltdW0pKSB7CisgICAgICAgIGhpZ2hGb250Qml0ID0gMSA8PCAoYml0ICsgOCk7CisgICAgICB9IGVsc2UgaWYgKCF2YWxpZGF0ZUNob2ljZSgmY2hvaWNlLCBwYXJhbWV0ZXIsIGNob2ljZXMpKSB7CisgICAgICAgIGxvZ01lc3NhZ2UoTE9HX1dBUk5JTkcsICIlczogJXMiLCAiaW52YWxpZCBoaWdoIGZvbnQgYml0IiwgcGFyYW1ldGVyKTsKKyAgICAgIH0gZWxzZSBpZiAoY2hvaWNlKSB7CisgICAgICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBzaG9ydCBiaXRzW10gPSB7MFgwODAwLCAwWDAxMDB9OworICAgICAgICBoaWdoRm9udEJpdCA9IGJpdHNbY2hvaWNlLTFdOworICAgICAgfQorICAgIH0KKyAgfQorCisgIGxvZ1NjcmVlbkZvbnRNYXAgPSAwOworICB7CisgICAgY29uc3QgY2hhciAqcGFyYW1ldGVyID0gcGFyYW1ldGVyc1tQQVJNX0xPR19TQ1JFRU5fRk9OVF9NQVBdOworCisgICAgaWYgKHBhcmFtZXRlciAmJiAqcGFyYW1ldGVyKSB7CisgICAgICBpZiAoIXZhbGlkYXRlWWVzTm8oJmxvZ1NjcmVlbkZvbnRNYXAsIHBhcmFtZXRlcikpIHsKKyAgICAgICAgbG9nTWVzc2FnZShMT0dfV0FSTklORywgIiVzOiAlcyIsICJpbnZhbGlkIGxvZyBzY3JlZW4gZm9udCBtYXAgc2V0dGluZyIsIHBhcmFtZXRlcik7CisgICAgICB9CisgICAgfQorICB9CisKKyAgcnBpU3BhY2VzQnVnID0gMDsKKyAgeworICAgIGNvbnN0IGNoYXIgKnBhcmFtZXRlciA9IHBhcmFtZXRlcnNbUEFSTV9SUElfU1BBQ0VTX0JVR107CisKKyAgICBpZiAocGFyYW1ldGVyICYmICpwYXJhbWV0ZXIpIHsKKyAgICAgIGlmICghdmFsaWRhdGVZZXNObygmcnBpU3BhY2VzQnVnLCBwYXJhbWV0ZXIpKSB7CisgICAgICAgIGxvZ01lc3NhZ2UoTE9HX1dBUk5JTkcsICIlczogJXMiLCAiaW52YWxpZCBSUEkgc3BhY2VzIGJ1ZyBzZXR0aW5nIiwgcGFyYW1ldGVyKTsKKyAgICAgIH0KKyAgICB9CisgIH0KKworICB1bmljb2RlRW5hYmxlZCA9IDE7CisgIHsKKyAgICBjb25zdCBjaGFyICpwYXJhbWV0ZXIgPSBwYXJhbWV0ZXJzW1BBUk1fVU5JQ09ERV07CisKKyAgICBpZiAocGFyYW1ldGVyICYmICpwYXJhbWV0ZXIpIHsKKyAgICAgIGlmICghdmFsaWRhdGVZZXNObygmdW5pY29kZUVuYWJsZWQsIHBhcmFtZXRlcikpIHsKKyAgICAgICAgbG9nTWVzc2FnZShMT0dfV0FSTklORywgIiVzOiAlcyIsICJpbnZhbGlkIGRpcmVjdCB1bmljb2RlIHNldHRpbmciLCBwYXJhbWV0ZXIpOworICAgICAgfQorICAgIH0KKyAgfQorCisgIHZpcnR1YWxUZXJtaW5hbE51bWJlciA9IDA7CisgIHsKKyAgICBjb25zdCBjaGFyICpwYXJhbWV0ZXIgPSBwYXJhbWV0ZXJzW1BBUk1fVklSVFVBTF9URVJNSU5BTF9OVU1CRVJdOworCisgICAgaWYgKHBhcmFtZXRlciAmJiAqcGFyYW1ldGVyKSB7CisgICAgICBzdGF0aWMgY29uc3QgaW50IG1pbmltdW0gPSAwOworICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhpbXVtID0gTUFYX05SX0NPTlNPTEVTOworCisgICAgICBpZiAoIXZhbGlkYXRlSW50ZWdlcigmdmlydHVhbFRlcm1pbmFsTnVtYmVyLCBwYXJhbWV0ZXIsICZtaW5pbXVtLCAmbWF4aW11bSkpIHsKKyAgICAgICAgbG9nTWVzc2FnZShMT0dfV0FSTklORywgIiVzOiAlcyIsICJpbnZhbGlkIHZpcnR1YWwgdGVybWluYWwgbnVtYmVyIiwgcGFyYW1ldGVyKTsKKyAgICAgIH0KKyAgICB9CisgIH0KKworICB3aWRlY2hhclBhZGRpbmcgPSAwOworICB7CisgICAgY29uc3QgY2hhciAqcGFyYW1ldGVyID0gcGFyYW1ldGVyc1tQQVJNX1dJREVDSEFSX1BBRERJTkddOworCisgICAgaWYgKHBhcmFtZXRlciAmJiAqcGFyYW1ldGVyKSB7CisgICAgICBpZiAoIXZhbGlkYXRlWWVzTm8oJndpZGVjaGFyUGFkZGluZywgcGFyYW1ldGVyKSkgeworICAgICAgICBsb2dNZXNzYWdlKExPR19XQVJOSU5HLCAiJXM6ICVzIiwgImludmFsaWQgd2lkZWNoYXIgcGFkZGluZyBzZXR0aW5nIiwgcGFyYW1ldGVyKTsKKyAgICAgIH0KKyAgICB9CisgIH0KKworICByZXR1cm4gMTsKK30KKworc3RhdGljIHZvaWQKK3JlbGVhc2VQYXJhbWV0ZXJzX0xpbnV4U2NyZWVuICh2b2lkKSB7CisgIGRlYWxsb2NhdGVDaGFyc2V0RW50cmllcygpOworfQorCitSRVBPUlRfTElTVEVORVIobHhCcmFpbGxlRGV2aWNlT2ZmbGluZUxpc3RlbmVyKSB7CisgIHJlc2V0S2V5Ym9hcmQoKTsKK30KKworc3RhdGljIGludAorY29uc3RydWN0X0xpbnV4U2NyZWVuICh2b2lkKSB7CisgIG1haW5Db25zb2xlRGVzY3JpcHRvciA9IC0xOworICBzY3JlZW5EZXNjcmlwdG9yID0gLTE7CisgIGNvbnNvbGVEZXNjcmlwdG9yID0gLTE7CisgIHVuaWNvZGVEZXNjcmlwdG9yID0gLTE7CisKKyAgc2NyZWVuVXBkYXRlZCA9IDA7CisgIHNjcmVlbkNhY2hlQnVmZmVyID0gTlVMTDsKKyAgc2NyZWVuQ2FjaGVTaXplID0gMDsKKworICB1bmljb2RlQ2FjaGVCdWZmZXIgPSBOVUxMOworICB1bmljb2RlQ2FjaGVTaXplID0gMDsKKyAgdW5pY29kZUNhY2hlVXNlZCA9IDA7CisKKyAgY3VycmVudENvbnNvbGVOdW1iZXIgPSAwOworICBpblRleHRNb2RlID0gMTsKKyAgc3RhcnRUaW1lUGVyaW9kKCZtYXBwaW5nUmVjYWxjdWxhdGlvblRpbWVyLCA0MDAwKTsKKworICBicmFpbGxlRGV2aWNlT2ZmbGluZUxpc3RlbmVyID0gTlVMTDsKKworI2lmZGVmIEhBVkVfTElOVVhfSU5QVVRfSAorICB4dEtleXMgPSBsaW51eEtleU1hcF94dDAwOworICBhdEtleXMgPSBsaW51eEtleU1hcF9hdDAwOworICBhdEtleVByZXNzZWQgPSAxOworICBwczJLZXlQcmVzc2VkID0gMTsKKyNlbmRpZiAvKiBIQVZFX0xJTlVYX0lOUFVUX0ggKi8KKworICBpZiAoc2V0U2NyZWVuTmFtZSgpKSB7CisgICAgaWYgKHNldENvbnNvbGVOYW1lKCkpIHsKKyAgICAgIGlmICh1bmljb2RlRW5hYmxlZCkgeworICAgICAgICBpZiAoIXNldFVuaWNvZGVOYW1lKCkpIHsKKyAgICAgICAgICB1bmljb2RlRW5hYmxlZCA9IDA7CisgICAgICAgIH0KKyAgICAgIH0KKworICAgICAgaWYgKG9wZW5NYWluQ29uc29sZSgpKSB7CisgICAgICAgIGlmIChzZXRDdXJyZW50U2NyZWVuKHZpcnR1YWxUZXJtaW5hbE51bWJlcikpIHsKKyAgICAgICAgICBvcGVuS2V5Ym9hcmQoKTsKKyAgICAgICAgICBicmFpbGxlRGV2aWNlT2ZmbGluZUxpc3RlbmVyID0gcmVnaXN0ZXJSZXBvcnRMaXN0ZW5lcihSRVBPUlRfQlJBSUxMRV9ERVZJQ0VfT0ZGTElORSwgbHhCcmFpbGxlRGV2aWNlT2ZmbGluZUxpc3RlbmVyLCBOVUxMKTsKKyAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgfQorICAgICAgfQorICAgIH0KKyAgfQorCisgIGNsb3NlQ3VycmVudENvbnNvbGUoKTsKKyAgY2xvc2VDdXJyZW50U2NyZWVuKCk7CisgIGNsb3NlTWFpbkNvbnNvbGUoKTsKKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkCitkZXN0cnVjdF9MaW51eFNjcmVlbiAodm9pZCkgeworICBpZiAoYnJhaWxsZURldmljZU9mZmxpbmVMaXN0ZW5lcikgeworICAgIHVucmVnaXN0ZXJSZXBvcnRMaXN0ZW5lcihicmFpbGxlRGV2aWNlT2ZmbGluZUxpc3RlbmVyKTsKKyAgICBicmFpbGxlRGV2aWNlT2ZmbGluZUxpc3RlbmVyID0gTlVMTDsKKyAgfQorCisgIGNsb3NlQ3VycmVudENvbnNvbGUoKTsKKyAgY29uc29sZU5hbWUgPSBOVUxMOworCisgIGNsb3NlQ3VycmVudFNjcmVlbigpOworICBzY3JlZW5OYW1lID0gTlVMTDsKKworICBpZiAoc2NyZWVuRm9udE1hcFRhYmxlKSB7CisgICAgZnJlZShzY3JlZW5Gb250TWFwVGFibGUpOworICAgIHNjcmVlbkZvbnRNYXBUYWJsZSA9IE5VTEw7CisgIH0KKyAgc2NyZWVuRm9udE1hcFNpemUgPSAwOworICBzY3JlZW5Gb250TWFwQ291bnQgPSAwOworCisgIGlmIChzY3JlZW5DYWNoZUJ1ZmZlcikgeworICAgIGZyZWUoc2NyZWVuQ2FjaGVCdWZmZXIpOworICAgIHNjcmVlbkNhY2hlQnVmZmVyID0gTlVMTDsKKyAgfQorICBzY3JlZW5DYWNoZVNpemUgPSAwOworCisgIGlmICh1bmljb2RlQ2FjaGVCdWZmZXIpIHsKKyAgICBmcmVlKHVuaWNvZGVDYWNoZUJ1ZmZlcik7CisgICAgdW5pY29kZUNhY2hlQnVmZmVyID0gTlVMTDsKKyAgfQorICB1bmljb2RlQ2FjaGVTaXplID0gMDsKKyAgdW5pY29kZUNhY2hlVXNlZCA9IDA7CisKKyAgY2xvc2VNYWluQ29uc29sZSgpOworfQorCitBU1lOQ19NT05JVE9SX0NBTExCQUNLKGx4U2NyZWVuVXBkYXRlZCkgeworICBhc3luY0Rpc2NhcmRIYW5kbGUoc2NyZWVuTW9uaXRvcik7CisgIHNjcmVlbk1vbml0b3IgPSBOVUxMOworCisgIHNjcmVlblVwZGF0ZWQgPSAxOworICBtYWluU2NyZWVuVXBkYXRlZCgpOworCisgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50Citwb2xsX0xpbnV4U2NyZWVuICh2b2lkKSB7CisgIGludCBwb2xsID0gIWlzTW9uaXRvcmFibGU/IDE6CisgICAgICAgICAgICAgc2NyZWVuTW9uaXRvcj8gMDoKKyAgICAgICAgICAgICAhYXN5bmNNb25pdG9yRmlsZUFsZXJ0KCZzY3JlZW5Nb25pdG9yLCBzY3JlZW5EZXNjcmlwdG9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbHhTY3JlZW5VcGRhdGVkLCBOVUxMKTsKKworICBpZiAocG9sbCkgc2NyZWVuVXBkYXRlZCA9IDE7CisgIHJldHVybiBwb2xsOworfQorCitzdGF0aWMgaW50CitnZXRDb25zb2xlU3RhdGUgKHN0cnVjdCB2dF9zdGF0ICpzdGF0ZSkgeworICBpZiAoY29udHJvbE1haW5Db25zb2xlKFZUX0dFVFNUQVRFLCBzdGF0ZSkgIT0gLTEpIHJldHVybiAxOworICBsb2dTeXN0ZW1FcnJvcigiaW9jdGxbVlRfR0VUU1RBVEVdIik7CisgIHByb2JsZW1UZXh0ID0gZ2V0dGV4dCgiY2FuJ3QgZ2V0IGNvbnNvbGUgc3RhdGUiKTsKKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK2lzVW51c2VkQ29uc29sZSAoaW50IHZ0KSB7CisgIGludCBpc1VudXNlZCA9IDE7CisgIHVuc2lnbmVkIGNoYXIgKmJ1ZmZlciA9IE5VTEw7CisgIHNpemVfdCBzaXplID0gMDsKKworICBpZiAocmVmcmVzaFNjcmVlbkJ1ZmZlcigmYnVmZmVyLCAmc2l6ZSkpIHsKKyAgICBjb25zdCBTY3JlZW5IZWFkZXIgKmhlYWRlciA9ICh2b2lkICopYnVmZmVyOworICAgIGNvbnN0IHVpbnQxNl90ICpmcm9tID0gKHZvaWQgKikoYnVmZmVyICsgc2l6ZW9mKCpoZWFkZXIpKTsKKyAgICBjb25zdCB1aW50MTZfdCAqdG8gPSAodm9pZCAqKShidWZmZXIgKyBnZXRTY3JlZW5CdWZmZXJTaXplKCZoZWFkZXItPnNpemUpKTsKKworICAgIGlmIChmcm9tIDwgdG8pIHsKKyAgICAgIGNvbnN0IHVpbnQxNl90IHZnYSA9ICpmcm9tKys7CisKKyAgICAgIHdoaWxlIChmcm9tIDwgdG8pIHsKKyAgICAgICAgaWYgKCpmcm9tKysgIT0gdmdhKSB7CisgICAgICAgICAgaXNVbnVzZWQgPSAwOworICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICB9CisgICAgfQorICB9CisKKyAgaWYgKGJ1ZmZlcikgZnJlZShidWZmZXIpOworICByZXR1cm4gaXNVbnVzZWQ7Cit9CisKK3N0YXRpYyBpbnQKK2Nhbk9wZW5DdXJyZW50Q29uc29sZSAodm9pZCkgeworICB0eXBlZGVmIHVpbnQxNl90IE9wZW5hYmxlQ29uc29sZXM7CisgIHN0YXRpYyBPcGVuYWJsZUNvbnNvbGVzIG9wZW5hYmxlQ29uc29sZXMgPSAwOworCisgIHN0cnVjdCB2dF9zdGF0IHN0YXRlOworICBpZiAoIWdldENvbnNvbGVTdGF0ZSgmc3RhdGUpKSByZXR1cm4gMDsKKworICBpbnQgY29uc29sZSA9IHZpcnR1YWxUZXJtaW5hbE51bWJlcjsKKyAgaWYgKCFjb25zb2xlKSBjb25zb2xlID0gc3RhdGUudl9hY3RpdmU7CisgIE9wZW5hYmxlQ29uc29sZXMgYml0ID0gMSA8PCBjb25zb2xlOworCisgIGlmIChiaXQgJiYgIShvcGVuYWJsZUNvbnNvbGVzICYgYml0KSkgeworICAgIGlmIChjb25zb2xlICE9IE1BSU5fQ09OU09MRSkgeworICAgICAgaWYgKCEoc3RhdGUudl9zdGF0ZSAmIGJpdCkpIHsKKyAgICAgICAgaWYgKGlzVW51c2VkQ29uc29sZShjb25zb2xlKSkgeworICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CisgICAgICB9CisgICAgfQorCisgICAgb3BlbmFibGVDb25zb2xlcyB8PSBiaXQ7CisgIH0KKworICByZXR1cm4gMTsKK30KKworc3RhdGljIGludAorZ2V0Q29uc29sZU51bWJlciAodm9pZCkgeworICBpbnQgY29uc29sZTsKKworICBpZiAodmlydHVhbFRlcm1pbmFsTnVtYmVyKSB7CisgICAgY29uc29sZSA9IHZpcnR1YWxUZXJtaW5hbE51bWJlcjsKKyAgfSBlbHNlIHsKKyAgICBzdHJ1Y3QgdnRfc3RhdCBzdGF0ZTsKKyAgICBpZiAoIWdldENvbnNvbGVTdGF0ZSgmc3RhdGUpKSByZXR1cm4gTk9fQ09OU09MRTsKKyAgICBjb25zb2xlID0gc3RhdGUudl9hY3RpdmU7CisgIH0KKworICBpZiAoY29uc29sZSAhPSBjdXJyZW50Q29uc29sZU51bWJlcikgeworICAgIGNsb3NlQ3VycmVudENvbnNvbGUoKTsKKyAgfQorCisgIGlmIChjb25zb2xlRGVzY3JpcHRvciA9PSAtMSkgeworICAgIGlmICghY2FuT3BlbkN1cnJlbnRDb25zb2xlKCkpIHsKKyAgICAgIHByb2JsZW1UZXh0ID0gZ2V0dGV4dCgiY29uc29sZSBub3QgaW4gdXNlIik7CisgICAgfSBlbHNlIGlmICghb3BlbkN1cnJlbnRDb25zb2xlKCkpIHsKKyAgICAgIHByb2JsZW1UZXh0ID0gZ2V0dGV4dCgiY2FuJ3Qgb3BlbiBjb25zb2xlIik7CisgICAgfQorCisgICAgc2V0VHJhbnNsYXRpb25UYWJsZSgxKTsKKyAgfQorCisgIHJldHVybiBjb25zb2xlOworfQorCitzdGF0aWMgaW50Cit0ZXN0VGV4dE1vZGUgKHZvaWQpIHsKKyAgaWYgKHByb2JsZW1UZXh0KSByZXR1cm4gMDsKKyAgaW50IG1vZGU7CisKKyAgaWYgKGNvbnRyb2xDdXJyZW50Q29uc29sZShLREdFVE1PREUsICZtb2RlKSA9PSAtMSkgeworICAgIGxvZ1N5c3RlbUVycm9yKCJpb2N0bFtLREdFVE1PREVdIik7CisgIH0gZWxzZSBpZiAobW9kZSA9PSBLRF9URVhUKSB7CisgICAgaWYgKGFmdGVyVGltZVBlcmlvZCgmbWFwcGluZ1JlY2FsY3VsYXRpb25UaW1lciwgTlVMTCkpIHNldFRyYW5zbGF0aW9uVGFibGUoMCk7CisgICAgcmV0dXJuIDE7CisgIH0KKworICBwcm9ibGVtVGV4dCA9IGdldHRleHQoInNjcmVlbiBub3QgaW4gdGV4dCBtb2RlIik7CisgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50CityZWZyZXNoQ2FjaGUgKHZvaWQpIHsKKyAgc2l6ZV90IHNpemUgPSByZWZyZXNoU2NyZWVuQnVmZmVyKCZzY3JlZW5DYWNoZUJ1ZmZlciwgJnNjcmVlbkNhY2hlU2l6ZSk7CisgIGlmICghc2l6ZSkgcmV0dXJuIDA7CisKKyAgaWYgKHVuaWNvZGVFbmFibGVkKSB7CisgICAgaWYgKCFyZWZyZXNoVW5pY29kZUNhY2hlKHNpemUpKSB7CisgICAgICByZXR1cm4gMDsKKyAgICB9CisgIH0KKworICByZXR1cm4gMTsKK30KKworc3RhdGljIGludAorcmVmcmVzaF9MaW51eFNjcmVlbiAodm9pZCkgeworICBpZiAoc2NyZWVuVXBkYXRlZCkgeworICAgIHdoaWxlICgxKSB7CisgICAgICBwcm9ibGVtVGV4dCA9IE5VTEw7CisKKyAgICAgIGlmICghcmVmcmVzaENhY2hlKCkpIHsKKyAgICAgICAgcHJvYmxlbVRleHQgPSBnZXR0ZXh0KCJjYW4ndCByZWFkIHNjcmVlbiBjb250ZW50Iik7CisgICAgICAgIGdvdG8gZG9uZTsKKyAgICAgIH0KKworICAgICAgeworICAgICAgICBpbnQgY29uc29sZU51bWJlciA9IGdldENvbnNvbGVOdW1iZXIoKTsKKyAgICAgICAgaWYgKGNvbnNvbGVOdW1iZXIgPT0gY3VycmVudENvbnNvbGVOdW1iZXIpIGJyZWFrOworCisgICAgICAgIGxvZ01lc3NhZ2UoTE9HX0NBVEVHT1JZKFNDUkVFTl9EUklWRVIpLAorICAgICAgICAgICAgICAgICAgICJjb25zb2xlIG51bWJlciBjaGFuZ2VkOiAldSAtPiAldSIsCisgICAgICAgICAgICAgICAgICAgY3VycmVudENvbnNvbGVOdW1iZXIsIGNvbnNvbGVOdW1iZXIpOworCisgICAgICAgIGN1cnJlbnRDb25zb2xlTnVtYmVyID0gY29uc29sZU51bWJlcjsKKyAgICAgIH0KKyAgICB9CisKKyAgICBpblRleHRNb2RlID0gdGVzdFRleHRNb2RlKCk7CisgICAgc2NyZWVuVXBkYXRlZCA9IDA7CisKKyAgZG9uZToKKyAgICBpZiAocHJvYmxlbVRleHQpIHsKKyAgICAgIGlmICgqZmFsbGJhY2tUZXh0KSB7CisgICAgICAgIHByb2JsZW1UZXh0ID0gZ2V0dGV4dChmYWxsYmFja1RleHQpOworICAgICAgfQorICAgIH0KKyAgfQorCisgIHJldHVybiAxOworfQorCitzdGF0aWMgaW50CitnZXRTY3JlZW5EZXNjcmlwdGlvbiAoU2NyZWVuRGVzY3JpcHRpb24gKmRlc2NyaXB0aW9uKSB7CisgIFNjcmVlbkhlYWRlciBoZWFkZXI7CisKKyAgaWYgKHJlYWRTY3JlZW5IZWFkZXIoJmhlYWRlcikpIHsKKyAgICBkZXNjcmlwdGlvbi0+Y29scyA9IGhlYWRlci5zaXplLmNvbHVtbnM7CisgICAgZGVzY3JpcHRpb24tPnJvd3MgPSBoZWFkZXIuc2l6ZS5yb3dzOworCisgICAgZGVzY3JpcHRpb24tPnBvc3ggPSBoZWFkZXIubG9jYXRpb24uY29sdW1uOworICAgIGRlc2NyaXB0aW9uLT5wb3N5ID0gaGVhZGVyLmxvY2F0aW9uLnJvdzsKKworICAgIGFkanVzdEN1cnNvckNvbHVtbigmZGVzY3JpcHRpb24tPnBvc3gsIGRlc2NyaXB0aW9uLT5wb3N5LCBkZXNjcmlwdGlvbi0+Y29scyk7CisgICAgcmV0dXJuIDE7CisgIH0KKworICBwcm9ibGVtVGV4dCA9IGdldHRleHQoImNhbid0IHJlYWQgc2NyZWVuIGhlYWRlciIpOworICByZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQKK2Rlc2NyaWJlX0xpbnV4U2NyZWVuIChTY3JlZW5EZXNjcmlwdGlvbiAqZGVzY3JpcHRpb24pIHsKKyAgaWYgKCFzY3JlZW5DYWNoZUJ1ZmZlcikgeworICAgIHByb2JsZW1UZXh0ID0gTlVMTDsKKyAgICBjdXJyZW50Q29uc29sZU51bWJlciA9IGdldENvbnNvbGVOdW1iZXIoKTsKKyAgICBpblRleHRNb2RlID0gdGVzdFRleHRNb2RlKCk7CisgIH0KKworICBpZiAoKGRlc2NyaXB0aW9uLT5udW1iZXIgPSBjdXJyZW50Q29uc29sZU51bWJlcikpIHsKKyAgICBpZiAoaW5UZXh0TW9kZSkgeworICAgICAgaWYgKGdldFNjcmVlbkRlc2NyaXB0aW9uKGRlc2NyaXB0aW9uKSkgeworICAgICAgfQorICAgIH0KKyAgfQorCisgIGlmICgoZGVzY3JpcHRpb24tPnVucmVhZGFibGUgPSBwcm9ibGVtVGV4dCkpIHsKKyAgICBkZXNjcmlwdGlvbi0+Y29scyA9IHN0cmxlbihwcm9ibGVtVGV4dCk7CisgICAgZGVzY3JpcHRpb24tPnJvd3MgPSAxOworCisgICAgZGVzY3JpcHRpb24tPnBvc3ggPSAwOworICAgIGRlc2NyaXB0aW9uLT5wb3N5ID0gMDsKKyAgfQorfQorCitzdGF0aWMgaW50CityZWFkQ2hhcmFjdGVyc19MaW51eFNjcmVlbiAoY29uc3QgU2NyZWVuQm94ICpib3gsIFNjcmVlbkNoYXJhY3RlciAqYnVmZmVyKSB7CisgIFNjcmVlblNpemUgc2l6ZTsKKworICBpZiAocmVhZFNjcmVlblNpemUoJnNpemUpKSB7CisgICAgaWYgKHZhbGlkYXRlU2NyZWVuQm94KGJveCwgc2l6ZS5jb2x1bW5zLCBzaXplLnJvd3MpKSB7CisgICAgICBpZiAocHJvYmxlbVRleHQpIHsKKyAgICAgICAgc2V0U2NyZWVuTWVzc2FnZShib3gsIGJ1ZmZlciwgcHJvYmxlbVRleHQpOworICAgICAgICByZXR1cm4gMTsKKyAgICAgIH0KKworICAgICAgZm9yICh1bnNpZ25lZCBpbnQgcm93PTA7IHJvdzxib3gtPmhlaWdodDsgcm93Kz0xKSB7CisgICAgICAgIFNjcmVlbkNoYXJhY3RlciBjaGFyYWN0ZXJzW3NpemUuY29sdW1uc107CisgICAgICAgIGlmICghcmVhZFNjcmVlblJvdyhib3gtPnRvcCtyb3csIHNpemUuY29sdW1ucywgY2hhcmFjdGVycywgTlVMTCkpIHJldHVybiAwOworCisgICAgICAgIG1lbWNweShidWZmZXIsICZjaGFyYWN0ZXJzW2JveC0+bGVmdF0sCisgICAgICAgICAgICAgICAoYm94LT53aWR0aCAqIHNpemVvZihjaGFyYWN0ZXJzWzBdKSkpOworCisgICAgICAgIGJ1ZmZlciArPSBib3gtPndpZHRoOworICAgICAgfQorCisgICAgICByZXR1cm4gMTsKKyAgICB9CisgIH0KKworICByZXR1cm4gMDsKK30KKworc3RhdGljIGludAorZ2V0Q2Fwc0xvY2tTdGF0ZSAodm9pZCkgeworICBjaGFyIGxlZHM7CisgIGlmIChjb250cm9sQ3VycmVudENvbnNvbGUoS0RHRVRMRUQsICZsZWRzKSAhPSAtMSkKKyAgICBpZiAobGVkcyAmIExFRF9DQVApCisgICAgICByZXR1cm4gMTsKKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50CitoYXNNb2RVcHBlciAoU2NyZWVuS2V5IGtleSkgeworICByZXR1cm4gKGtleSAmIFNDUl9LRVlfVVBQRVIpICYmICFnZXRDYXBzTG9ja1N0YXRlKCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50CitoYXNNb2RTaGlmdCAoU2NyZWVuS2V5IGtleSkgeworICByZXR1cm4gISEoa2V5ICYgU0NSX0tFWV9TSElGVCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50CitoYXNNb2RDb250cm9sIChTY3JlZW5LZXkga2V5KSB7CisgIHJldHVybiAhIShrZXkgJiBTQ1JfS0VZX0NPTlRST0wpOworfQorCitzdGF0aWMgaW5saW5lIGludAoraGFzTW9kQWx0TGVmdCAoU2NyZWVuS2V5IGtleSkgeworICByZXR1cm4gISEoa2V5ICYgU0NSX0tFWV9BTFRfTEVGVCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50CitoYXNNb2RBbHRSaWdodCAoU2NyZWVuS2V5IGtleSkgeworICByZXR1cm4gISEoa2V5ICYgU0NSX0tFWV9BTFRfUklHSFQpOworfQorCitzdGF0aWMgaW5saW5lIGludAoraGFzTW9kR3VpIChTY3JlZW5LZXkga2V5KSB7CisgIHJldHVybiAhIShrZXkgJiBTQ1JfS0VZX0dVSSk7Cit9CisKK3N0YXRpYyBpbnQKK2luamVjdEtleUV2ZW50IChpbnQga2V5LCBpbnQgcHJlc3MpIHsKKyAgbG9nTWVzc2FnZSgKKyAgICBMT0dfQ0FURUdPUlkoU0NSRUVOX0RSSVZFUikgfCBMT0dfREVCVUcsCisgICAgImluamVjdGluZyBrZXkgJXM6ICUwMlgiLAorICAgIChwcmVzcz8gInByZXNzIjogInJlbGVhc2UiKSwga2V5CisgICk7CisKKyAgaWYgKCFvcGVuS2V5Ym9hcmQoKSkgcmV0dXJuIDA7CisgIHJldHVybiB3cml0ZUtleUV2ZW50KHVpbnB1dEtleWJvYXJkLCBrZXksIHByZXNzKTsKK30KKworc3RhdGljIGludAoraW5zZXJ0VWlucHV0ICgKKyAgTGludXhLZXlDb2RlIGNvZGUsCisgIGludCBtb2RVcHBlciwgaW50IG1vZFNoaWZ0LCBpbnQgbW9kQ29udHJvbCwKKyAgaW50IG1vZEFsdExlZnQsIGludCBtb2RBbHRSaWdodAorKSB7CisjaWZkZWYgSEFWRV9MSU5VWF9JTlBVVF9ICisgIGlmIChjb2RlKSB7CisjZGVmaW5lIEtFWV9FVkVOVChLRVksIFBSRVNTKSB7IGlmICghaW5qZWN0S2V5RXZlbnQoKEtFWSksIChQUkVTUykpKSByZXR1cm4gMDsgfQorICAgIGlmIChtb2RVcHBlcikgeworICAgICAgS0VZX0VWRU5UKEtFWV9DQVBTTE9DSywgMSk7CisgICAgICBLRVlfRVZFTlQoS0VZX0NBUFNMT0NLLCAwKTsKKyAgICB9CisKKyAgICBpZiAobW9kU2hpZnQpIEtFWV9FVkVOVChLRVlfTEVGVFNISUZULCAxKTsKKyAgICBpZiAobW9kQ29udHJvbCkgS0VZX0VWRU5UKEtFWV9MRUZUQ1RSTCwgMSk7CisgICAgaWYgKG1vZEFsdExlZnQpIEtFWV9FVkVOVChLRVlfTEVGVEFMVCwgMSk7CisgICAgaWYgKG1vZEFsdFJpZ2h0KSBLRVlfRVZFTlQoS0VZX1JJR0hUQUxULCAxKTsKKworICAgIEtFWV9FVkVOVChjb2RlLCAxKTsKKyAgICBLRVlfRVZFTlQoY29kZSwgMCk7CisKKyAgICBpZiAobW9kQWx0UmlnaHQpIEtFWV9FVkVOVChLRVlfUklHSFRBTFQsIDApOworICAgIGlmIChtb2RBbHRMZWZ0KSBLRVlfRVZFTlQoS0VZX0xFRlRBTFQsIDApOworICAgIGlmIChtb2RDb250cm9sKSBLRVlfRVZFTlQoS0VZX0xFRlRDVFJMLCAwKTsKKyAgICBpZiAobW9kU2hpZnQpIEtFWV9FVkVOVChLRVlfTEVGVFNISUZULCAwKTsKKworICAgIGlmIChtb2RVcHBlcikgeworICAgICAgS0VZX0VWRU5UKEtFWV9DQVBTTE9DSywgMSk7CisgICAgICBLRVlfRVZFTlQoS0VZX0NBUFNMT0NLLCAwKTsKKyAgICB9CisjdW5kZWYgS0VZX0VWRU5UCisKKyAgICByZXR1cm4gMTsKKyAgfQorI2VuZGlmIC8qIEhBVkVfTElOVVhfSU5QVVRfSCAqLworCisgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50CitpbnNlcnRCeXRlIChjaGFyIGJ5dGUpIHsKKyAgbG9nTWVzc2FnZSgKKyAgICBMT0dfQ0FURUdPUlkoU0NSRUVOX0RSSVZFUikgfCBMT0dfREVCVUcsCisgICAgImluc2VydGluZyBieXRlOiAlMDJYIiwgYnl0ZQorICApOworCisgIGlmIChjb250cm9sQ3VycmVudENvbnNvbGUoVElPQ1NUSSwgJmJ5dGUpICE9IC0xKSByZXR1cm4gMTsKKyAgbG9nU3lzdGVtRXJyb3IoImlvY3RsW1RJT0NTVEldIik7CisgIGxvZ1Bvc3NpYmxlQ2F1c2UoIkJSTFRUWSBpcyBydW5uaW5nIHdpdGhvdXQgdGhlIENBUF9TWVNfQURNSU4ga2VybmVsIGNhcGFiaWxpdHkgKHNlZSBtYW4gNyBjYXBhYmlsaXRpZXMpIik7CisgIGxvZ1Bvc3NpYmxlQ2F1c2UoInRoZSBzeXNjdGwgcGFyYW1ldGVyIGRldi50dHkubGVnYWN5X3Rpb2NzdGkgaXMgb2ZmIChzZWUgaHR0cHM6Ly9sb3JlLmtlcm5lbC5vcmcvbGludXgtaGFyZGVuaW5nL1kwbTlsNTJBS213Nll4aTFAaG9zdHBhZC8pIik7CisKKyAgbWVzc2FnZSgKKyAgICBOVUxMLCAiTGludXggY2hhcmFjdGVyIGluamVjdGlvbiAoVElPQ1NUSSkgaXMgZGlzYWJsZWQgb24gdGhpcyBzeXN0ZW0iLAorICAgIChNU0dfU0lMRU5UKQorICApOworCisgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50CitpbnNlcnRCeXRlcyAoY29uc3QgY2hhciAqYnl0ZSwgc2l6ZV90IGNvdW50KSB7CisgIHdoaWxlIChjb3VudCkgeworICAgIGlmICghaW5zZXJ0Qnl0ZSgqYnl0ZSsrKSkgcmV0dXJuIDA7CisgICAgY291bnQgLT0gMTsKKyAgfQorICByZXR1cm4gMTsKK30KKworc3RhdGljIGludAoraW5zZXJ0WGxhdGUgKHdjaGFyX3QgY2hhcmFjdGVyKSB7CisgIGNoYXIgYnl0ZXNbTUJfTEVOX01BWF07CisgIHNpemVfdCBjb3VudDsKKyAgQ2hhcmFjdGVyQ29udmVyc2lvblJlc3VsdCByZXN1bHQgPSBjb252ZXJ0V2NoYXJUb0NoYXJzKGNoYXJhY3RlciwgYnl0ZXMsIHNpemVvZihieXRlcyksICZjb3VudCk7CisKKyAgaWYgKHJlc3VsdCAhPSBDT05WX09LKSB7CisgICAgdWludDMyX3QgdmFsdWUgPSBjaGFyYWN0ZXI7CisKKyAgICBsb2dNZXNzYWdlKExPR19XQVJOSU5HLCAiY2hhcmFjdGVyIG5vdCBzdXBwb3J0ZWQgaW4geGxhdGUgbW9kZTogMFglMDIiUFJJWDMyLCB2YWx1ZSk7CisgICAgcmV0dXJuIDA7CisgIH0KKworICByZXR1cm4gaW5zZXJ0Qnl0ZXMoYnl0ZXMsIGNvdW50KTsKK30KKworc3RhdGljIGludAoraW5zZXJ0VW5pY29kZSAod2NoYXJfdCBjaGFyYWN0ZXIpIHsKKyAgeworICAgIFV0ZjhCdWZmZXIgdXRmODsKKyAgICBzaXplX3QgdXRmcyA9IGNvbnZlcnRXY2hhclRvVXRmOChjaGFyYWN0ZXIsIHV0ZjgpOworCisgICAgaWYgKHV0ZnMpIHJldHVybiBpbnNlcnRCeXRlcyh1dGY4LCB1dGZzKTsKKyAgfQorCisgIHsKKyAgICB1aW50MzJfdCB2YWx1ZSA9IGNoYXJhY3RlcjsKKworICAgIGxvZ01lc3NhZ2UoTE9HX1dBUk5JTkcsICJjaGFyYWN0ZXIgbm90IHN1cHBvcnRlZCBpbiB1bmljb2RlIGtleWJvYXJkIG1vZGU6IDBYJTAyIlBSSVgzMiwgdmFsdWUpOworICB9CisKKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK2luc2VydENvZGUgKFNjcmVlbktleSBrZXksIGludCByYXcpIHsKKyAgY29uc3QgTGludXhLZXlDb2RlICptYXA7CisgIHVuc2lnbmVkIGNoYXIgY29kZTsKKyAgdW5zaWduZWQgY2hhciBlc2NhcGU7CisKKyAgc2V0U2NyZWVuS2V5TW9kaWZpZXJzKCZrZXksIFNDUl9LRVlfU0hJRlQgfCBTQ1JfS0VZX0NPTlRST0wpOworCisjZGVmaW5lIEtFWV9UT19YVChLRVksIEVTQ0FQRSwgQ09ERSkgXAorICBjYXNlIChLRVkpOiBcCisgIG1hcCA9IGxpbnV4S2V5TWFwX3h0ICMjIEVTQ0FQRTsgXAorICBjb2RlID0gWFRfS0VZXyAjIyBFU0NBUEUgIyMgXyAjIyBDT0RFOyBcCisgIGVzY2FwZSA9IFhUX01PRF8gIyMgRVNDQVBFOyBcCisgIGJyZWFrOworCisgIHN3aXRjaCAoa2V5ICYgU0NSX0tFWV9DSEFSX01BU0spIHsKKyAgICBLRVlfVE9fWFQoU0NSX0tFWV9FU0NBUEUsIDAwLCBFc2NhcGUpCisgICAgS0VZX1RPX1hUKFNDUl9LRVlfRjEsIDAwLCBGMSkKKyAgICBLRVlfVE9fWFQoU0NSX0tFWV9GMiwgMDAsIEYyKQorICAgIEtFWV9UT19YVChTQ1JfS0VZX0YzLCAwMCwgRjMpCisgICAgS0VZX1RPX1hUKFNDUl9LRVlfRjQsIDAwLCBGNCkKKyAgICBLRVlfVE9fWFQoU0NSX0tFWV9GNSwgMDAsIEY1KQorICAgIEtFWV9UT19YVChTQ1JfS0VZX0Y2LCAwMCwgRjYpCisgICAgS0VZX1RPX1hUKFNDUl9LRVlfRjcsIDAwLCBGNykKKyAgICBLRVlfVE9fWFQoU0NSX0tFWV9GOCwgMDAsIEY4KQorICAgIEtFWV9UT19YVChTQ1JfS0VZX0Y5LCAwMCwgRjkpCisgICAgS0VZX1RPX1hUKFNDUl9LRVlfRjEwLCAwMCwgRjEwKQorICAgIEtFWV9UT19YVChTQ1JfS0VZX0YxMSwgMDAsIEYxMSkKKyAgICBLRVlfVE9fWFQoU0NSX0tFWV9GMTIsIDAwLCBGMTIpCisKKyAgICBLRVlfVE9fWFQoU0NSX0tFWV9GMTMsIDAwLCBGMTMpCisgICAgS0VZX1RPX1hUKFNDUl9LRVlfRjE0LCAwMCwgRjE0KQorICAgIEtFWV9UT19YVChTQ1JfS0VZX0YxNSwgMDAsIEYxNSkKKyAgICBLRVlfVE9fWFQoU0NSX0tFWV9GMTYsIDAwLCBGMTYpCisgICAgS0VZX1RPX1hUKFNDUl9LRVlfRjE3LCAwMCwgRjE3KQorICAgIEtFWV9UT19YVChTQ1JfS0VZX0YxOCwgMDAsIEYxOCkKKyAgICBLRVlfVE9fWFQoU0NSX0tFWV9GMTksIDAwLCBGMTkpCisgICAgS0VZX1RPX1hUKFNDUl9LRVlfRjIwLCAwMCwgRjIwKQorICAgIEtFWV9UT19YVChTQ1JfS0VZX0YyMSwgMDAsIEYyMSkKKyAgICBLRVlfVE9fWFQoU0NSX0tFWV9GMjIsIDAwLCBGMjIpCisgICAgS0VZX1RPX1hUKFNDUl9LRVlfRjIzLCAwMCwgRjIzKQorICAgIEtFWV9UT19YVChTQ1JfS0VZX0YyNCwgMDAsIEYyNCkKKworICAgIEtFWV9UT19YVCgnYCcsIDAwLCBHcmF2ZSkKKyAgICBLRVlfVE9fWFQoJzEnLCAwMCwgMSkKKyAgICBLRVlfVE9fWFQoJzInLCAwMCwgMikKKyAgICBLRVlfVE9fWFQoJzMnLCAwMCwgMykKKyAgICBLRVlfVE9fWFQoJzQnLCAwMCwgNCkKKyAgICBLRVlfVE9fWFQoJzUnLCAwMCwgNSkKKyAgICBLRVlfVE9fWFQoJzYnLCAwMCwgNikKKyAgICBLRVlfVE9fWFQoJzcnLCAwMCwgNykKKyAgICBLRVlfVE9fWFQoJzgnLCAwMCwgOCkKKyAgICBLRVlfVE9fWFQoJzknLCAwMCwgOSkKKyAgICBLRVlfVE9fWFQoJzAnLCAwMCwgMCkKKyAgICBLRVlfVE9fWFQoJy0nLCAwMCwgTWludXMpCisgICAgS0VZX1RPX1hUKCc9JywgMDAsIEVxdWFsKQorICAgIEtFWV9UT19YVChTQ1JfS0VZX0JBQ0tTUEFDRSwgMDAsIEJhY2tzcGFjZSkKKworICAgIEtFWV9UT19YVChTQ1JfS0VZX1RBQiwgMDAsIFRhYikKKyAgICBLRVlfVE9fWFQoJ3EnLCAwMCwgUSkKKyAgICBLRVlfVE9fWFQoJ3cnLCAwMCwgVykKKyAgICBLRVlfVE9fWFQoJ2UnLCAwMCwgRSkKKyAgICBLRVlfVE9fWFQoJ3InLCAwMCwgUikKKyAgICBLRVlfVE9fWFQoJ3QnLCAwMCwgVCkKKyAgICBLRVlfVE9fWFQoJ3knLCAwMCwgWSkKKyAgICBLRVlfVE9fWFQoJ3UnLCAwMCwgVSkKKyAgICBLRVlfVE9fWFQoJ2knLCAwMCwgSSkKKyAgICBLRVlfVE9fWFQoJ28nLCAwMCwgTykKKyAgICBLRVlfVE9fWFQoJ3AnLCAwMCwgUCkKKyAgICBLRVlfVE9fWFQoJ1snLCAwMCwgTGVmdEJyYWNrZXQpCisgICAgS0VZX1RPX1hUKCddJywgMDAsIFJpZ2h0QnJhY2tldCkKKyAgICBLRVlfVE9fWFQoJ1xcJywgMDAsIEJhY2tzbGFzaCkKKworICAgIEtFWV9UT19YVCgnYScsIDAwLCBBKQorICAgIEtFWV9UT19YVCgncycsIDAwLCBTKQorICAgIEtFWV9UT19YVCgnZCcsIDAwLCBEKQorICAgIEtFWV9UT19YVCgnZicsIDAwLCBGKQorICAgIEtFWV9UT19YVCgnZycsIDAwLCBHKQorICAgIEtFWV9UT19YVCgnaCcsIDAwLCBIKQorICAgIEtFWV9UT19YVCgnaicsIDAwLCBKKQorICAgIEtFWV9UT19YVCgnaycsIDAwLCBLKQorICAgIEtFWV9UT19YVCgnbCcsIDAwLCBMKQorICAgIEtFWV9UT19YVCgnOycsIDAwLCBTZW1pY29sb24pCisgICAgS0VZX1RPX1hUKCdcJycsIDAwLCBBcG9zdHJvcGhlKQorICAgIEtFWV9UT19YVChTQ1JfS0VZX0VOVEVSLCAwMCwgRW50ZXIpCisKKyAgICBLRVlfVE9fWFQoJ3onLCAwMCwgWikKKyAgICBLRVlfVE9fWFQoJ3gnLCAwMCwgWCkKKyAgICBLRVlfVE9fWFQoJ2MnLCAwMCwgQykKKyAgICBLRVlfVE9fWFQoJ3YnLCAwMCwgVikKKyAgICBLRVlfVE9fWFQoJ2InLCAwMCwgQikKKyAgICBLRVlfVE9fWFQoJ24nLCAwMCwgTikKKyAgICBLRVlfVE9fWFQoJ20nLCAwMCwgTSkKKyAgICBLRVlfVE9fWFQoJywnLCAwMCwgQ29tbWEpCisgICAgS0VZX1RPX1hUKCcuJywgMDAsIFBlcmlvZCkKKyAgICBLRVlfVE9fWFQoJy8nLCAwMCwgU2xhc2gpCisKKyAgICBLRVlfVE9fWFQoJyAnLCAwMCwgU3BhY2UpCisKKyAgICBLRVlfVE9fWFQoU0NSX0tFWV9JTlNFUlQsIEUwLCBJbnNlcnQpCisgICAgS0VZX1RPX1hUKFNDUl9LRVlfREVMRVRFLCBFMCwgRGVsZXRlKQorICAgIEtFWV9UT19YVChTQ1JfS0VZX0hPTUUsIEUwLCBIb21lKQorICAgIEtFWV9UT19YVChTQ1JfS0VZX0VORCwgRTAsIEVuZCkKKyAgICBLRVlfVE9fWFQoU0NSX0tFWV9QQUdFX1VQLCBFMCwgUGFnZVVwKQorICAgIEtFWV9UT19YVChTQ1JfS0VZX1BBR0VfRE9XTiwgRTAsIFBhZ2VEb3duKQorCisgICAgS0VZX1RPX1hUKFNDUl9LRVlfQ1VSU09SX1VQLCBFMCwgQXJyb3dVcCkKKyAgICBLRVlfVE9fWFQoU0NSX0tFWV9DVVJTT1JfTEVGVCwgRTAsIEFycm93TGVmdCkKKyAgICBLRVlfVE9fWFQoU0NSX0tFWV9DVVJTT1JfRE9XTiwgRTAsIEFycm93RG93bikKKyAgICBLRVlfVE9fWFQoU0NSX0tFWV9DVVJTT1JfUklHSFQsIEUwLCBBcnJvd1JpZ2h0KQorCisgICAgZGVmYXVsdDoKKyAgICAgIGxvZ01lc3NhZ2UoTE9HX1dBUk5JTkcsICJrZXkgbm90IHN1cHBvcnRlZCBpbiByYXcga2V5Ym9hcmQgbW9kZTogJTA0WCIsIGtleSk7CisgICAgICByZXR1cm4gMDsKKyAgfQorI3VuZGVmIEtFWV9UT19YVAorCisgIHsKKyAgICBjb25zdCBpbnQgbW9kVXBwZXIgPSBoYXNNb2RVcHBlcihrZXkpOworICAgIGNvbnN0IGludCBtb2RTaGlmdCA9IGhhc01vZFNoaWZ0KGtleSk7CisgICAgY29uc3QgaW50IG1vZENvbnRyb2wgPSBoYXNNb2RDb250cm9sKGtleSk7CisgICAgY29uc3QgaW50IG1vZEFsdExlZnQgPSBoYXNNb2RBbHRMZWZ0KGtleSk7CisgICAgY29uc3QgaW50IG1vZEFsdFJpZ2h0ID0gaGFzTW9kQWx0UmlnaHQoa2V5KTsKKyAgICBjb25zdCBpbnQgbW9kR3VpID0gaGFzTW9kR3VpKGtleSk7CisKKyAgICBpZiAocmF3KSB7CisgICAgICBjaGFyIGNvZGVzWzIyXTsKKyAgICAgIHVuc2lnbmVkIGludCBjb3VudCA9IDA7CisKKyAgICAgIGlmIChtb2RVcHBlcikgeworICAgICAgICBjb2Rlc1tjb3VudCsrXSA9IFhUX0tFWV8wMF9DYXBzTG9jazsKKyAgICAgICAgY29kZXNbY291bnQrK10gPSBYVF9LRVlfMDBfQ2Fwc0xvY2sgfCBYVF9CSVRfUkVMRUFTRTsKKyAgICAgIH0KKworICAgICAgaWYgKG1vZFNoaWZ0KSBjb2Rlc1tjb3VudCsrXSA9IFhUX0tFWV8wMF9MZWZ0U2hpZnQ7CisgICAgICBpZiAobW9kQ29udHJvbCkgY29kZXNbY291bnQrK10gPSBYVF9LRVlfMDBfTGVmdENvbnRyb2w7CisgICAgICBpZiAobW9kQWx0TGVmdCkgY29kZXNbY291bnQrK10gPSBYVF9LRVlfMDBfTGVmdEFsdDsKKworICAgICAgaWYgKG1vZEFsdFJpZ2h0KSB7CisgICAgICAgIGNvZGVzW2NvdW50KytdID0gWFRfTU9EX0UwOworICAgICAgICBjb2Rlc1tjb3VudCsrXSA9IFhUX0tFWV9FMF9SaWdodEFsdDsKKyAgICAgIH0KKworICAgICAgaWYgKG1vZEd1aSkgeworICAgICAgICBjb2Rlc1tjb3VudCsrXSA9IFhUX01PRF9FMDsKKyAgICAgICAgY29kZXNbY291bnQrK10gPSBYVF9LRVlfRTBfTGVmdEdVSTsKKyAgICAgIH0KKworICAgICAgaWYgKGVzY2FwZSkgY29kZXNbY291bnQrK10gPSBlc2NhcGU7CisgICAgICBjb2Rlc1tjb3VudCsrXSA9IGNvZGU7CisKKyAgICAgIGlmIChlc2NhcGUpIGNvZGVzW2NvdW50KytdID0gZXNjYXBlOworICAgICAgY29kZXNbY291bnQrK10gPSBjb2RlIHwgWFRfQklUX1JFTEVBU0U7CisKKyAgICAgIGlmIChtb2RHdWkpIHsKKyAgICAgICAgY29kZXNbY291bnQrK10gPSBYVF9NT0RfRTA7CisgICAgICAgIGNvZGVzW2NvdW50KytdID0gWFRfS0VZX0UwX0xlZnRHVUkgfCBYVF9CSVRfUkVMRUFTRTsKKyAgICAgIH0KKworICAgICAgaWYgKG1vZEFsdFJpZ2h0KSB7CisgICAgICAgIGNvZGVzW2NvdW50KytdID0gWFRfTU9EX0UwOworICAgICAgICBjb2Rlc1tjb3VudCsrXSA9IFhUX0tFWV9FMF9SaWdodEFsdCB8IFhUX0JJVF9SRUxFQVNFOworICAgICAgfQorCisgICAgICBpZiAobW9kQWx0TGVmdCkgY29kZXNbY291bnQrK10gPSBYVF9LRVlfMDBfTGVmdEFsdCB8IFhUX0JJVF9SRUxFQVNFOworICAgICAgaWYgKG1vZENvbnRyb2wpIGNvZGVzW2NvdW50KytdID0gWFRfS0VZXzAwX0xlZnRDb250cm9sIHwgWFRfQklUX1JFTEVBU0U7CisgICAgICBpZiAobW9kU2hpZnQpIGNvZGVzW2NvdW50KytdID0gWFRfS0VZXzAwX0xlZnRTaGlmdCB8IFhUX0JJVF9SRUxFQVNFOworCisgICAgICBpZiAobW9kVXBwZXIpIHsKKyAgICAgICAgY29kZXNbY291bnQrK10gPSBYVF9LRVlfMDBfQ2Fwc0xvY2s7CisgICAgICAgIGNvZGVzW2NvdW50KytdID0gWFRfS0VZXzAwX0NhcHNMb2NrIHwgWFRfQklUX1JFTEVBU0U7CisgICAgICB9CisKKyAgICAgIHJldHVybiBpbnNlcnRCeXRlcyhjb2RlcywgY291bnQpOworICAgIH0gZWxzZSB7CisgICAgICBMaW51eEtleUNvZGUgbWFwcGVkID0gbWFwW2NvZGVdOworCisgICAgICBpZiAoIW1hcHBlZCkgeworICAgICAgICBsb2dNZXNzYWdlKExPR19XQVJOSU5HLCAia2V5IG5vdCBzdXBwb3J0ZWQgaW4gbWVkaXVtIHJhdyBrZXlib2FyZCBtb2RlOiAlMDRYIiwga2V5KTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgICB9CisKKyAgICAgIHJldHVybiBpbnNlcnRVaW5wdXQobWFwcGVkLCBtb2RVcHBlciwgbW9kU2hpZnQsIG1vZENvbnRyb2wsIG1vZEFsdExlZnQsIG1vZEFsdFJpZ2h0KTsKKyAgICB9CisgIH0KK30KKworc3RhdGljIGludAoraW5zZXJ0VHJhbnNsYXRlZCAoU2NyZWVuS2V5IGtleSwgaW50ICgqaW5zZXJ0Q2hhcmFjdGVyKSh3Y2hhcl90IGNoYXJhY3RlcikpIHsKKyAgd2NoYXJfdCBidWZmZXJbMl07CisgIGNvbnN0IHdjaGFyX3QgKnNlcXVlbmNlOworICBjb25zdCB3Y2hhcl90ICplbmQ7CisKKyAgc2V0U2NyZWVuS2V5TW9kaWZpZXJzKCZrZXksIDApOworCisgIGlmIChpc1NwZWNpYWxLZXkoa2V5KSkgeworICAgIHN3aXRjaCAoa2V5KSB7CisgICAgICBjYXNlIFNDUl9LRVlfRU5URVI6CisgICAgICAgIHNlcXVlbmNlID0gV1NfQygiXHIiKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGNhc2UgU0NSX0tFWV9UQUI6CisgICAgICAgIHNlcXVlbmNlID0gV1NfQygiXHQiKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGNhc2UgU0NSX0tFWV9CQUNLU1BBQ0U6CisgICAgICAgIHNlcXVlbmNlID0gV1NfQygiXHg3ZiIpOworICAgICAgICBicmVhazsKKworICAgICAgY2FzZSBTQ1JfS0VZX0VTQ0FQRToKKyAgICAgICAgc2VxdWVuY2UgPSBXU19DKCJceDFiIik7CisgICAgICAgIGJyZWFrOworCisgICAgICBjYXNlIFNDUl9LRVlfQ1VSU09SX0xFRlQ6CisgICAgICAgIHNlcXVlbmNlID0gV1NfQygiXHgxYltEIik7CisgICAgICAgIGJyZWFrOworCisgICAgICBjYXNlIFNDUl9LRVlfQ1VSU09SX1JJR0hUOgorICAgICAgICBzZXF1ZW5jZSA9IFdTX0MoIlx4MWJbQyIpOworICAgICAgICBicmVhazsKKworICAgICAgY2FzZSBTQ1JfS0VZX0NVUlNPUl9VUDoKKyAgICAgICAgc2VxdWVuY2UgPSBXU19DKCJceDFiW0EiKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGNhc2UgU0NSX0tFWV9DVVJTT1JfRE9XTjoKKyAgICAgICAgc2VxdWVuY2UgPSBXU19DKCJceDFiW0IiKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGNhc2UgU0NSX0tFWV9QQUdFX1VQOgorICAgICAgICBzZXF1ZW5jZSA9IFdTX0MoIlx4MWJbNX4iKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGNhc2UgU0NSX0tFWV9QQUdFX0RPV046CisgICAgICAgIHNlcXVlbmNlID0gV1NfQygiXHgxYls2fiIpOworICAgICAgICBicmVhazsKKworICAgICAgY2FzZSBTQ1JfS0VZX0hPTUU6CisgICAgICAgIHNlcXVlbmNlID0gV1NfQygiXHgxYlsxfiIpOworICAgICAgICBicmVhazsKKworICAgICAgY2FzZSBTQ1JfS0VZX0VORDoKKyAgICAgICAgc2VxdWVuY2UgPSBXU19DKCJceDFiWzR+Iik7CisgICAgICAgIGJyZWFrOworCisgICAgICBjYXNlIFNDUl9LRVlfSU5TRVJUOgorICAgICAgICBzZXF1ZW5jZSA9IFdTX0MoIlx4MWJbMn4iKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGNhc2UgU0NSX0tFWV9ERUxFVEU6CisgICAgICAgIHNlcXVlbmNlID0gV1NfQygiXHgxYlszfiIpOworICAgICAgICBicmVhazsKKworICAgICAgY2FzZSBTQ1JfS0VZX0YxOgorICAgICAgICBzZXF1ZW5jZSA9IFdTX0MoIlx4MWJbW0EiKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGNhc2UgU0NSX0tFWV9GMjoKKyAgICAgICAgc2VxdWVuY2UgPSBXU19DKCJceDFiW1tCIik7CisgICAgICAgIGJyZWFrOworCisgICAgICBjYXNlIFNDUl9LRVlfRjM6CisgICAgICAgIHNlcXVlbmNlID0gV1NfQygiXHgxYltbQyIpOworICAgICAgICBicmVhazsKKworICAgICAgY2FzZSBTQ1JfS0VZX0Y0OgorICAgICAgICBzZXF1ZW5jZSA9IFdTX0MoIlx4MWJbW0QiKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGNhc2UgU0NSX0tFWV9GNToKKyAgICAgICAgc2VxdWVuY2UgPSBXU19DKCJceDFiW1tFIik7CisgICAgICAgIGJyZWFrOworCisgICAgICBjYXNlIFNDUl9LRVlfRjY6CisgICAgICAgIHNlcXVlbmNlID0gV1NfQygiXHgxYlsxN34iKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGNhc2UgU0NSX0tFWV9GNzoKKyAgICAgICAgc2VxdWVuY2UgPSBXU19DKCJceDFiWzE4fiIpOworICAgICAgICBicmVhazsKKworICAgICAgY2FzZSBTQ1JfS0VZX0Y4OgorICAgICAgICBzZXF1ZW5jZSA9IFdTX0MoIlx4MWJbMTl+Iik7CisgICAgICAgIGJyZWFrOworCisgICAgICBjYXNlIFNDUl9LRVlfRjk6CisgICAgICAgIHNlcXVlbmNlID0gV1NfQygiXHgxYlsyMH4iKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGNhc2UgU0NSX0tFWV9GMTA6CisgICAgICAgIHNlcXVlbmNlID0gV1NfQygiXHgxYlsyMX4iKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGNhc2UgU0NSX0tFWV9GMTE6CisgICAgICAgIHNlcXVlbmNlID0gV1NfQygiXHgxYlsyM34iKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGNhc2UgU0NSX0tFWV9GMTI6CisgICAgICAgIHNlcXVlbmNlID0gV1NfQygiXHgxYlsyNH4iKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGNhc2UgU0NSX0tFWV9GMTM6CisgICAgICAgIHNlcXVlbmNlID0gV1NfQygiXHgxYlsyNX4iKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGNhc2UgU0NSX0tFWV9GMTQ6CisgICAgICAgIHNlcXVlbmNlID0gV1NfQygiXHgxYlsyNn4iKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGNhc2UgU0NSX0tFWV9GMTU6CisgICAgICAgIHNlcXVlbmNlID0gV1NfQygiXHgxYlsyOH4iKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGNhc2UgU0NSX0tFWV9GMTY6CisgICAgICAgIHNlcXVlbmNlID0gV1NfQygiXHgxYlsyOX4iKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGNhc2UgU0NSX0tFWV9GMTc6CisgICAgICAgIHNlcXVlbmNlID0gV1NfQygiXHgxYlszMX4iKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGNhc2UgU0NSX0tFWV9GMTg6CisgICAgICAgIHNlcXVlbmNlID0gV1NfQygiXHgxYlszMn4iKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGNhc2UgU0NSX0tFWV9GMTk6CisgICAgICAgIHNlcXVlbmNlID0gV1NfQygiXHgxYlszM34iKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGNhc2UgU0NSX0tFWV9GMjA6CisgICAgICAgIHNlcXVlbmNlID0gV1NfQygiXHgxYlszNH4iKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIGlmIChpbnNlcnRDb2RlKGtleSwgMCkpIHJldHVybiAxOworICAgICAgICBsb2dNZXNzYWdlKExPR19XQVJOSU5HLCAia2V5IG5vdCBzdXBwb3J0ZWQgaW4geGxhdGUga2V5Ym9hcmQgbW9kZTogJTA0WCIsIGtleSk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIGVuZCA9IHNlcXVlbmNlICsgd2NzbGVuKHNlcXVlbmNlKTsKKyAgfSBlbHNlIHsKKyAgICB3Y2hhcl90ICpjaGFyYWN0ZXIgPSBidWZmZXIgKyBBUlJBWV9DT1VOVChidWZmZXIpOworCisgICAgZW5kID0gY2hhcmFjdGVyOworICAgICotLWNoYXJhY3RlciA9IGtleSAmIFNDUl9LRVlfQ0hBUl9NQVNLOworCisgICAgaWYgKGhhc01vZEFsdExlZnQoa2V5KSkgeworICAgICAgaW50IG1ldGE7CisKKyAgICAgIGlmIChjb250cm9sQ3VycmVudENvbnNvbGUoS0RHS0JNRVRBLCAmbWV0YSkgPT0gLTEpIHJldHVybiAwOworCisgICAgICBzd2l0Y2ggKG1ldGEpIHsKKyAgICAgICAgY2FzZSBLX0VTQ1BSRUZJWDoKKyAgICAgICAgICAqLS1jaGFyYWN0ZXIgPSBBU0NJSV9FU0M7CisgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBLX01FVEFCSVQ6CisgICAgICAgICAgaWYgKCpjaGFyYWN0ZXIgPj0gMFg4MCkgeworICAgICAgICAgICAgbG9nTWVzc2FnZShMT0dfV0FSTklORywgImNhbid0IGFkZCBtZXRhIGJpdCB0byBjaGFyYWN0ZXI6IFUrJTA0WCIsICh1aW50MzJfdCkqY2hhcmFjdGVyKTsKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgIH0KKworICAgICAgICAgICpjaGFyYWN0ZXIgfD0gMFg4MDsKKyAgICAgICAgICBicmVhazsKKworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgIGxvZ01lc3NhZ2UoTE9HX1dBUk5JTkcsICJ1bnN1cHBvcnRlZCBrZXlib2FyZCBtZXRhIG1vZGU6ICVkIiwgbWV0YSk7CisgICAgICAgICAgcmV0dXJuIDA7CisgICAgICB9CisgICAgfQorCisgICAgc2VxdWVuY2UgPSBjaGFyYWN0ZXI7CisgIH0KKworICB3aGlsZSAoc2VxdWVuY2UgIT0gZW5kKSB7CisgICAgaWYgKCFpbnNlcnRDaGFyYWN0ZXIoKnNlcXVlbmNlKSkgcmV0dXJuIDA7CisgICAgc2VxdWVuY2UgKz0gMTsKKyAgfQorCisgIHJldHVybiAxOworfQorCitzdGF0aWMgaW50CitpbnNlcnRLZXlfTGludXhTY3JlZW4gKFNjcmVlbktleSBrZXkpIHsKKyAgaW50IG9rID0gMDsKKyAgaW50IG1vZGU7CisKKyAgaWYgKGNvbnRyb2xDdXJyZW50Q29uc29sZShLREdLQk1PREUsICZtb2RlKSAhPSAtMSkgeworICAgIHN3aXRjaCAobW9kZSkgeworICAgICAgY2FzZSBLX1JBVzoKKyAgICAgICAgaWYgKGluc2VydENvZGUoa2V5LCAxKSkgb2sgPSAxOworICAgICAgICBicmVhazsKKworICAgICAgY2FzZSBLX01FRElVTVJBVzoKKyAgICAgICAgaWYgKGluc2VydENvZGUoa2V5LCAwKSkgb2sgPSAxOworICAgICAgICBicmVhazsKKworICAgICAgY2FzZSBLX1hMQVRFOgorICAgICAgICBpZiAoaW5zZXJ0VHJhbnNsYXRlZChrZXksIGluc2VydFhsYXRlKSkgb2sgPSAxOworICAgICAgICBicmVhazsKKworICAgICAgY2FzZSBLX1VOSUNPREU6CisgICAgICAgIGlmIChpbnNlcnRUcmFuc2xhdGVkKGtleSwgaW5zZXJ0VW5pY29kZSkpIG9rID0gMTsKKyAgICAgICAgYnJlYWs7CisKKyNpZmRlZiBLX09GRgorICAgICAgY2FzZSBLX09GRjoKKyAgICAgICAgb2sgPSAxOworICAgICAgICBicmVhazsKKyNlbmRpZiAvKiBLX09GRiAqLworCisgICAgICBkZWZhdWx0OgorICAgICAgICBsb2dNZXNzYWdlKExPR19XQVJOSU5HLCAidW5zdXBwb3J0ZWQga2V5Ym9hcmQgbW9kZTogJWQiLCBtb2RlKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICB9IGVsc2UgeworICAgIGxvZ1N5c3RlbUVycm9yKCJpb2N0bFtLREdLQk1PREVdIik7CisgIH0KKworICByZXR1cm4gb2s7Cit9CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgY2hhciBzdWJjb2RlOworICBzdHJ1Y3QgdGlvY2xfc2VsZWN0aW9uIHNlbGVjdGlvbjsKK30gUEFDS0VEIFJlZ2lvblNlbGVjdGlvbkFyZ3VtZW50OworCitzdGF0aWMgaW50CitzZWxlY3RSZWdpb24gKFJlZ2lvblNlbGVjdGlvbkFyZ3VtZW50ICphcmd1bWVudCkgeworICBpZiAoY29udHJvbEN1cnJlbnRDb25zb2xlKFRJT0NMSU5VWCwgYXJndW1lbnQpICE9IC0xKSByZXR1cm4gMTsKKyAgaWYgKGVycm5vICE9IEVJTlZBTCkgbG9nU3lzdGVtRXJyb3IoImlvY3RsW1RJT0NMSU5VWF0iKTsKKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK2hpZ2hsaWdodFJlZ2lvbl9MaW51eFNjcmVlbiAoaW50IGxlZnQsIGludCByaWdodCwgaW50IHRvcCwgaW50IGJvdHRvbSkgeworICBSZWdpb25TZWxlY3Rpb25Bcmd1bWVudCBhcmd1bWVudCA9IHsKKyAgICAuc3ViY29kZSA9IFRJT0NMX1NFVFNFTCwKKworICAgIC5zZWxlY3Rpb24gPSB7CisgICAgICAueHMgPSBsZWZ0ICsgMSwKKyAgICAgIC55cyA9IHRvcCArIDEsCisgICAgICAueGUgPSByaWdodCArIDEsCisgICAgICAueWUgPSBib3R0b20gKyAxLAorICAgICAgLnNlbF9tb2RlID0gVElPQ0xfU0VMQ0hBUgorICAgIH0KKyAgfTsKKworICByZXR1cm4gc2VsZWN0UmVnaW9uKCZhcmd1bWVudCk7Cit9CisKK3N0YXRpYyBpbnQKK3VuaGlnaGxpZ2h0UmVnaW9uX0xpbnV4U2NyZWVuICh2b2lkKSB7CisgIFJlZ2lvblNlbGVjdGlvbkFyZ3VtZW50IGFyZ3VtZW50ID0geworICAgIC5zdWJjb2RlID0gVElPQ0xfU0VUU0VMLAorCisgICAgLnNlbGVjdGlvbiA9IHsKKyAgICAgIC54cyA9IDAsCisgICAgICAueXMgPSAwLAorICAgICAgLnhlID0gMCwKKyAgICAgIC55ZSA9IDAsCisgICAgICAuc2VsX21vZGUgPSBUSU9DTF9TRUxDTEVBUgorICAgIH0KKyAgfTsKKworICByZXR1cm4gc2VsZWN0UmVnaW9uKCZhcmd1bWVudCk7Cit9CisKK3N0YXRpYyBpbnQKK3ZhbGlkYXRlVnQgKGludCB2dCkgeworICBpZiAoKHZ0ID49IDEpICYmICh2dCA8PSBNQVhfTlJfQ09OU09MRVMpKSByZXR1cm4gMTsKKyAgbG9nTWVzc2FnZShMT0dfV0FSTklORywgInZpcnR1YWwgdGVybWluYWwgb3V0IG9mIHJhbmdlOiAlZCIsIHZ0KTsKKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK3NlbGVjdFZpcnR1YWxUZXJtaW5hbF9MaW51eFNjcmVlbiAoaW50IHZ0KSB7CisgIGlmICh2dCA9PSB2aXJ0dWFsVGVybWluYWxOdW1iZXIpIHJldHVybiAxOworICBpZiAodnQgJiYgIXZhbGlkYXRlVnQodnQpKSByZXR1cm4gMDsKKyAgcmV0dXJuIHNldEN1cnJlbnRTY3JlZW4odnQpOworfQorCitzdGF0aWMgaW50Citzd2l0Y2hWaXJ0dWFsVGVybWluYWxfTGludXhTY3JlZW4gKGludCB2dCkgeworICBpZiAodmFsaWRhdGVWdCh2dCkpIHsKKyAgICBpZiAoc2VsZWN0VmlydHVhbFRlcm1pbmFsX0xpbnV4U2NyZWVuKDApKSB7CisgICAgICBpZiAoY29udHJvbE1haW5Db25zb2xlKFZUX0FDVElWQVRFLCAodm9pZCAqKShpbnRwdHJfdCl2dCkgIT0gLTEpIHsKKyAgICAgICAgbG9nTWVzc2FnZShMT0dfQ0FURUdPUlkoU0NSRUVOX0RSSVZFUiksCisgICAgICAgICAgICAgICAgICAgInN3aXRjaGVkIHRvIHZpcnR1YWwgdGVydG1pbmFsICVkIiwgdnQpOworICAgICAgICByZXR1cm4gMTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIGxvZ1N5c3RlbUVycm9yKCJpb2N0bFtWVF9BQ1RJVkFURV0iKTsKKyAgICAgIH0KKyAgICB9CisgIH0KKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK2N1cnJlbnRWaXJ0dWFsVGVybWluYWxfTGludXhTY3JlZW4gKHZvaWQpIHsKKyAgcmV0dXJuIGN1cnJlbnRDb25zb2xlTnVtYmVyOworfQorCitzdGF0aWMgaW50Cit1c2VyVmlydHVhbFRlcm1pbmFsX0xpbnV4U2NyZWVuIChpbnQgbnVtYmVyKSB7CisgIHJldHVybiBNQVhfTlJfQ09OU09MRVMgKyAxICsgbnVtYmVyOworfQorCitzdGF0aWMgaW50CitoYW5kbGVDb21tYW5kX0xpbnV4U2NyZWVuIChpbnQgY29tbWFuZCkgeworICBpbnQgYmxrID0gY29tbWFuZCAmIEJSTF9NU0tfQkxLOworICBpbnQgYXJnIFVOVVNFRCA9IGNvbW1hbmQgJiBCUkxfTVNLX0FSRzsKKyAgaW50IGNtZCA9IGJsayB8IGFyZzsKKworICBzd2l0Y2ggKGNtZCkgeworICAgIGRlZmF1bHQ6CisjaWZkZWYgSEFWRV9MSU5VWF9JTlBVVF9ICisgICAgICBzd2l0Y2ggKGJsaykgeworICAgICAgICBjYXNlIEJSTF9DTURfQkxLKFBBU1NYVCk6CisgICAgICAgICAgaWYgKGNvbW1hbmQgJiBCUkxfRkxHX0tCRF9SRUxFQVNFKSBhcmcgfD0gWFRfQklUX1JFTEVBU0U7CisKKyAgICAgICAgICB7CisgICAgICAgICAgICBpbnQgaGFuZGxlZCA9IDA7CisKKyAgICAgICAgICAgIGlmIChjb21tYW5kICYgQlJMX0ZMR19LQkRfRU1VTDApIHsKKyAgICAgICAgICAgICAgeHRLZXlzID0gbGludXhLZXlNYXBfeHRFMDsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoYXJnID09IFhUX01PRF9FMCkgeworICAgICAgICAgICAgICB4dEtleXMgPSBsaW51eEtleU1hcF94dEUwOworICAgICAgICAgICAgICBoYW5kbGVkID0gMTsKKwkgICAgfSBlbHNlIGlmIChjb21tYW5kICYgQlJMX0ZMR19LQkRfRU1VTDEpIHsKKyAgICAgICAgICAgICAgeHRLZXlzID0gbGludXhLZXlNYXBfeHRFMTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoYXJnID09IFhUX01PRF9FMSkgeworICAgICAgICAgICAgICB4dEtleXMgPSBsaW51eEtleU1hcF94dEUxOworICAgICAgICAgICAgICBoYW5kbGVkID0gMTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGhhbmRsZWQpIHJldHVybiAxOworICAgICAgICAgIH0KKworCSAgeworICAgICAgICAgICAgTGludXhLZXlDb2RlIGtleSA9IHh0S2V5c1thcmcgJiB+WFRfQklUX1JFTEVBU0VdOworICAgICAgICAgICAgaW50IHByZXNzID0gIShhcmcgJiBYVF9CSVRfUkVMRUFTRSk7CisKKyAgICAgICAgICAgIHh0S2V5cyA9IGxpbnV4S2V5TWFwX3h0MDA7CisKKyAgICAgICAgICAgIGlmIChrZXkpIHJldHVybiBpbmplY3RLZXlFdmVudChrZXksIHByZXNzKTsKKwkgIH0KKyAgICAgICAgICBicmVhazsKKworCWNhc2UgQlJMX0NNRF9CTEsoUEFTU0FUKToKKyAgICAgICAgICB7CisgICAgICAgICAgICBpbnQgaGFuZGxlZCA9IDA7CisKKyAgICAgICAgICAgIGlmIChjb21tYW5kICYgQlJMX0ZMR19LQkRfUkVMRUFTRSkgeworICAgICAgICAgICAgICBhdEtleVByZXNzZWQgPSAwOworICAgICAgICAgICAgfSBlbHNlIGlmIChhcmcgPT0gQVRfTU9EX1JFTEVBU0UpIHsKKyAgICAgICAgICAgICAgYXRLZXlQcmVzc2VkID0gMDsKKyAgICAgICAgICAgICAgaGFuZGxlZCA9IDE7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChjb21tYW5kICYgQlJMX0ZMR19LQkRfRU1VTDApIHsKKyAgICAgICAgICAgICAgYXRLZXlzID0gbGludXhLZXlNYXBfYXRFMDsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoYXJnID09IEFUX01PRF9FMCkgeworICAgICAgICAgICAgICBhdEtleXMgPSBsaW51eEtleU1hcF9hdEUwOworICAgICAgICAgICAgICBoYW5kbGVkID0gMTsKKwkgICAgfSBlbHNlIGlmIChjb21tYW5kICYgQlJMX0ZMR19LQkRfRU1VTDEpIHsKKyAgICAgICAgICAgICAgYXRLZXlzID0gbGludXhLZXlNYXBfYXRFMTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoYXJnID09IEFUX01PRF9FMSkgeworICAgICAgICAgICAgICBhdEtleXMgPSBsaW51eEtleU1hcF9hdEUxOworICAgICAgICAgICAgICBoYW5kbGVkID0gMTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGhhbmRsZWQpIHJldHVybiAxOworICAgICAgICAgIH0KKworICAgICAgICAgIHsKKyAgICAgICAgICAgIExpbnV4S2V5Q29kZSBrZXkgPSBhdEtleXNbYXJnXTsKKyAgICAgICAgICAgIGludCBwcmVzcyA9IGF0S2V5UHJlc3NlZDsKKworICAgICAgICAgICAgYXRLZXlzID0gbGludXhLZXlNYXBfYXQwMDsKKyAgICAgICAgICAgIGF0S2V5UHJlc3NlZCA9IDE7CisKKyAgICAgICAgICAgIGlmIChrZXkpIHJldHVybiBpbmplY3RLZXlFdmVudChrZXksIHByZXNzKTsKKyAgICAgICAgICB9CisgICAgICAgICAgYnJlYWs7CisKKwljYXNlIEJSTF9DTURfQkxLKFBBU1NQUzIpOgorICAgICAgICAgIHsKKyAgICAgICAgICAgIGludCBoYW5kbGVkID0gMDsKKworICAgICAgICAgICAgaWYgKGNvbW1hbmQgJiBCUkxfRkxHX0tCRF9SRUxFQVNFKSB7CisgICAgICAgICAgICAgIHBzMktleVByZXNzZWQgPSAwOworICAgICAgICAgICAgfSBlbHNlIGlmIChhcmcgPT0gUFMyX01PRF9SRUxFQVNFKSB7CisgICAgICAgICAgICAgIHBzMktleVByZXNzZWQgPSAwOworICAgICAgICAgICAgICBoYW5kbGVkID0gMTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGhhbmRsZWQpIHJldHVybiAxOworICAgICAgICAgIH0KKworICAgICAgICAgIHsKKyAgICAgICAgICAgIExpbnV4S2V5Q29kZSBrZXkgPSBsaW51eEtleU1hcF9wczJbYXJnXTsKKyAgICAgICAgICAgIGludCBwcmVzcyA9IHBzMktleVByZXNzZWQ7CisKKyAgICAgICAgICAgIHBzMktleVByZXNzZWQgPSAxOworCisgICAgICAgICAgICBpZiAoa2V5KSByZXR1cm4gaW5qZWN0S2V5RXZlbnQoa2V5LCBwcmVzcyk7CisgICAgICAgICAgfQorICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgYnJlYWs7CisgICAgICB9CisjZW5kaWYgLyogSEFWRV9MSU5VWF9JTlBVVF9IICovCisgICAgICBicmVhazsKKyAgfQorCisgIHJldHVybiAwOworfQorCitzdGF0aWMgdm9pZAorc2NyX2luaXRpYWxpemUgKE1haW5TY3JlZW4gKm1haW4pIHsKKyAgaW5pdGlhbGl6ZVJlYWxTY3JlZW4obWFpbik7CisgIGdwbUluY2x1ZGVTY3JlZW5IYW5kbGVycyhtYWluKTsKKworICBtYWluLT5iYXNlLnBvbGwgPSBwb2xsX0xpbnV4U2NyZWVuOworICBtYWluLT5iYXNlLnJlZnJlc2ggPSByZWZyZXNoX0xpbnV4U2NyZWVuOworICBtYWluLT5iYXNlLmRlc2NyaWJlID0gZGVzY3JpYmVfTGludXhTY3JlZW47CisgIG1haW4tPmJhc2UucmVhZENoYXJhY3RlcnMgPSByZWFkQ2hhcmFjdGVyc19MaW51eFNjcmVlbjsKKyAgbWFpbi0+YmFzZS5pbnNlcnRLZXkgPSBpbnNlcnRLZXlfTGludXhTY3JlZW47CisgIG1haW4tPmJhc2UuaGlnaGxpZ2h0UmVnaW9uID0gaGlnaGxpZ2h0UmVnaW9uX0xpbnV4U2NyZWVuOworICBtYWluLT5iYXNlLnVuaGlnaGxpZ2h0UmVnaW9uID0gdW5oaWdobGlnaHRSZWdpb25fTGludXhTY3JlZW47CisgIG1haW4tPmJhc2Uuc2VsZWN0VmlydHVhbFRlcm1pbmFsID0gc2VsZWN0VmlydHVhbFRlcm1pbmFsX0xpbnV4U2NyZWVuOworICBtYWluLT5iYXNlLnN3aXRjaFZpcnR1YWxUZXJtaW5hbCA9IHN3aXRjaFZpcnR1YWxUZXJtaW5hbF9MaW51eFNjcmVlbjsKKyAgbWFpbi0+YmFzZS5jdXJyZW50VmlydHVhbFRlcm1pbmFsID0gY3VycmVudFZpcnR1YWxUZXJtaW5hbF9MaW51eFNjcmVlbjsKKyAgbWFpbi0+YmFzZS5oYW5kbGVDb21tYW5kID0gaGFuZGxlQ29tbWFuZF9MaW51eFNjcmVlbjsKKworICBtYWluLT5wcm9jZXNzUGFyYW1ldGVycyA9IHByb2Nlc3NQYXJhbWV0ZXJzX0xpbnV4U2NyZWVuOworICBtYWluLT5yZWxlYXNlUGFyYW1ldGVycyA9IHJlbGVhc2VQYXJhbWV0ZXJzX0xpbnV4U2NyZWVuOworICBtYWluLT5jb25zdHJ1Y3QgPSBjb25zdHJ1Y3RfTGludXhTY3JlZW47CisgIG1haW4tPmRlc3RydWN0ID0gZGVzdHJ1Y3RfTGludXhTY3JlZW47CisgIG1haW4tPnVzZXJWaXJ0dWFsVGVybWluYWwgPSB1c2VyVmlydHVhbFRlcm1pbmFsX0xpbnV4U2NyZWVuOworfQpkaWZmIC0tZ2l0IGEvRHJpdmVycy9TY3JlZW4vTGludXgvc2NyZWVuLmggYi9Ecml2ZXJzL1NjcmVlbi9MaW51eC9zY3JlZW4uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZWZiNGE3Ci0tLSAvZGV2L251bGwKKysrIGIvRHJpdmVycy9TY3JlZW4vTGludXgvc2NyZWVuLmgKQEAgLTAsMCArMSwzMyBAQAorLyoKKyAqIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisgKiAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisgKgorICogQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKKyNpZm5kZWYgQlJMVFRZX0lOQ0xVREVEX1NDUl9MSU5VWAorI2RlZmluZSBCUkxUVFlfSU5DTFVERURfU0NSX0xJTlVYCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYgLyogX19jcGx1c3BsdXMgKi8KKwordHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBpbnQgVW5pY29kZU51bWJlcjsKK3R5cGVkZWYgVW5pY29kZU51bWJlciBBcHBsaWNhdGlvbkNoYXJhY3Rlck1hcFswWDEwMF07CisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmIC8qIF9fY3BsdXNwbHVzICovCisKKyNlbmRpZiAvKiBCUkxUVFlfSU5DTFVERURfU0NSX0xJTlVYICovCmRpZmYgLS1naXQgYS9Ecml2ZXJzL1NjcmVlbi9QY0Jpb3MvTWFrZWZpbGUuaW4gYi9Ecml2ZXJzL1NjcmVlbi9QY0Jpb3MvTWFrZWZpbGUuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWQ3NjM1NwotLS0gL2Rldi9udWxsCisrKyBiL0RyaXZlcnMvU2NyZWVuL1BjQmlvcy9NYWtlZmlsZS5pbgpAQCAtMCwwICsxLDI4IEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisjICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorIworIyBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisjCisjIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisjCisjIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyMgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorIyBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyMKKyMgV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworIworIyBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworRFJJVkVSX0NPREUgPSBwYgorRFJJVkVSX05BTUUgPSBQY0Jpb3MKK0RSSVZFUl9VU0FHRSA9IE1TLURPUworRFJJVkVSX1ZFUlNJT04gPSAKK0RSSVZFUl9ERVZFTE9QRVJTID0gCitpbmNsdWRlICQoU1JDX1RPUClzY3JlZW4ubWsKKworc2NyZWVuLiRPOgorCSQoQ0MpICQoU0NSX0NGTEFHUykgLWMgJChTUkNfRElSKS9zY3JlZW4uYworCmRpZmYgLS1naXQgYS9Ecml2ZXJzL1NjcmVlbi9QY0Jpb3Mvc2NyZWVuLmMgYi9Ecml2ZXJzL1NjcmVlbi9QY0Jpb3Mvc2NyZWVuLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODc4YTRjZgotLS0gL2Rldi9udWxsCisrKyBiL0RyaXZlcnMvU2NyZWVuL1BjQmlvcy9zY3JlZW4uYwpAQCAtMCwwICsxLDIzMSBAQAorLyoKKyAqIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisgKiAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisgKgorICogQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKKyNpbmNsdWRlICJwcm9sb2d1ZS5oIgorCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworI2luY2x1ZGUgPHBjLmg+CisjaW5jbHVkZSA8Z28zMi5oPgorI2luY2x1ZGUgPGRwbWkuaD4KKyNpbmNsdWRlIDxzeXMvZmFycHRyLmg+CisKKyNpbmNsdWRlICJsb2cuaCIKKyNpbmNsdWRlICJicmxfY21kcy5oIgorI2luY2x1ZGUgImNoYXJzZXQuaCIKKyNpbmNsdWRlICJrYmRfa2V5Y29kZXMuaCIKKworI2luY2x1ZGUgInNjcl9kcml2ZXIuaCIKKworc3RhdGljIGludAorcHJvY2Vzc1BhcmFtZXRlcnNfUGNCaW9zU2NyZWVuIChjaGFyICoqcGFyYW1ldGVycykgeworICByZXR1cm4gMTsKK30KKworc3RhdGljIGludAorY29uc3RydWN0X1BjQmlvc1NjcmVlbiAodm9pZCkgeworICByZXR1cm4gMTsKK30KKworc3RhdGljIHZvaWQKK2Rlc3RydWN0X1BjQmlvc1NjcmVlbiAodm9pZCkgeworfQorCitzdGF0aWMgdm9pZAorZGVzY3JpYmVfUGNCaW9zU2NyZWVuIChTY3JlZW5EZXNjcmlwdGlvbiAqZGVzY3JpcHRpb24pIHsKKyAgaW50IHJvdywgY29sdW1uOworICBkZXNjcmlwdGlvbi0+cm93cyA9IFNjcmVlblJvd3MoKTsKKyAgZGVzY3JpcHRpb24tPmNvbHMgPSBTY3JlZW5Db2xzKCk7CisgIFNjcmVlbkdldEN1cnNvcigmcm93LCAmY29sdW1uKTsKKyAgZGVzY3JpcHRpb24tPnBvc3ggPSBjb2x1bW47CisgIGRlc2NyaXB0aW9uLT5wb3N5ID0gcm93OworICBkZXNjcmlwdGlvbi0+bnVtYmVyID0gMTsKK30KKworc3RhdGljIGludAorcmVhZENoYXJhY3RlcnNfUGNCaW9zU2NyZWVuIChjb25zdCBTY3JlZW5Cb3ggKmJveCwgU2NyZWVuQ2hhcmFjdGVyICpidWZmZXIpIHsKKyAgdW5zaWduZWQgb2Zmc2V0ID0gU2NyZWVuUHJpbWFyeTsKKyAgU2NyZWVuRGVzY3JpcHRpb24gZGVzY3JpcHRpb247CisgIGludCByb3csIGNvbDsKKyAgZGVzY3JpYmVfUGNCaW9zU2NyZWVuKCZkZXNjcmlwdGlvbik7CisgIGlmICghdmFsaWRhdGVTY3JlZW5Cb3goYm94LCBkZXNjcmlwdGlvbi5jb2xzLCBkZXNjcmlwdGlvbi5yb3dzKSkgcmV0dXJuIDA7CisgIF9mYXJzZXRzZWwoX2dvMzJfY29udmVudGlvbmFsX21lbV9zZWxlY3RvcigpKTsKKyAgZm9yIChyb3c9Ym94LT50b3A7IHJvdzxib3gtPnRvcCtib3gtPmhlaWdodDsgKytyb3cpCisgICAgZm9yIChjb2w9Ym94LT5sZWZ0OyBjb2w8Ym94LT5sZWZ0K2JveC0+d2lkdGg7ICsrY29sKSB7CisgICAgICBidWZmZXItPnRleHQgPSBfZmFybnNwZWVrYihvZmZzZXQgKyByb3cqZGVzY3JpcHRpb24uY29scyoyICsgY29sKjIpOworICAgICAgYnVmZmVyLT5hdHRyaWJ1dGVzID0gX2Zhcm5zcGVla2Iob2Zmc2V0ICsgcm93KmRlc2NyaXB0aW9uLmNvbHMqMiArIGNvbCoyICsgMSk7CisgICAgICBidWZmZXIrKzsKKyAgICB9CisgIHJldHVybiAxOworfQorCitzdGF0aWMgaW50CitzaW11bGF0ZUtleSAodW5zaWduZWQgY2hhciBzY2FuQ29kZSwgdW5zaWduZWQgY2hhciBhc2NpaUNvZGUpIHsKKyAgX19kcG1pX3JlZ3MgcjsKKyAgci5oLmFoID0gMHgwNTsKKyAgci5oLmNoID0gc2NhbkNvZGU7CisgIHIuaC5jbCA9IGFzY2lpQ29kZTsKKyAgX19kcG1pX2ludCgweDE2LCAmcik7CisgIHJldHVybiAhci5oLmFoOworfQorCitzdGF0aWMgaW50CitpbnNlcnRNYXBwZWQgKFNjcmVlbktleSBrZXkpIHsKKyAgY2hhciBidWZmZXJbMl07CisgIGNoYXIgKnNlcXVlbmNlOworICBjaGFyICplbmQ7CisKKyAgaWYgKGlzU3BlY2lhbEtleShrZXkpKSB7CisgICAgc3dpdGNoIChrZXkgJiBTQ1JfS0VZX0NIQVJfTUFTSykgeworICAgICAgY2FzZSBTQ1JfS0VZX0VOVEVSOgorICAgICAgICBzZXF1ZW5jZSA9ICJcciI7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBTQ1JfS0VZX1RBQjoKKyAgICAgICAgc2VxdWVuY2UgPSAiXHQiOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgU0NSX0tFWV9CQUNLU1BBQ0U6CisgICAgICAgIHNlcXVlbmNlID0gIlx4MDgiOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgU0NSX0tFWV9FU0NBUEU6CisgICAgICAgIHNlcXVlbmNlID0gIlx4MWIiOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgU0NSX0tFWV9DVVJTT1JfTEVGVDoKKwlyZXR1cm4oc2ltdWxhdGVLZXkoMTA1LCAwKSk7CisgICAgICBjYXNlIFNDUl9LRVlfQ1VSU09SX1JJR0hUOgorICAgICAgICByZXR1cm4oc2ltdWxhdGVLZXkoMTA2LCAwKSk7CisgICAgICBjYXNlIFNDUl9LRVlfQ1VSU09SX1VQOgorICAgICAgICByZXR1cm4oc2ltdWxhdGVLZXkoMTAzLCAwKSk7CisgICAgICBjYXNlIFNDUl9LRVlfQ1VSU09SX0RPV046CisgICAgICAgIHJldHVybihzaW11bGF0ZUtleSgxMDgsIDApKTsKKyAgICAgIGNhc2UgU0NSX0tFWV9QQUdFX1VQOgorICAgICAgICByZXR1cm4oc2ltdWxhdGVLZXkoMTA0LCAwKSk7CisgICAgICBjYXNlIFNDUl9LRVlfUEFHRV9ET1dOOgorICAgICAgICByZXR1cm4oc2ltdWxhdGVLZXkoMTA5LCAwKSk7CisgICAgICBjYXNlIFNDUl9LRVlfSE9NRToKKyAgICAgICAgcmV0dXJuKHNpbXVsYXRlS2V5KDEwMiwgMCkpOworICAgICAgY2FzZSBTQ1JfS0VZX0VORDoKKyAgICAgICAgcmV0dXJuKHNpbXVsYXRlS2V5KDEwNywgMCkpOworICAgICAgY2FzZSBTQ1JfS0VZX0lOU0VSVDoKKyAgICAgICAgcmV0dXJuKHNpbXVsYXRlS2V5KDExMCwgMCkpOworICAgICAgY2FzZSBTQ1JfS0VZX0RFTEVURToKKyAgICAgICAgcmV0dXJuKHNpbXVsYXRlS2V5KDExMSwgMCkpOworICAgICAgY2FzZSBTQ1JfS0VZX0ZVTkNUSU9OICsgMDoKKyAgICAgIGNhc2UgU0NSX0tFWV9GVU5DVElPTiArIDE6CisgICAgICBjYXNlIFNDUl9LRVlfRlVOQ1RJT04gKyAyOgorICAgICAgY2FzZSBTQ1JfS0VZX0ZVTkNUSU9OICsgMzoKKyAgICAgIGNhc2UgU0NSX0tFWV9GVU5DVElPTiArIDQ6CisgICAgICBjYXNlIFNDUl9LRVlfRlVOQ1RJT04gKyA1OgorICAgICAgY2FzZSBTQ1JfS0VZX0ZVTkNUSU9OICsgNjoKKyAgICAgIGNhc2UgU0NSX0tFWV9GVU5DVElPTiArIDc6CisgICAgICBjYXNlIFNDUl9LRVlfRlVOQ1RJT04gKyA4OgorICAgICAgY2FzZSBTQ1JfS0VZX0ZVTkNUSU9OICsgOToKKyAgICAgIGNhc2UgU0NSX0tFWV9GVU5DVElPTiArIDEwOgorICAgICAgICByZXR1cm4oc2ltdWxhdGVLZXkoa2V5IC0gU0NSX0tFWV9GVU5DVElPTiArIDU5LCAwKSk7CisgICAgICBjYXNlIFNDUl9LRVlfRlVOQ1RJT04gKyAxMToKKyAgICAgICAgcmV0dXJuKHNpbXVsYXRlS2V5KDg3LCAwKSk7CisgICAgICBjYXNlIFNDUl9LRVlfRlVOQ1RJT04gKyAxMjoKKyAgICAgICAgcmV0dXJuKHNpbXVsYXRlS2V5KDg4LCAwKSk7CisgICAgICBkZWZhdWx0OgorICAgICAgICBsb2dNZXNzYWdlKExPR19XQVJOSU5HLCAiS2V5ICU0LjRYIG5vdCBzdXBvcnRlZC4iLCBrZXkpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgZW5kID0gc2VxdWVuY2UgKyBzdHJsZW4oc2VxdWVuY2UpOworICB9IGVsc2UgeworICAgIGludCBjaGFyYWN0ZXIgPSBrZXkgJiBTQ1JfS0VZX0NIQVJfTUFTSzsKKyAgICBpbnQgYyA9IGNvbnZlcnRXY2hhclRvQ2hhcihjaGFyYWN0ZXIpOworCisgICAgaWYgKGM9PSBFT0YpIHsKKyAgICAgIGxvZ01lc3NhZ2UoTE9HX1dBUk5JTkcsICJDaGFyYWN0ZXIgJWQgbm90IHN1cHBvcnRlZCIsIGNoYXJhY3Rlcik7CisgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBzZXF1ZW5jZSA9IGVuZCA9IGJ1ZmZlciArIEFSUkFZX0NPVU5UKGJ1ZmZlcik7CisgICAgKi0tc2VxdWVuY2UgPSBrZXkgJiBTQ1JfS0VZX0NIQVJfTUFTSzsKKworICAgIGlmIChrZXkgJiBTQ1JfS0VZX0FMVF9MRUZUKQorICAgICAgKi0tc2VxdWVuY2UgPSAwWDFCOworICB9CisKKyAgd2hpbGUgKHNlcXVlbmNlICE9IGVuZCkKKyAgICBpZiAoc2ltdWxhdGVLZXkoMCwgKnNlcXVlbmNlKyspKQorICAgICAgcmV0dXJuIDA7CisgIHJldHVybiAxOworfQorCitzdGF0aWMgaW50CitpbnNlcnRLZXlfUGNCaW9zU2NyZWVuIChTY3JlZW5LZXkga2V5KSB7CisgIGxvZ01lc3NhZ2UoTE9HX0RFQlVHLCAiSW5zZXJ0IGtleTogJTQuNFgiLCBrZXkpOworICByZXR1cm4gaW5zZXJ0TWFwcGVkKGtleSk7IAorfQorCitzdGF0aWMgaW50CitjdXJyZW50VmlydHVhbFRlcm1pbmFsX1BjQmlvc1NjcmVlbiAodm9pZCkgeworICByZXR1cm4gMTsKK30KKworc3RhdGljIGludAoraGFuZGxlQ29tbWFuZF9QY0Jpb3NTY3JlZW4gKGludCBjb21tYW5kKSB7CisgIGludCBibGsgPSBjb21tYW5kICYgQlJMX01TS19CTEs7CisgIGludCBhcmcgPSBjb21tYW5kICYgQlJMX01TS19BUkc7CisgIGludCBwcmVzcyA9IDA7CisKKyAgc3dpdGNoIChibGspIHsKKyAgICBjYXNlIEJSTF9DTURfQkxLKFBBU1NYVCk6CisgICAgICBwcmVzcyA9ICEoYXJnICYgMFg4MCk7CisgICAgICBhcmcgJj0gMFg3RjsKKyAgICAgIC8qIGZhbGx0aHJvdWdoICovCisgICAgY2FzZSBCUkxfQ01EX0JMSyhQQVNTQVQpOiB7CisgICAgICBwcmVzcyB8PSAhKGNvbW1hbmQgJiBCUkxfRkxHX0tCRF9SRUxFQVNFKTsKKworICAgICAgaWYgKGFyZyA+PSAwWDgwKQorCXJldHVybiAwOworCisgICAgICBpZiAoY29tbWFuZCAmIEJSTF9GTEdfS0JEX0VNVUwwKSB7CisJaWYgKCFzaW11bGF0ZUtleSgwWEUwLCAwKSkKKwkgIHJldHVybiAwOworICAgICAgfSBlbHNlIGlmIChjb21tYW5kICYgQlJMX0ZMR19LQkRfRU1VTDEpIHsKKwlpZiAoIXNpbXVsYXRlS2V5KDBYRTEsIDApKQorCSAgcmV0dXJuIDA7CisgICAgICB9CisKKyAgICAgIGlmIChibGsgPT0gQlJMX0NNRF9CTEsoUEFTU0FUKSkKKwlhcmcgPSBBVDJYVFthcmddOworCisgICAgICBpZiAoIXByZXNzKQorCWFyZyB8PSAweDgwOworCisgICAgICByZXR1cm4gc2ltdWxhdGVLZXkoYXJnLCAwKTsKKyAgICB9CisgIH0KKworICByZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQKK3Njcl9pbml0aWFsaXplIChNYWluU2NyZWVuICptYWluKSB7CisgIGluaXRpYWxpemVSZWFsU2NyZWVuKG1haW4pOworICBtYWluLT5iYXNlLmRlc2NyaWJlID0gZGVzY3JpYmVfUGNCaW9zU2NyZWVuOworICBtYWluLT5iYXNlLnJlYWRDaGFyYWN0ZXJzID0gcmVhZENoYXJhY3RlcnNfUGNCaW9zU2NyZWVuOworICBtYWluLT5iYXNlLmluc2VydEtleSA9IGluc2VydEtleV9QY0Jpb3NTY3JlZW47CisgIG1haW4tPmJhc2UuY3VycmVudFZpcnR1YWxUZXJtaW5hbCA9IGN1cnJlbnRWaXJ0dWFsVGVybWluYWxfUGNCaW9zU2NyZWVuOworICBtYWluLT5iYXNlLmhhbmRsZUNvbW1hbmQgPSBoYW5kbGVDb21tYW5kX1BjQmlvc1NjcmVlbjsKKyAgbWFpbi0+cHJvY2Vzc1BhcmFtZXRlcnMgPSBwcm9jZXNzUGFyYW1ldGVyc19QY0Jpb3NTY3JlZW47CisgIG1haW4tPmNvbnN0cnVjdCA9IGNvbnN0cnVjdF9QY0Jpb3NTY3JlZW47CisgIG1haW4tPmRlc3RydWN0ID0gZGVzdHJ1Y3RfUGNCaW9zU2NyZWVuOworfQpkaWZmIC0tZ2l0IGEvRHJpdmVycy9TY3JlZW4vU2NyZWVuL01ha2VmaWxlLmluIGIvRHJpdmVycy9TY3JlZW4vU2NyZWVuL01ha2VmaWxlLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEyYWU4NjUKLS0tIC9kZXYvbnVsbAorKysgYi9Ecml2ZXJzL1NjcmVlbi9TY3JlZW4vTWFrZWZpbGUuaW4KQEAgLTAsMCArMSwyOCBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorIyAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyMKKyMgQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorIworIyBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorIworIyBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisjIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyMgbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisjCisjIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK0RSSVZFUl9DT0RFID0gc2MKK0RSSVZFUl9OQU1FID0gU2NyZWVuCitEUklWRVJfVVNBR0UgPSBwYXRjaGVkIHNjcmVlbiBwcm9ncmFtCitEUklWRVJfVkVSU0lPTiA9IAorRFJJVkVSX0RFVkVMT1BFUlMgPSAKK2luY2x1ZGUgJChTUkNfVE9QKXNjcmVlbi5taworCitzY3JlZW4uJE86CisJJChDQykgJChTQ1JfQ0ZMQUdTKSAtYyAkKFNSQ19ESVIpL3NjcmVlbi5jCisKZGlmZiAtLWdpdCBhL0RyaXZlcnMvU2NyZWVuL1NjcmVlbi9zY3JlZW4uYyBiL0RyaXZlcnMvU2NyZWVuL1NjcmVlbi9zY3JlZW4uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ODNlNzNkCi0tLSAvZGV2L251bGwKKysrIGIvRHJpdmVycy9TY3JlZW4vU2NyZWVuL3NjcmVlbi5jCkBAIC0wLDAgKzEsMzM2IEBACisvKgorICogQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyAqICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyAqCisgKiBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorICoKKyAqIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyAqCisgKiBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisgKi8KKworI2luY2x1ZGUgInByb2xvZ3VlLmgiCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGFyZy5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8ZmNudGwuaD4KKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorCisjaWZkZWYgSEFWRV9TSE1HRVQKKyNpbmNsdWRlIDxzeXMvaXBjLmg+CisjaW5jbHVkZSA8c3lzL3NobS5oPgorc3RhdGljIGtleV90IHNobUtleTsKK3N0YXRpYyBpbnQgc2htSWRlbnRpZmllcjsKKyNlbmRpZiAvKiBIQVZFX1NITUdFVCAqLworCisjaWZkZWYgSEFWRV9TSE1fT1BFTgorI2luY2x1ZGUgPHN5cy9tbWFuLmg+CitzdGF0aWMgY29uc3QgY2hhciAqc2htUGF0aCA9ICIvc2NyZWVuIjsKK3N0YXRpYyBpbnQgc2htRmlsZURlc2NyaXB0b3IgPSAtMTsKKyNlbmRpZiAvKiBIQVZFX1NITV9PUEVOICovCisKKyNpbmNsdWRlICJsb2cuaCIKKyNpbmNsdWRlICJzdHJmbXQuaCIKKyNpbmNsdWRlICJob3N0Y21kLmgiCisjaW5jbHVkZSAiY2hhcnNldC5oIgorI2luY2x1ZGUgImFzY2lpLmgiCisKKyNpbmNsdWRlICJzY3JfZHJpdmVyLmgiCisjaW5jbHVkZSAic2NyZWVuLmgiCisKK3N0YXRpYyB1bnNpZ25lZCBjaGFyICpzaG1BZGRyZXNzID0gTlVMTDsKK3N0YXRpYyBjb25zdCBtb2RlX3Qgc2htTW9kZSA9IFNfSVJXWFU7CitzdGF0aWMgY29uc3QgaW50IHNobVNpemUgPSA0ICsgKCg2NiAqIDEzMikgKiAyKTsKKworc3RhdGljIGludAorY29uc3RydWN0X1NjcmVlblNjcmVlbiAodm9pZCkgeworI2lmZGVmIEhBVkVfU0hNR0VUCisgIHsKKyAgICBrZXlfdCBrZXlzWzJdOworICAgIGludCBrZXlDb3VudCA9IDA7CisKKyAgICAvKiBUaGUgb3JpZ2luYWwsIHN0YXRpYyBrZXkuICovCisgICAga2V5c1trZXlDb3VudCsrXSA9IDB4QkFDRDA3MkY7CisKKyAgICAvKiBUaGUgbmV3LCBkeW5hbWljYWxseSBnZW5lcmF0ZWQsIHBlciB1c2VyIGtleS4gKi8KKyAgICB7CisgICAgICBpbnQgcHJvamVjdCA9ICdiJzsKKyAgICAgIGNvbnN0IGNoYXIgKnBhdGggPSBnZXRlbnYoIkhPTUUiKTsKKyAgICAgIGlmICghcGF0aCB8fCAhKnBhdGgpIHBhdGggPSAiLyI7CisgICAgICBsb2dNZXNzYWdlKExPR19ERUJVRywgIlNoYXJlZCBtZW1vcnkgZmlsZSBzeXN0ZW0gb2JqZWN0OiAlcyIsIHBhdGgpOworICAgICAgaWYgKChrZXlzW2tleUNvdW50XSA9IGZ0b2socGF0aCwgcHJvamVjdCkpICE9IC0xKSB7CisgICAgICAgIGtleUNvdW50Kys7CisgICAgICB9IGVsc2UgeworICAgICAgICBsb2dNZXNzYWdlKExPR19XQVJOSU5HLCAiUGVyIHVzZXIgc2hhcmVkIG1lbW9yeSBrZXkgbm90IGdlbmVyYXRlZDogJXMiLAorICAgICAgICAgICAgICAgICAgIHN0cmVycm9yKGVycm5vKSk7CisgICAgICB9CisgICAgfQorCisgICAgd2hpbGUgKGtleUNvdW50ID4gMCkgeworICAgICAgc2htS2V5ID0ga2V5c1stLWtleUNvdW50XTsKKyAgICAgIGxvZ01lc3NhZ2UoTE9HX0RFQlVHLCAiVHJ5aW5nIHNoYXJlZCBtZW1vcnkga2V5OiAwWCUiIFBSSWtleSwgc2htS2V5KTsKKyAgICAgIGlmICgoc2htSWRlbnRpZmllciA9IHNobWdldChzaG1LZXksIHNobVNpemUsIHNobU1vZGUpKSAhPSAtMSkgeworICAgICAgICBpZiAoKHNobUFkZHJlc3MgPSBzaG1hdChzaG1JZGVudGlmaWVyLCBOVUxMLCAwKSkgIT0gKHVuc2lnbmVkIGNoYXIgKiktMSkgeworICAgICAgICAgIGxvZ01lc3NhZ2UoTE9HX0lORk8sICJTY3JlZW4gaW1hZ2Ugc2hhcmVkIG1lbW9yeSBrZXk6IDBYJSIgUFJJa2V5LCBzaG1LZXkpOworICAgICAgICAgIHJldHVybiAxOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgIGxvZ01lc3NhZ2UoTE9HX1dBUk5JTkcsICJDYW5ub3QgYXR0YWNoIHNoYXJlZCBtZW1vcnkgc2VnbWVudCAwWCUiIFBSSWtleSAiOiAlcyIsCisgICAgICAgICAgICAgICAgICAgICBzaG1LZXksIHN0cmVycm9yKGVycm5vKSk7CisgICAgICAgIH0KKyAgICAgIH0gZWxzZSB7CisgICAgICAgIGxvZ01lc3NhZ2UoTE9HX1dBUk5JTkcsICJDYW5ub3QgYWNjZXNzIHNoYXJlZCBtZW1vcnkgc2VnbWVudCAwWCUiIFBSSWtleSAiOiAlcyIsCisgICAgICAgICAgICAgICAgICAgc2htS2V5LCBzdHJlcnJvcihlcnJubykpOworICAgICAgfQorICAgIH0KKyAgICBzaG1JZGVudGlmaWVyID0gLTE7CisgIH0KKyNlbmRpZiAvKiBIQVZFX1NITUdFVCAqLworCisjaWZkZWYgSEFWRV9TSE1fT1BFTgorICB7CisgICAgaWYgKChzaG1GaWxlRGVzY3JpcHRvciA9IHNobV9vcGVuKHNobVBhdGgsIE9fUkRPTkxZLCBzaG1Nb2RlKSkgIT0gLTEpIHsKKyAgICAgIGlmICgoc2htQWRkcmVzcyA9IG1tYXAoMCwgc2htU2l6ZSwgUFJPVF9SRUFELCBNQVBfU0hBUkVELCBzaG1GaWxlRGVzY3JpcHRvciwgMCkpICE9IE1BUF9GQUlMRUQpIHsKKyAgICAgICAgcmV0dXJuIDE7CisgICAgICB9IGVsc2UgeworICAgICAgICBsb2dTeXN0ZW1FcnJvcigibW1hcCIpOworICAgICAgfQorCisgICAgICBjbG9zZShzaG1GaWxlRGVzY3JpcHRvcik7CisgICAgICBzaG1GaWxlRGVzY3JpcHRvciA9IC0xOworICAgIH0gZWxzZSB7CisgICAgICBsb2dTeXN0ZW1FcnJvcigic2htX29wZW4iKTsKKyAgICB9CisgIH0KKyNlbmRpZiAvKiBIQVZFX1NITV9PUEVOICovCisKKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyICoKK2dldEF1eGlsaWFyeURhdGEgKHZvaWQpIHsKKyAgcmV0dXJuICZzaG1BZGRyZXNzWzQgKyAoc2htQWRkcmVzc1swXSAqIHNobUFkZHJlc3NbMV0gKiAyKV07Cit9CisKK3N0YXRpYyBpbnQKK2N1cnJlbnRWaXJ0dWFsVGVybWluYWxfU2NyZWVuU2NyZWVuICh2b2lkKSB7CisgIHJldHVybiBnZXRBdXhpbGlhcnlEYXRhKClbMF07Cit9CisKK3N0YXRpYyBpbnQKK2RvU2NyZWVuQ29tbWFuZCAoY29uc3QgY2hhciAqY29tbWFuZCwgLi4uKSB7CisgIHZhX2xpc3QgYXJnczsKKyAgaW50IGNvdW50ID0gMDsKKworICB2YV9zdGFydChhcmdzLCBjb21tYW5kKTsKKyAgd2hpbGUgKHZhX2FyZyhhcmdzLCBjaGFyICopKSArK2NvdW50OworICB2YV9lbmQoYXJncyk7CisKKyAgeworICAgIGNoYXIgd2luZG93WzBYMTBdOworICAgIGNvbnN0IGNoYXIgKmFyZ3ZbY291bnQgKyA2XTsKKyAgICBjb25zdCBjaGFyICoqYXJnID0gYXJndjsKKworICAgICphcmcrKyA9ICJzY3JlZW4iOworCisgICAgKmFyZysrID0gIi1wIjsKKyAgICBzbnByaW50Zih3aW5kb3csIHNpemVvZih3aW5kb3cpLCAiJWQiLCBjdXJyZW50VmlydHVhbFRlcm1pbmFsX1NjcmVlblNjcmVlbigpKTsKKyAgICAqYXJnKysgPSB3aW5kb3c7CisKKyAgICAqYXJnKysgPSAiLVgiOworICAgICphcmcrKyA9IGNvbW1hbmQ7CisKKyAgICB2YV9zdGFydChhcmdzLCBjb21tYW5kKTsKKyAgICB3aGlsZSAoKCphcmcrKyA9IHZhX2FyZyhhcmdzLCBjaGFyICopKSk7CisgICAgdmFfZW5kKGFyZ3MpOworCisgICAgeworICAgICAgaW50IHJlc3VsdCA9IGV4ZWN1dGVIb3N0Q29tbWFuZChhcmd2KTsKKworICAgICAgaWYgKHJlc3VsdCA9PSAwKSByZXR1cm4gMTsKKyAgICAgIGxvZ01lc3NhZ2UoTE9HX0VSUiwgInNjcmVlbiBlcnJvcjogJWQiLCByZXN1bHQpOworICAgIH0KKyAgfQorCisgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50Cit1c2VyVmlydHVhbFRlcm1pbmFsX1NjcmVlblNjcmVlbiAoaW50IG51bWJlcikgeworICByZXR1cm4gMSArIG51bWJlcjsKK30KKworc3RhdGljIHZvaWQKK2Rlc2NyaWJlX1NjcmVlblNjcmVlbiAoU2NyZWVuRGVzY3JpcHRpb24gKmRlc2NyaXB0aW9uKSB7CisgIGRlc2NyaXB0aW9uLT5jb2xzID0gc2htQWRkcmVzc1swXTsKKyAgZGVzY3JpcHRpb24tPnJvd3MgPSBzaG1BZGRyZXNzWzFdOworICBkZXNjcmlwdGlvbi0+cG9zeCA9IHNobUFkZHJlc3NbMl07CisgIGRlc2NyaXB0aW9uLT5wb3N5ID0gc2htQWRkcmVzc1szXTsKKyAgZGVzY3JpcHRpb24tPm51bWJlciA9IGN1cnJlbnRWaXJ0dWFsVGVybWluYWxfU2NyZWVuU2NyZWVuKCk7Cit9CisKK3N0YXRpYyBpbnQKK3JlYWRDaGFyYWN0ZXJzX1NjcmVlblNjcmVlbiAoY29uc3QgU2NyZWVuQm94ICpib3gsIFNjcmVlbkNoYXJhY3RlciAqYnVmZmVyKSB7CisgIFNjcmVlbkRlc2NyaXB0aW9uIGRlc2NyaXB0aW9uOyAgICAgICAgICAgICAgICAgLyogc2NyZWVuIHN0YXRpc3RpY3MgKi8KKyAgZGVzY3JpYmVfU2NyZWVuU2NyZWVuKCZkZXNjcmlwdGlvbik7CisgIGlmICh2YWxpZGF0ZVNjcmVlbkJveChib3gsIGRlc2NyaXB0aW9uLmNvbHMsIGRlc2NyaXB0aW9uLnJvd3MpKSB7CisgICAgU2NyZWVuQ2hhcmFjdGVyICpjaGFyYWN0ZXIgPSBidWZmZXI7CisgICAgdW5zaWduZWQgY2hhciAqdGV4dCA9IHNobUFkZHJlc3MgKyA0ICsgKGJveC0+dG9wICogZGVzY3JpcHRpb24uY29scykgKyBib3gtPmxlZnQ7CisgICAgdW5zaWduZWQgY2hhciAqYXR0cmlidXRlcyA9IHRleHQgKyAoZGVzY3JpcHRpb24uY29scyAqIGRlc2NyaXB0aW9uLnJvd3MpOworICAgIHNpemVfdCBpbmNyZW1lbnQgPSBkZXNjcmlwdGlvbi5jb2xzIC0gYm94LT53aWR0aDsKKyAgICBpbnQgcm93OworICAgIGZvciAocm93PTA7IHJvdzxib3gtPmhlaWdodDsgcm93KyspIHsKKyAgICAgIGludCBjb2x1bW47CisgICAgICBmb3IgKGNvbHVtbj0wOyBjb2x1bW48Ym94LT53aWR0aDsgY29sdW1uKyspIHsKKyAgICAgICAgd2ludF90IHdjID0gY29udmVydENoYXJUb1djaGFyKCp0ZXh0KyspOworICAgICAgICBpZiAod2MgPT0gV0VPRikgd2MgPSBMJz8nOworICAgICAgICBjaGFyYWN0ZXItPnRleHQgPSB3YzsKKyAgICAgICAgY2hhcmFjdGVyLT5hdHRyaWJ1dGVzID0gKmF0dHJpYnV0ZXMrKzsKKyAgICAgICAgY2hhcmFjdGVyKys7CisgICAgICB9CisgICAgICB0ZXh0ICs9IGluY3JlbWVudDsKKyAgICAgIGF0dHJpYnV0ZXMgKz0gaW5jcmVtZW50OworICAgIH0KKyAgICByZXR1cm4gMTsKKyAgfQorICByZXR1cm4gMDsKK30KKworc3RhdGljIGludAoraW5zZXJ0S2V5X1NjcmVlblNjcmVlbiAoU2NyZWVuS2V5IGtleSkgeworICBjb25zdCBjaGFyICpzZXF1ZW5jZTsKKyAgY2hhciBidWZmZXJbMFgxMF07CisKKyAgc2V0U2NyZWVuS2V5TW9kaWZpZXJzKCZrZXksIDApOworICB3Y2hhcl90IGNoYXJhY3RlciA9IGtleSAmIFNDUl9LRVlfQ0hBUl9NQVNLOworCisgIGlmIChpc1NwZWNpYWxLZXkoa2V5KSkgeworICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgZmxhZ3MgPSBnZXRBdXhpbGlhcnlEYXRhKClbMV07CisKKyNkZWZpbmUgS0VZKGtleSxzdHJpbmcpIGNhc2UgKGtleSk6IHNlcXVlbmNlID0gKHN0cmluZyk7IGJyZWFrCisjZGVmaW5lIENVUlNPUl9LRVkoa2V5LHN0cmluZzEsc3RyaW5nMikgS0VZKChrZXkpLCAoKGZsYWdzICYgMFgwMSk/IChzdHJpbmcxKTogKHN0cmluZzIpKSkKKworICAgIHN3aXRjaCAoY2hhcmFjdGVyKSB7CisgICAgICBLRVkoU0NSX0tFWV9FTlRFUiwgIlxyIik7CisgICAgICBLRVkoU0NSX0tFWV9UQUIsICJcdCIpOworICAgICAgS0VZKFNDUl9LRVlfQkFDS1NQQUNFLCAiXHg3ZiIpOworICAgICAgS0VZKFNDUl9LRVlfRVNDQVBFLCAiXHgxYiIpOworCisgICAgICBDVVJTT1JfS0VZKFNDUl9LRVlfQ1VSU09SX0xFRlQgLCAiXHgxYk9EIiwgIlx4MWJbRCIpOworICAgICAgQ1VSU09SX0tFWShTQ1JfS0VZX0NVUlNPUl9SSUdIVCwgIlx4MWJPQyIsICJceDFiW0MiKTsKKyAgICAgIENVUlNPUl9LRVkoU0NSX0tFWV9DVVJTT1JfVVAgICAsICJceDFiT0EiLCAiXHgxYltBIik7CisgICAgICBDVVJTT1JfS0VZKFNDUl9LRVlfQ1VSU09SX0RPV04gLCAiXHgxYk9CIiwgIlx4MWJbQiIpOworCisgICAgICBLRVkoU0NSX0tFWV9QQUdFX1VQLCAiXHgxYls1fiIpOworICAgICAgS0VZKFNDUl9LRVlfUEFHRV9ET1dOLCAiXHgxYls2fiIpOworICAgICAgS0VZKFNDUl9LRVlfSE9NRSwgIlx4MWJbMX4iKTsKKyAgICAgIEtFWShTQ1JfS0VZX0VORCwgIlx4MWJbNH4iKTsKKyAgICAgIEtFWShTQ1JfS0VZX0lOU0VSVCwgIlx4MWJbMn4iKTsKKyAgICAgIEtFWShTQ1JfS0VZX0RFTEVURSwgIlx4MWJbM34iKTsKKyAgICAgIEtFWShTQ1JfS0VZX0ZVTkNUSU9OKzAsICJceDFiT1AiKTsKKyAgICAgIEtFWShTQ1JfS0VZX0ZVTkNUSU9OKzEsICJceDFiT1EiKTsKKyAgICAgIEtFWShTQ1JfS0VZX0ZVTkNUSU9OKzIsICJceDFiT1IiKTsKKyAgICAgIEtFWShTQ1JfS0VZX0ZVTkNUSU9OKzMsICJceDFiT1MiKTsKKyAgICAgIEtFWShTQ1JfS0VZX0ZVTkNUSU9OKzQsICJceDFiWzE1fiIpOworICAgICAgS0VZKFNDUl9LRVlfRlVOQ1RJT04rNSwgIlx4MWJbMTd+Iik7CisgICAgICBLRVkoU0NSX0tFWV9GVU5DVElPTis2LCAiXHgxYlsxOH4iKTsKKyAgICAgIEtFWShTQ1JfS0VZX0ZVTkNUSU9OKzcsICJceDFiWzE5fiIpOworICAgICAgS0VZKFNDUl9LRVlfRlVOQ1RJT04rOCwgIlx4MWJbMjB+Iik7CisgICAgICBLRVkoU0NSX0tFWV9GVU5DVElPTis5LCAiXHgxYlsyMX4iKTsKKyAgICAgIEtFWShTQ1JfS0VZX0ZVTkNUSU9OKzEwLCAiXHgxYlsyM34iKTsKKyAgICAgIEtFWShTQ1JfS0VZX0ZVTkNUSU9OKzExLCAiXHgxYlsyNH4iKTsKKyAgICAgIEtFWShTQ1JfS0VZX0ZVTkNUSU9OKzEyLCAiXHgxYlsyNX4iKTsKKyAgICAgIEtFWShTQ1JfS0VZX0ZVTkNUSU9OKzEzLCAiXHgxYlsyNn4iKTsKKyAgICAgIEtFWShTQ1JfS0VZX0ZVTkNUSU9OKzE0LCAiXHgxYlsyOH4iKTsKKyAgICAgIEtFWShTQ1JfS0VZX0ZVTkNUSU9OKzE1LCAiXHgxYlsyOX4iKTsKKyAgICAgIEtFWShTQ1JfS0VZX0ZVTkNUSU9OKzE2LCAiXHgxYlszMX4iKTsKKyAgICAgIEtFWShTQ1JfS0VZX0ZVTkNUSU9OKzE3LCAiXHgxYlszMn4iKTsKKyAgICAgIEtFWShTQ1JfS0VZX0ZVTkNUSU9OKzE4LCAiXHgxYlszM34iKTsKKyAgICAgIEtFWShTQ1JfS0VZX0ZVTkNUSU9OKzE5LCAiXHgxYlszNH4iKTsKKworICAgICAgZGVmYXVsdDoKKyAgICAgICAgbG9nTWVzc2FnZShMT0dfV0FSTklORywgInVuc3VwcG9ydGVkIGtleTogJTA0WCIsIGtleSk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworI3VuZGVmIENVUlNPUl9LRVkKKyN1bmRlZiBLRVkKKyAgfSBlbHNlIHsKKyAgICBpbnQgYnl0ZSA9IGNvbnZlcnRXY2hhclRvQ2hhcihjaGFyYWN0ZXIpOworCisgICAgaWYgKGJ5dGUgPT0gRU9GKSB7CisgICAgICBsb2dNZXNzYWdlKExPR19XQVJOSU5HLCAiY2hhcmFjdGVyIG5vdCBzdXBwb3J0ZWQgaW4gbG9jYWwgY2hhcmFjdGVyIHNldDogMFglMDRYIiwga2V5KTsKKyAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIFNUUl9CRUdJTihidWZmZXIsIHNpemVvZihidWZmZXIpKTsKKyAgICBpZiAoa2V5ICYgU0NSX0tFWV9BTFRfTEVGVCkgU1RSX1BSSU5URigiJWMiLCBBU0NJSV9FU0MpOworICAgIFNUUl9QUklOVEYoIlxcJTAzbyIsIGJ5dGUpOworICAgIFNUUl9FTkQ7CisKKyAgICBzZXF1ZW5jZSA9IGJ1ZmZlcjsKKyAgfQorCisgIGxvZ0J5dGVzKExPR19DQVRFR09SWShTQ1JFRU5fRFJJVkVSKSwgImluc2VydCBieXRlcyIsIHNlcXVlbmNlLCBzdHJsZW4oc2VxdWVuY2UpKTsKKyAgcmV0dXJuIGRvU2NyZWVuQ29tbWFuZCgic3R1ZmYiLCBzZXF1ZW5jZSwgTlVMTCk7Cit9CisKK3N0YXRpYyBpbnQKK3N3aXRjaFZpcnR1YWxUZXJtaW5hbF9TY3JlZW5TY3JlZW4gKGludCB2dCkgeworICBpZiAoKHZ0IC09IDEpIDwgMCkgcmV0dXJuIDA7CisgIGNoYXIgbnVtYmVyWzBYMTBdOworICBzbnByaW50ZihudW1iZXIsIHNpemVvZihudW1iZXIpLCAiJWQiLCB2dCk7CisgIHJldHVybiBkb1NjcmVlbkNvbW1hbmQoInNlbGVjdCIsIG51bWJlciwgTlVMTCk7Cit9CisKK3N0YXRpYyBpbnQKK25leHRWaXJ0dWFsVGVybWluYWxfU2NyZWVuU2NyZWVuICh2b2lkKSB7CisgIHJldHVybiBkb1NjcmVlbkNvbW1hbmQoIm5leHQiLCBOVUxMKTsKK30KKworc3RhdGljIGludAorcHJldmlvdXNWaXJ0dWFsVGVybWluYWxfU2NyZWVuU2NyZWVuICh2b2lkKSB7CisgIHJldHVybiBkb1NjcmVlbkNvbW1hbmQoInByZXYiLCBOVUxMKTsKK30KKworc3RhdGljIHZvaWQKK2Rlc3RydWN0X1NjcmVlblNjcmVlbiAodm9pZCkgeworI2lmZGVmIEhBVkVfU0hNR0VUCisgIGlmIChzaG1JZGVudGlmaWVyICE9IC0xKSB7CisgICAgc2htZHQoc2htQWRkcmVzcyk7CisgIH0KKyNlbmRpZiAvKiBIQVZFX1NITUdFVCAqLworCisjaWZkZWYgSEFWRV9TSE1fT1BFTgorICBpZiAoc2htRmlsZURlc2NyaXB0b3IgIT0gLTEpIHsKKyAgICBtdW5tYXAoc2htQWRkcmVzcywgc2htU2l6ZSk7CisgICAgY2xvc2Uoc2htRmlsZURlc2NyaXB0b3IpOworICAgIHNobUZpbGVEZXNjcmlwdG9yID0gLTE7CisgIH0KKyNlbmRpZiAvKiBIQVZFX1NITV9PUEVOICovCisKKyAgc2htQWRkcmVzcyA9IE5VTEw7Cit9CisKK3N0YXRpYyB2b2lkCitzY3JfaW5pdGlhbGl6ZSAoTWFpblNjcmVlbiAqbWFpbikgeworICBpbml0aWFsaXplUmVhbFNjcmVlbihtYWluKTsKKyAgbWFpbi0+YmFzZS5jdXJyZW50VmlydHVhbFRlcm1pbmFsID0gY3VycmVudFZpcnR1YWxUZXJtaW5hbF9TY3JlZW5TY3JlZW47CisgIG1haW4tPmJhc2UuZGVzY3JpYmUgPSBkZXNjcmliZV9TY3JlZW5TY3JlZW47CisgIG1haW4tPmJhc2UucmVhZENoYXJhY3RlcnMgPSByZWFkQ2hhcmFjdGVyc19TY3JlZW5TY3JlZW47CisgIG1haW4tPmJhc2UuaW5zZXJ0S2V5ID0gaW5zZXJ0S2V5X1NjcmVlblNjcmVlbjsKKyAgbWFpbi0+YmFzZS5zd2l0Y2hWaXJ0dWFsVGVybWluYWwgPSBzd2l0Y2hWaXJ0dWFsVGVybWluYWxfU2NyZWVuU2NyZWVuOworICBtYWluLT5iYXNlLm5leHRWaXJ0dWFsVGVybWluYWwgPSBuZXh0VmlydHVhbFRlcm1pbmFsX1NjcmVlblNjcmVlbjsKKyAgbWFpbi0+YmFzZS5wcmV2aW91c1ZpcnR1YWxUZXJtaW5hbCA9IHByZXZpb3VzVmlydHVhbFRlcm1pbmFsX1NjcmVlblNjcmVlbjsKKyAgbWFpbi0+Y29uc3RydWN0ID0gY29uc3RydWN0X1NjcmVlblNjcmVlbjsKKyAgbWFpbi0+ZGVzdHJ1Y3QgPSBkZXN0cnVjdF9TY3JlZW5TY3JlZW47CisgIG1haW4tPnVzZXJWaXJ0dWFsVGVybWluYWwgPSB1c2VyVmlydHVhbFRlcm1pbmFsX1NjcmVlblNjcmVlbjsKK30KZGlmZiAtLWdpdCBhL0RyaXZlcnMvU2NyZWVuL1NjcmVlbi9zY3JlZW4uaCBiL0RyaXZlcnMvU2NyZWVuL1NjcmVlbi9zY3JlZW4uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YjU5NzFmCi0tLSAvZGV2L251bGwKKysrIGIvRHJpdmVycy9TY3JlZW4vU2NyZWVuL3NjcmVlbi5oCkBAIC0wLDAgKzEsMzAgQEAKKy8qCisgKiBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorICogICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorICoKKyAqIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorICoKKyAqIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyAqLworCisjaWZuZGVmIEJSTFRUWV9JTkNMVURFRF9TQ1JfU0hNCisjZGVmaW5lIEJSTFRUWV9JTkNMVURFRF9TQ1JfU0hNCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYgLyogX19jcGx1c3BsdXMgKi8KKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYgLyogX19jcGx1c3BsdXMgKi8KKworI2VuZGlmIC8qIEJSTFRUWV9JTkNMVURFRF9TQ1JfU0hNICovCmRpZmYgLS1naXQgYS9Ecml2ZXJzL1NjcmVlbi9Ta2VsZXRvbi9NYWtlZmlsZS5pbiBiL0RyaXZlcnMvU2NyZWVuL1NrZWxldG9uL01ha2VmaWxlLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUxNTA0MzgKLS0tIC9kZXYvbnVsbAorKysgYi9Ecml2ZXJzL1NjcmVlbi9Ta2VsZXRvbi9NYWtlZmlsZS5pbgpAQCAtMCwwICsxLDI4IEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisjICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorIworIyBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisjCisjIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisjCisjIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyMgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorIyBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyMKKyMgV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworIworIyBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworRFJJVkVSX0NPREUgPSB4eAorRFJJVkVSX05BTUUgPSBEaXJlY3RvcnlOYW1lCitEUklWRVJfVVNBR0UgPSBiYXNpYyBleGFtcGxlCitEUklWRVJfVkVSU0lPTiA9IAorRFJJVkVSX0RFVkVMT1BFUlMgPSAKK2luY2x1ZGUgJChTUkNfVE9QKXNjcmVlbi5taworCitzY3JlZW4uJE86CisJJChDQykgJChTQ1JfQ0ZMQUdTKSAtYyAkKFNSQ19ESVIpL3NjcmVlbi5jCisKZGlmZiAtLWdpdCBhL0RyaXZlcnMvU2NyZWVuL1NrZWxldG9uL3NjcmVlbi5jIGIvRHJpdmVycy9TY3JlZW4vU2tlbGV0b24vc2NyZWVuLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDgxMGQ4MgotLS0gL2Rldi9udWxsCisrKyBiL0RyaXZlcnMvU2NyZWVuL1NrZWxldG9uL3NjcmVlbi5jCkBAIC0wLDAgKzEsMjggQEAKKy8qCisgKiBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorICogICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorICoKKyAqIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorICoKKyAqIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyAqLworCisjaW5jbHVkZSAicHJvbG9ndWUuaCIKKworI2luY2x1ZGUgPHN0ZGlvLmg+CisKKyNpbmNsdWRlICJzY3JfZHJpdmVyLmgiCisKK3N0YXRpYyB2b2lkCitzY3JfaW5pdGlhbGl6ZSAoTWFpblNjcmVlbiAqbWFpbikgeworICBpbml0aWFsaXplUmVhbFNjcmVlbihtYWluKTsKK30KZGlmZiAtLWdpdCBhL0RyaXZlcnMvU2NyZWVuL1Rlcm1pbmFsRW11bGF0b3IvTWFrZWZpbGUuaW4gYi9Ecml2ZXJzL1NjcmVlbi9UZXJtaW5hbEVtdWxhdG9yL01ha2VmaWxlLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI4MTdkMjgKLS0tIC9kZXYvbnVsbAorKysgYi9Ecml2ZXJzL1NjcmVlbi9UZXJtaW5hbEVtdWxhdG9yL01ha2VmaWxlLmluCkBAIC0wLDAgKzEsMzYgQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyMgICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisjCisjIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyMKKyMgQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitEUklWRVJfQ09ERSA9IGVtCitEUklWRVJfTkFNRSA9IFRlcm1pbmFsRW11bGF0b3IKK0RSSVZFUl9VU0FHRSA9IHRlcm1pbmFsIGVtdWxhdG9yIHdpdGggc2hhcmVkIG1lbW9yeSBzZWdtZW50CitEUklWRVJfVkVSU0lPTiA9IAorRFJJVkVSX0RFVkVMT1BFUlMgPSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+CitpbmNsdWRlICQoU1JDX1RPUClzY3JlZW4ubWsKKworT0JKRUNUX0ZJTEVTID0gZW1fc2NyZWVuLiRPIHNjcl90ZXJtaW5hbC4kTyBtc2dfcXVldWUuJE8KKworc2NyZWVuLiRPOiAkKE9CSkVDVF9GSUxFUykKKwkkKE1LUkVMKSAkQCAkKE9CSkVDVF9GSUxFUykKKworZW1fc2NyZWVuLiRPOgorCSQoQ0MpICQoU0NSX0NGTEFHUykgLWMgJChTUkNfRElSKS9lbV9zY3JlZW4uYworCislLiRPOiAkKFNSQ19UT1ApJChQR01fRElSKS8lLmMgJChTUkNfVE9QKSQoSERSX0RJUikvJS5oCisJJChDQykgJChTQ1JfQ0ZMQUdTKSAtYyAkPAorCmRpZmYgLS1naXQgYS9Ecml2ZXJzL1NjcmVlbi9UZXJtaW5hbEVtdWxhdG9yL2VtX3NjcmVlbi5jIGIvRHJpdmVycy9TY3JlZW4vVGVybWluYWxFbXVsYXRvci9lbV9zY3JlZW4uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNDQyOWFhCi0tLSAvZGV2L251bGwKKysrIGIvRHJpdmVycy9TY3JlZW4vVGVybWluYWxFbXVsYXRvci9lbV9zY3JlZW4uYwpAQCAtMCwwICsxLDU0NSBAQAorLyoKKyAqIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisgKiAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisgKgorICogQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKKyNpbmNsdWRlICJwcm9sb2d1ZS5oIgorCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworI2luY2x1ZGUgImxvZy5oIgorI2luY2x1ZGUgInNjcl90ZXJtaW5hbC5oIgorI2luY2x1ZGUgIm1zZ19xdWV1ZS5oIgorI2luY2x1ZGUgInV0ZjguaCIKKyNpbmNsdWRlICJob3N0Y21kLmgiCisjaW5jbHVkZSAicGFyc2UuaCIKKyNpbmNsdWRlICJmaWxlLmgiCisjaW5jbHVkZSAicHJvZ3JhbS5oIgorI2luY2x1ZGUgImFzeW5jX2hhbmRsZS5oIgorI2luY2x1ZGUgImFzeW5jX2lvLmgiCisjaW5jbHVkZSAiZW1iZWQuaCIKKwordHlwZWRlZiBlbnVtIHsKKyAgUEFSTV9ESVJFQ1RPUlksCisgIFBBUk1fRU1VTEFUT1IsCisgIFBBUk1fR1JPVVAsCisgIFBBUk1fSE9NRSwKKyAgUEFSTV9QQVRILAorICBQQVJNX1NIRUxMLAorICBQQVJNX1VTRVIsCit9IFNjcmVlblBhcmFtZXRlcnM7CisKKyNkZWZpbmUgU0NSUEFSTVMgImRpcmVjdG9yeSIsICJlbXVsYXRvciIsICJncm91cCIsICJob21lIiwgInBhdGgiLCAic2hlbGwiLCAidXNlciIKKyNpbmNsdWRlICJzY3JfZHJpdmVyLmgiCisKK3N0YXRpYyBjaGFyICpkaXJlY3RvcnlQYXJhbWV0ZXIgPSBOVUxMOworc3RhdGljIGNoYXIgKmVtdWxhdG9yUGFyYW1ldGVyID0gTlVMTDsKK3N0YXRpYyBjaGFyICpncm91cFBhcmFtZXRlciA9IE5VTEw7CitzdGF0aWMgY2hhciAqaG9tZVBhcmFtZXRlciA9IE5VTEw7CitzdGF0aWMgY2hhciAqcGF0aFBhcmFtZXRlciA9IE5VTEw7CitzdGF0aWMgY2hhciAqc2hlbGxQYXJhbWV0ZXIgPSBOVUxMOworc3RhdGljIGNoYXIgKnVzZXJQYXJhbWV0ZXIgPSBOVUxMOworCitzdGF0aWMgdm9pZAorc2V0UGFyYW1ldGVyIChjaGFyICoqdmFyaWFibGUsIGNoYXIgKipwYXJhbWV0ZXJzLCBTY3JlZW5QYXJhbWV0ZXJzIHBhcmFtZXRlcikgeworICBjaGFyICp2YWx1ZSA9IHBhcmFtZXRlcnNbcGFyYW1ldGVyXTsKKyAgaWYgKHZhbHVlICYmICEqdmFsdWUpIHZhbHVlID0gTlVMTDsKKyAgKnZhcmlhYmxlID0gdmFsdWU7Cit9CisKK3N0YXRpYyBpbnQKK3Byb2Nlc3NQYXJhbWV0ZXJzX1Rlcm1pbmFsRW11bGF0b3JTY3JlZW4gKGNoYXIgKipwYXJhbWV0ZXJzKSB7CisgIHNldFBhcmFtZXRlcigmZGlyZWN0b3J5UGFyYW1ldGVyLCBwYXJhbWV0ZXJzLCBQQVJNX0RJUkVDVE9SWSk7CisgIHNldFBhcmFtZXRlcigmZW11bGF0b3JQYXJhbWV0ZXIsIHBhcmFtZXRlcnMsIFBBUk1fRU1VTEFUT1IpOworICBzZXRQYXJhbWV0ZXIoJmdyb3VwUGFyYW1ldGVyLCBwYXJhbWV0ZXJzLCBQQVJNX0dST1VQKTsKKyAgc2V0UGFyYW1ldGVyKCZob21lUGFyYW1ldGVyLCBwYXJhbWV0ZXJzLCBQQVJNX0hPTUUpOworICBzZXRQYXJhbWV0ZXIoJnBhdGhQYXJhbWV0ZXIsIHBhcmFtZXRlcnMsIFBBUk1fUEFUSCk7CisgIHNldFBhcmFtZXRlcigmc2hlbGxQYXJhbWV0ZXIsIHBhcmFtZXRlcnMsIFBBUk1fU0hFTEwpOworICBzZXRQYXJhbWV0ZXIoJnVzZXJQYXJhbWV0ZXIsIHBhcmFtZXRlcnMsIFBBUk1fVVNFUik7CisgIHJldHVybiAxOworfQorCitzdGF0aWMgdm9pZAoraGFuZGxlRXhjZXB0aW9uIChjb25zdCBjaGFyICpjYXVzZSkgeworICBsb2dNZXNzYWdlKExPR19DQVRFR09SWShTQ1JFRU5fRFJJVkVSKSwgInN0b3BwaW5nOiAlcyIsIGNhdXNlKTsKKyAgYnJsdHR5SW50ZXJydXB0KFdBSVRfU1RPUCk7Cit9CisKK3N0YXRpYyBBc3luY0hhbmRsZSBlbXVsYXRvck1vbml0b3JIYW5kbGUgPSBOVUxMOworc3RhdGljIEZJTEUgKmVtdWxhdG9yU3RyZWFtID0gTlVMTDsKK3N0YXRpYyBjaGFyICplbXVsYXRvclN0cmVhbUJ1ZmZlciA9IE5VTEw7CitzdGF0aWMgc2l6ZV90IGVtdWxhdG9yU3RyZWFtQnVmZmVyU2l6ZSA9IDA7CisKK3N0YXRpYyBjb25zdCBjaGFyICpwcm9ibGVtVGV4dCA9IE5VTEw7CitzdGF0aWMgU2NyZWVuU2VnbWVudEhlYWRlciAqc2NyZWVuU2VnbWVudCA9IE5VTEw7CitzdGF0aWMgU2NyZWVuU2VnbWVudEhlYWRlciAqY2FjaGVkU2VnbWVudCA9IE5VTEw7CisKK3N0YXRpYyBpbnQgaGF2ZVRlcm1pbmFsTWVzc2FnZVF1ZXVlID0gMDsKK3N0YXRpYyBpbnQgdGVybWluYWxNZXNzYWdlUXVldWU7CitzdGF0aWMgaW50IGhhdmVTZWdtZW50VXBkYXRlZEhhbmRsZXIgPSAwOworc3RhdGljIGludCBoYXZlRW11bGF0b3JFeGl0aW5nSGFuZGxlciA9IDA7CisKK3N0YXRpYyBpbnQKK3NlbmRUZXJtaW5hbE1lc3NhZ2UgKE1lc3NhZ2VUeXBlIHR5cGUsIGNvbnN0IHZvaWQgKmNvbnRlbnQsIHNpemVfdCBsZW5ndGgpIHsKKyAgaWYgKCFoYXZlVGVybWluYWxNZXNzYWdlUXVldWUpIHJldHVybiAwOworICByZXR1cm4gc2VuZE1lc3NhZ2UodGVybWluYWxNZXNzYWdlUXVldWUsIHR5cGUsIGNvbnRlbnQsIGxlbmd0aCwgMCk7Cit9CisKK3N0YXRpYyB2b2lkCittZXNzYWdlSGFuZGxlcl9zZWdtZW50VXBkYXRlZCAoY29uc3QgTWVzc2FnZUhhbmRsZXJQYXJhbWV0ZXJzICpwYXJhbWV0ZXJzKSB7CisgIG1haW5TY3JlZW5VcGRhdGVkKCk7Cit9CisKK3N0YXRpYyB2b2lkCittZXNzYWdlSGFuZGxlcl9lbXVsYXRvckV4aXRpbmcgKGNvbnN0IE1lc3NhZ2VIYW5kbGVyUGFyYW1ldGVycyAqcGFyYW1ldGVycykgeworICBoYW5kbGVFeGNlcHRpb24oImVtdWxhdG9yIGV4aXRpbmciKTsKK30KKworc3RhdGljIHZvaWQKK2VuYWJsZU1lc3NhZ2VzIChrZXlfdCBrZXkpIHsKKyAgaGF2ZVRlcm1pbmFsTWVzc2FnZVF1ZXVlID0gZ2V0TWVzc2FnZVF1ZXVlKCZ0ZXJtaW5hbE1lc3NhZ2VRdWV1ZSwga2V5KTsKKworICBpZiAoaGF2ZVRlcm1pbmFsTWVzc2FnZVF1ZXVlKSB7CisgICAgaGF2ZVNlZ21lbnRVcGRhdGVkSGFuZGxlciA9IHN0YXJ0TWVzc2FnZVJlY2VpdmVyKAorICAgICAgInNjcmVlbi1zZWdtZW50LXVwZGF0ZWQtcmVjZWl2ZXIiLAorICAgICAgdGVybWluYWxNZXNzYWdlUXVldWUsIFRFUk1fTVNHX1NFR01FTlRfVVBEQVRFRCwKKyAgICAgIDAsIG1lc3NhZ2VIYW5kbGVyX3NlZ21lbnRVcGRhdGVkLCBOVUxMCisgICAgKTsKKworICAgIGhhdmVFbXVsYXRvckV4aXRpbmdIYW5kbGVyID0gc3RhcnRNZXNzYWdlUmVjZWl2ZXIoCisgICAgICAidGVybWluYWwtZW11bGF0b3ItZXhpdGluZy1yZWNlaXZlciIsCisgICAgICB0ZXJtaW5hbE1lc3NhZ2VRdWV1ZSwgVEVSTV9NU0dfRU1VTEFUT1JfRVhJVElORywKKyAgICAgIDAsIG1lc3NhZ2VIYW5kbGVyX2VtdWxhdG9yRXhpdGluZywgTlVMTAorICAgICk7CisgIH0KK30KKworc3RhdGljIGludAorYWNjZXNzU2VnbWVudEZvclBhdGggKGNvbnN0IGNoYXIgKnBhdGgpIHsKKyAga2V5X3Qga2V5OworCisgIGlmIChtYWtlVGVybWluYWxLZXkoJmtleSwgcGF0aCkpIHsKKyAgICBpZiAoKHNjcmVlblNlZ21lbnQgPSBnZXRTY3JlZW5TZWdtZW50Rm9yS2V5KGtleSkpKSB7CisgICAgICBwcm9ibGVtVGV4dCA9IGdldHRleHQoIm5vIHNjcmVlbiBjYWNoZSIpOworICAgICAgZW5hYmxlTWVzc2FnZXMoa2V5KTsKKyAgICAgIHJldHVybiAxOworICAgIH0gZWxzZSB7CisgICAgICBwcm9ibGVtVGV4dCA9IGdldHRleHQoInNjcmVlbiBub3QgYWNjZXNzaWJsZSIpOworICAgIH0KKyAgfQorCisgIHJldHVybiAwOworfQorCitzdGF0aWMgdm9pZAorZGVzdHJ1Y3RfVGVybWluYWxFbXVsYXRvclNjcmVlbiAodm9pZCkgeworICBicmx0dHlEaXNhYmxlSW50ZXJydXB0KCk7CisKKyAgaWYgKGVtdWxhdG9yTW9uaXRvckhhbmRsZSkgeworICAgIGFzeW5jQ2FuY2VsUmVxdWVzdChlbXVsYXRvck1vbml0b3JIYW5kbGUpOworICAgIGVtdWxhdG9yTW9uaXRvckhhbmRsZSA9IE5VTEw7CisgIH0KKworICBpZiAoZW11bGF0b3JTdHJlYW0pIHsKKyAgICBmY2xvc2UoZW11bGF0b3JTdHJlYW0pOworICAgIGVtdWxhdG9yU3RyZWFtID0gTlVMTDsKKyAgfQorCisgIGlmIChlbXVsYXRvclN0cmVhbUJ1ZmZlcikgeworICAgIGZyZWUoZW11bGF0b3JTdHJlYW1CdWZmZXIpOworICAgIGVtdWxhdG9yU3RyZWFtQnVmZmVyID0gTlVMTDsKKyAgfQorCisgIGlmIChzY3JlZW5TZWdtZW50KSB7CisgICAgZGV0YWNoU2NyZWVuU2VnbWVudChzY3JlZW5TZWdtZW50KTsKKyAgICBzY3JlZW5TZWdtZW50ID0gTlVMTDsKKyAgfQorCisgIGlmIChjYWNoZWRTZWdtZW50KSB7CisgICAgZnJlZShjYWNoZWRTZWdtZW50KTsKKyAgICBjYWNoZWRTZWdtZW50ID0gTlVMTDsKKyAgfQorfQorCitzdGF0aWMgdm9pZAorZHJpdmVyRGlyZWN0aXZlSGFuZGxlcl9wYXRoIChjb25zdCBjaGFyICpjb25zdCAqb3BlcmFuZHMpIHsKKyAgY29uc3QgY2hhciAqcGF0aCA9IG9wZXJhbmRzWzBdOworCisgIGlmIChwYXRoKSB7CisgICAgaWYgKCFzY3JlZW5TZWdtZW50KSB7CisgICAgICBhY2Nlc3NTZWdtZW50Rm9yUGF0aChwYXRoKTsKKyAgICB9CisgIH0KK30KKwordHlwZWRlZiB2b2lkIERyaXZlckRpcmVjdGl2ZUhhbmRsZXIgKGNvbnN0IGNoYXIgKmNvbnN0ICpvcGVyYW5kcyk7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgY29uc3QgY2hhciAqbmFtZTsKKyAgRHJpdmVyRGlyZWN0aXZlSGFuZGxlciAqaGFuZGxlcjsKK30gRHJpdmVyRGlyZWN0aXZlRW50cnk7CisKKyNkZWZpbmUgRFJJVkVSX0RJUkVDVElWRV9FTlRSWShkaXJlY3RpdmUpIHsgXAorICAubmFtZSA9ICNkaXJlY3RpdmUsIFwKKyAgLmhhbmRsZXIgPSBkcml2ZXJEaXJlY3RpdmVIYW5kbGVyXyAjIyBkaXJlY3RpdmUsIFwKK30KKworc3RhdGljIGNvbnN0IERyaXZlckRpcmVjdGl2ZUVudHJ5IGRyaXZlckRpcmVjdGl2ZVRhYmxlW10gPSB7CisgIERSSVZFUl9ESVJFQ1RJVkVfRU5UUlkocGF0aCksCit9OworCitzdGF0aWMgaW50CitoYW5kbGVEcml2ZXJEaXJlY3RpdmUgKGNvbnN0IGNoYXIgKmxpbmUpIHsKKyAgY2hhciBidWZmZXJbc3RybGVuKGxpbmUpICsgMV07CisgIHN0cmNweShidWZmZXIsIGxpbmUpOworCisgIGNvbnN0IGNoYXIgKm9wZXJhbmRUYWJsZVs5XTsKKyAgdW5zaWduZWQgaW50IG9wZXJhbmRDb3VudCA9IDA7CisKKyAgeworICAgIGNoYXIgKnN0cmluZyA9IGJ1ZmZlcjsKKworICAgIHdoaWxlIChvcGVyYW5kQ291bnQgPCAoQVJSQVlfQ09VTlQob3BlcmFuZFRhYmxlKSAtIDEpKSB7CisgICAgICBzdGF0aWMgY29uc3QgY2hhciBkZWxpbWl0ZXJzW10gPSAiICI7CisgICAgICBjaGFyICpuZXh0ID0gc3RydG9rKHN0cmluZywgZGVsaW1pdGVycyk7CisgICAgICBpZiAoIW5leHQpIGJyZWFrOworCisgICAgICBvcGVyYW5kVGFibGVbb3BlcmFuZENvdW50KytdID0gbmV4dDsKKyAgICAgIHN0cmluZyA9IE5VTEw7CisgICAgfQorCisgICAgb3BlcmFuZFRhYmxlW29wZXJhbmRDb3VudF0gPSBOVUxMOworICB9CisKKyAgaWYgKG9wZXJhbmRDb3VudCA+IDApIHsKKyAgICBjb25zdCBjaGFyICoqb3BlcmFuZHMgPSBvcGVyYW5kVGFibGU7CisgICAgY29uc3QgY2hhciAqbmFtZSA9ICpvcGVyYW5kcysrOworCisgICAgY29uc3QgRHJpdmVyRGlyZWN0aXZlRW50cnkgKmVudHJ5ID0gZHJpdmVyRGlyZWN0aXZlVGFibGU7CisgICAgY29uc3QgRHJpdmVyRGlyZWN0aXZlRW50cnkgKmVuZCA9IGVudHJ5ICsgQVJSQVlfQ09VTlQoZHJpdmVyRGlyZWN0aXZlVGFibGUpOworCisgICAgd2hpbGUgKGVudHJ5IDwgZW5kKSB7CisgICAgICBpZiAoc3RyY2FzZWNtcChuYW1lLCBlbnRyeS0+bmFtZSkgPT0gMCkgeworICAgICAgICBlbnRyeS0+aGFuZGxlcihvcGVyYW5kcyk7CisgICAgICAgIHJldHVybiAxOworICAgICAgfQorCisgICAgICBlbnRyeSArPSAxOworICAgIH0KKyAgfQorCisgIHJldHVybiAwOworfQorCitBU1lOQ19NT05JVE9SX0NBTExCQUNLKGVtRW11bGF0b3JNb25pdG9yKSB7CisgIGNvbnN0IGNoYXIgKmxpbmU7CisKKyAgeworICAgIGludCBvayA9IHJlYWRMaW5lKAorICAgICAgZW11bGF0b3JTdHJlYW0sICZlbXVsYXRvclN0cmVhbUJ1ZmZlciwKKyAgICAgICZlbXVsYXRvclN0cmVhbUJ1ZmZlclNpemUsIE5VTEwKKyAgICApOworCisgICAgaWYgKCFvaykgeworICAgICAgY29uc3QgY2hhciAqY2F1c2UgPQorICAgICAgICBmZXJyb3IoZW11bGF0b3JTdHJlYW0pPyAiZW11bGF0b3Igc3RyZWFtIGVycm9yIjoKKyAgICAgICAgZmVvZihlbXVsYXRvclN0cmVhbSk/ICJlbmQgb2YgZW11bGF0b3Igc3RyZWFtIjoKKyAgICAgICAgImVtdWxhdG9yIG1vbml0b3IgZmFpbHVyZSI7CisKKyAgICAgIGhhbmRsZUV4Y2VwdGlvbihjYXVzZSk7CisgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBsaW5lID0gZW11bGF0b3JTdHJlYW1CdWZmZXI7CisgIH0KKworICBpZiAoIWhhbmRsZURyaXZlckRpcmVjdGl2ZShsaW5lKSkgeworICAgIGxvZ01lc3NhZ2UoTE9HX05PVElDRSwgIiVzIiwgbGluZSk7CisgIH0KKworICByZXR1cm4gMTsKK30KKworc3RhdGljIGNoYXIgKgorbWFrZURlZmF1bHRFbXVsYXRvclBhdGggKHZvaWQpIHsKKyAgdHlwZWRlZiBjaGFyICpQYXRoTWFrZXIgKGNvbnN0IGNoYXIgKm5hbWUpOworCisgIHN0YXRpYyBQYXRoTWFrZXIgKnBhdGhNYWtlcnNbXSA9IHsKKyAgICBtYWtlUHJvZ3JhbVBhdGgsCisgICAgbWFrZUNvbW1hbmRQYXRoLAorICB9OworCisgIFBhdGhNYWtlciAqKnBhdGhNYWtlciA9IHBhdGhNYWtlcnM7CisgIFBhdGhNYWtlciAqKmVuZCA9IHBhdGhNYWtlciArIEFSUkFZX0NPVU5UKHBhdGhNYWtlcnMpOworCisgIHdoaWxlIChwYXRoTWFrZXIgPCBlbmQpIHsKKyAgICBjaGFyICpwYXRoID0gKCpwYXRoTWFrZXIpKCJicmx0dHktcHR5Iik7CisKKyAgICBpZiAocGF0aCkgeworICAgICAgaWYgKHRlc3RQcm9ncmFtUGF0aChwYXRoKSkgeworICAgICAgICBsb2dNZXNzYWdlKExPR19DQVRFR09SWShTQ1JFRU5fRFJJVkVSKSwKKyAgICAgICAgICAiZGVmYXVsdCB0ZXJtaW5hbCBlbXVsYXRvcjogJXMiLCBwYXRoCisgICAgICAgICk7CisKKyAgICAgICAgcmV0dXJuIHBhdGg7CisgICAgICB9CisKKyAgICAgIGZyZWUocGF0aCk7CisgICAgfQorCisgICAgcGF0aE1ha2VyICs9IDE7CisgIH0KKworICBsb2dNZXNzYWdlKExPR19XQVJOSU5HLCAiZGVmYXVsdCB0ZXJtaW5hbCBlbXVsYXRvciBub3QgZm91bmQiKTsKKyAgcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBpbnQKK3N0YXJ0RW11bGF0b3IgKHZvaWQpIHsKKyAgY2hhciAqZW11bGF0b3IgPSBlbXVsYXRvclBhcmFtZXRlcjsKKworICBpZiAoIWVtdWxhdG9yKSB7CisgICAgaWYgKCEoZW11bGF0b3IgPSBtYWtlRGVmYXVsdEVtdWxhdG9yUGF0aCgpKSkgeworICAgICAgcmV0dXJuIDA7CisgICAgfQorICB9CisKKyAgbG9nTWVzc2FnZShMT0dfQ0FURUdPUlkoU0NSRUVOX0RSSVZFUiksCisgICAgInRlcm1pbmFsIGVtdWxhdG9yIGNvbW1hbmQ6ICVzIiwgZW11bGF0b3IKKyAgKTsKKworICBjb25zdCBjaGFyICphcmd1bWVudHNbMTNdOworICB1bnNpZ25lZCBpbnQgYXJndW1lbnRDb3VudCA9IDA7CisKKyAgYXJndW1lbnRzW2FyZ3VtZW50Q291bnQrK10gPSBlbXVsYXRvcjsKKyAgYXJndW1lbnRzW2FyZ3VtZW50Q291bnQrK10gPSAiLS1kcml2ZXItZGlyZWN0aXZlcyI7CisKKyAgaWYgKHVzZXJQYXJhbWV0ZXIpIHsKKyAgICBhcmd1bWVudHNbYXJndW1lbnRDb3VudCsrXSA9ICItLXVzZXIiOworICAgIGFyZ3VtZW50c1thcmd1bWVudENvdW50KytdID0gdXNlclBhcmFtZXRlcjsKKyAgfQorCisgIGlmIChncm91cFBhcmFtZXRlcikgeworICAgIGFyZ3VtZW50c1thcmd1bWVudENvdW50KytdID0gIi0tZ3JvdXAiOworICAgIGFyZ3VtZW50c1thcmd1bWVudENvdW50KytdID0gZ3JvdXBQYXJhbWV0ZXI7CisgIH0KKworICBpZiAoZGlyZWN0b3J5UGFyYW1ldGVyKSB7CisgICAgYXJndW1lbnRzW2FyZ3VtZW50Q291bnQrK10gPSAiLS13b3JraW5nLWRpcmVjdG9yeSI7CisgICAgYXJndW1lbnRzW2FyZ3VtZW50Q291bnQrK10gPSBkaXJlY3RvcnlQYXJhbWV0ZXI7CisgIH0KKworICBpZiAoaG9tZVBhcmFtZXRlcikgeworICAgIGFyZ3VtZW50c1thcmd1bWVudENvdW50KytdID0gIi0taG9tZS1kaXJlY3RvcnkiOworICAgIGFyZ3VtZW50c1thcmd1bWVudENvdW50KytdID0gaG9tZVBhcmFtZXRlcjsKKyAgfQorCisgIGFyZ3VtZW50c1thcmd1bWVudENvdW50KytdID0gIi0tIjsKKyAgaWYgKHNoZWxsUGFyYW1ldGVyKSBhcmd1bWVudHNbYXJndW1lbnRDb3VudCsrXSA9IHNoZWxsUGFyYW1ldGVyOworICBhcmd1bWVudHNbYXJndW1lbnRDb3VudCsrXSA9IE5VTEw7CisKKyAgSG9zdENvbW1hbmRPcHRpb25zIG9wdGlvbnM7CisgIGluaXRpYWxpemVIb3N0Q29tbWFuZE9wdGlvbnMoJm9wdGlvbnMpOworICBvcHRpb25zLmFzeW5jaHJvbm91cyA9IDE7CisgIG9wdGlvbnMuc3RhbmRhcmRFcnJvciA9ICZlbXVsYXRvclN0cmVhbTsKKworICBpbnQgZXhpdFN0YXR1cyA9IHJ1bkhvc3RDb21tYW5kKGFyZ3VtZW50cywgJm9wdGlvbnMpOworICBpZiAoZW11bGF0b3IgIT0gZW11bGF0b3JQYXJhbWV0ZXIpIGZyZWUoZW11bGF0b3IpOworICBlbXVsYXRvciA9IE5VTEw7CisKKyAgaWYgKCFleGl0U3RhdHVzKSB7CisgICAgZGV0YWNoU3RhbmRhcmRTdHJlYW1zKCk7CisKKyAgICBpZiAoYXN5bmNNb25pdG9yRmlsZUlucHV0KCZlbXVsYXRvck1vbml0b3JIYW5kbGUsIGZpbGVubyhlbXVsYXRvclN0cmVhbSksIGVtRW11bGF0b3JNb25pdG9yLCBOVUxMKSkgeworICAgICAgcmV0dXJuIDE7CisgICAgfQorICB9CisKKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK2NvbnN0cnVjdF9UZXJtaW5hbEVtdWxhdG9yU2NyZWVuICh2b2lkKSB7CisgIGJybHR0eUVuYWJsZUludGVycnVwdCgpOworCisgIGVtdWxhdG9yTW9uaXRvckhhbmRsZSA9IE5VTEw7CisgIGVtdWxhdG9yU3RyZWFtID0gTlVMTDsKKyAgZW11bGF0b3JTdHJlYW1CdWZmZXIgPSBOVUxMOworICBlbXVsYXRvclN0cmVhbUJ1ZmZlclNpemUgPSAwOworCisgIHByb2JsZW1UZXh0ID0gZ2V0dGV4dCgic2NyZWVuIG5vdCBhdmFpbGFibGUiKTsKKyAgc2NyZWVuU2VnbWVudCA9IE5VTEw7CisgIGNhY2hlZFNlZ21lbnQgPSBOVUxMOworCisgIGhhdmVUZXJtaW5hbE1lc3NhZ2VRdWV1ZSA9IDA7CisgIGhhdmVTZWdtZW50VXBkYXRlZEhhbmRsZXIgPSAwOworICBoYXZlRW11bGF0b3JFeGl0aW5nSGFuZGxlciA9IDA7CisKKyAgaWYgKHBhdGhQYXJhbWV0ZXIpIHsKKyAgICBpZiAoYWNjZXNzU2VnbWVudEZvclBhdGgocGF0aFBhcmFtZXRlcikpIHJldHVybiAxOworICB9IGVsc2UgaWYgKHN0YXJ0RW11bGF0b3IoKSkgeworICAgIHByb2JsZW1UZXh0ID0gZ2V0dGV4dCgic2NyZWVuIG5vdCBhdHRhY2hlZCIpOworICAgIHJldHVybiAxOworICB9IGVsc2UgeworICAgIHByb2JsZW1UZXh0ID0gZ2V0dGV4dCgibm8gc2NyZWVuIGVtdWxhdG9yIik7CisgIH0KKworICBoYW5kbGVFeGNlcHRpb24oImRyaXZlciBjb25zdHJ1Y3Rpb24gZmFpbHVyZSIpOworLy9kZXN0cnVjdF9UZXJtaW5hbEVtdWxhdG9yU2NyZWVuKCk7CisgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50Citwb2xsX1Rlcm1pbmFsRW11bGF0b3JTY3JlZW4gKHZvaWQpIHsKKyAgcmV0dXJuICFoYXZlU2VnbWVudFVwZGF0ZWRIYW5kbGVyOworfQorCitzdGF0aWMgaW50CityZWZyZXNoX1Rlcm1pbmFsRW11bGF0b3JTY3JlZW4gKHZvaWQpIHsKKyAgaWYgKCFzY3JlZW5TZWdtZW50KSByZXR1cm4gMDsKKyAgc2l6ZV90IHNpemUgPSBzY3JlZW5TZWdtZW50LT5zZWdtZW50U2l6ZTsKKworICBpZiAoY2FjaGVkU2VnbWVudCkgeworICAgIGlmIChjYWNoZWRTZWdtZW50LT5zZWdtZW50U2l6ZSAhPSBzaXplKSB7CisgICAgICBsb2dNZXNzYWdlKExPR19DQVRFR09SWShTQ1JFRU5fRFJJVkVSKSwgImRlYWxsb2NhdGluZyBvbGQgc2NyZWVuIGNhY2hlIik7CisgICAgICBmcmVlKGNhY2hlZFNlZ21lbnQpOworICAgICAgY2FjaGVkU2VnbWVudCA9IE5VTEw7CisgICAgfQorICB9CisKKyAgaWYgKCFjYWNoZWRTZWdtZW50KSB7CisgICAgbG9nTWVzc2FnZShMT0dfQ0FURUdPUlkoU0NSRUVOX0RSSVZFUiksICJhbGxvY2F0aW5nIG5ldyBzY3JlZW4gY2FjaGUiKTsKKworICAgIGlmICghKGNhY2hlZFNlZ21lbnQgPSBtYWxsb2Moc2l6ZSkpKSB7CisgICAgICBsb2dNYWxsb2NFcnJvcigpOworICAgICAgcmV0dXJuIDA7CisgICAgfQorICB9CisKKyAgbWVtY3B5KGNhY2hlZFNlZ21lbnQsIHNjcmVlblNlZ21lbnQsIHNpemUpOworICByZXR1cm4gMTsKK30KKworc3RhdGljIFNjcmVlblNlZ21lbnRIZWFkZXIgKgorZ2V0U2VnbWVudCAodm9pZCkgeworICBTY3JlZW5TZWdtZW50SGVhZGVyICpzZWdtZW50ID0gY2FjaGVkU2VnbWVudDsKKyAgaWYgKCFzZWdtZW50KSBzZWdtZW50ID0gc2NyZWVuU2VnbWVudDsKKyAgcmV0dXJuIHNlZ21lbnQ7Cit9CisKK3N0YXRpYyBpbnQKK2N1cnJlbnRWaXJ0dWFsVGVybWluYWxfVGVybWluYWxFbXVsYXRvclNjcmVlbiAodm9pZCkgeworICBTY3JlZW5TZWdtZW50SGVhZGVyICpzZWdtZW50ID0gZ2V0U2VnbWVudCgpOworICByZXR1cm4gc2VnbWVudD8gc2VnbWVudC0+c2NyZWVuTnVtYmVyOiAwOworfQorCitzdGF0aWMgdm9pZAorZGVzY3JpYmVfVGVybWluYWxFbXVsYXRvclNjcmVlbiAoU2NyZWVuRGVzY3JpcHRpb24gKmRlc2NyaXB0aW9uKSB7CisgIFNjcmVlblNlZ21lbnRIZWFkZXIgKnNlZ21lbnQgPSBnZXRTZWdtZW50KCk7CisKKyAgaWYgKCFzZWdtZW50KSB7CisgICAgZGVzY3JpcHRpb24tPnVucmVhZGFibGUgPSBwcm9ibGVtVGV4dDsKKyAgICBkZXNjcmlwdGlvbi0+Y29scyA9IHN0cmxlbihkZXNjcmlwdGlvbi0+dW5yZWFkYWJsZSk7CisgICAgZGVzY3JpcHRpb24tPnJvd3MgPSAxOworICAgIGRlc2NyaXB0aW9uLT5wb3N4ID0gMDsKKyAgICBkZXNjcmlwdGlvbi0+cG9zeSA9IDA7CisgIH0gZWxzZSB7CisgICAgZGVzY3JpcHRpb24tPm51bWJlciA9IGN1cnJlbnRWaXJ0dWFsVGVybWluYWxfVGVybWluYWxFbXVsYXRvclNjcmVlbigpOworICAgIGRlc2NyaXB0aW9uLT5yb3dzID0gc2VnbWVudC0+c2NyZWVuSGVpZ2h0OworICAgIGRlc2NyaXB0aW9uLT5jb2xzID0gc2VnbWVudC0+c2NyZWVuV2lkdGg7CisgICAgZGVzY3JpcHRpb24tPnBvc3kgPSBzZWdtZW50LT5jdXJzb3JSb3c7CisgICAgZGVzY3JpcHRpb24tPnBvc3ggPSBzZWdtZW50LT5jdXJzb3JDb2x1bW47CisgIH0KK30KKworc3RhdGljIHZvaWQKK3NldFNjcmVlbkF0dHJpYnV0ZSAoU2NyZWVuQXR0cmlidXRlcyAqYXR0cmlidXRlcywgU2NyZWVuQXR0cmlidXRlcyBhdHRyaWJ1dGUsIHVuc2lnbmVkIGNoYXIgbGV2ZWwsIGludCBicmlnaHQpIHsKKyAgaWYgKGxldmVsID49IDBYMjApIHsKKyAgICAqYXR0cmlidXRlcyB8PSBhdHRyaWJ1dGU7CisgICAgaWYgKGJyaWdodCAmJiAobGV2ZWwgPj0gMFhEMCkpICphdHRyaWJ1dGVzIHw9IFNDUl9BVFRSX0ZHX0JSSUdIVDsKKyAgfQorfQorCitzdGF0aWMgaW50CityZWFkQ2hhcmFjdGVyc19UZXJtaW5hbEVtdWxhdG9yU2NyZWVuIChjb25zdCBTY3JlZW5Cb3ggKmJveCwgU2NyZWVuQ2hhcmFjdGVyICpidWZmZXIpIHsKKyAgU2NyZWVuU2VnbWVudEhlYWRlciAqc2VnbWVudCA9IGdldFNlZ21lbnQoKTsKKworICBpZiAoIXNlZ21lbnQpIHsKKyAgICBzZXRTY3JlZW5NZXNzYWdlKGJveCwgYnVmZmVyLCBwcm9ibGVtVGV4dCk7CisgICAgcmV0dXJuIDE7CisgIH0KKworICBpZiAodmFsaWRhdGVTY3JlZW5Cb3goYm94LCBzZWdtZW50LT5zY3JlZW5XaWR0aCwgc2VnbWVudC0+c2NyZWVuSGVpZ2h0KSkgeworICAgIFNjcmVlbkNoYXJhY3RlciAqdGFyZ2V0ID0gYnVmZmVyOworCisgICAgZm9yICh1bnNpZ25lZCBpbnQgcm93PTA7IHJvdzxib3gtPmhlaWdodDsgcm93Kz0xKSB7CisgICAgICBjb25zdCBTY3JlZW5TZWdtZW50Q2hhcmFjdGVyICpzb3VyY2UgPQorICAgICAgICBnZXRTY3JlZW5DaGFyYWN0ZXIoc2VnbWVudCwgYm94LT50b3AgKyByb3csIGJveC0+bGVmdCwgTlVMTCk7CisKKyAgICAgIGZvciAodW5zaWduZWQgaW50IGNvbHVtbj0wOyBjb2x1bW48Ym94LT53aWR0aDsgY29sdW1uKz0xKSB7CisgICAgICAgIHRhcmdldC0+dGV4dCA9IHNvdXJjZS0+dGV4dDsKKworICAgICAgICB7CisgICAgICAgICAgU2NyZWVuQXR0cmlidXRlcyAqYXR0cmlidXRlcyA9ICZ0YXJnZXQtPmF0dHJpYnV0ZXM7CisgICAgICAgICAgKmF0dHJpYnV0ZXMgPSAwOworICAgICAgICAgIGlmIChzb3VyY2UtPmJsaW5rKSAqYXR0cmlidXRlcyB8PSBTQ1JfQVRUUl9CTElOSzsKKworICAgICAgICAgIHNldFNjcmVlbkF0dHJpYnV0ZShhdHRyaWJ1dGVzLCBTQ1JfQVRUUl9GR19SRUQsICAgc291cmNlLT5mb3JlZ3JvdW5kLnJlZCwgICAxKTsKKyAgICAgICAgICBzZXRTY3JlZW5BdHRyaWJ1dGUoYXR0cmlidXRlcywgU0NSX0FUVFJfRkdfR1JFRU4sIHNvdXJjZS0+Zm9yZWdyb3VuZC5ncmVlbiwgMSk7CisgICAgICAgICAgc2V0U2NyZWVuQXR0cmlidXRlKGF0dHJpYnV0ZXMsIFNDUl9BVFRSX0ZHX0JMVUUsICBzb3VyY2UtPmZvcmVncm91bmQuYmx1ZSwgIDEpOworCisgICAgICAgICAgc2V0U2NyZWVuQXR0cmlidXRlKGF0dHJpYnV0ZXMsIFNDUl9BVFRSX0JHX1JFRCwgICBzb3VyY2UtPmJhY2tncm91bmQucmVkLCAgIDApOworICAgICAgICAgIHNldFNjcmVlbkF0dHJpYnV0ZShhdHRyaWJ1dGVzLCBTQ1JfQVRUUl9CR19HUkVFTiwgc291cmNlLT5iYWNrZ3JvdW5kLmdyZWVuLCAwKTsKKyAgICAgICAgICBzZXRTY3JlZW5BdHRyaWJ1dGUoYXR0cmlidXRlcywgU0NSX0FUVFJfQkdfQkxVRSwgIHNvdXJjZS0+YmFja2dyb3VuZC5ibHVlLCAgMCk7CisgICAgICAgIH0KKworICAgICAgICBzb3VyY2UgKz0gMTsKKyAgICAgICAgdGFyZ2V0ICs9IDE7CisgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIDE7CisgIH0KKworICByZXR1cm4gMDsKK30KKworc3RhdGljIGludAoraW5zZXJ0S2V5X1Rlcm1pbmFsRW11bGF0b3JTY3JlZW4gKFNjcmVlbktleSBrZXkpIHsKKyAgc2V0U2NyZWVuS2V5TW9kaWZpZXJzKCZrZXksIDApOworCisgIHdjaGFyX3QgY2hhcmFjdGVyID0ga2V5ICYgU0NSX0tFWV9DSEFSX01BU0s7CisgIFV0ZjhCdWZmZXIgdXRmODsKKyAgc2l6ZV90IGxlbmd0aCA9IGNvbnZlcnRXY2hhclRvVXRmOChjaGFyYWN0ZXIsIHV0ZjgpOworCisgIHJldHVybiBzZW5kVGVybWluYWxNZXNzYWdlKFRFUk1fTVNHX0lOUFVUX1RFWFQsIHV0ZjgsIGxlbmd0aCk7Cit9CisKK3N0YXRpYyB2b2lkCitzY3JfaW5pdGlhbGl6ZSAoTWFpblNjcmVlbiAqbWFpbikgeworICBpbml0aWFsaXplUmVhbFNjcmVlbihtYWluKTsKKyAgbWFpbi0+YmFzZS5jdXJyZW50VmlydHVhbFRlcm1pbmFsID0gY3VycmVudFZpcnR1YWxUZXJtaW5hbF9UZXJtaW5hbEVtdWxhdG9yU2NyZWVuOworICBtYWluLT5iYXNlLmRlc2NyaWJlID0gZGVzY3JpYmVfVGVybWluYWxFbXVsYXRvclNjcmVlbjsKKyAgbWFpbi0+YmFzZS5yZWFkQ2hhcmFjdGVycyA9IHJlYWRDaGFyYWN0ZXJzX1Rlcm1pbmFsRW11bGF0b3JTY3JlZW47CisgIG1haW4tPmJhc2UuaW5zZXJ0S2V5ID0gaW5zZXJ0S2V5X1Rlcm1pbmFsRW11bGF0b3JTY3JlZW47CisgIG1haW4tPmJhc2UucG9sbCA9IHBvbGxfVGVybWluYWxFbXVsYXRvclNjcmVlbjsKKyAgbWFpbi0+YmFzZS5yZWZyZXNoID0gcmVmcmVzaF9UZXJtaW5hbEVtdWxhdG9yU2NyZWVuOworCisgIG1haW4tPnByb2Nlc3NQYXJhbWV0ZXJzID0gcHJvY2Vzc1BhcmFtZXRlcnNfVGVybWluYWxFbXVsYXRvclNjcmVlbjsKKyAgbWFpbi0+Y29uc3RydWN0ID0gY29uc3RydWN0X1Rlcm1pbmFsRW11bGF0b3JTY3JlZW47CisgIG1haW4tPmRlc3RydWN0ID0gZGVzdHJ1Y3RfVGVybWluYWxFbXVsYXRvclNjcmVlbjsKK30KZGlmZiAtLWdpdCBhL0RyaXZlcnMvU2NyZWVuL1dpbmRvd3MvTWFrZWZpbGUuaW4gYi9Ecml2ZXJzL1NjcmVlbi9XaW5kb3dzL01ha2VmaWxlLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA1MDFjNzAKLS0tIC9kZXYvbnVsbAorKysgYi9Ecml2ZXJzL1NjcmVlbi9XaW5kb3dzL01ha2VmaWxlLmluCkBAIC0wLDAgKzEsMjggQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyMgICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisjCisjIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyMKKyMgQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitEUklWRVJfQ09ERSA9IHduCitEUklWRVJfTkFNRSA9IFdpbmRvd3MKK0RSSVZFUl9VU0FHRSA9IE1pY3Jvc29mdCBXaW5kb3dzCitEUklWRVJfVkVSU0lPTiA9IAorRFJJVkVSX0RFVkVMT1BFUlMgPSAKK2luY2x1ZGUgJChTUkNfVE9QKXNjcmVlbi5taworCitzY3JlZW4uJE86CisJJChDQykgJChTQ1JfQ0ZMQUdTKSAtYyAkKFNSQ19ESVIpL3NjcmVlbi5jCisKZGlmZiAtLWdpdCBhL0RyaXZlcnMvU2NyZWVuL1dpbmRvd3Mvc2NyZWVuLmMgYi9Ecml2ZXJzL1NjcmVlbi9XaW5kb3dzL3NjcmVlbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhhOWY3NTAKLS0tIC9kZXYvbnVsbAorKysgYi9Ecml2ZXJzL1NjcmVlbi9XaW5kb3dzL3NjcmVlbi5jCkBAIC0wLDAgKzEsNTY4IEBACisvKgorICogQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyAqICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyAqCisgKiBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorICoKKyAqIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyAqCisgKiBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisgKi8KKworI2luY2x1ZGUgInByb2xvZ3VlLmgiCisKKyNpbmNsdWRlICJsb2cuaCIKKyNpbmNsdWRlICJwYXJzZS5oIgorI2luY2x1ZGUgImJybF9jbWRzLmgiCisjaW5jbHVkZSAic3lzdGVtX3dpbmRvd3MuaCIKKyNpbmNsdWRlICJrYmRfa2V5Y29kZXMuaCIKKyNpbmNsdWRlICJ1bmljb2RlLmgiCisjaW5jbHVkZSAiYXNjaWkuaCIKKwordHlwZWRlZiBlbnVtIHsKKyAgUEFSTV9ST09ULAorICBQQVJNX0ZPTExPV0ZPQ1VTCit9IFNjcmVlblBhcmFtZXRlcnM7CisjZGVmaW5lIFNDUlBBUk1TICJyb290IiwgImZvbGxvd2ZvY3VzIgorc3RhdGljIHVuc2lnbmVkIGludCByb290LCBmb2xsb3dGb2N1czsKKworI2luY2x1ZGUgInNjcl9kcml2ZXIuaCIKKworc3RhdGljIEhBTkRMRSBjb25zb2xlT3V0cHV0ID0gSU5WQUxJRF9IQU5ETEVfVkFMVUU7CitzdGF0aWMgSEFORExFIGNvbnNvbGVJbnB1dCA9IElOVkFMSURfSEFORExFX1ZBTFVFOworCitzdGF0aWMgaW50Citwcm9jZXNzUGFyYW1ldGVyc19XaW5kb3dzU2NyZWVuIChjaGFyICoqcGFyYW1ldGVycykgeworICByb290ID0gMDsKKyAgaWYgKCpwYXJhbWV0ZXJzW1BBUk1fUk9PVF0pCisgICAgaWYgKCF2YWxpZGF0ZVllc05vKCZyb290LCBwYXJhbWV0ZXJzW1BBUk1fUk9PVF0pKQorICAgICAgbG9nTWVzc2FnZShMT0dfV0FSTklORywgIiVzOiAlcyIsICJpbnZhbGlkIHJvb3Qgc2V0dGluZyIsIHBhcmFtZXRlcnNbUEFSTV9ST09UXSk7CisgIGlmIChyb290ICYmIEF0dGFjaENvbnNvbGVQcm9jKQorICAgIGxvZ01lc3NhZ2UoTE9HX1dBUk5JTkcsICJObyBuZWVkIGZvciByb290IEJSTFRUWSBvbiBuZXdlciAoWFAgb3IgbGF0ZXIpIHN5c3RlbXMiKTsKKworICBmb2xsb3dGb2N1cyA9IDE7CisgIGlmICgqcGFyYW1ldGVyc1tQQVJNX0ZPTExPV0ZPQ1VTXSkKKyAgICBpZiAoIXZhbGlkYXRlWWVzTm8oJmZvbGxvd0ZvY3VzLCBwYXJhbWV0ZXJzW1BBUk1fRk9MTE9XRk9DVVNdKSkKKyAgICAgIGxvZ01lc3NhZ2UoTE9HX1dBUk5JTkcsICIlczogJXMiLCAiaW52YWxpZCBmb2xsb3cgZm9jdXMgc2V0dGluZyIsIHBhcmFtZXRlcnNbUEFSTV9GT0xMT1dGT0NVU10pOworICBpZiAoZm9sbG93Rm9jdXMgJiYgIUF0dGFjaENvbnNvbGVQcm9jKQorICAgIGxvZ01lc3NhZ2UoTE9HX1dBUk5JTkcsICJDYW5ub3QgZm9sbG93IGZvY3VzIG9uIG9sZGVyIChwcmUtWFApIHN5c3RlbXMiKTsKKyAgcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQKK29wZW5TdGRIYW5kbGVzICh2b2lkKSB7CisgIGlmICgoY29uc29sZU91dHB1dCA9PSBJTlZBTElEX0hBTkRMRV9WQUxVRSAmJgorICAgIChjb25zb2xlT3V0cHV0ID0gQ3JlYXRlRmlsZSgiQ09OT1VUJCIsR0VORVJJQ19SRUFEfEdFTkVSSUNfV1JJVEUsRklMRV9TSEFSRV9SRUFEfEZJTEVfU0hBUkVfV1JJVEUsTlVMTCxPUEVOX0VYSVNUSU5HLDAsTlVMTCkpID09IElOVkFMSURfSEFORExFX1ZBTFVFKQorICAgIHx8KGNvbnNvbGVJbnB1dCA9PSBJTlZBTElEX0hBTkRMRV9WQUxVRSAmJgorICAgIChjb25zb2xlSW5wdXQgPSBDcmVhdGVGaWxlKCJDT05JTiQiLEdFTkVSSUNfUkVBRHxHRU5FUklDX1dSSVRFLEZJTEVfU0hBUkVfUkVBRHxGSUxFX1NIQVJFX1dSSVRFLE5VTEwsT1BFTl9FWElTVElORywwLE5VTEwpKSA9PSBJTlZBTElEX0hBTkRMRV9WQUxVRSkpIHsKKyAgICBsb2dXaW5kb3dzU3lzdGVtRXJyb3IoIkdldFN0ZEhhbmRsZSIpOworICAgIHJldHVybiAwOworICB9CisgIHJldHVybiAxOworfQorCitzdGF0aWMgdm9pZAorY2xvc2VTdGRIYW5kbGVzICh2b2lkKSB7CisgIENsb3NlSGFuZGxlKGNvbnNvbGVJbnB1dCk7CisgIGNvbnNvbGVJbnB1dCA9IElOVkFMSURfSEFORExFX1ZBTFVFOworICBDbG9zZUhhbmRsZShjb25zb2xlT3V0cHV0KTsKKyAgY29uc29sZU91dHB1dCA9IElOVkFMSURfSEFORExFX1ZBTFVFOworfQorCitzdGF0aWMgaW50Cit0cnlUb0F0dGFjaCAoSFdORCB3aW4pIHsKKyNkZWZpbmUgQ09OU09MRVdJTkRPVyAiQ29uc29sZVdpbmRvd0NsYXNzIgorICBzdGF0aWMgY2hhciBjbGFzc1tdID0gQ09OU09MRVdJTkRPVzsKKyAgRFdPUkQgcHJvY2VzczsKKyAgaWYgKEdldENsYXNzTmFtZSh3aW4sIGNsYXNzLCBzaXplb2YoY2xhc3MpKSAhPSBzdHJsZW4oQ09OU09MRVdJTkRPVykKKyAgICAgIHx8IG1lbWNtcChjbGFzcyxDT05TT0xFV0lORE9XLHN0cmxlbihDT05TT0xFV0lORE9XKSkpCisgICAgcmV0dXJuIDA7CisgIGlmICghR2V0V2luZG93VGhyZWFkUHJvY2Vzc0lkKHdpbiwgJnByb2Nlc3MpKQorICAgIHJldHVybiAwOworICBGcmVlQ29uc29sZSgpOworICBpZiAoIUF0dGFjaENvbnNvbGVQcm9jKHByb2Nlc3MpKQorICAgIHJldHVybiAwOworICBjbG9zZVN0ZEhhbmRsZXMoKTsKKyAgcmV0dXJuIG9wZW5TdGRIYW5kbGVzKCk7Cit9CisKK3N0YXRpYyBpbnQKK2NvbnN0cnVjdF9XaW5kb3dzU2NyZWVuICh2b2lkKSB7CisgIGlmIChmb2xsb3dGb2N1cyAmJiAoQXR0YWNoQ29uc29sZVByb2MgfHwgcm9vdCkpIHsKKyAgICAvKiBkaXNhYmxlIF5DICovCisgICAgU2V0Q29uc29sZUN0cmxIYW5kbGVyKE5VTEwsVFJVRSk7CisgICAgaWYgKCFGcmVlQ29uc29sZSgpICYmIEdldExhc3RFcnJvcigpICE9IEVSUk9SX0lOVkFMSURfUEFSQU1FVEVSKQorICAgICAgbG9nV2luZG93c1N5c3RlbUVycm9yKCJGcmVlQ29uc29sZSIpOworICAgIHJldHVybiAxOworICB9CisgIHJldHVybiBvcGVuU3RkSGFuZGxlcygpOworfQorCitzdGF0aWMgdm9pZAorZGVzdHJ1Y3RfV2luZG93c1NjcmVlbiAodm9pZCkgeworICBjbG9zZVN0ZEhhbmRsZXMoKTsKK30KKworc3RhdGljIEFMVFRBQklORk8gYWx0VGFiSW5mbzsKK3N0YXRpYyBIV05EIGFsdFRhYjsKK3N0YXRpYyBjaGFyIGFsdFRhYk5hbWVbMTI4XTsKK3N0YXRpYyBCT09MIENBTExCQUNLCitmaW5kQWx0VGFiIChIV05EIHdpbiwgTFBBUkFNIGxwYXJhbSkgeworICBpZiAoR2V0QWx0VGFiSW5mb0FQcm9jKHdpbiwgLTEsICZhbHRUYWJJbmZvLCBOVUxMLCAwKSkgeworICAgIGFsdFRhYiA9IHdpbjsKKyAgICByZXR1cm4gRkFMU0U7CisgIH0KKyAgcmV0dXJuIFRSVUU7Cit9CisKK3N0YXRpYyBDT05TT0xFX1NDUkVFTl9CVUZGRVJfSU5GTyBpbmZvOworc3RhdGljIGNvbnN0IGNoYXIgKnVucmVhZGFibGU7CitzdGF0aWMgaW50IGNvbHM7CitzdGF0aWMgaW50IHJvd3M7CisKK3N0YXRpYyBpbnQKK2N1cnJlbnRWaXJ0dWFsVGVybWluYWxfV2luZG93c1NjcmVlbiAodm9pZCkgeworICBIV05EIHdpbjsKKworICB1bnJlYWRhYmxlID0gTlVMTDsKKyAgYWx0VGFiID0gTlVMTDsKKworICBpZiAoZm9sbG93Rm9jdXMgJiYgKEF0dGFjaENvbnNvbGVQcm9jIHx8IHJvb3QpICYmIEdldEFsdFRhYkluZm9BUHJvYykgeworICAgIGFsdFRhYkluZm8uY2JTaXplID0gc2l6ZW9mKGFsdFRhYkluZm8pOworICAgIEVudW1XaW5kb3dzKGZpbmRBbHRUYWIsIDApOworCisgICAgaWYgKGFsdFRhYikgeworICAgICAgaWYgKCEoR2V0QWx0VGFiSW5mb0FQcm9jKGFsdFRhYiwKKwkgICAgICBhbHRUYWJJbmZvLmlDb2xGb2N1cyArIGFsdFRhYkluZm8uaVJvd0ZvY3VzICogYWx0VGFiSW5mby5jQ29sdW1ucywKKwkgICAgICAmYWx0VGFiSW5mbywgYWx0VGFiTmFtZSwgc2l6ZW9mKGFsdFRhYk5hbWUpKSkpIHsKKwlhbHRUYWIgPSBOVUxMOworICAgICAgfSBlbHNlIHsKKwlyZXR1cm4gMDsKKyAgICAgIH0KKyAgICB9CisgIH0KKworICBpZiAoISh3aW4gPSBHZXRGb3JlZ3JvdW5kV2luZG93KCkpKSB3aW4gPSBJTlZBTElEX0hBTkRMRV9WQUxVRTsKKworICBpZiAoIUF0dGFjaENvbnNvbGVQcm9jICYmIHJvb3QpIHsKKyAgICB1bnJlYWRhYmxlID0gInJvb3QgQlJMVFRZIjsKKyAgfSBlbHNlIGlmICh3aW4gPT0gSU5WQUxJRF9IQU5ETEVfVkFMVUUpIHsKKyAgICB1bnJlYWRhYmxlID0gIm5vIGZvcmVncm91bmQgd2luZG93IjsKKyAgfSBlbHNlIGlmIChmb2xsb3dGb2N1cyAmJiBBdHRhY2hDb25zb2xlUHJvYyAmJiAhdHJ5VG9BdHRhY2god2luKSkgeworICAgIHVucmVhZGFibGUgPSAibm8gYXR0YWNoYWJsZSBjb25zb2xlIjsKKyAgfSBlbHNlIGlmIChjb25zb2xlT3V0cHV0ID09IElOVkFMSURfSEFORExFX1ZBTFVFKSB7CisgICAgdW5yZWFkYWJsZSA9ICJjYW4ndCBvcGVuIGNvbnNvbGUgb3V0cHV0IjsKKyAgfSBlbHNlIGlmICghKEdldENvbnNvbGVTY3JlZW5CdWZmZXJJbmZvKGNvbnNvbGVPdXRwdXQsICZpbmZvKSkpIHsKKyAgICBsb2dXaW5kb3dzU3lzdGVtRXJyb3IoIkdldENvbnNvbGVTY3JlZW5CdWZmZXJJbmZvIik7CisgICAgdW5yZWFkYWJsZSA9ICJjYW4ndCByZWFkIGNvbnNvbGUgaW5mb3JtYXRpb24iOworCisgICAgQ2xvc2VIYW5kbGUoY29uc29sZU91dHB1dCk7CisgICAgY29uc29sZU91dHB1dCA9IElOVkFMSURfSEFORExFX1ZBTFVFOworICB9CisKKyAgcmV0dXJuIChMT05HX1BUUil3aW47Cit9CisKK3N0YXRpYyB2b2lkCitkZXNjcmliZV9XaW5kb3dzU2NyZWVuIChTY3JlZW5EZXNjcmlwdGlvbiAqZGVzY3JpcHRpb24pIHsKKyAgZGVzY3JpcHRpb24tPm51bWJlciA9IChpbnQpIGN1cnJlbnRWaXJ0dWFsVGVybWluYWxfV2luZG93c1NjcmVlbigpOworICBkZXNjcmlwdGlvbi0+dW5yZWFkYWJsZSA9IHVucmVhZGFibGU7CisgIGlmICh1bnJlYWRhYmxlKSB7CisgICAgZGVzY3JpcHRpb24tPnJvd3MgPSAxOworICAgIGRlc2NyaXB0aW9uLT5jb2xzID0gc3RybGVuKHVucmVhZGFibGUpOworICAgIGRlc2NyaXB0aW9uLT5wb3N4ID0gMDsKKyAgICBkZXNjcmlwdGlvbi0+cG9zeSA9IDA7CisgICAgZGVzY3JpcHRpb24tPmhhc0N1cnNvciA9IDA7CisgIH0gZWxzZSBpZiAoYWx0VGFiKSB7CisgICAgZGVzY3JpcHRpb24tPnJvd3MgPSAxOworICAgIGRlc2NyaXB0aW9uLT5jb2xzID0gc3RybGVuKGFsdFRhYk5hbWUpOworICAgIGRlc2NyaXB0aW9uLT5wb3N4ID0gMDsKKyAgICBkZXNjcmlwdGlvbi0+cG9zeSA9IDA7CisgICAgZGVzY3JpcHRpb24tPmhhc0N1cnNvciA9IDA7CisgIH0gZWxzZSB7CisgICAgZGVzY3JpcHRpb24tPmNvbHMgPSBpbmZvLnNyV2luZG93LlJpZ2h0ICsgMSAtIGluZm8uc3JXaW5kb3cuTGVmdDsKKyAgICBkZXNjcmlwdGlvbi0+cm93cyA9IGluZm8uc3JXaW5kb3cuQm90dG9tICsgMSAtIGluZm8uc3JXaW5kb3cuVG9wOworICAgIGRlc2NyaXB0aW9uLT5wb3N4ID0gaW5mby5kd0N1cnNvclBvc2l0aW9uLlggLSBpbmZvLnNyV2luZG93LkxlZnQ7CisgICAgZGVzY3JpcHRpb24tPnBvc3kgPSBpbmZvLmR3Q3Vyc29yUG9zaXRpb24uWSAtIGluZm8uc3JXaW5kb3cuVG9wOyAKKyAgICBkZXNjcmlwdGlvbi0+aGFzQ3Vyc29yID0gMTsKKyAgfQorICBjb2xzID0gZGVzY3JpcHRpb24tPmNvbHM7CisgIHJvd3MgPSBkZXNjcmlwdGlvbi0+cm93czsKK30KKworc3RhdGljIGludAorcmVhZENoYXJhY3RlcnNfV2luZG93c1NjcmVlbiAoY29uc3QgU2NyZWVuQm94ICpib3gsIFNjcmVlbkNoYXJhY3RlciAqYnVmZmVyKSB7CisgIGludCB4LCB4eCwgeTsKKyAgc3RhdGljIGludCB3aWRlOworICBDT09SRCBjb29yZDsKKworICBCT09MIFdJTkFQSSAoKmZ1bikgKEhBTkRMRSwgdm9pZCosIERXT1JELCBDT09SRCwgTFBEV09SRCk7CisgIGNvbnN0IGNoYXIgKm5hbWU7CisgIHNpemVfdCBzaXplOworICB2b2lkICpidWY7CisgIFdPUkQgKmJ1ZkF0dHI7CisKKyAgaWYgKCF2YWxpZGF0ZVNjcmVlbkJveChib3gsIGNvbHMsIHJvd3MpKSByZXR1cm4gMDsKKworICBpZiAodW5yZWFkYWJsZSkgeworICAgIHNldFNjcmVlbk1lc3NhZ2UoYm94LCBidWZmZXIsIHVucmVhZGFibGUpOworICAgIHJldHVybiAxOworICB9CisKKyAgaWYgKGFsdFRhYikgeworICAgIHNldFNjcmVlbk1lc3NhZ2UoYm94LCBidWZmZXIsIGFsdFRhYk5hbWUpOworICAgIHJldHVybiAxOworICB9CisKKyAgY29vcmQuWCA9IGJveC0+bGVmdCArIGluZm8uc3JXaW5kb3cuTGVmdDsKKyAgY29vcmQuWSA9IGJveC0+dG9wICsgaW5mby5zcldpbmRvdy5Ub3A7CisKKyAgaWYgKCF3aWRlKSB7CisgICAgd2NoYXJfdCBidWY7CisgICAgRFdPUkQgcmVhZDsKKyAgICBpZiAoUmVhZENvbnNvbGVPdXRwdXRDaGFyYWN0ZXJXKGNvbnNvbGVPdXRwdXQsICZidWYsIDEsIGNvb3JkLCAmcmVhZCkpCisgICAgICB3aWRlID0gMTsKKyAgICBlbHNlIHsKKyAgICAgIGlmIChHZXRMYXN0RXJyb3IoKSA9PSBFUlJPUl9DQUxMX05PVF9JTVBMRU1FTlRFRCkKKwl3aWRlID0gLTE7CisgICAgICBlbHNlIHsKKwlsb2dXaW5kb3dzU3lzdGVtRXJyb3IoIlJlYWRDb25zb2xlT3V0cHV0Q2hhcmFjdGVyVyIpOworCXJldHVybiAwOworICAgICAgfQorICAgIH0KKyAgfQorI2RlZmluZSBVU0UoZiwgdCkgKGZ1biA9ICh0eXBlb2YoZnVuKSlmLCBuYW1lID0gI2YsIHNpemUgPSBzaXplb2YodCkpCisgIGlmICh3aWRlID4gMCkKKyAgICBVU0UoUmVhZENvbnNvbGVPdXRwdXRDaGFyYWN0ZXJXLCB3Y2hhcl90KTsKKyAgZWxzZQorICAgIFVTRShSZWFkQ29uc29sZU91dHB1dENoYXJhY3RlckEsIGNoYXIpOworI3VuZGVmIFVTRQorCisgIGlmICghKGJ1ZiA9IG1hbGxvYyhib3gtPndpZHRoKnNpemUpKSkgeworICAgIGxvZ1N5c3RlbUVycm9yKCJtYWxsb2MgZm9yIFdpbmRvd3MgY29uc29sZSByZWFkaW5nIik7CisgICAgcmV0dXJuIDA7CisgIH0KKworICBpZiAoIShidWZBdHRyID0gbWFsbG9jKGJveC0+d2lkdGgqc2l6ZW9mKFdPUkQpKSkpIHsKKyAgICBsb2dTeXN0ZW1FcnJvcigibWFsbG9jIGZvciBXaW5kb3dzIGNvbnNvbGUgcmVhZGluZyIpOworICAgIGZyZWUoYnVmKTsKKyAgICByZXR1cm4gMDsKKyAgfQorCisgIGZvciAoeT0wOyB5PGJveC0+aGVpZ2h0OyB5KyssIGNvb3JkLlkrKykgeworICAgIERXT1JEIHJlYWQ7CisKKyAgICBpZiAoIWZ1bihjb25zb2xlT3V0cHV0LCBidWYsIGJveC0+d2lkdGgsIGNvb3JkLCAmcmVhZCkpIHsKKyAgICAgIGxvZ1dpbmRvd3NTeXN0ZW1FcnJvcihuYW1lKTsKKyAgICAgIGJyZWFrOworICAgIH0KKworICAgIGlmICh3aWRlID4gMCkgeworICAgICAgZm9yICh4PTAsIHh4ID0gMDsgeDxib3gtPndpZHRoICYmIHh4IDwgcmVhZDsgeCsrLCB4eCsrKSB7CisJd2NoYXJfdCB3YyA9ICgod2NoYXJfdCopYnVmKVt4eF07CisJaW50IGk7CisKKwlidWZmZXJbeSpib3gtPndpZHRoK3hdLnRleHQgPSB3YzsKKwlmb3IgKGkgPSAxOyBpIDwgZ2V0Q2hhcmFjdGVyV2lkdGgod2MpOyBpKyspIHsKKwkgIHgrKzsKKwkgIGJ1ZmZlclt5KmJveC0+d2lkdGgreF0udGV4dCA9IFVOSUNPREVfWkVST19XSURUSF9TUEFDRTsKKwl9CisgICAgICB9CisgICAgICBmb3IgKCA7IHg8Ym94LT53aWR0aDsgeCsrKSB7CisJYnVmZmVyW3kqYm94LT53aWR0aCt4XS50ZXh0ID0gTCcgJzsKKyAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgZm9yICh4PTA7IHg8cmVhZDsgeCsrKSB7CisJLyogVE9ETzogR2V0Q29uc29sZUNQIGFuZCBjb252ZXJ0ICovCisJYnVmZmVyW3kqYm94LT53aWR0aCt4XS50ZXh0ID0gKChjaGFyKilidWYpW3hdOworICAgICAgfQorICAgICAgZm9yICggOyB4PGJveC0+d2lkdGg7IHgrKykgeworCWJ1ZmZlclt5KmJveC0+d2lkdGgreF0udGV4dCA9ICcgJzsKKyAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoIVJlYWRDb25zb2xlT3V0cHV0QXR0cmlidXRlKGNvbnNvbGVPdXRwdXQsIGJ1ZkF0dHIsIGJveC0+d2lkdGgsIGNvb3JkLCAmcmVhZCkpIHsKKyAgICAgIGxvZ1dpbmRvd3NTeXN0ZW1FcnJvcihuYW1lKTsKKyAgICAgIGJyZWFrOworICAgIH0KKworICAgIGZvciAoeD0wLCB4eD0wOyB4PGJveC0+d2lkdGggJiYgeHggPCByZWFkOyB4KyssIHh4KyspIHsKKyAgICAgIGludCBpOworICAgICAgYnVmZmVyW3kqYm94LT53aWR0aCt4XS5hdHRyaWJ1dGVzID0gYnVmQXR0clt4eF07CisgICAgICBmb3IgKGkgPSAxOyBpIDwgZ2V0Q2hhcmFjdGVyV2lkdGgoYnVmZmVyW3kqYm94LT53aWR0aCt4XS50ZXh0KTsgaSsrKSB7CisJeCsrOworICAgICAgICBidWZmZXJbeSpib3gtPndpZHRoK3hdLmF0dHJpYnV0ZXMgPSBidWZBdHRyW3h4XTsKKyAgICAgIH0KKyAgICB9CisgICAgZm9yICggOyB4IDwgYm94LT53aWR0aDsgeCsrKQorICAgICAgYnVmZmVyW3kqYm94LT53aWR0aCt4XS5hdHRyaWJ1dGVzID0gMDsKKyAgfQorCisgIGZyZWUoYnVmKTsKKyAgZnJlZShidWZBdHRyKTsKKworICByZXR1cm4gKHkgPT0gYm94LT5oZWlnaHQpOworfQorCitzdGF0aWMgaW50IAorZG9JbnNlcnRXcml0ZUNvbnNvbGVJbnB1dCAoQk9PTCBkb3duLCBXQ0hBUiB3Y2hhciwgV09SRCB2aywgV09SRCBzY2FuY29kZSwgRFdPUkQgY29udHJvbEtleVN0YXRlKSB7CisgIERXT1JEIG51bTsKKyAgSU5QVVRfUkVDT1JEIGJ1ZjsKKyAgS0VZX0VWRU5UX1JFQ09SRCAqa2V5RSA9ICZidWYuRXZlbnQuS2V5RXZlbnQ7CisKKyAgYnVmLkV2ZW50VHlwZSA9IEtFWV9FVkVOVDsKKyAgbWVtc2V0KGtleUUsIDAsIHNpemVvZigqa2V5RSkpOworICBrZXlFLT5iS2V5RG93biA9IGRvd247CisgIGtleUUtPndSZXBlYXRDb3VudCA9IDE7CisgIGtleUUtPndWaXJ0dWFsS2V5Q29kZSA9IHZrOworICBrZXlFLT53VmlydHVhbFNjYW5Db2RlID0gc2NhbmNvZGU7CisgIGtleUUtPnVDaGFyLlVuaWNvZGVDaGFyID0gd2NoYXI7CisgIGtleUUtPmR3Q29udHJvbEtleVN0YXRlID0gY29udHJvbEtleVN0YXRlOworICBpZiAoV3JpdGVDb25zb2xlSW5wdXRXKGNvbnNvbGVJbnB1dCwgJmJ1ZiwgMSwgJm51bSkpIHsKKyAgICBpZiAobnVtID09IDEpIHsKKyAgICAgIHJldHVybiAxOworICAgIH0gZWxzZSB7CisgICAgICBsb2dNZXNzYWdlKExPR19FUlIsICJpbnNlcnRlZCAlZCBrZXlzLCBleHBlY3RlZCAxIiwgKGludCludW0pOworICAgIH0KKyAgfSBlbHNlIHsKKyAgICBpZiAoR2V0TGFzdEVycm9yKCkgPT0gRVJST1JfQ0FMTF9OT1RfSU1QTEVNRU5URUQpIHsKKyAgICAgIGtleUUtPnVDaGFyLkFzY2lpQ2hhciA9IHdjaGFyOworICAgICAgaWYgKFdyaXRlQ29uc29sZUlucHV0QShjb25zb2xlSW5wdXQsICZidWYsIDEsICZudW0pKSB7CisJaWYgKG51bSA9PSAxKSB7CisJICByZXR1cm4gMTsKKwl9IGVsc2UgeworCSAgbG9nTWVzc2FnZShMT0dfRVJSLCAiaW5zZXJ0ZWQgJWQga2V5cywgZXhwZWN0ZWQgMSIsIChpbnQpbnVtKTsKKwl9CisgICAgICB9CisgICAgfQorICAgIGxvZ1dpbmRvd3NTeXN0ZW1FcnJvcigiV3JpdGVDb25zb2xlSW5wdXQiKTsKKyAgICBDbG9zZUhhbmRsZShjb25zb2xlSW5wdXQpOworICAgIGNvbnNvbGVJbnB1dCA9IElOVkFMSURfSEFORExFX1ZBTFVFOworICB9CisgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50IAorZG9JbnNlcnRTZW5kSW5wdXQgKEJPT0wgZG93biwgV0NIQVIgd2NoYXIsIFdPUkQgdmssIFdPUkQgc2NhbmNvZGUsIERXT1JEIGZsYWdzKSB7CisgIGlmIChTZW5kSW5wdXRQcm9jKSB7CisgICAgVUlOVCBudW07CisgICAgSU5QVVQgaW5wdXQ7CisgICAgS0VZQkRJTlBVVCAqa2kgPSAmaW5wdXQua2k7CisKKyAgICBpbnB1dC50eXBlID0gSU5QVVRfS0VZQk9BUkQ7CisgICAgbWVtc2V0KGtpLCAwLCBzaXplb2YoKmtpKSk7CisgICAga2ktPmR3RmxhZ3MgPSBmbGFnczsKKyAgICBpZiAod2NoYXIpIHsKKyAgICAgIGtpLT53VmsgPSAwOworICAgICAga2ktPndTY2FuID0gd2NoYXI7CisgICAgICBraS0+ZHdGbGFncyB8PSBLRVlFVkVOVEZfVU5JQ09ERTsKKyAgICB9IGVsc2UgaWYgKHZrKSB7CisgICAgICBraS0+d1ZrID0gdms7CisgICAgICBraS0+d1NjYW4gPSBzY2FuY29kZTsKKyAgICB9IGVsc2UgeworICAgICAga2ktPndWayA9IDA7CisgICAgICBraS0+d1NjYW4gPSBzY2FuY29kZTsKKyAgICAgIGtpLT5kd0ZsYWdzIHw9IEtFWUVWRU5URl9TQ0FOQ09ERTsKKyAgICB9CisKKyAgICBpZiAoIWRvd24pCisgICAgICBraS0+ZHdGbGFncyB8PSBLRVlFVkVOVEZfS0VZVVA7CisKKyAgICBudW0gPSBTZW5kSW5wdXQoMSwgJmlucHV0LCBzaXplb2YoSU5QVVQpKTsKKyAgICBzd2l0Y2ggKG51bSkgeworICAgICAgY2FzZSAxOiAgcmV0dXJuIDE7CisgICAgICBjYXNlIDA6ICBsb2dXaW5kb3dzU3lzdGVtRXJyb3IoIlNlbmRJbnB1dCIpOyBicmVhazsKKyAgICAgIGRlZmF1bHQ6IGxvZ01lc3NhZ2UoTE9HX0VSUiwgImluc2VydGVkICVkIGtleXMsIGV4cGVjdGVkIDEiLCBudW0pOyBicmVhazsKKyAgICB9CisgICAgcmV0dXJuIDA7CisgIH0gZWxzZSB7CisgICAga2V5YmRfZXZlbnQodmssIHNjYW5jb2RlLCBmbGFncyB8IChkb3duID8gMCA6IEtFWUVWRU5URl9LRVlVUCksIDApOworICAgIHJldHVybiAxOworICB9Cit9CisKK3N0YXRpYyBpbnQKK2luc2VydEtleV9XaW5kb3dzU2NyZWVuIChTY3JlZW5LZXkga2V5KSB7CisgIFNIT1JUIHZrID0gMDsKKyAgU0hPUlQgc2NhbmNvZGUgPSAwOworICBEV09SRCBjb250cm9sS2V5U3RhdGUgPSAwOworICBXQ0hBUiB3Y2hhciA9IDA7CisKKyAgbWFwU2NyZWVuS2V5KCZrZXkpOworCisgIGxvZ01lc3NhZ2UoTE9HX0RFQlVHLCAiSW5zZXJ0IGtleTogJTQuNFgiLGtleSk7CisgIGlmIChpc1NwZWNpYWxLZXkoa2V5KSkgeworICAgIHN3aXRjaCAoa2V5ICYgU0NSX0tFWV9DSEFSX01BU0spIHsKKyAgICAgIGNhc2UgU0NSX0tFWV9FTlRFUjogICAgICAgICB2ayA9IFZLX1JFVFVSTjsgd2NoYXI9J1xyJzsgYnJlYWs7CisgICAgICBjYXNlIFNDUl9LRVlfVEFCOiAgICAgICAgICAgdmsgPSBWS19UQUI7ICAgIHdjaGFyPSdcdCc7IGJyZWFrOworICAgICAgY2FzZSBTQ1JfS0VZX0JBQ0tTUEFDRTogICAgIHZrID0gVktfQkFDSzsgICB3Y2hhcj0nXGInOyBicmVhazsKKyAgICAgIGNhc2UgU0NSX0tFWV9FU0NBUEU6ICAgICAgICB2ayA9IFZLX0VTQ0FQRTsgd2NoYXI9QVNDSUlfRVNDOyBicmVhazsKKyAgICAgIGNhc2UgU0NSX0tFWV9DVVJTT1JfTEVGVDogICB2ayA9IFZLX0xFRlQ7ICAgYnJlYWs7CisgICAgICBjYXNlIFNDUl9LRVlfQ1VSU09SX1JJR0hUOiAgdmsgPSBWS19SSUdIVDsgIGJyZWFrOworICAgICAgY2FzZSBTQ1JfS0VZX0NVUlNPUl9VUDogICAgIHZrID0gVktfVVA7ICAgICBicmVhazsKKyAgICAgIGNhc2UgU0NSX0tFWV9DVVJTT1JfRE9XTjogICB2ayA9IFZLX0RPV047ICAgYnJlYWs7CisgICAgICBjYXNlIFNDUl9LRVlfUEFHRV9VUDogICAgICAgdmsgPSBWS19QUklPUjsgIGJyZWFrOworICAgICAgY2FzZSBTQ1JfS0VZX1BBR0VfRE9XTjogICAgIHZrID0gVktfTkVYVDsgICBicmVhazsKKyAgICAgIGNhc2UgU0NSX0tFWV9IT01FOiAgICAgICAgICB2ayA9IFZLX0hPTUU7ICAgYnJlYWs7CisgICAgICBjYXNlIFNDUl9LRVlfRU5EOiAgICAgICAgICAgdmsgPSBWS19FTkQ7ICAgIGJyZWFrOworICAgICAgY2FzZSBTQ1JfS0VZX0lOU0VSVDogICAgICAgIHZrID0gVktfSU5TRVJUOyBicmVhazsKKyAgICAgIGNhc2UgU0NSX0tFWV9ERUxFVEU6ICAgICAgICB2ayA9IFZLX0RFTEVURTsgYnJlYWs7CisgICAgICBjYXNlIFNDUl9LRVlfRlVOQ1RJT04gKyAwOiAgdmsgPSBWS19GMTsgICAgIGJyZWFrOworICAgICAgY2FzZSBTQ1JfS0VZX0ZVTkNUSU9OICsgMTogIHZrID0gVktfRjI7ICAgICBicmVhazsKKyAgICAgIGNhc2UgU0NSX0tFWV9GVU5DVElPTiArIDI6ICB2ayA9IFZLX0YzOyAgICAgYnJlYWs7CisgICAgICBjYXNlIFNDUl9LRVlfRlVOQ1RJT04gKyAzOiAgdmsgPSBWS19GNDsgICAgIGJyZWFrOworICAgICAgY2FzZSBTQ1JfS0VZX0ZVTkNUSU9OICsgNDogIHZrID0gVktfRjU7ICAgICBicmVhazsKKyAgICAgIGNhc2UgU0NSX0tFWV9GVU5DVElPTiArIDU6ICB2ayA9IFZLX0Y2OyAgICAgYnJlYWs7CisgICAgICBjYXNlIFNDUl9LRVlfRlVOQ1RJT04gKyA2OiAgdmsgPSBWS19GNzsgICAgIGJyZWFrOworICAgICAgY2FzZSBTQ1JfS0VZX0ZVTkNUSU9OICsgNzogIHZrID0gVktfRjg7ICAgICBicmVhazsKKyAgICAgIGNhc2UgU0NSX0tFWV9GVU5DVElPTiArIDg6ICB2ayA9IFZLX0Y5OyAgICAgYnJlYWs7CisgICAgICBjYXNlIFNDUl9LRVlfRlVOQ1RJT04gKyA5OiAgdmsgPSBWS19GMTA7ICAgIGJyZWFrOworICAgICAgY2FzZSBTQ1JfS0VZX0ZVTkNUSU9OICsgMTA6IHZrID0gVktfRjExOyAgICBicmVhazsKKyAgICAgIGNhc2UgU0NSX0tFWV9GVU5DVElPTiArIDExOiB2ayA9IFZLX0YxMjsgICAgYnJlYWs7CisgICAgICBjYXNlIFNDUl9LRVlfRlVOQ1RJT04gKyAxMjogdmsgPSBWS19GMTM7ICAgIGJyZWFrOworICAgICAgY2FzZSBTQ1JfS0VZX0ZVTkNUSU9OICsgMTM6IHZrID0gVktfRjE0OyAgICBicmVhazsKKyAgICAgIGNhc2UgU0NSX0tFWV9GVU5DVElPTiArIDE0OiB2ayA9IFZLX0YxNTsgICAgYnJlYWs7CisgICAgICBjYXNlIFNDUl9LRVlfRlVOQ1RJT04gKyAxNTogdmsgPSBWS19GMTY7ICAgIGJyZWFrOworICAgICAgY2FzZSBTQ1JfS0VZX0ZVTkNUSU9OICsgMTY6IHZrID0gVktfRjE3OyAgICBicmVhazsKKyAgICAgIGNhc2UgU0NSX0tFWV9GVU5DVElPTiArIDE3OiB2ayA9IFZLX0YxODsgICAgYnJlYWs7CisgICAgICBjYXNlIFNDUl9LRVlfRlVOQ1RJT04gKyAxODogdmsgPSBWS19GMTk7ICAgIGJyZWFrOworICAgICAgY2FzZSBTQ1JfS0VZX0ZVTkNUSU9OICsgMTk6IHZrID0gVktfRjIwOyAgICBicmVhazsKKyAgICAgIGNhc2UgU0NSX0tFWV9GVU5DVElPTiArIDIwOiB2ayA9IFZLX0YyMTsgICAgYnJlYWs7CisgICAgICBjYXNlIFNDUl9LRVlfRlVOQ1RJT04gKyAyMTogdmsgPSBWS19GMjI7ICAgIGJyZWFrOworICAgICAgY2FzZSBTQ1JfS0VZX0ZVTkNUSU9OICsgMjI6IHZrID0gVktfRjIzOyAgICBicmVhazsKKyAgICAgIGNhc2UgU0NSX0tFWV9GVU5DVElPTiArIDIzOiB2ayA9IFZLX0YyNDsgICAgYnJlYWs7CisgICAgICBkZWZhdWx0OiBsb2dNZXNzYWdlKExPR19XQVJOSU5HLCAiS2V5ICU0LjRYIG5vdCBzdXBvcnRlZC4iLCBrZXkpOworICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICB9IGVsc2UgeworICAgIGlmIChrZXkgJiBTQ1JfS0VZX0FMVF9MRUZUKSB7CisgICAgICBjb250cm9sS2V5U3RhdGUgfD0gTEVGVF9BTFRfUFJFU1NFRDsKKyAgICAgIGtleSAmPSB+IFNDUl9LRVlfQUxUX0xFRlQ7CisgICAgfQorICAgIGlmIChrZXkgJiBTQ1JfS0VZX0FMVF9SSUdIVCkgeworICAgICAgY29udHJvbEtleVN0YXRlIHw9IFJJR0hUX0FMVF9QUkVTU0VEOworICAgICAga2V5ICY9IH4gU0NSX0tFWV9BTFRfUklHSFQ7CisgICAgfQorICAgIGlmIChrZXkgJiBTQ1JfS0VZX1NISUZUKSB7CisgICAgICBjb250cm9sS2V5U3RhdGUgfD0gU0hJRlRfUFJFU1NFRDsKKyAgICAgIGtleSAmPSB+IFNDUl9LRVlfU0hJRlQ7CisgICAgfQorICAgIGlmIChrZXkgJiBTQ1JfS0VZX0NPTlRST0wpIHsKKyAgICAgIGNvbnRyb2xLZXlTdGF0ZSB8PSBMRUZUX0NUUkxfUFJFU1NFRDsKKyAgICAgIGtleSAmPSB+IFNDUl9LRVlfQ09OVFJPTDsKKyAgICB9CisgICAgd2NoYXIgPSBrZXkgJiBTQ1JfS0VZX0NIQVJfTUFTSzsKKyAgICB2ayA9IFZrS2V5U2Nhblcod2NoYXIpOworICAgIGlmICh2ayA9PSAtMSAmJiBHZXRMYXN0RXJyb3IoKSA9PSBFUlJPUl9DQUxMX05PVF9JTVBMRU1FTlRFRCkKKyAgICAgIHZrID0gVmtLZXlTY2FuKHdjaGFyKTsKKyAgICBpZiAodmsgIT0gLTEpIHsKKyAgICAgIGxvZ01lc3NhZ2UoTE9HX0RFQlVHLCAidmsgaXMgJTQuNFgiLCB2ayk7CisgICAgICBpZiAodmsgJiAweDEwMCkgY29udHJvbEtleVN0YXRlIHw9IFNISUZUX1BSRVNTRUQ7CisgICAgICBpZiAoKHZrICYgMHg2MDApID09IDB4NjAwKSB7CisJY29udHJvbEtleVN0YXRlIHw9IFJJR0hUX0NUUkxfUFJFU1NFRDsKKwljb250cm9sS2V5U3RhdGUgfD0gUklHSFRfQUxUX1BSRVNTRUQ7CisgICAgICB9IGVsc2UgeworICAgICAgICBpZiAodmsgJiAweDIwMCkgY29udHJvbEtleVN0YXRlIHw9IExFRlRfQ1RSTF9QUkVTU0VEOworICAgICAgICBpZiAodmsgJiAweDQwMCkgY29udHJvbEtleVN0YXRlIHw9IExFRlRfQUxUX1BSRVNTRUQ7CisgICAgICB9CisgICAgICB2ayA9IHZrICYgMHhmZjsKKyAgICB9IGVsc2UgdmsgPSAwOworICB9CisKKyAgc2NhbmNvZGUgPSBNYXBWaXJ0dWFsS2V5KHZrLCAwKTsKKworICBsb2dNZXNzYWdlKExPR19ERUJVRywid2NoYXIgJXggdmsgJXggc2NhbmNvZGUgJWQga3MgJWQiLCB3Y2hhciwgdmssIHNjYW5jb2RlLCAoaW50KWNvbnRyb2xLZXlTdGF0ZSk7CisgIGlmIChjb25zb2xlSW5wdXQgIT0gSU5WQUxJRF9IQU5ETEVfVkFMVUUgJiYgIXVucmVhZGFibGUpIHsKKyAgICBsb2dNZXNzYWdlKExPR19ERUJVRywgInVzaW5nIFdyaXRlQ29uc29sZUlucHV0Iik7CisgICAgaWYgKCFkb0luc2VydFdyaXRlQ29uc29sZUlucHV0KFRSVUUsIHdjaGFyLCB2aywgc2NhbmNvZGUsIGNvbnRyb2xLZXlTdGF0ZSkpCisgICAgICByZXR1cm4gMDsKKyAgICBpZiAoIWRvSW5zZXJ0V3JpdGVDb25zb2xlSW5wdXQoRkFMU0UsIHdjaGFyLCB2aywgc2NhbmNvZGUsIGNvbnRyb2xLZXlTdGF0ZSkpCisgICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gMTsKKyAgfSBlbHNlIHsKKyAgICBsb2dNZXNzYWdlKExPR19ERUJVRywgInVzaW5nIFNlbmRJbnB1dCIpOworICAgIGlmIChjb250cm9sS2V5U3RhdGUgJiBMRUZUX0NUUkxfUFJFU1NFRCkKKyAgICAgIGlmICghZG9JbnNlcnRTZW5kSW5wdXQoVFJVRSwgMCwgVktfQ09OVFJPTCwgMCwgMCkpCisgICAgICAgIHJldHVybiAwOworICAgIGlmIChjb250cm9sS2V5U3RhdGUgJiBTSElGVF9QUkVTU0VEKQorICAgICAgaWYgKCFkb0luc2VydFNlbmRJbnB1dChUUlVFLCAwLCBWS19TSElGVCwgMCwgMCkpCisgICAgICAgIHJldHVybiAwOworICAgIGlmIChjb250cm9sS2V5U3RhdGUgJiBMRUZUX0FMVF9QUkVTU0VEKQorICAgICAgaWYgKCFkb0luc2VydFNlbmRJbnB1dChUUlVFLCAwLCBWS19NRU5VLCAwLCAwKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgaWYgKGNvbnRyb2xLZXlTdGF0ZSAmIFJJR0hUX0FMVF9QUkVTU0VEKQorICAgICAgaWYgKCFkb0luc2VydFNlbmRJbnB1dChUUlVFLCAwLCBWS19STUVOVSwgMCwgMCkpCisgICAgICAgIHJldHVybiAwOworICAgIGlmICghZG9JbnNlcnRTZW5kSW5wdXQoVFJVRSwgd2NoYXIsIHZrLCBzY2FuY29kZSwgMCkpCisgICAgICByZXR1cm4gMDsKKyAgICBpZiAoIWRvSW5zZXJ0U2VuZElucHV0KEZBTFNFLCB3Y2hhciwgdmssIHNjYW5jb2RlLCAwKSkKKyAgICAgIHJldHVybiAwOworICAgIGlmIChjb250cm9sS2V5U3RhdGUgJiBSSUdIVF9BTFRfUFJFU1NFRCkKKyAgICAgIGlmICghZG9JbnNlcnRTZW5kSW5wdXQoRkFMU0UsIDAsIFZLX1JNRU5VLCAwLCAwKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgaWYgKGNvbnRyb2xLZXlTdGF0ZSAmIExFRlRfQUxUX1BSRVNTRUQpCisgICAgICBpZiAoIWRvSW5zZXJ0U2VuZElucHV0KEZBTFNFLCAwLCBWS19NRU5VLCAwLCAwKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgaWYgKGNvbnRyb2xLZXlTdGF0ZSAmIFNISUZUX1BSRVNTRUQpCisgICAgICBpZiAoIWRvSW5zZXJ0U2VuZElucHV0KEZBTFNFLCAwLCBWS19TSElGVCwgMCwgMCkpCisgICAgICAgIHJldHVybiAwOworICAgIGlmIChjb250cm9sS2V5U3RhdGUgJiBMRUZUX0NUUkxfUFJFU1NFRCkKKyAgICAgIGlmICghZG9JbnNlcnRTZW5kSW5wdXQoRkFMU0UsIDAsIFZLX0NPTlRST0wsIDAsIDApKQorICAgICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gMTsKKyAgfQorICByZXR1cm4gMDsKK30KKworc3RhdGljIGludAoraGFuZGxlQ29tbWFuZF9XaW5kb3dzU2NyZWVuIChpbnQgY29tbWFuZCkgeworICBpbnQgYmxrID0gY29tbWFuZCAmIEJSTF9NU0tfQkxLOworICBpbnQgYXJnID0gY29tbWFuZCAmIEJSTF9NU0tfQVJHOworICBpbnQgcHJlc3MgPSAwOworCisgIHN3aXRjaCAoYmxrKSB7CisgICAgY2FzZSBCUkxfQ01EX0JMSyhQQVNTWFQpOgorICAgICAgcHJlc3MgPSAhKGFyZyAmIDBYODApOworICAgICAgYXJnICY9IDBYN0Y7CisgICAgICAvKiBmYWxsdGhyb3VnaCAqLworICAgICAgZ290byBkb19zZW5kOworICAgIGNhc2UgQlJMX0NNRF9CTEsoUEFTU0FUKTogeworICAgICAgcHJlc3MgfD0gIShjb21tYW5kICYgQlJMX0ZMR19LQkRfUkVMRUFTRSk7CisKK2RvX3NlbmQ6CisgICAgICBpZiAoYXJnID49IDBYODApCisJcmV0dXJuIDA7CisKKyAgICAgIGlmIChjb21tYW5kICYgQlJMX0ZMR19LQkRfRU1VTDEpCisJcmV0dXJuIDA7CisKKyAgICAgIGlmIChibGsgPT0gQlJMX0NNRF9CTEsoUEFTU0FUKSkKKwlhcmcgPSBBVDJYVFthcmddOworCisgICAgICByZXR1cm4gZG9JbnNlcnRTZW5kSW5wdXQgKHByZXNzLCAwLCAwLCBhcmcsCisJICBjb21tYW5kICYgQlJMX0ZMR19LQkRfRU1VTDAgPyBLRVlFVkVOVEZfRVhURU5ERURLRVkgOiAwKTsKKyAgICB9CisgIH0KKworICByZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQKK3Njcl9pbml0aWFsaXplIChNYWluU2NyZWVuICptYWluKSB7CisgIGluaXRpYWxpemVSZWFsU2NyZWVuKG1haW4pOworICBtYWluLT5iYXNlLmN1cnJlbnRWaXJ0dWFsVGVybWluYWwgPSBjdXJyZW50VmlydHVhbFRlcm1pbmFsX1dpbmRvd3NTY3JlZW47CisgIG1haW4tPmJhc2UuZGVzY3JpYmUgPSBkZXNjcmliZV9XaW5kb3dzU2NyZWVuOworICBtYWluLT5iYXNlLnJlYWRDaGFyYWN0ZXJzID0gcmVhZENoYXJhY3RlcnNfV2luZG93c1NjcmVlbjsKKyAgbWFpbi0+YmFzZS5pbnNlcnRLZXkgPSBpbnNlcnRLZXlfV2luZG93c1NjcmVlbjsKKyAgbWFpbi0+YmFzZS5oYW5kbGVDb21tYW5kID0gaGFuZGxlQ29tbWFuZF9XaW5kb3dzU2NyZWVuOworICBtYWluLT5wcm9jZXNzUGFyYW1ldGVycyA9IHByb2Nlc3NQYXJhbWV0ZXJzX1dpbmRvd3NTY3JlZW47CisgIG1haW4tPmNvbnN0cnVjdCA9IGNvbnN0cnVjdF9XaW5kb3dzU2NyZWVuOworICBtYWluLT5kZXN0cnVjdCA9IGRlc3RydWN0X1dpbmRvd3NTY3JlZW47Cit9CmRpZmYgLS1naXQgYS9Ecml2ZXJzL1NwZWVjaC9BbHZhL01ha2VmaWxlLmluIGIvRHJpdmVycy9TcGVlY2gvQWx2YS9NYWtlZmlsZS5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNjZjZGQzCi0tLSAvZGV2L251bGwKKysrIGIvRHJpdmVycy9TcGVlY2gvQWx2YS9NYWtlZmlsZS5pbgpAQCAtMCwwICsxLDI4IEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisjICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorIworIyBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisjCisjIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisjCisjIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyMgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorIyBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyMKKyMgV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworIworIyBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworRFJJVkVSX0NPREUgPSBhbAorRFJJVkVSX05BTUUgPSBBbHZhCitEUklWRVJfVVNBR0UgPSBicmFpbGxlIGRldmljZQorRFJJVkVSX1ZFUlNJT04gPSAKK0RSSVZFUl9ERVZFTE9QRVJTID0gCitpbmNsdWRlICQoU1JDX1RPUClzcGVlY2gubWsKKworc3BlZWNoLiRPOgorCSQoQ0MpICQoU1BLX0NGTEFHUykgLWMgJChTUkNfRElSKS9zcGVlY2guYworCmRpZmYgLS1naXQgYS9Ecml2ZXJzL1NwZWVjaC9BbHZhL3NwZWVjaC5jIGIvRHJpdmVycy9TcGVlY2gvQWx2YS9zcGVlY2guYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MmVhMzkxCi0tLSAvZGV2L251bGwKKysrIGIvRHJpdmVycy9TcGVlY2gvQWx2YS9zcGVlY2guYwpAQCAtMCwwICsxLDExNCBAQAorLyoKKyAqIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisgKiAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisgKgorICogQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKKy8qIEFsdmEvc3BlZWNoLmMgLSBTcGVlY2ggbGlicmFyeQorICogRm9yIHRoZSBBbHZhIERlbHBoaS4KKyAqLworCisjaW5jbHVkZSAicHJvbG9ndWUuaCIKKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8ZmNudGwuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworI2luY2x1ZGUgInNwa19kcml2ZXIuaCIKKyNpbmNsdWRlICJzcGVlY2guaCIJCS8qIGZvciBzcGVlY2ggZGVmaW5pdGlvbnMgKi8KKyNpbmNsdWRlICJEcml2ZXJzL0JyYWlsbGUvQWx2YS9icmFpbGxlLmgiCisKKy8qIGNoYXJzZXQgY29udmVyc2lvbiB0YWJsZSBmcm9tIGlzbyBsYXRpbi0xID09IGlzbyA4ODU5LTEgdG8gY3A0Mzc9PWlibXBjCisgKiBmb3IgY2hhcnMgPj0xMjguIAorICovCitzdGF0aWMgdW5zaWduZWQgY2hhciBsYXRpbjJjcDQzN1swWDgwXSA9CisgIHsxOTksIDI1MiwgMjMzLCAyMjYsIDIyOCwgMjI0LCAyMjksIDIzMSwKKyAgIDIzNCwgMjM1LCAyMzIsIDIzOSwgMjM4LCAyMzYsIDE5NiwgMTk3LAorICAgMjAxLCAxODEsIDE5OCwgMjQ0LCAyNDcsIDI0MiwgMjUxLCAyNDksCisgICAyMjMsIDIxNCwgMjIwLCAyNDMsIDE4MywgMjA5LCAxNTgsIDE1OSwKKyAgIDI1NSwgMTczLCAxNTUsIDE1NiwgMTc3LCAxNTcsIDE4OCwgMjEsCisgICAxOTEsIDE2OSwgMTY2LCAxNzQsIDE3MCwgMjM3LCAxODksIDE4NywKKyAgIDI0OCwgMjQxLCAyNTMsIDE3OSwgMTgwLCAyMzAsIDIwLCAyNTAsCisgICAxODQsIDE4NSwgMTY3LCAxNzUsIDE3MiwgMTcxLCAxOTAsIDE2OCwKKyAgIDE5MiwgMTkzLCAxOTQsIDE5NSwgMTQyLCAxNDMsIDE0NiwgMTI4LAorICAgMjAwLCAxNDQsIDIwMiwgMjAzLCAyMDQsIDIwNSwgMjA2LCAyMDcsCisgICAyMDgsIDE2NSwgMjEwLCAyMTEsIDIxMiwgMjEzLCAxNTMsIDIxNSwKKyAgIDIxNiwgMjE3LCAyMTgsIDIxOSwgMTU0LCAyMjEsIDIyMiwgMjI1LAorICAgMTMzLCAxNjAsIDEzMSwgMjI3LCAxMzIsIDEzNCwgMTQ1LCAxMzUsCisgICAxMzgsIDEzMCwgMTM2LCAxMzcsIDE0MSwgMTYxLCAxNDAsIDEzOSwKKyAgIDI0MCwgMTY0LCAxNDksIDE2MiwgMTQ3LCAyNDUsIDE0OCwgMjQ2LAorICAgMTc2LCAxNTEsIDE2MywgMTUwLCAxMjksIDE3OCwgMjU0LCAxNTJ9OworCitzdGF0aWMgaW50CitzcGtfY29uc3RydWN0IChTcGVlY2hTeW50aGVzaXplciAqc3BrLCBjaGFyICoqcGFyYW1ldGVycykKK3sKKyAgcmV0dXJuIDE7Cit9CisKKworc3RhdGljIHZvaWQKK3Nwa19zYXkgKFNwZWVjaFN5bnRoZXNpemVyICpzcGssIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZmZlciwgc2l6ZV90IGxlbiwgc2l6ZV90IGNvdW50LCBjb25zdCB1bnNpZ25lZCBjaGFyICphdHRyaWJ1dGVzKQoreworICBzdGF0aWMgdW5zaWduZWQgY2hhciAqcHJlX3NwZWVjaCA9ICh1bnNpZ25lZCBjaGFyICopUFJFX1NQRUVDSDsKKyAgc3RhdGljIHVuc2lnbmVkIGNoYXIgKnBvc3Rfc3BlZWNoID0gKHVuc2lnbmVkIGNoYXIgKilQT1NUX1NQRUVDSDsKKyAgdW5zaWduZWQgY2hhciBidWZbMjU2XTsKKyAgdW5zaWduZWQgY2hhciBjOworICBpbnQgaTsKKworICBpZiAocHJlX3NwZWVjaFswXSkKKyAgICB7CisgICAgICBtZW1jcHkgKGJ1ZiwgcHJlX3NwZWVjaCArIDEsIHByZV9zcGVlY2hbMF0pOworICAgICAgQUxfd3JpdGVEYXRhIChidWYsIHByZV9zcGVlY2hbMF0pOworICAgIH0KKyAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKQorICAgIHsKKyAgICAgIGMgPSBidWZmZXJbaV07CisgICAgICBpZiAoYyA+PSAwWDgwKSBjID0gbGF0aW4yY3A0MzdbYy0wWDgwXTsKKyAgICAgIGlmIChjIDwgMzMpCS8qIHNwYWNlIG9yIGNvbnRyb2wgY2hhcmFjdGVyICovCisJeworCSAgYnVmWzBdID0gJyAnOworCSAgQUxfd3JpdGVEYXRhIChidWYsIDEpOworCX0KKyAgICAgIGVsc2UgaWYgKGMgPiBNQVhfVFJBTlMpCisJQUxfd3JpdGVEYXRhICgmYywgMSk7CisgICAgICBlbHNlCisJeworCSAgbWVtY3B5IChidWYsIHZvY2FiW2MgLSAzM10sIHN0cmxlbiAodm9jYWJbYyAtIDMzXSkpOworCSAgQUxfd3JpdGVEYXRhIChidWYsIHN0cmxlbiAodm9jYWJbYyAtIDMzXSkpOworCX0KKyAgICB9CisgIGlmIChwb3N0X3NwZWVjaFswXSkKKyAgICB7CisgICAgICBtZW1jcHkgKGJ1ZiwgcG9zdF9zcGVlY2ggKyAxLCBwb3N0X3NwZWVjaFswXSk7CisgICAgICBBTF93cml0ZURhdGEgKGJ1ZiwgcG9zdF9zcGVlY2hbMF0pOworICAgIH0KK30KKworCitzdGF0aWMgdm9pZAorc3BrX211dGUgKFNwZWVjaFN5bnRoZXNpemVyICpzcGspCit7CisgIHN0YXRpYyB1bnNpZ25lZCBjaGFyICptdXRlX3NlcSA9ICh1bnNpZ25lZCBjaGFyICopTVVURV9TRVE7CisgIHVuc2lnbmVkIGNoYXIgYnVmZmVyWzMyXTsKKworICBtZW1jcHkgKGJ1ZmZlciwgbXV0ZV9zZXEgKyAxLCBtdXRlX3NlcVswXSk7CisgIEFMX3dyaXRlRGF0YSAoYnVmZmVyLCBtdXRlX3NlcVswXSk7Cit9CisKKworc3RhdGljIHZvaWQKK3Nwa19kZXN0cnVjdCAoU3BlZWNoU3ludGhlc2l6ZXIgKnNwaykKK3sKK30KZGlmZiAtLWdpdCBhL0RyaXZlcnMvU3BlZWNoL0FsdmEvc3BlZWNoLmggYi9Ecml2ZXJzL1NwZWVjaC9BbHZhL3NwZWVjaC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFkZTk2NTEKLS0tIC9kZXYvbnVsbAorKysgYi9Ecml2ZXJzL1NwZWVjaC9BbHZhL3NwZWVjaC5oCkBAIC0wLDAgKzEsMTMyIEBACisvKgorICogQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyAqICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyAqCisgKiBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorICoKKyAqIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyAqCisgKiBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisgKi8KKworLyogQWx2YS9zcGVlY2guaCAtIGRlZmluaXRpb25zIGZvciBydWRpbWVudGFyeSBzcGVlY2ggc3VwcG9ydAorICovCisKKy8qIFRoZXNlIHNlcXVlbmNlcyBhcmUgc2VudCB0byB0aGUgRGVscGhpIGJlZm9yZSBhbmQgYWZ0ZXIgdGhlCisgKiBzcGVlY2ggZGF0YSBpdHNlbGYuICBUaGUgZmlyc3QgYnl0ZSBpcyB0aGUgbGVuZ3RoLCBzbyBlbWJlZGRlZCBudWxzIGFyZQorICogYWxsb3dlZC4KKyAqLworI2RlZmluZSBQUkVfU1BFRUNIICJcMDAyXDAzM1MiCisjZGVmaW5lIFBPU1RfU1BFRUNIICJcMDAzXHJcclxyIgorCisvKiBUaGlzIGlzIHNlbnQgdG8gbXV0ZSB0aGUgc3BlZWNoLiAgVGhlIGZvcm1hdCBpcyB0aGUgc2FtZSBhcyBhYm92ZS4gKi8KKyNkZWZpbmUgTVVURV9TRVEgIlwwMDNcMDMzU1wwMzAiCisKKy8qIFRoZSBzcGVlY2ggZGF0YSBpdHNlbGYgaXMgdHJhbnNsYXRlZCBjaGFyYWN0ZXIgYnkgY2hhcmFjdGVyLiAgSWYgYQorICogY2hhcmFjdGVyIGlzIGxlc3MgdGhhbiAzMyAoaS5lLiBzcGFjZSBvciBjb250cm9sKSwgaXQgaXMgcmVwbGFjZWQgYnkgYQorICogc3BhY2UuICBJZiB0aGUgY2hhcmFjdGVyIGlzIG1vcmUgdGhhbiBNQVhfVFJBTlMsIGl0IGlzIHBhc3NlZCB0aHJvdWdoCisgKiBhcyBpcy4gIE90aGVyd2lzZSB0aGUgY2hhcmFjdGVyIG4gaXMgcmVwbGFjZWQgYnkgdGhlIHN0cmluZyB2b2NhYltuIC0gMzNdLgorICovCisKKyNkZWZpbmUgTUFYX1RSQU5TIDEyNgorc3RhdGljIGNvbnN0IGNoYXIgKnZvY2FiW01BWF9UUkFOUyAtIDMyXSA9IHsiIGV4Y2xhbWF0aW9uICIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgZG91YmxlIHF1b3RlICIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgaGFzaCAiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIGRvbGxhciAiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIHBlcmNlbnQgIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiBhbXBlcnNhbmQgIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiBxdW90ZSAiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIGxlZnQgcGFyZW4gIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiByaWdodCBwYXJlbiAiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIHN0YXIgIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiBwbHVzICIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgY29tbWEgIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiBkYXNoICIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgZG90ICIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgc2xhc2ggIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjAiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiNCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICI1IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjYiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiNyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICI4IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjkiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIGNvbG9uICIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgc2VtaWNvbG9uICIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgbGVzcyB0aGFuICIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgZXF1YWxzICIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgZ3JlYXRlciB0aGFuICIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgcXVlc3Rpb24gIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiBhdCAiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJCIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJFIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkYiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJIIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkkiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiSiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJLIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkwiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJOIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk8iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJRIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlIiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJUIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlUiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiViIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJXIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlgiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiWSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJaIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiBsZWZ0IGJyYWNrZXQgIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiBiYWNrc2xhc2ggIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiByaWdodCBicmFja2V0ICIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgdXBhcnJvdyAiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIHVuZGVybGluZSAiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIGFjY2VudCAiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJiIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImYiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJoIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImkiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJrIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImwiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm8iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJxIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInIiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInUiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ3IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIngiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAieSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ6IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiBsZWZ0IGJyYWNlICIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgYmFyICIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgcmlnaHQgYnJhY2UgIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiB0aWxkZSAifTsKZGlmZiAtLWdpdCBhL0RyaXZlcnMvU3BlZWNoL0FuZHJvaWQvTWFrZWZpbGUuaW4gYi9Ecml2ZXJzL1NwZWVjaC9BbmRyb2lkL01ha2VmaWxlLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjczOTQ5MWUKLS0tIC9kZXYvbnVsbAorKysgYi9Ecml2ZXJzL1NwZWVjaC9BbmRyb2lkL01ha2VmaWxlLmluCkBAIC0wLDAgKzEsMjkgQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyMgICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisjCisjIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyMKKyMgQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitEUklWRVJfQ09ERSA9IGFuCitEUklWRVJfTkFNRSA9IEFuZHJvaWQKK0RSSVZFUl9VU0FHRSA9IE9TLXNwZWNpZmljCitEUklWRVJfVkVSU0lPTiA9IAorRFJJVkVSX0RFVkVMT1BFUlMgPSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+CitTUEtfT0JKUyA9IEBzcGVlY2hfbGlicmFyaWVzX2FkQAoraW5jbHVkZSAkKFNSQ19UT1Apc3BlZWNoLm1rCisKK3NwZWVjaC4kTzoKKwkkKENDKSAkKFNQS19DRkxBR1MpIC1jICQoU1JDX0RJUikvc3BlZWNoLmMKKwpkaWZmIC0tZ2l0IGEvRHJpdmVycy9TcGVlY2gvQW5kcm9pZC9zcGVlY2guYyBiL0RyaXZlcnMvU3BlZWNoL0FuZHJvaWQvc3BlZWNoLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDlhMmU4ZgotLS0gL2Rldi9udWxsCisrKyBiL0RyaXZlcnMvU3BlZWNoL0FuZHJvaWQvc3BlZWNoLmMKQEAgLTAsMCArMSwyMjYgQEAKKy8qCisgKiBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorICogICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorICoKKyAqIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorICoKKyAqIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyAqLworCisjaW5jbHVkZSAicHJvbG9ndWUuaCIKKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKyNpbmNsdWRlICJsb2cuaCIKKworI2luY2x1ZGUgInNwa19kcml2ZXIuaCIKKyNpbmNsdWRlICJzeXN0ZW1famF2YS5oIgorCitzdHJ1Y3QgU3BlZWNoRGF0YVN0cnVjdCB7CisgIEpOSUVudiAqZW52OworICBqY2xhc3MgZHJpdmVyQ2xhc3M7CisgIGptZXRob2RJRCBzdGFydE1ldGhvZDsKKyAgam1ldGhvZElEIHN0b3BNZXRob2Q7CisgIGptZXRob2RJRCBzYXlNZXRob2Q7CisgIGptZXRob2RJRCBtdXRlTWV0aG9kOworICBqbWV0aG9kSUQgc2V0Vm9sdW1lTWV0aG9kOworICBqbWV0aG9kSUQgc2V0UmF0ZU1ldGhvZDsKKyAgam1ldGhvZElEIHNldFBpdGNoTWV0aG9kOworfTsKKworc3RhdGljIGludAorZmluZERyaXZlckNsYXNzIChTcGVlY2hTeW50aGVzaXplciAqc3BrKSB7CisgIHJldHVybiBmaW5kSmF2YUNsYXNzKAorICAgIHNway0+ZHJpdmVyLmRhdGEtPmVudiwgJnNway0+ZHJpdmVyLmRhdGEtPmRyaXZlckNsYXNzLAorICAgIEpBVkFfT0JKX0JSTFRUWSgic3BlZWNoL1NwZWVjaERyaXZlciIpCisgICk7Cit9CisKK3N0YXRpYyB2b2lkCityZWxlYXNlRHJpdmVyQ2xhc3MgKFNwZWVjaFN5bnRoZXNpemVyICpzcGspIHsKKyAgamNsYXNzIGNsYXNzID0gc3BrLT5kcml2ZXIuZGF0YS0+ZHJpdmVyQ2xhc3M7CisKKyAgaWYgKGNsYXNzKSB7CisgICAgSk5JRW52ICplbnYgPSBzcGstPmRyaXZlci5kYXRhLT5lbnY7CisKKyAgICAoKmVudiktPkRlbGV0ZUdsb2JhbFJlZihlbnYsIGNsYXNzKTsKKyAgfQorfQorCitzdGF0aWMgaW50CitmaW5kRHJpdmVyTWV0aG9kIChTcGVlY2hTeW50aGVzaXplciAqc3BrLCBqbWV0aG9kSUQgKm1ldGhvZCwgY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqc2lnbmF0dXJlKSB7CisgIGlmIChmaW5kRHJpdmVyQ2xhc3Moc3BrKSkgeworICAgIGlmIChmaW5kSmF2YVN0YXRpY01ldGhvZChzcGstPmRyaXZlci5kYXRhLT5lbnYsIG1ldGhvZCwgc3BrLT5kcml2ZXIuZGF0YS0+ZHJpdmVyQ2xhc3MsIG5hbWUsIHNpZ25hdHVyZSkpIHsKKyAgICAgIHJldHVybiAxOworICAgIH0KKyAgfQorCisgIHJldHVybiAwOworfQorCitKQVZBX1NUQVRJQ19NRVRIT0QgKAorICBvcmdfYTExeV9icmx0dHlfYW5kcm9pZF9zcGVlY2hfU3BlZWNoRHJpdmVyLCB0ZWxsTG9jYXRpb24sIHZvaWQsCisgIGpsb25nIHN5bnRoZXNpemVyLCBqaW50IGxvY2F0aW9uCispIHsKKyAgdGVsbFNwZWVjaExvY2F0aW9uKGphdmFQdHJGcm9tTG9uZyhzeW50aGVzaXplciksIGxvY2F0aW9uKTsKK30KKworSkFWQV9TVEFUSUNfTUVUSE9EICgKKyAgb3JnX2ExMXlfYnJsdHR5X2FuZHJvaWRfc3BlZWNoX1NwZWVjaERyaXZlciwgdGVsbEZpbmlzaGVkLCB2b2lkLAorICBqbG9uZyBzeW50aGVzaXplcgorKSB7CisgIHRlbGxTcGVlY2hGaW5pc2hlZChqYXZhUHRyRnJvbUxvbmcoc3ludGhlc2l6ZXIpKTsKK30KKworc3RhdGljIHZvaWQKK3Nwa19zYXkgKFNwZWVjaFN5bnRoZXNpemVyICpzcGssIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZmZlciwgc2l6ZV90IGxlbmd0aCwgc2l6ZV90IGNvdW50LCBjb25zdCB1bnNpZ25lZCBjaGFyICphdHRyaWJ1dGVzKSB7CisgIGlmIChmaW5kRHJpdmVyTWV0aG9kKHNwaywgJnNway0+ZHJpdmVyLmRhdGEtPnNheU1ldGhvZCwgInNheVRleHQiLAorICAgICAgICAgICAgICAgICAgICAgICBKQVZBX1NJR19NRVRIT0QoSkFWQV9TSUdfQk9PTEVBTiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpBVkFfU0lHX0xPTkcgLy8gc3ludGhlc2l6ZXIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpBVkFfU0lHX0NIQVJfU0VRVUVOQ0UgLy8gdGV4dAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApKSkgeworICAgIGpzdHJpbmcgc3RyaW5nID0gKCpzcGstPmRyaXZlci5kYXRhLT5lbnYpLT5OZXdTdHJpbmdVVEYoc3BrLT5kcml2ZXIuZGF0YS0+ZW52LCAoY29uc3QgY2hhciAqKWJ1ZmZlcik7CisgICAgaWYgKHN0cmluZykgeworICAgICAgamJvb2xlYW4gcmVzdWx0ID0gKCpzcGstPmRyaXZlci5kYXRhLT5lbnYpLT5DYWxsU3RhdGljQm9vbGVhbk1ldGhvZCgKKyAgICAgICAgc3BrLT5kcml2ZXIuZGF0YS0+ZW52LCBzcGstPmRyaXZlci5kYXRhLT5kcml2ZXJDbGFzcywKKyAgICAgICAgc3BrLT5kcml2ZXIuZGF0YS0+c2F5TWV0aG9kLCBqYXZhUHRyVG9Mb25nKHNwayksIHN0cmluZworICAgICAgKTsKKworICAgICAgKCpzcGstPmRyaXZlci5kYXRhLT5lbnYpLT5EZWxldGVMb2NhbFJlZihzcGstPmRyaXZlci5kYXRhLT5lbnYsIHN0cmluZyk7CisgICAgICBzdHJpbmcgPSBOVUxMOworCisgICAgICBpZiAoIWNsZWFySmF2YUV4Y2VwdGlvbihzcGstPmRyaXZlci5kYXRhLT5lbnYsIDEpKSB7CisgICAgICAgIGlmIChyZXN1bHQgPT0gSk5JX1RSVUUpIHsKKyAgICAgICAgfQorICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICBsb2dNYWxsb2NFcnJvcigpOworICAgICAgY2xlYXJKYXZhRXhjZXB0aW9uKHNway0+ZHJpdmVyLmRhdGEtPmVudiwgMCk7CisgICAgfQorICB9Cit9CisKK3N0YXRpYyB2b2lkCitzcGtfbXV0ZSAoU3BlZWNoU3ludGhlc2l6ZXIgKnNwaykgeworICBpZiAoZmluZERyaXZlck1ldGhvZChzcGssICZzcGstPmRyaXZlci5kYXRhLT5tdXRlTWV0aG9kLCAic3RvcFNwZWFraW5nIiwKKyAgICAgICAgICAgICAgICAgICAgICAgSkFWQV9TSUdfTUVUSE9EKEpBVkFfU0lHX0JPT0xFQU4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkpKSB7CisgICAgamJvb2xlYW4gcmVzdWx0ID0gKCpzcGstPmRyaXZlci5kYXRhLT5lbnYpLT5DYWxsU3RhdGljQm9vbGVhbk1ldGhvZChzcGstPmRyaXZlci5kYXRhLT5lbnYsIHNway0+ZHJpdmVyLmRhdGEtPmRyaXZlckNsYXNzLCBzcGstPmRyaXZlci5kYXRhLT5tdXRlTWV0aG9kKTsKKworICAgIGlmICghY2xlYXJKYXZhRXhjZXB0aW9uKHNway0+ZHJpdmVyLmRhdGEtPmVudiwgMSkpIHsKKyAgICAgIGlmIChyZXN1bHQgPT0gSk5JX1RSVUUpIHsKKyAgICAgIH0KKyAgICB9CisgIH0KK30KKworc3RhdGljIHZvaWQKK3Nwa19zZXRWb2x1bWUgKFNwZWVjaFN5bnRoZXNpemVyICpzcGssIHVuc2lnbmVkIGNoYXIgc2V0dGluZykgeworICBpZiAoZmluZERyaXZlck1ldGhvZChzcGssICZzcGstPmRyaXZlci5kYXRhLT5zZXRWb2x1bWVNZXRob2QsICJzZXRWb2x1bWUiLAorICAgICAgICAgICAgICAgICAgICAgICBKQVZBX1NJR19NRVRIT0QoSkFWQV9TSUdfQk9PTEVBTiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpBVkFfU0lHX0ZMT0FUIC8vIHZvbHVtZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApKSkgeworICAgIGpib29sZWFuIHJlc3VsdCA9ICgqc3BrLT5kcml2ZXIuZGF0YS0+ZW52KS0+Q2FsbFN0YXRpY0Jvb2xlYW5NZXRob2Qoc3BrLT5kcml2ZXIuZGF0YS0+ZW52LCBzcGstPmRyaXZlci5kYXRhLT5kcml2ZXJDbGFzcywgc3BrLT5kcml2ZXIuZGF0YS0+c2V0Vm9sdW1lTWV0aG9kLCBnZXRGbG9hdFNwZWVjaFZvbHVtZShzZXR0aW5nKSk7CisKKyAgICBpZiAoIWNsZWFySmF2YUV4Y2VwdGlvbihzcGstPmRyaXZlci5kYXRhLT5lbnYsIDEpKSB7CisgICAgICBpZiAocmVzdWx0ID09IEpOSV9UUlVFKSB7CisgICAgICB9CisgICAgfQorICB9Cit9CisKK3N0YXRpYyB2b2lkCitzcGtfc2V0UmF0ZSAoU3BlZWNoU3ludGhlc2l6ZXIgKnNwaywgdW5zaWduZWQgY2hhciBzZXR0aW5nKSB7CisgIGlmIChmaW5kRHJpdmVyTWV0aG9kKHNwaywgJnNway0+ZHJpdmVyLmRhdGEtPnNldFJhdGVNZXRob2QsICJzZXRSYXRlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgSkFWQV9TSUdfTUVUSE9EKEpBVkFfU0lHX0JPT0xFQU4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKQVZBX1NJR19GTE9BVCAvLyByYXRlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkpKSB7CisgICAgamJvb2xlYW4gcmVzdWx0ID0gKCpzcGstPmRyaXZlci5kYXRhLT5lbnYpLT5DYWxsU3RhdGljQm9vbGVhbk1ldGhvZChzcGstPmRyaXZlci5kYXRhLT5lbnYsIHNway0+ZHJpdmVyLmRhdGEtPmRyaXZlckNsYXNzLCBzcGstPmRyaXZlci5kYXRhLT5zZXRSYXRlTWV0aG9kLCBnZXRGbG9hdFNwZWVjaFJhdGUoc2V0dGluZykpOworCisgICAgaWYgKCFjbGVhckphdmFFeGNlcHRpb24oc3BrLT5kcml2ZXIuZGF0YS0+ZW52LCAxKSkgeworICAgICAgaWYgKHJlc3VsdCA9PSBKTklfVFJVRSkgeworICAgICAgfQorICAgIH0KKyAgfQorfQorCitzdGF0aWMgdm9pZAorc3BrX3NldFBpdGNoIChTcGVlY2hTeW50aGVzaXplciAqc3BrLCB1bnNpZ25lZCBjaGFyIHNldHRpbmcpIHsKKyAgaWYgKGZpbmREcml2ZXJNZXRob2Qoc3BrLCAmc3BrLT5kcml2ZXIuZGF0YS0+c2V0UGl0Y2hNZXRob2QsICJzZXRQaXRjaCIsCisgICAgICAgICAgICAgICAgICAgICAgIEpBVkFfU0lHX01FVEhPRChKQVZBX1NJR19CT09MRUFOLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSkFWQV9TSUdfRkxPQVQgLy8gcGl0Y2gKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSkpIHsKKyAgICBqYm9vbGVhbiByZXN1bHQgPSAoKnNway0+ZHJpdmVyLmRhdGEtPmVudiktPkNhbGxTdGF0aWNCb29sZWFuTWV0aG9kKHNway0+ZHJpdmVyLmRhdGEtPmVudiwgc3BrLT5kcml2ZXIuZGF0YS0+ZHJpdmVyQ2xhc3MsIHNway0+ZHJpdmVyLmRhdGEtPnNldFBpdGNoTWV0aG9kLCBnZXRGbG9hdFNwZWVjaFBpdGNoKHNldHRpbmcpKTsKKworICAgIGlmICghY2xlYXJKYXZhRXhjZXB0aW9uKHNway0+ZHJpdmVyLmRhdGEtPmVudiwgMSkpIHsKKyAgICAgIGlmIChyZXN1bHQgPT0gSk5JX1RSVUUpIHsKKyAgICAgIH0KKyAgICB9CisgIH0KK30KKworc3RhdGljIGludAorc3BrX2NvbnN0cnVjdCAoU3BlZWNoU3ludGhlc2l6ZXIgKnNwaywgY2hhciAqKnBhcmFtZXRlcnMpIHsKKyAgaWYgKChzcGstPmRyaXZlci5kYXRhID0gbWFsbG9jKHNpemVvZigqc3BrLT5kcml2ZXIuZGF0YSkpKSkgeworICAgIG1lbXNldChzcGstPmRyaXZlci5kYXRhLCAwLCBzaXplb2YoKnNway0+ZHJpdmVyLmRhdGEpKTsKKworICAgIHNway0+ZHJpdmVyLmRhdGEtPmVudiA9IGdldEphdmFOYXRpdmVJbnRlcmZhY2UoKTsKKyAgICBzcGstPmRyaXZlci5kYXRhLT5kcml2ZXJDbGFzcyA9IE5VTEw7CisgICAgc3BrLT5kcml2ZXIuZGF0YS0+c3RhcnRNZXRob2QgPSAwOworICAgIHNway0+ZHJpdmVyLmRhdGEtPnN0b3BNZXRob2QgPSAwOworICAgIHNway0+ZHJpdmVyLmRhdGEtPnNheU1ldGhvZCA9IDA7CisgICAgc3BrLT5kcml2ZXIuZGF0YS0+bXV0ZU1ldGhvZCA9IDA7CisgICAgc3BrLT5kcml2ZXIuZGF0YS0+c2V0Vm9sdW1lTWV0aG9kID0gMDsKKyAgICBzcGstPmRyaXZlci5kYXRhLT5zZXRSYXRlTWV0aG9kID0gMDsKKyAgICBzcGstPmRyaXZlci5kYXRhLT5zZXRQaXRjaE1ldGhvZCA9IDA7CisKKyAgICBzcGstPnNldFZvbHVtZSA9IHNwa19zZXRWb2x1bWU7CisgICAgc3BrLT5zZXRSYXRlID0gc3BrX3NldFJhdGU7CisgICAgc3BrLT5zZXRQaXRjaCA9IHNwa19zZXRQaXRjaDsKKworICAgIGlmIChzcGstPmRyaXZlci5kYXRhLT5lbnYpIHsKKyAgICAgIGlmIChmaW5kRHJpdmVyTWV0aG9kKHNwaywgJnNway0+ZHJpdmVyLmRhdGEtPnN0YXJ0TWV0aG9kLCAic3RhcnRFbmdpbmUiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgSkFWQV9TSUdfTUVUSE9EKEpBVkFfU0lHX0JPT0xFQU4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApKSkgeworICAgICAgICBqYm9vbGVhbiByZXN1bHQgPSAoKnNway0+ZHJpdmVyLmRhdGEtPmVudiktPkNhbGxTdGF0aWNCb29sZWFuTWV0aG9kKHNway0+ZHJpdmVyLmRhdGEtPmVudiwgc3BrLT5kcml2ZXIuZGF0YS0+ZHJpdmVyQ2xhc3MsIHNway0+ZHJpdmVyLmRhdGEtPnN0YXJ0TWV0aG9kKTsKKworICAgICAgICBpZiAoIWNsZWFySmF2YUV4Y2VwdGlvbihzcGstPmRyaXZlci5kYXRhLT5lbnYsIDEpKSB7CisgICAgICAgICAgaWYgKHJlc3VsdCA9PSBKTklfVFJVRSkgeworICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICB9CisgICAgfQorCisgICAgcmVsZWFzZURyaXZlckNsYXNzKHNwayk7CisgICAgZnJlZShzcGstPmRyaXZlci5kYXRhKTsKKyAgfSBlbHNlIHsKKyAgICBsb2dNYWxsb2NFcnJvcigpOworICB9CisKKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkCitzcGtfZGVzdHJ1Y3QgKFNwZWVjaFN5bnRoZXNpemVyICpzcGspIHsKKyAgaWYgKGZpbmREcml2ZXJNZXRob2Qoc3BrLCAmc3BrLT5kcml2ZXIuZGF0YS0+c3RvcE1ldGhvZCwgInN0b3BFbmdpbmUiLAorICAgICAgICAgICAgICAgICAgICAgICBKQVZBX1NJR19NRVRIT0QoSkFWQV9TSUdfVk9JRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSkpIHsKKyAgICAoKnNway0+ZHJpdmVyLmRhdGEtPmVudiktPkNhbGxTdGF0aWNWb2lkTWV0aG9kKHNway0+ZHJpdmVyLmRhdGEtPmVudiwgc3BrLT5kcml2ZXIuZGF0YS0+ZHJpdmVyQ2xhc3MsIHNway0+ZHJpdmVyLmRhdGEtPnN0b3BNZXRob2QpOworICAgIGNsZWFySmF2YUV4Y2VwdGlvbihzcGstPmRyaXZlci5kYXRhLT5lbnYsIDEpOworICB9CisKKyAgcmVsZWFzZURyaXZlckNsYXNzKHNwayk7CisgIGZyZWUoc3BrLT5kcml2ZXIuZGF0YSk7CisgIHNway0+ZHJpdmVyLmRhdGEgPSBOVUxMOworfQpkaWZmIC0tZ2l0IGEvRHJpdmVycy9TcGVlY2gvQnJhaWxsZUxpdGUvTWFrZWZpbGUuaW4gYi9Ecml2ZXJzL1NwZWVjaC9CcmFpbGxlTGl0ZS9NYWtlZmlsZS5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NjJiZTQ4Ci0tLSAvZGV2L251bGwKKysrIGIvRHJpdmVycy9TcGVlY2gvQnJhaWxsZUxpdGUvTWFrZWZpbGUuaW4KQEAgLTAsMCArMSwyOCBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorIyAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyMKKyMgQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorIworIyBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorIworIyBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisjIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyMgbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisjCisjIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK0RSSVZFUl9DT0RFID0gYmwKK0RSSVZFUl9OQU1FID0gQnJhaWxsZUxpdGUKK0RSSVZFUl9VU0FHRSA9IGJyYWlsbGUgZGV2aWNlCitEUklWRVJfVkVSU0lPTiA9IAorRFJJVkVSX0RFVkVMT1BFUlMgPSAKK2luY2x1ZGUgJChTUkNfVE9QKXNwZWVjaC5taworCitzcGVlY2guJE86CisJJChDQykgJChTUEtfQ0ZMQUdTKSAtYyAkKFNSQ19ESVIpL3NwZWVjaC5jCisKZGlmZiAtLWdpdCBhL0RyaXZlcnMvU3BlZWNoL0JyYWlsbGVMaXRlL3NwZWVjaC5jIGIvRHJpdmVycy9TcGVlY2gvQnJhaWxsZUxpdGUvc3BlZWNoLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDlkNjViNAotLS0gL2Rldi9udWxsCisrKyBiL0RyaXZlcnMvU3BlZWNoL0JyYWlsbGVMaXRlL3NwZWVjaC5jCkBAIC0wLDAgKzEsMTI1IEBACisvKgorICogQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyAqICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyAqCisgKiBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorICoKKyAqIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyAqCisgKiBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisgKi8KKworLyogQnJhaWxsZUxpdGUvc3BlZWNoLmMgLSBTcGVlY2ggbGlicmFyeQorICogRm9yIEJsYXppZSBFbmdpbmVlcmluZydzIEJyYWlsbGUgTGl0ZSAxOC80MAorICogTWFpbnRhaW5lZCBieSBOaWtoaWwgTmFpciA8bm4yMDFAY3VzLmNhbS5hYy51az4KKyAqLworCisjaW5jbHVkZSAicHJvbG9ndWUuaCIKKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8ZmNudGwuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworI2luY2x1ZGUgInNwa19kcml2ZXIuaCIKKyNpbmNsdWRlICJzcGVlY2guaCIJCS8qIGZvciBCTGl0ZSBzcGVlY2ggZGVmaW5pdGlvbnMgKi8KKyNpbmNsdWRlICJEcml2ZXJzL0JyYWlsbGUvQnJhaWxsZUxpdGUvYnJhaWxsZS5oIgkJLyogZm9yIEJMaXRlIHNwZWVjaCBkZWZpbml0aW9ucyAqLworCisKKyNpZiAwCisvKiBjaGFyc2V0IGNvbnZlcnNpb24gdGFibGUgZnJvbSBpc28gbGF0aW4tMSA9PSBpc28gODg1OS0xIHRvIGNwNDM3PT1pYm1wYworICogZm9yIGNoYXJzID49MTI4LiAKKyAqLworc3RhdGljIHVuc2lnbmVkIGNoYXIgbGF0aW4yY3A0MzdbMFg4MF0gPQorICB7MTk5LCAyNTIsIDIzMywgMjI2LCAyMjgsIDIyNCwgMjI5LCAyMzEsCisgICAyMzQsIDIzNSwgMjMyLCAyMzksIDIzOCwgMjM2LCAxOTYsIDE5NywKKyAgIDIwMSwgMTgxLCAxOTgsIDI0NCwgMjQ3LCAyNDIsIDI1MSwgMjQ5LAorICAgMjIzLCAyMTQsIDIyMCwgMjQzLCAxODMsIDIwOSwgMTU4LCAxNTksCisgICAyNTUsIDE3MywgMTU1LCAxNTYsIDE3NywgMTU3LCAxODgsIDIxLAorICAgMTkxLCAxNjksIDE2NiwgMTc0LCAxNzAsIDIzNywgMTg5LCAxODcsCisgICAyNDgsIDI0MSwgMjUzLCAxNzksIDE4MCwgMjMwLCAyMCwgMjUwLAorICAgMTg0LCAxODUsIDE2NywgMTc1LCAxNzIsIDE3MSwgMTkwLCAxNjgsCisgICAxOTIsIDE5MywgMTk0LCAxOTUsIDE0MiwgMTQzLCAxNDYsIDEyOCwKKyAgIDIwMCwgMTQ0LCAyMDIsIDIwMywgMjA0LCAyMDUsIDIwNiwgMjA3LAorICAgMjA4LCAxNjUsIDIxMCwgMjExLCAyMTIsIDIxMywgMTUzLCAyMTUsCisgICAyMTYsIDIxNywgMjE4LCAyMTksIDE1NCwgMjIxLCAyMjIsIDIyNSwKKyAgIDEzMywgMTYwLCAxMzEsIDIyNywgMTMyLCAxMzQsIDE0NSwgMTM1LAorICAgMTM4LCAxMzAsIDEzNiwgMTM3LCAxNDEsIDE2MSwgMTQwLCAxMzksCisgICAyNDAsIDE2NCwgMTQ5LCAxNjIsIDE0NywgMjQ1LCAxNDgsIDI0NiwKKyAgIDE3NiwgMTUxLCAxNjMsIDE1MCwgMTI5LCAxNzgsIDI1NCwgMTUyfTsKKyNlbmRpZiAvKiAwICovCisKK3N0YXRpYyBpbnQKK3Nwa19jb25zdHJ1Y3QgKFNwZWVjaFN5bnRoZXNpemVyICpzcGssIGNoYXIgKipwYXJhbWV0ZXJzKQoreworICByZXR1cm4gMTsKK30KKworCitzdGF0aWMgdm9pZAorc3BrX3NheSAoU3BlZWNoU3ludGhlc2l6ZXIgKnNwaywgY29uc3QgdW5zaWduZWQgY2hhciAqYnVmZmVyLCBzaXplX3QgbGVuLCBzaXplX3QgY291bnQsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmF0dHJpYnV0ZXMpCit7CisgIHN0YXRpYyB1bnNpZ25lZCBjaGFyIHByZV9zcGVlY2hbXSA9IHsgUFJFX1NQRUVDSCB9OworICBzdGF0aWMgdW5zaWduZWQgY2hhciBwb3N0X3NwZWVjaFtdID0geyBQT1NUX1NQRUVDSCB9OworCisgIC8qIEtlZXAgaXQgc2ltcGxlIGZvciBub3c6ICovCisgIGlmIChwcmVfc3BlZWNoWzBdKQorICAgIHNlcmlhbFdyaXRlRGF0YSAoQkxfc2VyaWFsRGV2aWNlLCBwcmVfc3BlZWNoICsgMSwgcHJlX3NwZWVjaFswXSk7CisgIHNlcmlhbFdyaXRlRGF0YSAoQkxfc2VyaWFsRGV2aWNlLCBidWZmZXIsIGxlbik7CisgIGlmIChwb3N0X3NwZWVjaFswXSkKKyAgICBzZXJpYWxXcml0ZURhdGEgKEJMX3NlcmlhbERldmljZSwgcG9zdF9zcGVlY2ggKyAxLCBwb3N0X3NwZWVjaFswXSk7CisKKyNpZiAwCisgIHVuc2lnbmVkIGNoYXIgYzsKKyAgaW50IGk7CisKKyAgaWYgKHByZV9zcGVlY2hbMF0pCisgICAgeworICAgICAgbWVtY3B5IChyYXdkYXRhLCBwcmVfc3BlZWNoICsgMSwgcHJlX3NwZWVjaFswXSk7CisgICAgICB3cml0ZSAoYnJsX2ZkLCByYXdkYXRhLCBwcmVfc3BlZWNoWzBdKTsKKyAgICB9CisgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykKKyAgICB7CisgICAgICBjID0gYnVmZmVyW2ldOworICAgICAgaWYgKGMgPj0gMFg4MCkgYyA9IGxhdGluMmNwNDM3W2MtMFg4MF07CisgICAgICBpZiAoYyA8IDMzKQkvKiBzcGFjZSBvciBjb250cm9sIGNoYXJhY3RlciAqLworCXsKKwkgIHJhd2RhdGFbMF0gPSAnICc7CisJICB3cml0ZSAoYnJsX2ZkLCByYXdkYXRhLCAxKTsKKwl9CisgICAgICBlbHNlIGlmIChjID4gTUFYX1RSQU5TKQorCXdyaXRlIChicmxfZmQsICZjLCAxKTsKKyAgICAgIGVsc2UKKwl7CisJICBtZW1jcHkgKHJhd2RhdGEsIHZvY2FiW2MgLSAzM10sIHN0cmxlbiAodm9jYWJbYyAtIDMzXSkpOworCSAgd3JpdGUgKGJybF9mZCwgcmF3ZGF0YSwgc3RybGVuICh2b2NhYltjIC0gMzNdKSk7CisJfQorICAgIH0KKyAgaWYgKHBvc3Rfc3BlZWNoWzBdKQorICAgIHsKKyAgICAgIG1lbWNweSAocmF3ZGF0YSwgcG9zdF9zcGVlY2ggKyAxLCBwb3N0X3NwZWVjaFswXSk7CisgICAgICB3cml0ZSAoYnJsX2ZkLCByYXdkYXRhLCBwb3N0X3NwZWVjaFswXSk7CisgICAgfQorI2VuZGlmIC8qIDAgKi8KK30KKworCitzdGF0aWMgdm9pZAorc3BrX211dGUgKFNwZWVjaFN5bnRoZXNpemVyICpzcGspCit7CisgIHVuc2lnbmVkIGNoYXIgbXV0ZV9zZXFbXSA9IHtNVVRFX1NFUSB9OworCisgIHNlcmlhbFdyaXRlRGF0YSAoQkxfc2VyaWFsRGV2aWNlLCBtdXRlX3NlcSArIDEsIG11dGVfc2VxWzBdKTsKK30KKworCitzdGF0aWMgdm9pZAorc3BrX2Rlc3RydWN0IChTcGVlY2hTeW50aGVzaXplciAqc3BrKQoreworfQpkaWZmIC0tZ2l0IGEvRHJpdmVycy9TcGVlY2gvQnJhaWxsZUxpdGUvc3BlZWNoLmggYi9Ecml2ZXJzL1NwZWVjaC9CcmFpbGxlTGl0ZS9zcGVlY2guaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xM2ZmMzJjCi0tLSAvZGV2L251bGwKKysrIGIvRHJpdmVycy9TcGVlY2gvQnJhaWxsZUxpdGUvc3BlZWNoLmgKQEAgLTAsMCArMSwxMzkgQEAKKy8qCisgKiBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorICogICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorICoKKyAqIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorICoKKyAqIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyAqLworCisvKiBCcmFpbGxlTGl0ZS9zcGVlY2guaCAtIGRlZmluaXRpb25zIGZvciBydWRpbWVudGFyeSBzcGVlY2ggc3VwcG9ydAorICogTi4gTmFpciwgMTEgU2VwdGVtYmVyIDE5OTgKKyAqLworCisvKiBUaGVzZSBzZXF1ZW5jZXMgYXJlIHNlbnQgdG8gdGhlIEJyYWlsbGUgTGl0ZSBiZWZvcmUgYW5kIGFmdGVyIHRoZQorICogc3BlZWNoIGRhdGEgaXRzZWxmLiAgVGhlIGZpcnN0IGJ5dGUgaXMgdGhlIGxlbmd0aCwgc28gZW1iZWRkZWQgbnVscyBhcmUKKyAqIGFsbG93ZWQuCisgKi8KKyNkZWZpbmUgUFJFX1NQRUVDSCAiXDAwNlwwMDUwQlwwMDUxTyIKKyNkZWZpbmUgUE9TVF9TUEVFQ0ggIlwwMDdcclwwMDUwT1wwMDUxQiIKKworLyogVGhpcyBpcyBzZW50IHRvIG11dGUgdGhlIHNwZWVjaC4gIFRoZSBmb3JtYXQgaXMgdGhlIHNhbWUgYXMgYWJvdmUuICovCisjZGVmaW5lIE1VVEVfU0VRICJcMDE1XDAwNTBCXDAwNTFPXDAzMFwwMDUwT1wwMDUxQiIKKworLyogVGhlIHNwZWVjaCBkYXRhIGl0c2VsZiBpcyB0cmFuc2xhdGVkIGNoYXJhY3RlciBieSBjaGFyYWN0ZXIuICBJZiBhCisgKiBjaGFyYWN0ZXIgaXMgbGVzcyB0aGFuIDMzIChpLmUuIHNwYWNlIG9yIGNvbnRyb2wpLCBpdCBpcyByZXBsYWNlZCBieSBhCisgKiBzcGFjZS4gIElmIHRoZSBjaGFyYWN0ZXIgaXMgbW9yZSB0aGFuIE1BWF9UUkFOUywgaXQgaXMgcGFzc2VkIHRocm91Z2gKKyAqIGFzIGlzLiAgT3RoZXJ3aXNlIHRoZSBjaGFyYWN0ZXIgbiBpcyByZXBsYWNlZCBieSB0aGUgc3RyaW5nIHZvY2FiW24gLSAzM10uCisgKi8KKworI2RlZmluZSBNQVhfVFJBTlMgMzIKKworI2lmIE1BWF9UUkFOUyA+IDMyCitzdGF0aWMgdW5zaWduZWQgY2hhciAqdm9jYWJbTUFYX1RSQU5TIC0gMzJdID0KK3sKKyAgIiBleGNsYW1hdGlvbiAiLAorICAiIGRvdWJsZSBxdW90ZSAiLAorICAiIGhhc2ggIiwKKyAgIiBkb2xsYXIgIiwKKyAgIiBwZXJjZW50ICIsCisgICIgYW1wZXJzYW5kICIsCisgICIgcXVvdGUgIiwKKyAgIiBsZWZ0IHBhcmVuICIsCisgICIgcmlnaHQgcGFyZW4gIiwKKyAgIiBzdGFyICIsCisgICIgcGx1cyAiLAorICAiIGNvbW1hICIsCisgICIgZGFzaCAiLAorICAiIGRvdCAiLAorICAiIHNsYXNoICIsCisgICIwIiwKKyAgIjEiLAorICAiMiIsCisgICIzIiwKKyAgIjQiLAorICAiNSIsCisgICI2IiwKKyAgIjciLAorICAiOCIsCisgICI5IiwKKyAgIiBjb2xvbiAiLAorICAiIHNlbWljb2xvbiAiLAorICAiIGxlc3MgdGhhbiAiLAorICAiIGVxdWFscyAiLAorICAiIGdyZWF0ZXIgdGhhbiAiLAorICAiIHF1ZXN0aW9uICIsCisgICIgYXQgIiwKKyAgIkEiLAorICAiQiIsCisgICJDIiwKKyAgIkQiLAorICAiRSIsCisgICJGIiwKKyAgIkciLAorICAiSCIsCisgICJJIiwKKyAgIkoiLAorICAiSyIsCisgICJMIiwKKyAgIk0iLAorICAiTiIsCisgICJPIiwKKyAgIlAiLAorICAiUSIsCisgICJSIiwKKyAgIlMiLAorICAiVCIsCisgICJVIiwKKyAgIlYiLAorICAiVyIsCisgICJYIiwKKyAgIlkiLAorICAiWiIsCisgICIgbGVmdCBicmFja2V0ICIsCisgICIgYmFja3NsYXNoICIsCisgICIgcmlnaHQgYnJhY2tldCAiLAorICAiIHVwYXJyb3cgIiwKKyAgIiB1bmRlcmxpbmUgIiwKKyAgIiBhY2NlbnQgIiwKKyAgImEiLAorICAiYiIsCisgICJjIiwKKyAgImQiLAorICAiZSIsCisgICJmIiwKKyAgImciLAorICAiaCIsCisgICJpIiwKKyAgImoiLAorICAiayIsCisgICJsIiwKKyAgIm0iLAorICAibiIsCisgICJvIiwKKyAgInAiLAorICAicSIsCisgICJyIiwKKyAgInMiLAorICAidCIsCisgICJ1IiwKKyAgInYiLAorICAidyIsCisgICJ4IiwKKyAgInkiLAorICAieiIsCisgICIgbGVmdCBicmFjZSAiLAorICAiIGJhciAiLAorICAiIHJpZ2h0IGJyYWNlICIsCisgICIgdGlsZGUgIgorfTsKKyNlbmRpZiAvKiBNQVhfVFJBTlMgPiAzMiAqLwpkaWZmIC0tZ2l0IGEvRHJpdmVycy9TcGVlY2gvQ29tYmlCcmFpbGxlL01ha2VmaWxlLmluIGIvRHJpdmVycy9TcGVlY2gvQ29tYmlCcmFpbGxlL01ha2VmaWxlLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgwNDNkYzYKLS0tIC9kZXYvbnVsbAorKysgYi9Ecml2ZXJzL1NwZWVjaC9Db21iaUJyYWlsbGUvTWFrZWZpbGUuaW4KQEAgLTAsMCArMSwyOCBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorIyAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyMKKyMgQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorIworIyBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorIworIyBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisjIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyMgbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisjCisjIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK0RSSVZFUl9DT0RFID0gY2IKK0RSSVZFUl9OQU1FID0gQ29tYmlCcmFpbGxlCitEUklWRVJfVVNBR0UgPSBicmFpbGxlIGRldmljZQorRFJJVkVSX1ZFUlNJT04gPSAKK0RSSVZFUl9ERVZFTE9QRVJTID0gCitpbmNsdWRlICQoU1JDX1RPUClzcGVlY2gubWsKKworc3BlZWNoLiRPOgorCSQoQ0MpICQoU1BLX0NGTEFHUykgLWMgJChTUkNfRElSKS9zcGVlY2guYworCmRpZmYgLS1naXQgYS9Ecml2ZXJzL1NwZWVjaC9Db21iaUJyYWlsbGUvc3BlZWNoLmMgYi9Ecml2ZXJzL1NwZWVjaC9Db21iaUJyYWlsbGUvc3BlZWNoLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2JkNWM4OQotLS0gL2Rldi9udWxsCisrKyBiL0RyaXZlcnMvU3BlZWNoL0NvbWJpQnJhaWxsZS9zcGVlY2guYwpAQCAtMCwwICsxLDI0MiBAQAorLyoKKyAqIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisgKiAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisgKgorICogQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKKyNpbmNsdWRlICJwcm9sb2d1ZS5oIgorCisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKyNpbmNsdWRlICJsb2cuaCIKKyNpbmNsdWRlICJpb19nZW5lcmljLmgiCisjaW5jbHVkZSAiYXN5bmNfd2FpdC5oIgorCisjaW5jbHVkZSAic3BrX2RyaXZlci5oIgorI2luY2x1ZGUgInNwZWVjaC5oIgkJLyogZm9yIHNwZWVjaCBkZWZpbml0aW9ucyAqLworI2luY2x1ZGUgIkRyaXZlcnMvQnJhaWxsZS9Db21iaUJyYWlsbGUvYnJhaWxsZS5oIgorCitzdGF0aWMgdW5zaWduZWQgY2hhciAqc3BlZWNoQnVmZmVyOworc3RhdGljIHNpemVfdCBzcGVlY2hTaXplOworc3RhdGljIHNpemVfdCBzcGVlY2hMZW5ndGg7CisKK3N0YXRpYyBjb25zdCBjaGFyICpjb25zdCB2b2NhYltNQVhfVFJBTlMgLSAzMl0gPSB7CisgICIgZXhjbGFtYXRpb24gIiwKKyAgIiBkb3VibGUgcXVvdGUgIiwKKyAgIiBoYXNoICIsCisgICIgZG9sbGFyICIsCisgICIgcGVyY2VudCAiLAorICAiIGFtcGVyc2FuZCAiLAorICAiIHF1b3RlICIsCisgICIgbGVmdCBwYXJlbiAiLAorICAiIHJpZ2h0IHBhcmVuICIsCisgICIgc3RhciAiLAorICAiIHBsdXMgIiwKKyAgIiBjb21tYSAiLAorICAiIGRhc2ggIiwKKyAgIiBkb3QgIiwKKyAgIiBzbGFzaCAiLAorICAiMCIsCisgICIxIiwKKyAgIjIiLAorICAiMyIsCisgICI0IiwKKyAgIjUiLAorICAiNiIsCisgICI3IiwKKyAgIjgiLAorICAiOSIsCisgICIgY29sb24gIiwKKyAgIiBzZW1pY29sb24gIiwKKyAgIiBsZXNzIHRoYW4gIiwKKyAgIiBlcXVhbHMgIiwKKyAgIiBncmVhdGVyIHRoYW4gIiwKKyAgIiBxdWVzdGlvbiAiLAorICAiIGF0ICIsCisgICJBIiwKKyAgIkIiLAorICAiQyIsCisgICJEIiwKKyAgIkUiLAorICAiRiIsCisgICJHIiwKKyAgIkgiLAorICAiSSIsCisgICJKIiwKKyAgIksiLAorICAiTCIsCisgICJNIiwKKyAgIk4iLAorICAiTyIsCisgICJQIiwKKyAgIlEiLAorICAiUiIsCisgICJTIiwKKyAgIlQiLAorICAiVSIsCisgICJWIiwKKyAgIlciLAorICAiWCIsCisgICJZIiwKKyAgIloiLAorICAiIGxlZnQgYnJhY2tldCAiLAorICAiIGJhY2tzbGFzaCAiLAorICAiIHJpZ2h0IGJyYWNrZXQgIiwKKyAgIiB1cGFycm93ICIsCisgICIgdW5kZXJsaW5lICIsCisgICIgYWNjZW50ICIsCisgICJhIiwKKyAgImIiLAorICAiYyIsCisgICJkIiwKKyAgImUiLAorICAiZiIsCisgICJnIiwKKyAgImgiLAorICAiaSIsCisgICJqIiwKKyAgImsiLAorICAibCIsCisgICJtIiwKKyAgIm4iLAorICAibyIsCisgICJwIiwKKyAgInEiLAorICAiciIsCisgICJzIiwKKyAgInQiLAorICAidSIsCisgICJ2IiwKKyAgInciLAorICAieCIsCisgICJ5IiwKKyAgInoiLAorICAiIGxlZnQgYnJhY2UgIiwKKyAgIiBiYXIgIiwKKyAgIiByaWdodCBicmFjZSAiLAorICAiIHRpbGRlICIKK307CisKKy8qIGNoYXJzZXQgY29udmVyc2lvbiB0YWJsZSBmcm9tIGlzbyBsYXRpbi0xID09IGlzbyA4ODU5LTEgdG8gY3A0Mzc9PWlibXBjCisgKiBmb3IgY2hhcnMgPj0xMjguIAorICovCitzdGF0aWMgdW5zaWduZWQgY2hhciBsYXRpbjJDUDQzN1swWDgwXSA9IHsKKyAgMTk5LCAyNTIsIDIzMywgMjI2LCAyMjgsIDIyNCwgMjI5LCAyMzEsCisgIDIzNCwgMjM1LCAyMzIsIDIzOSwgMjM4LCAyMzYsIDE5NiwgMTk3LAorICAyMDEsIDE4MSwgMTk4LCAyNDQsIDI0NywgMjQyLCAyNTEsIDI0OSwKKyAgMjIzLCAyMTQsIDIyMCwgMjQzLCAxODMsIDIwOSwgMTU4LCAxNTksCisgIDI1NSwgMTczLCAxNTUsIDE1NiwgMTc3LCAxNTcsIDE4OCwgMjEsCisgIDE5MSwgMTY5LCAxNjYsIDE3NCwgMTcwLCAyMzcsIDE4OSwgMTg3LAorICAyNDgsIDI0MSwgMjUzLCAxNzksIDE4MCwgMjMwLCAyMCwgMjUwLAorICAxODQsIDE4NSwgMTY3LCAxNzUsIDE3MiwgMTcxLCAxOTAsIDE2OCwKKyAgMTkyLCAxOTMsIDE5NCwgMTk1LCAxNDIsIDE0MywgMTQ2LCAxMjgsCisgIDIwMCwgMTQ0LCAyMDIsIDIwMywgMjA0LCAyMDUsIDIwNiwgMjA3LAorICAyMDgsIDE2NSwgMjEwLCAyMTEsIDIxMiwgMjEzLCAxNTMsIDIxNSwKKyAgMjE2LCAyMTcsIDIxOCwgMjE5LCAxNTQsIDIyMSwgMjIyLCAyMjUsCisgIDEzMywgMTYwLCAxMzEsIDIyNywgMTMyLCAxMzQsIDE0NSwgMTM1LAorICAxMzgsIDEzMCwgMTM2LCAxMzcsIDE0MSwgMTYxLCAxNDAsIDEzOSwKKyAgMjQwLCAxNjQsIDE0OSwgMTYyLCAxNDcsIDI0NSwgMTQ4LCAyNDYsCisgIDE3NiwgMTUxLCAxNjMsIDE1MCwgMTI5LCAxNzgsIDI1NCwgMTUyCit9OworCitzdGF0aWMgaW50CitzcGtfY29uc3RydWN0IChTcGVlY2hTeW50aGVzaXplciAqc3BrLCBjaGFyICoqcGFyYW1ldGVycykgeworICBzcGVlY2hCdWZmZXIgPSBOVUxMOworICBzcGVlY2hTaXplID0gMDsKKyAgc3BlZWNoTGVuZ3RoID0gMDsKKyAgcmV0dXJuIDE7Cit9CisKK3N0YXRpYyB2b2lkCitzcGtfZGVzdHJ1Y3QgKFNwZWVjaFN5bnRoZXNpemVyICpzcGspIHsKKyAgaWYgKHNwZWVjaEJ1ZmZlcikgeworICAgIGZyZWUoc3BlZWNoQnVmZmVyKTsKKyAgICBzcGVlY2hCdWZmZXIgPSBOVUxMOworICB9Cit9CisKK3N0YXRpYyBpbnQKK2FkZEJ5dGVzIChjb25zdCB1bnNpZ25lZCBjaGFyICpieXRlcywgc2l6ZV90IGNvdW50KSB7CisgIHNpemVfdCBuZXdMZW5ndGggPSBzcGVlY2hMZW5ndGggKyBjb3VudDsKKworICBpZiAobmV3TGVuZ3RoID4gc3BlZWNoU2l6ZSkgeworICAgIHNpemVfdCBuZXdTaXplID0gKChuZXdMZW5ndGggfCAwWEZGKSArIDEpIDw8IDE7CisgICAgdW5zaWduZWQgY2hhciAqbmV3QnVmZmVyID0gcmVhbGxvYyhzcGVlY2hCdWZmZXIsIG5ld1NpemUpOworCisgICAgaWYgKCFuZXdCdWZmZXIpIHsKKyAgICAgIGxvZ01hbGxvY0Vycm9yKCk7CisgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBzcGVlY2hCdWZmZXIgPSBuZXdCdWZmZXI7CisgICAgc3BlZWNoU2l6ZSA9IG5ld1NpemU7CisgIH0KKworICBtZW1jcHkoJnNwZWVjaEJ1ZmZlcltzcGVlY2hMZW5ndGhdLCBieXRlcywgY291bnQpOworICBzcGVlY2hMZW5ndGggKz0gY291bnQ7CisgIHJldHVybiAxOworfQorCitzdGF0aWMgaW50CithZGRTZXF1ZW5jZSAoY29uc3QgY2hhciAqc2VxdWVuY2UpIHsKKyAgcmV0dXJuIGFkZEJ5dGVzKChjb25zdCB1bnNpZ25lZCBjaGFyICopJnNlcXVlbmNlWzFdLCBzZXF1ZW5jZVswXSk7Cit9CisKK3N0YXRpYyB2b2lkCitmbHVzaFNwZWVjaCAodm9pZCkgeworICBpZiAoc3BlZWNoTGVuZ3RoKSB7CisgICAgaWYgKGNiQnJhaWxsZURpc3BsYXkpIHsKKyAgICAgIEdpb0VuZHBvaW50ICplbmRwb2ludCA9IGNiQnJhaWxsZURpc3BsYXktPmdpb0VuZHBvaW50OworCisgICAgICBpZiAoZW5kcG9pbnQpIHsKKyAgICAgICAgZ2lvV3JpdGVEYXRhKGVuZHBvaW50LCBzcGVlY2hCdWZmZXIsIHNwZWVjaExlbmd0aCk7CisgICAgICAgIGFzeW5jV2FpdChzcGVlY2hMZW5ndGggKiAxMDAwIC8gZ2lvR2V0Qnl0ZXNQZXJTZWNvbmQoZW5kcG9pbnQpKTsKKyAgICAgICAgc3BlZWNoTGVuZ3RoID0gMDsKKyAgICAgIH0KKyAgICB9CisgIH0KK30KKworc3RhdGljIHZvaWQKK3Nwa19zYXkgKFNwZWVjaFN5bnRoZXNpemVyICpzcGssIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZmZlciwgc2l6ZV90IGxlbmd0aCwgc2l6ZV90IGNvdW50LCBjb25zdCB1bnNpZ25lZCBjaGFyICphdHRyaWJ1dGVzKSB7CisgIGFkZFNlcXVlbmNlKFBSRV9TUEVFQ0gpOworCisgIGZvciAodW5zaWduZWQgaW50IGk9MDsgaTxsZW5ndGg7IGkrPTEpIHsKKyAgICB1bnNpZ25lZCBjaGFyIGJ5dGUgPSBidWZmZXJbaV07CisgICAgaWYgKGJ5dGUgPj0gMFg4MCkgYnl0ZSA9IGxhdGluMkNQNDM3W2J5dGUtMFg4MF07CisKKyAgICB1bnNpZ25lZCBjaGFyICpieXRlQWRkcmVzcyA9ICZieXRlOworICAgIHNpemVfdCBieXRlQ291bnQgPSAxOworCisgICAgaWYgKGJ5dGUgPCAzMykgewkvKiBzcGFjZSBvciBjb250cm9sIGNoYXJhY3RlciAqLworICAgICAgYnl0ZSA9ICcgJzsKKyAgICB9IGVsc2UgaWYgKGJ5dGUgPD0gTUFYX1RSQU5TKSB7CisgICAgICBjb25zdCBjaGFyICp3b3JkID0gdm9jYWJbYnl0ZSAtIDMzXTsKKyAgICAgIGJ5dGVBZGRyZXNzID0gKHVuc2lnbmVkIGNoYXIgKil3b3JkOworICAgICAgYnl0ZUNvdW50ID0gc3RybGVuKHdvcmQpOworICAgIH0KKworICAgIGFkZEJ5dGVzKGJ5dGVBZGRyZXNzLCBieXRlQ291bnQpOworICB9CisKKyAgYWRkU2VxdWVuY2UoUE9TVF9TUEVFQ0gpOworICBmbHVzaFNwZWVjaCgpOworfQorCitzdGF0aWMgdm9pZAorc3BrX211dGUgKFNwZWVjaFN5bnRoZXNpemVyICpzcGspIHsKKyAgYWRkU2VxdWVuY2UoTVVURV9TRVEpOworICBmbHVzaFNwZWVjaCgpOworfQpkaWZmIC0tZ2l0IGEvRHJpdmVycy9TcGVlY2gvQ29tYmlCcmFpbGxlL3NwZWVjaC5oIGIvRHJpdmVycy9TcGVlY2gvQ29tYmlCcmFpbGxlL3NwZWVjaC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdmYzk5YmEKLS0tIC9kZXYvbnVsbAorKysgYi9Ecml2ZXJzL1NwZWVjaC9Db21iaUJyYWlsbGUvc3BlZWNoLmgKQEAgLTAsMCArMSwzNSBAQAorLyoKKyAqIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisgKiAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisgKgorICogQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKKy8qIFRoZXNlIHNlcXVlbmNlcyBhcmUgc2VudCB0byB0aGUgQ29tYmlCcmFpbGxlIGJlZm9yZSBhbmQgYWZ0ZXIgdGhlCisgKiBzcGVlY2ggZGF0YSBpdHNlbGYuICBUaGUgZmlyc3QgYnl0ZSBpcyB0aGUgbGVuZ3RoLCBzbyBlbWJlZGRlZCBudWxzIGFyZQorICogYWxsb3dlZC4KKyAqLworI2RlZmluZSBQUkVfU1BFRUNIICJcMDExXDAzM1NAZjlAdzVcbiIKKyNkZWZpbmUgUE9TVF9TUEVFQ0ggIlwwMDNcbi5cbiIKKworLyogVGhpcyBpcyBzZW50IHRvIG11dGUgdGhlIHNwZWVjaC4gIFRoZSBmb3JtYXQgaXMgdGhlIHNhbWUgYXMgYWJvdmUuICovCisjZGVmaW5lIE1VVEVfU0VRICJcMDAzXDAzM1NcMDMwIgorCisvKiBUaGUgc3BlZWNoIGRhdGEgaXRzZWxmIGlzIHRyYW5zbGF0ZWQgY2hhcmFjdGVyIGJ5IGNoYXJhY3Rlci4gIElmIGEKKyAqIGNoYXJhY3RlciBpcyBsZXNzIHRoYW4gMzMgKGkuZS4gc3BhY2Ugb3IgY29udHJvbCksIGl0IGlzIHJlcGxhY2VkIGJ5IGEKKyAqIHNwYWNlLiAgSWYgdGhlIGNoYXJhY3RlciBpcyBtb3JlIHRoYW4gTUFYX1RSQU5TLCBpdCBpcyBwYXNzZWQgdGhyb3VnaAorICogYXMgaXMuICBPdGhlcndpc2UgdGhlIGNoYXJhY3RlciBuIGlzIHJlcGxhY2VkIGJ5IHRoZSBzdHJpbmcgdm9jYWJbbiAtIDMzXS4KKyAqLworCisjZGVmaW5lIE1BWF9UUkFOUyAxMjYKZGlmZiAtLWdpdCBhL0RyaXZlcnMvU3BlZWNoL0V4dGVybmFsU3BlZWNoL01ha2VmaWxlLmluIGIvRHJpdmVycy9TcGVlY2gvRXh0ZXJuYWxTcGVlY2gvTWFrZWZpbGUuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDAwMWY3YgotLS0gL2Rldi9udWxsCisrKyBiL0RyaXZlcnMvU3BlZWNoL0V4dGVybmFsU3BlZWNoL01ha2VmaWxlLmluCkBAIC0wLDAgKzEsMjggQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyMgICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisjCisjIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyMKKyMgQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitEUklWRVJfQ09ERSA9IHhzCitEUklWRVJfTkFNRSA9IEV4dGVybmFsU3BlZWNoCitEUklWRVJfVVNBR0UgPSBzZW5kcyBzcGVlY2ggdG8gZXh0ZXJuYWwgcHJvZ3JhbSBhbmQgcmVjZWl2ZXMgc3Bva2VuIHBvc2l0aW9uIGluZGV4ZXMKK0RSSVZFUl9WRVJTSU9OID0gMS4wIChBcHJpbCAyMDE5KQorRFJJVkVSX0RFVkVMT1BFUlMgPSBTdMOpcGhhbmUgRG95b24gPHMuZG95b25AdmlkZW90cm9uLmNhPgoraW5jbHVkZSAkKFNSQ19UT1Apc3BlZWNoLm1rCisKK3NwZWVjaC4kTzoKKwkkKENDKSAkKFNQS19DRkxBR1MpIC1jICQoU1JDX0RJUikvc3BlZWNoLmMKKwpkaWZmIC0tZ2l0IGEvRHJpdmVycy9TcGVlY2gvRXh0ZXJuYWxTcGVlY2gvUkVBRE1FIGIvRHJpdmVycy9TcGVlY2gvRXh0ZXJuYWxTcGVlY2gvUkVBRE1FCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ2Mjg5ZDUKLS0tIC9kZXYvbnVsbAorKysgYi9Ecml2ZXJzL1NwZWVjaC9FeHRlcm5hbFNwZWVjaC9SRUFETUUKQEAgLTAsMCArMSw1NCBAQAorRXh0ZXJuYWxTcGVlY2gKK2J5IFN06XBoYW5lIERveW9uIDxzLmRveW9uQHZpZGVvdHJvbi5jYT4KK1ZlcnNpb24gMC43IGJldGEsIFNlcHRlbWJlciAyMDAxCisKK1RoaXMgc3BlZWNoIGRyaXZlciBpbnRlcmZhY2VzIHdpdGggYW4gZXh0ZXJuYWwgcHJvZ3JhbSB0aGF0IHdpbGwgaGFuZGxlCitzcGVlY2ggc3ludGhlc2lzLiBUaGUgcHJvdG9jb2wgZm9yIHRhbGtpbmcgdG8gdGhlIGV4dGVybmFsIHByb2dyYW0gaXMKK3F1aXRlIGFyYml0cmFyeTogdGhlcmUgaXMgbm90aGluZyBzdGFuZGFyZCBhYm91dCBpdC4KKworQXMgb3Bwb3NlZCB0byB0aGUgR2VuZXJpY1NheSBkcml2ZXIsIHRoaXMgZHJpdmVyIGlzIGludGVuZGVkIGZvciBtb3JlCitzb3BoaXN0aWNhdGVkIGZlYXR1cmVzOgorCistIENvbW11bmljYXRpb24gd2l0aCB0aGUgZXh0ZXJuYWwgcHJvZ3JhbSBpcyBiaS1kaXJlY3Rpb25hbCwgYW5kIEJSTFRUWQorY29uc3RhbnRseSBsaXN0ZW5zIGZvciBwcm9ncmVzcyB1cGRhdGVzIGZyb20gdGhlIGV4dGVybmFsIHByb2dyYW0uIEJSTFRUWQorY2FuIHRodXMgcGVyZm9ybSBzcGVlY2ggdHJhY2tpbmc6IHRoZSBicmFpbGxlIGRpc3BsYXkgY2FuIG1vdmUgYXMgdGhlCit3b3JkcyBhcmUgc3Bva2VuLiBCUkxUVFkgaXMgdGhlbiBhbHNvIGFibGUgdG8gZGV0ZXJtaW5lIHdoZW4gdGhlIHRleHQgaXMKK2ZpbmlzaGVkIHNwZWFraW5nLiBGaW5hbGx5LCBpZiBzcGVlY2ggaXMgc3RvcHBlZCBieSB0aGUgdXNlciwgQlJMVFRZIGtub3dzCithdCB3aGF0IHBvc2l0aW9uIGl0IHN0b3BwZWQsIHNvIHRoZSB1c2VyIGRvZXMgbm90IGhhdmUgdG8gc2VhcmNoIGZvcgordGhlIHN0b3BwaW5nIHBvaW50IHdoZW4gaGUvc2hlIHdhbnRzIHRvIHJlc3VtZSBzcGVlY2ggc3ludGhlc2lzLgorCistIFZpZGVvIGF0dHJpYnV0ZXMgb2YgdGhlIGNoYXJhY3RlcnMgYXJlIHBhc3NlZCB3aXRoIHRoZSB0ZXh0LCBzbyB0aGF0IHRoZQorZXh0ZXJuYWwgcHJvZ3JhbSBjYW4gaW50ZXJwcmV0IHRoZW0gYW5kIGFkZCBhcHByb3ByaWF0ZSB2b2NhbCBtYXJraW5ncy4gCisKK0N1cnJlbnRseSwgb25seSBvbmUgZXh0ZXJuYWwgcHJvZ3JhbSBleGlzdHMgdGhhdCBjYW4gdGFsayB0aGlzIHByb3RvY29sLiBJdAordXNlcyBJQk0ncyBWaWF2b2ljZSBUVFMgQUtBIFZpYXZvaWNlIE91dGxvdWQgc29mdHdhcmUgc3BlZWNoIHN5bnRoZXNpcworbGlicmFyeS4KKworTkIgSUJNIG9mZmVycyB0aGUgVmlhdm9pY2UgVFRTIHByb2R1Y3QgYXQgbm8gY29zdCBmb3IKK3BlcnNvbmFsIC8gcHNldWRvLWV2YWx1YXRpb24gdXNlLiBVbmZvcnR1bmF0ZWx5IHRoZWlyIHNvZnR3YXJlIGlzIG5vdAorZnJlZSBpbiB0aGUgR05VIHNlbnNlIG5vciBvcGVuc291cmNlLCBhbmQgYSBsaWNlbnNlIGlzIHJlcXVpcmVkIGZvcgorY29tbWVyY2lhbCB1c2UuIEl0IGlzIGhvd2V2ZXIgbXVjaCBtb3JlIHVzYWJsZSBhbmQgb2YgZmFyIHN1cGVyaW9yIHF1YWxpdHkKK3RoYW4gcnN5bnRoLCBmZXN0aXZhbCwgYW5kIHRoZSBUVFMgc2NyaXB0cyBJIGhhdmUgc2VlbiBmb3IgTUJST0xBLiAKKworTXkgZXh0ZXJuYWwgc3BlZWNoIHByb2dyYW0gZG9lcyBzb21lIHNwZWVjaCBwcmVwcm9jZXNzaW5nIGFuZCB0aGVuIHVzZXMKK3RoZSBWaWF2b2ljZSBsaWJyYXJ5LiBJdCBpcyBzdGlsbCBxdWl0ZSBhbHBoYS4gWW91IGNhbiBmaW5kIGl0IGF0OgoraHR0cDovL3BhZ2VzLmluZmluaXQubmV0L3Nkb3lvbi92aWEuaHRtbAorSXQgd2lsbCBiZSBrZXB0IHNlcGFyYXRlIGZyb20gQlJMVFRZIChpbiBwYXJ0IGJlY2F1c2Ugb2YgdGhlIG5vbi1mcmVlCituYXR1cmUgb2YgVmlhdm9pY2UgVFRTKS4KKworVGhlIHBhdGggdG8gdGhlIGV4dGVybmFsIHByb2dyYW0sIGFuZCB0aGUgdWlkIGFuZCBnaWQgdW5kZXIgd2hpY2ggaXQgaXMKK2V4ZWN1dGVkLCBjYW4gYmUgZWl0aGVyOgorLWhhcmQtY29kZWQgaW4gc3BlZWNoLmgKKy1zcGVjaWZpZWQgaW4gdGhlIEJSTFRUWSBjb25maWd1cmF0aW9uIGZpbGUgdGhyb3VnaAorICAgdGhlIHNwZWVjaC1wYXJhbWV0ZXIga2V5d29yZC4KKy1TcGVjaWZpZWQgb24gdGhlIGNvbW1hbmQtbGluZSB1c2luZyB0aGUgLVMgb3B0aW9uLgorCitJbiB0aGUgbGFzdCB0d28gY2FzZXMsIHRoZSBmb3JtYXQgaXM6CisgICBwcm9ncmFtPTxleHRQcm9nUGF0aD5bLHVpZD08bnVtZXJpY2FsX3VpZD5dWyxnaWQ9PG51bWVyaWNhbF9naWQ+XQord2l0aG91dCBzcGFjZS4KK0FzIGluOgorc3BlZWNoLXBhcmFtZXRlciBwcm9ncmFtPS9ob21lL3N0ZXBoL3ZpYS0wLjMvdmlhX3dyYXBwZXIsdWlkPTUwMSxnaWQ9NTAxCisKK0F2b2lkIGV4ZWN1dGluZyB0aGUgZXh0ZXJuYWwgcHJvZ3JhbSBhcyByb290IGlmIGF0IGFsbCBwb3NzaWJsZS4gVGhlCithY2NvdW50IHlvdSBjaG9vc2UgbWF5IHJlcXVpcmUgc29tZSByaWdodHMgc3VjaCBhcyBhY2Nlc3MgdG8gdGhlCitzb3VuZGNhcmQgZGV2aWNlLgpkaWZmIC0tZ2l0IGEvRHJpdmVycy9TcGVlY2gvRXh0ZXJuYWxTcGVlY2gvc3BlZWNoLmMgYi9Ecml2ZXJzL1NwZWVjaC9FeHRlcm5hbFNwZWVjaC9zcGVlY2guYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYmVmMDk3Ci0tLSAvZGV2L251bGwKKysrIGIvRHJpdmVycy9TcGVlY2gvRXh0ZXJuYWxTcGVlY2gvc3BlZWNoLmMKQEAgLTAsMCArMSwyODIgQEAKKy8qCisgKiBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorICogICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorICoKKyAqIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorICoKKyAqIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyAqLworCisvKiBFeHRlcm5hbFNwZWVjaC9zcGVlY2guYyAtIFNwZWVjaCBsaWJyYXJ5IChkcml2ZXIpCisgKiBGb3IgZXh0ZXJuYWwgcHJvZ3JhbXMsIHVzaW5nIG15IG93biBwcm90b2NvbC4gRmVhdHVyZXMgaW5kZXhpbmcuCisgKiBTdOlwaGFuZSBEb3lvbiA8cy5kb3lvbkB2aWRlb3Ryb24uY2E+CisgKi8KKworI2luY2x1ZGUgInByb2xvZ3VlLmgiCisKKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyNpbmNsdWRlIDxzeXMvdW4uaD4KKworI2luY2x1ZGUgImxvZy5oIgorI2luY2x1ZGUgInRpbWluZy5oIgorI2luY2x1ZGUgImlvX21pc2MuaCIKKyNpbmNsdWRlICJhc3luY19oYW5kbGUuaCIKKyNpbmNsdWRlICJhc3luY19pby5oIgorCit0eXBlZGVmIGVudW0geworICBQQVJNX1NPQ0tFVF9QQVRILAorfSBEcml2ZXJQYXJhbWV0ZXI7CisKKyNkZWZpbmUgU1BLUEFSTVMgInNvY2tldF9wYXRoIgorI2luY2x1ZGUgInNwa19kcml2ZXIuaCIKKyNpbmNsdWRlICJzcGVlY2guaCIKKworc3RhdGljIGNvbnN0IGNoYXIgKnNvY2tldFBhdGggPSBOVUxMOworc3RhdGljIHN0cnVjdCBzb2NrYWRkcl91biBzb2NrZXRBZGRyZXNzOworc3RhdGljIGludCBzb2NrZXREZXNjcmlwdG9yID0gLTE7CisKK3N0YXRpYyB1aW50MTZfdCB0b3RhbENoYXJhY3RlckNvdW50OworI2RlZmluZSBUUkFDS19EQVRBX1NJWkUgMgorc3RhdGljIEFzeW5jSGFuZGxlIHRyYWNrSGFuZGxlID0gTlVMTDsKKworQVNZTkNfSU5QVVRfQ0FMTEJBQ0soeHNIYW5kbGVTcGVlY2hUcmFja2luZ0lucHV0KSB7CisgIFNwZWVjaFN5bnRoZXNpemVyICpzcGsgPSBwYXJhbWV0ZXJzLT5kYXRhOworCisgIGlmIChwYXJhbWV0ZXJzLT5lcnJvcikgeworICAgIGxvZ01lc3NhZ2UoTE9HX1dBUk5JTkcsCisgICAgICAic3BlZWNoIHRyYWNraW5nIGlucHV0IGVycm9yICVkOiAlcyIsCisgICAgICBwYXJhbWV0ZXJzLT5lcnJvciwgc3RyZXJyb3IocGFyYW1ldGVycy0+ZXJyb3IpCisgICAgKTsKKyAgfSBlbHNlIGlmIChwYXJhbWV0ZXJzLT5lbmQpIHsKKyAgICBsb2dNZXNzYWdlKExPR19XQVJOSU5HLCAic3BlZWNoIHRyYWNraW5nIGVuZC1vZi1maWxlIik7CisgIH0gZWxzZSBpZiAocGFyYW1ldGVycy0+bGVuZ3RoID49IFRSQUNLX0RBVEFfU0laRSkgeworICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZmZlciA9IHBhcmFtZXRlcnMtPmJ1ZmZlcjsKKyAgICB1aW50MTZfdCBsb2NhdGlvbiA9IChidWZmZXJbMF0gPDwgOCkgfCBidWZmZXJbMV07CisKKyAgICBpZiAobG9jYXRpb24gPCB0b3RhbENoYXJhY3RlckNvdW50KSB7CisgICAgICB0ZWxsU3BlZWNoTG9jYXRpb24oc3BrLCBsb2NhdGlvbik7CisgICAgfSBlbHNlIHsKKyAgICAgIHRlbGxTcGVlY2hGaW5pc2hlZChzcGspOworICAgIH0KKworICAgIHJldHVybiBUUkFDS19EQVRBX1NJWkU7CisgIH0KKworICByZXR1cm4gMDsKK30KKworc3RhdGljIGludAorYW1Db25uZWN0ZWQgKHZvaWQpIHsKKyAgcmV0dXJuIHNvY2tldERlc2NyaXB0b3IgIT0gLTE7Cit9CisKK3N0YXRpYyBpbnQKK2Nvbm5lY3RUb1NlcnZlciAoU3BlZWNoU3ludGhlc2l6ZXIgKnNwaykgeworICBpZiAoYW1Db25uZWN0ZWQoKSkgcmV0dXJuIDE7CisKKyAgbG9nTWVzc2FnZShMT0dfQ0FURUdPUlkoU1BFRUNIX0RSSVZFUiksICJjb25uZWN0aW5nIHRvIHNlcnZlcjogJXMiLCBzb2NrZXRQYXRoKTsKKyAgaW50IHNkID0gc29ja2V0KEFGX1VOSVgsIFNPQ0tfU1RSRUFNLCAwKTsKKworICBpZiAoc2QgIT0gLTEpIHsKKyAgICBpZiAoc2V0Q2xvc2VPbkV4ZWMoc2QsIDEpKSB7CisgICAgICBpZiAoY29ubmVjdChzZCwgKGNvbnN0IHN0cnVjdCBzb2NrYWRkciAqKSZzb2NrZXRBZGRyZXNzLCBzaXplb2Yoc29ja2V0QWRkcmVzcykpICE9IC0xKSB7CisgICAgICAgIGlmIChzZXRCbG9ja2luZ0lvKHNkLCAwKSkgeworICAgICAgICAgIGlmIChhc3luY1JlYWRTb2NrZXQoJnRyYWNrSGFuZGxlLCBzZCwgVFJBQ0tfREFUQV9TSVpFLCB4c0hhbmRsZVNwZWVjaFRyYWNraW5nSW5wdXQsIHNwaykpIHsKKyAgICAgICAgICAgIGxvZ01lc3NhZ2UoTE9HX0NBVEVHT1JZKFNQRUVDSF9EUklWRVIpLCAiY29ubmVjdGVkIHRvIHNlcnZlcjogZmQ9JWQiLCBzZCk7CisgICAgICAgICAgICBzb2NrZXREZXNjcmlwdG9yID0gc2Q7CisgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgIH0gZWxzZSB7CisgICAgICAgIGxvZ1N5c3RlbUVycm9yKCJjb25uZWN0Iik7CisgICAgICB9CisgICAgfQorCisgICAgY2xvc2Uoc2QpOworICB9IGVsc2UgeworICAgIGxvZ1N5c3RlbUVycm9yKCJzb2NrZXQiKTsKKyAgfQorCisgIHJldHVybiAwOworfQorCitzdGF0aWMgdm9pZAorZGlzY29ubmVjdEZyb21TZXJ2ZXIgKHZvaWQpIHsKKyAgaWYgKGFtQ29ubmVjdGVkKCkpIHsKKyAgICBsb2dNZXNzYWdlKExPR19DQVRFR09SWShTUEVFQ0hfRFJJVkVSKSwgImRpc2Nvbm5lY3RpbmcgZnJvbSBzZXJ2ZXIiKTsKKworICAgIGlmICh0cmFja0hhbmRsZSkgeworICAgICAgYXN5bmNDYW5jZWxSZXF1ZXN0KHRyYWNrSGFuZGxlKTsKKyAgICAgIHRyYWNrSGFuZGxlID0gTlVMTDsKKyAgICB9CisKKyAgICBjbG9zZShzb2NrZXREZXNjcmlwdG9yKTsKKyAgICBzb2NrZXREZXNjcmlwdG9yID0gLTE7CisgIH0KK30KKworc3RhdGljIGludAorc2VuZFBhY2tldCAoU3BlZWNoU3ludGhlc2l6ZXIgKnNwaywgY29uc3QgdW5zaWduZWQgY2hhciAqcGFja2V0LCBzaXplX3QgbGVuZ3RoKSB7CisgIGlmICghYW1Db25uZWN0ZWQoKSkgeworICAgIGlmICghY29ubmVjdFRvU2VydmVyKHNwaykpIHsKKyAgICAgIHJldHVybiAwOworICAgIH0KKyAgfQorCisgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnBvc2l0aW9uID0gcGFja2V0OworICBjb25zdCB1bnNpZ25lZCBjaGFyICplbmQgPSBwb3NpdGlvbiArIGxlbmd0aDsKKworICBUaW1lUGVyaW9kIHBlcmlvZDsKKyAgc3RhcnRUaW1lUGVyaW9kKCZwZXJpb2QsIFhTX1dSSVRFX1RJTUVPVVQpOworCisgIHdoaWxlIChwb3NpdGlvbiA8IGVuZCkgeworICAgIGlmIChhZnRlclRpbWVQZXJpb2QoJnBlcmlvZCwgTlVMTCkpIHsKKyAgICAgIGxvZ01lc3NhZ2UoTE9HX0VSUiwgIkV4dGVybmFsU3BlZWNoIHdyaXRlIHRpbWVkIG91dCIpOworICAgICAgZGlzY29ubmVjdEZyb21TZXJ2ZXIoKTsKKyAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIHNzaXplX3QgcmVzdWx0ID0gd3JpdGUoc29ja2V0RGVzY3JpcHRvciwgcG9zaXRpb24sIChlbmQgLSBwb3NpdGlvbikpOworCisgICAgaWYgKHJlc3VsdCA9PSAtMSkgeworICAgICAgaWYgKChlcnJubyA9PSBFSU5UUikgfHwgKGVycm5vID09IEVBR0FJTikpIGNvbnRpbnVlOworCisgICAgICBsb2dNZXNzYWdlKExPR19FUlIsCisgICAgICAgICJFeHRlcm5hbFNwZWVjaCB3cml0ZSBlcnJvciAlZDogJXMiLAorICAgICAgICBlcnJubywgc3RyZXJyb3IoZXJybm8pCisgICAgICApOworCisgICAgICBkaXNjb25uZWN0RnJvbVNlcnZlcigpOworICAgICAgaWYgKCFjb25uZWN0VG9TZXJ2ZXIoc3BrKSkgcmV0dXJuIDA7CisKKyAgICAgIHBvc2l0aW9uID0gcGFja2V0OworICAgICAgY29udGludWU7CisgICAgfQorCisgICAgcG9zaXRpb24gKz0gcmVzdWx0OworICB9CisKKyAgcmV0dXJuIDE7Cit9CisKK3N0YXRpYyB2b2lkCitzcGtfc2F5IChTcGVlY2hTeW50aGVzaXplciAqc3BrLCBjb25zdCB1bnNpZ25lZCBjaGFyICp0ZXh0LCBzaXplX3QgbGVuZ3RoLCBzaXplX3QgY291bnQsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmF0dHJpYnV0ZXMpIHsKKyAgaWYgKCFhdHRyaWJ1dGVzKSBjb3VudCA9IDA7CisKKyAgdW5zaWduZWQgY2hhciBwYWNrZXRbNSArIGxlbmd0aCArIGNvdW50XTsKKyAgdW5zaWduZWQgY2hhciAqcCA9IHBhY2tldDsKKworICAqcCsrID0gNDsKKyAgKnArKyA9IGxlbmd0aCA+PiA4OworICAqcCsrID0gbGVuZ3RoICYgMFhGRjsKKyAgKnArKyA9IGNvdW50ID4+IDg7CisgICpwKysgPSBjb3VudCAmIDBYRkY7CisgIHAgPSBtZW1wY3B5KHAsIHRleHQsIGxlbmd0aCk7CisgIHAgPSBtZW1wY3B5KHAsIGF0dHJpYnV0ZXMsIGNvdW50KTsKKworICBpZiAoc2VuZFBhY2tldChzcGssIHBhY2tldCwgKHAgLSBwYWNrZXQpKSkgeworICAgIHRvdGFsQ2hhcmFjdGVyQ291bnQgPSBjb3VudDsKKyAgfQorfQorCitzdGF0aWMgdm9pZAorc3BrX211dGUgKFNwZWVjaFN5bnRoZXNpemVyICpzcGspIHsKKyAgbG9nTWVzc2FnZShMT0dfQ0FURUdPUlkoU1BFRUNIX0RSSVZFUiksICJtdXRlIik7CisKKyAgdW5zaWduZWQgY2hhciBwYWNrZXRbXSA9IHsxfTsKKyAgc2VuZFBhY2tldChzcGssIHBhY2tldCwgc2l6ZW9mKHBhY2tldCkpOworfQorCitzdGF0aWMgdm9pZAorc3BrX3NldFZvbHVtZSAoU3BlZWNoU3ludGhlc2l6ZXIgKnNwaywgdW5zaWduZWQgY2hhciBzZXR0aW5nKSB7CisgIHVuc2lnbmVkIGNoYXIgcGVyY2VudGFnZSA9IGdldEludGVnZXJTcGVlY2hWb2x1bWUoc2V0dGluZywgMTAwKTsKKworICBsb2dNZXNzYWdlKAorICAgIExPR19DQVRFR09SWShTUEVFQ0hfRFJJVkVSKSwKKyAgICAic2V0IHZvbHVtZSB0byAldSAoJXUlJSkiLAorICAgIHNldHRpbmcsIHBlcmNlbnRhZ2UKKyAgKTsKKworICB1bnNpZ25lZCBjaGFyIHBhY2tldFtdID0gezIsIHBlcmNlbnRhZ2V9OworICBzZW5kUGFja2V0KHNwaywgcGFja2V0LCBzaXplb2YocGFja2V0KSk7Cit9CisKK3N0YXRpYyBpbnQKK3NlbmRGbG9hdFNldHRpbmcgKFNwZWVjaFN5bnRoZXNpemVyICpzcGssIHVuc2lnbmVkIGNoYXIgY29kZSwgZmxvYXQgdmFsdWUpIHsKKyAgdW5zaWduZWQgY2hhciBwYWNrZXRbNV0gPSB7Y29kZX07CisgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnYgPSAoY29uc3QgdW5zaWduZWQgY2hhciAqKSZ2YWx1ZTsKKworI2lmZGVmIFdPUkRTX0JJR0VORElBTgorICBwYWNrZXRbMV0gPSB2WzBdOworICBwYWNrZXRbMl0gPSB2WzFdOworICBwYWNrZXRbM10gPSB2WzJdOworICBwYWNrZXRbNF0gPSB2WzNdOworI2Vsc2UgLyogV09SRFNfQklHRU5ESUFOICovCisgIHBhY2tldFsxXSA9IHZbM107CisgIHBhY2tldFsyXSA9IHZbMl07CisgIHBhY2tldFszXSA9IHZbMV07CisgIHBhY2tldFs0XSA9IHZbMF07CisjZW5kaWYgLyogV09SRFNfQklHRU5ESUFOICovCisKKyAgcmV0dXJuIHNlbmRQYWNrZXQoc3BrLCBwYWNrZXQsIHNpemVvZihwYWNrZXQpKTsKK30KKworc3RhdGljIHZvaWQKK3Nwa19zZXRSYXRlIChTcGVlY2hTeW50aGVzaXplciAqc3BrLCB1bnNpZ25lZCBjaGFyIHNldHRpbmcpIHsKKyAgZmxvYXQgc3RyZXRjaCA9IDEuMCAvIGdldEZsb2F0U3BlZWNoUmF0ZShzZXR0aW5nKTsgCisKKyAgbG9nTWVzc2FnZSgKKyAgICBMT0dfQ0FURUdPUlkoU1BFRUNIX0RSSVZFUiksCisgICAgInNldCByYXRlIHRvICV1ICh0aW1lIHNjYWxlICVmKSIsCisgICAgc2V0dGluZywgc3RyZXRjaAorICApOworCisgIHNlbmRGbG9hdFNldHRpbmcoc3BrLCAzLCBzdHJldGNoKTsKK30KKworc3RhdGljIHZvaWQKK3Nwa19zZXRQaXRjaCAoU3BlZWNoU3ludGhlc2l6ZXIgKnNwaywgdW5zaWduZWQgY2hhciBzZXR0aW5nKSB7CisgIGZsb2F0IG11bHRpcGxpZXIgPSBnZXRGbG9hdFNwZWVjaFBpdGNoKHNldHRpbmcpOyAKKworICBsb2dNZXNzYWdlKAorICAgIExPR19DQVRFR09SWShTUEVFQ0hfRFJJVkVSKSwKKyAgICAic2V0IHBpdGNoIHRvICV1IChtdWx0aXBsaWVyICVmKSIsCisgICAgc2V0dGluZywgbXVsdGlwbGllcgorICApOworCisgIHNlbmRGbG9hdFNldHRpbmcoc3BrLCA1LCBtdWx0aXBsaWVyKTsKK30KKworc3RhdGljIGludAorc3BrX2NvbnN0cnVjdCAoU3BlZWNoU3ludGhlc2l6ZXIgKnNwaywgY2hhciAqKnBhcmFtZXRlcnMpIHsKKyAgc3BrLT5zZXRWb2x1bWUgPSBzcGtfc2V0Vm9sdW1lOworICBzcGstPnNldFJhdGUgPSBzcGtfc2V0UmF0ZTsKKyAgc3BrLT5zZXRQaXRjaCA9IHNwa19zZXRQaXRjaDsKKworICBzb2NrZXRQYXRoID0gcGFyYW1ldGVyc1tQQVJNX1NPQ0tFVF9QQVRIXTsKKyAgaWYgKCFzb2NrZXRQYXRoIHx8ICEqc29ja2V0UGF0aCkgc29ja2V0UGF0aCA9IFhTX0RFRkFVTFRfU09DS0VUX1BBVEg7CisKKyAgbWVtc2V0KCZzb2NrZXRBZGRyZXNzLCAwLCBzaXplb2Yoc29ja2V0QWRkcmVzcykpOworICBzb2NrZXRBZGRyZXNzLnN1bl9mYW1pbHkgPSBBRl9VTklYOworICBzdHJuY3B5KHNvY2tldEFkZHJlc3Muc3VuX3BhdGgsIHNvY2tldFBhdGgsIHNpemVvZihzb2NrZXRBZGRyZXNzLnN1bl9wYXRoKS0xKTsKKworICBzb2NrZXREZXNjcmlwdG9yID0gLTE7CisgIHRyYWNrSGFuZGxlID0gTlVMTDsKKyAgcmV0dXJuIGNvbm5lY3RUb1NlcnZlcihzcGspOworfQorCitzdGF0aWMgdm9pZAorc3BrX2Rlc3RydWN0IChTcGVlY2hTeW50aGVzaXplciAqc3BrKSB7CisgIGRpc2Nvbm5lY3RGcm9tU2VydmVyKCk7Cit9CmRpZmYgLS1naXQgYS9Ecml2ZXJzL1NwZWVjaC9FeHRlcm5hbFNwZWVjaC9zcGVlY2guaCBiL0RyaXZlcnMvU3BlZWNoL0V4dGVybmFsU3BlZWNoL3NwZWVjaC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIzNDU1M2EKLS0tIC9kZXYvbnVsbAorKysgYi9Ecml2ZXJzL1NwZWVjaC9FeHRlcm5hbFNwZWVjaC9zcGVlY2guaApAQCAtMCwwICsxLDMwIEBACisvKgorICogQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyAqICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyAqCisgKiBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorICoKKyAqIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyAqCisgKiBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisgKi8KKworLyogRXh0ZXJuYWxTcGVlY2gvc3BlZWNoLmggKi8KKworLyogVGhlIGZvbGxvd2luZyBhcmUgdGhlIGRlZmF1bHQgcGFyYW1ldGVycyB0aGF0IHdpbGwgYmUgdXNlZCBpZiBubyBwYXJhbWV0ZXIKKyAgIGlzIHNwZWNpZmllZCBvbiB0aGUgY29tbWFuZC1saW5lICgtcCkgb3IgaW4gdGhlIGJybHR0eS5jb25mIGZpbGUKKyAgIChzcGVlY2gtZHJpdmVycGFybSBvcHRpb24pLiAqLworCisvKiBUaGUgZGVmYXVsdCBwYXRoIG9mIHRoZSBVTklYLWRvbWFpbiBzb2NrZXQgZm9yIHRoZSBleHRlcm5hbCBoZWxwZXIgcHJvZ3JhbS4KKyAqLworI2RlZmluZSBYU19ERUZBVUxUX1NPQ0tFVF9QQVRIICIvdG1wL2V4cy1kYXRhIgorCisvKiBUaGUgbWF4ZGltdW0gYW1vdW50IG9mIHRpbWUgdGhhdCBhIHdyaXRlIHRvIHRoZSBzb2NrZXQgbWF5IHRha2UuICovCisjZGVmaW5lIFhTX1dSSVRFX1RJTUVPVVQgMjAwMApkaWZmIC0tZ2l0IGEvRHJpdmVycy9TcGVlY2gvRmVzdGl2YWwvTWFrZWZpbGUuaW4gYi9Ecml2ZXJzL1NwZWVjaC9GZXN0aXZhbC9NYWtlZmlsZS5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NDRlNzk3Ci0tLSAvZGV2L251bGwKKysrIGIvRHJpdmVycy9TcGVlY2gvRmVzdGl2YWwvTWFrZWZpbGUuaW4KQEAgLTAsMCArMSwyOCBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorIyAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyMKKyMgQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorIworIyBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorIworIyBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisjIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyMgbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisjCisjIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK0RSSVZFUl9DT0RFID0gZnYKK0RSSVZFUl9OQU1FID0gRmVzdGl2YWwKK0RSSVZFUl9VU0FHRSA9IHNvZnR3YXJlIGVuZ2luZQorRFJJVkVSX1ZFUlNJT04gPSAKK0RSSVZFUl9ERVZFTE9QRVJTID0gCitpbmNsdWRlICQoU1JDX1RPUClzcGVlY2gubWsKKworc3BlZWNoLiRPOgorCSQoQ0MpICQoU1BLX0NGTEFHUykgLWMgJChTUkNfRElSKS9zcGVlY2guYworCmRpZmYgLS1naXQgYS9Ecml2ZXJzL1NwZWVjaC9GZXN0aXZhbC9SRUFETUUgYi9Ecml2ZXJzL1NwZWVjaC9GZXN0aXZhbC9SRUFETUUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGE0Mzc1NQotLS0gL2Rldi9udWxsCisrKyBiL0RyaXZlcnMvU3BlZWNoL0Zlc3RpdmFsL1JFQURNRQpAQCAtMCwwICsxLDEyIEBACitUaGlzIGRpcmVjdG9yeSBjb250YWlucyB0aGUgQlJMVFRZIHNwZWVjaCBkcml2ZXIgZm9yIHRoZSBGZXN0aXZhbCB0ZXh0IHRvCitzcGVlY2ggZW5naW5lIGZyb20gdGhlIENlbnRyZSBmb3IgU3BlZWNoIFRlY2hub2xvZ3kgUmVzZWFyY2gKK1todHRwOi8vd3d3LmNzdHIuZWQuYWMudWsvXSBvZiB0aGUgVW5pdmVyc2l0eSBvZiBFZGluYnVyZ2gKK1todHRwOi8vd3d3LmVkLmFjLnVrL10uIEl0IHdhcyBpbXBsZW1lbnRlZCBieSBOaWtoaWwgTmFpcgorPG5uMjAxQGN1cy5jYW0uYWMudWs+LCBhbmQgaXMgYmVpbmcgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorCitUaGlzIGRyaXZlciByZWNvZ25pemVzIHRoZSBmb2xsb3dpbmcgcGFyYW1ldGVyczoKKworICAgUGFyYW1ldGVyIFNldHRpbmdzCisgICBjb21tYW5kICAgL3BhdGgvdG8vZmVzdGl2YWwvY29tbWFuZAorICAgbmFtZSAgICAgIEtldmluLCBLYWwKKwpkaWZmIC0tZ2l0IGEvRHJpdmVycy9TcGVlY2gvRmVzdGl2YWwvc3BlZWNoLmMgYi9Ecml2ZXJzL1NwZWVjaC9GZXN0aXZhbC9zcGVlY2guYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NjNlZGY3Ci0tLSAvZGV2L251bGwKKysrIGIvRHJpdmVycy9TcGVlY2gvRmVzdGl2YWwvc3BlZWNoLmMKQEAgLTAsMCArMSwxNzEgQEAKKy8qCisgKiBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorICogICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorICoKKyAqIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorICoKKyAqIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyAqLworCisvKiBCUkxUVFkgc3BlZWNoIGRyaXZlciBmb3IgdGhlIEZlc3RpdmFsIHRleHQgdG8gc3BlZWNoIGVuZ2luZS4KKyAqIFdyaXR0ZW4gYnk6IE5pa2hpbCBOYWlyIDxubjIwMUBjdXMuY2FtLmFjLnVrPgorICogTWFpbnRhaW5lZCBieTogRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPgorICovCisKKyNpbmNsdWRlICJwcm9sb2d1ZS5oIgorCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxzdHJpbmdzLmg+CisjaW5jbHVkZSA8Y3R5cGUuaD4KKworI2luY2x1ZGUgImxvZy5oIgorCit0eXBlZGVmIGVudW0geworICBQQVJNX0NPTU1BTkQsCisgIFBBUk1fTkFNRQorfSBEcml2ZXJQYXJhbWV0ZXI7CisjZGVmaW5lIFNQS1BBUk1TICJjb21tYW5kIiwgIm5hbWUiCisKKyNpbmNsdWRlICJzcGtfZHJpdmVyLmgiCisjaW5jbHVkZSAic3BlZWNoLmgiCQkvKiBmb3Igc3BlZWNoIGRlZmluaXRpb25zICovCisKK3N0YXRpYyBjaGFyICoqZmVzdGl2YWxQYXJhbWV0ZXJzID0gTlVMTDsKK3N0YXRpYyBGSUxFICpmZXN0aXZhbFN0cmVhbSA9IE5VTEw7CitzdGF0aWMgZmxvYXQgZmVzdGl2YWxSYXRlOworCitzdGF0aWMgaW50IHdyaXRlQ29tbWFuZCAoY29uc3QgY2hhciAqY29tbWFuZCwgaW50IHJlb3Blbik7CisKK3N0YXRpYyBpbnQKK3NldFJhdGUgKGZsb2F0IHNldHRpbmcsIGludCByZW9wZW4pIHsKKyAgY2hhciBjb21tYW5kWzBYNDBdOworICBzbnByaW50Zihjb21tYW5kLCBzaXplb2YoY29tbWFuZCksICIoUGFyYW1ldGVyLnNldCAnRHVyYXRpb25fU3RyZXRjaCAlZikiLCAxLjAvc2V0dGluZyk7CisgIHJldHVybiB3cml0ZUNvbW1hbmQoY29tbWFuZCwgcmVvcGVuKTsKK30KKworc3RhdGljIHZvaWQKK2Nsb3NlU3RyZWFtICh2b2lkKSB7CisgIGxvZ01lc3NhZ2UoTE9HX0RFQlVHLCAic3RvcHBpbmcgZmVzdGl2YWwiKTsKKyAgcGNsb3NlKGZlc3RpdmFsU3RyZWFtKTsKKyAgZmVzdGl2YWxTdHJlYW0gPSBOVUxMOworfQorCitzdGF0aWMgaW50CitvcGVuU3RyZWFtICh2b2lkKSB7CisgIGNvbnN0IGNoYXIgKmNvbW1hbmQgPSBmZXN0aXZhbFBhcmFtZXRlcnNbUEFSTV9DT01NQU5EXTsKKyAgaWYgKCFjb21tYW5kIHx8ICEqY29tbWFuZCkgY29tbWFuZCA9ICJmZXN0aXZhbCI7CisKKyAgbG9nTWVzc2FnZShMT0dfREVCVUcsICJzdGFydGluZyBmZXN0aXZhbDogY29tbWFuZD0lcyIsIGNvbW1hbmQpOworICBpZiAoKGZlc3RpdmFsU3RyZWFtID0gcG9wZW4oY29tbWFuZCwgInciKSkpIHsKKyAgICBzZXR2YnVmKGZlc3RpdmFsU3RyZWFtLCBOVUxMLCBfSU9MQkYsIDBYMTAwMCk7CisKKyAgICBpZiAoIXdyaXRlQ29tbWFuZCgiKGdjLXN0YXR1cyBuaWwpIiwgMCkpIHJldHVybiAwOworICAgIGlmICghd3JpdGVDb21tYW5kKCIoYXVkaW9fbW9kZSAnYXN5bmMpIiwgMCkpIHJldHVybiAwOworICAgIGlmICghd3JpdGVDb21tYW5kKCIoUGFyYW1ldGVyLnNldCAnQXVkaW9fTWV0aG9kICduZXRhdWRpbykiLCAwKSkgcmV0dXJuIDA7CisKKyAgICB7CisgICAgICBjb25zdCBjaGFyICpuYW1lID0gZmVzdGl2YWxQYXJhbWV0ZXJzW1BBUk1fTkFNRV07CisgICAgICBpZiAobmFtZSAmJiAqbmFtZSkgeworICAgICAgICBpZiAoc3RyY2FzZWNtcChuYW1lLCAiS2V2aW4iKSA9PSAwKSB7CisgICAgICAgICAgaWYgKCF3cml0ZUNvbW1hbmQoIih2b2ljZV9rZWRfZGlwaG9uZSkiLCAwKSkgcmV0dXJuIDA7CisgICAgICAgIH0gZWxzZSBpZiAoc3RyY2FzZWNtcChuYW1lLCAiS2FsIikgPT0gMCkgeworICAgICAgICAgIGlmICghd3JpdGVDb21tYW5kKCIodm9pY2Vfa2FsX2RpcGhvbmUpIiwgMCkpIHJldHVybiAwOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgIGxvZ01lc3NhZ2UoTE9HX1dBUk5JTkcsICJ1bmtub3duIEZlc3RpdmFsIHZvaWNlIG5hbWU6ICVzIiwgbmFtZSk7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoZmVzdGl2YWxSYXRlICE9IDAuMCkKKyAgICAgIGlmICghc2V0UmF0ZShmZXN0aXZhbFJhdGUsIDApKQorICAgICAgICByZXR1cm4gMDsKKworICAgIHJldHVybiAxOworICB9CisKKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK3dyaXRlU3RyaW5nIChjb25zdCBjaGFyICpzdHJpbmcsIGludCByZW9wZW4pIHsKKyAgaWYgKCFmZXN0aXZhbFN0cmVhbSkgeworICAgIGlmICghcmVvcGVuKSByZXR1cm4gMDsKKyAgICBpZiAoIW9wZW5TdHJlYW0oKSkgcmV0dXJuIDA7CisgIH0KKworICBmcHV0cyhzdHJpbmcsIGZlc3RpdmFsU3RyZWFtKTsKKyAgaWYgKCFmZXJyb3IoZmVzdGl2YWxTdHJlYW0pKSByZXR1cm4gMTsKKworICBsb2dTeXN0ZW1FcnJvcigiZnB1dHMiKTsKKyAgY2xvc2VTdHJlYW0oKTsKKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK3dyaXRlQ29tbWFuZCAoY29uc3QgY2hhciAqY29tbWFuZCwgaW50IHJlb3BlbikgeworICByZXR1cm4gd3JpdGVTdHJpbmcoY29tbWFuZCwgcmVvcGVuKSAmJiB3cml0ZVN0cmluZygiXG4iLCAwKTsKK30KKworc3RhdGljIHZvaWQKK3Nwa19zZXRSYXRlIChTcGVlY2hTeW50aGVzaXplciAqc3BrLCB1bnNpZ25lZCBjaGFyIHNldHRpbmcpIHsKKyAgc2V0UmF0ZShmZXN0aXZhbFJhdGU9Z2V0RmxvYXRTcGVlY2hSYXRlKHNldHRpbmcpLCAxKTsKK30KKworc3RhdGljIGludAorc3BrX2NvbnN0cnVjdCAoU3BlZWNoU3ludGhlc2l6ZXIgKnNwaywgY2hhciAqKnBhcmFtZXRlcnMpIHsKKyAgc3BrLT5zZXRSYXRlID0gc3BrX3NldFJhdGU7CisKKyAgZmVzdGl2YWxQYXJhbWV0ZXJzID0gcGFyYW1ldGVyczsKKyAgZmVzdGl2YWxSYXRlID0gMC4wOworICByZXR1cm4gb3BlblN0cmVhbSgpOworfQorCitzdGF0aWMgdm9pZAorc3BrX2Rlc3RydWN0IChTcGVlY2hTeW50aGVzaXplciAqc3BrKSB7CisgIGlmICh3cml0ZUNvbW1hbmQoIihxdWl0KSIsIDApKSBjbG9zZVN0cmVhbSgpOworICBmZXN0aXZhbFBhcmFtZXRlcnMgPSBOVUxMOworfQorCitzdGF0aWMgdm9pZAorc3BrX3NheSAoU3BlZWNoU3ludGhlc2l6ZXIgKnNwaywgY29uc3QgdW5zaWduZWQgY2hhciAqYnVmZmVyLCBzaXplX3QgbGVuZ3RoLCBzaXplX3QgY291bnQsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmF0dHJpYnV0ZXMpIHsKKyAgaW50IHN0YXJ0ZWQgPSAwOworICB1bnNpZ25lZCBpbnQgaW5kZXg7CisKKyAgZm9yIChpbmRleD0wOyBpbmRleDxsZW5ndGg7IGluZGV4Kz0xKSB7CisgICAgdW5zaWduZWQgY2hhciBieXRlID0gYnVmZmVyW2luZGV4XTsKKyAgICBpZiAoaXNjbnRybChieXRlKSkgYnl0ZSA9ICcgJzsKKworICAgIGlmICghaXNzcGFjZShieXRlKSkgeworICAgICAgaWYgKCFzdGFydGVkKSB7CisgICAgICAgIGlmICghd3JpdGVTdHJpbmcoIihTYXlUZXh0IFwiIiwgMSkpIHJldHVybjsKKyAgICAgICAgc3RhcnRlZCA9IDE7CisgICAgICB9CisgICAgfQorCisgICAgaWYgKHN0YXJ0ZWQpIHsKKyAgICAgIGNvbnN0IGNoYXIgYnl0ZXNbXSA9IHsnXFwnLCBieXRlLCAwfTsKKyAgICAgIGNvbnN0IGNoYXIgKnN0cmluZyA9IGJ5dGVzOworCisgICAgICBpZiAoIXN0cmNocigiXFxcIiIsIGJ5dGUpKSBzdHJpbmcgKz0gMTsKKyAgICAgIGlmICghd3JpdGVTdHJpbmcoc3RyaW5nLCAwKSkgcmV0dXJuOworICAgIH0KKyAgfQorCisgIGlmIChzdGFydGVkKSB7CisgICAgaWYgKCF3cml0ZVN0cmluZygiXCIpXG4iLCAwKSkgcmV0dXJuOworICB9Cit9CisKK3N0YXRpYyB2b2lkCitzcGtfbXV0ZSAoU3BlZWNoU3ludGhlc2l6ZXIgKnNwaykgeworICB3cml0ZUNvbW1hbmQoIihhdWRpb19tb2RlICdzaHV0dXApIiwgMCk7Cit9CmRpZmYgLS1naXQgYS9Ecml2ZXJzL1NwZWVjaC9GZXN0aXZhbC9zcGVlY2guaCBiL0RyaXZlcnMvU3BlZWNoL0Zlc3RpdmFsL3NwZWVjaC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMwOTY3NzUKLS0tIC9kZXYvbnVsbAorKysgYi9Ecml2ZXJzL1NwZWVjaC9GZXN0aXZhbC9zcGVlY2guaApAQCAtMCwwICsxLDI2IEBACisvKgorICogQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyAqICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyAqCisgKiBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorICoKKyAqIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyAqCisgKiBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisgKi8KKworLyogRmVzdGl2YWwvc3BlZWNoLmggLSBkZWZpbml0aW9ucyBmb3IgcnVkaW1lbnRhcnkgc3BlZWNoIHN1cHBvcnQKKyAqIE4uIE5haXIsIDQgT2N0b2JlciAxOTk4CisgKi8KKworLyogVGhlc2Ugc2VxdWVuY2VzIGFyZSBzZW50IHRvIEZlc3RpdmFsJ3MgY29tbWFuZCBtb2RlLgorICogVGhlIGZpcnN0IGJ5dGUgaXMgdGhlIGxlbmd0aCwgc28gZW1iZWRkZWQgbnVscyBhcmUgYWxsb3dlZC4KKyAqLworCmRpZmYgLS1naXQgYS9Ecml2ZXJzL1NwZWVjaC9GZXN0aXZhbExpdGUvTWFrZWZpbGUuaW4gYi9Ecml2ZXJzL1NwZWVjaC9GZXN0aXZhbExpdGUvTWFrZWZpbGUuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjc3N2E1ZgotLS0gL2Rldi9udWxsCisrKyBiL0RyaXZlcnMvU3BlZWNoL0Zlc3RpdmFsTGl0ZS9NYWtlZmlsZS5pbgpAQCAtMCwwICsxLDI5IEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisjICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorIworIyBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisjCisjIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisjCisjIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyMgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorIyBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyMKKyMgV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworIworIyBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworRFJJVkVSX0NPREUgPSBmbAorRFJJVkVSX05BTUUgPSBGZXN0aXZhbExpdGUKK0RSSVZFUl9VU0FHRSA9IHNvZnR3YXJlIGVuZ2luZQorRFJJVkVSX1ZFUlNJT04gPSAKK0RSSVZFUl9ERVZFTE9QRVJTID0gCitTUEtfT0JKUyA9IEBzcGVlY2hfbGlicmFyaWVzX2ZsQAoraW5jbHVkZSAkKFNSQ19UT1Apc3BlZWNoLm1rCisKK3NwZWVjaC4kTzoKKwkkKENDKSAkKFNQS19DRkxBR1MpIC1JJChGTElURV9ST09UKS9pbmNsdWRlL2ZsaXRlIC1EUkVHSVNURVJfVk9YPXJlZ2lzdGVyXyQoRkxJVEVfVk9JQ0UpIC1EVU5SRUdJU1RFUl9WT1g9dW5yZWdpc3Rlcl8kKEZMSVRFX1ZPSUNFKSAtYyAkKFNSQ19ESVIpL3NwZWVjaC5jCisKZGlmZiAtLWdpdCBhL0RyaXZlcnMvU3BlZWNoL0Zlc3RpdmFsTGl0ZS9SRUFETUUgYi9Ecml2ZXJzL1NwZWVjaC9GZXN0aXZhbExpdGUvUkVBRE1FCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQyYzdlNmYKLS0tIC9kZXYvbnVsbAorKysgYi9Ecml2ZXJzL1NwZWVjaC9GZXN0aXZhbExpdGUvUkVBRE1FCkBAIC0wLDAgKzEsMjMgQEAKK1RoaXMgZGlyZWN0b3J5IGNvbnRhaW5zIHRoZSBCUkxUVFkgc3BlZWNoIGRyaXZlciBmb3IgdGhlIEZlc3RpdmFsIExpdGUgdGV4dCB0bworc3BlZWNoIGVuZ2luZSBmcm9tIHRoZSBDTVUgU3BlZWNoIENlbnRlciBbaHR0cDovL3d3dy5zcGVlY2guY3MuY211LmVkdS9mbGl0ZS9dCitvZiBDYXJuZWdpZSBNZWxsb24gVW5pdmVyc2l0eSBbaHR0cDovL3d3dy5jbXUuZWR1XS4gSXQgd2FzIGltcGxlbWVudGVkLCBhbmQgaXMKK2JlaW5nIG1haW50YWluZWQsIGJ5IE1hcmlvIExhbmcgPG1sYW5nQGRlbHlzaWQub3JnPi4KKworQlJMVFRZJ3MgY29uZmlndXJlIHNjcmlwdCBhdXRvbWF0aWNhbGx5IGluY2x1ZGVzIHRoaXMgZHJpdmVyIGlmIEZlc3RpdmFsIExpdGUKK2hhcyBiZWVuIGluc3RhbGxlZC4gVGhlIGRlZmF1bHQgaXMgdG8gY2hlY2sgdGhlIGRpcmVjdG9yaWVzIC91c3IsIC91c3IvbG9jYWwsCisvdXNyL2xvY2FsL0Zlc3RpdmFsTGl0ZSwgL3Vzci9sb2NhbC9mbGl0ZSwgL29wdC9GZXN0aXZhbExpdGUsIGFuZCAvb3B0L2ZsaXRlLiAKK1RoZSBhY3R1YWwgbG9jYXRpb24gY2FuIGJlIGV4cGxpY2l0bHkgc3BlY2lmaWVkIHZpYSAtLXdpdGgtZmxpdGUuIAorCitBZGRpdGlvbmFsbHksIEZlc3RpdmFsIExpdGUncyBsYW5ndWFnZSwgbGV4aWNvbiBhbmQgdm9pY2UgY2FuIGJlIHNwZWNpZmllZAordXNpbmcgdGhlIGNvbmZpZ3VyZSBzY3JpcHQgb3B0aW9ucyAtLXdpdGgtZmxpdGUtbGFuZ3VhZ2UsIC0td2l0aC1mbGl0ZS1sZXhpY29uCithbmQgLS13aXRoLWZsaXRlLXZvaWNlLiBUaGUgZGVmYXVsdCB2b2ljZSBpcyBjbXVfdXNfa2FsMTYuCisKK1RoaXMgZHJpdmVyIGFuZCB0aGF0IGZvciB0aGUgVGhldGEgdGV4dCB0byBzcGVlY2ggZW5naW5lIGNhbm5vdCBiZSBsaW5rZWQgaW50bworQlJMVFRZJ3MgYmluYXJ5IGF0IHRoZSBzYW1lIHRpbWUgKHZpYSAtLWVuYWJsZS1zcGVlY2gtZHJpdmVyKSBiZWNhdXNlIHRoZWlyCitydW4tdGltZSBsaWJyYXJpZXMgY29udGFpbiBjb25mbGljdGluZyBzeW1ib2xzLgorCitUaGlzIGRyaXZlciByZWNvZ25pemVzIHRoZSBmb2xsb3dpbmcgcGFyYW1ldGVyczoKKworICAgUGFyYW1ldGVyIFNldHRpbmdzCisgICBwaXRjaCAgICAgNTAtMjAwIChwZXJjZW50IGZyb20gZGVmYXVsdCkKKwpkaWZmIC0tZ2l0IGEvRHJpdmVycy9TcGVlY2gvRmVzdGl2YWxMaXRlL3NwZWVjaC5jIGIvRHJpdmVycy9TcGVlY2gvRmVzdGl2YWxMaXRlL3NwZWVjaC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIxOGVhZTIKLS0tIC9kZXYvbnVsbAorKysgYi9Ecml2ZXJzL1NwZWVjaC9GZXN0aXZhbExpdGUvc3BlZWNoLmMKQEAgLTAsMCArMSwxNDggQEAKKy8qCisgKiBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorICogICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorICoKKyAqIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorICoKKyAqIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyAqLworCisvKiBGZXN0aXZhbExpdGUvc3BlZWNoLmMgLSBTcGVlY2ggbGlicmFyeQorICogRm9yIHRoZSBGZXN0aXZhbCBMaXRlIHRleHQgdG8gc3BlZWNoIHBhY2thZ2UKKyAqIE1haW50YWluZWQgYnkgTWFyaW8gTGFuZyA8bWxhbmdAZGVseXNpZC5vcmc+CisgKi8KKworI2luY2x1ZGUgInByb2xvZ3VlLmgiCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHNpZ25hbC5oPgorI2luY2x1ZGUgPHN5cy93YWl0Lmg+CisKKyNpbmNsdWRlICJsb2cuaCIKKyNpbmNsdWRlICJwYXJzZS5oIgorCit0eXBlZGVmIGVudW0geworICBQQVJNX3BpdGNoCit9IERyaXZlclBhcmFtZXRlcjsKKyNkZWZpbmUgU1BLUEFSTVMgInBpdGNoIgorCisjaW5jbHVkZSAic3BrX2RyaXZlci5oIgorI2luY2x1ZGUgPGZsaXRlLmg+CisjaW5jbHVkZSA8ZmxpdGVfdmVyc2lvbi5oPgorCitleHRlcm4JY3N0X3ZvaWNlICoJUkVHSVNURVJfVk9YCShjb25zdCBjaGFyICp2b3hkaXIpOworZXh0ZXJuCXZvaWQJCVVOUkVHSVNURVJfVk9YCShjc3Rfdm9pY2UgKnZvaWNlKTsKKworc3RhdGljCWNzdF92b2ljZQkqdm9pY2UJCT0gTlVMTDsKK3N0YXRpYwljb25zdCBjaGFyCSpvdXR0eXBlCT0gInBsYXkiOworCitzdGF0aWMJcGlkX3QJCWNoaWxkCQk9IC0xOworCitzdGF0aWMJaW50CQlmZHNbMl07CitzdGF0aWMJaW50CQkqY29uc3QgcmVhZGZkCT0gJmZkc1swXTsKK3N0YXRpYwlpbnQJCSpjb25zdCB3cml0ZWZkCT0gJmZkc1sxXTsKKworc3RhdGljIHZvaWQKK3Nwa19zZXRSYXRlIChTcGVlY2hTeW50aGVzaXplciAqc3BrLCB1bnNpZ25lZCBjaGFyIHNldHRpbmcpCit7CisgIGZlYXRfc2V0X2Zsb2F0KHZvaWNlLT5mZWF0dXJlcywgImR1cmF0aW9uX3N0cmV0Y2giLCAxLjAvZ2V0RmxvYXRTcGVlY2hSYXRlKHNldHRpbmcpKTsKK30KKworc3RhdGljIGludAorc3BrX2NvbnN0cnVjdCAoU3BlZWNoU3ludGhlc2l6ZXIgKnNwaywgY2hhciAqKnBhcmFtZXRlcnMpCit7CisgIHNway0+c2V0UmF0ZSA9IHNwa19zZXRSYXRlOworCisgIGNoaWxkID0gLTE7CisgIGZsaXRlX2luaXQoKTsKKyAgdm9pY2UgPSBSRUdJU1RFUl9WT1goTlVMTCk7CisKKyAgeworICAgIGludCBwaXRjaCA9IDEwMCwgbWlucGl0Y2ggPSA1MCwgbWF4cGl0Y2ggPSAyMDA7CisgICAgaWYgKCpwYXJhbWV0ZXJzW1BBUk1fcGl0Y2hdKQorICAgICAgaWYgKCF2YWxpZGF0ZUludGVnZXIoJnBpdGNoLCBwYXJhbWV0ZXJzW1BBUk1fcGl0Y2hdLCAmbWlucGl0Y2gsICZtYXhwaXRjaCkpCisgICAgICAgIGxvZ01lc3NhZ2UoTE9HX1dBUk5JTkcsICIlczogJXMiLCAiaW52YWxpZCBwaXRjaCBzcGVjaWZpY2F0aW9uIiwgcGFyYW1ldGVyc1tQQVJNX3BpdGNoXSk7CisgICAgZmVhdF9zZXRfaW50KHZvaWNlLT5mZWF0dXJlcywgImludF9mMF90YXJnZXRfbWVhbiIsIHBpdGNoKTsKKyAgfQorCisgIGxvZ01lc3NhZ2UoTE9HX0lORk8sICJGZXN0aXZhbCBMaXRlIEVuZ2luZTogdmVyc2lvbiAlcy0lcywgJXMiLAorCSAgICAgRkxJVEVfUFJPSkVDVF9WRVJTSU9OLCBGTElURV9QUk9KRUNUX1NUQVRFLAorCSAgICAgRkxJVEVfUFJPSkVDVF9EQVRFKTsKKyAgcmV0dXJuIDE7Cit9CisKK3N0YXRpYyB2b2lkCitzcGtfZGVzdHJ1Y3QgKFNwZWVjaFN5bnRoZXNpemVyICpzcGspCit7CisgIHNwa19tdXRlKHNwayk7CisKKyAgVU5SRUdJU1RFUl9WT1godm9pY2UpOworICB2b2ljZSA9IE5VTEw7Cit9CisKK3N0YXRpYyBpbnQKK2RvQ2hpbGQgKHZvaWQpIHsKKyAgRklMRSAqc3RyZWFtID0gZmRvcGVuKCpyZWFkZmQsICJyIik7CisKKyAgaWYgKHN0cmVhbSkgeworICAgIGNoYXIgYnVmZmVyWzBYNDAwXTsKKyAgICBjaGFyICpsaW5lOworCisgICAgd2hpbGUgKChsaW5lID0gZmdldHMoYnVmZmVyLCBzaXplb2YoYnVmZmVyKSwgc3RyZWFtKSkpIHsKKyAgICAgIGZsaXRlX3RleHRfdG9fc3BlZWNoKGxpbmUsIHZvaWNlLCBvdXR0eXBlKTsKKyAgICB9CisKKyAgICBmY2xvc2Uoc3RyZWFtKTsKKyAgfQorCisgIHJldHVybiAwOworfQorCitzdGF0aWMgdm9pZAorc3BrX3NheSAoU3BlZWNoU3ludGhlc2l6ZXIgKnNwaywgY29uc3QgdW5zaWduZWQgY2hhciAqYnVmZmVyLCBzaXplX3QgbGVuZ3RoLCBzaXplX3QgY291bnQsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmF0dHJpYnV0ZXMpCit7CisgIGlmIChjaGlsZCAhPSAtMSkgZ290byByZWFkeTsKKworICBpZiAocGlwZShmZHMpICE9IC0xKSB7CisgICAgaWYgKChjaGlsZCA9IGZvcmsoKSkgPT0gLTEpIHsKKyAgICAgIGxvZ1N5c3RlbUVycm9yKCJmb3JrIik7CisgICAgfSBlbHNlIGlmIChjaGlsZCA9PSAwKSB7CisgICAgICBfZXhpdChkb0NoaWxkKCkpOworICAgIH0gZWxzZQorICAgIHJlYWR5OiB7CisgICAgICB1bnNpZ25lZCBjaGFyIHRleHRbbGVuZ3RoICsgMV07CisgICAgICBtZW1jcHkodGV4dCwgYnVmZmVyLCBsZW5ndGgpOworICAgICAgdGV4dFtsZW5ndGhdID0gJ1xuJzsKKyAgICAgIHdyaXRlKCp3cml0ZWZkLCB0ZXh0LCBzaXplb2YodGV4dCkpOworICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGNsb3NlKCpyZWFkZmQpOworICAgIGNsb3NlKCp3cml0ZWZkKTsKKyAgfSBlbHNlIHsKKyAgICBsb2dTeXN0ZW1FcnJvcigicGlwZSIpOworICB9Cit9CisKK3N0YXRpYyB2b2lkCitzcGtfbXV0ZSAoU3BlZWNoU3ludGhlc2l6ZXIgKnNwaykKK3sKKyAgaWYgKGNoaWxkICE9IC0xKSB7CisgICAgY2xvc2UoKnJlYWRmZCk7CisgICAgY2xvc2UoKndyaXRlZmQpOworCisgICAga2lsbChjaGlsZCwgU0lHS0lMTCk7CisgICAgd2FpdHBpZChjaGlsZCwgTlVMTCwgMCk7CisgICAgY2hpbGQgPSAtMTsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvRHJpdmVycy9TcGVlY2gvR2VuZXJpY1NheS9NYWtlZmlsZS5pbiBiL0RyaXZlcnMvU3BlZWNoL0dlbmVyaWNTYXkvTWFrZWZpbGUuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmMzNThmNwotLS0gL2Rldi9udWxsCisrKyBiL0RyaXZlcnMvU3BlZWNoL0dlbmVyaWNTYXkvTWFrZWZpbGUuaW4KQEAgLTAsMCArMSwyOCBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorIyAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyMKKyMgQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorIworIyBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorIworIyBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisjIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyMgbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisjCisjIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK0RSSVZFUl9DT0RFID0gZ3MKK0RSSVZFUl9OQU1FID0gR2VuZXJpY1NheQorRFJJVkVSX1VTQUdFID0gcGlwZXMgdG8gL3Vzci9sb2NhbC9iaW4vc2F5CitEUklWRVJfVkVSU0lPTiA9IAorRFJJVkVSX0RFVkVMT1BFUlMgPSAKK2luY2x1ZGUgJChTUkNfVE9QKXNwZWVjaC5taworCitzcGVlY2guJE86CisJJChDQykgJChTUEtfQ0ZMQUdTKSAtYyAkKFNSQ19ESVIpL3NwZWVjaC5jCisKZGlmZiAtLWdpdCBhL0RyaXZlcnMvU3BlZWNoL0dlbmVyaWNTYXkvUkVBRE1FIGIvRHJpdmVycy9TcGVlY2gvR2VuZXJpY1NheS9SRUFETUUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2U1YjkwMQotLS0gL2Rldi9udWxsCisrKyBiL0RyaXZlcnMvU3BlZWNoL0dlbmVyaWNTYXkvUkVBRE1FCkBAIC0wLDAgKzEsMjUgQEAKK0JSTFRUWSBzcGVlY2ggZHJpdmVyIGZvciAiR0VuZXJpY1NheSIKKworVGhpcyBkcml2ZXIgaXMgaW50ZW5kZWQgdG8gYmUgdXNlZCB3aXRoIGFueSBzcGVlY2ggc3ludGhlc2lzIHByb2dyYW0KK2xpa2UgdGhlIHJzeW50aCBwYWNrYWdlLgorCitUaGlzIGlzIHByZWxpbWluYXJ5IGNvZGUsIHN0aWxsIGV4cGVyaW1lbnRhbC4gIE5lZWQgaW1wcm9vdmVtZW50cy4uLgorCitGcm9tIHRoZSBwZXJzcGVjdGl2ZSBvZiBicmx0dHk6IFRoZSBjb21tYW5kICIvdXNyL2xvY2FsL2Jpbi9zYXkiIGlzCitpbnZva2VkIHdpdGggbm8gYXJndW1lbnRzLCBhbmQgZWFjaCB0ZXh0IHN0cmluZyB3aGljaCBpcyB0byBiZSBzcG9rZW4gaXMKK3dyaXR0ZW4gdG8gdGhlIHN0YW5kYXJkIGlucHV0IG9mIHRoYXQgY29tbWFuZC4gQSBwZXJpb2QgYW5kIGEgbmV3LWxpbmUgKGluCit0aGF0IG9yZGVyKSwgaS5lLiAiLlxuIiwgYXJlIGFwcGVuZGVkIHRvIGVhY2ggdGV4dCBzdHJpbmcgYXMgdGhpcyBpcyBhCityZWFzb25hYmx5IHN0YW5kYXJkIHdheSB0byBpbnN0cnVjdCBhIHNwZWVjaCBzeW50aGVzaXplciB0byBzdGFydCBzcGVha2luZworcmlnaHQgYXdheS4gV2hlbiB0aGUgc3BlZWNoIGlzIHRvIGJlIHN0b3BwZWQsIGkuZS4gaW50ZXJydXB0ZWQgYW5kCitmbHVzaGVkLCB0aGVuIHRoZSBzdGFuZGFyZCBpbnB1dCBvZiB0aGUgY29tbWFuZCBpcyBjbG9zZWQuIFRoZSBjb21tYW5kIGlzCityZXN0YXJ0ZWQgdGhlIG5leHQgdGltZSB0aGVyZSBpcyBzb21ldGhpbmcgZWxzZSB0byBzcGVhay4KKworRnJvbSB0aGUgcGVyc3BlY3RpdmUgb2YgdGhlIGNvbW1hbmQgd2hpY2ggbXVzdCBiZSBzdXBwbGllZCBieSB0aGUgdXNlcjogSXQKK211c3QgYmUgY2FsbGVkICIvdXNyL2xvY2FsL2Jpbi9zYXkiLiBJdCBpcyBpbnZva2VkIHdpdGhvdXQgYW55IGFyZ3VtZW50cy4KK0l0IG11c3QgZmlyc3Qgc2VuZCBhbnkgcmVxdWlyZWQgaW5pdGlhbGl6YXRpb24gc2VxdWVuY2VzLCBhbmQgdGhlbiBjb3B5CitpdHMgc3RhbmRhcmQgaW5wdXQsIHRvIHRoZSBzcGVlY2ggc3ludGhlc2l6ZXIuIFVwb24gZGV0ZWN0aW5nIGVuZC1vZi1maWxlCitvbiBpdHMgc3RhbmRhcmQgaW5wdXQsIGl0IHNob3VsZCBzZW5kIHRoZSAic2h1dCB1cCIgc2VxdWVuY2UsIGZvbGxvd2VkIGJ5CithbnkgcmVxdWlyZWQgc2h1dCBkb3duIHNlcXVlbmNlcywgdG8gdGhlIHN5bnRoZXNpemVyLgorCitUaGUgc3ViZGlyZWN0b3J5ICJjb21tYW5kcyIgb2YgdGhpcyBkaXJlY3RvcnkgY29udGFpbnMgZXhhbXBsZXMgb2YKKyIvdXNyL2xvY2FsL2Jpbi9zYXkiIHNjcmlwdHMgZm9yIHZhcmlvdXMgc3BlZWNoIHN5bnRoZXNpemVycy4KZGlmZiAtLWdpdCBhL0RyaXZlcnMvU3BlZWNoL0dlbmVyaWNTYXkvY29tbWFuZHMvQWNjZW50U0EgYi9Ecml2ZXJzL1NwZWVjaC9HZW5lcmljU2F5L2NvbW1hbmRzL0FjY2VudFNBCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjM4Mjk0ZjgKLS0tIC9kZXYvbnVsbAorKysgYi9Ecml2ZXJzL1NwZWVjaC9HZW5lcmljU2F5L2NvbW1hbmRzL0FjY2VudFNBCkBAIC0wLDAgKzEsMzc2IEBACisjIS91c3IvYmluL2VudiB0Y2xzaAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorIyAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyMKKyMgQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorIworIyBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorIworIyBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisjIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyMgbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisjCisjIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMgQnJsVFRZIEdlbmVyaWNTYXkgaGVscGVyIHNjcmlwdCBmb3IgdGhlIEFjY2VudC9TQSBTcGVlY2ggU3ludGhlc2l6ZXIKKyMgSXQgc2hvdWxkIGJlIGluc3RhbGxlZCBhcyAiL3Vzci9sb2NhbC9iaW4vc2F5Ii4KKworIyBSZXR1cm4gdGhlIG5hbWUgb2YgdGhpcyBzY3JpcHQuCitwcm9jIHByb2dyYW1OYW1lIHt9IHsKKyAgIGdsb2JhbCBhcmd2MAorICAgcmV0dXJuIFtmaWxlIHRhaWwgJGFyZ3YwXQorfQorCisjIFdyaXRlIGEgbWVzc2FnZSwgcHJlZml4ZWQgd2l0aCB0aGUgbmFtZSBvZiB0aGlzIHNjcmlwdCwgdG8gc3RhbmRhcmQgZXJyb3IuCitwcm9jIHByb2dyYW1NZXNzYWdlIHttZXNzYWdlfSB7CisgICBnbG9iYWwgYXJndjAKKyAgIHB1dHMgc3RkZXJyICJbcHJvZ3JhbU5hbWVdOiAkbWVzc2FnZSIKK30KKworIyBEaXNwbGF5IGFuIGVycm9yIG1lc3NhZ2UsIGFuZCBleGl0IHdpdGggdGhlIHNwZWNpZmllZCByZXR1cm4gY29kZS4KK3Byb2MgcHJvZ3JhbUVycm9yIHtjb2RlIHttZXNzYWdlICIifX0geworICAgaWYge1tzdHJpbmcgbGVuZ3RoICRtZXNzYWdlXSA+IDB9IHsKKyAgICAgIHByb2dyYW1NZXNzYWdlICRtZXNzYWdlCisgICB9CisgICBleGl0ICRjb2RlCit9CisKKyMgU3RhbmRhcmQgZXhpdCByb3V0aW5lIHdoZW4gY29tbWFuZCBsaW5lIGVycm9ycyBhcmUgZGV0ZWN0ZWQuCitwcm9jIHN5bnRheEVycm9yIHttZXNzYWdlfSB7CisgICBwcm9ncmFtRXJyb3IgMiAkbWVzc2FnZQorfQorCisjIFN0YW5kYXJkIGV4aXQgcm91dGluZSB3aGVuIHNvbWV0aGluZyBpcyB3cm9uZyB3aXRoIHRoZSBwYXJhbWV0ZXIgdmFsdWVzLgorcHJvYyBzZW1hbnRpY0Vycm9yIHttZXNzYWdlfSB7CisgICBwcm9ncmFtRXJyb3IgMyAkbWVzc2FnZQorfQorCisjIENsb3NlIHRoZSBzcGVlY2ggc3ludGhlc2l6ZXIgZGV2aWNlLgorcHJvYyBjbG9zZURldmljZSB7fSB7CisgICBnbG9iYWwgZGV2aWNlU3RyZWFtCisgICBjbG9zZSAkZGV2aWNlU3RyZWFtOyB1bnNldCBkZXZpY2VTdHJlYW0KK30KKworIyBNYWludGFpbiBhbiBldmVudCB3aGljaCBhdXRvbWF0aWNhbGx5IGNsb3NlcyB0aGUgc3BlZWNoIHN5bnRoZXNpemVyCisjIGRldmljZSBpZiBubyBuZXcgZGF0YSBoYXMgYXJyaXZlZCBmb3IgYSB3aGlsZS4KK3Byb2Mgc2NoZWR1bGVDbG9zZSB7fSB7CisgICBnbG9iYWwgY2xvc2VFdmVudCBjbG9zZVRpbWVvdXQKKyAgIGlmIHtbaW5mbyBleGlzdHMgY2xvc2VFdmVudF19IHsKKyAgICAgIGFmdGVyIGNhbmNlbCAkY2xvc2VFdmVudDsgdW5zZXQgY2xvc2VFdmVudAorICAgfQorICAgc2V0IGNsb3NlRXZlbnQgW2FmdGVyICRjbG9zZVRpbWVvdXQge3Vuc2V0IGNsb3NlRXZlbnQ7IGNsb3NlRGV2aWNlfV0KK30KKworIyBTZW5kIGRhdGEgdG8gdGhlIHNwZWVjaCBzeW50aGVzaXplci4KK3Byb2Mgc2VuZERhdGEge2RhdGF9IHsKKyAgIGdsb2JhbCBkZXZpY2VTdHJlYW0KKyAgIHB1dHMgLW5vbmV3bGluZSAkZGV2aWNlU3RyZWFtICRkYXRhCisgICBmbHVzaCAkZGV2aWNlU3RyZWFtCit9CisKKyMgU2VuZCBhIGNvbW1hbmQgdG8gdGhlIHNwZWVjaCBzeW50aGVzaXplci4KK3Byb2Mgc2VuZENvbW1hbmQge2NvbW1hbmR9IHsKKyAgIHNlbmREYXRhICJceDFiJGNvbW1hbmQiCit9CisKKyMgQ29uZmlndXJlIGEgc3BlZWNoIHN5bnRoZXNpemVyIHNldHRpbmcuCitwcm9jIGNvbmZpZ3VyZVBhcmFtZXRlciB7c2V0dGluZ1ZhcmlhYmxlIGNvbW1hbmR9IHsKKyAgIHVwdmFyICMwICRzZXR0aW5nVmFyaWFibGUgc2V0dGluZworICAgaWYge1tpbmZvIGV4aXN0cyBzZXR0aW5nXX0geworICAgICAgaWYge1tsbGVuZ3RoICRjb21tYW5kXSA9PSAxfSB7CisJIHNlbmRDb21tYW5kICIkY29tbWFuZCRzZXR0aW5nIgorICAgICAgfSBlbHNlIHsKKyAgICAgICAgIGZvcmVhY2ggc2VxdWVuY2UgW2xpbmRleCAkY29tbWFuZCAkc2V0dGluZ10geworCSAgICBzZW5kQ29tbWFuZCAkc2VxdWVuY2UKKwkgfQorICAgICAgfQorICAgfQorfQorCisjIE9wZW4gYW5kIGNvbmZpZ3VyZSB0aGUgc3BlZWNoIHN5bnRoZXNpemVyIGRldmljZS4KKyMgSWYgaXQncyBhbHJlYWR5IG9wZW4sIHRoZW4gZG9uJ3QgZG8gYW55dGhpbmcuCisjIElmIGl0IGNhbid0IGJlIG9wZW5lZCwgdGhlbiBzaWxlbnRseSBleGl0IHdpdGggYSBub24temVybyByZXR1cm4gY29kZS4KK3Byb2Mgb3BlbkRldmljZSB7fSB7CisgICBnbG9iYWwgZGV2aWNlUGF0aCBkZXZpY2VTdHJlYW0KKyAgIGlmIHshW2luZm8gZXhpc3RzIGRldmljZVN0cmVhbV19IHsKKyAgICAgIGlmIHtbY2F0Y2ggW2xpc3Qgb3BlbiAkZGV2aWNlUGF0aCB7V1JPTkxZIE5PQ1RUWX1dIHJlc3BvbnNlXSAhPSAwfSB7CisgICAgICAgICBleGl0IDEwCisgICAgICB9CisgICAgICBzZXQgZGV2aWNlU3RyZWFtICRyZXNwb25zZQorICAgICAgc2VuZENvbW1hbmQgIj1GIgorICAgICAgc2VuZENvbW1hbmQgIj1CIgorICAgICAgc2VuZENvbW1hbmQgIk9pIgorICAgICAgY29uZmlndXJlUGFyYW1ldGVyIHNwZWVjaFZvbHVtZSAiQSIKKyAgICAgIGNvbmZpZ3VyZVBhcmFtZXRlciBzcGVlY2hSYXRlICJSIgorICAgICAgY29uZmlndXJlUGFyYW1ldGVyIHZvaWNlUGl0Y2ggIlAiCisgICAgICBjb25maWd1cmVQYXJhbWV0ZXIgdm9pY2VUeXBlICJWIgorICAgICAgY29uZmlndXJlUGFyYW1ldGVyIHNwYWNlUGF1c2UgIlMiCisgICAgICBjb25maWd1cmVQYXJhbWV0ZXIgc2VudGVuY2VJbnRvbmF0aW9uICJNIgorICAgICAgY29uZmlndXJlUGFyYW1ldGVyIHB1bmN0dWF0aW9uTW9kZSB7T3Age09QIE9yfSB7T1AgT1J9fQorICAgICAgY29uZmlndXJlUGFyYW1ldGVyIGh5cGhlbk1vZGUge09tIE9NIE9OfQorICAgfQorfQorCisjIEluc3VyZSB0aGF0IHRoZSBzcGVlY2ggc3ludGhlc2l6ZXIgZGV2aWNlIGlzIG9wZW4sIGFuZCB0aGVuCisjIGluc3RydWN0IGl0IHRvIHNwZWFrIHRoZSBjb250ZW50IG9mIHRoZSBzdXBwbGllZCBzdHJpbmcuCisjIEFycmFuZ2UgZm9yIHRoZSBkZXZpY2UgdG8gYmUgYXV0b21hdGljYWxseSBjbG9zZWQgaWYgbm90aGluZyBtb3JlCisjIG5lZWRzIHRvIGJlIHNwb2tlbiBmb3IgYSByZWFzb25hYmxlIGFtb3VudCBvZiB0aW1lLgorcHJvYyBzYXlTdHJpbmcge3N0cmluZ30geworICAgb3BlbkRldmljZQorICAgc2NoZWR1bGVDbG9zZQorICAgc2VuZERhdGEgIiRzdHJpbmdcciIKK30KKworIyBUZWxsIHRoZSBzcGVlY2ggc3ludGhlc2l6ZXIgdG8gc3RvcCBzcGVha2luZyBpbW1lZGlhdGVseSwKKyMgYW5kIHRvIGZsdXNoIGl0cyBpbnB1dCBidWZmZXIuCitwcm9jIGZsdXNoU3ludGhlc2l6ZXIge30geworICAgc2VuZENvbW1hbmQgIj14IgorfQorCisjIENoZWNrIGEgZGV2aWNlIHBhdGguCitwcm9jIGNoZWNrRGV2aWNlIHtkZXNjcmlwdGlvbiBwYXRofSB7CisgICBpZiB7IVtmaWxlIGV4aXN0cyAkcGF0aF19IHsKKyAgICAgIHNlbWFudGljRXJyb3IgIiRkZXNjcmlwdGlvbiBub3QgZm91bmQ6ICRwYXRoIgorICAgfQorICAgaWYge1tzdHJpbmcgY29tcGFyZSBbc2V0IHR5cGUgW2ZpbGUgdHlwZSAkcGF0aF1dIGNoYXJhY3RlclNwZWNpYWxdICE9IDB9IHsKKyAgICAgIHNlbWFudGljRXJyb3IgImluY29ycmVjdCAkZGVzY3JpcHRpb24gdHlwZTogJHR5cGU6ICRwYXRoIgorICAgfQorICAgaWYgeyFbZmlsZSB3cml0YWJsZSAkcGF0aF19IHsKKyAgICAgIHNlbWFudGljRXJyb3IgIiRkZXNjcmlwdGlvbiBub3Qgd3JpdGFibGU6ICRwYXRoIgorICAgfQorfQorCisjIENoZWNrIGEga2V5d29yZCB2YWx1ZS4KK3Byb2MgY2hlY2tLZXl3b3JkIHtkZXNjcmlwdGlvbiB2YWx1ZSBrZXl3b3Jkc30geworICAgaWYge1tyZWdleHAgLW5vY2FzZSB7XlthLXpdKyR9ICR2YWx1ZV19IHsKKyAgICAgIGlmIHtbc2V0IGluZGV4IFtsc2VhcmNoIC1nbG9iICRrZXl3b3JkcyBbc2V0IHZhbHVlIFtzdHJpbmcgdG9sb3dlciAkdmFsdWVdXSpdXSA+PSAwfSB7CisJIGlmIHtbbHNlYXJjaCAtZ2xvYiBbbHJlcGxhY2UgJGtleXdvcmRzICRpbmRleCAkaW5kZXhdICR2YWx1ZSpdID49IDB9IHsKKwkgICAgc3ludGF4RXJyb3IgImFtYmlndW91cyAkZGVzY3JpcHRpb246ICR2YWx1ZSIKKwkgfQorCSByZXR1cm4gW2xzZWFyY2ggLWdsb2IgJGtleXdvcmRzICR2YWx1ZSpdCisgICAgICB9CisgICB9CisgICBzeW50YXhFcnJvciAiaW52YWxpZCAkZGVzY3JpcHRpb246ICR2YWx1ZSIKK30KKworIyBDaGVjayBhbiBpbnRlZ2VyIHZhbHVlLgorcHJvYyBjaGVja0ludGVnZXIge2Rlc2NyaXB0aW9uIHZhbHVlIHttaW5pbXVtICIifSB7bWF4aW11bSAiIn19IHsKKyAgIGlmIHshW3JlZ2V4cCB7XigwfC0/WzEtOV1bMC05XSopJH0gJHZhbHVlXX0geworICAgICAgc3ludGF4RXJyb3IgImludmFsaWQgJGRlc2NyaXB0aW9uOiAkdmFsdWUiCisgICB9CisgICBpZiB7W3N0cmluZyBsZW5ndGggJG1pbmltdW1dID4gMH0geworICAgICAgaWYgeyR2YWx1ZSA8ICRtaW5pbXVtfSB7CisgICAgICAgICBzeW50YXhFcnJvciAiJGRlc2NyaXB0aW9uIGxlc3MgdGhhbiAkbWluaW11bTogJHZhbHVlIgorICAgICAgfQorICAgfQorICAgaWYge1tzdHJpbmcgbGVuZ3RoICRtYXhpbXVtXSA+IDB9IHsKKyAgICAgIGlmIHskdmFsdWUgPiAkbWF4aW11bX0geworICAgICAgICAgc3ludGF4RXJyb3IgIiRkZXNjcmlwdGlvbiBncmVhdGVyIHRoYW4gJG1heGltdW06ICR2YWx1ZSIKKyAgICAgIH0KKyAgIH0KK30KKworIyBTZXQgdGhlICJkZXZpY2UiIHBhcmFtZXRlci4KKyMgSXQgbXVzdCBiZSBlaXRoZXIgdGhlIGFic29sdXRlIG9yIHRoZSByZWxhdGl2ZSBwYXRoIHRvIHRoZSBzcGVlY2ggc3ludGhlc2l6ZXIgZGV2aWNlLgorcHJvYyBzZXQtZGV2aWNlIHtwYXRofSB7CisgICBnbG9iYWwgZGV2aWNlUGF0aAorICAgc2V0IGRldmljZVBhdGggJHBhdGgKK30KKworIyBTZXQgdGhlICJjbG9zZSIgcGFyYW1ldGVyLgorIyBJdCBtdXN0IGJlIGEgbm9uLW5lZ2F0aXZlIGludGVncmFsIG51bWJlciBvZiBzZWNvbmRzLgorcHJvYyBzZXQtY2xvc2Uge2Nsb3NlfSB7CisgICBnbG9iYWwgY2xvc2VUaW1lb3V0CisgICBjaGVja0ludGVnZXIgImNsb3NlIHRpbWVvdXQiICRjbG9zZSAwCisgICBzZXQgY2xvc2VUaW1lb3V0ICRjbG9zZQorfQorCisjIFNldCB0aGUgInZvbHVtZSIgcGFyYW1ldGVyLgorIyBJdCBtdXN0IGJlIGFuIGludGVnZXIgZnJvbSAwIHRocm91Z2ggOS4KK3Byb2Mgc2V0LXZvbHVtZSB7dm9sdW1lfSB7CisgICBnbG9iYWwgc3BlZWNoVm9sdW1lCisgICBjaGVja0ludGVnZXIgInNwZWVjaCB2b2x1bWUiICR2b2x1bWUgMCA5CisgICBzZXQgc3BlZWNoVm9sdW1lICR2b2x1bWUKK30KKworIyBTZXQgdGhlICJyYXRlIiBwYXJhbWV0ZXIuCisjIEl0IG11c3QgYmUgYW4gaW50ZWdlciBmcm9tIDAgdGhyb3VnaCAxNy4KK3Byb2Mgc2V0LXJhdGUge3JhdGV9IHsKKyAgIGdsb2JhbCBzcGVlY2hSYXRlCisgICBzZXQgcmF0ZXMgIjAxMjM0NTY3ODlBQkNERUZHSCIKKyAgIGNoZWNrSW50ZWdlciAic3BlZWNoIHJhdGUiICRyYXRlIDAgW2V4cHIge1tzdHJpbmcgbGVuZ3RoICRyYXRlc10gLSAxfV0KKyAgIHNldCBzcGVlY2hSYXRlIFtzdHJpbmcgaW5kZXggJHJhdGVzICRyYXRlXQorfQorCisjIFNldCB0aGUgInBpdGNoIiBwYXJhbWV0ZXIuCisjIEl0IG11c3QgYmUgYW4gaW50ZWdlciBmcm9tIDAgdGhyb3VnaCA5LgorcHJvYyBzZXQtcGl0Y2gge3BpdGNofSB7CisgICBnbG9iYWwgdm9pY2VQaXRjaAorICAgY2hlY2tJbnRlZ2VyICJ2b2ljZSBwaXRjaCIgJHBpdGNoIDAgOQorICAgc2V0IHZvaWNlUGl0Y2ggJHBpdGNoCit9CisKKyMgU2V0IHRoZSAidm9pY2UiIHBhcmFtZXRlci4KKyMgSXQgbXVzdCBiZSBhbiBpbnRlZ2VyIGZyb20gMCB0aHJvdWdoIDkuCitwcm9jIHNldC12b2ljZSB7dm9pY2V9IHsKKyAgIGdsb2JhbCB2b2ljZVR5cGUKKyAgIGNoZWNrSW50ZWdlciAidm9pY2UgdHlwZSIgJHZvaWNlIDAgOQorICAgc2V0IHZvaWNlVHlwZSAkdm9pY2UKK30KKworIyBTZXQgdGhlICJwYXVzZSIgcGFyYW1ldGVyLgorIyBJdCBtdXN0IGJlIGFuIGludGVnZXIgZnJvbSAwIHRocm91Z2ggOS4KK3Byb2Mgc2V0LXBhdXNlIHtwYXVzZX0geworICAgZ2xvYmFsIHNwYWNlUGF1c2UKKyAgIGNoZWNrSW50ZWdlciAic3BhY2UgcGF1c2UiICRwYXVzZSAwIDkKKyAgIHNldCBzcGFjZVBhdXNlICRwYXVzZQorfQorCisjIFNldCB0aGUgImludG9uYXRpb24iIHBhcmFtZXRlci4KKyMgSXQgbXVzdCBiZSBhbiBpbnRlZ2VyIGZyb20gMCB0aHJvdWdoIDQuCitwcm9jIHNldC1pbnRvbmF0aW9uIHtpbnRvbmF0aW9ufSB7CisgICBnbG9iYWwgc2VudGVuY2VJbnRvbmF0aW9uCisgICBjaGVja0ludGVnZXIgInNlbnRlbmNlIGludG9uYXRpb24iICRpbnRvbmF0aW9uIDAgNAorICAgc2V0IHNlbnRlbmNlSW50b25hdGlvbiBbZXhwciB7KCRpbnRvbmF0aW9uICsgMSkgJSA1fV0KK30KKworIyBTZXQgdGhlICJwdW5jdHVhdGlvbiIgcGFyYW1ldGVyLgorIyBJdCBtdXN0IGJlIG9uZSBvZiBub25lLCBjb21tb24sIGFsbC4KK3Byb2Mgc2V0LXB1bmN0dWF0aW9uIHtwdW5jdHVhdGlvbn0geworICAgZ2xvYmFsIHB1bmN0dWF0aW9uTW9kZQorICAgc2V0IHB1bmN0dWF0aW9uTW9kZSBbY2hlY2tLZXl3b3JkICJwdW5jdHVhdGlvbiBtb2RlIiAkcHVuY3R1YXRpb24ge25vbmUgY29tbW9uIGFsbH1dCit9CisKKyMgU2V0IHRoZSAiaHlwaGVuIiBwYXJhbWV0ZXIuCisjIEl0IG11c3QgYmUgb25lIG9mIG5vLCBkYXNoLCBtaW51cy4KK3Byb2Mgc2V0LWh5cGhlbiB7aHlwaGVufSB7CisgICBnbG9iYWwgaHlwaGVuTW9kZQorICAgc2V0IGh5cGhlbk1vZGUgW2NoZWNrS2V5d29yZCAiaHlwaGVuIG1vZGUiICRoeXBoZW4ge25vIGRhc2ggbWludXN9XQorfQorCisjIFNldCBhIHBhcmFtZXRlci4KKyMgRm9yIHRoZSBsaXN0IG9mIHNldHRhYmxlIHBhcmFtZXRlcnMsIHNlZSB0aGUgc2V0LS4uLiBoYW5kbGVycy4KKyMgVGhleSBtYXkgYmUgc3BlY2lmaWVkIHdpdGhpbiB0aGUgc3lzdGVtIGNvbmZpZ3VyYXRpb24gZmlsZSwKKyMgd2l0aGluIHRoZSB1c2VyIGNvbmZpZ3VyYXRpb24gZmlsZSwgb3IgYXMgY29tbWFuZCBsaW5lIG9wdGlvbnMuCitwcm9jIHNldFBhcmFtZXRlciB7bmFtZSB2YWx1ZX0geworICAgaWYge1tzZXQgY291bnQgW2xsZW5ndGggW3NldCBoYW5kbGVycyBbaW5mbyBwcm9jcyAic2V0LVtzdHJpbmcgdG9sb3dlciAkbmFtZV0qIl1dXV0gPT0gMH0geworICAgICAgc3ludGF4RXJyb3IgImludmFsaWQgcGFyYW1ldGVyIG5hbWU6ICRuYW1lIgorICAgfSBlbHNlaWYgeyRjb3VudCA+IDF9IHsKKyAgICAgIHN5bnRheEVycm9yICJhbWJpZ3VvdXMgcGFyYW1ldGVyIG5hbWU6ICRuYW1lIgorICAgfSBlbHNlaWYge1tzdHJpbmcgbGVuZ3RoICR2YWx1ZV0gPT0gMH0geworICAgICAgc3ludGF4RXJyb3IgIm1pc3NpbmcgcGFyYW1ldGVyIHZhbHVlOiAkbmFtZSIKKyAgIH0gZWxzZSB7CisgICAgICBldmFsIFtsaW5kZXggJGhhbmRsZXJzIDBdIFtsaXN0ICR2YWx1ZV0KKyAgIH0KK30KKworIyBQcm9jZXNzIHRoZSBjb25maWd1cmF0aW9uIGZpbGUuCisjIElmIGl0IGRvZXMgbm90IGV4aXN0LCB0aGVuIHNpbGVudGx5IGNvbnRpbnVlLgorIyBJZiBpdCBkb2VzIGV4aXN0IGJ1dCBjYW5ub3QgYmUgb3BlbmVkLCB0aGVuIGRpc3BsYXkgYSB3YXJuaW5nLgorcHJvYyBzZXRQYXJhbWV0ZXJzIHtwYXRofSB7CisgICBpZiB7W2NhdGNoIFtsaXN0IG9wZW4gJHBhdGgge1JET05MWX1dIHJlc3BvbnNlXSAhPSAwfSB7CisgICAgICBnbG9iYWwgZXJyb3JDb2RlCisgICAgICBzZXQgdHlwZSBbbGluZGV4ICRlcnJvckNvZGUgMF0KKyAgICAgIHNldCBjb2RlIFtsaW5kZXggJGVycm9yQ29kZSAxXQorICAgICAgc2V0IHdhcm4gMQorICAgICAgaWYge1tzdHJpbmcgY29tcGFyZSAkdHlwZSBQT1NJWF0gPT0gMH0geworICAgICAgICAgaWYge1tsc2VhcmNoIC1leGFjdCB7RU5PRU5UfSAkY29kZV0gPj0gMH0geworCSAgICBzZXQgd2FybiAwCisJIH0KKyAgICAgIH0KKyAgICAgIGlmIHskd2Fybn0geworCSBwcm9ncmFtTWVzc2FnZSAkcmVzcG9uc2UKKyAgICAgIH0KKyAgIH0gZWxzZSB7CisgICAgICBzZXQgZmlsZSAkcmVzcG9uc2UKKyAgICAgIHdoaWxlIHtbZ2V0cyAkZmlsZSBsaW5lXSA+PSAwfSB7CisgICAgICAgICBpZiB7W3NldCBsZW5ndGggW3N0cmluZyBsZW5ndGggW3NldCBsaW5lIFtzdHJpbmcgdHJpbSAkbGluZV1dXV0gPT0gMH0geworCSAgICBjb250aW51ZQorCSB9CisJIGlmIHtbc3RyaW5nIGNvbXBhcmUgW3N0cmluZyBpbmRleCAkbGluZSAwXSAjXSA9PSAwfSB7CisJICAgIGNvbnRpbnVlCisJIH0KKwkgcmVnZXhwIHteKFteIF0rKSguKikkfSAkbGluZSB4IG5hbWUgdmFsdWUKKwkgc2V0UGFyYW1ldGVyICRuYW1lIFtzdHJpbmcgdHJpbSAkdmFsdWVdCisgICAgICB9CisgICAgICBjbG9zZSAkZmlsZTsgdW5zZXQgZmlsZQorICAgfQorfQorCisjIFByb2Nlc3MgdGhlIGNvbW1hbmQgbGluZSBvcHRpb25zLCBhbmQgcmVtb3ZlIHRoZW0gZnJvbSB0aGUgYXJndW1lbnQgbGlzdC4KK3Byb2MgcHJvY2Vzc09wdGlvbnMge30geworICAgZ2xvYmFsIGFyZ3YKKyAgIHdoaWxlIHtbbGxlbmd0aCAkYXJndl0gPiAwfSB7CisgICAgICBzZXQgbmFtZSBbbGluZGV4ICRhcmd2IDBdCisgICAgICBpZiB7W3N0cmluZyBsZW5ndGggJG5hbWVdID09IDB9IHsKKyAgICAgICAgIGJyZWFrCisgICAgICB9CisgICAgICBpZiB7W3N0cmluZyBjb21wYXJlIFtzZXQgY2hhcmFjdGVyIFtzdHJpbmcgaW5kZXggJG5hbWUgMF1dIC1dICE9IDB9IHsKKyAgICAgICAgIGJyZWFrCisgICAgICB9CisgICAgICBzZXQgYXJndiBbbHJhbmdlICRhcmd2IDEgZW5kXQorICAgICAgaWYge1tzdHJpbmcgbGVuZ3RoIFtzZXQgbmFtZSBbc3RyaW5nIHRyaW1sZWZ0ICRuYW1lICRjaGFyYWN0ZXJdXV0gPT0gMH0geworICAgICAgICAgYnJlYWsKKyAgICAgIH0KKyAgICAgIGlmIHtbbGxlbmd0aCAkYXJndl0gPT0gMH0geworCSBzZXQgdmFsdWUgIiIKKyAgICAgIH0gZWxzZSB7CisJIHNldCB2YWx1ZSBbbGluZGV4ICRhcmd2IDBdCisJIHNldCBhcmd2IFtscmFuZ2UgJGFyZ3YgMSBlbmRdCisgICAgICB9CisgICAgICBzZXRQYXJhbWV0ZXIgJG5hbWUgJHZhbHVlCisgICB9Cit9CisKK3Byb2MgcHJlcGFyZVBhcmFtZXRlcnMge30geworICAgZ2xvYmFsIGRldmljZVBhdGggY2xvc2VUaW1lb3V0CisgICBjaGVja0RldmljZSAic3ludGhlc2l6ZXIgZGV2aWNlIiAkZGV2aWNlUGF0aAorICAgc2V0IGNsb3NlVGltZW91dCBbZXhwciB7JGNsb3NlVGltZW91dCAqIDEwMDB9XTsgIyBBZnRlciB3YW50cyBtaWxsaXNlY29uZHMuCit9CisKKyMgQXNzaWduIGRlZmF1bHRzIHRvIHRoZSBwYXJhbWV0ZXJzLgorc2V0UGFyYW1ldGVyIGRldmljZSAiL2Rldi90dHlTMCIKK3NldFBhcmFtZXRlciBjbG9zZSA1CisKKyMgUHJvY2VzcyB0aGUgc3lzdGVtIGNvbmZpZ3VyYXRpb24gZmlsZS4KK3NldFBhcmFtZXRlcnMgIi91c3IvbG9jYWwvZXRjL1twcm9ncmFtTmFtZV0uY29uZiIKKworIyBQcm9jZXNzIHRoZSB1c2VyIGNvbmZpZ3VyYXRpb24gZmlsZS4KK3NldCB2YXJpYWJsZSBlbnYoSE9NRSkKK2lmIHtbaW5mbyBleGlzdHMgJHZhcmlhYmxlXX0geworICAgaWYge1tzdHJpbmcgbGVuZ3RoIFtzZXQgZGlyZWN0b3J5IFtzZXQgJHZhcmlhYmxlXV1dID4gMH0geworICAgICAgc2V0UGFyYW1ldGVycyBbZmlsZSBqb2luICRkaXJlY3RvcnkgIi5bcHJvZ3JhbU5hbWVdcmMiXQorICAgfQorfQorCisjIElmIG5vIGFyZ3VtZW50cyBoYXZlIGJlZW4gc3VwcGxpZWQsIHRoZW4gYmUgYSBicmx0dHkgR2VuZXJpY1NheSBoZWxwZXIgY29tbWFuZC4gCitpZiB7W2xsZW5ndGggJGFyZ3ZdID09IDB9IHsKKyAgIHByZXBhcmVQYXJhbWV0ZXJzCisgICBzZXQgaW5wdXRTdHJlYW0gc3RkaW4KKyAgIGZjb25maWd1cmUgJGlucHV0U3RyZWFtIC1ibG9ja2luZyAwCisgICBmaWxlZXZlbnQgJGlucHV0U3RyZWFtIHJlYWRhYmxlIHsKKyAgICAgIGlmIHtbZW9mICRpbnB1dFN0cmVhbV19IHsKKwkgaWYge1tpbmZvIGV4aXN0cyBkZXZpY2VTdHJlYW1dfSB7CisJICAgIGZsdXNoU3ludGhlc2l6ZXIKKwkgfQorCSBzZXQgcmV0dXJuQ29kZSAwCisgICAgICB9IGVsc2UgeworCSBzYXlTdHJpbmcgW3JlYWQgJGlucHV0U3RyZWFtXQorICAgICAgfQorICAgfQorICAgdndhaXQgcmV0dXJuQ29kZQorICAgZXhpdCAkcmV0dXJuQ29kZQorfQorCisjIFByb2Nlc3MgdGhlIGNvbW1hbmQgbGluZSBvcHRpb25zLgorcHJvY2Vzc09wdGlvbnMKK3ByZXBhcmVQYXJhbWV0ZXJzCisKKyMgU3BlYWsgdGhlIHBvc2l0aW9uYWwgYXJndW1lbnRzIGFzIGEgc2VxdWVuY2Ugb2Ygd29yZHMuCitzYXlTdHJpbmcgW2pvaW4gJGFyZ3YgIiAiXQorZXhpdCAwCmRpZmYgLS1naXQgYS9Ecml2ZXJzL1NwZWVjaC9HZW5lcmljU2F5L2NvbW1hbmRzL3NheSBiL0RyaXZlcnMvU3BlZWNoL0dlbmVyaWNTYXkvY29tbWFuZHMvc2F5Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjQzYmZmYzAKLS0tIC9kZXYvbnVsbAorKysgYi9Ecml2ZXJzL1NwZWVjaC9HZW5lcmljU2F5L2NvbW1hbmRzL3NheQpAQCAtMCwwICsxLDM0IEBACisjIS9iaW4vc2gKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyMgICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisjCisjIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyMKKyMgQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjIFNpbXBsZSBCcmxUVFkgR2VuZXJpY1NheSBoZWxwZXIgc2NyaXB0LgorIyBJdCBzaG91bGQgYmUgaW5zdGFsbGVkIGFzICIvdXNyL2xvY2FsL2Jpbi9zYXkiLgorCisjIElmIHlvdXIgc3BlZWNoIHN5bnRoZXNpemVyIGRvZXMgbm90IHJlcXVpcmUgYW55IHNwZWNpYWwgaW5pdGlhbGl6YXRpb24KKyMgc2VxdWVuY2VzLCBhbmQgaWYgeW91IGVpdGhlciBhcmUgc2F0aXNmaWVkIHdpdGggaXRzIGRlZmF1bHQgc2V0dGluZ3Mgb3IKKyMgZG9uJ3Qga25vdyBob3cgdG8gY2hhbmdlIHRoZW0sIHRoZW4gdGhpcyBoZWxwZXIgc2NyaXB0IGlzIGZvciB5b3UuIEl0CisjIGRvZXMgbm8gbW9yZSB0aGFuIHNpbXBseSBzZW5kIHRoZSB0ZXh0IHRvIGJlIHNwb2tlbiBkaXJlY3RseSB0byB5b3VyCisjIHN5bnRoZXNpemVyLiBOb3RlIHRoYXQsIGJlaW5nIHRvdGFsbHkgZ2VuZXJhbCwgaXQgY2Fubm90LCBhbmQgZG9lcworIyBub3QsIGltcGxlbWVudCB0aGUgbXV0ZSBmdW5jdGlvbi4gQWxsIHlvdSBuZWVkIHRvIGRvIGlzOgorIyAtIFNldCB0aGUgZGV2aWNlIChzZWUgImRldmljZT0iIGxpbmUgYmVsb3cpLgorIyAtIEluc3RhbGwgdGhlIHNjcmlwdCAoYXMgL3Vzci9sb2NhbC9iaW4vc2F5KS4KKworZGV2aWNlPS9kZXYvdHR5UzAKK2V4ZWMgY2F0ID4iJHtkZXZpY2V9IgorZXhpdCAkPwpkaWZmIC0tZ2l0IGEvRHJpdmVycy9TcGVlY2gvR2VuZXJpY1NheS9zcGVlY2guYyBiL0RyaXZlcnMvU3BlZWNoL0dlbmVyaWNTYXkvc3BlZWNoLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODAwNzk2NAotLS0gL2Rldi9udWxsCisrKyBiL0RyaXZlcnMvU3BlZWNoL0dlbmVyaWNTYXkvc3BlZWNoLmMKQEAgLTAsMCArMSw5MiBAQAorLyoKKyAqIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisgKiAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisgKgorICogQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKKy8qIEdlbmVyaWNTYXkvc3BlZWNoLmMgLSBUbyB1c2UgYSBnZW5lcmljICdzYXknIGNvbW1hbmQsIGxpa2UgZm9yIHRoZQorICogcnN5bnRoIHBhY2thZ2UuCisgKi8KKworI2luY2x1ZGUgInByb2xvZ3VlLmgiCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisKKyNpbmNsdWRlICJsb2cuaCIKKwordHlwZWRlZiBlbnVtIHsKKyAgIFBBUk1fQ09NTUFORAorfSBEcml2ZXJQYXJhbWV0ZXI7CisjZGVmaW5lIFNQS1BBUk1TICJjb21tYW5kIgorCisjaW5jbHVkZSAic3BrX2RyaXZlci5oIgorI2luY2x1ZGUgInNwZWVjaC5oIgorCitzdGF0aWMgY29uc3QgY2hhciAqY29tbWFuZFBhdGg7CS8qIGRlZmF1bHQgZnVsbCBwYXRoIGZvciB0aGUgc2F5IGNvbW1hbmQgKi8KK3N0YXRpYyBGSUxFICpjb21tYW5kU3RyZWFtID0gTlVMTDsKKworc3RhdGljIGludAorc3BrX2NvbnN0cnVjdCAoU3BlZWNoU3ludGhlc2l6ZXIgKnNwaywgY2hhciAqKnBhcmFtZXRlcnMpCit7CisgIGNvbnN0IGNoYXIgKmNvbW1hbmQgPSBwYXJhbWV0ZXJzW1BBUk1fQ09NTUFORF07CisgIGNvbW1hbmRQYXRoID0gKmNvbW1hbmQ/IGNvbW1hbmQ6IFNBWV9DTUQ7CisgIGxvZ01lc3NhZ2UoTE9HX0lORk8sICJTcGVlY2ggQ29tbWFuZDogJXMiLCBjb21tYW5kUGF0aCk7CisgIHJldHVybiAxOworfQorCitzdGF0aWMgdm9pZAorc3BrX3NheSAoU3BlZWNoU3ludGhlc2l6ZXIgKnNwaywgY29uc3QgdW5zaWduZWQgY2hhciAqYnVmZmVyLCBzaXplX3QgbGVuZ3RoLCBzaXplX3QgY291bnQsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmF0dHJpYnV0ZXMpIHsKKyAgaWYgKCFjb21tYW5kU3RyZWFtKSB7CisgICAgaWYgKCEoY29tbWFuZFN0cmVhbSA9IHBvcGVuKGNvbW1hbmRQYXRoLCAidyIpKSkgeworICAgICAgbG9nTWVzc2FnZShMT0dfV0FSTklORywgImNhbm5vdCBzdGFydCBjb21tYW5kOiAlczogJXMiLAorICAgICAgICAgICAgICAgICBjb21tYW5kUGF0aCwgc3RyZXJyb3IoZXJybm8pKTsKKyAgICB9CisgIH0KKworICBpZiAoY29tbWFuZFN0cmVhbSkgeworICAgIGlmIChmd3JpdGUoYnVmZmVyLCBsZW5ndGgsIDEsIGNvbW1hbmRTdHJlYW0pKSB7CisgICAgICBzdGF0aWMgY29uc3QgY2hhciB0cmFpbGVyW10gPSB7J1xuJ307CisKKyAgICAgIGlmIChmd3JpdGUodHJhaWxlciwgc2l6ZW9mKHRyYWlsZXIpLCAxLCBjb21tYW5kU3RyZWFtKSkgeworICAgICAgICBpZiAoZmZsdXNoKGNvbW1hbmRTdHJlYW0pID09IEVPRikgeworICAgICAgICB9IGVsc2UgeworICAgICAgICAgIGxvZ1N5c3RlbUVycm9yKCJmZmx1c2giKTsKKyAgICAgICAgfQorICAgICAgfSBlbHNlIHsKKyAgICAgICAgbG9nU3lzdGVtRXJyb3IoImZ3cml0ZSIpOworICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICBsb2dTeXN0ZW1FcnJvcigiZndyaXRlIik7CisgICAgfQorICB9Cit9CisKK3N0YXRpYyB2b2lkCitzcGtfbXV0ZSAoU3BlZWNoU3ludGhlc2l6ZXIgKnNwaykKK3sKKyAgaWYgKGNvbW1hbmRTdHJlYW0pCisgICAgeworICAgICAgIHBjbG9zZShjb21tYW5kU3RyZWFtKTsKKyAgICAgICBjb21tYW5kU3RyZWFtID0gTlVMTDsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkCitzcGtfZGVzdHJ1Y3QgKFNwZWVjaFN5bnRoZXNpemVyICpzcGspCit7CisgICBzcGtfbXV0ZShzcGspOworfQpkaWZmIC0tZ2l0IGEvRHJpdmVycy9TcGVlY2gvR2VuZXJpY1NheS9zcGVlY2guaCBiL0RyaXZlcnMvU3BlZWNoL0dlbmVyaWNTYXkvc3BlZWNoLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjljZmQyOQotLS0gL2Rldi9udWxsCisrKyBiL0RyaXZlcnMvU3BlZWNoL0dlbmVyaWNTYXkvc3BlZWNoLmgKQEAgLTAsMCArMSwyNCBAQAorLyoKKyAqIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisgKiAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisgKgorICogQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKKy8qIEdlbmVyaWNTYXkvc3BlZWNoLmggLSBkZWZpbml0aW9ucyBmb3IgcnVkaW1lbnRhcnkgc3BlZWNoIHN1cHBvcnQKKyAqLworCisjaWZuZGVmIFNBWV9DTUQKKyAgICNkZWZpbmUgU0FZX0NNRCAiL3Vzci9sb2NhbC9iaW4vc2F5IgorI2VuZGlmIC8qIFNBWV9DTUQgKi8KZGlmZiAtLWdpdCBhL0RyaXZlcnMvU3BlZWNoL01pa3JvcHVoZS9NYWtlZmlsZS5pbiBiL0RyaXZlcnMvU3BlZWNoL01pa3JvcHVoZS9NYWtlZmlsZS5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYjA1ODU3Ci0tLSAvZGV2L251bGwKKysrIGIvRHJpdmVycy9TcGVlY2gvTWlrcm9wdWhlL01ha2VmaWxlLmluCkBAIC0wLDAgKzEsMjkgQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyMgICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisjCisjIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyMKKyMgQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitEUklWRVJfQ09ERSA9IG1wCitEUklWRVJfTkFNRSA9IE1pa3JvcHVoZQorRFJJVkVSX1VTQUdFID0gc29mdHdhcmUgZW5naW5lCitEUklWRVJfVkVSU0lPTiA9IAorRFJJVkVSX0RFVkVMT1BFUlMgPSAKK1NQS19PQkpTID0gQHNwZWVjaF9saWJyYXJpZXNfbXBACitpbmNsdWRlICQoU1JDX1RPUClzcGVlY2gubWsKKworc3BlZWNoLiRPOgorCSQoQ1hYKSAkKFNQS19DWFhGTEFHUykgLUkkKE1JS1JPUFVIRV9ST09UKSAtYyAkKFNSQ19ESVIpL3NwZWVjaC5jCisKZGlmZiAtLWdpdCBhL0RyaXZlcnMvU3BlZWNoL01pa3JvcHVoZS9SRUFETUUgYi9Ecml2ZXJzL1NwZWVjaC9NaWtyb3B1aGUvUkVBRE1FCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRjNTgzNjEKLS0tIC9kZXYvbnVsbAorKysgYi9Ecml2ZXJzL1NwZWVjaC9NaWtyb3B1aGUvUkVBRE1FCkBAIC0wLDAgKzEsMjYgQEAKK1RoaXMgZGlyZWN0b3J5IGNvbnRhaW5zIHRoZSBCUkxUVFkgc3BlZWNoIGRyaXZlciBmb3IgdGhlIE1pa3JvcHVoZSB0ZXh0IHRvCitzcGVlY2ggZW5naW5lIFtodHRwOi8vd3d3Lm1pa3JvcHVoZS5jb21dIGZyb20gVGltZUhvdXNlCitbaHR0cDovL3d3dy50aW1laG91c2UuZmkvb3kvZW4vXS4gSXQgd2FzIGltcGxlbWVudGVkLCBhbmQgaXMgYmVpbmcgbWFpbnRhaW5lZCwKK2J5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisKK0JSTFRUWSdzIGNvbmZpZ3VyZSBzY3JpcHQgYXV0b21hdGljYWxseSBpbmNsdWRlcyB0aGlzIGRyaXZlciBpZiBNaWtyb3B1aGUgaGFzCitiZWVuIGluc3RhbGxlZC4gVGhlIGRlZmF1bHQgaXMgdG8gY2hlY2sgdGhlIGRpcmVjdG9yaWVzIC91c3IsIC91c3IvbG9jYWwsCisvdXNyL2xvY2FsL01pa3JvcHVoZSwgL3Vzci9sb2NhbC9taWtyb3B1aGUsIC9vcHQvTWlrcm9wdWhlLCBhbmQgL29wdC9taWtyb3B1aGUuIAorVGhlIGFjdHVhbCBsb2NhdGlvbiBjYW4gYmUgZXhwbGljaXRseSBzcGVjaWZpZWQgdmlhIC0td2l0aC1taWtyb3B1aGUuCisKK0NoZWNrIHRoZSBkYXRlIG9mIHRoZSBmaWxlICJsaWJtcGxpbnV4LnNvIiB3aXRoaW4gdGhlIE1pa3JvcHVoZSBwYWNrYWdlIHRvCitlbnN1cmUgdGhhdCB5b3UgaGF2ZSBhIHJlY2VudCBlbm91Z2ggdmVyc2lvbi4gSXQgbXVzdCBub3QgYmUgZGF0ZWQgZWFybGllciB0aGFuCitGZWJydWFyeSAyMywgMjAwNC4gUGxlYXNlIHNlZSB0aGUgaW5zdHJ1Y3Rpb25zIG9uIHRoZSBNaWtyb3B1aGUgQ0QtUk9NIG9yIGF0Citbd3d3Lm1pa3JvcHVoZS5jb21dLgorCitUaGlzIGRyaXZlciBjYW4gYmUgZWl0aGVyIGR5bmFtaWNhbGx5IGxvYWRlZCAoYXQgcnVuIHRpbWUpIG9yIGJ1aWx0IGRpcmVjdGx5CitpbnRvIGEgZHluYW1pY2FsbHkgbGlua2VkIEJSTFRUWSBiaW5hcnkgKHZpYSAtLXdpdGgtc3BlZWNoLWRyaXZlciksIGJ1dCBpdAorY2Fubm90IGJlIGJ1aWx0IGludG8gYSBzdGF0aWNhbGx5IGxpbmtlZCBCUkxUVFkgYmluYXJ5ICh2aWEKKy0tZW5hYmxlLXN0YW5kYWxvbmUtcHJvZ3JhbXMpIGJlY2F1c2UgdGhlIE1pa3JvcHVoZSBwYWNrYWdlIGRvZXNuJ3QgY29udGFpbiBhCitzdGF0aWMgYXJjaGl2ZS4gCisKK1RoaXMgZHJpdmVyIHJlY29nbml6ZXMgdGhlIGZvbGxvd2luZyBwYXJhbWV0ZXJzOgorCisgICBQYXJhbWV0ZXIgU2V0dGluZ3MKKyAgIG5hbWUgICAgICBuYW1lICgvcGF0aC90by9taWtyb3B1aGUvbmFtZS5wdTUpCisgICBwaXRjaCAgICAgLTEwLTEwCmRpZmYgLS1naXQgYS9Ecml2ZXJzL1NwZWVjaC9NaWtyb3B1aGUvc3BlZWNoLmMgYi9Ecml2ZXJzL1NwZWVjaC9NaWtyb3B1aGUvc3BlZWNoLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjBiNGM4ZgotLS0gL2Rldi9udWxsCisrKyBiL0RyaXZlcnMvU3BlZWNoL01pa3JvcHVoZS9zcGVlY2guYwpAQCAtMCwwICsxLDUwNCBAQAorLyoKKyAqIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisgKiAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisgKgorICogQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKKy8qIE1pa3JvcHVoZS9zcGVlY2guYyAtIFNwZWVjaCBsaWJyYXJ5CisgKiBGb3IgdGhlIE1pa3JvcHVoZSB0ZXh0IHRvIHNwZWVjaCBwYWNrYWdlCisgKiBNYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4KKyAqLworCisjaW5jbHVkZSAicHJvbG9ndWUuaCIKKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDx0aW1lLmg+CisjaW5jbHVkZSA8c3lzL3RpbWUuaD4KKworI2luY2x1ZGUgImxvZy5oIgorI2luY2x1ZGUgImZpbGUuaCIKKyNpbmNsdWRlICJwYXJzZS5oIgorI2luY2x1ZGUgInRocmVhZC5oIgorI2luY2x1ZGUgInF1ZXVlLmgiCisjaW5jbHVkZSAibm90ZXMuaCIKKyNpbmNsdWRlICJwY20uaCIKKyNpbmNsdWRlICJkeW5sZC5oIgorI2luY2x1ZGUgImNvcmUuaCIKKwordHlwZWRlZiBlbnVtIHsKKyAgUEFSTV9OQU1FLAorICBQQVJNX1BJVENICit9IERyaXZlclBhcmFtZXRlcjsKKyNkZWZpbmUgU1BLUEFSTVMgIm5hbWUiLCAicGl0Y2giCisKKyNpbmNsdWRlICJzcGtfZHJpdmVyLmgiCisjaW5jbHVkZSA8bXB3cmZpbGUuaD4KKworI2lmZGVmIEVOQUJMRV9TSEFSRURfT0JKRUNUUworc3RhdGljIHZvaWQgKnNwZWVjaExpYnJhcnkgPSBOVUxMOworI2VuZGlmIC8qIEVOQUJMRV9TSEFSRURfT0JKRUNUUyAqLworCitzdGF0aWMgTVBJTlRfQ2hhbm5lbEluaXRFeFR5cGUgbXBDaGFubmVsSW5pdEV4ID0gTlVMTDsKK3N0YXRpYyBNUElOVF9DaGFubmVsRXhpdFR5cGUgbXBDaGFubmVsRXhpdCA9IE5VTEw7CitzdGF0aWMgTVBJTlRfQ2hhbm5lbFNwZWFrRmlsZVR5cGUgbXBDaGFubmVsU3BlYWtGaWxlID0gTlVMTDsKKwordHlwZWRlZiBzdHJ1Y3QgeworICBjb25zdCBjaGFyICpuYW1lOworICB2b2lkICphZGRyZXNzOworfSBTeW1ib2xFbnRyeTsKKyNkZWZpbmUgU1lNQk9MX0VOVFJZKG5hbWUpIHsiTVBJTlRfIiAjbmFtZSwgJm1wIyNuYW1lfQorc3RhdGljIGNvbnN0IFN5bWJvbEVudHJ5IHN5bWJvbFRhYmxlW10gPSB7CisgIFNZTUJPTF9FTlRSWShDaGFubmVsSW5pdEV4KSwKKyAgU1lNQk9MX0VOVFJZKENoYW5uZWxFeGl0KSwKKyAgU1lNQk9MX0VOVFJZKENoYW5uZWxTcGVha0ZpbGUpLAorICB7TlVMTCwgTlVMTH0KK307CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgaW50IHRhZ3M7CisgIGludCBsZW5ndGg7Cit9IFNwZWVjaFNlZ21lbnQ7CisKK3N0YXRpYyBRdWV1ZSAqc3BlZWNoUXVldWUgPSBOVUxMOworc3RhdGljIHB0aHJlYWRfbXV0ZXhfdCBzcGVlY2hNdXRleDsKK3N0YXRpYyBwdGhyZWFkX2NvbmRfdCBzcGVlY2hDb25kaXRpb25hbDsKKworc3RhdGljIGludCBzeW50aGVzaXNUaHJlYWRTdGFydGVkID0gMDsKK3N0YXRpYyBwdGhyZWFkX3Qgc3ludGhlc2lzVGhyZWFkOworCitzdGF0aWMgdm9pZCAqc3BlZWNoQ2hhbm5lbCA9IE5VTEw7CitzdGF0aWMgTVBJTlRfU3BlYWtGaWxlUGFyYW1zIHNwZWVjaFBhcmFtZXRlcnM7CitzdGF0aWMgUGNtRGV2aWNlICpwY20gPSBOVUxMOworCitzdGF0aWMgaW50CitvcGVuU291bmREZXZpY2UgKHZvaWQpIHsKKyAgaWYgKCFwY20pIHsKKyAgICBpZiAoIShwY20gPSBvcGVuUGNtRGV2aWNlKExPR19XQVJOSU5HLCBvcHRfcGNtRGV2aWNlKSkpIHJldHVybiAwOworCisgICAgc3BlZWNoUGFyYW1ldGVycy5uQ2hhbm5lbHMgPSBzZXRQY21DaGFubmVsQ291bnQocGNtLCAxKTsKKyAgICBzcGVlY2hQYXJhbWV0ZXJzLm5TYW1wbGVGcmVxID0gc2V0UGNtU2FtcGxlUmF0ZShwY20sIDIyMDUwKTsKKyAgICB7CisgICAgICB0eXBlZGVmIHN0cnVjdCB7CisgICAgICAgIFBjbUFtcGxpdHVkZUZvcm1hdCBpbnRlcm5hbDsKKyAgICAgICAgaW50IGV4dGVybmFsOworICAgICAgfSBGb3JtYXRFbnRyeTsKKyAgICAgIHN0YXRpYyBjb25zdCBGb3JtYXRFbnRyeSBmb3JtYXRUYWJsZVtdID0geworICAgICAgICB7UENNX0ZNVF9TMTZMICAgLCAxNn0sCisgICAgICAgIHtQQ01fRk1UX1U4ICAgICAsICA4fSwKKyAgICAgICAge1BDTV9GTVRfVU5LTk9XTiwgIDB9CisgICAgICB9OworICAgICAgY29uc3QgRm9ybWF0RW50cnkgKmZvcm1hdCA9IGZvcm1hdFRhYmxlOworICAgICAgd2hpbGUgKGZvcm1hdC0+aW50ZXJuYWwgIT0gUENNX0ZNVF9VTktOT1dOKSB7CisgICAgICAgIGlmIChzZXRQY21BbXBsaXR1ZGVGb3JtYXQocGNtLCBmb3JtYXQtPmludGVybmFsKSA9PSBmb3JtYXQtPmludGVybmFsKSBicmVhazsKKyAgICAgICAgKytmb3JtYXQ7CisgICAgICB9CisgICAgICBpZiAoZm9ybWF0LT5pbnRlcm5hbCA9PSBQQ01fRk1UX1VOS05PV04pIHsKKyAgICAgICAgbG9nTWVzc2FnZShMT0dfV0FSTklORywgIk5vIHN1cHBvcnRlZCBzb3VuZCBmb3JtYXQuIik7CisgICAgICAgIGNsb3NlUGNtRGV2aWNlKHBjbSk7CisgICAgICAgIHBjbSA9IE5VTEw7CisgICAgICAgIHJldHVybiAwOworICAgICAgfQorICAgICAgc3BlZWNoUGFyYW1ldGVycy5uQml0cyA9IGZvcm1hdC0+ZXh0ZXJuYWw7CisgICAgfQorICAgIGxvZ01lc3NhZ2UoTE9HX0RFQlVHLCAiTWlrcm9wdWhlIGF1ZGlvIGNvbmZpZ3VyYXRpb246IGNoYW5uZWxzPSVkIHJhdGU9JWQgYml0cz0lZCIsCisgICAgICAgICAgICAgICBzcGVlY2hQYXJhbWV0ZXJzLm5DaGFubmVscywgc3BlZWNoUGFyYW1ldGVycy5uU2FtcGxlRnJlcSwgc3BlZWNoUGFyYW1ldGVycy5uQml0cyk7CisgIH0KKyAgcmV0dXJuIDE7Cit9CisKK3N0YXRpYyB2b2lkCitjbG9zZVNvdW5kRGV2aWNlICh2b2lkKSB7CisgIGlmIChwY20pIHsKKyAgICBjbG9zZVBjbURldmljZShwY20pOworICAgIHBjbSA9IE5VTEw7CisgIH0KK30KKworc3RhdGljIFNwZWVjaFNlZ21lbnQgKgorYWxsb2NhdGVTcGVlY2hTZWdtZW50IChjb25zdCB1bnNpZ25lZCBjaGFyICpieXRlcywgaW50IGxlbmd0aCwgaW50IHRhZ3MpIHsKKyAgU3BlZWNoU2VnbWVudCAqc2VnbWVudDsKKyAgaWYgKChzZWdtZW50ID0gbWFsbG9jKHNpemVvZigqc2VnbWVudCkgKyBsZW5ndGgpKSkgeworICAgIG1lbWNweShzZWdtZW50KzEsIGJ5dGVzLCBsZW5ndGgpOworICAgIHNlZ21lbnQtPmxlbmd0aCA9IGxlbmd0aDsKKyAgICBzZWdtZW50LT50YWdzID0gdGFnczsKKyAgfQorICByZXR1cm4gc2VnbWVudDsKK30KKworc3RhdGljIHZvaWQKK2RlYWxsb2NhdGVTcGVlY2hTZWdtZW50IChTcGVlY2hTZWdtZW50ICpzZWdtZW50KSB7CisgIGZyZWUoc2VnbWVudCk7Cit9CisKK3N0YXRpYyB2b2lkCitkZWFsbG9jYXRlU3BlZWNoSXRlbSAodm9pZCAqaXRlbSwgdm9pZCAqZGF0YSkgeworICBkZWFsbG9jYXRlU3BlZWNoU2VnbWVudChpdGVtKTsKK30KKworc3RhdGljIHZvaWQKK2xvZ1N5bnRoZXNpc0Vycm9yIChpbnQgY29kZSwgY29uc3QgY2hhciAqYWN0aW9uKSB7CisgIGNvbnN0IGNoYXIgKmV4cGxhbmF0aW9uOworICBzd2l0Y2ggKGNvZGUpIHsKKyAgICBkZWZhdWx0OgorICAgICAgZXhwbGFuYXRpb24gPSAidW5rbm93biI7CisgICAgICBicmVhazsKKyAgICBjYXNlIE1QSU5UX0VSUl9HRU5FUkFMOgorICAgICAgZXhwbGFuYXRpb24gPSAiZ2VuZXJhbCI7CisgICAgICBicmVhazsKKyAgICBjYXNlIE1QSU5UX0VSUl9TWU5USDoKKyAgICAgIGV4cGxhbmF0aW9uID0gInRleHQgc3ludGhlc2lzIjsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgTVBJTlRfRVJSX01FTToKKyAgICAgIGV4cGxhbmF0aW9uID0gImluc3VmZmljaWVudCBtZW1vcnkiOworICAgICAgYnJlYWs7CisgICAgY2FzZSBNUElOVF9FUlJfREVTVEZJTEVPUEVOOgorICAgICAgZXhwbGFuYXRpb24gPSAiZmlsZSBvcGVuIjsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgTVBJTlRfRVJSX0RFU1RGSUxFV1JJVEU6CisgICAgICBleHBsYW5hdGlvbiA9ICJmaWxlIHdyaXRlIjsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgTVBJTlRfRVJSX0VJTlZBTDoKKyAgICAgIGV4cGxhbmF0aW9uID0gInBhcmFtZXRlciI7CisgICAgICBicmVhazsKKyAgICBjYXNlIE1QSU5UX0VSUl9JTklUQkFES0VZOgorICAgICAgZXhwbGFuYXRpb24gPSAiaW52YWxpZCBrZXkiOworICAgICAgYnJlYWs7CisgICAgY2FzZSBNUElOVF9FUlJfSU5JVE5PVk9JQ0VTOgorICAgICAgZXhwbGFuYXRpb24gPSAibm8gdm9pY2VzIjsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgTVBJTlRfRVJSX0lOSVRWT0lDRUZBSUw6CisgICAgICBleHBsYW5hdGlvbiA9ICJ2b2ljZSBsb2FkIjsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgTVBJTlRfRVJSX0lOSVRURVhUUEFSU0U6CisgICAgICBleHBsYW5hdGlvbiA9ICJ0ZXh0IHBhcnNlciBsb2FkIjsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgTVBJTlRfRVJSX1NPVU5EQ0FSRDoKKyAgICAgIGV4cGxhbmF0aW9uID0gInNvdW5kIGRldmljZSI7CisgICAgICBicmVhazsKKyAgfQorICBsb2dNZXNzYWdlKExPR19FUlIsICJNaWtyb3B1aGUgJXMgZXJyb3I6ICVzIiwgYWN0aW9uLCBleHBsYW5hdGlvbik7Cit9CisKK3N0YXRpYyBpbnQKK3dyaXRlU291bmQgKGNvbnN0IHZvaWQgKmJ5dGVzLCB1bnNpZ25lZCBpbnQgY291bnQsIHZvaWQgKmRhdGEsIHZvaWQgKnJlc2VydmVkKSB7CisgIGlmIChzeW50aGVzaXNUaHJlYWRTdGFydGVkKSB7CisgICAgaWYgKHdyaXRlUGNtRGF0YShwY20sIGJ5dGVzLCBjb3VudCkpIHJldHVybiAwOworICAgIGxvZ1N5c3RlbUVycm9yKCJNaWtyb3B1aGUgd3JpdGUiKTsKKyAgICByZXR1cm4gTVBJTlRfRVJSX0dFTkVSQUw7CisgIH0KKyAgcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQKK3N5bnRoZXNpemVTcGVlY2ggKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ5dGVzLCBpbnQgbGVuZ3RoLCBpbnQgdGFncykgeworICBzcGVlY2hQYXJhbWV0ZXJzLm5UYWdzID0gdGFnczsKKyAgaWYgKG1wQ2hhbm5lbFNwZWFrRmlsZSkgeworICAgIGludCBlcnJvcjsKKyAgICBjaGFyIHN0cmluZ1tsZW5ndGgrMV07CisgICAgbWVtY3B5KHN0cmluZywgYnl0ZXMsIGxlbmd0aCk7CisgICAgc3RyaW5nW2xlbmd0aF0gPSAwOworICAgIGlmICghKGVycm9yID0gbXBDaGFubmVsU3BlYWtGaWxlKHNwZWVjaENoYW5uZWwsIHN0cmluZywgTlVMTCwgJnNwZWVjaFBhcmFtZXRlcnMpKSkgcmV0dXJuIDE7CisgICAgaWYgKGVycm9yICE9IDEpIGxvZ1N5bnRoZXNpc0Vycm9yKGVycm9yLCAiY2hhbm5lbCBzcGVhayIpOworICB9CisgIHJldHVybiAwOworfQorCitzdGF0aWMgdm9pZAorc3ludGhlc2l6ZVNwZWVjaFNlZ21lbnQgKGNvbnN0IFNwZWVjaFNlZ21lbnQgKnNlZ21lbnQpIHsKKyAgc3ludGhlc2l6ZVNwZWVjaCgodW5zaWduZWQgY2hhciAqKShzZWdtZW50KzEpLCBzZWdtZW50LT5sZW5ndGgsIHNlZ21lbnQtPnRhZ3MpOworfQorCitzdGF0aWMgdm9pZAorc3ludGhlc2l6ZVNwZWVjaFNlZ21lbnRzICh2b2lkKSB7CisgIFNwZWVjaFNlZ21lbnQgKnNlZ21lbnQ7CisgIHdoaWxlICgoc2VnbWVudCA9IGRlcXVldWVJdGVtKHNwZWVjaFF1ZXVlKSkpIHsKKyAgICBpZiAoc2VnbWVudC0+dGFncykgeworICAgICAgc3ludGhlc2l6ZVNwZWVjaFNlZ21lbnQoc2VnbWVudCk7CisgICAgfSBlbHNlIGlmIChzeW50aGVzaXNUaHJlYWRTdGFydGVkICYmIG9wZW5Tb3VuZERldmljZSgpKSB7CisgICAgICBwdGhyZWFkX211dGV4X3VubG9jaygmc3BlZWNoTXV0ZXgpOworICAgICAgc3ludGhlc2l6ZVNwZWVjaFNlZ21lbnQoc2VnbWVudCk7CisgICAgICBwdGhyZWFkX211dGV4X2xvY2soJnNwZWVjaE11dGV4KTsKKyAgICB9CisgICAgZGVhbGxvY2F0ZVNwZWVjaFNlZ21lbnQoc2VnbWVudCk7CisgIH0KK30KKworc3RhdGljIGludAorYXdhaXRTcGVlY2hTZWdtZW50ICh2b2lkKSB7CisgIHdoaWxlIChzeW50aGVzaXNUaHJlYWRTdGFydGVkKSB7CisgICAgaW50IGVycm9yOworCisgICAgaWYgKHBjbSkgeworICAgICAgc3RydWN0IHRpbWV2YWwgbm93OworICAgICAgc3RydWN0IHRpbWVzcGVjIHRpbWVvdXQ7CisgICAgICBnZXR0aW1lb2ZkYXkoJm5vdywgTlVMTCk7CisgICAgICB0aW1lb3V0LnR2X3NlYyA9IG5vdy50dl9zZWMgKyAzOworICAgICAgdGltZW91dC50dl9uc2VjID0gbm93LnR2X3VzZWMgKiAxMDAwOworICAgICAgZXJyb3IgPSBwdGhyZWFkX2NvbmRfdGltZWR3YWl0KCZzcGVlY2hDb25kaXRpb25hbCwgJnNwZWVjaE11dGV4LCAmdGltZW91dCk7CisgICAgfSBlbHNlIHsKKyAgICAgIGVycm9yID0gcHRocmVhZF9jb25kX3dhaXQoJnNwZWVjaENvbmRpdGlvbmFsLCAmc3BlZWNoTXV0ZXgpOworICAgIH0KKworICAgIHN3aXRjaCAoZXJyb3IpIHsKKyAgICAgIGNhc2UgMDoKKyAgICAgICAgcmV0dXJuIDE7CisKKyAgICAgIGNhc2UgRVRJTUVET1VUOgorICAgICAgICBjbG9zZVNvdW5kRGV2aWNlKCk7CisgICAgICAgIGNvbnRpbnVlOworCisgICAgICBkZWZhdWx0OgorICAgICAgICBsb2dTeXN0ZW1FcnJvcigicHRocmVhZF9jb25kX3RpbWVkd2FpdCIpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgIH0KKyAgcmV0dXJuIDA7Cit9CisKK1RIUkVBRF9GVU5DVElPTihtcFNwZWVjaFN5bnRoZXNpc1RocmVhZCkgeworICBwdGhyZWFkX3NldGNhbmNlbHN0YXRlKFBUSFJFQURfQ0FOQ0VMX0RJU0FCTEUsIE5VTEwpOworICBwdGhyZWFkX211dGV4X2xvY2soJnNwZWVjaE11dGV4KTsKKworICB3aGlsZSAoc3ludGhlc2lzVGhyZWFkU3RhcnRlZCkgeworICAgIHN5bnRoZXNpemVTcGVlY2hTZWdtZW50cygpOworICAgIGF3YWl0U3BlZWNoU2VnbWVudCgpOworICB9CisKKyAgcHRocmVhZF9tdXRleF91bmxvY2soJnNwZWVjaE11dGV4KTsKKyAgcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBpbnQKK3N0YXJ0U3ludGhlc2lzVGhyZWFkICh2b2lkKSB7CisgIGludCBlcnJvcjsKKyAgaWYgKHN5bnRoZXNpc1RocmVhZFN0YXJ0ZWQpIHJldHVybiAxOworCisgIHN5bnRoZXNpc1RocmVhZFN0YXJ0ZWQgPSAxOworICBpZiAoIShlcnJvciA9IHB0aHJlYWRfbXV0ZXhfaW5pdCgmc3BlZWNoTXV0ZXgsIE5VTEwpKSkgeworICAgIGlmICghKGVycm9yID0gcHRocmVhZF9jb25kX2luaXQoJnNwZWVjaENvbmRpdGlvbmFsLCBOVUxMKSkpIHsKKyAgICAgIHB0aHJlYWRfYXR0cl90IGF0dHJpYnV0ZXM7CisgICAgICBpZiAoIShlcnJvciA9IHB0aHJlYWRfYXR0cl9pbml0KCZhdHRyaWJ1dGVzKSkpIHsKKyAgICAgICAgcHRocmVhZF9hdHRyX3NldGRldGFjaHN0YXRlKCZhdHRyaWJ1dGVzLCBQVEhSRUFEX0NSRUFURV9KT0lOQUJMRSk7CisgICAgICAgIGVycm9yID0gY3JlYXRlVGhyZWFkKCJkcml2ZXItc3BlZWNoLU1pa3JvcHVoZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnN5bnRoZXNpc1RocmVhZCwgJmF0dHJpYnV0ZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXBTcGVlY2hTeW50aGVzaXNUaHJlYWQsIE5VTEwpOworICAgICAgICBwdGhyZWFkX2F0dHJfZGVzdHJveSgmYXR0cmlidXRlcyk7CisgICAgICAgIGlmICghZXJyb3IpIHsKKyAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICBsb2dNZXNzYWdlKExPR19FUlIsICJDYW5ub3QgY3JlYXRlIHNwZWVjaCB0aHJlYWQ6ICVzIiwgc3RyZXJyb3IoZXJyb3IpKTsKKyAgICAgICAgfQorICAgICAgfSBlbHNlIHsKKyAgICAgICAgbG9nTWVzc2FnZShMT0dfRVJSLCAiQ2Fubm90IGluaXRpYWxpemUgc3BlZWNoIHRocmVhZCBhdHRyaWJ1dGVzOiAlcyIsIHN0cmVycm9yKGVycm9yKSk7CisgICAgICB9CisKKyAgICAgIHB0aHJlYWRfY29uZF9kZXN0cm95KCZzcGVlY2hDb25kaXRpb25hbCk7CisgICAgfSBlbHNlIHsKKyAgICAgIGxvZ01lc3NhZ2UoTE9HX0VSUiwgIkNhbm5vdCBpbml0aWFsaXplIHNwZWVjaCBjb25kaXRpb25hbDogJXMiLCBzdHJlcnJvcihlcnJvcikpOworICAgIH0KKworICAgIHB0aHJlYWRfbXV0ZXhfZGVzdHJveSgmc3BlZWNoTXV0ZXgpOworICB9IGVsc2UgeworICAgIGxvZ01lc3NhZ2UoTE9HX0VSUiwgIkNhbm5vdCBpbml0aWFsaXplIHNwZWVjaCBtdXRleDogJXMiLCBzdHJlcnJvcihlcnJvcikpOworICB9CisgIHN5bnRoZXNpc1RocmVhZFN0YXJ0ZWQgPSAwOworICByZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQKK3N0b3BTeW50aGVzaXNUaHJlYWQgKHZvaWQpIHsKKyAgaWYgKHN5bnRoZXNpc1RocmVhZFN0YXJ0ZWQpIHsKKyAgICBzeW50aGVzaXNUaHJlYWRTdGFydGVkID0gMDsKKyAgICBwdGhyZWFkX211dGV4X2xvY2soJnNwZWVjaE11dGV4KTsKKyAgICBwdGhyZWFkX2NvbmRfc2lnbmFsKCZzcGVlY2hDb25kaXRpb25hbCk7CisgICAgcHRocmVhZF9tdXRleF91bmxvY2soJnNwZWVjaE11dGV4KTsKKyAgICBwdGhyZWFkX2pvaW4oc3ludGhlc2lzVGhyZWFkLCBOVUxMKTsKKyAgICBwdGhyZWFkX2NvbmRfZGVzdHJveSgmc3BlZWNoQ29uZGl0aW9uYWwpOworICAgIHB0aHJlYWRfbXV0ZXhfZGVzdHJveSgmc3BlZWNoTXV0ZXgpOworICB9Cit9CisKK3N0YXRpYyBpbnQKK2VucXVldWVTcGVlY2ggKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ5dGVzLCBpbnQgbGVuZ3RoLCBpbnQgdGFncykgeworICBpZiAoc3RhcnRTeW50aGVzaXNUaHJlYWQoKSkgeworICAgIFNwZWVjaFNlZ21lbnQgKnNlZ21lbnQ7CisgICAgaWYgKChzZWdtZW50ID0gYWxsb2NhdGVTcGVlY2hTZWdtZW50KGJ5dGVzLCBsZW5ndGgsIHRhZ3MpKSkgeworICAgICAgRWxlbWVudCAqZWxlbWVudDsKKyAgICAgIHB0aHJlYWRfbXV0ZXhfbG9jaygmc3BlZWNoTXV0ZXgpOworICAgICAgZWxlbWVudCA9IGVucXVldWVJdGVtKHNwZWVjaFF1ZXVlLCBzZWdtZW50KTsKKyAgICAgIGlmIChlbGVtZW50KSB7CisgICAgICAgIHB0aHJlYWRfY29uZF9zaWduYWwoJnNwZWVjaENvbmRpdGlvbmFsKTsKKyAgICAgICAgcHRocmVhZF9tdXRleF91bmxvY2soJnNwZWVjaE11dGV4KTsKKyAgICAgICAgcmV0dXJuIDE7CisgICAgICB9CisgICAgICBwdGhyZWFkX211dGV4X3VubG9jaygmc3BlZWNoTXV0ZXgpOworICAgICAgZGVhbGxvY2F0ZVNwZWVjaFNlZ21lbnQoc2VnbWVudCk7CisgICAgfQorICB9CisgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50CitlbnF1ZXVlVGV4dCAoY29uc3QgdW5zaWduZWQgY2hhciAqYnl0ZXMsIGludCBsZW5ndGgpIHsKKyAgcmV0dXJuIGVucXVldWVTcGVlY2goYnl0ZXMsIGxlbmd0aCwgMCk7Cit9CisKK3N0YXRpYyBpbnQKK2VucXVldWVUYWcgKGNvbnN0IGNoYXIgKnRhZykgeworICByZXR1cm4gZW5xdWV1ZVNwZWVjaCgodW5zaWduZWQgY2hhciAqKXRhZywgc3RybGVuKHRhZyksIE1QSU5UX1RBR1NfT1dOfE1QSU5UX1RBR1NfU0FQSTUpOworfQorCitzdGF0aWMgdm9pZAorbG9hZFN5bnRoZXNpc0xpYnJhcnkgKHZvaWQpIHsKKyNpZmRlZiBFTkFCTEVfU0hBUkVEX09CSkVDVFMKKyAgaWYgKCFzcGVlY2hMaWJyYXJ5KSB7CisgICAgc3RhdGljIGNvbnN0IGNoYXIgKm5hbWUgPSAibGlibXBsaW51eC4iIExJQlJBUllfRVhURU5TSU9OOworICAgIGNoYXIgKnBhdGggPSBtYWtlUGF0aChNSUtST1BVSEVfUk9PVCwgbmFtZSk7CisgICAgaWYgKHBhdGgpIHsKKyAgICAgIGlmICgoc3BlZWNoTGlicmFyeSA9IGxvYWRTaGFyZWRPYmplY3QocGF0aCkpKSB7CisgICAgICAgIGNvbnN0IFN5bWJvbEVudHJ5ICpzeW1ib2wgPSBzeW1ib2xUYWJsZTsKKyAgICAgICAgd2hpbGUgKHN5bWJvbC0+bmFtZSkgeworICAgICAgICAgIHZvaWQgKiphZGRyZXNzID0gc3ltYm9sLT5hZGRyZXNzOworICAgICAgICAgIGlmIChmaW5kU2hhcmVkU3ltYm9sKHNwZWVjaExpYnJhcnksIHN5bWJvbC0+bmFtZSwgYWRkcmVzcykpIHsKKyAgICAgICAgICAgIGxvZ01lc3NhZ2UoTE9HX0RFQlVHLCAiTWlrcm9wdWhlIHN5bWJvbDogJXMgLT4gJXAiLAorICAgICAgICAgICAgICAgICAgICAgICBzeW1ib2wtPm5hbWUsICphZGRyZXNzKTsKKyAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgbG9nTWVzc2FnZShMT0dfRVJSLCAiTWlrcm9wdWhlIHN5bWJvbCBub3QgZm91bmQ6ICVzIiwgc3ltYm9sLT5uYW1lKTsKKyAgICAgICAgICB9CisgICAgICAgICAgKytzeW1ib2w7CisgICAgICAgIH0KKyAgICAgIH0gZWxzZSB7CisgICAgICAgIGxvZ01lc3NhZ2UoTE9HX0VSUiwgIk1pa3JvcHVoZSBsaWJyYXJ5IG5vdCBsb2FkZWQ6ICVzIiwgcGF0aCk7CisgICAgICB9CisgICAgICBmcmVlKHBhdGgpOworICAgIH0KKyAgfQorI2VuZGlmIC8qIEVOQUJMRV9TSEFSRURfT0JKRUNUUyAqLworfQorCitzdGF0aWMgdm9pZAorc3BrX3NheSAoU3BlZWNoU3ludGhlc2l6ZXIgKnNwaywgY29uc3QgdW5zaWduZWQgY2hhciAqYnVmZmVyLCBzaXplX3QgbGVuZ3RoLCBzaXplX3QgY291bnQsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmF0dHJpYnV0ZXMpIHsKKyAgaWYgKGVucXVldWVUZXh0KGJ1ZmZlciwgbGVuZ3RoKSkKKyAgICBlbnF1ZXVlVGFnKCI8YnJlYWsgdGltZT1cIm5vbmVcIi8+Iik7Cit9CisKK3N0YXRpYyB2b2lkCitzcGtfbXV0ZSAoU3BlZWNoU3ludGhlc2l6ZXIgKnNwaykgeworICBzdG9wU3ludGhlc2lzVGhyZWFkKCk7CisgIGlmIChwY20pIGNhbmNlbFBjbU91dHB1dChwY20pOworfQorCitzdGF0aWMgdm9pZAorc3BrX3NldFZvbHVtZSAoU3BlZWNoU3ludGhlc2l6ZXIgKnNwaywgdW5zaWduZWQgY2hhciBzZXR0aW5nKSB7CisgIGNoYXIgdGFnWzBYNDBdOworICB1bnNpZ25lZCBpbnQgcGVyY2VudGFnZSA9IGdldEludGVnZXJTcGVlY2hWb2x1bWUoc2V0dGluZywgMTAwKTsKKyAgc25wcmludGYodGFnLCBzaXplb2YodGFnKSwgIjx2b2x1bWUgbGV2ZWw9XCIlZFwiLz4iLAorICAgICAgICAgICBNQVgocGVyY2VudGFnZSwgMSkpOworICBlbnF1ZXVlVGFnKHRhZyk7Cit9CisKK3N0YXRpYyB2b2lkCitzcGtfc2V0UmF0ZSAoU3BlZWNoU3ludGhlc2l6ZXIgKnNwaywgdW5zaWduZWQgY2hhciBzZXR0aW5nKSB7CisgIGNoYXIgdGFnWzBYNDBdOworICBzbnByaW50Zih0YWcsIHNpemVvZih0YWcpLCAiPHJhdGUgYWJzc3BlZWQ9XCIlZFwiLz4iLAorICAgICAgICAgICBnZXRJbnRlZ2VyU3BlZWNoUmF0ZShzZXR0aW5nLCAxMCktMTApOworICBlbnF1ZXVlVGFnKHRhZyk7Cit9CisKK3N0YXRpYyBpbnQKK3Nwa19jb25zdHJ1Y3QgKFNwZWVjaFN5bnRoZXNpemVyICpzcGssIGNoYXIgKipwYXJhbWV0ZXJzKSB7CisgIGludCBjb2RlOworCisgIHNway0+c2V0Vm9sdW1lID0gc3BrX3NldFZvbHVtZTsKKyAgc3BrLT5zZXRSYXRlID0gc3BrX3NldFJhdGU7CisKKyAgbG9hZFN5bnRoZXNpc0xpYnJhcnkoKTsKKworICBpZiAoKHNwZWVjaFF1ZXVlID0gbmV3UXVldWUoZGVhbGxvY2F0ZVNwZWVjaEl0ZW0sIE5VTEwpKSkgeworICAgIGlmIChtcENoYW5uZWxJbml0RXgpIHsKKyAgICAgIGlmICghKGNvZGUgPSBtcENoYW5uZWxJbml0RXgoJnNwZWVjaENoYW5uZWwsIE5VTEwsIE5VTEwsIE5VTEwpKSkgeworICAgICAgICBtZW1zZXQoJnNwZWVjaFBhcmFtZXRlcnMsIDAsIHNpemVvZihzcGVlY2hQYXJhbWV0ZXJzKSk7CisgICAgICAgIHNwZWVjaFBhcmFtZXRlcnMubldyaXRlV2F2SGVhZGVyID0gMDsKKyAgICAgICAgc3BlZWNoUGFyYW1ldGVycy5wZm5Xcml0ZSA9IHdyaXRlU291bmQ7CisgICAgICAgIHNwZWVjaFBhcmFtZXRlcnMucFdyaXRlRGF0YSA9IE5VTEw7CisKKyAgICAgICAgeworICAgICAgICAgIGNvbnN0IGNoYXIgKm5hbWUgPSBwYXJhbWV0ZXJzW1BBUk1fTkFNRV07CisgICAgICAgICAgaWYgKG5hbWUgJiYgKm5hbWUpIHsKKyAgICAgICAgICAgIGNoYXIgdGFnWzBYMTAwXTsKKyAgICAgICAgICAgIHNucHJpbnRmKHRhZywgc2l6ZW9mKHRhZyksICI8dm9pY2UgbmFtZT1cIiVzXCIvPiIsIG5hbWUpOworICAgICAgICAgICAgZW5xdWV1ZVRhZyh0YWcpOworICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHsKKyAgICAgICAgICBjb25zdCBjaGFyICpwaXRjaCA9IHBhcmFtZXRlcnNbUEFSTV9QSVRDSF07CisgICAgICAgICAgaWYgKHBpdGNoICYmICpwaXRjaCkgeworICAgICAgICAgICAgaW50IHNldHRpbmcgPSAwOworICAgICAgICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5pbXVtID0gLTEwOworICAgICAgICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhpbXVtID0gMTA7CisgICAgICAgICAgICBpZiAodmFsaWRhdGVJbnRlZ2VyKCZzZXR0aW5nLCBwaXRjaCwgJm1pbmltdW0sICZtYXhpbXVtKSkgeworICAgICAgICAgICAgICBjaGFyIHRhZ1swWDEwMF07CisgICAgICAgICAgICAgIHNucHJpbnRmKHRhZywgc2l6ZW9mKHRhZyksICI8cGl0Y2ggYWJzbWlkZGxlPVwiJWRcIi8+Iiwgc2V0dGluZyk7CisgICAgICAgICAgICAgIGVucXVldWVUYWcodGFnKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgIGxvZ01lc3NhZ2UoTE9HX1dBUk5JTkcsICIlczogJXMiLCAiaW52YWxpZCBwaXRjaCBzcGVjaWZpY2F0aW9uIiwgcGl0Y2gpOworICAgICAgICAgICAgfQorICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiAxOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgbG9nU3ludGhlc2lzRXJyb3IoY29kZSwgImNoYW5uZWwgaW5pdGlhbGl6YXRpb24iKTsKKyAgICAgIH0KKyAgICB9CisgIH0gZWxzZSB7CisgICAgbG9nTWVzc2FnZShMT0dfRVJSLCAiQ2Fubm90IGFsbG9jYXRlIHNwZWVjaCBxdWV1ZS4iKTsKKyAgfQorCisgIHNwa19kZXN0cnVjdChzcGspOworICByZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQKK3Nwa19kZXN0cnVjdCAoU3BlZWNoU3ludGhlc2l6ZXIgKnNwaykgeworICBzdG9wU3ludGhlc2lzVGhyZWFkKCk7CisgIGNsb3NlU291bmREZXZpY2UoKTsKKworICBpZiAoc3BlZWNoUXVldWUpIHsKKyAgICBkZWFsbG9jYXRlUXVldWUoc3BlZWNoUXVldWUpOworICAgIHNwZWVjaFF1ZXVlID0gTlVMTDsKKyAgfQorCisgIGlmIChzcGVlY2hDaGFubmVsKSB7CisgICAgaWYgKG1wQ2hhbm5lbEV4aXQpIG1wQ2hhbm5lbEV4aXQoc3BlZWNoQ2hhbm5lbCwgTlVMTCwgMCk7CisgICAgc3BlZWNoQ2hhbm5lbCA9IE5VTEw7CisgIH0KKworI2lmZGVmIEVOQUJMRV9TSEFSRURfT0JKRUNUUworICBpZiAoc3BlZWNoTGlicmFyeSkgeworICAgIGNvbnN0IFN5bWJvbEVudHJ5ICpzeW1ib2wgPSBzeW1ib2xUYWJsZTsKKyAgICB3aGlsZSAoc3ltYm9sLT5uYW1lKSB7CisgICAgICB2b2lkICoqYWRkcmVzcyA9IChzeW1ib2wrKyktPmFkZHJlc3M7CisgICAgICAqYWRkcmVzcyA9IE5VTEw7CisgICAgfQorCisgICAgdW5sb2FkU2hhcmVkT2JqZWN0KHNwZWVjaExpYnJhcnkpOworICAgIHNwZWVjaExpYnJhcnkgPSBOVUxMOworICB9CisjZW5kaWYgLyogRU5BQkxFX1NIQVJFRF9PQkpFQ1RTICovCit9CmRpZmYgLS1naXQgYS9Ecml2ZXJzL1NwZWVjaC9NdWx0aUJyYWlsbGUvTWFrZWZpbGUuaW4gYi9Ecml2ZXJzL1NwZWVjaC9NdWx0aUJyYWlsbGUvTWFrZWZpbGUuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzI1Mjk4ZgotLS0gL2Rldi9udWxsCisrKyBiL0RyaXZlcnMvU3BlZWNoL011bHRpQnJhaWxsZS9NYWtlZmlsZS5pbgpAQCAtMCwwICsxLDI4IEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisjICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorIworIyBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisjCisjIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisjCisjIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyMgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorIyBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyMKKyMgV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworIworIyBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworRFJJVkVSX0NPREUgPSBtYgorRFJJVkVSX05BTUUgPSBNdWx0aUJyYWlsbGUKK0RSSVZFUl9VU0FHRSA9IGJyYWlsbGUgZGV2aWNlCitEUklWRVJfVkVSU0lPTiA9IAorRFJJVkVSX0RFVkVMT1BFUlMgPSAKK2luY2x1ZGUgJChTUkNfVE9QKXNwZWVjaC5taworCitzcGVlY2guJE86CisJJChDQykgJChTUEtfQ0ZMQUdTKSAtYyAkKFNSQ19ESVIpL3NwZWVjaC5jCisKZGlmZiAtLWdpdCBhL0RyaXZlcnMvU3BlZWNoL011bHRpQnJhaWxsZS9zcGVlY2guYyBiL0RyaXZlcnMvU3BlZWNoL011bHRpQnJhaWxsZS9zcGVlY2guYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYjE0NmE1Ci0tLSAvZGV2L251bGwKKysrIGIvRHJpdmVycy9TcGVlY2gvTXVsdGlCcmFpbGxlL3NwZWVjaC5jCkBAIC0wLDAgKzEsMTA0IEBACisvKgorICogQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyAqICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyAqCisgKiBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorICoKKyAqIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyAqCisgKiBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisgKi8KKworI2luY2x1ZGUgInByb2xvZ3VlLmgiCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKyNpbmNsdWRlICJzcGtfZHJpdmVyLmgiCisjaW5jbHVkZSAic3BlZWNoLmgiCQkvKiBmb3Igc3BlZWNoIGRlZmluaXRpb25zICovCisjaW5jbHVkZSAiRHJpdmVycy9CcmFpbGxlL011bHRpQnJhaWxsZS9icmFpbGxlLmgiCisKKy8qIGNoYXJzZXQgY29udmVyc2lvbiB0YWJsZSBmcm9tIGlzbyBsYXRpbi0xID09IGlzbyA4ODU5LTEgdG8gY3A0Mzc9PWlibXBjCisgKiBmb3IgY2hhcnMgPj0xMjguIAorICovCitzdGF0aWMgdW5zaWduZWQgY2hhciBsYXRpbjJjcDQzN1swWDgwXSA9CisgIHsxOTksIDI1MiwgMjMzLCAyMjYsIDIyOCwgMjI0LCAyMjksIDIzMSwKKyAgIDIzNCwgMjM1LCAyMzIsIDIzOSwgMjM4LCAyMzYsIDE5NiwgMTk3LAorICAgMjAxLCAxODEsIDE5OCwgMjQ0LCAyNDcsIDI0MiwgMjUxLCAyNDksCisgICAyMjMsIDIxNCwgMjIwLCAyNDMsIDE4MywgMjA5LCAxNTgsIDE1OSwKKyAgIDI1NSwgMTczLCAxNTUsIDE1NiwgMTc3LCAxNTcsIDE4OCwgMjEsCisgICAxOTEsIDE2OSwgMTY2LCAxNzQsIDE3MCwgMjM3LCAxODksIDE4NywKKyAgIDI0OCwgMjQxLCAyNTMsIDE3OSwgMTgwLCAyMzAsIDIwLCAyNTAsCisgICAxODQsIDE4NSwgMTY3LCAxNzUsIDE3MiwgMTcxLCAxOTAsIDE2OCwKKyAgIDE5MiwgMTkzLCAxOTQsIDE5NSwgMTQyLCAxNDMsIDE0NiwgMTI4LAorICAgMjAwLCAxNDQsIDIwMiwgMjAzLCAyMDQsIDIwNSwgMjA2LCAyMDcsCisgICAyMDgsIDE2NSwgMjEwLCAyMTEsIDIxMiwgMjEzLCAxNTMsIDIxNSwKKyAgIDIxNiwgMjE3LCAyMTgsIDIxOSwgMTU0LCAyMjEsIDIyMiwgMjI1LAorICAgMTMzLCAxNjAsIDEzMSwgMjI3LCAxMzIsIDEzNCwgMTQ1LCAxMzUsCisgICAxMzgsIDEzMCwgMTM2LCAxMzcsIDE0MSwgMTYxLCAxNDAsIDEzOSwKKyAgIDI0MCwgMTY0LCAxNDksIDE2MiwgMTQ3LCAyNDUsIDE0OCwgMjQ2LAorICAgMTc2LCAxNTEsIDE2MywgMTUwLCAxMjksIDE3OCwgMjU0LCAxNTJ9OworCitzdGF0aWMgaW50CitzcGtfY29uc3RydWN0IChTcGVlY2hTeW50aGVzaXplciAqc3BrLCBjaGFyICoqcGFyYW1ldGVycykKK3sKKyAgcmV0dXJuIDE7Cit9CisKKworc3RhdGljIHZvaWQKK3Nwa19zYXkgKFNwZWVjaFN5bnRoZXNpemVyICpzcGssIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZmZlciwgc2l6ZV90IGxlbiwgc2l6ZV90IGNvdW50LCBjb25zdCB1bnNpZ25lZCBjaGFyICphdHRyaWJ1dGVzKQoreworICB1bnNpZ25lZCBjaGFyICpwcmVfc3BlZWNoID0gKHVuc2lnbmVkIGNoYXIgKilQUkVfU1BFRUNIOworICB1bnNpZ25lZCBjaGFyICpwb3N0X3NwZWVjaCA9ICh1bnNpZ25lZCBjaGFyICopUE9TVF9TUEVFQ0g7CisgIHVuc2lnbmVkIGNoYXIgYzsKKyAgaW50IGk7CisKKyAgaWYgKHByZV9zcGVlY2hbMF0pCisgICAgeworICAgICAgc2VyaWFsV3JpdGVEYXRhIChNQl9zZXJpYWxEZXZpY2UsIHByZV9zcGVlY2grMSwgcHJlX3NwZWVjaFswXSk7CisgICAgfQorICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspCisgICAgeworICAgICAgYyA9IGJ1ZmZlcltpXTsKKyAgICAgIGlmIChjID49IDBYODApIGMgPSBsYXRpbjJjcDQzN1tjLTBYODBdOworICAgICAgaWYgKGMgPCAzMykJLyogc3BhY2Ugb3IgY29udHJvbCBjaGFyYWN0ZXIgKi8KKwl7CisJICBzdGF0aWMgY29uc3QgY2hhciBibGFuayA9ICcgJzsKKwkgIHNlcmlhbFdyaXRlRGF0YSAoTUJfc2VyaWFsRGV2aWNlLCAmYmxhbmssIDEpOworCX0KKyAgICAgIGVsc2UgaWYgKGMgPiBNQVhfVFJBTlMpCisJc2VyaWFsV3JpdGVEYXRhIChNQl9zZXJpYWxEZXZpY2UsICZjLCAxKTsKKyAgICAgIGVsc2UKKwl7CisgICAgICAgICAgY29uc3QgY2hhciAqd29yZCA9IHZvY2FiW2MgLSAzM107CisJICBzZXJpYWxXcml0ZURhdGEgKE1CX3NlcmlhbERldmljZSwgd29yZCwgc3RybGVuICh3b3JkKSk7CisJfQorICAgIH0KKyAgaWYgKHBvc3Rfc3BlZWNoWzBdKQorICAgIHsKKyAgICAgIHNlcmlhbFdyaXRlRGF0YSAoTUJfc2VyaWFsRGV2aWNlLCBwb3N0X3NwZWVjaCsxLCBwb3N0X3NwZWVjaFswXSk7CisgICAgfQorfQorCisKK3N0YXRpYyB2b2lkCitzcGtfbXV0ZSAoU3BlZWNoU3ludGhlc2l6ZXIgKnNwaykKK3sKKyAgdW5zaWduZWQgY2hhciAqbXV0ZV9zZXEgPSAodW5zaWduZWQgY2hhciAqKU1VVEVfU0VROworICBzZXJpYWxXcml0ZURhdGEgKE1CX3NlcmlhbERldmljZSwgbXV0ZV9zZXErMSwgbXV0ZV9zZXFbMF0pOworfQorCisKK3N0YXRpYyB2b2lkCitzcGtfZGVzdHJ1Y3QgKFNwZWVjaFN5bnRoZXNpemVyICpzcGspCit7Cit9CmRpZmYgLS1naXQgYS9Ecml2ZXJzL1NwZWVjaC9NdWx0aUJyYWlsbGUvc3BlZWNoLmggYi9Ecml2ZXJzL1NwZWVjaC9NdWx0aUJyYWlsbGUvc3BlZWNoLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmUwZmIzZgotLS0gL2Rldi9udWxsCisrKyBiL0RyaXZlcnMvU3BlZWNoL011bHRpQnJhaWxsZS9zcGVlY2guaApAQCAtMCwwICsxLDEzMiBAQAorLyoKKyAqIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisgKiAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisgKgorICogQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKKy8qIFRoZXNlIHNlcXVlbmNlcyBhcmUgc2VudCB0byB0aGUgQ29tYmlCcmFpbGxlIGJlZm9yZSBhbmQgYWZ0ZXIgdGhlCisgKiBzcGVlY2ggZGF0YSBpdHNlbGYuICBUaGUgZmlyc3QgYnl0ZSBpcyB0aGUgbGVuZ3RoLCBzbyBlbWJlZGRlZCBudWxzIGFyZQorICogYWxsb3dlZC4KKyAqLworI2RlZmluZSBQUkVfU1BFRUNIICJcMDAyXDAzM1MiCisjZGVmaW5lIFBPU1RfU1BFRUNIICJcMDAxXDAxNSIKKworLyogVGhpcyBpcyBzZW50IHRvIG11dGUgdGhlIHNwZWVjaC4gIFRoZSBmb3JtYXQgaXMgdGhlIHNhbWUgYXMgYWJvdmUuICovCisjZGVmaW5lIE1VVEVfU0VRICJcMDAzXDAzM1NcMDMwIgorCisvKiBUaGUgc3BlZWNoIGRhdGEgaXRzZWxmIGlzIHRyYW5zbGF0ZWQgY2hhcmFjdGVyIGJ5IGNoYXJhY3Rlci4gIElmIGEKKyAqIGNoYXJhY3RlciBpcyBsZXNzIHRoYW4gMzMgKGkuZS4gc3BhY2Ugb3IgY29udHJvbCksIGl0IGlzIHJlcGxhY2VkIGJ5IGEKKyAqIHNwYWNlLiAgSWYgdGhlIGNoYXJhY3RlciBpcyBtb3JlIHRoYW4gTUFYX1RSQU5TLCBpdCBpcyBwYXNzZWQgdGhyb3VnaAorICogYXMgaXMuICBPdGhlcndpc2UgdGhlIGNoYXJhY3RlciBuIGlzIHJlcGxhY2VkIGJ5IHRoZSBzdHJpbmcgdm9jYWJbbiAtIDMzXS4KKyAqLworCisjZGVmaW5lIE1BWF9UUkFOUyAxMjYKK3N0YXRpYyBjb25zdCBjaGFyICp2b2NhYltNQVhfVFJBTlMgLSAzMl0gPQoreworICAiIGV4Y2xhbWF0aW9uICIsCisgICIgZG91YmxlIHF1b3RlICIsCisgICIgaGFzaCAiLAorICAiIGRvbGxhciAiLAorICAiIHBlcmNlbnQgIiwKKyAgIiBhbXBlcnNhbmQgIiwKKyAgIiBxdW90ZSAiLAorICAiIGxlZnQgcGFyZW4gIiwKKyAgIiByaWdodCBwYXJlbiAiLAorICAiIHN0YXIgIiwKKyAgIiBwbHVzICIsCisgICIgY29tbWEgIiwKKyAgIiBkYXNoICIsCisgICIgZG90ICIsCisgICIgc2xhc2ggIiwKKyAgIjAiLAorICAiMSIsCisgICIyIiwKKyAgIjMiLAorICAiNCIsCisgICI1IiwKKyAgIjYiLAorICAiNyIsCisgICI4IiwKKyAgIjkiLAorICAiIGNvbG9uICIsCisgICIgc2VtaWNvbG9uICIsCisgICIgbGVzcyB0aGFuICIsCisgICIgZXF1YWxzICIsCisgICIgZ3JlYXRlciB0aGFuICIsCisgICIgcXVlc3Rpb24gIiwKKyAgIiBhdCAiLAorICAiQSIsCisgICJCIiwKKyAgIkMiLAorICAiRCIsCisgICJFIiwKKyAgIkYiLAorICAiRyIsCisgICJIIiwKKyAgIkkiLAorICAiSiIsCisgICJLIiwKKyAgIkwiLAorICAiTSIsCisgICJOIiwKKyAgIk8iLAorICAiUCIsCisgICJRIiwKKyAgIlIiLAorICAiUyIsCisgICJUIiwKKyAgIlUiLAorICAiViIsCisgICJXIiwKKyAgIlgiLAorICAiWSIsCisgICJaIiwKKyAgIiBsZWZ0IGJyYWNrZXQgIiwKKyAgIiBiYWNrc2xhc2ggIiwKKyAgIiByaWdodCBicmFja2V0ICIsCisgICIgdXBhcnJvdyAiLAorICAiIHVuZGVybGluZSAiLAorICAiIGFjY2VudCAiLAorICAiYSIsCisgICJiIiwKKyAgImMiLAorICAiZCIsCisgICJlIiwKKyAgImYiLAorICAiZyIsCisgICJoIiwKKyAgImkiLAorICAiaiIsCisgICJrIiwKKyAgImwiLAorICAibSIsCisgICJuIiwKKyAgIm8iLAorICAicCIsCisgICJxIiwKKyAgInIiLAorICAicyIsCisgICJ0IiwKKyAgInUiLAorICAidiIsCisgICJ3IiwKKyAgIngiLAorICAieSIsCisgICJ6IiwKKyAgIiBsZWZ0IGJyYWNlICIsCisgICIgYmFyICIsCisgICIgcmlnaHQgYnJhY2UgIiwKKyAgIiB0aWxkZSAiCit9OwpkaWZmIC0tZ2l0IGEvRHJpdmVycy9TcGVlY2gvU2tlbGV0b24vTWFrZWZpbGUuaW4gYi9Ecml2ZXJzL1NwZWVjaC9Ta2VsZXRvbi9NYWtlZmlsZS5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMzdmYzI4Ci0tLSAvZGV2L251bGwKKysrIGIvRHJpdmVycy9TcGVlY2gvU2tlbGV0b24vTWFrZWZpbGUuaW4KQEAgLTAsMCArMSwyOSBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorIyAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyMKKyMgQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorIworIyBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorIworIyBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisjIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyMgbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisjCisjIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK0RSSVZFUl9DT0RFID0geHgKK0RSSVZFUl9OQU1FID0gRGlyZWN0b3J5TmFtZQorRFJJVkVSX1VTQUdFID0gYmFzaWMgZXhhbXBsZQorRFJJVkVSX1ZFUlNJT04gPSAKK0RSSVZFUl9ERVZFTE9QRVJTID0gCitTUEtfT0JKUyA9IEBzcGVlY2hfbGlicmFyaWVzX3h4QAoraW5jbHVkZSAkKFNSQ19UT1Apc3BlZWNoLm1rCisKK3NwZWVjaC4kTzoKKwkkKENDKSAkKFNQS19DRkxBR1MpIC1jICQoU1JDX0RJUikvc3BlZWNoLmMKKwpkaWZmIC0tZ2l0IGEvRHJpdmVycy9TcGVlY2gvU2tlbGV0b24vc3BlZWNoLmMgYi9Ecml2ZXJzL1NwZWVjaC9Ta2VsZXRvbi9zcGVlY2guYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMTg1MWU3Ci0tLSAvZGV2L251bGwKKysrIGIvRHJpdmVycy9TcGVlY2gvU2tlbGV0b24vc3BlZWNoLmMKQEAgLTAsMCArMSw2MSBAQAorLyoKKyAqIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisgKiAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisgKgorICogQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKKyNpbmNsdWRlICJwcm9sb2d1ZS5oIgorCisjaW5jbHVkZSA8c3RkaW8uaD4KKworI2luY2x1ZGUgInNwa19kcml2ZXIuaCIKKworc3RhdGljIHZvaWQKK3Nwa19zYXkgKFNwZWVjaFN5bnRoZXNpemVyICpzcGssIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZmZlciwgc2l6ZV90IGxlbmd0aCwgc2l6ZV90IGNvdW50LCBjb25zdCB1bnNpZ25lZCBjaGFyICphdHRyaWJ1dGVzKSB7Cit9CisKK3N0YXRpYyB2b2lkCitzcGtfbXV0ZSAoU3BlZWNoU3ludGhlc2l6ZXIgKnNwaykgeworfQorCitzdGF0aWMgdm9pZAorc3BrX3NldFZvbHVtZSAoU3BlZWNoU3ludGhlc2l6ZXIgKnNwaywgdW5zaWduZWQgY2hhciBzZXR0aW5nKSB7Cit9CisKK3N0YXRpYyB2b2lkCitzcGtfc2V0UmF0ZSAoU3BlZWNoU3ludGhlc2l6ZXIgKnNwaywgdW5zaWduZWQgY2hhciBzZXR0aW5nKSB7Cit9CisKK3N0YXRpYyB2b2lkCitzcGtfc2V0UGl0Y2ggKFNwZWVjaFN5bnRoZXNpemVyICpzcGssIHVuc2lnbmVkIGNoYXIgc2V0dGluZykgeworfQorCitzdGF0aWMgdm9pZAorc3BrX3NldFB1bmN0dWF0aW9uIChTcGVlY2hTeW50aGVzaXplciAqc3BrLCBTcGVlY2hQdW5jdHVhdGlvbiBzZXR0aW5nKSB7Cit9CisKK3N0YXRpYyBpbnQKK3Nwa19jb25zdHJ1Y3QgKFNwZWVjaFN5bnRoZXNpemVyICpzcGssIGNoYXIgKipwYXJhbWV0ZXJzKSB7CisgIHNway0+c2V0Vm9sdW1lID0gc3BrX3NldFZvbHVtZTsKKyAgc3BrLT5zZXRSYXRlID0gc3BrX3NldFJhdGU7CisgIHNway0+c2V0UGl0Y2ggPSBzcGtfc2V0UGl0Y2g7CisgIHNway0+c2V0UHVuY3R1YXRpb24gPSBzcGtfc2V0UHVuY3R1YXRpb247CisKKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkCitzcGtfZGVzdHJ1Y3QgKFNwZWVjaFN5bnRoZXNpemVyICpzcGspIHsKK30KZGlmZiAtLWdpdCBhL0RyaXZlcnMvU3BlZWNoL1NwZWVjaERpc3BhdGNoZXIvTWFrZWZpbGUuaW4gYi9Ecml2ZXJzL1NwZWVjaC9TcGVlY2hEaXNwYXRjaGVyL01ha2VmaWxlLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY4ZmQ5YTIKLS0tIC9kZXYvbnVsbAorKysgYi9Ecml2ZXJzL1NwZWVjaC9TcGVlY2hEaXNwYXRjaGVyL01ha2VmaWxlLmluCkBAIC0wLDAgKzEsMjkgQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyMgICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisjCisjIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyMKKyMgQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitEUklWRVJfQ09ERSA9IHNkCitEUklWRVJfTkFNRSA9IFNwZWVjaERpc3BhdGNoZXIKK0RSSVZFUl9VU0FHRSA9IG11bHRpLWVuZ2luZSBzZXJ2ZXIKK0RSSVZFUl9WRVJTSU9OID0gCitEUklWRVJfREVWRUxPUEVSUyA9IAorU1BLX09CSlMgPSAkKFNQRUVDSERfTElCUykKK2luY2x1ZGUgJChTUkNfVE9QKXNwZWVjaC5taworCitzcGVlY2guJE86CisJJChDQykgJChTUEtfQ0ZMQUdTKSAkKFNQRUVDSERfSU5DTFVERVMpIC1jICQoU1JDX0RJUikvc3BlZWNoLmMKKwpkaWZmIC0tZ2l0IGEvRHJpdmVycy9TcGVlY2gvU3BlZWNoRGlzcGF0Y2hlci9SRUFETUUgYi9Ecml2ZXJzL1NwZWVjaC9TcGVlY2hEaXNwYXRjaGVyL1JFQURNRQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYWIyMjc1Ci0tLSAvZGV2L251bGwKKysrIGIvRHJpdmVycy9TcGVlY2gvU3BlZWNoRGlzcGF0Y2hlci9SRUFETUUKQEAgLTAsMCArMSwyNSBAQAorVGhpcyBkaXJlY3RvcnkgY29udGFpbnMgdGhlIEJSTFRUWSBzcGVlY2ggZHJpdmVyIGZvciB0aGUgU3BlZWNoRGlzcGF0Y2hlciB0ZXh0Cit0byBzcGVlY2ggc2VydmVyIFtodHRwOi8vd3d3LmZyZWVic29mdC5vcmcvc3BlZWNoZF0uIEl0IHdhcyBpbXBsZW1lbnRlZCwgYW5kIGlzCitiZWluZyBtYWludGFpbmVkLCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorCitCUkxUVFkncyBjb25maWd1cmUgc2NyaXB0IGF1dG9tYXRpY2FsbHkgaW5jbHVkZXMgdGhpcyBkcml2ZXIgaWYgU3BlZWNoCitEaXNwYXRjaGVyIGhhcyBiZWVuIGluc3RhbGxlZC4gVGhlIGRlZmF1bHQgaXMgdG8gY2hlY2sgdGhlIGRpcmVjdG9yaWVzIC91c3IsCisvdXNyL2xvY2FsLCAvdXNyL2xvY2FsL3NwZWVjaC1kaXNwYXRjaGVyLCAvdXNyL2xvY2FsL3NwZWVjaGQsCisvb3B0L3NwZWVjaC1kaXNwYXRjaGVyLCBhbmQgL29wdC9zcGVlY2hkLiBUaGUgYWN0dWFsIGxvY2F0aW9uIGNhbiBiZSBleHBsaWNpdGx5CitzcGVjaWZpZWQgdmlhIC0td2l0aC1zcGVlY2hkLgorCitJZiB0aGlzIGRyaXZlciBpcyBidWlsdCBhcyBhIGR5bmFtaWNhbGx5IGxvYWRlZCBzaGFyZWQgb2JqZWN0ICh0aGUgZGVmYXVsdCksCitpLmUuIGl0IGlzbid0IGxpbmtlZCBpbnRvIEJSTFRUWSdzIGJpbmFyeSB2aWEgLS13aXRoLXNwZWVjaC1kcml2ZXIsIHRoZW4gdGhlCitkaXJlY3RvcnkgJFNQRUVDSERfSE9NRS9saWIgbXVzdCBiZSBhZGRlZCB0byB0aGUgY29sb24tZGVsaW1pdGVkIGxpc3Qgb2YKK2RpcmVjdG9yaWVzIGluIHRoZSBMRF9MSUJSQVJZX1BBVEggZW52aXJvbm1lbnQgdmFyaWFibGUgYmVmb3JlIEJSTFRUWSBpcworc3RhcnRlZCBiZWNhdXNlIFNwZWVjaCBEaXNwYXRjaGVyJ3Mgb3duIHNoYXJlZCBvYmplY3RzIGRvbid0IGNvbnRhaW4gcnVuLXRpbWUKK3NlYXJjaCBwYXRocyBmb3IgdGhlaXIgaW50ZXJuYWwgZGVwZW5kZW5jaWVzLgorCitUaGlzIGRyaXZlciByZWNvZ25pemVzIHRoZSBmb2xsb3dpbmcgcGFyYW1ldGVyczoKKworICAgUGFyYW1ldGVyIFNldHRpbmdzCisgICBwb3J0ICAgICAgMS02NTUzNQorICAgbW9kdWxlICAgIG5hbWUgKGZsaXRlLCBmZXN0aXZhbCwgZXBvcy1nZW5lcmljLCBkdGstZ2VuZXJpYywgLi4uKQorICAgbGFuZ3VhZ2UgIHR3by1sZXR0ZXIgbGFuZ3VhZ2UgY29kZQorICAgdm9pY2UgICAgIHR5cGUgKG1hbGUxLCBmZW1hbGUxLCBtYWxlMiwgZmVtYWxlMiwgbWFsZTMsIGZlbWFsZTMsCisgICAgICAgICAgICAgICAgICAgY2hpbGRfbWFsZSwgY2hpbGRfZmVtYWxlKQpkaWZmIC0tZ2l0IGEvRHJpdmVycy9TcGVlY2gvU3BlZWNoRGlzcGF0Y2hlci9zcGVlY2guYyBiL0RyaXZlcnMvU3BlZWNoL1NwZWVjaERpc3BhdGNoZXIvc3BlZWNoLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWQzZjZmOQotLS0gL2Rldi9udWxsCisrKyBiL0RyaXZlcnMvU3BlZWNoL1NwZWVjaERpc3BhdGNoZXIvc3BlZWNoLmMKQEAgLTAsMCArMSwyOTMgQEAKKy8qCisgKiBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorICogICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorICoKKyAqIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorICoKKyAqIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyAqLworCisjaW5jbHVkZSAicHJvbG9ndWUuaCIKKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKyNpbmNsdWRlICJsb2cuaCIKKyNpbmNsdWRlICJwYXJzZS5oIgorCit0eXBlZGVmIGVudW0geworICBQQVJNX1BPUlQsCisgIFBBUk1fTU9EVUxFLAorICBQQVJNX0xBTkdVQUdFLAorICBQQVJNX1ZPSUNFLAorICBQQVJNX05BTUUKK30gRHJpdmVyUGFyYW1ldGVyOworI2RlZmluZSBTUEtQQVJNUyAicG9ydCIsICJtb2R1bGUiLCAibGFuZ3VhZ2UiLCAidm9pY2UiLCAibmFtZSIKKworI2luY2x1ZGUgInNwa19kcml2ZXIuaCIKKworI2luY2x1ZGUgPGxpYnNwZWVjaGQuaD4KKworc3RhdGljIFNQRENvbm5lY3Rpb24gKmNvbm5lY3Rpb25IYW5kbGUgPSBOVUxMOworc3RhdGljIGNvbnN0IGNoYXIgKm1vZHVsZU5hbWU7CitzdGF0aWMgY29uc3QgY2hhciAqbGFuZ3VhZ2VOYW1lOworc3RhdGljIFNQRFZvaWNlVHlwZSB2b2ljZVR5cGU7CitzdGF0aWMgY29uc3QgY2hhciAqdm9pY2VOYW1lOworc3RhdGljIHNpZ25lZCBpbnQgcmVsYXRpdmVWb2x1bWU7CitzdGF0aWMgc2lnbmVkIGludCByZWxhdGl2ZVJhdGU7CitzdGF0aWMgc2lnbmVkIGludCByZWxhdGl2ZVBpdGNoOworc3RhdGljIFNQRFB1bmN0dWF0aW9uIHB1bmN0dWF0aW9uVmVyYm9zaXR5OworCitzdGF0aWMgdm9pZAorY2xlYXJTZXR0aW5ncyAodm9pZCkgeworICBtb2R1bGVOYW1lID0gTlVMTDsKKyAgbGFuZ3VhZ2VOYW1lID0gTlVMTDsKKyAgdm9pY2VUeXBlID0gLTE7CisgIHZvaWNlTmFtZSA9IE5VTEw7CisgIHJlbGF0aXZlVm9sdW1lID0gMDsKKyAgcmVsYXRpdmVSYXRlID0gMDsKKyAgcmVsYXRpdmVQaXRjaCA9IDA7CisgIHB1bmN0dWF0aW9uVmVyYm9zaXR5ID0gLTE7Cit9CisKK3N0YXRpYyB2b2lkCitjbG9zZUNvbm5lY3Rpb24gKHZvaWQpIHsKKyAgaWYgKGNvbm5lY3Rpb25IYW5kbGUpIHsKKyAgICBzcGRfY2xvc2UoY29ubmVjdGlvbkhhbmRsZSk7CisgICAgY29ubmVjdGlvbkhhbmRsZSA9IE5VTEw7CisgIH0KK30KKwordHlwZWRlZiB2b2lkICgqU3BlZWNoZEFjdGlvbikgKGNvbnN0IHZvaWQgKmRhdGEpOworCitzdGF0aWMgdm9pZAorc3BlZWNoZEFjdGlvbiAoU3BlZWNoZEFjdGlvbiBhY3Rpb24sIGNvbnN0IHZvaWQgKmRhdGEpIHsKKyAgaWYgKGNvbm5lY3Rpb25IYW5kbGUpIHsKKyAgICBhY3Rpb24oZGF0YSk7CisgICAgaWYgKCFjb25uZWN0aW9uSGFuZGxlLT5zdHJlYW0pIGNsb3NlQ29ubmVjdGlvbigpOworICB9Cit9CisKK3N0YXRpYyB2b2lkCitzZXRNb2R1bGUgKGNvbnN0IHZvaWQgKmRhdGEpIHsKKyAgaWYgKG1vZHVsZU5hbWUpIHNwZF9zZXRfb3V0cHV0X21vZHVsZShjb25uZWN0aW9uSGFuZGxlLCBtb2R1bGVOYW1lKTsKK30KKworc3RhdGljIHZvaWQKK3NldExhbmd1YWdlIChjb25zdCB2b2lkICpkYXRhKSB7CisgIGlmIChsYW5ndWFnZU5hbWUpIHNwZF9zZXRfbGFuZ3VhZ2UoY29ubmVjdGlvbkhhbmRsZSwgbGFuZ3VhZ2VOYW1lKTsKK30KKworc3RhdGljIHZvaWQKK3NldFZvaWNlVHlwZSAoY29uc3Qgdm9pZCAqZGF0YSkgeworICBpZiAodm9pY2VUeXBlICE9IC0xKSBzcGRfc2V0X3ZvaWNlX3R5cGUoY29ubmVjdGlvbkhhbmRsZSwgdm9pY2VUeXBlKTsKK30KKworc3RhdGljIHZvaWQKK3NldFZvaWNlTmFtZSAoY29uc3Qgdm9pZCAqZGF0YSkgeworICBpZiAodm9pY2VOYW1lKSBzcGRfc2V0X3N5bnRoZXNpc192b2ljZShjb25uZWN0aW9uSGFuZGxlLCB2b2ljZU5hbWUpOworfQorCitzdGF0aWMgdm9pZAorc2V0Vm9sdW1lIChjb25zdCB2b2lkICpkYXRhKSB7CisgIHNwZF9zZXRfdm9sdW1lKGNvbm5lY3Rpb25IYW5kbGUsIHJlbGF0aXZlVm9sdW1lKTsKK30KKworc3RhdGljIHZvaWQKK3Nwa19zZXRWb2x1bWUgKFNwZWVjaFN5bnRoZXNpemVyICpzcGssIHVuc2lnbmVkIGNoYXIgc2V0dGluZykgeworICByZWxhdGl2ZVZvbHVtZSA9IGdldEludGVnZXJTcGVlY2hWb2x1bWUoc2V0dGluZywgMTAwKSAtIDEwMDsKKyAgc3BlZWNoZEFjdGlvbihzZXRWb2x1bWUsIE5VTEwpOworICBsb2dNZXNzYWdlKExPR19ERUJVRywgInNldCB2b2x1bWU6ICV1IC0+ICVkIiwgc2V0dGluZywgcmVsYXRpdmVWb2x1bWUpOworfQorCitzdGF0aWMgdm9pZAorc2V0UmF0ZSAoY29uc3Qgdm9pZCAqZGF0YSkgeworICBzcGRfc2V0X3ZvaWNlX3JhdGUoY29ubmVjdGlvbkhhbmRsZSwgcmVsYXRpdmVSYXRlKTsKK30KKworc3RhdGljIHZvaWQKK3Nwa19zZXRSYXRlIChTcGVlY2hTeW50aGVzaXplciAqc3BrLCB1bnNpZ25lZCBjaGFyIHNldHRpbmcpIHsKKyAgcmVsYXRpdmVSYXRlID0gZ2V0SW50ZWdlclNwZWVjaFJhdGUoc2V0dGluZywgMTAwKSAtIDEwMDsKKyAgc3BlZWNoZEFjdGlvbihzZXRSYXRlLCBOVUxMKTsKKyAgbG9nTWVzc2FnZShMT0dfREVCVUcsICJzZXQgcmF0ZTogJXUgLT4gJWQiLCBzZXR0aW5nLCByZWxhdGl2ZVJhdGUpOworfQorCitzdGF0aWMgdm9pZAorc2V0UGl0Y2ggKGNvbnN0IHZvaWQgKmRhdGEpIHsKKyAgc3BkX3NldF92b2ljZV9waXRjaChjb25uZWN0aW9uSGFuZGxlLCByZWxhdGl2ZVBpdGNoKTsKK30KKworc3RhdGljIHZvaWQKK3Nwa19zZXRQaXRjaCAoU3BlZWNoU3ludGhlc2l6ZXIgKnNwaywgdW5zaWduZWQgY2hhciBzZXR0aW5nKSB7CisgIHJlbGF0aXZlUGl0Y2ggPSBnZXRJbnRlZ2VyU3BlZWNoUGl0Y2goc2V0dGluZywgMTAwKSAtIDEwMDsKKyAgc3BlZWNoZEFjdGlvbihzZXRQaXRjaCwgTlVMTCk7CisgIGxvZ01lc3NhZ2UoTE9HX0RFQlVHLCAic2V0IHBpdGNoOiAldSAtPiAlZCIsIHNldHRpbmcsIHJlbGF0aXZlUGl0Y2gpOworfQorCitzdGF0aWMgdm9pZAorc2V0UHVuY3R1YXRpb24gKGNvbnN0IHZvaWQgKmRhdGEpIHsKKyAgaWYgKHB1bmN0dWF0aW9uVmVyYm9zaXR5ICE9IC0xKSBzcGRfc2V0X3B1bmN0dWF0aW9uKGNvbm5lY3Rpb25IYW5kbGUsIHB1bmN0dWF0aW9uVmVyYm9zaXR5KTsKK30KKworc3RhdGljIHZvaWQKK3Nwa19zZXRQdW5jdHVhdGlvbiAoU3BlZWNoU3ludGhlc2l6ZXIgKnNwaywgU3BlZWNoUHVuY3R1YXRpb24gc2V0dGluZykgeworICBwdW5jdHVhdGlvblZlcmJvc2l0eSA9IChzZXR0aW5nIDw9IFNQS19QVU5DVFVBVElPTl9OT05FKT8gU1BEX1BVTkNUX05PTkU6IAorICAgICAgICAgICAgICAgICAgICAgICAgIChzZXR0aW5nID49IFNQS19QVU5DVFVBVElPTl9BTEwpPyBTUERfUFVOQ1RfQUxMOiAKKyAgICAgICAgICAgICAgICAgICAgICAgICBTUERfUFVOQ1RfU09NRTsKKyAgc3BlZWNoZEFjdGlvbihzZXRQdW5jdHVhdGlvbiwgTlVMTCk7CisgIGxvZ01lc3NhZ2UoTE9HX0RFQlVHLCAic2V0IHB1bmN0dWF0aW9uOiAldSAtPiAlZCIsIHNldHRpbmcsIHB1bmN0dWF0aW9uVmVyYm9zaXR5KTsKK30KKworc3RhdGljIHZvaWQKK2NhbmNlbFNwZWVjaCAoY29uc3Qgdm9pZCAqZGF0YSkgeworICBzcGRfY2FuY2VsKGNvbm5lY3Rpb25IYW5kbGUpOworfQorCitzdGF0aWMgaW50CitvcGVuQ29ubmVjdGlvbiAodm9pZCkgeworICBpZiAoIWNvbm5lY3Rpb25IYW5kbGUpIHsKKyAgICBpZiAoIShjb25uZWN0aW9uSGFuZGxlID0gc3BkX29wZW4oImJybHR0eSIsICJtYWluIiwgTlVMTCwgU1BEX01PREVfVEhSRUFERUQpKSkgeworICAgICAgbG9nTWVzc2FnZShMT0dfRVJSLCAic3BlZWNoIGRpc3BhdGNoZXIgb3BlbiBmYWlsdXJlIik7CisgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICB7CisgICAgICBzdGF0aWMgY29uc3QgU3BlZWNoZEFjdGlvbiBhY3Rpb25zW10gPSB7CisgICAgICAgIHNldE1vZHVsZSwKKyAgICAgICAgc2V0TGFuZ3VhZ2UsCisgICAgICAgIHNldFZvaWNlVHlwZSwKKyAgICAgICAgc2V0Vm9pY2VOYW1lLAorICAgICAgICBzZXRWb2x1bWUsCisgICAgICAgIHNldFJhdGUsCisgICAgICAgIHNldFBpdGNoLAorICAgICAgICBzZXRQdW5jdHVhdGlvbiwKKyAgICAgICAgTlVMTAorICAgICAgfTsKKyAgICAgIGNvbnN0IFNwZWVjaGRBY3Rpb24gKmFjdGlvbiA9IGFjdGlvbnM7CisgICAgICB3aGlsZSAoKmFjdGlvbikgc3BlZWNoZEFjdGlvbigqYWN0aW9uKyssIE5VTEwpOworICAgIH0KKyAgfQorCisgIHJldHVybiAxOworfQorCitzdGF0aWMgaW50CitzcGtfY29uc3RydWN0IChTcGVlY2hTeW50aGVzaXplciAqc3BrLCBjaGFyICoqcGFyYW1ldGVycykgeworICBzcGstPnNldFZvbHVtZSA9IHNwa19zZXRWb2x1bWU7CisgIHNway0+c2V0UmF0ZSA9IHNwa19zZXRSYXRlOworICBzcGstPnNldFBpdGNoID0gc3BrX3NldFBpdGNoOworICBzcGstPnNldFB1bmN0dWF0aW9uID0gc3BrX3NldFB1bmN0dWF0aW9uOworCisgIGNsZWFyU2V0dGluZ3MoKTsKKworICBpZiAocGFyYW1ldGVyc1tQQVJNX1BPUlRdICYmICpwYXJhbWV0ZXJzW1BBUk1fUE9SVF0pIHsKKyAgICBzdGF0aWMgY29uc3QgaW50IG1pbmltdW1Qb3J0ID0gMFgxOworICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4aW11bVBvcnQgPSAwWEZGRkY7CisgICAgaW50IHBvcnQgPSAwOworCisgICAgaWYgKHZhbGlkYXRlSW50ZWdlcigmcG9ydCwgcGFyYW1ldGVyc1tQQVJNX1BPUlRdLCAmbWluaW11bVBvcnQsICZtYXhpbXVtUG9ydCkpIHsKKyAgICAgIGNoYXIgbnVtYmVyWzBYMTBdOworICAgICAgc25wcmludGYobnVtYmVyLCBzaXplb2YobnVtYmVyKSwgIiVkIiwgcG9ydCk7CisgICAgICBzZXRlbnYoIlNQRUVDSERfUE9SVCIsIG51bWJlciwgMSk7CisgICAgfSBlbHNlIHsKKyAgICAgIGxvZ01lc3NhZ2UoTE9HX1dBUk5JTkcsICIlczogJXMiLCAiaW52YWxpZCBwb3J0IG51bWJlciIsIHBhcmFtZXRlcnNbUEFSTV9QT1JUXSk7CisgICAgfQorICB9CisKKyAgaWYgKHBhcmFtZXRlcnNbUEFSTV9NT0RVTEVdICYmICpwYXJhbWV0ZXJzW1BBUk1fTU9EVUxFXSkgeworICAgIG1vZHVsZU5hbWUgPSBwYXJhbWV0ZXJzW1BBUk1fTU9EVUxFXTsKKyAgfQorCisgIGlmIChwYXJhbWV0ZXJzW1BBUk1fTEFOR1VBR0VdICYmICpwYXJhbWV0ZXJzW1BBUk1fTEFOR1VBR0VdKSB7CisgICAgbGFuZ3VhZ2VOYW1lID0gcGFyYW1ldGVyc1tQQVJNX0xBTkdVQUdFXTsKKyAgfQorCisgIGlmIChwYXJhbWV0ZXJzW1BBUk1fVk9JQ0VdICYmICpwYXJhbWV0ZXJzW1BBUk1fVk9JQ0VdKSB7CisgICAgc3RhdGljIGNvbnN0IFNQRFZvaWNlVHlwZSB2b2ljZXNbXSA9IHsKKyAgICAgIFNQRF9NQUxFMSwgU1BEX0ZFTUFMRTEsCisgICAgICBTUERfTUFMRTIsIFNQRF9GRU1BTEUyLAorICAgICAgU1BEX01BTEUzLCBTUERfRkVNQUxFMywKKyAgICAgIFNQRF9DSElMRF9NQUxFLCBTUERfQ0hJTERfRkVNQUxFCisgICAgfTsKKworICAgIHN0YXRpYyBjb25zdCBjaGFyICpjaG9pY2VzW10gPSB7CisgICAgICAibWFsZTEiLCAiZmVtYWxlMSIsCisgICAgICAibWFsZTIiLCAiZmVtYWxlMiIsCisgICAgICAibWFsZTMiLCAiZmVtYWxlMyIsCisgICAgICAiY2hpbGRfbWFsZSIsICJjaGlsZF9mZW1hbGUiLAorICAgICAgTlVMTAorICAgIH07CisKKyAgICB1bnNpZ25lZCBpbnQgY2hvaWNlID0gMDsKKworICAgIGlmICh2YWxpZGF0ZUNob2ljZSgmY2hvaWNlLCBwYXJhbWV0ZXJzW1BBUk1fVk9JQ0VdLCBjaG9pY2VzKSkgeworICAgICAgdm9pY2VUeXBlID0gdm9pY2VzW2Nob2ljZV07CisgICAgfSBlbHNlIHsKKyAgICAgIGxvZ01lc3NhZ2UoTE9HX1dBUk5JTkcsICIlczogJXMiLCAiaW52YWxpZCB2b2ljZSB0eXBlIiwgcGFyYW1ldGVyc1tQQVJNX1ZPSUNFXSk7CisgICAgfQorICB9CisKKyAgaWYgKHBhcmFtZXRlcnNbUEFSTV9OQU1FXSAmJiAqcGFyYW1ldGVyc1tQQVJNX05BTUVdKSB7CisgICAgdm9pY2VOYW1lID0gcGFyYW1ldGVyc1tQQVJNX05BTUVdOworICB9CisKKyAgcmV0dXJuIG9wZW5Db25uZWN0aW9uKCk7Cit9CisKK3N0YXRpYyB2b2lkCitzcGtfZGVzdHJ1Y3QgKFNwZWVjaFN5bnRoZXNpemVyICpzcGspIHsKKyAgY2xvc2VDb25uZWN0aW9uKCk7CisgIGNsZWFyU2V0dGluZ3MoKTsKK30KKwordHlwZWRlZiBzdHJ1Y3QgeworICBjb25zdCB1bnNpZ25lZCBjaGFyICp0ZXh0OworICBzaXplX3QgbGVuZ3RoOworICBzaXplX3QgY291bnQ7CisgIFNQRFByaW9yaXR5IHByaW9yaXR5OworfSBTYXlEYXRhOworCitzdGF0aWMgdm9pZAorc2F5VGV4dCAoY29uc3Qgdm9pZCAqZGF0YSkgeworICBjb25zdCBTYXlEYXRhICpzYXkgPSBkYXRhOworCisgIGlmIChzYXktPmNvdW50ID09IDEpIHsKKyAgICBjaGFyIHN0cmluZ1tzYXktPmxlbmd0aCArIDFdOworICAgIG1lbWNweShzdHJpbmcsIHNheS0+dGV4dCwgc2F5LT5sZW5ndGgpOworICAgIHN0cmluZ1tzYXktPmxlbmd0aF0gPSAwOworICAgIHNwZF9jaGFyKGNvbm5lY3Rpb25IYW5kbGUsIHNheS0+cHJpb3JpdHksIHN0cmluZyk7CisgIH0gZWxzZSB7CisgICAgc3BkX3NheWYoY29ubmVjdGlvbkhhbmRsZSwgc2F5LT5wcmlvcml0eSwgIiUuKnMiLCAoaW50KXNheS0+bGVuZ3RoLCBzYXktPnRleHQpOworICB9Cit9CisKK3N0YXRpYyB2b2lkCitzcGtfc2F5IChTcGVlY2hTeW50aGVzaXplciAqc3BrLCBjb25zdCB1bnNpZ25lZCBjaGFyICp0ZXh0LCBzaXplX3QgbGVuZ3RoLCBzaXplX3QgY291bnQsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmF0dHJpYnV0ZXMpIHsKKyAgY29uc3QgU2F5RGF0YSBzYXkgPSB7CisgICAgLnRleHQgPSB0ZXh0LAorICAgIC5sZW5ndGggPSBsZW5ndGgsCisgICAgLmNvdW50ID0gY291bnQsCisgICAgLnByaW9yaXR5ID0gU1BEX01FU1NBR0UKKyAgfTsKKworICBzcGVlY2hkQWN0aW9uKHNheVRleHQsICZzYXkpOworICBpZiAoIWNvbm5lY3Rpb25IYW5kbGUpIHsKKyAgICBpZiAob3BlbkNvbm5lY3Rpb24oKSkgeworICAgICAgc3BlZWNoZEFjdGlvbihzYXlUZXh0LCAmc2F5KTsKKyAgICB9CisgIH0KK30KKworc3RhdGljIHZvaWQKK3Nwa19tdXRlIChTcGVlY2hTeW50aGVzaXplciAqc3BrKSB7CisgIHNwZWVjaGRBY3Rpb24oY2FuY2VsU3BlZWNoLCBOVUxMKTsKK30KZGlmZiAtLWdpdCBhL0RyaXZlcnMvU3BlZWNoL1N3aWZ0L01ha2VmaWxlLmluIGIvRHJpdmVycy9TcGVlY2gvU3dpZnQvTWFrZWZpbGUuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGFjM2JmYgotLS0gL2Rldi9udWxsCisrKyBiL0RyaXZlcnMvU3BlZWNoL1N3aWZ0L01ha2VmaWxlLmluCkBAIC0wLDAgKzEsMjkgQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyMgICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisjCisjIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyMKKyMgQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitEUklWRVJfQ09ERSA9IHN3CitEUklWRVJfTkFNRSA9IFN3aWZ0CitEUklWRVJfVVNBR0UgPSBzb2Z0d2FyZSBlbmdpbmUKK0RSSVZFUl9WRVJTSU9OID0gCitEUklWRVJfREVWRUxPUEVSUyA9IAorU1BLX09CSlMgPSBAc3BlZWNoX2xpYnJhcmllc19zd0AKK2luY2x1ZGUgJChTUkNfVE9QKXNwZWVjaC5taworCitzcGVlY2guJE86CisJJChDQykgJChTUEtfQ0ZMQUdTKSAtSSQoU1dJRlRfUk9PVCkvaW5jbHVkZSAtYyAkKFNSQ19ESVIpL3NwZWVjaC5jCisKZGlmZiAtLWdpdCBhL0RyaXZlcnMvU3BlZWNoL1N3aWZ0L1JFQURNRSBiL0RyaXZlcnMvU3BlZWNoL1N3aWZ0L1JFQURNRQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNjE5Y2QxCi0tLSAvZGV2L251bGwKKysrIGIvRHJpdmVycy9TcGVlY2gvU3dpZnQvUkVBRE1FCkBAIC0wLDAgKzEsMTcgQEAKK1RoaXMgZGlyZWN0b3J5IGNvbnRhaW5zIHRoZSBCUkxUVFkgc3BlZWNoIGRyaXZlciBmb3IgdGhlIFN3aWZ0IHRleHQgdG8gc3BlZWNoCitlbmdpbmUgZnJvbSBDZXBzdHJhbCBbaHR0cDovL3d3dy5jZXBzdHJhbC5jb20vXS4gSXQgd2FzIGltcGxlbWVudGVkLCBhbmQgaXMKK2JlaW5nIG1haW50YWluZWQsIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisKK0JSTFRUWSdzIGNvbmZpZ3VyZSBzY3JpcHQgYXV0b21hdGljYWxseSBpbmNsdWRlcyB0aGlzIGRyaXZlciBpZiBTd2lmdCBoYXMgYmVlbgoraW5zdGFsbGVkLiBUaGUgZGVmYXVsdCBpcyB0byBjaGVjayB0aGUgZGlyZWN0b3JpZXMgL3VzciwgL3Vzci9sb2NhbCwKKy91c3IvbG9jYWwvU3dpZnQsIC91c3IvbG9jYWwvc3dpZnQsIC9vcHQvU3dpZnQsIGFuZCAvb3B0L3N3aWZ0LiBUaGUgYWN0dWFsCitsb2NhdGlvbiBjYW4gYmUgZXhwbGljaXRseSBzcGVjaWZpZWQgdmlhIC0td2l0aC1zd2lmdC4KKworVGhpcyBkcml2ZXIgcmVjb2duaXplcyB0aGUgZm9sbG93aW5nIHBhcmFtZXRlcnM6CisKKyAgIFBhcmFtZXRlciBTZXR0aW5ncworICAgbmFtZSAgICAgIG5hbWUgKGh1bWFuKSwgL3BhdGgvdG8vZGlyZWN0b3J5CisKK0lmIHRoZSBodW1hbiBuYW1lIG9mIHRoZSB2b2ljZSBpcyBzcGVjaWZpZWQgdGhlbiBpdCBpcyBpbnRlcnByZXRlZCBhcyBhIFN3aWZ0Cit2b2ljZSBkaXJlY3RvcnkgaWYgaXQgYmVnaW5zIHdpdGggYSBzbGFzaCBhbmQgYXMgYSBzdWJkaXJlY3Rvcnkgb2YKKyRTV0lGVF9IT01FL3ZvaWNlcy8gaWYgaXQgZG9lc24ndC4KZGlmZiAtLWdpdCBhL0RyaXZlcnMvU3BlZWNoL1N3aWZ0L3NwZWVjaC5jIGIvRHJpdmVycy9TcGVlY2gvU3dpZnQvc3BlZWNoLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDQ3MjRiYgotLS0gL2Rldi9udWxsCisrKyBiL0RyaXZlcnMvU3BlZWNoL1N3aWZ0L3NwZWVjaC5jCkBAIC0wLDAgKzEsMTg5IEBACisvKgorICogQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyAqICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyAqCisgKiBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorICoKKyAqIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyAqCisgKiBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisgKi8KKworLyogU3dpZnQvc3BlZWNoLmMgLSBTcGVlY2ggbGlicmFyeQorICogRm9yIHRoZSBTd2lmdCB0ZXh0IHRvIHNwZWVjaCBwYWNrYWdlCisgKiBNYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4KKyAqLworCisjaW5jbHVkZSAicHJvbG9ndWUuaCIKKworI2luY2x1ZGUgPHN0ZGlvLmg+CisKKyNpbmNsdWRlICJsb2cuaCIKKwordHlwZWRlZiBlbnVtIHsKKyAgUEFSTV9OQU1FCit9IERyaXZlclBhcmFtZXRlcjsKKyNkZWZpbmUgU1BLUEFSTVMgIm5hbWUiCisKKyNpbmNsdWRlICJzcGtfZHJpdmVyLmgiCisjaW5jbHVkZSA8c3dpZnQuaD4KKworc3RhdGljIHN3aWZ0X2VuZ2luZSAqc3dpZnRFbmdpbmUgPSBOVUxMOworc3RhdGljIHN3aWZ0X3BvcnQgKnN3aWZ0UG9ydCA9IE5VTEw7CisKK3N0YXRpYyB2b2lkCitzcGVlY2hFcnJvciAoc3dpZnRfcmVzdWx0X3QgcmVzdWx0LCBjb25zdCBjaGFyICphY3Rpb24pIHsKKyAgbG9nTWVzc2FnZShMT0dfRVJSLCAiU3dpZnQgJXMgZXJyb3I6ICVzIiwgYWN0aW9uLCBzd2lmdF9zdHJlcnJvcihyZXN1bHQpKTsKK30KKworc3RhdGljIGludAorc2V0UG9ydFBhcmFtZXRlciAoY29uc3QgY2hhciAqbmFtZSwgc3dpZnRfdmFsICp2YWx1ZSkgeworICBzd2lmdF9yZXN1bHRfdCByZXN1bHQgPSBzd2lmdF9wb3J0X3NldF9wYXJhbShzd2lmdFBvcnQsIG5hbWUsIHZhbHVlLCBTV0lGVF9BU1lOQ19OT05FKTsKKyAgaWYgKHJlc3VsdCA9PSBTV0lGVF9TVUNDRVNTKSByZXR1cm4gMTsKKyAgc3BlZWNoRXJyb3IocmVzdWx0LCAicGFyYW1ldGVyIHNldCIpOworICByZXR1cm4gMDsKK30KKworc3RhdGljIGludAorc2V0U3RyaW5nUGFyYW1ldGVyIChjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICp2YWx1ZSkgeworICBsb2dNZXNzYWdlKExPR19ERUJVRywgInNldHRpbmcgc3dpZnQgc3RyaW5nIHBhcmFtZXRlcjogJXM9JXMiLCBuYW1lLCB2YWx1ZSk7CisgIGlmIChzZXRQb3J0UGFyYW1ldGVyKG5hbWUsIHN3aWZ0X3ZhbF9zdHJpbmcodmFsdWUpKSkgcmV0dXJuIDE7CisgIGxvZ01lc3NhZ2UoTE9HX1dBUk5JTkcsICJDb3VsZG4ndCBzZXQgJXM9JXMiLCBuYW1lLCB2YWx1ZSk7CisgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50CitzZXRJbnRlZ2VyUGFyYW1ldGVyIChjb25zdCBjaGFyICpuYW1lLCBpbnQgdmFsdWUpIHsKKyAgbG9nTWVzc2FnZShMT0dfREVCVUcsICJzZXR0aW5nIHN3aWZ0IGludGVnZXIgcGFyYW1ldGVyOiAlcz0lZCIsIG5hbWUsIHZhbHVlKTsKKyAgaWYgKHNldFBvcnRQYXJhbWV0ZXIobmFtZSwgc3dpZnRfdmFsX2ludCh2YWx1ZSkpKSByZXR1cm4gMTsKKyAgbG9nTWVzc2FnZShMT0dfV0FSTklORywgIkNvdWxkbid0IHNldCAlcz0lZCIsIG5hbWUsIHZhbHVlKTsKKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK3NldFZvbHVtZSAoaW50IHBlcmNlbnRhZ2UpIHsKKyAgcmV0dXJuIHNldEludGVnZXJQYXJhbWV0ZXIoImF1ZGlvL3ZvbHVtZSIsIHBlcmNlbnRhZ2UpOworfQorCitzdGF0aWMgaW50CitzZXRSYXRlIChpbnQgd29yZHNQZXJNaW51dGUpIHsKKyAgcmV0dXJuIHNldEludGVnZXJQYXJhbWV0ZXIoInNwZWVjaC9yYXRlIiwgd29yZHNQZXJNaW51dGUpOworfQorCitzdGF0aWMgaW50CitzZXRFbnZpcm9ubWVudFZhcmlhYmxlIChjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICp2YWx1ZSkgeworICBsb2dNZXNzYWdlKExPR19ERUJVRywgInNldHRpbmcgc3dpZnQgZW52aXJvbm1lbnQgdmFyaWFibGU6ICVzPSVzIiwgbmFtZSwgdmFsdWUpOworICBpZiAoc2V0ZW52KG5hbWUsIHZhbHVlLCAxKSAhPSAtMSkgcmV0dXJuIDE7CisgIGxvZ1N5c3RlbUVycm9yKCJlbnZpcm9ubWVudCB2YXJpYWJsZSBzZXQiKTsKKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkCitzcGtfc2F5IChTcGVlY2hTeW50aGVzaXplciAqc3BrLCBjb25zdCB1bnNpZ25lZCBjaGFyICpidWZmZXIsIHNpemVfdCBsZW5ndGgsIHNpemVfdCBjb3VudCwgY29uc3QgdW5zaWduZWQgY2hhciAqYXR0cmlidXRlcykgeworICBzd2lmdF9yZXN1bHRfdCByZXN1bHQ7CisgIHN3aWZ0X2JhY2tncm91bmRfdCBqb2I7CisKKyAgaWYgKChyZXN1bHQgPSBzd2lmdF9wb3J0X3NwZWFrX3RleHQoc3dpZnRQb3J0LCBidWZmZXIsIGxlbmd0aCwgTlVMTCwgJmpvYiwgTlVMTCkpICE9IFNXSUZUX1NVQ0NFU1MpIHsKKyAgICBzcGVlY2hFcnJvcihyZXN1bHQsICJwb3J0IHNwZWFrIik7CisgIH0KK30KKworc3RhdGljIHZvaWQKK3Nwa19tdXRlIChTcGVlY2hTeW50aGVzaXplciAqc3BrKSB7CisgIHN3aWZ0X3Jlc3VsdF90IHJlc3VsdDsKKworICBpZiAoKHJlc3VsdCA9IHN3aWZ0X3BvcnRfc3RvcChzd2lmdFBvcnQsIFNXSUZUX0FTWU5DX0NVUlJFTlQsIFNXSUZUX0VWRU5UX05PVykpICE9IFNXSUZUX1NVQ0NFU1MpIHsKKyAgLy9zcGVlY2hFcnJvcihyZXN1bHQsICJwb3J0IHN0b3AiKTsKKyAgfQorfQorCitzdGF0aWMgdm9pZAorc3BrX3NldFZvbHVtZSAoU3BlZWNoU3ludGhlc2l6ZXIgKnNwaywgdW5zaWduZWQgY2hhciBzZXR0aW5nKSB7CisgIHNldFZvbHVtZShnZXRJbnRlZ2VyU3BlZWNoVm9sdW1lKHNldHRpbmcsIDEwMCkpOworfQorCitzdGF0aWMgdm9pZAorc3BrX3NldFJhdGUgKFNwZWVjaFN5bnRoZXNpemVyICpzcGssIHVuc2lnbmVkIGNoYXIgc2V0dGluZykgeworICBzZXRSYXRlKChpbnQpKGdldEZsb2F0U3BlZWNoUmF0ZShzZXR0aW5nKSAqIDE3MC4wKSk7Cit9CisKK3N0YXRpYyBpbnQKK3Nwa19jb25zdHJ1Y3QgKFNwZWVjaFN5bnRoZXNpemVyICpzcGssIGNoYXIgKipwYXJhbWV0ZXJzKSB7CisgIHN3aWZ0X3Jlc3VsdF90IHJlc3VsdDsKKworICBzcGstPnNldFZvbHVtZSA9IHNwa19zZXRWb2x1bWU7CisgIHNway0+c2V0UmF0ZSA9IHNwa19zZXRSYXRlOworCisgIGlmIChzZXRFbnZpcm9ubWVudFZhcmlhYmxlKCJTV0lGVF9IT01FIiwgU1dJRlRfUk9PVCkpIHsKKyAgICBzd2lmdF9wYXJhbXMgKmVuZ2luZVBhcmFtZXRlcnM7CisKKyAgICBpZiAoKGVuZ2luZVBhcmFtZXRlcnMgPSBzd2lmdF9wYXJhbXNfbmV3KE5VTEwpKSkgeworICAgICAgaWYgKChzd2lmdEVuZ2luZSA9IHN3aWZ0X2VuZ2luZV9vcGVuKGVuZ2luZVBhcmFtZXRlcnMpKSkgeworICAgICAgICBpZiAoKHN3aWZ0UG9ydCA9IHN3aWZ0X3BvcnRfb3Blbihzd2lmdEVuZ2luZSwgTlVMTCkpKSB7CisgICAgICAgICAgeworICAgICAgICAgICAgY29uc3QgY2hhciAqbmFtZSA9IHBhcmFtZXRlcnNbUEFSTV9OQU1FXTsKKyAgICAgICAgICAgIGlmIChuYW1lICYmICpuYW1lKSB7CisgICAgICAgICAgICAgIHN3aWZ0X3ZvaWNlICp2b2ljZTsKKyAgICAgICAgICAgICAgaWYgKCpuYW1lID09ICcvJykgeworICAgICAgICAgICAgICAgIGxvZ01lc3NhZ2UoTE9HX0RFQlVHLCAic2V0dGluZyBzd2lmdCB2b2ljZSBkaXJlY3Rvcnk6ICVzIiwgbmFtZSk7CisgICAgICAgICAgICAgICAgdm9pY2UgPSBzd2lmdF9wb3J0X3NldF92b2ljZV9mcm9tX2Rpcihzd2lmdFBvcnQsIG5hbWUpOworICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGxvZ01lc3NhZ2UoTE9HX0RFQlVHLCAic2V0dGluZyBzd2lmdCB2b2ljZSBuYW1lOiAlcyIsIG5hbWUpOworICAgICAgICAgICAgICAgIHZvaWNlID0gc3dpZnRfcG9ydF9zZXRfdm9pY2VfYnlfbmFtZShzd2lmdFBvcnQsIG5hbWUpOworICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgaWYgKCF2b2ljZSkgeworICAgICAgICAgICAgICAgICBsb2dNZXNzYWdlKExPR19XQVJOSU5HLCAiU3dpZnQgdm9pY2Ugc2V0IGVycm9yOiAlcyIsIG5hbWUpOworICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgfQorCisgICAgICAgICAgc2V0U3RyaW5nUGFyYW1ldGVyKCJ0dHMvY29udGVudC10eXBlIiwgInRleHQvcGxhaW4iKTsKKworICAgICAgICAgIGxvZ01lc3NhZ2UoTE9HX0lORk8sICJTd2lmdCBFbmdpbmU6ICVzIGZvciAlcywgdmVyc2lvbiAlcywgJXMiLAorICAgICAgICAgICAgICAgICAgICAgc3dpZnRfZW5naW5lX25hbWUsIHN3aWZ0X3BsYXRmb3JtLCBzd2lmdF92ZXJzaW9uLCBzd2lmdF9kYXRlKTsKKyAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICBsb2dNZXNzYWdlKExPR19FUlIsICJTd2lmdCBwb3J0IG9wZW4gZXJyb3IuIik7CisgICAgICAgIH0KKworICAgICAgICBpZiAoKHJlc3VsdCA9IHN3aWZ0X2VuZ2luZV9jbG9zZShzd2lmdEVuZ2luZSkpICE9IFNXSUZUX1NVQ0NFU1MpIHsKKyAgICAgICAgICBzcGVlY2hFcnJvcihyZXN1bHQsICJlbmdpbmUgY2xvc2UiKTsKKyAgICAgICAgfQorICAgICAgICBzd2lmdEVuZ2luZSA9IE5VTEw7CisgICAgICB9IGVsc2UgeworICAgICAgICBsb2dNZXNzYWdlKExPR19FUlIsICJTd2lmdCBlbmdpbmUgb3BlbiBlcnJvci4iKTsKKyAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgbG9nTWVzc2FnZShMT0dfRVJSLCAiU3dpZnQgZW5naW5lIHBhcmFtZXRlcnMgYWxsb2NhdGlvbiBlcnJvci4iKTsKKyAgICB9CisgIH0KKworICByZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQKK3Nwa19kZXN0cnVjdCAoU3BlZWNoU3ludGhlc2l6ZXIgKnNwaykgeworICBzd2lmdF9yZXN1bHRfdCByZXN1bHQ7CisKKyAgaWYgKHN3aWZ0UG9ydCkgeworICAgIGlmICgocmVzdWx0ID0gc3dpZnRfcG9ydF9jbG9zZShzd2lmdFBvcnQpKSAhPSBTV0lGVF9TVUNDRVNTKSB7CisgICAgICBzcGVlY2hFcnJvcihyZXN1bHQsICJwb3J0IGNsb3NlIik7CisgICAgfQorICAgIHN3aWZ0UG9ydCA9IE5VTEw7CisgIH0KKworICBpZiAoc3dpZnRFbmdpbmUpIHsKKyAgICBpZiAoKHJlc3VsdCA9IHN3aWZ0X2VuZ2luZV9jbG9zZShzd2lmdEVuZ2luZSkpICE9IFNXSUZUX1NVQ0NFU1MpIHsKKyAgICAgIHNwZWVjaEVycm9yKHJlc3VsdCwgImVuZ2luZSBjbG9zZSIpOworICAgIH0KKyAgICBzd2lmdEVuZ2luZSA9IE5VTEw7CisgIH0KK30KZGlmZiAtLWdpdCBhL0RyaXZlcnMvU3BlZWNoL1RoZXRhL01ha2VmaWxlLmluIGIvRHJpdmVycy9TcGVlY2gvVGhldGEvTWFrZWZpbGUuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzlmNzgxOAotLS0gL2Rldi9udWxsCisrKyBiL0RyaXZlcnMvU3BlZWNoL1RoZXRhL01ha2VmaWxlLmluCkBAIC0wLDAgKzEsMjkgQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyMgICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisjCisjIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyMKKyMgQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitEUklWRVJfQ09ERSA9IHRoCitEUklWRVJfTkFNRSA9IFRoZXRhCitEUklWRVJfVVNBR0UgPSBzb2Z0d2FyZSBlbmdpbmUKK0RSSVZFUl9WRVJTSU9OID0gCitEUklWRVJfREVWRUxPUEVSUyA9IAorU1BLX09CSlMgPSBAc3BlZWNoX2xpYnJhcmllc190aEAKK2luY2x1ZGUgJChTUkNfVE9QKXNwZWVjaC5taworCitzcGVlY2guJE86CisJJChDWFgpICQoU1BLX0NYWEZMQUdTKSAtSSQoVEhFVEFfUk9PVCkvaW5jbHVkZSAtYyAkKFNSQ19ESVIpL3NwZWVjaC5jCisKZGlmZiAtLWdpdCBhL0RyaXZlcnMvU3BlZWNoL1RoZXRhL1JFQURNRSBiL0RyaXZlcnMvU3BlZWNoL1RoZXRhL1JFQURNRQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZGVjOTNjCi0tLSAvZGV2L251bGwKKysrIGIvRHJpdmVycy9TcGVlY2gvVGhldGEvUkVBRE1FCkBAIC0wLDAgKzEsMzMgQEAKK1RoaXMgZGlyZWN0b3J5IGNvbnRhaW5zIHRoZSBCUkxUVFkgc3BlZWNoIGRyaXZlciBmb3IgdGhlIFRoZXRhIHRleHQgdG8gc3BlZWNoCitlbmdpbmUgZnJvbSBDZXBzdHJhbCBbaHR0cDovL3d3dy5jZXBzdHJhbC5jb20vXS4gSXQgd2FzIGltcGxlbWVudGVkLCBhbmQgaXMKK2JlaW5nIG1haW50YWluZWQsIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisKK0JSTFRUWSdzIGNvbmZpZ3VyZSBzY3JpcHQgYXV0b21hdGljYWxseSBpbmNsdWRlcyB0aGlzIGRyaXZlciBpZiBUaGV0YSBoYXMgYmVlbgoraW5zdGFsbGVkLiBUaGUgZGVmYXVsdCBpcyB0byBjaGVjayB0aGUgZGlyZWN0b3JpZXMgL3VzciwgL3Vzci9sb2NhbCwKKy91c3IvbG9jYWwvVGhldGEsIC91c3IvbG9jYWwvdGhldGEsIC9vcHQvVGhldGEsIGFuZCAvb3B0L3RoZXRhLiBUaGUgYWN0dWFsCitsb2NhdGlvbiBjYW4gYmUgZXhwbGljaXRseSBzcGVjaWZpZWQgdmlhIC0td2l0aC10aGV0YS4KKworVGhpcyBkcml2ZXIgYW5kIHRoYXQgZm9yIHRoZSBGZXN0aXZhbExpdGUgdGV4dCB0byBzcGVlY2ggZW5naW5lIGNhbm5vdCBiZQorbGlua2VkIGludG8gQlJMVFRZJ3MgYmluYXJ5IGF0IHRoZSBzYW1lIHRpbWUgKHZpYSAtLWVuYWJsZS1zcGVlY2gtZHJpdmVyKQorYmVjYXVzZSB0aGVpciBydW4tdGltZSBsaWJyYXJpZXMgY29udGFpbiBjb25mbGljdGluZyBzeW1ib2xzLgorCitJZiB0aGlzIGRyaXZlciBpcyBidWlsdCBhcyBhIGR5bmFtaWNhbGx5IGxvYWRlZCBzaGFyZWQgb2JqZWN0ICh0aGUgZGVmYXVsdCksCitpLmUuIGl0IGlzbid0IGxpbmtlZCBpbnRvIEJSTFRUWSdzIGJpbmFyeSB2aWEgLS13aXRoLXNwZWVjaC1kcml2ZXIsIHRoZW4gdGhlCitkaXJlY3RvcnkgJFRIRVRBX0hPTUUvbGliIG11c3QgYmUgYWRkZWQgdG8gdGhlIGNvbG9uLWRlbGltaXRlZCBsaXN0IG9mCitkaXJlY3RvcmllcyBpbiB0aGUgTERfTElCUkFSWV9QQVRIIGVudmlyb25tZW50IHZhcmlhYmxlIGJlZm9yZSBCUkxUVFkgaXMKK3N0YXJ0ZWQgYmVjYXVzZSBUaGV0YSdzIG93biBzaGFyZWQgb2JqZWN0cyBkb24ndCBjb250YWluIHJ1bi10aW1lIHNlYXJjaCBwYXRocworZm9yIHRoZWlyIGludGVybmFsIGRlcGVuZGVuY2llcy4KKworVGhpcyBkcml2ZXIgcmVjb2duaXplcyB0aGUgZm9sbG93aW5nIHBhcmFtZXRlcnM6CisKKyAgIFBhcmFtZXRlciBTZXR0aW5ncworICAgYWdlICAgICAgIDEtOTkgKHllYXJzKQorICAgZ2VuZGVyICAgIG1hbGUsIGZlbWFsZSwgbmV1dGVyCisgICBsYW5ndWFnZSAgdHdvLWxldHRlciBsYW5ndWFnZSBjb2RlCisgICBuYW1lICAgICAgbmFtZSAoaHVtYW4pLCAvcGF0aC90by9kaXJlY3RvcnkKKyAgIHBpdGNoICAgICAtMi4wLTIuMCAob2N0YXZlcyByZWxhdGl2ZSB0byBkZWZhdWx0KQorCitJZiB0aGUgaHVtYW4gbmFtZSBvZiB0aGUgdm9pY2UgaXMgc3BlY2lmaWVkIHRoZW4gdGhlIHZvaWNlIHBhdGggaXMgc2VhcmNoZWQuIAorVGhpcyBwYXRoIGNhbiBiZSBleHBsaWNpdGx5IGRlZmluZWQgYnkgc3RvcmluZyBhIGNvbG9uLWRlbGltaXRlZCBsaXN0IG9mCitkaXJlY3RvcmllcyBpbiB0aGUgVEhFVEFfVk9YUEFUSCBlbnZpcm9ubWVudCB2YXJpYWJsZS4gVGhlIGRlZmF1bHQgaXMgdG8gbG9vaworaW4gJFRIRVRBX0hPTUUvdm9pY2VzLgpkaWZmIC0tZ2l0IGEvRHJpdmVycy9TcGVlY2gvVGhldGEvc3BlZWNoLmMgYi9Ecml2ZXJzL1NwZWVjaC9UaGV0YS9zcGVlY2guYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45N2MzZTk5Ci0tLSAvZGV2L251bGwKKysrIGIvRHJpdmVycy9TcGVlY2gvVGhldGEvc3BlZWNoLmMKQEAgLTAsMCArMSwyMzQgQEAKKy8qCisgKiBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorICogICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorICoKKyAqIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorICoKKyAqIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyAqLworCisvKiBUaGV0YS9zcGVlY2guYyAtIFNwZWVjaCBsaWJyYXJ5CisgKiBGb3IgdGhlIFRoZXRhIHRleHQgdG8gc3BlZWNoIHBhY2thZ2UKKyAqIE1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPgorICovCisKKyNpbmNsdWRlICJwcm9sb2d1ZS5oIgorCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxzdHJpbmdzLmg+CisjaW5jbHVkZSA8c2lnbmFsLmg+CisjaW5jbHVkZSA8c3lzL3dhaXQuaD4KKworI2luY2x1ZGUgImxvZy5oIgorI2luY2x1ZGUgInBhcnNlLmgiCisKK3R5cGVkZWYgZW51bSB7CisgIFBBUk1fQUdFLAorICBQQVJNX0dFTkRFUiwKKyAgUEFSTV9MQU5HVUFHRSwKKyAgUEFSTV9OQU1FLAorICBQQVJNX1BJVENICit9IERyaXZlclBhcmFtZXRlcjsKKyNkZWZpbmUgU1BLUEFSTVMgImFnZSIsICJnZW5kZXIiLCAibGFuZ3VhZ2UiLCAibmFtZSIsICJwaXRjaCIKKworI2luY2x1ZGUgInNwa19kcml2ZXIuaCIKKworc3RydWN0IHRoZXRhX3NmeF9ibG9ja19vcHMgeyAvKiB1c2VkIGJ1dCBub3QgZGVmaW5lZCBpbiBoZWFkZXIgKi8KKyAgY2hhciBkdW1teTsKK307CisjaW5jbHVkZSA8dGhldGEuaD4KKworc3RhdGljIGNzdF92b2ljZSAqdm9pY2UgPSBOVUxMOworc3RhdGljIHBpZF90IGNoaWxkID0gLTE7CitzdGF0aWMgaW50IHBpcGVEZXNjcmlwdG9yc1syXTsKK3N0YXRpYyBjb25zdCBpbnQgKnBpcGVPdXRwdXQgPSAmcGlwZURlc2NyaXB0b3JzWzBdOworc3RhdGljIGNvbnN0IGludCAqcGlwZUlucHV0ID0gJnBpcGVEZXNjcmlwdG9yc1sxXTsKKworc3RhdGljIHZvaWQKK2luaXRpYWxpemVUaGV0YSAodm9pZCkgeworICBzdGF0aWMgaW50IGluaXRpYWxpemVkID0gMDsKKyAgaWYgKCFpbml0aWFsaXplZCkgeworICAgIHsKKyAgICAgIGNvbnN0IGNoYXIgKmRpcmVjdG9yeSA9IFRIRVRBX1JPT1QgIi92b2ljZXMiOworICAgICAgc2V0ZW52KCJUSEVUQV9WT1hQQVRIIiwgZGlyZWN0b3J5LCAwKTsKKyAgICB9CisKKyAgICBzZXRlbnYoIlRIRVRBX0hPTUUiLCBUSEVUQV9ST09ULCAwKTsKKyAgICB0aGV0YV9pbml0KE5VTEwpOworICAgIGluaXRpYWxpemVkID0gMTsKKyAgfQorfQorCitzdGF0aWMgdm9pZAorbG9hZFZvaWNlICh0aGV0YV92b2ljZV9kZXNjICpkZXNjcmlwdG9yKSB7CisgIGlmICgodm9pY2UgPSB0aGV0YV9sb2FkX3ZvaWNlKGRlc2NyaXB0b3IpKSkgeworICAgIGxvZ01lc3NhZ2UoTE9HX0lORk8sICJWb2ljZTogJXMoJXMsJWQpIiwKKyAgICAgICAgICAgICAgIHRoZXRhX3ZvaWNlX2h1bWFuKHZvaWNlKSwKKyAgICAgICAgICAgICAgIHRoZXRhX3ZvaWNlX2dlbmRlcih2b2ljZSksCisgICAgICAgICAgICAgICB0aGV0YV92b2ljZV9hZ2Uodm9pY2UpKTsKKyAgfSBlbHNlIHsKKyAgICBsb2dNZXNzYWdlKExPR19XQVJOSU5HLCAiVm9pY2UgbG9hZCBlcnJvcjogJXMgWyVzXSIsCisgICAgICAgICAgICAgICBkZXNjcmlwdG9yLT5odW1hbiwgZGVzY3JpcHRvci0+dm94bmFtZSk7CisgIH0KK30KKworc3RhdGljIGludAorZG9DaGlsZCAodm9pZCkgeworICBGSUxFICpzdHJlYW0gPSBmZG9wZW4oKnBpcGVPdXRwdXQsICJyIik7CisgIGNoYXIgYnVmZmVyWzBYNDAwXTsKKyAgY2hhciAqbGluZTsKKyAgd2hpbGUgKChsaW5lID0gZmdldHMoYnVmZmVyLCBzaXplb2YoYnVmZmVyKSwgc3RyZWFtKSkpIHsKKyAgICB0aGV0YV90dHMobGluZSwgdm9pY2UpOworICB9CisgIHJldHVybiAwOworfQorCitzdGF0aWMgdm9pZAorc3BrX3NheSAoU3BlZWNoU3ludGhlc2l6ZXIgKnNwaywgY29uc3QgdW5zaWduZWQgY2hhciAqYnVmZmVyLCBzaXplX3QgbGVuZ3RoLCBzaXplX3QgY291bnQsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmF0dHJpYnV0ZXMpIHsKKyAgaWYgKHZvaWNlKSB7CisgICAgaWYgKGNoaWxkICE9IC0xKSBnb3RvIHJlYWR5OworCisgICAgaWYgKHBpcGUocGlwZURlc2NyaXB0b3JzKSAhPSAtMSkgeworICAgICAgaWYgKChjaGlsZCA9IGZvcmsoKSkgPT0gLTEpIHsKKyAgICAgICAgbG9nU3lzdGVtRXJyb3IoImZvcmsiKTsKKyAgICAgIH0gZWxzZSBpZiAoY2hpbGQgPT0gMCkgeworICAgICAgICBfZXhpdChkb0NoaWxkKCkpOworICAgICAgfSBlbHNlCisgICAgICByZWFkeTogeworICAgICAgICB1bnNpZ25lZCBjaGFyIHRleHRbbGVuZ3RoICsgMV07CisgICAgICAgIG1lbWNweSh0ZXh0LCBidWZmZXIsIGxlbmd0aCk7CisgICAgICAgIHRleHRbbGVuZ3RoXSA9ICdcbic7CisgICAgICAgIHdyaXRlKCpwaXBlSW5wdXQsIHRleHQsIHNpemVvZih0ZXh0KSk7CisgICAgICAgIHJldHVybjsKKyAgICAgIH0KKworICAgICAgY2xvc2UoKnBpcGVJbnB1dCk7CisgICAgICBjbG9zZSgqcGlwZU91dHB1dCk7CisgICAgfSBlbHNlIHsKKyAgICAgIGxvZ1N5c3RlbUVycm9yKCJwaXBlIik7CisgICAgfQorICB9Cit9CisKK3N0YXRpYyB2b2lkCitzcGtfbXV0ZSAoU3BlZWNoU3ludGhlc2l6ZXIgKnNwaykgeworICBpZiAoY2hpbGQgIT0gLTEpIHsKKyAgICBjbG9zZSgqcGlwZUlucHV0KTsKKyAgICBjbG9zZSgqcGlwZU91dHB1dCk7CisKKyAgICBraWxsKGNoaWxkLCBTSUdLSUxMKTsKKyAgICB3YWl0cGlkKGNoaWxkLCBOVUxMLCAwKTsKKyAgICBjaGlsZCA9IC0xOworICB9Cit9CisKK3N0YXRpYyB2b2lkCitzcGtfc2V0Vm9sdW1lIChTcGVlY2hTeW50aGVzaXplciAqc3BrLCB1bnNpZ25lZCBjaGFyIHNldHRpbmcpIHsKKyAgdGhldGFfc2V0X3Jlc2NhbGUodm9pY2UsIGdldEZsb2F0U3BlZWNoVm9sdW1lKHNldHRpbmcpLCBOVUxMKTsKK30KKworc3RhdGljIHZvaWQKK3Nwa19zZXRSYXRlIChTcGVlY2hTeW50aGVzaXplciAqc3BrLCB1bnNpZ25lZCBjaGFyIHNldHRpbmcpIHsKKyAgdGhldGFfc2V0X3JhdGVfc3RyZXRjaCh2b2ljZSwgMS4wL2dldEZsb2F0U3BlZWNoUmF0ZShzZXR0aW5nKSwgTlVMTCk7Cit9CisKK3N0YXRpYyBpbnQKK3Nwa19jb25zdHJ1Y3QgKFNwZWVjaFN5bnRoZXNpemVyICpzcGssIGNoYXIgKipwYXJhbWV0ZXJzKSB7CisgIHRoZXRhX3ZvaWNlX3NlYXJjaCBjcml0ZXJpYTsKKworICBtZW1zZXQoJmNyaXRlcmlhLCAwLCBzaXplb2YoY3JpdGVyaWEpKTsKKyAgaW5pdGlhbGl6ZVRoZXRhKCk7CisKKyAgc3BrLT5zZXRWb2x1bWUgPSBzcGtfc2V0Vm9sdW1lOworICBzcGstPnNldFJhdGUgPSBzcGtfc2V0UmF0ZTsKKworICBpZiAoKnBhcmFtZXRlcnNbUEFSTV9HRU5ERVJdKSB7CisgICAgY29uc3QgY2hhciAqY29uc3QgY2hvaWNlc1tdID0geyJtYWxlIiwgImZlbWFsZSIsICJuZXV0ZXIiLCBOVUxMfTsKKyAgICB1bnNpZ25lZCBpbnQgY2hvaWNlOworICAgIGlmICh2YWxpZGF0ZUNob2ljZSgmY2hvaWNlLCBwYXJhbWV0ZXJzW1BBUk1fR0VOREVSXSwgY2hvaWNlcykpIHsKKyAgICAgIGNyaXRlcmlhLmdlbmRlciA9IChjaGFyICopY2hvaWNlc1tjaG9pY2VdOworICAgIH0gZWxzZSB7CisgICAgICBsb2dNZXNzYWdlKExPR19XQVJOSU5HLCAiJXM6ICVzIiwgImludmFsaWQgZ2VuZGVyIHNwZWNpZmljYXRpb24iLCBwYXJhbWV0ZXJzW1BBUk1fR0VOREVSXSk7CisgICAgfQorICB9CisKKyAgaWYgKCpwYXJhbWV0ZXJzW1BBUk1fTEFOR1VBR0VdKSBjcml0ZXJpYS5sYW5nID0gcGFyYW1ldGVyc1tQQVJNX0xBTkdVQUdFXTsKKworICBpZiAoKnBhcmFtZXRlcnNbUEFSTV9BR0VdKSB7CisgICAgY29uc3QgY2hhciAqd29yZCA9IHBhcmFtZXRlcnNbUEFSTV9BR0VdOworICAgIGludCB2YWx1ZTsKKyAgICBpbnQgeW91bmdlcjsKKyAgICBzdGF0aWMgY29uc3QgaW50IG1pbmltdW1BZ2UgPSAxOworICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4aW11bUFnZSA9IDk5OworICAgIGlmICgoeW91bmdlciA9IHdvcmRbMF0gPT0gJy0nKSAmJiB3b3JkWzFdKSArK3dvcmQ7CisgICAgaWYgKHZhbGlkYXRlSW50ZWdlcigmdmFsdWUsIHdvcmQsICZtaW5pbXVtQWdlLCAmbWF4aW11bUFnZSkpIHsKKyAgICAgIGlmICh5b3VuZ2VyKSB2YWx1ZSA9IC12YWx1ZTsKKyAgICAgIGNyaXRlcmlhLmFnZSA9IHZhbHVlOworICAgIH0gZWxzZSB7CisgICAgICBsb2dNZXNzYWdlKExPR19XQVJOSU5HLCAiJXM6ICVzIiwgImludmFsaWQgYWdlIHNwZWNpZmljYXRpb24iLCB3b3JkKTsKKyAgICB9CisgIH0KKworICB7CisgICAgY29uc3QgY2hhciAqbmFtZSA9IHBhcmFtZXRlcnNbUEFSTV9OQU1FXTsKKyAgICBpZiAobmFtZSAmJiAoKm5hbWUgPT0gJy8nKSkgeworICAgICAgdGhldGFfdm9pY2VfZGVzYyAqZGVzY3JpcHRvciA9IHRoZXRhX3RyeV92b3hkaXIobmFtZSwgJmNyaXRlcmlhKTsKKyAgICAgIGlmIChkZXNjcmlwdG9yKSB7CisgICAgICAgIGxvYWRWb2ljZShkZXNjcmlwdG9yKTsKKyAgICAgICAgdGhldGFfZnJlZV92b2ljZV9kZXNjKGRlc2NyaXB0b3IpOworICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICB0aGV0YV92b2ljZV9kZXNjICpkZXNjcmlwdG9ycyA9IHRoZXRhX2VudW1fdm9pY2VzKHRoZXRhX3ZveHBhdGgsICZjcml0ZXJpYSk7CisgICAgICBpZiAoZGVzY3JpcHRvcnMpIHsKKyAgICAgICAgdGhldGFfdm9pY2VfZGVzYyAqZGVzY3JpcHRvcjsKKyAgICAgICAgZm9yIChkZXNjcmlwdG9yPWRlc2NyaXB0b3JzOyBkZXNjcmlwdG9yOyBkZXNjcmlwdG9yPWRlc2NyaXB0b3ItPm5leHQpIHsKKyAgICAgICAgICBpZiAoKm5hbWUpCisgICAgICAgICAgICBpZiAoc3RyY2FzZWNtcChuYW1lLCBkZXNjcmlwdG9yLT5odW1hbikgIT0gMCkKKyAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgbG9hZFZvaWNlKGRlc2NyaXB0b3IpOworICAgICAgICAgIGlmICh2b2ljZSkgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgdGhldGFfZnJlZV92b2ljZWxpc3QoZGVzY3JpcHRvcnMpOworICAgICAgfQorICAgIH0KKyAgfQorCisgIGlmICh2b2ljZSkgeworICAgIHsKKyAgICAgIGZsb2F0IHBpdGNoID0gMC4wOworICAgICAgc3RhdGljIGNvbnN0IGZsb2F0IG1pbmltdW1QaXRjaCA9IC0yLjA7CisgICAgICBzdGF0aWMgY29uc3QgZmxvYXQgbWF4aW11bVBpdGNoID0gMi4wOworICAgICAgaWYgKHZhbGlkYXRlRmxvYXQoJnBpdGNoLCBwYXJhbWV0ZXJzW1BBUk1fUElUQ0hdLCAmbWluaW11bVBpdGNoLCAmbWF4aW11bVBpdGNoKSkgeworICAgICAgICB0aGV0YV9zZXRfcGl0Y2hfc2hpZnQodm9pY2UsIHBpdGNoLCBOVUxMKTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIGxvZ01lc3NhZ2UoTE9HX1dBUk5JTkcsICIlczogJXMiLCAiaW52YWxpZCBwaXRjaCBzaGlmdCBzcGVjaWZpY2F0aW9uIiwgcGFyYW1ldGVyc1tQQVJNX1BJVENIXSk7CisgICAgICB9CisgICAgfQorCisgICAgbG9nTWVzc2FnZShMT0dfSU5GTywgIlRoZXRhIEVuZ2luZTogdmVyc2lvbiAlcyIsIHRoZXRhX3ZlcnNpb24pOworICAgIHJldHVybiAxOworICB9CisKKyAgbG9nTWVzc2FnZShMT0dfV0FSTklORywgIk5vIHZvaWNlcyBmb3VuZC4iKTsKKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkCitzcGtfZGVzdHJ1Y3QgKFNwZWVjaFN5bnRoZXNpemVyICpzcGspIHsKKyAgc3BrX211dGUoc3BrKTsKKworICBpZiAodm9pY2UpIHsKKyAgICB0aGV0YV91bmxvYWRfdm9pY2Uodm9pY2UpOworICAgIHZvaWNlID0gTlVMTDsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvRHJpdmVycy9TcGVlY2gvVmlhVm9pY2UvTWFrZWZpbGUuaW4gYi9Ecml2ZXJzL1NwZWVjaC9WaWFWb2ljZS9NYWtlZmlsZS5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZGRmZTIwCi0tLSAvZGV2L251bGwKKysrIGIvRHJpdmVycy9TcGVlY2gvVmlhVm9pY2UvTWFrZWZpbGUuaW4KQEAgLTAsMCArMSwyOSBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorIyAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyMKKyMgQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorIworIyBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorIworIyBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisjIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyMgbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisjCisjIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK0RSSVZFUl9DT0RFID0gdnYKK0RSSVZFUl9OQU1FID0gVmlhVm9pY2UKK0RSSVZFUl9VU0FHRSA9IHNvZnR3YXJlIGVuZ2luZQorRFJJVkVSX1ZFUlNJT04gPSAKK0RSSVZFUl9ERVZFTE9QRVJTID0gCitTUEtfT0JKUyA9IEBzcGVlY2hfbGlicmFyaWVzX3Z2QAoraW5jbHVkZSAkKFNSQ19UT1Apc3BlZWNoLm1rCisKK3NwZWVjaC4kTzoKKwkkKENDKSAkKFNQS19DRkxBR1MpIC1jICQoU1JDX0RJUikvc3BlZWNoLmMKKwpkaWZmIC0tZ2l0IGEvRHJpdmVycy9TcGVlY2gvVmlhVm9pY2UvUkVBRE1FIGIvRHJpdmVycy9TcGVlY2gvVmlhVm9pY2UvUkVBRE1FCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRiMjQ2ZmUKLS0tIC9kZXYvbnVsbAorKysgYi9Ecml2ZXJzL1NwZWVjaC9WaWFWb2ljZS9SRUFETUUKQEAgLTAsMCArMSwxNzMgQEAKK1RoaXMgZGlyZWN0b3J5IGNvbnRhaW5zIHRoZSBCUkxUVFkgc3BlZWNoIHN5bnRoZXNpemVyIGRyaXZlciBmb3IgdGhlIFZpYVZvaWNlCitbaHR0cDovL3d3dy5pYm0uY29tL3NvZnR3YXJlL3NwZWVjaC9kZXYvdHRzc2RrX2xpbnV4Lmh0bWxdIHRleHQgdG8gc3BlZWNoCitlbmdpbmUgZnJvbSBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzIChJQk0pIFtodHRwOi8vd3d3LmlibS5jb21dLiBJdCB3YXMKK2ltcGxlbWVudGVkLCBhbmQgaXMgYmVpbmcgbWFpbnRhaW5lZCwgYnkgRGF2ZSBNaWVsa2UgPERhdmVATWllbGtlLmNjPi4KKworVmlhVm9pY2Ugd2FzIGl0cyBvcmlnaW5hbCBuYW1lLiBJdCdzIGN1cnJlbnRseSAga25vd24gYXMgVm94aW4KK1todHRwOi8vdm94aW4ub3JhbHV4Lm5ldC9dLCBhbmQgaXMgY3VycmVudGx5IGJlaW5nIG1haW50YWluZWQgYnkgdGhlIE9yYWx1eAorQXNzb2NpYXRpb24gW2h0dHA6Ly9vcmFsdXgub3JnL10uIE90aGVyIG5hbWVzIGJ5IHdoaWNoIFZpYVZvaWNlIGhhcyBiZWVuCitrbm93biBpbmNsdWRlIEVsb3F1ZW5jZSwgT3V0bG91ZCwgYW5kIERlY1RhbGsuCisKK1RoaXMgZHJpdmVyIGNhbiBiZSBlaXRoZXIgZHluYW1pY2FsbHkgbG9hZGVkIChhdCBydW4gdGltZSkgb3IgYnVpbHQgZGlyZWN0bHkKK2ludG8gYSBkeW5hbWljYWxseSBsaW5rZWQgQlJMVFRZIGJpbmFyeSAodmlhIC0td2l0aC1zcGVlY2gtZHJpdmVyKSwKK2J1dCBpdCBjYW4ndCBiZSBidWlsdCBpbnRvIGEgc3RhdGljYWxseSBsaW5rZWQgQlJMVFRZIGJpbmFyeSAodmlhCistLWVuYWJsZS1zdGFuZGFsb25lLXByb2dyYW1zKSBiZWNhdXNlIHRoZSBWb3hpbiBwYWNrYWdlIGRvZXNuJ3QgY29udGFpbgorc3RhdGljIGFyY2hpdmVzLgorCitUaGUgc294IGNvbW1hbmQgbXVzdCBiZSBpbnN0YWxsZWQgYmVjYXVzZSB0aGlzIGRyaXZlciB1c2VzIGl0IGluIG9yZGVyIHRvCityZXNhbXBsZSBmcm9tIG9uZSBvZiB0aGUgdW5kZXJseWluZyBzcGVlY2ggZW5naW5lJ3MgZml4ZWQgc2V0IG9mIHJhdGVzIChzZWUKK3RoZSBxdWFsaXR5IHBhcmFtZXRlciwgYmVsb3cpIHRvIG9uZSB0aGF0J3Mgc3VwcG9ydGVkIGJ5IHRoZSBzb3VuZCBjYXJkLgorCitUaGlzIGRyaXZlciByZWNvZ25pemVzIHRoZSBmb2xsb3dpbmcgcGFyYW1ldGVycyAoc2VlIGJlbG93IGZvciBkZXRhaWxzKToKKworICAgUGFyYW1ldGVyICAgICAgIFZhbHVlCisgICBRdWFsaXR5ICAgICAgICAgZmFpciwgcG9vciwgZ29vZAorICAgTW9kZSAgICAgICAgICAgIHdvcmRzLCBsZXR0ZXJzLCBwdW5jdHVhdGlvbiwgcGhvbmV0aWMKKyAgIFN5bnRoZXNpemUgICAgICBzZW50ZW5jZXMsIGFsbAorICAgQWJicmV2aWF0aW9ucyAgIG9uLCBvZmYKKyAgIFllYXJzICAgICAgICAgICBvbiwgb2ZmCisgICBMYW5ndWFnZSAgICAgICAgZGlhbGVjdC1sYW5ndWFnZVstZW5jb2RpbmddCisgICBWb2ljZSAgICAgICAgICAgYnVpbHQtaW4gdHlwZSBvciBWaWFWb2ljZSBuYW1lCisgICBHZW5kZXIgICAgICAgICAgbWFsZSwgZmVtYWxlCisgICBIZWFkU2l6ZSAgICAgICAgMC0xMDAKKyAgIFBpdGNoQmFzZWxpbmUgICA0MC00MjIgW0hlcnR6XQorICAgRXhwcmVzc2l2ZW5lc3MgIDAtMTAwIChwaXRjaCBmbHVjdHVhdGlvbikKKyAgIFJvdWdobmVzcyAgICAgICAwLTEwMAorICAgQnJlYXRoaW5lc3MgICAgIDAtMTAwCisgICBWb2x1bWUgICAgICAgICAgMC0xMDAgW3BlcmNlbnRdCisgICBTcGVlZCAgICAgICAgICAgNzAtMTI5NyBbd29yZHMgcGVyIG1pbnV0ZV0KKworVGhlIHF1YWxpdHkgcGFyYW1ldGVyIHNldHMgdGhlIHNhbXBsZSByYXRlIG9mIHRoZSBnZW5lcmF0ZWQgYXVkaW86CisKKyAgIFZhbHVlICAgUmF0ZQorICAgUG9vciAgICA4MDAwSHoKKyAgKkZhaXIgICAxMTAyNUh6CisgICBHb29kICAgMjIwNTBIegorCitUaGUgbW9kZSBwYXJhbWV0ZXIgZGV0ZXJtaW5lcyBob3cgdGhlIHRleHQgaXMgc3Bva2VuOgorCisgIFZhbHVlICAgICAgICAgQWN0aW9uCisgICpXb3JkcyAgICAgICAgd29yZHMgYXJlIHNwb2tlbgorICAgTGV0dGVycyAgICAgIGxldHRlcnMgYXJlIHNwb2tlbgorICAgUHVuY3R1YXRpb24gIGxldHRlcnMgYW5kIHB1bmN0dWF0aW9uIGFyZSBzcG9rZW4KKyAgIFBob25ldGljICAgICBsZXR0ZXJzIGFyZSBzcG9rZW4gcGhvbmV0aWNhbGx5CisKK1RoZSBzeW50aGVzaXplIHBhcmFtZXRlciBkZXRlcm1pbmVzIGhvdyB0aGUgdGV4dCBpcyBzeW50aGVzaXplZDoKKworICAgVmFsdWUgICAgICBBY3Rpb24KKyAgKlNlbnRlbmNlcyAgZWFjaCBzZW50ZW5jZSBpcyBzeW50aGVzaXplZCBzZXBhcmF0ZWx5CisgICBBbGwgICAgICAgIHRoZSBlbnRpcmUgdGV4dCBpcyBzeW50aGVzaXplZAorCitUaGUgYWJicmV2aWF0aW9ucyBwYXJhbWV0ZXIgZGV0ZXJtaW5lcyBob3cga25vd24gYWJicmV2aWF0aW9ucyBhcmUgc3Bva2VuOgorCisgICBWYWx1ZSAgQWN0aW9uCisgICpPbiAgICAgYWJicmV2aWF0aW9ucyBhcmUgZXhwYW5kZWQKKyAgIE9mZiAgICBhYmJyZXZpYXRpb25zIGFyZW4ndCBleHBhbmRlZAorCitUaGUgeWVhcnMgcGFyYW1ldGVyIGRldGVybWluZXMgaG93IGZvdXItZGlnaXQgbnVtYmVycyBhcmUgc3Bva2VuOgorCisgICBWYWx1ZSAgQWN0aW9uICAgICAgICAgICAgRXhhbXBsZQorICAqT24gICAgIGFzIHllYXIgbnVtYmVycyAgIHR3ZW50eSBuaW5ldGVlbgorICAgT2ZmICAgIGFzIG90aGVyIG51bWJlcnMgIHR3byB0aG91c2FuZCBuaW5ldGVlbgorCitUaGUgbGFuZ3VhZ2UgcGFyYW1ldGVyIHNwZWNpZmllcyB3aGljaCBsYW5ndWFnZSBpcyB0byBiZSBzeW50aGVzaXplZC4gVGhlCitjb21wb25lbnRzIG9mIGEgbGFuZ3VhZ2UgbmFtZSBhcmUgc2VwYXJhdGVkIGZyb20gb25lIGFub3RoZXIgYnkgYSBkYXNoIFstXS4KK1RoZSBmaXJzdCBjb21wb25lbnQgaXMgdGhlIGRpYWxlY3QsIHRoZSBzZWNvbmQgY29tcG9uZW50IGlzIHRoZSBsYW5ndWFnZSwKK2FuZCB0aGUgb3B0aW9uYWwgdGhpcmQgY29tcG9uZW50IGlzIHRoZSBlbmNvZGluZyAoY2hhcmFjdGVyIHNldCkuIENhc2UKK2RvZXNuJ3QgbWF0dGVyLCBhbmQgZWFjaCBjb21wb25lbnQgbWF5IGJlIGluZGl2aWR1YWxseSBhYmJyZXZpYXRlZCBhcworZGVzaXJlZC4gRm9yIGV4YW1wbGUsIGNhLWZyIG1lYW5zIENhbmFkaWFuLUZyZW5jaC4gVGhlIGZvbGxvd2luZyBsYW5ndWFnZXMKK2FyZSBzdXBwb3J0ZWQ6CisKKyAgKkFtZXJpY2FuLUVuZ2xpc2gKKyAgIEJyaXRpc2gtRW5nbGlzaAorICAgQ2FzdGlsaWFuLVNwYW5pc2gKKyAgIE1leGljYW4tU3BhbmlzaAorICAgU3RhbmRhcmQtRnJlbmNoCisgICBDYW5hZGlhbi1GcmVuY2gKKyAgIFN0YW5kYXJkLUdlcm1hbgorICAgU3RhbmRhcmQtSXRhbGlhbgorICAgU3RhbmRhcmQtTWFuZGFyaW4tR0JLCisgICBTdGFuZGFyZC1NYW5kYXJpbi1QaW5ZaW4KKyAgIFN0YW5kYXJkLU1hbmRhcmluLVVDUzIKKyAgIFRhaXdhbmVzZS1NYW5kYXJpbi1CaWc1CisgICBUYWl3YW5lc2UtTWFuZGFyaW4tWmh1WWluCisgICBUYWl3YW5lc2UtTWFuZGFyaW4tUGluWWluCisgICBUYWl3YW5lc2UtTWFuZGFyaW4tVUNTMgorICAgQnJhemlsaWFuLVBvcnR1Z3Vlc2UKKyAgIFN0YW5kYXJkLUphcGFuZXNlLVNKSVMKKyAgIFN0YW5kYXJkLUphcGFuZXNlLVVDUzIKKyAgIFN0YW5kYXJkLUZpbm5pc2gKKyAgIFN0YW5kYXJkLUtvcmVhbi1VSEMKKyAgIFN0YW5kYXJkLUtvcmVhbi1VQ1MyCisgICBTdGFuZGFyZC1DYW50b25lc2UtR0JLCisgICBTdGFuZGFyZC1DYW50b25lc2UtVUNTMgorICAgSG9uZ0tvbmctQ2FudG9uZXNlLUJpZzUKKyAgIEhvbmdLb25nLUNhbnRvbmVzZS1VQ1MyCisgICBTdGFuZGFyZC1EdXRjaAorICAgU3RhbmRhcmQtTm9yd2VnaWFuCisgICBTdGFuZGFyZC1Td2VkaXNoCisgICBTdGFuZGFyZC1EYW5pc2gKKyAgIFN0YW5kYXJkLVRoYWktVElTNjIwCisKK1RoZSB2b2ljZSBwYXJhbWV0ZXIgc3BlY2lmaWVzIHdoaWNoIHR5cGUgb2Ygdm9pY2UgaXMgdG8gYmUgc3ludGhlc2l6ZWQuIEl0CittYXkgYmUgZWl0aGVyIGEgYnVpbHQtaW4gdm9pY2UgdHlwZSBvciBhIFZpYVZvaWNlIHZvaWNlIG5hbWUuIFRoZSBidWlsdC1pbgordm9pY2UgdHlwZXMgYXJlOiBtYW4gKHRoZSBkZWZhdWx0KSwgd29tYW4sIGNoaWxkLCBwYXRyaWFyY2ggKGVsZGVybHkgbWFuKSwKK21hdHJpYXJjaCAoZWxkZXJseSB3b21hbikuIFRoZSBWaWFWb2ljZSB2b2ljZSBuYW1lcyBhcmU6CisKKyAgIExhbmd1YWdlICAgICAgICAgICAgICBUeXBlICAgICAgIE5hbWUKKyAgIEFtZXJpY2FuIEVuZ2xpc2ggICAgICBNYW4gICAgICAgIFJlZWQKKyAgIEFtZXJpY2FuIEVuZ2xpc2ggICAgICBXb21hbiAgICAgIFNoZWxsZXkKKyAgIEFtZXJpY2FuIEVuZ2xpc2ggICAgICBDaGlsZCAgICAgIFNhbmR5CisgICBBbWVyaWNhbiBFbmdsaXNoICAgICAgUGF0cmlhcmNoICBHcmFuZHBhCisgICBBbWVyaWNhbiBFbmdsaXNoICAgICAgTWF0cmlhcmNoICBHcmFuZG1hCisgICBCcml0aXNoIEVuZ2xpc2ggICAgICAgTWFuICAgICAgICBKdXN0aW4KKyAgIEJyaXRpc2ggRW5nbGlzaCAgICAgICBXb21hbiAgICAgIEphbmUKKyAgIEJyaXRpc2ggRW5nbGlzaCAgICAgICBDaGlsZCAgICAgIE5pY2t5CisgICBCcml0aXNoIEVuZ2xpc2ggICAgICAgUGF0cmlhcmNoICBHcmFtcHMKKyAgIEJyaXRpc2ggRW5nbGlzaCAgICAgICBNYXRyaWFyY2ggIE5hbm55CisgICBDYXN0aWxpYW4gU3BhbmlzaCAgICAgTWFuICAgICAgICBDYXJsb3MKKyAgIENhc3RpbGlhbiBTcGFuaXNoICAgICBXb21hbiAgICAgIFBpbGFyCisgICBDYXN0aWxpYW4gU3BhbmlzaCAgICAgQ2hpbGQgICAgICBQZXBlCisgICBDYXN0aWxpYW4gU3BhbmlzaCAgICAgUGF0cmlhcmNoICBBYnVlbG8KKyAgIENhc3RpbGlhbiBTcGFuaXNoICAgICBNYXRyaWFyY2ggIEFidWVsYQorICAgU3RhbmRhcmQgRnJlbmNoICAgICAgIE1hbiAgICAgICAgSmFjcXVlcworICAgU3RhbmRhcmQgRnJlbmNoICAgICAgIFdvbWFuICAgICAgSmFjcXVlbGluZQorICAgU3RhbmRhcmQgRnJlbmNoICAgICAgIENoaWxkICAgICAgTWFyaXVzCisgICBTdGFuZGFyZCBGcmVuY2ggICAgICAgUGF0cmlhcmNoICBHcmFuZHDDqHJlCisgICBTdGFuZGFyZCBGcmVuY2ggICAgICAgTWF0cmlhcmNoICBNYW1pZQorICAgU3RhbmRhcmQgR2VybWFuICAgICAgIE1hbiAgICAgICAgTWF4CisgICBTdGFuZGFyZCBHZXJtYW4gICAgICAgV29tYW4gICAgICBHaXNlbGEKKyAgIFN0YW5kYXJkIEdlcm1hbiAgICAgICBDaGlsZCAgICAgIE1hdHRpCisgICBTdGFuZGFyZCBHZXJtYW4gICAgICAgUGF0cmlhcmNoICBPcGEKKyAgIFN0YW5kYXJkIEdlcm1hbiAgICAgICBNYXRyaWFyY2ggIE9tYQorICAgU3RhbmRhcmQgSXRhbGlhbiAgICAgIE1hbiAgICAgICAgRW5yaWNvCisgICBTdGFuZGFyZCBJdGFsaWFuICAgICAgV29tYW4gICAgICBMdWNpYQorICAgU3RhbmRhcmQgSXRhbGlhbiAgICAgIENoaWxkICAgICAgQ2hpY2NvCisgICBTdGFuZGFyZCBJdGFsaWFuICAgICAgUGF0cmlhcmNoICBOb25ubworICAgU3RhbmRhcmQgSXRhbGlhbiAgICAgIE1hdHJpYXJjaCAgTm9ubmEKKyAgIFN0YW5kYXJkIE1hbmRhcmluICAgICBNYW4gICAgICAgIExpMyBKaW5nNAorICAgU3RhbmRhcmQgTWFuZGFyaW4gICAgIFdvbWFuICAgICAgV2FuZzIgWWFuNAorICAgU3RhbmRhcmQgTWFuZGFyaW4gICAgIENoaWxkICAgICAgTGkzIERvbmcxIERvbmcxCisgICBTdGFuZGFyZCBNYW5kYXJpbiAgICAgUGF0cmlhcmNoICBZZTIgWWUKKyAgIFN0YW5kYXJkIE1hbmRhcmluICAgICBNYXRyaWFyY2ggIE5haTMgTmFpCisgICBUYWl3YW5lc2UgTWFuZGFyaW4gICAgTWFuICAgICAgICBaaGk0IE1pbmcyCisgICBUYWl3YW5lc2UgTWFuZGFyaW4gICAgV29tYW4gICAgICBDaHVuMSBKaWFvMQorICAgVGFpd2FuZXNlIE1hbmRhcmluICAgIENoaWxkICAgICAgWGlhbzMgQnU0IERpYW4zCisgICBUYWl3YW5lc2UgTWFuZGFyaW4gICAgUGF0cmlhcmNoICBBMyBHb25nMQorICAgVGFpd2FuZXNlIE1hbmRhcmluICAgIE1hdHJpYXJjaCAgQTMgTWE0CisgICBCcmF6aWxpYW4gUG9ydHVndWVzZSAgTWFuICAgICAgICBKb8OjbworICAgQnJhemlsaWFuIFBvcnR1Z3Vlc2UgIFdvbWFuICAgICAgQ2zDoXVkaWEKKyAgIEJyYXppbGlhbiBQb3J0dWd1ZXNlICBDaGlsZCAgICAgIENoaWNvCisgICBCcmF6aWxpYW4gUG9ydHVndWVzZSAgUGF0cmlhcmNoICBBdsO0CisgICBCcmF6aWxpYW4gUG9ydHVndWVzZSAgTWF0cmlhcmNoICBBdsOzCisgICBTdGFuZGFyZCBKYXBhbmVzZSAgICAgTWFuICAgICAgICBUYXJvbworICAgU3RhbmRhcmQgSmFwYW5lc2UgICAgIFdvbWFuICAgICAgSGFuYWtvCisgICBTdGFuZGFyZCBKYXBhbmVzZSAgICAgQ2hpbGQgICAgICBKaXJvbworICAgU3RhbmRhcmQgSmFwYW5lc2UgICAgIFBhdHJpYXJjaCAgVGFyb28KKyAgIFN0YW5kYXJkIEphcGFuZXNlICAgICBNYXRyaWFyY2ggIE9iYWFjaGFuCisgICBTdGFuZGFyZCBGaW5uaXNoICAgICAgTWFuICAgICAgICBBbnR0aQorICAgU3RhbmRhcmQgRmlubmlzaCAgICAgIFdvbWFuICAgICAgVGFyamEKKyAgIFN0YW5kYXJkIEZpbm5pc2ggICAgICBDaGlsZCAgICAgIFBla2thCisgICBTdGFuZGFyZCBGaW5uaXNoICAgICAgUGF0cmlhcmNoICBJc29pc8OkCisgICBTdGFuZGFyZCBGaW5uaXNoICAgICAgTWF0cmlhcmNoICBJc2/DpGl0aQorCmRpZmYgLS1naXQgYS9Ecml2ZXJzL1NwZWVjaC9WaWFWb2ljZS9sYW5ndWFnZXMuaCBiL0RyaXZlcnMvU3BlZWNoL1ZpYVZvaWNlL2xhbmd1YWdlcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcwZTFmOTYKLS0tIC9kZXYvbnVsbAorKysgYi9Ecml2ZXJzL1NwZWVjaC9WaWFWb2ljZS9sYW5ndWFnZXMuaApAQCAtMCwwICsxLDIyOCBAQAorLyoKKyAqIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisgKiAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisgKgorICogQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKK3sgLmlkZW50aWZpZXIgPSBlY2lHZW5lcmFsQW1lcmljYW5FbmdsaXNoLAorICAubmFtZSA9ICJBbWVyaWNhbi1FbmdsaXNoIiwKKyAgLmxhbmd1YWdlID0gImVuIiwKKyAgLnRlcnJpdG9yeSA9ICJVUyIsCisgIC5lbmNvZGluZyA9ICJJU08tODg1OS0xIgorfSwKKworeyAuaWRlbnRpZmllciA9IGVjaUJyaXRpc2hFbmdsaXNoLAorICAubmFtZSA9ICJCcml0aXNoLUVuZ2xpc2giLAorICAubGFuZ3VhZ2UgPSAiZW4iLAorICAudGVycml0b3J5ID0gIkdCIiwKKyAgLmVuY29kaW5nID0gIklTTy04ODU5LTEiCit9LAorCit7IC5pZGVudGlmaWVyID0gZWNpQ2FzdGlsaWFuU3BhbmlzaCwKKyAgLm5hbWUgPSAiQ2FzdGlsaWFuLVNwYW5pc2giLAorICAubGFuZ3VhZ2UgPSAiZXMiLAorICAudGVycml0b3J5ID0gIkVTIiwKKyAgLmVuY29kaW5nID0gIklTTy04ODU5LTEiCit9LAorCit7IC5pZGVudGlmaWVyID0gZWNpTWV4aWNhblNwYW5pc2gsCisgIC5uYW1lID0gIk1leGljYW4tU3BhbmlzaCIsCisgIC5sYW5ndWFnZSA9ICJlcyIsCisgIC50ZXJyaXRvcnkgPSAiTVgiLAorICAuZW5jb2RpbmcgPSAiSVNPLTg4NTktMSIKK30sCisKK3sgLmlkZW50aWZpZXIgPSBlY2lTdGFuZGFyZEZyZW5jaCwKKyAgLm5hbWUgPSAiU3RhbmRhcmQtRnJlbmNoIiwKKyAgLmxhbmd1YWdlID0gImZyIiwKKyAgLnRlcnJpdG9yeSA9ICJGUiIsCisgIC5lbmNvZGluZyA9ICJJU08tODg1OS0xIgorfSwKKworeyAuaWRlbnRpZmllciA9IGVjaUNhbmFkaWFuRnJlbmNoLAorICAubmFtZSA9ICJDYW5hZGlhbi1GcmVuY2giLAorICAubGFuZ3VhZ2UgPSAiZnIiLAorICAudGVycml0b3J5ID0gIkNBIiwKKyAgLmVuY29kaW5nID0gIklTTy04ODU5LTEiCit9LAorCit7IC5pZGVudGlmaWVyID0gZWNpU3RhbmRhcmRHZXJtYW4sCisgIC5uYW1lID0gIlN0YW5kYXJkLUdlcm1hbiIsCisgIC5sYW5ndWFnZSA9ICJkZSIsCisgIC50ZXJyaXRvcnkgPSAiREUiLAorICAuZW5jb2RpbmcgPSAiSVNPLTg4NTktMSIKK30sCisKK3sgLmlkZW50aWZpZXIgPSBlY2lTdGFuZGFyZEl0YWxpYW4sCisgIC5uYW1lID0gIlN0YW5kYXJkLUl0YWxpYW4iLAorICAubGFuZ3VhZ2UgPSAiaXQiLAorICAudGVycml0b3J5ID0gIklUIiwKKyAgLmVuY29kaW5nID0gIklTTy04ODU5LTEiCit9LAorCit7IC5pZGVudGlmaWVyID0gZWNpTWFuZGFyaW5DaGluZXNlR0IsCisgIC5uYW1lID0gIlN0YW5kYXJkLU1hbmRhcmluLUdCSyIsCisgIC5sYW5ndWFnZSA9ICJ6aCIsCisgIC50ZXJyaXRvcnkgPSAiQ04iLAorICAuZW5jb2RpbmcgPSAiR0JLIgorfSwKKworeyAuaWRlbnRpZmllciA9IGVjaU1hbmRhcmluQ2hpbmVzZVBpbllpbiwKKyAgLm5hbWUgPSAiU3RhbmRhcmQtTWFuZGFyaW4tUGluWWluIiwKKyAgLmxhbmd1YWdlID0gInpoIiwKKyAgLnRlcnJpdG9yeSA9ICJDTiIsCisgIC5lbmNvZGluZyA9ICJHQksiCit9LAorCit7IC5pZGVudGlmaWVyID0gZWNpTWFuZGFyaW5DaGluZXNlVUNTLAorICAubmFtZSA9ICJTdGFuZGFyZC1NYW5kYXJpbi1VQ1MyIiwKKyAgLmxhbmd1YWdlID0gInpoIiwKKyAgLnRlcnJpdG9yeSA9ICJDTiIsCisgIC5lbmNvZGluZyA9ICJVQ1MtMiIKK30sCisKK3sgLmlkZW50aWZpZXIgPSBlY2lUYWl3YW5lc2VNYW5kYXJpbkJpZzUsCisgIC5uYW1lID0gIlRhaXdhbmVzZS1NYW5kYXJpbi1CaWc1IiwKKyAgLmxhbmd1YWdlID0gInpoIiwKKyAgLnRlcnJpdG9yeSA9ICJUVyIsCisgIC5lbmNvZGluZyA9ICJCSUc1IgorfSwKKworeyAuaWRlbnRpZmllciA9IGVjaVRhaXdhbmVzZU1hbmRhcmluWmh1WWluLAorICAubmFtZSA9ICJUYWl3YW5lc2UtTWFuZGFyaW4tWmh1WWluIiwKKyAgLmxhbmd1YWdlID0gInpoIiwKKyAgLnRlcnJpdG9yeSA9ICJUVyIsCisgIC5lbmNvZGluZyA9ICJCSUc1IgorfSwKKworeyAuaWRlbnRpZmllciA9IGVjaVRhaXdhbmVzZU1hbmRhcmluUGluWWluLAorICAubmFtZSA9ICJUYWl3YW5lc2UtTWFuZGFyaW4tUGluWWluIiwKKyAgLmxhbmd1YWdlID0gInpoIiwKKyAgLnRlcnJpdG9yeSA9ICJUVyIsCisgIC5lbmNvZGluZyA9ICJCSUc1IgorfSwKKworeyAuaWRlbnRpZmllciA9IGVjaVRhaXdhbmVzZU1hbmRhcmluVUNTLAorICAubmFtZSA9ICJUYWl3YW5lc2UtTWFuZGFyaW4tVUNTMiIsCisgIC5sYW5ndWFnZSA9ICJ6aCIsCisgIC50ZXJyaXRvcnkgPSAiVFciLAorICAuZW5jb2RpbmcgPSAiVUNTLTIiCit9LAorCit7IC5pZGVudGlmaWVyID0gZWNpQnJhemlsaWFuUG9ydHVndWVzZSwKKyAgLm5hbWUgPSAiQnJhemlsaWFuLVBvcnR1Z3Vlc2UiLAorICAubGFuZ3VhZ2UgPSAicHQiLAorICAudGVycml0b3J5ID0gIkJSIiwKKyAgLmVuY29kaW5nID0gIklTTy04ODU5LTEiCit9LAorCit7IC5pZGVudGlmaWVyID0gZWNpU3RhbmRhcmRKYXBhbmVzZVNKSVMsCisgIC5uYW1lID0gIlN0YW5kYXJkLUphcGFuZXNlLVNKSVMiLAorICAubGFuZ3VhZ2UgPSAiamEiLAorICAudGVycml0b3J5ID0gIkpQIiwKKyAgLmVuY29kaW5nID0gIlNKSVMiCit9LAorCit7IC5pZGVudGlmaWVyID0gZWNpU3RhbmRhcmRKYXBhbmVzZVVDUywKKyAgLm5hbWUgPSAiU3RhbmRhcmQtSmFwYW5lc2UtVUNTMiIsCisgIC5sYW5ndWFnZSA9ICJqYSIsCisgIC50ZXJyaXRvcnkgPSAiSlAiLAorICAuZW5jb2RpbmcgPSAiVUNTLTIiCit9LAorCit7IC5pZGVudGlmaWVyID0gZWNpU3RhbmRhcmRGaW5uaXNoLAorICAubmFtZSA9ICJTdGFuZGFyZC1GaW5uaXNoIiwKKyAgLmxhbmd1YWdlID0gImZpIiwKKyAgLnRlcnJpdG9yeSA9ICJGSSIsCisgIC5lbmNvZGluZyA9ICJJU08tODg1OS0xIgorfSwKKworeyAuaWRlbnRpZmllciA9IGVjaVN0YW5kYXJkS29yZWFuVUhDLAorICAubmFtZSA9ICJTdGFuZGFyZC1Lb3JlYW4tVUhDIiwKKyAgLmxhbmd1YWdlID0gImtvIiwKKyAgLnRlcnJpdG9yeSA9ICJLUiIsCisgIC5lbmNvZGluZyA9ICJVSEMiCit9LAorCit7IC5pZGVudGlmaWVyID0gZWNpU3RhbmRhcmRLb3JlYW5VQ1MsCisgIC5uYW1lID0gIlN0YW5kYXJkLUtvcmVhbi1VQ1MyIiwKKyAgLmxhbmd1YWdlID0gImtvIiwKKyAgLnRlcnJpdG9yeSA9ICJLUiIsCisgIC5lbmNvZGluZyA9ICJVQ1MtMiIKK30sCisKK3sgLmlkZW50aWZpZXIgPSBlY2lTdGFuZGFyZENhbnRvbmVzZUdCLAorICAubmFtZSA9ICJTdGFuZGFyZC1DYW50b25lc2UtR0JLIiwKKyAgLmxhbmd1YWdlID0gInpoIiwKKyAgLnRlcnJpdG9yeSA9ICJISyIsCisgIC5lbmNvZGluZyA9ICJHQksiCit9LAorCit7IC5pZGVudGlmaWVyID0gZWNpU3RhbmRhcmRDYW50b25lc2VVQ1MsCisgIC5uYW1lID0gIlN0YW5kYXJkLUNhbnRvbmVzZS1VQ1MyIiwKKyAgLmxhbmd1YWdlID0gInpoIiwKKyAgLnRlcnJpdG9yeSA9ICJISyIsCisgIC5lbmNvZGluZyA9ICJVQ1MtMiIKK30sCisKK3sgLmlkZW50aWZpZXIgPSBlY2lIb25nS29uZ0NhbnRvbmVzZUJpZzUsCisgIC5uYW1lID0gIkhvbmdLb25nLUNhbnRvbmVzZS1CaWc1IiwKKyAgLmxhbmd1YWdlID0gInpoIiwKKyAgLnRlcnJpdG9yeSA9ICJISyIsCisgIC5lbmNvZGluZyA9ICJCSUc1IgorfSwKKworeyAuaWRlbnRpZmllciA9IGVjaUhvbmdLb25nQ2FudG9uZXNlVUNTLAorICAubmFtZSA9ICJIb25nS29uZy1DYW50b25lc2UtVUNTMiIsCisgIC5sYW5ndWFnZSA9ICJ6aCIsCisgIC50ZXJyaXRvcnkgPSAiSEsiLAorICAuZW5jb2RpbmcgPSAiVUNTLTIiCit9LAorCit7IC5pZGVudGlmaWVyID0gZWNpU3RhbmRhcmREdXRjaCwKKyAgLm5hbWUgPSAiU3RhbmRhcmQtRHV0Y2giLAorICAubGFuZ3VhZ2UgPSAibmwiLAorICAudGVycml0b3J5ID0gIk5MIiwKKyAgLmVuY29kaW5nID0gIklTTy04ODU5LTEiCit9LAorCit7IC5pZGVudGlmaWVyID0gZWNpU3RhbmRhcmROb3J3ZWdpYW4sCisgIC5uYW1lID0gIlN0YW5kYXJkLU5vcndlZ2lhbiIsCisgIC5sYW5ndWFnZSA9ICJubyIsCisgIC50ZXJyaXRvcnkgPSAiTk8iLAorICAuZW5jb2RpbmcgPSAiSVNPLTg4NTktMSIKK30sCisKK3sgLmlkZW50aWZpZXIgPSBlY2lTdGFuZGFyZFN3ZWRpc2gsCisgIC5uYW1lID0gIlN0YW5kYXJkLVN3ZWRpc2giLAorICAubGFuZ3VhZ2UgPSAic3YiLAorICAudGVycml0b3J5ID0gIlNFIiwKKyAgLmVuY29kaW5nID0gIklTTy04ODU5LTEiCit9LAorCit7IC5pZGVudGlmaWVyID0gZWNpU3RhbmRhcmREYW5pc2gsCisgIC5uYW1lID0gIlN0YW5kYXJkLURhbmlzaCIsCisgIC5sYW5ndWFnZSA9ICJkYSIsCisgIC50ZXJyaXRvcnkgPSAiREsiLAorICAuZW5jb2RpbmcgPSAiSVNPLTg4NTktMSIKK30sCisKK3sgLmlkZW50aWZpZXIgPSBlY2lTdGFuZGFyZFRoYWlUSVMsCisgIC5uYW1lID0gIlN0YW5kYXJkLVRoYWktVElTNjIwIiwKKyAgLmxhbmd1YWdlID0gInRoIiwKKyAgLnRlcnJpdG9yeSA9ICJUSCIsCisgIC5lbmNvZGluZyA9ICJUSVMtNjIwIgorfSwKKwpkaWZmIC0tZ2l0IGEvRHJpdmVycy9TcGVlY2gvVmlhVm9pY2Uvc3BlZWNoLmMgYi9Ecml2ZXJzL1NwZWVjaC9WaWFWb2ljZS9zcGVlY2guYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNmYwNzExCi0tLSAvZGV2L251bGwKKysrIGIvRHJpdmVycy9TcGVlY2gvVmlhVm9pY2Uvc3BlZWNoLmMKQEAgLTAsMCArMSw5MTkgQEAKKy8qCisgKiBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorICogICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorICoKKyAqIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorICoKKyAqIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyAqLworCisjaW5jbHVkZSAicHJvbG9ndWUuaCIKKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxjdHlwZS5oPgorI2luY2x1ZGUgPGVjaS5oPgorCisjaWZkZWYgSEFWRV9JQ09OVl9ICisjaW5jbHVkZSA8aWNvbnYuaD4KKyNkZWZpbmUgSUNPTlZfTlVMTCAoKGljb252X3QpLTEpCisjZWxzZSAvKiBIQVZFX0lDT05WX0ggKi8KKyN3YXJuaW5nIGljb252IGlzIG5vdCBhdmFpbGFibGUKKyNlbmRpZiAvKiBIQVZFX0lDT05WX0ggKi8KKworI2luY2x1ZGUgImxvZy5oIgorI2luY2x1ZGUgInBhcnNlLmgiCisKK3R5cGVkZWYgZW51bSB7CisgICBQQVJNX1F1YWxpdHksCisgICBQQVJNX01vZGUsCisgICBQQVJNX1N5bnRoZXNpemUsCisgICBQQVJNX0FiYnJldmlhdGlvbnMsCisgICBQQVJNX1llYXJzLAorICAgUEFSTV9MYW5ndWFnZSwKKyAgIFBBUk1fVm9pY2UsCisgICBQQVJNX0dlbmRlciwKKyAgIFBBUk1fSGVhZFNpemUsCisgICBQQVJNX1BpdGNoQmFzZWxpbmUsCisgICBQQVJNX0V4cHJlc3NpdmVuZXNzLAorICAgUEFSTV9Sb3VnaG5lc3MsCisgICBQQVJNX0JyZWF0aGluZXNzLAorICAgUEFSTV9Wb2x1bWUsCisgICBQQVJNX1NwZWVkCit9IERyaXZlclBhcmFtZXRlcjsKKyNkZWZpbmUgU1BLUEFSTVMgIlF1YWxpdHkiLCAiTW9kZSIsICJTeW50aGVzaXplIiwgIkFiYnJldmlhdGlvbnMiLCAiWWVhcnMiLCAiTGFuZ3VhZ2UiLCAiVm9pY2UiLCAiR2VuZGVyIiwgIkhlYWRTaXplIiwgIlBpdGNoQmFzZWxpbmUiLCAiRXhwcmVzc2l2ZW5lc3MiLCAiUm91Z2huZXNzIiwgIkJyZWF0aGluZXNzIiwgIlZvbHVtZSIsICJTcGVlZCIKKworI2luY2x1ZGUgInNwa19kcml2ZXIuaCIKKworI2RlZmluZSBNQVhJTVVNX1NBTVBMRVMgMFg4MDAKKwordHlwZWRlZiB2b2lkIFNhdmVTZXR0aW5nRnVuY3Rpb24gKFNwZWVjaFN5bnRoZXNpemVyICpzcGssIGludCBzZXR0aW5nKTsKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgY29uc3QgY2hhciAqbmFtZTsgLy8gbXVzdCBiZSBmaXJzdAorICAgaW50IHJhdGU7Cit9IFF1YWxpdHlDaG9pY2U7CisKK3N0YXRpYyBjb25zdCBRdWFsaXR5Q2hvaWNlIHF1YWxpdHlDaG9pY2VzW10gPSB7CisgICB7ICAubmFtZSA9ICJwb29yIiwKKyAgICAgIC5yYXRlID0gODAwMAorICAgfSwKKworICAgeyAgLm5hbWUgPSAiZmFpciIsCisgICAgICAucmF0ZSA9IDExMDI1CisgICB9LAorCisgICB7ICAubmFtZSA9ICJnb29kIiwKKyAgICAgIC5yYXRlID0gMjIwNTAKKyAgIH0sCisKKyAgIHsgIC5uYW1lID0gTlVMTCAgfQorfTsKKworc3RhdGljIGNvbnN0IGNoYXIgKmFiYnJldmlhdGlvbnNDaG9pY2VzW10gPSB7Im9uIiwgIm9mZiIsIE5VTEx9Oworc3RhdGljIGNvbnN0IGNoYXIgKnllYXJzQ2hvaWNlc1tdID0geyJvZmYiLCAib24iLCBOVUxMfTsKK3N0YXRpYyBjb25zdCBjaGFyICpzeW50aGVzaXplQ2hvaWNlc1tdID0geyJzZW50ZW5jZXMiLCAiYWxsIiwgTlVMTH07CitzdGF0aWMgY29uc3QgY2hhciAqbW9kZUNob2ljZXNbXSA9IHsid29yZHMiLCAibGV0dGVycyIsICJwdW5jdHVhdGlvbiIsICJwaG9uZXRpYyIsIE5VTEx9Oworc3RhdGljIGNvbnN0IGNoYXIgKmdlbmRlckNob2ljZXNbXSA9IHsibWFsZSIsICJmZW1hbGUiLCBOVUxMfTsKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgY29uc3QgY2hhciAqbmFtZTsgLy8gbXVzdCBiZSBmaXJzdAorICAgY29uc3QgY2hhciAqbGFuZ3VhZ2U7CisgICBjb25zdCBjaGFyICp0ZXJyaXRvcnk7CisgICBjb25zdCBjaGFyICplbmNvZGluZzsKKyAgIGludCBpZGVudGlmaWVyOworfSBMYW5ndWFnZUNob2ljZTsKKworc3RhdGljIGNvbnN0IExhbmd1YWdlQ2hvaWNlIGxhbmd1YWdlQ2hvaWNlc1tdID0geworICAgI2luY2x1ZGUgImxhbmd1YWdlcy5oIgorICAgeyAubmFtZSA9IE5VTEwgfQorfTsKKwordHlwZWRlZiBlbnVtIHsKKyAgIFZPSUNFX1RZUEVfQ1VSUkVOVCwKKyAgIFZPSUNFX1RZUEVfTUFOMSwKKyAgIFZPSUNFX1RZUEVfV09NQU4xLAorICAgVk9JQ0VfVFlQRV9DSElMRDEsCisgICBWT0lDRV9UWVBFX01BTjIsCisgICBWT0lDRV9UWVBFX01BTjMsCisgICBWT0lDRV9UWVBFX1dPTUFOMiwKKyAgIFZPSUNFX1RZUEVfTUFUUklBUkNIMSwKKyAgIFZPSUNFX1RZUEVfUEFUUklBUkNIMSwKKyAgIFZPSUNFX1RZUEVfVVNFUjEsCisgICBWT0lDRV9UWVBFX1VTRVIyLAorICAgVk9JQ0VfVFlQRV9VU0VSMywKKyAgIFZPSUNFX1RZUEVfVVNFUjQsCisgICBWT0lDRV9UWVBFX1VTRVI1LAorICAgVk9JQ0VfVFlQRV9VU0VSNiwKKyAgIFZPSUNFX1RZUEVfVVNFUjcKK30gVm9pY2VUeXBlOworCit0eXBlZGVmIHN0cnVjdCB7CisgICBjb25zdCBjaGFyICpuYW1lOyAvLyBtdXN0IGJlIGZpcnN0CisgICBpbnQgbGFuZ3VhZ2U7CisgICBWb2ljZVR5cGUgdHlwZTsKK30gVm9pY2VDaG9pY2U7CisKKyNkZWZpbmUgR0VORVJJQ19WT0lDRV9MQU5HVUFHRSBOT0RFRklORURDT0RFU0VUCisjZGVmaW5lIEdFTkVSSUNfVk9JQ0UodCxuKSB7IC5uYW1lPSNuLCAubGFuZ3VhZ2U9R0VORVJJQ19WT0lDRV9MQU5HVUFHRSwgLnR5cGU9Vk9JQ0VfVFlQRV8jI3QgfQorCitzdGF0aWMgY29uc3QgVm9pY2VDaG9pY2Ugdm9pY2VDaG9pY2VzW10gPSB7CisgICBHRU5FUklDX1ZPSUNFKE1BTjEsIG1hbiksCisgICBHRU5FUklDX1ZPSUNFKFdPTUFOMSwgd29tYW4pLAorICAgR0VORVJJQ19WT0lDRShDSElMRDEsIGNoaWxkKSwKKyAgIEdFTkVSSUNfVk9JQ0UoUEFUUklBUkNIMSwgcGF0cmlhcmNoKSwKKyAgIEdFTkVSSUNfVk9JQ0UoTUFUUklBUkNIMSwgbWF0cmlhcmNoKSwKKyAgICNpbmNsdWRlICJ2b2ljZXMuaCIKKyAgIHsgLm5hbWUgPSBOVUxMIH0KK307CisKK3N0YXRpYyBpbnQKK2lzR2VuZXJpY1ZvaWNlIChjb25zdCBWb2ljZUNob2ljZSAqdm9pY2UpIHsKKyAgIHJldHVybiB2b2ljZS0+bGFuZ3VhZ2UgPT0gR0VORVJJQ19WT0lDRV9MQU5HVUFHRTsKK30KKworc3RydWN0IFNwZWVjaERhdGFTdHJ1Y3QgeworICAgc3RydWN0IHsKKyAgICAgIHVpbnQzMl90IGJpbmFyeTsKKyAgICAgIGNoYXIgdGV4dFsyMF07CisgICB9IHZlcnNpb247CisKKyAgIHN0cnVjdCB7CisgICAgICBFQ0lIYW5kIGhhbmRsZTsKKyAgICAgIHVuc2lnbmVkIHVzZVNTTUw6MTsKKyAgIH0gZWNpOworCisgICBzdHJ1Y3QgeworICAgICAgY29uc3QgTGFuZ3VhZ2VDaG9pY2UgKmxhbmd1YWdlOworICAgICAgY29uc3QgVm9pY2VDaG9pY2UgKnZvaWNlOworICAgfSBzZXR0aW5nOworCisgICBzdHJ1Y3QgeworICAgICAgc2hvcnQgKmJ1ZmZlcjsKKyAgICAgIEZJTEUgKnN0cmVhbTsKKyAgICAgIGNoYXIgKmNvbW1hbmQ7CisgICB9IHBjbTsKKworICAgc3RydWN0IHsKKyAgICAgIGNoYXIgKmJ1ZmZlcjsKKyAgICAgIHNpemVfdCBzaXplOworICAgfSBzYXk7CisKKyAgIHN0cnVjdCB7CisgICAgICBpbnQgdW5pdFR5cGU7CisgICAgICBpbnQgaW5wdXRUeXBlOworICAgfSBjdXJyZW50OworCisjaWZkZWYgSUNPTlZfTlVMTAorICAgc3RydWN0IHsKKyAgICAgIGljb252X3QgaGFuZGxlOworICAgfSBpY29udjsKKyNlbmRpZiAvKiBJQ09OVl9OVUxMICovCit9OworCitzdGF0aWMgdm9pZAorc2F2ZUxhbmd1YWdlU2V0dGluZyAoU3BlZWNoU3ludGhlc2l6ZXIgKnNwaywgaW50IHNldHRpbmcpIHsKKyAgIHNway0+ZHJpdmVyLmRhdGEtPnNldHRpbmcubGFuZ3VhZ2UgPSAmbGFuZ3VhZ2VDaG9pY2VzW3NldHRpbmddOworfQorCitzdGF0aWMgdm9pZAorc2F2ZVZvaWNlU2V0dGluZyAoU3BlZWNoU3ludGhlc2l6ZXIgKnNwaywgaW50IHNldHRpbmcpIHsKKyAgIHNway0+ZHJpdmVyLmRhdGEtPnNldHRpbmcudm9pY2UgPSAmdm9pY2VDaG9pY2VzW3NldHRpbmddOworfQorCitzdGF0aWMgdm9pZAorcmVwb3J0RXJyb3IgKFNwZWVjaFN5bnRoZXNpemVyICpzcGssIGNvbnN0IGNoYXIgKnJvdXRpbmUpIHsKKyAgIGludCBzdGF0dXMgPSBlY2lQcm9nU3RhdHVzKHNway0+ZHJpdmVyLmRhdGEtPmVjaS5oYW5kbGUpOworICAgY2hhciBtZXNzYWdlWzEwMF07CisgICBlY2lFcnJvck1lc3NhZ2Uoc3BrLT5kcml2ZXIuZGF0YS0+ZWNpLmhhbmRsZSwgbWVzc2FnZSk7CisgICBsb2dNZXNzYWdlKExPR19FUlIsICIlcyBlcnJvciAlNC40WDogJXMiLCByb3V0aW5lLCBzdGF0dXMsIG1lc3NhZ2UpOworfQorCitzdGF0aWMgdm9pZAorcmVwb3J0U2V0dGluZyAoY29uc3QgY2hhciAqdHlwZSwgY29uc3QgY2hhciAqZGVzY3JpcHRpb24sIGNvbnN0IGNoYXIgKnNldHRpbmcsIGNvbnN0IGNoYXIgKnVuaXQpIHsKKyAgIGlmICghdW5pdCkgdW5pdCA9ICIiOworICAgbG9nTWVzc2FnZShMT0dfREVCVUcsICIlcyBzZXR0aW5nOiAlcyA9ICVzJXMiLCB0eXBlLCBkZXNjcmlwdGlvbiwgc2V0dGluZywgdW5pdCk7Cit9CisKK3N0YXRpYyB2b2lkCityZXBvcnRQYXJhbWV0ZXIgKGNvbnN0IGNoYXIgKnR5cGUsIGNvbnN0IGNoYXIgKmRlc2NyaXB0aW9uLCBpbnQgc2V0dGluZywgY29uc3Qgdm9pZCAqY2hvaWNlcywgc2l6ZV90IHNpemUsIGNvbnN0IGNoYXIgKnVuaXQpIHsKKyAgIGNoYXIgYnVmZmVyWzBYMTBdOworICAgY29uc3QgY2hhciAqdmFsdWUgPSBidWZmZXI7CisKKyAgIGlmIChzZXR0aW5nID09IC0xKSB7CisgICAgICB2YWx1ZSA9ICJ1bmtub3duIjsKKyAgIH0gZWxzZSBpZiAoY2hvaWNlcykgeworICAgICAgY29uc3Qgdm9pZCAqY2hvaWNlID0gY2hvaWNlczsKKworICAgICAgd2hpbGUgKDEpIHsKKyAgICAgICAgIHR5cGVkZWYgc3RydWN0IHsKKyAgICAgICAgICAgIGNvbnN0IGNoYXIgKm5hbWU7CisgICAgICAgICB9IEVudHJ5OworCisgICAgICAgICBjb25zdCBFbnRyeSAqZW50cnkgPSBjaG9pY2U7CisgICAgICAgICBjb25zdCBjaGFyICpuYW1lID0gZW50cnktPm5hbWU7CisgICAgICAgICBpZiAoIW5hbWUpIGJyZWFrOworICAgICAgICAgaW50IGluZGV4ID0gKGNob2ljZSAtIGNob2ljZXMpIC8gc2l6ZTsKKworICAgICAgICAgaWYgKHNldHRpbmcgPT0gaW5kZXgpIHsKKyAgICAgICAgICAgIHZhbHVlID0gbmFtZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgfQorCisgICAgICAgICBjaG9pY2UgKz0gc2l6ZTsKKyAgICAgIH0KKyAgIH0KKworICAgaWYgKHZhbHVlID09IGJ1ZmZlcikgc25wcmludGYoYnVmZmVyLCBzaXplb2YoYnVmZmVyKSwgIiVkIiwgc2V0dGluZyk7CisgICByZXBvcnRTZXR0aW5nKHR5cGUsIGRlc2NyaXB0aW9uLCB2YWx1ZSwgdW5pdCk7Cit9CisKK3N0YXRpYyBpbnQKK2dldEVudmlyb25tZW50UGFyYW1ldGVyIChTcGVlY2hTeW50aGVzaXplciAqc3BrLCBlbnVtIEVDSVBhcmFtIHBhcmFtZXRlcikgeworICAgcmV0dXJuIGVjaUdldFBhcmFtKHNway0+ZHJpdmVyLmRhdGEtPmVjaS5oYW5kbGUsIHBhcmFtZXRlcik7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICoKK2dldEVudmlyb25tZW50UGFyYW1ldGVyVW5pdCAoZW51bSBFQ0lQYXJhbSBwYXJhbWV0ZXIpIHsKKyAgIHN3aXRjaCAocGFyYW1ldGVyKSB7CisgICAgICBkZWZhdWx0OgorICAgICAgICAgcmV0dXJuICIiOworICAgfQorfQorCitzdGF0aWMgdm9pZAorcmVwb3J0RW52aXJvbm1lbnRQYXJhbWV0ZXIgKFNwZWVjaFN5bnRoZXNpemVyICpzcGssIGNvbnN0IGNoYXIgKmRlc2NyaXB0aW9uLCBlbnVtIEVDSVBhcmFtIHBhcmFtZXRlciwgY29uc3Qgdm9pZCAqY2hvaWNlcywgc2l6ZV90IHNpemUpIHsKKyAgIGludCBzZXR0aW5nID0gZ2V0RW52aXJvbm1lbnRQYXJhbWV0ZXIoc3BrLCBwYXJhbWV0ZXIpOworICAgcmVwb3J0UGFyYW1ldGVyKCJlbnZpcm9ubWVudCIsIGRlc2NyaXB0aW9uLCBzZXR0aW5nLCBjaG9pY2VzLCBzaXplLCBnZXRFbnZpcm9ubWVudFBhcmFtZXRlclVuaXQocGFyYW1ldGVyKSk7Cit9CisKK3N0YXRpYyBpbnQKK3NldEVudmlyb25tZW50UGFyYW1ldGVyIChTcGVlY2hTeW50aGVzaXplciAqc3BrLCBjb25zdCBjaGFyICpkZXNjcmlwdGlvbiwgZW51bSBFQ0lQYXJhbSBwYXJhbWV0ZXIsIGludCBzZXR0aW5nKSB7CisgICBsb2dNZXNzYWdlKExPR19DQVRFR09SWShTUEVFQ0hfRFJJVkVSKSwgInNldCBlbnZpcm9ubWVudCBwYXJhbWV0ZXI6ICVzOiAlZD0lZCIsIGRlc2NyaXB0aW9uLCBwYXJhbWV0ZXIsIHNldHRpbmcpOworICAgcmV0dXJuIGVjaVNldFBhcmFtKHNway0+ZHJpdmVyLmRhdGEtPmVjaS5oYW5kbGUsIHBhcmFtZXRlciwgc2V0dGluZykgPj0gMDsKK30KKworc3RhdGljIGludAorY2hvaWNlRW52aXJvbm1lbnRQYXJhbWV0ZXIgKFNwZWVjaFN5bnRoZXNpemVyICpzcGssIGNvbnN0IGNoYXIgKmRlc2NyaXB0aW9uLCBjb25zdCBjaGFyICp2YWx1ZSwgZW51bSBFQ0lQYXJhbSBwYXJhbWV0ZXIsIGNvbnN0IHZvaWQgKmNob2ljZXMsIHNpemVfdCBzaXplLCBTYXZlU2V0dGluZ0Z1bmN0aW9uICpzYXZlKSB7CisgICBpbnQgb2sgPSAhKnZhbHVlOworCisgICBpZiAoIW9rKSB7CisgICAgICB1bnNpZ25lZCBpbnQgc2V0dGluZzsKKworICAgICAgaWYgKHZhbGlkYXRlQ2hvaWNlRXgoJnNldHRpbmcsIHZhbHVlLCBjaG9pY2VzLCBzaXplKSkgeworICAgICAgICAgaWYgKHNhdmUpIHsKKyAgICAgICAgICAgIHNhdmUoc3BrLCBzZXR0aW5nKTsKKyAgICAgICAgICAgIG9rID0gMTsKKyAgICAgICAgIH0gZWxzZSBpZiAoc2V0RW52aXJvbm1lbnRQYXJhbWV0ZXIoc3BrLCBkZXNjcmlwdGlvbiwgcGFyYW1ldGVyLCBzZXR0aW5nKSkgeworICAgICAgICAgICAgb2sgPSAxOworICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGxvZ01lc3NhZ2UoTE9HX1dBUk5JTkcsICIlcyBub3Qgc3VwcG9ydGVkOiAlcyIsIGRlc2NyaXB0aW9uLCB2YWx1ZSk7CisgICAgICAgICB9CisgICAgICB9IGVsc2UgeworICAgICAgICAgbG9nTWVzc2FnZShMT0dfV0FSTklORywgImludmFsaWQgJXMgc2V0dGluZzogJXMiLCBkZXNjcmlwdGlvbiwgdmFsdWUpOworICAgICAgfQorICAgfQorCisgICBpZiAoIXNhdmUpIHJlcG9ydEVudmlyb25tZW50UGFyYW1ldGVyKHNwaywgZGVzY3JpcHRpb24sIHBhcmFtZXRlciwgY2hvaWNlcywgc2l6ZSk7CisgICByZXR1cm4gb2s7Cit9CisKK3N0YXRpYyBpbnQKK3NldFVuaXRUeXBlIChTcGVlY2hTeW50aGVzaXplciAqc3BrLCBpbnQgbmV3VW5pdHMpIHsKKyAgIGlmIChuZXdVbml0cyAhPSBzcGstPmRyaXZlci5kYXRhLT5jdXJyZW50LnVuaXRUeXBlKSB7CisgICAgICBpZiAoIXNldEVudmlyb25tZW50UGFyYW1ldGVyKHNwaywgInJlYWwgd29ybGQgdW5pdHMiLCBlY2lSZWFsV29ybGRVbml0cywgbmV3VW5pdHMpKSByZXR1cm4gMDsKKyAgICAgIHNway0+ZHJpdmVyLmRhdGEtPmN1cnJlbnQudW5pdFR5cGUgPSBuZXdVbml0czsKKyAgIH0KKworICAgcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQKK3VzZUludGVybmFsVW5pdHMgKFNwZWVjaFN5bnRoZXNpemVyICpzcGspIHsKKyAgIHJldHVybiBzZXRVbml0VHlwZShzcGssIDApOworfQorCitzdGF0aWMgaW50Cit1c2VFeHRlcm5hbFVuaXRzIChTcGVlY2hTeW50aGVzaXplciAqc3BrKSB7CisgICByZXR1cm4gc2V0VW5pdFR5cGUoc3BrLCAxKTsKK30KKworc3RhdGljIGludAordXNlUGFyYW1ldGVyVW5pdCAoU3BlZWNoU3ludGhlc2l6ZXIgKnNwaywgZW51bSBFQ0lWb2ljZVBhcmFtIHBhcmFtZXRlcikgeworICAgc3dpdGNoIChwYXJhbWV0ZXIpIHsKKyAgICAgIGNhc2UgZWNpVm9sdW1lOgorICAgICAgICAgaWYgKCF1c2VJbnRlcm5hbFVuaXRzKHNwaykpIHJldHVybiAwOworICAgICAgICAgYnJlYWs7CisKKyAgICAgIGNhc2UgZWNpUGl0Y2hCYXNlbGluZToKKyAgICAgIGNhc2UgZWNpU3BlZWQ6CisgICAgICAgICBpZiAoIXVzZUV4dGVybmFsVW5pdHMoc3BrKSkgcmV0dXJuIDA7CisgICAgICAgICBicmVhazsKKworICAgICAgZGVmYXVsdDoKKyAgICAgICAgIGJyZWFrOworICAgfQorCisgICByZXR1cm4gMTsKK30KKworc3RhdGljIGludAorZ2V0Vm9pY2VQYXJhbWV0ZXIgKFNwZWVjaFN5bnRoZXNpemVyICpzcGssIGVudW0gRUNJVm9pY2VQYXJhbSBwYXJhbWV0ZXIpIHsKKyAgIGlmICghdXNlUGFyYW1ldGVyVW5pdChzcGssIHBhcmFtZXRlcikpIHJldHVybiAwOworICAgcmV0dXJuIGVjaUdldFZvaWNlUGFyYW0oc3BrLT5kcml2ZXIuZGF0YS0+ZWNpLmhhbmRsZSwgVk9JQ0VfVFlQRV9DVVJSRU5ULCBwYXJhbWV0ZXIpOworfQorCitzdGF0aWMgY29uc3QgY2hhciAqCitnZXRWb2ljZVBhcmFtZXRlclVuaXQgKGVudW0gRUNJVm9pY2VQYXJhbSBwYXJhbWV0ZXIpIHsKKyAgIHN3aXRjaCAocGFyYW1ldGVyKSB7CisgICAgICBjYXNlIGVjaVZvbHVtZToKKyAgICAgICAgIHJldHVybiAiJSI7CisKKyAgICAgIGNhc2UgZWNpUGl0Y2hCYXNlbGluZToKKyAgICAgICAgIHJldHVybiAiSHoiOworCisgICAgICBjYXNlIGVjaVNwZWVkOgorICAgICAgICAgcmV0dXJuICJ3cG0iOworCisgICAgICBkZWZhdWx0OgorICAgICAgICAgcmV0dXJuICIiOworICAgfQorfQorCitzdGF0aWMgdm9pZAorcmVwb3J0Vm9pY2VQYXJhbWV0ZXIgKFNwZWVjaFN5bnRoZXNpemVyICpzcGssIGNvbnN0IGNoYXIgKmRlc2NyaXB0aW9uLCBlbnVtIEVDSVZvaWNlUGFyYW0gcGFyYW1ldGVyLCBjb25zdCBjaGFyICpjb25zdCAqY2hvaWNlcykgeworICAgcmVwb3J0UGFyYW1ldGVyKCJ2b2ljZSIsIGRlc2NyaXB0aW9uLCBnZXRWb2ljZVBhcmFtZXRlcihzcGssIHBhcmFtZXRlciksIGNob2ljZXMsIHNpemVvZigqY2hvaWNlcyksIGdldFZvaWNlUGFyYW1ldGVyVW5pdChwYXJhbWV0ZXIpKTsKK30KKworc3RhdGljIGludAorc2V0Vm9pY2VQYXJhbWV0ZXIgKFNwZWVjaFN5bnRoZXNpemVyICpzcGssIGNvbnN0IGNoYXIgKmRlc2NyaXB0aW9uLCBlbnVtIEVDSVZvaWNlUGFyYW0gcGFyYW1ldGVyLCBpbnQgc2V0dGluZykgeworICAgaWYgKCF1c2VQYXJhbWV0ZXJVbml0KHNwaywgcGFyYW1ldGVyKSkgcmV0dXJuIDA7CisgICBsb2dNZXNzYWdlKExPR19DQVRFR09SWShTUEVFQ0hfRFJJVkVSKSwgInNldCB2b2ljZSBwYXJhbWV0ZXI6ICVzOiAlZD0lZCVzIiwgZGVzY3JpcHRpb24sIHBhcmFtZXRlciwgc2V0dGluZywgZ2V0Vm9pY2VQYXJhbWV0ZXJVbml0KHBhcmFtZXRlcikpOworICAgcmV0dXJuIGVjaVNldFZvaWNlUGFyYW0oc3BrLT5kcml2ZXIuZGF0YS0+ZWNpLmhhbmRsZSwgVk9JQ0VfVFlQRV9DVVJSRU5ULCBwYXJhbWV0ZXIsIHNldHRpbmcpID49IDA7Cit9CisKK3N0YXRpYyBpbnQKK2Nob2ljZVZvaWNlUGFyYW1ldGVyIChTcGVlY2hTeW50aGVzaXplciAqc3BrLCBjb25zdCBjaGFyICpkZXNjcmlwdGlvbiwgY29uc3QgY2hhciAqdmFsdWUsIGVudW0gRUNJVm9pY2VQYXJhbSBwYXJhbWV0ZXIsIGNvbnN0IGNoYXIgKmNvbnN0ICpjaG9pY2VzKSB7CisgICBpbnQgb2sgPSAhKnZhbHVlOworCisgICBpZiAoIW9rKSB7CisgICAgICB1bnNpZ25lZCBpbnQgc2V0dGluZzsKKworICAgICAgaWYgKHZhbGlkYXRlQ2hvaWNlKCZzZXR0aW5nLCB2YWx1ZSwgY2hvaWNlcykpIHsKKyAgICAgICAgIGlmIChzZXRWb2ljZVBhcmFtZXRlcihzcGssIGRlc2NyaXB0aW9uLCBwYXJhbWV0ZXIsIHNldHRpbmcpKSB7CisgICAgICAgICAgICBvayA9IDE7CisgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgbG9nTWVzc2FnZShMT0dfV0FSTklORywgIiVzIG5vdCBzdXBwb3J0ZWQ6ICVzIiwgZGVzY3JpcHRpb24sIHZhbHVlKTsKKyAgICAgICAgIH0KKyAgICAgIH0gZWxzZSB7CisgICAgICAgICBsb2dNZXNzYWdlKExPR19XQVJOSU5HLCAiaW52YWxpZCAlcyBzZXR0aW5nOiAlcyIsIGRlc2NyaXB0aW9uLCB2YWx1ZSk7CisgICAgICB9CisgICB9CisKKyAgIHJlcG9ydFZvaWNlUGFyYW1ldGVyKHNwaywgZGVzY3JpcHRpb24sIHBhcmFtZXRlciwgY2hvaWNlcyk7CisgICByZXR1cm4gb2s7Cit9CisKK3N0YXRpYyBpbnQKK3JhbmdlVm9pY2VQYXJhbWV0ZXIgKFNwZWVjaFN5bnRoZXNpemVyICpzcGssIGNvbnN0IGNoYXIgKmRlc2NyaXB0aW9uLCBjb25zdCBjaGFyICp2YWx1ZSwgZW51bSBFQ0lWb2ljZVBhcmFtIHBhcmFtZXRlciwgaW50IG1pbmltdW0sIGludCBtYXhpbXVtKSB7CisgICBpbnQgb2sgPSAwOworCisgICBpZiAoKnZhbHVlKSB7CisgICAgICBpbnQgc2V0dGluZzsKKworICAgICAgaWYgKHZhbGlkYXRlSW50ZWdlcigmc2V0dGluZywgdmFsdWUsICZtaW5pbXVtLCAmbWF4aW11bSkpIHsKKyAgICAgICAgIGlmIChzZXRWb2ljZVBhcmFtZXRlcihzcGssIGRlc2NyaXB0aW9uLCBwYXJhbWV0ZXIsIHNldHRpbmcpKSB7CisgICAgICAgICAgICBvayA9IDE7CisgICAgICAgICB9CisgICAgICB9IGVsc2UgeworICAgICAgICAgbG9nTWVzc2FnZShMT0dfV0FSTklORywgImludmFsaWQgJXMgc2V0dGluZzogJXMiLCBkZXNjcmlwdGlvbiwgdmFsdWUpOworICAgICAgfQorICAgfQorCisgICByZXBvcnRWb2ljZVBhcmFtZXRlcihzcGssIGRlc2NyaXB0aW9uLCBwYXJhbWV0ZXIsIE5VTEwpOworICAgcmV0dXJuIG9rOworfQorCitzdGF0aWMgdm9pZAorc3BrX3NldFZvbHVtZSAoU3BlZWNoU3ludGhlc2l6ZXIgKnNwaywgdW5zaWduZWQgY2hhciBzZXR0aW5nKSB7CisgICBzZXRWb2ljZVBhcmFtZXRlcihzcGssICJ2b2x1bWUiLCBlY2lWb2x1bWUsIGdldEludGVnZXJTcGVlY2hWb2x1bWUoc2V0dGluZywgMTAwKSk7Cit9CisKK3N0YXRpYyB2b2lkCitzcGtfc2V0UmF0ZSAoU3BlZWNoU3ludGhlc2l6ZXIgKnNwaywgdW5zaWduZWQgY2hhciBzZXR0aW5nKSB7CisgICBzZXRWb2ljZVBhcmFtZXRlcihzcGssICJyYXRlIiwgZWNpU3BlZWQsIChpbnQpKGdldEZsb2F0U3BlZWNoUmF0ZShzZXR0aW5nKSAqIDIxMC4wKSk7Cit9CisKK3N0YXRpYyBjb25zdCBMYW5ndWFnZUNob2ljZSAqCitmaW5kTGFuZ3VhZ2UgKGludCBpZGVudGlmaWVyKSB7CisgICBjb25zdCBMYW5ndWFnZUNob2ljZSAqY2hvaWNlID0gbGFuZ3VhZ2VDaG9pY2VzOworCisgICB3aGlsZSAoY2hvaWNlLT5uYW1lKSB7CisgICAgICBpZiAoY2hvaWNlLT5pZGVudGlmaWVyID09IGlkZW50aWZpZXIpIHJldHVybiBjaG9pY2U7CisgICAgICBjaG9pY2UgKz0gMTsKKyAgIH0KKworICAgbG9nTWVzc2FnZShMT0dfV0FSTklORywgImxhbmd1YWdlIGlkZW50aWZpZXIgbm90IGRlZmluZWQ6IDBYJTA4WCIsIGlkZW50aWZpZXIpOworICAgcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBjb25zdCBMYW5ndWFnZUNob2ljZSAqCitnZXRMYW5ndWFnZSAoU3BlZWNoU3ludGhlc2l6ZXIgKnNwaykgeworICAgaW50IGlkZW50aWZpZXIgPSBnZXRFbnZpcm9ubWVudFBhcmFtZXRlcihzcGssIGVjaUxhbmd1YWdlRGlhbGVjdCk7CisgICByZXR1cm4gZmluZExhbmd1YWdlKGlkZW50aWZpZXIpOworfQorCitzdGF0aWMgdm9pZAorc3RvcFNwZWVjaCAoU3BlZWNoU3ludGhlc2l6ZXIgKnNwaykgeworICAgbG9nTWVzc2FnZShMT0dfQ0FURUdPUlkoU1BFRUNIX0RSSVZFUiksICJzdG9wIik7CisKKyAgIGlmIChlY2lTdG9wKHNway0+ZHJpdmVyLmRhdGEtPmVjaS5oYW5kbGUpKSB7CisgICB9IGVsc2UgeworICAgICAgcmVwb3J0RXJyb3Ioc3BrLCAiZWNpU3RvcCIpOworICAgfQorfQorCitzdGF0aWMgdm9pZAorc3BrX211dGUgKFNwZWVjaFN5bnRoZXNpemVyICpzcGspIHsKKyAgIHN0b3BTcGVlY2goc3BrKTsKK30KKworc3RhdGljIGludAorcGNtTWFrZUNvbW1hbmQgKFNwZWVjaFN5bnRoZXNpemVyICpzcGspIHsKKyAgIGludCByYXRlID0gZ2V0RW52aXJvbm1lbnRQYXJhbWV0ZXIoc3BrLCBlY2lTYW1wbGVSYXRlKTsKKyAgIGNoYXIgYnVmZmVyWzBYMTAwXTsKKworICAgc25wcmludGYoCisgICAgICBidWZmZXIsIHNpemVvZihidWZmZXIpLAorICAgICAgInNveCAtcSAtdCByYXcgLWMgMSAtYiAlIiBQUklzaXplICIgLWUgc2lnbmVkLWludGVnZXIgLXIgJWQgLSAtZCIsCisgICAgICAoc2l6ZW9mKCpzcGstPmRyaXZlci5kYXRhLT5wY20uYnVmZmVyKSAqIDgpLCBxdWFsaXR5Q2hvaWNlc1tyYXRlXS5yYXRlCisgICApOworCisgICBsb2dNZXNzYWdlKExPR19DQVRFR09SWShTUEVFQ0hfRFJJVkVSKSwgIlBDTSBjb21tYW5kOiAlcyIsIGJ1ZmZlcik7CisgICBzcGstPmRyaXZlci5kYXRhLT5wY20uY29tbWFuZCA9IHN0cmR1cChidWZmZXIpOworICAgaWYgKHNway0+ZHJpdmVyLmRhdGEtPnBjbS5jb21tYW5kKSByZXR1cm4gMTsKKyAgIGxvZ01hbGxvY0Vycm9yKCk7CisgICByZXR1cm4gMDsKK30KKworc3RhdGljIGludAorcGNtT3BlblN0cmVhbSAoU3BlZWNoU3ludGhlc2l6ZXIgKnNwaykgeworICAgaWYgKCFzcGstPmRyaXZlci5kYXRhLT5wY20uc3RyZWFtKSB7CisgICAgICBpZiAoIXNway0+ZHJpdmVyLmRhdGEtPnBjbS5jb21tYW5kKSB7CisgICAgICAgICBpZiAoIXBjbU1ha2VDb21tYW5kKHNwaykpIHsKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgfQorICAgICAgfQorCisgICAgICBpZiAoIShzcGstPmRyaXZlci5kYXRhLT5wY20uc3RyZWFtID0gcG9wZW4oc3BrLT5kcml2ZXIuZGF0YS0+cGNtLmNvbW1hbmQsICJ3IikpKSB7CisgICAgICAgICBsb2dNZXNzYWdlKExPR19XQVJOSU5HLCAiY2FuJ3Qgc3RhcnQgY29tbWFuZDogJXMiLCBzdHJlcnJvcihlcnJubykpOworICAgICAgICAgcmV0dXJuIDA7CisgICAgICB9CisKKyAgICAgIHNldHZidWYoc3BrLT5kcml2ZXIuZGF0YS0+cGNtLnN0cmVhbSwgTlVMTCwgX0lPTkJGLCAwKTsKKyAgIH0KKworICAgcmV0dXJuIDE7Cit9CisKK3N0YXRpYyB2b2lkCitwY21DbG9zZVN0cmVhbSAoU3BlZWNoU3ludGhlc2l6ZXIgKnNwaykgeworICAgaWYgKHNway0+ZHJpdmVyLmRhdGEtPnBjbS5zdHJlYW0pIHsKKyAgICAgIHBjbG9zZShzcGstPmRyaXZlci5kYXRhLT5wY20uc3RyZWFtKTsKKyAgICAgIHNway0+ZHJpdmVyLmRhdGEtPnBjbS5zdHJlYW0gPSBOVUxMOworICAgfQorfQorCitzdGF0aWMgZW51bSBFQ0lDYWxsYmFja1JldHVybgorY2xpZW50Q2FsbGJhY2sgKEVDSUhhbmQgZWNpLCBlbnVtIEVDSU1lc3NhZ2UgbWVzc2FnZSwgbG9uZyBwYXJhbWV0ZXIsIHZvaWQgKmRhdGEpIHsKKyAgIFNwZWVjaFN5bnRoZXNpemVyICpzcGsgPSBkYXRhOworCisgICBzd2l0Y2ggKG1lc3NhZ2UpIHsKKyAgICAgIGNhc2UgZWNpV2F2ZWZvcm1CdWZmZXI6CisgICAgICAgICBsb2dNZXNzYWdlKExPR19DQVRFR09SWShTUEVFQ0hfRFJJVkVSKSwgIndyaXRlIHNhbXBsZXM6ICVsZCIsIHBhcmFtZXRlcik7CisgICAgICAgICBmd3JpdGUoc3BrLT5kcml2ZXIuZGF0YS0+cGNtLmJ1ZmZlciwgc2l6ZW9mKCpzcGstPmRyaXZlci5kYXRhLT5wY20uYnVmZmVyKSwgcGFyYW1ldGVyLCBzcGstPmRyaXZlci5kYXRhLT5wY20uc3RyZWFtKTsKKyAgICAgICAgIGlmIChmZXJyb3Ioc3BrLT5kcml2ZXIuZGF0YS0+cGNtLnN0cmVhbSkpIHJldHVybiBlY2lEYXRhQWJvcnQ7CisgICAgICAgICBicmVhazsKKworICAgICAgY2FzZSBlY2lJbmRleFJlcGx5OgorICAgICAgICAgbG9nTWVzc2FnZShMT0dfQ0FURUdPUlkoU1BFRUNIX0RSSVZFUiksICJpbmRleCByZXBseTogJWxkIiwgcGFyYW1ldGVyKTsKKyAgICAgICAgIHRlbGxTcGVlY2hMb2NhdGlvbihzcGssIHBhcmFtZXRlcik7CisgICAgICAgICBicmVhazsKKworICAgICAgZGVmYXVsdDoKKyAgICAgICAgIGJyZWFrOworICAgfQorCisgICByZXR1cm4gZWNpRGF0YVByb2Nlc3NlZDsKK30KKworc3RhdGljIGludAorYWRkVGV4dCAoU3BlZWNoU3ludGhlc2l6ZXIgKnNwaywgY29uc3QgY2hhciAqdGV4dCkgeworICAgbG9nTWVzc2FnZShMT0dfQ0FURUdPUlkoU1BFRUNIX0RSSVZFUiksICJhZGQgdGV4dDogXCIlc1wiIiwgdGV4dCk7CisgICBpZiAoZWNpQWRkVGV4dChzcGstPmRyaXZlci5kYXRhLT5lY2kuaGFuZGxlLCB0ZXh0KSkgcmV0dXJuIDE7CisgICByZXBvcnRFcnJvcihzcGssICJlY2lBZGRUZXh0Iik7CisgICByZXR1cm4gMDsKK30KKworc3RhdGljIGludAoraW5zZXJ0SW5kZXggKFNwZWVjaFN5bnRoZXNpemVyICpzcGssIGludCBpbmRleCkgeworICAgbG9nTWVzc2FnZShMT0dfQ0FURUdPUlkoU1BFRUNIX0RSSVZFUiksICJpbnNlcnQgaW5kZXg6ICVkIiwgaW5kZXgpOworICAgaWYgKGVjaUluc2VydEluZGV4KHNway0+ZHJpdmVyLmRhdGEtPmVjaS5oYW5kbGUsIGluZGV4KSkgcmV0dXJuIDE7CisgICByZXBvcnRFcnJvcihzcGssICJlY2lJbnNlcnRJbmRleCIpOworICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK3NldElucHV0VHlwZSAoU3BlZWNoU3ludGhlc2l6ZXIgKnNwaywgaW50IG5ld0lucHV0VHlwZSkgeworICAgaWYgKG5ld0lucHV0VHlwZSAhPSBzcGstPmRyaXZlci5kYXRhLT5jdXJyZW50LmlucHV0VHlwZSkgeworICAgICAgaWYgKCFzZXRFbnZpcm9ubWVudFBhcmFtZXRlcihzcGssICJpbnB1dCB0eXBlIiwgZWNpSW5wdXRUeXBlLCBuZXdJbnB1dFR5cGUpKSByZXR1cm4gMDsKKyAgICAgIHNway0+ZHJpdmVyLmRhdGEtPmN1cnJlbnQuaW5wdXRUeXBlID0gbmV3SW5wdXRUeXBlOworICAgfQorCisgICByZXR1cm4gMTsKK30KKworc3RhdGljIGludAorZGlzYWJsZUFubm90YXRpb25zIChTcGVlY2hTeW50aGVzaXplciAqc3BrKSB7CisgICByZXR1cm4gc2V0SW5wdXRUeXBlKHNwaywgMCk7Cit9CisKK3N0YXRpYyBpbnQKK2VuYWJsZUFubm90YXRpb25zIChTcGVlY2hTeW50aGVzaXplciAqc3BrKSB7CisgICByZXR1cm4gc2V0SW5wdXRUeXBlKHNwaywgMSk7Cit9CisKK3N0YXRpYyBpbnQKK3dyaXRlQW5ub3RhdGlvbiAoU3BlZWNoU3ludGhlc2l6ZXIgKnNwaywgY29uc3QgY2hhciAqYW5ub3RhdGlvbikgeworICAgaWYgKCFlbmFibGVBbm5vdGF0aW9ucyhzcGspKSByZXR1cm4gMDsKKworICAgY2hhciB0ZXh0WzBYMTAwXTsKKyAgIHNucHJpbnRmKHRleHQsIHNpemVvZih0ZXh0KSwgIiBgJXMgIiwgYW5ub3RhdGlvbik7CisgICByZXR1cm4gYWRkVGV4dChzcGssIHRleHQpOworfQorCisjaWZkZWYgSUNPTlZfTlVMTAorc3RhdGljIGludAorcHJlcGFyZVRleHRDb252ZXJzaW9uIChTcGVlY2hTeW50aGVzaXplciAqc3BrKSB7CisgICBzcGstPmRyaXZlci5kYXRhLT5pY29udi5oYW5kbGUgPSBJQ09OVl9OVUxMOworCisgICBjb25zdCBMYW5ndWFnZUNob2ljZSAqY2hvaWNlID0gZ2V0TGFuZ3VhZ2Uoc3BrKTsKKyAgIGlmICghY2hvaWNlKSByZXR1cm4gMDsKKyAgIGljb252X3QgKmhhbmRsZSA9IGljb252X29wZW4oY2hvaWNlLT5lbmNvZGluZywgIlVURi04Iik7CisKKyAgIGlmIChoYW5kbGUgPT0gSUNPTlZfTlVMTCkgeworICAgICAgbG9nTWVzc2FnZShMT0dfV0FSTklORywgImNoYXJhY3RlciBlbmNvZGluZyBub3Qgc3VwcG9ydGVkOiAlczogJXMiLCBjaG9pY2UtPmVuY29kaW5nLCBzdHJlcnJvcihlcnJubykpOworICAgICAgcmV0dXJuIDA7CisgICB9CisKKyAgIHNway0+ZHJpdmVyLmRhdGEtPmljb252LmhhbmRsZSA9IGhhbmRsZTsKKyAgIGxvZ01lc3NhZ2UoTE9HX0NBVEVHT1JZKFNQRUVDSF9EUklWRVIpLCAidXNpbmcgY2hhcmFjdGVyIGVuY29kaW5nOiAlcyIsIGNob2ljZS0+ZW5jb2RpbmcpOworICAgcmV0dXJuIDE7Cit9CisjZW5kaWYgLyogSUNPTlZfTlVMTCAqLworCitzdGF0aWMgaW50CitlbnN1cmVTYXlCdWZmZXJTaXplIChTcGVlY2hTeW50aGVzaXplciAqc3BrLCBzaXplX3Qgc2l6ZSkgeworICAgaWYgKHNpemUgPiBzcGstPmRyaXZlci5kYXRhLT5zYXkuc2l6ZSkgeworICAgICAgc2l6ZSB8PSAwWEZGOworICAgICAgc2l6ZSArPSAxOworICAgICAgY2hhciAqbmV3QnVmZmVyID0gbWFsbG9jKHNpemUpOworCisgICAgICBpZiAoIW5ld0J1ZmZlcikgeworICAgICAgICAgbG9nU3lzdGVtRXJyb3IoInNwZWVjaCBidWZmZXIgYWxsb2NhdGlvbiIpOworICAgICAgICAgcmV0dXJuIDA7CisgICAgICB9CisKKyAgICAgIGlmIChzcGstPmRyaXZlci5kYXRhLT5zYXkuYnVmZmVyKSBmcmVlKHNway0+ZHJpdmVyLmRhdGEtPnNheS5idWZmZXIpOworICAgICAgc3BrLT5kcml2ZXIuZGF0YS0+c2F5LmJ1ZmZlciA9IG5ld0J1ZmZlcjsKKyAgICAgIHNway0+ZHJpdmVyLmRhdGEtPnNheS5zaXplID0gc2l6ZTsKKyAgIH0KKworICAgcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQKK2FkZENoYXJhY3RlcnMgKFNwZWVjaFN5bnRoZXNpemVyICpzcGssIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZmZlciwgaW50IGZyb20sIGludCB0bykgeworICAgaW50IGxlbmd0aCA9IHRvIC0gZnJvbTsKKyAgIGlmICghbGVuZ3RoKSByZXR1cm4gMTsKKworICAgaWYgKCFlbnN1cmVTYXlCdWZmZXJTaXplKHNwaywgbGVuZ3RoKzEpKSByZXR1cm4gMDsKKyAgIG1lbWNweShzcGstPmRyaXZlci5kYXRhLT5zYXkuYnVmZmVyLCAmYnVmZmVyW2Zyb21dLCBsZW5ndGgpOworICAgc3BrLT5kcml2ZXIuZGF0YS0+c2F5LmJ1ZmZlcltsZW5ndGhdID0gMDsKKyAgIHJldHVybiBhZGRUZXh0KHNwaywgc3BrLT5kcml2ZXIuZGF0YS0+c2F5LmJ1ZmZlcik7Cit9CisKK3N0YXRpYyBpbnQKK2FkZFNlZ21lbnQgKFNwZWVjaFN5bnRoZXNpemVyICpzcGssIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZmZlciwgaW50IGZyb20sIGludCB0bywgY29uc3QgaW50ICppbmRleE1hcCkgeworICAgaWYgKHNway0+ZHJpdmVyLmRhdGEtPmVjaS51c2VTU01MKSB7CisgICAgICBmb3IgKGludCBpbmRleD1mcm9tOyBpbmRleDx0bzsgaW5kZXgrPTEpIHsKKyAgICAgICAgIGNvbnN0IGNoYXIgKmVudGl0eSA9IE5VTEw7CisKKyAgICAgICAgIHN3aXRjaCAoYnVmZmVyW2luZGV4XSkgeworICAgICAgICAgICAgY2FzZSAnPCc6CisgICAgICAgICAgICAgICBlbnRpdHkgPSAibHQiOworICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGNhc2UgJz4nOgorICAgICAgICAgICAgICAgZW50aXR5ID0gImd0IjsKKyAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBjYXNlICcmJzoKKyAgICAgICAgICAgICAgIGVudGl0eSA9ICJhbXAiOworICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGNhc2UgJyInOgorICAgICAgICAgICAgICAgZW50aXR5ID0gInF1b3QiOworICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGNhc2UgJ1wnJzoKKyAgICAgICAgICAgICAgIGVudGl0eSA9ICJhcG9zIjsKKyAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICB9CisKKyAgICAgICAgIGlmICghYWRkQ2hhcmFjdGVycyhzcGssIGJ1ZmZlciwgZnJvbSwgaW5kZXgpKSByZXR1cm4gMDsKKyAgICAgICAgIGZyb20gPSBpbmRleCArIDE7CisKKyAgICAgICAgIHNpemVfdCBsZW5ndGggPSBzdHJsZW4oZW50aXR5KTsKKyAgICAgICAgIGNoYXIgdGV4dFsxICsgbGVuZ3RoICsgMl07CisgICAgICAgICBzbnByaW50Zih0ZXh0LCBzaXplb2YodGV4dCksICImJXM7IiwgZW50aXR5KTsKKyAgICAgICAgIGlmICghYWRkVGV4dChzcGssIHRleHQpKSByZXR1cm4gMDsKKyAgICAgIH0KKworICAgICAgaWYgKCFhZGRDaGFyYWN0ZXJzKHNwaywgYnVmZmVyLCBmcm9tLCB0bykpIHJldHVybiAwOworICAgfSBlbHNlIHsKKyNpZmRlZiBJQ09OVl9OVUxMCisgICAgICBjaGFyICppbnB1dFN0YXJ0ID0gKGNoYXIgKikmYnVmZmVyW2Zyb21dOworICAgICAgc2l6ZV90IGlucHV0TGVmdCA9IHRvIC0gZnJvbTsKKyAgICAgIHNpemVfdCBvdXRwdXRMZWZ0ID0gaW5wdXRMZWZ0ICogMTA7CisgICAgICBjaGFyIG91dHB1dEJ1ZmZlcltvdXRwdXRMZWZ0XTsKKyAgICAgIGNoYXIgKm91dHB1dFN0YXJ0ID0gb3V0cHV0QnVmZmVyOworICAgICAgaW50IHJlc3VsdCA9IGljb252KHNway0+ZHJpdmVyLmRhdGEtPmljb252LmhhbmRsZSwgJmlucHV0U3RhcnQsICZpbnB1dExlZnQsICZvdXRwdXRTdGFydCwgJm91dHB1dExlZnQpOworCisgICAgICBpZiAocmVzdWx0ID09IC0xKSB7CisgICAgICAgICBsb2dTeXN0ZW1FcnJvcigiaWNvbnYiKTsKKyAgICAgICAgIHJldHVybiAwOworICAgICAgfQorCisgICAgICBpZiAoIWFkZENoYXJhY3RlcnMoc3BrLCAodW5zaWduZWQgY2hhciAqKW91dHB1dEJ1ZmZlciwgMCwgKG91dHB1dFN0YXJ0IC0gb3V0cHV0QnVmZmVyKSkpIHJldHVybiAwOworI2Vsc2UgLyogSUNPTlZfTlVMTCAqLworICAgICAgaWYgKCFhZGRDaGFyYWN0ZXJzKHNwaywgYnVmZmVyLCBmcm9tLCB0bykpIHJldHVybiAwOworI2VuZGlmIC8qIElDT05WX05VTEwgKi8KKyAgIH0KKworICAgcmV0dXJuIGluc2VydEluZGV4KHNwaywgaW5kZXhNYXBbdG9dKTsKK30KKworc3RhdGljIGludAorYWRkU2VnbWVudHMgKFNwZWVjaFN5bnRoZXNpemVyICpzcGssIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZmZlciwgc2l6ZV90IGxlbmd0aCwgY29uc3QgaW50ICppbmRleE1hcCkgeworICAgaWYgKHNway0+ZHJpdmVyLmRhdGEtPmVjaS51c2VTU01MICYmICFhZGRUZXh0KHNwaywgIjxzcGVhaz4iKSkgcmV0dXJuIDA7CisKKyAgIGludCB3YXNTcGFjZSA9IDE7CisgICBpbnQgZnJvbSA9IDA7CisgICBpbnQgdG87CisKKyAgIGZvciAodG89MDsgdG88bGVuZ3RoOyB0bys9MSkgeworICAgICAgaW50IGlzU3BhY2UgPSBpc3NwYWNlKGJ1ZmZlclt0b10pPyAxOiAwOworCisgICAgICBpZiAoaXNTcGFjZSAhPSB3YXNTcGFjZSkgeworICAgICAgICAgd2FzU3BhY2UgPSBpc1NwYWNlOworCisgICAgICAgICBpZiAodG8gPiBmcm9tKSB7CisgICAgICAgICAgICBpZiAoIWFkZFNlZ21lbnQoc3BrLCBidWZmZXIsIGZyb20sIHRvLCBpbmRleE1hcCkpIHJldHVybiAwOworICAgICAgICAgICAgZnJvbSA9IHRvOworICAgICAgICAgfQorICAgICAgfQorICAgfQorCisgICBpZiAoIWFkZFNlZ21lbnQoc3BrLCBidWZmZXIsIGZyb20sIHRvLCBpbmRleE1hcCkpIHJldHVybiAwOworICAgaWYgKHNway0+ZHJpdmVyLmRhdGEtPmVjaS51c2VTU01MICYmICFhZGRUZXh0KHNwaywgIjwvc3BlYWs+IikpIHJldHVybiAwOworICAgcmV0dXJuIDE7Cit9CisKK3N0YXRpYyB2b2lkCitzcGtfc2F5IChTcGVlY2hTeW50aGVzaXplciAqc3BrLCBjb25zdCB1bnNpZ25lZCBjaGFyICpidWZmZXIsIHNpemVfdCBsZW5ndGgsIHNpemVfdCBjb3VudCwgY29uc3QgdW5zaWduZWQgY2hhciAqYXR0cmlidXRlcykgeworICAgaW50IG9rID0gMDsKKworICAgaWYgKHBjbU9wZW5TdHJlYW0oc3BrKSkgeworICAgICAgaW50IGluZGV4TWFwW2xlbmd0aCArIDFdOworCisgICAgICB7CisgICAgICAgICBpbnQgZnJvbSA9IDA7CisgICAgICAgICBpbnQgdG8gPSAwOworCisgICAgICAgICB3aGlsZSAoZnJvbSA8IGxlbmd0aCkgeworICAgICAgICAgICAgY2hhciBjaGFyYWN0ZXIgPSBidWZmZXJbZnJvbV07CisgICAgICAgICAgICBpbmRleE1hcFtmcm9tKytdID0gKChjaGFyYWN0ZXIgJiAwWDgwKSAmJiAhKGNoYXJhY3RlciAmIDBYNDApKT8gLTE6IHRvKys7CisgICAgICAgICB9CisKKyAgICAgICAgIGluZGV4TWFwW2Zyb21dID0gdG87CisgICAgICB9CisKKyAgICAgIGlmIChhZGRTZWdtZW50cyhzcGssIGJ1ZmZlciwgbGVuZ3RoLCBpbmRleE1hcCkpIHsKKyAgICAgICAgIGxvZ01lc3NhZ2UoTE9HX0NBVEVHT1JZKFNQRUVDSF9EUklWRVIpLCAic3ludGhlc2l6ZSIpOworCisgICAgICAgICBpZiAoZWNpU3ludGhlc2l6ZShzcGstPmRyaXZlci5kYXRhLT5lY2kuaGFuZGxlKSkgeworICAgICAgICAgICAgbG9nTWVzc2FnZShMT0dfQ0FURUdPUlkoU1BFRUNIX0RSSVZFUiksICJzeW5jaHJvbml6ZSIpOworCisgICAgICAgICAgICBpZiAoZWNpU3luY2hyb25pemUoc3BrLT5kcml2ZXIuZGF0YS0+ZWNpLmhhbmRsZSkpIHsKKyAgICAgICAgICAgICAgIGxvZ01lc3NhZ2UoTE9HX0NBVEVHT1JZKFNQRUVDSF9EUklWRVIpLCAiZmluaXNoZWQiKTsKKyAgICAgICAgICAgICAgIHRlbGxTcGVlY2hGaW5pc2hlZChzcGspOworICAgICAgICAgICAgICAgb2sgPSAxOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgIHJlcG9ydEVycm9yKHNwaywgImVjaVN5bmNocm9uaXplIik7CisgICAgICAgICAgICB9CisgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgcmVwb3J0RXJyb3Ioc3BrLCAiZWNpU3ludGhlc2l6ZSIpOworICAgICAgICAgfQorICAgICAgfQorCisgICAgICBpZiAoIW9rKSBzdG9wU3BlZWNoKHNwayk7CisgICAgICBwY21DbG9zZVN0cmVhbShzcGspOworICAgfQorfQorCitzdGF0aWMgdm9pZAorc2V0TGFuZ3VhZ2VBbmRWb2ljZSAoU3BlZWNoU3ludGhlc2l6ZXIgKnNwaykgeworICAgY29uc3QgTGFuZ3VhZ2VDaG9pY2UgKmxhbmd1YWdlID0gc3BrLT5kcml2ZXIuZGF0YS0+c2V0dGluZy5sYW5ndWFnZTsKKyAgIGNvbnN0IFZvaWNlQ2hvaWNlICp2b2ljZSA9IHNway0+ZHJpdmVyLmRhdGEtPnNldHRpbmcudm9pY2U7CisKKyAgIGlmICh2b2ljZSAmJiAhaXNHZW5lcmljVm9pY2Uodm9pY2UpKSB7CisgICAgICBpZiAoIWxhbmd1YWdlKSB7CisgICAgICAgICBsYW5ndWFnZSA9IGZpbmRMYW5ndWFnZSh2b2ljZS0+bGFuZ3VhZ2UpOworICAgICAgfSBlbHNlIGlmIChsYW5ndWFnZS0+aWRlbnRpZmllciAhPSB2b2ljZS0+bGFuZ3VhZ2UpIHsKKyAgICAgICAgIGxvZ01lc3NhZ2UoTE9HX1dBUk5JTkcsICJ2b2ljZSAlcyBpcyBpbmNvbXBhdGlibGUgd2l0aCBsYW5ndWFnZSAlcyIsIHZvaWNlLT5uYW1lLCBsYW5ndWFnZS0+bmFtZSk7CisgICAgICB9CisgICB9CisKKyAgIGlmIChsYW5ndWFnZSkgeworICAgICAgaWYgKCFzZXRFbnZpcm9ubWVudFBhcmFtZXRlcihzcGssICJsYW5ndWFnZSIsIGVjaUxhbmd1YWdlRGlhbGVjdCwgbGFuZ3VhZ2UtPmlkZW50aWZpZXIpKSB7CisgICAgICAgICBsb2dNZXNzYWdlKExPR19XQVJOSU5HLCAibGFuZ3VhZ2Ugbm90IHN1cHBvcnRlZDogJXMiLCBsYW5ndWFnZS0+bmFtZSk7CisgICAgICB9CisgICB9CisKKyAgIGxhbmd1YWdlID0gZ2V0TGFuZ3VhZ2Uoc3BrKTsKKyAgIHJlcG9ydFNldHRpbmcoImVudmlyb25tZW50IiwgImxhbmd1YWdlIiwgbGFuZ3VhZ2UtPm5hbWUsIE5VTEwpOworCisgICBpZiAodm9pY2UpIHsKKyAgICAgIGxvZ01lc3NhZ2UoTE9HX0NBVEVHT1JZKFNQRUVDSF9EUklWRVIpLCAiY29weSB2b2ljZTogJWQgKCVzKSIsIHZvaWNlLT50eXBlLCB2b2ljZS0+bmFtZSk7CisKKyAgICAgIGlmIChlY2lDb3B5Vm9pY2Uoc3BrLT5kcml2ZXIuZGF0YS0+ZWNpLmhhbmRsZSwgdm9pY2UtPnR5cGUsIFZPSUNFX1RZUEVfQ1VSUkVOVCkpIHsKKyAgICAgICAgIGNvbnN0IGNoYXIgKmRlc2NyaXB0aW9uID0gaXNHZW5lcmljVm9pY2Uodm9pY2UpPyAidHlwZSI6ICJuYW1lIjsKKyAgICAgICAgIHJlcG9ydFNldHRpbmcoInZvaWNlIiwgZGVzY3JpcHRpb24sIHZvaWNlLT5uYW1lLCBOVUxMKTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgICByZXBvcnRFcnJvcihzcGssICJlY2lDb3B5Vm9pY2UiKTsKKyAgICAgIH0KKyAgIH0KK30KKworc3RhdGljIHZvaWQKK3NldFBhcmFtZXRlcnMgKFNwZWVjaFN5bnRoZXNpemVyICpzcGssIGNoYXIgKipwYXJhbWV0ZXJzKSB7CisgICBjaG9pY2VFbnZpcm9ubWVudFBhcmFtZXRlcihzcGssICJxdWFsaXR5IChzYW1wbGUgcmF0ZSkiLCBwYXJhbWV0ZXJzW1BBUk1fUXVhbGl0eV0sIGVjaVNhbXBsZVJhdGUsIHF1YWxpdHlDaG9pY2VzLCBzaXplb2YoKnF1YWxpdHlDaG9pY2VzKSwgTlVMTCk7CisgICBjaG9pY2VFbnZpcm9ubWVudFBhcmFtZXRlcihzcGssICJtb2RlICh0ZXh0IG1vZGUpIiwgcGFyYW1ldGVyc1tQQVJNX01vZGVdLCBlY2lUZXh0TW9kZSwgbW9kZUNob2ljZXMsIHNpemVvZigqbW9kZUNob2ljZXMpLCBOVUxMKTsKKyAgIGNob2ljZUVudmlyb25tZW50UGFyYW1ldGVyKHNwaywgInN5bnRoZXNpemUgKHN5bnRoIG1vZGUpIiwgcGFyYW1ldGVyc1tQQVJNX1N5bnRoZXNpemVdLCBlY2lTeW50aE1vZGUsIHN5bnRoZXNpemVDaG9pY2VzLCBzaXplb2YoKnN5bnRoZXNpemVDaG9pY2VzKSwgTlVMTCk7CisgICBjaG9pY2VFbnZpcm9ubWVudFBhcmFtZXRlcihzcGssICJhYmJyZXZpYXRpb25zIChkaWN0aW9uYXJ5KSIsIHBhcmFtZXRlcnNbUEFSTV9BYmJyZXZpYXRpb25zXSwgZWNpRGljdGlvbmFyeSwgYWJicmV2aWF0aW9uc0Nob2ljZXMsIHNpemVvZigqYWJicmV2aWF0aW9uc0Nob2ljZXMpLCBOVUxMKTsKKyAgIGNob2ljZUVudmlyb25tZW50UGFyYW1ldGVyKHNwaywgInllYXJzIChudW1iZXIgbW9kZSkiLCBwYXJhbWV0ZXJzW1BBUk1fWWVhcnNdLCBlY2lOdW1iZXJNb2RlLCB5ZWFyc0Nob2ljZXMsIHNpemVvZigqeWVhcnNDaG9pY2VzKSwgTlVMTCk7CisKKyAgIGNob2ljZUVudmlyb25tZW50UGFyYW1ldGVyKHNwaywgImxhbmd1YWdlIiwgcGFyYW1ldGVyc1tQQVJNX0xhbmd1YWdlXSwgZWNpTGFuZ3VhZ2VEaWFsZWN0LCBsYW5ndWFnZUNob2ljZXMsIHNpemVvZigqbGFuZ3VhZ2VDaG9pY2VzKSwgc2F2ZUxhbmd1YWdlU2V0dGluZyk7CisgICBjaG9pY2VFbnZpcm9ubWVudFBhcmFtZXRlcihzcGssICJ2b2ljZSBuYW1lIiwgcGFyYW1ldGVyc1tQQVJNX1ZvaWNlXSwgZWNpTnVtUGFyYW1zLCB2b2ljZUNob2ljZXMsIHNpemVvZigqdm9pY2VDaG9pY2VzKSwgc2F2ZVZvaWNlU2V0dGluZyk7CisgICBzZXRMYW5ndWFnZUFuZFZvaWNlKHNwayk7CisKKyAgIGNob2ljZVZvaWNlUGFyYW1ldGVyKHNwaywgImdlbmRlciIsIHBhcmFtZXRlcnNbUEFSTV9HZW5kZXJdLCBlY2lHZW5kZXIsIGdlbmRlckNob2ljZXMpOworICAgcmFuZ2VWb2ljZVBhcmFtZXRlcihzcGssICJoZWFkIHNpemUiLCBwYXJhbWV0ZXJzW1BBUk1fSGVhZFNpemVdLCBlY2lIZWFkU2l6ZSwgMCwgMTAwKTsKKyAgIHJhbmdlVm9pY2VQYXJhbWV0ZXIoc3BrLCAicGl0Y2ggYmFzZWxpbmUiLCBwYXJhbWV0ZXJzW1BBUk1fUGl0Y2hCYXNlbGluZV0sIGVjaVBpdGNoQmFzZWxpbmUsIDQwLCA0MjIpOworICAgcmFuZ2VWb2ljZVBhcmFtZXRlcihzcGssICJleHByZXNzaXZlbmVzcyAocGl0Y2ggZmx1Y3R1YXRpb24pIiwgcGFyYW1ldGVyc1tQQVJNX0V4cHJlc3NpdmVuZXNzXSwgZWNpUGl0Y2hGbHVjdHVhdGlvbiwgMCwgMTAwKTsKKyAgIHJhbmdlVm9pY2VQYXJhbWV0ZXIoc3BrLCAicm91Z2huZXNzIiwgcGFyYW1ldGVyc1tQQVJNX1JvdWdobmVzc10sIGVjaVJvdWdobmVzcywgMCwgMTAwKTsKKyAgIHJhbmdlVm9pY2VQYXJhbWV0ZXIoc3BrLCAiYnJlYXRoaW5lc3MiLCBwYXJhbWV0ZXJzW1BBUk1fQnJlYXRoaW5lc3NdLCBlY2lCcmVhdGhpbmVzcywgMCwgMTAwKTsKKyAgIHJhbmdlVm9pY2VQYXJhbWV0ZXIoc3BrLCAidm9sdW1lIiwgcGFyYW1ldGVyc1tQQVJNX1ZvbHVtZV0sIGVjaVZvbHVtZSwgMCwgMTAwKTsKKyAgIHJhbmdlVm9pY2VQYXJhbWV0ZXIoc3BrLCAic3BlZWQiLCBwYXJhbWV0ZXJzW1BBUk1fU3BlZWRdLCBlY2lTcGVlZCwgNzAsIDEyOTcpOworCisjaWZkZWYgSUNPTlZfTlVMTAorICAgc3BrLT5kcml2ZXIuZGF0YS0+ZWNpLnVzZVNTTUwgPSAhcHJlcGFyZVRleHRDb252ZXJzaW9uKHNwayk7CisjZWxzZSAvKiBJQ09OVl9OVUxMICovCisgICBzcGstPmRyaXZlci5kYXRhLT5lY2kudXNlU1NNTCA9IDE7CisjZW5kaWYgLyogSUNPTlZfTlVMTCAqLworCisgICBpZiAoc3BrLT5kcml2ZXIuZGF0YS0+ZWNpLnVzZVNTTUwpIHsKKyAgICAgIGxvZ01lc3NhZ2UoTE9HX0NBVEVHT1JZKFNQRUVDSF9EUklWRVIpLCAidXNpbmcgU1NNTCIpOworICAgfQorfQorCitzdGF0aWMgdm9pZAord3JpdGVBbm5vdGF0aW9ucyAoU3BlZWNoU3ludGhlc2l6ZXIgKnNwaykgeworICAgaWYgKHNway0+ZHJpdmVyLmRhdGEtPmVjaS51c2VTU01MKSB7CisgICAgICB3cml0ZUFubm90YXRpb24oc3BrLCAiZ2ZhMSIpOyAvLyBlbmFibGUgU1NNTAorICAgICAgd3JpdGVBbm5vdGF0aW9uKHNwaywgImdmYTIiKTsKKyAgIH0KKworICAgZGlzYWJsZUFubm90YXRpb25zKHNwayk7Cit9CisKK3N0YXRpYyB1aW50MzJfdAorcGFyc2VWZXJzaW9uIChjb25zdCBjaGFyICp0ZXh0KSB7CisgICB1aW50MzJfdCByZXN1bHQgPSAwOworICAgY29uc3QgdW5zaWduZWQgaW50IHdpZHRoID0gODsKKyAgIHVuc2lnbmVkIGludCBzaGlmdCA9IHNpemVvZihyZXN1bHQpICogOCAvIHdpZHRoICogd2lkdGg7CisKKyAgIHdoaWxlICgqdGV4dCAmJiBzaGlmdCkgeworICAgICAgY2hhciAqZW5kOworICAgICAgbG9uZyBkaWdpdCA9IHN0cnRvbCh0ZXh0LCAmZW5kLCAxMCk7CisKKyAgICAgIHNoaWZ0IC09IHdpZHRoOworICAgICAgcmVzdWx0IHw9IGRpZ2l0IDw8IHNoaWZ0OworCisgICAgICB0ZXh0ID0gZW5kOworICAgICAgaWYgKCp0ZXh0KSB0ZXh0ICs9IDE7CisgICB9CisKKyAgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBpbnQKK3Nwa19jb25zdHJ1Y3QgKFNwZWVjaFN5bnRoZXNpemVyICpzcGssIGNoYXIgKipwYXJhbWV0ZXJzKSB7CisgICBzcGstPnNldFZvbHVtZSA9IHNwa19zZXRWb2x1bWU7CisgICBzcGstPnNldFJhdGUgPSBzcGtfc2V0UmF0ZTsKKworICAgaWYgKChzcGstPmRyaXZlci5kYXRhID0gbWFsbG9jKHNpemVvZigqc3BrLT5kcml2ZXIuZGF0YSkpKSkgeworICAgICAgbWVtc2V0KHNway0+ZHJpdmVyLmRhdGEsIDAsIHNpemVvZigqc3BrLT5kcml2ZXIuZGF0YSkpOworCisgICAgICBlY2lWZXJzaW9uKHNway0+ZHJpdmVyLmRhdGEtPnZlcnNpb24udGV4dCk7CisgICAgICBsb2dNZXNzYWdlKExPR19JTkZPLCAiVmlhVm9pY2UgZW5naW5lIHZlcnNpb246ICVzIiwgc3BrLT5kcml2ZXIuZGF0YS0+dmVyc2lvbi50ZXh0KTsKKyAgICAgIHNway0+ZHJpdmVyLmRhdGEtPnZlcnNpb24uYmluYXJ5ID0gcGFyc2VWZXJzaW9uKHNway0+ZHJpdmVyLmRhdGEtPnZlcnNpb24udGV4dCk7CisKKyAgICAgIHNway0+ZHJpdmVyLmRhdGEtPmVjaS5oYW5kbGUgPSBOVUxMX0VDSV9IQU5EOworICAgICAgc3BrLT5kcml2ZXIuZGF0YS0+ZWNpLnVzZVNTTUwgPSAwOworCisgICAgICBzcGstPmRyaXZlci5kYXRhLT5zZXR0aW5nLmxhbmd1YWdlID0gTlVMTDsKKyAgICAgIHNway0+ZHJpdmVyLmRhdGEtPnNldHRpbmcudm9pY2UgPSBOVUxMOworCisgICAgICBzcGstPmRyaXZlci5kYXRhLT5wY20uYnVmZmVyID0gTlVMTDsKKyAgICAgIHNway0+ZHJpdmVyLmRhdGEtPnBjbS5zdHJlYW0gPSBOVUxMOworICAgICAgc3BrLT5kcml2ZXIuZGF0YS0+cGNtLmNvbW1hbmQgPSBOVUxMOworCisgICAgICBzcGstPmRyaXZlci5kYXRhLT5zYXkuYnVmZmVyID0gTlVMTDsKKyAgICAgIHNway0+ZHJpdmVyLmRhdGEtPnNheS5zaXplID0gMDsKKworICAgICAgaWYgKChzcGstPmRyaXZlci5kYXRhLT5lY2kuaGFuZGxlID0gZWNpTmV3KCkpICE9IE5VTExfRUNJX0hBTkQpIHsKKyAgICAgICAgIGVjaVJlZ2lzdGVyQ2FsbGJhY2soc3BrLT5kcml2ZXIuZGF0YS0+ZWNpLmhhbmRsZSwgY2xpZW50Q2FsbGJhY2ssICh2b2lkICopc3BrKTsKKworICAgICAgICAgc3BrLT5kcml2ZXIuZGF0YS0+Y3VycmVudC51bml0VHlwZSA9IGdldEVudmlyb25tZW50UGFyYW1ldGVyKHNwaywgZWNpUmVhbFdvcmxkVW5pdHMpOworICAgICAgICAgc3BrLT5kcml2ZXIuZGF0YS0+Y3VycmVudC5pbnB1dFR5cGUgPSBnZXRFbnZpcm9ubWVudFBhcmFtZXRlcihzcGssIGVjaUlucHV0VHlwZSk7CisKKyAgICAgICAgIGlmICgoc3BrLT5kcml2ZXIuZGF0YS0+cGNtLmJ1ZmZlciA9IGNhbGxvYyhNQVhJTVVNX1NBTVBMRVMsIHNpemVvZigqc3BrLT5kcml2ZXIuZGF0YS0+cGNtLmJ1ZmZlcikpKSkgeworICAgICAgICAgICAgaWYgKGVjaVNldE91dHB1dEJ1ZmZlcihzcGstPmRyaXZlci5kYXRhLT5lY2kuaGFuZGxlLCBNQVhJTVVNX1NBTVBMRVMsIHNway0+ZHJpdmVyLmRhdGEtPnBjbS5idWZmZXIpKSB7CisgICAgICAgICAgICAgICBzZXRQYXJhbWV0ZXJzKHNwaywgcGFyYW1ldGVycyk7CisgICAgICAgICAgICAgICB3cml0ZUFubm90YXRpb25zKHNwayk7CisgICAgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICByZXBvcnRFcnJvcihzcGssICJlY2lTZXRPdXRwdXRCdWZmZXIiKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZnJlZShzcGstPmRyaXZlci5kYXRhLT5wY20uYnVmZmVyKTsKKyAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBsb2dNYWxsb2NFcnJvcigpOworICAgICAgICAgfQorCisgICAgICAgICBlY2lEZWxldGUoc3BrLT5kcml2ZXIuZGF0YS0+ZWNpLmhhbmRsZSk7CisgICAgICB9IGVsc2UgeworICAgICAgICAgbG9nTWVzc2FnZShMT0dfRVJSLCAiVmlhVm9pY2UgZW5naW5lIGluaXRpYWxpemF0aW9uIGZhaWx1cmUiKTsKKyAgICAgIH0KKworICAgICAgZnJlZShzcGstPmRyaXZlci5kYXRhKTsKKyAgICAgIHNway0+ZHJpdmVyLmRhdGEgPSBOVUxMOworICAgfSBlbHNlIHsKKyAgICAgIGxvZ01hbGxvY0Vycm9yKCk7CisgICB9CisKKyAgIHJldHVybiAwOworfQorCitzdGF0aWMgdm9pZAorc3BrX2Rlc3RydWN0IChTcGVlY2hTeW50aGVzaXplciAqc3BrKSB7CisgICBpZiAoc3BrLT5kcml2ZXIuZGF0YSkgeworICAgICAgaWYgKHNway0+ZHJpdmVyLmRhdGEtPmVjaS5oYW5kbGUpIGVjaURlbGV0ZShzcGstPmRyaXZlci5kYXRhLT5lY2kuaGFuZGxlKTsKKyAgICAgIGlmIChzcGstPmRyaXZlci5kYXRhLT5zYXkuYnVmZmVyKSBmcmVlKHNway0+ZHJpdmVyLmRhdGEtPnNheS5idWZmZXIpOworICAgICAgaWYgKHNway0+ZHJpdmVyLmRhdGEtPnBjbS5idWZmZXIpIGZyZWUoc3BrLT5kcml2ZXIuZGF0YS0+cGNtLmJ1ZmZlcik7CisgICAgICBpZiAoc3BrLT5kcml2ZXIuZGF0YS0+cGNtLmNvbW1hbmQpIGZyZWUoc3BrLT5kcml2ZXIuZGF0YS0+cGNtLmNvbW1hbmQpOworICAgICAgcGNtQ2xvc2VTdHJlYW0oc3BrKTsKKworI2lmZGVmIElDT05WX05VTEwKKyAgICAgIGlmIChzcGstPmRyaXZlci5kYXRhLT5pY29udi5oYW5kbGUgIT0gSUNPTlZfTlVMTCkgaWNvbnZfY2xvc2Uoc3BrLT5kcml2ZXIuZGF0YS0+aWNvbnYuaGFuZGxlKTsKKyNlbmRpZiAvKiBJQ09OVl9OVUxMICovCisKKyAgICAgIGZyZWUoc3BrLT5kcml2ZXIuZGF0YSk7CisgICAgICBzcGstPmRyaXZlci5kYXRhID0gTlVMTDsKKyAgIH0KK30KZGlmZiAtLWdpdCBhL0RyaXZlcnMvU3BlZWNoL1ZpYVZvaWNlL3ZvaWNlcy5oIGIvRHJpdmVycy9TcGVlY2gvVmlhVm9pY2Uvdm9pY2VzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGVkM2M0ZgotLS0gL2Rldi9udWxsCisrKyBiL0RyaXZlcnMvU3BlZWNoL1ZpYVZvaWNlL3ZvaWNlcy5oCkBAIC0wLDAgKzEsMjkzIEBACisvKgorICogQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyAqICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyAqCisgKiBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorICoKKyAqIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyAqCisgKiBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisgKi8KKworeyAubmFtZSA9ICJSZWVkIiwKKyAgLmxhbmd1YWdlID0gZWNpR2VuZXJhbEFtZXJpY2FuRW5nbGlzaCwKKyAgLnR5cGUgPSBWT0lDRV9UWVBFX01BTjEKK30sCisKK3sgLm5hbWUgPSAiU2hlbGxleSIsCisgIC5sYW5ndWFnZSA9IGVjaUdlbmVyYWxBbWVyaWNhbkVuZ2xpc2gsCisgIC50eXBlID0gVk9JQ0VfVFlQRV9XT01BTjEKK30sCisKK3sgLm5hbWUgPSAiU2FuZHkiLAorICAubGFuZ3VhZ2UgPSBlY2lHZW5lcmFsQW1lcmljYW5FbmdsaXNoLAorICAudHlwZSA9IFZPSUNFX1RZUEVfQ0hJTEQxCit9LAorCit7IC5uYW1lID0gIkdyYW5kcGEiLAorICAubGFuZ3VhZ2UgPSBlY2lHZW5lcmFsQW1lcmljYW5FbmdsaXNoLAorICAudHlwZSA9IFZPSUNFX1RZUEVfUEFUUklBUkNIMQorfSwKKworeyAubmFtZSA9ICJHcmFuZG1hIiwKKyAgLmxhbmd1YWdlID0gZWNpR2VuZXJhbEFtZXJpY2FuRW5nbGlzaCwKKyAgLnR5cGUgPSBWT0lDRV9UWVBFX01BVFJJQVJDSDEKK30sCisKK3sgLm5hbWUgPSAiSnVzdGluIiwKKyAgLmxhbmd1YWdlID0gZWNpQnJpdGlzaEVuZ2xpc2gsCisgIC50eXBlID0gVk9JQ0VfVFlQRV9NQU4xCit9LAorCit7IC5uYW1lID0gIkphbmUiLAorICAubGFuZ3VhZ2UgPSBlY2lCcml0aXNoRW5nbGlzaCwKKyAgLnR5cGUgPSBWT0lDRV9UWVBFX1dPTUFOMQorfSwKKworeyAubmFtZSA9ICJOaWNreSIsCisgIC5sYW5ndWFnZSA9IGVjaUJyaXRpc2hFbmdsaXNoLAorICAudHlwZSA9IFZPSUNFX1RZUEVfQ0hJTEQxCit9LAorCit7IC5uYW1lID0gIkdyYW1wcyIsCisgIC5sYW5ndWFnZSA9IGVjaUJyaXRpc2hFbmdsaXNoLAorICAudHlwZSA9IFZPSUNFX1RZUEVfUEFUUklBUkNIMQorfSwKKworeyAubmFtZSA9ICJOYW5ueSIsCisgIC5sYW5ndWFnZSA9IGVjaUJyaXRpc2hFbmdsaXNoLAorICAudHlwZSA9IFZPSUNFX1RZUEVfTUFUUklBUkNIMQorfSwKKworeyAubmFtZSA9ICJDYXJsb3MiLAorICAubGFuZ3VhZ2UgPSBlY2lDYXN0aWxpYW5TcGFuaXNoLAorICAudHlwZSA9IFZPSUNFX1RZUEVfTUFOMQorfSwKKworeyAubmFtZSA9ICJQaWxhciIsCisgIC5sYW5ndWFnZSA9IGVjaUNhc3RpbGlhblNwYW5pc2gsCisgIC50eXBlID0gVk9JQ0VfVFlQRV9XT01BTjEKK30sCisKK3sgLm5hbWUgPSAiUGVwZSIsCisgIC5sYW5ndWFnZSA9IGVjaUNhc3RpbGlhblNwYW5pc2gsCisgIC50eXBlID0gVk9JQ0VfVFlQRV9DSElMRDEKK30sCisKK3sgLm5hbWUgPSAiQWJ1ZWxvIiwKKyAgLmxhbmd1YWdlID0gZWNpQ2FzdGlsaWFuU3BhbmlzaCwKKyAgLnR5cGUgPSBWT0lDRV9UWVBFX1BBVFJJQVJDSDEKK30sCisKK3sgLm5hbWUgPSAiQWJ1ZWxhIiwKKyAgLmxhbmd1YWdlID0gZWNpQ2FzdGlsaWFuU3BhbmlzaCwKKyAgLnR5cGUgPSBWT0lDRV9UWVBFX01BVFJJQVJDSDEKK30sCisKK3sgLm5hbWUgPSAiSmFjcXVlcyIsCisgIC5sYW5ndWFnZSA9IGVjaVN0YW5kYXJkRnJlbmNoLAorICAudHlwZSA9IFZPSUNFX1RZUEVfTUFOMQorfSwKKworeyAubmFtZSA9ICJKYWNxdWVsaW5lIiwKKyAgLmxhbmd1YWdlID0gZWNpU3RhbmRhcmRGcmVuY2gsCisgIC50eXBlID0gVk9JQ0VfVFlQRV9XT01BTjEKK30sCisKK3sgLm5hbWUgPSAiTWFyaXVzIiwKKyAgLmxhbmd1YWdlID0gZWNpU3RhbmRhcmRGcmVuY2gsCisgIC50eXBlID0gVk9JQ0VfVFlQRV9DSElMRDEKK30sCisKK3sgLm5hbWUgPSAiR3JhbmRww6hyZSIsCisgIC5sYW5ndWFnZSA9IGVjaVN0YW5kYXJkRnJlbmNoLAorICAudHlwZSA9IFZPSUNFX1RZUEVfUEFUUklBUkNIMQorfSwKKworeyAubmFtZSA9ICJNYW1pZSIsCisgIC5sYW5ndWFnZSA9IGVjaVN0YW5kYXJkRnJlbmNoLAorICAudHlwZSA9IFZPSUNFX1RZUEVfTUFUUklBUkNIMQorfSwKKworeyAubmFtZSA9ICJNYXgiLAorICAubGFuZ3VhZ2UgPSBlY2lTdGFuZGFyZEdlcm1hbiwKKyAgLnR5cGUgPSBWT0lDRV9UWVBFX01BTjEKK30sCisKK3sgLm5hbWUgPSAiR2lzZWxhIiwKKyAgLmxhbmd1YWdlID0gZWNpU3RhbmRhcmRHZXJtYW4sCisgIC50eXBlID0gVk9JQ0VfVFlQRV9XT01BTjEKK30sCisKK3sgLm5hbWUgPSAiTWF0dGkiLAorICAubGFuZ3VhZ2UgPSBlY2lTdGFuZGFyZEdlcm1hbiwKKyAgLnR5cGUgPSBWT0lDRV9UWVBFX0NISUxEMQorfSwKKworeyAubmFtZSA9ICJPcGEiLAorICAubGFuZ3VhZ2UgPSBlY2lTdGFuZGFyZEdlcm1hbiwKKyAgLnR5cGUgPSBWT0lDRV9UWVBFX1BBVFJJQVJDSDEKK30sCisKK3sgLm5hbWUgPSAiT21hIiwKKyAgLmxhbmd1YWdlID0gZWNpU3RhbmRhcmRHZXJtYW4sCisgIC50eXBlID0gVk9JQ0VfVFlQRV9NQVRSSUFSQ0gxCit9LAorCit7IC5uYW1lID0gIkVucmljbyIsCisgIC5sYW5ndWFnZSA9IGVjaVN0YW5kYXJkSXRhbGlhbiwKKyAgLnR5cGUgPSBWT0lDRV9UWVBFX01BTjEKK30sCisKK3sgLm5hbWUgPSAiTHVjaWEiLAorICAubGFuZ3VhZ2UgPSBlY2lTdGFuZGFyZEl0YWxpYW4sCisgIC50eXBlID0gVk9JQ0VfVFlQRV9XT01BTjEKK30sCisKK3sgLm5hbWUgPSAiQ2hpY2NvIiwKKyAgLmxhbmd1YWdlID0gZWNpU3RhbmRhcmRJdGFsaWFuLAorICAudHlwZSA9IFZPSUNFX1RZUEVfQ0hJTEQxCit9LAorCit7IC5uYW1lID0gIk5vbm5vIiwKKyAgLmxhbmd1YWdlID0gZWNpU3RhbmRhcmRJdGFsaWFuLAorICAudHlwZSA9IFZPSUNFX1RZUEVfUEFUUklBUkNIMQorfSwKKworeyAubmFtZSA9ICJOb25uYSIsCisgIC5sYW5ndWFnZSA9IGVjaVN0YW5kYXJkSXRhbGlhbiwKKyAgLnR5cGUgPSBWT0lDRV9UWVBFX01BVFJJQVJDSDEKK30sCisKK3sgLm5hbWUgPSAiTGkzIEppbmc0IiwKKyAgLmxhbmd1YWdlID0gZWNpTWFuZGFyaW5DaGluZXNlLAorICAudHlwZSA9IFZPSUNFX1RZUEVfTUFOMQorfSwKKworeyAubmFtZSA9ICJXYW5nMiBZYW40IiwKKyAgLmxhbmd1YWdlID0gZWNpTWFuZGFyaW5DaGluZXNlLAorICAudHlwZSA9IFZPSUNFX1RZUEVfV09NQU4xCit9LAorCit7IC5uYW1lID0gIkxpMyBEb25nMSBEb25nMSIsCisgIC5sYW5ndWFnZSA9IGVjaU1hbmRhcmluQ2hpbmVzZSwKKyAgLnR5cGUgPSBWT0lDRV9UWVBFX0NISUxEMQorfSwKKworeyAubmFtZSA9ICJZZTIgWWUiLAorICAubGFuZ3VhZ2UgPSBlY2lNYW5kYXJpbkNoaW5lc2UsCisgIC50eXBlID0gVk9JQ0VfVFlQRV9QQVRSSUFSQ0gxCit9LAorCit7IC5uYW1lID0gIk5haTMgTmFpIiwKKyAgLmxhbmd1YWdlID0gZWNpTWFuZGFyaW5DaGluZXNlLAorICAudHlwZSA9IFZPSUNFX1RZUEVfTUFUUklBUkNIMQorfSwKKworeyAubmFtZSA9ICJaaGk0IE1pbmcyIiwKKyAgLmxhbmd1YWdlID0gZWNpVGFpd2FuZXNlTWFuZGFyaW4sCisgIC50eXBlID0gVk9JQ0VfVFlQRV9NQU4xCit9LAorCit7IC5uYW1lID0gIkNodW4xIEppYW8xIiwKKyAgLmxhbmd1YWdlID0gZWNpVGFpd2FuZXNlTWFuZGFyaW4sCisgIC50eXBlID0gVk9JQ0VfVFlQRV9XT01BTjEKK30sCisKK3sgLm5hbWUgPSAiWGlhbzMgQnU0IERpYW4zIiwKKyAgLmxhbmd1YWdlID0gZWNpVGFpd2FuZXNlTWFuZGFyaW4sCisgIC50eXBlID0gVk9JQ0VfVFlQRV9DSElMRDEKK30sCisKK3sgLm5hbWUgPSAiQTMgR29uZzEiLAorICAubGFuZ3VhZ2UgPSBlY2lUYWl3YW5lc2VNYW5kYXJpbiwKKyAgLnR5cGUgPSBWT0lDRV9UWVBFX1BBVFJJQVJDSDEKK30sCisKK3sgLm5hbWUgPSAiQTMgTWE0IiwKKyAgLmxhbmd1YWdlID0gZWNpVGFpd2FuZXNlTWFuZGFyaW4sCisgIC50eXBlID0gVk9JQ0VfVFlQRV9NQVRSSUFSQ0gxCit9LAorCit7IC5uYW1lID0gIkpvw6NvIiwKKyAgLmxhbmd1YWdlID0gZWNpQnJhemlsaWFuUG9ydHVndWVzZSwKKyAgLnR5cGUgPSBWT0lDRV9UWVBFX01BTjEKK30sCisKK3sgLm5hbWUgPSAiQ2zDoXVkaWEiLAorICAubGFuZ3VhZ2UgPSBlY2lCcmF6aWxpYW5Qb3J0dWd1ZXNlLAorICAudHlwZSA9IFZPSUNFX1RZUEVfV09NQU4xCit9LAorCit7IC5uYW1lID0gIkNoaWNvIiwKKyAgLmxhbmd1YWdlID0gZWNpQnJhemlsaWFuUG9ydHVndWVzZSwKKyAgLnR5cGUgPSBWT0lDRV9UWVBFX0NISUxEMQorfSwKKworeyAubmFtZSA9ICJBdsO0IiwKKyAgLmxhbmd1YWdlID0gZWNpQnJhemlsaWFuUG9ydHVndWVzZSwKKyAgLnR5cGUgPSBWT0lDRV9UWVBFX1BBVFJJQVJDSDEKK30sCisKK3sgLm5hbWUgPSAiQXbDsyIsCisgIC5sYW5ndWFnZSA9IGVjaUJyYXppbGlhblBvcnR1Z3Vlc2UsCisgIC50eXBlID0gVk9JQ0VfVFlQRV9NQVRSSUFSQ0gxCit9LAorCit7IC5uYW1lID0gIlRhcm9vIiwKKyAgLmxhbmd1YWdlID0gZWNpU3RhbmRhcmRKYXBhbmVzZSwKKyAgLnR5cGUgPSBWT0lDRV9UWVBFX01BTjEKK30sCisKK3sgLm5hbWUgPSAiSGFuYWtvIiwKKyAgLmxhbmd1YWdlID0gZWNpU3RhbmRhcmRKYXBhbmVzZSwKKyAgLnR5cGUgPSBWT0lDRV9UWVBFX1dPTUFOMQorfSwKKworeyAubmFtZSA9ICJKaXJvbyIsCisgIC5sYW5ndWFnZSA9IGVjaVN0YW5kYXJkSmFwYW5lc2UsCisgIC50eXBlID0gVk9JQ0VfVFlQRV9DSElMRDEKK30sCisKK3sgLm5hbWUgPSAiVGFyb28iLAorICAubGFuZ3VhZ2UgPSBlY2lTdGFuZGFyZEphcGFuZXNlLAorICAudHlwZSA9IFZPSUNFX1RZUEVfUEFUUklBUkNIMQorfSwKKworeyAubmFtZSA9ICJPYmFhY2hhbiIsCisgIC5sYW5ndWFnZSA9IGVjaVN0YW5kYXJkSmFwYW5lc2UsCisgIC50eXBlID0gVk9JQ0VfVFlQRV9NQVRSSUFSQ0gxCit9LAorCit7IC5uYW1lID0gIkFudHRpIiwKKyAgLmxhbmd1YWdlID0gZWNpU3RhbmRhcmRGaW5uaXNoLAorICAudHlwZSA9IFZPSUNFX1RZUEVfTUFOMQorfSwKKworeyAubmFtZSA9ICJUYXJqYSIsCisgIC5sYW5ndWFnZSA9IGVjaVN0YW5kYXJkRmlubmlzaCwKKyAgLnR5cGUgPSBWT0lDRV9UWVBFX1dPTUFOMQorfSwKKworeyAubmFtZSA9ICJQZWtrYSIsCisgIC5sYW5ndWFnZSA9IGVjaVN0YW5kYXJkRmlubmlzaCwKKyAgLnR5cGUgPSBWT0lDRV9UWVBFX0NISUxEMQorfSwKKworeyAubmFtZSA9ICJJc29pc8OkIiwKKyAgLmxhbmd1YWdlID0gZWNpU3RhbmRhcmRGaW5uaXNoLAorICAudHlwZSA9IFZPSUNFX1RZUEVfUEFUUklBUkNIMQorfSwKKworeyAubmFtZSA9ICJJc2/DpGl0aSIsCisgIC5sYW5ndWFnZSA9IGVjaVN0YW5kYXJkRmlubmlzaCwKKyAgLnR5cGUgPSBWT0lDRV9UWVBFX01BVFJJQVJDSDEKK30sCisKZGlmZiAtLWdpdCBhL0RyaXZlcnMvU3BlZWNoL2VTcGVhay1ORy9NYWtlZmlsZS5pbiBiL0RyaXZlcnMvU3BlZWNoL2VTcGVhay1ORy9NYWtlZmlsZS5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMTkyNDkwCi0tLSAvZGV2L251bGwKKysrIGIvRHJpdmVycy9TcGVlY2gvZVNwZWFrLU5HL01ha2VmaWxlLmluCkBAIC0wLDAgKzEsMjkgQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyMgICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisjCisjIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyMKKyMgQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitEUklWRVJfQ09ERSA9IGVuCitEUklWRVJfTkFNRSA9IGVTcGVhay1ORworRFJJVkVSX1VTQUdFID0gc29mdHdhcmUgZW5naW5lCitEUklWRVJfVkVSU0lPTiA9IDAuMQorRFJJVkVSX0RFVkVMT1BFUlMgPSBOaWNvbGFzIFBpdHJlIDxuaWNvQGZsdXhuaWMubmV0PiwgT25kxZllaiBMeXNvbsSbayA8b2x5c29uZWtAcmVkaGF0LmNvbT4KK1NQS19PQkpTID0gQHNwZWVjaF9saWJyYXJpZXNfZW5ACitpbmNsdWRlICQoU1JDX1RPUClzcGVlY2gubWsKKworc3BlZWNoLiRPOgorCSQoQ0MpICQoU1BLX0NGTEFHUykgLUkkKEVTUEVBS19OR19ST09UKS9pbmNsdWRlIC1jICQoU1JDX0RJUikvc3BlZWNoLmMKKwpkaWZmIC0tZ2l0IGEvRHJpdmVycy9TcGVlY2gvZVNwZWFrLU5HL1JFQURNRSBiL0RyaXZlcnMvU3BlZWNoL2VTcGVhay1ORy9SRUFETUUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODI1ODQ4YQotLS0gL2Rldi9udWxsCisrKyBiL0RyaXZlcnMvU3BlZWNoL2VTcGVhay1ORy9SRUFETUUKQEAgLTAsMCArMSwzNCBAQAorVGhpcyBkaXJlY3RvcnkgY29udGFpbnMgdGhlIEJSTFRUWSBzcGVlY2ggZHJpdmVyIGZvciB0aGUgZVNwZWFrLU5HIHRleHQgdG8KK3NwZWVjaCBlbmdpbmUuICBUaGUgZVNwZWFrLU5HIHdlYiBzaXRlIGlzCitodHRwczovL2dpdGh1Yi5jb20vZXNwZWFrLW5nL2VzcGVhay1uZy8uCisKK2VTcGVhay1ORyBjb21lcyB3aXRoIGEgc2ltcGxlIGNvbW1hbmQtbGluZSB0b29sIGNhbGxlZCBlc3BlYWstbmcgd2hpY2ggY2FuIGJlCit1c2VkIHRvIHRlc3QgaXQsIGFuZCB0byByZWNvbXBpbGUgbW9kaWZpZWQgZGljdGlvbmFyaWVzLCBldGMuIFBsZWFzZSBzZWUKK3RoZSBlc3BlYWstbmcgbWFuIHBhZ2UgZm9yIG1vcmUgaW5mb3JtYXRpb24uCisKK0JSTFRUWSdzIGNvbmZpZ3VyZSBzY3JpcHQgYXV0b21hdGljYWxseSBpbmNsdWRlcyB0aGlzIGRyaXZlciBpZiB0aGUKK2VTcGVhay1ORyBkZXZlbG9wbWVudCBsaWJyYXJ5IGlzIGluc3RhbGxlZC4KKworVGhpcyBkcml2ZXIgcmVjb2duaXplcyB0aGUgZm9sbG93aW5nIHBhcmFtZXRlcnM6CisKK3BhdGgKKworCVNwZWNpZmllcyB0aGUgZGlyZWN0b3J5IGNvbnRhaW5pbmcgdGhlIGVzcGVhay1uZy1kYXRhIGRpcmVjdG9yeS4KKwlJZiBub3Qgc3BlY2lmaWVkLCB0aGUgZGVmYXVsdCBsb2NhdGlvbiBpcyB1c2VkLgorCQorcHVuY3RsaXN0CisKKwlTcGVjaWZpZWQgYSBsaXN0IG9mIHB1bmN0dWF0aW9uIGNoYXJhY3RlcnMgd2hvc2UgbmFtZXMgYXJlIHRvIGJlCisJc3Bva2VuIHdoZW4gdGhlIHNwZWVjaCBwdW5jdHVhdGlvbiBwYXJhbWV0ZXIgaXMgc2V0IHRvICJTb21lIi4KKwlJZiBub3Qgc3BlY2lmaWVkLCBhIGRlZmF1bHQgbGlzdCBpcyB1c2VkLgorCit2b2ljZQorCisJU3BlY2lmaWVzIGEgdm9pY2UvbGFuZ3VhZ2UgdG8gdXNlLiAgVGhlIGNvbXBsZXRlIGxpc3Qgb2YgYXZhaWxhYmxlCisJdm9pY2VzIG1heSBiZSBvYnRhaW5lZCB3aXRoIHRoZSBjb21tYW5kICdlc3BlYWstbmcgLS12b2ljZXMnLgorCittYXhyYXRlCisKKwlPdmVycmlkZXMgdGhlIG1heGltdW0gc3BlZWNoIHJhdGUgdmFsdWUuIFRoZSBkZWZhdWx0IGlzIDQ1MC4KKwlUaGlzIGNhbm5vdCBiZSBsb3dlciB0aGFuIDgwLgorCmRpZmYgLS1naXQgYS9Ecml2ZXJzL1NwZWVjaC9lU3BlYWstTkcvc3BlZWNoLmMgYi9Ecml2ZXJzL1NwZWVjaC9lU3BlYWstTkcvc3BlZWNoLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGJjNjIwOAotLS0gL2Rldi9udWxsCisrKyBiL0RyaXZlcnMvU3BlZWNoL2VTcGVhay1ORy9zcGVlY2guYwpAQCAtMCwwICsxLDE3NCBAQAorLyoKKyAqIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisgKiAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisgKgorICogQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKKyNpbmNsdWRlICJwcm9sb2d1ZS5oIgorCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworI2luY2x1ZGUgImxvZy5oIgorI2luY2x1ZGUgInBhcnNlLmgiCisKK3R5cGVkZWYgZW51bSB7CisJUEFSTV9QQVRILAorCVBBUk1fUFVOQ1RMSVNULAorCVBBUk1fVk9JQ0UsCisJUEFSTV9NQVhSQVRFCit9IERyaXZlclBhcmFtZXRlcjsKKyNkZWZpbmUgU1BLUEFSTVMgInBhdGgiLCAicHVuY3RsaXN0IiwgInZvaWNlIiwgIm1heHJhdGUiCisKKyNpbmNsdWRlICJzcGtfZHJpdmVyLmgiCisKKyNpbmNsdWRlIDxlc3BlYWstbmcvc3BlYWtfbGliLmg+CisKK3N0YXRpYyBpbnQgbWF4cmF0ZSA9IGVzcGVha1JBVEVfTUFYSU1VTTsKKworc3RhdGljIHZvaWQKK3Nwa19zYXkoU3BlZWNoU3ludGhlc2l6ZXIgKnNwaywgY29uc3QgdW5zaWduZWQgY2hhciAqYnVmZmVyLCBzaXplX3QgbGVuZ3RoLCBzaXplX3QgY291bnQsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmF0dHJpYnV0ZXMpCit7CisJaW50IHJlc3VsdDsKKworCS8qIGFkZCAxIHRvIHRoZSBsZW5ndGggaW4gb3JkZXIgdG8gcGFzcyBhbG9uZyB0aGUgdHJhaWxpbmcgemVybyAqLworCXJlc3VsdCA9IGVzcGVha19TeW50aChidWZmZXIsIGxlbmd0aCsxLCAwLCBQT1NfQ0hBUkFDVEVSLCAwLAorCQkJZXNwZWFrQ0hBUlNfVVRGOCwgTlVMTCwgKHZvaWQgKilzcGspOworCWlmIChyZXN1bHQgIT0gRUVfT0spCisJCWxvZ01lc3NhZ2UoTE9HX0VSUiwgImVTcGVhay1ORzogU3ludGgoKSByZXR1cm5lZCBlcnJvciAlZCIsIHJlc3VsdCk7Cit9CisKK3N0YXRpYyB2b2lkCitzcGtfbXV0ZShTcGVlY2hTeW50aGVzaXplciAqc3BrKQoreworCWVzcGVha19DYW5jZWwoKTsKK30KKworc3RhdGljIGludCBTeW50aENhbGxiYWNrKHNob3J0ICphdWRpbywgaW50IG51bXNhbXBsZXMsIGVzcGVha19FVkVOVCAqZXZlbnRzKQoreworCVNwZWVjaFN5bnRoZXNpemVyICpzcGsgPSBldmVudHMtPnVzZXJfZGF0YTsKKworCXdoaWxlIChldmVudHMtPnR5cGUgIT0gZXNwZWFrRVZFTlRfTElTVF9URVJNSU5BVEVEKSB7CisJCWlmIChldmVudHMtPnR5cGUgPT0gZXNwZWFrRVZFTlRfV09SRCkKKwkJCXRlbGxTcGVlY2hMb2NhdGlvbihzcGssIGV2ZW50cy0+dGV4dF9wb3NpdGlvbiAtIDEpOworCQlpZiAoZXZlbnRzLT50eXBlID09IGVzcGVha0VWRU5UX01TR19URVJNSU5BVEVEKQorCQkJdGVsbFNwZWVjaEZpbmlzaGVkKHNwayk7CisJCWV2ZW50cysrOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQKK3Nwa19kcmFpbihTcGVlY2hTeW50aGVzaXplciAqc3BrKQoreworCWVzcGVha19TeW5jaHJvbml6ZSgpOworfQorCitzdGF0aWMgdm9pZAorc3BrX3NldFZvbHVtZShTcGVlY2hTeW50aGVzaXplciAqc3BrLCB1bnNpZ25lZCBjaGFyIHNldHRpbmcpCit7CisJaW50IHZvbHVtZSA9IGdldEludGVnZXJTcGVlY2hWb2x1bWUoc2V0dGluZywgNTApOworCWVzcGVha19TZXRQYXJhbWV0ZXIoZXNwZWFrVk9MVU1FLCB2b2x1bWUsIDApOworfQorCitzdGF0aWMgdm9pZAorc3BrX3NldFJhdGUoU3BlZWNoU3ludGhlc2l6ZXIgKnNwaywgdW5zaWduZWQgY2hhciBzZXR0aW5nKQoreworCWludCBoX3JhbmdlID0gKG1heHJhdGUgLSBlc3BlYWtSQVRFX01JTklNVU0pLzI7CisJaW50IHJhdGUgPSBnZXRJbnRlZ2VyU3BlZWNoUmF0ZShzZXR0aW5nLCBoX3JhbmdlKSArIGVzcGVha1JBVEVfTUlOSU1VTTsKKwllc3BlYWtfU2V0UGFyYW1ldGVyKGVzcGVha1JBVEUsIHJhdGUsIDApOworfQorCitzdGF0aWMgdm9pZAorc3BrX3NldFBpdGNoKFNwZWVjaFN5bnRoZXNpemVyICpzcGssIHVuc2lnbmVkIGNoYXIgc2V0dGluZykKK3sKKwlpbnQgcGl0Y2ggPSBnZXRJbnRlZ2VyU3BlZWNoUGl0Y2goc2V0dGluZywgNTApOworCWVzcGVha19TZXRQYXJhbWV0ZXIoZXNwZWFrUElUQ0gsIHBpdGNoLCAwKTsKK30KKworc3RhdGljIHZvaWQKK3Nwa19zZXRQdW5jdHVhdGlvbihTcGVlY2hTeW50aGVzaXplciAqc3BrLCBTcGVlY2hQdW5jdHVhdGlvbiBzZXR0aW5nKQoreworCWVzcGVha19QVU5DVF9UWVBFIHB1bmN0OworCWlmIChzZXR0aW5nIDw9IFNQS19QVU5DVFVBVElPTl9OT05FKQorCQlwdW5jdCA9IGVzcGVha1BVTkNUX05PTkU7CisJZWxzZSBpZiAoc2V0dGluZyA+PSBTUEtfUFVOQ1RVQVRJT05fQUxMKQorCQlwdW5jdCA9IGVzcGVha1BVTkNUX0FMTDsKKwllbHNlCisJCXB1bmN0ID0gZXNwZWFrUFVOQ1RfU09NRTsKKwllc3BlYWtfU2V0UGFyYW1ldGVyKGVzcGVha1BVTkNUVUFUSU9OLCBwdW5jdCwgMCk7Cit9CisKK3N0YXRpYyBpbnQgc3BrX2NvbnN0cnVjdChTcGVlY2hTeW50aGVzaXplciAqc3BrLCBjaGFyICoqcGFyYW1ldGVycykKK3sKKwljb25zdCBjaGFyICpkYXRhX3BhdGgsICp2b2ljZW5hbWUsICpwdW5jdGxpc3Q7CisJaW50IHJlc3VsdDsKKworCXNway0+c2V0Vm9sdW1lID0gc3BrX3NldFZvbHVtZTsKKwlzcGstPnNldFJhdGUgPSBzcGtfc2V0UmF0ZTsKKwlzcGstPnNldFBpdGNoID0gc3BrX3NldFBpdGNoOworCXNway0+c2V0UHVuY3R1YXRpb24gPSBzcGtfc2V0UHVuY3R1YXRpb247CisJc3BrLT5kcmFpbiA9IHNwa19kcmFpbjsKKworCWxvZ01lc3NhZ2UoTE9HX0lORk8sICJlU3BlYWstTkcgdmVyc2lvbiAlcyIsIGVzcGVha19JbmZvKE5VTEwpKTsKKworCWRhdGFfcGF0aCA9IHBhcmFtZXRlcnNbUEFSTV9QQVRIXTsKKwlpZiAoZGF0YV9wYXRoICYmICEqZGF0YV9wYXRoKQorCQlkYXRhX3BhdGggPSBOVUxMOworCXJlc3VsdCA9IGVzcGVha19Jbml0aWFsaXplKEFVRElPX09VVFBVVF9QTEFZQkFDSywgMCwgZGF0YV9wYXRoLCAwKTsKKwlpZiAocmVzdWx0IDwgMCkgeworCQlsb2dNZXNzYWdlKExPR19FUlIsICJlU3BlYWstTkc6IGluaXRpYWxpemF0aW9uIGZhaWxlZCIpOworCQlyZXR1cm4gMDsKKwl9CisKKwl2b2ljZW5hbWUgPSBwYXJhbWV0ZXJzW1BBUk1fVk9JQ0VdOworCWlmKCF2b2ljZW5hbWUgfHwgISp2b2ljZW5hbWUpCisJCXZvaWNlbmFtZSA9ICJlbiI7CisJcmVzdWx0ID0gZXNwZWFrX1NldFZvaWNlQnlOYW1lKHZvaWNlbmFtZSk7CisJaWYgKHJlc3VsdCAhPSBFRV9PSykgeworCQllc3BlYWtfVk9JQ0Ugdm9pY2Vfc2VsZWN0OworCQltZW1zZXQoJnZvaWNlX3NlbGVjdCwgMCwgc2l6ZW9mKHZvaWNlX3NlbGVjdCkpOworCQl2b2ljZV9zZWxlY3QubGFuZ3VhZ2VzID0gdm9pY2VuYW1lOworCQlyZXN1bHQgPSBlc3BlYWtfU2V0Vm9pY2VCeVByb3BlcnRpZXMoJnZvaWNlX3NlbGVjdCk7CisJfQorCWlmIChyZXN1bHQgIT0gRUVfT0spIHsKKwkJbG9nTWVzc2FnZShMT0dfRVJSLCAiZVNwZWFrLU5HOiB1bmFibGUgdG8gbG9hZCB2b2ljZSAnJXMnIiwgdm9pY2VuYW1lKTsKKwkJcmV0dXJuIDA7CisJfQorCisJcHVuY3RsaXN0ID0gcGFyYW1ldGVyc1tQQVJNX1BVTkNUTElTVF07CisJaWYgKHB1bmN0bGlzdCAmJiAqcHVuY3RsaXN0KSB7CisJCXdjaGFyX3Qgd19wdW5jdGxpc3Rbc3RybGVuKHB1bmN0bGlzdCkgKyAxXTsKKwkJaW50IGkgPSAwOworCQl3aGlsZSAoKHdfcHVuY3RsaXN0W2ldID0gcHVuY3RsaXN0W2ldKSAhPSAwKSBpKys7CisJCWVzcGVha19TZXRQdW5jdHVhdGlvbkxpc3Qod19wdW5jdGxpc3QpOworCX0KKworCWlmIChwYXJhbWV0ZXJzW1BBUk1fTUFYUkFURV0pIHsKKwkJaW50IHZhbCA9IGF0b2kocGFyYW1ldGVyc1tQQVJNX01BWFJBVEVdKTsKKwkJaWYgKHZhbCA+IGVzcGVha1JBVEVfTUlOSU1VTSkgbWF4cmF0ZSA9IHZhbDsKKwl9CisKKwllc3BlYWtfU2V0U3ludGhDYWxsYmFjayhTeW50aENhbGxiYWNrKTsKKworCXJldHVybiAxOworfQorCitzdGF0aWMgdm9pZCBzcGtfZGVzdHJ1Y3QoU3BlZWNoU3ludGhlc2l6ZXIgKnNwaykKK3sKKwllc3BlYWtfQ2FuY2VsKCk7CisJZXNwZWFrX1Rlcm1pbmF0ZSgpOworfQpkaWZmIC0tZ2l0IGEvRHJpdmVycy9TcGVlY2gvZVNwZWFrL01ha2VmaWxlLmluIGIvRHJpdmVycy9TcGVlY2gvZVNwZWFrL01ha2VmaWxlLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhlZGNhYzkKLS0tIC9kZXYvbnVsbAorKysgYi9Ecml2ZXJzL1NwZWVjaC9lU3BlYWsvTWFrZWZpbGUuaW4KQEAgLTAsMCArMSwyOSBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorIyAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyMKKyMgQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorIworIyBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorIworIyBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisjIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyMgbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisjCisjIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK0RSSVZFUl9DT0RFID0gZXMKK0RSSVZFUl9OQU1FID0gZVNwZWFrCitEUklWRVJfVVNBR0UgPSBzb2Z0d2FyZSBlbmdpbmUKK0RSSVZFUl9WRVJTSU9OID0gMC4zIAorRFJJVkVSX0RFVkVMT1BFUlMgPSBOaWNvbGFzIFBpdHJlIDxuaWNvQGZsdXhuaWMubmV0PgorU1BLX09CSlMgPSBAc3BlZWNoX2xpYnJhcmllc19lc0AKK2luY2x1ZGUgJChTUkNfVE9QKXNwZWVjaC5taworCitzcGVlY2guJE86CisJJChDQykgJChTUEtfQ0ZMQUdTKSAtSSQoRVNQRUFLX1JPT1QpL2luY2x1ZGUgLWMgJChTUkNfRElSKS9zcGVlY2guYworCmRpZmYgLS1naXQgYS9Ecml2ZXJzL1NwZWVjaC9lU3BlYWsvUkVBRE1FIGIvRHJpdmVycy9TcGVlY2gvZVNwZWFrL1JFQURNRQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yM2VmZTM0Ci0tLSAvZGV2L251bGwKKysrIGIvRHJpdmVycy9TcGVlY2gvZVNwZWFrL1JFQURNRQpAQCAtMCwwICsxLDMzIEBACitUaGlzIGRpcmVjdG9yeSBjb250YWlucyB0aGUgQlJMVFRZIHNwZWVjaCBkcml2ZXIgZm9yIHRoZSBlU3BlYWsgdGV4dCB0bworc3BlZWNoIGVuZ2luZS4gIFRoZSBlU3BlYWsgd2ViIHNpdGUgaXMgaHR0cDovL2VzcGVhay5zb3VyY2Vmb3JnZS5uZXQvLgorCitlU3BlYWsgY29tZXMgd2l0aCBhIHNpbXBsZSBjb21tYW5kLWxpbmUgdG9vbCBjYWxsZWQgZXNwZWFrIHdoaWNoIGNhbiBiZQordXNlZCB0byB0ZXN0IGl0LCBhbmQgdG8gcmVjb21waWxlIG1vZGlmaWVkIGRpY3Rpb25hcmllcywgZXRjLiBQbGVhc2Ugc2VlCit0aGUgZXNwZWFrIG1hbiBwYWdlIGZvciBtb3JlIGluZm9ybWF0aW9uLgorCitCUkxUVFkncyBjb25maWd1cmUgc2NyaXB0IGF1dG9tYXRpY2FsbHkgaW5jbHVkZXMgdGhpcyBkcml2ZXIgaWYgdGhlCitlU3BlYWsgZGV2ZWxvcG1lbnQgbGlicmFyeSBpcyBpbnN0YWxsZWQuCisKK1RoaXMgZHJpdmVyIHJlY29nbml6ZXMgdGhlIGZvbGxvd2luZyBwYXJhbWV0ZXJzOgorCitwYXRoCisKKwlTcGVjaWZpZXMgdGhlIGRpcmVjdG9yeSBjb250YWluaW5nIHRoZSBlc3BlYWstZGF0YSBkaXJlY3RvcnkuCisJSWYgbm90IHNwZWNpZmllZCwgdGhlIGRlZmF1bHQgbG9jYXRpb24gaXMgdXNlZC4KKwkKK3B1bmN0bGlzdAorCisJU3BlY2lmaWVkIGEgbGlzdCBvZiBwdW5jdHVhdGlvbiBjaGFyYWN0ZXJzIHdob3NlIG5hbWVzIGFyZSB0byBiZQorCXNwb2tlbiB3aGVuIHRoZSBzcGVlY2ggcHVuY3R1YXRpb24gcGFyYW1ldGVyIGlzIHNldCB0byAiU29tZSIuCisJSWYgbm90IHNwZWNpZmllZCwgYSBkZWZhdWx0IGxpc3QgaXMgdXNlZC4KKwordm9pY2UKKworCVNwZWNpZmllcyBhIHZvaWNlL2xhbmd1YWdlIHRvIHVzZS4gIFRoZSBjb21wbGV0ZSBsaXN0IG9mIGF2YWlsYWJsZQorCXZvaWNlcyBtYXkgYmUgb2J0YWluZWQgd2l0aCB0aGUgY29tbWFuZCAnZXNwZWFrIC0tdm9pY2VzJy4KKworbWF4cmF0ZQorCisJT3ZlcnJpZGVzIHRoZSBtYXhpbXVtIHNwZWVjaCByYXRlIHZhbHVlLiBUaGUgZGVmYXVsdCBpcyA0NTAuCisJVGhpcyBjYW5ub3QgYmUgbG93ZXIgdGhhbiA4MC4KKwpkaWZmIC0tZ2l0IGEvRHJpdmVycy9TcGVlY2gvZVNwZWFrL3NwZWVjaC5jIGIvRHJpdmVycy9TcGVlY2gvZVNwZWFrL3NwZWVjaC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFkNjJjMDIKLS0tIC9kZXYvbnVsbAorKysgYi9Ecml2ZXJzL1NwZWVjaC9lU3BlYWsvc3BlZWNoLmMKQEAgLTAsMCArMSwxNzkgQEAKKy8qCisgKiBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorICogICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorICoKKyAqIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorICoKKyAqIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyAqLworCisjaW5jbHVkZSAicHJvbG9ndWUuaCIKKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKyNpbmNsdWRlICJsb2cuaCIKKyNpbmNsdWRlICJwYXJzZS5oIgorCit0eXBlZGVmIGVudW0geworCVBBUk1fUEFUSCwKKwlQQVJNX1BVTkNUTElTVCwKKwlQQVJNX1ZPSUNFLAorCVBBUk1fTUFYUkFURQorfSBEcml2ZXJQYXJhbWV0ZXI7CisjZGVmaW5lIFNQS1BBUk1TICJwYXRoIiwgInB1bmN0bGlzdCIsICJ2b2ljZSIsICJtYXhyYXRlIgorCisjaW5jbHVkZSAic3BrX2RyaXZlci5oIgorCisjaW5jbHVkZSA8ZXNwZWFrL3NwZWFrX2xpYi5oPgorCisjaWYgRVNQRUFLX0FQSV9SRVZJU0lPTiA8IDYKKyNkZWZpbmUgZXNwZWFrUkFURV9NSU5JTVVNCTgwCisjZGVmaW5lIGVzcGVha1JBVEVfTUFYSU1VTQk0NTAKKyNlbmRpZiAvKiBFU1BFQUtfQVBJX1JFVklTSU9OIDwgNiAqLworCitzdGF0aWMgaW50IG1heHJhdGUgPSBlc3BlYWtSQVRFX01BWElNVU07CisKK3N0YXRpYyB2b2lkCitzcGtfc2F5KFNwZWVjaFN5bnRoZXNpemVyICpzcGssIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZmZlciwgc2l6ZV90IGxlbmd0aCwgc2l6ZV90IGNvdW50LCBjb25zdCB1bnNpZ25lZCBjaGFyICphdHRyaWJ1dGVzKQoreworCWludCByZXN1bHQ7CisKKwkvKiBhZGQgMSB0byB0aGUgbGVuZ3RoIGluIG9yZGVyIHRvIHBhc3MgYWxvbmcgdGhlIHRyYWlsaW5nIHplcm8gKi8KKwlyZXN1bHQgPSBlc3BlYWtfU3ludGgoYnVmZmVyLCBsZW5ndGgrMSwgMCwgUE9TX0NIQVJBQ1RFUiwgMCwKKwkJCWVzcGVha0NIQVJTX1VURjgsIE5VTEwsICh2b2lkICopc3BrKTsKKwlpZiAocmVzdWx0ICE9IEVFX09LKQorCQlsb2dNZXNzYWdlKExPR19FUlIsICJlU3BlYWs6IFN5bnRoKCkgcmV0dXJuZWQgZXJyb3IgJWQiLCByZXN1bHQpOworfQorCitzdGF0aWMgdm9pZAorc3BrX211dGUoU3BlZWNoU3ludGhlc2l6ZXIgKnNwaykKK3sKKwllc3BlYWtfQ2FuY2VsKCk7Cit9CisKK3N0YXRpYyBpbnQgU3ludGhDYWxsYmFjayhzaG9ydCAqYXVkaW8sIGludCBudW1zYW1wbGVzLCBlc3BlYWtfRVZFTlQgKmV2ZW50cykKK3sKKwlTcGVlY2hTeW50aGVzaXplciAqc3BrID0gZXZlbnRzLT51c2VyX2RhdGE7CisKKwl3aGlsZSAoZXZlbnRzLT50eXBlICE9IGVzcGVha0VWRU5UX0xJU1RfVEVSTUlOQVRFRCkgeworCQlpZiAoZXZlbnRzLT50eXBlID09IGVzcGVha0VWRU5UX1dPUkQpCisJCQl0ZWxsU3BlZWNoTG9jYXRpb24oc3BrLCBldmVudHMtPnRleHRfcG9zaXRpb24gLSAxKTsKKwkJaWYgKGV2ZW50cy0+dHlwZSA9PSBlc3BlYWtFVkVOVF9NU0dfVEVSTUlOQVRFRCkKKwkJCXRlbGxTcGVlY2hGaW5pc2hlZChzcGspOworCQlldmVudHMrKzsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkCitzcGtfZHJhaW4oU3BlZWNoU3ludGhlc2l6ZXIgKnNwaykKK3sKKwllc3BlYWtfU3luY2hyb25pemUoKTsKK30KKworc3RhdGljIHZvaWQKK3Nwa19zZXRWb2x1bWUoU3BlZWNoU3ludGhlc2l6ZXIgKnNwaywgdW5zaWduZWQgY2hhciBzZXR0aW5nKQoreworCWludCB2b2x1bWUgPSBnZXRJbnRlZ2VyU3BlZWNoVm9sdW1lKHNldHRpbmcsIDUwKTsKKwllc3BlYWtfU2V0UGFyYW1ldGVyKGVzcGVha1ZPTFVNRSwgdm9sdW1lLCAwKTsKK30KKworc3RhdGljIHZvaWQKK3Nwa19zZXRSYXRlKFNwZWVjaFN5bnRoZXNpemVyICpzcGssIHVuc2lnbmVkIGNoYXIgc2V0dGluZykKK3sKKwlpbnQgaF9yYW5nZSA9IChtYXhyYXRlIC0gZXNwZWFrUkFURV9NSU5JTVVNKS8yOworCWludCByYXRlID0gZ2V0SW50ZWdlclNwZWVjaFJhdGUoc2V0dGluZywgaF9yYW5nZSkgKyBlc3BlYWtSQVRFX01JTklNVU07CisJZXNwZWFrX1NldFBhcmFtZXRlcihlc3BlYWtSQVRFLCByYXRlLCAwKTsKK30KKworc3RhdGljIHZvaWQKK3Nwa19zZXRQaXRjaChTcGVlY2hTeW50aGVzaXplciAqc3BrLCB1bnNpZ25lZCBjaGFyIHNldHRpbmcpCit7CisJaW50IHBpdGNoID0gZ2V0SW50ZWdlclNwZWVjaFBpdGNoKHNldHRpbmcsIDUwKTsKKwllc3BlYWtfU2V0UGFyYW1ldGVyKGVzcGVha1BJVENILCBwaXRjaCwgMCk7Cit9CisKK3N0YXRpYyB2b2lkCitzcGtfc2V0UHVuY3R1YXRpb24oU3BlZWNoU3ludGhlc2l6ZXIgKnNwaywgU3BlZWNoUHVuY3R1YXRpb24gc2V0dGluZykKK3sKKwllc3BlYWtfUFVOQ1RfVFlQRSBwdW5jdDsKKwlpZiAoc2V0dGluZyA8PSBTUEtfUFVOQ1RVQVRJT05fTk9ORSkKKwkJcHVuY3QgPSBlc3BlYWtQVU5DVF9OT05FOworCWVsc2UgaWYgKHNldHRpbmcgPj0gU1BLX1BVTkNUVUFUSU9OX0FMTCkKKwkJcHVuY3QgPSBlc3BlYWtQVU5DVF9BTEw7CisJZWxzZQorCQlwdW5jdCA9IGVzcGVha1BVTkNUX1NPTUU7CisJZXNwZWFrX1NldFBhcmFtZXRlcihlc3BlYWtQVU5DVFVBVElPTiwgcHVuY3QsIDApOworfQorCitzdGF0aWMgaW50IHNwa19jb25zdHJ1Y3QoU3BlZWNoU3ludGhlc2l6ZXIgKnNwaywgY2hhciAqKnBhcmFtZXRlcnMpCit7CisJY29uc3QgY2hhciAqZGF0YV9wYXRoLCAqdm9pY2VuYW1lLCAqcHVuY3RsaXN0OworCWludCByZXN1bHQ7CisKKwlzcGstPnNldFZvbHVtZSA9IHNwa19zZXRWb2x1bWU7CisJc3BrLT5zZXRSYXRlID0gc3BrX3NldFJhdGU7CisJc3BrLT5zZXRQaXRjaCA9IHNwa19zZXRQaXRjaDsKKwlzcGstPnNldFB1bmN0dWF0aW9uID0gc3BrX3NldFB1bmN0dWF0aW9uOworCXNway0+ZHJhaW4gPSBzcGtfZHJhaW47CisKKwlsb2dNZXNzYWdlKExPR19JTkZPLCAiZVNwZWFrIHZlcnNpb24gJXMiLCBlc3BlYWtfSW5mbyhOVUxMKSk7CisKKwlkYXRhX3BhdGggPSBwYXJhbWV0ZXJzW1BBUk1fUEFUSF07CisJaWYgKGRhdGFfcGF0aCAmJiAhKmRhdGFfcGF0aCkKKwkJZGF0YV9wYXRoID0gTlVMTDsKKwlyZXN1bHQgPSBlc3BlYWtfSW5pdGlhbGl6ZShBVURJT19PVVRQVVRfUExBWUJBQ0ssIDAsIGRhdGFfcGF0aCwgMCk7CisJaWYgKHJlc3VsdCA8IDApIHsKKwkJbG9nTWVzc2FnZShMT0dfRVJSLCAiZVNwZWFrOiBpbml0aWFsaXphdGlvbiBmYWlsZWQiKTsKKwkJcmV0dXJuIDA7CisJfQorCisJdm9pY2VuYW1lID0gcGFyYW1ldGVyc1tQQVJNX1ZPSUNFXTsKKwlpZighdm9pY2VuYW1lIHx8ICEqdm9pY2VuYW1lKQorCQl2b2ljZW5hbWUgPSAiZGVmYXVsdCI7CisJcmVzdWx0ID0gZXNwZWFrX1NldFZvaWNlQnlOYW1lKHZvaWNlbmFtZSk7CisJaWYgKHJlc3VsdCAhPSBFRV9PSykgeworCQllc3BlYWtfVk9JQ0Ugdm9pY2Vfc2VsZWN0OworCQltZW1zZXQoJnZvaWNlX3NlbGVjdCwgMCwgc2l6ZW9mKHZvaWNlX3NlbGVjdCkpOworCQl2b2ljZV9zZWxlY3QubGFuZ3VhZ2VzID0gdm9pY2VuYW1lOworCQlyZXN1bHQgPSBlc3BlYWtfU2V0Vm9pY2VCeVByb3BlcnRpZXMoJnZvaWNlX3NlbGVjdCk7CisJfQorCWlmIChyZXN1bHQgIT0gRUVfT0spIHsKKwkJbG9nTWVzc2FnZShMT0dfRVJSLCAiZVNwZWFrOiB1bmFibGUgdG8gbG9hZCB2b2ljZSAnJXMnIiwgdm9pY2VuYW1lKTsKKwkJcmV0dXJuIDA7CisJfQorCisJcHVuY3RsaXN0ID0gcGFyYW1ldGVyc1tQQVJNX1BVTkNUTElTVF07CisJaWYgKHB1bmN0bGlzdCAmJiAqcHVuY3RsaXN0KSB7CisJCXdjaGFyX3Qgd19wdW5jdGxpc3Rbc3RybGVuKHB1bmN0bGlzdCkgKyAxXTsKKwkJaW50IGkgPSAwOworCQl3aGlsZSAoKHdfcHVuY3RsaXN0W2ldID0gcHVuY3RsaXN0W2ldKSAhPSAwKSBpKys7CisJCWVzcGVha19TZXRQdW5jdHVhdGlvbkxpc3Qod19wdW5jdGxpc3QpOworCX0KKworCWlmIChwYXJhbWV0ZXJzW1BBUk1fTUFYUkFURV0pIHsKKwkJaW50IHZhbCA9IGF0b2kocGFyYW1ldGVyc1tQQVJNX01BWFJBVEVdKTsKKwkJaWYgKHZhbCA+IGVzcGVha1JBVEVfTUlOSU1VTSkgbWF4cmF0ZSA9IHZhbDsKKwl9CisKKwllc3BlYWtfU2V0U3ludGhDYWxsYmFjayhTeW50aENhbGxiYWNrKTsKKworCXJldHVybiAxOworfQorCitzdGF0aWMgdm9pZCBzcGtfZGVzdHJ1Y3QoU3BlZWNoU3ludGhlc2l6ZXIgKnNwaykKK3sKKwllc3BlYWtfQ2FuY2VsKCk7CisJZXNwZWFrX1Rlcm1pbmF0ZSgpOworfQpkaWZmIC0tZ2l0IGEvSGVhZGVycy9hZGRyZXNzZXMuaCBiL0hlYWRlcnMvYWRkcmVzc2VzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODk3Zjk5MQotLS0gL2Rldi9udWxsCisrKyBiL0hlYWRlcnMvYWRkcmVzc2VzLmgKQEAgLTAsMCArMSwzNCBAQAorLyoKKyAqIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisgKiAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisgKgorICogQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKKyNpZm5kZWYgQlJMVFRZX0lOQ0xVREVEX0FERFJFU1NFUworI2RlZmluZSBCUkxUVFlfSU5DTFVERURfQUREUkVTU0VTCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYgLyogX19jcGx1c3BsdXMgKi8KKworZXh0ZXJuIGNvbnN0IGNoYXIgKmdldEFkZHJlc3NOYW1lICh2b2lkICphZGRyZXNzLCBwdHJkaWZmX3QgKm9mZnNldCk7CitleHRlcm4gaW50IHNldEFkZHJlc3NOYW1lICh2b2lkICphZGRyZXNzLCBjb25zdCBjaGFyICpmb3JtYXQsIC4uLik7CitleHRlcm4gdm9pZCB1bnNldEFkZHJlc3NOYW1lICh2b2lkICphZGRyZXNzKTsKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYgLyogX19jcGx1c3BsdXMgKi8KKworI2VuZGlmIC8qIEJSTFRUWV9JTkNMVURFRF9BRERSRVNTRVMgKi8KZGlmZiAtLWdpdCBhL0hlYWRlcnMvYWxlcnQuaCBiL0hlYWRlcnMvYWxlcnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZTE5OWQxCi0tLSAvZGV2L251bGwKKysrIGIvSGVhZGVycy9hbGVydC5oCkBAIC0wLDAgKzEsODggQEAKKy8qCisgKiBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorICogICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorICoKKyAqIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorICoKKyAqIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyAqLworCisjaWZuZGVmIEJSTFRUWV9JTkNMVURFRF9BTEVSVAorI2RlZmluZSBCUkxUVFlfSU5DTFVERURfQUxFUlQKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZiAvKiBfX2NwbHVzcGx1cyAqLworCit0eXBlZGVmIGVudW0geworICBBTEVSVF9OT05FLAorCisgIEFMRVJUX0JSQUlMTEVfT04sCisgIEFMRVJUX0JSQUlMTEVfT0ZGLAorCisgIEFMRVJUX0NPTU1BTkRfRE9ORSwKKyAgQUxFUlRfQ09NTUFORF9SRUpFQ1RFRCwKKworICBBTEVSVF9NQVJLX1NFVCwKKworICBBTEVSVF9DTElQQk9BUkRfQkVHSU4sCisgIEFMRVJUX0NMSVBCT0FSRF9FTkQsCisKKyAgQUxFUlRfTk9fQ0hBTkdFLAorICBBTEVSVF9UT0dHTEVfT04sCisgIEFMRVJUX1RPR0dMRV9PRkYsCisKKyAgQUxFUlRfQ1VSU09SX0xJTktFRCwKKyAgQUxFUlRfQ1VSU09SX1VOTElOS0VELAorCisgIEFMRVJUX1NDUkVFTl9GUk9aRU4sCisgIEFMRVJUX1NDUkVFTl9VTkZST1pFTiwKKyAgQUxFUlRfRlJFRVpFX1JFTUlOREVSLAorCisgIEFMRVJUX1dSQVBfRE9XTiwKKyAgQUxFUlRfV1JBUF9VUCwKKworICBBTEVSVF9TS0lQX0ZJUlNULAorICBBTEVSVF9TS0lQX09ORSwKKyAgQUxFUlRfU0tJUF9TRVZFUkFMLAorICBBTEVSVF9CT1VOQ0UsCisKKyAgQUxFUlRfUk9VVElOR19TVEFSVEVELAorICBBTEVSVF9ST1VUSU5HX1NVQ0NFRURFRCwKKyAgQUxFUlRfUk9VVElOR19GQUlMRUQsCisKKyAgQUxFUlRfTU9ESUZJRVJfT05DRSwKKyAgQUxFUlRfTU9ESUZJRVJfTE9DSywKKyAgQUxFUlRfTU9ESUZJRVJfT0ZGLAorCisgIEFMRVJUX0NPTlNPTEVfQkVMTCwKKyAgQUxFUlRfS0VZU19BVVRPUkVMRUFTRUQsCisKKyAgQUxFUlRfU0NST0xMX1VQLAorCisgIEFMRVJUX0NPTlRFWFRfREVGQVVMVCwKKyAgQUxFUlRfQ09OVEVYVF9QRVJTSVNURU5ULAorICBBTEVSVF9DT05URVhUX1RFTVBPUkFSWSwKK30gQWxlcnRJZGVudGlmaWVyOworCitleHRlcm4gdm9pZCBhbGVydCAoQWxlcnRJZGVudGlmaWVyIGlkZW50aWZpZXIpOworCitleHRlcm4gaW50IHNob3dEb3RQYXR0ZXJuICh1bnNpZ25lZCBjaGFyIGRvdHMsIHVuc2lnbmVkIGNoYXIgZHVyYXRpb24pOworCitleHRlcm4gdm9pZCBzcGVha0FsZXJ0TWVzc2FnZShjb25zdCBjaGFyICptZXNzYWdlKTsKK2V4dGVybiB2b2lkIHNwZWFrQWxlcnRUZXh0KGNvbnN0IHdjaGFyX3QgKnRleHQpOworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZiAvKiBfX2NwbHVzcGx1cyAqLworCisjZW5kaWYgLyogQlJMVFRZX0lOQ0xVREVEX0FMRVJUICovCmRpZmYgLS1naXQgYS9IZWFkZXJzL2FzY2lpLmggYi9IZWFkZXJzL2FzY2lpLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGI2MmRmZQotLS0gL2Rldi9udWxsCisrKyBiL0hlYWRlcnMvYXNjaWkuaApAQCAtMCwwICsxLDY2IEBACisvKgorICogQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyAqICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyAqCisgKiBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorICoKKyAqIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyAqCisgKiBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisgKi8KKworI2lmbmRlZiBCUkxUVFlfSU5DTFVERURfQVNDSUkKKyNkZWZpbmUgQlJMVFRZX0lOQ0xVREVEX0FTQ0lJCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYgLyogX19jcGx1c3BsdXMgKi8KKwordHlwZWRlZiBlbnVtIHsKKyAgQVNDSUlfTlVMID0gMFgwMCwgLyogXkA6IE51bGwgQ2hhcmFjdGVyICovCisgIEFTQ0lJX1NPSCA9IDBYMDEsIC8qIF5BOiBTdGFydCBvZiBIZWFkZXIgKi8KKyAgQVNDSUlfU1RYID0gMFgwMiwgLyogXkI6IFN0YXJ0IG9mIFRleHQgKi8KKyAgQVNDSUlfRVRYID0gMFgwMywgLyogXkM6IEVuZCBvZiBUZXh0ICovCisgIEFTQ0lJX0VPVCA9IDBYMDQsIC8qIF5EOiBFbmQgb2YgVHJhbnNtaXNzaW9uICovCisgIEFTQ0lJX0VOUSA9IDBYMDUsIC8qIF5FOiBFbnF1aXJ5ICovCisgIEFTQ0lJX0FDSyA9IDBYMDYsIC8qIF5GOiBBY2tub3dsZWRnZW1lbnQgKi8KKyAgQVNDSUlfQkVMID0gMFgwNywgLyogXkc6IEJlbGwgKi8KKyAgQVNDSUlfQlMgPSAwWDA4LCAgLyogXkg6IEJhY2tTcGFjZSAqLworICBBU0NJSV9IVCA9IDBYMDksICAvKiBeSTogSG9yaXpvbnRhbCBUYWIgKENoYXJhY3RlciBUYWJ1bGF0aW9uKSAqLworICBBU0NJSV9MRiA9IDBYMEEsICAvKiBeSjogTGluZSBGZWVkICovCisgIEFTQ0lJX1ZUID0gMFgwQiwgIC8qIF5LOiBWZXJ0aWNhbCBUYWIgKExpbmUgVGFidWxhdGlvbikgKi8KKyAgQVNDSUlfRkYgPSAwWDBDLCAgLyogXkw6IEZvcm0gRmVlZCAqLworICBBU0NJSV9DUiA9IDBYMEQsICAvKiBeTTogQ2FycmlhZ2UgUmV0dXJuICovCisgIEFTQ0lJX1NPID0gMFgwRSwgIC8qIF5OOiBTaGlmdCBPdXQgKi8KKyAgQVNDSUlfU0kgPSAwWDBGLCAgLyogXk86IFNoaWZ0IEluICovCisgIEFTQ0lJX0RMRSA9IDBYMTAsIC8qIF5QOiBEYXRhIExpbmsgRXNjYXBlICovCisgIEFTQ0lJX0RDMSA9IDBYMTEsIC8qIF5ROiBEZXZpY2UgQ29udHJvbCBPbmUgKFgtT04pICovCisgIEFTQ0lJX0RDMiA9IDBYMTIsIC8qIF5SOiBEZXZpY2UgQ29udHJvbCBUd28gKi8KKyAgQVNDSUlfREMzID0gMFgxMywgLyogXlM6IERldmljZSBDb250cm9sIFRocmVlIChYLU9GRikgKi8KKyAgQVNDSUlfREM0ID0gMFgxNCwgLyogXlQ6IERldmljZSBDb250cm9sIEZvdXIgKi8KKyAgQVNDSUlfTkFLID0gMFgxNSwgLyogXlU6IE5lZ2F0aXZlIEFja25vd2xlZGdlbWVudCAqLworICBBU0NJSV9TWU4gPSAwWDE2LCAvKiBeVjogU3luY2hyb25vdXMgSWRsZSAqLworICBBU0NJSV9FVEIgPSAwWDE3LCAvKiBeVzogRW5kIG9mIFRyYW5zbWlzc2lvbiBCbG9jayAqLworICBBU0NJSV9DQU4gPSAwWDE4LCAvKiBeWDogQ2FuY2VsICovCisgIEFTQ0lJX0VNID0gMFgxOSwgIC8qIF5ZOiBFbmQgb2YgTWVkaXVtICovCisgIEFTQ0lJX1NVQiA9IDBYMUEsIC8qIF5aOiBTdWJzdGl0dXRlICovCisgIEFTQ0lJX0VTQyA9IDBYMUIsIC8qIF5bOiBFc2NhcGUgKi8KKyAgQVNDSUlfRlMgPSAwWDFDLCAgLyogXlw6IEZpbGUgU2VwYXJhdG9yIChGb3JtYXRpb24gU2VwYXJhdG9yIEZvdXIpICovCisgIEFTQ0lJX0dTID0gMFgxRCwgIC8qIF5dOiBHcm91cCBTZXBhcmF0b3IgKEZvcm1hdGlvbiBTZXBhcmF0b3IgVGhyZWUpICovCisgIEFTQ0lJX1JTID0gMFgxRSwgIC8qIF5eOiBSZWNvcmQgU2VwYXJhdG9yIChGb3JtYXRpb24gU2VwYXJhdG9yIFR3bykgKi8KKyAgQVNDSUlfVVMgPSAwWDFGLCAgLyogXl86IFVuaXQgU2VwYXJhdG9yIChGb3JtYXRpb24gU2VwYXJhdG9yIE9uZSkgKi8KKyAgQVNDSUlfREVMID0gMFg3RiAgLyogXj86IERlbGV0ZSAqLworfSBBc2NpaUNvbnRyb2xDaGFyYWN0ZXI7CisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmIC8qIF9fY3BsdXNwbHVzICovCisKKyNlbmRpZiAvKiBCUkxUVFlfSU5DTFVERURfQVNDSUkgKi8KZGlmZiAtLWdpdCBhL0hlYWRlcnMvYXN5bmNfYWxhcm0uaCBiL0hlYWRlcnMvYXN5bmNfYWxhcm0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OTYyZGU3Ci0tLSAvZGV2L251bGwKKysrIGIvSGVhZGVycy9hc3luY19hbGFybS5oCkBAIC0wLDAgKzEsNTEgQEAKKy8qCisgKiBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorICogICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorICoKKyAqIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorICoKKyAqIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyAqLworCisjaWZuZGVmIEJSTFRUWV9JTkNMVURFRF9BU1lOQ19BTEFSTQorI2RlZmluZSBCUkxUVFlfSU5DTFVERURfQVNZTkNfQUxBUk0KKworI2luY2x1ZGUgImFzeW5jX3R5cGVzX2FsYXJtLmgiCisjaW5jbHVkZSAiYXN5bmNfdHlwZXNfaGFuZGxlLmgiCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYgLyogX19jcGx1c3BsdXMgKi8KKworZXh0ZXJuIGludCBhc3luY05ld0Fic29sdXRlQWxhcm0gKAorICBBc3luY0hhbmRsZSAqaGFuZGxlLAorICBjb25zdCBUaW1lVmFsdWUgKnRpbWUsCisgIEFzeW5jQWxhcm1DYWxsYmFjayAqY2FsbGJhY2ssCisgIHZvaWQgKmRhdGEKKyk7CisKK2V4dGVybiBpbnQgYXN5bmNOZXdSZWxhdGl2ZUFsYXJtICgKKyAgQXN5bmNIYW5kbGUgKmhhbmRsZSwKKyAgaW50IG1pbGxpc2Vjb25kcywKKyAgQXN5bmNBbGFybUNhbGxiYWNrICpjYWxsYmFjaywKKyAgdm9pZCAqZGF0YQorKTsKKworZXh0ZXJuIGludCBhc3luY1Jlc2V0QWxhcm1UbyAoQXN5bmNIYW5kbGUgaGFuZGxlLCBjb25zdCBUaW1lVmFsdWUgKnRpbWUpOworZXh0ZXJuIGludCBhc3luY1Jlc2V0QWxhcm1JbiAoQXN5bmNIYW5kbGUgaGFuZGxlLCBpbnQgbWlsbGlzZWNvbmRzKTsKK2V4dGVybiBpbnQgYXN5bmNSZXNldEFsYXJtSW50ZXJ2YWwgKEFzeW5jSGFuZGxlIGhhbmRsZSwgaW50IG1pbGxpc2Vjb25kcyk7CisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmIC8qIF9fY3BsdXNwbHVzICovCisKKyNlbmRpZiAvKiBCUkxUVFlfSU5DTFVERURfQVNZTkNfQUxBUk0gKi8KZGlmZiAtLWdpdCBhL0hlYWRlcnMvYXN5bmNfZXZlbnQuaCBiL0hlYWRlcnMvYXN5bmNfZXZlbnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MTQ3M2FkCi0tLSAvZGV2L251bGwKKysrIGIvSGVhZGVycy9hc3luY19ldmVudC5oCkBAIC0wLDAgKzEsNDMgQEAKKy8qCisgKiBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorICogICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorICoKKyAqIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorICoKKyAqIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyAqLworCisjaWZuZGVmIEJSTFRUWV9JTkNMVURFRF9BU1lOQ19FVkVOVAorI2RlZmluZSBCUkxUVFlfSU5DTFVERURfQVNZTkNfRVZFTlQKKworI2luY2x1ZGUgImFzeW5jX3R5cGVzX2V2ZW50LmgiCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYgLyogX19jcGx1c3BsdXMgKi8KKworZXh0ZXJuIEFzeW5jRXZlbnQgKmFzeW5jTmV3RXZlbnQgKEFzeW5jRXZlbnRDYWxsYmFjayAqY2FsbGJhY2ssIHZvaWQgKmRhdGEpOworZXh0ZXJuIHZvaWQgYXN5bmNEaXNjYXJkRXZlbnQgKEFzeW5jRXZlbnQgKmV2ZW50KTsKK2V4dGVybiBpbnQgYXN5bmNTaWduYWxFdmVudCAoQXN5bmNFdmVudCAqZXZlbnQsIHZvaWQgKmRhdGEpOworCit0eXBlZGVmIEFzeW5jRXZlbnQgKkFzeW5jRXZlbnRDcmVhdG9yICh2b2lkICpkYXRhKTsKKworZXh0ZXJuIEFzeW5jRXZlbnQgKmFzeW5jR2V0UHJvZ3JhbUV2ZW50ICgKKyAgQXN5bmNFdmVudCAqKmV2ZW50LCBjb25zdCBjaGFyICpuYW1lLAorICBBc3luY0V2ZW50Q3JlYXRvciAqY3JlYXRlRXZlbnQsIHZvaWQgKmRhdGEKKyk7CisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmIC8qIF9fY3BsdXNwbHVzICovCisKKyNlbmRpZiAvKiBCUkxUVFlfSU5DTFVERURfQVNZTkNfRVZFTlQgKi8KZGlmZiAtLWdpdCBhL0hlYWRlcnMvYXN5bmNfaGFuZGxlLmggYi9IZWFkZXJzL2FzeW5jX2hhbmRsZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg0MzAzNWMKLS0tIC9kZXYvbnVsbAorKysgYi9IZWFkZXJzL2FzeW5jX2hhbmRsZS5oCkBAIC0wLDAgKzEsMzYgQEAKKy8qCisgKiBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorICogICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorICoKKyAqIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorICoKKyAqIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyAqLworCisjaWZuZGVmIEJSTFRUWV9JTkNMVURFRF9BU1lOQ19IQU5ETEUKKyNkZWZpbmUgQlJMVFRZX0lOQ0xVREVEX0FTWU5DX0hBTkRMRQorCisjaW5jbHVkZSAiYXN5bmNfdHlwZXNfaGFuZGxlLmgiCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYgLyogX19jcGx1c3BsdXMgKi8KKworZXh0ZXJuIGludCBhc3luY1Rlc3RIYW5kbGUgKEFzeW5jSGFuZGxlIGhhbmRsZSk7CitleHRlcm4gdm9pZCBhc3luY0Rpc2NhcmRIYW5kbGUgKEFzeW5jSGFuZGxlIGhhbmRsZSk7CitleHRlcm4gdm9pZCBhc3luY0NhbmNlbFJlcXVlc3QgKEFzeW5jSGFuZGxlIGhhbmRsZSk7CisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmIC8qIF9fY3BsdXNwbHVzICovCisKKyNlbmRpZiAvKiBCUkxUVFlfSU5DTFVERURfQVNZTkNfSEFORExFICovCmRpZmYgLS1naXQgYS9IZWFkZXJzL2FzeW5jX2lvLmggYi9IZWFkZXJzL2FzeW5jX2lvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTMyMGI0YwotLS0gL2Rldi9udWxsCisrKyBiL0hlYWRlcnMvYXN5bmNfaW8uaApAQCAtMCwwICsxLDk3IEBACisvKgorICogQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyAqICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyAqCisgKiBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorICoKKyAqIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyAqCisgKiBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisgKi8KKworI2lmbmRlZiBCUkxUVFlfSU5DTFVERURfQVNZTkNfSU8KKyNkZWZpbmUgQlJMVFRZX0lOQ0xVREVEX0FTWU5DX0lPCisKKyNpbmNsdWRlICJhc3luY190eXBlc19pby5oIgorI2luY2x1ZGUgImFzeW5jX3R5cGVzX2hhbmRsZS5oIgorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmIC8qIF9fY3BsdXNwbHVzICovCisKK2V4dGVybiBpbnQgYXN5bmNNb25pdG9yRmlsZUlucHV0ICgKKyAgQXN5bmNIYW5kbGUgKmhhbmRsZSwKKyAgRmlsZURlc2NyaXB0b3IgZmlsZURlc2NyaXB0b3IsCisgIEFzeW5jTW9uaXRvckNhbGxiYWNrICpjYWxsYmFjaywgdm9pZCAqZGF0YQorKTsKKworZXh0ZXJuIGludCBhc3luY01vbml0b3JTb2NrZXRJbnB1dCAoCisgIEFzeW5jSGFuZGxlICpoYW5kbGUsCisgIFNvY2tldERlc2NyaXB0b3Igc29ja2V0RGVzY3JpcHRvciwKKyAgQXN5bmNNb25pdG9yQ2FsbGJhY2sgKmNhbGxiYWNrLCB2b2lkICpkYXRhCispOworCitleHRlcm4gaW50IGFzeW5jTW9uaXRvckZpbGVPdXRwdXQgKAorICBBc3luY0hhbmRsZSAqaGFuZGxlLAorICBGaWxlRGVzY3JpcHRvciBmaWxlRGVzY3JpcHRvciwKKyAgQXN5bmNNb25pdG9yQ2FsbGJhY2sgKmNhbGxiYWNrLCB2b2lkICpkYXRhCispOworCitleHRlcm4gaW50IGFzeW5jTW9uaXRvclNvY2tldE91dHB1dCAoCisgIEFzeW5jSGFuZGxlICpoYW5kbGUsCisgIFNvY2tldERlc2NyaXB0b3Igc29ja2V0RGVzY3JpcHRvciwKKyAgQXN5bmNNb25pdG9yQ2FsbGJhY2sgKmNhbGxiYWNrLCB2b2lkICpkYXRhCispOworCitleHRlcm4gaW50IGFzeW5jTW9uaXRvckZpbGVBbGVydCAoCisgIEFzeW5jSGFuZGxlICpoYW5kbGUsCisgIEZpbGVEZXNjcmlwdG9yIGZpbGVEZXNjcmlwdG9yLAorICBBc3luY01vbml0b3JDYWxsYmFjayAqY2FsbGJhY2ssIHZvaWQgKmRhdGEKKyk7CisKK2V4dGVybiBpbnQgYXN5bmNNb25pdG9yU29ja2V0QWxlcnQgKAorICBBc3luY0hhbmRsZSAqaGFuZGxlLAorICBTb2NrZXREZXNjcmlwdG9yIHNvY2tldERlc2NyaXB0b3IsCisgIEFzeW5jTW9uaXRvckNhbGxiYWNrICpjYWxsYmFjaywgdm9pZCAqZGF0YQorKTsKKworZXh0ZXJuIGludCBhc3luY1JlYWRGaWxlICgKKyAgQXN5bmNIYW5kbGUgKmhhbmRsZSwKKyAgRmlsZURlc2NyaXB0b3IgZmlsZURlc2NyaXB0b3IsCisgIHNpemVfdCBzaXplLAorICBBc3luY0lucHV0Q2FsbGJhY2sgKmNhbGxiYWNrLCB2b2lkICpkYXRhCispOworCitleHRlcm4gaW50IGFzeW5jUmVhZFNvY2tldCAoCisgIEFzeW5jSGFuZGxlICpoYW5kbGUsCisgIFNvY2tldERlc2NyaXB0b3Igc29ja2V0RGVzY3JpcHRvciwKKyAgc2l6ZV90IHNpemUsCisgIEFzeW5jSW5wdXRDYWxsYmFjayAqY2FsbGJhY2ssIHZvaWQgKmRhdGEKKyk7CisKK2V4dGVybiBpbnQgYXN5bmNXcml0ZUZpbGUgKAorICBBc3luY0hhbmRsZSAqaGFuZGxlLAorICBGaWxlRGVzY3JpcHRvciBmaWxlRGVzY3JpcHRvciwKKyAgY29uc3Qgdm9pZCAqYnVmZmVyLCBzaXplX3Qgc2l6ZSwKKyAgQXN5bmNPdXRwdXRDYWxsYmFjayAqY2FsbGJhY2ssIHZvaWQgKmRhdGEKKyk7CisKK2V4dGVybiBpbnQgYXN5bmNXcml0ZVNvY2tldCAoCisgIEFzeW5jSGFuZGxlICpoYW5kbGUsCisgIFNvY2tldERlc2NyaXB0b3Igc29ja2V0RGVzY3JpcHRvciwKKyAgY29uc3Qgdm9pZCAqYnVmZmVyLCBzaXplX3Qgc2l6ZSwKKyAgQXN5bmNPdXRwdXRDYWxsYmFjayAqY2FsbGJhY2ssIHZvaWQgKmRhdGEKKyk7CisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmIC8qIF9fY3BsdXNwbHVzICovCisKKyNlbmRpZiAvKiBCUkxUVFlfSU5DTFVERURfQVNZTkNfSU8gKi8KZGlmZiAtLWdpdCBhL0hlYWRlcnMvYXN5bmNfc2lnbmFsLmggYi9IZWFkZXJzL2FzeW5jX3NpZ25hbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVjYTU3ZGIKLS0tIC9kZXYvbnVsbAorKysgYi9IZWFkZXJzL2FzeW5jX3NpZ25hbC5oCkBAIC0wLDAgKzEsMTIyIEBACisvKgorICogQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyAqICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyAqCisgKiBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorICoKKyAqIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyAqCisgKiBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisgKi8KKworI2lmbmRlZiBCUkxUVFlfSU5DTFVERURfQVNZTkNfU0lHTkFMCisjZGVmaW5lIEJSTFRUWV9JTkNMVURFRF9BU1lOQ19TSUdOQUwKKworI2luY2x1ZGUgInByb2xvZ3VlLmgiCisjaW5jbHVkZSAiYXN5bmNfdHlwZXNfaGFuZGxlLmgiCisKKyN1bmRlZiBBU1lOQ19DQU5fSEFORExFX1NJR05BTFMKKyN1bmRlZiBBU1lOQ19DQU5fQkxPQ0tfU0lHTkFMUworI3VuZGVmIEFTWU5DX0NBTl9NT05JVE9SX1NJR05BTFMKKyN1bmRlZiBBU1lOQ19DQU5fT0JUQUlOX1NJR05BTFMKKworI2lmZGVmIEhBVkVfU0lHTkFMX0gKKyNkZWZpbmUgQVNZTkNfQ0FOX0hBTkRMRV9TSUdOQUxTCisjaW5jbHVkZSA8c2lnbmFsLmg+CisKKyNpZmRlZiBTSUdfU0VUTUFTSworI2RlZmluZSBBU1lOQ19DQU5fQkxPQ0tfU0lHTkFMUworI2RlZmluZSBBU1lOQ19DQU5fTU9OSVRPUl9TSUdOQUxTCisKKyNpZmRlZiBTSUdSVE1JTgorI2RlZmluZSBBU1lOQ19DQU5fT0JUQUlOX1NJR05BTFMKKyNlbmRpZiAvKiBTSUdSVE1JTiAqLworI2VuZGlmIC8qIFNJR19TRVRNQVNLICovCisjZW5kaWYgLyogSEFWRV9TSUdOQUxfSCAqLworCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmIC8qIF9fY3BsdXNwbHVzICovCisKKyNpZmRlZiBBU1lOQ19DQU5fSEFORExFX1NJR05BTFMKKy8qIFR5cGUgc2lnaGFuZGxlcl90IGlzbid0IGRlZmluZWQgb24gYWxsIHBsYXRmb3Jtcy4gKi8KKyNkZWZpbmUgQVNZTkNfU0lHTkFMX0hBTkRMRVIobmFtZSkgdm9pZCBuYW1lIChpbnQgc2lnbmFsTnVtYmVyKQordHlwZWRlZiBBU1lOQ19TSUdOQUxfSEFORExFUihBc3luY1NpZ25hbEhhbmRsZXIpOworCitleHRlcm4gaW50IGFzeW5jSGFuZGxlU2lnbmFsIChpbnQgc2lnbmFsTnVtYmVyLCBBc3luY1NpZ25hbEhhbmRsZXIgKm5ld0hhbmRsZXIsIEFzeW5jU2lnbmFsSGFuZGxlciAqKm9sZEhhbmRsZXIpOworZXh0ZXJuIGludCBhc3luY0lnbm9yZVNpZ25hbCAoaW50IHNpZ25hbE51bWJlciwgQXN5bmNTaWduYWxIYW5kbGVyICoqb2xkSGFuZGxlcik7CitleHRlcm4gaW50IGFzeW5jUmV2ZXJ0U2lnbmFsIChpbnQgc2lnbmFsTnVtYmVyLCBBc3luY1NpZ25hbEhhbmRsZXIgKipvbGRIYW5kbGVyKTsKK2V4dGVybiBBU1lOQ19TSUdOQUxfSEFORExFUihhc3luY0VtcHR5U2lnbmFsSGFuZGxlcik7CisKKworI2lmZGVmIEFTWU5DX0NBTl9CTE9DS19TSUdOQUxTCitleHRlcm4gaW50IGFzeW5jU2V0U2lnbmFsQmxvY2tlZCAoaW50IHNpZ25hbE51bWJlciwgaW50IHN0YXRlKTsKK2V4dGVybiBpbnQgYXN5bmNJc1NpZ25hbEJsb2NrZWQgKGludCBzaWduYWxOdW1iZXIpOworCisjZGVmaW5lIEFTWU5DX1dJVEhfU0lHTkFMU19CTE9DS0VEX0ZVTkNUSU9OKG5hbWUpIHZvaWQgbmFtZSAodm9pZCAqZGF0YSkKK3R5cGVkZWYgQVNZTkNfV0lUSF9TSUdOQUxTX0JMT0NLRURfRlVOQ1RJT04oQXN5bmNXaXRoU2lnbmFsc0Jsb2NrZWRGdW5jdGlvbik7CisKK2V4dGVybiBpbnQgYXN5bmNXaXRoU2lnbmFsc0Jsb2NrZWQgKAorICBjb25zdCBzaWdzZXRfdCAqbWFzaywKKyAgQXN5bmNXaXRoU2lnbmFsc0Jsb2NrZWRGdW5jdGlvbiAqZnVuY3Rpb24sCisgIHZvaWQgKmRhdGEKKyk7CisKK2V4dGVybiBpbnQgYXN5bmNXaXRoU2lnbmFsQmxvY2tlZCAoCisgIGludCBudW1iZXIsCisgIEFzeW5jV2l0aFNpZ25hbHNCbG9ja2VkRnVuY3Rpb24gKmZ1bmN0aW9uLAorICB2b2lkICpkYXRhCispOworCitleHRlcm4gaW50IGFzeW5jV2l0aEFsbFNpZ25hbHNCbG9ja2VkICgKKyAgQXN5bmNXaXRoU2lnbmFsc0Jsb2NrZWRGdW5jdGlvbiAqZnVuY3Rpb24sCisgIHZvaWQgKmRhdGEKKyk7CisKK2V4dGVybiBpbnQgYXN5bmNXaXRoT2J0YWluYWJsZVNpZ25hbHNCbG9ja2VkICgKKyAgQXN5bmNXaXRoU2lnbmFsc0Jsb2NrZWRGdW5jdGlvbiAqZnVuY3Rpb24sCisgIHZvaWQgKmRhdGEKKyk7CisKK2V4dGVybiBpbnQgYXN5bmNCbG9ja09idGFpbmFibGVTaWduYWxzICh2b2lkKTsKKyNlbmRpZiAvKiBBU1lOQ19DQU5fQkxPQ0tfU0lHTkFMUyAqLworCisKKyNpZmRlZiBBU1lOQ19DQU5fTU9OSVRPUl9TSUdOQUxTCit0eXBlZGVmIHN0cnVjdCB7CisgIGludCBzaWduYWw7CisgIHZvaWQgKmRhdGE7Cit9IEFzeW5jU2lnbmFsQ2FsbGJhY2tQYXJhbWV0ZXJzOworCisjZGVmaW5lIEFTWU5DX1NJR05BTF9DQUxMQkFDSyhuYW1lKSBpbnQgbmFtZSAoY29uc3QgQXN5bmNTaWduYWxDYWxsYmFja1BhcmFtZXRlcnMgKnBhcmFtZXRlcnMpCit0eXBlZGVmIEFTWU5DX1NJR05BTF9DQUxMQkFDSyhBc3luY1NpZ25hbENhbGxiYWNrKTsKKworZXh0ZXJuIGludCBhc3luY01vbml0b3JTaWduYWwgKAorICBBc3luY0hhbmRsZSAqaGFuZGxlLCBpbnQgc2lnbmFsLAorICBBc3luY1NpZ25hbENhbGxiYWNrICpjYWxsYmFjaywgdm9pZCAqZGF0YQorKTsKKyNlbmRpZiAvKiBBU1lOQ19DQU5fTU9OSVRPUl9TSUdOQUxTICovCisKKworI2lmZGVmIEFTWU5DX0NBTl9PQlRBSU5fU0lHTkFMUworZXh0ZXJuIGludCBhc3luY0NsYWltU2lnbmFsTnVtYmVyIChpbnQgc2lnbmFsKTsKK2V4dGVybiBpbnQgYXN5bmNSZWxlYXNlU2lnbmFsTnVtYmVyIChpbnQgc2lnbmFsKTsKKworZXh0ZXJuIGludCBhc3luY09idGFpblNpZ25hbE51bWJlciAodm9pZCk7CitleHRlcm4gaW50IGFzeW5jUmVsaW5xdWlzaFNpZ25hbE51bWJlciAoaW50IHNpZ25hbCk7CisKKyNlbmRpZiAvKiBBU1lOQ19DQU5fT0JUQUlOX1NJR05BTFMgKi8KKyNlbmRpZiAvKiBBU1lOQ19DQU5fSEFORExFX1NJR05BTFMgKi8KKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYgLyogX19jcGx1c3BsdXMgKi8KKworI2VuZGlmIC8qIEJSTFRUWV9JTkNMVURFRF9BU1lOQ19TSUdOQUwgKi8KZGlmZiAtLWdpdCBhL0hlYWRlcnMvYXN5bmNfdGFzay5oIGIvSGVhZGVycy9hc3luY190YXNrLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmVlMGM1ZgotLS0gL2Rldi9udWxsCisrKyBiL0hlYWRlcnMvYXN5bmNfdGFzay5oCkBAIC0wLDAgKzEsNDAgQEAKKy8qCisgKiBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorICogICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorICoKKyAqIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorICoKKyAqIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyAqLworCisjaWZuZGVmIEJSTFRUWV9JTkNMVURFRF9BU1lOQ19UQVNLCisjZGVmaW5lIEJSTFRUWV9JTkNMVURFRF9BU1lOQ19UQVNLCisKKyNpbmNsdWRlICJhc3luY190eXBlc190YXNrLmgiCisjaW5jbHVkZSAiYXN5bmNfdHlwZXNfZXZlbnQuaCIKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZiAvKiBfX2NwbHVzcGx1cyAqLworCitleHRlcm4gaW50IGFzeW5jQWRkVGFzayAoCisgIEFzeW5jRXZlbnQgKmV2ZW50LAorICBBc3luY1Rhc2tDYWxsYmFjayAqY2FsbGJhY2ssIHZvaWQgKmRhdGEKKyk7CisKK2V4dGVybiBBc3luY0V2ZW50ICphc3luY05ld0FkZFRhc2tFdmVudCAodm9pZCk7CisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmIC8qIF9fY3BsdXNwbHVzICovCisKKyNlbmRpZiAvKiBCUkxUVFlfSU5DTFVERURfQVNZTkNfVEFTSyAqLwpkaWZmIC0tZ2l0IGEvSGVhZGVycy9hc3luY190eXBlc19hbGFybS5oIGIvSGVhZGVycy9hc3luY190eXBlc19hbGFybS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJlZTFlNWUKLS0tIC9kZXYvbnVsbAorKysgYi9IZWFkZXJzL2FzeW5jX3R5cGVzX2FsYXJtLmgKQEAgLTAsMCArMSw0MCBAQAorLyoKKyAqIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisgKiAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisgKgorICogQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKKyNpZm5kZWYgQlJMVFRZX0lOQ0xVREVEX0FTWU5DX1RZUEVTX0FMQVJNCisjZGVmaW5lIEJSTFRUWV9JTkNMVURFRF9BU1lOQ19UWVBFU19BTEFSTQorCisjaW5jbHVkZSAidGltaW5nX3R5cGVzLmgiCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYgLyogX19jcGx1c3BsdXMgKi8KKwordHlwZWRlZiBzdHJ1Y3QgeworICBjb25zdCBUaW1lVmFsdWUgKm5vdzsKKyAgdm9pZCAqZGF0YTsKK30gQXN5bmNBbGFybUNhbGxiYWNrUGFyYW1ldGVyczsKKworI2RlZmluZSBBU1lOQ19BTEFSTV9DQUxMQkFDSyhuYW1lKSB2b2lkIG5hbWUgKGNvbnN0IEFzeW5jQWxhcm1DYWxsYmFja1BhcmFtZXRlcnMgKnBhcmFtZXRlcnMpCit0eXBlZGVmIEFTWU5DX0FMQVJNX0NBTExCQUNLKEFzeW5jQWxhcm1DYWxsYmFjayk7CisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmIC8qIF9fY3BsdXNwbHVzICovCisKKyNlbmRpZiAvKiBCUkxUVFlfSU5DTFVERURfQVNZTkNfVFlQRVNfQUxBUk0gKi8KZGlmZiAtLWdpdCBhL0hlYWRlcnMvYXN5bmNfdHlwZXNfZXZlbnQuaCBiL0hlYWRlcnMvYXN5bmNfdHlwZXNfZXZlbnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NzM0NjJiCi0tLSAvZGV2L251bGwKKysrIGIvSGVhZGVycy9hc3luY190eXBlc19ldmVudC5oCkBAIC0wLDAgKzEsNDAgQEAKKy8qCisgKiBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorICogICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorICoKKyAqIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorICoKKyAqIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyAqLworCisjaWZuZGVmIEJSTFRUWV9JTkNMVURFRF9BU1lOQ19UWVBFU19FVkVOVAorI2RlZmluZSBCUkxUVFlfSU5DTFVERURfQVNZTkNfVFlQRVNfRVZFTlQKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZiAvKiBfX2NwbHVzcGx1cyAqLworCit0eXBlZGVmIHN0cnVjdCBBc3luY0V2ZW50U3RydWN0IEFzeW5jRXZlbnQ7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgdm9pZCAqZXZlbnREYXRhOworICB2b2lkICpzaWduYWxEYXRhOworfSBBc3luY0V2ZW50Q2FsbGJhY2tQYXJhbWV0ZXJzOworCisjZGVmaW5lIEFTWU5DX0VWRU5UX0NBTExCQUNLKG5hbWUpIHZvaWQgbmFtZSAoY29uc3QgQXN5bmNFdmVudENhbGxiYWNrUGFyYW1ldGVycyAqcGFyYW1ldGVycykKK3R5cGVkZWYgQVNZTkNfRVZFTlRfQ0FMTEJBQ0soQXN5bmNFdmVudENhbGxiYWNrKTsKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYgLyogX19jcGx1c3BsdXMgKi8KKworI2VuZGlmIC8qIEJSTFRUWV9JTkNMVURFRF9BU1lOQ19UWVBFU19FVkVOVCAqLwpkaWZmIC0tZ2l0IGEvSGVhZGVycy9hc3luY190eXBlc19oYW5kbGUuaCBiL0hlYWRlcnMvYXN5bmNfdHlwZXNfaGFuZGxlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzMxMDdhNgotLS0gL2Rldi9udWxsCisrKyBiL0hlYWRlcnMvYXN5bmNfdHlwZXNfaGFuZGxlLmgKQEAgLTAsMCArMSwzMiBAQAorLyoKKyAqIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisgKiAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisgKgorICogQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKKyNpZm5kZWYgQlJMVFRZX0lOQ0xVREVEX0FTWU5DX1RZUEVTX0hBTkRMRQorI2RlZmluZSBCUkxUVFlfSU5DTFVERURfQVNZTkNfVFlQRVNfSEFORExFCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYgLyogX19jcGx1c3BsdXMgKi8KKwordHlwZWRlZiBzdHJ1Y3QgQXN5bmNIYW5kbGVTdHJ1Y3QgKkFzeW5jSGFuZGxlOworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZiAvKiBfX2NwbHVzcGx1cyAqLworCisjZW5kaWYgLyogQlJMVFRZX0lOQ0xVREVEX0FTWU5DX1RZUEVTX0hBTkRMRSAqLwpkaWZmIC0tZ2l0IGEvSGVhZGVycy9hc3luY190eXBlc19pby5oIGIvSGVhZGVycy9hc3luY190eXBlc19pby5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdhMTY5YjAKLS0tIC9kZXYvbnVsbAorKysgYi9IZWFkZXJzL2FzeW5jX3R5cGVzX2lvLmgKQEAgLTAsMCArMSw2MCBAQAorLyoKKyAqIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisgKiAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisgKgorICogQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKKyNpZm5kZWYgQlJMVFRZX0lOQ0xVREVEX0FTWU5DX1RZUEVTX0lPCisjZGVmaW5lIEJSTFRUWV9JTkNMVURFRF9BU1lOQ19UWVBFU19JTworCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmIC8qIF9fY3BsdXNwbHVzICovCisKK3R5cGVkZWYgc3RydWN0IHsKKyAgdm9pZCAqZGF0YTsKKyAgaW50IGVycm9yOworfSBBc3luY01vbml0b3JDYWxsYmFja1BhcmFtZXRlcnM7CisKKyNkZWZpbmUgQVNZTkNfTU9OSVRPUl9DQUxMQkFDSyhuYW1lKSBpbnQgbmFtZSAoY29uc3QgQXN5bmNNb25pdG9yQ2FsbGJhY2tQYXJhbWV0ZXJzICpwYXJhbWV0ZXJzKQordHlwZWRlZiBBU1lOQ19NT05JVE9SX0NBTExCQUNLKEFzeW5jTW9uaXRvckNhbGxiYWNrKTsKKwordHlwZWRlZiBzdHJ1Y3QgeworICB2b2lkICpkYXRhOworICBjb25zdCB2b2lkICpidWZmZXI7CisgIHNpemVfdCBzaXplOworICBzaXplX3QgbGVuZ3RoOworICBpbnQgZXJyb3I7CisgIHVuc2lnbmVkIGNoYXIgZW5kIDogMTsKK30gQXN5bmNJbnB1dENhbGxiYWNrUGFyYW1ldGVyczsKKworI2RlZmluZSBBU1lOQ19JTlBVVF9DQUxMQkFDSyhuYW1lKSBzaXplX3QgbmFtZSAoY29uc3QgQXN5bmNJbnB1dENhbGxiYWNrUGFyYW1ldGVycyAqcGFyYW1ldGVycykKK3R5cGVkZWYgQVNZTkNfSU5QVVRfQ0FMTEJBQ0soQXN5bmNJbnB1dENhbGxiYWNrKTsKKwordHlwZWRlZiBzdHJ1Y3QgeworICB2b2lkICpkYXRhOworICBjb25zdCB2b2lkICpidWZmZXI7CisgIHNpemVfdCBzaXplOworICBpbnQgZXJyb3I7Cit9IEFzeW5jT3V0cHV0Q2FsbGJhY2tQYXJhbWV0ZXJzOworCisjZGVmaW5lIEFTWU5DX09VVFBVVF9DQUxMQkFDSyhuYW1lKSB2b2lkIG5hbWUgKGNvbnN0IEFzeW5jT3V0cHV0Q2FsbGJhY2tQYXJhbWV0ZXJzICpwYXJhbWV0ZXJzKQordHlwZWRlZiBBU1lOQ19PVVRQVVRfQ0FMTEJBQ0soQXN5bmNPdXRwdXRDYWxsYmFjayk7CisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmIC8qIF9fY3BsdXNwbHVzICovCisKKyNlbmRpZiAvKiBCUkxUVFlfSU5DTFVERURfQVNZTkNfVFlQRVNfSU8gKi8KZGlmZiAtLWdpdCBhL0hlYWRlcnMvYXN5bmNfdHlwZXNfdGFzay5oIGIvSGVhZGVycy9hc3luY190eXBlc190YXNrLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjBmZmI2MgotLS0gL2Rldi9udWxsCisrKyBiL0hlYWRlcnMvYXN5bmNfdHlwZXNfdGFzay5oCkBAIC0wLDAgKzEsMzMgQEAKKy8qCisgKiBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorICogICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorICoKKyAqIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorICoKKyAqIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyAqLworCisjaWZuZGVmIEJSTFRUWV9JTkNMVURFRF9BU1lOQ19UWVBFU19UQVNLCisjZGVmaW5lIEJSTFRUWV9JTkNMVURFRF9BU1lOQ19UWVBFU19UQVNLCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYgLyogX19jcGx1c3BsdXMgKi8KKworI2RlZmluZSBBU1lOQ19UQVNLX0NBTExCQUNLKG5hbWUpIHZvaWQgbmFtZSAodm9pZCAqZGF0YSkKK3R5cGVkZWYgQVNZTkNfVEFTS19DQUxMQkFDSyhBc3luY1Rhc2tDYWxsYmFjayk7CisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmIC8qIF9fY3BsdXNwbHVzICovCisKKyNlbmRpZiAvKiBCUkxUVFlfSU5DTFVERURfQVNZTkNfVFlQRVNfVEFTSyAqLwpkaWZmIC0tZ2l0IGEvSGVhZGVycy9hc3luY190eXBlc193YWl0LmggYi9IZWFkZXJzL2FzeW5jX3R5cGVzX3dhaXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kY2Y5MTk4Ci0tLSAvZGV2L251bGwKKysrIGIvSGVhZGVycy9hc3luY190eXBlc193YWl0LmgKQEAgLTAsMCArMSwzMyBAQAorLyoKKyAqIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisgKiAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisgKgorICogQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKKyNpZm5kZWYgQlJMVFRZX0lOQ0xVREVEX0FTWU5DX1RZUEVTX1dBSVQKKyNkZWZpbmUgQlJMVFRZX0lOQ0xVREVEX0FTWU5DX1RZUEVTX1dBSVQKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZiAvKiBfX2NwbHVzcGx1cyAqLworCisjZGVmaW5lIEFTWU5DX0NPTkRJVElPTl9URVNURVIobmFtZSkgaW50IG5hbWUgKHZvaWQgKmRhdGEpCit0eXBlZGVmIEFTWU5DX0NPTkRJVElPTl9URVNURVIoQXN5bmNDb25kaXRpb25UZXN0ZXIpOworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZiAvKiBfX2NwbHVzcGx1cyAqLworCisjZW5kaWYgLyogQlJMVFRZX0lOQ0xVREVEX0FTWU5DX1RZUEVTX1dBSVQgKi8KZGlmZiAtLWdpdCBhL0hlYWRlcnMvYXN5bmNfd2FpdC5oIGIvSGVhZGVycy9hc3luY193YWl0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmM2ZWRmNQotLS0gL2Rldi9udWxsCisrKyBiL0hlYWRlcnMvYXN5bmNfd2FpdC5oCkBAIC0wLDAgKzEsMzYgQEAKKy8qCisgKiBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorICogICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorICoKKyAqIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorICoKKyAqIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyAqLworCisjaWZuZGVmIEJSTFRUWV9JTkNMVURFRF9BU1lOQ19XQUlUCisjZGVmaW5lIEJSTFRUWV9JTkNMVURFRF9BU1lOQ19XQUlUCisKKyNpbmNsdWRlICJhc3luY190eXBlc193YWl0LmgiCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYgLyogX19jcGx1c3BsdXMgKi8KKworZXh0ZXJuIGludCBhc3luY0F3YWl0Q29uZGl0aW9uIChpbnQgdGltZW91dCwgQXN5bmNDb25kaXRpb25UZXN0ZXIgKnRlc3RDb25kaXRpb24sIHZvaWQgKmRhdGEpOworZXh0ZXJuIHZvaWQgYXN5bmNXYWl0IChpbnQgZHVyYXRpb24pOworZXh0ZXJuIHZvaWQgYXN5bmNXYWl0Rm9yIChBc3luY0NvbmRpdGlvblRlc3RlciAqdGVzdENvbmRpdGlvbiwgdm9pZCAqZGF0YSk7CisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmIC8qIF9fY3BsdXNwbHVzICovCisKKyNlbmRpZiAvKiBCUkxUVFlfSU5DTFVERURfQVNZTkNfV0FJVCAqLwpkaWZmIC0tZ2l0IGEvSGVhZGVycy9hdGIuaCBiL0hlYWRlcnMvYXRiLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjAzYTU4MAotLS0gL2Rldi9udWxsCisrKyBiL0hlYWRlcnMvYXRiLmgKQEAgLTAsMCArMSw0NiBAQAorLyoKKyAqIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisgKiAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisgKgorICogQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKKyNpZm5kZWYgQlJMVFRZX0lOQ0xVREVEX0FUQgorI2RlZmluZSBCUkxUVFlfSU5DTFVERURfQVRCCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYgLyogX19jcGx1c3BsdXMgKi8KKwordHlwZWRlZiBzdHJ1Y3QgQXR0cmlidXRlc1RhYmxlU3RydWN0IEF0dHJpYnV0ZXNUYWJsZTsKK2V4dGVybiBBdHRyaWJ1dGVzVGFibGUgKmF0dHJpYnV0ZXNUYWJsZTsKKworZXh0ZXJuIHZvaWQgbG9ja0F0dHJpYnV0ZXNUYWJsZSAodm9pZCk7CitleHRlcm4gdm9pZCB1bmxvY2tBdHRyaWJ1dGVzVGFibGUgKHZvaWQpOworCitleHRlcm4gQXR0cmlidXRlc1RhYmxlICpjb21waWxlQXR0cmlidXRlc1RhYmxlIChjb25zdCBjaGFyICpuYW1lKTsKK2V4dGVybiB2b2lkIGRlc3Ryb3lBdHRyaWJ1dGVzVGFibGUgKEF0dHJpYnV0ZXNUYWJsZSAqdGFibGUpOworCitleHRlcm4gY2hhciAqZW5zdXJlQXR0cmlidXRlc1RhYmxlRXh0ZW5zaW9uIChjb25zdCBjaGFyICpwYXRoKTsKK2V4dGVybiBjaGFyICptYWtlQXR0cmlidXRlc1RhYmxlUGF0aCAoY29uc3QgY2hhciAqZGlyZWN0b3J5LCBjb25zdCBjaGFyICpuYW1lKTsKKworZXh0ZXJuIGludCByZXBsYWNlQXR0cmlidXRlc1RhYmxlIChjb25zdCBjaGFyICpkaXJlY3RvcnksIGNvbnN0IGNoYXIgKm5hbWUpOworCitleHRlcm4gdW5zaWduZWQgY2hhciBjb252ZXJ0QXR0cmlidXRlc1RvRG90cyAoQXR0cmlidXRlc1RhYmxlICp0YWJsZSwgdW5zaWduZWQgY2hhciBhdHRyaWJ1dGVzKTsKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYgLyogX19jcGx1c3BsdXMgKi8KKworI2VuZGlmIC8qIEJSTFRUWV9JTkNMVURFRF9BVEIgKi8KZGlmZiAtLWdpdCBhL0hlYWRlcnMvYXV0aC5oIGIvSGVhZGVycy9hdXRoLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWNlOWViZgotLS0gL2Rldi9udWxsCisrKyBiL0hlYWRlcnMvYXV0aC5oCkBAIC0wLDAgKzEsNDEgQEAKKy8qCisgKiBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorICogICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorICoKKyAqIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorICoKKyAqIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyAqLworCisjaWZuZGVmIEJSTFRUWV9JTkNMVURFRF9BVVRICisjZGVmaW5lIEJSTFRUWV9JTkNMVURFRF9BVVRICisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYgLyogX19jcGx1c3BsdXMgKi8KKwordHlwZWRlZiBzdHJ1Y3QgQXV0aERlc2NyaXB0b3JTdHJ1Y3QgQXV0aERlc2NyaXB0b3I7CitleHRlcm4gQXV0aERlc2NyaXB0b3IgKmF1dGhCZWdpbkNsaWVudCAoY29uc3QgY2hhciAqcGFyYW1ldGVyKTsKK2V4dGVybiBBdXRoRGVzY3JpcHRvciAqYXV0aEJlZ2luU2VydmVyIChjb25zdCBjaGFyICpwYXJhbWV0ZXIpOworZXh0ZXJuIHZvaWQgYXV0aEVuZCAoQXV0aERlc2NyaXB0b3IgKmF1dGgpOworZXh0ZXJuIGludCBhdXRoUGVyZm9ybSAoQXV0aERlc2NyaXB0b3IgKmF1dGgsIEZpbGVEZXNjcmlwdG9yIGZkKTsKKworZXh0ZXJuIHZvaWQgZm9ybWF0QWRkcmVzcyAoCisgIGNoYXIgKmJ1ZmZlciwgc2l6ZV90IGJ1ZmZlclNpemUsCisgIGNvbnN0IHZvaWQgKmFkZHJlc3MsIHNvY2tsZW5fdCBhZGRyZXNzU2l6ZQorKTsKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYgLyogX19jcGx1c3BsdXMgKi8KKworI2VuZGlmIC8qIEJSTFRUWV9JTkNMVURFRF9BVVRIICovCmRpZmYgLS1naXQgYS9IZWFkZXJzL2JlZXAuaCBiL0hlYWRlcnMvYmVlcC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjljNjljMGIKLS0tIC9kZXYvbnVsbAorKysgYi9IZWFkZXJzL2JlZXAuaApAQCAtMCwwICsxLDQyIEBACisvKgorICogQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyAqICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyAqCisgKiBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorICoKKyAqIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyAqCisgKiBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisgKi8KKworI2lmbmRlZiBCUkxUVFlfSU5DTFVERURfQkVFUAorI2RlZmluZSBCUkxUVFlfSU5DTFVERURfQkVFUAorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmIC8qIF9fY3BsdXNwbHVzICovCisKK3R5cGVkZWYgdWludDE2X3QgQmVlcEZyZXF1ZW5jeTsKK3R5cGVkZWYgdWludDE2X3QgQmVlcER1cmF0aW9uOworCitleHRlcm4gaW50IHBsYXlCZWVwIChCZWVwRnJlcXVlbmN5IGZyZXF1ZW5jeSwgQmVlcER1cmF0aW9uIGR1cmF0aW9uKTsKKworZXh0ZXJuIGludCBjYW5CZWVwICh2b2lkKTsKK2V4dGVybiBpbnQgc3luY2hyb25vdXNCZWVwIChCZWVwRnJlcXVlbmN5IGZyZXF1ZW5jeSwgQmVlcER1cmF0aW9uIGR1cmF0aW9uKTsKK2V4dGVybiBpbnQgYXN5bmNocm9ub3VzQmVlcCAoQmVlcEZyZXF1ZW5jeSBmcmVxdWVuY3ksIEJlZXBEdXJhdGlvbiBkdXJhdGlvbik7CitleHRlcm4gaW50IHN0YXJ0QmVlcCAoQmVlcEZyZXF1ZW5jeSBmcmVxdWVuY3kpOworZXh0ZXJuIGludCBzdG9wQmVlcCAodm9pZCk7CitleHRlcm4gdm9pZCBlbmRCZWVwICh2b2lkKTsKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYgLyogX19jcGx1c3BsdXMgKi8KKworI2VuZGlmIC8qIEJSTFRUWV9JTkNMVURFRF9CRUVQICovCmRpZmYgLS1naXQgYS9IZWFkZXJzL2JlbGwuaCBiL0hlYWRlcnMvYmVsbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcxZDFkY2MKLS0tIC9kZXYvbnVsbAorKysgYi9IZWFkZXJzL2JlbGwuaApAQCAtMCwwICsxLDM3IEBACisvKgorICogQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyAqICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyAqCisgKiBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorICoKKyAqIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyAqCisgKiBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisgKi8KKworI2lmbmRlZiBCUkxUVFlfSU5DTFVERURfQkVMTAorI2RlZmluZSBCUkxUVFlfSU5DTFVERURfQkVMTAorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmIC8qIF9fY3BsdXNwbHVzICovCisKK2V4dGVybiBpbnQgc2V0Q29uc29sZUJlbGxNb25pdG9yaW5nIChpbnQgb24pOworZXh0ZXJuIHZvaWQgYWxlcnRDb25zb2xlQmVsbCAodm9pZCk7CisKK2V4dGVybiBpbnQgY2FuTW9uaXRvckNvbnNvbGVCZWxsICh2b2lkKTsKK2V4dGVybiBpbnQgc3RhcnRNb25pdG9yaW5nQ29uc29sZUJlbGwgKHZvaWQpOworZXh0ZXJuIHZvaWQgc3RvcE1vbml0b3JpbmdDb25zb2xlQmVsbCAodm9pZCk7CisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmIC8qIF9fY3BsdXNwbHVzICovCisKKyNlbmRpZiAvKiBCUkxUVFlfSU5DTFVERURfQkVMTCAqLwpkaWZmIC0tZ2l0IGEvSGVhZGVycy9iaXRmaWVsZC5oIGIvSGVhZGVycy9iaXRmaWVsZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZmMmQ4M2MKLS0tIC9kZXYvbnVsbAorKysgYi9IZWFkZXJzL2JpdGZpZWxkLmgKQEAgLTAsMCArMSwxMDYgQEAKKy8qCisgKiBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorICogICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorICoKKyAqIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorICoKKyAqIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyAqLworCisjaWZuZGVmIEJSTFRUWV9JTkNMVURFRF9CSVRGSUVMRAorI2RlZmluZSBCUkxUVFlfSU5DTFVERURfQklURklFTEQKKworI2luY2x1ZGUgInByb2xvZ3VlLmgiCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYgLyogX19jcGx1c3BsdXMgKi8KKworI2RlZmluZSBISUdIX05JQkJMRShieXRlKSAoKGJ5dGUpICYgMFhGMCkKKyNkZWZpbmUgTE9XX05JQkJMRShieXRlKSAoKGJ5dGUpICYgMFhGKQorCitzdGF0aWMgaW5saW5lIHZvaWQKK3N3YXBCeXRlcyAodW5zaWduZWQgY2hhciAqYnl0ZTEsIHVuc2lnbmVkIGNoYXIgKmJ5dGUyKSB7CisgIHVuc2lnbmVkIGNoYXIgYnl0ZSA9ICpieXRlMTsKKyAgKmJ5dGUxID0gKmJ5dGUyOworICAqYnl0ZTIgPSBieXRlOworfQorCit0eXBlZGVmIHVuaW9uIHsKKyAgdWludDhfdCBieXRlc1swXTsKKyAgdWludDE2X3QgdTE2OworICB1aW50MzJfdCB1MzI7CisgIHVpbnQ2NF90IHU2NDsKK30gQnl0ZXNPdmVybGF5OworCisjZGVmaW5lIEdFVF9FTkRJQU5fRlVOQ1RJT04od2hpY2gsIGJpdHMpIFwKKyAgc3RhdGljIGlubGluZSB1aW50IyNiaXRzIyNfdCBnZXQjI3doaWNoIyNFbmRpYW4jI2JpdHMgKHVpbnQjI2JpdHMjI190IGZyb20pCisKKyNkZWZpbmUgUFVUX0VORElBTl9GVU5DVElPTih3aGljaCwgYml0cykgXAorICBzdGF0aWMgaW5saW5lIHZvaWQgcHV0IyN3aGljaCMjRW5kaWFuIyNiaXRzICh1aW50IyNiaXRzIyNfdCAqdG8sIHVpbnQjI2JpdHMjI190IGZyb20pCisKKyNkZWZpbmUgREVGSU5FX1BIWVNJQ0FMX0VORElBTl9GVU5DVElPTlMoYml0cykgXAorICBHRVRfRU5ESUFOX0ZVTkNUSU9OKE5hdGl2ZSwgYml0cykgeyBcCisgICAgcmV0dXJuIGZyb207IFwKKyAgfSBcCisgIFwKKyAgR0VUX0VORElBTl9GVU5DVElPTihPdGhlciwgYml0cykgeyBcCisgICAgQnl0ZXNPdmVybGF5IG92ZXJsYXkgPSB7LnUjI2JpdHMgPSBmcm9tfTsgXAorICAgIHVpbnQ4X3QgKmZpcnN0ID0gb3ZlcmxheS5ieXRlczsgXAorICAgIHVpbnQ4X3QgKnNlY29uZCA9IGZpcnN0ICsgKGJpdHMgLyA4KTsgXAorICAgIFwKKyAgICBkbyB7IFwKKyAgICAgIHN3YXBCeXRlcyhmaXJzdCsrLCAtLXNlY29uZCk7IFwKKyAgICB9IHdoaWxlIChmaXJzdCAhPSBzZWNvbmQpOyBcCisgICAgXAorICAgIHJldHVybiBvdmVybGF5LnUjI2JpdHM7IFwKKyAgfSBcCisgIFwKKyAgUFVUX0VORElBTl9GVU5DVElPTihOYXRpdmUsIGJpdHMpIHsgXAorICAgICp0byA9IGdldE5hdGl2ZUVuZGlhbiMjYml0cyhmcm9tKTsgXAorICB9IFwKKyAgXAorICBQVVRfRU5ESUFOX0ZVTkNUSU9OKE90aGVyLCBiaXRzKSB7IFwKKyAgICAqdG8gPSBnZXRPdGhlckVuZGlhbiMjYml0cyhmcm9tKTsgXAorICB9CisKK0RFRklORV9QSFlTSUNBTF9FTkRJQU5fRlVOQ1RJT05TKDE2KQorREVGSU5FX1BIWVNJQ0FMX0VORElBTl9GVU5DVElPTlMoMzIpCitERUZJTkVfUEhZU0lDQUxfRU5ESUFOX0ZVTkNUSU9OUyg2NCkKKworI2RlZmluZSBERUZJTkVfRU5ESUFOX0ZVTkNUSU9OU19GT1JfQklUUyhiaXRzLCBsb2dpY2FsLCBwaHlzaWNhbCkgXAorICBHRVRfRU5ESUFOX0ZVTkNUSU9OKGxvZ2ljYWwsIGJpdHMpIHsgXAorICAgIHJldHVybiBnZXQjI3BoeXNpY2FsIyNFbmRpYW4jI2JpdHMoZnJvbSk7IFwKKyAgfSBcCisgIFwKKyAgUFVUX0VORElBTl9GVU5DVElPTihsb2dpY2FsLCBiaXRzKSB7IFwKKyAgICBwdXQjI3BoeXNpY2FsIyNFbmRpYW4jI2JpdHModG8sIGZyb20pOyBcCisgIH0KKworI2RlZmluZSBERUZJTkVfRU5ESUFOX0ZVTkNUSU9OUyhsb2dpY2FsLCBwaHlzaWNhbCkgXAorICBERUZJTkVfRU5ESUFOX0ZVTkNUSU9OU19GT1JfQklUUygxNiwgbG9naWNhbCwgcGh5c2ljYWwpIFwKKyAgREVGSU5FX0VORElBTl9GVU5DVElPTlNfRk9SX0JJVFMoMzIsIGxvZ2ljYWwsIHBoeXNpY2FsKSBcCisgIERFRklORV9FTkRJQU5fRlVOQ1RJT05TX0ZPUl9CSVRTKDY0LCBsb2dpY2FsLCBwaHlzaWNhbCkKKworI2lmZGVmIFdPUkRTX0JJR0VORElBTgorICBERUZJTkVfRU5ESUFOX0ZVTkNUSU9OUyhMaXR0bGUsIE90aGVyKQorICBERUZJTkVfRU5ESUFOX0ZVTkNUSU9OUyhCaWcsIE5hdGl2ZSkKKyNlbHNlIC8qIFdPUkRTX0JJR0VORElBTiAqLworICBERUZJTkVfRU5ESUFOX0ZVTkNUSU9OUyhMaXR0bGUsIE5hdGl2ZSkKKyAgREVGSU5FX0VORElBTl9GVU5DVElPTlMoQmlnLCBPdGhlcikKKyNlbmRpZiAvKiBXT1JEU19CSUdFTkRJQU4gKi8KKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYgLyogX19jcGx1c3BsdXMgKi8KKworI2VuZGlmIC8qIEJSTFRUWV9JTkNMVURFRF9CSVRGSUVMRCAqLwpkaWZmIC0tZ2l0IGEvSGVhZGVycy9iaXRtYXNrLmggYi9IZWFkZXJzL2JpdG1hc2suaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lOTY5NDJiCi0tLSAvZGV2L251bGwKKysrIGIvSGVhZGVycy9iaXRtYXNrLmgKQEAgLTAsMCArMSw2OCBAQAorLyoKKyAqIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisgKiAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisgKgorICogQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKKyNpZm5kZWYgQlJMVFRZX0lOQ0xVREVEX0JJVE1BU0sKKyNkZWZpbmUgQlJMVFRZX0lOQ0xVREVEX0JJVE1BU0sKKworI2luY2x1ZGUgInByb2xvZ3VlLmgiCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYgLyogX19jcGx1c3BsdXMgKi8KKworLyogVGhlc2UgbWFjcm9zIGFyZSBtZWFudCBmb3IgaW50ZXJuYWwgdXNlIG9ubHkuICovCisjZGVmaW5lIEJJVE1BU0tfRUxFTUVOVF9TSVpFKGVsZW1lbnQpIChzaXplb2YoZWxlbWVudCkgKiA4KQorI2RlZmluZSBCSVRNQVNLX0lOREVYKGJpdCxzaXplKSAoKGJpdCkgLyAoc2l6ZSkpCisjZGVmaW5lIEJJVE1BU0tfU0hJRlQoYml0LHNpemUpICgoYml0KSAlIChzaXplKSkKKyNkZWZpbmUgQklUTUFTS19FTEVNRU5UX0NPVU5UKGJpdHMsc2l6ZSkgKEJJVE1BU0tfSU5ERVgoKGJpdHMpLTEsIChzaXplKSkgKyAxKQorI2RlZmluZSBCSVRNQVNLX0VMRU1FTlQobmFtZSxiaXQpICgobmFtZSlbQklUTUFTS19JTkRFWCgoYml0KSwgQklUTUFTS19FTEVNRU5UX1NJWkUoKG5hbWUpWzBdKSldKQorI2RlZmluZSBCSVRNQVNLX0JJVChuYW1lLGJpdCkgKFVJTlRNQVhfQygxKSA8PCBCSVRNQVNLX1NISUZUKChiaXQpLCBCSVRNQVNLX0VMRU1FTlRfU0laRSgobmFtZSlbMF0pKSkKKworLyogVGhlc2UgbWFjcm9zIGFyZSBmb3IgcHVibGljIHVzZS4gKi8KKyNkZWZpbmUgQklUTUFTSyhuYW1lLGJpdHMsdHlwZSkgdW5zaWduZWQgdHlwZSBuYW1lW0JJVE1BU0tfRUxFTUVOVF9DT1VOVCgoYml0cyksIEJJVE1BU0tfRUxFTUVOVF9TSVpFKHR5cGUpKV0KKyNkZWZpbmUgQklUTUFTS19TSVpFKG5hbWUpIEJJVE1BU0tfRUxFTUVOVF9TSVpFKChuYW1lKSkKKyNkZWZpbmUgQklUTUFTS19aRVJPKG5hbWUpIG1lbXNldCgobmFtZSksIDAsIHNpemVvZihuYW1lKSkKKyNkZWZpbmUgQklUTUFTS19DTEVBUihuYW1lLGJpdCkgKEJJVE1BU0tfRUxFTUVOVCgobmFtZSksIChiaXQpKSAmPSB+QklUTUFTS19CSVQoKG5hbWUpLCAoYml0KSkpCisjZGVmaW5lIEJJVE1BU0tfU0VUKG5hbWUsYml0KSAoQklUTUFTS19FTEVNRU5UKChuYW1lKSwgKGJpdCkpIHw9IEJJVE1BU0tfQklUKChuYW1lKSwgKGJpdCkpKQorI2RlZmluZSBCSVRNQVNLX1RFU1QobmFtZSxiaXQpIChCSVRNQVNLX0VMRU1FTlQoKG5hbWUpLCAoYml0KSkgJiBCSVRNQVNLX0JJVCgobmFtZSksIChiaXQpKSkKKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBjaGFyCitwb3Bjb3VudCAodW5zaWduZWQgaW50IGJpdHMpIHsKKyNpZmRlZiBIQVZFX0JVSUxUSU5fUE9QQ09VTlQKKyAgcmV0dXJuIF9fYnVpbHRpbl9wb3Bjb3VudChiaXRzKTsKKyNlbHNlIC8qIF9fYnVpbHRpbl9wb3Bjb3VudCAqLworICB1bnNpZ25lZCBjaGFyIGNvdW50ID0gMDsKKworICB3aGlsZSAoYml0cykgeworICAgIGlmIChiaXRzICYgMFgxKSBjb3VudCArPSAxOworICAgIGJpdHMgPj49IDE7CisgIH0KKworICByZXR1cm4gY291bnQ7CisjZW5kaWYgLyogX19idWlsdGluX3BvcGNvdW50ICovCit9CisKKyNkZWZpbmUgQklUTUFTS19DT1VOVChuYW1lLHZhcmlhYmxlKSBcCit1bnNpZ25lZCBpbnQgdmFyaWFibGUgPSAwOyBcCitmb3IgKGludCBpPTA7IGk8QVJSQVlfQ09VTlQobmFtZSk7IGkrPTEpIHZhcmlhYmxlICs9IHBvcGNvdW50KG5hbWVbaV0pOworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZiAvKiBfX2NwbHVzcGx1cyAqLworCisjZW5kaWYgLyogQlJMVFRZX0lOQ0xVREVEX0JJVE1BU0sgKi8KZGlmZiAtLWdpdCBhL0hlYWRlcnMvYnJsX2Jhc2UuaCBiL0hlYWRlcnMvYnJsX2Jhc2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNzkwYzNjCi0tLSAvZGV2L251bGwKKysrIGIvSGVhZGVycy9icmxfYmFzZS5oCkBAIC0wLDAgKzEsMjUxIEBACisvKgorICogQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyAqICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyAqCisgKiBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorICoKKyAqIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyAqCisgKiBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisgKi8KKworI2lmbmRlZiBCUkxUVFlfSU5DTFVERURfQlJMX0JBU0UKKyNkZWZpbmUgQlJMVFRZX0lOQ0xVREVEX0JSTF9CQVNFCisKKyNpbmNsdWRlICJicmxfdHlwZXMuaCIKKyNpbmNsdWRlICJnaW9fdHlwZXMuaCIKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZiAvKiBfX2NwbHVzcGx1cyAqLworCisjZGVmaW5lIEtFWV9UQUJMRV9MSVNUX1JFRkVSRU5DRSBjb25zdCBLZXlUYWJsZURlZmluaXRpb24gKmNvbnN0ICoKKyNkZWZpbmUgS0VZX1RBQkxFX0xJU1RfU1lNQk9MIENPTkNBVEVOQVRFKGJybF9rdGJfLERSSVZFUl9DT0RFKQorI2RlZmluZSBLRVlfVEFCTEVfTElTVF9ERUNMQVJBVElPTiBjb25zdCBLZXlUYWJsZURlZmluaXRpb24gKmNvbnN0IEtFWV9UQUJMRV9MSVNUX1NZTUJPTFtdCisjZGVmaW5lIExBU1RfS0VZX1RBQkxFX0RFRklOSVRJT04gTlVMTAorI2RlZmluZSBCRUdJTl9LRVlfVEFCTEVfTElTVCBcCisgIGV4dGVybiBLRVlfVEFCTEVfTElTVF9ERUNMQVJBVElPTjsgXAorICBLRVlfVEFCTEVfTElTVF9ERUNMQVJBVElPTiA9IHsKKyNkZWZpbmUgRU5EX0tFWV9UQUJMRV9MSVNUIExBU1RfS0VZX1RBQkxFX0RFRklOSVRJT059OworCisjZGVmaW5lIEJSTF9LRVlfR1JPVVAoZHJ2LGdycCkgZHJ2ICMjIF9HUlBfICMjIGdycAorI2RlZmluZSBCUkxfS0VZX05BTUUoZHJ2LGdycCxrZXkpIGRydiAjIyBfICMjIGdycCAjIyBfICMjIGtleQorCisjZGVmaW5lIEJSTF9LRVlfR1JPVVBfRU5UUlkoZHJ2LGdycCxuYW0pIEtFWV9HUk9VUF9FTlRSWShCUkxfS0VZX0dST1VQKGRydiwgZ3JwKSwgbmFtKQorI2RlZmluZSBCUkxfS0VZX05VTUJFUl9FTlRSWShkcnYsZ3JwLG51bSxuYW0pIHsudmFsdWU9ey5ncm91cD1CUkxfS0VZX0dST1VQKGRydiwgZ3JwKSwgLm51bWJlcj0obnVtKX0sIC5uYW1lPW5hbX0KKyNkZWZpbmUgQlJMX0tFWV9OQU1FX0VOVFJZKGRydixncnAsa2V5LG5hbSkgQlJMX0tFWV9OVU1CRVJfRU5UUlkoZHJ2LCBncnAsIEJSTF9LRVlfTkFNRShkcnYsIGdycCwga2V5KSwgbmFtKQorCitzdGF0aWMgaW5saW5lIHZvaWQKK3NldEJyYWlsbGVLZXlUYWJsZSAoQnJhaWxsZURpc3BsYXkgKmJybCwgY29uc3QgS2V5VGFibGVEZWZpbml0aW9uICprdGQpIHsKKyAgYnJsLT5rZXlCaW5kaW5ncyA9IGt0ZC0+YmluZGluZ3M7CisgIGJybC0+a2V5TmFtZXMgPSBrdGQtPm5hbWVzOworfQorCisjZGVmaW5lIFRSQU5TTEFUSU9OX1RBQkxFX1NJWkUgMFgxMDAKK3R5cGVkZWYgdW5zaWduZWQgY2hhciBUcmFuc2xhdGlvblRhYmxlW1RSQU5TTEFUSU9OX1RBQkxFX1NJWkVdOworCisjZGVmaW5lIERPVFNfVEFCTEVfU0laRSA4Cit0eXBlZGVmIHVuc2lnbmVkIGNoYXIgRG90c1RhYmxlW0RPVFNfVEFCTEVfU0laRV07CisKK2V4dGVybiBjb25zdCBEb3RzVGFibGUgZG90c1RhYmxlX0lTTzExNTQ4XzE7CitleHRlcm4gY29uc3QgRG90c1RhYmxlIGRvdHNUYWJsZV9yb3RhdGVkOworCitleHRlcm4gdm9pZCBtYWtlVHJhbnNsYXRpb25UYWJsZSAoY29uc3QgRG90c1RhYmxlIGRvdHMsIFRyYW5zbGF0aW9uVGFibGUgdGFibGUpOworZXh0ZXJuIHZvaWQgcmV2ZXJzZVRyYW5zbGF0aW9uVGFibGUgKGNvbnN0IFRyYW5zbGF0aW9uVGFibGUgZnJvbSwgVHJhbnNsYXRpb25UYWJsZSB0byk7CisKK2V4dGVybiB2b2lkIHNldE91dHB1dFRhYmxlIChjb25zdCBUcmFuc2xhdGlvblRhYmxlIHRhYmxlKTsKK2V4dGVybiB2b2lkIG1ha2VPdXRwdXRUYWJsZSAoY29uc3QgRG90c1RhYmxlIGRvdHMpOworZXh0ZXJuIHZvaWQgKnRyYW5zbGF0ZU91dHB1dENlbGxzICh1bnNpZ25lZCBjaGFyICp0YXJnZXQsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNvdXJjZSwgc2l6ZV90IGNvdW50KTsKK2V4dGVybiB1bnNpZ25lZCBjaGFyIHRyYW5zbGF0ZU91dHB1dENlbGwgKHVuc2lnbmVkIGNoYXIgY2VsbCk7CisKK2V4dGVybiB2b2lkIG1ha2VJbnB1dFRhYmxlICh2b2lkKTsKK2V4dGVybiB2b2lkICp0cmFuc2xhdGVJbnB1dENlbGxzICh1bnNpZ25lZCBjaGFyICp0YXJnZXQsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNvdXJjZSwgc2l6ZV90IGNvdW50KTsKK2V4dGVybiB1bnNpZ25lZCBjaGFyIHRyYW5zbGF0ZUlucHV0Q2VsbCAodW5zaWduZWQgY2hhciBjZWxsKTsKKworI2RlZmluZSBNQUtFX09VVFBVVF9UQUJMRShkb3QxLCBkb3QyLCBkb3QzLCBkb3Q0LCBkb3Q1LCBkb3Q2LCBkb3Q3LCBkb3Q4KSBcCisgIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBzdGF0aWMgY29uc3QgRG90c1RhYmxlIGRvdHMgPSB7KGRvdDEpLCAoZG90MiksIChkb3QzKSwgKGRvdDQpLCAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZG90NSksIChkb3Q2KSwgKGRvdDcpLCAoZG90OCl9OyAgICAgICBcCisgICAgbWFrZU91dHB1dFRhYmxlKGRvdHMpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgfSB3aGlsZSAoMCkKKworZXh0ZXJuIGludCBhd2FpdEJyYWlsbGVJbnB1dCAoQnJhaWxsZURpc3BsYXkgKmJybCwgaW50IHRpbWVvdXQpOworCit0eXBlZGVmIGludCBCcmFpbGxlU2Vzc2lvbkluaXRpYWxpemVyIChCcmFpbGxlRGlzcGxheSAqYnJsKTsKKworZXh0ZXJuIGludCBjb25uZWN0QnJhaWxsZVJlc291cmNlICgKKyAgQnJhaWxsZURpc3BsYXkgKmJybCwKKyAgY29uc3QgY2hhciAqaWRlbnRpZmllciwKKyAgY29uc3QgR2lvRGVzY3JpcHRvciAqZGVzY3JpcHRvciwKKyAgQnJhaWxsZVNlc3Npb25Jbml0aWFsaXplciAqaW5pdGlhbGl6ZVNlc3Npb24KKyk7CisKK3R5cGVkZWYgaW50IEJyYWlsbGVTZXNzaW9uRW5kZXIgKEJyYWlsbGVEaXNwbGF5ICpicmwpOworCitleHRlcm4gdm9pZCBkaXNjb25uZWN0QnJhaWxsZVJlc291cmNlICgKKyAgQnJhaWxsZURpc3BsYXkgKmJybCwKKyAgQnJhaWxsZVNlc3Npb25FbmRlciAqZW5kU2Vzc2lvbgorKTsKKwordHlwZWRlZiBlbnVtIHsKKyAgQlJMX1BWUl9JTlZBTElELAorICBCUkxfUFZSX0lOQ0xVREUsCisgIEJSTF9QVlJfRVhDTFVERSwKKyAgQlJMX1BWUl9JR05PUkUKK30gQnJhaWxsZVBhY2tldFZlcmlmaWVyUmVzdWx0OworCit0eXBlZGVmIEJyYWlsbGVQYWNrZXRWZXJpZmllclJlc3VsdCBCcmFpbGxlUGFja2V0VmVyaWZpZXIgKAorICBCcmFpbGxlRGlzcGxheSAqYnJsLAorICB1bnNpZ25lZCBjaGFyICpieXRlcywgc2l6ZV90IHNpemUsCisgIHNpemVfdCAqbGVuZ3RoLCB2b2lkICpkYXRhCispOworCitleHRlcm4gc2l6ZV90IHJlYWRCcmFpbGxlUGFja2V0ICgKKyAgQnJhaWxsZURpc3BsYXkgKmJybCwKKyAgR2lvRW5kcG9pbnQgKmVuZHBvaW50LAorICB2b2lkICpwYWNrZXQsIHNpemVfdCBzaXplLAorICBCcmFpbGxlUGFja2V0VmVyaWZpZXIgKnZlcmlmeVBhY2tldCwgdm9pZCAqZGF0YQorKTsKKworZXh0ZXJuIGludCB3cml0ZUJyYWlsbGVQYWNrZXQgKAorICBCcmFpbGxlRGlzcGxheSAqYnJsLCBHaW9FbmRwb2ludCAqZW5kcG9pbnQsCisgIGNvbnN0IHZvaWQgKnBhY2tldCwgc2l6ZV90IHNpemUKKyk7CisKK2V4dGVybiBpbnQgd3JpdGVCcmFpbGxlTWVzc2FnZShCcmFpbGxlRGlzcGxheSAqYnJsLCBHaW9FbmRwb2ludCAqZW5kcG9pbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHR5cGUsIGNvbnN0IHZvaWQgKnBhY2tldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3Qgc2l6ZSk7CisKK2V4dGVybiBpbnQgYWNrbm93bGVkZ2VCcmFpbGxlTWVzc2FnZSAoQnJhaWxsZURpc3BsYXkgKmJybCk7CitleHRlcm4gdm9pZCBlbmRCcmFpbGxlTWVzc2FnZXMoQnJhaWxsZURpc3BsYXkgKmJybCk7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgc2l6ZV90ICppbnB1dDsKKyAgc2l6ZV90ICpvdXRwdXQ7CisgIHNpemVfdCAqZmVhdHVyZTsKKyAgdW5zaWduZWQgY2hhciBpZGVudGlmaWVyOworfSBCcmFpbGxlUmVwb3J0U2l6ZUVudHJ5OworCitleHRlcm4gaW50IGdldEJyYWlsbGVSZXBvcnRTaXplcyAoQnJhaWxsZURpc3BsYXkgKmJybCwgY29uc3QgQnJhaWxsZVJlcG9ydFNpemVFbnRyeSAqdGFibGUpOworZXh0ZXJuIGludCBnZXRCcmFpbGxlUmVwb3J0U2l6ZSAoQnJhaWxsZURpc3BsYXkgKmJybCwgdW5zaWduZWQgY2hhciBpZGVudGlmaWVyLCBIaWRSZXBvcnRTaXplICpzaXplKTsKKwordHlwZWRlZiBpbnQgQnJhaWxsZVJlcXVlc3RXcml0ZXIgKEJyYWlsbGVEaXNwbGF5ICpicmwpOworCit0eXBlZGVmIHNpemVfdCBCcmFpbGxlUGFja2V0UmVhZGVyICgKKyAgQnJhaWxsZURpc3BsYXkgKmJybCwKKyAgdm9pZCAqcGFja2V0LCBzaXplX3Qgc2l6ZQorKTsKKwordHlwZWRlZiBlbnVtIHsKKyAgQlJMX1JTUF9DT05USU5VRSwKKyAgQlJMX1JTUF9ET05FLAorICBCUkxfUlNQX0ZBSUwsCisgIEJSTF9SU1BfVU5FWFBFQ1RFRAorfSBCcmFpbGxlUmVzcG9uc2VSZXN1bHQ7CisKK3R5cGVkZWYgQnJhaWxsZVJlc3BvbnNlUmVzdWx0IEJyYWlsbGVSZXNwb25zZUhhbmRsZXIgKAorICBCcmFpbGxlRGlzcGxheSAqYnJsLAorICBjb25zdCB2b2lkICpwYWNrZXQsIHNpemVfdCBzaXplCispOworCitleHRlcm4gaW50IHByb2JlQnJhaWxsZURpc3BsYXkgKAorICBCcmFpbGxlRGlzcGxheSAqYnJsLCB1bnNpZ25lZCBpbnQgcmV0cnlMaW1pdCwKKyAgR2lvRW5kcG9pbnQgKmVuZHBvaW50LCBpbnQgaW5wdXRUaW1lb3V0LAorICBCcmFpbGxlUmVxdWVzdFdyaXRlciAqd3JpdGVSZXF1ZXN0LAorICBCcmFpbGxlUGFja2V0UmVhZGVyICpyZWFkUGFja2V0LCB2b2lkICpyZXNwb25zZVBhY2tldCwgc2l6ZV90IHJlc3BvbnNlU2l6ZSwKKyAgQnJhaWxsZVJlc3BvbnNlSGFuZGxlciAqaGFuZGxlUmVzcG9uc2UKKyk7CisKK2V4dGVybiB2b2lkIHJlbGVhc2VCcmFpbGxlS2V5cyAoQnJhaWxsZURpc3BsYXkgKmJybCk7CisKK3R5cGVkZWYgdWludDMyX3QgS2V5TnVtYmVyU2V0OworI2RlZmluZSBLRVlfTlVNQkVSX0JJVChudW1iZXIpIChVSU5UMzJfQygxKSA8PCAobnVtYmVyKSkKKworc3RhdGljIGlubGluZSBpbnQKK2lzS2V5TnVtYmVySW5jbHVkZWQgKEtleU51bWJlclNldCBzZXQsIEtleU51bWJlciBudW1iZXIpIHsKKyAgcmV0dXJuICEhKHNldCAmIEtFWV9OVU1CRVJfQklUKG51bWJlcikpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK3NldEtleU51bWJlckluY2x1ZGVkIChLZXlOdW1iZXJTZXQgKnNldCwgS2V5TnVtYmVyIG51bWJlciwgaW50IHllcykgeworICBLZXlOdW1iZXJTZXQgYml0ID0gS0VZX05VTUJFUl9CSVQobnVtYmVyKTsKKworICBpZiAoeWVzKSB7CisgICAgKnNldCB8PSBiaXQ7CisgIH0gZWxzZSB7CisgICAgKnNldCAmPSB+Yml0OworICB9Cit9CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgS2V5TnVtYmVyIGZyb207CisgIEtleU51bWJlciB0bzsKK30gS2V5TnVtYmVyTWFwRW50cnk7CisKK2V4dGVybiBLZXlOdW1iZXJTZXQgbWFwS2V5TnVtYmVycyAoS2V5TnVtYmVyU2V0IGZyb21LZXlzLCBjb25zdCBLZXlOdW1iZXJNYXBFbnRyeSAqbWFwLCBzaXplX3QgY291bnQpOworZXh0ZXJuIHZvaWQgcmVtYXBLZXlOdW1iZXJzIChLZXlOdW1iZXJTZXQgKmtleXMsIGNvbnN0IEtleU51bWJlck1hcEVudHJ5ICptYXAsIHNpemVfdCBjb3VudCk7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgS2V5TnVtYmVyU2V0IGZyb207CisgIEtleU51bWJlclNldCB0bzsKK30gS2V5TnVtYmVyU2V0TWFwRW50cnk7CisKK3R5cGVkZWYgc3RydWN0IEtleU51bWJlclNldE1hcFN0cnVjdCBLZXlOdW1iZXJTZXRNYXA7CitleHRlcm4gS2V5TnVtYmVyU2V0TWFwICpuZXdLZXlOdW1iZXJTZXRNYXAgKGNvbnN0IEtleU51bWJlclNldE1hcEVudHJ5ICplbnRyaWVzLCBzaXplX3QgY291bnQpOworZXh0ZXJuIHZvaWQgZGVzdHJveUtleU51bWJlclNldE1hcCAoS2V5TnVtYmVyU2V0TWFwICptYXApOworZXh0ZXJuIEtleU51bWJlclNldCBtYXBLZXlOdW1iZXJTZXQgKEtleU51bWJlclNldCBrZXlzLCBjb25zdCBLZXlOdW1iZXJTZXRNYXAgKm1hcCk7CitleHRlcm4gdm9pZCByZW1hcEtleU51bWJlclNldCAoS2V5TnVtYmVyU2V0ICprZXlzLCBjb25zdCBLZXlOdW1iZXJTZXRNYXAgKm1hcCk7CisKK2V4dGVybiBLZXlOdW1iZXJTZXQgbWFrZUtleU51bWJlclNldCAoS0VZX05BTUVfVEFCTEVTX1JFRkVSRU5DRSBrZXlzLCBLZXlHcm91cCBncm91cCk7CisKK2V4dGVybiBpbnQgZW5xdWV1ZUtleUV2ZW50ICgKKyAgQnJhaWxsZURpc3BsYXkgKmJybCwKKyAgS2V5R3JvdXAgZ3JvdXAsIEtleU51bWJlciBudW1iZXIsIGludCBwcmVzcworKTsKKworZXh0ZXJuIGludCBlbnF1ZXVlS2V5RXZlbnRzICgKKyAgQnJhaWxsZURpc3BsYXkgKmJybCwKKyAgS2V5TnVtYmVyU2V0IHNldCwgS2V5R3JvdXAgZ3JvdXAsIEtleU51bWJlciBudW1iZXIsIGludCBwcmVzcworKTsKKworZXh0ZXJuIGludCBlbnF1ZXVlS2V5ICgKKyAgQnJhaWxsZURpc3BsYXkgKmJybCwKKyAgS2V5R3JvdXAgZ3JvdXAsIEtleU51bWJlciBudW1iZXIKKyk7CisKK2V4dGVybiBpbnQgZW5xdWV1ZUtleXMgKAorICBCcmFpbGxlRGlzcGxheSAqYnJsLAorICBLZXlOdW1iZXJTZXQgc2V0LCBLZXlHcm91cCBncm91cCwgS2V5TnVtYmVyIG51bWJlcgorKTsKKworZXh0ZXJuIGludCBlbnF1ZXVlVXBkYXRlZEtleXMgKAorICBCcmFpbGxlRGlzcGxheSAqYnJsLAorICBLZXlOdW1iZXJTZXQgbmV3LCBLZXlOdW1iZXJTZXQgKm9sZCwgS2V5R3JvdXAgZ3JvdXAsIEtleU51bWJlciBudW1iZXIKKyk7CisKK2V4dGVybiBpbnQgZW5xdWV1ZVVwZGF0ZWRLZXlHcm91cCAoCisgIEJyYWlsbGVEaXNwbGF5ICpicmwsCisgIHVuc2lnbmVkIGludCBjb3VudCwKKyAgY29uc3QgdW5zaWduZWQgY2hhciAqbmV3LAorICB1bnNpZ25lZCBjaGFyICpvbGQsCisgIEtleUdyb3VwIGdyb3VwCispOworCitleHRlcm4gaW50IGVucXVldWVYdFNjYW5Db2RlICgKKyAgQnJhaWxsZURpc3BsYXkgKmJybCwKKyAgdW5zaWduZWQgY2hhciBjb2RlLCB1bnNpZ25lZCBjaGFyIGVzY2FwZSwKKyAgS2V5R3JvdXAgZ3JvdXAwMCwgS2V5R3JvdXAgZ3JvdXBFMCwgS2V5R3JvdXAgZ3JvdXBFMQorKTsKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYgLyogX19jcGx1c3BsdXMgKi8KKworI2VuZGlmIC8qIEJSTFRUWV9JTkNMVURFRF9CUkxfQkFTRSAqLwpkaWZmIC0tZ2l0IGEvSGVhZGVycy9icmxfY21kcy5oIGIvSGVhZGVycy9icmxfY21kcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNkMzI3OGYKLS0tIC9kZXYvbnVsbAorKysgYi9IZWFkZXJzL2JybF9jbWRzLmgKQEAgLTAsMCArMSw0MjIgQEAKKy8qCisgKiBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorICogICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorICoKKyAqIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorICoKKyAqIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyAqLworCisjaWZuZGVmIEJSTFRUWV9JTkNMVURFRF9CUkxfQ01EUworI2RlZmluZSBCUkxUVFlfSU5DTFVERURfQlJMX0NNRFMKKworI2luY2x1ZGUgImJybF9kb3RzLmgiCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYgLyogX19jcGx1c3BsdXMgKi8KKworI2RlZmluZSBCUkxfQklUU19BUkcgOAorI2RlZmluZSBCUkxfQklUU19CTEsgOAorI2RlZmluZSBCUkxfQklUU19GTEcgOAorI2RlZmluZSBCUkxfQklUU19FWFQgOAorCisjZGVmaW5lIEJSTF9TSElGVF9BUkcgMAorI2RlZmluZSBCUkxfU0hJRlRfQkxLIChCUkxfU0hJRlRfQVJHICsgQlJMX0JJVFNfQVJHKQorI2RlZmluZSBCUkxfU0hJRlRfRkxHIChCUkxfU0hJRlRfQkxLICsgQlJMX0JJVFNfQkxLKQorI2RlZmluZSBCUkxfU0hJRlRfRVhUIChCUkxfU0hJRlRfRkxHICsgQlJMX0JJVFNfRkxHKQorCisjZGVmaW5lIEJSTF9DT0RFX01BU0sobmFtZSkgKCgxIDw8IEJSTF9CSVRTXyMjbmFtZSkgLSAxKQorI2RlZmluZSBCUkxfQ09ERV9HRVQobmFtZSxjb2RlKSAoKChjb2RlKSA+PiBCUkxfU0hJRlRfIyNuYW1lKSAmIEJSTF9DT0RFX01BU0sobmFtZSkpCisjZGVmaW5lIEJSTF9DT0RFX1BVVChuYW1lLHZhbHVlKSAoKHZhbHVlKSA8PCBCUkxfU0hJRlRfIyNuYW1lKQorI2RlZmluZSBCUkxfQ09ERV9TRVQobmFtZSx2YWx1ZSkgQlJMX0NPREVfUFVUKG5hbWUsICgodmFsdWUpICYgQlJMX0NPREVfTUFTSyhuYW1lKSkpCisKKyNkZWZpbmUgQlJMX0FSR19QVVQoYXJnKSBCUkxfQ09ERV9QVVQoQVJHLCAoYXJnKSkKKyNkZWZpbmUgQlJMX0JMS19QVVQoYmxrKSBCUkxfQ09ERV9QVVQoQkxLLCAoYmxrKSkKKyNkZWZpbmUgQlJMX0ZMR19QVVQoZkxHKSBCUkxfQ09ERV9QVVQoRkxHLCAoZmxnKSkKKyNkZWZpbmUgQlJMX0VYVF9QVVQoZXh0KSBCUkxfQ09ERV9QVVQoRVhULCAoZXh0KSkKKworI2RlZmluZSBCUkxfTVNLKG5hbWUpIEJSTF9DT0RFX1BVVChuYW1lLCBCUkxfQ09ERV9NQVNLKG5hbWUpKQorI2RlZmluZSBCUkxfTVNLX0FSRyBCUkxfTVNLKEFSRykKKyNkZWZpbmUgQlJMX01TS19CTEsgQlJMX01TSyhCTEspCisjZGVmaW5lIEJSTF9NU0tfRkxHIEJSTF9NU0soRkxHKQorI2RlZmluZSBCUkxfTVNLX0VYVCBCUkxfTVNLKEVYVCkKKyNkZWZpbmUgQlJMX01TS19DTUQgKEJSTF9NU0tfQkxLIHwgQlJMX01TS19BUkcpCisKKyNkZWZpbmUgQlJMX0FSR19HRVQoY29kZSkgKEJSTF9DT0RFX0dFVChBUkcsIChjb2RlKSkgfCAoQlJMX0NPREVfR0VUKEVYVCwgKGNvZGUpKSA8PCBCUkxfQklUU19BUkcpKQorI2RlZmluZSBCUkxfQVJHX1NFVCh2YWx1ZSkgKEJSTF9DT0RFX1NFVChBUkcsICh2YWx1ZSkpIHwgQlJMX0NPREVfU0VUKEVYVCwgKCh2YWx1ZSkgPj4gQlJMX0JJVFNfQVJHKSkpCisKKy8qIFRoZSBmb2xsb3dpbmcgY29tbWFuZCBjb2RlcyBhcmUgcmV0dXJuIHZhbHVlcyBmb3IgYnJsX3JlYWRDb21tYW5kKCkuCisgKiBUaGUgQlJMX0NNRF8qIGNvZGVzIGFyZSBndWFyYW50ZWVkIHRvIGJlIGJldHdlZW4gMSBhbmQgMjU1CisgKiBpbmNsdXNpdmUsIHdpdGggdGhlIGV4Y2VwdGlvbiBvZiBCUkxfQ01EX05PT1AgPSAwLgorICoKKyAqIGJybF9yZWFkQ29tbWFuZCgpIHNob3VsZCByZXR1cm4gRU9GIGlmIHRoZXJlIGFyZSBubyBrZXlzIHRvIHJldHVybi4gIElmLAorICogaG93ZXZlciwgaWYgaXQgaGFzIG1hc2tlZCBvdXQgdGhlIGtleSBmb3IgaW50ZXJuYWwgdXNlLCBpdCBtYXkgcmV0dXJuCisgKiBCUkxfQ01EX05PT1AgLSBpbiB3aGljaCBjYXNlIGl0IHdpbGwgYmUgY2FsbGVkIGFnYWluIGltbWVkaWF0ZWx5LCByYXRoZXIKKyAqIHRoYW4gd2FpdGluZyBmb3IgdGhlIG5leHQgY3ljbGUuICBUaGlzIGNhbiBzYXZlIGludGVybmFsIG5lc3RpbmcgLi4uCisgKi8KKworLyoKKyAqIFBsZWFzZSBjb21tZW50IGFsbCBCUkxfQ01EXyogZGVmaW5pdGlvbnMuIFRoZXkgYXJlCisgKiB1c2VkIGR1cmluZyBhdXRvbWF0aWMgY29tbWFuZCB0YWJsZSBnZW5lcmF0aW9uLgorICovCisKK3R5cGVkZWYgZW51bSB7CisgIC8qIHNwZWNpYWwgY29tbWFuZHMgd2hpY2ggbXVzdCBiZSBmaXJzdCBhbmQgcmVtYWluIGluIG9yZGVyICovCisgIEJSTF9DTURfTk9PUCA9IDAgLyogZG8gbm90aGluZyAqLywKKworICAvKiB2ZXJ0aWNhbCBtb3Rpb24gKi8KKyAgQlJMX0NNRF9MTlVQIC8qIGdvIHVwIG9uZSBsaW5lICovLAorICBCUkxfQ01EX0xORE4gLyogZ28gZG93biBvbmUgbGluZSAqLywKKyAgQlJMX0NNRF9XSU5VUCAvKiBnbyB1cCBzZXZlcmFsIGxpbmVzICovLAorICBCUkxfQ01EX1dJTkROIC8qIGdvIGRvd24gc2V2ZXJhbCBsaW5lcyAqLywKKyAgQlJMX0NNRF9QUkRJRkxOIC8qIGdvIHVwIHRvIG5lYXJlc3QgbGluZSB3aXRoIGRpZmZlcmVudCBjb250ZW50ICovLAorICBCUkxfQ01EX05YRElGTE4gLyogZ28gZG93biB0byBuZWFyZXN0IGxpbmUgd2l0aCBkaWZmZXJlbnQgY29udGVudCAqLywKKyAgQlJMX0NNRF9BVFRSVVAgLyogZ28gdXAgdG8gbmVhcmVzdCBsaW5lIHdpdGggZGlmZmVyZW50IGhpZ2hsaWdodGluZyAqLywKKyAgQlJMX0NNRF9BVFRSRE4gLyogZ28gZG93biB0byBuZWFyZXN0IGxpbmUgd2l0aCBkaWZmZXJlbnQgaGlnaGxpZ2h0aW5nICovLAorICBCUkxfQ01EX1RPUCAvKiBnbyB0byB0b3AgbGluZSAqLywKKyAgQlJMX0NNRF9CT1QgLyogZ28gdG8gYm90dG9tIGxpbmUgKi8sCisgIEJSTF9DTURfVE9QX0xFRlQgLyogZ28gdG8gYmVnaW5uaW5nIG9mIHRvcCBsaW5lICovLAorICBCUkxfQ01EX0JPVF9MRUZUIC8qIGdvIHRvIGJlZ2lubmluZyBvZiBib3R0b20gbGluZSAqLywKKyAgQlJMX0NNRF9QUlBHUlBIIC8qIGdvIHVwIHRvIGZpcnN0IGxpbmUgb2YgcGFyYWdyYXBoICovLAorICBCUkxfQ01EX05YUEdSUEggLyogZ28gZG93biB0byBmaXJzdCBsaW5lIG9mIG5leHQgcGFyYWdyYXBoICovLAorICBCUkxfQ01EX1BSUFJPTVBUIC8qIGdvIHVwIHRvIHByZXZpb3VzIGNvbW1hbmQgcHJvbXB0ICovLAorICBCUkxfQ01EX05YUFJPTVBUIC8qIGdvIGRvd24gdG8gbmV4dCBjb21tYW5kIHByb21wdCAqLywKKyAgQlJMX0NNRF9QUlNFQVJDSCAvKiBzZWFyY2ggYmFja3dhcmQgZm9yIGNsaXBib2FyZCB0ZXh0ICovLAorICBCUkxfQ01EX05YU0VBUkNIIC8qIHNlYXJjaCBmb3J3YXJkIGZvciBjbGlwYm9hcmQgdGV4dCAqLywKKworICAvKiBob3Jpem9udGFsIG1vdGlvbiAqLworICBCUkxfQ01EX0NIUkxUIC8qIGdvIGxlZnQgb25lIGNoYXJhY3RlciAqLywKKyAgQlJMX0NNRF9DSFJSVCAvKiBnbyByaWdodCBvbmUgY2hhcmFjdGVyICovLAorICBCUkxfQ01EX0hXSU5MVCAvKiBnbyBsZWZ0IGhhbGYgYSBicmFpbGxlIHdpbmRvdyAqLywKKyAgQlJMX0NNRF9IV0lOUlQgLyogZ28gcmlnaHQgaGFsZiBhIGJyYWlsbGUgd2luZG93ICovLAorICBCUkxfQ01EX0ZXSU5MVCAvKiBnbyBiYWNrd2FyZCBvbmUgYnJhaWxsZSB3aW5kb3cgKi8sCisgIEJSTF9DTURfRldJTlJUIC8qIGdvIGZvcndhcmQgb25lIGJyYWlsbGUgd2luZG93ICovLAorICBCUkxfQ01EX0ZXSU5MVFNLSVAgLyogZ28gYmFja3dhcmQgc2tpcHBpbmcgYmxhbmsgYnJhaWxsZSB3aW5kb3dzICovLAorICBCUkxfQ01EX0ZXSU5SVFNLSVAgLyogZ28gZm9yd2FyZCBza2lwcGluZyBibGFuayBicmFpbGxlIHdpbmRvd3MgKi8sCisgIEJSTF9DTURfTE5CRUcgLyogZ28gdG8gYmVnaW5uaW5nIG9mIGxpbmUgKi8sCisgIEJSTF9DTURfTE5FTkQgLyogZ28gdG8gZW5kIG9mIGxpbmUgKi8sCisKKyAgLyogaW1wbGljaXQgbW90aW9uICovCisgIEJSTF9DTURfSE9NRSAvKiBnbyB0byBzY3JlZW4gY3Vyc29yICovLAorICBCUkxfQ01EX0JBQ0sgLyogZ28gYmFjayBhZnRlciBjdXJzb3IgdHJhY2tpbmcgKi8sCisgIEJSTF9DTURfUkVUVVJOIC8qIGdvIHRvIHNjcmVlbiBjdXJzb3Igb3IgZ28gYmFjayBhZnRlciBjdXJzb3IgdHJhY2tpbmcgKi8sCisKKyAgLyogZmVhdHVyZSBhY3RpdmF0aW9uIGFuZCBkZWFjdGl2YXRpb24gKi8KKyAgQlJMX0NNRF9GUkVFWkUgLyogc2V0IHNjcmVlbiBpbWFnZSBmcm96ZW4vdW5mcm96ZW4gKi8sCisgIEJSTF9DTURfRElTUE1EIC8qIHNldCBkaXNwbGF5IG1vZGUgYXR0cmlidXRlcy90ZXh0ICovLAorICBCUkxfQ01EX1NJWERPVFMgLyogc2V0IHRleHQgc3R5bGUgNi1kb3QvOC1kb3QgKi8sCisgIEJSTF9DTURfU0xJREVXSU4gLyogc2V0IHNsaWRpbmcgYnJhaWxsZSB3aW5kb3cgb24vb2ZmICovLAorICBCUkxfQ01EX1NLUElETE5TIC8qIHNldCBza2lwcGluZyBvZiBsaW5lcyB3aXRoIGlkZW50aWNhbCBjb250ZW50IG9uL29mZiAqLywKKyAgQlJMX0NNRF9TS1BCTE5LV0lOUyAvKiBzZXQgc2tpcHBpbmcgb2YgYmxhbmsgYnJhaWxsZSB3aW5kb3dzIG9uL29mZiAqLywKKyAgQlJMX0NNRF9DU1JWSVMgLyogc2V0IHNjcmVlbiBjdXJzb3IgdmlzaWJpbGl0eSBvbi9vZmYgKi8sCisgIEJSTF9DTURfQ1NSSElERSAvKiBzZXQgaGlkZGVuIHNjcmVlbiBjdXJzb3Igb24vb2ZmICovLAorICBCUkxfQ01EX0NTUlRSSyAvKiBzZXQgdHJhY2sgc2NyZWVuIGN1cnNvciBvbi9vZmYgKi8sCisgIEJSTF9DTURfQ1NSU0laRSAvKiBzZXQgc2NyZWVuIGN1cnNvciBzdHlsZSBibG9jay91bmRlcmxpbmUgKi8sCisgIEJSTF9DTURfQ1NSQkxJTksgLyogc2V0IHNjcmVlbiBjdXJzb3IgYmxpbmtpbmcgb24vb2ZmICovLAorICBCUkxfQ01EX0FUVFJWSVMgLyogc2V0IGF0dHJpYnV0ZSB1bmRlcmxpbmluZyBvbi9vZmYgKi8sCisgIEJSTF9DTURfQVRUUkJMSU5LIC8qIHNldCBhdHRyaWJ1dGUgYmxpbmtpbmcgb24vb2ZmICovLAorICBCUkxfQ01EX0NBUEJMSU5LIC8qIHNldCBjYXBpdGFsIGxldHRlciBibGlua2luZyBvbi9vZmYgKi8sCisgIEJSTF9DTURfVFVORVMgLyogc2V0IGFsZXJ0IHR1bmVzIG9uL29mZiAqLywKKyAgQlJMX0NNRF9BVVRPUkVQRUFUIC8qIHNldCBhdXRvcmVwZWF0IG9uL29mZiAqLywKKyAgQlJMX0NNRF9BVVRPU1BFQUsgLyogc2V0IGF1dG9zcGVhayBvbi9vZmYgKi8sCisKKyAgLyogbW9kZSBzZWxlY3Rpb24gKi8KKyAgQlJMX0NNRF9IRUxQIC8qIGVudGVyL2xlYXZlIGhlbHAgZGlzcGxheSAqLywKKyAgQlJMX0NNRF9JTkZPIC8qIGVudGVyL2xlYXZlIHN0YXR1cyBkaXNwbGF5ICovLAorICBCUkxfQ01EX0xFQVJOIC8qIGVudGVyL2xlYXZlIGNvbW1hbmQgbGVhcm4gbW9kZSAqLywKKworICAvKiBwcmVmZXJlbmNlIHNldHRpbmcgKi8KKyAgQlJMX0NNRF9QUkVGTUVOVSAvKiBlbnRlci9sZWF2ZSBwcmVmZXJlbmNlcyBtZW51ICovLAorICBCUkxfQ01EX1BSRUZTQVZFIC8qIHNhdmUgcHJlZmVyZW5jZXMgdG8gZGlzayAqLywKKyAgQlJMX0NNRF9QUkVGTE9BRCAvKiByZXN0b3JlIHByZWZlcmVuY2VzIGZyb20gZGlzayAqLywKKworICAvKiBtZW51IG5hdmlnYXRpb24gKi8KKyAgQlJMX0NNRF9NRU5VX0ZJUlNUX0lURU0gLyogZ28gdXAgdG8gZmlyc3QgaXRlbSAqLywKKyAgQlJMX0NNRF9NRU5VX0xBU1RfSVRFTSAvKiBnbyBkb3duIHRvIGxhc3QgaXRlbSAqLywKKyAgQlJMX0NNRF9NRU5VX1BSRVZfSVRFTSAvKiBnbyB1cCB0byBwcmV2aW91cyBpdGVtICovLAorICBCUkxfQ01EX01FTlVfTkVYVF9JVEVNIC8qIGdvIGRvd24gdG8gbmV4dCBpdGVtICovLAorICBCUkxfQ01EX01FTlVfUFJFVl9TRVRUSU5HIC8qIHNlbGVjdCBwcmV2aW91cyBjaG9pY2UgKi8sCisgIEJSTF9DTURfTUVOVV9ORVhUX1NFVFRJTkcgLyogc2VsZWN0IG5leHQgY2hvaWNlICovLAorCisgIC8qIHNwZWVjaCBjb250cm9scyAqLworICBCUkxfQ01EX01VVEUgLyogc3RvcCBzcGVha2luZyAqLywKKyAgQlJMX0NNRF9TUEtIT01FIC8qIGdvIHRvIGN1cnJlbnQgc3BlYWtpbmcgcG9zaXRpb24gKi8sCisgIEJSTF9DTURfU0FZX0xJTkUgLyogc3BlYWsgY3VycmVudCBsaW5lICovLAorICBCUkxfQ01EX1NBWV9BQk9WRSAvKiBzcGVhayBmcm9tIHRvcCBvZiBzY3JlZW4gdGhyb3VnaCBjdXJyZW50IGxpbmUgKi8sCisgIEJSTF9DTURfU0FZX0JFTE9XIC8qIHNwZWFrIGZyb20gY3VycmVudCBsaW5lIHRocm91Z2ggYm90dG9tIG9mIHNjcmVlbiAqLywKKyAgQlJMX0NNRF9TQVlfU0xPV0VSIC8qIGRlY3JlYXNlIHNwZWFraW5nIHJhdGUgKi8sCisgIEJSTF9DTURfU0FZX0ZBU1RFUiAvKiBpbmNyZWFzZSBzcGVha2luZyByYXRlICovLAorICBCUkxfQ01EX1NBWV9TT0ZURVIgLyogZGVjcmVhc2Ugc3BlYWtpbmcgdm9sdW1lICovLAorICBCUkxfQ01EX1NBWV9MT1VERVIgLyogaW5jcmVhc2Ugc3BlYWtpbmcgdm9sdW1lICovLAorCisgIC8qIHZpcnR1YWwgdGVybWluYWwgc3dpdGNoaW5nICovCisgIEJSTF9DTURfU1dJVENIVlRfUFJFViAvKiBzd2l0Y2ggdG8gdGhlIHByZXZpb3VzIHZpcnR1YWwgdGVybWluYWwgKi8sCisgIEJSTF9DTURfU1dJVENIVlRfTkVYVCAvKiBzd2l0Y2ggdG8gdGhlIG5leHQgdmlydHVhbCB0ZXJtaW5hbCAqLywKKworICAvKiBtaXNjZWxsYW5lb3VzICovCisgIEJSTF9DTURfQ1NSSk1QX1ZFUlQgLyogYnJpbmcgc2NyZWVuIGN1cnNvciB0byBjdXJyZW50IGxpbmUgKi8sCisgIEJSTF9DTURfUEFTVEUgLyogaW5zZXJ0IGNsaXBib2FyZCB0ZXh0IGFmdGVyIHNjcmVlbiBjdXJzb3IgKi8sCisgIEJSTF9DTURfUkVTVEFSVEJSTCAvKiByZXN0YXJ0IGJyYWlsbGUgZHJpdmVyICovLAorICBCUkxfQ01EX1JFU1RBUlRTUEVFQ0ggLyogcmVzdGFydCBzcGVlY2ggZHJpdmVyICovLAorCisgIEJSTF9DTURfT0ZGTElORSAvKiBicmFpbGxlIGRpc3BsYXkgdGVtcG9yYXJpbHkgdW5hdmFpbGFibGUgKi8sCisKKyAgQlJMX0NNRF9TSElGVCAvKiBjeWNsZSB0aGUgU2hpZnQgc3RpY2t5IGlucHV0IG1vZGlmaWVyIChuZXh0LCBvbiwgb2ZmKSAqLywKKyAgQlJMX0NNRF9VUFBFUiAvKiBjeWNsZSB0aGUgVXBwZXIgc3RpY2t5IGlucHV0IG1vZGlmaWVyIChuZXh0LCBvbiwgb2ZmKSAqLywKKyAgQlJMX0NNRF9DT05UUk9MIC8qIGN5Y2xlIHRoZSBDb250cm9sIHN0aWNreSBpbnB1dCBtb2RpZmllciAobmV4dCwgb24sIG9mZikgKi8sCisgIEJSTF9DTURfTUVUQSAvKiBjeWNsZSB0aGUgTWV0YSAoTGVmdCBBbHQpIHN0aWNreSBpbnB1dCBtb2RpZmllciAobmV4dCwgb24sCisgICAgICAgICAgICAgICAgICBvZmYpICovCisgICwKKworICBCUkxfQ01EX1RJTUUgLyogc2hvdyBjdXJyZW50IGRhdGUgYW5kIHRpbWUgKi8sCisgIEJSTF9DTURfTUVOVV9QUkVWX0xFVkVMIC8qIGdvIHRvIHByZXZpb3VzIG1lbnUgbGV2ZWwgKi8sCisKKyAgQlJMX0NNRF9BU1BLX1NFTF9MSU5FIC8qIHNldCBhdXRvc3BlYWsgc2VsZWN0ZWQgbGluZSBvbi9vZmYgKi8sCisgIEJSTF9DTURfQVNQS19TRUxfQ0hBUiAvKiBzZXQgYXV0b3NwZWFrIHNlbGVjdGVkIGNoYXJhY3RlciBvbi9vZmYgKi8sCisgIEJSTF9DTURfQVNQS19JTlNfQ0hBUlMgLyogc2V0IGF1dG9zcGVhayBpbnNlcnRlZCBjaGFyYWN0ZXJzIG9uL29mZiAqLywKKyAgQlJMX0NNRF9BU1BLX0RFTF9DSEFSUyAvKiBzZXQgYXV0b3NwZWFrIGRlbGV0ZWQgY2hhcmFjdGVycyBvbi9vZmYgKi8sCisgIEJSTF9DTURfQVNQS19SRVBfQ0hBUlMgLyogc2V0IGF1dG9zcGVhayByZXBsYWNlZCBjaGFyYWN0ZXJzIG9uL29mZiAqLywKKyAgQlJMX0NNRF9BU1BLX0NNUF9XT1JEUyAvKiBzZXQgYXV0b3NwZWFrIGNvbXBsZXRlZCB3b3JkcyBvbi9vZmYgKi8sCisKKyAgQlJMX0NNRF9TUEVBS19DVVJSX0NIQVIgLyogc3BlYWsgY3VycmVudCBjaGFyYWN0ZXIgKi8sCisgIEJSTF9DTURfU1BFQUtfUFJFVl9DSEFSIC8qIGdvIHRvIGFuZCBzcGVhayBwcmV2aW91cyBjaGFyYWN0ZXIgKi8sCisgIEJSTF9DTURfU1BFQUtfTkVYVF9DSEFSIC8qIGdvIHRvIGFuZCBzcGVhayBuZXh0IGNoYXJhY3RlciAqLywKKyAgQlJMX0NNRF9TUEVBS19DVVJSX1dPUkQgLyogc3BlYWsgY3VycmVudCB3b3JkICovLAorICBCUkxfQ01EX1NQRUFLX1BSRVZfV09SRCAvKiBnbyB0byBhbmQgc3BlYWsgcHJldmlvdXMgd29yZCAqLywKKyAgQlJMX0NNRF9TUEVBS19ORVhUX1dPUkQgLyogZ28gdG8gYW5kIHNwZWFrIG5leHQgd29yZCAqLywKKyAgQlJMX0NNRF9TUEVBS19DVVJSX0xJTkUgLyogc3BlYWsgY3VycmVudCBsaW5lICovLAorICBCUkxfQ01EX1NQRUFLX1BSRVZfTElORSAvKiBnbyB0byBhbmQgc3BlYWsgcHJldmlvdXMgbGluZSAqLywKKyAgQlJMX0NNRF9TUEVBS19ORVhUX0xJTkUgLyogZ28gdG8gYW5kIHNwZWFrIG5leHQgbGluZSAqLywKKyAgQlJMX0NNRF9TUEVBS19GUlNUX0NIQVIgLyogZ28gdG8gYW5kIHNwZWFrIGZpcnN0IG5vbi1ibGFuayBjaGFyYWN0ZXIgb24gbGluZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLAorICBCUkxfQ01EX1NQRUFLX0xBU1RfQ0hBUiAvKiBnbyB0byBhbmQgc3BlYWsgbGFzdCBub24tYmxhbmsgY2hhcmFjdGVyIG9uIGxpbmUgKi8KKyAgLAorICBCUkxfQ01EX1NQRUFLX0ZSU1RfTElORSAvKiBnbyB0byBhbmQgc3BlYWsgZmlyc3Qgbm9uLWJsYW5rIGxpbmUgb24gc2NyZWVuICovLAorICBCUkxfQ01EX1NQRUFLX0xBU1RfTElORSAvKiBnbyB0byBhbmQgc3BlYWsgbGFzdCBub24tYmxhbmsgbGluZSBvbiBzY3JlZW4gKi8sCisgIEJSTF9DTURfREVTQ19DVVJSX0NIQVIgLyogZGVzY3JpYmUgY3VycmVudCBjaGFyYWN0ZXIgKi8sCisgIEJSTF9DTURfU1BFTExfQ1VSUl9XT1JEIC8qIHNwZWxsIGN1cnJlbnQgd29yZCAqLywKKyAgQlJMX0NNRF9ST1VURV9DVVJSX0xPQ04gLyogYnJpbmcgc2NyZWVuIGN1cnNvciB0byBzcGVlY2ggY3Vyc29yICovLAorICBCUkxfQ01EX1NQRUFLX0NVUlJfTE9DTiAvKiBzcGVhayBzcGVlY2ggY3Vyc29yIGxvY2F0aW9uICovLAorICBCUkxfQ01EX1NIT1dfQ1VSUl9MT0NOIC8qIHNldCBzcGVlY2ggY3Vyc29yIHZpc2liaWxpdHkgb24vb2ZmICovLAorCisgIEJSTF9DTURfQ0xJUF9TQVZFIC8qIHNhdmUgY2xpcGJvYXJkIHRvIGRpc2sgKi8sCisgIEJSTF9DTURfQ0xJUF9SRVNUT1JFIC8qIHJlc3RvcmUgY2xpcGJvYXJkIGZyb20gZGlzayAqLywKKworICBCUkxfQ01EX0JSTFVDRE9UUyAvKiBzZXQgYnJhaWxsZSB0eXBpbmcgbW9kZSBkb3RzL3RleHQgKi8sCisgIEJSTF9DTURfQlJMS0JEIC8qIHNldCBicmFpbGxlIGtleWJvYXJkIGVuYWJsZWQvZGlzYWJsZWQgKi8sCisKKyAgQlJMX0NNRF9VTlNUSUNLIC8qIGNsZWFyIGFsbCBzdGlja3kgaW5wdXQgbW9kaWZpZXJzICovLAorICBCUkxfQ01EX0FMVEdSIC8qIGN5Y2xlIHRoZSBBbHRHciAoUmlnaHQgQWx0KSBzdGlja3kgaW5wdXQgbW9kaWZpZXIgKG5leHQsIG9uLAorICAgICAgICAgICAgICAgICAgIG9mZikgKi8KKyAgLAorICBCUkxfQ01EX0dVSSAvKiBjeWNsZSB0aGUgR1VJIChXaW5kb3dzKSBzdGlja3kgaW5wdXQgbW9kaWZpZXIgKG5leHQsIG9uLCBvZmYpCisgICAgICAgICAgICAgICAqLworICAsCisKKyAgQlJMX0NNRF9CUkxfU1RPUCAvKiBzdG9wIHRoZSBicmFpbGxlIGRyaXZlciAqLywKKyAgQlJMX0NNRF9CUkxfU1RBUlQgLyogc3RhcnQgdGhlIGJyYWlsbGUgZHJpdmVyICovLAorICBCUkxfQ01EX1NQS19TVE9QIC8qIHN0b3AgdGhlIHNwZWVjaCBkcml2ZXIgKi8sCisgIEJSTF9DTURfU1BLX1NUQVJUIC8qIHN0YXJ0IHRoZSBzcGVlY2ggZHJpdmVyICovLAorICBCUkxfQ01EX1NDUl9TVE9QIC8qIHN0b3AgdGhlIHNjcmVlbiBkcml2ZXIgKi8sCisgIEJSTF9DTURfU0NSX1NUQVJUIC8qIHN0YXJ0IHRoZSBzY3JlZW4gZHJpdmVyICovLAorCisgIEJSTF9DTURfU0VMRUNUVlRfUFJFViAvKiBiaW5kIHRvIHRoZSBwcmV2aW91cyB2aXJ0dWFsIHRlcm1pbmFsICovLAorICBCUkxfQ01EX1NFTEVDVFZUX05FWFQgLyogYmluZCB0byB0aGUgbmV4dCB2aXJ0dWFsIHRlcm1pbmFsICovLAorCisgIEJSTF9DTURfUFJOQldJTiAvKiBnbyBiYWNrd2FyZCB0byBuZWFyZXN0IG5vbi1ibGFuayBicmFpbGxlIHdpbmRvdyAqLywKKyAgQlJMX0NNRF9OWE5CV0lOIC8qIGdvIGZvcndhcmQgdG8gbmVhcmVzdCBub24tYmxhbmsgYnJhaWxsZSB3aW5kb3cgKi8sCisKKyAgQlJMX0NNRF9UT1VDSF9OQVYgLyogc2V0IHRvdWNoIG5hdmlnYXRpb24gb24vb2ZmICovLAorCisgIEJSTF9DTURfU1BFQUtfSU5ERU5UIC8qIHNwZWFrIGluZGVudCBvZiBjdXJyZW50IGxpbmUgKi8sCisgIEJSTF9DTURfQVNQS19JTkRFTlQgLyogc2V0IGF1dG9zcGVhayBpbmRlbnQgb2YgY3VycmVudCBsaW5lIG9uL29mZiAqLywKKworICBCUkxfQ01EX1JFRlJFU0ggLyogcmVmcmVzaCBicmFpbGxlIGRpc3BsYXkgKi8sCisgIEJSTF9DTURfSU5ESUNBVE9SUyAvKiBzaG93IHZhcmlvdXMgZGV2aWNlIHN0YXR1cyBpbmRpY2F0b3JzICovLAorCisgIEJSTF9DTURfVFhUU0VMX0NMRUFSIC8qIGNsZWFyIHRoZSB0ZXh0IHNlbGVjdGlvbiAqLywKKyAgQlJMX0NNRF9UWFRTRUxfQUxMIC8qIHNlbGVjdCBhbGwgb2YgdGhlIHRleHQgKi8sCisgIEJSTF9DTURfSE9TVF9DT1BZIC8qIGNvcHkgc2VsZWN0ZWQgdGV4dCB0byBob3N0IGNsaXBib2FyZCAqLywKKyAgQlJMX0NNRF9IT1NUX0NVVCAvKiBjdXQgc2VsZWN0ZWQgdGV4dCB0byBob3N0IGNsaXBib2FyZCAqLywKKyAgQlJMX0NNRF9IT1NUX1BBU1RFIC8qIGluc2VydCBob3N0IGNsaXBib2FyZCB0ZXh0IGFmdGVyIHNjcmVlbiBjdXJzb3IgKi8sCisKKyAgQlJMX0NNRF9HVUlfVElUTEUgLyogc2hvdyB0aGUgd2luZG93IHRpdGxlICovLAorICBCUkxfQ01EX0dVSV9CUkxfQUNUSU9OUyAvKiBvcGVuIHRoZSBicmFpbGxlIGFjdGlvbnMgd2luZG93ICovLAorICBCUkxfQ01EX0dVSV9IT01FIC8qIGdvIHRvIHRoZSBob21lIHNjcmVlbiAqLywKKyAgQlJMX0NNRF9HVUlfQkFDSyAvKiBnbyBiYWNrIHRvIHRoZSBwcmV2aW91cyBzY3JlZW4gKi8sCisgIEJSTF9DTURfR1VJX0RFVl9TRVRUSU5HUyAvKiBvcGVuIHRoZSBkZXZpY2Ugc2V0dGluZ3Mgd2luZG93ICovLAorICBCUkxfQ01EX0dVSV9ERVZfT1BUSU9OUyAvKiBvcGVuIHRoZSBkZXZpY2Ugb3B0aW9ucyB3aW5kb3cgKi8sCisgIEJSTF9DTURfR1VJX0FQUF9MSVNUIC8qIG9wZW4gdGhlIGFwcGxpY2F0aW9uIGxpc3Qgd2luZG93ICovLAorICBCUkxfQ01EX0dVSV9BUFBfTUVOVSAvKiBvcGVuIHRoZSBhcHBsaWNhdGlvbi1zcGVjaWZpYyBtZW51ICovLAorICBCUkxfQ01EX0dVSV9BUFBfQUxFUlRTIC8qIG9wZW4gdGhlIGFwcGxpY2F0aW9uIGFsZXJ0cyB3aW5kb3cgKi8sCisKKyAgQlJMX0NNRF9HVUlfQVJFQV9BQ1RWIC8qIHJldHVybiB0byB0aGUgYWN0aXZlIHNjcmVlbiBhcmVhICovLAorICBCUkxfQ01EX0dVSV9BUkVBX1BSRVYgLyogc3dpdGNoIHRvIHRoZSBwcmV2aW91cyBzY3JlZW4gYXJlYSAqLywKKyAgQlJMX0NNRF9HVUlfQVJFQV9ORVhUIC8qIHN3aXRjaCB0byB0aGUgbmV4dCBzY3JlZW4gYXJlYSAqLywKKworICBCUkxfQ01EX0dVSV9JVEVNX0ZSU1QgLyogbW92ZSB0byB0aGUgZmlyc3QgaXRlbSBpbiB0aGUgc2NyZWVuIGFyZWEgKi8sCisgIEJSTF9DTURfR1VJX0lURU1fUFJFViAvKiBtb3ZlIHRvIHRoZSBwcmV2aW91cyBpdGVtIGluIHRoZSBzY3JlZW4gYXJlYSAqLywKKyAgQlJMX0NNRF9HVUlfSVRFTV9ORVhUIC8qIG1vdmUgdG8gdGhlIG5leHQgaXRlbSBpbiB0aGUgc2NyZWVuIGFyZWEgKi8sCisgIEJSTF9DTURfR1VJX0lURU1fTEFTVCAvKiBtb3ZlIHRvIHRoZSBsYXN0IGl0ZW0gaW4gdGhlIHNjcmVlbiBhcmVhICovLAorCisgIEJSTF9DTURfU0FZX0xPV0VSIC8qIGRlY3JlYXNlIHNwZWFraW5nIHBpdGNoICovLAorICBCUkxfQ01EX1NBWV9ISUdIRVIgLyogaW5jcmVhc2Ugc3BlYWtpbmcgcGl0Y2ggKi8sCisgIEJSTF9DTURfU0FZX0FMTCAvKiBzcGVhayBmcm9tIHRvcCBvZiBzY3JlZW4gdGhyb3VnaCBib3R0b20gb2Ygc2NyZWVuICovLAorCisgIEJSTF9DTURfQ09OVFJBQ1RFRCAvKiBzZXQgY29udHJhY3RlZC9jb21wdXRlciBicmFpbGxlICovLAorICBCUkxfQ01EX0NPTVBCUkw2IC8qIHNldCBzaXgvZWlnaHQgZG90IGNvbXB1dGVyIGJyYWlsbGUgKi8sCisKKyAgQlJMX0NNRF9QUkVGUkVTRVQgLyogcmVzZXQgcHJlZmVyZW5jZXMgdG8gZGVmYXVsdHMgKi8sCisKKyAgQlJMX2Jhc2ljQ29tbWFuZENvdW50IC8qIG11c3QgYmUgbGFzdCAqLworfSBCUkxfQmFzaWNDb21tYW5kOworCisvKgorICogUGxlYXNlIGNvbW1lbnQgYWxsIEJSTF9CTEtfKiBkZWZpbml0aW9ucy4gVGhleSBhcmUKKyAqIHVzZWQgZHVyaW5nIGF1dG9tYXRpYyBoZWxwIGZpbGUgZ2VuZXJhdGlvbi4KKyAqLwordHlwZWRlZiBlbnVtIHsKKyAgQlJMX0JMS19CQVNJQyA9IDAgLyogKG11c3QgYmUgZmlyc3QpICovLAorICBCUkxfQkxLX1JPVVRFIC8qIGJyaW5nIHNjcmVlbiBjdXJzb3IgdG8gY2hhcmFjdGVyICovLAorICBCUkxfQkxLX0NMSVBfTkVXIC8qIHN0YXJ0IG5ldyBjbGlwYm9hcmQgYXQgY2hhcmFjdGVyICovLAorICBCUkxfQkxLX0NMSVBfQUREIC8qIGFwcGVuZCB0byBjbGlwYm9hcmQgZnJvbSBjaGFyYWN0ZXIgKi8sCisgIEJSTF9CTEtfQ09QWV9SRUNUIC8qIHJlY3Rhbmd1bGFyIGNvcHkgdG8gY2hhcmFjdGVyICovLAorICBCUkxfQkxLX0NPUFlfTElORSAvKiBsaW5lYXIgY29weSB0byBjaGFyYWN0ZXIgKi8sCisgIEJSTF9CTEtfU1dJVENIVlQgLyogc3dpdGNoIHRvIHNwZWNpZmljIHZpcnR1YWwgdGVybWluYWwgKi8sCisgIEJSTF9CTEtfUFJJTkRFTlQgLyogZ28gdXAgdG8gbmVhcmVzdCBsaW5lIHdpdGggbGVzcyBpbmRlbnQgdGhhbiBjaGFyYWN0ZXIgKi8sCisgIEJSTF9CTEtfTlhJTkRFTlQgLyogZ28gZG93biB0byBuZWFyZXN0IGxpbmUgd2l0aCBsZXNzIGluZGVudCB0aGFuIGNoYXJhY3RlciAqLworICAsCisgIEJSTF9CTEtfREVTQ0NIQVIgLyogZGVzY3JpYmUgY2hhcmFjdGVyICovLAorICBCUkxfQkxLX1NFVExFRlQgLyogcGxhY2UgbGVmdCBlbmQgb2YgYnJhaWxsZSB3aW5kb3cgYXQgY2hhcmFjdGVyICovLAorICBCUkxfQkxLX1NFVE1BUksgLyogcmVtZW1iZXIgY3VycmVudCBicmFpbGxlIHdpbmRvdyBwb3NpdGlvbiAqLywKKyAgQlJMX0JMS19HT1RPTUFSSyAvKiBnbyB0byByZW1lbWJlcmVkIGJyYWlsbGUgd2luZG93IHBvc2l0aW9uICovLAorICBCUkxfQkxLX0dPVE9MSU5FIC8qIGdvIHRvIHNlbGVjdGVkIGxpbmUgKi8sCisgIEJSTF9CTEtfUFJESUZDSEFSIC8qIGdvIHVwIHRvIG5lYXJlc3QgbGluZSB3aXRoIGRpZmZlcmVudCBjaGFyYWN0ZXIgKi8sCisgIEJSTF9CTEtfTlhESUZDSEFSIC8qIGdvIGRvd24gdG8gbmVhcmVzdCBsaW5lIHdpdGggZGlmZmVyZW50IGNoYXJhY3RlciAqLywKKyAgQlJMX0JMS19DTElQX0NPUFkgLyogY29weSBjaGFyYWN0ZXJzIHRvIGNsaXBib2FyZCAqLywKKyAgQlJMX0JMS19DTElQX0FQUEVORCAvKiBhcHBlbmQgY2hhcmFjdGVycyB0byBjbGlwYm9hcmQgKi8sCisgIEJSTF9CTEtfUEFTVEVfSElTVE9SWSAvKiBpbnNlcnQgY2xpcGJvYXJkIGhpc3RvcnkgZW50cnkgYWZ0ZXIgc2NyZWVuIGN1cnNvciAqLworICAsCisgIEJSTF9CTEtfU0VUX1RFWFRfVEFCTEUgLyogc2V0IHRleHQgdGFibGUgKi8sCisgIEJSTF9CTEtfU0VUX0FUVFJJQlVURVNfVEFCTEUgLyogc2V0IGF0dHJpYnV0ZXMgdGFibGUgKi8sCisgIEJSTF9CTEtfU0VUX0NPTlRSQUNUSU9OX1RBQkxFIC8qIHNldCBjb250cmFjdGlvbiB0YWJsZSAqLywKKyAgQlJMX0JMS19TRVRfS0VZQk9BUkRfVEFCTEUgLyogc2V0IGtleWJvYXJkIHRhYmxlICovLAorICBCUkxfQkxLX1NFVF9MQU5HVUFHRV9QUk9GSUxFIC8qIHNldCBsYW5ndWFnZSBwcm9maWxlICovLAorICBCUkxfQkxLX1JPVVRFX0xJTkUgLyogYnJpbmcgc2NyZWVuIGN1cnNvciB0byBsaW5lICovLAorICBCUkxfQkxLX1JFRlJFU0hfTElORSAvKiByZWZyZXNoIGJyYWlsbGUgbGluZSAqLywKKyAgQlJMX0JMS19UWFRTRUxfU1RBUlQgLyogc3RhcnQgdGV4dCBzZWxlY3Rpb24gKi8sCisgIEJSTF9CTEtfVFhUU0VMX1NFVCAvKiBzZXQgdGV4dCBzZWxlY3Rpb24gKi8sCisgIEJSTF9CTEtfUk9VVEVfU1BFRUNIIC8qIGJyaW5nIHNwZWVjaCBjdXJzb3IgdG8gY2hhcmFjdGVyICovLAorICBCUkxfQkxLXzFEIC8qIChyZXNlcnZlZCkgKi8sCisgIEJSTF9CTEtfU0VMRUNUVlQgLyogYmluZCB0byBzcGVjaWZpYyB2aXJ0dWFsIHRlcm1pbmFsICovLAorICBCUkxfQkxLX0FMRVJUIC8qIHJlbmRlciBhbiBhbGVydCAqLywKKyAgQlJMX0JMS19QQVNTS0VZIC8qIChlbXVsYXRlIHNwZWNpYWwga2V5KSAqLywKKyAgQlJMX0JMS19QQVNTQ0hBUiAvKiB0eXBlIHVuaWNvZGUgY2hhcmFjdGVyICovLAorICBCUkxfQkxLX1BBU1NET1RTIC8qIHR5cGUgYnJhaWxsZSBkb3RzICovLAorICBCUkxfQkxLX1BBU1NBVCAvKiBBVCAoc2V0IDIpIGtleWJvYXJkIHNjYW4gY29kZSAqLywKKyAgQlJMX0JMS19QQVNTWFQgLyogWFQgKHNldCAxKSBrZXlib2FyZCBzY2FuIGNvZGUgKi8sCisgIEJSTF9CTEtfUEFTU1BTMiAvKiBQUy8yIChzZXQgMykga2V5Ym9hcmQgc2NhbiBjb2RlICovLAorICBCUkxfQkxLX0NPTlRFWFQgLyogc3dpdGNoIHRvIGNvbW1hbmQgY29udGV4dCAqLywKKyAgQlJMX0JMS19UT1VDSF9BVCAvKiBjdXJyZW50IHJlYWRpbmcgbG9jYXRpb24gKi8sCisgIEJSTF9CTEtfTUFDUk8gLyogZXhlY3V0ZSBjb21tYW5kIG1hY3JvICovLAorICBCUkxfQkxLX0hPU1RDTUQgLyogcnVuIGhvc3QgY29tbWFuZCAqLywKKworICBCUkxfYmxvY2tDb21tYW5kQ291bnQgLyogbXVzdCBiZSBsYXN0ICovCit9IEJSTF9CbG9ja0NvbW1hbmQ7CisKK3R5cGVkZWYgZW51bSB7CisgIEJSTF9LRVlfRU5URVIsCisgIEJSTF9LRVlfVEFCLAorICBCUkxfS0VZX0JBQ0tTUEFDRSwKKyAgQlJMX0tFWV9FU0NBUEUsCisgIEJSTF9LRVlfQ1VSU09SX0xFRlQsCisgIEJSTF9LRVlfQ1VSU09SX1JJR0hULAorICBCUkxfS0VZX0NVUlNPUl9VUCwKKyAgQlJMX0tFWV9DVVJTT1JfRE9XTiwKKyAgQlJMX0tFWV9QQUdFX1VQLAorICBCUkxfS0VZX1BBR0VfRE9XTiwKKyAgQlJMX0tFWV9IT01FLAorICBCUkxfS0VZX0VORCwKKyAgQlJMX0tFWV9JTlNFUlQsCisgIEJSTF9LRVlfREVMRVRFLAorICBCUkxfS0VZX0ZVTkNUSU9OCit9IEJSTF9LZXk7CisKKyNkZWZpbmUgQlJMX0NNRF9CTEsoY21kKSAoQlJMX0JMS18jI2NtZCA8PCBCUkxfU0hJRlRfQkxLKQorI2RlZmluZSBCUkxfQ01EX0FSRyhibGssYXJnKSAoQlJMX0NNRF9CTEsoYmxrKSB8IEJSTF9BUkdfU0VUKChhcmcpKSkKKyNkZWZpbmUgQlJMX0NNRF9DSEFSKHdjKSBCUkxfQ01EX0FSRyhQQVNTQ0hBUiwgKHdjKSkKKyNkZWZpbmUgQlJMX0NNRF9LRVkoa2V5KSBCUkxfQ01EX0FSRyhQQVNTS0VZLCAoQlJMX0tFWV8jI2tleSkpCisjZGVmaW5lIEJSTF9DTURfS0ZOKG4pIEJSTF9DTURfS0VZKEZVTkNUSU9OICsgKChuKSAtIDEpKQorCisjZGVmaW5lIEJSTF9GTEdfVE9HR0xFX09OICAgMFgwMTAwMDAgLyogZW5hYmxlIGZlYXR1cmUgKi8KKyNkZWZpbmUgQlJMX0ZMR19UT0dHTEVfT0ZGICAwWDAyMDAwMCAvKiBkaXNhYmxlIGZlYXR1cmUgKi8KKyNkZWZpbmUgQlJMX0ZMR19UT0dHTEVfTUFTSyAoQlJMX0ZMR19UT0dHTEVfT04gfCBCUkxfRkxHX1RPR0dMRV9PRkYpIC8qIG1hc2sgZm9yIGFsbCB0b2dnbGUgZmxhZ3MgKi8KKworI2RlZmluZSBCUkxfRkxHX01PVElPTl9ST1VURSAgMFgwNDAwMDAgLyogYnJpbmcgc2NyZWVuIGN1cnNvciBpbnRvIGJyYWlsbGUgd2luZG93IGFmdGVyIGZ1bmN0aW9uICovCisjZGVmaW5lIEJSTF9GTEdfTU9USU9OX1NDQUxFRCAwWDA4MDAwMCAvKiBzY2FsZSBhcmc9MFgwMC0wWEZGIHRvIHNjcmVlbiBoZWlnaHQgKi8KKyNkZWZpbmUgQlJMX0ZMR19NT1RJT05fVE9MRUZUIDBYMTAwMDAwIC8qIGdvIHRvIGJlZ2lubmluZyBvZiBsaW5lICovCisKKyNkZWZpbmUgQlJMX0ZMR19JTlBVVF9TSElGVCAgIDBYMDEwMDAwIC8qIHNoaWZ0IGtleSBwcmVzc2VkICovCisjZGVmaW5lIEJSTF9GTEdfSU5QVVRfVVBQRVIgICAwWDAyMDAwMCAvKiBjb252ZXJ0IHRvIHVwcGVyY2FzZSAqLworI2RlZmluZSBCUkxfRkxHX0lOUFVUX0NPTlRST0wgMFgwNDAwMDAgLyogY29udHJvbCBrZXkgcHJlc3NlZCAqLworI2RlZmluZSBCUkxfRkxHX0lOUFVUX01FVEEgICAgMFgwODAwMDAgLyogbWV0YSAobGVmdCBhbHQpIGtleSBwcmVzc2VkICovCisjZGVmaW5lIEJSTF9GTEdfSU5QVVRfQUxUR1IgICAwWDEwMDAwMCAvKiBhbHRnciAocmlnaHQgYWx0KSBrZXkgcHJlc3NlZCAqLworI2RlZmluZSBCUkxfRkxHX0lOUFVUX0dVSSAgICAgMFgyMDAwMDAgLyogZ3VpICh3aW5kb3dzKSBrZXkgcHJlc3NlZCAqLworI2RlZmluZSBCUkxfRkxHX0lOUFVUX0VTQ0FQRUQgMFg0MDAwMDAgLyogcHJlZml4IHdpdGggZXNjYXBlICovCisKKyNkZWZpbmUgQlJMX0ZMR19LQkRfUkVMRUFTRSAwWDAxMDAwMCAvKiBpdCBpcyBhIHJlbGVhc2Ugc2NhbiBjb2RlICovCisjZGVmaW5lIEJSTF9GTEdfS0JEX0VNVUwwICAgMFgwMjAwMDAgLyogaXQgaXMgYW4gZW11bGF0aW9uIDAgc2NhbiBjb2RlICovCisjZGVmaW5lIEJSTF9GTEdfS0JEX0VNVUwxICAgMFgwNDAwMDAgLyogaXQgaXMgYW4gZW11bGF0aW9uIDEgc2NhbiBjb2RlICovCisKKy8qIFRoZSBiaXRzIGZvciBlYWNoIGJyYWlsbGUgZG90LgorICoKKyAqIFRoaXMgaXMgdGhlIHNhbWUgZG90LXRvLWJpdCBtYXBwaW5nIHdoaWNoIGlzOgorICogKyAgc3BlY2lmaWVkIGJ5IHRoZSBJU08vVFIgMTE1NDgtMSBzdGFuZGFyZAorICogKyAgdXNlZCB3aXRoaW4gdGhlIFVuaWNvZGUgYnJhaWxsZSByb3c6CisgKi8KKy8qCisgKiBGcm9tIGxlYXN0LSB0byBtb3N0LXNpZ25pZmljYW50IG9jdGFsIGRpZ2l0OgorICogKyAgdGhlIGZpcnN0IGNvbnRhaW5zIGRvdHMgMS0zCisgKiArICB0aGUgc2Vjb25kIGNvbnRhaW5zIGRvdHMgNC02CisgKiArICB0aGUgdGhpcmQgY29udGFpbnMgZG90cyA3LTgKKyAqIAorICogSGVyZSBhcmUgYSBmZXcgd2F5cyB0byBpbGx1c3RyYXRlIGEgYnJhaWxsZSBjZWxsOgorICogICAgQnkgRG90ICAgQnkgQml0ICAgQXMgT2N0YWwKKyAqICAgIE51bWJlciAgIE51bWJlciAgICBEaWdpdHMKKyAqICAgICAxICA0ICAgICAwICAzICAgIDAwMSAgMDEwCisgKiAgICAgMiAgNSAgICAgMSAgNCAgICAwMDIgIDAyMAorICogICAgIDMgIDYgICAgIDIgIDUgICAgMDA0ICAwNDAKKyAqICAgICA3ICA4ICAgICA2ICA3ICAgIDEwMCAgMjAwCisgKi8KKyNkZWZpbmUgQlJMX0FSR19ET1QobikgQlJMX0FSR19TRVQoMSA8PCAoKG4pIC0gMSkpCisjZGVmaW5lIEJSTF9ET1QxIEJSTF9BUkdfRE9UKDEpIC8qIHVwcGVyLWxlZnQgZG90IG9mIHN0YW5kYXJkIGJyYWlsbGUgY2VsbCAqLworI2RlZmluZSBCUkxfRE9UMiBCUkxfQVJHX0RPVCgyKSAvKiBtaWRkbGUtbGVmdCBkb3Qgb2Ygc3RhbmRhcmQgYnJhaWxsZSBjZWxsICovCisjZGVmaW5lIEJSTF9ET1QzIEJSTF9BUkdfRE9UKDMpIC8qIGxvd2VyLWxlZnQgZG90IG9mIHN0YW5kYXJkIGJyYWlsbGUgY2VsbCAqLworI2RlZmluZSBCUkxfRE9UNCBCUkxfQVJHX0RPVCg0KSAvKiB1cHBlci1yaWdodCBkb3Qgb2Ygc3RhbmRhcmQgYnJhaWxsZSBjZWxsICovCisjZGVmaW5lIEJSTF9ET1Q1IEJSTF9BUkdfRE9UKDUpIC8qIG1pZGRsZS1yaWdodCBkb3Qgb2Ygc3RhbmRhcmQgYnJhaWxsZSBjZWxsICovCisjZGVmaW5lIEJSTF9ET1Q2IEJSTF9BUkdfRE9UKDYpIC8qIGxvd2VyLXJpZ2h0IGRvdCBvZiBzdGFuZGFyZCBicmFpbGxlIGNlbGwgKi8KKyNkZWZpbmUgQlJMX0RPVDcgQlJMX0FSR19ET1QoNykgLyogbG93ZXItbGVmdCBkb3Qgb2YgY29tcHV0ZXIgYnJhaWxsZSBjZWxsICovCisjZGVmaW5lIEJSTF9ET1Q4IEJSTF9BUkdfRE9UKDgpIC8qIGxvd2VyLXJpZ2h0IGRvdCBvZiBjb21wdXRlciBicmFpbGxlIGNlbGwgKi8KKyNkZWZpbmUgQlJMX0RPVEMgQlJMX0FSR19ET1QoOSkgLyogY2hvcmQgKHNwYWNlIGJhciBvbiBicmFpbGxlIGtleWJvYXJkKSAqLworCisjZGVmaW5lIEJSTF9BTExfRE9UUyAoIFwKKyAgQlJMX0RPVDEgfCBCUkxfRE9UMiB8IEJSTF9ET1QzIHwgQlJMX0RPVDQgfCBcCisgIEJSTF9ET1Q1IHwgQlJMX0RPVDYgfCBCUkxfRE9UNyB8IEJSTF9ET1Q4IFwKKykKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYgLyogX19jcGx1c3BsdXMgKi8KKworI2VuZGlmIC8qIEJSTFRUWV9JTkNMVURFRF9CUkxfQ01EUyAqLwpkaWZmIC0tZ2l0IGEvSGVhZGVycy9icmxfY3VzdG9tLmggYi9IZWFkZXJzL2JybF9jdXN0b20uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MWM4ZWFhCi0tLSAvZGV2L251bGwKKysrIGIvSGVhZGVycy9icmxfY3VzdG9tLmgKQEAgLTAsMCArMSw1MiBAQAorLyoKKyAqIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisgKiAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisgKgorICogQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKKyNpZm5kZWYgQlJMVFRZX0lOQ0xVREVEX0JSTF9DVVNUT00KKyNkZWZpbmUgQlJMVFRZX0lOQ0xVREVEX0JSTF9DVVNUT00KKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZiAvKiBfX2NwbHVzcGx1cyAqLworCit0eXBlZGVmIGVudW0geworICAvKiBtdXN0IGJlIGZpcnN0IC0gZG8gbm90IG1vZGlmeSAqLworICBCUkxfQ1VTVE9NX0JBU0lDX0NPTU1BTkRfQkFTRSA9IEJSTF9iYXNpY0NvbW1hbmRDb3VudCAtIDEsCisKKyAgLyogRGVmaW5lIGFsbCBjdXN0b20gYmFzaWMgY29tbWFuZHMgYmVsb3cgdGhpcyBwb2ludC4KKyAgICogVGhlaXIgbmFtZXMgc2hvdWxkIGJlZ2luIHdpdGggQlJMX0NNRF9DVVNUT01fLgorICAgKiBObyB2YWx1ZXMgc2hvdWxkIGJlIGFzc2lnbmVkLgorICAgKi8KKworfSBCUkxfQ3VzdG9tQmFzaWNDb21tYW5kOworCit0eXBlZGVmIGVudW0geworICAvKiBtdXN0IGJlIGZpcnN0IC0gZG8gbm90IG1vZGlmeSAqLworICBCUkxfQ1VTVE9NX0JMT0NLX0NPTU1BTkRfQkFTRSA9IEJSTF9ibG9ja0NvbW1hbmRDb3VudCAtIDEsCisKKyAgLyogRGVmaW5lIGFsbCBjdXN0b20gYmxvY2sgY29tbWFuZHMgYmVsb3cgdGhpcyBwb2ludC4KKyAgICogVGhlaXIgbmFtZXMgc2hvdWxkIGJlZ2luIHdpdGggQlJMX0JMS19DVVNUT01fLgorICAgKiBObyB2YWx1ZXMgc2hvdWxkIGJlIGFzc2lnbmVkLgorICAgKi8KKworfSBCUkxfQ3VzdG9tQmxvY2tDb21tYW5kOworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZiAvKiBfX2NwbHVzcGx1cyAqLworCisjZW5kaWYgLyogQlJMVFRZX0lOQ0xVREVEX0JSTF9DVVNUT00gKi8KZGlmZiAtLWdpdCBhL0hlYWRlcnMvYnJsX2RvdHMuaCBiL0hlYWRlcnMvYnJsX2RvdHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNzUzNzUyCi0tLSAvZGV2L251bGwKKysrIGIvSGVhZGVycy9icmxfZG90cy5oCkBAIC0wLDAgKzEsMTYwIEBACisvKgorICogQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyAqICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyAqCisgKiBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorICoKKyAqIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyAqCisgKiBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisgKi8KKworI2lmbmRlZiBCUkxUVFlfSU5DTFVERURfQlJMX0RPVFMKKyNkZWZpbmUgQlJMVFRZX0lOQ0xVREVEX0JSTF9ET1RTCisKKyNpbmNsdWRlIDxzdHJpbmdzLmg+CisKKyNpZmRlZiBfX01JTkdXMzJfXworZXh0ZXJuIGludCBmZnMgKGludCBpKTsKKyNlbmRpZiAvKiBfX01JTkdXMzJfXyAqLworCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmIC8qIF9fY3BsdXNwbHVzICovCisKKy8qIFRoZSBiaXRzIGZvciBlYWNoIGJyYWlsbGUgZG90IGFzIGRlZmluZWQgYnkgdGhlIElTTyAxMTU0OC0xIHN0YW5kYXJkLgorICoKKyAqIEZyb20gbGVhc3QtIHRvIG1vc3Qtc2lnbmlmaWNhbnQgb2N0YWwgZGlnaXQ6CisgKiArICB0aGUgZmlyc3QgY29udGFpbnMgZG90cyAxLTMKKyAqICsgIHRoZSBzZWNvbmQgY29udGFpbnMgZG90cyA0LTYKKyAqICsgIHRoZSB0aGlyZCBjb250YWlucyBkb3RzIDctOAorICogCisgKiBIZXJlIGFyZSBhIGZldyB3YXlzIHRvIGlsbHVzdHJhdGUgYSBicmFpbGxlIGNlbGw6CisgKiAgICBCeSBEb3QgICBCeSBCaXQgICBBcyBPY3RhbAorICogICAgTnVtYmVyICAgTnVtYmVyICAgIERpZ2l0cworICogICAgIDEgIDQgICAgIDAgIDMgICAgMDAxICAwMTAKKyAqICAgICAyICA1ICAgICAxICA0ICAgIDAwMiAgMDIwCisgKiAgICAgMyAgNiAgICAgMiAgNSAgICAwMDQgIDA0MAorICogICAgIDcgIDggICAgIDYgIDcgICAgMTAwICAyMDAKKyAqLworCit0eXBlZGVmIHVuc2lnbmVkIGNoYXIgQnJsRG90czsKKworI2RlZmluZSBCUkxfRE9UX0NPVU5UIDgKKworI2RlZmluZSBCUkxfRE9UKG51bWJlcikgKEJybERvdHMpKDEgPDwgKChudW1iZXIpIC0gMSkpCisjZGVmaW5lIEJSTF9ET1RfMSBCUkxfRE9UKDEpIC8qIHVwcGVyLWxlZnQgZG90IG9mIHN0YW5kYXJkIGJyYWlsbGUgY2VsbCAqLworI2RlZmluZSBCUkxfRE9UXzIgQlJMX0RPVCgyKSAvKiBtaWRkbGUtbGVmdCBkb3Qgb2Ygc3RhbmRhcmQgYnJhaWxsZSBjZWxsICovCisjZGVmaW5lIEJSTF9ET1RfMyBCUkxfRE9UKDMpIC8qIGxvd2VyLWxlZnQgZG90IG9mIHN0YW5kYXJkIGJyYWlsbGUgY2VsbCAqLworI2RlZmluZSBCUkxfRE9UXzQgQlJMX0RPVCg0KSAvKiB1cHBlci1yaWdodCBkb3Qgb2Ygc3RhbmRhcmQgYnJhaWxsZSBjZWxsICovCisjZGVmaW5lIEJSTF9ET1RfNSBCUkxfRE9UKDUpIC8qIG1pZGRsZS1yaWdodCBkb3Qgb2Ygc3RhbmRhcmQgYnJhaWxsZSBjZWxsICovCisjZGVmaW5lIEJSTF9ET1RfNiBCUkxfRE9UKDYpIC8qIGxvd2VyLXJpZ2h0IGRvdCBvZiBzdGFuZGFyZCBicmFpbGxlIGNlbGwgKi8KKyNkZWZpbmUgQlJMX0RPVF83IEJSTF9ET1QoNykgLyogbG93ZXItbGVmdCBkb3Qgb2YgY29tcHV0ZXIgYnJhaWxsZSBjZWxsICovCisjZGVmaW5lIEJSTF9ET1RfOCBCUkxfRE9UKDgpIC8qIGxvd2VyLXJpZ2h0IGRvdCBvZiBjb21wdXRlciBicmFpbGxlIGNlbGwgKi8KKworI2RlZmluZSBCUkxfRE9UU19MRUZUIChCUkxfRE9UXzEgfCBCUkxfRE9UXzIgfCBCUkxfRE9UXzMgfCBCUkxfRE9UXzcpCisjZGVmaW5lIEJSTF9ET1RTX1JJR0hUIChCUkxfRE9UXzQgfCBCUkxfRE9UXzUgfCBCUkxfRE9UXzYgfCBCUkxfRE9UXzgpCisjZGVmaW5lIEJSTF9ET1RTX0FMTCAoQlJMX0RPVFNfTEVGVCB8IEJSTF9ET1RTX1JJR0hUKQorCitzdGF0aWMgaW5saW5lIEJybERvdHMKK2JybEdldExlZnREb3RzIChCcmxEb3RzIGNlbGwpIHsKKyAgcmV0dXJuIGNlbGwgJiBCUkxfRE9UU19MRUZUOworfQorCitzdGF0aWMgaW5saW5lIEJybERvdHMKK2JybEdldFJpZ2h0RG90cyAoQnJsRG90cyBjZWxsKSB7CisgIHJldHVybiBjZWxsICYgQlJMX0RPVFNfUklHSFQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgQnJsRG90cworYnJsR2V0TGVmdERvdHNUb1JpZ2h0RG90cyAoQnJsRG90cyBjZWxsKSB7CisgIEJybERvdHMgZG90cyA9IDA7CisgIGlmIChjZWxsICYgQlJMX0RPVF8xKSBkb3RzIHw9IEJSTF9ET1RfNDsKKyAgaWYgKGNlbGwgJiBCUkxfRE9UXzIpIGRvdHMgfD0gQlJMX0RPVF81OworICBpZiAoY2VsbCAmIEJSTF9ET1RfMykgZG90cyB8PSBCUkxfRE9UXzY7CisgIGlmIChjZWxsICYgQlJMX0RPVF83KSBkb3RzIHw9IEJSTF9ET1RfODsKKyAgcmV0dXJuIGRvdHM7Cit9CisKK3N0YXRpYyBpbmxpbmUgQnJsRG90cworYnJsR2V0UmlnaHREb3RzVG9MZWZ0RG90cyAoQnJsRG90cyBjZWxsKSB7CisgIEJybERvdHMgZG90cyA9IDA7CisgIGlmIChjZWxsICYgQlJMX0RPVF80KSBkb3RzIHw9IEJSTF9ET1RfMTsKKyAgaWYgKGNlbGwgJiBCUkxfRE9UXzUpIGRvdHMgfD0gQlJMX0RPVF8yOworICBpZiAoY2VsbCAmIEJSTF9ET1RfNikgZG90cyB8PSBCUkxfRE9UXzM7CisgIGlmIChjZWxsICYgQlJMX0RPVF84KSBkb3RzIHw9IEJSTF9ET1RfNzsKKyAgcmV0dXJuIGRvdHM7Cit9CisKK3N0YXRpYyBpbmxpbmUgQnJsRG90cworYnJsR2V0TGVmdERvdHNUb1JpZ2h0RG90c0FsdCAoQnJsRG90cyBjZWxsKSB7CisgIEJybERvdHMgZG90cyA9IDA7CisgIGlmIChjZWxsICYgQlJMX0RPVF8xKSBkb3RzIHw9IEJSTF9ET1RfNjsKKyAgaWYgKGNlbGwgJiBCUkxfRE9UXzIpIGRvdHMgfD0gQlJMX0RPVF81OworICBpZiAoY2VsbCAmIEJSTF9ET1RfMykgZG90cyB8PSBCUkxfRE9UXzQ7CisgIGlmIChjZWxsICYgQlJMX0RPVF83KSBkb3RzIHw9IEJSTF9ET1RfODsKKyAgcmV0dXJuIGRvdHM7Cit9CisKK3N0YXRpYyBpbmxpbmUgQnJsRG90cworYnJsR2V0UmlnaHREb3RzVG9MZWZ0RG90c0FsdCAoQnJsRG90cyBjZWxsKSB7CisgIEJybERvdHMgZG90cyA9IDA7CisgIGlmIChjZWxsICYgQlJMX0RPVF80KSBkb3RzIHw9IEJSTF9ET1RfMzsKKyAgaWYgKGNlbGwgJiBCUkxfRE9UXzUpIGRvdHMgfD0gQlJMX0RPVF8yOworICBpZiAoY2VsbCAmIEJSTF9ET1RfNikgZG90cyB8PSBCUkxfRE9UXzE7CisgIGlmIChjZWxsICYgQlJMX0RPVF84KSBkb3RzIHw9IEJSTF9ET1RfNzsKKyAgcmV0dXJuIGRvdHM7Cit9CisKK3N0YXRpYyBpbmxpbmUgQnJsRG90cworYnJsTnVtYmVyVG9Eb3QgKGNoYXIgbnVtYmVyKSB7CisgIHJldHVybiAoKG51bWJlciA+PSAnMScpICYmIChudW1iZXIgPD0gJzgnKSk/IEJSTF9ET1QobnVtYmVyIC0gJzAnKTogMDsKK30KKworc3RhdGljIGlubGluZSBjaGFyCiticmxEb3RUb051bWJlciAoQnJsRG90cyBkb3QpIHsKKyAgaW50IHNoaWZ0ID0gZmZzKGRvdCk7CisgIHJldHVybiBzaGlmdD8gKChjaGFyKXNoaWZ0ICsgJzAnKTogMDsKK30KKworc3RhdGljIGlubGluZSB2b2lkCiticmxSZW1hcERvdCAoQnJsRG90cyAqZG90cywgQnJsRG90cyBmcm9tLCBCcmxEb3RzIHRvKSB7CisgIGlmICgqZG90cyAmIGZyb20pIHsKKyAgICAqZG90cyAmPSB+ZnJvbTsKKyAgICAqZG90cyB8PSB0bzsKKyAgfQorfQorCit0eXBlZGVmIEJybERvdHMgQnJsRG90VGFibGVbQlJMX0RPVF9DT1VOVF07CisKK3R5cGVkZWYgY2hhciBCcmxEb3ROdW1iZXJzQnVmZmVyW0JSTF9ET1RfQ09VTlQgKyAxXTsKKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQKK2JybERvdHNUb051bWJlcnMgKEJybERvdHMgZG90cywgQnJsRG90TnVtYmVyc0J1ZmZlciBudW1iZXJzKSB7CisgIGNoYXIgKm51bWJlciA9IG51bWJlcnM7CisKKyAgd2hpbGUgKGRvdHMpIHsKKyAgICBpbnQgc2hpZnQgPSBmZnMoZG90cykgLSAxOworICAgIGRvdHMgLT0gMSA8PCBzaGlmdDsKKyAgICAqbnVtYmVyKysgPSAoY2hhcilzaGlmdCArICcxJzsKKyAgfQorCisgICpudW1iZXIgPSAwOworICByZXR1cm4gKHVuc2lnbmVkIGludCkobnVtYmVyIC0gbnVtYmVycyk7Cit9CisKKy8qIFRoZSBVbmljb2RlIHJvdyB1c2VkIGZvciBsaXRlcmFsIGJyYWlsbGUgZG90IHJlcHJlc2VudGF0aW9ucy4gKi8KKyNkZWZpbmUgQlJMX1VOSUNPREVfUk9XIDBYMjgwMAorCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZiAvKiBfX2NwbHVzcGx1cyAqLworCisjZW5kaWYgLyogQlJMVFRZX0lOQ0xVREVEX0JSTF9ET1RTICovCmRpZmYgLS1naXQgYS9IZWFkZXJzL2JybF9kcml2ZXIuaCBiL0hlYWRlcnMvYnJsX2RyaXZlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI3MWQ0ZTcKLS0tIC9kZXYvbnVsbAorKysgYi9IZWFkZXJzL2JybF9kcml2ZXIuaApAQCAtMCwwICsxLDk5IEBACisvKgorICogQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyAqICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyAqCisgKiBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorICoKKyAqIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyAqCisgKiBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisgKi8KKworI2lmbmRlZiBCUkxUVFlfSU5DTFVERURfQlJMX0RSSVZFUgorI2RlZmluZSBCUkxUVFlfSU5DTFVERURfQlJMX0RSSVZFUgorCisjaW5jbHVkZSA8c3RkaW8uaD4KKworI2luY2x1ZGUgImJybF90eXBlcy5oIgorI2luY2x1ZGUgImJybF9jbWRzLmgiCisjaW5jbHVkZSAiYnJsX3V0aWxzLmgiCisjaW5jbHVkZSAiYnJsX2Jhc2UuaCIKKyNpbmNsdWRlICJzdGF0dXNfdHlwZXMuaCIKKyNpbmNsdWRlICJpb19nZW5lcmljLmgiCisjaW5jbHVkZSAiY21kX2VucXVldWUuaCIKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZiAvKiBfX2NwbHVzcGx1cyAqLworCisjaWZkZWYgQlJMUEFSTVMKK3N0YXRpYyBjb25zdCBjaGFyICpjb25zdCBicmxfcGFyYW1ldGVyc1tdID0ge0JSTFBBUk1TLCBOVUxMfTsKKyNlbHNlIC8qIEJSTFBBUk1TICovCisjZGVmaW5lIGJybF9wYXJhbWV0ZXJzIE5VTEwKKyNlbmRpZiAvKiBCUkxQQVJNUyAqLworCisjaWZkZWYgQlJMX1NUQVRVU19GSUVMRFMKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGJybF9zdGF0dXNGaWVsZHNbXSA9IHtCUkxfU1RBVFVTX0ZJRUxEUywgc2ZFbmR9OworI2Vsc2UgLyogQlJMX1NUQVRVU19GSUVMRFMgKi8KKyNkZWZpbmUgYnJsX3N0YXR1c0ZpZWxkcyBOVUxMCisjZW5kaWYgLyogQlJMX1NUQVRVU19GSUVMRFMgKi8KKworc3RhdGljIGludCBicmxfY29uc3RydWN0IChCcmFpbGxlRGlzcGxheSAqYnJsLCBjaGFyICoqcGFyYW1ldGVycywgY29uc3QgY2hhciAqZGV2aWNlKTsKK3N0YXRpYyB2b2lkIGJybF9kZXN0cnVjdCAoQnJhaWxsZURpc3BsYXkgKmJybCk7CisKK3N0YXRpYyBpbnQgYnJsX3JlYWRDb21tYW5kIChCcmFpbGxlRGlzcGxheSAqYnJsLCBLZXlUYWJsZUNvbW1hbmRDb250ZXh0IGNvbnRleHQpOworc3RhdGljIGludCBicmxfd3JpdGVXaW5kb3cgKEJyYWlsbGVEaXNwbGF5ICpicmwsIGNvbnN0IHdjaGFyX3QgKmNoYXJhY3RlcnMpOworCisjaWZkZWYgQlJMX0hBVkVfU1RBVFVTX0NFTExTCitzdGF0aWMgaW50IGJybF93cml0ZVN0YXR1cyAoQnJhaWxsZURpc3BsYXkgKmJybCwgY29uc3QgdW5zaWduZWQgY2hhciAqY2VsbHMpOworI2Vsc2UgLyogQlJMX0hBVkVfU1RBVFVTX0NFTExTICovCisjZGVmaW5lIGJybF93cml0ZVN0YXR1cyBOVUxMCisjZW5kaWYgLyogQlJMX0hBVkVfU1RBVFVTX0NFTExTICovCisKKyNpZmRlZiBCUkxfSEFWRV9QQUNLRVRfSU8KK3N0YXRpYyBzc2l6ZV90IGJybF9yZWFkUGFja2V0IChCcmFpbGxlRGlzcGxheSAqYnJsLCB2b2lkICpidWZmZXIsIHNpemVfdCBzaXplKTsKK3N0YXRpYyBzc2l6ZV90IGJybF93cml0ZVBhY2tldCAoQnJhaWxsZURpc3BsYXkgKmJybCwgY29uc3Qgdm9pZCAqYnVmZmVyLCBzaXplX3Qgc2l6ZSk7CitzdGF0aWMgaW50IGJybF9yZXNldCAoQnJhaWxsZURpc3BsYXkgKmJybCk7CisjZWxzZSAvKiBCUkxfSEFWRV9QQUNLRVRfSU8gKi8KKyNkZWZpbmUgYnJsX3JlYWRQYWNrZXQgTlVMTAorI2RlZmluZSBicmxfd3JpdGVQYWNrZXQgTlVMTAorI2RlZmluZSBicmxfcmVzZXQgTlVMTAorI2VuZGlmIC8qIEJSTF9IQVZFX1BBQ0tFVF9JTyAqLworCisjaWZuZGVmIEJSTFNZTUJPTAorI2RlZmluZSBCUkxTWU1CT0wgQ09OQ0FURU5BVEUoYnJsX2RyaXZlcl8sRFJJVkVSX0NPREUpCisjZW5kaWYgLyogQlJMU1lNQk9MICovCisKK2V4dGVybiBjb25zdCBCcmFpbGxlRHJpdmVyIEJSTFNZTUJPTDsKK2NvbnN0IEJyYWlsbGVEcml2ZXIgQlJMU1lNQk9MID0geworICBEUklWRVJfREVGSU5JVElPTl9JTklUSUFMSVpFUiwKKworICBicmxfcGFyYW1ldGVycywKKyAgYnJsX3N0YXR1c0ZpZWxkcywKKworICBicmxfY29uc3RydWN0LAorICBicmxfZGVzdHJ1Y3QsCisKKyAgYnJsX3JlYWRDb21tYW5kLAorICBicmxfd3JpdGVXaW5kb3csCisgIGJybF93cml0ZVN0YXR1cywKKworICBicmxfcmVhZFBhY2tldCwKKyAgYnJsX3dyaXRlUGFja2V0LAorICBicmxfcmVzZXQKK307CisKK0RSSVZFUl9WRVJTSU9OX0RFQ0xBUkFUSU9OKGJybCk7CisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmIC8qIF9fY3BsdXNwbHVzICovCisKKyNlbmRpZiAvKiBCUkxUVFlfSU5DTFVERURfQlJMX0RSSVZFUiAqLwpkaWZmIC0tZ2l0IGEvSGVhZGVycy9icmxfdHlwZXMuaCBiL0hlYWRlcnMvYnJsX3R5cGVzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjMxYTU5OAotLS0gL2Rldi9udWxsCisrKyBiL0hlYWRlcnMvYnJsX3R5cGVzLmgKQEAgLTAsMCArMSwxNjkgQEAKKy8qCisgKiBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorICogICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorICoKKyAqIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorICoKKyAqIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyAqLworCisjaWZuZGVmIEJSTFRUWV9JTkNMVURFRF9CUkxfVFlQRVMKKyNkZWZpbmUgQlJMVFRZX0lOQ0xVREVEX0JSTF9UWVBFUworCisjaW5jbHVkZSAiYXN5bmNfdHlwZXNfaGFuZGxlLmgiCisjaW5jbHVkZSAiY3RiX3R5cGVzLmgiCisjaW5jbHVkZSAiZHJpdmVyLmgiCisjaW5jbHVkZSAiZ2lvX3R5cGVzLmgiCisjaW5jbHVkZSAia3RiX3R5cGVzLmgiCisjaW5jbHVkZSAicXVldWUuaCIKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZiAvKiBfX2NwbHVzcGx1cyAqLworCisjZGVmaW5lIEJSTF9OT19DVVJTT1IgLTEKKwordHlwZWRlZiBlbnVtIHsKKyAgQlJMX0ZJUk1ORVNTX01JTklNVU0sCisgIEJSTF9GSVJNTkVTU19MT1csCisgIEJSTF9GSVJNTkVTU19NRURJVU0sCisgIEJSTF9GSVJNTkVTU19ISUdILAorICBCUkxfRklSTU5FU1NfTUFYSU1VTQorfSBCcmFpbGxlRmlybW5lc3M7CisKK3R5cGVkZWYgZW51bSB7CisgIEJSTF9TRU5TSVRJVklUWV9NSU5JTVVNLAorICBCUkxfU0VOU0lUSVZJVFlfTE9XLAorICBCUkxfU0VOU0lUSVZJVFlfTUVESVVNLAorICBCUkxfU0VOU0lUSVZJVFlfSElHSCwKKyAgQlJMX1NFTlNJVElWSVRZX01BWElNVU0KK30gVG91Y2hTZW5zaXRpdml0eTsKKwordHlwZWRlZiBlbnVtIHsKKyAgQlJMX1RZUElOR19URVhULAorICBCUkxfVFlQSU5HX0RPVFMKK30gQnJhaWxsZVR5cGluZ01vZGU7CisKK3R5cGVkZWYgc3RydWN0IEJyYWlsbGVEaXNwbGF5U3RydWN0IEJyYWlsbGVEaXNwbGF5OwordHlwZWRlZiBzdHJ1Y3QgQnJhaWxsZURhdGFTdHJ1Y3QgQnJhaWxsZURhdGE7CisKK3R5cGVkZWYgaW50IFJlZnJlc2hCcmFpbGxlRGlzcGxheU1ldGhvZCAoQnJhaWxsZURpc3BsYXkgKmJybCk7Cit0eXBlZGVmIGludCBSZWZyZXNoQnJhaWxsZVJvd01ldGhvZCAoQnJhaWxsZURpc3BsYXkgKmJybCwgaW50IHJvdyk7CisKK3R5cGVkZWYgaW50IFNldEJyYWlsbGVGaXJtbmVzc01ldGhvZCAoQnJhaWxsZURpc3BsYXkgKmJybCwgQnJhaWxsZUZpcm1uZXNzIHNldHRpbmcpOwordHlwZWRlZiBpbnQgU2V0VG91Y2hTZW5zaXRpdml0eU1ldGhvZCAoQnJhaWxsZURpc3BsYXkgKmJybCwgVG91Y2hTZW5zaXRpdml0eSBzZXR0aW5nKTsKK3R5cGVkZWYgaW50IFNldEF1dG9yZXBlYXRQcm9wZXJ0aWVzTWV0aG9kIChCcmFpbGxlRGlzcGxheSAqYnJsLCBpbnQgb24sIGludCBkZWxheSwgaW50IGludGVydmFsKTsKKwordHlwZWRlZiBzdHJ1Y3QgeworICBzdHJ1Y3QgeworICAgIENvbnRyYWN0aW9uQ2FjaGUgY2FjaGU7CisgICAgaW50IGxlbmd0aDsKKworICAgIHN0cnVjdCB7CisgICAgICBpbnQgKmFycmF5OworICAgICAgdW5zaWduZWQgaW50IHNpemU7CisgICAgfSBvZmZzZXRzOworICB9IGNvbnRyYWN0ZWQ7Cit9IEJyYWlsbGVSb3dEZXNjcmlwdG9yOworCitzdHJ1Y3QgQnJhaWxsZURpc3BsYXlTdHJ1Y3QgeworICBCcmFpbGxlRGF0YSAqZGF0YTsKKworICBSZWZyZXNoQnJhaWxsZURpc3BsYXlNZXRob2QgKnJlZnJlc2hCcmFpbGxlRGlzcGxheTsKKyAgUmVmcmVzaEJyYWlsbGVSb3dNZXRob2QgKnJlZnJlc2hCcmFpbGxlUm93OworCisgIFNldEJyYWlsbGVGaXJtbmVzc01ldGhvZCAqc2V0QnJhaWxsZUZpcm1uZXNzOworICBTZXRUb3VjaFNlbnNpdGl2aXR5TWV0aG9kICpzZXRUb3VjaFNlbnNpdGl2aXR5OworICBTZXRBdXRvcmVwZWF0UHJvcGVydGllc01ldGhvZCAqc2V0QXV0b3JlcGVhdFByb3BlcnRpZXM7CisKKyAgdW5zaWduZWQgaW50IHRleHRDb2x1bW5zOworICB1bnNpZ25lZCBpbnQgdGV4dFJvd3M7CisgIHVuc2lnbmVkIGludCBzdGF0dXNDb2x1bW5zOworICB1bnNpZ25lZCBpbnQgc3RhdHVzUm93czsKKyAgdW5zaWduZWQgY2hhciBjZWxsU2l6ZTsKKworICBjb25zdCBjaGFyICprZXlCaW5kaW5nczsKKyAgS0VZX05BTUVfVEFCTEVTX1JFRkVSRU5DRSBrZXlOYW1lczsKKyAgS2V5VGFibGUgKmtleVRhYmxlOworCisgIEdpb0VuZHBvaW50ICpnaW9FbmRwb2ludDsKKyAgdW5zaWduZWQgaW50IHdyaXRlRGVsYXk7CisKKyAgdW5zaWduZWQgY2hhciAqYnVmZmVyOworICB2b2lkICgqYnVmZmVyUmVzaXplZCkodW5zaWduZWQgaW50IHJvd3MsIHVuc2lnbmVkIGludCBjb2x1bW5zKTsKKworICBzdHJ1Y3QgeworICAgIEJyYWlsbGVSb3dEZXNjcmlwdG9yICphcnJheTsKKyAgICB1bnNpZ25lZCBpbnQgc2l6ZTsKKyAgfSByb3dEZXNjcmlwdG9yczsKKworICBpbnQgY3Vyc29yOworICB1bnNpZ25lZCBjaGFyIHF1YWxpdHk7CisKKyAgdW5zaWduZWQgY2hhciBub0Rpc3BsYXk6MTsKKyAgdW5zaWduZWQgY2hhciBoYXNGYWlsZWQ6MTsKKyAgdW5zaWduZWQgY2hhciBpc09mZmxpbmU6MTsKKyAgdW5zaWduZWQgY2hhciBpc1N1c3BlbmRlZDoxOworCisgIHVuc2lnbmVkIGNoYXIgaXNDb3JlQnVmZmVyIDogMTsKKyAgdW5zaWduZWQgY2hhciByZXNpemVSZXF1aXJlZCA6IDE7CisKKyAgdW5zaWduZWQgY2hhciBoaWRlQ3Vyc29yOjE7CisKKyAgc3RydWN0IHsKKyAgICBRdWV1ZSAqbWVzc2FnZXM7CisgICAgQXN5bmNIYW5kbGUgYWxhcm07CisKKyAgICBzdHJ1Y3QgeworICAgICAgaW50IHRpbWVvdXQ7CisgICAgICB1bnNpZ25lZCBpbnQgY291bnQ7CisgICAgICB1bnNpZ25lZCBpbnQgbGltaXQ7CisgICAgfSBtaXNzaW5nOworICB9IGFja25vd2xlZGdlbWVudHM7Cit9OworCitzdGF0aWMgaW5saW5lIGludAoraGFzRWlnaHREb3RDZWxscyAoY29uc3QgQnJhaWxsZURpc3BsYXkgKmJybCkgeworICByZXR1cm4gYnJsLT5jZWxsU2l6ZSA+PSA4OworfQorCitzdGF0aWMgaW5saW5lIGludAoraXNNdWx0aVJvdyAoY29uc3QgQnJhaWxsZURpc3BsYXkgKmJybCkgeworICByZXR1cm4gYnJsLT50ZXh0Um93cyA+IDE7Cit9CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgRFJJVkVSX0RFRklOSVRJT05fREVDTEFSQVRJT047CisKKyAgY29uc3QgY2hhciAqY29uc3QgKnBhcmFtZXRlcnM7CisgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnN0YXR1c0ZpZWxkczsKKworICBpbnQgKCpjb25zdHJ1Y3QpIChCcmFpbGxlRGlzcGxheSAqYnJsLCBjaGFyICoqcGFyYW1ldGVycywgY29uc3QgY2hhciAqZGV2aWNlKTsKKyAgdm9pZCAoKmRlc3RydWN0KSAoQnJhaWxsZURpc3BsYXkgKmJybCk7CisKKyAgaW50ICgqcmVhZENvbW1hbmQpIChCcmFpbGxlRGlzcGxheSAqYnJsLCBLZXlUYWJsZUNvbW1hbmRDb250ZXh0IGNvbnRleHQpOworICBpbnQgKCp3cml0ZVdpbmRvdykgKEJyYWlsbGVEaXNwbGF5ICpicmwsIGNvbnN0IHdjaGFyX3QgKmNoYXJhY3RlcnMpOworICBpbnQgKCp3cml0ZVN0YXR1cykgKEJyYWlsbGVEaXNwbGF5ICpicmwsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmNlbGxzKTsKKworICBzc2l6ZV90ICgqcmVhZFBhY2tldCkgKEJyYWlsbGVEaXNwbGF5ICpicmwsIHZvaWQgKmJ1ZmZlciwgc2l6ZV90IHNpemUpOworICBzc2l6ZV90ICgqd3JpdGVQYWNrZXQpIChCcmFpbGxlRGlzcGxheSAqYnJsLCBjb25zdCB2b2lkICpwYWNrZXQsIHNpemVfdCBzaXplKTsKKyAgaW50ICgqcmVzZXQpIChCcmFpbGxlRGlzcGxheSAqYnJsKTsKKyAgCisgIGludCAoKnJlYWRLZXkpIChCcmFpbGxlRGlzcGxheSAqYnJsKTsKKyAgaW50ICgqa2V5VG9Db21tYW5kKSAoQnJhaWxsZURpc3BsYXkgKmJybCwgS2V5VGFibGVDb21tYW5kQ29udGV4dCBjb250ZXh0LCBpbnQga2V5KTsKK30gQnJhaWxsZURyaXZlcjsKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYgLyogX19jcGx1c3BsdXMgKi8KKworI2VuZGlmIC8qIEJSTFRUWV9JTkNMVURFRF9CUkxfVFlQRVMgKi8KZGlmZiAtLWdpdCBhL0hlYWRlcnMvYnJsX3V0aWxzLmggYi9IZWFkZXJzL2JybF91dGlscy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMyY2VlOTQKLS0tIC9kZXYvbnVsbAorKysgYi9IZWFkZXJzL2JybF91dGlscy5oCkBAIC0wLDAgKzEsNzAgQEAKKy8qCisgKiBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorICogICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorICoKKyAqIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorICoKKyAqIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyAqLworCisjaWZuZGVmIEJSTFRUWV9JTkNMVURFRF9CUkxfVVRJTFMKKyNkZWZpbmUgQlJMVFRZX0lOQ0xVREVEX0JSTF9VVElMUworCisjaW5jbHVkZSAiYnJsX3R5cGVzLmgiCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYgLyogX19jcGx1c3BsdXMgKi8KKworZXh0ZXJuIHZvaWQgZHJhaW5CcmFpbGxlT3V0cHV0IChCcmFpbGxlRGlzcGxheSAqYnJsLCBpbnQgbWluaW11bURlbGF5KTsKKworZXh0ZXJuIHZvaWQgYW5ub3VuY2VCcmFpbGxlT2ZmbGluZSAodm9pZCk7CitleHRlcm4gdm9pZCBhbm5vdW5jZUJyYWlsbGVPbmxpbmUgKHZvaWQpOworCitleHRlcm4gdm9pZCBzZXRCcmFpbGxlT2ZmbGluZSAoQnJhaWxsZURpc3BsYXkgKmJybCk7CitleHRlcm4gdm9pZCBzZXRCcmFpbGxlT25saW5lIChCcmFpbGxlRGlzcGxheSAqYnJsKTsKKworZXh0ZXJuIGludCBjZWxsc0hhdmVDaGFuZ2VkICgKKyAgdW5zaWduZWQgY2hhciAqY2VsbHMsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKm5ldywgdW5zaWduZWQgaW50IGNvdW50LAorICB1bnNpZ25lZCBpbnQgKmZyb20sIHVuc2lnbmVkIGludCAqdG8sIHVuc2lnbmVkIGNoYXIgKmZvcmNlCispOworCitleHRlcm4gaW50IHRleHRIYXNDaGFuZ2VkICgKKyAgd2NoYXJfdCAqdGV4dCwgY29uc3Qgd2NoYXJfdCAqbmV3LCB1bnNpZ25lZCBpbnQgY291bnQsCisgIHVuc2lnbmVkIGludCAqZnJvbSwgdW5zaWduZWQgaW50ICp0bywgdW5zaWduZWQgY2hhciAqZm9yY2UKKyk7CisKK2V4dGVybiBpbnQgY3Vyc29ySGFzQ2hhbmdlZCAoaW50ICpjdXJzb3IsIGludCBuZXcsIHVuc2lnbmVkIGNoYXIgKmZvcmNlKTsKKworZXh0ZXJuIHVuc2lnbmVkIGNoYXIgdG9Mb3dlckRpZ2l0ICh1bnNpZ25lZCBjaGFyIHVwcGVyKTsKKwordHlwZWRlZiBjb25zdCB1bnNpZ25lZCBjaGFyIERpZ2l0c1RhYmxlWzExXTsKK3R5cGVkZWYgdW5zaWduZWQgY2hhciBNYWtlTnVtYmVyRnVuY3Rpb24gKGludCB4KTsKK3R5cGVkZWYgdW5zaWduZWQgY2hhciBNYWtlRmxhZ0Z1bmN0aW9uIChpbnQgbnVtYmVyLCBpbnQgb24pOworCitleHRlcm4gY29uc3QgRGlnaXRzVGFibGUgbGFuZHNjYXBlRGlnaXRzOworZXh0ZXJuIE1ha2VOdW1iZXJGdW5jdGlvbiBtYWtlTGFuZHNjYXBlTnVtYmVyOworZXh0ZXJuIE1ha2VGbGFnRnVuY3Rpb24gbWFrZUxhbmRzY2FwZUZsYWc7CisKK2V4dGVybiBjb25zdCBEaWdpdHNUYWJsZSBzZWFzY2FwZURpZ2l0czsKK2V4dGVybiBNYWtlTnVtYmVyRnVuY3Rpb24gbWFrZVNlYXNjYXBlTnVtYmVyOworZXh0ZXJuIE1ha2VGbGFnRnVuY3Rpb24gbWFrZVNlYXNjYXBlRmxhZzsKKworZXh0ZXJuIGNvbnN0IERpZ2l0c1RhYmxlIHBvcnRyYWl0RGlnaXRzOworZXh0ZXJuIE1ha2VOdW1iZXJGdW5jdGlvbiBtYWtlUG9ydHJhaXROdW1iZXI7CitleHRlcm4gTWFrZUZsYWdGdW5jdGlvbiBtYWtlUG9ydHJhaXRGbGFnOworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZiAvKiBfX2NwbHVzcGx1cyAqLworCisjZW5kaWYgLyogQlJMVFRZX0lOQ0xVREVEX0JSTF9VVElMUyAqLwpkaWZmIC0tZ2l0IGEvSGVhZGVycy9jaGFyc2V0LmggYi9IZWFkZXJzL2NoYXJzZXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNWFlYjE0Ci0tLSAvZGV2L251bGwKKysrIGIvSGVhZGVycy9jaGFyc2V0LmgKQEAgLTAsMCArMSw1NiBAQAorLyoKKyAqIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisgKiAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisgKgorICogQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKKyNpZm5kZWYgQlJMVFRZX0lOQ0xVREVEX0NIQVJTRVQKKyNkZWZpbmUgQlJMVFRZX0lOQ0xVREVEX0NIQVJTRVQKKworI2luY2x1ZGUgInV0ZjguaCIKKyNpbmNsdWRlICJsb2NrLmgiCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYgLyogX19jcGx1c3BsdXMgKi8KKworZXh0ZXJuIGludCBpc0NoYXJzZXRMYXRpbjEgKGNvbnN0IGNoYXIgKm5hbWUpOworCitleHRlcm4gY2hhciAqZ2V0TG9jYWxlTmFtZSAodm9pZCk7CitleHRlcm4gaW50IGlzUG9zaXhMb2NhbGUgKGNvbnN0IGNoYXIgKmxvY2FsZSk7CisKK2V4dGVybiBjb25zdCBjaGFyICpzZXRDaGFyc2V0IChjb25zdCBjaGFyICpuYW1lKTsKK2V4dGVybiBjb25zdCBjaGFyICpnZXRDaGFyc2V0ICh2b2lkKTsKKworZXh0ZXJuIGNvbnN0IGNoYXIgKmdldExvY2FsZUNoYXJzZXQgKHZvaWQpOworZXh0ZXJuIGNvbnN0IGNoYXIgKmdldFdjaGFyQ2hhcnNldCAodm9pZCk7CisKK2V4dGVybiBzaXplX3QgY29udmVydENoYXJUb1V0ZjggKGNoYXIgYywgVXRmOEJ1ZmZlciB1dGY4KTsKK2V4dGVybiBpbnQgY29udmVydFV0ZjhUb0NoYXIgKGNvbnN0IGNoYXIgKip1dGY4LCBzaXplX3QgKnV0ZnMpOworCitleHRlcm4gd2ludF90IGNvbnZlcnRDaGFyVG9XY2hhciAoY2hhciBjKTsKK2V4dGVybiBpbnQgY29udmVydFdjaGFyVG9DaGFyICh3Y2hhcl90IHdjKTsKKworZXh0ZXJuIGludCBsb2NrQ2hhcnNldCAoTG9ja09wdGlvbnMgb3B0aW9ucyk7CitleHRlcm4gdm9pZCB1bmxvY2tDaGFyc2V0ICh2b2lkKTsKKwordHlwZWRlZiBjaGFyICpQYXRoTWFrZXIgKGNvbnN0IGNoYXIgKmRpcmVjdG9yeSwgY29uc3QgY2hhciAqbmFtZSk7CitleHRlcm4gY2hhciAqZ2V0RmlsZUZvckxvY2FsZSAoY29uc3QgY2hhciAqZGlyZWN0b3J5LCBQYXRoTWFrZXIgKnBhdGhNYWtlcik7CisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmIC8qIF9fY3BsdXNwbHVzICovCisKKyNlbmRpZiAvKiBCUkxUVFlfSU5DTFVERURfQ0hBUlNFVCAqLwpkaWZmIC0tZ2l0IGEvSGVhZGVycy9jbGRyLmggYi9IZWFkZXJzL2NsZHIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNzM3NjJjCi0tLSAvZGV2L251bGwKKysrIGIvSGVhZGVycy9jbGRyLmgKQEAgLTAsMCArMSw2NyBAQAorLyoKKyAqIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisgKiAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisgKgorICogQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKKyNpZm5kZWYgQlJMVFRZX0lOQ0xVREVEX0NMRFIKKyNkZWZpbmUgQlJMVFRZX0lOQ0xVREVEX0NMRFIKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZiAvKiBfX2NwbHVzcGx1cyAqLworCit0eXBlZGVmIHN0cnVjdCB7CisgIGNvbnN0IGNoYXIgKnNlcXVlbmNlOworICBjb25zdCBjaGFyICpuYW1lOworICB2b2lkICpkYXRhOworfSBDTERSX0Fubm90YXRpb25IYW5kbGVyUGFyYW1ldGVyczsKKworI2RlZmluZSBDTERSX0FOTk9UQVRJT05fSEFORExFUihuYW1lKSBpbnQgbmFtZSAoY29uc3QgQ0xEUl9Bbm5vdGF0aW9uSGFuZGxlclBhcmFtZXRlcnMgKnBhcmFtZXRlcnMpCit0eXBlZGVmIENMRFJfQU5OT1RBVElPTl9IQU5ETEVSKENMRFJfQW5ub3RhdGlvbkhhbmRsZXIpOworCit0eXBlZGVmIHN0cnVjdCBDTERSX0RvY3VtZW50UGFyc2VyT2JqZWN0U3RydWN0IENMRFJfRG9jdW1lbnRQYXJzZXJPYmplY3Q7CisKK2V4dGVybiBDTERSX0RvY3VtZW50UGFyc2VyT2JqZWN0ICpjbGRyTmV3RG9jdW1lbnRQYXJzZXIgKAorICBDTERSX0Fubm90YXRpb25IYW5kbGVyICpoYW5kbGVyLCB2b2lkICpkYXRhCispOworCitleHRlcm4gdm9pZCBjbGRyRGVzdHJveURvY3VtZW50UGFyc2VyICgKKyAgQ0xEUl9Eb2N1bWVudFBhcnNlck9iamVjdCAqZHBvCispOworCitleHRlcm4gaW50IGNsZHJQYXJzZVRleHQgKAorICBDTERSX0RvY3VtZW50UGFyc2VyT2JqZWN0ICpkcG8sCisgIGNvbnN0IGNoYXIgKnRleHQsIHNpemVfdCBzaXplLCBpbnQgZmluYWwKKyk7CisKK2V4dGVybiBpbnQgY2xkclBhcnNlRG9jdW1lbnQgKAorICBjb25zdCBjaGFyICpkb2N1bWVudCwgc2l6ZV90IHNpemUsCisgIENMRFJfQW5ub3RhdGlvbkhhbmRsZXIgKmhhbmRsZXIsIHZvaWQgKmRhdGEKKyk7CisKK2V4dGVybiBjb25zdCBjaGFyIGNsZHJBbm5vdGF0aW9uc0RpcmVjdG9yeVtdOworZXh0ZXJuIGNvbnN0IGNoYXIgY2xkckFubm90YXRpb25zRXh0ZW5zaW9uW107CisKK2V4dGVybiBpbnQgY2xkclBhcnNlRmlsZSAoCisgIGNvbnN0IGNoYXIgKm5hbWUsCisgIENMRFJfQW5ub3RhdGlvbkhhbmRsZXIgKmhhbmRsZXIsIHZvaWQgKmRhdGEKKyk7CisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmIC8qIF9fY3BsdXNwbHVzICovCisKKyNlbmRpZiAvKiBCUkxUVFlfSU5DTFVERURfQ0xEUiAqLwpkaWZmIC0tZ2l0IGEvSGVhZGVycy9jbGlwYm9hcmQuaCBiL0hlYWRlcnMvY2xpcGJvYXJkLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWY3OGY0MgotLS0gL2Rldi9udWxsCisrKyBiL0hlYWRlcnMvY2xpcGJvYXJkLmgKQEAgLTAsMCArMSw2NCBAQAorLyoKKyAqIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisgKiAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisgKgorICogQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKKyNpZm5kZWYgQlJMVFRZX0lOQ0xVREVEX0NMSVBCT0FSRAorI2RlZmluZSBCUkxUVFlfSU5DTFVERURfQ0xJUEJPQVJECisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYgLyogX19jcGx1c3BsdXMgKi8KKwordHlwZWRlZiBzdHJ1Y3QgQ2xpcGJvYXJkT2JqZWN0U3RydWN0IENsaXBib2FyZE9iamVjdDsKKworZXh0ZXJuIENsaXBib2FyZE9iamVjdCAqbmV3Q2xpcGJvYXJkICh2b2lkKTsKK2V4dGVybiB2b2lkIGRlc3Ryb3lDbGlwYm9hcmQgKENsaXBib2FyZE9iamVjdCAqY3BiKTsKKworZXh0ZXJuIGludCBjbGVhckNsaXBib2FyZENvbnRlbnQgKENsaXBib2FyZE9iamVjdCAqY3BiKTsKK2V4dGVybiBpbnQgdHJ1bmNhdGVDbGlwYm9hcmRDb250ZW50IChDbGlwYm9hcmRPYmplY3QgKmNwYiwgc2l6ZV90IGxlbmd0aCk7CisKK2V4dGVybiBpbnQgc2V0Q2xpcGJvYXJkQ29udGVudCAoQ2xpcGJvYXJkT2JqZWN0ICpjcGIsIGNvbnN0IHdjaGFyX3QgKmNoYXJhY3RlcnMsIHNpemVfdCBsZW5ndGgpOworZXh0ZXJuIGludCBhcHBlbmRDbGlwYm9hcmRDb250ZW50IChDbGlwYm9hcmRPYmplY3QgKmNwYiwgY29uc3Qgd2NoYXJfdCAqY2hhcmFjdGVycywgc2l6ZV90IGxlbmd0aCk7CisKK2V4dGVybiBpbnQgc2V0Q2xpcGJvYXJkQ29udGVudFVURjggKENsaXBib2FyZE9iamVjdCAqY3BiLCBjb25zdCBjaGFyICp0ZXh0KTsKK2V4dGVybiBpbnQgYXBwZW5kQ2xpcGJvYXJkQ29udGVudFVURjggKENsaXBib2FyZE9iamVjdCAqY3BiLCBjb25zdCBjaGFyICp0ZXh0KTsKKworZXh0ZXJuIGNvbnN0IHdjaGFyX3QgKmdldENsaXBib2FyZENvbnRlbnQgKENsaXBib2FyZE9iamVjdCAqY3BiLCBzaXplX3QgKmxlbmd0aCk7CitleHRlcm4gY2hhciAqZ2V0Q2xpcGJvYXJkQ29udGVudFVURjggKENsaXBib2FyZE9iamVjdCAqY3BiKTsKK2V4dGVybiBzaXplX3QgZ2V0Q2xpcGJvYXJkQ29udGVudExlbmd0aCAoQ2xpcGJvYXJkT2JqZWN0ICpjcGIpOworCitzdGF0aWMgaW5saW5lIGludAoraXNDbGlwYm9hcmRFbXB0eSAoQ2xpcGJvYXJkT2JqZWN0ICpjcGIpIHsKKyAgcmV0dXJuICFnZXRDbGlwYm9hcmRDb250ZW50TGVuZ3RoKGNwYik7Cit9CisKK2V4dGVybiBpbnQgYWRkQ2xpcGJvYXJkSGlzdG9yeSAoQ2xpcGJvYXJkT2JqZWN0ICpjcGIsIGNvbnN0IHdjaGFyX3QgKmNoYXJhY3RlcnMsIHNpemVfdCBsZW5ndGgpOworZXh0ZXJuIGNvbnN0IHdjaGFyX3QgKmdldENsaXBib2FyZEhpc3RvcnkgKENsaXBib2FyZE9iamVjdCAqY3BiLCB1bnNpZ25lZCBpbnQgaW5kZXgsIHNpemVfdCAqbGVuZ3RoKTsKKworZXh0ZXJuIENsaXBib2FyZE9iamVjdCAqZ2V0TWFpbkNsaXBib2FyZCAodm9pZCk7CitleHRlcm4gdm9pZCBsb2NrTWFpbkNsaXBib2FyZCAodm9pZCk7CitleHRlcm4gdm9pZCB1bmxvY2tNYWluQ2xpcGJvYXJkICh2b2lkKTsKKworZXh0ZXJuIHZvaWQgb25NYWluQ2xpcGJvYXJkVXBkYXRlZCAodm9pZCk7CitleHRlcm4gaW50IHNldE1haW5DbGlwYm9hcmRDb250ZW50IChjb25zdCBjaGFyICpjb250ZW50KTsKK2V4dGVybiBjaGFyICpnZXRNYWluQ2xpcGJvYXJkQ29udGVudCAodm9pZCk7CisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmIC8qIF9fY3BsdXNwbHVzICovCisKKyNlbmRpZiAvKiBCUkxUVFlfSU5DTFVERURfQ0xJUEJPQVJEICovCmRpZmYgLS1naXQgYS9IZWFkZXJzL2NtZC5oIGIvSGVhZGVycy9jbWQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNjI1ZmYwCi0tLSAvZGV2L251bGwKKysrIGIvSGVhZGVycy9jbWQuaApAQCAtMCwwICsxLDYxIEBACisvKgorICogQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyAqICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyAqCisgKiBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorICoKKyAqIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyAqCisgKiBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisgKi8KKworI2lmbmRlZiBCUkxUVFlfSU5DTFVERURfQ01ECisjZGVmaW5lIEJSTFRUWV9JTkNMVURFRF9DTUQKKworI2luY2x1ZGUgInN0cmZtdGguaCIKKyNpbmNsdWRlICJjbWRfdHlwZXMuaCIKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZiAvKiBfX2NwbHVzcGx1cyAqLworCitleHRlcm4gY29uc3QgQ29tbWFuZEVudHJ5IGNvbW1hbmRUYWJsZVtdOworZXh0ZXJuIGludCBnZXRDb21tYW5kQ291bnQgKHZvaWQpOworZXh0ZXJuIGNvbnN0IENvbW1hbmRFbnRyeSAqZmluZENvbW1hbmRFbnRyeSAoaW50IGNvZGUpOworCit0eXBlZGVmIHN0cnVjdCB7CisgIGNvbnN0IGNoYXIgKm5hbWU7CisgIGludCBiaXQ7Cit9IENvbW1hbmRNb2RpZmllckVudHJ5OworCitleHRlcm4gY29uc3QgQ29tbWFuZE1vZGlmaWVyRW50cnkgY29tbWFuZE1vZGlmaWVyVGFibGVfdG9nZ2xlW107CitleHRlcm4gY29uc3QgQ29tbWFuZE1vZGlmaWVyRW50cnkgY29tbWFuZE1vZGlmaWVyVGFibGVfbW90aW9uW107CitleHRlcm4gY29uc3QgQ29tbWFuZE1vZGlmaWVyRW50cnkgY29tbWFuZE1vZGlmaWVyVGFibGVfcm93W107CitleHRlcm4gY29uc3QgQ29tbWFuZE1vZGlmaWVyRW50cnkgY29tbWFuZE1vZGlmaWVyVGFibGVfdmVydGljYWxbXTsKK2V4dGVybiBjb25zdCBDb21tYW5kTW9kaWZpZXJFbnRyeSBjb21tYW5kTW9kaWZpZXJUYWJsZV9pbnB1dFtdOworZXh0ZXJuIGNvbnN0IENvbW1hbmRNb2RpZmllckVudHJ5IGNvbW1hbmRNb2RpZmllclRhYmxlX2NoYXJhY3RlcltdOworZXh0ZXJuIGNvbnN0IENvbW1hbmRNb2RpZmllckVudHJ5IGNvbW1hbmRNb2RpZmllclRhYmxlX2JyYWlsbGVbXTsKK2V4dGVybiBjb25zdCBDb21tYW5kTW9kaWZpZXJFbnRyeSBjb21tYW5kTW9kaWZpZXJUYWJsZV9rZXlib2FyZFtdOworCit0eXBlZGVmIGVudW0geworICBDRE9fSW5jbHVkZU5hbWUgICAgPSAwWDEsCisgIENET19JbmNsdWRlT3BlcmFuZCA9IDBYMiwKKyAgQ0RPX0RlZmF1bHRPcGVyYW5kID0gMFg0Cit9IENvbW1hbmREZXNjcmlwdGlvbk9wdGlvbjsKKworZXh0ZXJuIFNUUl9ERUNMQVJFX0ZPUk1BVFRFUihkZXNjcmliZUNvbW1hbmQsIGludCBjb21tYW5kLCBDb21tYW5kRGVzY3JpcHRpb25PcHRpb24gb3B0aW9ucyk7CitleHRlcm4gdm9pZCBsb2dDb21tYW5kIChpbnQgY29tbWFuZCk7CitleHRlcm4gdm9pZCBsb2dUcmFuc2Zvcm1lZENvbW1hbmQgKGludCBvbGRDb21tYW5kLCBpbnQgbmV3Q29tbWFuZCk7CisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmIC8qIF9fY3BsdXNwbHVzICovCisKKyNlbmRpZiAvKiBCUkxUVFlfSU5DTFVERURfQ01EICovCmRpZmYgLS1naXQgYS9IZWFkZXJzL2NtZF9lbnF1ZXVlLmggYi9IZWFkZXJzL2NtZF9lbnF1ZXVlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjVkM2M1ZQotLS0gL2Rldi9udWxsCisrKyBiL0hlYWRlcnMvY21kX2VucXVldWUuaApAQCAtMCwwICsxLDMyIEBACisvKgorICogQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyAqICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyAqCisgKiBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorICoKKyAqIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyAqCisgKiBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisgKi8KKworI2lmbmRlZiBCUkxUVFlfSU5DTFVERURfQ01EX0VOUVVFVUUKKyNkZWZpbmUgQlJMVFRZX0lOQ0xVREVEX0NNRF9FTlFVRVVFCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYgLyogX19jcGx1c3BsdXMgKi8KKworZXh0ZXJuIGludCBlbnF1ZXVlQ29tbWFuZCAoaW50IGNvbW1hbmQpOworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZiAvKiBfX2NwbHVzcGx1cyAqLworCisjZW5kaWYgLyogQlJMVFRZX0lOQ0xVREVEX0NNRF9FTlFVRVVFICovCmRpZmYgLS1naXQgYS9IZWFkZXJzL2NtZF90eXBlcy5oIGIvSGVhZGVycy9jbWRfdHlwZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZTRkZGQyCi0tLSAvZGV2L251bGwKKysrIGIvSGVhZGVycy9jbWRfdHlwZXMuaApAQCAtMCwwICsxLDU0IEBACisvKgorICogQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyAqICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyAqCisgKiBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorICoKKyAqIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyAqCisgKiBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisgKi8KKworI2lmbmRlZiBCUkxUVFlfSU5DTFVERURfQ01EX1RZUEVTCisjZGVmaW5lIEJSTFRUWV9JTkNMVURFRF9DTURfVFlQRVMKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZiAvKiBfX2NwbHVzcGx1cyAqLworCit0eXBlZGVmIHN0cnVjdCB7CisgIGNvbnN0IGNoYXIgKm5hbWU7CisgIGNvbnN0IGNoYXIgKmRlc2NyaXB0aW9uOworICBpbnQgY29kZTsKKworICB1bnNpZ25lZCBjaGFyIGlzVG9nZ2xlIDogMTsKKyAgdW5zaWduZWQgY2hhciBpc01vdGlvbiA6IDE7CisgIHVuc2lnbmVkIGNoYXIgaXNSb3cgOiAxOworICB1bnNpZ25lZCBjaGFyIGlzVmVydGljYWwgOiAxOworICB1bnNpZ25lZCBjaGFyIGlzSG9yaXpvbnRhbCA6IDE7CisgIHVuc2lnbmVkIGNoYXIgaXNQYW5uaW5nIDogMTsKKworICB1bnNpZ25lZCBjaGFyIGlzSW5wdXQgOiAxOworICB1bnNpZ25lZCBjaGFyIGlzQ2hhcmFjdGVyIDogMTsKKyAgdW5zaWduZWQgY2hhciBpc0JyYWlsbGUgOiAxOworCisgIHVuc2lnbmVkIGNoYXIgaXNLZXlib2FyZCA6IDE7CisKKyAgdW5zaWduZWQgY2hhciBpc1JvdXRpbmcgOiAxOworICB1bnNpZ25lZCBjaGFyIGlzQ29sdW1uIDogMTsKKyAgdW5zaWduZWQgY2hhciBpc09mZnNldCA6IDE7CisgIHVuc2lnbmVkIGNoYXIgaXNSYW5nZSA6IDE7Cit9IENvbW1hbmRFbnRyeTsKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYgLyogX19jcGx1c3BsdXMgKi8KKworI2VuZGlmIC8qIEJSTFRUWV9JTkNMVURFRF9DTURfVFlQRVMgKi8KZGlmZiAtLWdpdCBhL0hlYWRlcnMvY21kbGluZS5oIGIvSGVhZGVycy9jbWRsaW5lLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzU3YmM1ZgotLS0gL2Rldi9udWxsCisrKyBiL0hlYWRlcnMvY21kbGluZS5oCkBAIC0wLDAgKzEsNTcgQEAKKy8qCisgKiBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorICogICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorICoKKyAqIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorICoKKyAqIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyAqLworCisjaWZuZGVmIEJSTFRUWV9JTkNMVURFRF9DTURMSU5FCisjZGVmaW5lIEJSTFRUWV9JTkNMVURFRF9DTURMSU5FCisKKyNpbmNsdWRlICJjbWRsaW5lX3R5cGVzLmgiCisjaW5jbHVkZSAiZGF0YWZpbGUuaCIKKyNpbmNsdWRlICJwcm9ncmFtLmgiCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYgLyogX19jcGx1c3BsdXMgKi8KKworZXh0ZXJuIFByb2dyYW1FeGl0U3RhdHVzIHByb2Nlc3NPcHRpb25zKGNvbnN0IENvbW1hbmRMaW5lRGVzY3JpcHRvciAqZGVzY3JpcHRvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKmFyZ3VtZW50Q291bnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKiphcmd1bWVudFZlY3Rvcik7CisKKyNkZWZpbmUgUFJPQ0VTU19PUFRJT05TKGRlc2NyaXB0b3JWYXJpYWJsZSwgYXJnY1ZhcmlhYmxlLCBhcmd2VmFyaWFibGUpICAgIFwKKyAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBQcm9ncmFtRXhpdFN0YXR1cyBleGl0U3RhdHVzID0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgcHJvY2Vzc09wdGlvbnMoJmRlc2NyaXB0b3JWYXJpYWJsZSwgJmFyZ2NWYXJpYWJsZSwgJmFyZ3ZWYXJpYWJsZSk7IFwKKyAgICBpZiAoZXhpdFN0YXR1cyA9PSBQUk9HX0VYSVRfRk9SQ0UpIHJldHVybiBQUk9HX0VYSVRfU1VDQ0VTUzsgICAgICAgICAgIFwKKyAgICBpZiAoZXhpdFN0YXR1cyAhPSBQUk9HX0VYSVRfU1VDQ0VTUykgcmV0dXJuIGV4aXRTdGF0dXM7ICAgICAgICAgICAgICAgIFwKKyAgfQorCitleHRlcm4gdm9pZCByZXNldE9wdGlvbnMoY29uc3QgQ29tbWFuZExpbmVPcHRpb25zICpvcHRpb25zKTsKKwordHlwZWRlZiBzdHJ1Y3QgeworICB2b2lkICgqYmVnaW5TdHJlYW0pKGNvbnN0IGNoYXIgKm5hbWUsIHZvaWQgKmRhdGEpOworICB2b2lkICgqZW5kU3RyZWFtKShpbnQgaW5jb21wbGV0ZSwgdm9pZCAqZGF0YSk7CisgIERhdGFGaWxlUGFyYW1ldGVycyBkYXRhRmlsZVBhcmFtZXRlcnM7Cit9IElucHV0RmlsZXNQcm9jZXNzaW5nUGFyYW1ldGVyczsKKworZXh0ZXJuIFByb2dyYW1FeGl0U3RhdHVzIHByb2Nlc3NJbnB1dEZpbGVzKAorICAgIGNoYXIgKipwYXRocywgaW50IGNvdW50LCBjb25zdCBJbnB1dEZpbGVzUHJvY2Vzc2luZ1BhcmFtZXRlcnMgKnBhcmFtZXRlcnMpOworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZiAvKiBfX2NwbHVzcGx1cyAqLworCisjZW5kaWYgLyogQlJMVFRZX0lOQ0xVREVEX0NNRExJTkUgKi8KZGlmZiAtLWdpdCBhL0hlYWRlcnMvY21kbGluZV90eXBlcy5oIGIvSGVhZGVycy9jbWRsaW5lX3R5cGVzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDhlYWZiMwotLS0gL2Rldi9udWxsCisrKyBiL0hlYWRlcnMvY21kbGluZV90eXBlcy5oCkBAIC0wLDAgKzEsMTEyIEBACisvKgorICogQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyAqICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyAqCisgKiBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorICoKKyAqIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyAqCisgKiBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisgKi8KKworI2lmbmRlZiBCUkxUVFlfSU5DTFVERURfQ01ETElORV9UWVBFUworI2RlZmluZSBCUkxUVFlfSU5DTFVERURfQ01ETElORV9UWVBFUworCisjaW5jbHVkZSAic3RyZm10aC5oIgorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmIC8qIF9fY3BsdXNwbHVzICovCisKKyNkZWZpbmUgT1BUX1dPUkRfVFJVRSAib24iCisjZGVmaW5lIE9QVF9XT1JEX0ZBTFNFICJvZmYiCisKK3R5cGVkZWYgZW51bSB7CisgIE9QVF9FeHRlbmQgPSAwWDAxLAorICBPUFRfQ29uZmlnID0gMFgwMiwKKyAgT1BUX0VudlZhciA9IDBYMDQsCisgIE9QVF9Gb3JtYXQgPSAwWDA4LAorfSBDb21tYW5kTGluZU9wdGlvbkZsYWc7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgY29uc3QgY2hhciAqd29yZDsKKyAgY29uc3QgY2hhciAqYXJndW1lbnQ7CisgIGNvbnN0IGNoYXIgKmRlc2NyaXB0aW9uOworCisgIHN0cnVjdCB7CisgICAgY29uc3QgY2hhciAqc2V0dGluZzsKKyAgICBpbnQgKCphZGp1c3QpKGNoYXIgKipzZXR0aW5nKTsKKyAgfSBpbnRlcm5hbDsKKworICB1bnNpZ25lZCBjaGFyIGxldHRlcjsKKyAgdW5zaWduZWQgY2hhciBib290UGFyYW1ldGVyOworICB1bnNpZ25lZCBjaGFyIGZsYWdzOworCisgIHVuaW9uIHsKKyAgICBpbnQgKmZsYWc7CisgICAgY2hhciAqKnN0cmluZzsKKyAgfSBzZXR0aW5nOworCisgIHVuaW9uIHsKKyAgICBjb25zdCBjaGFyICpjb25zdCAqYXJyYXk7CisgICAgU1RSX0RFQ0xBUkVfRk9STUFUVEVSKCgqZm9ybWF0KSwgdW5zaWduZWQgaW50IGluZGV4KTsKKyAgfSBzdHJpbmdzOworfSBDb21tYW5kTGluZU9wdGlvbjsKKwordHlwZWRlZiBzdHJ1Y3QgeworICBjb25zdCBDb21tYW5kTGluZU9wdGlvbiAqdGFibGU7CisgIHNpemVfdCBjb3VudDsKK30gQ29tbWFuZExpbmVPcHRpb25zOworCisjZGVmaW5lIEJFR0lOX09QVElPTl9UQUJMRShuYW1lKSAgICAgICAgICAgICAgICAgICBcCisgIHN0YXRpYyBjb25zdCBDb21tYW5kTGluZU9wdGlvbiBuYW1lIyNUYWJsZVtdID0geyBcCisgICAgICB7LndvcmQgPSAiaGVscCIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgLmxldHRlciA9ICdoJywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgLmRlc2NyaXB0aW9uID0gc3RydGV4dCgiU2hvdyB0aGlzIHVzYWdlIHN1bW1hcnksIGFuZCB0aGVuIGV4aXQuIil9LAorCisjZGVmaW5lIEVORF9PUFRJT05fVEFCTEUobmFtZSkgICAgICAgICAgICAgXAorICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIHN0YXRpYyBjb25zdCBDb21tYW5kTGluZU9wdGlvbnMgbmFtZSA9IHsgXAorICAgICAgLnRhYmxlID0gbmFtZSMjVGFibGUsICAgICAgICAgICAgICAgIFwKKyAgICAgIC5jb3VudCA9IEFSUkFZX0NPVU5UKG5hbWUjI1RhYmxlKSwgICBcCisgIH07CisKKyNkZWZpbmUgREVDTEFSRV9VU0FHRV9OT1RFUyhuYW1lKSBjb25zdCBjaGFyICpjb25zdCBuYW1lW10KKyNkZWZpbmUgQkVHSU5fVVNBR0VfTk9URVMobmFtZSkgREVDTEFSRV9VU0FHRV9OT1RFUyhuYW1lKSA9IHsKKyNkZWZpbmUgRU5EX1VTQUdFX05PVEVTIFwKKyAgTlVMTCAgICAgICAgICAgICAgICAgIFwKKyAgfSAgICAgICAgICAgICAgICAgICAgIFwKKyAgOworI2RlZmluZSBVU0FHRV9OT1RFUyguLi4pIFwKKyAgKGNvbnN0IGNoYXIgKmNvbnN0ICpjb25zdFtdKSB7IF9fVkFfQVJHU19fLCBOVUxMIH0KKwordHlwZWRlZiBzdHJ1Y3QgeworICBjb25zdCBjaGFyICpwdXJwb3NlOworICBjb25zdCBjaGFyICpwYXJhbWV0ZXJzOworICBjb25zdCBjaGFyICpjb25zdCAqY29uc3QgKm5vdGVzOworfSBDb21tYW5kTGluZVVzYWdlOworCit0eXBlZGVmIHN0cnVjdCB7CisgIGNvbnN0IENvbW1hbmRMaW5lT3B0aW9ucyAqb3B0aW9uczsKKworICBjb25zdCBjaGFyICphcHBsaWNhdGlvbk5hbWU7CisgIGNoYXIgKipjb25maWd1cmF0aW9uRmlsZTsKKyAgaW50ICpkb0Vudmlyb25tZW50VmFyaWFibGVzOworICBpbnQgKmRvQm9vdFBhcmFtZXRlcnM7CisKKyAgY29uc3QgQ29tbWFuZExpbmVVc2FnZSB1c2FnZTsKK30gQ29tbWFuZExpbmVEZXNjcmlwdG9yOworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZiAvKiBfX2NwbHVzcGx1cyAqLworCisjZW5kaWYgLyogQlJMVFRZX0lOQ0xVREVEX0NNRExJTkVfVFlQRVMgKi8KZGlmZiAtLWdpdCBhL0hlYWRlcnMvY29tbW9uX2phdmEuaCBiL0hlYWRlcnMvY29tbW9uX2phdmEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YTRkZGUzCi0tLSAvZGV2L251bGwKKysrIGIvSGVhZGVycy9jb21tb25famF2YS5oCkBAIC0wLDAgKzEsMTQzIEBACisvKgorICogQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyAqICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyAqCisgKiBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorICoKKyAqIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyAqCisgKiBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisgKi8KKworI2lmbmRlZiBCUkxUVFlfSU5DTFVERURfQ09NTU9OX0pBVkEKKyNkZWZpbmUgQlJMVFRZX0lOQ0xVREVEX0NPTU1PTl9KQVZBCisKKyNpbmNsdWRlIDxqbmkuaD4KKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZiAvKiBfX2NwbHVzcGx1cyAqLworCisjZGVmaW5lIEpBVkFfTUVUSE9EKG9iamVjdCwgbmFtZSwgdHlwZSkgXAorICBKTklFWFBPUlQgdHlwZSBKTklDQUxMIEphdmFfICMjIG9iamVjdCAjIyBfICMjIG5hbWUgKEpOSUVudiAqZW52LAorCisjZGVmaW5lIEpBVkFfSU5TVEFOQ0VfTUVUSE9EKG9iamVjdCwgbmFtZSwgdHlwZSwgLi4uKSBcCisgIEpBVkFfTUVUSE9EKG9iamVjdCwgbmFtZSwgdHlwZSkgam9iamVjdCB0aGlzLCAjIyBfX1ZBX0FSR1NfXykKKworI2RlZmluZSBKQVZBX1NUQVRJQ19NRVRIT0Qob2JqZWN0LCBuYW1lLCB0eXBlLCAuLi4pIFwKKyAgSkFWQV9NRVRIT0Qob2JqZWN0LCBuYW1lLCB0eXBlKSBqY2xhc3MgY2xhc3MsICMjIF9fVkFfQVJHU19fKQorCisjZGVmaW5lIEpBVkFfU0lHX1ZPSUQgICAgICAgICAgICAgICAgICAgICAgIlYiCisjZGVmaW5lIEpBVkFfU0lHX0JPT0xFQU4gICAgICAgICAgICAgICAgICAgIloiCisjZGVmaW5lIEpBVkFfU0lHX0JZVEUgICAgICAgICAgICAgICAgICAgICAgIkIiCisjZGVmaW5lIEpBVkFfU0lHX0NIQVIgICAgICAgICAgICAgICAgICAgICAgIkMiCisjZGVmaW5lIEpBVkFfU0lHX1NIT1JUICAgICAgICAgICAgICAgICAgICAgIlMiCisjZGVmaW5lIEpBVkFfU0lHX0lOVCAgICAgICAgICAgICAgICAgICAgICAgIkkiCisjZGVmaW5lIEpBVkFfU0lHX0xPTkcgICAgICAgICAgICAgICAgICAgICAgIkoiCisjZGVmaW5lIEpBVkFfU0lHX0ZMT0FUICAgICAgICAgICAgICAgICAgICAgIkYiCisjZGVmaW5lIEpBVkFfU0lHX0RPVUJMRSAgICAgICAgICAgICAgICAgICAgIkQiCisjZGVmaW5lIEpBVkFfU0lHX09CSkVDVChwYXRoKSAgICAgICAgICAgICAgIkwiIHBhdGggIjsiCisjZGVmaW5lIEpBVkFfU0lHX0FSUkFZKGVsZW1lbnQpICAgICAgICAgICAgIlsiIGVsZW1lbnQKKyNkZWZpbmUgSkFWQV9TSUdfTUVUSE9EKHJldHVybnMsYXJndW1lbnRzKSAiKCIgYXJndW1lbnRzICIpIiByZXR1cm5zCisKKyNkZWZpbmUgSkFWQV9DT05TVFJVQ1RPUl9OQU1FICI8aW5pdD4iCisjZGVmaW5lIEpBVkFfU0lHX0NPTlNUUlVDVE9SKGFyZ3VtZW50cykgICAgSkFWQV9TSUdfTUVUSE9EKEpBVkFfU0lHX1ZPSUQsIGFyZ3VtZW50cykKKworI2RlZmluZSBKQVZBX09CSl9MQU5HKG5hbWUpICJqYXZhL2xhbmcvIiBuYW1lCisjZGVmaW5lIEpBVkFfT0JKX0lPKG5hbWUpICJqYXZhL2lvLyIgbmFtZQorI2RlZmluZSBKQVZBX09CSl9VVElMKG5hbWUpICJqYXZhL3V0aWwvIiBuYW1lCisjZGVmaW5lIEpBVkFfT0JKX0NPTkNVUlJFTlQobmFtZSkgSkFWQV9PQkpfVVRJTCgiY29uY3VycmVudC8iIG5hbWUpCisKKyNkZWZpbmUgSkFWQV9PQkpfQ0hBUl9TRVFVRU5DRSBKQVZBX09CSl9MQU5HKCJDaGFyU2VxdWVuY2UiKQorI2RlZmluZSBKQVZBX09CSl9DTEFTUyBKQVZBX09CSl9MQU5HKCJDbGFzcyIpCisjZGVmaW5lIEpBVkFfT0JKX0VPRl9FWENFUFRJT04gSkFWQV9PQkpfSU8oIkVPRkV4Y2VwdGlvbiIpCisjZGVmaW5lIEpBVkFfT0JKX0lMTEVHQUxfQVJHVU1FTlRfRVhDRVBUSU9OIEpBVkFfT0JKX0xBTkcoIklsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiIpCisjZGVmaW5lIEpBVkFfT0JKX0lMTEVHQUxfU1RBVEVfRVhDRVBUSU9OIEpBVkFfT0JKX0xBTkcoIklsbGVnYWxTdGF0ZUV4Y2VwdGlvbiIpCisjZGVmaW5lIEpBVkFfT0JKX0lOVEVSUlVQVEVEX0lPX0VYQ0VQVElPTiBKQVZBX09CSl9JTygiSW50ZXJydXB0ZWRJT0V4Y2VwdGlvbiIpCisjZGVmaW5lIEpBVkFfT0JKX0lURVJBVE9SIEpBVkFfT0JKX1VUSUwoIkl0ZXJhdG9yIikKKyNkZWZpbmUgSkFWQV9PQkpfTE9DQUxFIEpBVkFfT0JKX1VUSUwoIkxvY2FsZSIpCisjZGVmaW5lIEpBVkFfT0JKX05VTExfUE9JTlRFUl9FWENFUFRJT04gSkFWQV9PQkpfTEFORygiTnVsbFBvaW50ZXJFeGNlcHRpb24iKQorI2RlZmluZSBKQVZBX09CSl9PQkpFQ1QgSkFWQV9PQkpfTEFORygiT2JqZWN0IikKKyNkZWZpbmUgSkFWQV9PQkpfT1VUX09GX01FTU9SWV9FUlJPUiBKQVZBX09CSl9MQU5HKCJPdXRPZk1lbW9yeUVycm9yIikKKyNkZWZpbmUgSkFWQV9PQkpfU1RSSU5HIEpBVkFfT0JKX0xBTkcoIlN0cmluZyIpCisjZGVmaW5lIEpBVkFfT0JKX1RIUkVBRCBKQVZBX09CSl9MQU5HKCJUaHJlYWQiKQorI2RlZmluZSBKQVZBX09CSl9USU1FT1VUX0VYQ0VQVElPTiBKQVZBX09CSl9DT05DVVJSRU5UKCJUaW1lb3V0RXhjZXB0aW9uIikKKyNkZWZpbmUgSkFWQV9PQkpfVU5TQVRJU0ZJRURfTElOS19FUlJPUiBKQVZBX09CSl9MQU5HKCJVbnNhdGlzZmllZExpbmtFcnJvciIpCisKKyNkZWZpbmUgSkFWQV9TSUdfQ0hBUl9TRVFVRU5DRSBKQVZBX1NJR19PQkpFQ1QoSkFWQV9PQkpfQ0hBUl9TRVFVRU5DRSkKKyNkZWZpbmUgSkFWQV9TSUdfQ0xBU1MgSkFWQV9TSUdfT0JKRUNUKEpBVkFfT0JKX0NMQVNTKQorI2RlZmluZSBKQVZBX1NJR19JVEVSQVRPUiBKQVZBX1NJR19PQkpFQ1QoSkFWQV9PQkpfSVRFUkFUT1IpCisjZGVmaW5lIEpBVkFfU0lHX0xPQ0FMRSBKQVZBX1NJR19PQkpFQ1QoSkFWQV9PQkpfTE9DQUxFKQorI2RlZmluZSBKQVZBX1NJR19TVFJJTkcgSkFWQV9TSUdfT0JKRUNUKEpBVkFfT0JKX1NUUklORykKKyNkZWZpbmUgSkFWQV9TSUdfVEhSRUFEIEpBVkFfU0lHX09CSkVDVChKQVZBX09CSl9USFJFQUQpCisKKyNkZWZpbmUgSkFWQV9DTEFTU19WQVJJQUJMRShuYW1lKSBqY2xhc3MgbmFtZSA9IE5VTEwKKyNkZWZpbmUgSkFWQV9NRVRIT0RfVkFSSUFCTEUobmFtZSkgam1ldGhvZElEIG5hbWUgPSAwOworCitzdGF0aWMgaW5saW5lIGludAoramF2YUZpbmRDbGFzcyAoSk5JRW52ICplbnYsIGpjbGFzcyAqY2xhc3MsIGNvbnN0IGNoYXIgKm5hbWUpIHsKKyAgaWYgKCpjbGFzcykgcmV0dXJuIDE7CisgIHJldHVybiAhISgqY2xhc3MgPSAoKmVudiktPkZpbmRDbGFzcyhlbnYsIG5hbWUpKTsKK30KKworc3RhdGljIGlubGluZSBpbnQKK2phdmFGaW5kTWV0aG9kICgKKyAgSk5JRW52ICplbnYsIGptZXRob2RJRCAqbWV0aG9kLCBqY2xhc3MgY2xhc3MsCisgIGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnNpZ25hdHVyZQorKSB7CisgIGlmICgqbWV0aG9kKSByZXR1cm4gMTsKKyAgcmV0dXJuICEhKCptZXRob2QgPSAoKmVudiktPkdldE1ldGhvZElEKGVudiwgY2xhc3MsIG5hbWUsIHNpZ25hdHVyZSkpOworfQorCisjZGVmaW5lIEpBVkFfRklORF9NRVRIT0QoZW52LCBtZXRob2QsIGNsYXNzLCBuYW1lLCBhcmd1bWVudHMsIHJldHVybnMpIFwKKyhqYXZhRmluZE1ldGhvZChlbnYsIG1ldGhvZCwgY2xhc3MsIG5hbWUsIEpBVkFfU0lHX01FVEhPRChyZXR1cm5zLCBhcmd1bWVudHMpKSkKKworI2RlZmluZSBKQVZBX0ZJTkRfQ09OU1RSVUNUT1IoZW52LCBjb25zdHJ1Y3RvciwgY2xhc3MsIGFyZ3VtZW50cykgXAorKGphdmFGaW5kTWV0aG9kKGVudiwgY29uc3RydWN0b3IsIGNsYXNzLCBKQVZBX0NPTlNUUlVDVE9SX05BTUUsIEpBVkFfU0lHX0NPTlNUUlVDVE9SKGFyZ3VtZW50cykpKQorCisjZGVmaW5lIGphdmFQdHJUb0xvbmcocCkgKChqbG9uZykoaW50cHRyX3QpKHApKQorI2RlZmluZSBqYXZhUHRyRnJvbUxvbmcobCkgKCh2b2lkICopKGludHB0cl90KShsKSkKKworc3RhdGljIGlubGluZSBpbnQKK2phdmFGaW5kQ2xhc3NBbmRNZXRob2QgKAorICBKTklFbnYgKmVudiwKKyAgamNsYXNzICpjbGFzcywgY29uc3QgY2hhciAqY2xhc3NOYW1lLAorICBqbWV0aG9kSUQgKm1ldGhvZCwgY29uc3QgY2hhciAqbWV0aG9kTmFtZSwKKyAgY29uc3QgY2hhciAqc2lnbmF0dXJlCispIHsKKyAgcmV0dXJuIGphdmFGaW5kQ2xhc3MoZW52LCBjbGFzcywgY2xhc3NOYW1lKQorICAgICAgJiYgamF2YUZpbmRNZXRob2QoZW52LCBtZXRob2QsICpjbGFzcywgbWV0aG9kTmFtZSwgc2lnbmF0dXJlKTsKK30KKworc3RhdGljIGlubGluZSBqYm9vbGVhbgoramF2YUhhc0V4Y2VwdGlvbk9jY3VycmVkIChKTklFbnYgKmVudikgeworICByZXR1cm4gKCplbnYpLT5FeGNlcHRpb25DaGVjayhlbnYpOworfQorCitzdGF0aWMgaW5saW5lIGp0aHJvd2FibGUKK2phdmFHZXRFeGNlcHRpb24gKEpOSUVudiAqZW52KSB7CisgIHJldHVybiAoKmVudiktPkV4Y2VwdGlvbk9jY3VycmVkKGVudik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAoramF2YURlc2NyaWJlRXhjZXB0aW9uIChKTklFbnYgKmVudikgeworICByZXR1cm4gKCplbnYpLT5FeGNlcHRpb25EZXNjcmliZShlbnYpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK2phdmFDbGVhckV4Y2VwdGlvbiAoSk5JRW52ICplbnYpIHsKKyAgcmV0dXJuICgqZW52KS0+RXhjZXB0aW9uQ2xlYXIoZW52KTsKK30KKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYgLyogX19jcGx1c3BsdXMgKi8KKworI2VuZGlmIC8qIEJSTFRUWV9JTkNMVURFRF9DT01NT05fSkFWQSAqLwpkaWZmIC0tZ2l0IGEvSGVhZGVycy9jcmMuaCBiL0hlYWRlcnMvY3JjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTgzMjA0NwotLS0gL2Rldi9udWxsCisrKyBiL0hlYWRlcnMvY3JjLmgKQEAgLTAsMCArMSwyNyBAQAorLyoKKyAqIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisgKiAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisgKgorICogQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKKyNpZm5kZWYgQlJMVFRZX0lOQ0xVREVEX0NSQworI2RlZmluZSBCUkxUVFlfSU5DTFVERURfQ1JDCisKKyNpbmNsdWRlICJjcmNfYWxnb3JpdGhtcy5oIgorI2luY2x1ZGUgImNyY19wcm9wZXJ0aWVzLmgiCisjaW5jbHVkZSAiY3JjX2dlbmVyYXRlLmgiCisjaW5jbHVkZSAiY3JjX3ZlcmlmeS5oIgorCisjZW5kaWYgLyogQlJMVFRZX0lOQ0xVREVEX0NSQyAqLwpkaWZmIC0tZ2l0IGEvSGVhZGVycy9jcmNfYWxnb3JpdGhtcy5oIGIvSGVhZGVycy9jcmNfYWxnb3JpdGhtcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc3MzFjMzYKLS0tIC9kZXYvbnVsbAorKysgYi9IZWFkZXJzL2NyY19hbGdvcml0aG1zLmgKQEAgLTAsMCArMSw2MSBAQAorLyoKKyAqIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisgKiAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisgKgorICogQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKKyNpZm5kZWYgQlJMVFRZX0lOQ0xVREVEX0NSQ19BTEdPUklUSE1TCisjZGVmaW5lIEJSTFRUWV9JTkNMVURFRF9DUkNfQUxHT1JJVEhNUworCisjaW5jbHVkZSAiY3JjX2RlZmluaXRpb25zLmgiCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYgLyogX19jcGx1c3BsdXMgKi8KKwordHlwZWRlZiBlbnVtIHsKKyAgQ1JDX0FMR09SSVRITV9DTEFTU19VTktOT1dOLAorICBDUkNfQUxHT1JJVEhNX0NMQVNTX0FUVEVTVEVELAorICBDUkNfQUxHT1JJVEhNX0NMQVNTX0NPTkZJUk1FRCwKKyAgQ1JDX0FMR09SSVRITV9DTEFTU19BQ0FERU1JQywKKyAgQ1JDX0FMR09SSVRITV9DTEFTU19USElSRF9QQVJUWSwKK30gQ1JDQWxnb3JpdGhtQ2xhc3M7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgY29uc3QgY2hhciAqcHJpbWFyeU5hbWU7IC8vIHRoZSBvZmZpY2lhbCBuYW1lIG9mIHRoZSBhbGdvcml0aG0KKyAgY29uc3QgY2hhciAqY29uc3QgKnNlY29uZGFyeU5hbWVzOyAvLyBvdGhlciBuYW1lcyB0aGF0IHRoZSBhbGdvcml0aG0gaXMga25vd24gYnkgKE5VTEwgdGVybWluYXRlZCkKKyAgQ1JDQWxnb3JpdGhtQ2xhc3MgYWxnb3JpdGhtQ2xhc3M7CisKKyAgdW5zaWduZWQgY2hhciBjaGVja3N1bVdpZHRoOyAvLyB0aGUgd2lkdGggb2YgdGhlIGNoZWNrc3VtIChpbiBiaXRzKQorICB1bnNpZ25lZCBjaGFyIHJlZmxlY3REYXRhOyAvLyByZWZsZWN0IGVhY2ggZGF0YSBieXRlIGJlZm9yZSBwcm9jZXNzaW5nIGl0CisgIHVuc2lnbmVkIGNoYXIgcmVmbGVjdFJlc3VsdDsgLy8gcmVmbGVjdCB0aGUgZmluYWwgdmFsdWUgKGJlZm9yZSB0aGUgeG9yKQorCisgIGNyY190IGdlbmVyYXRvclBvbHlub21pYWw7IC8vIHRoZSBwb2x5bm9taWFsIHRoYXQgZ2VuZXJhdGVzIHRoZSBjaGVja3N1bQorICBjcmNfdCBpbml0aWFsVmFsdWU7IC8vIHRoZSBzdGFydGluZyB2YWx1ZSAoYmVmb3JlIGFueSBwcm9jZXNzaW5nKQorICBjcmNfdCB4b3JNYXNrOyAvLyB0aGUgeG9yIChleGNsdXNzaXZlIG9yKSBtYXNrIHRvIGFwcGx5IHRvIHRoZSBmaW5hbCB2YWx1ZQorCisgIGNyY190IGNoZWNrVmFsdWU7IC8vIHRoZSBjaGVja3N1bSBmb3IgdGhlIG9mZmljaWFsIGNoZWNrIGRhdGEgKCIxMjM0NTY3ODkiKQorICBjcmNfdCByZXNpZHVlOyAvLyB0aGUgZmluYWwgdmFsdWUgKG5vIHJlZmxlY3Rpb24gb3IgeG9yKSBvZiB0aGUgY2hlY2sgZGF0YQorICAgICAgICAgICAgICAgICAvLyBmb2xsb3dlZCBieSBpdHMgY2hlY2tzdW0gKGluIG5ldHdvcmsgYnl0ZSBvcmRlcikKK30gQ1JDQWxnb3JpdGhtOworCitleHRlcm4gY29uc3QgQ1JDQWxnb3JpdGhtICpjcmNQcm92aWRlZEFsZ29yaXRobXNbXTsKK2V4dGVybiBjb25zdCBDUkNBbGdvcml0aG0gKmNyY0dldFByb3ZpZGVkQWxnb3JpdGhtIChjb25zdCBjaGFyICpuYW1lKTsKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYgLyogX19jcGx1c3BsdXMgKi8KKworI2VuZGlmIC8qIEJSTFRUWV9JTkNMVURFRF9DUkNfQUxHT1JJVEhNUyAqLwpkaWZmIC0tZ2l0IGEvSGVhZGVycy9jcmNfZGVmaW5pdGlvbnMuaCBiL0hlYWRlcnMvY3JjX2RlZmluaXRpb25zLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTcwZGY2NAotLS0gL2Rldi9udWxsCisrKyBiL0hlYWRlcnMvY3JjX2RlZmluaXRpb25zLmgKQEAgLTAsMCArMSw0NCBAQAorLyoKKyAqIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisgKiAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisgKgorICogQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKKyNpZm5kZWYgQlJMVFRZX0lOQ0xVREVEX0NSQ19ERUZJTklUSU9OUworI2RlZmluZSBCUkxUVFlfSU5DTFVERURfQ1JDX0RFRklOSVRJT05TCisKKyNpbmNsdWRlIDxzdGRpbnQuaD4KKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZiAvKiBfX2NwbHVzcGx1cyAqLworCit0eXBlZGVmIHVpbnQzMl90IGNyY190OworI2RlZmluZSBDUkNfQyBVSU5UMzJfQworI2RlZmluZSBQUkljcmMgUFJJWDMyCisKKyNpZm5kZWYgVUlOVDI0X0MKKyNkZWZpbmUgVUlOVDI0X0MgVUlOVDMyX0MKKyNlbmRpZiAvKiBVSU5UMjRfQyAqLworCisjaWZuZGVmIFVJTlQyNF9NQVgKKyNkZWZpbmUgVUlOVDI0X01BWCBVSU5UMjRfQygwWEZGRkZGRikKKyNlbmRpZiAvKiBVSU5UMjRfTUFYICovCisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmIC8qIF9fY3BsdXNwbHVzICovCisKKyNlbmRpZiAvKiBCUkxUVFlfSU5DTFVERURfQ1JDX0RFRklOSVRJT05TICovCmRpZmYgLS1naXQgYS9IZWFkZXJzL2NyY19nZW5lcmF0ZS5oIGIvSGVhZGVycy9jcmNfZ2VuZXJhdGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZjVhMzMzCi0tLSAvZGV2L251bGwKKysrIGIvSGVhZGVycy9jcmNfZ2VuZXJhdGUuaApAQCAtMCwwICsxLDQ5IEBACisvKgorICogQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyAqICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyAqCisgKiBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorICoKKyAqIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyAqCisgKiBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisgKi8KKworI2lmbmRlZiBCUkxUVFlfSU5DTFVERURfQ1JDX0dFTkVSQVRFCisjZGVmaW5lIEJSTFRUWV9JTkNMVURFRF9DUkNfR0VORVJBVEUKKworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgImNyY19hbGdvcml0aG1zLmgiCisjaW5jbHVkZSAiY3JjX3Byb3BlcnRpZXMuaCIKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZiAvKiBfX2NwbHVzcGx1cyAqLworCit0eXBlZGVmIHN0cnVjdCBDUkNHZW5lcmF0b3JTdHJ1Y3QgQ1JDR2VuZXJhdG9yOworZXh0ZXJuIENSQ0dlbmVyYXRvciAqY3JjTmV3R2VuZXJhdG9yIChjb25zdCBDUkNBbGdvcml0aG0gKmFsZ29yaXRobSk7CitleHRlcm4gdm9pZCBjcmNSZXNldEdlbmVyYXRvciAoQ1JDR2VuZXJhdG9yICpjcmMpOworZXh0ZXJuIHZvaWQgY3JjRGVzdHJveUdlbmVyYXRvciAoQ1JDR2VuZXJhdG9yICpjcmMpOworCitleHRlcm4gdm9pZCBjcmNBZGRCeXRlIChDUkNHZW5lcmF0b3IgKmNyYywgdWludDhfdCBieXRlKTsKK2V4dGVybiB2b2lkIGNyY0FkZERhdGEgKENSQ0dlbmVyYXRvciAqY3JjLCBjb25zdCB2b2lkICpkYXRhLCBzaXplX3Qgc2l6ZSk7CisKK2V4dGVybiBjcmNfdCBjcmNHZXRDaGVja3N1bSAoY29uc3QgQ1JDR2VuZXJhdG9yICpjcmMpOworZXh0ZXJuIGNyY190IGNyY0dldFJlc2lkdWUgKENSQ0dlbmVyYXRvciAqY3JjKTsKKworZXh0ZXJuIGNvbnN0IENSQ0FsZ29yaXRobSAqY3JjR2V0QWxnb3JpdGhtIChjb25zdCBDUkNHZW5lcmF0b3IgKmNyYyk7CitleHRlcm4gY29uc3QgQ1JDUHJvcGVydGllcyAqY3JjR2V0UHJvcGVydGllcyAoY29uc3QgQ1JDR2VuZXJhdG9yICpjcmMpOworZXh0ZXJuIGNyY190IGNyY0dldFZhbHVlIChjb25zdCBDUkNHZW5lcmF0b3IgKmNyYyk7CisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmIC8qIF9fY3BsdXNwbHVzICovCisKKyNlbmRpZiAvKiBCUkxUVFlfSU5DTFVERURfQ1JDX0dFTkVSQVRFICovCmRpZmYgLS1naXQgYS9IZWFkZXJzL2NyY19wcm9wZXJ0aWVzLmggYi9IZWFkZXJzL2NyY19wcm9wZXJ0aWVzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzE1Zjg0NwotLS0gL2Rldi9udWxsCisrKyBiL0hlYWRlcnMvY3JjX3Byb3BlcnRpZXMuaApAQCAtMCwwICsxLDU2IEBACisvKgorICogQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyAqICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyAqCisgKiBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorICoKKyAqIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyAqCisgKiBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisgKi8KKworI2lmbmRlZiBCUkxUVFlfSU5DTFVERURfQ1JDX1BST1BFUlRJRVMKKyNkZWZpbmUgQlJMVFRZX0lOQ0xVREVEX0NSQ19QUk9QRVJUSUVTCisKKyNpbmNsdWRlICJjcmNfZGVmaW5pdGlvbnMuaCIKKyNpbmNsdWRlICJjcmNfYWxnb3JpdGhtcy5oIgorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmIC8qIF9fY3BsdXNwbHVzICovCisKKyNkZWZpbmUgQ1JDX0JZVEVfV0lEVEggOAorI2RlZmluZSBDUkNfQllURV9JTkRFWEVEX1RBQkxFX1NJWkUgKFVJTlQ4X01BWCArIDEpCisKK2V4dGVybiBjcmNfdCBjcmNNb3N0U2lnbmlmaWNhbnRCaXQgKHVuc2lnbmVkIGludCB3aWR0aCk7CitleHRlcm4gY3JjX3QgY3JjUmVmbGVjdEJpdHMgKGNyY190IGZyb21WYWx1ZSwgdW5zaWduZWQgaW50IHdpZHRoKTsKK2V4dGVybiB2b2lkIGNyY1JlZmxlY3RCeXRlICh1aW50OF90ICpieXRlKTsKK2V4dGVybiB2b2lkIGNyY1JlZmxlY3RWYWx1ZSAoY3JjX3QgKnZhbHVlLCBjb25zdCBDUkNBbGdvcml0aG0gKmFsZ29yaXRobSk7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgdW5zaWduZWQgaW50IGJ5dGVTaGlmdDsgLy8gdGhlIGJpdCBvZmZzZXQgb2YgdGhlIGhpZ2gtb3JkZXIgYnl0ZSBvZiB0aGUgdmFsdWUKKyAgY3JjX3QgbW9zdFNpZ25pZmljYW50Qml0OyAvLyB0aGUgbW9zdCBzaWduaWZpY2FudCBiaXQgb2YgdGhlIHZhbHVlCisgIGNyY190IHZhbHVlTWFzazsgLy8gdGhlIG1hc2sgZm9yIHJlbW92aW5nIG92ZXJmbG93IGJpdHMgaW4gdGhlIHZhbHVlCisgIGNvbnN0IHVpbnQ4X3QgKmRhdGFUcmFuc2xhdGlvblRhYmxlOyAvLyBmb3Igb3B0aW1pemluZyBkYXRhIHJlZmxlY3Rpb24KKworICAvLyBmb3IgcHJlZXZhbHVhdGluZyBhIGNvbW1vbiBjYWxjdWxhdGlvbiBvbiBlYWNoIGRhdGEgYnl0ZQorICBjcmNfdCByZW1haW5kZXJDYWNoZVtDUkNfQllURV9JTkRFWEVEX1RBQkxFX1NJWkVdOworfSBDUkNQcm9wZXJ0aWVzOworCitleHRlcm4gdm9pZCBjcmNNYWtlUHJvcGVydGllcyAoCisgIENSQ1Byb3BlcnRpZXMgKnByb3BlcnRpZXMsCisgIGNvbnN0IENSQ0FsZ29yaXRobSAqYWxnb3JpdGhtCispOworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZiAvKiBfX2NwbHVzcGx1cyAqLworCisjZW5kaWYgLyogQlJMVFRZX0lOQ0xVREVEX0NSQ19QUk9QRVJUSUVTICovCmRpZmYgLS1naXQgYS9IZWFkZXJzL2NyY192ZXJpZnkuaCBiL0hlYWRlcnMvY3JjX3ZlcmlmeS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVhNjE2ZGEKLS0tIC9kZXYvbnVsbAorKysgYi9IZWFkZXJzL2NyY192ZXJpZnkuaApAQCAtMCwwICsxLDUzIEBACisvKgorICogQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyAqICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyAqCisgKiBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorICoKKyAqIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyAqCisgKiBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisgKi8KKworI2lmbmRlZiBCUkxUVFlfSU5DTFVERURfQ1JDX1ZFUklGWQorI2RlZmluZSBCUkxUVFlfSU5DTFVERURfQ1JDX1ZFUklGWQorCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3RkaW50Lmg+CisjaW5jbHVkZSAiY3JjX2dlbmVyYXRlLmgiCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYgLyogX19jcGx1c3BsdXMgKi8KKworZXh0ZXJuIGNvbnN0IHVpbnQ4X3QgY3JjQ2hlY2tEYXRhW107CitleHRlcm4gY29uc3QgdWludDhfdCBjcmNDaGVja1NpemU7CisKK2V4dGVybiBpbnQgY3JjVmVyaWZ5Q2hlY2tzdW0gKGNvbnN0IENSQ0dlbmVyYXRvciAqY3JjLCBjcmNfdCBleHBlY3RlZCk7CitleHRlcm4gaW50IGNyY1ZlcmlmeVJlc2lkdWUgKENSQ0dlbmVyYXRvciAqY3JjKTsKKworZXh0ZXJuIGludCBjcmNWZXJpZnlBbGdvcml0aG0gKGNvbnN0IENSQ0FsZ29yaXRobSAqYWxnb3JpdGhtKTsKK2V4dGVybiBpbnQgY3JjVmVyaWZ5UHJvdmlkZWRBbGdvcml0aG1zICh2b2lkKTsKKworZXh0ZXJuIGludCBjcmNWZXJpZnlBbGdvcml0aG1XaXRoRGF0YSAoCisgIGNvbnN0IENSQ0FsZ29yaXRobSAqYWxnb3JpdGhtLAorICBjb25zdCB2b2lkICpkYXRhLCBzaXplX3Qgc2l6ZSwgY3JjX3QgZXhwZWN0ZWQKKyk7CisKK2V4dGVybiBpbnQgY3JjVmVyaWZ5QWxnb3JpdGhtV2l0aFN0cmluZyAoCisgIGNvbnN0IENSQ0FsZ29yaXRobSAqYWxnb3JpdGhtLAorICBjb25zdCBjaGFyICpzdHJpbmcsIGNyY190IGV4cGVjdGVkCispOworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZiAvKiBfX2NwbHVzcGx1cyAqLworCisjZW5kaWYgLyogQlJMVFRZX0lOQ0xVREVEX0NSQ19WRVJJRlkgKi8KZGlmZiAtLWdpdCBhL0hlYWRlcnMvY3RiLmggYi9IZWFkZXJzL2N0Yi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE2YzJmOWUKLS0tIC9kZXYvbnVsbAorKysgYi9IZWFkZXJzL2N0Yi5oCkBAIC0wLDAgKzEsNTggQEAKKy8qCisgKiBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorICogICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorICoKKyAqIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorICoKKyAqIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyAqLworCisjaWZuZGVmIEJSTFRUWV9JTkNMVURFRF9DVEIKKyNkZWZpbmUgQlJMVFRZX0lOQ0xVREVEX0NUQgorCisjaW5jbHVkZSAiY3RiX3R5cGVzLmgiCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYgLyogX19jcGx1c3BsdXMgKi8KKwordHlwZWRlZiBzdHJ1Y3QgQ29udHJhY3Rpb25UYWJsZVN0cnVjdCBDb250cmFjdGlvblRhYmxlOworZXh0ZXJuIENvbnRyYWN0aW9uVGFibGUgKmNvbnRyYWN0aW9uVGFibGU7CisKK2V4dGVybiB2b2lkIGxvY2tDb250cmFjdGlvblRhYmxlICh2b2lkKTsKK2V4dGVybiB2b2lkIHVubG9ja0NvbnRyYWN0aW9uVGFibGUgKHZvaWQpOworCitleHRlcm4gQ29udHJhY3Rpb25UYWJsZSAqY29tcGlsZUNvbnRyYWN0aW9uVGFibGUgKGNvbnN0IGNoYXIgKm5hbWUpOworZXh0ZXJuIHZvaWQgZGVzdHJveUNvbnRyYWN0aW9uVGFibGUgKENvbnRyYWN0aW9uVGFibGUgKnRhYmxlKTsKKworZXh0ZXJuIGNoYXIgKmVuc3VyZUNvbnRyYWN0aW9uVGFibGVFeHRlbnNpb24gKGNvbnN0IGNoYXIgKnBhdGgpOworZXh0ZXJuIGNoYXIgKm1ha2VDb250cmFjdGlvblRhYmxlUGF0aCAoY29uc3QgY2hhciAqZGlyZWN0b3J5LCBjb25zdCBjaGFyICpuYW1lKTsKKworZXh0ZXJuIGNoYXIgKmdldENvbnRyYWN0aW9uVGFibGVGb3JMb2NhbGUgKGNvbnN0IGNoYXIgKmRpcmVjdG9yeSk7CitleHRlcm4gaW50IHJlcGxhY2VDb250cmFjdGlvblRhYmxlIChjb25zdCBjaGFyICpkaXJlY3RvcnksIGNvbnN0IGNoYXIgKm5hbWUpOworCitleHRlcm4gdm9pZCBjb250cmFjdFRleHQoCisgICAgQ29udHJhY3Rpb25UYWJsZSAqY29udHJhY3Rpb25UYWJsZSwgLyogUG9pbnRlciB0byB0cmFuc2xhdGlvbiB0YWJsZSAqLworICAgIENvbnRyYWN0aW9uQ2FjaGUgKmNvbnRyYWN0aW9uQ2FjaGUsCisgICAgY29uc3Qgd2NoYXJfdCAqaW5wdXRCdWZmZXIsICAvKiBXaGF0IGlzIHRvIGJlIHRyYW5zbGF0ZWQgKi8KKyAgICBpbnQgKmlucHV0TGVuZ3RoLCAgICAgICAgICAgIC8qIEl0cyBsZW5ndGggKi8KKyAgICB1bnNpZ25lZCBjaGFyICpvdXRwdXRCdWZmZXIsIC8qIFdoZXJlIHRoZSB0cmFuc2xhdGlvbiBpcyB0byBnbyAqLworICAgIGludCAqb3V0cHV0TGVuZ3RoLCAgICAgICAgICAgLyogbGVuZ3RoIG9mIHRoaXMgYXJlYSAqLworICAgIGludCAqb2Zmc2V0c01hcCwgLyogQXJyYXkgb2Ygb2Zmc2V0cyBvZiB0cmFuc2xhdGVkIGNoYXJzIGluIHNvdXJjZSAqLworICAgIGludCBjdXJzb3JPZmZzZXQgLyogUG9zaXRpb24gb2YgY291cnNvciBpbiBzb3VyY2UgKi8KKyk7CisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmIC8qIF9fY3BsdXNwbHVzICovCisKKyNlbmRpZiAvKiBCUkxUVFlfSU5DTFVERURfQ1RCICovCmRpZmYgLS1naXQgYS9IZWFkZXJzL2N0Yl90eXBlcy5oIGIvSGVhZGVycy9jdGJfdHlwZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OTlhNTE5Ci0tLSAvZGV2L251bGwKKysrIGIvSGVhZGVycy9jdGJfdHlwZXMuaApAQCAtMCwwICsxLDY1IEBACisvKgorICogQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyAqICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyAqCisgKiBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorICoKKyAqIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyAqCisgKiBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisgKi8KKworI2lmbmRlZiBCUkxUVFlfSU5DTFVERURfQ1RCX1RZUEVTCisjZGVmaW5lIEJSTFRUWV9JTkNMVURFRF9DVEJfVFlQRVMKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZiAvKiBfX2NwbHVzcGx1cyAqLworCisjZGVmaW5lIENUQl9OT19PRkZTRVQgLTEKKyNkZWZpbmUgQ1RCX05PX0NVUlNPUiAtMQorCit0eXBlZGVmIGVudW0geworICBDVEJfQ0FQX05PTkUsCisgIENUQl9DQVBfU0lHTiwKKyAgQ1RCX0NBUF9ET1Q3Cit9IENUQl9DYXBpdGFsaXphdGlvbk1vZGU7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgc3RydWN0IHsKKyAgICB3Y2hhcl90ICpjaGFyYWN0ZXJzOworICAgIHVuc2lnbmVkIGludCBzaXplOworICAgIHVuc2lnbmVkIGludCBjb3VudDsKKyAgICB1bnNpZ25lZCBpbnQgY29uc3VtZWQ7CisgIH0gaW5wdXQ7CisKKyAgc3RydWN0IHsKKyAgICB1bnNpZ25lZCBjaGFyICpjZWxsczsKKyAgICB1bnNpZ25lZCBpbnQgc2l6ZTsKKyAgICB1bnNpZ25lZCBpbnQgY291bnQ7CisgICAgdW5zaWduZWQgaW50IG1heGltdW07CisgIH0gb3V0cHV0OworCisgIHN0cnVjdCB7CisgICAgaW50ICphcnJheTsKKyAgICB1bnNpZ25lZCBpbnQgc2l6ZTsKKyAgICB1bnNpZ25lZCBpbnQgY291bnQ7CisgIH0gb2Zmc2V0czsKKworICBpbnQgY3Vyc29yT2Zmc2V0OworICB1bnNpZ25lZCBjaGFyIGV4cGFuZEN1cnJlbnRXb3JkOworICB1bnNpZ25lZCBjaGFyIGNhcGl0YWxpemF0aW9uTW9kZTsKK30gQ29udHJhY3Rpb25DYWNoZTsKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYgLyogX19jcGx1c3BsdXMgKi8KKworI2VuZGlmIC8qIEJSTFRUWV9JTkNMVURFRF9DVEJfVFlQRVMgKi8KZGlmZiAtLWdpdCBhL0hlYWRlcnMvZGF0YWFyZWEuaCBiL0hlYWRlcnMvZGF0YWFyZWEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NmM5OWVjCi0tLSAvZGV2L251bGwKKysrIGIvSGVhZGVycy9kYXRhYXJlYS5oCkBAIC0wLDAgKzEsNDEgQEAKKy8qCisgKiBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorICogICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorICoKKyAqIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorICoKKyAqIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyAqLworCisjaWZuZGVmIEJSTFRUWV9JTkNMVURFRF9EQVRBQVJFQQorI2RlZmluZSBCUkxUVFlfSU5DTFVERURfREFUQUFSRUEKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZiAvKiBfX2NwbHVzcGx1cyAqLworCit0eXBlZGVmIHN0cnVjdCBEYXRhQXJlYVN0cnVjdCBEYXRhQXJlYTsKK2V4dGVybiBEYXRhQXJlYSAqbmV3RGF0YUFyZWEgKHZvaWQpOworZXh0ZXJuIHZvaWQgZGVzdHJveURhdGFBcmVhIChEYXRhQXJlYSAqYXJlYSk7CitleHRlcm4gdm9pZCByZXNldERhdGFBcmVhIChEYXRhQXJlYSAqYXJlYSk7CisKK3R5cGVkZWYgdW5zaWduZWQgbG9uZyBpbnQgRGF0YU9mZnNldDsKK2V4dGVybiBpbnQgYWxsb2NhdGVEYXRhSXRlbSAoRGF0YUFyZWEgKmFyZWEsIERhdGFPZmZzZXQgKm9mZnNldCwgc2l6ZV90IHNpemUsIHNpemVfdCBhbGlnbm1lbnQpOworZXh0ZXJuIHZvaWQgKmdldERhdGFJdGVtIChEYXRhQXJlYSAqYXJlYSwgRGF0YU9mZnNldCBvZmZzZXQpOworZXh0ZXJuIHNpemVfdCBnZXREYXRhU2l6ZSAoRGF0YUFyZWEgKmFyZWEpOworZXh0ZXJuIGludCBzYXZlRGF0YUl0ZW0gKERhdGFBcmVhICphcmVhLCBEYXRhT2Zmc2V0ICpvZmZzZXQsIGNvbnN0IHZvaWQgKml0ZW0sIHNpemVfdCBzaXplLCBzaXplX3QgYWxpZ25tZW50KTsKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYgLyogX19jcGx1c3BsdXMgKi8KKworI2VuZGlmIC8qIEJSTFRUWV9JTkNMVURFRF9EQVRBQVJFQSAqLwpkaWZmIC0tZ2l0IGEvSGVhZGVycy9kYXRhZmlsZS5oIGIvSGVhZGVycy9kYXRhZmlsZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI3YmQzNmYKLS0tIC9kZXYvbnVsbAorKysgYi9IZWFkZXJzL2RhdGFmaWxlLmgKQEAgLTAsMCArMSwyMDIgQEAKKy8qCisgKiBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorICogICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorICoKKyAqIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorICoKKyAqIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyAqLworCisjaWZuZGVmIEJSTFRUWV9JTkNMVURFRF9EQVRBRklMRQorI2RlZmluZSBCUkxUVFlfSU5DTFVERURfREFUQUZJTEUKKworI2luY2x1ZGUgPHN0ZGlvLmg+CisKKyNpbmNsdWRlICJ2YXJpYWJsZXMuaCIKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZiAvKiBfX2NwbHVzcGx1cyAqLworCitleHRlcm4gaW50IHNldEJhc2VEYXRhVmFyaWFibGVzIChjb25zdCBWYXJpYWJsZUluaXRpYWxpemVyICppbml0aWFsaXplcnMpOworZXh0ZXJuIGludCBzZXRUYWJsZURhdGFWYXJpYWJsZXMgKGNvbnN0IGNoYXIgKnRhYmxlRXh0ZW5zaW9uLCBjb25zdCBjaGFyICpzdWJ0YWJsZUV4dGVuc2lvbik7CisKK2V4dGVybiBGSUxFICpvcGVuRGF0YUZpbGUgKGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IGNoYXIgKm1vZGUsIGludCBvcHRpb25hbCk7CisKK3R5cGVkZWYgc3RydWN0IERhdGFGaWxlU3RydWN0IERhdGFGaWxlOworCisjZGVmaW5lIERBVEFfT1BFUkFORFNfUFJPQ0VTU09SKG5hbWUpIGludCBuYW1lIChEYXRhRmlsZSAqZmlsZSwgdm9pZCAqZGF0YSkKK3R5cGVkZWYgREFUQV9PUEVSQU5EU19QUk9DRVNTT1IoRGF0YU9wZXJhbmRzUHJvY2Vzc29yKTsKKwordHlwZWRlZiBlbnVtIHsKKyAgREZPX05PX0NPTU1FTlRTID0gMFgwMQorfSBEYXRhRmlsZU9wdGlvbnM7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgRGF0YU9wZXJhbmRzUHJvY2Vzc29yICpwcm9jZXNzT3BlcmFuZHM7CisgIHZvaWQgKCpsb2dGaWxlTmFtZSkgKGNvbnN0IGNoYXIgKm5hbWUsIHZvaWQgKmRhdGEpOworICB2b2lkICpkYXRhOworICB1bnNpZ25lZCBjaGFyIG9wdGlvbnM7Cit9IERhdGFGaWxlUGFyYW1ldGVyczsKKworZXh0ZXJuIGludCBwcm9jZXNzRGF0YUZpbGUgKGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IERhdGFGaWxlUGFyYW1ldGVycyAqcGFyYW1ldGVycyk7CitleHRlcm4gdm9pZCByZXBvcnREYXRhRXJyb3IgKERhdGFGaWxlICpmaWxlLCBjb25zdCBjaGFyICpmb3JtYXQsIC4uLikgUFJJTlRGKDIsIDMpOworCitleHRlcm4gaW50IHByb2Nlc3NEYXRhU3RyZWFtICgKKyAgRGF0YUZpbGUgKmluY2x1ZGVyLAorICBGSUxFICpzdHJlYW0sIGNvbnN0IGNoYXIgKm5hbWUsCisgIGNvbnN0IERhdGFGaWxlUGFyYW1ldGVycyAqcGFyYW1ldGVycworKTsKKworZXh0ZXJuIGludCBjb21wYXJlS2V5d29yZCAoY29uc3Qgd2NoYXJfdCAqa2V5d29yZCwgY29uc3Qgd2NoYXJfdCAqY2hhcmFjdGVycywgc2l6ZV90IGNvdW50KTsKK2V4dGVybiBpbnQgY29tcGFyZUtleXdvcmRzIChjb25zdCB3Y2hhcl90ICprZXl3b3JkMSwgY29uc3Qgd2NoYXJfdCAqa2V5d29yZDIpOworCitleHRlcm4gaW50IGlzS2V5d29yZCAoY29uc3Qgd2NoYXJfdCAqa2V5d29yZCwgY29uc3Qgd2NoYXJfdCAqY2hhcmFjdGVycywgc2l6ZV90IGNvdW50KTsKK2V4dGVybiBpbnQgaXNOdW1iZXIgKGludCAqbnVtYmVyLCBjb25zdCB3Y2hhcl90ICpjaGFyYWN0ZXJzLCBpbnQgbGVuZ3RoKTsKK2V4dGVybiBpbnQgaXNIZXhhZGVjaW1hbERpZ2l0ICh3Y2hhcl90IGNoYXJhY3RlciwgaW50ICp2YWx1ZSwgaW50ICpzaGlmdCk7CitleHRlcm4gaW50IGlzT2N0YWxEaWdpdCAod2NoYXJfdCBjaGFyYWN0ZXIsIGludCAqdmFsdWUsIGludCAqc2hpZnQpOworCitleHRlcm4gaW50IGZpbmREYXRhT3BlcmFuZCAoRGF0YUZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgKmRlc2NyaXB0aW9uKTsKK2V4dGVybiBpbnQgZ2V0RGF0YUNoYXJhY3RlciAoRGF0YUZpbGUgKmZpbGUsIHdjaGFyX3QgKmNoYXJhY3Rlcik7CitleHRlcm4gaW50IHVuZ2V0RGF0YUNoYXJhY3RlcnMgKERhdGFGaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY291bnQpOworCit0eXBlZGVmIHN0cnVjdCB7CisgIGNvbnN0IHdjaGFyX3QgKmNoYXJhY3RlcnM7CisgIGludCBsZW5ndGg7Cit9IERhdGFPcGVyYW5kOworCitleHRlcm4gaW50IGdldERhdGFPcGVyYW5kIChEYXRhRmlsZSAqZmlsZSwgRGF0YU9wZXJhbmQgKm9wZXJhbmQsIGNvbnN0IGNoYXIgKmRlc2NyaXB0aW9uKTsKK2V4dGVybiBpbnQgZ2V0VGV4dE9wZXJhbmQgKERhdGFGaWxlICpmaWxlLCBEYXRhT3BlcmFuZCAqdGV4dCwgY29uc3QgY2hhciAqZGVzY3JpcHRpb24pOworZXh0ZXJuIHZvaWQgZ2V0VGV4dFJlbWFpbmluZyAoRGF0YUZpbGUgKmZpbGUsIERhdGFPcGVyYW5kICp0ZXh0KTsKKwordHlwZWRlZiBzdHJ1Y3QgeworICB1bnNpZ25lZCBjaGFyIGxlbmd0aDsKKyAgd2NoYXJfdCBjaGFyYWN0ZXJzWzBYRkZdOworfSBEYXRhU3RyaW5nOworCitleHRlcm4gaW50IHBhcnNlRGF0YVN0cmluZyAoRGF0YUZpbGUgKmZpbGUsIERhdGFTdHJpbmcgKnN0cmluZywgY29uc3Qgd2NoYXJfdCAqY2hhcmFjdGVycywgaW50IGxlbmd0aCwgaW50IG5vVW5pY29kZSk7CitleHRlcm4gaW50IGdldERhdGFTdHJpbmcgKERhdGFGaWxlICpmaWxlLCBEYXRhU3RyaW5nICpzdHJpbmcsIGludCBub1VuaWNvZGUsIGNvbnN0IGNoYXIgKmRlc2NyaXB0aW9uKTsKKworZXh0ZXJuIGludCB3cml0ZUhleGFkZWNpbWFsQ2hhcmFjdGVyIChGSUxFICpzdHJlYW0sIHdjaGFyX3QgY2hhcmFjdGVyKTsKK2V4dGVybiBpbnQgd3JpdGVFc2NhcGVkQ2hhcmFjdGVyIChGSUxFICpzdHJlYW0sIHdjaGFyX3QgY2hhcmFjdGVyKTsKK2V4dGVybiBpbnQgd3JpdGVFc2NhcGVkQ2hhcmFjdGVycyAoRklMRSAqc3RyZWFtLCBjb25zdCB3Y2hhcl90ICpjaGFyYWN0ZXJzLCBzaXplX3QgY291bnQpOworCit0eXBlZGVmIHN0cnVjdCB7CisgIHVuc2lnbmVkIGNoYXIgbGVuZ3RoOworICB1bnNpZ25lZCBjaGFyIGJ5dGVzWzBYRkZdOworfSBCeXRlT3BlcmFuZDsKKworI2RlZmluZSBDRUxMU19PUEVSQU5EX0RFTElNSVRFUiBXQ19DKCctJykKKyNkZWZpbmUgQ0VMTFNfT1BFUkFORF9TUEFDRSBXQ19DKCcwJykKKworZXh0ZXJuIGludCBwYXJzZUNlbGxzT3BlcmFuZCAoRGF0YUZpbGUgKmZpbGUsIEJ5dGVPcGVyYW5kICpjZWxscywgY29uc3Qgd2NoYXJfdCAqY2hhcmFjdGVycywgaW50IGxlbmd0aCk7CitleHRlcm4gaW50IGdldENlbGxzT3BlcmFuZCAoRGF0YUZpbGUgKmZpbGUsIEJ5dGVPcGVyYW5kICpjZWxscywgY29uc3QgY2hhciAqZGVzY3JpcHRpb24pOworCitleHRlcm4gaW50IHdyaXRlRG90cyAoRklMRSAqc3RyZWFtLCB1bnNpZ25lZCBjaGFyIGNlbGwpOworZXh0ZXJuIGludCB3cml0ZURvdHNDZWxsIChGSUxFICpzdHJlYW0sIHVuc2lnbmVkIGNoYXIgY2VsbCk7CitleHRlcm4gaW50IHdyaXRlRG90c0NlbGxzIChGSUxFICpzdHJlYW0sIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmNlbGxzLCBzaXplX3QgY291bnQpOworCitleHRlcm4gaW50IHdyaXRlVXRmOENlbGwgKEZJTEUgKnN0cmVhbSwgdW5zaWduZWQgY2hhciBjZWxsKTsKK2V4dGVybiBpbnQgd3JpdGVVdGY4Q2VsbHMgKEZJTEUgKnN0cmVhbSwgY29uc3QgdW5zaWduZWQgY2hhciAqY2VsbHMsIHNpemVfdCBjb3VudCk7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgY29uc3Qgd2NoYXJfdCAqbmFtZTsKKyAgRGF0YU9wZXJhbmRzUHJvY2Vzc29yICpwcm9jZXNzb3I7CisgIHVuc2lnbmVkIGNoYXIgdW5jb25kaXRpb25hbCA6IDE7Cit9IERhdGFEaXJlY3RpdmU7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgc3RydWN0IHsKKyAgICBjb25zdCBEYXRhRGlyZWN0aXZlICp0YWJsZTsKKyAgICBzaXplX3QgY291bnQ7CisgIH0gY29uc3QgdW5zb3J0ZWQ7CisKKyAgc3RydWN0IHsKKyAgICBjb25zdCBEYXRhRGlyZWN0aXZlICoqdGFibGU7CisgICAgc2l6ZV90IGNvdW50OworICB9IHNvcnRlZDsKKworICBjb25zdCBEYXRhRGlyZWN0aXZlICp1bm5hbWVkOworfSBEYXRhRGlyZWN0aXZlczsKKworI2RlZmluZSBCRUdJTl9EQVRBX0RJUkVDVElWRV9UQUJMRSBcCisgIHN0YXRpYyBjb25zdCBEYXRhRGlyZWN0aXZlIHVuc29ydGVkRGlyZWN0aXZlc1tdID0geworCisjZGVmaW5lIEVORF9EQVRBX0RJUkVDVElWRV9UQUJMRSB9OyBcCisgIHN0YXRpYyBEYXRhRGlyZWN0aXZlcyBkaXJlY3RpdmVzID0geyBcCisgICAgLnVuc29ydGVkID0geyBcCisgICAgICAudGFibGUgPSB1bnNvcnRlZERpcmVjdGl2ZXMsIFwKKyAgICAgIC5jb3VudCA9IEFSUkFZX0NPVU5UKHVuc29ydGVkRGlyZWN0aXZlcykgXAorICAgIH0sIFwKKyAgICBcCisgICAgLnNvcnRlZCA9IHsgXAorICAgICAgLnRhYmxlID0gTlVMTCwgXAorICAgICAgLmNvdW50ID0gMCBcCisgICAgfSwgXAorICAgIFwKKyAgICAudW5uYW1lZCA9IE5VTEwgXAorICB9OworCitleHRlcm4gaW50IHByb2Nlc3NEaXJlY3RpdmVPcGVyYW5kIChEYXRhRmlsZSAqZmlsZSwgRGF0YURpcmVjdGl2ZXMgKmRpcmVjdGl2ZXMsIGNvbnN0IGNoYXIgKmRlc2NyaXB0aW9uLCB2b2lkICpkYXRhKTsKKworI2RlZmluZSBEQVRBX0NPTkRJVElPTl9URVNURVIobmFtZSkgaW50IG5hbWUgKERhdGFGaWxlICpmaWxlLCBjb25zdCBEYXRhT3BlcmFuZCAqaWRlbnRpZmllciwgdm9pZCAqZGF0YSkKK3R5cGVkZWYgREFUQV9DT05ESVRJT05fVEVTVEVSKERhdGFDb25kaXRpb25UZXN0ZXIpOworCitleHRlcm4gaW50IHByb2Nlc3NDb25kaXRpb25PcGVyYW5kcyAoCisgIERhdGFGaWxlICpmaWxlLAorICBEYXRhQ29uZGl0aW9uVGVzdGVyICp0ZXN0Q29uZGl0aW9uLCBpbnQgbmVnYXRlQ29uZGl0aW9uLAorICBjb25zdCBjaGFyICpkZXNjcmlwdGlvbiwgdm9pZCAqZGF0YQorKTsKKworZXh0ZXJuIERBVEFfT1BFUkFORFNfUFJPQ0VTU09SKHByb2Nlc3NJbmNsdWRlT3BlcmFuZHMpOworZXh0ZXJuIGludCBpbmNsdWRlRGF0YUZpbGUgKERhdGFGaWxlICpmaWxlLCBjb25zdCB3Y2hhcl90ICpuYW1lLCBpbnQgbGVuZ3RoKTsKKworI2RlZmluZSBEQVRBX05FU1RJTkdfRElSRUNUSVZFUyBcCisgIHsubmFtZT1XU19DKCJpbmNsdWRlIiksIC5wcm9jZXNzb3I9cHJvY2Vzc0luY2x1ZGVPcGVyYW5kc30KKworZXh0ZXJuIERBVEFfT1BFUkFORFNfUFJPQ0VTU09SKHByb2Nlc3NFbHNlT3BlcmFuZHMpOworZXh0ZXJuIERBVEFfT1BFUkFORFNfUFJPQ0VTU09SKHByb2Nlc3NFbmRJZk9wZXJhbmRzKTsKKworI2RlZmluZSBEQVRBX0NPTkRJVElPTl9ESVJFQ1RJVkVTIFwKKyAgey5uYW1lPVdTX0MoImVsc2UiKSwgLnByb2Nlc3Nvcj1wcm9jZXNzRWxzZU9wZXJhbmRzLCAudW5jb25kaXRpb25hbD0xfSwgXAorICB7Lm5hbWU9V1NfQygiZW5kaWYiKSwgLnByb2Nlc3Nvcj1wcm9jZXNzRW5kSWZPcGVyYW5kcywgLnVuY29uZGl0aW9uYWw9MX0KKworZXh0ZXJuIERBVEFfT1BFUkFORFNfUFJPQ0VTU09SKHByb2Nlc3NJZlZhck9wZXJhbmRzKTsKK2V4dGVybiBEQVRBX09QRVJBTkRTX1BST0NFU1NPUihwcm9jZXNzSWZOb3RWYXJPcGVyYW5kcyk7CitleHRlcm4gREFUQV9PUEVSQU5EU19QUk9DRVNTT1IocHJvY2Vzc0JlZ2luVmFyaWFibGVzT3BlcmFuZHMpOworZXh0ZXJuIERBVEFfT1BFUkFORFNfUFJPQ0VTU09SKHByb2Nlc3NFbmRWYXJpYWJsZXNPcGVyYW5kcyk7CitleHRlcm4gREFUQV9PUEVSQU5EU19QUk9DRVNTT1IocHJvY2Vzc0xpc3RWYXJpYWJsZXNPcGVyYW5kcyk7CitleHRlcm4gREFUQV9PUEVSQU5EU19QUk9DRVNTT1IocHJvY2Vzc0Fzc2lnbkRlZmF1bHRPcGVyYW5kcyk7CitleHRlcm4gREFUQV9PUEVSQU5EU19QUk9DRVNTT1IocHJvY2Vzc0Fzc2lnbk9wZXJhbmRzKTsKKworI2RlZmluZSBEQVRBX1ZBUklBQkxFX0RJUkVDVElWRVMgXAorICB7Lm5hbWU9V1NfQygiaWZ2YXIiKSwgLnByb2Nlc3Nvcj1wcm9jZXNzSWZWYXJPcGVyYW5kcywgLnVuY29uZGl0aW9uYWw9MX0sIFwKKyAgey5uYW1lPVdTX0MoImlmbm90dmFyIiksIC5wcm9jZXNzb3I9cHJvY2Vzc0lmTm90VmFyT3BlcmFuZHMsIC51bmNvbmRpdGlvbmFsPTF9LCBcCisgIHsubmFtZT1XU19DKCJiZWdpbnZhcmlhYmxlcyIpLCAucHJvY2Vzc29yPXByb2Nlc3NCZWdpblZhcmlhYmxlc09wZXJhbmRzfSwgXAorICB7Lm5hbWU9V1NfQygiZW5kdmFyaWFibGVzIiksIC5wcm9jZXNzb3I9cHJvY2Vzc0VuZFZhcmlhYmxlc09wZXJhbmRzfSwgXAorICB7Lm5hbWU9V1NfQygibGlzdHZhcmlhYmxlcyIpLCAucHJvY2Vzc29yPXByb2Nlc3NMaXN0VmFyaWFibGVzT3BlcmFuZHN9LCBcCisgIHsubmFtZT1XU19DKCJhc3NpZ25kZWZhdWx0IiksIC5wcm9jZXNzb3I9cHJvY2Vzc0Fzc2lnbkRlZmF1bHRPcGVyYW5kc30sIFwKKyAgey5uYW1lPVdTX0MoImFzc2lnbiIpLCAucHJvY2Vzc29yPXByb2Nlc3NBc3NpZ25PcGVyYW5kc30KKworI2RlZmluZSBCUkxfRE9UX0NPVU5UIDgKK2V4dGVybiBjb25zdCB3Y2hhcl90IGJybERvdE51bWJlcnNbQlJMX0RPVF9DT1VOVF07CitleHRlcm4gY29uc3QgdW5zaWduZWQgY2hhciBicmxEb3RCaXRzW0JSTF9ET1RfQ09VTlRdOworZXh0ZXJuIGludCBicmxEb3ROdW1iZXJUb0luZGV4ICh3Y2hhcl90IG51bWJlciwgaW50ICppbmRleCk7CitleHRlcm4gaW50IGJybERvdEJpdFRvSW5kZXggKHVuc2lnbmVkIGNoYXIgYml0LCBpbnQgKmluZGV4KTsKKworZXh0ZXJuIGludCBnZXREb3RPcGVyYW5kIChEYXRhRmlsZSAqZmlsZSwgaW50ICppbmRleCk7CisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmIC8qIF9fY3BsdXNwbHVzICovCisKKyNlbmRpZiAvKiBCUkxUVFlfSU5DTFVERURfREFUQUZJTEUgKi8KZGlmZiAtLWdpdCBhL0hlYWRlcnMvZGV2aWNlLmggYi9IZWFkZXJzL2RldmljZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEzY2U4NjQKLS0tIC9kZXYvbnVsbAorKysgYi9IZWFkZXJzL2RldmljZS5oCkBAIC0wLDAgKzEsNTEgQEAKKy8qCisgKiBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorICogICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorICoKKyAqIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorICoKKyAqIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyAqLworCisjaWZuZGVmIEJSTFRUWV9JTkNMVURFRF9ERVZJQ0UKKyNkZWZpbmUgQlJMVFRZX0lOQ0xVREVEX0RFVklDRQorCisjaW5jbHVkZSAicHJvbG9ndWUuaCIKKworI2luY2x1ZGUgPHN0ZGlvLmg+CisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYgLyogX19jcGx1c3BsdXMgKi8KKworZXh0ZXJuIEZJTEUgKmdldENvbnNvbGUgKHZvaWQpOworZXh0ZXJuIGludCB3cml0ZVRvQ29uc29sZSAoY29uc3QgdW5zaWduZWQgY2hhciAqYnl0ZXMsIHNpemVfdCBjb3VudCk7CitleHRlcm4gaW50IHJpbmdDb25zb2xlQmVsbCAodm9pZCk7CisKK2V4dGVybiBjb25zdCBjaGFyICpnZXREZXZpY2VEaXJlY3RvcnkgKHZvaWQpOworZXh0ZXJuIGNoYXIgKmdldERldmljZVBhdGggKGNvbnN0IGNoYXIgKmRldmljZSk7CitleHRlcm4gY29uc3QgY2hhciAqcmVzb2x2ZURldmljZU5hbWUgKGNvbnN0IGNoYXIgKmNvbnN0ICpuYW1lcywgaW50IHN0cmljdCwgY29uc3QgY2hhciAqZGVzY3JpcHRpb24pOworCisjZGVmaW5lIERFVklDRV9QQVJBTUVURVJfU0VQQVJBVE9SICcrJworZXh0ZXJuIGNoYXIgKipnZXREZXZpY2VQYXJhbWV0ZXJzIChjb25zdCBjaGFyICpjb25zdCAqbmFtZXMsIGNvbnN0IGNoYXIgKmlkZW50aWZpZXIpOworCisjdW5kZWYgQUxMT1dfRE9TX0RFVklDRV9OQU1FUworI2lmIGRlZmluZWQoX19NU0RPU19fKSB8fCAoZGVmaW5lZChXSU5ET1dTKSAmJiAhZGVmaW5lZChfX0NZR1dJTl9fKSkKKyNkZWZpbmUgQUxMT1dfRE9TX0RFVklDRV9OQU1FUyAxCitleHRlcm4gaW50IGlzRG9zRGV2aWNlIChjb25zdCBjaGFyICppZGVudGlmaWVyLCBjb25zdCBjaGFyICpwcmVmaXgpOworI2VuZGlmIC8qIERPUyBvciBXaW5kb3dzIChidXQgbm90IEN5Z3dpbikgKi8KKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYgLyogX19jcGx1c3BsdXMgKi8KKworI2VuZGlmIC8qIEJSTFRUWV9JTkNMVURFRF9ERVZJQ0UgKi8KZGlmZiAtLWdpdCBhL0hlYWRlcnMvZHJpdmVyLmggYi9IZWFkZXJzL2RyaXZlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE1ODhkZjYKLS0tIC9kZXYvbnVsbAorKysgYi9IZWFkZXJzL2RyaXZlci5oCkBAIC0wLDAgKzEsNzAgQEAKKy8qCisgKiBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorICogICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorICoKKyAqIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorICoKKyAqIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyAqLworCisjaWZuZGVmIEJSTFRUWV9JTkNMVURFRF9EUklWRVIKKyNkZWZpbmUgQlJMVFRZX0lOQ0xVREVEX0RSSVZFUgorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmIC8qIF9fY3BsdXNwbHVzICovCisKK3R5cGVkZWYgc3RydWN0IHsKKyAgY29uc3QgY2hhciAqbmFtZTsKKyAgY29uc3QgY2hhciAqY29kZTsKKyAgY29uc3QgY2hhciAqY29tbWVudDsKKyAgY29uc3QgY2hhciAqdmVyc2lvbjsKKyAgY29uc3QgY2hhciAqZGV2ZWxvcGVyczsKKyAgY29uc3QgY2hhciAqZGF0ZTsKKyAgY29uc3QgY2hhciAqdGltZTsKK30gRHJpdmVyRGVmaW5pdGlvbjsKKworI2RlZmluZSBEUklWRVJfREVGSU5JVElPTl9ERUNMQVJBVElPTiBjb25zdCBEcml2ZXJEZWZpbml0aW9uIGRlZmluaXRpb24KKworI2RlZmluZSBEUklWRVJfREVGSU5JVElPTl9JTklUSUFMSVpFUiAuZGVmaW5pdGlvbiA9IHsgXAorICAubmFtZSA9IFNUUklOR0lGWShEUklWRVJfTkFNRSksIFwKKyAgLmNvZGUgPSBTVFJJTkdJRlkoRFJJVkVSX0NPREUpLCBcCisgIC5jb21tZW50ID0gRFJJVkVSX0NPTU1FTlQsIFwKKyAgLnZlcnNpb24gPSBEUklWRVJfVkVSU0lPTiwgXAorICAuZGV2ZWxvcGVycyA9IERSSVZFUl9ERVZFTE9QRVJTLCBcCisgIC5kYXRlID0gX19EQVRFX18sIFwKKyAgLnRpbWUgPSBfX1RJTUVfXyBcCit9CisKKyNkZWZpbmUgRFJJVkVSX1ZFUlNJT05fU1RSSU5HIFBBQ0tBR0VfVkVSU0lPTgorI2RlZmluZSBEUklWRVJfVkVSU0lPTl9ERUNMQVJBVElPTih0eXBlKSBjb25zdCBjaGFyIENPTkNBVEVOQVRFKHR5cGUjI192ZXJzaW9uXyxEUklWRVJfQ09ERSlbXSA9IERSSVZFUl9WRVJTSU9OX1NUUklORworCitleHRlcm4gdm9pZCB1bnN1cHBvcnRlZERldmljZUlkZW50aWZpZXIgKGNvbnN0IGNoYXIgKmlkZW50aWZpZXIpOworCitleHRlcm4gdm9pZCBsb2dPdXRwdXRQYWNrZXQgKGNvbnN0IHZvaWQgKnBhY2tldCwgc2l6ZV90IHNpemUpOworZXh0ZXJuIHZvaWQgbG9nSW5wdXRQYWNrZXQgKGNvbnN0IHZvaWQgKnBhY2tldCwgc2l6ZV90IHNpemUpOworZXh0ZXJuIHZvaWQgbG9nSW5wdXRQcm9ibGVtIChjb25zdCBjaGFyICpwcm9ibGVtLCBjb25zdCB1bnNpZ25lZCBjaGFyICpieXRlcywgc2l6ZV90IGNvdW50KTsKK2V4dGVybiB2b2lkIGxvZ0lnbm9yZWRCeXRlICh1bnNpZ25lZCBjaGFyIGJ5dGUpOworZXh0ZXJuIHZvaWQgbG9nRGlzY2FyZGVkQnl0ZSAodW5zaWduZWQgY2hhciBieXRlKTsKK2V4dGVybiB2b2lkIGxvZ1Vua25vd25QYWNrZXQgKHVuc2lnbmVkIGNoYXIgYnl0ZSk7CitleHRlcm4gdm9pZCBsb2dQYXJ0aWFsUGFja2V0IChjb25zdCB2b2lkICpwYWNrZXQsIHNpemVfdCBzaXplKTsKK2V4dGVybiB2b2lkIGxvZ1RydW5jYXRlZFBhY2tldCAoY29uc3Qgdm9pZCAqcGFja2V0LCBzaXplX3Qgc2l6ZSk7CitleHRlcm4gdm9pZCBsb2dTaG9ydFBhY2tldCAoY29uc3Qgdm9pZCAqcGFja2V0LCBzaXplX3Qgc2l6ZSk7CitleHRlcm4gdm9pZCBsb2dVbmV4cGVjdGVkUGFja2V0IChjb25zdCB2b2lkICpwYWNrZXQsIHNpemVfdCBzaXplKTsKK2V4dGVybiB2b2lkIGxvZ0NvcnJ1cHRQYWNrZXQgKGNvbnN0IHZvaWQgKnBhY2tldCwgc2l6ZV90IHNpemUpOworZXh0ZXJuIHZvaWQgbG9nRGlzY2FyZGVkQnl0ZXMgKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ5dGVzLCBzaXplX3QgY291bnQpOworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZiAvKiBfX2NwbHVzcGx1cyAqLworCisjZW5kaWYgLyogQlJMVFRZX0lOQ0xVREVEX0RSSVZFUiAqLwpkaWZmIC0tZ2l0IGEvSGVhZGVycy9kcml2ZXJzLmggYi9IZWFkZXJzL2RyaXZlcnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MWYxYTdlCi0tLSAvZGV2L251bGwKKysrIGIvSGVhZGVycy9kcml2ZXJzLmgKQEAgLTAsMCArMSw1NSBAQAorLyoKKyAqIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisgKiAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisgKgorICogQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKKyNpZm5kZWYgQlJMVFRZX0lOQ0xVREVEX0RSSVZFUlMKKyNkZWZpbmUgQlJMVFRZX0lOQ0xVREVEX0RSSVZFUlMKKworI2luY2x1ZGUgImRyaXZlci5oIgorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmIC8qIF9fY3BsdXNwbHVzICovCisKK3R5cGVkZWYgc3RydWN0IHsKKyAgY29uc3Qgdm9pZCAqYWRkcmVzczsKKyAgY29uc3QgRHJpdmVyRGVmaW5pdGlvbiAqZGVmaW5pdGlvbjsKK30gRHJpdmVyRW50cnk7CisKK2V4dGVybiBpbnQgaXNEcml2ZXJBdmFpbGFibGUgKGNvbnN0IGNoYXIgKmNvZGUsIGNvbnN0IGNoYXIgKmNvZGVzKTsKK2V4dGVybiBpbnQgaXNEcml2ZXJJbmNsdWRlZCAoY29uc3QgY2hhciAqY29kZSwgY29uc3QgRHJpdmVyRW50cnkgKnRhYmxlKTsKK2V4dGVybiBpbnQgaGF2ZURyaXZlciAoY29uc3QgY2hhciAqY29kZSwgY29uc3QgY2hhciAqY29kZXMsIGNvbnN0IERyaXZlckVudHJ5ICp0YWJsZSk7CitleHRlcm4gY29uc3QgY2hhciAqZ2V0RGVmYXVsdERyaXZlciAoY29uc3QgRHJpdmVyRW50cnkgKnRhYmxlKTsKKworZXh0ZXJuIGNvbnN0IHZvaWQgKmxvYWREcml2ZXIgKAorICBjb25zdCBjaGFyICpkcml2ZXJDb2RlLCB2b2lkICoqZHJpdmVyT2JqZWN0LAorICBjb25zdCBjaGFyICpkcml2ZXJEaXJlY3RvcnksIGNvbnN0IERyaXZlckVudHJ5ICpkcml2ZXJUYWJsZSwKKyAgY29uc3QgY2hhciAqdHlwZU5hbWUsIGNoYXIgdHlwZUxldHRlciwgY29uc3QgY2hhciAqc3ltYm9sUHJlZml4LAorICBjb25zdCB2b2lkICpudWxsQWRkcmVzcywgY29uc3QgRHJpdmVyRGVmaW5pdGlvbiAqbnVsbERlZmluaXRpb24KKyk7CisKK2V4dGVybiB2b2lkIGlkZW50aWZ5RHJpdmVyICgKKyAgY29uc3QgY2hhciAqdHlwZSwKKyAgY29uc3QgRHJpdmVyRGVmaW5pdGlvbiAqZGVmaW5pdGlvbiwKKyAgaW50IGZ1bGwKKyk7CisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmIC8qIF9fY3BsdXNwbHVzICovCisKKyNlbmRpZiAvKiBCUkxUVFlfSU5DTFVERURfRFJJVkVSUyAqLwpkaWZmIC0tZ2l0IGEvSGVhZGVycy9keW5sZC5oIGIvSGVhZGVycy9keW5sZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgwZTE3ZjcKLS0tIC9kZXYvbnVsbAorKysgYi9IZWFkZXJzL2R5bmxkLmgKQEAgLTAsMCArMSwzNiBAQAorLyoKKyAqIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisgKiAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisgKgorICogQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKKyNpZm5kZWYgQlJMVFRZX0lOQ0xVREVEX0RZTkxECisjZGVmaW5lIEJSTFRUWV9JTkNMVURFRF9EWU5MRAorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmIC8qIF9fY3BsdXNwbHVzICovCisKK2V4dGVybiB2b2lkICpsb2FkU2hhcmVkT2JqZWN0IChjb25zdCBjaGFyICpwYXRoKTsKK2V4dGVybiB2b2lkIHVubG9hZFNoYXJlZE9iamVjdCAodm9pZCAqb2JqZWN0KTsKKworZXh0ZXJuIGludCBmaW5kU2hhcmVkU3ltYm9sICh2b2lkICpvYmplY3QsIGNvbnN0IGNoYXIgKnN5bWJvbCwgdm9pZCAqcG9pbnRlckFkZHJlc3MpOworZXh0ZXJuIGNvbnN0IGNoYXIgKmdldFNoYXJlZFN5bWJvbE5hbWUgKHZvaWQgKmFkZHJlc3MsIHB0cmRpZmZfdCAqb2Zmc2V0KTsKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYgLyogX19jcGx1c3BsdXMgKi8KKworI2VuZGlmIC8qIEJSTFRUWV9JTkNMVURFRF9EWU5MRCAqLwpkaWZmIC0tZ2l0IGEvSGVhZGVycy9lbWJlZC5oIGIvSGVhZGVycy9lbWJlZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI2MjNkMDcKLS0tIC9kZXYvbnVsbAorKysgYi9IZWFkZXJzL2VtYmVkLmgKQEAgLTAsMCArMSw3MCBAQAorLyoKKyAqIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisgKiAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisgKgorICogQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKKyNpZm5kZWYgQlJMVFRZX0lOQ0xVREVEX0VNQkVECisjZGVmaW5lIEJSTFRUWV9JTkNMVURFRF9FTUJFRAorCisjaW5jbHVkZSAicHJvZ3JhbS5oIgorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmIC8qIF9fY3BsdXNwbHVzICovCisKK3R5cGVkZWYgZW51bSB7CisgIFdBSVRfU1RPUCwKKyAgV0FJVF9DT05USU5VRQorfSBXYWl0UmVzdWx0OworCitGVU5DVElPTl9ERUNMQVJFKGJybHR0eUNvbnN0cnVjdCwgUHJvZ3JhbUV4aXRTdGF0dXMsIChpbnQgYXJnYywgY2hhciAqYXJndltdKSk7CitGVU5DVElPTl9ERUNMQVJFKGJybHR0eURlc3RydWN0LCBpbnQsICh2b2lkKSk7CisKK0ZVTkNUSU9OX0RFQ0xBUkUoYnJsdHR5RW5hYmxlSW50ZXJydXB0LCBpbnQsICh2b2lkKSk7CitGVU5DVElPTl9ERUNMQVJFKGJybHR0eURpc2FibGVJbnRlcnJ1cHQsIGludCwgKHZvaWQpKTsKKworRlVOQ1RJT05fREVDTEFSRShicmx0dHlJbnRlcnJ1cHQsIGludCwgKFdhaXRSZXN1bHQgd2FpdFJlc3VsdCkpOworRlVOQ1RJT05fREVDTEFSRShicmx0dHlXYWl0LCBXYWl0UmVzdWx0LCAoaW50IGR1cmF0aW9uKSk7CisKK0ZVTkNUSU9OX0RFQ0xBUkUoY2hhbmdlTG9nTGV2ZWwsIGludCwgKGNvbnN0IGNoYXIgKm9wZXJhbmQpKTsKK0ZVTkNUSU9OX0RFQ0xBUkUoY2hhbmdlTG9nQ2F0ZWdvcmllcywgaW50LCAoY29uc3QgY2hhciAqb3BlcmFuZCkpOworCitGVU5DVElPTl9ERUNMQVJFKGNoYW5nZVRleHRUYWJsZSwgaW50LCAoY29uc3QgY2hhciAqbmFtZSkpOworRlVOQ1RJT05fREVDTEFSRShjaGFuZ2VBdHRyaWJ1dGVzVGFibGUsIGludCwgKGNvbnN0IGNoYXIgKm5hbWUpKTsKK0ZVTkNUSU9OX0RFQ0xBUkUoY2hhbmdlQ29udHJhY3Rpb25UYWJsZSwgaW50LCAoY29uc3QgY2hhciAqbmFtZSkpOworRlVOQ1RJT05fREVDTEFSRShjaGFuZ2VLZXlib2FyZFRhYmxlLCBpbnQsIChjb25zdCBjaGFyICpuYW1lKSk7CisKK0ZVTkNUSU9OX0RFQ0xBUkUocmVzdGFydEJyYWlsbGVEcml2ZXIsIHZvaWQsICh2b2lkKSk7CitGVU5DVElPTl9ERUNMQVJFKGNoYW5nZUJyYWlsbGVEcml2ZXIsIGludCwgKGNvbnN0IGNoYXIgKmRyaXZlcikpOworRlVOQ1RJT05fREVDTEFSRShjaGFuZ2VCcmFpbGxlUGFyYW1ldGVycywgaW50LCAoY29uc3QgY2hhciAqcGFyYW1ldGVycykpOworRlVOQ1RJT05fREVDTEFSRShjaGFuZ2VCcmFpbGxlRGV2aWNlLCBpbnQsIChjb25zdCBjaGFyICpkZXZpY2UpKTsKKworRlVOQ1RJT05fREVDTEFSRShyZXN0YXJ0U3BlZWNoRHJpdmVyLCB2b2lkLCAodm9pZCkpOworRlVOQ1RJT05fREVDTEFSRShjaGFuZ2VTcGVlY2hEcml2ZXIsIGludCwgKGNvbnN0IGNoYXIgKmRyaXZlcikpOworRlVOQ1RJT05fREVDTEFSRShjaGFuZ2VTcGVlY2hQYXJhbWV0ZXJzLCBpbnQsIChjb25zdCBjaGFyICpwYXJhbWV0ZXJzKSk7CisKK0ZVTkNUSU9OX0RFQ0xBUkUocmVzdGFydFNjcmVlbkRyaXZlciwgdm9pZCwgKHZvaWQpKTsKK0ZVTkNUSU9OX0RFQ0xBUkUoY2hhbmdlU2NyZWVuRHJpdmVyLCBpbnQsIChjb25zdCBjaGFyICpkcml2ZXIpKTsKK0ZVTkNUSU9OX0RFQ0xBUkUoY2hhbmdlU2NyZWVuUGFyYW1ldGVycywgaW50LCAoY29uc3QgY2hhciAqcGFyYW1ldGVycykpOworCitGVU5DVElPTl9ERUNMQVJFKGNoYW5nZU1lc3NhZ2VMb2NhbGUsIGludCwgKGNvbnN0IGNoYXIgKnBhcmFtZXRlcnMpKTsKK0ZVTkNUSU9OX0RFQ0xBUkUoc2hvd01lc3NhZ2UsIHZvaWQsIChjb25zdCBjaGFyICp0ZXh0KSk7CisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmIC8qIF9fY3BsdXNwbHVzICovCisKKyNlbmRpZiAvKiBCUkxUVFlfSU5DTFVERURfRU1CRUQgKi8KZGlmZiAtLWdpdCBhL0hlYWRlcnMvZXp1c2IuaCBiL0hlYWRlcnMvZXp1c2IuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xODAyZjY2Ci0tLSAvZGV2L251bGwKKysrIGIvSGVhZGVycy9lenVzYi5oCkBAIC0wLDAgKzEsNzMgQEAKKy8qCisgKiBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorICogICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorICoKKyAqIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorICoKKyAqIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyAqLworCisjaWZuZGVmIEJSTFRUWV9JTkNMVURFRF9FWlVTQgorI2RlZmluZSBCUkxUVFlfSU5DTFVERURfRVpVU0IKKworI2luY2x1ZGUgImlvX3VzYi5oIgorI2luY2x1ZGUgImloZXhfdHlwZXMuaCIKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZiAvKiBfX2NwbHVzcGx1cyAqLworCisjZGVmaW5lIEVaVVNCX1JFUVVFU1RfUkVDSVBJRU5UIFVzYkNvbnRyb2xSZWNpcGllbnRfRGV2aWNlCisjZGVmaW5lIEVaVVNCX1JFUVVFU1RfVFlQRSBVc2JDb250cm9sVHlwZV9WZW5kb3IKKyNkZWZpbmUgRVpVU0JfUkVRVUVTVF9JTkRFWCAwCisKK3R5cGVkZWYgdWludDhfdCBFenVzYkFjdGlvbjsKKyNkZWZpbmUgRVpVU0JfQUNUSU9OX1JXX0lOVEVSTkFMIDBYQTAKKyNkZWZpbmUgRVpVU0JfQUNUSU9OX1JXX0VFUFJPTSAgIDBYQTIKKyNkZWZpbmUgRVpVU0JfQUNUSU9OX1JXX01FTU9SWSAgIDBYQTMKKworZXh0ZXJuIGludCBlenVzYldyaXRlRGF0YSAoCisgIFVzYkRldmljZSAqZGV2aWNlLCBFenVzYkFjdGlvbiBhY3Rpb24sIEloZXhBZGRyZXNzIGFkZHJlc3MsCisgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGEsIHNpemVfdCBsZW5ndGgKKyk7CisKK2V4dGVybiBpbnQgZXp1c2JSZWFkRGF0YSAoCisgIFVzYkRldmljZSAqZGV2aWNlLCBFenVzYkFjdGlvbiBhY3Rpb24sIEloZXhBZGRyZXNzIGFkZHJlc3MsCisgIHVuc2lnbmVkIGNoYXIgKmJ1ZmZlciwgc2l6ZV90IHNpemUKKyk7CisKK2V4dGVybiBpbnQgZXp1c2JWZXJpZnlEYXRhICgKKyAgVXNiRGV2aWNlICpkZXZpY2UsIEV6dXNiQWN0aW9uIGFjdGlvbiwgSWhleEFkZHJlc3MgYWRkcmVzcywKKyAgY29uc3QgdW5zaWduZWQgY2hhciAqZGF0YSwgc2l6ZV90IGxlbmd0aAorKTsKKworI2RlZmluZSBFWlVTQl9DUFVDU19BRERSRVNTIDBYN0Y5MgorI2RlZmluZSBFWlVTQl9DUFVDU19SRVNFVCAwWDAwCisjZGVmaW5lIEVaVVNCX0NQVUNTX1NUT1AgIDBYMDEKKworZXh0ZXJuIGludCBlenVzYldyaXRlQ1BVQ1MgKFVzYkRldmljZSAqZGV2aWNlLCB1aW50OF90IHN0YXRlKTsKK2V4dGVybiBpbnQgZXp1c2JTdG9wQ1BVIChVc2JEZXZpY2UgKmRldmljZSk7CitleHRlcm4gaW50IGV6dXNiUmVzZXRDUFUgKFVzYkRldmljZSAqZGV2aWNlKTsKKworZXh0ZXJuIGludCBlenVzYkluc3RhbGxCbG9iICgKKyAgVXNiRGV2aWNlICpkZXZpY2UsIGNvbnN0IGNoYXIgKm5hbWUsIEV6dXNiQWN0aW9uIGFjdGlvbgorKTsKKworZXh0ZXJuIGludCBlenVzYlByb2Nlc3NCbG9iICgKKyAgY29uc3QgY2hhciAqbmFtZSwgSWhleFJlY29yZEhhbmRsZXIgKmhhbmRsZXIsIHZvaWQgKmRhdGEKKyk7CisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmIC8qIF9fY3BsdXNwbHVzICovCisKKyNlbmRpZiAvKiBCUkxUVFlfSU5DTFVERURfRVpVU0IgKi8KZGlmZiAtLWdpdCBhL0hlYWRlcnMvZmlsZS5oIGIvSGVhZGVycy9maWxlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGFmMmNlMAotLS0gL2Rldi9udWxsCisrKyBiL0hlYWRlcnMvZmlsZS5oCkBAIC0wLDAgKzEsMTI5IEBACisvKgorICogQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyAqICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyAqCisgKiBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorICoKKyAqIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyAqCisgKiBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisgKi8KKworI2lmbmRlZiBCUkxUVFlfSU5DTFVERURfRklMRQorI2RlZmluZSBCUkxUVFlfSU5DTFVERURfRklMRQorCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRhcmcuaD4KKyNpbmNsdWRlIDxzdHJmbXRoLmg+CisKKyNpbmNsdWRlICJnZXRfc29ja2V0cy5oIgorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmIC8qIF9fY3BsdXNwbHVzICovCisKKyNkZWZpbmUgQ1VSUkVOVF9ESVJFQ1RPUllfTkFNRSAiLiIKKyNkZWZpbmUgUEFSRU5UX0RJUkVDVE9SWV9OQU1FICIuLiIKKworZXh0ZXJuIGludCBpc1BhdGhTZXBhcmF0b3IgKGNvbnN0IGNoYXIgY2hhcmFjdGVyKTsKK2V4dGVybiBpbnQgaXNBYnNvbHV0ZVBhdGggKGNvbnN0IGNoYXIgKnBhdGgpOworZXh0ZXJuIGNoYXIgKmdldFBhdGhEaXJlY3RvcnkgKGNvbnN0IGNoYXIgKnBhdGgpOworZXh0ZXJuIGNvbnN0IGNoYXIgKmxvY2F0ZVBhdGhOYW1lIChjb25zdCBjaGFyICpwYXRoKTsKK2V4dGVybiBjb25zdCBjaGFyICpsb2NhdGVQYXRoRXh0ZW5zaW9uIChjb25zdCBjaGFyICpwYXRoKTsKK2V4dGVybiBpbnQgaXNFeHBsaWNpdFBhdGggKGNvbnN0IGNoYXIgKnBhdGgpOworCitleHRlcm4gY2hhciAqam9pblBhdGggKGNvbnN0IGNoYXIgKmNvbnN0ICpjb21wb25lbnRzLCB1bnNpZ25lZCBpbnQgY291bnQpOworZXh0ZXJuIGNoYXIgKm1ha2VQYXRoIChjb25zdCBjaGFyICpkaXJlY3RvcnksIGNvbnN0IGNoYXIgKmZpbGUpOworCitleHRlcm4gaW50IGhhc0ZpbGVFeHRlbnNpb24gKGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IGNoYXIgKmV4dGVuc2lvbik7CitleHRlcm4gY2hhciAqcmVwbGFjZUZpbGVFeHRlbnNpb24gKGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IGNoYXIgKmV4dGVuc2lvbik7CitleHRlcm4gY2hhciAqZW5zdXJlRmlsZUV4dGVuc2lvbiAoY29uc3QgY2hhciAqcGF0aCwgY29uc3QgY2hhciAqZXh0ZW5zaW9uKTsKK2V4dGVybiBjaGFyICptYWtlRmlsZVBhdGggKGNvbnN0IGNoYXIgKmRpcmVjdG9yeSwgY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqZXh0ZW5zaW9uKTsKKworZXh0ZXJuIGludCB0ZXN0UGF0aCAoY29uc3QgY2hhciAqcGF0aCk7CitleHRlcm4gaW50IHRlc3RGaWxlUGF0aCAoY29uc3QgY2hhciAqcGF0aCk7CitleHRlcm4gaW50IHRlc3RQcm9ncmFtUGF0aCAoY29uc3QgY2hhciAqcGF0aCk7CitleHRlcm4gaW50IHRlc3REaXJlY3RvcnlQYXRoIChjb25zdCBjaGFyICpwYXRoKTsKKworZXh0ZXJuIHZvaWQgbG9ja1VtYXNrICh2b2lkKTsKK2V4dGVybiB2b2lkIHVubG9ja1VtYXNrICh2b2lkKTsKKworZXh0ZXJuIGludCBjcmVhdGVEaXJlY3RvcnkgKGNvbnN0IGNoYXIgKnBhdGgsIGludCB3b3JsZFdyaXRhYmxlKTsKK2V4dGVybiBpbnQgZW5zdXJlRGlyZWN0b3J5IChjb25zdCBjaGFyICpwYXRoLCBpbnQgd29ybGRXcml0YWJsZSk7CitleHRlcm4gaW50IGVuc3VyZVBhdGhEaXJlY3RvcnkgKGNvbnN0IGNoYXIgKnBhdGgpOworCitleHRlcm4gdm9pZCBzZXRVcGRhdGFibGVEaXJlY3RvcnkgKGNvbnN0IGNoYXIgKmRpcmVjdG9yeSk7CitleHRlcm4gY29uc3QgY2hhciAqZ2V0VXBkYXRhYmxlRGlyZWN0b3J5ICh2b2lkKTsKK2V4dGVybiBjaGFyICptYWtlVXBkYXRhYmxlUGF0aCAoY29uc3QgY2hhciAqZmlsZSk7CisKK2V4dGVybiB2b2lkIHNldFdyaXRhYmxlRGlyZWN0b3J5IChjb25zdCBjaGFyICpkaXJlY3RvcnkpOworZXh0ZXJuIGNvbnN0IGNoYXIgKmdldFdyaXRhYmxlRGlyZWN0b3J5ICh2b2lkKTsKK2V4dGVybiBjaGFyICptYWtlV3JpdGFibGVQYXRoIChjb25zdCBjaGFyICpmaWxlKTsKKworZXh0ZXJuIGNoYXIgKmdldFdvcmtpbmdEaXJlY3RvcnkgKHZvaWQpOworZXh0ZXJuIGludCBzZXRXb3JraW5nRGlyZWN0b3J5IChjb25zdCBjaGFyICpwYXRoKTsKKworZXh0ZXJuIGNoYXIgKmdldEhvbWVEaXJlY3RvcnkgKHZvaWQpOworCitleHRlcm4gY29uc3QgY2hhciAqY29uc3QgKmdldEFsbE92ZXJyaWRlRGlyZWN0b3JpZXMgKHZvaWQpOworZXh0ZXJuIGNvbnN0IGNoYXIgKmdldFByaW1hcnlPdmVycmlkZURpcmVjdG9yeSAodm9pZCk7CitleHRlcm4gdm9pZCBmb3JnZXRPdmVycmlkZURpcmVjdG9yaWVzICh2b2lkKTsKKworZXh0ZXJuIGludCBhY3F1aXJlRmlsZUxvY2sgKGludCBmaWxlLCBpbnQgZXhjbHVzaXZlKTsKK2V4dGVybiBpbnQgYXR0ZW1wdEZpbGVMb2NrIChpbnQgZmlsZSwgaW50IGV4Y2x1c2l2ZSk7CitleHRlcm4gaW50IHJlbGVhc2VGaWxlTG9jayAoaW50IGZpbGUpOworCitleHRlcm4gdm9pZCByZWdpc3RlclByb2dyYW1TdHJlYW0gKGNvbnN0IGNoYXIgKm5hbWUsIEZJTEUgKipzdHJlYW0pOworCitleHRlcm4gRklMRSAqb3BlbkZpbGUgKGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IGNoYXIgKm1vZGUsIGludCBvcHRpb25hbCk7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgdm9pZCAqZGF0YTsKKworICBzdHJ1Y3QgeworICAgIGNoYXIgKnRleHQ7CisgICAgc2l6ZV90IGxlbmd0aDsKKyAgICB1bnNpZ25lZCBpbnQgbnVtYmVyOworICB9IGxpbmU7Cit9IExpbmVIYW5kbGVyUGFyYW1ldGVyczsKKwordHlwZWRlZiBpbnQgTGluZUhhbmRsZXIgKGNvbnN0IExpbmVIYW5kbGVyUGFyYW1ldGVycyAqcGFyYW1ldGVycyk7CitleHRlcm4gaW50IHByb2Nlc3NMaW5lcyAoRklMRSAqZmlsZSwgTGluZUhhbmRsZXIgaGFuZGxlTGluZSwgdm9pZCAqZGF0YSk7CitleHRlcm4gaW50IHJlYWRMaW5lIChGSUxFICpmaWxlLCBjaGFyICoqYnVmZmVyLCBzaXplX3QgKnNpemUsIHNpemVfdCAqbGVuZ3RoKTsKKworZXh0ZXJuIFNUUl9ERUNMQVJFX0ZPUk1BVFRFUihmb3JtYXRJbnB1dEVycm9yLCBjb25zdCBjaGFyICpmaWxlLCBjb25zdCBpbnQgKmxpbmUsIGNvbnN0IGNoYXIgKmZvcm1hdCwgdmFfbGlzdCBhcmd1bWVudHMpOworCitleHRlcm4gdm9pZCBkZXRhY2hTdGFuZGFyZElucHV0KHZvaWQpOworZXh0ZXJuIHZvaWQgZGV0YWNoU3RhbmRhcmRPdXRwdXQodm9pZCk7CitleHRlcm4gdm9pZCBkZXRhY2hTdGFuZGFyZEVycm9yKHZvaWQpOworZXh0ZXJuIHZvaWQgZGV0YWNoU3RhbmRhcmRTdHJlYW1zKHZvaWQpOworCitleHRlcm4gc3NpemVfdCByZWFkRmlsZURlc2NyaXB0b3IgKEZpbGVEZXNjcmlwdG9yIGZpbGVEZXNjcmlwdG9yLCB2b2lkICpidWZmZXIsIHNpemVfdCBzaXplKTsKK2V4dGVybiBzc2l6ZV90IHdyaXRlRmlsZURlc2NyaXB0b3IgKEZpbGVEZXNjcmlwdG9yIGZpbGVEZXNjcmlwdG9yLCBjb25zdCB2b2lkICpidWZmZXIsIHNpemVfdCBzaXplKTsKKworI2lmZGVmIEdPVF9TT0NLRVRTCitleHRlcm4gc3NpemVfdCByZWFkU29ja2V0RGVzY3JpcHRvciAoU29ja2V0RGVzY3JpcHRvciBzb2NrZXREZXNjcmlwdG9yLCB2b2lkICpidWZmZXIsIHNpemVfdCBzaXplKTsKK2V4dGVybiBzc2l6ZV90IHdyaXRlU29ja2V0RGVzY3JpcHRvciAoU29ja2V0RGVzY3JpcHRvciBzb2NrZXREZXNjcmlwdG9yLCBjb25zdCB2b2lkICpidWZmZXIsIHNpemVfdCBzaXplKTsKKyNlbmRpZiAvKiBHT1RfU09DS0VUUyAqLworCitleHRlcm4gaW50IGdldENvbnNvbGVTaXplIChzaXplX3QgKndpZHRoLCBzaXplX3QgKmhlaWdodCk7CitleHRlcm4gY29uc3QgY2hhciAqZ2V0Q29uc29sZUVuY29kaW5nICh2b2lkKTsKK2V4dGVybiB2b2lkIHdyaXRlV2l0aENvbnNvbGVFbmNvZGluZyAoRklMRSAqc3RyZWFtLCBjb25zdCBjaGFyICpieXRlcywgc2l6ZV90IGNvdW50KTsKKworZXh0ZXJuIGNvbnN0IGNoYXIgKmdldE5hbWVkUGlwZURpcmVjdG9yeSAodm9pZCk7CitleHRlcm4gaW50IGNyZWF0ZUFub255bW91c1BpcGUgKEZpbGVEZXNjcmlwdG9yICpwaXBlSW5wdXQsIEZpbGVEZXNjcmlwdG9yICpwaXBlT3V0cHV0KTsKKworZXh0ZXJuIGNoYXIgKnJlYWRTeW1ib2xpY0xpbmsgKGNvbnN0IGNoYXIgKnBhdGgpOworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZiAvKiBfX2NwbHVzcGx1cyAqLworCisjZW5kaWYgLyogQlJMVFRZX0lOQ0xVREVEX0ZJTEUgKi8KZGlmZiAtLWdpdCBhL0hlYWRlcnMvZm0uaCBiL0hlYWRlcnMvZm0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42N2ExOTI2Ci0tLSAvZGV2L251bGwKKysrIGIvSGVhZGVycy9mbS5oCkBAIC0wLDAgKzEsNDAgQEAKKy8qCisgKiBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorICogICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorICoKKyAqIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorICoKKyAqIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyAqLworCisjaWZuZGVmIEJSTFRUWV9JTkNMVURFRF9GTQorI2RlZmluZSBCUkxUVFlfSU5DTFVERURfRk0KKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZiAvKiBfX2NwbHVzcGx1cyAqLworCitleHRlcm4gaW50IGZtRW5hYmxlUG9ydHMgKGludCBlcnJvckxldmVsKTsKK2V4dGVybiB2b2lkIGZtRGlzYWJsZVBvcnRzICh2b2lkKTsKKworZXh0ZXJuIGludCBmbVRlc3RDYXJkIChpbnQgZXJyb3JMZXZlbCk7CitleHRlcm4gdm9pZCBmbVJlc2V0Q2FyZCAodm9pZCk7CisKK2V4dGVybiB2b2lkIGZtUGxheVRvbmUgKGludCBjaGFubmVsLCB1bnNpZ25lZCBpbnQgcGl0Y2gsIHVuc2lnbmVkIGxvbmcgaW50IGR1cmF0aW9uLCB1bnNpZ25lZCBpbnQgdm9sdW1lKTsKK2V4dGVybiB2b2lkIGZtU3RhcnRUb25lIChpbnQgY2hhbm5lbCwgaW50IHBpdGNoKTsKK2V4dGVybiB2b2lkIGZtU3RvcFRvbmUgKGludCBjaGFubmVsKTsKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYgLyogX19jcGx1c3BsdXMgKi8KKworI2VuZGlmIC8qIEJSTFRUWV9JTkNMVURFRF9GTSAqLwpkaWZmIC0tZ2l0IGEvSGVhZGVycy9mbV9hZGxpYi5oIGIvSGVhZGVycy9mbV9hZGxpYi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNjMTAzYWQKLS0tIC9kZXYvbnVsbAorKysgYi9IZWFkZXJzL2ZtX2FkbGliLmgKQEAgLTAsMCArMSwxMzggQEAKKy8qCisgKiBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorICogICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorICoKKyAqIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorICoKKyAqIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyAqLworCisjaWZuZGVmIEJSTFRUWV9JTkNMVURFRF9GTV9BRExJQgorI2RlZmluZSBCUkxUVFlfSU5DTFVERURfRk1fQURMSUIKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZiAvKiBfX2NwbHVzcGx1cyAqLworCisvKgorICogTWlzY2VsbGFuZW91cyBGTSBjaGlwIHNvdW5kY2FyZCByb3V0aW5lcyBmb3IgQlJMVFRZLgorICogSW1wbGVtZW50ZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyAqIE1ldGhvZCBnbGVhbmVkIGZyb20gc2NjdywgYSBtb3JzZSBjb2RlIHByb2dyYW0gd3JpdHRlbgorICogYnkgU3RldmVuIEouIE1lcnJpZmllbGQgPHNqbUBlZS5sYXRyb2JlLmVkdS5hdT4gKFZLM0VTTSkuCisgKiBNdXN0IGNvbXBpbGUgd2l0aCAtTzIuCisgKiBNdXN0IGxpbmsgd2l0aCAtbG0uCisgKiBNYXkgY29tcGlsZSB3aXRoIC1EREVCVUdfQURMSUIuCisgKi8KKworZXh0ZXJuIHZvaWQgQUxfd3JpdGVSZWdpc3RlciAoaW50IG51bWJlciwgdW5zaWduZWQgY2hhciBkYXRhKTsKK2V4dGVybiB1bnNpZ25lZCBjaGFyIEFMX3JlYWRTdGF0dXMgKHZvaWQpOworCisvKiBJL08gcG9ydHMuICovCisjZGVmaW5lIEFMUF9SRUdJU1RFUiAwWDM4OCAvKiBmb3Igd3JpdGluZyB0aGUgcmVnaXN0ZXIgbnVtYmVyICovCisjZGVmaW5lIEFMUF9EQVRBIChBTFBfUkVHSVNURVIgKyAxKSAvKiBmb3Igd3JpdGluZyBkYXRhIHRvIHRoZSBzZWxlY3RlZCByZWdpc3RlciAqLworI2RlZmluZSBBTFBfU1RBVFVTIEFMUF9SRUdJU1RFUiAvKiBmb3IgcmVhZGluZyB0aGUgc3RhdHVzIG9mIHRoZSBjYXJkICovCisKKy8qIFN0YXR1cyByZWdpc3RlciBiaXRzLiAqLworI2RlZmluZSBBTF9TVEFUX0VYUCAwWDgwIC8qIGEgdGltZXIgaGFzIGV4cGlyZWQgKi8KKyNkZWZpbmUgQUxfU1RBVF9FWFAxIDBYNDAgLyogdGltZXIgMSBoYXMgZXhwaXJlZCAqLworI2RlZmluZSBBTF9TVEFUX0VYUDIgMFgyMCAvKiB0aW1lciAyIGhhcyBleHBpcmVkICovCisKKyNkZWZpbmUgQUxSX0ZJUlNUIDBYMDEKKyNkZWZpbmUgQUxSX0xBU1QgMFhGNQorCisjZGVmaW5lIEFMUl9JTklUIDBYMDEKKyNkZWZpbmUgQUxSX1QxREFUQSAwWDAyCisjZGVmaW5lIEFMUl9UMkRBVEEgMFgwMworI2RlZmluZSBBTFJfVENUTCAwWDA0CisKKyNkZWZpbmUgQUxfSU5JVF9XRlNMQ1QgMHgyMCAvKiB3YXZlIGZvcm0gc2VsZWN0ICovCisKKyNkZWZpbmUgQUxfVENUTF9SRVNFVCAwWDgwCisjZGVmaW5lIEFMX1RDVExfVDFNQVNLIDBYNDAKKyNkZWZpbmUgQUxfVENUTF9UMk1BU0sgMFgyMAorI2RlZmluZSBBTF9UQ1RMX1QyU1RBUlQgMFgwMgorI2RlZmluZSBBTF9UQ1RMX1QxU1RBUlQgMFgwMQorCitleHRlcm4gY29uc3QgdW5zaWduZWQgY2hhciBBTF9jaGFubmVsT2Zmc2V0c1tdOworZXh0ZXJuIGNvbnN0IHVuc2lnbmVkIGNoYXIgQUxfY2hhbm5lbENvdW50OworI2RlZmluZSBBTFJfTU9EVUxBVE9SKGdyb3VwLGNoYW5uZWwpICgoZ3JvdXApICsgQUxfY2hhbm5lbE9mZnNldHNbKGNoYW5uZWwpXSkKKyNkZWZpbmUgQUxSX0NBUlJJRVIoZ3JvdXAsY2hhbm5lbCkgKEFMUl9NT0RVTEFUT1IoKGdyb3VwKSwoY2hhbm5lbCkpICsgMykKKworI2RlZmluZSBBTEdfRUZGRUNUIDBYMjAKKyNkZWZpbmUgQUxfRUZDVF9BTVBMTU9EIDBYODAgLyogYXBwbHkgYW1wbGl0dWRlIG1vZHVsYXRpb24gKi8KKyNkZWZpbmUgQUxfRUZDVF9WSUJSQVRPIDBYNDAgLyogYXBwbHkgdmlicmF0byAqLworI2RlZmluZSBBTF9FRkNUX1NVU1RBSU4gMFgyMCAvKiBkbyBub3QgcmVsZWFzZSAqLworI2RlZmluZSBBTF9FRkNUX0tTUiAgICAgMFgxMCAvKiBrZXlib2FyZCBzY2FsaW5nIHJhdGUgKGZhc3RlciBkZWNheSBhdCBoaWdoZXIgZnJlcSkgKi8KKyNkZWZpbmUgQUxfSEFSTU9OSUNfU0hJRlQgMAorI2RlZmluZSBBTF9TVUJIQVJNT05JQ18xICAwWDAwIC8qIDEgb2N0YXZlIGxvd2VyICovCisjZGVmaW5lIEFMX0hBUk1PTklDXzEgICAgIDBYMDEgLyogdGhlIHNwZWNpZmllZCBmcmVxdWVuY3kgKi8KKyNkZWZpbmUgQUxfSEFSTU9OSUNfMiAgICAgMFgwMiAvKiAxIG9jdGF2ZSBoaWdoZXIgKi8KKyNkZWZpbmUgQUxfSEFSTU9OSUNfMyAgICAgMFgwMyAvKiAxIG9jdGF2ZSBhbmQgYSA1dGggaGlnaGVyICovCisjZGVmaW5lIEFMX0hBUk1PTklDXzQgICAgIDBYMDQgLyogMiBvY3RhdmVzIGhpZ2hlciAqLworI2RlZmluZSBBTF9IQVJNT05JQ181ICAgICAwWDA1IC8qIDIgb2N0YXZlcyBhbmQgYSAzcmQgaGlnaGVyICovCisjZGVmaW5lIEFMX0hBUk1PTklDXzYgICAgIDBYMDYgLyogMiBvY3RhdmVzIGFuZCBhIDV0aCBoaWdoZXIgKi8KKyNkZWZpbmUgQUxfSEFSTU9OSUNfNyAgICAgMFgwNyAvKiAyIG9jdGF2ZXMgYW5kIGEgZGltaW5pc2hlZCA3dGggaGlnaGVyICovCisjZGVmaW5lIEFMX0hBUk1PTklDXzggICAgIDBYMDggLyogMyBvY3RhdmVzIGhpZ2hlciAqLworI2RlZmluZSBBTF9IQVJNT05JQ185ICAgICAwWDA5IC8qIDMgb2N0YXZlcyBhbmQgYSAybmQgaGlnaGVyICovCisjZGVmaW5lIEFMX0hBUk1PTklDXzEwICAgIDBYMEEgLyogMyBvY3RhdmVzIGFuZCBhIDNyZCBoaWdoZXIgKi8KKyNkZWZpbmUgQUxfSEFSTU9OSUNfMTEgICAgMFgwQiAvKiAzIG9jdGF2ZXMgYW5kID8gaGlnaGVyICovCisjZGVmaW5lIEFMX0hBUk1PTklDXzEyICAgIDBYMEMgLyogMyBvY3RhdmVzIGFuZCBhIDV0aCBoaWdoZXIgKi8KKyNkZWZpbmUgQUxfSEFSTU9OSUNfMTMgICAgMFgwRCAvKiAzIG9jdGF2ZXMgYW5kID8gaGlnaGVyICovCisjZGVmaW5lIEFMX0hBUk1PTklDXzE0ICAgIDBYMEUgLyogMyBvY3RhdmVzIGFuZCBhIGRpbWluaXNoZWQgN3RoIGhpZ2hlciAqLworI2RlZmluZSBBTF9IQVJNT05JQ18xNSAgICAwWDBGIC8qIDMgb2N0YXZlcyBhbmQgPyBoaWdoZXIgKi8KKworI2RlZmluZSBBTEdfTEVWRUwgMFg0MAorI2RlZmluZSBBTF9MS1NfU0hJRlQgNiAvKiBsZXZlbCBrZXkgc2NhbGluZyAoc29mdGVyIGF0IGhpZ2hlciBmcmVxKSAqLworI2RlZmluZSBBTF9MS1NfMCAgIDBYMDAgLyogMCBkQiBwZXIgb2N0YXZlICovCisjZGVmaW5lIEFMX0xLU18xcDUgMFgwMiAvKiAxLjUgZEIgcGVyIG9jdGF2ZSAqLworI2RlZmluZSBBTF9MS1NfMyAgIDBYMDEgLyogMyBkQiBwZXIgb2N0YXZlICovCisjZGVmaW5lIEFMX0xLU182ICAgMFgwMyAvKiA2IGRCIHBlciBvY3RhdmUgKi8KKyNkZWZpbmUgQUxfVk9MVU1FX1NISUZUIDAgLyogZWFjaCBiaXQgYXR0ZW51YXRlcyBieSBzcGVjaWZpYyBhbW91bnQgKi8KKyNkZWZpbmUgQUxfVk9MVU1FXzI0ICAgMFgyMCAvKiAyNCBkQiAqLworI2RlZmluZSBBTF9WT0xVTUVfMTIgICAwWDEwIC8qIDEyIGRCICovCisjZGVmaW5lIEFMX1ZPTFVNRV82ICAgIDBYMDggLyogNiBkQiAqLworI2RlZmluZSBBTF9WT0xVTUVfMyAgICAwWDA0IC8qIDMgZEIgKi8KKyNkZWZpbmUgQUxfVk9MVU1FXzFwNSAgMFgwMiAvKiAxLjUgZEIgKi8KKyNkZWZpbmUgQUxfVk9MVU1FXzBwNzUgMFgwMSAvKiAwLjc1IGRCICovCisjZGVmaW5lIEFMX1ZPTFVNRV9MT1VEIDBYMDAgLyogbG91ZGVzdCAobm8gYXR0ZW51YXRpb24pICovCisjZGVmaW5lIEFMX1ZPTFVNRV9TT0ZUIDBYM0YgLyogc29mdGVzdCAoNDcuMjUgZEIgYXR0ZW51YXRpb24pICovCisKKyNkZWZpbmUgQUxHX0FUVERFQyAwWDYwCisjZGVmaW5lIEFMX0FUVEFDS19TSElGVCA0CisjZGVmaW5lIEFMX0FUVEFDS19TTE9XIDBYMAorI2RlZmluZSBBTF9BVFRBQ0tfRkFTVCAwWEYKKyNkZWZpbmUgQUxfREVDQVlfU0hJRlQgMAorI2RlZmluZSBBTF9ERUNBWV9TTE9XIDBYMAorI2RlZmluZSBBTF9ERUNBWV9GQVNUIDBYRgorCisjZGVmaW5lIEFMR19TVVNSRUwgMFg4MAorI2RlZmluZSBBTF9TVVNUQUlOX1NISUZUIDQKKyNkZWZpbmUgQUxfU1VTVEFJTl8yNCAgIDBYOCAvKiBhZnRlciAyNCBkQiBkZWNheSAqLworI2RlZmluZSBBTF9TVVNUQUlOXzEyICAgMFg0IC8qIGFmdGVyIDEyIGRCIGRlY2F5ICovCisjZGVmaW5lIEFMX1NVU1RBSU5fNiAgICAwWDIgLyogYWZ0ZXIgNiBkQiBkZWNheSAqLworI2RlZmluZSBBTF9TVVNUQUlOXzMgICAgMFgxIC8qIGFmdGVyIDMgZEIgZGVjYXkgKi8KKyNkZWZpbmUgQUxfU1VTVEFJTl9MT1VEIDBYMCAvKiB0aGUgbG91ZGVzdCAocmlnaHQgYWZ0ZXIgYXR0YWNrKSAqLworI2RlZmluZSBBTF9TVVNUQUlOX1NPRlQgMFhGIC8qIHRoZSBzb2Z0ZXN0IChhZnRlciA0NSBkQiBkZWNheSkgKi8KKyNkZWZpbmUgQUxfUkVMRUFTRV9TSElGVCAwCisjZGVmaW5lIEFMX1JFTEVBU0VfU0xPVyAwWDAKKyNkZWZpbmUgQUxfUkVMRUFTRV9GQVNUIDBYRgorCisjZGVmaW5lIEFMUl9GUkVRVUVOQ1lfTFNCKGNoYW5uZWwpICgwWEEwICsgKGNoYW5uZWwpKQorI2RlZmluZSBBTFJfRlJFUVVFTkNZX01TQihjaGFubmVsKSAoMFhCMCArIChjaGFubmVsKSkKKyNkZWZpbmUgQUxfT0NUQVZFX1NISUZUIDIKKyNkZWZpbmUgQUxfRlJFUV9PTiAwWDIwCisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmIC8qIF9fY3BsdXNwbHVzICovCisKKyNlbmRpZiAvKiBCUkxUVFlfSU5DTFVERURfRk1fQURMSUIgKi8KZGlmZiAtLWdpdCBhL0hlYWRlcnMvZ2V0X2N1cnNlcy5oIGIvSGVhZGVycy9nZXRfY3Vyc2VzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzE0ODg5NAotLS0gL2Rldi9udWxsCisrKyBiL0hlYWRlcnMvZ2V0X2N1cnNlcy5oCkBAIC0wLDAgKzEsNjUgQEAKKy8qCisgKiBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorICogICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorICoKKyAqIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorICoKKyAqIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyAqLworCisjaWZuZGVmIEJSTFRUWV9JTkNMVURFRF9HRVRfQ1VSU0VTCisjZGVmaW5lIEJSTFRUWV9JTkNMVURFRF9HRVRfQ1VSU0VTCisKKyNpbmNsdWRlICJwcm9sb2d1ZS5oIgorI3VuZGVmIEdPVF9DVVJTRVMKKyN1bmRlZiBHT1RfQ1VSU0VTX1dDSAorCisjaWYgZGVmaW5lZChIQVZFX1BLR19DVVJTRVMpCisjZGVmaW5lIEdPVF9DVVJTRVMKKyNpbmNsdWRlIDxjdXJzZXMuaD4KKworI2VsaWYgZGVmaW5lZChIQVZFX1BLR19OQ1VSU0VTKQorI2RlZmluZSBHT1RfQ1VSU0VTCisjaW5jbHVkZSA8bmN1cnNlcy5oPgorCisjZWxpZiBkZWZpbmVkKEhBVkVfUEtHX05DVVJTRVNXKQorI2RlZmluZSBHT1RfQ1VSU0VTCisjZGVmaW5lIEdPVF9DVVJTRVNfV0NICisjaW5jbHVkZSA8bmN1cnNlc3cvbmN1cnNlcy5oPgorCisjZWxpZiBkZWZpbmVkKEhBVkVfUEtHX1BEQ1VSU0VTKQorI2RlZmluZSBHT1RfQ1VSU0VTCisjaW5jbHVkZSA8Y3Vyc2VzLmg+CisKKyNlbGlmIGRlZmluZWQoSEFWRV9QS0dfUERDVVJTRVNVKQorI2RlZmluZSBHT1RfQ1VSU0VTCisjaW5jbHVkZSA8Y3Vyc2VzLmg+CisKKyNlbGlmIGRlZmluZWQoSEFWRV9QS0dfUERDVVJTRVNXKQorI2RlZmluZSBHT1RfQ1VSU0VTCisjZGVmaW5lIEdPVF9DVVJTRVNfV0NICisjZGVmaW5lIFBEQ19XSURFCisjaW5jbHVkZSA8Y3Vyc2VzLmg+CisKKyNlbHNlIC8qIGN1cnNlcyBwYWNrYWdlICovCisjd2FybmluZyBjdXJzZXMgcGFja2FnZSBlaXRoZXIgdW5zcGVjaWZpZWQgb3IgdW5zdXBwb3J0ZWQKKyNlbmRpZiAvKiBjdXJzZXMgcGFja2FnZSAqLworCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmIC8qIF9fY3BsdXNwbHVzICovCisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmIC8qIF9fY3BsdXNwbHVzICovCisKKyNlbmRpZiAvKiBCUkxUVFlfSU5DTFVERURfR0VUX0NVUlNFUyAqLwpkaWZmIC0tZ2l0IGEvSGVhZGVycy9nZXRfc2VsZWN0LmggYi9IZWFkZXJzL2dldF9zZWxlY3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYmUyY2IwCi0tLSAvZGV2L251bGwKKysrIGIvSGVhZGVycy9nZXRfc2VsZWN0LmgKQEAgLTAsMCArMSw0MyBAQAorLyoKKyAqIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisgKiAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisgKgorICogQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKKyNpZm5kZWYgQlJMVFRZX0lOQ0xVREVEX0dFVF9TRUxFQ1QKKyNkZWZpbmUgQlJMVFRZX0lOQ0xVREVEX0dFVF9TRUxFQ1QKKworI2luY2x1ZGUgInByb2xvZ3VlLmgiCisjdW5kZWYgR09UX1NFTEVDVAorCisjaWZkZWYgSEFWRV9TRUxFQ1QKKyNkZWZpbmUgR09UX1NFTEVDVAorCisjaWZkZWYgSEFWRV9TWVNfU0VMRUNUX0gKKyNpbmNsdWRlIDxzeXMvc2VsZWN0Lmg+CisjZWxzZSAvKiBIQVZFX1NZU19TRUxFQ1RfSCAqLworI2luY2x1ZGUgPHN5cy90aW1lLmg+CisjZW5kaWYgLyogSEFWRV9TWVNfU0VMRUNUX0ggKi8KKyNlbmRpZiAvKiBIQVZFX1NFTEVDVCAqLworCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmIC8qIF9fY3BsdXNwbHVzICovCisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmIC8qIF9fY3BsdXNwbHVzICovCisKKyNlbmRpZiAvKiBCUkxUVFlfSU5DTFVERURfR0VUX1NFTEVDVCAqLwpkaWZmIC0tZ2l0IGEvSGVhZGVycy9nZXRfc29ja2V0cy5oIGIvSGVhZGVycy9nZXRfc29ja2V0cy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY5M2U2Y2YKLS0tIC9kZXYvbnVsbAorKysgYi9IZWFkZXJzL2dldF9zb2NrZXRzLmgKQEAgLTAsMCArMSw1MCBAQAorLyoKKyAqIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisgKiAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisgKgorICogQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKKyNpZm5kZWYgQlJMVFRZX0lOQ0xVREVEX0dFVF9TT0NLRVRTCisjZGVmaW5lIEJSTFRUWV9JTkNMVURFRF9HRVRfU09DS0VUUworCisjaW5jbHVkZSAicHJvbG9ndWUuaCIKKyN1bmRlZiBHT1RfU09DS0VUUworCisjaWYgZGVmaW5lZChIQVZFX1NZU19TT0NLRVRfSCkKKyNkZWZpbmUgR09UX1NPQ0tFVFMKKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisKKyNlbGlmIGRlZmluZWQoX19NSU5HVzMyX18pCisjZGVmaW5lIEdPVF9TT0NLRVRTCisKK3R5cGVkZWYgaW50IHNvY2tsZW5fdDsKKworI2lmbmRlZiBFSU5QUk9HUkVTUworI2lmZGVmIFdTQUVJTlBST0dSRVNTCisjZGVmaW5lIEVJTlBST0dSRVNTIFdTQUVJTlBST0dSRVNTCisjZW5kaWYgLyogV1NBRUlOUFJPR1JFU1MgKi8KKyNlbmRpZiAvKiBFSU5QUk9HUkVTUyAqLworCisjZW5kaWYgLyogaGF2ZSBzb2NrZXRzICovCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYgLyogX19jcGx1c3BsdXMgKi8KKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYgLyogX19jcGx1c3BsdXMgKi8KKworI2VuZGlmIC8qIEJSTFRUWV9JTkNMVURFRF9HRVRfU09DS0VUUyAqLwpkaWZmIC0tZ2l0IGEvSGVhZGVycy9nZXRfdGhyZWFkLmggYi9IZWFkZXJzL2dldF90aHJlYWQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMjNlY2M2Ci0tLSAvZGV2L251bGwKKysrIGIvSGVhZGVycy9nZXRfdGhyZWFkLmgKQEAgLTAsMCArMSw0MyBAQAorLyoKKyAqIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisgKiAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisgKgorICogQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKKyNpZm5kZWYgQlJMVFRZX0lOQ0xVREVEX0dFVF9USFJFQUQKKyNkZWZpbmUgQlJMVFRZX0lOQ0xVREVEX0dFVF9USFJFQUQKKworI2luY2x1ZGUgInByb2xvZ3VlLmgiCisjdW5kZWYgR09UX1BUSFJFQURTCisKKyNpZiBkZWZpbmVkKF9fTUlOR1czMl9fKQorI2RlZmluZSBHT1RfUFRIUkVBRFMKKyNpbmNsdWRlICJ3aW5fcHRocmVhZC5oIgorCisjZWxpZiBkZWZpbmVkKEhBVkVfUE9TSVhfVEhSRUFEUykKKyNkZWZpbmUgR09UX1BUSFJFQURTCisjaW5jbHVkZSA8cHRocmVhZC5oPgorCisjZW5kaWYgLyogcG9zaXggdGhyZWFkIGRlZmluaXRpb25zICovCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYgLyogX19jcGx1c3BsdXMgKi8KKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYgLyogX19jcGx1c3BsdXMgKi8KKworI2VuZGlmIC8qIEJSTFRUWV9JTkNMVURFRF9HRVRfVEhSRUFEICovCmRpZmYgLS1naXQgYS9IZWFkZXJzL2dldHRpbWUuaCBiL0hlYWRlcnMvZ2V0dGltZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc2ODhmNzQKLS0tIC9kZXYvbnVsbAorKysgYi9IZWFkZXJzL2dldHRpbWUuaApAQCAtMCwwICsxLDU2IEBACisvKgorICogQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyAqICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyAqCisgKiBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorICoKKyAqIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyAqCisgKiBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisgKi8KKworI2lmbmRlZiBCUkxUVFlfSU5DTFVERURfR0VUVElNRQorI2RlZmluZSBCUkxUVFlfSU5DTFVERURfR0VUVElNRQorCisjaW5jbHVkZSAicHJvbG9ndWUuaCIKKyNpbmNsdWRlIDxzeXMvdGltZS5oPgorCisjaWZkZWYgSEFWRV9DTE9DS19HRVRUSU1FCisjaW5jbHVkZSA8dGltZS5oPgorI2VuZGlmIC8qIEhBVkVfQ0xPQ0tfR0VUVElNRSAqLworCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmIC8qIF9fY3BsdXNwbHVzICovCisKK3N0YXRpYyBpbmxpbmUgaW50CitnZXRSZWFsVGltZSAoc3RydWN0IHRpbWV2YWwgKm5vdykgeworICBpbnQgcmVzdWx0OworCisjaWYgZGVmaW5lZChIQVZFX0NMT0NLX0dFVFRJTUUpICYmICFkZWZpbmVkKF9fTUlOR1czMl9fKQorICBzdHJ1Y3QgdGltZXNwZWMgdGltZTsKKyAgcmVzdWx0ID0gY2xvY2tfZ2V0dGltZShDTE9DS19SRUFMVElNRSwgJnRpbWUpOworICBub3ctPnR2X3NlYyA9IHRpbWUudHZfc2VjOworICBub3ctPnR2X3VzZWMgPSB0aW1lLnR2X25zZWMgLyAxMDAwOworI2Vsc2UgLyogZ2V0UmVhbFRpbWUgKi8KKyNwcmFnbWEgR0NDIGRpYWdub3N0aWMgcHVzaAorI3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBpZ25vcmVkICItV2RlcHJlY2F0ZWQtZGVjbGFyYXRpb25zIgorICByZXN1bHQgPSBnZXR0aW1lb2ZkYXkobm93LCBOVUxMKTsKKyNwcmFnbWEgR0NDIGRpYWdub3N0aWMgcG9wCisjZW5kaWYgLyogZ2V0UmVhbFRpbWUgKi8KKworICByZXR1cm4gcmVzdWx0OworfQorCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZiAvKiBfX2NwbHVzcGx1cyAqLworCisjZW5kaWYgLyogQlJMVFRZX0lOQ0xVREVEX0dFVFRJTUUgKi8KZGlmZiAtLWdpdCBhL0hlYWRlcnMvZ2lvX3R5cGVzLmggYi9IZWFkZXJzL2dpb190eXBlcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU1ODMzYjAKLS0tIC9kZXYvbnVsbAorKysgYi9IZWFkZXJzL2dpb190eXBlcy5oCkBAIC0wLDAgKzEsMTIyIEBACisvKgorICogQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyAqICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyAqCisgKiBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorICoKKyAqIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyAqCisgKiBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisgKi8KKworI2lmbmRlZiBCUkxUVFlfSU5DTFVERURfR0lPX1RZUEVTCisjZGVmaW5lIEJSTFRUWV9JTkNMVURFRF9HSU9fVFlQRVMKKworI2luY2x1ZGUgInNlcmlhbF90eXBlcy5oIgorI2luY2x1ZGUgInVzYl90eXBlcy5oIgorI2luY2x1ZGUgImhpZF90eXBlcy5oIgorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmIC8qIF9fY3BsdXNwbHVzICovCisKK3R5cGVkZWYgc3NpemVfdCBHaW9Vc2JXcml0ZURhdGFNZXRob2QgKAorICBVc2JEZXZpY2UgKmRldmljZSwgY29uc3QgVXNiQ2hhbm5lbERlZmluaXRpb24gKmRlZmluaXRpb24sCisgIGNvbnN0IHZvaWQgKmRhdGEsIHNpemVfdCBzaXplLCBpbnQgdGltZW91dAorKTsKKwordHlwZWRlZiBpbnQgR2lvVXNiQXdhaXRJbnB1dE1ldGhvZCAoCisgIFVzYkRldmljZSAqZGV2aWNlLCBjb25zdCBVc2JDaGFubmVsRGVmaW5pdGlvbiAqZGVmaW5pdGlvbiwKKyAgaW50IHRpbWVvdXQKKyk7CisKK3R5cGVkZWYgc3NpemVfdCBHaW9Vc2JSZWFkRGF0YU1ldGhvZCAoCisgIFVzYkRldmljZSAqZGV2aWNlLCBjb25zdCBVc2JDaGFubmVsRGVmaW5pdGlvbiAqZGVmaW5pdGlvbiwKKyAgdm9pZCAqYnVmZmVyLCBzaXplX3Qgc2l6ZSwKKyAgaW50IGluaXRpYWxUaW1lb3V0LCBpbnQgc3Vic2VxdWVudFRpbWVvdXQKKyk7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgY29uc3Qgdm9pZCAqYXBwbGljYXRpb25EYXRhOworICBHaW9Vc2JXcml0ZURhdGFNZXRob2QgKndyaXRlRGF0YTsKKyAgR2lvVXNiQXdhaXRJbnB1dE1ldGhvZCAqYXdhaXRJbnB1dDsKKyAgR2lvVXNiUmVhZERhdGFNZXRob2QgKnJlYWREYXRhOworICBVc2JJbnB1dEZpbHRlciAqaW5wdXRGaWx0ZXI7Cit9IEdpb1VzYkNvbm5lY3Rpb25Qcm9wZXJ0aWVzOworCit0eXBlZGVmIHZvaWQgR2lvVXNiU2V0Q29ubmVjdGlvblByb3BlcnRpZXNNZXRob2QgKAorICBHaW9Vc2JDb25uZWN0aW9uUHJvcGVydGllcyAqcHJvcGVydGllcywKKyAgY29uc3QgVXNiQ2hhbm5lbERlZmluaXRpb24gKmRlZmluaXRpb24KKyk7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgY29uc3Qgdm9pZCAqYXBwbGljYXRpb25EYXRhOworICBpbnQgcmVhZHlEZWxheTsKKyAgaW50IGlucHV0VGltZW91dDsKKyAgaW50IG91dHB1dFRpbWVvdXQ7CisgIGludCByZXF1ZXN0VGltZW91dDsKKyAgdW5zaWduZWQgY2hhciBpZ25vcmVXcml0ZVRpbWVvdXRzIDogMTsKK30gR2lvT3B0aW9uczsKKwordHlwZWRlZiBzdHJ1Y3QgeworICBzdHJ1Y3QgeworICAgIGNvbnN0IFNlcmlhbFBhcmFtZXRlcnMgKnBhcmFtZXRlcnM7CisgICAgR2lvT3B0aW9ucyBvcHRpb25zOworICB9IHNlcmlhbDsKKworICBzdHJ1Y3QgeworICAgIGNvbnN0IFVzYkNoYW5uZWxEZWZpbml0aW9uICpjaGFubmVsRGVmaW5pdGlvbnM7CisgICAgR2lvVXNiU2V0Q29ubmVjdGlvblByb3BlcnRpZXNNZXRob2QgKnNldENvbm5lY3Rpb25Qcm9wZXJ0aWVzOworICAgIEdpb09wdGlvbnMgb3B0aW9uczsKKyAgfSB1c2I7CisKKyAgc3RydWN0IHsKKyAgICB1aW50OF90IGNoYW5uZWxOdW1iZXI7CisgICAgdW5zaWduZWQgY2hhciBkaXNjb3ZlckNoYW5uZWw6MTsKKyAgICBHaW9PcHRpb25zIG9wdGlvbnM7CisgIH0gYmx1ZXRvb3RoOworCisgIHN0cnVjdCB7CisgICAgY29uc3QgSGlkTW9kZWxFbnRyeSAqbW9kZWxUYWJsZTsKKyAgICBHaW9PcHRpb25zIG9wdGlvbnM7CisgIH0gaGlkOworCisgIHN0cnVjdCB7CisgICAgR2lvT3B0aW9ucyBvcHRpb25zOworICB9IG51bGw7Cit9IEdpb0Rlc2NyaXB0b3I7CisKK3R5cGVkZWYgc3RydWN0IEdpb0VuZHBvaW50U3RydWN0IEdpb0VuZHBvaW50OworCit0eXBlZGVmIGludCBHaW9UZXN0SWRlbnRpZmllck1ldGhvZCAoY29uc3QgY2hhciAqKmlkZW50aWZpZXIpOworCit0eXBlZGVmIGVudW0geworICBHSU9fVFlQRV9VTlNQRUNJRklFRCA9IDAsCisgIEdJT19UWVBFX1NFUklBTCwKKyAgR0lPX1RZUEVfVVNCLAorICBHSU9fVFlQRV9CTFVFVE9PVEgsCisgIEdJT19UWVBFX0hJRCwKKyAgR0lPX1RZUEVfTlVMTCwKK30gR2lvVHlwZUlkZW50aWZpZXI7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgR2lvVGVzdElkZW50aWZpZXJNZXRob2QgKnRlc3RJZGVudGlmaWVyOworCisgIHN0cnVjdCB7CisgICAgY29uc3QgY2hhciAqbmFtZTsKKyAgICBHaW9UeXBlSWRlbnRpZmllciBpZGVudGlmaWVyOworICB9IHR5cGU7Cit9IEdpb1B1YmxpY1Byb3BlcnRpZXM7CisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmIC8qIF9fY3BsdXNwbHVzICovCisKKyNlbmRpZiAvKiBCUkxUVFlfSU5DTFVERURfR0lPX1RZUEVTICovCmRpZmYgLS1naXQgYS9IZWFkZXJzL2hpZF9icmFpbGxlLmggYi9IZWFkZXJzL2hpZF9icmFpbGxlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTE0ZmU0YwotLS0gL2Rldi9udWxsCisrKyBiL0hlYWRlcnMvaGlkX2JyYWlsbGUuaApAQCAtMCwwICsxLDMwIEBACisvKgorICogQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyAqICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyAqCisgKiBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorICoKKyAqIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyAqCisgKiBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisgKi8KKworI2lmbmRlZiBCUkxUVFlfSU5DTFVERURfSElEX0JSQUlMTEUKKyNkZWZpbmUgQlJMVFRZX0lOQ0xVREVEX0hJRF9CUkFJTExFCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYgLyogX19jcGx1c3BsdXMgKi8KKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYgLyogX19jcGx1c3BsdXMgKi8KKworI2VuZGlmIC8qIEJSTFRUWV9JTkNMVURFRF9ISURfQlJBSUxMRSAqLwpkaWZmIC0tZ2l0IGEvSGVhZGVycy9oaWRfZGVmcy5oIGIvSGVhZGVycy9oaWRfZGVmcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgxODZjZmYKLS0tIC9kZXYvbnVsbAorKysgYi9IZWFkZXJzL2hpZF9kZWZzLmgKQEAgLTAsMCArMSw1OTMgQEAKKy8qCisgKiBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorICogICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorICoKKyAqIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorICoKKyAqIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyAqLworCisjaWZuZGVmIEJSTFRUWV9JTkNMVURFRF9ISURfREVGUworI2RlZmluZSBCUkxUVFlfSU5DTFVERURfSElEX0RFRlMKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZiAvKiBfX2NwbHVzcGx1cyAqLworCit0eXBlZGVmIGVudW0geworICBISURfSVRNX1VzYWdlUGFnZSAgICAgICAgID0gMFgwNCwKKyAgSElEX0lUTV9Vc2FnZSAgICAgICAgICAgICA9IDBYMDgsCisgIEhJRF9JVE1fTG9naWNhbE1pbmltdW0gICAgPSAwWDE0LAorICBISURfSVRNX1VzYWdlTWluaW11bSAgICAgID0gMFgxOCwKKyAgSElEX0lUTV9Mb2dpY2FsTWF4aW11bSAgICA9IDBYMjQsCisgIEhJRF9JVE1fVXNhZ2VNYXhpbXVtICAgICAgPSAwWDI4LAorICBISURfSVRNX1BoeXNpY2FsTWluaW11bSAgID0gMFgzNCwKKyAgSElEX0lUTV9EZXNpZ25hdG9ySW5kZXggICA9IDBYMzgsCisgIEhJRF9JVE1fUGh5c2ljYWxNYXhpbXVtICAgPSAwWDQ0LAorICBISURfSVRNX0Rlc2lnbmF0b3JNaW5pbXVtID0gMFg0OCwKKyAgSElEX0lUTV9Vbml0RXhwb25lbnQgICAgICA9IDBYNTQsCisgIEhJRF9JVE1fRGVzaWduYXRvck1heGltdW0gPSAwWDU4LAorICBISURfSVRNX1VuaXQgICAgICAgICAgICAgID0gMFg2NCwKKyAgSElEX0lUTV9SZXBvcnRTaXplICAgICAgICA9IDBYNzQsCisgIEhJRF9JVE1fU3RyaW5nSW5kZXggICAgICAgPSAwWDc4LAorICBISURfSVRNX0lucHV0ICAgICAgICAgICAgID0gMFg4MCwKKyAgSElEX0lUTV9SZXBvcnRJRCAgICAgICAgICA9IDBYODQsCisgIEhJRF9JVE1fU3RyaW5nTWluaW11bSAgICAgPSAwWDg4LAorICBISURfSVRNX091dHB1dCAgICAgICAgICAgID0gMFg5MCwKKyAgSElEX0lUTV9SZXBvcnRDb3VudCAgICAgICA9IDBYOTQsCisgIEhJRF9JVE1fU3RyaW5nTWF4aW11bSAgICAgPSAwWDk4LAorICBISURfSVRNX0NvbGxlY3Rpb24gICAgICAgID0gMFhBMCwKKyAgSElEX0lUTV9QdXNoICAgICAgICAgICAgICA9IDBYQTQsCisgIEhJRF9JVE1fRGVsaW1pdGVyICAgICAgICAgPSAwWEE4LAorICBISURfSVRNX0ZlYXR1cmUgICAgICAgICAgID0gMFhCMCwKKyAgSElEX0lUTV9Qb3AgICAgICAgICAgICAgICA9IDBYQjQsCisgIEhJRF9JVE1fRW5kQ29sbGVjdGlvbiAgICAgPSAwWEMwLAorfSBIaWRJdGVtVGFnOworCisjZGVmaW5lIEhJRF9JVEVNX1RBR19NQVNLIDBYRkMKKyNkZWZpbmUgSElEX0lURU1fU0laRV9NQVNLIDBYMDMKKworI2RlZmluZSBISURfSVRFTV9UQUcoaXRlbSkgKChpdGVtKSAmIEhJRF9JVEVNX1RBR19NQVNLKQorI2RlZmluZSBISURfSVRFTV9TSVpFKGl0ZW0pICgoaXRlbSkgJiBISURfSVRFTV9TSVpFX01BU0spCisjZGVmaW5lIEhJRF9JVEVNX1RBR19CSVQodGFnKSAoVUlOVDY0X0MoMSkgPDwgKCh0YWcpID4+IDIpKQorCitzdGF0aWMgaW5saW5lIGludAoraGlkSGFzU2lnbmVkVmFsdWUgKEhpZEl0ZW1UYWcgdGFnKSB7CisgIHN3aXRjaCAodGFnKSB7CisgICAgY2FzZSBISURfSVRNX0xvZ2ljYWxNaW5pbXVtOgorICAgIGNhc2UgSElEX0lUTV9Mb2dpY2FsTWF4aW11bToKKyAgICBjYXNlIEhJRF9JVE1fUGh5c2ljYWxNaW5pbXVtOgorICAgIGNhc2UgSElEX0lUTV9QaHlzaWNhbE1heGltdW06CisgICAgY2FzZSBISURfSVRNX1VuaXRFeHBvbmVudDoKKyAgICAgIHJldHVybiAxOworCisgICAgZGVmYXVsdDoKKyAgICAgIHJldHVybiAwOworICB9Cit9CisKK3R5cGVkZWYgZW51bSB7CisgIEhJRF9DT0xfUGh5c2ljYWwgICAgPSAwWDAwLAorICBISURfQ09MX0FwcGxpY2F0aW9uID0gMFgwMSwKKyAgSElEX0NPTF9Mb2dpY2FsICAgICA9IDBYMDIsCit9IEhpZENvbGxlY3Rpb25UeXBlOworCit0eXBlZGVmIGVudW0geworICBISURfVVNHX1RZUEVfVW5kZWZpbmVkID0gMCwKKworICAvLyBDb250cm9scworICBISURfVVNHX1RZUEVfTGluZWFyQ29udHJvbCwKKyAgSElEX1VTR19UWVBFX09uT2ZmQ29udHJvbCwKKyAgSElEX1VTR19UWVBFX01vbWVudGFyeUNvbnRyb2wsCisgIEhJRF9VU0dfVFlQRV9PbmVTaG90Q29udHJvbCwKKyAgSElEX1VTR19UWVBFX1JldHJpZ2dlckNvbnRyb2wsCisKKyAgLy8gRGF0YQorICBISURfVVNHX1RZUEVfU2VsZWN0b3IsCisgIEhJRF9VU0dfVFlQRV9TdGF0aWNWYWx1ZSwKKyAgSElEX1VTR19UWVBFX1N0YXRpY0ZsYWcsCisgIEhJRF9VU0dfVFlQRV9EeW5hbWljVmFsdWUsCisgIEhJRF9VU0dfVFlQRV9EeW5hbWljRmxhZywKKworICAvLyBDb2xsZWN0aW9ucworICBISURfVVNHX1RZUEVfTmFtZWRBcnJheSwKKyAgSElEX1VTR19UWVBFX0FwcGxpY2F0aW9uQ29sbGVjdGlvbiwKKyAgSElEX1VTR19UWVBFX0xvZ2ljYWxDb2xsZWN0aW9uLAorICBISURfVVNHX1RZUEVfUGh5c2ljYWxDb2xsZWN0aW9uLAorICBISURfVVNHX1RZUEVfVXNhZ2VTd2l0Y2gsCisgIEhJRF9VU0dfVFlQRV9Vc2FnZU1vZGlmaWVyLAorCisgIEhJRF9VU0dfVFlQRV9VRCAgID0gSElEX1VTR19UWVBFX1VuZGVmaW5lZCwKKyAgSElEX1VTR19UWVBFX0xDICAgPSBISURfVVNHX1RZUEVfTGluZWFyQ29udHJvbCwKKyAgSElEX1VTR19UWVBFX09PQyAgPSBISURfVVNHX1RZUEVfT25PZmZDb250cm9sLAorICBISURfVVNHX1RZUEVfTUMgICA9IEhJRF9VU0dfVFlQRV9Nb21lbnRhcnlDb250cm9sLAorICBISURfVVNHX1RZUEVfT1NDICA9IEhJRF9VU0dfVFlQRV9PbmVTaG90Q29udHJvbCwKKyAgSElEX1VTR19UWVBFX1JUQyAgPSBISURfVVNHX1RZUEVfUmV0cmlnZ2VyQ29udHJvbCwKKyAgSElEX1VTR19UWVBFX1NFTCAgPSBISURfVVNHX1RZUEVfU2VsZWN0b3IsCisgIEhJRF9VU0dfVFlQRV9TViAgID0gSElEX1VTR19UWVBFX1N0YXRpY1ZhbHVlLAorICBISURfVVNHX1RZUEVfU0YgICA9IEhJRF9VU0dfVFlQRV9TdGF0aWNGbGFnLAorICBISURfVVNHX1RZUEVfRFYgICA9IEhJRF9VU0dfVFlQRV9EeW5hbWljVmFsdWUsCisgIEhJRF9VU0dfVFlQRV9ERiAgID0gSElEX1VTR19UWVBFX0R5bmFtaWNGbGFnLAorICBISURfVVNHX1RZUEVfTkFSWSA9IEhJRF9VU0dfVFlQRV9OYW1lZEFycmF5LAorICBISURfVVNHX1RZUEVfQ0EgICA9IEhJRF9VU0dfVFlQRV9BcHBsaWNhdGlvbkNvbGxlY3Rpb24sCisgIEhJRF9VU0dfVFlQRV9DTCAgID0gSElEX1VTR19UWVBFX0xvZ2ljYWxDb2xsZWN0aW9uLAorICBISURfVVNHX1RZUEVfQ1AgICA9IEhJRF9VU0dfVFlQRV9QaHlzaWNhbENvbGxlY3Rpb24sCisgIEhJRF9VU0dfVFlQRV9VUyAgID0gSElEX1VTR19UWVBFX1VzYWdlU3dpdGNoLAorICBISURfVVNHX1RZUEVfVU0gICA9IEhJRF9VU0dfVFlQRV9Vc2FnZU1vZGlmaWVyLAorfSBIaWRVc2FnZVR5cGU7CisKK3R5cGVkZWYgZW51bSB7CisgIEhJRF9VU0dfR0RUX1BvaW50ZXIgICAgICAgICAgICAgICAgICAgPSAwWDAxLAorICBISURfVVNHX0dEVF9Nb3VzZSAgICAgICAgICAgICAgICAgICAgID0gMFgwMiwKKyAgSElEX1VTR19HRFRfSm95c3RpY2sgICAgICAgICAgICAgICAgICA9IDBYMDQsCisgIEhJRF9VU0dfR0RUX0dhbWVQYWQgICAgICAgICAgICAgICAgICAgPSAwWDA1LAorICBISURfVVNHX0dEVF9LZXlib2FyZCAgICAgICAgICAgICAgICAgID0gMFgwNiwKKyAgSElEX1VTR19HRFRfS2V5cGFkICAgICAgICAgICAgICAgICAgICA9IDBYMDcsCisgIEhJRF9VU0dfR0RUX011bHRpQXhpc0NvbnRyb2xsZXIgICAgICAgPSAwWDA4LAorICBISURfVVNHX0dEVF9UYWJsZXRQQ1N5c3RlbUNvbnRyb2xzICAgID0gMFgwOSwKKyAgSElEX1VTR19HRFRfWCAgICAgICAgICAgICAgICAgICAgICAgICA9IDBYMzAsCisgIEhJRF9VU0dfR0RUX1kgICAgICAgICAgICAgICAgICAgICAgICAgPSAwWDMxLAorICBISURfVVNHX0dEVF9aICAgICAgICAgICAgICAgICAgICAgICAgID0gMFgzMiwKKyAgSElEX1VTR19HRFRfUnggICAgICAgICAgICAgICAgICAgICAgICA9IDBYMzMsCisgIEhJRF9VU0dfR0RUX1J5ICAgICAgICAgICAgICAgICAgICAgICAgPSAwWDM0LAorICBISURfVVNHX0dEVF9SeiAgICAgICAgICAgICAgICAgICAgICAgID0gMFgzNSwKKyAgSElEX1VTR19HRFRfU2xpZGVyICAgICAgICAgICAgICAgICAgICA9IDBYMzYsCisgIEhJRF9VU0dfR0RUX0RpYWwgICAgICAgICAgICAgICAgICAgICAgPSAwWDM3LAorICBISURfVVNHX0dEVF9XaGVlbCAgICAgICAgICAgICAgICAgICAgID0gMFgzOCwKKyAgSElEX1VTR19HRFRfSGF0U3dpdGNoICAgICAgICAgICAgICAgICA9IDBYMzksCisgIEhJRF9VU0dfR0RUX0NvdW50ZWRCdWZmZXIgICAgICAgICAgICAgPSAwWDNBLAorICBISURfVVNHX0dEVF9CeXRlQ291bnQgICAgICAgICAgICAgICAgID0gMFgzQiwKKyAgSElEX1VTR19HRFRfTW90aW9uV2FrZXVwICAgICAgICAgICAgICA9IDBYM0MsCisgIEhJRF9VU0dfR0RUX1N0YXJ0ICAgICAgICAgICAgICAgICAgICAgPSAwWDNELAorICBISURfVVNHX0dEVF9TZWxlY3QgICAgICAgICAgICAgICAgICAgID0gMFgzRSwKKyAgSElEX1VTR19HRFRfVnggICAgICAgICAgICAgICAgICAgICAgICA9IDBYNDAsCisgIEhJRF9VU0dfR0RUX1Z5ICAgICAgICAgICAgICAgICAgICAgICAgPSAwWDQxLAorICBISURfVVNHX0dEVF9WeiAgICAgICAgICAgICAgICAgICAgICAgID0gMFg0MiwKKyAgSElEX1VTR19HRFRfVmJyeCAgICAgICAgICAgICAgICAgICAgICA9IDBYNDMsCisgIEhJRF9VU0dfR0RUX1ZicnkgICAgICAgICAgICAgICAgICAgICAgPSAwWDQ0LAorICBISURfVVNHX0dEVF9WYnJ6ICAgICAgICAgICAgICAgICAgICAgID0gMFg0NSwKKyAgSElEX1VTR19HRFRfVm5vICAgICAgICAgICAgICAgICAgICAgICA9IDBYNDYsCisgIEhJRF9VU0dfR0RUX0ZlYXR1cmVOb3RpZmljYXRpb24gICAgICAgPSAwWDQ3LAorICBISURfVVNHX0dEVF9SZXNvbHV0aW9uTXVsdGlwbGllciAgICAgID0gMFg0OCwKKyAgSElEX1VTR19HRFRfU3lzdGVtQ29udHJvbCAgICAgICAgICAgICA9IDBYODAsCisgIEhJRF9VU0dfR0RUX1N5c3RlbVBvd2VyRG93biAgICAgICAgICAgPSAwWDgxLAorICBISURfVVNHX0dEVF9TeXN0ZW1TbGVlcCAgICAgICAgICAgICAgID0gMFg4MiwKKyAgSElEX1VTR19HRFRfU3lzdGVtV2FrZVVwICAgICAgICAgICAgICA9IDBYODMsCisgIEhJRF9VU0dfR0RUX1N5c3RlbUNvbnRleHRNZW51ICAgICAgICAgPSAwWDg0LAorICBISURfVVNHX0dEVF9TeXN0ZW1NYWluTWVudSAgICAgICAgICAgID0gMFg4NSwKKyAgSElEX1VTR19HRFRfU3lzdGVtQXBwTWVudSAgICAgICAgICAgICA9IDBYODYsCisgIEhJRF9VU0dfR0RUX1N5c3RlbU1lbnVIZWxwICAgICAgICAgICAgPSAwWDg3LAorICBISURfVVNHX0dEVF9TeXN0ZW1NZW51RXhpdCAgICAgICAgICAgID0gMFg4OCwKKyAgSElEX1VTR19HRFRfU3lzdGVtTWVudVNlbGVjdCAgICAgICAgICA9IDBYODksCisgIEhJRF9VU0dfR0RUX1N5c3RlbU1lbnVSaWdodCAgICAgICAgICAgPSAwWDhBLAorICBISURfVVNHX0dEVF9TeXN0ZW1NZW51TGVmdCAgICAgICAgICAgID0gMFg4QiwKKyAgSElEX1VTR19HRFRfU3lzdGVtTWVudVVwICAgICAgICAgICAgICA9IDBYOEMsCisgIEhJRF9VU0dfR0RUX1N5c3RlbU1lbnVEb3duICAgICAgICAgICAgPSAwWDhELAorICBISURfVVNHX0dEVF9TeXN0ZW1Db2xkUmVzdGFydCAgICAgICAgID0gMFg4RSwKKyAgSElEX1VTR19HRFRfU3lzdGVtV2FybVJlc3RhcnQgICAgICAgICA9IDBYOEYsCisgIEhJRF9VU0dfR0RUX0RQYWRVcCAgICAgICAgICAgICAgICAgICAgPSAwWDkwLAorICBISURfVVNHX0dEVF9EUGFkRG93biAgICAgICAgICAgICAgICAgID0gMFg5MSwKKyAgSElEX1VTR19HRFRfRFBhZFJpZ2h0ICAgICAgICAgICAgICAgICA9IDBYOTIsCisgIEhJRF9VU0dfR0RUX0RQYWRMZWZ0ICAgICAgICAgICAgICAgICAgPSAwWDkzLAorICBISURfVVNHX0dEVF9TeXN0ZW1Eb2NrICAgICAgICAgICAgICAgID0gMFhBMCwKKyAgSElEX1VTR19HRFRfU3lzdGVtVW5kb2NrICAgICAgICAgICAgICA9IDBYQTEsCisgIEhJRF9VU0dfR0RUX1N5c3RlbVNldHVwICAgICAgICAgICAgICAgPSAwWEEyLAorICBISURfVVNHX0dEVF9TeXN0ZW1CcmVhayAgICAgICAgICAgICAgID0gMFhBMywKKyAgSElEX1VTR19HRFRfU3lzdGVtRGVidWdnZXJCcmVhayAgICAgICA9IDBYQTQsCisgIEhJRF9VU0dfR0RUX0FwcGxpY2F0aW9uQnJlYWsgICAgICAgICAgPSAwWEE1LAorICBISURfVVNHX0dEVF9BcHBsaWNhdGlvbkRlYnVnZ2VyQnJlYWsgID0gMFhBNiwKKyAgSElEX1VTR19HRFRfU3lzdGVtU3BlYWtlck11dGUgICAgICAgICA9IDBYQTcsCisgIEhJRF9VU0dfR0RUX1N5c3RlbUhpYmVybmF0ZSAgICAgICAgICAgPSAwWEE4LAorICBISURfVVNHX0dEVF9TeXN0ZW1EaXNwbGF5SW52ZXJ0ICAgICAgID0gMFhCMCwKKyAgSElEX1VTR19HRFRfU3lzdGVtRGlzcGxheUludGVybmFsICAgICA9IDBYQjEsCisgIEhJRF9VU0dfR0RUX1N5c3RlbURpc3BsYXlFeHRlcm5hbCAgICAgPSAwWEIyLAorICBISURfVVNHX0dEVF9TeXN0ZW1EaXNwbGF5Qm90aCAgICAgICAgID0gMFhCMywKKyAgSElEX1VTR19HRFRfU3lzdGVtRGlzcGxheUR1YWwgICAgICAgICA9IDBYQjQsCisgIEhJRF9VU0dfR0RUX1N5c3RlbURpc3BsYXlUb2dnbGVJbnRFeHQgPSAwWEI1LAorICBISURfVVNHX0dEVF9TeXN0ZW1EaXNwbGF5U3dhcCAgICAgICAgID0gMFhCNiwKKyAgSElEX1VTR19HRFRfU3lzdGVtRGlzcGxheUxDREF1dG9zY2FsZSA9IDBYQjcsCit9IEhpZEdlbmVyaWNEZXNrdG9wVXNhZ2U7CisKK3R5cGVkZWYgZW51bSB7CisgIEhJRF9VU0dfS0JEX0tleWJvYXJkRXJyb3JSb2xsT3ZlciAgICAgPSAwWDAxLAorICBISURfVVNHX0tCRF9LZXlib2FyZFBvc3RGYWlsICAgICAgICAgID0gMFgwMiwKKyAgSElEX1VTR19LQkRfS2V5Ym9hcmRFcnJvclVuZGVmaW5lZCAgICA9IDBYMDMsCisgIEhJRF9VU0dfS0JEX0tleWJvYXJkQSAgICAgICAgICAgICAgICAgPSAwWDA0LAorICBISURfVVNHX0tCRF9LZXlib2FyZEIgICAgICAgICAgICAgICAgID0gMFgwNSwKKyAgSElEX1VTR19LQkRfS2V5Ym9hcmRDICAgICAgICAgICAgICAgICA9IDBYMDYsCisgIEhJRF9VU0dfS0JEX0tleWJvYXJkRCAgICAgICAgICAgICAgICAgPSAwWDA3LAorICBISURfVVNHX0tCRF9LZXlib2FyZEUgICAgICAgICAgICAgICAgID0gMFgwOCwKKyAgSElEX1VTR19LQkRfS2V5Ym9hcmRGICAgICAgICAgICAgICAgICA9IDBYMDksCisgIEhJRF9VU0dfS0JEX0tleWJvYXJkRyAgICAgICAgICAgICAgICAgPSAwWDBBLAorICBISURfVVNHX0tCRF9LZXlib2FyZEggICAgICAgICAgICAgICAgID0gMFgwQiwKKyAgSElEX1VTR19LQkRfS2V5Ym9hcmRJICAgICAgICAgICAgICAgICA9IDBYMEMsCisgIEhJRF9VU0dfS0JEX0tleWJvYXJkSiAgICAgICAgICAgICAgICAgPSAwWDBELAorICBISURfVVNHX0tCRF9LZXlib2FyZEsgICAgICAgICAgICAgICAgID0gMFgwRSwKKyAgSElEX1VTR19LQkRfS2V5Ym9hcmRMICAgICAgICAgICAgICAgICA9IDBYMEYsCisgIEhJRF9VU0dfS0JEX0tleWJvYXJkTSAgICAgICAgICAgICAgICAgPSAwWDEwLAorICBISURfVVNHX0tCRF9LZXlib2FyZE4gICAgICAgICAgICAgICAgID0gMFgxMSwKKyAgSElEX1VTR19LQkRfS2V5Ym9hcmRPICAgICAgICAgICAgICAgICA9IDBYMTIsCisgIEhJRF9VU0dfS0JEX0tleWJvYXJkUCAgICAgICAgICAgICAgICAgPSAwWDEzLAorICBISURfVVNHX0tCRF9LZXlib2FyZFEgICAgICAgICAgICAgICAgID0gMFgxNCwKKyAgSElEX1VTR19LQkRfS2V5Ym9hcmRSICAgICAgICAgICAgICAgICA9IDBYMTUsCisgIEhJRF9VU0dfS0JEX0tleWJvYXJkUyAgICAgICAgICAgICAgICAgPSAwWDE2LAorICBISURfVVNHX0tCRF9LZXlib2FyZFQgICAgICAgICAgICAgICAgID0gMFgxNywKKyAgSElEX1VTR19LQkRfS2V5Ym9hcmRVICAgICAgICAgICAgICAgICA9IDBYMTgsCisgIEhJRF9VU0dfS0JEX0tleWJvYXJkViAgICAgICAgICAgICAgICAgPSAwWDE5LAorICBISURfVVNHX0tCRF9LZXlib2FyZFcgICAgICAgICAgICAgICAgID0gMFgxQSwKKyAgSElEX1VTR19LQkRfS2V5Ym9hcmRYICAgICAgICAgICAgICAgICA9IDBYMUIsCisgIEhJRF9VU0dfS0JEX0tleWJvYXJkWSAgICAgICAgICAgICAgICAgPSAwWDFDLAorICBISURfVVNHX0tCRF9LZXlib2FyZFogICAgICAgICAgICAgICAgID0gMFgxRCwKKyAgSElEX1VTR19LQkRfS2V5Ym9hcmQxICAgICAgICAgICAgICAgICA9IDBYMUUsCisgIEhJRF9VU0dfS0JEX0tleWJvYXJkMiAgICAgICAgICAgICAgICAgPSAwWDFGLAorICBISURfVVNHX0tCRF9LZXlib2FyZDMgICAgICAgICAgICAgICAgID0gMFgyMCwKKyAgSElEX1VTR19LQkRfS2V5Ym9hcmQ0ICAgICAgICAgICAgICAgICA9IDBYMjEsCisgIEhJRF9VU0dfS0JEX0tleWJvYXJkNSAgICAgICAgICAgICAgICAgPSAwWDIyLAorICBISURfVVNHX0tCRF9LZXlib2FyZDYgICAgICAgICAgICAgICAgID0gMFgyMywKKyAgSElEX1VTR19LQkRfS2V5Ym9hcmQ3ICAgICAgICAgICAgICAgICA9IDBYMjQsCisgIEhJRF9VU0dfS0JEX0tleWJvYXJkOCAgICAgICAgICAgICAgICAgPSAwWDI1LAorICBISURfVVNHX0tCRF9LZXlib2FyZDkgICAgICAgICAgICAgICAgID0gMFgyNiwKKyAgSElEX1VTR19LQkRfS2V5Ym9hcmQwICAgICAgICAgICAgICAgICA9IDBYMjcsCisgIEhJRF9VU0dfS0JEX0tleWJvYXJkRW50ZXIgICAgICAgICAgICAgPSAwWDI4LAorICBISURfVVNHX0tCRF9LZXlib2FyZEVzY2FwZSAgICAgICAgICAgID0gMFgyOSwKKyAgSElEX1VTR19LQkRfS2V5Ym9hcmRCYWNrc3BhY2UgICAgICAgICA9IDBYMkEsCisgIEhJRF9VU0dfS0JEX0tleWJvYXJkVGFiICAgICAgICAgICAgICAgPSAwWDJCLAorICBISURfVVNHX0tCRF9LZXlib2FyZFNwYWNlICAgICAgICAgICAgID0gMFgyQywKKyAgSElEX1VTR19LQkRfS2V5Ym9hcmRNaW51cyAgICAgICAgICAgICA9IDBYMkQsCisgIEhJRF9VU0dfS0JEX0tleWJvYXJkRXF1YWwgICAgICAgICAgICAgPSAwWDJFLAorICBISURfVVNHX0tCRF9LZXlib2FyZExlZnRCcmFja2V0ICAgICAgID0gMFgyRiwKKyAgSElEX1VTR19LQkRfS2V5Ym9hcmRSaWdodEJyYWNrZXQgICAgICA9IDBYMzAsCisgIEhJRF9VU0dfS0JEX0tleWJvYXJkQmFja3NsYXNoICAgICAgICAgPSAwWDMxLAorICBISURfVVNHX0tCRF9LZXlib2FyZEV1cm9wZTEgICAgICAgICAgID0gMFgzMiwKKyAgSElEX1VTR19LQkRfS2V5Ym9hcmRTZW1pY29sb24gICAgICAgICA9IDBYMzMsCisgIEhJRF9VU0dfS0JEX0tleWJvYXJkQXBvc3Ryb3BoZSAgICAgICAgPSAwWDM0LAorICBISURfVVNHX0tCRF9LZXlib2FyZEdyYXZlICAgICAgICAgICAgID0gMFgzNSwKKyAgSElEX1VTR19LQkRfS2V5Ym9hcmRDb21tYSAgICAgICAgICAgICA9IDBYMzYsCisgIEhJRF9VU0dfS0JEX0tleWJvYXJkUGVyaW9kICAgICAgICAgICAgPSAwWDM3LAorICBISURfVVNHX0tCRF9LZXlib2FyZFNsYXNoICAgICAgICAgICAgID0gMFgzOCwKKyAgSElEX1VTR19LQkRfS2V5Ym9hcmRDYXBzTG9jayAgICAgICAgICA9IDBYMzksCisgIEhJRF9VU0dfS0JEX0tleWJvYXJkRjEgICAgICAgICAgICAgICAgPSAwWDNBLAorICBISURfVVNHX0tCRF9LZXlib2FyZEYyICAgICAgICAgICAgICAgID0gMFgzQiwKKyAgSElEX1VTR19LQkRfS2V5Ym9hcmRGMyAgICAgICAgICAgICAgICA9IDBYM0MsCisgIEhJRF9VU0dfS0JEX0tleWJvYXJkRjQgICAgICAgICAgICAgICAgPSAwWDNELAorICBISURfVVNHX0tCRF9LZXlib2FyZEY1ICAgICAgICAgICAgICAgID0gMFgzRSwKKyAgSElEX1VTR19LQkRfS2V5Ym9hcmRGNiAgICAgICAgICAgICAgICA9IDBYM0YsCisgIEhJRF9VU0dfS0JEX0tleWJvYXJkRjcgICAgICAgICAgICAgICAgPSAwWDQwLAorICBISURfVVNHX0tCRF9LZXlib2FyZEY4ICAgICAgICAgICAgICAgID0gMFg0MSwKKyAgSElEX1VTR19LQkRfS2V5Ym9hcmRGOSAgICAgICAgICAgICAgICA9IDBYNDIsCisgIEhJRF9VU0dfS0JEX0tleWJvYXJkRjEwICAgICAgICAgICAgICAgPSAwWDQzLAorICBISURfVVNHX0tCRF9LZXlib2FyZEYxMSAgICAgICAgICAgICAgID0gMFg0NCwKKyAgSElEX1VTR19LQkRfS2V5Ym9hcmRGMTIgICAgICAgICAgICAgICA9IDBYNDUsCisgIEhJRF9VU0dfS0JEX0tleWJvYXJkUHJpbnRTY3JlZW4gICAgICAgPSAwWDQ2LAorICBISURfVVNHX0tCRF9LZXlib2FyZFNjcm9sbExvY2sgICAgICAgID0gMFg0NywKKyAgSElEX1VTR19LQkRfS2V5Ym9hcmRQYXVzZSAgICAgICAgICAgICA9IDBYNDgsCisgIEhJRF9VU0dfS0JEX0tleWJvYXJkSW5zZXJ0ICAgICAgICAgICAgPSAwWDQ5LAorICBISURfVVNHX0tCRF9LZXlib2FyZEhvbWUgICAgICAgICAgICAgID0gMFg0QSwKKyAgSElEX1VTR19LQkRfS2V5Ym9hcmRQYWdlVXAgICAgICAgICAgICA9IDBYNEIsCisgIEhJRF9VU0dfS0JEX0tleWJvYXJkRGVsZXRlICAgICAgICAgICAgPSAwWDRDLAorICBISURfVVNHX0tCRF9LZXlib2FyZEVuZCAgICAgICAgICAgICAgID0gMFg0RCwKKyAgSElEX1VTR19LQkRfS2V5Ym9hcmRQYWdlRG93biAgICAgICAgICA9IDBYNEUsCisgIEhJRF9VU0dfS0JEX0tleWJvYXJkUmlnaHRBcnJvdyAgICAgICAgPSAwWDRGLAorICBISURfVVNHX0tCRF9LZXlib2FyZExlZnRBcnJvdyAgICAgICAgID0gMFg1MCwKKyAgSElEX1VTR19LQkRfS2V5Ym9hcmREb3duQXJyb3cgICAgICAgICA9IDBYNTEsCisgIEhJRF9VU0dfS0JEX0tleWJvYXJkVXBBcnJvdyAgICAgICAgICAgPSAwWDUyLAorICBISURfVVNHX0tCRF9LZXlwYWROdW1Mb2NrICAgICAgICAgICAgID0gMFg1MywKKyAgSElEX1VTR19LQkRfS2V5cGFkU2xhc2ggICAgICAgICAgICAgICA9IDBYNTQsCisgIEhJRF9VU0dfS0JEX0tleXBhZEFzdGVyaXNrICAgICAgICAgICAgPSAwWDU1LAorICBISURfVVNHX0tCRF9LZXlwYWRNaW51cyAgICAgICAgICAgICAgID0gMFg1NiwKKyAgSElEX1VTR19LQkRfS2V5cGFkUGx1cyAgICAgICAgICAgICAgICA9IDBYNTcsCisgIEhJRF9VU0dfS0JEX0tleXBhZEVudGVyICAgICAgICAgICAgICAgPSAwWDU4LAorICBISURfVVNHX0tCRF9LZXlwYWQxICAgICAgICAgICAgICAgICAgID0gMFg1OSwKKyAgSElEX1VTR19LQkRfS2V5cGFkMiAgICAgICAgICAgICAgICAgICA9IDBYNUEsCisgIEhJRF9VU0dfS0JEX0tleXBhZDMgICAgICAgICAgICAgICAgICAgPSAwWDVCLAorICBISURfVVNHX0tCRF9LZXlwYWQ0ICAgICAgICAgICAgICAgICAgID0gMFg1QywKKyAgSElEX1VTR19LQkRfS2V5cGFkNSAgICAgICAgICAgICAgICAgICA9IDBYNUQsCisgIEhJRF9VU0dfS0JEX0tleXBhZDYgICAgICAgICAgICAgICAgICAgPSAwWDVFLAorICBISURfVVNHX0tCRF9LZXlwYWQ3ICAgICAgICAgICAgICAgICAgID0gMFg1RiwKKyAgSElEX1VTR19LQkRfS2V5cGFkOCAgICAgICAgICAgICAgICAgICA9IDBYNjAsCisgIEhJRF9VU0dfS0JEX0tleXBhZDkgICAgICAgICAgICAgICAgICAgPSAwWDYxLAorICBISURfVVNHX0tCRF9LZXlwYWQwICAgICAgICAgICAgICAgICAgID0gMFg2MiwKKyAgSElEX1VTR19LQkRfS2V5cGFkUGVyaW9kICAgICAgICAgICAgICA9IDBYNjMsCisgIEhJRF9VU0dfS0JEX0tleWJvYXJkRXVyb3BlMiAgICAgICAgICAgPSAwWDY0LAorICBISURfVVNHX0tCRF9LZXlib2FyZEFwcGxpY2F0aW9uICAgICAgID0gMFg2NSwKKyAgSElEX1VTR19LQkRfS2V5Ym9hcmRQb3dlciAgICAgICAgICAgICA9IDBYNjYsCisgIEhJRF9VU0dfS0JEX0tleXBhZEVxdWFsICAgICAgICAgICAgICAgPSAwWDY3LAorICBISURfVVNHX0tCRF9LZXlib2FyZEYxMyAgICAgICAgICAgICAgID0gMFg2OCwKKyAgSElEX1VTR19LQkRfS2V5Ym9hcmRGMTQgICAgICAgICAgICAgICA9IDBYNjksCisgIEhJRF9VU0dfS0JEX0tleWJvYXJkRjE1ICAgICAgICAgICAgICAgPSAwWDZBLAorICBISURfVVNHX0tCRF9LZXlib2FyZEYxNiAgICAgICAgICAgICAgID0gMFg2QiwKKyAgSElEX1VTR19LQkRfS2V5Ym9hcmRGMTcgICAgICAgICAgICAgICA9IDBYNkMsCisgIEhJRF9VU0dfS0JEX0tleWJvYXJkRjE4ICAgICAgICAgICAgICAgPSAwWDZELAorICBISURfVVNHX0tCRF9LZXlib2FyZEYxOSAgICAgICAgICAgICAgID0gMFg2RSwKKyAgSElEX1VTR19LQkRfS2V5Ym9hcmRGMjAgICAgICAgICAgICAgICA9IDBYNkYsCisgIEhJRF9VU0dfS0JEX0tleWJvYXJkRjIxICAgICAgICAgICAgICAgPSAwWDcwLAorICBISURfVVNHX0tCRF9LZXlib2FyZEYyMiAgICAgICAgICAgICAgID0gMFg3MSwKKyAgSElEX1VTR19LQkRfS2V5Ym9hcmRGMjMgICAgICAgICAgICAgICA9IDBYNzIsCisgIEhJRF9VU0dfS0JEX0tleWJvYXJkRjI0ICAgICAgICAgICAgICAgPSAwWDczLAorICBISURfVVNHX0tCRF9LZXlib2FyZEV4ZWN1dGUgICAgICAgICAgID0gMFg3NCwKKyAgSElEX1VTR19LQkRfS2V5Ym9hcmRIZWxwICAgICAgICAgICAgICA9IDBYNzUsCisgIEhJRF9VU0dfS0JEX0tleWJvYXJkTWVudSAgICAgICAgICAgICAgPSAwWDc2LAorICBISURfVVNHX0tCRF9LZXlib2FyZFNlbGVjdCAgICAgICAgICAgID0gMFg3NywKKyAgSElEX1VTR19LQkRfS2V5Ym9hcmRTdG9wICAgICAgICAgICAgICA9IDBYNzgsCisgIEhJRF9VU0dfS0JEX0tleWJvYXJkQWdhaW4gICAgICAgICAgICAgPSAwWDc5LAorICBISURfVVNHX0tCRF9LZXlib2FyZFVuZG8gICAgICAgICAgICAgID0gMFg3QSwKKyAgSElEX1VTR19LQkRfS2V5Ym9hcmRDdXQgICAgICAgICAgICAgICA9IDBYN0IsCisgIEhJRF9VU0dfS0JEX0tleWJvYXJkQ29weSAgICAgICAgICAgICAgPSAwWDdDLAorICBISURfVVNHX0tCRF9LZXlib2FyZFBhc3RlICAgICAgICAgICAgID0gMFg3RCwKKyAgSElEX1VTR19LQkRfS2V5Ym9hcmRGaW5kICAgICAgICAgICAgICA9IDBYN0UsCisgIEhJRF9VU0dfS0JEX0tleWJvYXJkTXV0ZSAgICAgICAgICAgICAgPSAwWDdGLAorICBISURfVVNHX0tCRF9LZXlib2FyZFZvbHVtZVVwICAgICAgICAgID0gMFg4MCwKKyAgSElEX1VTR19LQkRfS2V5Ym9hcmRWb2x1bWVEb3duICAgICAgICA9IDBYODEsCisgIEhJRF9VU0dfS0JEX0tleWJvYXJkTG9ja2luZ0NhcHNMb2NrICAgPSAwWDgyLAorICBISURfVVNHX0tCRF9LZXlib2FyZExvY2tpbmdOdW1Mb2NrICAgID0gMFg4MywKKyAgSElEX1VTR19LQkRfS2V5Ym9hcmRMb2NraW5nU2Nyb2xsTG9jayA9IDBYODQsCisgIEhJRF9VU0dfS0JEX0tleXBhZENvbW1hICAgICAgICAgICAgICAgPSAwWDg1LAorICBISURfVVNHX0tCRF9LZXlwYWRFcXVhbFNpZ24gICAgICAgICAgID0gMFg4NiwKKyAgSElEX1VTR19LQkRfS2V5Ym9hcmRJbnRlcm5hdGlvbmFsMSAgICA9IDBYODcsCisgIEhJRF9VU0dfS0JEX0tleWJvYXJkSW50ZXJuYXRpb25hbDIgICAgPSAwWDg4LAorICBISURfVVNHX0tCRF9LZXlib2FyZEludGVybmF0aW9uYWwzICAgID0gMFg4OSwKKyAgSElEX1VTR19LQkRfS2V5Ym9hcmRJbnRlcm5hdGlvbmFsNCAgICA9IDBYOEEsCisgIEhJRF9VU0dfS0JEX0tleWJvYXJkSW50ZXJuYXRpb25hbDUgICAgPSAwWDhCLAorICBISURfVVNHX0tCRF9LZXlib2FyZEludGVybmF0aW9uYWw2ICAgID0gMFg4QywKKyAgSElEX1VTR19LQkRfS2V5Ym9hcmRJbnRlcm5hdGlvbmFsNyAgICA9IDBYOEQsCisgIEhJRF9VU0dfS0JEX0tleWJvYXJkSW50ZXJuYXRpb25hbDggICAgPSAwWDhFLAorICBISURfVVNHX0tCRF9LZXlib2FyZEludGVybmF0aW9uYWw5ICAgID0gMFg4RiwKKyAgSElEX1VTR19LQkRfS2V5Ym9hcmRMYW5ndWFnZTEgICAgICAgICA9IDBYOTAsCisgIEhJRF9VU0dfS0JEX0tleWJvYXJkTGFuZ3VhZ2UyICAgICAgICAgPSAwWDkxLAorICBISURfVVNHX0tCRF9LZXlib2FyZExhbmd1YWdlMyAgICAgICAgID0gMFg5MiwKKyAgSElEX1VTR19LQkRfS2V5Ym9hcmRMYW5ndWFnZTQgICAgICAgICA9IDBYOTMsCisgIEhJRF9VU0dfS0JEX0tleWJvYXJkTGFuZ3VhZ2U1ICAgICAgICAgPSAwWDk0LAorICBISURfVVNHX0tCRF9LZXlib2FyZExhbmd1YWdlNiAgICAgICAgID0gMFg5NSwKKyAgSElEX1VTR19LQkRfS2V5Ym9hcmRMYW5ndWFnZTcgICAgICAgICA9IDBYOTYsCisgIEhJRF9VU0dfS0JEX0tleWJvYXJkTGFuZ3VhZ2U4ICAgICAgICAgPSAwWDk3LAorICBISURfVVNHX0tCRF9LZXlib2FyZExhbmd1YWdlOSAgICAgICAgID0gMFg5OCwKKyAgSElEX1VTR19LQkRfS2V5Ym9hcmRBbHRlcm5hdGVFcmFzZSAgICA9IDBYOTksCisgIEhJRF9VU0dfS0JEX0tleWJvYXJkU3lzdGVtUmVxdWVzdCAgICAgPSAwWDlBLAorICBISURfVVNHX0tCRF9LZXlib2FyZENhbmNlbCAgICAgICAgICAgID0gMFg5QiwKKyAgSElEX1VTR19LQkRfS2V5Ym9hcmRDbGVhciAgICAgICAgICAgICA9IDBYOUMsCisgIEhJRF9VU0dfS0JEX0tleWJvYXJkUHJpb3IgICAgICAgICAgICAgPSAwWDlELAorICBISURfVVNHX0tCRF9LZXlib2FyZFJldHVybiAgICAgICAgICAgID0gMFg5RSwKKyAgSElEX1VTR19LQkRfS2V5Ym9hcmRTZXBhcmF0b3IgICAgICAgICA9IDBYOUYsCisgIEhJRF9VU0dfS0JEX0tleWJvYXJkT3V0ICAgICAgICAgICAgICAgPSAwWEEwLAorICBISURfVVNHX0tCRF9LZXlib2FyZE9wZXIgICAgICAgICAgICAgID0gMFhBMSwKKyAgSElEX1VTR19LQkRfS2V5Ym9hcmRDbGVhckFnYWluICAgICAgICA9IDBYQTIsCisgIEhJRF9VU0dfS0JEX0tleWJvYXJkQ3JTZWwgICAgICAgICAgICAgPSAwWEEzLAorICBISURfVVNHX0tCRF9LZXlib2FyZEV4U2VsICAgICAgICAgICAgID0gMFhBNCwKKyAgSElEX1VTR19LQkRfS2V5cGFkMDAgICAgICAgICAgICAgICAgICA9IDBYQjAsCisgIEhJRF9VU0dfS0JEX0tleXBhZDAwMCAgICAgICAgICAgICAgICAgPSAwWEIxLAorICBISURfVVNHX0tCRF9UaG91c2FuZHNTZXBhcmF0b3IgICAgICAgID0gMFhCMiwKKyAgSElEX1VTR19LQkRfRGVjaW1hbFNlcGFyYXRvciAgICAgICAgICA9IDBYQjMsCisgIEhJRF9VU0dfS0JEX0N1cnJlbmN5VW5pdCAgICAgICAgICAgICAgPSAwWEI0LAorICBISURfVVNHX0tCRF9DdXJyZW5jeVN1YnVuaXQgICAgICAgICAgID0gMFhCNSwKKyAgSElEX1VTR19LQkRfS2V5cGFkTGVmdFBhcmVudGhlc2lzICAgICA9IDBYQjYsCisgIEhJRF9VU0dfS0JEX0tleXBhZFJpZ2h0UGFyZW50aGVzaXMgICAgPSAwWEI3LAorICBISURfVVNHX0tCRF9LZXlwYWRMZWZ0QnJhY2UgICAgICAgICAgID0gMFhCOCwKKyAgSElEX1VTR19LQkRfS2V5cGFkUmlnaHRCcmFjZSAgICAgICAgICA9IDBYQjksCisgIEhJRF9VU0dfS0JEX0tleXBhZFRhYiAgICAgICAgICAgICAgICAgPSAwWEJBLAorICBISURfVVNHX0tCRF9LZXlwYWRCYWNrc3BhY2UgICAgICAgICAgID0gMFhCQiwKKyAgSElEX1VTR19LQkRfS2V5cGFkQSAgICAgICAgICAgICAgICAgICA9IDBYQkMsCisgIEhJRF9VU0dfS0JEX0tleXBhZEIgICAgICAgICAgICAgICAgICAgPSAwWEJELAorICBISURfVVNHX0tCRF9LZXlwYWRDICAgICAgICAgICAgICAgICAgID0gMFhCRSwKKyAgSElEX1VTR19LQkRfS2V5cGFkRCAgICAgICAgICAgICAgICAgICA9IDBYQkYsCisgIEhJRF9VU0dfS0JEX0tleXBhZEUgICAgICAgICAgICAgICAgICAgPSAwWEMwLAorICBISURfVVNHX0tCRF9LZXlwYWRGICAgICAgICAgICAgICAgICAgID0gMFhDMSwKKyAgSElEX1VTR19LQkRfS2V5cGFkQml0d2lzZVhPUiAgICAgICAgICA9IDBYQzIsCisgIEhJRF9VU0dfS0JEX0tleXBhZEV4cG9uZW50aWF0ZSAgICAgICAgPSAwWEMzLAorICBISURfVVNHX0tCRF9LZXlwYWRNb2R1bG8gICAgICAgICAgICAgID0gMFhDNCwKKyAgSElEX1VTR19LQkRfS2V5cGFkTGVzcyAgICAgICAgICAgICAgICA9IDBYQzUsCisgIEhJRF9VU0dfS0JEX0tleXBhZEdyZWF0ZXIgICAgICAgICAgICAgPSAwWEM2LAorICBISURfVVNHX0tCRF9LZXlwYWRCaXR3aXNlQU5EICAgICAgICAgID0gMFhDNywKKyAgSElEX1VTR19LQkRfS2V5cGFkQm9vbGVhbkFORCAgICAgICAgICA9IDBYQzgsCisgIEhJRF9VU0dfS0JEX0tleXBhZEJpdHdpc2VPUiAgICAgICAgICAgPSAwWEM5LAorICBISURfVVNHX0tCRF9LZXlwYWRCb29sZWFuT1IgICAgICAgICAgID0gMFhDQSwKKyAgSElEX1VTR19LQkRfS2V5cGFkQ29sb24gICAgICAgICAgICAgICA9IDBYQ0IsCisgIEhJRF9VU0dfS0JEX0tleXBhZE51bWJlciAgICAgICAgICAgICAgPSAwWENDLAorICBISURfVVNHX0tCRF9LZXlwYWRTcGFjZSAgICAgICAgICAgICAgID0gMFhDRCwKKyAgSElEX1VTR19LQkRfS2V5cGFkQXQgICAgICAgICAgICAgICAgICA9IDBYQ0UsCisgIEhJRF9VU0dfS0JEX0tleXBhZEJvbGVhbk5PVCAgICAgICAgICAgPSAwWENGLAorICBISURfVVNHX0tCRF9LZXlwYWRNZW1vcnlTdG9yZSAgICAgICAgID0gMFhEMCwKKyAgSElEX1VTR19LQkRfS2V5cGFkTWVtb3J5UmVjYWxsICAgICAgICA9IDBYRDEsCisgIEhJRF9VU0dfS0JEX0tleXBhZE1lbW9yeUNsZWFyICAgICAgICAgPSAwWEQyLAorICBISURfVVNHX0tCRF9LZXlwYWRNZW1vcnlBZGQgICAgICAgICAgID0gMFhEMywKKyAgSElEX1VTR19LQkRfS2V5cGFkTWVtb3J5U3VidHJhY3QgICAgICA9IDBYRDQsCisgIEhJRF9VU0dfS0JEX0tleXBhZE1lbW9yeU11bHRpcGx5ICAgICAgPSAwWEQ1LAorICBISURfVVNHX0tCRF9LZXlwYWRNZW1vcnlEaXZpZGUgICAgICAgID0gMFhENiwKKyAgSElEX1VTR19LQkRfS2V5cGFkUGx1c01pbnVzICAgICAgICAgICA9IDBYRDcsCisgIEhJRF9VU0dfS0JEX0tleXBhZENsZWFyICAgICAgICAgICAgICAgPSAwWEQ4LAorICBISURfVVNHX0tCRF9LZXlwYWRDbGVhckVudHJ5ICAgICAgICAgID0gMFhEOSwKKyAgSElEX1VTR19LQkRfS2V5cGFkQmluYXJ5ICAgICAgICAgICAgICA9IDBYREEsCisgIEhJRF9VU0dfS0JEX0tleXBhZE9jdGFsICAgICAgICAgICAgICAgPSAwWERCLAorICBISURfVVNHX0tCRF9LZXlwYWREZWNpbWFsICAgICAgICAgICAgID0gMFhEQywKKyAgSElEX1VTR19LQkRfS2V5cGFkSGV4YWRlY2ltYWwgICAgICAgICA9IDBYREQsCisgIEhJRF9VU0dfS0JEX0tleWJvYXJkTGVmdENvbnRyb2wgICAgICAgPSAwWEUwLAorICBISURfVVNHX0tCRF9LZXlib2FyZExlZnRTaGlmdCAgICAgICAgID0gMFhFMSwKKyAgSElEX1VTR19LQkRfS2V5Ym9hcmRMZWZ0QWx0ICAgICAgICAgICA9IDBYRTIsCisgIEhJRF9VU0dfS0JEX0tleWJvYXJkTGVmdEdVSSAgICAgICAgICAgPSAwWEUzLAorICBISURfVVNHX0tCRF9LZXlib2FyZFJpZ2h0Q29udHJvbCAgICAgID0gMFhFNCwKKyAgSElEX1VTR19LQkRfS2V5Ym9hcmRSaWdodFNoaWZ0ICAgICAgICA9IDBYRTUsCisgIEhJRF9VU0dfS0JEX0tleWJvYXJkUmlnaHRBbHQgICAgICAgICAgPSAwWEU2LAorICBISURfVVNHX0tCRF9LZXlib2FyZFJpZ2h0R1VJICAgICAgICAgID0gMFhFNywKK30gSGlkS2V5Ym9hcmRVc2FnZTsKKwordHlwZWRlZiBlbnVtIHsKKyAgSElEX1VTR19MRURfTnVtTG9jayAgICAgICAgICAgICAgICAgPSAwWDAxLAorICBISURfVVNHX0xFRF9DYXBzTG9jayAgICAgICAgICAgICAgICA9IDBYMDIsCisgIEhJRF9VU0dfTEVEX1Njcm9sbExvY2sgICAgICAgICAgICAgID0gMFgwMywKKyAgSElEX1VTR19MRURfQ29tcG9zZSAgICAgICAgICAgICAgICAgPSAwWDA0LAorICBISURfVVNHX0xFRF9LYW5hICAgICAgICAgICAgICAgICAgICA9IDBYMDUsCisgIEhJRF9VU0dfTEVEX1Bvd2VyICAgICAgICAgICAgICAgICAgID0gMFgwNiwKKyAgSElEX1VTR19MRURfU2hpZnQgICAgICAgICAgICAgICAgICAgPSAwWDA3LAorICBISURfVVNHX0xFRF9Eb05vdERpc3R1cmIgICAgICAgICAgICA9IDBYMDgsCisgIEhJRF9VU0dfTEVEX011dGUgICAgICAgICAgICAgICAgICAgID0gMFgwOSwKKyAgSElEX1VTR19MRURfVG9uZUVuYWJsZSAgICAgICAgICAgICAgPSAwWDBBLAorICBISURfVVNHX0xFRF9IaWdoQ3V0RmlsdGVyICAgICAgICAgICA9IDBYMEIsCisgIEhJRF9VU0dfTEVEX0xvd0N1dEZpbHRlciAgICAgICAgICAgID0gMFgwQywKKyAgSElEX1VTR19MRURfRXF1YWxpemVyRW5hYmxlICAgICAgICAgPSAwWDBELAorICBISURfVVNHX0xFRF9Tb3VuZEZpZWxkT24gICAgICAgICAgICA9IDBYMEUsCisgIEhJRF9VU0dfTEVEX1N1cnJvdW5kT24gICAgICAgICAgICAgID0gMFgwRiwKKyAgSElEX1VTR19MRURfUmVwZWF0ICAgICAgICAgICAgICAgICAgPSAwWDEwLAorICBISURfVVNHX0xFRF9TdGVyZW8gICAgICAgICAgICAgICAgICA9IDBYMTEsCisgIEhJRF9VU0dfTEVEX1NhbXBsaW5nUmF0ZURldGVjdCAgICAgID0gMFgxMiwKKyAgSElEX1VTR19MRURfU3Bpbm5pbmcgICAgICAgICAgICAgICAgPSAwWDEzLAorICBISURfVVNHX0xFRF9DQVYgICAgICAgICAgICAgICAgICAgICA9IDBYMTQsCisgIEhJRF9VU0dfTEVEX0NMViAgICAgICAgICAgICAgICAgICAgID0gMFgxNSwKKyAgSElEX1VTR19MRURfUmVjb3JkaW5nRm9ybWF0RGV0ZWN0ICAgPSAwWDE2LAorICBISURfVVNHX0xFRF9PZmZIb29rICAgICAgICAgICAgICAgICA9IDBYMTcsCisgIEhJRF9VU0dfTEVEX1JpbmcgICAgICAgICAgICAgICAgICAgID0gMFgxOCwKKyAgSElEX1VTR19MRURfTWVzc2FnZVdhaXRpbmcgICAgICAgICAgPSAwWDE5LAorICBISURfVVNHX0xFRF9EYXRhTW9kZSAgICAgICAgICAgICAgICA9IDBYMUEsCisgIEhJRF9VU0dfTEVEX0JhdHRlcnlPcGVyYXRpb24gICAgICAgID0gMFgxQiwKKyAgSElEX1VTR19MRURfQmF0dGVyeU9LICAgICAgICAgICAgICAgPSAwWDFDLAorICBISURfVVNHX0xFRF9CYXR0ZXJ5TG93ICAgICAgICAgICAgICA9IDBYMUQsCisgIEhJRF9VU0dfTEVEX1NwZWFrZXIgICAgICAgICAgICAgICAgID0gMFgxRSwKKyAgSElEX1VTR19MRURfSGVhZFNldCAgICAgICAgICAgICAgICAgPSAwWDFGLAorICBISURfVVNHX0xFRF9Ib2xkICAgICAgICAgICAgICAgICAgICA9IDBYMjAsCisgIEhJRF9VU0dfTEVEX01pY3JvcGhvbmUgICAgICAgICAgICAgID0gMFgyMSwKKyAgSElEX1VTR19MRURfQ292ZXJhZ2UgICAgICAgICAgICAgICAgPSAwWDIyLAorICBISURfVVNHX0xFRF9OaWdodE1vZGUgICAgICAgICAgICAgICA9IDBYMjMsCisgIEhJRF9VU0dfTEVEX1NlbmRDYWxscyAgICAgICAgICAgICAgID0gMFgyNCwKKyAgSElEX1VTR19MRURfQ2FsbFBpY2t1cCAgICAgICAgICAgICAgPSAwWDI1LAorICBISURfVVNHX0xFRF9Db25mZXJlbmNlICAgICAgICAgICAgICA9IDBYMjYsCisgIEhJRF9VU0dfTEVEX1N0YW5kQnkgICAgICAgICAgICAgICAgID0gMFgyNywKKyAgSElEX1VTR19MRURfQ2FtZXJhT24gICAgICAgICAgICAgICAgPSAwWDI4LAorICBISURfVVNHX0xFRF9DYW1lcmFPZmYgICAgICAgICAgICAgICA9IDBYMjksCisgIEhJRF9VU0dfTEVEX09uTGluZSAgICAgICAgICAgICAgICAgID0gMFgyQSwKKyAgSElEX1VTR19MRURfT2ZmTGluZSAgICAgICAgICAgICAgICAgPSAwWDJCLAorICBISURfVVNHX0xFRF9CdXN5ICAgICAgICAgICAgICAgICAgICA9IDBYMkMsCisgIEhJRF9VU0dfTEVEX1JlYWR5ICAgICAgICAgICAgICAgICAgID0gMFgyRCwKKyAgSElEX1VTR19MRURfUGFwZXJPdXQgICAgICAgICAgICAgICAgPSAwWDJFLAorICBISURfVVNHX0xFRF9QYXBlckphbSAgICAgICAgICAgICAgICA9IDBYMkYsCisgIEhJRF9VU0dfTEVEX1JlbW90ZSAgICAgICAgICAgICAgICAgID0gMFgzMCwKKyAgSElEX1VTR19MRURfRm9yd2FyZCAgICAgICAgICAgICAgICAgPSAwWDMxLAorICBISURfVVNHX0xFRF9SZXZlcnNlICAgICAgICAgICAgICAgICA9IDBYMzIsCisgIEhJRF9VU0dfTEVEX1N0b3AgICAgICAgICAgICAgICAgICAgID0gMFgzMywKKyAgSElEX1VTR19MRURfUmV3aW5kICAgICAgICAgICAgICAgICAgPSAwWDM0LAorICBISURfVVNHX0xFRF9GYXN0Rm9yd2FyZCAgICAgICAgICAgICA9IDBYMzUsCisgIEhJRF9VU0dfTEVEX1BsYXkgICAgICAgICAgICAgICAgICAgID0gMFgzNiwKKyAgSElEX1VTR19MRURfUGF1c2UgICAgICAgICAgICAgICAgICAgPSAwWDM3LAorICBISURfVVNHX0xFRF9SZWNvcmQgICAgICAgICAgICAgICAgICA9IDBYMzgsCisgIEhJRF9VU0dfTEVEX0Vycm9yICAgICAgICAgICAgICAgICAgID0gMFgzOSwKKyAgSElEX1VTR19MRURfVXNhZ2VTZWxlY3RlZEluZGljYXRvciAgPSAwWDNBLAorICBISURfVVNHX0xFRF9Vc2FnZUluVXNlSW5kaWNhdG9yICAgICA9IDBYM0IsCisgIEhJRF9VU0dfTEVEX1VzYWdlTXVsdGlNb2RlSW5kaWNhdG9yID0gMFgzQywKKyAgSElEX1VTR19MRURfSW5kaWNhdG9yT24gICAgICAgICAgICAgPSAwWDNELAorICBISURfVVNHX0xFRF9JbmRpY2F0b3JGbGFzaCAgICAgICAgICA9IDBYM0UsCisgIEhJRF9VU0dfTEVEX0luZGljYXRvclNsb3dCbGluayAgICAgID0gMFgzRiwKKyAgSElEX1VTR19MRURfSW5kaWNhdG9yRmFzdEJsaW5rICAgICAgPSAwWDQwLAorICBISURfVVNHX0xFRF9JbmRpY2F0b3JPZmYgICAgICAgICAgICA9IDBYNDEsCisgIEhJRF9VU0dfTEVEX0ZsYXNoT25UaW1lICAgICAgICAgICAgID0gMFg0MiwKKyAgSElEX1VTR19MRURfU2xvd0JsaW5rT25UaW1lICAgICAgICAgPSAwWDQzLAorICBISURfVVNHX0xFRF9TbG93QmxpbmtPZmZUaW1lICAgICAgICA9IDBYNDQsCisgIEhJRF9VU0dfTEVEX0Zhc3RCbGlua09uVGltZSAgICAgICAgID0gMFg0NSwKKyAgSElEX1VTR19MRURfRmFzdEJsaW5rT2ZmVGltZSAgICAgICAgPSAwWDQ2LAorICBISURfVVNHX0xFRF9Vc2FnZUluZGljYXRvckNvbG9yICAgICA9IDBYNDcsCisgIEhJRF9VU0dfTEVEX0luZGljYXRvclJlZCAgICAgICAgICAgID0gMFg0OCwKKyAgSElEX1VTR19MRURfSW5kaWNhdG9yR3JlZW4gICAgICAgICAgPSAwWDQ5LAorICBISURfVVNHX0xFRF9JbmRpY2F0b3JBbWJlciAgICAgICAgICA9IDBYNEEsCisgIEhJRF9VU0dfTEVEX0dlbmVyaWNJbmRpY2F0b3IgICAgICAgID0gMFg0QiwKKyAgSElEX1VTR19MRURfU3lzdGVtU3VzcGVuZCAgICAgICAgICAgPSAwWDRDLAorICBISURfVVNHX0xFRF9FeHRlcm5hbFBvd2VyQ29ubmVjdGVkICA9IDBYNEQsCit9IEhpZExFRHNVc2FnZTsKKwordHlwZWRlZiBlbnVtIHsKKyAgSElEX1VTR19CUkxfQnJhaWxsZURpc3BsYXkgICAgICAgICA9IDBYMDAxLAorICBISURfVVNHX0JSTF9CcmFpbGxlUm93ICAgICAgICAgICAgID0gMFgwMDIsCisgIEhJRF9VU0dfQlJMXzhEb3RDZWxsICAgICAgICAgICAgICAgPSAwWDAwMywKKyAgSElEX1VTR19CUkxfNkRvdENlbGwgICAgICAgICAgICAgICA9IDBYMDA0LAorICBISURfVVNHX0JSTF9DZWxsQ291bnQgICAgICAgICAgICAgID0gMFgwMDUsCisgIEhJRF9VU0dfQlJMX1NjcmVlblJlYWRlckNvbnRyb2wgICAgPSAwWDAwNiwKKyAgSElEX1VTR19CUkxfU2NyZWVuUmVhZGVySWRlbnRpZmllciA9IDBYMDA3LAorICBISURfVVNHX0JSTF9Sb3V0ZXJTZXQxICAgICAgICAgICAgID0gMFgwRkEsCisgIEhJRF9VU0dfQlJMX1JvdXRlclNldDIgICAgICAgICAgICAgPSAwWDBGQiwKKyAgSElEX1VTR19CUkxfUm91dGVyU2V0MyAgICAgICAgICAgICA9IDBYMEZDLAorICBISURfVVNHX0JSTF9Sb3V0ZXJLZXkgICAgICAgICAgICAgID0gMFgxMDAsCisgIEhJRF9VU0dfQlJMX1Jvd1JvdXRlcktleSAgICAgICAgICAgPSAwWDEwMSwKKyAgSElEX1VTR19CUkxfQnJhaWxsZUJ1dHRvbnMgICAgICAgICA9IDBYMjAwLAorICBISURfVVNHX0JSTF9LZXlib2FyZERvdDEgICAgICAgICAgID0gMFgyMDEsCisgIEhJRF9VU0dfQlJMX0tleWJvYXJkRG90MiAgICAgICAgICAgPSAwWDIwMiwKKyAgSElEX1VTR19CUkxfS2V5Ym9hcmREb3QzICAgICAgICAgICA9IDBYMjAzLAorICBISURfVVNHX0JSTF9LZXlib2FyZERvdDQgICAgICAgICAgID0gMFgyMDQsCisgIEhJRF9VU0dfQlJMX0tleWJvYXJkRG90NSAgICAgICAgICAgPSAwWDIwNSwKKyAgSElEX1VTR19CUkxfS2V5Ym9hcmREb3Q2ICAgICAgICAgICA9IDBYMjA2LAorICBISURfVVNHX0JSTF9LZXlib2FyZERvdDcgICAgICAgICAgID0gMFgyMDcsCisgIEhJRF9VU0dfQlJMX0tleWJvYXJkRG90OCAgICAgICAgICAgPSAwWDIwOCwKKyAgSElEX1VTR19CUkxfS2V5Ym9hcmRTcGFjZSAgICAgICAgICA9IDBYMjA5LAorICBISURfVVNHX0JSTF9LZXlib2FyZExlZnRTcGFjZSAgICAgID0gMFgyMEEsCisgIEhJRF9VU0dfQlJMX0tleWJvYXJkUmlnaHRTcGFjZSAgICAgPSAwWDIwQiwKKyAgSElEX1VTR19CUkxfRnJvbnRDb250cm9scyAgICAgICAgICA9IDBYMjBDLAorICBISURfVVNHX0JSTF9MZWZ0Q29udHJvbHMgICAgICAgICAgID0gMFgyMEQsCisgIEhJRF9VU0dfQlJMX1JpZ2h0Q29udHJvbHMgICAgICAgICAgPSAwWDIwRSwKKyAgSElEX1VTR19CUkxfVG9wQ29udHJvbHMgICAgICAgICAgICA9IDBYMjBGLAorICBISURfVVNHX0JSTF9Kb3lzdGlja0NlbnRlciAgICAgICAgID0gMFgyMTAsCisgIEhJRF9VU0dfQlJMX0pveXN0aWNrVXAgICAgICAgICAgICAgPSAwWDIxMSwKKyAgSElEX1VTR19CUkxfSm95c3RpY2tEb3duICAgICAgICAgICA9IDBYMjEyLAorICBISURfVVNHX0JSTF9Kb3lzdGlja0xlZnQgICAgICAgICAgID0gMFgyMTMsCisgIEhJRF9VU0dfQlJMX0pveXN0aWNrUmlnaHQgICAgICAgICAgPSAwWDIxNCwKKyAgSElEX1VTR19CUkxfRFBhZENlbnRlciAgICAgICAgICAgICA9IDBYMjE1LAorICBISURfVVNHX0JSTF9EUGFkVXAgICAgICAgICAgICAgICAgID0gMFgyMTYsCisgIEhJRF9VU0dfQlJMX0RQYWREb3duICAgICAgICAgICAgICAgPSAwWDIxNywKKyAgSElEX1VTR19CUkxfRFBhZExlZnQgICAgICAgICAgICAgICA9IDBYMjE4LAorICBISURfVVNHX0JSTF9EUGFkUmlnaHQgICAgICAgICAgICAgID0gMFgyMTksCisgIEhJRF9VU0dfQlJMX1BhbkxlZnQgICAgICAgICAgICAgICAgPSAwWDIxQSwKKyAgSElEX1VTR19CUkxfUGFuUmlnaHQgICAgICAgICAgICAgICA9IDBYMjFCLAorICBISURfVVNHX0JSTF9Sb2NrZXJVcCAgICAgICAgICAgICAgID0gMFgyMUMsCisgIEhJRF9VU0dfQlJMX1JvY2tlckRvd24gICAgICAgICAgICAgPSAwWDIxRCwKKyAgSElEX1VTR19CUkxfUm9ja2VyUHJlc3MgICAgICAgICAgICA9IDBYMjFFLAorfSBIaWRCcmFpbGxlVXNhZ2U7CisKK3R5cGVkZWYgZW51bSB7CisgIEhJRF9VUEdfR2VuZXJpY0Rlc2t0b3AgICAgICAgICAgPSAwWDAxLAorICBISURfVVBHX1NpbXVsYXRpb24gICAgICAgICAgICAgID0gMFgwMiwKKyAgSElEX1VQR19WaXJ0dWFsUmVhbGl0eSAgICAgICAgICA9IDBYMDMsCisgIEhJRF9VUEdfU3BvcnQgICAgICAgICAgICAgICAgICAgPSAwWDA0LAorICBISURfVVBHX0dhbWUgICAgICAgICAgICAgICAgICAgID0gMFgwNSwKKyAgSElEX1VQR19HZW5lcmljRGV2aWNlICAgICAgICAgICA9IDBYMDYsCisgIEhJRF9VUEdfS2V5Ym9hcmRfS2V5cGFkICAgICAgICAgPSAwWDA3LAorICBISURfVVBHX0xFRHMgICAgICAgICAgICAgICAgICAgID0gMFgwOCwKKyAgSElEX1VQR19CdXR0b24gICAgICAgICAgICAgICAgICA9IDBYMDksCisgIEhJRF9VUEdfT3JkaW5hbCAgICAgICAgICAgICAgICAgPSAwWDBBLAorICBISURfVVBHX1RlbGVwaG9ueSAgICAgICAgICAgICAgID0gMFgwQiwKKyAgSElEX1VQR19Db25zdW1lciAgICAgICAgICAgICAgICA9IDBYMEMsCisgIEhJRF9VUEdfRGlnaXRpemVyICAgICAgICAgICAgICAgPSAwWDBELAorICBISURfVVBHX1BoeXNpY2FsSW50ZXJmYWNlRGV2aWNlID0gMFgwRiwKKyAgSElEX1VQR19Vbmljb2RlICAgICAgICAgICAgICAgICA9IDBYMTAsCisgIEhJRF9VUEdfQWxwaGFudW1lcmljRGlzcGxheSAgICAgPSAwWDE0LAorICBISURfVVBHX01lZGljYWxJbnN0cnVtZW50cyAgICAgID0gMFg0MCwKKyAgSElEX1VQR19CcmFpbGxlICAgICAgICAgICAgICAgICA9IDBYNDEsCisgIEhJRF9VUEdfQmFyQ29kZVNjYW5uZXIgICAgICAgICAgPSAwWDhDLAorICBISURfVVBHX1NjYWxlICAgICAgICAgICAgICAgICAgID0gMFg4RCwKKyAgSElEX1VQR19NYWduZXRpY1N0cmlwZVJlYWRlciAgICA9IDBYOEUsCisgIEhJRF9VUEdfQ2FtZXJhICAgICAgICAgICAgICAgICAgPSAwWDkwLAorICBISURfVVBHX0FyY2FkZSAgICAgICAgICAgICAgICAgID0gMFg5MSwKK30gSGlkVXNhZ2VQYWdlOworCit0eXBlZGVmIGVudW0geworICBISURfVVNHX0ZMR19DT05TVEFOVCAgICAgID0gMFgwMDEsCisgIEhJRF9VU0dfRkxHX1ZBUklBQkxFICAgICAgPSAwWDAwMiwKKyAgSElEX1VTR19GTEdfUkVMQVRJVkUgICAgICA9IDBYMDA0LAorICBISURfVVNHX0ZMR19XUkFQICAgICAgICAgID0gMFgwMDgsCisgIEhJRF9VU0dfRkxHX05PTl9MSU5FQVIgICAgPSAwWDAxMCwKKyAgSElEX1VTR19GTEdfTk9fUFJFRkVSUkVEICA9IDBYMDIwLAorICBISURfVVNHX0ZMR19OVUxMX1NUQVRFICAgID0gMFgwNDAsCisgIEhJRF9VU0dfRkxHX1ZPTEFUSUxFICAgICAgPSAwWDA4MCwKKyAgSElEX1VTR19GTEdfQlVGRkVSRURfQllURSA9IDBYMTAwLAorCisgIEhJRF9VU0dfRkxHX0RBVEEgICAgICAgICAgID0gMCwgLy8gIUhJRF9VU0dfRkxHX0NPTlNUQU5ULAorICBISURfVVNHX0ZMR19BUlJBWSAgICAgICAgICA9IDAsIC8vICFISURfVVNHX0ZMR19WQVJJQUJMRSwKKyAgSElEX1VTR19GTEdfQUJTT0xVVEUgICAgICAgPSAwLCAvLyAhSElEX1VTR19GTEFHX1JFTEFUSVZFLAorfSBIaWRVc2FnZUZsYWdzOworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZiAvKiBfX2NwbHVzcGx1cyAqLworCisjZW5kaWYgLyogQlJMVFRZX0lOQ0xVREVEX0hJRF9ERUZTICovCmRpZmYgLS1naXQgYS9IZWFkZXJzL2hpZF9pbnNwZWN0LmggYi9IZWFkZXJzL2hpZF9pbnNwZWN0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTFmMzMxMAotLS0gL2Rldi9udWxsCisrKyBiL0hlYWRlcnMvaGlkX2luc3BlY3QuaApAQCAtMCwwICsxLDQ1IEBACisvKgorICogQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyAqICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyAqCisgKiBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorICoKKyAqIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyAqCisgKiBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisgKi8KKworI2lmbmRlZiBCUkxUVFlfSU5DTFVERURfSElEX0lOU1BFQ1QKKyNkZWZpbmUgQlJMVFRZX0lOQ0xVREVEX0hJRF9JTlNQRUNUCisKKyNpbmNsdWRlICJoaWRfdHlwZXMuaCIKKyNpbmNsdWRlICJzdHJmbXRoLmgiCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYgLyogX19jcGx1c3BsdXMgKi8KKwordHlwZWRlZiBzdHJ1Y3QgeworICB1bnNpZ25lZCBjaGFyIGNvdW50OworICBIaWRSZXBvcnRJZGVudGlmaWVyIGlkZW50aWZpZXJzW107Cit9IEhpZFJlcG9ydHM7CisKK2V4dGVybiBIaWRSZXBvcnRzICpoaWRHZXRSZXBvcnRzIChjb25zdCBIaWRJdGVtc0Rlc2NyaXB0b3IgKml0ZW1zKTsKKwordHlwZWRlZiBpbnQgSGlkSXRlbUxpc3RlciAoY29uc3QgY2hhciAqbGluZSwgdm9pZCAqZGF0YSk7CitleHRlcm4gaW50IGhpZExpc3RJdGVtcyAoY29uc3QgSGlkSXRlbXNEZXNjcmlwdG9yICppdGVtcywgSGlkSXRlbUxpc3RlciAqbGlzdEl0ZW0sIHZvaWQgKmRhdGEpOworCitleHRlcm4gU1RSX0RFQ0xBUkVfRk9STUFUVEVSKGhpZEZvcm1hdFVzYWdlRmxhZ3MsIEhpZFVuc2lnbmVkVmFsdWUgZmxhZ3MpOworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZiAvKiBfX2NwbHVzcGx1cyAqLworCisjZW5kaWYgLyogQlJMVFRZX0lOQ0xVREVEX0hJRF9JTlNQRUNUICovCmRpZmYgLS1naXQgYS9IZWFkZXJzL2hpZF9pdGVtcy5oIGIvSGVhZGVycy9oaWRfaXRlbXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wY2Y5ZjU4Ci0tLSAvZGV2L251bGwKKysrIGIvSGVhZGVycy9oaWRfaXRlbXMuaApAQCAtMCwwICsxLDU3IEBACisvKgorICogQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyAqICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyAqCisgKiBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorICoKKyAqIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyAqCisgKiBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisgKi8KKworI2lmbmRlZiBCUkxUVFlfSU5DTFVERURfSElEX0lURU1TCisjZGVmaW5lIEJSTFRUWV9JTkNMVURFRF9ISURfSVRFTVMKKworI2luY2x1ZGUgImhpZF90eXBlcy5oIgorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmIC8qIF9fY3BsdXNwbHVzICovCisKK3R5cGVkZWYgdW5pb24geworICBIaWRVbnNpZ25lZFZhbHVlIHU7CisgIEhpZFNpZ25lZFZhbHVlIHM7Cit9IEhpZEl0ZW1WYWx1ZTsKKwordHlwZWRlZiBzdHJ1Y3QgeworICBIaWRJdGVtVmFsdWUgdmFsdWU7CisgIHVpbnQ4X3QgdGFnOworICB1aW50OF90IHZhbHVlU2l6ZTsKK30gSGlkSXRlbTsKKworZXh0ZXJuIGludCBoaWROZXh0SXRlbSAoCisgIEhpZEl0ZW0gKml0ZW0sCisgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKipieXRlcywKKyAgc2l6ZV90ICpjb3VudAorKTsKKworZXh0ZXJuIHVuc2lnbmVkIGNoYXIgaGlkSXRlbVZhbHVlU2l6ZSAodW5zaWduZWQgY2hhciBpdGVtKTsKKworZXh0ZXJuIGludCBoaWRSZXBvcnRTaXplICgKKyAgY29uc3QgSGlkSXRlbXNEZXNjcmlwdG9yICppdGVtcywKKyAgSGlkUmVwb3J0SWRlbnRpZmllciBpZGVudGlmaWVyLAorICBIaWRSZXBvcnRTaXplICpzaXplCispOworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZiAvKiBfX2NwbHVzcGx1cyAqLworCisjZW5kaWYgLyogQlJMVFRZX0lOQ0xVREVEX0hJRF9JVEVNUyAqLwpkaWZmIC0tZ2l0IGEvSGVhZGVycy9oaWRfdGFibGVzLmggYi9IZWFkZXJzL2hpZF90YWJsZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZWYyNDRmCi0tLSAvZGV2L251bGwKKysrIGIvSGVhZGVycy9oaWRfdGFibGVzLmgKQEAgLTAsMCArMSwxMjEgQEAKKy8qCisgKiBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorICogICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorICoKKyAqIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorICoKKyAqIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyAqLworCisjaWZuZGVmIEJSTFRUWV9JTkNMVURFRF9ISURfVEFCTEVTCisjZGVmaW5lIEJSTFRUWV9JTkNMVURFRF9ISURfVEFCTEVTCisKKyNpbmNsdWRlICJoaWRfdHlwZXMuaCIKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZiAvKiBfX2NwbHVzcGx1cyAqLworCit0eXBlZGVmIHN0cnVjdCB7CisgIGNvbnN0IGNoYXIgKm5hbWU7CisgIEhpZFVuc2lnbmVkVmFsdWUgdmFsdWU7Cit9IEhpZFRhYmxlRW50cnlIZWFkZXI7CisKKyNkZWZpbmUgSElEX1RBQkxFX0VOVFJZX0hFQURFUiBIaWRUYWJsZUVudHJ5SGVhZGVyIGhlYWRlcgorCisjZGVmaW5lIEhJRF9UQUJMRV9FTlRSWShwcmVmaXgsIHN1ZmZpeCwgLi4uKSB7IFwKKyAgLmhlYWRlciA9IHsgXAorICAgIC5uYW1lID0gI3N1ZmZpeCwgXAorICAgIC52YWx1ZSA9IHByZWZpeCAjIyBfICMjIHN1ZmZpeCwgXAorICB9LCBcCisgIF9fVkFfQVJHU19fIFwKK30KKwordHlwZWRlZiBzdHJ1Y3QgeworICBjb25zdCB2b2lkICpjb25zdCBlbnRyaWVzOworICBzaXplX3QgY29uc3Qgc2l6ZTsKKyAgc2l6ZV90IGNvbnN0IGNvdW50OworICBjb25zdCBIaWRUYWJsZUVudHJ5SGVhZGVyICoqc29ydGVkOworfSBIaWRUYWJsZTsKKworI2RlZmluZSBISURfQkVHSU5fVEFCTEUodHlwZSkgc3RhdGljIGNvbnN0IEhpZCMjdHlwZSMjRW50cnkgaGlkIyN0eXBlIyNFbnRyaWVzW10gPSB7CisKKyNkZWZpbmUgSElEX0VORF9UQUJMRSh0eXBlKSB9OyBcCitzdGF0aWMgSGlkVGFibGUgaGlkIyN0eXBlIyNUYWJsZSA9IHsgXAorICAuZW50cmllcyA9IGhpZCMjdHlwZSMjRW50cmllcywgXAorICAuc2l6ZSA9IHNpemVvZihoaWQjI3R5cGUjI0VudHJpZXNbMF0pLCBcCisgIC5jb3VudCA9IEFSUkFZX0NPVU5UKGhpZCMjdHlwZSMjRW50cmllcyksIFwKKyAgLnNvcnRlZCA9IE5VTEwgXAorfTsgXAorY29uc3QgSGlkIyN0eXBlIyNFbnRyeSAqaGlkIyN0eXBlIyNFbnRyeSAoSGlkVW5zaWduZWRWYWx1ZSB2YWx1ZSkgeyBcCisgIHJldHVybiBoaWRUYWJsZUVudHJ5KCZoaWQjI3R5cGUjI1RhYmxlLCB2YWx1ZSk7IFwKK30KKworI2RlZmluZSBISURfVEFCTEVfTUVUSE9EUyh0eXBlKSBcCitleHRlcm4gY29uc3QgSGlkIyN0eXBlIyNFbnRyeSAqaGlkIyN0eXBlIyNFbnRyeSAoSGlkVW5zaWduZWRWYWx1ZSB2YWx1ZSk7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgSElEX1RBQkxFX0VOVFJZX0hFQURFUjsKK30gSGlkSXRlbVRhZ0VudHJ5OworSElEX1RBQkxFX01FVEhPRFMoSXRlbVRhZykKKwordHlwZWRlZiBzdHJ1Y3QgeworICBISURfVEFCTEVfRU5UUllfSEVBREVSOworfSBIaWRDb2xsZWN0aW9uVHlwZUVudHJ5OworSElEX1RBQkxFX01FVEhPRFMoQ29sbGVjdGlvblR5cGUpCisKK3R5cGVkZWYgc3RydWN0IHsKKyAgSElEX1RBQkxFX0VOVFJZX0hFQURFUjsKK30gSGlkVXNhZ2VUeXBlRW50cnk7CitISURfVEFCTEVfTUVUSE9EUyhVc2FnZVR5cGUpCisKKyNkZWZpbmUgSElEX1VTQUdFX0VOVFJZX0hFQURFUiBcCisgIEhJRF9UQUJMRV9FTlRSWV9IRUFERVI7IFwKKyAgdW5zaWduZWQgY2hhciB1c2FnZVR5cGUKKwordHlwZWRlZiBzdHJ1Y3QgeworICBISURfVVNBR0VfRU5UUllfSEVBREVSOworfSBIaWRVc2FnZUVudHJ5SGVhZGVyOworCit0eXBlZGVmIHN0cnVjdCB7CisgIEhJRF9VU0FHRV9FTlRSWV9IRUFERVI7Cit9IEhpZEdlbmVyaWNEZXNrdG9wVXNhZ2VFbnRyeTsKK0hJRF9UQUJMRV9NRVRIT0RTKEdlbmVyaWNEZXNrdG9wVXNhZ2UpCisKK3R5cGVkZWYgc3RydWN0IHsKKyAgSElEX1VTQUdFX0VOVFJZX0hFQURFUjsKK30gSGlkS2V5Ym9hcmRVc2FnZUVudHJ5OworSElEX1RBQkxFX01FVEhPRFMoS2V5Ym9hcmRVc2FnZSkKKwordHlwZWRlZiBzdHJ1Y3QgeworICBISURfVVNBR0VfRU5UUllfSEVBREVSOworfSBIaWRMRURzVXNhZ2VFbnRyeTsKK0hJRF9UQUJMRV9NRVRIT0RTKExFRHNVc2FnZSkKKwordHlwZWRlZiBzdHJ1Y3QgeworICBISURfVVNBR0VfRU5UUllfSEVBREVSOworfSBIaWRCcmFpbGxlVXNhZ2VFbnRyeTsKK0hJRF9UQUJMRV9NRVRIT0RTKEJyYWlsbGVVc2FnZSkKKwordHlwZWRlZiBzdHJ1Y3QgeworICBISURfVEFCTEVfRU5UUllfSEVBREVSOworICBIaWRUYWJsZSAqdXNhZ2VUYWJsZTsKK30gSGlkVXNhZ2VQYWdlRW50cnk7CitISURfVEFCTEVfTUVUSE9EUyhVc2FnZVBhZ2UpCisKK2V4dGVybiBjb25zdCB2b2lkICpoaWRUYWJsZUVudHJ5IChIaWRUYWJsZSAqdGFibGUsIEhpZFVuc2lnbmVkVmFsdWUgdmFsdWUpOworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZiAvKiBfX2NwbHVzcGx1cyAqLworCisjZW5kaWYgLyogQlJMVFRZX0lOQ0xVREVEX0hJRF9UQUJMRVMgKi8KZGlmZiAtLWdpdCBhL0hlYWRlcnMvaGlkX3R5cGVzLmggYi9IZWFkZXJzL2hpZF90eXBlcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEzMGJkNzcKLS0tIC9kZXYvbnVsbAorKysgYi9IZWFkZXJzL2hpZF90eXBlcy5oCkBAIC0wLDAgKzEsOTQgQEAKKy8qCisgKiBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorICogICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorICoKKyAqIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorICoKKyAqIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyAqLworCisjaWZuZGVmIEJSTFRUWV9JTkNMVURFRF9ISURfVFlQRVMKKyNkZWZpbmUgQlJMVFRZX0lOQ0xVREVEX0hJRF9UWVBFUworCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmIC8qIF9fY3BsdXNwbHVzICovCisKK3R5cGVkZWYgdWludDE2X3QgSGlkRGV2aWNlSWRlbnRpZmllcjsKK3R5cGVkZWYgdWludDhfdCBIaWRSZXBvcnRJZGVudGlmaWVyOworCit0eXBlZGVmIHVpbnQzMl90IEhpZFVuc2lnbmVkVmFsdWU7Cit0eXBlZGVmIGludDMyX3QgSGlkU2lnbmVkVmFsdWU7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgc2l6ZV90IGNvdW50OworICB1bnNpZ25lZCBjaGFyIGJ5dGVzW107Cit9IEhpZEl0ZW1zRGVzY3JpcHRvcjsKKwordHlwZWRlZiBzdHJ1Y3QgeworICBzaXplX3QgaW5wdXQ7CisgIHNpemVfdCBvdXRwdXQ7CisgIHNpemVfdCBmZWF0dXJlOworfSBIaWRSZXBvcnRTaXplOworCit0eXBlZGVmIHN0cnVjdCB7CisgIEhpZERldmljZUlkZW50aWZpZXIgdmVuZG9ySWRlbnRpZmllcjsKKyAgSGlkRGV2aWNlSWRlbnRpZmllciBwcm9kdWN0SWRlbnRpZmllcjsKK30gSGlkQ29tbW9uUHJvcGVydGllczsKKwordHlwZWRlZiBzdHJ1Y3QgeworICBjb25zdCBjaGFyICptYW51ZmFjdHVyZXJOYW1lOworICBjb25zdCBjaGFyICpwcm9kdWN0RGVzY3JpcHRpb247CisgIGNvbnN0IGNoYXIgKnNlcmlhbE51bWJlcjsKK30gSGlkVVNCUHJvcGVydGllczsKKwordHlwZWRlZiBzdHJ1Y3QgeworICBjb25zdCBjaGFyICptYWNBZGRyZXNzOworICBjb25zdCBjaGFyICpkZXZpY2VOYW1lOworfSBIaWRCbHVldG9vdGhQcm9wZXJ0aWVzOworCit0eXBlZGVmIHN0cnVjdCB7CisgIEhpZENvbW1vblByb3BlcnRpZXMgY29tbW9uOworICBIaWRVU0JQcm9wZXJ0aWVzIHVzYjsKK30gSGlkVVNCRmlsdGVyOworCit0eXBlZGVmIHN0cnVjdCB7CisgIEhpZENvbW1vblByb3BlcnRpZXMgY29tbW9uOworICBIaWRCbHVldG9vdGhQcm9wZXJ0aWVzIGJsdWV0b290aDsKK30gSGlkQmx1ZXRvb3RoRmlsdGVyOworCit0eXBlZGVmIHN0cnVjdCB7CisgIEhpZENvbW1vblByb3BlcnRpZXMgY29tbW9uOworICBIaWRVU0JQcm9wZXJ0aWVzIHVzYjsKKyAgSGlkQmx1ZXRvb3RoUHJvcGVydGllcyBibHVldG9vdGg7CisKKyAgc3RydWN0IHsKKyAgICB1bnNpZ25lZCBjaGFyIHdhbnRVU0I6MTsKKyAgICB1bnNpZ25lZCBjaGFyIHdhbnRCbHVldG9vdGg6MTsKKyAgfSBmbGFnczsKK30gSGlkRmlsdGVyOworCit0eXBlZGVmIHN0cnVjdCB7CisgIGNvbnN0IHZvaWQgKmRhdGE7CisgIGNvbnN0IGNoYXIgKm5hbWU7CisgIEhpZERldmljZUlkZW50aWZpZXIgdmVuZG9yOworICBIaWREZXZpY2VJZGVudGlmaWVyIHByb2R1Y3Q7Cit9IEhpZE1vZGVsRW50cnk7CisKKyNkZWZpbmUgQkVHSU5fSElEX01PREVMX1RBQkxFIHN0YXRpYyBjb25zdCBIaWRNb2RlbEVudHJ5IGhpZE1vZGVsVGFibGVbXSA9IHsKKyNkZWZpbmUgRU5EX0hJRF9NT0RFTF9UQUJMRSB7IC5uYW1lPU5VTEwsIC52ZW5kb3I9MCB9IH07CisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmIC8qIF9fY3BsdXNwbHVzICovCisKKyNlbmRpZiAvKiBCUkxUVFlfSU5DTFVERURfSElEX1RZUEVTICovCmRpZmYgLS1naXQgYS9IZWFkZXJzL2hvc3RjbWQuaCBiL0hlYWRlcnMvaG9zdGNtZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEzYjVmNGQKLS0tIC9kZXYvbnVsbAorKysgYi9IZWFkZXJzL2hvc3RjbWQuaApAQCAtMCwwICsxLDQ5IEBACisvKgorICogQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyAqICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyAqCisgKiBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorICoKKyAqIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyAqCisgKiBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisgKi8KKworI2lmbmRlZiBCUkxUVFlfSU5DTFVERURfSE9TVENNRAorI2RlZmluZSBCUkxUVFlfSU5DTFVERURfSE9TVENNRAorCisjaW5jbHVkZSA8c3RkaW8uaD4KKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZiAvKiBfX2NwbHVzcGx1cyAqLworCit0eXBlZGVmIHN0cnVjdCB7CisgIEZJTEUgKipzdGFuZGFyZElucHV0OworICBGSUxFICoqc3RhbmRhcmRPdXRwdXQ7CisgIEZJTEUgKipzdGFuZGFyZEVycm9yOworCisgIHVuc2lnbmVkIGNoYXIgYXN5bmNocm9ub3VzIDogMTsKK30gSG9zdENvbW1hbmRPcHRpb25zOworCitleHRlcm4gdm9pZCBpbml0aWFsaXplSG9zdENvbW1hbmRPcHRpb25zIChIb3N0Q29tbWFuZE9wdGlvbnMgKm9wdGlvbnMpOworCitleHRlcm4gaW50IHJ1bkhvc3RDb21tYW5kICgKKyAgY29uc3QgY2hhciAqY29uc3QgKmNvbW1hbmQsCisgIGNvbnN0IEhvc3RDb21tYW5kT3B0aW9ucyAqb3B0aW9ucworKTsKKworZXh0ZXJuIGludCBleGVjdXRlSG9zdENvbW1hbmQgKGNvbnN0IGNoYXIgKmNvbnN0ICpjb21tYW5kKTsKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYgLyogX19jcGx1c3BsdXMgKi8KKworI2VuZGlmIC8qIEJSTFRUWV9JTkNMVURFRF9IT1NUQ01EICovCmRpZmYgLS1naXQgYS9IZWFkZXJzL2loZXguaCBiL0hlYWRlcnMvaWhleC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE4M2I0MjkKLS0tIC9kZXYvbnVsbAorKysgYi9IZWFkZXJzL2loZXguaApAQCAtMCwwICsxLDU3IEBACisvKgorICogQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyAqICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyAqCisgKiBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorICoKKyAqIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyAqCisgKiBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisgKi8KKworI2lmbmRlZiBCUkxUVFlfSU5DTFVERURfSUhFWAorI2RlZmluZSBCUkxUVFlfSU5DTFVERURfSUhFWAorCisjaW5jbHVkZSAiaWhleF90eXBlcy5oIgorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmIC8qIF9fY3BsdXNwbHVzICovCisKK2V4dGVybiBzaXplX3QgaWhleFJlY29yZExlbmd0aCAoc2l6ZV90IGNvdW50KTsKKworZXh0ZXJuIGludCBpaGV4TWFrZVJlY29yZCAoCisgIGNoYXIgKmJ1ZmZlciwgc2l6ZV90IHNpemUsCisgIEloZXhUeXBlIHR5cGUsIEloZXhBZGRyZXNzIGFkZHJlc3MsCisgIGNvbnN0IEloZXhCeXRlICpkYXRhLCBJaGV4Q291bnQgY291bnQKKyk7CisKK2V4dGVybiBpbnQgaWhleE1ha2VEYXRhUmVjb3JkICgKKyAgY2hhciAqYnVmZmVyLCBzaXplX3Qgc2l6ZSwKKyAgSWhleEFkZHJlc3MgYWRkcmVzcywgY29uc3QgSWhleEJ5dGUgKmRhdGEsIEloZXhDb3VudCBjb3VudAorKTsKKworZXh0ZXJuIGludCBpaGV4TWFrZUVuZFJlY29yZCAoY2hhciAqYnVmZmVyLCBzaXplX3Qgc2l6ZSk7CisKK2V4dGVybiBpbnQgaWhleFByb2Nlc3NGaWxlICgKKyAgY29uc3QgY2hhciAqcGF0aCwgSWhleFJlY29yZEhhbmRsZXIgKmhhbmRsZXIsIHZvaWQgKmRhdGEKKyk7CisKKyNkZWZpbmUgSUhFWF9GSUxFU19TVUJESVJFQ1RPUlkgImZpcm13YXJlIgorI2RlZmluZSBJSEVYX0ZJTEVfRVhURU5TSU9OICIuaWhleCIKKworZXh0ZXJuIGNoYXIgKmloZXhFbnN1cmVFeHRlbnNpb24gKGNvbnN0IGNoYXIgKnBhdGgpOworZXh0ZXJuIGNoYXIgKmloZXhNYWtlUGF0aCAoY29uc3QgY2hhciAqZGlyZWN0b3J5LCBjb25zdCBjaGFyICpuYW1lKTsKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYgLyogX19jcGx1c3BsdXMgKi8KKworI2VuZGlmIC8qIEJSTFRUWV9JTkNMVURFRF9JSEVYICovCmRpZmYgLS1naXQgYS9IZWFkZXJzL2loZXhfdHlwZXMuaCBiL0hlYWRlcnMvaWhleF90eXBlcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU5ZWMwYmEKLS0tIC9kZXYvbnVsbAorKysgYi9IZWFkZXJzL2loZXhfdHlwZXMuaApAQCAtMCwwICsxLDQ4IEBACisvKgorICogQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyAqICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyAqCisgKiBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorICoKKyAqIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyAqCisgKiBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisgKi8KKworI2lmbmRlZiBCUkxUVFlfSU5DTFVERURfSUhFWF9UWVBFUworI2RlZmluZSBCUkxUVFlfSU5DTFVERURfSUhFWF9UWVBFUworCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmIC8qIF9fY3BsdXNwbHVzICovCisKK3R5cGVkZWYgdWludDhfdCBJaGV4VHlwZTsKKyNkZWZpbmUgSUhFWF9UWVBFX0RBVEEgMFgwMAorI2RlZmluZSBJSEVYX1RZUEVfRU5EICAwWDAxCisKK3R5cGVkZWYgdWludDE2X3QgSWhleEFkZHJlc3M7Cit0eXBlZGVmIHVpbnQ4X3QgIEloZXhDb3VudDsKK3R5cGVkZWYgdWludDhfdCAgSWhleEJ5dGU7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgSWhleEFkZHJlc3MgYWRkcmVzczsKKyAgSWhleFR5cGUgdHlwZTsKKworICBJaGV4Q291bnQgY291bnQ7CisgIEloZXhCeXRlIGRhdGFbXTsKK30gSWhleFBhcnNlZFJlY29yZDsKKwordHlwZWRlZiBpbnQgSWhleFJlY29yZEhhbmRsZXIgKGNvbnN0IEloZXhQYXJzZWRSZWNvcmQgKnJlY29yZCwgdm9pZCAqZGF0YSk7CisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmIC8qIF9fY3BsdXNwbHVzICovCisKKyNlbmRpZiAvKiBCUkxUVFlfSU5DTFVERURfSUhFWF9UWVBFUyAqLwpkaWZmIC0tZ2l0IGEvSGVhZGVycy9pb19ibHVldG9vdGguaCBiL0hlYWRlcnMvaW9fYmx1ZXRvb3RoLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2VkNDAxNgotLS0gL2Rldi9udWxsCisrKyBiL0hlYWRlcnMvaW9fYmx1ZXRvb3RoLmgKQEAgLTAsMCArMSw3NiBAQAorLyoKKyAqIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisgKiAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisgKgorICogQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKKyNpZm5kZWYgQlJMVFRZX0lOQ0xVREVEX0lPX0JMVUVUT09USAorI2RlZmluZSBCUkxUVFlfSU5DTFVERURfSU9fQkxVRVRPT1RICisKKyNpbmNsdWRlICJhc3luY190eXBlc19pby5oIgorI2luY2x1ZGUgInN0cmZtdGguaCIKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZiAvKiBfX2NwbHVzcGx1cyAqLworCit0eXBlZGVmIHN0cnVjdCBCbHVldG9vdGhDb25uZWN0aW9uU3RydWN0IEJsdWV0b290aENvbm5lY3Rpb247CisKK2V4dGVybiB2b2lkIGJ0aEZvcmdldERldmljZXMgKHZvaWQpOworCitleHRlcm4gY29uc3QgY2hhciAqYnRoR2V0TmFtZU9mRGV2aWNlIChCbHVldG9vdGhDb25uZWN0aW9uICpjb25uZWN0aW9uLCBpbnQgdGltZW91dCk7CitleHRlcm4gY29uc3QgY2hhciAqYnRoR2V0TmFtZUF0QWRkcmVzcyAoY29uc3QgY2hhciAqYWRkcmVzcywgaW50IHRpbWVvdXQpOworZXh0ZXJuIGNvbnN0IGNoYXIgKmNvbnN0ICpidGhHZXREcml2ZXJDb2RlcyAoY29uc3QgY2hhciAqYWRkcmVzcywgaW50IHRpbWVvdXQpOworCit0eXBlZGVmIHN0cnVjdCB7CisgIGNvbnN0IGNoYXIgKmRyaXZlcjsKKyAgdWludDY0X3QgYWRkcmVzczsKKyAgaW50IHRpbWVvdXQ7CisgIHVpbnQ4X3QgY2hhbm5lbDsKKyAgdW5zaWduZWQgY2hhciBkaXNjb3ZlcjoxOworfSBCbHVldG9vdGhDb25uZWN0aW9uUmVxdWVzdDsKKworZXh0ZXJuIHZvaWQgYnRoSW5pdGlhbGl6ZUNvbm5lY3Rpb25SZXF1ZXN0IChCbHVldG9vdGhDb25uZWN0aW9uUmVxdWVzdCAqcmVxdWVzdCk7CitleHRlcm4gaW50IGJ0aEFwcGx5UGFyYW1ldGVycyAoQmx1ZXRvb3RoQ29ubmVjdGlvblJlcXVlc3QgKnJlcXVlc3QsIGNvbnN0IGNoYXIgKmlkZW50aWZpZXIpOworCitleHRlcm4gaW50IGJ0aFBhcnNlQWRkcmVzcyAodWludDY0X3QgKmFkZHJlc3MsIGNvbnN0IGNoYXIgKnN0cmluZyk7CitleHRlcm4gaW50IGJ0aFBhcnNlQ2hhbm5lbE51bWJlciAodWludDhfdCAqY2hhbm5lbCwgY29uc3QgY2hhciAqc3RyaW5nKTsKK2V4dGVybiBTVFJfREVDTEFSRV9GT1JNQVRURVIgKGJ0aEZvcm1hdEFkZHJlc3MsIHVpbnQ2NF90IGFkZHJlc3MpOworCitleHRlcm4gQmx1ZXRvb3RoQ29ubmVjdGlvbiAqYnRoT3BlbkNvbm5lY3Rpb24gKGNvbnN0IEJsdWV0b290aENvbm5lY3Rpb25SZXF1ZXN0ICpyZXF1ZXN0KTsKK2V4dGVybiB2b2lkIGJ0aENsb3NlQ29ubmVjdGlvbiAoQmx1ZXRvb3RoQ29ubmVjdGlvbiAqY29ubmVjdGlvbik7CitleHRlcm4gY29uc3QgY2hhciAqYnRoTWFrZUNvbm5lY3Rpb25JZGVudGlmaWVyIChCbHVldG9vdGhDb25uZWN0aW9uICpjb25uZWN0aW9uLCBjaGFyICpidWZmZXIsIHNpemVfdCBzaXplKTsKKworZXh0ZXJuIHVpbnQ2NF90IGJ0aEdldEFkZHJlc3MgKEJsdWV0b290aENvbm5lY3Rpb24gKmNvbm5lY3Rpb24pOworZXh0ZXJuIHVpbnQ4X3QgYnRoR2V0Q2hhbm5lbCAoQmx1ZXRvb3RoQ29ubmVjdGlvbiAqY29ubmVjdGlvbik7CisKK2V4dGVybiBpbnQgYnRoTW9uaXRvcklucHV0IChCbHVldG9vdGhDb25uZWN0aW9uICpjb25uZWN0aW9uLCBBc3luY01vbml0b3JDYWxsYmFjayAqY2FsbGJhY2ssIHZvaWQgKmRhdGEpOworZXh0ZXJuIGludCBidGhBd2FpdElucHV0IChCbHVldG9vdGhDb25uZWN0aW9uICpjb25uZWN0aW9uLCBpbnQgdGltZW91dCk7CisKK2V4dGVybiBzc2l6ZV90IGJ0aFJlYWREYXRhICgKKyAgQmx1ZXRvb3RoQ29ubmVjdGlvbiAqY29ubmVjdGlvbiwgdm9pZCAqYnVmZmVyLCBzaXplX3Qgc2l6ZSwKKyAgaW50IGluaXRpYWxUaW1lb3V0LCBpbnQgc3Vic2VxdWVudFRpbWVvdXQKKyk7CisKK2V4dGVybiBzc2l6ZV90IGJ0aFdyaXRlRGF0YSAoQmx1ZXRvb3RoQ29ubmVjdGlvbiAqY29ubmVjdGlvbiwgY29uc3Qgdm9pZCAqYnVmZmVyLCBzaXplX3Qgc2l6ZSk7CisKKyNkZWZpbmUgQkxVRVRPT1RIX0RFVklDRV9RVUFMSUZJRVIgImJsdWV0b290aCIKK2V4dGVybiBpbnQgaXNCbHVldG9vdGhEZXZpY2VJZGVudGlmaWVyIChjb25zdCBjaGFyICoqaWRlbnRpZmllcik7CisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmIC8qIF9fY3BsdXNwbHVzICovCisKKyNlbmRpZiAvKiBCUkxUVFlfSU5DTFVERURfSU9fQkxVRVRPT1RIICovCmRpZmYgLS1naXQgYS9IZWFkZXJzL2lvX2dlbmVyaWMuaCBiL0hlYWRlcnMvaW9fZ2VuZXJpYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZiYTgzMzkKLS0tIC9kZXYvbnVsbAorKysgYi9IZWFkZXJzL2lvX2dlbmVyaWMuaApAQCAtMCwwICsxLDE2MCBAQAorLyoKKyAqIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisgKiAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisgKgorICogQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKKyNpZm5kZWYgQlJMVFRZX0lOQ0xVREVEX0lPX0dFTkVSSUMKKyNkZWZpbmUgQlJMVFRZX0lOQ0xVREVEX0lPX0dFTkVSSUMKKworI2luY2x1ZGUgImdpb190eXBlcy5oIgorI2luY2x1ZGUgImFzeW5jX3R5cGVzX2lvLmgiCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYgLyogX19jcGx1c3BsdXMgKi8KKworZXh0ZXJuIGNvbnN0IEdpb1B1YmxpY1Byb3BlcnRpZXMgKmdpb0dldFB1YmxpY1Byb3BlcnRpZXMgKGNvbnN0IGNoYXIgKippZGVudGlmaWVyKTsKKworZXh0ZXJuIHZvaWQgZ2lvSW5pdGlhbGl6ZURlc2NyaXB0b3IgKEdpb0Rlc2NyaXB0b3IgKmRlc2NyaXB0b3IpOworZXh0ZXJuIHZvaWQgZ2lvSW5pdGlhbGl6ZVNlcmlhbFBhcmFtZXRlcnMgKFNlcmlhbFBhcmFtZXRlcnMgKnBhcmFtZXRlcnMpOworCitleHRlcm4gR2lvRW5kcG9pbnQgKmdpb0Nvbm5lY3RSZXNvdXJjZSAoCisgIGNvbnN0IGNoYXIgKmlkZW50aWZpZXIsCisgIGNvbnN0IEdpb0Rlc2NyaXB0b3IgKmRlc2NyaXB0b3IKKyk7CisKK2V4dGVybiBjb25zdCB2b2lkICpnaW9HZXRBcHBsaWNhdGlvbkRhdGEgKEdpb0VuZHBvaW50ICplbmRwb2ludCk7CitleHRlcm4gaW50IGdpb0Rpc2Nvbm5lY3RSZXNvdXJjZSAoR2lvRW5kcG9pbnQgKmVuZHBvaW50KTsKKworZXh0ZXJuIGNvbnN0IGNoYXIgKmdpb01ha2VSZXNvdXJjZUlkZW50aWZpZXIgKEdpb0VuZHBvaW50ICplbmRwb2ludCwgY2hhciAqYnVmZmVyLCBzaXplX3Qgc2l6ZSk7CitleHRlcm4gY2hhciAqZ2lvR2V0UmVzb3VyY2VJZGVudGlmaWVyIChHaW9FbmRwb2ludCAqZW5kcG9pbnQpOworCitleHRlcm4gY2hhciAqZ2lvR2V0UmVzb3VyY2VOYW1lIChHaW9FbmRwb2ludCAqZW5kcG9pbnQpOworZXh0ZXJuIEdpb1R5cGVJZGVudGlmaWVyIGdpb0dldFJlc291cmNlVHlwZSAoR2lvRW5kcG9pbnQgKmVuZHBvaW50KTsKK2V4dGVybiB2b2lkICpnaW9HZXRSZXNvdXJjZU9iamVjdCAoR2lvRW5kcG9pbnQgKmVuZHBvaW50KTsKKworZXh0ZXJuIHNzaXplX3QgZ2lvV3JpdGVEYXRhIChHaW9FbmRwb2ludCAqZW5kcG9pbnQsIGNvbnN0IHZvaWQgKmRhdGEsIHNpemVfdCBzaXplKTsKK2V4dGVybiBpbnQgZ2lvQXdhaXRJbnB1dCAoR2lvRW5kcG9pbnQgKmVuZHBvaW50LCBpbnQgdGltZW91dCk7CitleHRlcm4gc3NpemVfdCBnaW9SZWFkRGF0YSAoR2lvRW5kcG9pbnQgKmVuZHBvaW50LCB2b2lkICpidWZmZXIsIHNpemVfdCBzaXplLCBpbnQgd2FpdCk7CitleHRlcm4gaW50IGdpb1JlYWRCeXRlIChHaW9FbmRwb2ludCAqZW5kcG9pbnQsIHVuc2lnbmVkIGNoYXIgKmJ5dGUsIGludCB3YWl0KTsKK2V4dGVybiBpbnQgZ2lvRGlzY2FyZElucHV0IChHaW9FbmRwb2ludCAqZW5kcG9pbnQpOworCitleHRlcm4gaW50IGdpb01vbml0b3JJbnB1dCAoR2lvRW5kcG9pbnQgKmVuZHBvaW50LCBBc3luY01vbml0b3JDYWxsYmFjayAqY2FsbGJhY2ssIHZvaWQgKmRhdGEpOworCitleHRlcm4gaW50IGdpb1JlY29uZmlndXJlUmVzb3VyY2UgKAorICBHaW9FbmRwb2ludCAqZW5kcG9pbnQsCisgIGNvbnN0IFNlcmlhbFBhcmFtZXRlcnMgKnBhcmFtZXRlcnMKKyk7CisKK2V4dGVybiB1bnNpZ25lZCBpbnQgZ2lvR2V0Qnl0ZXNQZXJTZWNvbmQgKEdpb0VuZHBvaW50ICplbmRwb2ludCk7CitleHRlcm4gdW5zaWduZWQgaW50IGdpb0dldE1pbGxpc2Vjb25kc1RvVHJhbnNmZXIgKEdpb0VuZHBvaW50ICplbmRwb2ludCwgc2l6ZV90IGJ5dGVzKTsKKworZXh0ZXJuIHNzaXplX3QgZ2lvVGVsbFJlc291cmNlICgKKyAgR2lvRW5kcG9pbnQgKmVuZHBvaW50LAorICB1aW50OF90IHJlY2lwaWVudCwgdWludDhfdCB0eXBlLAorICB1aW50OF90IHJlcXVlc3QsIHVpbnQxNl90IHZhbHVlLCB1aW50MTZfdCBpbmRleCwKKyAgY29uc3Qgdm9pZCAqZGF0YSwgdWludDE2X3Qgc2l6ZQorKTsKKworZXh0ZXJuIHNzaXplX3QgZ2lvQXNrUmVzb3VyY2UgKAorICBHaW9FbmRwb2ludCAqZW5kcG9pbnQsCisgIHVpbnQ4X3QgcmVjaXBpZW50LCB1aW50OF90IHR5cGUsCisgIHVpbnQ4X3QgcmVxdWVzdCwgdWludDE2X3QgdmFsdWUsIHVpbnQxNl90IGluZGV4LAorICB2b2lkICpidWZmZXIsIHVpbnQxNl90IHNpemUKKyk7CisKK2V4dGVybiBpbnQgZ2lvR2V0SGlkUmVwb3J0U2l6ZSAoCisgIEdpb0VuZHBvaW50ICplbmRwb2ludCwKKyAgSGlkUmVwb3J0SWRlbnRpZmllciBpZGVudGlmaWVyLAorICBIaWRSZXBvcnRTaXplICpzaXplCispOworCitleHRlcm4gc2l6ZV90IGdpb0dldEhpZElucHV0U2l6ZSAoCisgIEdpb0VuZHBvaW50ICplbmRwb2ludCwKKyAgSGlkUmVwb3J0SWRlbnRpZmllciBpZGVudGlmaWVyCispOworCitleHRlcm4gc2l6ZV90IGdpb0dldEhpZE91dHB1dFNpemUgKAorICBHaW9FbmRwb2ludCAqZW5kcG9pbnQsCisgIEhpZFJlcG9ydElkZW50aWZpZXIgaWRlbnRpZmllcgorKTsKKworZXh0ZXJuIHNpemVfdCBnaW9HZXRIaWRGZWF0dXJlU2l6ZSAoCisgIEdpb0VuZHBvaW50ICplbmRwb2ludCwKKyAgSGlkUmVwb3J0SWRlbnRpZmllciBpZGVudGlmaWVyCispOworCitleHRlcm4gc3NpemVfdCBnaW9HZXRIaWRSZXBvcnQgKAorICBHaW9FbmRwb2ludCAqZW5kcG9pbnQsIEhpZFJlcG9ydElkZW50aWZpZXIgaWRlbnRpZmllciwKKyAgdW5zaWduZWQgY2hhciAqYnVmZmVyLCBzaXplX3Qgc2l6ZQorKTsKKworZXh0ZXJuIHNzaXplX3QgZ2lvUmVhZEhpZFJlcG9ydCAoCisgIEdpb0VuZHBvaW50ICplbmRwb2ludCwKKyAgdW5zaWduZWQgY2hhciAqYnVmZmVyLCBzaXplX3Qgc2l6ZQorKTsKKworZXh0ZXJuIHNzaXplX3QgZ2lvU2V0SGlkUmVwb3J0ICgKKyAgR2lvRW5kcG9pbnQgKmVuZHBvaW50LCBIaWRSZXBvcnRJZGVudGlmaWVyIGlkZW50aWZpZXIsCisgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGEsIHNpemVfdCBzaXplCispOworCitleHRlcm4gc3NpemVfdCBnaW9Xcml0ZUhpZFJlcG9ydCAoCisgIEdpb0VuZHBvaW50ICplbmRwb2ludCwKKyAgY29uc3QgdW5zaWduZWQgY2hhciAqZGF0YSwgc2l6ZV90IHNpemUKKyk7CisKK2V4dGVybiBzc2l6ZV90IGdpb0dldEhpZEZlYXR1cmUgKAorICBHaW9FbmRwb2ludCAqZW5kcG9pbnQsIEhpZFJlcG9ydElkZW50aWZpZXIgaWRlbnRpZmllciwKKyAgdW5zaWduZWQgY2hhciAqYnVmZmVyLCBzaXplX3Qgc2l6ZQorKTsKKworZXh0ZXJuIHNzaXplX3QgZ2lvUmVhZEhpZEZlYXR1cmUgKAorICBHaW9FbmRwb2ludCAqZW5kcG9pbnQsCisgIHVuc2lnbmVkIGNoYXIgKmJ1ZmZlciwgc2l6ZV90IHNpemUKKyk7CisKK2V4dGVybiBzc2l6ZV90IGdpb1NldEhpZEZlYXR1cmUgKAorICBHaW9FbmRwb2ludCAqZW5kcG9pbnQsIEhpZFJlcG9ydElkZW50aWZpZXIgaWRlbnRpZmllciwKKyAgY29uc3QgdW5zaWduZWQgY2hhciAqZGF0YSwgc2l6ZV90IHNpemUKKyk7CisKK2V4dGVybiBzc2l6ZV90IGdpb1dyaXRlSGlkRmVhdHVyZSAoCisgIEdpb0VuZHBvaW50ICplbmRwb2ludCwKKyAgY29uc3QgdW5zaWduZWQgY2hhciAqZGF0YSwgc2l6ZV90IHNpemUKKyk7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgdm9pZCAqY29uc3QgZGF0YTsKKyAgaW50IGVycm9yOworfSBHaW9IYW5kbGVJbnB1dFBhcmFtZXRlcnM7CisKKyNkZWZpbmUgR0lPX0lOUFVUX0hBTkRMRVIobmFtZSkgaW50IG5hbWUgKEdpb0hhbmRsZUlucHV0UGFyYW1ldGVycyAqcGFyYW1ldGVycykKK3R5cGVkZWYgR0lPX0lOUFVUX0hBTkRMRVIoR2lvSW5wdXRIYW5kbGVyKTsKK3R5cGVkZWYgc3RydWN0IEdpb0hhbmRsZUlucHV0T2JqZWN0U3RydWN0IEdpb0hhbmRsZUlucHV0T2JqZWN0OworCitleHRlcm4gR2lvSGFuZGxlSW5wdXRPYmplY3QgKmdpb05ld0hhbmRsZUlucHV0T2JqZWN0ICgKKyAgR2lvRW5kcG9pbnQgKmVuZHBvaW50LCBpbnQgcG9sbEludGVydmFsLAorICBHaW9JbnB1dEhhbmRsZXIgKmhhbmRsZXIsIHZvaWQgKmRhdGEKKyk7CisKK2V4dGVybiB2b2lkIGdpb0Rlc3Ryb3lIYW5kbGVJbnB1dE9iamVjdCAoR2lvSGFuZGxlSW5wdXRPYmplY3QgKmhpbyk7CisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmIC8qIF9fY3BsdXNwbHVzICovCisKKyNlbmRpZiAvKiBCUkxUVFlfSU5DTFVERURfSU9fR0VORVJJQyAqLwpkaWZmIC0tZ2l0IGEvSGVhZGVycy9pb19oaWQuaCBiL0hlYWRlcnMvaW9faGlkLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjZkNWEyMQotLS0gL2Rldi9udWxsCisrKyBiL0hlYWRlcnMvaW9faGlkLmgKQEAgLTAsMCArMSw5MyBAQAorLyoKKyAqIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisgKiAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisgKgorICogQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKKyNpZm5kZWYgQlJMVFRZX0lOQ0xVREVEX0lPX0hJRAorI2RlZmluZSBCUkxUVFlfSU5DTFVERURfSU9fSElECisKKyNpbmNsdWRlICJoaWRfdHlwZXMuaCIKKyNpbmNsdWRlICJhc3luY190eXBlc19pby5oIgorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmIC8qIF9fY3BsdXNwbHVzICovCisKK3R5cGVkZWYgc3RydWN0IEhpZERldmljZVN0cnVjdCBIaWREZXZpY2U7CisKK2V4dGVybiB2b2lkIGhpZEluaXRpYWxpemVVU0JGaWx0ZXIgKEhpZFVTQkZpbHRlciAqZmlsdGVyKTsKK2V4dGVybiBIaWREZXZpY2UgKmhpZE9wZW5VU0JEZXZpY2UgKGNvbnN0IEhpZFVTQkZpbHRlciAqZmlsdGVyKTsKKworZXh0ZXJuIHZvaWQgaGlkSW5pdGlhbGl6ZUJsdWV0b290aEZpbHRlciAoSGlkQmx1ZXRvb3RoRmlsdGVyICpmaWx0ZXIpOworZXh0ZXJuIEhpZERldmljZSAqaGlkT3BlbkJsdWV0b290aERldmljZSAoY29uc3QgSGlkQmx1ZXRvb3RoRmlsdGVyICpmaWx0ZXIpOworCitleHRlcm4gdm9pZCBoaWRJbml0aWFsaXplRmlsdGVyIChIaWRGaWx0ZXIgKmZpbHRlcik7CisKK2V4dGVybiBpbnQgaGlkU2V0RmlsdGVySWRlbnRpZmllcnMgKAorICBIaWRGaWx0ZXIgKmZpbHRlciwgY29uc3QgY2hhciAqdmVuZG9yLCBjb25zdCBjaGFyICpwcm9kdWN0CispOworCitleHRlcm4gaW50IGhpZE9wZW5EZXZpY2VXaXRoRmlsdGVyICgKKyAgSGlkRGV2aWNlICoqZGV2aWNlLCBjb25zdCBIaWRGaWx0ZXIgKmZpbHRlcgorKTsKKworZXh0ZXJuIGludCBoaWRPcGVuRGV2aWNlV2l0aFBhcmFtZXRlcnMgKAorICBIaWREZXZpY2UgKipkZXZpY2UsIGNvbnN0IGNoYXIgKnN0cmluZworKTsKKworZXh0ZXJuIHZvaWQgaGlkQ2xvc2VEZXZpY2UgKEhpZERldmljZSAqZGV2aWNlKTsKKworZXh0ZXJuIGNvbnN0IEhpZEl0ZW1zRGVzY3JpcHRvciAqaGlkR2V0SXRlbXMgKEhpZERldmljZSAqZGV2aWNlKTsKKworZXh0ZXJuIGludCBoaWRHZXRSZXBvcnRTaXplICgKKyAgSGlkRGV2aWNlICpkZXZpY2UsCisgIEhpZFJlcG9ydElkZW50aWZpZXIgaWRlbnRpZmllciwKKyAgSGlkUmVwb3J0U2l6ZSAqc2l6ZQorKTsKKworZXh0ZXJuIHNzaXplX3QgaGlkR2V0UmVwb3J0IChIaWREZXZpY2UgKmRldmljZSwgdW5zaWduZWQgY2hhciAqYnVmZmVyLCBzaXplX3Qgc2l6ZSk7CitleHRlcm4gc3NpemVfdCBoaWRTZXRSZXBvcnQgKEhpZERldmljZSAqZGV2aWNlLCBjb25zdCB1bnNpZ25lZCBjaGFyICpyZXBvcnQsIHNpemVfdCBzaXplKTsKKworZXh0ZXJuIHNzaXplX3QgaGlkR2V0RmVhdHVyZSAoSGlkRGV2aWNlICpkZXZpY2UsIHVuc2lnbmVkIGNoYXIgKmJ1ZmZlciwgc2l6ZV90IHNpemUpOworZXh0ZXJuIHNzaXplX3QgaGlkU2V0RmVhdHVyZSAoSGlkRGV2aWNlICpkZXZpY2UsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmZlYXR1cmUsIHNpemVfdCBzaXplKTsKKworZXh0ZXJuIGludCBoaWRXcml0ZURhdGEgKEhpZERldmljZSAqZGV2aWNlLCBjb25zdCB1bnNpZ25lZCBjaGFyICpkYXRhLCBzaXplX3Qgc2l6ZSk7CitleHRlcm4gaW50IGhpZE1vbml0b3JJbnB1dCAoSGlkRGV2aWNlICpkZXZpY2UsIEFzeW5jTW9uaXRvckNhbGxiYWNrICpjYWxsYmFjaywgdm9pZCAqZGF0YSk7CitleHRlcm4gaW50IGhpZEF3YWl0SW5wdXQgKEhpZERldmljZSAqZGV2aWNlLCBpbnQgdGltZW91dCk7CisKK2V4dGVybiBzc2l6ZV90IGhpZFJlYWREYXRhICgKKyAgSGlkRGV2aWNlICpkZXZpY2UsIHVuc2lnbmVkIGNoYXIgKmJ1ZmZlciwgc2l6ZV90IHNpemUsCisgIGludCBpbml0aWFsVGltZW91dCwgaW50IHN1YnNlcXVlbnRUaW1lb3V0CispOworCitleHRlcm4gaW50IGhpZEdldERldmljZUlkZW50aWZpZXJzIChIaWREZXZpY2UgKmRldmljZSwgSGlkRGV2aWNlSWRlbnRpZmllciAqdmVuZG9yLCBIaWREZXZpY2VJZGVudGlmaWVyICpwcm9kdWN0KTsKK2V4dGVybiBjb25zdCBjaGFyICpoaWRHZXREZXZpY2VBZGRyZXNzIChIaWREZXZpY2UgKmRldmljZSk7CitleHRlcm4gY29uc3QgY2hhciAqaGlkR2V0RGV2aWNlTmFtZSAoSGlkRGV2aWNlICpkZXZpY2UpOworZXh0ZXJuIGNvbnN0IGNoYXIgKmhpZEdldEhvc3RQYXRoIChIaWREZXZpY2UgKmRldmljZSk7CitleHRlcm4gY29uc3QgY2hhciAqaGlkR2V0SG9zdERldmljZSAoSGlkRGV2aWNlICpkZXZpY2UpOworCitleHRlcm4gY29uc3QgY2hhciAqaGlkTWFrZURldmljZUlkZW50aWZpZXIgKAorICBIaWREZXZpY2UgKmRldmljZSwgY2hhciAqYnVmZmVyLCBzaXplX3Qgc2l6ZQorKTsKKworI2RlZmluZSBISURfREVWSUNFX1FVQUxJRklFUiAiaGlkIgorZXh0ZXJuIGludCBpc0hpZERldmljZUlkZW50aWZpZXIgKGNvbnN0IGNoYXIgKippZGVudGlmaWVyKTsKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYgLyogX19jcGx1c3BsdXMgKi8KKworI2VuZGlmIC8qIEJSTFRUWV9JTkNMVURFRF9JT19ISUQgKi8KZGlmZiAtLWdpdCBhL0hlYWRlcnMvaW9fbWlzYy5oIGIvSGVhZGVycy9pb19taXNjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzNiNDU4MgotLS0gL2Rldi9udWxsCisrKyBiL0hlYWRlcnMvaW9fbWlzYy5oCkBAIC0wLDAgKzEsNzMgQEAKKy8qCisgKiBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorICogICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorICoKKyAqIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorICoKKyAqIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyAqLworCisjaWZuZGVmIEJSTFRUWV9JTkNMVURFRF9JT19NSVNDCisjZGVmaW5lIEJSTFRUWV9JTkNMVURFRF9JT19NSVNDCisKKyNpbmNsdWRlICJnZXRfc29ja2V0cy5oIgorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmIC8qIF9fY3BsdXNwbHVzICovCisKK2V4dGVybiB2b2lkIGNsb3NlRmlsZSAoRmlsZURlc2NyaXB0b3IgKmZpbGVEZXNjcmlwdG9yKTsKK2V4dGVybiBpbnQgYXdhaXRGaWxlSW5wdXQgKEZpbGVEZXNjcmlwdG9yIGZpbGVEZXNjcmlwdG9yLCBpbnQgdGltZW91dCk7CitleHRlcm4gaW50IGF3YWl0RmlsZU91dHB1dCAoRmlsZURlc2NyaXB0b3IgZmlsZURlc2NyaXB0b3IsIGludCB0aW1lb3V0KTsKK2V4dGVybiBpbnQgYXdhaXRGaWxlQWxlcnQgKEZpbGVEZXNjcmlwdG9yIGZpbGVEZXNjcmlwdG9yLCBpbnQgdGltZW91dCk7CisKK2V4dGVybiBzc2l6ZV90IHJlYWRGaWxlICgKKyAgRmlsZURlc2NyaXB0b3IgZmlsZURlc2NyaXB0b3IsIHZvaWQgKmJ1ZmZlciwgc2l6ZV90IHNpemUsCisgIGludCBpbml0aWFsVGltZW91dCwgaW50IHN1YnNlcXVlbnRUaW1lb3V0CispOworCitleHRlcm4gc3NpemVfdCB3cml0ZUZpbGUgKEZpbGVEZXNjcmlwdG9yIGZpbGVEZXNjcmlwdG9yLCBjb25zdCB2b2lkICpidWZmZXIsIHNpemVfdCBzaXplKTsKKworI2lmZGVmIEdPVF9TT0NLRVRTCitleHRlcm4gdm9pZCBjbG9zZVNvY2tldCAoU29ja2V0RGVzY3JpcHRvciAqc29ja2V0RGVzY3JpcHRvcik7CitleHRlcm4gaW50IGF3YWl0U29ja2V0SW5wdXQgKFNvY2tldERlc2NyaXB0b3Igc29ja2V0RGVzY3JpcHRvciwgaW50IHRpbWVvdXQpOworZXh0ZXJuIGludCBhd2FpdFNvY2tldE91dHB1dCAoU29ja2V0RGVzY3JpcHRvciBzb2NrZXREZXNjcmlwdG9yLCBpbnQgdGltZW91dCk7CitleHRlcm4gaW50IGF3YWl0U29ja2V0QWxlcnQgKFNvY2tldERlc2NyaXB0b3Igc29ja2V0RGVzY3JpcHRvciwgaW50IHRpbWVvdXQpOworCitleHRlcm4gc3NpemVfdCByZWFkU29ja2V0ICgKKyAgU29ja2V0RGVzY3JpcHRvciBzb2NrZXREZXNjcmlwdG9yLCB2b2lkICpidWZmZXIsIHNpemVfdCBzaXplLAorICBpbnQgaW5pdGlhbFRpbWVvdXQsIGludCBzdWJzZXF1ZW50VGltZW91dAorKTsKKworZXh0ZXJuIHNzaXplX3Qgd3JpdGVTb2NrZXQgKFNvY2tldERlc2NyaXB0b3Igc29ja2V0RGVzY3JpcHRvciwgY29uc3Qgdm9pZCAqYnVmZmVyLCBzaXplX3Qgc2l6ZSk7CisKK2V4dGVybiBpbnQgY29ubmVjdFNvY2tldCAoCisgIFNvY2tldERlc2NyaXB0b3Igc29ja2V0RGVzY3JpcHRvciwKKyAgY29uc3Qgc3RydWN0IHNvY2thZGRyICphZGRyZXNzLAorICBzaXplX3QgYWRkcmVzc0xlbmd0aCwKKyAgaW50IHRpbWVvdXQKKyk7CisKK2V4dGVybiBpbnQgc2V0U29ja2V0TGluZ2VyVGltZSAoU29ja2V0RGVzY3JpcHRvciBzb2NrZXREZXNjcmlwdG9yLCBpbnQgc2Vjb25kcyk7CitleHRlcm4gaW50IHNldFNvY2tldE5vTGluZ2VyIChTb2NrZXREZXNjcmlwdG9yIHNvY2tldERlc2NyaXB0b3IpOworI2VuZGlmIC8qIEdPVF9TT0NLRVRTICovCisKK2V4dGVybiBpbnQgY2hhbmdlT3BlbkZsYWdzIChGaWxlRGVzY3JpcHRvciBmaWxlRGVzY3JpcHRvciwgaW50IGZsYWdzVG9DbGVhciwgaW50IGZsYWdzVG9TZXQpOworZXh0ZXJuIGludCBzZXRPcGVuRmxhZ3MgKEZpbGVEZXNjcmlwdG9yIGZpbGVEZXNjcmlwdG9yLCBpbnQgc3RhdGUsIGludCBmbGFncyk7CitleHRlcm4gaW50IHNldEJsb2NraW5nSW8gKEZpbGVEZXNjcmlwdG9yIGZpbGVEZXNjcmlwdG9yLCBpbnQgc3RhdGUpOworZXh0ZXJuIGludCBzZXRDbG9zZU9uRXhlYyAoRmlsZURlc2NyaXB0b3IgZmlsZURlc2NyaXB0b3IsIGludCBzdGF0ZSk7CisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmIC8qIF9fY3BsdXNwbHVzICovCisKKyNlbmRpZiAvKiBCUkxUVFlfSU5DTFVERURfSU9fTUlTQyAqLwpkaWZmIC0tZ2l0IGEvSGVhZGVycy9pb19zZXJpYWwuaCBiL0hlYWRlcnMvaW9fc2VyaWFsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjU4ZDdhNAotLS0gL2Rldi9udWxsCisrKyBiL0hlYWRlcnMvaW9fc2VyaWFsLmgKQEAgLTAsMCArMSwxMDAgQEAKKy8qCisgKiBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorICogICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorICoKKyAqIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorICoKKyAqIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyAqLworCisjaWZuZGVmIEJSTFRUWV9JTkNMVURFRF9JT19TRVJJQUwKKyNkZWZpbmUgQlJMVFRZX0lOQ0xVREVEX0lPX1NFUklBTAorCisjaW5jbHVkZSA8c3RkaW8uaD4KKworI2luY2x1ZGUgInNlcmlhbF90eXBlcy5oIgorI2luY2x1ZGUgImFzeW5jX3R5cGVzX2lvLmgiCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYgLyogX19jcGx1c3BsdXMgKi8KKwordHlwZWRlZiBzdHJ1Y3QgU2VyaWFsRGV2aWNlU3RydWN0IFNlcmlhbERldmljZTsKKworI2RlZmluZSBTRVJJQUxfREVWSUNFX1FVQUxJRklFUiAic2VyaWFsIgorZXh0ZXJuIGludCBpc1NlcmlhbERldmljZUlkZW50aWZpZXIgKGNvbnN0IGNoYXIgKippZGVudGlmaWVyKTsKKworZXh0ZXJuIGludCBzZXJpYWxWYWxpZGF0ZUJhdWQgKHVuc2lnbmVkIGludCAqYmF1ZCwgY29uc3QgY2hhciAqZGVzY3JpcHRpb24sIGNvbnN0IGNoYXIgKndvcmQsIGNvbnN0IHVuc2lnbmVkIGludCAqY2hvaWNlcyk7CisKK2V4dGVybiBTZXJpYWxEZXZpY2UgKnNlcmlhbE9wZW5EZXZpY2UgKGNvbnN0IGNoYXIgKmlkZW50aWZpZXIpOworZXh0ZXJuIHZvaWQgc2VyaWFsQ2xvc2VEZXZpY2UgKFNlcmlhbERldmljZSAqc2VyaWFsKTsKK2V4dGVybiBpbnQgc2VyaWFsUmVzdGFydERldmljZSAoU2VyaWFsRGV2aWNlICpzZXJpYWwsIHVuc2lnbmVkIGludCBiYXVkKTsKKworZXh0ZXJuIGNvbnN0IGNoYXIgKnNlcmlhbE1ha2VEZXZpY2VJZGVudGlmaWVyIChTZXJpYWxEZXZpY2UgKnNlcmlhbCwgY2hhciAqYnVmZmVyLCBzaXplX3Qgc2l6ZSk7CitleHRlcm4gY29uc3QgY2hhciAqc2VyaWFsR2V0RGV2aWNlUGF0aCAoU2VyaWFsRGV2aWNlICpzZXJpYWwpOworZXh0ZXJuIEZJTEUgKnNlcmlhbEdldFN0cmVhbSAoU2VyaWFsRGV2aWNlICpzZXJpYWwpOworCitleHRlcm4gaW50IHNlcmlhbERpc2NhcmRJbnB1dCAoU2VyaWFsRGV2aWNlICpzZXJpYWwpOworZXh0ZXJuIGludCBzZXJpYWxEaXNjYXJkT3V0cHV0IChTZXJpYWxEZXZpY2UgKnNlcmlhbCk7CitleHRlcm4gaW50IHNlcmlhbEZsdXNoT3V0cHV0IChTZXJpYWxEZXZpY2UgKnNlcmlhbCk7CisKK2V4dGVybiBpbnQgc2VyaWFsTW9uaXRvcklucHV0IChTZXJpYWxEZXZpY2UgKnNlcmlhbCwgQXN5bmNNb25pdG9yQ2FsbGJhY2sgKmNhbGxiYWNrLCB2b2lkICpkYXRhKTsKK2V4dGVybiBpbnQgc2VyaWFsQXdhaXRJbnB1dCAoU2VyaWFsRGV2aWNlICpzZXJpYWwsIGludCB0aW1lb3V0KTsKK2V4dGVybiBpbnQgc2VyaWFsQXdhaXRPdXRwdXQgKFNlcmlhbERldmljZSAqc2VyaWFsKTsKKworZXh0ZXJuIHNzaXplX3Qgc2VyaWFsUmVhZERhdGEgKAorICBTZXJpYWxEZXZpY2UgKnNlcmlhbCwKKyAgdm9pZCAqYnVmZmVyLCBzaXplX3Qgc2l6ZSwKKyAgaW50IGluaXRpYWxUaW1lb3V0LCBpbnQgc3Vic2VxdWVudFRpbWVvdXQKKyk7CisKK2V4dGVybiBpbnQgc2VyaWFsUmVhZENodW5rICgKKyAgU2VyaWFsRGV2aWNlICpzZXJpYWwsCisgIHZvaWQgKmJ1ZmZlciwgc2l6ZV90ICpvZmZzZXQsIHNpemVfdCBjb3VudCwKKyAgaW50IGluaXRpYWxUaW1lb3V0LCBpbnQgc3Vic2VxdWVudFRpbWVvdXQKKyk7CisKK2V4dGVybiBzc2l6ZV90IHNlcmlhbFdyaXRlRGF0YSAoCisgIFNlcmlhbERldmljZSAqc2VyaWFsLAorICBjb25zdCB2b2lkICpkYXRhLCBzaXplX3Qgc2l6ZQorKTsKKworZXh0ZXJuIGludCBzZXJpYWxQYXJzZUJhdWQgKHVuc2lnbmVkIGludCAqYmF1ZCwgY29uc3QgY2hhciAqc3RyaW5nKTsKK2V4dGVybiBpbnQgc2VyaWFsUGFyc2VEYXRhQml0cyAodW5zaWduZWQgaW50ICpiaXRzLCBjb25zdCBjaGFyICpzdHJpbmcpOworZXh0ZXJuIGludCBzZXJpYWxQYXJzZVN0b3BCaXRzICh1bnNpZ25lZCBpbnQgKmJpdHMsIGNvbnN0IGNoYXIgKnN0cmluZyk7CitleHRlcm4gaW50IHNlcmlhbFBhcnNlUGFyaXR5IChTZXJpYWxQYXJpdHkgKnBhcml0eSwgY29uc3QgY2hhciAqc3RyaW5nKTsKK2V4dGVybiBpbnQgc2VyaWFsUGFyc2VGbG93Q29udHJvbCAoU2VyaWFsRmxvd0NvbnRyb2wgKmZsb3csIGNvbnN0IGNoYXIgKnN0cmluZyk7CisKK2V4dGVybiBpbnQgc2VyaWFsU2V0UGFyYW1ldGVycyAoU2VyaWFsRGV2aWNlICpzZXJpYWwsIGNvbnN0IFNlcmlhbFBhcmFtZXRlcnMgKnBhcmFtZXRlcnMpOworZXh0ZXJuIGludCBzZXJpYWxTZXRCYXVkIChTZXJpYWxEZXZpY2UgKnNlcmlhbCwgdW5zaWduZWQgaW50IGJhdWQpOworZXh0ZXJuIGludCBzZXJpYWxTZXREYXRhQml0cyAoU2VyaWFsRGV2aWNlICpzZXJpYWwsIHVuc2lnbmVkIGludCBiaXRzKTsKK2V4dGVybiBpbnQgc2VyaWFsU2V0U3RvcEJpdHMgKFNlcmlhbERldmljZSAqc2VyaWFsLCBTZXJpYWxTdG9wQml0cyBiaXRzKTsKK2V4dGVybiBpbnQgc2VyaWFsU2V0UGFyaXR5IChTZXJpYWxEZXZpY2UgKnNlcmlhbCwgU2VyaWFsUGFyaXR5IHBhcml0eSk7CitleHRlcm4gaW50IHNlcmlhbFNldEZsb3dDb250cm9sIChTZXJpYWxEZXZpY2UgKnNlcmlhbCwgU2VyaWFsRmxvd0NvbnRyb2wgZmxvdyk7CisKK2V4dGVybiB1bnNpZ25lZCBpbnQgc2VyaWFsR2V0Q2hhcmFjdGVyU2l6ZSAoY29uc3QgU2VyaWFsUGFyYW1ldGVycyAqcGFyYW1ldGVycyk7CitleHRlcm4gdW5zaWduZWQgaW50IHNlcmlhbEdldENoYXJhY3RlckJpdHMgKFNlcmlhbERldmljZSAqc2VyaWFsKTsKKworZXh0ZXJuIGludCBzZXJpYWxTZXRMaW5lUlRTIChTZXJpYWxEZXZpY2UgKnNlcmlhbCwgaW50IHVwKTsKK2V4dGVybiBpbnQgc2VyaWFsU2V0TGluZURUUiAoU2VyaWFsRGV2aWNlICpzZXJpYWwsIGludCB1cCk7CisKK2V4dGVybiBpbnQgc2VyaWFsVGVzdExpbmVDVFMgKFNlcmlhbERldmljZSAqc2VyaWFsKTsKK2V4dGVybiBpbnQgc2VyaWFsVGVzdExpbmVEU1IgKFNlcmlhbERldmljZSAqc2VyaWFsKTsKKworZXh0ZXJuIGludCBzZXJpYWxXYWl0TGluZUNUUyAoU2VyaWFsRGV2aWNlICpzZXJpYWwsIGludCB1cCwgaW50IGZsYW5rKTsKK2V4dGVybiBpbnQgc2VyaWFsV2FpdExpbmVEU1IgKFNlcmlhbERldmljZSAqc2VyaWFsLCBpbnQgdXAsIGludCBmbGFuayk7CisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmIC8qIF9fY3BsdXNwbHVzICovCisKKyNlbmRpZiAvKiBCUkxUVFlfSU5DTFVERURfSU9fU0VSSUFMICovCmRpZmYgLS1naXQgYS9IZWFkZXJzL2lvX3VzYi5oIGIvSGVhZGVycy9pb191c2IuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZjA1MzRkCi0tLSAvZGV2L251bGwKKysrIGIvSGVhZGVycy9pb191c2IuaApAQCAtMCwwICsxLDI1MCBAQAorLyoKKyAqIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisgKiAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisgKgorICogQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKKyNpZm5kZWYgQlJMVFRZX0lOQ0xVREVEX0lPX1VTQgorI2RlZmluZSBCUkxUVFlfSU5DTFVERURfSU9fVVNCCisKKyNpbmNsdWRlICJwcm9sb2d1ZS5oIgorI2luY2x1ZGUgInVzYl90eXBlcy5oIgorI2luY2x1ZGUgImFzeW5jX3R5cGVzX2lvLmgiCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYgLyogX19jcGx1c3BsdXMgKi8KKworZXh0ZXJuIFVzYkRldmljZSAqdXNiRmluZERldmljZSAoVXNiRGV2aWNlQ2hvb3NlciAqY2hvb3NlciwgVXNiQ2hvb3NlQ2hhbm5lbERhdGEgKmRhdGEpOworZXh0ZXJuIHZvaWQgdXNiRm9yZ2V0RGV2aWNlcyAodm9pZCk7CisKK2V4dGVybiB2b2lkIHVzYkNsb3NlRGV2aWNlIChVc2JEZXZpY2UgKmRldmljZSk7CitleHRlcm4gaW50IHVzYkRpc2FibGVBdXRvc3VzcGVuZCAoVXNiRGV2aWNlICpkZXZpY2UpOworCitleHRlcm4gY29uc3QgVXNiRGV2aWNlRGVzY3JpcHRvciAqdXNiRGV2aWNlRGVzY3JpcHRvciAoVXNiRGV2aWNlICpkZXZpY2UpOworI2RlZmluZSBVU0JfSVNfUFJPRFVDVChkZXNjcmlwdG9yLHZlbmRvcixwcm9kdWN0KSAoKGdldExpdHRsZUVuZGlhbjE2KChkZXNjcmlwdG9yKS0+aWRWZW5kb3IpID09ICh2ZW5kb3IpKSAmJiAoZ2V0TGl0dGxlRW5kaWFuMTYoKGRlc2NyaXB0b3IpLT5pZFByb2R1Y3QpID09IChwcm9kdWN0KSkpCisKK2V4dGVybiBpbnQgdXNiTmV4dERlc2NyaXB0b3IgKAorICBVc2JEZXZpY2UgKmRldmljZSwKKyAgY29uc3QgVXNiRGVzY3JpcHRvciAqKmRlc2NyaXB0b3IKKyk7CitleHRlcm4gY29uc3QgVXNiQ29uZmlndXJhdGlvbkRlc2NyaXB0b3IgKnVzYkNvbmZpZ3VyYXRpb25EZXNjcmlwdG9yICgKKyAgVXNiRGV2aWNlICpkZXZpY2UKKyk7CitleHRlcm4gY29uc3QgVXNiSW50ZXJmYWNlRGVzY3JpcHRvciAqdXNiSW50ZXJmYWNlRGVzY3JpcHRvciAoCisgIFVzYkRldmljZSAqZGV2aWNlLAorICB1bnNpZ25lZCBjaGFyIGludGVyZmFjZSwKKyAgdW5zaWduZWQgY2hhciBhbHRlcm5hdGl2ZQorKTsKK2V4dGVybiB1bnNpZ25lZCBpbnQgdXNiQWx0ZXJuYXRpdmVDb3VudCAoCisgIFVzYkRldmljZSAqZGV2aWNlLAorICB1bnNpZ25lZCBjaGFyIGludGVyZmFjZQorKTsKK2V4dGVybiBjb25zdCBVc2JFbmRwb2ludERlc2NyaXB0b3IgKnVzYkVuZHBvaW50RGVzY3JpcHRvciAoCisgIFVzYkRldmljZSAqZGV2aWNlLAorICB1bnNpZ25lZCBjaGFyIGVuZHBvaW50QWRkcmVzcworKTsKKworZXh0ZXJuIGludCB1c2JDb25maWd1cmVEZXZpY2UgKAorICBVc2JEZXZpY2UgKmRldmljZSwKKyAgdW5zaWduZWQgY2hhciBjb25maWd1cmF0aW9uCispOworZXh0ZXJuIGludCB1c2JHZXRDb25maWd1cmF0aW9uICgKKyAgVXNiRGV2aWNlICpkZXZpY2UsCisgIHVuc2lnbmVkIGNoYXIgKmNvbmZpZ3VyYXRpb24KKyk7CisKK2V4dGVybiBpbnQgdXNiT3BlbkludGVyZmFjZSAoCisgIFVzYkRldmljZSAqZGV2aWNlLAorICB1bnNpZ25lZCBjaGFyIGludGVyZmFjZSwKKyAgdW5zaWduZWQgY2hhciBhbHRlcm5hdGl2ZQorKTsKK2V4dGVybiB2b2lkIHVzYkNsb3NlSW50ZXJmYWNlICgKKyAgVXNiRGV2aWNlICpkZXZpY2UKKyk7CisKK2V4dGVybiBpbnQgdXNiUmVzZXREZXZpY2UgKFVzYkRldmljZSAqZGV2aWNlKTsKK2V4dGVybiBpbnQgdXNiQ2xlYXJIYWx0IChVc2JEZXZpY2UgKmRldmljZSwgdW5zaWduZWQgY2hhciBlbmRwb2ludEFkZHJlc3MpOworCitleHRlcm4gc3NpemVfdCB1c2JDb250cm9sUmVhZCAoCisgIFVzYkRldmljZSAqZGV2aWNlLAorICB1aW50OF90IHJlY2lwaWVudCwKKyAgdWludDhfdCB0eXBlLAorICB1aW50OF90IHJlcXVlc3QsCisgIHVpbnQxNl90IHZhbHVlLAorICB1aW50MTZfdCBpbmRleCwKKyAgdm9pZCAqYnVmZmVyLAorICB1aW50MTZfdCBsZW5ndGgsCisgIGludCB0aW1lb3V0CispOworZXh0ZXJuIHNzaXplX3QgdXNiQ29udHJvbFdyaXRlICgKKyAgVXNiRGV2aWNlICpkZXZpY2UsCisgIHVpbnQ4X3QgcmVjaXBpZW50LAorICB1aW50OF90IHR5cGUsCisgIHVpbnQ4X3QgcmVxdWVzdCwKKyAgdWludDE2X3QgdmFsdWUsCisgIHVpbnQxNl90IGluZGV4LAorICBjb25zdCB2b2lkICpidWZmZXIsCisgIHVpbnQxNl90IGxlbmd0aCwKKyAgaW50IHRpbWVvdXQKKyk7CisKK2V4dGVybiBzc2l6ZV90IHVzYkdldERlc2NyaXB0b3IgKAorICBVc2JEZXZpY2UgKmRldmljZSwKKyAgdW5zaWduZWQgY2hhciB0eXBlLAorICB1bnNpZ25lZCBjaGFyIG51bWJlciwKKyAgdW5zaWduZWQgaW50IGluZGV4LAorICBVc2JEZXNjcmlwdG9yICpkZXNjcmlwdG9yLAorICBpbnQgdGltZW91dAorKTsKK2V4dGVybiBpbnQgdXNiR2V0RGV2aWNlRGVzY3JpcHRvciAoCisgIFVzYkRldmljZSAqZGV2aWNlLAorICBVc2JEZXZpY2VEZXNjcmlwdG9yICpkZXNjcmlwdG9yCispOworZXh0ZXJuIGludCB1c2JHZXRMYW5ndWFnZSAoCisgIFVzYkRldmljZSAqZGV2aWNlLAorICB1aW50MTZfdCAqbGFuZ3VhZ2UsCisgIGludCB0aW1lb3V0CispOworZXh0ZXJuIGNoYXIgKnVzYkdldFN0cmluZyAoCisgIFVzYkRldmljZSAqZGV2aWNlLAorICB1bnNpZ25lZCBjaGFyIG51bWJlciwKKyAgaW50IHRpbWVvdXQKKyk7CitleHRlcm4gY2hhciAqdXNiRGVjb2RlU3RyaW5nIChjb25zdCBVc2JTdHJpbmdEZXNjcmlwdG9yICpkZXNjcmlwdG9yKTsKK2V4dGVybiBjaGFyICp1c2JHZXRNYW51ZmFjdHVyZXIgKFVzYkRldmljZSAqZGV2aWNlLCBpbnQgdGltZW91dCk7CitleHRlcm4gY2hhciAqdXNiR2V0UHJvZHVjdCAoVXNiRGV2aWNlICpkZXZpY2UsIGludCB0aW1lb3V0KTsKK2V4dGVybiBjaGFyICp1c2JHZXRTZXJpYWxOdW1iZXIgKFVzYkRldmljZSAqZGV2aWNlLCBpbnQgdGltZW91dCk7CisKK2V4dGVybiB2b2lkIHVzYkxvZ1N0cmluZyAoCisgIFVzYkRldmljZSAqZGV2aWNlLAorICB1bnNpZ25lZCBjaGFyIG51bWJlciwKKyAgY29uc3QgY2hhciAqZGVzY3JpcHRpb24KKyk7CisKK3R5cGVkZWYgaW50IChVc2JTdHJpbmdWZXJpZmllcikgKGNvbnN0IGNoYXIgKnJlZmVyZW5jZSwgY29uc3QgY2hhciAqdmFsdWUpOworZXh0ZXJuIFVzYlN0cmluZ1ZlcmlmaWVyIHVzYlN0cmluZ0VxdWFsczsKK2V4dGVybiBVc2JTdHJpbmdWZXJpZmllciB1c2JTdHJpbmdNYXRjaGVzOworZXh0ZXJuIGludCB1c2JWZXJpZnlTdHJpbmcgKAorICBVc2JEZXZpY2UgKmRldmljZSwKKyAgVXNiU3RyaW5nVmVyaWZpZXIgdmVyaWZ5LAorICB1bnNpZ25lZCBjaGFyIGluZGV4LAorICBjb25zdCBjaGFyICp2YWx1ZQorKTsKK2V4dGVybiBpbnQgdXNiVmVyaWZ5TWFudWZhY3R1cmVyTmFtZSAoVXNiRGV2aWNlICpkZXZpY2UsIGNvbnN0IGNoYXIgKmVSZWdFeHApOworZXh0ZXJuIGludCB1c2JWZXJpZnlQcm9kdWN0RGVzY3JpcHRpb24gKFVzYkRldmljZSAqZGV2aWNlLCBjb25zdCBjaGFyICplUmVnRXhwKTsKK2V4dGVybiBpbnQgdXNiVmVyaWZ5U2VyaWFsTnVtYmVyIChVc2JEZXZpY2UgKmRldmljZSwgY29uc3QgY2hhciAqc3RyaW5nKTsKKworZXh0ZXJuIGludCB1c2JQYXJzZVZlbmRvcklkZW50aWZpZXIgKHVpbnQxNl90ICppZGVudGlmaWVyLCBjb25zdCBjaGFyICpzdHJpbmcpOworZXh0ZXJuIGludCB1c2JWZXJpZnlWZW5kb3JJZGVudGlmaWVyIChjb25zdCBVc2JEZXZpY2VEZXNjcmlwdG9yICpkZXNjcmlwdG9yLCB1aW50MTZfdCBpZGVudGlmaWVyKTsKKworZXh0ZXJuIGludCB1c2JQYXJzZVByb2R1Y3RJZGVudGlmaWVyICh1aW50MTZfdCAqaWRlbnRpZmllciwgY29uc3QgY2hhciAqc3RyaW5nKTsKK2V4dGVybiBpbnQgdXNiVmVyaWZ5UHJvZHVjdElkZW50aWZpZXIgKGNvbnN0IFVzYkRldmljZURlc2NyaXB0b3IgKmRlc2NyaXB0b3IsIHVpbnQxNl90IGlkZW50aWZpZXIpOworCitleHRlcm4gdm9pZCB1c2JCZWdpbklucHV0ICgKKyAgVXNiRGV2aWNlICpkZXZpY2UsCisgIHVuc2lnbmVkIGNoYXIgZW5kcG9pbnROdW1iZXIKKyk7CisKK2V4dGVybiBpbnQgdXNiTW9uaXRvcklucHV0RW5kcG9pbnQgKAorICBVc2JEZXZpY2UgKmRldmljZSwgdW5zaWduZWQgY2hhciBlbmRwb2ludE51bWJlciwKKyAgQXN5bmNNb25pdG9yQ2FsbGJhY2sgKmNhbGxiYWNrLCB2b2lkICpkYXRhCispOworCitleHRlcm4gc3NpemVfdCB1c2JSZWFkRW5kcG9pbnQgKAorICBVc2JEZXZpY2UgKmRldmljZSwKKyAgdW5zaWduZWQgY2hhciBlbmRwb2ludE51bWJlciwKKyAgdm9pZCAqYnVmZmVyLAorICBzaXplX3QgbGVuZ3RoLAorICBpbnQgdGltZW91dAorKTsKK2V4dGVybiBzc2l6ZV90IHVzYldyaXRlRW5kcG9pbnQgKAorICBVc2JEZXZpY2UgKmRldmljZSwKKyAgdW5zaWduZWQgY2hhciBlbmRwb2ludE51bWJlciwKKyAgY29uc3Qgdm9pZCAqYnVmZmVyLAorICBzaXplX3QgbGVuZ3RoLAorICBpbnQgdGltZW91dAorKTsKKwordHlwZWRlZiBzdHJ1Y3QgeworICB2b2lkICpjb250ZXh0OworICB2b2lkICpidWZmZXI7CisgIHNpemVfdCBzaXplOworICBzc2l6ZV90IGNvdW50OworICBpbnQgZXJyb3I7Cit9IFVzYlJlc3BvbnNlOworZXh0ZXJuIHZvaWQgKnVzYlN1Ym1pdFJlcXVlc3QgKAorICBVc2JEZXZpY2UgKmRldmljZSwKKyAgdW5zaWduZWQgY2hhciBlbmRwb2ludEFkZHJlc3MsCisgIHZvaWQgKmJ1ZmZlciwKKyAgc2l6ZV90IGxlbmd0aCwKKyAgdm9pZCAqY29udGV4dAorKTsKKworZXh0ZXJuIGludCB1c2JDYW5jZWxSZXF1ZXN0IChVc2JEZXZpY2UgKmRldmljZSwgdm9pZCAqcmVxdWVzdCk7CisKK2V4dGVybiB2b2lkICp1c2JSZWFwUmVzcG9uc2UgKAorICBVc2JEZXZpY2UgKmRldmljZSwKKyAgdW5zaWduZWQgY2hhciBlbmRwb2ludEFkZHJlc3MsCisgIFVzYlJlc3BvbnNlICpyZXNwb25zZSwKKyAgaW50IHdhaXQKKyk7CisKK2V4dGVybiBpbnQgdXNiQXdhaXRJbnB1dCAoCisgIFVzYkRldmljZSAqZGV2aWNlLAorICB1bnNpZ25lZCBjaGFyIGVuZHBvaW50TnVtYmVyLAorICBpbnQgdGltZW91dAorKTsKK2V4dGVybiBzc2l6ZV90IHVzYlJlYWREYXRhICgKKyAgVXNiRGV2aWNlICpkZXZpY2UsCisgIHVuc2lnbmVkIGNoYXIgZW5kcG9pbnROdW1iZXIsCisgIHZvaWQgKmJ1ZmZlciwKKyAgc2l6ZV90IGxlbmd0aCwKKyAgaW50IGluaXRpYWxUaW1lb3V0LAorICBpbnQgc3Vic2VxdWVudFRpbWVvdXQKKyk7CisKK2V4dGVybiBzc2l6ZV90IHVzYldyaXRlRGF0YSAoCisgIFVzYkRldmljZSAqZGV2aWNlLAorICB1bnNpZ25lZCBjaGFyIGVuZHBvaW50TnVtYmVyLAorICBjb25zdCB2b2lkICpkYXRhLAorICBzaXplX3QgbGVuZ3RoLAorICBpbnQgdGltZW91dAorKTsKKworZXh0ZXJuIGludCB1c2JBZGRJbnB1dEZpbHRlciAoVXNiRGV2aWNlICpkZXZpY2UsIFVzYklucHV0RmlsdGVyICpmaWx0ZXIpOworCitleHRlcm4gY29uc3QgVXNiU2VyaWFsT3BlcmF0aW9ucyAqdXNiR2V0U2VyaWFsT3BlcmF0aW9ucyAoVXNiRGV2aWNlICpkZXZpY2UpOworZXh0ZXJuIGludCB1c2JTZXRTZXJpYWxQYXJhbWV0ZXJzIChVc2JEZXZpY2UgKmRldmljZSwgY29uc3QgU2VyaWFsUGFyYW1ldGVycyAqcGFyYW1ldGVycyk7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgY29uc3QgVXNiQ2hhbm5lbERlZmluaXRpb24gKmRlZmluaXRpb247CisgIFVzYkRldmljZSAqZGV2aWNlOworfSBVc2JDaGFubmVsOworCitleHRlcm4gVXNiQ2hhbm5lbCAqdXNiT3BlbkNoYW5uZWwgKGNvbnN0IFVzYkNoYW5uZWxEZWZpbml0aW9uICpkZWZpbml0aW9ucywgY29uc3QgY2hhciAqaWRlbnRpZmllcik7CitleHRlcm4gdm9pZCB1c2JDbG9zZUNoYW5uZWwgKFVzYkNoYW5uZWwgKmNoYW5uZWwpOworZXh0ZXJuIGNvbnN0IGNoYXIgKnVzYk1ha2VDaGFubmVsSWRlbnRpZmllciAoVXNiQ2hhbm5lbCAqY2hhbm5lbCwgY2hhciAqYnVmZmVyLCBzaXplX3Qgc2l6ZSk7CisKK2V4dGVybiBjb25zdCBjaGFyICpjb25zdCAqdXNiR2V0RHJpdmVyQ29kZXMgKHVpbnQxNl90IHZlbmRvciwgdWludDE2X3QgcHJvZHVjdCk7CisKKyNkZWZpbmUgVVNCX0RFVklDRV9RVUFMSUZJRVIgInVzYiIKK2V4dGVybiBpbnQgaXNVc2JEZXZpY2VJZGVudGlmaWVyIChjb25zdCBjaGFyICoqaWRlbnRpZmllcik7CisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmIC8qIF9fY3BsdXNwbHVzICovCisKKyNlbmRpZiAvKiBCUkxUVFlfSU5DTFVERURfSU9fVVNCICovCmRpZmYgLS1naXQgYS9IZWFkZXJzL2tiZF9rZXljb2Rlcy5oIGIvSGVhZGVycy9rYmRfa2V5Y29kZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMTg1YTgyCi0tLSAvZGV2L251bGwKKysrIGIvSGVhZGVycy9rYmRfa2V5Y29kZXMuaApAQCAtMCwwICsxLDczNyBAQAorLyoKKyAqIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisgKiAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisgKgorICogQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKKyNpZm5kZWYgQlJMVFRZX0lOQ0xVREVEX0tCRF9LRVlDT0RFUworI2RlZmluZSBCUkxUVFlfSU5DTFVERURfS0JEX0tFWUNPREVTCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYgLyogX19jcGx1c3BsdXMgKi8KKwordHlwZWRlZiBlbnVtIHsKKyAgWFRfS0VZXzAwX0VzY2FwZSAgICAgICAgICAgID0gMFgwMSwKKyAgWFRfS0VZXzAwXzEgICAgICAgICAgICAgICAgID0gMFgwMiwKKyAgWFRfS0VZXzAwXzIgICAgICAgICAgICAgICAgID0gMFgwMywKKyAgWFRfS0VZXzAwXzMgICAgICAgICAgICAgICAgID0gMFgwNCwKKyAgWFRfS0VZXzAwXzQgICAgICAgICAgICAgICAgID0gMFgwNSwKKyAgWFRfS0VZXzAwXzUgICAgICAgICAgICAgICAgID0gMFgwNiwKKyAgWFRfS0VZXzAwXzYgICAgICAgICAgICAgICAgID0gMFgwNywKKyAgWFRfS0VZXzAwXzcgICAgICAgICAgICAgICAgID0gMFgwOCwKKyAgWFRfS0VZXzAwXzggICAgICAgICAgICAgICAgID0gMFgwOSwKKyAgWFRfS0VZXzAwXzkgICAgICAgICAgICAgICAgID0gMFgwQSwKKyAgWFRfS0VZXzAwXzAgICAgICAgICAgICAgICAgID0gMFgwQiwKKyAgWFRfS0VZXzAwX01pbnVzICAgICAgICAgICAgID0gMFgwQywKKyAgWFRfS0VZXzAwX0VxdWFsICAgICAgICAgICAgID0gMFgwRCwKKyAgWFRfS0VZXzAwX0JhY2tzcGFjZSAgICAgICAgID0gMFgwRSwKKyAgWFRfS0VZXzAwX1RhYiAgICAgICAgICAgICAgID0gMFgwRiwKKyAgWFRfS0VZXzAwX1EgICAgICAgICAgICAgICAgID0gMFgxMCwKKyAgWFRfS0VZXzAwX1cgICAgICAgICAgICAgICAgID0gMFgxMSwKKyAgWFRfS0VZXzAwX0UgICAgICAgICAgICAgICAgID0gMFgxMiwKKyAgWFRfS0VZXzAwX1IgICAgICAgICAgICAgICAgID0gMFgxMywKKyAgWFRfS0VZXzAwX1QgICAgICAgICAgICAgICAgID0gMFgxNCwKKyAgWFRfS0VZXzAwX1kgICAgICAgICAgICAgICAgID0gMFgxNSwKKyAgWFRfS0VZXzAwX1UgICAgICAgICAgICAgICAgID0gMFgxNiwKKyAgWFRfS0VZXzAwX0kgICAgICAgICAgICAgICAgID0gMFgxNywKKyAgWFRfS0VZXzAwX08gICAgICAgICAgICAgICAgID0gMFgxOCwKKyAgWFRfS0VZXzAwX1AgICAgICAgICAgICAgICAgID0gMFgxOSwKKyAgWFRfS0VZXzAwX0xlZnRCcmFja2V0ICAgICAgID0gMFgxQSwKKyAgWFRfS0VZXzAwX1JpZ2h0QnJhY2tldCAgICAgID0gMFgxQiwKKyAgWFRfS0VZXzAwX0VudGVyICAgICAgICAgICAgID0gMFgxQywKKyAgWFRfS0VZXzAwX0xlZnRDb250cm9sICAgICAgID0gMFgxRCwKKyAgWFRfS0VZXzAwX0EgICAgICAgICAgICAgICAgID0gMFgxRSwKKyAgWFRfS0VZXzAwX1MgICAgICAgICAgICAgICAgID0gMFgxRiwKKyAgWFRfS0VZXzAwX0QgICAgICAgICAgICAgICAgID0gMFgyMCwKKyAgWFRfS0VZXzAwX0YgICAgICAgICAgICAgICAgID0gMFgyMSwKKyAgWFRfS0VZXzAwX0cgICAgICAgICAgICAgICAgID0gMFgyMiwKKyAgWFRfS0VZXzAwX0ggICAgICAgICAgICAgICAgID0gMFgyMywKKyAgWFRfS0VZXzAwX0ogICAgICAgICAgICAgICAgID0gMFgyNCwKKyAgWFRfS0VZXzAwX0sgICAgICAgICAgICAgICAgID0gMFgyNSwKKyAgWFRfS0VZXzAwX0wgICAgICAgICAgICAgICAgID0gMFgyNiwKKyAgWFRfS0VZXzAwX1NlbWljb2xvbiAgICAgICAgID0gMFgyNywKKyAgWFRfS0VZXzAwX0Fwb3N0cm9waGUgICAgICAgID0gMFgyOCwKKyAgWFRfS0VZXzAwX0dyYXZlICAgICAgICAgICAgID0gMFgyOSwKKyAgWFRfS0VZXzAwX0xlZnRTaGlmdCAgICAgICAgID0gMFgyQSwKKyAgWFRfS0VZXzAwX0JhY2tzbGFzaCAgICAgICAgID0gMFgyQiwKKyAgWFRfS0VZXzAwX0V1cm9wZTEgICAgICAgICAgID0gMFgyQiwKKyAgWFRfS0VZXzAwX1ogICAgICAgICAgICAgICAgID0gMFgyQywKKyAgWFRfS0VZXzAwX1ggICAgICAgICAgICAgICAgID0gMFgyRCwKKyAgWFRfS0VZXzAwX0MgICAgICAgICAgICAgICAgID0gMFgyRSwKKyAgWFRfS0VZXzAwX1YgICAgICAgICAgICAgICAgID0gMFgyRiwKKyAgWFRfS0VZXzAwX0IgICAgICAgICAgICAgICAgID0gMFgzMCwKKyAgWFRfS0VZXzAwX04gICAgICAgICAgICAgICAgID0gMFgzMSwKKyAgWFRfS0VZXzAwX00gICAgICAgICAgICAgICAgID0gMFgzMiwKKyAgWFRfS0VZXzAwX0NvbW1hICAgICAgICAgICAgID0gMFgzMywKKyAgWFRfS0VZXzAwX1BlcmlvZCAgICAgICAgICAgID0gMFgzNCwKKyAgWFRfS0VZXzAwX1NsYXNoICAgICAgICAgICAgID0gMFgzNSwKKyAgWFRfS0VZXzAwX1JpZ2h0U2hpZnQgICAgICAgID0gMFgzNiwKKyAgWFRfS0VZXzAwX0tQQXN0ZXJpc2sgICAgICAgID0gMFgzNywKKyAgWFRfS0VZXzAwX0xlZnRBbHQgICAgICAgICAgID0gMFgzOCwKKyAgWFRfS0VZXzAwX1NwYWNlICAgICAgICAgICAgID0gMFgzOSwKKyAgWFRfS0VZXzAwX0NhcHNMb2NrICAgICAgICAgID0gMFgzQSwKKyAgWFRfS0VZXzAwX0YxICAgICAgICAgICAgICAgID0gMFgzQiwKKyAgWFRfS0VZXzAwX0YyICAgICAgICAgICAgICAgID0gMFgzQywKKyAgWFRfS0VZXzAwX0YzICAgICAgICAgICAgICAgID0gMFgzRCwKKyAgWFRfS0VZXzAwX0Y0ICAgICAgICAgICAgICAgID0gMFgzRSwKKyAgWFRfS0VZXzAwX0Y1ICAgICAgICAgICAgICAgID0gMFgzRiwKKyAgWFRfS0VZXzAwX0Y2ICAgICAgICAgICAgICAgID0gMFg0MCwKKyAgWFRfS0VZXzAwX0Y3ICAgICAgICAgICAgICAgID0gMFg0MSwKKyAgWFRfS0VZXzAwX0Y4ICAgICAgICAgICAgICAgID0gMFg0MiwKKyAgWFRfS0VZXzAwX0Y5ICAgICAgICAgICAgICAgID0gMFg0MywKKyAgWFRfS0VZXzAwX0YxMCAgICAgICAgICAgICAgID0gMFg0NCwKKyAgWFRfS0VZXzAwX051bUxvY2sgICAgICAgICAgID0gMFg0NSwKKyAgWFRfS0VZXzAwX1Njcm9sbExvY2sgICAgICAgID0gMFg0NiwKKyAgWFRfS0VZXzAwX0tQNyAgICAgICAgICAgICAgID0gMFg0NywKKyAgWFRfS0VZXzAwX0tQOCAgICAgICAgICAgICAgID0gMFg0OCwKKyAgWFRfS0VZXzAwX0tQOSAgICAgICAgICAgICAgID0gMFg0OSwKKyAgWFRfS0VZXzAwX0tQTWludXMgICAgICAgICAgID0gMFg0QSwKKyAgWFRfS0VZXzAwX0tQNCAgICAgICAgICAgICAgID0gMFg0QiwKKyAgWFRfS0VZXzAwX0tQNSAgICAgICAgICAgICAgID0gMFg0QywKKyAgWFRfS0VZXzAwX0tQNiAgICAgICAgICAgICAgID0gMFg0RCwKKyAgWFRfS0VZXzAwX0tQUGx1cyAgICAgICAgICAgID0gMFg0RSwKKyAgWFRfS0VZXzAwX0tQMSAgICAgICAgICAgICAgID0gMFg0RiwKKyAgWFRfS0VZXzAwX0tQMiAgICAgICAgICAgICAgID0gMFg1MCwKKyAgWFRfS0VZXzAwX0tQMyAgICAgICAgICAgICAgID0gMFg1MSwKKyAgWFRfS0VZXzAwX0tQMCAgICAgICAgICAgICAgID0gMFg1MiwKKyAgWFRfS0VZXzAwX0tQUGVyaW9kICAgICAgICAgID0gMFg1MywKKyAgWFRfS0VZXzAwX1N5c3RlbVJlcXVlc3QgICAgID0gMFg1NCwKKyAgWFRfS0VZXzAwX0V1cm9wZTIgICAgICAgICAgID0gMFg1NiwKKyAgWFRfS0VZXzAwX0YxMSAgICAgICAgICAgICAgID0gMFg1NywKKyAgWFRfS0VZXzAwX0YxMiAgICAgICAgICAgICAgID0gMFg1OCwKKyAgWFRfS0VZXzAwX0tQRXF1YWwgICAgICAgICAgID0gMFg1OSwKKyAgWFRfS0VZXzAwX0ludGVybmF0aW9uYWw2ICAgID0gMFg1QywKKyAgWFRfS0VZXzAwX0YxMyAgICAgICAgICAgICAgID0gMFg2NCwKKyAgWFRfS0VZXzAwX0YxNCAgICAgICAgICAgICAgID0gMFg2NSwKKyAgWFRfS0VZXzAwX0YxNSAgICAgICAgICAgICAgID0gMFg2NiwKKyAgWFRfS0VZXzAwX0YxNiAgICAgICAgICAgICAgID0gMFg2NywKKyAgWFRfS0VZXzAwX0YxNyAgICAgICAgICAgICAgID0gMFg2OCwKKyAgWFRfS0VZXzAwX0YxOCAgICAgICAgICAgICAgID0gMFg2OSwKKyAgWFRfS0VZXzAwX0YxOSAgICAgICAgICAgICAgID0gMFg2QSwKKyAgWFRfS0VZXzAwX0YyMCAgICAgICAgICAgICAgID0gMFg2QiwKKyAgWFRfS0VZXzAwX0YyMSAgICAgICAgICAgICAgID0gMFg2QywKKyAgWFRfS0VZXzAwX0YyMiAgICAgICAgICAgICAgID0gMFg2RCwKKyAgWFRfS0VZXzAwX0YyMyAgICAgICAgICAgICAgID0gMFg2RSwKKyAgWFRfS0VZXzAwX0ludGVybmF0aW9uYWwyICAgID0gMFg3MCwKKyAgWFRfS0VZXzAwX0NyU2VsICAgICAgICAgICAgID0gMFg3MiwKKyAgWFRfS0VZXzAwX0ludGVybmF0aW9uYWwxICAgID0gMFg3MywKKyAgWFRfS0VZXzAwX0V4U2VsICAgICAgICAgICAgID0gMFg3NCwKKyAgWFRfS0VZXzAwX0VubEhlbHAgICAgICAgICAgID0gMFg3NSwKKyAgWFRfS0VZXzAwX0YyNCAgICAgICAgICAgICAgID0gMFg3NiwKKyAgWFRfS0VZXzAwX0xhbmd1YWdlNSAgICAgICAgID0gMFg3NiwKKyAgWFRfS0VZXzAwX0xhbmd1YWdlNCAgICAgICAgID0gMFg3NywKKyAgWFRfS0VZXzAwX0xhbmd1YWdlMyAgICAgICAgID0gMFg3OCwKKyAgWFRfS0VZXzAwX0ludGVybmF0aW9uYWw0ICAgID0gMFg3OSwKKyAgWFRfS0VZXzAwX0ludGVybmF0aW9uYWw1ICAgID0gMFg3QiwKKyAgWFRfS0VZXzAwX0ludGVybmF0aW9uYWwzICAgID0gMFg3RCwKKyAgWFRfS0VZXzAwX0tQQ29tbWEgICAgICAgICAgID0gMFg3RSwKKyAgWFRfS0VZXzAwX0ZpbmQgICAgICAgICAgICAgID0gMFg4MiwKKyAgWFRfS0VZXzAwX0xhbmd1YWdlMiAgICAgICAgID0gMFhGMSwKKyAgWFRfS0VZXzAwX0xhbmd1YWdlMSAgICAgICAgID0gMFhGMiwKK30gWHRLZXkwMDsKKwordHlwZWRlZiBlbnVtIHsKKyAgWFRfS0VZX0UwX1JlZG8gICAgICAgICAgICAgID0gMFgwNywKKyAgWFRfS0VZX0UwX1VuZG8gICAgICAgICAgICAgID0gMFgwOCwKKyAgWFRfS0VZX0UwX1Bhc3RlICAgICAgICAgICAgID0gMFgwQSwKKyAgWFRfS0VZX0UwX01lZGlhUHJldmlvdXMgICAgID0gMFgxMCwKKyAgWFRfS0VZX0UwX0N1dCAgICAgICAgICAgICAgID0gMFgxNywKKyAgWFRfS0VZX0UwX0NvcHkgICAgICAgICAgICAgID0gMFgxOCwKKyAgWFRfS0VZX0UwX01lZGlhTmV4dCAgICAgICAgID0gMFgxOSwKKyAgWFRfS0VZX0UwX0tQRW50ZXIgICAgICAgICAgID0gMFgxQywKKyAgWFRfS0VZX0UwX1JpZ2h0Q29udHJvbCAgICAgID0gMFgxRCwKKyAgWFRfS0VZX0UwX01haWwgICAgICAgICAgICAgID0gMFgxRSwKKyAgWFRfS0VZX0UwX011dGUgICAgICAgICAgICAgID0gMFgyMCwKKyAgWFRfS0VZX0UwX0NhbGN1bGF0b3IgICAgICAgID0gMFgyMSwKKyAgWFRfS0VZX0UwX01lZGlhUGxheVBhdXNlICAgID0gMFgyMiwKKyAgWFRfS0VZX0UwX01lZGlhU3RvcCAgICAgICAgID0gMFgyNCwKKyAgWFRfS0VZX0UwX01lZGlhRWplY3QgICAgICAgID0gMFgyQywKKyAgWFRfS0VZX0UwX1ZvbHVtZURvd24gICAgICAgID0gMFgyRSwKKyAgWFRfS0VZX0UwX1ZvbHVtZVVwICAgICAgICAgID0gMFgzMCwKKyAgWFRfS0VZX0UwX1dlYkhvbWUgICAgICAgICAgID0gMFgzMiwKKyAgWFRfS0VZX0UwX0tQU2xhc2ggICAgICAgICAgID0gMFgzNSwKKyAgWFRfS0VZX0UwX1ByaW50U2NyZWVuICAgICAgID0gMFgzNywKKyAgWFRfS0VZX0UwX1JpZ2h0QWx0ICAgICAgICAgID0gMFgzOCwKKyAgWFRfS0VZX0UwX0hlbHAgICAgICAgICAgICAgID0gMFgzQiwKKyAgWFRfS0VZX0UwX01lZGlhQXVkaW8gICAgICAgID0gMFgzQywKKyAgWFRfS0VZX0UwX0hvbWUgICAgICAgICAgICAgID0gMFg0NywKKyAgWFRfS0VZX0UwX0Fycm93VXAgICAgICAgICAgID0gMFg0OCwKKyAgWFRfS0VZX0UwX1BhZ2VVcCAgICAgICAgICAgID0gMFg0OSwKKyAgWFRfS0VZX0UwX0Fycm93TGVmdCAgICAgICAgID0gMFg0QiwKKyAgWFRfS0VZX0UwX0Fycm93UmlnaHQgICAgICAgID0gMFg0RCwKKyAgWFRfS0VZX0UwX0VuZCAgICAgICAgICAgICAgID0gMFg0RiwKKyAgWFRfS0VZX0UwX0Fycm93RG93biAgICAgICAgID0gMFg1MCwKKyAgWFRfS0VZX0UwX1BhZ2VEb3duICAgICAgICAgID0gMFg1MSwKKyAgWFRfS0VZX0UwX0luc2VydCAgICAgICAgICAgID0gMFg1MiwKKyAgWFRfS0VZX0UwX0RlbGV0ZSAgICAgICAgICAgID0gMFg1MywKKyAgWFRfS0VZX0UwX0xlZnRHVUkgICAgICAgICAgID0gMFg1QiwKKyAgWFRfS0VZX0UwX1JpZ2h0R1VJICAgICAgICAgID0gMFg1QywKKyAgWFRfS0VZX0UwX0NvbnRleHQgICAgICAgICAgID0gMFg1RCwKKyAgWFRfS0VZX0UwX1Bvd2VyICAgICAgICAgICAgID0gMFg1RSwKKyAgWFRfS0VZX0UwX1NsZWVwICAgICAgICAgICAgID0gMFg1RiwKKyAgWFRfS0VZX0UwX1dha2UgICAgICAgICAgICAgID0gMFg2MywKKyAgWFRfS0VZX0UwX01lZGlhUGljdHVyZXMgICAgID0gMFg2NCwKKyAgWFRfS0VZX0UwX1dlYlNlYXJjaCAgICAgICAgID0gMFg2NSwKKyAgWFRfS0VZX0UwX1dlYkJvb2ttYXJrcyAgICAgID0gMFg2NiwKKyAgWFRfS0VZX0UwX1dlYlJlZnJlc2ggICAgICAgID0gMFg2NywKKyAgWFRfS0VZX0UwX1dlYlN0b3AgICAgICAgICAgID0gMFg2OCwKKyAgWFRfS0VZX0UwX1dlYkZvcndhcmQgICAgICAgID0gMFg2OSwKKyAgWFRfS0VZX0UwX1dlYkJhY2sgICAgICAgICAgID0gMFg2QSwKKyAgWFRfS0VZX0UwX015Q29tcHV0ZXIgICAgICAgID0gMFg2QiwKKyAgWFRfS0VZX0UwX01haWxfWDEgICAgICAgICAgID0gMFg2QywKKyAgWFRfS0VZX0UwX01lZGlhVmlkZW8gICAgICAgID0gMFg2RCwKK30gWHRLZXlFMDsKKwordHlwZWRlZiBlbnVtIHsKKyAgWFRfS0VZX0UxX1BhdXNlID0gMFgxRCwKK30gWHRLZXlFMTsKKworI2RlZmluZSBYVF9CSVRfUkVMRUFTRSAwWDgwCisjZGVmaW5lIFhUX01PRF8wMCAgICAgIDBYMDAKKyNkZWZpbmUgWFRfTU9EX0UwICAgICAgMFhFMAorI2RlZmluZSBYVF9NT0RfRTEgICAgICAwWEUxCisjZGVmaW5lIFhUX0tFWShncm91cCxuYW1lKSAoKFhUX01PRF8jI2dyb3VwIDw8IDgpIHwgWFRfS0VZXyMjZ3JvdXAjI18jI25hbWUpCisKK3R5cGVkZWYgZW51bSB7CisgIEFUX0tFWV8wMF9GOSAgICAgICAgICAgICAgICA9IDBYMDEsCisgIEFUX0tFWV8wMF9GN19YMSAgICAgICAgICAgICA9IDBYMDIsCisgIEFUX0tFWV8wMF9GNSAgICAgICAgICAgICAgICA9IDBYMDMsCisgIEFUX0tFWV8wMF9GMyAgICAgICAgICAgICAgICA9IDBYMDQsCisgIEFUX0tFWV8wMF9GMSAgICAgICAgICAgICAgICA9IDBYMDUsCisgIEFUX0tFWV8wMF9GMiAgICAgICAgICAgICAgICA9IDBYMDYsCisgIEFUX0tFWV8wMF9GMTIgICAgICAgICAgICAgICA9IDBYMDcsCisgIEFUX0tFWV8wMF9GMTMgICAgICAgICAgICAgICA9IDBYMDgsCisgIEFUX0tFWV8wMF9GMTAgICAgICAgICAgICAgICA9IDBYMDksCisgIEFUX0tFWV8wMF9GOCAgICAgICAgICAgICAgICA9IDBYMEEsCisgIEFUX0tFWV8wMF9GNiAgICAgICAgICAgICAgICA9IDBYMEIsCisgIEFUX0tFWV8wMF9GNCAgICAgICAgICAgICAgICA9IDBYMEMsCisgIEFUX0tFWV8wMF9UYWIgICAgICAgICAgICAgICA9IDBYMEQsCisgIEFUX0tFWV8wMF9HcmF2ZSAgICAgICAgICAgICA9IDBYMEUsCisgIEFUX0tFWV8wMF9LUEVxdWFsICAgICAgICAgICA9IDBYMEYsCisgIEFUX0tFWV8wMF9GMTQgICAgICAgICAgICAgICA9IDBYMTAsCisgIEFUX0tFWV8wMF9MZWZ0QWx0ICAgICAgICAgICA9IDBYMTEsCisgIEFUX0tFWV8wMF9MZWZ0U2hpZnQgICAgICAgICA9IDBYMTIsCisgIEFUX0tFWV8wMF9JbnRlcm5hdGlvbmFsMiAgICA9IDBYMTMsCisgIEFUX0tFWV8wMF9MZWZ0Q29udHJvbCAgICAgICA9IDBYMTQsCisgIEFUX0tFWV8wMF9RICAgICAgICAgICAgICAgICA9IDBYMTUsCisgIEFUX0tFWV8wMF8xICAgICAgICAgICAgICAgICA9IDBYMTYsCisgIEFUX0tFWV8wMF9GMTUgICAgICAgICAgICAgICA9IDBYMTgsCisgIEFUX0tFWV8wMF9aICAgICAgICAgICAgICAgICA9IDBYMUEsCisgIEFUX0tFWV8wMF9TICAgICAgICAgICAgICAgICA9IDBYMUIsCisgIEFUX0tFWV8wMF9BICAgICAgICAgICAgICAgICA9IDBYMUMsCisgIEFUX0tFWV8wMF9XICAgICAgICAgICAgICAgICA9IDBYMUQsCisgIEFUX0tFWV8wMF8yICAgICAgICAgICAgICAgICA9IDBYMUUsCisgIEFUX0tFWV8wMF9GMTYgICAgICAgICAgICAgICA9IDBYMjAsCisgIEFUX0tFWV8wMF9DICAgICAgICAgICAgICAgICA9IDBYMjEsCisgIEFUX0tFWV8wMF9YICAgICAgICAgICAgICAgICA9IDBYMjIsCisgIEFUX0tFWV8wMF9EICAgICAgICAgICAgICAgICA9IDBYMjMsCisgIEFUX0tFWV8wMF9FICAgICAgICAgICAgICAgICA9IDBYMjQsCisgIEFUX0tFWV8wMF80ICAgICAgICAgICAgICAgICA9IDBYMjUsCisgIEFUX0tFWV8wMF8zICAgICAgICAgICAgICAgICA9IDBYMjYsCisgIEFUX0tFWV8wMF9JbnRlcm5hdGlvbmFsNiAgICA9IDBYMjcsCisgIEFUX0tFWV8wMF9GMTcgICAgICAgICAgICAgICA9IDBYMjgsCisgIEFUX0tFWV8wMF9TcGFjZSAgICAgICAgICAgICA9IDBYMjksCisgIEFUX0tFWV8wMF9WICAgICAgICAgICAgICAgICA9IDBYMkEsCisgIEFUX0tFWV8wMF9GICAgICAgICAgICAgICAgICA9IDBYMkIsCisgIEFUX0tFWV8wMF9UICAgICAgICAgICAgICAgICA9IDBYMkMsCisgIEFUX0tFWV8wMF9SICAgICAgICAgICAgICAgICA9IDBYMkQsCisgIEFUX0tFWV8wMF81ICAgICAgICAgICAgICAgICA9IDBYMkUsCisgIEFUX0tFWV8wMF9GMTggICAgICAgICAgICAgICA9IDBYMzAsCisgIEFUX0tFWV8wMF9OICAgICAgICAgICAgICAgICA9IDBYMzEsCisgIEFUX0tFWV8wMF9CICAgICAgICAgICAgICAgICA9IDBYMzIsCisgIEFUX0tFWV8wMF9IICAgICAgICAgICAgICAgICA9IDBYMzMsCisgIEFUX0tFWV8wMF9HICAgICAgICAgICAgICAgICA9IDBYMzQsCisgIEFUX0tFWV8wMF9ZICAgICAgICAgICAgICAgICA9IDBYMzUsCisgIEFUX0tFWV8wMF82ICAgICAgICAgICAgICAgICA9IDBYMzYsCisgIEFUX0tFWV8wMF9GMTkgICAgICAgICAgICAgICA9IDBYMzgsCisgIEFUX0tFWV8wMF9DclNlbCAgICAgICAgICAgICA9IDBYMzksCisgIEFUX0tFWV8wMF9NICAgICAgICAgICAgICAgICA9IDBYM0EsCisgIEFUX0tFWV8wMF9KICAgICAgICAgICAgICAgICA9IDBYM0IsCisgIEFUX0tFWV8wMF9VICAgICAgICAgICAgICAgICA9IDBYM0MsCisgIEFUX0tFWV8wMF83ICAgICAgICAgICAgICAgICA9IDBYM0QsCisgIEFUX0tFWV8wMF84ICAgICAgICAgICAgICAgICA9IDBYM0UsCisgIEFUX0tFWV8wMF9GMjAgICAgICAgICAgICAgICA9IDBYNDAsCisgIEFUX0tFWV8wMF9Db21tYSAgICAgICAgICAgICA9IDBYNDEsCisgIEFUX0tFWV8wMF9LICAgICAgICAgICAgICAgICA9IDBYNDIsCisgIEFUX0tFWV8wMF9JICAgICAgICAgICAgICAgICA9IDBYNDMsCisgIEFUX0tFWV8wMF9PICAgICAgICAgICAgICAgICA9IDBYNDQsCisgIEFUX0tFWV8wMF8wICAgICAgICAgICAgICAgICA9IDBYNDUsCisgIEFUX0tFWV8wMF85ICAgICAgICAgICAgICAgICA9IDBYNDYsCisgIEFUX0tFWV8wMF9GMjEgICAgICAgICAgICAgICA9IDBYNDgsCisgIEFUX0tFWV8wMF9QZXJpb2QgICAgICAgICAgICA9IDBYNDksCisgIEFUX0tFWV8wMF9TbGFzaCAgICAgICAgICAgICA9IDBYNEEsCisgIEFUX0tFWV8wMF9MICAgICAgICAgICAgICAgICA9IDBYNEIsCisgIEFUX0tFWV8wMF9TZW1pY29sb24gICAgICAgICA9IDBYNEMsCisgIEFUX0tFWV8wMF9QICAgICAgICAgICAgICAgICA9IDBYNEQsCisgIEFUX0tFWV8wMF9NaW51cyAgICAgICAgICAgICA9IDBYNEUsCisgIEFUX0tFWV8wMF9GMjIgICAgICAgICAgICAgICA9IDBYNTAsCisgIEFUX0tFWV8wMF9JbnRlcm5hdGlvbmFsMSAgICA9IDBYNTEsCisgIEFUX0tFWV8wMF9BcG9zdHJvcGhlICAgICAgICA9IDBYNTIsCisgIEFUX0tFWV8wMF9FeFNlbCAgICAgICAgICAgICA9IDBYNTMsCisgIEFUX0tFWV8wMF9MZWZ0QnJhY2tldCAgICAgICA9IDBYNTQsCisgIEFUX0tFWV8wMF9FcXVhbCAgICAgICAgICAgICA9IDBYNTUsCisgIEFUX0tFWV8wMF9GMjMgICAgICAgICAgICAgICA9IDBYNTcsCisgIEFUX0tFWV8wMF9DYXBzTG9jayAgICAgICAgICA9IDBYNTgsCisgIEFUX0tFWV8wMF9SaWdodFNoaWZ0ICAgICAgICA9IDBYNTksCisgIEFUX0tFWV8wMF9FbnRlciAgICAgICAgICAgICA9IDBYNUEsCisgIEFUX0tFWV8wMF9SaWdodEJyYWNrZXQgICAgICA9IDBYNUIsCisgIEFUX0tFWV8wMF9FbmxIZWxwICAgICAgICAgICA9IDBYNUMsCisgIEFUX0tFWV8wMF9CYWNrc2xhc2ggICAgICAgICA9IDBYNUQsCisgIEFUX0tFWV8wMF9FdXJvcGUxICAgICAgICAgICA9IDBYNUQsCisgIEFUX0tFWV8wMF9GMjQgICAgICAgICAgICAgICA9IDBYNUYsCisgIEFUX0tFWV8wMF9MYW5ndWFnZTUgICAgICAgICA9IDBYNUYsCisgIEFUX0tFWV8wMF9FdXJvcGUyICAgICAgICAgICA9IDBYNjEsCisgIEFUX0tFWV8wMF9MYW5ndWFnZTQgICAgICAgICA9IDBYNjIsCisgIEFUX0tFWV8wMF9MYW5ndWFnZTMgICAgICAgICA9IDBYNjMsCisgIEFUX0tFWV8wMF9JbnRlcm5hdGlvbmFsNCAgICA9IDBYNjQsCisgIEFUX0tFWV8wMF9CYWNrc3BhY2UgICAgICAgICA9IDBYNjYsCisgIEFUX0tFWV8wMF9JbnRlcm5hdGlvbmFsNSAgICA9IDBYNjcsCisgIEFUX0tFWV8wMF9LUDEgICAgICAgICAgICAgICA9IDBYNjksCisgIEFUX0tFWV8wMF9JbnRlcm5hdGlvbmFsMyAgICA9IDBYNkEsCisgIEFUX0tFWV8wMF9LUDQgICAgICAgICAgICAgICA9IDBYNkIsCisgIEFUX0tFWV8wMF9LUDcgICAgICAgICAgICAgICA9IDBYNkMsCisgIEFUX0tFWV8wMF9LUENvbW1hICAgICAgICAgICA9IDBYNkQsCisgIEFUX0tFWV8wMF9LUDAgICAgICAgICAgICAgICA9IDBYNzAsCisgIEFUX0tFWV8wMF9LUFBlcmlvZCAgICAgICAgICA9IDBYNzEsCisgIEFUX0tFWV8wMF9LUDIgICAgICAgICAgICAgICA9IDBYNzIsCisgIEFUX0tFWV8wMF9LUDUgICAgICAgICAgICAgICA9IDBYNzMsCisgIEFUX0tFWV8wMF9LUDYgICAgICAgICAgICAgICA9IDBYNzQsCisgIEFUX0tFWV8wMF9LUDggICAgICAgICAgICAgICA9IDBYNzUsCisgIEFUX0tFWV8wMF9Fc2NhcGUgICAgICAgICAgICA9IDBYNzYsCisgIEFUX0tFWV8wMF9OdW1Mb2NrICAgICAgICAgICA9IDBYNzcsCisgIEFUX0tFWV8wMF9GMTEgICAgICAgICAgICAgICA9IDBYNzgsCisgIEFUX0tFWV8wMF9LUFBsdXMgICAgICAgICAgICA9IDBYNzksCisgIEFUX0tFWV8wMF9LUDMgICAgICAgICAgICAgICA9IDBYN0EsCisgIEFUX0tFWV8wMF9LUE1pbnVzICAgICAgICAgICA9IDBYN0IsCisgIEFUX0tFWV8wMF9LUEFzdGVyaXNrICAgICAgICA9IDBYN0MsCisgIEFUX0tFWV8wMF9LUDkgICAgICAgICAgICAgICA9IDBYN0QsCisgIEFUX0tFWV8wMF9TY3JvbGxMb2NrICAgICAgICA9IDBYN0UsCisgIEFUX0tFWV8wMF9GNyAgICAgICAgICAgICAgICA9IDBYODMsCisgIEFUX0tFWV8wMF9TeXN0ZW1SZXF1ZXN0ICAgICA9IDBYODQsCisgIEFUX0tFWV8wMF9MYW5ndWFnZTIgICAgICAgICA9IDBYRjEsCisgIEFUX0tFWV8wMF9MYW5ndWFnZTEgICAgICAgICA9IDBYRjIsCit9IEF0S2V5MDA7CisKK3R5cGVkZWYgZW51bSB7CisgIEFUX0tFWV9FMF9IZWxwICAgICAgICAgICAgICA9IDBYMDUsCisgIEFUX0tFWV9FMF9NZWRpYUF1ZGlvICAgICAgICA9IDBYMDYsCisgIEFUX0tFWV9FMF9NZWRpYVBpY3R1cmVzICAgICA9IDBYMDgsCisgIEFUX0tFWV9FMF9XZWJTZWFyY2ggICAgICAgICA9IDBYMTAsCisgIEFUX0tFWV9FMF9SaWdodEFsdCAgICAgICAgICA9IDBYMTEsCisgIEFUX0tFWV9FMF9SaWdodENvbnRyb2wgICAgICA9IDBYMTQsCisgIEFUX0tFWV9FMF9NZWRpYVByZXZpb3VzICAgICA9IDBYMTUsCisgIEFUX0tFWV9FMF9XZWJCb29rbWFya3MgICAgICA9IDBYMTgsCisgIEFUX0tFWV9FMF9NZWRpYUVqZWN0ICAgICAgICA9IDBYMUEsCisgIEFUX0tFWV9FMF9NYWlsICAgICAgICAgICAgICA9IDBYMUMsCisgIEFUX0tFWV9FMF9MZWZ0R1VJICAgICAgICAgICA9IDBYMUYsCisgIEFUX0tFWV9FMF9XZWJSZWZyZXNoICAgICAgICA9IDBYMjAsCisgIEFUX0tFWV9FMF9Wb2x1bWVEb3duICAgICAgICA9IDBYMjEsCisgIEFUX0tFWV9FMF9NdXRlICAgICAgICAgICAgICA9IDBYMjMsCisgIEFUX0tFWV9FMF9SaWdodEdVSSAgICAgICAgICA9IDBYMjcsCisgIEFUX0tFWV9FMF9XZWJTdG9wICAgICAgICAgICA9IDBYMjgsCisgIEFUX0tFWV9FMF9DYWxjdWxhdG9yICAgICAgICA9IDBYMkIsCisgIEFUX0tFWV9FMF9Db250ZXh0ICAgICAgICAgICA9IDBYMkYsCisgIEFUX0tFWV9FMF9XZWJGb3J3YXJkICAgICAgICA9IDBYMzAsCisgIEFUX0tFWV9FMF9Wb2x1bWVVcCAgICAgICAgICA9IDBYMzIsCisgIEFUX0tFWV9FMF9NZWRpYVBsYXlQYXVzZSAgICA9IDBYMzQsCisgIEFUX0tFWV9FMF9SZWRvICAgICAgICAgICAgICA9IDBYMzYsCisgIEFUX0tFWV9FMF9Qb3dlciAgICAgICAgICAgICA9IDBYMzcsCisgIEFUX0tFWV9FMF9XZWJCYWNrICAgICAgICAgICA9IDBYMzgsCisgIEFUX0tFWV9FMF9XZWJIb21lICAgICAgICAgICA9IDBYM0EsCisgIEFUX0tFWV9FMF9NZWRpYVN0b3AgICAgICAgICA9IDBYM0IsCisgIEFUX0tFWV9FMF9VbmRvICAgICAgICAgICAgICA9IDBYM0QsCisgIEFUX0tFWV9FMF9TbGVlcCAgICAgICAgICAgICA9IDBYM0YsCisgIEFUX0tFWV9FMF9NeUNvbXB1dGVyICAgICAgICA9IDBYNDAsCisgIEFUX0tFWV9FMF9DdXQgICAgICAgICAgICAgICA9IDBYNDMsCisgIEFUX0tFWV9FMF9Db3B5ICAgICAgICAgICAgICA9IDBYNDQsCisgIEFUX0tFWV9FMF9QYXN0ZSAgICAgICAgICAgICA9IDBYNDYsCisgIEFUX0tFWV9FMF9NYWlsX1gxICAgICAgICAgICA9IDBYNDgsCisgIEFUX0tFWV9FMF9LUFNsYXNoICAgICAgICAgICA9IDBYNEEsCisgIEFUX0tFWV9FMF9NZWRpYU5leHQgICAgICAgICA9IDBYNEQsCisgIEFUX0tFWV9FMF9NZWRpYVZpZGVvICAgICAgICA9IDBYNTAsCisgIEFUX0tFWV9FMF9LUEVudGVyICAgICAgICAgICA9IDBYNUEsCisgIEFUX0tFWV9FMF9XYWtlICAgICAgICAgICAgICA9IDBYNUUsCisgIEFUX0tFWV9FMF9FbmQgICAgICAgICAgICAgICA9IDBYNjksCisgIEFUX0tFWV9FMF9BcnJvd0xlZnQgICAgICAgICA9IDBYNkIsCisgIEFUX0tFWV9FMF9Ib21lICAgICAgICAgICAgICA9IDBYNkMsCisgIEFUX0tFWV9FMF9JbnNlcnQgICAgICAgICAgICA9IDBYNzAsCisgIEFUX0tFWV9FMF9EZWxldGUgICAgICAgICAgICA9IDBYNzEsCisgIEFUX0tFWV9FMF9BcnJvd0Rvd24gICAgICAgICA9IDBYNzIsCisgIEFUX0tFWV9FMF9BcnJvd1JpZ2h0ICAgICAgICA9IDBYNzQsCisgIEFUX0tFWV9FMF9BcnJvd1VwICAgICAgICAgICA9IDBYNzUsCisgIEFUX0tFWV9FMF9QYWdlRG93biAgICAgICAgICA9IDBYN0EsCisgIEFUX0tFWV9FMF9QcmludFNjcmVlbiAgICAgICA9IDBYN0MsCisgIEFUX0tFWV9FMF9QYWdlVXAgICAgICAgICAgICA9IDBYN0QsCit9IEF0S2V5RTA7CisKK3R5cGVkZWYgZW51bSB7CisgIEFUX0tFWV9FMV9QYXVzZSA9IDBYMTQsCit9IEF0S2V5RTE7CisKKyNkZWZpbmUgQVRfTU9EX1JFTEVBU0UgMFhGMAorI2RlZmluZSBBVF9NT0RfMDAgICAgICAwWDAwCisjZGVmaW5lIEFUX01PRF9FMCAgICAgIDBYRTAKKyNkZWZpbmUgQVRfTU9EX0UxICAgICAgMFhFMQorI2RlZmluZSBBVF9LRVkoZ3JvdXAsbmFtZSkgKChBVF9NT0RfIyNncm91cCA8PCA4KSB8IEFUX0tFWV8jI2dyb3VwIyNfIyNuYW1lKQorCit0eXBlZGVmIGVudW0geworICBQUzJfS0VZX0VubEhlbHAgICAgICAgID0gMFgwMSwKKyAgUFMyX0tFWV9FeFNlbCAgICAgICAgICA9IDBYMDMsCisgIFBTMl9LRVlfQ3JTZWwgICAgICAgICAgPSAwWDA0LAorICBQUzJfS0VZX0YxICAgICAgICAgICAgID0gMFgwNywKKyAgUFMyX0tFWV9Fc2NhcGUgICAgICAgICA9IDBYMDgsCisgIFBTMl9LRVlfVGFiICAgICAgICAgICAgPSAwWDBELAorICBQUzJfS0VZX0dyYXZlICAgICAgICAgID0gMFgwRSwKKyAgUFMyX0tFWV9GMiAgICAgICAgICAgICA9IDBYMEYsCisgIFBTMl9LRVlfTGVmdENvbnRyb2wgICAgPSAwWDExLAorICBQUzJfS0VZX0xlZnRTaGlmdCAgICAgID0gMFgxMiwKKyAgUFMyX0tFWV9FdXJvcGUyICAgICAgICA9IDBYMTMsCisgIFBTMl9LRVlfQ2Fwc0xvY2sgICAgICAgPSAwWDE0LAorICBQUzJfS0VZX1EgICAgICAgICAgICAgID0gMFgxNSwKKyAgUFMyX0tFWV8xICAgICAgICAgICAgICA9IDBYMTYsCisgIFBTMl9LRVlfRjMgICAgICAgICAgICAgPSAwWDE3LAorICBQUzJfS0VZX0xlZnRBbHQgICAgICAgID0gMFgxOSwKKyAgUFMyX0tFWV9aICAgICAgICAgICAgICA9IDBYMUEsCisgIFBTMl9LRVlfUyAgICAgICAgICAgICAgPSAwWDFCLAorICBQUzJfS0VZX0EgICAgICAgICAgICAgID0gMFgxQywKKyAgUFMyX0tFWV9XICAgICAgICAgICAgICA9IDBYMUQsCisgIFBTMl9LRVlfMiAgICAgICAgICAgICAgPSAwWDFFLAorICBQUzJfS0VZX0Y0ICAgICAgICAgICAgID0gMFgxRiwKKyAgUFMyX0tFWV9DICAgICAgICAgICAgICA9IDBYMjEsCisgIFBTMl9LRVlfWCAgICAgICAgICAgICAgPSAwWDIyLAorICBQUzJfS0VZX0QgICAgICAgICAgICAgID0gMFgyMywKKyAgUFMyX0tFWV9FICAgICAgICAgICAgICA9IDBYMjQsCisgIFBTMl9LRVlfNCAgICAgICAgICAgICAgPSAwWDI1LAorICBQUzJfS0VZXzMgICAgICAgICAgICAgID0gMFgyNiwKKyAgUFMyX0tFWV9GNSAgICAgICAgICAgICA9IDBYMjcsCisgIFBTMl9LRVlfU3BhY2UgICAgICAgICAgPSAwWDI5LAorICBQUzJfS0VZX1YgICAgICAgICAgICAgID0gMFgyQSwKKyAgUFMyX0tFWV9GICAgICAgICAgICAgICA9IDBYMkIsCisgIFBTMl9LRVlfVCAgICAgICAgICAgICAgPSAwWDJDLAorICBQUzJfS0VZX1IgICAgICAgICAgICAgID0gMFgyRCwKKyAgUFMyX0tFWV81ICAgICAgICAgICAgICA9IDBYMkUsCisgIFBTMl9LRVlfRjYgICAgICAgICAgICAgPSAwWDJGLAorICBQUzJfS0VZX04gICAgICAgICAgICAgID0gMFgzMSwKKyAgUFMyX0tFWV9CICAgICAgICAgICAgICA9IDBYMzIsCisgIFBTMl9LRVlfSCAgICAgICAgICAgICAgPSAwWDMzLAorICBQUzJfS0VZX0cgICAgICAgICAgICAgID0gMFgzNCwKKyAgUFMyX0tFWV9ZICAgICAgICAgICAgICA9IDBYMzUsCisgIFBTMl9LRVlfNiAgICAgICAgICAgICAgPSAwWDM2LAorICBQUzJfS0VZX0Y3ICAgICAgICAgICAgID0gMFgzNywKKyAgUFMyX0tFWV9SaWdodEFsdCAgICAgICA9IDBYMzksCisgIFBTMl9LRVlfTSAgICAgICAgICAgICAgPSAwWDNBLAorICBQUzJfS0VZX0ogICAgICAgICAgICAgID0gMFgzQiwKKyAgUFMyX0tFWV9VICAgICAgICAgICAgICA9IDBYM0MsCisgIFBTMl9LRVlfNyAgICAgICAgICAgICAgPSAwWDNELAorICBQUzJfS0VZXzggICAgICAgICAgICAgID0gMFgzRSwKKyAgUFMyX0tFWV9GOCAgICAgICAgICAgICA9IDBYM0YsCisgIFBTMl9LRVlfQ29tbWEgICAgICAgICAgPSAwWDQxLAorICBQUzJfS0VZX0sgICAgICAgICAgICAgID0gMFg0MiwKKyAgUFMyX0tFWV9JICAgICAgICAgICAgICA9IDBYNDMsCisgIFBTMl9LRVlfTyAgICAgICAgICAgICAgPSAwWDQ0LAorICBQUzJfS0VZXzAgICAgICAgICAgICAgID0gMFg0NSwKKyAgUFMyX0tFWV85ICAgICAgICAgICAgICA9IDBYNDYsCisgIFBTMl9LRVlfRjkgICAgICAgICAgICAgPSAwWDQ3LAorICBQUzJfS0VZX1BlcmlvZCAgICAgICAgID0gMFg0OSwKKyAgUFMyX0tFWV9TbGFzaCAgICAgICAgICA9IDBYNEEsCisgIFBTMl9LRVlfTCAgICAgICAgICAgICAgPSAwWDRCLAorICBQUzJfS0VZX1NlbWljb2xvbiAgICAgID0gMFg0QywKKyAgUFMyX0tFWV9QICAgICAgICAgICAgICA9IDBYNEQsCisgIFBTMl9LRVlfTWludXMgICAgICAgICAgPSAwWDRFLAorICBQUzJfS0VZX0YxMCAgICAgICAgICAgID0gMFg0RiwKKyAgUFMyX0tFWV9JbnRlcm5hdGlvbmFsMSA9IDBYNTEsCisgIFBTMl9LRVlfQXBvc3Ryb3BoZSAgICAgPSAwWDUyLAorICBQUzJfS0VZX0V1cm9wZTEgICAgICAgID0gMFg1MywKKyAgUFMyX0tFWV9MZWZ0QnJhY2tldCAgICA9IDBYNTQsCisgIFBTMl9LRVlfRXF1YWwgICAgICAgICAgPSAwWDU1LAorICBQUzJfS0VZX0YxMSAgICAgICAgICAgID0gMFg1NiwKKyAgUFMyX0tFWV9QcmludFNjcmVlbiAgICA9IDBYNTcsCisgIFBTMl9LRVlfUmlnaHRDb250cm9sICAgPSAwWDU4LAorICBQUzJfS0VZX1JpZ2h0U2hpZnQgICAgID0gMFg1OSwKKyAgUFMyX0tFWV9FbnRlciAgICAgICAgICA9IDBYNUEsCisgIFBTMl9LRVlfUmlnaHRCcmFja2V0ICAgPSAwWDVCLAorICBQUzJfS0VZX0JhY2tzbGFzaCAgICAgID0gMFg1QywKKyAgUFMyX0tFWV9JbnRlcm5hdGlvbmFsMyA9IDBYNUQsCisgIFBTMl9LRVlfRjEyICAgICAgICAgICAgPSAwWDVFLAorICBQUzJfS0VZX1Njcm9sbExvY2sgICAgID0gMFg1RiwKKyAgUFMyX0tFWV9BcnJvd0Rvd24gICAgICA9IDBYNjAsCisgIFBTMl9LRVlfQXJyb3dMZWZ0ICAgICAgPSAwWDYxLAorICBQUzJfS0VZX1BhdXNlICAgICAgICAgID0gMFg2MiwKKyAgUFMyX0tFWV9BcnJvd1VwICAgICAgICA9IDBYNjMsCisgIFBTMl9LRVlfRGVsZXRlICAgICAgICAgPSAwWDY0LAorICBQUzJfS0VZX0VuZCAgICAgICAgICAgID0gMFg2NSwKKyAgUFMyX0tFWV9CYWNrc3BhY2UgICAgICA9IDBYNjYsCisgIFBTMl9LRVlfSW5zZXJ0ICAgICAgICAgPSAwWDY3LAorICBQUzJfS0VZX0tQMSAgICAgICAgICAgID0gMFg2OSwKKyAgUFMyX0tFWV9BcnJvd1JpZ2h0ICAgICA9IDBYNkEsCisgIFBTMl9LRVlfS1A0ICAgICAgICAgICAgPSAwWDZCLAorICBQUzJfS0VZX0tQNyAgICAgICAgICAgID0gMFg2QywKKyAgUFMyX0tFWV9QYWdlRG93biAgICAgICA9IDBYNkQsCisgIFBTMl9LRVlfSG9tZSAgICAgICAgICAgPSAwWDZFLAorICBQUzJfS0VZX1BhZ2VVcCAgICAgICAgID0gMFg2RiwKKyAgUFMyX0tFWV9LUDAgICAgICAgICAgICA9IDBYNzAsCisgIFBTMl9LRVlfS1BQZXJpb2QgICAgICAgPSAwWDcxLAorICBQUzJfS0VZX0tQMiAgICAgICAgICAgID0gMFg3MiwKKyAgUFMyX0tFWV9LUDUgICAgICAgICAgICA9IDBYNzMsCisgIFBTMl9LRVlfS1A2ICAgICAgICAgICAgPSAwWDc0LAorICBQUzJfS0VZX0tQOCAgICAgICAgICAgID0gMFg3NSwKKyAgUFMyX0tFWV9OdW1Mb2NrICAgICAgICA9IDBYNzYsCisgIFBTMl9LRVlfS1BTbGFzaCAgICAgICAgPSAwWDc3LAorICBQUzJfS0VZX0tQRW50ZXIgICAgICAgID0gMFg3OSwKKyAgUFMyX0tFWV9LUDMgICAgICAgICAgICA9IDBYN0EsCisgIFBTMl9LRVlfS1BDb21tYSAgICAgICAgPSAwWDdCLAorICBQUzJfS0VZX0tQUGx1cyAgICAgICAgID0gMFg3QywKKyAgUFMyX0tFWV9LUDkgICAgICAgICAgICA9IDBYN0QsCisgIFBTMl9LRVlfS1BBc3RlcmlzayAgICAgPSAwWDdFLAorICBQUzJfS0VZX0tQTWludXMgICAgICAgID0gMFg4NCwKKyAgUFMyX0tFWV9JbnRlcm5hdGlvbmFsNSA9IDBYODUsCisgIFBTMl9LRVlfSW50ZXJuYXRpb25hbDQgPSAwWDg2LAorICBQUzJfS0VZX0ludGVybmF0aW9uYWwyID0gMFg4NywKKyAgUFMyX0tFWV9MZWZ0R1VJICAgICAgICA9IDBYOEIsCisgIFBTMl9LRVlfUmlnaHRHVUkgICAgICAgPSAwWDhDLAorICBQUzJfS0VZX0NvbnRleHQgICAgICAgID0gMFg4RCwKK30gUHMyS2V5OworCisjZGVmaW5lIFBTMl9NT0RfUkVMRUFTRSAwWEYwCisKK3R5cGVkZWYgZW51bSB7CisgIEhJRF9FUlJfUm9sbE92ZXIgICAgICAgICAgICAgPSAwWDAxLAorICBISURfRVJSX1Bvc3RGYWlsICAgICAgICAgICAgID0gMFgwMiwKKyAgSElEX0VSUl9VbmRlZmluZWQgICAgICAgICAgICA9IDBYMDMsCisgIEhJRF9LRVlfQSAgICAgICAgICAgICAgICAgICAgPSAwWDA0LAorICBISURfS0VZX0IgICAgICAgICAgICAgICAgICAgID0gMFgwNSwKKyAgSElEX0tFWV9DICAgICAgICAgICAgICAgICAgICA9IDBYMDYsCisgIEhJRF9LRVlfRCAgICAgICAgICAgICAgICAgICAgPSAwWDA3LAorICBISURfS0VZX0UgICAgICAgICAgICAgICAgICAgID0gMFgwOCwKKyAgSElEX0tFWV9GICAgICAgICAgICAgICAgICAgICA9IDBYMDksCisgIEhJRF9LRVlfRyAgICAgICAgICAgICAgICAgICAgPSAwWDBBLAorICBISURfS0VZX0ggICAgICAgICAgICAgICAgICAgID0gMFgwQiwKKyAgSElEX0tFWV9JICAgICAgICAgICAgICAgICAgICA9IDBYMEMsCisgIEhJRF9LRVlfSiAgICAgICAgICAgICAgICAgICAgPSAwWDBELAorICBISURfS0VZX0sgICAgICAgICAgICAgICAgICAgID0gMFgwRSwKKyAgSElEX0tFWV9MICAgICAgICAgICAgICAgICAgICA9IDBYMEYsCisgIEhJRF9LRVlfTSAgICAgICAgICAgICAgICAgICAgPSAwWDEwLAorICBISURfS0VZX04gICAgICAgICAgICAgICAgICAgID0gMFgxMSwKKyAgSElEX0tFWV9PICAgICAgICAgICAgICAgICAgICA9IDBYMTIsCisgIEhJRF9LRVlfUCAgICAgICAgICAgICAgICAgICAgPSAwWDEzLAorICBISURfS0VZX1EgICAgICAgICAgICAgICAgICAgID0gMFgxNCwKKyAgSElEX0tFWV9SICAgICAgICAgICAgICAgICAgICA9IDBYMTUsCisgIEhJRF9LRVlfUyAgICAgICAgICAgICAgICAgICAgPSAwWDE2LAorICBISURfS0VZX1QgICAgICAgICAgICAgICAgICAgID0gMFgxNywKKyAgSElEX0tFWV9VICAgICAgICAgICAgICAgICAgICA9IDBYMTgsCisgIEhJRF9LRVlfViAgICAgICAgICAgICAgICAgICAgPSAwWDE5LAorICBISURfS0VZX1cgICAgICAgICAgICAgICAgICAgID0gMFgxQSwKKyAgSElEX0tFWV9YICAgICAgICAgICAgICAgICAgICA9IDBYMUIsCisgIEhJRF9LRVlfWSAgICAgICAgICAgICAgICAgICAgPSAwWDFDLAorICBISURfS0VZX1ogICAgICAgICAgICAgICAgICAgID0gMFgxRCwKKyAgSElEX0tFWV8xICAgICAgICAgICAgICAgICAgICA9IDBYMUUsCisgIEhJRF9LRVlfMiAgICAgICAgICAgICAgICAgICAgPSAwWDFGLAorICBISURfS0VZXzMgICAgICAgICAgICAgICAgICAgID0gMFgyMCwKKyAgSElEX0tFWV80ICAgICAgICAgICAgICAgICAgICA9IDBYMjEsCisgIEhJRF9LRVlfNSAgICAgICAgICAgICAgICAgICAgPSAwWDIyLAorICBISURfS0VZXzYgICAgICAgICAgICAgICAgICAgID0gMFgyMywKKyAgSElEX0tFWV83ICAgICAgICAgICAgICAgICAgICA9IDBYMjQsCisgIEhJRF9LRVlfOCAgICAgICAgICAgICAgICAgICAgPSAwWDI1LAorICBISURfS0VZXzkgICAgICAgICAgICAgICAgICAgID0gMFgyNiwKKyAgSElEX0tFWV8wICAgICAgICAgICAgICAgICAgICA9IDBYMjcsCisgIEhJRF9LRVlfRW50ZXIgICAgICAgICAgICAgICAgPSAwWDI4LAorICBISURfS0VZX0VzY2FwZSAgICAgICAgICAgICAgID0gMFgyOSwKKyAgSElEX0tFWV9CYWNrc3BhY2UgICAgICAgICAgICA9IDBYMkEsCisgIEhJRF9LRVlfVGFiICAgICAgICAgICAgICAgICAgPSAwWDJCLAorICBISURfS0VZX1NwYWNlICAgICAgICAgICAgICAgID0gMFgyQywKKyAgSElEX0tFWV9NaW51cyAgICAgICAgICAgICAgICA9IDBYMkQsCisgIEhJRF9LRVlfRXF1YWwgICAgICAgICAgICAgICAgPSAwWDJFLAorICBISURfS0VZX0xlZnRCcmFja2V0ICAgICAgICAgID0gMFgyRiwKKyAgSElEX0tFWV9SaWdodEJyYWNrZXQgICAgICAgICA9IDBYMzAsCisgIEhJRF9LRVlfQmFja3NsYXNoICAgICAgICAgICAgPSAwWDMxLAorICBISURfS0VZX0V1cm9wZTEgICAgICAgICAgICAgID0gMFgzMiwKKyAgSElEX0tFWV9TZW1pY29sb24gICAgICAgICAgICA9IDBYMzMsCisgIEhJRF9LRVlfQXBvc3Ryb3BoZSAgICAgICAgICAgPSAwWDM0LAorICBISURfS0VZX0dyYXZlICAgICAgICAgICAgICAgID0gMFgzNSwKKyAgSElEX0tFWV9Db21tYSAgICAgICAgICAgICAgICA9IDBYMzYsCisgIEhJRF9LRVlfUGVyaW9kICAgICAgICAgICAgICAgPSAwWDM3LAorICBISURfS0VZX1NsYXNoICAgICAgICAgICAgICAgID0gMFgzOCwKKyAgSElEX0tFWV9DYXBzTG9jayAgICAgICAgICAgICA9IDBYMzksCisgIEhJRF9LRVlfRjEgICAgICAgICAgICAgICAgICAgPSAwWDNBLAorICBISURfS0VZX0YyICAgICAgICAgICAgICAgICAgID0gMFgzQiwKKyAgSElEX0tFWV9GMyAgICAgICAgICAgICAgICAgICA9IDBYM0MsCisgIEhJRF9LRVlfRjQgICAgICAgICAgICAgICAgICAgPSAwWDNELAorICBISURfS0VZX0Y1ICAgICAgICAgICAgICAgICAgID0gMFgzRSwKKyAgSElEX0tFWV9GNiAgICAgICAgICAgICAgICAgICA9IDBYM0YsCisgIEhJRF9LRVlfRjcgICAgICAgICAgICAgICAgICAgPSAwWDQwLAorICBISURfS0VZX0Y4ICAgICAgICAgICAgICAgICAgID0gMFg0MSwKKyAgSElEX0tFWV9GOSAgICAgICAgICAgICAgICAgICA9IDBYNDIsCisgIEhJRF9LRVlfRjEwICAgICAgICAgICAgICAgICAgPSAwWDQzLAorICBISURfS0VZX0YxMSAgICAgICAgICAgICAgICAgID0gMFg0NCwKKyAgSElEX0tFWV9GMTIgICAgICAgICAgICAgICAgICA9IDBYNDUsCisgIEhJRF9LRVlfUHJpbnRTY3JlZW4gICAgICAgICAgPSAwWDQ2LAorICBISURfS0VZX1Njcm9sbExvY2sgICAgICAgICAgID0gMFg0NywKKyAgSElEX0tFWV9QYXVzZSAgICAgICAgICAgICAgICA9IDBYNDgsCisgIEhJRF9LRVlfSW5zZXJ0ICAgICAgICAgICAgICAgPSAwWDQ5LAorICBISURfS0VZX0hvbWUgICAgICAgICAgICAgICAgID0gMFg0QSwKKyAgSElEX0tFWV9QYWdlVXAgICAgICAgICAgICAgICA9IDBYNEIsCisgIEhJRF9LRVlfRGVsZXRlICAgICAgICAgICAgICAgPSAwWDRDLAorICBISURfS0VZX0VuZCAgICAgICAgICAgICAgICAgID0gMFg0RCwKKyAgSElEX0tFWV9QYWdlRG93biAgICAgICAgICAgICA9IDBYNEUsCisgIEhJRF9LRVlfQXJyb3dSaWdodCAgICAgICAgICAgPSAwWDRGLAorICBISURfS0VZX0Fycm93TGVmdCAgICAgICAgICAgID0gMFg1MCwKKyAgSElEX0tFWV9BcnJvd0Rvd24gICAgICAgICAgICA9IDBYNTEsCisgIEhJRF9LRVlfQXJyb3dVcCAgICAgICAgICAgICAgPSAwWDUyLAorICBISURfS0VZX051bUxvY2sgICAgICAgICAgICAgID0gMFg1MywKKyAgSElEX0tFWV9LUFNsYXNoICAgICAgICAgICAgICA9IDBYNTQsCisgIEhJRF9LRVlfS1BBc3RlcmlzayAgICAgICAgICAgPSAwWDU1LAorICBISURfS0VZX0tQTWludXMgICAgICAgICAgICAgID0gMFg1NiwKKyAgSElEX0tFWV9LUFBsdXMgICAgICAgICAgICAgICA9IDBYNTcsCisgIEhJRF9LRVlfS1BFbnRlciAgICAgICAgICAgICAgPSAwWDU4LAorICBISURfS0VZX0tQMSAgICAgICAgICAgICAgICAgID0gMFg1OSwKKyAgSElEX0tFWV9LUDIgICAgICAgICAgICAgICAgICA9IDBYNUEsCisgIEhJRF9LRVlfS1AzICAgICAgICAgICAgICAgICAgPSAwWDVCLAorICBISURfS0VZX0tQNCAgICAgICAgICAgICAgICAgID0gMFg1QywKKyAgSElEX0tFWV9LUDUgICAgICAgICAgICAgICAgICA9IDBYNUQsCisgIEhJRF9LRVlfS1A2ICAgICAgICAgICAgICAgICAgPSAwWDVFLAorICBISURfS0VZX0tQNyAgICAgICAgICAgICAgICAgID0gMFg1RiwKKyAgSElEX0tFWV9LUDggICAgICAgICAgICAgICAgICA9IDBYNjAsCisgIEhJRF9LRVlfS1A5ICAgICAgICAgICAgICAgICAgPSAwWDYxLAorICBISURfS0VZX0tQMCAgICAgICAgICAgICAgICAgID0gMFg2MiwKKyAgSElEX0tFWV9LUFBlcmlvZCAgICAgICAgICAgICA9IDBYNjMsCisgIEhJRF9LRVlfRXVyb3BlMiAgICAgICAgICAgICAgPSAwWDY0LAorICBISURfS0VZX0NvbnRleHQgICAgICAgICAgICAgID0gMFg2NSwKKyAgSElEX0tFWV9Qb3dlciAgICAgICAgICAgICAgICA9IDBYNjYsCisgIEhJRF9LRVlfS1BFcXVhbCAgICAgICAgICAgICAgPSAwWDY3LAorICBISURfS0VZX0YxMyAgICAgICAgICAgICAgICAgID0gMFg2OCwKKyAgSElEX0tFWV9GMTQgICAgICAgICAgICAgICAgICA9IDBYNjksCisgIEhJRF9LRVlfRjE1ICAgICAgICAgICAgICAgICAgPSAwWDZBLAorICBISURfS0VZX0YxNiAgICAgICAgICAgICAgICAgID0gMFg2QiwKKyAgSElEX0tFWV9GMTcgICAgICAgICAgICAgICAgICA9IDBYNkMsCisgIEhJRF9LRVlfRjE4ICAgICAgICAgICAgICAgICAgPSAwWDZELAorICBISURfS0VZX0YxOSAgICAgICAgICAgICAgICAgID0gMFg2RSwKKyAgSElEX0tFWV9GMjAgICAgICAgICAgICAgICAgICA9IDBYNkYsCisgIEhJRF9LRVlfRjIxICAgICAgICAgICAgICAgICAgPSAwWDcwLAorICBISURfS0VZX0YyMiAgICAgICAgICAgICAgICAgID0gMFg3MSwKKyAgSElEX0tFWV9GMjMgICAgICAgICAgICAgICAgICA9IDBYNzIsCisgIEhJRF9LRVlfRjI0ICAgICAgICAgICAgICAgICAgPSAwWDczLAorICBISURfS0VZX0V4ZWN1dGUgICAgICAgICAgICAgID0gMFg3NCwKKyAgSElEX0tFWV9IZWxwICAgICAgICAgICAgICAgICA9IDBYNzUsCisgIEhJRF9LRVlfTWVudSAgICAgICAgICAgICAgICAgPSAwWDc2LAorICBISURfS0VZX1NlbGVjdCAgICAgICAgICAgICAgID0gMFg3NywKKyAgSElEX0tFWV9TdG9wICAgICAgICAgICAgICAgICA9IDBYNzgsCisgIEhJRF9LRVlfQWdhaW4gICAgICAgICAgICAgICAgPSAwWDc5LAorICBISURfS0VZX1VuZG8gICAgICAgICAgICAgICAgID0gMFg3QSwKKyAgSElEX0tFWV9DdXQgICAgICAgICAgICAgICAgICA9IDBYN0IsCisgIEhJRF9LRVlfQ29weSAgICAgICAgICAgICAgICAgPSAwWDdDLAorICBISURfS0VZX1Bhc3RlICAgICAgICAgICAgICAgID0gMFg3RCwKKyAgSElEX0tFWV9GaW5kICAgICAgICAgICAgICAgICA9IDBYN0UsCisgIEhJRF9LRVlfTXV0ZSAgICAgICAgICAgICAgICAgPSAwWDdGLAorICBISURfS0VZX1ZvbHVtZVVwICAgICAgICAgICAgID0gMFg4MCwKKyAgSElEX0tFWV9Wb2x1bWVEb3duICAgICAgICAgICA9IDBYODEsCisgIEhJRF9LRVlfQ2Fwc0xvY2tpbmcgICAgICAgICAgPSAwWDgyLAorICBISURfS0VZX051bUxvY2tpbmcgICAgICAgICAgID0gMFg4MywKKyAgSElEX0tFWV9TY3JvbGxMb2NraW5nICAgICAgICA9IDBYODQsCisgIEhJRF9LRVlfS1BDb21tYSAgICAgICAgICAgICAgPSAwWDg1LAorICBISURfS0VZX0VxdWFsX1gxICAgICAgICAgICAgID0gMFg4NiwKKyAgSElEX0tFWV9JbnRlcm5hdGlvbmFsMSAgICAgICA9IDBYODcsIC8vIFJvCisgIEhJRF9LRVlfSW50ZXJuYXRpb25hbDIgICAgICAgPSAwWDg4LCAvLyBLYXRha2FuYS9IaXJhZ2FuYQorICBISURfS0VZX0ludGVybmF0aW9uYWwzICAgICAgID0gMFg4OSwgLy8gWWVuCisgIEhJRF9LRVlfSW50ZXJuYXRpb25hbDQgICAgICAgPSAwWDhBLCAvLyBIZW5rYW4KKyAgSElEX0tFWV9JbnRlcm5hdGlvbmFsNSAgICAgICA9IDBYOEIsIC8vIE11aGVua2FuCisgIEhJRF9LRVlfSW50ZXJuYXRpb25hbDYgICAgICAgPSAwWDhDLCAvLyBQQzk4MDAgS2V5cGFkICcKKyAgSElEX0tFWV9JbnRlcm5hdGlvbmFsNyAgICAgICA9IDBYOEQsCisgIEhJRF9LRVlfSW50ZXJuYXRpb25hbDggICAgICAgPSAwWDhFLAorICBISURfS0VZX0ludGVybmF0aW9uYWw5ICAgICAgID0gMFg4RiwKKyAgSElEX0tFWV9MYW5ndWFnZTEgICAgICAgICAgICA9IDBYOTAsIC8vIEhhbmd1ZWwvRW5nbGlzaAorICBISURfS0VZX0xhbmd1YWdlMiAgICAgICAgICAgID0gMFg5MSwgLy8gSGFuamEKKyAgSElEX0tFWV9MYW5ndWFnZTMgICAgICAgICAgICA9IDBYOTIsIC8vIEthdGFrYW5hCisgIEhJRF9LRVlfTGFuZ3VhZ2U0ICAgICAgICAgICAgPSAwWDkzLCAvLyBIaXJhZ2FuYQorICBISURfS0VZX0xhbmd1YWdlNSAgICAgICAgICAgID0gMFg5NCwgLy8gWmVua2FrdS9IYW5rYWt1CisgIEhJRF9LRVlfTGFuZ3VhZ2U2ICAgICAgICAgICAgPSAwWDk1LAorICBISURfS0VZX0xhbmd1YWdlNyAgICAgICAgICAgID0gMFg5NiwKKyAgSElEX0tFWV9MYW5ndWFnZTggICAgICAgICAgICA9IDBYOTcsCisgIEhJRF9LRVlfTGFuZ3VhZ2U5ICAgICAgICAgICAgPSAwWDk4LAorICBISURfS0VZX0FsdGVybmF0ZUVyYXNlICAgICAgID0gMFg5OSwKKyAgSElEX0tFWV9TeXN0ZW1SZWVxdWVzdCAgICAgICA9IDBYOUEsCisgIEhJRF9LRVlfQ2FuY2VsICAgICAgICAgICAgICAgPSAwWDlCLAorICBISURfS0VZX0NsZWFyICAgICAgICAgICAgICAgID0gMFg5QywKKyAgSElEX0tFWV9QcmlvciAgICAgICAgICAgICAgICA9IDBYOUQsCisgIEhJRF9LRVlfUmV0dXJuICAgICAgICAgICAgICAgPSAwWDlFLAorICBISURfS0VZX1NlcGFyYXRvciAgICAgICAgICAgID0gMFg5RiwKKyAgSElEX0tFWV9PdXQgICAgICAgICAgICAgICAgICA9IDBYQTAsCisgIEhJRF9LRVlfT3BlciAgICAgICAgICAgICAgICAgPSAwWEExLAorICBISURfS0VZX0NsZWFyQWdhaW4gICAgICAgICAgID0gMFhBMiwKKyAgSElEX0tFWV9DclNlbCAgICAgICAgICAgICAgICA9IDBYQTMsCisgIEhJRF9LRVlfRXhTZWwgICAgICAgICAgICAgICAgPSAwWEE0LAorICBISURfS0VZX0tQMDAgICAgICAgICAgICAgICAgID0gMFhCMCwKKyAgSElEX0tFWV9LUDAwMCAgICAgICAgICAgICAgICA9IDBYQjEsCisgIEhJRF9LRVlfS1BUaG91c2FuZHNTZXBhcmF0b3IgPSAwWEIyLAorICBISURfS0VZX0tQRGVjaW1hbFNlcGFyYXRvciAgID0gMFhCMywKKyAgSElEX0tFWV9LUEN1cnJlbmN5VW5pdCAgICAgICA9IDBYQjQsCisgIEhJRF9LRVlfS1BDdXJyZW5jeVN1YnVuaXQgICAgPSAwWEI1LAorICBISURfS0VZX0tQTGVmdFBhcmVudGhlc2lzICAgID0gMFhCNiwKKyAgSElEX0tFWV9LUFJpZ2h0UGFyZW50aGVzaXMgICA9IDBYQjcsCisgIEhJRF9LRVlfS1BMZWZ0QnJhY2UgICAgICAgICAgPSAwWEI4LAorICBISURfS0VZX0tQUmlnaHRCcmFjZSAgICAgICAgID0gMFhCOSwKKyAgSElEX0tFWV9LUFRhYiAgICAgICAgICAgICAgICA9IDBYQkEsCisgIEhJRF9LRVlfS1BCYWNrc3BhY2UgICAgICAgICAgPSAwWEJCLAorICBISURfS0VZX0tQQSAgICAgICAgICAgICAgICAgID0gMFhCQywKKyAgSElEX0tFWV9LUEIgICAgICAgICAgICAgICAgICA9IDBYQkQsCisgIEhJRF9LRVlfS1BDICAgICAgICAgICAgICAgICAgPSAwWEJFLAorICBISURfS0VZX0tQRCAgICAgICAgICAgICAgICAgID0gMFhCRiwKKyAgSElEX0tFWV9LUEUgICAgICAgICAgICAgICAgICA9IDBYQzAsCisgIEhJRF9LRVlfS1BGICAgICAgICAgICAgICAgICAgPSAwWEMxLAorICBISURfS0VZX0tQQml0d2lzZVhvciAgICAgICAgID0gMFhDMiwKKyAgSElEX0tFWV9LUEV4cG9uZW50aWF0ZSAgICAgICA9IDBYQzMsCisgIEhJRF9LRVlfS1Btb2R1bG8gICAgICAgICAgICAgPSAwWEM0LAorICBISURfS0VZX0tQTGVzcyAgICAgICAgICAgICAgID0gMFhDNSwKKyAgSElEX0tFWV9LUEdyZWF0ZXIgICAgICAgICAgICA9IDBYQzYsCisgIEhJRF9LRVlfS1BCaXR3aXNlQW5kICAgICAgICAgPSAwWEM3LAorICBISURfS0VZX0tQQm9vbGVhbkFuZCAgICAgICAgID0gMFhDOCwKKyAgSElEX0tFWV9LUEJpdHdpc2VPciAgICAgICAgICA9IDBYQzksCisgIEhJRF9LRVlfS1BCb29sZWFuT3IgICAgICAgICAgPSAwWENBLAorICBISURfS0VZX0tQQ29sb24gICAgICAgICAgICAgID0gMFhDQiwKKyAgSElEX0tFWV9LUE51bWJlciAgICAgICAgICAgICA9IDBYQ0MsCisgIEhJRF9LRVlfS1BTcGFjZSAgICAgICAgICAgICAgPSAwWENELAorICBISURfS0VZX0tQQXQgICAgICAgICAgICAgICAgID0gMFhDRSwKKyAgSElEX0tFWV9LUEJvb2xlYW5Ob3QgICAgICAgICA9IDBYQ0YsCisgIEhJRF9LRVlfS1BNZW1vcnlTdG9yZSAgICAgICAgPSAwWEQwLAorICBISURfS0VZX0tQTWVtb3J5UmVjYWxsICAgICAgID0gMFhEMSwKKyAgSElEX0tFWV9LUE1lbW9yeUNsZWFyICAgICAgICA9IDBYRDIsCisgIEhJRF9LRVlfS1BNZW1vcnlBZGQgICAgICAgICAgPSAwWEQzLAorICBISURfS0VZX0tQTWVtb3J5U3VidHJhY3QgICAgID0gMFhENCwKKyAgSElEX0tFWV9LUE1lbW9yeU11bHRpcGx5ICAgICA9IDBYRDUsCisgIEhJRF9LRVlfS1BNZW1vcnlEaXZpZGUgICAgICAgPSAwWEQ2LAorICBISURfS0VZX0tQUGx1c01pbnVzICAgICAgICAgID0gMFhENywKKyAgSElEX0tFWV9LUENsZWFyICAgICAgICAgICAgICA9IDBYRDgsCisgIEhJRF9LRVlfS1BDbGVhckVudHJ5ICAgICAgICAgPSAwWEQ5LAorICBISURfS0VZX0tQQmluYXJ5ICAgICAgICAgICAgID0gMFhEQSwKKyAgSElEX0tFWV9LUE9jdGFsICAgICAgICAgICAgICA9IDBYREIsCisgIEhJRF9LRVlfS1BEZWNpbWFsICAgICAgICAgICAgPSAwWERDLAorICBISURfS0VZX0tQSGV4YWRlY2ltYWwgICAgICAgID0gMFhERCwKKyAgSElEX0tFWV9MZWZ0Q29udHJvbCAgICAgICAgICA9IDBYRTAsCisgIEhJRF9LRVlfTGVmdFNoaWZ0ICAgICAgICAgICAgPSAwWEUxLAorICBISURfS0VZX0xlZnRBbHQgICAgICAgICAgICAgID0gMFhFMiwKKyAgSElEX0tFWV9MZWZ0R1VJICAgICAgICAgICAgICA9IDBYRTMsCisgIEhJRF9LRVlfUmlnaHRDb250cm9sICAgICAgICAgPSAwWEU0LAorICBISURfS0VZX1JpZ2h0U2hpZnQgICAgICAgICAgID0gMFhFNSwKKyAgSElEX0tFWV9SaWdodEFsdCAgICAgICAgICAgICA9IDBYRTYsCisgIEhJRF9LRVlfUmlnaHRHVUkgICAgICAgICAgICAgPSAwWEU3LAorfSBIaWRLZXk7CisKK2V4dGVybiBjb25zdCB1bnNpZ25lZCBjaGFyIEFUMlhUWzBYODBdOworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZiAvKiBfX2NwbHVzcGx1cyAqLworCisjZW5kaWYgLyogQlJMVFRZX0lOQ0xVREVEX0tCRF9LRVlDT0RFUyAqLwpkaWZmIC0tZ2l0IGEvSGVhZGVycy9rdGIuaCBiL0hlYWRlcnMva3RiLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGQ4NjU5NQotLS0gL2Rldi9udWxsCisrKyBiL0hlYWRlcnMva3RiLmgKQEAgLTAsMCArMSw3NiBAQAorLyoKKyAqIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisgKiAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisgKgorICogQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKKyNpZm5kZWYgQlJMVFRZX0lOQ0xVREVEX0tUQgorI2RlZmluZSBCUkxUVFlfSU5DTFVERURfS1RCCisKKyNpbmNsdWRlICJrdGJfdHlwZXMuaCIKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZiAvKiBfX2NwbHVzcGx1cyAqLworCitleHRlcm4gS2V5VGFibGUgKmNvbXBpbGVLZXlUYWJsZSAoY29uc3QgY2hhciAqbmFtZSwgS0VZX05BTUVfVEFCTEVTX1JFRkVSRU5DRSBrZXlzKTsKK2V4dGVybiB2b2lkIGRlc3Ryb3lLZXlUYWJsZSAoS2V5VGFibGUgKnRhYmxlKTsKKwordHlwZWRlZiBpbnQgS2V5TmFtZUVudHJ5SGFuZGxlciAoY29uc3QgS2V5TmFtZUVudHJ5ICprbmUsIHZvaWQgKmRhdGEpOworZXh0ZXJuIGludCBmb3JFYWNoS2V5TmFtZSAoS0VZX05BTUVfVEFCTEVTX1JFRkVSRU5DRSBrZXlzLCBLZXlOYW1lRW50cnlIYW5kbGVyICpoYW5kbGVLZXlOYW1lRW50cnksIHZvaWQgKmRhdGEpOworZXh0ZXJuIGNvbnN0IEtleU5hbWVFbnRyeSAqZmluZEtleU5hbWVFbnRyeSAoS2V5VGFibGUgKnRhYmxlLCBjb25zdCBLZXlWYWx1ZSAqdmFsdWUpOworCit0eXBlZGVmIGludCBLZXlUYWJsZVdyaXRlTGluZU1ldGhvZCAoY29uc3Qgd2NoYXJfdCAqbGluZSwgdm9pZCAqZGF0YSk7Cit0eXBlZGVmIGludCBLZXlUYWJsZVdyaXRlSGVhZGVyTWV0aG9kIChjb25zdCB3Y2hhcl90ICp0ZXh0LCB1bnNpZ25lZCBpbnQgbGV2ZWwsIHZvaWQgKmRhdGEpOwordHlwZWRlZiBpbnQgS2V5VGFibGVCZWdpbkVsZW1lbnRNZXRob2QgKHVuc2lnbmVkIGludCBsZXZlbCwgdm9pZCAqZGF0YSk7Cit0eXBlZGVmIGludCBLZXlUYWJsZUVuZExpc3RNZXRob2QgKHZvaWQgKmRhdGEpOworCit0eXBlZGVmIHN0cnVjdCB7CisgIEtleVRhYmxlV3JpdGVIZWFkZXJNZXRob2QgKndyaXRlSGVhZGVyOworICBLZXlUYWJsZUJlZ2luRWxlbWVudE1ldGhvZCAqYmVnaW5FbGVtZW50OworICBLZXlUYWJsZUVuZExpc3RNZXRob2QgKmVuZExpc3Q7Cit9IEtleVRhYmxlTGlzdE1ldGhvZHM7CisKK2V4dGVybiBpbnQgbGlzdEtleVRhYmxlIChLZXlUYWJsZSAqdGFibGUsIGNvbnN0IEtleVRhYmxlTGlzdE1ldGhvZHMgKm1ldGhvZHMsIEtleVRhYmxlV3JpdGVMaW5lTWV0aG9kICp3cml0ZUxpbmUsIHZvaWQgKmRhdGEpOworZXh0ZXJuIGludCBsaXN0S2V5TmFtZXMgKEtFWV9OQU1FX1RBQkxFU19SRUZFUkVOQ0Uga2V5cywgS2V5VGFibGVXcml0ZUxpbmVNZXRob2QgKndyaXRlTGluZSwgdm9pZCAqZGF0YSk7CitleHRlcm4gaW50IGF1ZGl0S2V5VGFibGUgKEtleVRhYmxlICp0YWJsZSwgY29uc3QgY2hhciAqcGF0aCk7CisKK2V4dGVybiBjaGFyICplbnN1cmVLZXlUYWJsZUV4dGVuc2lvbiAoY29uc3QgY2hhciAqcGF0aCk7CitleHRlcm4gY2hhciAqbWFrZUtleVRhYmxlUGF0aCAoY29uc3QgY2hhciAqZGlyZWN0b3J5LCBjb25zdCBjaGFyICpuYW1lKTsKKworZXh0ZXJuIGNoYXIgKm1ha2VLZXlib2FyZFRhYmxlUGF0aCAoY29uc3QgY2hhciAqZGlyZWN0b3J5LCBjb25zdCBjaGFyICpuYW1lKTsKK2V4dGVybiBjaGFyICptYWtlSW5wdXRUYWJsZVBhdGggKGNvbnN0IGNoYXIgKmRpcmVjdG9yeSwgY29uc3QgY2hhciAqZHJpdmVyLCBjb25zdCBjaGFyICpuYW1lKTsKKworZXh0ZXJuIHZvaWQgcmVzZXRLZXlUYWJsZSAoS2V5VGFibGUgKnRhYmxlKTsKK2V4dGVybiB2b2lkIHJlbGVhc2VBbGxLZXlzIChLZXlUYWJsZSAqdGFibGUpOworCitleHRlcm4gS2V5VGFibGVTdGF0ZSBwcm9jZXNzS2V5RXZlbnQgKAorICBLZXlUYWJsZSAqdGFibGUsIHVuc2lnbmVkIGNoYXIgY29udGV4dCwKKyAgS2V5R3JvdXAga2V5R3JvdXAsIEtleU51bWJlciBrZXlOdW1iZXIsIGludCBwcmVzcworKTsKKworZXh0ZXJuIHZvaWQgc2V0S2V5VGFibGVMb2dMYWJlbCAoS2V5VGFibGUgKnRhYmxlLCBjb25zdCBjaGFyICpsYWJlbCk7CitleHRlcm4gdm9pZCBzZXRMb2dLZXlFdmVudHNGbGFnIChLZXlUYWJsZSAqdGFibGUsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmZsYWcpOworZXh0ZXJuIHZvaWQgc2V0S2V5Ym9hcmRFbmFibGVkRmxhZyAoS2V5VGFibGUgKnRhYmxlLCBjb25zdCB1bnNpZ25lZCBjaGFyICpmbGFnKTsKK2V4dGVybiB2b2lkIHNldEtleUF1dG9yZWxlYXNlVGltZSAoS2V5VGFibGUgKnRhYmxlLCB1bnNpZ25lZCBjaGFyIHNldHRpbmcpOworCitleHRlcm4gdm9pZCBnZXRLZXlHcm91cENvbW1hbmRzIChLZXlUYWJsZSAqdGFibGUsIEtleUdyb3VwIGdyb3VwLCBpbnQgKmNvbW1hbmRzLCB1bnNpZ25lZCBpbnQgc2l6ZSk7CitleHRlcm4gaW50ICpnZXRCb3VuZENvbW1hbmRzIChLZXlUYWJsZSAqdGFibGUsIHVuc2lnbmVkIGludCAqY291bnQpOworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZiAvKiBfX2NwbHVzcGx1cyAqLworCisjZW5kaWYgLyogQlJMVFRZX0lOQ0xVREVEX0tUQiAqLwpkaWZmIC0tZ2l0IGEvSGVhZGVycy9rdGJfdHlwZXMuaCBiL0hlYWRlcnMva3RiX3R5cGVzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTE4Yzg3YQotLS0gL2Rldi9udWxsCisrKyBiL0hlYWRlcnMva3RiX3R5cGVzLmgKQEAgLTAsMCArMSw5MiBAQAorLyoKKyAqIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisgKiAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisgKgorICogQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKKyNpZm5kZWYgQlJMVFRZX0lOQ0xVREVEX0tUQl9UWVBFUworI2RlZmluZSBCUkxUVFlfSU5DTFVERURfS1RCX1RZUEVTCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYgLyogX19jcGx1c3BsdXMgKi8KKworI2RlZmluZSBNQVhfS0VZU19QRVJfR1JPVVAgMFgxMDAKKyNkZWZpbmUgS1RCX0tFWV9BTlkgMFhGRgorI2RlZmluZSBLVEJfS0VZX01BWCAwWEZFCisKK3R5cGVkZWYgdW5zaWduZWQgY2hhciBLZXlHcm91cDsKK3R5cGVkZWYgdW5zaWduZWQgY2hhciBLZXlOdW1iZXI7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgS2V5R3JvdXAgZ3JvdXA7CisgIEtleU51bWJlciBudW1iZXI7Cit9IEtleVZhbHVlOworCit0eXBlZGVmIHN0cnVjdCB7CisgIGNvbnN0IGNoYXIgKm5hbWU7CisgIEtleVZhbHVlIHZhbHVlOworfSBLZXlOYW1lRW50cnk7CisKKyNkZWZpbmUgS0VZX05BTUVfVEFCTEUobmFtZSkga2V5TmFtZVRhYmxlXyMjbmFtZQorI2RlZmluZSBLRVlfTkFNRV9UQUJMRV9ERUNMQVJBVElPTihuYW1lKSBjb25zdCBLZXlOYW1lRW50cnkgS0VZX05BTUVfVEFCTEUobmFtZSlbXQorI2RlZmluZSBLRVlfTkFNRV9FTlRSWShrZXlOdW1iZXIsa2V5TmFtZSkgey52YWx1ZS5udW1iZXI9a2V5TnVtYmVyLCAubmFtZT1rZXlOYW1lfQorI2RlZmluZSBLRVlfR1JPVVBfRU5UUlkoa2V5R3JvdXAsa2V5TmFtZSkgey52YWx1ZT17Lmdyb3VwPWtleUdyb3VwLCAubnVtYmVyPUtUQl9LRVlfQU5ZfSwgLm5hbWU9a2V5TmFtZX0KKyNkZWZpbmUgTEFTVF9LRVlfTkFNRV9FTlRSWSB7Lm5hbWU9TlVMTH0KKyNkZWZpbmUgQkVHSU5fS0VZX05BTUVfVEFCTEUobmFtZSkgc3RhdGljIEtFWV9OQU1FX1RBQkxFX0RFQ0xBUkFUSU9OKG5hbWUpID0geworI2RlZmluZSBFTkRfS0VZX05BTUVfVEFCTEUgTEFTVF9LRVlfTkFNRV9FTlRSWX07CisjZGVmaW5lIEtFWV9OQU1FX1NVQlRBQkxFKG5hbWUsY291bnQpIChLRVlfTkFNRV9UQUJMRShuYW1lKSArIChBUlJBWV9DT1VOVChLRVlfTkFNRV9UQUJMRShuYW1lKSkgLSAxIC0gKGNvdW50KSkpCisKKyNkZWZpbmUgS0VZX05BTUVfVEFCTEVTKG5hbWUpIGtleU5hbWVUYWJsZXNfIyNuYW1lCisjZGVmaW5lIEtFWV9OQU1FX1RBQkxFU19SRUZFUkVOQ0UgY29uc3QgS2V5TmFtZUVudHJ5ICpjb25zdCAqCisjZGVmaW5lIEtFWV9OQU1FX1RBQkxFU19ERUNMQVJBVElPTihuYW1lKSBjb25zdCBLZXlOYW1lRW50cnkgKmNvbnN0IEtFWV9OQU1FX1RBQkxFUyhuYW1lKVtdCisjZGVmaW5lIExBU1RfS0VZX05BTUVfVEFCTEUgTlVMTAorI2RlZmluZSBCRUdJTl9LRVlfTkFNRV9UQUJMRVMobmFtZSkgc3RhdGljIEtFWV9OQU1FX1RBQkxFU19ERUNMQVJBVElPTihuYW1lKSA9IHsKKyNkZWZpbmUgRU5EX0tFWV9OQU1FX1RBQkxFUyBMQVNUX0tFWV9OQU1FX1RBQkxFfTsKKwordHlwZWRlZiBzdHJ1Y3QgeworICBjb25zdCBjaGFyICpiaW5kaW5nczsKKyAgS0VZX05BTUVfVEFCTEVTX1JFRkVSRU5DRSBuYW1lczsKK30gS2V5VGFibGVEZWZpbml0aW9uOworCisjZGVmaW5lIEtFWV9UQUJMRV9ERUZJTklUSU9OKG5hbWUpIGtleVRhYmxlRGVmaW5pdGlvbl8jI25hbWUKKyNkZWZpbmUgS0VZX1RBQkxFX0RFQ0xBUkFUSU9OKG5hbWUpIGNvbnN0IEtleVRhYmxlRGVmaW5pdGlvbiBLRVlfVEFCTEVfREVGSU5JVElPTihuYW1lKQorI2RlZmluZSBLRVlfVEFCTEVfSU5JVElBTElaRVIobmFtZSkgPSB7LmJpbmRpbmdzPSNuYW1lLCAubmFtZXM9S0VZX05BTUVfVEFCTEVTKG5hbWUpfQorI2RlZmluZSBERUZJTkVfS0VZX1RBQkxFKG5hbWUpIFwKKyAgc3RhdGljIEtFWV9UQUJMRV9ERUNMQVJBVElPTihuYW1lKSBLRVlfVEFCTEVfSU5JVElBTElaRVIobmFtZSk7CisjZGVmaW5lIFBVQkxJQ19LRVlfVEFCTEUobmFtZSkgXAorICBLRVlfVEFCTEVfREVDTEFSQVRJT04obmFtZSkgS0VZX1RBQkxFX0lOSVRJQUxJWkVSKG5hbWUpOworI2RlZmluZSBFWFRFUk5BTF9LRVlfVEFCTEUobmFtZSkgZXh0ZXJuIEtFWV9UQUJMRV9ERUNMQVJBVElPTihuYW1lKTsKKwordHlwZWRlZiBlbnVtIHsKKyAgS1RTX1VOQk9VTkQsCisgIEtUU19NT0RJRklFUlMsCisgIEtUU19DT01NQU5ELAorICBLVFNfSE9US0VZCit9IEtleVRhYmxlU3RhdGU7CisKK3R5cGVkZWYgc3RydWN0IEtleVRhYmxlU3RydWN0IEtleVRhYmxlOworCit0eXBlZGVmIGVudW0geworICBLVEJfQ1RYX01FTlUsCisgIEtUQl9DVFhfV0FJVElORywKKyAgS1RCX0NUWF9ERUZBVUxUIC8qIHRoaXMgb25lIG11c3QgYmUgZGVmaW5lZCBsYXN0ICovCit9IEtleVRhYmxlQ29tbWFuZENvbnRleHQ7CisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmIC8qIF9fY3BsdXNwbHVzICovCisKKyNlbmRpZiAvKiBCUkxUVFlfSU5DTFVERURfS1RCX1RZUEVTICovCmRpZmYgLS1naXQgYS9IZWFkZXJzL2xlZHMuaCBiL0hlYWRlcnMvbGVkcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg3YjkxMWQKLS0tIC9kZXYvbnVsbAorKysgYi9IZWFkZXJzL2xlZHMuaApAQCAtMCwwICsxLDM2IEBACisvKgorICogQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyAqICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyAqCisgKiBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorICoKKyAqIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyAqCisgKiBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisgKi8KKworI2lmbmRlZiBCUkxUVFlfSU5DTFVERURfTEVEUworI2RlZmluZSBCUkxUVFlfSU5DTFVERURfTEVEUworCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmIC8qIF9fY3BsdXNwbHVzICovCisKK2V4dGVybiBpbnQgc2V0TGVkTW9uaXRvcmluZyAoaW50IG9uKTsKKworZXh0ZXJuIGludCBjYW5Nb25pdG9yTGVkcyAodm9pZCk7CitleHRlcm4gaW50IHN0YXJ0TW9uaXRvcmluZ0xlZHMgKHZvaWQpOworZXh0ZXJuIHZvaWQgc3RvcE1vbml0b3JpbmdMZWRzICh2b2lkKTsKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYgLyogX19jcGx1c3BsdXMgKi8KKworI2VuZGlmIC8qIEJSTFRUWV9JTkNMVURFRF9MRURTICovCmRpZmYgLS1naXQgYS9IZWFkZXJzL2xvY2suaCBiL0hlYWRlcnMvbG9jay5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhiOGUwMzAKLS0tIC9kZXYvbnVsbAorKysgYi9IZWFkZXJzL2xvY2suaApAQCAtMCwwICsxLDYwIEBACisvKgorICogQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyAqICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyAqCisgKiBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorICoKKyAqIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyAqCisgKiBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisgKi8KKworI2lmbmRlZiBCUkxUVFlfSU5DTFVERURfTE9DSworI2RlZmluZSBCUkxUVFlfSU5DTFVERURfTE9DSworCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmIC8qIF9fY3BsdXNwbHVzICovCisKK3R5cGVkZWYgc3RydWN0IExvY2tEZXNjcmlwdG9yU3RydWN0IExvY2tEZXNjcmlwdG9yOworCit0eXBlZGVmIGVudW0geworICBMT0NLX0V4Y2x1c2l2ZSA9IDBYMSwKKyAgTE9DS19Ob1dhaXQgICAgPSAwWDIKK30gTG9ja09wdGlvbnM7CisKK2V4dGVybiBMb2NrRGVzY3JpcHRvciAqbmV3TG9ja0Rlc2NyaXB0b3IgKHZvaWQpOworZXh0ZXJuIExvY2tEZXNjcmlwdG9yICpnZXRMb2NrRGVzY3JpcHRvciAoTG9ja0Rlc2NyaXB0b3IgKipsb2NrLCBjb25zdCBjaGFyICpuYW1lKTsKK2V4dGVybiB2b2lkIGZyZWVMb2NrRGVzY3JpcHRvciAoTG9ja0Rlc2NyaXB0b3IgKmxvY2spOworCitleHRlcm4gaW50IG9idGFpbkxvY2sgKExvY2tEZXNjcmlwdG9yICpsb2NrLCBMb2NrT3B0aW9ucyBvcHRpb25zKTsKK2V4dGVybiB2b2lkIHJlbGVhc2VMb2NrIChMb2NrRGVzY3JpcHRvciAqbG9jayk7CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBvYnRhaW5FeGNsdXNpdmVMb2NrIChMb2NrRGVzY3JpcHRvciAqbG9jaykgeworICBvYnRhaW5Mb2NrKGxvY2ssIExPQ0tfRXhjbHVzaXZlKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIG9idGFpblNoYXJlZExvY2sgKExvY2tEZXNjcmlwdG9yICpsb2NrKSB7CisgIG9idGFpbkxvY2sobG9jaywgMCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHRyeUV4Y2x1c2l2ZUxvY2sgKExvY2tEZXNjcmlwdG9yICpsb2NrKSB7CisgIHJldHVybiBvYnRhaW5Mb2NrKGxvY2ssIExPQ0tfRXhjbHVzaXZlIHwgTE9DS19Ob1dhaXQpOworfQorCitzdGF0aWMgaW5saW5lIGludCB0cnlTaGFyZWRMb2NrIChMb2NrRGVzY3JpcHRvciAqbG9jaykgeworICByZXR1cm4gb2J0YWluTG9jayhsb2NrLCBMT0NLX05vV2FpdCk7Cit9CisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmIC8qIF9fY3BsdXNwbHVzICovCisKKyNlbmRpZiAvKiBCUkxUVFlfSU5DTFVERURfTE9DSyAqLwpkaWZmIC0tZ2l0IGEvSGVhZGVycy9sb2cuaCBiL0hlYWRlcnMvbG9nLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGM0N2I3MQotLS0gL2Rldi9udWxsCisrKyBiL0hlYWRlcnMvbG9nLmgKQEAgLTAsMCArMSwxNDQgQEAKKy8qCisgKiBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorICogICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorICoKKyAqIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorICoKKyAqIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyAqLworCisjaWZuZGVmIEJSTFRUWV9JTkNMVURFRF9MT0cKKyNkZWZpbmUgQlJMVFRZX0lOQ0xVREVEX0xPRworCisjaW5jbHVkZSAicHJvbG9ndWUuaCIKKworI2luY2x1ZGUgPHN0ZGFyZy5oPgorCisjaWZkZWYgSEFWRV9TWVNMT0dfSAorI2luY2x1ZGUgPHN5c2xvZy5oPgorI2VuZGlmIC8qIEhBVkVfU1lTTE9HX0ggKi8KKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZiAvKiBfX2NwbHVzcGx1cyAqLworCitleHRlcm4gdW5zaWduZWQgY2hhciBzeXN0ZW1Mb2dMZXZlbDsKK2V4dGVybiB1bnNpZ25lZCBjaGFyIHN0ZGVyckxvZ0xldmVsOworCisjaWZuZGVmIExPR19JTkZPCit0eXBlZGVmIGVudW0geworICBMT0dfRU1FUkcsCisgIExPR19BTEVSVCwKKyAgTE9HX0NSSVQsCisgIExPR19FUlIsCisgIExPR19XQVJOSU5HLAorICBMT0dfTk9USUNFLAorICBMT0dfSU5GTywKKyAgTE9HX0RFQlVHCit9IFN5c2xvZ0xldmVsOworI2VuZGlmIC8qIGxvZyBsZXZlbCBkZWZpbml0aW9ucyAqLworCitleHRlcm4gY29uc3QgY2hhciAqY29uc3QgbG9nTGV2ZWxOYW1lc1tdOworZXh0ZXJuIGNvbnN0IHVuc2lnbmVkIGludCBsb2dMZXZlbENvdW50OworCisjZGVmaW5lIExPR19MRVZFTF9XSURUSCA4CisjZGVmaW5lIExPR19MRVZFTF9NQVNLIChMT0dfTEVWRUxfV0lEVEggLSAxKQorCisjZGVmaW5lIExPR19DQVRFR09SWV9JTkRFWChuYW1lKSBMT0dfQ1RHXyMjbmFtZQorI2RlZmluZSBMT0dfQ0FURUdPUlkobmFtZSkgKChMT0dfQ0FURUdPUllfSU5ERVgobmFtZSkgKyAxKSA8PCBMT0dfTEVWRUxfV0lEVEgpCisKK3R5cGVkZWYgZW51bSB7CisgIExPR19DQVRFR09SWV9JTkRFWChJTlBVVF9QQUNLRVRTKSwKKyAgTE9HX0NBVEVHT1JZX0lOREVYKE9VVFBVVF9QQUNLRVRTKSwKKworICBMT0dfQ0FURUdPUllfSU5ERVgoQlJBSUxMRV9LRVlTKSwKKyAgTE9HX0NBVEVHT1JZX0lOREVYKEtFWUJPQVJEX0tFWVMpLAorCisgIExPR19DQVRFR09SWV9JTkRFWChDVVJTT1JfVFJBQ0tJTkcpLAorICBMT0dfQ0FURUdPUllfSU5ERVgoQ1VSU09SX1JPVVRJTkcpLAorCisgIExPR19DQVRFR09SWV9JTkRFWChVUERBVEVfRVZFTlRTKSwKKyAgTE9HX0NBVEVHT1JZX0lOREVYKFNQRUVDSF9FVkVOVFMpLAorICBMT0dfQ0FURUdPUllfSU5ERVgoQVNZTkNfRVZFTlRTKSwKKyAgTE9HX0NBVEVHT1JZX0lOREVYKFNFUlZFUl9FVkVOVFMpLAorCisgIExPR19DQVRFR09SWV9JTkRFWChHRU5FUklDX0lPKSwKKyAgTE9HX0NBVEVHT1JZX0lOREVYKFNFUklBTF9JTyksCisgIExPR19DQVRFR09SWV9JTkRFWChVU0JfSU8pLAorICBMT0dfQ0FURUdPUllfSU5ERVgoQkxVRVRPT1RIX0lPKSwKKyAgTE9HX0NBVEVHT1JZX0lOREVYKEhJRF9JTyksCisKKyAgTE9HX0NBVEVHT1JZX0lOREVYKEJSQUlMTEVfRFJJVkVSKSwKKyAgTE9HX0NBVEVHT1JZX0lOREVYKFNQRUVDSF9EUklWRVIpLAorICBMT0dfQ0FURUdPUllfSU5ERVgoU0NSRUVOX0RSSVZFUiksCisKKyAgTE9HX0NBVEVHT1JZX0NPVU5UIC8qIG11c3QgYmUgbGFzdCAqLworfSBMb2dDYXRlZ29yeUluZGV4OworCitleHRlcm4gY29uc3QgY2hhciAqZ2V0TG9nQ2F0ZWdvcnlOYW1lIChMb2dDYXRlZ29yeUluZGV4IGluZGV4KTsKK2V4dGVybiBjb25zdCBjaGFyICpnZXRMb2dDYXRlZ29yeVRpdGxlIChMb2dDYXRlZ29yeUluZGV4IGluZGV4KTsKKworZXh0ZXJuIHZvaWQgZGlzYWJsZUFsbExvZ0NhdGVnb3JpZXMgKHZvaWQpOworZXh0ZXJuIGludCBzZXRMb2dDYXRlZ29yeSAoY29uc3QgY2hhciAqbmFtZSk7CitleHRlcm4gY29uc3QgY2hhciBsb2dDYXRlZ29yeU5hbWVfYWxsW107CitleHRlcm4gY29uc3QgY2hhciBsb2dDYXRlZ29yeVByZWZpeF9kaXNhYmxlOworCitleHRlcm4gdW5zaWduZWQgY2hhciBjYXRlZ29yeUxvZ0xldmVsOworZXh0ZXJuIHVuc2lnbmVkIGNoYXIgbG9nQ2F0ZWdvcnlGbGFnc1tMT0dfQ0FURUdPUllfQ09VTlRdOworI2RlZmluZSBMT0dfQ0FURUdPUllfRkxBRyhuYW1lKSBsb2dDYXRlZ29yeUZsYWdzW0xPR19DQVRFR09SWV9JTkRFWChuYW1lKV0KKworZXh0ZXJuIHZvaWQgb3BlbkxvZ0ZpbGUgKGNvbnN0IGNoYXIgKnBhdGgpOworZXh0ZXJuIHZvaWQgY2xvc2VMb2dGaWxlICh2b2lkKTsKKworZXh0ZXJuIHZvaWQgb3BlblN5c3RlbUxvZyAodm9pZCk7CitleHRlcm4gdm9pZCBjbG9zZVN5c3RlbUxvZyAodm9pZCk7CisKK2V4dGVybiBpbnQgcHVzaExvZ1ByZWZpeCAoY29uc3QgY2hhciAqcHJlZml4KTsKK2V4dGVybiBpbnQgcG9wTG9nUHJlZml4ICh2b2lkKTsKKwordHlwZWRlZiBzaXplX3QgTG9nRGF0YUZvcm1hdHRlciAoY2hhciAqYnVmZmVyLCBzaXplX3Qgc2l6ZSwgY29uc3Qgdm9pZCAqZGF0YSk7CitleHRlcm4gaW50IGxvZ0RhdGEgKGludCBsZXZlbCwgTG9nRGF0YUZvcm1hdHRlciAqZm9ybWF0TG9nRGF0YSwgY29uc3Qgdm9pZCAqZGF0YSk7CisKK2V4dGVybiBpbnQgbG9nTWVzc2FnZSAoaW50IGxldmVsLCBjb25zdCBjaGFyICpmb3JtYXQsIC4uLikgUFJJTlRGKDIsIDMpOworZXh0ZXJuIGludCB2bG9nTWVzc2FnZSAoaW50IGxldmVsLCBjb25zdCBjaGFyICpmb3JtYXQsIHZhX2xpc3QgKmFyZ3VtZW50cyk7CisKK2V4dGVybiBpbnQgbG9nQnl0ZXMgKGludCBsZXZlbCwgY29uc3QgY2hhciAqbGFiZWwsIGNvbnN0IHZvaWQgKmRhdGEsIHNpemVfdCBsZW5ndGgsIC4uLikgUFJJTlRGKDIsIDUpOworZXh0ZXJuIGludCBsb2dTeW1ib2wgKGludCBsZXZlbCwgdm9pZCAqYWRkcmVzcywgY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pIFBSSU5URigzLCA0KTsKKworZXh0ZXJuIGludCBsb2dBY3Rpb25Qcm9ibGVtIChpbnQgbGV2ZWwsIGludCBlcnJvciwgY29uc3QgY2hhciAqYWN0aW9uKTsKK2V4dGVybiBpbnQgbG9nQWN0aW9uRXJyb3IgKGludCBlcnJvciwgY29uc3QgY2hhciAqYWN0aW9uKTsKKworZXh0ZXJuIGludCBsb2dTeXN0ZW1Qcm9ibGVtIChpbnQgbGV2ZWwsIGNvbnN0IGNoYXIgKmFjdGlvbik7CitleHRlcm4gaW50IGxvZ1N5c3RlbUVycm9yIChjb25zdCBjaGFyICphY3Rpb24pOworZXh0ZXJuIGludCBsb2dNYWxsb2NFcnJvciAodm9pZCk7CisKK2V4dGVybiBpbnQgbG9nVW5zdXBwb3J0ZWRGZWF0dXJlIChjb25zdCBjaGFyICpuYW1lKTsKK2V4dGVybiBpbnQgbG9nVW5zdXBwb3J0ZWRPcGVyYXRpb24gKGNvbnN0IGNoYXIgKm5hbWUpOworI2RlZmluZSBsb2dVbnN1cHBvcnRlZEZ1bmN0aW9uKCkgbG9nVW5zdXBwb3J0ZWRPcGVyYXRpb24oX19mdW5jX18pCitleHRlcm4gaW50IGxvZ1Bvc3NpYmxlQ2F1c2UgKGNvbnN0IGNoYXIgKmNhdXNlKTsKKworI2lmZGVmIFdJTkRPV1MKK2V4dGVybiBpbnQgbG9nV2luZG93c0Vycm9yIChEV09SRCBjb2RlLCBjb25zdCBjaGFyICphY3Rpb24pOworZXh0ZXJuIGludCBsb2dXaW5kb3dzU3lzdGVtRXJyb3IgKGNvbnN0IGNoYXIgKmFjdGlvbik7CisKKyNpZmRlZiBfX01JTkdXMzJfXworZXh0ZXJuIGludCBsb2dXaW5kb3dzU29ja2V0RXJyb3IgKGNvbnN0IGNoYXIgKmFjdGlvbik7CisjZW5kaWYgLyogX19NSU5HVzMyX18gKi8KKyNlbmRpZiAvKiBXSU5ET1dTICovCisKK2V4dGVybiBpbnQgbG9nQmFja3RyYWNlICh2b2lkKTsKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYgLyogX19jcGx1c3BsdXMgKi8KKworI2VuZGlmIC8qIEJSTFRUWV9JTkNMVURFRF9MT0cgKi8KZGlmZiAtLWdpdCBhL0hlYWRlcnMvbG9nX2hpc3RvcnkuaCBiL0hlYWRlcnMvbG9nX2hpc3RvcnkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OTEyZGY1Ci0tLSAvZGV2L251bGwKKysrIGIvSGVhZGVycy9sb2dfaGlzdG9yeS5oCkBAIC0wLDAgKzEsNTAgQEAKKy8qCisgKiBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorICogICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorICoKKyAqIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorICoKKyAqIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyAqLworCisjaWZuZGVmIEJSTFRUWV9JTkNMVURFRF9MT0dfSElTVE9SWQorI2RlZmluZSBCUkxUVFlfSU5DTFVERURfTE9HX0hJU1RPUlkKKworI2luY2x1ZGUgInRocmVhZC5oIgorI2luY2x1ZGUgInRpbWluZy5oIgorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmIC8qIF9fY3BsdXNwbHVzICovCisKK3R5cGVkZWYgZW51bSB7CisgIExQT19OT0xPRyAgPSAwWDAxLAorICBMUE9fU1FVQVNIID0gMFgwMiwKK30gTG9nRW50cnlQdXNoT3B0aW9uczsKKwordHlwZWRlZiBzdHJ1Y3QgTG9nRW50cnlTdHJ1Y3QgTG9nRW50cnk7CitleHRlcm4gY29uc3QgTG9nRW50cnkgKmdldFByZXZpb3VzTG9nRW50cnkgKGNvbnN0IExvZ0VudHJ5ICplbnRyeSk7CitleHRlcm4gY29uc3QgY2hhciAqZ2V0TG9nRW50cnlUZXh0IChjb25zdCBMb2dFbnRyeSAqZW50cnkpOworZXh0ZXJuIGNvbnN0IFRpbWVWYWx1ZSAqZ2V0TG9nRW50cnlUaW1lIChjb25zdCBMb2dFbnRyeSAqZW50cnkpOworZXh0ZXJuIHVuc2lnbmVkIGludCBnZXRMb2dFbnRyeUNvdW50IChjb25zdCBMb2dFbnRyeSAqZW50cnkpOworCitleHRlcm4gaW50IHB1c2hMb2dFbnRyeSAoTG9nRW50cnkgKipoZWFkLCBjb25zdCBjaGFyICp0ZXh0LCBMb2dFbnRyeVB1c2hPcHRpb25zIG9wdGlvbnMpOworZXh0ZXJuIGludCBwb3BMb2dFbnRyeSAoTG9nRW50cnkgKipoZWFkKTsKKworZXh0ZXJuIGNvbnN0IExvZ0VudHJ5ICpnZXROZXdlc3RMb2dNZXNzYWdlIChpbnQgZnJlZXplKTsKK2V4dGVybiB2b2lkIHB1c2hMb2dNZXNzYWdlIChjb25zdCBjaGFyICptZXNzYWdlKTsKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYgLyogX19jcGx1c3BsdXMgKi8KKworI2VuZGlmIC8qIEJSTFRUWV9JTkNMVURFRF9MT0dfSElTVE9SWSAqLwpkaWZmIC0tZ2l0IGEvSGVhZGVycy9tZW51LmggYi9IZWFkZXJzL21lbnUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNjUzZGMxCi0tLSAvZGV2L251bGwKKysrIGIvSGVhZGVycy9tZW51LmgKQEAgLTAsMCArMSwxMjMgQEAKKy8qCisgKiBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorICogICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorICoKKyAqIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorICoKKyAqIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyAqLworCisjaWZuZGVmIEJSTFRUWV9JTkNMVURFRF9NRU5VCisjZGVmaW5lIEJSTFRUWV9JTkNMVURFRF9NRU5VCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYgLyogX19jcGx1c3BsdXMgKi8KKwordHlwZWRlZiBzdHJ1Y3QgTWVudVN0cnVjdCBNZW51OwordHlwZWRlZiBzdHJ1Y3QgTWVudUl0ZW1TdHJ1Y3QgTWVudUl0ZW07CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgY29uc3QgY2hhciAqbGFiZWw7CisgIGNvbnN0IGNoYXIgKmNvbW1lbnQ7Cit9IE1lbnVTdHJpbmc7CisKK2V4dGVybiBNZW51ICpuZXdNZW51ICh2b2lkKTsKK2V4dGVybiB2b2lkIGRlc3Ryb3lNZW51IChNZW51ICptZW51KTsKKworZXh0ZXJuIE1lbnVJdGVtICpuZXdUZXh0TWVudUl0ZW0gKE1lbnUgKm1lbnUsIGNvbnN0IE1lbnVTdHJpbmcgKm5hbWUsIGNvbnN0IGNoYXIgKnRleHQpOworCit0eXBlZGVmIHZvaWQgTnVtZXJpY01lbnVJdGVtRm9ybWF0dGVyICgKKyAgTWVudSAqbWVudSwgdW5zaWduZWQgY2hhciB2YWx1ZSwKKyAgY2hhciAqYnVmZmVyLCBzaXplX3Qgc2l6ZQorKTsKKworZXh0ZXJuIE1lbnVJdGVtICpuZXdOdW1lcmljTWVudUl0ZW0gKAorICBNZW51ICptZW51LCB1bnNpZ25lZCBjaGFyICpzZXR0aW5nLCBjb25zdCBNZW51U3RyaW5nICpuYW1lLAorICB1bnNpZ25lZCBjaGFyIG1pbmltdW0sIHVuc2lnbmVkIGNoYXIgbWF4aW11bSwgdW5zaWduZWQgY2hhciBzdGVwLAorICBjb25zdCBjaGFyICp1bml0LCBOdW1lcmljTWVudUl0ZW1Gb3JtYXR0ZXIgKmZvcm1hdHRlcgorKTsKKworZXh0ZXJuIE1lbnVJdGVtICpuZXdUaW1lTWVudUl0ZW0gKAorICBNZW51ICptZW51LCB1bnNpZ25lZCBjaGFyICpzZXR0aW5nLAorICBjb25zdCBNZW51U3RyaW5nICpuYW1lCispOworCitleHRlcm4gTWVudUl0ZW0gKm5ld1BlcmNlbnRNZW51SXRlbSAoCisgIE1lbnUgKm1lbnUsIHVuc2lnbmVkIGNoYXIgKnNldHRpbmcsCisgIGNvbnN0IE1lbnVTdHJpbmcgKm5hbWUsIHVuc2lnbmVkIGNoYXIgc3RlcAorKTsKKworZXh0ZXJuIE1lbnVJdGVtICpuZXdTdHJpbmdzTWVudUl0ZW0gKAorICBNZW51ICptZW51LCB1bnNpZ25lZCBjaGFyICpzZXR0aW5nLCBjb25zdCBNZW51U3RyaW5nICpuYW1lLAorICBjb25zdCBNZW51U3RyaW5nICpzdHJpbmdzLCB1bnNpZ25lZCBjaGFyIGNvdW50CispOworCisjZGVmaW5lIG5ld0VudW1lcmF0ZWRNZW51SXRlbShtZW51LCBzZXR0aW5nLCBuYW1lLCBzdHJpbmdzKSBuZXdTdHJpbmdzTWVudUl0ZW0obWVudSwgc2V0dGluZywgbmFtZSwgc3RyaW5ncywgQVJSQVlfQ09VTlQoc3RyaW5ncykpCitleHRlcm4gTWVudUl0ZW0gKm5ld0Jvb2xlYW5NZW51SXRlbSAoTWVudSAqbWVudSwgdW5zaWduZWQgY2hhciAqc2V0dGluZywgY29uc3QgTWVudVN0cmluZyAqbmFtZSk7CisKK2V4dGVybiBNZW51SXRlbSAqbmV3RmlsZXNNZW51SXRlbSAoCisgIE1lbnUgKm1lbnUsIGNvbnN0IE1lbnVTdHJpbmcgKm5hbWUsCisgIGNvbnN0IGNoYXIgKmRpcmVjdG9yeSwgY29uc3QgY2hhciAqc3ViZGlyZWN0b3J5LCBjb25zdCBjaGFyICpleHRlbnNpb24sCisgIGNvbnN0IGNoYXIgKmluaXRpYWwsIGludCBub25lCispOworCit0eXBlZGVmIHZvaWQgTWVudVRvb2xGdW5jdGlvbiAodm9pZCk7CitleHRlcm4gTWVudUl0ZW0gKm5ld1Rvb2xNZW51SXRlbSAoTWVudSAqbWVudSwgY29uc3QgTWVudVN0cmluZyAqbmFtZSwgTWVudVRvb2xGdW5jdGlvbiAqZnVuY3Rpb24pOworCitleHRlcm4gTWVudSAqbmV3U3VibWVudU1lbnVJdGVtICgKKyAgTWVudSAqbWVudSwgY29uc3QgTWVudVN0cmluZyAqbmFtZQorKTsKKwordHlwZWRlZiBpbnQgTWVudUl0ZW1UZXN0ZXIgKHZvaWQpOworZXh0ZXJuIHZvaWQgc2V0TWVudUl0ZW1UZXN0ZXIgKE1lbnVJdGVtICppdGVtLCBNZW51SXRlbVRlc3RlciAqaGFuZGxlcik7CisKK3R5cGVkZWYgaW50IE1lbnVJdGVtQ2hhbmdlZCAoY29uc3QgTWVudUl0ZW0gKml0ZW0sIHVuc2lnbmVkIGNoYXIgc2V0dGluZyk7CitleHRlcm4gdm9pZCBzZXRNZW51SXRlbUNoYW5nZWQgKE1lbnVJdGVtICppdGVtLCBNZW51SXRlbUNoYW5nZWQgKmhhbmRsZXIpOworCitleHRlcm4gdW5zaWduZWQgaW50IGdldE1lbnVOdW1iZXIgKGNvbnN0IE1lbnUgKm1lbnUpOworZXh0ZXJuIE1lbnUgKmdldE1lbnVQYXJlbnQgKGNvbnN0IE1lbnUgKm1lbnUpOworZXh0ZXJuIHVuc2lnbmVkIGludCBnZXRNZW51U2l6ZSAoY29uc3QgTWVudSAqbWVudSk7CitleHRlcm4gdW5zaWduZWQgaW50IGdldE1lbnVJbmRleCAoY29uc3QgTWVudSAqbWVudSk7CitleHRlcm4gTWVudUl0ZW0gKmdldE1lbnVJdGVtIChNZW51ICptZW51LCB1bnNpZ25lZCBpbnQgaW5kZXgpOworCitleHRlcm4gaW50IGlzTWVudUl0ZW1TZXR0YWJsZSAoY29uc3QgTWVudUl0ZW0gKml0ZW0pOworZXh0ZXJuIGludCBpc01lbnVJdGVtQWN0aW9uIChjb25zdCBNZW51SXRlbSAqaXRlbSk7CitleHRlcm4gaW50IGlzTWVudUl0ZW1WaXNpYmxlIChjb25zdCBNZW51SXRlbSAqaXRlbSk7CisKK2V4dGVybiBNZW51ICpnZXRNZW51SXRlbU1lbnUgKGNvbnN0IE1lbnVJdGVtICppdGVtKTsKK2V4dGVybiB1bnNpZ25lZCBpbnQgZ2V0TWVudUl0ZW1JbmRleCAoY29uc3QgTWVudUl0ZW0gKml0ZW0pOworZXh0ZXJuIGNvbnN0IGNoYXIgKmdldE1lbnVJdGVtVGl0bGUgKGNvbnN0IE1lbnVJdGVtICppdGVtKTsKK2V4dGVybiBjb25zdCBjaGFyICpnZXRNZW51SXRlbVN1YnRpdGxlIChjb25zdCBNZW51SXRlbSAqaXRlbSk7CitleHRlcm4gY29uc3QgY2hhciAqZ2V0TWVudUl0ZW1WYWx1ZSAoY29uc3QgTWVudUl0ZW0gKml0ZW0pOworZXh0ZXJuIGNvbnN0IGNoYXIgKmdldE1lbnVJdGVtVGV4dCAoY29uc3QgTWVudUl0ZW0gKml0ZW0pOworZXh0ZXJuIGNvbnN0IGNoYXIgKmdldE1lbnVJdGVtQ29tbWVudCAoY29uc3QgTWVudUl0ZW0gKml0ZW0pOworCitleHRlcm4gdm9pZCBjaGFuZ2VNZW51SXRlbSAoTWVudUl0ZW0gKml0ZW0pOworZXh0ZXJuIGludCBjaGFuZ2VNZW51SXRlbVByZXZpb3VzIChNZW51ICptZW51LCBpbnQgd3JhcCk7CitleHRlcm4gaW50IGNoYW5nZU1lbnVJdGVtTmV4dCAoTWVudSAqbWVudSwgaW50IHdyYXApOworZXh0ZXJuIGludCBjaGFuZ2VNZW51SXRlbUZpcnN0IChNZW51ICptZW51KTsKK2V4dGVybiBpbnQgY2hhbmdlTWVudUl0ZW1MYXN0IChNZW51ICptZW51KTsKK2V4dGVybiBpbnQgY2hhbmdlTWVudUl0ZW1JbmRleCAoTWVudSAqbWVudSwgdW5zaWduZWQgaW50IGluZGV4KTsKKworZXh0ZXJuIGludCBjaGFuZ2VNZW51U2V0dGluZ1ByZXZpb3VzIChNZW51ICptZW51LCBpbnQgd3JhcCk7CitleHRlcm4gaW50IGNoYW5nZU1lbnVTZXR0aW5nTmV4dCAoTWVudSAqbWVudSwgaW50IHdyYXApOworZXh0ZXJuIGludCBjaGFuZ2VNZW51U2V0dGluZ1NjYWxlZCAoTWVudSAqbWVudSwgdW5zaWduZWQgaW50IGluZGV4LCB1bnNpZ25lZCBpbnQgY291bnQpOworCitleHRlcm4gTWVudUl0ZW0gKmdldEN1cnJlbnRNZW51SXRlbSAoTWVudSAqbWVudSk7CitleHRlcm4gTWVudSAqZ2V0Q3VycmVudFN1Ym1lbnUgKE1lbnUgKm1lbnUpOworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZiAvKiBfX2NwbHVzcGx1cyAqLworCisjZW5kaWYgLyogQlJMVFRZX0lOQ0xVREVEX01FTlUgKi8KZGlmZiAtLWdpdCBhL0hlYWRlcnMvbWVzc2FnZS5oIGIvSGVhZGVycy9tZXNzYWdlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDJiYWVkNwotLS0gL2Rldi9udWxsCisrKyBiL0hlYWRlcnMvbWVzc2FnZS5oCkBAIC0wLDAgKzEsNDEgQEAKKy8qCisgKiBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorICogICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorICoKKyAqIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorICoKKyAqIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyAqLworCisjaWZuZGVmIEJSTFRUWV9JTkNMVURFRF9NRVNTQUdFCisjZGVmaW5lIEJSTFRUWV9JTkNMVURFRF9NRVNTQUdFCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYgLyogX19jcGx1c3BsdXMgKi8KKwordHlwZWRlZiBlbnVtIHsKKyAgTVNHX1NJTEVOVCAgPSAwWDEsIC8qIGRvbid0IHNwZWFrIHRoZSBtZXNzYWdlICovCisgIE1TR19MT0cgICAgID0gMFgyLCAvKiBhZGQgdGhlIG1lc3NhZ2UgdG8gdGhlIGxvZydzIG1lc3NhZ2Ugc3RhY2sgKi8KKyAgTVNHX05PREVMQVkgPSAwWDQsIC8qIGRvbid0IHdhaXQgKi8KKyAgTVNHX1NZTkMgICAgPSAwWDggIC8qIHJ1biBzeW5jaHJvbm91c2x5ICovCit9IE1lc3NhZ2VPcHRpb25zOworCitleHRlcm4gaW50IG1lc3NhZ2UgKGNvbnN0IGNoYXIgKm1vZGUsIGNvbnN0IGNoYXIgKnRleHQsIE1lc3NhZ2VPcHRpb25zIG9wdGlvbnMpOworCitleHRlcm4gaW50IG1lc3NhZ2VIb2xkVGltZW91dDsKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYgLyogX19jcGx1c3BsdXMgKi8KKworI2VuZGlmIC8qIEJSTFRUWV9JTkNMVURFRF9NRVNTQUdFICovCmRpZmYgLS1naXQgYS9IZWFkZXJzL21lc3NhZ2VzLmggYi9IZWFkZXJzL21lc3NhZ2VzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzMyMTg4ZQotLS0gL2Rldi9udWxsCisrKyBiL0hlYWRlcnMvbWVzc2FnZXMuaApAQCAtMCwwICsxLDc3IEBACisvKgorICogQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyAqICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyAqCisgKiBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorICoKKyAqIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyAqCisgKiBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisgKi8KKworI2lmbmRlZiBCUkxUVFlfSU5DTFVERURfTUVTU0FHRVMKKyNkZWZpbmUgQlJMVFRZX0lOQ0xVREVEX01FU1NBR0VTCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYgLyogX19jcGx1c3BsdXMgKi8KKworZXh0ZXJuIGludCBzZXRNZXNzYWdlc0RpcmVjdG9yeSAoY29uc3QgY2hhciAqZGlyZWN0b3J5KTsKK2V4dGVybiBjb25zdCBjaGFyICpnZXRNZXNzYWdlc0RpcmVjdG9yeSAodm9pZCk7CisKK2V4dGVybiBpbnQgc2V0TWVzc2FnZXNMb2NhbGUgKGNvbnN0IGNoYXIgKnNwZWNpZmllcik7CitleHRlcm4gY29uc3QgY2hhciAqZ2V0TWVzc2FnZXNMb2NhbGUgKHZvaWQpOworCitleHRlcm4gaW50IHNldE1lc3NhZ2VzRG9tYWluIChjb25zdCBjaGFyICpuYW1lKTsKK2V4dGVybiBjb25zdCBjaGFyICpnZXRNZXNzYWdlc0RvbWFpbiAodm9pZCk7CisKK2V4dGVybiB2b2lkIGVuc3VyZUFsbE1lc3NhZ2VzUHJvcGVydGllcyAodm9pZCk7CisKK2V4dGVybiBpbnQgbG9hZE1lc3NhZ2VDYXRhbG9nICh2b2lkKTsKK2V4dGVybiB2b2lkIHJlbGVhc2VNZXNzYWdlQ2F0YWxvZyAodm9pZCk7CisKK2V4dGVybiB1aW50MzJfdCBnZXRNZXNzYWdlQ291bnQgKHZvaWQpOworZXh0ZXJuIGNvbnN0IGNoYXIgKmdldE1lc3NhZ2VzTWV0YWRhdGEgKHZvaWQpOworZXh0ZXJuIGNoYXIgKmdldE1lc3NhZ2VzUHJvcGVydHkgKGNvbnN0IGNoYXIgKm5hbWUpOworZXh0ZXJuIGNoYXIgKmdldE1lc3NhZ2VzQXR0cmlidXRlIChjb25zdCBjaGFyICpwcm9wZXJ0eSwgY29uc3QgY2hhciAqbmFtZSk7CisKKyNkZWZpbmUgTUVTU0FHRVNfUFJPUEVSVFlfTUlNRV9WRVJTSU9OICJNSU1FLVZlcnNpb24iCisjZGVmaW5lIE1FU1NBR0VTX1BST1BFUlRZX0NPTlRFTlRfVFlQRSAiQ29udGVudC1UeXBlIgorI2RlZmluZSBNRVNTQUdFU19QUk9QRVJUWV9DT05URU5UX1RSQU5TRkVSX0VOQ09ESU5HICJDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nIgorCisjZGVmaW5lIE1FU1NBR0VTX1BST1BFUlRZX1BST0pFQ1RfVkVSU0lPTiAiUHJvamVjdC1JZC1WZXJzaW9uIgorI2RlZmluZSBNRVNTQUdFU19QUk9QRVJUWV9MQU5HVUFHRV9URUFNICJMYW5ndWFnZS1UZWFtIgorI2RlZmluZSBNRVNTQUdFU19QUk9QRVJUWV9NU0dJRF9CVUdTICJSZXBvcnQtTXNnaWQtQnVncy1UbyIKKworI2RlZmluZSBNRVNTQUdFU19QUk9QRVJUWV9MQU5HVUFHRV9DT0RFICJMYW5ndWFnZSIKKyNkZWZpbmUgTUVTU0FHRVNfUFJPUEVSVFlfUExVUkFMX0ZPUk1TICJQbHVyYWwtRm9ybXMiCisKKyNkZWZpbmUgTUVTU0FHRVNfUFJPUEVSVFlfTEFTVF9UUkFOU0xBVE9SICJMYXN0LVRyYW5zbGF0b3IiCisjZGVmaW5lIE1FU1NBR0VTX1BST1BFUlRZX1JFVklTSU9OX0RBVEUgIlBPLVJldmlzaW9uLURhdGUiCisKK3R5cGVkZWYgc3RydWN0IE1lc3NhZ2VTdHJ1Y3QgTWVzc2FnZTsKK2V4dGVybiBjb25zdCBjaGFyICpnZXRNZXNzYWdlVGV4dCAoY29uc3QgTWVzc2FnZSAqbWVzc2FnZSk7CitleHRlcm4gdWludDMyX3QgZ2V0TWVzc2FnZUxlbmd0aCAoY29uc3QgTWVzc2FnZSAqbWVzc2FnZSk7CisKK2V4dGVybiBjb25zdCBNZXNzYWdlICpnZXRTb3VyY2VNZXNzYWdlICh1bnNpZ25lZCBpbnQgaW5kZXgpOworZXh0ZXJuIGNvbnN0IE1lc3NhZ2UgKmdldFRyYW5zbGF0ZWRNZXNzYWdlICh1bnNpZ25lZCBpbnQgaW5kZXgpOworCitleHRlcm4gaW50IGZpbmRTb3VyY2VNZXNzYWdlIChjb25zdCBjaGFyICp0ZXh0LCBzaXplX3QgdGV4dExlbmd0aCwgdW5zaWduZWQgaW50ICppbmRleCk7CitleHRlcm4gY29uc3QgTWVzc2FnZSAqZmluZFNpbXBsZVRyYW5zbGF0aW9uIChjb25zdCBjaGFyICp0ZXh0LCBzaXplX3QgbGVuZ3RoKTsKK2V4dGVybiBjb25zdCBNZXNzYWdlICpmaW5kUGx1cmFsVHJhbnNsYXRpb24gKGNvbnN0IGNoYXIgKmNvbnN0ICpzdHJpbmdzKTsKKworZXh0ZXJuIGNvbnN0IGNoYXIgKmdldFNpbXBsZVRyYW5zbGF0aW9uIChjb25zdCBjaGFyICp0ZXh0KTsKK2V4dGVybiBjb25zdCBjaGFyICpnZXRQbHVyYWxUcmFuc2xhdGlvbiAoY29uc3QgY2hhciAqc2luZ3VsYXIsIGNvbnN0IGNoYXIgKnBsdXJhbCwgdW5zaWduZWQgbG9uZyBpbnQgY291bnQpOworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZiAvKiBfX2NwbHVzcGx1cyAqLworCisjZW5kaWYgLyogQlJMVFRZX0lOQ0xVREVEX01FU1NBR0VTICovCmRpZmYgLS1naXQgYS9IZWFkZXJzL21pZGkuaCBiL0hlYWRlcnMvbWlkaS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM4ZTdkMDEKLS0tIC9kZXYvbnVsbAorKysgYi9IZWFkZXJzL21pZGkuaApAQCAtMCwwICsxLDQ3IEBACisvKgorICogQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyAqICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyAqCisgKiBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorICoKKyAqIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyAqCisgKiBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisgKi8KKworI2lmbmRlZiBCUkxUVFlfSU5DTFVERURfTUlESQorI2RlZmluZSBCUkxUVFlfSU5DTFVERURfTUlESQorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmIC8qIF9fY3BsdXNwbHVzICovCisKK2V4dGVybiBjb25zdCBjaGFyICpjb25zdCBtaWRpSW5zdHJ1bWVudFRhYmxlW107CitleHRlcm4gY29uc3QgdW5zaWduZWQgaW50IG1pZGlJbnN0cnVtZW50Q291bnQ7CitleHRlcm4gY29uc3QgY2hhciAqbWlkaUdldEluc3RydW1lbnRHcm91cCAodW5zaWduZWQgY2hhciBpbnN0cnVtZW50KTsKKwordHlwZWRlZiBzdHJ1Y3QgTWlkaURldmljZVN0cnVjdCBNaWRpRGV2aWNlOwordHlwZWRlZiB2b2lkICgqTWlkaUJ1ZmZlckZsdXNoZXIpICh1bnNpZ25lZCBjaGFyICpidWZmZXIsIGludCBjb3VudCk7CisKK2V4dGVybiBNaWRpRGV2aWNlICpvcGVuTWlkaURldmljZSAoaW50IGVycm9yTGV2ZWwsIGNvbnN0IGNoYXIgKmRldmljZSk7CitleHRlcm4gdm9pZCBjbG9zZU1pZGlEZXZpY2UgKE1pZGlEZXZpY2UgKm1pZGkpOworZXh0ZXJuIGludCBmbHVzaE1pZGlEZXZpY2UgKE1pZGlEZXZpY2UgKm1pZGkpOworZXh0ZXJuIGludCBzZXRNaWRpSW5zdHJ1bWVudCAoTWlkaURldmljZSAqbWlkaSwgdW5zaWduZWQgY2hhciBjaGFubmVsLCB1bnNpZ25lZCBjaGFyIGluc3RydW1lbnQpOworZXh0ZXJuIGludCBiZWdpbk1pZGlCbG9jayAoTWlkaURldmljZSAqbWlkaSk7CitleHRlcm4gaW50IGVuZE1pZGlCbG9jayAoTWlkaURldmljZSAqbWlkaSk7CitleHRlcm4gaW50IHN0YXJ0TWlkaU5vdGUgKE1pZGlEZXZpY2UgKm1pZGksIHVuc2lnbmVkIGNoYXIgY2hhbm5lbCwgdW5zaWduZWQgY2hhciBub3RlLCB1bnNpZ25lZCBjaGFyIHZvbHVtZSk7CitleHRlcm4gaW50IHN0b3BNaWRpTm90ZSAoTWlkaURldmljZSAqbWlkaSwgdW5zaWduZWQgY2hhciBjaGFubmVsKTsKK2V4dGVybiBpbnQgaW5zZXJ0TWlkaVdhaXQgKE1pZGlEZXZpY2UgKm1pZGksIGludCBkdXJhdGlvbik7CisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmIC8qIF9fY3BsdXNwbHVzICovCisKKyNlbmRpZiAvKiBCUkxUVFlfSU5DTFVERURfTUlESSAqLwpkaWZmIC0tZ2l0IGEvSGVhZGVycy9tbnRmcy5oIGIvSGVhZGVycy9tbnRmcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUzNDJhZmEKLS0tIC9kZXYvbnVsbAorKysgYi9IZWFkZXJzL21udGZzLmgKQEAgLTAsMCArMSwzMiBAQAorLyoKKyAqIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisgKiAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisgKgorICogQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKKyNpZm5kZWYgQlJMVFRZX0lOQ0xVREVEX01OVEZTCisjZGVmaW5lIEJSTFRUWV9JTkNMVURFRF9NTlRGUworCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmIC8qIF9fY3BsdXNwbHVzICovCisKK2V4dGVybiBpbnQgbW91bnRGaWxlU3lzdGVtIChjb25zdCBjaGFyICpwYXRoLCBjb25zdCBjaGFyICpyZWZlcmVuY2UsIGNvbnN0IGNoYXIgKnR5cGUpOworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZiAvKiBfX2NwbHVzcGx1cyAqLworCisjZW5kaWYgLyogQlJMVFRZX0lOQ0xVREVEX01OVEZTICovCmRpZmYgLS1naXQgYS9IZWFkZXJzL21udHB0LmggYi9IZWFkZXJzL21udHB0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjVjNGE0NgotLS0gL2Rldi9udWxsCisrKyBiL0hlYWRlcnMvbW50cHQuaApAQCAtMCwwICsxLDM2IEBACisvKgorICogQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyAqICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyAqCisgKiBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorICoKKyAqIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyAqCisgKiBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisgKi8KKworI2lmbmRlZiBCUkxUVFlfSU5DTFVERURfTU5UUFQKKyNkZWZpbmUgQlJMVFRZX0lOQ0xVREVEX01OVFBUCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYgLyogX19jcGx1c3BsdXMgKi8KKwordHlwZWRlZiBpbnQgKCpNb3VudFBvaW50VGVzdGVyKSAoY29uc3QgY2hhciAqcGF0aCwgY29uc3QgY2hhciAqdHlwZSk7CisKK2V4dGVybiBjaGFyICpmaW5kTW91bnRQb2ludCAoTW91bnRQb2ludFRlc3RlciB0ZXN0KTsKKworZXh0ZXJuIGludCBtYWtlTW91bnRQb2ludCAoY29uc3QgY2hhciAqcGF0aCwgY29uc3QgY2hhciAqcmVmZXJlbmNlLCBjb25zdCBjaGFyICp0eXBlKTsKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYgLyogX19jcGx1c3BsdXMgKi8KKworI2VuZGlmIC8qIEJSTFRUWV9JTkNMVURFRF9NTlRQVCAqLwpkaWZmIC0tZ2l0IGEvSGVhZGVycy9tb3JzZS5oIGIvSGVhZGVycy9tb3JzZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY0ZGE0NjcKLS0tIC9kZXYvbnVsbAorKysgYi9IZWFkZXJzL21vcnNlLmgKQEAgLTAsMCArMSw2MyBAQAorLyoKKyAqIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisgKiAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisgKgorICogQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKKyNpZm5kZWYgQlJMVFRZX0lOQ0xVREVEX01PUlNFCisjZGVmaW5lIEJSTFRUWV9JTkNMVURFRF9NT1JTRQorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmIC8qIF9fY3BsdXNwbHVzICovCisKKyNkZWZpbmUgTU9SU0VfVU5JVFNfTUFSS19TSE9SVCAgMQorI2RlZmluZSBNT1JTRV9VTklUU19NQVJLX0xPTkcgICAzCisjZGVmaW5lIE1PUlNFX1VOSVRTX0dBUF9TWU1CT0wgIDEKKyNkZWZpbmUgTU9SU0VfVU5JVFNfR0FQX0xFVFRFUiAgMworI2RlZmluZSBNT1JTRV9VTklUU19HQVBfV09SRCAgICA3CisjZGVmaW5lIE1PUlNFX1VOSVRTX1BFUl9XT1JEICAgNTAKKyNkZWZpbmUgTU9SU0VfVU5JVFNfUEVSX0dST1VQICA2MAorCit0eXBlZGVmIHN0cnVjdCBNb3JzZU9iamVjdFN0cnVjdCBNb3JzZU9iamVjdDsKK2V4dGVybiB2b2lkICpuZXdNb3JzZU9iamVjdCAodm9pZCk7CitleHRlcm4gdm9pZCBkZXN0cm95TW9yc2VPYmplY3QgKE1vcnNlT2JqZWN0ICptb3JzZSk7CisKK2V4dGVybiB1bnNpZ25lZCBpbnQgZ2V0TW9yc2VQaXRjaCAoTW9yc2VPYmplY3QgKm1vcnNlKTsKK2V4dGVybiBpbnQgc2V0TW9yc2VQaXRjaCAoTW9yc2VPYmplY3QgKm1vcnNlLCB1bnNpZ25lZCBpbnQgZnJlcXVlbmN5KTsKKworZXh0ZXJuIHVuc2lnbmVkIGludCBnZXRNb3JzZVdvcmRzUGVyTWludXRlIChNb3JzZU9iamVjdCAqbW9yc2UpOworZXh0ZXJuIGludCBzZXRNb3JzZVdvcmRzUGVyTWludXRlIChNb3JzZU9iamVjdCAqbW9yc2UsIHVuc2lnbmVkIGludCByYXRlKTsKKworZXh0ZXJuIHVuc2lnbmVkIGludCBnZXRNb3JzZUdyb3Vwc1Blck1pbnV0ZSAoTW9yc2VPYmplY3QgKm1vcnNlKTsKK2V4dGVybiBpbnQgc2V0TW9yc2VHcm91cHNQZXJNaW51dGUgKE1vcnNlT2JqZWN0ICptb3JzZSwgdW5zaWduZWQgaW50IHJhdGUpOworCitleHRlcm4gaW50IGFkZE1vcnNlU3RyaW5nIChNb3JzZU9iamVjdCAqbW9yc2UsIGNvbnN0IGNoYXIgKnN0cmluZyk7CitleHRlcm4gaW50IGFkZE1vcnNlQ2hhcmFjdGVycyAoTW9yc2VPYmplY3QgKm1vcnNlLCBjb25zdCB3Y2hhcl90ICpjaGFyYWN0ZXJzLCBzaXplX3QgY291bnQpOworZXh0ZXJuIGludCBhZGRNb3JzZUNoYXJhY3RlciAoTW9yc2VPYmplY3QgKm1vcnNlLCB3Y2hhcl90IGNoYXJhY3Rlcik7CitleHRlcm4gaW50IGFkZE1vcnNlU3BhY2UgKE1vcnNlT2JqZWN0ICptb3JzZSk7CisKK3R5cGVkZWYgdWludDhfdCBNb3JzZVBhdHRlcm47CitleHRlcm4gTW9yc2VQYXR0ZXJuIGdldE1vcnNlUGF0dGVybiAod2NoYXJfdCBjaGFyYWN0ZXIpOworZXh0ZXJuIGludCBhZGRNb3JzZVBhdHRlcm4gKE1vcnNlT2JqZWN0ICptb3JzZSwgTW9yc2VQYXR0ZXJuIHBhdHRlcm4pOworCitleHRlcm4gaW50IHBsYXlNb3JzZVNlcXVlbmNlIChNb3JzZU9iamVjdCAqbW9yc2UpOworZXh0ZXJuIHZvaWQgY2xlYXJNb3JzZVNlcXVlbmNlIChNb3JzZU9iamVjdCAqbW9yc2UpOworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZiAvKiBfX2NwbHVzcGx1cyAqLworCisjZW5kaWYgLyogQlJMVFRZX0lOQ0xVREVEX01PUlNFICovCmRpZmYgLS1naXQgYS9IZWFkZXJzL21zZ19xdWV1ZS5oIGIvSGVhZGVycy9tc2dfcXVldWUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOWI3NGMwCi0tLSAvZGV2L251bGwKKysrIGIvSGVhZGVycy9tc2dfcXVldWUuaApAQCAtMCwwICsxLDUwIEBACisvKgorICogQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyAqICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyAqCisgKiBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorICoKKyAqIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyAqCisgKiBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisgKi8KKworI2lmbmRlZiBCUkxUVFlfSU5DTFVERURfTVNHX1FVRVVFCisjZGVmaW5lIEJSTFRUWV9JTkNMVURFRF9NU0dfUVVFVUUKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZiAvKiBfX2NwbHVzcGx1cyAqLworCit0eXBlZGVmIGxvbmcgaW50IE1lc3NhZ2VUeXBlOworCitleHRlcm4gaW50IHNlbmRNZXNzYWdlKGludCBxdWV1ZSwgTWVzc2FnZVR5cGUgdHlwZSwgY29uc3Qgdm9pZCAqY29udGVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGxlbmd0aCwgaW50IGZsYWdzKTsKK2V4dGVybiBzc2l6ZV90IHJlY2VpdmVNZXNzYWdlKGludCBxdWV1ZSwgTWVzc2FnZVR5cGUgKnR5cGUsIHZvaWQgKmJ1ZmZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBzaXplLCBpbnQgZmxhZ3MpOworCit0eXBlZGVmIHN0cnVjdCB7CisgIHZvaWQgKmRhdGE7CisgIE1lc3NhZ2VUeXBlIHR5cGU7CisKKyAgc2l6ZV90IGxlbmd0aDsKKyAgY2hhciBjb250ZW50W107Cit9IE1lc3NhZ2VIYW5kbGVyUGFyYW1ldGVyczsKKwordHlwZWRlZiB2b2lkIE1lc3NhZ2VIYW5kbGVyKGNvbnN0IE1lc3NhZ2VIYW5kbGVyUGFyYW1ldGVycyAqcGFyYW1ldGVycyk7CitleHRlcm4gaW50IHN0YXJ0TWVzc2FnZVJlY2VpdmVyKGNvbnN0IGNoYXIgKm5hbWUsIGludCBxdWV1ZSwgTWVzc2FnZVR5cGUgdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IHNpemUsIE1lc3NhZ2VIYW5kbGVyICpoYW5kbGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpkYXRhKTsKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYgLyogX19jcGx1c3BsdXMgKi8KKworI2VuZGlmIC8qIEJSTFRUWV9JTkNMVURFRF9NU0dfUVVFVUUgKi8KZGlmZiAtLWdpdCBhL0hlYWRlcnMvbm90ZV90eXBlcy5oIGIvSGVhZGVycy9ub3RlX3R5cGVzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGI5NWFlNwotLS0gL2Rldi9udWxsCisrKyBiL0hlYWRlcnMvbm90ZV90eXBlcy5oCkBAIC0wLDAgKzEsNDAgQEAKKy8qCisgKiBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorICogICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorICoKKyAqIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorICoKKyAqIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyAqLworCisjaWZuZGVmIEJSTFRUWV9JTkNMVURFRF9OT1RFX1RZUEVTCisjZGVmaW5lIEJSTFRUWV9JTkNMVURFRF9OT1RFX1RZUEVTCisKKyNpbmNsdWRlICJwcm9sb2d1ZS5oIgorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmIC8qIF9fY3BsdXNwbHVzICovCisKKyNpZmRlZiBOT19GTE9BVAordHlwZWRlZiB1aW50MzJfdCBOb3RlRnJlcXVlbmN5OworI2RlZmluZSBQUklmcmVxIFBSSXUzMgorI2Vsc2UgLyogTk9fRkxPQVQgKi8KK3R5cGVkZWYgZmxvYXQgTm90ZUZyZXF1ZW5jeTsKKyNkZWZpbmUgUFJJZnJlcSAiZiIKKyNlbmRpZiAvKiBOT19GTE9BVCAqLworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZiAvKiBfX2NwbHVzcGx1cyAqLworCisjZW5kaWYgLyogQlJMVFRZX0lOQ0xVREVEX05PVEVfVFlQRVMgKi8KZGlmZiAtLWdpdCBhL0hlYWRlcnMvbm90ZXMuaCBiL0hlYWRlcnMvbm90ZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NWIwNWY3Ci0tLSAvZGV2L251bGwKKysrIGIvSGVhZGVycy9ub3Rlcy5oCkBAIC0wLDAgKzEsNjggQEAKKy8qCisgKiBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorICogICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorICoKKyAqIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorICoKKyAqIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyAqLworCisjaWZuZGVmIEJSTFRUWV9JTkNMVURFRF9OT1RFUworI2RlZmluZSBCUkxUVFlfSU5DTFVERURfTk9URVMKKworI2luY2x1ZGUgIm5vdGVfdHlwZXMuaCIKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZiAvKiBfX2NwbHVzcGx1cyAqLworCisjZGVmaW5lIE5PVEVTX1BFUl9PQ1RBVkUgMTIKKyNkZWZpbmUgTk9URV9NSURETEVfQyA2MAorCitleHRlcm4gdW5zaWduZWQgY2hhciBnZXRMb3dlc3ROb3RlICh2b2lkKTsKK2V4dGVybiB1bnNpZ25lZCBjaGFyIGdldEhpZ2hlc3ROb3RlICh2b2lkKTsKKworZXh0ZXJuIHVpbnQzMl90IGdldEludGVnZXJOb3RlRnJlcXVlbmN5ICh1bnNpZ25lZCBjaGFyIG5vdGUpOworZXh0ZXJuIHVuc2lnbmVkIGNoYXIgZ2V0TmVhcmVzdE5vdGUgKE5vdGVGcmVxdWVuY3kgZnJlcXVlbmN5KTsKKworI2lmZGVmIE5PX0ZMT0FUCisjZGVmaW5lIGdldE5vdGVGcmVxdWVuY3kgZ2V0SW50ZWdlck5vdGVGcmVxdWVuY3kKKyNlbHNlIC8qIE5PX0ZMT0FUICovCitleHRlcm4gZmxvYXQgZ2V0UmVhbE5vdGVGcmVxdWVuY3kgKHVuc2lnbmVkIGNoYXIgbm90ZSk7CisjZGVmaW5lIGdldE5vdGVGcmVxdWVuY3kgZ2V0UmVhbE5vdGVGcmVxdWVuY3kKKyNlbmRpZiAvKiBOT19GTE9BVCAqLworCit0eXBlZGVmIHN0cnVjdCBOb3RlRGV2aWNlU3RydWN0IE5vdGVEZXZpY2U7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgTm90ZURldmljZSAqICgqY29uc3RydWN0KSAoaW50IGVycm9yTGV2ZWwpOworICB2b2lkICgqZGVzdHJ1Y3QpIChOb3RlRGV2aWNlICpkZXZpY2UpOworCisgIGludCAoKnRvbmUpIChOb3RlRGV2aWNlICpkZXZpY2UsIHVuc2lnbmVkIGludCBkdXJhdGlvbiwgTm90ZUZyZXF1ZW5jeSBmcmVxdWVuY3kpOworICBpbnQgKCpub3RlKSAoTm90ZURldmljZSAqZGV2aWNlLCB1bnNpZ25lZCBpbnQgZHVyYXRpb24sIHVuc2lnbmVkIGNoYXIgbm90ZSk7CisKKyAgaW50ICgqZmx1c2gpIChOb3RlRGV2aWNlICpkZXZpY2UpOworfSBOb3RlTWV0aG9kczsKKworZXh0ZXJuIGNvbnN0IE5vdGVNZXRob2RzIGJlZXBOb3RlTWV0aG9kczsKK2V4dGVybiBjb25zdCBOb3RlTWV0aG9kcyBwY21Ob3RlTWV0aG9kczsKK2V4dGVybiBjb25zdCBOb3RlTWV0aG9kcyBtaWRpTm90ZU1ldGhvZHM7CitleHRlcm4gY29uc3QgTm90ZU1ldGhvZHMgZm1Ob3RlTWV0aG9kczsKKworZXh0ZXJuIGNoYXIgKm9wdF9wY21EZXZpY2U7CitleHRlcm4gY2hhciAqb3B0X21pZGlEZXZpY2U7CisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmIC8qIF9fY3BsdXNwbHVzICovCisKKyNlbmRpZiAvKiBCUkxUVFlfSU5DTFVERURfTk9URVMgKi8KZGlmZiAtLWdpdCBhL0hlYWRlcnMvcGFyYW1zLmggYi9IZWFkZXJzL3BhcmFtcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIwZGVkYWUKLS0tIC9kZXYvbnVsbAorKysgYi9IZWFkZXJzL3BhcmFtcy5oCkBAIC0wLDAgKzEsMzIgQEAKKy8qCisgKiBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorICogICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorICoKKyAqIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorICoKKyAqIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyAqLworCisjaWZuZGVmIEJSTFRUWV9JTkNMVURFRF9QQVJBTVMKKyNkZWZpbmUgQlJMVFRZX0lOQ0xVREVEX1BBUkFNUworCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmIC8qIF9fY3BsdXNwbHVzICovCisKK2V4dGVybiBjaGFyICpnZXRCb290UGFyYW1ldGVycyAoY29uc3QgY2hhciAqbmFtZSk7CisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmIC8qIF9fY3BsdXNwbHVzICovCisKKyNlbmRpZiAvKiBCUkxUVFlfSU5DTFVERURfUEFSQU1TICovCmRpZmYgLS1naXQgYS9IZWFkZXJzL3BhcnNlLmggYi9IZWFkZXJzL3BhcnNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDhhMmQ4NgotLS0gL2Rldi9udWxsCisrKyBiL0hlYWRlcnMvcGFyc2UuaApAQCAtMCwwICsxLDExMSBAQAorLyoKKyAqIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisgKiAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisgKgorICogQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKKyNpZm5kZWYgQlJMVFRZX0lOQ0xVREVEX1BBUlNFCisjZGVmaW5lIEJSTFRUWV9JTkNMVURFRF9QQVJTRQorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmIC8qIF9fY3BsdXNwbHVzICovCisKK2V4dGVybiBjaGFyICpqb2luU3RyaW5ncyAoY29uc3QgY2hhciAqY29uc3QgKnN0cmluZ3MsIGludCBjb3VudCk7CitleHRlcm4gaW50IGNoYW5nZVN0cmluZ1NldHRpbmcgKGNoYXIgKipzZXR0aW5nLCBjb25zdCBjaGFyICp2YWx1ZSk7CitleHRlcm4gaW50IGV4dGVuZFN0cmluZ1NldHRpbmcgKGNoYXIgKipzZXR0aW5nLCBjb25zdCBjaGFyICp2YWx1ZSwgaW50IHByZXBlbmQpOworZXh0ZXJuIHZvaWQgZGVhbGxvY2F0ZVN0cmluZ3MgKGNoYXIgKiphcnJheSk7CitleHRlcm4gY2hhciAqKnNwbGl0U3RyaW5nIChjb25zdCBjaGFyICpzdHJpbmcsIGNoYXIgZGVsaW1pdGVyLCBpbnQgKmNvdW50KTsKKworZXh0ZXJuIGludCBjaGFuZ2VMaXN0U2V0dGluZyAoY2hhciAqKipsaXN0LCBjaGFyICoqc2V0dGluZywgY29uc3QgY2hhciAqdmFsdWUpOworCitleHRlcm4gaW50IHJlc2NhbGVJbnRlZ2VyIChpbnQgdmFsdWUsIGludCBmcm9tLCBpbnQgdG8pOworZXh0ZXJuIGludCBpc0ludGVnZXIgKGludCAqdmFsdWUsIGNvbnN0IGNoYXIgKnN0cmluZyk7CitleHRlcm4gaW50IGlzVW5zaWduZWRJbnRlZ2VyICh1bnNpZ25lZCBpbnQgKnZhbHVlLCBjb25zdCBjaGFyICpzdHJpbmcpOworZXh0ZXJuIGludCBpc0xvZ0xldmVsICh1bnNpZ25lZCBpbnQgKmxldmVsLCBjb25zdCBjaGFyICpzdHJpbmcpOworCitleHRlcm4gaW50IGlzQWJicmV2aWF0aW9uIChjb25zdCBjaGFyICphY3R1YWwsIGNvbnN0IGNoYXIgKnN1cHBsaWVkKTsKK2V4dGVybiBpbnQgaXNBYmJyZXZpYXRlZFBocmFzZSAoY29uc3QgY2hhciAqYWN0dWFsLCBjb25zdCBjaGFyICpzdXBwbGllZCk7CisKK2V4dGVybiBpbnQgdmFsaWRhdGVJbnRlZ2VyIChpbnQgKnZhbHVlLCBjb25zdCBjaGFyICpzdHJpbmcsIGNvbnN0IGludCAqbWluaW11bSwgY29uc3QgaW50ICptYXhpbXVtKTsKK2V4dGVybiBpbnQgdmFsaWRhdGVDaG9pY2UgKHVuc2lnbmVkIGludCAqdmFsdWUsIGNvbnN0IGNoYXIgKnN0cmluZywgY29uc3QgY2hhciAqY29uc3QgKmNob2ljZXMpOworZXh0ZXJuIGludCB2YWxpZGF0ZUNob2ljZUV4ICh1bnNpZ25lZCBpbnQgKnZhbHVlLCBjb25zdCBjaGFyICpzdHJpbmcsIGNvbnN0IHZvaWQgKmNob2ljZXMsIHNpemVfdCBzaXplKTsKKwordHlwZWRlZiBzdHJ1Y3QgeworICBjb25zdCBjaGFyICpvbjsKKyAgY29uc3QgY2hhciAqb2ZmOworfSBGbGFnS2V5d29yZFBhaXI7CisKK3N0YXRpYyBpbmxpbmUgY29uc3QgY2hhciAqCitnZXRGbGFnS2V5d29yZCAoY29uc3QgRmxhZ0tleXdvcmRQYWlyICpma3AsIGludCBzdGF0ZSkgeworICByZXR1cm4gc3RhdGU/IGZrcC0+b246IGZrcC0+b2ZmOworfQorCitleHRlcm4gRmxhZ0tleXdvcmRQYWlyIGZrcE9uT2ZmOworZXh0ZXJuIEZsYWdLZXl3b3JkUGFpciBma3BUcnVlRmFsc2U7CitleHRlcm4gRmxhZ0tleXdvcmRQYWlyIGZrcFllc05vOworZXh0ZXJuIEZsYWdLZXl3b3JkUGFpciBma3AxMDsKKworc3RhdGljIGlubGluZSBjb25zdCBjaGFyICoKK2dldEZsYWdLZXl3b3JkT25PZmYgKGludCBzdGF0ZSkgeworICByZXR1cm4gZ2V0RmxhZ0tleXdvcmQoJmZrcE9uT2ZmLCBzdGF0ZSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgY29uc3QgY2hhciAqCitnZXRGbGFnS2V5d29yZFRydWVGYWxzZSAoaW50IHN0YXRlKSB7CisgIHJldHVybiBnZXRGbGFnS2V5d29yZCgmZmtwVHJ1ZUZhbHNlLCBzdGF0ZSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgY29uc3QgY2hhciAqCitnZXRGbGFnS2V5d29yZFllc05vIChpbnQgc3RhdGUpIHsKKyAgcmV0dXJuIGdldEZsYWdLZXl3b3JkKCZma3BZZXNObywgc3RhdGUpOworfQorCitzdGF0aWMgaW5saW5lIGNvbnN0IGNoYXIgKgorZ2V0RmxhZ0tleXdvcmQxMCAoaW50IHN0YXRlKSB7CisgIHJldHVybiBnZXRGbGFnS2V5d29yZCgmZmtwMTAsIHN0YXRlKTsKK30KKworZXh0ZXJuIGludCB2YWxpZGF0ZUZsYWdLZXl3b3JkICh1bnNpZ25lZCBpbnQgKnZhbHVlLCBjb25zdCBjaGFyICpzdHJpbmcpOworZXh0ZXJuIGludCB2YWxpZGF0ZUZsYWcgKHVuc2lnbmVkIGludCAqdmFsdWUsIGNvbnN0IGNoYXIgKnN0cmluZywgY29uc3QgRmxhZ0tleXdvcmRQYWlyICpma3ApOworZXh0ZXJuIGludCB2YWxpZGF0ZU9uT2ZmICh1bnNpZ25lZCBpbnQgKnZhbHVlLCBjb25zdCBjaGFyICpzdHJpbmcpOworZXh0ZXJuIGludCB2YWxpZGF0ZVllc05vICh1bnNpZ25lZCBpbnQgKnZhbHVlLCBjb25zdCBjaGFyICpzdHJpbmcpOworCisjaWZuZGVmIE5PX0ZMT0FUCitleHRlcm4gaW50IGlzRmxvYXQgKGZsb2F0ICp2YWx1ZSwgY29uc3QgY2hhciAqc3RyaW5nKTsKK2V4dGVybiBpbnQgdmFsaWRhdGVGbG9hdCAoZmxvYXQgKnZhbHVlLCBjb25zdCBjaGFyICpzdHJpbmcsIGNvbnN0IGZsb2F0ICptaW5pbXVtLCBjb25zdCBmbG9hdCAqbWF4aW11bSk7CisjZW5kaWYgLyogTk9fRkxPQVQgKi8KKworI2lmIGRlZmluZWQoSEFWRV9QV0RfSCkgJiYgZGVmaW5lZChIQVZFX0dSUF9IKQorZXh0ZXJuIGludCB2YWxpZGF0ZVVzZXIodWlkX3QgKnZhbHVlLCBjb25zdCBjaGFyICpzdHJpbmcsIGdpZF90ICpncm91cCk7CitleHRlcm4gaW50IHZhbGlkYXRlR3JvdXAoZ2lkX3QgKnZhbHVlLCBjb25zdCBjaGFyICpzdHJpbmcpOworI2VuZGlmIC8qIGRlZmluZWQoSEFWRV9QV0RfSCkgJiYgZGVmaW5lZChIQVZFX0dSUF9IKSAqLworCisjZGVmaW5lIFBBVEhfU0VQQVJBVE9SX0NIQVJBQ1RFUiAgICAgICAnLycKKyNkZWZpbmUgUEFSQU1FVEVSX1NFUEFSQVRPUl9DSEFSQUNURVIgICcsJworI2RlZmluZSBQQVJBTUVURVJfQVNTSUdOTUVOVF9DSEFSQUNURVIgJz0nCisjZGVmaW5lIFBBUkFNRVRFUl9RVUFMSUZJRVJfQ0hBUkFDVEVSICAnOicKKworZXh0ZXJuIGludCBoYXNRdWFsaWZpZXIgKGNvbnN0IGNoYXIgKippZGVudGlmaWVyLCBjb25zdCBjaGFyICpxdWFsaWZpZXIpOworZXh0ZXJuIGludCBoYXNOb1F1YWxpZmllciAoY29uc3QgY2hhciAqaWRlbnRpZmllcik7CisKK2V4dGVybiBjaGFyICoqZ2V0UGFyYW1ldGVycyAoY29uc3QgY2hhciAqY29uc3QgKm5hbWVzLCBjb25zdCBjaGFyICpxdWFsaWZpZXIsIGNvbnN0IGNoYXIgKnBhcmFtZXRlcnMpOworZXh0ZXJuIHZvaWQgbG9nUGFyYW1ldGVycyAoY29uc3QgY2hhciAqY29uc3QgKm5hbWVzLCBjaGFyICoqdmFsdWVzLCBjb25zdCBjaGFyICpkZXNjcmlwdGlvbik7CisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmIC8qIF9fY3BsdXNwbHVzICovCisKKyNlbmRpZiAvKiBCUkxUVFlfSU5DTFVERURfUEFSU0UgKi8KZGlmZiAtLWdpdCBhL0hlYWRlcnMvcGNtLmggYi9IZWFkZXJzL3BjbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQxYTQ5YmMKLS0tIC9kZXYvbnVsbAorKysgYi9IZWFkZXJzL3BjbS5oCkBAIC0wLDAgKzEsODcgQEAKKy8qCisgKiBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorICogICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorICoKKyAqIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorICoKKyAqIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyAqLworCisjaWZuZGVmIEJSTFRUWV9JTkNMVURFRF9QQ00KKyNkZWZpbmUgQlJMVFRZX0lOQ0xVREVEX1BDTQorCisjaW5jbHVkZSAicHJvbG9ndWUuaCIKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZiAvKiBfX2NwbHVzcGx1cyAqLworCit0eXBlZGVmIGVudW0geworICBQQ01fRk1UX1M4LCAgIC8vIHNpZ25lZCwgOCBiaXRzLCBsaW5lYXIKKyAgUENNX0ZNVF9VOCwgICAvLyB1bnNpZ25lZCwgOCBiaXRzLCBsaW5lYXIKKworICBQQ01fRk1UX1MxNkIsIC8vIHNpZ25lZCwgMTYgYml0cywgbGluZWFyLCBiaWcgZW5kaWFuCisgIFBDTV9GTVRfVTE2QiwgLy8gdW5zaWduZWQsIDE2IGJpdHMsIGxpbmVhciwgYmlnIGVuZGlhbgorCisgIFBDTV9GTVRfUzE2TCwgLy8gc2lnbmVkLCAxNiBiaXRzLCBsaW5lYXIsIGxpdHRsZSBlbmRpYW4KKyAgUENNX0ZNVF9VMTZMLCAvLyB1bnNpZ25lZCwgMTYgYml0cywgbGluZWFyLCBsaXR0bGUgZW5kaWFuCisKKyAgUENNX0ZNVF9VTEFXLCAvLyBzaWduZWQsIDggYml0cywgbG9nYXJpdGhtaWMKKyAgUENNX0ZNVF9BTEFXLCAvLyBzaWduZWQsIDggYml0cywgbG9nYXJpdGhtaWMKKworICBQQ01fRk1UX1VOS05PV04KK30gUGNtQW1wbGl0dWRlRm9ybWF0OworCisjaWZkZWYgV09SRFNfQklHRU5ESUFOCisjZGVmaW5lIFBDTV9GTVRfUzE2TiBQQ01fRk1UX1MxNkIKKyNkZWZpbmUgUENNX0ZNVF9VMTZOIFBDTV9GTVRfVTE2QgorI2Vsc2UgLyogV09SRFNfQklHRU5ESUFOICovCisjZGVmaW5lIFBDTV9GTVRfUzE2TiBQQ01fRk1UX1MxNkwKKyNkZWZpbmUgUENNX0ZNVF9VMTZOIFBDTV9GTVRfVTE2TAorI2VuZGlmIC8qIFdPUkRTX0JJR0VORElBTiAqLworCisjZGVmaW5lIFBDTV9NQVhfU0FNUExFX1NJWkUgMgorCit0eXBlZGVmIHVuaW9uIHsKKyAgdWludDhfdCBieXRlc1tQQ01fTUFYX1NBTVBMRV9TSVpFXTsKK30gUGNtU2FtcGxlOworCit0eXBlZGVmIHVpbnQ4X3QgUGNtU2FtcGxlU2l6ZTsKK3R5cGVkZWYgUGNtU2FtcGxlU2l6ZSAoKlBjbVNhbXBsZU1ha2VyKSAoUGNtU2FtcGxlICpzYW1wbGUsIGludDE2X3QgYW1wbGl0dWRlKTsKK2V4dGVybiBQY21TYW1wbGVNYWtlciBnZXRQY21TYW1wbGVNYWtlciAoUGNtQW1wbGl0dWRlRm9ybWF0IGZvcm1hdCk7CisKK3R5cGVkZWYgc3RydWN0IFBjbURldmljZVN0cnVjdCBQY21EZXZpY2U7CisKK2V4dGVybiBQY21EZXZpY2UgKm9wZW5QY21EZXZpY2UgKGludCBlcnJvckxldmVsLCBjb25zdCBjaGFyICpkZXZpY2UpOworZXh0ZXJuIHZvaWQgY2xvc2VQY21EZXZpY2UgKFBjbURldmljZSAqcGNtKTsKKworZXh0ZXJuIGludCBnZXRQY21CbG9ja1NpemUgKFBjbURldmljZSAqcGNtKTsKKworZXh0ZXJuIGludCBnZXRQY21TYW1wbGVSYXRlIChQY21EZXZpY2UgKnBjbSk7CitleHRlcm4gaW50IHNldFBjbVNhbXBsZVJhdGUgKFBjbURldmljZSAqcGNtLCBpbnQgcmF0ZSk7CisKK2V4dGVybiBpbnQgZ2V0UGNtQ2hhbm5lbENvdW50IChQY21EZXZpY2UgKnBjbSk7CitleHRlcm4gaW50IHNldFBjbUNoYW5uZWxDb3VudCAoUGNtRGV2aWNlICpwY20sIGludCBjaGFubmVscyk7CisKK2V4dGVybiBQY21BbXBsaXR1ZGVGb3JtYXQgZ2V0UGNtQW1wbGl0dWRlRm9ybWF0IChQY21EZXZpY2UgKnBjbSk7CitleHRlcm4gUGNtQW1wbGl0dWRlRm9ybWF0IHNldFBjbUFtcGxpdHVkZUZvcm1hdCAoUGNtRGV2aWNlICpwY20sIFBjbUFtcGxpdHVkZUZvcm1hdCBmb3JtYXQpOworCitleHRlcm4gaW50IHdyaXRlUGNtRGF0YSAoUGNtRGV2aWNlICpwY20sIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZmZlciwgaW50IGNvdW50KTsKK2V4dGVybiB2b2lkIHB1c2hQY21PdXRwdXQgKFBjbURldmljZSAqcGNtKTsKK2V4dGVybiB2b2lkIGF3YWl0UGNtT3V0cHV0IChQY21EZXZpY2UgKnBjbSk7CitleHRlcm4gdm9pZCBjYW5jZWxQY21PdXRwdXQgKFBjbURldmljZSAqcGNtKTsKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYgLyogX19jcGx1c3BsdXMgKi8KKworI2VuZGlmIC8qIEJSTFRUWV9JTkNMVURFRF9QQ00gKi8KZGlmZiAtLWdpdCBhL0hlYWRlcnMvcGdtcGF0aC5oIGIvSGVhZGVycy9wZ21wYXRoLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMThlNzVjYwotLS0gL2Rldi9udWxsCisrKyBiL0hlYWRlcnMvcGdtcGF0aC5oCkBAIC0wLDAgKzEsMzIgQEAKKy8qCisgKiBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorICogICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorICoKKyAqIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorICoKKyAqIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyAqLworCisjaWZuZGVmIEJSTFRUWV9JTkNMVURFRF9QR01QQVRICisjZGVmaW5lIEJSTFRUWV9JTkNMVURFRF9QR01QQVRICisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYgLyogX19jcGx1c3BsdXMgKi8KKworZXh0ZXJuIGNoYXIgKmdldFByb2dyYW1QYXRoICh2b2lkKTsKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYgLyogX19jcGx1c3BsdXMgKi8KKworI2VuZGlmIC8qIEJSTFRUWV9JTkNMVURFRF9QR01QQVRIICovCmRpZmYgLS1naXQgYS9IZWFkZXJzL3BnbXByaXZzLmggYi9IZWFkZXJzL3BnbXByaXZzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWIwMjRhNgotLS0gL2Rldi9udWxsCisrKyBiL0hlYWRlcnMvcGdtcHJpdnMuaApAQCAtMCwwICsxLDM0IEBACisvKgorICogQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyAqICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyAqCisgKiBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorICoKKyAqIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyAqCisgKiBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisgKi8KKworI2lmbmRlZiBCUkxUVFlfSU5DTFVERURfUEdNUFJJVlMKKyNkZWZpbmUgQlJMVFRZX0lOQ0xVREVEX1BHTVBSSVZTCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYgLyogX19jcGx1c3BsdXMgKi8KKworZXh0ZXJuIGNvbnN0IGNoYXIgKmNvbnN0ICpnZXRQcml2aWxlZ2VQYXJhbWV0ZXJOYW1lcyAodm9pZCk7CitleHRlcm4gY29uc3QgY2hhciAqZ2V0UHJpdmlsZWdlUGFyYW1ldGVyc1BsYXRmb3JtICh2b2lkKTsKK2V4dGVybiB2b2lkIGVzdGFibGlzaFByb2dyYW1Qcml2aWxlZ2VzIChjaGFyICoqcGFyYW1ldGVycywgaW50IHN0YXlQcml2aWxlZ2VkKTsKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYgLyogX19jcGx1c3BsdXMgKi8KKworI2VuZGlmIC8qIEJSTFRUWV9JTkNMVURFRF9QR01QUklWUyAqLwpkaWZmIC0tZ2l0IGEvSGVhZGVycy9waWQuaCBiL0hlYWRlcnMvcGlkLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjE1M2IwZQotLS0gL2Rldi9udWxsCisrKyBiL0hlYWRlcnMvcGlkLmgKQEAgLTAsMCArMSw1MSBAQAorLyoKKyAqIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisgKiAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisgKgorICogQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKKyNpZm5kZWYgQlJMVFRZX0lOQ0xVREVEX1BJRAorI2RlZmluZSBCUkxUVFlfSU5DTFVERURfUElECisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYgLyogX19jcGx1c3BsdXMgKi8KKworI2lmIGRlZmluZWQoX19NU0RPU19fKSB8fCBkZWZpbmVkKEdSVUJfUlVOVElNRSkKK3R5cGVkZWYgaW50IFByb2Nlc3NJZGVudGlmaWVyOworI2RlZmluZSBQUklwaWQgImQiCisjZGVmaW5lIFNDTnBpZCAiZCIKKyNkZWZpbmUgTVlfUFJPQ0VTU19JRCAxCisKKyNlbGlmIGRlZmluZWQoX19NSU5HVzMyX18pCit0eXBlZGVmIERXT1JEIFByb2Nlc3NJZGVudGlmaWVyOworI2RlZmluZSBQUklwaWQgImx1IgorI2RlZmluZSBTQ05waWQgImx1IgorCisjZWxzZSAvKiBVbml4ICovCit0eXBlZGVmIHBpZF90IFByb2Nlc3NJZGVudGlmaWVyOworI2RlZmluZSBQUklwaWQgImQiCisjZGVmaW5lIFNDTnBpZCAiZCIKKyNlbmRpZiAvKiBwbGF0Zm9ybS1kZXBlbmRlbnQgZGVmaW5pdGlvbnMgKi8KKworZXh0ZXJuIFByb2Nlc3NJZGVudGlmaWVyIGdldFByb2Nlc3NJZGVudGlmaWVyICh2b2lkKTsKK2V4dGVybiBpbnQgdGVzdFByb2Nlc3NJZGVudGlmaWVyIChQcm9jZXNzSWRlbnRpZmllciBwaWQpOworZXh0ZXJuIGludCBjYW5jZWxQcm9jZXNzIChQcm9jZXNzSWRlbnRpZmllciBwaWQpOworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZiAvKiBfX2NwbHVzcGx1cyAqLworCisjZW5kaWYgLyogQlJMVFRZX0lOQ0xVREVEX1BJRCAqLwpkaWZmIC0tZ2l0IGEvSGVhZGVycy9wb3J0cy5oIGIvSGVhZGVycy9wb3J0cy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU3YWU2MGQKLS0tIC9kZXYvbnVsbAorKysgYi9IZWFkZXJzL3BvcnRzLmgKQEAgLTAsMCArMSwzNiBAQAorLyoKKyAqIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisgKiAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisgKgorICogQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKKyNpZm5kZWYgQlJMVFRZX0lOQ0xVREVEX1BPUlRTCisjZGVmaW5lIEJSTFRUWV9JTkNMVURFRF9QT1JUUworCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmIC8qIF9fY3BsdXNwbHVzICovCisKK2V4dGVybiBpbnQgZW5hYmxlUG9ydHMgKGludCBlcnJvckxldmVsLCB1bnNpZ25lZCBzaG9ydCBpbnQgYmFzZSwgdW5zaWduZWQgc2hvcnQgaW50IGNvdW50KTsKK2V4dGVybiBpbnQgZGlzYWJsZVBvcnRzICh1bnNpZ25lZCBzaG9ydCBpbnQgYmFzZSwgdW5zaWduZWQgc2hvcnQgaW50IGNvdW50KTsKKworZXh0ZXJuIHVuc2lnbmVkIGNoYXIgcmVhZFBvcnQxICh1bnNpZ25lZCBzaG9ydCBpbnQgcG9ydCk7CitleHRlcm4gdm9pZCB3cml0ZVBvcnQxICh1bnNpZ25lZCBzaG9ydCBpbnQgcG9ydCwgdW5zaWduZWQgY2hhciB2YWx1ZSk7CisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmIC8qIF9fY3BsdXNwbHVzICovCisKKyNlbmRpZiAvKiBCUkxUVFlfSU5DTFVERURfUE9SVFMgKi8KZGlmZiAtLWdpdCBhL0hlYWRlcnMvcHJlZnMuaCBiL0hlYWRlcnMvcHJlZnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYTdlNzM1Ci0tLSAvZGV2L251bGwKKysrIGIvSGVhZGVycy9wcmVmcy5oCkBAIC0wLDAgKzEsMjUxIEBACisvKgorICogQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyAqICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyAqCisgKiBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorICoKKyAqIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyAqCisgKiBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisgKi8KKworI2lmbmRlZiBCUkxUVFlfSU5DTFVERURfUFJFRlMKKyNkZWZpbmUgQlJMVFRZX0lOQ0xVREVEX1BSRUZTCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYgLyogX19jcGx1c3BsdXMgKi8KKwordHlwZWRlZiBlbnVtIHsKKyAgY3NCb3R0b21Eb3RzLAorICBjc0FsbERvdHMsCisgIGNzTG93ZXJMZWZ0RG90LAorICBjc0xvd2VyUmlnaHREb3QsCisgIGNzTm9Eb3RzCit9IEN1cnNvclN0eWxlczsKKwordHlwZWRlZiBlbnVtIHsKKyAgYnZDb21wdXRlcjgsCisgIGJ2Q29udHJhY3RlZDYsCisgIGJ2Q29tcHV0ZXI2LAorICBidkNvbnRyYWN0ZWQ4LAorfSBCcmFpbGxlVmFyaWFudDsKKwordHlwZWRlZiBlbnVtIHsKKyAgc2J3QWxsLAorICBzYndFbmRPZkxpbmUsCisgIHNid1Jlc3RPZkxpbmUKK30gU2tpcEJsYW5rV2luZG93c01vZGU7CisKK3R5cGVkZWYgZW51bSB7CisgIHNheUltbWVkaWF0ZSwKKyAgc2F5RW5xdWV1ZQorfSBTYXlNb2RlOworCit0eXBlZGVmIGVudW0geworICBzdWNOb25lLAorICBzdWNTYXlDYXAsCisgIHN1Y1JhaXNlUGl0Y2gKK30gU3BlZWNoVXBwZXJjYXNlSW5kaWNhdG9yOworCit0eXBlZGVmIGVudW0geworICBzd3NOb25lLAorICBzd3NTYXlTcGFjZQorfSBTcGVlY2hXaGl0ZXNwYWNlSW5kaWNhdG9yOworCit0eXBlZGVmIGVudW0geworICB0ZjI0SG91ciwKKyAgdGYxMkhvdXIKK30gVGltZUZvcm1hdDsKKwordHlwZWRlZiBlbnVtIHsKKyAgdHNDb2xvbiwKKyAgdHNEb3QKK30gVGltZVNlcGFyYXRvcjsKKwordHlwZWRlZiBlbnVtIHsKKyAgZHBOb25lLAorICBkcEJlZm9yZVRpbWUsCisgIGRwQWZ0ZXJUaW1lCit9IERhdGVQb3NpdGlvbjsKKwordHlwZWRlZiBlbnVtIHsKKyAgZGZZZWFyTW9udGhEYXksCisgIGRmTW9udGhEYXlZZWFyLAorICBkZkRheU1vbnRoWWVhcgorfSBEYXRlRm9ybWF0OworCit0eXBlZGVmIGVudW0geworICBkc0Rhc2gsCisgIGRzU2xhc2gsCisgIGRzRG90Cit9IERhdGVTZXBhcmF0b3I7CisKK3R5cGVkZWYgZW51bSB7CisgIHNwTm9uZSwKKyAgc3BMZWZ0LAorICBzcFJpZ2h0Cit9IFN0YXR1c1Bvc2l0aW9uOworCit0eXBlZGVmIGVudW0geworICBzc05vbmUsCisgIHNzU3BhY2UsCisgIHNzQmxvY2ssCisgIHNzU3RhdHVzU2lkZSwKKyAgc3NUZXh0U2lkZQorfSBTdGF0dXNTZXBhcmF0b3I7CisKK3R5cGVkZWYgZW51bSB7CisgIGF0T2ZmLAorICBhdDVzLAorICBhdDEwcywKKyAgYXQyMHMsCisgIGF0NDBzCit9IEF1dG9yZWxlYXNlVGltZTsKKwordHlwZWRlZiBlbnVtIHsKKyAgY3RkTm9uZSwKKyAgY3RkMjUwbXMsCisgIGN0ZDUwMG1zLAorICBjdGQxcywKKyAgY3RkMnMKK30gQ3Vyc29yVHJhY2tpbmdEZWxheTsKKwordHlwZWRlZiBzdHJ1Y3QgeworICB1bnNpZ25lZCBjaGFyIG1hZ2ljWzJdOworICB1bnNpZ25lZCBjaGFyIHNob3dTY3JlZW5DdXJzb3I7CisgIHVuc2lnbmVkIGNoYXIgdmVyc2lvbjsKKyAgdW5zaWduZWQgY2hhciBzaG93QXR0cmlidXRlczsKKyAgdW5zaWduZWQgY2hhciB0b3VjaFNlbnNpdGl2aXR5OworICB1bnNpZ25lZCBjaGFyIGJsaW5raW5nU2NyZWVuQ3Vyc29yOworICB1bnNpZ25lZCBjaGFyIGF1dG9yZXBlYXRFbmFibGVkOworICB1bnNpZ25lZCBjaGFyIGJsaW5raW5nQ2FwaXRhbHM7CisgIHVuc2lnbmVkIGNoYXIgbG9uZ1ByZXNzVGltZTsKKyAgdW5zaWduZWQgY2hhciBibGlua2luZ0F0dHJpYnV0ZXM7CisgIHVuc2lnbmVkIGNoYXIgYXV0b3JlcGVhdEludGVydmFsOworICB1bnNpZ25lZCBjaGFyIHNjcmVlbkN1cnNvclN0eWxlOworICB1bnNpZ25lZCBjaGFyIHNheUxpbmVNb2RlOworICB1bnNpZ25lZCBjaGFyIHNjcmVlbkN1cnNvclZpc2libGVUaW1lOworICB1bnNpZ25lZCBjaGFyIGF1dG9zcGVhazsKKyAgdW5zaWduZWQgY2hhciBzY3JlZW5DdXJzb3JJbnZpc2libGVUaW1lOworICB1bnNpZ25lZCBjaGFyIHBjbVZvbHVtZTsKKyAgdW5zaWduZWQgY2hhciBjYXBpdGFsc1Zpc2libGVUaW1lOworICB1bnNpZ25lZCBjaGFyIG1pZGlWb2x1bWU7CisgIHVuc2lnbmVkIGNoYXIgY2FwaXRhbHNJbnZpc2libGVUaW1lOworICB1bnNpZ25lZCBjaGFyIGZtVm9sdW1lOworICB1bnNpZ25lZCBjaGFyIGF0dHJpYnV0ZXNWaXNpYmxlVGltZTsKKyAgdW5zaWduZWQgY2hhciBoaWdobGlnaHRCcmFpbGxlV2luZG93TG9jYXRpb247CisgIHVuc2lnbmVkIGNoYXIgYXR0cmlidXRlc0ludmlzaWJsZVRpbWU7CisgIHVuc2lnbmVkIGNoYXIgdHJhY2tTY3JlZW5Qb2ludGVyOworICB1bnNpZ25lZCBjaGFyIGJyYWlsbGVWYXJpYW50OworICB1bnNpZ25lZCBjaGFyIGF1dG9yZXBlYXRQYW5uaW5nOworICB1bnNpZ25lZCBjaGFyIHNsaWRpbmdCcmFpbGxlV2luZG93OworICB1bnNpZ25lZCBjaGFyIGVhZ2VyU2xpZGluZ0JyYWlsbGVXaW5kb3c7CisgIHVuc2lnbmVkIGNoYXIgYWxlcnRUdW5lczsKKyAgdW5zaWduZWQgY2hhciB0dW5lRGV2aWNlOworICB1bnNpZ25lZCBjaGFyIHNraXBJZGVudGljYWxMaW5lczsKKyAgdW5zaWduZWQgY2hhciBhbGVydE1lc3NhZ2VzOworICB1bnNpZ25lZCBjaGFyIHNraXBCbGFua0JyYWlsbGVXaW5kb3dzTW9kZTsKKyAgdW5zaWduZWQgY2hhciBhbGVydERvdHM7CisgIHVuc2lnbmVkIGNoYXIgc2tpcEJsYW5rQnJhaWxsZVdpbmRvd3M7CisgIHVuc2lnbmVkIGNoYXIgbWlkaUluc3RydW1lbnQ7CisgIHVuc2lnbmVkIGNoYXIgZXhwYW5kQ3VycmVudFdvcmQ7CisgIHVuc2lnbmVkIGNoYXIgYnJhaWxsZVdpbmRvd092ZXJsYXA7CisgIHVuc2lnbmVkIGNoYXIgc3BlZWNoUmF0ZTsKKyAgdW5zaWduZWQgY2hhciBzcGVlY2hWb2x1bWU7CisgIHVuc2lnbmVkIGNoYXIgYnJhaWxsZUZpcm1uZXNzOworICB1bnNpZ25lZCBjaGFyIHNwZWVjaFB1bmN0dWF0aW9uOworICB1bnNpZ25lZCBjaGFyIHNwZWVjaFBpdGNoOworICB1bnNpZ25lZCBjaGFyIHN0YXR1c1Bvc2l0aW9uOworICB1bnNpZ25lZCBjaGFyIHN0YXR1c0NvdW50OworICB1bnNpZ25lZCBjaGFyIHN0YXR1c1NlcGFyYXRvcjsKKyAgdW5zaWduZWQgY2hhciBzdGF0dXNGaWVsZHNbMTBdOworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogTm8gZmllbGRzIGFib3ZlIHRoaXMgcG9pbnQgc2hvdWxkIGJlIGFkZGVkLCByZW1vdmVkLCBvciByZW9yZGVyZWQgc28gdGhhdCAqLworICAvKiBiYWNrd2FyZCBjb21wYXRpYmlsaXR5IHdpdGggb2xkIGJpbmFyeSBwcmVmZXJlbmNlIGZpbGVzIHdpbGwgYmUgcmV0YWluZWQuICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogRmllbGRzIGJlbG93IHRoaXMgcG9pbnQgbWF5IGJlIG1vZGlmaWVkIGFzIGRlc2lyZWQuICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyAgdW5zaWduZWQgY2hhciBicmFpbGxlS2V5Ym9hcmRFbmFibGVkOworICB1bnNpZ25lZCBjaGFyIGJyYWlsbGVUeXBpbmdNb2RlOworICB1bnNpZ25lZCBjaGFyIGJyYWlsbGVRdWlja1NwYWNlOworCisgIHVuc2lnbmVkIGNoYXIgd29yZFdyYXA7CisgIHVuc2lnbmVkIGNoYXIgY2FwaXRhbGl6YXRpb25Nb2RlOworICB1bnNpZ25lZCBjaGFyIHN0YXJ0U2VsZWN0aW9uV2l0aFJvdXRpbmdLZXk7CisKKyAgdW5zaWduZWQgY2hhciBzcGVlY2hVcHBlcmNhc2VJbmRpY2F0b3I7CisgIHVuc2lnbmVkIGNoYXIgc3BlZWNoV2hpdGVzcGFjZUluZGljYXRvcjsKKworICB1bnNpZ25lZCBjaGFyIGF1dG9zcGVha1NlbGVjdGVkTGluZTsKKyAgdW5zaWduZWQgY2hhciBhdXRvc3BlYWtTZWxlY3RlZENoYXJhY3RlcjsKKyAgdW5zaWduZWQgY2hhciBhdXRvc3BlYWtJbnNlcnRlZENoYXJhY3RlcnM7CisgIHVuc2lnbmVkIGNoYXIgYXV0b3NwZWFrRGVsZXRlZENoYXJhY3RlcnM7CisgIHVuc2lnbmVkIGNoYXIgYXV0b3NwZWFrUmVwbGFjZWRDaGFyYWN0ZXJzOworICB1bnNpZ25lZCBjaGFyIGF1dG9zcGVha0NvbXBsZXRlZFdvcmRzOworICB1bnNpZ25lZCBjaGFyIGF1dG9zcGVha0xpbmVJbmRlbnQ7CisKKyAgdW5zaWduZWQgY2hhciBzaG93U3BlZWNoQ3Vyc29yOworICB1bnNpZ25lZCBjaGFyIHNwZWVjaEN1cnNvclN0eWxlOworICB1bnNpZ25lZCBjaGFyIGJsaW5raW5nU3BlZWNoQ3Vyc29yOworICB1bnNpZ25lZCBjaGFyIHNwZWVjaEN1cnNvclZpc2libGVUaW1lOworICB1bnNpZ25lZCBjaGFyIHNwZWVjaEN1cnNvckludmlzaWJsZVRpbWU7CisKKyAgdW5zaWduZWQgY2hhciB0aW1lRm9ybWF0OworICB1bnNpZ25lZCBjaGFyIHRpbWVTZXBhcmF0b3I7CisgIHVuc2lnbmVkIGNoYXIgc2hvd1NlY29uZHM7CisgIHVuc2lnbmVkIGNoYXIgZGF0ZVBvc2l0aW9uOworICB1bnNpZ25lZCBjaGFyIGRhdGVGb3JtYXQ7CisgIHVuc2lnbmVkIGNoYXIgZGF0ZVNlcGFyYXRvcjsKKworICB1bnNpZ25lZCBjaGFyIGNvbnNvbGVCZWxsQWxlcnQ7CisgIHVuc2lnbmVkIGNoYXIga2V5Ym9hcmRMZWRBbGVydHM7CisKKyAgdW5zaWduZWQgY2hhciBzcGVha0tleUNvbnRleHQ7CisgIHVuc2lnbmVkIGNoYXIgc3BlYWtNb2RpZmllcktleTsKKworICB1bnNpZ25lZCBjaGFyIGF1dG9yZWxlYXNlVGltZTsKKyAgdW5zaWduZWQgY2hhciBvbkZpcnN0UmVsZWFzZTsKKyAgdW5zaWduZWQgY2hhciB0b3VjaE5hdmlnYXRpb247CisKKyAgdW5zaWduZWQgY2hhciBzY3JvbGxBd2FyZUN1cnNvck5hdmlnYXRpb247CisgIHVuc2lnbmVkIGNoYXIgY3Vyc29yVHJhY2tpbmdEZWxheTsKKyAgdW5zaWduZWQgY2hhciB0cmFja1NjcmVlblNjcm9sbDsKKworICB1bnNpZ25lZCBjaGFyIHNhdmVPbkV4aXQ7CisgIHVuc2lnbmVkIGNoYXIgc2hvd1N1Ym1lbnVTaXplczsKKyAgdW5zaWduZWQgY2hhciBzaG93QWR2YW5jZWRTdWJtZW51czsKKyAgdW5zaWduZWQgY2hhciBzaG93QWxsSXRlbXM7Cit9IFBBQ0tFRCBQcmVmZXJlbmNlU2V0dGluZ3M7CisKK2V4dGVybiBQcmVmZXJlbmNlU2V0dGluZ3MgcHJlZnM7CQkvKiBjdXJyZW50IHByZWZlcmVuY2VzIHNldHRpbmdzICovCisKKyNkZWZpbmUgUFJFRlNfVElNRV9NVUxUSVBMSUVSIDEwCisjZGVmaW5lIFBSRUZTMk1TRUNTKHRpbWUpICgodGltZSkgKiBQUkVGU19USU1FX01VTFRJUExJRVIpCisjZGVmaW5lIE1TRUNTMlBSRUZTKG1zZWNzKSAoKChtc2VjcykgKyAoUFJFRlNfVElNRV9NVUxUSVBMSUVSIC0gMSkpIC8gUFJFRlNfVElNRV9NVUxUSVBMSUVSKQorCit0eXBlZGVmIHN0cnVjdCBQcmVmZXJlbmNlRGVmaW5pdGlvblN0cnVjdCBQcmVmZXJlbmNlRGVmaW5pdGlvbjsKK2V4dGVybiBjb25zdCBQcmVmZXJlbmNlRGVmaW5pdGlvbiAqZmluZFByZWZlcmVuY2UgKGNvbnN0IGNoYXIgKm5hbWUpOworCitleHRlcm4gdm9pZCByZXNldFByZWZlcmVuY2VzICh2b2lkKTsKK2V4dGVybiBpbnQgc2V0UHJlZmVyZW5jZSAoY2hhciAqc3RyaW5nKTsKK2V4dGVybiB2b2lkIHNldFN0YXR1c0ZpZWxkcyAoY29uc3QgdW5zaWduZWQgY2hhciAqZmllbGRzKTsKKworZXh0ZXJuIGNoYXIgKm1ha2VQcmVmZXJlbmNlc0ZpbGVQYXRoIChjb25zdCBjaGFyICpuYW1lKTsKK2V4dGVybiBpbnQgbG9hZFByZWZlcmVuY2VzRmlsZSAoY29uc3QgY2hhciAqcGF0aCk7CitleHRlcm4gaW50IHNhdmVQcmVmZXJlbmNlc0ZpbGUgKGNvbnN0IGNoYXIgKnBhdGgpOworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZiAvKiBfX2NwbHVzcGx1cyAqLworCisjZW5kaWYgLyogQlJMVFRZX0lOQ0xVREVEX1BSRUZTICovCmRpZmYgLS1naXQgYS9IZWFkZXJzL3Byb2dyYW0uaCBiL0hlYWRlcnMvcHJvZ3JhbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVhZjE0NGEKLS0tIC9kZXYvbnVsbAorKysgYi9IZWFkZXJzL3Byb2dyYW0uaApAQCAtMCwwICsxLDYzIEBACisvKgorICogQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyAqICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyAqCisgKiBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorICoKKyAqIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyAqCisgKiBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisgKi8KKworI2lmbmRlZiBCUkxUVFlfSU5DTFVERURfUFJPR1JBTQorI2RlZmluZSBCUkxUVFlfSU5DTFVERURfUFJPR1JBTQorCisjaW5jbHVkZSAicGlkLmgiCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYgLyogX19jcGx1c3BsdXMgKi8KKworZXh0ZXJuIGNvbnN0IGNoYXIgc3RhbmRhcmRTdHJlYW1Bcmd1bWVudFtdOworZXh0ZXJuIGNvbnN0IGNoYXIgc3RhbmRhcmRJbnB1dE5hbWVbXTsKK2V4dGVybiBjb25zdCBjaGFyIHN0YW5kYXJkT3V0cHV0TmFtZVtdOworZXh0ZXJuIGNvbnN0IGNoYXIgc3RhbmRhcmRFcnJvck5hbWVbXTsKKwordHlwZWRlZiBlbnVtIHsKKyAgUFJPR19FWElUX1NVQ0NFU1MgID0gMCwKKyAgUFJPR19FWElUX0ZPUkNFICAgID0gMSwKKyAgUFJPR19FWElUX1NZTlRBWCAgID0gMiwKKyAgUFJPR19FWElUX1NFTUFOVElDID0gMywKKyAgUFJPR19FWElUX0ZBVEFMICAgID0gNAorfSBQcm9ncmFtRXhpdFN0YXR1czsKKworZXh0ZXJuIGNvbnN0IGNoYXIgKnByb2dyYW1QYXRoOworZXh0ZXJuIGNvbnN0IGNoYXIgKnByb2dyYW1OYW1lOworCitleHRlcm4gdm9pZCBiZWdpblByb2dyYW0gKGludCBhcmd1bWVudENvdW50LCBjaGFyICoqYXJndW1lbnRWZWN0b3IpOworZXh0ZXJuIHZvaWQgZW5kUHJvZ3JhbSAodm9pZCk7CisKK3R5cGVkZWYgdm9pZCBQcm9ncmFtRXhpdEhhbmRsZXIgKHZvaWQgKmRhdGEpOworZXh0ZXJuIHZvaWQgb25Qcm9ncmFtRXhpdCAoY29uc3QgY2hhciAqbmFtZSwgUHJvZ3JhbUV4aXRIYW5kbGVyICpoYW5kbGVyLCB2b2lkICpkYXRhKTsKK2V4dGVybiB2b2lkIHJlZ2lzdGVyUHJvZ3JhbU1lbW9yeSAoY29uc3QgY2hhciAqbmFtZSwgdm9pZCAqcG9pbnRlcik7CisKK2V4dGVybiBjb25zdCBjaGFyICpnZXRQcm9ncmFtRGlyZWN0b3J5KHZvaWQpOworZXh0ZXJuIGludCBmaXhJbnN0YWxsUGF0aCAoY2hhciAqKnBhdGgpOworZXh0ZXJuIGNoYXIgKm1ha2VQcm9ncmFtUGF0aChjb25zdCBjaGFyICpuYW1lKTsKK2V4dGVybiBjaGFyICptYWtlQ29tbWFuZFBhdGgoY29uc3QgY2hhciAqbmFtZSk7CisKK2V4dGVybiBpbnQgY3JlYXRlUGlkRmlsZSAoY29uc3QgY2hhciAqcGF0aCwgUHJvY2Vzc0lkZW50aWZpZXIgcGlkKTsKK2V4dGVybiBpbnQgY2FuY2VsUHJvZ3JhbSAoY29uc3QgY2hhciAqcGlkRmlsZSk7CisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmIC8qIF9fY3BsdXNwbHVzICovCisKKyNlbmRpZiAvKiBCUkxUVFlfSU5DTFVERURfUFJPR1JBTSAqLwpkaWZmIC0tZ2l0IGEvSGVhZGVycy9wcm9sb2d1ZS5oIGIvSGVhZGVycy9wcm9sb2d1ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ3NDgxMGQKLS0tIC9kZXYvbnVsbAorKysgYi9IZWFkZXJzL3Byb2xvZ3VlLmgKQEAgLTAsMCArMSw0ODcgQEAKKy8qCisgKiBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorICogICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorICoKKyAqIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorICoKKyAqIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyAqLworCisjaWZuZGVmIEJSTFRUWV9JTkNMVURFRF9QUk9MT0dVRQorI2RlZmluZSBCUkxUVFlfSU5DTFVERURfUFJPTE9HVUUKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZiAvKiBfX2NwbHVzcGx1cyAqLworCisjdW5kZWYgSEFWRV9CVUlMVElOX1BPUENPVU5UCisjdW5kZWYgSEFWRV9TWU5DX1NZTkNIUk9OSVpFCisKKyNpZmRlZiBfX2hhc19idWlsdGluCisjaWYgX19oYXNfYnVpbHRpbihfX2J1aWx0aW5fcG9wY291bnQpCisjZGVmaW5lIEhBVkVfQlVJTFRJTl9QT1BDT1VOVAorI2VuZGlmIC8qIF9faGFzX2J1aWx0aW4oX19idWlsdGluX3BvcGNvdW50KSAqLworCisjaWYgX19oYXNfYnVpbHRpbihfX3N5bmNfc3luY2hyb25pemUpCisjZGVmaW5lIEhBVkVfU1lOQ19TWU5DSFJPTklaRQorI2VuZGlmIC8qIF9faGFzX2J1aWx0aW4oX19zeW5jX3N5bmNocm9uaXplKSAqLworI2VuZGlmIC8qIF9faGFzX2J1aWx0aW4gKi8KKworI2lmbmRlZiBIQVZFX1NZTkNfU1lOQ0hST05JWkUKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX3N5bmNfc3luY2hyb25pemUgKHZvaWQpIHt9CisjZW5kaWYgLyogSEFWRV9TWU5DX1NZTkNIUk9OSVpFICovCisKKyNkZWZpbmUgQ09OQ0FURU5BVEVfMShhLGIpIGEjI2IKKyNkZWZpbmUgQ09OQ0FURU5BVEUoYSxiKSBDT05DQVRFTkFURV8xKGEsYikKKworI2RlZmluZSBTVFJJTkdJRllfMShhKSAjYQorI2RlZmluZSBTVFJJTkdJRlkoYSkgU1RSSU5HSUZZXzEoYSkKKworLy8gb25seSB1c2UgaW4gdGhlIGdsb2JhbCBjb250ZXh0CisjZGVmaW5lIE5VTExfVEVSTUlOQVRFRF9TVFJJTkdfQVJSQVkoLi4uKSAoY29uc3QgY2hhciAqY29uc3QgW10pe19fVkFfQVJHU19fLCBOVUxMfQorCisjZGVmaW5lIE1JTihhLCBiKSAgKCgoYSkgPCAoYikpPyAoYSk6IChiKSkgCisjZGVmaW5lIE1BWChhLCBiKSAgKCgoYSkgPiAoYikpPyAoYSk6IChiKSkgCisKKyNkZWZpbmUgQVJSQVlfQ09VTlQoYXJyYXkpIChzaXplb2YoKGFycmF5KSkgLyBzaXplb2YoKGFycmF5KVswXSkpCisjZGVmaW5lIEFSUkFZX1NJWkUocG9pbnRlciwgY291bnQpICgoY291bnQpICogc2l6ZW9mKCoocG9pbnRlcikpKQorCisjZGVmaW5lIElTX1dJVEhJTl9SQU5HRShpbmRleCxzdGFydCxlbmQpICgoKGluZGV4KSA+PSAoc3RhcnQpKSAmJiAoKGluZGV4KSA8IChlbmQpKSkKKyNkZWZpbmUgSVNfV0lUSElOX0JPVU5EUyhpbmRleCxjb3VudCkgSVNfV0lUSElOX1JBTkdFKChpbmRleCksIDAsIChjb3VudCkpCisKKyNkZWZpbmUgU1lNQk9MX1RZUEUobmFtZSkgbmFtZSAjIyBfdAorI2RlZmluZSBTWU1CT0xfUE9JTlRFUihuYW1lKSBzdGF0aWMgU1lNQk9MX1RZUEUobmFtZSkgKm5hbWUjI19wID0gTlVMTDsKKworI2RlZmluZSBWQVJJQUJMRV9ERUNMQVJBVElPTih2YXJpYWJsZU5hbWUsIHZhcmlhYmxlVHlwZSkgXAorICB2YXJpYWJsZVR5cGUgdmFyaWFibGVOYW1lCisjZGVmaW5lIFZBUklBQkxFX1RZUEVERUYodmFyaWFibGVOYW1lLCB2YXJpYWJsZVR5cGUpIFwKKyAgdHlwZWRlZiBWQVJJQUJMRV9ERUNMQVJBVElPTihTWU1CT0xfVFlQRSh2YXJpYWJsZU5hbWUpLCB2YXJpYWJsZVR5cGUpCisjZGVmaW5lIFZBUklBQkxFX0RFQ0xBUkUodmFyaWFibGVOYW1lLCB2YXJpYWJsZVR5cGUpIFwKKyAgVkFSSUFCTEVfVFlQRURFRih2YXJpYWJsZU5hbWUsIHZhcmlhYmxlVHlwZSk7IFwKKyAgZXh0ZXJuIFNZTUJPTF9UWVBFKHZhcmlhYmxlTmFtZSkgdmFyaWFibGVOYW1lCisKKyNkZWZpbmUgRlVOQ1RJT05fREVDTEFSQVRJT04oZnVuY3Rpb25OYW1lLCByZXR1cm5UeXBlLCBhcmd1bWVudExpc3QpIFwKKyAgcmV0dXJuVHlwZSBmdW5jdGlvbk5hbWUgYXJndW1lbnRMaXN0CisjZGVmaW5lIEZVTkNUSU9OX1RZUEVERUYoZnVuY3Rpb25OYW1lLCByZXR1cm5UeXBlLCBhcmd1bWVudExpc3QpIFwKKyAgdHlwZWRlZiBGVU5DVElPTl9ERUNMQVJBVElPTihTWU1CT0xfVFlQRShmdW5jdGlvbk5hbWUpLCByZXR1cm5UeXBlLCBhcmd1bWVudExpc3QpCisjZGVmaW5lIEZVTkNUSU9OX0RFQ0xBUkUoZnVuY3Rpb25OYW1lLCByZXR1cm5UeXBlLCBhcmd1bWVudExpc3QpIFwKKyAgRlVOQ1RJT05fVFlQRURFRihmdW5jdGlvbk5hbWUsIHJldHVyblR5cGUsIGFyZ3VtZW50TGlzdCk7IFwKKyAgZXh0ZXJuIFNZTUJPTF9UWVBFKGZ1bmN0aW9uTmFtZSkgZnVuY3Rpb25OYW1lCisKKyNpZmRlZiBIQVZFX0NPTkZJR19ICisjaWZkZWYgRk9SX0JVSUxECisjaW5jbHVkZSAiZm9yYnVpbGQuaCIKKyNlbHNlIC8qIEZPUl9CVUlMRCAqLworI2luY2x1ZGUgImNvbmZpZy5oIgorI2VuZGlmIC8qIEZPUl9CVUlMRCAqLworI2VuZGlmIC8qIEhBVkVfQ09ORklHX0ggKi8KKworI2lmZGVmIF9fQU5EUk9JRF9fCisjaWZuZGVmIF9fQU5EUk9JRF9BUElfXworI2RlZmluZSBfX0FORFJPSURfQVBJX18gMTkKKyNlbmRpZiAvKiBfX0FORFJPSURfQVBJX18gKi8KKyNlbmRpZiAvKiBfX0FORFJPSURfXyAqLworCisjaWYgZGVmaW5lZChfX0NZR1dJTl9fKSB8fCBkZWZpbmVkKF9fTUlOR1czMl9fKQorI2RlZmluZSBXSU5ET1dTCisKKyNpZm5kZWYgSEFWRV9TREtEREtWRVJfSAorI2luY2x1ZGUgPHczMmFwaS5oPgorCisjaWZuZGVmIF9XSU4zMl9XSU5OVF9OVDQKKyNkZWZpbmUgX1dJTjMyX1dJTk5UX05UNCBXaW5kb3dzTlQ0CisjZW5kaWYgLyogX1dJTjMyX1dJTk5UX05UNCAqLworCisjaWZuZGVmIF9XSU4zMl9XSU5OVF9XSU45NQorI2RlZmluZSBfV0lOMzJfV0lOTlRfV0lOOTUgV2luZG93czk1CisjZW5kaWYgLyogX1dJTjMyX1dJTk5UX1dJTjk1ICovCisKKyNpZm5kZWYgX1dJTjMyX1dJTk5UX1dJTjk4CisjZGVmaW5lIF9XSU4zMl9XSU5OVF9XSU45OCBXaW5kb3dzOTgKKyNlbmRpZiAvKiBfV0lOMzJfV0lOTlRfV0lOOTggKi8KKworI2lmbmRlZiBfV0lOMzJfV0lOTlRfV0lOTUUKKyNkZWZpbmUgX1dJTjMyX1dJTk5UX1dJTk1FIFdpbmRvd3NNRQorI2VuZGlmIC8qIF9XSU4zMl9XSU5OVF9XSU5NRSAqLworCisjaWZuZGVmIF9XSU4zMl9XSU5OVF9XSU4ySworI2RlZmluZSBfV0lOMzJfV0lOTlRfV0lOMksgV2luZG93czIwMDAKKyNlbmRpZiAvKiBfV0lOMzJfV0lOTlRfV0lOMksgKi8KKworI2lmbmRlZiBfV0lOMzJfV0lOTlRfV0lOWFAKKyNkZWZpbmUgX1dJTjMyX1dJTk5UX1dJTlhQIFdpbmRvd3NYUAorI2VuZGlmIC8qIF9XSU4zMl9XSU5OVF9XSU5YUCAqLworCisjaWZuZGVmIF9XSU4zMl9XSU5OVF9XUzAzCisjZGVmaW5lIF9XSU4zMl9XSU5OVF9XUzAzIFdpbmRvd3MyMDAzCisjZW5kaWYgLyogX1dJTjMyX1dJTk5UX1dTMDMgKi8KKworI2lmbmRlZiBfV0lOMzJfV0lOTlRfVklTVEEKKyNkZWZpbmUgX1dJTjMyX1dJTk5UX1ZJU1RBIFdpbmRvd3NWaXN0YQorI2VuZGlmIC8qIF9XSU4zMl9XSU5OVF9WSVNUQSAqLworI2VuZGlmIC8qIEhBVkVfU0RLRERLVkVSX0ggKi8KKworI2lmbmRlZiBfV0lOMzJfV0lOTlQKKyNkZWZpbmUgX1dJTjMyX1dJTk5UIF9XSU4zMl9XSU5OVF9XSU5YUAorI2VuZGlmIC8qIF9XSU4zMl9XSU5OVCAqLworCisjaWZuZGVmIFdJTlZFUgorI2RlZmluZSBXSU5WRVIgX1dJTjMyX1dJTk5UCisjZW5kaWYgLyogV0lOVkVSICovCisKKyNpZmRlZiBfX01JTkdXMzJfXworI2lmbmRlZiBfX1VTRV9XMzJfU09DS0VUUworI2RlZmluZSBfX1VTRV9XMzJfU09DS0VUUworI2VuZGlmIC8qIF9fVVNFX1czMl9TT0NLRVRTICovCisKKyNpbmNsdWRlIDx3czJ0Y3BpcC5oPgorI2VuZGlmIC8qIF9fTUlOR1czMl9fICovCisKKyNpbmNsdWRlIDx3aW5kb3dzLmg+CisjZW5kaWYgLyogV0lORE9XUyAqLworCisjaWZkZWYgX19NSU5HVzMyX18KKyNpbmNsdWRlIDxfbWluZ3cuaD4KKyNlbmRpZiAvKiBfX01JTkdXMzJfXyAqLworCisvKgorICogVGhlIChwb29ybHkgbmFtZWQpIG1hY3JvICJpbnRlcmZhY2UiIGlzIHVuZm9ydHVuYXRlbHkgZGVmaW5lZCB3aXRoaW4KKyAqIFdpbmRvd3MgaGVhZGVycy4gRm9ydHVuYXRlbHksIHRob3VnaCwgaXQncyBhbHNvIG9ubHkgZXZlciB1c2VkIHdpdGhpbgorICogdGhlbSBzbyBpdCdzIHNhZmUgdG8gdW5kZWZpbmUgaXQgaGVyZS4KKyAqLworI2lmZGVmIGludGVyZmFjZQorI3VuZGVmIGludGVyZmFjZQorI2VuZGlmIC8qIGludGVyZmFjZSAqLworCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3RkZGVmLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8aW50dHlwZXMuaD4KKworI2lmZGVmIF9fTUlOR1czMl9fCisjaWYgKF9fTUlOR1czMl9NQUpPUl9WRVJTSU9OIDwgMykgfHwgKChfX01JTkdXMzJfTUFKT1JfVkVSU0lPTiA9PSAzKSAmJiAoX19NSU5HVzMyX01JTk9SX1ZFUlNJT04gPCAxMCkpCitleHRlcm4gaW50IGdldHRpbWVvZmRheSAoc3RydWN0IHRpbWV2YWwgKnR2cCwgdm9pZCAqdHpwKTsKKyNlbmRpZiAvKiBnZXR0aW1lb2ZkYXkgKi8KKworI2lmICFkZWZpbmVkKF9fTUlOR1c2NF9WRVJTSU9OX01BSk9SKSAmJiAoKF9fTUlOR1czMl9NQUpPUl9WRVJTSU9OIDwgMykgfHwgKChfX01JTkdXMzJfTUFKT1JfVkVSU0lPTiA9PSAzKSAmJiAoX19NSU5HVzMyX01JTk9SX1ZFUlNJT04gPCAxNSkpKQorZXh0ZXJuIHZvaWQgdXNsZWVwIChpbnQgdXNlYyk7CisjZW5kaWYgLyogdXNsZWVwICovCisjZW5kaWYgLyogX19NSU5HVzMyX18gKi8KKworI2lmZGVmIEdSVUJfUlVOVElNRQorI3VuZGVmIE5FU1RFRF9GVU5DX0FUVFIKKyNkZWZpbmUgTkVTVEVEX0ZVTkNfQVRUUiBfX2F0dHJpYnV0ZV9fKChfX3JlZ3Bhcm1fXygxKSkpCisKKy8qIG1pc3NpbmcgbmVlZGVkIHN0YW5kYXJkIGludGVnZXIgZGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgSU5UMTZfTUFYIDBYN0ZGRgorI2RlZmluZSBJTlQzMl9NQVggMFg3RkZGRkZGRgorI2RlZmluZSBVSU5UMzJfQyhpKSAoaSkKKyNkZWZpbmUgUFJJdUdSVUJfVUlOVDE2X1QgInUiCisjZGVmaW5lIFBSSXVHUlVCX1VJTlQ4X1QgInUiCisKKy8qIHRvIGdldCBnZXR0ZXh0KCkgZGVjbGFyZWQgKi8KKyNkZWZpbmUgR1JVQl9QT1NJWF9HRVRURVhUX0RPTUFJTiAiYnJsdHR5IgorCisvKiBkaXNhYmxlIHRoZSB1c2Ugb2YgZmxvYXRpbmctcG9pbnQgb3BlcmF0aW9ucyAqLworI2RlZmluZSBOT19GTE9BVAorI2RlZmluZSBmbG9hdCBOT19GTE9BVAorI2RlZmluZSBkb3VibGUgTk9fRE9VQkxFCisjZW5kaWYgLyogR1JVQl9SVU5IVElNRSAqLworCisjaWZkZWYgX19NU0RPU19fCisjaW5jbHVkZSA8c3RkYXJnLmg+CisKK2V4dGVybiBpbnQgc25wcmludGYgKGNoYXIgKnN0ciwgc2l6ZV90IHNpemUsIGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKTsKK2V4dGVybiBpbnQgdnNucHJpbnRmIChjaGFyICpzdHIsIHNpemVfdCBzaXplLCBjb25zdCBjaGFyICpmb3JtYXQsIHZhX2xpc3QgYXApOworCisjZGVmaW5lIGxzdGF0KGZpbGVfbmFtZSwgYnVmKSBzdGF0KGZpbGVfbmFtZSwgYnVmKQorI2VuZGlmIC8qIF9fTVNET1NfXyAqLworCisjaWZkZWYgX19NSU5HVzMyX18KK3R5cGVkZWYgSEFORExFIEZpbGVEZXNjcmlwdG9yOworI2RlZmluZSBJTlZBTElEX0ZJTEVfREVTQ1JJUFRPUiBJTlZBTElEX0hBTkRMRV9WQUxVRQorI2RlZmluZSBQUklmZCAicCIKKyNkZWZpbmUgY2xvc2VGaWxlRGVzY3JpcHRvcihmZCkgQ2xvc2VIYW5kbGUoZmQpCisKK3R5cGVkZWYgU09DS0VUIFNvY2tldERlc2NyaXB0b3I7CisjZGVmaW5lIElOVkFMSURfU09DS0VUX0RFU0NSSVBUT1IgSU5WQUxJRF9TT0NLRVQKKyNkZWZpbmUgUFJJc2QgImQiCisjZGVmaW5lIGNsb3NlU29ja2V0RGVzY3JpcHRvcihzZCkgY2xvc2Vzb2NrZXQoc2QpCisjZWxzZSAvKiBfX01JTkdXMzJfXyAqLwordHlwZWRlZiBpbnQgRmlsZURlc2NyaXB0b3I7CisjZGVmaW5lIElOVkFMSURfRklMRV9ERVNDUklQVE9SIC0xCisjZGVmaW5lIFBSSWZkICJkIgorI2RlZmluZSBjbG9zZUZpbGVEZXNjcmlwdG9yKGZkKSBjbG9zZShmZCkKKwordHlwZWRlZiBpbnQgU29ja2V0RGVzY3JpcHRvcjsKKyNkZWZpbmUgSU5WQUxJRF9TT0NLRVRfREVTQ1JJUFRPUiAtMQorI2RlZmluZSBQUklzZCAiZCIKKyNkZWZpbmUgY2xvc2VTb2NrZXREZXNjcmlwdG9yKHNkKSBjbG9zZShzZCkKKyNlbmRpZiAvKiBfX01JTkdXMzJfXyAqLworCisjaWZkZWYgV0lORE9XUworI2RlZmluZSBnZXRTeXN0ZW1FcnJvcigpIEdldExhc3RFcnJvcigpCisKKyNpZmRlZiBfX0NZR1dJTl9fCisjaW5jbHVkZSA8c3lzL2N5Z3dpbi5oPgorCisjZGVmaW5lIGdldFNvY2tldEVycm9yKCkgZXJybm8KKyNkZWZpbmUgc2V0RXJybm8oZXJyb3IpIGVycm5vID0gY3lnd2luX2ludGVybmFsKENXX0dFVF9FUlJOT19GUk9NX1dJTkVSUk9SLCAoZXJyb3IpKQorI2Vsc2UgLyogX19DWUdXSU5fXyAqLworI2RlZmluZSBnZXRTb2NrZXRFcnJvcigpIFdTQUdldExhc3RFcnJvcigpCisjZGVmaW5lIHNldEVycm5vKGVycm9yKSBlcnJubyA9IHdpbl90b0Vycm5vKChlcnJvcikpCisKKyNpZm5kZWYgV0lOX0VSUk5PX1NUT1JBR0VfQ0xBU1MKKyNkZWZpbmUgV0lOX0VSUk5PX1NUT1JBR0VfQ0xBU1MKK2V4dGVybgorI2VuZGlmIC8qIFdJTl9FUlJOT19TVE9SQUdFX0NMQVNTICovCitXSU5fRVJSTk9fU1RPUkFHRV9DTEFTUyBpbnQgd2luX3RvRXJybm8gKERXT1JEIGVycm9yKTsKKyNlbmRpZiAvKiBfX0NZR1dJTl9fICovCisKKyNlbHNlIC8qIFdJTkRPV1MgKi8KKyNkZWZpbmUgZ2V0U3lzdGVtRXJyb3IoKSBlcnJubworI2RlZmluZSBnZXRTb2NrZXRFcnJvcigpIGVycm5vCisKKyNkZWZpbmUgc2V0RXJybm8oZXJyb3IpCisjZW5kaWYgLyogV0lORE9XUyAqLworCisjZGVmaW5lIHNldFN5c3RlbUVycm5vKCkgc2V0RXJybm8oZ2V0U3lzdGVtRXJyb3IoKSkKKyNkZWZpbmUgc2V0U29ja2V0RXJybm8oKSBzZXRFcnJubyhnZXRTb2NrZXRFcnJvcigpKQorCisjaWYgZGVmaW5lZChfX01JTkdXMzJfXykKKyNkZWZpbmUgUFJJc2l6ZSAidSIKKyNkZWZpbmUgUFJJc3NpemUgImQiCisKKyNlbHNlIC8qIGZvcm1hdCBmb3Igc2l6ZV90IGFuZCBzc2l6ZV90ICovCisjZGVmaW5lIFBSSXNpemUgInp1IgorI2RlZmluZSBQUklzc2l6ZSAiemQiCisjZW5kaWYgLyogZm9ybWF0IGZvciBzaXplX3QgYW5kIHNzaXplX3QgKi8KKworI2lmIGRlZmluZWQoX19DWUdXSU5fXykKKyNkZWZpbmUgUFJJa2V5ICJsbFgiCisjZWxpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKQorI2RlZmluZSBQUklrZXkgImxYIgorI2VsaWYgZGVmaW5lZChfX09wZW5CU0RfXykKKyNkZWZpbmUgUFJJa2V5ICJsWCIKKyNlbHNlIC8qIGZvcm1hdCBmb3Iga2V5X3QgKi8KKyNkZWZpbmUgUFJJa2V5IFBSSVgzMgorI2VuZGlmIC8qIGZvcm1hdCBmb3Iga2V5X3QgKi8KKworI2lmIGRlZmluZWQoX19NU0RPU19fKQorI3VuZGVmIFdDSEFSX01BWAorCisjZWxpZiBkZWZpbmVkKEhBVkVfV0NIQVJfSCkKKyNpbmNsdWRlIDx3Y2hhci5oPgorI2luY2x1ZGUgPHdjdHlwZS5oPgorCisjZW5kaWYgLyogSEFWRV9XQ0hBUl9IICovCisKKyNpZmRlZiBXQ0hBUl9NQVgKKyNkZWZpbmUgV0NfQyh3YykgTCMjd2MKKyNkZWZpbmUgV1NfQyh3cykgTCMjd3MKKyNkZWZpbmUgUFJJd2MgImxjIgorI2RlZmluZSBQUkl3cyAibHMiCisjZGVmaW5lIGlzd0xhdGluMSh3YykgKCh3YykgPCAwWDEwMCkKKyNlbHNlIC8qIEhBVkVfV0NIQVJfSCAqLworI2luY2x1ZGUgPGN0eXBlLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKyNkZWZpbmUgd2NoYXJfdCB1bnNpZ25lZCBjaGFyCisjZGVmaW5lIHdpbnRfdCBpbnQKKworI2RlZmluZSBXRU9GIEVPRgorI2RlZmluZSBXQ0hBUl9NQVggVUlOVDhfTUFYCisKKyNkZWZpbmUgd21lbWNocihzb3VyY2UsY2hhcmFjdGVyLGNvdW50KSBtZW1jaHIoKGNvbnN0IGNoYXIgKikoc291cmNlKSwgKGNoYXIpKGNoYXJhY3RlciksIChjb3VudCkpCisjZGVmaW5lIHdtZW1jbXAoc291cmNlMSxzb3VyY2UyLGNvdW50KSBtZW1jbXAoKGNvbnN0IGNoYXIgKikoc291cmNlMSksIChjb25zdCBjaGFyICopKHNvdXJjZTIpLCAoY291bnQpKQorI2RlZmluZSB3bWVtY3B5KHRhcmdldCxzb3VyY2UsY291bnQpIG1lbWNweSgoY2hhciAqKSh0YXJnZXQpLCAoY29uc3QgY2hhciAqKShzb3VyY2UpLCAoY291bnQpKQorI2RlZmluZSB3bWVtbW92ZSh0YXJnZXQsc291cmNlLGNvdW50KSBtZW1tb3ZlKChjaGFyICopKHRhcmdldCksIChjb25zdCBjaGFyICopKHNvdXJjZSksIChjb3VudCkpCisjZGVmaW5lIHdtZW1zZXQodGFyZ2V0LGNoYXJhY3Rlcixjb3VudCkgbWVtc2V0KChjaGFyICopKHRhcmdldCksIChjaGFyKShjaGFyYWN0ZXIpLCAoY291bnQpKQorCisjZGVmaW5lIHdjc2Nhc2VjbXAoc291cmNlMSxzb3VyY2UyKSBzdHJjYXNlY21wKChjb25zdCBjaGFyICopKHNvdXJjZTEpLCAoY29uc3QgY2hhciAqKShzb3VyY2UyKSkKKyNkZWZpbmUgd2NzbmNhc2VjbXAoc291cmNlMSxzb3VyY2UyLGNvdW50KSBzdHJuY2FzZWNtcCgoY29uc3QgY2hhciAqKShzb3VyY2UxKSwgKGNvbnN0IGNoYXIgKikoc291cmNlMiksIChjb3VudCkpCisjZGVmaW5lIHdjc2NhdCh0YXJnZXQsc291cmNlKSBzdHJjYXQoKGNoYXIgKikodGFyZ2V0KSwgKGNvbnN0IGNoYXIgKikoc291cmNlKSkKKyNkZWZpbmUgd2NzbmNhdCh0YXJnZXQsc291cmNlLGNvdW50KSBzdHJuY2F0KChjaGFyICopKHRhcmdldCksIChjb25zdCBjaGFyICopKHNvdXJjZSksIChjb3VudCkpCisjZGVmaW5lIHdjc2NtcChzb3VyY2UxLHNvdXJjZTIpIHN0cmNtcCgoY29uc3QgY2hhciAqKShzb3VyY2UxKSwgKGNvbnN0IGNoYXIgKikoc291cmNlMikpCisjZGVmaW5lIHdjc25jbXAoc291cmNlMSxzb3VyY2UyLGNvdW50KSBzdHJuY21wKChjb25zdCBjaGFyICopKHNvdXJjZTEpLCAoY29uc3QgY2hhciAqKShzb3VyY2UyKSwgKGNvdW50KSkKKyNkZWZpbmUgd2NzY3B5KHRhcmdldCxzb3VyY2UpIHN0cmNweSgoY2hhciAqKSh0YXJnZXQpLCAoY29uc3QgY2hhciAqKShzb3VyY2UpKQorI2RlZmluZSB3Y3NuY3B5KHRhcmdldCxzb3VyY2UsY291bnQpIHN0cm5jcHkoKGNoYXIgKikodGFyZ2V0KSwgKGNvbnN0IGNoYXIgKikoc291cmNlKSwgKGNvdW50KSkKKyNkZWZpbmUgd2NzbGVuKHNvdXJjZSkgc3RybGVuKChjb25zdCBjaGFyICopKHNvdXJjZSkpCisjZGVmaW5lIHdjc25sZW4oc291cmNlLGNvdW50KSBzdHJubGVuKChjb25zdCBjaGFyICopKHNvdXJjZSksIChjb3VudCkpCisKKyNkZWZpbmUgd2NzY2hyKHNvdXJjZSxjaGFyYWN0ZXIpICgod2NoYXJfdCAqKXN0cmNocigoY29uc3QgY2hhciAqKShzb3VyY2UpLCAoY2hhcikoY2hhcmFjdGVyKSkpCisjZGVmaW5lIHdjc2NvbGwoc291cmNlMSxzb3VyY2UyKSBzdHJjb2xsKChjb25zdCBjaGFyICopKHNvdXJjZTEpLCAoY29uc3QgY2hhciAqKShzb3VyY2UyKSkKKyNkZWZpbmUgd2NzY3Nwbihzb3VyY2UscmVqZWN0KSBzdHJjc3BuKChjb25zdCBjaGFyICopKHNvdXJjZSksIChjb25zdCBjaGFyICopKHJlamVjdCkpCisjZGVmaW5lIHdjc2R1cChzb3VyY2UpIHN0cmR1cCgoY29uc3QgY2hhciAqKShzb3VyY2UpKQorI2RlZmluZSB3Y3NwYnJrKHNvdXJjZSxhY2NlcHQpIHN0cnBicmsoKGNvbnN0IGNoYXIgKikoc291cmNlKSwgKGNvbnN0IGNoYXIgKikoYWNjZXB0KSkKKyNkZWZpbmUgd2NzcmNocihzb3VyY2UsY2hhcmFjdGVyKSBzdHJyY2hyKChjb25zdCBjaGFyICopKHNvdXJjZSksIChjaGFyKShjaGFyYWN0ZXIpKQorI2RlZmluZSB3Y3NzcG4oc291cmNlLGFjY2VwdCkgc3Ryc3BuKChjb25zdCBjaGFyICopKHNvdXJjZSksIChjb25zdCBjaGFyICopKGFjY2VwdCkpCisjZGVmaW5lIHdjc3N0cihzb3VyY2Usc3Vic3RyaW5nKSBzdHJzdHIoKGNvbnN0IGNoYXIgKikoc291cmNlKSwgKGNvbnN0IGNoYXIgKikoc3Vic3RyaW5nKSkKKyNkZWZpbmUgd2NzdG9rKHRhcmdldCxkZWxpbWl0ZXJzLGVuZCkgKCh3Y2hhcl90ICopc3RydG9rKCgoY2hhciAqKSh0YXJnZXQpKSwgKChjb25zdCBjaGFyICopKGRlbGltaXRlcnMpKSkpCisjZGVmaW5lIHdjc3djcyhzb3VyY2Usc3Vic3RyaW5nKSBzdHJzdHIoKGNvbnN0IGNoYXIgKikoc291cmNlKSwgKGNvbnN0IGNoYXIgKikoc3Vic3RyaW5nKSkKKyNkZWZpbmUgd2NzeGZybSh0YXJnZXQsc291cmNlLGNvdW50KSBzdHJ4ZnJtKChjaGFyICopKHRhcmdldCksIChjb25zdCBjaGFyICopKHNvdXJjZSksIChjb3VudCkpCisjZGVmaW5lIHdjc3RvdWwobnB0ciwgZW5kcHRyLCBiYXNlKSBzdHJ0b3VsKCgoY29uc3QgY2hhciAqKShucHRyKSksICgoY2hhciAqKikoZW5kcHRyKSksIChiYXNlKSkKKworI2RlZmluZSB3Y3N0b2woc291cmNlLGVuZCxiYXNlKSBzdHJ0b2woKGNvbnN0IGNoYXIgKikoc291cmNlKSwgKGNoYXIgKiopKGVuZCksIChiYXNlKSkKKyNkZWZpbmUgd2NzdG9sbChzb3VyY2UsZW5kLGJhc2UpIHN0cnRvbGwoKGNvbnN0IGNoYXIgKikoc291cmNlKSwgKGNoYXIgKiopKGVuZCksIChiYXNlKSkKKworI2RlZmluZSBpc3dhbG51bShjaGFyYWN0ZXIpIGlzYWxudW0oKGludCkoY2hhcmFjdGVyKSkKKyNkZWZpbmUgaXN3YWxwaGEoY2hhcmFjdGVyKSBpc2FscGhhKChpbnQpKGNoYXJhY3RlcikpCisjZGVmaW5lIGlzd2JsYW5rKGNoYXJhY3RlcikgaXNibGFuaygoaW50KShjaGFyYWN0ZXIpKQorI2RlZmluZSBpc3djbnRybChjaGFyYWN0ZXIpIGlzY250cmwoKGludCkoY2hhcmFjdGVyKSkKKyNkZWZpbmUgaXN3ZGlnaXQoY2hhcmFjdGVyKSBpc2RpZ2l0KChpbnQpKGNoYXJhY3RlcikpCisjZGVmaW5lIGlzd2dyYXBoKGNoYXJhY3RlcikgaXNncmFwaCgoaW50KShjaGFyYWN0ZXIpKQorI2RlZmluZSBpc3dsb3dlcihjaGFyYWN0ZXIpIGlzbG93ZXIoKGludCkoY2hhcmFjdGVyKSkKKyNkZWZpbmUgaXN3cHJpbnQoY2hhcmFjdGVyKSBpc3ByaW50KChpbnQpKGNoYXJhY3RlcikpCisjZGVmaW5lIGlzd3B1bmN0KGNoYXJhY3RlcikgaXNwdW5jdCgoaW50KShjaGFyYWN0ZXIpKQorI2RlZmluZSBpc3dzcGFjZShjaGFyYWN0ZXIpIGlzc3BhY2UoKGludCkoY2hhcmFjdGVyKSkKKyNkZWZpbmUgaXN3dXBwZXIoY2hhcmFjdGVyKSBpc3VwcGVyKChpbnQpKGNoYXJhY3RlcikpCisjZGVmaW5lIGlzd3hkaWdpdChjaGFyYWN0ZXIpIGlzeGRpZ2l0KChpbnQpKGNoYXJhY3RlcikpCisKKyNkZWZpbmUgdG93bG93ZXIoY2hhcmFjdGVyKSB0b2xvd2VyKChpbnQpKGNoYXJhY3RlcikpCisjZGVmaW5lIHRvd3VwcGVyKGNoYXJhY3RlcikgdG91cHBlcigoaW50KShjaGFyYWN0ZXIpKQorCisjZGVmaW5lIHN3cHJpbnRmKHRhcmdldCxjb3VudCxzb3VyY2UsLi4uKSBzbnByaW50ZigoY2hhciAqKSh0YXJnZXQpLCAoY291bnQpLCAoY29uc3QgY2hhciAqKShzb3VyY2UpLCAjIyBfX1ZBX0FSR1NfXykKKyNkZWZpbmUgdnN3cHJpbnRmKHRhcmdldCxjb3VudCxzb3VyY2UsYXJncykgdnNucHJpbnRmKChjaGFyICopKHRhcmdldCksIChjb3VudCksIChjb25zdCBjaGFyICopKHNvdXJjZSksIChhcmdzKSkKKwordHlwZWRlZiB1bnNpZ25lZCBjaGFyIG1ic3RhdGVfdDsKKworc3RhdGljIGlubGluZSBzaXplX3QKK21icnRvd2MgKHdjaGFyX3QgKnB3YywgY29uc3QgY2hhciAqcywgc2l6ZV90IG4sIG1ic3RhdGVfdCAqcHMpIHsKKyAgaWYgKCFzKSByZXR1cm4gMDsKKyAgaWYgKCFuKSByZXR1cm4gMDsKKyAgaWYgKHB3YykgKnB3YyA9ICpzICYgMFhGRjsKKyAgaWYgKCEqcykgcmV0dXJuIDA7CisgIHJldHVybiAxOworfQorCitzdGF0aWMgaW5saW5lIHNpemVfdAord2NydG9tYiAoY2hhciAqcywgd2NoYXJfdCB3YywgbWJzdGF0ZV90ICpwcykgeworICBpZiAocykgKnMgPSB3YzsKKyAgcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50CittYnNpbml0IChjb25zdCBtYnN0YXRlX3QgKnBzKSB7CisgIHJldHVybiAxOworfQorCisjZGVmaW5lIFdDX0Mod2MpICgod2NoYXJfdCl3YykKKyNkZWZpbmUgV1NfQyh3cykgKChjb25zdCB3Y2hhcl90ICopd3MpCisjZGVmaW5lIFBSSXdjICJjIgorI2RlZmluZSBQUkl3cyAicyIKKyNkZWZpbmUgaXN3TGF0aW4xKHdjKSAoMSkKKyNlbmRpZiAvKiBIQVZFX1dDSEFSX0ggKi8KKworI2lmZGVmIFdPUkRTX0JJR0VORElBTgorI2RlZmluZSBDSEFSU0VUX0VORElBTl9TVUZGSVggIkJFIgorI2Vsc2UgLyogV09SRFNfQklHRU5ESUFOICovCisjZGVmaW5lIENIQVJTRVRfRU5ESUFOX1NVRkZJWCAiTEUiCisjZW5kaWYgLyogV09SRFNfQklHRU5ESUFOICovCisKKyNkZWZpbmUgV0NIQVJfQ0hBUlNFVCAoIlVDUy0iIFNJWkVPRl9XQ0hBUl9UX1NUUiBDSEFSU0VUX0VORElBTl9TVUZGSVgpCisKKyNpZm5kZWYgSEFWRV9NRU1QQ1BZCitzdGF0aWMgaW5saW5lIHZvaWQgKgorbWVtcGNweSAodm9pZCAqZGVzdCwgY29uc3Qgdm9pZCAqc3JjLCBzaXplX3Qgc2l6ZSkgeworICBleHRlcm4gdm9pZCAqbWVtY3B5ICh2b2lkICpkZXN0LCBjb25zdCB2b2lkICpzcmMsIHNpemVfdCBzaXplKTsKKyAgY2hhciAqYWRkcmVzcyA9IG1lbWNweShkZXN0LCBzcmMsIHNpemUpOworICByZXR1cm4gYWRkcmVzcyArIHNpemU7Cit9CisjZW5kaWYgLyogSEFWRV9NRU1QQ1BZICovCisKKyNpZm5kZWYgSEFWRV9XTUVNUENQWQorI2RlZmluZSB3bWVtcGNweShkZXN0LHNyYyxjb3VudCkgKHdtZW1jcHkoKGRlc3QpLCAoc3JjKSwgKGNvdW50KSkgKyAoY291bnQpKQorI2VuZGlmIC8qIEhBVkVfV01FTVBDUFkgKi8KKworI2lmbmRlZiBXUklUQUJMRV9ESVJFQ1RPUlkKKyNkZWZpbmUgV1JJVEFCTEVfRElSRUNUT1JZICIiCisjZW5kaWYgLyogV1JJVEFCTEVfRElSRUNUT1JZICovCisKKyNpZmRlZiBIQVZFX1ZBUl9BVFRSSUJVVEVfUEFDS0VECisjZGVmaW5lIFBBQ0tFRCBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKQorI2Vsc2UgLyogSEFWRV9WQVJfQVRUUklCVVRFX1BBQ0tFRCAqLworI2RlZmluZSBQQUNLRUQKKyNlbmRpZiAvKiBIQVZFX1ZBUl9BVFRSSUJVVEVfUEFDS0VEICovCisKKyNpZmRlZiBIQVZFX0ZVTkNfQVRUUklCVVRFX0ZPUk1BVAorI2RlZmluZSBQUklOVEYoZm10LHZhcikgX19hdHRyaWJ1dGVfXygoZm9ybWF0KF9fcHJpbnRmX18sIGZtdCwgdmFyKSkpCisjZWxzZSAvKiBIQVZFX0ZVTkNfQVRUUklCVVRFX0ZPUk1BVCAqLworI2RlZmluZSBQUklOVEYoZm10LHZhcikKKyNlbmRpZiAvKiBIQVZFX0ZVTkNfQVRUUklCVVRFX0ZPUk1BVCAqLworCisjaWZkZWYgSEFWRV9GVU5DX0FUVFJJQlVURV9GT1JNQVRfQVJHCisjZGVmaW5lIEZPUk1BVF9BUkcobikgX19hdHRyaWJ1dGVfXygoZm9ybWF0X2FyZygobikpKSkKKyNlbHNlIC8qIEhBVkVfRlVOQ19BVFRSSUJVVEVfRk9STUFUX0FSRyAqLworI2RlZmluZSBGT1JNQVRfQVJHKG4pCisjZW5kaWYgLyogSEFWRV9GVU5DX0FUVFJJQlVURV9GT1JNQVRfQVJHICovCisKKyNpZmRlZiBIQVZFX0ZVTkNfQVRUUklCVVRFX05PUkVUVVJOCisjZGVmaW5lIE5PUkVUVVJOIF9fYXR0cmlidXRlX18oKG5vcmV0dXJuKSkKKyNlbHNlIC8qIEhBVkVfRlVOQ19BVFRSSUJVVEVfTk9SRVRVUk4gKi8KKyNkZWZpbmUgTk9SRVRVUk4KKyNlbmRpZiAvKiBIQVZFX0ZVTkNfQVRUUklCVVRFX05PUkVUVVJOICovCisKKyNpZmRlZiBIQVZFX0ZVTkNfQVRUUklCVVRFX1VOVVNFRAorI2RlZmluZSBVTlVTRUQgX19hdHRyaWJ1dGVfXygodW51c2VkKSkKKyNlbHNlIC8qIEhBVkVfRlVOQ19BVFRSSUJVVEVfVU5VU0VEICovCisjZGVmaW5lIFVOVVNFRAorI2VuZGlmIC8qIEhBVkVfRlVOQ19BVFRSSUJVVEVfVU5VU0VEICovCisKKyNpZmRlZiBFTkFCTEVfSTE4Tl9TVVBQT1JUCisjaW5jbHVkZSA8bGliaW50bC5oPgorI2Vsc2UgLyogRU5BQkxFX0kxOE5fU1VQUE9SVCAqLworZXh0ZXJuIGNoYXIgKmdldHRleHQgKGNvbnN0IGNoYXIgKnRleHQpIEZPUk1BVF9BUkcoMSk7CisKK2V4dGVybiBjaGFyICpuZ2V0dGV4dCAoCisgIGNvbnN0IGNoYXIgKnNpbmd1bGFyLCBjb25zdCBjaGFyICpwbHVyYWwsIHVuc2lnbmVkIGxvbmcgaW50IGNvdW50CispIEZPUk1BVF9BUkcoMSkgRk9STUFUX0FSRygyKTsKKyNlbmRpZiAvKiBFTkFCTEVfSTE4Tl9TVVBQT1JUICovCisjZGVmaW5lIHN0cnRleHQoc3RyaW5nKSBzdHJpbmcKKworI2lmbmRlZiBVU0VfUEtHX0JFRVBfTk9ORQorI2RlZmluZSBIQVZFX0JFRVBfU1VQUE9SVAorI2VuZGlmIC8qIFVTRV9QS0dfQkVFUF9OT05FICovCisKKyNpZm5kZWYgVVNFX1BLR19QQ01fTk9ORQorI2RlZmluZSBIQVZFX1BDTV9TVVBQT1JUCisjZW5kaWYgLyogVVNFX1BLR19QQ01fTk9ORSAqLworCisjaWZuZGVmIFVTRV9QS0dfTUlESV9OT05FCisjZGVmaW5lIEhBVkVfTUlESV9TVVBQT1JUCisjZW5kaWYgLyogVVNFX1BLR19NSURJX05PTkUgKi8KKworI2lmbmRlZiBVU0VfUEtHX0ZNX05PTkUKKyNkZWZpbmUgSEFWRV9GTV9TVVBQT1JUCisjZW5kaWYgLyogVVNFX1BLR19GTV9OT05FICovCisKKy8qIGNvbmZpZ3VyZSBpcyBzdGlsbCBtYWtpbmcgYSBmZXcgbWlzdGFrZXMgd2l0aCByZXNwZWN0IHRvIHRoZSBncnViIGVudmlyb25tZW50ICovCisjaWZkZWYgR1JVQl9SVU5USU1FCisKKy8qIHNvbWUgaGVhZGVycyBleGlzdCBidXQgcHJvYmFibHkgc2hvdWxkbid0ICovCisjdW5kZWYgSEFWRV9TSUdOQUxfSAorCisvKiBpbmNsdWRpbmcgPHRpbWUuaD4gb24gaXRzIG93biB5aWVsZHMgY29tcGlsZSBlcnJvcnMgKi8KKyN1bmRlZiBIQVZFX0RFQ0xfTE9DQUxUSU1FX1IKKyNkZWZpbmUgSEFWRV9ERUNMX0xPQ0FMVElNRV9SIDEKKworLyogQUNfQ0hFQ0tfRlVOQygpIGlzIGNoZWNraW5nIGxvY2FsIGxpYnJhcmllcyAtIHRoZXNlIGFyZSB0aGUgZXJyb3JzIHRoYXQgbWF0dGVyICovCisjdW5kZWYgSEFWRV9GQ0hESVIKKyN1bmRlZiBIQVZFX1NFTEVDVAorI2VuZGlmIC8qIEdSVUJfUlVOVElNRSAqLworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZiAvKiBfX2NwbHVzcGx1cyAqLworCisjZW5kaWYgLyogQlJMVFRZX0lOQ0xVREVEX1BST0xPR1VFICovCmRpZmYgLS1naXQgYS9IZWFkZXJzL3B0eV9vYmplY3QuaCBiL0hlYWRlcnMvcHR5X29iamVjdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkzMGNiYzEKLS0tIC9kZXYvbnVsbAorKysgYi9IZWFkZXJzL3B0eV9vYmplY3QuaApAQCAtMCwwICsxLDQ4IEBACisvKgorICogQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyAqICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyAqCisgKiBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorICoKKyAqIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyAqCisgKiBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisgKi8KKworI2lmbmRlZiBCUkxUVFlfSU5DTFVERURfUFRZX09CSkVDVAorI2RlZmluZSBCUkxUVFlfSU5DTFVERURfUFRZX09CSkVDVAorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmIC8qIF9fY3BsdXNwbHVzICovCisKK3R5cGVkZWYgc3RydWN0IFB0eU9iamVjdFN0cnVjdCBQdHlPYmplY3Q7CisKK2V4dGVybiBQdHlPYmplY3QgKnB0eU5ld09iamVjdCh2b2lkKTsKK2V4dGVybiB2b2lkIHB0eURlc3Ryb3lPYmplY3QoUHR5T2JqZWN0ICpwdHkpOworCitleHRlcm4gY29uc3QgY2hhciAqcHR5R2V0UGF0aChjb25zdCBQdHlPYmplY3QgKnB0eSk7CitleHRlcm4gaW50IHB0eUdldE1hc3Rlcihjb25zdCBQdHlPYmplY3QgKnB0eSk7CisKK2V4dGVybiB2b2lkIHB0eVNldExvZ0xldmVsKFB0eU9iamVjdCAqcHR5LCB1bnNpZ25lZCBjaGFyIGxldmVsKTsKK2V4dGVybiB2b2lkIHB0eVNldExvZ0lucHV0KFB0eU9iamVjdCAqcHR5LCBpbnQgeWVzKTsKKworZXh0ZXJuIGludCBwdHlXcml0ZUlucHV0RGF0YShQdHlPYmplY3QgKnB0eSwgY29uc3Qgdm9pZCAqZGF0YSwgc2l6ZV90IGxlbmd0aCk7CitleHRlcm4gaW50IHB0eVdyaXRlSW5wdXRDaGFyYWN0ZXIoUHR5T2JqZWN0ICpwdHksIHdjaGFyX3QgY2hhcmFjdGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBreE1vZGUpOworCitleHRlcm4gdm9pZCBwdHlDbG9zZU1hc3RlcihQdHlPYmplY3QgKnB0eSk7CitleHRlcm4gaW50IHB0eU9wZW5TbGF2ZShjb25zdCBQdHlPYmplY3QgKnB0eSwgaW50ICpmaWxlRGVzY3JpcHRvcik7CisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmIC8qIF9fY3BsdXNwbHVzICovCisKKyNlbmRpZiAvKiBCUkxUVFlfSU5DTFVERURfUFRZX09CSkVDVCAqLwpkaWZmIC0tZ2l0IGEvSGVhZGVycy9wdHlfc2NyZWVuLmggYi9IZWFkZXJzL3B0eV9zY3JlZW4uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZjg5NWFhCi0tLSAvZGV2L251bGwKKysrIGIvSGVhZGVycy9wdHlfc2NyZWVuLmgKQEAgLTAsMCArMSw4MCBAQAorLyoKKyAqIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisgKiAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisgKgorICogQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKKyNpZm5kZWYgQlJMVFRZX0lOQ0xVREVEX1BUWV9TQ1JFRU4KKyNkZWZpbmUgQlJMVFRZX0lOQ0xVREVEX1BUWV9TQ1JFRU4KKworI2luY2x1ZGUgImdldF9jdXJzZXMuaCIKKyNpbmNsdWRlICJwdHlfb2JqZWN0LmgiCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYgLyogX19jcGx1c3BsdXMgKi8KKworZXh0ZXJuIGludCBwdHlCZWdpblNjcmVlbihQdHlPYmplY3QgKnB0eSwgaW50IGRyaXZlckRpcmVjdGl2ZXMpOworZXh0ZXJuIHZvaWQgcHR5RW5kU2NyZWVuKHZvaWQpOworZXh0ZXJuIHZvaWQgcHR5UmVmcmVzaFNjcmVlbih2b2lkKTsKKworZXh0ZXJuIHZvaWQgcHR5U2V0Q3Vyc29yUG9zaXRpb24odW5zaWduZWQgaW50IHJvdywgdW5zaWduZWQgaW50IGNvbHVtbik7CitleHRlcm4gdm9pZCBwdHlTZXRDdXJzb3JSb3codW5zaWduZWQgaW50IHJvdyk7CitleHRlcm4gdm9pZCBwdHlTZXRDdXJzb3JDb2x1bW4odW5zaWduZWQgaW50IGNvbHVtbik7CisKK2V4dGVybiB2b2lkIHB0eVNhdmVDdXJzb3JQb3NpdGlvbih2b2lkKTsKK2V4dGVybiB2b2lkIHB0eVJlc3RvcmVDdXJzb3JQb3NpdGlvbih2b2lkKTsKKworZXh0ZXJuIHZvaWQgcHR5U2V0U2Nyb2xsUmVnaW9uKHVuc2lnbmVkIGludCB0b3AsIHVuc2lnbmVkIGludCBib3R0b20pOworZXh0ZXJuIGludCBwdHlBbVdpdGhpblNjcm9sbFJlZ2lvbih2b2lkKTsKK2V4dGVybiB2b2lkIHB0eVNjcm9sbERvd24odW5zaWduZWQgaW50IGNvdW50KTsKK2V4dGVybiB2b2lkIHB0eVNjcm9sbFVwKHVuc2lnbmVkIGludCBjb3VudCk7CisKK2V4dGVybiB2b2lkIHB0eU1vdmVDdXJzb3JVcCh1bnNpZ25lZCBpbnQgYW1vdW50KTsKK2V4dGVybiB2b2lkIHB0eU1vdmVDdXJzb3JEb3duKHVuc2lnbmVkIGludCBhbW91bnQpOworZXh0ZXJuIHZvaWQgcHR5TW92ZUN1cnNvckxlZnQodW5zaWduZWQgaW50IGFtb3VudCk7CitleHRlcm4gdm9pZCBwdHlNb3ZlQ3Vyc29yUmlnaHQodW5zaWduZWQgaW50IGFtb3VudCk7CisKK2V4dGVybiB2b2lkIHB0eU1vdmVVcDEodm9pZCk7CitleHRlcm4gdm9pZCBwdHlNb3ZlRG93bjEodm9pZCk7CisKK2V4dGVybiB2b2lkIHB0eVRhYkJhY2t3YXJkKHZvaWQpOworZXh0ZXJuIHZvaWQgcHR5VGFiRm9yd2FyZCh2b2lkKTsKKworZXh0ZXJuIHZvaWQgcHR5SW5zZXJ0TGluZXModW5zaWduZWQgaW50IGNvdW50KTsKK2V4dGVybiB2b2lkIHB0eURlbGV0ZUxpbmVzKHVuc2lnbmVkIGludCBjb3VudCk7CisKK2V4dGVybiB2b2lkIHB0eUluc2VydENoYXJhY3RlcnModW5zaWduZWQgaW50IGNvdW50KTsKK2V4dGVybiB2b2lkIHB0eURlbGV0ZUNoYXJhY3RlcnModW5zaWduZWQgaW50IGNvdW50KTsKK2V4dGVybiB2b2lkIHB0eUFkZENoYXJhY3Rlcih1bnNpZ25lZCBjaGFyIGNoYXJhY3Rlcik7CisKK2V4dGVybiB2b2lkIHB0eVNldEN1cnNvclZpc2liaWxpdHkodW5zaWduZWQgaW50IHZpc2liaWxpdHkpOworZXh0ZXJuIHZvaWQgcHR5U2V0QXR0cmlidXRlcyhhdHRyX3QgYXR0cmlidXRlcyk7CitleHRlcm4gdm9pZCBwdHlBZGRBdHRyaWJ1dGVzKGF0dHJfdCBhdHRyaWJ1dGVzKTsKK2V4dGVybiB2b2lkIHB0eVJlbW92ZUF0dHJpYnV0ZXMoYXR0cl90IGF0dHJpYnV0ZXMpOworZXh0ZXJuIHZvaWQgcHR5U2V0Rm9yZWdyb3VuZENvbG9yKGludCBjb2xvcik7CitleHRlcm4gdm9pZCBwdHlTZXRCYWNrZ3JvdW5kQ29sb3IoaW50IGNvbG9yKTsKKworZXh0ZXJuIHZvaWQgcHR5Q2xlYXJUb0VuZE9mTGluZSh2b2lkKTsKK2V4dGVybiB2b2lkIHB0eUNsZWFyVG9CZWdpbm5pbmdPZkxpbmUodm9pZCk7CitleHRlcm4gdm9pZCBwdHlDbGVhclRvRW5kT2ZEaXNwbGF5KHZvaWQpOworCitleHRlcm4gdm9pZCBwdHlTZXRTY3JlZW5Mb2dMZXZlbCh1bnNpZ25lZCBjaGFyIGxldmVsKTsKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYgLyogX19jcGx1c3BsdXMgKi8KKworI2VuZGlmIC8qIEJSTFRUWV9JTkNMVURFRF9QVFlfU0NSRUVOICovCmRpZmYgLS1naXQgYS9IZWFkZXJzL3B0eV90ZXJtaW5hbC5oIGIvSGVhZGVycy9wdHlfdGVybWluYWwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MGUyMDQyCi0tLSAvZGV2L251bGwKKysrIGIvSGVhZGVycy9wdHlfdGVybWluYWwuaApAQCAtMCwwICsxLDQ2IEBACisvKgorICogQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyAqICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyAqCisgKiBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorICoKKyAqIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyAqCisgKiBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisgKi8KKworI2lmbmRlZiBCUkxUVFlfSU5DTFVERURfUFRZX1RFUk1JTkFMCisjZGVmaW5lIEJSTFRUWV9JTkNMVURFRF9QVFlfVEVSTUlOQUwKKworI2luY2x1ZGUgInB0eV9vYmplY3QuaCIKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZiAvKiBfX2NwbHVzcGx1cyAqLworCitleHRlcm4gY29uc3QgY2hhciAqcHR5R2V0VGVybWluYWxUeXBlKHZvaWQpOworCitleHRlcm4gaW50IHB0eUJlZ2luVGVybWluYWwoUHR5T2JqZWN0ICpwdHksIGludCBkcml2ZXJEaXJlY3RpdmVzKTsKK2V4dGVybiB2b2lkIHB0eUVuZFRlcm1pbmFsKHZvaWQpOworCitleHRlcm4gaW50IHB0eVByb2Nlc3NUZXJtaW5hbElucHV0KFB0eU9iamVjdCAqcHR5KTsKK2V4dGVybiBpbnQgcHR5UHJvY2Vzc1Rlcm1pbmFsT3V0cHV0KGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ5dGVzLCBzaXplX3QgY291bnQpOworCitleHRlcm4gdm9pZCBwdHlTZXRUZXJtaW5hbExvZ0xldmVsKHVuc2lnbmVkIGNoYXIgbGV2ZWwpOworZXh0ZXJuIHZvaWQgcHR5U2V0TG9nVGVybWluYWxJbnB1dChpbnQgeWVzKTsKK2V4dGVybiB2b2lkIHB0eVNldExvZ1Rlcm1pbmFsT3V0cHV0KGludCB5ZXMpOworZXh0ZXJuIHZvaWQgcHR5U2V0TG9nVGVybWluYWxTZXF1ZW5jZXMoaW50IHllcyk7CitleHRlcm4gdm9pZCBwdHlTZXRMb2dVbmV4cGVjdGVkVGVybWluYWxJTyhpbnQgeWVzKTsKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYgLyogX19jcGx1c3BsdXMgKi8KKworI2VuZGlmIC8qIEJSTFRUWV9JTkNMVURFRF9QVFlfVEVSTUlOQUwgKi8KZGlmZiAtLWdpdCBhL0hlYWRlcnMvcXVldWUuaCBiL0hlYWRlcnMvcXVldWUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MTk0ODkwCi0tLSAvZGV2L251bGwKKysrIGIvSGVhZGVycy9xdWV1ZS5oCkBAIC0wLDAgKzEsNzUgQEAKKy8qCisgKiBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorICogICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorICoKKyAqIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorICoKKyAqIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyAqLworCisjaWZuZGVmIEJSTFRUWV9JTkNMVURFRF9RVUVVRQorI2RlZmluZSBCUkxUVFlfSU5DTFVERURfUVVFVUUKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZiAvKiBfX2NwbHVzcGx1cyAqLworCit0eXBlZGVmIHN0cnVjdCBRdWV1ZVN0cnVjdCBRdWV1ZTsKK3R5cGVkZWYgc3RydWN0IEVsZW1lbnRTdHJ1Y3QgRWxlbWVudDsKK3R5cGVkZWYgdm9pZCBJdGVtRGVhbGxvY2F0b3IgKHZvaWQgKml0ZW0sIHZvaWQgKmRhdGEpOwordHlwZWRlZiBpbnQgSXRlbUNvbXBhcmF0b3IgKGNvbnN0IHZvaWQgKm5ld0l0ZW0sIGNvbnN0IHZvaWQgKmV4aXN0aW5nSXRlbSwgdm9pZCAqcXVldWVEYXRhKTsKKworZXh0ZXJuIFF1ZXVlICpuZXdRdWV1ZSAoSXRlbURlYWxsb2NhdG9yICpkZWFsbG9jYXRlSXRlbSwgSXRlbUNvbXBhcmF0b3IgKmNvbXBhcmVJdGVtcyk7CitleHRlcm4gdm9pZCBkZWFsbG9jYXRlUXVldWUgKFF1ZXVlICpxdWV1ZSk7CisKK3R5cGVkZWYgUXVldWUgKlF1ZXVlQ3JlYXRvciAodm9pZCAqZGF0YSk7CitleHRlcm4gUXVldWUgKmdldFByb2dyYW1RdWV1ZSAoCisgIFF1ZXVlICoqcXVldWUsIGNvbnN0IGNoYXIgKm5hbWUsIGludCBjcmVhdGUsCisgIFF1ZXVlQ3JlYXRvciAqY3JlYXRlUXVldWUsIHZvaWQgKmRhdGEKKyk7CisKK2V4dGVybiBpbnQgZ2V0UXVldWVTaXplIChjb25zdCBRdWV1ZSAqcXVldWUpOworZXh0ZXJuIHZvaWQgKmdldFF1ZXVlRGF0YSAoY29uc3QgUXVldWUgKnF1ZXVlKTsKK2V4dGVybiB2b2lkICpzZXRRdWV1ZURhdGEgKFF1ZXVlICpxdWV1ZSwgdm9pZCAqZGF0YSk7CisKK2V4dGVybiBFbGVtZW50ICpnZXRRdWV1ZUhlYWQgKGNvbnN0IFF1ZXVlICpxdWV1ZSk7CitleHRlcm4gRWxlbWVudCAqZ2V0UXVldWVFbGVtZW50IChjb25zdCBRdWV1ZSAqcXVldWUsIHVuc2lnbmVkIGludCBpbmRleCk7CisKK2V4dGVybiBFbGVtZW50ICpnZXRTdGFja0hlYWQgKGNvbnN0IFF1ZXVlICpxdWV1ZSk7CitleHRlcm4gRWxlbWVudCAqZ2V0U3RhY2tFbGVtZW50IChjb25zdCBRdWV1ZSAqcXVldWUsIHVuc2lnbmVkIGludCBpbmRleCk7CisKK2V4dGVybiBFbGVtZW50ICplbnF1ZXVlSXRlbSAoUXVldWUgKnF1ZXVlLCB2b2lkICppdGVtKTsKK2V4dGVybiB2b2lkICpkZXF1ZXVlSXRlbSAoUXVldWUgKnF1ZXVlKTsKK2V4dGVybiBpbnQgZGVsZXRlSXRlbSAoUXVldWUgKnF1ZXVlLCB2b2lkICppdGVtKTsKKworZXh0ZXJuIFF1ZXVlICpnZXRFbGVtZW50UXVldWUgKGNvbnN0IEVsZW1lbnQgKmVsZW1lbnQpOworZXh0ZXJuIGludCBnZXRFbGVtZW50SWRlbnRpZmllciAoY29uc3QgRWxlbWVudCAqZWxlbWVudCk7CitleHRlcm4gdm9pZCAqZ2V0RWxlbWVudEl0ZW0gKGNvbnN0IEVsZW1lbnQgKmVsZW1lbnQpOworCitleHRlcm4gdm9pZCBkZWxldGVFbGVtZW50cyAoUXVldWUgKnF1ZXVlKTsKK2V4dGVybiB2b2lkIGRlbGV0ZUVsZW1lbnQgKEVsZW1lbnQgKmVsZW1lbnQpOworZXh0ZXJuIHZvaWQgcmVxdWV1ZUVsZW1lbnQgKEVsZW1lbnQgKmVsZW1lbnQpOworZXh0ZXJuIHZvaWQgbW92ZUVsZW1lbnQgKEVsZW1lbnQgKmVsZW1lbnQsIFF1ZXVlICpxdWV1ZSk7CisKK3R5cGVkZWYgaW50IEl0ZW1UZXN0ZXIgKGNvbnN0IHZvaWQgKml0ZW0sIHZvaWQgKmRhdGEpOworZXh0ZXJuIEVsZW1lbnQgKmZpbmRFbGVtZW50IChjb25zdCBRdWV1ZSAqcXVldWUsIEl0ZW1UZXN0ZXIgKnRlc3RJdGVtLCB2b2lkICpkYXRhKTsKK2V4dGVybiB2b2lkICpmaW5kSXRlbSAoY29uc3QgUXVldWUgKnF1ZXVlLCBJdGVtVGVzdGVyICp0ZXN0SXRlbSwgdm9pZCAqZGF0YSk7CitleHRlcm4gRWxlbWVudCAqZmluZEVsZW1lbnRXaXRoSXRlbSAoY29uc3QgUXVldWUgKnF1ZXVlLCB2b2lkICppdGVtKTsKKwordHlwZWRlZiBpbnQgSXRlbVByb2Nlc3NvciAodm9pZCAqaXRlbSwgdm9pZCAqZGF0YSk7CitleHRlcm4gRWxlbWVudCAqcHJvY2Vzc1F1ZXVlIChRdWV1ZSAqcXVldWUsIEl0ZW1Qcm9jZXNzb3IgKnByb2Nlc3NJdGVtLCB2b2lkICpkYXRhKTsKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYgLyogX19jcGx1c3BsdXMgKi8KKworI2VuZGlmIC8qIEJSTFRUWV9JTkNMVURFRF9RVUVVRSAqLwpkaWZmIC0tZ2l0IGEvSGVhZGVycy9yZXZpc2lvbi5oIGIvSGVhZGVycy9yZXZpc2lvbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgyNjkwNzcKLS0tIC9kZXYvbnVsbAorKysgYi9IZWFkZXJzL3JldmlzaW9uLmgKQEAgLTAsMCArMSwzMiBAQAorLyoKKyAqIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisgKiAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisgKgorICogQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKKyNpZm5kZWYgQlJMVFRZX0lOQ0xVREVEX1JFVklTSU9OCisjZGVmaW5lIEJSTFRUWV9JTkNMVURFRF9SRVZJU0lPTgorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmIC8qIF9fY3BsdXNwbHVzICovCisKK2V4dGVybiBjb25zdCBjaGFyICpnZXRSZXZpc2lvbklkZW50aWZpZXIgKHZvaWQpOworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZiAvKiBfX2NwbHVzcGx1cyAqLworCisjZW5kaWYgLyogQlJMVFRZX0lOQ0xVREVEX1JFVklTSU9OICovCmRpZmYgLS1naXQgYS9IZWFkZXJzL3JneC5oIGIvSGVhZGVycy9yZ3guaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YjljMGFmCi0tLSAvZGV2L251bGwKKysrIGIvSGVhZGVycy9yZ3guaApAQCAtMCwwICsxLDE2MiBAQAorLyoKKyAqIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisgKiAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisgKgorICogQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKKyNpZm5kZWYgQlJMVFRZX0lOQ0xVREVEX1JHWAorI2RlZmluZSBCUkxUVFlfSU5DTFVERURfUkdYCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYgLyogX19jcGx1c3BsdXMgKi8KKwordHlwZWRlZiBzdHJ1Y3QgUkdYX09iamVjdFN0cnVjdCBSR1hfT2JqZWN0OwordHlwZWRlZiBzdHJ1Y3QgUkdYX01hdGNoZXJTdHJ1Y3QgUkdYX01hdGNoZXI7CisKK2V4dGVybiBSR1hfT2JqZWN0ICpyZ3hOZXdPYmplY3QgKHZvaWQgKmRhdGEpOworZXh0ZXJuIHZvaWQgcmd4RGVzdHJveU9iamVjdCAoUkdYX09iamVjdCAqcmd4KTsKKwordHlwZWRlZiBzdHJ1Y3QgeworICBjb25zdCBSR1hfTWF0Y2hlciAqbWF0Y2hlcjsKKworICBzdHJ1Y3QgeworICAgIGNvbnN0IHdjaGFyX3QgKmNoYXJhY3RlcnM7CisgICAgc2l6ZV90IGxlbmd0aDsKKyAgfSBwYXR0ZXJuOworCisgIHN0cnVjdCB7CisgICAgdm9pZCAqaW50ZXJuYWw7CisgICAgY29uc3Qgd2NoYXJfdCAqY2hhcmFjdGVyczsKKyAgICBzaXplX3QgbGVuZ3RoOworICB9IHRleHQ7CisKKyAgc3RydWN0IHsKKyAgICBzaXplX3QgY291bnQ7CisgIH0gY2FwdHVyZTsKKworICBzdHJ1Y3QgeworICAgIHZvaWQgKm9iamVjdDsKKyAgICB2b2lkICpwYXR0ZXJuOworICAgIHZvaWQgKm1hdGNoOworICB9IGRhdGE7Cit9IFJHWF9NYXRjaDsKKworI2RlZmluZSBSR1hfTUFUQ0hfSEFORExFUihuYW1lKSBpbnQgbmFtZSAoY29uc3QgUkdYX01hdGNoICptYXRjaCkKK3R5cGVkZWYgUkdYX01BVENIX0hBTkRMRVIoUkdYX01hdGNoSGFuZGxlcik7CisKK2V4dGVybiBSR1hfTWF0Y2hlciAqcmd4QWRkUGF0dGVybkNoYXJhY3RlcnMgKAorICBSR1hfT2JqZWN0ICpyZ3gsCisgIGNvbnN0IHdjaGFyX3QgKmNoYXJhY3RlcnMsIHNpemVfdCBsZW5ndGgsCisgIFJHWF9NYXRjaEhhbmRsZXIgKmhhbmRsZXIsIHZvaWQgKmRhdGEKKyk7CisKK2V4dGVybiBSR1hfTWF0Y2hlciAqcmd4QWRkUGF0dGVyblN0cmluZyAoCisgIFJHWF9PYmplY3QgKnJneCwKKyAgY29uc3Qgd2NoYXJfdCAqc3RyaW5nLAorICBSR1hfTWF0Y2hIYW5kbGVyICpoYW5kbGVyLCB2b2lkICpkYXRhCispOworCitleHRlcm4gUkdYX01hdGNoZXIgKnJneEFkZFBhdHRlcm5VVEY4ICgKKyAgUkdYX09iamVjdCAqcmd4LAorICBjb25zdCBjaGFyICpzdHJpbmcsCisgIFJHWF9NYXRjaEhhbmRsZXIgKmhhbmRsZXIsIHZvaWQgKmRhdGEKKyk7CisKK2V4dGVybiBSR1hfTWF0Y2hlciAqcmd4TWF0Y2hUZXh0Q2hhcmFjdGVycyAoCisgIFJHWF9PYmplY3QgKnJneCwKKyAgY29uc3Qgd2NoYXJfdCAqY2hhcmFjdGVycywgc2l6ZV90IGxlbmd0aCwKKyAgUkdYX01hdGNoICoqcmVzdWx0LCB2b2lkICpkYXRhCispOworCitleHRlcm4gUkdYX01hdGNoZXIgKnJneE1hdGNoVGV4dFN0cmluZyAoCisgIFJHWF9PYmplY3QgKnJneCwKKyAgY29uc3Qgd2NoYXJfdCAqc3RyaW5nLAorICBSR1hfTWF0Y2ggKipyZXN1bHQsIHZvaWQgKmRhdGEKKyk7CisKK2V4dGVybiBSR1hfTWF0Y2hlciAqcmd4TWF0Y2hUZXh0VVRGOCAoCisgIFJHWF9PYmplY3QgKnJneCwKKyAgY29uc3QgY2hhciAqc3RyaW5nLAorICBSR1hfTWF0Y2ggKipyZXN1bHQsIHZvaWQgKmRhdGEKKyk7CisKK2V4dGVybiBpbnQgcmd4R2V0TmFtZU51bWJlckNoYXJhY3RlcnMgKAorICBjb25zdCBSR1hfTWF0Y2hlciAqbWF0Y2hlciwKKyAgY29uc3Qgd2NoYXJfdCAqY2hhcmFjdGVycywgc2l6ZV90IGxlbmd0aCwKKyAgc2l6ZV90ICpudW1iZXIKKyk7CisKK2V4dGVybiBpbnQgcmd4R2V0TmFtZU51bWJlclN0cmluZyAoCisgIGNvbnN0IFJHWF9NYXRjaGVyICptYXRjaGVyLAorICBjb25zdCB3Y2hhcl90ICpzdHJpbmcsCisgIHNpemVfdCAqbnVtYmVyCispOworCitleHRlcm4gaW50IHJneEdldE5hbWVOdW1iZXJVVEY4ICgKKyAgY29uc3QgUkdYX01hdGNoZXIgKm1hdGNoZXIsCisgIGNvbnN0IGNoYXIgKnN0cmluZywKKyAgc2l6ZV90ICpudW1iZXIKKyk7CisKK2V4dGVybiBzaXplX3Qgcmd4R2V0Q2FwdHVyZUNvdW50ICgKKyAgY29uc3QgUkdYX01hdGNoICptYXRjaAorKTsKKworZXh0ZXJuIGludCByZ3hHZXRDYXB0dXJlQm91bmRzICgKKyAgY29uc3QgUkdYX01hdGNoICptYXRjaCwKKyAgc2l6ZV90IG51bWJlciwgc2l6ZV90ICpmcm9tLCBzaXplX3QgKnRvCispOworCitleHRlcm4gaW50IHJneEdldENhcHR1cmVUZXh0ICgKKyAgY29uc3QgUkdYX01hdGNoICptYXRjaCwKKyAgc2l6ZV90IG51bWJlciwgY29uc3Qgd2NoYXJfdCAqKmNoYXJhY3RlcnMsIHNpemVfdCAqbGVuZ3RoCispOworCit0eXBlZGVmIGVudW0geworICBSR1hfT1BUSU9OX0NMRUFSLAorICBSR1hfT1BUSU9OX1NFVCwKKyAgUkdYX09QVElPTl9UT0dHTEUsCisgIFJHWF9PUFRJT05fVEVTVAorfSBSR1hfT3B0aW9uQWN0aW9uOworCit0eXBlZGVmIGVudW0geworICBSR1hfQ09NUElMRV9BTkNIT1JfU1RBUlQsCisKKyAgUkdYX0NPTVBJTEVfSUdOT1JFX0NBU0UsCisgIFJHWF9DT01QSUxFX1VOSUNPREVfUFJPUEVSVElFUywKK30gUkdYX0NvbXBpbGVPcHRpb247CisKK2V4dGVybiBpbnQgcmd4Q29tcGlsZU9wdGlvbiAoCisgIFJHWF9PYmplY3QgKnJneCwKKyAgUkdYX09wdGlvbkFjdGlvbiBhY3Rpb24sCisgIFJHWF9Db21waWxlT3B0aW9uIG9wdGlvbgorKTsKKwordHlwZWRlZiBlbnVtIHsKKyAgUkdYX01BVENIX0FOQ0hPUl9TVEFSVCwKK30gUkdYX01hdGNoT3B0aW9uOworCitleHRlcm4gaW50IHJneE1hdGNoT3B0aW9uICgKKyAgUkdYX01hdGNoZXIgKm1hdGNoZXIsCisgIFJHWF9PcHRpb25BY3Rpb24gYWN0aW9uLAorICBSR1hfTWF0Y2hPcHRpb24gb3B0aW9uCispOworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZiAvKiBfX2NwbHVzcGx1cyAqLworCisjZW5kaWYgLyogQlJMVFRZX0lOQ0xVREVEX1JHWCAqLwpkaWZmIC0tZ2l0IGEvSGVhZGVycy9zY3JfYmFzZS5oIGIvSGVhZGVycy9zY3JfYmFzZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhjYjI2ZGQKLS0tIC9kZXYvbnVsbAorKysgYi9IZWFkZXJzL3Njcl9iYXNlLmgKQEAgLTAsMCArMSw3NCBAQAorLyoKKyAqIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisgKiAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisgKgorICogQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKKyNpZm5kZWYgQlJMVFRZX0lOQ0xVREVEX1NDUl9CQVNFCisjZGVmaW5lIEJSTFRUWV9JTkNMVURFRF9TQ1JfQkFTRQorCisjaW5jbHVkZSAic2NyX3R5cGVzLmgiCisjaW5jbHVkZSAia3RiX3R5cGVzLmgiCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYgLyogX19jcGx1c3BsdXMgKi8KKworZXh0ZXJuIGludCBpc1NwZWNpYWxLZXkgKFNjcmVlbktleSBrZXkpOworZXh0ZXJuIHZvaWQgc2V0U2NyZWVuS2V5TW9kaWZpZXJzIChTY3JlZW5LZXkgKmtleSwgU2NyZWVuS2V5IHdoaWNoKTsKK2V4dGVybiB2b2lkIG1hcFNjcmVlbktleSAoU2NyZWVuS2V5ICprZXkpOworCit0eXBlZGVmIHN0cnVjdCB7CisgIGNvbnN0IGNoYXIgKiAoKmdldFRpdGxlKSAodm9pZCk7CisKKyAgdm9pZCAoKm9uRm9yZWdyb3VuZCkgKHZvaWQpOworICB2b2lkICgqb25CYWNrZ3JvdW5kKSAodm9pZCk7CisKKyAgaW50ICgqcG9sbCkgKHZvaWQpOworICBpbnQgKCpyZWZyZXNoKSAodm9pZCk7CisgIHZvaWQgKCpkZXNjcmliZSkgKFNjcmVlbkRlc2NyaXB0aW9uICopOworCisgIGludCAoKnJlYWRDaGFyYWN0ZXJzKSAoY29uc3QgU2NyZWVuQm94ICpib3gsIFNjcmVlbkNoYXJhY3RlciAqYnVmZmVyKTsKKyAgaW50ICgqaW5zZXJ0S2V5KSAoU2NyZWVuS2V5IGtleSk7CisgIGludCAoKnJvdXRlQ3Vyc29yKSAoaW50IGNvbHVtbiwgaW50IHJvdywgaW50IHNjcmVlbik7CisKKyAgaW50ICgqaGlnaGxpZ2h0UmVnaW9uKSAoaW50IGxlZnQsIGludCByaWdodCwgaW50IHRvcCwgaW50IGJvdHRvbSk7CisgIGludCAoKnVuaGlnaGxpZ2h0UmVnaW9uKSAodm9pZCk7CisgIGludCAoKmdldFBvaW50ZXIpIChpbnQgKmNvbHVtbiwgaW50ICpyb3cpOworCisgIGludCAoKmNsZWFyU2VsZWN0aW9uKSAodm9pZCk7CisgIGludCAoKnNldFNlbGVjdGlvbikgKGludCBzdGFydENvbHVtbiwgaW50IHN0YXJ0Um93LCBpbnQgZW5kQ29sdW1uLCBpbnQgZW5kUm93KTsKKworICBpbnQgKCpjdXJyZW50VmlydHVhbFRlcm1pbmFsKSAodm9pZCk7CisgIGludCAoKnNlbGVjdFZpcnR1YWxUZXJtaW5hbCkgKGludCB2dCk7CisgIGludCAoKnN3aXRjaFZpcnR1YWxUZXJtaW5hbCkgKGludCB2dCk7CisgIGludCAoKm5leHRWaXJ0dWFsVGVybWluYWwpICh2b2lkKTsKKyAgaW50ICgqcHJldmlvdXNWaXJ0dWFsVGVybWluYWwpICh2b2lkKTsKKworICBpbnQgKCpoYW5kbGVDb21tYW5kKSAoaW50IGNvbW1hbmQpOworICBLZXlUYWJsZUNvbW1hbmRDb250ZXh0ICgqZ2V0Q29tbWFuZENvbnRleHQpICh2b2lkKTsKK30gQmFzZVNjcmVlbjsKKworZXh0ZXJuIHZvaWQgaW5pdGlhbGl6ZUJhc2VTY3JlZW4gKEJhc2VTY3JlZW4gKik7CitleHRlcm4gdm9pZCBkZXNjcmliZUJhc2VTY3JlZW4gKEJhc2VTY3JlZW4gKiwgU2NyZWVuRGVzY3JpcHRpb24gKik7CisKK2V4dGVybiBpbnQgdmFsaWRhdGVTY3JlZW5Cb3ggKGNvbnN0IFNjcmVlbkJveCAqYm94LCBpbnQgY29sdW1ucywgaW50IHJvd3MpOworZXh0ZXJuIHZvaWQgc2V0U2NyZWVuTWVzc2FnZSAoY29uc3QgU2NyZWVuQm94ICpib3gsIFNjcmVlbkNoYXJhY3RlciAqYnVmZmVyLCBjb25zdCBjaGFyICptZXNzYWdlKTsKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYgLyogX19jcGx1c3BsdXMgKi8KKworI2VuZGlmIC8qIEJSTFRUWV9JTkNMVURFRF9TQ1JfQkFTRSAqLwpkaWZmIC0tZ2l0IGEvSGVhZGVycy9zY3JfZHJpdmVyLmggYi9IZWFkZXJzL3Njcl9kcml2ZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OGM5NmY5Ci0tLSAvZGV2L251bGwKKysrIGIvSGVhZGVycy9zY3JfZHJpdmVyLmgKQEAgLTAsMCArMSw2MyBAQAorLyoKKyAqIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisgKiAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisgKgorICogQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKKyNpZm5kZWYgQlJMVFRZX0lOQ0xVREVEX1NDUl9EUklWRVIKKyNkZWZpbmUgQlJMVFRZX0lOQ0xVREVEX1NDUl9EUklWRVIKKworI2luY2x1ZGUgInNjcl91dGlscy5oIgorI2luY2x1ZGUgInNjcl9yZWFsLmgiCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYgLyogX19jcGx1c3BsdXMgKi8KKworLyogUm91dGluZXMgcHJvdmlkZWQgYnkgdGhpcyBzY3JlZW4gZHJpdmVyLiAqLworc3RhdGljIHZvaWQgc2NyX2luaXRpYWxpemUgKE1haW5TY3JlZW4gKm1haW4pOworCisjaWZkZWYgU0NSUEFSTVMKKyAgc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IHNjcl9wYXJhbWV0ZXJzW10gPSB7U0NSUEFSTVMsIE5VTEx9OworI2VuZGlmIC8qIFNDUlBBUk1TICovCisKKyNpZm5kZWYgU0NSU1lNQk9MCisjICBkZWZpbmUgU0NSU1lNQk9MIENPTkNBVEVOQVRFKHNjcl9kcml2ZXJfLERSSVZFUl9DT0RFKQorI2VuZGlmIC8qIFNDUlNZTUJPTCAqLworCisjaWZuZGVmIFNDUkNPTlNUCisjICBkZWZpbmUgU0NSQ09OU1QgY29uc3QKKyNlbmRpZiAvKiBTQ1JDT05TVCAqLworCitleHRlcm4gU0NSQ09OU1QgU2NyZWVuRHJpdmVyIFNDUlNZTUJPTDsKK1NDUkNPTlNUIFNjcmVlbkRyaXZlciBTQ1JTWU1CT0wgPSB7CisgIERSSVZFUl9ERUZJTklUSU9OX0lOSVRJQUxJWkVSLAorCisjaWZkZWYgU0NSUEFSTVMKKyAgc2NyX3BhcmFtZXRlcnMsCisjZWxzZSAvKiBTQ1JQQVJNUyAqLworICBOVUxMLAorI2VuZGlmIC8qIFNDUlBBUk1TICovCisKKyAgc2NyX2luaXRpYWxpemUKK307CisKK0RSSVZFUl9WRVJTSU9OX0RFQ0xBUkFUSU9OKHNjcik7CisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmIC8qIF9fY3BsdXNwbHVzICovCisKKyNlbmRpZiAvKiBCUkxUVFlfSU5DTFVERURfU0NSX0RSSVZFUiAqLwpkaWZmIC0tZ2l0IGEvSGVhZGVycy9zY3JfZW11bGF0b3IuaCBiL0hlYWRlcnMvc2NyX2VtdWxhdG9yLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDkxMmFlYwotLS0gL2Rldi9udWxsCisrKyBiL0hlYWRlcnMvc2NyX2VtdWxhdG9yLmgKQEAgLTAsMCArMSw2NSBAQAorLyoKKyAqIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisgKiAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisgKgorICogQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKKyNpZm5kZWYgQlJMVFRZX0lOQ0xVREVEX1NDUl9FTVVMQVRPUgorI2RlZmluZSBCUkxUVFlfSU5DTFVERURfU0NSX0VNVUxBVE9SCisKKyNpbmNsdWRlICJzY3JfdGVybWluYWwuaCIKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZiAvKiBfX2NwbHVzcGx1cyAqLworCitleHRlcm4gdm9pZCBtb3ZlU2NyZWVuQ2hhcmFjdGVycyhTY3JlZW5TZWdtZW50Q2hhcmFjdGVyICp0bywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFNjcmVlblNlZ21lbnRDaGFyYWN0ZXIgKmZyb20sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgY291bnQpOworZXh0ZXJuIHZvaWQgc2V0U2NyZWVuQ2hhcmFjdGVycyhTY3JlZW5TZWdtZW50Q2hhcmFjdGVyICpmcm9tLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTY3JlZW5TZWdtZW50Q2hhcmFjdGVyICp0bywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU2NyZWVuU2VnbWVudENoYXJhY3RlciAqY2hhcmFjdGVyKTsKK2V4dGVybiB2b2lkIHByb3BhZ2F0ZVNjcmVlbkNoYXJhY3RlcihTY3JlZW5TZWdtZW50Q2hhcmFjdGVyICpmcm9tLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFNjcmVlblNlZ21lbnRDaGFyYWN0ZXIgKnRvKTsKKworI2RlZmluZSBTQ1JFRU5fU0VHTUVOVF9DT0xPUihyLCBnLCBiKSBcCisgIHsgLnJlZCA9IHIsIC5ncmVlbiA9IGcsIC5ibHVlID0gYiB9CisjZGVmaW5lIFNDUkVFTl9TRUdNRU5UX0NPTE9SX0xFVkVMIDBYQUEKKyNkZWZpbmUgU0NSRUVOX1NFR01FTlRfQ09MT1JfQkxBQ0sgU0NSRUVOX1NFR01FTlRfQ09MT1IoMCwgMCwgMCkKKyNkZWZpbmUgU0NSRUVOX1NFR01FTlRfQ09MT1JfV0hJVEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIFNDUkVFTl9TRUdNRU5UX0NPTE9SKFNDUkVFTl9TRUdNRU5UX0NPTE9SX0xFVkVMLCBTQ1JFRU5fU0VHTUVOVF9DT0xPUl9MRVZFTCwgXAorICAgICAgICAgICAgICAgICAgICAgICBTQ1JFRU5fU0VHTUVOVF9DT0xPUl9MRVZFTCkKKworZXh0ZXJuIHZvaWQgZmlsbFNjcmVlblJvd3MoU2NyZWVuU2VnbWVudEhlYWRlciAqc2VnbWVudCwgdW5zaWduZWQgaW50IHJvdywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBjb3VudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFNjcmVlblNlZ21lbnRDaGFyYWN0ZXIgKmNoYXJhY3Rlcik7CitleHRlcm4gdm9pZCBtb3ZlU2NyZWVuUm93cyhTY3JlZW5TZWdtZW50SGVhZGVyICpzZWdtZW50LCB1bnNpZ25lZCBpbnQgZnJvbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCB0bywgdW5zaWduZWQgaW50IGNvdW50KTsKK2V4dGVybiB2b2lkIHNjcm9sbFNjcmVlblJvd3MoU2NyZWVuU2VnbWVudEhlYWRlciAqc2VnbWVudCwgdW5zaWduZWQgaW50IHRvcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHNpemUsIHVuc2lnbmVkIGludCBjb3VudCwgaW50IGRvd24pOworCitleHRlcm4gU2NyZWVuU2VnbWVudEhlYWRlciAqY3JlYXRlU2NyZWVuU2VnbWVudChpbnQgKmlkZW50aWZpZXIsIGtleV90IGtleSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBjb2x1bW5zLCBpbnQgcm93cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBlbmFibGVSb3dBcnJheSk7CitleHRlcm4gaW50IGRlc3Ryb3lTY3JlZW5TZWdtZW50KGludCBpZGVudGlmaWVyKTsKKworZXh0ZXJuIGludCBjcmVhdGVNZXNzYWdlUXVldWUoaW50ICpxdWV1ZSwga2V5X3Qga2V5KTsKK2V4dGVybiBpbnQgZGVzdHJveU1lc3NhZ2VRdWV1ZShpbnQgcXVldWUpOworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZiAvKiBfX2NwbHVzcGx1cyAqLworCisjZW5kaWYgLyogQlJMVFRZX0lOQ0xVREVEX1NDUl9FTVVMQVRPUiAqLwpkaWZmIC0tZ2l0IGEvSGVhZGVycy9zY3JfZ3BtLmggYi9IZWFkZXJzL3Njcl9ncG0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNGUyM2VlCi0tLSAvZGV2L251bGwKKysrIGIvSGVhZGVycy9zY3JfZ3BtLmgKQEAgLTAsMCArMSwzNCBAQAorLyoKKyAqIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisgKiAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisgKgorICogQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKKyNpZm5kZWYgQlJMVFRZX0lOQ0xVREVEX1NDUl9HUE0KKyNkZWZpbmUgQlJMVFRZX0lOQ0xVREVEX1NDUl9HUE0KKworI2luY2x1ZGUgInNjcl9tYWluLmgiCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYgLyogX19jcGx1c3BsdXMgKi8KKworZXh0ZXJuIHZvaWQgZ3BtSW5jbHVkZVNjcmVlbkhhbmRsZXJzIChNYWluU2NyZWVuICopOworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZiAvKiBfX2NwbHVzcGx1cyAqLworCisjZW5kaWYgLyogQlJMVFRZX0lOQ0xVREVEX1NDUl9HUE0gKi8KZGlmZiAtLWdpdCBhL0hlYWRlcnMvc2NyX21haW4uaCBiL0hlYWRlcnMvc2NyX21haW4uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZjNhMDZmCi0tLSAvZGV2L251bGwKKysrIGIvSGVhZGVycy9zY3JfbWFpbi5oCkBAIC0wLDAgKzEsNTYgQEAKKy8qCisgKiBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorICogICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorICoKKyAqIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorICoKKyAqIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyAqLworCisjaWZuZGVmIEJSTFRUWV9JTkNMVURFRF9TQ1JfTUFJTgorI2RlZmluZSBCUkxUVFlfSU5DTFVERURfU0NSX01BSU4KKworI2luY2x1ZGUgInNjcl9iYXNlLmgiCisjaW5jbHVkZSAiZHJpdmVyLmgiCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYgLyogX19jcGx1c3BsdXMgKi8KKwordHlwZWRlZiBzdHJ1Y3QgeworICBCYXNlU2NyZWVuIGJhc2U7CisKKyAgaW50ICgqcHJvY2Vzc1BhcmFtZXRlcnMpIChjaGFyICoqcGFyYW1ldGVycyk7CisgIHZvaWQgKCpyZWxlYXNlUGFyYW1ldGVycykgKHZvaWQpOworCisgIGludCAoKmNvbnN0cnVjdCkgKHZvaWQpOworICB2b2lkICgqZGVzdHJ1Y3QpICh2b2lkKTsKKworICBpbnQgKCp1c2VyVmlydHVhbFRlcm1pbmFsKSAoaW50IG51bWJlcik7Cit9IE1haW5TY3JlZW47CisKK2V4dGVybiB2b2lkIGluaXRpYWxpemVNYWluU2NyZWVuIChNYWluU2NyZWVuICopOworCitzdHJ1Y3QgU2NyZWVuRHJpdmVyU3RydWN0IHsKKyAgRFJJVkVSX0RFRklOSVRJT05fREVDTEFSQVRJT047CisgIGNvbnN0IGNoYXIgKmNvbnN0ICpwYXJhbWV0ZXJzOworCisgIHZvaWQgKCppbml0aWFsaXplKSAoTWFpblNjcmVlbiAqbWFpbik7CQkvKiBpbml0aWFsaXplIHNwZWVjaCBkZXZpY2UgKi8KK307CisKK2V4dGVybiB2b2lkIG1haW5TY3JlZW5VcGRhdGVkICh2b2lkKTsKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYgLyogX19jcGx1c3BsdXMgKi8KKworI2VuZGlmIC8qIEJSTFRUWV9JTkNMVURFRF9TQ1JfTUFJTiAqLwpkaWZmIC0tZ2l0IGEvSGVhZGVycy9zY3JfcmVhbC5oIGIvSGVhZGVycy9zY3JfcmVhbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM1MWIzMDAKLS0tIC9kZXYvbnVsbAorKysgYi9IZWFkZXJzL3Njcl9yZWFsLmgKQEAgLTAsMCArMSwzNCBAQAorLyoKKyAqIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisgKiAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisgKgorICogQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKKyNpZm5kZWYgQlJMVFRZX0lOQ0xVREVEX1NDUl9SRUFMCisjZGVmaW5lIEJSTFRUWV9JTkNMVURFRF9TQ1JfUkVBTAorCisjaW5jbHVkZSAic2NyX21haW4uaCIKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZiAvKiBfX2NwbHVzcGx1cyAqLworCitleHRlcm4gdm9pZCBpbml0aWFsaXplUmVhbFNjcmVlbiAoTWFpblNjcmVlbiAqKTsKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYgLyogX19jcGx1c3BsdXMgKi8KKworI2VuZGlmIC8qIEJSTFRUWV9JTkNMVURFRF9TQ1JfUkVBTCAqLwpkaWZmIC0tZ2l0IGEvSGVhZGVycy9zY3JfdGVybWluYWwuaCBiL0hlYWRlcnMvc2NyX3Rlcm1pbmFsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDI0NWEzNQotLS0gL2Rldi9udWxsCisrKyBiL0hlYWRlcnMvc2NyX3Rlcm1pbmFsLmgKQEAgLTAsMCArMSwxMTggQEAKKy8qCisgKiBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorICogICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorICoKKyAqIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorICoKKyAqIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyAqLworCisjaWZuZGVmIEJSTFRUWV9JTkNMVURFRF9TQ1JfVEVSTUlOQUwKKyNkZWZpbmUgQlJMVFRZX0lOQ0xVREVEX1NDUl9URVJNSU5BTAorCisjaW5jbHVkZSA8c3lzL2lwYy5oPgorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmIC8qIF9fY3BsdXNwbHVzICovCisKK2V4dGVybiBpbnQgbWFrZVRlcm1pbmFsS2V5KGtleV90ICprZXksIGNvbnN0IGNoYXIgKnBhdGgpOworCit0eXBlZGVmIGVudW0geworICBURVJNX01TR19JTlBVVF9URVhUID0gJ3QnLCAgICAgICAgLy8gZHJpdmVyLT5lbXVsYXRvciAtIFVURi04CisgIFRFUk1fTVNHX1NFR01FTlRfVVBEQVRFRCA9ICd1JywgICAvLyBlbXVsYXRvci0+ZHJpdmVyIC0gbm8gY29udGVudAorICBURVJNX01TR19FTVVMQVRPUl9FWElUSU5HID0gJ3gnLCAgLy8gZW11bGF0b3ItPmRyaXZlciAtIG5vIGNvbnRlbnQKK30gVGVybWluYWxNZXNzYWdlVHlwZTsKKworZXh0ZXJuIGludCBnZXRNZXNzYWdlUXVldWUoaW50ICpxdWV1ZSwga2V5X3Qga2V5KTsKKwordHlwZWRlZiBzdHJ1Y3QgeworICB1aW50OF90IHJlZDsKKyAgdWludDhfdCBncmVlbjsKKyAgdWludDhfdCBibHVlOworfSBTY3JlZW5TZWdtZW50Q29sb3I7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgdWludDMyX3QgdGV4dDsKKworICBTY3JlZW5TZWdtZW50Q29sb3IgZm9yZWdyb3VuZDsKKyAgU2NyZWVuU2VnbWVudENvbG9yIGJhY2tncm91bmQ7CisgIHVpbnQ4X3QgYWxwaGE7CisKKyAgdW5zaWduZWQgY2hhciBibGluayA6IDE7CisgIHVuc2lnbmVkIGNoYXIgdW5kZXJsaW5lIDogMTsKK30gU2NyZWVuU2VnbWVudENoYXJhY3RlcjsKKwordHlwZWRlZiBzdHJ1Y3QgeworICB1aW50MzJfdCBjaGFyYWN0ZXJzT2Zmc2V0OworfSBTY3JlZW5TZWdtZW50Um93OworCit0eXBlZGVmIHN0cnVjdCB7CisgIHVpbnQzMl90IGhlYWRlclNpemU7CisgIHVpbnQzMl90IHNlZ21lbnRTaXplOworCisgIHVpbnQzMl90IHNjcmVlbkhlaWdodDsKKyAgdWludDMyX3Qgc2NyZWVuV2lkdGg7CisKKyAgdWludDMyX3QgY3Vyc29yUm93OworICB1aW50MzJfdCBjdXJzb3JDb2x1bW47CisKKyAgdWludDMyX3Qgc2NyZWVuTnVtYmVyOworICB1aW50MzJfdCBjb21tb25GbGFnczsKKyAgdWludDMyX3QgcHJpdmF0ZUZsYWdzOworCisgIHVpbnQzMl90IHJvd3NPZmZzZXQ7CisgIHVpbnQzMl90IHJvd1NpemU7CisKKyAgdWludDMyX3QgY2hhcmFjdGVyc09mZnNldDsKKyAgdWludDMyX3QgY2hhcmFjdGVyU2l6ZTsKK30gU2NyZWVuU2VnbWVudEhlYWRlcjsKKworZXh0ZXJuIGludCBnZXRTY3JlZW5TZWdtZW50KGludCAqaWRlbnRpZmllciwga2V5X3Qga2V5KTsKK2V4dGVybiBTY3JlZW5TZWdtZW50SGVhZGVyICphdHRhY2hTY3JlZW5TZWdtZW50KGludCBpZGVudGlmaWVyKTsKK2V4dGVybiBpbnQgZGV0YWNoU2NyZWVuU2VnbWVudChTY3JlZW5TZWdtZW50SGVhZGVyICpzZWdtZW50KTsKKworZXh0ZXJuIFNjcmVlblNlZ21lbnRIZWFkZXIgKmdldFNjcmVlblNlZ21lbnRGb3JLZXkoa2V5X3Qga2V5KTsKK2V4dGVybiBTY3JlZW5TZWdtZW50SGVhZGVyICpnZXRTY3JlZW5TZWdtZW50Rm9yUGF0aChjb25zdCBjaGFyICpwYXRoKTsKK2V4dGVybiB2b2lkIGxvZ1NjcmVlblNlZ21lbnQoY29uc3QgU2NyZWVuU2VnbWVudEhlYWRlciAqc2VnbWVudCk7CisKK3N0YXRpYyBpbmxpbmUgaW50IGhhdmVTY3JlZW5Sb3dBcnJheShjb25zdCBTY3JlZW5TZWdtZW50SGVhZGVyICpzZWdtZW50KSB7CisgIHJldHVybiAhIXNlZ21lbnQtPnJvd3NPZmZzZXQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGdldFNjcmVlblJvd1dpZHRoKAorICAgIGNvbnN0IFNjcmVlblNlZ21lbnRIZWFkZXIgKnNlZ21lbnQpIHsKKyAgcmV0dXJuIHNlZ21lbnQtPnNjcmVlbldpZHRoICogc2VnbWVudC0+Y2hhcmFjdGVyU2l6ZTsKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgZ2V0U2NyZWVuQ2hhcmFjdGVyQ291bnQoCisgICAgY29uc3QgU2NyZWVuU2VnbWVudEhlYWRlciAqc2VnbWVudCkgeworICByZXR1cm4gc2VnbWVudC0+c2NyZWVuV2lkdGggKiBzZWdtZW50LT5zY3JlZW5IZWlnaHQ7Cit9CisKK2V4dGVybiB2b2lkICpnZXRTY3JlZW5JdGVtKFNjcmVlblNlZ21lbnRIZWFkZXIgKnNlZ21lbnQsIHVpbnQzMl90IG9mZnNldCk7CitleHRlcm4gU2NyZWVuU2VnbWVudFJvdyAqZ2V0U2NyZWVuUm93QXJyYXkoU2NyZWVuU2VnbWVudEhlYWRlciAqc2VnbWVudCk7CitleHRlcm4gU2NyZWVuU2VnbWVudENoYXJhY3RlciAqZ2V0U2NyZWVuQ2hhcmFjdGVyQXJyYXkoCisgICAgU2NyZWVuU2VnbWVudEhlYWRlciAqc2VnbWVudCwgY29uc3QgU2NyZWVuU2VnbWVudENoYXJhY3RlciAqKmVuZCk7CisKK2V4dGVybiBTY3JlZW5TZWdtZW50Q2hhcmFjdGVyICpnZXRTY3JlZW5Sb3coU2NyZWVuU2VnbWVudEhlYWRlciAqc2VnbWVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHJvdywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU2NyZWVuU2VnbWVudENoYXJhY3RlciAqKmVuZCk7CitleHRlcm4gU2NyZWVuU2VnbWVudENoYXJhY3RlciAqZ2V0U2NyZWVuQ2hhcmFjdGVyKAorICAgIFNjcmVlblNlZ21lbnRIZWFkZXIgKnNlZ21lbnQsIHVuc2lnbmVkIGludCByb3csIHVuc2lnbmVkIGludCBjb2x1bW4sCisgICAgY29uc3QgU2NyZWVuU2VnbWVudENoYXJhY3RlciAqKmVuZCk7CisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmIC8qIF9fY3BsdXNwbHVzICovCisKKyNlbmRpZiAvKiBCUkxUVFlfSU5DTFVERURfU0NSX1RFUk1JTkFMICovCmRpZmYgLS1naXQgYS9IZWFkZXJzL3Njcl90eXBlcy5oIGIvSGVhZGVycy9zY3JfdHlwZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZDY4MThmCi0tLSAvZGV2L251bGwKKysrIGIvSGVhZGVycy9zY3JfdHlwZXMuaApAQCAtMCwwICsxLDE2NSBAQAorLyoKKyAqIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisgKiAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisgKgorICogQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKKyNpZm5kZWYgQlJMVFRZX0lOQ0xVREVEX1NDUl9UWVBFUworI2RlZmluZSBCUkxUVFlfSU5DTFVERURfU0NSX1RZUEVTCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYgLyogX19jcGx1c3BsdXMgKi8KKwordHlwZWRlZiBlbnVtIHsKKyAgU0NSX0FUVFJfRkdfQkxVRSAgID0gMFgwMSwKKyAgU0NSX0FUVFJfRkdfR1JFRU4gID0gMFgwMiwKKyAgU0NSX0FUVFJfRkdfUkVEICAgID0gMFgwNCwKKyAgU0NSX0FUVFJfRkdfQlJJR0hUID0gMFgwOCwKKyAgU0NSX0FUVFJfQkdfQkxVRSAgID0gMFgxMCwKKyAgU0NSX0FUVFJfQkdfR1JFRU4gID0gMFgyMCwKKyAgU0NSX0FUVFJfQkdfUkVEICAgID0gMFg0MCwKKyAgU0NSX0FUVFJfQkxJTksgICAgID0gMFg4MCwKKworICBTQ1JfTUFTS19GRyA9IFNDUl9BVFRSX0ZHX1JFRCB8IFNDUl9BVFRSX0ZHX0dSRUVOIHwgU0NSX0FUVFJfRkdfQkxVRSB8IFNDUl9BVFRSX0ZHX0JSSUdIVCwKKyAgU0NSX01BU0tfQkcgPSBTQ1JfQVRUUl9CR19SRUQgfCBTQ1JfQVRUUl9CR19HUkVFTiB8IFNDUl9BVFRSX0JHX0JMVUUsCisKKyAgU0NSX0NPTE9VUl9GR19CTEFDSyAgICAgICAgICA9IDAsCisgIFNDUl9DT0xPVVJfRkdfQkxVRSAgICAgICAgICAgPSBTQ1JfQVRUUl9GR19CTFVFLAorICBTQ1JfQ09MT1VSX0ZHX0dSRUVOICAgICAgICAgID0gU0NSX0FUVFJfRkdfR1JFRU4sCisgIFNDUl9DT0xPVVJfRkdfQ1lBTiAgICAgICAgICAgPSBTQ1JfQVRUUl9GR19HUkVFTiB8IFNDUl9BVFRSX0ZHX0JMVUUsCisgIFNDUl9DT0xPVVJfRkdfUkVEICAgICAgICAgICAgPSBTQ1JfQVRUUl9GR19SRUQsCisgIFNDUl9DT0xPVVJfRkdfTUFHRU5UQSAgICAgICAgPSBTQ1JfQVRUUl9GR19SRUQgfCBTQ1JfQVRUUl9GR19CTFVFLAorICBTQ1JfQ09MT1VSX0ZHX0JST1dOICAgICAgICAgID0gU0NSX0FUVFJfRkdfUkVEIHwgU0NSX0FUVFJfRkdfR1JFRU4sCisgIFNDUl9DT0xPVVJfRkdfTElHSFRfR1JFWSAgICAgPSBTQ1JfQVRUUl9GR19SRUQgfCBTQ1JfQVRUUl9GR19HUkVFTiB8IFNDUl9BVFRSX0ZHX0JMVUUsCisgIFNDUl9DT0xPVVJfRkdfREFSS19HUkVZICAgICAgPSBTQ1JfQVRUUl9GR19CUklHSFQgfCBTQ1JfQ09MT1VSX0ZHX0JMQUNLLAorICBTQ1JfQ09MT1VSX0ZHX0xJR0hUX0JMVUUgICAgID0gU0NSX0FUVFJfRkdfQlJJR0hUIHwgU0NSX0NPTE9VUl9GR19CTFVFLAorICBTQ1JfQ09MT1VSX0ZHX0xJR0hUX0dSRUVOICAgID0gU0NSX0FUVFJfRkdfQlJJR0hUIHwgU0NSX0NPTE9VUl9GR19HUkVFTiwKKyAgU0NSX0NPTE9VUl9GR19MSUdIVF9DWUFOICAgICA9IFNDUl9BVFRSX0ZHX0JSSUdIVCB8IFNDUl9DT0xPVVJfRkdfQ1lBTiwKKyAgU0NSX0NPTE9VUl9GR19MSUdIVF9SRUQgICAgICA9IFNDUl9BVFRSX0ZHX0JSSUdIVCB8IFNDUl9DT0xPVVJfRkdfUkVELAorICBTQ1JfQ09MT1VSX0ZHX0xJR0hUX01BR0VOVEEgID0gU0NSX0FUVFJfRkdfQlJJR0hUIHwgU0NSX0NPTE9VUl9GR19NQUdFTlRBLAorICBTQ1JfQ09MT1VSX0ZHX1lFTExPVyAgICAgICAgID0gU0NSX0FUVFJfRkdfQlJJR0hUIHwgU0NSX0NPTE9VUl9GR19CUk9XTiwKKyAgU0NSX0NPTE9VUl9GR19XSElURSAgICAgICAgICA9IFNDUl9BVFRSX0ZHX0JSSUdIVCB8IFNDUl9DT0xPVVJfRkdfTElHSFRfR1JFWSwKKworICBTQ1JfQ09MT1VSX0JHX0JMQUNLICAgICAgPSAwLAorICBTQ1JfQ09MT1VSX0JHX0JMVUUgICAgICAgPSBTQ1JfQVRUUl9CR19CTFVFLAorICBTQ1JfQ09MT1VSX0JHX0dSRUVOICAgICAgPSBTQ1JfQVRUUl9CR19HUkVFTiwKKyAgU0NSX0NPTE9VUl9CR19DWUFOICAgICAgID0gU0NSX0FUVFJfQkdfR1JFRU4gfCBTQ1JfQVRUUl9CR19CTFVFLAorICBTQ1JfQ09MT1VSX0JHX1JFRCAgICAgICAgPSBTQ1JfQVRUUl9CR19SRUQsCisgIFNDUl9DT0xPVVJfQkdfTUFHRU5UQSAgICA9IFNDUl9BVFRSX0JHX1JFRCB8IFNDUl9BVFRSX0JHX0JMVUUsCisgIFNDUl9DT0xPVVJfQkdfQlJPV04gICAgICA9IFNDUl9BVFRSX0JHX1JFRCB8IFNDUl9BVFRSX0JHX0dSRUVOLAorICBTQ1JfQ09MT1VSX0JHX0xJR0hUX0dSRVkgPSBTQ1JfQVRUUl9CR19SRUQgfCBTQ1JfQVRUUl9CR19HUkVFTiB8IFNDUl9BVFRSX0JHX0JMVUUsCisKKyAgU0NSX0NPTE9VUl9ERUZBVUxUID0gU0NSX0NPTE9VUl9GR19MSUdIVF9HUkVZIHwgU0NSX0NPTE9VUl9CR19CTEFDSworfSBTY3JlZW5BdHRyaWJ1dGVzOworCit0eXBlZGVmIHN0cnVjdCB7CisgIHdjaGFyX3QgdGV4dDsKKyAgU2NyZWVuQXR0cmlidXRlcyBhdHRyaWJ1dGVzOworfSBTY3JlZW5DaGFyYWN0ZXI7CisKK3R5cGVkZWYgZW51bSB7CisgIFNDUV9OT05FID0gMCwKKyAgU0NRX0xPVywKKyAgU0NRX1BPT1IsCisgIFNDUV9GQUlSLAorICBTQ1FfR09PRCwKKyAgU0NRX0hJR0gsCit9IFNjcmVlbkNvbnRlbnRRdWFsaXR5OworCit0eXBlZGVmIHN0cnVjdCB7CisgIGNvbnN0IGNoYXIgKnVucmVhZGFibGU7CisgIFNjcmVlbkNvbnRlbnRRdWFsaXR5IHF1YWxpdHk7CisKKyAgaW50IG51bWJlcjsJCSAgICAgIC8qIHNjcmVlbiBudW1iZXIgKi8KKyAgc2hvcnQgY29scywgcm93czsJLyogc2NyZWVuIGRpbWVuc2lvbnMgKi8KKyAgc2hvcnQgcG9zeCwgcG9zeTsJLyogY3Vyc29yIHBvc2l0aW9uICovCisKKyAgdW5zaWduZWQgY2hhciBoYXNDdXJzb3I6MTsKKyAgdW5zaWduZWQgY2hhciBoYXNTZWxlY3Rpb246MTsKK30gU2NyZWVuRGVzY3JpcHRpb247CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgc2hvcnQgbGVmdCwgdG9wOwkvKiB0b3AtbGVmdCBjb3JuZXIgKG9mZnNldCBmcm9tIDApICovCisgIHNob3J0IHdpZHRoLCBoZWlnaHQ7CS8qIGRpbWVuc2lvbnMgKi8KK30gU2NyZWVuQm94OworCisjZGVmaW5lIFNDUl9LRVlfU0hJRlQgICAgIDBYNDAwMDAwMDAKKyNkZWZpbmUgU0NSX0tFWV9VUFBFUiAgICAgMFgyMDAwMDAwMAorI2RlZmluZSBTQ1JfS0VZX0NPTlRST0wgICAwWDEwMDAwMDAwCisjZGVmaW5lIFNDUl9LRVlfQUxUX0xFRlQgIDBYMDgwMDAwMDAKKyNkZWZpbmUgU0NSX0tFWV9BTFRfUklHSFQgMFgwNDAwMDAwMAorI2RlZmluZSBTQ1JfS0VZX0dVSSAgICAgICAwWDAyMDAwMDAwCisjZGVmaW5lIFNDUl9LRVlfQ0hBUl9NQVNLIDBYMDBGRkZGRkYKKworI2RlZmluZSBTQ1JfS0VZX1VOSUNPREVfUk9XIDBYRjgwMAorCit0eXBlZGVmIGVudW0geworICBTQ1JfS0VZX0VOVEVSID0gU0NSX0tFWV9VTklDT0RFX1JPVywKKyAgU0NSX0tFWV9UQUIsCisgIFNDUl9LRVlfQkFDS1NQQUNFLAorICBTQ1JfS0VZX0VTQ0FQRSwKKyAgU0NSX0tFWV9DVVJTT1JfTEVGVCwKKyAgU0NSX0tFWV9DVVJTT1JfUklHSFQsCisgIFNDUl9LRVlfQ1VSU09SX1VQLAorICBTQ1JfS0VZX0NVUlNPUl9ET1dOLAorICBTQ1JfS0VZX1BBR0VfVVAsCisgIFNDUl9LRVlfUEFHRV9ET1dOLAorICBTQ1JfS0VZX0hPTUUsCisgIFNDUl9LRVlfRU5ELAorICBTQ1JfS0VZX0lOU0VSVCwKKyAgU0NSX0tFWV9ERUxFVEUsCisgIFNDUl9LRVlfRlVOQ1RJT04sCisKKyAgU0NSX0tFWV9GMSA9IFNDUl9LRVlfRlVOQ1RJT04sCisgIFNDUl9LRVlfRjIsCisgIFNDUl9LRVlfRjMsCisgIFNDUl9LRVlfRjQsCisgIFNDUl9LRVlfRjUsCisgIFNDUl9LRVlfRjYsCisgIFNDUl9LRVlfRjcsCisgIFNDUl9LRVlfRjgsCisgIFNDUl9LRVlfRjksCisgIFNDUl9LRVlfRjEwLAorICBTQ1JfS0VZX0YxMSwKKyAgU0NSX0tFWV9GMTIsCisgIFNDUl9LRVlfRjEzLAorICBTQ1JfS0VZX0YxNCwKKyAgU0NSX0tFWV9GMTUsCisgIFNDUl9LRVlfRjE2LAorICBTQ1JfS0VZX0YxNywKKyAgU0NSX0tFWV9GMTgsCisgIFNDUl9LRVlfRjE5LAorICBTQ1JfS0VZX0YyMCwKKyAgU0NSX0tFWV9GMjEsCisgIFNDUl9LRVlfRjIyLAorICBTQ1JfS0VZX0YyMywKKyAgU0NSX0tFWV9GMjQsCit9IFNjcmVlbktleTsKKworc3RhdGljIGlubGluZSBpbnQgaXNTcGVjaWFsS2V5KFNjcmVlbktleSBrZXkpIHsKKyAgcmV0dXJuIChrZXkgJiAoU0NSX0tFWV9DSEFSX01BU0sgJiB+MFhGRikpID09IFNDUl9LRVlfVU5JQ09ERV9ST1c7Cit9CisKKy8qIG11c3QgYmUgbGVzcyB0aGFuIDAgKi8KKyNkZWZpbmUgU0NSX05PX1ZUIC0xCisKK3R5cGVkZWYgc3RydWN0IFNjcmVlbkRyaXZlclN0cnVjdCBTY3JlZW5Ecml2ZXI7CisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmIC8qIF9fY3BsdXNwbHVzICovCisKKyNlbmRpZiAvKiBCUkxUVFlfSU5DTFVERURfU0NSX1RZUEVTICovCmRpZmYgLS1naXQgYS9IZWFkZXJzL3Njcl91dGlscy5oIGIvSGVhZGVycy9zY3JfdXRpbHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMzY1MDc4Ci0tLSAvZGV2L251bGwKKysrIGIvSGVhZGVycy9zY3JfdXRpbHMuaApAQCAtMCwwICsxLDM2IEBACisvKgorICogQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyAqICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyAqCisgKiBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorICoKKyAqIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyAqCisgKiBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisgKi8KKworI2lmbmRlZiBCUkxUVFlfSU5DTFVERURfU0NSX1VUSUxTCisjZGVmaW5lIEJSTFRUWV9JTkNMVURFRF9TQ1JfVVRJTFMKKworI2luY2x1ZGUgInNjcl90eXBlcy5oIgorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmIC8qIF9fY3BsdXNwbHVzICovCisKK2V4dGVybiB2b2lkIGNsZWFyU2NyZWVuQ2hhcmFjdGVycyAoU2NyZWVuQ2hhcmFjdGVyICpjaGFyYWN0ZXJzLCBzaXplX3QgY291bnQpOworZXh0ZXJuIHZvaWQgc2V0U2NyZWVuQ2hhcmFjdGVyVGV4dCAoU2NyZWVuQ2hhcmFjdGVyICpjaGFyYWN0ZXJzLCB3Y2hhcl90IHRleHQsIHNpemVfdCBjb3VudCk7CitleHRlcm4gdm9pZCBzZXRTY3JlZW5DaGFyYWN0ZXJBdHRyaWJ1dGVzIChTY3JlZW5DaGFyYWN0ZXIgKmNoYXJhY3RlcnMsIHVuc2lnbmVkIGNoYXIgYXR0cmlidXRlcywgc2l6ZV90IGNvdW50KTsKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYgLyogX19jcGx1c3BsdXMgKi8KKworI2VuZGlmIC8qIEJSTFRUWV9JTkNMVURFRF9TQ1JfVVRJTFMgKi8KZGlmZiAtLWdpdCBhL0hlYWRlcnMvc2VyaWFsX3R5cGVzLmggYi9IZWFkZXJzL3NlcmlhbF90eXBlcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZkMDEzZTYKLS0tIC9kZXYvbnVsbAorKysgYi9IZWFkZXJzL3NlcmlhbF90eXBlcy5oCkBAIC0wLDAgKzEsODUgQEAKKy8qCisgKiBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorICogICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorICoKKyAqIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorICoKKyAqIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyAqLworCisjaWZuZGVmIEJSTFRUWV9JTkNMVURFRF9TRVJJQUxfVFlQRVMKKyNkZWZpbmUgQlJMVFRZX0lOQ0xVREVEX1NFUklBTF9UWVBFUworCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmIC8qIF9fY3BsdXNwbHVzICovCisKK3R5cGVkZWYgZW51bSB7CisgIFNFUklBTF9TVE9QXzEgICA9IDEsCisgIFNFUklBTF9TVE9QXzIgICA9IDIsCisgIFNFUklBTF9TVE9QXzFfNSA9IDMKK30gU2VyaWFsU3RvcEJpdHM7CisKK3R5cGVkZWYgZW51bSB7CisgIFNFUklBTF9QQVJJVFlfU1BBQ0UsCisgIFNFUklBTF9QQVJJVFlfT0RELAorICBTRVJJQUxfUEFSSVRZX0VWRU4sCisgIFNFUklBTF9QQVJJVFlfTUFSSywKKyAgU0VSSUFMX1BBUklUWV9OT05FCit9IFNlcmlhbFBhcml0eTsKKwordHlwZWRlZiBlbnVtIHsKKyAgU0VSSUFMX0ZMT1dfT1VUUFVUX1hPTiA9IDBYMDAxLCAvKiBvdXRwdXQgY29udHJvbGxlZCBieSBYLU9OL1gtT0ZGKGlucHV0KSAqLworICBTRVJJQUxfRkxPV19PVVRQVVRfQ1RTID0gMFgwMDIsIC8qIG91dHB1dCBjb250cm9sbGVkIGJ5IENUUyhpbnB1dCkgKi8KKyAgU0VSSUFMX0ZMT1dfT1VUUFVUX0RTUiA9IDBYMDA0LCAvKiBvdXRwdXQgY29udHJvbGxlZCBieSBEU1IoaW5wdXQpICovCisgIFNFUklBTF9GTE9XX09VVFBVVF9SVFMgPSAwWDAwOCwgLyogb3V0cHV0IGluZGljYXRlZCBieSBSVFMob3V0cHV0KSAqLworCisgIFNFUklBTF9GTE9XX0lOUFVUX1hPTiAgPSAwWDAxMCwgLyogaW5wdXQgY29udHJvbGxlZCBieSBYLU9OL1gtT0ZGKG91dHB1dCkgKi8KKyAgU0VSSUFMX0ZMT1dfSU5QVVRfUlRTICA9IDBYMDIwLCAvKiBpbnB1dCBjb250cm9sbGVkIGJ5IFJUUyhvdXRwdXQpICovCisgIFNFUklBTF9GTE9XX0lOUFVUX0RUUiAgPSAwWDA0MCwgLyogaW5wdXQgY29udHJvbGxlZCBieSBEVFIob3V0cHV0KSAqLworICBTRVJJQUxfRkxPV19JTlBVVF9EU1IgID0gMFgwODAsIC8qIGlucHV0IGVuYWJsZWQgYnkgRFNSKGlucHV0KSAqLworCisgIFNFUklBTF9GTE9XX0lOUFVUX0NUUyAgPSAwWDEwMCwgLyogaW5wdXQgaW5kaWNhdGVkIGJ5IENUUyhpbnB1dCkgKi8KKworICBTRVJJQUxfRkxPV19IQVJEV0FSRSAgID0gKFNFUklBTF9GTE9XX09VVFBVVF9DVFMgfCBTRVJJQUxfRkxPV19PVVRQVVRfUlRTKSwKKworICBTRVJJQUxfRkxPV19OT05FICAgICAgID0gMFgwMCAgLyogbm8gaW5wdXQgb3Igb3V0cHV0IGZsb3cgY29udHJvbCAqLworfSBTZXJpYWxGbG93Q29udHJvbDsKKwordHlwZWRlZiBzdHJ1Y3QgeworICB1bnNpZ25lZCBpbnQgYmF1ZDsKKyAgdW5zaWduZWQgaW50IGRhdGFCaXRzOworICBTZXJpYWxTdG9wQml0cyBzdG9wQml0czsKKyAgU2VyaWFsUGFyaXR5IHBhcml0eTsKKyAgU2VyaWFsRmxvd0NvbnRyb2wgZmxvd0NvbnRyb2w7Cit9IFNlcmlhbFBhcmFtZXRlcnM7CisKKyNkZWZpbmUgU0VSSUFMX0RFRkFVTFRfQkFVRCA5NjAwCisjZGVmaW5lIFNFUklBTF9ERUZBVUxUX0RBVEFfQklUUyA4CisjZGVmaW5lIFNFUklBTF9ERUZBVUxUX1NUT1BfQklUUyBTRVJJQUxfU1RPUF8xCisjZGVmaW5lIFNFUklBTF9ERUZBVUxUX1BBUklUWSBTRVJJQUxfUEFSSVRZX05PTkUKKyNkZWZpbmUgU0VSSUFMX0RFRkFVTFRfRkxPV19DT05UUk9MIFNFUklBTF9GTE9XX05PTkUKKworI2RlZmluZSBTRVJJQUxfREVGQVVMVF9QQVJBTUVURVJTIFwKKyAgLmJhdWQgPSBTRVJJQUxfREVGQVVMVF9CQVVELCBcCisgIC5kYXRhQml0cyA9IFNFUklBTF9ERUZBVUxUX0RBVEFfQklUUywgXAorICAuc3RvcEJpdHMgPSBTRVJJQUxfREVGQVVMVF9TVE9QX0JJVFMsIFwKKyAgLnBhcml0eSA9IFNFUklBTF9ERUZBVUxUX1BBUklUWSwgXAorICAuZmxvd0NvbnRyb2wgPSBTRVJJQUxfREVGQVVMVF9GTE9XX0NPTlRST0wKKworI2RlZmluZSBTRVJJQUxfUEFSQU1FVEVSU19JTklUSUFMSVpFUiB7U0VSSUFMX0RFRkFVTFRfUEFSQU1FVEVSU30KKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYgLyogX19jcGx1c3BsdXMgKi8KKworI2VuZGlmIC8qIEJSTFRUWV9JTkNMVURFRF9TRVJJQUxfVFlQRVMgKi8KZGlmZiAtLWdpdCBhL0hlYWRlcnMvc2VydmljZS5oIGIvSGVhZGVycy9zZXJ2aWNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjI5YTU1YQotLS0gL2Rldi9udWxsCisrKyBiL0hlYWRlcnMvc2VydmljZS5oCkBAIC0wLDAgKzEsMzYgQEAKKy8qCisgKiBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorICogICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorICoKKyAqIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorICoKKyAqIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyAqLworCisjaWZuZGVmIEJSTFRUWV9JTkNMVURFRF9TRVJWSUNFCisjZGVmaW5lIEJSTFRUWV9JTkNMVURFRF9TRVJWSUNFCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYgLyogX19jcGx1c3BsdXMgKi8KKworZXh0ZXJuIGludCBpbnN0YWxsU2VydmljZShjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICpkZXNjcmlwdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqY29uZmlndXJhdGlvbkZpbGUpOworZXh0ZXJuIGludCByZW1vdmVTZXJ2aWNlIChjb25zdCBjaGFyICpuYW1lKTsKKworZXh0ZXJuIGludCBub3RpZnlTZXJ2aWNlUmVhZHkgKHZvaWQpOworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZiAvKiBfX2NwbHVzcGx1cyAqLworCisjZW5kaWYgLyogQlJMVFRZX0lOQ0xVREVEX1NFUlZJQ0UgKi8KZGlmZiAtLWdpdCBhL0hlYWRlcnMvc3BrLmggYi9IZWFkZXJzL3Nway5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcxNjQzODUKLS0tIC9kZXYvbnVsbAorKysgYi9IZWFkZXJzL3Nway5oCkBAIC0wLDAgKzEsODQgQEAKKy8qCisgKiBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorICogICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorICoKKyAqIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorICoKKyAqIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyAqLworCisjaWZuZGVmIEJSTFRUWV9JTkNMVURFRF9TUEsKKyNkZWZpbmUgQlJMVFRZX0lOQ0xVREVEX1NQSworCisjaW5jbHVkZSAic3BrX3R5cGVzLmgiCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYgLyogX19jcGx1c3BsdXMgKi8KKworZXh0ZXJuIHZvaWQgY29uc3RydWN0U3BlZWNoU3ludGhlc2l6ZXIgKFNwZWVjaFN5bnRoZXNpemVyICpzcGspOworZXh0ZXJuIHZvaWQgZGVzdHJ1Y3RTcGVlY2hTeW50aGVzaXplciAoU3BlZWNoU3ludGhlc2l6ZXIgKnNwayk7CisKK2V4dGVybiBpbnQgc3RhcnRTcGVlY2hEcml2ZXJUaHJlYWQgKFNwZWVjaFN5bnRoZXNpemVyICpzcGssIGNoYXIgKipwYXJhbWV0ZXJzKTsKK2V4dGVybiB2b2lkIHN0b3BTcGVlY2hEcml2ZXJUaHJlYWQgKFNwZWVjaFN5bnRoZXNpemVyICpzcGspOworCitleHRlcm4gaW50IG11dGVTcGVlY2ggKFNwZWVjaFN5bnRoZXNpemVyICpzcGssIGNvbnN0IGNoYXIgKnJlYXNvbik7CisKK2V4dGVybiBpbnQgY2FuRHJhaW5TcGVlY2ggKFNwZWVjaFN5bnRoZXNpemVyICpzcGspOworZXh0ZXJuIGludCBkcmFpblNwZWVjaCAoU3BlZWNoU3ludGhlc2l6ZXIgKnNwayk7CisKK2V4dGVybiBpbnQgc2F5VXRmOENoYXJhY3RlcnMgKAorICBTcGVlY2hTeW50aGVzaXplciAqc3BrLAorICBjb25zdCBjaGFyICp0ZXh0LCBjb25zdCB1bnNpZ25lZCBjaGFyICphdHRyaWJ1dGVzLAorICBzaXplX3QgbGVuZ3RoLCBzaXplX3QgY291bnQsCisgIFNheU9wdGlvbnMgb3B0aW9ucworKTsKKworZXh0ZXJuIGludCBzYXlXaWRlQ2hhcmFjdGVycyAoCisgIFNwZWVjaFN5bnRoZXNpemVyICpzcGssCisgIGNvbnN0IHdjaGFyX3QgKmNoYXJhY3RlcnMsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmF0dHJpYnV0ZXMsCisgIHNpemVfdCBjb3VudCwgU2F5T3B0aW9ucyBvcHRpb25zCispOworCitleHRlcm4gaW50IHNheVN0cmluZyAoCisgIFNwZWVjaFN5bnRoZXNpemVyICpzcGssCisgIGNvbnN0IGNoYXIgKnN0cmluZywgU2F5T3B0aW9ucyBvcHRpb25zCispOworCitleHRlcm4gaW50IGNhblNldFNwZWVjaFZvbHVtZSAoU3BlZWNoU3ludGhlc2l6ZXIgKnNwayk7CitleHRlcm4gaW50IHNldFNwZWVjaFZvbHVtZSAoU3BlZWNoU3ludGhlc2l6ZXIgKnNwaywgaW50IHNldHRpbmcsIGludCBzYXkpOworZXh0ZXJuIGludCB0b05vcm1hbGl6ZWRTcGVlY2hWb2x1bWUgKHVuc2lnbmVkIGNoYXIgdm9sdW1lKTsKKworZXh0ZXJuIGludCBjYW5TZXRTcGVlY2hSYXRlIChTcGVlY2hTeW50aGVzaXplciAqc3BrKTsKK2V4dGVybiBpbnQgc2V0U3BlZWNoUmF0ZSAoU3BlZWNoU3ludGhlc2l6ZXIgKnNwaywgaW50IHNldHRpbmcsIGludCBzYXkpOworZXh0ZXJuIGludCB0b05vcm1hbGl6ZWRTcGVlY2hSYXRlICh1bnNpZ25lZCBjaGFyIHJhdGUpOworCitleHRlcm4gaW50IGNhblNldFNwZWVjaFBpdGNoIChTcGVlY2hTeW50aGVzaXplciAqc3BrKTsKK2V4dGVybiBpbnQgc2V0U3BlZWNoUGl0Y2ggKFNwZWVjaFN5bnRoZXNpemVyICpzcGssIGludCBzZXR0aW5nLCBpbnQgc2F5KTsKK2V4dGVybiBpbnQgdG9Ob3JtYWxpemVkU3BlZWNoUGl0Y2ggKHVuc2lnbmVkIGNoYXIgcGl0Y2gpOworCitleHRlcm4gaW50IGNhblNldFNwZWVjaFB1bmN0dWF0aW9uIChTcGVlY2hTeW50aGVzaXplciAqc3BrKTsKK2V4dGVybiBpbnQgc2V0U3BlZWNoUHVuY3R1YXRpb24gKFNwZWVjaFN5bnRoZXNpemVyICpzcGssIFNwZWVjaFB1bmN0dWF0aW9uIHNldHRpbmcsIGludCBzYXkpOworCitleHRlcm4gaW50IGhhdmVTcGVlY2hEcml2ZXIgKGNvbnN0IGNoYXIgKmNvZGUpOworZXh0ZXJuIGNvbnN0IGNoYXIgKmdldERlZmF1bHRTcGVlY2hEcml2ZXIgKHZvaWQpOworZXh0ZXJuIGNvbnN0IFNwZWVjaERyaXZlciAqbG9hZFNwZWVjaERyaXZlciAoY29uc3QgY2hhciAqY29kZSwgdm9pZCAqKmRyaXZlck9iamVjdCwgY29uc3QgY2hhciAqZHJpdmVyRGlyZWN0b3J5KTsKK2V4dGVybiB2b2lkIGlkZW50aWZ5U3BlZWNoRHJpdmVyIChjb25zdCBTcGVlY2hEcml2ZXIgKmRyaXZlciwgaW50IGZ1bGwpOworZXh0ZXJuIHZvaWQgaWRlbnRpZnlTcGVlY2hEcml2ZXJzIChpbnQgZnVsbCk7CitleHRlcm4gY29uc3QgU3BlZWNoRHJpdmVyICpzcGVlY2g7CitleHRlcm4gY29uc3QgU3BlZWNoRHJpdmVyIG5vU3BlZWNoOworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZiAvKiBfX2NwbHVzcGx1cyAqLworCisjZW5kaWYgLyogQlJMVFRZX0lOQ0xVREVEX1NQSyAqLwpkaWZmIC0tZ2l0IGEvSGVhZGVycy9zcGtfYmFzZS5oIGIvSGVhZGVycy9zcGtfYmFzZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUyZjlhMTEKLS0tIC9kZXYvbnVsbAorKysgYi9IZWFkZXJzL3Nwa19iYXNlLmgKQEAgLTAsMCArMSw0NSBAQAorLyoKKyAqIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisgKiAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisgKgorICogQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKKyNpZm5kZWYgQlJMVFRZX0lOQ0xVREVEX1NQS19CQVNFCisjZGVmaW5lIEJSTFRUWV9JTkNMVURFRF9TUEtfQkFTRQorCisjaW5jbHVkZSAic3BrX3R5cGVzLmgiCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYgLyogX19jcGx1c3BsdXMgKi8KKworZXh0ZXJuIGludCB0ZWxsU3BlZWNoRmluaXNoZWQgKFNwZWVjaFN5bnRoZXNpemVyICpzcGspOworZXh0ZXJuIGludCB0ZWxsU3BlZWNoTG9jYXRpb24gKFNwZWVjaFN5bnRoZXNpemVyICpzcGssIGludCBpbmRleCk7CisKK2V4dGVybiB1bnNpZ25lZCBpbnQgZ2V0SW50ZWdlclNwZWVjaFZvbHVtZSAodW5zaWduZWQgY2hhciBzZXR0aW5nLCB1bnNpZ25lZCBpbnQgbm9ybWFsKTsKK2V4dGVybiB1bnNpZ25lZCBpbnQgZ2V0SW50ZWdlclNwZWVjaFJhdGUgKHVuc2lnbmVkIGNoYXIgc2V0dGluZywgdW5zaWduZWQgaW50IG5vcm1hbCk7CitleHRlcm4gdW5zaWduZWQgaW50IGdldEludGVnZXJTcGVlY2hQaXRjaCAodW5zaWduZWQgY2hhciBzZXR0aW5nLCB1bnNpZ25lZCBpbnQgbm9ybWFsKTsKKworI2lmbmRlZiBOT19GTE9BVAorZXh0ZXJuIGZsb2F0IGdldEZsb2F0U3BlZWNoVm9sdW1lICh1bnNpZ25lZCBjaGFyIHNldHRpbmcpOworZXh0ZXJuIGZsb2F0IGdldEZsb2F0U3BlZWNoUmF0ZSAodW5zaWduZWQgY2hhciBzZXR0aW5nKTsKK2V4dGVybiBmbG9hdCBnZXRGbG9hdFNwZWVjaFBpdGNoICh1bnNpZ25lZCBjaGFyIHNldHRpbmcpOworI2VuZGlmIC8qIE5PX0ZMT0FUICovCisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmIC8qIF9fY3BsdXNwbHVzICovCisKKyNlbmRpZiAvKiBCUkxUVFlfSU5DTFVERURfU1BLX0JBU0UgKi8KZGlmZiAtLWdpdCBhL0hlYWRlcnMvc3BrX2RyaXZlci5oIGIvSGVhZGVycy9zcGtfZHJpdmVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDIyZWQxMgotLS0gL2Rldi9udWxsCisrKyBiL0hlYWRlcnMvc3BrX2RyaXZlci5oCkBAIC0wLDAgKzEsNjkgQEAKKy8qCisgKiBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorICogICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorICoKKyAqIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorICoKKyAqIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyAqLworCisjaWZuZGVmIEJSTFRUWV9JTkNMVURFRF9TUEtfRFJJVkVSCisjZGVmaW5lIEJSTFRUWV9JTkNMVURFRF9TUEtfRFJJVkVSCisKKyNpbmNsdWRlICJzcGtfdHlwZXMuaCIKKyNpbmNsdWRlICJzcGtfYmFzZS5oIgorI2luY2x1ZGUgInNway5oIgorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmIC8qIF9fY3BsdXNwbHVzICovCisKKyNpZmRlZiBTUEtQQVJNUworc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IHNwa19wYXJhbWV0ZXJzW10gPSB7U1BLUEFSTVMsIE5VTEx9OworI2Vsc2UgLyogU1BLUEFSTVMgKi8KKyNkZWZpbmUgc3BrX3BhcmFtZXRlcnMgTlVMTAorI2VuZGlmIC8qIFNQS1BBUk1TICovCisKK3N0YXRpYyBpbnQgc3BrX2NvbnN0cnVjdCAoU3BlZWNoU3ludGhlc2l6ZXIgKnNwaywgY2hhciAqKnBhcmFtZXRlcnMpOworc3RhdGljIHZvaWQgc3BrX2Rlc3RydWN0IChTcGVlY2hTeW50aGVzaXplciAqc3BrKTsKKworc3RhdGljIHZvaWQgc3BrX3NheSAoU3BlZWNoU3ludGhlc2l6ZXIgKnNwaywgY29uc3QgdW5zaWduZWQgY2hhciAqdGV4dCwgc2l6ZV90IGxlbmd0aCwgc2l6ZV90IGNvdW50LCBjb25zdCB1bnNpZ25lZCBjaGFyICphdHRyaWJ1dGVzKTsKK3N0YXRpYyB2b2lkIHNwa19tdXRlIChTcGVlY2hTeW50aGVzaXplciAqc3BrKTsKKworI2lmbmRlZiBTUEtTWU1CT0wKKyNkZWZpbmUgU1BLU1lNQk9MIENPTkNBVEVOQVRFKHNwa19kcml2ZXJfLERSSVZFUl9DT0RFKQorI2VuZGlmIC8qIFNQS1NZTUJPTCAqLworCisjaWZuZGVmIFNQS0NPTlNUCisjZGVmaW5lIFNQS0NPTlNUIGNvbnN0CisjZW5kaWYgLyogU1BLQ09OU1QgKi8KKworZXh0ZXJuIFNQS0NPTlNUIFNwZWVjaERyaXZlciBTUEtTWU1CT0w7CitTUEtDT05TVCBTcGVlY2hEcml2ZXIgU1BLU1lNQk9MID0geworICBEUklWRVJfREVGSU5JVElPTl9JTklUSUFMSVpFUiwKKworICBzcGtfcGFyYW1ldGVycywKKworICBzcGtfY29uc3RydWN0LAorICBzcGtfZGVzdHJ1Y3QsCisKKyAgc3BrX3NheSwKKyAgc3BrX211dGUKK307CisKK0RSSVZFUl9WRVJTSU9OX0RFQ0xBUkFUSU9OKHNwayk7CisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmIC8qIF9fY3BsdXNwbHVzICovCisKKyNlbmRpZiAvKiBCUkxUVFlfSU5DTFVERURfU1BLX0RSSVZFUiAqLwpkaWZmIC0tZ2l0IGEvSGVhZGVycy9zcGtfdHlwZXMuaCBiL0hlYWRlcnMvc3BrX3R5cGVzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmMwNWVlYgotLS0gL2Rldi9udWxsCisrKyBiL0hlYWRlcnMvc3BrX3R5cGVzLmgKQEAgLTAsMCArMSwxMDcgQEAKKy8qCisgKiBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorICogICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorICoKKyAqIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorICoKKyAqIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyAqLworCisjaWZuZGVmIEJSTFRUWV9JTkNMVURFRF9TUEtfVFlQRVMKKyNkZWZpbmUgQlJMVFRZX0lOQ0xVREVEX1NQS19UWVBFUworCisjaW5jbHVkZSAiZHJpdmVyLmgiCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYgLyogX19jcGx1c3BsdXMgKi8KKwordHlwZWRlZiBlbnVtIHsKKyAgU0FZX09QVF9NVVRFX0ZJUlNUICAgICAgPSAwWDAxLAorICBTQVlfT1BUX0hJR0hFUl9QSVRDSCAgICA9IDBYMDIsCisgIFNBWV9PUFRfQUxMX1BVTkNUVUFUSU9OID0gMFgwNCwKK30gU2F5T3B0aW9uczsKKworI2RlZmluZSBTUEtfVk9MVU1FX0RFRkFVTFQgMTAKKyNkZWZpbmUgU1BLX1ZPTFVNRV9NQVhJTVVNIChTUEtfVk9MVU1FX0RFRkFVTFQgKiAyKQorCisjZGVmaW5lIFNQS19SQVRFX0RFRkFVTFQgMTAKKyNkZWZpbmUgU1BLX1JBVEVfTUFYSU1VTSAoU1BLX1JBVEVfREVGQVVMVCAqIDIpCisKKyNkZWZpbmUgU1BLX1BJVENIX0RFRkFVTFQgMTAKKyNkZWZpbmUgU1BLX1BJVENIX01BWElNVU0gKFNQS19QSVRDSF9ERUZBVUxUICogMikKKwordHlwZWRlZiBlbnVtIHsKKyAgU1BLX1BVTkNUVUFUSU9OX05PTkUsCisgIFNQS19QVU5DVFVBVElPTl9TT01FLAorICBTUEtfUFVOQ1RVQVRJT05fQUxMCit9IFNwZWVjaFB1bmN0dWF0aW9uOworCit0eXBlZGVmIHN0cnVjdCBTcGVlY2hTeW50aGVzaXplclN0cnVjdCBTcGVlY2hTeW50aGVzaXplcjsKK3R5cGVkZWYgc3RydWN0IFNwZWVjaERyaXZlclRocmVhZFN0cnVjdCBTcGVlY2hEcml2ZXJUaHJlYWQ7Cit0eXBlZGVmIHN0cnVjdCBTcGVlY2hEYXRhU3RydWN0IFNwZWVjaERhdGE7CisKKyNkZWZpbmUgU1BLX1NDUl9OT05FIC0xCisjZGVmaW5lIFNQS19MT0NfTk9ORSAtMQorCit0eXBlZGVmIHZvaWQgU2V0U3BlZWNoVm9sdW1lTWV0aG9kIChTcGVlY2hTeW50aGVzaXplciAqc3BrLCB1bnNpZ25lZCBjaGFyIHNldHRpbmcpOwordHlwZWRlZiB2b2lkIFNldFNwZWVjaFJhdGVNZXRob2QgKFNwZWVjaFN5bnRoZXNpemVyICpzcGssIHVuc2lnbmVkIGNoYXIgc2V0dGluZyk7Cit0eXBlZGVmIHZvaWQgU2V0U3BlZWNoUGl0Y2hNZXRob2QgKFNwZWVjaFN5bnRoZXNpemVyICpzcGssIHVuc2lnbmVkIGNoYXIgc2V0dGluZyk7Cit0eXBlZGVmIHZvaWQgU2V0U3BlZWNoUHVuY3R1YXRpb25NZXRob2QgKFNwZWVjaFN5bnRoZXNpemVyICpzcGssIFNwZWVjaFB1bmN0dWF0aW9uIHNldHRpbmcpOwordHlwZWRlZiB2b2lkIERyYWluU3BlZWNoTWV0aG9kIChTcGVlY2hTeW50aGVzaXplciAqc3BrKTsKKwordHlwZWRlZiB2b2lkIFNldFNwZWVjaEZpbmlzaGVkTWV0aG9kIChTcGVlY2hTeW50aGVzaXplciAqc3BrKTsKK3R5cGVkZWYgdm9pZCBTZXRTcGVlY2hMb2NhdGlvbk1ldGhvZCAoU3BlZWNoU3ludGhlc2l6ZXIgKnNwaywgaW50IGxvY2F0aW9uKTsKKworc3RydWN0IFNwZWVjaFN5bnRoZXNpemVyU3RydWN0IHsKKyAgdW5zaWduZWQgY2hhciBzYXlCYW5uZXIgOiAxOworICB1bnNpZ25lZCBjaGFyIGNhbkF1dG9zcGVhayA6IDE7CisKKyAgc3RydWN0IHsKKyAgICBpbnQgc2NyZWVuTnVtYmVyOworICAgIGludCBmaXJzdExpbmU7CisgICAgaW50IHNwZWVjaExvY2F0aW9uOworICAgIHVuc2lnbmVkIGNoYXIgaXNBY3RpdmUgOiAxOworICB9IHRyYWNrOworCisgIFNldFNwZWVjaFZvbHVtZU1ldGhvZCAqc2V0Vm9sdW1lOworICBTZXRTcGVlY2hSYXRlTWV0aG9kICpzZXRSYXRlOworICBTZXRTcGVlY2hQaXRjaE1ldGhvZCAqc2V0UGl0Y2g7CisgIFNldFNwZWVjaFB1bmN0dWF0aW9uTWV0aG9kICpzZXRQdW5jdHVhdGlvbjsKKyAgRHJhaW5TcGVlY2hNZXRob2QgKmRyYWluOworCisgIFNldFNwZWVjaEZpbmlzaGVkTWV0aG9kICpzZXRGaW5pc2hlZDsKKyAgU2V0U3BlZWNoTG9jYXRpb25NZXRob2QgKnNldExvY2F0aW9uOworCisgIHN0cnVjdCB7CisgICAgU3BlZWNoRHJpdmVyVGhyZWFkICp0aHJlYWQ7CisgICAgU3BlZWNoRGF0YSAqZGF0YTsKKyAgfSBkcml2ZXI7Cit9OworCit0eXBlZGVmIHN0cnVjdCB7CisgIERSSVZFUl9ERUZJTklUSU9OX0RFQ0xBUkFUSU9OOworCisgIGNvbnN0IGNoYXIgKmNvbnN0ICpwYXJhbWV0ZXJzOworCisgIGludCAoKmNvbnN0cnVjdCkgKFNwZWVjaFN5bnRoZXNpemVyICpzcGssIGNoYXIgKipwYXJhbWV0ZXJzKTsKKyAgdm9pZCAoKmRlc3RydWN0KSAoU3BlZWNoU3ludGhlc2l6ZXIgKnNwayk7CisKKyAgdm9pZCAoKnNheSkgKFNwZWVjaFN5bnRoZXNpemVyICpzcGssIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnRleHQsIHNpemVfdCBsZW5ndGgsIHNpemVfdCBjb3VudCwgY29uc3QgdW5zaWduZWQgY2hhciAqYXR0cmlidXRlcyk7CisgIHZvaWQgKCptdXRlKSAoU3BlZWNoU3ludGhlc2l6ZXIgKnNwayk7Cit9IFNwZWVjaERyaXZlcjsKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYgLyogX19jcGx1c3BsdXMgKi8KKworI2VuZGlmIC8qIEJSTFRUWV9JTkNMVURFRF9TUEtfVFlQRVMgKi8KZGlmZiAtLWdpdCBhL0hlYWRlcnMvc3RhdHVzX3R5cGVzLmggYi9IZWFkZXJzL3N0YXR1c190eXBlcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNkZDc0Y2QKLS0tIC9kZXYvbnVsbAorKysgYi9IZWFkZXJzL3N0YXR1c190eXBlcy5oCkBAIC0wLDAgKzEsOTggQEAKKy8qCisgKiBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorICogICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorICoKKyAqIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorICoKKyAqIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyAqLworCisjaWZuZGVmIEJSTFRUWV9JTkNMVURFRF9TVEFUVVNfVFlQRVMKKyNkZWZpbmUgQlJMVFRZX0lOQ0xVREVEX1NUQVRVU19UWVBFUworCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmIC8qIF9fY3BsdXNwbHVzICovCisKK3R5cGVkZWYgZW51bSB7CisgIHNmRW5kID0gMCwKKyAgc2ZXaW5kb3dDb29yZGluYXRlczIsCisgIHNmV2luZG93Q29sdW1uLAorICBzZldpbmRvd1JvdywKKyAgc2ZDdXJzb3JDb29yZGluYXRlczIsCisgIHNmQ3Vyc29yQ29sdW1uLAorICBzZkN1cnNvclJvdywKKyAgc2ZDdXJzb3JBbmRXaW5kb3dDb2x1bW4yLAorICBzZkN1cnNvckFuZFdpbmRvd1JvdzIsCisgIHNmU2NyZWVuTnVtYmVyLAorICBzZlN0YXRlRG90cywKKyAgc2ZTdGF0ZUxldHRlciwKKyAgc2ZUaW1lLAorICBzZkFscGhhYmV0aWNXaW5kb3dDb29yZGluYXRlcywKKyAgc2ZBbHBoYWJldGljQ3Vyc29yQ29vcmRpbmF0ZXMsCisgIHNmR2VuZXJpYywKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qIE5vIGZpZWxkcyBhYm92ZSB0aGlzIHBvaW50IHNob3VsZCBiZSBhZGRlZCwgcmVtb3ZlZCwgb3IgcmVvcmRlcmVkIHNvIHRoYXQgKi8KKyAgLyogYmFja3dhcmQgY29tcGF0aWJpbGl0eSB3aXRoIG9sZCBiaW5hcnkgcHJlZmVyZW5jZSBmaWxlcyB3aWxsIGJlIHJldGFpbmVkLiAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIEZpZWxkcyBiZWxvdyB0aGlzIHBvaW50IG1heSBiZSBtb2RpZmllZCBhcyBkZXNpcmVkLiAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisgIHNmQ3Vyc29yQ29vcmRpbmF0ZXMzLAorICBzZldpbmRvd0Nvb3JkaW5hdGVzMywKKyAgc2ZDdXJzb3JBbmRXaW5kb3dDb2x1bW4zLAorICBzZkN1cnNvckFuZFdpbmRvd1JvdzMsCisKKyAgc2ZTcGFjZSwKK30gU3RhdHVzRmllbGQ7CisKKyNkZWZpbmUgR1NDX01BUktFUiAwWEZGIC8qIG11c3QgYmUgaW4gR1NDX0ZJUlNUICovCit0eXBlZGVmIGVudW0geworICBHU0NfRklSU1QgPSAwIC8qIG11c3QgYmUgZmlyc3QgKi8sCisKKyAgLyogbnVtYmVycyAqLworICBnc2NCcmFpbGxlV2luZG93Q29sdW1uLAorICBnc2NCcmFpbGxlV2luZG93Um93LAorICBnc2NTY3JlZW5DdXJzb3JDb2x1bW4sCisgIGdzY1NjcmVlbkN1cnNvclJvdywKKyAgZ3NjU2NyZWVuTnVtYmVyLAorCisgIC8qIGZsYWdzICovCisgIGdzY0Zyb3plblNjcmVlbiwKKyAgZ3NjRGlzcGxheU1vZGUsCisgIGdzY1NpeERvdENvbXB1dGVyQnJhaWxsZSwKKyAgZ3NjQ29udHJhY3RlZEJyYWlsbGUsCisgIGdzY1NsaWRpbmdCcmFpbGxlV2luZG93LAorICBnc2NTa2lwSWRlbnRpY2FsTGluZXMsCisgIGdzY1NraXBCbGFua0JyYWlsbGVXaW5kb3dzLAorICBnc2NTaG93U2NyZWVuQ3Vyc29yLAorICBnc2NIaWRlU2NyZWVuQ3Vyc29yLAorICBnc2NUcmFja1NjcmVlbkN1cnNvciwKKyAgZ3NjU2NyZWVuQ3Vyc29yU3R5bGUsCisgIGdzY0JsaW5raW5nU2NyZWVuQ3Vyc29yLAorICBnc2NTaG93QXR0cmlidXRlcywKKyAgZ3NjQmxpbmtpbmdBdHRyaWJ1dGVzLAorICBnc2NCbGlua2luZ0NhcGl0YWxzLAorICBnc2NBbGVydFR1bmVzLAorICBnc2NBdXRvcmVwZWF0LAorICBnc2NBdXRvc3BlYWssCisgIGdzY0JyYWlsbGVUeXBpbmdNb2RlLAorCisgIEdTQ19DT1VOVCAvKiBtdXN0IGJlIGxhc3QgKi8KK30gQlJMX0dlbmVyaWNTdGF0dXNDZWxsOworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZiAvKiBfX2NwbHVzcGx1cyAqLworCisjZW5kaWYgLyogQlJMVFRZX0lOQ0xVREVEX1NUQVRVU19UWVBFUyAqLwpkaWZmIC0tZ2l0IGEvSGVhZGVycy9zdGRpb3guaCBiL0hlYWRlcnMvc3RkaW94LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjFlYjMyNQotLS0gL2Rldi9udWxsCisrKyBiL0hlYWRlcnMvc3RkaW94LmgKQEAgLTAsMCArMSw0OSBAQAorLyoKKyAqIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisgKiAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisgKgorICogQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKKyNpZm5kZWYgQlJMVFRZX0lOQ0xVREVEX1NURElPWAorI2RlZmluZSBCUkxUVFlfSU5DTFVERURfU1RESU9YCisKKyNpbmNsdWRlIDxzdGRpby5oPgorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmIC8qIF9fY3BsdXNwbHVzICovCisKK3N0YXRpYyBpbmxpbmUgdm9pZAorZmx1c2hTdHJlYW0gKEZJTEUgKnN0cmVhbSkgeworICBmZmx1c2goc3RyZWFtKTsKKworI2lmZGVmIF9fTVNET1NfXworICBmc3luYyhmaWxlbm8oc3RyZWFtKSk7CisjZW5kaWYgLyogX19NU0RPU19fICovCit9CisKKyNpZiBkZWZpbmVkKF9QT1NJWF9USFJFQURfU0FGRV9GVU5DVElPTlMpICYmICFkZWZpbmVkKF9fTUlOR1czMl9fKQorI2RlZmluZSBsb2NrU3RyZWFtKHN0cmVhbSkgZmxvY2tmaWxlKChzdHJlYW0pKQorI2RlZmluZSB1bmxvY2tTdHJlYW0oc3RyZWFtKSBmdW5sb2NrZmlsZSgoc3RyZWFtKSkKKyNlbHNlIC8qIF9QT1NJWF9USFJFQURfU0FGRV9GVU5DVElPTlMgKi8KKyNkZWZpbmUgbG9ja1N0cmVhbShzdHJlYW0pCisjZGVmaW5lIHVubG9ja1N0cmVhbShzdHJlYW0pCisjZW5kaWYgLyogX1BPU0lYX1RIUkVBRF9TQUZFX0ZVTkNUSU9OUyAqLworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZiAvKiBfX2NwbHVzcGx1cyAqLworCisjZW5kaWYgLyogQlJMVFRZX0lOQ0xVREVEX1NURElPWCAqLwpkaWZmIC0tZ2l0IGEvSGVhZGVycy9zdHJmbXQuaCBiL0hlYWRlcnMvc3RyZm10LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWY3ZjE2MAotLS0gL2Rldi9udWxsCisrKyBiL0hlYWRlcnMvc3RyZm10LmgKQEAgLTAsMCArMSw3NCBAQAorLyoKKyAqIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisgKiAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisgKgorICogQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKKyNpZm5kZWYgQlJMVFRZX0lOQ0xVREVEX1NUUkZNVAorI2RlZmluZSBCUkxUVFlfSU5DTFVERURfU1RSRk1UCisKKyNpbmNsdWRlIDxzdGRpby5oPgorCisjaW5jbHVkZSAic3RyZm10aC5oIgorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmIC8qIF9fY3BsdXNwbHVzICovCisKKyNkZWZpbmUgU1RSX0JFR0lOKGJ1ZmZlciwgc2l6ZSkgeyBcCitjaGFyICpzdHJOZXh0ID0gKGJ1ZmZlcik7IFwKK2NvbnN0IGNoYXIgKmNvbnN0IHN0clN0YXJ0ID0gc3RyTmV4dDsgXAorY29uc3QgY2hhciAqY29uc3Qgc3RyRW5kID0gc3RyU3RhcnQgKyAoc2l6ZSk7IFwKK2NvbnN0IGNoYXIgKmNvbnN0IHN0ckxhc3QgPSBzdHJFbmQgLSAxOyBcCisqc3RyTmV4dCA9IDA7CisKKyNkZWZpbmUgU1RSX0VORCB9CisKKyNkZWZpbmUgU1RSX0xFTkdUSCAoc2l6ZV90KShzdHJOZXh0IC0gc3RyU3RhcnQpCisKKyNkZWZpbmUgU1RSX05FWFQgc3RyTmV4dAorCisjZGVmaW5lIFNUUl9MRUZUIChzaXplX3QpKHN0ckVuZCAtIHN0ck5leHQpCisKKyNkZWZpbmUgU1RSX1BPUCgpICgoc3RyTmV4dCA+IHN0clN0YXJ0KT8gLS1zdHJOZXh0OiBOVUxMKQorCisjZGVmaW5lIFNUUl9BREpVU1QobGVuZ3RoKSBcCitkbyB7IGlmICgoc3RyTmV4dCArPSAobGVuZ3RoKSkgPiBzdHJMYXN0KSBzdHJOZXh0ID0gKGNoYXIgKilzdHJMYXN0OyB9IHdoaWxlICgwKQorCisjZGVmaW5lIFNUUl9CRUdJTl9GT1JNQVRURVIobmFtZSwgLi4uKSBcCitTVFJfREVDTEFSRV9GT1JNQVRURVIobmFtZSwgX19WQV9BUkdTX18pIHsgXAorICBzaXplX3Qgc3RyRm9ybWF0dGVyUmVzdWx0OyBcCisgIFNUUl9CRUdJTihzdHJGb3JtYXR0ZXJCdWZmZXIsIHN0ckZvcm1hdHRlclNpemUpOworCisjZGVmaW5lIFNUUl9FTkRfRk9STUFUVEVSIFwKKyAgc3RyRm9ybWF0dGVyUmVzdWx0ID0gU1RSX0xFTkdUSDsgXAorICBTVFJfRU5EOyBcCisgIHJldHVybiBzdHJGb3JtYXR0ZXJSZXN1bHQ7IFwKK30KKworI2RlZmluZSBTVFJfRk9STUFUKGZvcm1hdHRlciwgLi4uKSBcCitTVFJfQURKVVNUKGZvcm1hdHRlcihTVFJfTkVYVCwgU1RSX0xFRlQsIF9fVkFfQVJHU19fKSkKKworI2RlZmluZSBTVFJfUFJJTlRGKC4uLikgXAorU1RSX0ZPUk1BVChzbnByaW50ZiwgX19WQV9BUkdTX18pCisKKyNkZWZpbmUgU1RSX1ZQUklOVEYoZm9ybWF0LCBhcmd1bWVudHMpIFwKK1NUUl9GT1JNQVQodnNucHJpbnRmLCBmb3JtYXQsIGFyZ3VtZW50cykKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYgLyogX19jcGx1c3BsdXMgKi8KKworI2VuZGlmIC8qIEJSTFRUWV9JTkNMVURFRF9TVFJGTVQgKi8KZGlmZiAtLWdpdCBhL0hlYWRlcnMvc3RyZm10aC5oIGIvSGVhZGVycy9zdHJmbXRoLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmVjYWIxMgotLS0gL2Rldi9udWxsCisrKyBiL0hlYWRlcnMvc3RyZm10aC5oCkBAIC0wLDAgKzEsMzYgQEAKKy8qCisgKiBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorICogICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorICoKKyAqIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorICoKKyAqIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyAqLworCisjaWZuZGVmIEJSTFRUWV9JTkNMVURFRF9TVFJGTVRICisjZGVmaW5lIEJSTFRUWV9JTkNMVURFRF9TVFJGTVRICisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYgLyogX19jcGx1c3BsdXMgKi8KKworI2RlZmluZSBTVFJfREVDTEFSRV9GT1JNQVRURVIobmFtZSwgLi4uKSBzaXplX3QgbmFtZSAoIFwKKyAgY2hhciAqY29uc3Qgc3RyRm9ybWF0dGVyQnVmZmVyLCBcCisgIHNpemVfdCBjb25zdCBzdHJGb3JtYXR0ZXJTaXplLCBcCisgIF9fVkFfQVJHU19fIFwKKykKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYgLyogX19jcGx1c3BsdXMgKi8KKworI2VuZGlmIC8qIEJSTFRUWV9JTkNMVURFRF9TVFJGTVRIICovCmRpZmYgLS1naXQgYS9IZWFkZXJzL3N5c3RlbS5oIGIvSGVhZGVycy9zeXN0ZW0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YzU4NjY4Ci0tLSAvZGV2L251bGwKKysrIGIvSGVhZGVycy9zeXN0ZW0uaApAQCAtMCwwICsxLDMyIEBACisvKgorICogQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyAqICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyAqCisgKiBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorICoKKyAqIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyAqCisgKiBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisgKi8KKworI2lmbmRlZiBCUkxUVFlfSU5DTFVERURfU1lTVEVNCisjZGVmaW5lIEJSTFRUWV9JTkNMVURFRF9TWVNURU0KKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZiAvKiBfX2NwbHVzcGx1cyAqLworCitleHRlcm4gdm9pZCBpbml0aWFsaXplU3lzdGVtT2JqZWN0ICh2b2lkKTsKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYgLyogX19jcGx1c3BsdXMgKi8KKworI2VuZGlmIC8qIEJSTFRUWV9JTkNMVURFRF9TWVNURU0gKi8KZGlmZiAtLWdpdCBhL0hlYWRlcnMvc3lzdGVtX2Rhcndpbi5oIGIvSGVhZGVycy9zeXN0ZW1fZGFyd2luLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzQwYTE1ZAotLS0gL2Rldi9udWxsCisrKyBiL0hlYWRlcnMvc3lzdGVtX2Rhcndpbi5oCkBAIC0wLDAgKzEsNjMgQEAKKy8qCisgKiBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorICogICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorICoKKyAqIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorICoKKyAqIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyAqLworCisjaWZuZGVmIEJSTFRUWV9JTkNMVURFRF9TWVNURU1fREFSV0lOCisjZGVmaW5lIEJSTFRUWV9JTkNMVURFRF9TWVNURU1fREFSV0lOCisKKyNpbmNsdWRlIDxDb3JlRm91bmRhdGlvbi9DRlJ1bkxvb3AuaD4KKworI2ltcG9ydCA8Rm91bmRhdGlvbi9OU1RocmVhZC5oPgorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmIC8qIF9fY3BsdXNwbHVzICovCisKK2V4dGVybiBJT1JldHVybiBleGVjdXRlUnVuTG9vcCAoaW50IHNlY29uZHMpOworZXh0ZXJuIHZvaWQgYWRkUnVuTG9vcFNvdXJjZSAoQ0ZSdW5Mb29wU291cmNlUmVmIHNvdXJjZSk7CitleHRlcm4gdm9pZCByZW1vdmVSdW5Mb29wU291cmNlIChDRlJ1bkxvb3BTb3VyY2VSZWYgc291cmNlKTsKKworI2RlZmluZSBNQVBfREFSV0lOX0VSUk9SKGZyb20sdG8pIGNhc2UgKGZyb20pOiBlcnJubyA9ICh0byk7IGJyZWFrOworZXh0ZXJuIHZvaWQgc2V0RGFyd2luU3lzdGVtRXJyb3IgKElPUmV0dXJuIHJlc3VsdCk7CisKK0BpbnRlcmZhY2UgQXN5bmNocm9ub3VzUmVzdWx0OiBOU09iamVjdAorQHByb3BlcnR5IChhc3NpZ24sIHJlYWRvbmx5KSBpbnQgaXNGaW5pc2hlZDsKK0Bwcm9wZXJ0eSAoYXNzaWduLCByZWFkb25seSkgSU9SZXR1cm4gZmluYWxTdGF0dXM7CisKKy0gKGludCkgd2FpdAorICA6IChpbnQpIHRpbWVvdXQ7CisKKy0gKHZvaWQpIHNldFN0YXR1cworICA6IChJT1JldHVybikgc3RhdHVzOworQGVuZAorCitAaW50ZXJmYWNlIEFzeW5jaHJvbm91c1Rhc2s6IEFzeW5jaHJvbm91c1Jlc3VsdAorQHByb3BlcnR5IChhc3NpZ24sIHJlYWRvbmx5KSBOU1RocmVhZCAqdGFza1RocmVhZDsKK0Bwcm9wZXJ0eSAoYXNzaWduLCByZWFkb25seSkgQ0ZSdW5Mb29wUmVmIHRhc2tSdW5Mb29wOworCistIChJT1JldHVybikgcnVuOworCistIChpbnQpIHN0YXJ0OworCistICh2b2lkKSBzdG9wOworQGVuZAorCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZiAvKiBfX2NwbHVzcGx1cyAqLworCisjZW5kaWYgLyogQlJMVFRZX0lOQ0xVREVEX1NZU1RFTV9EQVJXSU4gKi8KZGlmZiAtLWdpdCBhL0hlYWRlcnMvc3lzdGVtX2phdmEuaCBiL0hlYWRlcnMvc3lzdGVtX2phdmEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZWYzMWMwCi0tLSAvZGV2L251bGwKKysrIGIvSGVhZGVycy9zeXN0ZW1famF2YS5oCkBAIC0wLDAgKzEsNzIgQEAKKy8qCisgKiBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorICogICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorICoKKyAqIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorICoKKyAqIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyAqLworCisjaWZuZGVmIEJSTFRUWV9JTkNMVURFRF9TWVNURU1fSkFWQQorI2RlZmluZSBCUkxUVFlfSU5DTFVERURfU1lTVEVNX0pBVkEKKworI2luY2x1ZGUgInByb2xvZ3VlLmgiCisjaW5jbHVkZSAiY29tbW9uX2phdmEuaCIKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZiAvKiBfX2NwbHVzcGx1cyAqLworCisjaWZkZWYgX19BTkRST0lEX18KKyNkZWZpbmUgSkFWQV9KTklfVkVSU0lPTiBKTklfVkVSU0lPTl8xXzYKKyNkZWZpbmUgSkFWQV9PQkpfQlJMVFRZKG5hbWUpICJvcmcvYTExeS9icmx0dHkvYW5kcm9pZC8iIG5hbWUKKyNlbmRpZiAvKiBfX0FORFJPSURfXyAqLworCitleHRlcm4gSmF2YVZNICpnZXRKYXZhSW52b2NhdGlvbkludGVyZmFjZSAodm9pZCk7CitleHRlcm4gSk5JRW52ICpnZXRKYXZhTmF0aXZlSW50ZXJmYWNlICh2b2lkKTsKK2V4dGVybiBpbnQgY2xlYXJKYXZhRXhjZXB0aW9uIChKTklFbnYgKmVudiwgaW50IGRlc2NyaWJlKTsKKworRlVOQ1RJT05fREVDTEFSRShzZXRKYXZhQ2xhc3NMb2FkZXIsIGludCwgKEpOSUVudiAqZW52LCBqb2JqZWN0IGluc3RhbmNlKSk7CitleHRlcm4gaW50IGZpbmRKYXZhQ2xhc3MgKEpOSUVudiAqZW52LCBqY2xhc3MgKmNsYXNzLCBjb25zdCBjaGFyICpwYXRoKTsKKworZXh0ZXJuIGludCBmaW5kSmF2YUNvbnN0cnVjdG9yICgKKyAgSk5JRW52ICplbnYsIGptZXRob2RJRCAqY29uc3RydWN0b3IsCisgIGpjbGFzcyBjbGFzcywgY29uc3QgY2hhciAqc2lnbmF0dXJlCispOworCitleHRlcm4gaW50IGZpbmRKYXZhSW5zdGFuY2VNZXRob2QgKAorICBKTklFbnYgKmVudiwgam1ldGhvZElEICptZXRob2QsCisgIGpjbGFzcyBjbGFzcywgY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqc2lnbmF0dXJlCispOworCitleHRlcm4gaW50IGZpbmRKYXZhU3RhdGljTWV0aG9kICgKKyAgSk5JRW52ICplbnYsIGptZXRob2RJRCAqbWV0aG9kLAorICBqY2xhc3MgY2xhc3MsIGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnNpZ25hdHVyZQorKTsKKworZXh0ZXJuIGludCBmaW5kSmF2YUluc3RhbmNlRmllbGQgKAorICBKTklFbnYgKmVudiwgamZpZWxkSUQgKmZpZWxkLAorICBqY2xhc3MgY2xhc3MsIGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnNpZ25hdHVyZQorKTsKKworZXh0ZXJuIGludCBmaW5kSmF2YVN0YXRpY0ZpZWxkICgKKyAgSk5JRW52ICplbnYsIGpmaWVsZElEICpmaWVsZCwKKyAgamNsYXNzIGNsYXNzLCBjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICpzaWduYXR1cmUKKyk7CisKK2V4dGVybiBjaGFyICpnZXRKYXZhTG9jYWxlTmFtZSAodm9pZCk7CisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmIC8qIF9fY3BsdXNwbHVzICovCisKKyNlbmRpZiAvKiBCUkxUVFlfSU5DTFVERURfU1lTVEVNX0pBVkEgKi8KZGlmZiAtLWdpdCBhL0hlYWRlcnMvc3lzdGVtX2xpbnV4LmggYi9IZWFkZXJzL3N5c3RlbV9saW51eC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmViMWZhZjAKLS0tIC9kZXYvbnVsbAorKysgYi9IZWFkZXJzL3N5c3RlbV9saW51eC5oCkBAIC0wLDAgKzEsMTExIEBACisvKgorICogQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyAqICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyAqCisgKiBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorICoKKyAqIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyAqCisgKiBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisgKi8KKworI2lmbmRlZiBCUkxUVFlfSU5DTFVERURfU1lTVEVNX0xJTlVYCisjZGVmaW5lIEJSTFRUWV9JTkNMVURFRF9TWVNURU1fTElOVVgKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZiAvKiBfX2NwbHVzcGx1cyAqLworCit0eXBlZGVmIHN0cnVjdCB7CisgIGNvbnN0IGNoYXIgKnBhdGg7CisgIHZvaWQgKmRhdGE7Cit9IFBhdGhQcm9jZXNzb3JQYXJhbWV0ZXJzOworCit0eXBlZGVmIGludCBQYXRoUHJvY2Vzc29yIChjb25zdCBQYXRoUHJvY2Vzc29yUGFyYW1ldGVycyAqcGFyYW1ldGVycyk7CitleHRlcm4gaW50IHByb2Nlc3NQYXRoVHJlZSAoY29uc3QgY2hhciAqcGF0aCwgUGF0aFByb2Nlc3NvciAqcHJvY2Vzc1BhdGgsIHZvaWQgKmRhdGEpOworCitleHRlcm4gaW50IGNvbXBhcmVHcm91cHMgKGdpZF90IGdyb3VwMSwgZ2lkX3QgZ3JvdXAyKTsKK2V4dGVybiB2b2lkIHNvcnRHcm91cHMgKGdpZF90ICpncm91cHMsIHNpemVfdCBjb3VudCk7CitleHRlcm4gdm9pZCByZW1vdmVEdXBsaWNhdGVHcm91cHMgKGdpZF90ICpncm91cHMsIHNpemVfdCAqY291bnQpOworCit0eXBlZGVmIHZvaWQgR3JvdXBzUHJvY2Vzc29yIChjb25zdCBnaWRfdCAqZ3JvdXBzLCBzaXplX3QgY291bnQsIHZvaWQgKmRhdGEpOworZXh0ZXJuIHZvaWQgcHJvY2Vzc1N1cHBsZW1lbnRhcnlHcm91cHMgKEdyb3Vwc1Byb2Nlc3NvciAqcHJvY2Vzc0dyb3Vwcywgdm9pZCAqZGF0YSk7CitleHRlcm4gaW50IGhhdmVTdXBwbGVtZW50YXJ5R3JvdXBzIChjb25zdCBnaWRfdCAqZ3JvdXBzLCBzaXplX3QgY291bnQpOworCitleHRlcm4gaW50IGluc3RhbGxLZXJuZWxNb2R1bGUgKGNvbnN0IGNoYXIgKm5hbWUsIHVuc2lnbmVkIGNoYXIgKnN0YXR1cyk7CitleHRlcm4gaW50IGluc3RhbGxTcGVha2VyTW9kdWxlICh2b2lkKTsKK2V4dGVybiBpbnQgaW5zdGFsbFVpbnB1dE1vZHVsZSAodm9pZCk7CisKK2V4dGVybiBpbnQgb3BlbkNoYXJhY3RlckRldmljZSAoY29uc3QgY2hhciAqbmFtZSwgaW50IGZsYWdzLCBpbnQgbWFqb3IsIGludCBtaW5vcik7CisKK3R5cGVkZWYgc3RydWN0IFVpbnB1dE9iamVjdFN0cnVjdCBVaW5wdXRPYmplY3Q7CitleHRlcm4gVWlucHV0T2JqZWN0ICpuZXdVaW5wdXRPYmplY3QgKGNvbnN0IGNoYXIgKm5hbWUpOworZXh0ZXJuIHZvaWQgZGVzdHJveVVpbnB1dE9iamVjdCAoVWlucHV0T2JqZWN0ICp1aW5wdXQpOworCitleHRlcm4gaW50IGdldFVpbnB1dEZpbGVEZXNjcmlwdG9yIChVaW5wdXRPYmplY3QgKnVpbnB1dCk7CitleHRlcm4gaW50IGNyZWF0ZVVpbnB1dERldmljZSAoVWlucHV0T2JqZWN0ICp1aW5wdXQpOworCitleHRlcm4gaW50IGVuYWJsZVVpbnB1dEV2ZW50VHlwZSAoVWlucHV0T2JqZWN0ICp1aW5wdXQsIGludCB0eXBlKTsKK2V4dGVybiBpbnQgd3JpdGVJbnB1dEV2ZW50IChVaW5wdXRPYmplY3QgKnVpbnB1dCwgdWludDE2X3QgdHlwZSwgdWludDE2X3QgY29kZSwgaW50MzJfdCB2YWx1ZSk7CisKK2V4dGVybiBpbnQgZW5hYmxlVWlucHV0S2V5IChVaW5wdXRPYmplY3QgKnVpbnB1dCwgaW50IGtleSk7CitleHRlcm4gaW50IHdyaXRlS2V5RXZlbnQgKFVpbnB1dE9iamVjdCAqdWlucHV0LCBpbnQga2V5LCBpbnQgcHJlc3MpOworZXh0ZXJuIGludCByZWxlYXNlUHJlc3NlZEtleXMgKFVpbnB1dE9iamVjdCAqdWlucHV0KTsKKworZXh0ZXJuIGludCB3cml0ZVJlcGVhdERlbGF5IChVaW5wdXRPYmplY3QgKnVpbnB1dCwgaW50IGRlbGF5KTsKK2V4dGVybiBpbnQgd3JpdGVSZXBlYXRQZXJpb2QgKFVpbnB1dE9iamVjdCAqdWlucHV0LCBpbnQgcGVyaW9kKTsKKworZXh0ZXJuIGludCBlbmFibGVVaW5wdXRTb3VuZCAoVWlucHV0T2JqZWN0ICp1aW5wdXQsIGludCBzb3VuZCk7CitleHRlcm4gaW50IGVuYWJsZVVpbnB1dExlZCAoVWlucHV0T2JqZWN0ICp1aW5wdXQsIGludCBsZWQpOworCitleHRlcm4gVWlucHV0T2JqZWN0ICpuZXdVaW5wdXRLZXlib2FyZCAoY29uc3QgY2hhciAqbmFtZSk7CisKK3R5cGVkZWYgc3RydWN0IElucHV0RXZlbnRNb25pdG9yU3RydWN0IElucHV0RXZlbnRNb25pdG9yOwordHlwZWRlZiBzdHJ1Y3QgaW5wdXRfZXZlbnQgSW5wdXRFdmVudDsKK3R5cGVkZWYgaW50IFVpbnB1dE9iamVjdFByZXBhcmVyIChVaW5wdXRPYmplY3QgKnVpbnB1dCk7Cit0eXBlZGVmIHZvaWQgSW5wdXRFdmVudEhhbmRsZXIgKGNvbnN0IElucHV0RXZlbnQgKmV2ZW50KTsKKworZXh0ZXJuIElucHV0RXZlbnRNb25pdG9yICpuZXdJbnB1dEV2ZW50TW9uaXRvciAoCisgIGNvbnN0IGNoYXIgKm5hbWUsCisgIFVpbnB1dE9iamVjdFByZXBhcmVyICpwcmVwYXJlVWlucHV0T2JqZWN0LAorICBJbnB1dEV2ZW50SGFuZGxlciAqaGFuZGxlSW5wdXRFdmVudAorKTsKKworZXh0ZXJuIHZvaWQgZGVzdHJveUlucHV0RXZlbnRNb25pdG9yICgKKyAgSW5wdXRFdmVudE1vbml0b3IgKm1vbml0b3IKKyk7CisKK3R5cGVkZWYgdWludDhfdCBMaW51eEtleUNvZGU7CisjZGVmaW5lIExJTlVYX0tFWV9NQVBfTkFNRSh0eXBlKSBsaW51eEtleU1hcF8gIyMgdHlwZQorI2RlZmluZSBMSU5VWF9LRVlfTUFQKHR5cGUpIGNvbnN0IExpbnV4S2V5Q29kZSBMSU5VWF9LRVlfTUFQX05BTUUodHlwZSlbMFgxMDBdCisKK2V4dGVybiBMSU5VWF9LRVlfTUFQKHh0MDApOworZXh0ZXJuIExJTlVYX0tFWV9NQVAoeHRFMCk7CitleHRlcm4gTElOVVhfS0VZX01BUCh4dEUxKTsKK2V4dGVybiBMSU5VWF9LRVlfTUFQKGF0MDApOworZXh0ZXJuIExJTlVYX0tFWV9NQVAoYXRFMCk7CitleHRlcm4gTElOVVhfS0VZX01BUChhdEUxKTsKK2V4dGVybiBMSU5VWF9LRVlfTUFQKHBzMik7CitleHRlcm4gTElOVVhfS0VZX01BUChoaWQpOworCit0eXBlZGVmIHN0cnVjdCB7CisgIGNvbnN0IGNoYXIgKm5hbWU7CisgIGNvbnN0IExpbnV4S2V5Q29kZSAqa2V5czsKKyAgdW5zaWduZWQgaW50IGNvdW50OworfSBMaW51eEtleU1hcERlc2NyaXB0b3I7CisKK2V4dGVybiBjb25zdCBMaW51eEtleU1hcERlc2NyaXB0b3IgbGludXhLZXlNYXBEZXNjcmlwdG9yc1tdOworZXh0ZXJuIGNvbnN0IHVuc2lnbmVkIGNoYXIgbGludXhLZXlNYXBDb3VudDsKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYgLyogX19jcGx1c3BsdXMgKi8KKworI2VuZGlmIC8qIEJSTFRUWV9JTkNMVURFRF9TWVNURU1fTElOVVggKi8KZGlmZiAtLWdpdCBhL0hlYWRlcnMvc3lzdGVtX21zZG9zLmggYi9IZWFkZXJzL3N5c3RlbV9tc2Rvcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJhMmRiMTMKLS0tIC9kZXYvbnVsbAorKysgYi9IZWFkZXJzL3N5c3RlbV9tc2Rvcy5oCkBAIC0wLDAgKzEsNTYgQEAKKy8qCisgKiBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorICogICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorICoKKyAqIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorICoKKyAqIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyAqLworCisjaWZuZGVmIEJSTFRUWV9JTkNMVURFRF9TWVNURU1fTVNET1MKKyNkZWZpbmUgQlJMVFRZX0lOQ0xVREVEX1NZU1RFTV9NU0RPUworCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmIC8qIF9fY3BsdXNwbHVzICovCisKK2V4dGVybiB2b2lkIG1zZG9zQmFja2dyb3VuZCAodm9pZCk7CisKK2V4dGVybiB1bnNpZ25lZCBsb25nIG1zZG9zVVNsZWVwICh1bnNpZ25lZCBsb25nIG1pY3Jvc2Vjb25kcyk7CisKK2V4dGVybiB1bnNpZ25lZCBzaG9ydCBtc2Rvc0dldENvZGVQYWdlICh2b2lkKTsKKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nCittc2Rvc01ha2VBZGRyZXNzICh1bnNpZ25lZCBzaG9ydCBzZWdtZW50LCB1bnNpZ25lZCBzaG9ydCBvZmZzZXQpIHsKKyAgcmV0dXJuICgodW5zaWduZWQgbG9uZylzZWdtZW50IDw8IDQpICsgKHVuc2lnbmVkIGxvbmcpb2Zmc2V0OworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgbXNkb3NCcmVha0FkZHJlc3MgKAorICB1bnNpZ25lZCBsb25nIGFkZHJlc3MsIGludCBhYnNvbHV0ZSwKKyAgdW5zaWduZWQgc2hvcnQgKnNlZ21lbnQsIHVuc2lnbmVkIHNob3J0ICpvZmZzZXQKKykgeworICBpZiAoYWJzb2x1dGUpIHsKKyAgICBpZiAoc2VnbWVudCkgKnNlZ21lbnQgPSAoYWRkcmVzcyA+PiA0KSAmIDBYRjAwMDsKKyAgICBpZiAob2Zmc2V0KSAqb2Zmc2V0ID0gYWRkcmVzcyAmIDBYRkZGRjsKKyAgfSBlbHNlIHsKKyAgICBpZiAoc2VnbWVudCkgKnNlZ21lbnQgPSBhZGRyZXNzID4+IDQ7CisgICAgaWYgKG9mZnNldCkgKm9mZnNldCA9IGFkZHJlc3MgJiAwWEY7CisgIH0KK30KKworI2RlZmluZSBNU0RPU19QSVRfRlJFUVVFTkNZIFVJTlQ2NF9DKDExOTMxODApCisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmIC8qIF9fY3BsdXNwbHVzICovCisKKyNlbmRpZiAvKiBCUkxUVFlfSU5DTFVERURfU1lTVEVNX01TRE9TICovCmRpZmYgLS1naXQgYS9IZWFkZXJzL3N5c3RlbV93aW5kb3dzLmggYi9IZWFkZXJzL3N5c3RlbV93aW5kb3dzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWNkODE5ZAotLS0gL2Rldi9udWxsCisrKyBiL0hlYWRlcnMvc3lzdGVtX3dpbmRvd3MuaApAQCAtMCwwICsxLDk3IEBACisvKgorICogQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyAqICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyAqCisgKiBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorICoKKyAqIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyAqCisgKiBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisgKi8KKworI2lmbmRlZiBCUkxUVFlfSU5DTFVERURfU1lTVEVNX1dJTkRPV1MKKyNkZWZpbmUgQlJMVFRZX0lOQ0xVREVEX1NZU1RFTV9XSU5ET1dTCisKKyNpbmNsdWRlICJwcm9sb2d1ZS5oIgorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmIC8qIF9fY3BsdXNwbHVzICovCisKKyNkZWZpbmUgV0lOX1BST0NfU1RVQihuYW1lKSB0eXBlb2YobmFtZSkgKCpuYW1lIyNQcm9jKQorCisKKy8qIG50ZGxsLmRsbCAqLworI2luY2x1ZGUgPG50ZGVmLmg+CisKKyNpZm5kZWYgU1RBVFVTX1NVQ0NFU1MKKyNpbmNsdWRlIDxudHN0YXR1cy5oPgorI2VuZGlmIC8qIFNUQVRVU19TVUNDRVNTICovCisKKyNpZm5kZWYgSEFWRV9QUk9DRVNTX0lORk9STUFUSU9OX0NMQVNTCit0eXBlZGVmIGVudW0gX1BST0NFU1NJTkZPQ0xBU1MgeworICBQcm9jZXNzVXNlck1vZGVJT1BMID0gMTYsCit9IFBST0NFU1NJTkZPQ0xBU1MsIFBST0NFU1NfSU5GT1JNQVRJT05fQ0xBU1M7CisjZWxzZSAvKiBIQVZFX1BST0NFU1NfSU5GT1JNQVRJT05fQ0xBU1MgKi8KKyMgIGlmbmRlZiBIQVZFX1Byb2Nlc3NVc2VyTW9kZUlPUEwKKyMgICAgZGVmaW5lIFByb2Nlc3NVc2VyTW9kZUlPUEwgMTYKKyMgIGVuZGlmIC8qIFByb2Nlc3NVc2VyTW9kZUlPUEwgKi8KKyNlbmRpZiAvKiBIQVZFX1BST0NFU1NfSU5GT1JNQVRJT05fQ0xBU1MgKi8KKworZXh0ZXJuIE5UU1RBVFVTIFdJTkFQSSBOdFNldEluZm9ybWF0aW9uUHJvY2VzcyAoSEFORExFLCBQUk9DRVNTX0lORk9STUFUSU9OX0NMQVNTLCBQVk9JRCwgVUxPTkcpOworZXh0ZXJuIFdJTl9QUk9DX1NUVUIoTnRTZXRJbmZvcm1hdGlvblByb2Nlc3MpOworCisKKy8qIGtlcm5lbDMyLmRsbDogY29uc29sZSAqLworI2lmZGVmIFJDX0lOVk9LRUQKKyNpbmNsdWRlIDx3aW5jb24uaD4KKyNlbmRpZiAvKiBSQ19JTlZPS0VEICovCitleHRlcm4gV0lOX1BST0NfU1RVQihBdHRhY2hDb25zb2xlKTsKKworZXh0ZXJuIFdJTkJBU0VBUEkgaW50IFdJTkFQSSBHZXRMb2NhbGVJbmZvRXggKExQQ1dTVFIsIExDVFlQRSwgTFBXU1RSLCBpbnQpOworZXh0ZXJuIFdJTl9QUk9DX1NUVUIoR2V0TG9jYWxlSW5mb0V4KTsKKworI2lmbmRlZiBMT0NBTEVfTkFNRV9VU0VSX0RFRkFVTFQKKyNkZWZpbmUgTE9DQUxFX05BTUVfVVNFUl9ERUZBVUxUIE5VTEwKKyNlbmRpZiAvKiBMT0NBTEVfTkFNRV9VU0VSX0RFRkFVTFQgKi8KKworI2lmbmRlZiBMT0NBTEVfU05BTUUKKyNkZWZpbmUgTE9DQUxFX1NOQU1FIDBYNUNMCisjZW5kaWYgLyogTE9DQUxFX1NOQU1FICovCisKKworLyogdXNlcjMyLmRsbCAqLworZXh0ZXJuIFdJTl9QUk9DX1NUVUIoR2V0QWx0VGFiSW5mb0EpOworZXh0ZXJuIFdJTl9QUk9DX1NUVUIoU2VuZElucHV0KTsKKworCisvKiB3czJfMzIuZGxsICovCisjaWZkZWYgX19NSU5HVzMyX18KKyNpZm5kZWYgUkNfSU5WT0tFRAorI2luY2x1ZGUgPHdzMnRjcGlwLmg+CisjZW5kaWYgLyogUkNfSU5WT0tFRCAqLworCitleHRlcm4gV0lOX1BST0NfU1RVQihnZXRhZGRyaW5mbyk7CitleHRlcm4gV0lOX1BST0NfU1RVQihmcmVlYWRkcmluZm8pOworCisjZGVmaW5lIGdldGFkZHJpbmZvKGhvc3QscG9ydCxoaW50cyxyZXMpIGdldGFkZHJpbmZvUHJvYyhob3N0LHBvcnQsaGludHMscmVzKQorI2RlZmluZSBmcmVlYWRkcmluZm8ocmVzKSBmcmVlYWRkcmluZm9Qcm9jKHJlcykKKworZXh0ZXJuIGNoYXIgKmdldFdpbmRvd3NMb2NhbGVOYW1lICh2b2lkKTsKKyNlbmRpZiAvKiBfX01JTkdXMzJfXyAqLworCisKK2V4dGVybiBjaGFyICptYWtlV2luZG93c0NvbW1hbmRMaW5lIChjb25zdCBjaGFyICpjb25zdCAqYXJndW1lbnRzKTsKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYgLyogX19jcGx1c3BsdXMgKi8KKworI2VuZGlmIC8qIEJSTFRUWV9JTkNMVURFRF9TWVNURU1fV0lORE9XUyAqLwpkaWZmIC0tZ2l0IGEvSGVhZGVycy90aHJlYWQuaCBiL0hlYWRlcnMvdGhyZWFkLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTJhMzQ3ZQotLS0gL2Rldi9udWxsCisrKyBiL0hlYWRlcnMvdGhyZWFkLmgKQEAgLTAsMCArMSwxMjAgQEAKKy8qCisgKiBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorICogICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorICoKKyAqIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorICoKKyAqIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyAqLworCisjaWZuZGVmIEJSTFRUWV9JTkNMVURFRF9USFJFQUQKKyNkZWZpbmUgQlJMVFRZX0lOQ0xVREVEX1RIUkVBRAorCisjaW5jbHVkZSAiZ2V0X3RocmVhZC5oIgorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmIC8qIF9fY3BsdXNwbHVzICovCisKKyNpZmRlZiBHT1RfUFRIUkVBRFMKKyNkZWZpbmUgVEhSRUFEX0ZVTkNUSU9OKG5hbWUpIHZvaWQgKm5hbWUgKHZvaWQgKmFyZ3VtZW50KQordHlwZWRlZiBUSFJFQURfRlVOQ1RJT04oVGhyZWFkRnVuY3Rpb24pOworCitleHRlcm4gaW50IGNyZWF0ZVRocmVhZCAoCisgIGNvbnN0IGNoYXIgKm5hbWUsCisgIHB0aHJlYWRfdCAqdGhyZWFkLCBjb25zdCBwdGhyZWFkX2F0dHJfdCAqYXR0cmlidXRlcywKKyAgVGhyZWFkRnVuY3Rpb24gKmZ1bmN0aW9uLCB2b2lkICphcmd1bWVudAorKTsKKworZXh0ZXJuIGludCBjYWxsVGhyZWFkRnVuY3Rpb24gKAorICBjb25zdCBjaGFyICpuYW1lLCBUaHJlYWRGdW5jdGlvbiAqZnVuY3Rpb24sCisgIHZvaWQgKmFyZ3VtZW50LCB2b2lkICoqcmVzdWx0CispOworCitleHRlcm4gaW50IGxvY2tNdXRleCAocHRocmVhZF9tdXRleF90ICptdXRleCk7CitleHRlcm4gaW50IHVubG9ja011dGV4IChwdGhyZWFkX211dGV4X3QgKm11dGV4KTsKKyNlbmRpZiAvKiBHT1RfUFRIUkVBRFMgKi8KKworZXh0ZXJuIHNpemVfdCBmb3JtYXRUaHJlYWROYW1lIChjaGFyICpidWZmZXIsIHNpemVfdCBzaXplKTsKK2V4dGVybiB2b2lkIHNldFRocmVhZE5hbWUgKGNvbnN0IGNoYXIgKm5hbWUpOworCisjaWYgZGVmaW5lZChQVEhSRUFEX01VVEVYX0lOSVRJQUxJWkVSKQordHlwZWRlZiBwdGhyZWFkX211dGV4X3QgQ3JpdGljYWxTZWN0aW9uTG9jazsKKyNkZWZpbmUgQ1JJVElDQUxfU0VDVElPTl9MT0NLX0lOSVRJQUxJWkVSIFBUSFJFQURfTVVURVhfSU5JVElBTElaRVIKKworc3RhdGljIGlubGluZSB2b2lkCitlbnRlckNyaXRpY2FsU2VjdGlvbiAoQ3JpdGljYWxTZWN0aW9uTG9jayAqbG9jaykgeworICBwdGhyZWFkX211dGV4X2xvY2sobG9jayk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorbGVhdmVDcml0aWNhbFNlY3Rpb24gKENyaXRpY2FsU2VjdGlvbkxvY2sgKmxvY2spIHsKKyAgcHRocmVhZF9tdXRleF91bmxvY2sobG9jayk7Cit9CisKKyNlbHNlIC8qIGNyaXRpY2FsIHNlY3Rpb24gbG9jayAqLwordHlwZWRlZiB1bnNpZ25lZCBjaGFyIENyaXRpY2FsU2VjdGlvbkxvY2s7CisjZGVmaW5lIENSSVRJQ0FMX1NFQ1RJT05fTE9DS19JTklUSUFMSVpFUiAwCisKK3N0YXRpYyBpbmxpbmUgdm9pZAorZW50ZXJDcml0aWNhbFNlY3Rpb24gKENyaXRpY2FsU2VjdGlvbkxvY2sgKmxvY2spIHsKK30KKworc3RhdGljIGlubGluZSB2b2lkCitsZWF2ZUNyaXRpY2FsU2VjdGlvbiAoQ3JpdGljYWxTZWN0aW9uTG9jayAqbG9jaykgeworfQorI2VuZGlmIC8qIGNyaXRpY2FsIHNlY3Rpb24gbG9jayAqLworCisjZGVmaW5lIFRIUkVBRF9TUEVDSUZJQ19EQVRBX05FVyhuYW1lKSB2b2lkICpuYW1lIyNfbmV3ICh2b2lkKQordHlwZWRlZiBUSFJFQURfU1BFQ0lGSUNfREFUQV9ORVcoVGhyZWFkU3BlY2lmaWNEYXRhKTsKKworI2RlZmluZSBUSFJFQURfU1BFQ0lGSUNfREFUQV9ERVNUUk9ZKG5hbWUpIHZvaWQgbmFtZSMjX2Rlc3Ryb3kgKHZvaWQgKmRhdGEpCit0eXBlZGVmIFRIUkVBRF9TUEVDSUZJQ19EQVRBX0RFU1RST1koVGhyZWFkU3BlY2lmaWNEYXRhKTsKKwordHlwZWRlZiBzdHJ1Y3QgeworICBUaHJlYWRTcGVjaWZpY0RhdGFfbmV3ICpuZXc7CisgIFRocmVhZFNwZWNpZmljRGF0YV9kZXN0cm95ICpkZXN0cm95OworCisjaWYgZGVmaW5lZChQVEhSRUFEX01VVEVYX0lOSVRJQUxJWkVSKQorICBwdGhyZWFkX211dGV4X3QgbXV0ZXg7CisKKyAgc3RydWN0IHsKKyAgICBwdGhyZWFkX2tleV90IHZhbHVlOworICAgIHVuc2lnbmVkIGNyZWF0ZWQ7CisgIH0ga2V5OworCisjZGVmaW5lIFRIUkVBRF9TUEVDSUZJQ19EQVRBX0lOSVRJQUxJWkVSKCkgXAorICAubXV0ZXggPSBQVEhSRUFEX01VVEVYX0lOSVRJQUxJWkVSLCAua2V5ID0geyAuY3JlYXRlZCA9IDAgfQorCisjZWxzZSAvKiB0aHJlYWQgc3BlY2lmaWMgZGF0YSAqLworICB2b2lkICpkYXRhOworCisjZGVmaW5lIFRIUkVBRF9TUEVDSUZJQ19EQVRBX0lOSVRJQUxJWkVSKCkgXAorICAuZGF0YSA9IE5VTEwKKyNlbmRpZiAvKiB0aHJlYWQgc3BlY2lmaWMgZGF0YSAqLworfSBUaHJlYWRTcGVjaWZpY0RhdGFDb250cm9sOworCisjZGVmaW5lIFRIUkVBRF9TUEVDSUZJQ19EQVRBX0NPTlRST0wobmFtZSkgXAorICBzdGF0aWMgVGhyZWFkU3BlY2lmaWNEYXRhQ29udHJvbCBuYW1lID0geyBcCisgICAgLm5ldyA9IG5hbWUgIyMgX25ldywgXAorICAgIC5kZXN0cm95ID0gbmFtZSAjIyBfZGVzdHJveSwgXAorICAgIFwKKyAgICBUSFJFQURfU1BFQ0lGSUNfREFUQV9JTklUSUFMSVpFUigpIFwKKyAgfQorCitleHRlcm4gdm9pZCAqZ2V0VGhyZWFkU3BlY2lmaWNEYXRhIChUaHJlYWRTcGVjaWZpY0RhdGFDb250cm9sICpjdGwpOworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZiAvKiBfX2NwbHVzcGx1cyAqLworCisjZW5kaWYgLyogQlJMVFRZX0lOQ0xVREVEX1RIUkVBRCAqLwpkaWZmIC0tZ2l0IGEvSGVhZGVycy90aW1pbmcuaCBiL0hlYWRlcnMvdGltaW5nLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTJjNjk3NQotLS0gL2Rldi9udWxsCisrKyBiL0hlYWRlcnMvdGltaW5nLmgKQEAgLTAsMCArMSw2MyBAQAorLyoKKyAqIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisgKiAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisgKgorICogQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKKyNpZm5kZWYgQlJMVFRZX0lOQ0xVREVEX1RJTUlORworI2RlZmluZSBCUkxUVFlfSU5DTFVERURfVElNSU5HCisKKyNpbmNsdWRlIDx0aW1pbmdfdHlwZXMuaD4KKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZiAvKiBfX2NwbHVzcGx1cyAqLworCitleHRlcm4gdm9pZCBnZXRDdXJyZW50VGltZSAoVGltZVZhbHVlICp0aW1lKTsKK2V4dGVybiB2b2lkIHNldEN1cnJlbnRUaW1lIChjb25zdCBUaW1lVmFsdWUgKnRpbWUpOworCitleHRlcm4gdm9pZCBtYWtlVGltZVZhbHVlIChUaW1lVmFsdWUgKnZhbHVlLCBjb25zdCBUaW1lQ29tcG9uZW50cyAqY29tcG9uZW50cyk7CitleHRlcm4gdm9pZCBleHBhbmRUaW1lVmFsdWUgKGNvbnN0IFRpbWVWYWx1ZSAqdmFsdWUsIFRpbWVDb21wb25lbnRzICpjb21wb25lbnRzKTsKK2V4dGVybiBzaXplX3QgZm9ybWF0U2Vjb25kcyAoY2hhciAqYnVmZmVyLCBzaXplX3Qgc2l6ZSwgY29uc3QgY2hhciAqZm9ybWF0LCBpbnQzMl90IHNlY29uZHMpOworCitleHRlcm4gdm9pZCBub3JtYWxpemVUaW1lVmFsdWUgKFRpbWVWYWx1ZSAqdGltZSk7CitleHRlcm4gdm9pZCBhZGp1c3RUaW1lVmFsdWUgKFRpbWVWYWx1ZSAqdGltZSwgaW50IG1pbGxpc2Vjb25kcyk7CisKK2V4dGVybiBpbnQgY29tcGFyZVRpbWVWYWx1ZXMgKGNvbnN0IFRpbWVWYWx1ZSAqZmlyc3QsIGNvbnN0IFRpbWVWYWx1ZSAqc2Vjb25kKTsKK2V4dGVybiBsb25nIGludCBtaWxsaXNlY29uZHNCZXR3ZWVuIChjb25zdCBUaW1lVmFsdWUgKmZyb20sIGNvbnN0IFRpbWVWYWx1ZSAqdG8pOworCitleHRlcm4gbG9uZyBpbnQgbWlsbGlzZWNvbmRzVGlsbE5leHRTZWNvbmQgKGNvbnN0IFRpbWVWYWx1ZSAqcmVmZXJlbmNlKTsKK2V4dGVybiBsb25nIGludCBtaWxsaXNlY29uZHNUaWxsTmV4dE1pbnV0ZSAoY29uc3QgVGltZVZhbHVlICpyZWZlcmVuY2UpOworCitleHRlcm4gdm9pZCBnZXRNb25vdG9uaWNUaW1lIChUaW1lVmFsdWUgKm5vdyk7CitleHRlcm4gbG9uZyBpbnQgZ2V0TW9ub3RvbmljRWxhcHNlZCAoY29uc3QgVGltZVZhbHVlICpzdGFydCk7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgVGltZVZhbHVlIHN0YXJ0OworICBsb25nIGludCBsZW5ndGg7Cit9IFRpbWVQZXJpb2Q7CisKK2V4dGVybiB2b2lkIHN0YXJ0VGltZVBlcmlvZCAoVGltZVBlcmlvZCAqcGVyaW9kLCBsb25nIGludCBsZW5ndGgpOworZXh0ZXJuIHZvaWQgcmVzdGFydFRpbWVQZXJpb2QgKFRpbWVQZXJpb2QgKnBlcmlvZCk7CitleHRlcm4gaW50IGFmdGVyVGltZVBlcmlvZCAoY29uc3QgVGltZVBlcmlvZCAqcGVyaW9kLCBsb25nIGludCAqZWxhcHNlZCk7CisKK2V4dGVybiB2b2lkIGFwcHJveGltYXRlRGVsYXkgKGludCBtaWxsaXNlY29uZHMpOwkJLyogc2xlZXAgZm9yIGBtc2VjJyBtaWxsaXNlY29uZHMgKi8KK2V4dGVybiB2b2lkIGFjY3VyYXRlRGVsYXkgKGNvbnN0IFRpbWVWYWx1ZSAqZHVyYXRpb24pOworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZiAvKiBfX2NwbHVzcGx1cyAqLworCisjZW5kaWYgLyogQlJMVFRZX0lOQ0xVREVEX1RJTUlORyAqLwpkaWZmIC0tZ2l0IGEvSGVhZGVycy90aW1pbmdfdHlwZXMuaCBiL0hlYWRlcnMvdGltaW5nX3R5cGVzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTIxM2NjNAotLS0gL2Rldi9udWxsCisrKyBiL0hlYWRlcnMvdGltaW5nX3R5cGVzLmgKQEAgLTAsMCArMSw3MiBAQAorLyoKKyAqIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisgKiAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisgKgorICogQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKKyNpZm5kZWYgQlJMVFRZX0lOQ0xVREVEX1RJTUlOR19UWVBFUworI2RlZmluZSBCUkxUVFlfSU5DTFVERURfVElNSU5HX1RZUEVTCisKKyNpbmNsdWRlIDx0aW1lLmg+CisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYgLyogX19jcGx1c3BsdXMgKi8KKworI2RlZmluZSBNU0VDU19QRVJfU0VDICAxMDAwCisjZGVmaW5lIFVTRUNTX1BFUl9NU0VDIDEwMDAKKyNkZWZpbmUgTlNFQ1NfUEVSX1VTRUMgMTAwMAorI2RlZmluZSBVU0VDU19QRVJfU0VDICAoVVNFQ1NfUEVSX01TRUMgKiBNU0VDU19QRVJfU0VDKQorI2RlZmluZSBOU0VDU19QRVJfTVNFQyAoTlNFQ1NfUEVSX1VTRUMgKiBVU0VDU19QRVJfTVNFQykKKyNkZWZpbmUgTlNFQ1NfUEVSX1NFQyAgKE5TRUNTX1BFUl9VU0VDICogVVNFQ1NfUEVSX01TRUMgKiBNU0VDU19QRVJfU0VDKQorCisjZGVmaW5lIFNFQ1NfUEVSX01JTiA2MAorI2RlZmluZSBNSU5TX1BFUl9IUiAgNjAKKyNkZWZpbmUgSFJTX1BFUl9EQVkgIDI0CisjZGVmaW5lIERBWVNfUEVSX1dLICA3CisjZGVmaW5lIFNFQ1NfUEVSX0hSICAoU0VDU19QRVJfTUlOICogTUlOU19QRVJfSFIpCisjZGVmaW5lIFNFQ1NfUEVSX0RBWSAoU0VDU19QRVJfTUlOICogTUlOU19QRVJfSFIgKiBIUlNfUEVSX0RBWSkKKyNkZWZpbmUgU0VDU19QRVJfV0sgIChTRUNTX1BFUl9NSU4gKiBNSU5TX1BFUl9IUiAqIEhSU19QRVJfREFZICogREFZU19QRVJfV0spCisjZGVmaW5lIE1JTlNfUEVSX0RBWSAoTUlOU19QRVJfSFIgKiBIUlNfUEVSX0RBWSkKKyNkZWZpbmUgTUlOU19QRVJfV0sgIChNSU5TX1BFUl9IUiAqIEhSU19QRVJfREFZICogREFZU19QRVJfV0spCisjZGVmaW5lIEhSU19QRVJfV0sgICAoSFJTX1BFUl9EQVkgKiBEQVlTX1BFUl9XSykKKwordHlwZWRlZiBzdHJ1Y3QgeworICBpbnQzMl90IHNlY29uZHM7CisgIGludDMyX3QgbmFub3NlY29uZHM7Cit9IFRpbWVWYWx1ZTsKKwordHlwZWRlZiBzdHJ1Y3QgeworICBzdHJ1Y3QgdG0gdGltZTsKKworICB1aW50MTZfdCB5ZWFyOworICB1aW50OF90IG1vbnRoOworICB1aW50OF90IGRheTsKKworICB1aW50OF90IGhvdXI7CisgIHVpbnQ4X3QgbWludXRlOworICB1aW50OF90IHNlY29uZDsKKworICBpbnQzMl90IG5hbm9zZWNvbmQ7Cit9IFRpbWVDb21wb25lbnRzOworCisjZGVmaW5lIFBSSXNlYyBQUklpMzIKKyNkZWZpbmUgUFJJbnNlYyBQUklpMzIKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYgLyogX19jcGx1c3BsdXMgKi8KKworI2VuZGlmIC8qIEJSTFRUWV9JTkNMVURFRF9USU1JTkdfVFlQRVMgKi8KZGlmZiAtLWdpdCBhL0hlYWRlcnMvdHRiLmggYi9IZWFkZXJzL3R0Yi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMwMTdhMDcKLS0tIC9kZXYvbnVsbAorKysgYi9IZWFkZXJzL3R0Yi5oCkBAIC0wLDAgKzEsNTQgQEAKKy8qCisgKiBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorICogICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorICoKKyAqIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorICoKKyAqIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyAqLworCisjaWZuZGVmIEJSTFRUWV9JTkNMVURFRF9UVEIKKyNkZWZpbmUgQlJMVFRZX0lOQ0xVREVEX1RUQgorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmIC8qIF9fY3BsdXNwbHVzICovCisKK3R5cGVkZWYgc3RydWN0IFRleHRUYWJsZVN0cnVjdCBUZXh0VGFibGU7CitleHRlcm4gVGV4dFRhYmxlICp0ZXh0VGFibGU7CisKK2V4dGVybiB2b2lkIGxvY2tUZXh0VGFibGUgKHZvaWQpOworZXh0ZXJuIHZvaWQgdW5sb2NrVGV4dFRhYmxlICh2b2lkKTsKKworZXh0ZXJuIFRleHRUYWJsZSAqY29tcGlsZVRleHRUYWJsZSAoY29uc3QgY2hhciAqbmFtZSk7CitleHRlcm4gdm9pZCBkZXN0cm95VGV4dFRhYmxlIChUZXh0VGFibGUgKnRhYmxlKTsKKworZXh0ZXJuIGNoYXIgKmVuc3VyZVRleHRUYWJsZUV4dGVuc2lvbiAoY29uc3QgY2hhciAqcGF0aCk7CitleHRlcm4gY2hhciAqbWFrZVRleHRUYWJsZVBhdGggKGNvbnN0IGNoYXIgKmRpcmVjdG9yeSwgY29uc3QgY2hhciAqbmFtZSk7CisKK2V4dGVybiBjaGFyICpnZXRUZXh0VGFibGVGb3JMb2NhbGUgKGNvbnN0IGNoYXIgKmRpcmVjdG9yeSk7CitleHRlcm4gaW50IHJlcGxhY2VUZXh0VGFibGUgKGNvbnN0IGNoYXIgKmRpcmVjdG9yeSwgY29uc3QgY2hhciAqbmFtZSk7CisKK2V4dGVybiB1bnNpZ25lZCBjaGFyIGNvbnZlcnRDaGFyYWN0ZXJUb0RvdHMgKFRleHRUYWJsZSAqdGFibGUsIHdjaGFyX3QgY2hhcmFjdGVyKTsKK2V4dGVybiB3Y2hhcl90IGNvbnZlcnREb3RzVG9DaGFyYWN0ZXIgKFRleHRUYWJsZSAqdGFibGUsIHVuc2lnbmVkIGNoYXIgZG90cyk7CitleHRlcm4gd2NoYXJfdCBjb252ZXJ0SW5wdXRUb0NoYXJhY3RlciAodW5zaWduZWQgY2hhciBkb3RzKTsKKworZXh0ZXJuIHZvaWQgc2V0VHJ5QmFzZUNoYXJhY3RlciAoVGV4dFRhYmxlICp0YWJsZSwgdW5zaWduZWQgY2hhciB5ZXMpOworCitleHRlcm4gc2l6ZV90IGdldFRleHRUYWJsZVJvd3NNYXNrIChUZXh0VGFibGUgKnRhYmxlLCB1aW50OF90ICptYXNrLCBzaXplX3Qgc2l6ZSk7CitleHRlcm4gaW50IGdldFRleHRUYWJsZVJvd0NlbGxzIChUZXh0VGFibGUgKnRhYmxlLCB1aW50MzJfdCByb3dJbmRleCwgdWludDhfdCAqY2VsbHMsIHVpbnQ4X3QgKmRlZmluZWQpOworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZiAvKiBfX2NwbHVzcGx1cyAqLworCisjZW5kaWYgLyogQlJMVFRZX0lOQ0xVREVEX1RUQiAqLwpkaWZmIC0tZ2l0IGEvSGVhZGVycy90dW5lLmggYi9IZWFkZXJzL3R1bmUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZjYyNjc5Ci0tLSAvZGV2L251bGwKKysrIGIvSGVhZGVycy90dW5lLmgKQEAgLTAsMCArMSw2MCBAQAorLyoKKyAqIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisgKiAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisgKgorICogQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKKyNpZm5kZWYgQlJMVFRZX0lOQ0xVREVEX1RVTkUKKyNkZWZpbmUgQlJMVFRZX0lOQ0xVREVEX1RVTkUKKworI2luY2x1ZGUgInR1bmVfdHlwZXMuaCIKKyNpbmNsdWRlICJub3RlX3R5cGVzLmgiCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYgLyogX19jcGx1c3BsdXMgKi8KKwordHlwZWRlZiBzdHJ1Y3QgeworICB1bnNpZ25lZCBjaGFyIG5vdGU7ICAgICAvKiBzdGFuZGFyZCBNSURJIHZhbHVlcyAoMCBtZWFucyBzaWxlbmNlKSAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAxIHRocm91Z2ggMTI3IGFyZSBzZW1pdG9uZXMsIDYwIGlzIG1pZGRsZSBDICovCisgIHVuc2lnbmVkIGNoYXIgZHVyYXRpb247IC8qIG1pbGxpc2Vjb25kcyAoMCBtZWFucyBzdG9wKSAqLworfSBOb3RlRWxlbWVudDsKKworI2RlZmluZSBOT1RFX1BMQVkoZHVyYXRpb24sbm90ZSkge25vdGUsIGR1cmF0aW9ufQorI2RlZmluZSBOT1RFX1JFU1QoZHVyYXRpb24pIE5PVEVfUExBWShkdXJhdGlvbiwgMCkKKyNkZWZpbmUgTk9URV9TVE9QKCkgTk9URV9SRVNUKDApCisKK3R5cGVkZWYgc3RydWN0IHsKKyAgTm90ZUZyZXF1ZW5jeSBmcmVxdWVuY3k7IC8qIEhlcnR6ICgwIG1lYW5zIHNpbGVuY2UpICovCisgIGludCBkdXJhdGlvbjsgICAgICAgIC8qIG1pbGxpc2Vjb25kcyAoMCBtZWFucyBzdG9wKSAqLworfSBUb25lRWxlbWVudDsKKworI2RlZmluZSBUT05FX1BMQVkoZHVyYXRpb24sZnJlcXVlbmN5KSB7ZnJlcXVlbmN5LCBkdXJhdGlvbn0KKyNkZWZpbmUgVE9ORV9SRVNUKGR1cmF0aW9uKSBUT05FX1BMQVkoZHVyYXRpb24sIDApCisjZGVmaW5lIFRPTkVfU1RPUCgpIFRPTkVfUkVTVCgwKQorCitleHRlcm4gdm9pZCBzdXBwcmVzc1R1bmVEZXZpY2VPcGVuRXJyb3JzICh2b2lkKTsKKworZXh0ZXJuIGludCB0dW5lU2V0RGV2aWNlIChUdW5lRGV2aWNlIGRldmljZSk7CitleHRlcm4gdm9pZCB0dW5lUGxheU5vdGVzIChjb25zdCBOb3RlRWxlbWVudCAqdHVuZSk7CitleHRlcm4gdm9pZCB0dW5lUGxheVRvbmVzIChjb25zdCBUb25lRWxlbWVudCAqdHVuZSk7CitleHRlcm4gdm9pZCB0dW5lV2FpdCAoaW50IHRpbWUpOworZXh0ZXJuIHZvaWQgdHVuZVN5bmNocm9uaXplICh2b2lkKTsKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYgLyogX19jcGx1c3BsdXMgKi8KKworI2VuZGlmIC8qIEJSTFRUWV9JTkNMVURFRF9UVU5FICovCmRpZmYgLS1naXQgYS9IZWFkZXJzL3R1bmVfYnVpbGRlci5oIGIvSGVhZGVycy90dW5lX2J1aWxkZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MjRlODcwCi0tLSAvZGV2L251bGwKKysrIGIvSGVhZGVycy90dW5lX2J1aWxkZXIuaApAQCAtMCwwICsxLDYwIEBACisvKgorICogQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyAqICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyAqCisgKiBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorICoKKyAqIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyAqCisgKiBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisgKi8KKworI2lmbmRlZiBCUkxUVFlfSU5DTFVERURfVFVORV9CVUlMREVSCisjZGVmaW5lIEJSTFRUWV9JTkNMVURFRF9UVU5FX0JVSUxERVIKKworI2luY2x1ZGUgImNtZGxpbmVfdHlwZXMuaCIKKyNpbmNsdWRlICJ0dW5lLmgiCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYgLyogX19jcGx1c3BsdXMgKi8KKworI2RlZmluZSBOT1RFU19QRVJfU0NBTEUgNworCit0eXBlZGVmIGVudW0geworICBUVU5FX1NUQVRVU19PSywKKyAgVFVORV9TVEFUVVNfU1lOVEFYLAorICBUVU5FX1NUQVRVU19GQVRBTAorfSBUdW5lU3RhdHVzOworCit0eXBlZGVmIHN0cnVjdCBUdW5lQnVpbGRlclN0cnVjdCBUdW5lQnVpbGRlcjsKK2V4dGVybiBERUNMQVJFX1VTQUdFX05PVEVTKHR1bmVCdWlsZGVyVXNhZ2VOb3Rlcyk7CisKK2V4dGVybiBUdW5lQnVpbGRlciAqbmV3VHVuZUJ1aWxkZXIodm9pZCk7CitleHRlcm4gdm9pZCByZXNldFR1bmVCdWlsZGVyKFR1bmVCdWlsZGVyICp0dW5lKTsKK2V4dGVybiB2b2lkIGRlc3Ryb3lUdW5lQnVpbGRlcihUdW5lQnVpbGRlciAqdGIpOworCitleHRlcm4gVHVuZVN0YXR1cyBnZXRUdW5lU3RhdHVzKFR1bmVCdWlsZGVyICp0Yik7CitleHRlcm4gdm9pZCBzZXRUdW5lU291cmNlTmFtZShUdW5lQnVpbGRlciAqdGIsIGNvbnN0IGNoYXIgKm5hbWUpOworZXh0ZXJuIHZvaWQgc2V0VHVuZVNvdXJjZUluZGV4KFR1bmVCdWlsZGVyICp0YiwgdW5zaWduZWQgaW50IGluZGV4KTsKK2V4dGVybiB2b2lkIGluY3JlbWVudFR1bmVTb3VyY2VJbmRleChUdW5lQnVpbGRlciAqdGIpOworCitleHRlcm4gaW50IHBhcnNlVHVuZVN0cmluZyhUdW5lQnVpbGRlciAqdHVuZSwgY29uc3QgY2hhciAqc3RyaW5nKTsKK2V4dGVybiBpbnQgcGFyc2VUdW5lVGV4dChUdW5lQnVpbGRlciAqdHVuZSwgY29uc3Qgd2NoYXJfdCAqdGV4dCk7CitleHRlcm4gVG9uZUVsZW1lbnQgKmdldFR1bmUoVHVuZUJ1aWxkZXIgKnR1bmUpOworCitleHRlcm4gaW50IGFkZFRvbmUoVHVuZUJ1aWxkZXIgKnR1bmUsIGNvbnN0IFRvbmVFbGVtZW50ICp0b25lKTsKK2V4dGVybiBpbnQgYWRkTm90ZShUdW5lQnVpbGRlciAqdHVuZSwgdW5zaWduZWQgY2hhciBub3RlLCBpbnQgZHVyYXRpb24pOworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZiAvKiBfX2NwbHVzcGx1cyAqLworCisjZW5kaWYgLyogQlJMVFRZX0lOQ0xVREVEX1RVTkVfQlVJTERFUiAqLwpkaWZmIC0tZ2l0IGEvSGVhZGVycy90dW5lX3R5cGVzLmggYi9IZWFkZXJzL3R1bmVfdHlwZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYmNkNjE2Ci0tLSAvZGV2L251bGwKKysrIGIvSGVhZGVycy90dW5lX3R5cGVzLmgKQEAgLTAsMCArMSwzNyBAQAorLyoKKyAqIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisgKiAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisgKgorICogQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKKyNpZm5kZWYgQlJMVFRZX0lOQ0xVREVEX1RVTkVfVFlQRVMKKyNkZWZpbmUgQlJMVFRZX0lOQ0xVREVEX1RVTkVfVFlQRVMKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZiAvKiBfX2NwbHVzcGx1cyAqLworCit0eXBlZGVmIGVudW0geworICB0ZEJlZXBlciwKKyAgdGRQY20sCisgIHRkTWlkaSwKKyAgdGRGbQorfSBUdW5lRGV2aWNlOworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZiAvKiBfX2NwbHVzcGx1cyAqLworCisjZW5kaWYgLyogQlJMVFRZX0lOQ0xVREVEX1RVTkVfVFlQRVMgKi8KZGlmZiAtLWdpdCBhL0hlYWRlcnMvdHVuZV91dGlscy5oIGIvSGVhZGVycy90dW5lX3V0aWxzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzA2MzBlNAotLS0gL2Rldi9udWxsCisrKyBiL0hlYWRlcnMvdHVuZV91dGlscy5oCkBAIC0wLDAgKzEsMzkgQEAKKy8qCisgKiBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorICogICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorICoKKyAqIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorICoKKyAqIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyAqLworCisjaWZuZGVmIEJSTFRUWV9JTkNMVURFRF9UVU5FX1VUSUxTCisjZGVmaW5lIEJSTFRUWV9JTkNMVURFRF9UVU5FX1VUSUxTCisKKyNpbmNsdWRlICJ0dW5lX3R5cGVzLmgiCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYgLyogX19jcGx1c3BsdXMgKi8KKworZXh0ZXJuIGNvbnN0IGNoYXIgKmdldFR1bmVEZXZpY2VOYW1lIChUdW5lRGV2aWNlIGRldmljZSk7CitleHRlcm4gaW50IHBhcnNlVHVuZURldmljZSAoY29uc3QgY2hhciAqc2V0dGluZyk7CitleHRlcm4gaW50IHNldFR1bmVEZXZpY2UgKHZvaWQpOworCitleHRlcm4gaW50IHBhcnNlVHVuZVZvbHVtZSAoY29uc3QgY2hhciAqc2V0dGluZyk7CitleHRlcm4gaW50IHBhcnNlVHVuZUluc3RydW1lbnQgKGNvbnN0IGNoYXIgKnNldHRpbmcpOworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZiAvKiBfX2NwbHVzcGx1cyAqLworCisjZW5kaWYgLyogQlJMVFRZX0lOQ0xVREVEX1RVTkVfVVRJTFMgKi8KZGlmZiAtLWdpdCBhL0hlYWRlcnMvdW5pY29kZS5oIGIvSGVhZGVycy91bmljb2RlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGVkZTFhYQotLS0gL2Rldi9udWxsCisrKyBiL0hlYWRlcnMvdW5pY29kZS5oCkBAIC0wLDAgKzEsMTA4IEBACisvKgorICogQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyAqICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyAqCisgKiBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorICoKKyAqIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyAqCisgKiBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisgKi8KKworI2lmbmRlZiBCUkxUVFlfSU5DTFVERURfVU5JQ09ERQorI2RlZmluZSBCUkxUVFlfSU5DTFVERURfVU5JQ09ERQorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmIC8qIF9fY3BsdXNwbHVzICovCisKKyNpZmRlZiBIQVZFX1dDSEFSX0ggCisjZGVmaW5lIFVOSUNPREVfUkVQTEFDRU1FTlRfQ0hBUkFDVEVSIDBYRkZGRAorI2Vsc2UgLyogSEFWRV9XQ0hBUl9IICovCisjZGVmaW5lIFVOSUNPREVfUkVQTEFDRU1FTlRfQ0hBUkFDVEVSICc/JworI2VuZGlmIC8qIEhBVkVfV0NIQVJfSCAqLworCisjZGVmaW5lIFVOSUNPREVfWkVST19XSURUSF9TUEFDRSAwWDIwMEIKKyNkZWZpbmUgVU5JQ09ERV9CWVRFX09SREVSX01BUksgMFhGRUZGCisjZGVmaW5lIFVOSUNPREVfTEFTVF9DSEFSQUNURVIgMFgxMEZFRkYKKworI2RlZmluZSBVTklDT0RFX0JSQUlMTEVfUk9XIDBYMjgwMAorCisjZGVmaW5lIFVOSUNPREVfU1VSUk9HQVRFX0JFR0lOIDBYRDgwMAorI2RlZmluZSBVTklDT0RFX1NVUlJPR0FURV9FTkQgMFhERkZGCisjZGVmaW5lIFVOSUNPREVfU1VSUk9HQVRFX1NISUZUIDEwCisjZGVmaW5lIFVOSUNPREVfU1VSUk9HQVRFX0xPVyAoMSA8PCBVTklDT0RFX1NVUlJPR0FURV9TSElGVCkKKyNkZWZpbmUgVU5JQ09ERV9TVVJST0dBVEVfTUFTSyAoVU5JQ09ERV9TVVJST0dBVEVfTE9XIC0gMSkKKworI2RlZmluZSBVTklDT0RFX0NFTExfQklUUyA4CisjZGVmaW5lIFVOSUNPREVfUk9XX0JJVFMgOAorI2RlZmluZSBVTklDT0RFX1BMQU5FX0JJVFMgOAorI2RlZmluZSBVTklDT0RFX0dST1VQX0JJVFMgNworCisjZGVmaW5lIFVOSUNPREVfQ0VMTF9TSElGVCAwCisjZGVmaW5lIFVOSUNPREVfUk9XX1NISUZUIChVTklDT0RFX0NFTExfU0hJRlQgKyBVTklDT0RFX0NFTExfQklUUykKKyNkZWZpbmUgVU5JQ09ERV9QTEFORV9TSElGVCAoVU5JQ09ERV9ST1dfU0hJRlQgKyBVTklDT0RFX1JPV19CSVRTKQorI2RlZmluZSBVTklDT0RFX0dST1VQX1NISUZUIChVTklDT0RFX1BMQU5FX1NISUZUICsgVU5JQ09ERV9QTEFORV9CSVRTKQorCisjZGVmaW5lIFVOSUNPREVfQ0VMTFNfUEVSX1JPVyAoMSA8PCBVTklDT0RFX0NFTExfQklUUykKKyNkZWZpbmUgVU5JQ09ERV9ST1dTX1BFUl9QTEFORSAoMSA8PCBVTklDT0RFX1JPV19CSVRTKQorI2RlZmluZSBVTklDT0RFX1BMQU5FU19QRVJfR1JPVVAgKDEgPDwgVU5JQ09ERV9QTEFORV9CSVRTKQorI2RlZmluZSBVTklDT0RFX0dST1VQX0NPVU5UICgxIDw8IFVOSUNPREVfR1JPVVBfQklUUykKKworI2RlZmluZSBVTklDT0RFX0NFTExfTUFYSU1VTSAoVU5JQ09ERV9DRUxMU19QRVJfUk9XIC0gMSkKKyNkZWZpbmUgVU5JQ09ERV9ST1dfTUFYSU1VTSAoVU5JQ09ERV9ST1dTX1BFUl9QTEFORSAtIDEpCisjZGVmaW5lIFVOSUNPREVfUExBTkVfTUFYSU1VTSAoVU5JQ09ERV9QTEFORVNfUEVSX0dST1VQIC0gMSkKKyNkZWZpbmUgVU5JQ09ERV9HUk9VUF9NQVhJTVVNIChVTklDT0RFX0dST1VQX0NPVU5UIC0gMSkKKworI2RlZmluZSBVTklDT0RFX0NFTExfTUFTSyAoVU5JQ09ERV9DRUxMX01BWElNVU0gPDwgVU5JQ09ERV9DRUxMX1NISUZUKQorI2RlZmluZSBVTklDT0RFX1JPV19NQVNLIChVTklDT0RFX1JPV19NQVhJTVVNIDw8IFVOSUNPREVfUk9XX1NISUZUKQorI2RlZmluZSBVTklDT0RFX1BMQU5FX01BU0sgKFVOSUNPREVfUExBTkVfTUFYSU1VTSA8PCBVTklDT0RFX1BMQU5FX1NISUZUKQorI2RlZmluZSBVTklDT0RFX0dST1VQX01BU0sgKFVOSUNPREVfR1JPVVBfTUFYSU1VTSA8PCBVTklDT0RFX0dST1VQX1NISUZUKQorI2RlZmluZSBVTklDT0RFX0NIQVJBQ1RFUl9NQVNLIChVTklDT0RFX0NFTExfTUFTSyB8IFVOSUNPREVfUk9XX01BU0sgfCBVTklDT0RFX1BMQU5FX01BU0sgfCBVTklDT0RFX0dST1VQX01BU0spCisKKyNkZWZpbmUgVU5JQ09ERV9DRUxMX05VTUJFUihjKSAoKChjKSAmIFVOSUNPREVfQ0VMTF9NQVNLKSA+PiBVTklDT0RFX0NFTExfU0hJRlQpCisjZGVmaW5lIFVOSUNPREVfUk9XX05VTUJFUihjKSAoKChjKSAmIFVOSUNPREVfUk9XX01BU0spID4+IFVOSUNPREVfUk9XX1NISUZUKQorI2RlZmluZSBVTklDT0RFX1BMQU5FX05VTUJFUihjKSAoKChjKSAmIFVOSUNPREVfUExBTkVfTUFTSykgPj4gVU5JQ09ERV9QTEFORV9TSElGVCkKKyNkZWZpbmUgVU5JQ09ERV9HUk9VUF9OVU1CRVIoYykgKCgoYykgJiBVTklDT0RFX0dST1VQX01BU0spID4+IFVOSUNPREVfR1JPVVBfU0hJRlQpCisjZGVmaW5lIFVOSUNPREVfQ0hBUkFDVEVSKGdyb3VwLHBsYW5lLHJvdyxjZWxsKSAoKChncm91cCkgPDwgVU5JQ09ERV9HUk9VUF9TSElGVCkgfCAoKHBsYW5lKSA8PCBVTklDT0RFX1BMQU5FX1NISUZUKSB8ICgocm93KSA8PCBVTklDT0RFX1JPV19TSElGVCkgfCAoKGNlbGwpIDw8IFVOSUNPREVfQ0VMTF9TSElGVCkpCisKK2V4dGVybiBpbnQgZ2V0Q2hhcmFjdGVyTmFtZSAod2NoYXJfdCBjaGFyYWN0ZXIsIGNoYXIgKmJ1ZmZlciwgc2l6ZV90IHNpemUpOworZXh0ZXJuIGludCBnZXRDaGFyYWN0ZXJCeU5hbWUgKHdjaGFyX3QgKmNoYXJhY3RlciwgY29uc3QgY2hhciAqbmFtZSk7CisKK2V4dGVybiBpbnQgZ2V0Q2hhcmFjdGVyQWxpYXMgKHdjaGFyX3QgY2hhcmFjdGVyLCBjaGFyICpidWZmZXIsIHNpemVfdCBzaXplKTsKK2V4dGVybiBpbnQgZ2V0Q2hhcmFjdGVyQnlBbGlhcyAod2NoYXJfdCAqY2hhcmFjdGVyLCBjb25zdCBjaGFyICphbGlhcyk7CisKK2V4dGVybiBpbnQgZ2V0Q2hhcmFjdGVyV2lkdGggKHdjaGFyX3QgY2hhcmFjdGVyKTsKKworZXh0ZXJuIGludCBpc0JyYWlsbGVDaGFyYWN0ZXIgKHdjaGFyX3QgY2hhcmFjdGVyKTsKK2V4dGVybiBpbnQgaXNJZGVvZ3JhcGhpY0NoYXJhY3RlciAod2NoYXJfdCBjaGFyYWN0ZXIpOworZXh0ZXJuIGludCBpc0Vtb2ppU2VxdWVuY2UgKGNvbnN0IHdjaGFyX3QgKmNoYXJhY3RlcnMsIHNpemVfdCBjb3VudCk7CitleHRlcm4gd2NoYXJfdCBnZXRSZXBsYWNlbWVudENoYXJhY3RlciAodm9pZCk7CisKK2V4dGVybiBpbnQgY29tcG9zZUNoYXJhY3RlcnMgKAorICBzaXplX3QgKmxlbmd0aCwgY29uc3Qgd2NoYXJfdCAqY2hhcmFjdGVycywKKyAgd2NoYXJfdCAqYnVmZmVyLCB1bnNpZ25lZCBpbnQgKm1hcAorKTsKKworZXh0ZXJuIHNpemVfdCBkZWNvbXBvc2VDaGFyYWN0ZXIgKAorICB3Y2hhcl90IGNoYXJhY3Rlciwgd2NoYXJfdCAqYnVmZmVyLCBzaXplX3QgbGVuZ3RoCispOworCitleHRlcm4gd2NoYXJfdCBnZXRCYXNlQ2hhcmFjdGVyICh3Y2hhcl90IGNoYXJhY3Rlcik7CitleHRlcm4gd2NoYXJfdCBnZXRUcmFuc2xpdGVyYXRlZENoYXJhY3RlciAod2NoYXJfdCBjaGFyYWN0ZXIpOworCit0eXBlZGVmIGludCBDaGFyYWN0ZXJIYW5kbGVyICh3Y2hhcl90IGNoYXJhY3Rlciwgdm9pZCAqZGF0YSk7CitleHRlcm4gaW50IGhhbmRsZUJlc3RDaGFyYWN0ZXIgKHdjaGFyX3QgY2hhcmFjdGVyLCBDaGFyYWN0ZXJIYW5kbGVyIGhhbmRsZUNoYXJhY3Rlciwgdm9pZCAqZGF0YSk7CisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmIC8qIF9fY3BsdXNwbHVzICovCisKKyNlbmRpZiAvKiBCUkxUVFlfSU5DTFVERURfVU5JQ09ERSAqLwpkaWZmIC0tZ2l0IGEvSGVhZGVycy91c2JfaGlkLmggYi9IZWFkZXJzL3VzYl9oaWQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZWEwMjQzCi0tLSAvZGV2L251bGwKKysrIGIvSGVhZGVycy91c2JfaGlkLmgKQEAgLTAsMCArMSw5MiBAQAorLyoKKyAqIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisgKiAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisgKgorICogQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKKyNpZm5kZWYgQlJMVFRZX0lOQ0xVREVEX1VTQl9ISUQKKyNkZWZpbmUgQlJMVFRZX0lOQ0xVREVEX1VTQl9ISUQKKworI2luY2x1ZGUgImhpZF90eXBlcy5oIgorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmIC8qIF9fY3BsdXNwbHVzICovCisKK3R5cGVkZWYgZW51bSB7CisgIFVzYkhpZFJlcXVlc3RfR2V0UmVwb3J0ICAgPSAwWDAxLAorICBVc2JIaWRSZXF1ZXN0X0dldElkbGUgICAgID0gMFgwMiwKKyAgVXNiSGlkUmVxdWVzdF9HZXRQcm90b2NvbCA9IDBYMDMsCisgIFVzYkhpZFJlcXVlc3RfU2V0UmVwb3J0ICAgPSAwWDA5LAorICBVc2JIaWRSZXF1ZXN0X1NldElkbGUgICAgID0gMFgwQSwKKyAgVXNiSGlkUmVxdWVzdF9TZXRQcm90b2NvbCA9IDBYMEIKK30gVXNiSGlkUmVxdWVzdDsKKwordHlwZWRlZiBlbnVtIHsKKyAgVXNiSGlkUmVwb3J0VHlwZV9JbnB1dCAgID0gMFgwMSwKKyAgVXNiSGlkUmVwb3J0VHlwZV9PdXRwdXQgID0gMFgwMiwKKyAgVXNiSGlkUmVwb3J0VHlwZV9GZWF0dXJlID0gMFgwMworfSBVc2JIaWRSZXBvcnRUeXBlOworCitleHRlcm4gY29uc3QgVXNiSGlkRGVzY3JpcHRvciAqdXNiSGlkRGVzY3JpcHRvciAoVXNiRGV2aWNlICpkZXZpY2UpOworCitleHRlcm4gSGlkSXRlbXNEZXNjcmlwdG9yICp1c2JIaWRHZXRJdGVtcyAoCisgIFVzYkRldmljZSAqZGV2aWNlLAorICB1bnNpZ25lZCBjaGFyIGludGVyZmFjZSwKKyAgdW5zaWduZWQgY2hhciBudW1iZXIsCisgIGludCB0aW1lb3V0CispOworCitleHRlcm4gc3NpemVfdCB1c2JIaWRHZXRSZXBvcnQgKAorICBVc2JEZXZpY2UgKmRldmljZSwKKyAgdW5zaWduZWQgY2hhciBpbnRlcmZhY2UsCisgIEhpZFJlcG9ydElkZW50aWZpZXIgaWRlbnRpZmllciwKKyAgdW5zaWduZWQgY2hhciAqYnVmZmVyLAorICB1aW50MTZfdCBzaXplLAorICBpbnQgdGltZW91dAorKTsKKworZXh0ZXJuIHNzaXplX3QgdXNiSGlkU2V0UmVwb3J0ICgKKyAgVXNiRGV2aWNlICpkZXZpY2UsCisgIHVuc2lnbmVkIGNoYXIgaW50ZXJmYWNlLAorICBIaWRSZXBvcnRJZGVudGlmaWVyIGlkZW50aWZpZXIsCisgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGEsCisgIHVpbnQxNl90IGxlbmd0aCwKKyAgaW50IHRpbWVvdXQKKyk7CisKK2V4dGVybiBzc2l6ZV90IHVzYkhpZEdldEZlYXR1cmUgKAorICBVc2JEZXZpY2UgKmRldmljZSwKKyAgdW5zaWduZWQgY2hhciBpbnRlcmZhY2UsCisgIEhpZFJlcG9ydElkZW50aWZpZXIgaWRlbnRpZmllciwKKyAgdW5zaWduZWQgY2hhciAqYnVmZmVyLAorICB1aW50MTZfdCBzaXplLAorICBpbnQgdGltZW91dAorKTsKKworZXh0ZXJuIHNzaXplX3QgdXNiSGlkU2V0RmVhdHVyZSAoCisgIFVzYkRldmljZSAqZGV2aWNlLAorICB1bnNpZ25lZCBjaGFyIGludGVyZmFjZSwKKyAgSGlkUmVwb3J0SWRlbnRpZmllciBpZGVudGlmaWVyLAorICBjb25zdCB1bnNpZ25lZCBjaGFyICpkYXRhLAorICB1aW50MTZfdCBsZW5ndGgsCisgIGludCB0aW1lb3V0CispOworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZiAvKiBfX2NwbHVzcGx1cyAqLworCisjZW5kaWYgLyogQlJMVFRZX0lOQ0xVREVEX1VTQl9ISUQgKi8KZGlmZiAtLWdpdCBhL0hlYWRlcnMvdXNiX3R5cGVzLmggYi9IZWFkZXJzL3VzYl90eXBlcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIzZGM3MDkKLS0tIC9kZXYvbnVsbAorKysgYi9IZWFkZXJzL3VzYl90eXBlcy5oCkBAIC0wLDAgKzEsMzI1IEBACisvKgorICogQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyAqICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyAqCisgKiBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorICoKKyAqIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyAqCisgKiBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisgKi8KKworI2lmbmRlZiBCUkxUVFlfSU5DTFVERURfVVNCX1RZUEVTCisjZGVmaW5lIEJSTFRUWV9JTkNMVURFRF9VU0JfVFlQRVMKKworI2luY2x1ZGUgInNlcmlhbF90eXBlcy5oIgorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmIC8qIF9fY3BsdXNwbHVzICovCisKKy8qIERlc2NyaXB0b3IgdHlwZXMuICovCit0eXBlZGVmIGVudW0geworICBVc2JEZXNjcmlwdG9yVHlwZV9EZXZpY2UgICAgICAgID0gMFgwMSwKKyAgVXNiRGVzY3JpcHRvclR5cGVfQ29uZmlndXJhdGlvbiA9IDBYMDIsCisgIFVzYkRlc2NyaXB0b3JUeXBlX1N0cmluZyAgICAgICAgPSAwWDAzLAorICBVc2JEZXNjcmlwdG9yVHlwZV9JbnRlcmZhY2UgICAgID0gMFgwNCwKKyAgVXNiRGVzY3JpcHRvclR5cGVfRW5kcG9pbnQgICAgICA9IDBYMDUsCisgIFVzYkRlc2NyaXB0b3JUeXBlX0hJRCAgICAgICAgICAgPSAwWDIxLAorICBVc2JEZXNjcmlwdG9yVHlwZV9SZXBvcnQgICAgICAgID0gMFgyMgorfSBVc2JEZXNjcmlwdG9yVHlwZTsKKworLyogRGVzY3JpcHRvciBzaXplcy4gKi8KK3R5cGVkZWYgZW51bSB7CisgIFVzYkRlc2NyaXB0b3JTaXplX0RldmljZSAgICAgICAgPSAxOCwKKyAgVXNiRGVzY3JpcHRvclNpemVfQ29uZmlndXJhdGlvbiA9ICA5LAorICBVc2JEZXNjcmlwdG9yU2l6ZV9TdHJpbmcgICAgICAgID0gIDIsCisgIFVzYkRlc2NyaXB0b3JTaXplX0ludGVyZmFjZSAgICAgPSAgOSwKKyAgVXNiRGVzY3JpcHRvclNpemVfRW5kcG9pbnQgICAgICA9ICA3LAorICBVc2JEZXNjcmlwdG9yU2l6ZV9ISUQgICAgICAgICAgID0gIDYsCisgIFVzYkRlc2NyaXB0b3JTaXplX0NsYXNzICAgICAgICAgPSAgMworfSBVc2JEZXNjcmlwdG9yU2l6ZTsKKwordHlwZWRlZiBlbnVtIHsKKyAgVXNiU3BlY2lmaWNhdGlvblZlcnNpb25fMV8wID0gMFgwMTAwLAorICBVc2JTcGVjaWZpY2F0aW9uVmVyc2lvbl8xXzEgPSAwWDAxMTAsCisgIFVzYlNwZWNpZmljYXRpb25WZXJzaW9uXzJfMCA9IDBYMDIwMCwKKyAgVXNiU3BlY2lmaWNhdGlvblZlcnNpb25fM18wID0gMFgwMzAwCit9IFVzYlNwZWNpZmljYXRpb25WZXJzaW9uOworCisvKiBDb25maWd1cmF0aW9uIGF0dHJpYnV0ZXMgKGJtQXR0cmlidXRlcykuICovCit0eXBlZGVmIGVudW0geworICBVc2JDb25maWd1cmF0aW9uQXR0cmlidXRlX0J1c1Bvd2VyZWQgICA9IDBYODAsCisgIFVzYkNvbmZpZ3VyYXRpb25BdHRyaWJ1dGVfU2VsZlBvd2VyZWQgID0gMFg0MCwKKyAgVXNiQ29uZmlndXJhdGlvbkF0dHJpYnV0ZV9SZW1vdGVXYWtldXAgPSAwWDIwCit9IFVzYkNvbmZpZ3VyYXRpb25BdHRyaWJ1dGU7CisKKy8qIERldmljZSBhbmQgaW50ZXJmYWNlIGNsYXNzZXMgKGJEZXZpY2VDbGFzcywgYkludGVyZmFjZUNsYXNzKS4gKi8KK3R5cGVkZWYgZW51bSB7CisgIFVzYkNsYXNzX1BlckludGVyZmFjZSA9IDBYMDAsCisgIFVzYkNsYXNzX0F1ZGlvICAgICAgICA9IDBYMDEsCisgIFVzYkNsYXNzX0NvbW0gICAgICAgICA9IDBYMDIsCisgIFVzYkNsYXNzX0hpZCAgICAgICAgICA9IDBYMDMsCisgIFVzYkNsYXNzX1BoeXNpY2FsICAgICA9IDBYMDUsCisgIFVzYkNsYXNzX1ByaW50ZXIgICAgICA9IDBYMDcsCisgIFVzYkNsYXNzX01hc3NTdG9yYWdlICA9IDBYMDgsCisgIFVzYkNsYXNzX0h1YiAgICAgICAgICA9IDBYMDksCisgIFVzYkNsYXNzX0RhdGEgICAgICAgICA9IDBYMEEsCisgIFVzYkNsYXNzX0FwcFNwZWMgICAgICA9IDBYRkUsCisgIFVzYkNsYXNzX1ZlbmRvclNwZWMgICA9IDBYRkYKK30gVXNiQ2xhc3M7CisKKy8qIEVuZHBvaW50IG51bWJlcnMgKGJFbmRwb2ludEFkZHJlc3MpLiAqLwordHlwZWRlZiBlbnVtIHsKKyAgVXNiRW5kcG9pbnROdW1iZXJfTWFzayA9IDBYMEYKK30gVXNiRW5kcG9pbnROdW1iZXI7CisjZGVmaW5lIFVTQl9FTkRQT0lOVF9OVU1CRVIoZGVzY3JpcHRvcikgKChkZXNjcmlwdG9yKS0+YkVuZHBvaW50QWRkcmVzcyAmIFVzYkVuZHBvaW50TnVtYmVyX01hc2spCisKKy8qIEVuZHBvaW50IGRpcmVjdGlvbnMgKGJFbmRwb2ludEFkZHJlc3MpLiAqLwordHlwZWRlZiBlbnVtIHsKKyAgVXNiRW5kcG9pbnREaXJlY3Rpb25fT3V0cHV0ID0gMFgwMCwKKyAgVXNiRW5kcG9pbnREaXJlY3Rpb25fSW5wdXQgID0gMFg4MCwKKyAgVXNiRW5kcG9pbnREaXJlY3Rpb25fTWFzayAgID0gMFg4MAorfSBVc2JFbmRwb2ludERpcmVjdGlvbjsKKyNkZWZpbmUgVVNCX0VORFBPSU5UX0RJUkVDVElPTihkZXNjcmlwdG9yKSAoKGRlc2NyaXB0b3IpLT5iRW5kcG9pbnRBZGRyZXNzICYgVXNiRW5kcG9pbnREaXJlY3Rpb25fTWFzaykKKworLyogRW5kcG9pbnQgdHJhbnNmZXIgdHlwZXMgKGJtQXR0cmlidXRlcykuICovCit0eXBlZGVmIGVudW0geworICBVc2JFbmRwb2ludFRyYW5zZmVyX0NvbnRyb2wgICAgID0gMFgwMCwKKyAgVXNiRW5kcG9pbnRUcmFuc2Zlcl9Jc29jaHJvbm91cyA9IDBYMDEsCisgIFVzYkVuZHBvaW50VHJhbnNmZXJfQnVsayAgICAgICAgPSAwWDAyLAorICBVc2JFbmRwb2ludFRyYW5zZmVyX0ludGVycnVwdCAgID0gMFgwMywKKyAgVXNiRW5kcG9pbnRUcmFuc2Zlcl9NYXNrICAgICAgICA9IDBYMDMKK30gVXNiRW5kcG9pbnRUcmFuc2ZlcjsKKyNkZWZpbmUgVVNCX0VORFBPSU5UX1RSQU5TRkVSKGRlc2NyaXB0b3IpICgoZGVzY3JpcHRvciktPmJtQXR0cmlidXRlcyAmIFVzYkVuZHBvaW50VHJhbnNmZXJfTWFzaykKKworLyogRW5kcG9pbnQgaXNvY2hyb25vdXMgdHlwZXMgKGJtQXR0cmlidXRlcykuICovCit0eXBlZGVmIGVudW0geworICBVc2JFbmRwb2ludElzb2Nocm9ub3VzX0FzeW5jaHJvbm91cyA9IDBYMDQsCisgIFVzYkVuZHBvaW50SXNvY2hyb25vdXNfQWRhcHRhYmxlICAgID0gMFgwOCwKKyAgVXNiRW5kcG9pbnRJc29jaHJvbm91c19TeW5jaHJvbm91cyAgPSAwWDBDLAorICBVc2JFbmRwb2ludElzb2Nocm9ub3VzX01hc2sgICAgICAgICA9IDBYMEMKK30gVXNiRW5kcG9pbnRJc29jaHJvbm91czsKKyNkZWZpbmUgVVNCX0VORFBPSU5UX0lTT0NIUk9OT1VTKGRlc2NyaXB0b3IpICgoZGVzY3JpcHRvciktPmJtQXR0cmlidXRlcyAmIFVzYkVuZHBvaW50SXNvY2hyb25vdXNfTWFzaykKKworLyogQ29udHJvbCB0cmFuc2ZlciByZWNpcGllbnRzLiAqLwordHlwZWRlZiBlbnVtIHsKKyAgVXNiQ29udHJvbFJlY2lwaWVudF9EZXZpY2UgICAgPSAwWDAwLAorICBVc2JDb250cm9sUmVjaXBpZW50X0ludGVyZmFjZSA9IDBYMDEsCisgIFVzYkNvbnRyb2xSZWNpcGllbnRfRW5kcG9pbnQgID0gMFgwMiwKKyAgVXNiQ29udHJvbFJlY2lwaWVudF9PdGhlciAgICAgPSAwWDAzLAorICBVc2JDb250cm9sUmVjaXBpZW50X01hc2sgICAgICA9IDBYMUYKK30gVXNiQ29udHJvbFJlY2lwaWVudDsKKworLyogQ29udHJvbCB0cmFuc2ZlciB0eXBlcy4gKi8KK3R5cGVkZWYgZW51bSB7CisgIFVzYkNvbnRyb2xUeXBlX1N0YW5kYXJkID0gMFgwMCwKKyAgVXNiQ29udHJvbFR5cGVfQ2xhc3MgICAgPSAwWDIwLAorICBVc2JDb250cm9sVHlwZV9WZW5kb3IgICA9IDBYNDAsCisgIFVzYkNvbnRyb2xUeXBlX1Jlc2VydmVkID0gMFg2MCwKKyAgVXNiQ29udHJvbFR5cGVfTWFzayAgICAgPSAwWDYwCit9IFVzYkNvbnRyb2xUeXBlOworCisvKiBUcmFuc2ZlciBkaXJlY3Rpb25zLiAqLwordHlwZWRlZiBlbnVtIHsKKyAgVXNiQ29udHJvbERpcmVjdGlvbl9PdXRwdXQgPSAwWDAwLAorICBVc2JDb250cm9sRGlyZWN0aW9uX0lucHV0ICA9IDBYODAsCisgIFVzYkNvbnRyb2xEaXJlY3Rpb25fTWFzayAgID0gMFg4MAorfSBVc2JDb250cm9sRGlyZWN0aW9uOworCisvKiBTdGFuZGFyZCBjb250cm9sIHJlcXVlc3RzLiAqLwordHlwZWRlZiBlbnVtIHsKKyAgVXNiU3RhbmRhcmRSZXF1ZXN0X0dldFN0YXR1cyAgICAgICAgPSAwWDAwLAorICBVc2JTdGFuZGFyZFJlcXVlc3RfQ2xlYXJGZWF0dXJlICAgICA9IDBYMDEsCisgIFVzYlN0YW5kYXJkUmVxdWVzdF9HZXRTdGF0ZSAgICAgICAgID0gMFgwMiwKKyAgVXNiU3RhbmRhcmRSZXF1ZXN0X1NldEZlYXR1cmUgICAgICAgPSAwWDAzLAorICBVc2JTdGFuZGFyZFJlcXVlc3RfU2V0QWRkcmVzcyAgICAgICA9IDBYMDUsCisgIFVzYlN0YW5kYXJkUmVxdWVzdF9HZXREZXNjcmlwdG9yICAgID0gMFgwNiwKKyAgVXNiU3RhbmRhcmRSZXF1ZXN0X1NldERlc2NyaXB0b3IgICAgPSAwWDA3LAorICBVc2JTdGFuZGFyZFJlcXVlc3RfR2V0Q29uZmlndXJhdGlvbiA9IDBYMDgsCisgIFVzYlN0YW5kYXJkUmVxdWVzdF9TZXRDb25maWd1cmF0aW9uID0gMFgwOSwKKyAgVXNiU3RhbmRhcmRSZXF1ZXN0X0dldEludGVyZmFjZSAgICAgPSAwWDBBLAorICBVc2JTdGFuZGFyZFJlcXVlc3RfU2V0SW50ZXJmYWNlICAgICA9IDBYMEIsCisgIFVzYlN0YW5kYXJkUmVxdWVzdF9TeW5jaEZyYW1lICAgICAgID0gMFgwQworfSBVc2JTdGFuZGFyZFJlcXVlc3Q7CisKKy8qIFN0YW5kYXJkIGZlYXR1cmVzLiAqLwordHlwZWRlZiBlbnVtIHsKKyAgVXNiRmVhdHVyZV9FbmRwb2ludF9TdGFsbCAgICAgID0gMFgwMCwKKyAgVXNiRmVhdHVyZV9EZXZpY2VfUmVtb3RlV2FrZXVwID0gMFgwMQorfSBVc2JGZWF0dXJlOworCit0eXBlZGVmIHN0cnVjdCB7CisgIHVpbnQ4X3QgYkxlbmd0aDsgICAgICAgICAvKiBEZXNjcmlwdG9yIHNpemUgaW4gYnl0ZXMuICovCisgIHVpbnQ4X3QgYkRlc2NyaXB0b3JUeXBlOyAvKiBEZXNjcmlwdG9yIHR5cGUuICovCit9IFBBQ0tFRCBVc2JEZXNjcmlwdG9ySGVhZGVyOworCit0eXBlZGVmIHN0cnVjdCB7CisgIHVpbnQ4X3QgYkxlbmd0aDsgICAgICAgICAgICAvKiBEZXNjcmlwdG9yIHNpemUgaW4gYnl0ZXMgKDE4KS4gKi8KKyAgdWludDhfdCBiRGVzY3JpcHRvclR5cGU7ICAgIC8qIERlc2NyaXB0b3IgdHlwZSAoMSA9PSBkZXZpY2UpLiAqLworICB1aW50MTZfdCBiY2RVU0I7ICAgICAgICAgICAgLyogVVNCIHJldmlzaW9uIG51bWJlci4gKi8KKyAgdWludDhfdCBiRGV2aWNlQ2xhc3M7ICAgICAgIC8qIERldmljZSBjbGFzcy4gKi8KKyAgdWludDhfdCBiRGV2aWNlU3ViQ2xhc3M7ICAgIC8qIERldmljZSBzdWJjbGFzcy4gKi8KKyAgdWludDhfdCBiRGV2aWNlUHJvdG9jb2w7ICAgIC8qIERldmljZSBwcm90b2NvbC4gKi8KKyAgdWludDhfdCBiTWF4UGFja2V0U2l6ZTA7ICAgIC8qIE1heGltdW0gcGFja2V0IHNpemUgaW4gYnl0ZXMgZm9yIGVuZHBvaW50IDAuICovCisgIHVpbnQxNl90IGlkVmVuZG9yOyAgICAgICAgICAvKiBWZW5kb3IgaWRlbnRpZmllci4gKi8KKyAgdWludDE2X3QgaWRQcm9kdWN0OyAgICAgICAgIC8qIFByb2R1Y3QgaWRlbnRpZmllci4gKi8KKyAgdWludDE2X3QgYmNkRGV2aWNlOyAgICAgICAgIC8qIFByb2R1Y3QgcmV2aXNpb24gbnVtYmVyLiAqLworICB1aW50OF90IGlNYW51ZmFjdHVyZXI7ICAgICAgLyogU3RyaW5nIGluZGV4IGZvciBtYW51ZmFjdHVyZXIgbmFtZS4gKi8KKyAgdWludDhfdCBpUHJvZHVjdDsgICAgICAgICAgIC8qIFN0cmluZyBpbmRleCBmb3IgcHJvZHVjdCBkZXNjcmlwdGlvbi4gKi8KKyAgdWludDhfdCBpU2VyaWFsTnVtYmVyOyAgICAgIC8qIFN0cmluZyBpbmRleCBmb3Igc2VyaWFsIG51bWJlci4gKi8KKyAgdWludDhfdCBiTnVtQ29uZmlndXJhdGlvbnM7IC8qIE51bWJlciBvZiBjb25maWd1cmF0aW9ucy4gKi8KK30gUEFDS0VEIFVzYkRldmljZURlc2NyaXB0b3I7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgdWludDhfdCBiTGVuZ3RoOyAgICAgICAgICAgICAvKiBEZXNjcmlwdG9yIHNpemUgaW4gYnl0ZXMgKDkpLiAqLworICB1aW50OF90IGJEZXNjcmlwdG9yVHlwZTsgICAgIC8qIERlc2NyaXB0b3IgdHlwZSAoMiA9PSBjb25maWd1cmF0aW9uKS4gKi8KKyAgdWludDE2X3Qgd1RvdGFsTGVuZ3RoOyAgICAgICAvKiBCbG9jayBzaXplIGluIGJ5dGVzIGZvciBhbGwgZGVzY3JpcHRvcnMuICovCisgIHVpbnQ4X3QgYk51bUludGVyZmFjZXM7ICAgICAgLyogTnVtYmVyIG9mIGludGVyZmFjZXMuICovCisgIHVpbnQ4X3QgYkNvbmZpZ3VyYXRpb25WYWx1ZTsgLyogQ29uZmlndXJhdGlvbiBudW1iZXIuICovCisgIHVpbnQ4X3QgaUNvbmZpZ3VyYXRpb247ICAgICAgLyogU3RyaW5nIGluZGV4IGZvciBjb25maWd1cmF0aW9uIGRlc2NyaXB0aW9uLiAqLworICB1aW50OF90IGJtQXR0cmlidXRlczsgICAgICAgIC8qIENvbmZpZ3VyYXRpb24gYXR0cmlidXRlcy4gKi8KKyAgdWludDhfdCBiTWF4UG93ZXI7ICAgICAgICAgICAvKiBNYXhpbXVtIHBvd2VyIGluIDIgbWlsbGlhbXAgdW5pdHMuICovCit9IFBBQ0tFRCBVc2JDb25maWd1cmF0aW9uRGVzY3JpcHRvcjsKKwordHlwZWRlZiBzdHJ1Y3QgeworICB1aW50OF90IGJMZW5ndGg7ICAgICAgICAgLyogRGVzY3JpcHRvciBzaXplIGluIGJ5dGVzICgyICsgbnVtY2hhcnMvMikuICovCisgIHVpbnQ4X3QgYkRlc2NyaXB0b3JUeXBlOyAvKiBEZXNjcmlwdG9yIHR5cGUgKDMgPT0gc3RyaW5nKS4gKi8KKyAgdWludDE2X3Qgd0RhdGFbMTI3XTsgICAgIC8qIDE2LWJpdCBjaGFyYWN0ZXJzLiAqLworfSBQQUNLRUQgVXNiU3RyaW5nRGVzY3JpcHRvcjsKKwordHlwZWRlZiBzdHJ1Y3QgeworICB1aW50OF90IGJMZW5ndGg7ICAgICAgICAgICAgLyogRGVzY3JpcHRvciBzaXplIGluIGJ5dGVzICg5KS4gKi8KKyAgdWludDhfdCBiRGVzY3JpcHRvclR5cGU7ICAgIC8qIERlc2NyaXB0b3IgdHlwZSAoNCA9PSBpbnRlcmZhY2UpLiAqLworICB1aW50OF90IGJJbnRlcmZhY2VOdW1iZXI7ICAgLyogSW50ZXJmYWNlIG51bWJlci4gKi8KKyAgdWludDhfdCBiQWx0ZXJuYXRlU2V0dGluZzsgIC8qIEludGVyZmFjZSBhbHRlcm5hdGl2ZS4gKi8KKyAgdWludDhfdCBiTnVtRW5kcG9pbnRzOyAgICAgIC8qIE51bWJlciBvZiBlbmRwb2ludHMuICovCisgIHVpbnQ4X3QgYkludGVyZmFjZUNsYXNzOyAgICAvKiBJbnRlcmZhY2UgY2xhc3MuICovCisgIHVpbnQ4X3QgYkludGVyZmFjZVN1YkNsYXNzOyAvKiBJbnRlcmZhY2Ugc3ViY2xhc3MuICovCisgIHVpbnQ4X3QgYkludGVyZmFjZVByb3RvY29sOyAvKiBJbnRlcmZhY2UgcHJvdG9jb2wuICovCisgIHVpbnQ4X3QgaUludGVyZmFjZTsgICAgICAgICAvKiBTdHJpbmcgaW5kZXggZm9yIGludGVyZmFjZSBkZXNjcmlwdGlvbi4gKi8KK30gUEFDS0VEIFVzYkludGVyZmFjZURlc2NyaXB0b3I7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgdWludDhfdCBiTGVuZ3RoOyAgICAgICAgICAvKiBEZXNjcmlwdG9yIHNpemUgaW4gYnl0ZXMgKDcsIDkgZm9yIGF1ZGlvKS4gKi8KKyAgdWludDhfdCBiRGVzY3JpcHRvclR5cGU7ICAvKiBEZXNjcmlwdG9yIHR5cGUgKDUgPT0gZW5kcG9pbnQpLiAqLworICB1aW50OF90IGJFbmRwb2ludEFkZHJlc3M7IC8qIEVuZHBvaW50IG51bWJlciAob3JlZCB3aXRoIDBYODAgaWYgaW5wdXQuICovCisgIHVpbnQ4X3QgYm1BdHRyaWJ1dGVzOyAgICAgLyogRW5kcG9pbnQgdHlwZSBhbmQgYXR0cmlidXRlcy4gKi8KKyAgdWludDE2X3Qgd01heFBhY2tldFNpemU7ICAvKiBNYXhpbXVtIHBhY2tldCBzaXplIGluIGJ5dGVzLiAqLworICB1aW50OF90IGJJbnRlcnZhbDsgICAgICAgIC8qIE1heGltdW0gaW50ZXJ2YWwgaW4gbWlsbGlzZWNvbmRzIGJldHdlZW4gdHJhbnNmZXJzLiAqLworICB1aW50OF90IGJSZWZyZXNoOworICB1aW50OF90IGJTeW5jaEFkZHJlc3M7Cit9IFBBQ0tFRCBVc2JFbmRwb2ludERlc2NyaXB0b3I7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgdWludDhfdCBiRGVzY3JpcHRvclR5cGU7CisgIHVpbnQxNl90IHdEZXNjcmlwdG9yTGVuZ3RoOworfSBQQUNLRUQgVXNiQ2xhc3NEZXNjcmlwdG9yOworCit0eXBlZGVmIHN0cnVjdCB7CisgIHVpbnQ4X3QgYkxlbmd0aDsgICAgICAgICAgLyogRGVzY3JpcHRvciBzaXplIGluIGJ5dGVzICg2KS4gKi8KKyAgdWludDhfdCBiRGVzY3JpcHRvclR5cGU7ICAvKiBEZXNjcmlwdG9yIHR5cGUgKDMzID09IEhJRCkuICovCisgIHVpbnQxNl90IGJjZEhJRDsKKyAgdWludDhfdCBiQ291bnRyeUNvZGU7CisgIHVpbnQ4X3QgYk51bURlc2NyaXB0b3JzOworICBVc2JDbGFzc0Rlc2NyaXB0b3IgZGVzY3JpcHRvcnNbKDBYRkYgLSBVc2JEZXNjcmlwdG9yU2l6ZV9ISUQpIC8gVXNiRGVzY3JpcHRvclNpemVfQ2xhc3NdOworfSBQQUNLRUQgVXNiSGlkRGVzY3JpcHRvcjsKKwordHlwZWRlZiB1bmlvbiB7CisgIFVzYkRlc2NyaXB0b3JIZWFkZXIgaGVhZGVyOworICBVc2JEZXZpY2VEZXNjcmlwdG9yIGRldmljZTsKKyAgVXNiQ29uZmlndXJhdGlvbkRlc2NyaXB0b3IgY29uZmlndXJhdGlvbjsKKyAgVXNiU3RyaW5nRGVzY3JpcHRvciBzdHJpbmc7CisgIFVzYkludGVyZmFjZURlc2NyaXB0b3IgaW50ZXJmYWNlOworICBVc2JFbmRwb2ludERlc2NyaXB0b3IgZW5kcG9pbnQ7CisgIFVzYkhpZERlc2NyaXB0b3IgaGlkOworICB1bnNpZ25lZCBjaGFyIGJ5dGVzWzBYRkZdOworfSBVc2JEZXNjcmlwdG9yOworCit0eXBlZGVmIHN0cnVjdCB7CisgIHVpbnQ4X3QgYlJlcXVlc3RUeXBlOyAvKiBSZWNpcGllbnQsIGRpcmVjdGlvbiwgYW5kIHR5cGUuICovCisgIHVpbnQ4X3QgYlJlcXVlc3Q7ICAgICAvKiBSZXF1ZXN0IGNvZGUuICovCisgIHVpbnQxNl90IHdWYWx1ZTsgICAgICAvKiBSZXF1ZXN0IHZhbHVlLiAqLworICB1aW50MTZfdCB3SW5kZXg7ICAgICAgLyogUmVjaXBpZW50IG51bWJlciAobGFuZ3VhZ2UgZm9yIHN0cmluZ3MpLiAqLworICB1aW50MTZfdCB3TGVuZ3RoOyAgICAgLyogRGF0YSBsZW5ndGggaW4gYnl0ZXMuICovCit9IFBBQ0tFRCBVc2JTZXR1cFBhY2tldDsKKworI2RlZmluZSBCRUdJTl9VU0JfU1RSSU5HX0xJU1QobmFtZSkgc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IG5hbWVbXSA9IHsKKyNkZWZpbmUgRU5EX1VTQl9TVFJJTkdfTElTVCBOVUxMfTsKKwordHlwZWRlZiBzdHJ1Y3QgeworICBjb25zdCB2b2lkICpkYXRhOworICBjb25zdCBTZXJpYWxQYXJhbWV0ZXJzICpzZXJpYWw7CisKKyAgY29uc3QgY2hhciAqY29uc3QgKm1hbnVmYWN0dXJlcnM7CisgIGNvbnN0IGNoYXIgKmNvbnN0ICpwcm9kdWN0czsKKworICB1aW50MTZfdCB2ZXJzaW9uOworICB1aW50MTZfdCB2ZW5kb3I7CisgIHVpbnQxNl90IHByb2R1Y3Q7CisgIHVpbnQxNl90IHBhcmVudFZlbmRvcjsKKyAgdWludDE2X3QgcGFyZW50UHJvZHVjdDsKKworICB1bnNpZ25lZCBjaGFyIGNvbmZpZ3VyYXRpb247CisgIHVuc2lnbmVkIGNoYXIgaW50ZXJmYWNlOworICB1bnNpZ25lZCBjaGFyIGFsdGVybmF0aXZlOworICB1bnNpZ25lZCBjaGFyIGlucHV0RW5kcG9pbnQ7CisgIHVuc2lnbmVkIGNoYXIgb3V0cHV0RW5kcG9pbnQ7CisKKyAgdW5zaWduZWQgY2hhciBkaXNhYmxlQXV0b3N1c3BlbmQ6MTsKKyAgdW5zaWduZWQgY2hhciBkaXNhYmxlRW5kcG9pbnRSZXNldDoxOworICB1bnNpZ25lZCBjaGFyIHZlcmlmeUludGVyZmFjZToxOworICB1bnNpZ25lZCBjaGFyIHJlc2V0RGV2aWNlOjE7Cit9IFVzYkNoYW5uZWxEZWZpbml0aW9uOworCisjZGVmaW5lIEJFR0lOX1VTQl9DSEFOTkVMX0RFRklOSVRJT05TIHN0YXRpYyBjb25zdCBVc2JDaGFubmVsRGVmaW5pdGlvbiB1c2JDaGFubmVsRGVmaW5pdGlvbnNbXSA9IHsKKyNkZWZpbmUgRU5EX1VTQl9DSEFOTkVMX0RFRklOSVRJT05TIHsgLnZlbmRvcj0wIH0gfTsKKwordHlwZWRlZiBzdHJ1Y3QgVXNiRGV2aWNlU3RydWN0IFVzYkRldmljZTsKK3R5cGVkZWYgc3RydWN0IFVzYkNob29zZUNoYW5uZWxEYXRhU3RydWN0IFVzYkNob29zZUNoYW5uZWxEYXRhOwordHlwZWRlZiBpbnQgVXNiRGV2aWNlQ2hvb3NlciAoVXNiRGV2aWNlICpkZXZpY2UsIFVzYkNob29zZUNoYW5uZWxEYXRhICpkYXRhKTsKKwordHlwZWRlZiBzdHJ1Y3QgeworICB2b2lkICpjb25zdCBidWZmZXI7CisgIGNvbnN0IHNpemVfdCBzaXplOworCisgIHNzaXplX3QgbGVuZ3RoOworfSBVc2JJbnB1dEZpbHRlckRhdGE7CisKK3R5cGVkZWYgc3RydWN0IFVzYlNlcmlhbERhdGFTdHJ1Y3QgVXNiU2VyaWFsRGF0YTsKK3R5cGVkZWYgaW50IFVzYklucHV0RmlsdGVyIChVc2JJbnB1dEZpbHRlckRhdGEgKmRhdGEpOworCit0eXBlZGVmIHN0cnVjdCB7CisgIGNvbnN0IGNoYXIgKm5hbWU7CisKKyAgaW50ICgqZW5hYmxlQWRhcHRlcikgKFVzYkRldmljZSAqZGV2aWNlKTsKKyAgdm9pZCAoKmRpc2FibGVBZGFwdGVyKSAoVXNiRGV2aWNlICpkZXZpY2UpOworCisgIGludCAoKm1ha2VEYXRhKSAoVXNiRGV2aWNlICpkZXZpY2UsIFVzYlNlcmlhbERhdGEgKipzZXJpYWxEYXRhKTsKKyAgdm9pZCAoKmRlc3Ryb3lEYXRhKSAoVXNiU2VyaWFsRGF0YSAqdXNkKTsKKworICBpbnQgKCpzZXRMaW5lQ29uZmlndXJhdGlvbikgKFVzYkRldmljZSAqZGV2aWNlLCB1bnNpZ25lZCBpbnQgYmF1ZCwgdW5zaWduZWQgaW50IGRhdGFCaXRzLCBTZXJpYWxTdG9wQml0cyBzdG9wQml0cywgU2VyaWFsUGFyaXR5IHBhcml0eSwgU2VyaWFsRmxvd0NvbnRyb2wgZmxvd0NvbnRyb2wpOworICBpbnQgKCpzZXRMaW5lUHJvcGVydGllcykgKFVzYkRldmljZSAqZGV2aWNlLCB1bnNpZ25lZCBpbnQgYmF1ZCwgdW5zaWduZWQgaW50IGRhdGFCaXRzLCBTZXJpYWxTdG9wQml0cyBzdG9wQml0cywgU2VyaWFsUGFyaXR5IHBhcml0eSk7CisgIGludCAoKnNldEJhdWQpIChVc2JEZXZpY2UgKmRldmljZSwgdW5zaWduZWQgaW50IGJhdWQpOworICBpbnQgKCpzZXREYXRhRm9ybWF0KSAoVXNiRGV2aWNlICpkZXZpY2UsIHVuc2lnbmVkIGludCBkYXRhQml0cywgU2VyaWFsU3RvcEJpdHMgc3RvcEJpdHMsIFNlcmlhbFBhcml0eSBwYXJpdHkpOworICBpbnQgKCpzZXRGbG93Q29udHJvbCkgKFVzYkRldmljZSAqZGV2aWNlLCBTZXJpYWxGbG93Q29udHJvbCBmbG93KTsKKworICBpbnQgKCpzZXREdHJTdGF0ZSkgKFVzYkRldmljZSAqZGV2aWNlLCBpbnQgc3RhdGUpOworICBpbnQgKCpzZXRSdHNTdGF0ZSkgKFVzYkRldmljZSAqZGV2aWNlLCBpbnQgc3RhdGUpOworCisgIFVzYklucHV0RmlsdGVyICppbnB1dEZpbHRlcjsKKyAgc3NpemVfdCAoKndyaXRlRGF0YSkgKFVzYkRldmljZSAqZGV2aWNlLCBjb25zdCB2b2lkICpkYXRhLCBzaXplX3Qgc2l6ZSk7Cit9IFVzYlNlcmlhbE9wZXJhdGlvbnM7CisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmIC8qIF9fY3BsdXNwbHVzICovCisKKyNlbmRpZiAvKiBCUkxUVFlfSU5DTFVERURfVVNCX1RZUEVTICovCmRpZmYgLS1naXQgYS9IZWFkZXJzL3V0ZjguaCBiL0hlYWRlcnMvdXRmOC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJlOTI3ODIKLS0tIC9kZXYvbnVsbAorKysgYi9IZWFkZXJzL3V0ZjguaApAQCAtMCwwICsxLDU4IEBACisvKgorICogQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyAqICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyAqCisgKiBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorICoKKyAqIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyAqCisgKiBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisgKi8KKworI2lmbmRlZiBCUkxUVFlfSU5DTFVERURfVVRGOAorI2RlZmluZSBCUkxUVFlfSU5DTFVERURfVVRGOAorCisjaW5jbHVkZSA8c3RkaW8uaD4KKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZiAvKiBfX2NwbHVzcGx1cyAqLworCit3Y2hhcl90ICphbGxvY2F0ZUNoYXJhY3RlcnMgKHNpemVfdCBjb3VudCk7CisKKyNkZWZpbmUgVVRGOF9TSVpFKGJpdHMpICgoKGJpdHMpIDwgOCk/IDE6ICgoKGJpdHMpICsgMykgLyA1KSkKKyNkZWZpbmUgVVRGOF9MRU5fTUFYIFVURjhfU0laRSgzMikKK3R5cGVkZWYgY2hhciBVdGY4QnVmZmVyW1VURjhfTEVOX01BWCArIDFdOworCitleHRlcm4gc2l6ZV90IGNvbnZlcnRDb2RlcG9pbnRUb1V0ZjggKHVpbnQzMl90IGNvZGVwb2ludCwgVXRmOEJ1ZmZlciB1dGY4KTsKK2V4dGVybiBpbnQgY29udmVydFV0ZjhUb0NvZGVwb2ludCAodWludDMyX3QgKmNvZGVwb2ludCwgY29uc3QgY2hhciAqKnV0ZjgsIHNpemVfdCAqdXRmcyk7CisKK2V4dGVybiBzaXplX3QgY29udmVydFdjaGFyVG9VdGY4ICh3Y2hhcl90IHdjLCBVdGY4QnVmZmVyIHV0ZjgpOworZXh0ZXJuIHdpbnRfdCBjb252ZXJ0VXRmOFRvV2NoYXIgKGNvbnN0IGNoYXIgKip1dGY4LCBzaXplX3QgKnV0ZnMpOworCitleHRlcm4gdm9pZCBjb252ZXJ0VXRmOFRvV2NoYXJzIChjb25zdCBjaGFyICoqdXRmOCwgd2NoYXJfdCAqKmNoYXJhY3RlcnMsIHNpemVfdCBjb3VudCk7CisKK2V4dGVybiBzaXplX3QgbWFrZVV0ZjhGcm9tV2NoYXJzIChjb25zdCB3Y2hhcl90ICpjaGFyYWN0ZXJzLCB1bnNpZ25lZCBpbnQgY291bnQsIGNoYXIgKmJ1ZmZlciwgc2l6ZV90IHNpemUpOworZXh0ZXJuIGNoYXIgKmdldFV0ZjhGcm9tV2NoYXJzIChjb25zdCB3Y2hhcl90ICpjaGFyYWN0ZXJzLCB1bnNpZ25lZCBpbnQgY291bnQsIHNpemVfdCAqbGVuZ3RoKTsKKworZXh0ZXJuIHNpemVfdCBtYWtlV2NoYXJzRnJvbVV0ZjggKGNvbnN0IGNoYXIgKnRleHQsIHdjaGFyX3QgKmNoYXJhY3RlcnMsIHNpemVfdCBzaXplKTsKK2V4dGVybiBzaXplX3QgY291bnRVdGY4Q2hhcmFjdGVycyAoY29uc3QgY2hhciAqdGV4dCk7CisKK2V4dGVybiBpbnQgd3JpdGVVdGY4Q2hhcmFjdGVyIChGSUxFICpzdHJlYW0sIHdjaGFyX3QgY2hhcmFjdGVyKTsKK2V4dGVybiBpbnQgd3JpdGVVdGY4Q2hhcmFjdGVycyAoRklMRSAqc3RyZWFtLCBjb25zdCB3Y2hhcl90ICpjaGFyYWN0ZXJzLCBzaXplX3QgY291bnQpOworZXh0ZXJuIGludCB3cml0ZVV0ZjhCeXRlT3JkZXJNYXJrIChGSUxFICpzdHJlYW0pOworCitleHRlcm4gaW50IGlzQ2hhcnNldFVURjggKGNvbnN0IGNoYXIgKm5hbWUpOworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZiAvKiBfX2NwbHVzcGx1cyAqLworCisjZW5kaWYgLyogQlJMVFRZX0lOQ0xVREVEX1VURjggKi8KZGlmZiAtLWdpdCBhL0hlYWRlcnMvdmFyaWFibGVzLmggYi9IZWFkZXJzL3ZhcmlhYmxlcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZkZTFlYmUKLS0tIC9kZXYvbnVsbAorKysgYi9IZWFkZXJzL3ZhcmlhYmxlcy5oCkBAIC0wLDAgKzEsNjAgQEAKKy8qCisgKiBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorICogICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorICoKKyAqIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorICoKKyAqIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyAqLworCisjaWZuZGVmIEJSTFRUWV9JTkNMVURFRF9WQVJJQUJMRVMKKyNkZWZpbmUgQlJMVFRZX0lOQ0xVREVEX1ZBUklBQkxFUworCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmIC8qIF9fY3BsdXNwbHVzICovCisKK3R5cGVkZWYgc3RydWN0IFZhcmlhYmxlTmVzdGluZ0xldmVsU3RydWN0IFZhcmlhYmxlTmVzdGluZ0xldmVsOwordHlwZWRlZiBzdHJ1Y3QgVmFyaWFibGVTdHJ1Y3QgVmFyaWFibGU7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgY29uc3QgY2hhciAqbmFtZTsKKyAgY29uc3QgY2hhciAqdmFsdWU7Cit9IFZhcmlhYmxlSW5pdGlhbGl6ZXI7CisKK2V4dGVybiBWYXJpYWJsZU5lc3RpbmdMZXZlbCAqbmV3VmFyaWFibGVOZXN0aW5nTGV2ZWwgKFZhcmlhYmxlTmVzdGluZ0xldmVsICpwcmV2aW91cywgY29uc3QgY2hhciAqbmFtZSk7CitleHRlcm4gVmFyaWFibGVOZXN0aW5nTGV2ZWwgKnJlbW92ZVZhcmlhYmxlTmVzdGluZ0xldmVsIChWYXJpYWJsZU5lc3RpbmdMZXZlbCAqdm5sKTsKKworZXh0ZXJuIFZhcmlhYmxlTmVzdGluZ0xldmVsICpjbGFpbVZhcmlhYmxlTmVzdGluZ0xldmVsIChWYXJpYWJsZU5lc3RpbmdMZXZlbCAqdm5sKTsKK2V4dGVybiB2b2lkIHJlbGVhc2VWYXJpYWJsZU5lc3RpbmdMZXZlbCAoVmFyaWFibGVOZXN0aW5nTGV2ZWwgKnZubCk7CisKK2V4dGVybiB2b2lkIGxpc3RWYXJpYWJsZXMgKFZhcmlhYmxlTmVzdGluZ0xldmVsICpmcm9tKTsKK2V4dGVybiBjb25zdCBWYXJpYWJsZSAqZmluZFJlYWRhYmxlVmFyaWFibGUgKFZhcmlhYmxlTmVzdGluZ0xldmVsICp2bmwsIGNvbnN0IHdjaGFyX3QgKm5hbWUsIGludCBsZW5ndGgpOworZXh0ZXJuIFZhcmlhYmxlICpmaW5kV3JpdGFibGVWYXJpYWJsZSAoVmFyaWFibGVOZXN0aW5nTGV2ZWwgKnZubCwgY29uc3Qgd2NoYXJfdCAqbmFtZSwgaW50IGxlbmd0aCk7CisKK2V4dGVybiB2b2lkIGRlbGV0ZVZhcmlhYmxlcyAoVmFyaWFibGVOZXN0aW5nTGV2ZWwgKnZubCk7CitleHRlcm4gaW50IHNldFZhcmlhYmxlIChWYXJpYWJsZSAqdmFyaWFibGUsIGNvbnN0IHdjaGFyX3QgKnZhbHVlLCBpbnQgbGVuZ3RoKTsKKworZXh0ZXJuIHZvaWQgZ2V0VmFyaWFibGVOYW1lIChjb25zdCBWYXJpYWJsZSAqdmFyaWFibGUsIGNvbnN0IHdjaGFyX3QgKipjaGFyYWN0ZXJzLCBpbnQgKmxlbmd0aCk7CitleHRlcm4gdm9pZCBnZXRWYXJpYWJsZVZhbHVlIChjb25zdCBWYXJpYWJsZSAqdmFyaWFibGUsIGNvbnN0IHdjaGFyX3QgKipjaGFyYWN0ZXJzLCBpbnQgKmxlbmd0aCk7CisKK2V4dGVybiBpbnQgc2V0U3RyaW5nVmFyaWFibGUgKFZhcmlhYmxlTmVzdGluZ0xldmVsICp2bmwsIGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnZhbHVlKTsKK2V4dGVybiBpbnQgc2V0U3RyaW5nVmFyaWFibGVzIChWYXJpYWJsZU5lc3RpbmdMZXZlbCAqdm5sLCBjb25zdCBWYXJpYWJsZUluaXRpYWxpemVyICppbml0aWFsaXplcnMpOworCitleHRlcm4gVmFyaWFibGVOZXN0aW5nTGV2ZWwgKmdldEdsb2JhbFZhcmlhYmxlcyAoaW50IGNyZWF0ZSk7CitleHRlcm4gaW50IHNldEdsb2JhbFZhcmlhYmxlIChjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICp2YWx1ZSk7CisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmIC8qIF9fY3BsdXNwbHVzICovCisKKyNlbmRpZiAvKiBCUkxUVFlfSU5DTFVERURfVkFSSUFCTEVTICovCmRpZmYgLS1naXQgYS9IZWFkZXJzL3dpbl9lcnJuby5oIGIvSGVhZGVycy93aW5fZXJybm8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMzBhMTBkCi0tLSAvZGV2L251bGwKKysrIGIvSGVhZGVycy93aW5fZXJybm8uaApAQCAtMCwwICsxLDYwIEBACisvKgorICogQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyAqICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyAqCisgKiBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorICoKKyAqIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyAqCisgKiBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisgKi8KKworI2luY2x1ZGUgPGVycm5vLmg+CisKK1dJTl9FUlJOT19TVE9SQUdFX0NMQVNTIGludAord2luX3RvRXJybm8gKERXT1JEIGVycm9yKSB7CisgIHN3aXRjaCAoZXJyb3IpIHsKKyAgICBjYXNlIE5PX0VSUk9SOiByZXR1cm4gMDsKKyAgICBjYXNlIEVSUk9SX0lOVkFMSURfT1BFUkFUSU9OOiByZXR1cm4gRVBFUk07CisgICAgY2FzZSBFUlJPUl9GSUxFX05PVF9GT1VORDogcmV0dXJuIEVOT0VOVDsKKyAgICBjYXNlIEVSUk9SX0ZJTEVfRVhJU1RTOiByZXR1cm4gRUVYSVNUOworICAgIGNhc2UgRVJST1JfQkFEX0VYRV9GT1JNQVQ6IHJldHVybiBFTk9FWEVDOworICAgIGNhc2UgRVJST1JfSU5WQUxJRF9IQU5ETEU6IHJldHVybiBFQkFERjsKKyAgICBjYXNlIEVSUk9SX1dBSVRfTk9fQ0hJTERSRU46IHJldHVybiBFQ0hJTEQ7CisgICAgY2FzZSBFUlJPUl9OT19TWVNURU1fUkVTT1VSQ0VTOiByZXR1cm4gRUFHQUlOOworICAgIGNhc2UgRVJST1JfTk9UX0VOT1VHSF9NRU1PUlk6IHJldHVybiBFTk9NRU07CisgICAgY2FzZSBFUlJPUl9PVVRPRk1FTU9SWTogcmV0dXJuIEVOT01FTTsKKyAgICBjYXNlIEVSUk9SX0FDQ0VTU19ERU5JRUQ6IHJldHVybiBFQUNDRVM7CisgICAgY2FzZSBFUlJPUl9JTlZBTElEX0FERFJFU1M6IHJldHVybiBFRkFVTFQ7CisgICAgY2FzZSBFUlJPUl9CQURfQVJHVU1FTlRTOiByZXR1cm4gRUlOVkFMOworICAgIGNhc2UgRVJST1JfVE9PX01BTllfT1BFTl9GSUxFUzogcmV0dXJuIEVORklMRTsKKyAgICBjYXNlIEVSUk9SX09QRU5fRklMRVM6IHJldHVybiBFQlVTWTsKKyAgICBjYXNlIEVSUk9SX0hBTkRMRV9ESVNLX0ZVTEw6IHJldHVybiBFTk9TUEM7CisgICAgY2FzZSBFUlJPUl9ESVNLX0ZVTEw6IHJldHVybiBFTk9TUEM7CisgICAgY2FzZSBFUlJPUl9XUklURV9QUk9URUNUOiByZXR1cm4gRVJPRlM7CisgICAgY2FzZSBFUlJPUl9CUk9LRU5fUElQRTogcmV0dXJuIEVQSVBFOworICAgIGNhc2UgRVJST1JfRklMRU5BTUVfRVhDRURfUkFOR0U6IHJldHVybiBFTkFNRVRPT0xPTkc7CisgICAgY2FzZSBFUlJPUl9OT1RfU1VQUE9SVEVEOiByZXR1cm4gRU5PU1lTOworICAgIGNhc2UgRVJST1JfRElSX05PVF9FTVBUWTogcmV0dXJuIEVOT1RFTVBUWTsKKyAgICBjYXNlIEVSUk9SX0RFVklDRV9JTl9VU0U6IHJldHVybiBFQlVTWTsKKyAgICBjYXNlIEVSUk9SX0RFVklDRV9SRU1PVkVEOiByZXR1cm4gRU5PREVWOworICAgIGNhc2UgRVJST1JfREVWSUNFX05PVF9BVkFJTEFCTEU6IHJldHVybiBFTk9ERVY7CisgICAgY2FzZSBFUlJPUl9ERVZJQ0VfTk9UX0NPTk5FQ1RFRDogcmV0dXJuIEVOT0RFVjsKKyAgICBjYXNlIFdTQUVCQURGOiByZXR1cm4gRUJBREY7CisgICAgY2FzZSBXU0FFQUNDRVM6IHJldHVybiBFQUNDRVM7CisgICAgY2FzZSBXU0FFRkFVTFQ6IHJldHVybiBFRkFVTFQ7CisgICAgY2FzZSBXU0FFSU5WQUw6IHJldHVybiBFSU5WQUw7CisgICAgY2FzZSBXU0FFTUZJTEU6IHJldHVybiBFTUZJTEU7CisgICAgY2FzZSBXU0FFV09VTERCTE9DSzogcmV0dXJuIEVBR0FJTjsKKyAgICBjYXNlIFdTQUVOQU1FVE9PTE9ORzogcmV0dXJuIEVOQU1FVE9PTE9ORzsKKyAgICBjYXNlIFdTQUVOT1RFTVBUWTogcmV0dXJuIEVOT1RFTVBUWTsKKyAgICBkZWZhdWx0OiByZXR1cm4gRUlPOworICB9Cit9CmRpZmYgLS1naXQgYS9IZWFkZXJzL3dpbl9wdGhyZWFkLmggYi9IZWFkZXJzL3dpbl9wdGhyZWFkLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDExMmVmYQotLS0gL2Rldi9udWxsCisrKyBiL0hlYWRlcnMvd2luX3B0aHJlYWQuaApAQCAtMCwwICsxLDQyNSBAQAorLyoKKyAqIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisgKiAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisgKgorICogQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKKy8qIFRoaXMgaXMgYSBtaW5pbWFsIHB0aHJlYWQgaW1wbGVtZW50YXRpb24gYmFzZWQgb24gd2luZG93cyBmdW5jdGlvbnMuCisgKiBJdCBpcyAqbm90KiBpbnRlbmRlZCB0byBiZSBjb21wbGV0ZSAtIGp1c3QgY29tcGxldGUgZW5vdWdoIHRvIGdldAorICogQlJMVFRZIHJ1bm5pbmcuCisgKi8KKworI2lmbmRlZiBCUkxUVFlfSU5DTFVERURfV0lOX1BUSFJFQUQKKyNkZWZpbmUgQlJMVFRZX0lOQ0xVREVEX1dJTl9QVEhSRUFECisKKyNpbmNsdWRlICJwcm9sb2d1ZS5oIgorCisjaW5jbHVkZSA8d2luZG93cy5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxzeXMvdGltZS5oPgorCisjaW5jbHVkZSAiZ2V0dGltZS5oIgorCisjaWZuZGVmIEVUSU1FRE9VVAorI2RlZmluZSBFVElNRURPVVQgRUFHQUlOCisjZW5kaWYKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZiAvKiBfX2NwbHVzcGx1cyAqLworCisjZGVmaW5lIHdpblB0aHJlYWRBc3NlcnRXaW5kb3dzKGV4cHIpIGRvIHsgaWYgKCEoZXhwcikpIHsgc2V0U3lzdGVtRXJybm8oKTsgcmV0dXJuIGVycm5vOyB9IH0gd2hpbGUgKDApCisjZGVmaW5lIHdpblB0aHJlYWRBc3NlcnRQdGhyZWFkKGV4cHIpIGRvIHsgaW50IHJldCA9IChleHByKTsgaWYgKHJldCkgcmV0dXJuIHJldDsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgd2luUHRocmVhZEFzc2VydChleHByKSBkbyB7IGlmICghKGV4cHIpKSByZXR1cm4gRUlPOyB9IHdoaWxlICgwKQorCisjaWYgIWRlZmluZWQoX19zdHJ1Y3RfdGltZXNwZWNfZGVmaW5lZCkgJiYgIWRlZmluZWQoX19NSU5HVzY0X1ZFUlNJT05fTUFKT1IpCitzdHJ1Y3QgdGltZXNwZWMgeworICB0aW1lX3QgIHR2X3NlYzsgIC8qIFNlY29uZHMgKi8KKyAgbG9uZyAgICB0dl9uc2VjOyAvKiBOYW5vc2Vjb25kcyAqLworfTsKKyNlbmRpZiAvKiBzdHJ1Y3QgdGltZXNwZWMgKi8KKworc3RhdGljIGlubGluZSBEV09SRCBwdGhyZWFkX2dldHRpbWVvdXRfbnAoY29uc3Qgc3RydWN0IHRpbWVzcGVjICphYnNfdGltZW91dCkgeworICBzdHJ1Y3QgdGltZXZhbCBub3c7CisgIExPTkcgdGltZW91dDsKKyAgZ2V0UmVhbFRpbWUoJm5vdyk7CisgIHRpbWVvdXQgPSAoYWJzX3RpbWVvdXQtPnR2X3NlYyAgLSBub3cudHZfc2VjKSAqIDEwMDAgKworICAgICAgICAgICAgKGFic190aW1lb3V0LT50dl9uc2VjIC0gbm93LnR2X3VzZWMgKiAxMDAwKSAvIDEwMDAwMDA7CisgIGlmICh0aW1lb3V0IDwgMCkKKyAgICB0aW1lb3V0ID0gMDsKKyAgcmV0dXJuIHRpbWVvdXQ7Cit9CisKKy8qKioqKioqKioqKgorICogdGhyZWFkcyAqCisgKioqKioqKioqKiovCisKK3R5cGVkZWYgRFdPUkQgcHRocmVhZF9hdHRyX3Q7Cit0eXBlZGVmIEhBTkRMRSBwdGhyZWFkX3Q7CisKK3N0YXRpYyBpbmxpbmUgcHRocmVhZF90IHB0aHJlYWRfc2VsZih2b2lkKSB7CisgIHJldHVybiBHZXRDdXJyZW50VGhyZWFkKCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHB0aHJlYWRfZXF1YWwocHRocmVhZF90IHQxLCBwdGhyZWFkX3QgdDIpIHsKKyAgcmV0dXJuIHQxID09IHQyOworfQorCitzdGF0aWMgaW5saW5lIGludCBwdGhyZWFkX2F0dHJfaW5pdCAocHRocmVhZF9hdHRyX3QgKmF0dHIpIHsKKyAgKmF0dHIgPSAwOworICByZXR1cm4gMDsKK30KKworI2RlZmluZSBQVEhSRUFEX0NSRUFURV9ERVRBQ0hFRCAxCitzdGF0aWMgaW5saW5lIGludCBwdGhyZWFkX2F0dHJfc2V0ZGV0YWNoc3RhdGUgKHB0aHJlYWRfYXR0cl90ICphdHRyLCBpbnQgeWVzKSB7CisgIC8qIG5vdCBzdXBwb3J0ZWQsIGlnbm9yZSAqLworICByZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSBpbnQgcHRocmVhZF9hdHRyX3NldHN0YWNrc2l6ZSAocHRocmVhZF9hdHRyX3QgKmF0dHIsIHNpemVfdCBzdGFja3NpemUpIHsKKyAgLyogbm90IHN1cHBvcnRlZCwgaWdub3JlICovCisgIHJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIGludCBwdGhyZWFkX2F0dHJfZGVzdHJveSAocHRocmVhZF9hdHRyX3QgKmF0dHIpIHsKKyAgcmV0dXJuIDA7Cit9CisKKy8qICJyZWFsIiBjbGVhbnVwIGhhbmRsaW5nIG5vdCB5ZXQgaW1wbGVtZW50ZWQgKi8KK3R5cGVkZWYgc3RydWN0IHsKKyAgdm9pZCAoKnJvdXRpbmUpICh2b2lkICopOworICB2b2lkICphcmc7Cit9IF9fcHRocmVhZF9jbGVhbnVwX2hhbmRsZXI7CisKK3ZvaWQgcHRocmVhZF9jbGVhbnVwX3B1c2ggKHZvaWQgKCpyb3V0aW5lKSAodm9pZCAqKSwgdm9pZCAqYXJnKTsKKyNkZWZpbmUgcHRocmVhZF9jbGVhbnVwX3B1c2gocm91dGluZSwgYXJnKSBkbyB7IFwKKyAgX19wdGhyZWFkX2NsZWFudXBfaGFuZGxlciBfX2NsZWFudXBfaGFuZGxlciA9IHtyb3V0aW5lLCBhcmd9OworCit2b2lkIHB0aHJlYWRfY2xlYW51cF9wb3AgKGludCBleGVjdXRlKTsKKyNkZWZpbmUgcHRocmVhZF9jbGVhbnVwX3BvcChleGVjdXRlKSBcCisgIGlmIChleGVjdXRlKSBfX2NsZWFudXBfaGFuZGxlci5yb3V0aW5lKF9fY2xlYW51cF9oYW5kbGVyLmFyZyk7IFwKK30gd2hpbGUgKDApOworCitzdGF0aWMgaW5saW5lIGludCBwdGhyZWFkX2NyZWF0ZSAoCisgIHB0aHJlYWRfdCAqdGhyZWFkLCBjb25zdCBwdGhyZWFkX2F0dHJfdCAqYXR0ciwKKyAgdm9pZCAqICgqZnVuKSAodm9pZCAqKSwgdm9pZCAqYXJnCispIHsKKyAgaWYgKGF0dHIgJiYgKmF0dHIpCisgICAgcmV0dXJuIEVJTlZBTDsKKyAgd2luUHRocmVhZEFzc2VydFdpbmRvd3MoKnRocmVhZCA9IENyZWF0ZVRocmVhZChOVUxMLCAwLCAoTFBUSFJFQURfU1RBUlRfUk9VVElORSkgZnVuLCBhcmcsIDAsIE5VTEwpKTsKKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHB0aHJlYWRfc2V0Y2FuY2Vsc3RhdGUgKGludCBzdGF0ZSwgaW50ICpvbGRzdGF0ZSkgeworICAvKiBub3QgeWV0IGltcGxlbWVudGVkIDooICovCisgIHJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIGludCBwdGhyZWFkX2NhbmNlbCAocHRocmVhZF90IHRocmVhZCkgeworICAvKiBUaGlzIGlzIHF1aXRlIGhhcnNoIDooICovCisgIHdpblB0aHJlYWRBc3NlcnRXaW5kb3dzKFRlcm1pbmF0ZVRocmVhZCh0aHJlYWQsIDApKTsKKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBwdGhyZWFkX2V4aXQgKHZvaWQgKnJlcykgeworICBFeGl0VGhyZWFkKChEV09SRCkgKERXT1JEX1BUUikgcmVzKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgcHRocmVhZF9qb2luIChwdGhyZWFkX3QgdGhyZWFkLCB2b2lkICoqcmVzKSB7CithZ2FpbjoKKyAgc3dpdGNoIChXYWl0Rm9yU2luZ2xlT2JqZWN0KHRocmVhZCwgSU5GSU5JVEUpKSB7CisgICAgZGVmYXVsdDoKKyAgICBjYXNlIFdBSVRfRkFJTEVEOgorICAgICAgc2V0U3lzdGVtRXJybm8oKTsKKyAgICAgIHJldHVybiBlcnJubzsKKyAgICBjYXNlIFdBSVRfQUJBTkRPTkVEOgorICAgIGNhc2UgV0FJVF9PQkpFQ1RfMDoKKyAgICAgIGJyZWFrOworICAgIGNhc2UgV0FJVF9USU1FT1VUOgorICAgICAgZ290byBhZ2FpbjsKKyAgICB9CisgIGlmIChyZXMpIHsKKyAgICBEV09SRCBfcmVzOworICAgIGlmIChHZXRFeGl0Q29kZVRocmVhZCh0aHJlYWQsICZfcmVzKSkKKyAgICAgICpyZXMgPSAodm9pZCAqKShEV09SRF9QVFIpX3JlczsKKyAgfQorICByZXR1cm4gMDsKK30KKworLyoqKioqKioqKioqCisgKiBtdXRleGVzICoKKyAqKioqKioqKioqKi8KKworI2RlZmluZSBQVEhSRUFEX01VVEVYX0lOSVRJQUxJWkVSIE5VTEwKK3R5cGVkZWYgSEFORExFIHB0aHJlYWRfbXV0ZXhfdDsKKyNkZWZpbmUgUFRIUkVBRF9NVVRFWF9SRUNVUlNJVkUgMQordHlwZWRlZiBpbnQgcHRocmVhZF9tdXRleGF0dHJfdDsKKworc3RhdGljIGlubGluZSBpbnQgcHRocmVhZF9tdXRleGF0dHJfaW5pdChwdGhyZWFkX211dGV4YXR0cl90ICphdHRyKSB7CisgICphdHRyID0gUFRIUkVBRF9NVVRFWF9SRUNVUlNJVkU7CisgIHJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIGludCBwdGhyZWFkX211dGV4YXR0cl9zZXR0eXBlKHB0aHJlYWRfbXV0ZXhhdHRyX3QgKmF0dHIsIGludCB0eXBlKSB7CisgIGlmICh0eXBlICE9IFBUSFJFQURfTVVURVhfUkVDVVJTSVZFKQorICAgIHJldHVybiBFSU5WQUw7CisgICphdHRyID0gdHlwZTsKKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHB0aHJlYWRfbXV0ZXhfaW5pdCAocHRocmVhZF9tdXRleF90ICptdXRleCwgcHRocmVhZF9tdXRleGF0dHJfdCAqYXR0cikgeworICBpZiAoYXR0ciAmJiAqYXR0ciE9UFRIUkVBRF9NVVRFWF9SRUNVUlNJVkUpCisgICAgcmV0dXJuIEVJTlZBTDsKKyAgd2luUHRocmVhZEFzc2VydFdpbmRvd3MoKm11dGV4ID0gQ3JlYXRlTXV0ZXgoTlVMTCwgRkFMU0UsIE5VTEwpKTsKKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHB0aHJlYWRfbXV0ZXhfdW5sb2NrIChwdGhyZWFkX211dGV4X3QgKm11dGV4KSB7CisgIHdpblB0aHJlYWRBc3NlcnRXaW5kb3dzKFJlbGVhc2VNdXRleCgqbXV0ZXgpKTsKKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHB0aHJlYWRfbXV0ZXhfbG9jayAocHRocmVhZF9tdXRleF90ICptdXRleCk7CitzdGF0aWMgaW5saW5lIGludCBfX3B0aHJlYWRfbXV0ZXhfYWxsb2NfY29uY3VycmVudGx5IChwdGhyZWFkX211dGV4X3QgKm11dGV4KSB7CisgICAgSEFORExFIG11dGV4X2luaXRfbXV0ZXg7CisgIC8qIEdldCBhY2Nlc3MgdG8gb25lIGdsb2JhbCBuYW1lZCBtdXRleCB0byBzZXJpYWxpemUgbXV0ZXggaW5pdGlhbGl6YXRpb24gKi8KKyAgd2luUHRocmVhZEFzc2VydFdpbmRvd3MoKG11dGV4X2luaXRfbXV0ZXggPSBDcmVhdGVNdXRleChOVUxMLCBGQUxTRSwgIlN0YXJQVSBtdXRleCBpbml0IikpKTsKKyAgd2luUHRocmVhZEFzc2VydFB0aHJlYWQocHRocmVhZF9tdXRleF9sb2NrKCZtdXRleF9pbml0X211dGV4KSk7CisgIC8qIE5vdyB3ZSBhcmUgdGhlIG9uZSB0aGF0IGNhbiBpbml0aWFsaXplIGl0ICovCisgIGlmICghKm11dGV4KQorICAgIHdpblB0aHJlYWRBc3NlcnRQdGhyZWFkKHB0aHJlYWRfbXV0ZXhfaW5pdChtdXRleCxOVUxMKSk7CisgIHdpblB0aHJlYWRBc3NlcnRQdGhyZWFkKHB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZtdXRleF9pbml0X211dGV4KSk7CisgICAgd2luUHRocmVhZEFzc2VydFdpbmRvd3MoQ2xvc2VIYW5kbGUobXV0ZXhfaW5pdF9tdXRleCkpOworICByZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSBpbnQgcHRocmVhZF9tdXRleF9sb2NrIChwdGhyZWFkX211dGV4X3QgKm11dGV4KSB7CisgIGlmICghKm11dGV4KQorICAgIF9fcHRocmVhZF9tdXRleF9hbGxvY19jb25jdXJyZW50bHkgKG11dGV4KTsKK2FnYWluOgorICBzd2l0Y2ggKFdhaXRGb3JTaW5nbGVPYmplY3QoKm11dGV4LCBJTkZJTklURSkpIHsKKyAgICBkZWZhdWx0OgorICAgIGNhc2UgV0FJVF9GQUlMRUQ6CisgICAgICBzZXRTeXN0ZW1FcnJubygpOworICAgICAgcmV0dXJuIGVycm5vOworICAgIGNhc2UgV0FJVF9BQkFORE9ORUQ6CisgICAgY2FzZSBXQUlUX09CSkVDVF8wOgorICAgICAgcmV0dXJuIDA7CisgICAgY2FzZSBXQUlUX1RJTUVPVVQ6CisgICAgICBnb3RvIGFnYWluOworICB9Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHB0aHJlYWRfbXV0ZXhfdHJ5bG9jayAocHRocmVhZF9tdXRleF90ICptdXRleCkgeworICBpZiAoISptdXRleCkKKyAgICBfX3B0aHJlYWRfbXV0ZXhfYWxsb2NfY29uY3VycmVudGx5IChtdXRleCk7CisgIHN3aXRjaCAoV2FpdEZvclNpbmdsZU9iamVjdCgqbXV0ZXgsIDApKSB7CisgICAgZGVmYXVsdDoKKyAgICBjYXNlIFdBSVRfRkFJTEVEOgorICAgICAgc2V0U3lzdGVtRXJybm8oKTsKKyAgICAgIHJldHVybiBlcnJubzsKKyAgICBjYXNlIFdBSVRfQUJBTkRPTkVEOgorICAgIGNhc2UgV0FJVF9PQkpFQ1RfMDoKKyAgICAgIHJldHVybiAwOworICAgIGNhc2UgV0FJVF9USU1FT1VUOgorICAgICAgcmV0dXJuIEVCVVNZOworICB9Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHB0aHJlYWRfbXV0ZXhfZGVzdHJveSAocHRocmVhZF9tdXRleF90ICptdXRleCkgeworICB3aW5QdGhyZWFkQXNzZXJ0V2luZG93cyhDbG9zZUhhbmRsZSgqbXV0ZXgpKTsKKyAgKm11dGV4ID0gSU5WQUxJRF9IQU5ETEVfVkFMVUU7CisgIHJldHVybiAwOworfQorCisvKioqKioqKioqKioqKioKKyAqIHNlbWFwaG9yZXMgKgorICoqKioqKioqKioqKioqLworCit0eXBlZGVmIEhBTkRMRSBzZW1fdDsKKworc3RhdGljIGlubGluZSBpbnQgc2VtX2luaXQoc2VtX3QgKnNlbSwgaW50IHBzaGFyZWQsIHVuc2lnbmVkIGludCB2YWx1ZSkgeworICB3aW5QdGhyZWFkQXNzZXJ0V2luZG93cygqc2VtID0gQ3JlYXRlU2VtYXBob3JlKE5VTEwsIHZhbHVlLCBNQVhMT05HLCBOVUxMKSk7CisgIHJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIGludCBkb19zZW1fd2FpdChzZW1fdCAqc2VtLCBEV09SRCB0aW1lb3V0KSB7CisgIHN3aXRjaCAoV2FpdEZvclNpbmdsZU9iamVjdCgqc2VtLCB0aW1lb3V0KSkgeworICAgIGRlZmF1bHQ6CisgICAgY2FzZSBXQUlUX0ZBSUxFRDoKKyAgICAgIHNldFN5c3RlbUVycm5vKCk7CisgICAgICByZXR1cm4gLTE7CisgICAgY2FzZSBXQUlUX1RJTUVPVVQ6CisgICAgICBlcnJubyA9IEVBR0FJTjsKKyAgICAgIHJldHVybiAtMTsKKyAgICBjYXNlIFdBSVRfQUJBTkRPTkVEOgorICAgIGNhc2UgV0FJVF9PQkpFQ1RfMDoKKyAgICAgIHJldHVybiAwOworICB9Cit9CisKKyNkZWZpbmUgc2VtX3dhaXQoc2VtKSBkb19zZW1fd2FpdChzZW0sIElORklOSVRFKQorI2RlZmluZSBzZW1fdHJ5d2FpdChzZW0pIGRvX3NlbV93YWl0KHNlbSwgMCkKKworc3RhdGljIGlubGluZSBpbnQgc2VtX3RpbWVkd2FpdChzZW1fdCAqc2VtLCBjb25zdCBzdHJ1Y3QgdGltZXNwZWMgKmFic190aW1lb3V0KSB7CisgIHJldHVybiBkb19zZW1fd2FpdChzZW0sIHB0aHJlYWRfZ2V0dGltZW91dF9ucChhYnNfdGltZW91dCkpOworfQorCitzdGF0aWMgaW5saW5lIGludCBzZW1fcG9zdChzZW1fdCAqc2VtKSB7CisgIHdpblB0aHJlYWRBc3NlcnRXaW5kb3dzKFJlbGVhc2VTZW1hcGhvcmUoKnNlbSwgMSwgTlVMTCkpOworICByZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSBpbnQgc2VtX2Rlc3Ryb3koc2VtX3QgKnNlbSkgeworICB3aW5QdGhyZWFkQXNzZXJ0V2luZG93cyhDbG9zZUhhbmRsZSgqc2VtKSk7CisgIHJldHVybiAwOworfQorCisvKioqKioqKioqKioqKioKKyAqIGNvbmRpdGlvbnMgKgorICoqKioqKioqKioqKioqLworCit0eXBlZGVmIHN0cnVjdCB7CisgIEhBTkRMRSBzZW07CisgIHZvbGF0aWxlIHVuc2lnbmVkIG5id2FpdDsKK30gcHRocmVhZF9jb25kX3Q7CisjZGVmaW5lIFBUSFJFQURfQ09ORF9JTklUSUFMSVpFUiB7IE5VTEwsIDB9CisKK3R5cGVkZWYgdW5zaWduZWQgcHRocmVhZF9jb25kYXR0cl90OworCitzdGF0aWMgaW5saW5lIGludCBwdGhyZWFkX2NvbmRfaW5pdCAocHRocmVhZF9jb25kX3QgKmNvbmQsIGNvbnN0IHB0aHJlYWRfY29uZGF0dHJfdCAqYXR0cikgeworICBpZiAoYXR0cikKKyAgICByZXR1cm4gRUlOVkFMOworICB3aW5QdGhyZWFkQXNzZXJ0V2luZG93cyhjb25kLT5zZW0gPSBDcmVhdGVTZW1hcGhvcmUoTlVMTCwgMCwgTUFYTE9ORywgTlVMTCkpOworICBjb25kLT5uYndhaXQgPSAwOworICByZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSBpbnQgcHRocmVhZF9jb25kX3RpbWVkd2FpdCAocHRocmVhZF9jb25kX3QgKmNvbmQsIHB0aHJlYWRfbXV0ZXhfdCAqbXV0ZXgsIGNvbnN0IHN0cnVjdCB0aW1lc3BlYyAqdGltZSkgeworICBpZiAoIWNvbmQtPnNlbSkKKyAgICB3aW5QdGhyZWFkQXNzZXJ0UHRocmVhZChwdGhyZWFkX2NvbmRfaW5pdChjb25kLE5VTEwpKTsKKyAgY29uZC0+bmJ3YWl0Kys7CisgIHdpblB0aHJlYWRBc3NlcnRQdGhyZWFkKHB0aHJlYWRfbXV0ZXhfdW5sb2NrKG11dGV4KSk7CisgIHN3aXRjaCAoV2FpdEZvclNpbmdsZU9iamVjdChjb25kLT5zZW0sIHB0aHJlYWRfZ2V0dGltZW91dF9ucCh0aW1lKSkpIHsKKyAgICBkZWZhdWx0OgorICAgIGNhc2UgV0FJVF9GQUlMRUQ6CisgICAgICBzZXRTeXN0ZW1FcnJubygpOworICAgICAgd2luUHRocmVhZEFzc2VydFB0aHJlYWQocHRocmVhZF9tdXRleF9sb2NrKG11dGV4KSk7CisgICAgICByZXR1cm4gZXJybm87CisgICAgY2FzZSBXQUlUX1RJTUVPVVQ6CisgICAgICB3aW5QdGhyZWFkQXNzZXJ0UHRocmVhZChwdGhyZWFkX211dGV4X2xvY2sobXV0ZXgpKTsKKyAgICAgIHJldHVybiBFVElNRURPVVQ7CisgICAgY2FzZSBXQUlUX0FCQU5ET05FRDoKKyAgICBjYXNlIFdBSVRfT0JKRUNUXzA6CisgICAgICBicmVhazsKKyAgfQorICB3aW5QdGhyZWFkQXNzZXJ0UHRocmVhZChwdGhyZWFkX211dGV4X2xvY2sobXV0ZXgpKTsKKyAgY29uZC0+bmJ3YWl0LS07CisgIHJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIGludCBwdGhyZWFkX2NvbmRfd2FpdCAocHRocmVhZF9jb25kX3QgKmNvbmQsIHB0aHJlYWRfbXV0ZXhfdCAqbXV0ZXgpIHsKKyAgaWYgKCFjb25kLT5zZW0pCisgICAgd2luUHRocmVhZEFzc2VydFB0aHJlYWQocHRocmVhZF9jb25kX2luaXQoY29uZCxOVUxMKSk7CisgIGNvbmQtPm5id2FpdCsrOworICB3aW5QdGhyZWFkQXNzZXJ0UHRocmVhZChwdGhyZWFkX211dGV4X3VubG9jayhtdXRleCkpOworYWdhaW46CisgIHN3aXRjaCAoV2FpdEZvclNpbmdsZU9iamVjdChjb25kLT5zZW0sIElORklOSVRFKSkgeworICAgIGNhc2UgV0FJVF9GQUlMRUQ6CisgICAgICBzZXRTeXN0ZW1FcnJubygpOworICAgICAgd2luUHRocmVhZEFzc2VydCghcHRocmVhZF9tdXRleF9sb2NrKG11dGV4KSk7CisgICAgICByZXR1cm4gZXJybm87CisgICAgY2FzZSBXQUlUX1RJTUVPVVQ6CisgICAgICBnb3RvIGFnYWluOworICAgIGNhc2UgV0FJVF9BQkFORE9ORUQ6CisgICAgY2FzZSBXQUlUX09CSkVDVF8wOgorICAgICAgYnJlYWs7CisgIH0KKyAgd2luUHRocmVhZEFzc2VydFB0aHJlYWQocHRocmVhZF9tdXRleF9sb2NrKG11dGV4KSk7CisgIGNvbmQtPm5id2FpdC0tOworICByZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSBpbnQgcHRocmVhZF9jb25kX3NpZ25hbCAocHRocmVhZF9jb25kX3QgKmNvbmQpIHsKKyAgaWYgKCFjb25kLT5zZW0pCisgICAgd2luUHRocmVhZEFzc2VydFB0aHJlYWQocHRocmVhZF9jb25kX2luaXQoY29uZCxOVUxMKSk7CisgIGlmIChjb25kLT5uYndhaXQpCisgICAgUmVsZWFzZVNlbWFwaG9yZShjb25kLT5zZW0sIDEsIE5VTEwpOworICByZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSBpbnQgcHRocmVhZF9jb25kX2Jyb2FkY2FzdCAocHRocmVhZF9jb25kX3QgKmNvbmQpIHsKKyAgaWYgKCFjb25kLT5zZW0pCisgICAgd2luUHRocmVhZEFzc2VydFB0aHJlYWQocHRocmVhZF9jb25kX2luaXQoY29uZCxOVUxMKSk7CisgIFJlbGVhc2VTZW1hcGhvcmUoY29uZC0+c2VtLCBjb25kLT5uYndhaXQsIE5VTEwpOworICByZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSBpbnQgcHRocmVhZF9jb25kX2Rlc3Ryb3kgKHB0aHJlYWRfY29uZF90ICpjb25kKSB7CisgIGlmIChjb25kLT5zZW0pIHsKKyAgd2luUHRocmVhZEFzc2VydFdpbmRvd3MoQ2xvc2VIYW5kbGUoY29uZC0+c2VtKSk7CisgICAgY29uZC0+c2VtID0gTlVMTDsKKyAgfQorICByZXR1cm4gMDsKK30KKworLyoqKioqKioKKyAqIFRMUyAqCisgKioqKioqKi8KKwordHlwZWRlZiBEV09SRCBwdGhyZWFkX2tleV90OworI2RlZmluZSBQVEhSRUFEX09OQ0VfSU5JVCB7UFRIUkVBRF9NVVRFWF9JTklUSUFMSVpFUiwgMH0KK3R5cGVkZWYgc3RydWN0IHsKKyAgcHRocmVhZF9tdXRleF90IG11dGV4OworICB1bnNpZ25lZCBkb25lOworfSBwdGhyZWFkX29uY2VfdDsKKworc3RhdGljIGlubGluZSBpbnQgcHRocmVhZF9vbmNlIChwdGhyZWFkX29uY2VfdCAqb25jZSwgdm9pZCAoKm9uY2VmdW4pKHZvaWQpKSB7CisgIHdpblB0aHJlYWRBc3NlcnRQdGhyZWFkKHB0aHJlYWRfbXV0ZXhfbG9jaygmb25jZS0+bXV0ZXgpKTsKKyAgaWYgKCFvbmNlLT5kb25lKSB7CisgICAgb25jZWZ1bigpOworICAgIG9uY2UtPmRvbmUgPSAxOworICB9CisgIHdpblB0aHJlYWRBc3NlcnRQdGhyZWFkKHB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZvbmNlLT5tdXRleCkpOworICByZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSBpbnQgcHRocmVhZF9rZXlfY3JlYXRlIChwdGhyZWFkX2tleV90ICprZXksIHZvaWQgKCpmcmVlZnVuKSh2b2lkICopKSB7CisgIERXT1JEIHJlczsKKyAgd2luUHRocmVhZEFzc2VydFdpbmRvd3MoKHJlcyA9IFRsc0FsbG9jKCkpICE9IDB4RkZGRkZGRkYpOworICAqa2V5ID0gcmVzOworICByZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSBpbnQgcHRocmVhZF9rZXlfZGVsZXRlIChwdGhyZWFkX2tleV90IGtleSkgeworICB3aW5QdGhyZWFkQXNzZXJ0V2luZG93cyhUbHNGcmVlKGtleSkpOworICByZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSB2b2lkICpwdGhyZWFkX2dldHNwZWNpZmljIChwdGhyZWFkX2tleV90IGtleSkgeworICByZXR1cm4gVGxzR2V0VmFsdWUoa2V5KTsKK30KKworc3RhdGljIGlubGluZSBpbnQgcHRocmVhZF9zZXRzcGVjaWZpYyAocHRocmVhZF9rZXlfdCBrZXksIGNvbnN0IHZvaWQgKmRhdGEpIHsKKyAgd2luUHRocmVhZEFzc2VydFdpbmRvd3MoVGxzU2V0VmFsdWUoa2V5LCAoTFBWT0lEKSBkYXRhKSk7CisgIHJldHVybiAwOworfQorCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZiAvKiBfX2NwbHVzcGx1cyAqLworCisjZW5kaWYgLyogQlJMVFRZX0lOQ0xVREVEX1dJTl9QVEhSRUFEICovCmRpZmYgLS1naXQgYS9IZWFkZXJzL3hzZWwuaCBiL0hlYWRlcnMveHNlbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRlODkxYTEKLS0tIC9kZXYvbnVsbAorKysgYi9IZWFkZXJzL3hzZWwuaApAQCAtMCwwICsxLDUzIEBACisvKgorICogQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyAqICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorICoKKyAqIENvcHlyaWdodCAoQykgMjAxOSBieSBTYW11ZWwgVGhpYmF1bHQgPFNhbXVlbC5UaGliYXVsdEBlbnMtbHlvbi5vcmc+CisgKgorICogQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKKyNpZm5kZWYgQlJMQVBJX0lOQ0xVREVEX1hTRUwKKyNkZWZpbmUgQlJMQVBJX0lOQ0xVREVEX1hTRUwKKworI2luY2x1ZGUgPFgxMS9YLmg+CisjaW5jbHVkZSA8WDExL1hsaWIuaD4KKworI2luY2x1ZGUgInByb2xvZ3VlLmgiCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYgLyogX19jcGx1c3BsdXMgKi8KKwordHlwZWRlZiBzdHJ1Y3QgeworICBBdG9tIHNlbCwgc2VsUHJvcDsKKyAgV2luZG93IHNlbFdpbmRvdzsKKworICBBdG9tIHRhcmdldHNBdG9tLCB1dGY4LCBpbmNyOworCisjaWZkZWYgSEFWRV9YMTFfRVhURU5TSU9OU19YRklYRVNfSAorICBpbnQgeGZpeGVzRXZlbnRCYXNlLCB4Zml4ZXNFcnJvckJhc2U7CisgIEJvb2wgaGF2ZVhmaXhlczsKKyNlbmRpZiAvKiBIQVZFX1gxMV9FWFRFTlNJT05TX1hGSVhFU19IICovCit9IFhTZWxEYXRhOworCit0eXBlZGVmIHZvaWQgKCpYU2VsVXBkYXRlKShjb25zdCBjaGFyICpkYXRhLCB1bnNpZ25lZCBsb25nIHNpemUpOworCit2b2lkIFhTZWxJbml0KERpc3BsYXkgKmRweSwgWFNlbERhdGEgKmRhdGEpOwordm9pZCBYU2VsU2V0KERpc3BsYXkgKmRweSwgWFNlbERhdGEgKmRhdGEpOworaW50IFhTZWxQcm9jZXNzKERpc3BsYXkgKmRweSwgWFNlbERhdGEgKmRhdGEsIFhFdmVudCAqZXYsIGNvbnN0IGNoYXIgKmNvbnRlbnQsIFhTZWxVcGRhdGUgdXBkYXRlKTsKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYgLyogX19jcGx1c3BsdXMgKi8KKworI2VuZGlmIC8qIEJSTEFQSV9JTkNMVURFRF9YU0VMICovCmRpZmYgLS1naXQgYS9Jbml0cmFtZnMvRHJhY3V0L01ha2VmaWxlLmluIGIvSW5pdHJhbWZzL0RyYWN1dC9NYWtlZmlsZS5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YTdmNmRlCi0tLSAvZGV2L251bGwKKysrIGIvSW5pdHJhbWZzL0RyYWN1dC9NYWtlZmlsZS5pbgpAQCAtMCwwICsxLDM0IEBACitNT0RVTEVfTkFNRSA9IDk5YnJsdHR5CitNT0RVTEVTX0RJUkVDVE9SWSA9IC91c3IvbGliL2RyYWN1dC9tb2R1bGVzLmQKK01PRFVMRV9ESVJFQ1RPUlkgPSAkKElOU1RBTExfUk9PVCkkKE1PRFVMRVNfRElSRUNUT1JZKS8kKE1PRFVMRV9OQU1FKQorCitpbnN0YWxsOiBpbnN0YWxsLW1vZHVsZSBpbnN0YWxsLWRvY3VtZW50YXRpb24gaW5zdGFsbC1jb25maWd1cmF0aW9uLWZpbGVzCisKK2luc3RhbGwtbW9kdWxlOiBpbnN0YWxsLW1vZHVsZS1kaXJlY3RvcnkKKwlmb3IgZmlsZSBpbiAqLnNoOyBcCisJZG8gJChJTlNUQUxMX1NDUklQVCkgJCRmaWxlICQoTU9EVUxFX0RJUkVDVE9SWSk7IFwKKwlkb25lCisKK2luc3RhbGwtZG9jdW1lbnRhdGlvbjogaW5zdGFsbC1tb2R1bGUtZGlyZWN0b3J5CisJJChJTlNUQUxMX0RBVEEpIFJFQURNRSAkKE1PRFVMRV9ESVJFQ1RPUlkpCisKK2luc3RhbGwtbW9kdWxlLWRpcmVjdG9yeToKKwkkKElOU1RBTExfRElSRUNUT1JZKSAkKE1PRFVMRV9ESVJFQ1RPUlkpCisKK09QVElPTlNfRklMRSA9IGNtZGxpbmUKK0NPTkZJR1VSQVRJT05fRklMRSA9IGRyYWN1dC5jb25mCitJTklUUkFNRlNfU1VCRElSRUNUT1JZID0gSW5pdHJhbWZzCitJTklUUkFNRlNfRElSRUNUT1JZID0gJChUQUJMRVNfRElSRUNUT1JZKS8kKElOSVRSQU1GU19TVUJESVJFQ1RPUlkpCitJTlNUQUxMX0lOSVRSQU1GU19ESVJFQ1RPUlkgPSAkKElOU1RBTExfUk9PVCkkKElOSVRSQU1GU19ESVJFQ1RPUlkpCisKK2luc3RhbGwtaW5pdHJhbWZzLWRpcmVjdG9yeToKKwkkKElOU1RBTExfRElSRUNUT1JZKSAkKElOU1RBTExfSU5JVFJBTUZTX0RJUkVDVE9SWSkKKworaW5zdGFsbC1jb25maWd1cmF0aW9uLWZpbGVzOiBpbnN0YWxsLWluaXRyYW1mcy1kaXJlY3RvcnkKKwkkKElOU1RBTExfREFUQSkgJChPUFRJT05TX0ZJTEUpICQoSU5TVEFMTF9JTklUUkFNRlNfRElSRUNUT1JZKQorCSQoSU5TVEFMTF9EQVRBKSAkKENPTkZJR1VSQVRJT05fRklMRSkgJChJTlNUQUxMX0lOSVRSQU1GU19ESVJFQ1RPUlkpCisJc2VkIC1lICcvXiAqQlJMVFRZX0RSQUNVVF9MT0NBTEUgKj0gKiIvcy8iLioiLyIke0xBTkd9Ii8nIC1pICQoSU5TVEFMTF9JTklUUkFNRlNfRElSRUNUT1JZKS8kKENPTkZJR1VSQVRJT05fRklMRSkKKwordW5pbnN0YWxsOgorCS1ybSAtZiAtciAgJChNT0RVTEVfRElSRUNUT1JZKQorCmRpZmYgLS1naXQgYS9Jbml0cmFtZnMvRHJhY3V0L1JFQURNRSBiL0luaXRyYW1mcy9EcmFjdXQvUkVBRE1FCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE1NGU2MjUKLS0tIC9kZXYvbnVsbAorKysgYi9Jbml0cmFtZnMvRHJhY3V0L1JFQURNRQpAQCAtMCwwICsxLDIxNSBAQAorQnJhaWxsZSBTdXBwb3J0IGZvciBEcmFjdXQKKz09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1RoaXMgbW9kdWxlIGltcGxlbWVudHMgYnJhaWxsZSBhY2Nlc3NpYmlsaXR5IHdpdGhpbiB0aGUgaW5pdHJhbWZzIChpbml0aWFsCityYW1kaXNrIGZpbGUgc3lzdGVtKS4gSWYgQlJMVFRZIGlzIGluc3RhbGxlZCAoYGAvdXNyL2Jpbi9icmx0dHlgYCBleGlzdHMpIHRoZW4KK2l0IGlzIGFkZGVkIHRvIHRoZSBpbWFnZS4gVGhlIGJyYWlsbGUgZHJpdmVycywgdGV4dCB0YWJsZXMsIGNvbnRyYWN0aW9uIHRhYmxlcywKK2F0dHJpYnV0ZXMgdGFibGVzLCBrZXlib2FyZCB0YWJsZXMsIHNwZWVjaCBkcml2ZXJzLCBhbmQgcHJlZmVyZW5jZXMgZmlsZQorY29uZmlndXJlZCB2aWEgYGAvZXRjL2JybHR0eS5jb25mYGAgYXJlIGluY2x1ZGVkLiBMb2NhbCBjdXN0b21pemF0aW9ucyB3aXRoaW4KK2BgL2V0Yy94ZGcvYnJsdHR5L2BgIGFyZSBhbHNvIGluY2x1ZGVkLgorCitCUkxUVFkgaXMgc3RhcnRlZCBhcyBlYXJseSBhcyBwb3NzaWJsZSBieSB0aGUgaW5pdHJhbWZzIHNvIHRoYXQgYnJhaWxsZQorYWNjZXNzaWJpbGl0eSB3aWxsIGJlIGFjdGl2ZSB3aGVuIChzaG91bGQgdGhlIG5lZWQgYXJpc2UpIGNvbnRyb2wgaXMKK3RyYW5zZmVycmVkIHRvIHRoZSBlbWVyZ2VuY3kgc2hlbGwgZHVlIHRvIGEgcHJvYmxlbSBwcmVwYXJpbmcgdGhlIHJvb3QgZmlsZQorc3lzdGVtLiBBZGRpdGlvbmFsbHksIGJyYWlsbGUgYWNjZXNzaWJpbGl0eSBpcyBhY3RpdmUgYXQgYW55IG9mIHRoZSBzcGVjaWZpYWJsZQoraW5pdHJhbWZzIGJyZWFrcG9pbnRzIChzZWUgdGhlIGBgcmQuYnJlYWtgYCBrZXJuZWwgcGFyYW1ldGVyKSBleGNlcHQgZm9yIHRoZQorb25lIG5hbWVkIGBgY21kbGluZWBgIGJlY2F1c2UgaXQgb2NjdXJzIGVhcmxpZXIgdGhhbiB0aGUgcG9pbnQgYXQgd2hpY2ggQlJMVFRZCitpcyBzdGFydGVkLgorCitUaGUgYnJhaWxsZSBkcml2ZXIgY2FuIHN0YXJ0IGltbWVkaWF0ZWx5IGlmIGVpdGhlciBzZXJpYWwgb3IgVVNCIGNvbW11bmljYXRpb24KK2lzIGJlaW5nIHVzZWQuIElmIEJsdWV0b290aCBjb21tdW5pY2F0aW9uIGlzIGJlaW5nIHVzZWQgdGhlbiB0aGUgYnJhaWxsZSBkcml2ZXIKK3dvbid0IHN0YXJ0IHVudGlsIHRoZSBgYGluaXRxdWV1ZWBgIHBoYXNlIGJlY2F1c2UgdGhlIFN5c3RlbWQgc2VydmljZSBtYW5hZ2VyCitpc24ndCBhdmFpbGFibGUgdW50aWwgdGhlbi4KKworQmx1ZXRvb3RoIHN1cHBvcnQgd2l0aGluIHRoZSBpbml0cmFtZnMgaXMgZGlzYWJsZWQgYnkgZGVmYXVsdCBiZWNhdXNlIGl0J3MKK2luc2VjdXJlLiBUaGUgcmVhc29uIGZvciB0aGlzIGlzIHRoYXQgdGhlIGxpbmsga2V5cyBmb3IgdGhvc2UgZGV2aWNlcyB0aGF0IGhhdmUKK2FscmVhZHkgYmVlbiBwYWlyZWQgb24gdGhlIGZ1bGwgc3lzdGVtIGFyZSBjb3BpZWQgaW50byB0aGUgaW5pdHJhbWZzIGltYWdlIHNvCit0aGF0IHJlcGFpcmluZyB3b24ndCBiZSBuZWNlc3NhcnkuIElmIHlvdSBhYnNvbHV0ZWx5IG11c3QgdXNlIEJsdWV0b290aAorY29tbXVuaWNhdGlvbiwgb3IgaWYgeW91IGp1c3Qgd2FudCB0byBhbmQgdGhpcyBpc3N1ZSBpcyBvZiBubyBjb25jZXJuIHRvIHlvdSwKK3RoZW4gZW5hYmxlIHRoZSBgYEJSTFRUWV9EUkFDVVRfQkxVRVRPT1RIX1NVUFBPUlRgYCBvcHRpb24gd2l0aGluIHRoZSBmaWxlCitgYGRyYWN1dC5jb25mYGAgKHdoaWNoIGlzIGluIGBgL2V0Yy9icmx0dHkvSW5pdHJhbWZzL2BgKS4KKworRW52aXJvbm1lbnQgVmFyaWFibGVzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQSBudW1iZXIgb2YgZW52aXJvbm1lbnQgdmFyaWFibGVzIG1heSBiZSB1c2VkIHRvIGluZmx1ZW5jZSBob3cgQlJMVFRZIGlzCitpbnN0YWxsZWQgaW50byB0aGUgaW5pdHJhbWZzIGltYWdlLiBUaGVpciBuYW1lcyBhbGwgYmVnaW4gd2l0aCB0aGUKK2BgQlJMVFRZX0RSQUNVVF9gYCBwcmVmaXguIEluIGFkZGl0aW9uIHRvIGV4cG9ydGluZyB0aGVtIGZyb20gdGhlIGN1cnJlbnQKK2Vudmlyb25tZW50LCB0aGV5IG1heSBiZSBkZWZpbmVkIHdpdGhpbiB0aGUgb3B0aW9uYWwgZmlsZSBgYGRyYWN1dC5jb25mYGAKKyh3aGljaCBpcyBpbiBgYC9ldGMvYnJsdHR5L0luaXRyYW1mcy9gYCkuIFdpdGhpbiB0aGlzIGZpbGU6CisKKyogQmxhbmsgbGluZXMgYXJlIGlnbm9yZWQuCisqIExpbmVzIHRoYXQgc3RhcnQgd2l0aCBhIGhhc2ggW2BgI2BgXSBhcmUgY29tbWVudHMuCisqIEFsbCBvdGhlciBsaW5lcyBzaG91bGQgYmUgc2ltcGxlIHNoZWxsLXN0eWxlIGFzc2lnbm1lbnRzLiBGb3IgZXhhbXBsZTo6CisKKyAgICBOQU1FPSJzdHJpbmciCisKK1RoZSBmb2xsb3dpbmcgZW52aXJvbm1lbnQgdmFyaWFibGVzIGFyZSBzdXBwb3J0ZWQ6CisKK0JSTFRUWV9EUkFDVVRfTE9DQUxFCisgIFRoZSBwcmVmZXJyZWQgbG9jYWxlICh1c2VkIHRvIGRldGVybWluZSB0aGUgZGVmYXVsdCB0ZXh0IGFuZCBjb250cmFjdGlvbgorICB0YWJsZXMpLiBGb3IgZXhhbXBsZTo6CisKKyAgICBCUkxUVFlfRFJBQ1VUX0xPQ0FMRT1jc19DWi5VVEYtOAorCisgIElmIG5lZWRlZCwgaS5lLiBpZiB0aGUgdGV4dCBhbmQgY29udHJhY3Rpb24gdGFibGVzIGhhdmVuJ3QgYm90aCBiZWVuCisgIGNvbmZpZ3VyZWQgdmlhIGBgL2V0Yy9icmx0dHkuY29uZmBgLCB0aGlzIGluZm9ybWF0aW9uIG11c3QgYmUgZXhwbGljaXRseSBzZXQKKyAgYmVjYXVzZSBpdCBjYW4ndCBiZSBkZXRlcm1pbmVkIGZyb20gdGhlIHN5c3RlbSBjb25maWd1cmF0aW9uIHdoZW4gYnVpbGRpbmcKKyAgdGhlIGltYWdlIChzZWUgYDxodHRwczovL2J1Z3ppbGxhLnJlZGhhdC5jb20vc2hvd19idWcuY2dpP2lkPTE1ODQwMzY+YF8pLgorCitCUkxUVFlfRFJBQ1VUX0JSQUlMTEVfRFJJVkVSUworICBBIHNwYWNlLXNlcGFyYXRlZCBsaXN0IG9mIGFkZGl0aW9uYWwgYnJhaWxsZSBkcml2ZXJzIHRvIGluY2x1ZGUuIEZvcgorICBleGFtcGxlOjoKKworICAgIEJSTFRUWV9EUkFDVVRfQlJBSUxMRV9EUklWRVJTPSJwbSBldSIKKworQlJMVFRZX0RSQUNVVF9CTFVFVE9PVEhfU1VQUE9SVAorICBXaGV0aGVyIG9yIG5vdCBCbHVldG9vdGggc3VwcG9ydCBzaG91bGQgYmUgaW5jbHVkZWQgd2l0aGluIHRoZSBpbml0cmFtZnMuIEZvcgorICBleGFtcGxlOjoKKworICAgIEJSTFRUWV9EUkFDVVRfQkxVRVRPT1RIX1NVUFBPUlQ9bm8KKworICBTZXQgdGhpcyB2YXJpYWJsZSB0byBgYHllc2BgIGlmIGNvbW11bmljYXRpb24gd2l0aCB5b3VyIGJyYWlsbGUgZGV2aWNlIGlzIHZpYQorICBCbHVldG9vdGguIE5vdGUgdGhhdCB0aGlzIG9wdGlvbiBpcyBpbnNlY3VyZSBiZWNhdXNlIHRoZSBsaW5rIGtleXMgZm9yIGFsbCBvZgorICB5b3VyIHBhaXJlZCBCbHVldG9vdGggZGV2aWNlcyB3aWxsIGJlIHN0b3JlZCB3aXRoaW4gdGhlIGluaXRyYW1mcyBpbWFnZS4KKworQlJMVFRZX0RSQUNVVF9URVhUX1RBQkxFUworICBBIHNwYWNlLXNlcGFyYXRlZCBsaXN0IG9mIGFkZGl0aW9uYWwgdGV4dCB0YWJsZXMgdG8gaW5jbHVkZS4gRm9yIGV4YW1wbGU6OgorCisgICAgQlJMVFRZX0RSQUNVVF9URVhUX1RBQkxFUz0iZGUgZnIiCisKK0JSTFRUWV9EUkFDVVRfQ09OVFJBQ1RJT05fVEFCTEVTCisgIEEgc3BhY2Utc2VwYXJhdGVkIGxpc3Qgb2YgYWRkaXRpb25hbCBjb250cmFjdGlvbiB0YWJsZXMgdG8gaW5jbHVkZS4gRm9yCisgIGV4YW1wbGU6OgorCisgICAgQlJMVFRZX0RSQUNVVF9DT05UUkFDVElPTl9UQUJMRVM9ImRlLWcyIGZyLWcyIgorCitCUkxUVFlfRFJBQ1VUX0FUVFJJQlVURVNfVEFCTEVTCisgIEEgc3BhY2Utc2VwYXJhdGVkIGxpc3Qgb2YgYWRkaXRpb25hbCBhdHRyaWJ1dGVzIHRhYmxlcyB0byBpbmNsdWRlLiBGb3IKKyAgZXhhbXBsZTo6CisKKyAgICBCUkxUVFlfRFJBQ1VUX0FUVFJJQlVURVNfVEFCTEVTPSJ1cHBlcl9sb3dlciBsZWZ0X3JpZ2h0IgorCitCUkxUVFlfRFJBQ1VUX0tFWUJPQVJEX1RBQkxFUworICBBIHNwYWNlLXNlcGFyYXRlZCBsaXN0IG9mIGFkZGl0aW9uYWwga2V5Ym9hcmQgdGFibGVzIHRvIGluY2x1ZGUuIEZvcgorICBleGFtcGxlOjoKKworICAgIEJSTFRUWV9EUkFDVVRfS0VZQk9BUkRfVEFCTEVTPSJrZXlwYWQgZGVza3RvcCIKKworQlJMVFRZX0RSQUNVVF9TUEVFQ0hfRFJJVkVSUworICBBIHNwYWNlLXNlcGFyYXRlZCBsaXN0IG9mIGFkZGl0aW9uYWwgc3BlZWNoIGRyaXZlcnMgdG8gaW5jbHVkZS4gRm9yIGV4YW1wbGU6OgorCisgICAgQlJMVFRZX0RSQUNVVF9TUEVFQ0hfRFJJVkVSUz0iZXMgZmwiCisKK0tlcm5lbCBDb21tYW5kIExpbmUgUGFyYW1ldGVycworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoaXMgbW9kdWxlIGludGVycHJldHMga2VybmVsIGNvbW1hbmQgbGluZSBwYXJhbWV0ZXJzIHRoYXQgYmVnaW4gd2l0aCB0aGUKK2BgcmQuYnJsdHR5LmBgIHByZWZpeC4gRXhwbGljaXQgdmFsdWVzIGZvciB0aGVzZSBwYXJhbWV0ZXJzIGNhbiwgb2YgY291cnNlLCBiZQorc3BlY2lmaWVkIG9uIHRoZSBrZXJuZWwgY29tbWFuZCBsaW5lIChlLmcuIHdpdGhpbiBgYGdydWIuY2ZnYGAgb3Igd2l0aGluCitgYC9ldGMvZGVmYXVsdC9ncnViYGApLiBJbiBhZGRpdGlvbiwgZGVmYXVsdCB2YWx1ZXMgZm9yIHRoZW0gY2FuIGJlIGRlZmluZWQKK3dpdGhpbiB0aGUgb3B0aW9uYWwgZmlsZSBgYGNtZGxpbmVgYCAod2hpY2ggaXMgaW4gYGAvZXRjL2JybHR0eS9Jbml0cmFtZnMvYGApLgorCitUaGUgb3JkZXIgb2YgcHJlY2VkZW5jZSwgZnJvbSBsb3dlc3QgdG8gaGlnaGVzdCwgZm9yIGEgdmFsdWUgaXM6CisKKyogQlJMVFRZIGJ1aWx0LWluIGRlZmF1bHQKKyogYGAvZXRjL2JybHR0eS5jb25mYGAKKyogaW5pdHJhbWZzIG92ZXJyaWRlCisqIGBgL2V0Yy9icmx0dHkvSW5pdHJhbWZzL2NtZGxpbmVgYAorKiBrZXJuZWwgY29tbWFuZCBsaW5lCisKK0JsYW5rIGxpbmVzIGFyZSBpZ25vcmVkLiBBIGhhc2ggW2BgI2BgXSBhbnl3aGVyZSBvbiBhIGxpbmUgYmVnaW5zIGEgY29tbWVudAord2hpY2ggY29udGludWVzIHRpbGwgdGhlIGVuZCBvZiB0aGF0IGxpbmUgLSBvbmx5IHRob3NlIGNoYXJhY3RlcnMgYmVmb3JlIGl0IGFyZQorc2lnbmlmaWNhbnQuIEFueSBudW1iZXIgb2Ygc3BhY2Utc2VwYXJhdGVkIG9wdGlvbnMgbWF5IGJlIHNwZWNpZmllZCBvbiBhIGxpbmUuCitUaGUgc3ludGF4IGZvciBhbiBvcHRpb24gaXMgYGBuYW1lPXZhbHVlYGAgKHdpdGhvdXQgdGhlIGBgcmQuYnJsdHR5LmBgIHByZWZpeCkuCitUaGUgYGA9dmFsdWVgYCBwYXJ0IGlzIG9wdGlvbmFsIC0gaWYgdGhlcmUncyBubyBgYD1gYCB0aGVuIHRoZSB2YWx1ZSBpcworYGB5ZXNgYC4KKworRGlzYWJsaW5nIEJSTFRUWQorYGBgYGBgYGBgYGBgYGBgYAorCitHaXZlbiB0aGF0IEJSTFRUWSBpcyBhIHJhdGhlciBjb21wbGV4IGFwcGxpY2F0aW9uLCB0aGVyZSBhcmUgYSBudW1iZXIgb2Yga2VybmVsCitwYXJhbWV0ZXJzIHRoYXQgY2FuIGJlIHVzZWQgdG8gc2VsZWN0aXZlbHkgZGlzYWJsZSBhIG51bWJlciBvZiBpdHMgY29tcG9uZW50cy4KK0luIGFsbCBjYXNlcywgaWYgYW55IG9mIHRoZXNlIHBhcmFtZXRlcnMgaXNuJ3Qgc3BlY2lmaWVkIHRoZW4gaXQgZGVmYXVsdHMgdG8KK2BgMWBgIChlbmFibGVkKS4gVGhleSBhcmU6CisKKyAgPT09PT09PT09PT09PT09PT09PT09PT09PSAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgS2VybmVsIFBhcmFtZXRlciAgICAgICAgICAgRWZmZWN0CisgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIGBgcmQuYnJsdHR5PTBgYCAgICAgICAgICAgIENvbXBsZXRlbHkgZGlzYWJsZSBCUkxUVFkuCisgIGBgcmQuYnJsdHR5LmJsdWV0b290aD0wYGAgIERpc2FibGUgQmx1ZXRvb3RoIHN1cHBvcnQuCisgIGBgcmQuYnJsdHR5LnNvdW5kPTBgYCAgICAgIERpc2FibGUgc3BlZWNoIGRyaXZlcnMgYW5kIHNvdW5kIHN1cHBvcnQuCisgIGBgcmQuYnJsdHR5LnB1bHNlPTBgYCAgICAgIERpc2FibGUgdGhlIFB1bHNlIEF1ZGlvIHNlcnZlci4KKyAgYGByZC5icmx0dHkuc3BlZWNoZD0wYGAgICAgRGlzYWJsZSB0aGUgU3BlZWNoIERpc3BhdGNoZXIgc2VydmVyLgorICA9PT09PT09PT09PT09PT09PT09PT09PT09ICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitTcGVjaWZ5aW5nIEJSTFRUWSBvcHRpb25zCitgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgCisKK0FsbCBvZiBCUkxUVFkncyBvcHRpb25zIHRoYXQgY2FuIGJlIHNwZWNpZmllZCB2aWEgZW52aXJvbm1lbnQgdmFyaWFibGVzIChzZWUKK2BgbWFuIGJybHR0eWBgIGZvciB0aGUgZnVsbCBsaXN0KSBjYW4gYmUgc3BlY2lmaWVkIHZpYSBrZXJuZWwgcGFyYW1ldGVycy4gRm9yCitleGFtcGxlLCB0aGUga2VybmVsIHBhcmFtZXRlciBgYHJkLmJybHR0eS5icmFpbGxlX2RyaXZlcj12b2BgIGlzIG1hcHBlZCB0byB0aGUKK2Vudmlyb25tZW50IHZhcmlhYmxlIGFzc2lnbm1lbnQgYGBCUkxUVFlfQlJBSUxMRV9EUklWRVI9dm9gYC4gU29tZSBvZiB0aGUgbW9yZQoraW50ZXJlc3Rpbmcgb25lcyBhcmU6CisKKyAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgS2VybmVsIFBhcmFtZXRlciAgICAgICAgICAgICAgICAgIERlZmF1bHQgVmFsdWUKKyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgYGByZC5icmx0dHkuYnJhaWxsZV9kcml2ZXJgYCAgICAgIHNldHRpbmcgaW4gYGAvZXRjL2JybHR0eS5jb25mYGAKKyAgYGByZC5icmx0dHkuYnJhaWxsZV9wYXJhbWV0ZXJzYGAgIHNldHRpbmcgaW4gYGAvZXRjL2JybHR0eS5jb25mYGAKKyAgYGByZC5icmx0dHkuYnJhaWxsZV9kZXZpY2VgYCAgICAgIHNldHRpbmcgaW4gYGAvZXRjL2JybHR0eS5jb25mYGAKKyAgYGByZC5icmx0dHkudGV4dF90YWJsZWBgICAgICAgICAgIHNldHRpbmcgaW4gYGAvZXRjL2JybHR0eS5jb25mYGAKKyAgYGByZC5icmx0dHkuYXR0cmlidXRlc190YWJsZWBgICAgIHNldHRpbmcgaW4gYGAvZXRjL2JybHR0eS5jb25mYGAKKyAgYGByZC5icmx0dHkuY29udHJhY3Rpb25fdGFibGVgYCAgIHNldHRpbmcgaW4gYGAvZXRjL2JybHR0eS5jb25mYGAKKyAgYGByZC5icmx0dHkua2V5Ym9hcmRfdGFibGVgYCAgICAgIHNldHRpbmcgaW4gYGAvZXRjL2JybHR0eS5jb25mYGAKKyAgYGByZC5icmx0dHkuc3BlZWNoX2RyaXZlcmBgICAgICAgIHNldHRpbmcgaW4gYGAvZXRjL2JybHR0eS5jb25mYGAKKyAgYGByZC5icmx0dHkuc3BlZWNoX3BhcmFtZXRlcnNgYCAgIHNldHRpbmcgaW4gYGAvZXRjL2JybHR0eS5jb25mYGAKKyAgYGByZC5icmx0dHkubG9nX2ZpbGVgYCAgICAgICAgICAgIGBgL3J1bi9pbml0cmFtZnMvYnJsdHR5LmxvZ2BgCisgIGBgcmQuYnJsdHR5LmxvZ19sZXZlbGBgICAgICAgICAgICBzZXR0aW5nIGluIGBgL2V0Yy9icmx0dHkuY29uZmBgCisgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1NwZWVjaCBEcml2ZXJzCistLS0tLS0tLS0tLS0tLQorCitTaW5jZSBzcGVlY2ggZHJpdmVycywgYnkgdGhlaXIgdmVyeSBuYXR1cmUsIHJlcXVpcmUgc291bmQ6CisKKyogTm9uZSBvZiB0aGVtIGNhbiBzdGFydCB1bnRpbCB0aGUgYGBpbml0cXVldWVgYCBob29rIGhhcyBiZWVuIGV4ZWN1dGVkLgorCisqIE5vbmUgb2YgdGhlbSBjYW4gc3RhcnQgaWYgc291bmQgaGFzIGJlZW4gZGlzYWJsZWQgKHZpYSB0aGUgcmQuYnJsdHR5LnNvdW5kPTAKKyAga2VybmVsIHBhcmFtZXRlcikuCisKK1NwZWVjaCBkZWZhdWx0cyB0byBiZWluZyBvZmYgZXZlbiBpZiBhIHNwZWVjaCBkcml2ZXIgaGFzIGJlZW4gY29uZmlndXJlZCB2aWEKK2BgL2V0Yy9icmx0dHkuY29uZmBgLiBUaGlzIGlzIGJlY2F1c2UgeW91ciBwcmVmZXJyZWQgc3BlZWNoIGRyaXZlciBtYXkgbm90IHdvcmsKK2FsbCB0aGF0IHdlbGwsIG9yIG1heSBldmVuIGNhdXNlIHByb2JsZW1zLCB3aGVuIHVzZWQgd2l0aGluIHRoZSBtb3JlIHByaW1pdGl2ZQoraW5pdHJhbWZzIGVudmlyb25tZW50LiBJZiB5b3UnZCBsaWtlIHRvIHVzZSBzcGVlY2ggdGhlbiB5b3UgbmVlZCB0byBleHBsaWNpdGx5CitzZXQgdGhlIGRyaXZlci4gV2hpbGUgeW91IGNhbiBkbyBzbyB2aWEgdGhlIGBgcmQuYnJsdHR5LnNwZWVjaF9kcml2ZXJgYCBrZXJuZWwKK2NvbW1hbmQgbGluZSBwYXJhbWV0ZXIsIHRoZSBlYXNpZXN0IHdheSB0byBjb25maWd1cmUgYSBwZXJzaXN0ZW50IHNldHRpbmcgaXMKK3ZpYSB0aGUgYGBzcGVlY2hfZHJpdmVyYGAgb3B0aW9uIGluIGBgL2V0Yy9icmx0dHkvSW5pdHJhbWZzL2NtZGxpbmVgYC4KKworSGVyZSdzIGhvdyB3ZWxsIGVhY2ggb2YgdGhlIHNwZWVjaCBkcml2ZXJzIHdvcmtzOgorCitlbgorICBUaGUgYGBlbmBgIFtlU3BlYWstTkddIHNwZWVjaCBkcml2ZXIgd29ya3MuCisKK2VzCisgIFRoZSBgYGVzYGAgW2VTcGVha10gc3BlZWNoIGRyaXZlciB3b3Jrcy4gSXQgcmVxdWlyZXMgUHVsc2UgQXVkaW8sIHNvOgorCisgICogSXQgZG9lc24ndCBzdGFydCB1bnRpbCB0aGUgYGBpbml0cXVldWVgYCBob29rIGhhcyBiZWVuIGV4ZWN1dGVkLgorCisgICogSXQgY2FuJ3Qgc3RhcnQgaWYgUHVsc2UgQXVkaW8gZmFpbHMgdG8gc3RhcnQgb3IgaGFzIGJlZW4gZGlzYWJsZWQgKHZpYQorICAgIHRoZSByZC5icmx0dHkucHVsc2U9MCBrZXJuZWwgcGFyYW1ldGVyKS4KKworZmwKKyAgVGhlIGBgZmxgYCBbRmVzdGl2YWwgTGl0ZV0gc3BlZWNoIGRyaXZlciBkb2Vzbid0IHdvcmsgLSBpdCBydW5zIGJ1dCBkb2Vzbid0CisgIHNwZWFrLiBUaGlzIGFwcGVhcnMgdG8gYmUgZHVlIHRvIGEgYnVnIHdpdGhpbiBGZXN0aXZhbCBMaXRlIGl0c2VsZiBiZWNhdXNlCisgIGl0IGFsc28gcmVtYWlucyBzaWxlbnQgd2hlbiB0ZXN0ZWQgb24gdGhlIGZ1bGwgc3lzdGVtLgorCitmdgorICBUaGUgYGBmdmBgIFtGZXN0aXZhbF0gc3BlZWNoIGRyaXZlciBkb2Vzbid0IHdvcmsgLSBpdCBjcmFzaGVzLiBUaGlzIGFwcGVhcnMKKyAgdG8gYmUgZHVlIHRvIGEgYnVnIHdpdGhpbiBGZXN0aXZhbCBpdHNlbGYgYmVjYXVzZSBpdCBhbHNvIGNyYXNoZXMgd2hlbiB0ZXN0ZWQKKyAgb24gdGhlIGZ1bGwgc3lzdGVtLgorCitzZAorICBUaGUgYGBzZGBgIFtTcGVlY2ggRGlzcGF0Y2hlcl0gc3BlZWNoIGRyaXZlciBoYXNuJ3QgYmVlbiB0ZXN0ZWQgYW5kIHByb2JhYmx5CisgIHdvbid0IHdvcmsuCisKZGlmZiAtLWdpdCBhL0luaXRyYW1mcy9EcmFjdXQvYWxzYS1zdGFydC5zaCBiL0luaXRyYW1mcy9EcmFjdXQvYWxzYS1zdGFydC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4yNmFiNGExCi0tLSAvZGV2L251bGwKKysrIGIvSW5pdHJhbWZzL0RyYWN1dC9hbHNhLXN0YXJ0LnNoCkBAIC0wLDAgKzEsNSBAQAorIyEvYmluL2Jhc2gKKworZ2V0YXJnYm9vbCAxIHJkLmJybHR0eSAmJiBnZXRhcmdib29sIDEgcmQuYnJsdHR5LnNvdW5kICYmIHsKKyAgIGFsc2F1bm11dGUKK30KZGlmZiAtLWdpdCBhL0luaXRyYW1mcy9EcmFjdXQvYmx1ZXRvb3RoLXN0YXJ0LnNoIGIvSW5pdHJhbWZzL0RyYWN1dC9ibHVldG9vdGgtc3RhcnQuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMGQ1NzRkMQotLS0gL2Rldi9udWxsCisrKyBiL0luaXRyYW1mcy9EcmFjdXQvYmx1ZXRvb3RoLXN0YXJ0LnNoCkBAIC0wLDAgKzEsNyBAQAorIyEvYmluL2Jhc2gKKworZ2V0YXJnYm9vbCAxIHJkLmJybHR0eSAmJiBnZXRhcmdib29sIDEgcmQuYnJsdHR5LmJsdWV0b290aCAmJiB7CisgICBzeXN0ZW1jdGwgLXEgaXMtYWN0aXZlIGJsdWV0b290aCB8fCB7CisgICAgICBzeXN0ZW1jdGwgLS1uby1ibG9jayBzdGFydCBibHVldG9vdGgKKyAgIH0KK30KZGlmZiAtLWdpdCBhL0luaXRyYW1mcy9EcmFjdXQvYnJsdHR5LXN0YXJ0LnNoIGIvSW5pdHJhbWZzL0RyYWN1dC9icmx0dHktc3RhcnQuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZWE1MTQzNwotLS0gL2Rldi9udWxsCisrKyBiL0luaXRyYW1mcy9EcmFjdXQvYnJsdHR5LXN0YXJ0LnNoCkBAIC0wLDAgKzEsNzggQEAKKyMhL2Jpbi9iYXNoCisKK2V4cG9ydCBCUkxUVFlfU1RBUlRfTUVTU0FHRT0iaW5pdHJhbWZzIHN0YXJ0aW5nIgorZXhwb3J0IEJSTFRUWV9TVE9QX01FU1NBR0U9ImluaXRyYW1mcyBmaW5pc2hlZCIKKworQlJMVFRZX09WRVJSSURFX1BSRUZFUkVOQ0U9ImJyYWlsbGUta2V5Ym9hcmQtZW5hYmxlZD15ZXMiCitCUkxUVFlfT1ZFUlJJREVfUFJFRkVSRU5DRSs9IixicmFpbGxlLWlucHV0LW1vZGU9dGV4dCIKK2V4cG9ydCBCUkxUVFlfT1ZFUlJJREVfUFJFRkVSRU5DRQorCitleHBvcnQgQlJMVFRZX1NDUkVFTl9EUklWRVI9Imx4IgorZXhwb3J0IEJSTFRUWV9TUEVFQ0hfRFJJVkVSPSJubyIKKworZXhwb3J0IEJSTFRUWV9XUklUQUJMRV9ESVJFQ1RPUlk9Ii9ydW4iCitleHBvcnQgQlJMVFRZX1BJRF9GSUxFPSIke0JSTFRUWV9XUklUQUJMRV9ESVJFQ1RPUll9L2JybHR0eS5waWQiCitleHBvcnQgQlJMVFRZX0xPR19GSUxFPSIke0JSTFRUWV9XUklUQUJMRV9ESVJFQ1RPUll9L2luaXRyYW1mcy9icmx0dHkubG9nIgorCitleHBvcnQgQlJMVFRZX1VQREFUQUJMRV9ESVJFQ1RPUlk9Ii9ldGMiCitleHBvcnQgQlJMVFRZX1BSRUZFUkVOQ0VTX0ZJTEU9IiR7QlJMVFRZX1VQREFUQUJMRV9ESVJFQ1RPUll9L2JybHR0eS5wcmVmcyIKKworYnJsdHR5U2V0T3B0aW9uKCkgeworICAgbG9jYWwgb3B0aW9uPSIkezF9IgorICAgbG9jYWwgbmFtZT0iJHtvcHRpb24lJT0qfSIKKworICAgaWYgWyAiJHtuYW1lfSIgPSAiJHtvcHRpb259IiBdCisgICB0aGVuCisgICAgICBsb2NhbCB2YWx1ZT0ieWVzIgorICAgZWxzZQorICAgICAgbG9jYWwgdmFsdWU9IiR7b3B0aW9uIyo9fSIKKyAgIGZpCisKKyAgIFsgLXogIiR7bmFtZX0iIF0gfHwgeworICAgICAgbmFtZT0iJHtuYW1lXl4/fSIKKyAgICAgIGV4cG9ydCAiQlJMVFRZXyR7bmFtZX09JHt2YWx1ZX0iCisgICB9Cit9CisKK2JybHR0eVNldENvbmZpZ3VyZWRPcHRpb25zKCkgeworICAgbG9jYWwgZmlsZT0iL2V0Yy9icmx0dHkvSW5pdHJhbWZzL2NtZGxpbmUiCisKKyAgIFsgLWYgIiR7ZmlsZX0iIF0gJiYgWyAtciAiJHtmaWxlfSIgXSAmJiB7CisgICAgICBsb2NhbCBsaW5lCisKKyAgICAgIHdoaWxlIHJlYWQgbGluZQorICAgICAgZG8KKyAgICAgICAgIHNldCAtLSAke2xpbmUlJSMqfQorICAgICAgICAgbG9jYWwgb3B0aW9uCisKKyAgICAgICAgIGZvciBvcHRpb24KKyAgICAgICAgIGRvCisgICAgICAgICAgICBicmx0dHlTZXRPcHRpb24gIiR7b3B0aW9ufSIKKyAgICAgICAgIGRvbmUKKyAgICAgIGRvbmUgPCIke2ZpbGV9IgorICAgfQorfQorCiticmx0dHlTZXRFeHBsaWNpdE9wdGlvbnMoKSB7CisgICBsb2NhbCBvcHRpb24KKworICAgZm9yIG9wdGlvbgorICAgZG8KKyAgICAgIFtbICIke29wdGlvbn0iID1+IF4icmQuYnJsdHR5LiIoLiopIF1dICYmIHsKKyAgICAgICAgIGJybHR0eVNldE9wdGlvbiAiJHtCQVNIX1JFTUFUQ0hbMV19IgorICAgICAgfQorICAgZG9uZQorfQorCiticmx0dHlTZXRDb25maWd1cmVkT3B0aW9ucworYnJsdHR5U2V0RXhwbGljaXRPcHRpb25zICQoZ2V0Y21kbGluZSkKK2dldGFyZ2Jvb2wgMSByZC5icmx0dHkuc291bmQgfHwgZXhwb3J0IEJSTFRUWV9TUEVFQ0hfRFJJVkVSPSJubyIKKworZ2V0YXJnYm9vbCAxIHJkLmJybHR0eSAmJiAoCisgICAjIEdpdmUgdGhlIGtlcm5lbCBhIGJpdCBvZiB0aW1lIHRvIGZpbmlzaCBjcmVhdGluZyB0aGUgL2Rldi9pbnB1dC8gZGV2aWNlcworICAgIyAoZS5nLiBzbyB0aGF0IGJybHR0eSBjYW4gcGVyZm9ybSBrZXlib2FyZCBkaXNjb3ZlcnkgZm9yIGtleWJvYXJkIHRhYmxlcykKKyAgICMgd2l0aG91dCBkZWxheWluZyB0aGUgYm9vdC4KKworICAgc2xlZXAgMQorICAgYnJsdHR5IC1FICtuCispICYKZGlmZiAtLWdpdCBhL0luaXRyYW1mcy9EcmFjdXQvYnJsdHR5LXN0b3Auc2ggYi9Jbml0cmFtZnMvRHJhY3V0L2JybHR0eS1zdG9wLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjI3NjExYWIKLS0tIC9kZXYvbnVsbAorKysgYi9Jbml0cmFtZnMvRHJhY3V0L2JybHR0eS1zdG9wLnNoCkBAIC0wLDAgKzEsMyBAQAorIyEvYmluL2Jhc2gKKworYnJsdHR5IC1FIC1DCmRpZmYgLS1naXQgYS9Jbml0cmFtZnMvRHJhY3V0L2NtZGxpbmUgYi9Jbml0cmFtZnMvRHJhY3V0L2NtZGxpbmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzlhZWZkMwotLS0gL2Rldi9udWxsCisrKyBiL0luaXRyYW1mcy9EcmFjdXQvY21kbGluZQpAQCAtMCwwICsxLDE2IEBACisjIFRoaXMgZmlsZSBpcyB3aGVyZSB5b3UgY2FuIHNwZWNpZnkgYW55IHJkLmJybHR0eS4ga2VybmVsIHBhcmFtZXRlcnMgdGhhdCBhcmUKKyMgdG8gYmUgaW5jbHVkZWQgd2l0aGluIHRoZSBpbml0cmFtZnMgaW1hZ2UgYW5kIGFwcGxpZWQgYXMgZGVmYXVsdCB2YWx1ZXMuCisKKyMgVGhlIG9yZGVyIG9mIHByZWNlZGVuY2UsIGZyb20gbG93ZXN0IHRvIGhpZ2hlc3QsIGZvciBhbiBvcHRpb24ncyB2YWx1ZSBpczoKKyMgKiBCUkxUVFkgYnVpbHQtaW4gZGVmYXVsdAorIyAqIC9ldGMvYnJsdHR5LmNvbmYKKyMgKiBpbml0cmFtZnMgb3ZlcnJpZGUKKyMgKiB0aGlzIGZpbGUKKyMgKiBrZXJuZWwgY29tbWFuZCBsaW5lCisKKyMgQmxhbmsgbGluZXMgYXJlIGlnbm9yZWQuIEEgaGFzaCBbI10gYW55d2hlcmUgb24gYSBsaW5lIGJlZ2lucyBhIGNvbW1lbnQgd2hpY2gKKyMgY29udGludWVzIHRpbGwgdGhlIGVuZCBvZiB0aGF0IGxpbmUgLSBvbmx5IHRob3NlIGNoYXJhY3RlcnMgYmVmb3JlIGl0IGFyZQorIyBzaWduaWZpY2FudC4gQW55IG51bWJlciBvZiBzcGFjZS1zZXBhcmF0ZWQgb3B0aW9ucyBtYXkgYmUgc3BlY2lmaWVkIG9uIGEKKyMgbGluZS4gVGhlIHN5bnRheCBmb3IgYW4gb3B0aW9uIGlzIG5hbWU9dmFsdWUgKHdpdGhvdXQgdGhlIHJkLmJybHR0eS4gcHJlZml4KS4KKyMgVGhlID12YWx1ZSBwYXJ0IGlzIG9wdGlvbmFsIC0gaWYgdGhlcmUncyBubyA9IHRoZW4gdGhlIHZhbHVlIGlzIHllcy4KKwpkaWZmIC0tZ2l0IGEvSW5pdHJhbWZzL0RyYWN1dC9kYnVzLXN0YXJ0LnNoIGIvSW5pdHJhbWZzL0RyYWN1dC9kYnVzLXN0YXJ0LnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmZkOWUyMTAKLS0tIC9kZXYvbnVsbAorKysgYi9Jbml0cmFtZnMvRHJhY3V0L2RidXMtc3RhcnQuc2gKQEAgLTAsMCArMSw3IEBACisjIS9iaW4vYmFzaAorCitnZXRhcmdib29sIDEgcmQuYnJsdHR5ICYmIGdldGFyZ2Jvb2wgMSByZC5icmx0dHkuYmx1ZXRvb3RoICYmIHsKKyAgIHN5c3RlbWN0bCAtcSBpcy1hY3RpdmUgZGJ1cyB8fCB7CisgICAgICBzeXN0ZW1jdGwgLS1uby1ibG9jayBzdGFydCBkYnVzCisgICB9Cit9CmRpZmYgLS1naXQgYS9Jbml0cmFtZnMvRHJhY3V0L2RyYWN1dC5jb25mIGIvSW5pdHJhbWZzL0RyYWN1dC9kcmFjdXQuY29uZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xODYyMWQyCi0tLSAvZGV2L251bGwKKysrIGIvSW5pdHJhbWZzL0RyYWN1dC9kcmFjdXQuY29uZgpAQCAtMCwwICsxLDI3IEBACisjIFRoZSBwcmVmZXJyZWQgbG9jYWxlICh1c2VkIHRvIGRldGVybWluZSB0aGUgZGVmYXVsdCB0ZXh0IGFuZCBjb250cmFjdGlvbiB0YWJsZXMpLgorQlJMVFRZX0RSQUNVVF9MT0NBTEU9IiIKKworIyBBIHNwYWNlLXNlcGFyYXRlZCBsaXN0IG9mIGFkZGl0aW9uYWwgYnJhaWxsZSBkcml2ZXJzIHRvIGluY2x1ZGUuCitCUkxUVFlfRFJBQ1VUX0JSQUlMTEVfRFJJVkVSUz0iIgorCisjIFdoZXRoZXIgb3Igbm90IEJsdWV0b290aCBzdXBwb3J0IHNob3VsZCBiZSBpbmNsdWRlZCB3aXRoaW4gdGhlIGluaXRyYW1mcy4KKyMgU2V0IHRoaXMgdmFyaWFibGUgdG8geWVzIGlmIGNvbW11bmljYXRpb24gd2l0aCB5b3VyIGJyYWlsbGUgZGV2aWNlIGlzIHZpYQorIyBCbHVldG9vdGguIE5vdGUgdGhhdCB0aGlzIG9wdGlvbiBpcyBpbnNlY3VyZSBiZWNhdXNlIHRoZSBsaW5rIGtleXMgZm9yIGFsbCBvZgorIyB5b3VyIHBhaXJlZCBCbHVldG9vdGggZGV2aWNlcyB3aWxsIGJlIHN0b3JlZCB3aXRoaW4gdGhlIGluaXRyYW1mcyBpbWFnZS4KK0JSTFRUWV9EUkFDVVRfQkxVRVRPT1RIX1NVUFBPUlQ9bm8KKworIyBBIHNwYWNlLXNlcGFyYXRlZCBsaXN0IG9mIGFkZGl0aW9uYWwgdGV4dCB0YWJsZXMgdG8gaW5jbHVkZS4KK0JSTFRUWV9EUkFDVVRfVEVYVF9UQUJMRVM9IiIKKworIyBBIHNwYWNlLXNlcGFyYXRlZCBsaXN0IG9mIGFkZGl0aW9uYWwgY29udHJhY3Rpb24gdGFibGVzIHRvIGluY2x1ZGUuCitCUkxUVFlfRFJBQ1VUX0NPTlRSQUNUSU9OX1RBQkxFUz0iIgorCisjIEEgc3BhY2Utc2VwYXJhdGVkIGxpc3Qgb2YgYWRkaXRpb25hbCBhdHRyaWJ1dGVzIHRhYmxlcyB0byBpbmNsdWRlLgorQlJMVFRZX0RSQUNVVF9BVFRSSUJVVEVTX1RBQkxFUz0iIgorCisjIEEgc3BhY2Utc2VwYXJhdGVkIGxpc3Qgb2YgYWRkaXRpb25hbCBrZXlib2FyZCB0YWJsZXMgdG8gaW5jbHVkZS4KK0JSTFRUWV9EUkFDVVRfS0VZQk9BUkRfVEFCTEVTPSIiCisKKyMgQSBzcGFjZS1zZXBhcmF0ZWQgbGlzdCBvZiBhZGRpdGlvbmFsIHNwZWVjaCBkcml2ZXJzIHRvIGluY2x1ZGUuCitCUkxUVFlfRFJBQ1VUX1NQRUVDSF9EUklWRVJTPSIiCisKZGlmZiAtLWdpdCBhL0luaXRyYW1mcy9EcmFjdXQvbW9kdWxlLXNldHVwLnNoIGIvSW5pdHJhbWZzL0RyYWN1dC9tb2R1bGUtc2V0dXAuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uY2Q0OWEyNQotLS0gL2Rldi9udWxsCisrKyBiL0luaXRyYW1mcy9EcmFjdXQvbW9kdWxlLXNldHVwLnNoCkBAIC0wLDAgKzEsMzI2IEBACisjIS9iaW4vYmFzaAorCisjIGNhbGxlZCBieSBkcmFjdXQKK2NoZWNrKCkgeworICAgcmVxdWlyZV9iaW5hcmllcyBicmx0dHkgYnJsdHR5LWxzaW5jIHx8IHJldHVybiAxCisgICByZXR1cm4gMAorfQorCisjIGNhbGxlZCBieSBkcmFjdXQKK2RlcGVuZHMoKSB7CisgICByZXR1cm4gMAorfQorCisjIGNhbGxlZCBieSBkcmFjdXQKK2luc3RhbGxrZXJuZWwoKSB7CisgICBpbnN0bW9kcyBwY3Nwa3IgdWlucHV0CisgICBbIC1kICIke2luaXRkaXJ9L2V0Yy9ibHVldG9vdGgiIF0gJiYgaW5zdG1vZHMgPWRyaXZlcnMvYmx1ZXRvb3RoID1uZXQvYmx1ZXRvb3RoCisgICBbIC1kICIke2luaXRkaXJ9L2V0Yy9hbHNhIiBdICYmIGluc3Rtb2RzID1zb3VuZAorICAgcmV0dXJuIDAKK30KKworIyBjYWxsZWQgYnkgZHJhY3V0CitpbnN0YWxsKCkgeworICAgYnJsdHR5SW1wb3J0SW5zdGFsbE9wdGlvbnMKKyAgIGxvY2FsIC1BIGluY2x1ZGVkRHJpdmVycworCisgICBsb2NhbCBCUkxUVFlfRVhFQ1VUQUJMRV9QQVRIPSIvdXNyL2Jpbi9icmx0dHkiCisgICBpbnN0X2JpbmFyeSAiJHtCUkxUVFlfRVhFQ1VUQUJMRV9QQVRIfSIKKyAgIGxvY2FsIGJybHR0eUxvZz0iJChMQ19BTEw9IiR7QlJMVFRZX0RSQUNVVF9MT0NBTEU6LSR7TEFOR319IiAiJHtCUkxUVFlfRVhFQ1VUQUJMRV9QQVRIfSIgLUUgLXYgLWUgLWxkZWJ1ZyAyPiYxKSIKKyAgIAorICAgZXhwb3J0IEJSTFRUWV9DT05GSUdVUkFUSU9OX0ZJTEU9Ii9ldGMvYnJsdHR5LmNvbmYiCisgICBicmx0dHlJbmNsdWRlRGF0YUZpbGVzICIke0JSTFRUWV9DT05GSUdVUkFUSU9OX0ZJTEV9IgorCisgICBicmx0dHlJbmNsdWRlRGF0YUZpbGVzICQoYnJsdHR5R2V0UHJvcGVydHkgImluY2x1ZGluZyBkYXRhIGZpbGUiKQorICAgYnJsdHR5SW5jbHVkZVNjcmVlbkRyaXZlcnMgbHgKKworICAgYnJsdHR5SW5jbHVkZUJyYWlsbGVEcml2ZXJzICQoYnJsdHR5R2V0Q29uZmlndXJlZERyaXZlcnMgYnJhaWxsZSkKKyAgIGJybHR0eUluY2x1ZGVCcmFpbGxlRHJpdmVycyAke0JSTFRUWV9EUkFDVVRfQlJBSUxMRV9EUklWRVJTfQorCisgICBicmx0dHlJbmNsdWRlU3BlZWNoRHJpdmVycyAkKGJybHR0eUdldENvbmZpZ3VyZWREcml2ZXJzIHNwZWVjaCkKKyAgIGJybHR0eUluY2x1ZGVTcGVlY2hEcml2ZXJzICR7QlJMVFRZX0RSQUNVVF9TUEVFQ0hfRFJJVkVSU30KKyAgICAgIAorICAgYnJsdHR5SW5jbHVkZVRhYmxlcyBUZXh0ICAgICAgICB0dGIgJHtCUkxUVFlfRFJBQ1VUX1RFWFRfVEFCTEVTfQorICAgYnJsdHR5SW5jbHVkZVRhYmxlcyBDb250cmFjdGlvbiBjdGIgJHtCUkxUVFlfRFJBQ1VUX0NPTlRSQUNUSU9OX1RBQkxFU30KKyAgIGJybHR0eUluY2x1ZGVUYWJsZXMgQXR0cmlidXRlcyAgYXRiICR7QlJMVFRZX0RSQUNVVF9BVFRSSUJVVEVTX1RBQkxFU30KKyAgIGJybHR0eUluY2x1ZGVUYWJsZXMgS2V5Ym9hcmQgICAga3RiICR7QlJMVFRZX0RSQUNVVF9LRVlCT0FSRF9UQUJMRVN9CisKKyAgIGJybHR0eUluc3RhbGxQcmVmZXJlbmNlc0ZpbGUgIi9ldGMvYnJsdHR5LnByZWZzIgorICAgYnJsdHR5SW5zdGFsbERpcmVjdG9yaWVzICIvZXRjL3hkZy9icmx0dHkiCisgICBpbnN0X3NpbXBsZSAiL2V0Yy9icmx0dHkvSW5pdHJhbWZzL2NtZGxpbmUiCisKKyAgIGlmIFsgIiR7QlJMVFRZX0RSQUNVVF9CTFVFVE9PVEhfU1VQUE9SVH0iID0gInllcyIgXQorICAgdGhlbgorICAgICAgYnJsdHR5SW5jbHVkZUJsdWV0b290aFN1cHBvcnQKKyAgIGZpCisKKyAgIGluc3RfaG9vayBjbWRsaW5lIDA1ICIke21vZGRpcn0vYnJsdHR5LXN0YXJ0LnNoIgorICAgaW5zdF9ob29rIGNsZWFudXAgOTUgIiR7bW9kZGlyfS9icmx0dHktc3RvcC5zaCIKKworICAgZHJhY3V0X25lZWRfaW5pdHF1ZXVlCit9CisKK2JybHR0eUluc3RhbGxQcmVmZXJlbmNlc0ZpbGUoKSB7CisgICBsb2NhbCBwYXRoPSIkezF9IgorICAgbG9jYWwgZmlsZT0kKGJybHR0eUdldFByb3BlcnR5ICJQcmVmZXJlbmNlcyBGaWxlIikKKworICAgaWYgWyAtbiAiJHtmaWxlfSIgXQorICAgdGhlbgorICAgICAgaWYgWyAiJHtmaWxlfSIgPSAiJHtmaWxlIy99IiBdCisgICAgICB0aGVuCisgICAgICAgICBsb2NhbCBkaXJlY3Rvcnk9JChicmx0dHlHZXRQcm9wZXJ0eSAiVXBkYXRhYmxlIERpcmVjdG9yeSIpCisKKyAgICAgICAgIGlmIFsgLW4gIiR7ZGlyZWN0b3J5fSIgXQorICAgICAgICAgdGhlbgorICAgICAgICAgICAgZmlsZT0iJHtkaXJlY3Rvcnl9LyR7ZmlsZX0iCisgICAgICAgICBmaQorICAgICAgZmkKKworICAgICAgaWYgWyAtZiAiJHtmaWxlfSIgXQorICAgICAgdGhlbgorICAgICAgICAgaW5zdF9zaW1wbGUgIiR7ZmlsZX0iICIke3BhdGh9IgorICAgICAgZmkKKyAgIGZpCit9CisKK2JybHR0eUluY2x1ZGVCcmFpbGxlRHJpdmVycygpIHsKKyAgIGxvY2FsIGNvZGUKKworICAgZm9yIGNvZGUKKyAgIGRvCisgICAgICBicmx0dHlJbmNsdWRlRHJpdmVyIGIgIiR7Y29kZX0iIHx8IGNvbnRpbnVlCisKKyAgICAgIGxvY2FsIGRpcmVjdG9yeT0iL2V0Yy9icmx0dHkvSW5wdXQvJHtjb2RlfSIKKyAgICAgIGJybHR0eUluY2x1ZGVEYXRhRmlsZXMgIiR7ZGlyZWN0b3J5fS8iKi5rdGIKKyAgICAgIGluc3RfbXVsdGlwbGUgLW8gIiR7ZGlyZWN0b3J5fS8iKi50eHQKKyAgIGRvbmUKK30KKworYnJsdHR5SW5jbHVkZVNwZWVjaERyaXZlcnMoKSB7CisgICBsb2NhbCBjb2RlCisKKyAgIGZvciBjb2RlCisgICBkbworICAgICAgYnJsdHR5SW5jbHVkZURyaXZlciBzICIke2NvZGV9IiB8fCBjb250aW51ZQorCisgICAgICBjYXNlICIke2NvZGV9IgorICAgICAgaW4KKyAgICAgICAgIGVuKQorICAgICAgICAgICAgaW5zdF9iaW5hcnkgZXNwZWFrLW5nCisgICAgICAgICAgICBicmx0dHlJbnN0YWxsRGlyZWN0b3JpZXMgIi91c3Ivc2hhcmUvZXNwZWFrLW5nLWRhdGEiCisgICAgICAgICAgICA7OworCisgICAgICAgICBlcykKKyAgICAgICAgICAgIGluc3RfYmluYXJ5IGVzcGVhaworICAgICAgICAgICAgYnJsdHR5SW5zdGFsbERpcmVjdG9yaWVzICIvdXNyL3NoYXJlL2VzcGVhay1kYXRhIgorICAgICAgICAgICAgYnJsdHR5SW5jbHVkZVB1bHNlQXVkaW9TdXBwb3J0CisgICAgICAgICAgICA7OworCisgICAgICAgICBmbCkKKyAgICAgICAgICAgIGluc3RfYmluYXJ5IGZsaXRlCisgICAgICAgICAgICA7OworCisgICAgICAgICBmdikKKyAgICAgICAgICAgIGluc3RfYmluYXJ5IGZlc3RpdmFsCisgICAgICAgICAgICBicmx0dHlJbnN0YWxsRGlyZWN0b3JpZXMgL2V0Yy9mZXN0aXZhbAorICAgICAgICAgICAgYnJsdHR5SW5zdGFsbERpcmVjdG9yaWVzIC91c3IvbGliKi9mZXN0aXZhbAorICAgICAgICAgICAgYnJsdHR5SW5zdGFsbERpcmVjdG9yaWVzIC91c3Ivc2hhcmUvZmVzdGl2YWwvbGliCisgICAgICAgICAgICA7OworCisgICAgICAgICBzZCkKKyAgICAgICAgICAgIGluc3RfYmluYXJ5IHNwZWVjaC1kaXNwYXRjaGVyCisgICAgICAgICAgICBicmx0dHlJbnN0YWxsRGlyZWN0b3JpZXMgL2V0Yy9zcGVlY2gtZGlzcGF0Y2hlcgorICAgICAgICAgICAgYnJsdHR5SW5zdGFsbERpcmVjdG9yaWVzIC91c3IvbGliKi9zcGVlY2gtZGlzcGF0Y2hlcgorICAgICAgICAgICAgYnJsdHR5SW5zdGFsbERpcmVjdG9yaWVzIC91c3IvbGliKi9zcGVlY2gtZGlzcGF0Y2hlci1tb2R1bGVzCisgICAgICAgICAgICBicmx0dHlJbnN0YWxsRGlyZWN0b3JpZXMgL3Vzci9zaGFyZS9zcGVlY2gtZGlzcGF0Y2hlcgorICAgICAgICAgICAgYnJsdHR5SW5zdGFsbERpcmVjdG9yaWVzIC91c3Ivc2hhcmUvc291bmRzL3NwZWVjaC1kaXNwYXRjaGVyCisgICAgICAgICAgICBicmx0dHlJbnN0YWxsU3lzdGVtZFVuaXRzIHNwZWVjaC1kaXNwYXRjaGVyZC5zZXJ2aWNlCisgICAgICAgICAgICBpbnN0X2hvb2sgaW5pdHF1ZXVlIDk4ICIke21vZGRpcn0vc3BlZWNoZC1zdGFydC5zaCIKKyAgICAgICAgICAgIDs7CisgICAgICBlc2FjCisKKyAgICAgIGJybHR0eUluY2x1ZGVBbHNhU3VwcG9ydAorICAgZG9uZQorfQorCiticmx0dHlJbmNsdWRlU2NyZWVuRHJpdmVycygpIHsKKyAgIGxvY2FsIGNvZGUKKworICAgZm9yIGNvZGUKKyAgIGRvCisgICAgICBicmx0dHlJbmNsdWRlRHJpdmVyIHggIiR7Y29kZX0iIHx8IGNvbnRpbnVlCisgICBkb25lCit9CisKK2JybHR0eUluY2x1ZGVEcml2ZXIoKSB7CisgICBsb2NhbCB0eXBlPSIkezF9IgorICAgbG9jYWwgY29kZT0iJHsyfSIKKworICAgWyAiJHtjb2RlfSIgPSAibm8iIF0gJiYgcmV0dXJuIDEKKyAgIGxvY2FsIGRyaXZlcj0iJHt0eXBlfSR7Y29kZX0iCisKKyAgIFsgLW4gIiR7aW5jbHVkZWREcml2ZXJzWyR7ZHJpdmVyfV19IiBdICYmIHJldHVybiAyCisgICBpbmNsdWRlZERyaXZlcnNbJHtkcml2ZXJ9XT0xCisKKyAgIGluc3RfbGliZGlyX2ZpbGUgImJybHR0eS9saWJicmx0dHkke2RyaXZlcn0uc28qIgorICAgcmV0dXJuIDAKK30KKworYnJsdHR5SW5jbHVkZVRhYmxlcygpIHsKKyAgIGxvY2FsIHN1YmRpcmVjdG9yeT0iJHsxfSIKKyAgIGxvY2FsIGV4dGVuc2lvbj0iJHsyfSIKKyAgIHNoaWZ0IDIKKyAgIGxvY2FsIG5hbWUKKworICAgZm9yIG5hbWUKKyAgIGRvCisgICAgICBicmx0dHlJbmNsdWRlRGF0YUZpbGVzICIvZXRjL2JybHR0eS8ke3N1YmRpcmVjdG9yeX0vJHtuYW1lfS4ke2V4dGVuc2lvbn0iCisgICBkb25lCit9CisKK2JybHR0eUluY2x1ZGVEYXRhRmlsZXMoKSB7CisgICBsb2NhbCBmaWxlCisKKyAgIHdoaWxlIHJlYWQgLXIgZmlsZQorICAgZG8KKyAgICAgIGluc3Rfc2ltcGxlICIke2ZpbGV9IgorICAgZG9uZSA8IDwoYnJsdHR5LWxzaW5jICIke0B9IikKK30KKworYnJsdHR5R2V0Q29uZmlndXJlZERyaXZlcnMoKSB7CisgICBsb2NhbCBjYXRlZ29yeT0iJHsxfSIKKyAgIGJybHR0eUdldFByb3BlcnR5ICJjaGVja2luZyBmb3IgJHtjYXRlZ29yeX0gZHJpdmVyIgorfQorCiticmx0dHlHZXRQcm9wZXJ0eSgpIHsKKyAgIGxvY2FsIG5hbWU9IiR7MX0iCisgICBlY2hvICIke2JybHR0eUxvZ30iIHwgYXdrICIvOiAqJHtuYW1lfSAqOi8ge3ByaW50IFwkTkZ9IgorfQorCiticmx0dHlJbXBvcnRJbnN0YWxsT3B0aW9ucygpIHsKKyAgIGxvY2FsIGZpbGU9Ii9ldGMvYnJsdHR5L0luaXRyYW1mcy9kcmFjdXQuY29uZiIKKyAgIFsgLWYgIiR7ZmlsZX0iIF0gJiYgWyAtciAiJHtmaWxlfSIgXSAmJiAuICIke2ZpbGV9IgorfQorCiticmx0dHlJbmNsdWRlUHVsc2VBdWRpb1N1cHBvcnQoKSB7CisgICBbIC1kICIke2luaXRkaXJ9L2V0Yy9wdWxzZSIgXSAmJiByZXR1cm4gMAorCisgICBicmx0dHlJbnN0YWxsRGlyZWN0b3JpZXMgL2V0Yy9wdWxzZQorICAgYnJsdHR5SW5zdGFsbERpcmVjdG9yaWVzIC91c3Ivc2hhcmUvcHVsc2VhdWRpbworICAgYnJsdHR5SW5zdGFsbERpcmVjdG9yaWVzIC91c3IvbGliKi9wdWxzZWF1ZGlvCisgICBicmx0dHlJbnN0YWxsRGlyZWN0b3JpZXMgL3Vzci9saWIqL3B1bHNlLSoKKyAgIGJybHR0eUluc3RhbGxEaXJlY3RvcmllcyAvdXNyL2xpYmV4ZWMvcHVsc2UKKworICAgaW5zdF9tdWx0aXBsZSAtbyBwdWxzZWF1ZGlvIHBhY3RsIHBhY21kCisgICBpbnN0X211bHRpcGxlIC1vIHBhbW9uIHBhcGxheSBwYXJlYyBwYXJlY29yZAorCisgICBicmx0dHlBZGRVc2VyRW50cmllcyBwdWxzZQorICAgYnJsdHR5QWRkR3JvdXBFbnRyaWVzIHB1bHNlIHB1bHNlLWFjY2VzcyBwdWxzZS1ydAorCisgICBicmx0dHlJbmNsdWRlQWxzYVN1cHBvcnQKKyAgIGJybHR0eUluY2x1ZGVNZXNzYWdlQnVzU3VwcG9ydAorICAgaW5zdF9zaW1wbGUgL2V0Yy9kYnVzLTEvc3lzdGVtLmQvcHVsc2VhdWRpby1zeXN0ZW0uY29uZgorCisgICBpbnN0X2JpbmFyeSBjaG1vZAorICAgaW5zdF9ob29rIGluaXRxdWV1ZSA5NyAiJHttb2RkaXJ9L3B1bHNlLXN0YXJ0LnNoIgorICAgaW5zdF9ob29rIGNsZWFudXAgOTggIiR7bW9kZGlyfS9wdWxzZS1zdG9wLnNoIgorfQorCiticmx0dHlJbmNsdWRlQWxzYVN1cHBvcnQoKSB7CisgICBbIC1kICIke2luaXRkaXJ9L2V0Yy9hbHNhIiBdICYmIHJldHVybiAwOworCisgICBicmx0dHlJbnN0YWxsRGlyZWN0b3JpZXMgL2V0Yy9hbHNhCisgICBybSAtZiAiJHtpbml0ZGlyfS9ldGMvYWxzYS9jb25mLmQvIioKKworICAgYnJsdHR5SW5zdGFsbERpcmVjdG9yaWVzIC91c3Ivc2hhcmUvYWxzYQorICAgYnJsdHR5SW5zdGFsbERpcmVjdG9yaWVzIC91c3IvbGliL2Fsc2EKKyAgIGJybHR0eUluc3RhbGxEaXJlY3RvcmllcyAvdXNyL2xpYiovYWxzYS1saWIKKworICAgaW5zdF9tdWx0aXBsZSAtbyBhbHNhY3RsIGFsc2F1Y20gYWxzYW1peGVyIGFtaXhlciBhcGxheQorICAgaW5zdF9zY3JpcHQgYWxzYXVubXV0ZQorCisgICBpbnN0X2hvb2sgaW5pdHF1ZXVlIDk2ICIke21vZGRpcn0vYWxzYS1zdGFydC5zaCIKK30KKworYnJsdHR5SW5jbHVkZUJsdWV0b290aFN1cHBvcnQoKSB7CisgICBbIC1kICIke2luaXRkaXJ9L2V0Yy9ibHVldG9vdGgiIF0gJiYgcmV0dXJuIDAKKworICAgYnJsdHR5SW5zdGFsbERpcmVjdG9yaWVzIC9ldGMvYmx1ZXRvb3RoCisgICBicmx0dHlJbnN0YWxsRGlyZWN0b3JpZXMgL3Zhci9saWIvYmx1ZXRvb3RoCisKKyAgIGluc3RfbXVsdGlwbGUgLW8gYmx1ZXRvb3RoY3RsIGhjaWNvbmZpZyBoY2l0b29sIHNkcHRvb2wKKyAgIGluc3RfYmluYXJ5IC91c3IvbGliZXhlYy9ibHVldG9vdGgvYmx1ZXRvb3RoZAorICAgYnJsdHR5SW5zdGFsbFN5c3RlbWRVbml0cyBibHVldG9vdGguc2VydmljZSBibHVldG9vdGgudGFyZ2V0CisKKyAgIGluc3RfaG9vayBpbml0cXVldWUgOTcgIiR7bW9kZGlyfS9ibHVldG9vdGgtc3RhcnQuc2giCisgICBicmx0dHlJbmNsdWRlTWVzc2FnZUJ1c1N1cHBvcnQKK30KKworYnJsdHR5SW5jbHVkZU1lc3NhZ2VCdXNTdXBwb3J0KCkgeworICAgWyAtZCAiJHtpbml0ZGlyfS9ldGMvZGJ1cy0xIiBdICYmIHJldHVybiAwCisKKyAgIGJybHR0eUFkZE1lc3NhZ2VCdXNVc2VycyAvdXNyL3NoYXJlL2RidXMtMS9zeXN0ZW0uZC8qCisgICBicmx0dHlBZGRNZXNzYWdlQnVzVXNlcnMgL2V0Yy9kYnVzLTEvc3lzdGVtLmQvKgorCisgICBicmx0dHlJbnN0YWxsRGlyZWN0b3JpZXMgL2V0Yy9kYnVzLTEKKyAgIGJybHR0eUluc3RhbGxEaXJlY3RvcmllcyAvdXNyL3NoYXJlL2RidXMtMQorICAgYnJsdHR5SW5zdGFsbERpcmVjdG9yaWVzIC91c3IvbGliZXhlYy9kYnVzLTEKKworICAgaW5zdF9tdWx0aXBsZSBkYnVzLWRhZW1vbiBkYnVzLXNlbmQgZGJ1cy1jbGVhbnVwLXNvY2tldHMgZGJ1cy1tb25pdG9yCisgICBicmx0dHlJbnN0YWxsU3lzdGVtZFVuaXRzIGRidXMuc2VydmljZSBkYnVzLnNvY2tldAorCisgICBpbnN0X2hvb2sgaW5pdHF1ZXVlIDk2ICIke21vZGRpcn0vZGJ1cy1zdGFydC5zaCIKK30KKworYnJsdHR5QWRkTWVzc2FnZUJ1c1VzZXJzKCkgeworICAgc2V0IC0tIGRidXMgJChzZWQgLW4gLXIgLWUgJ3MvXi4qIHVzZXI9IihbXiJdKikiLiokL1wxL3AnICIke0B9IiB8IHNvcnQgLXUpCisgICBicmx0dHlBZGRVc2VyRW50cmllcyAiJHtAfSIKKyAgIGJybHR0eUFkZEdyb3VwRW50cmllcyAiJHtAfSIKK30KKworYnJsdHR5QWRkVXNlckVudHJpZXMoKSB7CisgICBicmx0dHlBZGRFbnRyaWVzIHBhc3N3ZCAiJHtAfSIKK30KKworYnJsdHR5QWRkR3JvdXBFbnRyaWVzKCkgeworICAgYnJsdHR5QWRkRW50cmllcyBncm91cCAiJHtAfSIKK30KKworYnJsdHR5QWRkRW50cmllcygpIHsKKyAgIGxvY2FsIGZpbGU9IiR7MX0iCisgICBzaGlmdCAxCisKKyAgIGxvY2FsIHNvdXJjZT0iL2V0Yy8ke2ZpbGV9IgorICAgbG9jYWwgdGFyZ2V0PSIke2luaXRkaXJ9JHtzb3VyY2V9IgorICAgbG9jYWwgbmFtZQorCisgICBmb3IgbmFtZQorICAgZG8KKyAgICAgIGdyZXAgLXEgLWUgIl4ke25hbWV9OiIgIiR7dGFyZ2V0fSIgfHwgeworICAgICAgICAgbG9jYWwgbGluZT0iJChncmVwICJeJHtuYW1lfToiICIke3NvdXJjZX0iKSIKKyAgICAgICAgIFsgLW4gIiR7bGluZX0iIF0gJiYgZWNobyA+PiIke3RhcmdldH0iICIke2xpbmV9IgorICAgICAgfQorICAgZG9uZQorfQorCiticmx0dHlJbnN0YWxsU3lzdGVtZFVuaXRzKCkgeworICAgbG9jYWwgdW5pdAorCisgICBmb3IgdW5pdAorICAgZG8KKyAgICAgIGluc3Rfc2ltcGxlICIvdXNyL2xpYi9zeXN0ZW1kL3N5c3RlbS8ke3VuaXR9IgorICAgZG9uZQorfQorCiticmx0dHlJbnN0YWxsRGlyZWN0b3JpZXMoKSB7CisgICBsb2NhbCBkaXJlY3RvcnkKKworICAgZm9yIGRpcmVjdG9yeQorICAgZG8KKyAgICAgIFsgLWQgIiR7ZGlyZWN0b3J5fSIgXSAmJiB7CisgICAgICAgICBldmFsIHNldCAtLSAkKGZpbmQgIiR7ZGlyZWN0b3J5fSIgLXByaW50ZiAiJyVwJ1xuIikKKyAgICAgICAgIGluc3RfbXVsdGlwbGUgIiR7QH0iCisgICAgICB9CisgICBkb25lCit9CisKZGlmZiAtLWdpdCBhL0luaXRyYW1mcy9EcmFjdXQvcHVsc2Utc3RhcnQuc2ggYi9Jbml0cmFtZnMvRHJhY3V0L3B1bHNlLXN0YXJ0LnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmVkOWFmMzYKLS0tIC9kZXYvbnVsbAorKysgYi9Jbml0cmFtZnMvRHJhY3V0L3B1bHNlLXN0YXJ0LnNoCkBAIC0wLDAgKzEsNSBAQAorIyEvYmluL2Jhc2gKKworZ2V0YXJnYm9vbCAxIHJkLmJybHR0eSAmJiBnZXRhcmdib29sIDEgcmQuYnJsdHR5LnNvdW5kICYmIGdldGFyZ2Jvb2wgMSByZC5icmx0dHkucHVsc2UgJiYgeworICAgY2htb2QgYSt3IC90bXAgJiYgcHVsc2VhdWRpbyAtLWRhZW1vbml6ZT15ZXMgLS1zeXN0ZW0gLS1kaXNhbGxvdy1leGl0IC0tZGlzYWxsb3ctbW9kdWxlLWxvYWRpbmcgLS1kaXNhYmxlLXNobQorfQpkaWZmIC0tZ2l0IGEvSW5pdHJhbWZzL0RyYWN1dC9wdWxzZS1zdG9wLnNoIGIvSW5pdHJhbWZzL0RyYWN1dC9wdWxzZS1zdG9wLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjVmMmIwMzMKLS0tIC9kZXYvbnVsbAorKysgYi9Jbml0cmFtZnMvRHJhY3V0L3B1bHNlLXN0b3Auc2gKQEAgLTAsMCArMSwzIEBACisjIS9iaW4vYmFzaAorCityZWFkIDwvcnVuL3B1bHNlL3BpZCBwaWQgJiYga2lsbCAtMCAiJHtwaWR9IiAmJiBraWxsIC1LSUxMICIke3BpZH0iCmRpZmYgLS1naXQgYS9Jbml0cmFtZnMvRHJhY3V0L3NwZWVjaGQtc3RhcnQuc2ggYi9Jbml0cmFtZnMvRHJhY3V0L3NwZWVjaGQtc3RhcnQuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNDQ2N2MyNwotLS0gL2Rldi9udWxsCisrKyBiL0luaXRyYW1mcy9EcmFjdXQvc3BlZWNoZC1zdGFydC5zaApAQCAtMCwwICsxLDcgQEAKKyMhL2Jpbi9iYXNoCisKK2dldGFyZ2Jvb2wgMSByZC5icmx0dHkgJiYgZ2V0YXJnYm9vbCAxIHJkLmJybHR0eS5zb3VuZCAmJiBnZXRhcmdib29sIDEgcmQuYnJsdHR5LnNwZWVjaGQgJiYgeworICAgc3lzdGVtY3RsIC1xIGlzLWFjdGl2ZSBzcGVlY2gtZGlzcGF0Y2hlcmQgfHwgeworICAgICAgc3lzdGVtY3RsIC0tbm8tYmxvY2sgc3RhcnQgc3BlZWNoLWRpc3BhdGNoZXJkCisgICB9Cit9CmRpZmYgLS1naXQgYS9MSUNFTlNFLUxHUEwgYi9MSUNFTlNFLUxHUEwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjEyNGNmNQotLS0gL2Rldi9udWxsCisrKyBiL0xJQ0VOU0UtTEdQTApAQCAtMCwwICsxLDUxMCBAQAorCisgICAgICAgICAgICAgICAgICBHTlUgTEVTU0VSIEdFTkVSQUwgUFVCTElDIExJQ0VOU0UKKyAgICAgICAgICAgICAgICAgICAgICAgVmVyc2lvbiAyLjEsIEZlYnJ1YXJ5IDE5OTkKKworIENvcHlyaWdodCAoQykgMTk5MSwgMTk5OSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgICAgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorIEV2ZXJ5b25lIGlzIHBlcm1pdHRlZCB0byBjb3B5IGFuZCBkaXN0cmlidXRlIHZlcmJhdGltIGNvcGllcworIG9mIHRoaXMgbGljZW5zZSBkb2N1bWVudCwgYnV0IGNoYW5naW5nIGl0IGlzIG5vdCBhbGxvd2VkLgorCitbVGhpcyBpcyB0aGUgZmlyc3QgcmVsZWFzZWQgdmVyc2lvbiBvZiB0aGUgTGVzc2VyIEdQTC4gIEl0IGFsc28gY291bnRzCisgYXMgdGhlIHN1Y2Nlc3NvciBvZiB0aGUgR05VIExpYnJhcnkgUHVibGljIExpY2Vuc2UsIHZlcnNpb24gMiwgaGVuY2UKKyB0aGUgdmVyc2lvbiBudW1iZXIgMi4xLl0KKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByZWFtYmxlCisKKyAgVGhlIGxpY2Vuc2VzIGZvciBtb3N0IHNvZnR3YXJlIGFyZSBkZXNpZ25lZCB0byB0YWtlIGF3YXkgeW91cgorZnJlZWRvbSB0byBzaGFyZSBhbmQgY2hhbmdlIGl0LiAgQnkgY29udHJhc3QsIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKK0xpY2Vuc2VzIGFyZSBpbnRlbmRlZCB0byBndWFyYW50ZWUgeW91ciBmcmVlZG9tIHRvIHNoYXJlIGFuZCBjaGFuZ2UKK2ZyZWUgc29mdHdhcmUtLXRvIG1ha2Ugc3VyZSB0aGUgc29mdHdhcmUgaXMgZnJlZSBmb3IgYWxsIGl0cyB1c2Vycy4KKworICBUaGlzIGxpY2Vuc2UsIHRoZSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXBwbGllcyB0byBzb21lCitzcGVjaWFsbHkgZGVzaWduYXRlZCBzb2Z0d2FyZSBwYWNrYWdlcy0tdHlwaWNhbGx5IGxpYnJhcmllcy0tb2YgdGhlCitGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gYW5kIG90aGVyIGF1dGhvcnMgd2hvIGRlY2lkZSB0byB1c2UgaXQuICBZb3UKK2NhbiB1c2UgaXQgdG9vLCBidXQgd2Ugc3VnZ2VzdCB5b3UgZmlyc3QgdGhpbmsgY2FyZWZ1bGx5IGFib3V0IHdoZXRoZXIKK3RoaXMgbGljZW5zZSBvciB0aGUgb3JkaW5hcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpcyB0aGUgYmV0dGVyCitzdHJhdGVneSB0byB1c2UgaW4gYW55IHBhcnRpY3VsYXIgY2FzZSwgYmFzZWQgb24gdGhlIGV4cGxhbmF0aW9ucworYmVsb3cuCisKKyAgV2hlbiB3ZSBzcGVhayBvZiBmcmVlIHNvZnR3YXJlLCB3ZSBhcmUgcmVmZXJyaW5nIHRvIGZyZWVkb20gb2YgdXNlLAorbm90IHByaWNlLiAgT3VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2VzIGFyZSBkZXNpZ25lZCB0byBtYWtlIHN1cmUgdGhhdAoreW91IGhhdmUgdGhlIGZyZWVkb20gdG8gZGlzdHJpYnV0ZSBjb3BpZXMgb2YgZnJlZSBzb2Z0d2FyZSAoYW5kIGNoYXJnZQorZm9yIHRoaXMgc2VydmljZSBpZiB5b3Ugd2lzaCk7IHRoYXQgeW91IHJlY2VpdmUgc291cmNlIGNvZGUgb3IgY2FuIGdldAoraXQgaWYgeW91IHdhbnQgaXQ7IHRoYXQgeW91IGNhbiBjaGFuZ2UgdGhlIHNvZnR3YXJlIGFuZCB1c2UgcGllY2VzIG9mCitpdCBpbiBuZXcgZnJlZSBwcm9ncmFtczsgYW5kIHRoYXQgeW91IGFyZSBpbmZvcm1lZCB0aGF0IHlvdSBjYW4gZG8KK3RoZXNlIHRoaW5ncy4KKworICBUbyBwcm90ZWN0IHlvdXIgcmlnaHRzLCB3ZSBuZWVkIHRvIG1ha2UgcmVzdHJpY3Rpb25zIHRoYXQgZm9yYmlkCitkaXN0cmlidXRvcnMgdG8gZGVueSB5b3UgdGhlc2UgcmlnaHRzIG9yIHRvIGFzayB5b3UgdG8gc3VycmVuZGVyIHRoZXNlCityaWdodHMuICBUaGVzZSByZXN0cmljdGlvbnMgdHJhbnNsYXRlIHRvIGNlcnRhaW4gcmVzcG9uc2liaWxpdGllcyBmb3IKK3lvdSBpZiB5b3UgZGlzdHJpYnV0ZSBjb3BpZXMgb2YgdGhlIGxpYnJhcnkgb3IgaWYgeW91IG1vZGlmeSBpdC4KKworICBGb3IgZXhhbXBsZSwgaWYgeW91IGRpc3RyaWJ1dGUgY29waWVzIG9mIHRoZSBsaWJyYXJ5LCB3aGV0aGVyIGdyYXRpcworb3IgZm9yIGEgZmVlLCB5b3UgbXVzdCBnaXZlIHRoZSByZWNpcGllbnRzIGFsbCB0aGUgcmlnaHRzIHRoYXQgd2UgZ2F2ZQoreW91LiAgWW91IG11c3QgbWFrZSBzdXJlIHRoYXQgdGhleSwgdG9vLCByZWNlaXZlIG9yIGNhbiBnZXQgdGhlIHNvdXJjZQorY29kZS4gIElmIHlvdSBsaW5rIG90aGVyIGNvZGUgd2l0aCB0aGUgbGlicmFyeSwgeW91IG11c3QgcHJvdmlkZQorY29tcGxldGUgb2JqZWN0IGZpbGVzIHRvIHRoZSByZWNpcGllbnRzLCBzbyB0aGF0IHRoZXkgY2FuIHJlbGluayB0aGVtCit3aXRoIHRoZSBsaWJyYXJ5IGFmdGVyIG1ha2luZyBjaGFuZ2VzIHRvIHRoZSBsaWJyYXJ5IGFuZCByZWNvbXBpbGluZworaXQuICBBbmQgeW91IG11c3Qgc2hvdyB0aGVtIHRoZXNlIHRlcm1zIHNvIHRoZXkga25vdyB0aGVpciByaWdodHMuCisKKyAgV2UgcHJvdGVjdCB5b3VyIHJpZ2h0cyB3aXRoIGEgdHdvLXN0ZXAgbWV0aG9kOiAoMSkgd2UgY29weXJpZ2h0IHRoZQorbGlicmFyeSwgYW5kICgyKSB3ZSBvZmZlciB5b3UgdGhpcyBsaWNlbnNlLCB3aGljaCBnaXZlcyB5b3UgbGVnYWwKK3Blcm1pc3Npb24gdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoZSBsaWJyYXJ5LgorCisgIFRvIHByb3RlY3QgZWFjaCBkaXN0cmlidXRvciwgd2Ugd2FudCB0byBtYWtlIGl0IHZlcnkgY2xlYXIgdGhhdAordGhlcmUgaXMgbm8gd2FycmFudHkgZm9yIHRoZSBmcmVlIGxpYnJhcnkuICBBbHNvLCBpZiB0aGUgbGlicmFyeSBpcworbW9kaWZpZWQgYnkgc29tZW9uZSBlbHNlIGFuZCBwYXNzZWQgb24sIHRoZSByZWNpcGllbnRzIHNob3VsZCBrbm93Cit0aGF0IHdoYXQgdGhleSBoYXZlIGlzIG5vdCB0aGUgb3JpZ2luYWwgdmVyc2lvbiwgc28gdGhhdCB0aGUgb3JpZ2luYWwKK2F1dGhvcidzIHJlcHV0YXRpb24gd2lsbCBub3QgYmUgYWZmZWN0ZWQgYnkgcHJvYmxlbXMgdGhhdCBtaWdodCBiZQoraW50cm9kdWNlZCBieSBvdGhlcnMuCisMCisgIEZpbmFsbHksIHNvZnR3YXJlIHBhdGVudHMgcG9zZSBhIGNvbnN0YW50IHRocmVhdCB0byB0aGUgZXhpc3RlbmNlIG9mCithbnkgZnJlZSBwcm9ncmFtLiAgV2Ugd2lzaCB0byBtYWtlIHN1cmUgdGhhdCBhIGNvbXBhbnkgY2Fubm90CitlZmZlY3RpdmVseSByZXN0cmljdCB0aGUgdXNlcnMgb2YgYSBmcmVlIHByb2dyYW0gYnkgb2J0YWluaW5nIGEKK3Jlc3RyaWN0aXZlIGxpY2Vuc2UgZnJvbSBhIHBhdGVudCBob2xkZXIuICBUaGVyZWZvcmUsIHdlIGluc2lzdCB0aGF0CithbnkgcGF0ZW50IGxpY2Vuc2Ugb2J0YWluZWQgZm9yIGEgdmVyc2lvbiBvZiB0aGUgbGlicmFyeSBtdXN0IGJlCitjb25zaXN0ZW50IHdpdGggdGhlIGZ1bGwgZnJlZWRvbSBvZiB1c2Ugc3BlY2lmaWVkIGluIHRoaXMgbGljZW5zZS4KKworICBNb3N0IEdOVSBzb2Z0d2FyZSwgaW5jbHVkaW5nIHNvbWUgbGlicmFyaWVzLCBpcyBjb3ZlcmVkIGJ5IHRoZQorb3JkaW5hcnkgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBUaGlzIGxpY2Vuc2UsIHRoZSBHTlUgTGVzc2VyCitHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcHBsaWVzIHRvIGNlcnRhaW4gZGVzaWduYXRlZCBsaWJyYXJpZXMsIGFuZAoraXMgcXVpdGUgZGlmZmVyZW50IGZyb20gdGhlIG9yZGluYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBXZSB1c2UKK3RoaXMgbGljZW5zZSBmb3IgY2VydGFpbiBsaWJyYXJpZXMgaW4gb3JkZXIgdG8gcGVybWl0IGxpbmtpbmcgdGhvc2UKK2xpYnJhcmllcyBpbnRvIG5vbi1mcmVlIHByb2dyYW1zLgorCisgIFdoZW4gYSBwcm9ncmFtIGlzIGxpbmtlZCB3aXRoIGEgbGlicmFyeSwgd2hldGhlciBzdGF0aWNhbGx5IG9yIHVzaW5nCithIHNoYXJlZCBsaWJyYXJ5LCB0aGUgY29tYmluYXRpb24gb2YgdGhlIHR3byBpcyBsZWdhbGx5IHNwZWFraW5nIGEKK2NvbWJpbmVkIHdvcmssIGEgZGVyaXZhdGl2ZSBvZiB0aGUgb3JpZ2luYWwgbGlicmFyeS4gIFRoZSBvcmRpbmFyeQorR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB0aGVyZWZvcmUgcGVybWl0cyBzdWNoIGxpbmtpbmcgb25seSBpZiB0aGUKK2VudGlyZSBjb21iaW5hdGlvbiBmaXRzIGl0cyBjcml0ZXJpYSBvZiBmcmVlZG9tLiAgVGhlIExlc3NlciBHZW5lcmFsCitQdWJsaWMgTGljZW5zZSBwZXJtaXRzIG1vcmUgbGF4IGNyaXRlcmlhIGZvciBsaW5raW5nIG90aGVyIGNvZGUgd2l0aAordGhlIGxpYnJhcnkuCisKKyAgV2UgY2FsbCB0aGlzIGxpY2Vuc2UgdGhlICJMZXNzZXIiIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYmVjYXVzZSBpdAorZG9lcyBMZXNzIHRvIHByb3RlY3QgdGhlIHVzZXIncyBmcmVlZG9tIHRoYW4gdGhlIG9yZGluYXJ5IEdlbmVyYWwKK1B1YmxpYyBMaWNlbnNlLiAgSXQgYWxzbyBwcm92aWRlcyBvdGhlciBmcmVlIHNvZnR3YXJlIGRldmVsb3BlcnMgTGVzcworb2YgYW4gYWR2YW50YWdlIG92ZXIgY29tcGV0aW5nIG5vbi1mcmVlIHByb2dyYW1zLiAgVGhlc2UgZGlzYWR2YW50YWdlcworYXJlIHRoZSByZWFzb24gd2UgdXNlIHRoZSBvcmRpbmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtYW55CitsaWJyYXJpZXMuICBIb3dldmVyLCB0aGUgTGVzc2VyIGxpY2Vuc2UgcHJvdmlkZXMgYWR2YW50YWdlcyBpbiBjZXJ0YWluCitzcGVjaWFsIGNpcmN1bXN0YW5jZXMuCisKKyAgRm9yIGV4YW1wbGUsIG9uIHJhcmUgb2NjYXNpb25zLCB0aGVyZSBtYXkgYmUgYSBzcGVjaWFsIG5lZWQgdG8KK2VuY291cmFnZSB0aGUgd2lkZXN0IHBvc3NpYmxlIHVzZSBvZiBhIGNlcnRhaW4gbGlicmFyeSwgc28gdGhhdCBpdAorYmVjb21lcyBhIGRlLWZhY3RvIHN0YW5kYXJkLiAgVG8gYWNoaWV2ZSB0aGlzLCBub24tZnJlZSBwcm9ncmFtcyBtdXN0CitiZSBhbGxvd2VkIHRvIHVzZSB0aGUgbGlicmFyeS4gIEEgbW9yZSBmcmVxdWVudCBjYXNlIGlzIHRoYXQgYSBmcmVlCitsaWJyYXJ5IGRvZXMgdGhlIHNhbWUgam9iIGFzIHdpZGVseSB1c2VkIG5vbi1mcmVlIGxpYnJhcmllcy4gIEluIHRoaXMKK2Nhc2UsIHRoZXJlIGlzIGxpdHRsZSB0byBnYWluIGJ5IGxpbWl0aW5nIHRoZSBmcmVlIGxpYnJhcnkgdG8gZnJlZQorc29mdHdhcmUgb25seSwgc28gd2UgdXNlIHRoZSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KKworICBJbiBvdGhlciBjYXNlcywgcGVybWlzc2lvbiB0byB1c2UgYSBwYXJ0aWN1bGFyIGxpYnJhcnkgaW4gbm9uLWZyZWUKK3Byb2dyYW1zIGVuYWJsZXMgYSBncmVhdGVyIG51bWJlciBvZiBwZW9wbGUgdG8gdXNlIGEgbGFyZ2UgYm9keSBvZgorZnJlZSBzb2Z0d2FyZS4gIEZvciBleGFtcGxlLCBwZXJtaXNzaW9uIHRvIHVzZSB0aGUgR05VIEMgTGlicmFyeSBpbgorbm9uLWZyZWUgcHJvZ3JhbXMgZW5hYmxlcyBtYW55IG1vcmUgcGVvcGxlIHRvIHVzZSB0aGUgd2hvbGUgR05VCitvcGVyYXRpbmcgc3lzdGVtLCBhcyB3ZWxsIGFzIGl0cyB2YXJpYW50LCB0aGUgR05VL0xpbnV4IG9wZXJhdGluZworc3lzdGVtLgorCisgIEFsdGhvdWdoIHRoZSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpcyBMZXNzIHByb3RlY3RpdmUgb2YgdGhlCit1c2VycycgZnJlZWRvbSwgaXQgZG9lcyBlbnN1cmUgdGhhdCB0aGUgdXNlciBvZiBhIHByb2dyYW0gdGhhdCBpcworbGlua2VkIHdpdGggdGhlIExpYnJhcnkgaGFzIHRoZSBmcmVlZG9tIGFuZCB0aGUgd2hlcmV3aXRoYWwgdG8gcnVuCit0aGF0IHByb2dyYW0gdXNpbmcgYSBtb2RpZmllZCB2ZXJzaW9uIG9mIHRoZSBMaWJyYXJ5LgorCisgIFRoZSBwcmVjaXNlIHRlcm1zIGFuZCBjb25kaXRpb25zIGZvciBjb3B5aW5nLCBkaXN0cmlidXRpb24gYW5kCittb2RpZmljYXRpb24gZm9sbG93LiAgUGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIGEKKyJ3b3JrIGJhc2VkIG9uIHRoZSBsaWJyYXJ5IiBhbmQgYSAid29yayB0aGF0IHVzZXMgdGhlIGxpYnJhcnkiLiAgVGhlCitmb3JtZXIgY29udGFpbnMgY29kZSBkZXJpdmVkIGZyb20gdGhlIGxpYnJhcnksIHdoZXJlYXMgdGhlIGxhdHRlciBtdXN0CitiZSBjb21iaW5lZCB3aXRoIHRoZSBsaWJyYXJ5IGluIG9yZGVyIHRvIHJ1bi4KKwwKKyAgICAgICAgICAgICAgICAgIEdOVSBMRVNTRVIgR0VORVJBTCBQVUJMSUMgTElDRU5TRQorICAgVEVSTVMgQU5EIENPTkRJVElPTlMgRk9SIENPUFlJTkcsIERJU1RSSUJVVElPTiBBTkQgTU9ESUZJQ0FUSU9OCisKKyAgMC4gVGhpcyBMaWNlbnNlIEFncmVlbWVudCBhcHBsaWVzIHRvIGFueSBzb2Z0d2FyZSBsaWJyYXJ5IG9yIG90aGVyCitwcm9ncmFtIHdoaWNoIGNvbnRhaW5zIGEgbm90aWNlIHBsYWNlZCBieSB0aGUgY29weXJpZ2h0IGhvbGRlciBvcgorb3RoZXIgYXV0aG9yaXplZCBwYXJ0eSBzYXlpbmcgaXQgbWF5IGJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZgordGhpcyBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoYWxzbyBjYWxsZWQgInRoaXMgTGljZW5zZSIpLgorRWFjaCBsaWNlbnNlZSBpcyBhZGRyZXNzZWQgYXMgInlvdSIuCisKKyAgQSAibGlicmFyeSIgbWVhbnMgYSBjb2xsZWN0aW9uIG9mIHNvZnR3YXJlIGZ1bmN0aW9ucyBhbmQvb3IgZGF0YQorcHJlcGFyZWQgc28gYXMgdG8gYmUgY29udmVuaWVudGx5IGxpbmtlZCB3aXRoIGFwcGxpY2F0aW9uIHByb2dyYW1zCisod2hpY2ggdXNlIHNvbWUgb2YgdGhvc2UgZnVuY3Rpb25zIGFuZCBkYXRhKSB0byBmb3JtIGV4ZWN1dGFibGVzLgorCisgIFRoZSAiTGlicmFyeSIsIGJlbG93LCByZWZlcnMgdG8gYW55IHN1Y2ggc29mdHdhcmUgbGlicmFyeSBvciB3b3JrCit3aGljaCBoYXMgYmVlbiBkaXN0cmlidXRlZCB1bmRlciB0aGVzZSB0ZXJtcy4gIEEgIndvcmsgYmFzZWQgb24gdGhlCitMaWJyYXJ5IiBtZWFucyBlaXRoZXIgdGhlIExpYnJhcnkgb3IgYW55IGRlcml2YXRpdmUgd29yayB1bmRlcgorY29weXJpZ2h0IGxhdzogdGhhdCBpcyB0byBzYXksIGEgd29yayBjb250YWluaW5nIHRoZSBMaWJyYXJ5IG9yIGEKK3BvcnRpb24gb2YgaXQsIGVpdGhlciB2ZXJiYXRpbSBvciB3aXRoIG1vZGlmaWNhdGlvbnMgYW5kL29yIHRyYW5zbGF0ZWQKK3N0cmFpZ2h0Zm9yd2FyZGx5IGludG8gYW5vdGhlciBsYW5ndWFnZS4gIChIZXJlaW5hZnRlciwgdHJhbnNsYXRpb24gaXMKK2luY2x1ZGVkIHdpdGhvdXQgbGltaXRhdGlvbiBpbiB0aGUgdGVybSAibW9kaWZpY2F0aW9uIi4pCisKKyAgIlNvdXJjZSBjb2RlIiBmb3IgYSB3b3JrIG1lYW5zIHRoZSBwcmVmZXJyZWQgZm9ybSBvZiB0aGUgd29yayBmb3IKK21ha2luZyBtb2RpZmljYXRpb25zIHRvIGl0LiAgRm9yIGEgbGlicmFyeSwgY29tcGxldGUgc291cmNlIGNvZGUgbWVhbnMKK2FsbCB0aGUgc291cmNlIGNvZGUgZm9yIGFsbCBtb2R1bGVzIGl0IGNvbnRhaW5zLCBwbHVzIGFueSBhc3NvY2lhdGVkCitpbnRlcmZhY2UgZGVmaW5pdGlvbiBmaWxlcywgcGx1cyB0aGUgc2NyaXB0cyB1c2VkIHRvIGNvbnRyb2wKK2NvbXBpbGF0aW9uIGFuZCBpbnN0YWxsYXRpb24gb2YgdGhlIGxpYnJhcnkuCisKKyAgQWN0aXZpdGllcyBvdGhlciB0aGFuIGNvcHlpbmcsIGRpc3RyaWJ1dGlvbiBhbmQgbW9kaWZpY2F0aW9uIGFyZSBub3QKK2NvdmVyZWQgYnkgdGhpcyBMaWNlbnNlOyB0aGV5IGFyZSBvdXRzaWRlIGl0cyBzY29wZS4gIFRoZSBhY3Qgb2YKK3J1bm5pbmcgYSBwcm9ncmFtIHVzaW5nIHRoZSBMaWJyYXJ5IGlzIG5vdCByZXN0cmljdGVkLCBhbmQgb3V0cHV0IGZyb20KK3N1Y2ggYSBwcm9ncmFtIGlzIGNvdmVyZWQgb25seSBpZiBpdHMgY29udGVudHMgY29uc3RpdHV0ZSBhIHdvcmsgYmFzZWQKK29uIHRoZSBMaWJyYXJ5IChpbmRlcGVuZGVudCBvZiB0aGUgdXNlIG9mIHRoZSBMaWJyYXJ5IGluIGEgdG9vbCBmb3IKK3dyaXRpbmcgaXQpLiAgV2hldGhlciB0aGF0IGlzIHRydWUgZGVwZW5kcyBvbiB3aGF0IHRoZSBMaWJyYXJ5IGRvZXMKK2FuZCB3aGF0IHRoZSBwcm9ncmFtIHRoYXQgdXNlcyB0aGUgTGlicmFyeSBkb2VzLgorCisgIDEuIFlvdSBtYXkgY29weSBhbmQgZGlzdHJpYnV0ZSB2ZXJiYXRpbSBjb3BpZXMgb2YgdGhlIExpYnJhcnkncworY29tcGxldGUgc291cmNlIGNvZGUgYXMgeW91IHJlY2VpdmUgaXQsIGluIGFueSBtZWRpdW0sIHByb3ZpZGVkIHRoYXQKK3lvdSBjb25zcGljdW91c2x5IGFuZCBhcHByb3ByaWF0ZWx5IHB1Ymxpc2ggb24gZWFjaCBjb3B5IGFuCithcHByb3ByaWF0ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCBkaXNjbGFpbWVyIG9mIHdhcnJhbnR5OyBrZWVwIGludGFjdAorYWxsIHRoZSBub3RpY2VzIHRoYXQgcmVmZXIgdG8gdGhpcyBMaWNlbnNlIGFuZCB0byB0aGUgYWJzZW5jZSBvZiBhbnkKK3dhcnJhbnR5OyBhbmQgZGlzdHJpYnV0ZSBhIGNvcHkgb2YgdGhpcyBMaWNlbnNlIGFsb25nIHdpdGggdGhlCitMaWJyYXJ5LgorCisgIFlvdSBtYXkgY2hhcmdlIGEgZmVlIGZvciB0aGUgcGh5c2ljYWwgYWN0IG9mIHRyYW5zZmVycmluZyBhIGNvcHksCithbmQgeW91IG1heSBhdCB5b3VyIG9wdGlvbiBvZmZlciB3YXJyYW50eSBwcm90ZWN0aW9uIGluIGV4Y2hhbmdlIGZvciBhCitmZWUuCisMCisgIDIuIFlvdSBtYXkgbW9kaWZ5IHlvdXIgY29weSBvciBjb3BpZXMgb2YgdGhlIExpYnJhcnkgb3IgYW55IHBvcnRpb24KK29mIGl0LCB0aHVzIGZvcm1pbmcgYSB3b3JrIGJhc2VkIG9uIHRoZSBMaWJyYXJ5LCBhbmQgY29weSBhbmQKK2Rpc3RyaWJ1dGUgc3VjaCBtb2RpZmljYXRpb25zIG9yIHdvcmsgdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb24gMQorYWJvdmUsIHByb3ZpZGVkIHRoYXQgeW91IGFsc28gbWVldCBhbGwgb2YgdGhlc2UgY29uZGl0aW9uczoKKworICAgIGEpIFRoZSBtb2RpZmllZCB3b3JrIG11c3QgaXRzZWxmIGJlIGEgc29mdHdhcmUgbGlicmFyeS4KKworICAgIGIpIFlvdSBtdXN0IGNhdXNlIHRoZSBmaWxlcyBtb2RpZmllZCB0byBjYXJyeSBwcm9taW5lbnQgbm90aWNlcworICAgIHN0YXRpbmcgdGhhdCB5b3UgY2hhbmdlZCB0aGUgZmlsZXMgYW5kIHRoZSBkYXRlIG9mIGFueSBjaGFuZ2UuCisKKyAgICBjKSBZb3UgbXVzdCBjYXVzZSB0aGUgd2hvbGUgb2YgdGhlIHdvcmsgdG8gYmUgbGljZW5zZWQgYXQgbm8KKyAgICBjaGFyZ2UgdG8gYWxsIHRoaXJkIHBhcnRpZXMgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4KKworICAgIGQpIElmIGEgZmFjaWxpdHkgaW4gdGhlIG1vZGlmaWVkIExpYnJhcnkgcmVmZXJzIHRvIGEgZnVuY3Rpb24gb3IgYQorICAgIHRhYmxlIG9mIGRhdGEgdG8gYmUgc3VwcGxpZWQgYnkgYW4gYXBwbGljYXRpb24gcHJvZ3JhbSB0aGF0IHVzZXMKKyAgICB0aGUgZmFjaWxpdHksIG90aGVyIHRoYW4gYXMgYW4gYXJndW1lbnQgcGFzc2VkIHdoZW4gdGhlIGZhY2lsaXR5CisgICAgaXMgaW52b2tlZCwgdGhlbiB5b3UgbXVzdCBtYWtlIGEgZ29vZCBmYWl0aCBlZmZvcnQgdG8gZW5zdXJlIHRoYXQsCisgICAgaW4gdGhlIGV2ZW50IGFuIGFwcGxpY2F0aW9uIGRvZXMgbm90IHN1cHBseSBzdWNoIGZ1bmN0aW9uIG9yCisgICAgdGFibGUsIHRoZSBmYWNpbGl0eSBzdGlsbCBvcGVyYXRlcywgYW5kIHBlcmZvcm1zIHdoYXRldmVyIHBhcnQgb2YKKyAgICBpdHMgcHVycG9zZSByZW1haW5zIG1lYW5pbmdmdWwuCisKKyAgICAoRm9yIGV4YW1wbGUsIGEgZnVuY3Rpb24gaW4gYSBsaWJyYXJ5IHRvIGNvbXB1dGUgc3F1YXJlIHJvb3RzIGhhcworICAgIGEgcHVycG9zZSB0aGF0IGlzIGVudGlyZWx5IHdlbGwtZGVmaW5lZCBpbmRlcGVuZGVudCBvZiB0aGUKKyAgICBhcHBsaWNhdGlvbi4gIFRoZXJlZm9yZSwgU3Vic2VjdGlvbiAyZCByZXF1aXJlcyB0aGF0IGFueQorICAgIGFwcGxpY2F0aW9uLXN1cHBsaWVkIGZ1bmN0aW9uIG9yIHRhYmxlIHVzZWQgYnkgdGhpcyBmdW5jdGlvbiBtdXN0CisgICAgYmUgb3B0aW9uYWw6IGlmIHRoZSBhcHBsaWNhdGlvbiBkb2VzIG5vdCBzdXBwbHkgaXQsIHRoZSBzcXVhcmUKKyAgICByb290IGZ1bmN0aW9uIG11c3Qgc3RpbGwgY29tcHV0ZSBzcXVhcmUgcm9vdHMuKQorCitUaGVzZSByZXF1aXJlbWVudHMgYXBwbHkgdG8gdGhlIG1vZGlmaWVkIHdvcmsgYXMgYSB3aG9sZS4gIElmCitpZGVudGlmaWFibGUgc2VjdGlvbnMgb2YgdGhhdCB3b3JrIGFyZSBub3QgZGVyaXZlZCBmcm9tIHRoZSBMaWJyYXJ5LAorYW5kIGNhbiBiZSByZWFzb25hYmx5IGNvbnNpZGVyZWQgaW5kZXBlbmRlbnQgYW5kIHNlcGFyYXRlIHdvcmtzIGluCit0aGVtc2VsdmVzLCB0aGVuIHRoaXMgTGljZW5zZSwgYW5kIGl0cyB0ZXJtcywgZG8gbm90IGFwcGx5IHRvIHRob3NlCitzZWN0aW9ucyB3aGVuIHlvdSBkaXN0cmlidXRlIHRoZW0gYXMgc2VwYXJhdGUgd29ya3MuICBCdXQgd2hlbiB5b3UKK2Rpc3RyaWJ1dGUgdGhlIHNhbWUgc2VjdGlvbnMgYXMgcGFydCBvZiBhIHdob2xlIHdoaWNoIGlzIGEgd29yayBiYXNlZAorb24gdGhlIExpYnJhcnksIHRoZSBkaXN0cmlidXRpb24gb2YgdGhlIHdob2xlIG11c3QgYmUgb24gdGhlIHRlcm1zIG9mCit0aGlzIExpY2Vuc2UsIHdob3NlIHBlcm1pc3Npb25zIGZvciBvdGhlciBsaWNlbnNlZXMgZXh0ZW5kIHRvIHRoZQorZW50aXJlIHdob2xlLCBhbmQgdGh1cyB0byBlYWNoIGFuZCBldmVyeSBwYXJ0IHJlZ2FyZGxlc3Mgb2Ygd2hvIHdyb3RlCitpdC4KKworVGh1cywgaXQgaXMgbm90IHRoZSBpbnRlbnQgb2YgdGhpcyBzZWN0aW9uIHRvIGNsYWltIHJpZ2h0cyBvciBjb250ZXN0Cit5b3VyIHJpZ2h0cyB0byB3b3JrIHdyaXR0ZW4gZW50aXJlbHkgYnkgeW91OyByYXRoZXIsIHRoZSBpbnRlbnQgaXMgdG8KK2V4ZXJjaXNlIHRoZSByaWdodCB0byBjb250cm9sIHRoZSBkaXN0cmlidXRpb24gb2YgZGVyaXZhdGl2ZSBvcgorY29sbGVjdGl2ZSB3b3JrcyBiYXNlZCBvbiB0aGUgTGlicmFyeS4KKworSW4gYWRkaXRpb24sIG1lcmUgYWdncmVnYXRpb24gb2YgYW5vdGhlciB3b3JrIG5vdCBiYXNlZCBvbiB0aGUgTGlicmFyeQord2l0aCB0aGUgTGlicmFyeSAob3Igd2l0aCBhIHdvcmsgYmFzZWQgb24gdGhlIExpYnJhcnkpIG9uIGEgdm9sdW1lIG9mCithIHN0b3JhZ2Ugb3IgZGlzdHJpYnV0aW9uIG1lZGl1bSBkb2VzIG5vdCBicmluZyB0aGUgb3RoZXIgd29yayB1bmRlcgordGhlIHNjb3BlIG9mIHRoaXMgTGljZW5zZS4KKworICAzLiBZb3UgbWF5IG9wdCB0byBhcHBseSB0aGUgdGVybXMgb2YgdGhlIG9yZGluYXJ5IEdOVSBHZW5lcmFsIFB1YmxpYworTGljZW5zZSBpbnN0ZWFkIG9mIHRoaXMgTGljZW5zZSB0byBhIGdpdmVuIGNvcHkgb2YgdGhlIExpYnJhcnkuICBUbyBkbwordGhpcywgeW91IG11c3QgYWx0ZXIgYWxsIHRoZSBub3RpY2VzIHRoYXQgcmVmZXIgdG8gdGhpcyBMaWNlbnNlLCBzbwordGhhdCB0aGV5IHJlZmVyIHRvIHRoZSBvcmRpbmFyeSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgdmVyc2lvbiAyLAoraW5zdGVhZCBvZiB0byB0aGlzIExpY2Vuc2UuICAoSWYgYSBuZXdlciB2ZXJzaW9uIHRoYW4gdmVyc2lvbiAyIG9mIHRoZQorb3JkaW5hcnkgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaGFzIGFwcGVhcmVkLCB0aGVuIHlvdSBjYW4gc3BlY2lmeQordGhhdCB2ZXJzaW9uIGluc3RlYWQgaWYgeW91IHdpc2guKSAgRG8gbm90IG1ha2UgYW55IG90aGVyIGNoYW5nZSBpbgordGhlc2Ugbm90aWNlcy4KKwwKKyAgT25jZSB0aGlzIGNoYW5nZSBpcyBtYWRlIGluIGEgZ2l2ZW4gY29weSwgaXQgaXMgaXJyZXZlcnNpYmxlIGZvcgordGhhdCBjb3B5LCBzbyB0aGUgb3JkaW5hcnkgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXBwbGllcyB0byBhbGwKK3N1YnNlcXVlbnQgY29waWVzIGFuZCBkZXJpdmF0aXZlIHdvcmtzIG1hZGUgZnJvbSB0aGF0IGNvcHkuCisKKyAgVGhpcyBvcHRpb24gaXMgdXNlZnVsIHdoZW4geW91IHdpc2ggdG8gY29weSBwYXJ0IG9mIHRoZSBjb2RlIG9mCit0aGUgTGlicmFyeSBpbnRvIGEgcHJvZ3JhbSB0aGF0IGlzIG5vdCBhIGxpYnJhcnkuCisKKyAgNC4gWW91IG1heSBjb3B5IGFuZCBkaXN0cmlidXRlIHRoZSBMaWJyYXJ5IChvciBhIHBvcnRpb24gb3IKK2Rlcml2YXRpdmUgb2YgaXQsIHVuZGVyIFNlY3Rpb24gMikgaW4gb2JqZWN0IGNvZGUgb3IgZXhlY3V0YWJsZSBmb3JtCit1bmRlciB0aGUgdGVybXMgb2YgU2VjdGlvbnMgMSBhbmQgMiBhYm92ZSBwcm92aWRlZCB0aGF0IHlvdSBhY2NvbXBhbnkKK2l0IHdpdGggdGhlIGNvbXBsZXRlIGNvcnJlc3BvbmRpbmcgbWFjaGluZS1yZWFkYWJsZSBzb3VyY2UgY29kZSwgd2hpY2gKK211c3QgYmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb25zIDEgYW5kIDIgYWJvdmUgb24gYQorbWVkaXVtIGN1c3RvbWFyaWx5IHVzZWQgZm9yIHNvZnR3YXJlIGludGVyY2hhbmdlLgorCisgIElmIGRpc3RyaWJ1dGlvbiBvZiBvYmplY3QgY29kZSBpcyBtYWRlIGJ5IG9mZmVyaW5nIGFjY2VzcyB0byBjb3B5Citmcm9tIGEgZGVzaWduYXRlZCBwbGFjZSwgdGhlbiBvZmZlcmluZyBlcXVpdmFsZW50IGFjY2VzcyB0byBjb3B5IHRoZQorc291cmNlIGNvZGUgZnJvbSB0aGUgc2FtZSBwbGFjZSBzYXRpc2ZpZXMgdGhlIHJlcXVpcmVtZW50IHRvCitkaXN0cmlidXRlIHRoZSBzb3VyY2UgY29kZSwgZXZlbiB0aG91Z2ggdGhpcmQgcGFydGllcyBhcmUgbm90Citjb21wZWxsZWQgdG8gY29weSB0aGUgc291cmNlIGFsb25nIHdpdGggdGhlIG9iamVjdCBjb2RlLgorCisgIDUuIEEgcHJvZ3JhbSB0aGF0IGNvbnRhaW5zIG5vIGRlcml2YXRpdmUgb2YgYW55IHBvcnRpb24gb2YgdGhlCitMaWJyYXJ5LCBidXQgaXMgZGVzaWduZWQgdG8gd29yayB3aXRoIHRoZSBMaWJyYXJ5IGJ5IGJlaW5nIGNvbXBpbGVkIG9yCitsaW5rZWQgd2l0aCBpdCwgaXMgY2FsbGVkIGEgIndvcmsgdGhhdCB1c2VzIHRoZSBMaWJyYXJ5Ii4gIFN1Y2ggYQord29yaywgaW4gaXNvbGF0aW9uLCBpcyBub3QgYSBkZXJpdmF0aXZlIHdvcmsgb2YgdGhlIExpYnJhcnksIGFuZAordGhlcmVmb3JlIGZhbGxzIG91dHNpZGUgdGhlIHNjb3BlIG9mIHRoaXMgTGljZW5zZS4KKworICBIb3dldmVyLCBsaW5raW5nIGEgIndvcmsgdGhhdCB1c2VzIHRoZSBMaWJyYXJ5IiB3aXRoIHRoZSBMaWJyYXJ5CitjcmVhdGVzIGFuIGV4ZWN1dGFibGUgdGhhdCBpcyBhIGRlcml2YXRpdmUgb2YgdGhlIExpYnJhcnkgKGJlY2F1c2UgaXQKK2NvbnRhaW5zIHBvcnRpb25zIG9mIHRoZSBMaWJyYXJ5KSwgcmF0aGVyIHRoYW4gYSAid29yayB0aGF0IHVzZXMgdGhlCitsaWJyYXJ5Ii4gIFRoZSBleGVjdXRhYmxlIGlzIHRoZXJlZm9yZSBjb3ZlcmVkIGJ5IHRoaXMgTGljZW5zZS4KK1NlY3Rpb24gNiBzdGF0ZXMgdGVybXMgZm9yIGRpc3RyaWJ1dGlvbiBvZiBzdWNoIGV4ZWN1dGFibGVzLgorCisgIFdoZW4gYSAid29yayB0aGF0IHVzZXMgdGhlIExpYnJhcnkiIHVzZXMgbWF0ZXJpYWwgZnJvbSBhIGhlYWRlciBmaWxlCit0aGF0IGlzIHBhcnQgb2YgdGhlIExpYnJhcnksIHRoZSBvYmplY3QgY29kZSBmb3IgdGhlIHdvcmsgbWF5IGJlIGEKK2Rlcml2YXRpdmUgd29yayBvZiB0aGUgTGlicmFyeSBldmVuIHRob3VnaCB0aGUgc291cmNlIGNvZGUgaXMgbm90LgorV2hldGhlciB0aGlzIGlzIHRydWUgaXMgZXNwZWNpYWxseSBzaWduaWZpY2FudCBpZiB0aGUgd29yayBjYW4gYmUKK2xpbmtlZCB3aXRob3V0IHRoZSBMaWJyYXJ5LCBvciBpZiB0aGUgd29yayBpcyBpdHNlbGYgYSBsaWJyYXJ5LiAgVGhlCit0aHJlc2hvbGQgZm9yIHRoaXMgdG8gYmUgdHJ1ZSBpcyBub3QgcHJlY2lzZWx5IGRlZmluZWQgYnkgbGF3LgorCisgIElmIHN1Y2ggYW4gb2JqZWN0IGZpbGUgdXNlcyBvbmx5IG51bWVyaWNhbCBwYXJhbWV0ZXJzLCBkYXRhCitzdHJ1Y3R1cmUgbGF5b3V0cyBhbmQgYWNjZXNzb3JzLCBhbmQgc21hbGwgbWFjcm9zIGFuZCBzbWFsbCBpbmxpbmUKK2Z1bmN0aW9ucyAodGVuIGxpbmVzIG9yIGxlc3MgaW4gbGVuZ3RoKSwgdGhlbiB0aGUgdXNlIG9mIHRoZSBvYmplY3QKK2ZpbGUgaXMgdW5yZXN0cmljdGVkLCByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgaXMgbGVnYWxseSBhIGRlcml2YXRpdmUKK3dvcmsuICAoRXhlY3V0YWJsZXMgY29udGFpbmluZyB0aGlzIG9iamVjdCBjb2RlIHBsdXMgcG9ydGlvbnMgb2YgdGhlCitMaWJyYXJ5IHdpbGwgc3RpbGwgZmFsbCB1bmRlciBTZWN0aW9uIDYuKQorCisgIE90aGVyd2lzZSwgaWYgdGhlIHdvcmsgaXMgYSBkZXJpdmF0aXZlIG9mIHRoZSBMaWJyYXJ5LCB5b3UgbWF5CitkaXN0cmlidXRlIHRoZSBvYmplY3QgY29kZSBmb3IgdGhlIHdvcmsgdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb24gNi4KK0FueSBleGVjdXRhYmxlcyBjb250YWluaW5nIHRoYXQgd29yayBhbHNvIGZhbGwgdW5kZXIgU2VjdGlvbiA2LAord2hldGhlciBvciBub3QgdGhleSBhcmUgbGlua2VkIGRpcmVjdGx5IHdpdGggdGhlIExpYnJhcnkgaXRzZWxmLgorDAorICA2LiBBcyBhbiBleGNlcHRpb24gdG8gdGhlIFNlY3Rpb25zIGFib3ZlLCB5b3UgbWF5IGFsc28gY29tYmluZSBvcgorbGluayBhICJ3b3JrIHRoYXQgdXNlcyB0aGUgTGlicmFyeSIgd2l0aCB0aGUgTGlicmFyeSB0byBwcm9kdWNlIGEKK3dvcmsgY29udGFpbmluZyBwb3J0aW9ucyBvZiB0aGUgTGlicmFyeSwgYW5kIGRpc3RyaWJ1dGUgdGhhdCB3b3JrCit1bmRlciB0ZXJtcyBvZiB5b3VyIGNob2ljZSwgcHJvdmlkZWQgdGhhdCB0aGUgdGVybXMgcGVybWl0Cittb2RpZmljYXRpb24gb2YgdGhlIHdvcmsgZm9yIHRoZSBjdXN0b21lcidzIG93biB1c2UgYW5kIHJldmVyc2UKK2VuZ2luZWVyaW5nIGZvciBkZWJ1Z2dpbmcgc3VjaCBtb2RpZmljYXRpb25zLgorCisgIFlvdSBtdXN0IGdpdmUgcHJvbWluZW50IG5vdGljZSB3aXRoIGVhY2ggY29weSBvZiB0aGUgd29yayB0aGF0IHRoZQorTGlicmFyeSBpcyB1c2VkIGluIGl0IGFuZCB0aGF0IHRoZSBMaWJyYXJ5IGFuZCBpdHMgdXNlIGFyZSBjb3ZlcmVkIGJ5Cit0aGlzIExpY2Vuc2UuICBZb3UgbXVzdCBzdXBwbHkgYSBjb3B5IG9mIHRoaXMgTGljZW5zZS4gIElmIHRoZSB3b3JrCitkdXJpbmcgZXhlY3V0aW9uIGRpc3BsYXlzIGNvcHlyaWdodCBub3RpY2VzLCB5b3UgbXVzdCBpbmNsdWRlIHRoZQorY29weXJpZ2h0IG5vdGljZSBmb3IgdGhlIExpYnJhcnkgYW1vbmcgdGhlbSwgYXMgd2VsbCBhcyBhIHJlZmVyZW5jZQorZGlyZWN0aW5nIHRoZSB1c2VyIHRvIHRoZSBjb3B5IG9mIHRoaXMgTGljZW5zZS4gIEFsc28sIHlvdSBtdXN0IGRvIG9uZQorb2YgdGhlc2UgdGhpbmdzOgorCisgICAgYSkgQWNjb21wYW55IHRoZSB3b3JrIHdpdGggdGhlIGNvbXBsZXRlIGNvcnJlc3BvbmRpbmcKKyAgICBtYWNoaW5lLXJlYWRhYmxlIHNvdXJjZSBjb2RlIGZvciB0aGUgTGlicmFyeSBpbmNsdWRpbmcgd2hhdGV2ZXIKKyAgICBjaGFuZ2VzIHdlcmUgdXNlZCBpbiB0aGUgd29yayAod2hpY2ggbXVzdCBiZSBkaXN0cmlidXRlZCB1bmRlcgorICAgIFNlY3Rpb25zIDEgYW5kIDIgYWJvdmUpOyBhbmQsIGlmIHRoZSB3b3JrIGlzIGFuIGV4ZWN1dGFibGUgbGlua2VkCisgICAgd2l0aCB0aGUgTGlicmFyeSwgd2l0aCB0aGUgY29tcGxldGUgbWFjaGluZS1yZWFkYWJsZSAid29yayB0aGF0CisgICAgdXNlcyB0aGUgTGlicmFyeSIsIGFzIG9iamVjdCBjb2RlIGFuZC9vciBzb3VyY2UgY29kZSwgc28gdGhhdCB0aGUKKyAgICB1c2VyIGNhbiBtb2RpZnkgdGhlIExpYnJhcnkgYW5kIHRoZW4gcmVsaW5rIHRvIHByb2R1Y2UgYSBtb2RpZmllZAorICAgIGV4ZWN1dGFibGUgY29udGFpbmluZyB0aGUgbW9kaWZpZWQgTGlicmFyeS4gIChJdCBpcyB1bmRlcnN0b29kCisgICAgdGhhdCB0aGUgdXNlciB3aG8gY2hhbmdlcyB0aGUgY29udGVudHMgb2YgZGVmaW5pdGlvbnMgZmlsZXMgaW4gdGhlCisgICAgTGlicmFyeSB3aWxsIG5vdCBuZWNlc3NhcmlseSBiZSBhYmxlIHRvIHJlY29tcGlsZSB0aGUgYXBwbGljYXRpb24KKyAgICB0byB1c2UgdGhlIG1vZGlmaWVkIGRlZmluaXRpb25zLikKKworICAgIGIpIFVzZSBhIHN1aXRhYmxlIHNoYXJlZCBsaWJyYXJ5IG1lY2hhbmlzbSBmb3IgbGlua2luZyB3aXRoIHRoZQorICAgIExpYnJhcnkuICBBIHN1aXRhYmxlIG1lY2hhbmlzbSBpcyBvbmUgdGhhdCAoMSkgdXNlcyBhdCBydW4gdGltZSBhCisgICAgY29weSBvZiB0aGUgbGlicmFyeSBhbHJlYWR5IHByZXNlbnQgb24gdGhlIHVzZXIncyBjb21wdXRlciBzeXN0ZW0sCisgICAgcmF0aGVyIHRoYW4gY29weWluZyBsaWJyYXJ5IGZ1bmN0aW9ucyBpbnRvIHRoZSBleGVjdXRhYmxlLCBhbmQgKDIpCisgICAgd2lsbCBvcGVyYXRlIHByb3Blcmx5IHdpdGggYSBtb2RpZmllZCB2ZXJzaW9uIG9mIHRoZSBsaWJyYXJ5LCBpZgorICAgIHRoZSB1c2VyIGluc3RhbGxzIG9uZSwgYXMgbG9uZyBhcyB0aGUgbW9kaWZpZWQgdmVyc2lvbiBpcworICAgIGludGVyZmFjZS1jb21wYXRpYmxlIHdpdGggdGhlIHZlcnNpb24gdGhhdCB0aGUgd29yayB3YXMgbWFkZSB3aXRoLgorCisgICAgYykgQWNjb21wYW55IHRoZSB3b3JrIHdpdGggYSB3cml0dGVuIG9mZmVyLCB2YWxpZCBmb3IgYXQgbGVhc3QKKyAgICB0aHJlZSB5ZWFycywgdG8gZ2l2ZSB0aGUgc2FtZSB1c2VyIHRoZSBtYXRlcmlhbHMgc3BlY2lmaWVkIGluCisgICAgU3Vic2VjdGlvbiA2YSwgYWJvdmUsIGZvciBhIGNoYXJnZSBubyBtb3JlIHRoYW4gdGhlIGNvc3Qgb2YKKyAgICBwZXJmb3JtaW5nIHRoaXMgZGlzdHJpYnV0aW9uLgorCisgICAgZCkgSWYgZGlzdHJpYnV0aW9uIG9mIHRoZSB3b3JrIGlzIG1hZGUgYnkgb2ZmZXJpbmcgYWNjZXNzIHRvIGNvcHkKKyAgICBmcm9tIGEgZGVzaWduYXRlZCBwbGFjZSwgb2ZmZXIgZXF1aXZhbGVudCBhY2Nlc3MgdG8gY29weSB0aGUgYWJvdmUKKyAgICBzcGVjaWZpZWQgbWF0ZXJpYWxzIGZyb20gdGhlIHNhbWUgcGxhY2UuCisKKyAgICBlKSBWZXJpZnkgdGhhdCB0aGUgdXNlciBoYXMgYWxyZWFkeSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlc2UKKyAgICBtYXRlcmlhbHMgb3IgdGhhdCB5b3UgaGF2ZSBhbHJlYWR5IHNlbnQgdGhpcyB1c2VyIGEgY29weS4KKworICBGb3IgYW4gZXhlY3V0YWJsZSwgdGhlIHJlcXVpcmVkIGZvcm0gb2YgdGhlICJ3b3JrIHRoYXQgdXNlcyB0aGUKK0xpYnJhcnkiIG11c3QgaW5jbHVkZSBhbnkgZGF0YSBhbmQgdXRpbGl0eSBwcm9ncmFtcyBuZWVkZWQgZm9yCityZXByb2R1Y2luZyB0aGUgZXhlY3V0YWJsZSBmcm9tIGl0LiAgSG93ZXZlciwgYXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiwKK3RoZSBtYXRlcmlhbHMgdG8gYmUgZGlzdHJpYnV0ZWQgbmVlZCBub3QgaW5jbHVkZSBhbnl0aGluZyB0aGF0IGlzCitub3JtYWxseSBkaXN0cmlidXRlZCAoaW4gZWl0aGVyIHNvdXJjZSBvciBiaW5hcnkgZm9ybSkgd2l0aCB0aGUgbWFqb3IKK2NvbXBvbmVudHMgKGNvbXBpbGVyLCBrZXJuZWwsIGFuZCBzbyBvbikgb2YgdGhlIG9wZXJhdGluZyBzeXN0ZW0gb24KK3doaWNoIHRoZSBleGVjdXRhYmxlIHJ1bnMsIHVubGVzcyB0aGF0IGNvbXBvbmVudCBpdHNlbGYgYWNjb21wYW5pZXMKK3RoZSBleGVjdXRhYmxlLgorCisgIEl0IG1heSBoYXBwZW4gdGhhdCB0aGlzIHJlcXVpcmVtZW50IGNvbnRyYWRpY3RzIHRoZSBsaWNlbnNlCityZXN0cmljdGlvbnMgb2Ygb3RoZXIgcHJvcHJpZXRhcnkgbGlicmFyaWVzIHRoYXQgZG8gbm90IG5vcm1hbGx5CithY2NvbXBhbnkgdGhlIG9wZXJhdGluZyBzeXN0ZW0uICBTdWNoIGEgY29udHJhZGljdGlvbiBtZWFucyB5b3UgY2Fubm90Cit1c2UgYm90aCB0aGVtIGFuZCB0aGUgTGlicmFyeSB0b2dldGhlciBpbiBhbiBleGVjdXRhYmxlIHRoYXQgeW91CitkaXN0cmlidXRlLgorDAorICA3LiBZb3UgbWF5IHBsYWNlIGxpYnJhcnkgZmFjaWxpdGllcyB0aGF0IGFyZSBhIHdvcmsgYmFzZWQgb24gdGhlCitMaWJyYXJ5IHNpZGUtYnktc2lkZSBpbiBhIHNpbmdsZSBsaWJyYXJ5IHRvZ2V0aGVyIHdpdGggb3RoZXIgbGlicmFyeQorZmFjaWxpdGllcyBub3QgY292ZXJlZCBieSB0aGlzIExpY2Vuc2UsIGFuZCBkaXN0cmlidXRlIHN1Y2ggYSBjb21iaW5lZAorbGlicmFyeSwgcHJvdmlkZWQgdGhhdCB0aGUgc2VwYXJhdGUgZGlzdHJpYnV0aW9uIG9mIHRoZSB3b3JrIGJhc2VkIG9uCit0aGUgTGlicmFyeSBhbmQgb2YgdGhlIG90aGVyIGxpYnJhcnkgZmFjaWxpdGllcyBpcyBvdGhlcndpc2UKK3Blcm1pdHRlZCwgYW5kIHByb3ZpZGVkIHRoYXQgeW91IGRvIHRoZXNlIHR3byB0aGluZ3M6CisKKyAgICBhKSBBY2NvbXBhbnkgdGhlIGNvbWJpbmVkIGxpYnJhcnkgd2l0aCBhIGNvcHkgb2YgdGhlIHNhbWUgd29yaworICAgIGJhc2VkIG9uIHRoZSBMaWJyYXJ5LCB1bmNvbWJpbmVkIHdpdGggYW55IG90aGVyIGxpYnJhcnkKKyAgICBmYWNpbGl0aWVzLiAgVGhpcyBtdXN0IGJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAgICBTZWN0aW9ucyBhYm92ZS4KKworICAgIGIpIEdpdmUgcHJvbWluZW50IG5vdGljZSB3aXRoIHRoZSBjb21iaW5lZCBsaWJyYXJ5IG9mIHRoZSBmYWN0CisgICAgdGhhdCBwYXJ0IG9mIGl0IGlzIGEgd29yayBiYXNlZCBvbiB0aGUgTGlicmFyeSwgYW5kIGV4cGxhaW5pbmcKKyAgICB3aGVyZSB0byBmaW5kIHRoZSBhY2NvbXBhbnlpbmcgdW5jb21iaW5lZCBmb3JtIG9mIHRoZSBzYW1lIHdvcmsuCisKKyAgOC4gWW91IG1heSBub3QgY29weSwgbW9kaWZ5LCBzdWJsaWNlbnNlLCBsaW5rIHdpdGgsIG9yIGRpc3RyaWJ1dGUKK3RoZSBMaWJyYXJ5IGV4Y2VwdCBhcyBleHByZXNzbHkgcHJvdmlkZWQgdW5kZXIgdGhpcyBMaWNlbnNlLiAgQW55CithdHRlbXB0IG90aGVyd2lzZSB0byBjb3B5LCBtb2RpZnksIHN1YmxpY2Vuc2UsIGxpbmsgd2l0aCwgb3IKK2Rpc3RyaWJ1dGUgdGhlIExpYnJhcnkgaXMgdm9pZCwgYW5kIHdpbGwgYXV0b21hdGljYWxseSB0ZXJtaW5hdGUgeW91cgorcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZS4gIEhvd2V2ZXIsIHBhcnRpZXMgd2hvIGhhdmUgcmVjZWl2ZWQgY29waWVzLAorb3IgcmlnaHRzLCBmcm9tIHlvdSB1bmRlciB0aGlzIExpY2Vuc2Ugd2lsbCBub3QgaGF2ZSB0aGVpciBsaWNlbnNlcwordGVybWluYXRlZCBzbyBsb25nIGFzIHN1Y2ggcGFydGllcyByZW1haW4gaW4gZnVsbCBjb21wbGlhbmNlLgorCisgIDkuIFlvdSBhcmUgbm90IHJlcXVpcmVkIHRvIGFjY2VwdCB0aGlzIExpY2Vuc2UsIHNpbmNlIHlvdSBoYXZlIG5vdAorc2lnbmVkIGl0LiAgSG93ZXZlciwgbm90aGluZyBlbHNlIGdyYW50cyB5b3UgcGVybWlzc2lvbiB0byBtb2RpZnkgb3IKK2Rpc3RyaWJ1dGUgdGhlIExpYnJhcnkgb3IgaXRzIGRlcml2YXRpdmUgd29ya3MuICBUaGVzZSBhY3Rpb25zIGFyZQorcHJvaGliaXRlZCBieSBsYXcgaWYgeW91IGRvIG5vdCBhY2NlcHQgdGhpcyBMaWNlbnNlLiAgVGhlcmVmb3JlLCBieQorbW9kaWZ5aW5nIG9yIGRpc3RyaWJ1dGluZyB0aGUgTGlicmFyeSAob3IgYW55IHdvcmsgYmFzZWQgb24gdGhlCitMaWJyYXJ5KSwgeW91IGluZGljYXRlIHlvdXIgYWNjZXB0YW5jZSBvZiB0aGlzIExpY2Vuc2UgdG8gZG8gc28sIGFuZAorYWxsIGl0cyB0ZXJtcyBhbmQgY29uZGl0aW9ucyBmb3IgY29weWluZywgZGlzdHJpYnV0aW5nIG9yIG1vZGlmeWluZwordGhlIExpYnJhcnkgb3Igd29ya3MgYmFzZWQgb24gaXQuCisKKyAgMTAuIEVhY2ggdGltZSB5b3UgcmVkaXN0cmlidXRlIHRoZSBMaWJyYXJ5IChvciBhbnkgd29yayBiYXNlZCBvbiB0aGUKK0xpYnJhcnkpLCB0aGUgcmVjaXBpZW50IGF1dG9tYXRpY2FsbHkgcmVjZWl2ZXMgYSBsaWNlbnNlIGZyb20gdGhlCitvcmlnaW5hbCBsaWNlbnNvciB0byBjb3B5LCBkaXN0cmlidXRlLCBsaW5rIHdpdGggb3IgbW9kaWZ5IHRoZSBMaWJyYXJ5CitzdWJqZWN0IHRvIHRoZXNlIHRlcm1zIGFuZCBjb25kaXRpb25zLiAgWW91IG1heSBub3QgaW1wb3NlIGFueSBmdXJ0aGVyCityZXN0cmljdGlvbnMgb24gdGhlIHJlY2lwaWVudHMnIGV4ZXJjaXNlIG9mIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJlaW4uCitZb3UgYXJlIG5vdCByZXNwb25zaWJsZSBmb3IgZW5mb3JjaW5nIGNvbXBsaWFuY2UgYnkgdGhpcmQgcGFydGllcyB3aXRoCit0aGlzIExpY2Vuc2UuCisMCisgIDExLiBJZiwgYXMgYSBjb25zZXF1ZW5jZSBvZiBhIGNvdXJ0IGp1ZGdtZW50IG9yIGFsbGVnYXRpb24gb2YgcGF0ZW50CitpbmZyaW5nZW1lbnQgb3IgZm9yIGFueSBvdGhlciByZWFzb24gKG5vdCBsaW1pdGVkIHRvIHBhdGVudCBpc3N1ZXMpLAorY29uZGl0aW9ucyBhcmUgaW1wb3NlZCBvbiB5b3UgKHdoZXRoZXIgYnkgY291cnQgb3JkZXIsIGFncmVlbWVudCBvcgorb3RoZXJ3aXNlKSB0aGF0IGNvbnRyYWRpY3QgdGhlIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLCB0aGV5IGRvIG5vdAorZXhjdXNlIHlvdSBmcm9tIHRoZSBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZS4gIElmIHlvdSBjYW5ub3QKK2Rpc3RyaWJ1dGUgc28gYXMgdG8gc2F0aXNmeSBzaW11bHRhbmVvdXNseSB5b3VyIG9ibGlnYXRpb25zIHVuZGVyIHRoaXMKK0xpY2Vuc2UgYW5kIGFueSBvdGhlciBwZXJ0aW5lbnQgb2JsaWdhdGlvbnMsIHRoZW4gYXMgYSBjb25zZXF1ZW5jZSB5b3UKK21heSBub3QgZGlzdHJpYnV0ZSB0aGUgTGlicmFyeSBhdCBhbGwuICBGb3IgZXhhbXBsZSwgaWYgYSBwYXRlbnQKK2xpY2Vuc2Ugd291bGQgbm90IHBlcm1pdCByb3lhbHR5LWZyZWUgcmVkaXN0cmlidXRpb24gb2YgdGhlIExpYnJhcnkgYnkKK2FsbCB0aG9zZSB3aG8gcmVjZWl2ZSBjb3BpZXMgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSB0aHJvdWdoIHlvdSwgdGhlbgordGhlIG9ubHkgd2F5IHlvdSBjb3VsZCBzYXRpc2Z5IGJvdGggaXQgYW5kIHRoaXMgTGljZW5zZSB3b3VsZCBiZSB0bworcmVmcmFpbiBlbnRpcmVseSBmcm9tIGRpc3RyaWJ1dGlvbiBvZiB0aGUgTGlicmFyeS4KKworSWYgYW55IHBvcnRpb24gb2YgdGhpcyBzZWN0aW9uIGlzIGhlbGQgaW52YWxpZCBvciB1bmVuZm9yY2VhYmxlIHVuZGVyCithbnkgcGFydGljdWxhciBjaXJjdW1zdGFuY2UsIHRoZSBiYWxhbmNlIG9mIHRoZSBzZWN0aW9uIGlzIGludGVuZGVkIHRvCithcHBseSwgYW5kIHRoZSBzZWN0aW9uIGFzIGEgd2hvbGUgaXMgaW50ZW5kZWQgdG8gYXBwbHkgaW4gb3RoZXIKK2NpcmN1bXN0YW5jZXMuCisKK0l0IGlzIG5vdCB0aGUgcHVycG9zZSBvZiB0aGlzIHNlY3Rpb24gdG8gaW5kdWNlIHlvdSB0byBpbmZyaW5nZSBhbnkKK3BhdGVudHMgb3Igb3RoZXIgcHJvcGVydHkgcmlnaHQgY2xhaW1zIG9yIHRvIGNvbnRlc3QgdmFsaWRpdHkgb2YgYW55CitzdWNoIGNsYWltczsgdGhpcyBzZWN0aW9uIGhhcyB0aGUgc29sZSBwdXJwb3NlIG9mIHByb3RlY3RpbmcgdGhlCitpbnRlZ3JpdHkgb2YgdGhlIGZyZWUgc29mdHdhcmUgZGlzdHJpYnV0aW9uIHN5c3RlbSB3aGljaCBpcworaW1wbGVtZW50ZWQgYnkgcHVibGljIGxpY2Vuc2UgcHJhY3RpY2VzLiAgTWFueSBwZW9wbGUgaGF2ZSBtYWRlCitnZW5lcm91cyBjb250cmlidXRpb25zIHRvIHRoZSB3aWRlIHJhbmdlIG9mIHNvZnR3YXJlIGRpc3RyaWJ1dGVkCit0aHJvdWdoIHRoYXQgc3lzdGVtIGluIHJlbGlhbmNlIG9uIGNvbnNpc3RlbnQgYXBwbGljYXRpb24gb2YgdGhhdAorc3lzdGVtOyBpdCBpcyB1cCB0byB0aGUgYXV0aG9yL2Rvbm9yIHRvIGRlY2lkZSBpZiBoZSBvciBzaGUgaXMgd2lsbGluZwordG8gZGlzdHJpYnV0ZSBzb2Z0d2FyZSB0aHJvdWdoIGFueSBvdGhlciBzeXN0ZW0gYW5kIGEgbGljZW5zZWUgY2Fubm90CitpbXBvc2UgdGhhdCBjaG9pY2UuCisKK1RoaXMgc2VjdGlvbiBpcyBpbnRlbmRlZCB0byBtYWtlIHRob3JvdWdobHkgY2xlYXIgd2hhdCBpcyBiZWxpZXZlZCB0bworYmUgYSBjb25zZXF1ZW5jZSBvZiB0aGUgcmVzdCBvZiB0aGlzIExpY2Vuc2UuCisKKyAgMTIuIElmIHRoZSBkaXN0cmlidXRpb24gYW5kL29yIHVzZSBvZiB0aGUgTGlicmFyeSBpcyByZXN0cmljdGVkIGluCitjZXJ0YWluIGNvdW50cmllcyBlaXRoZXIgYnkgcGF0ZW50cyBvciBieSBjb3B5cmlnaHRlZCBpbnRlcmZhY2VzLCB0aGUKK29yaWdpbmFsIGNvcHlyaWdodCBob2xkZXIgd2hvIHBsYWNlcyB0aGUgTGlicmFyeSB1bmRlciB0aGlzIExpY2Vuc2UKK21heSBhZGQgYW4gZXhwbGljaXQgZ2VvZ3JhcGhpY2FsIGRpc3RyaWJ1dGlvbiBsaW1pdGF0aW9uIGV4Y2x1ZGluZyB0aG9zZQorY291bnRyaWVzLCBzbyB0aGF0IGRpc3RyaWJ1dGlvbiBpcyBwZXJtaXR0ZWQgb25seSBpbiBvciBhbW9uZworY291bnRyaWVzIG5vdCB0aHVzIGV4Y2x1ZGVkLiAgSW4gc3VjaCBjYXNlLCB0aGlzIExpY2Vuc2UgaW5jb3Jwb3JhdGVzCit0aGUgbGltaXRhdGlvbiBhcyBpZiB3cml0dGVuIGluIHRoZSBib2R5IG9mIHRoaXMgTGljZW5zZS4KKworICAxMy4gVGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBtYXkgcHVibGlzaCByZXZpc2VkIGFuZC9vciBuZXcKK3ZlcnNpb25zIG9mIHRoZSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmcm9tIHRpbWUgdG8gdGltZS4KK1N1Y2ggbmV3IHZlcnNpb25zIHdpbGwgYmUgc2ltaWxhciBpbiBzcGlyaXQgdG8gdGhlIHByZXNlbnQgdmVyc2lvbiwKK2J1dCBtYXkgZGlmZmVyIGluIGRldGFpbCB0byBhZGRyZXNzIG5ldyBwcm9ibGVtcyBvciBjb25jZXJucy4KKworRWFjaCB2ZXJzaW9uIGlzIGdpdmVuIGEgZGlzdGluZ3Vpc2hpbmcgdmVyc2lvbiBudW1iZXIuICBJZiB0aGUgTGlicmFyeQorc3BlY2lmaWVzIGEgdmVyc2lvbiBudW1iZXIgb2YgdGhpcyBMaWNlbnNlIHdoaWNoIGFwcGxpZXMgdG8gaXQgYW5kCisiYW55IGxhdGVyIHZlcnNpb24iLCB5b3UgaGF2ZSB0aGUgb3B0aW9uIG9mIGZvbGxvd2luZyB0aGUgdGVybXMgYW5kCitjb25kaXRpb25zIGVpdGhlciBvZiB0aGF0IHZlcnNpb24gb3Igb2YgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5Cit0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgSWYgdGhlIExpYnJhcnkgZG9lcyBub3Qgc3BlY2lmeSBhCitsaWNlbnNlIHZlcnNpb24gbnVtYmVyLCB5b3UgbWF5IGNob29zZSBhbnkgdmVyc2lvbiBldmVyIHB1Ymxpc2hlZCBieQordGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKwwKKyAgMTQuIElmIHlvdSB3aXNoIHRvIGluY29ycG9yYXRlIHBhcnRzIG9mIHRoZSBMaWJyYXJ5IGludG8gb3RoZXIgZnJlZQorcHJvZ3JhbXMgd2hvc2UgZGlzdHJpYnV0aW9uIGNvbmRpdGlvbnMgYXJlIGluY29tcGF0aWJsZSB3aXRoIHRoZXNlLAord3JpdGUgdG8gdGhlIGF1dGhvciB0byBhc2sgZm9yIHBlcm1pc3Npb24uICBGb3Igc29mdHdhcmUgd2hpY2ggaXMKK2NvcHlyaWdodGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHdyaXRlIHRvIHRoZSBGcmVlCitTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3ZSBzb21ldGltZXMgbWFrZSBleGNlcHRpb25zIGZvciB0aGlzLiAgT3VyCitkZWNpc2lvbiB3aWxsIGJlIGd1aWRlZCBieSB0aGUgdHdvIGdvYWxzIG9mIHByZXNlcnZpbmcgdGhlIGZyZWUgc3RhdHVzCitvZiBhbGwgZGVyaXZhdGl2ZXMgb2Ygb3VyIGZyZWUgc29mdHdhcmUgYW5kIG9mIHByb21vdGluZyB0aGUgc2hhcmluZworYW5kIHJldXNlIG9mIHNvZnR3YXJlIGdlbmVyYWxseS4KKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5PIFdBUlJBTlRZCisKKyAgMTUuIEJFQ0FVU0UgVEhFIExJQlJBUlkgSVMgTElDRU5TRUQgRlJFRSBPRiBDSEFSR0UsIFRIRVJFIElTIE5PCitXQVJSQU5UWSBGT1IgVEhFIExJQlJBUlksIFRPIFRIRSBFWFRFTlQgUEVSTUlUVEVEIEJZIEFQUExJQ0FCTEUgTEFXLgorRVhDRVBUIFdIRU4gT1RIRVJXSVNFIFNUQVRFRCBJTiBXUklUSU5HIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQvT1IKK09USEVSIFBBUlRJRVMgUFJPVklERSBUSEUgTElCUkFSWSAiQVMgSVMiIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZCitLSU5ELCBFSVRIRVIgRVhQUkVTU0VEIE9SIElNUExJRUQsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKK0lNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorUFVSUE9TRS4gIFRIRSBFTlRJUkUgUklTSyBBUyBUTyBUSEUgUVVBTElUWSBBTkQgUEVSRk9STUFOQ0UgT0YgVEhFCitMSUJSQVJZIElTIFdJVEggWU9VLiAgU0hPVUxEIFRIRSBMSUJSQVJZIFBST1ZFIERFRkVDVElWRSwgWU9VIEFTU1VNRQorVEhFIENPU1QgT0YgQUxMIE5FQ0VTU0FSWSBTRVJWSUNJTkcsIFJFUEFJUiBPUiBDT1JSRUNUSU9OLgorCisgIDE2LiBJTiBOTyBFVkVOVCBVTkxFU1MgUkVRVUlSRUQgQlkgQVBQTElDQUJMRSBMQVcgT1IgQUdSRUVEIFRPIElOCitXUklUSU5HIFdJTEwgQU5ZIENPUFlSSUdIVCBIT0xERVIsIE9SIEFOWSBPVEhFUiBQQVJUWSBXSE8gTUFZIE1PRElGWQorQU5EL09SIFJFRElTVFJJQlVURSBUSEUgTElCUkFSWSBBUyBQRVJNSVRURUQgQUJPVkUsIEJFIExJQUJMRSBUTyBZT1UKK0ZPUiBEQU1BR0VTLCBJTkNMVURJTkcgQU5ZIEdFTkVSQUwsIFNQRUNJQUwsIElOQ0lERU5UQUwgT1IKK0NPTlNFUVVFTlRJQUwgREFNQUdFUyBBUklTSU5HIE9VVCBPRiBUSEUgVVNFIE9SIElOQUJJTElUWSBUTyBVU0UgVEhFCitMSUJSQVJZIChJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIExPU1MgT0YgREFUQSBPUiBEQVRBIEJFSU5HCitSRU5ERVJFRCBJTkFDQ1VSQVRFIE9SIExPU1NFUyBTVVNUQUlORUQgQlkgWU9VIE9SIFRISVJEIFBBUlRJRVMgT1IgQQorRkFJTFVSRSBPRiBUSEUgTElCUkFSWSBUTyBPUEVSQVRFIFdJVEggQU5ZIE9USEVSIFNPRlRXQVJFKSwgRVZFTiBJRgorU1VDSCBIT0xERVIgT1IgT1RIRVIgUEFSVFkgSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSAorREFNQUdFUy4KKworICAgICAgICAgICAgICAgICAgICAgRU5EIE9GIFRFUk1TIEFORCBDT05ESVRJT05TCisMCisgICAgICAgICAgIEhvdyB0byBBcHBseSBUaGVzZSBUZXJtcyB0byBZb3VyIE5ldyBMaWJyYXJpZXMKKworICBJZiB5b3UgZGV2ZWxvcCBhIG5ldyBsaWJyYXJ5LCBhbmQgeW91IHdhbnQgaXQgdG8gYmUgb2YgdGhlIGdyZWF0ZXN0Citwb3NzaWJsZSB1c2UgdG8gdGhlIHB1YmxpYywgd2UgcmVjb21tZW5kIG1ha2luZyBpdCBmcmVlIHNvZnR3YXJlIHRoYXQKK2V2ZXJ5b25lIGNhbiByZWRpc3RyaWJ1dGUgYW5kIGNoYW5nZS4gIFlvdSBjYW4gZG8gc28gYnkgcGVybWl0dGluZworcmVkaXN0cmlidXRpb24gdW5kZXIgdGhlc2UgdGVybXMgKG9yLCBhbHRlcm5hdGl2ZWx5LCB1bmRlciB0aGUgdGVybXMKK29mIHRoZSBvcmRpbmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlKS4KKworICBUbyBhcHBseSB0aGVzZSB0ZXJtcywgYXR0YWNoIHRoZSBmb2xsb3dpbmcgbm90aWNlcyB0byB0aGUgbGlicmFyeS4KK0l0IGlzIHNhZmVzdCB0byBhdHRhY2ggdGhlbSB0byB0aGUgc3RhcnQgb2YgZWFjaCBzb3VyY2UgZmlsZSB0byBtb3N0CitlZmZlY3RpdmVseSBjb252ZXkgdGhlIGV4Y2x1c2lvbiBvZiB3YXJyYW50eTsgYW5kIGVhY2ggZmlsZSBzaG91bGQKK2hhdmUgYXQgbGVhc3QgdGhlICJjb3B5cmlnaHQiIGxpbmUgYW5kIGEgcG9pbnRlciB0byB3aGVyZSB0aGUgZnVsbAorbm90aWNlIGlzIGZvdW5kLgorCisKKyAgICA8b25lIGxpbmUgdG8gZ2l2ZSB0aGUgbGlicmFyeSdzIG5hbWUgYW5kIGEgYnJpZWYgaWRlYSBvZiB3aGF0IGl0IGRvZXMuPgorICAgIENvcHlyaWdodCAoQykgPHllYXI+ICA8bmFtZSBvZiBhdXRob3I+CisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICAgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgIFVTQQorCitBbHNvIGFkZCBpbmZvcm1hdGlvbiBvbiBob3cgdG8gY29udGFjdCB5b3UgYnkgZWxlY3Ryb25pYyBhbmQgcGFwZXIgbWFpbC4KKworWW91IHNob3VsZCBhbHNvIGdldCB5b3VyIGVtcGxveWVyIChpZiB5b3Ugd29yayBhcyBhIHByb2dyYW1tZXIpIG9yCit5b3VyIHNjaG9vbCwgaWYgYW55LCB0byBzaWduIGEgImNvcHlyaWdodCBkaXNjbGFpbWVyIiBmb3IgdGhlIGxpYnJhcnksCitpZiBuZWNlc3NhcnkuICBIZXJlIGlzIGEgc2FtcGxlOyBhbHRlciB0aGUgbmFtZXM6CisKKyAgWW95b2R5bmUsIEluYy4sIGhlcmVieSBkaXNjbGFpbXMgYWxsIGNvcHlyaWdodCBpbnRlcmVzdCBpbiB0aGUKKyAgbGlicmFyeSBgRnJvYicgKGEgbGlicmFyeSBmb3IgdHdlYWtpbmcga25vYnMpIHdyaXR0ZW4gYnkgSmFtZXMKKyAgUmFuZG9tIEhhY2tlci4KKworICA8c2lnbmF0dXJlIG9mIFR5IENvb24+LCAxIEFwcmlsIDE5OTAKKyAgVHkgQ29vbiwgUHJlc2lkZW50IG9mIFZpY2UKKworVGhhdCdzIGFsbCB0aGVyZSBpcyB0byBpdCEKKworCmRpZmYgLS1naXQgYS9NYWtlZmlsZS5pbiBiL01ha2VmaWxlLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRjNjg3NWMKLS0tIC9kZXYvbnVsbAorKysgYi9NYWtlZmlsZS5pbgpAQCAtMCwwICsxLDEzNSBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorIyAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyMKKyMgQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorIworIyBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorIworIyBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisjIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyMgbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisjCisjIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK2FsbCBpbnN0YWxsIHVuaW5zdGFsbCBpbnN0YWxsLWRvY3VtZW50czoKKwljZCAkKFBHTV9ESVIpICYmICQoTUFLRSkgJEAKKworaW5zdGFsbC1leHRyYXM6IGluc3RhbGwtYXBwc3RyZWFtIGluc3RhbGwtbWVzc2FnZXMgaW5zdGFsbC1wb2xraXQgaW5zdGFsbC1zeXN0ZW1kIGluc3RhbGwtdWRldgorCitpbnN0YWxsLWFwcHN0cmVhbSB1bmluc3RhbGwtYXBwc3RyZWFtOgorCWNkIEF1dG9zdGFydC9BcHBTdHJlYW0gJiYgJChNQUtFKSAkKEA6LWFwcHN0cmVhbT0pCisKK2luc3RhbGwtZHJhY3V0IHVuaW5zdGFsbC1kcmFjdXQ6CisJY2QgSW5pdHJhbWZzL0RyYWN1dCAmJiAkKE1BS0UpICQoQDotZHJhY3V0PSkKKworaW5zdGFsbC1tZXNzYWdlcyB1bmluc3RhbGwtbWVzc2FnZXM6CisJY2QgJChNU0dfRElSKSAmJiAkKE1BS0UpICQoQDotbWVzc2FnZXM9KQorCitpbnN0YWxsLXBvbGtpdCB1bmluc3RhbGwtcG9sa2l0OgorCWNkIEF1dGhvcml6YXRpb24vUG9sa2l0ICYmICQoTUFLRSkgJChAOi1wb2xraXQ9KQorCitpbnN0YWxsLXN5c3RlbWQgdW5pbnN0YWxsLXN5c3RlbWQ6CisJY2QgQXV0b3N0YXJ0L1N5c3RlbWQgJiYgJChNQUtFKSAkKEA6LXN5c3RlbWQ9KQorCitpbnN0YWxsLXVkZXYgdW5pbnN0YWxsLXVkZXY6CisJY2QgQXV0b3N0YXJ0L1VkZXYgJiYgJChNQUtFKSAkKEA6LXVkZXY9KQorCitBUkNISVZFX05BTUUgPSAkKFBBQ0tBR0VfVEFSTkFNRSktJChQQUNLQUdFX1ZFUlNJT04pCitUQVJfRVhURU5TSU9OID0gdGFyCitHWklQX0VYVEVOU0lPTiA9IGd6CitCWklQMl9FWFRFTlNJT04gPSBiejIKK1pJUF9FWFRFTlNJT04gPSB6aXAKK1haX0VYVEVOU0lPTiA9IHh6CisKK1NSQ19UQVIgPSAkKEFSQ0hJVkVfTkFNRSkuJChUQVJfRVhURU5TSU9OKQorJChTUkNfVEFSKToKKwkkKFNSQ19UT1ApbWt0YXIgJChTUkNfVE9QKSAkKEFSQ0hJVkVfTkFNRSkgJEAKK3NyYy10YXI6ICQoU1JDX1RBUikKKworU1JDX1RBUl9HWklQID0gJChTUkNfVEFSKS4kKEdaSVBfRVhURU5TSU9OKQorJChTUkNfVEFSX0daSVApOiAkKFNSQ19UQVIpCisJZ3ppcCAtOSAtYyAkKFNSQ19UQVIpID4kQAorc3JjLXRhci1nemlwOiAkKFNSQ19UQVJfR1pJUCkKKworU1JDX1RBUl9CWklQMiA9ICQoU1JDX1RBUikuJChCWklQMl9FWFRFTlNJT04pCiskKFNSQ19UQVJfQlpJUDIpOiAkKFNSQ19UQVIpCisJYnppcDIgLTkgLWMgJChTUkNfVEFSKSA+JEAKK3NyYy10YXItYnppcDI6ICQoU1JDX1RBUl9CWklQMikKKworU1JDX1RBUl9YWiA9ICQoU1JDX1RBUikuJChYWl9FWFRFTlNJT04pCiskKFNSQ19UQVJfWFopOiAkKFNSQ19UQVIpCisJeHogLTkgLWMgJChTUkNfVEFSKSA+JEAKK3NyYy10YXIteHo6ICQoU1JDX1RBUl9YWikKKworcnBtOiAkKFNSQ19UQVJfR1pJUCkKKwkkKFNSQ19UT1ApbWtycG0gJChTUkNfVEFSX0daSVApCisKK1NSQ19aSVAgPSAkKEFSQ0hJVkVfTkFNRSkuJChaSVBfRVhURU5TSU9OKQorJChTUkNfWklQKToKKwkkKFNSQ19UT1ApbWt6aXAgJChTUkNfVE9QKSAkKEFSQ0hJVkVfTkFNRSkgJEAKK3NyYy16aXA6ICQoU1JDX1pJUCkKKworQklOX0RJUiA9IGBwd2RgL0JpblRyZWUKK2Jpbi10cmVlOgorCSQoSU5TVEFMTF9ESVJFQ1RPUlkpICQoQklOX0RJUikKKwkkKE1BS0UpIGluc3RhbGwgSU5TVEFMTF9ST09UPSQoQklOX0RJUikKKworQklOX1RBUiA9ICQoQVJDSElWRV9OQU1FKS4kKEhPU1RfT1MpLiQoSE9TVF9DUFUpLiQoVEFSX0VYVEVOU0lPTikKKyQoQklOX1RBUik6IGJpbi10cmVlCisJdGFyIC1DICQoQklOX0RJUikgLWMgLWYgJEAgLgorYmluLXRhcjogJChCSU5fVEFSKQorCitCSU5fVEFSX0daSVAgPSAkKEJJTl9UQVIpLiQoR1pJUF9FWFRFTlNJT04pCiskKEJJTl9UQVJfR1pJUCk6ICQoQklOX1RBUikKKwlnemlwIC05IC1jICQoQklOX1RBUikgPiRACitiaW4tdGFyLWd6aXA6ICQoQklOX1RBUl9HWklQKQorCitCSU5fVEFSX0JaSVAyID0gJChCSU5fVEFSKS4kKEJaSVAyX0VYVEVOU0lPTikKKyQoQklOX1RBUl9CWklQMik6ICQoQklOX1RBUikKKwliemlwMiAtOSAtYyAkKEJJTl9UQVIpID4kQAorYmluLXRhci1iemlwMjogJChCSU5fVEFSX0JaSVAyKQorCitCSU5fVEFSX1haID0gJChCSU5fVEFSKS4kKFhaX0VYVEVOU0lPTikKKyQoQklOX1RBUl9YWik6ICQoQklOX1RBUikKKwl4eiAtOSAtYyAkKEJJTl9UQVIpID4kQAorYmluLXRhci14ejogJChCSU5fVEFSX1haKQorCitJVEVSQVRFID0gXAorICAgLWZvciBkaXJlY3RvcnkgaW4gXAorICAgJChQR01fRElSKSBcCisgICAkKERPQ19ESVIpIFwKKyAgICQoTVNHX0RJUikgXAorICAgQXV0b3N0YXJ0L0FwcFN0cmVhbSBcCisgICBBdXRvc3RhcnQvU3lzdGVtZCBcCisgICBBdXRvc3RhcnQvVWRldiBcCisgICBBdXRvc3RhcnQvWDExIFwKKyAgIEF1dGhvcml6YXRpb24vUG9sa2l0IFwKKyAgIEluaXRyYW1mcy9EcmFjdXQgXAorICAgQW5kcm9pZC9HcmFkbGUgXAorICAgOyBkbyAoY2QgJCRkaXJlY3RvcnkgJiYgJChNQUtFKSAkQCk7IGRvbmUKKworY2xlYW46OiBjbGVhbi1hcmNoaXZlcworCSQoSVRFUkFURSkKKwktcm0gLWYgLXIgLS0gJChCSU5fRElSKQorCitjbGVhbi1hcmNoaXZlczoKKwktcm0gLWYgLS0gKi4kKFRBUl9FWFRFTlNJT04pCisJLXJtIC1mIC0tICouJChHWklQX0VYVEVOU0lPTikKKwktcm0gLWYgLS0gKi4kKEJaSVAyX0VYVEVOU0lPTikKKwktcm0gLWYgLS0gKi4kKFhaX0VYVEVOU0lPTikKKwktcm0gLWYgLS0gKi4kKFpJUF9FWFRFTlNJT04pCisJLXJtIC1mIC0tICoucnBtCisKK2Rpc3RjbGVhbjo6IGNsZWFuCisJJChJVEVSQVRFKQorCS1ybSAtZiBicmx0dHkuc3BlYworCS1ybSAtZnIgYXV0b200dGUqLmNhY2hlCisJLXJtIC1mIGNvbmZpZy5sb2cgY29uZmlnLmNhY2hlIGNvbmZpZy5zdGF0dXMKKwktcm0gLWYgY29uZmlnLm1rIGNvbmZpZy5oIGJybHR0eS1jb25maWcuc2ggYnJsdHR5LnBjCisJLXJtIC1mIGZvcmJ1aWxkLmxvZyBmb3JidWlsZC5jYWNoZSBmb3JidWlsZC5zdGF0dXMKKwktcm0gLWYgZm9yYnVpbGQubWsgZm9yYnVpbGQuaApkaWZmIC0tZ2l0IGEvTWVzc2FnZXMvTWFrZWZpbGUuaW4gYi9NZXNzYWdlcy9NYWtlZmlsZS5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOGU2ZWIzCi0tLSAvZGV2L251bGwKKysrIGIvTWVzc2FnZXMvTWFrZWZpbGUuaW4KQEAgLTAsMCArMSw3NiBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorIyAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyMKKyMgQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorIworIyBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorIworIyBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisjIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyMgbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisjCisjIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK2FsbDo6IG9iamVjdHMgbGFuZ3VhZ2VzCisKK0NPUFlSSUdIVF9IT0xERVIgPSBUaGUgQlJMVFRZIERldmVsb3BlcnMKK0xBTkdVQUdFX0NPREVTID0gYXIgZGUgZnIgaXQgcnUgemgKKworTE9DQUxFX1NVQkRJUkVDVE9SWSA9IGxvY2FsZQorTUVTU0FHRVNfU1VCRElSRUNUT1JZID0gTENfTUVTU0FHRVMKKworVEVNUExBVEVfRVhURU5TSU9OID0gcG90CitTT1VSQ0VfRVhURU5TSU9OID0gcG8KK09CSkVDVF9FWFRFTlNJT04gPSBtbworCitMQU5HVUFHRVNfRklMRSA9IExJTkdVQVMKK1RFTVBMQVRFX0ZJTEUgPSAkKFNSQ19ESVIpLyQoUEFDS0FHRV9UQVJOQU1FKS4kKFRFTVBMQVRFX0VYVEVOU0lPTikKK09CSkVDVF9GSUxFID0gJChQQUNLQUdFX1RBUk5BTUUpLiQoT0JKRUNUX0VYVEVOU0lPTikKKworU09VUkNFX0ZJTEVTID0gJChMQU5HVUFHRV9DT0RFUzo9LiQoU09VUkNFX0VYVEVOU0lPTikpCitPQkpFQ1RfRklMRVMgPSAkKExBTkdVQUdFX0NPREVTOj0uJChPQkpFQ1RfRVhURU5TSU9OKSkKKworbGFuZ3VhZ2VzOiAkKExBTkdVQUdFU19GSUxFKQorJChMQU5HVUFHRVNfRklMRSk6IEZPUkNFCisJOiA+JEA7IFwKKwlmb3IgbGFuZ3VhZ2UgaW4gJChMQU5HVUFHRV9DT0RFUyk7IGRvIFwKKwllY2hvICQkbGFuZ3VhZ2UgPj4kQDsgXAorCWRvbmUKKwordGVtcGxhdGUgJChURU1QTEFURV9FWFRFTlNJT04pOiAkKFRFTVBMQVRFX0ZJTEUpCiskKFRFTVBMQVRFX0ZJTEUpOiAkKEJMRF9UT1ApJChQR01fRElSKS9jbWRzLmF1dG8uaCBGT1JDRQorCSQoU1JDX1RPUClta3BvdCAtcCAiJChQQUNLQUdFX1RBUk5BTUUpIiAtbiAiJChQQUNLQUdFX1ZFUlNJT04pIiAtYiAiJChQQUNLQUdFX0JVR1JFUE9SVCkiIC1jICIkKENPUFlSSUdIVF9IT0xERVIpIiAtbyAkQCAtLSAkKFNSQ19UT1ApICQoQkxEX1RPUCkKKworc291cmNlczogJChTT1VSQ0VfRklMRVMpCislLiQoU09VUkNFX0VYVEVOU0lPTik6IEZPUkNFCisJJChNU0dNRVJHRSkgLS1xdWlldCAtLXVwZGF0ZSAtLWZvcmNlLXBvIC0tbm8td3JhcCAtLW5vLWZ1enp5LW1hdGNoaW5nIC0tICQoU1JDX0RJUikvJEAgJChURU1QTEFURV9GSUxFKQorCXNldCAtLSBgZGF0ZSAtLXV0YyArIiVZICVtICVkICVIICVNICV6ImAgJiYgXAorCXNlZCAtZSAiL14uUE8tUmV2aXNpb24tRGF0ZTovcy8uLi4uLS4uLS4uIC4uOi4uWystXS4uLi4vJCQxLSQkMi0kJDMgJCQ0OiQkNSQkNi8iIC1pICQoU1JDX0RJUikvJEAKKworb2JqZWN0czogJChPQkpFQ1RfRklMRVMpCislLiQoT0JKRUNUX0VYVEVOU0lPTik6IEZPUkNFCisJJChNU0dGTVQpIC0tb3V0cHV0LWZpbGUgJEAgLS0gJChTUkNfRElSKS8kKEBGOi4kKE9CSkVDVF9FWFRFTlNJT04pPS4kKFNPVVJDRV9FWFRFTlNJT04pKQorCWRpcmVjdG9yeT0iJChMT0NBTEVfU1VCRElSRUNUT1JZKS8kKEA6LiQoT0JKRUNUX0VYVEVOU0lPTik9KS8kKE1FU1NBR0VTX1NVQkRJUkVDVE9SWSkiOyBcCisJJChJTlNUQUxMX0RJUkVDVE9SWSkgJCR7ZGlyZWN0b3J5fTsgXAorCWNkICQke2RpcmVjdG9yeX07IFwKKwl0ZXN0IC1mICQoT0JKRUNUX0ZJTEUpIHx8ICQoU1lNTElOSykgLi4vLi4vLi4vJEAgJChPQkpFQ1RfRklMRSk7CisKK2NsZWFuOjoKKwktcm0gLWYgLS0gKi4kKE9CSkVDVF9FWFRFTlNJT04pICp+CisJLXJtIC1mIC1yIC0tICQoTE9DQUxFX1NVQkRJUkVDVE9SWSkKKworaW5zdGFsbDo6IG9iamVjdHMgaW5zdGFsbC1sb2NhbGUtZGlyZWN0b3J5CisJZm9yIGxhbmd1YWdlIGluICQoTEFOR1VBR0VfQ09ERVMpOyBkbyBcCisJZGlyZWN0b3J5PSIkKElOU1RBTExfTE9DQUxFX0RJUkVDVE9SWSkvJCR7bGFuZ3VhZ2V9LyQoTUVTU0FHRVNfU1VCRElSRUNUT1JZKSIgJiYgXAorICAgICAgICAkKElOU1RBTExfRElSRUNUT1JZKSAiJCR7ZGlyZWN0b3J5fSIgJiYgXAorCSQoSU5TVEFMTF9EQVRBKSAiJCR7bGFuZ3VhZ2V9LiQoT0JKRUNUX0VYVEVOU0lPTikiICIkJHtkaXJlY3Rvcnl9LyQoT0JKRUNUX0ZJTEUpIjsgXAorCWRvbmUKKwordW5pbnN0YWxsOjoKKwktcm0gLWYgLS0gJChJTlNUQUxMX0xPQ0FMRV9ESVJFQ1RPUlkpLyovKi8kKE9CSkVDVF9GSUxFKQorCmRpZmYgLS1naXQgYS9NZXNzYWdlcy9UUkFOU0xBVE9SUyBiL01lc3NhZ2VzL1RSQU5TTEFUT1JTCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlmZmUzMzEKLS0tIC9kZXYvbnVsbAorKysgYi9NZXNzYWdlcy9UUkFOU0xBVE9SUwpAQCAtMCwwICsxLDUgQEAKK2RlIE1hcmlvIExhbmcgPE1MYW5nQGJsaW5kLmd1cnU+CitmciBKZWFuLVBoaWxpcHBlIE1lbmd1YWwgPGpwbWVuZ3VhbEBkZWJpYW4ub3JnPgoraXQgU2ViYXN0aWFubyBQaXN0b3JlIDxTZWJhc3RpYW5vUGlzdG9yZS5pbmZvQHByb3Rvbm1haWwuY2g+CitydSDQnNCw0YDQs9Cw0YDQuNGC0LAg0JzQtdC70YzQvdC40LrQvtCy0LAgPG1hcmdhcmV0bWVsbmlrb3ZhQGdtYWlsLmNvbT4KK3poIOmrmOeUn+aXuiA8Q29zY2VsbEBtb2xlcmF0Lm5ldD4KZGlmZiAtLWdpdCBhL01lc3NhZ2VzL2FyLnBvIGIvTWVzc2FnZXMvYXIucG8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmE0NTgzYgotLS0gL2Rldi9udWxsCisrKyBiL01lc3NhZ2VzL2FyLnBvCkBAIC0wLDAgKzEsNDA2MSBAQAorIyBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorIyAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyMKKyMgQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorIworIyBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorIworIyBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisjIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyMgbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisjCisjIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisjCittc2dpZCAiIgorbXNnc3RyICIiCisiUHJvamVjdC1JZC1WZXJzaW9uOiBicmx0dHkgNC41XG4iCisiUmVwb3J0LU1zZ2lkLUJ1Z3MtVG86IEJSTFRUWUBicmx0dHkuYXBwXG4iCisiUE9ULUNyZWF0aW9uLURhdGU6IDIwMjEtMDktMDcgMTU6MjkrMDIwMFxuIgorIlBPLVJldmlzaW9uLURhdGU6IDIwMjItMDMtMjAgMjM6NDArMDMwMFxuIgorIkxhc3QtVHJhbnNsYXRvcjogSWtyYW1pIEFobWFkIDxpa3JhbWlAYmxpbmQuZ292LnFhPlxuIgorIkxhbmd1YWdlLVRlYW06IEZyaWVuZHMgb2YgQlJMVFRZIDxCUkxUVFlAYnJsdHRZLmFwcD5cbiIKKyJMYW5ndWFnZTogYXJcbiIKKyJNSU1FLVZlcnNpb246IDEuMFxuIgorIkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtOFxuIgorIkNvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXRcbiIKKyJQbHVyYWwtRm9ybXM6IG5wbHVyYWxzPTI7IHBsdXJhbD0obiAhPSAxKTtcbiIKKyJYLUdlbmVyYXRvcjogUG9lZGl0IDMuMFxuIgorCisjOiBQcm9ncmFtcy9icmx0dHkuYzoxNjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiXCIlc1wiIHN0YXJ0ZWQgYXMgXCIlc1wiXG4iCittc2dzdHIgIlwiJXNcIiDYqNiv2KMg2KjYtdmB2KrZhyBcIiVzXCJcbiIKKworIy4geGdldHRleHQ6IFRoaXMgcGhyYXNlIGRlc2NyaWJlcyB0aGUgY29sb3VyIG9mIGEgY2hhcmFjdGVyIG9uIHRoZSBzY3JlZW4uCisjLiB4Z2V0dGV4dDogJTEkcyBpcyB0aGUgKGFscmVhZHkgdHJhbnNsYXRlZCkgZm9yZWdyb3VuZCBjb2xvdXIuCisjLiB4Z2V0dGV4dDogJTIkcyBpcyB0aGUgKGFscmVhZHkgdHJhbnNsYXRlZCkgYmFja2dyb3VuZCBjb2xvdXIuCisjOiBQcm9ncmFtcy9jbWRfdXRpbHMuYzoxNjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiJTEkcyBvbiAlMiRzIgorbXNnc3RyICIlMSRzINi52YTZiSAlMiRzIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyBob3cgdG8gc2F5IHdoZW4gdGhlIHRpbWUgaXMgZXhhY3RseSBvbiAoaS5lLiB6ZXJvIG1pbnV0ZXMgYWZ0ZXIpIGFuIGhvdXIuCisjLiB4Z2V0dGV4dDogKCV1IHJlcHJlc2VudHMgdGhlIG51bWJlciBvZiBob3VycykKKyM6IFByb2dyYW1zL2NtZF9taXNjZWxsYW5lb3VzLmM6ODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXUgbydjbG9jayIKK21zZ2lkX3BsdXJhbCAiJXUgbydjbG9jayIKK21zZ3N0clswXSAiJXUg2KfZhNiz2KfYudipIgorbXNnc3RyWzFdICIldSBvJ2Nsb2NrIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyBhIG51bWJlciAoJXUpIG9mIHNlY29uZHMgKHRpbWUgdW5pdHMpLgorIzogUHJvZ3JhbXMvY21kX21pc2NlbGxhbmVvdXMuYzoxMDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXUgc2Vjb25kIgorbXNnaWRfcGx1cmFsICIldSBzZWNvbmRzIgorbXNnc3RyWzBdICIldSDYq9in2YbZitipIgorbXNnc3RyWzFdICIldSDZhdmGINin2YTYq9mI2KfZhtmKIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6NTQzIFByb2dyYW1zL21lbnVfcHJlZnMuYzo1NDQKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzo1NDYgUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjU0NworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjU1MCBQcm9ncmFtcy9tZW51X3ByZWZzLmM6NTUxCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6NTUyIFByb2dyYW1zL21lbnVfcHJlZnMuYzo1NTQKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzo1NTUgUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjU2MQorbXNnaWQgIjEgY2VsbCIKK21zZ3N0ciAi2K7ZhNmK2Kkg2YjYp9it2K/YqSIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjkwMAorbXNnaWQgIjEgc2Vjb25kIgorbXNnc3RyICLYq9in2YbZitipINmI2KfYrdiv2KkiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzo5NjIKK21zZ2lkICIxMCBzZWNvbmRzIgorbXNnc3RyICIxMCDYq9mI2KfZhtmKIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6MTI3NworbXNnaWQgIjEyIEhvdXIiCittc2dzdHIgIjEyINiz2KfYudipIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6NTQyIFByb2dyYW1zL21lbnVfcHJlZnMuYzo1NDUKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzo1NDggUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjU0OQorIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjU1MworbXNnaWQgIjIgY2VsbHMiCittc2dzdHIgItiu2YTZitiq2YrZhiIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjkwMQorbXNnaWQgIjIgc2Vjb25kcyIKK21zZ3N0ciAi2KvYp9mG2YrYqtmK2YYiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzo5NjMKK21zZ2lkICIyMCBzZWNvbmRzIgorbXNnc3RyICIxMiDYq9in2YbZitipIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6MTI3NgorbXNnaWQgIjI0IEhvdXIiCittc2dzdHIgIjI0INiz2KfYudipIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6ODk4Cittc2dpZCAiMjUwIG1pbGxpc2Vjb25kcyIKK21zZ3N0ciAiMjUwINmF2YrZhNmKINir2KfZhtmK2KkiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzo1NTcgUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjU1OAorIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjU1OSBQcm9ncmFtcy9tZW51X3ByZWZzLmM6NTYwCittc2dpZCAiMyBjZWxscyIKK21zZ3N0ciAiMyDYrtmE2KfZitinIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6OTY0Cittc2dpZCAiNDAgc2Vjb25kcyIKK21zZ3N0ciAiNDAg2KvYp9mG2YrYqSIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjk2MQorbXNnaWQgIjUgc2Vjb25kcyIKK21zZ3N0ciAiNSDYq9mI2KfZhtmKIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6ODk5Cittc2dpZCAiNTAwIG1pbGxpc2Vjb25kcyIKK21zZ3N0ciAiNTAwINmF2YrZhNmKINir2KfZhtmK2KkiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzo3MzMKK21zZ2lkICI2LWRvdCIKK21zZ3N0ciAi2LPYqiDZhtmC2KfYtyIKKworIzogUHJvZ3JhbXMvYnJsdHR5LXR0Yi5jOjE3OQorbXNnaWQgIjgtYml0IGNoYXJhY3RlciBzZXQgdG8gdXNlLiIKK21zZ3N0ciAi2KfYs9iq2K7Yr9in2YUg2YXYrNmF2YjYudipINij2K3YsdmBIDguIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6NzMyCittc2dpZCAiOC1kb3QiCittc2dzdHIgItir2YXYp9mGINmG2YLYp9i3IgorCisjOiBQcm9ncmFtcy9zY3JfbWVudS5jOjEwNAorbXNnaWQgIjxvZmY+IgorbXNnc3RyICI82KXZitmC2KfZgT4iCisKKyM6IFByb2dyYW1zL2NvbmZpZy5jOjE1NjYKK21zZ2lkICJBUEkgUGFyYW1ldGVyIgorbXNnc3RyICLZhdi52YTZhdipIEFQSSIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBQQVNTQVQgY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjE0NzEKK21zZ2lkICJBVCAoc2V0IDIpIGtleWJvYXJkIHNjYW4gY29kZSIKK21zZ3N0ciAiQVQgKNmF2KzZhdmI2LnYqSAyKSDYsdmF2LIg2YXYs9itINmE2YjYrdipINin2YTZhdmB2KfYqtmK2K0iCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBuYW1lIG9mIE1JREkgbXVzaWNhbCBpbnN0cnVtZW50ICMyMiAoaW4gdGhlIE9yZ2FuIGdyb3VwKS4KKyM6IFByb2dyYW1zL21pZGkuYzoxNDUKK21zZ2lkICJBY2NvcmRpb24iCittc2dzdHIgItin2YTYo9mD2YjYsdiv2YrZiNmGIgorCisjLiBCYXNzCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgbmFtZSBvZiBNSURJIG11c2ljYWwgaW5zdHJ1bWVudCAjMzMgKGluIHRoZSBCYXNzIGdyb3VwKS4KKyM6IFByb2dyYW1zL21pZGkuYzoxODAKK21zZ2lkICJBY291c3RpYyBCYXNzIgorbXNnc3RyICLYpdmK2YLYp9i5INin2YTYtdiv2KciCisKKyMuIFBpYW5vCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgbmFtZSBvZiBNSURJIG11c2ljYWwgaW5zdHJ1bWVudCAjMSAoaW4gdGhlIFBpYW5vIGdyb3VwKS4KKyM6IFByb2dyYW1zL21pZGkuYzo4MAorbXNnaWQgIkFjb3VzdGljIEdyYW5kIFBpYW5vIgorbXNnc3RyICLYp9mD2YjYs9iq2YrZgyDYrNix2KfZhtivINio2YrYp9mG2YgiCisKKyMuIEd1aXRhcgorIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIG5hbWUgb2YgTUlESSBtdXNpY2FsIGluc3RydW1lbnQgIzI1IChpbiB0aGUgR3VpdGFyIGdyb3VwKS4KKyM6IFByb2dyYW1zL21pZGkuYzoxNTUKK21zZ2lkICJBY291c3RpYyBHdWl0YXIgKG55bG9uKSIKK21zZ3N0ciAi2KzZitiq2KfYsSDYtdmI2KrZiiAo2YbYp9mK2YTZiNmGKSIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIG5hbWUgb2YgTUlESSBtdXNpY2FsIGluc3RydW1lbnQgIzI2IChpbiB0aGUgR3VpdGFyIGdyb3VwKS4KKyM6IFByb2dyYW1zL21pZGkuYzoxNTgKK21zZ2lkICJBY291c3RpYyBHdWl0YXIgKHN0ZWVsKSIKK21zZ3N0ciAi2KzZitiq2KfYsSDYtdmI2KrZiiAo2LXZhNioKSIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjEzMDMKK21zZ2lkICJBZnRlciBUaW1lIgorbXNnc3RyICLYqNi52K8g2KfZhNmI2YLYqiIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIG5hbWUgb2YgTUlESSBtdXNpY2FsIGluc3RydW1lbnQgIzExNCAoaW4gdGhlIFBlcmN1c3NpdmUgZ3JvdXApLgorIzogUHJvZ3JhbXMvbWlkaS5jOjQzNAorbXNnaWQgIkFnb2dvIgorbXNnc3RyICLYp9is2YjYrNmIIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6MTQ5MQorbXNnaWQgIkFsZXJ0IgorbXNnc3RyICLYqtmG2KjZitmHIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6MTEwNAorbXNnaWQgIkFsZXJ0IERvdHMiCittc2dzdHIgItmG2YLYp9i3INin2YTYqtmG2KjZitmHIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6MTEwOQorbXNnaWQgIkFsZXJ0IE1lc3NhZ2VzIgorbXNnc3RyICLYsdiz2KfYptmEINin2YTYqtmG2KjZitmHIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6MTA0OQorbXNnaWQgIkFsZXJ0IFR1bmVzIgorbXNnc3RyICLZhti62YXYp9iqINin2YTYqtmG2KjZitmHIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6ODY0IFByb2dyYW1zL21lbnVfcHJlZnMuYzoxMTk0Cittc2dpZCAiQWxsIgorbXNnc3RyICLYp9mE2YPZhCIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjU1NQorbXNnaWQgIkFscGhhYmV0aWMgQ3Vyc29yIENvb3JkaW5hdGVzIgorbXNnc3RyICLYpdit2K/Yp9ir2YrYp9iqINin2YTZhdik2LTYsSDYp9mE2KPYqNis2K/ZitipIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6NTU0Cittc2dpZCAiQWxwaGFiZXRpYyBXaW5kb3cgQ29vcmRpbmF0ZXMiCittc2dzdHIgItil2K3Yr9in2KvZitin2Kog2KfZhNmG2KfZgdiw2Kkg2KfZhNij2KjYrNiv2YrYqSIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIG5hbWUgb2YgTUlESSBtdXNpY2FsIGluc3RydW1lbnQgIzY2IChpbiB0aGUgUmVlZCBncm91cCkuCisjOiBQcm9ncmFtcy9taWRpLmM6MjgzCittc2dpZCAiQWx0byBTYXhvcGhvbmUiCittc2dzdHIgItij2YTYqtmIINiz2KfZg9iz2YHZiNmGIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgbmFtZSBvZiBNSURJIG11c2ljYWwgaW5zdHJ1bWVudCAjMTI3IChpbiB0aGUgU291bmQgRWZmZWN0cyBncm91cCkuCisjOiBQcm9ncmFtcy9taWRpLmM6NDc0Cittc2dpZCAiQXBwbGF1c2UiCittc2dzdHIgItiq2LXZgdmK2YIiCisKKyM6IFByb2dyYW1zL2xvZy5jOjExOAorbXNnaWQgIkFzeW5jIEV2ZW50cyIKK21zZ3N0ciAi2KPYrdiv2KfYqyDYutmK2LEg2YXYqtiy2KfZhdmG2KkiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzo4MDcKK21zZ2lkICJBdHRyaWJ1dGVzIEJsaW5rIFBlcmlvZCIKK21zZ3N0ciAi2YHYqtix2Kkg2YjZhdmK2LYg2KfZhNiz2YXYp9iqIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6ODE1Cittc2dpZCAiQXR0cmlidXRlcyBQZXJjZW50IFZpc2libGUiCittc2dzdHIgItin2YTZhtiz2KjYqSDYp9mE2YXYptmI2YrYqSDZhNmE2LPZhdin2Kog2KfZhNmF2LHYptmK2KkiCisKKyM6IFByb2dyYW1zL2NvbmZpZy5jOjEwNTkgUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjE0MDYKK21zZ2lkICJBdHRyaWJ1dGVzIFRhYmxlIgorbXNnc3RyICLYrNiv2YjZhCDYp9mE2LPZhdin2KoiCisKKyM6IFByb2dyYW1zL2FsZXJ0LmM6MTY4Cittc2dpZCAiQXV0b3JlbGVhc2UiCittc2dzdHIgItin2YTYqtit2LHZitixINin2YTYqtmE2YLYp9im2YoiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzo5NjcKK21zZ2lkICJBdXRvcmVsZWFzZSBUaW1lIgorbXNnc3RyICLZiNmC2Kog2KfZhNiq2K3YsdmK2LEg2KfZhNiq2YTZgtin2KbZiiIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjk4NAorbXNnaWQgIkF1dG9yZXBlYXQgRW5hYmxlZCIKK21zZ3N0ciAi2KrZhSDYqtmF2YPZitmGINin2YTYqtmD2LHYp9ixINin2YTYqtmE2YLYp9im2YoiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzo5OTAKK21zZ2lkICJBdXRvcmVwZWF0IEludGVydmFsIgorbXNnc3RyICLZgdin2LXZhCDYp9mE2KrZg9ix2KfYsSDYp9mE2KrZhNmC2KfYptmKIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6OTk3Cittc2dpZCAiQXV0b3JlcGVhdCBQYW5uaW5nIgorbXNnc3RyICLYp9mE2KrZhdix2YrYsSDYrtmE2KfZhCDYp9mE2KrZg9ix2KfYsSDYp9mE2KrZhNmC2KfYptmKIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6MTExOQorbXNnaWQgIkF1dG9zcGVhayIKK21zZ3N0ciAi2KfZhNmG2LfZgiDYp9mE2KrZhNmC2KfYptmKIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6MTExNgorbXNnaWQgIkF1dG9zcGVhayBPcHRpb25zIgorbXNnc3RyICLYrtmK2KfYsdin2Kog2KfZhNmG2LfZgiDYp9mE2KrZhNmC2KfYptmKIgorCisjOiBQcm9ncmFtcy9jb25maWcuYzozMzUKK21zZ2lkICJBdXRvc3BlYWsgVGhyZXNob2xkIgorbXNnc3RyICLYrdiv2YjYryDYp9mE2YbYt9mCINin2YTYqtmE2YLYp9im2YoiCisKKyM6IFByb2dyYW1zL2NvbmZpZy5jOjIwMTIKK21zZ2lkICJCUkxUVFkgc3RvcHBlZCIKK21zZ3N0ciAi2KrZiNmC2YEgQlJMVFRZIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgbmFtZSBvZiBNSURJIG11c2ljYWwgaW5zdHJ1bWVudCAjMTEwIChpbiB0aGUgRXRobmljIGdyb3VwKS4KKyM6IFByb2dyYW1zL21pZGkuYzo0MjEKK21zZ2lkICJCYWcgUGlwZSIKK21zZ3N0ciAi2YPZitizINin2YTYo9mG2KfYqNmK2KgiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBuYW1lIG9mIE1JREkgbXVzaWNhbCBpbnN0cnVtZW50ICMxMDYgKGluIHRoZSBFdGhuaWMgZ3JvdXApLgorIzogUHJvZ3JhbXMvbWlkaS5jOjQwOQorbXNnaWQgIkJhbmpvIgorbXNnc3RyICLYp9mE2KjYp9mG2KzZiNiyIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgbmFtZSBvZiBNSURJIG11c2ljYWwgaW5zdHJ1bWVudCAjNjggKGluIHRoZSBSZWVkIGdyb3VwKS4KKyM6IFByb2dyYW1zL21pZGkuYzoyODkKK21zZ2lkICJCYXJpdG9uZSBTYXhvcGhvbmUiCittc2dzdHIgItiz2KfZg9iz2YHZiNmGINin2YTYqNin2LHZitiq2YjZhiIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIG5hbWUgb2YgTUlESSBtdXNpY2FsIGluc3RydW1lbnQgZ3JvdXAgIzUuCisjOiBQcm9ncmFtcy9taWRpLmM6MzcKK21zZ2lkICJCYXNzIgorbXNnc3RyICLYtdmI2Kog2LnZhdmK2YIiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBuYW1lIG9mIE1JREkgbXVzaWNhbCBpbnN0cnVtZW50ICM3MSAoaW4gdGhlIFJlZWQgZ3JvdXApLgorIzogUHJvZ3JhbXMvbWlkaS5jOjI5OAorbXNnaWQgIkJhc3Nvb24iCittc2dzdHIgItin2YTYqNin2LPZiNmGIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6MTA1NgorbXNnaWQgIkJlZXBlciIKK21zZ3N0ciAi2KfZhNi12YHYp9ix2KkiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzoxMzAyCittc2dpZCAiQmVmb3JlIFRpbWUiCittc2dzdHIgItmC2KjZhCDYp9mE2YjZgtiqIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgbmFtZSBvZiBNSURJIG11c2ljYWwgaW5zdHJ1bWVudCAjMTI0IChpbiB0aGUgU291bmQgRWZmZWN0cyBncm91cCkuCisjOiBQcm9ncmFtcy9taWRpLmM6NDY1Cittc2dpZCAiQmlyZCBUd2VldCIKK21zZ3N0ciAi2KrYutix2YrYr9ipINin2YTYt9mK2YjYsSIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjgwMQorbXNnaWQgIkJsaW5raW5nIEF0dHJpYnV0ZXMiCittc2dzdHIgItmI2YXZiti2INin2YTYs9mF2KfYqiIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjgyMworbXNnaWQgIkJsaW5raW5nIENhcGl0YWxzIgorbXNnc3RyICLZiNmF2YrYtiDYp9mE2K3YsdmI2YEg2KfZhNmD2KjZitix2KkiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzo3NzQKK21zZ2lkICJCbGlua2luZyBTY3JlZW4gQ3Vyc29yIgorbXNnc3RyICLZiNmF2YrYtiDZhdik2LTYsSDYp9mE2LTYp9i02KkiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzoxMjQ4Cittc2dpZCAiQmxpbmtpbmcgU3BlZWNoIEN1cnNvciIKK21zZ3N0ciAi2YjZhdmK2LYg2YXYpNi02LEg2KfZhNmG2LfZgiIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjY2NSBQcm9ncmFtcy9tZW51X3ByZWZzLmM6MTM2MgorbXNnaWQgIkJsb2NrIgorbXNnc3RyICLYrdis2KgiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBuYW1lIG9mIE1JREkgbXVzaWNhbCBpbnN0cnVtZW50ICM3NyAoaW4gdGhlIFBpcGUgZ3JvdXApLgorIzogUHJvZ3JhbXMvbWlkaS5jOjMxNworbXNnaWQgIkJsb3duIEJvdHRsZSIKK21zZ3N0ciAi2LLYrNin2KzYqSDZgdmKINmF2YfYqCIKKworIzogUHJvZ3JhbXMvbG9nLmM6MTQyCittc2dpZCAiQmx1ZXRvb3RoIEkvTyIKK21zZ3N0ciAi2KjZhNmI2KrZiNirIEkgLyBPIgorCisjOiBQcm9ncmFtcy9jb25maWcuYzoxNzg3Cittc2dpZCAiQnJhaWxsZSBEZXZpY2UiCittc2dzdHIgItis2YfYp9iyINio2LHYp9mK2YQiCisKKyM6IFByb2dyYW1zL2NvbmZpZy5jOjE3ODMKK21zZ2lkICJCcmFpbGxlIERyaXZlciIKK21zZ3N0ciAi2LPYp9im2YLYqSDYqNix2KfZitmEIgorCisjOiBQcm9ncmFtcy9sb2cuYzoxNDgKK21zZ2lkICJCcmFpbGxlIERyaXZlciBFdmVudHMiCittc2dzdHIgItij2K3Yr9in2Ksg2LPYp9im2YLYqSDYqNix2KfZitmEIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6NzUyCittc2dpZCAiQnJhaWxsZSBGaXJtbmVzcyIKK21zZ3N0ciAi2LXZhNin2KjYqSDZhtmC2KfYtyDYqNix2KfZitmEIgorCisjOiBQcm9ncmFtcy9sb2cuYzo4MgorbXNnaWQgIkJyYWlsbGUgS2V5IEV2ZW50cyIKK21zZ3N0ciAi2KPYrdiv2KfYqyDZhdmB2KfYqtmK2K0g2KjYsdin2YrZhCIKKworIzogUHJvZ3JhbXMvY29uZmlnLmM6MTc4NgorbXNnaWQgIkJyYWlsbGUgUGFyYW1ldGVyIgorbXNnc3RyICLZhdi52KfZitmK2LEg2KjYsdin2YrZhCIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjY5OAorbXNnaWQgIkJyYWlsbGUgUHJlc2VudGF0aW9uIgorbXNnc3RyICLYqtmF2KvZitmEINio2LHYp9mK2YQiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzoxMzg5Cittc2dpZCAiQnJhaWxsZSBUYWJsZXMiCittc2dzdHIgItis2K/Yp9mI2YQg2KjYsdin2YrZhCIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjkzMgorbXNnaWQgIkJyYWlsbGUgVHlwaW5nIgorbXNnc3RyICLYp9mE2KXYr9iu2KfZhCDYqNio2LHYp9mK2YQiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzo3MDYKK21zZ2lkICJCcmFpbGxlIFZhcmlhbnQiCittc2dzdHIgItij2YbZiNin2Lkg2KjYsdin2YrZhCIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjg4NQorbXNnaWQgIkJyYWlsbGUgV2luZG93IE92ZXJsYXAiCittc2dzdHIgItiq2K/Yp9iu2YQg2YbZiNin2YHYsCDYqNix2KfZitmEIgorCisjOiBQcm9ncmFtcy9jb25maWcuYzo1NTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiQnJhaWxsZSBkcml2ZXIgY29kZSAoJXMsICVzLCBvciBvbmUgb2YgeyVzfSkuIgorbXNnc3RyICLYtNmB2LHYqSDYs9in2KbZgtipINio2LHYp9mK2YQgKCVzLCAlcywg2KPZiCDYo9mK2KfZiyDZhdmGIHslc30pLiIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIG5hbWUgb2YgTUlESSBtdXNpY2FsIGluc3RydW1lbnQgZ3JvdXAgIzguCisjOiBQcm9ncmFtcy9taWRpLmM6NDYKK21zZ2lkICJCcmFzcyIKK21zZ3N0ciAi2YbYrdin2LMiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBuYW1lIG9mIE1JREkgbXVzaWNhbCBpbnN0cnVtZW50ICM2MiAoaW4gdGhlIEJyYXNzIGdyb3VwKS4KKyM6IFByb2dyYW1zL21pZGkuYzoyNzAKK21zZ2lkICJCcmFzcyBTZWN0aW9uIgorbXNnc3RyICLYp9mE2YLYs9mFINin2YTZhtit2KfYs9mKIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgbmFtZSBvZiBNSURJIG11c2ljYWwgaW5zdHJ1bWVudCAjMTIyIChpbiB0aGUgU291bmQgRWZmZWN0cyBncm91cCkuCisjOiBQcm9ncmFtcy9taWRpLmM6NDU5Cittc2dpZCAiQnJlYXRoIE5vaXNlIgorbXNnc3RyICLYtdmI2Kog2KfZhNiq2YbZgdizIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgbmFtZSBvZiBNSURJIG11c2ljYWwgaW5zdHJ1bWVudCAjMiAoaW4gdGhlIFBpYW5vIGdyb3VwKS4KKyM6IFByb2dyYW1zL21pZGkuYzo4MworbXNnaWQgIkJyaWdodCBBY291c3RpYyBQaWFubyIKK21zZ3N0ciAi2KjYsdin2YrYqiDYp9mD2YjYs9iq2YrZgyDYqNmK2KfZhtmIIgorCisjOiBQcm9ncmFtcy94YnJsYXBpLmM6OTMKK21zZ2lkICJCcmxBUEkgYXV0aG9yaXphdGlvbi9hdXRoZW50aWNhdGlvbiBzY2hlbWVzIgorbXNnc3RyICLYo9mG2LjZhdipINin2YTZhdi12KfYr9mC2KkgLyDYp9mE2KrYrtmI2YrZhCBCcmxBUEkiCisKKyM6IFByb2dyYW1zL3hicmxhcGkuYzo4NgorbXNnaWQgIkJybEFQSSBob3N0IGFuZC9vciBwb3J0IHRvIGNvbm5lY3QgdG8iCittc2dzdHIgItmF2LbZitmBIEJybEFQSSDZiCAvINij2Ygg2KfZhNmF2YbZgdiwINin2YTZhdix2KfYryDYp9mE2KfYqti12KfZhCDYqNmHIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6MTQyNAorbXNnaWQgIkJ1aWxkIEluZm9ybWF0aW9uIgorbXNnc3RyICLZhdi52YTZiNmF2KfYqiDYp9mE2KXYtdiv2KfYsSIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjcyNQorbXNnaWQgIkNhcGl0YWxpemF0aW9uIE1vZGUiCittc2dzdHIgItmG2YXYtyDYp9mE2KPYrdix2YEg2KfZhNmD2KjZitix2KkiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzo4MjgKK21zZ2lkICJDYXBpdGFscyBCbGluayBQZXJpb2QiCittc2dzdHIgItmF2K/YqSDZiNmF2YrYtiDYp9mE2YXYpNi02LEg2YTZhNit2LHZiNmBINin2YTZg9io2YrYsdipIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6ODM2Cittc2dpZCAiQ2FwaXRhbHMgUGVyY2VudCBWaXNpYmxlIgorbXNnc3RyICLZhtiz2KjYqSDYsdik2YrYqSDYp9mE2KPYrdix2YEg2KfZhNmD2KjZitix2KkiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzoxNTE0Cittc2dpZCAiQ2F0ZWdvcnkgTG9nIExldmVsIgorbXNnc3RyICLZhdiz2KrZiNmJINiz2KzZhCDYp9mE2KPZgtiz2KfZhSIKKworIy4gQ2hyb21hdGljIFBlcmN1c3Npb24KKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBuYW1lIG9mIE1JREkgbXVzaWNhbCBpbnN0cnVtZW50ICM5IChpbiB0aGUgQ2hyb21hdGljIFBlcmN1c3Npb24gZ3JvdXApLgorIzogUHJvZ3JhbXMvbWlkaS5jOjEwNQorbXNnaWQgIkNlbGVzdGEiCittc2dzdHIgItiz2YrZhNmK2LPYqtinIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgbmFtZSBvZiBNSURJIG11c2ljYWwgaW5zdHJ1bWVudCAjNDMgKGluIHRoZSBTdHJpbmdzIGdyb3VwKS4KKyM6IFByb2dyYW1zL21pZGkuYzoyMTEKK21zZ2lkICJDZWxsbyIKK21zZ3N0ciAi2KfZhNiq2LTZitmE2YgiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBuYW1lIG9mIE1JREkgbXVzaWNhbCBpbnN0cnVtZW50ICM1MyAoaW4gdGhlIEVuc2VtYmxlIGdyb3VwKS4KKyM6IFByb2dyYW1zL21pZGkuYzoyNDIKK21zZ2lkICJDaG9pciBBYWhzIgorbXNnc3RyICLYrNmI2YLYqSDYotii2LMiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBuYW1lIG9mIE1JREkgbXVzaWNhbCBpbnN0cnVtZW50IGdyb3VwICMyLgorIzogUHJvZ3JhbXMvbWlkaS5jOjI4Cittc2dpZCAiQ2hyb21hdGljIFBlcmN1c3Npb24iCittc2dzdHIgItmC2LHYuSDZhNmI2YbZiiIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIG5hbWUgb2YgTUlESSBtdXNpY2FsIGluc3RydW1lbnQgIzIwIChpbiB0aGUgT3JnYW4gZ3JvdXApLgorIzogUHJvZ3JhbXMvbWlkaS5jOjEzOQorbXNnaWQgIkNodXJjaCBPcmdhbiIKK21zZ3N0ciAi2KPZiNix2LrYp9mGINmD2YbYs9mKIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgbmFtZSBvZiBNSURJIG11c2ljYWwgaW5zdHJ1bWVudCAjNzIgKGluIHRoZSBSZWVkIGdyb3VwKS4KKyM6IFByb2dyYW1zL21pZGkuYzozMDEKK21zZ2lkICJDbGFyaW5ldCIKK21zZ3N0ciAi2YPZhNin2LHZitmG2YrYqiIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIG5hbWUgb2YgTUlESSBtdXNpY2FsIGluc3RydW1lbnQgIzggKGluIHRoZSBQaWFubyBncm91cCkuCisjOiBQcm9ncmFtcy9taWRpLmM6MTAxCittc2dpZCAiQ2xhdmluZXQiCittc2dzdHIgItmD2YTYp9mB2YrZhtmK2KoiCisKKyM6IFByb2dyYW1zL21lbnUuYzo4OTQKK21zZ2lkICJDbG9zZSIKK21zZ3N0ciAi2KXYutmE2KfZgiIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjEyODYKK21zZ2lkICJDb2xvbiIKK21zZ3N0ciAi2YbZgti32KrZitmGIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6NzAyCittc2dpZCAiQ29tcHV0ZXIgQnJhaWxsZSIKK21zZ3N0ciAi2KfZhNio2LHYp9mK2YQg2KfZhNit2KfYs9mI2KjZiiIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjczNgorbXNnaWQgIkNvbXB1dGVyIEJyYWlsbGUgQ2VsbCBUeXBlIgorbXNnc3RyICLZhtmI2Lkg2K7ZhNmK2Kkg2KfZhNio2LHYp9mK2YQg2KfZhNit2KfYs9mI2KjZiiIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjE0NDgKK21zZ2lkICJDb25maWd1cmF0aW9uIERpcmVjdG9yeSIKK21zZ3N0ciAi2YXYs9in2LEg2KfZhNiq2YPZiNmK2YYiCisKKyM6IFByb2dyYW1zL2NvbmZpZy5jOjI5NTUgUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjE0NTMKK21zZ2lkICJDb25maWd1cmF0aW9uIEZpbGUiCittc2dzdHIgItmF2YTZgSDYp9mE2KrZg9mI2YrZhiIKKworIzogUHJvZ3JhbXMvYWxlcnQuYzoxNjMKK21zZ2lkICJDb25zb2xlIEJlbGwiCittc2dzdHIgItis2LHYsyDZiNit2K/YqSDYp9mE2KrYrdmD2YUiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzoxMDM1Cittc2dpZCAiQ29uc29sZSBCZWxsIEFsZXJ0IgorbXNnc3RyICLYqtmG2KjZitmHINis2LHYsyDZiNit2K/YqSDYp9mE2KrYrdmD2YUiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBuYW1lIG9mIE1JREkgbXVzaWNhbCBpbnN0cnVtZW50ICM0NCAoaW4gdGhlIFN0cmluZ3MgZ3JvdXApLgorIzogUHJvZ3JhbXMvbWlkaS5jOjIxNAorbXNnaWQgIkNvbnRyYWJhc3MiCittc2dzdHIgItmD2YjZhtiq2LHYp9io2KfYsyIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjcwMworbXNnaWQgIkNvbnRyYWN0ZWQgQnJhaWxsZSIKK21zZ3N0ciAi2KjYsdin2YrZhCDYqNin2YTYp9iu2KrYtdin2LHYp9iqIgorCisjOiBQcm9ncmFtcy9jb25maWcuYzoxMDI3IFByb2dyYW1zL21lbnVfcHJlZnMuYzoxMzk5Cittc2dpZCAiQ29udHJhY3Rpb24gVGFibGUiCittc2dzdHIgItis2K/ZiNmEINin2YTYp9iu2KrYtdin2LHYp9iqIgorCisjOiBQcm9ncmFtcy9icmx0dHktY3RiLmM6NjIKK21zZ2lkICJDb250cmFjdGlvbiB0YWJsZS4iCittc2dzdHIgItis2K/ZiNmEINin2YTYp9iu2KrYtdin2LHYp9iqLiIKKworIzogUHJvZ3JhbXMvYnJsdHR5LWN0Yi5jOjc2Cittc2dpZCAiQ29udHJhY3Rpb24gdmVyaWZpY2F0aW9uIHRhYmxlLiIKK21zZ3N0ciAi2KzYr9mI2YQg2KfZhNiq2K3ZgtmCINmF2YYg2KfZhNin2K7Yqti12KfYsdin2KouIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6MTQ5MgorbXNnaWQgIkNyaXRpY2FsIgorbXNnc3RyICLYrdix2KwiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzo1NDYKK21zZ2lkICJDdXJzb3IgQ29sdW1uIgorbXNnc3RyICLYudmF2YjYryDYp9mE2YXYpNi02LEiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzo1NDUgUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjU1NworbXNnaWQgIkN1cnNvciBDb29yZGluYXRlcyIKK21zZ3N0ciAi2KXYrdiv2KfYq9mK2KfYqiDYp9mE2YXYpNi02LEiCisKKyM6IFByb2dyYW1zL2xvZy5jOjEwMAorbXNnaWQgIkN1cnNvciBSb3V0aW5nIgorbXNnc3RyICLYqtmI2KzZitmHINin2YTZhdik2LTYsSIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjU0NworbXNnaWQgIkN1cnNvciBSb3ciCittc2dzdHIgIti12YEg2KfZhNmF2KTYtNixIgorCisjOiBQcm9ncmFtcy9sb2cuYzo5NAorbXNnaWQgIkN1cnNvciBUcmFja2luZyIKK21zZ3N0ciAi2KrYqtio2Lkg2KfZhNmF2KTYtNixIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6OTA0Cittc2dpZCAiQ3Vyc29yIFRyYWNraW5nIERlbGF5IgorbXNnc3RyICLYqtij2K7YsSDYqtiq2KjYuSDYp9mE2YXYpNi02LEiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzo1NDggUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjU1OQorbXNnaWQgIkN1cnNvciBhbmQgV2luZG93IENvbHVtbiIKK21zZ3N0ciAi2LnZhdmI2K8g2KfZhNmF2KTYtNixINmI2KfZhNmG2KfZgdiw2KkiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzo1NDkgUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjU2MAorbXNnaWQgIkN1cnNvciBhbmQgV2luZG93IFJvdyIKK21zZ3N0ciAi2LXZgSDYp9mE2YXYpNi02LEg2YjYp9mE2YbYp9mB2LDYqSIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjEzMjQKK21zZ2lkICJEYXNoIgorbXNnc3RyICLYtNix2LfYqSIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjEzMTcKK21zZ2lkICJEYXRlIEZvcm1hdCIKK21zZ3N0ciAi2KrZhtiz2YrZgiDYp9mE2KrYp9ix2YrYriIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjEzMDYKK21zZ2lkICJEYXRlIFBvc2l0aW9uIgorbXNnc3RyICLZiNi22Lkg2KfZhNiq2KfYsdmK2K4iCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzoxMzI5Cittc2dpZCAiRGF0ZSBTZXBhcmF0b3IiCittc2dzdHIgItmB2KfYtdmEINin2YTYqtin2LHZitiuIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6MTMxNAorbXNnaWQgIkRheSBNb250aCBZZWFyIgorbXNnc3RyICLZitmI2YUg2LTZh9ixINiz2YbYqSIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjE0OTcKK21zZ2lkICJEZWJ1ZyIKK21zZ3N0ciAi2KrYtdit2YrYrSDYp9mE2KPYrti32KfYoSIKKworIzogUHJvZ3JhbXMvY29uZmlnLmM6NTczCittc2dpZCAiRGV2aWNlIGZvciBhY2Nlc3NpbmcgYnJhaWxsZSBkaXNwbGF5LiIKK21zZ3N0ciAi2KzZh9in2LIg2YTZhNmI2LXZiNmEINil2YTZiSDYtNin2LTYqSDYudix2LYg2KjYsdin2YrZhC4iCisKKyM6IFByb2dyYW1zL2NvbmZpZy5jOjUzMgorbXNnaWQgIkRpc2FibGUgdGhlIGFwcGxpY2F0aW9uIHByb2dyYW1taW5nIGludGVyZmFjZS4iCittc2dzdHIgItiq2LnYt9mK2YQg2YjYp9is2YfYqSDYqNix2YXYrNipINin2YTYqti32KjZitmCLiIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIG5hbWUgb2YgTUlESSBtdXNpY2FsIGluc3RydW1lbnQgIzMxIChpbiB0aGUgR3VpdGFyIGdyb3VwKS4KKyM6IFByb2dyYW1zL21pZGkuYzoxNzMKK21zZ2lkICJEaXN0b3J0aW9uIEd1aXRhciIKK21zZ3N0ciAi2KfZhNi62YrYqtin2LEg2KfZhNmF2LLYudisIgorCisjOiBQcm9ncmFtcy9jb25maWcuYzo2NzUKK21zZ2lkICJEbyBub3QgYXV0b3NwZWFrIHdoZW4gYnJhaWxsZSBpcyBub3QgYmVpbmcgdXNlZC4iCittc2dzdHIgItmE2Kcg2KrYqtit2K/YqyDYqtmE2YLYp9im2YrZi9inINi52YbYryDYudiv2YUg2KfYs9iq2K7Yr9in2YUg2LfYsdmK2YLYqSDYqNix2KfZitmELiIKKworIzogUHJvZ3JhbXMveGJybGFwaS5jOjExMgorbXNnaWQgIkRvIG5vdCB3cml0ZSBhbnkgdGV4dCB0byB0aGUgYnJhaWxsZSBkZXZpY2UiCittc2dzdHIgItmE2Kcg2KrZg9iq2Kgg2KPZiiDZhti1INil2YTZiSDYrNmH2KfYsiDYqNix2KfZitmEIgorCisjOiBQcm9ncmFtcy9icmx0dHktdHJ0eHQuYzo3OQorbXNnaWQgIkRvbid0IGZhbGwgYmFjayB0byB0aGUgVW5pY29kZSBiYXNlIGNoYXJhY3Rlci4iCittc2dzdHIgItmE2Kcg2KrYsdis2Lkg2KXZhNmJINij2LPYp9izINit2LHZgSBVbmljb2RlLiIKKworIzogUHJvZ3JhbXMvY29uZmlnLmM6NDQzCittc2dpZCAiRG9uJ3Qgc3dpdGNoIHRvIGFuIHVucHJpdmlsZWdlZCB1c2VyIG9yIHJlbGlucXVpc2ggYW55IHByaXZpbGVnZXMgKGdyb3VwIG1lbWJlcnNoaXBzLCBjYXBhYmlsaXRpZXMsIGV0YykuIgorbXNnc3RyICLZhNinINiq2YLZhSDYqNin2YTYqtio2K/ZitmEINil2YTZiSDZhdiz2KrYrtiv2YUg2YTYpyDZitiq2YXYqti5INio2KfZhdiq2YrYp9iy2KfYqiDYo9mIINin2YTYqtiu2YTZiiDYudmGINij2Yog2KfZhdiq2YrYp9iy2KfYqiAo2LnYttmI2YrYp9iqINin2YTZhdis2KrZhdi52Iwg2YjZhdinINil2YTZiSDYsNmE2YMpLiIKKworIzogUHJvZ3JhbXMvYWxlcnQuYzo1MgorbXNnaWQgIkRvbmUiCittc2dzdHIgItiq2YUiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzoxMjg3IFByb2dyYW1zL21lbnVfcHJlZnMuYzoxMzI2Cittc2dpZCAiRG90IgorbXNnc3RyICLZhtmC2LfYqSIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjk0MgorbXNnaWQgIkRvdHMgdmlhIFVuaWNvZGUgQnJhaWxsZSIKK21zZ3N0ciAi2KfZhNmG2YLYp9i3INi52KjYsSDZitmI2YbZitmD2YjYryDYqNix2KfZitmEIgorCisjLiBPcmdhbgorIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIG5hbWUgb2YgTUlESSBtdXNpY2FsIGluc3RydW1lbnQgIzE3IChpbiB0aGUgT3JnYW4gZ3JvdXApLgorIzogUHJvZ3JhbXMvbWlkaS5jOjEzMAorbXNnaWQgIkRyYXdiYXIgT3JnYW4iCittc2dzdHIgItij2YjYsdi62KfZhiDYp9mE2KzYsSIKKworIzogUHJvZ3JhbXMvY29uZmlnLmM6Mjk3NiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6MTQ3MworbXNnaWQgIkRyaXZlcnMgRGlyZWN0b3J5IgorbXNnc3RyICLZhdiz2KfYsSDYp9mE2KrYudix2YrZgdin2KoiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBuYW1lIG9mIE1JREkgbXVzaWNhbCBpbnN0cnVtZW50ICMxNiAoaW4gdGhlIENocm9tYXRpYyBQZXJjdXNzaW9uIGdyb3VwKS4KKyM6IFByb2dyYW1zL21pZGkuYzoxMjYKK21zZ2lkICJEdWxjaW1lciIKK21zZ3N0ciAi2KfZhNiz2YbYt9mI2LEiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzo4NzkKK21zZ2lkICJFYWdlciBTbGlkaW5nIEJyYWlsbGUgV2luZG93IgorbXNnc3RyICLYp9mE2K3Ysdi1INi52YTZiSDZhtin2YHYsNipINio2LHYp9mK2YQg2KfZhNmF2YbYstmE2YLYqSIKKworIzogUHJvZ3JhbXMvYnJsdHR5LXR0Yi5jOjE1OAorbXNnaWQgIkVkaXQgdGFibGUuIgorbXNnc3RyICLYqtit2LHZitixINin2YTYrNiv2YjZhC4iCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBuYW1lIG9mIE1JREkgbXVzaWNhbCBpbnN0cnVtZW50ICMzNCAoaW4gdGhlIEJhc3MgZ3JvdXApLgorIzogUHJvZ3JhbXMvbWlkaS5jOjE4MworbXNnaWQgIkVsZWN0cmljIEJhc3MgKGZpbmdlcikiCittc2dzdHIgItis2YfZitixINmD2YfYsdio2KfYptmKICjYpdi12KjYuSkiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBuYW1lIG9mIE1JREkgbXVzaWNhbCBpbnN0cnVtZW50ICMzNSAoaW4gdGhlIEJhc3MgZ3JvdXApLgorIzogUHJvZ3JhbXMvbWlkaS5jOjE4NgorbXNnaWQgIkVsZWN0cmljIEJhc3MgKHBpY2spIgorbXNnc3RyICLYrNmH2YrYsSDZg9mH2LHYqNin2KbZiiAo2YXYudmI2YQpIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgbmFtZSBvZiBNSURJIG11c2ljYWwgaW5zdHJ1bWVudCAjMyAoaW4gdGhlIFBpYW5vIGdyb3VwKS4KKyM6IFByb2dyYW1zL21pZGkuYzo4NgorbXNnaWQgIkVsZWN0cmljIEdyYW5kIFBpYW5vIgorbXNnc3RyICLYqNmK2KfZhtmIINmD2YfYsdio2KfYptmKINmD2KjZitixIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgbmFtZSBvZiBNSURJIG11c2ljYWwgaW5zdHJ1bWVudCAjMjggKGluIHRoZSBHdWl0YXIgZ3JvdXApLgorIzogUHJvZ3JhbXMvbWlkaS5jOjE2NAorbXNnaWQgIkVsZWN0cmljIEd1aXRhciAoY2xlYW4pIgorbXNnc3RyICLYrNmK2KrYp9ixINmD2YfYsdio2KfYptmKICjZhti42YrZgSkiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBuYW1lIG9mIE1JREkgbXVzaWNhbCBpbnN0cnVtZW50ICMyNyAoaW4gdGhlIEd1aXRhciBncm91cCkuCisjOiBQcm9ncmFtcy9taWRpLmM6MTYxCittc2dpZCAiRWxlY3RyaWMgR3VpdGFyIChqYXp6KSIKK21zZ3N0ciAi2KzZitiq2KfYsSDZg9mH2LHYqNin2KbZiiAo2KzYp9iyKSIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIG5hbWUgb2YgTUlESSBtdXNpY2FsIGluc3RydW1lbnQgIzI5IChpbiB0aGUgR3VpdGFyIGdyb3VwKS4KKyM6IFByb2dyYW1zL21pZGkuYzoxNjcKK21zZ2lkICJFbGVjdHJpYyBHdWl0YXIgKG11dGVkKSIKK21zZ3N0ciAi2KzZitiq2KfYsSDZg9mH2LHYqNin2KbZiiAo2YXZg9iq2YjZhSkiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBuYW1lIG9mIE1JREkgbXVzaWNhbCBpbnN0cnVtZW50ICM1IChpbiB0aGUgUGlhbm8gZ3JvdXApLgorIzogUHJvZ3JhbXMvbWlkaS5jOjkyCittc2dpZCAiRWxlY3RyaWMgUGlhbm8gMSIKK21zZ3N0ciAi2KjZitin2YbZiCDZg9mH2LHYqNin2KbZiiAxIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgbmFtZSBvZiBNSURJIG11c2ljYWwgaW5zdHJ1bWVudCAjNiAoaW4gdGhlIFBpYW5vIGdyb3VwKS4KKyM6IFByb2dyYW1zL21pZGkuYzo5NQorbXNnaWQgIkVsZWN0cmljIFBpYW5vIDIiCittc2dzdHIgItio2YrYp9mG2Ygg2YPZh9ix2KjYp9im2YogMiIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjE0OTAKK21zZ2lkICJFbWVyZ2VuY3kiCittc2dzdHIgItin2YTYt9mI2KfYsdimIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6NTQxCittc2dpZCAiRW5kIgorbXNnc3RyICLYp9mE2YbZh9in2YrYqSIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjg2NQorbXNnaWQgIkVuZCBvZiBMaW5lIgorbXNnc3RyICLZhtmH2KfZitipINin2YTYs9i32LEiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBuYW1lIG9mIE1JREkgbXVzaWNhbCBpbnN0cnVtZW50ICM3MCAoaW4gdGhlIFJlZWQgZ3JvdXApLgorIzogUHJvZ3JhbXMvbWlkaS5jOjI5NQorbXNnaWQgIkVuZ2xpc2ggSG9ybiIKK21zZ3N0ciAi2YXYstmF2KfYsSDYpdmG2KzZhNmK2LLZiiIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjEyMjkKK21zZ2lkICJFbnF1ZXVlIgorbXNnc3RyICLZgtin2KbZhdipINin2YTYp9mG2KrYuNin2LEiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBuYW1lIG9mIE1JREkgbXVzaWNhbCBpbnN0cnVtZW50IGdyb3VwICM3LgorIzogUHJvZ3JhbXMvbWlkaS5jOjQzCittc2dpZCAiRW5zZW1ibGUiCittc2dzdHIgItin2YTZgdix2YLYqSIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjE0OTMKK21zZ2lkICJFcnJvciIKK21zZ3N0ciAi2K7Yt9ijIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgbmFtZSBvZiBNSURJIG11c2ljYWwgaW5zdHJ1bWVudCBncm91cCAjMTQuCisjOiBQcm9ncmFtcy9taWRpLmM6NjgKK21zZ2lkICJFdGhuaWMgSW5zdHJ1bWVudHMiCittc2dzdHIgItin2YTYotmE2KfYqiDYp9mE2LnYsdmC2YrYqSIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjEwMzIKK21zZ2lkICJFdmVudCBBbGVydHMiCittc2dzdHIgItiq2YbYqNmK2YfYp9iqINin2YTYo9it2K/Yp9irIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6NzEzCittc2dpZCAiRXhwYW5kIEN1cnJlbnQgV29yZCIKK21zZ3N0ciAi2KrZiNiz2YrYuSDYp9mE2YPZhNmF2Kkg2KfZhNit2KfZhNmK2KkiCisKKyM6IFByb2dyYW1zL2NvbmZpZy5jOjQ4NworbXNnaWQgIkV4cGxpY2l0IHByZWZlcmVuY2Ugc2V0dGluZ3MuIgorbXNnc3RyICLYpdi52K/Yp9iv2KfYqiDYp9mE2KrZgdi22YrZhCDYp9mE2LXYsdmK2K3YqS4iCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzoxMDU5Cittc2dpZCAiRk0iCittc2dzdHIgIkZNIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6MTA5NworbXNnaWQgIkZNIFZvbHVtZSIKK21zZ3N0ciAi2YXYs9iq2YjZiSDYtdmI2KogIEZNIgorCisjLiBTeW50aCBGTQorIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIG5hbWUgb2YgTUlESSBtdXNpY2FsIGluc3RydW1lbnQgIzk3IChpbiB0aGUgU3ludGggRk0gZ3JvdXApLgorIzogUHJvZ3JhbXMvbWlkaS5jOjM4MAorbXNnaWQgIkZYIDEgKHJhaW4pIgorbXNnc3RyICJGWCAxICjZhdi32LEpIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgbmFtZSBvZiBNSURJIG11c2ljYWwgaW5zdHJ1bWVudCAjOTggKGluIHRoZSBTeW50aCBGTSBncm91cCkuCisjOiBQcm9ncmFtcy9taWRpLmM6MzgzCittc2dpZCAiRlggMiAoc291bmR0cmFjaykiCittc2dzdHIgIkZYIDIgKNmF2YjYs9mK2YLZiSDYqti12YjZitix2YrYqSkiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBuYW1lIG9mIE1JREkgbXVzaWNhbCBpbnN0cnVtZW50ICM5OSAoaW4gdGhlIFN5bnRoIEZNIGdyb3VwKS4KKyM6IFByb2dyYW1zL21pZGkuYzozODYKK21zZ2lkICJGWCAzIChjcnlzdGFsKSIKK21zZ3N0ciAiRlggMyAo2YPYsdmK2LPYqtin2YQpIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgbmFtZSBvZiBNSURJIG11c2ljYWwgaW5zdHJ1bWVudCAjMTAwIChpbiB0aGUgU3ludGggRk0gZ3JvdXApLgorIzogUHJvZ3JhbXMvbWlkaS5jOjM4OQorbXNnaWQgIkZYIDQgKGF0bW9zcGhlcmUpIgorbXNnc3RyICJGWCA0ICjYp9mE2LrZhNin2YEg2KfZhNis2YjZiikiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBuYW1lIG9mIE1JREkgbXVzaWNhbCBpbnN0cnVtZW50ICMxMDEgKGluIHRoZSBTeW50aCBGTSBncm91cCkuCisjOiBQcm9ncmFtcy9taWRpLmM6MzkyCittc2dpZCAiRlggNSAoYnJpZ2h0bmVzcykiCittc2dzdHIgIkZYIDUgKNin2YTYs9i32YjYuSkiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBuYW1lIG9mIE1JREkgbXVzaWNhbCBpbnN0cnVtZW50ICMxMDIgKGluIHRoZSBTeW50aCBGTSBncm91cCkuCisjOiBQcm9ncmFtcy9taWRpLmM6Mzk1Cittc2dpZCAiRlggNiAoZ29ibGlucykiCittc2dzdHIgIkZYIDYgKNin2YTYudmB2KfYsdmK2KopIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgbmFtZSBvZiBNSURJIG11c2ljYWwgaW5zdHJ1bWVudCAjMTAzIChpbiB0aGUgU3ludGggRk0gZ3JvdXApLgorIzogUHJvZ3JhbXMvbWlkaS5jOjM5OAorbXNnaWQgIkZYIDcgKGVjaG9lcykiCittc2dzdHIgIkZYIDcgKNij2LXYr9in2KEpIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgbmFtZSBvZiBNSURJIG11c2ljYWwgaW5zdHJ1bWVudCAjMTA0IChpbiB0aGUgU3ludGggRk0gZ3JvdXApLgorIy4geGdldHRleHQ6IChzY2ktZmkgaXMgYSBjb21tb24gc2hvcnQgZm9ybSBmb3Igc2NpZW5jZSBmaWN0aW9uKQorIzogUHJvZ3JhbXMvbWlkaS5jOjQwMgorbXNnaWQgIkZYIDggKHNjaS1maSkiCittc2dzdHIgIkZYIDggKNiu2YrYp9mEINi52YTZhdmKKSIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIG5hbWUgb2YgTUlESSBtdXNpY2FsIGluc3RydW1lbnQgIzExMSAoaW4gdGhlIEV0aG5pYyBncm91cCkuCisjOiBQcm9ncmFtcy9taWRpLmM6NDI0Cittc2dpZCAiRmlkZGxlIgorbXNnc3RyICLZg9mF2KfZhiIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIG5hbWUgb2YgTUlESSBtdXNpY2FsIGluc3RydW1lbnQgIzc0IChpbiB0aGUgUGlwZSBncm91cCkuCisjOiBQcm9ncmFtcy9taWRpLmM6MzA4Cittc2dpZCAiRmx1dGUiCittc2dzdHIgItin2YTZgdmE2YjYqiIKKworIzogUHJvZ3JhbXMvYnJsdHR5LWN0Yi5jOjk2Cittc2dpZCAiRm9yY2UgaW1tZWRpYXRlIG91dHB1dC4iCittc2dzdHIgItil2KzYqNin2LEg2KfZhNi52LHYtiDYp9mE2YXYqNin2LTYsS4iCisKKyM6IFByb2dyYW1zL2JybHR0eS1jbGRyLmM6NDIKK21zZ2lkICJGb3JtYXQgb2YgZWFjaCBvdXRwdXQgbGluZS4iCittc2dzdHIgItiq2YbYs9mK2YIg2YPZhCDYs9i32LEg2LnZhtivINin2YTYudix2LYuIgorCisjOiBQcm9ncmFtcy9icmx0dHktdHRiLmM6MTY1Cittc2dpZCAiRm9ybWF0IG9mIGlucHV0IGZpbGUuIgorbXNnc3RyICLYqtmG2LPZitmCINmF2YTZgSDYp9mE2KXYr9iu2KfZhC4iCisKKyM6IFByb2dyYW1zL2JybHR0eS10dGIuYzoxNzIKK21zZ2lkICJGb3JtYXQgb2Ygb3V0cHV0IGZpbGUuIgorbXNnc3RyICLYqtmG2LPZitmCINmF2YTZgSDYp9mE2LnYsdi2LiIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIG5hbWUgb2YgTUlESSBtdXNpY2FsIGluc3RydW1lbnQgIzYxIChpbiB0aGUgQnJhc3MgZ3JvdXApLgorIzogUHJvZ3JhbXMvbWlkaS5jOjI2NworbXNnaWQgIkZyZW5jaCBIb3JuIgorbXNnc3RyICLYp9mE2KjZiNmCINin2YTZgdix2YbYs9mKIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgbmFtZSBvZiBNSURJIG11c2ljYWwgaW5zdHJ1bWVudCAjMzYgKGluIHRoZSBCYXNzIGdyb3VwKS4KKyM6IFByb2dyYW1zL21pZGkuYzoxODkKK21zZ2lkICJGcmV0bGVzcyBCYXNzIgorbXNnc3RyICLZgdix2YrYqtmE2LMg2KjYp9izIgorCisjOiBQcm9ncmFtcy9hbGVydC5jOjk3Cittc2dpZCAiRnJvemVuIgorbXNnc3RyICLZhdis2YXYr9ipIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6NTU2Cittc2dpZCAiR2VuZXJpYyIKK21zZ3N0ciAi2KPYs9in2LPZiiIKKworIzogUHJvZ3JhbXMvbG9nLmM6NjQKK21zZ2lkICJHZW5lcmljIElucHV0IgorbXNnc3RyICLYp9mE2KXYr9iu2KfZhCDYp9mE2KPYs9in2LPZiiIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIG5hbWUgb2YgTUlESSBtdXNpY2FsIGluc3RydW1lbnQgIzEwIChpbiB0aGUgQ2hyb21hdGljIFBlcmN1c3Npb24gZ3JvdXApLgorIzogUHJvZ3JhbXMvbWlkaS5jOjEwOAorbXNnaWQgIkdsb2NrZW5zcGllbCIKK21zZ3N0ciAi2KzZhNmI2YPZhtiz2KjZitmEIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgbmFtZSBvZiBNSURJIG11c2ljYWwgaW5zdHJ1bWVudCBncm91cCAjNC4KKyM6IFByb2dyYW1zL21pZGkuYzozNAorbXNnaWQgIkd1aXRhciIKK21zZ3N0ciAi2LrZitiq2KfYsSIKKworIy4gU291bmQgRWZmZWN0cworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIG5hbWUgb2YgTUlESSBtdXNpY2FsIGluc3RydW1lbnQgIzEyMSAoaW4gdGhlIFNvdW5kIEVmZmVjdHMgZ3JvdXApLgorIzogUHJvZ3JhbXMvbWlkaS5jOjQ1NgorbXNnaWQgIkd1aXRhciBGcmV0IE5vaXNlIgorbXNnc3RyICLYttis2YrYrCDYp9mE2KzZitiq2KfYsSDYp9mE2K3ZhtmCIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgbmFtZSBvZiBNSURJIG11c2ljYWwgaW5zdHJ1bWVudCAjMzIgKGluIHRoZSBHdWl0YXIgZ3JvdXApLgorIzogUHJvZ3JhbXMvbWlkaS5jOjE3NgorbXNnaWQgIkd1aXRhciBIYXJtb25pY3MiCittc2dzdHIgItin2YTYqtmI2KfZgdmC2YrYp9iqINin2YTYutmK2KrYp9ixIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgbmFtZSBvZiBNSURJIG11c2ljYWwgaW5zdHJ1bWVudCAjMTI4IChpbiB0aGUgU291bmQgRWZmZWN0cyBncm91cCkuCisjOiBQcm9ncmFtcy9taWRpLmM6NDc3Cittc2dpZCAiR3Vuc2hvdCIKK21zZ3N0ciAi2LfZhNmCINmG2KfYsdmKIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgbmFtZSBvZiBNSURJIG11c2ljYWwgaW5zdHJ1bWVudCAjMjMgKGluIHRoZSBPcmdhbiBncm91cCkuCisjOiBQcm9ncmFtcy9taWRpLmM6MTQ4Cittc2dpZCAiSGFybW9uaWNhIgorbXNnc3RyICLZh9in2LHZhdmI2YbZitmD2KciCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBuYW1lIG9mIE1JREkgbXVzaWNhbCBpbnN0cnVtZW50ICM3IChpbiB0aGUgUGlhbm8gZ3JvdXApLgorIzogUHJvZ3JhbXMvbWlkaS5jOjk4Cittc2dpZCAiSGFycHNpY2hvcmQiCittc2dzdHIgItio2YrYp9mGINin2YTZgtmK2KvYp9ix2YoiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBuYW1lIG9mIE1JREkgbXVzaWNhbCBpbnN0cnVtZW50ICMxMjYgKGluIHRoZSBTb3VuZCBFZmZlY3RzIGdyb3VwKS4KKyM6IFByb2dyYW1zL21pZGkuYzo0NzEKK21zZ2lkICJIZWxpY29wdGVyIgorbXNnc3RyICLZh9mE2YrZg9mI2KjYqtixIgorCisjOiBQcm9ncmFtcy9zY3JfaGVscC5jOjIxNQorbXNnaWQgIkhlbHAgU2NyZWVuIgorbXNnc3RyICLYtNin2LTYqSDYp9mE2YXYs9in2LnYr9ipIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6NzQ4IFByb2dyYW1zL21lbnVfcHJlZnMuYzoxMDEzCittc2dpZCAiSGlnaCIKK21zZ3N0ciAi2YXYsdiq2YHYuSIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjkyMQorbXNnaWQgIkhpZ2hsaWdodCBCcmFpbGxlIFdpbmRvdyBMb2NhdGlvbiIKK21zZ3N0ciAi2KrYrdiv2YrYryDZhdmI2YLYuSDZhtin2YHYsNipINio2LHYp9mK2YQiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBuYW1lIG9mIE1JREkgbXVzaWNhbCBpbnN0cnVtZW50ICM0IChpbiB0aGUgUGlhbm8gZ3JvdXApLgorIzogUHJvZ3JhbXMvbWlkaS5jOjg5Cittc2dpZCAiSG9ua3l0b25rIFBpYW5vIgorbXNnc3RyICLZh9mI2YbZg9mK2KrZiNmG2YMg2KjZitin2YbZiCIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjEyMjgKK21zZ2lkICJJbW1lZGlhdGUiCittc2dzdHIgItmF2KjYp9i02LEiCisKKyM6IFByb2dyYW1zL3hicmxhcGkuYzo2NjUKK21zZ2lkICJJbmNvbXBhdGlibGUgWEtCIGxpYnJhcnlcbiIKK21zZ3N0ciAi2YXZg9iq2KjYqSBYS0Ig2LrZitixINmF2KrZiNin2YHZgtipIFxcIG5cbiIKKworIzogUHJvZ3JhbXMveGJybGFwaS5jOjY2NworbXNnaWQgIkluY29tcGF0aWJsZSBYS0Igc2VydmVyIHN1cHBvcnRcbiIKK21zZ3N0ciAi2K/YudmFINiu2KfYr9mFIFhLQiDYutmK2LEg2YXYqtmI2KfZgdmCIFxcIG5cbiIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjE0OTYKK21zZ2lkICJJbmZvcm1hdGlvbiIKK21zZ3N0ciAi2YXYudmE2YjZhdin2KoiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzo5NTYKK21zZ2lkICJJbnB1dCBPcHRpb25zIgorbXNnc3RyICLYrtmK2KfYsdin2Kog2KfZhNil2K/Yrtin2YQiCisKKyM6IFByb2dyYW1zL2xvZy5jOjcwCittc2dpZCAiSW5wdXQgUGFja2V0cyIKK21zZ3N0ciAi2K3YstmFINin2YTYpdiv2K7Yp9mEIgorCisjOiBQcm9ncmFtcy9jb25maWcuYzo0MTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW5zdGFsbCB0aGUgJXMgc2VydmljZSwgYW5kIHRoZW4gZXhpdC4iCittc2dzdHIgItmC2YUg2KjYqtir2KjZitiqINiu2K/ZhdipICVzINiMINir2YUg2YLZhSDYqNin2YTYpdmG2YfYp9ihLiIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjE1MDAKK21zZ2lkICJJbnRlcm5hbCBQYXJhbWV0ZXJzIgorbXNnc3RyICLYp9mE2YXYudin2YrZitixINin2YTYr9in2K7ZhNmK2KkiCisKKyM6IERyaXZlcnMvU2NyZWVuL0FuZHJvaWQvc2NyZWVuLmM6MTk3Cittc2dpZCAiSmF2YSBjbGFzcyBub3QgZm91bmQiCittc2dzdHIgItmB2KbYqSBKYXZhINi62YrYsSDZhdmI2KzZiNiv2KkiCisKKyM6IERyaXZlcnMvU2NyZWVuL0FuZHJvaWQvc2NyZWVuLmM6MTgxCittc2dpZCAiSmF2YSBleGNlcHRpb24gb2NjdXJyZWQiCittc2dzdHIgItit2K/YqyDYp9iz2KrYq9mG2KfYoSBKYXZhIgorCisjOiBEcml2ZXJzL1NjcmVlbi9BbmRyb2lkL3NjcmVlbi5jOjE5NAorbXNnaWQgIkphdmEgbWV0aG9kIG5vdCBmb3VuZCIKK21zZ3N0ciAi2YTZhSDZitiq2YUg2KfZhNi52KvZiNixINi52YTZiSDYt9ix2YrZgtipINis2KfZgdinIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgbmFtZSBvZiBNSURJIG11c2ljYWwgaW5zdHJ1bWVudCAjMTA5IChpbiB0aGUgRXRobmljIGdyb3VwKS4KKyM6IFByb2dyYW1zL21pZGkuYzo0MTgKK21zZ2lkICJLYWxpbWJhIgorbXNnc3RyICLZg9in2YTZitmF2KjYpyIKKworIzogUHJvZ3JhbXMvY29uZmlnLmM6MTcwOQorbXNnaWQgIktleSBCaW5kaW5ncyIKK21zZ3N0ciAi2KfYsdiq2KjYp9i32KfYqiDYp9mE2YXZgdin2KrZititIgorCisjOiBQcm9ncmFtcy9jb25maWcuYzoxMjM3Cittc2dpZCAiS2V5IEhlbHAiCittc2dzdHIgItmF2LPYp9i52K/YqSDYp9mE2YXZgdin2KrZititIgorCisjOiBQcm9ncmFtcy9jb25maWcuYzoxNzE0IFByb2dyYW1zL2t0Yl9saXN0LmM6NzM3Cittc2dpZCAiS2V5IFRhYmxlIgorbXNnc3RyICLYrNiv2YjZhCDYp9mE2YXZgdin2KrZititIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6OTM1Cittc2dpZCAiS2V5Ym9hcmQgRW5hYmxlZCIKK21zZ3N0ciAi2YTZiNit2Kkg2KfZhNmF2YHYp9iq2YrYrSDZhdmB2LnZhNipIgorCisjOiBQcm9ncmFtcy9sb2cuYzo4OAorbXNnaWQgIktleWJvYXJkIEtleSBFdmVudHMiCittc2dzdHIgItij2K3Yr9in2Ksg2KPYstix2KfYsSDZhNmI2K3YqSDYp9mE2YXZgdin2KrZititIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6MTA0MgorbXNnaWQgIktleWJvYXJkIExFRCBBbGVydHMiCittc2dzdHIgItiq2YbYqNmK2YfYp9iqINil2LbYp9ih2Kkg2YTZhNmI2K3YqSDYp9mE2YXZgdin2KrZititIgorCisjOiBQcm9ncmFtcy9jb25maWcuYzoxMzIyIFByb2dyYW1zL21lbnVfcHJlZnMuYzoxMDI0Cittc2dpZCAiS2V5Ym9hcmQgVGFibGUiCittc2dzdHIgItis2K/ZiNmEINmE2YjYrdipINin2YTZhdmB2KfYqtmK2K0iCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBuYW1lIG9mIE1JREkgbXVzaWNhbCBpbnN0cnVtZW50ICMxMDggKGluIHRoZSBFdGhuaWMgZ3JvdXApLgorIzogUHJvZ3JhbXMvbWlkaS5jOjQxNQorbXNnaWQgIktvdG8iCittc2dzdHIgIktvdG8iCisKKyM6IFByb2dyYW1zL2NvbmZpZy5jOjMxMTIKK21zZ2lkICJMYW5ndWFnZSIKK21zZ3N0ciAi2KfZhNmE2LrYqSIKKworIy4gU3ludGggTGVhZAorIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIG5hbWUgb2YgTUlESSBtdXNpY2FsIGluc3RydW1lbnQgIzgxIChpbiB0aGUgU3ludGggTGVhZCBncm91cCkuCisjOiBQcm9ncmFtcy9taWRpLmM6MzMwCittc2dpZCAiTGVhZCAxIChzcXVhcmUpIgorbXNnc3RyICLYp9mE2KPYq9ixIDEgKNmF2LHYqNi5KSIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIG5hbWUgb2YgTUlESSBtdXNpY2FsIGluc3RydW1lbnQgIzgyIChpbiB0aGUgU3ludGggTGVhZCBncm91cCkuCisjOiBQcm9ncmFtcy9taWRpLmM6MzMzCittc2dpZCAiTGVhZCAyIChzYXd0b290aCkiCittc2dzdHIgItin2YTYo9ir2LEgMiAo2LPZhiDYp9mE2YXZhti02KfYsSkiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBuYW1lIG9mIE1JREkgbXVzaWNhbCBpbnN0cnVtZW50ICM4MyAoaW4gdGhlIFN5bnRoIExlYWQgZ3JvdXApLgorIzogUHJvZ3JhbXMvbWlkaS5jOjMzNgorbXNnaWQgIkxlYWQgMyAoY2FsbGlvcGUpIgorbXNnc3RyICLYp9mE2KPYq9ixIDMgKNmD2KfZhNmK2YjYqCkiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBuYW1lIG9mIE1JREkgbXVzaWNhbCBpbnN0cnVtZW50ICM4NCAoaW4gdGhlIFN5bnRoIExlYWQgZ3JvdXApLgorIzogUHJvZ3JhbXMvbWlkaS5jOjMzOQorbXNnaWQgIkxlYWQgNCAoY2hpZmYpIgorbXNnc3RyICLYp9mE2KPYq9ixIDQgKNi02YrZgSkiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBuYW1lIG9mIE1JREkgbXVzaWNhbCBpbnN0cnVtZW50ICM4NSAoaW4gdGhlIFN5bnRoIExlYWQgZ3JvdXApLgorIzogUHJvZ3JhbXMvbWlkaS5jOjM0MgorbXNnaWQgIkxlYWQgNSAoY2hhcmFuZykiCittc2dzdHIgItin2YTYo9ir2LEgNSAo2KrYtNin2LHYp9mG2KwpIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgbmFtZSBvZiBNSURJIG11c2ljYWwgaW5zdHJ1bWVudCAjODYgKGluIHRoZSBTeW50aCBMZWFkIGdyb3VwKS4KKyM6IFByb2dyYW1zL21pZGkuYzozNDUKK21zZ2lkICJMZWFkIDYgKHZvaWNlKSIKK21zZ3N0ciAi2KfZhNij2KvYsSA2ICjYtdmI2KopIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgbmFtZSBvZiBNSURJIG11c2ljYWwgaW5zdHJ1bWVudCAjODcgKGluIHRoZSBTeW50aCBMZWFkIGdyb3VwKS4KKyM6IFByb2dyYW1zL21pZGkuYzozNDgKK21zZ2lkICJMZWFkIDcgKGZpZnRocykiCittc2dzdHIgItin2YTYo9ir2LEgNyAo2KfZhNij2K7Zhdin2LMpIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgbmFtZSBvZiBNSURJIG11c2ljYWwgaW5zdHJ1bWVudCAjODggKGluIHRoZSBTeW50aCBMZWFkIGdyb3VwKS4KKyM6IFByb2dyYW1zL21pZGkuYzozNTEKK21zZ2lkICJMZWFkIDggKGJhc3MgKyBsZWFkKSIKK21zZ3N0ciAi2KfZhNij2KvYsSA4ICjYqNin2LMgKyDYsdi12KfYtSkiCisKKyM6IFByb2dyYW1zL2xlYXJuLmM6MTAxCittc2dpZCAiTGVhcm4gTW9kZSIKK21zZ3N0ciAi2YbZhdi3INin2YTYqti52YTZhSIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjEzNDEKK21zZ2lkICJMZWZ0IgorbXNnc3RyICLYp9mE2YrYs9in2LEiCisKKyM6IFByb2dyYW1zL2JybHR0eS1rdGIuYzo1MQorbXNnaWQgIkxpc3Qga2V5IG5hbWVzLiIKK21zZ3N0ciAi2YLYp9im2YXYqSDYqNij2LPZhdin2KEg2KfZhNmF2YHYp9iq2YrYrS4iCisKKyM6IFByb2dyYW1zL2JybHR0eS1rdGIuYzo1NworbXNnaWQgIkxpc3Qga2V5IHRhYmxlIGluIGhlbHAgc2NyZWVuIGZvcm1hdC4iCittc2dzdHIgIti52LHYtiDYrNiv2YjZhCDYp9mE2YXZgdin2KrZititINmB2Yog2KrZhtiz2YrZgiDYtNin2LTYqSDYp9mE2KrYudmE2YrZhdin2KouIgorCisjOiBQcm9ncmFtcy9icmx0dHkta3RiLmM6NjMKK21zZ2lkICJMaXN0IGtleSB0YWJsZSBpbiByZVN0cnVjdHVyZWRUZXh0IGZvcm1hdC4iCittc2dzdHIgIti52LHYtiDYrNiv2YjZhCDYp9mE2YXZgdin2KrZititINmB2Yog2KrZhtiz2YrZgiDZhti12Yog2YXYudin2K8g2KjZhtin2KHZhy4iCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzoxNDgzCittc2dpZCAiTG9jYWxlIERpcmVjdG9yeSIKK21zZ3N0ciAi2K/ZhNmK2YQg2KfZhNmE2LrYqSIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjE1MTkKK21zZ2lkICJMb2cgQ2F0ZWdvcmllcyIKK21zZ3N0ciAi2YHYptin2Kog2KfZhNiz2KzZhCIKKworIzogUHJvZ3JhbXMvY29uZmlnLmM6ODkwCittc2dpZCAiTG9nIExldmVsIgorbXNnc3RyICLZhdiz2KrZiNmJINin2YTYs9is2YQiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzoxNTgwCittc2dpZCAiTG9nIE1lc3NhZ2VzIgorbXNnc3RyICLYsdiz2KfYptmEINin2YTYs9is2YQiCisKKyM6IFByb2dyYW1zL2NvbmZpZy5jOjc3MworbXNnaWQgIkxvZyB0aGUgdmVyc2lvbnMgb2YgdGhlIGNvcmUsIEFQSSwgYW5kIGJ1aWx0LWluIGRyaXZlcnMsIGFuZCB0aGVuIGV4aXQuIgorbXNnc3RyICLYqtiz2KzZitmEINin2YTYpdi12K/Yp9ix2KfYqiDYp9mE2KPYs9in2LPZitipINiMINmIIEFQSSDYjCDZiNio2LHYp9mF2Kwg2KfZhNiq2LTYutmK2YQg2KfZhNmF2K/Zhdis2Kkg2Iwg2KvZhSDYpdmG2YfYp9ihINin2YTYqNix2YbYp9mF2KwuIgorCisjOiBQcm9ncmFtcy9jb25maWcuYzo3MzgKK21zZ2lkICJMb2cgdG8gc3RhbmRhcmQgZXJyb3IgcmF0aGVyIHRoYW4gdG8gdGhlIHN5c3RlbSBsb2cuIgorbXNnc3RyICLYqtiz2KzZitmEINin2YTYr9iu2YjZhCDYpdmE2Ykg2KfZhNiu2LfYoyDYp9mE2YLZitin2LPZiiDYqNiv2YTYp9mLINmF2YYg2LPYrNmEINin2YTZhti42KfZhS4iCisKKyM6IFByb2dyYW1zL2NvbmZpZy5jOjc1MgorIywgYy1mb3JtYXQKK21zZ2lkICJMb2dnaW5nIGxldmVsICglcyBvciBvbmUgb2YgeyVzfSkgYW5kL29yIGxvZyBjYXRlZ29yaWVzIHRvIGVuYWJsZSAoYW55IGNvbWJpbmF0aW9uIG9mIHslc30sIGVhY2ggb3B0aW9uYWxseSBwcmVmaXhlZCBieSAlcyB0byBkaXNhYmxlKS4iCittc2dzdHIgItmF2LPYqtmI2Ykg2KfZhNiz2KzZhCAoJXMg2KPZiCDYo9mK2KfZiyDZhdmGIHslc30pINmIL9ij2Ygg2YHYptin2Kog2KfZhNiz2KzZhCDZhNmE2KrZhdmD2YrZhiAo2KPZiiDZhdiy2YrYrCDZhdmGIHslc30sINmD2YQg2YXYs9io2YjZgtipINin2K7YqtmK2KfYsdmK2YvYpyDYqNmAICVzINmE2KrYudi32YrZhCkuIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6OTc4Cittc2dpZCAiTG9uZyBQcmVzcyBUaW1lIgorbXNnc3RyICLZhdiv2Kkg2KfZhNi22LrYtyDYp9mE2YXYt9mI2YQiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzo3NDYgUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjEwMTEKK21zZ2lkICJMb3ciCittc2dzdHIgItmF2YbYrtmB2LYiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzo2NjYKK21zZ2lkICJMb3dlciBMZWZ0IERvdCIKK21zZ3N0ciAi2KfZhNmG2YLYt9ipINin2YTZitiz2LHZiSDYp9mE2LPZgdmE2YrYqSIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjY2NworbXNnaWQgIkxvd2VyIFJpZ2h0IERvdCIKK21zZ3N0ciAi2KfZhNmG2YLYt9ipINin2YTZitmF2YbZiSDYp9mE2LPZgdmE2YrYqSIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjEwNTgKK21zZ2lkICJNSURJIgorbXNnc3RyICLZhdmK2K/ZiiIKKworIzogUHJvZ3JhbXMvY29uZmlnLmM6NzIyCittc2dpZCAiTUlESSAoTXVzaWNhbCBJbnN0cnVtZW50IERpZ2l0YWwgSW50ZXJmYWNlKSBkZXZpY2Ugc3BlY2lmaWVyLiIKK21zZ3N0ciAi2YXYrdiv2K8g2KzZh9in2LIgTUlESSAo2KfZhNmI2KfYrNmH2Kkg2KfZhNix2YLZhdmK2Kkg2YTZhNii2YTYp9iqINin2YTZhdmI2LPZitmC2YrYqSkuIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6MTA4OAorbXNnaWQgIk1JREkgSW5zdHJ1bWVudCIKK21zZ3N0ciAi2KPYr9in2KkgTUlESSIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjEwNzgKK21zZ2lkICJNSURJIFZvbHVtZSIKK21zZ3N0ciAi2K3YrNmFINi12YjYqiBNSURJIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6MTQ0MworbXNnaWQgIk1haWxpbmcgTGlzdCIKK21zZ3N0ciAi2KfZhNmC2KfYptmF2Kkg2KfZhNio2LHZitiv2YrYqSIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIG5hbWUgb2YgTUlESSBtdXNpY2FsIGluc3RydW1lbnQgIzEzIChpbiB0aGUgQ2hyb21hdGljIFBlcmN1c3Npb24gZ3JvdXApLgorIzogUHJvZ3JhbXMvbWlkaS5jOjExNworbXNnaWQgIk1hcmltYmEiCittc2dzdHIgItmF2KfYsdmK2YXYqNinIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6NzQ5IFByb2dyYW1zL21lbnVfcHJlZnMuYzoxMDE0Cittc2dpZCAiTWF4aW11bSIKK21zZ3N0ciAi2KfZhNit2K8g2KfZhNij2YLYtdmJIgorCisjOiBQcm9ncmFtcy9icmx0dHktY3RiLmM6OTAKK21zZ2lkICJNYXhpbXVtIGxlbmd0aCBvZiBhbiBvdXRwdXQgbGluZS4iCittc2dzdHIgItin2YTYrdivINin2YTYo9mC2LXZiSDZhNiz2LfYsSDYp9mE2LnYsdi2LiIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjc0NyBQcm9ncmFtcy9tZW51X3ByZWZzLmM6MTAxMgorbXNnaWQgIk1lZGl1bSIKK21zZ3N0ciAi2YXYqtmI2LPYtyIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIG5hbWUgb2YgTUlESSBtdXNpY2FsIGluc3RydW1lbnQgIzExOCAoaW4gdGhlIFBlcmN1c3NpdmUgZ3JvdXApLgorIzogUHJvZ3JhbXMvbWlkaS5jOjQ0NgorbXNnaWQgIk1lbG9kaWMgVG9tIgorbXNnc3RyICLZhNit2YbZiiDYqtmI2YUiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzo2NzkKK21zZ2lkICJNZW51IE9wdGlvbnMiCittc2dzdHIgItiu2YrYp9ix2KfYqiDYp9mE2YLYp9im2YXYqSIKKworIzogUHJvZ3JhbXMvY29uZmlnLmM6NzMxCittc2dpZCAiTWVzc2FnZSBob2xkIHRpbWVvdXQgKGluIDEwbXMgdW5pdHMpLiIKK21zZ3N0ciAi2YXYr9ipINiq2LnZhNmK2YIg2KfZhNix2LPYp9mE2KkgKNio2YjYrdiv2Kkg2LnZj9i02ZLYsSDYp9mE2KvYp9mG2YrYqSkuIgorCisjOiBQcm9ncmFtcy9jb25maWcuYzo4OTMKK21zZ2lkICJNZXNzYWdlcyBEaXJlY3RvcnkiCittc2dzdHIgItiv2YTZitmEINin2YTYsdiz2KfYptmEIgorCisjOiBQcm9ncmFtcy9jb25maWcuYzo4OTIKK21zZ2lkICJNZXNzYWdlcyBEb21haW4iCittc2dzdHIgItmF2KzYp9mEINin2YTYsdiz2KfYptmEIgorCisjOiBQcm9ncmFtcy9jb25maWcuYzo4OTEKK21zZ2lkICJNZXNzYWdlcyBMb2NhbGUiCittc2dzdHIgItmE2LrYqSDYp9mE2LHYs9in2KbZhCIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjc0NSBQcm9ncmFtcy9tZW51X3ByZWZzLmM6MTAxMAorbXNnaWQgIk1pbmltdW0iCittc2dzdHIgItin2YTYrdivINin2YTYo9iv2YbZiSIKKworIzogUHJvZ3JhbXMvY29uZmlnLmM6NjgyCisjLCBjLWZvcm1hdAorbXNnaWQgIk1pbmltdW0gc2NyZWVuIGNvbnRlbnQgcXVhbGl0eSB0byBhdXRvc3BlYWsgKG9uZSBvZiB7JXN9KS4iCittc2dzdHIgItin2YTYrdivINin2YTYo9iv2YbZiSDZhNis2YjYr9ipINmF2K3YqtmI2Ykg2KfZhNi02KfYtNipINmE2YTZhti32YIg2KfZhNiq2YTZgtin2KbZiiAo2YjYp9it2K8g2YXZhiB7ICVzfSkuIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6MTMxMworbXNnaWQgIk1vbnRoIERheSBZZWFyIgorbXNnc3RyICLYtNmH2LEg2YrZiNmFINiz2YbZhyIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIG5hbWUgb2YgTUlESSBtdXNpY2FsIGluc3RydW1lbnQgIzExIChpbiB0aGUgQ2hyb21hdGljIFBlcmN1c3Npb24gZ3JvdXApLgorIzogUHJvZ3JhbXMvbWlkaS5jOjExMQorbXNnaWQgIk11c2ljIEJveCIKK21zZ3N0ciAi2LXZhtiv2YjZgiDYp9mE2YXZiNiz2YrZgtmJIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6MTA1OAorbXNnaWQgIk11c2ljYWwgSW5zdHJ1bWVudCBEaWdpdGFsIEludGVyZmFjZSIKK21zZ3N0ciAi2KfZhNmI2KfYrNmH2Kkg2KfZhNix2YLZhdmK2Kkg2YTZhNii2YTYp9iqINin2YTZhdmI2LPZitmC2YrYqSIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIG5hbWUgb2YgTUlESSBtdXNpY2FsIGluc3RydW1lbnQgIzYwIChpbiB0aGUgQnJhc3MgZ3JvdXApLgorIzogUHJvZ3JhbXMvbWlkaS5jOjI2NAorbXNnaWQgIk11dGVkIFRydW1wZXQiCittc2dzdHIgItin2YTYqNmI2YIg2KfZhNi12KfZhdiqIgorCisjOiBQcm9ncmFtcy9jb25maWcuYzo2MjMKK21zZ2lkICJOYW1lIG9mIG9yIHBhdGggdG8gYXR0cmlidXRlcyB0YWJsZS4iCittc2dzdHIgItin2LPZhSDYo9mIINmF2LPYp9ixINis2K/ZiNmEINin2YTYs9mF2KfYqi4iCisKKyM6IFByb2dyYW1zL2NvbmZpZy5jOjYxNQorbXNnaWQgIk5hbWUgb2Ygb3IgcGF0aCB0byBjb250cmFjdGlvbiB0YWJsZS4iCittc2dzdHIgItin2LPZhSDYo9mIINmF2LPYp9ixINis2K/ZiNmEINin2YTYp9iu2KrYtdin2LHYp9iqLiIKKworIzogUHJvZ3JhbXMvY29uZmlnLmM6NDc5Cittc2dpZCAiTmFtZSBvZiBvciBwYXRoIHRvIGRlZmF1bHQgcHJlZmVyZW5jZXMgZmlsZS4iCittc2dzdHIgItin2LPZhSDYo9mIINmF2LPYp9ixINmF2YTZgSDYp9mE2KrZgdi22YrZhNin2Kog2KfZhNin2YHYqtix2KfYttmKLiIKKworIzogUHJvZ3JhbXMvY29uZmlnLmM6NjMyCittc2dpZCAiTmFtZSBvZiBvciBwYXRoIHRvIGtleWJvYXJkIHRhYmxlLiIKK21zZ3N0ciAi2KfYs9mFINij2Ygg2YXYs9in2LEg2KzYr9mI2YQg2YTZiNit2Kkg2KfZhNmF2YHYp9iq2YrYrS4iCisKKyM6IFByb2dyYW1zL2NvbmZpZy5jOjY2OAorbXNnaWQgIk5hbWUgb2Ygb3IgcGF0aCB0byBzcGVlY2ggaW5wdXQgb2JqZWN0LiIKK21zZ3N0ciAi2KfYs9mFINij2Ygg2YXYs9in2LEg2YPYp9im2YYg2KXYr9iu2KfZhCDYp9mE2YPZhNin2YUuIgorCisjOiBQcm9ncmFtcy9jb25maWcuYzo2MDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiTmFtZSBvZiBvciBwYXRoIHRvIHRleHQgdGFibGUgKG9yICVzKS4iCittc2dzdHIgItin2LPZhSDYo9mIINmF2LPYp9ixINis2K/ZiNmEINin2YTZhti1ICjYo9mIICVzKS4iCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzo4NDUKK21zZ2lkICJOYXZpZ2F0aW9uIE9wdGlvbnMiCittc2dzdHIgItiu2YrYp9ix2KfYqiDYp9mE2KrZhtmC2YQiCisKKyM6IFByb2dyYW1zL21lbnUuYzo1MjMKK21zZ2lkICJObyIKK21zZ3N0ciAi2YTYpyIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjcyMAorbXNnaWQgIk5vIENhcGl0YWxpemF0aW9uIgorbXNnc3RyICLYr9mI2YYg2KPYrdix2YEg2YPYqNmK2LHYqSIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjg5NyBQcm9ncmFtcy9tZW51X3ByZWZzLmM6MTE5MgorIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjEyMDUgUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjEyMTgKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzoxMzAxIFByb2dyYW1zL21lbnVfcHJlZnMuYzoxMzQwCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6MTM2MAorbXNnaWQgIk5vbmUiCittc2dzdHIgItmE2Kcg2LTZitihIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6MTQ5NQorbXNnaWQgIk5vdGljZSIKK21zZ3N0ciAi2YXZhNin2K3YuNipIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgbmFtZSBvZiBNSURJIG11c2ljYWwgaW5zdHJ1bWVudCAjNjkgKGluIHRoZSBSZWVkIGdyb3VwKS4KKyM6IFByb2dyYW1zL21pZGkuYzoyOTIKK21zZ2lkICJPYm9lIgorbXNnc3RyICLYp9mE2YXYstmF2KfYsSIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIG5hbWUgb2YgTUlESSBtdXNpY2FsIGluc3RydW1lbnQgIzgwIChpbiB0aGUgUGlwZSBncm91cCkuCisjOiBQcm9ncmFtcy9taWRpLmM6MzI2Cittc2dpZCAiT2NhcmluYSIKK21zZ3N0ciAi2KfZhNij2YPYsdmK2YbYpyIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjk2MAorbXNnaWQgIk9mZiIKK21zZ3N0ciAi2KrYudi32YrZhCIKKworIzogUHJvZ3JhbXMvY29uZmlnLmM6MTgwMAorbXNnaWQgIk9sZCBQcmVmZXJlbmNlcyBGaWxlIgorbXNnc3RyICLZhdmE2YEg2KfZhNiq2YHYttmK2YTYp9iqINin2YTZgtiv2YrZhSIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjk3MworbXNnaWQgIk9uIEZpcnN0IFJlbGVhc2UiCittc2dzdHIgItmB2Yog2KfZhNil2LXYr9in2LEg2KfZhNij2YjZhCIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIG5hbWUgb2YgTUlESSBtdXNpY2FsIGluc3RydW1lbnQgIzU2IChpbiB0aGUgRW5zZW1ibGUgZ3JvdXApLgorIzogUHJvZ3JhbXMvbWlkaS5jOjI1MQorbXNnaWQgIk9yY2hlc3RyYSBIaXQiCittc2dzdHIgItmH2YrYqiDYp9mE2KPZiNix2YPYs9iq2LHYpyIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIG5hbWUgb2YgTUlESSBtdXNpY2FsIGluc3RydW1lbnQgIzQ3IChpbiB0aGUgU3RyaW5ncyBncm91cCkuCisjOiBQcm9ncmFtcy9taWRpLmM6MjIzCittc2dpZCAiT3JjaGVzdHJhbCBIYXJwIgorbXNnc3RyICLYp9mE2YLZitir2KfYsdipINin2YTYo9mI2LHZg9iz2KrYsdin2YTZitipIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgbmFtZSBvZiBNSURJIG11c2ljYWwgaW5zdHJ1bWVudCBncm91cCAjMy4KKyM6IFByb2dyYW1zL21pZGkuYzozMQorbXNnaWQgIk9yZ2FuIgorbXNnc3RyICLYp9mE2KPZiNix2LrZhiIKKworIzogUHJvZ3JhbXMvbG9nLmM6NzYKK21zZ2lkICJPdXRwdXQgUGFja2V0cyIKK21zZ3N0ciAi2K3YstmFINin2YTYudix2LYiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBuYW1lIG9mIE1JREkgbXVzaWNhbCBpbnN0cnVtZW50ICMzMCAoaW4gdGhlIEd1aXRhciBncm91cCkuCisjOiBQcm9ncmFtcy9taWRpLmM6MTcwCittc2dpZCAiT3ZlcmRyaXZlbiBHdWl0YXIiCittc2dzdHIgItmC2YrYq9in2LHYqSIKKworIzogRHJpdmVycy9CcmFpbGxlL0lyaXMvYnJhaWxsZS5jOjE1NDUKK21zZ2lkICJQQyBtb2RlIgorbXNnc3RyICLZiNi22Lkg2KfZhNmD2YXYqNmK2YjYqtixIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6MTA1NworbXNnaWQgIlBDTSIKK21zZ3N0ciAiUENNIgorCisjOiBQcm9ncmFtcy9jb25maWcuYzo3MTIKK21zZ2lkICJQQ00gKHNvdW5kY2FyZCBkaWdpdGFsIGF1ZGlvKSBkZXZpY2Ugc3BlY2lmaWVyLiIKK21zZ3N0ciAi2YXYrdiv2K8g2KzZh9in2LIgUENNICjYp9mE2LXZiNiqINin2YTYsdmC2YXZiiDZhNio2LfYp9mC2Kkg2KfZhNi12YjYqikuIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6MTA3MAorbXNnaWQgIlBDTSBWb2x1bWUiCittc2dzdHIgItit2KzZhSDYtdmI2KogUENNIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIFBBU1NQUzIgY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjE0ODcKK21zZ2lkICJQUy8yIChzZXQgMykga2V5Ym9hcmQgc2NhbiBjb2RlIgorbXNnc3RyICJQUyAvIDIgKNin2YTZhdis2YXZiNi52KkgMykg2LHZhdiyINmF2LPYrSDZhNmI2K3YqSDYp9mE2YXZgdin2KrZititIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6MTQzMworbXNnaWQgIlBhY2thZ2UgUmV2aXNpb24iCittc2dzdHIgItmF2LHYp9is2LnYqSDYp9mE2K3YstmF2KkiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzoxNDI4Cittc2dpZCAiUGFja2FnZSBWZXJzaW9uIgorbXNnc3RyICLZhtiz2K7YqSDYp9mE2K3YstmF2KkiCisKKyMuIFN5bnRoIFBhZAorIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIG5hbWUgb2YgTUlESSBtdXNpY2FsIGluc3RydW1lbnQgIzg5IChpbiB0aGUgU3ludGggUGFkIGdyb3VwKS4KKyM6IFByb2dyYW1zL21pZGkuYzozNTUKK21zZ2lkICJQYWQgMSAobmV3IGFnZSkiCittc2dzdHIgItin2YTZhdiz2KfYsSAxICjYp9mE2LnYtdixINin2YTYrNiv2YrYrykiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBuYW1lIG9mIE1JREkgbXVzaWNhbCBpbnN0cnVtZW50ICM5MCAoaW4gdGhlIFN5bnRoIFBhZCBncm91cCkuCisjOiBQcm9ncmFtcy9taWRpLmM6MzU4Cittc2dpZCAiUGFkIDIgKHdhcm0pIgorbXNnc3RyICLYp9mE2YXYs9in2LEgMiAo2K/Yp9mB2KYpIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgbmFtZSBvZiBNSURJIG11c2ljYWwgaW5zdHJ1bWVudCAjOTEgKGluIHRoZSBTeW50aCBQYWQgZ3JvdXApLgorIzogUHJvZ3JhbXMvbWlkaS5jOjM2MQorbXNnaWQgIlBhZCAzIChwb2x5c3ludGgpIgorbXNnc3RyICLYp9mE2YXYs9in2LEgMyAo2KjZiNmE2YrYs9mK2YbYqykiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBuYW1lIG9mIE1JREkgbXVzaWNhbCBpbnN0cnVtZW50ICM5MiAoaW4gdGhlIFN5bnRoIFBhZCBncm91cCkuCisjOiBQcm9ncmFtcy9taWRpLmM6MzY0Cittc2dpZCAiUGFkIDQgKGNob2lyKSIKK21zZ3N0ciAi2KfZhNmF2LPYp9ixIDQgKNis2YjZgtipKSIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIG5hbWUgb2YgTUlESSBtdXNpY2FsIGluc3RydW1lbnQgIzkzIChpbiB0aGUgU3ludGggUGFkIGdyb3VwKS4KKyM6IFByb2dyYW1zL21pZGkuYzozNjcKK21zZ2lkICJQYWQgNSAoYm93ZWQpIgorbXNnc3RyICLYp9mE2YXYs9in2LEgNSAo2YXZhtit2YbZitipKSIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIG5hbWUgb2YgTUlESSBtdXNpY2FsIGluc3RydW1lbnQgIzk0IChpbiB0aGUgU3ludGggUGFkIGdyb3VwKS4KKyM6IFByb2dyYW1zL21pZGkuYzozNzAKK21zZ2lkICJQYWQgNiAobWV0YWxsaWMpIgorbXNnc3RyICLYp9mE2YXYs9in2LEgNiAo2YXYudiv2YbZiikiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBuYW1lIG9mIE1JREkgbXVzaWNhbCBpbnN0cnVtZW50ICM5NSAoaW4gdGhlIFN5bnRoIFBhZCBncm91cCkuCisjOiBQcm9ncmFtcy9taWRpLmM6MzczCittc2dpZCAiUGFkIDcgKGhhbG8pIgorbXNnc3RyICLYp9mE2YXYs9in2LEgNyAo2YXYsdit2KjZi9inKSIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIG5hbWUgb2YgTUlESSBtdXNpY2FsIGluc3RydW1lbnQgIzk2IChpbiB0aGUgU3ludGggUGFkIGdyb3VwKS4KKyM6IFByb2dyYW1zL21pZGkuYzozNzYKK21zZ2lkICJQYWQgOCAoc3dlZXApIgorbXNnc3RyICLYp9mE2YXYs9in2LEgOCAo2YXYs9itKSIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIG5hbWUgb2YgTUlESSBtdXNpY2FsIGluc3RydW1lbnQgIzc2IChpbiB0aGUgUGlwZSBncm91cCkuCisjOiBQcm9ncmFtcy9taWRpLmM6MzE0Cittc2dpZCAiUGFuIEZsdXRlIgorbXNnc3RyICLZhdiy2YXYp9ixINi52YjYp9mFIgorCisjOiBQcm9ncmFtcy9jb25maWcuYzo1NDEKK21zZ2lkICJQYXJhbWV0ZXJzIGZvciB0aGUgYXBwbGljYXRpb24gcHJvZ3JhbW1pbmcgaW50ZXJmYWNlLiIKK21zZ3N0ciAi2YXYudmE2YXYp9iqINmE2YjYp9is2YfYqSDYqNix2YXYrNipINin2YTYqti32KjZitmCLiIKKworIzogUHJvZ3JhbXMvY29uZmlnLmM6NTYzCittc2dpZCAiUGFyYW1ldGVycyBmb3IgdGhlIGJyYWlsbGUgZHJpdmVyLiIKK21zZ3N0ciAi2YXYudmE2YXYp9iqINmE2KjYsdmG2KfZhdisINiq2LTYutmK2YQg2KjYsdin2YrZhC4iCisKKyM6IFByb2dyYW1zL2NvbmZpZy5jOjQzNgorbXNnaWQgIlBhcmFtZXRlcnMgZm9yIHRoZSBwcml2aWxlZ2UgZXN0YWJsaXNobWVudCBzdGFnZS4iCittc2dzdHIgItmF2LnZhNmF2KfYqiDZhdix2K3ZhNipINil2YbYtNin2KEg2KfZhNin2YXYqtmK2KfYsi4iCisKKyM6IFByb2dyYW1zL2NvbmZpZy5jOjcwMworbXNnaWQgIlBhcmFtZXRlcnMgZm9yIHRoZSBzY3JlZW4gZHJpdmVyLiIKK21zZ3N0ciAi2YXYudmE2YXYp9iqINmE2KjYsdmG2KfZhdisINiq2LTYutmK2YQg2KfZhNi02KfYtNipLiIKKworIzogUHJvZ3JhbXMvY29uZmlnLmM6NjYwCittc2dpZCAiUGFyYW1ldGVycyBmb3IgdGhlIHNwZWVjaCBkcml2ZXIuIgorbXNnc3RyICLZhdi52YTZhdin2Kog2YTYqNix2YbYp9mF2Kwg2KrYtNi62YrZhCDYp9mE2YbYt9mCLiIKKworIzogUHJvZ3JhbXMvY29uZmlnLmM6NDcwCittc2dpZCAiUGF0aCB0byBkZWZhdWx0IHNldHRpbmdzIGZpbGUuIgorbXNnc3RyICLYp9mE2YXYs9in2LEg2KXZhNmJINmF2YTZgSDYp9mE2KXYudiv2KfYr9in2Kog2KfZhNin2YHYqtix2KfYttmK2KkuIgorCisjOiBQcm9ncmFtcy9jb25maWcuYzo1MjQKK21zZ2lkICJQYXRoIHRvIGRpcmVjdG9yeSBjb250YWluaW5nIGRyaXZlcnMuIgorbXNnc3RyICLYp9mE2YXYs9in2LEg2KXZhNmJINin2YTZhdis2YTYryDYp9mE2LDZiiDZitit2KrZiNmKINi52YTZiSDZhdmE2YHYp9iqINin2YTYqti52LHZitmBLiIKKworIzogUHJvZ3JhbXMvYnJsdGVzdC5jOjY4IFByb2dyYW1zL2JybHR0eS1hdGIuYzozNiBQcm9ncmFtcy9icmx0dHktY3RiLmM6NTQKKyM6IFByb2dyYW1zL2JybHR0eS1rdGIuYzo3MyBQcm9ncmFtcy9jb25maWcuYzo1OTUKK21zZ2lkICJQYXRoIHRvIGRpcmVjdG9yeSBjb250YWluaW5nIHRhYmxlcy4iCittc2dzdHIgItin2YTZhdiz2KfYsSDYpdmE2Ykg2KfZhNmF2KzZhNivINin2YTYsNmKINmK2K3YqtmI2Yog2LnZhNmJINin2YTYrNiv2KfZiNmELiIKKworIzogUHJvZ3JhbXMvYnJsdHR5LXR0Yi5jOjE1MgorbXNnaWQgIlBhdGggdG8gZGlyZWN0b3J5IGNvbnRhaW5pbmcgdGV4dCB0YWJsZXMuIgorbXNnc3RyICLZhdiz2KfYsSDYp9mE2YXYrNmE2K8g2KfZhNiw2Yog2YrYrdiq2YjZiiDYudmE2Ykg2KzYr9in2YjZhCDZhti12YrYqS4iCisKKyM6IFByb2dyYW1zL2JybHR0eS1rdGIuYzo4MworbXNnaWQgIlBhdGggdG8gZGlyZWN0b3J5IGZvciBsb2FkaW5nIGRyaXZlcnMuIgorbXNnc3RyICLYp9mE2YXYs9in2LEg2KXZhNmJINin2YTZhdis2YTYryDZhNiq2K3ZhdmK2YQg2YXZhNmB2KfYqiDYp9mE2KrYudix2YrZgS4iCisKKyM6IFByb2dyYW1zL2JybHR0eS10cnR4dC5jOjUxCittc2dpZCAiUGF0aCB0byBkaXJlY3RvcnkgZm9yIHRleHQgdGFibGVzLiIKK21zZ3N0ciAi2YXYs9in2LEg2KfZhNmF2KzZhNivINmE2YTYrNiv2KfZiNmEINin2YTZhti12YrYqS4iCisKKyM6IFByb2dyYW1zL2JybHRlc3QuYzo3OCBQcm9ncmFtcy9jb25maWcuYzo1MTQKK21zZ2lkICJQYXRoIHRvIGRpcmVjdG9yeSB3aGljaCBjYW4gYmUgd3JpdHRlbiB0by4iCittc2dzdHIgItin2YTZhdiz2KfYsSDYpdmE2Ykg2KfZhNiv2YTZitmEINin2YTYsNmKINmK2YXZg9mGINin2YTZg9iq2KfYqNipINil2YTZitmHLiIKKworIzogUHJvZ3JhbXMvY29uZmlnLmM6NTA0Cittc2dpZCAiUGF0aCB0byBkaXJlY3Rvcnkgd2hpY2ggY29udGFpbnMgZmlsZXMgdGhhdCBjYW4gYmUgdXBkYXRlZC4iCittc2dzdHIgItin2YTZhdiz2KfYsSDYpdmE2Ykg2KfZhNmF2KzZhNivINin2YTYsNmKINmK2K3YqtmI2Yog2LnZhNmJINin2YTZhdmE2YHYp9iqINin2YTYqtmKINmK2YXZg9mGINiq2K3Yr9mK2KvZh9inLiIKKworIzogUHJvZ3JhbXMvY29uZmlnLmM6NDA0Cittc2dpZCAiUGF0aCB0byBkaXJlY3Rvcnkgd2hpY2ggY29udGFpbnMgbWVzc2FnZSBsb2NhbGl6YXRpb25zLiIKK21zZ3N0ciAi2KfZhNmF2LPYp9ixINil2YTZiSDYp9mE2YXYrNmE2K8g2KfZhNiw2Yog2YrYrdiq2YjZiiDYudmE2Ykg2KrYsdis2YXYqSDYp9mE2LHYs9in2KbZhC4iCisKKyM6IFByb2dyYW1zL2JybHR0eS10cnR4dC5jOjU5Cittc2dpZCAiUGF0aCB0byBpbnB1dCB0ZXh0IHRhYmxlLiIKK21zZ3N0ciAi2YXYs9in2LEg2KzYr9in2YjZhCDYpdiv2K7Yp9mEINin2YTZhti12YjYtS4iCisKKyM6IFByb2dyYW1zL2NvbmZpZy5jOjc2MQorbXNnaWQgIlBhdGggdG8gbG9nIGZpbGUuIgorbXNnc3RyICLZhdiz2KfYsSDZhdmE2YEg2KfZhNiz2KzZhC4iCisKKyM6IFByb2dyYW1zL2JybHR0eS10cnR4dC5jOjY3Cittc2dpZCAiUGF0aCB0byBvdXRwdXQgdGV4dCB0YWJsZS4iCittc2dzdHIgItmF2LPYp9ixINis2K/ZiNmEINi52LHYtiDYp9mE2YbYtS4iCisKKyM6IFByb2dyYW1zL2NvbmZpZy5jOjQ2MAorbXNnaWQgIlBhdGggdG8gcHJvY2VzcyBpZGVudGlmaWVyIGZpbGUuIgorbXNnc3RyICLZhdiz2KfYsSDZhdmE2YEg2YXYudin2YTYrNipINin2YTZhdi52LHZgS4iCisKKyM6IFByb2dyYW1zL2NvbmZpZy5jOjQ5NAorbXNnaWQgIlBhdHRlcm5zIHRoYXQgbWF0Y2ggY29tbWFuZCBwcm9tcHRzLiIKK21zZ3N0ciAi2KfZhNij2YbZhdin2Lcg2KfZhNiq2Yog2KrYt9in2KjZgiDZhdmI2KzZh9in2Kog2KfZhNij2YjYp9mF2LEuIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgbmFtZSBvZiBNSURJIG11c2ljYWwgaW5zdHJ1bWVudCBncm91cCAjMTUuCisjOiBQcm9ncmFtcy9taWRpLmM6NzEKK21zZ2lkICJQZXJjdXNzaXZlIEluc3RydW1lbnRzIgorbXNnc3RyICLYp9mE2KLZhNin2Kog2KfZhNil2YrZgtin2LnZitipIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgbmFtZSBvZiBNSURJIG11c2ljYWwgaW5zdHJ1bWVudCAjMTggKGluIHRoZSBPcmdhbiBncm91cCkuCisjOiBQcm9ncmFtcy9taWRpLmM6MTMzCittc2dpZCAiUGVyY3Vzc2l2ZSBPcmdhbiIKK21zZ3N0ciAi2KzZh9in2LIg2YLYsdi5IgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgbmFtZSBvZiBNSURJIG11c2ljYWwgaW5zdHJ1bWVudCBncm91cCAjMS4KKyM6IFByb2dyYW1zL21pZGkuYzoyNQorbXNnaWQgIlBpYW5vIgorbXNnc3RyICLYqNmK2KfZhtmIIgorCisjLiBQaXBlCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgbmFtZSBvZiBNSURJIG11c2ljYWwgaW5zdHJ1bWVudCAjNzMgKGluIHRoZSBQaXBlIGdyb3VwKS4KKyM6IFByb2dyYW1zL21pZGkuYzozMDUKK21zZ2lkICJQaWNjb2xvIgorbXNnc3RyICLYp9mE2KjZitiq2LTZiNmE2YgiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBuYW1lIG9mIE1JREkgbXVzaWNhbCBpbnN0cnVtZW50IGdyb3VwICMxMC4KKyM6IFByb2dyYW1zL21pZGkuYzo1MgorbXNnaWQgIlBpcGUiCittc2dzdHIgItin2YTZhdiy2YXYp9ixIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgbmFtZSBvZiBNSURJIG11c2ljYWwgaW5zdHJ1bWVudCAjNDYgKGluIHRoZSBTdHJpbmdzIGdyb3VwKS4KKyM6IFByb2dyYW1zL21pZGkuYzoyMjAKK21zZ2lkICJQaXp6aWNhdG8gU3RyaW5ncyIKK21zZ3N0ciAi2LPZhNin2LPZhCBQaXp6aWNhdG8iCisKKyM6IERyaXZlcnMvQnJhaWxsZS9CYXVtL2JyYWlsbGUuYzoxMTU4Cittc2dpZCAiUG93ZXJkb3duIgorbXNnc3RyICLYpdi62YTYp9mCINin2YTYt9in2YLYqSIKKworIzogUHJvZ3JhbXMvY29uZmlnLmM6Mjk1NiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6MTQ2MworbXNnaWQgIlByZWZlcmVuY2VzIEZpbGUiCittc2dzdHIgItmF2YTZgSDYp9mE2KrZgdi22YrZhNin2KoiCisKKyM6IFByb2dyYW1zL3Njcl9tZW51LmM6MjcxCittc2dpZCAiUHJlZmVyZW5jZXMgTWVudSIKK21zZ3N0ciAi2YLYp9im2YXYqSDYp9mE2KrZgdi22YrZhNin2KoiCisKKyM6IEhlYWRlcnMvb3B0aW9ucy5oOjc1Cittc2dpZCAiUHJpbnQgYSB1c2FnZSBzdW1tYXJ5IChhbGwgb3B0aW9ucyksIGFuZCB0aGVuIGV4aXQuIgorbXNnc3RyICLYt9io2KfYudipINmF2YTYrti1INin2YTYp9iz2KrYrtiv2KfZhSAo2YPZhCDYp9mE2K7Zitin2LHYp9iqKdiMINir2YUg2KfZhNiu2LHZiNisLiIKKworIzogSGVhZGVycy9vcHRpb25zLmg6NzAKK21zZ2lkICJQcmludCBhIHVzYWdlIHN1bW1hcnkgKGNvbW1vbmx5IHVzZWQgb3B0aW9ucyBvbmx5KSwgYW5kIHRoZW4gZXhpdC4iCittc2dzdHIgIti32KjYp9i52Kkg2YXZhNiu2LUg2KfZhNin2LPYqtiu2K/Yp9mFICjYp9mE2K7Zitin2LHYp9iqINi02KfYpti52Kkg2KfZhNin2LPYqtiu2K/Yp9mFINmB2YLYtynYjCDYq9mFINin2YTYrtix2YjYrC4iCisKKyM6IFByb2dyYW1zL2NvbmZpZy5jOjg0NAorbXNnaWQgIlByaXZpbGVnZSBQYXJhbWV0ZXIiCittc2dzdHIgItmF2LnZitin2LEg2KfZhNin2YXYqtmK2KfYsiIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjE0MTQKK21zZ2lkICJQcm9maWxlcyIKK21zZ3N0ciAi2KfZhNij2YjYttin2LkiCisKKyM6IFByb2dyYW1zL2NvbmZpZy5jOjY0MAorbXNnaWQgIlByb3BlcnRpZXMgb2YgZWxpZ2libGUga2V5Ym9hcmRzLiIKK21zZ3N0ciAi2K7Ytdin2KbYtSDZhNmI2K3Yp9iqINin2YTZhdmB2KfYqtmK2K0g2KfZhNmF2KTZh9mE2KkuIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6OTUwCittc2dpZCAiUXVpY2sgU3BhY2UiCittc2dzdHIgItmF2LPYp9it2Kkg2LPYsdmK2LnYqSIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjEyMDkKK21zZ2lkICJSYWlzZSBQaXRjaCIKK21zZ3N0ciAi2LHZgdi5INit2K/YqSDYp9mE2YbYutmF2KkiCisKKyM6IFByb2dyYW1zL2NvbmZpZy5jOjM5NQorbXNnaWQgIlJlY29nbml6ZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMuIgorbXNnc3RyICLYp9mE2KrYudix2YEg2LnZhNmJINmF2KrYutmK2LHYp9iqINin2YTYqNmK2KbYqS4iCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBuYW1lIG9mIE1JREkgbXVzaWNhbCBpbnN0cnVtZW50ICM3NSAoaW4gdGhlIFBpcGUgZ3JvdXApLgorIzogUHJvZ3JhbXMvbWlkaS5jOjMxMQorbXNnaWQgIlJlY29yZGVyIgorbXNnc3RyICLYp9mE2YXYs9is2YQiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBuYW1lIG9mIE1JREkgbXVzaWNhbCBpbnN0cnVtZW50IGdyb3VwICM5LgorIzogUHJvZ3JhbXMvbWlkaS5jOjQ5Cittc2dpZCAiUmVlZCIKK21zZ3N0ciAi2KfZhNmC2LHYp9ih2KkiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBuYW1lIG9mIE1JREkgbXVzaWNhbCBpbnN0cnVtZW50ICMyMSAoaW4gdGhlIE9yZ2FuIGdyb3VwKS4KKyM6IFByb2dyYW1zL21pZGkuYzoxNDIKK21zZ2lkICJSZWVkIE9yZ2FuIgorbXNnc3RyICLYo9mI2LHYutin2YYg2LHZitivIgorCisjOiBQcm9ncmFtcy9icmx0dHktY3RiLmM6ODIKK21zZ2lkICJSZWZvcm1hdCBpbnB1dC4iCittc2dzdHIgItil2LnYp9iv2Kkg2KrZhtiz2YrZgiDYp9mE2KXYr9iu2KfZhC4iCisKKyM6IFByb2dyYW1zL2NvbmZpZy5jOjU4NQorbXNnaWQgIlJlbGVhc2UgYnJhaWxsZSBkZXZpY2Ugd2hlbiBzY3JlZW4gb3Igd2luZG93IGlzIHVucmVhZGFibGUuIgorbXNnc3RyICLYrdix2LEg2KzZh9in2LIg2KjYsdin2YrZhCDYudmG2K/ZhdinINiq2YPZiNmGINin2YTYtNin2LTYqSDYo9mIINin2YTZhtin2YHYsNipINi62YrYsSDZgtin2KjZhNipINmE2YTZgtix2KfYodipLiIKKworIzogUHJvZ3JhbXMveGJybGFwaS5jOjEwNgorbXNnaWQgIlJlbWFpbiBhIGZvcmVncm91bmQgcHJvY2VzcyIKK21zZ3N0ciAi2KfZhNio2YLYp9ihINmD2LnZhdmE2YrYqSDZgdmKINin2YTZiNin2KzZh9ipIgorCisjOiBQcm9ncmFtcy9jb25maWcuYzo0MTEKK21zZ2lkICJSZW1haW4gYSBmb3JlZ3JvdW5kIHByb2Nlc3MuIgorbXNnc3RyICLYp9mE2KjZgtin2KEg2YPYudmF2YTZitipINmB2Yog2KfZhNmI2KfYrNmH2KkuIgorCisjOiBQcm9ncmFtcy9icmx0dHktdHJ0eHQuYzo3MworbXNnaWQgIlJlbW92ZSBkb3RzIHNldmVuIGFuZCBlaWdodC4iCittc2dzdHIgItil2LLYp9mE2Kkg2KfZhNmG2YLYt9iq2YrZhiDYs9io2LnYqSDZiNir2YXYp9mG2YrYqS4iCisKKyM6IFByb2dyYW1zL2NvbmZpZy5jOjQyNgorIywgYy1mb3JtYXQKK21zZ2lkICJSZW1vdmUgdGhlICVzIHNlcnZpY2UsIGFuZCB0aGVuIGV4aXQuIgorbXNnc3RyICLZgtmFINio2KXYstin2YTYqSDYrtiv2YXYqSAlc9iMINir2YUg2YLZhSDYqNin2YTYpdmG2YfYp9ihLiIKKworIzogUHJvZ3JhbXMvYnJsdHR5LWt0Yi5jOjQ1Cittc2dpZCAiUmVwb3J0IHByb2JsZW1zIHdpdGggdGhlIGtleSB0YWJsZS4iCittc2dzdHIgItin2YTYpdio2YTYp9i6INi52YYg2YXYtNin2YPZhCDYp9mE2KzYr9mI2YQg2KfZhNix2KbZitiz2YouIgorCisjOiBQcm9ncmFtcy9icmx0dHktdHRiLmM6MTg2Cittc2dpZCAiUmVwb3J0IHRoZSBjaGFyYWN0ZXJzIHdpdGhpbiB0aGUgY3VycmVudCBzY3JlZW4gZm9udCB0aGF0IGFyZW4ndCBkZWZpbmVkIHdpdGhpbiB0aGUgdGV4dCB0YWJsZS4iCittc2dzdHIgItin2YTYpdio2YTYp9i6INi52YYg2KfZhNij2K3YsdmBINin2YTZhdmI2KzZiNiv2Kkg2YHZiiDYrti3INin2YTYtNin2LTYqSDYp9mE2K3Yp9mE2Yog2YjYp9mE2KrZiiDZhNmFINmK2KrZhSDYqtit2K/Zitiv2YfYpyDYr9in2K7ZhCDYrNiv2YjZhCDYp9mE2YbYtS4iCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzo4NjYKK21zZ2lkICJSZXN0IG9mIExpbmUiCittc2dzdHIgItio2YLZitipINin2YTYs9i32LEiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzoxNTYyCittc2dpZCAiUmVzdGFydCBCcmFpbGxlIERyaXZlciIKK21zZ3N0ciAi2KXYudin2K/YqSDYqti02LrZitmEINmF2YTZgSDYqti52LHZitmBINio2LHYp9mK2YQiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzoxNTc0Cittc2dpZCAiUmVzdGFydCBTY3JlZW4gRHJpdmVyIgorbXNnc3RyICLYpdi52KfYr9ipINiq2LTYutmK2YQg2YXZhNmBINiq2LnYsdmK2YEg2KfZhNi02KfYtNipIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6MTU2OAorbXNnaWQgIlJlc3RhcnQgU3BlZWNoIERyaXZlciIKK21zZ3N0ciAi2KXYudin2K/YqSDYqti02LrZitmEINmF2YTZgSDYqti52LHZitmBINin2YTZhti32YIiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBuYW1lIG9mIE1JREkgbXVzaWNhbCBpbnN0cnVtZW50ICMxMjAgKGluIHRoZSBQZXJjdXNzaXZlIGdyb3VwKS4KKyM6IFByb2dyYW1zL21pZGkuYzo0NTIKK21zZ2lkICJSZXZlcnNlIEN5bWJhbCIKK21zZ3N0ciAi2LnZg9izINin2YTYsdmF2LIiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzoxMzQyCittc2dpZCAiUmlnaHQiCittc2dzdHIgItmK2YXZitmGIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgbmFtZSBvZiBNSURJIG11c2ljYWwgaW5zdHJ1bWVudCAjMTkgKGluIHRoZSBPcmdhbiBncm91cCkuCisjOiBQcm9ncmFtcy9taWRpLmM6MTM2Cittc2dpZCAiUm9jayBPcmdhbiIKK21zZ3N0ciAi2KPZiNix2LrYp9mGINi12K7YsdmKIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6Njc0Cittc2dpZCAiU2F2ZSBvbiBFeGl0IgorbXNnc3RyICLYp9mE2K3Zgdi4INi52YbYryDYp9mE2K7YsdmI2KwiCisKKyMuICJjYXAiIGhlcmUsIHVzZWQgZHVyaW5nIHNwZWVjaCBvdXRwdXQsIGlzIHNob3J0IGZvciAiY2FwaXRhbCIuCisjLiBJdCBpcyBzcG9rZW4ganVzdCBiZWZvcmUgYW4gdXBwZXJjYXNlIGxldHRlciwgZS5nLiAiY2FwIEEiLgorIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjEyMDgKK21zZ2lkICJTYXkgQ2FwIgorbXNnc3RyICLZhti32YIgQ2FwINmE2YTYo9it2LHZgSDYp9mE2YPYqNmK2LHYqSIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjEyMzIKK21zZ2lkICJTYXkgTGluZSBNb2RlIgorbXNnc3RyICLZhti32YIg2YbZhdi3INin2YTYs9i32LEiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzoxMjE5Cittc2dpZCAiU2F5IFNwYWNlIgorbXNnc3RyICLZhti32YIg2KfZhNmF2LPYp9mB2KkiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzo3ODAKK21zZ2lkICJTY3JlZW4gQ3Vyc29yIEJsaW5rIFBlcmlvZCIKK21zZ3N0ciAi2YHYqtix2Kkg2YjZhdmK2LYg2YXYpNi02LEg2KfZhNi02KfYtNipIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6Nzg4Cittc2dpZCAiU2NyZWVuIEN1cnNvciBQZXJjZW50IFZpc2libGUiCittc2dzdHIgItmG2LPYqNipINix2KTZitipINmF2KTYtNixINin2YTYtNin2LTYqSIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjc2OAorbXNnaWQgIlNjcmVlbiBDdXJzb3IgU3R5bGUiCittc2dzdHIgItmG2YXYtyDZhdik2LTYsSDYp9mE2LTYp9i02KkiCisKKyM6IFByb2dyYW1zL2NvbmZpZy5jOjI0NTMKK21zZ2lkICJTY3JlZW4gRHJpdmVyIgorbXNnc3RyICLZhdmE2YEg2KrYudix2YrZgSDYp9mE2LTYp9i02KkiCisKKyM6IFByb2dyYW1zL2xvZy5jOjE2MAorbXNnaWQgIlNjcmVlbiBEcml2ZXIgRXZlbnRzIgorbXNnc3RyICLYo9it2K/Yp9irINmF2YTZgSDYqti52LHZitmBINin2YTYtNin2LTYqSIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjU1MAorbXNnaWQgIlNjcmVlbiBOdW1iZXIiCittc2dzdHIgItix2YLZhSDYp9mE2LTYp9i02KkiCisKKyM6IFByb2dyYW1zL2NvbmZpZy5jOjI0NTkKK21zZ2lkICJTY3JlZW4gUGFyYW1ldGVyIgorbXNnc3RyICLYpdi52K/Yp9ivINin2YTYtNin2LTYqSIKKworIzogUHJvZ3JhbXMvY29uZmlnLmM6NjkzCisjLCBjLWZvcm1hdAorbXNnaWQgIlNjcmVlbiBkcml2ZXIgY29kZSAoJXMsICVzLCBvciBvbmUgb2YgeyVzfSkuIgorbXNnc3RyICLZg9mI2K8g2KjYsdmG2KfZhdisINiq2LTYutmK2YQg2KfZhNi02KfYtNipICglcywgJXMsINij2Ygg2KPZitin2Ysg2YXZhiB7JXN9KS4iCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzo4OTEKK21zZ2lkICJTY3JvbGwtYXdhcmUgQ3Vyc29yIE5hdmlnYXRpb24iCittc2dzdHIgItin2YTYqtmG2YLZhCDZgdmKINin2YTZhdik2LTYsSDZhdi5INin2YTYqtmF2LHZitixIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgbmFtZSBvZiBNSURJIG11c2ljYWwgaW5zdHJ1bWVudCAjMTIzIChpbiB0aGUgU291bmQgRWZmZWN0cyBncm91cCkuCisjOiBQcm9ncmFtcy9taWRpLmM6NDYyCittc2dpZCAiU2Vhc2hvcmUiCittc2dzdHIgIti02KfYt9imINin2YTYqNit2LEiCisKKyM6IFByb2dyYW1zL2xvZy5jOjEzMAorbXNnaWQgIlNlcmlhbCBJL08iCittc2dzdHIgItin2YTZhdiz2YTYs9mEIEkgLyBPIgorCisjOiBQcm9ncmFtcy9sb2cuYzoxMjQKK21zZ2lkICJTZXJ2ZXIgRXZlbnRzIgorbXNnc3RyICLYo9it2K/Yp9irINin2YTYrtin2K/ZhSIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIG5hbWUgb2YgTUlESSBtdXNpY2FsIGluc3RydW1lbnQgIzc4IChpbiB0aGUgUGlwZSBncm91cCkuCisjOiBQcm9ncmFtcy9taWRpLmM6MzIwCittc2dpZCAiU2hha3VoYWNoaSIKK21zZ3N0ciAi2LTYp9mD2YjZh9in2KrYtNmKIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgbmFtZSBvZiBNSURJIG11c2ljYWwgaW5zdHJ1bWVudCAjMTA3IChpbiB0aGUgRXRobmljIGdyb3VwKS4KKyM6IFByb2dyYW1zL21pZGkuYzo0MTIKK21zZ2lkICJTaGFtaXNlbiIKK21zZ3N0ciAi2LTYp9mF2YrYs9mK2YYiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBuYW1lIG9mIE1JREkgbXVzaWNhbCBpbnN0cnVtZW50ICMxMTIgKGluIHRoZSBFdGhuaWMgZ3JvdXApLgorIzogUHJvZ3JhbXMvbWlkaS5jOjQyNworbXNnaWQgIlNoYW5haSIKK21zZ3N0ciAi2LTYp9mG2KfZiiIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjY4NworbXNnaWQgIlNob3cgQWR2YW5jZWQgU3VibWVudXMiCittc2dzdHIgItil2LjZh9in2LEg2KfZhNmC2YjYp9im2YUg2KfZhNmB2LHYudmK2Kkg2KfZhNmF2KrZgtiv2YXYqSIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjY5MgorbXNnaWQgIlNob3cgQWxsIEl0ZW1zIgorbXNnc3RyICLYpdi42YfYp9ixINmD2KfZgdipINin2YTYudmG2KfYtdixIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6Nzk2Cittc2dpZCAiU2hvdyBBdHRyaWJ1dGVzIgorbXNnc3RyICLYpdi42YfYp9ixINin2YTYs9mF2KfYqiIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjc2MworbXNnaWQgIlNob3cgU2NyZWVuIEN1cnNvciIKK21zZ3N0ciAi2KXYuNmH2KfYsSDZhdik2LTYsSDYp9mE2LTYp9i02KkiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzoxMjk1Cittc2dpZCAiU2hvdyBTZWNvbmRzIgorbXNnc3RyICLYpdi42YfYp9ixINin2YTYq9mI2KfZhtmKIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6MTIzNworbXNnaWQgIlNob3cgU3BlZWNoIEN1cnNvciIKK21zZ3N0ciAi2KXYuNmH2KfYsSDZhdik2LTYsSDYp9mE2YbYt9mCIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6NjgyCittc2dpZCAiU2hvdyBTdWJtZW51IFNpemVzIgorbXNnc3RyICLYpdi42YfYp9ixINij2K3YrNin2YUg2KfZhNmC2YjYp9im2YUg2KfZhNmB2LHYudmK2KkiCisKKyMuIEV0aG5pYyBJbnN0cnVtZW50cworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIG5hbWUgb2YgTUlESSBtdXNpY2FsIGluc3RydW1lbnQgIzEwNSAoaW4gdGhlIEV0aG5pYyBncm91cCkuCisjOiBQcm9ncmFtcy9taWRpLmM6NDA2Cittc2dpZCAiU2l0YXIiCittc2dzdHIgItiz2YrYqtin2LEiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzo4NTgKK21zZ2lkICJTa2lwIEJsYW5rIEJyYWlsbGUgV2luZG93cyIKK21zZ3N0ciAi2KrYrti32Yog2YbZiNin2YHYsCDYqNix2KfZitmEINin2YTZgdin2LHYutipIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6ODUyCittc2dpZCAiU2tpcCBJZGVudGljYWwgTGluZXMiCittc2dzdHIgItiq2K7Yt9mKINin2YTYo9iz2LfYsSDYp9mE2YXYqti32KfYqNmC2KkiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzo4NjkKK21zZ2lkICJTa2lwIFdoaWNoIEJsYW5rIEJyYWlsbGUgV2luZG93cyIKK21zZ3N0ciAi2KrYrti32Yog2KPZiiDZhtmI2KfZgdiwINio2LHYp9mK2YQg2YHYp9ix2LrYqSIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIG5hbWUgb2YgTUlESSBtdXNpY2FsIGluc3RydW1lbnQgIzM3IChpbiB0aGUgQmFzcyBncm91cCkuCisjOiBQcm9ncmFtcy9taWRpLmM6MTkyCittc2dpZCAiU2xhcCBCYXNzIDEiCittc2dzdHIgIti12YHYudipINio2KfYsyAxIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgbmFtZSBvZiBNSURJIG11c2ljYWwgaW5zdHJ1bWVudCAjMzggKGluIHRoZSBCYXNzIGdyb3VwKS4KKyM6IFByb2dyYW1zL21pZGkuYzoxOTUKK21zZ2lkICJTbGFwIEJhc3MgMiIKK21zZ3N0ciAi2LXZgdi52Kkg2KjYp9izIDIiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzoxMzI1Cittc2dpZCAiU2xhc2giCittc2dzdHIgIti02LHYt9ipINmF2KfYptmE2KkiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzo4NzQKK21zZ2lkICJTbGlkaW5nIEJyYWlsbGUgV2luZG93IgorbXNnc3RyICLZhtin2YHYsNipINio2LHYp9mK2YQg2YXZhtiy2YTZgtipIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6MTE5MworbXNnaWQgIlNvbWUiCittc2dzdHIgItio2LnYtiIKKworIy4gUmVlZAorIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIG5hbWUgb2YgTUlESSBtdXNpY2FsIGluc3RydW1lbnQgIzY1IChpbiB0aGUgUmVlZCBncm91cCkuCisjOiBQcm9ncmFtcy9taWRpLmM6MjgwCittc2dpZCAiU29wcmFubyBTYXhvcGhvbmUiCittc2dzdHIgItiz2YjYqNix2KfZhtmIINiz2KfZg9iz2YHZiNmGIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgbmFtZSBvZiBNSURJIG11c2ljYWwgaW5zdHJ1bWVudCBncm91cCAjMTYuCisjOiBQcm9ncmFtcy9taWRpLmM6NzQKK21zZ2lkICJTb3VuZCBFZmZlY3RzIgorbXNnc3RyICLZhdik2KvYsdin2Kog2LXZiNiq2YrYqSIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjU2MSBQcm9ncmFtcy9tZW51X3ByZWZzLmM6MTM2MQorbXNnaWQgIlNwYWNlIgorbXNnc3RyICLZhdiz2KfZgdipIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6MTE1NAorbXNnaWQgIlNwZWFrIENvbXBsZXRlZCBXb3JkcyIKK21zZ3N0ciAi2YbYt9mCINin2YTZg9mE2YXYp9iqINin2YTZhdmD2KrZhdmE2KkiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzoxMTQyCittc2dpZCAiU3BlYWsgRGVsZXRlZCBDaGFyYWN0ZXJzIgorbXNnc3RyICLZhti32YIg2KfZhNij2K3YsdmBINin2YTZhdit2LDZiNmB2KkiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzoxMTM2Cittc2dpZCAiU3BlYWsgSW5zZXJ0ZWQgQ2hhcmFjdGVycyIKK21zZ3N0ciAi2YbYt9mCINin2YTYo9it2LHZgSDYp9mE2YXYr9ix2KzYqSIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjExNjAKK21zZ2lkICJTcGVhayBMaW5lIEluZGVudCIKK21zZ3N0ciAi2YbYt9mCINmF2K3Yp9iw2KfYqSDYp9mE2LPYt9ixIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6MTE0OAorbXNnaWQgIlNwZWFrIFJlcGxhY2VkIENoYXJhY3RlcnMiCittc2dzdHIgItmG2LfZgiDYp9mE2KPYrdix2YEg2KfZhNmF2LPYqtio2K/ZhNipIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6MTEzMAorbXNnaWQgIlNwZWFrIFNlbGVjdGVkIENoYXJhY3RlciIKK21zZ3N0ciAi2YbYt9mCINin2YTYrdix2YEg2KfZhNmF2K3Yr9ivIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6MTEyNAorbXNnaWQgIlNwZWFrIFNlbGVjdGVkIExpbmUiCittc2dzdHIgItmG2LfZgiDYp9mE2LPYt9ixINin2YTZhdit2K/YryIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjEyNTQKK21zZ2lkICJTcGVlY2ggQ3Vyc29yIEJsaW5rIFBlcmlvZCIKK21zZ3N0ciAi2YHYqtix2Kkg2YjZhdmK2LYg2YXYpNi02LEg2KfZhNmG2LfZgiIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjEyNjIKK21zZ2lkICJTcGVlY2ggQ3Vyc29yIFBlcmNlbnQgVmlzaWJsZSIKK21zZ3N0ciAi2YbYs9io2Kkg2LHYpNmK2Kkg2YXYpNi02LEg2KfZhNmG2LfZgiIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjEyNDIKK21zZ2lkICJTcGVlY2ggQ3Vyc29yIFN0eWxlIgorbXNnc3RyICLZhtmF2Lcg2YXYpNi02LEg2KfZhNmD2YTYp9mFIgorCisjOiBQcm9ncmFtcy9jb25maWcuYzoyMjI4Cittc2dpZCAiU3BlZWNoIERyaXZlciIKK21zZ3N0ciAi2YXZhNmBINiq2LnYsdmK2YEg2KfZhNmG2LfZgiIKKworIzogUHJvZ3JhbXMvbG9nLmM6MTU0Cittc2dpZCAiU3BlZWNoIERyaXZlciBFdmVudHMiCittc2dzdHIgItij2K3Yr9in2Ksg2YXZhNmBINiq2LnYsdmK2YEg2KfZhNmG2LfZgiIKKworIzogUHJvZ3JhbXMvbG9nLmM6MTEyCittc2dpZCAiU3BlZWNoIEV2ZW50cyIKK21zZ3N0ciAi2KPYrdiv2KfYqyDYp9mE2YbYt9mCIgorCisjLiBDcmVhdGUgdGhlIGZpbGUgc3lzdGVtIG9iamVjdCBmb3Igc3BlZWNoIGlucHV0LgorIzogUHJvZ3JhbXMvY29uZmlnLmM6MzAyMworbXNnaWQgIlNwZWVjaCBJbnB1dCIKK21zZ3N0ciAi2KXYr9iu2KfZhCDYp9mE2YbYt9mCIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6MTE2NworbXNnaWQgIlNwZWVjaCBPcHRpb25zIgorbXNnc3RyICLYrtmK2KfYsdin2Kog2KfZhNmG2LfZgiIKKworIzogUHJvZ3JhbXMvY29uZmlnLmM6MjIzMQorbXNnaWQgIlNwZWVjaCBQYXJhbWV0ZXIiCittc2dzdHIgItil2LnYr9in2K8g2KfZhNmG2LfZgiIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjExODQKK21zZ2lkICJTcGVlY2ggUGl0Y2giCittc2dzdHIgItit2K/YqSDYp9mE2YPZhNin2YUiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzoxMTk3Cittc2dpZCAiU3BlZWNoIFB1bmN0dWF0aW9uIgorbXNnc3RyICLZhti32YIg2LnZhNin2YXYp9iqINin2YTYqtix2YLZitmFIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6MTE3NworbXNnaWQgIlNwZWVjaCBSYXRlIgorbXNnc3RyICLYs9ix2LnYqSDYp9mE2YPZhNin2YUiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzoxMjEyCittc2dpZCAiU3BlZWNoIFVwcGVyY2FzZSBJbmRpY2F0b3IiCittc2dzdHIgItin2YTYpdi52YTYp9mGINi52YYg2KfZhNij2K3YsdmBINin2YTZg9io2YrYsdipIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6MTE3MAorbXNnaWQgIlNwZWVjaCBWb2x1bWUiCittc2dzdHIgItmF2LPYqtmI2Ykg2LXZiNiqINin2YTZhti32YIiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzoxMjIyCittc2dpZCAiU3BlZWNoIFdoaXRlc3BhY2UgSW5kaWNhdG9yIgorbXNnc3RyICLYp9mE2KXYudmE2KfZhiDYudmGINin2YTZhdiz2KfZgdin2Kog2KfZhNio2YrYttin2KEiCisKKyM6IFByb2dyYW1zL2NvbmZpZy5jOjY1MAorIywgYy1mb3JtYXQKK21zZ2lkICJTcGVlY2ggZHJpdmVyIGNvZGUgKCVzLCAlcywgb3Igb25lIG9mIHslc30pLiIKK21zZ3N0ciAi2YPZiNivINmF2YTZgSDYqti52LHZitmBINin2YTZhti32YIgKCVzLCAlcywg2KPZiCDYo9mK2KfZiyDZhdmGIHslc30pLiIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjE1MDkKK21zZ2lkICJTdGFuZGFyZCBFcnJvciBMb2cgTGV2ZWwiCittc2dzdHIgItmF2LPYqtmI2Ykg2LPYrNmEINin2YTYrti32KMg2KfZhNmC2YrYp9iz2YoiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzo5MjYKK21zZ2lkICJTdGFydCBTZWxlY3Rpb24gd2l0aCBSb3V0aW5nIEtleSIKK21zZ3N0ciAi2KjYr9ihINin2YTYqtit2K/ZitivINio2KfYs9iq2K7Yr9in2YUg2LLYsSDYp9mE2YXYpNi02LEiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzo1NTEKK21zZ2lkICJTdGF0ZSBEb3RzIgorbXNnc3RyICLZhtmC2KfYtyDYp9mE2K3Yp9mE2KkiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzo1NTIKK21zZ2lkICJTdGF0ZSBMZXR0ZXIiCittc2dzdHIgItit2LHZgSDYp9mE2K3Yp9mE2KkiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzoxMzM2Cittc2dpZCAiU3RhdHVzIENlbGxzIgorbXNnc3RyICLYrtmE2KfZitinINin2YTYrdin2YTYqSIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjEzNTIKK21zZ2lkICJTdGF0dXMgQ291bnQiCittc2dzdHIgIti52K/YryDYp9mE2K3Yp9mE2KkiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzo1NjUKK21zZ2lkICJTdGF0dXMgRmllbGQiCittc2dzdHIgItit2YLZhCDYp9mE2K3Yp9mE2KkiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzoxMzQ1Cittc2dpZCAiU3RhdHVzIFBvc2l0aW9uIgorbXNnc3RyICLZhdmI2LbYuSDYp9mE2K3Yp9mE2KkiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzoxMzY3Cittc2dpZCAiU3RhdHVzIFNlcGFyYXRvciIKK21zZ3N0ciAi2YHYp9i12YQg2KfZhNit2KfZhNipIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6MTM2MworbXNnaWQgIlN0YXR1cyBTaWRlIgorbXNnc3RyICLYrNin2YbYqCDYp9mE2K3Yp9mE2KkiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBuYW1lIG9mIE1JREkgbXVzaWNhbCBpbnN0cnVtZW50ICMxMTUgKGluIHRoZSBQZXJjdXNzaXZlIGdyb3VwKS4KKyM6IFByb2dyYW1zL21pZGkuYzo0MzcKK21zZ2lkICJTdGVlbCBEcnVtcyIKK21zZ3N0ciAi2K/Ysdin2YXYsiDYrdiv2YrYr9mKIgorCisjOiBQcm9ncmFtcy9jb25maWcuYzo0NTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3RvcCBhbiBleGlzdGluZyBpbnN0YW5jZSBvZiAlcywgYW5kIHRoZW4gZXhpdC4iCittc2dzdHIgItil2YrZgtin2YEg2YXYq9mK2YQg2YXZiNis2YjYryDZhNmAICVz2Iwg2KvZhSDYp9mE2KXZhtmH2KfYoS4iCisKKyMuIEVuc2VtYmxlCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgbmFtZSBvZiBNSURJIG11c2ljYWwgaW5zdHJ1bWVudCAjNDkgKGluIHRoZSBFbnNlbWJsZSBncm91cCkuCisjOiBQcm9ncmFtcy9taWRpLmM6MjMwCittc2dpZCAiU3RyaW5nIEVuc2VtYmxlIDEiCittc2dzdHIgItmB2LHZgtipINin2YTZiNiq2LEgMSIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIG5hbWUgb2YgTUlESSBtdXNpY2FsIGluc3RydW1lbnQgIzUwIChpbiB0aGUgRW5zZW1ibGUgZ3JvdXApLgorIzogUHJvZ3JhbXMvbWlkaS5jOjIzMworbXNnaWQgIlN0cmluZyBFbnNlbWJsZSAyIgorbXNnc3RyICLZgdix2YLYqSDYp9mE2YjYqtixIDIiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBuYW1lIG9mIE1JREkgbXVzaWNhbCBpbnN0cnVtZW50IGdyb3VwICM2LgorIzogUHJvZ3JhbXMvbWlkaS5jOjQwCittc2dpZCAiU3RyaW5ncyIKK21zZ3N0ciAi2KfZhNij2YjYqtin2LEiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzo3MjIKK21zZ2lkICJTdXBlcmltcG9zZSBEb3QgNyIKK21zZ3N0ciAi2YHYsdi2INin2YTZhtmC2LfYqSA3IgorCisjOiBQcm9ncmFtcy9jb25maWcuYzo3NDQKK21zZ2lkICJTdXBwcmVzcyBzdGFydC11cCBtZXNzYWdlcy4iCittc2dzdHIgItil2YrZgtin2YEg2LHYs9in2KbZhCDYqNiv2KEg2KfZhNiq2LTYutmK2YQuIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgbmFtZSBvZiBNSURJIG11c2ljYWwgaW5zdHJ1bWVudCAjMzkgKGluIHRoZSBCYXNzIGdyb3VwKS4KKyM6IFByb2dyYW1zL21pZGkuYzoxOTgKK21zZ2lkICJTeW50aCBCYXNzIDEiCittc2dzdHIgItmF2YjYp9mE2YHYqSDYqNin2LMgMSIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIG5hbWUgb2YgTUlESSBtdXNpY2FsIGluc3RydW1lbnQgIzQwIChpbiB0aGUgQmFzcyBncm91cCkuCisjOiBQcm9ncmFtcy9taWRpLmM6MjAxCittc2dpZCAiU3ludGggQmFzcyAyIgorbXNnc3RyICLZhdmI2KfZhNmB2Kkg2KjYp9izIDIiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBuYW1lIG9mIE1JREkgbXVzaWNhbCBpbnN0cnVtZW50ICMxMTkgKGluIHRoZSBQZXJjdXNzaXZlIGdyb3VwKS4KKyM6IFByb2dyYW1zL21pZGkuYzo0NDkKK21zZ2lkICJTeW50aCBEcnVtIgorbXNnc3RyICLZhdmI2KfZhNmB2Kkg2LfYqNmEIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgbmFtZSBvZiBNSURJIG11c2ljYWwgaW5zdHJ1bWVudCBncm91cCAjMTMuCisjLiB4Z2V0dGV4dDogKHN5bnRoIGlzIGEgY29tbW9uIHNob3J0IGZvcm0gZm9yIHN5bnRoZXNpemVyKQorIy4geGdldHRleHQ6IChGTSBpcyB0aGUgYWNyb255bSBmb3IgRnJlcXVlbmN5IE1vZHVsYXRpb24pCisjOiBQcm9ncmFtcy9taWRpLmM6NjUKK21zZ2lkICJTeW50aCBGTSIKK21zZ3N0ciAiU3ludGggRk0iCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBuYW1lIG9mIE1JREkgbXVzaWNhbCBpbnN0cnVtZW50IGdyb3VwICMxMS4KKyMuIHhnZXR0ZXh0OiAoc3ludGggaXMgYSBjb21tb24gc2hvcnQgZm9ybSBmb3Igc3ludGhlc2l6ZXIpCisjOiBQcm9ncmFtcy9taWRpLmM6NTYKK21zZ2lkICJTeW50aCBMZWFkIgorbXNnc3RyICJTeW50aCBMZWFkIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgbmFtZSBvZiBNSURJIG11c2ljYWwgaW5zdHJ1bWVudCBncm91cCAjMTIuCisjLiB4Z2V0dGV4dDogKHN5bnRoIGlzIGEgY29tbW9uIHNob3J0IGZvcm0gZm9yIHN5bnRoZXNpemVyKQorIzogUHJvZ3JhbXMvbWlkaS5jOjYwCittc2dpZCAiU3ludGggUGFkIgorbXNnc3RyICLZhdmI2KfZhNmB2Kkg2KfZhNij2KvYsSIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIG5hbWUgb2YgTUlESSBtdXNpY2FsIGluc3RydW1lbnQgIzU1IChpbiB0aGUgRW5zZW1ibGUgZ3JvdXApLgorIzogUHJvZ3JhbXMvbWlkaS5jOjI0OAorbXNnaWQgIlN5bnRoIFZvaWNlIgorbXNnc3RyICLZhdmI2KfZhNmB2Kkg2LXZiNiqIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgbmFtZSBvZiBNSURJIG11c2ljYWwgaW5zdHJ1bWVudCAjNjMgKGluIHRoZSBCcmFzcyBncm91cCkuCisjOiBQcm9ncmFtcy9taWRpLmM6MjczCittc2dpZCAiU3ludGhCcmFzcyAxIgorbXNnc3RyICLZhdmI2KfZhNmB2Kkg2KfZhNmG2K3Yp9izIDEiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBuYW1lIG9mIE1JREkgbXVzaWNhbCBpbnN0cnVtZW50ICM2NCAoaW4gdGhlIEJyYXNzIGdyb3VwKS4KKyM6IFByb2dyYW1zL21pZGkuYzoyNzYKK21zZ2lkICJTeW50aEJyYXNzIDIiCittc2dzdHIgItmF2YjYp9mE2YHYqSDYp9mE2YbYrdin2LMgMiIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIG5hbWUgb2YgTUlESSBtdXNpY2FsIGluc3RydW1lbnQgIzUxIChpbiB0aGUgRW5zZW1ibGUgZ3JvdXApLgorIzogUHJvZ3JhbXMvbWlkaS5jOjIzNgorbXNnaWQgIlN5bnRoU3RyaW5ncyAxIgorbXNnc3RyICLZhdmI2KfZhNmB2Kkg2KfZhNij2YjYqtin2LEgMSIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIG5hbWUgb2YgTUlESSBtdXNpY2FsIGluc3RydW1lbnQgIzUyIChpbiB0aGUgRW5zZW1ibGUgZ3JvdXApLgorIzogUHJvZ3JhbXMvbWlkaS5jOjIzOQorbXNnaWQgIlN5bnRoU3RyaW5ncyAyIgorbXNnc3RyICLZhdmI2KfZhNmB2Kkg2KfZhNij2YjYqtin2LEgMiIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjE1MDQKK21zZ2lkICJTeXN0ZW0gTG9nIExldmVsIgorbXNnc3RyICLZhdiz2KrZiNmJINiz2KzZhCDYp9mE2YbYuNin2YUiCisKKyM6IFByb2dyYW1zL2NvbmZpZy5jOjI5NzcgUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjE0NzgKK21zZ2lkICJUYWJsZXMgRGlyZWN0b3J5IgorbXNnc3RyICLZhdiz2KfYsSDYp9mE2KzYr9in2YjZhCIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIG5hbWUgb2YgTUlESSBtdXNpY2FsIGluc3RydW1lbnQgIzExNyAoaW4gdGhlIFBlcmN1c3NpdmUgZ3JvdXApLgorIzogUHJvZ3JhbXMvbWlkaS5jOjQ0MworbXNnaWQgIlRhaWtvIERydW0iCittc2dzdHIgItiq2KfZitmD2Ygg2K/Ysdin2YUiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBuYW1lIG9mIE1JREkgbXVzaWNhbCBpbnN0cnVtZW50ICMyNCAoaW4gdGhlIE9yZ2FuIGdyb3VwKS4KKyM6IFByb2dyYW1zL21pZGkuYzoxNTEKK21zZ2lkICJUYW5nbyBBY2NvcmRpb24iCittc2dzdHIgItiq2KfZhtis2Ygg2KPZg9mI2LHYr9mK2YjZhiIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIG5hbWUgb2YgTUlESSBtdXNpY2FsIGluc3RydW1lbnQgIzEyNSAoaW4gdGhlIFNvdW5kIEVmZmVjdHMgZ3JvdXApLgorIzogUHJvZ3JhbXMvbWlkaS5jOjQ2OAorbXNnaWQgIlRlbGVwaG9uZSBSaW5nIgorbXNnc3RyICLYsdmG2YrZhiDYp9mE2YfYp9iq2YEiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBuYW1lIG9mIE1JREkgbXVzaWNhbCBpbnN0cnVtZW50ICM2NyAoaW4gdGhlIFJlZWQgZ3JvdXApLgorIzogUHJvZ3JhbXMvbWlkaS5jOjI4NgorbXNnaWQgIlRlbm9yIFNheG9waG9uZSIKK21zZ3N0ciAi2KrZitmG2YjYsSDYs9in2YPYs9mB2YjZhiIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjc2MAorbXNnaWQgIlRleHQgSW5kaWNhdG9ycyIKK21zZ3N0ciAi2YXYpNi02LHYp9iqINin2YTZhti1IgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6MTM2NAorbXNnaWQgIlRleHQgU2lkZSIKK21zZ3N0ciAi2KzYp9mG2Kgg2KfZhNmG2LUiCisKKyM6IFByb2dyYW1zL2NvbmZpZy5jOjEwMDMgUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjEzOTIKK21zZ2lkICJUZXh0IFRhYmxlIgorbXNnc3RyICLYrNiv2YjZhCDYp9mE2YbYtSIKKworIzogUHJvZ3JhbXMvYnJsdHR5LWN0Yi5jOjY5Cittc2dpZCAiVGV4dCB0YWJsZS4iCittc2dzdHIgItis2K/ZiNmEINin2YTZhti1LiIKKworIzogUHJvZ3JhbXMvY29uZmlnLmM6MzgxCittc2dpZCAiVGhlIHRleHQgdG8gYmUgc2hvd24gd2hlbiB0aGUgYnJhaWxsZSBkcml2ZXIgc3RhcnRzIGFuZCB0byBiZSBzcG9rZW4gd2hlbiB0aGUgc3BlZWNoIGRyaXZlciBzdGFydHMuIgorbXNnc3RyICLYp9mE2YbYtSDYp9mE2LDZiiDYs9mK2KrZhSDYudix2LbZhyDYudmG2K8g2KjYr9ihINiq2LTYutmK2YQg2LPYp9im2YLYqSDYqNix2KfZitmEINmI2YrYqtmFINmG2LfZgtmHINi52YbYryDYqNiv2KEg2KrYtNi62YrZhCDYs9in2KbZgtipINin2YTZhti32YIuIgorCisjOiBQcm9ncmFtcy9jb25maWcuYzozODgKK21zZ2lkICJUaGUgdGV4dCB0byBiZSBzaG93biB3aGVuIHRoZSBicmFpbGxlIGRyaXZlciBzdG9wcy4iCittc2dzdHIgItin2YTZhti1INin2YTYsNmKINiz2YrYqtmFINi52LHYttmHINi52YbYryDYqtmI2YLZgSDYqNix2YbYp9mF2Kwg2KrYtNi62YrZhCDYqNix2KfZitmELiIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjU1MworbXNnaWQgIlRpbWUiCittc2dzdHIgItin2YTZiNmC2KoiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzoxMjgwCittc2dpZCAiVGltZSBGb3JtYXQiCittc2dzdHIgItiq2YbYs9mK2YIg2KfZhNmI2YLYqiIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjEyNzIKK21zZ2lkICJUaW1lIFByZXNlbnRhdGlvbiIKK21zZ3N0ciAi2LnYsdi2INin2YTZiNmC2KoiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzoxMjkwCittc2dpZCAiVGltZSBTZXBhcmF0b3IiCittc2dzdHIgItmB2KfYtdmEINin2YTZiNmC2KoiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBuYW1lIG9mIE1JREkgbXVzaWNhbCBpbnN0cnVtZW50ICM0OCAoaW4gdGhlIFN0cmluZ3MgZ3JvdXApLgorIzogUHJvZ3JhbXMvbWlkaS5jOjIyNgorbXNnaWQgIlRpbXBhbmkiCittc2dzdHIgItiq2YrZhdio2KfZhtmKIgorCisjLiBQZXJjdXNzaXZlIEluc3RydW1lbnRzCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgbmFtZSBvZiBNSURJIG11c2ljYWwgaW5zdHJ1bWVudCAjMTEzIChpbiB0aGUgUGVyY3Vzc2l2ZSBncm91cCkuCisjOiBQcm9ncmFtcy9taWRpLmM6NDMxCittc2dpZCAiVGlua2xlIEJlbGwiCittc2dzdHIgItiq2YrZhtmD2YQg2KjZitmEIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6MTU1OAorbXNnaWQgIlRvb2xzIgorbXNnc3RyICLYo9iv2YjYp9iqIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6MTAwMworbXNnaWQgIlRvdWNoIE5hdmlnYXRpb24iCittc2dzdHIgItin2YTYqtmG2YLZhCDYqNin2YTZhNmF2LMiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzoxMDE3Cittc2dpZCAiVG91Y2ggU2Vuc2l0aXZpdHkiCittc2dzdHIgItit2LPYp9iz2YrYqSDYp9mE2YTZhdizIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6OTE1Cittc2dpZCAiVHJhY2sgU2NyZWVuIFBvaW50ZXIiCittc2dzdHIgItiq2KrYqNi5INmF2KTYtNixINin2YTYtNin2LTYqSIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjkwOQorbXNnaWQgIlRyYWNrIFNjcmVlbiBTY3JvbGwiCittc2dzdHIgItiq2KrYqNi5INiq2YXYsdmK2LEg2KfZhNi02KfYtNipIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6OTQxCittc2dpZCAiVHJhbnNsYXRlZCB2aWEgVGV4dCBUYWJsZSIKK21zZ3N0ciAi2KrZhSDYqtix2KzZhdiq2Ycg2LnYqNixINis2K/ZiNmEINin2YTZhti1IgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgbmFtZSBvZiBNSURJIG11c2ljYWwgaW5zdHJ1bWVudCAjNDUgKGluIHRoZSBTdHJpbmdzIGdyb3VwKS4KKyM6IFByb2dyYW1zL21pZGkuYzoyMTcKK21zZ2lkICJUcmVtb2xvIFN0cmluZ3MiCittc2dzdHIgItiz2YTYp9iz2YQgVHJlbW9sbyIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIG5hbWUgb2YgTUlESSBtdXNpY2FsIGluc3RydW1lbnQgIzU4IChpbiB0aGUgQnJhc3MgZ3JvdXApLgorIzogUHJvZ3JhbXMvbWlkaS5jOjI1OAorbXNnaWQgIlRyb21ib25lIgorbXNnc3RyICLYp9mE2KrYsdmI2YXYqNmI2YYiCisKKyMuIEJyYXNzCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgbmFtZSBvZiBNSURJIG11c2ljYWwgaW5zdHJ1bWVudCAjNTcgKGluIHRoZSBCcmFzcyBncm91cCkuCisjOiBQcm9ncmFtcy9taWRpLmM6MjU1Cittc2dpZCAiVHJ1bXBldCIKK21zZ3N0ciAi2KfZhNio2YjZgiIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIG5hbWUgb2YgTUlESSBtdXNpY2FsIGluc3RydW1lbnQgIzU5IChpbiB0aGUgQnJhc3MgZ3JvdXApLgorIzogUHJvZ3JhbXMvbWlkaS5jOjI2MQorbXNnaWQgIlR1YmEiCittc2dzdHIgItii2YTYqSDYqtmI2KjYpyIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIG5hbWUgb2YgTUlESSBtdXNpY2FsIGluc3RydW1lbnQgIzE1IChpbiB0aGUgQ2hyb21hdGljIFBlcmN1c3Npb24gZ3JvdXApLgorIzogUHJvZ3JhbXMvbWlkaS5jOjEyMworbXNnaWQgIlR1YnVsYXIgQmVsbHMiCittc2dzdHIgItij2KzYsdin2LMg2KPZhtio2YjYqNmKIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6MTA2MgorbXNnaWQgIlR1bmUgRGV2aWNlIgorbXNnc3RyICLYttio2Lcg2KfZhNis2YfYp9iyIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6OTQ1Cittc2dpZCAiVHlwaW5nIE1vZGUiCittc2dzdHIgItmG2YXYtyDYp9mE2YPYqtin2KjYqSIKKworIzogUHJvZ3JhbXMvbG9nLmM6MTM2Cittc2dpZCAiVVNCIEkvTyIKK21zZ3N0ciAiVVNCIEkvTyIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjY2NAorbXNnaWQgIlVuZGVybGluZSIKK21zZ3N0ciAi2KrYs9i32YrYsSIKKworIzogUHJvZ3JhbXMvYWxlcnQuYzoxMDIKK21zZ2lkICJVbmZyb3plbiIKK21zZ3N0ciAi2LrZitixINmF2KzZhdivIgorCisjOiBQcm9ncmFtcy9jb25maWcuYzoyOTc0IFByb2dyYW1zL21lbnVfcHJlZnMuYzoxNDU4Cittc2dpZCAiVXBkYXRhYmxlIERpcmVjdG9yeSIKK21zZ3N0ciAi2K/ZhNmK2YQg2YLYp9io2YQg2YTZhNiq2K3Yr9mK2KsiCisKKyM6IFByb2dyYW1zL2xvZy5jOjEwNgorbXNnaWQgIlVwZGF0ZSBFdmVudHMiCittc2dzdHIgItij2K3Yr9in2Ksg2KfZhNiq2K3Yr9mK2KsiCisKKyM6IFByb2dyYW1zL29wdGlvbnMuYzoxOTcKK21zZ2lkICJVc2FnZSIKK21zZ3N0ciAi2KfZhNin2LPYqtiu2K/Yp9mFIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6NzIxCittc2dpZCAiVXNlIENhcGl0YWwgU2lnbiIKK21zZ3N0ciAi2KfYs9iq2K7Yr9in2YUg2LnZhNin2YXYqSDYp9mE2KPYrdix2YEg2KfZhNmD2KjZitix2KkiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBuYW1lIG9mIE1JREkgbXVzaWNhbCBpbnN0cnVtZW50ICMxMiAoaW4gdGhlIENocm9tYXRpYyBQZXJjdXNzaW9uIGdyb3VwKS4KKyM6IFByb2dyYW1zL21pZGkuYzoxMTQKK21zZ2lkICJWaWJyYXBob25lIgorbXNnc3RyICLYp9mE2YHZitio2LHYp9mB2YjZhiIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIG5hbWUgb2YgTUlESSBtdXNpY2FsIGluc3RydW1lbnQgIzQyIChpbiB0aGUgU3RyaW5ncyBncm91cCkuCisjOiBQcm9ncmFtcy9taWRpLmM6MjA4Cittc2dpZCAiVmlvbGEiCittc2dzdHIgItmB2YrZiNmE2KciCisKKyMuIFN0cmluZ3MKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBuYW1lIG9mIE1JREkgbXVzaWNhbCBpbnN0cnVtZW50ICM0MSAoaW4gdGhlIFN0cmluZ3MgZ3JvdXApLgorIzogUHJvZ3JhbXMvbWlkaS5jOjIwNQorbXNnaWQgIlZpb2xpbiIKK21zZ3N0ciAi2YPZhdin2YYiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBuYW1lIG9mIE1JREkgbXVzaWNhbCBpbnN0cnVtZW50ICM1NCAoaW4gdGhlIEVuc2VtYmxlIGdyb3VwKS4KKyM6IFByb2dyYW1zL21pZGkuYzoyNDUKK21zZ2lkICJWb2ljZSBPb2hzIgorbXNnc3RyICLYtdmI2KogT29ocyIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjE0OTQKK21zZ2lkICJXYXJuaW5nIgorbXNnc3RyICLYqtit2LDZitixIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6MTQzOAorbXNnaWQgIldlYiBTaXRlIgorbXNnc3RyICLYp9mE2YXZiNmC2LkiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBuYW1lIG9mIE1JREkgbXVzaWNhbCBpbnN0cnVtZW50ICM3OSAoaW4gdGhlIFBpcGUgZ3JvdXApLgorIzogUHJvZ3JhbXMvbWlkaS5jOjMyMworbXNnaWQgIldoaXN0bGUiCittc2dzdHIgIti12YHYp9ix2KkiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzo1NDMKK21zZ2lkICJXaW5kb3cgQ29sdW1uIgorbXNnc3RyICLYudmF2YjYryDYp9mE2YbYp9mB2LDYqSIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjU0MiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6NTU4Cittc2dpZCAiV2luZG93IENvb3JkaW5hdGVzIgorbXNnc3RyICLYpdit2K/Yp9ir2YrYp9iqINin2YTZhtin2YHYsNipIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6NTQ0Cittc2dpZCAiV2luZG93IFJvdyIKK21zZ3N0ciAi2LXZgSDYp9mE2YbYp9mB2LDYqSIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIG5hbWUgb2YgTUlESSBtdXNpY2FsIGluc3RydW1lbnQgIzExNiAoaW4gdGhlIFBlcmN1c3NpdmUgZ3JvdXApLgorIzogUHJvZ3JhbXMvbWlkaS5jOjQ0MAorbXNnaWQgIldvb2RibG9jayIKK21zZ3N0ciAi2KfZhNiu2LTYqCIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjg0OAorbXNnaWQgIldvcmQgV3JhcCIKK21zZ3N0ciAi2KfZhNiq2YHYp9mBINin2YTZg9mE2KfZhSIKKworIzogUHJvZ3JhbXMvY29uZmlnLmM6Mjk0OAorbXNnaWQgIldvcmtpbmcgRGlyZWN0b3J5IgorbXNnc3RyICLYp9mE2YXYs9in2LEg2KfZhNi52KfZhdmEIgorCisjOiBQcm9ncmFtcy9jb25maWcuYzoyOTc1IFByb2dyYW1zL21lbnVfcHJlZnMuYzoxNDY4Cittc2dpZCAiV3JpdGFibGUgRGlyZWN0b3J5IgorbXNnc3RyICLYp9mE2YXYs9in2LEg2KfZhNmC2KfYqNmEINmE2YTZg9iq2KjYp9ipIgorCisjOiBQcm9ncmFtcy94YnJsYXBpLmM6MTE4Cittc2dpZCAiV3JpdGUgZGVidWdnaW5nIG91dHB1dCB0byBzdGRvdXQiCittc2dzdHIgItmD2KrYp9io2Kkg2KXYrtix2KfYrCDYp9mE2KrYtdit2YrYrSDYpdmE2Ykgc3Rkb3V0IgorCisjOiBQcm9ncmFtcy9jb25maWcuYzo3NjcKK21zZ2lkICJXcml0ZSB0aGUgc3RhcnQtdXAgbG9ncywgYW5kIHRoZW4gZXhpdC4iCittc2dzdHIgItin2YPYqtioINiz2KzZhNin2Kog2KfZhNio2K/YoSDYjCDYq9mFINin2K7YsdisLiIKKworIzogUHJvZ3JhbXMveGJybGFwaS5jOjEwMAorbXNnaWQgIlggZGlzcGxheSB0byBjb25uZWN0IHRvIgorbXNnc3RyICLYtNin2LTYqSBYINmE2YTYp9iq2LXYp9mEINmF2LkiCisKKyM6IFByb2dyYW1zL3BnbXByaXZzX2xpbnV4LmM6MTk1MQorbXNnaWQgIlhERyBydW50aW1lIGRpcmVjdG9yeSBhY2Nlc3MgcHJvYmxlbSIKK21zZ3N0ciAi2YXYtNmD2YTYqSDYp9mE2YjYtdmI2YQg2KXZhNmJINiv2YTZitmEINmI2YLYqiDYqti02LrZitmEIFhERyIKKworIzogUHJvZ3JhbXMvcGdtcHJpdnNfbGludXguYzoxOTMzCittc2dpZCAiWERHIHJ1bnRpbWUgZGlyZWN0b3J5IGNyZWF0ZWQiCittc2dzdHIgItiq2YUg2KXZhti02KfYoSDYr9mE2YrZhCDZiNmC2Kog2KrYtNi62YrZhCBYREciCisKKyM6IFByb2dyYW1zL3BnbXByaXZzX2xpbnV4LmM6MTkyOAorbXNnaWQgIlhERyBydW50aW1lIGRpcmVjdG9yeSBleGlzdHMiCittc2dzdHIgItiv2YTZitmEINmI2YLYqiDYqti02LrZitmEIFhERyDZhdmI2KzZiNivIgorCisjOiBQcm9ncmFtcy94YnJsYXBpLmM6Nzg2Cittc2dpZCAiWEZyZWUod21fbmFtZSkgZm9yIGNoYW5nZSIKK21zZ3N0ciAiWEZyZWUgKHdtX25hbWUpINmE2YTYqti62YrZitixIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIFBBU1NYVCBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6MTQ3OQorbXNnaWQgIlhUIChzZXQgMSkga2V5Ym9hcmQgc2NhbiBjb2RlIgorbXNnc3RyICJYVCAo2YXYrNmF2YjYudipIDEpINix2YXYsiDZhdiz2K0g2YTZiNit2Kkg2KfZhNmF2YHYp9iq2YrYrSIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIG5hbWUgb2YgTUlESSBtdXNpY2FsIGluc3RydW1lbnQgIzE0IChpbiB0aGUgQ2hyb21hdGljIFBlcmN1c3Npb24gZ3JvdXApLgorIzogUHJvZ3JhbXMvbWlkaS5jOjEyMAorbXNnaWQgIlh5bG9waG9uZSIKK21zZ3N0ciAi2KXZg9iz2YrZhNmK2YHZiNmGIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6MTMxMgorbXNnaWQgIlllYXIgTW9udGggRGF5IgorbXNnc3RyICLYs9mG2Kkg2LTZh9ixINmK2YjZhSIKKworIzogUHJvZ3JhbXMvbWVudS5jOjUyNAorbXNnaWQgIlllcyIKK21zZ3N0ciAi2YbYudmFIgorCisjOiBQcm9ncmFtcy94YnJsYXBpLmM6ODQKK21zZ2lkICJbaG9zdF1bOnBvcnRdIgorbXNnc3RyICJbaG9zdF1bOnBvcnRdIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6NjY1Cittc2dpZCAiYWxsIGRvdHMiCittc2dzdHIgItmD2YQg2KfZhNmG2YLYp9i3IgorCisjOiBQcm9ncmFtcy9jbWRfbWlzY2VsbGFuZW91cy5jOjEwNAorbXNnaWQgImFuZCIKK21zZ3N0ciAi2YgiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgQ0xJUF9BUFBFTkQgY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjEzNDYKK21zZ2lkICJhcHBlbmQgY2hhcmFjdGVycyB0byBjbGlwYm9hcmQiCittc2dzdHIgItil2YTYrdin2YIg2KfZhNij2K3YsdmBINio2KfZhNit2KfZgdi42KkiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgQ0xJUF9BREQgY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjEyMjMKK21zZ2lkICJhcHBlbmQgdG8gY2xpcGJvYXJkIGZyb20gY2hhcmFjdGVyIgorbXNnc3RyICLYpdmE2K3Yp9mCINin2YTYrdin2YHYuNipINmF2YYg2KfZhNit2LHZgSIKKworIzogUHJvZ3JhbXMvY21kLmM6MjkwCittc2dpZCAiYXQgY3Vyc29yIgorbXNnc3RyICLYudmG2K8g2KfZhNmF2KTYtNixIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIEtFWV9CQUNLU1BBQ0UgY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjE1MjcKK21zZ2lkICJiYWNrc3BhY2Uga2V5IgorbXNnc3RyICLZhdmB2KrYp9itINin2YTYrdiw2YEg2KfZhNiu2YTZgdmKIgorCisjOiBEcml2ZXJzL0JyYWlsbGUvQmF1bS9icmFpbGxlLmM6MTE0OSBEcml2ZXJzL0JyYWlsbGUvVFNJL2JyYWlsbGUuYzo4NjkKK21zZ2lkICJiYXR0ZXJ5IGxvdyIKK21zZ3N0ciAi2KfZhNio2LfYp9ix2YrYqSDZhdmG2K7Zgdi22KkiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgU0VMRUNUVlQgY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjE0MzcKK21zZ2lkICJiaW5kIHRvIHNwZWNpZmljIHZpcnR1YWwgdGVybWluYWwiCittc2dzdHIgItin2YTYp9mE2KrYstin2YUg2KjZhtin2YHYsNipINij2YjYp9mF2LEg2KfZgdiq2LHYp9i22YrYqSDZhdit2K/Yr9ipIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIFNFTEVDVFZUX05FWFQgY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjk1NworbXNnaWQgImJpbmQgdG8gdGhlIG5leHQgdmlydHVhbCB0ZXJtaW5hbCIKK21zZ3N0ciAi2LHYqNi3INio2YbYp9mB2LDYqSDYp9mE2KPZiNin2YXYsSDYp9mE2KfZgdiq2LHYp9i22YrYqSDYp9mE2KrYp9mE2YrYqSIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBTRUxFQ1RWVF9QUkVWIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDo5NTAKK21zZ2lkICJiaW5kIHRvIHRoZSBwcmV2aW91cyB2aXJ0dWFsIHRlcm1pbmFsIgorbXNnc3RyICLYsdio2Lcg2KjZhtin2YHYsNipINin2YTYo9mI2KfZhdixINin2YTYp9mB2KrYsdin2LbZitipINin2YTYs9in2KjZgtipIgorCisjLgorIzogUHJvZ3JhbXMvY21kX3V0aWxzLmM6MTQ0Cittc2dpZCAiYmxhY2siCittc2dzdHIgItij2LPZiNivIgorCisjOiBQcm9ncmFtcy9jb3JlLmM6MTEyNQorbXNnaWQgImJsYW5rIGxpbmUiCittc2dzdHIgItiz2LfYsSDZgdin2LHYuiIKKworIzogUHJvZ3JhbXMvY21kX3V0aWxzLmM6MTczCittc2dpZCAiYmxpbmtpbmciCittc2dzdHIgItmI2YXZiti2IgorCisjLiBCCisjOiBQcm9ncmFtcy9jbWRfdXRpbHMuYzoxNDUKK21zZ2lkICJibHVlIgorbXNnc3RyICLYo9iy2LHZgiIKKworIzogUHJvZ3JhbXMvY29uZmlnLmM6Mjk5MworIywgYy1mb3JtYXQKK21zZ2lkICJicmFpbGxlIGRldmljZSBub3Qgc3BlY2lmaWVkIgorbXNnc3RyICLYrNmH2KfYsiDYqNix2KfZitmEINi62YrYsSDZhdit2K/YryIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBPRkZMSU5FIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDo2MjEKK21zZ2lkICJicmFpbGxlIGRpc3BsYXkgdGVtcG9yYXJpbHkgdW5hdmFpbGFibGUiCittc2dzdHIgIti02KfYtNipINio2LHYp9mK2YQg2LrZitixINmF2KrYp9it2Kkg2YXYpNmC2KrZi9inIgorCisjOiBQcm9ncmFtcy9jb25maWcuYzoxNzM3Cittc2dpZCAiYnJhaWxsZSBkcml2ZXIgaW5pdGlhbGl6YXRpb24gZmFpbGVkIgorbXNnc3RyICLZgdi02YTYqiDYqtmH2YrYptipINio2LHZhtin2YXYrCDYqti02LrZitmEINio2LHYp9mK2YQiCisKKyM6IFByb2dyYW1zL2NvbmZpZy5jOjE4MTYKK21zZ2lkICJicmFpbGxlIGRyaXZlciBub3QgbG9hZGFibGUiCittc2dzdHIgItio2LHZhtin2YXYrCDYqti02LrZitmEINio2LHYp9mK2YQg2LrZitixINmC2KfYqNmEINmE2YTYqtit2YXZitmEIgorCisjOiBQcm9ncmFtcy9jb25maWcuYzoyMDc3Cittc2dpZCAiYnJhaWxsZSBkcml2ZXIgcmVzdGFydGluZyIKK21zZ3N0ciAi2KXYudin2K/YqSDYqti02LrZitmEINiz2KfYptmC2Kkg2KjYsdin2YrZhCIKKworIzogUHJvZ3JhbXMvY21kX21pc2NlbGxhbmVvdXMuYzoxNjMKK21zZ2lkICJicmFpbGxlIGRyaXZlciBzdG9wcGVkIgorbXNnc3RyICLYqtmI2YLZgSDYs9in2KbZgtipINio2LHYp9mK2YQiCisKKyM6IERyaXZlcnMvU2NyZWVuL0FuZHJvaWQvc2NyZWVuLmM6MTg5Cittc2dpZCAiYnJhaWxsZSByZWxlYXNlZCIKK21zZ3N0ciAi2KrZhSDYqtit2LHZitixINio2LHYp9mK2YQiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgUk9VVEUgY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjEyMDcKK21zZ2lkICJicmluZyBzY3JlZW4gY3Vyc29yIHRvIGNoYXJhY3RlciIKK21zZ3N0ciAi2KXYrdi22KfYsSDZhdik2LTYsSDYp9mE2LTYp9i02Kkg2KXZhNmJINin2YTYrdix2YEiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgQ1NSSk1QX1ZFUlQgY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjU5MworbXNnaWQgImJyaW5nIHNjcmVlbiBjdXJzb3IgdG8gY3VycmVudCBsaW5lIgorbXNnc3RyICLYpdit2LbYp9ixINmF2KTYtNixINin2YTYtNin2LTYqSDYpdmE2Ykg2KfZhNiz2LfYsSDYp9mE2K3Yp9mE2YoiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgUk9VVEVfTElORSBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6MTQwNAorbXNnaWQgImJyaW5nIHNjcmVlbiBjdXJzb3IgdG8gbGluZSIKK21zZ3N0ciAi2KXYrdi22KfYsSDZhdik2LTYsSDYp9mE2LTYp9i02Kkg2KXZhNmJINin2YTYs9i32LEiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgUk9VVEVfQ1VSUl9MT0NOIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDo4MzUKK21zZ2lkICJicmluZyBzY3JlZW4gY3Vyc29yIHRvIHNwZWVjaCBjdXJzb3IiCittc2dzdHIgItil2K3Yttin2LEg2YXYpNi02LEg2KfZhNi02KfYtNipINil2YTZiSDZhdik2LTYsSDYp9mE2YbYt9mCIgorCisjLiBSRworIzogUHJvZ3JhbXMvY21kX3V0aWxzLmM6MTUwCittc2dpZCAiYnJvd24iCittc2dzdHIgItio2YbZiiIKKworIzogRHJpdmVycy9TY3JlZW4vTGludXgvc2NyZWVuLmM6MTQzMgorbXNnaWQgImNhbid0IGdldCBjb25zb2xlIHN0YXRlIgorbXNnc3RyICLZhNinINmK2YXZg9mGINin2YTYrdi12YjZhCDYudmE2Ykg2K3Yp9mE2Kkg2YjYrdiv2Kkg2KfZhNiq2K3Zg9mFIgorCisjOiBEcml2ZXJzL1NjcmVlbi9MaW51eC9zY3JlZW4uYzoxNTEwCittc2dpZCAiY2FuJ3Qgb3BlbiBjb25zb2xlIgorbXNnc3RyICLZhNinINmK2YXZg9mGINmB2KrYrSDZiNit2K/YqSDYp9mE2KrYrdmD2YUiCisKKyM6IERyaXZlcnMvU2NyZWVuL0xpbnV4L3NjcmVlbi5jOjE1NTYKK21zZ2lkICJjYW4ndCByZWFkIHNjcmVlbiBjb250ZW50IgorbXNnc3RyICLZhNinINmK2YXZg9mGINmC2LHYp9ih2Kkg2YXYrdiq2YjZiSDYp9mE2LTYp9i02KkiCisKKyM6IERyaXZlcnMvU2NyZWVuL0xpbnV4L3NjcmVlbi5jOjE2MDEKK21zZ2lkICJjYW4ndCByZWFkIHNjcmVlbiBoZWFkZXIiCittc2dzdHIgItmE2Kcg2YrZhdmD2YYg2YLYsdin2KHYqSDYsdij2LMg2KfZhNi02KfYtNipIgorCisjOiBQcm9ncmFtcy9jdGJfdHJhbnNsYXRlLmM6MzkzCittc2dpZCAiY2Fubm90IGFjY2VzcyBpbnRlcm5hbCBjb250cmFjdGlvbiB0YWJsZSIKK21zZ3N0ciAi2YTYpyDZitmF2YPZhiDYp9mE2YjYtdmI2YQg2KXZhNmJINis2K/ZiNmEINin2YTYp9iu2KrYtdin2LHYp9iqINin2YTYr9in2K7ZhNmKIgorCisjOiBQcm9ncmFtcy9hdGJfdHJhbnNsYXRlLmM6NzAKK21zZ2lkICJjYW5ub3QgY29tcGlsZSBhdHRyaWJ1dGVzIHRhYmxlIgorbXNnc3RyICLZhNinINmK2YXZg9mGINiq2KzZhdmK2Lkg2KzYr9mI2YQg2KfZhNiz2YXYp9iqIgorCisjOiBQcm9ncmFtcy9jdGJfdHJhbnNsYXRlLmM6Mzg3Cittc2dpZCAiY2Fubm90IGNvbXBpbGUgY29udHJhY3Rpb24gdGFibGUiCittc2dzdHIgItmE2Kcg2YrZhdmD2YYg2KrYrNmF2YrYuSDYrNiv2YjZhCDYp9mE2KfYrtiq2LXYp9ix2KfYqiIKKworIzogUHJvZ3JhbXMvY29uZmlnLmM6MTcyMAorbXNnaWQgImNhbm5vdCBjb21waWxlIGtleSB0YWJsZSIKK21zZ3N0ciAi2YTYpyDZitmF2YPZhiDYqtis2YXZiti5INis2K/ZiNmEINin2YTZhdmB2KfYqtmK2K0iCisKKyM6IFByb2dyYW1zL2NvbmZpZy5jOjEyODQKK21zZ2lkICJjYW5ub3QgY29tcGlsZSBrZXlib2FyZCB0YWJsZSIKK21zZ3N0ciAi2YTYpyDZitmF2YPZhiDYqtis2YXZiti5INis2K/ZiNmEINmE2YjYrdipINin2YTZhdmB2KfYqtmK2K0iCisKKyM6IFByb2dyYW1zL3R0Yl90cmFuc2xhdGUuYzoyNzUKK21zZ2lkICJjYW5ub3QgY29tcGlsZSB0ZXh0IHRhYmxlIgorbXNnc3RyICLZhNinINmK2YXZg9mGINiq2KzZhdmK2Lkg2KzYr9mI2YQg2KfZhNmG2LUiCisKKyMuIFRoaXMgaXMgdGhlIGZpcnN0IGF0dGVtcHQgdG8gY29ubmVjdCB0byBCUkxUVFksIGFuZCBpdCBmYWlsZWQuCisjLiAqIFJldHVybiB0aGUgZXJyb3IgaW1tZWRpYXRlbHkgdG8gdGhlIHVzZXIsIHRvIHByb3ZpZGUgZmVlZGJhY2sgdG8gdXNlcnMKKyMuICogcnVubmluZyB4YnJsYXBpIGJ5IGhhbmQsIGJ1dCBub3QgZmlsbCBsb2dzLCBlYXQgYmF0dGVyeSwgc3BhbQorIy4gKiAxMjcuMC4wLjEgd2l0aCByZWNvbm5lY3Rpb24gYXR0ZW1wdHMuCisjLgorIzogUHJvZ3JhbXMveGJybGFwaS5jOjIwNAorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgY29ubmVjdCB0byBicmFpbGxlIGRldmljZXMgZGFlbW9uIGJybHR0eSBhdCAlc1xuIgorbXNnc3RyICLZhNinINmK2YXZg9mGINin2YTYp9iq2LXYp9mEINio2KfZhNi52YXZitmEINin2YTYrtmB2Yog2YTYo9is2YfYstipINio2LHYp9mK2YQg2YHZiiAlcyBcXCBuXG4iCisKKyM6IFByb2dyYW1zL3hicmxhcGkuYzo2NTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGNvbm5lY3QgdG8gZGlzcGxheSAlc1xuIgorbXNnc3RyICLZhNinINmK2YXZg9mGINin2YTYp9iq2LXYp9mEINio2LTYp9i02KkgJXMgXFwgblxuIgorCisjOiBQcm9ncmFtcy9maWxlLmM6MzgxCittc2dpZCAiY2Fubm90IGNyZWF0ZSBkaXJlY3RvcnkiCittc2dzdHIgItmE2Kcg2YrZhdmD2YYg2KXZhti02KfYoSDYp9mE2YXYs9in2LEiCisKKyM6IFByb2dyYW1zL3Byb2dyYW0uYzoxNTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGRldGVybWluZSBwcm9ncmFtIGRpcmVjdG9yeSIKK21zZ3N0ciAi2YTYpyDZitmF2YPZhiDYqtit2K/ZitivINiv2YTZitmEINin2YTYqNix2YbYp9mF2KwiCisKKyM6IFByb2dyYW1zL2NvbmZpZy5jOjI5NTEgUHJvZ3JhbXMvbWVudS5jOjYxOAorbXNnaWQgImNhbm5vdCBkZXRlcm1pbmUgd29ya2luZyBkaXJlY3RvcnkiCittc2dzdHIgItmE2Kcg2YrZhdmD2YYg2KrYrdiv2YrYryDYr9mE2YrZhCDYp9mE2LnZhdmEIgorCisjOiBQcm9ncmFtcy9zeXN0ZW1fd2luZG93cy5jOjYxCittc2dpZCAiY2Fubm90IGZpbmQgcHJvY2VkdXJlIgorbXNnc3RyICLZhNinINmK2YXZg9mGINin2YTYudir2YjYsSDYudmE2Ykg2KfZhNil2KzYsdin2KEiCisKKyM6IFByb2dyYW1zL3Byb2dyYW0uYzoxNTgKK21zZ2lkICJjYW5ub3QgZml4IGluc3RhbGwgcGF0aCIKK21zZ3N0ciAi2YTYpyDZitmF2YPZhiDYpdi12YTYp9itINmF2LPYp9ixINin2YTYqtir2KjZitiqIgorCisjOiBQcm9ncmFtcy94YnJsYXBpLmM6MjU5Cittc2dpZCAiY2Fubm90IGdldCB0dHlcbiIKK21zZ3N0ciAi2YTYpyDZitmF2YPZhiDYp9mE2K3YtdmI2YQg2LnZhNmJIHR0eSBcXCBuXG4iCisKKyM6IFByb2dyYW1zL3hicmxhcGkuYzoyNjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGdldCB0dHkgJWRcbiIKK21zZ3N0ciAi2YTYpyDZitmF2YPZhiDYp9mE2K3YtdmI2YQg2LnZhNmJIHR0eSAlZCBcXCBuXG4iCisKKyM6IFByb2dyYW1zL2ZpbGUuYzo1MTgKK21zZ2lkICJjYW5ub3QgZ2V0IHdvcmtpbmcgZGlyZWN0b3J5IgorbXNnc3RyICLZhNinINmK2YXZg9mGINin2YTYrdi12YjZhCDYudmE2Ykg2K/ZhNmK2YQg2KfZhNi52YXZhCIKKworIzogUHJvZ3JhbXMveGJybGFwaS5jOjcwMgorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgZ3JhYiB3aW5kb3dzIG9uIHNjcmVlbiAlZFxuIgorbXNnc3RyICLZhNinINmK2YXZg9mGINin2YbYqtiy2KfYuSDYp9mE2KXYt9in2LHYp9iqINi52YTZiSDYp9mE2LTYp9i02KkgJWQgXFwgblxuIgorCisjOiBQcm9ncmFtcy94YnJsYXBpLmM6MjcyCittc2dpZCAiY2Fubm90IGlnbm9yZSBrZXlzXG4iCittc2dzdHIgItmE2Kcg2YrZhdmD2YYg2KrYrNin2YfZhCDYp9mE2YXZgdin2KrZititIFxcIG5cbiIKKworIzogUHJvZ3JhbXMvYXRiX3RyYW5zbGF0ZS5jOjkwCittc2dpZCAiY2Fubm90IGxvYWQgYXR0cmlidXRlcyB0YWJsZSIKK21zZ3N0ciAi2YTYpyDZitmF2YPZhiDYqtit2YXZitmEINis2K/ZiNmEINin2YTYs9mF2KfYqiIKKworIzogUHJvZ3JhbXMvY3RiX3RyYW5zbGF0ZS5jOjQwNworbXNnaWQgImNhbm5vdCBsb2FkIGNvbnRyYWN0aW9uIHRhYmxlIgorbXNnc3RyICLZhNinINmK2YXZg9mGINiq2K3ZhdmK2YQg2KzYr9mI2YQg2KfZhNin2K7Yqti12KfYsdin2KoiCisKKyM6IFByb2dyYW1zL3N5c3RlbV93aW5kb3dzLmM6NTQKK21zZ2lkICJjYW5ub3QgbG9hZCBsaWJyYXJ5IgorbXNnc3RyICLZhNinINmK2YXZg9mGINiq2K3ZhdmK2YQg2KfZhNmF2YPYqtio2KkiCisKKyM6IFByb2dyYW1zL3R0Yl90cmFuc2xhdGUuYzoyOTUKK21zZ2lkICJjYW5ub3QgbG9hZCB0ZXh0IHRhYmxlIgorbXNnc3RyICLZhNinINmK2YXZg9mGINiq2K3ZhdmK2YQg2KzYr9mI2YQg2YbYtdmKIgorCisjOiBQcm9ncmFtcy9maWxlLmM6MzcwCittc2dpZCAiY2Fubm90IG1ha2Ugd29ybGQgd3JpdGFibGUiCittc2dzdHIgItmE2Kcg2YrZhdmD2YYg2KzYudmEINin2YTYudin2YTZhSDZgtin2KjZhCDZhNmE2YPYqtin2KjYqSIKKworIzogUHJvZ3JhbXMvY29uZmlnLmM6MTIzOQorbXNnaWQgImNhbm5vdCBvcGVuIGtleSBoZWxwIgorbXNnc3RyICLZhNinINmK2YXZg9mGINmB2KrYrSDZhdiz2KfYudiv2Kkg2KfZhNmF2YHYp9iq2YrYrSIKKworIzogUHJvZ3JhbXMvcHJvZ3JhbS5jOjI2MgorbXNnaWQgImNhbm5vdCBvcGVuIHByb2Nlc3MgaWRlbnRpZmllciBmaWxlIgorbXNnc3RyICLZhNinINmK2YXZg9mGINmB2KrYrSDZhdmE2YEg2YXYudix2YEg2KfZhNi52YXZhNmK2KkiCisKKyM6IFByb2dyYW1zL21lbnUuYzo2MTYKK21zZ2lkICJjYW5ub3Qgb3BlbiB3b3JraW5nIGRpcmVjdG9yeSIKK21zZ3N0ciAi2YTYpyDZitmF2YPZhiDZgdiq2K0g2YXYs9in2LEg2KfZhNi52YXZhCIKKworIzogUHJvZ3JhbXMvcHJlZnMuYzozNjMKK21zZ2lkICJjYW5ub3QgcmVhZCBwcmVmZXJlbmNlcyBmaWxlIgorbXNnc3RyICLZhNinINmK2YXZg9mGINmC2LHYp9ih2Kkg2YXZhNmBINin2YTYqtmB2LbZitmE2KfYqiIKKworIzogUHJvZ3JhbXMveGJybGFwaS5jOjMzNworIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3Qgc2V0IGZvY3VzIHRvICUjMDEweFxuIgorbXNnc3RyICLZhNinINmK2YXZg9mGINiq2LnZitmK2YYg2KfZhNiq2LHZg9mK2LIg2LnZhNmJICUjIDAxMHggXG4iCisKKyM6IFByb2dyYW1zL2ZpbGUuYzo1MzIgUHJvZ3JhbXMvbWVudS5jOjYwNQorbXNnaWQgImNhbm5vdCBzZXQgd29ya2luZyBkaXJlY3RvcnkiCittc2dzdHIgItmE2Kcg2YrZhdmD2YYg2KrYudmK2YrZhiDYr9mE2YrZhCDYp9mE2LnZhdmEIgorCisjOiBQcm9ncmFtcy9wcmVmcy5jOjU3NgorbXNnaWQgImNhbm5vdCB3cml0ZSB0byBwcmVmZXJlbmNlcyBmaWxlIgorbXNnc3RyICLZhNinINmK2YXZg9mGINin2YTZg9iq2KfYqNipINil2YTZiSDZhdmE2YEg2KfZhNiq2YHYttmK2YTYp9iqIgorCisjLiAiY2FwIiBoZXJlLCB1c2VkIGR1cmluZyBzcGVlY2ggb3V0cHV0LCBpcyBzaG9ydCBmb3IgImNhcGl0YWwiLgorIy4gSXQgaXMgc3Bva2VuIGp1c3QgYmVmb3JlIGFuIHVwcGVyY2FzZSBsZXR0ZXIsIGUuZy4gImNhcCBBIi4KKyM6IFByb2dyYW1zL2NvcmUuYzoxMDcwCittc2dpZCAiY2FwIgorbXNnc3RyICJjYXAiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzo4ODYgUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjEzNTMKK21zZ2lkICJjZWxscyIKK21zZ3N0ciAi2K7ZhNin2YrYpyIKKworIzogUHJvZ3JhbXMvY21kX3ByZWZlcmVuY2VzLmM6ODcKK21zZ2lkICJjaGFuZ2VzIGRpc2NhcmRlZCIKK21zZ3N0ciAi2KrZhSDYqtis2KfZh9mEINin2YTYqti62YrZitix2KfYqiIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBVTlNUSUNLIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDo4ODcKK21zZ2lkICJjbGVhciBhbGwgc3RpY2t5IGlucHV0IG1vZGlmaWVycyIKK21zZ3N0ciAi2KfZhdiz2K0g2YPYp9mB2Kkg2YXYudiv2ZHZhNin2Kog2KfZhNil2K/Yrtin2YQg2KfZhNmE2KfYtdmC2KkiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgVFhUU0VMX0NMRUFSIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDoxMDE5Cittc2dpZCAiY2xlYXIgdGhlIHRleHQgc2VsZWN0aW9uIgorbXNnc3RyICLYp9mF2LPYrSDYqtit2K/ZitivINin2YTZhti1IgorCisjOiBQcm9ncmFtcy9jbWRfc3BlZWNoLmM6NTAxCittc2dpZCAiY29sdW1uIgorbXNnc3RyICLYudmF2YjYryIKKworIy4gY29uZmlndXJhdGlvbiBtZW51CisjOiBEcml2ZXJzL0JyYWlsbGUvQnJhaWxsZUxpdGUvYnJhaWxsZS5jOjYwNworbXNnaWQgImNvbmZpZyIKK21zZ3N0ciAiY29uZmlnIgorCisjOiBQcm9ncmFtcy9vcHRpb25zLmM6ODEyCittc2dpZCAiY29uZmlndXJhdGlvbiBkaXJlY3RpdmUgc3BlY2lmaWVkIG1vcmUgdGhhbiBvbmNlIgorbXNnc3RyICLYqtmFINiq2K3Yr9mK2K8g2KrZiNis2YrZhyDYp9mE2KrZg9mI2YrZhiDYo9mD2KvYsSDZhdmGINmF2LHYqSIKKworIzogRHJpdmVycy9TY3JlZW4vTGludXgvc2NyZWVuLmM6MTUwOAorbXNnaWQgImNvbnNvbGUgbm90IGluIHVzZSIKK21zZ3N0ciAi2YjYrdiv2Kkg2KfZhNiq2K3Zg9mFINmE2YrYs9iqINmC2YrYryDYp9mE2KfYs9iq2K7Yr9in2YUiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzoxMDU2Cittc2dpZCAiY29uc29sZSB0b25lIGdlbmVyYXRvciIKK21zZ3N0ciAi2YXZiNmE2K8g2YbYutmF2Kkg2YjYrdiv2Kkg2KfZhNiq2K3Zg9mFIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIENMSVBfQ09QWSBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6MTMzOAorbXNnaWQgImNvcHkgY2hhcmFjdGVycyB0byBjbGlwYm9hcmQiCittc2dzdHIgItmG2LPYriDYp9mE2KPYrdix2YEg2KXZhNmJINin2YTYrdin2YHYuNipIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIEhPU1RfQ09QWSBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6MTAzMworbXNnaWQgImNvcHkgc2VsZWN0ZWQgdGV4dCB0byBob3N0IGNsaXBib2FyZCIKK21zZ3N0ciAi2YbYs9iuINin2YTZhti1INin2YTZhdit2K/YryDZhNin2LPYqti22KfZgdipINin2YTYrdin2YHYuNipIgorCisjOiBQcm9ncmFtcy9jb25maWcuYzo3MjkKK21zZ2lkICJjc2VjcyIKK21zZ3N0ciAiY3NlY3MiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgVE9VQ0hfQVQgY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjE1MDMKK21zZ2lkICJjdXJyZW50IHJlYWRpbmcgbG9jYXRpb24iCittc2dzdHIgItmF2YjZgti5INin2YTZgtix2KfYodipINin2YTYrdin2YTZiiIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBLRVlfQ1VSU09SX0RPV04gY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjE1NjcKK21zZ2lkICJjdXJzb3ItZG93biBrZXkiCittc2dzdHIgItmF2YHYqtin2K0g2KfZhNmF2KTYtNixINmE2KPYs9mB2YQiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgS0VZX0NVUlNPUl9MRUZUIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDoxNTQzCittc2dpZCAiY3Vyc29yLWxlZnQga2V5IgorbXNnc3RyICLZhdmB2KrYp9itINin2YTZhdik2LTYsSDYp9mE2KPZitiz2LEiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgS0VZX0NVUlNPUl9SSUdIVCBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6MTU1MQorbXNnaWQgImN1cnNvci1yaWdodCBrZXkiCittc2dzdHIgItmF2YHYqtin2K0g2KfZhNmF2KTYtNixINin2YTYo9mK2YXZhiIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBLRVlfQ1VSU09SX1VQIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDoxNTU5Cittc2dpZCAiY3Vyc29yLXVwIGtleSIKK21zZ3N0ciAi2YXZgdiq2KfYrSDYp9mE2YXYpNi02LEg2YTYo9i52YTZiSIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBIT1NUX0NVVCBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6MTA0MAorbXNnaWQgImN1dCBzZWxlY3RlZCB0ZXh0IHRvIGhvc3QgY2xpcGJvYXJkIgorbXNnc3RyICLZgti1INin2YTZhti1INin2YTZhdit2K/YryDZhNmE2K3Yp9mB2LjYqSDYp9mE2YXYs9iq2LbZitmB2KkiCisKKyMuIEdCCisjOiBQcm9ncmFtcy9jbWRfdXRpbHMuYzoxNDcKK21zZ2lkICJjeWFuIgorbXNnc3RyICLYp9iy2LHZgiDYs9mF2KfZiNmKIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIEFMVEdSIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDo4OTQKK21zZ2lkICJjeWNsZSB0aGUgQWx0R3IgKFJpZ2h0IEFsdCkgc3RpY2t5IGlucHV0IG1vZGlmaWVyIChuZXh0LCBvbiwgb2ZmKSIKK21zZ3N0ciAi2K/ZiNix2Kkg2YXYudiv2YQg2KfZhNil2K/Yrtin2YQg2KfZhNir2KfYqNiqIEFsdEdyICjYp9mE2YrZhdmK2YYg2KfZhNio2K/ZitmEKSAo2KfZhNiq2KfZhNmKINiMINiq2LTYutmK2YQg2Iwg2KXZitmC2KfZgSDYqti02LrZitmEKSIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBDT05UUk9MIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDo2NDIKK21zZ2lkICJjeWNsZSB0aGUgQ29udHJvbCBzdGlja3kgaW5wdXQgbW9kaWZpZXIgKG5leHQsIG9uLCBvZmYpIgorbXNnc3RyICLYr9mI2LHYqSDZgdmKINmF2LnYr9mEINin2YTYpdiv2K7Yp9mEINin2YTYq9in2KjYqiDZhNmE2KrYrdmD2YUgKNin2YTYqtin2YTZiiDYjCDYqti02LrZitmEINiMINil2YrZgtin2YEg2KrYtNi62YrZhCkiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgR1VJIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDo5MDEKK21zZ2lkICJjeWNsZSB0aGUgR1VJIChXaW5kb3dzKSBzdGlja3kgaW5wdXQgbW9kaWZpZXIgKG5leHQsIG9uLCBvZmYpIgorbXNnc3RyICLYr9mI2LHYqSDZgdmKINmF2LnYr9mEINin2YTYpdiv2K7Yp9mEINin2YTYq9in2KjYqiBHVUkgKFdpbmRvd3MpICjYp9mE2KrYp9mE2Yog2Iwg2KrYtNi62YrZhCDYjCDYpdmK2YLYp9mBINiq2LTYutmK2YQpIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIE1FVEEgY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjY0OQorbXNnaWQgImN5Y2xlIHRoZSBNZXRhIChMZWZ0IEFsdCkgc3RpY2t5IGlucHV0IG1vZGlmaWVyIChuZXh0LCBvbiwgb2ZmKSIKK21zZ3N0ciAi2K/ZiNix2Kkg2YXYudiv2ZHZhCDYp9mE2KXYr9iu2KfZhCDYp9mE2KvYp9io2KogTWV0YSAoQWx0INin2YTYo9mK2LPYsSkgKNin2YTYqtin2YTZiiDYjCDYqti02LrZitmEINiMINil2YrZgtin2YEpIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIFNISUZUIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDo2MjgKK21zZ2lkICJjeWNsZSB0aGUgU2hpZnQgc3RpY2t5IGlucHV0IG1vZGlmaWVyIChuZXh0LCBvbiwgb2ZmKSIKK21zZ3N0ciAi2K/ZiNix2Kkg2YXYudiv2YQg2KfZhNil2K/Yrtin2YQg2KfZhNmE2KfYtdmCIFNoaWZ0ICjYp9mE2KrYp9mE2Yog2Iwg2KrYtNi62YrZhCDYjCDYpdmK2YLYp9mBINiq2LTYutmK2YQpIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIFVQUEVSIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDo2MzUKK21zZ2lkICJjeWNsZSB0aGUgVXBwZXIgc3RpY2t5IGlucHV0IG1vZGlmaWVyIChuZXh0LCBvbiwgb2ZmKSIKK21zZ3N0ciAi2K/ZiNix2Kkg2YXYudiv2YQg2KfZhNil2K/Yrtin2YQg2KfZhNi52YTZiNmKINin2YTZhNin2LXZgiAo2KfZhNiq2KfZhNmKINiMINiq2LTYutmK2YQg2Iwg2KXZitmC2KfZgSDYqti02LrZitmEKSIKKworIy4gTAorIzogUHJvZ3JhbXMvY21kX3V0aWxzLmM6MTUyCittc2dpZCAiZGFyayBncmV5IgorbXNnc3RyICLYsdmF2KfYr9mKINi62KfZhdmCIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIFNBWV9MT1dFUiBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6MTE2OAorbXNnaWQgImRlY3JlYXNlIHNwZWFraW5nIHBpdGNoIgorbXNnc3RyICLYrtmB2LYg2K3Yr9ipINin2YTZg9mE2KfZhSIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBTQVlfU0xPV0VSIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDo1NTAKK21zZ2lkICJkZWNyZWFzZSBzcGVha2luZyByYXRlIgorbXNnc3RyICLYrtmB2LYg2LPYsdi52Kkg2KfZhNmD2YTYp9mFIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIFNBWV9TT0ZURVIgY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjU2NAorbXNnaWQgImRlY3JlYXNlIHNwZWFraW5nIHZvbHVtZSIKK21zZ3N0ciAi2K7Zgdi2INmF2LPYqtmI2Ykg2KfZhNi12YjYqiIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBLRVlfREVMRVRFIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDoxNjE1Cittc2dpZCAiZGVsZXRlIGtleSIKK21zZ3N0ciAi2YXZgdiq2KfYrSDYp9mE2K3YsNmBIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIERFU0NDSEFSIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDoxMjc1Cittc2dpZCAiZGVzY3JpYmUgY2hhcmFjdGVyIgorbXNnc3RyICLZiNi12YEg2KfZhNit2LHZgSIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBERVNDX0NVUlJfQ0hBUiBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6ODIwCittc2dpZCAiZGVzY3JpYmUgY3VycmVudCBjaGFyYWN0ZXIiCittc2dzdHIgItmI2LXZgSDYp9mE2K3YsdmBINin2YTYrdin2YTZiiIKKworIzogUHJvZ3JhbXMvY29uZmlnLmM6NzEwIFByb2dyYW1zL2NvbmZpZy5jOjcyMAorbXNnaWQgImRldmljZSIKK21zZ3N0ciAi2KfZhNis2YfYp9iyIgorCisjOiBQcm9ncmFtcy9icmx0ZXN0LmM6NjQgUHJvZ3JhbXMvYnJsdGVzdC5jOjc0IFByb2dyYW1zL2JybHR0eS1hdGIuYzozMgorIzogUHJvZ3JhbXMvYnJsdHR5LWN0Yi5jOjUwIFByb2dyYW1zL2JybHR0eS1rdGIuYzo2OSBQcm9ncmFtcy9icmx0dHkta3RiLmM6NzkKKyM6IFByb2dyYW1zL2JybHR0eS10cnR4dC5jOjQ3IFByb2dyYW1zL2NvbmZpZy5jOjQwMCBQcm9ncmFtcy9jb25maWcuYzo1MDAKKyM6IFByb2dyYW1zL2NvbmZpZy5jOjUxMCBQcm9ncmFtcy9jb25maWcuYzo1MjAgUHJvZ3JhbXMvY29uZmlnLmM6NTkxCittc2dpZCAiZGlyZWN0b3J5IgorbXNnc3RyICLYp9mE2YXYs9in2LEiCisKKyM6IFByb2dyYW1zL3hicmxhcGkuYzo5OAorbXNnaWQgImRpc3BsYXkiCittc2dzdHIgItin2YTYudix2LYiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgTk9PUCBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6NQorbXNnaWQgImRvIG5vdGhpbmciCittc2dzdHIgItmE2Kcg2KrZgdi52YQg2LTZitihIgorCisjOiBQcm9ncmFtcy9sZWFybi5jOjEwOAorbXNnaWQgImRvbmUiCittc2dzdHIgItiq2YUiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzo2NjYKK21zZ2lkICJkb3QgNyIKK21zZ3N0ciAi2KfZhNmG2YLYt9ipIDciCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzo2NjcKK21zZ2lkICJkb3QgOCIKK21zZ3N0ciAi2KfZhNmG2YLYt9ipIDgiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzo2NjQKK21zZ2lkICJkb3RzIDcgYW5kIDgiCittc2dzdHIgItin2YTZhtmC2KfYtyA3INmIOCIKKworIzogRHJpdmVycy9CcmFpbGxlL0JhdW0vYnJhaWxsZS5jOjExNDYKK21zZ2lkICJkcml2ZXIgcmVxdWVzdCIKK21zZ3N0ciAi2LfZhNioINmF2YTZgSDYp9mE2KrYudix2YrZgSIKKworIzogUHJvZ3JhbXMvY29uZmlnLmM6NTQ5IFByb2dyYW1zL2NvbmZpZy5jOjY0NyBQcm9ncmFtcy9jb25maWcuYzo2OTAKK21zZ2lkICJkcml2ZXIsLi4uIgorbXNnc3RyICLYs9in2KbZgtip2IwuLi4iCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgS0VZX0VORCBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6MTU5OQorbXNnaWQgImVuZCBrZXkiCittc2dzdHIgItmF2YHYqtin2K0g2KfZhNmG2YfYp9mK2KkiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgS0VZX0VOVEVSIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDoxNTExCittc2dpZCAiZW50ZXIga2V5IgorbXNnc3RyICLZhdmB2KrYp9itINin2YTYr9iu2YjZhCIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBMRUFSTiBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6NDM2Cittc2dpZCAiZW50ZXIvbGVhdmUgY29tbWFuZCBsZWFybiBtb2RlIgorbXNnc3RyICLYr9iu2YjZhC/Zhdi62KfYr9ix2Kkg2YjYtti5INiq2LnZhNmFINin2YTYo9mI2KfZhdixIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIEhFTFAgY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjQyMgorbXNnaWQgImVudGVyL2xlYXZlIGhlbHAgZGlzcGxheSIKK21zZ3N0ciAi2K/YrtmI2YQv2YXYutin2K/YsdipINmF2LPYp9i52K/YqSDYp9mE2LnYsdi2IgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIFBSRUZNRU5VIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDo0NDMKK21zZ2lkICJlbnRlci9sZWF2ZSBwcmVmZXJlbmNlcyBtZW51IgorbXNnc3RyICLYr9iu2YjZhC/Zhdi62KfYr9ix2Kkg2YLYp9im2YXYqSDYp9mE2KrZgdi22YrZhNin2KoiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgSU5GTyBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6NDI5Cittc2dpZCAiZW50ZXIvbGVhdmUgc3RhdHVzIGRpc3BsYXkiCittc2dzdHIgItiv2K7ZiNmEIC8g2YXYutin2K/YsdipINi52LHYtiDYp9mE2K3Yp9mE2KkiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgS0VZX0VTQ0FQRSBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6MTUzNQorbXNnaWQgImVzY2FwZSBrZXkiCittc2dzdHIgItmF2YHYqtin2K0g2KfZhNmH2LHZiNioIgorCisjOiBEcml2ZXJzL0JyYWlsbGUvSXJpcy9icmFpbGxlLmM6MTQ5NAorbXNnaWQgImV1cm9icmFpbGxlIgorbXNnc3RyICJldXJvYnJhaWxsZSIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIHRlcm0gdXNlZCB3aGVuIHRoZSB0aW1lIGlzIGV4YWN0bHkgb24gKGkuZS4gemVybyBzZWNvbmRzIGFmdGVyKSBhIG1pbnV0ZS4KKyM6IFByb2dyYW1zL2NtZF9taXNjZWxsYW5lb3VzLmM6MTAyCittc2dpZCAiZXhhY3RseSIKK21zZ3N0ciAi2KrZhdin2YXYpyIKKworIzogUHJvZ3JhbXMvY29uZmlnLmM6ODczCittc2dpZCAiZXhjZXNzIGFyZ3VtZW50IgorbXNnc3RyICLYrdis2Kkg2LLYp9im2K/YqSIKKworIy4gcGFyZW50CisjOiBQcm9ncmFtcy9icmx0dHkuYzoxNzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXhlY3V0aW5nIFwiJXNcIiAoZnJvbSBcIiVzXCIpXG4iCittc2dzdHIgItiq2YbZgdmK2LAgXCIlc1wiICjZhdmGIFwiICVzXCIpIFxuIgorCisjOiBQcm9ncmFtcy9wZ21wcml2c19saW51eC5jOjIwNDUKK21zZ2lkICJleGVjdXRpbmcgYXMgdGhlIGludm9raW5nIHVzZXIiCittc2dzdHIgItiq2YbZgdmK2LAg2KjYtdmB2KrZhyDYp9mE2YXYs9iq2K7Yr9mFINin2YTZhdiz2KrYr9i52YoiCisKKyMuIGV4ZWN2KCkgc2hvdWxkbid0IHJldHVybgorIzogUHJvZ3JhbXMvYnJsdHR5LmM6MTg0CisjLCBjLWZvcm1hdAorbXNnaWQgImV4ZWN1dGlvbiBvZiBcIiVzXCIgZmFpbGVkOiAlc1xuIgorbXNnc3RyICLZgdi02YQg2KrZhtmB2YrYsCBcIiVzXCI6ICVzIFxuIgorCisjOiBQcm9ncmFtcy94YnJsYXBpLmM6NzA5Cittc2dpZCAiZmFpbGVkIHRvIGdldCBmaXJzdCBmb2N1c1xuIgorbXNnc3RyICLZgdi02YQg2YHZiiDYp9mE2K3YtdmI2YQg2LnZhNmJINin2YTYqtix2YPZitiyINin2YTYo9mI2YQgXG4iCisKKyM6IFByb2dyYW1zL2JybHR0eS10cnR4dC5jOjU2IFByb2dyYW1zL2JybHR0eS10cnR4dC5jOjY0IFByb2dyYW1zL2NvbmZpZy5jOjQ1NworIzogUHJvZ3JhbXMvY29uZmlnLmM6NDY2IFByb2dyYW1zL2NvbmZpZy5jOjQ3NiBQcm9ncmFtcy9jb25maWcuYzo2MDIKKyM6IFByb2dyYW1zL2NvbmZpZy5jOjYxMiBQcm9ncmFtcy9jb25maWcuYzo2MjEgUHJvZ3JhbXMvY29uZmlnLmM6NjI5CisjOiBQcm9ncmFtcy9jb25maWcuYzo2NjYgUHJvZ3JhbXMvY29uZmlnLmM6NzU5Cittc2dpZCAiZmlsZSIKK21zZ3N0ciAi2YXZhNmBIgorCisjOiBQcm9ncmFtcy9vcHRpb25zLmM6OTk4CisjLCBjLWZvcm1hdAorbXNnaWQgImZpbGUgJyVzJyBwcm9jZXNzaW5nIGVycm9yLiIKK21zZ3N0ciAi2K7Yt9ijINmB2Yog2YXYudin2YTYrNipINin2YTZhdmE2YEgJyVzJy4iCisKKyMuIGZhaWxlZAorIzogUHJvZ3JhbXMvYnJsdHR5LmM6MTcyCisjLCBjLWZvcm1hdAorbXNnaWQgImZvcmsgb2YgXCIlc1wiIGZhaWxlZDogJXNcbiIKK21zZ3N0ciAi2YHYtNmEINiq2YHYsdi5IFwiJXNcIjolc1xuIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIEtFWV9GVU5DVElPTiBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6MTYyNAorbXNnaWQgImZ1bmN0aW9uIGtleSIKK21zZ3N0ciAi2YXZgdiq2KfYrSDZiNi42YrZgdmKIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIEJBQ0sgY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjI3MQorbXNnaWQgImdvIGJhY2sgYWZ0ZXIgY3Vyc29yIHRyYWNraW5nIgorbXNnc3RyICLYp9mE2LHYrNmI2Lkg2KjYudivINiq2KrYqNi5INin2YTZhdik2LTYsSIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBHVUlfQkFDSyBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6MTA3NworbXNnaWQgImdvIGJhY2sgdG8gdGhlIHByZXZpb3VzIHNjcmVlbiIKK21zZ3N0ciAi2KfZhNi52YjYr9ipINmE2YTYtNin2LTYqSDYp9mE2LPYp9io2YLYqSIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBGV0lOTFQgY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjIxMAorbXNnaWQgImdvIGJhY2t3YXJkIG9uZSBicmFpbGxlIHdpbmRvdyIKK21zZ3N0ciAi2KfZhNix2KzZiNi5INmE2YTYrtmE2YEg2YbYp9mB2LDYqSDYqNix2KfZitmEINmI2KfYrdiv2KkiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgRldJTkxUU0tJUCBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6MjI4Cittc2dpZCAiZ28gYmFja3dhcmQgc2tpcHBpbmcgYmxhbmsgYnJhaWxsZSB3aW5kb3dzIgorbXNnc3RyICLYp9mE2LHYrNmI2Lkg2YTZhNiu2YTZgSDZhdi5INiq2K7Yt9mKINmG2YjYp9mB2LAg2KjYsdin2YrZhCDYp9mE2YHYp9ix2LrYqSIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBQUk5CV0lOIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDo5NjYKK21zZ2lkICJnbyBiYWNrd2FyZCB0byBuZWFyZXN0IG5vbi1ibGFuayBicmFpbGxlIHdpbmRvdyIKK21zZ3N0ciAi2KfZhNix2KzZiNi5INmE2YTYrtmE2YEg2KXZhNmJINij2YLYsdioINmG2KfZgdiw2Kkg2KjYsdin2YrZhCDYutmK2LEg2YHYp9ix2LrYqSIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBMTkROIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDoyMworbXNnaWQgImdvIGRvd24gb25lIGxpbmUiCittc2dzdHIgItin2YTZhtiy2YjZhCDYs9i32LEg2YjYp9it2K8iCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgV0lORE4gY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjQxCittc2dpZCAiZ28gZG93biBzZXZlcmFsIGxpbmVzIgorbXNnc3RyICLYp9mE2YbYstmI2YQg2LnYr9ipINij2LPYt9ixIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIE5YUEdSUEggY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjEzMworbXNnaWQgImdvIGRvd24gdG8gZmlyc3QgbGluZSBvZiBuZXh0IHBhcmFncmFwaCIKK21zZ3N0ciAi2KfZhNmG2LLZiNmEINil2YTZiSDYp9mE2LPYt9ixINin2YTYo9mI2YQg2YXZhiDYp9mE2YHZgtix2Kkg2KfZhNiq2KfZhNmK2KkiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgTUVOVV9MQVNUX0lURU0gY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjQ3NQorbXNnaWQgImdvIGRvd24gdG8gbGFzdCBpdGVtIgorbXNnc3RyICLYp9mE2YbYstmI2YQg2KXZhNmJINii2K7YsSDYudmG2LXYsSIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBOWERJRkNIQVIgY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjEzMzAKK21zZ2lkICJnbyBkb3duIHRvIG5lYXJlc3QgbGluZSB3aXRoIGRpZmZlcmVudCBjaGFyYWN0ZXIiCittc2dzdHIgItin2YTZhtiy2YjZhCDYpdmE2Ykg2KPZgtix2Kgg2LPYt9ixINio2K3YsdmBINmF2K7YqtmE2YEiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgTlhESUZMTiBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6NTkKK21zZ2lkICJnbyBkb3duIHRvIG5lYXJlc3QgbGluZSB3aXRoIGRpZmZlcmVudCBjb250ZW50IgorbXNnc3RyICLYp9mE2YbYstmI2YQg2KXZhNmJINij2YLYsdioINiz2LfYsSDYqNmF2K3YqtmI2Ykg2YXYrtiq2YTZgSIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBBVFRSRE4gY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjc3Cittc2dpZCAiZ28gZG93biB0byBuZWFyZXN0IGxpbmUgd2l0aCBkaWZmZXJlbnQgaGlnaGxpZ2h0aW5nIgorbXNnc3RyICLYp9mE2YbYstmI2YQg2KXZhNmJINij2YLYsdioINiz2LfYsSDZhdi5INiq2YXZitmK2LIg2YXYrtiq2YTZgSIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBOWElOREVOVCBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6MTI2NworbXNnaWQgImdvIGRvd24gdG8gbmVhcmVzdCBsaW5lIHdpdGggbGVzcyBpbmRlbnQgdGhhbiBjaGFyYWN0ZXIiCittc2dzdHIgItin2YTZhtiy2YjZhCDYpdmE2Ykg2KPZgtix2Kgg2LPYt9ixINio2YXYs9in2YHYqSDYo9it2LHZgSDYqNin2K/YptipINij2YLZhCIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBOWFBST01QVCBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6MTUxCittc2dpZCAiZ28gZG93biB0byBuZXh0IGNvbW1hbmQgcHJvbXB0IgorbXNnc3RyICLYp9mE2YbYstmI2YQg2KXZhNmJINmF2YjYrNmHINin2YTYo9mI2KfZhdixINin2YTYqtin2YTZiiIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBNRU5VX05FWFRfSVRFTSBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6NDkzCittc2dpZCAiZ28gZG93biB0byBuZXh0IGl0ZW0iCittc2dzdHIgItin2YTZhtiy2YjZhCDYpdmE2Ykg2KfZhNi52YbYtdixINin2YTYqtin2YTZiiIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBGV0lOUlQgY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjIxOQorbXNnaWQgImdvIGZvcndhcmQgb25lIGJyYWlsbGUgd2luZG93IgorbXNnc3RyICLYp9mE2KfZhtiq2YLYp9mEINmE2YTYo9mF2KfZhSDYqNmF2YLYr9in2LEg2YbYp9mB2LDYqSDYqNix2KfZitmEINmI2KfYrdiv2KkiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgRldJTlJUU0tJUCBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6MjM3Cittc2dpZCAiZ28gZm9yd2FyZCBza2lwcGluZyBibGFuayBicmFpbGxlIHdpbmRvd3MiCittc2dzdHIgItin2YTYp9mG2KrZgtin2YQg2YTZhNij2YXYp9mFINmF2Lkg2KrYrti32Yog2YbZiNin2YHYsCDYqNix2KfZitmEINin2YTZgdin2LHYutipIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIE5YTkJXSU4gY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjk3NQorbXNnaWQgImdvIGZvcndhcmQgdG8gbmVhcmVzdCBub24tYmxhbmsgYnJhaWxsZSB3aW5kb3ciCittc2dzdHIgItin2YTYp9mG2KrZgtin2YQg2YTZhNij2YXYp9mFINil2YTZiSDYo9mC2LHYqCDZhtin2YHYsNipINio2LHYp9mK2YQg2LrZitixINmB2KfYsdi62KkiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgSFdJTkxUIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDoxOTIKK21zZ2lkICJnbyBsZWZ0IGhhbGYgYSBicmFpbGxlIHdpbmRvdyIKK21zZ3N0ciAi2KfZhNiw2YfYp9ioINmK2LPYp9ixINmG2LXZgSDZhtin2YHYsNipINio2LHYp9mK2YQiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgQ0hSTFQgY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjE3NAorbXNnaWQgImdvIGxlZnQgb25lIGNoYXJhY3RlciIKK21zZ3N0ciAi2KfZhNiw2YfYp9ioINmK2LPYp9ix2Kcg2K3YsdmBINmI2KfYrdivIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIEhXSU5SVCBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6MjAxCittc2dpZCAiZ28gcmlnaHQgaGFsZiBhIGJyYWlsbGUgd2luZG93IgorbXNnc3RyICLYp9mE2LDZh9in2Kgg2YrZhdmK2YbZi9inINmG2LXZgSDZhtin2YHYsNipINio2LHYp9mK2YQiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgQ0hSUlQgY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjE4MworbXNnaWQgImdvIHJpZ2h0IG9uZSBjaGFyYWN0ZXIiCittc2dzdHIgItin2YTYsNmH2KfYqCDZitmF2YrZhtinINit2LHZgSDZiNin2K3YryIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBTUEVBS19GUlNUX0NIQVIgY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjc4OQorbXNnaWQgImdvIHRvIGFuZCBzcGVhayBmaXJzdCBub24tYmxhbmsgY2hhcmFjdGVyIG9uIGxpbmUiCittc2dzdHIgItin2YTYp9mG2KrZgtin2YQg2YjZhti32YIg2KPZiNmEINit2LHZgSDYutmK2LEg2YHYp9ix2Log2LnZhNmJINin2YTYs9i32LEiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgU1BFQUtfRlJTVF9MSU5FIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDo4MDUKK21zZ2lkICJnbyB0byBhbmQgc3BlYWsgZmlyc3Qgbm9uLWJsYW5rIGxpbmUgb24gc2NyZWVuIgorbXNnc3RyICLYp9mE2KfZhtiq2YLYp9mEINmI2YbYt9mCINij2YjZhCDYrdix2YEg2LrZitixINmB2KfYsdi6INi52YTZiSDYp9mE2LTYp9i02KkiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgU1BFQUtfTEFTVF9DSEFSIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDo3OTcKK21zZ2lkICJnbyB0byBhbmQgc3BlYWsgbGFzdCBub24tYmxhbmsgY2hhcmFjdGVyIG9uIGxpbmUiCittc2dzdHIgItin2YTYp9mG2KrZgtin2YQg2YjZhti32YIg2KLYrtixINit2LHZgSDYutmK2LEg2YHYp9ix2Log2LnZhNmJINin2YTYs9i32LEiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgU1BFQUtfTEFTVF9MSU5FIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDo4MTMKK21zZ2lkICJnbyB0byBhbmQgc3BlYWsgbGFzdCBub24tYmxhbmsgbGluZSBvbiBzY3JlZW4iCittc2dzdHIgItin2YTYp9mG2KrZgtin2YQg2YjZhti32YIg2KLYrtixINit2LHZgSDYutmK2LEg2YHYp9ix2Log2LnZhNmJINin2YTYtNin2LTYqSIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBTUEVBS19ORVhUX0NIQVIgY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjczNQorbXNnaWQgImdvIHRvIGFuZCBzcGVhayBuZXh0IGNoYXJhY3RlciIKK21zZ3N0ciAi2KfZhNin2YbYqtmC2KfZhCDZiNmG2LfZgiDYp9mE2K3YsdmBINin2YTYqtin2YTZiiIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBTUEVBS19ORVhUX0xJTkUgY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjc4MQorbXNnaWQgImdvIHRvIGFuZCBzcGVhayBuZXh0IGxpbmUiCittc2dzdHIgItin2YTYp9mG2KrZgtin2YQg2YjZhti32YIg2KfZhNiz2LfYsSDYp9mE2KrYp9mE2YoiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgU1BFQUtfTkVYVF9XT1JEIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDo3NTgKK21zZ2lkICJnbyB0byBhbmQgc3BlYWsgbmV4dCB3b3JkIgorbXNnc3RyICLYp9mE2KfZhtiq2YLYp9mEINmI2YbYt9mCINin2YTZg9mE2YXYqSDYp9mE2KrYp9mE2YrYqSIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBTUEVBS19QUkVWX0NIQVIgY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjcyNworbXNnaWQgImdvIHRvIGFuZCBzcGVhayBwcmV2aW91cyBjaGFyYWN0ZXIiCittc2dzdHIgItin2YTYp9mG2KrZgtin2YQg2YjZhti32YIg2KfZhNit2LHZgSDYp9mE2LPYp9io2YIiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgU1BFQUtfUFJFVl9MSU5FIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDo3NzMKK21zZ2lkICJnbyB0byBhbmQgc3BlYWsgcHJldmlvdXMgbGluZSIKK21zZ3N0ciAi2KfZhNin2YbYqtmC2KfZhCDZiNmG2LfZgiDYp9mE2LPYt9ixINin2YTYs9in2KjZgiIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBTUEVBS19QUkVWX1dPUkQgY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjc1MAorbXNnaWQgImdvIHRvIGFuZCBzcGVhayBwcmV2aW91cyB3b3JkIgorbXNnc3RyICLYp9mE2KfZhtiq2YLYp9mEINmI2YbYt9mCINin2YTZg9mE2YXYqSDYp9mE2LPYp9io2YLYqSIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBCT1RfTEVGVCBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6MTE1Cittc2dpZCAiZ28gdG8gYmVnaW5uaW5nIG9mIGJvdHRvbSBsaW5lIgorbXNnc3RyICLYp9mE2KfZhtiq2YLYp9mEINil2YTZiSDYqNiv2KfZitipINii2K7YsSDYs9i32LEiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgTE5CRUcgY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjI0NgorbXNnaWQgImdvIHRvIGJlZ2lubmluZyBvZiBsaW5lIgorbXNnc3RyICLYp9mE2KfZhtiq2YLYp9mEINil2YTZiSDYqNiv2KfZitipINin2YTYs9i32LEiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgVE9QX0xFRlQgY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjEwNQorbXNnaWQgImdvIHRvIGJlZ2lubmluZyBvZiB0b3AgbGluZSIKK21zZ3N0ciAi2KfZhNin2YbYqtmC2KfZhCDYpdmE2Ykg2KjYr9in2YrYqSDYo9mI2YQg2LPYt9ixIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIEJPVCBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6OTUKK21zZ2lkICJnbyB0byBib3R0b20gbGluZSIKK21zZ3N0ciAi2KfZhNiw2YfYp9ioINil2YTZiSDYotiu2LEg2LPYt9ixIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIFNQS0hPTUUgY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjUyMgorbXNnaWQgImdvIHRvIGN1cnJlbnQgc3BlYWtpbmcgcG9zaXRpb24iCittc2dzdHIgItin2YTYsNmH2KfYqCDYpdmE2Ykg2YXZiNi22Lkg2KfZhNmG2LfZgiDYp9mE2K3Yp9mE2YoiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgTE5FTkQgY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjI1NQorbXNnaWQgImdvIHRvIGVuZCBvZiBsaW5lIgorbXNnc3RyICLYp9mE2LDZh9in2Kgg2KXZhNmJINii2K7YsSDYp9mE2LPYt9ixIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIE1FTlVfUFJFVl9MRVZFTCBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6NjY0Cittc2dpZCAiZ28gdG8gcHJldmlvdXMgbWVudSBsZXZlbCIKK21zZ3N0ciAi2KfZhNiw2YfYp9ioINil2YTZiSDZhdiz2KrZiNmJINin2YTZgtin2KbZhdipINin2YTYs9in2KjZgiIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBHT1RPTUFSSyBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6MTMwMAorbXNnaWQgImdvIHRvIHJlbWVtYmVyZWQgYnJhaWxsZSB3aW5kb3cgcG9zaXRpb24iCittc2dzdHIgItin2YTYsNmH2KfYqCDYpdmE2Ykg2YXZiNi22Lkg2YbYp9mB2LDYqSDYqNix2KfZitmEINin2YTYsNmKINiq2YUg2KrYsNmD2LHZhyIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBIT01FIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDoyNjMKK21zZ2lkICJnbyB0byBzY3JlZW4gY3Vyc29yIgorbXNnc3RyICLYp9mE2LDZh9in2Kgg2KXZhNmJINmF2KTYtNixINin2YTYtNin2LTYqSIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBSRVRVUk4gY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjI3OQorbXNnaWQgImdvIHRvIHNjcmVlbiBjdXJzb3Igb3IgZ28gYmFjayBhZnRlciBjdXJzb3IgdHJhY2tpbmciCittc2dzdHIgItin2YTYp9mG2KrZgtin2YQg2KXZhNmJINmF2KTYtNixINin2YTYtNin2LTYqSDYo9mIINin2YTYsdis2YjYuSDYqNi52K8g2KrYqtio2Lkg2KfZhNmF2KTYtNixIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIEdPVE9MSU5FIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDoxMzEwCittc2dpZCAiZ28gdG8gc2VsZWN0ZWQgbGluZSIKK21zZ3N0ciAi2KfZhNiw2YfYp9ioINil2YTZiSDYp9mE2LPYt9ixINin2YTZhdit2K/YryIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBHVUlfSE9NRSBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6MTA2OQorbXNnaWQgImdvIHRvIHRoZSBob21lIHNjcmVlbiIKK21zZ3N0ciAi2KfZhNiw2YfYp9ioINmE2YTYtNin2LTYqSDYp9mE2LHYptmK2LPZitipIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIFRPUCBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6ODYKK21zZ2lkICJnbyB0byB0b3AgbGluZSIKK21zZ3N0ciAi2KfZhNiw2YfYp9ioINmE2YTYs9i32LEg2KfZhNi52YTZiNmKIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIExOVVAgY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjE0Cittc2dpZCAiZ28gdXAgb25lIGxpbmUiCittc2dzdHIgItin2YTYp9mG2KrZgtin2YQg2LPYt9ixINmE2KPYudmE2YkiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgV0lOVVAgY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjMyCittc2dpZCAiZ28gdXAgc2V2ZXJhbCBsaW5lcyIKK21zZ3N0ciAi2KfZhNin2YbYqtmC2KfZhCDZhNij2LnZhNmJINi52K/YqSDYo9iz2LfYsSIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBNRU5VX0ZJUlNUX0lURU0gY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjQ2NgorbXNnaWQgImdvIHVwIHRvIGZpcnN0IGl0ZW0iCittc2dzdHIgItin2YTYtdi52YjYryDYpdmE2Ykg2KPZiNmEINi52YbYtdixIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIFBSUEdSUEggY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjEyNAorbXNnaWQgImdvIHVwIHRvIGZpcnN0IGxpbmUgb2YgcGFyYWdyYXBoIgorbXNnc3RyICLYp9mE2LXYudmI2K8g2KXZhNmJINin2YTYs9i32LEg2KfZhNij2YjZhCDZhdmGINin2YTZgdmC2LHYqSIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBQUkRJRkNIQVIgY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjEzMjAKK21zZ2lkICJnbyB1cCB0byBuZWFyZXN0IGxpbmUgd2l0aCBkaWZmZXJlbnQgY2hhcmFjdGVyIgorbXNnc3RyICLYp9mE2LXYudmI2K8g2KXZhNmJINij2YLYsdioINiz2LfYsSDYqNit2LHZgSDZhdiu2KrZhNmBIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIFBSRElGTE4gY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjUwCittc2dpZCAiZ28gdXAgdG8gbmVhcmVzdCBsaW5lIHdpdGggZGlmZmVyZW50IGNvbnRlbnQiCittc2dzdHIgItin2YTYtdi52YjYryDYpdmE2Ykg2KPZgtix2Kgg2LPYt9ixINio2YXYrdiq2YjZiSDZhdiu2KrZhNmBIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIEFUVFJVUCBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6NjgKK21zZ2lkICJnbyB1cCB0byBuZWFyZXN0IGxpbmUgd2l0aCBkaWZmZXJlbnQgaGlnaGxpZ2h0aW5nIgorbXNnc3RyICLYp9mE2LXYudmI2K8g2KXZhNmJINij2YLYsdioINiz2LfYsSDZhdi5INiq2YXZitmK2LIg2YXYrtiq2YTZgSIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBQUklOREVOVCBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6MTI1NworbXNnaWQgImdvIHVwIHRvIG5lYXJlc3QgbGluZSB3aXRoIGxlc3MgaW5kZW50IHRoYW4gY2hhcmFjdGVyIgorbXNnc3RyICLYp9mE2LXYudmI2K8g2KXZhNmJINij2YLYsdioINiz2LfYsSDYqNmF2LPYp9mB2Kkg2KPYrdix2YEg2KjYp9iv2KbYqSDYo9mC2YQiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgUFJQUk9NUFQgY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjE0MgorbXNnaWQgImdvIHVwIHRvIHByZXZpb3VzIGNvbW1hbmQgcHJvbXB0IgorbXNnc3RyICLYp9mE2LXYudmI2K8g2KXZhNmJINmF2YjYrNmHINin2YTYo9mI2KfZhdixINin2YTYs9in2KjZgiIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBNRU5VX1BSRVZfSVRFTSBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6NDg0Cittc2dpZCAiZ28gdXAgdG8gcHJldmlvdXMgaXRlbSIKK21zZ3N0ciAi2KfZhNi12LnZiNivINil2YTZiSDYp9mE2LnZhti12LEg2KfZhNiz2KfYqNmCIgorCisjLiBHCisjOiBQcm9ncmFtcy9jbWRfdXRpbHMuYzoxNDYKK21zZ2lkICJncmVlbiIKK21zZ3N0ciAi2KPYrti22LEiCisKKyM6IFByb2dyYW1zL3BnbXByaXZzX2xpbnV4LmM6MjE2NworbXNnaWQgImdyb3VwIHBlcm1pc3Npb25zIGFkZGVkIgorbXNnc3RyICLYqtmF2Kog2KXYttin2YHYqSDYo9iw2YjZhtin2Kog2KfZhNmF2KzZhdmI2LnYqSIKKworIzogUHJvZ3JhbXMvY21kX21pc2NlbGxhbmVvdXMuYzoyMTMKK21zZ2lkICJoZWxwIG5vdCBhdmFpbGFibGUiCittc2dzdHIgItin2YTZhdiz2KfYudiv2Kkg2LrZitixINmF2KrZiNmB2LHYqSIKKworIzogUHJvZ3JhbXMvc2NyX2hlbHAuYzoyMjkKK21zZ2lkICJoZWxwIHNjcmVlbiBub3QgcmVhZGFibGUiCittc2dzdHIgIti02KfYtNipINin2YTZhdiz2KfYudiv2Kkg2LrZitixINmC2KfYqNmE2Kkg2YTZhNmC2LHYp9ih2KkiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgS0VZX0hPTUUgY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjE1OTEKK21zZ2lkICJob21lIGtleSIKK21zZ3N0ciAi2YXZgdiq2KfYrSDYp9mE2KjYr9in2YrYqSIKKworIzogUHJvZ3JhbXMvY29uZmlnLmM6NTcwCittc2dpZCAiaWRlbnRpZmllciwuLi4iCittc2dzdHIgItin2YTZhdi52LHZgSDYjCAuLi4iCisKKyM6IERyaXZlcnMvQnJhaWxsZS9CYXVtL2JyYWlsbGUuYzoxMTQ4Cittc2dpZCAiaWRsZSB0aW1lb3V0IgorbXNnc3RyICLZhdmH2YTYqSDYp9mE2K7ZhdmI2YQiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgU0FZX0hJR0hFUiBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6MTE3NQorbXNnaWQgImluY3JlYXNlIHNwZWFraW5nIHBpdGNoIgorbXNnc3RyICLYstmK2KfYr9ipINit2K/YqSDYp9mE2YPZhNin2YUiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgU0FZX0ZBU1RFUiBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6NTU3Cittc2dpZCAiaW5jcmVhc2Ugc3BlYWtpbmcgcmF0ZSIKK21zZ3N0ciAi2LLZitin2K/YqSDYs9ix2LnYqSDYp9mE2YPZhNin2YUiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgU0FZX0xPVURFUiBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6NTcxCittc2dpZCAiaW5jcmVhc2Ugc3BlYWtpbmcgdm9sdW1lIgorbXNnc3RyICLYstmK2KfYr9ipINmF2LPYqtmI2Ykg2LXZiNiqINin2YTZg9mE2KfZhSIKKworIzogUHJvZ3JhbXMvY29yZS5jOjExMjgKK21zZ2lkICJpbmRlbnQiCittc2dzdHIgItin2YTZhdit2KfYsNin2KkiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgUEFTVEVfSElTVE9SWSBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6MTM1NAorbXNnaWQgImluc2VydCBjbGlwYm9hcmQgaGlzdG9yeSBlbnRyeSBhZnRlciBzY3JlZW4gY3Vyc29yIgorbXNnc3RyICLYpdiv2LHYp9isINmF2K3YqtmI2Ykg2KfZhNiw2KfZg9ix2Kkg2KfZhNmF2K3ZgdmI2Lgg2KjYudivINmF2KTYtNixINin2YTYtNin2LTYqSIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBQQVNURSBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6NjAwCittc2dpZCAiaW5zZXJ0IGNsaXBib2FyZCB0ZXh0IGFmdGVyIHNjcmVlbiBjdXJzb3IiCittc2dzdHIgItil2K/Yrtin2YQg2YbYtSDYp9mE2K3Yp9mB2LjYqSDYqNi52K8g2YXYpNi02LEg2KfZhNi02KfYtNipIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIEhPU1RfUEFTVEUgY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjEwNDcKK21zZ2lkICJpbnNlcnQgaG9zdCBjbGlwYm9hcmQgdGV4dCBhZnRlciBzY3JlZW4gY3Vyc29yIgorbXNnc3RyICLYpdiv2K7Yp9mEINmG2LUg2KfZhNit2KfZgdi42Kkg2KfZhNmF2LbZitmB2Kkg2KjYudivINmF2KTYtNixINin2YTYtNin2LTYqSIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBLRVlfSU5TRVJUIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDoxNjA3Cittc2dpZCAiaW5zZXJ0IGtleSIKK21zZ3N0ciAi2YXZgdiq2KfYrSDYp9mE2KXYr9ix2KfYrCIKKworIzogUHJvZ3JhbXMvcHJvZ3JhbS5jOjE2NgorbXNnaWQgImluc3RhbGwgcGF0aCBub3QgYWJzb2x1dGUiCittc2dzdHIgItmF2LPYp9ixINin2YTYqtir2KjZitiqINmE2YrYsyDZhdi32YTZgtinIgorCisjOiBQcm9ncmFtcy9vcHRpb25zLmM6MTA0Cittc2dpZCAiaW52YWxpZCBjb3VudGVyIHNldHRpbmciCittc2dzdHIgItil2LnYr9in2K8g2KfZhNi52K/Yp9ivINi62YrYsSDYtdin2YTYrSIKKworIzogUHJvZ3JhbXMvZGF0YWZpbGUuYzozMTgKK21zZ2lkICJpbnZhbGlkIGVzY2FwZSBzZXF1ZW5jZSIKK21zZ3N0ciAi2KrYs9mE2LPZhCDZh9ix2YjYqCDYutmK2LEg2LXYp9mE2K0iCisKKyM6IFByb2dyYW1zL29wdGlvbnMuYzoxMTMKK21zZ2lkICJpbnZhbGlkIGZsYWcgc2V0dGluZyIKK21zZ3N0ciAi2KXYudiv2KfYryDYpdi02KfYsdipINi62YrYsSDYtdin2YTYrSIKKworIzogUHJvZ3JhbXMvY29uZmlnLmM6Mjg2MworbXNnaWQgImludmFsaWQgbWVzc2FnZSBob2xkIHRpbWVvdXQiCittc2dzdHIgItix2LPYp9mE2Kkg2YXZh9mE2Kkg2KfZhNin2YbYqti42KfYsSDYutmK2LEg2LXYp9mE2K3YqSIKKworIy4gdGhlIG9wZXJhbmQgZm9yIGFuIG9wdGlvbiBpcyBpbnZhbGlkCisjOiBQcm9ncmFtcy9vcHRpb25zLmM6NTk0Cittc2dpZCAiaW52YWxpZCBvcGVyYW5kIgorbXNnc3RyICLZhdi52KfZhdmEINi62YrYsSDYtdin2YTYrSIKKworIzogUHJvZ3JhbXMvYnJsYXBpX3NlcnZlci5jOjQ1MTYKK21zZ2lkICJpbnZhbGlkIHRocmVhZCBzdGFjayBzaXplIgorbXNnc3RyICLYrdis2YUg2YPZiNmF2Kkg2KfZhNiu2YrYtyDYutmK2LEg2LXYp9mE2K0iCisKKyM6IERyaXZlcnMvQnJhaWxsZS9CcmFpbGxlTGl0ZS9icmFpbGxlLmM6NTkwCisjOiBEcml2ZXJzL0JyYWlsbGUvQnJhaWxsZUxpdGUvYnJhaWxsZS5jOjY2OAorbXNnaWQgImtleWJvYXJkIGVtdSBvZmYiCittc2dzdHIgItmF2K3Yp9mD2KfYqSDZhNmI2K3YqSDYp9mE2YXZgdin2KrZititINiq2LnYt9mK2YQiCisKKyM6IERyaXZlcnMvQnJhaWxsZS9CcmFpbGxlTGl0ZS9icmFpbGxlLmM6NTg5Cittc2dpZCAia2V5Ym9hcmQgZW11IG9uIgorbXNnc3RyICLZhdit2KfZg9in2Kkg2YTZiNit2Kkg2KfZhNmF2YHYp9iq2YrYrSDYqti02LrZitmEIgorCisjLiBMICBCCisjOiBQcm9ncmFtcy9jbWRfdXRpbHMuYzoxNTMKK21zZ2lkICJsaWdodCBibHVlIgorbXNnc3RyICLYo9iy2LHZgiDZgdin2KrYrSIKKworIy4gTCBHQgorIzogUHJvZ3JhbXMvY21kX3V0aWxzLmM6MTU1Cittc2dpZCAibGlnaHQgY3lhbiIKK21zZ3N0ciAi2LbZiNihINiz2YXYp9mI2YoiCisKKyMuIEwgRworIzogUHJvZ3JhbXMvY21kX3V0aWxzLmM6MTU0Cittc2dpZCAibGlnaHQgZ3JlZW4iCittc2dzdHIgItij2K7YttixINmB2KfYqtitIgorCisjLiBSR0IKKyM6IFByb2dyYW1zL2NtZF91dGlscy5jOjE1MQorbXNnaWQgImxpZ2h0IGdyZXkiCittc2dzdHIgItix2YXYp9iv2Yog2YHYp9iq2K0iCisKKyMuIExSIEIKKyM6IFByb2dyYW1zL2NtZF91dGlscy5jOjE1NworbXNnaWQgImxpZ2h0IG1hZ2VudGEiCittc2dzdHIgItij2LHYrNmI2KfZhtmKINmB2KfYqtitIgorCisjLiBMUgorIzogUHJvZ3JhbXMvY21kX3V0aWxzLmM6MTU2Cittc2dpZCAibGlnaHQgcmVkIgorbXNnc3RyICLYo9it2YXYsSDZgdin2KrYrSIKKworIzogUHJvZ3JhbXMvY21kX3NwZWVjaC5jOjUwMAorbXNnaWQgImxpbmUiCittc2dzdHIgItiz2LfYsSIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBDT1BZX0xJTkUgY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjEyMzkKK21zZ2lkICJsaW5lYXIgY29weSB0byBjaGFyYWN0ZXIiCittc2dzdHIgItmG2LPYrtipINiu2LfZitipINmE2YTYrdix2YEiCisKKyM6IFByb2dyYW1zL2NvbmZpZy5jOjc1MAorbXNnaWQgImx2bHxjYXQsLi4uIgorbXNnc3RyICJsdmx8Y2F0LC4uLiIKKworIy4gUiBCCisjOiBQcm9ncmFtcy9jbWRfdXRpbHMuYzoxNDkKK21zZ2lkICJtYWdlbnRhIgorbXNnc3RyICLYo9ix2KzZiNin2YbZiiIKKworIy4gdGhlIG9wZXJhbmQgZm9yIGEgc3RyaW5nIG9wdGlvbiBoYXNuJ3QgYmVlbiBzcGVjaWZpZWQKKyM6IFByb2dyYW1zL29wdGlvbnMuYzo1ODgKK21zZ2lkICJtaXNzaW5nIG9wZXJhbmQiCittc2dzdHIgItin2YTZhdi52KfZhdmEINin2YTZhdmB2YLZiNivIgorCisjOiBQcm9ncmFtcy9wYXJzZS5jOjQ3MgorbXNnaWQgIm1pc3NpbmcgcGFyYW1ldGVyIG5hbWUiCittc2dzdHIgItin2LPZhSDYp9mE2YXYudmE2YXYqSDZhdmB2YLZiNivIgorCisjOiBQcm9ncmFtcy9wYXJzZS5jOjQ1OAorbXNnaWQgIm1pc3NpbmcgcGFyYW1ldGVyIHF1YWxpZmllciIKK21zZ3N0ciAi2YXYpNmH2YQg2KfZhNmF2LnZhNmF2Kkg2YXZgdmC2YjYryIKKworIzogUHJvZ3JhbXMvcGFyc2UuYzo0MzQKK21zZ2lkICJtaXNzaW5nIHBhcmFtZXRlciB2YWx1ZSIKK21zZ3N0ciAi2YLZitmF2Kkg2KfZhNmF2LnZhNmF2Kkg2YXZgdmC2YjYr9ipIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIEdVSV9JVEVNX0ZSU1QgY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjExNDAKK21zZ2lkICJtb3ZlIHRvIHRoZSBmaXJzdCBpdGVtIGluIHRoZSBzY3JlZW4gYXJlYSIKK21zZ3N0ciAi2KfZhNin2YbYqtmC2KfZhCDYpdmE2Ykg2KfZhNi52YbYtdixINin2YTYo9mI2YQg2YHZiiDZhdmG2LfZgtipINin2YTYtNin2LTYqSIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBHVUlfSVRFTV9MQVNUIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDoxMTYxCittc2dpZCAibW92ZSB0byB0aGUgbGFzdCBpdGVtIGluIHRoZSBzY3JlZW4gYXJlYSIKK21zZ3N0ciAi2KfZhNin2YbYqtmC2KfZhCDYpdmE2Ykg2KfZhNi52YbYtdixINin2YTYo9iu2YrYsSDZgdmKINmF2YbYt9mC2Kkg2KfZhNi02KfYtNipIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIEdVSV9JVEVNX05FWFQgY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjExNTQKK21zZ2lkICJtb3ZlIHRvIHRoZSBuZXh0IGl0ZW0gaW4gdGhlIHNjcmVlbiBhcmVhIgorbXNnc3RyICLYp9mE2KfZhtiq2YLYp9mEINil2YTZiSDYp9mE2LnZhti12LEg2KfZhNiq2KfZhNmKINmB2Yog2YXZhti32YLYqSDYp9mE2LTYp9i02KkiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgR1VJX0lURU1fUFJFViBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6MTE0NworbXNnaWQgIm1vdmUgdG8gdGhlIHByZXZpb3VzIGl0ZW0gaW4gdGhlIHNjcmVlbiBhcmVhIgorbXNnc3RyICLYp9mE2KfZhtiq2YLYp9mEINil2YTZiSDYp9mE2LnZhti12LEg2KfZhNiz2KfYqNmCINmB2Yog2YXZhti32YLYqSDYp9mE2LTYp9i02KkiCisKKyM6IFByb2dyYW1zL21zZ3Rlc3QuYzo1NworbXNnaWQgIm5hbWUiCittc2dzdHIgItin2YTYp9iz2YUiCisKKyM6IFByb2dyYW1zL2NvbmZpZy5jOjQzMyBQcm9ncmFtcy9jb25maWcuYzo0ODUgUHJvZ3JhbXMvY29uZmlnLmM6NTM4CisjOiBQcm9ncmFtcy9jb25maWcuYzo1NjAgUHJvZ3JhbXMvY29uZmlnLmM6NjM4IFByb2dyYW1zL2NvbmZpZy5jOjY1NworIzogUHJvZ3JhbXMvY29uZmlnLmM6NzAwCittc2dpZCAibmFtZT12YWx1ZSwuLi4iCittc2dzdHIgItin2YTYp9iz2YUgPSDYp9mE2YLZitmF2Kkg2IwgLi4uIgorCisjOiBEcml2ZXJzL0JyYWlsbGUvSXJpcy9icmFpbGxlLmM6MTUxMAorbXNnaWQgIm5hdGl2ZSIKK21zZ3N0ciAi2KPYtdmE2YoiCisKKyM6IFByb2dyYW1zL2NvbmZpZy5jOjEyNDgKK21zZ2lkICJubyBrZXkgYmluZGluZ3MiCittc2dzdHIgItmE2Kcg2KrZiNis2K8g2KfYrtiq2LXYp9ix2KfYqiIKKworIzogUHJvZ3JhbXMvc2NyX2RyaXZlci5jOjM5Cittc2dpZCAibm8gc2NyZWVuIgorbXNnc3RyICLZhNinINiq2YjYrNivINi02KfYtNipIgorCisjOiBQcm9ncmFtcy9jb25maWcuYzoxMTYKK21zZ2lkICJub25lIgorbXNnc3RyICLZhNinINi02YrYoSIKKworIzogUHJvZ3JhbXMvY29uZmlnLmM6MTUzNworbXNnaWQgIm5vdCBzYXZlZCIKK21zZ3N0ciAi2YTZhSDZitiq2YUg2KfZhNit2YHYuCIKKworIzogUHJvZ3JhbXMvcGdtcHJpdnNfbGludXguYzoyMDE4Cittc2dpZCAibm90IHN3aXRjaGluZyB0byBhbiB1bnByaXZpbGVnZWQgdXNlciIKK21zZ3N0ciAi2LnYr9mFINin2YTYqtio2K/ZitmEINil2YTZiSDZhdiz2KrYrtiv2YUg2YTYpyDZitiq2YXYqti5INio2KfZhdiq2YrYp9iy2KfYqiIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBHVUlfQVBQX0FMRVJUUyBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6MTExMgorbXNnaWQgIm9wZW4gdGhlIGFwcGxpY2F0aW9uIGFsZXJ0cyB3aW5kb3ciCittc2dzdHIgItmB2KrYrSDZhtin2YHYsNipINiq2YbYqNmK2YfYp9iqINin2YTYqti32KjZitmCIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIEdVSV9BUFBfTElTVCBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6MTA5OAorbXNnaWQgIm9wZW4gdGhlIGFwcGxpY2F0aW9uIGxpc3Qgd2luZG93IgorbXNnc3RyICLZgdiq2K0g2YbYp9mB2LDYqSDZgtin2KbZhdipINin2YTYqti32KjZitmCIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIEdVSV9BUFBfTUVOVSBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6MTEwNQorbXNnaWQgIm9wZW4gdGhlIGFwcGxpY2F0aW9uLXNwZWNpZmljIG1lbnUiCittc2dzdHIgItmB2KrYrSDYp9mE2YLYp9im2YXYqSDYp9mE2K7Yp9i12Kkg2KjYp9mE2KrYt9io2YrZgtin2KoiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgR1VJX0JSTF9BQ1RJT05TIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDoxMDYxCittc2dpZCAib3BlbiB0aGUgYnJhaWxsZSBhY3Rpb25zIHdpbmRvdyIKK21zZ3N0ciAi2YHYqtitINmG2KfZgdiw2Kkg2KXYrNix2KfYodin2Kog2KjYsdin2YrZhCIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBHVUlfREVWX09QVElPTlMgY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjEwOTEKK21zZ2lkICJvcGVuIHRoZSBkZXZpY2Ugb3B0aW9ucyB3aW5kb3ciCittc2dzdHIgItmB2KrYrSDZhtin2YHYsNipINiu2YrYp9ix2KfYqiDYp9mE2KzZh9in2LIiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgR1VJX0RFVl9TRVRUSU5HUyBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6MTA4NAorbXNnaWQgIm9wZW4gdGhlIGRldmljZSBzZXR0aW5ncyB3aW5kb3ciCittc2dzdHIgItmB2KrYrSDZhtin2YHYsNipINil2LnYr9in2K/Yp9iqINin2YTYrNmH2KfYsiIKKworIzogUHJvZ3JhbXMvb3B0aW9ucy5jOjIwMgorbXNnaWQgIm9wdGlvbiIKK21zZ3N0ciAi2K7Zitin2LEiCisKKyM6IFByb2dyYW1zL3BnbXByaXZzX2xpbnV4LmM6MjE1MgorbXNnaWQgIm93bmVyc2hpcCBjbGFpbWVkIgorbXNnc3RyICLYqtmFINin2YTYrdi12YjZhCDYudmE2Ykg2KfZhNmF2YTZg9mK2KkiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgS0VZX1BBR0VfRE9XTiBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6MTU4MworbXNnaWQgInBhZ2UtZG93biBrZXkiCittc2dzdHIgItmF2YHYqtin2K0g2LXZgdit2Kkg2YTYo9iz2YHZhCIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBLRVlfUEFHRV9VUCBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6MTU3NQorbXNnaWQgInBhZ2UtdXAga2V5IgorbXNnc3RyICLZhdmB2KrYp9itINi12YHYrdipINmE2KPYudmE2YkiCisKKyM6IFByb2dyYW1zL21zZ3Rlc3QuYzo0MgorbXNnaWQgInBhdGgiCittc2dzdHIgItin2YTZhdiz2KfYsSIKKworIzogUHJvZ3JhbXMvY29uZmlnLmM6MjgzNgorbXNnaWQgInBpZCBmaWxlIG5vdCBzcGVjaWZpZWQiCittc2dzdHIgItmF2YTZgSBwaWQg2LrZitixINmF2K3Yr9ivIgorCisjOiBQcm9ncmFtcy9wcm9ncmFtLmM6MzA4Cittc2dpZCAicGlkIGZpbGUgb3BlbiBlcnJvciIKK21zZ3N0ciAi2K7Yt9ijINmB2KrYrSDZhdmE2YEgcGlkIgorCisjOiBQcm9ncmFtcy9zcGsuYzoyMzIKK21zZ2lkICJwaXRjaCIKK21zZ3N0ciAi2K3Yr9ipINin2YTYtdmI2KoiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgU0VUTEVGVCBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6MTI4MworbXNnaWQgInBsYWNlIGxlZnQgZW5kIG9mIGJyYWlsbGUgd2luZG93IGF0IGNoYXJhY3RlciIKK21zZ3N0ciAi2LbYuSDYp9mE2LfYsdmBINin2YTYo9mK2LPYsSDZhdmGINmG2KfZgdiw2Kkg2KjYsdin2YrZhCDYudmE2Ykg2KfZhNit2LHZgSIKKworIzogRHJpdmVycy9CcmFpbGxlL0JhdW0vYnJhaWxsZS5jOjExNDcKK21zZ2lkICJwb3dlciBzd2l0Y2giCittc2dzdHIgItmF2YHYqtin2K0g2KfZhNi32KfZgtipIgorCisjOiBQcm9ncmFtcy9jb25maWcuYzo2ODAKK21zZ2lkICJxdWFsaXR5IgorbXNnc3RyICLYp9mE2KzZiNiv2KkiCisKKyM6IFByb2dyYW1zL3Nway5jOjIwNgorbXNnaWQgInJhdGUiCittc2dzdHIgItin2YTYs9ix2LnYqSIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBDT1BZX1JFQ1QgY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjEyMzEKK21zZ2lkICJyZWN0YW5ndWxhciBjb3B5IHRvIGNoYXJhY3RlciIKK21zZ3N0ciAi2YbYs9iu2Kkg2YXYs9iq2LfZitmE2Kkg2YTZhNit2LHZgSIKKworIy4gUgorIzogUHJvZ3JhbXMvY21kX3V0aWxzLmM6MTQ4Cittc2dpZCAicmVkIgorbXNnc3RyICLYo9it2YXYsSIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBSRUZSRVNIIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDoxMDA1Cittc2dpZCAicmVmcmVzaCBicmFpbGxlIGRpc3BsYXkiCittc2dzdHIgItiq2K3Yr9mK2Ksg2LTYp9i02Kkg2KjYsdin2YrZhCIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBSRUZSRVNIX0xJTkUgY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjE0MTMKK21zZ2lkICJyZWZyZXNoIGJyYWlsbGUgbGluZSIKK21zZ3N0ciAi2KrYrdiv2YrYqyDYs9i32LEg2KjYsdin2YrZhCIKKworIzogUHJvZ3JhbXMvY29uZmlnLmM6NDkyCittc2dpZCAicmVnZXhwLC4uLiIKK21zZ3N0ciAicmVnZXhwINiMIC4uLiIKKworIzogUHJvZ3JhbXMvY29uZmlnLmM6MjA4MQorIywgYy1mb3JtYXQKK21zZ2lkICJyZWluaXRpYWxpemluZyBicmFpbGxlIGRyaXZlciIKK21zZ3N0ciAi2KXYudin2K/YqSDYqti02LrZitmEINiz2KfYptmC2Kkg2KjYsdin2YrZhCIKKworIzogUHJvZ3JhbXMvY29uZmlnLmM6MjU5NAorIywgYy1mb3JtYXQKK21zZ2lkICJyZWluaXRpYWxpemluZyBzY3JlZW4gZHJpdmVyIgorbXNnc3RyICLYpdi52KfYr9ipINiq2LTYutmK2YQg2LPYp9im2YLYqSDYp9mE2LTYp9i02KkiCisKKyM6IFByb2dyYW1zL2NvbmZpZy5jOjIzOTQKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVpbml0aWFsaXppbmcgc3BlZWNoIGRyaXZlciIKK21zZ3N0ciAi2KXYudin2K/YqSDYqti02LrZitmEINiz2KfYptmC2Kkg2KfZhNmG2LfZgiIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBTRVRNQVJLIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDoxMjkxCittc2dpZCAicmVtZW1iZXIgY3VycmVudCBicmFpbGxlIHdpbmRvdyBwb3NpdGlvbiIKK21zZ3N0ciAi2KrYsNmD2LEg2KfZhNmI2LbYuSDYp9mE2K3Yp9mE2Yog2YTZhtin2YHYsNipINio2LHYp9mK2YQiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgQUxFUlQgY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjE0NDUKK21zZ2lkICJyZW5kZXIgYW4gYWxlcnQiCittc2dzdHIgItiq2YLYr9mK2YUg2KrZhtio2YrZhyIKKworIzogRHJpdmVycy9CcmFpbGxlL0JyYWlsbGVMaXRlL2JyYWlsbGUuYzo2MDEKKyM6IERyaXZlcnMvQnJhaWxsZS9CcmFpbGxlTGl0ZS9icmFpbGxlLmM6NzgwCisjOiBEcml2ZXJzL0JyYWlsbGUvQnJhaWxsZUxpdGUvYnJhaWxsZS5jOjc4MgorIzogRHJpdmVycy9CcmFpbGxlL0JyYWlsbGVMaXRlL2JyYWlsbGUuYzo3OTEKK21zZ2lkICJyZXBlYXQgY291bnQiCittc2dzdHIgItiq2YPYsdin2LEg2KfZhNi52K8iCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgUkVTVEFSVEJSTCBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6NjA3Cittc2dpZCAicmVzdGFydCBicmFpbGxlIGRyaXZlciIKK21zZ3N0ciAi2KXYudin2K/YqSDYqti02LrZitmEINiz2KfYptmC2Kkg2KfZhNio2LHYp9mK2YQiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgUkVTVEFSVFNQRUVDSCBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6NjE0Cittc2dpZCAicmVzdGFydCBzcGVlY2ggZHJpdmVyIgorbXNnc3RyICLYpdi52KfYr9ipINiq2LTYutmK2YQg2LPYp9im2YLYqSDYp9mE2YPZhNin2YUiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgQ0xJUF9SRVNUT1JFIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDo4NjQKK21zZ2lkICJyZXN0b3JlIGNsaXBib2FyZCBmcm9tIGRpc2siCittc2dzdHIgItin2LPYqti52KfYr9ipINin2YTYrdin2YHYuNipINmF2YYg2KfZhNmC2LHYtSIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBQUkVGTE9BRCBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6NDU3Cittc2dpZCAicmVzdG9yZSBwcmVmZXJlbmNlcyBmcm9tIGRpc2siCittc2dzdHIgItin2LPYqti52KfYr9ipINin2YTYqtmB2LbZitmE2KfYqiDZhdmGINin2YTZgtix2LUiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgR1VJX0FSRUFfQUNUViBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6MTExOQorbXNnaWQgInJldHVybiB0byB0aGUgYWN0aXZlIHNjcmVlbiBhcmVhIgorbXNnc3RyICLYp9mE2LnZiNiv2Kkg2KXZhNmJINmF2YbYt9mC2Kkg2KfZhNi02KfYtNipINin2YTZhti02LfYqSIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBDTElQX1NBVkUgY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjg1NworbXNnaWQgInNhdmUgY2xpcGJvYXJkIHRvIGRpc2siCittc2dzdHIgItit2YHYuCDYp9mE2K3Yp9mB2LjYqSDYudmE2Ykg2KfZhNmC2LHYtSIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBQUkVGU0FWRSBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6NDUwCittc2dpZCAic2F2ZSBwcmVmZXJlbmNlcyB0byBkaXNrIgorbXNnc3RyICLYrdmB2Lgg2KfZhNiq2YHYttmK2YTYp9iqINi52YTZiSDYp9mE2YLYsdi1IgorCisjOiBQcm9ncmFtcy94YnJsYXBpLmM6OTEKK21zZ2lkICJzY2hlbWUrLi4uIgorbXNnc3RyICLZhdiu2LfYtyArIC4uLiIKKworIzogUHJvZ3JhbXMvY29uZmlnLmM6MjQ3MAorbXNnaWQgInNjcmVlbiBkcml2ZXIgbm90IGxvYWRhYmxlIgorbXNnc3RyICLYs9in2KbZgtipINin2YTYtNin2LTYqSDYutmK2LEg2YLYp9io2YTYqSDZhNmE2KrYrdmF2YrZhCIKKworIzogUHJvZ3JhbXMvY29uZmlnLmM6MjU5MQorbXNnaWQgInNjcmVlbiBkcml2ZXIgcmVzdGFydGluZyIKK21zZ3N0ciAi2YrYqtmFINil2LnYp9iv2Kkg2KrYtNi62YrZhCDYs9in2KbZgtipINin2YTYtNin2LTYqSIKKworIzogUHJvZ3JhbXMvY21kX21pc2NlbGxhbmVvdXMuYzoxNzEKK21zZ2lkICJzY3JlZW4gZHJpdmVyIHN0b3BwZWQiCittc2dzdHIgItiq2YjZgtmB2Kog2LPYp9im2YLYqSDYp9mE2LTYp9i02KkiCisKKyM6IERyaXZlcnMvU2NyZWVuL0FuZHJvaWQvc2NyZWVuLmM6MTg0Cittc2dpZCAic2NyZWVuIGxvY2tlZCIKK21zZ3N0ciAi2KfZhNi02KfYtNipINmF2LrZhNmC2KkiCisKKyM6IERyaXZlcnMvU2NyZWVuL0xpbnV4L3NjcmVlbi5jOjE1MzEKK21zZ2lkICJzY3JlZW4gbm90IGluIHRleHQgbW9kZSIKK21zZ3N0ciAi2KfZhNi02KfYtNipINmE2YrYs9iqINmB2Yog2YbZhdi3INin2YTZhti1IgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIFBSU0VBUkNIIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDoxNTgKK21zZ2lkICJzZWFyY2ggYmFja3dhcmQgZm9yIGNsaXBib2FyZCB0ZXh0IgorbXNnc3RyICLYp9mE2KjYrdirINmE2YTYrtmE2YEg2LnZhiDZhti1INin2YTYrdin2YHYuNipIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIE5YU0VBUkNIIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDoxNjUKK21zZ2lkICJzZWFyY2ggZm9yd2FyZCBmb3IgY2xpcGJvYXJkIHRleHQiCittc2dzdHIgItin2YTYqNit2Ksg2YTZhNij2YXYp9mFINi52YYg2YbYtSDYp9mE2K3Yp9mB2LjYqSIKKworIzogUHJvZ3JhbXMvbWVudS5jOjQ2OQorbXNnaWQgInNlY29uZHMiCittc2dzdHIgItir2YjYp9mG2YoiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgVFhUU0VMX0FMTCBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6MTAyNgorbXNnaWQgInNlbGVjdCBhbGwgb2YgdGhlIHRleHQiCittc2dzdHIgItit2K/YryDZg9mEINin2YTZhti1IgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIE1FTlVfTkVYVF9TRVRUSU5HIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDo1MDcKK21zZ2lkICJzZWxlY3QgbmV4dCBjaG9pY2UiCittc2dzdHIgItit2K/YryDYp9mE2K7Zitin2LEg2KfZhNiq2KfZhNmKIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIE1FTlVfUFJFVl9TRVRUSU5HIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDo1MDAKK21zZ2lkICJzZWxlY3QgcHJldmlvdXMgY2hvaWNlIgorbXNnc3RyICLYrdiv2K8g2KfZhNiu2YrYp9ixINin2YTYs9in2KjZgiIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBUVU5FUyBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6Mzk5Cittc2dpZCAic2V0IGFsZXJ0IHR1bmVzIG9uL29mZiIKK21zZ3N0ciAi2KrYtNi62YrZhCDZiNiq2LnYt9mK2YQg2YbYutmF2KfYqiDYp9mE2KrZhtio2YrZhyIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBBVFRSQkxJTksgY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjM4MworbXNnaWQgInNldCBhdHRyaWJ1dGUgYmxpbmtpbmcgb24vb2ZmIgorbXNnc3RyICLYqti02LrZitmEINmI2KrYudi32YrZhCDYs9mF2Kkg2KfZhNmI2YXZiti2IgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIEFUVFJWSVMgY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjM3NQorbXNnaWQgInNldCBhdHRyaWJ1dGUgdW5kZXJsaW5pbmcgb24vb2ZmIgorbXNnc3RyICLYqti02LrZitmEINmI2KrYudi32YrZhCDYs9mF2Kkg2KfZhNiq2LPYt9mK2LEiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgU0VUX0FUVFJJQlVURVNfVEFCTEUgY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjEzNzAKK21zZ2lkICJzZXQgYXR0cmlidXRlcyB0YWJsZSIKK21zZ3N0ciAi2LbYqNi3INiz2YXYqSDYp9mE2KzYr9mI2YQiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgQVVUT1JFUEVBVCBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6NDA3Cittc2dpZCAic2V0IGF1dG9yZXBlYXQgb24vb2ZmIgorbXNnc3RyICLYqti02LrZitmEINmI2KrYudi32YrZhCDYp9mE2KrZg9ix2KfYsSDYp9mE2KrZhNmC2KfYptmKIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIEFTUEtfQ01QX1dPUkRTIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDo3MTIKK21zZ2lkICJzZXQgYXV0b3NwZWFrIGNvbXBsZXRlZCB3b3JkcyBvbi9vZmYiCittc2dzdHIgItiq2LTYutmK2YQg2YjYqti52LfZitmEINin2YTZhti32YIg2KfZhNiq2YTZgtin2KbZiiDZhNmE2YPZhNmF2KfYqiDYp9mE2YXZg9iq2YXZhNipIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIEFTUEtfREVMX0NIQVJTIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDo2OTYKK21zZ2lkICJzZXQgYXV0b3NwZWFrIGRlbGV0ZWQgY2hhcmFjdGVycyBvbi9vZmYiCittc2dzdHIgItiq2LTYutmK2YQg2YjYqti52LfZitmEINin2YTZhti32YIg2KfZhNiq2YTZgtin2KbZiiDZhNmE2K3YsdmI2YEg2KfZhNmF2K3YsNmI2YHYqSIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBBU1BLX0lOREVOVCBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6OTk4Cittc2dpZCAic2V0IGF1dG9zcGVhayBpbmRlbnQgb2YgY3VycmVudCBsaW5lIG9uL29mZiIKK21zZ3N0ciAi2KrYtNi62YrZhCDZiNiq2LnYt9mK2YQg2KfZhNmG2LfZgiDYp9mE2KrZhNmC2KfYptmKINmE2YXYrdin2LDYp9ipINin2YTYs9i32LEg2KfZhNit2KfZhNmKIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIEFTUEtfSU5TX0NIQVJTIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDo2ODgKK21zZ2lkICJzZXQgYXV0b3NwZWFrIGluc2VydGVkIGNoYXJhY3RlcnMgb24vb2ZmIgorbXNnc3RyICLYqti02LrZitmEINmI2KrYudi32YrZhCDYp9mE2YbYt9mCINin2YTYqtmE2YLYp9im2Yog2YTZhNit2LHZiNmBINin2YTZhdiv2K7ZhNipIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIEFVVE9TUEVBSyBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6NDE1Cittc2dpZCAic2V0IGF1dG9zcGVhayBvbi9vZmYiCittc2dzdHIgItiq2LTYutmK2YQg2YjYqti52LfZitmEINin2YTZhti32YIg2KfZhNiq2YTZgtin2KbZiiIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBBU1BLX1JFUF9DSEFSUyBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6NzA0Cittc2dpZCAic2V0IGF1dG9zcGVhayByZXBsYWNlZCBjaGFyYWN0ZXJzIG9uL29mZiIKK21zZ3N0ciAi2KrYtNi62YrZhCDZiNiq2LnYt9mK2YQg2KfZhNmG2LfZgiDYp9mE2KrZhNmC2KfYptmKINmE2YTYrdix2YjZgSDYp9mE2YXZj9iz2KrYqNiv2YTYqSIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBBU1BLX1NFTF9DSEFSIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDo2ODAKK21zZ2lkICJzZXQgYXV0b3NwZWFrIHNlbGVjdGVkIGNoYXJhY3RlciBvbi9vZmYiCittc2dzdHIgItiq2LTYutmK2YQg2YjYqti52LfZitmEINin2YTZhti32YIg2KfZhNiq2YTZgtin2KbZiiDZhNmE2K3YsdmBINin2YTZhdit2K/YryIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBBU1BLX1NFTF9MSU5FIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDo2NzIKK21zZ2lkICJzZXQgYXV0b3NwZWFrIHNlbGVjdGVkIGxpbmUgb24vb2ZmIgorbXNnc3RyICLYqti02LrZitmEINmI2KrYudi32YrZhCDYp9mE2YbYt9mCINin2YTYqtmE2YLYp9im2Yog2YTZhNiz2LfYsSDYp9mE2YXYrdiv2K8iCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgQlJMS0JEIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDo4ODAKK21zZ2lkICJzZXQgYnJhaWxsZSBrZXlib2FyZCBlbmFibGVkL2Rpc2FibGVkIgorbXNnc3RyICLYqti02LrZitmEINij2Ygg2KrYudi32YrZhCDZhNmI2K3YqSDZhdmB2KfYqtmK2K0g2KjYsdin2YrZhCIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBCUkxVQ0RPVFMgY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjg3MgorbXNnaWQgInNldCBicmFpbGxlIHR5cGluZyBtb2RlIGRvdHMvdGV4dCIKK21zZ3N0ciAi2LbYqNi3INmG2YXYtyDZg9iq2KfYqNipINio2LHYp9mK2YQg2KXZhdinINmG2LUg2KPZiCDZhtmC2KfYtyIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBDQVBCTElOSyBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6MzkxCittc2dpZCAic2V0IGNhcGl0YWwgbGV0dGVyIGJsaW5raW5nIG9uL29mZiIKK21zZ3N0ciAi2KrYtNi62YrZhCDZiNiq2LnYt9mK2YQg2KfZhNmI2YXZiti2INmE2YTYo9it2LHZgSDYp9mE2YPYqNmK2LHYqSIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBDT05UUkFDVEVEIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDoxMTkwCittc2dpZCAic2V0IGNvbnRyYWN0ZWQvY29tcHV0ZXIgYnJhaWxsZSIKK21zZ3N0ciAi2KfYrtiq2YrYp9ixINin2YTYqNix2KfZitmEINin2YTYrdin2LPZiNio2Yog2KPZiCDYp9mE2YXYrtiq2LXYsSIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBTRVRfQ09OVFJBQ1RJT05fVEFCTEUgY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjEzNzgKK21zZ2lkICJzZXQgY29udHJhY3Rpb24gdGFibGUiCittc2dzdHIgItin2K7YqtmK2KfYsSDYrNiv2YjZhCDYp9mE2KfYrtiq2LXYp9ix2KfYqiIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBESVNQTUQgY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjI5NQorbXNnaWQgInNldCBkaXNwbGF5IG1vZGUgYXR0cmlidXRlcy90ZXh0IgorbXNnc3RyICLYttio2Lcg2YbZhdi3INin2YTYudix2LYg2KXZhdinINmG2LUg2KPZiCDYs9mF2KfYqiIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBDU1JISURFIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDozNDMKK21zZ2lkICJzZXQgaGlkZGVuIHNjcmVlbiBjdXJzb3Igb24vb2ZmIgorbXNnc3RyICLYqti02LrZitmEINij2Ygg2KrYudi32YrZhCDYpdiu2YHYp9ihINmF2KTYtNixINin2YTYtNin2LTYqSIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBTRVRfS0VZQk9BUkRfVEFCTEUgY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjEzODYKK21zZ2lkICJzZXQga2V5Ym9hcmQgdGFibGUiCittc2dzdHIgItiq2LnZitmK2YYg2KzYr9mI2YQg2YTZiNit2Kkg2KfZhNmF2YHYp9iq2YrYrSIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBTRVRfTEFOR1VBR0VfUFJPRklMRSBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6MTM5NAorbXNnaWQgInNldCBsYW5ndWFnZSBwcm9maWxlIgorbXNnc3RyICLYqti52YrZitmGINmF2YTZgSDYqti52LHZitmBINin2YTZhNi62KkiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgQ1NSQkxJTksgY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjM2NworbXNnaWQgInNldCBzY3JlZW4gY3Vyc29yIGJsaW5raW5nIG9uL29mZiIKK21zZ3N0ciAi2KrYtNi62YrZhCDYo9mIINiq2LnYt9mK2YQg2YjZhdmK2LYg2YXYpNi02LEg2KfZhNi02KfYtNipIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIENTUlNJWkUgY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjM1OQorbXNnaWQgInNldCBzY3JlZW4gY3Vyc29yIHN0eWxlIGJsb2NrL3VuZGVybGluZSIKK21zZ3N0ciAi2KrYudmK2YrZhiDYtNmD2YQg2YXYpNi02LEg2KfZhNi02KfYtNipINmD2LPYt9ixINij2Ygg2YPZg9iq2YTYqSIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBDU1JWSVMgY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjMzNQorbXNnaWQgInNldCBzY3JlZW4gY3Vyc29yIHZpc2liaWxpdHkgb24vb2ZmIgorbXNnc3RyICLYqti02LrZitmEINij2Ygg2KrYudi32YrZhCDYsdik2YrYqSDZhdik2LTYsSDYp9mE2LTYp9i02KkiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgRlJFRVpFIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDoyODcKK21zZ2lkICJzZXQgc2NyZWVuIGltYWdlIGZyb3plbi91bmZyb3plbiIKK21zZ3N0ciAi2KrYrNmF2YrYryDYo9mIINil2YTYutin2KEg2KrYrNmF2YrYryDYtdmI2LHYqSDYp9mE2LTYp9i02KkiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgQ09NUEJSTDYgY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjExOTgKK21zZ2lkICJzZXQgc2l4L2VpZ2h0IGRvdCBjb21wdXRlciBicmFpbGxlIgorbXNnc3RyICLYqti52YrZitmGINio2LHYp9mK2YQg2LPYr9in2LPZiiDYo9mIINir2YXYp9mG2Yog2KfZhNmG2YLYp9i3IgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIFNLUEJMTktXSU5TIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDozMjcKK21zZ2lkICJzZXQgc2tpcHBpbmcgb2YgYmxhbmsgYnJhaWxsZSB3aW5kb3dzIG9uL29mZiIKK21zZ3N0ciAi2KrYtNi62YrZhCDYo9mIINiq2LnYt9mK2YQg2KrYrNin2YfZhCDZhtmI2KfZgdiwINio2LHYp9mK2YQg2KfZhNiu2KfZhNmK2KkiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgU0tQSURMTlMgY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjMxOQorbXNnaWQgInNldCBza2lwcGluZyBvZiBsaW5lcyB3aXRoIGlkZW50aWNhbCBjb250ZW50IG9uL29mZiIKK21zZ3N0ciAi2KrYtNi62YrZhCDYo9mIINiq2LnYt9mK2YQg2KrYrNin2YfZhCDYp9mE2KPYs9i32LEg2LDYp9iqINin2YTZhdit2KrZiNmJINin2YTZhdiq2LfYp9io2YIiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgU0xJREVXSU4gY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjMxMQorbXNnaWQgInNldCBzbGlkaW5nIGJyYWlsbGUgd2luZG93IG9uL29mZiIKK21zZ3N0ciAi2KrYtNi62YrZhCDYo9mIINiq2LnYt9mK2YQg2KfZhtiy2YTYp9mCINmG2KfZgdiw2Kkg2KjYsdin2YrZhCIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBTSE9XX0NVUlJfTE9DTiBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6ODUwCittc2dpZCAic2V0IHNwZWVjaCBjdXJzb3IgdmlzaWJpbGl0eSBvbi9vZmYiCittc2dzdHIgItiq2LnYt9mK2YQg2KPZiCDYqti02LrZitmEINix2KTZitipINmF2KTYtNixINin2YTZhti32YIiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgVFhUU0VMX1NFVCBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6MTQyOQorbXNnaWQgInNldCB0ZXh0IHNlbGVjdGlvbiIKK21zZ3N0ciAi2LbYqNi3INiq2K3Yr9mK2K8g2KfZhNmG2LUiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgU0lYRE9UUyBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6MzAzCittc2dpZCAic2V0IHRleHQgc3R5bGUgNi1kb3QvOC1kb3QiCittc2dzdHIgItiq2LnZitmK2YYg2LTZg9mEINin2YTZhti1INil2YXYpyA2INmG2YLYp9i3INij2YggOCDZhtmC2KfYtyIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBTRVRfVEVYVF9UQUJMRSBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6MTM2MgorbXNnaWQgInNldCB0ZXh0IHRhYmxlIgorbXNnc3RyICLYqti52YrZitmGINis2K/ZiNmEINin2YTZhti1IgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIFRPVUNIX05BViBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6OTgzCittc2dpZCAic2V0IHRvdWNoIG5hdmlnYXRpb24gb24vb2ZmIgorbXNnc3RyICLYqti02LrZitmEINij2Ygg2KrYudi32YrZhCDYp9mE2KrZhtmC2YQg2KjYp9mE2YTZhdizIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIENTUlRSSyBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6MzUxCittc2dpZCAic2V0IHRyYWNrIHNjcmVlbiBjdXJzb3Igb24vb2ZmIgorbXNnc3RyICLYqti02LrZitmEINij2Ygg2KrYudi32YrZhCDYqtiq2KjYuSDZhdik2LTYsSDYp9mE2LTYp9i02KkiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgVElNRSBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6NjU2Cittc2dpZCAic2hvdyBjdXJyZW50IGRhdGUgYW5kIHRpbWUiCittc2dzdHIgItil2LjZh9in2LEg2KfZhNiq2KfYsdmK2K4g2YjYp9mE2YjZgtiqINin2YTYrdin2YTZitmK2YYiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgR1VJX1RJVExFIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDoxMDU0Cittc2dpZCAic2hvdyB0aGUgd2luZG93IHRpdGxlIgorbXNnc3RyICLYudix2LYgINi52YbZiNin2YYg2KfZhNmG2KfZgdiw2KkiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgSU5ESUNBVE9SUyBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6MTAxMgorbXNnaWQgInNob3cgdmFyaW91cyBkZXZpY2Ugc3RhdHVzIGluZGljYXRvcnMiCittc2dzdHIgIti52LHYtiDZhdik2LTYsdin2Kog2K3Yp9mE2Kkg2KfZhNis2YfYp9iyINin2YTZhdiu2KrZhNmB2KkiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzoxMDU3Cittc2dpZCAic291bmRjYXJkIGRpZ2l0YWwgYXVkaW8iCittc2dzdHIgItio2LfYp9mC2Kkg2KfZhNi12YjYqiDYp9mE2LHZgtmF2YrYqSIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjEwNTkKK21zZ2lkICJzb3VuZGNhcmQgc3ludGhlc2l6ZXIiCittc2dzdHIgItmF2LHZg9ioINmD2LHYqiDYp9mE2LXZiNiqIgorCisjOiBQcm9ncmFtcy9jbWQuYzoyNzcgUHJvZ3JhbXMvY29yZS5jOjEwNTEKK21zZ2lkICJzcGFjZSIKK21zZ3N0ciAi2YXYs9in2YHYqSIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBTUEVBS19DVVJSX0NIQVIgY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjcxOQorbXNnaWQgInNwZWFrIGN1cnJlbnQgY2hhcmFjdGVyIgorbXNnc3RyICLZhti32YIg2KfZhNit2LHZgSDYp9mE2K3Yp9mE2YoiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgU0FZX0xJTkUgY29tbWFuZC4KKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgU1BFQUtfQ1VSUl9MSU5FIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDo1MjkgUHJvZ3JhbXMvY21kcy5hdXRvLmg6NzY1Cittc2dpZCAic3BlYWsgY3VycmVudCBsaW5lIgorbXNnc3RyICLZhti32YIg2KfZhNiz2LfYsSDYp9mE2K3Yp9mE2YoiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgU1BFQUtfQ1VSUl9XT1JEIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDo3NDIKK21zZ2lkICJzcGVhayBjdXJyZW50IHdvcmQiCittc2dzdHIgItmG2LfZgiDYp9mE2YPZhNmF2Kkg2KfZhNit2KfZhNmK2KkiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgU0FZX0JFTE9XIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDo1NDMKK21zZ2lkICJzcGVhayBmcm9tIGN1cnJlbnQgbGluZSB0aHJvdWdoIGJvdHRvbSBvZiBzY3JlZW4iCittc2dzdHIgItin2YTZhti32YIg2KjYr9ih2KfZiyDZhdmGINin2YTYs9i32LEg2KfZhNit2KfZhNmKINmI2K3YqtmJINij2LPZgdmEINin2YTYtNin2LTYqSIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBTQVlfQUxMIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDoxMTgyCittc2dpZCAic3BlYWsgZnJvbSB0b3Agb2Ygc2NyZWVuIHRocm91Z2ggYm90dG9tIG9mIHNjcmVlbiIKK21zZ3N0ciAi2KfZhNmG2LfZgiDYqNiv2KHZiyDZhdmGINij2LnZhNmJINin2YTYtNin2LTYqSDYpdmE2Ykg2KPYs9mB2YTZh9inIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIFNBWV9BQk9WRSBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6NTM2Cittc2dpZCAic3BlYWsgZnJvbSB0b3Agb2Ygc2NyZWVuIHRocm91Z2ggY3VycmVudCBsaW5lIgorbXNnc3RyICLYp9mE2YbYt9mCINio2K/YodmLINmF2YYg2KPYudmE2Ykg2KfZhNi02KfYtNipINmI2K3YqtmJINin2YTYs9i32LEg2KfZhNit2KfZhNmKIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIFNQRUFLX0lOREVOVCBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6OTkwCittc2dpZCAic3BlYWsgaW5kZW50IG9mIGN1cnJlbnQgbGluZSIKK21zZ3N0ciAi2YbYt9mCINmF2K3Yp9iw2KfYqSDYp9mE2LPYt9ixINin2YTYrdin2YTZiiIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBTUEVBS19DVVJSX0xPQ04gY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjg0MgorbXNnaWQgInNwZWFrIHNwZWVjaCBjdXJzb3IgbG9jYXRpb24iCittc2dzdHIgItmG2LfZgiDZhdmI2YLYuSDZhdik2LTYsSDYp9mE2YPZhNin2YUiCisKKyM6IFByb2dyYW1zL21zZ3Rlc3QuYzo1MAorbXNnaWQgInNwZWNpZmllciIKK21zZ3N0ciAi2YXYrdiv2K8iCisKKyM6IFByb2dyYW1zL2NvbmZpZy5jOjIyNDIKK21zZ2lkICJzcGVlY2ggZHJpdmVyIG5vdCBsb2FkYWJsZSIKK21zZ3N0ciAi2KjYsdmG2KfZhdisINiq2LTYutmK2YQg2KfZhNmG2LfZgiDYutmK2LEg2YLYp9io2YQg2YTZhNiq2K3ZhdmK2YQiCisKKyM6IFByb2dyYW1zL2NvbmZpZy5jOjIzOTEKK21zZ2lkICJzcGVlY2ggZHJpdmVyIHJlc3RhcnRpbmciCittc2dzdHIgItmK2KrZhSDYpdi52KfYr9ipINiq2LTYutmK2YQg2LPYp9im2YLYqSDYp9mE2YbYt9mCIgorCisjOiBQcm9ncmFtcy9jbWRfc3BlZWNoLmM6MTA0Cittc2dpZCAic3BlZWNoIGRyaXZlciBzdG9wcGVkIgorbXNnc3RyICLYqtmI2YLZgdiqINiz2KfYptmC2Kkg2KfZhNmG2LfZgiIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBTUEVMTF9DVVJSX1dPUkQgY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjgyNworbXNnaWQgInNwZWxsIGN1cnJlbnQgd29yZCIKK21zZ3N0ciAi2KrZh9is2KbYqSDYp9mE2YPZhNmF2Kkg2KfZhNit2KfZhNmK2KkiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgQ0xJUF9ORVcgY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjEyMTUKK21zZ2lkICJzdGFydCBuZXcgY2xpcGJvYXJkIGF0IGNoYXJhY3RlciIKK21zZ3N0ciAi2KjYr9ihINit2KfZgdi42Kkg2KzYr9mK2K/YqSDYudmG2K8g2KfZhNit2LHZgSIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBUWFRTRUxfU1RBUlQgY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjE0MjEKK21zZ2lkICJzdGFydCB0ZXh0IHNlbGVjdGlvbiIKK21zZ3N0ciAi2KjYr9ihINiq2K3Yr9mK2K8g2KfZhNmG2LUiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgQlJMX1NUQVJUIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDo5MTUKK21zZ2lkICJzdGFydCB0aGUgYnJhaWxsZSBkcml2ZXIiCittc2dzdHIgItio2K/YoSDYs9in2KbZgtipINio2LHYp9mK2YQiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgU0NSX1NUQVJUIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDo5NDMKK21zZ2lkICJzdGFydCB0aGUgc2NyZWVuIGRyaXZlciIKK21zZ3N0ciAi2KjYr9ihINiz2KfYptmC2Kkg2KfZhNi02KfYtNipIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIFNQS19TVEFSVCBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6OTI5Cittc2dpZCAic3RhcnQgdGhlIHNwZWVjaCBkcml2ZXIiCittc2dzdHIgItio2K/YoSDYs9in2KbZgtipINin2YTZhti32YIiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgTVVURSBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6NTE0Cittc2dpZCAic3RvcCBzcGVha2luZyIKK21zZ3N0ciAi2KXZitmC2KfZgSDYp9mE2KrZg9mE2YUiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgQlJMX1NUT1AgY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjkwOAorbXNnaWQgInN0b3AgdGhlIGJyYWlsbGUgZHJpdmVyIgorbXNnc3RyICLYpdmK2YLYp9mBINiz2KfYptmC2Kkg2KfZhNio2LHYp9mK2YQiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgU0NSX1NUT1AgY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjkzNgorbXNnaWQgInN0b3AgdGhlIHNjcmVlbiBkcml2ZXIiCittc2dzdHIgItil2YrZgtin2YEg2LPYp9im2YLYqSDYp9mE2LTYp9i02KkiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgU1BLX1NUT1AgY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjkyMgorbXNnaWQgInN0b3AgdGhlIHNwZWVjaCBkcml2ZXIiCittc2dzdHIgItil2YrZgtin2YEg2LPYp9im2YLYqSDYp9mE2YbYt9mCIgorCisjOiBQcm9ncmFtcy94YnJsYXBpLmM6NjU2Cittc2dpZCAic3RyYW5nZSBvbGQgZXJyb3IgaGFuZGxlclxuIgorbXNnc3RyICLZhdi52KfZhNisINiu2LfYoyDZgtiv2YrZhSDYutix2YrYqCBcbiIKKworIzogUHJvZ3JhbXMvYnJsdHR5LWNsZHIuYzozOQorbXNnaWQgInN0cmluZyIKK21zZ3N0ciAic3RyaW5nIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIENPTlRFWFQgY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjE0OTUKK21zZ2lkICJzd2l0Y2ggdG8gY29tbWFuZCBjb250ZXh0IgorbXNnc3RyICLYp9mE2KrYqNiv2YrZhCDYpdmE2Ykg2LPZitin2YIg2KfZhNij2YXYsSIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBTV0lUQ0hWVCBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6MTI0NworbXNnaWQgInN3aXRjaCB0byBzcGVjaWZpYyB2aXJ0dWFsIHRlcm1pbmFsIgorbXNnc3RyICLYp9mE2KrYqNiv2YrZhCDYpdmE2Ykg2YbYp9mB2LDYqSDYo9mI2KfZhdixINin2YHYqtix2KfYttmK2Kkg2YXYrdiv2K/YqSIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBHVUlfQVJFQV9ORVhUIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDoxMTMzCittc2dpZCAic3dpdGNoIHRvIHRoZSBuZXh0IHNjcmVlbiBhcmVhIgorbXNnc3RyICLYp9mE2KrYqNiv2YrZhCDYpdmE2Ykg2YXZhti32YLYqSDYp9mE2LTYp9i02Kkg2KfZhNiq2KfZhNmK2KkiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgU1dJVENIVlRfTkVYVCBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6NTg1Cittc2dpZCAic3dpdGNoIHRvIHRoZSBuZXh0IHZpcnR1YWwgdGVybWluYWwiCittc2dzdHIgItin2YTYqtio2K/ZitmEINil2YTZiSDZhtin2YHYsNipINin2YTYo9mI2KfZhdixINin2YTYp9mB2KrYsdin2LbZitipINin2YTYqtin2YTZitipIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIEdVSV9BUkVBX1BSRVYgY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjExMjYKK21zZ2lkICJzd2l0Y2ggdG8gdGhlIHByZXZpb3VzIHNjcmVlbiBhcmVhIgorbXNnc3RyICLYp9mE2KrYqNiv2YrZhCDYpdmE2Ykg2YXZhti32YLYqSDYp9mE2LTYp9i02Kkg2KfZhNiz2KfYqNmC2KkiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgU1dJVENIVlRfUFJFViBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6NTc4Cittc2dpZCAic3dpdGNoIHRvIHRoZSBwcmV2aW91cyB2aXJ0dWFsIHRlcm1pbmFsIgorbXNnc3RyICLYp9mE2KrYqNiv2YrZhCDYpdmE2Ykg2YbYp9mB2LDYqSDYp9mE2KPZiNin2YXYsSDYp9mE2KfZgdiq2LHYp9i22YrYqSDYp9mE2LPYp9io2YLYqSIKKworIzogUHJvZ3JhbXMvcGdtcHJpdnNfbGludXguYzoxOTk0Cittc2dpZCAic3dpdGNoZWQgdG8gdW5wcml2aWxlZ2VkIHVzZXIiCittc2dzdHIgItiq2K3ZiNmE2Kog2KXZhNmJINmF2LPYqtiu2K/ZhSDZhNinINmK2KrZhdiq2Lkg2KjYp9mF2KrZitin2LLYp9iqIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIEtFWV9UQUIgY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjE1MTkKK21zZ2lkICJ0YWIga2V5IgorbXNnc3RyICLZhdmB2KrYp9itINin2YTYqtmG2YLZhCIKKworIzogUHJvZ3JhbXMvY29uZmlnLmM6Mzc5IFByb2dyYW1zL2NvbmZpZy5jOjM4NgorbXNnaWQgInRleHQiCittc2dzdHIgItmG2LUiCisKKyM6IFByb2dyYW1zL21zZ3Rlc3QuYzo0NQorbXNnaWQgInRoZSBsb2NhbGUgZGlyZWN0b3J5IGNvbnRhaW5pbmcgdGhlIHRyYW5zbGF0aW9ucyIKK21zZ3N0ciAi2K/ZhNmK2YQg2KfZhNmE2LrYqSDYp9mE2LDZiiDZitit2KrZiNmKINi52YTZiSDYp9mE2KrYsdis2YXYp9iqIgorCisjOiBQcm9ncmFtcy9tc2d0ZXN0LmM6NTIKK21zZ2lkICJ0aGUgbG9jYWxlIGluIHdoaWNoIHRvIGxvb2sgdXAgYSB0cmFuc2xhdGlvbiIKK21zZ3N0ciAi2KfZhNmF2YPYp9mGINin2YTYsNmKINiq2KjYrdirINmB2YrZhyDYudmGINin2YTYqtix2KzZhdipIgorCisjOiBQcm9ncmFtcy9tc2d0ZXN0LmM6NTkKK21zZ2lkICJ0aGUgbmFtZSBvZiB0aGUgZG9tYWluIGNvbnRhaW5pbmcgdGhlIHRyYW5zbGF0aW9ucyIKK21zZ3N0ciAi2KfYs9mFINin2YTZhdis2KfZhCDYp9mE2LDZiiDZitit2KrZiNmKINi52YTZiSDYp9mE2KrYsdis2YXYp9iqIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIFBBU1NET1RTIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDoxNDYzCittc2dpZCAidHlwZSBicmFpbGxlIGRvdHMiCittc2dzdHIgItin2YPYqtioINmG2YLYp9i3INio2LHYp9mK2YQiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgUEFTU0NIQVIgY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjE0NTQKK21zZ2lkICJ0eXBlIHVuaWNvZGUgY2hhcmFjdGVyIgorbXNnc3RyICLYp9mD2KrYqCDYrdix2YEgdW5pY29kZSIKKworIzogUHJvZ3JhbXMveGJybGFwaS5jOjk3NAorbXNnaWQgInVuZXhwZWN0ZWQgYmxvY2sgdHlwZSIKK21zZ3N0ciAi2YbZiNi5INmD2KrZhNipINi62YrYsSDZhdiq2YjZgti5IgorCisjOiBQcm9ncmFtcy94YnJsYXBpLmM6ODY0Cittc2dpZCAidW5leHBlY3RlZCBjbWQiCittc2dzdHIgImNtZCDYutmK2LEg2YXYqtmI2YLYuSIKKworIzogUHJvZ3JhbXMvY21kX3F1ZXVlLmM6MTU3Cittc2dpZCAidW5oYW5kbGVkIGNvbW1hbmQiCittc2dzdHIgItij2YXYsSDYutmK2LEg2YXYudin2YTYrCIKKworIzogUHJvZ3JhbXMvY21kLmM6MTk4Cittc2dpZCAidW5rbm93biBjb21tYW5kIgorbXNnc3RyICLYt9mE2Kgg2YXYrNmH2YjZhCIKKworIzogUHJvZ3JhbXMvb3B0aW9ucy5jOjgyOAorbXNnaWQgInVua25vd24gY29uZmlndXJhdGlvbiBkaXJlY3RpdmUiCittc2dzdHIgItiq2YjYrNmK2Ycg2KrZg9mI2YrZhiDYutmK2LEg2YXYudix2YjZgSIKKworIzogUHJvZ3JhbXMvY29uZmlnLmM6NzkxCittc2dpZCAidW5rbm93biBsb2cgbGV2ZWwgb3IgY2F0ZWdvcnkiCittc2dzdHIgItmF2LPYqtmI2Ykg2KPZiCDZgdim2Kkg2LPYrNmEINi62YrYsSDZhdi52LHZiNmB2KkiCisKKyMuIGFuIHVua25vd24gb3B0aW9uIGhhcyBiZWVuIHNwZWNpZmllZAorIzogUHJvZ3JhbXMvb3B0aW9ucy5jOjU3NQorbXNnaWQgInVua25vd24gb3B0aW9uIgorbXNnc3RyICLYrtmK2KfYsSDYutmK2LEg2YXYudix2YjZgSIKKworIzogUHJvZ3JhbXMvY29uZmlnLmM6MzI3Cittc2dpZCAidW5rbm93biBzY3JlZW4gY29udGVudCBxdWFsaXR5IgorbXNnc3RyICLYrNmI2K/YqSDZhdit2KrZiNmJINin2YTYtNin2LTYqSDYutmK2LEg2YXYudix2YjZgdipIgorCisjOiBQcm9ncmFtcy9wYXJzZS5jOjUwMQorbXNnaWQgInVuc3VwcG9ydGVkIHBhcmFtZXRlciIKK21zZ3N0ciAi2KXYudiv2KfYryDYutmK2LEg2YXYr9i52YjZhSIKKworIzogUHJvZ3JhbXMvc3BrLmM6MTgwCittc2dpZCAidm9sdW1lIgorbXNnc3RyICLZhdiz2KrZiNmJINin2YTYtdmI2KoiCisKKyMuIExSR0IKKyM6IFByb2dyYW1zL2NtZF91dGlscy5jOjE1OQorbXNnaWQgIndoaXRlIgorbXNnc3RyICLYo9io2YrYtiIKKworIzogUHJvZ3JhbXMvcGdtcHJpdnNfbGludXguYzoxODU2Cittc2dpZCAid29ya2luZyBkaXJlY3RvcnkgY2hhbmdlZCIKK21zZ3N0ciAi2KrZhSDYqti62YrZitixINin2YTYr9mE2YrZhCDYp9mE2LnYp9mF2YQiCisKKyM6IFByb2dyYW1zL21zZ3Rlc3QuYzo2NQorbXNnaWQgIndyaXRlIHRoZSB0cmFuc2xhdGlvbnMgdXNpbmcgVVRGLTgiCittc2dzdHIgItin2YPYqtioINin2YTYqtix2KzZhdin2Kog2KjYp9iz2KrYrtiv2KfZhSBVVEYtOCIKKworIzogUHJvZ3JhbXMveGJybGFwaS5jOjkxMQorIywgYy1mb3JtYXQKK21zZ2lkICJ4YnJsYXBpOiBDb3VsZG4ndCBmaW5kIGEga2V5Y29kZSB0byByZW1hcCBmb3Igc2ltdWxhdGluZyB1bmJvdW5kIGtleXN5bSAlMDhYXG4iCittc2dzdHIgInhicmxhcGk6INiq2LnYsNixINin2YTYudir2YjYsSDYudmE2Ykg2LHZhdiyINmF2YHYqtin2K0g2YTYpdi52KfYr9ipINiq2LnZitmK2YbZhyDZhNmF2K3Yp9mD2KfYqSBLZXl3b3JkINi62YrYsSDYp9mE2YXZhti22YXYqSUwOFhcbiIKKworIzogUHJvZ3JhbXMveGJybGFwaS5jOjg5OAorIywgYy1mb3JtYXQKK21zZ2lkICJ4YnJsYXBpOiBDb3VsZG4ndCBmaW5kIG1vZGlmaWVycyB0byBhcHBseSB0byAlZCBmb3IgZ2V0dGluZyBrZXlzeW0gJTA4WFxuIgorbXNnc3RyICJ4YnJsYXBpOiBDb3VsZG4ndCBmaW5kIG1vZGlmaWVycyB0byBhcHBseSB0byAlZCBmb3IgZ2V0dGluZyBrZXlzeW0gJTA4WFxuIgorCisjOiBQcm9ncmFtcy94YnJsYXBpLmM6ODc0CisjLCBjLWZvcm1hdAorbXNnaWQgInhicmxhcGk6IENvdWxkbid0IHRyYW5zbGF0ZSBrZXlzeW0gJTA4WCB0byBrZXljb2RlLlxuIgorbXNnc3RyICJ4YnJsYXBpOiDYqti52LDYsdiqINin2YTYqtix2KzZhdipIGtleXN5bSAlMDhYIHRvIGtleWNvZGUuXG4iCisKKyM6IFByb2dyYW1zL3hicmxhcGkuYzo0MTUKKyMsIGMtZm9ybWF0Cittc2dpZCAieGJybGFwaTogWCBFcnJvciAlZCwgJXMgb24gZGlzcGxheSAlc1xuIgorbXNnc3RyICJ4YnJsYXBpOiBYINiu2LfYoyAlZCwgJXMg2LnZhNmJINi52LHYtiAlc1xuIgorCisjOiBQcm9ncmFtcy94YnJsYXBpLmM6NDU3CisjLCBjLWZvcm1hdAorbXNnaWQgInhicmxhcGk6IGJhZCBmb3JtYXQgZm9yIFZUIG51bWJlclxuIgorbXNnc3RyICJ4YnJsYXBpOiDYqtmG2LPZitmCINiz2YrYpiBWVCBudW1iZXJcbiIKKworIzogUHJvZ3JhbXMveGJybGFwaS5jOjQ2MAorIywgYy1mb3JtYXQKK21zZ2lkICJ4YnJsYXBpOiBiYWQgdHlwZSBmb3IgVlQgbnVtYmVyXG4iCittc2dzdHIgInhicmxhcGk6INmG2YjYuSDYs9mK2KEg2YTYsdmC2YUgVlRcbiIKKworIzogUHJvZ3JhbXMveGJybGFwaS5jOjQzOQorIywgYy1mb3JtYXQKK21zZ2lkICJ4YnJsYXBpOiBjYW5ub3QgZ2V0IHJvb3Qgd2luZG93IFhGcmVlODZfVlQgcHJvcGVydHlcbiIKK21zZ3N0ciAieGJybGFwaTog2YTYpyDZitmF2YPZhiDYp9mE2K3YtdmI2YQg2LnZhNmJINmG2KfZgdiw2Kkg2KfZhNis2LDYsSBYRnJlZTg2X1ZUIHByb3BlcnR5XG4iCisKKyM6IFByb2dyYW1zL3hicmxhcGkuYzozMTYKKyMsIGMtZm9ybWF0Cittc2dpZCAieGJybGFwaTogY2Fubm90IHdyaXRlIHdpbmRvdyBuYW1lICVzXG4iCittc2dzdHIgInhicmxhcGk6INmE2Kcg2YrZhdmD2YYg2YPYqtin2KjYqSDYp9iz2YUg2KfZhNmG2KfZgdiw2KkgJXNcbiIKKworIzogUHJvZ3JhbXMveGJybGFwaS5jOjc2NAorIywgYy1mb3JtYXQKK21zZ2lkICJ4YnJsYXBpOiBkaWRuJ3QgZ3JhYiBwYXJlbnQgb2YgJSMwMTBseFxuIgorbXNnc3RyICJ4YnJsYXBpOiBkaWRuJ3QgZ3JhYiBwYXJlbnQgb2YgJSMwMTBseFxuIgorCisjOiBQcm9ncmFtcy94YnJsYXBpLmM6NzgyCisjLCBjLWZvcm1hdAorbXNnaWQgInhicmxhcGk6IGRpZG4ndCBncmFiIHdpbmRvdyAlIzAxMGx4XG4iCittc2dzdHIgInhicmxhcGk6IGRpZG4ndCBncmFiIHdpbmRvdyAlIzAxMGx4XG4iCisKKyM6IFByb2dyYW1zL3hicmxhcGkuYzo1ODIKKyMsIGMtZm9ybWF0Cittc2dpZCAieGJybGFwaTogZGlkbid0IGdyYWIgd2luZG93ICUjMDEwbHggYnV0IGdvdCBmb2N1c1xuIgorbXNnc3RyICJ4YnJsYXBpOiBkaWRuJ3QgZ3JhYiB3aW5kb3cgJSMwMTBseCBidXQgZ290IGZvY3VzXG4iCisKKyM6IFByb2dyYW1zL3hicmxhcGkuYzo0NDgKKyMsIGMtZm9ybWF0Cittc2dpZCAieGJybGFwaTogbW9yZSB0aGFuIG9uZSBpdGVtIGZvciBWVCBudW1iZXJcbiIKK21zZ3N0ciAieGJybGFwaTogbW9yZSB0aGFuIG9uZSBpdGVtIGZvciBWVCBudW1iZXJcbiIKKworIzogUHJvZ3JhbXMveGJybGFwaS5jOjQzMworIywgYy1mb3JtYXQKK21zZ2lkICJ4YnJsYXBpOiBubyBYRnJlZTg2X1ZUIGF0b21cbiIKK21zZ3N0ciAieGJybGFwaTogbm8gWEZyZWU4Nl9WVCBhdG9tXG4iCisKKyM6IFByb2dyYW1zL3hicmxhcGkuYzo0NDQKKyMsIGMtZm9ybWF0Cittc2dpZCAieGJybGFwaTogbm8gaXRlbXMgZm9yIFZUIG51bWJlclxuIgorbXNnc3RyICJ4YnJsYXBpOiBubyBpdGVtcyBmb3IgVlQgbnVtYmVyXG4iCisKKyM6IFByb2dyYW1zL3hicmxhcGkuYzo0MTYKKyMsIGMtZm9ybWF0Cittc2dpZCAieGJybGFwaTogcmVzb3VyY2UgJSMwMTBseCwgcmVxICV1OiV1XG4iCittc2dzdHIgInhicmxhcGk6IHJlc291cmNlICUjMDEwbHgsIHJlcSAldToldVxuIgorCisjLiAic2hvdWxkbid0IGhhcHBlbiIgZXZlbnRzCisjOiBQcm9ncmFtcy94YnJsYXBpLmM6ODExCisjLCBjLWZvcm1hdAorbXNnaWQgInhicmxhcGk6IHVuaGFuZGxlZCBldmVudCB0eXBlOiAlZFxuIgorbXNnc3RyICJ4YnJsYXBpOiB1bmhhbmRsZWQgZXZlbnQgdHlwZTogJWRcbiIKKworIzogUHJvZ3JhbXMveGJybGFwaS5jOjc5MAorIywgYy1mb3JtYXQKK21zZ2lkICJ4YnJsYXBpOiB3aW5kb3cgJSMwMTBseCBjaGFuZ2VkIHRvIE5VTEwgbmFtZVxuIgorbXNnc3RyICJ4YnJsYXBpOiB3aW5kb3cgJSMwMTBseCBjaGFuZ2VkIHRvIE5VTEwgbmFtZVxuIgorCisjLiBMUkcKKyM6IFByb2dyYW1zL2NtZF91dGlscy5jOjE1OAorbXNnaWQgInllbGxvdyIKK21zZ3N0ciAi2KPYtdmB2LEiCmRpZmYgLS1naXQgYS9NZXNzYWdlcy9icmx0dHkucG90IGIvTWVzc2FnZXMvYnJsdHR5LnBvdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNDIzMjNjCi0tLSAvZGV2L251bGwKKysrIGIvTWVzc2FnZXMvYnJsdHR5LnBvdApAQCAtMCwwICsxLDQzNTIgQEAKKyMgU09NRSBERVNDUklQVElWRSBUSVRMRS4KKyMgQ29weXJpZ2h0IChDKSBZRUFSIFRoZSBCUkxUVFkgRGV2ZWxvcGVycworIyBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHNhbWUgbGljZW5zZSBhcyB0aGUgYnJsdHR5IHBhY2thZ2UuCisjIEZJUlNUIEFVVEhPUiA8RU1BSUxAQUREUkVTUz4sIFlFQVIuCisjCisjLCBmdXp6eQorbXNnaWQgIiIKK21zZ3N0ciAiIgorIlByb2plY3QtSWQtVmVyc2lvbjogYnJsdHR5IDYuNVxuIgorIlJlcG9ydC1Nc2dpZC1CdWdzLVRvOiBCUkxUVFlAYnJsdHR5LmFwcFxuIgorIlBPVC1DcmVhdGlvbi1EYXRlOiAyMDIzLTAyLTAyIDE1OjU4LTA1MDBcbiIKKyJQTy1SZXZpc2lvbi1EYXRlOiBZRUFSLU1PLURBIEhPOk1JK1pPTkVcbiIKKyJMYXN0LVRyYW5zbGF0b3I6IEZVTEwgTkFNRSA8RU1BSUxAQUREUkVTUz5cbiIKKyJMYW5ndWFnZS1UZWFtOiBMQU5HVUFHRSA8TExAbGkub3JnPlxuIgorIkxhbmd1YWdlOiBcbiIKKyJNSU1FLVZlcnNpb246IDEuMFxuIgorIkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1DSEFSU0VUXG4iCisiQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdFxuIgorIlBsdXJhbC1Gb3JtczogbnBsdXJhbHM9SU5URUdFUjsgcGx1cmFsPUVYUFJFU1NJT047XG4iCisKKyM6IFByb2dyYW1zL2JybHR0eS5jOjIwOQorIywgYy1mb3JtYXQKK21zZ2lkICJcIiVzXCIgc3RhcnRlZCBhcyBcIiVzXCJcbiIKK21zZ3N0ciAiIgorCisjLiB4Z2V0dGV4dDogVGhpcyBwaHJhc2UgZGVzY3JpYmVzIHRoZSBjb2xvdXIgb2YgYSBjaGFyYWN0ZXIgb24gdGhlIHNjcmVlbi4KKyMuIHhnZXR0ZXh0OiAlMSRzIGlzIHRoZSAoYWxyZWFkeSB0cmFuc2xhdGVkKSBmb3JlZ3JvdW5kIGNvbG91ci4KKyMuIHhnZXR0ZXh0OiAlMiRzIGlzIHRoZSAoYWxyZWFkeSB0cmFuc2xhdGVkKSBiYWNrZ3JvdW5kIGNvbG91ci4KKyM6IFByb2dyYW1zL2NtZF91dGlscy5jOjE3NgorIywgYy1mb3JtYXQKK21zZ2lkICIlMSRzIG9uICUyJHMiCittc2dzdHIgIiIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgaG93IHRvIHNheSB3aGVuIHRoZSB0aW1lIGlzIGV4YWN0bHkgb24gKGkuZS4gemVybyBtaW51dGVzIGFmdGVyKSBhbiBob3VyLgorIy4geGdldHRleHQ6ICgldSByZXByZXNlbnRzIHRoZSBudW1iZXIgb2YgaG91cnMpCisjOiBQcm9ncmFtcy9jbWRfbWlzY2VsbGFuZW91cy5jOjg5CisjLCBjLWZvcm1hdAorbXNnaWQgIiV1IG8nY2xvY2siCittc2dpZF9wbHVyYWwgIiV1IG8nY2xvY2siCittc2dzdHJbMF0gIiIKK21zZ3N0clsxXSAiIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyBhIG51bWJlciAoJXUpIG9mIHNlY29uZHMgKHRpbWUgdW5pdHMpLgorIzogUHJvZ3JhbXMvY21kX21pc2NlbGxhbmVvdXMuYzoxMDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXUgc2Vjb25kIgorbXNnaWRfcGx1cmFsICIldSBzZWNvbmRzIgorbXNnc3RyWzBdICIiCittc2dzdHJbMV0gIiIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjU0MworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjU0NAorIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjU0NgorIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjU0NworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjU1MAorIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjU1MQorIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjU1MgorIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjU1NAorIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjU1NQorIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjU2MQorbXNnaWQgIjEgY2VsbCIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6OTAyCittc2dpZCAiMSBzZWNvbmQiCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjk2NAorbXNnaWQgIjEwIHNlY29uZHMiCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjEyNzkKK21zZ2lkICIxMiBIb3VyIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzo1NDIKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzo1NDUKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzo1NDgKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzo1NDkKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzo1NTMKK21zZ2lkICIyIGNlbGxzIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzo5MDMKK21zZ2lkICIyIHNlY29uZHMiCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjk2NQorbXNnaWQgIjIwIHNlY29uZHMiCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjEyNzgKK21zZ2lkICIyNCBIb3VyIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzo5MDAKK21zZ2lkICIyNTAgbWlsbGlzZWNvbmRzIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzo1NTcKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzo1NTgKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzo1NTkKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzo1NjAKK21zZ2lkICIzIGNlbGxzIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzo5NjYKK21zZ2lkICI0MCBzZWNvbmRzIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzo5NjMKK21zZ2lkICI1IHNlY29uZHMiCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjkwMQorbXNnaWQgIjUwMCBtaWxsaXNlY29uZHMiCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjczNAorbXNnaWQgIjYtZG90IgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL2JybHR0eS10dGIuYzoxNjkKK21zZ2lkICI4LWJpdCBjaGFyYWN0ZXIgc2V0IHRvIHVzZS4iCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjczMworbXNnaWQgIjgtZG90IgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL3Njcl9tZW51LmM6MTA0Cittc2dpZCAiPG9mZj4iCittc2dzdHIgIiIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBQQVNTQVQgY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjE0ODcKK21zZ2lkICJBVCAoc2V0IDIpIGtleWJvYXJkIHNjYW4gY29kZSIKK21zZ3N0ciAiIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgbmFtZSBvZiBNSURJIG11c2ljYWwgaW5zdHJ1bWVudCAjMjIgKGluIHRoZSBPcmdhbiBncm91cCkuCisjOiBQcm9ncmFtcy9taWRpLmM6MTQ1Cittc2dpZCAiQWNjb3JkaW9uIgorbXNnc3RyICIiCisKKyMuIEJhc3MKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBuYW1lIG9mIE1JREkgbXVzaWNhbCBpbnN0cnVtZW50ICMzMyAoaW4gdGhlIEJhc3MgZ3JvdXApLgorIzogUHJvZ3JhbXMvbWlkaS5jOjE4MAorbXNnaWQgIkFjb3VzdGljIEJhc3MiCittc2dzdHIgIiIKKworIy4gUGlhbm8KKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBuYW1lIG9mIE1JREkgbXVzaWNhbCBpbnN0cnVtZW50ICMxIChpbiB0aGUgUGlhbm8gZ3JvdXApLgorIzogUHJvZ3JhbXMvbWlkaS5jOjgwCittc2dpZCAiQWNvdXN0aWMgR3JhbmQgUGlhbm8iCittc2dzdHIgIiIKKworIy4gR3VpdGFyCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgbmFtZSBvZiBNSURJIG11c2ljYWwgaW5zdHJ1bWVudCAjMjUgKGluIHRoZSBHdWl0YXIgZ3JvdXApLgorIzogUHJvZ3JhbXMvbWlkaS5jOjE1NQorbXNnaWQgIkFjb3VzdGljIEd1aXRhciAobnlsb24pIgorbXNnc3RyICIiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBuYW1lIG9mIE1JREkgbXVzaWNhbCBpbnN0cnVtZW50ICMyNiAoaW4gdGhlIEd1aXRhciBncm91cCkuCisjOiBQcm9ncmFtcy9taWRpLmM6MTU4Cittc2dpZCAiQWNvdXN0aWMgR3VpdGFyIChzdGVlbCkiCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjEzMDUKK21zZ2lkICJBZnRlciBUaW1lIgorbXNnc3RyICIiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBuYW1lIG9mIE1JREkgbXVzaWNhbCBpbnN0cnVtZW50ICMxMTQgKGluIHRoZSBQZXJjdXNzaXZlIGdyb3VwKS4KKyM6IFByb2dyYW1zL21pZGkuYzo0MzQKK21zZ2lkICJBZ29nbyIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6MTQ5MworbXNnaWQgIkFsZXJ0IgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzoxMTA2Cittc2dpZCAiQWxlcnQgRG90cyIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6MTExMQorbXNnaWQgIkFsZXJ0IE1lc3NhZ2VzIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzoxMDUxCittc2dpZCAiQWxlcnQgVHVuZXMiCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjg2NgorIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjExOTYKK21zZ2lkICJBbGwiCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjU1NQorbXNnaWQgIkFscGhhYmV0aWMgQ3Vyc29yIENvb3JkaW5hdGVzIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzo1NTQKK21zZ2lkICJBbHBoYWJldGljIFdpbmRvdyBDb29yZGluYXRlcyIKK21zZ3N0ciAiIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgbmFtZSBvZiBNSURJIG11c2ljYWwgaW5zdHJ1bWVudCAjNjYgKGluIHRoZSBSZWVkIGdyb3VwKS4KKyM6IFByb2dyYW1zL21pZGkuYzoyODMKK21zZ2lkICJBbHRvIFNheG9waG9uZSIKK21zZ3N0ciAiIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgbmFtZSBvZiBNSURJIG11c2ljYWwgaW5zdHJ1bWVudCAjMTI3IChpbiB0aGUgU291bmQgRWZmZWN0cyBncm91cCkuCisjOiBQcm9ncmFtcy9taWRpLmM6NDc0Cittc2dpZCAiQXBwbGF1c2UiCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvbG9nLmM6MTEyCittc2dpZCAiQXN5bmMgRXZlbnRzIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzo4MDgKK21zZ2lkICJBdHRyaWJ1dGVzIEJsaW5rIFBlcmlvZCIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6ODE2Cittc2dpZCAiQXR0cmlidXRlcyBQZXJjZW50IFZpc2libGUiCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjE0MDgKK21zZ2lkICJBdHRyaWJ1dGVzIFRhYmxlIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL3hicmxhcGkuYzoxMDQzCittc2dpZCAiQXVnbWVudCBhbiBYIHNlc3Npb24gYnkgc3VwcG9ydGluZyBpbnB1dCB0eXBlZCBvbiB0aGUgYnJhaWxsZSBkZXZpY2UsIHNob3dpbmcgdGhlIHRpdGxlIG9mIHRoZSBmb2N1c2VkIHdpbmRvdyBvbiB0aGUgYnJhaWxsZSBkaXNwbGF5LCBhbmQgc3dpdGNoaW5nIGJyYWlsbGUgZm9jdXMgdG8gaXQuIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL2FsZXJ0LmM6MTY4Cittc2dpZCAiQXV0b3JlbGVhc2UiCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjk2OQorbXNnaWQgIkF1dG9yZWxlYXNlIFRpbWUiCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjk4NgorbXNnaWQgIkF1dG9yZXBlYXQgRW5hYmxlZCIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6OTkyCittc2dpZCAiQXV0b3JlcGVhdCBJbnRlcnZhbCIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6OTk5Cittc2dpZCAiQXV0b3JlcGVhdCBQYW5uaW5nIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzoxMTIxCittc2dpZCAiQXV0b3NwZWFrIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzoxMTE4Cittc2dpZCAiQXV0b3NwZWFrIE9wdGlvbnMiCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvY29uZmlnLmM6MjA0OAorbXNnaWQgIkJSTFRUWSBzdG9wcGVkIgorbXNnc3RyICIiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBuYW1lIG9mIE1JREkgbXVzaWNhbCBpbnN0cnVtZW50ICMxMTAgKGluIHRoZSBFdGhuaWMgZ3JvdXApLgorIzogUHJvZ3JhbXMvbWlkaS5jOjQyMQorbXNnaWQgIkJhZyBQaXBlIgorbXNnc3RyICIiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBuYW1lIG9mIE1JREkgbXVzaWNhbCBpbnN0cnVtZW50ICMxMDYgKGluIHRoZSBFdGhuaWMgZ3JvdXApLgorIzogUHJvZ3JhbXMvbWlkaS5jOjQwOQorbXNnaWQgIkJhbmpvIgorbXNnc3RyICIiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBuYW1lIG9mIE1JREkgbXVzaWNhbCBpbnN0cnVtZW50ICM2OCAoaW4gdGhlIFJlZWQgZ3JvdXApLgorIzogUHJvZ3JhbXMvbWlkaS5jOjI4OQorbXNnaWQgIkJhcml0b25lIFNheG9waG9uZSIKK21zZ3N0ciAiIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgbmFtZSBvZiBNSURJIG11c2ljYWwgaW5zdHJ1bWVudCBncm91cCAjNS4KKyM6IFByb2dyYW1zL21pZGkuYzozNworbXNnaWQgIkJhc3MiCittc2dzdHIgIiIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIG5hbWUgb2YgTUlESSBtdXNpY2FsIGluc3RydW1lbnQgIzcxIChpbiB0aGUgUmVlZCBncm91cCkuCisjOiBQcm9ncmFtcy9taWRpLmM6Mjk4Cittc2dpZCAiQmFzc29vbiIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6MTA1OAorbXNnaWQgIkJlZXBlciIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6MTMwNAorbXNnaWQgIkJlZm9yZSBUaW1lIgorbXNnc3RyICIiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBuYW1lIG9mIE1JREkgbXVzaWNhbCBpbnN0cnVtZW50ICMxMjQgKGluIHRoZSBTb3VuZCBFZmZlY3RzIGdyb3VwKS4KKyM6IFByb2dyYW1zL21pZGkuYzo0NjUKK21zZ2lkICJCaXJkIFR3ZWV0IgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzo4MDIKK21zZ2lkICJCbGlua2luZyBBdHRyaWJ1dGVzIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzo4MjQKK21zZ2lkICJCbGlua2luZyBDYXBpdGFscyIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6Nzc1Cittc2dpZCAiQmxpbmtpbmcgU2NyZWVuIEN1cnNvciIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6MTI1MAorbXNnaWQgIkJsaW5raW5nIFNwZWVjaCBDdXJzb3IiCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjY2NQorIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjEzNjQKK21zZ2lkICJCbG9jayIKK21zZ3N0ciAiIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgbmFtZSBvZiBNSURJIG11c2ljYWwgaW5zdHJ1bWVudCAjNzcgKGluIHRoZSBQaXBlIGdyb3VwKS4KKyM6IFByb2dyYW1zL21pZGkuYzozMTcKK21zZ2lkICJCbG93biBCb3R0bGUiCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvbG9nLmM6MTQyCittc2dpZCAiQmx1ZXRvb3RoIEkvTyIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9jb25maWcuYzoxODE3Cittc2dpZCAiQnJhaWxsZSBEZXZpY2UiCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvbG9nLmM6MTU0Cittc2dpZCAiQnJhaWxsZSBEcml2ZXIgRXZlbnRzIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzo3NTMKK21zZ2lkICJCcmFpbGxlIEZpcm1uZXNzIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL2xvZy5jOjc2Cittc2dpZCAiQnJhaWxsZSBLZXkgRXZlbnRzIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzo2OTkKK21zZ2lkICJCcmFpbGxlIFByZXNlbnRhdGlvbiIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6MTM5MQorbXNnaWQgIkJyYWlsbGUgVGFibGVzIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzo5MzQKK21zZ2lkICJCcmFpbGxlIFR5cGluZyIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6NzA3Cittc2dpZCAiQnJhaWxsZSBWYXJpYW50IgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzo4ODcKK21zZ2lkICJCcmFpbGxlIFdpbmRvdyBPdmVybGFwIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL2NvbmZpZy5jOjQwNgorIywgYy1mb3JtYXQKK21zZ2lkICJCcmFpbGxlIGRyaXZlciBjb2RlICglcywgJXMsIG9yIG9uZSBvZiB7JXN9KS4iCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvYnJsdHR5LWt0Yi5jOjQ3Cittc2dpZCAiQnJhaWxsZSBkcml2ZXIgY29kZS4iCittc2dzdHIgIiIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIG5hbWUgb2YgTUlESSBtdXNpY2FsIGluc3RydW1lbnQgZ3JvdXAgIzguCisjOiBQcm9ncmFtcy9taWRpLmM6NDYKK21zZ2lkICJCcmFzcyIKK21zZ3N0ciAiIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgbmFtZSBvZiBNSURJIG11c2ljYWwgaW5zdHJ1bWVudCAjNjIgKGluIHRoZSBCcmFzcyBncm91cCkuCisjOiBQcm9ncmFtcy9taWRpLmM6MjcwCittc2dpZCAiQnJhc3MgU2VjdGlvbiIKK21zZ3N0ciAiIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgbmFtZSBvZiBNSURJIG11c2ljYWwgaW5zdHJ1bWVudCAjMTIyIChpbiB0aGUgU291bmQgRWZmZWN0cyBncm91cCkuCisjOiBQcm9ncmFtcy9taWRpLmM6NDU5Cittc2dpZCAiQnJlYXRoIE5vaXNlIgorbXNnc3RyICIiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBuYW1lIG9mIE1JREkgbXVzaWNhbCBpbnN0cnVtZW50ICMyIChpbiB0aGUgUGlhbm8gZ3JvdXApLgorIzogUHJvZ3JhbXMvbWlkaS5jOjgzCittc2dpZCAiQnJpZ2h0IEFjb3VzdGljIFBpYW5vIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL3hicmxhcGkuYzo5NAorbXNnaWQgIkJybEFQSSBhdXRob3JpemF0aW9uL2F1dGhlbnRpY2F0aW9uIHNjaGVtZXMiCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMveGJybGFwaS5jOjg3Cittc2dpZCAiQnJsQVBJIGhvc3QgYW5kL29yIHBvcnQgdG8gY29ubmVjdCB0byIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6MTQyNgorbXNnaWQgIkJ1aWxkIEluZm9ybWF0aW9uIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzo3MjYKK21zZ2lkICJDYXBpdGFsaXphdGlvbiBNb2RlIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzo4MjkKK21zZ2lkICJDYXBpdGFscyBCbGluayBQZXJpb2QiCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjgzNworbXNnaWQgIkNhcGl0YWxzIFBlcmNlbnQgVmlzaWJsZSIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6MTUxNgorbXNnaWQgIkNhdGVnb3J5IExvZyBMZXZlbCIKK21zZ3N0ciAiIgorCisjLiBDaHJvbWF0aWMgUGVyY3Vzc2lvbgorIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIG5hbWUgb2YgTUlESSBtdXNpY2FsIGluc3RydW1lbnQgIzkgKGluIHRoZSBDaHJvbWF0aWMgUGVyY3Vzc2lvbiBncm91cCkuCisjOiBQcm9ncmFtcy9taWRpLmM6MTA1Cittc2dpZCAiQ2VsZXN0YSIKK21zZ3N0ciAiIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgbmFtZSBvZiBNSURJIG11c2ljYWwgaW5zdHJ1bWVudCAjNDMgKGluIHRoZSBTdHJpbmdzIGdyb3VwKS4KKyM6IFByb2dyYW1zL21pZGkuYzoyMTEKK21zZ2lkICJDZWxsbyIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9icmx0dHktYXRiLmM6NDkKK21zZ2lkICJDaGVjayBhbiBhdHRyaWJ1dGVzIHRhYmxlLiIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9icmx0dHktdHRiLmM6MjUxMworbXNnaWQgIkNoZWNrL2VkaXQgYSB0ZXh0IChjb21wdXRlciBicmFpbGxlKSB0YWJsZSwgb3IgY29udmVydCBpdCBmcm9tIG9uZSBmb3JtYXQgdG8gYW5vdGhlci4iCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvYnJsdHR5LWN0Yi5jOjQ0OQorbXNnaWQgIkNoZWNrL3ZhbGlkYXRlIGEgY29udHJhY3Rpb24gKGxpdGVyYXJ5IGJyYWlsbGUpIHRhYmxlLCBvciB0cmFuc2xhdGUgdGV4dCBpbnRvIGNvbnRyYWN0ZWQgYnJhaWxsZS4iCittc2dzdHIgIiIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIG5hbWUgb2YgTUlESSBtdXNpY2FsIGluc3RydW1lbnQgIzUzIChpbiB0aGUgRW5zZW1ibGUgZ3JvdXApLgorIzogUHJvZ3JhbXMvbWlkaS5jOjI0MgorbXNnaWQgIkNob2lyIEFhaHMiCittc2dzdHIgIiIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIG5hbWUgb2YgTUlESSBtdXNpY2FsIGluc3RydW1lbnQgZ3JvdXAgIzIuCisjOiBQcm9ncmFtcy9taWRpLmM6MjgKK21zZ2lkICJDaHJvbWF0aWMgUGVyY3Vzc2lvbiIKK21zZ3N0ciAiIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgbmFtZSBvZiBNSURJIG11c2ljYWwgaW5zdHJ1bWVudCAjMjAgKGluIHRoZSBPcmdhbiBncm91cCkuCisjOiBQcm9ncmFtcy9taWRpLmM6MTM5Cittc2dpZCAiQ2h1cmNoIE9yZ2FuIgorbXNnc3RyICIiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBuYW1lIG9mIE1JREkgbXVzaWNhbCBpbnN0cnVtZW50ICM3MiAoaW4gdGhlIFJlZWQgZ3JvdXApLgorIzogUHJvZ3JhbXMvbWlkaS5jOjMwMQorbXNnaWQgIkNsYXJpbmV0IgorbXNnc3RyICIiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBuYW1lIG9mIE1JREkgbXVzaWNhbCBpbnN0cnVtZW50ICM4IChpbiB0aGUgUGlhbm8gZ3JvdXApLgorIzogUHJvZ3JhbXMvbWlkaS5jOjEwMQorbXNnaWQgIkNsYXZpbmV0IgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL21lbnUuYzo4OTEKK21zZ2lkICJDbG9zZSIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6MTI4OAorbXNnaWQgIkNvbG9uIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL2JybHR0eS10dW5lLmM6MTU4Cittc2dpZCAiQ29tcG9zZSBhIHR1bmUgd2l0aCB0aGUgdHVuZSBidWlsZGVyIGFuZCBwbGF5IGl0IHdpdGggdGhlIHRvbmUgZ2VuZXJhdG9yLiIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6NzAzCittc2dpZCAiQ29tcHV0ZXIgQnJhaWxsZSIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6NzM3Cittc2dpZCAiQ29tcHV0ZXIgQnJhaWxsZSBDZWxsIFR5cGUiCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjE0NTAKK21zZ2lkICJDb25maWd1cmF0aW9uIERpcmVjdG9yeSIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6MTQ1NQorbXNnaWQgIkNvbmZpZ3VyYXRpb24gRmlsZSIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9hbGVydC5jOjE2MworbXNnaWQgIkNvbnNvbGUgQmVsbCIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6MTAzNworbXNnaWQgIkNvbnNvbGUgQmVsbCBBbGVydCIKK21zZ3N0ciAiIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgbmFtZSBvZiBNSURJIG11c2ljYWwgaW5zdHJ1bWVudCAjNDQgKGluIHRoZSBTdHJpbmdzIGdyb3VwKS4KKyM6IFByb2dyYW1zL21pZGkuYzoyMTQKK21zZ2lkICJDb250cmFiYXNzIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzo3MDQKK21zZ2lkICJDb250cmFjdGVkIEJyYWlsbGUiCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjE0MDEKK21zZ2lkICJDb250cmFjdGlvbiBUYWJsZSIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9icmx0dHktY3RiLmM6NzMKK21zZ2lkICJDb250cmFjdGlvbiB0YWJsZS4iCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvYnJsdHR5LWN0Yi5jOjg3Cittc2dpZCAiQ29udHJhY3Rpb24gdmVyaWZpY2F0aW9uIHRhYmxlLiIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy94YnJsYXBpLmM6Njk1Cittc2dpZCAiQ291bGQgbm90IGdldCBYS0IgbWFqb3Igb3Bjb2RlXG4iCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjE0OTQKK21zZ2lkICJDcml0aWNhbCIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6NTQ2Cittc2dpZCAiQ3Vyc29yIENvbHVtbiIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6NTQ1CisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6NTU3Cittc2dpZCAiQ3Vyc29yIENvb3JkaW5hdGVzIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL2xvZy5jOjk0Cittc2dpZCAiQ3Vyc29yIFJvdXRpbmciCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjU0NworbXNnaWQgIkN1cnNvciBSb3ciCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvbG9nLmM6ODgKK21zZ2lkICJDdXJzb3IgVHJhY2tpbmciCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjkwNgorbXNnaWQgIkN1cnNvciBUcmFja2luZyBEZWxheSIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6NTQ4CisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6NTU5Cittc2dpZCAiQ3Vyc29yIGFuZCBXaW5kb3cgQ29sdW1uIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzo1NDkKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzo1NjAKK21zZ2lkICJDdXJzb3IgYW5kIFdpbmRvdyBSb3ciCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjEzMjYKK21zZ2lkICJEYXNoIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzoxMzE5Cittc2dpZCAiRGF0ZSBGb3JtYXQiCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjEzMDgKK21zZ2lkICJEYXRlIFBvc2l0aW9uIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzoxMzMxCittc2dpZCAiRGF0ZSBTZXBhcmF0b3IiCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjEzMTYKK21zZ2lkICJEYXkgTW9udGggWWVhciIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6MTQ5OQorbXNnaWQgIkRlYnVnIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL2NvbmZpZy5jOjQyNworbXNnaWQgIkRldmljZSBmb3IgYWNjZXNzaW5nIGJyYWlsbGUgZGlzcGxheS4iCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvY29uZmlnLmM6NTcyCittc2dpZCAiRGlzYWJsZSB0aGUgYXBwbGljYXRpb24gcHJvZ3JhbW1pbmcgaW50ZXJmYWNlLiIKK21zZ3N0ciAiIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgbmFtZSBvZiBNSURJIG11c2ljYWwgaW5zdHJ1bWVudCAjMzEgKGluIHRoZSBHdWl0YXIgZ3JvdXApLgorIzogUHJvZ3JhbXMvbWlkaS5jOjE3MworbXNnaWQgIkRpc3RvcnRpb24gR3VpdGFyIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL2NvbmZpZy5jOjUwMgorbXNnaWQgIkRvIG5vdCBhdXRvc3BlYWsgd2hlbiBicmFpbGxlIGlzIG5vdCBiZWluZyB1c2VkLiIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy94YnJsYXBpLmM6MTA3Cittc2dpZCAiRG8gbm90IHdyaXRlIGFueSB0ZXh0IHRvIHRoZSBicmFpbGxlIGRldmljZSIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9icmx0dHktdHJ0eHQuYzo3MAorbXNnaWQgIkRvbid0IGZhbGwgYmFjayB0byB0aGUgVW5pY29kZSBiYXNlIGNoYXJhY3Rlci4iCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvY29uZmlnLmM6NjI1Cittc2dpZCAiRG9uJ3Qgc3dpdGNoIHRvIGFuIHVucHJpdmlsZWdlZCB1c2VyIG9yIHJlbGlucXVpc2ggYW55IHByaXZpbGVnZXMgKGdyb3VwIG1lbWJlcnNoaXBzLCBjYXBhYmlsaXRpZXMsIGV0YykuIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL2FsZXJ0LmM6NTIKK21zZ2lkICJEb25lIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzoxMjg5CisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6MTMyOAorbXNnaWQgIkRvdCIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6OTQ0Cittc2dpZCAiRG90cyB2aWEgVW5pY29kZSBCcmFpbGxlIgorbXNnc3RyICIiCisKKyMuIE9yZ2FuCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgbmFtZSBvZiBNSURJIG11c2ljYWwgaW5zdHJ1bWVudCAjMTcgKGluIHRoZSBPcmdhbiBncm91cCkuCisjOiBQcm9ncmFtcy9taWRpLmM6MTMwCittc2dpZCAiRHJhd2JhciBPcmdhbiIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6MTQ3NQorbXNnaWQgIkRyaXZlcnMgRGlyZWN0b3J5IgorbXNnc3RyICIiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBuYW1lIG9mIE1JREkgbXVzaWNhbCBpbnN0cnVtZW50ICMxNiAoaW4gdGhlIENocm9tYXRpYyBQZXJjdXNzaW9uIGdyb3VwKS4KKyM6IFByb2dyYW1zL21pZGkuYzoxMjYKK21zZ2lkICJEdWxjaW1lciIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6ODgxCittc2dpZCAiRWFnZXIgU2xpZGluZyBCcmFpbGxlIFdpbmRvdyIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9icmx0dHktaGlkLmM6MjAxCittc2dpZCAiRWNobyAoaW4gaGV4YWRlY2ltYWwpIGlucHV0IHJlY2VpdmVkIGZyb20gdGhlIGRldmljZS4iCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvYnJsdHR5LXR0Yi5jOjE0OAorbXNnaWQgIkVkaXQgdGFibGUuIgorbXNnc3RyICIiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBuYW1lIG9mIE1JREkgbXVzaWNhbCBpbnN0cnVtZW50ICMzNCAoaW4gdGhlIEJhc3MgZ3JvdXApLgorIzogUHJvZ3JhbXMvbWlkaS5jOjE4MworbXNnaWQgIkVsZWN0cmljIEJhc3MgKGZpbmdlcikiCittc2dzdHIgIiIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIG5hbWUgb2YgTUlESSBtdXNpY2FsIGluc3RydW1lbnQgIzM1IChpbiB0aGUgQmFzcyBncm91cCkuCisjOiBQcm9ncmFtcy9taWRpLmM6MTg2Cittc2dpZCAiRWxlY3RyaWMgQmFzcyAocGljaykiCittc2dzdHIgIiIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIG5hbWUgb2YgTUlESSBtdXNpY2FsIGluc3RydW1lbnQgIzMgKGluIHRoZSBQaWFubyBncm91cCkuCisjOiBQcm9ncmFtcy9taWRpLmM6ODYKK21zZ2lkICJFbGVjdHJpYyBHcmFuZCBQaWFubyIKK21zZ3N0ciAiIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgbmFtZSBvZiBNSURJIG11c2ljYWwgaW5zdHJ1bWVudCAjMjggKGluIHRoZSBHdWl0YXIgZ3JvdXApLgorIzogUHJvZ3JhbXMvbWlkaS5jOjE2NAorbXNnaWQgIkVsZWN0cmljIEd1aXRhciAoY2xlYW4pIgorbXNnc3RyICIiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBuYW1lIG9mIE1JREkgbXVzaWNhbCBpbnN0cnVtZW50ICMyNyAoaW4gdGhlIEd1aXRhciBncm91cCkuCisjOiBQcm9ncmFtcy9taWRpLmM6MTYxCittc2dpZCAiRWxlY3RyaWMgR3VpdGFyIChqYXp6KSIKK21zZ3N0ciAiIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgbmFtZSBvZiBNSURJIG11c2ljYWwgaW5zdHJ1bWVudCAjMjkgKGluIHRoZSBHdWl0YXIgZ3JvdXApLgorIzogUHJvZ3JhbXMvbWlkaS5jOjE2NworbXNnaWQgIkVsZWN0cmljIEd1aXRhciAobXV0ZWQpIgorbXNnc3RyICIiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBuYW1lIG9mIE1JREkgbXVzaWNhbCBpbnN0cnVtZW50ICM1IChpbiB0aGUgUGlhbm8gZ3JvdXApLgorIzogUHJvZ3JhbXMvbWlkaS5jOjkyCittc2dpZCAiRWxlY3RyaWMgUGlhbm8gMSIKK21zZ3N0ciAiIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgbmFtZSBvZiBNSURJIG11c2ljYWwgaW5zdHJ1bWVudCAjNiAoaW4gdGhlIFBpYW5vIGdyb3VwKS4KKyM6IFByb2dyYW1zL21pZGkuYzo5NQorbXNnaWQgIkVsZWN0cmljIFBpYW5vIDIiCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjE0OTIKK21zZ2lkICJFbWVyZ2VuY3kiCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjU0MQorbXNnaWQgIkVuZCIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6ODY3Cittc2dpZCAiRW5kIG9mIExpbmUiCittc2dzdHIgIiIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIG5hbWUgb2YgTUlESSBtdXNpY2FsIGluc3RydW1lbnQgIzcwIChpbiB0aGUgUmVlZCBncm91cCkuCisjOiBQcm9ncmFtcy9taWRpLmM6Mjk1Cittc2dpZCAiRW5nbGlzaCBIb3JuIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzoxMjMxCittc2dpZCAiRW5xdWV1ZSIKK21zZ3N0ciAiIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgbmFtZSBvZiBNSURJIG11c2ljYWwgaW5zdHJ1bWVudCBncm91cCAjNy4KKyM6IFByb2dyYW1zL21pZGkuYzo0MworbXNnaWQgIkVuc2VtYmxlIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzoxNDk1Cittc2dpZCAiRXJyb3IiCittc2dzdHIgIiIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIG5hbWUgb2YgTUlESSBtdXNpY2FsIGluc3RydW1lbnQgZ3JvdXAgIzE0LgorIzogUHJvZ3JhbXMvbWlkaS5jOjY4Cittc2dpZCAiRXRobmljIEluc3RydW1lbnRzIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzoxMDM0Cittc2dpZCAiRXZlbnQgQWxlcnRzIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzo3MTQKK21zZ2lkICJFeHBhbmQgQ3VycmVudCBXb3JkIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL2NvbmZpZy5jOjU2NAorbXNnaWQgIkV4cGxpY2l0IHByZWZlcmVuY2Ugc2V0dGluZ3MuIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzoxMDYxCittc2dpZCAiRk0iCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjEwOTkKK21zZ2lkICJGTSBWb2x1bWUiCittc2dzdHIgIiIKKworIy4gU3ludGggRk0KKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBuYW1lIG9mIE1JREkgbXVzaWNhbCBpbnN0cnVtZW50ICM5NyAoaW4gdGhlIFN5bnRoIEZNIGdyb3VwKS4KKyM6IFByb2dyYW1zL21pZGkuYzozODAKK21zZ2lkICJGWCAxIChyYWluKSIKK21zZ3N0ciAiIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgbmFtZSBvZiBNSURJIG11c2ljYWwgaW5zdHJ1bWVudCAjOTggKGluIHRoZSBTeW50aCBGTSBncm91cCkuCisjOiBQcm9ncmFtcy9taWRpLmM6MzgzCittc2dpZCAiRlggMiAoc291bmR0cmFjaykiCittc2dzdHIgIiIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIG5hbWUgb2YgTUlESSBtdXNpY2FsIGluc3RydW1lbnQgIzk5IChpbiB0aGUgU3ludGggRk0gZ3JvdXApLgorIzogUHJvZ3JhbXMvbWlkaS5jOjM4NgorbXNnaWQgIkZYIDMgKGNyeXN0YWwpIgorbXNnc3RyICIiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBuYW1lIG9mIE1JREkgbXVzaWNhbCBpbnN0cnVtZW50ICMxMDAgKGluIHRoZSBTeW50aCBGTSBncm91cCkuCisjOiBQcm9ncmFtcy9taWRpLmM6Mzg5Cittc2dpZCAiRlggNCAoYXRtb3NwaGVyZSkiCittc2dzdHIgIiIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIG5hbWUgb2YgTUlESSBtdXNpY2FsIGluc3RydW1lbnQgIzEwMSAoaW4gdGhlIFN5bnRoIEZNIGdyb3VwKS4KKyM6IFByb2dyYW1zL21pZGkuYzozOTIKK21zZ2lkICJGWCA1IChicmlnaHRuZXNzKSIKK21zZ3N0ciAiIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgbmFtZSBvZiBNSURJIG11c2ljYWwgaW5zdHJ1bWVudCAjMTAyIChpbiB0aGUgU3ludGggRk0gZ3JvdXApLgorIzogUHJvZ3JhbXMvbWlkaS5jOjM5NQorbXNnaWQgIkZYIDYgKGdvYmxpbnMpIgorbXNnc3RyICIiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBuYW1lIG9mIE1JREkgbXVzaWNhbCBpbnN0cnVtZW50ICMxMDMgKGluIHRoZSBTeW50aCBGTSBncm91cCkuCisjOiBQcm9ncmFtcy9taWRpLmM6Mzk4Cittc2dpZCAiRlggNyAoZWNob2VzKSIKK21zZ3N0ciAiIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgbmFtZSBvZiBNSURJIG11c2ljYWwgaW5zdHJ1bWVudCAjMTA0IChpbiB0aGUgU3ludGggRk0gZ3JvdXApLgorIy4geGdldHRleHQ6IChzY2ktZmkgaXMgYSBjb21tb24gc2hvcnQgZm9ybSBmb3Igc2NpZW5jZSBmaWN0aW9uKQorIzogUHJvZ3JhbXMvbWlkaS5jOjQwMgorbXNnaWQgIkZYIDggKHNjaS1maSkiCittc2dzdHIgIiIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIG5hbWUgb2YgTUlESSBtdXNpY2FsIGluc3RydW1lbnQgIzExMSAoaW4gdGhlIEV0aG5pYyBncm91cCkuCisjOiBQcm9ncmFtcy9taWRpLmM6NDI0Cittc2dpZCAiRmlkZGxlIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL2JybHR0eS1oaWQuYzo3NgorbXNnaWQgIkZpbHRlciBmb3IgYSBCbHVldG9vdGggZGV2aWNlLiIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9icmx0dHktaGlkLmM6NzAKK21zZ2lkICJGaWx0ZXIgZm9yIGEgVVNCIGRldmljZSAodGhlIGRlZmF1bHQgaWYgbm90IGFtYmlndW91cykuIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL2JybHR0eS1oaWQuYzoxMDY1Cittc2dpZCAiRmluZCBISUQgZGV2aWNlcywgbGlzdCByZXBvcnQgZGVzY3JpcHRvcnMsIHJlYWQvd3JpdGUgcmVwb3J0cy9mZWF0dXJlcywgb3IgbW9uaXRvciBpbnB1dCBmcm9tIGEgSElEIGRldmljZS4iCittc2dzdHIgIiIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIG5hbWUgb2YgTUlESSBtdXNpY2FsIGluc3RydW1lbnQgIzc0IChpbiB0aGUgUGlwZSBncm91cCkuCisjOiBQcm9ncmFtcy9taWRpLmM6MzA4Cittc2dpZCAiRmx1dGUiCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvYnJsdHR5LWN0Yi5jOjY1Cittc2dpZCAiRm9yY2UgaW1tZWRpYXRlIG91dHB1dC4iCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvYnJsdHR5LXR0Yi5jOjE1NQorbXNnaWQgIkZvcm1hdCBvZiBpbnB1dCBmaWxlLiIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9icmx0dHktdHRiLmM6MTYyCittc2dpZCAiRm9ybWF0IG9mIG91dHB1dCBmaWxlLiIKK21zZ3N0ciAiIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgbmFtZSBvZiBNSURJIG11c2ljYWwgaW5zdHJ1bWVudCAjNjEgKGluIHRoZSBCcmFzcyBncm91cCkuCisjOiBQcm9ncmFtcy9taWRpLmM6MjY3Cittc2dpZCAiRnJlbmNoIEhvcm4iCittc2dzdHIgIiIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIG5hbWUgb2YgTUlESSBtdXNpY2FsIGluc3RydW1lbnQgIzM2IChpbiB0aGUgQmFzcyBncm91cCkuCisjOiBQcm9ncmFtcy9taWRpLmM6MTg5Cittc2dpZCAiRnJldGxlc3MgQmFzcyIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9hbGVydC5jOjk3Cittc2dpZCAiRnJvemVuIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzo1NTYKK21zZ2lkICJHZW5lcmljIgorbXNnc3RyICIiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBuYW1lIG9mIE1JREkgbXVzaWNhbCBpbnN0cnVtZW50ICMxMCAoaW4gdGhlIENocm9tYXRpYyBQZXJjdXNzaW9uIGdyb3VwKS4KKyM6IFByb2dyYW1zL21pZGkuYzoxMDgKK21zZ2lkICJHbG9ja2Vuc3BpZWwiCittc2dzdHIgIiIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIG5hbWUgb2YgTUlESSBtdXNpY2FsIGluc3RydW1lbnQgZ3JvdXAgIzQuCisjOiBQcm9ncmFtcy9taWRpLmM6MzQKK21zZ2lkICJHdWl0YXIiCittc2dzdHIgIiIKKworIy4gU291bmQgRWZmZWN0cworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIG5hbWUgb2YgTUlESSBtdXNpY2FsIGluc3RydW1lbnQgIzEyMSAoaW4gdGhlIFNvdW5kIEVmZmVjdHMgZ3JvdXApLgorIzogUHJvZ3JhbXMvbWlkaS5jOjQ1NgorbXNnaWQgIkd1aXRhciBGcmV0IE5vaXNlIgorbXNnc3RyICIiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBuYW1lIG9mIE1JREkgbXVzaWNhbCBpbnN0cnVtZW50ICMzMiAoaW4gdGhlIEd1aXRhciBncm91cCkuCisjOiBQcm9ncmFtcy9taWRpLmM6MTc2Cittc2dpZCAiR3VpdGFyIEhhcm1vbmljcyIKK21zZ3N0ciAiIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgbmFtZSBvZiBNSURJIG11c2ljYWwgaW5zdHJ1bWVudCAjMTI4IChpbiB0aGUgU291bmQgRWZmZWN0cyBncm91cCkuCisjOiBQcm9ncmFtcy9taWRpLmM6NDc3Cittc2dpZCAiR3Vuc2hvdCIKK21zZ3N0ciAiIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgbmFtZSBvZiBNSURJIG11c2ljYWwgaW5zdHJ1bWVudCAjMjMgKGluIHRoZSBPcmdhbiBncm91cCkuCisjOiBQcm9ncmFtcy9taWRpLmM6MTQ4Cittc2dpZCAiSGFybW9uaWNhIgorbXNnc3RyICIiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBuYW1lIG9mIE1JREkgbXVzaWNhbCBpbnN0cnVtZW50ICM3IChpbiB0aGUgUGlhbm8gZ3JvdXApLgorIzogUHJvZ3JhbXMvbWlkaS5jOjk4Cittc2dpZCAiSGFycHNpY2hvcmQiCittc2dzdHIgIiIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIG5hbWUgb2YgTUlESSBtdXNpY2FsIGluc3RydW1lbnQgIzEyNiAoaW4gdGhlIFNvdW5kIEVmZmVjdHMgZ3JvdXApLgorIzogUHJvZ3JhbXMvbWlkaS5jOjQ3MQorbXNnaWQgIkhlbGljb3B0ZXIiCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvc2NyX2hlbHAuYzoyMTUKK21zZ2lkICJIZWxwIFNjcmVlbiIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6NjY4Cittc2dpZCAiSGlkZSIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6NzQ5CisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6MTAxNQorbXNnaWQgIkhpZ2giCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjkyMworbXNnaWQgIkhpZ2hsaWdodCBCcmFpbGxlIFdpbmRvdyBMb2NhdGlvbiIKK21zZ3N0ciAiIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgbmFtZSBvZiBNSURJIG11c2ljYWwgaW5zdHJ1bWVudCAjNCAoaW4gdGhlIFBpYW5vIGdyb3VwKS4KKyM6IFByb2dyYW1zL21pZGkuYzo4OQorbXNnaWQgIkhvbmt5dG9uayBQaWFubyIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9sb2cuYzoxNDgKK21zZ2lkICJIdW1hbiBJbnRlcmZhY2UgSS9PIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzoxMjMwCittc2dpZCAiSW1tZWRpYXRlIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL3hicmxhcGkuYzo2OTEKK21zZ2lkICJJbmNvbXBhdGlibGUgWEtCIGxpYnJhcnlcbiIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy94YnJsYXBpLmM6NjkzCittc2dpZCAiSW5jb21wYXRpYmxlIFhLQiBzZXJ2ZXIgc3VwcG9ydFxuIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzoxNDk4Cittc2dpZCAiSW5mb3JtYXRpb24iCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjk1OAorbXNnaWQgIklucHV0IE9wdGlvbnMiCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvbG9nLmM6NjQKK21zZ2lkICJJbnB1dCBQYWNrZXRzIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL2NvbmZpZy5jOjc1NAorIywgYy1mb3JtYXQKK21zZ2lkICJJbnN0YWxsIHRoZSAlcyBzZXJ2aWNlLCBhbmQgdGhlbiBleGl0LiIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6MTUwMgorbXNnaWQgIkludGVybmFsIFBhcmFtZXRlcnMiCittc2dzdHIgIiIKKworIzogRHJpdmVycy9TY3JlZW4vQW5kcm9pZC9zY3JlZW4uYzoxOTcKK21zZ2lkICJKYXZhIGNsYXNzIG5vdCBmb3VuZCIKK21zZ3N0ciAiIgorCisjOiBEcml2ZXJzL1NjcmVlbi9BbmRyb2lkL3NjcmVlbi5jOjE4MQorbXNnaWQgIkphdmEgZXhjZXB0aW9uIG9jY3VycmVkIgorbXNnc3RyICIiCisKKyM6IERyaXZlcnMvU2NyZWVuL0FuZHJvaWQvc2NyZWVuLmM6MTk0Cittc2dpZCAiSmF2YSBtZXRob2Qgbm90IGZvdW5kIgorbXNnc3RyICIiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBuYW1lIG9mIE1JREkgbXVzaWNhbCBpbnN0cnVtZW50ICMxMDkgKGluIHRoZSBFdGhuaWMgZ3JvdXApLgorIzogUHJvZ3JhbXMvbWlkaS5jOjQxOAorbXNnaWQgIkthbGltYmEiCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvY29uZmlnLmM6MTc0MworbXNnaWQgIktleSBCaW5kaW5ncyIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9jb25maWcuYzoxMjQ2Cittc2dpZCAiS2V5IEhlbHAiCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvY29uZmlnLmM6MTc0OAorIzogUHJvZ3JhbXMva3RiX2xpc3QuYzo3MzcKK21zZ2lkICJLZXkgVGFibGUiCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjkzNworbXNnaWQgIktleWJvYXJkIEVuYWJsZWQiCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvbG9nLmM6ODIKK21zZ2lkICJLZXlib2FyZCBLZXkgRXZlbnRzIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzoxMDQ0Cittc2dpZCAiS2V5Ym9hcmQgTEVEIEFsZXJ0cyIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6MTAyNgorbXNnaWQgIktleWJvYXJkIFRhYmxlIgorbXNnc3RyICIiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBuYW1lIG9mIE1JREkgbXVzaWNhbCBpbnN0cnVtZW50ICMxMDggKGluIHRoZSBFdGhuaWMgZ3JvdXApLgorIzogUHJvZ3JhbXMvbWlkaS5jOjQxNQorbXNnaWQgIktvdG8iCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvY29uZmlnLmM6MzEzMgorbXNnaWQgIkxhbmd1YWdlIgorbXNnc3RyICIiCisKKyMuIFN5bnRoIExlYWQKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBuYW1lIG9mIE1JREkgbXVzaWNhbCBpbnN0cnVtZW50ICM4MSAoaW4gdGhlIFN5bnRoIExlYWQgZ3JvdXApLgorIzogUHJvZ3JhbXMvbWlkaS5jOjMzMAorbXNnaWQgIkxlYWQgMSAoc3F1YXJlKSIKK21zZ3N0ciAiIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgbmFtZSBvZiBNSURJIG11c2ljYWwgaW5zdHJ1bWVudCAjODIgKGluIHRoZSBTeW50aCBMZWFkIGdyb3VwKS4KKyM6IFByb2dyYW1zL21pZGkuYzozMzMKK21zZ2lkICJMZWFkIDIgKHNhd3Rvb3RoKSIKK21zZ3N0ciAiIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgbmFtZSBvZiBNSURJIG11c2ljYWwgaW5zdHJ1bWVudCAjODMgKGluIHRoZSBTeW50aCBMZWFkIGdyb3VwKS4KKyM6IFByb2dyYW1zL21pZGkuYzozMzYKK21zZ2lkICJMZWFkIDMgKGNhbGxpb3BlKSIKK21zZ3N0ciAiIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgbmFtZSBvZiBNSURJIG11c2ljYWwgaW5zdHJ1bWVudCAjODQgKGluIHRoZSBTeW50aCBMZWFkIGdyb3VwKS4KKyM6IFByb2dyYW1zL21pZGkuYzozMzkKK21zZ2lkICJMZWFkIDQgKGNoaWZmKSIKK21zZ3N0ciAiIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgbmFtZSBvZiBNSURJIG11c2ljYWwgaW5zdHJ1bWVudCAjODUgKGluIHRoZSBTeW50aCBMZWFkIGdyb3VwKS4KKyM6IFByb2dyYW1zL21pZGkuYzozNDIKK21zZ2lkICJMZWFkIDUgKGNoYXJhbmcpIgorbXNnc3RyICIiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBuYW1lIG9mIE1JREkgbXVzaWNhbCBpbnN0cnVtZW50ICM4NiAoaW4gdGhlIFN5bnRoIExlYWQgZ3JvdXApLgorIzogUHJvZ3JhbXMvbWlkaS5jOjM0NQorbXNnaWQgIkxlYWQgNiAodm9pY2UpIgorbXNnc3RyICIiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBuYW1lIG9mIE1JREkgbXVzaWNhbCBpbnN0cnVtZW50ICM4NyAoaW4gdGhlIFN5bnRoIExlYWQgZ3JvdXApLgorIzogUHJvZ3JhbXMvbWlkaS5jOjM0OAorbXNnaWQgIkxlYWQgNyAoZmlmdGhzKSIKK21zZ3N0ciAiIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgbmFtZSBvZiBNSURJIG11c2ljYWwgaW5zdHJ1bWVudCAjODggKGluIHRoZSBTeW50aCBMZWFkIGdyb3VwKS4KKyM6IFByb2dyYW1zL21pZGkuYzozNTEKK21zZ2lkICJMZWFkIDggKGJhc3MgKyBsZWFkKSIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9sZWFybi5jOjEwMQorbXNnaWQgIkxlYXJuIE1vZGUiCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjEzNDMKK21zZ2lkICJMZWZ0IgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL2JybHR0eS1oaWQuYzoxNjcKK21zZ2lkICJMaXN0IGVhY2ggcmVwb3J0J3MgaWRlbnRpZmllciBhbmQgc2l6ZXMuIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL2JybHR0eS1rdGIuYzo1OQorbXNnaWQgIkxpc3Qga2V5IG5hbWVzLiIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9icmx0dHkta3RiLmM6NjUKK21zZ2lkICJMaXN0IGtleSB0YWJsZSBpbiBoZWxwIHNjcmVlbiBmb3JtYXQuIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL2JybHR0eS1rdGIuYzo3MQorbXNnaWQgIkxpc3Qga2V5IHRhYmxlIGluIHJlU3RydWN0dXJlZFRleHQgZm9ybWF0LiIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9icmx0dHktaGlkLmM6MTYxCittc2dpZCAiTGlzdCB0aGUgSElEIHJlcG9ydCBkZXNjcmlwdG9yJ3MgaXRlbXMuIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL2JybHR0eS1jbGRyLmM6MjM3Cittc2dpZCAiTGlzdCB0aGUgY2hhcmFjdGVycyBkZWZpbmVkIHdpdGhpbiBhIENMRFIgKENvbW1vbiBMb2NhbGUgRGF0YSBSZXBvc2l0b3J5IFByb2plY3QpIGFubm90YXRpb25zIGZpbGUuIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL2JybHR0eS1sc2luYy5jOjk1Cittc2dpZCAiTGlzdCB0aGUgcGF0aHMgdG8gYSBkYXRhIGZpbGUgYW5kIHRob3NlIHdoaWNoIGl0IHJlY3Vyc2l2ZWx5IGluY2x1ZGVzLiIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6MTQ4NQorbXNnaWQgIkxvY2FsZSBEaXJlY3RvcnkiCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjE1MjEKK21zZ2lkICJMb2cgQ2F0ZWdvcmllcyIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6MTU4MgorbXNnaWQgIkxvZyBNZXNzYWdlcyIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9jb25maWcuYzozODAKK21zZ2lkICJMb2cgdGhlIHZlcnNpb25zIG9mIHRoZSBjb3JlLCBBUEksIGFuZCBidWlsdC1pbiBkcml2ZXJzLCBhbmQgdGhlbiBleGl0LiIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9jb25maWcuYzo2MTIKK21zZ2lkICJMb2cgdG8gc3RhbmRhcmQgZXJyb3IgcmF0aGVyIHRoYW4gdG8gdGhlIHN5c3RlbSBsb2cuIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL2NvbmZpZy5jOjU5NworIywgYy1mb3JtYXQKK21zZ2lkICJMb2dnaW5nIGxldmVsICglcyBvciBvbmUgb2YgeyVzfSkgYW5kL29yIGxvZyBjYXRlZ29yaWVzIHRvIGVuYWJsZSAoYW55IGNvbWJpbmF0aW9uIG9mIHslc30sIGVhY2ggb3B0aW9uYWxseSBwcmVmaXhlZCBieSAlcyB0byBkaXNhYmxlKS4iCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjk4MAorbXNnaWQgIkxvbmcgUHJlc3MgVGltZSIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6NzQ3CisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6MTAxMworbXNnaWQgIkxvdyIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6NjY2Cittc2dpZCAiTG93ZXIgTGVmdCBEb3QiCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjY2NworbXNnaWQgIkxvd2VyIFJpZ2h0IERvdCIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6MTA2MAorbXNnaWQgIk1JREkiCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvY29uZmlnLmM6NjgyCittc2dpZCAiTUlESSAoTXVzaWNhbCBJbnN0cnVtZW50IERpZ2l0YWwgSW50ZXJmYWNlKSBkZXZpY2Ugc3BlY2lmaWVyLiIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6MTA5MAorbXNnaWQgIk1JREkgSW5zdHJ1bWVudCIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6MTA4MAorbXNnaWQgIk1JREkgVm9sdW1lIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzoxNDQ1Cittc2dpZCAiTWFpbGluZyBMaXN0IgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL2JybHR0eS1jbGlwLmM6MTU0Cittc2dpZCAiTWFuYWdlIGJybHR0eSdzIGNsaXBib2FyZCBmcm9tIHRoZSBjb21tYW5kIGxpbmUuIgorbXNnc3RyICIiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBuYW1lIG9mIE1JREkgbXVzaWNhbCBpbnN0cnVtZW50ICMxMyAoaW4gdGhlIENocm9tYXRpYyBQZXJjdXNzaW9uIGdyb3VwKS4KKyM6IFByb2dyYW1zL21pZGkuYzoxMTcKK21zZ2lkICJNYXJpbWJhIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL2JybHR0eS1oaWQuYzoxMTgKK21zZ2lkICJNYXRjaCB0aGUgZnVsbCBkZXZpY2UgYWRkcmVzcyAoQmx1ZXRvb3RoIG9ubHkgLSBhbGwgc2l4IHR3by1kaWdpdCwgaGV4YWRlY2ltYWwgb2N0ZXRzIHNlcGFyYXRlZCBieSBhIGNvbG9uIFs6XSkuIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL2JybHR0eS1oaWQuYzo5MAorbXNnaWQgIk1hdGNoIHRoZSBwcm9kdWN0IGlkZW50aWZpZXIgKGZvdXIgaGV4YWRlY2ltYWwgZGlnaXRzKS4iCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvYnJsdHR5LWhpZC5jOjEyNQorbXNnaWQgIk1hdGNoIHRoZSBzdGFydCBvZiB0aGUgZGV2aWNlIG5hbWUgKEJsdWV0b290aCBvbmx5KS4iCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvYnJsdHR5LWhpZC5jOjk3Cittc2dpZCAiTWF0Y2ggdGhlIHN0YXJ0IG9mIHRoZSBtYW51ZmFjdHVyZXIgbmFtZSAoVVNCIG9ubHkpLiIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9icmx0dHktaGlkLmM6MTA0Cittc2dpZCAiTWF0Y2ggdGhlIHN0YXJ0IG9mIHRoZSBwcm9kdWN0IGRlc2NyaXB0aW9uIChVU0Igb25seSkuIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL2JybHR0eS1oaWQuYzoxMTEKK21zZ2lkICJNYXRjaCB0aGUgc3RhcnQgb2YgdGhlIHNlcmlhbCBudW1iZXIgKFVTQiBvbmx5KS4iCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvYnJsdHR5LWhpZC5jOjgzCittc2dpZCAiTWF0Y2ggdGhlIHZlbmRvciBpZGVudGlmaWVyIChmb3VyIGhleGFkZWNpbWFsIGRpZ2l0cykuIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzo3NTAKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzoxMDE2Cittc2dpZCAiTWF4aW11bSIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9icmx0dHktY3RiLmM6NTMKK21zZ2lkICJNYXhpbXVtIGxlbmd0aCBvZiBhbiBvdXRwdXQgbGluZS4iCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjc0OAorIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjEwMTQKK21zZ2lkICJNZWRpdW0iCittc2dzdHIgIiIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIG5hbWUgb2YgTUlESSBtdXNpY2FsIGluc3RydW1lbnQgIzExOCAoaW4gdGhlIFBlcmN1c3NpdmUgZ3JvdXApLgorIzogUHJvZ3JhbXMvbWlkaS5jOjQ0NgorbXNnaWQgIk1lbG9kaWMgVG9tIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzo2ODAKK21zZ2lkICJNZW51IE9wdGlvbnMiCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvY29uZmlnLmM6NjQyCittc2dpZCAiTWVzc2FnZSBob2xkIHRpbWVvdXQgKGluIDEwbXMgdW5pdHMpLiIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6NzQ2CisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6MTAxMgorbXNnaWQgIk1pbmltdW0iCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvY29uZmlnLmM6NTA5CisjLCBjLWZvcm1hdAorbXNnaWQgIk1pbmltdW0gc2NyZWVuIGNvbnRlbnQgcXVhbGl0eSB0byBhdXRvc3BlYWsgKG9uZSBvZiB7JXN9KS4iCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjEzMTUKK21zZ2lkICJNb250aCBEYXkgWWVhciIKK21zZ3N0ciAiIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgbmFtZSBvZiBNSURJIG11c2ljYWwgaW5zdHJ1bWVudCAjMTEgKGluIHRoZSBDaHJvbWF0aWMgUGVyY3Vzc2lvbiBncm91cCkuCisjOiBQcm9ncmFtcy9taWRpLmM6MTExCittc2dpZCAiTXVzaWMgQm94IgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzoxMDYwCittc2dpZCAiTXVzaWNhbCBJbnN0cnVtZW50IERpZ2l0YWwgSW50ZXJmYWNlIgorbXNnc3RyICIiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBuYW1lIG9mIE1JREkgbXVzaWNhbCBpbnN0cnVtZW50ICM2MCAoaW4gdGhlIEJyYXNzIGdyb3VwKS4KKyM6IFByb2dyYW1zL21pZGkuYzoyNjQKK21zZ2lkICJNdXRlZCBUcnVtcGV0IgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL2NvbmZpZy5jOjQ2NworbXNnaWQgIk5hbWUgb2Ygb3IgcGF0aCB0byBhdHRyaWJ1dGVzIHRhYmxlLiIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9jb25maWcuYzo0NTkKK21zZ2lkICJOYW1lIG9mIG9yIHBhdGggdG8gY29udHJhY3Rpb24gdGFibGUuIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL2NvbmZpZy5jOjU1NgorbXNnaWQgIk5hbWUgb2Ygb3IgcGF0aCB0byBkZWZhdWx0IHByZWZlcmVuY2VzIGZpbGUuIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL2NvbmZpZy5jOjUzOQorbXNnaWQgIk5hbWUgb2Ygb3IgcGF0aCB0byBrZXlib2FyZCB0YWJsZS4iCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvY29uZmlnLmM6NDk1Cittc2dpZCAiTmFtZSBvZiBvciBwYXRoIHRvIHNwZWVjaCBpbnB1dCBvYmplY3QuIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL2NvbmZpZy5jOjQ0OQorIywgYy1mb3JtYXQKK21zZ2lkICJOYW1lIG9mIG9yIHBhdGggdG8gdGV4dCB0YWJsZSAob3IgJXMpLiIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6ODQ2Cittc2dpZCAiTmF2aWdhdGlvbiBPcHRpb25zIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL21lbnUuYzo1MjMKK21zZ2lkICJObyIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6NzIxCittc2dpZCAiTm8gQ2FwaXRhbGl6YXRpb24iCittc2dzdHIgIiIKKworIzogLmM6NgorIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjg5OQorIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjExOTQKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzoxMjA3CisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6MTIyMAorIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjEzMDMKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzoxMzQyCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6MTM2MgorbXNnaWQgIk5vbmUiCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjE0OTcKK21zZ2lkICJOb3RpY2UiCittc2dzdHIgIiIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIG5hbWUgb2YgTUlESSBtdXNpY2FsIGluc3RydW1lbnQgIzY5IChpbiB0aGUgUmVlZCBncm91cCkuCisjOiBQcm9ncmFtcy9taWRpLmM6MjkyCittc2dpZCAiT2JvZSIKK21zZ3N0ciAiIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgbmFtZSBvZiBNSURJIG11c2ljYWwgaW5zdHJ1bWVudCAjODAgKGluIHRoZSBQaXBlIGdyb3VwKS4KKyM6IFByb2dyYW1zL21pZGkuYzozMjYKK21zZ2lkICJPY2FyaW5hIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzo5NjIKK21zZ2lkICJPZmYiCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvY29uZmlnLmM6MTgzNgorbXNnaWQgIk9sZCBQcmVmZXJlbmNlcyBGaWxlIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzo5NzUKK21zZ2lkICJPbiBGaXJzdCBSZWxlYXNlIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL2NtZGxpbmUuYzoyODEKK21zZ2lkICJPcHRpb25zIgorbXNnc3RyICIiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBuYW1lIG9mIE1JREkgbXVzaWNhbCBpbnN0cnVtZW50ICM1NiAoaW4gdGhlIEVuc2VtYmxlIGdyb3VwKS4KKyM6IFByb2dyYW1zL21pZGkuYzoyNTEKK21zZ2lkICJPcmNoZXN0cmEgSGl0IgorbXNnc3RyICIiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBuYW1lIG9mIE1JREkgbXVzaWNhbCBpbnN0cnVtZW50ICM0NyAoaW4gdGhlIFN0cmluZ3MgZ3JvdXApLgorIzogUHJvZ3JhbXMvbWlkaS5jOjIyMworbXNnaWQgIk9yY2hlc3RyYWwgSGFycCIKK21zZ3N0ciAiIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgbmFtZSBvZiBNSURJIG11c2ljYWwgaW5zdHJ1bWVudCBncm91cCAjMy4KKyM6IFByb2dyYW1zL21pZGkuYzozMQorbXNnaWQgIk9yZ2FuIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL2xvZy5jOjcwCittc2dpZCAiT3V0cHV0IFBhY2tldHMiCittc2dzdHIgIiIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIG5hbWUgb2YgTUlESSBtdXNpY2FsIGluc3RydW1lbnQgIzMwIChpbiB0aGUgR3VpdGFyIGdyb3VwKS4KKyM6IFByb2dyYW1zL21pZGkuYzoxNzAKK21zZ2lkICJPdmVyZHJpdmVuIEd1aXRhciIKK21zZ3N0ciAiIgorCisjOiBEcml2ZXJzL0JyYWlsbGUvSXJpcy9icmFpbGxlLmM6MTU0OAorbXNnaWQgIlBDIG1vZGUiCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjEwNTkKK21zZ2lkICJQQ00iCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvY29uZmlnLmM6NjcyCittc2dpZCAiUENNIChzb3VuZGNhcmQgZGlnaXRhbCBhdWRpbykgZGV2aWNlIHNwZWNpZmllci4iCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjEwNzIKK21zZ2lkICJQQ00gVm9sdW1lIgorbXNnc3RyICIiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgUEFTU1BTMiBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6MTUwMworbXNnaWQgIlBTLzIgKHNldCAzKSBrZXlib2FyZCBzY2FuIGNvZGUiCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjE0MzUKK21zZ2lkICJQYWNrYWdlIFJldmlzaW9uIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzoxNDMwCittc2dpZCAiUGFja2FnZSBWZXJzaW9uIgorbXNnc3RyICIiCisKKyMuIFN5bnRoIFBhZAorIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIG5hbWUgb2YgTUlESSBtdXNpY2FsIGluc3RydW1lbnQgIzg5IChpbiB0aGUgU3ludGggUGFkIGdyb3VwKS4KKyM6IFByb2dyYW1zL21pZGkuYzozNTUKK21zZ2lkICJQYWQgMSAobmV3IGFnZSkiCittc2dzdHIgIiIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIG5hbWUgb2YgTUlESSBtdXNpY2FsIGluc3RydW1lbnQgIzkwIChpbiB0aGUgU3ludGggUGFkIGdyb3VwKS4KKyM6IFByb2dyYW1zL21pZGkuYzozNTgKK21zZ2lkICJQYWQgMiAod2FybSkiCittc2dzdHIgIiIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIG5hbWUgb2YgTUlESSBtdXNpY2FsIGluc3RydW1lbnQgIzkxIChpbiB0aGUgU3ludGggUGFkIGdyb3VwKS4KKyM6IFByb2dyYW1zL21pZGkuYzozNjEKK21zZ2lkICJQYWQgMyAocG9seXN5bnRoKSIKK21zZ3N0ciAiIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgbmFtZSBvZiBNSURJIG11c2ljYWwgaW5zdHJ1bWVudCAjOTIgKGluIHRoZSBTeW50aCBQYWQgZ3JvdXApLgorIzogUHJvZ3JhbXMvbWlkaS5jOjM2NAorbXNnaWQgIlBhZCA0IChjaG9pcikiCittc2dzdHIgIiIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIG5hbWUgb2YgTUlESSBtdXNpY2FsIGluc3RydW1lbnQgIzkzIChpbiB0aGUgU3ludGggUGFkIGdyb3VwKS4KKyM6IFByb2dyYW1zL21pZGkuYzozNjcKK21zZ2lkICJQYWQgNSAoYm93ZWQpIgorbXNnc3RyICIiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBuYW1lIG9mIE1JREkgbXVzaWNhbCBpbnN0cnVtZW50ICM5NCAoaW4gdGhlIFN5bnRoIFBhZCBncm91cCkuCisjOiBQcm9ncmFtcy9taWRpLmM6MzcwCittc2dpZCAiUGFkIDYgKG1ldGFsbGljKSIKK21zZ3N0ciAiIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgbmFtZSBvZiBNSURJIG11c2ljYWwgaW5zdHJ1bWVudCAjOTUgKGluIHRoZSBTeW50aCBQYWQgZ3JvdXApLgorIzogUHJvZ3JhbXMvbWlkaS5jOjM3MworbXNnaWQgIlBhZCA3IChoYWxvKSIKK21zZ3N0ciAiIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgbmFtZSBvZiBNSURJIG11c2ljYWwgaW5zdHJ1bWVudCAjOTYgKGluIHRoZSBTeW50aCBQYWQgZ3JvdXApLgorIzogUHJvZ3JhbXMvbWlkaS5jOjM3NgorbXNnaWQgIlBhZCA4IChzd2VlcCkiCittc2dzdHIgIiIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIG5hbWUgb2YgTUlESSBtdXNpY2FsIGluc3RydW1lbnQgIzc2IChpbiB0aGUgUGlwZSBncm91cCkuCisjOiBQcm9ncmFtcy9taWRpLmM6MzE0Cittc2dpZCAiUGFuIEZsdXRlIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL2NvbmZpZy5jOjU4MQorbXNnaWQgIlBhcmFtZXRlcnMgZm9yIHRoZSBhcHBsaWNhdGlvbiBwcm9ncmFtbWluZyBpbnRlcmZhY2UuIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL2NvbmZpZy5jOjQxNworbXNnaWQgIlBhcmFtZXRlcnMgZm9yIHRoZSBicmFpbGxlIGRyaXZlci4iCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvY29uZmlnLmM6NjM0Cittc2dpZCAiUGFyYW1ldGVycyBmb3IgdGhlIHByaXZpbGVnZSBlc3RhYmxpc2htZW50IHN0YWdlLiIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9jb25maWcuYzo1MzAKK21zZ2lkICJQYXJhbWV0ZXJzIGZvciB0aGUgc2NyZWVuIGRyaXZlci4iCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvY29uZmlnLmM6NDg3Cittc2dpZCAiUGFyYW1ldGVycyBmb3IgdGhlIHNwZWVjaCBkcml2ZXIuIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL2NvbmZpZy5jOjM5NgorbXNnaWQgIlBhdGggdG8gZGVmYXVsdCBzZXR0aW5ncyBmaWxlLiIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9jb25maWcuYzo3MDMKK21zZ2lkICJQYXRoIHRvIGRpcmVjdG9yeSBjb250YWluaW5nIGRyaXZlcnMuIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL2JybHRlc3QuYzo2NQorIzogUHJvZ3JhbXMvYnJsdHR5LWF0Yi5jOjM1CisjOiBQcm9ncmFtcy9icmx0dHktY3RiLmM6OTYKKyM6IFByb2dyYW1zL2JybHR0eS1rdGIuYzo4MAorIzogUHJvZ3JhbXMvY29uZmlnLmM6NjkzCittc2dpZCAiUGF0aCB0byBkaXJlY3RvcnkgY29udGFpbmluZyB0YWJsZXMuIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL2JybHR0eS10dGIuYzoxODYKK21zZ2lkICJQYXRoIHRvIGRpcmVjdG9yeSBjb250YWluaW5nIHRleHQgdGFibGVzLiIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9icmx0dHkta3RiLmM6ODkKK21zZ2lkICJQYXRoIHRvIGRpcmVjdG9yeSBmb3IgbG9hZGluZyBkcml2ZXJzLiIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9icmx0dHktdHJ0eHQuYzo3OQorbXNnaWQgIlBhdGggdG8gZGlyZWN0b3J5IGZvciB0ZXh0IHRhYmxlcy4iCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvYnJsdGVzdC5jOjgzCisjOiBQcm9ncmFtcy9jb25maWcuYzo3MjMKK21zZ2lkICJQYXRoIHRvIGRpcmVjdG9yeSB3aGljaCBjYW4gYmUgd3JpdHRlbiB0by4iCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvY29uZmlnLmM6NzEzCittc2dpZCAiUGF0aCB0byBkaXJlY3Rvcnkgd2hpY2ggY29udGFpbnMgZmlsZXMgdGhhdCBjYW4gYmUgdXBkYXRlZC4iCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvY29uZmlnLmM6NzMyCittc2dpZCAiUGF0aCB0byBkaXJlY3Rvcnkgd2hpY2ggY29udGFpbnMgbWVzc2FnZSBsb2NhbGl6YXRpb25zLiIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9icmx0dHktdHJ0eHQuYzo1MAorbXNnaWQgIlBhdGggdG8gaW5wdXQgdGV4dCB0YWJsZS4iCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvY29uZmlnLmM6NjA2Cittc2dpZCAiUGF0aCB0byBsb2cgZmlsZS4iCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvYnJsdHR5LXRydHh0LmM6NTgKK21zZ2lkICJQYXRoIHRvIG91dHB1dCB0ZXh0IHRhYmxlLiIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9jb25maWcuYzo3NDEKK21zZ2lkICJQYXRoIHRvIHByb2Nlc3MgaWRlbnRpZmllciBmaWxlLiIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9jb25maWcuYzo2NjMKK21zZ2lkICJQYXR0ZXJucyB0aGF0IG1hdGNoIGNvbW1hbmQgcHJvbXB0cy4iCittc2dzdHIgIiIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIG5hbWUgb2YgTUlESSBtdXNpY2FsIGluc3RydW1lbnQgZ3JvdXAgIzE1LgorIzogUHJvZ3JhbXMvbWlkaS5jOjcxCittc2dpZCAiUGVyY3Vzc2l2ZSBJbnN0cnVtZW50cyIKK21zZ3N0ciAiIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgbmFtZSBvZiBNSURJIG11c2ljYWwgaW5zdHJ1bWVudCAjMTggKGluIHRoZSBPcmdhbiBncm91cCkuCisjOiBQcm9ncmFtcy9taWRpLmM6MTMzCittc2dpZCAiUGVyY3Vzc2l2ZSBPcmdhbiIKK21zZ3N0ciAiIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgbmFtZSBvZiBNSURJIG11c2ljYWwgaW5zdHJ1bWVudCBncm91cCAjMS4KKyM6IFByb2dyYW1zL21pZGkuYzoyNQorbXNnaWQgIlBpYW5vIgorbXNnc3RyICIiCisKKyMuIFBpcGUKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBuYW1lIG9mIE1JREkgbXVzaWNhbCBpbnN0cnVtZW50ICM3MyAoaW4gdGhlIFBpcGUgZ3JvdXApLgorIzogUHJvZ3JhbXMvbWlkaS5jOjMwNQorbXNnaWQgIlBpY2NvbG8iCittc2dzdHIgIiIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIG5hbWUgb2YgTUlESSBtdXNpY2FsIGluc3RydW1lbnQgZ3JvdXAgIzEwLgorIzogUHJvZ3JhbXMvbWlkaS5jOjUyCittc2dpZCAiUGlwZSIKK21zZ3N0ciAiIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgbmFtZSBvZiBNSURJIG11c2ljYWwgaW5zdHJ1bWVudCAjNDYgKGluIHRoZSBTdHJpbmdzIGdyb3VwKS4KKyM6IFByb2dyYW1zL21pZGkuYzoyMjAKK21zZ2lkICJQaXp6aWNhdG8gU3RyaW5ncyIKK21zZ3N0ciAiIgorCisjOiBEcml2ZXJzL0JyYWlsbGUvQmF1bS9icmFpbGxlLmM6MTE1OQorbXNnaWQgIlBvd2VyZG93biIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6MTQ2NQorbXNnaWQgIlByZWZlcmVuY2VzIEZpbGUiCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvc2NyX21lbnUuYzoyNzEKK21zZ2lkICJQcmVmZXJlbmNlcyBNZW51IgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzoxNDE2Cittc2dpZCAiUHJvZmlsZXMiCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvY29uZmlnLmM6NTQ3Cittc2dpZCAiUHJvcGVydGllcyBvZiBlbGlnaWJsZSBrZXlib2FyZHMuIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzo5NTIKK21zZ2lkICJRdWljayBTcGFjZSIKK21zZ3N0ciAiIgorCisjOiAuYzoxMQorIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjEyMTEKK21zZ2lkICJSYWlzZSBQaXRjaCIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9icmx0dHktaGlkLmM6MTgxCittc2dpZCAiUmVhZCAoZ2V0KSBhIGZlYXR1cmUgcmVwb3J0ICh0d28gaGV4YWRlY2ltYWwgZGlnaXRzKS4iCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvYnJsdHR5LWhpZC5jOjE3NAorbXNnaWQgIlJlYWQgKGdldCkgYW4gaW5wdXQgcmVwb3J0ICh0d28gaGV4YWRlY2ltYWwgZGlnaXRzKS4iCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvY29uZmlnLmM6Mzg2Cittc2dpZCAiUmVjb2duaXplIGVudmlyb25tZW50IHZhcmlhYmxlcy4iCittc2dzdHIgIiIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIG5hbWUgb2YgTUlESSBtdXNpY2FsIGluc3RydW1lbnQgIzc1IChpbiB0aGUgUGlwZSBncm91cCkuCisjOiBQcm9ncmFtcy9taWRpLmM6MzExCittc2dpZCAiUmVjb3JkZXIiCittc2dzdHIgIiIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIG5hbWUgb2YgTUlESSBtdXNpY2FsIGluc3RydW1lbnQgZ3JvdXAgIzkuCisjOiBQcm9ncmFtcy9taWRpLmM6NDkKK21zZ2lkICJSZWVkIgorbXNnc3RyICIiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBuYW1lIG9mIE1JREkgbXVzaWNhbCBpbnN0cnVtZW50ICMyMSAoaW4gdGhlIE9yZ2FuIGdyb3VwKS4KKyM6IFByb2dyYW1zL21pZGkuYzoxNDIKK21zZ2lkICJSZWVkIE9yZ2FuIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL2JybHR0eS1jdGIuYzo1OQorbXNnaWQgIlJlZm9ybWF0IGlucHV0LiIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9jb25maWcuYzo0MzkKK21zZ2lkICJSZWxlYXNlIGJyYWlsbGUgZGV2aWNlIHdoZW4gc2NyZWVuIG9yIHdpbmRvdyBpcyB1bnJlYWRhYmxlLiIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy94YnJsYXBpLmM6MTE5Cittc2dpZCAiUmVtYWluIGEgZm9yZWdyb3VuZCBwcm9jZXNzIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL2NvbmZpZy5jOjYxOAorbXNnaWQgIlJlbWFpbiBhIGZvcmVncm91bmQgcHJvY2Vzcy4iCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvYnJsdHR5LXRydHh0LmM6NjQKK21zZ2lkICJSZW1vdmUgZG90cyBzZXZlbiBhbmQgZWlnaHQuIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL2NvbmZpZy5jOjc2MQorIywgYy1mb3JtYXQKK21zZ2lkICJSZW1vdmUgdGhlICVzIHNlcnZpY2UsIGFuZCB0aGVuIGV4aXQuIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL2JybHR0eS1rdGIuYzo1MworbXNnaWQgIlJlcG9ydCBwcm9ibGVtcyB3aXRoIHRoZSBrZXkgdGFibGUuIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL2JybHR0eS10dGIuYzoxNzYKK21zZ2lkICJSZXBvcnQgdGhlIGNoYXJhY3RlcnMgd2l0aGluIHRoZSBjdXJyZW50IHNjcmVlbiBmb250IHRoYXQgYXJlbid0IGRlZmluZWQgd2l0aGluIHRoZSB0ZXh0IHRhYmxlLiIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6ODY4Cittc2dpZCAiUmVzdCBvZiBMaW5lIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzoxNTY0Cittc2dpZCAiUmVzdGFydCBCcmFpbGxlIERyaXZlciIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6MTU3NgorbXNnaWQgIlJlc3RhcnQgU2NyZWVuIERyaXZlciIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6MTU3MAorbXNnaWQgIlJlc3RhcnQgU3BlZWNoIERyaXZlciIKK21zZ3N0ciAiIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgbmFtZSBvZiBNSURJIG11c2ljYWwgaW5zdHJ1bWVudCAjMTIwIChpbiB0aGUgUGVyY3Vzc2l2ZSBncm91cCkuCisjOiBQcm9ncmFtcy9taWRpLmM6NDUyCittc2dpZCAiUmV2ZXJzZSBDeW1iYWwiCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjEzNDQKK21zZ2lkICJSaWdodCIKK21zZ3N0ciAiIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgbmFtZSBvZiBNSURJIG11c2ljYWwgaW5zdHJ1bWVudCAjMTkgKGluIHRoZSBPcmdhbiBncm91cCkuCisjOiBQcm9ncmFtcy9taWRpLmM6MTM2Cittc2dpZCAiUm9jayBPcmdhbiIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9icmx0dHktcHR5LmM6Mzg5Cittc2dpZCAiUnVuIGEgc2hlbGwgb3IgdGVybWluYWwgbWFuYWdlciB3aXRoaW4gYSBwdHkgKHZpcnR1YWwgdGVybWluYWwpIGFuZCBleHBvcnQgaXRzIHNjcmVlbiB2aWEgYSBzaGFyZWQgbWVtb3J5IHNlZ21lbnQgc28gdGhhdCBicmx0dHkgY2FuIHJlYWQgaXQgdmlhIGl0cyBUZXJtaW5hbCBFbXVsYXRvciBzY3JlZW4gZHJpdmVyLiIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6Njc1Cittc2dpZCAiU2F2ZSBvbiBFeGl0IgorbXNnc3RyICIiCisKKyMuICJjYXAiIGhlcmUsIHVzZWQgZHVyaW5nIHNwZWVjaCBvdXRwdXQsIGlzIHNob3J0IGZvciAiY2FwaXRhbCIuCisjLiBJdCBpcyBzcG9rZW4ganVzdCBiZWZvcmUgYW4gdXBwZXJjYXNlIGxldHRlciwgZS5nLiAiY2FwIEEiLgorIzogLmM6OSAuYzoxMAorIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjEyMTAKK21zZ2lkICJTYXkgQ2FwIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzoxMjM0Cittc2dpZCAiU2F5IExpbmUgTW9kZSIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6MTIyMQorbXNnaWQgIlNheSBTcGFjZSIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6NzgxCittc2dpZCAiU2NyZWVuIEN1cnNvciBCbGluayBQZXJpb2QiCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjc4OQorbXNnaWQgIlNjcmVlbiBDdXJzb3IgUGVyY2VudCBWaXNpYmxlIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzo3NjkKK21zZ2lkICJTY3JlZW4gQ3Vyc29yIFN0eWxlIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL2xvZy5jOjE2NgorbXNnaWQgIlNjcmVlbiBEcml2ZXIgRXZlbnRzIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzo1NTAKK21zZ2lkICJTY3JlZW4gTnVtYmVyIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL2NvbmZpZy5jOjUyMAorIywgYy1mb3JtYXQKK21zZ2lkICJTY3JlZW4gZHJpdmVyIGNvZGUgKCVzLCAlcywgb3Igb25lIG9mIHslc30pLiIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9jb25maWcuYzo4NTcKK21zZ2lkICJTY3JlZW4gcmVhZGVyIGZvciB0aG9zZSB3aG8gdXNlIGEgYnJhaWxsZSBkZXZpY2UuIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzo4OTMKK21zZ2lkICJTY3JvbGwtYXdhcmUgQ3Vyc29yIE5hdmlnYXRpb24iCittc2dzdHIgIiIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIG5hbWUgb2YgTUlESSBtdXNpY2FsIGluc3RydW1lbnQgIzEyMyAoaW4gdGhlIFNvdW5kIEVmZmVjdHMgZ3JvdXApLgorIzogUHJvZ3JhbXMvbWlkaS5jOjQ2MgorbXNnaWQgIlNlYXNob3JlIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL2xvZy5jOjEzMAorbXNnaWQgIlNlcmlhbCBJL08iCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvbG9nLmM6MTE4Cittc2dpZCAiU2VydmVyIEV2ZW50cyIKK21zZ3N0ciAiIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgbmFtZSBvZiBNSURJIG11c2ljYWwgaW5zdHJ1bWVudCAjNzggKGluIHRoZSBQaXBlIGdyb3VwKS4KKyM6IFByb2dyYW1zL21pZGkuYzozMjAKK21zZ2lkICJTaGFrdWhhY2hpIgorbXNnc3RyICIiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBuYW1lIG9mIE1JREkgbXVzaWNhbCBpbnN0cnVtZW50ICMxMDcgKGluIHRoZSBFdGhuaWMgZ3JvdXApLgorIzogUHJvZ3JhbXMvbWlkaS5jOjQxMgorbXNnaWQgIlNoYW1pc2VuIgorbXNnc3RyICIiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBuYW1lIG9mIE1JREkgbXVzaWNhbCBpbnN0cnVtZW50ICMxMTIgKGluIHRoZSBFdGhuaWMgZ3JvdXApLgorIzogUHJvZ3JhbXMvbWlkaS5jOjQyNworbXNnaWQgIlNoYW5haSIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6Njg4Cittc2dpZCAiU2hvdyBBZHZhbmNlZCBTdWJtZW51cyIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6NjkzCittc2dpZCAiU2hvdyBBbGwgSXRlbXMiCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjc5NworbXNnaWQgIlNob3cgQXR0cmlidXRlcyIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6NzY0Cittc2dpZCAiU2hvdyBTY3JlZW4gQ3Vyc29yIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzoxMjk3Cittc2dpZCAiU2hvdyBTZWNvbmRzIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzoxMjM5Cittc2dpZCAiU2hvdyBTcGVlY2ggQ3Vyc29yIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzo2ODMKK21zZ2lkICJTaG93IFN1Ym1lbnUgU2l6ZXMiCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvYnJsdHR5LWhpZC5jOjEzNworbXNnaWQgIlNob3cgdGhlIGRldmljZSBhZGRyZXNzIChVU0Igc2VyaWFsIG51bWJlciwgQmx1ZXRvb3RoIGRldmljZSBhZGRyZXNzLCBldGMpLiIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9icmx0dHktaGlkLmM6MTQzCittc2dpZCAiU2hvdyB0aGUgZGV2aWNlIG5hbWUgKFVTQiBtYW51ZmFjdHVyZXIgYW5kL29yIHByb2R1Y3Qgc3RyaW5ncywgQmx1ZXRvb3RoIGRldmljZSBuYW1lLCBldGMpLiIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9icmx0dHktaGlkLmM6MTU1Cittc2dpZCAiU2hvdyB0aGUgaG9zdCBkZXZpY2UgKHVzdWFsbHkgaXRzIGFic29sdXRlIHBhdGgpLiIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9icmx0dHktaGlkLmM6MTQ5Cittc2dpZCAiU2hvdyB0aGUgaG9zdCBwYXRoIChVU0IgdG9wb2xvZ3ksIEJsdWV0b290aCBob3N0IGNvbnRyb2xsZXIgYWRkcmVzcywgZXRjKS4iCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvYnJsdHR5LWhpZC5jOjEzMQorbXNnaWQgIlNob3cgdGhlIHZlbmRvciBhbmQgcHJvZHVjdCBpZGVudGlmaWVycy4iCittc2dzdHIgIiIKKworIzogSGVhZGVycy9jbWRsaW5lX3R5cGVzLmg6NzIKK21zZ2lkICJTaG93IHRoaXMgdXNhZ2Ugc3VtbWFyeSwgYW5kIHRoZW4gZXhpdC4iCittc2dzdHIgIiIKKworIy4gRXRobmljIEluc3RydW1lbnRzCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgbmFtZSBvZiBNSURJIG11c2ljYWwgaW5zdHJ1bWVudCAjMTA1IChpbiB0aGUgRXRobmljIGdyb3VwKS4KKyM6IFByb2dyYW1zL21pZGkuYzo0MDYKK21zZ2lkICJTaXRhciIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6ODYwCittc2dpZCAiU2tpcCBCbGFuayBCcmFpbGxlIFdpbmRvd3MiCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjg1NAorbXNnaWQgIlNraXAgSWRlbnRpY2FsIExpbmVzIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzo4NzEKK21zZ2lkICJTa2lwIFdoaWNoIEJsYW5rIEJyYWlsbGUgV2luZG93cyIKK21zZ3N0ciAiIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgbmFtZSBvZiBNSURJIG11c2ljYWwgaW5zdHJ1bWVudCAjMzcgKGluIHRoZSBCYXNzIGdyb3VwKS4KKyM6IFByb2dyYW1zL21pZGkuYzoxOTIKK21zZ2lkICJTbGFwIEJhc3MgMSIKK21zZ3N0ciAiIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgbmFtZSBvZiBNSURJIG11c2ljYWwgaW5zdHJ1bWVudCAjMzggKGluIHRoZSBCYXNzIGdyb3VwKS4KKyM6IFByb2dyYW1zL21pZGkuYzoxOTUKK21zZ2lkICJTbGFwIEJhc3MgMiIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6MTMyNworbXNnaWQgIlNsYXNoIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzo4NzYKK21zZ2lkICJTbGlkaW5nIEJyYWlsbGUgV2luZG93IgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzoxMTk1Cittc2dpZCAiU29tZSIKK21zZ3N0ciAiIgorCisjLiBSZWVkCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgbmFtZSBvZiBNSURJIG11c2ljYWwgaW5zdHJ1bWVudCAjNjUgKGluIHRoZSBSZWVkIGdyb3VwKS4KKyM6IFByb2dyYW1zL21pZGkuYzoyODAKK21zZ2lkICJTb3ByYW5vIFNheG9waG9uZSIKK21zZ3N0ciAiIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgbmFtZSBvZiBNSURJIG11c2ljYWwgaW5zdHJ1bWVudCBncm91cCAjMTYuCisjOiBQcm9ncmFtcy9taWRpLmM6NzQKK21zZ2lkICJTb3VuZCBFZmZlY3RzIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzo1NjEKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzoxMzYzCittc2dpZCAiU3BhY2UiCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjExNTYKK21zZ2lkICJTcGVhayBDb21wbGV0ZWQgV29yZHMiCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjExNDQKK21zZ2lkICJTcGVhayBEZWxldGVkIENoYXJhY3RlcnMiCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjExMzgKK21zZ2lkICJTcGVhayBJbnNlcnRlZCBDaGFyYWN0ZXJzIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzoxMTYyCittc2dpZCAiU3BlYWsgTGluZSBJbmRlbnQiCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjExNTAKK21zZ2lkICJTcGVhayBSZXBsYWNlZCBDaGFyYWN0ZXJzIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzoxMTMyCittc2dpZCAiU3BlYWsgU2VsZWN0ZWQgQ2hhcmFjdGVyIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzoxMTI2Cittc2dpZCAiU3BlYWsgU2VsZWN0ZWQgTGluZSIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6MTI1NgorbXNnaWQgIlNwZWVjaCBDdXJzb3IgQmxpbmsgUGVyaW9kIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzoxMjY0Cittc2dpZCAiU3BlZWNoIEN1cnNvciBQZXJjZW50IFZpc2libGUiCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjEyNDQKK21zZ2lkICJTcGVlY2ggQ3Vyc29yIFN0eWxlIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL2xvZy5jOjE2MAorbXNnaWQgIlNwZWVjaCBEcml2ZXIgRXZlbnRzIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL2xvZy5jOjEwNgorbXNnaWQgIlNwZWVjaCBFdmVudHMiCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjExNjkKK21zZ2lkICJTcGVlY2ggT3B0aW9ucyIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6MTE4NgorbXNnaWQgIlNwZWVjaCBQaXRjaCIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6MTE5OQorbXNnaWQgIlNwZWVjaCBQdW5jdHVhdGlvbiIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6MTE3OQorbXNnaWQgIlNwZWVjaCBSYXRlIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzoxMjE0Cittc2dpZCAiU3BlZWNoIFVwcGVyY2FzZSBJbmRpY2F0b3IiCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjExNzIKK21zZ2lkICJTcGVlY2ggVm9sdW1lIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzoxMjI0Cittc2dpZCAiU3BlZWNoIFdoaXRlc3BhY2UgSW5kaWNhdG9yIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL2NvbmZpZy5jOjQ3NworIywgYy1mb3JtYXQKK21zZ2lkICJTcGVlY2ggZHJpdmVyIGNvZGUgKCVzLCAlcywgb3Igb25lIG9mIHslc30pLiIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6MTUxMQorbXNnaWQgIlN0YW5kYXJkIEVycm9yIExvZyBMZXZlbCIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6OTI4Cittc2dpZCAiU3RhcnQgU2VsZWN0aW9uIHdpdGggUm91dGluZyBLZXkiCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjU1MQorbXNnaWQgIlN0YXRlIERvdHMiCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjU1MgorbXNnaWQgIlN0YXRlIExldHRlciIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6MTMzOAorbXNnaWQgIlN0YXR1cyBDZWxscyIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6MTM1NAorbXNnaWQgIlN0YXR1cyBDb3VudCIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6NTY1Cittc2dpZCAiU3RhdHVzIEZpZWxkIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzoxMzQ3Cittc2dpZCAiU3RhdHVzIFBvc2l0aW9uIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzoxMzY5Cittc2dpZCAiU3RhdHVzIFNlcGFyYXRvciIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6MTM2NQorbXNnaWQgIlN0YXR1cyBTaWRlIgorbXNnc3RyICIiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBuYW1lIG9mIE1JREkgbXVzaWNhbCBpbnN0cnVtZW50ICMxMTUgKGluIHRoZSBQZXJjdXNzaXZlIGdyb3VwKS4KKyM6IFByb2dyYW1zL21pZGkuYzo0MzcKK21zZ2lkICJTdGVlbCBEcnVtcyIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9jb25maWcuYzo3NDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3RvcCBhbiBleGlzdGluZyBpbnN0YW5jZSBvZiAlcywgYW5kIHRoZW4gZXhpdC4iCittc2dzdHIgIiIKKworIy4gRW5zZW1ibGUKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBuYW1lIG9mIE1JREkgbXVzaWNhbCBpbnN0cnVtZW50ICM0OSAoaW4gdGhlIEVuc2VtYmxlIGdyb3VwKS4KKyM6IFByb2dyYW1zL21pZGkuYzoyMzAKK21zZ2lkICJTdHJpbmcgRW5zZW1ibGUgMSIKK21zZ3N0ciAiIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgbmFtZSBvZiBNSURJIG11c2ljYWwgaW5zdHJ1bWVudCAjNTAgKGluIHRoZSBFbnNlbWJsZSBncm91cCkuCisjOiBQcm9ncmFtcy9taWRpLmM6MjMzCittc2dpZCAiU3RyaW5nIEVuc2VtYmxlIDIiCittc2dzdHIgIiIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIG5hbWUgb2YgTUlESSBtdXNpY2FsIGluc3RydW1lbnQgZ3JvdXAgIzYuCisjOiBQcm9ncmFtcy9taWRpLmM6NDAKK21zZ2lkICJTdHJpbmdzIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzo3MjMKK21zZ2lkICJTdXBlcmltcG9zZSBEb3QgNyIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9jb25maWcuYzo1ODkKK21zZ2lkICJTdXBwcmVzcyBzdGFydC11cCBtZXNzYWdlcy4iCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvY21kbGluZS5jOjI0MworbXNnaWQgIlN5bnRheCIKK21zZ3N0ciAiIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgbmFtZSBvZiBNSURJIG11c2ljYWwgaW5zdHJ1bWVudCAjMzkgKGluIHRoZSBCYXNzIGdyb3VwKS4KKyM6IFByb2dyYW1zL21pZGkuYzoxOTgKK21zZ2lkICJTeW50aCBCYXNzIDEiCittc2dzdHIgIiIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIG5hbWUgb2YgTUlESSBtdXNpY2FsIGluc3RydW1lbnQgIzQwIChpbiB0aGUgQmFzcyBncm91cCkuCisjOiBQcm9ncmFtcy9taWRpLmM6MjAxCittc2dpZCAiU3ludGggQmFzcyAyIgorbXNnc3RyICIiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBuYW1lIG9mIE1JREkgbXVzaWNhbCBpbnN0cnVtZW50ICMxMTkgKGluIHRoZSBQZXJjdXNzaXZlIGdyb3VwKS4KKyM6IFByb2dyYW1zL21pZGkuYzo0NDkKK21zZ2lkICJTeW50aCBEcnVtIgorbXNnc3RyICIiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBuYW1lIG9mIE1JREkgbXVzaWNhbCBpbnN0cnVtZW50IGdyb3VwICMxMy4KKyMuIHhnZXR0ZXh0OiAoc3ludGggaXMgYSBjb21tb24gc2hvcnQgZm9ybSBmb3Igc3ludGhlc2l6ZXIpCisjLiB4Z2V0dGV4dDogKEZNIGlzIHRoZSBhY3JvbnltIGZvciBGcmVxdWVuY3kgTW9kdWxhdGlvbikKKyM6IFByb2dyYW1zL21pZGkuYzo2NQorbXNnaWQgIlN5bnRoIEZNIgorbXNnc3RyICIiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBuYW1lIG9mIE1JREkgbXVzaWNhbCBpbnN0cnVtZW50IGdyb3VwICMxMS4KKyMuIHhnZXR0ZXh0OiAoc3ludGggaXMgYSBjb21tb24gc2hvcnQgZm9ybSBmb3Igc3ludGhlc2l6ZXIpCisjOiBQcm9ncmFtcy9taWRpLmM6NTYKK21zZ2lkICJTeW50aCBMZWFkIgorbXNnc3RyICIiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBuYW1lIG9mIE1JREkgbXVzaWNhbCBpbnN0cnVtZW50IGdyb3VwICMxMi4KKyMuIHhnZXR0ZXh0OiAoc3ludGggaXMgYSBjb21tb24gc2hvcnQgZm9ybSBmb3Igc3ludGhlc2l6ZXIpCisjOiBQcm9ncmFtcy9taWRpLmM6NjAKK21zZ2lkICJTeW50aCBQYWQiCittc2dzdHIgIiIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIG5hbWUgb2YgTUlESSBtdXNpY2FsIGluc3RydW1lbnQgIzU1IChpbiB0aGUgRW5zZW1ibGUgZ3JvdXApLgorIzogUHJvZ3JhbXMvbWlkaS5jOjI0OAorbXNnaWQgIlN5bnRoIFZvaWNlIgorbXNnc3RyICIiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBuYW1lIG9mIE1JREkgbXVzaWNhbCBpbnN0cnVtZW50ICM2MyAoaW4gdGhlIEJyYXNzIGdyb3VwKS4KKyM6IFByb2dyYW1zL21pZGkuYzoyNzMKK21zZ2lkICJTeW50aEJyYXNzIDEiCittc2dzdHIgIiIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIG5hbWUgb2YgTUlESSBtdXNpY2FsIGluc3RydW1lbnQgIzY0IChpbiB0aGUgQnJhc3MgZ3JvdXApLgorIzogUHJvZ3JhbXMvbWlkaS5jOjI3NgorbXNnaWQgIlN5bnRoQnJhc3MgMiIKK21zZ3N0ciAiIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgbmFtZSBvZiBNSURJIG11c2ljYWwgaW5zdHJ1bWVudCAjNTEgKGluIHRoZSBFbnNlbWJsZSBncm91cCkuCisjOiBQcm9ncmFtcy9taWRpLmM6MjM2Cittc2dpZCAiU3ludGhTdHJpbmdzIDEiCittc2dzdHIgIiIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIG5hbWUgb2YgTUlESSBtdXNpY2FsIGluc3RydW1lbnQgIzUyIChpbiB0aGUgRW5zZW1ibGUgZ3JvdXApLgorIzogUHJvZ3JhbXMvbWlkaS5jOjIzOQorbXNnaWQgIlN5bnRoU3RyaW5ncyAyIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzoxNTA2Cittc2dpZCAiU3lzdGVtIExvZyBMZXZlbCIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6MTQ4MAorbXNnaWQgIlRhYmxlcyBEaXJlY3RvcnkiCittc2dzdHIgIiIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIG5hbWUgb2YgTUlESSBtdXNpY2FsIGluc3RydW1lbnQgIzExNyAoaW4gdGhlIFBlcmN1c3NpdmUgZ3JvdXApLgorIzogUHJvZ3JhbXMvbWlkaS5jOjQ0MworbXNnaWQgIlRhaWtvIERydW0iCittc2dzdHIgIiIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIG5hbWUgb2YgTUlESSBtdXNpY2FsIGluc3RydW1lbnQgIzI0IChpbiB0aGUgT3JnYW4gZ3JvdXApLgorIzogUHJvZ3JhbXMvbWlkaS5jOjE1MQorbXNnaWQgIlRhbmdvIEFjY29yZGlvbiIKK21zZ3N0ciAiIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgbmFtZSBvZiBNSURJIG11c2ljYWwgaW5zdHJ1bWVudCAjMTI1IChpbiB0aGUgU291bmQgRWZmZWN0cyBncm91cCkuCisjOiBQcm9ncmFtcy9taWRpLmM6NDY4Cittc2dpZCAiVGVsZXBob25lIFJpbmciCittc2dzdHIgIiIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIG5hbWUgb2YgTUlESSBtdXNpY2FsIGluc3RydW1lbnQgIzY3IChpbiB0aGUgUmVlZCBncm91cCkuCisjOiBQcm9ncmFtcy9taWRpLmM6Mjg2Cittc2dpZCAiVGVub3IgU2F4b3Bob25lIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL2FwaXRlc3QuYzo0ODIKK21zZ2lkICJUZXN0IEJybEFQSSBmdW5jdGlvbnMuIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL2JybHRlc3QuYzoxMDAKK21zZ2lkICJUZXN0IGEgYnJhaWxsZSBkcml2ZXIuIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL3NjcnRlc3QuYzoxMzcKK21zZ2lkICJUZXN0IGEgc2NyZWVuIGRyaXZlci4iCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvc3BrdGVzdC5jOjExNQorbXNnaWQgIlRlc3QgYSBzcGVlY2ggZHJpdmVyLiIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9tc2d0ZXN0LmM6MjUxCittc2dpZCAiVGVzdCBtZXNzYWdlIGxvY2FsaXphdGlvbiB1c2luZyB0aGUgbWVzc2FnZSBjYXRhbG9nIHJlYWRlci4iCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvY3JjdGVzdC5jOjEyMQorbXNnaWQgIlRlc3Qgc3VwcG9ydGVkIENSQyAoQ3ljbGljIFJlZHVuZGFuY3kgQ2hlY2spIGNoZWNrc3VtIGFsZ29yaXRobXMuIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzo3NjEKK21zZ2lkICJUZXh0IEluZGljYXRvcnMiCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjEzNjYKK21zZ2lkICJUZXh0IFNpZGUiCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjEzOTQKK21zZ2lkICJUZXh0IFRhYmxlIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL2JybHR0eS1jdGIuYzo4MAorbXNnaWQgIlRleHQgdGFibGUuIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL2JybHR0eS1jbGRyLmM6NDIKK21zZ2lkICJUaGUgZm9ybWF0IG9mIGVhY2ggb3V0cHV0IGxpbmUuIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL2JybHR0eS1oaWQuYzoyMDgKK21zZ2lkICJUaGUgaW5wdXQgdGltZW91dCAoaW4gc2Vjb25kcykuIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL2NvbmZpZy5jOjY0OQorbXNnaWQgIlRoZSB0ZXh0IHRvIGJlIHNob3duIHdoZW4gdGhlIGJyYWlsbGUgZHJpdmVyIHN0YXJ0cyBhbmQgdG8gYmUgc3Bva2VuIHdoZW4gdGhlIHNwZWVjaCBkcml2ZXIgc3RhcnRzLiIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9jb25maWcuYzo2NTYKK21zZ2lkICJUaGUgdGV4dCB0byBiZSBzaG93biB3aGVuIHRoZSBicmFpbGxlIGRyaXZlciBzdG9wcy4iCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjU1MworbXNnaWQgIlRpbWUiCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjEyODIKK21zZ2lkICJUaW1lIEZvcm1hdCIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6MTI3NAorbXNnaWQgIlRpbWUgUHJlc2VudGF0aW9uIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzoxMjkyCittc2dpZCAiVGltZSBTZXBhcmF0b3IiCittc2dzdHIgIiIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIG5hbWUgb2YgTUlESSBtdXNpY2FsIGluc3RydW1lbnQgIzQ4IChpbiB0aGUgU3RyaW5ncyBncm91cCkuCisjOiBQcm9ncmFtcy9taWRpLmM6MjI2Cittc2dpZCAiVGltcGFuaSIKK21zZ3N0ciAiIgorCisjLiBQZXJjdXNzaXZlIEluc3RydW1lbnRzCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgbmFtZSBvZiBNSURJIG11c2ljYWwgaW5zdHJ1bWVudCAjMTEzIChpbiB0aGUgUGVyY3Vzc2l2ZSBncm91cCkuCisjOiBQcm9ncmFtcy9taWRpLmM6NDMxCittc2dpZCAiVGlua2xlIEJlbGwiCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjE1NjAKK21zZ2lkICJUb29scyIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6MTAwNQorbXNnaWQgIlRvdWNoIE5hdmlnYXRpb24iCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjEwMTkKK21zZ2lkICJUb3VjaCBTZW5zaXRpdml0eSIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6OTE3Cittc2dpZCAiVHJhY2sgU2NyZWVuIFBvaW50ZXIiCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjkxMQorbXNnaWQgIlRyYWNrIFNjcmVlbiBTY3JvbGwiCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvYnJsdHR5LXRydHh0LmM6MjM5Cittc2dpZCAiVHJhbnNsYXRlIG9uZSBiaW5hcnkgYnJhaWxsZSByZXByZXNlbnRhdGlvbiB0byBhbm90aGVyLiIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9icmx0dHktbW9yc2UuYzoxMzYKK21zZ2lkICJUcmFuc2xhdGUgdGV4dCBpbnRvIE1vcnNlIENvZGUgdG9uZXMuIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzo5NDMKK21zZ2lkICJUcmFuc2xhdGVkIHZpYSBUZXh0IFRhYmxlIgorbXNnc3RyICIiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBuYW1lIG9mIE1JREkgbXVzaWNhbCBpbnN0cnVtZW50ICM0NSAoaW4gdGhlIFN0cmluZ3MgZ3JvdXApLgorIzogUHJvZ3JhbXMvbWlkaS5jOjIxNworbXNnaWQgIlRyZW1vbG8gU3RyaW5ncyIKK21zZ3N0ciAiIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgbmFtZSBvZiBNSURJIG11c2ljYWwgaW5zdHJ1bWVudCAjNTggKGluIHRoZSBCcmFzcyBncm91cCkuCisjOiBQcm9ncmFtcy9taWRpLmM6MjU4Cittc2dpZCAiVHJvbWJvbmUiCittc2dzdHIgIiIKKworIy4gQnJhc3MKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBuYW1lIG9mIE1JREkgbXVzaWNhbCBpbnN0cnVtZW50ICM1NyAoaW4gdGhlIEJyYXNzIGdyb3VwKS4KKyM6IFByb2dyYW1zL21pZGkuYzoyNTUKK21zZ2lkICJUcnVtcGV0IgorbXNnc3RyICIiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBuYW1lIG9mIE1JREkgbXVzaWNhbCBpbnN0cnVtZW50ICM1OSAoaW4gdGhlIEJyYXNzIGdyb3VwKS4KKyM6IFByb2dyYW1zL21pZGkuYzoyNjEKK21zZ2lkICJUdWJhIgorbXNnc3RyICIiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBuYW1lIG9mIE1JREkgbXVzaWNhbCBpbnN0cnVtZW50ICMxNSAoaW4gdGhlIENocm9tYXRpYyBQZXJjdXNzaW9uIGdyb3VwKS4KKyM6IFByb2dyYW1zL21pZGkuYzoxMjMKK21zZ2lkICJUdWJ1bGFyIEJlbGxzIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzoxMDY0Cittc2dpZCAiVHVuZSBEZXZpY2UiCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjk0NworbXNnaWQgIlR5cGluZyBNb2RlIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL2xvZy5jOjEzNgorbXNnaWQgIlVTQiBJL08iCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjY2NAorbXNnaWQgIlVuZGVybGluZSIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9hbGVydC5jOjEwMgorbXNnaWQgIlVuZnJvemVuIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzoxNDYwCittc2dpZCAiVXBkYXRhYmxlIERpcmVjdG9yeSIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9sb2cuYzoxMDAKK21zZ2lkICJVcGRhdGUgRXZlbnRzIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzo3MjIKK21zZ2lkICJVc2UgQ2FwaXRhbCBTaWduIgorbXNnc3RyICIiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBuYW1lIG9mIE1JREkgbXVzaWNhbCBpbnN0cnVtZW50ICMxMiAoaW4gdGhlIENocm9tYXRpYyBQZXJjdXNzaW9uIGdyb3VwKS4KKyM6IFByb2dyYW1zL21pZGkuYzoxMTQKK21zZ2lkICJWaWJyYXBob25lIgorbXNnc3RyICIiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBuYW1lIG9mIE1JREkgbXVzaWNhbCBpbnN0cnVtZW50ICM0MiAoaW4gdGhlIFN0cmluZ3MgZ3JvdXApLgorIzogUHJvZ3JhbXMvbWlkaS5jOjIwOAorbXNnaWQgIlZpb2xhIgorbXNnc3RyICIiCisKKyMuIFN0cmluZ3MKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBuYW1lIG9mIE1JREkgbXVzaWNhbCBpbnN0cnVtZW50ICM0MSAoaW4gdGhlIFN0cmluZ3MgZ3JvdXApLgorIzogUHJvZ3JhbXMvbWlkaS5jOjIwNQorbXNnaWQgIlZpb2xpbiIKK21zZ3N0ciAiIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgbmFtZSBvZiBNSURJIG11c2ljYWwgaW5zdHJ1bWVudCAjNTQgKGluIHRoZSBFbnNlbWJsZSBncm91cCkuCisjOiBQcm9ncmFtcy9taWRpLmM6MjQ1Cittc2dpZCAiVm9pY2UgT29ocyIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6MTQ5NgorbXNnaWQgIldhcm5pbmciCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjE0NDAKK21zZ2lkICJXZWIgU2l0ZSIKK21zZ3N0ciAiIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgbmFtZSBvZiBNSURJIG11c2ljYWwgaW5zdHJ1bWVudCAjNzkgKGluIHRoZSBQaXBlIGdyb3VwKS4KKyM6IFByb2dyYW1zL21pZGkuYzozMjMKK21zZ2lkICJXaGlzdGxlIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzo1NDMKK21zZ2lkICJXaW5kb3cgQ29sdW1uIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzo1NDIKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzo1NTgKK21zZ2lkICJXaW5kb3cgQ29vcmRpbmF0ZXMiCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjU0NAorbXNnaWQgIldpbmRvdyBSb3ciCittc2dzdHIgIiIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIG5hbWUgb2YgTUlESSBtdXNpY2FsIGluc3RydW1lbnQgIzExNiAoaW4gdGhlIFBlcmN1c3NpdmUgZ3JvdXApLgorIzogUHJvZ3JhbXMvbWlkaS5jOjQ0MAorbXNnaWQgIldvb2RibG9jayIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6ODQ5Cittc2dpZCAiV29yZCBXcmFwIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzoxNDcwCittc2dpZCAiV3JpdGFibGUgRGlyZWN0b3J5IgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL2JybHR0eS1oaWQuYzoxOTUKK21zZ2lkICJXcml0ZSAoc2V0KSBhIGZlYXR1cmUgcmVwb3J0IChzZWUgYmVsb3cpLiIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9icmx0dHktaGlkLmM6MTg4Cittc2dpZCAiV3JpdGUgKHNldCkgYW4gb3V0cHV0IHJlcG9ydCAoc2VlIGJlbG93KS4iCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvYnJsdHR5LWxzY21kcy5jOjI1NAorbXNnaWQgIldyaXRlIGEgYnJsdHR5IGNvbW1hbmQgcmVmZXJlbmNlIGluIHJlU3RydWN0dXJlZFRleHQuIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL3hicmxhcGkuYzoxMTMKK21zZ2lkICJXcml0ZSBkZWJ1Z2dpbmcgb3V0cHV0IHRvIHN0ZG91dCIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy90YmwyaGV4LmM6MjE1Cittc2dpZCAiV3JpdGUgdGhlIGhleGFkZWNpbWFsIGFycmF5IHJlcHJlc2VudGF0aW9uIG9mIGEgY29tcGlsZWQgdGFibGUuIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL2NvbmZpZy5jOjc2OAorbXNnaWQgIldyaXRlIHRoZSBzdGFydC11cCBsb2dzLCBhbmQgdGhlbiBleGl0LiIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy94YnJsYXBpLmM6MTAxCittc2dpZCAiWCBkaXNwbGF5IHRvIGNvbm5lY3QgdG8iCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvcGdtcHJpdnNfbGludXguYzoxOTUxCittc2dpZCAiWERHIHJ1bnRpbWUgZGlyZWN0b3J5IGFjY2VzcyBwcm9ibGVtIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL3BnbXByaXZzX2xpbnV4LmM6MTkzMworbXNnaWQgIlhERyBydW50aW1lIGRpcmVjdG9yeSBjcmVhdGVkIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL3BnbXByaXZzX2xpbnV4LmM6MTkyOAorbXNnaWQgIlhERyBydW50aW1lIGRpcmVjdG9yeSBleGlzdHMiCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMveGJybGFwaS5jOjgxNAorbXNnaWQgIlhGcmVlKHdtX25hbWUpIGZvciBjaGFuZ2UiCittc2dzdHIgIiIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBQQVNTWFQgY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjE0OTUKK21zZ2lkICJYVCAoc2V0IDEpIGtleWJvYXJkIHNjYW4gY29kZSIKK21zZ3N0ciAiIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgbmFtZSBvZiBNSURJIG11c2ljYWwgaW5zdHJ1bWVudCAjMTQgKGluIHRoZSBDaHJvbWF0aWMgUGVyY3Vzc2lvbiBncm91cCkuCisjOiBQcm9ncmFtcy9taWRpLmM6MTIwCittc2dpZCAiWHlsb3Bob25lIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzoxMzE0Cittc2dpZCAiWWVhciBNb250aCBEYXkiCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvbWVudS5jOjUyNAorbXNnaWQgIlllcyIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy94YnJsYXBpLmM6ODUKK21zZ2lkICJbaG9zdF1bOnBvcnRdIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzo2NjUKK21zZ2lkICJhbGwgZG90cyIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9jbWRfbWlzY2VsbGFuZW91cy5jOjEwNAorbXNnaWQgImFuZCIKK21zZ3N0ciAiIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIENMSVBfQVBQRU5EIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDoxMzUzCittc2dpZCAiYXBwZW5kIGNoYXJhY3RlcnMgdG8gY2xpcGJvYXJkIgorbXNnc3RyICIiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgQ0xJUF9BREQgY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjEyMzAKK21zZ2lkICJhcHBlbmQgdG8gY2xpcGJvYXJkIGZyb20gY2hhcmFjdGVyIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL2NtZC5jOjI5MQorbXNnaWQgImF0IGN1cnNvciIKK21zZ3N0ciAiIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIEtFWV9CQUNLU1BBQ0UgY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjE1NDMKK21zZ2lkICJiYWNrc3BhY2Uga2V5IgorbXNnc3RyICIiCisKKyM6IERyaXZlcnMvQnJhaWxsZS9CYXVtL2JyYWlsbGUuYzoxMTUwCisjOiBEcml2ZXJzL0JyYWlsbGUvVFNJL2JyYWlsbGUuYzo4NjkKK21zZ2lkICJiYXR0ZXJ5IGxvdyIKK21zZ3N0ciAiIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIFNFTEVDVFZUIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDoxNDUzCittc2dpZCAiYmluZCB0byBzcGVjaWZpYyB2aXJ0dWFsIHRlcm1pbmFsIgorbXNnc3RyICIiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgU0VMRUNUVlRfTkVYVCBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6OTU3Cittc2dpZCAiYmluZCB0byB0aGUgbmV4dCB2aXJ0dWFsIHRlcm1pbmFsIgorbXNnc3RyICIiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgU0VMRUNUVlRfUFJFViBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6OTUwCittc2dpZCAiYmluZCB0byB0aGUgcHJldmlvdXMgdmlydHVhbCB0ZXJtaW5hbCIKK21zZ3N0ciAiIgorCisjLgorIzogUHJvZ3JhbXMvY21kX3V0aWxzLmM6MTUxCittc2dpZCAiYmxhY2siCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvY29yZS5jOjExMjYKK21zZ2lkICJibGFuayBsaW5lIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL2NtZF91dGlscy5jOjE4MAorbXNnaWQgImJsaW5raW5nIgorbXNnc3RyICIiCisKKyMuIEIKKyM6IFByb2dyYW1zL2NtZF91dGlscy5jOjE1MgorbXNnaWQgImJsdWUiCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvY29uZmlnLmM6MzAxMworIywgYy1mb3JtYXQKK21zZ2lkICJicmFpbGxlIGRldmljZSBub3Qgc3BlY2lmaWVkIgorbXNnc3RyICIiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgT0ZGTElORSBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6NjIxCittc2dpZCAiYnJhaWxsZSBkaXNwbGF5IHRlbXBvcmFyaWx5IHVuYXZhaWxhYmxlIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL2NvbmZpZy5jOjE4NTIKK21zZ2lkICJicmFpbGxlIGRyaXZlciBub3QgbG9hZGFibGUiCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvY29uZmlnLmM6MjExMworbXNnaWQgImJyYWlsbGUgZHJpdmVyIHJlc3RhcnRpbmciCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvY21kX21pc2NlbGxhbmVvdXMuYzoxNjMKK21zZ2lkICJicmFpbGxlIGRyaXZlciBzdG9wcGVkIgorbXNnc3RyICIiCisKKyM6IERyaXZlcnMvU2NyZWVuL0FuZHJvaWQvc2NyZWVuLmM6MTg5Cittc2dpZCAiYnJhaWxsZSByZWxlYXNlZCIKK21zZ3N0ciAiIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIFJPVVRFIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDoxMjE0Cittc2dpZCAiYnJpbmcgc2NyZWVuIGN1cnNvciB0byBjaGFyYWN0ZXIiCittc2dzdHIgIiIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBDU1JKTVBfVkVSVCBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6NTkzCittc2dpZCAiYnJpbmcgc2NyZWVuIGN1cnNvciB0byBjdXJyZW50IGxpbmUiCittc2dzdHIgIiIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBST1VURV9MSU5FIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDoxNDExCittc2dpZCAiYnJpbmcgc2NyZWVuIGN1cnNvciB0byBsaW5lIgorbXNnc3RyICIiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgUk9VVEVfQ1VSUl9MT0NOIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDo4MzUKK21zZ2lkICJicmluZyBzY3JlZW4gY3Vyc29yIHRvIHNwZWVjaCBjdXJzb3IiCittc2dzdHIgIiIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBST1VURV9TUEVFQ0ggY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjE0NDUKK21zZ2lkICJicmluZyBzcGVlY2ggY3Vyc29yIHRvIGNoYXJhY3RlciIKK21zZ3N0ciAiIgorCisjLiBSRworIzogUHJvZ3JhbXMvY21kX3V0aWxzLmM6MTU3Cittc2dpZCAiYnJvd24iCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvYnJsdHR5LWhpZC5jOjE4NgorIzogUHJvZ3JhbXMvYnJsdHR5LWhpZC5jOjE5MworbXNnaWQgImJ5dGVzIgorbXNnc3RyICIiCisKKyM6IERyaXZlcnMvU2NyZWVuL0xpbnV4L3NjcmVlbi5jOjE0ODUKK21zZ2lkICJjYW4ndCBnZXQgY29uc29sZSBzdGF0ZSIKK21zZ3N0ciAiIgorCisjOiBEcml2ZXJzL1NjcmVlbi9MaW51eC9zY3JlZW4uYzoxNTYzCittc2dpZCAiY2FuJ3Qgb3BlbiBjb25zb2xlIgorbXNnc3RyICIiCisKKyM6IERyaXZlcnMvU2NyZWVuL0xpbnV4L3NjcmVlbi5jOjE2MDkKK21zZ2lkICJjYW4ndCByZWFkIHNjcmVlbiBjb250ZW50IgorbXNnc3RyICIiCisKKyM6IERyaXZlcnMvU2NyZWVuL0xpbnV4L3NjcmVlbi5jOjE2NTQKK21zZ2lkICJjYW4ndCByZWFkIHNjcmVlbiBoZWFkZXIiCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvY3RiX3RyYW5zbGF0ZS5jOjM5MworbXNnaWQgImNhbm5vdCBhY2Nlc3MgaW50ZXJuYWwgY29udHJhY3Rpb24gdGFibGUiCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvYXRiX3RyYW5zbGF0ZS5jOjcwCittc2dpZCAiY2Fubm90IGNvbXBpbGUgYXR0cmlidXRlcyB0YWJsZSIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9jdGJfdHJhbnNsYXRlLmM6Mzg3Cittc2dpZCAiY2Fubm90IGNvbXBpbGUgY29udHJhY3Rpb24gdGFibGUiCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvY29uZmlnLmM6MTc1NAorbXNnaWQgImNhbm5vdCBjb21waWxlIGtleSB0YWJsZSIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9jb25maWcuYzoxMjkzCittc2dpZCAiY2Fubm90IGNvbXBpbGUga2V5Ym9hcmQgdGFibGUiCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvdHRiX3RyYW5zbGF0ZS5jOjI3NQorbXNnaWQgImNhbm5vdCBjb21waWxlIHRleHQgdGFibGUiCittc2dzdHIgIiIKKworIy4gVGhpcyBpcyB0aGUgZmlyc3QgYXR0ZW1wdCB0byBjb25uZWN0IHRvIEJSTFRUWSwgYW5kIGl0IGZhaWxlZC4KKyMuICogUmV0dXJuIHRoZSBlcnJvciBpbW1lZGlhdGVseSB0byB0aGUgdXNlciwgdG8gcHJvdmlkZSBmZWVkYmFjayB0byB1c2VycworIy4gKiBydW5uaW5nIHhicmxhcGkgYnkgaGFuZCwgYnV0IG5vdCBmaWxsIGxvZ3MsIGVhdCBiYXR0ZXJ5LCBzcGFtCisjLiAqIDEyNy4wLjAuMSB3aXRoIHJlY29ubmVjdGlvbiBhdHRlbXB0cy4KKyMuCisjOiBQcm9ncmFtcy94YnJsYXBpLmM6MjA1CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBjb25uZWN0IHRvIGJyYWlsbGUgZGV2aWNlcyBkYWVtb24gYnJsdHR5IGF0ICVzXG4iCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMveGJybGFwaS5jOjY4MAorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgY29ubmVjdCB0byBkaXNwbGF5ICVzXG4iCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvZmlsZS5jOjQzMworbXNnaWQgImNhbm5vdCBjcmVhdGUgZGlyZWN0b3J5IgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL3Byb2dyYW0uYzoxNTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGRldGVybWluZSBwcm9ncmFtIGRpcmVjdG9yeSIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9jb25maWcuYzoyOTcyCisjOiBQcm9ncmFtcy9tZW51LmM6NjE4Cittc2dpZCAiY2Fubm90IGRldGVybWluZSB3b3JraW5nIGRpcmVjdG9yeSIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9zeXN0ZW1fd2luZG93cy5jOjYxCittc2dpZCAiY2Fubm90IGZpbmQgcHJvY2VkdXJlIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL3Byb2dyYW0uYzoxNjUKK21zZ2lkICJjYW5ub3QgZml4IGluc3RhbGwgcGF0aCIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy94YnJsYXBpLmM6MjYwCittc2dpZCAiY2Fubm90IGdldCB0dHlcbiIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy94YnJsYXBpLmM6MjY2CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBnZXQgdHR5ICVkXG4iCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvZmlsZS5jOjU3MgorbXNnaWQgImNhbm5vdCBnZXQgd29ya2luZyBkaXJlY3RvcnkiCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMveGJybGFwaS5jOjczMAorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgZ3JhYiB3aW5kb3dzIG9uIHNjcmVlbiAlZFxuIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL3hicmxhcGkuYzoyNzMKK21zZ2lkICJjYW5ub3QgaWdub3JlIGtleXNcbiIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9hdGJfdHJhbnNsYXRlLmM6OTAKK21zZ2lkICJjYW5ub3QgbG9hZCBhdHRyaWJ1dGVzIHRhYmxlIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL2N0Yl90cmFuc2xhdGUuYzo0MDcKK21zZ2lkICJjYW5ub3QgbG9hZCBjb250cmFjdGlvbiB0YWJsZSIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9zeXN0ZW1fd2luZG93cy5jOjU0Cittc2dpZCAiY2Fubm90IGxvYWQgbGlicmFyeSIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy90dGJfdHJhbnNsYXRlLmM6Mjk1Cittc2dpZCAiY2Fubm90IGxvYWQgdGV4dCB0YWJsZSIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9maWxlLmM6NDIyCittc2dpZCAiY2Fubm90IG1ha2Ugd29ybGQgd3JpdGFibGUiCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvY29uZmlnLmM6MTI0OAorbXNnaWQgImNhbm5vdCBvcGVuIGtleSBoZWxwIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL3Byb2dyYW0uYzoyODkKK21zZ2lkICJjYW5ub3Qgb3BlbiBwcm9jZXNzIGlkZW50aWZpZXIgZmlsZSIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9tZW51LmM6NjE2Cittc2dpZCAiY2Fubm90IG9wZW4gd29ya2luZyBkaXJlY3RvcnkiCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvcHJlZnMuYzozNjMKK21zZ2lkICJjYW5ub3QgcmVhZCBwcmVmZXJlbmNlcyBmaWxlIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL3hicmxhcGkuYzozMzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHNldCBmb2N1cyB0byAlIzAxMHhcbiIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9maWxlLmM6NTg2CisjOiBQcm9ncmFtcy9tZW51LmM6NjA1Cittc2dpZCAiY2Fubm90IHNldCB3b3JraW5nIGRpcmVjdG9yeSIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9wcmVmcy5jOjU3NgorbXNnaWQgImNhbm5vdCB3cml0ZSB0byBwcmVmZXJlbmNlcyBmaWxlIgorbXNnc3RyICIiCisKKyMuICJjYXAiIGhlcmUsIHVzZWQgZHVyaW5nIHNwZWVjaCBvdXRwdXQsIGlzIHNob3J0IGZvciAiY2FwaXRhbCIuCisjLiBJdCBpcyBzcG9rZW4ganVzdCBiZWZvcmUgYW4gdXBwZXJjYXNlIGxldHRlciwgZS5nLiAiY2FwIEEiLgorIzogUHJvZ3JhbXMvY29yZS5jOjEwNzEKK21zZ2lkICJjYXAiCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjg4OAorIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjEzNTUKK21zZ2lkICJjZWxscyIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9jbWRfcHJlZmVyZW5jZXMuYzo5NQorbXNnaWQgImNoYW5nZXMgZGlzY2FyZGVkIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL2JybHR0eS1rdGIuYzoyOTAKK21zZ2lkICJjaGVjayBhIGtleSB0YWJsZSwgbGlzdCB0aGUga2V5IG5hZW1zIGl0IGNhbiB1c2UsIG9yIHdyaXRlIHRoZSBrZXkgYmluZGluZ3MgaXQgZGVmaW5lcyBpbiB1c2VmdWwgZm9ybWF0cy4iCittc2dzdHIgIiIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBVTlNUSUNLIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDo4ODcKK21zZ2lkICJjbGVhciBhbGwgc3RpY2t5IGlucHV0IG1vZGlmaWVycyIKK21zZ3N0ciAiIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIFRYVFNFTF9DTEVBUiBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6MTAxOQorbXNnaWQgImNsZWFyIHRoZSB0ZXh0IHNlbGVjdGlvbiIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9jbWRfc3BlZWNoLmM6NTAxCittc2dpZCAiY29sdW1uIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL2JybHR0eS1wdHkuYzoyNDAKK21zZ2lkICJjb21tYW5kIG5vdCBmb3VuZCIKK21zZ3N0ciAiIgorCisjLiBjb25maWd1cmF0aW9uIG1lbnUKKyM6IERyaXZlcnMvQnJhaWxsZS9CcmFpbGxlTGl0ZS9icmFpbGxlLmM6NjA3Cittc2dpZCAiY29uZmlnIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL2NtZGxpbmUuYzo5NDQKK21zZ2lkICJjb25maWd1cmF0aW9uIGRpcmVjdGl2ZSBzcGVjaWZpZWQgbW9yZSB0aGFuIG9uY2UiCittc2dzdHIgIiIKKworIzogRHJpdmVycy9TY3JlZW4vTGludXgvc2NyZWVuLmM6MTU2MQorbXNnaWQgImNvbnNvbGUgbm90IGluIHVzZSIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6MTA1OAorbXNnaWQgImNvbnNvbGUgdG9uZSBnZW5lcmF0b3IiCittc2dzdHIgIiIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBDTElQX0NPUFkgY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjEzNDUKK21zZ2lkICJjb3B5IGNoYXJhY3RlcnMgdG8gY2xpcGJvYXJkIgorbXNnc3RyICIiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgSE9TVF9DT1BZIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDoxMDMzCittc2dpZCAiY29weSBzZWxlY3RlZCB0ZXh0IHRvIGhvc3QgY2xpcGJvYXJkIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL2NvbmZpZy5jOjY0MAorbXNnaWQgImNzZWNzIgorbXNnc3RyICIiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgVE9VQ0hfQVQgY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjE1MTkKK21zZ2lkICJjdXJyZW50IHJlYWRpbmcgbG9jYXRpb24iCittc2dzdHIgIiIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBLRVlfQ1VSU09SX0RPV04gY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjE1ODMKK21zZ2lkICJjdXJzb3ItZG93biBrZXkiCittc2dzdHIgIiIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBLRVlfQ1VSU09SX0xFRlQgY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjE1NTkKK21zZ2lkICJjdXJzb3ItbGVmdCBrZXkiCittc2dzdHIgIiIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBLRVlfQ1VSU09SX1JJR0hUIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDoxNTY3Cittc2dpZCAiY3Vyc29yLXJpZ2h0IGtleSIKK21zZ3N0ciAiIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIEtFWV9DVVJTT1JfVVAgY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjE1NzUKK21zZ2lkICJjdXJzb3ItdXAga2V5IgorbXNnc3RyICIiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgSE9TVF9DVVQgY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjEwNDAKK21zZ2lkICJjdXQgc2VsZWN0ZWQgdGV4dCB0byBob3N0IGNsaXBib2FyZCIKK21zZ3N0ciAiIgorCisjLiBHQgorIzogUHJvZ3JhbXMvY21kX3V0aWxzLmM6MTU0Cittc2dpZCAiY3lhbiIKK21zZ3N0ciAiIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIEFMVEdSIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDo4OTQKK21zZ2lkICJjeWNsZSB0aGUgQWx0R3IgKFJpZ2h0IEFsdCkgc3RpY2t5IGlucHV0IG1vZGlmaWVyIChuZXh0LCBvbiwgb2ZmKSIKK21zZ3N0ciAiIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIENPTlRST0wgY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjY0MgorbXNnaWQgImN5Y2xlIHRoZSBDb250cm9sIHN0aWNreSBpbnB1dCBtb2RpZmllciAobmV4dCwgb24sIG9mZikiCittc2dzdHIgIiIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBHVUkgY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjkwMQorbXNnaWQgImN5Y2xlIHRoZSBHVUkgKFdpbmRvd3MpIHN0aWNreSBpbnB1dCBtb2RpZmllciAobmV4dCwgb24sIG9mZikiCittc2dzdHIgIiIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBNRVRBIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDo2NDkKK21zZ2lkICJjeWNsZSB0aGUgTWV0YSAoTGVmdCBBbHQpIHN0aWNreSBpbnB1dCBtb2RpZmllciAobmV4dCwgb24sIG9mZikiCittc2dzdHIgIiIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBTSElGVCBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6NjI4Cittc2dpZCAiY3ljbGUgdGhlIFNoaWZ0IHN0aWNreSBpbnB1dCBtb2RpZmllciAobmV4dCwgb24sIG9mZikiCittc2dzdHIgIiIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBVUFBFUiBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6NjM1Cittc2dpZCAiY3ljbGUgdGhlIFVwcGVyIHN0aWNreSBpbnB1dCBtb2RpZmllciAobmV4dCwgb24sIG9mZikiCittc2dzdHIgIiIKKworIy4gTAorIzogUHJvZ3JhbXMvY21kX3V0aWxzLmM6MTU5Cittc2dpZCAiZGFyayBncmV5IgorbXNnc3RyICIiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgU0FZX0xPV0VSIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDoxMTY4Cittc2dpZCAiZGVjcmVhc2Ugc3BlYWtpbmcgcGl0Y2giCittc2dzdHIgIiIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBTQVlfU0xPV0VSIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDo1NTAKK21zZ2lkICJkZWNyZWFzZSBzcGVha2luZyByYXRlIgorbXNnc3RyICIiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgU0FZX1NPRlRFUiBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6NTY0Cittc2dpZCAiZGVjcmVhc2Ugc3BlYWtpbmcgdm9sdW1lIgorbXNnc3RyICIiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgS0VZX0RFTEVURSBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6MTYzMQorbXNnaWQgImRlbGV0ZSBrZXkiCittc2dzdHIgIiIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBERVNDQ0hBUiBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6MTI4MgorbXNnaWQgImRlc2NyaWJlIGNoYXJhY3RlciIKK21zZ3N0ciAiIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIERFU0NfQ1VSUl9DSEFSIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDo4MjAKK21zZ2lkICJkZXNjcmliZSBjdXJyZW50IGNoYXJhY3RlciIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9jb25maWcuYzo2NzAKKyM6IFByb2dyYW1zL2NvbmZpZy5jOjY4MAorbXNnaWQgImRldmljZSIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9icmx0ZXN0LmM6NjEKKyM6IFByb2dyYW1zL2JybHRlc3QuYzo3OQorIzogUHJvZ3JhbXMvYnJsdHR5LWF0Yi5jOjMxCisjOiBQcm9ncmFtcy9icmx0dHktY3RiLmM6OTIKKyM6IFByb2dyYW1zL2JybHR0eS1rdGIuYzo3NgorIzogUHJvZ3JhbXMvYnJsdHR5LWt0Yi5jOjg1CisjOiBQcm9ncmFtcy9icmx0dHktdHJ0eHQuYzo3NQorIzogUHJvZ3JhbXMvY29uZmlnLmM6Njg5CisjOiBQcm9ncmFtcy9jb25maWcuYzo2OTkKKyM6IFByb2dyYW1zL2NvbmZpZy5jOjcwOQorIzogUHJvZ3JhbXMvY29uZmlnLmM6NzE5CisjOiBQcm9ncmFtcy9jb25maWcuYzo3MjgKK21zZ2lkICJkaXJlY3RvcnkiCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMveGJybGFwaS5jOjk5Cittc2dpZCAiZGlzcGxheSIKK21zZ3N0ciAiIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIE5PT1AgY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjUKK21zZ2lkICJkbyBub3RoaW5nIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL2xlYXJuLmM6MTA4Cittc2dpZCAiZG9uZSIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6NjY2Cittc2dpZCAiZG90IDciCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjY2NworbXNnaWQgImRvdCA4IgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzo2NjQKK21zZ2lkICJkb3RzIDcgYW5kIDgiCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvYnJsdHR5LWt0Yi5jOjQ1Cittc2dpZCAiZHJpdmVyIgorbXNnc3RyICIiCisKKyM6IERyaXZlcnMvQnJhaWxsZS9CYXVtL2JyYWlsbGUuYzoxMTQ3Cittc2dpZCAiZHJpdmVyIHJlcXVlc3QiCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvY29uZmlnLmM6NDAzCisjOiBQcm9ncmFtcy9jb25maWcuYzo0NzQKKyM6IFByb2dyYW1zL2NvbmZpZy5jOjUxNworbXNnaWQgImRyaXZlciwuLi4iCittc2dzdHIgIiIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBLRVlfRU5EIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDoxNjE1Cittc2dpZCAiZW5kIGtleSIKK21zZ3N0ciAiIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIEtFWV9FTlRFUiBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6MTUyNworbXNnaWQgImVudGVyIGtleSIKK21zZ3N0ciAiIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIExFQVJOIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDo0MzYKK21zZ2lkICJlbnRlci9sZWF2ZSBjb21tYW5kIGxlYXJuIG1vZGUiCittc2dzdHIgIiIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBIRUxQIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDo0MjIKK21zZ2lkICJlbnRlci9sZWF2ZSBoZWxwIGRpc3BsYXkiCittc2dzdHIgIiIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBQUkVGTUVOVSBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6NDQzCittc2dpZCAiZW50ZXIvbGVhdmUgcHJlZmVyZW5jZXMgbWVudSIKK21zZ3N0ciAiIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIElORk8gY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjQyOQorbXNnaWQgImVudGVyL2xlYXZlIHN0YXR1cyBkaXNwbGF5IgorbXNnc3RyICIiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgS0VZX0VTQ0FQRSBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6MTU1MQorbXNnaWQgImVzY2FwZSBrZXkiCittc2dzdHIgIiIKKworIzogRHJpdmVycy9CcmFpbGxlL0lyaXMvYnJhaWxsZS5jOjE0OTcKK21zZ2lkICJldXJvYnJhaWxsZSIKK21zZ3N0ciAiIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgdGVybSB1c2VkIHdoZW4gdGhlIHRpbWUgaXMgZXhhY3RseSBvbiAoaS5lLiB6ZXJvIHNlY29uZHMgYWZ0ZXIpIGEgbWludXRlLgorIzogUHJvZ3JhbXMvY21kX21pc2NlbGxhbmVvdXMuYzoxMDIKK21zZ2lkICJleGFjdGx5IgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL2NvbmZpZy5jOjg3NAorbXNnaWQgImV4Y2VzcyBhcmd1bWVudCIKK21zZ3N0ciAiIgorCisjLiBwYXJlbnQKKyM6IFByb2dyYW1zL2JybHR0eS5jOjIxOQorIywgYy1mb3JtYXQKK21zZ2lkICJleGVjdXRpbmcgXCIlc1wiIChmcm9tIFwiJXNcIilcbiIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9wZ21wcml2c19saW51eC5jOjIwNDcKK21zZ2lkICJleGVjdXRpbmcgYXMgdGhlIGludm9raW5nIHVzZXIiCittc2dzdHIgIiIKKworIy4gZXhlY3YoKSBzaG91bGRuJ3QgcmV0dXJuCisjOiBQcm9ncmFtcy9icmx0dHkuYzoyMjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXhlY3V0aW9uIG9mIFwiJXNcIiBmYWlsZWQ6ICVzXG4iCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMveGJybGFwaS5jOjczNworbXNnaWQgImZhaWxlZCB0byBnZXQgZmlyc3QgZm9jdXNcbiIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9icmx0dHktdHJ0eHQuYzo0NworIzogUHJvZ3JhbXMvYnJsdHR5LXRydHh0LmM6NTUKKyM6IFByb2dyYW1zL2NvbmZpZy5jOjM5MgorIzogUHJvZ3JhbXMvY29uZmlnLmM6NDQ2CisjOiBQcm9ncmFtcy9jb25maWcuYzo0NTYKKyM6IFByb2dyYW1zL2NvbmZpZy5jOjQ2NQorIzogUHJvZ3JhbXMvY29uZmlnLmM6NDkzCisjOiBQcm9ncmFtcy9jb25maWcuYzo1MzYKKyM6IFByb2dyYW1zL2NvbmZpZy5jOjU1MworIzogUHJvZ3JhbXMvY29uZmlnLmM6NjA0CisjOiBQcm9ncmFtcy9jb25maWcuYzo3MzgKK21zZ2lkICJmaWxlIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL2NtZGxpbmUuYzoxMTMwCisjLCBjLWZvcm1hdAorbXNnaWQgImZpbGUgJyVzJyBwcm9jZXNzaW5nIGVycm9yLiIKK21zZ3N0ciAiIgorCisjLiBmYWlsZWQKKyM6IFByb2dyYW1zL2JybHR0eS5jOjIxNAorIywgYy1mb3JtYXQKK21zZ2lkICJmb3JrIG9mIFwiJXNcIiBmYWlsZWQ6ICVzXG4iCittc2dzdHIgIiIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBLRVlfRlVOQ1RJT04gY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjE2NDAKK21zZ2lkICJmdW5jdGlvbiBrZXkiCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvbG9nLmM6MTI0Cittc2dpZCAiZ2VuZXJpYyBJL08iCittc2dzdHIgIiIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBCQUNLIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDoyNzEKK21zZ2lkICJnbyBiYWNrIGFmdGVyIGN1cnNvciB0cmFja2luZyIKK21zZ3N0ciAiIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIEdVSV9CQUNLIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDoxMDc3Cittc2dpZCAiZ28gYmFjayB0byB0aGUgcHJldmlvdXMgc2NyZWVuIgorbXNnc3RyICIiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgRldJTkxUIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDoyMTAKK21zZ2lkICJnbyBiYWNrd2FyZCBvbmUgYnJhaWxsZSB3aW5kb3ciCittc2dzdHIgIiIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBGV0lOTFRTS0lQIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDoyMjgKK21zZ2lkICJnbyBiYWNrd2FyZCBza2lwcGluZyBibGFuayBicmFpbGxlIHdpbmRvd3MiCittc2dzdHIgIiIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBQUk5CV0lOIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDo5NjYKK21zZ2lkICJnbyBiYWNrd2FyZCB0byBuZWFyZXN0IG5vbi1ibGFuayBicmFpbGxlIHdpbmRvdyIKK21zZ3N0ciAiIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIExORE4gY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjIzCittc2dpZCAiZ28gZG93biBvbmUgbGluZSIKK21zZ3N0ciAiIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIFdJTkROIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDo0MQorbXNnaWQgImdvIGRvd24gc2V2ZXJhbCBsaW5lcyIKK21zZ3N0ciAiIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIE5YUEdSUEggY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjEzMworbXNnaWQgImdvIGRvd24gdG8gZmlyc3QgbGluZSBvZiBuZXh0IHBhcmFncmFwaCIKK21zZ3N0ciAiIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIE1FTlVfTEFTVF9JVEVNIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDo0NzUKK21zZ2lkICJnbyBkb3duIHRvIGxhc3QgaXRlbSIKK21zZ3N0ciAiIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIE5YRElGQ0hBUiBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6MTMzNworbXNnaWQgImdvIGRvd24gdG8gbmVhcmVzdCBsaW5lIHdpdGggZGlmZmVyZW50IGNoYXJhY3RlciIKK21zZ3N0ciAiIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIE5YRElGTE4gY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjU5Cittc2dpZCAiZ28gZG93biB0byBuZWFyZXN0IGxpbmUgd2l0aCBkaWZmZXJlbnQgY29udGVudCIKK21zZ3N0ciAiIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIEFUVFJETiBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6NzcKK21zZ2lkICJnbyBkb3duIHRvIG5lYXJlc3QgbGluZSB3aXRoIGRpZmZlcmVudCBoaWdobGlnaHRpbmciCittc2dzdHIgIiIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBOWElOREVOVCBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6MTI3NAorbXNnaWQgImdvIGRvd24gdG8gbmVhcmVzdCBsaW5lIHdpdGggbGVzcyBpbmRlbnQgdGhhbiBjaGFyYWN0ZXIiCittc2dzdHIgIiIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBOWFBST01QVCBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6MTUxCittc2dpZCAiZ28gZG93biB0byBuZXh0IGNvbW1hbmQgcHJvbXB0IgorbXNnc3RyICIiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgTUVOVV9ORVhUX0lURU0gY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjQ5MworbXNnaWQgImdvIGRvd24gdG8gbmV4dCBpdGVtIgorbXNnc3RyICIiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgRldJTlJUIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDoyMTkKK21zZ2lkICJnbyBmb3J3YXJkIG9uZSBicmFpbGxlIHdpbmRvdyIKK21zZ3N0ciAiIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIEZXSU5SVFNLSVAgY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjIzNworbXNnaWQgImdvIGZvcndhcmQgc2tpcHBpbmcgYmxhbmsgYnJhaWxsZSB3aW5kb3dzIgorbXNnc3RyICIiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgTlhOQldJTiBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6OTc1Cittc2dpZCAiZ28gZm9yd2FyZCB0byBuZWFyZXN0IG5vbi1ibGFuayBicmFpbGxlIHdpbmRvdyIKK21zZ3N0ciAiIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIEhXSU5MVCBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6MTkyCittc2dpZCAiZ28gbGVmdCBoYWxmIGEgYnJhaWxsZSB3aW5kb3ciCittc2dzdHIgIiIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBDSFJMVCBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6MTc0Cittc2dpZCAiZ28gbGVmdCBvbmUgY2hhcmFjdGVyIgorbXNnc3RyICIiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgSFdJTlJUIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDoyMDEKK21zZ2lkICJnbyByaWdodCBoYWxmIGEgYnJhaWxsZSB3aW5kb3ciCittc2dzdHIgIiIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBDSFJSVCBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6MTgzCittc2dpZCAiZ28gcmlnaHQgb25lIGNoYXJhY3RlciIKK21zZ3N0ciAiIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIFNQRUFLX0ZSU1RfQ0hBUiBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6Nzg5Cittc2dpZCAiZ28gdG8gYW5kIHNwZWFrIGZpcnN0IG5vbi1ibGFuayBjaGFyYWN0ZXIgb24gbGluZSIKK21zZ3N0ciAiIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIFNQRUFLX0ZSU1RfTElORSBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6ODA1Cittc2dpZCAiZ28gdG8gYW5kIHNwZWFrIGZpcnN0IG5vbi1ibGFuayBsaW5lIG9uIHNjcmVlbiIKK21zZ3N0ciAiIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIFNQRUFLX0xBU1RfQ0hBUiBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6Nzk3Cittc2dpZCAiZ28gdG8gYW5kIHNwZWFrIGxhc3Qgbm9uLWJsYW5rIGNoYXJhY3RlciBvbiBsaW5lIgorbXNnc3RyICIiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgU1BFQUtfTEFTVF9MSU5FIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDo4MTMKK21zZ2lkICJnbyB0byBhbmQgc3BlYWsgbGFzdCBub24tYmxhbmsgbGluZSBvbiBzY3JlZW4iCittc2dzdHIgIiIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBTUEVBS19ORVhUX0NIQVIgY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjczNQorbXNnaWQgImdvIHRvIGFuZCBzcGVhayBuZXh0IGNoYXJhY3RlciIKK21zZ3N0ciAiIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIFNQRUFLX05FWFRfTElORSBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6NzgxCittc2dpZCAiZ28gdG8gYW5kIHNwZWFrIG5leHQgbGluZSIKK21zZ3N0ciAiIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIFNQRUFLX05FWFRfV09SRCBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6NzU4Cittc2dpZCAiZ28gdG8gYW5kIHNwZWFrIG5leHQgd29yZCIKK21zZ3N0ciAiIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIFNQRUFLX1BSRVZfQ0hBUiBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6NzI3Cittc2dpZCAiZ28gdG8gYW5kIHNwZWFrIHByZXZpb3VzIGNoYXJhY3RlciIKK21zZ3N0ciAiIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIFNQRUFLX1BSRVZfTElORSBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6NzczCittc2dpZCAiZ28gdG8gYW5kIHNwZWFrIHByZXZpb3VzIGxpbmUiCittc2dzdHIgIiIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBTUEVBS19QUkVWX1dPUkQgY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjc1MAorbXNnaWQgImdvIHRvIGFuZCBzcGVhayBwcmV2aW91cyB3b3JkIgorbXNnc3RyICIiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgQk9UX0xFRlQgY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjExNQorbXNnaWQgImdvIHRvIGJlZ2lubmluZyBvZiBib3R0b20gbGluZSIKK21zZ3N0ciAiIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIExOQkVHIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDoyNDYKK21zZ2lkICJnbyB0byBiZWdpbm5pbmcgb2YgbGluZSIKK21zZ3N0ciAiIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIFRPUF9MRUZUIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDoxMDUKK21zZ2lkICJnbyB0byBiZWdpbm5pbmcgb2YgdG9wIGxpbmUiCittc2dzdHIgIiIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBCT1QgY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjk1Cittc2dpZCAiZ28gdG8gYm90dG9tIGxpbmUiCittc2dzdHIgIiIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBTUEtIT01FIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDo1MjIKK21zZ2lkICJnbyB0byBjdXJyZW50IHNwZWFraW5nIHBvc2l0aW9uIgorbXNnc3RyICIiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgTE5FTkQgY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjI1NQorbXNnaWQgImdvIHRvIGVuZCBvZiBsaW5lIgorbXNnc3RyICIiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgTUVOVV9QUkVWX0xFVkVMIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDo2NjQKK21zZ2lkICJnbyB0byBwcmV2aW91cyBtZW51IGxldmVsIgorbXNnc3RyICIiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgR09UT01BUksgY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjEzMDcKK21zZ2lkICJnbyB0byByZW1lbWJlcmVkIGJyYWlsbGUgd2luZG93IHBvc2l0aW9uIgorbXNnc3RyICIiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgSE9NRSBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6MjYzCittc2dpZCAiZ28gdG8gc2NyZWVuIGN1cnNvciIKK21zZ3N0ciAiIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIFJFVFVSTiBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6Mjc5Cittc2dpZCAiZ28gdG8gc2NyZWVuIGN1cnNvciBvciBnbyBiYWNrIGFmdGVyIGN1cnNvciB0cmFja2luZyIKK21zZ3N0ciAiIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIEdPVE9MSU5FIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDoxMzE3Cittc2dpZCAiZ28gdG8gc2VsZWN0ZWQgbGluZSIKK21zZ3N0ciAiIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIEdVSV9IT01FIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDoxMDY5Cittc2dpZCAiZ28gdG8gdGhlIGhvbWUgc2NyZWVuIgorbXNnc3RyICIiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgVE9QIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDo4NgorbXNnaWQgImdvIHRvIHRvcCBsaW5lIgorbXNnc3RyICIiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgTE5VUCBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6MTQKK21zZ2lkICJnbyB1cCBvbmUgbGluZSIKK21zZ3N0ciAiIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIFdJTlVQIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDozMgorbXNnaWQgImdvIHVwIHNldmVyYWwgbGluZXMiCittc2dzdHIgIiIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBNRU5VX0ZJUlNUX0lURU0gY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjQ2NgorbXNnaWQgImdvIHVwIHRvIGZpcnN0IGl0ZW0iCittc2dzdHIgIiIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBQUlBHUlBIIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDoxMjQKK21zZ2lkICJnbyB1cCB0byBmaXJzdCBsaW5lIG9mIHBhcmFncmFwaCIKK21zZ3N0ciAiIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIFBSRElGQ0hBUiBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6MTMyNworbXNnaWQgImdvIHVwIHRvIG5lYXJlc3QgbGluZSB3aXRoIGRpZmZlcmVudCBjaGFyYWN0ZXIiCittc2dzdHIgIiIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBQUkRJRkxOIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDo1MAorbXNnaWQgImdvIHVwIHRvIG5lYXJlc3QgbGluZSB3aXRoIGRpZmZlcmVudCBjb250ZW50IgorbXNnc3RyICIiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgQVRUUlVQIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDo2OAorbXNnaWQgImdvIHVwIHRvIG5lYXJlc3QgbGluZSB3aXRoIGRpZmZlcmVudCBoaWdobGlnaHRpbmciCittc2dzdHIgIiIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBQUklOREVOVCBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6MTI2NAorbXNnaWQgImdvIHVwIHRvIG5lYXJlc3QgbGluZSB3aXRoIGxlc3MgaW5kZW50IHRoYW4gY2hhcmFjdGVyIgorbXNnc3RyICIiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgUFJQUk9NUFQgY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjE0MgorbXNnaWQgImdvIHVwIHRvIHByZXZpb3VzIGNvbW1hbmQgcHJvbXB0IgorbXNnc3RyICIiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgTUVOVV9QUkVWX0lURU0gY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjQ4NAorbXNnaWQgImdvIHVwIHRvIHByZXZpb3VzIGl0ZW0iCittc2dzdHIgIiIKKworIy4gRworIzogUHJvZ3JhbXMvY21kX3V0aWxzLmM6MTUzCittc2dpZCAiZ3JlZW4iCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvcGdtcHJpdnNfbGludXguYzoyMTY5Cittc2dpZCAiZ3JvdXAgcGVybWlzc2lvbnMgYWRkZWQiCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvY21kX21pc2NlbGxhbmVvdXMuYzoyMTMKK21zZ2lkICJoZWxwIG5vdCBhdmFpbGFibGUiCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvc2NyX2hlbHAuYzoyMjkKK21zZ2lkICJoZWxwIHNjcmVlbiBub3QgcmVhZGFibGUiCittc2dzdHIgIiIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBLRVlfSE9NRSBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6MTYwNworbXNnaWQgImhvbWUga2V5IgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL2JybHR0eS1oaWQuYzo4MQorIzogUHJvZ3JhbXMvYnJsdHR5LWhpZC5jOjg4CisjOiBQcm9ncmFtcy9icmx0dHktaGlkLmM6MTcyCisjOiBQcm9ncmFtcy9icmx0dHktaGlkLmM6MTc5Cittc2dpZCAiaWRlbnRpZmllciIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9jb25maWcuYzo0MjQKK21zZ2lkICJpZGVudGlmaWVyLC4uLiIKK21zZ3N0ciAiIgorCisjOiBEcml2ZXJzL0JyYWlsbGUvQmF1bS9icmFpbGxlLmM6MTE0OQorbXNnaWQgImlkbGUgdGltZW91dCIKK21zZ3N0ciAiIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIFNBWV9ISUdIRVIgY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjExNzUKK21zZ2lkICJpbmNyZWFzZSBzcGVha2luZyBwaXRjaCIKK21zZ3N0ciAiIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIFNBWV9GQVNURVIgY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjU1NworbXNnaWQgImluY3JlYXNlIHNwZWFraW5nIHJhdGUiCittc2dzdHIgIiIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBTQVlfTE9VREVSIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDo1NzEKK21zZ2lkICJpbmNyZWFzZSBzcGVha2luZyB2b2x1bWUiCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvY29yZS5jOjExMjkKK21zZ2lkICJpbmRlbnQiCittc2dzdHIgIiIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBQQVNURV9ISVNUT1JZIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDoxMzYxCittc2dpZCAiaW5zZXJ0IGNsaXBib2FyZCBoaXN0b3J5IGVudHJ5IGFmdGVyIHNjcmVlbiBjdXJzb3IiCittc2dzdHIgIiIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBQQVNURSBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6NjAwCittc2dpZCAiaW5zZXJ0IGNsaXBib2FyZCB0ZXh0IGFmdGVyIHNjcmVlbiBjdXJzb3IiCittc2dzdHIgIiIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBIT1NUX1BBU1RFIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDoxMDQ3Cittc2dpZCAiaW5zZXJ0IGhvc3QgY2xpcGJvYXJkIHRleHQgYWZ0ZXIgc2NyZWVuIGN1cnNvciIKK21zZ3N0ciAiIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIEtFWV9JTlNFUlQgY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjE2MjMKK21zZ2lkICJpbnNlcnQga2V5IgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL3Byb2dyYW0uYzoxNzMKK21zZ2lkICJpbnN0YWxsIHBhdGggbm90IGFic29sdXRlIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL2JybHR0eS1oaWQuYzoyMDYKK21zZ2lkICJpbnRlZ2VyIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL2NtZGxpbmUuYzoxMDQKK21zZ2lkICJpbnZhbGlkIGNvdW50ZXIgc2V0dGluZyIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9kYXRhZmlsZS5jOjMxOAorbXNnaWQgImludmFsaWQgZXNjYXBlIHNlcXVlbmNlIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL2NtZGxpbmUuYzoxMTMKK21zZ2lkICJpbnZhbGlkIGZsYWcgc2V0dGluZyIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9jb25maWcuYzoyODkwCittc2dpZCAiaW52YWxpZCBtZXNzYWdlIGhvbGQgdGltZW91dCIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9jbWRsaW5lLmM6NjY3Cittc2dpZCAiaW52YWxpZCBvcGVyYW5kIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL2JybGFwaV9zZXJ2ZXIuYzo0NTQ0Cittc2dpZCAiaW52YWxpZCB0aHJlYWQgc3RhY2sgc2l6ZSIKK21zZ3N0ciAiIgorCisjOiBEcml2ZXJzL0JyYWlsbGUvQnJhaWxsZUxpdGUvYnJhaWxsZS5jOjU5MAorIzogRHJpdmVycy9CcmFpbGxlL0JyYWlsbGVMaXRlL2JyYWlsbGUuYzo2NjgKK21zZ2lkICJrZXlib2FyZCBlbXUgb2ZmIgorbXNnc3RyICIiCisKKyM6IERyaXZlcnMvQnJhaWxsZS9CcmFpbGxlTGl0ZS9icmFpbGxlLmM6NTg5Cittc2dpZCAia2V5Ym9hcmQgZW11IG9uIgorbXNnc3RyICIiCisKKyMuIEwgIEIKKyM6IFByb2dyYW1zL2NtZF91dGlscy5jOjE2MAorbXNnaWQgImxpZ2h0IGJsdWUiCittc2dzdHIgIiIKKworIy4gTCBHQgorIzogUHJvZ3JhbXMvY21kX3V0aWxzLmM6MTYyCittc2dpZCAibGlnaHQgY3lhbiIKK21zZ3N0ciAiIgorCisjLiBMIEcKKyM6IFByb2dyYW1zL2NtZF91dGlscy5jOjE2MQorbXNnaWQgImxpZ2h0IGdyZWVuIgorbXNnc3RyICIiCisKKyMuIFJHQgorIzogUHJvZ3JhbXMvY21kX3V0aWxzLmM6MTU4Cittc2dpZCAibGlnaHQgZ3JleSIKK21zZ3N0ciAiIgorCisjLiBMUiBCCisjOiBQcm9ncmFtcy9jbWRfdXRpbHMuYzoxNjQKK21zZ2lkICJsaWdodCBtYWdlbnRhIgorbXNnc3RyICIiCisKKyMuIExSCisjOiBQcm9ncmFtcy9jbWRfdXRpbHMuYzoxNjMKK21zZ2lkICJsaWdodCByZWQiCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvY21kX3NwZWVjaC5jOjUwMAorbXNnaWQgImxpbmUiCittc2dzdHIgIiIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBDT1BZX0xJTkUgY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjEyNDYKK21zZ2lkICJsaW5lYXIgY29weSB0byBjaGFyYWN0ZXIiCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvYnJsdHR5LXB0eS5jOjExMgorbXNnaWQgImxvZyBlc2NhcGUgc2VxdWVuY2VzIGFuZCBzcGVjaWFsIGNoYXJhY3RlcnMgcmVjZWl2ZWQgZnJvbSB0aGUgcHR5IHNsYXZlIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL2JybHR0eS1wdHkuYzoxMDAKK21zZ2lkICJsb2cgaW5wdXQgd3JpdHRlbiB0byB0aGUgcHR5IHNsYXZlIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL2JybHR0eS1wdHkuYzoxMDYKK21zZ2lkICJsb2cgb3V0cHV0IHJlY2VpdmVkIGZyb20gdGhlIHB0eSBzbGF2ZSB0aGF0IGlzbid0IGFuIGVzY2FwZSBzZXF1ZW5jZSBvciBhIHNwZWNpYWwgY2hhcmFjdGVyIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL2JybHR0eS1wdHkuYzoxMTgKK21zZ2lkICJsb2cgdW5leHBlY3RlZCBpbnB1dC9vdXRwdXQiCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvY29uZmlnLmM6NTk1Cittc2dpZCAibHZsfGNhdCwuLi4iCittc2dzdHIgIiIKKworIy4gUiBCCisjOiBQcm9ncmFtcy9jbWRfdXRpbHMuYzoxNTYKK21zZ2lkICJtYWdlbnRhIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL2NtZGxpbmUuYzo2NjIKK21zZ2lkICJtaXNzaW5nIG9wZXJhbmQiCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvcGFyc2UuYzo1MzMKK21zZ2lkICJtaXNzaW5nIHBhcmFtZXRlciBuYW1lIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL3BhcnNlLmM6NTE5Cittc2dpZCAibWlzc2luZyBwYXJhbWV0ZXIgcXVhbGlmaWVyIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL3BhcnNlLmM6NDk1Cittc2dpZCAibWlzc2luZyBwYXJhbWV0ZXIgdmFsdWUiCittc2dzdHIgIiIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBHVUlfSVRFTV9GUlNUIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDoxMTQwCittc2dpZCAibW92ZSB0byB0aGUgZmlyc3QgaXRlbSBpbiB0aGUgc2NyZWVuIGFyZWEiCittc2dzdHIgIiIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBHVUlfSVRFTV9MQVNUIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDoxMTYxCittc2dpZCAibW92ZSB0byB0aGUgbGFzdCBpdGVtIGluIHRoZSBzY3JlZW4gYXJlYSIKK21zZ3N0ciAiIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIEdVSV9JVEVNX05FWFQgY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjExNTQKK21zZ2lkICJtb3ZlIHRvIHRoZSBuZXh0IGl0ZW0gaW4gdGhlIHNjcmVlbiBhcmVhIgorbXNnc3RyICIiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgR1VJX0lURU1fUFJFViBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6MTE0NworbXNnaWQgIm1vdmUgdG8gdGhlIHByZXZpb3VzIGl0ZW0gaW4gdGhlIHNjcmVlbiBhcmVhIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL21zZ3Rlc3QuYzo1NworbXNnaWQgIm5hbWUiCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvY29uZmlnLmM6NDE0CisjOiBQcm9ncmFtcy9jb25maWcuYzo0ODQKKyM6IFByb2dyYW1zL2NvbmZpZy5jOjUyNworIzogUHJvZ3JhbXMvY29uZmlnLmM6NTQ1CisjOiBQcm9ncmFtcy9jb25maWcuYzo1NjIKKyM6IFByb2dyYW1zL2NvbmZpZy5jOjU3OAorIzogUHJvZ3JhbXMvY29uZmlnLmM6NjMxCittc2dpZCAibmFtZT12YWx1ZSwuLi4iCittc2dzdHIgIiIKKworIzogRHJpdmVycy9CcmFpbGxlL0lyaXMvYnJhaWxsZS5jOjE1MTMKK21zZ2lkICJuYXRpdmUiCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjY2OAorbXNnaWQgIm5vIGRvdHMiCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvY29uZmlnLmM6MTI1NworbXNnaWQgIm5vIGtleSBiaW5kaW5ncyIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9zY3JfZHJpdmVyLmM6MzkKK21zZ2lkICJubyBzY3JlZW4iCittc2dzdHIgIiIKKworIzogRHJpdmVycy9TY3JlZW4vVGVybWluYWxFbXVsYXRvci9lbV9zY3JlZW4uYzoxMzcKK21zZ2lkICJubyBzY3JlZW4gY2FjaGUiCittc2dzdHIgIiIKKworIzogRHJpdmVycy9TY3JlZW4vVGVybWluYWxFbXVsYXRvci9lbV9zY3JlZW4uYzozOTgKK21zZ2lkICJubyBzY3JlZW4gZW11bGF0b3IiCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvY21kX3ByZWZlcmVuY2VzLmM6NDcKK21zZ2lkICJub3Qgc2F2ZWQiCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvcGdtcHJpdnNfbGludXguYzoyMDIwCittc2dpZCAibm90IHN3aXRjaGluZyB0byBhbiB1bnByaXZpbGVnZWQgdXNlciIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9icmx0dHktaGlkLmM6MTE2Cittc2dpZCAib2N0ZXRzIgorbXNnc3RyICIiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgR1VJX0FQUF9BTEVSVFMgY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjExMTIKK21zZ2lkICJvcGVuIHRoZSBhcHBsaWNhdGlvbiBhbGVydHMgd2luZG93IgorbXNnc3RyICIiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgR1VJX0FQUF9MSVNUIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDoxMDk4Cittc2dpZCAib3BlbiB0aGUgYXBwbGljYXRpb24gbGlzdCB3aW5kb3ciCittc2dzdHIgIiIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBHVUlfQVBQX01FTlUgY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjExMDUKK21zZ2lkICJvcGVuIHRoZSBhcHBsaWNhdGlvbi1zcGVjaWZpYyBtZW51IgorbXNnc3RyICIiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgR1VJX0JSTF9BQ1RJT05TIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDoxMDYxCittc2dpZCAib3BlbiB0aGUgYnJhaWxsZSBhY3Rpb25zIHdpbmRvdyIKK21zZ3N0ciAiIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIEdVSV9ERVZfT1BUSU9OUyBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6MTA5MQorbXNnaWQgIm9wZW4gdGhlIGRldmljZSBvcHRpb25zIHdpbmRvdyIKK21zZ3N0ciAiIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIEdVSV9ERVZfU0VUVElOR1MgY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjEwODQKK21zZ2lkICJvcGVuIHRoZSBkZXZpY2Ugc2V0dGluZ3Mgd2luZG93IgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL2NtZGxpbmUuYzoyNDYKK21zZ2lkICJvcHRpb24iCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvcGdtcHJpdnNfbGludXguYzoyMTU0Cittc2dpZCAib3duZXJzaGlwIGNsYWltZWQiCittc2dzdHIgIiIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBLRVlfUEFHRV9ET1dOIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDoxNTk5Cittc2dpZCAicGFnZS1kb3duIGtleSIKK21zZ3N0ciAiIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIEtFWV9QQUdFX1VQIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDoxNTkxCittc2dpZCAicGFnZS11cCBrZXkiCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvbXNndGVzdC5jOjQyCittc2dpZCAicGF0aCIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9jb25maWcuYzoyODYzCittc2dpZCAicGlkIGZpbGUgbm90IHNwZWNpZmllZCIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9wcm9ncmFtLmM6MzM1Cittc2dpZCAicGlkIGZpbGUgb3BlbiBlcnJvciIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9zcGsuYzoyMzIKK21zZ2lkICJwaXRjaCIKK21zZ3N0ciAiIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIFNFVExFRlQgY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjEyOTAKK21zZ2lkICJwbGFjZSBsZWZ0IGVuZCBvZiBicmFpbGxlIHdpbmRvdyBhdCBjaGFyYWN0ZXIiCittc2dzdHIgIiIKKworIzogRHJpdmVycy9CcmFpbGxlL0JhdW0vYnJhaWxsZS5jOjExNDgKK21zZ2lkICJwb3dlciBzd2l0Y2giCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvY29uZmlnLmM6NTA3Cittc2dpZCAicXVhbGl0eSIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9zcGsuYzoyMDYKK21zZ2lkICJyYXRlIgorbXNnc3RyICIiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgQ09QWV9SRUNUIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDoxMjM4Cittc2dpZCAicmVjdGFuZ3VsYXIgY29weSB0byBjaGFyYWN0ZXIiCittc2dzdHIgIiIKKworIy4gUgorIzogUHJvZ3JhbXMvY21kX3V0aWxzLmM6MTU1Cittc2dpZCAicmVkIgorbXNnc3RyICIiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgUkVGUkVTSCBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6MTAwNQorbXNnaWQgInJlZnJlc2ggYnJhaWxsZSBkaXNwbGF5IgorbXNnc3RyICIiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgUkVGUkVTSF9MSU5FIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDoxNDIwCittc2dpZCAicmVmcmVzaCBicmFpbGxlIGxpbmUiCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvY29uZmlnLmM6NjYxCittc2dpZCAicmVnZXhwLC4uLiIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9jb25maWcuYzoyMTE3CisjLCBjLWZvcm1hdAorbXNnaWQgInJlaW5pdGlhbGl6aW5nIGJyYWlsbGUgZHJpdmVyIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL2NvbmZpZy5jOjI2MzUKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVpbml0aWFsaXppbmcgc2NyZWVuIGRyaXZlciIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9jb25maWcuYzoyNDMyCisjLCBjLWZvcm1hdAorbXNnaWQgInJlaW5pdGlhbGl6aW5nIHNwZWVjaCBkcml2ZXIiCittc2dzdHIgIiIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBTRVRNQVJLIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDoxMjk4Cittc2dpZCAicmVtZW1iZXIgY3VycmVudCBicmFpbGxlIHdpbmRvdyBwb3NpdGlvbiIKK21zZ3N0ciAiIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIEFMRVJUIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDoxNDYxCittc2dpZCAicmVuZGVyIGFuIGFsZXJ0IgorbXNnc3RyICIiCisKKyM6IERyaXZlcnMvQnJhaWxsZS9CcmFpbGxlTGl0ZS9icmFpbGxlLmM6NjAxCisjOiBEcml2ZXJzL0JyYWlsbGUvQnJhaWxsZUxpdGUvYnJhaWxsZS5jOjc4MAorIzogRHJpdmVycy9CcmFpbGxlL0JyYWlsbGVMaXRlL2JyYWlsbGUuYzo3ODIKKyM6IERyaXZlcnMvQnJhaWxsZS9CcmFpbGxlTGl0ZS9icmFpbGxlLmM6NzkxCittc2dpZCAicmVwZWF0IGNvdW50IgorbXNnc3RyICIiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgUFJFRlJFU0VUIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDoxMjA1Cittc2dpZCAicmVzZXQgcHJlZmVyZW5jZXMgdG8gZGVmYXVsdHMiCittc2dzdHIgIiIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBSRVNUQVJUQlJMIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDo2MDcKK21zZ2lkICJyZXN0YXJ0IGJyYWlsbGUgZHJpdmVyIgorbXNnc3RyICIiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgUkVTVEFSVFNQRUVDSCBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6NjE0Cittc2dpZCAicmVzdGFydCBzcGVlY2ggZHJpdmVyIgorbXNnc3RyICIiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgQ0xJUF9SRVNUT1JFIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDo4NjQKK21zZ2lkICJyZXN0b3JlIGNsaXBib2FyZCBmcm9tIGRpc2siCittc2dzdHIgIiIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBQUkVGTE9BRCBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6NDU3Cittc2dpZCAicmVzdG9yZSBwcmVmZXJlbmNlcyBmcm9tIGRpc2siCittc2dzdHIgIiIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBHVUlfQVJFQV9BQ1RWIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDoxMTE5Cittc2dpZCAicmV0dXJuIHRvIHRoZSBhY3RpdmUgc2NyZWVuIGFyZWEiCittc2dzdHIgIiIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBDTElQX1NBVkUgY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjg1NworbXNnaWQgInNhdmUgY2xpcGJvYXJkIHRvIGRpc2siCittc2dzdHIgIiIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBQUkVGU0FWRSBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6NDUwCittc2dpZCAic2F2ZSBwcmVmZXJlbmNlcyB0byBkaXNrIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL3hicmxhcGkuYzo5MgorbXNnaWQgInNjaGVtZSsuLi4iCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvY29uZmlnLmM6MjUxMQorbXNnaWQgInNjcmVlbiBkcml2ZXIgbm90IGxvYWRhYmxlIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL2NvbmZpZy5jOjI2MzIKK21zZ2lkICJzY3JlZW4gZHJpdmVyIHJlc3RhcnRpbmciCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvY21kX21pc2NlbGxhbmVvdXMuYzoxNzEKK21zZ2lkICJzY3JlZW4gZHJpdmVyIHN0b3BwZWQiCittc2dzdHIgIiIKKworIzogRHJpdmVycy9TY3JlZW4vQW5kcm9pZC9zY3JlZW4uYzoxODQKK21zZ2lkICJzY3JlZW4gbG9ja2VkIgorbXNnc3RyICIiCisKKyM6IERyaXZlcnMvU2NyZWVuL1Rlcm1pbmFsRW11bGF0b3IvZW1fc2NyZWVuLmM6MTQxCittc2dpZCAic2NyZWVuIG5vdCBhY2Nlc3NpYmxlIgorbXNnc3RyICIiCisKKyM6IERyaXZlcnMvU2NyZWVuL1Rlcm1pbmFsRW11bGF0b3IvZW1fc2NyZWVuLmM6Mzk1Cittc2dpZCAic2NyZWVuIG5vdCBhdHRhY2hlZCIKK21zZ3N0ciAiIgorCisjOiBEcml2ZXJzL1NjcmVlbi9UZXJtaW5hbEVtdWxhdG9yL2VtX3NjcmVlbi5jOjM4NAorbXNnaWQgInNjcmVlbiBub3QgYXZhaWxhYmxlIgorbXNnc3RyICIiCisKKyM6IERyaXZlcnMvU2NyZWVuL0xpbnV4L3NjcmVlbi5jOjE1ODQKK21zZ2lkICJzY3JlZW4gbm90IGluIHRleHQgbW9kZSIKK21zZ3N0ciAiIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIFBSU0VBUkNIIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDoxNTgKK21zZ2lkICJzZWFyY2ggYmFja3dhcmQgZm9yIGNsaXBib2FyZCB0ZXh0IgorbXNnc3RyICIiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgTlhTRUFSQ0ggY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjE2NQorbXNnaWQgInNlYXJjaCBmb3J3YXJkIGZvciBjbGlwYm9hcmQgdGV4dCIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9tZW51LmM6NDY5Cittc2dpZCAic2Vjb25kcyIKK21zZ3N0ciAiIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIFRYVFNFTF9BTEwgY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjEwMjYKK21zZ2lkICJzZWxlY3QgYWxsIG9mIHRoZSB0ZXh0IgorbXNnc3RyICIiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgTUVOVV9ORVhUX1NFVFRJTkcgY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjUwNworbXNnaWQgInNlbGVjdCBuZXh0IGNob2ljZSIKK21zZ3N0ciAiIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIE1FTlVfUFJFVl9TRVRUSU5HIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDo1MDAKK21zZ2lkICJzZWxlY3QgcHJldmlvdXMgY2hvaWNlIgorbXNnc3RyICIiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgVFVORVMgY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjM5OQorbXNnaWQgInNldCBhbGVydCB0dW5lcyBvbi9vZmYiCittc2dzdHIgIiIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBBVFRSQkxJTksgY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjM4MworbXNnaWQgInNldCBhdHRyaWJ1dGUgYmxpbmtpbmcgb24vb2ZmIgorbXNnc3RyICIiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgQVRUUlZJUyBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6Mzc1Cittc2dpZCAic2V0IGF0dHJpYnV0ZSB1bmRlcmxpbmluZyBvbi9vZmYiCittc2dzdHIgIiIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBTRVRfQVRUUklCVVRFU19UQUJMRSBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6MTM3NworbXNnaWQgInNldCBhdHRyaWJ1dGVzIHRhYmxlIgorbXNnc3RyICIiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgQVVUT1JFUEVBVCBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6NDA3Cittc2dpZCAic2V0IGF1dG9yZXBlYXQgb24vb2ZmIgorbXNnc3RyICIiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgQVNQS19DTVBfV09SRFMgY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjcxMgorbXNnaWQgInNldCBhdXRvc3BlYWsgY29tcGxldGVkIHdvcmRzIG9uL29mZiIKK21zZ3N0ciAiIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIEFTUEtfREVMX0NIQVJTIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDo2OTYKK21zZ2lkICJzZXQgYXV0b3NwZWFrIGRlbGV0ZWQgY2hhcmFjdGVycyBvbi9vZmYiCittc2dzdHIgIiIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBBU1BLX0lOREVOVCBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6OTk4Cittc2dpZCAic2V0IGF1dG9zcGVhayBpbmRlbnQgb2YgY3VycmVudCBsaW5lIG9uL29mZiIKK21zZ3N0ciAiIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIEFTUEtfSU5TX0NIQVJTIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDo2ODgKK21zZ2lkICJzZXQgYXV0b3NwZWFrIGluc2VydGVkIGNoYXJhY3RlcnMgb24vb2ZmIgorbXNnc3RyICIiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgQVVUT1NQRUFLIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDo0MTUKK21zZ2lkICJzZXQgYXV0b3NwZWFrIG9uL29mZiIKK21zZ3N0ciAiIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIEFTUEtfUkVQX0NIQVJTIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDo3MDQKK21zZ2lkICJzZXQgYXV0b3NwZWFrIHJlcGxhY2VkIGNoYXJhY3RlcnMgb24vb2ZmIgorbXNnc3RyICIiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgQVNQS19TRUxfQ0hBUiBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6NjgwCittc2dpZCAic2V0IGF1dG9zcGVhayBzZWxlY3RlZCBjaGFyYWN0ZXIgb24vb2ZmIgorbXNnc3RyICIiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgQVNQS19TRUxfTElORSBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6NjcyCittc2dpZCAic2V0IGF1dG9zcGVhayBzZWxlY3RlZCBsaW5lIG9uL29mZiIKK21zZ3N0ciAiIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIEJSTEtCRCBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6ODgwCittc2dpZCAic2V0IGJyYWlsbGUga2V5Ym9hcmQgZW5hYmxlZC9kaXNhYmxlZCIKK21zZ3N0ciAiIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIEJSTFVDRE9UUyBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6ODcyCittc2dpZCAic2V0IGJyYWlsbGUgdHlwaW5nIG1vZGUgZG90cy90ZXh0IgorbXNnc3RyICIiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgQ0FQQkxJTksgY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjM5MQorbXNnaWQgInNldCBjYXBpdGFsIGxldHRlciBibGlua2luZyBvbi9vZmYiCittc2dzdHIgIiIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBDT05UUkFDVEVEIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDoxMTkwCittc2dpZCAic2V0IGNvbnRyYWN0ZWQvY29tcHV0ZXIgYnJhaWxsZSIKK21zZ3N0ciAiIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIFNFVF9DT05UUkFDVElPTl9UQUJMRSBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6MTM4NQorbXNnaWQgInNldCBjb250cmFjdGlvbiB0YWJsZSIKK21zZ3N0ciAiIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIERJU1BNRCBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6Mjk1Cittc2dpZCAic2V0IGRpc3BsYXkgbW9kZSBhdHRyaWJ1dGVzL3RleHQiCittc2dzdHIgIiIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBDU1JISURFIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDozNDMKK21zZ2lkICJzZXQgaGlkZGVuIHNjcmVlbiBjdXJzb3Igb24vb2ZmIgorbXNnc3RyICIiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgU0VUX0tFWUJPQVJEX1RBQkxFIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDoxMzkzCittc2dpZCAic2V0IGtleWJvYXJkIHRhYmxlIgorbXNnc3RyICIiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgU0VUX0xBTkdVQUdFX1BST0ZJTEUgY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjE0MDEKK21zZ2lkICJzZXQgbGFuZ3VhZ2UgcHJvZmlsZSIKK21zZ3N0ciAiIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIENTUkJMSU5LIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDozNjcKK21zZ2lkICJzZXQgc2NyZWVuIGN1cnNvciBibGlua2luZyBvbi9vZmYiCittc2dzdHIgIiIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBDU1JTSVpFIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDozNTkKK21zZ2lkICJzZXQgc2NyZWVuIGN1cnNvciBzdHlsZSBibG9jay91bmRlcmxpbmUiCittc2dzdHIgIiIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBDU1JWSVMgY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjMzNQorbXNnaWQgInNldCBzY3JlZW4gY3Vyc29yIHZpc2liaWxpdHkgb24vb2ZmIgorbXNnc3RyICIiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgRlJFRVpFIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDoyODcKK21zZ2lkICJzZXQgc2NyZWVuIGltYWdlIGZyb3plbi91bmZyb3plbiIKK21zZ3N0ciAiIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIENPTVBCUkw2IGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDoxMTk4Cittc2dpZCAic2V0IHNpeC9laWdodCBkb3QgY29tcHV0ZXIgYnJhaWxsZSIKK21zZ3N0ciAiIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIFNLUEJMTktXSU5TIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDozMjcKK21zZ2lkICJzZXQgc2tpcHBpbmcgb2YgYmxhbmsgYnJhaWxsZSB3aW5kb3dzIG9uL29mZiIKK21zZ3N0ciAiIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIFNLUElETE5TIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDozMTkKK21zZ2lkICJzZXQgc2tpcHBpbmcgb2YgbGluZXMgd2l0aCBpZGVudGljYWwgY29udGVudCBvbi9vZmYiCittc2dzdHIgIiIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBTTElERVdJTiBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6MzExCittc2dpZCAic2V0IHNsaWRpbmcgYnJhaWxsZSB3aW5kb3cgb24vb2ZmIgorbXNnc3RyICIiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgU0hPV19DVVJSX0xPQ04gY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjg1MAorbXNnaWQgInNldCBzcGVlY2ggY3Vyc29yIHZpc2liaWxpdHkgb24vb2ZmIgorbXNnc3RyICIiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgVFhUU0VMX1NFVCBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6MTQzNgorbXNnaWQgInNldCB0ZXh0IHNlbGVjdGlvbiIKK21zZ3N0ciAiIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIFNJWERPVFMgY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjMwMworbXNnaWQgInNldCB0ZXh0IHN0eWxlIDYtZG90LzgtZG90IgorbXNnc3RyICIiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgU0VUX1RFWFRfVEFCTEUgY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjEzNjkKK21zZ2lkICJzZXQgdGV4dCB0YWJsZSIKK21zZ3N0ciAiIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIFRPVUNIX05BViBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6OTgzCittc2dpZCAic2V0IHRvdWNoIG5hdmlnYXRpb24gb24vb2ZmIgorbXNnc3RyICIiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgQ1NSVFJLIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDozNTEKK21zZ2lkICJzZXQgdHJhY2sgc2NyZWVuIGN1cnNvciBvbi9vZmYiCittc2dzdHIgIiIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBUSU1FIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDo2NTYKK21zZ2lkICJzaG93IGN1cnJlbnQgZGF0ZSBhbmQgdGltZSIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9icmx0dHktcHR5LmM6NjYKK21zZ2lkICJzaG93IHRoZSBhYnNvbHV0ZSBwYXRoIHRvIHRoZSBwdHkgc2xhdmUiCittc2dzdHIgIiIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBHVUlfVElUTEUgY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjEwNTQKK21zZ2lkICJzaG93IHRoZSB3aW5kb3cgdGl0bGUiCittc2dzdHIgIiIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBJTkRJQ0FUT1JTIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDoxMDEyCittc2dpZCAic2hvdyB2YXJpb3VzIGRldmljZSBzdGF0dXMgaW5kaWNhdG9ycyIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6MTA1OQorbXNnaWQgInNvdW5kY2FyZCBkaWdpdGFsIGF1ZGlvIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzoxMDYxCittc2dpZCAic291bmRjYXJkIHN5bnRoZXNpemVyIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL2NtZC5jOjI3OAorIzogUHJvZ3JhbXMvY29yZS5jOjEwNTIKK21zZ2lkICJzcGFjZSIKK21zZ3N0ciAiIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIFNQRUFLX0NVUlJfQ0hBUiBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6NzE5Cittc2dpZCAic3BlYWsgY3VycmVudCBjaGFyYWN0ZXIiCittc2dzdHIgIiIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBTQVlfTElORSBjb21tYW5kLgorIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBTUEVBS19DVVJSX0xJTkUgY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjUyOQorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6NzY1Cittc2dpZCAic3BlYWsgY3VycmVudCBsaW5lIgorbXNnc3RyICIiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgU1BFQUtfQ1VSUl9XT1JEIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDo3NDIKK21zZ2lkICJzcGVhayBjdXJyZW50IHdvcmQiCittc2dzdHIgIiIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBTQVlfQkVMT1cgY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjU0MworbXNnaWQgInNwZWFrIGZyb20gY3VycmVudCBsaW5lIHRocm91Z2ggYm90dG9tIG9mIHNjcmVlbiIKK21zZ3N0ciAiIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIFNBWV9BTEwgY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjExODIKK21zZ2lkICJzcGVhayBmcm9tIHRvcCBvZiBzY3JlZW4gdGhyb3VnaCBib3R0b20gb2Ygc2NyZWVuIgorbXNnc3RyICIiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgU0FZX0FCT1ZFIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDo1MzYKK21zZ2lkICJzcGVhayBmcm9tIHRvcCBvZiBzY3JlZW4gdGhyb3VnaCBjdXJyZW50IGxpbmUiCittc2dzdHIgIiIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBTUEVBS19JTkRFTlQgY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjk5MAorbXNnaWQgInNwZWFrIGluZGVudCBvZiBjdXJyZW50IGxpbmUiCittc2dzdHIgIiIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBTUEVBS19DVVJSX0xPQ04gY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjg0MgorbXNnaWQgInNwZWFrIHNwZWVjaCBjdXJzb3IgbG9jYXRpb24iCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvbXNndGVzdC5jOjUwCittc2dpZCAic3BlY2lmaWVyIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL2NvbmZpZy5jOjIyODAKK21zZ2lkICJzcGVlY2ggZHJpdmVyIG5vdCBsb2FkYWJsZSIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9jb25maWcuYzoyNDI5Cittc2dpZCAic3BlZWNoIGRyaXZlciByZXN0YXJ0aW5nIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL2NtZF9zcGVlY2guYzoxMDQKK21zZ2lkICJzcGVlY2ggZHJpdmVyIHN0b3BwZWQiCittc2dzdHIgIiIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBTUEVMTF9DVVJSX1dPUkQgY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjgyNworbXNnaWQgInNwZWxsIGN1cnJlbnQgd29yZCIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9icmx0dHktcHR5LmM6NDAzCittc2dpZCAic3RhbmRhcmQgaW5wdXQgaXNuJ3QgYSB0ZXJtaW5hbCIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9icmx0dHktcHR5LmM6NDA4Cittc2dpZCAic3RhbmRhcmQgb3V0cHV0IGlzbid0IGEgdGVybWluYWwiCittc2dzdHIgIiIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBDTElQX05FVyBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6MTIyMgorbXNnaWQgInN0YXJ0IG5ldyBjbGlwYm9hcmQgYXQgY2hhcmFjdGVyIgorbXNnc3RyICIiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgVFhUU0VMX1NUQVJUIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDoxNDI4Cittc2dpZCAic3RhcnQgdGV4dCBzZWxlY3Rpb24iCittc2dzdHIgIiIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBCUkxfU1RBUlQgY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjkxNQorbXNnaWQgInN0YXJ0IHRoZSBicmFpbGxlIGRyaXZlciIKK21zZ3N0ciAiIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIFNDUl9TVEFSVCBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6OTQzCittc2dpZCAic3RhcnQgdGhlIHNjcmVlbiBkcml2ZXIiCittc2dzdHIgIiIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBTUEtfU1RBUlQgY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjkyOQorbXNnaWQgInN0YXJ0IHRoZSBzcGVlY2ggZHJpdmVyIgorbXNnc3RyICIiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgTVVURSBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6NTE0Cittc2dpZCAic3RvcCBzcGVha2luZyIKK21zZ3N0ciAiIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIEJSTF9TVE9QIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDo5MDgKK21zZ2lkICJzdG9wIHRoZSBicmFpbGxlIGRyaXZlciIKK21zZ3N0ciAiIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIFNDUl9TVE9QIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDo5MzYKK21zZ2lkICJzdG9wIHRoZSBzY3JlZW4gZHJpdmVyIgorbXNnc3RyICIiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgU1BLX1NUT1AgY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjkyMgorbXNnaWQgInN0b3AgdGhlIHNwZWVjaCBkcml2ZXIiCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMveGJybGFwaS5jOjY4MgorbXNnaWQgInN0cmFuZ2Ugb2xkIGVycm9yIGhhbmRsZXJcbiIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9icmx0dHktY2xkci5jOjM5CisjOiBQcm9ncmFtcy9icmx0dHktaGlkLmM6OTUKKyM6IFByb2dyYW1zL2JybHR0eS1oaWQuYzoxMDIKKyM6IFByb2dyYW1zL2JybHR0eS1oaWQuYzoxMDkKKyM6IFByb2dyYW1zL2JybHR0eS1oaWQuYzoxMjMKK21zZ2lkICJzdHJpbmciCittc2dzdHIgIiIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBDT05URVhUIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDoxNTExCittc2dpZCAic3dpdGNoIHRvIGNvbW1hbmQgY29udGV4dCIKK21zZ3N0ciAiIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIFNXSVRDSFZUIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDoxMjU0Cittc2dpZCAic3dpdGNoIHRvIHNwZWNpZmljIHZpcnR1YWwgdGVybWluYWwiCittc2dzdHIgIiIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBHVUlfQVJFQV9ORVhUIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDoxMTMzCittc2dpZCAic3dpdGNoIHRvIHRoZSBuZXh0IHNjcmVlbiBhcmVhIgorbXNnc3RyICIiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgU1dJVENIVlRfTkVYVCBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6NTg1Cittc2dpZCAic3dpdGNoIHRvIHRoZSBuZXh0IHZpcnR1YWwgdGVybWluYWwiCittc2dzdHIgIiIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBHVUlfQVJFQV9QUkVWIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDoxMTI2Cittc2dpZCAic3dpdGNoIHRvIHRoZSBwcmV2aW91cyBzY3JlZW4gYXJlYSIKK21zZ3N0ciAiIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIFNXSVRDSFZUX1BSRVYgY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjU3OAorbXNnaWQgInN3aXRjaCB0byB0aGUgcHJldmlvdXMgdmlydHVhbCB0ZXJtaW5hbCIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9wZ21wcml2c19saW51eC5jOjE5OTYKK21zZ2lkICJzd2l0Y2hlZCB0byB1bnByaXZpbGVnZWQgdXNlciIKK21zZ3N0ciAiIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIEtFWV9UQUIgY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjE1MzUKK21zZ2lkICJ0YWIga2V5IgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL2NvbmZpZy5jOjY0NworIzogUHJvZ3JhbXMvY29uZmlnLmM6NjU0Cittc2dpZCAidGV4dCIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9icmx0dHktcHR5LmM6ODcKK21zZ2lkICJ0aGUgZGlyZWN0b3J5IHRvIGNoYW5nZSB0byIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9icmx0dHktcHR5LmM6OTQKK21zZ2lkICJ0aGUgaG9tZSBkaXJlY3RvcnkgdG8gdXNlIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL21zZ3Rlc3QuYzo0NQorbXNnaWQgInRoZSBsb2NhbGUgZGlyZWN0b3J5IGNvbnRhaW5pbmcgdGhlIHRyYW5zbGF0aW9ucyIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9tc2d0ZXN0LmM6NTIKK21zZ2lkICJ0aGUgbG9jYWxlIGluIHdoaWNoIHRvIGxvb2sgdXAgYSB0cmFuc2xhdGlvbiIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9tc2d0ZXN0LmM6NTkKK21zZ2lkICJ0aGUgbmFtZSBvZiB0aGUgZG9tYWluIGNvbnRhaW5pbmcgdGhlIHRyYW5zbGF0aW9ucyIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9icmx0dHktcHR5LmM6ODAKK21zZ2lkICJ0aGUgbmFtZSBvciBudW1iZXIgb2YgdGhlIGdyb3VwIHRvIHJ1biBhcyIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9icmx0dHktcHR5LmM6NzMKK21zZ2lkICJ0aGUgbmFtZSBvciBudW1iZXIgb2YgdGhlIHVzZXIgdG8gcnVuIGFzIgorbXNnc3RyICIiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgUEFTU0RPVFMgY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjE0NzkKK21zZ2lkICJ0eXBlIGJyYWlsbGUgZG90cyIKK21zZ3N0ciAiIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIFBBU1NDSEFSIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDoxNDcwCittc2dpZCAidHlwZSB1bmljb2RlIGNoYXJhY3RlciIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy94YnJsYXBpLmM6MTAwMgorbXNnaWQgInVuZXhwZWN0ZWQgYmxvY2sgdHlwZSIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy94YnJsYXBpLmM6ODkyCittc2dpZCAidW5leHBlY3RlZCBjbWQiCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvY21kX3F1ZXVlLmM6MTU4Cittc2dpZCAidW5oYW5kbGVkIGNvbW1hbmQiCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvY21kLmM6MTk5Cittc2dpZCAidW5rbm93biBjb21tYW5kIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL2NtZGxpbmUuYzo5NjAKK21zZ2lkICJ1bmtub3duIGNvbmZpZ3VyYXRpb24gZGlyZWN0aXZlIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL2NvbmZpZy5jOjc4NgorbXNnaWQgInVua25vd24gbG9nIGxldmVsIG9yIGNhdGVnb3J5IgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL2NtZGxpbmUuYzo2NTcKK21zZ2lkICJ1bmtub3duIG9wdGlvbiIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9jb25maWcuYzozMjgKK21zZ2lkICJ1bmtub3duIHNjcmVlbiBjb250ZW50IHF1YWxpdHkiCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvcGFyc2UuYzo1NjIKK21zZ2lkICJ1bnN1cHBvcnRlZCBwYXJhbWV0ZXIiCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvc3BrLmM6MTgwCittc2dpZCAidm9sdW1lIgorbXNnc3RyICIiCisKKyMuIExSR0IKKyM6IFByb2dyYW1zL2NtZF91dGlscy5jOjE2NgorbXNnaWQgIndoaXRlIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL3BnbXByaXZzX2xpbnV4LmM6MTg1NgorbXNnaWQgIndvcmtpbmcgZGlyZWN0b3J5IGNoYW5nZWQiCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvYnJsdHR5LXB0eS5jOjYwCittc2dpZCAid3JpdGUgZHJpdmVyIGRpcmVjdGl2ZXMgdG8gc3RhbmRhcmQgZXJyb3IiCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvbXNndGVzdC5jOjY1Cittc2dpZCAid3JpdGUgdGhlIHRyYW5zbGF0aW9ucyB1c2luZyBVVEYtOCIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy94YnJsYXBpLmM6OTM5CisjLCBjLWZvcm1hdAorbXNnaWQgInhicmxhcGk6IENvdWxkbid0IGZpbmQgYSBrZXljb2RlIHRvIHJlbWFwIGZvciBzaW11bGF0aW5nIHVuYm91bmQga2V5c3ltICUwOFhcbiIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy94YnJsYXBpLmM6OTI2CisjLCBjLWZvcm1hdAorbXNnaWQgInhicmxhcGk6IENvdWxkbid0IGZpbmQgbW9kaWZpZXJzIHRvIGFwcGx5IHRvICVkIGZvciBnZXR0aW5nIGtleXN5bSAlMDhYXG4iCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMveGJybGFwaS5jOjkwMgorIywgYy1mb3JtYXQKK21zZ2lkICJ4YnJsYXBpOiBDb3VsZG4ndCB0cmFuc2xhdGUga2V5c3ltICUwOFggdG8ga2V5Y29kZS5cbiIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy94YnJsYXBpLmM6NDM5CisjLCBjLWZvcm1hdAorbXNnaWQgInhicmxhcGk6IFggRXJyb3IgJWQsICVzIG9uIGRpc3BsYXkgJXNcbiIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy94YnJsYXBpLmM6NDgxCisjLCBjLWZvcm1hdAorbXNnaWQgInhicmxhcGk6IGJhZCBmb3JtYXQgZm9yIFZUIG51bWJlclxuIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL3hicmxhcGkuYzo0ODQKKyMsIGMtZm9ybWF0Cittc2dpZCAieGJybGFwaTogYmFkIHR5cGUgZm9yIFZUIG51bWJlclxuIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL3hicmxhcGkuYzo0NjMKKyMsIGMtZm9ybWF0Cittc2dpZCAieGJybGFwaTogY2Fubm90IGdldCByb290IHdpbmRvdyBYRnJlZTg2X1ZUIHByb3BlcnR5XG4iCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMveGJybGFwaS5jOjMxNworIywgYy1mb3JtYXQKK21zZ2lkICJ4YnJsYXBpOiBjYW5ub3Qgd3JpdGUgd2luZG93IG5hbWUgJXNcbiIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy94YnJsYXBpLmM6NzkyCisjLCBjLWZvcm1hdAorbXNnaWQgInhicmxhcGk6IGRpZG4ndCBncmFiIHBhcmVudCBvZiAlIzAxMGx4XG4iCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMveGJybGFwaS5jOjgxMAorIywgYy1mb3JtYXQKK21zZ2lkICJ4YnJsYXBpOiBkaWRuJ3QgZ3JhYiB3aW5kb3cgJSMwMTBseFxuIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL3hicmxhcGkuYzo2MDgKKyMsIGMtZm9ybWF0Cittc2dpZCAieGJybGFwaTogZGlkbid0IGdyYWIgd2luZG93ICUjMDEwbHggYnV0IGdvdCBmb2N1c1xuIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL3hicmxhcGkuYzo0NzIKKyMsIGMtZm9ybWF0Cittc2dpZCAieGJybGFwaTogbW9yZSB0aGFuIG9uZSBpdGVtIGZvciBWVCBudW1iZXJcbiIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy94YnJsYXBpLmM6NDU3CisjLCBjLWZvcm1hdAorbXNnaWQgInhicmxhcGk6IG5vIFhGcmVlODZfVlQgYXRvbVxuIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL3hicmxhcGkuYzo0NjgKKyMsIGMtZm9ybWF0Cittc2dpZCAieGJybGFwaTogbm8gaXRlbXMgZm9yIFZUIG51bWJlclxuIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL3hicmxhcGkuYzo0NDAKKyMsIGMtZm9ybWF0Cittc2dpZCAieGJybGFwaTogcmVzb3VyY2UgJSMwMTBseCwgcmVxICV1OiV1XG4iCittc2dzdHIgIiIKKworIy4gU2VydmVyIHJlZnVzZWQgb3VyIFhrYiByZW1hcHBpbmcgcmVxdWVzdCwgcHJvYmFibHkgdGhlIGJ1Z2d5IHZlcnNpb24gMjEsIGlnbm9yZSBlcnJvcgorIzogUHJvZ3JhbXMveGJybGFwaS5jOjQzMworIywgYy1mb3JtYXQKK21zZ2lkICJ4YnJsYXBpOiBzZXJ2ZXIgcmVmdXNlZCBvdXIgbWFwcGluZyByZXF1ZXN0LCBjb3VsZCBub3Qgc3ludGhlc2l6ZSBrZXlcbiIKK21zZ3N0ciAiIgorCisjLiAic2hvdWxkbid0IGhhcHBlbiIgZXZlbnRzCisjOiBQcm9ncmFtcy94YnJsYXBpLmM6ODM5CisjLCBjLWZvcm1hdAorbXNnaWQgInhicmxhcGk6IHVuaGFuZGxlZCBldmVudCB0eXBlOiAlZFxuIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL3hicmxhcGkuYzo4MTgKKyMsIGMtZm9ybWF0Cittc2dpZCAieGJybGFwaTogd2luZG93ICUjMDEwbHggY2hhbmdlZCB0byBOVUxMIG5hbWVcbiIKK21zZ3N0ciAiIgorCisjLiBMUkcKKyM6IFByb2dyYW1zL2NtZF91dGlscy5jOjE2NQorbXNnaWQgInllbGxvdyIKK21zZ3N0ciAiIgpkaWZmIC0tZ2l0IGEvTWVzc2FnZXMvZGUucG8gYi9NZXNzYWdlcy9kZS5wbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jODA4YzE2Ci0tLSAvZGV2L251bGwKKysrIGIvTWVzc2FnZXMvZGUucG8KQEAgLTAsMCArMSw0MDgzIEBACisjIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisjICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorIworIyBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisjCisjIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisjCisjIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyMgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorIyBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyMKKyMgV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworIworIyBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyMKK21zZ2lkICIiCittc2dzdHIgIiIKKyJQcm9qZWN0LUlkLVZlcnNpb246IGJybHR0eSA0LjVcbiIKKyJSZXBvcnQtTXNnaWQtQnVncy1UbzogQlJMVFRZQGJybHR0eS5hcHBcbiIKKyJQT1QtQ3JlYXRpb24tRGF0ZTogMjAyMS0wOS0wNyAxNToyOSswMjAwXG4iCisiUE8tUmV2aXNpb24tRGF0ZTogMjAyMS0wOS0xMyAxMjo0MiswMjAwXG4iCisiTGFzdC1UcmFuc2xhdG9yOiBBbmdlbGEgRW5nZWwgPGFuZ2VsYS5lbmdlbEBnbXguYXQ+XG4iCisiTGFuZ3VhZ2UtVGVhbTogRnJpZW5kcyBvZiBCUkxUVFkgPEJSTFRUWUBicmx0dFkuYXBwPlxuIgorIkxhbmd1YWdlOiBkZVxuIgorIk1JTUUtVmVyc2lvbjogMS4wXG4iCisiQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PVVURi04XG4iCisiQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdFxuIgorIlBsdXJhbC1Gb3JtczogbnBsdXJhbHM9MjsgcGx1cmFsPShuICE9IDEpO1xuIgorCisjOiBQcm9ncmFtcy9icmx0dHkuYzoxNjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiXCIlc1wiIHN0YXJ0ZWQgYXMgXCIlc1wiXG4iCittc2dzdHIgIlwiJXNcIiBnZXN0YXJ0ZXQgYWxzIFwiJXNcIlxuIgorCisjLiB4Z2V0dGV4dDogVGhpcyBwaHJhc2UgZGVzY3JpYmVzIHRoZSBjb2xvdXIgb2YgYSBjaGFyYWN0ZXIgb24gdGhlIHNjcmVlbi4KKyMuIHhnZXR0ZXh0OiAlMSRzIGlzIHRoZSAoYWxyZWFkeSB0cmFuc2xhdGVkKSBmb3JlZ3JvdW5kIGNvbG91ci4KKyMuIHhnZXR0ZXh0OiAlMiRzIGlzIHRoZSAoYWxyZWFkeSB0cmFuc2xhdGVkKSBiYWNrZ3JvdW5kIGNvbG91ci4KKyM6IFByb2dyYW1zL2NtZF91dGlscy5jOjE2OQorIywgYy1mb3JtYXQKK21zZ2lkICIlMSRzIG9uICUyJHMiCittc2dzdHIgIiUxJHMgYXVmICUyJHMiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIGhvdyB0byBzYXkgd2hlbiB0aGUgdGltZSBpcyBleGFjdGx5IG9uIChpLmUuIHplcm8gbWludXRlcyBhZnRlcikgYW4gaG91ci4KKyMuIHhnZXR0ZXh0OiAoJXUgcmVwcmVzZW50cyB0aGUgbnVtYmVyIG9mIGhvdXJzKQorIzogUHJvZ3JhbXMvY21kX21pc2NlbGxhbmVvdXMuYzo4OQorIywgYy1mb3JtYXQKK21zZ2lkICIldSBvJ2Nsb2NrIgorbXNnaWRfcGx1cmFsICIldSBvJ2Nsb2NrIgorbXNnc3RyWzBdICIiCittc2dzdHJbMV0gIiIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgYSBudW1iZXIgKCV1KSBvZiBzZWNvbmRzICh0aW1lIHVuaXRzKS4KKyM6IFByb2dyYW1zL2NtZF9taXNjZWxsYW5lb3VzLmM6MTA3CisjLCBjLWZvcm1hdAorbXNnaWQgIiV1IHNlY29uZCIKK21zZ2lkX3BsdXJhbCAiJXUgc2Vjb25kcyIKK21zZ3N0clswXSAiJXUgU2VrdW5kZSIKK21zZ3N0clsxXSAiJXUgU2VrdW5kZW4iCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzo1NDMgUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjU0NAorIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjU0NiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6NTQ3CisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6NTUwIFByb2dyYW1zL21lbnVfcHJlZnMuYzo1NTEKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzo1NTIgUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjU1NAorIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjU1NSBQcm9ncmFtcy9tZW51X3ByZWZzLmM6NTYxCittc2dpZCAiMSBjZWxsIgorbXNnc3RyICIxIFplbGxlIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6OTAwCittc2dpZCAiMSBzZWNvbmQiCittc2dzdHIgIjEgU2VrdW5kZSIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjk2MgorbXNnaWQgIjEwIHNlY29uZHMiCittc2dzdHIgIjEwIFNla3VuZGVuIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6MTI3NworbXNnaWQgIjEyIEhvdXIiCittc2dzdHIgIjEyIFN0dW5kZW4iCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzo1NDIgUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjU0NQorIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjU0OCBQcm9ncmFtcy9tZW51X3ByZWZzLmM6NTQ5CisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6NTUzCittc2dpZCAiMiBjZWxscyIKK21zZ3N0ciAiMiBaZWxsZW4iCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzo5MDEKK21zZ2lkICIyIHNlY29uZHMiCittc2dzdHIgIjIgU2VrdW5kZW4iCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzo5NjMKK21zZ2lkICIyMCBzZWNvbmRzIgorbXNnc3RyICIyMCBTZWt1bmRlbiIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjEyNzYKK21zZ2lkICIyNCBIb3VyIgorbXNnc3RyICIyNCBTdHVuZGVuIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6ODk4Cittc2dpZCAiMjUwIG1pbGxpc2Vjb25kcyIKK21zZ3N0ciAiMjUwIE1pbGxpc2VrdW5kZW4iCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzo1NTcgUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjU1OAorIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjU1OSBQcm9ncmFtcy9tZW51X3ByZWZzLmM6NTYwCittc2dpZCAiMyBjZWxscyIKK21zZ3N0ciAiMyBaZWxsZW4iCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzo5NjQKK21zZ2lkICI0MCBzZWNvbmRzIgorbXNnc3RyICI0MCBTZWt1bmRlbiIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjk2MQorbXNnaWQgIjUgc2Vjb25kcyIKK21zZ3N0ciAiNSBTZWt1bmRlbiIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjg5OQorbXNnaWQgIjUwMCBtaWxsaXNlY29uZHMiCittc2dzdHIgIjUwMCBNaWxsaXNla3VuZGVuIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6NzMzCittc2dpZCAiNi1kb3QiCittc2dzdHIgIjYtUHVua3QtQnJhaWxsZSIKKworIzogUHJvZ3JhbXMvYnJsdHR5LXR0Yi5jOjE3OQorbXNnaWQgIjgtYml0IGNoYXJhY3RlciBzZXQgdG8gdXNlLiIKK21zZ3N0ciAiOC1iaXQgWmVpY2hlbnNhdHogZGVyIHZlcndlbmRldCB3ZXJkZW4gc29sbC4iCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzo3MzIKK21zZ2lkICI4LWRvdCIKK21zZ3N0ciAiOC1QdW5rdC1CcmFpbGxlIgorCisjOiBQcm9ncmFtcy9zY3JfbWVudS5jOjEwNAorbXNnaWQgIjxvZmY+IgorbXNnc3RyICI8YXVzPiIKKworIzogUHJvZ3JhbXMvY29uZmlnLmM6MTU2NgorbXNnaWQgIkFQSSBQYXJhbWV0ZXIiCittc2dzdHIgIkFQSSBQYXJhbWV0ZXIiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgUEFTU0FUIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDoxNDcxCittc2dpZCAiQVQgKHNldCAyKSBrZXlib2FyZCBzY2FuIGNvZGUiCittc2dzdHIgIkFUIChzZXQgMikgVGFzdGF0dXItU2NhbmNvZGUiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBuYW1lIG9mIE1JREkgbXVzaWNhbCBpbnN0cnVtZW50ICMyMiAoaW4gdGhlIE9yZ2FuIGdyb3VwKS4KKyM6IFByb2dyYW1zL21pZGkuYzoxNDUKK21zZ2lkICJBY2NvcmRpb24iCittc2dzdHIgIkFra29yZGVvbiIKKworIy4gQmFzcworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIG5hbWUgb2YgTUlESSBtdXNpY2FsIGluc3RydW1lbnQgIzMzIChpbiB0aGUgQmFzcyBncm91cCkuCisjOiBQcm9ncmFtcy9taWRpLmM6MTgwCittc2dpZCAiQWNvdXN0aWMgQmFzcyIKK21zZ3N0ciAiQWt1c3Rpc2NoZXIgQmFzcyIKKworIy4gUGlhbm8KKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBuYW1lIG9mIE1JREkgbXVzaWNhbCBpbnN0cnVtZW50ICMxIChpbiB0aGUgUGlhbm8gZ3JvdXApLgorIzogUHJvZ3JhbXMvbWlkaS5jOjgwCittc2dpZCAiQWNvdXN0aWMgR3JhbmQgUGlhbm8iCittc2dzdHIgIkFrdXN0aXNjaGVyIEtvbnplcnRmbMO8Z2VsIgorCisjLiBHdWl0YXIKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBuYW1lIG9mIE1JREkgbXVzaWNhbCBpbnN0cnVtZW50ICMyNSAoaW4gdGhlIEd1aXRhciBncm91cCkuCisjOiBQcm9ncmFtcy9taWRpLmM6MTU1Cittc2dpZCAiQWNvdXN0aWMgR3VpdGFyIChueWxvbikiCittc2dzdHIgIkFrdXN0aXNjaGUgR2l0YXJyZSAoTnlsb25zYWl0ZW4pIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgbmFtZSBvZiBNSURJIG11c2ljYWwgaW5zdHJ1bWVudCAjMjYgKGluIHRoZSBHdWl0YXIgZ3JvdXApLgorIzogUHJvZ3JhbXMvbWlkaS5jOjE1OAorbXNnaWQgIkFjb3VzdGljIEd1aXRhciAoc3RlZWwpIgorbXNnc3RyICJBa3VzdGlzY2hlIEdpdGFycmUgKFN0YWhsc2FpdGVuKSIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjEzMDMKK21zZ2lkICJBZnRlciBUaW1lIgorbXNnc3RyICJOYWNoIFVocnplaXQiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBuYW1lIG9mIE1JREkgbXVzaWNhbCBpbnN0cnVtZW50ICMxMTQgKGluIHRoZSBQZXJjdXNzaXZlIGdyb3VwKS4KKyM6IFByb2dyYW1zL21pZGkuYzo0MzQKK21zZ2lkICJBZ29nbyIKK21zZ3N0ciAiQWdvZ28iCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzoxNDkxCittc2dpZCAiQWxlcnQiCittc2dzdHIgIkFsYXJtIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6MTEwNAorbXNnaWQgIkFsZXJ0IERvdHMiCittc2dzdHIgIldhcm5wdW5rdGUiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzoxMTA5Cittc2dpZCAiQWxlcnQgTWVzc2FnZXMiCittc2dzdHIgIldhcm5tZWxkdW5nZW4iCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzoxMDQ5Cittc2dpZCAiQWxlcnQgVHVuZXMiCittc2dzdHIgIldhcm50w7ZuZSIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjg2NCBQcm9ncmFtcy9tZW51X3ByZWZzLmM6MTE5NAorbXNnaWQgIkFsbCIKK21zZ3N0ciAiQWxsZSIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjU1NQorbXNnaWQgIkFscGhhYmV0aWMgQ3Vyc29yIENvb3JkaW5hdGVzIgorbXNnc3RyICJBbHBoYWJldGlzY2hlIEN1cnNvcmtvb3JkaW5hdGVuIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6NTU0Cittc2dpZCAiQWxwaGFiZXRpYyBXaW5kb3cgQ29vcmRpbmF0ZXMiCittc2dzdHIgIkFscGhhYmV0aXNjaGUgQnJhaWxsZXplaWxlbmtvb3JkaW5hdGVuIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgbmFtZSBvZiBNSURJIG11c2ljYWwgaW5zdHJ1bWVudCAjNjYgKGluIHRoZSBSZWVkIGdyb3VwKS4KKyM6IFByb2dyYW1zL21pZGkuYzoyODMKK21zZ2lkICJBbHRvIFNheG9waG9uZSIKK21zZ3N0ciAiQWx0IFNheG9mb24iCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBuYW1lIG9mIE1JREkgbXVzaWNhbCBpbnN0cnVtZW50ICMxMjcgKGluIHRoZSBTb3VuZCBFZmZlY3RzIGdyb3VwKS4KKyM6IFByb2dyYW1zL21pZGkuYzo0NzQKK21zZ2lkICJBcHBsYXVzZSIKK21zZ3N0ciAiQXBwbGF1cyIKKworIzogUHJvZ3JhbXMvbG9nLmM6MTE4Cittc2dpZCAiQXN5bmMgRXZlbnRzIgorbXNnc3RyICJBc3luY2hyb25lIEVyZWlnbmlzc2UiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzo4MDcKK21zZ2lkICJBdHRyaWJ1dGVzIEJsaW5rIFBlcmlvZCIKK21zZ3N0ciAiQmxpbmtkYXVlciBmw7xyIEF0cmlidXRlIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6ODE1Cittc2dpZCAiQXR0cmlidXRlcyBQZXJjZW50IFZpc2libGUiCittc2dzdHIgIkFuemVpZ2VkYXVlciB2b24gQXR0cmlidXRlbiBpbiBQcm96ZW50IgorCisjOiBQcm9ncmFtcy9jb25maWcuYzoxMDU5IFByb2dyYW1zL21lbnVfcHJlZnMuYzoxNDA2Cittc2dpZCAiQXR0cmlidXRlcyBUYWJsZSIKK21zZ3N0ciAiQXR0cmlidXR0YWJlbGxlIgorCisjOiBQcm9ncmFtcy9hbGVydC5jOjE2OAorbXNnaWQgIkF1dG9yZWxlYXNlIgorbXNnc3RyICJBdXRvbWF0aXNjaGUgRWlucmFzdGJlZW5kdW5nIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6OTY3Cittc2dpZCAiQXV0b3JlbGVhc2UgVGltZSIKK21zZ3N0ciAiWmVpdCBiaXMgenVyIGF1dG9tYXRpc2NoZW4gRWlucmFzdGJlZW5kdW5nIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6OTg0Cittc2dpZCAiQXV0b3JlcGVhdCBFbmFibGVkIgorbXNnc3RyICJBdXRvbWF0aXNjaGUgV2llZGRlcmhvbHVuZyBha3RpdmllcnQiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzo5OTAKK21zZ2lkICJBdXRvcmVwZWF0IEludGVydmFsIgorbXNnc3RyICJXaWVkZXJob2x1bmdzaW50ZXJ2YWxsIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6OTk3Cittc2dpZCAiQXV0b3JlcGVhdCBQYW5uaW5nIgorbXNnc3RyICJBdXRvbWF0aXNjaGUgV2llZGVyaG9sdW5nIGbDvHIgU2VpdHdlcnRzYmV3ZWd1bmdlbiIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjExMTkKK21zZ2lkICJBdXRvc3BlYWsiCittc2dzdHIgIkF1dG9tYXRpc2NoZXMgU3ByZWNoZW4iCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzoxMTE2Cittc2dpZCAiQXV0b3NwZWFrIE9wdGlvbnMiCittc2dzdHIgIk9wdGlvbmVuIGbDvHIgYXV0b21hdGlzY2hlcyBTcHJlY2hlbiIKKworIzogUHJvZ3JhbXMvY29uZmlnLmM6MzM1Cittc2dpZCAiQXV0b3NwZWFrIFRocmVzaG9sZCIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9jb25maWcuYzoyMDEyCittc2dpZCAiQlJMVFRZIHN0b3BwZWQiCittc2dzdHIgIkJSTFRUWSBnZXN0b3BwdCIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIG5hbWUgb2YgTUlESSBtdXNpY2FsIGluc3RydW1lbnQgIzExMCAoaW4gdGhlIEV0aG5pYyBncm91cCkuCisjOiBQcm9ncmFtcy9taWRpLmM6NDIxCittc2dpZCAiQmFnIFBpcGUiCittc2dzdHIgIlNhY2twZmVpZmUiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBuYW1lIG9mIE1JREkgbXVzaWNhbCBpbnN0cnVtZW50ICMxMDYgKGluIHRoZSBFdGhuaWMgZ3JvdXApLgorIzogUHJvZ3JhbXMvbWlkaS5jOjQwOQorbXNnaWQgIkJhbmpvIgorbXNnc3RyICJCYW5qbyIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIG5hbWUgb2YgTUlESSBtdXNpY2FsIGluc3RydW1lbnQgIzY4IChpbiB0aGUgUmVlZCBncm91cCkuCisjOiBQcm9ncmFtcy9taWRpLmM6Mjg5Cittc2dpZCAiQmFyaXRvbmUgU2F4b3Bob25lIgorbXNnc3RyICIiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBuYW1lIG9mIE1JREkgbXVzaWNhbCBpbnN0cnVtZW50IGdyb3VwICM1LgorIzogUHJvZ3JhbXMvbWlkaS5jOjM3Cittc2dpZCAiQmFzcyIKK21zZ3N0ciAiQmFzcyIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIG5hbWUgb2YgTUlESSBtdXNpY2FsIGluc3RydW1lbnQgIzcxIChpbiB0aGUgUmVlZCBncm91cCkuCisjOiBQcm9ncmFtcy9taWRpLmM6Mjk4Cittc2dpZCAiQmFzc29vbiIKK21zZ3N0ciAiRmFnb3R0IgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6MTA1NgorbXNnaWQgIkJlZXBlciIKK21zZ3N0ciAiUEMtUGllcHNlciIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjEzMDIKK21zZ2lkICJCZWZvcmUgVGltZSIKK21zZ3N0ciAiVm9yIFVocnplaXQiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBuYW1lIG9mIE1JREkgbXVzaWNhbCBpbnN0cnVtZW50ICMxMjQgKGluIHRoZSBTb3VuZCBFZmZlY3RzIGdyb3VwKS4KKyM6IFByb2dyYW1zL21pZGkuYzo0NjUKK21zZ2lkICJCaXJkIFR3ZWV0IgorbXNnc3RyICJWb2dlbHp3aXRzY2hlcm4iCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzo4MDEKK21zZ2lkICJCbGlua2luZyBBdHRyaWJ1dGVzIgorbXNnc3RyICJCbGlua2VuZGUgQXR0cmlidXRlIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6ODIzCittc2dpZCAiQmxpbmtpbmcgQ2FwaXRhbHMiCittc2dzdHIgIkJsaW5rZW5kZSBHcm/Dn2J1Y2hzdGFiZW4iCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzo3NzQKK21zZ2lkICJCbGlua2luZyBTY3JlZW4gQ3Vyc29yIgorbXNnc3RyICJCbGlua2VuZGVyIEJpbGRzY2hpcm1jdXJzb3IiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzoxMjQ4Cittc2dpZCAiQmxpbmtpbmcgU3BlZWNoIEN1cnNvciIKK21zZ3N0ciAiQmxpbmtlbmRlciBTcHJhY2hjdXJzb3IiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzo2NjUgUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjEzNjIKK21zZ2lkICJCbG9jayIKK21zZ3N0ciAiQmxvY2siCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBuYW1lIG9mIE1JREkgbXVzaWNhbCBpbnN0cnVtZW50ICM3NyAoaW4gdGhlIFBpcGUgZ3JvdXApLgorIzogUHJvZ3JhbXMvbWlkaS5jOjMxNworbXNnaWQgIkJsb3duIEJvdHRsZSIKK21zZ3N0ciAiR2VibGFzZW5lIEZsYXNjaGUiCisKKyM6IFByb2dyYW1zL2xvZy5jOjE0MgorbXNnaWQgIkJsdWV0b290aCBJL08iCittc2dzdHIgIkJsdWV0b290aCBFL0EiCisKKyM6IFByb2dyYW1zL2NvbmZpZy5jOjE3ODcKK21zZ2lkICJCcmFpbGxlIERldmljZSIKK21zZ3N0ciAiQnJhaWxsZWdlcsOkdCIKKworIzogUHJvZ3JhbXMvY29uZmlnLmM6MTc4MworbXNnaWQgIkJyYWlsbGUgRHJpdmVyIgorbXNnc3RyICJCcmFpbGxldHJlaWJlciIKKworIzogUHJvZ3JhbXMvbG9nLmM6MTQ4Cittc2dpZCAiQnJhaWxsZSBEcml2ZXIgRXZlbnRzIgorbXNnc3RyICJCcmFpbGxldHJlaWJlcmVyZWlnbmlzc2UiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzo3NTIKK21zZ2lkICJCcmFpbGxlIEZpcm1uZXNzIgorbXNnc3RyICJQdW5rdHN0w6Rya2UiCisKKyM6IFByb2dyYW1zL2xvZy5jOjgyCittc2dpZCAiQnJhaWxsZSBLZXkgRXZlbnRzIgorbXNnc3RyICJUYXN0ZW5lcmVpZ25pc3NlIGRlciBCcmFpbGxlemVpbGUiCisKKyM6IFByb2dyYW1zL2NvbmZpZy5jOjE3ODYKK21zZ2lkICJCcmFpbGxlIFBhcmFtZXRlciIKK21zZ3N0ciAiQnJhaWxsZS1QYXJhbWV0ZXIiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzo2OTgKK21zZ2lkICJCcmFpbGxlIFByZXNlbnRhdGlvbiIKK21zZ3N0ciAiQnJhaWxsZWRhcnN0ZWxsdW5nIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6MTM4OQorbXNnaWQgIkJyYWlsbGUgVGFibGVzIgorbXNnc3RyICJCcmFpbGxldGFiZWxsZW4iCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzo5MzIKK21zZ2lkICJCcmFpbGxlIFR5cGluZyIKK21zZ3N0ciAiQnJhaWxsZS1FaW5nYWJlIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6NzA2Cittc2dpZCAiQnJhaWxsZSBWYXJpYW50IgorbXNnc3RyICJCcmFpbGxldmFyaWFudGUiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzo4ODUKK21zZ2lkICJCcmFpbGxlIFdpbmRvdyBPdmVybGFwIgorbXNnc3RyICJCcmFpbGxlemVpbGVuw7xiZXJsYXBwdW5nIgorCisjOiBQcm9ncmFtcy9jb25maWcuYzo1NTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiQnJhaWxsZSBkcml2ZXIgY29kZSAoJXMsICVzLCBvciBvbmUgb2YgeyVzfSkuIgorbXNnc3RyICJCcmFpbGxldHJlaWJlci1Db2RlOiAoJXMsICVzLCBvZGVyIGVpbmVyIHZvbiB7JXN9KS4iCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBuYW1lIG9mIE1JREkgbXVzaWNhbCBpbnN0cnVtZW50IGdyb3VwICM4LgorIzogUHJvZ3JhbXMvbWlkaS5jOjQ2Cittc2dpZCAiQnJhc3MiCittc2dzdHIgIkJsZWNoYmxhc2luc3RydW1lbnQiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBuYW1lIG9mIE1JREkgbXVzaWNhbCBpbnN0cnVtZW50ICM2MiAoaW4gdGhlIEJyYXNzIGdyb3VwKS4KKyM6IFByb2dyYW1zL21pZGkuYzoyNzAKK21zZ2lkICJCcmFzcyBTZWN0aW9uIgorbXNnc3RyICJCbGVjaGJsw6RzZXIgQWJ0ZWlsdW5nIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgbmFtZSBvZiBNSURJIG11c2ljYWwgaW5zdHJ1bWVudCAjMTIyIChpbiB0aGUgU291bmQgRWZmZWN0cyBncm91cCkuCisjOiBQcm9ncmFtcy9taWRpLmM6NDU5Cittc2dpZCAiQnJlYXRoIE5vaXNlIgorbXNnc3RyICJBdGVtZ2Vyw6R1c2NoIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgbmFtZSBvZiBNSURJIG11c2ljYWwgaW5zdHJ1bWVudCAjMiAoaW4gdGhlIFBpYW5vIGdyb3VwKS4KKyM6IFByb2dyYW1zL21pZGkuYzo4MworbXNnaWQgIkJyaWdodCBBY291c3RpYyBQaWFubyIKK21zZ3N0ciAiQWt1c3Rpc2NoZXMgaGVsbGVzIEtsYXZpZXIiCisKKyM6IFByb2dyYW1zL3hicmxhcGkuYzo5MworbXNnaWQgIkJybEFQSSBhdXRob3JpemF0aW9uL2F1dGhlbnRpY2F0aW9uIHNjaGVtZXMiCittc2dzdHIgIkJybEFQSSBBdXRob3Jpc2llcnVuZ3MtL0JlcmVjaHRpZ3VuZ3MtU2NoZW1lbiIKKworIzogUHJvZ3JhbXMveGJybGFwaS5jOjg2Cittc2dpZCAiQnJsQVBJIGhvc3QgYW5kL29yIHBvcnQgdG8gY29ubmVjdCB0byIKK21zZ3N0ciAiQnJsQVBJIEhvc3QgdW5kL29kZXIgUG9ydCBtaXQgZGVtIHZlcmJ1bmRlbiB3ZXJkZW4gc29sbCIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjE0MjQKK21zZ2lkICJCdWlsZCBJbmZvcm1hdGlvbiIKK21zZ3N0ciAiQnVpbGQgSW5mb3JtYXRpb25lbiIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjcyNQorbXNnaWQgIkNhcGl0YWxpemF0aW9uIE1vZGUiCittc2dzdHIgIkdyb8OfYnVjaHN0YWJlbm1vZHVzIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6ODI4Cittc2dpZCAiQ2FwaXRhbHMgQmxpbmsgUGVyaW9kIgorbXNnc3RyICJCbGlua2RhdWVyIGJlaSBHcm/Dn2J1Y2hzdGFiZW4iCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzo4MzYKK21zZ2lkICJDYXBpdGFscyBQZXJjZW50IFZpc2libGUiCittc2dzdHIgIkFuemVpZ2VkYXVlciB2b24gR3Jvw59idWNoc3RhYmVuIGluIFByb3plbnQiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzoxNTE0Cittc2dpZCAiQ2F0ZWdvcnkgTG9nIExldmVsIgorbXNnc3RyICJQcm90b2tvbGxpZXJ1bmdzYXVzZsO8aHJsaWNoa2VpdCBmw7xyIEthdGVnb3JpZW4iCisKKyMuIENocm9tYXRpYyBQZXJjdXNzaW9uCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgbmFtZSBvZiBNSURJIG11c2ljYWwgaW5zdHJ1bWVudCAjOSAoaW4gdGhlIENocm9tYXRpYyBQZXJjdXNzaW9uIGdyb3VwKS4KKyM6IFByb2dyYW1zL21pZGkuYzoxMDUKK21zZ2lkICJDZWxlc3RhIgorbXNnc3RyICJDZWxlc3RhIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgbmFtZSBvZiBNSURJIG11c2ljYWwgaW5zdHJ1bWVudCAjNDMgKGluIHRoZSBTdHJpbmdzIGdyb3VwKS4KKyM6IFByb2dyYW1zL21pZGkuYzoyMTEKK21zZ2lkICJDZWxsbyIKK21zZ3N0ciAiQ2VsbG8iCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBuYW1lIG9mIE1JREkgbXVzaWNhbCBpbnN0cnVtZW50ICM1MyAoaW4gdGhlIEVuc2VtYmxlIGdyb3VwKS4KKyM6IFByb2dyYW1zL21pZGkuYzoyNDIKK21zZ2lkICJDaG9pciBBYWhzIgorbXNnc3RyICJDaG9yIChBYWFhKSIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIG5hbWUgb2YgTUlESSBtdXNpY2FsIGluc3RydW1lbnQgZ3JvdXAgIzIuCisjOiBQcm9ncmFtcy9taWRpLmM6MjgKK21zZ2lkICJDaHJvbWF0aWMgUGVyY3Vzc2lvbiIKK21zZ3N0ciAiQ2hyb21hdGlzY2hlIFBlcmt1c3Npb24iCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBuYW1lIG9mIE1JREkgbXVzaWNhbCBpbnN0cnVtZW50ICMyMCAoaW4gdGhlIE9yZ2FuIGdyb3VwKS4KKyM6IFByb2dyYW1zL21pZGkuYzoxMzkKK21zZ2lkICJDaHVyY2ggT3JnYW4iCittc2dzdHIgIktpcmNoZW5vcmdlbCIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIG5hbWUgb2YgTUlESSBtdXNpY2FsIGluc3RydW1lbnQgIzcyIChpbiB0aGUgUmVlZCBncm91cCkuCisjOiBQcm9ncmFtcy9taWRpLmM6MzAxCittc2dpZCAiQ2xhcmluZXQiCittc2dzdHIgIktsYXJpbmV0dGUiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBuYW1lIG9mIE1JREkgbXVzaWNhbCBpbnN0cnVtZW50ICM4IChpbiB0aGUgUGlhbm8gZ3JvdXApLgorIzogUHJvZ3JhbXMvbWlkaS5jOjEwMQorbXNnaWQgIkNsYXZpbmV0IgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL21lbnUuYzo4OTQKK21zZ2lkICJDbG9zZSIKK21zZ3N0ciAiU2NobGllw59lbiIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjEyODYKK21zZ2lkICJDb2xvbiIKK21zZ3N0ciAiRG9wcGVscHVua3QiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzo3MDIKK21zZ2lkICJDb21wdXRlciBCcmFpbGxlIgorbXNnc3RyICJDb21wdXRlcmJyYWlsbGUiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzo3MzYKK21zZ2lkICJDb21wdXRlciBCcmFpbGxlIENlbGwgVHlwZSIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6MTQ0OAorbXNnaWQgIkNvbmZpZ3VyYXRpb24gRGlyZWN0b3J5IgorbXNnc3RyICJLb25maWd1cmF0aW9uc3ZlcnplaWNobmlzIgorCisjOiBQcm9ncmFtcy9jb25maWcuYzoyOTU1IFByb2dyYW1zL21lbnVfcHJlZnMuYzoxNDUzCittc2dpZCAiQ29uZmlndXJhdGlvbiBGaWxlIgorbXNnc3RyICJLb25maWd1cmF0aW9uc2RhdGVpIgorCisjOiBQcm9ncmFtcy9hbGVydC5jOjE2MworbXNnaWQgIkNvbnNvbGUgQmVsbCIKK21zZ3N0ciAiS29uc29sZW5nbMO2Y2tjaGVuIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6MTAzNQorbXNnaWQgIkNvbnNvbGUgQmVsbCBBbGVydCIKK21zZ3N0ciAiS29uc29sZW4tVG9uZ2VuZXJhdG9yIEhpbndlaXMiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBuYW1lIG9mIE1JREkgbXVzaWNhbCBpbnN0cnVtZW50ICM0NCAoaW4gdGhlIFN0cmluZ3MgZ3JvdXApLgorIzogUHJvZ3JhbXMvbWlkaS5jOjIxNAorbXNnaWQgIkNvbnRyYWJhc3MiCittc2dzdHIgIktvbnRyYWJhc3MiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzo3MDMKK21zZ2lkICJDb250cmFjdGVkIEJyYWlsbGUiCittc2dzdHIgIkJyYWlsbGUtS3VyenNjaHJpZnQiCisKKyM6IFByb2dyYW1zL2NvbmZpZy5jOjEwMjcgUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjEzOTkKK21zZ2lkICJDb250cmFjdGlvbiBUYWJsZSIKK21zZ3N0ciAiS3VyenNjaHJpZnR0YWJlbGxlIgorCisjOiBQcm9ncmFtcy9icmx0dHktY3RiLmM6NjIKK21zZ2lkICJDb250cmFjdGlvbiB0YWJsZS4iCittc2dzdHIgIkt1cnpzY2hyaWZ0dGFiZWxsZS4iCisKKyM6IFByb2dyYW1zL2JybHR0eS1jdGIuYzo3NgorbXNnaWQgIkNvbnRyYWN0aW9uIHZlcmlmaWNhdGlvbiB0YWJsZS4iCittc2dzdHIgIkt1cnpzY2hyaWZ0dmVyaWZpa2F0aW9uc3RhYmVsbGUiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzoxNDkyCittc2dpZCAiQ3JpdGljYWwiCittc2dzdHIgIktyaXRpc2NoIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6NTQ2Cittc2dpZCAiQ3Vyc29yIENvbHVtbiIKK21zZ3N0ciAiQ3Vyc29yc3BhbHRlIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6NTQ1IFByb2dyYW1zL21lbnVfcHJlZnMuYzo1NTcKK21zZ2lkICJDdXJzb3IgQ29vcmRpbmF0ZXMiCittc2dzdHIgIkN1cnNvcmtvb3JkaW5hdGVuIgorCisjOiBQcm9ncmFtcy9sb2cuYzoxMDAKK21zZ2lkICJDdXJzb3IgUm91dGluZyIKK21zZ3N0ciAiQ3Vyc29ycm91dGluZyIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjU0NworbXNnaWQgIkN1cnNvciBSb3ciCittc2dzdHIgIkN1cnNvcnplaWxlIgorCisjOiBQcm9ncmFtcy9sb2cuYzo5NAorbXNnaWQgIkN1cnNvciBUcmFja2luZyIKK21zZ3N0ciAiQ3Vyc29ydmVyZm9sZ3VuZyIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjkwNAorbXNnaWQgIkN1cnNvciBUcmFja2luZyBEZWxheSIKK21zZ3N0ciAiWmVpdHZlcnrDtmdlcnVuZyBmw7xyIEN1cnNvcnZlcmZvbGd1bmciCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzo1NDggUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjU1OQorbXNnaWQgIkN1cnNvciBhbmQgV2luZG93IENvbHVtbiIKK21zZ3N0ciAiQ3Vyc29yLSB1bmQgQnJhaWxsZXplaWxlbnNwYWx0ZSIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjU0OSBQcm9ncmFtcy9tZW51X3ByZWZzLmM6NTYwCittc2dpZCAiQ3Vyc29yIGFuZCBXaW5kb3cgUm93IgorbXNnc3RyICJDdXJzb3ItIHVuZCBCcmFpbGxlemVpbGVuemVpbGUiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzoxMzI0Cittc2dpZCAiRGFzaCIKK21zZ3N0ciAiQmluZGVzdHJpY2giCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzoxMzE3Cittc2dpZCAiRGF0ZSBGb3JtYXQiCittc2dzdHIgIkRhdHVtc2Zvcm1hdCIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjEzMDYKK21zZ2lkICJEYXRlIFBvc2l0aW9uIgorbXNnc3RyICJEYXR1bXNwb3NpdGlvbiIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjEzMjkKK21zZ2lkICJEYXRlIFNlcGFyYXRvciIKK21zZ3N0ciAiRGF0dW0gVHJlbm56ZWljaGVuIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6MTMxNAorbXNnaWQgIkRheSBNb250aCBZZWFyIgorbXNnc3RyICJUYWcgTW9uYXQgSmFociIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjE0OTcKK21zZ2lkICJEZWJ1ZyIKK21zZ3N0ciAiRGVidWciCisKKyM6IFByb2dyYW1zL2NvbmZpZy5jOjU3MworbXNnaWQgIkRldmljZSBmb3IgYWNjZXNzaW5nIGJyYWlsbGUgZGlzcGxheS4iCittc2dzdHIgIlBmYWQgenVyIFNjaG5pdHRzdGVsbGUgZsO8ciBkZW4gWnVncmlmZiBhdWYgZGllIEJyYWlsbGV6ZWlsZS4iCisKKyM6IFByb2dyYW1zL2NvbmZpZy5jOjUzMgorbXNnaWQgIkRpc2FibGUgdGhlIGFwcGxpY2F0aW9uIHByb2dyYW1taW5nIGludGVyZmFjZS4iCittc2dzdHIgIkRlYWt0aXZpZXJlIGRpZSBQcm9ncmFtbWllcnNjaG5pdHRzdGVsbGUuIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgbmFtZSBvZiBNSURJIG11c2ljYWwgaW5zdHJ1bWVudCAjMzEgKGluIHRoZSBHdWl0YXIgZ3JvdXApLgorIzogUHJvZ3JhbXMvbWlkaS5jOjE3MworbXNnaWQgIkRpc3RvcnRpb24gR3VpdGFyIgorbXNnc3RyICJWZXJ6ZXJydGUgR2l0YXJyZSIKKworIzogUHJvZ3JhbXMvY29uZmlnLmM6Njc1Cittc2dpZCAiRG8gbm90IGF1dG9zcGVhayB3aGVuIGJyYWlsbGUgaXMgbm90IGJlaW5nIHVzZWQuIgorbXNnc3RyICJOaWNodCBhdXRvbWF0aXNjaCBzcHJlY2hlbiB3ZW5uIGtlaW5lIEJyYWlsbGV6ZWlsZSBpbiBWZXJ3ZW5kdW5nIGlzdC4iCisKKyM6IFByb2dyYW1zL3hicmxhcGkuYzoxMTIKK21zZ2lkICJEbyBub3Qgd3JpdGUgYW55IHRleHQgdG8gdGhlIGJyYWlsbGUgZGV2aWNlIgorbXNnc3RyICJTY2hyZWliZSBrZWluZW4gVGV4dCBhdWYgZGllIEJyYWlsbGV6ZWlsZSIKKworIzogUHJvZ3JhbXMvYnJsdHR5LXRydHh0LmM6NzkKK21zZ2lkICJEb24ndCBmYWxsIGJhY2sgdG8gdGhlIFVuaWNvZGUgYmFzZSBjaGFyYWN0ZXIuIgorbXNnc3RyICJOaWNodCBhdWYgZGFzIFVuaWNvZGUgQmFzaXN6ZWljaGVuIHp1csO8Y2tmYWxsZW4uIgorCisjOiBQcm9ncmFtcy9jb25maWcuYzo0NDMKK21zZ2lkICJEb24ndCBzd2l0Y2ggdG8gYW4gdW5wcml2aWxlZ2VkIHVzZXIgb3IgcmVsaW5xdWlzaCBhbnkgcHJpdmlsZWdlcyAoZ3JvdXAgbWVtYmVyc2hpcHMsIGNhcGFiaWxpdGllcywgZXRjKS4iCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvYWxlcnQuYzo1MgorbXNnaWQgIkRvbmUiCittc2dzdHIgIkZlcnRpZyIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjEyODcgUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjEzMjYKK21zZ2lkICJEb3QiCittc2dzdHIgIlB1bmt0IgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6OTQyCittc2dpZCAiRG90cyB2aWEgVW5pY29kZSBCcmFpbGxlIgorbXNnc3RyICJQdW5rdGUgdmlhIFVuaWNvZGUgQnJhaWxsZSIKKworIy4gT3JnYW4KKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBuYW1lIG9mIE1JREkgbXVzaWNhbCBpbnN0cnVtZW50ICMxNyAoaW4gdGhlIE9yZ2FuIGdyb3VwKS4KKyM6IFByb2dyYW1zL21pZGkuYzoxMzAKK21zZ2lkICJEcmF3YmFyIE9yZ2FuIgorbXNnc3RyICJPcmdlbCBtaXQgWnVnc3RhbmdlIgorCisjOiBQcm9ncmFtcy9jb25maWcuYzoyOTc2IFByb2dyYW1zL21lbnVfcHJlZnMuYzoxNDczCittc2dpZCAiRHJpdmVycyBEaXJlY3RvcnkiCittc2dzdHIgIlRyZWliZXItVmVyemVpY2huaXMiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBuYW1lIG9mIE1JREkgbXVzaWNhbCBpbnN0cnVtZW50ICMxNiAoaW4gdGhlIENocm9tYXRpYyBQZXJjdXNzaW9uIGdyb3VwKS4KKyM6IFByb2dyYW1zL21pZGkuYzoxMjYKK21zZ2lkICJEdWxjaW1lciIKK21zZ3N0ciAiRHVsY2ltZXIiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzo4NzkKKyMsIGZ1enp5Cittc2dpZCAiRWFnZXIgU2xpZGluZyBCcmFpbGxlIFdpbmRvdyIKK21zZ3N0ciAiRXJ3ZWl0ZXJ0ZSBCcmFpbGxlemVpbGVuYXVzc2Nobml0dHPDvGJlcmxhcHB1bmciCisKKyM6IFByb2dyYW1zL2JybHR0eS10dGIuYzoxNTgKK21zZ2lkICJFZGl0IHRhYmxlLiIKK21zZ3N0ciAiVGFiZWxsZSBlZGl0aWVyZW4uIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgbmFtZSBvZiBNSURJIG11c2ljYWwgaW5zdHJ1bWVudCAjMzQgKGluIHRoZSBCYXNzIGdyb3VwKS4KKyM6IFByb2dyYW1zL21pZGkuYzoxODMKK21zZ2lkICJFbGVjdHJpYyBCYXNzIChmaW5nZXIpIgorbXNnc3RyICJFbGVrdHJpc2NoZXIgQmFzcyAoRmluZ2VyKSIKKworIyBFbGVrdHJvbmlzY2hlciBCYXNzIChQaWNrKQorIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIG5hbWUgb2YgTUlESSBtdXNpY2FsIGluc3RydW1lbnQgIzM1IChpbiB0aGUgQmFzcyBncm91cCkuCisjOiBQcm9ncmFtcy9taWRpLmM6MTg2Cittc2dpZCAiRWxlY3RyaWMgQmFzcyAocGljaykiCittc2dzdHIgIkVsZWt0cm9uaXNjaGVyIEJhc3MgKFBpY2spIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgbmFtZSBvZiBNSURJIG11c2ljYWwgaW5zdHJ1bWVudCAjMyAoaW4gdGhlIFBpYW5vIGdyb3VwKS4KKyM6IFByb2dyYW1zL21pZGkuYzo4NgorbXNnaWQgIkVsZWN0cmljIEdyYW5kIFBpYW5vIgorbXNnc3RyICJFbGVrdHJpc2NoZXIgS29uemVydGZsw7xnZWwiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBuYW1lIG9mIE1JREkgbXVzaWNhbCBpbnN0cnVtZW50ICMyOCAoaW4gdGhlIEd1aXRhciBncm91cCkuCisjOiBQcm9ncmFtcy9taWRpLmM6MTY0Cittc2dpZCAiRWxlY3RyaWMgR3VpdGFyIChjbGVhbikiCittc2dzdHIgIkVsZWt0cmlzY2hlIEdpdGFycmUgKHJlaW4pIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgbmFtZSBvZiBNSURJIG11c2ljYWwgaW5zdHJ1bWVudCAjMjcgKGluIHRoZSBHdWl0YXIgZ3JvdXApLgorIzogUHJvZ3JhbXMvbWlkaS5jOjE2MQorbXNnaWQgIkVsZWN0cmljIEd1aXRhciAoamF6eikiCittc2dzdHIgIkVsZWt0cmlzY2hlIEdpdGFycmUgKEphenopIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgbmFtZSBvZiBNSURJIG11c2ljYWwgaW5zdHJ1bWVudCAjMjkgKGluIHRoZSBHdWl0YXIgZ3JvdXApLgorIzogUHJvZ3JhbXMvbWlkaS5jOjE2NworbXNnaWQgIkVsZWN0cmljIEd1aXRhciAobXV0ZWQpIgorbXNnc3RyICJFbGVrdHJpc2NoZSBHaXRhcnJlIChnZWTDpG1wZnQpIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgbmFtZSBvZiBNSURJIG11c2ljYWwgaW5zdHJ1bWVudCAjNSAoaW4gdGhlIFBpYW5vIGdyb3VwKS4KKyM6IFByb2dyYW1zL21pZGkuYzo5MgorbXNnaWQgIkVsZWN0cmljIFBpYW5vIDEiCittc2dzdHIgIkVsZWt0cmlzY2hlcyBLbGF2aWVyIDEiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBuYW1lIG9mIE1JREkgbXVzaWNhbCBpbnN0cnVtZW50ICM2IChpbiB0aGUgUGlhbm8gZ3JvdXApLgorIzogUHJvZ3JhbXMvbWlkaS5jOjk1Cittc2dpZCAiRWxlY3RyaWMgUGlhbm8gMiIKK21zZ3N0ciAiRWxla3RyaXNjaGVzIEtsYXZpZXIgMiIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjE0OTAKK21zZ2lkICJFbWVyZ2VuY3kiCittc2dzdHIgIk5vdGZhbGwiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzo1NDEKK21zZ2lkICJFbmQiCittc2dzdHIgIkVuZGUiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzo4NjUKK21zZ2lkICJFbmQgb2YgTGluZSIKK21zZ3N0ciAiWmVpbGVuZW5kZSIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIG5hbWUgb2YgTUlESSBtdXNpY2FsIGluc3RydW1lbnQgIzcwIChpbiB0aGUgUmVlZCBncm91cCkuCisjOiBQcm9ncmFtcy9taWRpLmM6Mjk1Cittc2dpZCAiRW5nbGlzaCBIb3JuIgorbXNnc3RyICJFbmdsaXNjaGVzIEhvcm4iCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzoxMjI5Cittc2dpZCAiRW5xdWV1ZSIKK21zZ3N0ciAiQW5ow6RuZ2VuIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgbmFtZSBvZiBNSURJIG11c2ljYWwgaW5zdHJ1bWVudCBncm91cCAjNy4KKyM6IFByb2dyYW1zL21pZGkuYzo0MworbXNnaWQgIkVuc2VtYmxlIgorbXNnc3RyICJFbnNlbWJsZSIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjE0OTMKK21zZ2lkICJFcnJvciIKK21zZ3N0ciAiRmVobGVyIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgbmFtZSBvZiBNSURJIG11c2ljYWwgaW5zdHJ1bWVudCBncm91cCAjMTQuCisjOiBQcm9ncmFtcy9taWRpLmM6NjgKK21zZ2lkICJFdGhuaWMgSW5zdHJ1bWVudHMiCittc2dzdHIgIkV0aG5pc2NoZSBJbnN0cnVtZW50ZSIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjEwMzIKK21zZ2lkICJFdmVudCBBbGVydHMiCittc2dzdHIgIldhcm51bmdlbiBiZWkgRXJlaWduaXNzZW4iCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzo3MTMKK21zZ2lkICJFeHBhbmQgQ3VycmVudCBXb3JkIgorbXNnc3RyICJBa3R1ZWxsZXMgV29ydCBhdXNzY2hyZWliZW4iCisKKyM6IFByb2dyYW1zL2NvbmZpZy5jOjQ4NworbXNnaWQgIkV4cGxpY2l0IHByZWZlcmVuY2Ugc2V0dGluZ3MuIgorbXNnc3RyICJFeHBsaXppdGUgRWluc3RlbGx1bmdlbi4iCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzoxMDU5Cittc2dpZCAiRk0iCittc2dzdHIgIkZNIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6MTA5NworbXNnaWQgIkZNIFZvbHVtZSIKK21zZ3N0ciAiRk0gTGF1dHN0w6Rya2UiCisKKyMuIFN5bnRoIEZNCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgbmFtZSBvZiBNSURJIG11c2ljYWwgaW5zdHJ1bWVudCAjOTcgKGluIHRoZSBTeW50aCBGTSBncm91cCkuCisjOiBQcm9ncmFtcy9taWRpLmM6MzgwCittc2dpZCAiRlggMSAocmFpbikiCittc2dzdHIgIkZYIDEgKFJlZ2VuKSIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIG5hbWUgb2YgTUlESSBtdXNpY2FsIGluc3RydW1lbnQgIzk4IChpbiB0aGUgU3ludGggRk0gZ3JvdXApLgorIzogUHJvZ3JhbXMvbWlkaS5jOjM4MworbXNnaWQgIkZYIDIgKHNvdW5kdHJhY2spIgorbXNnc3RyICJGWCAyIChTb3VuZHRyYWNrKSIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIG5hbWUgb2YgTUlESSBtdXNpY2FsIGluc3RydW1lbnQgIzk5IChpbiB0aGUgU3ludGggRk0gZ3JvdXApLgorIzogUHJvZ3JhbXMvbWlkaS5jOjM4NgorbXNnaWQgIkZYIDMgKGNyeXN0YWwpIgorbXNnc3RyICJGWCAzIChLcmlzdGFsbCkiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBuYW1lIG9mIE1JREkgbXVzaWNhbCBpbnN0cnVtZW50ICMxMDAgKGluIHRoZSBTeW50aCBGTSBncm91cCkuCisjOiBQcm9ncmFtcy9taWRpLmM6Mzg5Cittc2dpZCAiRlggNCAoYXRtb3NwaGVyZSkiCittc2dzdHIgIkZYIDQgKEF0bW9zcGjDpHJlKSIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIG5hbWUgb2YgTUlESSBtdXNpY2FsIGluc3RydW1lbnQgIzEwMSAoaW4gdGhlIFN5bnRoIEZNIGdyb3VwKS4KKyM6IFByb2dyYW1zL21pZGkuYzozOTIKK21zZ2lkICJGWCA1IChicmlnaHRuZXNzKSIKK21zZ3N0ciAiRlggNSAoSGVsbGlna2VpdCkiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBuYW1lIG9mIE1JREkgbXVzaWNhbCBpbnN0cnVtZW50ICMxMDIgKGluIHRoZSBTeW50aCBGTSBncm91cCkuCisjOiBQcm9ncmFtcy9taWRpLmM6Mzk1Cittc2dpZCAiRlggNiAoZ29ibGlucykiCittc2dzdHIgIkZYIDYgKEtvYm9sZGUpIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgbmFtZSBvZiBNSURJIG11c2ljYWwgaW5zdHJ1bWVudCAjMTAzIChpbiB0aGUgU3ludGggRk0gZ3JvdXApLgorIzogUHJvZ3JhbXMvbWlkaS5jOjM5OAorbXNnaWQgIkZYIDcgKGVjaG9lcykiCittc2dzdHIgIkZYIDcgKEVjaG9zKSIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIG5hbWUgb2YgTUlESSBtdXNpY2FsIGluc3RydW1lbnQgIzEwNCAoaW4gdGhlIFN5bnRoIEZNIGdyb3VwKS4KKyMuIHhnZXR0ZXh0OiAoc2NpLWZpIGlzIGEgY29tbW9uIHNob3J0IGZvcm0gZm9yIHNjaWVuY2UgZmljdGlvbikKKyM6IFByb2dyYW1zL21pZGkuYzo0MDIKK21zZ2lkICJGWCA4IChzY2ktZmkpIgorbXNnc3RyICJGWCA4IChTY2ktRmkpIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgbmFtZSBvZiBNSURJIG11c2ljYWwgaW5zdHJ1bWVudCAjMTExIChpbiB0aGUgRXRobmljIGdyb3VwKS4KKyM6IFByb2dyYW1zL21pZGkuYzo0MjQKK21zZ2lkICJGaWRkbGUiCittc2dzdHIgIkZpZWRlbCIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIG5hbWUgb2YgTUlESSBtdXNpY2FsIGluc3RydW1lbnQgIzc0IChpbiB0aGUgUGlwZSBncm91cCkuCisjOiBQcm9ncmFtcy9taWRpLmM6MzA4Cittc2dpZCAiRmx1dGUiCittc2dzdHIgIkZsw7Z0ZSIKKworIzogUHJvZ3JhbXMvYnJsdHR5LWN0Yi5jOjk2Cittc2dpZCAiRm9yY2UgaW1tZWRpYXRlIG91dHB1dC4iCittc2dzdHIgIlNvZm9ydGlnZSBBdXNnYWJlIGVyendpbmdlbi4iCisKKyM6IFByb2dyYW1zL2JybHR0eS1jbGRyLmM6NDIKK21zZ2lkICJGb3JtYXQgb2YgZWFjaCBvdXRwdXQgbGluZS4iCittc2dzdHIgIkZvcm1hdCBlaW5lciBBdXNnYWJlemVpbGUuIgorCisjOiBQcm9ncmFtcy9icmx0dHktdHRiLmM6MTY1Cittc2dpZCAiRm9ybWF0IG9mIGlucHV0IGZpbGUuIgorbXNnc3RyICJGb3JtYXQgZGVyIEVpbmdhYmVkYXRlaS4iCisKKyM6IFByb2dyYW1zL2JybHR0eS10dGIuYzoxNzIKK21zZ2lkICJGb3JtYXQgb2Ygb3V0cHV0IGZpbGUuIgorbXNnc3RyICJGb3JtYXQgZGVyIEF1c2dhYmVkYXRlaS4iCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBuYW1lIG9mIE1JREkgbXVzaWNhbCBpbnN0cnVtZW50ICM2MSAoaW4gdGhlIEJyYXNzIGdyb3VwKS4KKyM6IFByb2dyYW1zL21pZGkuYzoyNjcKK21zZ2lkICJGcmVuY2ggSG9ybiIKK21zZ3N0ciAiV2FsZGhvcm4iCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBuYW1lIG9mIE1JREkgbXVzaWNhbCBpbnN0cnVtZW50ICMzNiAoaW4gdGhlIEJhc3MgZ3JvdXApLgorIzogUHJvZ3JhbXMvbWlkaS5jOjE4OQorbXNnaWQgIkZyZXRsZXNzIEJhc3MiCittc2dzdHIgImJ1bmRsb3NlciBCYXNzIgorCisjOiBQcm9ncmFtcy9hbGVydC5jOjk3Cittc2dpZCAiRnJvemVuIgorbXNnc3RyICJFaW5nZWZyb3JlbiIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjU1NgorbXNnaWQgIkdlbmVyaWMiCittc2dzdHIgIkFsbGdlbWVpbiIKKworIzogUHJvZ3JhbXMvbG9nLmM6NjQKK21zZ2lkICJHZW5lcmljIElucHV0IgorbXNnc3RyICJhbGxnZW1laW5lIEVpbmdhYmVuIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgbmFtZSBvZiBNSURJIG11c2ljYWwgaW5zdHJ1bWVudCAjMTAgKGluIHRoZSBDaHJvbWF0aWMgUGVyY3Vzc2lvbiBncm91cCkuCisjOiBQcm9ncmFtcy9taWRpLmM6MTA4Cittc2dpZCAiR2xvY2tlbnNwaWVsIgorbXNnc3RyICJHbG9ja2Vuc3BpZWwiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBuYW1lIG9mIE1JREkgbXVzaWNhbCBpbnN0cnVtZW50IGdyb3VwICM0LgorIzogUHJvZ3JhbXMvbWlkaS5jOjM0Cittc2dpZCAiR3VpdGFyIgorbXNnc3RyICJHaXRhcnJlIgorCisjLiBTb3VuZCBFZmZlY3RzCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgbmFtZSBvZiBNSURJIG11c2ljYWwgaW5zdHJ1bWVudCAjMTIxIChpbiB0aGUgU291bmQgRWZmZWN0cyBncm91cCkuCisjOiBQcm9ncmFtcy9taWRpLmM6NDU2Cittc2dpZCAiR3VpdGFyIEZyZXQgTm9pc2UiCittc2dzdHIgIkdpdGFycmUsIEdlcsOkdXNjaCBhbiBkZXIgQnVuZGxlaXN0ZSIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIG5hbWUgb2YgTUlESSBtdXNpY2FsIGluc3RydW1lbnQgIzMyIChpbiB0aGUgR3VpdGFyIGdyb3VwKS4KKyM6IFByb2dyYW1zL21pZGkuYzoxNzYKK21zZ2lkICJHdWl0YXIgSGFybW9uaWNzIgorbXNnc3RyICJHaXRhcnJlLCBPYmVydMO2bmUiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBuYW1lIG9mIE1JREkgbXVzaWNhbCBpbnN0cnVtZW50ICMxMjggKGluIHRoZSBTb3VuZCBFZmZlY3RzIGdyb3VwKS4KKyM6IFByb2dyYW1zL21pZGkuYzo0NzcKK21zZ2lkICJHdW5zaG90IgorbXNnc3RyICJHZXdlaHJzY2h1c3MiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBuYW1lIG9mIE1JREkgbXVzaWNhbCBpbnN0cnVtZW50ICMyMyAoaW4gdGhlIE9yZ2FuIGdyb3VwKS4KKyM6IFByb2dyYW1zL21pZGkuYzoxNDgKK21zZ2lkICJIYXJtb25pY2EiCittc2dzdHIgIkhhcm1vbmlrYSIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIG5hbWUgb2YgTUlESSBtdXNpY2FsIGluc3RydW1lbnQgIzcgKGluIHRoZSBQaWFubyBncm91cCkuCisjOiBQcm9ncmFtcy9taWRpLmM6OTgKK21zZ2lkICJIYXJwc2ljaG9yZCIKK21zZ3N0ciAiSGFycHNpY2hvcmQiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBuYW1lIG9mIE1JREkgbXVzaWNhbCBpbnN0cnVtZW50ICMxMjYgKGluIHRoZSBTb3VuZCBFZmZlY3RzIGdyb3VwKS4KKyM6IFByb2dyYW1zL21pZGkuYzo0NzEKK21zZ2lkICJIZWxpY29wdGVyIgorbXNnc3RyICJIZWxpa29wdGVyIgorCisjOiBQcm9ncmFtcy9zY3JfaGVscC5jOjIxNQorbXNnaWQgIkhlbHAgU2NyZWVuIgorbXNnc3RyICJIaWxmZS1TY2hpcm0iCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzo3NDggUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjEwMTMKK21zZ2lkICJIaWdoIgorbXNnc3RyICJIb2NoIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6OTIxCittc2dpZCAiSGlnaGxpZ2h0IEJyYWlsbGUgV2luZG93IExvY2F0aW9uIgorbXNnc3RyICJCcmFpbGxlemVpbGVucG9zaXRpb24gaGVydm9yaGViZW4iCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBuYW1lIG9mIE1JREkgbXVzaWNhbCBpbnN0cnVtZW50ICM0IChpbiB0aGUgUGlhbm8gZ3JvdXApLgorIzogUHJvZ3JhbXMvbWlkaS5jOjg5Cittc2dpZCAiSG9ua3l0b25rIFBpYW5vIgorbXNnc3RyICJIb25reS10b25rIEtsYXZpZXIiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzoxMjI4Cittc2dpZCAiSW1tZWRpYXRlIgorbXNnc3RyICJTb2ZvcnQiCisKKyM6IFByb2dyYW1zL3hicmxhcGkuYzo2NjUKK21zZ2lkICJJbmNvbXBhdGlibGUgWEtCIGxpYnJhcnlcbiIKK21zZ3N0ciAiSW5rb21wYXRpYmxlIFhLQiBCaWJsaW90aGVrXG4iCisKKyM6IFByb2dyYW1zL3hicmxhcGkuYzo2NjcKK21zZ2lkICJJbmNvbXBhdGlibGUgWEtCIHNlcnZlciBzdXBwb3J0XG4iCittc2dzdHIgIklua29tcGF0aWJsZSBYS0IgU2VydmVydW50ZXJzdMO8dHp1bmdcbiIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjE0OTYKK21zZ2lkICJJbmZvcm1hdGlvbiIKK21zZ3N0ciAiSW5mb3JtYXRpb24iCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzo5NTYKK21zZ2lkICJJbnB1dCBPcHRpb25zIgorbXNnc3RyICJFaW5nYWJlb3B0aW9uZW4iCisKKyM6IFByb2dyYW1zL2xvZy5jOjcwCittc2dpZCAiSW5wdXQgUGFja2V0cyIKK21zZ3N0ciAiZWluZ2VoZW5kZSBEYXRlbnBha2V0ZSIKKworIzogUHJvZ3JhbXMvY29uZmlnLmM6NDE4CisjLCBjLWZvcm1hdAorbXNnaWQgIkluc3RhbGwgdGhlICVzIHNlcnZpY2UsIGFuZCB0aGVuIGV4aXQuIgorbXNnc3RyICJJbnN0YWxsaWVyZSBkYXMgU2VydmljZSAlcyB1bmQgYmVlbmRlIGRhbm4uIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6MTUwMAorbXNnaWQgIkludGVybmFsIFBhcmFtZXRlcnMiCittc2dzdHIgIkludGVybmUgUGFyYW1ldGVyIgorCisjOiBEcml2ZXJzL1NjcmVlbi9BbmRyb2lkL3NjcmVlbi5jOjE5NworbXNnaWQgIkphdmEgY2xhc3Mgbm90IGZvdW5kIgorbXNnc3RyICJKYXZhLUtsYXNzZSBuaWNodCBnZWZ1bmRlbiIKKworIzogRHJpdmVycy9TY3JlZW4vQW5kcm9pZC9zY3JlZW4uYzoxODEKK21zZ2lkICJKYXZhIGV4Y2VwdGlvbiBvY2N1cnJlZCIKK21zZ3N0ciAiIgorCisjOiBEcml2ZXJzL1NjcmVlbi9BbmRyb2lkL3NjcmVlbi5jOjE5NAorbXNnaWQgIkphdmEgbWV0aG9kIG5vdCBmb3VuZCIKK21zZ3N0ciAiSmF2YS1NZXRob2RlIG5pY2h0IGdlZnVuZGVuIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgbmFtZSBvZiBNSURJIG11c2ljYWwgaW5zdHJ1bWVudCAjMTA5IChpbiB0aGUgRXRobmljIGdyb3VwKS4KKyM6IFByb2dyYW1zL21pZGkuYzo0MTgKK21zZ2lkICJLYWxpbWJhIgorbXNnc3RyICJLYWxpbWJhIgorCisjOiBQcm9ncmFtcy9jb25maWcuYzoxNzA5Cittc2dpZCAiS2V5IEJpbmRpbmdzIgorbXNnc3RyICJUYXN0ZW5iZWxlZ3VuZ2VuIgorCisjOiBQcm9ncmFtcy9jb25maWcuYzoxMjM3Cittc2dpZCAiS2V5IEhlbHAiCittc2dzdHIgIlRhc3RlbmhpbGZlIgorCisjOiBQcm9ncmFtcy9jb25maWcuYzoxNzE0IFByb2dyYW1zL2t0Yl9saXN0LmM6NzM3Cittc2dpZCAiS2V5IFRhYmxlIgorbXNnc3RyICJUYXN0ZW50YWJlbGxlIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6OTM1Cittc2dpZCAiS2V5Ym9hcmQgRW5hYmxlZCIKK21zZ3N0ciAiVGFzdGF0dXIgYWt0aXZpZXJ0IgorCisjOiBQcm9ncmFtcy9sb2cuYzo4OAorbXNnaWQgIktleWJvYXJkIEtleSBFdmVudHMiCittc2dzdHIgIlRhc3RhdHVyZXJlaWduaXNzZSIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjEwNDIKK21zZ2lkICJLZXlib2FyZCBMRUQgQWxlcnRzIgorbXNnc3RyICJUYXN0YXR1cmVyLUxFRCBXYXJudW5nZW4iCisKKyM6IFByb2dyYW1zL2NvbmZpZy5jOjEzMjIgUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjEwMjQKK21zZ2lkICJLZXlib2FyZCBUYWJsZSIKK21zZ3N0ciAiVGFzdGF0dXJ0YWJlbGxlIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgbmFtZSBvZiBNSURJIG11c2ljYWwgaW5zdHJ1bWVudCAjMTA4IChpbiB0aGUgRXRobmljIGdyb3VwKS4KKyM6IFByb2dyYW1zL21pZGkuYzo0MTUKK21zZ2lkICJLb3RvIgorbXNnc3RyICJLb3RvIgorCisjOiBQcm9ncmFtcy9jb25maWcuYzozMTEyCittc2dpZCAiTGFuZ3VhZ2UiCittc2dzdHIgIlNwcmFjaGUiCisKKyMuIFN5bnRoIExlYWQKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBuYW1lIG9mIE1JREkgbXVzaWNhbCBpbnN0cnVtZW50ICM4MSAoaW4gdGhlIFN5bnRoIExlYWQgZ3JvdXApLgorIzogUHJvZ3JhbXMvbWlkaS5jOjMzMAorbXNnaWQgIkxlYWQgMSAoc3F1YXJlKSIKK21zZ3N0ciAiSGF1cHRzdGltbWUgMSAocmVjaHRlY2tpZykiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBuYW1lIG9mIE1JREkgbXVzaWNhbCBpbnN0cnVtZW50ICM4MiAoaW4gdGhlIFN5bnRoIExlYWQgZ3JvdXApLgorIzogUHJvZ3JhbXMvbWlkaS5jOjMzMworbXNnaWQgIkxlYWQgMiAoc2F3dG9vdGgpIgorbXNnc3RyICJIYXVwdHN0aW1tZSAyIChTw6RnZXphaG4pIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgbmFtZSBvZiBNSURJIG11c2ljYWwgaW5zdHJ1bWVudCAjODMgKGluIHRoZSBTeW50aCBMZWFkIGdyb3VwKS4KKyM6IFByb2dyYW1zL21pZGkuYzozMzYKK21zZ2lkICJMZWFkIDMgKGNhbGxpb3BlKSIKK21zZ3N0ciAiSGF1cHRzdGltbWUgMyAoc3Rlcm5mw7ZybWlnKSIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIG5hbWUgb2YgTUlESSBtdXNpY2FsIGluc3RydW1lbnQgIzg0IChpbiB0aGUgU3ludGggTGVhZCBncm91cCkuCisjOiBQcm9ncmFtcy9taWRpLmM6MzM5Cittc2dpZCAiTGVhZCA0IChjaGlmZikiCittc2dzdHIgIkhhdXB0c3RpbW1lIDQgKGtsYXJlIEFuc3ByYWNoZSkiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBuYW1lIG9mIE1JREkgbXVzaWNhbCBpbnN0cnVtZW50ICM4NSAoaW4gdGhlIFN5bnRoIExlYWQgZ3JvdXApLgorIzogUHJvZ3JhbXMvbWlkaS5jOjM0MgorbXNnaWQgIkxlYWQgNSAoY2hhcmFuZykiCittc2dzdHIgIkhhdXB0c3RpbW1lIDUgKENoYXJhbmcpIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgbmFtZSBvZiBNSURJIG11c2ljYWwgaW5zdHJ1bWVudCAjODYgKGluIHRoZSBTeW50aCBMZWFkIGdyb3VwKS4KKyM6IFByb2dyYW1zL21pZGkuYzozNDUKK21zZ2lkICJMZWFkIDYgKHZvaWNlKSIKK21zZ3N0ciAiSGF1cHRzdGltbWUgNiAoU3ByYWNoZSkiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBuYW1lIG9mIE1JREkgbXVzaWNhbCBpbnN0cnVtZW50ICM4NyAoaW4gdGhlIFN5bnRoIExlYWQgZ3JvdXApLgorIzogUHJvZ3JhbXMvbWlkaS5jOjM0OAorbXNnaWQgIkxlYWQgNyAoZmlmdGhzKSIKK21zZ3N0ciAiSGF1cHRzdGltbWUgNyAoUXVpbnRlbikiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBuYW1lIG9mIE1JREkgbXVzaWNhbCBpbnN0cnVtZW50ICM4OCAoaW4gdGhlIFN5bnRoIExlYWQgZ3JvdXApLgorIzogUHJvZ3JhbXMvbWlkaS5jOjM1MQorbXNnaWQgIkxlYWQgOCAoYmFzcyArIGxlYWQpIgorbXNnc3RyICJIYXVwdHN0aW1tZSA4IChCYXNzIHVuZCBGw7xocnVuZykiCisKKyM6IFByb2dyYW1zL2xlYXJuLmM6MTAxCittc2dpZCAiTGVhcm4gTW9kZSIKK21zZ3N0ciAiTGVybm1vZHVzIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6MTM0MQorbXNnaWQgIkxlZnQiCittc2dzdHIgIkxpbmtzIgorCisjOiBQcm9ncmFtcy9icmx0dHkta3RiLmM6NTEKK21zZ2lkICJMaXN0IGtleSBuYW1lcy4iCittc2dzdHIgIlRhc3Rlbm5hbWVuIGF1Zmxpc3Rlbi4iCisKKyM6IFByb2dyYW1zL2JybHR0eS1rdGIuYzo1NworbXNnaWQgIkxpc3Qga2V5IHRhYmxlIGluIGhlbHAgc2NyZWVuIGZvcm1hdC4iCittc2dzdHIgIlRhc3RlbnRhYmVsbGUgaW0gSGlsZmUtU2NoaXJtIEZvcm1hdCBhdWZsaXN0ZW4uIgorCisjOiBQcm9ncmFtcy9icmx0dHkta3RiLmM6NjMKK21zZ2lkICJMaXN0IGtleSB0YWJsZSBpbiByZVN0cnVjdHVyZWRUZXh0IGZvcm1hdC4iCittc2dzdHIgIlRhc3RlbnRhYmVsbGUgaW0gcmVTdHJ1Y3R1cmVkVGV4dC1Gb3JtYXQgYXVmbGlzdGVuLiIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjE0ODMKK21zZ2lkICJMb2NhbGUgRGlyZWN0b3J5IgorbXNnc3RyICJMb2thbGlzaWVydW5nc3ZlcnplaWNobmlzIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6MTUxOQorbXNnaWQgIkxvZyBDYXRlZ29yaWVzIgorbXNnc3RyICJQcm90b2tvbGxpZXJ1bmdza2F0ZWdvcmllbiIKKworIzogUHJvZ3JhbXMvY29uZmlnLmM6ODkwCittc2dpZCAiTG9nIExldmVsIgorbXNnc3RyICJQcm90b2tvbGxpZXJ1bmdzYXVzZsO8aHJsaWNoa2VpdCIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjE1ODAKK21zZ2lkICJMb2cgTWVzc2FnZXMiCittc2dzdHIgIlByb3Rva29sbGllcnVuZ3NtZWxkdW5nZW4iCisKKyM6IFByb2dyYW1zL2NvbmZpZy5jOjc3MworbXNnaWQgIkxvZyB0aGUgdmVyc2lvbnMgb2YgdGhlIGNvcmUsIEFQSSwgYW5kIGJ1aWx0LWluIGRyaXZlcnMsIGFuZCB0aGVuIGV4aXQuIgorbXNnc3RyICJQcm90b2tvbGxpZXJlIGRpZSBWZXJzaW9uIGRlcyBLZXJucywgZGVyIEFQSSwgZGVyIGludGVncmllcnRlbiBUcmVpYmVyIHVuZCBiZWVuZGUgZGFubi4iCisKKyM6IFByb2dyYW1zL2NvbmZpZy5jOjczOAorbXNnaWQgIkxvZyB0byBzdGFuZGFyZCBlcnJvciByYXRoZXIgdGhhbiB0byB0aGUgc3lzdGVtIGxvZy4iCittc2dzdHIgIlByb3Rva29sbGllcmUgdmlhIFN0YW5kYXJkZmVobGVyYXVzZ2FiZSBhbnN0YXR0IFN5c3RlbSBMb2cuIgorCisjOiBQcm9ncmFtcy9jb25maWcuYzo3NTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiTG9nZ2luZyBsZXZlbCAoJXMgb3Igb25lIG9mIHslc30pIGFuZC9vciBsb2cgY2F0ZWdvcmllcyB0byBlbmFibGUgKGFueSBjb21iaW5hdGlvbiBvZiB7JXN9LCBlYWNoIG9wdGlvbmFsbHkgcHJlZml4ZWQgYnkgJXMgdG8gZGlzYWJsZSkuIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzo5NzgKK21zZ2lkICJMb25nIFByZXNzIFRpbWUiCittc2dzdHIgIlplaXR2ZXJ6w7ZnZXJ1bmciCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzo3NDYgUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjEwMTEKK21zZ2lkICJMb3ciCittc2dzdHIgIk5pZWRyaWciCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzo2NjYKK21zZ2lkICJMb3dlciBMZWZ0IERvdCIKK21zZ3N0ciAiVW50ZXJlciBsaW5rZXIgUHVua3QiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzo2NjcKK21zZ2lkICJMb3dlciBSaWdodCBEb3QiCittc2dzdHIgIlVudGVyZXIgcmVjaHRlciBQdW5rdCIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjEwNTgKK21zZ2lkICJNSURJIgorbXNnc3RyICJNSURJIgorCisjOiBQcm9ncmFtcy9jb25maWcuYzo3MjIKK21zZ2lkICJNSURJIChNdXNpY2FsIEluc3RydW1lbnQgRGlnaXRhbCBJbnRlcmZhY2UpIGRldmljZSBzcGVjaWZpZXIuIgorbXNnc3RyICJNSURJIChNdXNpY2FsIEluc3RydW1lbnQgRGlnaXRhbCBJbnRlcmZhY2UpIEdlcsOkdHMtQW5nYWJlLiIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjEwODgKK21zZ2lkICJNSURJIEluc3RydW1lbnQiCittc2dzdHIgIk1JREkgSW5zdHJ1bWVudCIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjEwNzgKK21zZ2lkICJNSURJIFZvbHVtZSIKK21zZ3N0ciAiTUlESSBMYXV0c3TDpHJrZSIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjE0NDMKK21zZ2lkICJNYWlsaW5nIExpc3QiCittc2dzdHIgIk1haWxpbmctTGlzdGUiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBuYW1lIG9mIE1JREkgbXVzaWNhbCBpbnN0cnVtZW50ICMxMyAoaW4gdGhlIENocm9tYXRpYyBQZXJjdXNzaW9uIGdyb3VwKS4KKyM6IFByb2dyYW1zL21pZGkuYzoxMTcKK21zZ2lkICJNYXJpbWJhIgorbXNnc3RyICJNYXJpbWJhIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6NzQ5IFByb2dyYW1zL21lbnVfcHJlZnMuYzoxMDE0Cittc2dpZCAiTWF4aW11bSIKK21zZ3N0ciAiTWF4aW1hbCIKKworIzogUHJvZ3JhbXMvYnJsdHR5LWN0Yi5jOjkwCittc2dpZCAiTWF4aW11bSBsZW5ndGggb2YgYW4gb3V0cHV0IGxpbmUuIgorbXNnc3RyICJNYXhpbWFsZSBMw6RuZ2UgZWluZXIgQXVzZ2FiZXplaWxlLiIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjc0NyBQcm9ncmFtcy9tZW51X3ByZWZzLmM6MTAxMgorbXNnaWQgIk1lZGl1bSIKK21zZ3N0ciAiTWl0dGVsIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgbmFtZSBvZiBNSURJIG11c2ljYWwgaW5zdHJ1bWVudCAjMTE4IChpbiB0aGUgUGVyY3Vzc2l2ZSBncm91cCkuCisjOiBQcm9ncmFtcy9taWRpLmM6NDQ2Cittc2dpZCAiTWVsb2RpYyBUb20iCittc2dzdHIgIk1lbG9kaXNjaGUgVHJvbW1lbCIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjY3OQorbXNnaWQgIk1lbnUgT3B0aW9ucyIKK21zZ3N0ciAiTWVuw7xvcHRpb25lbiIKKworIzogUHJvZ3JhbXMvY29uZmlnLmM6NzMxCittc2dpZCAiTWVzc2FnZSBob2xkIHRpbWVvdXQgKGluIDEwbXMgdW5pdHMpLiIKK21zZ3N0ciAiTWVsZHVuZ3NhbnplaWdlZGF1ZXIgKGluIDEwbXMgRWluaGVpdGVuKS4iCisKKyM6IFByb2dyYW1zL2NvbmZpZy5jOjg5MworIywgZnV6enkKK21zZ2lkICJNZXNzYWdlcyBEaXJlY3RvcnkiCittc2dzdHIgIlRhYmVsbGVudmVyemVpY2huaXMiCisKKyM6IFByb2dyYW1zL2NvbmZpZy5jOjg5MgorbXNnaWQgIk1lc3NhZ2VzIERvbWFpbiIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9jb25maWcuYzo4OTEKK21zZ2lkICJNZXNzYWdlcyBMb2NhbGUiCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjc0NSBQcm9ncmFtcy9tZW51X3ByZWZzLmM6MTAxMAorbXNnaWQgIk1pbmltdW0iCittc2dzdHIgIk1pbmltYWwiCisKKyM6IFByb2dyYW1zL2NvbmZpZy5jOjY4MgorIywgYy1mb3JtYXQKK21zZ2lkICJNaW5pbXVtIHNjcmVlbiBjb250ZW50IHF1YWxpdHkgdG8gYXV0b3NwZWFrIChvbmUgb2YgeyVzfSkuIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzoxMzEzCittc2dpZCAiTW9udGggRGF5IFllYXIiCittc2dzdHIgIk1vbmF0IFRhZyBKYWhyIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgbmFtZSBvZiBNSURJIG11c2ljYWwgaW5zdHJ1bWVudCAjMTEgKGluIHRoZSBDaHJvbWF0aWMgUGVyY3Vzc2lvbiBncm91cCkuCisjOiBQcm9ncmFtcy9taWRpLmM6MTExCittc2dpZCAiTXVzaWMgQm94IgorbXNnc3RyICJNdXNpa2JveCIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjEwNTgKK21zZ2lkICJNdXNpY2FsIEluc3RydW1lbnQgRGlnaXRhbCBJbnRlcmZhY2UiCittc2dzdHIgIk11c2ljYWwgSW5zdHJ1bWVudCBEaWdpdGFsIEludGVyZmFjZSIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIG5hbWUgb2YgTUlESSBtdXNpY2FsIGluc3RydW1lbnQgIzYwIChpbiB0aGUgQnJhc3MgZ3JvdXApLgorIzogUHJvZ3JhbXMvbWlkaS5jOjI2NAorbXNnaWQgIk11dGVkIFRydW1wZXQiCittc2dzdHIgIkdlZMOkbXBmdGUgVHJvbXBldGUiCisKKyM6IFByb2dyYW1zL2NvbmZpZy5jOjYyMworbXNnaWQgIk5hbWUgb2Ygb3IgcGF0aCB0byBhdHRyaWJ1dGVzIHRhYmxlLiIKK21zZ3N0ciAiTmFtZSBkZXIgb2RlciBQZmFkIHp1ciBBdHRyaWJ1dHRhYmVsbGUuIgorCisjOiBQcm9ncmFtcy9jb25maWcuYzo2MTUKK21zZ2lkICJOYW1lIG9mIG9yIHBhdGggdG8gY29udHJhY3Rpb24gdGFibGUuIgorbXNnc3RyICJOYW1lIGRlciBvZGVyIFBmYWQgenVyIEt1cnpzY2hyaWZ0dGFiZWxsZS4iCisKKyM6IFByb2dyYW1zL2NvbmZpZy5jOjQ3OQorbXNnaWQgIk5hbWUgb2Ygb3IgcGF0aCB0byBkZWZhdWx0IHByZWZlcmVuY2VzIGZpbGUuIgorbXNnc3RyICJOYW1lIGRlciBvZGVyIFBmYWQgenVyIFN0YW5kYXJkZWluc3RlbGx1bmdzZGF0ZWkuIgorCisjOiBQcm9ncmFtcy9jb25maWcuYzo2MzIKK21zZ2lkICJOYW1lIG9mIG9yIHBhdGggdG8ga2V5Ym9hcmQgdGFibGUuIgorbXNnc3RyICJOYW1lIGRlciBvZGVyIFBmYWQgenVyIFRhc3RlbnRhYmVsbGUuIgorCisjOiBQcm9ncmFtcy9jb25maWcuYzo2NjgKK21zZ2lkICJOYW1lIG9mIG9yIHBhdGggdG8gc3BlZWNoIGlucHV0IG9iamVjdC4iCittc2dzdHIgIk5hbWUgZGVzIG9kZXIgUGZhZCB6dW0gU3ByYWNoZWluZ2FiZW9iamVrdHMuIgorCisjOiBQcm9ncmFtcy9jb25maWcuYzo2MDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiTmFtZSBvZiBvciBwYXRoIHRvIHRleHQgdGFibGUgKG9yICVzKS4iCittc2dzdHIgIk5hbWUgZGVyIG9kZXIgUGZhZCB6dXIgVGV4dHRhYmVsbGUgKG9kZXIgJXMpLiIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjg0NQorbXNnaWQgIk5hdmlnYXRpb24gT3B0aW9ucyIKK21zZ3N0ciAiTmF2aWdhdGlvbnNvcHRpb25lbiIKKworIzogUHJvZ3JhbXMvbWVudS5jOjUyMworbXNnaWQgIk5vIgorbXNnc3RyICJOZWluIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6NzIwCittc2dpZCAiTm8gQ2FwaXRhbGl6YXRpb24iCittc2dzdHIgIktlaW5lIEdyb8Ofc2NocmVpYnVuZyIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjg5NyBQcm9ncmFtcy9tZW51X3ByZWZzLmM6MTE5MgorIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjEyMDUgUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjEyMTgKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzoxMzAxIFByb2dyYW1zL21lbnVfcHJlZnMuYzoxMzQwCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6MTM2MAorbXNnaWQgIk5vbmUiCittc2dzdHIgIktlaW5lIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6MTQ5NQorbXNnaWQgIk5vdGljZSIKK21zZ3N0ciAiSGlud2VpcyIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIG5hbWUgb2YgTUlESSBtdXNpY2FsIGluc3RydW1lbnQgIzY5IChpbiB0aGUgUmVlZCBncm91cCkuCisjOiBQcm9ncmFtcy9taWRpLmM6MjkyCittc2dpZCAiT2JvZSIKK21zZ3N0ciAiT2JvZSIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIG5hbWUgb2YgTUlESSBtdXNpY2FsIGluc3RydW1lbnQgIzgwIChpbiB0aGUgUGlwZSBncm91cCkuCisjOiBQcm9ncmFtcy9taWRpLmM6MzI2Cittc2dpZCAiT2NhcmluYSIKK21zZ3N0ciAiT2thcmluYSIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjk2MAorbXNnaWQgIk9mZiIKK21zZ3N0ciAiQXVzIgorCisjOiBQcm9ncmFtcy9jb25maWcuYzoxODAwCittc2dpZCAiT2xkIFByZWZlcmVuY2VzIEZpbGUiCittc2dzdHIgIkFsdGUgRWluc3RlbGx1bmdzZGF0ZWkiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzo5NzMKK21zZ2lkICJPbiBGaXJzdCBSZWxlYXNlIgorbXNnc3RyICJCZWltIGVyc3RlbiBMb3NsYXNzZW4iCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBuYW1lIG9mIE1JREkgbXVzaWNhbCBpbnN0cnVtZW50ICM1NiAoaW4gdGhlIEVuc2VtYmxlIGdyb3VwKS4KKyM6IFByb2dyYW1zL21pZGkuYzoyNTEKK21zZ2lkICJPcmNoZXN0cmEgSGl0IgorbXNnc3RyICJPcmNoZXN0ZXIgU2NobGFnemV1ZyIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIG5hbWUgb2YgTUlESSBtdXNpY2FsIGluc3RydW1lbnQgIzQ3IChpbiB0aGUgU3RyaW5ncyBncm91cCkuCisjOiBQcm9ncmFtcy9taWRpLmM6MjIzCittc2dpZCAiT3JjaGVzdHJhbCBIYXJwIgorbXNnc3RyICJPcmNoZXN0ZXJoYXJmZSIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIG5hbWUgb2YgTUlESSBtdXNpY2FsIGluc3RydW1lbnQgZ3JvdXAgIzMuCisjOiBQcm9ncmFtcy9taWRpLmM6MzEKK21zZ2lkICJPcmdhbiIKK21zZ3N0ciAiT3JnZWwiCisKKyM6IFByb2dyYW1zL2xvZy5jOjc2Cittc2dpZCAiT3V0cHV0IFBhY2tldHMiCittc2dzdHIgImF1c2dlaGVuZGUgRGF0ZW5wYWtldGUiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBuYW1lIG9mIE1JREkgbXVzaWNhbCBpbnN0cnVtZW50ICMzMCAoaW4gdGhlIEd1aXRhciBncm91cCkuCisjOiBQcm9ncmFtcy9taWRpLmM6MTcwCittc2dpZCAiT3ZlcmRyaXZlbiBHdWl0YXIiCittc2dzdHIgIsOcYmVyc3RldWVydGUgR2l0YXJyZSIKKworIzogRHJpdmVycy9CcmFpbGxlL0lyaXMvYnJhaWxsZS5jOjE1NDUKK21zZ2lkICJQQyBtb2RlIgorbXNnc3RyICJQQy1Nb2R1cyIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjEwNTcKK21zZ2lkICJQQ00iCittc2dzdHIgIlBDTSIKKworIzogUHJvZ3JhbXMvY29uZmlnLmM6NzEyCittc2dpZCAiUENNIChzb3VuZGNhcmQgZGlnaXRhbCBhdWRpbykgZGV2aWNlIHNwZWNpZmllci4iCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjEwNzAKK21zZ2lkICJQQ00gVm9sdW1lIgorbXNnc3RyICJQQ00gTGF1dHN0w6Rya2UiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgUEFTU1BTMiBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6MTQ4NworbXNnaWQgIlBTLzIgKHNldCAzKSBrZXlib2FyZCBzY2FuIGNvZGUiCittc2dzdHIgIlBTLzIgKHNldCAzKSBUYXN0YXR1ci1TY2FuY29kZSIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjE0MzMKK21zZ2lkICJQYWNrYWdlIFJldmlzaW9uIgorbXNnc3RyICJQYWtldHJldmlzaW9uIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6MTQyOAorbXNnaWQgIlBhY2thZ2UgVmVyc2lvbiIKK21zZ3N0ciAiUGFrZXQgVmVyc2lvbiIKKworIy4gU3ludGggUGFkCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgbmFtZSBvZiBNSURJIG11c2ljYWwgaW5zdHJ1bWVudCAjODkgKGluIHRoZSBTeW50aCBQYWQgZ3JvdXApLgorIzogUHJvZ3JhbXMvbWlkaS5jOjM1NQorbXNnaWQgIlBhZCAxIChuZXcgYWdlKSIKK21zZ3N0ciAiQmFzaXNzdGltbWUgMSAoTmV3IEFnZSkiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBuYW1lIG9mIE1JREkgbXVzaWNhbCBpbnN0cnVtZW50ICM5MCAoaW4gdGhlIFN5bnRoIFBhZCBncm91cCkuCisjOiBQcm9ncmFtcy9taWRpLmM6MzU4Cittc2dpZCAiUGFkIDIgKHdhcm0pIgorbXNnc3RyICJCYXNpc3N0aW1tZSAyICh3YXJtKSIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIG5hbWUgb2YgTUlESSBtdXNpY2FsIGluc3RydW1lbnQgIzkxIChpbiB0aGUgU3ludGggUGFkIGdyb3VwKS4KKyM6IFByb2dyYW1zL21pZGkuYzozNjEKK21zZ2lkICJQYWQgMyAocG9seXN5bnRoKSIKK21zZ3N0ciAiQmFzaXNzdGltbWUgMyAoTWVocmZhY2hzeW50aGVzaXplcikiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBuYW1lIG9mIE1JREkgbXVzaWNhbCBpbnN0cnVtZW50ICM5MiAoaW4gdGhlIFN5bnRoIFBhZCBncm91cCkuCisjOiBQcm9ncmFtcy9taWRpLmM6MzY0Cittc2dpZCAiUGFkIDQgKGNob2lyKSIKK21zZ3N0ciAiQmFzaXNzdGltbWUgNCAoQ2hvcikiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBuYW1lIG9mIE1JREkgbXVzaWNhbCBpbnN0cnVtZW50ICM5MyAoaW4gdGhlIFN5bnRoIFBhZCBncm91cCkuCisjOiBQcm9ncmFtcy9taWRpLmM6MzY3Cittc2dpZCAiUGFkIDUgKGJvd2VkKSIKK21zZ3N0ciAiQmFzaXNzdGltbWUgNSAoU3RyZWljaGVyKSIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIG5hbWUgb2YgTUlESSBtdXNpY2FsIGluc3RydW1lbnQgIzk0IChpbiB0aGUgU3ludGggUGFkIGdyb3VwKS4KKyM6IFByb2dyYW1zL21pZGkuYzozNzAKK21zZ2lkICJQYWQgNiAobWV0YWxsaWMpIgorbXNnc3RyICJCYXNpc3N0aW1tZSA2IChtZXRhbGxpc2NoKSIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIG5hbWUgb2YgTUlESSBtdXNpY2FsIGluc3RydW1lbnQgIzk1IChpbiB0aGUgU3ludGggUGFkIGdyb3VwKS4KKyM6IFByb2dyYW1zL21pZGkuYzozNzMKK21zZ2lkICJQYWQgNyAoaGFsbykiCittc2dzdHIgIkJhc2lzc3RpbW1lIDcgKExpY2h0c2NobGVpZXIpIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgbmFtZSBvZiBNSURJIG11c2ljYWwgaW5zdHJ1bWVudCAjOTYgKGluIHRoZSBTeW50aCBQYWQgZ3JvdXApLgorIzogUHJvZ3JhbXMvbWlkaS5jOjM3NgorbXNnaWQgIlBhZCA4IChzd2VlcCkiCittc2dzdHIgIkJhc2lzc3RpbW1lIDggKFN3ZWVwKSIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIG5hbWUgb2YgTUlESSBtdXNpY2FsIGluc3RydW1lbnQgIzc2IChpbiB0aGUgUGlwZSBncm91cCkuCisjOiBQcm9ncmFtcy9taWRpLmM6MzE0Cittc2dpZCAiUGFuIEZsdXRlIgorbXNnc3RyICJQYW5mbMO2dGUiCisKKyM6IFByb2dyYW1zL2NvbmZpZy5jOjU0MQorbXNnaWQgIlBhcmFtZXRlcnMgZm9yIHRoZSBhcHBsaWNhdGlvbiBwcm9ncmFtbWluZyBpbnRlcmZhY2UuIgorbXNnc3RyICJQYXJhbWV0ZXIgZsO8ciBkaWUgUHJvZ3JhbW1pZXJzY2huaXR0c3RlbGxlLiIKKworIzogUHJvZ3JhbXMvY29uZmlnLmM6NTYzCittc2dpZCAiUGFyYW1ldGVycyBmb3IgdGhlIGJyYWlsbGUgZHJpdmVyLiIKK21zZ3N0ciAiUGFyYW1ldGVyIGbDvHIgZGVuIEJyYWlsbGV0cmVpYmVyLiIKKworIzogUHJvZ3JhbXMvY29uZmlnLmM6NDM2CisjLCBmdXp6eQorbXNnaWQgIlBhcmFtZXRlcnMgZm9yIHRoZSBwcml2aWxlZ2UgZXN0YWJsaXNobWVudCBzdGFnZS4iCittc2dzdHIgIlBhcmFtZXRlciBmw7xyIGRlbiBCcmFpbGxldHJlaWJlci4iCisKKyM6IFByb2dyYW1zL2NvbmZpZy5jOjcwMworbXNnaWQgIlBhcmFtZXRlcnMgZm9yIHRoZSBzY3JlZW4gZHJpdmVyLiIKK21zZ3N0ciAiUGFyYW1ldGVyIGbDvHIgZGVuIEJpbGRzY2hpcm10cmVpYmVyLiIKKworIzogUHJvZ3JhbXMvY29uZmlnLmM6NjYwCittc2dpZCAiUGFyYW1ldGVycyBmb3IgdGhlIHNwZWVjaCBkcml2ZXIuIgorbXNnc3RyICJQYXJhbWV0ZXIgZsO8ciBkZW4gU3ByYWNoYXVzZ2FiZW50cmVpYmVyLiIKKworIzogUHJvZ3JhbXMvY29uZmlnLmM6NDcwCittc2dpZCAiUGF0aCB0byBkZWZhdWx0IHNldHRpbmdzIGZpbGUuIgorbXNnc3RyICJQZmFkIHp1ciBTdGFuZGFyZGtvbmZpZ3VyYXRpb25zZGF0ZWkuIgorCisjOiBQcm9ncmFtcy9jb25maWcuYzo1MjQKK21zZ2lkICJQYXRoIHRvIGRpcmVjdG9yeSBjb250YWluaW5nIGRyaXZlcnMuIgorbXNnc3RyICJQZmFkIHp1bSBWZXJ6ZWljaG5pcyBkYXMgVHJlaWJlciBlbnRow6RsdC4iCisKKyM6IFByb2dyYW1zL2JybHRlc3QuYzo2OCBQcm9ncmFtcy9icmx0dHktYXRiLmM6MzYgUHJvZ3JhbXMvYnJsdHR5LWN0Yi5jOjU0CisjOiBQcm9ncmFtcy9icmx0dHkta3RiLmM6NzMgUHJvZ3JhbXMvY29uZmlnLmM6NTk1Cittc2dpZCAiUGF0aCB0byBkaXJlY3RvcnkgY29udGFpbmluZyB0YWJsZXMuIgorbXNnc3RyICJQZmFkIHp1bSBUYWJlbGxlbi1WZXJ6ZWljaG5pcy4iCisKKyM6IFByb2dyYW1zL2JybHR0eS10dGIuYzoxNTIKK21zZ2lkICJQYXRoIHRvIGRpcmVjdG9yeSBjb250YWluaW5nIHRleHQgdGFibGVzLiIKK21zZ3N0ciAiUGZhZCB6dW0gZWluZW0gVmVyemVpY2huaXMgZGFzIFRleHR0YWJlbGxlbiBlbnRow6RsdC4iCisKKyM6IFByb2dyYW1zL2JybHR0eS1rdGIuYzo4MworbXNnaWQgIlBhdGggdG8gZGlyZWN0b3J5IGZvciBsb2FkaW5nIGRyaXZlcnMuIgorbXNnc3RyICJQZmFkIHp1bSBWZXJ6ZWljaG5pcyBhdXMgZGVtIFRyZWliZXIgZ2VsYWRlbiB3ZXJkZW4uIgorCisjOiBQcm9ncmFtcy9icmx0dHktdHJ0eHQuYzo1MQorbXNnaWQgIlBhdGggdG8gZGlyZWN0b3J5IGZvciB0ZXh0IHRhYmxlcy4iCittc2dzdHIgIlBmYWQgenVtIFZlcnplaWNobmlzIGbDvHIgVGV4dHRhYmVsbGVuLiIKKworIzogUHJvZ3JhbXMvYnJsdGVzdC5jOjc4IFByb2dyYW1zL2NvbmZpZy5jOjUxNAorbXNnaWQgIlBhdGggdG8gZGlyZWN0b3J5IHdoaWNoIGNhbiBiZSB3cml0dGVuIHRvLiIKK21zZ3N0ciAiUGZhZCB6dW0gVmVyemVpY2huaXMgaW4gZGVtIERhdGVpZW4gZXJzdGVsbHQgd2VyZGVuIGvDtm5uZW4uIgorCisjOiBQcm9ncmFtcy9jb25maWcuYzo1MDQKK21zZ2lkICJQYXRoIHRvIGRpcmVjdG9yeSB3aGljaCBjb250YWlucyBmaWxlcyB0aGF0IGNhbiBiZSB1cGRhdGVkLiIKK21zZ3N0ciAiUGZhZCB6dW0gVmVyemVpY2huaXMgaW4gZGVtIERhdGVpZW4gbW9kaWZpemllcnQgd2VyZGVuIGvDtm5uZW4uIgorCisjOiBQcm9ncmFtcy9jb25maWcuYzo0MDQKK21zZ2lkICJQYXRoIHRvIGRpcmVjdG9yeSB3aGljaCBjb250YWlucyBtZXNzYWdlIGxvY2FsaXphdGlvbnMuIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL2JybHR0eS10cnR4dC5jOjU5Cittc2dpZCAiUGF0aCB0byBpbnB1dCB0ZXh0IHRhYmxlLiIKK21zZ3N0ciAiUGZhZCBkZXIgQnJhaWxsZXRhYmVsbGUgZsO8ciBkZW4gRWluZ2FiZXRleHQuIgorCisjOiBQcm9ncmFtcy9jb25maWcuYzo3NjEKK21zZ2lkICJQYXRoIHRvIGxvZyBmaWxlLiIKK21zZ3N0ciAiUGZhZCB6dXIgUHJvdG9rb2xsZGF0ZWkuIgorCisjOiBQcm9ncmFtcy9icmx0dHktdHJ0eHQuYzo2NworbXNnaWQgIlBhdGggdG8gb3V0cHV0IHRleHQgdGFibGUuIgorbXNnc3RyICJQZmFkIGRlciBCcmFpbGxldGFiZWxsZSBmw7xyIGRlbiBBdXNnYWJldGV4dC4iCisKKyM6IFByb2dyYW1zL2NvbmZpZy5jOjQ2MAorbXNnaWQgIlBhdGggdG8gcHJvY2VzcyBpZGVudGlmaWVyIGZpbGUuIgorbXNnc3RyICJQZmFkIHp1ciBQcm96ZXNzaWRlbnRpZmlrYXRpb25zZGF0ZWkuIgorCisjOiBQcm9ncmFtcy9jb25maWcuYzo0OTQKK21zZ2lkICJQYXR0ZXJucyB0aGF0IG1hdGNoIGNvbW1hbmQgcHJvbXB0cy4iCittc2dzdHIgIk11c3RlciBkaWUgZGVuIEtvbW1hbmRvcHJvbXB0IGJlc2NocmVpYmVuLiIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIG5hbWUgb2YgTUlESSBtdXNpY2FsIGluc3RydW1lbnQgZ3JvdXAgIzE1LgorIzogUHJvZ3JhbXMvbWlkaS5jOjcxCittc2dpZCAiUGVyY3Vzc2l2ZSBJbnN0cnVtZW50cyIKK21zZ3N0ciAiUGVya3Vzc2l2ZSBJbnN0cnVtZW50ZSIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIG5hbWUgb2YgTUlESSBtdXNpY2FsIGluc3RydW1lbnQgIzE4IChpbiB0aGUgT3JnYW4gZ3JvdXApLgorIzogUHJvZ3JhbXMvbWlkaS5jOjEzMworbXNnaWQgIlBlcmN1c3NpdmUgT3JnYW4iCittc2dzdHIgIlBlcmt1c3NpdmUgT3JnZWwiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBuYW1lIG9mIE1JREkgbXVzaWNhbCBpbnN0cnVtZW50IGdyb3VwICMxLgorIzogUHJvZ3JhbXMvbWlkaS5jOjI1Cittc2dpZCAiUGlhbm8iCittc2dzdHIgIktsYXZpZXIiCisKKyMuIFBpcGUKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBuYW1lIG9mIE1JREkgbXVzaWNhbCBpbnN0cnVtZW50ICM3MyAoaW4gdGhlIFBpcGUgZ3JvdXApLgorIzogUHJvZ3JhbXMvbWlkaS5jOjMwNQorbXNnaWQgIlBpY2NvbG8iCittc2dzdHIgIlBpY2NvbG9mbMO2dGUiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBuYW1lIG9mIE1JREkgbXVzaWNhbCBpbnN0cnVtZW50IGdyb3VwICMxMC4KKyM6IFByb2dyYW1zL21pZGkuYzo1MgorbXNnaWQgIlBpcGUiCittc2dzdHIgIlBmZWlmZSIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIG5hbWUgb2YgTUlESSBtdXNpY2FsIGluc3RydW1lbnQgIzQ2IChpbiB0aGUgU3RyaW5ncyBncm91cCkuCisjOiBQcm9ncmFtcy9taWRpLmM6MjIwCittc2dpZCAiUGl6emljYXRvIFN0cmluZ3MiCittc2dzdHIgIlBpenppa2F0by1TYWl0ZW4iCisKKyM6IERyaXZlcnMvQnJhaWxsZS9CYXVtL2JyYWlsbGUuYzoxMTU4Cittc2dpZCAiUG93ZXJkb3duIgorbXNnc3RyICJBYnNjaGFsdHVuZyIKKworIzogUHJvZ3JhbXMvY29uZmlnLmM6Mjk1NiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6MTQ2MworbXNnaWQgIlByZWZlcmVuY2VzIEZpbGUiCittc2dzdHIgIkVpbnN0ZWxsdW5nc2RhdGVpIgorCisjOiBQcm9ncmFtcy9zY3JfbWVudS5jOjI3MQorbXNnaWQgIlByZWZlcmVuY2VzIE1lbnUiCittc2dzdHIgIkVpbnN0ZWxsdW5nc21lbsO8IgorCisjOiBIZWFkZXJzL29wdGlvbnMuaDo3NQorbXNnaWQgIlByaW50IGEgdXNhZ2Ugc3VtbWFyeSAoYWxsIG9wdGlvbnMpLCBhbmQgdGhlbiBleGl0LiIKK21zZ3N0ciAiWmVpZ2UgZWluZSBCZW51dHp1bmdzenVzYW1tZW5mYXNzdW5nIChhbGxlIE9wdGlvbmVuKSB1bmQgYmVlbmRlIGRhbm4uIgorCisjOiBIZWFkZXJzL29wdGlvbnMuaDo3MAorbXNnaWQgIlByaW50IGEgdXNhZ2Ugc3VtbWFyeSAoY29tbW9ubHkgdXNlZCBvcHRpb25zIG9ubHkpLCBhbmQgdGhlbiBleGl0LiIKK21zZ3N0ciAiWmVpZ2UgZWluZSBCZW51dHp1bmdzenVzYW1tZW5mYXNzdW5nIChudXIgaMOkdWZpZyB2ZXJ3ZW5kZXRlIE9wdGlvbmVuKSB1bmQgYmVlbmRlIGRhbm4uIgorCisjOiBQcm9ncmFtcy9jb25maWcuYzo4NDQKKyMsIGZ1enp5Cittc2dpZCAiUHJpdmlsZWdlIFBhcmFtZXRlciIKK21zZ3N0ciAiQnJhaWxsZS1QYXJhbWV0ZXIiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzoxNDE0Cittc2dpZCAiUHJvZmlsZXMiCittc2dzdHIgIlByb2ZpbGUiCisKKyM6IFByb2dyYW1zL2NvbmZpZy5jOjY0MAorbXNnaWQgIlByb3BlcnRpZXMgb2YgZWxpZ2libGUga2V5Ym9hcmRzLiIKK21zZ3N0ciAiRWlnZW5zY2hhZnRlbiB2b24gZ2VlaWduZXRlbiBUYXN0YXR1cmVuLiIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjk1MAorbXNnaWQgIlF1aWNrIFNwYWNlIgorbXNnc3RyICJEb3BwZWxodWIiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzoxMjA5Cittc2dpZCAiUmFpc2UgUGl0Y2giCittc2dzdHIgIkVyaMO2aGUgVG9uaMO2aGUiCisKKyM6IFByb2dyYW1zL2NvbmZpZy5jOjM5NQorbXNnaWQgIlJlY29nbml6ZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMuIgorbXNnc3RyICJWZXJ3ZW5kZSBVbWdlYnVuZ3N2YXJpYWJsZW4uIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgbmFtZSBvZiBNSURJIG11c2ljYWwgaW5zdHJ1bWVudCAjNzUgKGluIHRoZSBQaXBlIGdyb3VwKS4KKyM6IFByb2dyYW1zL21pZGkuYzozMTEKK21zZ2lkICJSZWNvcmRlciIKK21zZ3N0ciAiQmxvY2tmbMO2dGUiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBuYW1lIG9mIE1JREkgbXVzaWNhbCBpbnN0cnVtZW50IGdyb3VwICM5LgorIzogUHJvZ3JhbXMvbWlkaS5jOjQ5Cittc2dpZCAiUmVlZCIKK21zZ3N0ciAiUm9ocmJsYXR0IgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgbmFtZSBvZiBNSURJIG11c2ljYWwgaW5zdHJ1bWVudCAjMjEgKGluIHRoZSBPcmdhbiBncm91cCkuCisjOiBQcm9ncmFtcy9taWRpLmM6MTQyCittc2dpZCAiUmVlZCBPcmdhbiIKK21zZ3N0ciAiSGFybW9uaXVtIgorCisjOiBQcm9ncmFtcy9icmx0dHktY3RiLmM6ODIKK21zZ2lkICJSZWZvcm1hdCBpbnB1dC4iCittc2dzdHIgIkVpbmdhYmUgbmV1IGZvcm1hdGllcmVuLiIKKworIzogUHJvZ3JhbXMvY29uZmlnLmM6NTg1Cittc2dpZCAiUmVsZWFzZSBicmFpbGxlIGRldmljZSB3aGVuIHNjcmVlbiBvciB3aW5kb3cgaXMgdW5yZWFkYWJsZS4iCittc2dzdHIgIkdpYiBkaWUgQnJhaWxsZXplaWxlIGZyZWkgd2VubiBkZXIgQmlsZHNjaGlybSBvZGVyIGRhcyBGZW5zdGVyIG5pY2h0IGxlc2JhciBpc3QuIgorCisjOiBQcm9ncmFtcy94YnJsYXBpLmM6MTA2Cittc2dpZCAiUmVtYWluIGEgZm9yZWdyb3VuZCBwcm9jZXNzIgorbXNnc3RyICJWZXJibGVpYmUgYWxzIEZvcmRlcmdydW5kcHJvemVzcyIKKworIzogUHJvZ3JhbXMvY29uZmlnLmM6NDExCittc2dpZCAiUmVtYWluIGEgZm9yZWdyb3VuZCBwcm9jZXNzLiIKK21zZ3N0ciAiVmVyYmxlaWJlIGFscyBGb3JkZXJncnVuZHByb3plc3MuIgorCisjOiBQcm9ncmFtcy9icmx0dHktdHJ0eHQuYzo3MworbXNnaWQgIlJlbW92ZSBkb3RzIHNldmVuIGFuZCBlaWdodC4iCittc2dzdHIgIkVudGZlcm5lIFB1bmt0IHNpZWJlbiB1bmQgYWNodC4iCisKKyM6IFByb2dyYW1zL2NvbmZpZy5jOjQyNgorIywgYy1mb3JtYXQKK21zZ2lkICJSZW1vdmUgdGhlICVzIHNlcnZpY2UsIGFuZCB0aGVuIGV4aXQuIgorbXNnc3RyICJFbnRmZXJuZSBkYXMgU2VydmljZSAlcyB1bmQgYmVlbmRlIGRhbm4uIgorCisjOiBQcm9ncmFtcy9icmx0dHkta3RiLmM6NDUKK21zZ2lkICJSZXBvcnQgcHJvYmxlbXMgd2l0aCB0aGUga2V5IHRhYmxlLiIKK21zZ3N0ciAiUHJvYmxlbWUgbWl0IGRlciBUYXN0YXR1ci1CZWZlaGxzdGFiZWxsZSBtZWxkZW4uIgorCisjOiBQcm9ncmFtcy9icmx0dHktdHRiLmM6MTg2Cittc2dpZCAiUmVwb3J0IHRoZSBjaGFyYWN0ZXJzIHdpdGhpbiB0aGUgY3VycmVudCBzY3JlZW4gZm9udCB0aGF0IGFyZW4ndCBkZWZpbmVkIHdpdGhpbiB0aGUgdGV4dCB0YWJsZS4iCittc2dzdHIgIkplbmUgWmVpY2hlbiBkZXIgYWt0dWVsbGVuIEJpbGRzY2hpcm1zY2hyaWZ0YXJ0IG1lbGRlbiwgd2VsY2hlIG5pY2h0IGltIGFrdHVlbGxlbiBCcmFpbGxlemVpY2hlbnNhdHogZGVmaW5pZXJ0IHNpbmQuIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6ODY2Cittc2dpZCAiUmVzdCBvZiBMaW5lIgorbXNnc3RyICJSZXN0IGRlciBaZWlsZSIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjE1NjIKK21zZ2lkICJSZXN0YXJ0IEJyYWlsbGUgRHJpdmVyIgorbXNnc3RyICJCcmFpbGxldHJlaWJlciBuZXUgc3RhcnRlbiIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjE1NzQKK21zZ2lkICJSZXN0YXJ0IFNjcmVlbiBEcml2ZXIiCittc2dzdHIgIkJpbGRzY2hpcm10cmVpYmVyIG5ldSBzdGFydGVuIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6MTU2OAorbXNnaWQgIlJlc3RhcnQgU3BlZWNoIERyaXZlciIKK21zZ3N0ciAiU3ByYWNoYXVzZ2FiZW50cmVpYmVyIG5ldSBzdGFydGVuIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgbmFtZSBvZiBNSURJIG11c2ljYWwgaW5zdHJ1bWVudCAjMTIwIChpbiB0aGUgUGVyY3Vzc2l2ZSBncm91cCkuCisjOiBQcm9ncmFtcy9taWRpLmM6NDUyCittc2dpZCAiUmV2ZXJzZSBDeW1iYWwiCittc2dzdHIgIkJlY2tlbiBSw7xja3NlaXRlIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6MTM0MgorbXNnaWQgIlJpZ2h0IgorbXNnc3RyICJSZWNodHMiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBuYW1lIG9mIE1JREkgbXVzaWNhbCBpbnN0cnVtZW50ICMxOSAoaW4gdGhlIE9yZ2FuIGdyb3VwKS4KKyM6IFByb2dyYW1zL21pZGkuYzoxMzYKK21zZ2lkICJSb2NrIE9yZ2FuIgorbXNnc3RyICJSb2NrLU9yZ2VsIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6Njc0Cittc2dpZCAiU2F2ZSBvbiBFeGl0IgorbXNnc3RyICJCZWltIFZlcmxhc3NlbiBzcGVpY2hlcm4iCisKKyMuICJjYXAiIGhlcmUsIHVzZWQgZHVyaW5nIHNwZWVjaCBvdXRwdXQsIGlzIHNob3J0IGZvciAiY2FwaXRhbCIuCisjLiBJdCBpcyBzcG9rZW4ganVzdCBiZWZvcmUgYW4gdXBwZXJjYXNlIGxldHRlciwgZS5nLiAiY2FwIEEiLgorIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjEyMDgKK21zZ2lkICJTYXkgQ2FwIgorbXNnc3RyICJTcHJpY2ggR3Jvw58iCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzoxMjMyCittc2dpZCAiU2F5IExpbmUgTW9kZSIKK21zZ3N0ciAiWmVpbGVuLVZvcmxlc2Vtb2R1cyIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjEyMTkKK21zZ2lkICJTYXkgU3BhY2UiCittc2dzdHIgIlNwcmljaCBMZWVyemVpY2hlbiIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjc4MAorbXNnaWQgIlNjcmVlbiBDdXJzb3IgQmxpbmsgUGVyaW9kIgorbXNnc3RyICJCbGlua2RhdWVyIGRlcyBCaWxkc2NoaXJtY3Vyc29ycyIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjc4OAorbXNnaWQgIlNjcmVlbiBDdXJzb3IgUGVyY2VudCBWaXNpYmxlIgorbXNnc3RyICJBbnplaWdlZGF1ZXIgZGVzIEJpbGRzY2hpcm1jdXJzb3JzIGluIFByb3plbnQiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzo3NjgKK21zZ2lkICJTY3JlZW4gQ3Vyc29yIFN0eWxlIgorbXNnc3RyICJCaWxkc2NoaXJtY3Vyc29yZGFyc3RlbGx1bmciCisKKyM6IFByb2dyYW1zL2NvbmZpZy5jOjI0NTMKK21zZ2lkICJTY3JlZW4gRHJpdmVyIgorbXNnc3RyICJCaWxkc2NoaXJtdHJlaWJlciIKKworIzogUHJvZ3JhbXMvbG9nLmM6MTYwCittc2dpZCAiU2NyZWVuIERyaXZlciBFdmVudHMiCittc2dzdHIgIkJpbGRzY2hpcm10cmVpYmVyZXJlaWduaXNzZSIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjU1MAorbXNnaWQgIlNjcmVlbiBOdW1iZXIiCittc2dzdHIgIkJpbGRzY2hpcm1udW1tZXIiCisKKyM6IFByb2dyYW1zL2NvbmZpZy5jOjI0NTkKK21zZ2lkICJTY3JlZW4gUGFyYW1ldGVyIgorbXNnc3RyICJCaWxkc2NoaXJtLVBhcmFtZXRlciIKKworIzogUHJvZ3JhbXMvY29uZmlnLmM6NjkzCisjLCBjLWZvcm1hdAorbXNnaWQgIlNjcmVlbiBkcml2ZXIgY29kZSAoJXMsICVzLCBvciBvbmUgb2YgeyVzfSkuIgorbXNnc3RyICJCaWxkc2NoaXJtdHJlaWJlciBLdXJ6YmV6ZWljaG51bmcgKCVzLCAlcywgb2RlciBlaW5lIHZvbiB7JXN9KS4iCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzo4OTEKK21zZ2lkICJTY3JvbGwtYXdhcmUgQ3Vyc29yIE5hdmlnYXRpb24iCittc2dzdHIgIlNjcm9sbHNlbnNpdGl2ZSBDdXJzb3JuYXZpZ2F0aW9uIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgbmFtZSBvZiBNSURJIG11c2ljYWwgaW5zdHJ1bWVudCAjMTIzIChpbiB0aGUgU291bmQgRWZmZWN0cyBncm91cCkuCisjOiBQcm9ncmFtcy9taWRpLmM6NDYyCittc2dpZCAiU2Vhc2hvcmUiCittc2dzdHIgIkJyYW5kdW5nIgorCisjOiBQcm9ncmFtcy9sb2cuYzoxMzAKK21zZ2lkICJTZXJpYWwgSS9PIgorbXNnc3RyICJTZXJpZWxsZSBFL0EiCisKKyM6IFByb2dyYW1zL2xvZy5jOjEyNAorbXNnaWQgIlNlcnZlciBFdmVudHMiCittc2dzdHIgIlNlcnZlciBFcmVpZ25pc3NlIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgbmFtZSBvZiBNSURJIG11c2ljYWwgaW5zdHJ1bWVudCAjNzggKGluIHRoZSBQaXBlIGdyb3VwKS4KKyM6IFByb2dyYW1zL21pZGkuYzozMjAKK21zZ2lkICJTaGFrdWhhY2hpIgorbXNnc3RyICJTaGFrdWhhY2hpIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgbmFtZSBvZiBNSURJIG11c2ljYWwgaW5zdHJ1bWVudCAjMTA3IChpbiB0aGUgRXRobmljIGdyb3VwKS4KKyM6IFByb2dyYW1zL21pZGkuYzo0MTIKK21zZ2lkICJTaGFtaXNlbiIKK21zZ3N0ciAiU2hhbWlzZW4iCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBuYW1lIG9mIE1JREkgbXVzaWNhbCBpbnN0cnVtZW50ICMxMTIgKGluIHRoZSBFdGhuaWMgZ3JvdXApLgorIzogUHJvZ3JhbXMvbWlkaS5jOjQyNworbXNnaWQgIlNoYW5haSIKK21zZ3N0ciAiU2hhbmFpIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6Njg3Cittc2dpZCAiU2hvdyBBZHZhbmNlZCBTdWJtZW51cyIKK21zZ3N0ciAiWmVpZ2UgZXJ3ZWl0ZXJ0ZSBVbnRlcm1lbsO8cyIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjY5MgorbXNnaWQgIlNob3cgQWxsIEl0ZW1zIgorbXNnc3RyICJaZWlnZSBhbGxlIEVsZW1lbnRlIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6Nzk2Cittc2dpZCAiU2hvdyBBdHRyaWJ1dGVzIgorbXNnc3RyICJaZWlnZSBBdHRyaWJ1dGUiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzo3NjMKK21zZ2lkICJTaG93IFNjcmVlbiBDdXJzb3IiCittc2dzdHIgIlplaWdlIEJpbGRzY2hpcm1jdXJzb3IiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzoxMjk1Cittc2dpZCAiU2hvdyBTZWNvbmRzIgorbXNnc3RyICJTZWt1bmRlbiBhbnplaWdlbiIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjEyMzcKK21zZ2lkICJTaG93IFNwZWVjaCBDdXJzb3IiCittc2dzdHIgIlplaWdlIFNwcmFjaGN1cnNvciIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjY4MgorbXNnaWQgIlNob3cgU3VibWVudSBTaXplcyIKK21zZ3N0ciAiWmVpZ2UgR3LDtsOfZW4gdm9uIFVudGVybWVuw7xzIgorCisjLiBFdGhuaWMgSW5zdHJ1bWVudHMKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBuYW1lIG9mIE1JREkgbXVzaWNhbCBpbnN0cnVtZW50ICMxMDUgKGluIHRoZSBFdGhuaWMgZ3JvdXApLgorIzogUHJvZ3JhbXMvbWlkaS5jOjQwNgorbXNnaWQgIlNpdGFyIgorbXNnc3RyICJTaXRhciIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjg1OAorbXNnaWQgIlNraXAgQmxhbmsgQnJhaWxsZSBXaW5kb3dzIgorbXNnc3RyICJMZWVyZSBCcmFpbGxlemVpbGVuaW5oYWx0ZSDDvGJlcnNwcmluZ2VuIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6ODUyCittc2dpZCAiU2tpcCBJZGVudGljYWwgTGluZXMiCittc2dzdHIgIklkZW50aXNjaGUgWmVpbGVuIMO8YmVyc3ByaW5nZW4iCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzo4NjkKKyMsIGZ1enp5Cittc2dpZCAiU2tpcCBXaGljaCBCbGFuayBCcmFpbGxlIFdpbmRvd3MiCittc2dzdHIgIlp1IMO8YmVyc3ByaW5nZW5kZSBsZWVyZSBCcmFpbGxlLUluaGFsdGUiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBuYW1lIG9mIE1JREkgbXVzaWNhbCBpbnN0cnVtZW50ICMzNyAoaW4gdGhlIEJhc3MgZ3JvdXApLgorIzogUHJvZ3JhbXMvbWlkaS5jOjE5MgorbXNnaWQgIlNsYXAgQmFzcyAxIgorbXNnc3RyICJHZXNjaGxhZ2VuZXIgQmFzcyAxIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgbmFtZSBvZiBNSURJIG11c2ljYWwgaW5zdHJ1bWVudCAjMzggKGluIHRoZSBCYXNzIGdyb3VwKS4KKyM6IFByb2dyYW1zL21pZGkuYzoxOTUKK21zZ2lkICJTbGFwIEJhc3MgMiIKK21zZ3N0ciAiR2VzY2hsYWdlbmVyIEJhc3MgMiIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjEzMjUKK21zZ2lkICJTbGFzaCIKK21zZ3N0ciAiU2NocsOkZ3N0cmljaCIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjg3NAorbXNnaWQgIlNsaWRpbmcgQnJhaWxsZSBXaW5kb3ciCittc2dzdHIgIsO8YmVybGFwcGVuZGUgQnJhaWxsZXplaWxlbmF1c3NjaG5pdHRlIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6MTE5MworbXNnaWQgIlNvbWUiCittc2dzdHIgIkVpbmlnZSIKKworIy4gUmVlZAorIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIG5hbWUgb2YgTUlESSBtdXNpY2FsIGluc3RydW1lbnQgIzY1IChpbiB0aGUgUmVlZCBncm91cCkuCisjOiBQcm9ncmFtcy9taWRpLmM6MjgwCittc2dpZCAiU29wcmFubyBTYXhvcGhvbmUiCittc2dzdHIgIiIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIG5hbWUgb2YgTUlESSBtdXNpY2FsIGluc3RydW1lbnQgZ3JvdXAgIzE2LgorIzogUHJvZ3JhbXMvbWlkaS5jOjc0Cittc2dpZCAiU291bmQgRWZmZWN0cyIKK21zZ3N0ciAiU291bmRlZmZla3RlIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6NTYxIFByb2dyYW1zL21lbnVfcHJlZnMuYzoxMzYxCittc2dpZCAiU3BhY2UiCittc2dzdHIgIkxlZXIiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzoxMTU0Cittc2dpZCAiU3BlYWsgQ29tcGxldGVkIFdvcmRzIgorbXNnc3RyICJTcHJpY2ggdmVydm9sbHN0w6RuZGlndGUgV8O2cnRlciIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjExNDIKK21zZ2lkICJTcGVhayBEZWxldGVkIENoYXJhY3RlcnMiCittc2dzdHIgIlNwcmljaCBnZWzDtnNjaHRlIFplaWNoZW4iCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzoxMTM2Cittc2dpZCAiU3BlYWsgSW5zZXJ0ZWQgQ2hhcmFjdGVycyIKK21zZ3N0ciAiU3ByaWNoIGVpbmdlZsO8Z3RlIFplaWNoZW4iCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzoxMTYwCittc2dpZCAiU3BlYWsgTGluZSBJbmRlbnQiCittc2dzdHIgIlplaWxlbi1FaW5yw7xja3VuZyBzcHJlY2hlbiIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjExNDgKK21zZ2lkICJTcGVhayBSZXBsYWNlZCBDaGFyYWN0ZXJzIgorbXNnc3RyICJTcHJpY2ggZXJzZXR6dGUgWmVpY2hlbiIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjExMzAKK21zZ2lkICJTcGVhayBTZWxlY3RlZCBDaGFyYWN0ZXIiCittc2dzdHIgIlNwcmljaCBoZXJ2b3JnZWhvYmVuZXMgWmVpY2hlbiIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjExMjQKK21zZ2lkICJTcGVhayBTZWxlY3RlZCBMaW5lIgorbXNnc3RyICJTcHJpY2ggaGVydm9yZ2Vob2JlbmUgWmVpbGUiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzoxMjU0Cittc2dpZCAiU3BlZWNoIEN1cnNvciBCbGluayBQZXJpb2QiCittc2dzdHIgIkJsaW5rZGF1ZXIgZGVzIFNwcmFjaGN1cnNvcnMiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzoxMjYyCittc2dpZCAiU3BlZWNoIEN1cnNvciBQZXJjZW50IFZpc2libGUiCittc2dzdHIgIkFuemVpZ2VkYXVlciBkZXMgU3ByYWNoY3Vyc29ycyBpbiBQcm96ZW50IgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6MTI0MgorbXNnaWQgIlNwZWVjaCBDdXJzb3IgU3R5bGUiCittc2dzdHIgIlNwcmFjaGN1cnNvcmRhcnN0ZWxsdW5nIgorCisjOiBQcm9ncmFtcy9jb25maWcuYzoyMjI4Cittc2dpZCAiU3BlZWNoIERyaXZlciIKK21zZ3N0ciAiU3ByYWNoYXVzZ2FiZW50cmVpYmVyIgorCisjOiBQcm9ncmFtcy9sb2cuYzoxNTQKK21zZ2lkICJTcGVlY2ggRHJpdmVyIEV2ZW50cyIKK21zZ3N0ciAiRXJlaWduaXNzZSBkZXMgU3ByYWNoYXVzZ2FiZW50cmVpYmVycyIKKworIzogUHJvZ3JhbXMvbG9nLmM6MTEyCittc2dpZCAiU3BlZWNoIEV2ZW50cyIKK21zZ3N0ciAiU3ByYWNoYXVzZ2FiZW5lcmVpZ25pc3NlIgorCisjLiBDcmVhdGUgdGhlIGZpbGUgc3lzdGVtIG9iamVjdCBmb3Igc3BlZWNoIGlucHV0LgorIzogUHJvZ3JhbXMvY29uZmlnLmM6MzAyMworbXNnaWQgIlNwZWVjaCBJbnB1dCIKK21zZ3N0ciAiU3ByYWNoZWluZ2FiZSIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjExNjcKK21zZ2lkICJTcGVlY2ggT3B0aW9ucyIKK21zZ3N0ciAiU3ByYWNoYXVzZ2FiZW5vcHRpb25lbiIKKworIzogUHJvZ3JhbXMvY29uZmlnLmM6MjIzMQorbXNnaWQgIlNwZWVjaCBQYXJhbWV0ZXIiCittc2dzdHIgIlNwcmFjaGF1c2dhYmVuLVBhcmFtZXRlciIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjExODQKK21zZ2lkICJTcGVlY2ggUGl0Y2giCittc2dzdHIgIlRvbmjDtmhlIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6MTE5NworbXNnaWQgIlNwZWVjaCBQdW5jdHVhdGlvbiIKK21zZ3N0ciAiU2F0enplaWNoZW5hbnNhZ2UiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzoxMTc3Cittc2dpZCAiU3BlZWNoIFJhdGUiCittc2dzdHIgIlNwcmVjaGdlc2Nod2luZGlna2VpdCIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjEyMTIKK21zZ2lkICJTcGVlY2ggVXBwZXJjYXNlIEluZGljYXRvciIKK21zZ3N0ciAiR3Jvw59idWNoc3RhYmVuYW5zYWdlIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6MTE3MAorbXNnaWQgIlNwZWVjaCBWb2x1bWUiCittc2dzdHIgIlNwcmFjaGxhdXRzdMOkcmtlIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6MTIyMgorbXNnaWQgIlNwZWVjaCBXaGl0ZXNwYWNlIEluZGljYXRvciIKK21zZ3N0ciAiTGVlcnJhdW1hbnNhZ2UiCisKKyM6IFByb2dyYW1zL2NvbmZpZy5jOjY1MAorIywgYy1mb3JtYXQKK21zZ2lkICJTcGVlY2ggZHJpdmVyIGNvZGUgKCVzLCAlcywgb3Igb25lIG9mIHslc30pLiIKK21zZ3N0ciAiU3ByYWNoYXVzZ2FiZW50cmVpYmVyIEt1cnpiZXplaWNobnVuZyAoJXMsICVzLCBvZGVyIGVpbmUgdm9uIHslc30pLiIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjE1MDkKK21zZ2lkICJTdGFuZGFyZCBFcnJvciBMb2cgTGV2ZWwiCittc2dzdHIgIlByb3Rva29sbGllcnVuZ3NhdXNmw7xocmxpY2hrZWl0IGbDvHIgZGllIFN0YW5kYXJkLUZlaGxlcmF1c2dhYmUiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzo5MjYKK21zZ2lkICJTdGFydCBTZWxlY3Rpb24gd2l0aCBSb3V0aW5nIEtleSIKK21zZ3N0ciAiQXVzd2FobCBkdXJjaCBDdXJzb3Jyb3V0aW5nLVRhc3RlIHN0YXJ0ZW4iCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzo1NTEKK21zZ2lkICJTdGF0ZSBEb3RzIgorbXNnc3RyICJTdGF0dXNwdW5rdGUiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzo1NTIKK21zZ2lkICJTdGF0ZSBMZXR0ZXIiCittc2dzdHIgIlN0YXR1c2J1Y2hzdGFiZSIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjEzMzYKK21zZ2lkICJTdGF0dXMgQ2VsbHMiCittc2dzdHIgIlN0YXR1c3plbGxlbiIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjEzNTIKK21zZ2lkICJTdGF0dXMgQ291bnQiCittc2dzdHIgIkdlc2FtdGFuemFobCBkZXIgU3RhdHVzemVsbGVuIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6NTY1Cittc2dpZCAiU3RhdHVzIEZpZWxkIgorbXNnc3RyICJTdGF0dXNmZWxkIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6MTM0NQorbXNnaWQgIlN0YXR1cyBQb3NpdGlvbiIKK21zZ3N0ciAiUG9zaXRpb24gZGVyIFN0YXR1c3plbGxlbiIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjEzNjcKK21zZ2lkICJTdGF0dXMgU2VwYXJhdG9yIgorbXNnc3RyICJTdGF0dXMtVHJlbm56ZWljaGVuIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6MTM2MworbXNnaWQgIlN0YXR1cyBTaWRlIgorbXNnc3RyICJTdGF0dXNzZWl0aWciCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBuYW1lIG9mIE1JREkgbXVzaWNhbCBpbnN0cnVtZW50ICMxMTUgKGluIHRoZSBQZXJjdXNzaXZlIGdyb3VwKS4KKyM6IFByb2dyYW1zL21pZGkuYzo0MzcKK21zZ2lkICJTdGVlbCBEcnVtcyIKK21zZ3N0ciAiU3RlZWwgRHJ1bXMiCisKKyM6IFByb2dyYW1zL2NvbmZpZy5jOjQ1MAorIywgYy1mb3JtYXQKK21zZ2lkICJTdG9wIGFuIGV4aXN0aW5nIGluc3RhbmNlIG9mICVzLCBhbmQgdGhlbiBleGl0LiIKK21zZ3N0ciAiU3RvcHBlIGVpbmUgbGF1ZmVuZGUgSW5zdGFueiB2b24gJXMgdW5kIGJlZW5kZSBkYW5uLiIKKworIy4gRW5zZW1ibGUKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBuYW1lIG9mIE1JREkgbXVzaWNhbCBpbnN0cnVtZW50ICM0OSAoaW4gdGhlIEVuc2VtYmxlIGdyb3VwKS4KKyM6IFByb2dyYW1zL21pZGkuYzoyMzAKK21zZ2lkICJTdHJpbmcgRW5zZW1ibGUgMSIKK21zZ3N0ciAiU2FpdGVuIEVuc2VtYmxlIDEiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBuYW1lIG9mIE1JREkgbXVzaWNhbCBpbnN0cnVtZW50ICM1MCAoaW4gdGhlIEVuc2VtYmxlIGdyb3VwKS4KKyM6IFByb2dyYW1zL21pZGkuYzoyMzMKK21zZ2lkICJTdHJpbmcgRW5zZW1ibGUgMiIKK21zZ3N0ciAiU2FpdGVuIEVuc2VtYmxlIDIiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBuYW1lIG9mIE1JREkgbXVzaWNhbCBpbnN0cnVtZW50IGdyb3VwICM2LgorIzogUHJvZ3JhbXMvbWlkaS5jOjQwCittc2dpZCAiU3RyaW5ncyIKK21zZ3N0ciAiU2FpdGVuaW5zdHJ1bWVudGUiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzo3MjIKK21zZ2lkICJTdXBlcmltcG9zZSBEb3QgNyIKK21zZ3N0ciAiUHVua3QgNyBoaW56dWbDvGdlbiIKKworIzogUHJvZ3JhbXMvY29uZmlnLmM6NzQ0Cittc2dpZCAiU3VwcHJlc3Mgc3RhcnQtdXAgbWVzc2FnZXMuIgorbXNnc3RyICJVbnRlcmRyw7xja2UgTWVsZHVuZ2VuIHp1bSBTdGFydHZvcmdhbmcuIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgbmFtZSBvZiBNSURJIG11c2ljYWwgaW5zdHJ1bWVudCAjMzkgKGluIHRoZSBCYXNzIGdyb3VwKS4KKyM6IFByb2dyYW1zL21pZGkuYzoxOTgKK21zZ2lkICJTeW50aCBCYXNzIDEiCittc2dzdHIgIlN5bnRoIEJhc3MgMSIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIG5hbWUgb2YgTUlESSBtdXNpY2FsIGluc3RydW1lbnQgIzQwIChpbiB0aGUgQmFzcyBncm91cCkuCisjOiBQcm9ncmFtcy9taWRpLmM6MjAxCittc2dpZCAiU3ludGggQmFzcyAyIgorbXNnc3RyICJTeW50aCBCYXNzIDIiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBuYW1lIG9mIE1JREkgbXVzaWNhbCBpbnN0cnVtZW50ICMxMTkgKGluIHRoZSBQZXJjdXNzaXZlIGdyb3VwKS4KKyM6IFByb2dyYW1zL21pZGkuYzo0NDkKK21zZ2lkICJTeW50aCBEcnVtIgorbXNnc3RyICJTeW50aCBUcm9tbWVsIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgbmFtZSBvZiBNSURJIG11c2ljYWwgaW5zdHJ1bWVudCBncm91cCAjMTMuCisjLiB4Z2V0dGV4dDogKHN5bnRoIGlzIGEgY29tbW9uIHNob3J0IGZvcm0gZm9yIHN5bnRoZXNpemVyKQorIy4geGdldHRleHQ6IChGTSBpcyB0aGUgYWNyb255bSBmb3IgRnJlcXVlbmN5IE1vZHVsYXRpb24pCisjOiBQcm9ncmFtcy9taWRpLmM6NjUKK21zZ2lkICJTeW50aCBGTSIKK21zZ3N0ciAiU3ludGggRk0iCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBuYW1lIG9mIE1JREkgbXVzaWNhbCBpbnN0cnVtZW50IGdyb3VwICMxMS4KKyMuIHhnZXR0ZXh0OiAoc3ludGggaXMgYSBjb21tb24gc2hvcnQgZm9ybSBmb3Igc3ludGhlc2l6ZXIpCisjOiBQcm9ncmFtcy9taWRpLmM6NTYKK21zZ2lkICJTeW50aCBMZWFkIgorbXNnc3RyICJTeW50aCBIYXVwdHN0aW1tZSIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIG5hbWUgb2YgTUlESSBtdXNpY2FsIGluc3RydW1lbnQgZ3JvdXAgIzEyLgorIy4geGdldHRleHQ6IChzeW50aCBpcyBhIGNvbW1vbiBzaG9ydCBmb3JtIGZvciBzeW50aGVzaXplcikKKyM6IFByb2dyYW1zL21pZGkuYzo2MAorbXNnaWQgIlN5bnRoIFBhZCIKK21zZ3N0ciAiU3ludGggQmFzaXNzdGltbWUiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBuYW1lIG9mIE1JREkgbXVzaWNhbCBpbnN0cnVtZW50ICM1NSAoaW4gdGhlIEVuc2VtYmxlIGdyb3VwKS4KKyM6IFByb2dyYW1zL21pZGkuYzoyNDgKK21zZ2lkICJTeW50aCBWb2ljZSIKK21zZ3N0ciAiU3ludGggU3RpbW1lIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgbmFtZSBvZiBNSURJIG11c2ljYWwgaW5zdHJ1bWVudCAjNjMgKGluIHRoZSBCcmFzcyBncm91cCkuCisjOiBQcm9ncmFtcy9taWRpLmM6MjczCittc2dpZCAiU3ludGhCcmFzcyAxIgorbXNnc3RyICJTeW50aCBCbGVjaGJsw6RzZXIgMSIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIG5hbWUgb2YgTUlESSBtdXNpY2FsIGluc3RydW1lbnQgIzY0IChpbiB0aGUgQnJhc3MgZ3JvdXApLgorIzogUHJvZ3JhbXMvbWlkaS5jOjI3NgorbXNnaWQgIlN5bnRoQnJhc3MgMiIKK21zZ3N0ciAiU3ludGggQmxlY2hibMOkc2VyIDIiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBuYW1lIG9mIE1JREkgbXVzaWNhbCBpbnN0cnVtZW50ICM1MSAoaW4gdGhlIEVuc2VtYmxlIGdyb3VwKS4KKyM6IFByb2dyYW1zL21pZGkuYzoyMzYKK21zZ2lkICJTeW50aFN0cmluZ3MgMSIKK21zZ3N0ciAiU3ludGggU2FpdGVuaW5zdHJ1bWVudGUgMSIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIG5hbWUgb2YgTUlESSBtdXNpY2FsIGluc3RydW1lbnQgIzUyIChpbiB0aGUgRW5zZW1ibGUgZ3JvdXApLgorIzogUHJvZ3JhbXMvbWlkaS5jOjIzOQorbXNnaWQgIlN5bnRoU3RyaW5ncyAyIgorbXNnc3RyICJTeW50aCBTYWl0ZW5pbnN0cnVtZW50ZSAyIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6MTUwNAorbXNnaWQgIlN5c3RlbSBMb2cgTGV2ZWwiCittc2dzdHIgIlN5c3RlbS1Qcm90b2tvbGxpZXJ1bmdzYXVzZsO8aHJsaWNoa2VpdCIKKworIzogUHJvZ3JhbXMvY29uZmlnLmM6Mjk3NyBQcm9ncmFtcy9tZW51X3ByZWZzLmM6MTQ3OAorbXNnaWQgIlRhYmxlcyBEaXJlY3RvcnkiCittc2dzdHIgIlRhYmVsbGVudmVyemVpY2huaXMiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBuYW1lIG9mIE1JREkgbXVzaWNhbCBpbnN0cnVtZW50ICMxMTcgKGluIHRoZSBQZXJjdXNzaXZlIGdyb3VwKS4KKyM6IFByb2dyYW1zL21pZGkuYzo0NDMKK21zZ2lkICJUYWlrbyBEcnVtIgorbXNnc3RyICJUYWlrby1Ucm9tbWVsIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgbmFtZSBvZiBNSURJIG11c2ljYWwgaW5zdHJ1bWVudCAjMjQgKGluIHRoZSBPcmdhbiBncm91cCkuCisjOiBQcm9ncmFtcy9taWRpLmM6MTUxCittc2dpZCAiVGFuZ28gQWNjb3JkaW9uIgorbXNnc3RyICJCYW5kb25lb24iCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBuYW1lIG9mIE1JREkgbXVzaWNhbCBpbnN0cnVtZW50ICMxMjUgKGluIHRoZSBTb3VuZCBFZmZlY3RzIGdyb3VwKS4KKyM6IFByb2dyYW1zL21pZGkuYzo0NjgKK21zZ2lkICJUZWxlcGhvbmUgUmluZyIKK21zZ3N0ciAiVGVsZWZvbmtsaW5nZWxuIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgbmFtZSBvZiBNSURJIG11c2ljYWwgaW5zdHJ1bWVudCAjNjcgKGluIHRoZSBSZWVkIGdyb3VwKS4KKyM6IFByb2dyYW1zL21pZGkuYzoyODYKK21zZ2lkICJUZW5vciBTYXhvcGhvbmUiCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjc2MAorbXNnaWQgIlRleHQgSW5kaWNhdG9ycyIKK21zZ3N0ciAiRGFyc3RlbGx1bmdzZm9ybSIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjEzNjQKK21zZ2lkICJUZXh0IFNpZGUiCittc2dzdHIgIlRleHRzZWl0aWciCisKKyM6IFByb2dyYW1zL2NvbmZpZy5jOjEwMDMgUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjEzOTIKK21zZ2lkICJUZXh0IFRhYmxlIgorbXNnc3RyICJUZXh0dGFiZWxsZSIKKworIzogUHJvZ3JhbXMvYnJsdHR5LWN0Yi5jOjY5Cittc2dpZCAiVGV4dCB0YWJsZS4iCittc2dzdHIgIlRleHR0YWJlbGxlLiIKKworIzogUHJvZ3JhbXMvY29uZmlnLmM6MzgxCittc2dpZCAiVGhlIHRleHQgdG8gYmUgc2hvd24gd2hlbiB0aGUgYnJhaWxsZSBkcml2ZXIgc3RhcnRzIGFuZCB0byBiZSBzcG9rZW4gd2hlbiB0aGUgc3BlZWNoIGRyaXZlciBzdGFydHMuIgorbXNnc3RyICJUZXh0IGRlciBhbmdlemVpZ3QgdW5kL29kZXIgZ2VzcHJvY2hlbiB3ZXJkZW4gc29sbCwgd2VubiBkZXIgQnJhaWxsZS0gdW5kL29kZXIgU3ByYWNoYXVzZ2FiZW50cmVpYmVyIGdlc3RhcnRldCB3aXJkLiIKKworIzogUHJvZ3JhbXMvY29uZmlnLmM6Mzg4Cittc2dpZCAiVGhlIHRleHQgdG8gYmUgc2hvd24gd2hlbiB0aGUgYnJhaWxsZSBkcml2ZXIgc3RvcHMuIgorbXNnc3RyICJUZXh0IGRlciBnZXplaWd0IHdlcmRlbiBzb2xsIHdlbm4gZGVyIEJyYWlsbGV0cmVpYmVyIGFuZ2VoYWx0ZW4gd2lyZC4iCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzo1NTMKK21zZ2lkICJUaW1lIgorbXNnc3RyICJVaHJ6ZWl0IgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6MTI4MAorbXNnaWQgIlRpbWUgRm9ybWF0IgorbXNnc3RyICJaZWl0Zm9ybWF0IgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6MTI3MgorbXNnaWQgIlRpbWUgUHJlc2VudGF0aW9uIgorbXNnc3RyICJaZWl0YW56ZWlnZSIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjEyOTAKK21zZ2lkICJUaW1lIFNlcGFyYXRvciIKK21zZ3N0ciAiVWhyemVpdC1UcmVubnplaWNoZW4iCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBuYW1lIG9mIE1JREkgbXVzaWNhbCBpbnN0cnVtZW50ICM0OCAoaW4gdGhlIFN0cmluZ3MgZ3JvdXApLgorIzogUHJvZ3JhbXMvbWlkaS5jOjIyNgorbXNnaWQgIlRpbXBhbmkiCittc2dzdHIgIlBhdWtlbiIKKworIy4gUGVyY3Vzc2l2ZSBJbnN0cnVtZW50cworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIG5hbWUgb2YgTUlESSBtdXNpY2FsIGluc3RydW1lbnQgIzExMyAoaW4gdGhlIFBlcmN1c3NpdmUgZ3JvdXApLgorIzogUHJvZ3JhbXMvbWlkaS5jOjQzMQorbXNnaWQgIlRpbmtsZSBCZWxsIgorbXNnc3RyICJHbMO2Y2tjaGVuIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6MTU1OAorbXNnaWQgIlRvb2xzIgorbXNnc3RyICJXZXJremV1Z2UiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzoxMDAzCittc2dpZCAiVG91Y2ggTmF2aWdhdGlvbiIKK21zZ3N0ciAiQmVyw7xocnVuZ3NiYXNpZXJ0ZSBOYXZpZ2F0aW9uIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6MTAxNworbXNnaWQgIlRvdWNoIFNlbnNpdGl2aXR5IgorbXNnc3RyICJCZXLDvGhydW5nc2VtcGZpbmRsaWNoa2VpdCIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjkxNQorbXNnaWQgIlRyYWNrIFNjcmVlbiBQb2ludGVyIgorbXNnc3RyICJNYXVzemVpZ2VydmVyZm9sZ3VuZyIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjkwOQorbXNnaWQgIlRyYWNrIFNjcmVlbiBTY3JvbGwiCittc2dzdHIgIkJpbGRzY2hpcm1zY3JvbGx2ZXJmb2xndW5nIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6OTQxCittc2dpZCAiVHJhbnNsYXRlZCB2aWEgVGV4dCBUYWJsZSIKK21zZ3N0ciAiRHVyY2ggVGV4dHRhYmVsbGUgw7xiZXJzZXR6dCIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIG5hbWUgb2YgTUlESSBtdXNpY2FsIGluc3RydW1lbnQgIzQ1IChpbiB0aGUgU3RyaW5ncyBncm91cCkuCisjOiBQcm9ncmFtcy9taWRpLmM6MjE3Cittc2dpZCAiVHJlbW9sbyBTdHJpbmdzIgorbXNnc3RyICJUcmVtb2xvIFNhaXRlbiIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIG5hbWUgb2YgTUlESSBtdXNpY2FsIGluc3RydW1lbnQgIzU4IChpbiB0aGUgQnJhc3MgZ3JvdXApLgorIzogUHJvZ3JhbXMvbWlkaS5jOjI1OAorbXNnaWQgIlRyb21ib25lIgorbXNnc3RyICJQb3NhdW5lIgorCisjLiBCcmFzcworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIG5hbWUgb2YgTUlESSBtdXNpY2FsIGluc3RydW1lbnQgIzU3IChpbiB0aGUgQnJhc3MgZ3JvdXApLgorIzogUHJvZ3JhbXMvbWlkaS5jOjI1NQorbXNnaWQgIlRydW1wZXQiCittc2dzdHIgIlRyb21wZXRlIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgbmFtZSBvZiBNSURJIG11c2ljYWwgaW5zdHJ1bWVudCAjNTkgKGluIHRoZSBCcmFzcyBncm91cCkuCisjOiBQcm9ncmFtcy9taWRpLmM6MjYxCittc2dpZCAiVHViYSIKK21zZ3N0ciAiVHViYSIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIG5hbWUgb2YgTUlESSBtdXNpY2FsIGluc3RydW1lbnQgIzE1IChpbiB0aGUgQ2hyb21hdGljIFBlcmN1c3Npb24gZ3JvdXApLgorIzogUHJvZ3JhbXMvbWlkaS5jOjEyMworbXNnaWQgIlR1YnVsYXIgQmVsbHMiCittc2dzdHIgIlLDtmhyZW5nbG9ja2VuIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6MTA2MgorbXNnaWQgIlR1bmUgRGV2aWNlIgorbXNnc3RyICJUb25nZWJlciIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjk0NQorbXNnaWQgIlR5cGluZyBNb2RlIgorbXNnc3RyICJFaW5nYWJlLU1vZHVzIgorCisjOiBQcm9ncmFtcy9sb2cuYzoxMzYKK21zZ2lkICJVU0IgSS9PIgorbXNnc3RyICJVU0IgRS9BIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6NjY0Cittc2dpZCAiVW5kZXJsaW5lIgorbXNnc3RyICJVbnRlcmxlZ3VuZyIKKworIzogUHJvZ3JhbXMvYWxlcnQuYzoxMDIKK21zZ2lkICJVbmZyb3plbiIKK21zZ3N0ciAiQXVmZ2V0YXV0IgorCisjOiBQcm9ncmFtcy9jb25maWcuYzoyOTc0IFByb2dyYW1zL21lbnVfcHJlZnMuYzoxNDU4Cittc2dpZCAiVXBkYXRhYmxlIERpcmVjdG9yeSIKK21zZ3N0ciAiTW9kaWZpemllcmJhcmVzIFZlcnplaWNobmlzIgorCisjOiBQcm9ncmFtcy9sb2cuYzoxMDYKK21zZ2lkICJVcGRhdGUgRXZlbnRzIgorbXNnc3RyICJVcGRhdGUgRXJlaWduaXNzZSIKKworIzogUHJvZ3JhbXMvb3B0aW9ucy5jOjE5NworbXNnaWQgIlVzYWdlIgorbXNnc3RyICJCZW51dHp1bmciCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzo3MjEKK21zZ2lkICJVc2UgQ2FwaXRhbCBTaWduIgorbXNnc3RyICJWZXJ3ZW5kZSBHcm/Dn3NjaHJlaWJ1bmdzemVpY2hlbiIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIG5hbWUgb2YgTUlESSBtdXNpY2FsIGluc3RydW1lbnQgIzEyIChpbiB0aGUgQ2hyb21hdGljIFBlcmN1c3Npb24gZ3JvdXApLgorIzogUHJvZ3JhbXMvbWlkaS5jOjExNAorbXNnaWQgIlZpYnJhcGhvbmUiCittc2dzdHIgIlZpYnJhcGhvbiIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIG5hbWUgb2YgTUlESSBtdXNpY2FsIGluc3RydW1lbnQgIzQyIChpbiB0aGUgU3RyaW5ncyBncm91cCkuCisjOiBQcm9ncmFtcy9taWRpLmM6MjA4Cittc2dpZCAiVmlvbGEiCittc2dzdHIgIkJyYXRzY2hlIgorCisjLiBTdHJpbmdzCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgbmFtZSBvZiBNSURJIG11c2ljYWwgaW5zdHJ1bWVudCAjNDEgKGluIHRoZSBTdHJpbmdzIGdyb3VwKS4KKyM6IFByb2dyYW1zL21pZGkuYzoyMDUKK21zZ2lkICJWaW9saW4iCittc2dzdHIgIlZpb2xpbmUiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBuYW1lIG9mIE1JREkgbXVzaWNhbCBpbnN0cnVtZW50ICM1NCAoaW4gdGhlIEVuc2VtYmxlIGdyb3VwKS4KKyM6IFByb2dyYW1zL21pZGkuYzoyNDUKK21zZ2lkICJWb2ljZSBPb2hzIgorbXNnc3RyICJTdGltbWUgKE9vaCkiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzoxNDk0Cittc2dpZCAiV2FybmluZyIKK21zZ3N0ciAiV2FybnVuZyIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjE0MzgKK21zZ2lkICJXZWIgU2l0ZSIKK21zZ3N0ciAiV2Vic2VpdGUiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBuYW1lIG9mIE1JREkgbXVzaWNhbCBpbnN0cnVtZW50ICM3OSAoaW4gdGhlIFBpcGUgZ3JvdXApLgorIzogUHJvZ3JhbXMvbWlkaS5jOjMyMworbXNnaWQgIldoaXN0bGUiCittc2dzdHIgIlBmZWlmZSIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjU0MworbXNnaWQgIldpbmRvdyBDb2x1bW4iCittc2dzdHIgIkJyYWlsbGV6ZWlsZW5zcGFsdGUiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzo1NDIgUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjU1OAorbXNnaWQgIldpbmRvdyBDb29yZGluYXRlcyIKK21zZ3N0ciAiQnJhaWxsZXplaWxlbmtvb3JkaW5hdGVuIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6NTQ0Cittc2dpZCAiV2luZG93IFJvdyIKK21zZ3N0ciAiQnJhaWxsZXppZWxlbnplaWxlIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgbmFtZSBvZiBNSURJIG11c2ljYWwgaW5zdHJ1bWVudCAjMTE2IChpbiB0aGUgUGVyY3Vzc2l2ZSBncm91cCkuCisjOiBQcm9ncmFtcy9taWRpLmM6NDQwCittc2dpZCAiV29vZGJsb2NrIgorbXNnc3RyICJIb2x6YmxvY2siCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzo4NDgKK21zZ2lkICJXb3JkIFdyYXAiCittc2dzdHIgIldvcnR1bWJydWNoIgorCisjOiBQcm9ncmFtcy9jb25maWcuYzoyOTQ4Cittc2dpZCAiV29ya2luZyBEaXJlY3RvcnkiCittc2dzdHIgIkFyYmVpdHN2ZXJ6ZWljaG5pcyIKKworIzogUHJvZ3JhbXMvY29uZmlnLmM6Mjk3NSBQcm9ncmFtcy9tZW51X3ByZWZzLmM6MTQ2OAorbXNnaWQgIldyaXRhYmxlIERpcmVjdG9yeSIKK21zZ3N0ciAiVmVyemVpY2huaXMgbWl0IFNjaHJlaWJ6dWdyaWZmIgorCisjOiBQcm9ncmFtcy94YnJsYXBpLmM6MTE4Cittc2dpZCAiV3JpdGUgZGVidWdnaW5nIG91dHB1dCB0byBzdGRvdXQiCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvY29uZmlnLmM6NzY3Cittc2dpZCAiV3JpdGUgdGhlIHN0YXJ0LXVwIGxvZ3MsIGFuZCB0aGVuIGV4aXQuIgorbXNnc3RyICJTY2hyZWliZSBkYXMgU3RhcnRwcm90b2tvbGwgdW5kIGJlZW5kZSBkYW5uLiIKKworIzogUHJvZ3JhbXMveGJybGFwaS5jOjEwMAorbXNnaWQgIlggZGlzcGxheSB0byBjb25uZWN0IHRvIgorbXNnc3RyICJYIERpc3BsYXkgbWl0IGRlbSBWZXJiaW5kdW5nIGF1Zmdlbm9tbWVuIHdlcmRlbiBzb2xsIgorCisjOiBQcm9ncmFtcy9wZ21wcml2c19saW51eC5jOjE5NTEKK21zZ2lkICJYREcgcnVudGltZSBkaXJlY3RvcnkgYWNjZXNzIHByb2JsZW0iCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvcGdtcHJpdnNfbGludXguYzoxOTMzCittc2dpZCAiWERHIHJ1bnRpbWUgZGlyZWN0b3J5IGNyZWF0ZWQiCittc2dzdHIgIlhERy1MYXVmemVpdHZlcnplaWNobmlzIGVyc3RlbGx0IgorCisjOiBQcm9ncmFtcy9wZ21wcml2c19saW51eC5jOjE5MjgKK21zZ2lkICJYREcgcnVudGltZSBkaXJlY3RvcnkgZXhpc3RzIgorbXNnc3RyICJYREctTGF1ZnplaXR2ZXJ6ZWljaG5pcyBleGlzdGllcnQiCisKKyM6IFByb2dyYW1zL3hicmxhcGkuYzo3ODYKK21zZ2lkICJYRnJlZSh3bV9uYW1lKSBmb3IgY2hhbmdlIgorbXNnc3RyICIiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgUEFTU1hUIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDoxNDc5Cittc2dpZCAiWFQgKHNldCAxKSBrZXlib2FyZCBzY2FuIGNvZGUiCittc2dzdHIgIlhUIChzZXQgMSkgVGFzdGF0dXItU2NhbmNvZGUiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBuYW1lIG9mIE1JREkgbXVzaWNhbCBpbnN0cnVtZW50ICMxNCAoaW4gdGhlIENocm9tYXRpYyBQZXJjdXNzaW9uIGdyb3VwKS4KKyM6IFByb2dyYW1zL21pZGkuYzoxMjAKK21zZ2lkICJYeWxvcGhvbmUiCittc2dzdHIgIlh5bG9waG9uIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6MTMxMgorbXNnaWQgIlllYXIgTW9udGggRGF5IgorbXNnc3RyICJKYWhyIE1vbmF0IFRhZyIKKworIzogUHJvZ3JhbXMvbWVudS5jOjUyNAorbXNnaWQgIlllcyIKK21zZ3N0ciAiSmEiCisKKyM6IFByb2dyYW1zL3hicmxhcGkuYzo4NAorbXNnaWQgIltob3N0XVs6cG9ydF0iCittc2dzdHIgIltIb3N0XVs6UG9ydF0iCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzo2NjUKK21zZ2lkICJhbGwgZG90cyIKK21zZ3N0ciAiQWxsZSBQdW5rdGUiCisKKyM6IFByb2dyYW1zL2NtZF9taXNjZWxsYW5lb3VzLmM6MTA0Cittc2dpZCAiYW5kIgorbXNnc3RyICJ1bmQiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgQ0xJUF9BUFBFTkQgY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjEzNDYKK21zZ2lkICJhcHBlbmQgY2hhcmFjdGVycyB0byBjbGlwYm9hcmQiCittc2dzdHIgImjDpG5nZSBaZWljaGVua2V0dGUgYW4gZGllIFp3aXNjaGVuYWJsYWdlIGFuIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIENMSVBfQUREIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDoxMjIzCittc2dpZCAiYXBwZW5kIHRvIGNsaXBib2FyZCBmcm9tIGNoYXJhY3RlciIKK21zZ3N0ciAiaMOkbmdlIGFiIFplaWNoZW4gYW4gZGllIFp3aXNjaGVuYWJsYWdlIGFuIgorCisjOiBQcm9ncmFtcy9jbWQuYzoyOTAKK21zZ2lkICJhdCBjdXJzb3IiCittc2dzdHIgImJlaW0gQ3Vyc29yIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIEtFWV9CQUNLU1BBQ0UgY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjE1MjcKK21zZ2lkICJiYWNrc3BhY2Uga2V5IgorbXNnc3RyICJSw7xja3Rhc3RlIgorCisjOiBEcml2ZXJzL0JyYWlsbGUvQmF1bS9icmFpbGxlLmM6MTE0OSBEcml2ZXJzL0JyYWlsbGUvVFNJL2JyYWlsbGUuYzo4NjkKK21zZ2lkICJiYXR0ZXJ5IGxvdyIKK21zZ3N0ciAiQWtrdSBzY2h3YWNoIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIFNFTEVDVFZUIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDoxNDM3Cittc2dpZCAiYmluZCB0byBzcGVjaWZpYyB2aXJ0dWFsIHRlcm1pbmFsIgorbXNnc3RyICJhbiBlaW4gYmVzdGltbXRlcyB2aXJ0dWVsbGVuIFRlcm1pbmFsIGFuYmluZGVuIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIFNFTEVDVFZUX05FWFQgY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjk1NworbXNnaWQgImJpbmQgdG8gdGhlIG5leHQgdmlydHVhbCB0ZXJtaW5hbCIKK21zZ3N0ciAiYW4gZGFzIG7DpGNoc3RlIHZpcnR1ZWxsZSBUZXJtaW5hbCBhbmJpbmRlbiIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBTRUxFQ1RWVF9QUkVWIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDo5NTAKK21zZ2lkICJiaW5kIHRvIHRoZSBwcmV2aW91cyB2aXJ0dWFsIHRlcm1pbmFsIgorbXNnc3RyICJhbiBkYXMgdm9yaGVyZ2VoZW5kZSB2aXJ0dWVsbGUgVGVybWluYWwgYW5iaW5kZW4iCisKKyMuCisjOiBQcm9ncmFtcy9jbWRfdXRpbHMuYzoxNDQKK21zZ2lkICJibGFjayIKK21zZ3N0ciAiU2Nod2FyeiIKKworIzogUHJvZ3JhbXMvY29yZS5jOjExMjUKK21zZ2lkICJibGFuayBsaW5lIgorbXNnc3RyICJsZWVyZSBaZWlsZSIKKworIzogUHJvZ3JhbXMvY21kX3V0aWxzLmM6MTczCittc2dpZCAiYmxpbmtpbmciCittc2dzdHIgIiIKKworIy4gQgorIzogUHJvZ3JhbXMvY21kX3V0aWxzLmM6MTQ1Cittc2dpZCAiYmx1ZSIKK21zZ3N0ciAiQmxhdSIKKworIzogUHJvZ3JhbXMvY29uZmlnLmM6Mjk5MworIywgYy1mb3JtYXQKK21zZ2lkICJicmFpbGxlIGRldmljZSBub3Qgc3BlY2lmaWVkIgorbXNnc3RyICJCcmFpbGxlZ2Vyw6R0IG5pY2h0IHNwZXppZml6aWVydCIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBPRkZMSU5FIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDo2MjEKK21zZ2lkICJicmFpbGxlIGRpc3BsYXkgdGVtcG9yYXJpbHkgdW5hdmFpbGFibGUiCittc2dzdHIgIkJyYWlsbGV6ZWlsZSB2b3LDvGJlcmdlaGVuZCBuaWNodCB2ZXJmw7xnYmFyIgorCisjOiBQcm9ncmFtcy9jb25maWcuYzoxNzM3Cittc2dpZCAiYnJhaWxsZSBkcml2ZXIgaW5pdGlhbGl6YXRpb24gZmFpbGVkIgorbXNnc3RyICJJbml0aWFsaXNpZXJ1bmcgZGVzIEJyYWlsbGV0cmVpYmVycyBmZWhsZ2VzY2hsYWdlbiIKKworIzogUHJvZ3JhbXMvY29uZmlnLmM6MTgxNgorbXNnaWQgImJyYWlsbGUgZHJpdmVyIG5vdCBsb2FkYWJsZSIKK21zZ3N0ciAiQnJhaWxsZXRyZWliZXIga2FubiBuaWNodCBnZWxhZGVuIHdlcmRlbiIKKworIzogUHJvZ3JhbXMvY29uZmlnLmM6MjA3NworbXNnaWQgImJyYWlsbGUgZHJpdmVyIHJlc3RhcnRpbmciCittc2dzdHIgIkJyYWlsbGUgVHJlaWJlciB3aXJkIG5ldSBnZXN0YXJ0ZXQiCisKKyM6IFByb2dyYW1zL2NtZF9taXNjZWxsYW5lb3VzLmM6MTYzCittc2dpZCAiYnJhaWxsZSBkcml2ZXIgc3RvcHBlZCIKK21zZ3N0ciAiQnJhaWxsZSBUcmVpYmVyIGdlc3RvcHB0IgorCisjOiBEcml2ZXJzL1NjcmVlbi9BbmRyb2lkL3NjcmVlbi5jOjE4OQorbXNnaWQgImJyYWlsbGUgcmVsZWFzZWQiCittc2dzdHIgIkJyYWlsbGUgZnJlaWdlZ2ViZW4iCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgUk9VVEUgY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjEyMDcKK21zZ2lkICJicmluZyBzY3JlZW4gY3Vyc29yIHRvIGNoYXJhY3RlciIKK21zZ3N0ciAiQmV3ZWdlIEJpbGRzY2hpcm1jdXJzb3IgenUgWmVpY2hlbiIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBDU1JKTVBfVkVSVCBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6NTkzCittc2dpZCAiYnJpbmcgc2NyZWVuIGN1cnNvciB0byBjdXJyZW50IGxpbmUiCittc2dzdHIgIkJld2VnZSBCaWxkc2NoaXJtY3Vyc29yIHp1ciBha3R1ZWxsZW4gQnJhaWxsZXplaWxlbnBvc2l0aW9uIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIFJPVVRFX0xJTkUgY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjE0MDQKK21zZ2lkICJicmluZyBzY3JlZW4gY3Vyc29yIHRvIGxpbmUiCittc2dzdHIgIkJld2VnZSBCaWxkc2NoaXJtY3Vyc29yIHp1IFplaWxlIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIFJPVVRFX0NVUlJfTE9DTiBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6ODM1Cittc2dpZCAiYnJpbmcgc2NyZWVuIGN1cnNvciB0byBzcGVlY2ggY3Vyc29yIgorbXNnc3RyICJCZXdlZ2UgQmlsZHNjaGlybWN1cnNvciB6dXIgU3ByYWNoY3Vyc29ycG9zaXRpb24iCisKKyMuIFJHCisjOiBQcm9ncmFtcy9jbWRfdXRpbHMuYzoxNTAKK21zZ2lkICJicm93biIKK21zZ3N0ciAiQnJhdW4iCisKKyM6IERyaXZlcnMvU2NyZWVuL0xpbnV4L3NjcmVlbi5jOjE0MzIKK21zZ2lkICJjYW4ndCBnZXQgY29uc29sZSBzdGF0ZSIKK21zZ3N0ciAiIgorCisjOiBEcml2ZXJzL1NjcmVlbi9MaW51eC9zY3JlZW4uYzoxNTEwCittc2dpZCAiY2FuJ3Qgb3BlbiBjb25zb2xlIgorbXNnc3RyICJrYW5uIGNvbnNvbGUgbmljaHQgw7ZmZm5lbiIKKworIzogRHJpdmVycy9TY3JlZW4vTGludXgvc2NyZWVuLmM6MTU1NgorbXNnaWQgImNhbid0IHJlYWQgc2NyZWVuIGNvbnRlbnQiCittc2dzdHIgImthbm4gQmlsZHNjaGlybWluaGFsdCBuaWNodCBsZXNlbiIKKworIzogRHJpdmVycy9TY3JlZW4vTGludXgvc2NyZWVuLmM6MTYwMQorIywgZnV6enkKK21zZ2lkICJjYW4ndCByZWFkIHNjcmVlbiBoZWFkZXIiCittc2dzdHIgIkJpbGRzY2hpcm10cmVpYmVyIHN0YXJ0ZW4iCisKKyM6IFByb2dyYW1zL2N0Yl90cmFuc2xhdGUuYzozOTMKK21zZ2lkICJjYW5ub3QgYWNjZXNzIGludGVybmFsIGNvbnRyYWN0aW9uIHRhYmxlIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL2F0Yl90cmFuc2xhdGUuYzo3MAorbXNnaWQgImNhbm5vdCBjb21waWxlIGF0dHJpYnV0ZXMgdGFibGUiCittc2dzdHIgImthbm4gQXR0cmlidXR0YWJlbGxlIG5pY2h0IGtvbXBpbGllcmVuIgorCisjOiBQcm9ncmFtcy9jdGJfdHJhbnNsYXRlLmM6Mzg3Cittc2dpZCAiY2Fubm90IGNvbXBpbGUgY29udHJhY3Rpb24gdGFibGUiCittc2dzdHIgImthbm4gS3VyenNjaHJpZnR0YWJlbGxlIG5pY2h0IGtvbXBpbGllcmVuIgorCisjOiBQcm9ncmFtcy9jb25maWcuYzoxNzIwCittc2dpZCAiY2Fubm90IGNvbXBpbGUga2V5IHRhYmxlIgorbXNnc3RyICJrYW5uIFRhc3RlbnRhYmVsbGUgbmljaHQga29tcGlsaWVyZW4iCisKKyM6IFByb2dyYW1zL2NvbmZpZy5jOjEyODQKK21zZ2lkICJjYW5ub3QgY29tcGlsZSBrZXlib2FyZCB0YWJsZSIKK21zZ3N0ciAia2FubiBUYXN0ZW50YWJlbGxlIG5pY2h0IGtvbXBpbGllcmVuIgorCisjOiBQcm9ncmFtcy90dGJfdHJhbnNsYXRlLmM6Mjc1Cittc2dpZCAiY2Fubm90IGNvbXBpbGUgdGV4dCB0YWJsZSIKK21zZ3N0ciAia2FubiBUZXh0dGFiZWxsZSBuaWNodCBrb21waWxpZXJlbiIKKworIy4gVGhpcyBpcyB0aGUgZmlyc3QgYXR0ZW1wdCB0byBjb25uZWN0IHRvIEJSTFRUWSwgYW5kIGl0IGZhaWxlZC4KKyMuICogUmV0dXJuIHRoZSBlcnJvciBpbW1lZGlhdGVseSB0byB0aGUgdXNlciwgdG8gcHJvdmlkZSBmZWVkYmFjayB0byB1c2VycworIy4gKiBydW5uaW5nIHhicmxhcGkgYnkgaGFuZCwgYnV0IG5vdCBmaWxsIGxvZ3MsIGVhdCBiYXR0ZXJ5LCBzcGFtCisjLiAqIDEyNy4wLjAuMSB3aXRoIHJlY29ubmVjdGlvbiBhdHRlbXB0cy4KKyMuCisjOiBQcm9ncmFtcy94YnJsYXBpLmM6MjA0CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBjb25uZWN0IHRvIGJyYWlsbGUgZGV2aWNlcyBkYWVtb24gYnJsdHR5IGF0ICVzXG4iCittc2dzdHIgIkthbm4gbmljaHQgbWl0IEJyYWlsbGVnZXLDpHRlZGllbnN0IGJybHR0eSB2aWEgJXMgdmVyYmluZGVuXG4iCisKKyM6IFByb2dyYW1zL3hicmxhcGkuYzo2NTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGNvbm5lY3QgdG8gZGlzcGxheSAlc1xuIgorbXNnc3RyICJrYW5uIG1pdCBCcmFpbGxlemVpbGUgJXMgbmljaHQgdmVyYmluZGVuXG4iCisKKyM6IFByb2dyYW1zL2ZpbGUuYzozODEKK21zZ2lkICJjYW5ub3QgY3JlYXRlIGRpcmVjdG9yeSIKK21zZ3N0ciAia2FubiBWZXJ6ZWljaG5pcyBuaWNodCBlcnN0ZWxsZW4iCisKKyM6IFByb2dyYW1zL3Byb2dyYW0uYzoxNTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGRldGVybWluZSBwcm9ncmFtIGRpcmVjdG9yeSIKK21zZ3N0ciAia2FubiBQcm9ncmFtbXZlcnplaWNobmlzIG5pY2h0IGJlc3RpbW1lbiIKKworIzogUHJvZ3JhbXMvY29uZmlnLmM6Mjk1MSBQcm9ncmFtcy9tZW51LmM6NjE4Cittc2dpZCAiY2Fubm90IGRldGVybWluZSB3b3JraW5nIGRpcmVjdG9yeSIKK21zZ3N0ciAia2FubiBBcmJlaXRzdmVyemVpY2huaXMgbmljaHQgYmVzdGltbWVuIgorCisjOiBQcm9ncmFtcy9zeXN0ZW1fd2luZG93cy5jOjYxCittc2dpZCAiY2Fubm90IGZpbmQgcHJvY2VkdXJlIgorbXNnc3RyICJrYW5uIFByb3plZHVyIG5pY2h0IGZpbmRlbiIKKworIzogUHJvZ3JhbXMvcHJvZ3JhbS5jOjE1OAorbXNnaWQgImNhbm5vdCBmaXggaW5zdGFsbCBwYXRoIgorbXNnc3RyICJrYW5uIEluc3RhbGxhdGlvbnNwZmFkIG5pY2h0IGJlaGViZW4iCisKKyM6IFByb2dyYW1zL3hicmxhcGkuYzoyNTkKK21zZ2lkICJjYW5ub3QgZ2V0IHR0eVxuIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL3hicmxhcGkuYzoyNjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGdldCB0dHkgJWRcbiIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9maWxlLmM6NTE4Cittc2dpZCAiY2Fubm90IGdldCB3b3JraW5nIGRpcmVjdG9yeSIKK21zZ3N0ciAia2FubiBBcmJlaXRzdmVyemVpY2huaXMgbmljaHQgZXJmcmFnZW4iCisKKyM6IFByb2dyYW1zL3hicmxhcGkuYzo3MDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGdyYWIgd2luZG93cyBvbiBzY3JlZW4gJWRcbiIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy94YnJsYXBpLmM6MjcyCittc2dpZCAiY2Fubm90IGlnbm9yZSBrZXlzXG4iCittc2dzdHIgImthbm4gdGFzdGVuIG5pY2h0IGlnbm9yaWVyZW5cbiIKKworIzogUHJvZ3JhbXMvYXRiX3RyYW5zbGF0ZS5jOjkwCittc2dpZCAiY2Fubm90IGxvYWQgYXR0cmlidXRlcyB0YWJsZSIKK21zZ3N0ciAia2FubiBBdHRyaWJ1dHRhYmVsbGUgbmljaHQgbGFkZW4iCisKKyM6IFByb2dyYW1zL2N0Yl90cmFuc2xhdGUuYzo0MDcKK21zZ2lkICJjYW5ub3QgbG9hZCBjb250cmFjdGlvbiB0YWJsZSIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9zeXN0ZW1fd2luZG93cy5jOjU0Cittc2dpZCAiY2Fubm90IGxvYWQgbGlicmFyeSIKK21zZ3N0ciAia2FubiBQcm9ncmFtbWJpYmxpb3RoZWsgbmljaHQgbGFkZW4iCisKKyM6IFByb2dyYW1zL3R0Yl90cmFuc2xhdGUuYzoyOTUKK21zZ2lkICJjYW5ub3QgbG9hZCB0ZXh0IHRhYmxlIgorbXNnc3RyICJrYW5uIFRleHR0YWJlbGxlIG5pY2h0IGxhZGVuIgorCisjOiBQcm9ncmFtcy9maWxlLmM6MzcwCisjLCBmdXp6eQorbXNnaWQgImNhbm5vdCBtYWtlIHdvcmxkIHdyaXRhYmxlIgorbXNnc3RyICJrYW5uIFRhc3RlbnRhYmVsbGUgbmljaHQga29tcGlsaWVyZW4iCisKKyM6IFByb2dyYW1zL2NvbmZpZy5jOjEyMzkKK21zZ2lkICJjYW5ub3Qgb3BlbiBrZXkgaGVscCIKK21zZ3N0ciAia2FubiBUYXN0ZW5oaWxmZSBuaWNodCDDtmZmbmVuIgorCisjOiBQcm9ncmFtcy9wcm9ncmFtLmM6MjYyCittc2dpZCAiY2Fubm90IG9wZW4gcHJvY2VzcyBpZGVudGlmaWVyIGZpbGUiCittc2dzdHIgImthbm4gUHJvemVzc2lkZW50aWZpa2F0aW9uc2RhdGVpIG5pY2h0IMO2ZmZuZW4iCisKKyM6IFByb2dyYW1zL21lbnUuYzo2MTYKK21zZ2lkICJjYW5ub3Qgb3BlbiB3b3JraW5nIGRpcmVjdG9yeSIKK21zZ3N0ciAia2FubiBBcmJlaXRzdmVyemVpY2huaXMgbmljaHQgw7ZmZm5lbiIKKworIzogUHJvZ3JhbXMvcHJlZnMuYzozNjMKK21zZ2lkICJjYW5ub3QgcmVhZCBwcmVmZXJlbmNlcyBmaWxlIgorbXNnc3RyICJrYW5uIEVpbnN0ZWxsdW5nc2RhdGVpIG5pY2h0IGxlc2VuIgorCisjOiBQcm9ncmFtcy94YnJsYXBpLmM6MzM3CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBzZXQgZm9jdXMgdG8gJSMwMTB4XG4iCittc2dzdHIgImthbm4gRm9rdXMgbmljaHQgYXVmICUjMDEweCBzZXR6ZW5cbiIKKworIzogUHJvZ3JhbXMvZmlsZS5jOjUzMiBQcm9ncmFtcy9tZW51LmM6NjA1Cittc2dpZCAiY2Fubm90IHNldCB3b3JraW5nIGRpcmVjdG9yeSIKK21zZ3N0ciAia2FubiBBcmJlaXRzdmVyemVpY2huaXMgbmljaHQgd2VjaHNlbG4iCisKKyM6IFByb2dyYW1zL3ByZWZzLmM6NTc2Cittc2dpZCAiY2Fubm90IHdyaXRlIHRvIHByZWZlcmVuY2VzIGZpbGUiCittc2dzdHIgImthbm4gRWluc3RlbGx1bmdzZGF0ZWkgbmljaHQgc2NocmVpYmVuIgorCisjLiAiY2FwIiBoZXJlLCB1c2VkIGR1cmluZyBzcGVlY2ggb3V0cHV0LCBpcyBzaG9ydCBmb3IgImNhcGl0YWwiLgorIy4gSXQgaXMgc3Bva2VuIGp1c3QgYmVmb3JlIGFuIHVwcGVyY2FzZSBsZXR0ZXIsIGUuZy4gImNhcCBBIi4KKyM6IFByb2dyYW1zL2NvcmUuYzoxMDcwCittc2dpZCAiY2FwIgorbXNnc3RyICJHcm/DnyIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjg4NiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6MTM1MworbXNnaWQgImNlbGxzIgorbXNnc3RyICJaZWxsZW4iCisKKyM6IFByb2dyYW1zL2NtZF9wcmVmZXJlbmNlcy5jOjg3Cittc2dpZCAiY2hhbmdlcyBkaXNjYXJkZWQiCittc2dzdHIgIsOEbmRlcnVuZ2VuIHZlcndvcmZlbiIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBVTlNUSUNLIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDo4ODcKK21zZ2lkICJjbGVhciBhbGwgc3RpY2t5IGlucHV0IG1vZGlmaWVycyIKK21zZ3N0ciAiYWxsZSBlaW5nZXJhc3RldGVuIFN0ZXVlcnRhc3RlbiBsw7ZzY2hlbiIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBUWFRTRUxfQ0xFQVIgY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjEwMTkKK21zZ2lkICJjbGVhciB0aGUgdGV4dCBzZWxlY3Rpb24iCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvY21kX3NwZWVjaC5jOjUwMQorbXNnaWQgImNvbHVtbiIKK21zZ3N0ciAiU3BhbHRlIgorCisjLiBjb25maWd1cmF0aW9uIG1lbnUKKyM6IERyaXZlcnMvQnJhaWxsZS9CcmFpbGxlTGl0ZS9icmFpbGxlLmM6NjA3Cittc2dpZCAiY29uZmlnIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL29wdGlvbnMuYzo4MTIKK21zZ2lkICJjb25maWd1cmF0aW9uIGRpcmVjdGl2ZSBzcGVjaWZpZWQgbW9yZSB0aGFuIG9uY2UiCittc2dzdHIgIktvbmZpZ3VyYXRpb25zZGlyZWt0aXZlIG1laHJmYWNoIGFuZ2VnZWJlbiIKKworIzogRHJpdmVycy9TY3JlZW4vTGludXgvc2NyZWVuLmM6MTUwOAorbXNnaWQgImNvbnNvbGUgbm90IGluIHVzZSIKK21zZ3N0ciAiS29uc29sZSBuaWNodCBpbiBWZXJ3ZW5kdW5nIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6MTA1NgorbXNnaWQgImNvbnNvbGUgdG9uZSBnZW5lcmF0b3IiCittc2dzdHIgIktvbnNvbGVuLVRvbmdlbmVyYXRvciIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBDTElQX0NPUFkgY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjEzMzgKK21zZ2lkICJjb3B5IGNoYXJhY3RlcnMgdG8gY2xpcGJvYXJkIgorbXNnc3RyICJrb3BpZXJlIFplaWNoZW5rZXR0ZSBpbiBkaWUgWndpc2NoZW5hYmxhZ2UiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgSE9TVF9DT1BZIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDoxMDMzCisjLCBmdXp6eQorbXNnaWQgImNvcHkgc2VsZWN0ZWQgdGV4dCB0byBob3N0IGNsaXBib2FyZCIKK21zZ3N0ciAia29waWVyZSBaZWljaGVua2V0dGUgaW4gZGllIFp3aXNjaGVuYWJsYWdlIgorCisjOiBQcm9ncmFtcy9jb25maWcuYzo3MjkKK21zZ2lkICJjc2VjcyIKK21zZ3N0ciAiIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIFRPVUNIX0FUIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDoxNTAzCittc2dpZCAiY3VycmVudCByZWFkaW5nIGxvY2F0aW9uIgorbXNnc3RyICJha3R1ZWxsZSBMZXNlcG9zaXRpb24iCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgS0VZX0NVUlNPUl9ET1dOIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDoxNTY3Cittc2dpZCAiY3Vyc29yLWRvd24ga2V5IgorbXNnc3RyICJQZmVpbC1SdW50ZXItVGFzdGUiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgS0VZX0NVUlNPUl9MRUZUIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDoxNTQzCittc2dpZCAiY3Vyc29yLWxlZnQga2V5IgorbXNnc3RyICJQZmVpbC1MaW5rcy1UYXN0ZSIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBLRVlfQ1VSU09SX1JJR0hUIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDoxNTUxCittc2dpZCAiY3Vyc29yLXJpZ2h0IGtleSIKK21zZ3N0ciAiUGZlaWwtUmVjaHRzLVRhc3RlIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIEtFWV9DVVJTT1JfVVAgY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjE1NTkKK21zZ2lkICJjdXJzb3ItdXAga2V5IgorbXNnc3RyICJQZmVpbC1SYXVmLVRhc3RlIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIEhPU1RfQ1VUIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDoxMDQwCittc2dpZCAiY3V0IHNlbGVjdGVkIHRleHQgdG8gaG9zdCBjbGlwYm9hcmQiCittc2dzdHIgIiIKKworIy4gR0IKKyM6IFByb2dyYW1zL2NtZF91dGlscy5jOjE0NworbXNnaWQgImN5YW4iCittc2dzdHIgIlp5YW4iCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgQUxUR1IgY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjg5NAorbXNnaWQgImN5Y2xlIHRoZSBBbHRHciAoUmlnaHQgQWx0KSBzdGlja3kgaW5wdXQgbW9kaWZpZXIgKG5leHQsIG9uLCBvZmYpIgorbXNnc3RyICJFaW5yYXN0ZnVua3Rpb24gZGVyIEFsdEdyIChyZWNodGUgQWx0KSBUYXN0ZSB1bXNjaGFsdGVuICjDpG5kZXJuLCBlaW4sIGF1cykiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgQ09OVFJPTCBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6NjQyCittc2dpZCAiY3ljbGUgdGhlIENvbnRyb2wgc3RpY2t5IGlucHV0IG1vZGlmaWVyIChuZXh0LCBvbiwgb2ZmKSIKK21zZ3N0ciAiRWlucmFzdGZ1bmt0aW9uIGRlciBTdGV1ZXJ1bmctVGFzdGUgdW1zY2hhbHRlbiAow6RuZGVybiwgZWluLCBhdXMpIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIEdVSSBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6OTAxCittc2dpZCAiY3ljbGUgdGhlIEdVSSAoV2luZG93cykgc3RpY2t5IGlucHV0IG1vZGlmaWVyIChuZXh0LCBvbiwgb2ZmKSIKK21zZ3N0ciAiRWlucmFzdGZ1bmt0aW9uIGRlciBHVUkgKFdpbmRvd3MpIFRhc3RlIHVtc2NoYWx0ZW4gKMOkbmRlcm4sIGVpbiwgYXVzKSIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBNRVRBIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDo2NDkKK21zZ2lkICJjeWNsZSB0aGUgTWV0YSAoTGVmdCBBbHQpIHN0aWNreSBpbnB1dCBtb2RpZmllciAobmV4dCwgb24sIG9mZikiCittc2dzdHIgIkVpbnJhc3RmdW5rdGlvbiBkZXIgTWV0YSAobGlua2UgQWx0KSBUYXN0ZSB1bXNjaGFsdGVuICjDpG5kZXJuLCBlaW4sIGF1cykiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgU0hJRlQgY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjYyOAorbXNnaWQgImN5Y2xlIHRoZSBTaGlmdCBzdGlja3kgaW5wdXQgbW9kaWZpZXIgKG5leHQsIG9uLCBvZmYpIgorbXNnc3RyICJFaW5yYXN0ZnVua3Rpb24gZGVyIFVtc2NoYWx0dGFzdGUgdW1zY2hhbHRlbiAow6RuZGVybiwgZWluLCBhdXMpIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIFVQUEVSIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDo2MzUKK21zZ2lkICJjeWNsZSB0aGUgVXBwZXIgc3RpY2t5IGlucHV0IG1vZGlmaWVyIChuZXh0LCBvbiwgb2ZmKSIKK21zZ3N0ciAiRWlucmFzdGZ1bmt0aW9uIGRlciBGZXN0c3RlbGx0YXN0ZSB1bXNjaGFsdGVuICjDpG5kZXJuLCBlaW4sIGF1cykiCisKKyMuIEwKKyM6IFByb2dyYW1zL2NtZF91dGlscy5jOjE1MgorbXNnaWQgImRhcmsgZ3JleSIKK21zZ3N0ciAiRHVua2VsZ3JhdSIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBTQVlfTE9XRVIgY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjExNjgKK21zZ2lkICJkZWNyZWFzZSBzcGVha2luZyBwaXRjaCIKK21zZ3N0ciAiIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIFNBWV9TTE9XRVIgY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjU1MAorbXNnaWQgImRlY3JlYXNlIHNwZWFraW5nIHJhdGUiCittc2dzdHIgImxhbmdzYW1lciBzcHJlY2hlbiIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBTQVlfU09GVEVSIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDo1NjQKK21zZ2lkICJkZWNyZWFzZSBzcGVha2luZyB2b2x1bWUiCittc2dzdHIgImxlaXNlciBzcHJlY2hlbiIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBLRVlfREVMRVRFIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDoxNjE1Cittc2dpZCAiZGVsZXRlIGtleSIKK21zZ3N0ciAiRW50ZmVybmVuLVRhc3RlIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIERFU0NDSEFSIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDoxMjc1Cittc2dpZCAiZGVzY3JpYmUgY2hhcmFjdGVyIgorbXNnc3RyICJiZXNjaHJlaWJlIFplaWNoZW4iCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgREVTQ19DVVJSX0NIQVIgY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjgyMAorbXNnaWQgImRlc2NyaWJlIGN1cnJlbnQgY2hhcmFjdGVyIgorbXNnc3RyICJiZXNjaHJlaWJlIGFrdHVlbGxlcyBaZWljaGVuIgorCisjOiBQcm9ncmFtcy9jb25maWcuYzo3MTAgUHJvZ3JhbXMvY29uZmlnLmM6NzIwCittc2dpZCAiZGV2aWNlIgorbXNnc3RyICJHZXLDpHQiCisKKyM6IFByb2dyYW1zL2JybHRlc3QuYzo2NCBQcm9ncmFtcy9icmx0ZXN0LmM6NzQgUHJvZ3JhbXMvYnJsdHR5LWF0Yi5jOjMyCisjOiBQcm9ncmFtcy9icmx0dHktY3RiLmM6NTAgUHJvZ3JhbXMvYnJsdHR5LWt0Yi5jOjY5IFByb2dyYW1zL2JybHR0eS1rdGIuYzo3OQorIzogUHJvZ3JhbXMvYnJsdHR5LXRydHh0LmM6NDcgUHJvZ3JhbXMvY29uZmlnLmM6NDAwIFByb2dyYW1zL2NvbmZpZy5jOjUwMAorIzogUHJvZ3JhbXMvY29uZmlnLmM6NTEwIFByb2dyYW1zL2NvbmZpZy5jOjUyMCBQcm9ncmFtcy9jb25maWcuYzo1OTEKK21zZ2lkICJkaXJlY3RvcnkiCittc2dzdHIgIlZlcnplaWNobmlzIgorCisjOiBQcm9ncmFtcy94YnJsYXBpLmM6OTgKK21zZ2lkICJkaXNwbGF5IgorbXNnc3RyICJkaXNwbGF5IgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIE5PT1AgY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjUKK21zZ2lkICJkbyBub3RoaW5nIgorbXNnc3RyICJuaWNodHMgdW50ZXJuZWhtZW4iCisKKyM6IFByb2dyYW1zL2xlYXJuLmM6MTA4Cittc2dpZCAiZG9uZSIKK21zZ3N0ciAiRmVydGlnIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6NjY2Cittc2dpZCAiZG90IDciCittc2dzdHIgIlB1bmt0IDciCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzo2NjcKK21zZ2lkICJkb3QgOCIKK21zZ3N0ciAiUHVua3QgOCIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjY2NAorbXNnaWQgImRvdHMgNyBhbmQgOCIKK21zZ3N0ciAiUHVua3RlIDcgdW5kIDgiCisKKyM6IERyaXZlcnMvQnJhaWxsZS9CYXVtL2JyYWlsbGUuYzoxMTQ2Cittc2dpZCAiZHJpdmVyIHJlcXVlc3QiCittc2dzdHIgIlRyZWliZXJhbmZyYWdlIgorCisjOiBQcm9ncmFtcy9jb25maWcuYzo1NDkgUHJvZ3JhbXMvY29uZmlnLmM6NjQ3IFByb2dyYW1zL2NvbmZpZy5jOjY5MAorbXNnaWQgImRyaXZlciwuLi4iCittc2dzdHIgIlRyZWliZXIsLi4uIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIEtFWV9FTkQgY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjE1OTkKK21zZ2lkICJlbmQga2V5IgorbXNnc3RyICJFbmRlLVRhc3RlIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIEtFWV9FTlRFUiBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6MTUxMQorbXNnaWQgImVudGVyIGtleSIKK21zZ3N0ciAiRWluZ2FiZXRhc3RlIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIExFQVJOIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDo0MzYKK21zZ2lkICJlbnRlci9sZWF2ZSBjb21tYW5kIGxlYXJuIG1vZGUiCittc2dzdHIgIkF1ZnJ1ZmVuL1Zlcmxhc3NlbiBkZXMgS29tbWFuZG9sZXJubW9kdXMiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgSEVMUCBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6NDIyCittc2dpZCAiZW50ZXIvbGVhdmUgaGVscCBkaXNwbGF5IgorbXNnc3RyICJBdWZydWZlbi9WZXJsYXNzZW4gZGVyIEhpbGZlIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIFBSRUZNRU5VIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDo0NDMKK21zZ2lkICJlbnRlci9sZWF2ZSBwcmVmZXJlbmNlcyBtZW51IgorbXNnc3RyICJBdWZydWZlbi9WZXJsYXNzZW4gZGVzIEVpbnN0ZWxsdW5nc21lbsO8cyIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBJTkZPIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDo0MjkKK21zZ2lkICJlbnRlci9sZWF2ZSBzdGF0dXMgZGlzcGxheSIKK21zZ3N0ciAiQXVmcnVmZW4vVmVybGFzc2VuIGRlciBTdGF0dXNhbnplaWdlIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIEtFWV9FU0NBUEUgY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjE1MzUKK21zZ2lkICJlc2NhcGUga2V5IgorbXNnc3RyICJFc2NhcGUtVGFzdGUiCisKKyM6IERyaXZlcnMvQnJhaWxsZS9JcmlzL2JyYWlsbGUuYzoxNDk0Cittc2dpZCAiZXVyb2JyYWlsbGUiCittc2dzdHIgIkV1cm9icmFpbGxlIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgdGVybSB1c2VkIHdoZW4gdGhlIHRpbWUgaXMgZXhhY3RseSBvbiAoaS5lLiB6ZXJvIHNlY29uZHMgYWZ0ZXIpIGEgbWludXRlLgorIzogUHJvZ3JhbXMvY21kX21pc2NlbGxhbmVvdXMuYzoxMDIKK21zZ2lkICJleGFjdGx5IgorbXNnc3RyICJnZW5hdSIKKworIzogUHJvZ3JhbXMvY29uZmlnLmM6ODczCittc2dpZCAiZXhjZXNzIGFyZ3VtZW50IgorbXNnc3RyICLDvGJlcnNjaMO8c3NpZ2VzIEFyZ3VtZW50IgorCisjLiBwYXJlbnQKKyM6IFByb2dyYW1zL2JybHR0eS5jOjE3NworIywgYy1mb3JtYXQKK21zZ2lkICJleGVjdXRpbmcgXCIlc1wiIChmcm9tIFwiJXNcIilcbiIKK21zZ3N0ciAiZsO8aHJlIFwiJXNcIiAodm9uIFwiJXNcIikgYXVzXG4iCisKKyM6IFByb2dyYW1zL3BnbXByaXZzX2xpbnV4LmM6MjA0NQorbXNnaWQgImV4ZWN1dGluZyBhcyB0aGUgaW52b2tpbmcgdXNlciIKK21zZ3N0ciAiIgorCisjLiBleGVjdigpIHNob3VsZG4ndCByZXR1cm4KKyM6IFByb2dyYW1zL2JybHR0eS5jOjE4NAorIywgYy1mb3JtYXQKK21zZ2lkICJleGVjdXRpb24gb2YgXCIlc1wiIGZhaWxlZDogJXNcbiIKK21zZ3N0ciAiQXVzZsO8aHJlbiB2b24gXCIlc1wiIGZlaGxnZXNjaGxhZ2VuOiAlc1xuIgorCisjOiBQcm9ncmFtcy94YnJsYXBpLmM6NzA5Cittc2dpZCAiZmFpbGVkIHRvIGdldCBmaXJzdCBmb2N1c1xuIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL2JybHR0eS10cnR4dC5jOjU2IFByb2dyYW1zL2JybHR0eS10cnR4dC5jOjY0IFByb2dyYW1zL2NvbmZpZy5jOjQ1NworIzogUHJvZ3JhbXMvY29uZmlnLmM6NDY2IFByb2dyYW1zL2NvbmZpZy5jOjQ3NiBQcm9ncmFtcy9jb25maWcuYzo2MDIKKyM6IFByb2dyYW1zL2NvbmZpZy5jOjYxMiBQcm9ncmFtcy9jb25maWcuYzo2MjEgUHJvZ3JhbXMvY29uZmlnLmM6NjI5CisjOiBQcm9ncmFtcy9jb25maWcuYzo2NjYgUHJvZ3JhbXMvY29uZmlnLmM6NzU5Cittc2dpZCAiZmlsZSIKK21zZ3N0ciAiRGF0ZWkiCisKKyM6IFByb2dyYW1zL29wdGlvbnMuYzo5OTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmlsZSAnJXMnIHByb2Nlc3NpbmcgZXJyb3IuIgorbXNnc3RyICJWZXJhcmJlaXR1bmdzZmVobGVyIGluIERhdGVpICclcycuIgorCisjLiBmYWlsZWQKKyM6IFByb2dyYW1zL2JybHR0eS5jOjE3MgorIywgYy1mb3JtYXQKK21zZ2lkICJmb3JrIG9mIFwiJXNcIiBmYWlsZWQ6ICVzXG4iCittc2dzdHIgIiIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBLRVlfRlVOQ1RJT04gY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjE2MjQKK21zZ2lkICJmdW5jdGlvbiBrZXkiCittc2dzdHIgIkZ1bmt0aW9uc3Rhc3RlIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIEJBQ0sgY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjI3MQorbXNnaWQgImdvIGJhY2sgYWZ0ZXIgY3Vyc29yIHRyYWNraW5nIgorbXNnc3RyICJHZWhlIHp1csO8Y2sgbmFjaCBDdXJzb3J2ZXJmb2xndW5nIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIEdVSV9CQUNLIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDoxMDc3CisjLCBmdXp6eQorbXNnaWQgImdvIGJhY2sgdG8gdGhlIHByZXZpb3VzIHNjcmVlbiIKK21zZ3N0ciAiR2VoZSBuYWNoIG9iZW4genVtIHZvcmhlcmlnZW4gRWxlbWVudCIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBGV0lOTFQgY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjIxMAorbXNnaWQgImdvIGJhY2t3YXJkIG9uZSBicmFpbGxlIHdpbmRvdyIKK21zZ3N0ciAiR2VoZSBlaW5lIEJyYWlsbGV6ZWlsZW5sw6RuZ2UgenVyw7xjayIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBGV0lOTFRTS0lQIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDoyMjgKK21zZ2lkICJnbyBiYWNrd2FyZCBza2lwcGluZyBibGFuayBicmFpbGxlIHdpbmRvd3MiCittc2dzdHIgIkdlaGUgenVyw7xjayB1bmQgw7xiZXJzcHJpbmdlIGxlZXJlIEJyYWlsbGV6ZWlsZW5hdXNzY2huaXR0ZSIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBQUk5CV0lOIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDo5NjYKK21zZ2lkICJnbyBiYWNrd2FyZCB0byBuZWFyZXN0IG5vbi1ibGFuayBicmFpbGxlIHdpbmRvdyIKK21zZ3N0ciAiR2VoZSB6dXLDvGNrIHp1bSBuw6RoZXN0ZW4gYmVmw7xsbHRlbiBCcmFpbGxlemVpbGVuYXVzc2Nobml0dCIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBMTkROIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDoyMworbXNnaWQgImdvIGRvd24gb25lIGxpbmUiCittc2dzdHIgIkdlaGUgZWluZSBaZWlsZSBuYWNoIHVudGVuIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIFdJTkROIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDo0MQorbXNnaWQgImdvIGRvd24gc2V2ZXJhbCBsaW5lcyIKK21zZ3N0ciAiR2VoZSBtZWhyZXJlIFplaWxlbiBuYWNoIHVudGVuIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIE5YUEdSUEggY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjEzMworbXNnaWQgImdvIGRvd24gdG8gZmlyc3QgbGluZSBvZiBuZXh0IHBhcmFncmFwaCIKK21zZ3N0ciAiR2VoZSB6dXIgZXJzdGVuIFplaWxlIGRlcyBuw6RjaHN0ZW4gQWJzYXR6ZXMiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgTUVOVV9MQVNUX0lURU0gY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjQ3NQorbXNnaWQgImdvIGRvd24gdG8gbGFzdCBpdGVtIgorbXNnc3RyICJHZWhlIG5hY2ggdW50ZW4genVtIGxldHp0ZW4gRWxlbWVudCIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBOWERJRkNIQVIgY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjEzMzAKK21zZ2lkICJnbyBkb3duIHRvIG5lYXJlc3QgbGluZSB3aXRoIGRpZmZlcmVudCBjaGFyYWN0ZXIiCittc2dzdHIgIkdlaGUgenUgbsOkY2hzdGVyIFplaWxlIG1pdCBhbmRlcmVtIFplaWNoZW4iCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgTlhESUZMTiBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6NTkKK21zZ2lkICJnbyBkb3duIHRvIG5lYXJlc3QgbGluZSB3aXRoIGRpZmZlcmVudCBjb250ZW50IgorbXNnc3RyICJHZWhlIHp1IG7DpGNoc3RlciBaZWlsZSBtaXQgYW5kZXJlbSBJbmhhbHQiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgQVRUUkROIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDo3NworbXNnaWQgImdvIGRvd24gdG8gbmVhcmVzdCBsaW5lIHdpdGggZGlmZmVyZW50IGhpZ2hsaWdodGluZyIKK21zZ3N0ciAiR2VoZSB6dSBuw6RjaHN0ZXIgWmVpbGUgbWl0IGFuZGVyZXIgSGVydm9yaGVidW5nIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIE5YSU5ERU5UIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDoxMjY3Cittc2dpZCAiZ28gZG93biB0byBuZWFyZXN0IGxpbmUgd2l0aCBsZXNzIGluZGVudCB0aGFuIGNoYXJhY3RlciIKK21zZ3N0ciAiR2VoZSB6dSBuw6RjaHN0ZXIgWmVpbGUgbWl0IHdlbmlnZXIgRWlucsO8Y2t1bmcgYWxzIFplaWNoZW4iCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgTlhQUk9NUFQgY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjE1MQorbXNnaWQgImdvIGRvd24gdG8gbmV4dCBjb21tYW5kIHByb21wdCIKK21zZ3N0ciAiR2VoZSB6dW0gbsOkY2hzdGVuIEtvbW1hbmRvcHJvbXB0IgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIE1FTlVfTkVYVF9JVEVNIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDo0OTMKK21zZ2lkICJnbyBkb3duIHRvIG5leHQgaXRlbSIKK21zZ3N0ciAiR2VoZSBuYWNoIHVudGVuIHp1bSBuw6RjaHN0ZW4gRWxlbWVudCIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBGV0lOUlQgY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjIxOQorbXNnaWQgImdvIGZvcndhcmQgb25lIGJyYWlsbGUgd2luZG93IgorbXNnc3RyICJHZWhlIGVpbmUgQnJhaWxsZXplaWxlbmzDpG5nZSB2b3J3w6RydHMiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgRldJTlJUU0tJUCBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6MjM3Cittc2dpZCAiZ28gZm9yd2FyZCBza2lwcGluZyBibGFuayBicmFpbGxlIHdpbmRvd3MiCittc2dzdHIgIkdlaGUgdm9yd8OkcnRzIHVuZCDDvGJlcnNwcmluZ2UgbGVlcmUgQnJhaWxsZXplaWxlbmF1c3NjaG5pdHRlIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIE5YTkJXSU4gY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjk3NQorbXNnaWQgImdvIGZvcndhcmQgdG8gbmVhcmVzdCBub24tYmxhbmsgYnJhaWxsZSB3aW5kb3ciCittc2dzdHIgIkdlaGUgdm9yd8OkcnRzIHp1bSBuw6RoZXN0ZW4gYmVmw7xsbHRlbiBCcmFpbGxlemVpbGVuYXVzc2Nobml0dCIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBIV0lOTFQgY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjE5MgorbXNnaWQgImdvIGxlZnQgaGFsZiBhIGJyYWlsbGUgd2luZG93IgorbXNnc3RyICJHZWhlIGVpbmUgaGFsYmUgQnJhaWxsZXplaWxlbmzDpG5nZSBuYWNoIGxpbmtzIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIENIUkxUIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDoxNzQKK21zZ2lkICJnbyBsZWZ0IG9uZSBjaGFyYWN0ZXIiCittc2dzdHIgIkdlaGUgZWluIFplaWNoZW4gbmFjaCBsaW5rcyIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBIV0lOUlQgY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjIwMQorbXNnaWQgImdvIHJpZ2h0IGhhbGYgYSBicmFpbGxlIHdpbmRvdyIKK21zZ3N0ciAiR2VoZSBlaW5lIGhhbGJlIEJyYWlsbGV6ZWlsZW5sw6RuZ2UgbmFjaCByZWNodHMiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgQ0hSUlQgY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjE4MworbXNnaWQgImdvIHJpZ2h0IG9uZSBjaGFyYWN0ZXIiCittc2dzdHIgIkdlaGUgZWluIFplaWNoZW4gbmFjaCByZWNodHMiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgU1BFQUtfRlJTVF9DSEFSIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDo3ODkKK21zZ2lkICJnbyB0byBhbmQgc3BlYWsgZmlyc3Qgbm9uLWJsYW5rIGNoYXJhY3RlciBvbiBsaW5lIgorbXNnc3RyICJHZWhlIHp1IHVuZCBzcHJpY2ggZXJzdGVzIG5pY2h0IGxlZXJlcyBaZWljaGVuIGRlciBaZWlsZSIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBTUEVBS19GUlNUX0xJTkUgY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjgwNQorbXNnaWQgImdvIHRvIGFuZCBzcGVhayBmaXJzdCBub24tYmxhbmsgbGluZSBvbiBzY3JlZW4iCittc2dzdHIgIkdlaGUgenUgdW5kIHNwcmljaCBlcnN0ZSBuaWNodCBsZWVyZSBaZWlsZSBkZXMgQmlsZHNjaGlybXMiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgU1BFQUtfTEFTVF9DSEFSIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDo3OTcKK21zZ2lkICJnbyB0byBhbmQgc3BlYWsgbGFzdCBub24tYmxhbmsgY2hhcmFjdGVyIG9uIGxpbmUiCittc2dzdHIgIkdlaGUgenUgdW5kIHNwcmljaCBsZXR6dGVzIG5pY2h0IGxlZXJlcyBaZWljaGVuIGRlciBaZWlsZSIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBTUEVBS19MQVNUX0xJTkUgY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjgxMworbXNnaWQgImdvIHRvIGFuZCBzcGVhayBsYXN0IG5vbi1ibGFuayBsaW5lIG9uIHNjcmVlbiIKK21zZ3N0ciAiR2VoZSB6dSB1bmQgc3ByaWNoIGxldHp0ZSBuaWNodCBsZWVyZSBaZWlsZSBkZXMgQmlsZHNjaGlybXMiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgU1BFQUtfTkVYVF9DSEFSIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDo3MzUKK21zZ2lkICJnbyB0byBhbmQgc3BlYWsgbmV4dCBjaGFyYWN0ZXIiCittc2dzdHIgIkdlaGUgenUgdW5kIHNwcmljaCBuw6RjaHN0ZXMgWmVpY2hlbiIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBTUEVBS19ORVhUX0xJTkUgY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjc4MQorbXNnaWQgImdvIHRvIGFuZCBzcGVhayBuZXh0IGxpbmUiCittc2dzdHIgIkdlaGUgenUgdW5kIHNwcmljaCBuw6RjaHN0ZSBaZWlsZSIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBTUEVBS19ORVhUX1dPUkQgY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjc1OAorbXNnaWQgImdvIHRvIGFuZCBzcGVhayBuZXh0IHdvcmQiCittc2dzdHIgIkdlaGUgenUgdW5kIHNwcmljaCBuw6RjaHN0ZXMgV29ydCIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBTUEVBS19QUkVWX0NIQVIgY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjcyNworbXNnaWQgImdvIHRvIGFuZCBzcGVhayBwcmV2aW91cyBjaGFyYWN0ZXIiCittc2dzdHIgIkdlaGUgenUgdW5kIHNwcmljaCB2b3JoZXJpZ2VzIFplaWNoZW4iCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgU1BFQUtfUFJFVl9MSU5FIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDo3NzMKK21zZ2lkICJnbyB0byBhbmQgc3BlYWsgcHJldmlvdXMgbGluZSIKK21zZ3N0ciAiR2VoZSB6dSB1bmQgc3ByaWNoIHZvcmhlcmlnZSBaZWlsZSIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBTUEVBS19QUkVWX1dPUkQgY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjc1MAorbXNnaWQgImdvIHRvIGFuZCBzcGVhayBwcmV2aW91cyB3b3JkIgorbXNnc3RyICJHZWhlIHp1IHVuZCBzcHJpY2ggdm9yaGVyaWdlcyBXb3J0IgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIEJPVF9MRUZUIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDoxMTUKK21zZ2lkICJnbyB0byBiZWdpbm5pbmcgb2YgYm90dG9tIGxpbmUiCittc2dzdHIgIkdlaGUgenVtIEFuZmFuZyBkZXIgdW50ZXJzdGVuIFplaWxlIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIExOQkVHIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDoyNDYKK21zZ2lkICJnbyB0byBiZWdpbm5pbmcgb2YgbGluZSIKK21zZ3N0ciAiR2VoZSB6dW0gQW5mYW5nIGRlciBaZWlsZSIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBUT1BfTEVGVCBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6MTA1Cittc2dpZCAiZ28gdG8gYmVnaW5uaW5nIG9mIHRvcCBsaW5lIgorbXNnc3RyICJHZWhlIHp1bSBBbmZhbmcgZGVyIG9iZXJzdGVuIFplaWxlIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIEJPVCBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6OTUKK21zZ2lkICJnbyB0byBib3R0b20gbGluZSIKK21zZ3N0ciAiR2VoZSB6dXIgdW50ZXJzdGVuIFplaWxlIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIFNQS0hPTUUgY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjUyMgorbXNnaWQgImdvIHRvIGN1cnJlbnQgc3BlYWtpbmcgcG9zaXRpb24iCittc2dzdHIgIkdlaGUgenVyIGFrdHVlbGxlbiBTcHJhY2hwb3NpdGlvbiIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBMTkVORCBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6MjU1Cittc2dpZCAiZ28gdG8gZW5kIG9mIGxpbmUiCittc2dzdHIgIkdlaGUgenVtIEVuZGUgZGVyIFplaWxlIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIE1FTlVfUFJFVl9MRVZFTCBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6NjY0Cittc2dpZCAiZ28gdG8gcHJldmlvdXMgbWVudSBsZXZlbCIKK21zZ3N0ciAiR2VoZSB6dXIgdm9yaGVyaWdlbiBNZW7DvGViZW5lIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIEdPVE9NQVJLIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDoxMzAwCittc2dpZCAiZ28gdG8gcmVtZW1iZXJlZCBicmFpbGxlIHdpbmRvdyBwb3NpdGlvbiIKK21zZ3N0ciAiR2VoZSB6dSBnZXNwZWljaGVydGVyIEJyYWlsbGV6ZWlsZW5wb3NpdGlvbiIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBIT01FIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDoyNjMKK21zZ2lkICJnbyB0byBzY3JlZW4gY3Vyc29yIgorbXNnc3RyICJHZWhlIHp1bSBCaWxkc2NoaXJtY3Vyc29yIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIFJFVFVSTiBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6Mjc5Cittc2dpZCAiZ28gdG8gc2NyZWVuIGN1cnNvciBvciBnbyBiYWNrIGFmdGVyIGN1cnNvciB0cmFja2luZyIKK21zZ3N0ciAiR2VoZSB6dW0gQmlsZHNjaGlybWN1cnNvciBvZGVyIGdlaGUgenVyw7xjayBuYWNoIEN1cnNvcnZlcmZvbGd1bmciCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgR09UT0xJTkUgY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjEzMTAKK21zZ2lkICJnbyB0byBzZWxlY3RlZCBsaW5lIgorbXNnc3RyICJHZWhlIHp1IGhlcnZvcmdlaG9iZW5lciBaZWlsZSIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBHVUlfSE9NRSBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6MTA2OQorIywgZnV6enkKK21zZ2lkICJnbyB0byB0aGUgaG9tZSBzY3JlZW4iCittc2dzdHIgIkJpbGRzY2hpcm10cmVpYmVyIHN0b3BwZW4iCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgVE9QIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDo4NgorbXNnaWQgImdvIHRvIHRvcCBsaW5lIgorbXNnc3RyICJHZWhlIHp1ciBvYmVyc3RlbiBaZWlsZSIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBMTlVQIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDoxNAorbXNnaWQgImdvIHVwIG9uZSBsaW5lIgorbXNnc3RyICJHZWhlIGVpbmUgWmVpbGUgbmFjaCBvYmVuIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIFdJTlVQIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDozMgorbXNnaWQgImdvIHVwIHNldmVyYWwgbGluZXMiCittc2dzdHIgIkdlaGUgbWVocmVyZSBaZWlsZW4gbmFjaCBvYmVuIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIE1FTlVfRklSU1RfSVRFTSBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6NDY2Cittc2dpZCAiZ28gdXAgdG8gZmlyc3QgaXRlbSIKK21zZ3N0ciAiR2VoZSBuYWNoIG9iZW4genVtIGVyc3RlbiBFbGVtZW50IgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIFBSUEdSUEggY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjEyNAorbXNnaWQgImdvIHVwIHRvIGZpcnN0IGxpbmUgb2YgcGFyYWdyYXBoIgorbXNnc3RyICJHZWhlIHp1ciBlcnN0ZW4gWmVpbGUgZGVzIEFic2F0emVzIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIFBSRElGQ0hBUiBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6MTMyMAorbXNnaWQgImdvIHVwIHRvIG5lYXJlc3QgbGluZSB3aXRoIGRpZmZlcmVudCBjaGFyYWN0ZXIiCittc2dzdHIgIkdlaGUgenUgdm9yaGVyaWdlciBaZWlsZSBtaXQgYW5kZXJlbSBaZWljaGVuIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIFBSRElGTE4gY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjUwCittc2dpZCAiZ28gdXAgdG8gbmVhcmVzdCBsaW5lIHdpdGggZGlmZmVyZW50IGNvbnRlbnQiCittc2dzdHIgIkdlaGUgenUgdm9yaGVyaWdlciBaZWlsZSBtaXQgYW5kZXJlbSBJbmhhbHQiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgQVRUUlVQIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDo2OAorbXNnaWQgImdvIHVwIHRvIG5lYXJlc3QgbGluZSB3aXRoIGRpZmZlcmVudCBoaWdobGlnaHRpbmciCittc2dzdHIgIkdlaGUgenUgdm9yaGVyaWdlciBaZWlsZSBtaXQgYW5kZXJlciBIZXJ2b3JoZWJ1bmciCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgUFJJTkRFTlQgY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjEyNTcKK21zZ2lkICJnbyB1cCB0byBuZWFyZXN0IGxpbmUgd2l0aCBsZXNzIGluZGVudCB0aGFuIGNoYXJhY3RlciIKK21zZ3N0ciAiR2VoZSB6dSB2b3JoZXJpZ2VyIFplaWxlIG1pdCB3ZW5pZ2VyIEVpbnLDvGNrdW5nIGFscyBaZWljaGVuIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIFBSUFJPTVBUIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDoxNDIKK21zZ2lkICJnbyB1cCB0byBwcmV2aW91cyBjb21tYW5kIHByb21wdCIKK21zZ3N0ciAiR2VoZSB6dW0gdm9yaGVyaWdlbiBLb21tYW5kb3Byb21wdCIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBNRU5VX1BSRVZfSVRFTSBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6NDg0Cittc2dpZCAiZ28gdXAgdG8gcHJldmlvdXMgaXRlbSIKK21zZ3N0ciAiR2VoZSBuYWNoIG9iZW4genVtIHZvcmhlcmlnZW4gRWxlbWVudCIKKworIy4gRworIzogUHJvZ3JhbXMvY21kX3V0aWxzLmM6MTQ2Cittc2dpZCAiZ3JlZW4iCittc2dzdHIgIkdyw7xuIgorCisjOiBQcm9ncmFtcy9wZ21wcml2c19saW51eC5jOjIxNjcKK21zZ2lkICJncm91cCBwZXJtaXNzaW9ucyBhZGRlZCIKK21zZ3N0ciAiR3J1cHBlbmJlcmVjaHRpZ3VuZ2VuIGhpbnp1Z2Vmw7xndCIKKworIzogUHJvZ3JhbXMvY21kX21pc2NlbGxhbmVvdXMuYzoyMTMKK21zZ2lkICJoZWxwIG5vdCBhdmFpbGFibGUiCittc2dzdHIgIkhpbGZlIG5pY2h0IHZlcmbDvGdiYXIiCisKKyM6IFByb2dyYW1zL3Njcl9oZWxwLmM6MjI5Cittc2dpZCAiaGVscCBzY3JlZW4gbm90IHJlYWRhYmxlIgorbXNnc3RyICJIaWxmZSBuaWNodCBsZXNiYXIiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgS0VZX0hPTUUgY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjE1OTEKK21zZ2lkICJob21lIGtleSIKK21zZ3N0ciAiUG9zMS1UYXN0ZSIKKworIzogUHJvZ3JhbXMvY29uZmlnLmM6NTcwCittc2dpZCAiaWRlbnRpZmllciwuLi4iCittc2dzdHIgIkJlemVpY2hudW5nLC4uLiIKKworIzogRHJpdmVycy9CcmFpbGxlL0JhdW0vYnJhaWxsZS5jOjExNDgKK21zZ2lkICJpZGxlIHRpbWVvdXQiCittc2dzdHIgIkluYWt0aXZpdMOkdHN6ZWl0w7xiZXJzY2hyZWl0dW5nIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIFNBWV9ISUdIRVIgY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjExNzUKK21zZ2lkICJpbmNyZWFzZSBzcGVha2luZyBwaXRjaCIKK21zZ3N0ciAiZGllIFRvbmjDtmhlIGRlciBTcHJhY2hhdXNnYWJlIGVyaMO2aGVuIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIFNBWV9GQVNURVIgY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjU1NworbXNnaWQgImluY3JlYXNlIHNwZWFraW5nIHJhdGUiCittc2dzdHIgIlNjaG5lbGxlciBzcHJlY2hlbiIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBTQVlfTE9VREVSIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDo1NzEKK21zZ2lkICJpbmNyZWFzZSBzcGVha2luZyB2b2x1bWUiCittc2dzdHIgIkxhdXRlciBzcHJlY2hlbiIKKworIzogUHJvZ3JhbXMvY29yZS5jOjExMjgKK21zZ2lkICJpbmRlbnQiCittc2dzdHIgIkVpbnLDvGNrdW5nIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIFBBU1RFX0hJU1RPUlkgY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjEzNTQKK21zZ2lkICJpbnNlcnQgY2xpcGJvYXJkIGhpc3RvcnkgZW50cnkgYWZ0ZXIgc2NyZWVuIGN1cnNvciIKK21zZ3N0ciAiVGV4dCBkZXIgWndpc2NoZW5hYmxhZ2VuaGlzdG9yaWUgbmFjaCBCaWxkc2NoaXJtY3Vyc29yIGVpbmbDvGdlbiIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBQQVNURSBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6NjAwCittc2dpZCAiaW5zZXJ0IGNsaXBib2FyZCB0ZXh0IGFmdGVyIHNjcmVlbiBjdXJzb3IiCittc2dzdHIgIlRleHQgZGVyIFp3aXNjaGVuYWJsYWdlIGFuIEJpbGRzY2hpcm1jdXJzb3Jwb3NpdGlvbiBlaW5mw7xnZW4iCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgSE9TVF9QQVNURSBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6MTA0NworIywgZnV6enkKK21zZ2lkICJpbnNlcnQgaG9zdCBjbGlwYm9hcmQgdGV4dCBhZnRlciBzY3JlZW4gY3Vyc29yIgorbXNnc3RyICJUZXh0IGRlciBad2lzY2hlbmFibGFnZSBhbiBCaWxkc2NoaXJtY3Vyc29ycG9zaXRpb24gZWluZsO8Z2VuIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIEtFWV9JTlNFUlQgY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjE2MDcKK21zZ2lkICJpbnNlcnQga2V5IgorbXNnc3RyICJFaW5mw7xnZS1UYXN0ZSIKKworIzogUHJvZ3JhbXMvcHJvZ3JhbS5jOjE2NgorbXNnaWQgImluc3RhbGwgcGF0aCBub3QgYWJzb2x1dGUiCittc2dzdHIgIkluc3RhbGxhdGlvbnNwZmFkIGlzdCBuaWNodCBhYnNvbHV0IgorCisjOiBQcm9ncmFtcy9vcHRpb25zLmM6MTA0Cittc2dpZCAiaW52YWxpZCBjb3VudGVyIHNldHRpbmciCittc2dzdHIgInVuZ8O8bHRpZ2UgWsOkaGxlci1FaW5zdGVsbHVuZyIKKworIzogUHJvZ3JhbXMvZGF0YWZpbGUuYzozMTgKK21zZ2lkICJpbnZhbGlkIGVzY2FwZSBzZXF1ZW5jZSIKK21zZ3N0ciAidW5nw7xsdGlnZSBFc2NhcGUtU2VxdWVueiIKKworIzogUHJvZ3JhbXMvb3B0aW9ucy5jOjExMworbXNnaWQgImludmFsaWQgZmxhZyBzZXR0aW5nIgorbXNnc3RyICJ1bmfDvGx0aWdlIFNjaGFsdGVyLUVpbnN0ZWxsdW5nIgorCisjOiBQcm9ncmFtcy9jb25maWcuYzoyODYzCittc2dpZCAiaW52YWxpZCBtZXNzYWdlIGhvbGQgdGltZW91dCIKK21zZ3N0ciAidW5nw7xsdGlnZSBNZWxkdW5nc2FuemVpZ2VkYXVlciIKKworIy4gdGhlIG9wZXJhbmQgZm9yIGFuIG9wdGlvbiBpcyBpbnZhbGlkCisjOiBQcm9ncmFtcy9vcHRpb25zLmM6NTk0CisjLCBmdXp6eQorbXNnaWQgImludmFsaWQgb3BlcmFuZCIKK21zZ3N0ciAiZmVobGVuZGVyIE9wZXJhbmQiCisKKyM6IFByb2dyYW1zL2JybGFwaV9zZXJ2ZXIuYzo0NTE2Cittc2dpZCAiaW52YWxpZCB0aHJlYWQgc3RhY2sgc2l6ZSIKK21zZ3N0ciAidW5nw7xsdGlnZSBUaHJlYWRzdGFwZWxncsO2w59lIgorCisjOiBEcml2ZXJzL0JyYWlsbGUvQnJhaWxsZUxpdGUvYnJhaWxsZS5jOjU5MAorIzogRHJpdmVycy9CcmFpbGxlL0JyYWlsbGVMaXRlL2JyYWlsbGUuYzo2NjgKK21zZ2lkICJrZXlib2FyZCBlbXUgb2ZmIgorbXNnc3RyICJUYXN0YXR1cmVtdWxhdGlvbiBhdXMiCisKKyM6IERyaXZlcnMvQnJhaWxsZS9CcmFpbGxlTGl0ZS9icmFpbGxlLmM6NTg5Cittc2dpZCAia2V5Ym9hcmQgZW11IG9uIgorbXNnc3RyICJUYXN0YXR1cmVtdWxhdGlvbiBlaW4iCisKKyMuIEwgIEIKKyM6IFByb2dyYW1zL2NtZF91dGlscy5jOjE1MworbXNnaWQgImxpZ2h0IGJsdWUiCittc2dzdHIgIkhlbGxibGF1IgorCisjLiBMIEdCCisjOiBQcm9ncmFtcy9jbWRfdXRpbHMuYzoxNTUKK21zZ2lkICJsaWdodCBjeWFuIgorbXNnc3RyICJIZWxsenlhbiIKKworIy4gTCBHCisjOiBQcm9ncmFtcy9jbWRfdXRpbHMuYzoxNTQKK21zZ2lkICJsaWdodCBncmVlbiIKK21zZ3N0ciAiSGVsbGdyw7xuIgorCisjLiBSR0IKKyM6IFByb2dyYW1zL2NtZF91dGlscy5jOjE1MQorbXNnaWQgImxpZ2h0IGdyZXkiCittc2dzdHIgIkhlbGxncmF1IgorCisjLiBMUiBCCisjOiBQcm9ncmFtcy9jbWRfdXRpbHMuYzoxNTcKK21zZ2lkICJsaWdodCBtYWdlbnRhIgorbXNnc3RyICJIZWxsbWFnZW50YSIKKworIy4gTFIKKyM6IFByb2dyYW1zL2NtZF91dGlscy5jOjE1NgorbXNnaWQgImxpZ2h0IHJlZCIKK21zZ3N0ciAiSGVsbHJvdCIKKworIzogUHJvZ3JhbXMvY21kX3NwZWVjaC5jOjUwMAorbXNnaWQgImxpbmUiCittc2dzdHIgIlplaWxlIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIENPUFlfTElORSBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6MTIzOQorbXNnaWQgImxpbmVhciBjb3B5IHRvIGNoYXJhY3RlciIKK21zZ3N0ciAia29waWVyZSBvaG5lIFplaWxlbnVtYnLDvGNoZSBiaXMgWmVpY2hlbiIKKworIzogUHJvZ3JhbXMvY29uZmlnLmM6NzUwCittc2dpZCAibHZsfGNhdCwuLi4iCittc2dzdHIgImx2bHxrYXQsLi4uIgorCisjLiBSIEIKKyM6IFByb2dyYW1zL2NtZF91dGlscy5jOjE0OQorbXNnaWQgIm1hZ2VudGEiCittc2dzdHIgIk1hZ2VudGEiCisKKyMuIHRoZSBvcGVyYW5kIGZvciBhIHN0cmluZyBvcHRpb24gaGFzbid0IGJlZW4gc3BlY2lmaWVkCisjOiBQcm9ncmFtcy9vcHRpb25zLmM6NTg4Cittc2dpZCAibWlzc2luZyBvcGVyYW5kIgorbXNnc3RyICJmZWhsZW5kZXIgT3BlcmFuZCIKKworIzogUHJvZ3JhbXMvcGFyc2UuYzo0NzIKK21zZ2lkICJtaXNzaW5nIHBhcmFtZXRlciBuYW1lIgorbXNnc3RyICJmZWhsZW5kZXIgUGFyYW1ldGVybmFtZSIKKworIzogUHJvZ3JhbXMvcGFyc2UuYzo0NTgKK21zZ2lkICJtaXNzaW5nIHBhcmFtZXRlciBxdWFsaWZpZXIiCittc2dzdHIgImZlaGxlbmRlIFBhcmFtZXRlcmtlbm56ZWljaG51bmciCisKKyM6IFByb2dyYW1zL3BhcnNlLmM6NDM0Cittc2dpZCAibWlzc2luZyBwYXJhbWV0ZXIgdmFsdWUiCittc2dzdHIgImZlaGxlbmRlciBQYXJhbWV0ZXJ3ZXJ0IgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIEdVSV9JVEVNX0ZSU1QgY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjExNDAKK21zZ2lkICJtb3ZlIHRvIHRoZSBmaXJzdCBpdGVtIGluIHRoZSBzY3JlZW4gYXJlYSIKK21zZ3N0ciAiZ2VoZSB6dW0gZXJzdGVuIEVsZW1lbnQgZGVzIEJpbGRzY2hpcm1iZXJlaWNoZXMiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgR1VJX0lURU1fTEFTVCBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6MTE2MQorbXNnaWQgIm1vdmUgdG8gdGhlIGxhc3QgaXRlbSBpbiB0aGUgc2NyZWVuIGFyZWEiCittc2dzdHIgIiIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBHVUlfSVRFTV9ORVhUIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDoxMTU0Cittc2dpZCAibW92ZSB0byB0aGUgbmV4dCBpdGVtIGluIHRoZSBzY3JlZW4gYXJlYSIKK21zZ3N0ciAiZ2VoZSB6dW0gbsOkY2hzdGVuIEVsZW1lbnQgZGVzIEJpbGRzY2hpcm1iZXJlaWNoZXMiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgR1VJX0lURU1fUFJFViBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6MTE0NworbXNnaWQgIm1vdmUgdG8gdGhlIHByZXZpb3VzIGl0ZW0gaW4gdGhlIHNjcmVlbiBhcmVhIgorbXNnc3RyICJnZWhlIHp1bSB2b3JoZXJpZ2VuIEVsZW1lbnQgZGVzIEJpbGRzY2hpcm1iZXJlaWNoZXMiCisKKyM6IFByb2dyYW1zL21zZ3Rlc3QuYzo1NworbXNnaWQgIm5hbWUiCittc2dzdHIgIk5hbWUiCisKKyM6IFByb2dyYW1zL2NvbmZpZy5jOjQzMyBQcm9ncmFtcy9jb25maWcuYzo0ODUgUHJvZ3JhbXMvY29uZmlnLmM6NTM4CisjOiBQcm9ncmFtcy9jb25maWcuYzo1NjAgUHJvZ3JhbXMvY29uZmlnLmM6NjM4IFByb2dyYW1zL2NvbmZpZy5jOjY1NworIzogUHJvZ3JhbXMvY29uZmlnLmM6NzAwCittc2dpZCAibmFtZT12YWx1ZSwuLi4iCittc2dzdHIgIk5hbWU9V2VydCwuLi4iCisKKyM6IERyaXZlcnMvQnJhaWxsZS9JcmlzL2JyYWlsbGUuYzoxNTEwCittc2dpZCAibmF0aXZlIgorbXNnc3RyICJlaWdlbmVzIgorCisjOiBQcm9ncmFtcy9jb25maWcuYzoxMjQ4Cittc2dpZCAibm8ga2V5IGJpbmRpbmdzIgorbXNnc3RyICJLZWluZSBUYXN0ZW5iZWxlZ3VuZ2VuIgorCisjOiBQcm9ncmFtcy9zY3JfZHJpdmVyLmM6MzkKK21zZ2lkICJubyBzY3JlZW4iCittc2dzdHIgIktlaW4gQmlsZHNjaGlybSIKKworIzogUHJvZ3JhbXMvY29uZmlnLmM6MTE2Cittc2dpZCAibm9uZSIKK21zZ3N0ciAia2VpbmUiCisKKyM6IFByb2dyYW1zL2NvbmZpZy5jOjE1MzcKK21zZ2lkICJub3Qgc2F2ZWQiCittc2dzdHIgIm5pY2h0IGdlc3BlaWNoZXJ0IgorCisjOiBQcm9ncmFtcy9wZ21wcml2c19saW51eC5jOjIwMTgKK21zZ2lkICJub3Qgc3dpdGNoaW5nIHRvIGFuIHVucHJpdmlsZWdlZCB1c2VyIgorbXNnc3RyICIiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgR1VJX0FQUF9BTEVSVFMgY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjExMTIKK21zZ2lkICJvcGVuIHRoZSBhcHBsaWNhdGlvbiBhbGVydHMgd2luZG93IgorbXNnc3RyICIiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgR1VJX0FQUF9MSVNUIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDoxMDk4Cittc2dpZCAib3BlbiB0aGUgYXBwbGljYXRpb24gbGlzdCB3aW5kb3ciCittc2dzdHIgIiIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBHVUlfQVBQX01FTlUgY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjExMDUKK21zZ2lkICJvcGVuIHRoZSBhcHBsaWNhdGlvbi1zcGVjaWZpYyBtZW51IgorbXNnc3RyICIiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgR1VJX0JSTF9BQ1RJT05TIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDoxMDYxCisjLCBmdXp6eQorbXNnaWQgIm9wZW4gdGhlIGJyYWlsbGUgYWN0aW9ucyB3aW5kb3ciCittc2dzdHIgIkdlaGUgZWluZSBoYWxiZSBCcmFpbGxlemVpbGVubMOkbmdlIG5hY2ggbGlua3MiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgR1VJX0RFVl9PUFRJT05TIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDoxMDkxCittc2dpZCAib3BlbiB0aGUgZGV2aWNlIG9wdGlvbnMgd2luZG93IgorbXNnc3RyICIiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgR1VJX0RFVl9TRVRUSU5HUyBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6MTA4NAorbXNnaWQgIm9wZW4gdGhlIGRldmljZSBzZXR0aW5ncyB3aW5kb3ciCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvb3B0aW9ucy5jOjIwMgorbXNnaWQgIm9wdGlvbiIKK21zZ3N0ciAiT3B0aW9uIgorCisjOiBQcm9ncmFtcy9wZ21wcml2c19saW51eC5jOjIxNTIKK21zZ2lkICJvd25lcnNoaXAgY2xhaW1lZCIKK21zZ3N0ciAiIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIEtFWV9QQUdFX0RPV04gY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjE1ODMKK21zZ2lkICJwYWdlLWRvd24ga2V5IgorbXNnc3RyICJTZWl0ZS1SdW50ZXIgVGFzdGUiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgS0VZX1BBR0VfVVAgY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjE1NzUKK21zZ2lkICJwYWdlLXVwIGtleSIKK21zZ3N0ciAiU2VpdGUtUmF1ZiBUYXN0ZSIKKworIzogUHJvZ3JhbXMvbXNndGVzdC5jOjQyCittc2dpZCAicGF0aCIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9jb25maWcuYzoyODM2Cittc2dpZCAicGlkIGZpbGUgbm90IHNwZWNpZmllZCIKK21zZ3N0ciAiUElELURhdGVpIG5pY2h0IHNwZXppZml6aWVydCIKKworIzogUHJvZ3JhbXMvcHJvZ3JhbS5jOjMwOAorbXNnaWQgInBpZCBmaWxlIG9wZW4gZXJyb3IiCittc2dzdHIgIkZlaGxlciBiZWltIMO2ZmZuZW4gZGVyIFBJRC1EYXRlaSIKKworIzogUHJvZ3JhbXMvc3BrLmM6MjMyCittc2dpZCAicGl0Y2giCittc2dzdHIgIlRvbmjDtmhlIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIFNFVExFRlQgY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjEyODMKK21zZ2lkICJwbGFjZSBsZWZ0IGVuZCBvZiBicmFpbGxlIHdpbmRvdyBhdCBjaGFyYWN0ZXIiCittc2dzdHIgIlBvc2l0aW9uaWVyZSBsaW5rZW4gUmFuZCBkZXIgQnJhaWxsZXplaWxlIGJlaSBaZWljaGVuIgorCisjOiBEcml2ZXJzL0JyYWlsbGUvQmF1bS9icmFpbGxlLmM6MTE0NworbXNnaWQgInBvd2VyIHN3aXRjaCIKK21zZ3N0ciAiRWluLS9BdXMtU2NoYWx0ZXIiCisKKyM6IFByb2dyYW1zL2NvbmZpZy5jOjY4MAorbXNnaWQgInF1YWxpdHkiCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvc3BrLmM6MjA2Cittc2dpZCAicmF0ZSIKK21zZ3N0ciAiR2VzY2h3aW5kaWdrZWl0IgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIENPUFlfUkVDVCBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6MTIzMQorbXNnaWQgInJlY3Rhbmd1bGFyIGNvcHkgdG8gY2hhcmFjdGVyIgorbXNnc3RyICJrb3BpZXJlIG1pdCBaZWlsZW51bWJyw7xjaGVuIGJpcyBaZWljaGVuIgorCisjLiBSCisjOiBQcm9ncmFtcy9jbWRfdXRpbHMuYzoxNDgKK21zZ2lkICJyZWQiCittc2dzdHIgIlJvdCIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBSRUZSRVNIIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDoxMDA1CisjLCBmdXp6eQorbXNnaWQgInJlZnJlc2ggYnJhaWxsZSBkaXNwbGF5IgorbXNnc3RyICJQZmFkIHp1ciBTY2huaXR0c3RlbGxlIGbDvHIgZGVuIFp1Z3JpZmYgYXVmIGRpZSBCcmFpbGxlemVpbGUuIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIFJFRlJFU0hfTElORSBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6MTQxMworIywgZnV6enkKK21zZ2lkICJyZWZyZXNoIGJyYWlsbGUgbGluZSIKK21zZ3N0ciAiQnJhaWxsZXRyZWliZXIgbmV1IHN0YXJ0ZW4iCisKKyM6IFByb2dyYW1zL2NvbmZpZy5jOjQ5MgorbXNnaWQgInJlZ2V4cCwuLi4iCittc2dzdHIgInJlZ2V4cCwuLi4iCisKKyM6IFByb2dyYW1zL2NvbmZpZy5jOjIwODEKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVpbml0aWFsaXppbmcgYnJhaWxsZSBkcml2ZXIiCittc2dzdHIgInJlaW5pdGlhbGlzaWVyZSBCcmFpbGxldHJlaWJlciIKKworIzogUHJvZ3JhbXMvY29uZmlnLmM6MjU5NAorIywgYy1mb3JtYXQKK21zZ2lkICJyZWluaXRpYWxpemluZyBzY3JlZW4gZHJpdmVyIgorbXNnc3RyICJyZWluaXRpYWxpc2llcmUgQmlsZHNjaGlybXRyZWliZXIiCisKKyM6IFByb2dyYW1zL2NvbmZpZy5jOjIzOTQKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVpbml0aWFsaXppbmcgc3BlZWNoIGRyaXZlciIKK21zZ3N0ciAicmVpbml0aWFsaXNpZXJlIFNwcmFjaGF1c2dhYmVudHJlaWJlciIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBTRVRNQVJLIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDoxMjkxCittc2dpZCAicmVtZW1iZXIgY3VycmVudCBicmFpbGxlIHdpbmRvdyBwb3NpdGlvbiIKK21zZ3N0ciAiU3BlaWNoZXJlIGFrdHVlbGxlIEJyYWlsbGV6ZWlsZW5wb3NpdGlvbiIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBBTEVSVCBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6MTQ0NQorbXNnaWQgInJlbmRlciBhbiBhbGVydCIKK21zZ3N0ciAiIgorCisjOiBEcml2ZXJzL0JyYWlsbGUvQnJhaWxsZUxpdGUvYnJhaWxsZS5jOjYwMQorIzogRHJpdmVycy9CcmFpbGxlL0JyYWlsbGVMaXRlL2JyYWlsbGUuYzo3ODAKKyM6IERyaXZlcnMvQnJhaWxsZS9CcmFpbGxlTGl0ZS9icmFpbGxlLmM6NzgyCisjOiBEcml2ZXJzL0JyYWlsbGUvQnJhaWxsZUxpdGUvYnJhaWxsZS5jOjc5MQorbXNnaWQgInJlcGVhdCBjb3VudCIKK21zZ3N0ciAiV2llZGVyaG9sdW5nc2FuemFobCIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBSRVNUQVJUQlJMIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDo2MDcKK21zZ2lkICJyZXN0YXJ0IGJyYWlsbGUgZHJpdmVyIgorbXNnc3RyICJCcmFpbGxldHJlaWJlciBuZXUgc3RhcnRlbiIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBSRVNUQVJUU1BFRUNIIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDo2MTQKK21zZ2lkICJyZXN0YXJ0IHNwZWVjaCBkcml2ZXIiCittc2dzdHIgIlNwcmFjaGF1c2dhYmVudHJlaWJlciBuZXUgc3RhcnRlbiIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBDTElQX1JFU1RPUkUgY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjg2NAorbXNnaWQgInJlc3RvcmUgY2xpcGJvYXJkIGZyb20gZGlzayIKK21zZ3N0ciAiZ2VzcGVpY2hlcnRlIFp3aXNjaGVuYWJsYWdlIHZvbiBGZXN0cGxhdHRlIHdpZWRlcmhlcnN0ZWxsZW4iCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgUFJFRkxPQUQgY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjQ1NworbXNnaWQgInJlc3RvcmUgcHJlZmVyZW5jZXMgZnJvbSBkaXNrIgorbXNnc3RyICJnZXNwZWljaGVydGUgRWluc3RlbGx1bmdlbiB3aWVkZXJoZXJzdGVsbGVuIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIEdVSV9BUkVBX0FDVFYgY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjExMTkKKyMsIGZ1enp5Cittc2dpZCAicmV0dXJuIHRvIHRoZSBhY3RpdmUgc2NyZWVuIGFyZWEiCittc2dzdHIgIkJpbGRzY2hpcm10cmVpYmVyIHN0YXJ0ZW4iCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgQ0xJUF9TQVZFIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDo4NTcKK21zZ2lkICJzYXZlIGNsaXBib2FyZCB0byBkaXNrIgorbXNnc3RyICJTcGVpY2hlcnQgZGVuIEluaGFsdCBkZXIgWndpc2NoZW5hYmxhZ2UgYXVmIGRpZSBGZXN0cGxhdHRlIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIFBSRUZTQVZFIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDo0NTAKK21zZ2lkICJzYXZlIHByZWZlcmVuY2VzIHRvIGRpc2siCittc2dzdHIgIkVpbnN0ZWxsdW5nZW4gc3BlaWNoZXJuIgorCisjOiBQcm9ncmFtcy94YnJsYXBpLmM6OTEKK21zZ2lkICJzY2hlbWUrLi4uIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL2NvbmZpZy5jOjI0NzAKK21zZ2lkICJzY3JlZW4gZHJpdmVyIG5vdCBsb2FkYWJsZSIKK21zZ3N0ciAiQmlsZHNjaGlybXRyZWliZXIga2FubiBuaWNodCBnZWxhZGVuIHdlcmRlbiIKKworIzogUHJvZ3JhbXMvY29uZmlnLmM6MjU5MQorbXNnaWQgInNjcmVlbiBkcml2ZXIgcmVzdGFydGluZyIKK21zZ3N0ciAiQmlsZHNjaGlybXRyZWliZXIgd2lyZCBuZXUgZ2VzdGFydGV0IgorCisjOiBQcm9ncmFtcy9jbWRfbWlzY2VsbGFuZW91cy5jOjE3MQorbXNnaWQgInNjcmVlbiBkcml2ZXIgc3RvcHBlZCIKK21zZ3N0ciAiQmlsZHNjaGlybXRyZWliZXIgZ2VzdG9wcHQiCisKKyM6IERyaXZlcnMvU2NyZWVuL0FuZHJvaWQvc2NyZWVuLmM6MTg0Cittc2dpZCAic2NyZWVuIGxvY2tlZCIKK21zZ3N0ciAiQmlsZHNjaGlybSBnZXNwZXJydCIKKworIzogRHJpdmVycy9TY3JlZW4vTGludXgvc2NyZWVuLmM6MTUzMQorbXNnaWQgInNjcmVlbiBub3QgaW4gdGV4dCBtb2RlIgorbXNnc3RyICJCaWxkc2NoaXJtIG5pY2h0IGltIFRleHRtb2R1cyIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBQUlNFQVJDSCBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6MTU4Cittc2dpZCAic2VhcmNoIGJhY2t3YXJkIGZvciBjbGlwYm9hcmQgdGV4dCIKK21zZ3N0ciAic3VjaGUgcsO8Y2t3w6RydHMgbmFjaCBJbmhhbHQgZGVyIFp3aXNjaGVuYWJsYWdlIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIE5YU0VBUkNIIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDoxNjUKK21zZ2lkICJzZWFyY2ggZm9yd2FyZCBmb3IgY2xpcGJvYXJkIHRleHQiCittc2dzdHIgIlN1Y2hlIHZvcnfDpHJ0cyBuYWNoIEluaGFsdCBkZXIgWndpc2NoZW5hYmxhZ2UiCisKKyM6IFByb2dyYW1zL21lbnUuYzo0NjkKK21zZ2lkICJzZWNvbmRzIgorbXNnc3RyICJTZWt1bmRlbiIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBUWFRTRUxfQUxMIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDoxMDI2Cittc2dpZCAic2VsZWN0IGFsbCBvZiB0aGUgdGV4dCIKK21zZ3N0ciAic2VsZWt0aWVyZSBkZW4gZ2VzYW10ZW4gVGV4dCIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBNRU5VX05FWFRfU0VUVElORyBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6NTA3Cittc2dpZCAic2VsZWN0IG5leHQgY2hvaWNlIgorbXNnc3RyICJ3w6RobGUgbsOkY2hzdGUgTcO2Z2xpY2hrZWl0IgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIE1FTlVfUFJFVl9TRVRUSU5HIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDo1MDAKK21zZ2lkICJzZWxlY3QgcHJldmlvdXMgY2hvaWNlIgorbXNnc3RyICJ3w6RobGUgdm9yaGVyaWdlIE3DtmdsaWNoa2VpdCIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBUVU5FUyBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6Mzk5Cittc2dpZCAic2V0IGFsZXJ0IHR1bmVzIG9uL29mZiIKK21zZ3N0ciAic2NoYWx0ZSBTaWduYWx0w7ZuZSBlaW4vYXVzIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIEFUVFJCTElOSyBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6MzgzCittc2dpZCAic2V0IGF0dHJpYnV0ZSBibGlua2luZyBvbi9vZmYiCittc2dzdHIgInNjaGFsdGUgYmxpbmtlbmRlIEF0dHJpYnV0ZSBlaW4vYXVzIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIEFUVFJWSVMgY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjM3NQorbXNnaWQgInNldCBhdHRyaWJ1dGUgdW5kZXJsaW5pbmcgb24vb2ZmIgorbXNnc3RyICJzY2hhbHRlIHVudGVyc3RyaWNoZW5lIEF0dHJpYnV0ZSBlaW4vYXVzIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIFNFVF9BVFRSSUJVVEVTX1RBQkxFIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDoxMzcwCittc2dpZCAic2V0IGF0dHJpYnV0ZXMgdGFibGUiCittc2dzdHIgIlNldHplIEF0dHJpYnV0dGFiZWxsZSIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBBVVRPUkVQRUFUIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDo0MDcKK21zZ2lkICJzZXQgYXV0b3JlcGVhdCBvbi9vZmYiCittc2dzdHIgInNjaGFsdGUgYXV0b21hdGlzY2hlIFdpZWRlcmhvbHVuZyBlaW4vYXVzIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIEFTUEtfQ01QX1dPUkRTIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDo3MTIKK21zZ2lkICJzZXQgYXV0b3NwZWFrIGNvbXBsZXRlZCB3b3JkcyBvbi9vZmYiCittc2dzdHIgInNjaGFsdGUgYXV0b21hdGlzY2hlcyBTcHJlY2hlbiB2ZXJ2b2xsc3TDpG5kaWd0ZXIgV8O2cnRlciBlaW4vYXVzIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIEFTUEtfREVMX0NIQVJTIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDo2OTYKK21zZ2lkICJzZXQgYXV0b3NwZWFrIGRlbGV0ZWQgY2hhcmFjdGVycyBvbi9vZmYiCittc2dzdHIgInNjaGFsdGUgYXV0b21hdGlzY2hlcyBTcHJlY2hlbiBnZWzDtnNjaHRlciBaZWljaGVuIGVpbi9hdXMiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgQVNQS19JTkRFTlQgY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjk5OAorbXNnaWQgInNldCBhdXRvc3BlYWsgaW5kZW50IG9mIGN1cnJlbnQgbGluZSBvbi9vZmYiCittc2dzdHIgInNjaGFsdGUgYXV0b21hdGlzY2hlcyBTcHJlY2hlbiBkZXIgRWlucsO8Y2t1bmcgZGVyIGFrdHVlbGxlbiBaZWlsZSBlaW4vYXVzIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIEFTUEtfSU5TX0NIQVJTIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDo2ODgKK21zZ2lkICJzZXQgYXV0b3NwZWFrIGluc2VydGVkIGNoYXJhY3RlcnMgb24vb2ZmIgorbXNnc3RyICJzY2hhbHRlIGF1dG9tYXRpc2NoZXMgU3ByZWNoZW4gZWluZ2Vmw7xndGVyIFplaWNoZW4gZWluL2F1cyIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBBVVRPU1BFQUsgY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjQxNQorbXNnaWQgInNldCBhdXRvc3BlYWsgb24vb2ZmIgorbXNnc3RyICJzY2hhbHRlIGF1dG9tYXRpc2NoZXMgU3ByZWNoZW4gZWluL2F1cyIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBBU1BLX1JFUF9DSEFSUyBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6NzA0Cittc2dpZCAic2V0IGF1dG9zcGVhayByZXBsYWNlZCBjaGFyYWN0ZXJzIG9uL29mZiIKK21zZ3N0ciAic2NoYWx0ZSBhdXRvbWF0aXNjaGVzIFNwcmVjaGVuIGVyc8OkdHp0ZXIgV8O2cnRlciBlaW4vYXVzIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIEFTUEtfU0VMX0NIQVIgY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjY4MAorbXNnaWQgInNldCBhdXRvc3BlYWsgc2VsZWN0ZWQgY2hhcmFjdGVyIG9uL29mZiIKK21zZ3N0ciAic2NoYWx0ZSBhdXRvbWF0aXNjaGVzIFNwcmVjaGVuIGRlcyBoZXJ2b3JnZWhvYmVuZW4gWmVpY2hlbnMgZWluL2F1cyIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBBU1BLX1NFTF9MSU5FIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDo2NzIKK21zZ2lkICJzZXQgYXV0b3NwZWFrIHNlbGVjdGVkIGxpbmUgb24vb2ZmIgorbXNnc3RyICJzY2hhbHRlIGF1dG9tYXRpc2NoZXMgU3ByZWNoZW4gZGVyIGhlcnZvcmdlaG9iZW5lbiBaZWlsZSBlaW4vYXVzIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIEJSTEtCRCBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6ODgwCittc2dpZCAic2V0IGJyYWlsbGUga2V5Ym9hcmQgZW5hYmxlZC9kaXNhYmxlZCIKK21zZ3N0ciAiU2V0emUgQnJhaWxsZS1UYXN0YXR1ciBFaW4vQXVzIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIEJSTFVDRE9UUyBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6ODcyCittc2dpZCAic2V0IGJyYWlsbGUgdHlwaW5nIG1vZGUgZG90cy90ZXh0IgorbXNnc3RyICJTZXR6ZSBCcmFpbGxlIEVpbmdhYmVtb2R1cyBQdW5rdGUvVGV4dCIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBDQVBCTElOSyBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6MzkxCittc2dpZCAic2V0IGNhcGl0YWwgbGV0dGVyIGJsaW5raW5nIG9uL29mZiIKK21zZ3N0ciAic2NoYWx0ZSBibGlua2VuZGUgR3Jvw59idWNoc3RhYmVuIGVpbi9hdXMiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgQ09OVFJBQ1RFRCBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6MTE5MAorbXNnaWQgInNldCBjb250cmFjdGVkL2NvbXB1dGVyIGJyYWlsbGUiCittc2dzdHIgIiIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBTRVRfQ09OVFJBQ1RJT05fVEFCTEUgY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjEzNzgKK21zZ2lkICJzZXQgY29udHJhY3Rpb24gdGFibGUiCittc2dzdHIgIlNldHplIEt1cnpzY2hyaWZ0dGFiZWxsZSIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBESVNQTUQgY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjI5NQorbXNnaWQgInNldCBkaXNwbGF5IG1vZGUgYXR0cmlidXRlcy90ZXh0IgorbXNnc3RyICJ3ZWNoc2xlIHp3aXNjaGVuIEFuemVpZ2Vtb2R1cyBBdHRyaWJ1dGUvVGV4dCIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBDU1JISURFIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDozNDMKK21zZ2lkICJzZXQgaGlkZGVuIHNjcmVlbiBjdXJzb3Igb24vb2ZmIgorbXNnc3RyICJTY2hhbHRlIHZlcnN0ZWNrdGVuIEJpbGRzY2hpcm1jdXJzb3IgZWluL2F1cyIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBTRVRfS0VZQk9BUkRfVEFCTEUgY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjEzODYKK21zZ2lkICJzZXQga2V5Ym9hcmQgdGFibGUiCittc2dzdHIgIlNldHplIFRhc3RhdHVydGFiZWxsZSIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBTRVRfTEFOR1VBR0VfUFJPRklMRSBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6MTM5NAorbXNnaWQgInNldCBsYW5ndWFnZSBwcm9maWxlIgorbXNnc3RyICJTZXR6ZSBTcHJhY2hwcm9maWwiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgQ1NSQkxJTksgY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjM2NworbXNnaWQgInNldCBzY3JlZW4gY3Vyc29yIGJsaW5raW5nIG9uL29mZiIKK21zZ3N0ciAiU2NoYWx0ZSBibGlua2VuZGVuIEJpbGRzY2hpcm1jdXJzb3IgZWluL2F1cyIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBDU1JTSVpFIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDozNTkKK21zZ2lkICJzZXQgc2NyZWVuIGN1cnNvciBzdHlsZSBibG9jay91bmRlcmxpbmUiCittc2dzdHIgIkFydCBkZXMgQmlsZHNjaGlybWN1cnNvcnMgdW1zY2hhbHRlbiBCbG9jay9VbnRlcnN0cmljaCIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBDU1JWSVMgY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjMzNQorbXNnaWQgInNldCBzY3JlZW4gY3Vyc29yIHZpc2liaWxpdHkgb24vb2ZmIgorbXNnc3RyICJTY2hhbHRlIGRpZSBTaWNodGJhcmtlaXQgZGVzIEJpbGRzY2hpcm1jdXJzb3JzIGVpbi9hdXMiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgRlJFRVpFIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDoyODcKK21zZ2lkICJzZXQgc2NyZWVuIGltYWdlIGZyb3plbi91bmZyb3plbiIKK21zZ3N0ciAiU3RhbmRiaWxkIGVpbi0vYXVzc2NoYWx0ZW4iCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgQ09NUEJSTDYgY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjExOTgKK21zZ2lkICJzZXQgc2l4L2VpZ2h0IGRvdCBjb21wdXRlciBicmFpbGxlIgorbXNnc3RyICIiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgU0tQQkxOS1dJTlMgY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjMyNworbXNnaWQgInNldCBza2lwcGluZyBvZiBibGFuayBicmFpbGxlIHdpbmRvd3Mgb24vb2ZmIgorbXNnc3RyICJTY2hhbHRlIMOcYmVyc3ByaW5nZW4gbGVlcmVyIEJyYWlsbGV6ZWlsZW5pbmhhbHRlIGVpbi9hdXMiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgU0tQSURMTlMgY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjMxOQorbXNnaWQgInNldCBza2lwcGluZyBvZiBsaW5lcyB3aXRoIGlkZW50aWNhbCBjb250ZW50IG9uL29mZiIKK21zZ3N0ciAic2NoYWx0ZSDDnGJlcnNwcmluZ2VuIHZvbiBaZWlsZW4gbWl0IGlkZW50aXNjaGVtIEluaGFsdCBlaW4vYXVzIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIFNMSURFV0lOIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDozMTEKK21zZ2lkICJzZXQgc2xpZGluZyBicmFpbGxlIHdpbmRvdyBvbi9vZmYiCittc2dzdHIgIsO8YmVybGFwcGVuZGUgQnJhaWxsZXplaWxlbmF1c3NjaG5pdHRlIGVpbi0vYXVzc2NoYWx0ZW4iCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgU0hPV19DVVJSX0xPQ04gY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjg1MAorbXNnaWQgInNldCBzcGVlY2ggY3Vyc29yIHZpc2liaWxpdHkgb24vb2ZmIgorbXNnc3RyICJTY2hhbHRlIGRpZSBTaWNodGJhcmtlaXQgZGVzIFNwcmFjaGN1cnNvcnMgZWluL2F1cyIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBUWFRTRUxfU0VUIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDoxNDI5CisjLCBmdXp6eQorbXNnaWQgInNldCB0ZXh0IHNlbGVjdGlvbiIKK21zZ3N0ciAiU2V0emUgVGV4dHRhYmVsbGUiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgU0lYRE9UUyBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6MzAzCittc2dpZCAic2V0IHRleHQgc3R5bGUgNi1kb3QvOC1kb3QiCittc2dzdHIgIndlY2hzbGUgendpc2NoZW4gNi1QdW5rdCB1bmQgOC1QdW5rdCBCcmFpbGxlIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIFNFVF9URVhUX1RBQkxFIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDoxMzYyCittc2dpZCAic2V0IHRleHQgdGFibGUiCittc2dzdHIgIlNldHplIFRleHR0YWJlbGxlIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIFRPVUNIX05BViBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6OTgzCittc2dpZCAic2V0IHRvdWNoIG5hdmlnYXRpb24gb24vb2ZmIgorbXNnc3RyICJTY2hhbHRlIGJlcsO8aHJ1bmdzYmFzaWVydGUgTmF2aWdhdGlvbiBlaW4vYXVzIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIENTUlRSSyBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6MzUxCittc2dpZCAic2V0IHRyYWNrIHNjcmVlbiBjdXJzb3Igb24vb2ZmIgorbXNnc3RyICJTY2hhbHRlIGRpZSBWZXJmb2xndW5nIGRlcyBCaWxkc2NoaXJtY3Vyc29ycyBlaW4vYXVzIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIFRJTUUgY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjY1NgorbXNnaWQgInNob3cgY3VycmVudCBkYXRlIGFuZCB0aW1lIgorbXNnc3RyICJBa3R1ZWxsZXMgRGF0dW0gdW5kIFVocnplaXQgYW56ZWlnZW4iCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgR1VJX1RJVExFIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDoxMDU0Cittc2dpZCAic2hvdyB0aGUgd2luZG93IHRpdGxlIgorbXNnc3RyICJ6ZWlnZSBkZW4gRmVuc3RlcnRpdGVsIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIElORElDQVRPUlMgY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjEwMTIKK21zZ2lkICJzaG93IHZhcmlvdXMgZGV2aWNlIHN0YXR1cyBpbmRpY2F0b3JzIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzoxMDU3Cittc2dpZCAic291bmRjYXJkIGRpZ2l0YWwgYXVkaW8iCittc2dzdHIgIkRpZ2l0YWwgQXVkaW8gU291bmRrYXJ0ZSIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjEwNTkKK21zZ2lkICJzb3VuZGNhcmQgc3ludGhlc2l6ZXIiCittc2dzdHIgIlN5bnRoZXNpemVyIGRlciBTb3VuZGthcnRlIgorCisjOiBQcm9ncmFtcy9jbWQuYzoyNzcgUHJvZ3JhbXMvY29yZS5jOjEwNTEKK21zZ2lkICJzcGFjZSIKK21zZ3N0ciAibGVlciIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBTUEVBS19DVVJSX0NIQVIgY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjcxOQorbXNnaWQgInNwZWFrIGN1cnJlbnQgY2hhcmFjdGVyIgorbXNnc3RyICJzcHJpY2ggYWt0dWVsbGVzIFplaWNoZW4iCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgU0FZX0xJTkUgY29tbWFuZC4KKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgU1BFQUtfQ1VSUl9MSU5FIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDo1MjkgUHJvZ3JhbXMvY21kcy5hdXRvLmg6NzY1Cittc2dpZCAic3BlYWsgY3VycmVudCBsaW5lIgorbXNnc3RyICJzcHJpY2ggYWt0dWVsbGUgWmVpbGUiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgU1BFQUtfQ1VSUl9XT1JEIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDo3NDIKK21zZ2lkICJzcGVhayBjdXJyZW50IHdvcmQiCittc2dzdHIgInNwcmljaCBha3R1ZWxsZXMgV29ydCIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBTQVlfQkVMT1cgY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjU0MworbXNnaWQgInNwZWFrIGZyb20gY3VycmVudCBsaW5lIHRocm91Z2ggYm90dG9tIG9mIHNjcmVlbiIKK21zZ3N0ciAic3ByaWNoIHZvbiBha3R1ZWxsZXIgWmVpbGUgYmlzIHp1bSBFbmRlIGRlcyBCaWxkc2NoaXJtcyIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBTQVlfQUxMIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDoxMTgyCittc2dpZCAic3BlYWsgZnJvbSB0b3Agb2Ygc2NyZWVuIHRocm91Z2ggYm90dG9tIG9mIHNjcmVlbiIKK21zZ3N0ciAiIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIFNBWV9BQk9WRSBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6NTM2Cittc2dpZCAic3BlYWsgZnJvbSB0b3Agb2Ygc2NyZWVuIHRocm91Z2ggY3VycmVudCBsaW5lIgorbXNnc3RyICJzcHJpY2ggdm9tIEJlZ2lubiBkZXMgQmlsZHNjaGlybXMgYmlzIHp1ciBha3R1ZWxsZW4gWmVpbGUiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgU1BFQUtfSU5ERU5UIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDo5OTAKK21zZ2lkICJzcGVhayBpbmRlbnQgb2YgY3VycmVudCBsaW5lIgorbXNnc3RyICJzcHJpY2ggZGllIEVpbnLDvGNrdW5nIGRlciBha3R1ZWxsZW4gWmVpbGUiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgU1BFQUtfQ1VSUl9MT0NOIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDo4NDIKK21zZ2lkICJzcGVhayBzcGVlY2ggY3Vyc29yIGxvY2F0aW9uIgorbXNnc3RyICJTcHJpY2ggU3ByYWNoY3Vyc29ycG9zaXRpb24iCisKKyM6IFByb2dyYW1zL21zZ3Rlc3QuYzo1MAorbXNnaWQgInNwZWNpZmllciIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9jb25maWcuYzoyMjQyCittc2dpZCAic3BlZWNoIGRyaXZlciBub3QgbG9hZGFibGUiCittc2dzdHIgIlNwcmFjaGF1c2dhYmVudHJlaWJlciBrYW5uIG5pY2h0IGdlbGFkZW4gd2VyZGVuIgorCisjOiBQcm9ncmFtcy9jb25maWcuYzoyMzkxCittc2dpZCAic3BlZWNoIGRyaXZlciByZXN0YXJ0aW5nIgorbXNnc3RyICJCaWxkc2NoaXJtdHJlaWJlciB3aXJkIG5ldSBnZXN0YXJ0ZXQiCisKKyM6IFByb2dyYW1zL2NtZF9zcGVlY2guYzoxMDQKK21zZ2lkICJzcGVlY2ggZHJpdmVyIHN0b3BwZWQiCittc2dzdHIgIkJpbGRzY2hpcm10cmVpYmVyIGdlc3RvcHB0IgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIFNQRUxMX0NVUlJfV09SRCBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6ODI3Cittc2dpZCAic3BlbGwgY3VycmVudCB3b3JkIgorbXNnc3RyICJidWNoc3RhYmllcmUgYWt0dWVsbGVzIFdvcnQiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgQ0xJUF9ORVcgY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjEyMTUKK21zZ2lkICJzdGFydCBuZXcgY2xpcGJvYXJkIGF0IGNoYXJhY3RlciIKK21zZ3N0ciAiYmVnaW5uZSBuZXVlIEF1c3dhaGwgYmVpIFplaWNoZW4iCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgVFhUU0VMX1NUQVJUIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDoxNDIxCisjLCBmdXp6eQorbXNnaWQgInN0YXJ0IHRleHQgc2VsZWN0aW9uIgorbXNnc3RyICJTcHJhY2hhdXNnYWJlbnRyZWliZXIgc3RhcnRlbiIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBCUkxfU1RBUlQgY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjkxNQorbXNnaWQgInN0YXJ0IHRoZSBicmFpbGxlIGRyaXZlciIKK21zZ3N0ciAiQnJhaWxsZXRyZWliZXIgc3RhcnRlbiIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBTQ1JfU1RBUlQgY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjk0MworbXNnaWQgInN0YXJ0IHRoZSBzY3JlZW4gZHJpdmVyIgorbXNnc3RyICJCaWxkc2NoaXJtdHJlaWJlciBzdGFydGVuIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIFNQS19TVEFSVCBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6OTI5Cittc2dpZCAic3RhcnQgdGhlIHNwZWVjaCBkcml2ZXIiCittc2dzdHIgIlNwcmFjaGF1c2dhYmVudHJlaWJlciBzdGFydGVuIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIE1VVEUgY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjUxNAorbXNnaWQgInN0b3Agc3BlYWtpbmciCittc2dzdHIgIlNwcmVjaGVuIHN0b3BwZW4iCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgQlJMX1NUT1AgY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjkwOAorbXNnaWQgInN0b3AgdGhlIGJyYWlsbGUgZHJpdmVyIgorbXNnc3RyICJCcmFpbGxldHJlaWJlciBzdG9wcGVuIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIFNDUl9TVE9QIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDo5MzYKK21zZ2lkICJzdG9wIHRoZSBzY3JlZW4gZHJpdmVyIgorbXNnc3RyICJCaWxkc2NoaXJtdHJlaWJlciBzdG9wcGVuIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIFNQS19TVE9QIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDo5MjIKK21zZ2lkICJzdG9wIHRoZSBzcGVlY2ggZHJpdmVyIgorbXNnc3RyICJTcHJhY2hhdXNnYWJlbnRyZWliZXIgc3RvcHBlbiIKKworIzogUHJvZ3JhbXMveGJybGFwaS5jOjY1NgorbXNnaWQgInN0cmFuZ2Ugb2xkIGVycm9yIGhhbmRsZXJcbiIKK21zZ3N0ciAiYmVmcmVtZGxpY2hlciBhbHRlciBGZWhsZXJiZWhhbmRsZXJcbiIKKworIzogUHJvZ3JhbXMvYnJsdHR5LWNsZHIuYzozOQorbXNnaWQgInN0cmluZyIKK21zZ3N0ciAiWmVpY2hlbmtldHRlIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIENPTlRFWFQgY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjE0OTUKK21zZ2lkICJzd2l0Y2ggdG8gY29tbWFuZCBjb250ZXh0IgorbXNnc3RyICJ3ZWNoc2xlIGluIGRlbiBLb21tYW5kb2tvbnRleHQiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgU1dJVENIVlQgY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjEyNDcKK21zZ2lkICJzd2l0Y2ggdG8gc3BlY2lmaWMgdmlydHVhbCB0ZXJtaW5hbCIKK21zZ3N0ciAiV2VjaHNsZSB6dSBlaW5lbSBzcGV6aWZpc2NoZW4gdmlydHVlbGxlbiBUZXJtaW5hbCIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBHVUlfQVJFQV9ORVhUIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDoxMTMzCisjLCBmdXp6eQorbXNnaWQgInN3aXRjaCB0byB0aGUgbmV4dCBzY3JlZW4gYXJlYSIKK21zZ3N0ciAiV2VjaHNsZSB6dW0gbsOkY2hzdGVuIHZpcnR1ZWxsZW4gVGVybWluYWwiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgU1dJVENIVlRfTkVYVCBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6NTg1Cittc2dpZCAic3dpdGNoIHRvIHRoZSBuZXh0IHZpcnR1YWwgdGVybWluYWwiCittc2dzdHIgIldlY2hzbGUgenVtIG7DpGNoc3RlbiB2aXJ0dWVsbGVuIFRlcm1pbmFsIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIEdVSV9BUkVBX1BSRVYgY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjExMjYKKyMsIGZ1enp5Cittc2dpZCAic3dpdGNoIHRvIHRoZSBwcmV2aW91cyBzY3JlZW4gYXJlYSIKK21zZ3N0ciAiV2VjaHNsZSB6dW0gdm9yaGVyaWdlbiB2aXJ0dWVsbGVuIFRlcm1pbmFsIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIFNXSVRDSFZUX1BSRVYgY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjU3OAorbXNnaWQgInN3aXRjaCB0byB0aGUgcHJldmlvdXMgdmlydHVhbCB0ZXJtaW5hbCIKK21zZ3N0ciAiV2VjaHNsZSB6dW0gdm9yaGVyaWdlbiB2aXJ0dWVsbGVuIFRlcm1pbmFsIgorCisjOiBQcm9ncmFtcy9wZ21wcml2c19saW51eC5jOjE5OTQKK21zZ2lkICJzd2l0Y2hlZCB0byB1bnByaXZpbGVnZWQgdXNlciIKK21zZ3N0ciAiIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIEtFWV9UQUIgY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjE1MTkKK21zZ2lkICJ0YWIga2V5IgorbXNnc3RyICJUYWJ1bGF0b3ItVGFzdGUiCisKKyM6IFByb2dyYW1zL2NvbmZpZy5jOjM3OSBQcm9ncmFtcy9jb25maWcuYzozODYKK21zZ2lkICJ0ZXh0IgorbXNnc3RyICJUZXh0IgorCisjOiBQcm9ncmFtcy9tc2d0ZXN0LmM6NDUKK21zZ2lkICJ0aGUgbG9jYWxlIGRpcmVjdG9yeSBjb250YWluaW5nIHRoZSB0cmFuc2xhdGlvbnMiCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvbXNndGVzdC5jOjUyCittc2dpZCAidGhlIGxvY2FsZSBpbiB3aGljaCB0byBsb29rIHVwIGEgdHJhbnNsYXRpb24iCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvbXNndGVzdC5jOjU5Cittc2dpZCAidGhlIG5hbWUgb2YgdGhlIGRvbWFpbiBjb250YWluaW5nIHRoZSB0cmFuc2xhdGlvbnMiCittc2dzdHIgIiIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBQQVNTRE9UUyBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6MTQ2MworbXNnaWQgInR5cGUgYnJhaWxsZSBkb3RzIgorbXNnc3RyICJCcmFpbGxlemVpY2hlbiBlaW5nZWJlbiIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBQQVNTQ0hBUiBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6MTQ1NAorbXNnaWQgInR5cGUgdW5pY29kZSBjaGFyYWN0ZXIiCittc2dzdHIgIlVuaWNvZGUtWmVpY2hlbiBlaW5nZWJlbiIKKworIzogUHJvZ3JhbXMveGJybGFwaS5jOjk3NAorbXNnaWQgInVuZXhwZWN0ZWQgYmxvY2sgdHlwZSIKK21zZ3N0ciAidW5lcndhcnRldGVyIEJsb2NrdHlwIgorCisjOiBQcm9ncmFtcy94YnJsYXBpLmM6ODY0Cittc2dpZCAidW5leHBlY3RlZCBjbWQiCittc2dzdHIgInVuZXJ3YXJ0ZXRlcyBLb21tYW5kbyIKKworIzogUHJvZ3JhbXMvY21kX3F1ZXVlLmM6MTU3Cittc2dpZCAidW5oYW5kbGVkIGNvbW1hbmQiCittc2dzdHIgIm5pY2h0IGVya2FubnRlcyBLb21tYW5kbyIKKworIzogUHJvZ3JhbXMvY21kLmM6MTk4Cittc2dpZCAidW5rbm93biBjb21tYW5kIgorbXNnc3RyICJ1bmJla2FubnRlcyBLb21tYW5kbyIKKworIzogUHJvZ3JhbXMvb3B0aW9ucy5jOjgyOAorbXNnaWQgInVua25vd24gY29uZmlndXJhdGlvbiBkaXJlY3RpdmUiCittc2dzdHIgInVuYmVrYW5udGUgS29uZmlndXJhdGlvbnNkaXJla3RpdmUiCisKKyM6IFByb2dyYW1zL2NvbmZpZy5jOjc5MQorbXNnaWQgInVua25vd24gbG9nIGxldmVsIG9yIGNhdGVnb3J5IgorbXNnc3RyICJ1bmJla2FubnRlIFByb3Rva29sbGllcnVuZ3NhdXNmw7xocmxpY2hrZWl0IG9kZXIgS2F0ZWdvcmllIgorCisjLiBhbiB1bmtub3duIG9wdGlvbiBoYXMgYmVlbiBzcGVjaWZpZWQKKyM6IFByb2dyYW1zL29wdGlvbnMuYzo1NzUKK21zZ2lkICJ1bmtub3duIG9wdGlvbiIKK21zZ3N0ciAidW5iZWthbm50ZSBPcHRpb24iCisKKyM6IFByb2dyYW1zL2NvbmZpZy5jOjMyNworbXNnaWQgInVua25vd24gc2NyZWVuIGNvbnRlbnQgcXVhbGl0eSIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9wYXJzZS5jOjUwMQorbXNnaWQgInVuc3VwcG9ydGVkIHBhcmFtZXRlciIKK21zZ3N0ciAibmljaHQgdW50ZXJzdMO8dHp0ZXIgUGFyYW1ldGVyIgorCisjOiBQcm9ncmFtcy9zcGsuYzoxODAKK21zZ2lkICJ2b2x1bWUiCittc2dzdHIgIkxhdXRzdMOkcmtlIgorCisjLiBMUkdCCisjOiBQcm9ncmFtcy9jbWRfdXRpbHMuYzoxNTkKK21zZ2lkICJ3aGl0ZSIKK21zZ3N0ciAiV2Vpw58iCisKKyM6IFByb2dyYW1zL3BnbXByaXZzX2xpbnV4LmM6MTg1NgorIywgZnV6enkKK21zZ2lkICJ3b3JraW5nIGRpcmVjdG9yeSBjaGFuZ2VkIgorbXNnc3RyICJBcmJlaXRzdmVyemVpY2huaXMiCisKKyM6IFByb2dyYW1zL21zZ3Rlc3QuYzo2NQorbXNnaWQgIndyaXRlIHRoZSB0cmFuc2xhdGlvbnMgdXNpbmcgVVRGLTgiCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMveGJybGFwaS5jOjkxMQorIywgYy1mb3JtYXQKK21zZ2lkICJ4YnJsYXBpOiBDb3VsZG4ndCBmaW5kIGEga2V5Y29kZSB0byByZW1hcCBmb3Igc2ltdWxhdGluZyB1bmJvdW5kIGtleXN5bSAlMDhYXG4iCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMveGJybGFwaS5jOjg5OAorIywgYy1mb3JtYXQKK21zZ2lkICJ4YnJsYXBpOiBDb3VsZG4ndCBmaW5kIG1vZGlmaWVycyB0byBhcHBseSB0byAlZCBmb3IgZ2V0dGluZyBrZXlzeW0gJTA4WFxuIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL3hicmxhcGkuYzo4NzQKKyMsIGMtZm9ybWF0Cittc2dpZCAieGJybGFwaTogQ291bGRuJ3QgdHJhbnNsYXRlIGtleXN5bSAlMDhYIHRvIGtleWNvZGUuXG4iCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMveGJybGFwaS5jOjQxNQorIywgYy1mb3JtYXQKK21zZ2lkICJ4YnJsYXBpOiBYIEVycm9yICVkLCAlcyBvbiBkaXNwbGF5ICVzXG4iCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMveGJybGFwaS5jOjQ1NworIywgYy1mb3JtYXQKK21zZ2lkICJ4YnJsYXBpOiBiYWQgZm9ybWF0IGZvciBWVCBudW1iZXJcbiIKK21zZ3N0ciAieGJybGFwaTogdW5nw7xsdGlnZXMgRm9ybWF0IGbDvHIgVlQgTnVtbWVyXG4iCisKKyM6IFByb2dyYW1zL3hicmxhcGkuYzo0NjAKKyMsIGMtZm9ybWF0Cittc2dpZCAieGJybGFwaTogYmFkIHR5cGUgZm9yIFZUIG51bWJlclxuIgorbXNnc3RyICJ4YnJsYXBpOiB1bmfDvGx0aWdlciBUeXAgZsO8ciBWVCBOdW1tZXJcbiIKKworIzogUHJvZ3JhbXMveGJybGFwaS5jOjQzOQorIywgYy1mb3JtYXQKK21zZ2lkICJ4YnJsYXBpOiBjYW5ub3QgZ2V0IHJvb3Qgd2luZG93IFhGcmVlODZfVlQgcHJvcGVydHlcbiIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy94YnJsYXBpLmM6MzE2CisjLCBjLWZvcm1hdAorbXNnaWQgInhicmxhcGk6IGNhbm5vdCB3cml0ZSB3aW5kb3cgbmFtZSAlc1xuIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL3hicmxhcGkuYzo3NjQKKyMsIGMtZm9ybWF0Cittc2dpZCAieGJybGFwaTogZGlkbid0IGdyYWIgcGFyZW50IG9mICUjMDEwbHhcbiIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy94YnJsYXBpLmM6NzgyCisjLCBjLWZvcm1hdAorbXNnaWQgInhicmxhcGk6IGRpZG4ndCBncmFiIHdpbmRvdyAlIzAxMGx4XG4iCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMveGJybGFwaS5jOjU4MgorIywgYy1mb3JtYXQKK21zZ2lkICJ4YnJsYXBpOiBkaWRuJ3QgZ3JhYiB3aW5kb3cgJSMwMTBseCBidXQgZ290IGZvY3VzXG4iCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMveGJybGFwaS5jOjQ0OAorIywgYy1mb3JtYXQKK21zZ2lkICJ4YnJsYXBpOiBtb3JlIHRoYW4gb25lIGl0ZW0gZm9yIFZUIG51bWJlclxuIgorbXNnc3RyICJ4YnJsYXBpOiBtZWhyIGFscyBlaW4gRWxlbWVudCBmw7xyIFZUIE51bW1lclxuIgorCisjOiBQcm9ncmFtcy94YnJsYXBpLmM6NDMzCisjLCBjLWZvcm1hdAorbXNnaWQgInhicmxhcGk6IG5vIFhGcmVlODZfVlQgYXRvbVxuIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL3hicmxhcGkuYzo0NDQKKyMsIGMtZm9ybWF0Cittc2dpZCAieGJybGFwaTogbm8gaXRlbXMgZm9yIFZUIG51bWJlclxuIgorbXNnc3RyICJ4YnJsYXBpOiBrZWluZSBFbGVtZW50ZSBmw7xyIFZUIE51bW1lclxuIgorCisjOiBQcm9ncmFtcy94YnJsYXBpLmM6NDE2CisjLCBjLWZvcm1hdAorbXNnaWQgInhicmxhcGk6IHJlc291cmNlICUjMDEwbHgsIHJlcSAldToldVxuIgorbXNnc3RyICIiCisKKyMuICJzaG91bGRuJ3QgaGFwcGVuIiBldmVudHMKKyM6IFByb2dyYW1zL3hicmxhcGkuYzo4MTEKKyMsIGMtZm9ybWF0Cittc2dpZCAieGJybGFwaTogdW5oYW5kbGVkIGV2ZW50IHR5cGU6ICVkXG4iCittc2dzdHIgInhicmxhcGk6IHVuYmVoYW5kZWx0ZXIgRXJlaWduaXN0eXA6ICVkXG4iCisKKyM6IFByb2dyYW1zL3hicmxhcGkuYzo3OTAKKyMsIGMtZm9ybWF0Cittc2dpZCAieGJybGFwaTogd2luZG93ICUjMDEwbHggY2hhbmdlZCB0byBOVUxMIG5hbWVcbiIKK21zZ3N0ciAiIgorCisjLiBMUkcKKyM6IFByb2dyYW1zL2NtZF91dGlscy5jOjE1OAorbXNnaWQgInllbGxvdyIKK21zZ3N0ciAiR2VsYiIKKwpkaWZmIC0tZ2l0IGEvTWVzc2FnZXMvZnIucG8gYi9NZXNzYWdlcy9mci5wbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZDM2OGU5Ci0tLSAvZGV2L251bGwKKysrIGIvTWVzc2FnZXMvZnIucG8KQEAgLTAsMCArMSw0MzAwIEBACisjIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisjICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorIworIyBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisjCisjIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisjCisjIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyMgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorIyBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyMKKyMgV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworIworIyBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyMKK21zZ2lkICIiCittc2dzdHIgIiIKKyJQcm9qZWN0LUlkLVZlcnNpb246IGJybHR0eSA0LjNcbiIKKyJSZXBvcnQtTXNnaWQtQnVncy1UbzogQlJMVFRZQGJybHR0eS5hcHBcbiIKKyJQT1QtQ3JlYXRpb24tRGF0ZTogMjAyMS0wOS0wNyAxNToyOSswMjAwXG4iCisiUE8tUmV2aXNpb24tRGF0ZTogMjAyMS0wOS0wNyAxMzozMCswMDAwXG4iCisiTGFzdC1UcmFuc2xhdG9yOiBTw6liYXN0aWVuIEhpbmRlcmVyIDxTZWJhc3RpZW4uSGluZGVyZXJAZW5zLWx5b24ub3JnPlxuIgorIkxhbmd1YWdlLVRlYW06IEZyaWVuZHMgb2YgQlJMVFRZIDxCUkxUVFlAYnJsdHRZLmFwcD5cbiIKKyJMYW5ndWFnZTogZnJcbiIKKyJNSU1FLVZlcnNpb246IDEuMFxuIgorIkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtOFxuIgorIkNvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXRcbiIKKyJQbHVyYWwtRm9ybXM6IG5wbHVyYWxzPTI7IHBsdXJhbD0obiA+IDEpO1xuIgorCisjOiBQcm9ncmFtcy9icmx0dHkuYzoxNjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiXCIlc1wiIHN0YXJ0ZWQgYXMgXCIlc1wiXG4iCittc2dzdHIgIlwiJXNcIiBkw6ltYXJyw6kgcGFyIFwiJXNcIlxuIgorCisjLiB4Z2V0dGV4dDogVGhpcyBwaHJhc2UgZGVzY3JpYmVzIHRoZSBjb2xvdXIgb2YgYSBjaGFyYWN0ZXIgb24gdGhlIHNjcmVlbi4KKyMuIHhnZXR0ZXh0OiAlMSRzIGlzIHRoZSAoYWxyZWFkeSB0cmFuc2xhdGVkKSBmb3JlZ3JvdW5kIGNvbG91ci4KKyMuIHhnZXR0ZXh0OiAlMiRzIGlzIHRoZSAoYWxyZWFkeSB0cmFuc2xhdGVkKSBiYWNrZ3JvdW5kIGNvbG91ci4KKyM6IFByb2dyYW1zL2NtZF91dGlscy5jOjE2OQorIywgYy1mb3JtYXQKK21zZ2lkICIlMSRzIG9uICUyJHMiCittc2dzdHIgIiUxJHMgc3VyICUyJHMiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIGhvdyB0byBzYXkgd2hlbiB0aGUgdGltZSBpcyBleGFjdGx5IG9uIChpLmUuIHplcm8gbWludXRlcyBhZnRlcikgYW4gaG91ci4KKyMuIHhnZXR0ZXh0OiAoJXUgcmVwcmVzZW50cyB0aGUgbnVtYmVyIG9mIGhvdXJzKQorIzogUHJvZ3JhbXMvY21kX21pc2NlbGxhbmVvdXMuYzo4OQorIywgYy1mb3JtYXQKK21zZ2lkICIldSBvJ2Nsb2NrIgorbXNnaWRfcGx1cmFsICIldSBvJ2Nsb2NrIgorbXNnc3RyWzBdICIldSBoZXVyZSIKK21zZ3N0clsxXSAiJXUgaGV1cmVzIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyBhIG51bWJlciAoJXUpIG9mIHNlY29uZHMgKHRpbWUgdW5pdHMpLgorIzogUHJvZ3JhbXMvY21kX21pc2NlbGxhbmVvdXMuYzoxMDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXUgc2Vjb25kIgorbXNnaWRfcGx1cmFsICIldSBzZWNvbmRzIgorbXNnc3RyWzBdICIldSBzZWNvbmRlIgorbXNnc3RyWzFdICIldSBzZWNvbmRlcyIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjU0MyBQcm9ncmFtcy9tZW51X3ByZWZzLmM6NTQ0CisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6NTQ2IFByb2dyYW1zL21lbnVfcHJlZnMuYzo1NDcKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzo1NTAgUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjU1MQorIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjU1MiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6NTU0CisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6NTU1IFByb2dyYW1zL21lbnVfcHJlZnMuYzo1NjEKK21zZ2lkICIxIGNlbGwiCittc2dzdHIgIjEgY2VsbHVsZSIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjkwMAorbXNnaWQgIjEgc2Vjb25kIgorbXNnc3RyICIxIHNlY29uZGUiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzo5NjIKK21zZ2lkICIxMCBzZWNvbmRzIgorbXNnc3RyICIxMCBzZWNvbmRlcyIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjEyNzcKK21zZ2lkICIxMiBIb3VyIgorbXNnc3RyICIxMiBoZXVyZXMiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzo1NDIgUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjU0NQorIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjU0OCBQcm9ncmFtcy9tZW51X3ByZWZzLmM6NTQ5CisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6NTUzCittc2dpZCAiMiBjZWxscyIKK21zZ3N0ciAiMiBjZWxsdWxlcyIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjkwMQorbXNnaWQgIjIgc2Vjb25kcyIKK21zZ3N0ciAiMiBzZWNvbmRlcyIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjk2MworbXNnaWQgIjIwIHNlY29uZHMiCittc2dzdHIgIjIwIHNlY29uZGVzIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6MTI3NgorbXNnaWQgIjI0IEhvdXIiCittc2dzdHIgIjI0IGhldXJlcyIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjg5OAorbXNnaWQgIjI1MCBtaWxsaXNlY29uZHMiCittc2dzdHIgIjI1MCBtaWxsaXNlY29uZGVzIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6NTU3IFByb2dyYW1zL21lbnVfcHJlZnMuYzo1NTgKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzo1NTkgUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjU2MAorbXNnaWQgIjMgY2VsbHMiCittc2dzdHIgIjMgY2VsbHVsZXMiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzo5NjQKK21zZ2lkICI0MCBzZWNvbmRzIgorbXNnc3RyICI0MCBzZWNvbmRlcyIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjk2MQorbXNnaWQgIjUgc2Vjb25kcyIKK21zZ3N0ciAiNSBzZWNvbmRlcyIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjg5OQorbXNnaWQgIjUwMCBtaWxsaXNlY29uZHMiCittc2dzdHIgIjUwMCBtaWxsaXNlY29uZGVzIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6NzMzCittc2dpZCAiNi1kb3QiCittc2dzdHIgIjYgcG9pbnRzIgorCisjOiBQcm9ncmFtcy9icmx0dHktdHRiLmM6MTc5Cittc2dpZCAiOC1iaXQgY2hhcmFjdGVyIHNldCB0byB1c2UuIgorbXNnc3RyICJVdGlsaXNhdGlvbiBkZSBjYXJhY3TDqHJlcyA4IGJpdHMiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzo3MzIKK21zZ2lkICI4LWRvdCIKK21zZ3N0ciAiOCBwb2ludHMiCisKKyM6IFByb2dyYW1zL3Njcl9tZW51LmM6MTA0Cittc2dpZCAiPG9mZj4iCittc2dzdHIgIjxJbmFjdGlmPiIKKworIzogUHJvZ3JhbXMvY29uZmlnLmM6MTU2NgorbXNnaWQgIkFQSSBQYXJhbWV0ZXIiCittc2dzdHIgIlBhcmFtw6h0cmUgZGUgbCdBUEkiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgUEFTU0FUIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDoxNDcxCittc2dpZCAiQVQgKHNldCAyKSBrZXlib2FyZCBzY2FuIGNvZGUiCittc2dzdHIgIlNjYW5jb2RlIEFUIGR1IGNsYXZpZXIgKHNldCAyKSIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIG5hbWUgb2YgTUlESSBtdXNpY2FsIGluc3RydW1lbnQgIzIyIChpbiB0aGUgT3JnYW4gZ3JvdXApLgorIzogUHJvZ3JhbXMvbWlkaS5jOjE0NQorbXNnaWQgIkFjY29yZGlvbiIKK21zZ3N0ciAiQWNjb3Jkw6lvbiIKKworIy4gQmFzcworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIG5hbWUgb2YgTUlESSBtdXNpY2FsIGluc3RydW1lbnQgIzMzIChpbiB0aGUgQmFzcyBncm91cCkuCisjOiBQcm9ncmFtcy9taWRpLmM6MTgwCittc2dpZCAiQWNvdXN0aWMgQmFzcyIKK21zZ3N0ciAiQmFzc2UgYWNjb3VzdGlxdWUiCisKKyMuIFBpYW5vCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgbmFtZSBvZiBNSURJIG11c2ljYWwgaW5zdHJ1bWVudCAjMSAoaW4gdGhlIFBpYW5vIGdyb3VwKS4KKyM6IFByb2dyYW1zL21pZGkuYzo4MAorbXNnaWQgIkFjb3VzdGljIEdyYW5kIFBpYW5vIgorbXNnc3RyICJQaWFubyDDoCBxdWV1ZSBhY2NvdXN0aXF1ZSIKKworIy4gR3VpdGFyCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgbmFtZSBvZiBNSURJIG11c2ljYWwgaW5zdHJ1bWVudCAjMjUgKGluIHRoZSBHdWl0YXIgZ3JvdXApLgorIzogUHJvZ3JhbXMvbWlkaS5jOjE1NQorbXNnaWQgIkFjb3VzdGljIEd1aXRhciAobnlsb24pIgorbXNnc3RyICJHdWl0YXJlIGFjY291c3RpcXVlIChueWxvbikiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBuYW1lIG9mIE1JREkgbXVzaWNhbCBpbnN0cnVtZW50ICMyNiAoaW4gdGhlIEd1aXRhciBncm91cCkuCisjOiBQcm9ncmFtcy9taWRpLmM6MTU4Cittc2dpZCAiQWNvdXN0aWMgR3VpdGFyIChzdGVlbCkiCittc2dzdHIgIkd1aXRhcmUgYWNjb3VzdGlxdWUgKG3DqXRhbCkiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzoxMzAzCittc2dpZCAiQWZ0ZXIgVGltZSIKK21zZ3N0ciAiQXByw6hzIGwnaGV1cmUiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBuYW1lIG9mIE1JREkgbXVzaWNhbCBpbnN0cnVtZW50ICMxMTQgKGluIHRoZSBQZXJjdXNzaXZlIGdyb3VwKS4KKyM6IFByb2dyYW1zL21pZGkuYzo0MzQKK21zZ2lkICJBZ29nbyIKK21zZ3N0ciAiQWdvZ28iCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzoxNDkxCittc2dpZCAiQWxlcnQiCittc2dzdHIgIkFsZXJ0ZSIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjExMDQKK21zZ2lkICJBbGVydCBEb3RzIgorbXNnc3RyICJQb2ludHMgZCdhdmVydGlzc2VtZW50IgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6MTEwOQorbXNnaWQgIkFsZXJ0IE1lc3NhZ2VzIgorbXNnc3RyICJNZXNzYWdlcyBkJ2F2ZXJ0aXNzZW1lbnQiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzoxMDQ5Cittc2dpZCAiQWxlcnQgVHVuZXMiCittc2dzdHIgIlNvbnMgZCdhdmVydGlzc2VtZW50IgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6ODY0IFByb2dyYW1zL21lbnVfcHJlZnMuYzoxMTk0Cittc2dpZCAiQWxsIgorbXNnc3RyICJUb3V0ZXMiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzo1NTUKK21zZ2lkICJBbHBoYWJldGljIEN1cnNvciBDb29yZGluYXRlcyIKK21zZ3N0ciAiQ29vcmRvbm7DqWVzIEFscGhhYsOpdGlxdWVzIGR1IEN1cnNldXIiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzo1NTQKK21zZ2lkICJBbHBoYWJldGljIFdpbmRvdyBDb29yZGluYXRlcyIKK21zZ3N0ciAiQ29vcmRvbm7DqWVzIEFscGhhYsOpdGlxdWVzIGRlIGxhIEZlbsOqdHJlIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgbmFtZSBvZiBNSURJIG11c2ljYWwgaW5zdHJ1bWVudCAjNjYgKGluIHRoZSBSZWVkIGdyb3VwKS4KKyM6IFByb2dyYW1zL21pZGkuYzoyODMKK21zZ2lkICJBbHRvIFNheG9waG9uZSIKK21zZ3N0ciAiU2F4b3Bob25lIEFsdG8iCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBuYW1lIG9mIE1JREkgbXVzaWNhbCBpbnN0cnVtZW50ICMxMjcgKGluIHRoZSBTb3VuZCBFZmZlY3RzIGdyb3VwKS4KKyM6IFByb2dyYW1zL21pZGkuYzo0NzQKK21zZ2lkICJBcHBsYXVzZSIKK21zZ3N0ciAiQXBwbGF1ZGlzc2VtZW50cyIKKworIzogUHJvZ3JhbXMvbG9nLmM6MTE4Cittc2dpZCAiQXN5bmMgRXZlbnRzIgorbXNnc3RyICLDiXbDqW5lbWVudHMgYXN5bmNocm9uZXMiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzo4MDcKK21zZ2lkICJBdHRyaWJ1dGVzIEJsaW5rIFBlcmlvZCIKK21zZ3N0ciAiUMOpcmlvZGUgZGUgQ2xpZ25vdHRlbWVudCBkZXMgQXR0cmlidXRzIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6ODE1Cittc2dpZCAiQXR0cmlidXRlcyBQZXJjZW50IFZpc2libGUiCittc2dzdHIgIlBvdXJjZW50YWdlIGRlIFZpc2liaWxpdMOpIGRlcyBBdHRyaWJ1dHMiCisKKyM6IFByb2dyYW1zL2NvbmZpZy5jOjEwNTkgUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjE0MDYKK21zZ2lkICJBdHRyaWJ1dGVzIFRhYmxlIgorbXNnc3RyICJUYWJsZSBkJ2F0dHJpYnV0cyIKKworIzogUHJvZ3JhbXMvYWxlcnQuYzoxNjgKK21zZ2lkICJBdXRvcmVsZWFzZSIKK21zZ3N0ciAiUmVsw6JjaGVtZW50IGF1dG9tYXRpcXVlIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6OTY3Cittc2dpZCAiQXV0b3JlbGVhc2UgVGltZSIKK21zZ3N0ciAiRMOpbGFpIGF2YW50IGxlIHJlbMOiY2hlbWVudCBhdXRvbWF0aXF1ZSIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjk4NAorbXNnaWQgIkF1dG9yZXBlYXQgRW5hYmxlZCIKK21zZ3N0ciAiUsOpcMOpdGl0aW9uIEF1dG9tYXRpcXVlIEFjdGl2w6llIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6OTkwCittc2dpZCAiQXV0b3JlcGVhdCBJbnRlcnZhbCIKK21zZ3N0ciAiSW50ZXJ2YWxsZSBkZSBsYSByw6lww6l0aXRpb24gYXV0b21hdGlxdWUiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzo5OTcKK21zZ2lkICJBdXRvcmVwZWF0IFBhbm5pbmciCittc2dzdHIgIlLDqXDDqXRpdGlvbiBhdXRvbWF0aXF1ZSBkdSBkw6lmaWxlbWVudCIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjExMTkKK21zZ2lkICJBdXRvc3BlYWsiCittc2dzdHIgIlBhcm9sZSBhdXRvbWF0aXF1ZSIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjExMTYKK21zZ2lkICJBdXRvc3BlYWsgT3B0aW9ucyIKK21zZ3N0ciAiT3B0aW9ucyBwb3VyIGwnw6lub25jaWF0aW9uIGF1dG9tYXRpcXVlIgorCisjOiBQcm9ncmFtcy9jb25maWcuYzozMzUKK21zZ2lkICJBdXRvc3BlYWsgVGhyZXNob2xkIgorbXNnc3RyICJTZXVpbCBkJ8Opbm9uY2lhdGlvbiBhdXRvbWF0aXF1ZSIKKworIzogUHJvZ3JhbXMvY29uZmlnLmM6MjAxMgorbXNnaWQgIkJSTFRUWSBzdG9wcGVkIgorbXNnc3RyICJBcnLDqnQgZGUgQlJMVFRZIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgbmFtZSBvZiBNSURJIG11c2ljYWwgaW5zdHJ1bWVudCAjMTEwIChpbiB0aGUgRXRobmljIGdyb3VwKS4KKyM6IFByb2dyYW1zL21pZGkuYzo0MjEKK21zZ2lkICJCYWcgUGlwZSIKK21zZ3N0ciAiQ29ybmVtdXNlIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgbmFtZSBvZiBNSURJIG11c2ljYWwgaW5zdHJ1bWVudCAjMTA2IChpbiB0aGUgRXRobmljIGdyb3VwKS4KKyM6IFByb2dyYW1zL21pZGkuYzo0MDkKK21zZ2lkICJCYW5qbyIKK21zZ3N0ciAiQmFuam8iCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBuYW1lIG9mIE1JREkgbXVzaWNhbCBpbnN0cnVtZW50ICM2OCAoaW4gdGhlIFJlZWQgZ3JvdXApLgorIzogUHJvZ3JhbXMvbWlkaS5jOjI4OQorbXNnaWQgIkJhcml0b25lIFNheG9waG9uZSIKK21zZ3N0ciAiU2F4b3Bob25lIEJhcnl0b24iCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBuYW1lIG9mIE1JREkgbXVzaWNhbCBpbnN0cnVtZW50IGdyb3VwICM1LgorIzogUHJvZ3JhbXMvbWlkaS5jOjM3Cittc2dpZCAiQmFzcyIKK21zZ3N0ciAiQmFzc2UiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBuYW1lIG9mIE1JREkgbXVzaWNhbCBpbnN0cnVtZW50ICM3MSAoaW4gdGhlIFJlZWQgZ3JvdXApLgorIzogUHJvZ3JhbXMvbWlkaS5jOjI5OAorbXNnaWQgIkJhc3Nvb24iCittc2dzdHIgIkJhc3NvbiIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjEwNTYKK21zZ2lkICJCZWVwZXIiCittc2dzdHIgIkJlZXBldXIiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzoxMzAyCittc2dpZCAiQmVmb3JlIFRpbWUiCittc2dzdHIgIkF2YW50IGwnaGV1cmUiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBuYW1lIG9mIE1JREkgbXVzaWNhbCBpbnN0cnVtZW50ICMxMjQgKGluIHRoZSBTb3VuZCBFZmZlY3RzIGdyb3VwKS4KKyM6IFByb2dyYW1zL21pZGkuYzo0NjUKK21zZ2lkICJCaXJkIFR3ZWV0IgorbXNnc3RyICJHYXpvdWlsbGVtZW50IGQnb2lzZWF1eCIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjgwMQorbXNnaWQgIkJsaW5raW5nIEF0dHJpYnV0ZXMiCittc2dzdHIgIkNsaWdub3RlbWVudCBkZXMgYXR0cmlidXRzIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6ODIzCittc2dpZCAiQmxpbmtpbmcgQ2FwaXRhbHMiCittc2dzdHIgIkNsaWdub3RlbWVudCBkZXMgbWFqdXNjdWxlcyIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjc3NAorbXNnaWQgIkJsaW5raW5nIFNjcmVlbiBDdXJzb3IiCittc2dzdHIgIkNsaWdub3RlbWVudCBkdSBjdXJzZXVyIGRlIGwnw6ljcmFuIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6MTI0OAorbXNnaWQgIkJsaW5raW5nIFNwZWVjaCBDdXJzb3IiCittc2dzdHIgIkNsaWdub3RlbWVudCBkdSBjdXJzZXVyIGRlIGxhIHN5bnRow6hzZSIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjY2NSBQcm9ncmFtcy9tZW51X3ByZWZzLmM6MTM2MgorbXNnaWQgIkJsb2NrIgorbXNnc3RyICJQYXbDqSIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIG5hbWUgb2YgTUlESSBtdXNpY2FsIGluc3RydW1lbnQgIzc3IChpbiB0aGUgUGlwZSBncm91cCkuCisjOiBQcm9ncmFtcy9taWRpLmM6MzE3Cittc2dpZCAiQmxvd24gQm90dGxlIgorbXNnc3RyICJCb3V0ZWlsbGUgY2Fzc8OpZSIKKworIzogUHJvZ3JhbXMvbG9nLmM6MTQyCittc2dpZCAiQmx1ZXRvb3RoIEkvTyIKK21zZ3N0ciAiRS9TIEJsdWV0b290aCIKKworIzogUHJvZ3JhbXMvY29uZmlnLmM6MTc4NworbXNnaWQgIkJyYWlsbGUgRGV2aWNlIgorbXNnc3RyICJQw6lyaXBow6lyaXF1ZSBicmFpbGxlIgorCisjOiBQcm9ncmFtcy9jb25maWcuYzoxNzgzCittc2dpZCAiQnJhaWxsZSBEcml2ZXIiCittc2dzdHIgIlBpbG90ZSBicmFpbGxlIgorCisjOiBQcm9ncmFtcy9sb2cuYzoxNDgKK21zZ2lkICJCcmFpbGxlIERyaXZlciBFdmVudHMiCittc2dzdHIgIsOJdsOpbmVtZW50cyBsacOpcyBhdSBwaWxvdGUgYnJhaWxsZSIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjc1MgorbXNnaWQgIkJyYWlsbGUgRmlybW5lc3MiCittc2dzdHIgIlJ1Z29zaXTDqSBkdSBicmFpbGxlIgorCisjOiBQcm9ncmFtcy9sb2cuYzo4MgorbXNnaWQgIkJyYWlsbGUgS2V5IEV2ZW50cyIKK21zZ3N0ciAiw4l2w6luZW1lbnRzIGxpw6lzIGF1IGNsYXZpZXIgYnJhaWxsZSIKKworIzogUHJvZ3JhbXMvY29uZmlnLmM6MTc4NgorbXNnaWQgIkJyYWlsbGUgUGFyYW1ldGVyIgorbXNnc3RyICJQYXJhbcOodHJlIGJyYWlsbGUiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzo2OTgKK21zZ2lkICJCcmFpbGxlIFByZXNlbnRhdGlvbiIKK21zZ3N0ciAiQWZmaWNoYWdlIGJyYWlsbGUiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzoxMzg5Cittc2dpZCAiQnJhaWxsZSBUYWJsZXMiCittc2dzdHIgIlRhYmxlcyBicmFpbGxlIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6OTMyCittc2dpZCAiQnJhaWxsZSBUeXBpbmciCittc2dzdHIgIlNhaXNpZSBCcmFpbGxlIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6NzA2Cittc2dpZCAiQnJhaWxsZSBWYXJpYW50IgorbXNnc3RyICJWYXJpYW50ZSBkZSBCcmFpbGxlIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6ODg1Cittc2dpZCAiQnJhaWxsZSBXaW5kb3cgT3ZlcmxhcCIKK21zZ3N0ciAiQ2hldmF1Y2hlbWVudCBkZSBmZW7DqnRyZSBicmFpbGxlIgorCisjOiBQcm9ncmFtcy9jb25maWcuYzo1NTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiQnJhaWxsZSBkcml2ZXIgY29kZSAoJXMsICVzLCBvciBvbmUgb2YgeyVzfSkuIgorbXNnc3RyICJDb2RlIGR1IHBpbG90ZSBicmFpbGxlIDogKCVzLCAlcywgb3UgdW4gcGFybWkgeyVzfSkuIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgbmFtZSBvZiBNSURJIG11c2ljYWwgaW5zdHJ1bWVudCBncm91cCAjOC4KKyM6IFByb2dyYW1zL21pZGkuYzo0NgorbXNnaWQgIkJyYXNzIgorbXNnc3RyICJDdWl2cmVzIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgbmFtZSBvZiBNSURJIG11c2ljYWwgaW5zdHJ1bWVudCAjNjIgKGluIHRoZSBCcmFzcyBncm91cCkuCisjOiBQcm9ncmFtcy9taWRpLmM6MjcwCittc2dpZCAiQnJhc3MgU2VjdGlvbiIKK21zZ3N0ciAiU2VjdGlvbiBjdWl2cmVzIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgbmFtZSBvZiBNSURJIG11c2ljYWwgaW5zdHJ1bWVudCAjMTIyIChpbiB0aGUgU291bmQgRWZmZWN0cyBncm91cCkuCisjOiBQcm9ncmFtcy9taWRpLmM6NDU5Cittc2dpZCAiQnJlYXRoIE5vaXNlIgorbXNnc3RyICJCcnVpdCBkZSBzb3VmZmxlIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgbmFtZSBvZiBNSURJIG11c2ljYWwgaW5zdHJ1bWVudCAjMiAoaW4gdGhlIFBpYW5vIGdyb3VwKS4KKyM6IFByb2dyYW1zL21pZGkuYzo4MworbXNnaWQgIkJyaWdodCBBY291c3RpYyBQaWFubyIKK21zZ3N0ciAiUGlhbm8gYWNjb3VzdGlxdWUgYnJpbGxhbnQiCisKKyM6IFByb2dyYW1zL3hicmxhcGkuYzo5MworbXNnaWQgIkJybEFQSSBhdXRob3JpemF0aW9uL2F1dGhlbnRpY2F0aW9uIHNjaGVtZXMiCittc2dzdHIgIlNjaMOpbWFzIGQnYXV0b3Jpc2F0aW9uL2F1dGhlbnRpZmljYXRpb24gZGUgQnJsQVBJIgorCisjOiBQcm9ncmFtcy94YnJsYXBpLmM6ODYKK21zZ2lkICJCcmxBUEkgaG9zdCBhbmQvb3IgcG9ydCB0byBjb25uZWN0IHRvIgorbXNnc3RyICJIw7R0ZSBkZSBCcmxBUEkgZXQgcG9ydCBhdXF1ZWwgc2UgY29ubmVjdGVyIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6MTQyNAorbXNnaWQgIkJ1aWxkIEluZm9ybWF0aW9uIgorbXNnc3RyICJJbmZvcm1hdGlvbnMgZGUgY29uc3RydWN0aW9uIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6NzI1Cittc2dpZCAiQ2FwaXRhbGl6YXRpb24gTW9kZSIKK21zZ3N0ciAiTW9kZSBkZSBtYWp1c2N1bGVzIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6ODI4Cittc2dpZCAiQ2FwaXRhbHMgQmxpbmsgUGVyaW9kIgorbXNnc3RyICJQw6lyaW9kZSBkZSBDbGlnbm90dGVtZW50IGRlcyBNYWp1c2N1bGVzIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6ODM2Cittc2dpZCAiQ2FwaXRhbHMgUGVyY2VudCBWaXNpYmxlIgorbXNnc3RyICJQb3VyY2VudGFnZSBkZSBWaXNpYmlsaXTDqSBkZXMgTWFqdXNjdWxlcyIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjE1MTQKK21zZ2lkICJDYXRlZ29yeSBMb2cgTGV2ZWwiCittc2dzdHIgIk5pdmVhdSBkZSBqb3VybmFsaXNhdGlvbiBwYXIgY2F0w6lnb3JpZSIKKworIy4gQ2hyb21hdGljIFBlcmN1c3Npb24KKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBuYW1lIG9mIE1JREkgbXVzaWNhbCBpbnN0cnVtZW50ICM5IChpbiB0aGUgQ2hyb21hdGljIFBlcmN1c3Npb24gZ3JvdXApLgorIzogUHJvZ3JhbXMvbWlkaS5jOjEwNQorbXNnaWQgIkNlbGVzdGEiCittc2dzdHIgIkNlbGVzdGEiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBuYW1lIG9mIE1JREkgbXVzaWNhbCBpbnN0cnVtZW50ICM0MyAoaW4gdGhlIFN0cmluZ3MgZ3JvdXApLgorIzogUHJvZ3JhbXMvbWlkaS5jOjIxMQorbXNnaWQgIkNlbGxvIgorbXNnc3RyICJ2aW9sb25jZWxsZSIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIG5hbWUgb2YgTUlESSBtdXNpY2FsIGluc3RydW1lbnQgIzUzIChpbiB0aGUgRW5zZW1ibGUgZ3JvdXApLgorIzogUHJvZ3JhbXMvbWlkaS5jOjI0MgorbXNnaWQgIkNob2lyIEFhaHMiCittc2dzdHIgIkhhaGEgZGUgY2hvZXVyIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgbmFtZSBvZiBNSURJIG11c2ljYWwgaW5zdHJ1bWVudCBncm91cCAjMi4KKyM6IFByb2dyYW1zL21pZGkuYzoyOAorbXNnaWQgIkNocm9tYXRpYyBQZXJjdXNzaW9uIgorbXNnc3RyICJQZXJjdXNzaW9ucyBjaHJvbWF0aXF1ZXMiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBuYW1lIG9mIE1JREkgbXVzaWNhbCBpbnN0cnVtZW50ICMyMCAoaW4gdGhlIE9yZ2FuIGdyb3VwKS4KKyM6IFByb2dyYW1zL21pZGkuYzoxMzkKK21zZ2lkICJDaHVyY2ggT3JnYW4iCittc2dzdHIgIk9yZ3VlIGQnw6lnbGlzZSIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIG5hbWUgb2YgTUlESSBtdXNpY2FsIGluc3RydW1lbnQgIzcyIChpbiB0aGUgUmVlZCBncm91cCkuCisjOiBQcm9ncmFtcy9taWRpLmM6MzAxCittc2dpZCAiQ2xhcmluZXQiCittc2dzdHIgIkNsYXJpbmV0dGUiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBuYW1lIG9mIE1JREkgbXVzaWNhbCBpbnN0cnVtZW50ICM4IChpbiB0aGUgUGlhbm8gZ3JvdXApLgorIzogUHJvZ3JhbXMvbWlkaS5jOjEwMQorbXNnaWQgIkNsYXZpbmV0IgorbXNnc3RyICJDbGF2aW5ldCIKKworIzogUHJvZ3JhbXMvbWVudS5jOjg5NAorbXNnaWQgIkNsb3NlIgorbXNnc3RyICJGZXJtZXIiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzoxMjg2Cittc2dpZCAiQ29sb24iCittc2dzdHIgIkRldXgtcG9pbnRzIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6NzAyCittc2dpZCAiQ29tcHV0ZXIgQnJhaWxsZSIKK21zZ3N0ciAiQnJhaWxsZSBJbmZvcm1hdGlxdWUiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzo3MzYKK21zZ2lkICJDb21wdXRlciBCcmFpbGxlIENlbGwgVHlwZSIKK21zZ3N0ciAiQ2VsbHVsZSBkZSB0eXBlIEJyYWlsbGUgSW5mb3JtYXRpcXVlIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6MTQ0OAorbXNnaWQgIkNvbmZpZ3VyYXRpb24gRGlyZWN0b3J5IgorbXNnc3RyICJSw6lwZXJ0b2lyZSBkZSBjb25maWd1cmF0aW9uIgorCisjOiBQcm9ncmFtcy9jb25maWcuYzoyOTU1IFByb2dyYW1zL21lbnVfcHJlZnMuYzoxNDUzCittc2dpZCAiQ29uZmlndXJhdGlvbiBGaWxlIgorbXNnc3RyICJGaWNoaWVyIGRlIGNvbmZpZ3VyYXRpb24iCisKKyM6IFByb2dyYW1zL2FsZXJ0LmM6MTYzCittc2dpZCAiQ29uc29sZSBCZWxsIgorbXNnc3RyICJCZWVwIGRlIGxhIGNvbnNvbGUiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzoxMDM1Cittc2dpZCAiQ29uc29sZSBCZWxsIEFsZXJ0IgorbXNnc3RyICJCZWVwIGQnYWxlcnRlIGRlIGxhIGNvbnNvbGUiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBuYW1lIG9mIE1JREkgbXVzaWNhbCBpbnN0cnVtZW50ICM0NCAoaW4gdGhlIFN0cmluZ3MgZ3JvdXApLgorIzogUHJvZ3JhbXMvbWlkaS5jOjIxNAorbXNnaWQgIkNvbnRyYWJhc3MiCittc2dzdHIgIkNvbnRyZWJhc3NlIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6NzAzCittc2dpZCAiQ29udHJhY3RlZCBCcmFpbGxlIgorbXNnc3RyICJCcmFpbGxlIGFicsOpZ8OpIgorCisjOiBQcm9ncmFtcy9jb25maWcuYzoxMDI3IFByb2dyYW1zL21lbnVfcHJlZnMuYzoxMzk5Cittc2dpZCAiQ29udHJhY3Rpb24gVGFibGUiCittc2dzdHIgIlRhYmxlIGRlIGJyYWlsbGUgYWJyw6lnw6kiCisKKyM6IFByb2dyYW1zL2JybHR0eS1jdGIuYzo2MgorbXNnaWQgIkNvbnRyYWN0aW9uIHRhYmxlLiIKK21zZ3N0ciAiVGFibGUgZGUgYnJhaWxsZSBhYnLDqWfDqS4iCisKKyM6IFByb2dyYW1zL2JybHR0eS1jdGIuYzo3NgorbXNnaWQgIkNvbnRyYWN0aW9uIHZlcmlmaWNhdGlvbiB0YWJsZS4iCittc2dzdHIgIlRhYmxlIGRlIHbDqXJpZmljYXRpb24gZHUgYnJhaWxsZSBhYnLDqWfDqS4iCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzoxNDkyCittc2dpZCAiQ3JpdGljYWwiCittc2dzdHIgIkNyaXRpcXVlIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6NTQ2Cittc2dpZCAiQ3Vyc29yIENvbHVtbiIKK21zZ3N0ciAiQ29sb25uZSBkdSBDdXJzZXVyIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6NTQ1IFByb2dyYW1zL21lbnVfcHJlZnMuYzo1NTcKK21zZ2lkICJDdXJzb3IgQ29vcmRpbmF0ZXMiCittc2dzdHIgIkNvb3Jkb25uw6llcyBkdSBDdXJzZXVyIgorCisjOiBQcm9ncmFtcy9sb2cuYzoxMDAKK21zZ2lkICJDdXJzb3IgUm91dGluZyIKK21zZ3N0ciAiRMOpcGxhY2VtZW50IGR1IGN1cnNldXIiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzo1NDcKK21zZ2lkICJDdXJzb3IgUm93IgorbXNnc3RyICJMaWduZSBkdSBDdXJzZXVyIgorCisjOiBQcm9ncmFtcy9sb2cuYzo5NAorbXNnaWQgIkN1cnNvciBUcmFja2luZyIKK21zZ3N0ciAiUG91cnN1aXRlIGR1IGN1cnNldXIiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzo5MDQKK21zZ2lkICJDdXJzb3IgVHJhY2tpbmcgRGVsYXkiCittc2dzdHIgIkR1csOpZSBkZSBsYSBwb3Vyc3VpdGUgZHUgY3Vyc2V1ciIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjU0OCBQcm9ncmFtcy9tZW51X3ByZWZzLmM6NTU5Cittc2dpZCAiQ3Vyc29yIGFuZCBXaW5kb3cgQ29sdW1uIgorbXNnc3RyICJDb2xvbm5lIGR1IEN1cnNldXIgZXQgZGUgbGEgRmVuw6p0cmUiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzo1NDkgUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjU2MAorbXNnaWQgIkN1cnNvciBhbmQgV2luZG93IFJvdyIKK21zZ3N0ciAiTGlnbmUgZHUgQ3Vyc2V1ciBldCBkZSBsYSBGZW7DqnRyZSIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjEzMjQKK21zZ2lkICJEYXNoIgorbXNnc3RyICJUaXJldCIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjEzMTcKK21zZ2lkICJEYXRlIEZvcm1hdCIKK21zZ3N0ciAiRm9ybWF0IGRlIGxhIGRhdGUiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzoxMzA2Cittc2dpZCAiRGF0ZSBQb3NpdGlvbiIKK21zZ3N0ciAiUG9zaXRpb24gZGUgbGEgZGF0ZSIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjEzMjkKK21zZ2lkICJEYXRlIFNlcGFyYXRvciIKK21zZ3N0ciAiU8OpcGFyYXRldXIgZGUgbGEgZGF0ZSIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjEzMTQKK21zZ2lkICJEYXkgTW9udGggWWVhciIKK21zZ3N0ciAiSm91ciBNb2lzIEFubsOpZSIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjE0OTcKK21zZ2lkICJEZWJ1ZyIKK21zZ3N0ciAiRMOpYm9nYWdlIgorCisjOiBQcm9ncmFtcy9jb25maWcuYzo1NzMKK21zZ2lkICJEZXZpY2UgZm9yIGFjY2Vzc2luZyBicmFpbGxlIGRpc3BsYXkuIgorbXNnc3RyICJQw6lyaXBow6lyaXF1ZSBkJ2FjY8OocyDDoCBsJ2FmZmljaGV1ciBicmFpbGxlLiIKKworIzogUHJvZ3JhbXMvY29uZmlnLmM6NTMyCittc2dpZCAiRGlzYWJsZSB0aGUgYXBwbGljYXRpb24gcHJvZ3JhbW1pbmcgaW50ZXJmYWNlLiIKK21zZ3N0ciAiRMOpc2FjdGl2ZXIgbCdpbnRlcmZhY2UgZGUgcHJvZ3JhbW1hdGlvbiBkZSBsJ2FwcGxpY2F0aW9uIChBUEkpLiIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIG5hbWUgb2YgTUlESSBtdXNpY2FsIGluc3RydW1lbnQgIzMxIChpbiB0aGUgR3VpdGFyIGdyb3VwKS4KKyM6IFByb2dyYW1zL21pZGkuYzoxNzMKK21zZ2lkICJEaXN0b3J0aW9uIEd1aXRhciIKK21zZ3N0ciAiR3VpdGFyZSBhdmVjIGRpc3RvcnRpb24iCisKKyM6IFByb2dyYW1zL2NvbmZpZy5jOjY3NQorbXNnaWQgIkRvIG5vdCBhdXRvc3BlYWsgd2hlbiBicmFpbGxlIGlzIG5vdCBiZWluZyB1c2VkLiIKK21zZ3N0ciAiUGFzIGRlIHBhcm9sZSBhdXRvbWF0aXF1ZSBxdWFuZCBsZSBicmFpbGxlIG5lIHNlcmEgcGFzIHV0aWxpc8OpIgorCisjOiBQcm9ncmFtcy94YnJsYXBpLmM6MTEyCittc2dpZCAiRG8gbm90IHdyaXRlIGFueSB0ZXh0IHRvIHRoZSBicmFpbGxlIGRldmljZSIKK21zZ3N0ciAiTmUgcGFzIMOpY3JpcmUgZGUgdGV4dGUgc3VyIGxlIHDDqXJpcGjDqXJpcXVlIGJyYWlsbGUiCisKKyM6IFByb2dyYW1zL2JybHR0eS10cnR4dC5jOjc5Cittc2dpZCAiRG9uJ3QgZmFsbCBiYWNrIHRvIHRoZSBVbmljb2RlIGJhc2UgY2hhcmFjdGVyLiIKK21zZ3N0ciAiTmUgc2UgcmFiYXQgcGFzIHN1ciBkZXMgY2FyYWN0w6hyZXMgZW4gdW5pY29kZSIKKworIzogUHJvZ3JhbXMvY29uZmlnLmM6NDQzCittc2dpZCAiRG9uJ3Qgc3dpdGNoIHRvIGFuIHVucHJpdmlsZWdlZCB1c2VyIG9yIHJlbGlucXVpc2ggYW55IHByaXZpbGVnZXMgKGdyb3VwIG1lbWJlcnNoaXBzLCBjYXBhYmlsaXRpZXMsIGV0YykuIgorbXNnc3RyICJOZSBwYXMgcGFzc2VyIMOgIHVuIHV0aWxpc2F0ZXVyIG5vbiBwcml2aWzDqWdpw6kgb3UgcmVub25jZXIgw6AgdG91cyBsZXMgcHJpdmlsw6hnZXMgKGFwcGFydGVuYW5jZSDDoCBkZXMgZ3JvdXBlcywgY2FwYWNpdMOpcywgZXRjLikuIgorCisjOiBQcm9ncmFtcy9hbGVydC5jOjUyCittc2dpZCAiRG9uZSIKK21zZ3N0ciAiRmFpdCIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjEyODcgUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjEzMjYKK21zZ2lkICJEb3QiCittc2dzdHIgIlBvaW50IgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6OTQyCittc2dpZCAiRG90cyB2aWEgVW5pY29kZSBCcmFpbGxlIgorbXNnc3RyICJQb2ludHMgZW4gYnJhaWxsZSB1bmljb2RlIgorCisjLiBPcmdhbgorIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIG5hbWUgb2YgTUlESSBtdXNpY2FsIGluc3RydW1lbnQgIzE3IChpbiB0aGUgT3JnYW4gZ3JvdXApLgorIzogUHJvZ3JhbXMvbWlkaS5jOjEzMAorbXNnaWQgIkRyYXdiYXIgT3JnYW4iCittc2dzdHIgIk9yZ3VlIGRyYXdiYXIiCisKKyM6IFByb2dyYW1zL2NvbmZpZy5jOjI5NzYgUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjE0NzMKK21zZ2lkICJEcml2ZXJzIERpcmVjdG9yeSIKK21zZ3N0ciAiUsOpcGVydG9pcmUgZGVzIHBpbG90ZXMiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBuYW1lIG9mIE1JREkgbXVzaWNhbCBpbnN0cnVtZW50ICMxNiAoaW4gdGhlIENocm9tYXRpYyBQZXJjdXNzaW9uIGdyb3VwKS4KKyM6IFByb2dyYW1zL21pZGkuYzoxMjYKK21zZ2lkICJEdWxjaW1lciIKK21zZ3N0ciAiRHVsY2ltZXIiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzo4NzkKK21zZ2lkICJFYWdlciBTbGlkaW5nIEJyYWlsbGUgV2luZG93IgorbXNnc3RyICJEw6lmaWxlbWVudCBkeW5hbWlxdWUgZGUgbGEgZmVuw6p0cmUgYnJhaWxsZSIKKworIzogUHJvZ3JhbXMvYnJsdHR5LXR0Yi5jOjE1OAorbXNnaWQgIkVkaXQgdGFibGUuIgorbXNnc3RyICLDiWRpdGVyIGxhIHRhYmxlIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgbmFtZSBvZiBNSURJIG11c2ljYWwgaW5zdHJ1bWVudCAjMzQgKGluIHRoZSBCYXNzIGdyb3VwKS4KKyM6IFByb2dyYW1zL21pZGkuYzoxODMKK21zZ2lkICJFbGVjdHJpYyBCYXNzIChmaW5nZXIpIgorbXNnc3RyICJCYXNzZSDDqWxlY3RyaXF1ZSAoZG9pZ3QpIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgbmFtZSBvZiBNSURJIG11c2ljYWwgaW5zdHJ1bWVudCAjMzUgKGluIHRoZSBCYXNzIGdyb3VwKS4KKyM6IFByb2dyYW1zL21pZGkuYzoxODYKK21zZ2lkICJFbGVjdHJpYyBCYXNzIChwaWNrKSIKK21zZ3N0ciAiQmFzc2Ugw6lsZWN0cmlxdWUgKHBsZWN0cmUpIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgbmFtZSBvZiBNSURJIG11c2ljYWwgaW5zdHJ1bWVudCAjMyAoaW4gdGhlIFBpYW5vIGdyb3VwKS4KKyM6IFByb2dyYW1zL21pZGkuYzo4NgorbXNnaWQgIkVsZWN0cmljIEdyYW5kIFBpYW5vIgorbXNnc3RyICJQaWFubyDDoCBxdWV1ZSDDqWxlY3RyaXF1ZSIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIG5hbWUgb2YgTUlESSBtdXNpY2FsIGluc3RydW1lbnQgIzI4IChpbiB0aGUgR3VpdGFyIGdyb3VwKS4KKyM6IFByb2dyYW1zL21pZGkuYzoxNjQKK21zZ2lkICJFbGVjdHJpYyBHdWl0YXIgKGNsZWFuKSIKK21zZ3N0ciAiR3VpdGFyZSDDqWxlY3RyaXF1ZSAocHJvcHJlKSIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIG5hbWUgb2YgTUlESSBtdXNpY2FsIGluc3RydW1lbnQgIzI3IChpbiB0aGUgR3VpdGFyIGdyb3VwKS4KKyM6IFByb2dyYW1zL21pZGkuYzoxNjEKK21zZ2lkICJFbGVjdHJpYyBHdWl0YXIgKGphenopIgorbXNnc3RyICJHdWl0YXJlIMOpbGVjdHJpcXVlIChqYXp6KSIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIG5hbWUgb2YgTUlESSBtdXNpY2FsIGluc3RydW1lbnQgIzI5IChpbiB0aGUgR3VpdGFyIGdyb3VwKS4KKyM6IFByb2dyYW1zL21pZGkuYzoxNjcKK21zZ2lkICJFbGVjdHJpYyBHdWl0YXIgKG11dGVkKSIKK21zZ3N0ciAiR3VpdGFyZSDDqWxlY3RyaXF1ZSAow6l0b3VmZsOpZSkiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBuYW1lIG9mIE1JREkgbXVzaWNhbCBpbnN0cnVtZW50ICM1IChpbiB0aGUgUGlhbm8gZ3JvdXApLgorIzogUHJvZ3JhbXMvbWlkaS5jOjkyCittc2dpZCAiRWxlY3RyaWMgUGlhbm8gMSIKK21zZ3N0ciAiUGlhbm8gw6lsZWN0cmlxdWUgMSIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIG5hbWUgb2YgTUlESSBtdXNpY2FsIGluc3RydW1lbnQgIzYgKGluIHRoZSBQaWFubyBncm91cCkuCisjOiBQcm9ncmFtcy9taWRpLmM6OTUKK21zZ2lkICJFbGVjdHJpYyBQaWFubyAyIgorbXNnc3RyICJQaWFubyDDqWxlY3RyaXF1ZSAyIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6MTQ5MAorbXNnaWQgIkVtZXJnZW5jeSIKK21zZ3N0ciAiVXJnZW5jZSIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjU0MQorbXNnaWQgIkVuZCIKK21zZ3N0ciAiRmluIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6ODY1Cittc2dpZCAiRW5kIG9mIExpbmUiCittc2dzdHIgIkZpbiBkZSBsYSBsaWduZSIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIG5hbWUgb2YgTUlESSBtdXNpY2FsIGluc3RydW1lbnQgIzcwIChpbiB0aGUgUmVlZCBncm91cCkuCisjOiBQcm9ncmFtcy9taWRpLmM6Mjk1Cittc2dpZCAiRW5nbGlzaCBIb3JuIgorbXNnc3RyICJDb3JuZSBhbmdsYWlzZSIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjEyMjkKK21zZ2lkICJFbnF1ZXVlIgorbXNnc3RyICJEYW5zIGxhIGZpbGUiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBuYW1lIG9mIE1JREkgbXVzaWNhbCBpbnN0cnVtZW50IGdyb3VwICM3LgorIzogUHJvZ3JhbXMvbWlkaS5jOjQzCittc2dpZCAiRW5zZW1ibGUiCittc2dzdHIgIkVuc2VtYmxlIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6MTQ5MworbXNnaWQgIkVycm9yIgorbXNnc3RyICJFcnJldXIiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBuYW1lIG9mIE1JREkgbXVzaWNhbCBpbnN0cnVtZW50IGdyb3VwICMxNC4KKyM6IFByb2dyYW1zL21pZGkuYzo2OAorbXNnaWQgIkV0aG5pYyBJbnN0cnVtZW50cyIKK21zZ3N0ciAiSW5zdHJ1bWVudHMgZm9sa2xvcmlxdWVzIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6MTAzMgorbXNnaWQgIkV2ZW50IEFsZXJ0cyIKK21zZ3N0ciAiU2lnbmF1eCBkJ8OpdsOpbmVtZW50cyIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjcxMworbXNnaWQgIkV4cGFuZCBDdXJyZW50IFdvcmQiCittc2dzdHIgIkV4dGVuc2lvbiBkdSBtb3QgYWN0dWVsIgorCisjOiBQcm9ncmFtcy9jb25maWcuYzo0ODcKK21zZ2lkICJFeHBsaWNpdCBwcmVmZXJlbmNlIHNldHRpbmdzLiIKK21zZ3N0ciAiUGFyYW3DqHRyZXMgZXhwbGljaXRlcyBkJ3VuZSBwcsOpZsOpcmVuY2UuIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6MTA1OQorbXNnaWQgIkZNIgorbXNnc3RyICJGTSIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjEwOTcKK21zZ2lkICJGTSBWb2x1bWUiCittc2dzdHIgIlZvbHVtZSBGTSIKKworIy4gU3ludGggRk0KKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBuYW1lIG9mIE1JREkgbXVzaWNhbCBpbnN0cnVtZW50ICM5NyAoaW4gdGhlIFN5bnRoIEZNIGdyb3VwKS4KKyM6IFByb2dyYW1zL21pZGkuYzozODAKK21zZ2lkICJGWCAxIChyYWluKSIKK21zZ3N0ciAiRlggMSAocGx1aWUpIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgbmFtZSBvZiBNSURJIG11c2ljYWwgaW5zdHJ1bWVudCAjOTggKGluIHRoZSBTeW50aCBGTSBncm91cCkuCisjOiBQcm9ncmFtcy9taWRpLmM6MzgzCittc2dpZCAiRlggMiAoc291bmR0cmFjaykiCittc2dzdHIgIkZYIDIgKHBpc3RlIHNvbikiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBuYW1lIG9mIE1JREkgbXVzaWNhbCBpbnN0cnVtZW50ICM5OSAoaW4gdGhlIFN5bnRoIEZNIGdyb3VwKS4KKyM6IFByb2dyYW1zL21pZGkuYzozODYKK21zZ2lkICJGWCAzIChjcnlzdGFsKSIKK21zZ3N0ciAiRlggMyAoY3Jpc3RhbCkiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBuYW1lIG9mIE1JREkgbXVzaWNhbCBpbnN0cnVtZW50ICMxMDAgKGluIHRoZSBTeW50aCBGTSBncm91cCkuCisjOiBQcm9ncmFtcy9taWRpLmM6Mzg5Cittc2dpZCAiRlggNCAoYXRtb3NwaGVyZSkiCittc2dzdHIgIkZYIDQgKGF0bW9zcGjDqHJlKSIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIG5hbWUgb2YgTUlESSBtdXNpY2FsIGluc3RydW1lbnQgIzEwMSAoaW4gdGhlIFN5bnRoIEZNIGdyb3VwKS4KKyM6IFByb2dyYW1zL21pZGkuYzozOTIKK21zZ2lkICJGWCA1IChicmlnaHRuZXNzKSIKK21zZ3N0ciAiRlggNSAow6ljbGF0KSIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIG5hbWUgb2YgTUlESSBtdXNpY2FsIGluc3RydW1lbnQgIzEwMiAoaW4gdGhlIFN5bnRoIEZNIGdyb3VwKS4KKyM6IFByb2dyYW1zL21pZGkuYzozOTUKK21zZ2lkICJGWCA2IChnb2JsaW5zKSIKK21zZ3N0ciAiRlggNiAobHV0aW4pIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgbmFtZSBvZiBNSURJIG11c2ljYWwgaW5zdHJ1bWVudCAjMTAzIChpbiB0aGUgU3ludGggRk0gZ3JvdXApLgorIzogUHJvZ3JhbXMvbWlkaS5jOjM5OAorbXNnaWQgIkZYIDcgKGVjaG9lcykiCittc2dzdHIgIkZYIDcgKMOpY2hvcykiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBuYW1lIG9mIE1JREkgbXVzaWNhbCBpbnN0cnVtZW50ICMxMDQgKGluIHRoZSBTeW50aCBGTSBncm91cCkuCisjLiB4Z2V0dGV4dDogKHNjaS1maSBpcyBhIGNvbW1vbiBzaG9ydCBmb3JtIGZvciBzY2llbmNlIGZpY3Rpb24pCisjOiBQcm9ncmFtcy9taWRpLmM6NDAyCittc2dpZCAiRlggOCAoc2NpLWZpKSIKK21zZ3N0ciAiRlggOCAoU0YpIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgbmFtZSBvZiBNSURJIG11c2ljYWwgaW5zdHJ1bWVudCAjMTExIChpbiB0aGUgRXRobmljIGdyb3VwKS4KKyM6IFByb2dyYW1zL21pZGkuYzo0MjQKK21zZ2lkICJGaWRkbGUiCittc2dzdHIgInZpb2xvbiIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIG5hbWUgb2YgTUlESSBtdXNpY2FsIGluc3RydW1lbnQgIzc0IChpbiB0aGUgUGlwZSBncm91cCkuCisjOiBQcm9ncmFtcy9taWRpLmM6MzA4Cittc2dpZCAiRmx1dGUiCittc2dzdHIgImZsw7t0ZSIKKworIzogUHJvZ3JhbXMvYnJsdHR5LWN0Yi5jOjk2Cittc2dpZCAiRm9yY2UgaW1tZWRpYXRlIG91dHB1dC4iCittc2dzdHIgIkZvcmNlciB1bmUgc29ydGllIGltbcOpZGlhdGUuIgorCisjOiBQcm9ncmFtcy9icmx0dHktY2xkci5jOjQyCittc2dpZCAiRm9ybWF0IG9mIGVhY2ggb3V0cHV0IGxpbmUuIgorbXNnc3RyICJGb3JtYXQgZGUgY2hhY3VuZSBkZXMgbGlnbmVzIGRlIHNvcnRpZS4iCisKKyM6IFByb2dyYW1zL2JybHR0eS10dGIuYzoxNjUKK21zZ2lkICJGb3JtYXQgb2YgaW5wdXQgZmlsZS4iCittc2dzdHIgIkZvcm1hdCBkdSBmaWNoaWVyIGQnZW50csOpZS4iCisKKyM6IFByb2dyYW1zL2JybHR0eS10dGIuYzoxNzIKK21zZ2lkICJGb3JtYXQgb2Ygb3V0cHV0IGZpbGUuIgorbXNnc3RyICJGb3JtYXQgZHUgZmljaGllciBkZSBzb3J0aWUuIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgbmFtZSBvZiBNSURJIG11c2ljYWwgaW5zdHJ1bWVudCAjNjEgKGluIHRoZSBCcmFzcyBncm91cCkuCisjOiBQcm9ncmFtcy9taWRpLmM6MjY3Cittc2dpZCAiRnJlbmNoIEhvcm4iCittc2dzdHIgIkNvcm5lIGZyYW7Dp2Fpc2UiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBuYW1lIG9mIE1JREkgbXVzaWNhbCBpbnN0cnVtZW50ICMzNiAoaW4gdGhlIEJhc3MgZ3JvdXApLgorIzogUHJvZ3JhbXMvbWlkaS5jOjE4OQorbXNnaWQgIkZyZXRsZXNzIEJhc3MiCittc2dzdHIgIkJhc3NlIGdsaXNzw6llIgorCisjOiBQcm9ncmFtcy9hbGVydC5jOjk3Cittc2dpZCAiRnJvemVuIgorbXNnc3RyICJHZWzDqSIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjU1NgorbXNnaWQgIkdlbmVyaWMiCittc2dzdHIgIkfDqW7DqXJpcXVlIgorCisjOiBQcm9ncmFtcy9sb2cuYzo2NAorbXNnaWQgIkdlbmVyaWMgSW5wdXQiCittc2dzdHIgIkVudHLDqWUgZ8OpbsOpcmlxdWUiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBuYW1lIG9mIE1JREkgbXVzaWNhbCBpbnN0cnVtZW50ICMxMCAoaW4gdGhlIENocm9tYXRpYyBQZXJjdXNzaW9uIGdyb3VwKS4KKyM6IFByb2dyYW1zL21pZGkuYzoxMDgKK21zZ2lkICJHbG9ja2Vuc3BpZWwiCittc2dzdHIgIkdsb2NrZW5zcGllbCIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIG5hbWUgb2YgTUlESSBtdXNpY2FsIGluc3RydW1lbnQgZ3JvdXAgIzQuCisjOiBQcm9ncmFtcy9taWRpLmM6MzQKK21zZ2lkICJHdWl0YXIiCittc2dzdHIgIkd1aXRhcmUiCisKKyMuIFNvdW5kIEVmZmVjdHMKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBuYW1lIG9mIE1JREkgbXVzaWNhbCBpbnN0cnVtZW50ICMxMjEgKGluIHRoZSBTb3VuZCBFZmZlY3RzIGdyb3VwKS4KKyM6IFByb2dyYW1zL21pZGkuYzo0NTYKK21zZ2lkICJHdWl0YXIgRnJldCBOb2lzZSIKK21zZ3N0ciAiQnJ1aXQgZGUgZ2xpc3NlbWVudCBzdXIgdW5lIGd1aXRhcmUiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBuYW1lIG9mIE1JREkgbXVzaWNhbCBpbnN0cnVtZW50ICMzMiAoaW4gdGhlIEd1aXRhciBncm91cCkuCisjOiBQcm9ncmFtcy9taWRpLmM6MTc2Cittc2dpZCAiR3VpdGFyIEhhcm1vbmljcyIKK21zZ3N0ciAiSGFybW9uaXF1ZXMgZGUgZ3VpdGFyZSIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIG5hbWUgb2YgTUlESSBtdXNpY2FsIGluc3RydW1lbnQgIzEyOCAoaW4gdGhlIFNvdW5kIEVmZmVjdHMgZ3JvdXApLgorIzogUHJvZ3JhbXMvbWlkaS5jOjQ3NworbXNnaWQgIkd1bnNob3QiCittc2dzdHIgIkNvdXAgZGUgZmV1IgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgbmFtZSBvZiBNSURJIG11c2ljYWwgaW5zdHJ1bWVudCAjMjMgKGluIHRoZSBPcmdhbiBncm91cCkuCisjOiBQcm9ncmFtcy9taWRpLmM6MTQ4Cittc2dpZCAiSGFybW9uaWNhIgorbXNnc3RyICJIYXJtb25pY2EiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBuYW1lIG9mIE1JREkgbXVzaWNhbCBpbnN0cnVtZW50ICM3IChpbiB0aGUgUGlhbm8gZ3JvdXApLgorIzogUHJvZ3JhbXMvbWlkaS5jOjk4Cittc2dpZCAiSGFycHNpY2hvcmQiCittc2dzdHIgIkNsYXZlY2luIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgbmFtZSBvZiBNSURJIG11c2ljYWwgaW5zdHJ1bWVudCAjMTI2IChpbiB0aGUgU291bmQgRWZmZWN0cyBncm91cCkuCisjOiBQcm9ncmFtcy9taWRpLmM6NDcxCittc2dpZCAiSGVsaWNvcHRlciIKK21zZ3N0ciAiSMOpbGljb3B0w6hyZSIKKworIzogUHJvZ3JhbXMvc2NyX2hlbHAuYzoyMTUKK21zZ2lkICJIZWxwIFNjcmVlbiIKK21zZ3N0ciAiw4ljcmFuIGQnYWlkZSIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjc0OCBQcm9ncmFtcy9tZW51X3ByZWZzLmM6MTAxMworbXNnaWQgIkhpZ2giCittc2dzdHIgIkZvcnRlIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6OTIxCittc2dpZCAiSGlnaGxpZ2h0IEJyYWlsbGUgV2luZG93IExvY2F0aW9uIgorbXNnc3RyICJTdXJsaWduZW1lbnQgZGUgbCdlbXBsYWNlbWVudCBkZSBsYSBmZW7DqnRyZSBicmFpbGxlIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgbmFtZSBvZiBNSURJIG11c2ljYWwgaW5zdHJ1bWVudCAjNCAoaW4gdGhlIFBpYW5vIGdyb3VwKS4KKyM6IFByb2dyYW1zL21pZGkuYzo4OQorbXNnaWQgIkhvbmt5dG9uayBQaWFubyIKK21zZ3N0ciAiUGlhbm8gYmFzdHJpbmd1ZSIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjEyMjgKK21zZ2lkICJJbW1lZGlhdGUiCittc2dzdHIgIkltbcOpZGlhdCIKKworIzogUHJvZ3JhbXMveGJybGFwaS5jOjY2NQorbXNnaWQgIkluY29tcGF0aWJsZSBYS0IgbGlicmFyeVxuIgorbXNnc3RyICJCaWJsaW90aMOocXVlIFhLQiBpbmNvbXBhdGlibGVcbiIKKworIzogUHJvZ3JhbXMveGJybGFwaS5jOjY2NworbXNnaWQgIkluY29tcGF0aWJsZSBYS0Igc2VydmVyIHN1cHBvcnRcbiIKK21zZ3N0ciAiU3VwcG9ydCBkdSBzZXJ2ZXVyIFhLQiBpbmNvbXBhdGlibGVcbiIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjE0OTYKK21zZ2lkICJJbmZvcm1hdGlvbiIKK21zZ3N0ciAiSW5mb3JtYXRpb25zIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6OTU2Cittc2dpZCAiSW5wdXQgT3B0aW9ucyIKK21zZ3N0ciAiT3B0aW9ucyBkJ2VudHLDqWUiCisKKyM6IFByb2dyYW1zL2xvZy5jOjcwCittc2dpZCAiSW5wdXQgUGFja2V0cyIKK21zZ3N0ciAiUGFxdWV0cyBlbnRyYW50cyIKKworIzogUHJvZ3JhbXMvY29uZmlnLmM6NDE4CisjLCBjLWZvcm1hdAorbXNnaWQgIkluc3RhbGwgdGhlICVzIHNlcnZpY2UsIGFuZCB0aGVuIGV4aXQuIgorbXNnc3RyICJJbnN0YWxsZXogbGUgc2VydmljZSAlcyBldCBxdWl0dGV6LiIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjE1MDAKK21zZ2lkICJJbnRlcm5hbCBQYXJhbWV0ZXJzIgorbXNnc3RyICJQYXJhbcOodHJlcyBpbnRlcm5lcyIKKworIzogRHJpdmVycy9TY3JlZW4vQW5kcm9pZC9zY3JlZW4uYzoxOTcKK21zZ2lkICJKYXZhIGNsYXNzIG5vdCBmb3VuZCIKK21zZ3N0ciAiQ2xhc3NlIEphdmEgbm9uIHRyb3V2w6llIgorCisjOiBEcml2ZXJzL1NjcmVlbi9BbmRyb2lkL3NjcmVlbi5jOjE4MQorbXNnaWQgIkphdmEgZXhjZXB0aW9uIG9jY3VycmVkIgorbXNnc3RyICJVbmUgZXhjZXB0aW9uIEphdmEgcydlc3QgcHJvZHVpdGUiCisKKyM6IERyaXZlcnMvU2NyZWVuL0FuZHJvaWQvc2NyZWVuLmM6MTk0Cittc2dpZCAiSmF2YSBtZXRob2Qgbm90IGZvdW5kIgorbXNnc3RyICJNw6l0aG9kZSBKYXZhIG5vbiB0cm91dsOpZSIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIG5hbWUgb2YgTUlESSBtdXNpY2FsIGluc3RydW1lbnQgIzEwOSAoaW4gdGhlIEV0aG5pYyBncm91cCkuCisjOiBQcm9ncmFtcy9taWRpLmM6NDE4Cittc2dpZCAiS2FsaW1iYSIKK21zZ3N0ciAiS2FsaW1iYSIKKworIzogUHJvZ3JhbXMvY29uZmlnLmM6MTcwOQorbXNnaWQgIktleSBCaW5kaW5ncyIKK21zZ3N0ciAiQXNzb2NpYXRpb25zIGRlIHRvdWNoZXMiCisKKyM6IFByb2dyYW1zL2NvbmZpZy5jOjEyMzcKK21zZ2lkICJLZXkgSGVscCIKK21zZ3N0ciAiVG91Y2hlIEFpZGUiCisKKyM6IFByb2dyYW1zL2NvbmZpZy5jOjE3MTQgUHJvZ3JhbXMva3RiX2xpc3QuYzo3MzcKK21zZ2lkICJLZXkgVGFibGUiCittc2dzdHIgIlRhYmxlIGRlIHRvdWNoZXMiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzo5MzUKK21zZ2lkICJLZXlib2FyZCBFbmFibGVkIgorbXNnc3RyICJDbGF2aWVyIEFjdGl2w6kiCisKKyM6IFByb2dyYW1zL2xvZy5jOjg4Cittc2dpZCAiS2V5Ym9hcmQgS2V5IEV2ZW50cyIKK21zZ3N0ciAiw4l2w6luZW1lbnRzIGxpw6lzIGF1eCB0b3VjaGVzIGR1IGNsYXZpZXIiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzoxMDQyCittc2dpZCAiS2V5Ym9hcmQgTEVEIEFsZXJ0cyIKK21zZ3N0ciAiQWxlcnRlcyBsdW1pbmV1c2VzIGR1IGNsYXZpZXIiCisKKyM6IFByb2dyYW1zL2NvbmZpZy5jOjEzMjIgUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjEwMjQKK21zZ2lkICJLZXlib2FyZCBUYWJsZSIKK21zZ3N0ciAiVGFibGVzIGRlcyB0b3VjaGVzIGR1IGNsYXZpZXIiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBuYW1lIG9mIE1JREkgbXVzaWNhbCBpbnN0cnVtZW50ICMxMDggKGluIHRoZSBFdGhuaWMgZ3JvdXApLgorIzogUHJvZ3JhbXMvbWlkaS5jOjQxNQorbXNnaWQgIktvdG8iCittc2dzdHIgIktvdG8iCisKKyM6IFByb2dyYW1zL2NvbmZpZy5jOjMxMTIKK21zZ2lkICJMYW5ndWFnZSIKK21zZ3N0ciAiTGFuZ3VlIgorCisjLiBTeW50aCBMZWFkCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgbmFtZSBvZiBNSURJIG11c2ljYWwgaW5zdHJ1bWVudCAjODEgKGluIHRoZSBTeW50aCBMZWFkIGdyb3VwKS4KKyM6IFByb2dyYW1zL21pZGkuYzozMzAKK21zZ2lkICJMZWFkIDEgKHNxdWFyZSkiCittc2dzdHIgIlBvc2l0aW9uIDEgKGNhcnLDqSkiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBuYW1lIG9mIE1JREkgbXVzaWNhbCBpbnN0cnVtZW50ICM4MiAoaW4gdGhlIFN5bnRoIExlYWQgZ3JvdXApLgorIzogUHJvZ3JhbXMvbWlkaS5jOjMzMworbXNnaWQgIkxlYWQgMiAoc2F3dG9vdGgpIgorbXNnc3RyICJQb3NpdGlvbiAyIChlbiBkZW50cyBkZSBzY2llKSIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIG5hbWUgb2YgTUlESSBtdXNpY2FsIGluc3RydW1lbnQgIzgzIChpbiB0aGUgU3ludGggTGVhZCBncm91cCkuCisjOiBQcm9ncmFtcy9taWRpLmM6MzM2Cittc2dpZCAiTGVhZCAzIChjYWxsaW9wZSkiCittc2dzdHIgIlBvc2l0aW9uIDMgKENhbGxpb3BlKSIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIG5hbWUgb2YgTUlESSBtdXNpY2FsIGluc3RydW1lbnQgIzg0IChpbiB0aGUgU3ludGggTGVhZCBncm91cCkuCisjOiBQcm9ncmFtcy9taWRpLmM6MzM5Cittc2dpZCAiTGVhZCA0IChjaGlmZikiCittc2dzdHIgIlBvc2l0aW9uIDQgKGNoaWZmKSIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIG5hbWUgb2YgTUlESSBtdXNpY2FsIGluc3RydW1lbnQgIzg1IChpbiB0aGUgU3ludGggTGVhZCBncm91cCkuCisjOiBQcm9ncmFtcy9taWRpLmM6MzQyCittc2dpZCAiTGVhZCA1IChjaGFyYW5nKSIKK21zZ3N0ciAiUG9zaXRpb24gNSAoY2hhcmFuZykiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBuYW1lIG9mIE1JREkgbXVzaWNhbCBpbnN0cnVtZW50ICM4NiAoaW4gdGhlIFN5bnRoIExlYWQgZ3JvdXApLgorIzogUHJvZ3JhbXMvbWlkaS5jOjM0NQorbXNnaWQgIkxlYWQgNiAodm9pY2UpIgorbXNnc3RyICJQb3NpdGlvbiA2ICh2b2l4KSIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIG5hbWUgb2YgTUlESSBtdXNpY2FsIGluc3RydW1lbnQgIzg3IChpbiB0aGUgU3ludGggTGVhZCBncm91cCkuCisjOiBQcm9ncmFtcy9taWRpLmM6MzQ4Cittc2dpZCAiTGVhZCA3IChmaWZ0aHMpIgorbXNnc3RyICJQb3NpdGlvbiA3IChjaW5xdWnDqG1lcykiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBuYW1lIG9mIE1JREkgbXVzaWNhbCBpbnN0cnVtZW50ICM4OCAoaW4gdGhlIFN5bnRoIExlYWQgZ3JvdXApLgorIzogUHJvZ3JhbXMvbWlkaS5jOjM1MQorbXNnaWQgIkxlYWQgOCAoYmFzcyArIGxlYWQpIgorbXNnc3RyICJQb3NpdGlvbiA4IChiYXNzZSArIHBvc2l0aW9uKSIKKworIzogUHJvZ3JhbXMvbGVhcm4uYzoxMDEKK21zZ2lkICJMZWFybiBNb2RlIgorbXNnc3RyICJtb2RlIGQnYXBwcmVudGlzc2FnZSIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjEzNDEKK21zZ2lkICJMZWZ0IgorbXNnc3RyICJHYXVjaGUiCisKKyM6IFByb2dyYW1zL2JybHR0eS1rdGIuYzo1MQorbXNnaWQgIkxpc3Qga2V5IG5hbWVzLiIKK21zZ3N0ciAiTGlzdGUgbGVzIG5vbXMgZGVzIHRvdWNoZXMiCisKKyM6IFByb2dyYW1zL2JybHR0eS1rdGIuYzo1NworbXNnaWQgIkxpc3Qga2V5IHRhYmxlIGluIGhlbHAgc2NyZWVuIGZvcm1hdC4iCittc2dzdHIgIkxpc3RlIGxhIHRhYmxlIGRlIHRvdWNoZXMgYXUgZm9ybWF0IMOpY3JhbiBkJ2FpZGUiCisKKyM6IFByb2dyYW1zL2JybHR0eS1rdGIuYzo2MworbXNnaWQgIkxpc3Qga2V5IHRhYmxlIGluIHJlU3RydWN0dXJlZFRleHQgZm9ybWF0LiIKK21zZ3N0ciAiTGlzdGUgbGEgdGFibGUgZGUgdG91Y2hlcyBhdSBmb3JtYXQgcmVTdHJ1Y3R1cmVkVGV4dCIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjE0ODMKK21zZ2lkICJMb2NhbGUgRGlyZWN0b3J5IgorbXNnc3RyICJSw6lwZXJ0b2lyZSBkZSBsYSBsb2NhbGUiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzoxNTE5Cittc2dpZCAiTG9nIENhdGVnb3JpZXMiCittc2dzdHIgIkNhdMOpZ29yaWVzIGRlIGpvdXJuYWwiCisKKyM6IFByb2dyYW1zL2NvbmZpZy5jOjg5MAorbXNnaWQgIkxvZyBMZXZlbCIKK21zZ3N0ciAiTml2ZWF1IGRlIGpvdXJuYWxpc2F0aW9uIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6MTU4MAorbXNnaWQgIkxvZyBNZXNzYWdlcyIKK21zZ3N0ciAiTWVzc2FnZXMgZHUgam91cm5hbCIKKworIzogUHJvZ3JhbXMvY29uZmlnLmM6NzczCittc2dpZCAiTG9nIHRoZSB2ZXJzaW9ucyBvZiB0aGUgY29yZSwgQVBJLCBhbmQgYnVpbHQtaW4gZHJpdmVycywgYW5kIHRoZW4gZXhpdC4iCittc2dzdHIgIkVucmVnaXN0cmUgbGVzIHZlcnNpb25zIGRlIGwnYXBwbGljYXRpb24gcHJpbmNpcGFsZSwgZGUgbCdBUEksIGRlcyBwaWxvdGVzIGludMOpZ3LDqXMgcHVpcyBxdWl0dGVyIgorCisjOiBQcm9ncmFtcy9jb25maWcuYzo3MzgKK21zZ2lkICJMb2cgdG8gc3RhbmRhcmQgZXJyb3IgcmF0aGVyIHRoYW4gdG8gdGhlIHN5c3RlbSBsb2cuIgorbXNnc3RyICJFbnJlZ2lzdHJlIHN1ciBsJ2VycmV1ciBzdGFuZGFyZCBwbHV0w7R0IHF1ZSBzdXIgbGUgam91cm5hbCBkdSBzeXN0w6htZS4iCisKKyM6IFByb2dyYW1zL2NvbmZpZy5jOjc1MgorIywgYy1mb3JtYXQKK21zZ2lkICJMb2dnaW5nIGxldmVsICglcyBvciBvbmUgb2YgeyVzfSkgYW5kL29yIGxvZyBjYXRlZ29yaWVzIHRvIGVuYWJsZSAoYW55IGNvbWJpbmF0aW9uIG9mIHslc30sIGVhY2ggb3B0aW9uYWxseSBwcmVmaXhlZCBieSAlcyB0byBkaXNhYmxlKS4iCittc2dzdHIgIlVuIG5pdmVhdSBkZSBqb3VybmFsaXNhdGlvbiAoJXMgb3UgdW5lIHZhbGV1ciBwYXJtaSB7JXN9KSBldC9vdSBkZXMgYXTDqWdvcmllcyBkZSBqb3VybmFsaXNhdGlvbiDDoCBhY3RpdmVyIChuJ2ltcG9ydGUgcXVlbGxlIGNvbWJpbmFpc29uIGRlIHslc30sIGNoYWN1bmUgw6l2ZW50dWVsbGVtZW50IHByw6lmaXjDqWUgcGFyICVzIHBvdXIgbGEgZMOpc2FjdGl2ZXIpLiIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjk3OAorbXNnaWQgIkxvbmcgUHJlc3MgVGltZSIKK21zZ3N0ciAiRHVyw6llIGQnYXBwdWkgcHJvbG9uZ8OpZSIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjc0NiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6MTAxMQorbXNnaWQgIkxvdyIKK21zZ3N0ciAiRmFpYmxlIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6NjY2Cittc2dpZCAiTG93ZXIgTGVmdCBEb3QiCittc2dzdHIgIlBvaW50IGVuIGJhcyDDoCBnYXVjaGUiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzo2NjcKK21zZ2lkICJMb3dlciBSaWdodCBEb3QiCittc2dzdHIgIlBvaW50IGVuIGJhcyDDoCBkcm9pdGUiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzoxMDU4Cittc2dpZCAiTUlESSIKK21zZ3N0ciAiTUlESSIKKworIzogUHJvZ3JhbXMvY29uZmlnLmM6NzIyCittc2dpZCAiTUlESSAoTXVzaWNhbCBJbnN0cnVtZW50IERpZ2l0YWwgSW50ZXJmYWNlKSBkZXZpY2Ugc3BlY2lmaWVyLiIKK21zZ3N0ciAiSWRlbnRpZmlhbnQgZHUgcMOpcmlwaMOpcmlxdWUgTUlESSAoTXVzaWNhbCBJbnN0cnVtZW50IERpZ2l0YWwgSW50ZXJmYWNlKS4iCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzoxMDg4Cittc2dpZCAiTUlESSBJbnN0cnVtZW50IgorbXNnc3RyICJJbnN0cnVtZW50IE1JREkiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzoxMDc4Cittc2dpZCAiTUlESSBWb2x1bWUiCittc2dzdHIgIlZvbHVtZSBNSURJIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6MTQ0MworbXNnaWQgIk1haWxpbmcgTGlzdCIKK21zZ3N0ciAiTGlzdGUgZGUgRGlmZnVzaW9uIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgbmFtZSBvZiBNSURJIG11c2ljYWwgaW5zdHJ1bWVudCAjMTMgKGluIHRoZSBDaHJvbWF0aWMgUGVyY3Vzc2lvbiBncm91cCkuCisjOiBQcm9ncmFtcy9taWRpLmM6MTE3Cittc2dpZCAiTWFyaW1iYSIKK21zZ3N0ciAiTWFyaW1iYSIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjc0OSBQcm9ncmFtcy9tZW51X3ByZWZzLmM6MTAxNAorbXNnaWQgIk1heGltdW0iCittc2dzdHIgIk1heGltdW0iCisKKyM6IFByb2dyYW1zL2JybHR0eS1jdGIuYzo5MAorbXNnaWQgIk1heGltdW0gbGVuZ3RoIG9mIGFuIG91dHB1dCBsaW5lLiIKK21zZ3N0ciAiTG9uZ3VldXIgbWF4aW1hbGUgZCd1bmUgbGlnbmUgZCdhZmZpY2hhZ2UiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzo3NDcgUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjEwMTIKK21zZ2lkICJNZWRpdW0iCittc2dzdHIgIk1veWVubmUiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBuYW1lIG9mIE1JREkgbXVzaWNhbCBpbnN0cnVtZW50ICMxMTggKGluIHRoZSBQZXJjdXNzaXZlIGdyb3VwKS4KKyM6IFByb2dyYW1zL21pZGkuYzo0NDYKK21zZ2lkICJNZWxvZGljIFRvbSIKK21zZ3N0ciAidG9tIG3DqWxvZGlxdWUiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzo2NzkKK21zZ2lkICJNZW51IE9wdGlvbnMiCittc2dzdHIgIk9wdGlvbnMgZHUgbWVudSIKKworIzogUHJvZ3JhbXMvY29uZmlnLmM6NzMxCittc2dpZCAiTWVzc2FnZSBob2xkIHRpbWVvdXQgKGluIDEwbXMgdW5pdHMpLiIKK21zZ3N0ciAiRHVyw6llIGQnYXBwYXJpdGlvbiBkdSBtZXNzYWdlIChwYXIgdW5pdMOpcyBkZSAxMG1zKS4iCisKKyM6IFByb2dyYW1zL2NvbmZpZy5jOjg5MworbXNnaWQgIk1lc3NhZ2VzIERpcmVjdG9yeSIKK21zZ3N0ciAiUsOpcGVydG9pcmUgZGVzIE1lc3NhZ2VzIgorCisjOiBQcm9ncmFtcy9jb25maWcuYzo4OTIKK21zZ2lkICJNZXNzYWdlcyBEb21haW4iCittc2dzdHIgIkRvbWFpbmUgZGVzIE1lc3NhZ2VzIgorCisjOiBQcm9ncmFtcy9jb25maWcuYzo4OTEKK21zZ2lkICJNZXNzYWdlcyBMb2NhbGUiCittc2dzdHIgIkxvY2FsZSBkZXMgTWVzc2FnZXMiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzo3NDUgUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjEwMTAKK21zZ2lkICJNaW5pbXVtIgorbXNnc3RyICJNaW5pbXVtIgorCisjOiBQcm9ncmFtcy9jb25maWcuYzo2ODIKKyMsIGMtZm9ybWF0Cittc2dpZCAiTWluaW11bSBzY3JlZW4gY29udGVudCBxdWFsaXR5IHRvIGF1dG9zcGVhayAob25lIG9mIHslc30pLiIKK21zZ3N0ciAiTGUgbml2ZWF1IG1pbmltYWwgZGUgcXVhbGl0w6kgZHUgY29udGVudSBkZSBsJ8OpY3JhbiDDoCBwYXJ0aXIgZHVxdWVsIGFjdGl2ZXIgbCfDqW5vbmNpYXRpb24gYXV0b21hdGlxdWUgKHVuZSB2YWxldXIgcGFybWkgeyVzfSkuIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6MTMxMworbXNnaWQgIk1vbnRoIERheSBZZWFyIgorbXNnc3RyICJNb2lzIEpvdXIgQW5uw6llIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgbmFtZSBvZiBNSURJIG11c2ljYWwgaW5zdHJ1bWVudCAjMTEgKGluIHRoZSBDaHJvbWF0aWMgUGVyY3Vzc2lvbiBncm91cCkuCisjOiBQcm9ncmFtcy9taWRpLmM6MTExCittc2dpZCAiTXVzaWMgQm94IgorbXNnc3RyICJCb8OudGUgw6AgbXVzaXF1ZSIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjEwNTgKK21zZ2lkICJNdXNpY2FsIEluc3RydW1lbnQgRGlnaXRhbCBJbnRlcmZhY2UiCittc2dzdHIgIkludGVyZmFjZSBudW3DqXJpcXVlIGQnaW5zdHJ1bWVudCBkZSBtdXNpcXVlIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgbmFtZSBvZiBNSURJIG11c2ljYWwgaW5zdHJ1bWVudCAjNjAgKGluIHRoZSBCcmFzcyBncm91cCkuCisjOiBQcm9ncmFtcy9taWRpLmM6MjY0Cittc2dpZCAiTXV0ZWQgVHJ1bXBldCIKK21zZ3N0ciAiVHJvbXBldHRlIGJvdWNow6llIgorCisjOiBQcm9ncmFtcy9jb25maWcuYzo2MjMKK21zZ2lkICJOYW1lIG9mIG9yIHBhdGggdG8gYXR0cmlidXRlcyB0YWJsZS4iCittc2dzdHIgIk5vbSBvdSBjaGVtaW4gdmVycyBsYSB0YWJsZSBkJ2F0dHJpYnV0cy4iCisKKyM6IFByb2dyYW1zL2NvbmZpZy5jOjYxNQorbXNnaWQgIk5hbWUgb2Ygb3IgcGF0aCB0byBjb250cmFjdGlvbiB0YWJsZS4iCittc2dzdHIgIk5vbSBvdSBjaGVtaW4gdmVycyBsYSB0YWJsZSBkZSBicmFpbGxlIGFicsOpZ8OpLiIKKworIzogUHJvZ3JhbXMvY29uZmlnLmM6NDc5Cittc2dpZCAiTmFtZSBvZiBvciBwYXRoIHRvIGRlZmF1bHQgcHJlZmVyZW5jZXMgZmlsZS4iCittc2dzdHIgIk5vbSBvdSBjaGVtaW4gdmVycyBsZSBmaWNoaWVyIGRlcyBwcsOpZsOpcmVuY2VzIHBhciBkw6lmYXV0LiIKKworIzogUHJvZ3JhbXMvY29uZmlnLmM6NjMyCittc2dpZCAiTmFtZSBvZiBvciBwYXRoIHRvIGtleWJvYXJkIHRhYmxlLiIKK21zZ3N0ciAiTm9tIG91IGNoZW1pbiB2ZXJzIGxlIGZpY2hpZXIgZGUgbGEgdGFibGUgZGUgdG91Y2hlcy4iCisKKyM6IFByb2dyYW1zL2NvbmZpZy5jOjY2OAorbXNnaWQgIk5hbWUgb2Ygb3IgcGF0aCB0byBzcGVlY2ggaW5wdXQgb2JqZWN0LiIKK21zZ3N0ciAiTm9tIG91IGNoZW1pbiB2ZXJzIGwnb2JqZXQgZCdlbnRyw6llIGRlIGxhIHN5bnRow6hzZS4iCisKKyM6IFByb2dyYW1zL2NvbmZpZy5jOjYwNQorIywgYy1mb3JtYXQKK21zZ2lkICJOYW1lIG9mIG9yIHBhdGggdG8gdGV4dCB0YWJsZSAob3IgJXMpLiIKK21zZ3N0ciAiTm9tIG91IGNoZW1pbiB2ZXJzIGxhIHRhYmxlIGRlIGNhcmFjdMOocmVzIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6ODQ1Cittc2dpZCAiTmF2aWdhdGlvbiBPcHRpb25zIgorbXNnc3RyICJPcHRpb25zIGRlIG5hdmlnYXRpb24iCisKKyM6IFByb2dyYW1zL21lbnUuYzo1MjMKK21zZ2lkICJObyIKK21zZ3N0ciAiTm9uIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6NzIwCittc2dpZCAiTm8gQ2FwaXRhbGl6YXRpb24iCittc2dzdHIgIlBhcyBkZSBtaXNlIGVuIG1hanVzY3VsZSIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjg5NyBQcm9ncmFtcy9tZW51X3ByZWZzLmM6MTE5MgorIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjEyMDUgUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjEyMTgKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzoxMzAxIFByb2dyYW1zL21lbnVfcHJlZnMuYzoxMzQwCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6MTM2MAorbXNnaWQgIk5vbmUiCittc2dzdHIgIkF1Y3VuZSIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjE0OTUKK21zZ2lkICJOb3RpY2UiCittc2dzdHIgIlJlbWFycXVlIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgbmFtZSBvZiBNSURJIG11c2ljYWwgaW5zdHJ1bWVudCAjNjkgKGluIHRoZSBSZWVkIGdyb3VwKS4KKyM6IFByb2dyYW1zL21pZGkuYzoyOTIKK21zZ2lkICJPYm9lIgorbXNnc3RyICJIYXV0Ym9pcyIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIG5hbWUgb2YgTUlESSBtdXNpY2FsIGluc3RydW1lbnQgIzgwIChpbiB0aGUgUGlwZSBncm91cCkuCisjOiBQcm9ncmFtcy9taWRpLmM6MzI2Cittc2dpZCAiT2NhcmluYSIKK21zZ3N0ciAiT2NhcmluYSIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjk2MAorbXNnaWQgIk9mZiIKK21zZ3N0ciAiSW5hY3RpZiIKKworIzogUHJvZ3JhbXMvY29uZmlnLmM6MTgwMAorbXNnaWQgIk9sZCBQcmVmZXJlbmNlcyBGaWxlIgorbXNnc3RyICJBbmNpZW4gZmljaGllciBkZXMgcHLDqWbDqXJlbmNlcyIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjk3MworbXNnaWQgIk9uIEZpcnN0IFJlbGVhc2UiCittc2dzdHIgIkF1IFByZW1pZXIgUmVsw6JjaGVtZW50IgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgbmFtZSBvZiBNSURJIG11c2ljYWwgaW5zdHJ1bWVudCAjNTYgKGluIHRoZSBFbnNlbWJsZSBncm91cCkuCisjOiBQcm9ncmFtcy9taWRpLmM6MjUxCittc2dpZCAiT3JjaGVzdHJhIEhpdCIKK21zZ3N0ciAiT3JjaGVzdHJlIGRlIHBlcmN1c3Npb25zIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgbmFtZSBvZiBNSURJIG11c2ljYWwgaW5zdHJ1bWVudCAjNDcgKGluIHRoZSBTdHJpbmdzIGdyb3VwKS4KKyM6IFByb2dyYW1zL21pZGkuYzoyMjMKK21zZ2lkICJPcmNoZXN0cmFsIEhhcnAiCittc2dzdHIgIkhhcnBlIGQnb3JjaGVzdHJlIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgbmFtZSBvZiBNSURJIG11c2ljYWwgaW5zdHJ1bWVudCBncm91cCAjMy4KKyM6IFByb2dyYW1zL21pZGkuYzozMQorbXNnaWQgIk9yZ2FuIgorbXNnc3RyICJPcmd1ZSIKKworIzogUHJvZ3JhbXMvbG9nLmM6NzYKK21zZ2lkICJPdXRwdXQgUGFja2V0cyIKK21zZ3N0ciAiUGFxdWV0cyBzb3J0YW50cyIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIG5hbWUgb2YgTUlESSBtdXNpY2FsIGluc3RydW1lbnQgIzMwIChpbiB0aGUgR3VpdGFyIGdyb3VwKS4KKyM6IFByb2dyYW1zL21pZGkuYzoxNzAKK21zZ2lkICJPdmVyZHJpdmVuIEd1aXRhciIKK21zZ3N0ciAiR3VpdGFyZSBvdmVyZHJpdmVuIgorCisjOiBEcml2ZXJzL0JyYWlsbGUvSXJpcy9icmFpbGxlLmM6MTU0NQorbXNnaWQgIlBDIG1vZGUiCittc2dzdHIgIk1vZGUgUEMiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzoxMDU3Cittc2dpZCAiUENNIgorbXNnc3RyICJQQ00iCisKKyM6IFByb2dyYW1zL2NvbmZpZy5jOjcxMgorbXNnaWQgIlBDTSAoc291bmRjYXJkIGRpZ2l0YWwgYXVkaW8pIGRldmljZSBzcGVjaWZpZXIuIgorbXNnc3RyICJJZGVudGlmaWFudCBkdSBww6lyaXBow6lyaXF1ZSBQQ00gKGNhcnRlIHNvbiBudW3DqXJpcXVlKSIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjEwNzAKK21zZ2lkICJQQ00gVm9sdW1lIgorbXNnc3RyICJWb2x1bWUgUENNIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIFBBU1NQUzIgY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjE0ODcKK21zZ2lkICJQUy8yIChzZXQgMykga2V5Ym9hcmQgc2NhbiBjb2RlIgorbXNnc3RyICJTY2FuY29kZSBkZSBjbGF2aWVyIFBTLzIgKHLDqWdsw6kgw6AgMykiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzoxNDMzCittc2dpZCAiUGFja2FnZSBSZXZpc2lvbiIKK21zZ3N0ciAiUsOpdmlzaW9uIGR1IHBhcXVldCIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjE0MjgKK21zZ2lkICJQYWNrYWdlIFZlcnNpb24iCittc2dzdHIgIlZlcnNpb24gZHUgcGFxdWV0IgorCisjLiBTeW50aCBQYWQKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBuYW1lIG9mIE1JREkgbXVzaWNhbCBpbnN0cnVtZW50ICM4OSAoaW4gdGhlIFN5bnRoIFBhZCBncm91cCkuCisjOiBQcm9ncmFtcy9taWRpLmM6MzU1Cittc2dpZCAiUGFkIDEgKG5ldyBhZ2UpIgorbXNnc3RyICJibG9jIDEgKG5ldyBhZ2UpIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgbmFtZSBvZiBNSURJIG11c2ljYWwgaW5zdHJ1bWVudCAjOTAgKGluIHRoZSBTeW50aCBQYWQgZ3JvdXApLgorIzogUHJvZ3JhbXMvbWlkaS5jOjM1OAorbXNnaWQgIlBhZCAyICh3YXJtKSIKK21zZ3N0ciAiYmxvYyAyIChjaGF1ZCkiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBuYW1lIG9mIE1JREkgbXVzaWNhbCBpbnN0cnVtZW50ICM5MSAoaW4gdGhlIFN5bnRoIFBhZCBncm91cCkuCisjOiBQcm9ncmFtcy9taWRpLmM6MzYxCittc2dpZCAiUGFkIDMgKHBvbHlzeW50aCkiCittc2dzdHIgIkJsb2MgMyAocG9seXN5bnRow6kpIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgbmFtZSBvZiBNSURJIG11c2ljYWwgaW5zdHJ1bWVudCAjOTIgKGluIHRoZSBTeW50aCBQYWQgZ3JvdXApLgorIzogUHJvZ3JhbXMvbWlkaS5jOjM2NAorbXNnaWQgIlBhZCA0IChjaG9pcikiCittc2dzdHIgIkJsb2MgNCAoY2hvZXVyKSIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIG5hbWUgb2YgTUlESSBtdXNpY2FsIGluc3RydW1lbnQgIzkzIChpbiB0aGUgU3ludGggUGFkIGdyb3VwKS4KKyM6IFByb2dyYW1zL21pZGkuYzozNjcKK21zZ2lkICJQYWQgNSAoYm93ZWQpIgorbXNnc3RyICJCbG9jIDUgKGh1w6llcykiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBuYW1lIG9mIE1JREkgbXVzaWNhbCBpbnN0cnVtZW50ICM5NCAoaW4gdGhlIFN5bnRoIFBhZCBncm91cCkuCisjOiBQcm9ncmFtcy9taWRpLmM6MzcwCittc2dpZCAiUGFkIDYgKG1ldGFsbGljKSIKK21zZ3N0ciAiQmxvYyA2IChtw6l0YWxsaXF1ZSkiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBuYW1lIG9mIE1JREkgbXVzaWNhbCBpbnN0cnVtZW50ICM5NSAoaW4gdGhlIFN5bnRoIFBhZCBncm91cCkuCisjOiBQcm9ncmFtcy9taWRpLmM6MzczCittc2dpZCAiUGFkIDcgKGhhbG8pIgorbXNnc3RyICJCbG9jIDcgKGFjY2xhbWF0aW9ucykiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBuYW1lIG9mIE1JREkgbXVzaWNhbCBpbnN0cnVtZW50ICM5NiAoaW4gdGhlIFN5bnRoIFBhZCBncm91cCkuCisjOiBQcm9ncmFtcy9taWRpLmM6Mzc2Cittc2dpZCAiUGFkIDggKHN3ZWVwKSIKK21zZ3N0ciAiQmxvYyA4IChjb3VwIGRlIGJhbGFpKSIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIG5hbWUgb2YgTUlESSBtdXNpY2FsIGluc3RydW1lbnQgIzc2IChpbiB0aGUgUGlwZSBncm91cCkuCisjOiBQcm9ncmFtcy9taWRpLmM6MzE0Cittc2dpZCAiUGFuIEZsdXRlIgorbXNnc3RyICJGbMO7dGUgZGUgcGFuIgorCisjOiBQcm9ncmFtcy9jb25maWcuYzo1NDEKK21zZ2lkICJQYXJhbWV0ZXJzIGZvciB0aGUgYXBwbGljYXRpb24gcHJvZ3JhbW1pbmcgaW50ZXJmYWNlLiIKK21zZ3N0ciAiUGFyYW3DqHRyZXMgcG91ciBsJ2ludGVyZmFjZSBkZSBwcm9ncmFtbWF0aW9uIHBvdXIgYXBwbGljYXRpb25zLiIKKworIzogUHJvZ3JhbXMvY29uZmlnLmM6NTYzCittc2dpZCAiUGFyYW1ldGVycyBmb3IgdGhlIGJyYWlsbGUgZHJpdmVyLiIKK21zZ3N0ciAiUGFyYW3DqHRyZXMgcG91ciBsZSBwaWxvdGUgYnJhaWxsZS4iCisKKyM6IFByb2dyYW1zL2NvbmZpZy5jOjQzNgorbXNnaWQgIlBhcmFtZXRlcnMgZm9yIHRoZSBwcml2aWxlZ2UgZXN0YWJsaXNobWVudCBzdGFnZS4iCittc2dzdHIgIlBhcmFtw6h0cmVzIHBvdXIgbGEgcGhhc2UgZCfDqXRhYmxpc3NlbWVudCBkZSBwcml2aWzDqGdlLiIKKworIzogUHJvZ3JhbXMvY29uZmlnLmM6NzAzCittc2dpZCAiUGFyYW1ldGVycyBmb3IgdGhlIHNjcmVlbiBkcml2ZXIuIgorbXNnc3RyICJQYXJhbcOodHJlcyBwb3VyIGxlIHBpbG90ZSBkZSBsJ8OpY3Jhbi4iCisKKyM6IFByb2dyYW1zL2NvbmZpZy5jOjY2MAorbXNnaWQgIlBhcmFtZXRlcnMgZm9yIHRoZSBzcGVlY2ggZHJpdmVyLiIKK21zZ3N0ciAiUGFyYW3DqHRyZXMgcG91ciBsZSBwaWxvdGUgZGUgc3ludGjDqHNlIHZvY2FsZS4iCisKKyM6IFByb2dyYW1zL2NvbmZpZy5jOjQ3MAorbXNnaWQgIlBhdGggdG8gZGVmYXVsdCBzZXR0aW5ncyBmaWxlLiIKK21zZ3N0ciAiQ2hlbWluIGR1IGZpY2hpZXIgZGVzIHBhcmFtw6h0cmVzIHBhciBkw6lmYXV0LiIKKworIzogUHJvZ3JhbXMvY29uZmlnLmM6NTI0Cittc2dpZCAiUGF0aCB0byBkaXJlY3RvcnkgY29udGFpbmluZyBkcml2ZXJzLiIKK21zZ3N0ciAiQ2hlbWluIHZlcnMgbGUgcsOpcGVydG9pcmUgY29udGVuYW50IGxlcyBwaWxvdGVzLiIKKworIzogUHJvZ3JhbXMvYnJsdGVzdC5jOjY4IFByb2dyYW1zL2JybHR0eS1hdGIuYzozNiBQcm9ncmFtcy9icmx0dHktY3RiLmM6NTQKKyM6IFByb2dyYW1zL2JybHR0eS1rdGIuYzo3MyBQcm9ncmFtcy9jb25maWcuYzo1OTUKK21zZ2lkICJQYXRoIHRvIGRpcmVjdG9yeSBjb250YWluaW5nIHRhYmxlcy4iCittc2dzdHIgIkNoZW1pbiBkdSByw6lwZXJ0b2lyZSBjb250ZW5hbnQgbGVzIHRhYmxlcy4iCisKKyM6IFByb2dyYW1zL2JybHR0eS10dGIuYzoxNTIKK21zZ2lkICJQYXRoIHRvIGRpcmVjdG9yeSBjb250YWluaW5nIHRleHQgdGFibGVzLiIKK21zZ3N0ciAiQ2hlbWluIGR1IHLDqXBlcnRvaXJlIGNvbnRlbmFudCBsZXMgdGFibGVzIGRlIGNhcmFjdMOocmVzLiIKKworIzogUHJvZ3JhbXMvYnJsdHR5LWt0Yi5jOjgzCittc2dpZCAiUGF0aCB0byBkaXJlY3RvcnkgZm9yIGxvYWRpbmcgZHJpdmVycy4iCittc2dzdHIgIkNoZW1pbiBkdSByw6lwZXJ0b2lyZSBkZSBjaGFyZ2VtZW50IGRlcyBwaWxvdGVzLiIKKworIzogUHJvZ3JhbXMvYnJsdHR5LXRydHh0LmM6NTEKK21zZ2lkICJQYXRoIHRvIGRpcmVjdG9yeSBmb3IgdGV4dCB0YWJsZXMuIgorbXNnc3RyICJDaGVtaW4gZHUgcsOpcGVydG9pcmUgZGVzIHRhYmxlcyBkZSB0ZXh0ZSIKKworIzogUHJvZ3JhbXMvYnJsdGVzdC5jOjc4IFByb2dyYW1zL2NvbmZpZy5jOjUxNAorbXNnaWQgIlBhdGggdG8gZGlyZWN0b3J5IHdoaWNoIGNhbiBiZSB3cml0dGVuIHRvLiIKK21zZ3N0ciAiQ2hlbWluIGR1IHLDqXBlcnRvaXJlIG/DuSBpbCBlc3QgcG9zc2libGUgZCfDqWNyaXJlLiIKKworIzogUHJvZ3JhbXMvY29uZmlnLmM6NTA0Cittc2dpZCAiUGF0aCB0byBkaXJlY3Rvcnkgd2hpY2ggY29udGFpbnMgZmlsZXMgdGhhdCBjYW4gYmUgdXBkYXRlZC4iCittc2dzdHIgIkNoZW1pbiBkdSByw6lwZXJ0b2lyZSBvw7kgZGVzIGZpY2hpZXJzIHBldXZlbnQgw6p0cmUgbWlzIMOgIGpvdXIuIgorCisjOiBQcm9ncmFtcy9jb25maWcuYzo0MDQKK21zZ2lkICJQYXRoIHRvIGRpcmVjdG9yeSB3aGljaCBjb250YWlucyBtZXNzYWdlIGxvY2FsaXphdGlvbnMuIgorbXNnc3RyICJDaGVtaW4gdmVycyBsZSByw6lwZXJ0b2lyZSBjb250ZW5hbnQgbGVzIHRyYWR1Y3Rpb25zIGRlcyBtZXNzYWdlcyIKKworIzogUHJvZ3JhbXMvYnJsdHR5LXRydHh0LmM6NTkKK21zZ2lkICJQYXRoIHRvIGlucHV0IHRleHQgdGFibGUuIgorbXNnc3RyICJDaGVtaW4gZGUgbGEgdGFibGUgZGUgc2Fpc2llIGRlIHRleHRlLiIKKworIzogUHJvZ3JhbXMvY29uZmlnLmM6NzYxCittc2dpZCAiUGF0aCB0byBsb2cgZmlsZS4iCittc2dzdHIgIkNoZW1pbiBkdSBmaWNoaWVyIGpvdXJuYWwuIgorCisjOiBQcm9ncmFtcy9icmx0dHktdHJ0eHQuYzo2NworbXNnaWQgIlBhdGggdG8gb3V0cHV0IHRleHQgdGFibGUuIgorbXNnc3RyICJDaGVtaW4gZGUgbGEgdGFibGUgZGUgdGV4dGUgYWZmaWNow6kiCisKKyM6IFByb2dyYW1zL2NvbmZpZy5jOjQ2MAorbXNnaWQgIlBhdGggdG8gcHJvY2VzcyBpZGVudGlmaWVyIGZpbGUuIgorbXNnc3RyICJDaGVtaW4gZHUgZmljaGllciBkJ2lkZW50aWZpYW50cyBkZSBwcm9jZXNzdXMuIgorCisjOiBQcm9ncmFtcy9jb25maWcuYzo0OTQKK21zZ2lkICJQYXR0ZXJucyB0aGF0IG1hdGNoIGNvbW1hbmQgcHJvbXB0cy4iCittc2dzdHIgIk1vdGlmcyBwb3VyIHJlY29ubmHDrnRyZSBsZXMgaW52aXRlcyBkZSBjb21tYW5kZXMuIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgbmFtZSBvZiBNSURJIG11c2ljYWwgaW5zdHJ1bWVudCBncm91cCAjMTUuCisjOiBQcm9ncmFtcy9taWRpLmM6NzEKK21zZ2lkICJQZXJjdXNzaXZlIEluc3RydW1lbnRzIgorbXNnc3RyICJJbnN0cnVtZW50cyDDoCBwZXJjdXNzaW9ucyIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIG5hbWUgb2YgTUlESSBtdXNpY2FsIGluc3RydW1lbnQgIzE4IChpbiB0aGUgT3JnYW4gZ3JvdXApLgorIzogUHJvZ3JhbXMvbWlkaS5jOjEzMworbXNnaWQgIlBlcmN1c3NpdmUgT3JnYW4iCittc2dzdHIgIk9yZ3VlIMOgIHBlcmN1c3Npb24iCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBuYW1lIG9mIE1JREkgbXVzaWNhbCBpbnN0cnVtZW50IGdyb3VwICMxLgorIzogUHJvZ3JhbXMvbWlkaS5jOjI1Cittc2dpZCAiUGlhbm8iCittc2dzdHIgIlBpYW5vIgorCisjLiBQaXBlCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgbmFtZSBvZiBNSURJIG11c2ljYWwgaW5zdHJ1bWVudCAjNzMgKGluIHRoZSBQaXBlIGdyb3VwKS4KKyM6IFByb2dyYW1zL21pZGkuYzozMDUKK21zZ2lkICJQaWNjb2xvIgorbXNnc3RyICJQaWNjb2xvIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgbmFtZSBvZiBNSURJIG11c2ljYWwgaW5zdHJ1bWVudCBncm91cCAjMTAuCisjOiBQcm9ncmFtcy9taWRpLmM6NTIKK21zZ2lkICJQaXBlIgorbXNnc3RyICJUdXlhdSIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIG5hbWUgb2YgTUlESSBtdXNpY2FsIGluc3RydW1lbnQgIzQ2IChpbiB0aGUgU3RyaW5ncyBncm91cCkuCisjOiBQcm9ncmFtcy9taWRpLmM6MjIwCittc2dpZCAiUGl6emljYXRvIFN0cmluZ3MiCittc2dzdHIgIlBpenppY2F0aSIKKworIzogRHJpdmVycy9CcmFpbGxlL0JhdW0vYnJhaWxsZS5jOjExNTgKK21zZ2lkICJQb3dlcmRvd24iCittc2dzdHIgIkV4dGluY3Rpb24iCisKKyM6IFByb2dyYW1zL2NvbmZpZy5jOjI5NTYgUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjE0NjMKK21zZ2lkICJQcmVmZXJlbmNlcyBGaWxlIgorbXNnc3RyICJGaWNoaWVyIGRlcyBwcsOpZsOpcmVuY2VzIgorCisjOiBQcm9ncmFtcy9zY3JfbWVudS5jOjI3MQorbXNnaWQgIlByZWZlcmVuY2VzIE1lbnUiCittc2dzdHIgIk1lbnUgZGVzIHByw6lmw6lyZW5jZXMiCisKKyM6IEhlYWRlcnMvb3B0aW9ucy5oOjc1Cittc2dpZCAiUHJpbnQgYSB1c2FnZSBzdW1tYXJ5IChhbGwgb3B0aW9ucyksIGFuZCB0aGVuIGV4aXQuIgorbXNnc3RyICJBZmZpY2hlciB1biByw6lzdW3DqSBkZSBsJ3V0aWxpc2F0aW9uICh0b3V0ZXMgbGVzIG9wdGlvbnMpIGV0IHF1aXR0ZXIuIgorCisjOiBIZWFkZXJzL29wdGlvbnMuaDo3MAorbXNnaWQgIlByaW50IGEgdXNhZ2Ugc3VtbWFyeSAoY29tbW9ubHkgdXNlZCBvcHRpb25zIG9ubHkpLCBhbmQgdGhlbiBleGl0LiIKK21zZ3N0ciAiQWZmaWNoZSB1biByw6lzdW3DqSBkZSBsJ3V0aWxpc2F0aW9uIChzZXVsZW1lbnQgbGVzIG9wdGlvbnMgY291cmFtbWVudCB1dGlsaXPDqWVzKSwgcHVpcyBxdWl0dGUuIgorCisjOiBQcm9ncmFtcy9jb25maWcuYzo4NDQKK21zZ2lkICJQcml2aWxlZ2UgUGFyYW1ldGVyIgorbXNnc3RyICJQYXJhbcOodHJlIGRlIFByaXZpbMOoZ2UiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzoxNDE0Cittc2dpZCAiUHJvZmlsZXMiCittc2dzdHIgIlByb2ZpbHMiCisKKyM6IFByb2dyYW1zL2NvbmZpZy5jOjY0MAorbXNnaWQgIlByb3BlcnRpZXMgb2YgZWxpZ2libGUga2V5Ym9hcmRzLiIKK21zZ3N0ciAiUHJvcHJpw6l0w6lzIGRlcyBjbGF2aWVycyDDqWxpZ2libGVzLiIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjk1MAorbXNnaWQgIlF1aWNrIFNwYWNlIgorbXNnc3RyICJFc3BhY2UgUmFwaWRlIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6MTIwOQorbXNnaWQgIlJhaXNlIFBpdGNoIgorbXNnc3RyICJBdWdtZW50ZXIgbGUgdG9uIgorCisjOiBQcm9ncmFtcy9jb25maWcuYzozOTUKK21zZ2lkICJSZWNvZ25pemUgZW52aXJvbm1lbnQgdmFyaWFibGVzLiIKK21zZ3N0ciAiUmVjb25uYcOudCBsZXMgdmFyaWFibGVzIGQnZW52aXJvbm5lbWVudC4iCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBuYW1lIG9mIE1JREkgbXVzaWNhbCBpbnN0cnVtZW50ICM3NSAoaW4gdGhlIFBpcGUgZ3JvdXApLgorIzogUHJvZ3JhbXMvbWlkaS5jOjMxMQorbXNnaWQgIlJlY29yZGVyIgorbXNnc3RyICJNYWduw6l0b3Bob25lIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgbmFtZSBvZiBNSURJIG11c2ljYWwgaW5zdHJ1bWVudCBncm91cCAjOS4KKyM6IFByb2dyYW1zL21pZGkuYzo0OQorbXNnaWQgIlJlZWQiCittc2dzdHIgIkFuY2hlIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgbmFtZSBvZiBNSURJIG11c2ljYWwgaW5zdHJ1bWVudCAjMjEgKGluIHRoZSBPcmdhbiBncm91cCkuCisjOiBQcm9ncmFtcy9taWRpLmM6MTQyCittc2dpZCAiUmVlZCBPcmdhbiIKK21zZ3N0ciAiT3JndWUgw6AgaGFuY2hlIgorCisjOiBQcm9ncmFtcy9icmx0dHktY3RiLmM6ODIKK21zZ2lkICJSZWZvcm1hdCBpbnB1dC4iCittc2dzdHIgIkVudHLDqWUgZGUgcmVmb3JtYXRhZ2UuIgorCisjOiBQcm9ncmFtcy9jb25maWcuYzo1ODUKK21zZ2lkICJSZWxlYXNlIGJyYWlsbGUgZGV2aWNlIHdoZW4gc2NyZWVuIG9yIHdpbmRvdyBpcyB1bnJlYWRhYmxlLiIKK21zZ3N0ciAiQWJhbmRvbm5lIGxlIHDDqXJpcGjDqXJpcXVlIGJyYWlsbGUgcXVhbmQgaWwgbidlc3QgcGFzIHBvc3NpYmxlIGRlIGxpcmUgbCfDqWNyYW4gb3UgbGEgZmVuw6p0cmUuIgorCisjOiBQcm9ncmFtcy94YnJsYXBpLmM6MTA2Cittc2dpZCAiUmVtYWluIGEgZm9yZWdyb3VuZCBwcm9jZXNzIgorbXNnc3RyICJSZXN0ZXIgdW4gcHJvY2Vzc3VzIGludGVyYWN0aWYiCisKKyM6IFByb2dyYW1zL2NvbmZpZy5jOjQxMQorbXNnaWQgIlJlbWFpbiBhIGZvcmVncm91bmQgcHJvY2Vzcy4iCittc2dzdHIgIlJhcHBlbGxlIHVuIHByb2Nlc3N1cyBlbiB0w6JjaGUgZGUgZm9uZC4iCisKKyM6IFByb2dyYW1zL2JybHR0eS10cnR4dC5jOjczCittc2dpZCAiUmVtb3ZlIGRvdHMgc2V2ZW4gYW5kIGVpZ2h0LiIKK21zZ3N0ciAiU3VwcHJpbWUgbGVzIHBvaW50cyBzZXB0IGV0IGh1aXQiCisKKyM6IFByb2dyYW1zL2NvbmZpZy5jOjQyNgorIywgYy1mb3JtYXQKK21zZ2lkICJSZW1vdmUgdGhlICVzIHNlcnZpY2UsIGFuZCB0aGVuIGV4aXQuIgorbXNnc3RyICJTdXBwcmltZSBsZSBzZXJ2aWNlICVzIGV0IHF1aXR0ZS4iCisKKyM6IFByb2dyYW1zL2JybHR0eS1rdGIuYzo0NQorbXNnaWQgIlJlcG9ydCBwcm9ibGVtcyB3aXRoIHRoZSBrZXkgdGFibGUuIgorbXNnc3RyICJTaWduYWxlciBkZXMgcHJvYmzDqG1lcyBhdmVjIGxhIHRhYmxlIGRlIHRvdWNoZXMuIgorCisjOiBQcm9ncmFtcy9icmx0dHktdHRiLmM6MTg2Cittc2dpZCAiUmVwb3J0IHRoZSBjaGFyYWN0ZXJzIHdpdGhpbiB0aGUgY3VycmVudCBzY3JlZW4gZm9udCB0aGF0IGFyZW4ndCBkZWZpbmVkIHdpdGhpbiB0aGUgdGV4dCB0YWJsZS4iCittc2dzdHIgIlNpZ25hbGUgbGVzIGNhcmFjdMOocmVzIGRhbnMgdW5lIHBvbGljZSDDoCBsJ8OpY3JhbiBuJ2F5YW50IHBhcyDDqXTDqSBkw6lmaW5pcyBkYW5zIGxhIHRhYmxlIGRlIGNhcmFjdMOocmVzIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6ODY2Cittc2dpZCAiUmVzdCBvZiBMaW5lIgorbXNnc3RyICJSZXN0ZSBkZSBsYSBsaWduZSIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjE1NjIKK21zZ2lkICJSZXN0YXJ0IEJyYWlsbGUgRHJpdmVyIgorbXNnc3RyICJSZWTDqW1hcnJlIGxlIHBpbG90ZSBicmFpbGxlIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6MTU3NAorbXNnaWQgIlJlc3RhcnQgU2NyZWVuIERyaXZlciIKK21zZ3N0ciAiUmVkw6ltYXJyZSBsZSBwaWxvdGUgZGUgbCfDqWNyYW4iCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzoxNTY4Cittc2dpZCAiUmVzdGFydCBTcGVlY2ggRHJpdmVyIgorbXNnc3RyICJSZWTDqW1hcnJlIGxlIHBpbG90ZSBkZSBzeW50aMOoc2Ugdm9jYWxlIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgbmFtZSBvZiBNSURJIG11c2ljYWwgaW5zdHJ1bWVudCAjMTIwIChpbiB0aGUgUGVyY3Vzc2l2ZSBncm91cCkuCisjOiBQcm9ncmFtcy9taWRpLmM6NDUyCittc2dpZCAiUmV2ZXJzZSBDeW1iYWwiCittc2dzdHIgIkN5bWJhbGVzIHJlbnZlcnPDqWVzIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6MTM0MgorbXNnaWQgIlJpZ2h0IgorbXNnc3RyICJEcm9pdGUiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBuYW1lIG9mIE1JREkgbXVzaWNhbCBpbnN0cnVtZW50ICMxOSAoaW4gdGhlIE9yZ2FuIGdyb3VwKS4KKyM6IFByb2dyYW1zL21pZGkuYzoxMzYKK21zZ2lkICJSb2NrIE9yZ2FuIgorbXNnc3RyICJPcmd1ZSBkZSByb2NrIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6Njc0Cittc2dpZCAiU2F2ZSBvbiBFeGl0IgorbXNnc3RyICJFbnJlZ2lzdHJlciBlbiBxdWl0dGFudCIKKworIy4gImNhcCIgaGVyZSwgdXNlZCBkdXJpbmcgc3BlZWNoIG91dHB1dCwgaXMgc2hvcnQgZm9yICJjYXBpdGFsIi4KKyMuIEl0IGlzIHNwb2tlbiBqdXN0IGJlZm9yZSBhbiB1cHBlcmNhc2UgbGV0dGVyLCBlLmcuICJjYXAgQSIuCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6MTIwOAorbXNnaWQgIlNheSBDYXAiCittc2dzdHIgIkRpcmUgbCfDqXRhdCBkdSB2ZXJyb3VpbGxhZ2UgbWFqdXNjdWxlIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6MTIzMgorbXNnaWQgIlNheSBMaW5lIE1vZGUiCittc2dzdHIgIk1vZGUgRGlyZSBsYSBsaWduZSIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjEyMTkKK21zZ2lkICJTYXkgU3BhY2UiCittc2dzdHIgIkRpcmUgbGVzIGVzcGFjZXMiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzo3ODAKK21zZ2lkICJTY3JlZW4gQ3Vyc29yIEJsaW5rIFBlcmlvZCIKK21zZ3N0ciAiUMOpcmlvZGUgZGUgQ2xpZ25vdHRlbWVudCBkdSBDdXJzZXVyIGRlIGwnw6ljcmFuIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6Nzg4Cittc2dpZCAiU2NyZWVuIEN1cnNvciBQZXJjZW50IFZpc2libGUiCittc2dzdHIgIlBvdXJjZW50YWdlIGRlIFZpc2liaWxpdMOpIGR1IEN1cnNldXIgZGUgbCfDqWNyYW4iCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzo3NjgKK21zZ2lkICJTY3JlZW4gQ3Vyc29yIFN0eWxlIgorbXNnc3RyICJBcHBhcmVuY2UgZHUgY3Vyc2V1ciBkZSBsJ8OpY3JhbiIKKworIzogUHJvZ3JhbXMvY29uZmlnLmM6MjQ1MworbXNnaWQgIlNjcmVlbiBEcml2ZXIiCittc2dzdHIgIlBpbG90ZSBkZSBsJ8OpY3JhbiIKKworIzogUHJvZ3JhbXMvbG9nLmM6MTYwCittc2dpZCAiU2NyZWVuIERyaXZlciBFdmVudHMiCittc2dzdHIgIsOJdsOpbmVtZW50cyBkdSBwaWxvdGUgZGUgbCfDqWNyYW4iCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzo1NTAKK21zZ2lkICJTY3JlZW4gTnVtYmVyIgorbXNnc3RyICJOdW3DqXJvIGRlIGwnw6ljcmFuIgorCisjOiBQcm9ncmFtcy9jb25maWcuYzoyNDU5Cittc2dpZCAiU2NyZWVuIFBhcmFtZXRlciIKK21zZ3N0ciAiUGFyYW3DqHRyZSBkZSBsJ8OpY3JhbiIKKworIzogUHJvZ3JhbXMvY29uZmlnLmM6NjkzCisjLCBjLWZvcm1hdAorbXNnaWQgIlNjcmVlbiBkcml2ZXIgY29kZSAoJXMsICVzLCBvciBvbmUgb2YgeyVzfSkuIgorbXNnc3RyICJDb2RlIGR1IHBpbG90ZSBkZSBsJ8OpY3JhbiA6ICglcywgJXMsIG91IHVuIHBhcm1pIHslc30pLiIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjg5MQorbXNnaWQgIlNjcm9sbC1hd2FyZSBDdXJzb3IgTmF2aWdhdGlvbiIKK21zZ3N0ciAiTmF2aWdhdGlvbiBkdSBjdXJzZXVyIHNlbnNpYmxlIGF1IGTDqWZpbGVtZW50IgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgbmFtZSBvZiBNSURJIG11c2ljYWwgaW5zdHJ1bWVudCAjMTIzIChpbiB0aGUgU291bmQgRWZmZWN0cyBncm91cCkuCisjOiBQcm9ncmFtcy9taWRpLmM6NDYyCittc2dpZCAiU2Vhc2hvcmUiCittc2dzdHIgIkJvcmQgZGUgbWVyIgorCisjOiBQcm9ncmFtcy9sb2cuYzoxMzAKK21zZ2lkICJTZXJpYWwgSS9PIgorbXNnc3RyICJFL1Mgc8OpcmllIgorCisjOiBQcm9ncmFtcy9sb2cuYzoxMjQKK21zZ2lkICJTZXJ2ZXIgRXZlbnRzIgorbXNnc3RyICLDiXbDqW5lbWVudHMgZHUgc2VydmV1ciIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIG5hbWUgb2YgTUlESSBtdXNpY2FsIGluc3RydW1lbnQgIzc4IChpbiB0aGUgUGlwZSBncm91cCkuCisjOiBQcm9ncmFtcy9taWRpLmM6MzIwCittc2dpZCAiU2hha3VoYWNoaSIKK21zZ3N0ciAiU2hha3VoYWNoaSIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIG5hbWUgb2YgTUlESSBtdXNpY2FsIGluc3RydW1lbnQgIzEwNyAoaW4gdGhlIEV0aG5pYyBncm91cCkuCisjOiBQcm9ncmFtcy9taWRpLmM6NDEyCittc2dpZCAiU2hhbWlzZW4iCittc2dzdHIgIlNoYW1pc2VuIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgbmFtZSBvZiBNSURJIG11c2ljYWwgaW5zdHJ1bWVudCAjMTEyIChpbiB0aGUgRXRobmljIGdyb3VwKS4KKyM6IFByb2dyYW1zL21pZGkuYzo0MjcKK21zZ2lkICJTaGFuYWkiCittc2dzdHIgIlNoYW5haSIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjY4NworbXNnaWQgIlNob3cgQWR2YW5jZWQgU3VibWVudXMiCittc2dzdHIgIkFmZmljaGVyIGxlcyBzb3VzLW1lbnVzIGF2YW5jw6lzIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6NjkyCittc2dpZCAiU2hvdyBBbGwgSXRlbXMiCittc2dzdHIgIkFmZmljaGVyIHRvdXMgbGVzIMOpbMOpbWVudHMiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzo3OTYKK21zZ2lkICJTaG93IEF0dHJpYnV0ZXMiCittc2dzdHIgIkFmZmljaGVyIGxlcyBhdHRyaWJ1dHMiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzo3NjMKK21zZ2lkICJTaG93IFNjcmVlbiBDdXJzb3IiCittc2dzdHIgIkFmZmljaGVyIGxlIGN1cnNldXIgZGUgbCfDqWNyYW4iCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzoxMjk1Cittc2dpZCAiU2hvdyBTZWNvbmRzIgorbXNnc3RyICJBZmZpY2hlciBsZXMgc2Vjb25kZXMiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzoxMjM3Cittc2dpZCAiU2hvdyBTcGVlY2ggQ3Vyc29yIgorbXNnc3RyICJBZmZpY2hlciBsZSBjdXJzZXVyIGRlIGxhIHN5bnRow6hzZSIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjY4MgorbXNnaWQgIlNob3cgU3VibWVudSBTaXplcyIKK21zZ3N0ciAiQWZmaWNoZXIgbGEgdGFpbGxlIGRlcyBzb3VzLW1lbnVzIgorCisjLiBFdGhuaWMgSW5zdHJ1bWVudHMKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBuYW1lIG9mIE1JREkgbXVzaWNhbCBpbnN0cnVtZW50ICMxMDUgKGluIHRoZSBFdGhuaWMgZ3JvdXApLgorIzogUHJvZ3JhbXMvbWlkaS5jOjQwNgorbXNnaWQgIlNpdGFyIgorbXNnc3RyICJDaXRoYXJlIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6ODU4Cittc2dpZCAiU2tpcCBCbGFuayBCcmFpbGxlIFdpbmRvd3MiCittc2dzdHIgIlBhc3NlciBsZXMgZmVuw6p0cmVzIGJyYWlsbGUgdmllcmdlcyIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjg1MgorbXNnaWQgIlNraXAgSWRlbnRpY2FsIExpbmVzIgorbXNnc3RyICJQYXNzZXIgbGVzIGxpZ25lcyBpZGVudGlxdWVzIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6ODY5Cittc2dpZCAiU2tpcCBXaGljaCBCbGFuayBCcmFpbGxlIFdpbmRvd3MiCittc2dzdHIgIlF1ZWxsZXMgZmVuw6p0cmVzIGJyYWlsbGUgdmllcmdlcyBzYXV0ZXIuIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgbmFtZSBvZiBNSURJIG11c2ljYWwgaW5zdHJ1bWVudCAjMzcgKGluIHRoZSBCYXNzIGdyb3VwKS4KKyM6IFByb2dyYW1zL21pZGkuYzoxOTIKK21zZ2lkICJTbGFwIEJhc3MgMSIKK21zZ3N0ciAiQmFzc2UgZnJhcHDDqWUgMSIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIG5hbWUgb2YgTUlESSBtdXNpY2FsIGluc3RydW1lbnQgIzM4IChpbiB0aGUgQmFzcyBncm91cCkuCisjOiBQcm9ncmFtcy9taWRpLmM6MTk1Cittc2dpZCAiU2xhcCBCYXNzIDIiCittc2dzdHIgIkJhc3NlIGZyYXBww6llIDIiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzoxMzI1Cittc2dpZCAiU2xhc2giCittc2dzdHIgIkJhcnJlIG9ibGlxdWUiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzo4NzQKK21zZ2lkICJTbGlkaW5nIEJyYWlsbGUgV2luZG93IgorbXNnc3RyICJGYWlyZSBkw6lmaWxlciBsYSBmZW7DqnRyZSIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjExOTMKK21zZ2lkICJTb21lIgorbXNnc3RyICJRdWVscXVlcyIKKworIy4gUmVlZAorIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIG5hbWUgb2YgTUlESSBtdXNpY2FsIGluc3RydW1lbnQgIzY1IChpbiB0aGUgUmVlZCBncm91cCkuCisjOiBQcm9ncmFtcy9taWRpLmM6MjgwCittc2dpZCAiU29wcmFubyBTYXhvcGhvbmUiCittc2dzdHIgIlNheG9waG9uZSBTb3ByYW5vIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgbmFtZSBvZiBNSURJIG11c2ljYWwgaW5zdHJ1bWVudCBncm91cCAjMTYuCisjOiBQcm9ncmFtcy9taWRpLmM6NzQKK21zZ2lkICJTb3VuZCBFZmZlY3RzIgorbXNnc3RyICJFZmZldHMgc29ub3JlIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6NTYxIFByb2dyYW1zL21lbnVfcHJlZnMuYzoxMzYxCittc2dpZCAiU3BhY2UiCittc2dzdHIgIkVzcGFjZSIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjExNTQKK21zZ2lkICJTcGVhayBDb21wbGV0ZWQgV29yZHMiCittc2dzdHIgIkRpcmUgbGVzIG1vdHMgY29tcGzDqXTDqXMiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzoxMTQyCittc2dpZCAiU3BlYWsgRGVsZXRlZCBDaGFyYWN0ZXJzIgorbXNnc3RyICJEaXJlIGxlcyBjYXJhY3TDqHJlcyBlZmZhY8OpcyIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjExMzYKK21zZ2lkICJTcGVhayBJbnNlcnRlZCBDaGFyYWN0ZXJzIgorbXNnc3RyICJEaXJlIGxlcyBjYXJhY3TDqHJlcyBpbnPDqXLDqXMiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzoxMTYwCittc2dpZCAiU3BlYWsgTGluZSBJbmRlbnQiCittc2dzdHIgIsOJbm9uY2VyIGwnaW5kZW50YXRpb24gZGUgbGEgbGlnbmUiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzoxMTQ4Cittc2dpZCAiU3BlYWsgUmVwbGFjZWQgQ2hhcmFjdGVycyIKK21zZ3N0ciAiRGlyZSBsZXMgY2FyYWN0w6hyZXMgcmVtcGxhY8OpcyIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjExMzAKK21zZ2lkICJTcGVhayBTZWxlY3RlZCBDaGFyYWN0ZXIiCittc2dzdHIgIkRpcmUgbGUgY2FyYWN0w6hyZSBzw6lsZWN0aW9ubsOpIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6MTEyNAorbXNnaWQgIlNwZWFrIFNlbGVjdGVkIExpbmUiCittc2dzdHIgIkxpcmUgbGEgbGlnbmUgc8OpbGVjdGlvbm7DqWUiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzoxMjU0Cittc2dpZCAiU3BlZWNoIEN1cnNvciBCbGluayBQZXJpb2QiCittc2dzdHIgIlDDqXJpb2RlIGRlIENsaWdub3R0ZW1lbnQgZHUgQ3Vyc2V1ciBWb2NhbCIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjEyNjIKK21zZ2lkICJTcGVlY2ggQ3Vyc29yIFBlcmNlbnQgVmlzaWJsZSIKK21zZ3N0ciAiUG91cmNlbnRhZ2UgZGUgVmlzaWJpbGl0w6kgZHUgQ3Vyc2V1ciBWb2NhbCIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjEyNDIKK21zZ2lkICJTcGVlY2ggQ3Vyc29yIFN0eWxlIgorbXNnc3RyICJBcHBhcmVuY2UgZHUgY3Vyc2V1ciBkZSBsYSBzeW50aMOoc2UiCisKKyM6IFByb2dyYW1zL2NvbmZpZy5jOjIyMjgKK21zZ2lkICJTcGVlY2ggRHJpdmVyIgorbXNnc3RyICJQaWxvdGUgZGUgc3ludGjDqHNlIHZvY2FsZSIKKworIzogUHJvZ3JhbXMvbG9nLmM6MTU0Cittc2dpZCAiU3BlZWNoIERyaXZlciBFdmVudHMiCittc2dzdHIgIsOJdsOpbmVtZW50cyBkdSBwaWxvdGUgZGUgc3ludGjDqHNlIHZvY2FsZSIKKworIzogUHJvZ3JhbXMvbG9nLmM6MTEyCittc2dpZCAiU3BlZWNoIEV2ZW50cyIKK21zZ3N0ciAiw4l2w6luZW1lbnRzIGxpw6lzIMOgIGxhIHBhcm9sZSIKKworIy4gQ3JlYXRlIHRoZSBmaWxlIHN5c3RlbSBvYmplY3QgZm9yIHNwZWVjaCBpbnB1dC4KKyM6IFByb2dyYW1zL2NvbmZpZy5jOjMwMjMKK21zZ2lkICJTcGVlY2ggSW5wdXQiCittc2dzdHIgIkVudHLDqWUgZGUgbGEgcGFyb2xlIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6MTE2NworbXNnaWQgIlNwZWVjaCBPcHRpb25zIgorbXNnc3RyICJPcHRpb25zIGRlIGxhIHN5bnRow6hzZSIKKworIzogUHJvZ3JhbXMvY29uZmlnLmM6MjIzMQorbXNnaWQgIlNwZWVjaCBQYXJhbWV0ZXIiCittc2dzdHIgIlBhcmFtw6h0cmUgZGUgc3ludGjDqHNlIHZvY2FsZSIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjExODQKK21zZ2lkICJTcGVlY2ggUGl0Y2giCittc2dzdHIgIlRvbiBkZSBsYSB2b2l4IgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6MTE5NworbXNnaWQgIlNwZWVjaCBQdW5jdHVhdGlvbiIKK21zZ3N0ciAiUG9uY3R1YXRpb24gcG91ciBsYSBzeW50aMOoc2UiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzoxMTc3Cittc2dpZCAiU3BlZWNoIFJhdGUiCittc2dzdHIgIlZpdGVzc2UgZGUgbGEgc3ludGjDqHNlIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6MTIxMgorbXNnaWQgIlNwZWVjaCBVcHBlcmNhc2UgSW5kaWNhdG9yIgorbXNnc3RyICJJbmRpY2F0ZXVyIHZvY2FsIGRlIG1hanVzY3VsZXMiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzoxMTcwCittc2dpZCAiU3BlZWNoIFZvbHVtZSIKK21zZ3N0ciAiVm9sdW1lIGRlIGxhIHN5bnRow6hzZSIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjEyMjIKK21zZ2lkICJTcGVlY2ggV2hpdGVzcGFjZSBJbmRpY2F0b3IiCittc2dzdHIgIkluZGljYXRldXIgdm9jYWwgZCdlc3BhY2UgaW5zw6ljYWJsZSIKKworIzogUHJvZ3JhbXMvY29uZmlnLmM6NjUwCisjLCBjLWZvcm1hdAorbXNnaWQgIlNwZWVjaCBkcml2ZXIgY29kZSAoJXMsICVzLCBvciBvbmUgb2YgeyVzfSkuIgorbXNnc3RyICJDb2RlIGR1IHBpbG90ZSBkZSBzeW50aMOoc2UgOiAoJXMsICVzLCBvdSB1biBwYXJtaSB7JXN9KS4iCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzoxNTA5Cittc2dpZCAiU3RhbmRhcmQgRXJyb3IgTG9nIExldmVsIgorbXNnc3RyICJOaXZlYXUgc3RhbmRhcmQgZGUgam91cm5hbGlzYXRpb24gZGVzIGVycmV1cnMiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzo5MjYKK21zZ2lkICJTdGFydCBTZWxlY3Rpb24gd2l0aCBSb3V0aW5nIEtleSIKK21zZ3N0ciAiQ29tbWVuY2UgbGEgc8OpbGVjdGlvbiBhdmVjIHRvdWNoZSBkZSByb3V0YWdlIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6NTUxCittc2dpZCAiU3RhdGUgRG90cyIKK21zZ3N0ciAiUG9pbnRzIGQnw6l0YXQiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzo1NTIKK21zZ2lkICJTdGF0ZSBMZXR0ZXIiCittc2dzdHIgIkxldHRyZSBkJ8OpdGF0IgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6MTMzNgorbXNnaWQgIlN0YXR1cyBDZWxscyIKK21zZ3N0ciAiQ2VsbHVsZXMgZCfDqXRhdCIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjEzNTIKK21zZ2lkICJTdGF0dXMgQ291bnQiCittc2dzdHIgIk5vbWJyZSBkJ8OpdGF0cyIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjU2NQorbXNnaWQgIlN0YXR1cyBGaWVsZCIKK21zZ3N0ciAiQ2hhbXAgZGUgbCfDqXRhdCIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjEzNDUKK21zZ2lkICJTdGF0dXMgUG9zaXRpb24iCittc2dzdHIgIlBvc2l0aW9uIGRlIGwnw6l0YXQiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzoxMzY3Cittc2dpZCAiU3RhdHVzIFNlcGFyYXRvciIKK21zZ3N0ciAiU8OpcGFyYXRldXIgZGUgbCfDqXRhdCIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjEzNjMKK21zZ2lkICJTdGF0dXMgU2lkZSIKK21zZ3N0ciAiTGltaXRlIGRlIGwnw6l0YXQiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBuYW1lIG9mIE1JREkgbXVzaWNhbCBpbnN0cnVtZW50ICMxMTUgKGluIHRoZSBQZXJjdXNzaXZlIGdyb3VwKS4KKyM6IFByb2dyYW1zL21pZGkuYzo0MzcKK21zZ2lkICJTdGVlbCBEcnVtcyIKK21zZ3N0ciAiQmF0dGVyaWUgbcOpdGFsIgorCisjOiBQcm9ncmFtcy9jb25maWcuYzo0NTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3RvcCBhbiBleGlzdGluZyBpbnN0YW5jZSBvZiAlcywgYW5kIHRoZW4gZXhpdC4iCittc2dzdHIgIkFycsOqdGVyIHVuZSBzZXNzaW9uIGRlICVzIGVuIGNvdXJzIGV0IHF1aXR0ZXIuIgorCisjLiBFbnNlbWJsZQorIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIG5hbWUgb2YgTUlESSBtdXNpY2FsIGluc3RydW1lbnQgIzQ5IChpbiB0aGUgRW5zZW1ibGUgZ3JvdXApLgorIzogUHJvZ3JhbXMvbWlkaS5jOjIzMAorbXNnaWQgIlN0cmluZyBFbnNlbWJsZSAxIgorbXNnc3RyICJFbnNlbWJsZSBkZSBjb3JkZXMgMSIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIG5hbWUgb2YgTUlESSBtdXNpY2FsIGluc3RydW1lbnQgIzUwIChpbiB0aGUgRW5zZW1ibGUgZ3JvdXApLgorIzogUHJvZ3JhbXMvbWlkaS5jOjIzMworbXNnaWQgIlN0cmluZyBFbnNlbWJsZSAyIgorbXNnc3RyICJFbnNlbWJsZSBkZSBjb3JkZXMgMiIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIG5hbWUgb2YgTUlESSBtdXNpY2FsIGluc3RydW1lbnQgZ3JvdXAgIzYuCisjOiBQcm9ncmFtcy9taWRpLmM6NDAKK21zZ2lkICJTdHJpbmdzIgorbXNnc3RyICJDb3JkZXMiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzo3MjIKK21zZ2lkICJTdXBlcmltcG9zZSBEb3QgNyIKK21zZ3N0ciAiUG9pbnQgNyBzdXBlcnBvc8OpIgorCisjOiBQcm9ncmFtcy9jb25maWcuYzo3NDQKK21zZ2lkICJTdXBwcmVzcyBzdGFydC11cCBtZXNzYWdlcy4iCittc2dzdHIgIlN1cHByaW1lIGxlcyBtZXNzYWdlcyBhdSBkw6ltYXJyYWdlLiIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIG5hbWUgb2YgTUlESSBtdXNpY2FsIGluc3RydW1lbnQgIzM5IChpbiB0aGUgQmFzcyBncm91cCkuCisjOiBQcm9ncmFtcy9taWRpLmM6MTk4Cittc2dpZCAiU3ludGggQmFzcyAxIgorbXNnc3RyICJCYXNzZSBzeW50aMOpdGlxdWUgMSIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIG5hbWUgb2YgTUlESSBtdXNpY2FsIGluc3RydW1lbnQgIzQwIChpbiB0aGUgQmFzcyBncm91cCkuCisjOiBQcm9ncmFtcy9taWRpLmM6MjAxCittc2dpZCAiU3ludGggQmFzcyAyIgorbXNnc3RyICJCYXNzZSBzeW50aMOpdGlxdWUgMiIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIG5hbWUgb2YgTUlESSBtdXNpY2FsIGluc3RydW1lbnQgIzExOSAoaW4gdGhlIFBlcmN1c3NpdmUgZ3JvdXApLgorIzogUHJvZ3JhbXMvbWlkaS5jOjQ0OQorbXNnaWQgIlN5bnRoIERydW0iCittc2dzdHIgIkJhdHRlcmllIHN5bnRow6l0aXF1ZSIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIG5hbWUgb2YgTUlESSBtdXNpY2FsIGluc3RydW1lbnQgZ3JvdXAgIzEzLgorIy4geGdldHRleHQ6IChzeW50aCBpcyBhIGNvbW1vbiBzaG9ydCBmb3JtIGZvciBzeW50aGVzaXplcikKKyMuIHhnZXR0ZXh0OiAoRk0gaXMgdGhlIGFjcm9ueW0gZm9yIEZyZXF1ZW5jeSBNb2R1bGF0aW9uKQorIzogUHJvZ3JhbXMvbWlkaS5jOjY1Cittc2dpZCAiU3ludGggRk0iCittc2dzdHIgIkZNIHN5bnRow6l0aXF1ZSIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIG5hbWUgb2YgTUlESSBtdXNpY2FsIGluc3RydW1lbnQgZ3JvdXAgIzExLgorIy4geGdldHRleHQ6IChzeW50aCBpcyBhIGNvbW1vbiBzaG9ydCBmb3JtIGZvciBzeW50aGVzaXplcikKKyM6IFByb2dyYW1zL21pZGkuYzo1NgorbXNnaWQgIlN5bnRoIExlYWQiCittc2dzdHIgIlBvc2l0aW9uIHN5bnRow6kiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBuYW1lIG9mIE1JREkgbXVzaWNhbCBpbnN0cnVtZW50IGdyb3VwICMxMi4KKyMuIHhnZXR0ZXh0OiAoc3ludGggaXMgYSBjb21tb24gc2hvcnQgZm9ybSBmb3Igc3ludGhlc2l6ZXIpCisjOiBQcm9ncmFtcy9taWRpLmM6NjAKK21zZ2lkICJTeW50aCBQYWQiCittc2dzdHIgIkJsb2Mgc3ludGjDqSIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIG5hbWUgb2YgTUlESSBtdXNpY2FsIGluc3RydW1lbnQgIzU1IChpbiB0aGUgRW5zZW1ibGUgZ3JvdXApLgorIzogUHJvZ3JhbXMvbWlkaS5jOjI0OAorbXNnaWQgIlN5bnRoIFZvaWNlIgorbXNnc3RyICJWb2l4IHN5bnRow6l0aXF1ZSIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIG5hbWUgb2YgTUlESSBtdXNpY2FsIGluc3RydW1lbnQgIzYzIChpbiB0aGUgQnJhc3MgZ3JvdXApLgorIzogUHJvZ3JhbXMvbWlkaS5jOjI3MworbXNnaWQgIlN5bnRoQnJhc3MgMSIKK21zZ3N0ciAiQ3VpdnJlIHN5bnRow6l0aXF1ZSAxIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgbmFtZSBvZiBNSURJIG11c2ljYWwgaW5zdHJ1bWVudCAjNjQgKGluIHRoZSBCcmFzcyBncm91cCkuCisjOiBQcm9ncmFtcy9taWRpLmM6Mjc2Cittc2dpZCAiU3ludGhCcmFzcyAyIgorbXNnc3RyICJDdWl2cmUgc3ludGjDqXRpcXVlIDIiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBuYW1lIG9mIE1JREkgbXVzaWNhbCBpbnN0cnVtZW50ICM1MSAoaW4gdGhlIEVuc2VtYmxlIGdyb3VwKS4KKyM6IFByb2dyYW1zL21pZGkuYzoyMzYKK21zZ2lkICJTeW50aFN0cmluZ3MgMSIKK21zZ3N0ciAiQ29yZGVzIHN5bnRow6l0aXF1ZXMgMSIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIG5hbWUgb2YgTUlESSBtdXNpY2FsIGluc3RydW1lbnQgIzUyIChpbiB0aGUgRW5zZW1ibGUgZ3JvdXApLgorIzogUHJvZ3JhbXMvbWlkaS5jOjIzOQorbXNnaWQgIlN5bnRoU3RyaW5ncyAyIgorbXNnc3RyICJDb3JkZXMgc3ludGjDqXRpcXVlcyAyIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6MTUwNAorbXNnaWQgIlN5c3RlbSBMb2cgTGV2ZWwiCittc2dzdHIgIk5pdmVhdSBkZSBqb3VybmFsaXNhdGlvbiBkdSBzeXN0w6htZSIKKworIzogUHJvZ3JhbXMvY29uZmlnLmM6Mjk3NyBQcm9ncmFtcy9tZW51X3ByZWZzLmM6MTQ3OAorbXNnaWQgIlRhYmxlcyBEaXJlY3RvcnkiCittc2dzdHIgIlLDqXBlcnRvaXJlIGRlcyB0YWJsZXMiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBuYW1lIG9mIE1JREkgbXVzaWNhbCBpbnN0cnVtZW50ICMxMTcgKGluIHRoZSBQZXJjdXNzaXZlIGdyb3VwKS4KKyM6IFByb2dyYW1zL21pZGkuYzo0NDMKK21zZ2lkICJUYWlrbyBEcnVtIgorbXNnc3RyICJCYXR0ZXJpZSBUYWlrbyIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIG5hbWUgb2YgTUlESSBtdXNpY2FsIGluc3RydW1lbnQgIzI0IChpbiB0aGUgT3JnYW4gZ3JvdXApLgorIzogUHJvZ3JhbXMvbWlkaS5jOjE1MQorbXNnaWQgIlRhbmdvIEFjY29yZGlvbiIKK21zZ3N0ciAiQWNjb3Jkw6lvbiB0YW5nbyIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIG5hbWUgb2YgTUlESSBtdXNpY2FsIGluc3RydW1lbnQgIzEyNSAoaW4gdGhlIFNvdW5kIEVmZmVjdHMgZ3JvdXApLgorIzogUHJvZ3JhbXMvbWlkaS5jOjQ2OAorbXNnaWQgIlRlbGVwaG9uZSBSaW5nIgorbXNnc3RyICJTb25uZXJpZSBkZSB0w6lsw6lwaG9uZSIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIG5hbWUgb2YgTUlESSBtdXNpY2FsIGluc3RydW1lbnQgIzY3IChpbiB0aGUgUmVlZCBncm91cCkuCisjOiBQcm9ncmFtcy9taWRpLmM6Mjg2Cittc2dpZCAiVGVub3IgU2F4b3Bob25lIgorbXNnc3RyICJTYXhvcGhvbmUgVMOpbm9yIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6NzYwCittc2dpZCAiVGV4dCBJbmRpY2F0b3JzIgorbXNnc3RyICJJbmRpY2F0ZXVycyBkZSB0ZXh0ZSIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjEzNjQKK21zZ2lkICJUZXh0IFNpZGUiCittc2dzdHIgIkxpbWl0ZSBkdSB0ZXh0ZSIKKworIzogUHJvZ3JhbXMvY29uZmlnLmM6MTAwMyBQcm9ncmFtcy9tZW51X3ByZWZzLmM6MTM5MgorbXNnaWQgIlRleHQgVGFibGUiCittc2dzdHIgIlRhYmxlIGRlIHRleHRlIgorCisjOiBQcm9ncmFtcy9icmx0dHktY3RiLmM6NjkKK21zZ2lkICJUZXh0IHRhYmxlLiIKK21zZ3N0ciAiVGFibGUgZGUgY2FyYWN0w6hyZXMuIgorCisjOiBQcm9ncmFtcy9jb25maWcuYzozODEKK21zZ2lkICJUaGUgdGV4dCB0byBiZSBzaG93biB3aGVuIHRoZSBicmFpbGxlIGRyaXZlciBzdGFydHMgYW5kIHRvIGJlIHNwb2tlbiB3aGVuIHRoZSBzcGVlY2ggZHJpdmVyIHN0YXJ0cy4iCittc2dzdHIgIlRleHRlIMOgIGFmZmljaGVyIGF1IGTDqW1hcnJhZ2UgZHUgcGlsb3RlIGJyYWlsbGUgb3Ugw6AgZGlyZSBxdWFuZCBsZSBwaWxvdGUgZGUgc3ludGjDqHNlIHZvY2FsIHNlIGxhbmNlLiIKKworIzogUHJvZ3JhbXMvY29uZmlnLmM6Mzg4Cittc2dpZCAiVGhlIHRleHQgdG8gYmUgc2hvd24gd2hlbiB0aGUgYnJhaWxsZSBkcml2ZXIgc3RvcHMuIgorbXNnc3RyICJUZXh0ZSDDoCBhZmZpY2hlciBxdWFuZCBsZSBwaWxvdGUgYnJhaWxsZSBzJ2FycsOqdGUuIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6NTUzCittc2dpZCAiVGltZSIKK21zZ3N0ciAiSGV1cmUiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzoxMjgwCittc2dpZCAiVGltZSBGb3JtYXQiCittc2dzdHIgIkZvcm1hdCBkZSBsJ2hldXJlIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6MTI3MgorbXNnaWQgIlRpbWUgUHJlc2VudGF0aW9uIgorbXNnc3RyICJQcsOpc2VudGF0aW9uIGRlIGwnaGV1cmUiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzoxMjkwCittc2dpZCAiVGltZSBTZXBhcmF0b3IiCittc2dzdHIgIlPDqXBhcmF0ZXVyIGRlIGwnaGV1cmUiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBuYW1lIG9mIE1JREkgbXVzaWNhbCBpbnN0cnVtZW50ICM0OCAoaW4gdGhlIFN0cmluZ3MgZ3JvdXApLgorIzogUHJvZ3JhbXMvbWlkaS5jOjIyNgorbXNnaWQgIlRpbXBhbmkiCittc2dzdHIgIlRpbWJhbGVzIgorCisjLiBQZXJjdXNzaXZlIEluc3RydW1lbnRzCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgbmFtZSBvZiBNSURJIG11c2ljYWwgaW5zdHJ1bWVudCAjMTEzIChpbiB0aGUgUGVyY3Vzc2l2ZSBncm91cCkuCisjOiBQcm9ncmFtcy9taWRpLmM6NDMxCittc2dpZCAiVGlua2xlIEJlbGwiCittc2dzdHIgIlRpbnRlbWVudCBkZSBjbG9jaGVzIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6MTU1OAorbXNnaWQgIlRvb2xzIgorbXNnc3RyICJPdXRpbHMiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzoxMDAzCittc2dpZCAiVG91Y2ggTmF2aWdhdGlvbiIKK21zZ3N0ciAiTmF2aWdhdGlvbiB0YWN0aWxlIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6MTAxNworbXNnaWQgIlRvdWNoIFNlbnNpdGl2aXR5IgorbXNnc3RyICJTZW5zaWJpbGl0w6kgZHUgdGFjdGlsZSIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjkxNQorbXNnaWQgIlRyYWNrIFNjcmVlbiBQb2ludGVyIgorbXNnc3RyICJQb3Vyc3VpdnJlIGxlIHBvaW50ZXVyIGRlIGwnw6ljcmFuIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6OTA5Cittc2dpZCAiVHJhY2sgU2NyZWVuIFNjcm9sbCIKK21zZ3N0ciAiU3VpdnJlIGxlIGTDqWZpbGVtZW50IGRlIGwnw6ljcmFuIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6OTQxCittc2dpZCAiVHJhbnNsYXRlZCB2aWEgVGV4dCBUYWJsZSIKK21zZ3N0ciAiVHJhZHVpdCB2aWEgbGEgdGFibGUgZGUgY2FyYWN0w6hyZXMiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBuYW1lIG9mIE1JREkgbXVzaWNhbCBpbnN0cnVtZW50ICM0NSAoaW4gdGhlIFN0cmluZ3MgZ3JvdXApLgorIzogUHJvZ3JhbXMvbWlkaS5jOjIxNworbXNnaWQgIlRyZW1vbG8gU3RyaW5ncyIKK21zZ3N0ciAiQ29yZGVzIGF2ZWMgdHJlbW9sbyIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIG5hbWUgb2YgTUlESSBtdXNpY2FsIGluc3RydW1lbnQgIzU4IChpbiB0aGUgQnJhc3MgZ3JvdXApLgorIzogUHJvZ3JhbXMvbWlkaS5jOjI1OAorbXNnaWQgIlRyb21ib25lIgorbXNnc3RyICJUcm9tYm9uZSIKKworIy4gQnJhc3MKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBuYW1lIG9mIE1JREkgbXVzaWNhbCBpbnN0cnVtZW50ICM1NyAoaW4gdGhlIEJyYXNzIGdyb3VwKS4KKyM6IFByb2dyYW1zL21pZGkuYzoyNTUKK21zZ2lkICJUcnVtcGV0IgorbXNnc3RyICJUcm9tcGV0dGUiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBuYW1lIG9mIE1JREkgbXVzaWNhbCBpbnN0cnVtZW50ICM1OSAoaW4gdGhlIEJyYXNzIGdyb3VwKS4KKyM6IFByb2dyYW1zL21pZGkuYzoyNjEKK21zZ2lkICJUdWJhIgorbXNnc3RyICJUdWJhIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgbmFtZSBvZiBNSURJIG11c2ljYWwgaW5zdHJ1bWVudCAjMTUgKGluIHRoZSBDaHJvbWF0aWMgUGVyY3Vzc2lvbiBncm91cCkuCisjOiBQcm9ncmFtcy9taWRpLmM6MTIzCittc2dpZCAiVHVidWxhciBCZWxscyIKK21zZ3N0ciAiQ2xvY2hlcyB0dWJ1bGFpcmVzIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6MTA2MgorbXNnaWQgIlR1bmUgRGV2aWNlIgorbXNnc3RyICJQw6lyaXBow6lyaXF1ZSBwb3VyIGxlcyBzb25zIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6OTQ1Cittc2dpZCAiVHlwaW5nIE1vZGUiCittc2dzdHIgIk1vZGUgZGUgc2Fpc2llIgorCisjOiBQcm9ncmFtcy9sb2cuYzoxMzYKK21zZ2lkICJVU0IgSS9PIgorbXNnc3RyICJFL1MgVVNCIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6NjY0Cittc2dpZCAiVW5kZXJsaW5lIgorbXNnc3RyICJTb3VsaWduw6kiCisKKyM6IFByb2dyYW1zL2FsZXJ0LmM6MTAyCittc2dpZCAiVW5mcm96ZW4iCittc2dzdHIgIkTDqWdlbMOpIgorCisjOiBQcm9ncmFtcy9jb25maWcuYzoyOTc0IFByb2dyYW1zL21lbnVfcHJlZnMuYzoxNDU4Cittc2dpZCAiVXBkYXRhYmxlIERpcmVjdG9yeSIKK21zZ3N0ciAiUsOpcGVydG9pcmUgcXUnb24gcGV1dCBtZXR0cmUgw6Agam91ciIKKworIzogUHJvZ3JhbXMvbG9nLmM6MTA2Cittc2dpZCAiVXBkYXRlIEV2ZW50cyIKK21zZ3N0ciAiw4l2w6luZW1lbnRzIGRlIG1pc2Ugw6Agam91ciIKKworIzogUHJvZ3JhbXMvb3B0aW9ucy5jOjE5NworbXNnaWQgIlVzYWdlIgorbXNnc3RyICJVdGlsaXNhdGlvbiIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjcyMQorbXNnaWQgIlVzZSBDYXBpdGFsIFNpZ24iCittc2dzdHIgIlV0aWxpc2F0aW9uIGR1IHNpZ25lIG1hanVzY3VsZSIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIG5hbWUgb2YgTUlESSBtdXNpY2FsIGluc3RydW1lbnQgIzEyIChpbiB0aGUgQ2hyb21hdGljIFBlcmN1c3Npb24gZ3JvdXApLgorIzogUHJvZ3JhbXMvbWlkaS5jOjExNAorbXNnaWQgIlZpYnJhcGhvbmUiCittc2dzdHIgIlZpYnJhcGhvbmUiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBuYW1lIG9mIE1JREkgbXVzaWNhbCBpbnN0cnVtZW50ICM0MiAoaW4gdGhlIFN0cmluZ3MgZ3JvdXApLgorIzogUHJvZ3JhbXMvbWlkaS5jOjIwOAorbXNnaWQgIlZpb2xhIgorbXNnc3RyICJBbHRvIgorCisjLiBTdHJpbmdzCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgbmFtZSBvZiBNSURJIG11c2ljYWwgaW5zdHJ1bWVudCAjNDEgKGluIHRoZSBTdHJpbmdzIGdyb3VwKS4KKyM6IFByb2dyYW1zL21pZGkuYzoyMDUKK21zZ2lkICJWaW9saW4iCittc2dzdHIgIlZpb2xvbiIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIG5hbWUgb2YgTUlESSBtdXNpY2FsIGluc3RydW1lbnQgIzU0IChpbiB0aGUgRW5zZW1ibGUgZ3JvdXApLgorIzogUHJvZ3JhbXMvbWlkaS5jOjI0NQorbXNnaWQgIlZvaWNlIE9vaHMiCittc2dzdHIgIkhvb3Mgdm9jYXV4IgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6MTQ5NAorbXNnaWQgIldhcm5pbmciCittc2dzdHIgIkF0dGVudGlvbiIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjE0MzgKK21zZ2lkICJXZWIgU2l0ZSIKK21zZ3N0ciAiU2l0ZSDDlmViIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgbmFtZSBvZiBNSURJIG11c2ljYWwgaW5zdHJ1bWVudCAjNzkgKGluIHRoZSBQaXBlIGdyb3VwKS4KKyM6IFByb2dyYW1zL21pZGkuYzozMjMKK21zZ2lkICJXaGlzdGxlIgorbXNnc3RyICJzaWZmbGV0IgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6NTQzCittc2dpZCAiV2luZG93IENvbHVtbiIKK21zZ3N0ciAiQ29sb25uZSBkZSBsYSBGZW7DqnRyZSIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjU0MiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6NTU4Cittc2dpZCAiV2luZG93IENvb3JkaW5hdGVzIgorbXNnc3RyICJDb29yZG9ubsOpZXMgZGUgbGEgRmVuw6p0cmUiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzo1NDQKK21zZ2lkICJXaW5kb3cgUm93IgorbXNnc3RyICJMaWduZSBkZSBsYSBGZW7DqnRyZSIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIG5hbWUgb2YgTUlESSBtdXNpY2FsIGluc3RydW1lbnQgIzExNiAoaW4gdGhlIFBlcmN1c3NpdmUgZ3JvdXApLgorIzogUHJvZ3JhbXMvbWlkaS5jOjQ0MAorbXNnaWQgIldvb2RibG9jayIKK21zZ3N0ciAiYmxvYyBkZSBib2lwIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6ODQ4Cittc2dpZCAiV29yZCBXcmFwIgorbXNnc3RyICJDw6lzdXJlIHBhciBtb3QiCisKKyM6IFByb2dyYW1zL2NvbmZpZy5jOjI5NDgKK21zZ2lkICJXb3JraW5nIERpcmVjdG9yeSIKK21zZ3N0ciAiUsOpcGVydG9pcmUgZGUgdHJhdmFpbCIKKworIzogUHJvZ3JhbXMvY29uZmlnLmM6Mjk3NSBQcm9ncmFtcy9tZW51X3ByZWZzLmM6MTQ2OAorbXNnaWQgIldyaXRhYmxlIERpcmVjdG9yeSIKK21zZ3N0ciAiUsOpcGVydG9pcmUgYWNjZXNzaWJsZSBlbiDDqWNyaXR1cmUiCisKKyM6IFByb2dyYW1zL3hicmxhcGkuYzoxMTgKK21zZ2lkICJXcml0ZSBkZWJ1Z2dpbmcgb3V0cHV0IHRvIHN0ZG91dCIKK21zZ3N0ciAiw4ljcmlyZSBzb3J0aWUgZGUgZMOpYm9nYWdlIHN1ciBzdGRvdXQiCisKKyM6IFByb2dyYW1zL2NvbmZpZy5jOjc2NworbXNnaWQgIldyaXRlIHRoZSBzdGFydC11cCBsb2dzLCBhbmQgdGhlbiBleGl0LiIKK21zZ3N0ciAiw4ljcml0IGxlcyBqb3VybmF1eCBkZSBkw6ltYXJyYWdlIGV0IHF1aXR0ZS4iCisKKyM6IFByb2dyYW1zL3hicmxhcGkuYzoxMDAKK21zZ2lkICJYIGRpc3BsYXkgdG8gY29ubmVjdCB0byIKK21zZ3N0ciAiQWZmaWNoZXVyIFggYXVxdWVsIHNlIGNvbm5lY3RlciIKKworIzogUHJvZ3JhbXMvcGdtcHJpdnNfbGludXguYzoxOTUxCittc2dpZCAiWERHIHJ1bnRpbWUgZGlyZWN0b3J5IGFjY2VzcyBwcm9ibGVtIgorbXNnc3RyICJwcm9ibMOobWUgZCdhY2PDqHMgYXUgcsOpcGVydG9pcmUgWERHIHV0aWxpc8OpIGxvcnMgZGUgbCdleMOpY3V0aW9uIgorCisjOiBQcm9ncmFtcy9wZ21wcml2c19saW51eC5jOjE5MzMKK21zZ2lkICJYREcgcnVudGltZSBkaXJlY3RvcnkgY3JlYXRlZCIKK21zZ3N0ciAiUsOpcGVydG9pcmUgWERHIHV0aWxpc8OpIGxvcnMgZGUgbCdleMOpY3V0aW9uIGNyw6nDqSIKKworIzogUHJvZ3JhbXMvcGdtcHJpdnNfbGludXguYzoxOTI4Cittc2dpZCAiWERHIHJ1bnRpbWUgZGlyZWN0b3J5IGV4aXN0cyIKK21zZ3N0ciAiTGUgcsOpcGVydG9pcmUgWERHIHV0aWxpc8OpIGxvcnMgZGUgbCdleMOpY3V0aW9uIGV4aXN0ZSIKKworIzogUHJvZ3JhbXMveGJybGFwaS5jOjc4NgorbXNnaWQgIlhGcmVlKHdtX25hbWUpIGZvciBjaGFuZ2UiCittc2dzdHIgIlhGcmVlKHdtX25hbWUpIHBvdXIgY2hhbmdlciIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBQQVNTWFQgY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjE0NzkKK21zZ2lkICJYVCAoc2V0IDEpIGtleWJvYXJkIHNjYW4gY29kZSIKK21zZ3N0ciAiU2NhbmNvZGUgZGUgY2xhdmllciBYVCAoc2V0IDEpIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgbmFtZSBvZiBNSURJIG11c2ljYWwgaW5zdHJ1bWVudCAjMTQgKGluIHRoZSBDaHJvbWF0aWMgUGVyY3Vzc2lvbiBncm91cCkuCisjOiBQcm9ncmFtcy9taWRpLmM6MTIwCittc2dpZCAiWHlsb3Bob25lIgorbXNnc3RyICJYeWxvcGhvbmUiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzoxMzEyCittc2dpZCAiWWVhciBNb250aCBEYXkiCittc2dzdHIgIkFubsOpZSBNb2lzIEpvdXIiCisKKyM6IFByb2dyYW1zL21lbnUuYzo1MjQKK21zZ2lkICJZZXMiCittc2dzdHIgIk91aSIKKworIzogUHJvZ3JhbXMveGJybGFwaS5jOjg0Cittc2dpZCAiW2hvc3RdWzpwb3J0XSIKK21zZ3N0ciAiW2jDtHRlXVs6cG9ydF0iCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzo2NjUKK21zZ2lkICJhbGwgZG90cyIKK21zZ3N0ciAiVG91cyBsZXMgcG9pbnRzIgorCisjOiBQcm9ncmFtcy9jbWRfbWlzY2VsbGFuZW91cy5jOjEwNAorbXNnaWQgImFuZCIKK21zZ3N0ciAiZXQiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgQ0xJUF9BUFBFTkQgY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjEzNDYKK21zZ2lkICJhcHBlbmQgY2hhcmFjdGVycyB0byBjbGlwYm9hcmQiCittc2dzdHIgImVudm9pZSBkZXMgY2FyYWN0w6hyZXMgZGFucyBsZSBwcmVzc2UtcGFwaWVyIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIENMSVBfQUREIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDoxMjIzCittc2dpZCAiYXBwZW5kIHRvIGNsaXBib2FyZCBmcm9tIGNoYXJhY3RlciIKK21zZ3N0ciAiYWpvdXRlIGxlIGNhcmFjdMOocmUgYXUgcHJlc3NlLXBhcGllciIKKworIzogUHJvZ3JhbXMvY21kLmM6MjkwCittc2dpZCAiYXQgY3Vyc29yIgorbXNnc3RyICJhdSBjdXJzZXVyIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIEtFWV9CQUNLU1BBQ0UgY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjE1MjcKK21zZ2lkICJiYWNrc3BhY2Uga2V5IgorbXNnc3RyICJUb3VjaGUgcmV0b3VyIGFycmnDqHJlIgorCisjOiBEcml2ZXJzL0JyYWlsbGUvQmF1bS9icmFpbGxlLmM6MTE0OSBEcml2ZXJzL0JyYWlsbGUvVFNJL2JyYWlsbGUuYzo4NjkKK21zZ2lkICJiYXR0ZXJ5IGxvdyIKK21zZ3N0ciAiQmF0dGVyaWUgZmFpYmxlIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIFNFTEVDVFZUIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDoxNDM3Cittc2dpZCAiYmluZCB0byBzcGVjaWZpYyB2aXJ0dWFsIHRlcm1pbmFsIgorbXNnc3RyICJFbnZvaWUgZGFucyB1biB0ZXJtaW5hbCB2aXJ0dWVsIHBhcnRpY3VsaWVyIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIFNFTEVDVFZUX05FWFQgY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjk1NworbXNnaWQgImJpbmQgdG8gdGhlIG5leHQgdmlydHVhbCB0ZXJtaW5hbCIKK21zZ3N0ciAiRW52b2llIGF1IHRlcm1pbmFsIHZpcnR1ZWwgc3VpdmFudCIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBTRUxFQ1RWVF9QUkVWIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDo5NTAKK21zZ2lkICJiaW5kIHRvIHRoZSBwcmV2aW91cyB2aXJ0dWFsIHRlcm1pbmFsIgorbXNnc3RyICJFbnZvaWUgYXUgdGVybWluYWwgdmlydHVlbCBwcsOpY8OpZGVudCIKKworIy4KKyM6IFByb2dyYW1zL2NtZF91dGlscy5jOjE0NAorbXNnaWQgImJsYWNrIgorbXNnc3RyICJub2lyIgorCisjOiBQcm9ncmFtcy9jb3JlLmM6MTEyNQorbXNnaWQgImJsYW5rIGxpbmUiCittc2dzdHIgImxpZ25lIHZpZXJnZSIKKworIzogUHJvZ3JhbXMvY21kX3V0aWxzLmM6MTczCittc2dpZCAiYmxpbmtpbmciCittc2dzdHIgImNsaWdub3R0YW50IgorCisjLiBCCisjOiBQcm9ncmFtcy9jbWRfdXRpbHMuYzoxNDUKK21zZ2lkICJibHVlIgorbXNnc3RyICJibGV1IgorCisjOiBQcm9ncmFtcy9jb25maWcuYzoyOTkzCisjLCBjLWZvcm1hdAorbXNnaWQgImJyYWlsbGUgZGV2aWNlIG5vdCBzcGVjaWZpZWQiCittc2dzdHIgIlDDqXJpcGjDqXJpcXVlIGJyYWlsbGUgbm9uIHNww6ljaWZpw6kiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgT0ZGTElORSBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6NjIxCittc2dpZCAiYnJhaWxsZSBkaXNwbGF5IHRlbXBvcmFyaWx5IHVuYXZhaWxhYmxlIgorbXNnc3RyICJBZmZpY2hldXIgYnJhaWxsZSB0ZW1wb3JhaXJlbWVudCBub24gZGlzcG9uaWJsZSIKKworIzogUHJvZ3JhbXMvY29uZmlnLmM6MTczNworbXNnaWQgImJyYWlsbGUgZHJpdmVyIGluaXRpYWxpemF0aW9uIGZhaWxlZCIKK21zZ3N0ciAiw4ljaGVjIGRlIGwnaW5pdGlhbGlzYXRpb24gZHUgcGlsb3RlIGJyYWlsbGUiCisKKyM6IFByb2dyYW1zL2NvbmZpZy5jOjE4MTYKK21zZ2lkICJicmFpbGxlIGRyaXZlciBub3QgbG9hZGFibGUiCittc2dzdHIgIkltcG9zc2libGUgZGUgY2hhcmdlciBsZSBwaWxvdGUgYnJhaWxsZSIKKworIzogUHJvZ3JhbXMvY29uZmlnLmM6MjA3NworbXNnaWQgImJyYWlsbGUgZHJpdmVyIHJlc3RhcnRpbmciCittc2dzdHIgImxlIHBpbG90ZSBicmFpbGxlIHJlZMOpbWFycmUiCisKKyM6IFByb2dyYW1zL2NtZF9taXNjZWxsYW5lb3VzLmM6MTYzCittc2dpZCAiYnJhaWxsZSBkcml2ZXIgc3RvcHBlZCIKK21zZ3N0ciAicGlsb3RlIGJyYWlsbGUgYXJyw6p0w6kiCisKKyM6IERyaXZlcnMvU2NyZWVuL0FuZHJvaWQvc2NyZWVuLmM6MTg5Cittc2dpZCAiYnJhaWxsZSByZWxlYXNlZCIKK21zZ3N0ciAiYnJhaWxsZSBsaWLDqXLDqSIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBST1VURSBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6MTIwNworbXNnaWQgImJyaW5nIHNjcmVlbiBjdXJzb3IgdG8gY2hhcmFjdGVyIgorbXNnc3RyICJBbWVuZXIgbGUgY3Vyc2V1ciBkZSBsJ8OpY3JhbiBhdSBjYXJhY3TDqHJlIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIENTUkpNUF9WRVJUIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDo1OTMKK21zZ2lkICJicmluZyBzY3JlZW4gY3Vyc29yIHRvIGN1cnJlbnQgbGluZSIKK21zZ3N0ciAiQW3DqG5lIGxlIGN1cnNldXIgZGUgbCfDqWNyYW4gc3VyIGxhIGxpZ25lIGFjdHVlbGxlIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIFJPVVRFX0xJTkUgY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjE0MDQKK21zZ2lkICJicmluZyBzY3JlZW4gY3Vyc29yIHRvIGxpbmUiCittc2dzdHIgImFtw6huZSBsZSBjdXJzZXVyIGRlIGwnw6ljcmFuIHN1ciBsYSBsaWduZSIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBST1VURV9DVVJSX0xPQ04gY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjgzNQorbXNnaWQgImJyaW5nIHNjcmVlbiBjdXJzb3IgdG8gc3BlZWNoIGN1cnNvciIKK21zZ3N0ciAiQW3DqG5lIGxlIGN1cnNldXIgZGUgbCfDqWNyYW4gYXUgY3Vyc2V1ciBkZSBzeW50aMOoc2UiCisKKyMuIFJHCisjOiBQcm9ncmFtcy9jbWRfdXRpbHMuYzoxNTAKK21zZ2lkICJicm93biIKK21zZ3N0ciAibWFycm9uIgorCisjOiBEcml2ZXJzL1NjcmVlbi9MaW51eC9zY3JlZW4uYzoxNDMyCittc2dpZCAiY2FuJ3QgZ2V0IGNvbnNvbGUgc3RhdGUiCittc2dzdHIgIm5lIHBldXQgb2J0ZW5pciBsJ8OpdGF0IGRlIGxhIGNvbnNvbGUiCisKKyM6IERyaXZlcnMvU2NyZWVuL0xpbnV4L3NjcmVlbi5jOjE1MTAKK21zZ2lkICJjYW4ndCBvcGVuIGNvbnNvbGUiCittc2dzdHIgIm5lIHBldXQgb3V2cmlyIGxhIGNvbnNvbGUiCisKKyM6IERyaXZlcnMvU2NyZWVuL0xpbnV4L3NjcmVlbi5jOjE1NTYKK21zZ2lkICJjYW4ndCByZWFkIHNjcmVlbiBjb250ZW50IgorbXNnc3RyICJuZSBwZXV0IGxpcmUgbGUgY29udGVudSBkZSBsJ8OpY3JhbiIKKworIzogRHJpdmVycy9TY3JlZW4vTGludXgvc2NyZWVuLmM6MTYwMQorbXNnaWQgImNhbid0IHJlYWQgc2NyZWVuIGhlYWRlciIKK21zZ3N0ciAibmUgcGV1dCBsaXJlIGwnZW4tdMOqdGUgZGUgbCfDqWNyYW4iCisKKyM6IFByb2dyYW1zL2N0Yl90cmFuc2xhdGUuYzozOTMKK21zZ2lkICJjYW5ub3QgYWNjZXNzIGludGVybmFsIGNvbnRyYWN0aW9uIHRhYmxlIgorbXNnc3RyICJuZSBwZXV0IGFjY8OpZGVyIMOgIGxhIHRhYmxlIGQnYWJyw6hnZW1lbnQgaW50ZXJuZSIKKworIzogUHJvZ3JhbXMvYXRiX3RyYW5zbGF0ZS5jOjcwCittc2dpZCAiY2Fubm90IGNvbXBpbGUgYXR0cmlidXRlcyB0YWJsZSIKK21zZ3N0ciAiTmUgcGV1dCBwYXMgY29tcGlsZXIgbGEgdGFibGUgZGVzIGF0dHJpYnV0cyIKKworIzogUHJvZ3JhbXMvY3RiX3RyYW5zbGF0ZS5jOjM4NworbXNnaWQgImNhbm5vdCBjb21waWxlIGNvbnRyYWN0aW9uIHRhYmxlIgorbXNnc3RyICJOZSBwZXV0IHBhcyBjb21waWxlciBsYSB0YWJsZSBkZSBicmFpbGxlIGFicsOpZ8OpIgorCisjOiBQcm9ncmFtcy9jb25maWcuYzoxNzIwCittc2dpZCAiY2Fubm90IGNvbXBpbGUga2V5IHRhYmxlIgorbXNnc3RyICJOZSBwZXV0IHBhcyBjb21waWxlciBsYSB0YWJsZSBkZXMgdG91Y2hlcyIKKworIzogUHJvZ3JhbXMvY29uZmlnLmM6MTI4NAorbXNnaWQgImNhbm5vdCBjb21waWxlIGtleWJvYXJkIHRhYmxlIgorbXNnc3RyICJOZSBwZXV0IHBhcyBjb21waWxlciBsYSB0YWJsZSBkZXMgdG91Y2hlcyIKKworIzogUHJvZ3JhbXMvdHRiX3RyYW5zbGF0ZS5jOjI3NQorbXNnaWQgImNhbm5vdCBjb21waWxlIHRleHQgdGFibGUiCittc2dzdHIgIk5lIHBldXQgcGFzIGNvbXBpbGVyIGxhIHRhYmxlIGRlcyB0ZXh0ZSIKKworIy4gVGhpcyBpcyB0aGUgZmlyc3QgYXR0ZW1wdCB0byBjb25uZWN0IHRvIEJSTFRUWSwgYW5kIGl0IGZhaWxlZC4KKyMuICogUmV0dXJuIHRoZSBlcnJvciBpbW1lZGlhdGVseSB0byB0aGUgdXNlciwgdG8gcHJvdmlkZSBmZWVkYmFjayB0byB1c2VycworIy4gKiBydW5uaW5nIHhicmxhcGkgYnkgaGFuZCwgYnV0IG5vdCBmaWxsIGxvZ3MsIGVhdCBiYXR0ZXJ5LCBzcGFtCisjLiAqIDEyNy4wLjAuMSB3aXRoIHJlY29ubmVjdGlvbiBhdHRlbXB0cy4KKyMuCisjOiBQcm9ncmFtcy94YnJsYXBpLmM6MjA0CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBjb25uZWN0IHRvIGJyYWlsbGUgZGV2aWNlcyBkYWVtb24gYnJsdHR5IGF0ICVzXG4iCittc2dzdHIgIk5lIHBldXQgcGFzIHNlIGNvbm5lY3RlciBhdSBkw6ltb24gZGVzIHDDqXJpcGjDqXJpcXVlcyBicmFpbGxlIGRlIGJybHR0eSBzdXIgJXNcbiIKKworIzogUHJvZ3JhbXMveGJybGFwaS5jOjY1NAorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgY29ubmVjdCB0byBkaXNwbGF5ICVzXG4iCittc2dzdHIgIk5lIHBldXQgcGFzIHNlIGNvbm5lY3RlciDDoCBsJ2FmZmljaGV1ciAlc1xuIgorCisjOiBQcm9ncmFtcy9maWxlLmM6MzgxCittc2dpZCAiY2Fubm90IGNyZWF0ZSBkaXJlY3RvcnkiCittc2dzdHIgIk5lIHBldXQgcGFzIGNyw6llciBkZSByw6lwZXJ0b2lyZSIKKworIzogUHJvZ3JhbXMvcHJvZ3JhbS5jOjE1MAorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgZGV0ZXJtaW5lIHByb2dyYW0gZGlyZWN0b3J5IgorbXNnc3RyICJOZSBwZXV0IHBhcyBkw6l0ZXJtaW5lciBsZSByw6lwZXJ0b2lyZSBkdSBwcm9ncmFtbWUiCisKKyM6IFByb2dyYW1zL2NvbmZpZy5jOjI5NTEgUHJvZ3JhbXMvbWVudS5jOjYxOAorbXNnaWQgImNhbm5vdCBkZXRlcm1pbmUgd29ya2luZyBkaXJlY3RvcnkiCittc2dzdHIgIk5lIHBldXQgcGFzIGTDqXRlcm1pbmVyIGxlIHLDqXBlcnRvaXJlIGRlIHRyYXZhaWwiCisKKyM6IFByb2dyYW1zL3N5c3RlbV93aW5kb3dzLmM6NjEKK21zZ2lkICJjYW5ub3QgZmluZCBwcm9jZWR1cmUiCittc2dzdHIgIk5lIHBldXQgcGFzIHRyb3V2ZXIgbGEgcHJvY8OpZHVyZSIKKworIzogUHJvZ3JhbXMvcHJvZ3JhbS5jOjE1OAorbXNnaWQgImNhbm5vdCBmaXggaW5zdGFsbCBwYXRoIgorbXNnc3RyICJOZSBwZXV0IHBhcyBjb3JyaWdlciBsZSBjaGVtaW4gZCdpbnN0YWxsYXRpb24iCisKKyM6IFByb2dyYW1zL3hicmxhcGkuYzoyNTkKK21zZ2lkICJjYW5ub3QgZ2V0IHR0eVxuIgorbXNnc3RyICJOZSBwZXV0IHBhcyByw6ljdXDDqXJlciBkZSB0dHlcbiIKKworIzogUHJvZ3JhbXMveGJybGFwaS5jOjI2NQorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgZ2V0IHR0eSAlZFxuIgorbXNnc3RyICJOZSBwZXV0IHBhcyByw6ljdXDDqXJlciBsZSB0dHkgJWRcbiIKKworIzogUHJvZ3JhbXMvZmlsZS5jOjUxOAorbXNnaWQgImNhbm5vdCBnZXQgd29ya2luZyBkaXJlY3RvcnkiCittc2dzdHIgIk5lIHBldXQgcGFzIG9idGVuaXIgZGUgcsOpcGVydG9pcmUgZGUgdHJhdmFpbCIKKworIzogUHJvZ3JhbXMveGJybGFwaS5jOjcwMgorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgZ3JhYiB3aW5kb3dzIG9uIHNjcmVlbiAlZFxuIgorbXNnc3RyICJOZSBwZXV0IHBhcyBleHRyYWlyZSBkZSBmZW7DqnRyZXMgc3VyIGwnw6ljcmFuICVkXG4iCisKKyM6IFByb2dyYW1zL3hicmxhcGkuYzoyNzIKK21zZ2lkICJjYW5ub3QgaWdub3JlIGtleXNcbiIKK21zZ3N0ciAiTmUgcGV1dCBwYXMgaWdub3JlciBkZXMgdG91Y2hlc1xuIgorCisjOiBQcm9ncmFtcy9hdGJfdHJhbnNsYXRlLmM6OTAKK21zZ2lkICJjYW5ub3QgbG9hZCBhdHRyaWJ1dGVzIHRhYmxlIgorbXNnc3RyICJOZSBwZXV0IHBhcyBjaGFyZ2VyIGxhIHRhYmxlIGRlcyBhdHRyaWJ1dHMiCisKKyM6IFByb2dyYW1zL2N0Yl90cmFuc2xhdGUuYzo0MDcKK21zZ2lkICJjYW5ub3QgbG9hZCBjb250cmFjdGlvbiB0YWJsZSIKK21zZ3N0ciAibmUgcGV1dCBjaGFyZ2VyIGxhIHRhYmxlIGQnYWJyw6hnZW1lbnQiCisKKyM6IFByb2dyYW1zL3N5c3RlbV93aW5kb3dzLmM6NTQKK21zZ2lkICJjYW5ub3QgbG9hZCBsaWJyYXJ5IgorbXNnc3RyICJOZSBwZXV0IHBhcyBjaGFyZ2VyIGxhIGJpYmxpb3Row6hxdWUiCisKKyM6IFByb2dyYW1zL3R0Yl90cmFuc2xhdGUuYzoyOTUKK21zZ2lkICJjYW5ub3QgbG9hZCB0ZXh0IHRhYmxlIgorbXNnc3RyICJOZSBwZXV0IHBhcyBjaGFyZ2VyIGxhIHRhYmxlIGRlIHRleHRlIgorCisjOiBQcm9ncmFtcy9maWxlLmM6MzcwCittc2dpZCAiY2Fubm90IG1ha2Ugd29ybGQgd3JpdGFibGUiCittc2dzdHIgIm5lIHBldXQgZG9ubmVyIGxhIHBlcm1pc3Npb24gZCfDqWNyaXJlIMOgIHRvdXQgbGUgbW9uZGUiCisKKyM6IFByb2dyYW1zL2NvbmZpZy5jOjEyMzkKK21zZ2lkICJjYW5ub3Qgb3BlbiBrZXkgaGVscCIKK21zZ3N0ciAiTmUgcGV1dCBwYXMgb3V2cmlyIGwnYWlkZSBkZSBsYSB0b3VjaGUiCisKKyM6IFByb2dyYW1zL3Byb2dyYW0uYzoyNjIKK21zZ2lkICJjYW5ub3Qgb3BlbiBwcm9jZXNzIGlkZW50aWZpZXIgZmlsZSIKK21zZ3N0ciAiTmUgcGV1dCBwYXMgb3V2cmlyIGxlIGZpY2hpZXIgZCdpZGVudGlmaWFudHMgZGUgcHJvY2Vzc3VzIgorCisjOiBQcm9ncmFtcy9tZW51LmM6NjE2Cittc2dpZCAiY2Fubm90IG9wZW4gd29ya2luZyBkaXJlY3RvcnkiCittc2dzdHIgIk5lIHBldXQgcGFzIG91dnJpciBsZSByw6lwZXJ0b2lyZSBkZSB0cmF2YWlsIgorCisjOiBQcm9ncmFtcy9wcmVmcy5jOjM2MworbXNnaWQgImNhbm5vdCByZWFkIHByZWZlcmVuY2VzIGZpbGUiCittc2dzdHIgIk5lIHBldXQgcGFzIGxpcmUgbGUgZmljaGllciBkZXMgcHLDqWbDqXJlbmNlcyIKKworIzogUHJvZ3JhbXMveGJybGFwaS5jOjMzNworIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3Qgc2V0IGZvY3VzIHRvICUjMDEweFxuIgorbXNnc3RyICJOZSBwZXV0IHBhcyBwYXJhbcOpdHJlciBsZSBmb2N1cyBzdXIgJSMwMTB4XG4iCisKKyM6IFByb2dyYW1zL2ZpbGUuYzo1MzIgUHJvZ3JhbXMvbWVudS5jOjYwNQorbXNnaWQgImNhbm5vdCBzZXQgd29ya2luZyBkaXJlY3RvcnkiCittc2dzdHIgIk5lIHBldXQgcGFzIHBhcmFtw6l0cmVyIGxlIHLDqXBlcnRvaXJlIGRlIHRyYXZhaWwiCisKKyM6IFByb2dyYW1zL3ByZWZzLmM6NTc2Cittc2dpZCAiY2Fubm90IHdyaXRlIHRvIHByZWZlcmVuY2VzIGZpbGUiCittc2dzdHIgIk5lIHBldXQgcGFzIMOpY3JpcmUgZGFucyBsZSBmaWNoaWVyIGRlcyBwcsOpZsOpcmVuY2VzIgorCisjLiAiY2FwIiBoZXJlLCB1c2VkIGR1cmluZyBzcGVlY2ggb3V0cHV0LCBpcyBzaG9ydCBmb3IgImNhcGl0YWwiLgorIy4gSXQgaXMgc3Bva2VuIGp1c3QgYmVmb3JlIGFuIHVwcGVyY2FzZSBsZXR0ZXIsIGUuZy4gImNhcCBBIi4KKyM6IFByb2dyYW1zL2NvcmUuYzoxMDcwCittc2dpZCAiY2FwIgorbXNnc3RyICJWZXJyLm1haiIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjg4NiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6MTM1MworbXNnaWQgImNlbGxzIgorbXNnc3RyICJjZWxsdWxlcyIKKworIzogUHJvZ3JhbXMvY21kX3ByZWZlcmVuY2VzLmM6ODcKK21zZ2lkICJjaGFuZ2VzIGRpc2NhcmRlZCIKK21zZ3N0ciAiQ2hhbmdlbWVudHMgYW5udWzDqXMiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgVU5TVElDSyBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6ODg3Cittc2dpZCAiY2xlYXIgYWxsIHN0aWNreSBpbnB1dCBtb2RpZmllcnMiCittc2dzdHIgIlZpZGVyIGxlcyBtb2RpZmljYXRldXJzIGQnZW50csOpZSBwb2xsdWFudHMiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgVFhUU0VMX0NMRUFSIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDoxMDE5Cittc2dpZCAiY2xlYXIgdGhlIHRleHQgc2VsZWN0aW9uIgorbXNnc3RyICJyw6lpbml0aWFsaXNlciBsYSBzw6lsZWN0aW9uIGRlIHRleHh0ZSIKKworIzogUHJvZ3JhbXMvY21kX3NwZWVjaC5jOjUwMQorbXNnaWQgImNvbHVtbiIKK21zZ3N0ciAiY29sb25uZSIKKworIy4gY29uZmlndXJhdGlvbiBtZW51CisjOiBEcml2ZXJzL0JyYWlsbGUvQnJhaWxsZUxpdGUvYnJhaWxsZS5jOjYwNworbXNnaWQgImNvbmZpZyIKK21zZ3N0ciAiQ29uZmlnIgorCisjOiBQcm9ncmFtcy9vcHRpb25zLmM6ODEyCittc2dpZCAiY29uZmlndXJhdGlvbiBkaXJlY3RpdmUgc3BlY2lmaWVkIG1vcmUgdGhhbiBvbmNlIgorbXNnc3RyICJMaWduZSBkZSBjb25maWd1cmF0aW9uIHNww6ljaWZpw6llIHBsdXMgZCd1bmUgZm9pcyIKKworIzogRHJpdmVycy9TY3JlZW4vTGludXgvc2NyZWVuLmM6MTUwOAorbXNnaWQgImNvbnNvbGUgbm90IGluIHVzZSIKK21zZ3N0ciAiTGEgY29uc29sZSBuJ2VzdCBwYXMgdXRpbGlzw6llIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6MTA1NgorbXNnaWQgImNvbnNvbGUgdG9uZSBnZW5lcmF0b3IiCittc2dzdHIgIkfDqW7DqXJhdGV1ciBkZSBiZWVwIGRlIGNvbnNvbGUiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgQ0xJUF9DT1BZIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDoxMzM4Cittc2dpZCAiY29weSBjaGFyYWN0ZXJzIHRvIGNsaXBib2FyZCIKK21zZ3N0ciAiQ29waWUgbGVzIGNhcmFjdMOocmVzIGRhbnMgbGUgcHJlc3NlLXBhcGllciIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBIT1NUX0NPUFkgY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjEwMzMKK21zZ2lkICJjb3B5IHNlbGVjdGVkIHRleHQgdG8gaG9zdCBjbGlwYm9hcmQiCittc2dzdHIgImNvcGllIGxlIHRleHRlIHPDqWxlY3Rpb25uw6kgdmVycyBsZSBwcmVzc2UtcGFwaWVyIGjDtHRlIgorCisjOiBQcm9ncmFtcy9jb25maWcuYzo3MjkKK21zZ2lkICJjc2VjcyIKK21zZ3N0ciAiY3NlY3MiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgVE9VQ0hfQVQgY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjE1MDMKK21zZ2lkICJjdXJyZW50IHJlYWRpbmcgbG9jYXRpb24iCittc2dzdHIgIkVtcGxhY2VtZW50IGNvdXJhbnQgZGUgbGEgbGVjdHVyZSIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBLRVlfQ1VSU09SX0RPV04gY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjE1NjcKK21zZ2lkICJjdXJzb3ItZG93biBrZXkiCittc2dzdHIgIlRvdWNoZSBjdXJzZXVyIHZlcnMgbGUgYmFzIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIEtFWV9DVVJTT1JfTEVGVCBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6MTU0MworbXNnaWQgImN1cnNvci1sZWZ0IGtleSIKK21zZ3N0ciAiVG91Y2hlIGN1cnNldXIgw6AgZ2F1Y2hlIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIEtFWV9DVVJTT1JfUklHSFQgY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjE1NTEKK21zZ2lkICJjdXJzb3ItcmlnaHQga2V5IgorbXNnc3RyICJUb3VjaGUgY3Vyc2V1ciDDoCBkcm9pdGUiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgS0VZX0NVUlNPUl9VUCBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6MTU1OQorbXNnaWQgImN1cnNvci11cCBrZXkiCittc2dzdHIgIlRvdWNoZSBjdXJzZXVyIHZlcnMgbGUgaGF1dCIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBIT1NUX0NVVCBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6MTA0MAorbXNnaWQgImN1dCBzZWxlY3RlZCB0ZXh0IHRvIGhvc3QgY2xpcGJvYXJkIgorbXNnc3RyICJjb3VwZSBsZSB0ZXh0ZSBzw6lsZWN0aW9ubsOpIHZlcnMgbGUgcHJlc3NlLXBhcGllciBow7R0ZSIKKworIy4gR0IKKyM6IFByb2dyYW1zL2NtZF91dGlscy5jOjE0NworbXNnaWQgImN5YW4iCittc2dzdHIgImN5YW4iCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgQUxUR1IgY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjg5NAorbXNnaWQgImN5Y2xlIHRoZSBBbHRHciAoUmlnaHQgQWx0KSBzdGlja3kgaW5wdXQgbW9kaWZpZXIgKG5leHQsIG9uLCBvZmYpIgorbXNnc3RyICJDaGFuZ2UgbGUgY3ljbGUgZGUgbCdhY3Rpb24gZCdBbHRHciAoQWx0IERyb2l0ZSkgKGxhIHByb2NoYWluZSBmb2lzLCBhY3RpdsOpLCBkw6lzYWN0aXbDqSkiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgQ09OVFJPTCBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6NjQyCittc2dpZCAiY3ljbGUgdGhlIENvbnRyb2wgc3RpY2t5IGlucHV0IG1vZGlmaWVyIChuZXh0LCBvbiwgb2ZmKSIKK21zZ3N0ciAiQ2hhbmdlIGxlIGN5Y2xlIGR1IG1vZGlmaWNhdGV1ciBDb250csO0bGUgKGxhIHByb2NoYWluZSBmb2lzLCBhY3RpdsOpLCBkw6lzYWN0aXbDqSkiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgR1VJIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDo5MDEKK21zZ2lkICJjeWNsZSB0aGUgR1VJIChXaW5kb3dzKSBzdGlja3kgaW5wdXQgbW9kaWZpZXIgKG5leHQsIG9uLCBvZmYpIgorbXNnc3RyICJDaGFuZ2UgbGUgY3ljbGUgZHUgbW9kaWZpY2F0ZXVyIFRvdWNoZSBXaW5kb3dzIChMYSBwcm9jaGFpbmUgZm9pcywgYWN0aXbDqSwgZMOpc2FjdGl2w6kpIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIE1FVEEgY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjY0OQorbXNnaWQgImN5Y2xlIHRoZSBNZXRhIChMZWZ0IEFsdCkgc3RpY2t5IGlucHV0IG1vZGlmaWVyIChuZXh0LCBvbiwgb2ZmKSIKK21zZ3N0ciAiQ2hhbmdlIGxlIGN5Y2xlIGR1IG1vZGlmaWNhdGV1ciBNZXRhIChBbHQgR2F1Y2hlKSAoTGEgcHJvY2hhaW5lIGZvaXMsIGFjdGl2w6ksIGTDqXNhY3RpdsOpKSIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBTSElGVCBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6NjI4Cittc2dpZCAiY3ljbGUgdGhlIFNoaWZ0IHN0aWNreSBpbnB1dCBtb2RpZmllciAobmV4dCwgb24sIG9mZikiCittc2dzdHIgIkNoYW5nZSBsZSBjeWNsZSBkZSBsYSB0b3VjaGUgTWFqdXNjdWxlIChTaGlmdCksIChMYSBwcm9jaGFpbmUgZm9pcywgYWN0aXbDqSwgZMOpc2FjdGl2w6kpIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIFVQUEVSIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDo2MzUKK21zZ2lkICJjeWNsZSB0aGUgVXBwZXIgc3RpY2t5IGlucHV0IG1vZGlmaWVyIChuZXh0LCBvbiwgb2ZmKSIKK21zZ3N0ciAiQ2hhbmdlIGxlIGN5Y2xlIGRlIGxhIHRvdWNoZSBWZXJybWFqIChVcHBlciksIChMYSBwcm9jaGFpbmUgZm9pcywgYWN0aXbDqSwgZMOpc2FjdGl2w6kpIgorCisjLiBMCisjOiBQcm9ncmFtcy9jbWRfdXRpbHMuYzoxNTIKK21zZ2lkICJkYXJrIGdyZXkiCittc2dzdHIgImdyaXMgZm9uY8OpIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIFNBWV9MT1dFUiBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6MTE2OAorbXNnaWQgImRlY3JlYXNlIHNwZWFraW5nIHBpdGNoIgorbXNnc3RyICJkaW1pbnVlciBsYSBoYXV0ZXVyIGRlIGxhIHZvaXgiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgU0FZX1NMT1dFUiBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6NTUwCittc2dpZCAiZGVjcmVhc2Ugc3BlYWtpbmcgcmF0ZSIKK21zZ3N0ciAiRGltaW51ZXIgbGEgdml0ZXNzZSBkZSBsYSBwYXJvbGUiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgU0FZX1NPRlRFUiBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6NTY0Cittc2dpZCAiZGVjcmVhc2Ugc3BlYWtpbmcgdm9sdW1lIgorbXNnc3RyICJEaW1pbnVlciBsZSB2b2x1bWUgZGUgbGEgcGFyb2xlIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIEtFWV9ERUxFVEUgY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjE2MTUKK21zZ2lkICJkZWxldGUga2V5IgorbXNnc3RyICJUb3VjaGUgc3VwcHJpbWVyIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIERFU0NDSEFSIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDoxMjc1Cittc2dpZCAiZGVzY3JpYmUgY2hhcmFjdGVyIgorbXNnc3RyICJEw6ljcmlyZSBsZSBjYXJhY3TDqHJlIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIERFU0NfQ1VSUl9DSEFSIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDo4MjAKK21zZ2lkICJkZXNjcmliZSBjdXJyZW50IGNoYXJhY3RlciIKK21zZ3N0ciAiRMOpY3JpcmUgbGUgY2FyYWN0w6hyZSBhY3R1ZWwiCisKKyM6IFByb2dyYW1zL2NvbmZpZy5jOjcxMCBQcm9ncmFtcy9jb25maWcuYzo3MjAKK21zZ2lkICJkZXZpY2UiCittc2dzdHIgInDDqXJpcGjDqXJpcXVlIgorCisjOiBQcm9ncmFtcy9icmx0ZXN0LmM6NjQgUHJvZ3JhbXMvYnJsdGVzdC5jOjc0IFByb2dyYW1zL2JybHR0eS1hdGIuYzozMgorIzogUHJvZ3JhbXMvYnJsdHR5LWN0Yi5jOjUwIFByb2dyYW1zL2JybHR0eS1rdGIuYzo2OSBQcm9ncmFtcy9icmx0dHkta3RiLmM6NzkKKyM6IFByb2dyYW1zL2JybHR0eS10cnR4dC5jOjQ3IFByb2dyYW1zL2NvbmZpZy5jOjQwMCBQcm9ncmFtcy9jb25maWcuYzo1MDAKKyM6IFByb2dyYW1zL2NvbmZpZy5jOjUxMCBQcm9ncmFtcy9jb25maWcuYzo1MjAgUHJvZ3JhbXMvY29uZmlnLmM6NTkxCittc2dpZCAiZGlyZWN0b3J5IgorbXNnc3RyICJyw6lwZXJ0b2lyZSIKKworIzogUHJvZ3JhbXMveGJybGFwaS5jOjk4Cittc2dpZCAiZGlzcGxheSIKK21zZ3N0ciAiw6ljcmFuIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIE5PT1AgY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjUKK21zZ2lkICJkbyBub3RoaW5nIgorbXNnc3RyICJOZSBmYWl0IHJpZW4iCisKKyM6IFByb2dyYW1zL2xlYXJuLmM6MTA4Cittc2dpZCAiZG9uZSIKK21zZ3N0ciAiRmFpdCIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjY2NgorbXNnaWQgImRvdCA3IgorbXNnc3RyICJwb2ludCA3IgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6NjY3Cittc2dpZCAiZG90IDgiCittc2dzdHIgInBvaW50IDgiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzo2NjQKK21zZ2lkICJkb3RzIDcgYW5kIDgiCittc2dzdHIgIlBvaW50cyA3IGV0IDgiCisKKyM6IERyaXZlcnMvQnJhaWxsZS9CYXVtL2JyYWlsbGUuYzoxMTQ2Cittc2dpZCAiZHJpdmVyIHJlcXVlc3QiCittc2dzdHIgIlJlcXXDqnRlIGR1IHBpbG90ZSIKKworIzogUHJvZ3JhbXMvY29uZmlnLmM6NTQ5IFByb2dyYW1zL2NvbmZpZy5jOjY0NyBQcm9ncmFtcy9jb25maWcuYzo2OTAKK21zZ2lkICJkcml2ZXIsLi4uIgorbXNnc3RyICJwaWxvdGUsLi4uIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIEtFWV9FTkQgY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjE1OTkKK21zZ2lkICJlbmQga2V5IgorbXNnc3RyICJ0b3VjaGUgZmluIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIEtFWV9FTlRFUiBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6MTUxMQorbXNnaWQgImVudGVyIGtleSIKK21zZ3N0ciAidG91Y2hlIGVudHLDqWUiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgTEVBUk4gY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjQzNgorbXNnaWQgImVudGVyL2xlYXZlIGNvbW1hbmQgbGVhcm4gbW9kZSIKK21zZ3N0ciAiZW50cmVyL3F1aXR0ZXIgbGUgbW9kZSBkJ2FwcHJlbnRpc3NhZ2UgZGVzIGNvbW1hbmRlcyIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBIRUxQIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDo0MjIKK21zZ2lkICJlbnRlci9sZWF2ZSBoZWxwIGRpc3BsYXkiCittc2dzdHIgImVudHJlci9xdWl0dGVyIGwnYWZmaWNoYWdlIGRlIGwnYWlkZSIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBQUkVGTUVOVSBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6NDQzCittc2dpZCAiZW50ZXIvbGVhdmUgcHJlZmVyZW5jZXMgbWVudSIKK21zZ3N0ciAiZW50cmVyL3F1aXR0ZXIgbGUgbWVudSBkZXMgcHLDqWbDqXJlbmNlcyIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBJTkZPIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDo0MjkKK21zZ2lkICJlbnRlci9sZWF2ZSBzdGF0dXMgZGlzcGxheSIKK21zZ3N0ciAiZW50cmVyL3F1aXR0ZXIgbCdhZmZpY2hhZ2UgZGUgbCfDqXRhdCIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBLRVlfRVNDQVBFIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDoxNTM1Cittc2dpZCAiZXNjYXBlIGtleSIKK21zZ3N0ciAiVG91Y2hlIMOJY2hhcCIKKworIzogRHJpdmVycy9CcmFpbGxlL0lyaXMvYnJhaWxsZS5jOjE0OTQKK21zZ2lkICJldXJvYnJhaWxsZSIKK21zZ3N0ciAiRXVyb2JyYWlsbGUiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSB0ZXJtIHVzZWQgd2hlbiB0aGUgdGltZSBpcyBleGFjdGx5IG9uIChpLmUuIHplcm8gc2Vjb25kcyBhZnRlcikgYSBtaW51dGUuCisjOiBQcm9ncmFtcy9jbWRfbWlzY2VsbGFuZW91cy5jOjEwMgorbXNnaWQgImV4YWN0bHkiCittc2dzdHIgImV4YWN0ZW1lbnQiCisKKyM6IFByb2dyYW1zL2NvbmZpZy5jOjg3MworbXNnaWQgImV4Y2VzcyBhcmd1bWVudCIKK21zZ3N0ciAiVHJvcCBkJ2FyZ3VtZW50cyIKKworIy4gcGFyZW50CisjOiBQcm9ncmFtcy9icmx0dHkuYzoxNzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXhlY3V0aW5nIFwiJXNcIiAoZnJvbSBcIiVzXCIpXG4iCittc2dzdHIgImV4w6ljdXRpb24gZGUgXCIlc1wiICjDoCBwYXJ0aXIgZGUgXCIlc1wiKVxuIgorCisjOiBQcm9ncmFtcy9wZ21wcml2c19saW51eC5jOjIwNDUKK21zZ2lkICJleGVjdXRpbmcgYXMgdGhlIGludm9raW5nIHVzZXIiCittc2dzdHIgImV4w6ljdXRpb24gZW4gdGFudCBxdWUgbCd1dGlsaXNhdGV1ciBhcHBlbGFudCIKKworIy4gZXhlY3YoKSBzaG91bGRuJ3QgcmV0dXJuCisjOiBQcm9ncmFtcy9icmx0dHkuYzoxODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXhlY3V0aW9uIG9mIFwiJXNcIiBmYWlsZWQ6ICVzXG4iCittc2dzdHIgIsOJY2hlYyBkZSBsJ2V4w6ljdXRpb24gZGUgXCIlc1wiIDogJXNcbiIKKworIzogUHJvZ3JhbXMveGJybGFwaS5jOjcwOQorbXNnaWQgImZhaWxlZCB0byBnZXQgZmlyc3QgZm9jdXNcbiIKK21zZ3N0ciAiw6ljaGVjIGRlIGxhIHLDqWN1cMOpcmF0aW9uIGR1IHByZW1pZXIgZm9jdXNcbiIKKworIzogUHJvZ3JhbXMvYnJsdHR5LXRydHh0LmM6NTYgUHJvZ3JhbXMvYnJsdHR5LXRydHh0LmM6NjQgUHJvZ3JhbXMvY29uZmlnLmM6NDU3CisjOiBQcm9ncmFtcy9jb25maWcuYzo0NjYgUHJvZ3JhbXMvY29uZmlnLmM6NDc2IFByb2dyYW1zL2NvbmZpZy5jOjYwMgorIzogUHJvZ3JhbXMvY29uZmlnLmM6NjEyIFByb2dyYW1zL2NvbmZpZy5jOjYyMSBQcm9ncmFtcy9jb25maWcuYzo2MjkKKyM6IFByb2dyYW1zL2NvbmZpZy5jOjY2NiBQcm9ncmFtcy9jb25maWcuYzo3NTkKK21zZ2lkICJmaWxlIgorbXNnc3RyICJmaWNoaWVyIgorCisjOiBQcm9ncmFtcy9vcHRpb25zLmM6OTk4CisjLCBjLWZvcm1hdAorbXNnaWQgImZpbGUgJyVzJyBwcm9jZXNzaW5nIGVycm9yLiIKK21zZ3N0ciAiRXJyZXVyIGRlIHRyYWl0ZW1lbnQgZHUgZmljaGllciAnJXMnIgorCisjLiBmYWlsZWQKKyM6IFByb2dyYW1zL2JybHR0eS5jOjE3MgorIywgYy1mb3JtYXQKK21zZ2lkICJmb3JrIG9mIFwiJXNcIiBmYWlsZWQ6ICVzXG4iCittc2dzdHIgIsOJY2hlYyBkdSBmb3JrIGRlIFwiJXNcIiA6ICVzXG4iCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgS0VZX0ZVTkNUSU9OIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDoxNjI0Cittc2dpZCAiZnVuY3Rpb24ga2V5IgorbXNnc3RyICJUb3VjaGUgZGUgZm9uY3Rpb24iCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgQkFDSyBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6MjcxCittc2dpZCAiZ28gYmFjayBhZnRlciBjdXJzb3IgdHJhY2tpbmciCittc2dzdHIgIlJldmVuaXIgYXByw6hzIGxhIHBvdXJzdWl0ZSBkdSBjdXJzZXVyIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIEdVSV9CQUNLIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDoxMDc3Cittc2dpZCAiZ28gYmFjayB0byB0aGUgcHJldmlvdXMgc2NyZWVuIgorbXNnc3RyICJyZXRvdXJuZSDDoCBsJ8OpY3JhbiBwcsOpY8OpZGVudCIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBGV0lOTFQgY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjIxMAorbXNnaWQgImdvIGJhY2t3YXJkIG9uZSBicmFpbGxlIHdpbmRvdyIKK21zZ3N0ciAiUmVjdWxlIGQndW5lIGZlbsOqdHJlIGJyYWlsbGUiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgRldJTkxUU0tJUCBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6MjI4Cittc2dpZCAiZ28gYmFja3dhcmQgc2tpcHBpbmcgYmxhbmsgYnJhaWxsZSB3aW5kb3dzIgorbXNnc3RyICJSZWN1bGUgZW4gc2F1dGFudCBsZXMgZmVuw6p0cmVzIGJyYWlsbGUgdmlkZXMiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgUFJOQldJTiBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6OTY2Cittc2dpZCAiZ28gYmFja3dhcmQgdG8gbmVhcmVzdCBub24tYmxhbmsgYnJhaWxsZSB3aW5kb3ciCittc2dzdHIgIlJlY3VsZSDDoCBsYSBmZW7DqnRyZSBicmFpbGxlIG5vbiB2aWRlIGxhIHBsdXMgcHJvY2hlIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIExORE4gY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjIzCittc2dpZCAiZ28gZG93biBvbmUgbGluZSIKK21zZ3N0ciAiRGVzY2VuZHJlIGQndW5lIGxpZ25lIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIFdJTkROIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDo0MQorbXNnaWQgImdvIGRvd24gc2V2ZXJhbCBsaW5lcyIKK21zZ3N0ciAiRGVzY2VuZCBkZSBwbHVzaWV1cnMgbGlnbmVzIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIE5YUEdSUEggY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjEzMworbXNnaWQgImdvIGRvd24gdG8gZmlyc3QgbGluZSBvZiBuZXh0IHBhcmFncmFwaCIKK21zZ3N0ciAiRGVzY2VuZCDDoCBsYSBwcmVtacOocmUgbGlnbmUgZHUgcGFyYWdyYXBoZSBzdWl2YW50IgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIE1FTlVfTEFTVF9JVEVNIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDo0NzUKK21zZ2lkICJnbyBkb3duIHRvIGxhc3QgaXRlbSIKK21zZ3N0ciAiRGVzY2VuZCBhdSBkZXJuaWVyIMOpbMOpbWVudCIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBOWERJRkNIQVIgY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjEzMzAKK21zZ2lkICJnbyBkb3duIHRvIG5lYXJlc3QgbGluZSB3aXRoIGRpZmZlcmVudCBjaGFyYWN0ZXIiCittc2dzdHIgIkRlc2NlbmQgw6AgbGEgbGlnbmUgbGEgcGx1cyBwcm9jaGUgYXlhbnQgdW4gY2FyYWN0w6hyZSBkaWZmw6lyZW50IgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIE5YRElGTE4gY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjU5Cittc2dpZCAiZ28gZG93biB0byBuZWFyZXN0IGxpbmUgd2l0aCBkaWZmZXJlbnQgY29udGVudCIKK21zZ3N0ciAiRGVzY2VuZCDDoCBsYSBsaWduZSBsYSBwbHVzIHByb2NoZSBheWFudCB1biBjb250ZW51IGRpZmbDqXJlbnQiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgQVRUUkROIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDo3NworbXNnaWQgImdvIGRvd24gdG8gbmVhcmVzdCBsaW5lIHdpdGggZGlmZmVyZW50IGhpZ2hsaWdodGluZyIKK21zZ3N0ciAiRGVzY2VuZCDDoCBsYSBsaWduZSBsYSBwbHVzIHByb2NoZSBheWFudCB1biBzdXJsaWduZW1lbnQgZGlmZsOpcmVudCIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBOWElOREVOVCBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6MTI2NworbXNnaWQgImdvIGRvd24gdG8gbmVhcmVzdCBsaW5lIHdpdGggbGVzcyBpbmRlbnQgdGhhbiBjaGFyYWN0ZXIiCittc2dzdHIgIkRlc2NlbmQgw6AgbGEgbGlnbmUgbGEgcGx1cyBwcm9jaGUgYXlhbnQgbW9pbnMgZCdpbmRlbnRhdGlvbiBxdWUgZGUgY2FyYWN0w6hyZSIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBOWFBST01QVCBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6MTUxCittc2dpZCAiZ28gZG93biB0byBuZXh0IGNvbW1hbmQgcHJvbXB0IgorbXNnc3RyICJEZXNjZW5kIMOgIGwnaW52aXRlIGRlIGNvbW1hbmRlIHN1aXZhbnQiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgTUVOVV9ORVhUX0lURU0gY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjQ5MworbXNnaWQgImdvIGRvd24gdG8gbmV4dCBpdGVtIgorbXNnc3RyICJEZXNjZW5kIMOgIGwnw6lsw6ltZW50IHN1aXZhbnQiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgRldJTlJUIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDoyMTkKK21zZ2lkICJnbyBmb3J3YXJkIG9uZSBicmFpbGxlIHdpbmRvdyIKK21zZ3N0ciAiQXZhbmNlIGQndW5lIGZlbsOqdHJlIGJyYWlsbGUiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgRldJTlJUU0tJUCBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6MjM3Cittc2dpZCAiZ28gZm9yd2FyZCBza2lwcGluZyBibGFuayBicmFpbGxlIHdpbmRvd3MiCittc2dzdHIgIkF2YW5jZSBlbiBzYXV0YW50IGxlcyBmZW7DqnRyZXMgYnJhaWxsZSB2aWRlcyIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBOWE5CV0lOIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDo5NzUKK21zZ2lkICJnbyBmb3J3YXJkIHRvIG5lYXJlc3Qgbm9uLWJsYW5rIGJyYWlsbGUgd2luZG93IgorbXNnc3RyICJWYSDDoCBsYSBwcm9jaGFpbmUgZmVuw6p0cmUgYnJhaWxsZSBub24gdmlkZSIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBIV0lOTFQgY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjE5MgorbXNnaWQgImdvIGxlZnQgaGFsZiBhIGJyYWlsbGUgd2luZG93IgorbXNnc3RyICJWYSBkJ3VuZSBkZW1pLWZlbsOqdHJlIGJyYWlsbGUgw6AgZ2F1Y2hlIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIENIUkxUIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDoxNzQKK21zZ2lkICJnbyBsZWZ0IG9uZSBjaGFyYWN0ZXIiCittc2dzdHIgIlZhIGF1IGNhcmFjdMOocmUgw6AgZ2F1Y2hlIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIEhXSU5SVCBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6MjAxCittc2dpZCAiZ28gcmlnaHQgaGFsZiBhIGJyYWlsbGUgd2luZG93IgorbXNnc3RyICJWYSBkJ3VuZSBkZW1pLWZlbsOqdHJlIGJyYWlsbGUgw6AgZHJvaXRlIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIENIUlJUIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDoxODMKK21zZ2lkICJnbyByaWdodCBvbmUgY2hhcmFjdGVyIgorbXNnc3RyICJWYSDDoCBkcm9pdGUgZCd1biBjYXJhY3TDqHJlIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIFNQRUFLX0ZSU1RfQ0hBUiBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6Nzg5Cittc2dpZCAiZ28gdG8gYW5kIHNwZWFrIGZpcnN0IG5vbi1ibGFuayBjaGFyYWN0ZXIgb24gbGluZSIKK21zZ3N0ciAiQWxsZXIgZXQgbGlyZSBsZSBwcmVtaWVyIGNhcmFjdMOocmUgbm9uLXZpZGUgZGUgbGEgbGlnbmUiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgU1BFQUtfRlJTVF9MSU5FIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDo4MDUKK21zZ2lkICJnbyB0byBhbmQgc3BlYWsgZmlyc3Qgbm9uLWJsYW5rIGxpbmUgb24gc2NyZWVuIgorbXNnc3RyICJBbGxlciBldCBsaXJlIGxhIHByZW1pw6hyZSBsaWduZSBub24tdmlkZSBkZSBsJ8OpY3JhbiIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBTUEVBS19MQVNUX0NIQVIgY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjc5NworbXNnaWQgImdvIHRvIGFuZCBzcGVhayBsYXN0IG5vbi1ibGFuayBjaGFyYWN0ZXIgb24gbGluZSIKK21zZ3N0ciAiQWxsZXIgZXQgbGlyZSBsZSBkZXJuaWVyIGNhcmFjdMOocmUgbm9uLXZpZGUgZGUgbGEgbGlnbmUiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgU1BFQUtfTEFTVF9MSU5FIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDo4MTMKK21zZ2lkICJnbyB0byBhbmQgc3BlYWsgbGFzdCBub24tYmxhbmsgbGluZSBvbiBzY3JlZW4iCittc2dzdHIgIkFsbGVyIGV0IGxpcmUgbGEgZGVybmnDqHJlIGxpZ25lIG5vbi12aWRlIGRlIGwnw6ljcmFuIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIFNQRUFLX05FWFRfQ0hBUiBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6NzM1Cittc2dpZCAiZ28gdG8gYW5kIHNwZWFrIG5leHQgY2hhcmFjdGVyIgorbXNnc3RyICJWYSBldCBsaXQgbGUgY2FyYWN0w6hyZSBzdWl2YW50IgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIFNQRUFLX05FWFRfTElORSBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6NzgxCittc2dpZCAiZ28gdG8gYW5kIHNwZWFrIG5leHQgbGluZSIKK21zZ3N0ciAiVmEgZXQgbGl0IGxhIGxpZ25lIHN1aXZhbnRlIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIFNQRUFLX05FWFRfV09SRCBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6NzU4Cittc2dpZCAiZ28gdG8gYW5kIHNwZWFrIG5leHQgd29yZCIKK21zZ3N0ciAiQWxsZXIgZXQgbGlyZSBsZSBtb3Qgc3VpdmFudCIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBTUEVBS19QUkVWX0NIQVIgY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjcyNworbXNnaWQgImdvIHRvIGFuZCBzcGVhayBwcmV2aW91cyBjaGFyYWN0ZXIiCittc2dzdHIgIlZhIGV0IGxpdCBsZSBjYXJhY3TDqHJlIHByw6ljw6lkZW50IgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIFNQRUFLX1BSRVZfTElORSBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6NzczCittc2dpZCAiZ28gdG8gYW5kIHNwZWFrIHByZXZpb3VzIGxpbmUiCittc2dzdHIgIlZhIGV0IGxpdCBsYSBsaWduZSBwcsOpY8OpZGVudGUiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgU1BFQUtfUFJFVl9XT1JEIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDo3NTAKK21zZ2lkICJnbyB0byBhbmQgc3BlYWsgcHJldmlvdXMgd29yZCIKK21zZ3N0ciAiVmEgZXQgbGl0IGxlIG1vdCBwcsOpY8OpZGVudCIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBCT1RfTEVGVCBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6MTE1Cittc2dpZCAiZ28gdG8gYmVnaW5uaW5nIG9mIGJvdHRvbSBsaW5lIgorbXNnc3RyICJWYSBhdSBkw6lidXQgZGUgbGEgdG91dGUgZGVybmnDqHJlIGxpZ25lIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIExOQkVHIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDoyNDYKK21zZ2lkICJnbyB0byBiZWdpbm5pbmcgb2YgbGluZSIKK21zZ3N0ciAiVmEgYXUgZMOpYnV0IGRlIGxhIGxpZ25lIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIFRPUF9MRUZUIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDoxMDUKK21zZ2lkICJnbyB0byBiZWdpbm5pbmcgb2YgdG9wIGxpbmUiCittc2dzdHIgIlZhIGF1IGTDqWJ1dCBkZSBsYSB0b3V0ZSBwcmVtacOocmUgbGlnbmUiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgQk9UIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDo5NQorbXNnaWQgImdvIHRvIGJvdHRvbSBsaW5lIgorbXNnc3RyICJWYSDDoCBsYSB0b3V0ZSBkZXJuacOocmUgbGlnbmUiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgU1BLSE9NRSBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6NTIyCittc2dpZCAiZ28gdG8gY3VycmVudCBzcGVha2luZyBwb3NpdGlvbiIKK21zZ3N0ciAiVmEgw6AgbGEgcG9zaXRpb24gYWN0dWVsbGUgZGUgbGEgc3ludGjDqHNlIHZvY2FsZSIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBMTkVORCBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6MjU1Cittc2dpZCAiZ28gdG8gZW5kIG9mIGxpbmUiCittc2dzdHIgIlZhIMOgIGxhIGZpbiBkZSBsYSBsaWduZSIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBNRU5VX1BSRVZfTEVWRUwgY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjY2NAorbXNnaWQgImdvIHRvIHByZXZpb3VzIG1lbnUgbGV2ZWwiCittc2dzdHIgIlZhIGF1IG5pdmVhdSBkZSBtZW51IHByw6ljw6lkZW50IgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIEdPVE9NQVJLIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDoxMzAwCittc2dpZCAiZ28gdG8gcmVtZW1iZXJlZCBicmFpbGxlIHdpbmRvdyBwb3NpdGlvbiIKK21zZ3N0ciAiVmEgw6AgbGEgcG9zaXRpb24gZGUgbGEgZmVuw6p0cmUgYnJhaWxsZSBkb250IG9uIHNlIHJhcHBlbGxlIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIEhPTUUgY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjI2MworbXNnaWQgImdvIHRvIHNjcmVlbiBjdXJzb3IiCittc2dzdHIgIlZhIGF1IGN1cnNldXIgZGUgbCfDqWNyYW4iCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgUkVUVVJOIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDoyNzkKK21zZ2lkICJnbyB0byBzY3JlZW4gY3Vyc29yIG9yIGdvIGJhY2sgYWZ0ZXIgY3Vyc29yIHRyYWNraW5nIgorbXNnc3RyICJWYSBhdSBjdXJzZXVyIGRlIGwnw6ljcmFuIG91IHJldmllbnQgZCd1bmUgcG91cnN1aXRlIGR1IGN1cnNldXIiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgR09UT0xJTkUgY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjEzMTAKK21zZ2lkICJnbyB0byBzZWxlY3RlZCBsaW5lIgorbXNnc3RyICJWYSDDoCBsYSBsaWduZSBzw6lsZWN0aW9ubsOpZSIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBHVUlfSE9NRSBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6MTA2OQorbXNnaWQgImdvIHRvIHRoZSBob21lIHNjcmVlbiIKK21zZ3N0ciAidmEgw6AgbCfDqWNyYW4gZCdhY2N1ZWlsIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIFRPUCBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6ODYKK21zZ2lkICJnbyB0byB0b3AgbGluZSIKK21zZ3N0ciAiVmEgw6AgbGEgdG91dGUgcHJlbWnDqHJlIGxpZ25lIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIExOVVAgY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjE0Cittc2dpZCAiZ28gdXAgb25lIGxpbmUiCittc2dzdHIgIlJlbW9udGUgZCd1bmUgbGlnbmUiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgV0lOVVAgY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjMyCittc2dpZCAiZ28gdXAgc2V2ZXJhbCBsaW5lcyIKK21zZ3N0ciAiUmVtb250ZSBkZSBwbHVzaWV1cnMgbGlnbmUiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgTUVOVV9GSVJTVF9JVEVNIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDo0NjYKK21zZ2lkICJnbyB1cCB0byBmaXJzdCBpdGVtIgorbXNnc3RyICJSZW1vbnRlIGF1IHByZW1pZXIgw6lsw6ltZW50IgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIFBSUEdSUEggY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjEyNAorbXNnaWQgImdvIHVwIHRvIGZpcnN0IGxpbmUgb2YgcGFyYWdyYXBoIgorbXNnc3RyICJNb250ZSDDoCBsYSBwcmVtacOocmUgbGlnbmUgZHUgcGFyYWdyYXBoZSIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBQUkRJRkNIQVIgY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjEzMjAKK21zZ2lkICJnbyB1cCB0byBuZWFyZXN0IGxpbmUgd2l0aCBkaWZmZXJlbnQgY2hhcmFjdGVyIgorbXNnc3RyICJSZW1vbnRlIMOgIGxhIGxpZ25lIGxhIHBsdXMgcHJvY2hlIGF5YW50IHVuIGNhcmFjdMOocmUgZGlmZsOpcmVudCIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBQUkRJRkxOIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDo1MAorbXNnaWQgImdvIHVwIHRvIG5lYXJlc3QgbGluZSB3aXRoIGRpZmZlcmVudCBjb250ZW50IgorbXNnc3RyICJSZW1vbnRlIMOgIGxhIGxpZ25lIGxhIHBsdXMgcHJvY2hlIGF5YW50IHVuIGNvbnRlbnUgZGlmZsOpcmVudCIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBBVFRSVVAgY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjY4Cittc2dpZCAiZ28gdXAgdG8gbmVhcmVzdCBsaW5lIHdpdGggZGlmZmVyZW50IGhpZ2hsaWdodGluZyIKK21zZ3N0ciAiUmVtb250ZSDDoCBsYSBsaWduZSBsYSBwbHVzIHByb2NoZSBheWFudCB1biBzdXJsaWduZW1lbnQgZGlmZsOpcmVudCIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBQUklOREVOVCBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6MTI1NworbXNnaWQgImdvIHVwIHRvIG5lYXJlc3QgbGluZSB3aXRoIGxlc3MgaW5kZW50IHRoYW4gY2hhcmFjdGVyIgorbXNnc3RyICJSZW1vbnRlIMOgIGxhIGxpZ25lIGxhIHBsdXMgcHJvY2hlIGF5YW50IG1vaW5zIGQnaW5kZW50YXRpb24gcXVlIGRlIGNhcmFjdMOocmUiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgUFJQUk9NUFQgY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjE0MgorbXNnaWQgImdvIHVwIHRvIHByZXZpb3VzIGNvbW1hbmQgcHJvbXB0IgorbXNnc3RyICJSZW1vbnRlIMOgIGwnaW52aXRlIGRlIGNvbW1hbmRlIHByw6ljw6lkZW50IgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIE1FTlVfUFJFVl9JVEVNIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDo0ODQKK21zZ2lkICJnbyB1cCB0byBwcmV2aW91cyBpdGVtIgorbXNnc3RyICJSZW1vbnRlIMOgIGwnw6lsw6ltZW50IHByw6ljw6lkZW50IgorCisjLiBHCisjOiBQcm9ncmFtcy9jbWRfdXRpbHMuYzoxNDYKK21zZ2lkICJncmVlbiIKK21zZ3N0ciAidmVydCIKKworIzogUHJvZ3JhbXMvcGdtcHJpdnNfbGludXguYzoyMTY3Cittc2dpZCAiZ3JvdXAgcGVybWlzc2lvbnMgYWRkZWQiCittc2dzdHIgInBlcm1pc3Npb25zIGRlIGdyb3VwZSBham91dMOpZXMiCisKKyM6IFByb2dyYW1zL2NtZF9taXNjZWxsYW5lb3VzLmM6MjEzCittc2dpZCAiaGVscCBub3QgYXZhaWxhYmxlIgorbXNnc3RyICJBaWRlIG5vbiBkaXNwb25pYmxlIgorCisjOiBQcm9ncmFtcy9zY3JfaGVscC5jOjIyOQorbXNnaWQgImhlbHAgc2NyZWVuIG5vdCByZWFkYWJsZSIKK21zZ3N0ciAiw4ljcmFuIGQnYWlkZSBpbGxpc2libGUiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgS0VZX0hPTUUgY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjE1OTEKK21zZ2lkICJob21lIGtleSIKK21zZ3N0ciAiVG91Y2hlIG9yaWdpbmUiCisKKyM6IFByb2dyYW1zL2NvbmZpZy5jOjU3MAorbXNnaWQgImlkZW50aWZpZXIsLi4uIgorbXNnc3RyICJpZGVudGlmaWFudCwuLi4iCisKKyM6IERyaXZlcnMvQnJhaWxsZS9CYXVtL2JyYWlsbGUuYzoxMTQ4Cittc2dpZCAiaWRsZSB0aW1lb3V0IgorbXNnc3RyICJEw6lsYWkgZCdpbmFjdGl2aXTDqSIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBTQVlfSElHSEVSIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDoxMTc1Cittc2dpZCAiaW5jcmVhc2Ugc3BlYWtpbmcgcGl0Y2giCittc2dzdHIgImF1Z21lbnRlciBsYSBoYXV0ZXVyIGRlIGxhIHZvaXgiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgU0FZX0ZBU1RFUiBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6NTU3Cittc2dpZCAiaW5jcmVhc2Ugc3BlYWtpbmcgcmF0ZSIKK21zZ3N0ciAiQXVnbWVudGUgbGUgZMOpYml0IGRlIGxhIHBhcm9sZSIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBTQVlfTE9VREVSIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDo1NzEKK21zZ2lkICJpbmNyZWFzZSBzcGVha2luZyB2b2x1bWUiCittc2dzdHIgIkF1Z21lbnRlIGxlIHZvbHVtZSBkZSBsYSBwYXJvbGUiCisKKyM6IFByb2dyYW1zL2NvcmUuYzoxMTI4Cittc2dpZCAiaW5kZW50IgorbXNnc3RyICJpbmRlbnRhdGlvbiIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBQQVNURV9ISVNUT1JZIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDoxMzU0Cittc2dpZCAiaW5zZXJ0IGNsaXBib2FyZCBoaXN0b3J5IGVudHJ5IGFmdGVyIHNjcmVlbiBjdXJzb3IiCittc2dzdHIgIkluc8OocmUgbCdlbnRyw6llIGRlIGwnaGlzdG9yaXF1ZSBkdSBwcmVzc2UtcGFwaWVycyBhcHLDqHMgbGUgY3Vyc2V1ciBkZSBsJ8OpY3JhbiIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBQQVNURSBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6NjAwCittc2dpZCAiaW5zZXJ0IGNsaXBib2FyZCB0ZXh0IGFmdGVyIHNjcmVlbiBjdXJzb3IiCittc2dzdHIgImluc8OocmUgbGUgdGV4dGUgZHUgcHJlc3NlLXBhcGllciBhcHLDqHMgbGUgY3Vyc2V1ciBkZSBsJ8OpY3JhbiIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBIT1NUX1BBU1RFIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDoxMDQ3Cittc2dpZCAiaW5zZXJ0IGhvc3QgY2xpcGJvYXJkIHRleHQgYWZ0ZXIgc2NyZWVuIGN1cnNvciIKK21zZ3N0ciAiaW5zw6hyZSBsZSB0ZXh0ZSBkdSBwcmVzc2UtcGFwaWVyIGjDtHRlIGFwcsOocyBsZSBjdXJzZXVyIGRlIGwnw6ljcmFuIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIEtFWV9JTlNFUlQgY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjE2MDcKK21zZ2lkICJpbnNlcnQga2V5IgorbXNnc3RyICJ0b3VjaGUgSW5zw6hyZSIKKworIzogUHJvZ3JhbXMvcHJvZ3JhbS5jOjE2NgorbXNnaWQgImluc3RhbGwgcGF0aCBub3QgYWJzb2x1dGUiCittc2dzdHIgIkNoZW1pbiBkJ2luc3RhbGxhdGlvbiBub24gYWJzb2x1IgorCisjOiBQcm9ncmFtcy9vcHRpb25zLmM6MTA0Cittc2dpZCAiaW52YWxpZCBjb3VudGVyIHNldHRpbmciCittc2dzdHIgIlBhcmFtw6h0cmUgZGUgY29tcHRldXIgaW52YWxpZGUiCisKKyM6IFByb2dyYW1zL2RhdGFmaWxlLmM6MzE4Cittc2dpZCAiaW52YWxpZCBlc2NhcGUgc2VxdWVuY2UiCittc2dzdHIgIlPDqXF1ZW5jZSBkJ8OpY2hhcHBlbWVudCBub24gdmFsaWRlIgorCisjOiBQcm9ncmFtcy9vcHRpb25zLmM6MTEzCittc2dpZCAiaW52YWxpZCBmbGFnIHNldHRpbmciCittc2dzdHIgIlBhcmFtw6h0cmUgZHUgZHJhcGVhdSBpbnZhbGlkZSIKKworIzogUHJvZ3JhbXMvY29uZmlnLmM6Mjg2MworbXNnaWQgImludmFsaWQgbWVzc2FnZSBob2xkIHRpbWVvdXQiCittc2dzdHIgIkTDqWxhaSBkJ2FwcGFyaXRpb24gZHUgbWVzc2FnZSBub24gdmFsaWRlIgorCisjLiB0aGUgb3BlcmFuZCBmb3IgYW4gb3B0aW9uIGlzIGludmFsaWQKKyM6IFByb2dyYW1zL29wdGlvbnMuYzo1OTQKK21zZ2lkICJpbnZhbGlkIG9wZXJhbmQiCittc2dzdHIgIm9ww6lyYW5kZSBpbnZhbGlkZSIKKworIzogUHJvZ3JhbXMvYnJsYXBpX3NlcnZlci5jOjQ1MTYKK21zZ2lkICJpbnZhbGlkIHRocmVhZCBzdGFjayBzaXplIgorbXNnc3RyICJUYWlsbGUgZGUgbGEgcGlsZSBkdSB0aHJlYWQgaW52YWxpZGUiCisKKyM6IERyaXZlcnMvQnJhaWxsZS9CcmFpbGxlTGl0ZS9icmFpbGxlLmM6NTkwCisjOiBEcml2ZXJzL0JyYWlsbGUvQnJhaWxsZUxpdGUvYnJhaWxsZS5jOjY2OAorbXNnaWQgImtleWJvYXJkIGVtdSBvZmYiCittc2dzdHIgIkTDqXNhY3RpdmF0aW9uIGRlIGwnw6ltdWxhdGlvbiBkdSBjbGF2aWVyIgorCisjOiBEcml2ZXJzL0JyYWlsbGUvQnJhaWxsZUxpdGUvYnJhaWxsZS5jOjU4OQorbXNnaWQgImtleWJvYXJkIGVtdSBvbiIKK21zZ3N0ciAiw4ltdWxhdGlvbiBkdSBjbGF2aWVyIGFjdGl2w6llIgorCisjLiBMICBCCisjOiBQcm9ncmFtcy9jbWRfdXRpbHMuYzoxNTMKK21zZ2lkICJsaWdodCBibHVlIgorbXNnc3RyICJibGV1IGNsYWlyIgorCisjLiBMIEdCCisjOiBQcm9ncmFtcy9jbWRfdXRpbHMuYzoxNTUKK21zZ2lkICJsaWdodCBjeWFuIgorbXNnc3RyICJjeWFuIGNsYWlyIgorCisjLiBMIEcKKyM6IFByb2dyYW1zL2NtZF91dGlscy5jOjE1NAorbXNnaWQgImxpZ2h0IGdyZWVuIgorbXNnc3RyICJ2ZXJ0IGNsYWlyIgorCisjLiBSR0IKKyM6IFByb2dyYW1zL2NtZF91dGlscy5jOjE1MQorbXNnaWQgImxpZ2h0IGdyZXkiCittc2dzdHIgImdyaXMgY2xhaXIiCisKKyMuIExSIEIKKyM6IFByb2dyYW1zL2NtZF91dGlscy5jOjE1NworbXNnaWQgImxpZ2h0IG1hZ2VudGEiCittc2dzdHIgIm1hZ2VudGEgY2xhaXIiCisKKyMuIExSCisjOiBQcm9ncmFtcy9jbWRfdXRpbHMuYzoxNTYKK21zZ2lkICJsaWdodCByZWQiCittc2dzdHIgInJvdWdlIGNsYWlyIgorCisjOiBQcm9ncmFtcy9jbWRfc3BlZWNoLmM6NTAwCittc2dpZCAibGluZSIKK21zZ3N0ciAibGlnbmUiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgQ09QWV9MSU5FIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDoxMjM5Cittc2dpZCAibGluZWFyIGNvcHkgdG8gY2hhcmFjdGVyIgorbXNnc3RyICJjb3BpZSBsaW7DqWFpcmUganVzcXUnYXUgY2FyYWN0w6hyZSIKKworIzogUHJvZ3JhbXMvY29uZmlnLmM6NzUwCittc2dpZCAibHZsfGNhdCwuLi4iCittc2dzdHIgImx2bHxjYXQsLi4uIgorCisjLiBSIEIKKyM6IFByb2dyYW1zL2NtZF91dGlscy5jOjE0OQorbXNnaWQgIm1hZ2VudGEiCittc2dzdHIgIm1hZ2VudGEiCisKKyMuIHRoZSBvcGVyYW5kIGZvciBhIHN0cmluZyBvcHRpb24gaGFzbid0IGJlZW4gc3BlY2lmaWVkCisjOiBQcm9ncmFtcy9vcHRpb25zLmM6NTg4Cittc2dpZCAibWlzc2luZyBvcGVyYW5kIgorbXNnc3RyICJPcMOpcmFuZGUgbWFucXVhbnQiCisKKyM6IFByb2dyYW1zL3BhcnNlLmM6NDcyCittc2dpZCAibWlzc2luZyBwYXJhbWV0ZXIgbmFtZSIKK21zZ3N0ciAiTm0gZHUgcGFyYW3DqHRyZSBtYW5xdWFudCIKKworIzogUHJvZ3JhbXMvcGFyc2UuYzo0NTgKK21zZ2lkICJtaXNzaW5nIHBhcmFtZXRlciBxdWFsaWZpZXIiCittc2dzdHIgIlF1YWxpZmlldXIgZHUgcGFyYW3DqHRyZSBtYW5xdWFudCIKKworIzogUHJvZ3JhbXMvcGFyc2UuYzo0MzQKK21zZ2lkICJtaXNzaW5nIHBhcmFtZXRlciB2YWx1ZSIKK21zZ3N0ciAiVmFsZXVyIGR1IHBhcmFtw6h0cmUgbWFucXVhbnRlIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIEdVSV9JVEVNX0ZSU1QgY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjExNDAKK21zZ2lkICJtb3ZlIHRvIHRoZSBmaXJzdCBpdGVtIGluIHRoZSBzY3JlZW4gYXJlYSIKK21zZ3N0ciAidmEgYXUgcHJlbWllciDDqWzDqW1lbnQgZGUgbGEgem9uZSBkZSBsJ8OpY3JhbiIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBHVUlfSVRFTV9MQVNUIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDoxMTYxCittc2dpZCAibW92ZSB0byB0aGUgbGFzdCBpdGVtIGluIHRoZSBzY3JlZW4gYXJlYSIKK21zZ3N0ciAidmEgYXUgZGVybmllciDDqWzDqW1lbnQgZGUgbGEgem9uZSBkZSBsJ8OpY3JhbiIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBHVUlfSVRFTV9ORVhUIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDoxMTU0Cittc2dpZCAibW92ZSB0byB0aGUgbmV4dCBpdGVtIGluIHRoZSBzY3JlZW4gYXJlYSIKK21zZ3N0ciAidmEgYXUgcHJvY2hhaW4gw6lsw6ltZW50IGRlIGxhIHpvbmUgZGUgbCfDqWNyYW4iCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgR1VJX0lURU1fUFJFViBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6MTE0NworbXNnaWQgIm1vdmUgdG8gdGhlIHByZXZpb3VzIGl0ZW0gaW4gdGhlIHNjcmVlbiBhcmVhIgorbXNnc3RyICJ2YSDDoCBsJ8OpbMOpbWVudCBwcsOpY8OpZGVudCBkZSBsYSB6b25lIGRlIGwnw6ljcmFuIgorCisjOiBQcm9ncmFtcy9tc2d0ZXN0LmM6NTcKK21zZ2lkICJuYW1lIgorbXNnc3RyICJub20iCisKKyM6IFByb2dyYW1zL2NvbmZpZy5jOjQzMyBQcm9ncmFtcy9jb25maWcuYzo0ODUgUHJvZ3JhbXMvY29uZmlnLmM6NTM4CisjOiBQcm9ncmFtcy9jb25maWcuYzo1NjAgUHJvZ3JhbXMvY29uZmlnLmM6NjM4IFByb2dyYW1zL2NvbmZpZy5jOjY1NworIzogUHJvZ3JhbXMvY29uZmlnLmM6NzAwCittc2dpZCAibmFtZT12YWx1ZSwuLi4iCittc2dzdHIgIm5vbT12YWxldXIsLi4uIgorCisjOiBEcml2ZXJzL0JyYWlsbGUvSXJpcy9icmFpbGxlLmM6MTUxMAorbXNnaWQgIm5hdGl2ZSIKK21zZ3N0ciAibmF0aWYiCisKKyM6IFByb2dyYW1zL2NvbmZpZy5jOjEyNDgKK21zZ2lkICJubyBrZXkgYmluZGluZ3MiCittc2dzdHIgIlBhcyBkZSByYWNjb3VyY2kgY2xhdmllciIKKworIzogUHJvZ3JhbXMvc2NyX2RyaXZlci5jOjM5Cittc2dpZCAibm8gc2NyZWVuIgorbXNnc3RyICJwYXMgZCfDqWNyYW4iCisKKyM6IFByb2dyYW1zL2NvbmZpZy5jOjExNgorbXNnaWQgIm5vbmUiCittc2dzdHIgIkF1Y3VuIgorCisjOiBQcm9ncmFtcy9jb25maWcuYzoxNTM3Cittc2dpZCAibm90IHNhdmVkIgorbXNnc3RyICJOb24gZW5yZWdpc3Ryw6kiCisKKyM6IFByb2dyYW1zL3BnbXByaXZzX2xpbnV4LmM6MjAxOAorbXNnaWQgIm5vdCBzd2l0Y2hpbmcgdG8gYW4gdW5wcml2aWxlZ2VkIHVzZXIiCittc2dzdHIgIm5lIHBhc3NlIHBhcyDDoCB1biB1dGlsaXNhdGV1ciBub24gcHJpdmlsw6lnacOpIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIEdVSV9BUFBfQUxFUlRTIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDoxMTEyCittc2dpZCAib3BlbiB0aGUgYXBwbGljYXRpb24gYWxlcnRzIHdpbmRvdyIKK21zZ3N0ciAib3V2cmUgbGEgZmVuw6p0cmUgZGVzIGFsZXJ0ZXMgZGUgbCdhcHBsaWNhdGlvbiIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBHVUlfQVBQX0xJU1QgY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjEwOTgKK21zZ2lkICJvcGVuIHRoZSBhcHBsaWNhdGlvbiBsaXN0IHdpbmRvdyIKK21zZ3N0ciAib3V2cmUgbGEgZmVuw6p0cmUgZGUgbGlzdGUgZGVzIGFwcGxpY2F0aW9ucyIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBHVUlfQVBQX01FTlUgY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjExMDUKK21zZ2lkICJvcGVuIHRoZSBhcHBsaWNhdGlvbi1zcGVjaWZpYyBtZW51IgorbXNnc3RyICJvdXZyZSBsZSBtZW51IHNww6ljaWZpcXVlIMOgIGwnYXBwbGljYXRpb24iCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgR1VJX0JSTF9BQ1RJT05TIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDoxMDYxCittc2dpZCAib3BlbiB0aGUgYnJhaWxsZSBhY3Rpb25zIHdpbmRvdyIKK21zZ3N0ciAib3V2cmUgbGEgZmVuw6p0cmUgZGVzIGFjdGlvbnMgYnJhaWxsZXMiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgR1VJX0RFVl9PUFRJT05TIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDoxMDkxCittc2dpZCAib3BlbiB0aGUgZGV2aWNlIG9wdGlvbnMgd2luZG93IgorbXNnc3RyICJvdXZyZSBsYSBmZW7DqnRyZSBkZXMgb3B0aW9ucyBkZSBsJ2FwcGFyZWlsIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIEdVSV9ERVZfU0VUVElOR1MgY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjEwODQKK21zZ2lkICJvcGVuIHRoZSBkZXZpY2Ugc2V0dGluZ3Mgd2luZG93IgorbXNnc3RyICJvdXZyZSBsYSBmZW7DqnRyZSBkZXMgcsOpZ2xhZ2VzIGRlIGwnYXBwYXJlaWwiCisKKyM6IFByb2dyYW1zL29wdGlvbnMuYzoyMDIKK21zZ2lkICJvcHRpb24iCittc2dzdHIgIm9wdGlvbiIKKworIzogUHJvZ3JhbXMvcGdtcHJpdnNfbGludXguYzoyMTUyCittc2dpZCAib3duZXJzaGlwIGNsYWltZWQiCittc2dzdHIgInByb3ByacOpdMOpIG9idGVudWUiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgS0VZX1BBR0VfRE9XTiBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6MTU4MworbXNnaWQgInBhZ2UtZG93biBrZXkiCittc2dzdHIgIlRvdWNoZSBwYWdlIHN1aXZhbnRlIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIEtFWV9QQUdFX1VQIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDoxNTc1Cittc2dpZCAicGFnZS11cCBrZXkiCittc2dzdHIgInRvdWNoZSBwYWdlIHByw6ljw6lkZW50ZSIKKworIzogUHJvZ3JhbXMvbXNndGVzdC5jOjQyCittc2dpZCAicGF0aCIKK21zZ3N0ciAiY2hlbWluIgorCisjOiBQcm9ncmFtcy9jb25maWcuYzoyODM2Cittc2dpZCAicGlkIGZpbGUgbm90IHNwZWNpZmllZCIKK21zZ3N0ciAiRmljaGllciBwaWQgbm9uIHNww6ljaWZpw6kiCisKKyM6IFByb2dyYW1zL3Byb2dyYW0uYzozMDgKK21zZ2lkICJwaWQgZmlsZSBvcGVuIGVycm9yIgorbXNnc3RyICJFcnJldXIgw6AgbCdvdXZlcnR1cmUgZHUgZmljaGllciBwaWQiCisKKyM6IFByb2dyYW1zL3Nway5jOjIzMgorbXNnaWQgInBpdGNoIgorbXNnc3RyICJUb24iCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgU0VUTEVGVCBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6MTI4MworbXNnaWQgInBsYWNlIGxlZnQgZW5kIG9mIGJyYWlsbGUgd2luZG93IGF0IGNoYXJhY3RlciIKK21zZ3N0ciAibWV0IGxlIGNvaW4gZ2F1Y2hlIGRlIGxhIGZlbsOqdHJlIGJyYWlsbGUgc3VyIGxlIGNhcmFjdMOocmUiCisKKyM6IERyaXZlcnMvQnJhaWxsZS9CYXVtL2JyYWlsbGUuYzoxMTQ3Cittc2dpZCAicG93ZXIgc3dpdGNoIgorbXNnc3RyICJDaGFuZ2VtZW50IGQnw6l0YXQgZCdhbGltZW50YXRpb24iCisKKyM6IFByb2dyYW1zL2NvbmZpZy5jOjY4MAorbXNnaWQgInF1YWxpdHkiCittc2dzdHIgInF1YWxpdMOpIgorCisjOiBQcm9ncmFtcy9zcGsuYzoyMDYKK21zZ2lkICJyYXRlIgorbXNnc3RyICJEw6liaXQiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgQ09QWV9SRUNUIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDoxMjMxCittc2dpZCAicmVjdGFuZ3VsYXIgY29weSB0byBjaGFyYWN0ZXIiCittc2dzdHIgImNvcGllIHJlY3Rhbmd1bGFpcmUganVzcXUnYXUgY2FyYWN0w6hyZSIKKworIy4gUgorIzogUHJvZ3JhbXMvY21kX3V0aWxzLmM6MTQ4Cittc2dpZCAicmVkIgorbXNnc3RyICJyb3VnZSIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBSRUZSRVNIIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDoxMDA1Cittc2dpZCAicmVmcmVzaCBicmFpbGxlIGRpc3BsYXkiCittc2dzdHIgInJhZnJhw65jaGl0IGwnYWZmaWNoZXVyIGJyYWlsbGUiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgUkVGUkVTSF9MSU5FIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDoxNDEzCittc2dpZCAicmVmcmVzaCBicmFpbGxlIGxpbmUiCittc2dzdHIgInJhZnJhw65jaGl0IGxhIGxpZ25lIGJyYWlsbGUiCisKKyM6IFByb2dyYW1zL2NvbmZpZy5jOjQ5MgorbXNnaWQgInJlZ2V4cCwuLi4iCittc2dzdHIgInJlZ2V4cCwuLi4iCisKKyM6IFByb2dyYW1zL2NvbmZpZy5jOjIwODEKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVpbml0aWFsaXppbmcgYnJhaWxsZSBkcml2ZXIiCittc2dzdHIgIlLDqWluaXRpYWxpc2F0aW9uIGR1IHBpbG90ZSBicmFpbGxlIgorCisjOiBQcm9ncmFtcy9jb25maWcuYzoyNTk0CisjLCBjLWZvcm1hdAorbXNnaWQgInJlaW5pdGlhbGl6aW5nIHNjcmVlbiBkcml2ZXIiCittc2dzdHIgIlLDqWluaXRpYWxpc2F0aW9uIGR1IHBpbG90ZSBkZSBsJ8OpY3JhbiIKKworIzogUHJvZ3JhbXMvY29uZmlnLmM6MjM5NAorIywgYy1mb3JtYXQKK21zZ2lkICJyZWluaXRpYWxpemluZyBzcGVlY2ggZHJpdmVyIgorbXNnc3RyICJSw6lpbml0aWFsaXNhdGlvbiBkZSBsYSBzeW50aMOoc2Ugdm9jYWxlIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIFNFVE1BUksgY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjEyOTEKK21zZ2lkICJyZW1lbWJlciBjdXJyZW50IGJyYWlsbGUgd2luZG93IHBvc2l0aW9uIgorbXNnc3RyICJNw6ltb3Jpc2UgbGEgcG9zaXRpb24gYWN0dWVsbGUgZGUgbGEgZmVuw6p0cmUgYnJhaWxsZSIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBBTEVSVCBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6MTQ0NQorbXNnaWQgInJlbmRlciBhbiBhbGVydCIKK21zZ3N0ciAiw4ltZXR0cmUgdW5lIGFsZXJ0ZSIKKworIzogRHJpdmVycy9CcmFpbGxlL0JyYWlsbGVMaXRlL2JyYWlsbGUuYzo2MDEKKyM6IERyaXZlcnMvQnJhaWxsZS9CcmFpbGxlTGl0ZS9icmFpbGxlLmM6NzgwCisjOiBEcml2ZXJzL0JyYWlsbGUvQnJhaWxsZUxpdGUvYnJhaWxsZS5jOjc4MgorIzogRHJpdmVycy9CcmFpbGxlL0JyYWlsbGVMaXRlL2JyYWlsbGUuYzo3OTEKK21zZ2lkICJyZXBlYXQgY291bnQiCittc2dzdHIgIlLDqXDDqXRpdGlvbiBkdSBjb21wdGFnZSIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBSRVNUQVJUQlJMIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDo2MDcKK21zZ2lkICJyZXN0YXJ0IGJyYWlsbGUgZHJpdmVyIgorbXNnc3RyICJSZWTDqW1hcnJlIGxlIHBpbG90ZSBicmFpbGxlIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIFJFU1RBUlRTUEVFQ0ggY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjYxNAorbXNnaWQgInJlc3RhcnQgc3BlZWNoIGRyaXZlciIKK21zZ3N0ciAiUmVkw6ltYXJyZSBsZSBwaWxvdGUgZGUgc3ludGjDqHNlIHZvY2FsZSIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBDTElQX1JFU1RPUkUgY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjg2NAorbXNnaWQgInJlc3RvcmUgY2xpcGJvYXJkIGZyb20gZGlzayIKK21zZ3N0ciAiUmVzdGF1cmUgbGUgcHJlc3NlLXBhcGllciDDoCBwYXJ0aXIgZHUgZGlzcXVlIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIFBSRUZMT0FEIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDo0NTcKK21zZ2lkICJyZXN0b3JlIHByZWZlcmVuY2VzIGZyb20gZGlzayIKK21zZ3N0ciAiUmVzdGF1cmUgbGVzIHByw6lmw6lyZW5jZXMgw6AgcGFydGlyIGR1IGRpc3F1ZSIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBHVUlfQVJFQV9BQ1RWIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDoxMTE5Cittc2dpZCAicmV0dXJuIHRvIHRoZSBhY3RpdmUgc2NyZWVuIGFyZWEiCittc2dzdHIgInJldG91cm5lIMOgIGxhIHpvbmUgYWN0aXZlIGRlIGwnw6ljcmFuIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIENMSVBfU0FWRSBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6ODU3Cittc2dpZCAic2F2ZSBjbGlwYm9hcmQgdG8gZGlzayIKK21zZ3N0ciAiRW5yZWdpc3RyZSBsZSBwcmVzc2UtcGFwaWVyIHN1ciBsZSBkaXNxdWUiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgUFJFRlNBVkUgY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjQ1MAorbXNnaWQgInNhdmUgcHJlZmVyZW5jZXMgdG8gZGlzayIKK21zZ3N0ciAiRW5yZWdpc3RyZSBsZXMgcHLDqWbDqXJlbmNlcyBzdXIgbGUgZGlzcXVlIgorCisjOiBQcm9ncmFtcy94YnJsYXBpLmM6OTEKK21zZ2lkICJzY2hlbWUrLi4uIgorbXNnc3RyICJzY2jDqW1hKy4uLiIKKworIzogUHJvZ3JhbXMvY29uZmlnLmM6MjQ3MAorbXNnaWQgInNjcmVlbiBkcml2ZXIgbm90IGxvYWRhYmxlIgorbXNnc3RyICJQaWxvdGUgZCfDqWNyYW4gbm9uIGNoYXJnZWFibGUiCisKKyM6IFByb2dyYW1zL2NvbmZpZy5jOjI1OTEKK21zZ2lkICJzY3JlZW4gZHJpdmVyIHJlc3RhcnRpbmciCittc2dzdHIgImxlIHBpbG90ZSBkZSBsJ8OpY3JhbiByZWTDqW1hcnJlIgorCisjOiBQcm9ncmFtcy9jbWRfbWlzY2VsbGFuZW91cy5jOjE3MQorbXNnaWQgInNjcmVlbiBkcml2ZXIgc3RvcHBlZCIKK21zZ3N0ciAicGlsb3RlIGRlIGwnw6ljcmFuIGFycsOqdMOpIgorCisjOiBEcml2ZXJzL1NjcmVlbi9BbmRyb2lkL3NjcmVlbi5jOjE4NAorbXNnaWQgInNjcmVlbiBsb2NrZWQiCittc2dzdHIgIsOpY3JhbiB2ZXJyb3VpbGzDqSIKKworIzogRHJpdmVycy9TY3JlZW4vTGludXgvc2NyZWVuLmM6MTUzMQorbXNnaWQgInNjcmVlbiBub3QgaW4gdGV4dCBtb2RlIgorbXNnc3RyICJMJ8OpY3JhbiBuJ2VzdCBwYXMgZW4gbW9kZSB0ZXh0ZSIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBQUlNFQVJDSCBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6MTU4Cittc2dpZCAic2VhcmNoIGJhY2t3YXJkIGZvciBjbGlwYm9hcmQgdGV4dCIKK21zZ3N0ciAiUmVjaGVyY2hlIGVuIGFycmnDqHJlIGR1IHRleHRlIGRhbnMgbGUgcHJlc3NlIHBhcGllciIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBOWFNFQVJDSCBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6MTY1Cittc2dpZCAic2VhcmNoIGZvcndhcmQgZm9yIGNsaXBib2FyZCB0ZXh0IgorbXNnc3RyICJSZWNoZXJjaGUgZW4gYXZhbnQgZHUgdGV4dGUgZGFucyBsZSBwcmVzc2UgcGFwaWVyIgorCisjOiBQcm9ncmFtcy9tZW51LmM6NDY5Cittc2dpZCAic2Vjb25kcyIKK21zZ3N0ciAic2Vjb25kZXMiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgVFhUU0VMX0FMTCBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6MTAyNgorbXNnaWQgInNlbGVjdCBhbGwgb2YgdGhlIHRleHQiCittc2dzdHIgInPDqWxlY3Rpb25uZSB0b3V0IGxlIHRleHRlIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIE1FTlVfTkVYVF9TRVRUSU5HIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDo1MDcKK21zZ2lkICJzZWxlY3QgbmV4dCBjaG9pY2UiCittc2dzdHIgIlPDqWxlY3Rpb24gZHUgY2hvaXggc3VpdmFudCIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBNRU5VX1BSRVZfU0VUVElORyBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6NTAwCittc2dpZCAic2VsZWN0IHByZXZpb3VzIGNob2ljZSIKK21zZ3N0ciAiU8OpbGVjdGlvbiBkdSBjaG9peCBwcsOpY8OpZGVudCIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBUVU5FUyBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6Mzk5Cittc2dpZCAic2V0IGFsZXJ0IHR1bmVzIG9uL29mZiIKK21zZ3N0ciAiQWN0aXZlIG91IGTDqXNhY3RpdmUgbGVzIHNvbnMgZCdhdmVydGlzc2VtZW50IgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIEFUVFJCTElOSyBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6MzgzCittc2dpZCAic2V0IGF0dHJpYnV0ZSBibGlua2luZyBvbi9vZmYiCittc2dzdHIgIkFjdGl2ZSBvdSBkw6lzYWN0aXZlIGxlIGNsaWdub3R0ZW1lbnQgZGVzIGF0dHJpYnV0cyIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBBVFRSVklTIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDozNzUKK21zZ2lkICJzZXQgYXR0cmlidXRlIHVuZGVybGluaW5nIG9uL29mZiIKK21zZ3N0ciAiQWN0aXZlIG91IGTDqXNhY3RpdmUgbGUgc291bGlnbmVtZW50IGRlcyBhdHRyaWJ1dHMiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgU0VUX0FUVFJJQlVURVNfVEFCTEUgY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjEzNzAKK21zZ2lkICJzZXQgYXR0cmlidXRlcyB0YWJsZSIKK21zZ3N0ciAiRMOpZmluaXQgbGEgdGFibGUgZGVzIGF0dHJpYnV0cyIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBBVVRPUkVQRUFUIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDo0MDcKK21zZ2lkICJzZXQgYXV0b3JlcGVhdCBvbi9vZmYiCittc2dzdHIgIkFjdGl2ZSBvdSBkw6lzYWN0aXZlIGxhIHLDqXDDqXRpdGlvbiBhdXRvbWF0aXF1ZSIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBBU1BLX0NNUF9XT1JEUyBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6NzEyCittc2dpZCAic2V0IGF1dG9zcGVhayBjb21wbGV0ZWQgd29yZHMgb24vb2ZmIgorbXNnc3RyICJBY3RpdmVyL2TDqXNhY3RpdmVyIGxhIGRpY3Rpb24gYXV0b21hdGlxdWUgZGVzIG1vdHMgY29tcGzDqXTDqXMiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgQVNQS19ERUxfQ0hBUlMgY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjY5NgorbXNnaWQgInNldCBhdXRvc3BlYWsgZGVsZXRlZCBjaGFyYWN0ZXJzIG9uL29mZiIKK21zZ3N0ciAiQWN0aXZlci9kw6lzYWN0aXZlciBsYSBkaWN0aW9uIGF1dG9tYXRpcXVlIGRlcyBtb3RzIGVmZmFjw6lzIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIEFTUEtfSU5ERU5UIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDo5OTgKK21zZ2lkICJzZXQgYXV0b3NwZWFrIGluZGVudCBvZiBjdXJyZW50IGxpbmUgb24vb2ZmIgorbXNnc3RyICJhY3RpdmUvZMOpc2FjdGl2ZSBsJ8Opbm9uY2lhdGlvbiBhdXRvbWF0aXF1ZSBkZSBsJ2luZGVudGF0aW9uIGRlIGxhIGxpZ25lIGNvdXJhbnRlIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIEFTUEtfSU5TX0NIQVJTIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDo2ODgKK21zZ2lkICJzZXQgYXV0b3NwZWFrIGluc2VydGVkIGNoYXJhY3RlcnMgb24vb2ZmIgorbXNnc3RyICJBY3RpdmVyL2TDqXNhY3RpdmVyIGxhIGRpY3Rpb24gYXV0b21hdGlxdWUgZGVzIGNhcmFjdMOocmVzIGluc8OpcsOpcyIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBBVVRPU1BFQUsgY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjQxNQorbXNnaWQgInNldCBhdXRvc3BlYWsgb24vb2ZmIgorbXNnc3RyICJBY3RpdmUgb3UgZMOpc2FjdGl2ZSBsYSBwYXJsZSBhdXRvbWF0aXF1ZSIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBBU1BLX1JFUF9DSEFSUyBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6NzA0Cittc2dpZCAic2V0IGF1dG9zcGVhayByZXBsYWNlZCBjaGFyYWN0ZXJzIG9uL29mZiIKK21zZ3N0ciAiQWN0aXZlIG91IGTDqXNhY3RpdmUgbGEgZGljdGlvbiBhdXRvbWF0aXF1ZSBkZXMgY2FyYWN0w6hyZXMgcmVtcGxhY8OpcyIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBBU1BLX1NFTF9DSEFSIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDo2ODAKK21zZ2lkICJzZXQgYXV0b3NwZWFrIHNlbGVjdGVkIGNoYXJhY3RlciBvbi9vZmYiCittc2dzdHIgIkFjdGl2ZXIvZMOpc2FjdGl2ZXIgbGEgZGljdGlvbiBhdXRvbWF0aXF1ZSBkdSBjYXJhY3TDqHJlIHPDqWxlY3Rpb25uw6kiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgQVNQS19TRUxfTElORSBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6NjcyCittc2dpZCAic2V0IGF1dG9zcGVhayBzZWxlY3RlZCBsaW5lIG9uL29mZiIKK21zZ3N0ciAiQWN0aXZlci9kw6lzYWN0aXZlciBsYSBkaWN0aW9uIGF1dG9tYXRpcXVlIGRlIGxhIGxpZ25lIHPDqWxlY3Rpb25uw6llIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIEJSTEtCRCBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6ODgwCittc2dpZCAic2V0IGJyYWlsbGUga2V5Ym9hcmQgZW5hYmxlZC9kaXNhYmxlZCIKK21zZ3N0ciAiQWN0aXZlIG91IGTDqXNhY3RpdmUgbGUgY2xhdmllciBicmFpbGxlIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIEJSTFVDRE9UUyBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6ODcyCittc2dpZCAic2V0IGJyYWlsbGUgdHlwaW5nIG1vZGUgZG90cy90ZXh0IgorbXNnc3RyICJkw6lmaW5pdCBsZSBtb2RlIGRlIHNhaXNpZSBicmFpbGxlIMOgIHRleHRlL3BvaW50cyIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBDQVBCTElOSyBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6MzkxCittc2dpZCAic2V0IGNhcGl0YWwgbGV0dGVyIGJsaW5raW5nIG9uL29mZiIKK21zZ3N0ciAiQWN0aXZlIG91IGTDqXNhY3RpdmUgbGUgY2xpZ25vdHRlbWVudCBkZXMgbGV0dHJlcyBtYWp1c2N1bGVzIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIENPTlRSQUNURUQgY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjExOTAKK21zZ2lkICJzZXQgY29udHJhY3RlZC9jb21wdXRlciBicmFpbGxlIgorbXNnc3RyICJhY3RpdmUgbGUgYnJhaWxsZSBhYnLDqWfDqS9pbmZvcm1hdGlxdWUiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgU0VUX0NPTlRSQUNUSU9OX1RBQkxFIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDoxMzc4Cittc2dpZCAic2V0IGNvbnRyYWN0aW9uIHRhYmxlIgorbXNnc3RyICJEw6lmaW5pdCBsYSB0YWJsZSBkZSBicmFpbGxlIGFicsOpZ8OpIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIERJU1BNRCBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6Mjk1Cittc2dpZCAic2V0IGRpc3BsYXkgbW9kZSBhdHRyaWJ1dGVzL3RleHQiCittc2dzdHIgIkJhc2N1bGUgbCdhZmZpY2hhZ2UgZW50cmUgbGVzIG1vZGVzIGF0dHJpYnV0cy10ZXh0ZSIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBDU1JISURFIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDozNDMKK21zZ2lkICJzZXQgaGlkZGVuIHNjcmVlbiBjdXJzb3Igb24vb2ZmIgorbXNnc3RyICJDYWNoZSBvdSBmYWl0IGFwcGFyYcOudHJlIGxlIGN1cnNldXIgZGUgbCfDqWNyYW4iCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgU0VUX0tFWUJPQVJEX1RBQkxFIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDoxMzg2Cittc2dpZCAic2V0IGtleWJvYXJkIHRhYmxlIgorbXNnc3RyICJEw6lmaW5pdCBsYSB0YWJsZSBkZSB0b3VjaGVzIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIFNFVF9MQU5HVUFHRV9QUk9GSUxFIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDoxMzk0Cittc2dpZCAic2V0IGxhbmd1YWdlIHByb2ZpbGUiCittc2dzdHIgIkTDqWZpbmlyIGxlIHByb2ZpbCBkZSBsYSBsYW5ndWUiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgQ1NSQkxJTksgY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjM2NworbXNnaWQgInNldCBzY3JlZW4gY3Vyc29yIGJsaW5raW5nIG9uL29mZiIKK21zZ3N0ciAiQWN0aXZlIG91IGTDqXNhY3RpdmUgbGUgY2xpZ25vdGVtZW50IGR1IGN1cnNldXIgZGUgbCfDqWNyYW4iCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgQ1NSU0laRSBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6MzU5Cittc2dpZCAic2V0IHNjcmVlbiBjdXJzb3Igc3R5bGUgYmxvY2svdW5kZXJsaW5lIgorbXNnc3RyICJCYXNjdWxlIGVudHJlIHVuIHN0eWxlIGRlIGN1cnNldXIgc291bGlnbsOpIG91IGVuIGJsb2MiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgQ1NSVklTIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDozMzUKK21zZ2lkICJzZXQgc2NyZWVuIGN1cnNvciB2aXNpYmlsaXR5IG9uL29mZiIKK21zZ3N0ciAiUmVuZCBsZSBjdXJzZXVyIHZpc2libGUgb3UgaW52aXNpYmxlIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIEZSRUVaRSBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6Mjg3Cittc2dpZCAic2V0IHNjcmVlbiBpbWFnZSBmcm96ZW4vdW5mcm96ZW4iCittc2dzdHIgIkdlbGVyL2TDqWdlbGVyIGwnaW1hZ2UgZGUgbCfDqWNyYW4iCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgQ09NUEJSTDYgY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjExOTgKK21zZ2lkICJzZXQgc2l4L2VpZ2h0IGRvdCBjb21wdXRlciBicmFpbGxlIgorbXNnc3RyICJhY3RpdmUgbGUgYnJhaWxsZSBpbmZvcm1hdGlxdWUgc2l4L2h1aXQgcG9pbnRzIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIFNLUEJMTktXSU5TIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDozMjcKK21zZ2lkICJzZXQgc2tpcHBpbmcgb2YgYmxhbmsgYnJhaWxsZSB3aW5kb3dzIG9uL29mZiIKK21zZ3N0ciAiQWN0aXZlIG91IGTDqXNhY3RpdmUgbGUgc2F1dCBkZXMgZmVuw6p0cmVzIGJyYWlsbGUgdmlkZXMiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgU0tQSURMTlMgY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjMxOQorbXNnaWQgInNldCBza2lwcGluZyBvZiBsaW5lcyB3aXRoIGlkZW50aWNhbCBjb250ZW50IG9uL29mZiIKK21zZ3N0ciAiQWN0aXZhdGlvbi9kw6lzYWN0aXZhdGlvbiBkdSBzYXV0IGRlIGxpZ25lIGF5YW50IHVuIGNvbnRlbnUgaWRlbnRpcXVlIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIFNMSURFV0lOIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDozMTEKK21zZ2lkICJzZXQgc2xpZGluZyBicmFpbGxlIHdpbmRvdyBvbi9vZmYiCittc2dzdHIgIkFjdGl2ZSBvdSBkw6lzYWN0aXZlIGxlIGdsaXNzZW1lbnQgZGUgbGEgZmVuw6p0cmUgYnJhaWxsZSIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBTSE9XX0NVUlJfTE9DTiBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6ODUwCittc2dpZCAic2V0IHNwZWVjaCBjdXJzb3IgdmlzaWJpbGl0eSBvbi9vZmYiCittc2dzdHIgIlJlbmQgbGUgY3Vyc2V1ciBkZSBzeW50aMOoc2UgdmlzaWJsZSBvdSBpbnZpc2libGUiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgVFhUU0VMX1NFVCBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6MTQyOQorbXNnaWQgInNldCB0ZXh0IHNlbGVjdGlvbiIKK21zZ3N0ciAiZMOpZmluaXQgbGEgc8OpbGVjdGlvbiBkZSB0ZXh0ZSIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBTSVhET1RTIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDozMDMKK21zZ2lkICJzZXQgdGV4dCBzdHlsZSA2LWRvdC84LWRvdCIKK21zZ3N0ciAiQmFzY3VsZSBsJ2FwcGFyZW5jdSBkZSB0ZXh0ZSBlbnRyZSA2IGV0IDggcG9pbnRzIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIFNFVF9URVhUX1RBQkxFIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDoxMzYyCittc2dpZCAic2V0IHRleHQgdGFibGUiCittc2dzdHIgIkTDqWZpbml0IGxhIHRhYmxlIGR1IHRleHRlIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIFRPVUNIX05BViBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6OTgzCittc2dpZCAic2V0IHRvdWNoIG5hdmlnYXRpb24gb24vb2ZmIgorbXNnc3RyICJBY3RpdmUgb3UgZMOpc2FjdGl2ZSBsYSBuYXZpZ2F0aW9uIHRhY3RpbGUiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgQ1NSVFJLIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDozNTEKK21zZ2lkICJzZXQgdHJhY2sgc2NyZWVuIGN1cnNvciBvbi9vZmYiCittc2dzdHIgIkFjdGl2ZSBvdSBkw6lzYWN0aShlIGxhIHBvdXJzdWl0ZSBkdSBjdXJzZXVyIGRlIGwnw6ljcmFuIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIFRJTUUgY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjY1NgorbXNnaWQgInNob3cgY3VycmVudCBkYXRlIGFuZCB0aW1lIgorbXNnc3RyICJBZmZpY2hlIGxhIGRhdGUgZXQgbCdoZXVyZSBhY3R1ZWxsZXMiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgR1VJX1RJVExFIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDoxMDU0Cittc2dpZCAic2hvdyB0aGUgd2luZG93IHRpdGxlIgorbXNnc3RyICJhZmZpY2hlIGxlIHRpdHJlIGRlIGxhIGZlbsOqdHJlIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIElORElDQVRPUlMgY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjEwMTIKK21zZ2lkICJzaG93IHZhcmlvdXMgZGV2aWNlIHN0YXR1cyBpbmRpY2F0b3JzIgorbXNnc3RyICJhZmZpY2hlIGRpdmVycyBpbmRpY2F0ZXVycyBkZSBzdGF0dXMgZGUgbCdhcHBhcmVpbCIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjEwNTcKK21zZ2lkICJzb3VuZGNhcmQgZGlnaXRhbCBhdWRpbyIKK21zZ3N0ciAiU29uIG51bcOpcmlxdWUgZGUgbGEgY2FydGUgc29uIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6MTA1OQorbXNnaWQgInNvdW5kY2FyZCBzeW50aGVzaXplciIKK21zZ3N0ciAiU3ludGjDqXRpc2V1ciBkZSBsYSBjYXJ0ZSBzb24iCisKKyM6IFByb2dyYW1zL2NtZC5jOjI3NyBQcm9ncmFtcy9jb3JlLmM6MTA1MQorbXNnaWQgInNwYWNlIgorbXNnc3RyICJFc3BhY2UiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgU1BFQUtfQ1VSUl9DSEFSIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDo3MTkKK21zZ2lkICJzcGVhayBjdXJyZW50IGNoYXJhY3RlciIKK21zZ3N0ciAiTGlyZSBsZSBjYXJhY3TDqHJlIGFjdHVlbCIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBTQVlfTElORSBjb21tYW5kLgorIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBTUEVBS19DVVJSX0xJTkUgY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjUyOSBQcm9ncmFtcy9jbWRzLmF1dG8uaDo3NjUKK21zZ2lkICJzcGVhayBjdXJyZW50IGxpbmUiCittc2dzdHIgIkxpdCB2b2NhbGVtZW50IGxhIGxpZ25lIGFjdHVlbGxlIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIFNQRUFLX0NVUlJfV09SRCBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6NzQyCittc2dpZCAic3BlYWsgY3VycmVudCB3b3JkIgorbXNnc3RyICJMaXJlIGxlIG1vdCBhY3R1ZWwiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgU0FZX0JFTE9XIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDo1NDMKK21zZ2lkICJzcGVhayBmcm9tIGN1cnJlbnQgbGluZSB0aHJvdWdoIGJvdHRvbSBvZiBzY3JlZW4iCittc2dzdHIgIkxpdCB2b2NhbGVtZW50IGRlcHVpcyBsYSBsaWduZSBhY3R1ZWxsZSBqdXNxdSdhdSBiYXMgZGUgbCfDqWNyYW4iCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgU0FZX0FMTCBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6MTE4MgorbXNnaWQgInNwZWFrIGZyb20gdG9wIG9mIHNjcmVlbiB0aHJvdWdoIGJvdHRvbSBvZiBzY3JlZW4iCittc2dzdHIgIsOpbm9uY2UgbCfDqWNyYW4gZGUgaGF1dCBlbiBiYXMiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgU0FZX0FCT1ZFIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDo1MzYKK21zZ2lkICJzcGVhayBmcm9tIHRvcCBvZiBzY3JlZW4gdGhyb3VnaCBjdXJyZW50IGxpbmUiCittc2dzdHIgIkxpdCB2b2NhbGVtZW50IGR1IGhhdXQgZGUgbCfDqWNyYW4ganVzcXXDoCBsYSBsaWduZSBhY3R1ZWxsZSIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBTUEVBS19JTkRFTlQgY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjk5MAorbXNnaWQgInNwZWFrIGluZGVudCBvZiBjdXJyZW50IGxpbmUiCittc2dzdHIgIsOpbm9uY2UgbCdpbmRlbnRhdGlvbiBkZSBsYSBsaWduZSBjb3VyYW50ZSIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBTUEVBS19DVVJSX0xPQ04gY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjg0MgorbXNnaWQgInNwZWFrIHNwZWVjaCBjdXJzb3IgbG9jYXRpb24iCittc2dzdHIgIkxpdCBsw6Agb8O5IGVzdCBsZSBjdXJzZXVyIGRlIHN5bnRow6hzZSIKKworIzogUHJvZ3JhbXMvbXNndGVzdC5jOjUwCittc2dpZCAic3BlY2lmaWVyIgorbXNnc3RyICJzcMOpY2lmaWNhdGV1ciIKKworIzogUHJvZ3JhbXMvY29uZmlnLmM6MjI0MgorbXNnaWQgInNwZWVjaCBkcml2ZXIgbm90IGxvYWRhYmxlIgorbXNnc3RyICJQaWxvdGUgZGUgc3ludGjDqHNlIHZvY2FsZSBub24gY2hhcmdlYWJsZSIKKworIzogUHJvZ3JhbXMvY29uZmlnLmM6MjM5MQorbXNnaWQgInNwZWVjaCBkcml2ZXIgcmVzdGFydGluZyIKK21zZ3N0ciAibGUgcGlsb3RlIGRlIGxhIHN5bnRow6hzZSB2b2NhbGUgcmVkw6ltYXJyZSIKKworIzogUHJvZ3JhbXMvY21kX3NwZWVjaC5jOjEwNAorbXNnaWQgInNwZWVjaCBkcml2ZXIgc3RvcHBlZCIKK21zZ3N0ciAicGlsb3RlIGRlIGxhIHN5bnRow6hzZSB2b2NhbGUgYXJyw6p0w6kiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgU1BFTExfQ1VSUl9XT1JEIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDo4MjcKK21zZ2lkICJzcGVsbCBjdXJyZW50IHdvcmQiCittc2dzdHIgIsOJcGVsbGUgbGUgbW90IGFjdHVlbCIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBDTElQX05FVyBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6MTIxNQorbXNnaWQgInN0YXJ0IG5ldyBjbGlwYm9hcmQgYXQgY2hhcmFjdGVyIgorbXNnc3RyICJEw6ltYXJyZSB1biBub3V2ZWF1IHByZXNzZS1wYXBpZXIgYXUgY2FyYWN0w6hyZSIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBUWFRTRUxfU1RBUlQgY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjE0MjEKK21zZ2lkICJzdGFydCB0ZXh0IHNlbGVjdGlvbiIKK21zZ3N0ciAiY29tbWVuY2UgbGEgc8OpbGVjdGlvbiBkZSB0ZXh0ZSIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBCUkxfU1RBUlQgY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjkxNQorbXNnaWQgInN0YXJ0IHRoZSBicmFpbGxlIGRyaXZlciIKK21zZ3N0ciAiRMOpbWFycmUgbGUgcGlsb3RlIGJyYWlsbGUiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgU0NSX1NUQVJUIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDo5NDMKK21zZ2lkICJzdGFydCB0aGUgc2NyZWVuIGRyaXZlciIKK21zZ3N0ciAiRMOpbWFycmUgbGUgcGlsb3RlIGRlIGwnw6ljcmFuIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIFNQS19TVEFSVCBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6OTI5Cittc2dpZCAic3RhcnQgdGhlIHNwZWVjaCBkcml2ZXIiCittc2dzdHIgIkTDqW1hcnJlIGxlIHBpbG90ZSBkZSBzeW50aMOoc2Ugdm9jYWxlIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIE1VVEUgY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjUxNAorbXNnaWQgInN0b3Agc3BlYWtpbmciCittc2dzdHIgIkFycsOqdCBkZSBsYSBwYXJvbGUiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgQlJMX1NUT1AgY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjkwOAorbXNnaWQgInN0b3AgdGhlIGJyYWlsbGUgZHJpdmVyIgorbXNnc3RyICJEw6ltYXJyZSBsZSBwaWxvdGUgYnJhaWxsZSIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBTQ1JfU1RPUCBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6OTM2Cittc2dpZCAic3RvcCB0aGUgc2NyZWVuIGRyaXZlciIKK21zZ3N0ciAiQXJyw6p0ZSBsZSBwaWxvdGUgZGUgbCfDqWNyYW4iCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgU1BLX1NUT1AgY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjkyMgorbXNnaWQgInN0b3AgdGhlIHNwZWVjaCBkcml2ZXIiCittc2dzdHIgIkFycsOqdGUgbGUgcGlsb3RlIGRlIHN5bnRow6hzZSB2b2NhbGUiCisKKyM6IFByb2dyYW1zL3hicmxhcGkuYzo2NTYKK21zZ2lkICJzdHJhbmdlIG9sZCBlcnJvciBoYW5kbGVyXG4iCittc2dzdHIgImFuY2llbiBnZXN0aW9ubmFpcmUgZCdlcnJldXJzIMOpdHJhbmdlXG4iCisKKyM6IFByb2dyYW1zL2JybHR0eS1jbGRyLmM6MzkKK21zZ2lkICJzdHJpbmciCittc2dzdHIgImNoYcOubmUiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgQ09OVEVYVCBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6MTQ5NQorbXNnaWQgInN3aXRjaCB0byBjb21tYW5kIGNvbnRleHQiCittc2dzdHIgIlZhIGF1IGNvbnRleHRlIGRlIGxhIGNvbW1hbmRlIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIFNXSVRDSFZUIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDoxMjQ3Cittc2dpZCAic3dpdGNoIHRvIHNwZWNpZmljIHZpcnR1YWwgdGVybWluYWwiCittc2dzdHIgIlZhIMOgIHVuIHRlcm1pbmFsIHZpcnR1ZWwgc3DDqWNpZmlxdWUiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgR1VJX0FSRUFfTkVYVCBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6MTEzMworbXNnaWQgInN3aXRjaCB0byB0aGUgbmV4dCBzY3JlZW4gYXJlYSIKK21zZ3N0ciAicGFzc2Ugw6AgbGEgem9uZSBzdWl2YW50ZSBkZSBsJ8OpY3JhbiIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBTV0lUQ0hWVF9ORVhUIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDo1ODUKK21zZ2lkICJzd2l0Y2ggdG8gdGhlIG5leHQgdmlydHVhbCB0ZXJtaW5hbCIKK21zZ3N0ciAiVmEgYXUgdGVybWluYWwgdmlydHVlbCBzdWl2YW50IgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIEdVSV9BUkVBX1BSRVYgY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjExMjYKK21zZ2lkICJzd2l0Y2ggdG8gdGhlIHByZXZpb3VzIHNjcmVlbiBhcmVhIgorbXNnc3RyICJwYXNzZSDDoCBsYSB6b25lIHByw6ljw6lkZW50ZSBkZSBsJ8OpY3JhbiIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBTV0lUQ0hWVF9QUkVWIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDo1NzgKK21zZ2lkICJzd2l0Y2ggdG8gdGhlIHByZXZpb3VzIHZpcnR1YWwgdGVybWluYWwiCittc2dzdHIgIlZhIGF1IHRlcm1pbmFsIHZpcnR1ZWwgcHLDqWPDqWRlbnQiCisKKyM6IFByb2dyYW1zL3BnbXByaXZzX2xpbnV4LmM6MTk5NAorbXNnaWQgInN3aXRjaGVkIHRvIHVucHJpdmlsZWdlZCB1c2VyIgorbXNnc3RyICJwYXNzw6kgw6AgdW4gdXRpbGlzYXRldXIgbm9uIHByaXZpbMOpZ2nDqSIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBLRVlfVEFCIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDoxNTE5Cittc2dpZCAidGFiIGtleSIKK21zZ3N0ciAiVG91Y2hlIHRhYiIKKworIzogUHJvZ3JhbXMvY29uZmlnLmM6Mzc5IFByb2dyYW1zL2NvbmZpZy5jOjM4NgorbXNnaWQgInRleHQiCittc2dzdHIgIlRleHRlIgorCisjOiBQcm9ncmFtcy9tc2d0ZXN0LmM6NDUKK21zZ2lkICJ0aGUgbG9jYWxlIGRpcmVjdG9yeSBjb250YWluaW5nIHRoZSB0cmFuc2xhdGlvbnMiCittc2dzdHIgImxlIHLDqXBlcnRvaXJlIGRlIGxhIGxvY2FsZSBjb250ZW5hbnQgbGVzIHRyYWR1Y3Rpb25zIgorCisjOiBQcm9ncmFtcy9tc2d0ZXN0LmM6NTIKK21zZ2lkICJ0aGUgbG9jYWxlIGluIHdoaWNoIHRvIGxvb2sgdXAgYSB0cmFuc2xhdGlvbiIKK21zZ3N0ciAibGEgbG9jYWxlIGRhbnMgbGFxdWVsbGUgY2hlcmNoZXIgdW5lIHRyYWR1Y3Rpb24iCisKKyM6IFByb2dyYW1zL21zZ3Rlc3QuYzo1OQorbXNnaWQgInRoZSBuYW1lIG9mIHRoZSBkb21haW4gY29udGFpbmluZyB0aGUgdHJhbnNsYXRpb25zIgorbXNnc3RyICJsZSBub20gZHUgZG9tYWluZSBjb250ZW5hbnQgbGVzIHRyYWR1Y3Rpb25zIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIFBBU1NET1RTIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDoxNDYzCittc2dpZCAidHlwZSBicmFpbGxlIGRvdHMiCittc2dzdHIgIlNhaXNpZSBkZSBwb2ludHMgYnJhaWxsZSIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBQQVNTQ0hBUiBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6MTQ1NAorbXNnaWQgInR5cGUgdW5pY29kZSBjaGFyYWN0ZXIiCittc2dzdHIgIkNhcmFjdMOocmUgZGUgdHlwZSB1bmljb2RlIgorCisjOiBQcm9ncmFtcy94YnJsYXBpLmM6OTc0Cittc2dpZCAidW5leHBlY3RlZCBibG9jayB0eXBlIgorbXNnc3RyICJUeXBlIGRlIGJsb2MgaW5hdHRlbmR1IgorCisjOiBQcm9ncmFtcy94YnJsYXBpLmM6ODY0Cittc2dpZCAidW5leHBlY3RlZCBjbWQiCittc2dzdHIgIkNtZCBpbXByw6l2dWUiCisKKyM6IFByb2dyYW1zL2NtZF9xdWV1ZS5jOjE1NworbXNnaWQgInVuaGFuZGxlZCBjb21tYW5kIgorbXNnc3RyICJDb21tYW5kZSBub24gcHJpc2UgZW4gY2hhcmdlIgorCisjOiBQcm9ncmFtcy9jbWQuYzoxOTgKK21zZ2lkICJ1bmtub3duIGNvbW1hbmQiCittc2dzdHIgIkNvbW1hbmRlIGluY29ubnVlIgorCisjOiBQcm9ncmFtcy9vcHRpb25zLmM6ODI4Cittc2dpZCAidW5rbm93biBjb25maWd1cmF0aW9uIGRpcmVjdGl2ZSIKK21zZ3N0ciAiTGlnbmUgZGUgY29uZmlndXJhdGlvbiBub24gcmVjb25udWUiCisKKyM6IFByb2dyYW1zL2NvbmZpZy5jOjc5MQorbXNnaWQgInVua25vd24gbG9nIGxldmVsIG9yIGNhdGVnb3J5IgorbXNnc3RyICJOaXZlYXUgb3UgY2F0w6lnb3JpZSBkZSBqb3VybmFsaXNhdGlvbiBpbmNvbm51IgorCisjLiBhbiB1bmtub3duIG9wdGlvbiBoYXMgYmVlbiBzcGVjaWZpZWQKKyM6IFByb2dyYW1zL29wdGlvbnMuYzo1NzUKK21zZ2lkICJ1bmtub3duIG9wdGlvbiIKK21zZ3N0ciAiT3B0aW9uIG5vbiByZWNvbm51ZSIKKworIzogUHJvZ3JhbXMvY29uZmlnLmM6MzI3Cittc2dpZCAidW5rbm93biBzY3JlZW4gY29udGVudCBxdWFsaXR5IgorbXNnc3RyICJxdWFsaXTDqSBkdSBjb250ZW51IGRlIGwnw6ljcmFuIGluY29ubnVlIgorCisjOiBQcm9ncmFtcy9wYXJzZS5jOjUwMQorbXNnaWQgInVuc3VwcG9ydGVkIHBhcmFtZXRlciIKK21zZ3N0ciAiUGFyYW3DqHRyZSBub24gc3VwcG9ydMOpIgorCisjOiBQcm9ncmFtcy9zcGsuYzoxODAKK21zZ2lkICJ2b2x1bWUiCittc2dzdHIgIlZvbHVtZSIKKworIy4gTFJHQgorIzogUHJvZ3JhbXMvY21kX3V0aWxzLmM6MTU5Cittc2dpZCAid2hpdGUiCittc2dzdHIgImJsYW5jIgorCisjOiBQcm9ncmFtcy9wZ21wcml2c19saW51eC5jOjE4NTYKK21zZ2lkICJ3b3JraW5nIGRpcmVjdG9yeSBjaGFuZ2VkIgorbXNnc3RyICJyw6lwZXJ0b2lyZSBjb3VyYW50IGNoYW5nw6kiCisKKyM6IFByb2dyYW1zL21zZ3Rlc3QuYzo2NQorbXNnaWQgIndyaXRlIHRoZSB0cmFuc2xhdGlvbnMgdXNpbmcgVVRGLTgiCittc2dzdHIgIsOpY3JpcmUgbGVzIHRyYWR1Y3Rpb25zIGVuIHV0aWxpc2FudCBVVEYtOCIKKworIzogUHJvZ3JhbXMveGJybGFwaS5jOjkxMQorIywgYy1mb3JtYXQKK21zZ2lkICJ4YnJsYXBpOiBDb3VsZG4ndCBmaW5kIGEga2V5Y29kZSB0byByZW1hcCBmb3Igc2ltdWxhdGluZyB1bmJvdW5kIGtleXN5bSAlMDhYXG4iCittc2dzdHIgInhicmxhcGkgOiBOJ2EgcGFzIHB1IHRyb3V2ZXIga2V5Y29kZSBhc3NpZ25hYmxlIMOgIGxhIHNpbXVsYXRpb24gZHUgY2FyYWN0w6hyZSAlMDhYIHF1aSBuJ2VzdCBwYXMgbGnDqSDDoCB1bmUgdG91Y2hlXG4iCisKKyM6IFByb2dyYW1zL3hicmxhcGkuYzo4OTgKKyMsIGMtZm9ybWF0Cittc2dpZCAieGJybGFwaTogQ291bGRuJ3QgZmluZCBtb2RpZmllcnMgdG8gYXBwbHkgdG8gJWQgZm9yIGdldHRpbmcga2V5c3ltICUwOFhcbiIKK21zZ3N0ciAieGJybGFwaSA6IE4nYSBwYXMgcHUgdHJvdXZlciBkZSBtb2RpZmljYXRldXIgYXBwbGljYWJsZSDDoCAlZCBwb3VyIG9idGVuaXIgbGUgc3ltYm9sZSBkZSB0b3VjaGUgJTA4WFxuIgorCisjOiBQcm9ncmFtcy94YnJsYXBpLmM6ODc0CisjLCBjLWZvcm1hdAorbXNnaWQgInhicmxhcGk6IENvdWxkbid0IHRyYW5zbGF0ZSBrZXlzeW0gJTA4WCB0byBrZXljb2RlLlxuIgorbXNnc3RyICJ4YnJsYXBpIDogTidhIHBhcyBwdSB0cmFkdWlyZSBsZSBzeW1ib2xlIGRlIHRvdWNoZSAlMDhYIGVuIGNvZGUgZGUgdG91Y2hlLlxuIgorCisjOiBQcm9ncmFtcy94YnJsYXBpLmM6NDE1CisjLCBjLWZvcm1hdAorbXNnaWQgInhicmxhcGk6IFggRXJyb3IgJWQsICVzIG9uIGRpc3BsYXkgJXNcbiIKK21zZ3N0ciAieGJybGFwaTogRXJyZXVyIFggJWQsICVzIHN1ciBsJ8OpY3JhbiAlc1xuIgorCisjOiBQcm9ncmFtcy94YnJsYXBpLmM6NDU3CisjLCBjLWZvcm1hdAorbXNnaWQgInhicmxhcGk6IGJhZCBmb3JtYXQgZm9yIFZUIG51bWJlclxuIgorbXNnc3RyICJ4YnJsYXBpIDogTWF1dmFpcyBmb3JtYXQgZGUgbnVtw6lybyBkZSB0ZXJtaW5hbCB2aXJ0dWVsXG4iCisKKyM6IFByb2dyYW1zL3hicmxhcGkuYzo0NjAKKyMsIGMtZm9ybWF0Cittc2dpZCAieGJybGFwaTogYmFkIHR5cGUgZm9yIFZUIG51bWJlclxuIgorbXNnc3RyICJ4YnJsYXBpIDogTWF1dmFpcyB0eXBlIGRlIG51bcOpcm8gZGUgdGVybWluYWwgdmlydHVlbFxuIgorCisjOiBQcm9ncmFtcy94YnJsYXBpLmM6NDM5CisjLCBjLWZvcm1hdAorbXNnaWQgInhicmxhcGk6IGNhbm5vdCBnZXQgcm9vdCB3aW5kb3cgWEZyZWU4Nl9WVCBwcm9wZXJ0eVxuIgorbXNnc3RyICJ4YnJsYXBpIDogTmUgcGV1dCBwYXMgdHJvdXZlciBsYSBwcm9wcmnDqXTDqSBYRnJlZTg2X1ZUIGRlIGxhIGZlbsOqdHJlIHJhY2luZVxuIgorCisjCisjOiBQcm9ncmFtcy94YnJsYXBpLmM6MzE2CisjLCBjLWZvcm1hdAorbXNnaWQgInhicmxhcGk6IGNhbm5vdCB3cml0ZSB3aW5kb3cgbmFtZSAlc1xuIgorbXNnc3RyICJ4YnJsYXBpIDogTmUgcGV1dCBwYXMgw6ljcmlyZSBsZSBub20gZGUgbGEgZmVuw6p0cmUgJXNcbiIKKworIzogUHJvZ3JhbXMveGJybGFwaS5jOjc2NAorIywgYy1mb3JtYXQKK21zZ2lkICJ4YnJsYXBpOiBkaWRuJ3QgZ3JhYiBwYXJlbnQgb2YgJSMwMTBseFxuIgorbXNnc3RyICJ4YnJsYXBpIDogbidhIHBhcyBleHRyYWl0IGxlIHBhcmVudCBkZSAlIzAxMGx4XG4iCisKKyM6IFByb2dyYW1zL3hicmxhcGkuYzo3ODIKKyMsIGMtZm9ybWF0Cittc2dpZCAieGJybGFwaTogZGlkbid0IGdyYWIgd2luZG93ICUjMDEwbHhcbiIKK21zZ3N0ciAieGJybGFwaSA6IG4nYSBwYXMgZXh0cmFpdCBsYSBmZW7DqnRyZSBkZSAlIzAxMGx4XG4iCisKKyM6IFByb2dyYW1zL3hicmxhcGkuYzo1ODIKKyMsIGMtZm9ybWF0Cittc2dpZCAieGJybGFwaTogZGlkbid0IGdyYWIgd2luZG93ICUjMDEwbHggYnV0IGdvdCBmb2N1c1xuIgorbXNnc3RyICJ4YnJsYXBpIDogbidhIHBhcyBleHRyYWl0IGxhIGZlbsOqdHJlICUjMDEwbHggbWFpcyBhIHLDqWN1cMOpcsOpIGxlIGZvY3VzXG4iCisKKyM6IFByb2dyYW1zL3hicmxhcGkuYzo0NDgKKyMsIGMtZm9ybWF0Cittc2dpZCAieGJybGFwaTogbW9yZSB0aGFuIG9uZSBpdGVtIGZvciBWVCBudW1iZXJcbiIKK21zZ3N0ciAieGJybGFwaSA6IFBsdXMgZCd1biDDqWzDqW1lbnQgcG91ciBsZSBudW3DqXJvIGRlIHRlcm1pbmFsIHZpcnR1ZWxcbiIKKworIzogUHJvZ3JhbXMveGJybGFwaS5jOjQzMworIywgYy1mb3JtYXQKK21zZ2lkICJ4YnJsYXBpOiBubyBYRnJlZTg2X1ZUIGF0b21cbiIKK21zZ3N0ciAieGJybGFwaSA6IFBhcyBkJ2F0b21lIFhGcmVlODZfVlRcbiIKKworIzogUHJvZ3JhbXMveGJybGFwaS5jOjQ0NAorIywgYy1mb3JtYXQKK21zZ2lkICJ4YnJsYXBpOiBubyBpdGVtcyBmb3IgVlQgbnVtYmVyXG4iCittc2dzdHIgInhicmxhcGkgOiBQYXMgZCfDqWzDqW1lbnRzIHBvdXIgbGUgbnVtw6lybyBkZSB0ZXJtaW5hbCB2aXJ0dWVsXG4iCisKKyM6IFByb2dyYW1zL3hicmxhcGkuYzo0MTYKKyMsIGMtZm9ybWF0Cittc2dpZCAieGJybGFwaTogcmVzb3VyY2UgJSMwMTBseCwgcmVxICV1OiV1XG4iCittc2dzdHIgInhicmxhcGkgOiByZXNzb3VyY2UgJSMwMTBseCwgcmVxICV1OiV1XG4iCisKKyMuICJzaG91bGRuJ3QgaGFwcGVuIiBldmVudHMKKyM6IFByb2dyYW1zL3hicmxhcGkuYzo4MTEKKyMsIGMtZm9ybWF0Cittc2dpZCAieGJybGFwaTogdW5oYW5kbGVkIGV2ZW50IHR5cGU6ICVkXG4iCittc2dzdHIgInhicmxhcGkgOiBUeXBlIGQnw6l2w6luZW1lbnQgbm9uIHByaXMgZW4gY2hhcmdlOiAlZFxuIgorCisjOiBQcm9ncmFtcy94YnJsYXBpLmM6NzkwCisjLCBjLWZvcm1hdAorbXNnaWQgInhicmxhcGk6IHdpbmRvdyAlIzAxMGx4IGNoYW5nZWQgdG8gTlVMTCBuYW1lXG4iCittc2dzdHIgInhicmxhcGkgOiBMZSBub20gZGUgbGEgZmVuw6p0cmUgJSMwMTBseCBlc3QgZGV2ZW51IE5VTExcbiIKKworIy4gTFJHCisjOiBQcm9ncmFtcy9jbWRfdXRpbHMuYzoxNTgKK21zZ2lkICJ5ZWxsb3ciCittc2dzdHIgImphdW5lIgorCisjfiBtc2dpZCAiTG9nZ2luZyBsZXZlbCAoJXMgb3Igb25lIG9mIHslc30pIGFuZC9vciBsb2cgY2F0ZWdvcmllcyB0byBlbmFibGUgKGFueSBjb21iaW5hdGlvbiBvZiB7JXN9LCBlYWNoIG9wdGlvbmFsbHkgcHJlZml4ZWQgYnkgJXMgdG8gZGlzYWJsZSkiCisjfiBtc2dzdHIgIk5pdmVhdSBkZSBqb3VybmFsaXNhdGlvbiAoJXMgb3UgdW4gcGFybWkgeyVzfSkgZXQvb3UgY2F0w6lnb3JpZXMgZGUgam91cm5hbCDDoCBhY3RpdmVyIChuJ2ltcG9ydGUgcXVlbGxlIGNvbWJpbmFpc29uIGRlIHslc30sIGNoYWN1bmUgcHLDqWPDqWTDqWUgw6l2ZW50dWVsbGVtZW50IGRlICVzIHBvdXIgbGEgZMOpc2FjdGl2ZXIpIgorCisjfiBtc2dpZCAiQ2VsbCBUeXBlIgorI34gbXNnc3RyICJUeXBlIGRlIENlbGx1bGUiCisKKyN+IG1zZ2lkICJQYXRoIHRvIGRpcmVjdG9yeSB3aGljaCBjb250YWlucyBtZXNzYWdlIHRyYW5zbGF0aW9ucy4iCisjfiBtc2dzdHIgIkNoZW1pbiBkdSByw6lwZXJ0b2lyZSBjb250ZW5hbnQgbGVzIHRyYWR1Y3Rpb25zIGRlcyBtZXNzYWdlcyIKKworI34gbXNnaWQgIkFsdG8gU2F4IgorI34gbXNnc3RyICJTYXhvIEFsdG8iCisKKyN+IG1zZ2lkICJCYXJpdG9uZSBTYXgiCisjfiBtc2dzdHIgIlNheG8gYmFyaXRvbiIKKworI34gbXNnaWQgIkNsYXZpIgorI34gbXNnc3RyICJDbGF2aWVycyIKKworI34gbXNnaWQgIlNvcHJhbm8gU2F4IgorI34gbXNnc3RyICJTYXhvIHNvcHJhbm8iCisKKyN+IG1zZ2lkICJUZW5vciBTYXgiCisjfiBtc2dzdHIgIlNheG8gdGVub3IiCisKKyN+IG1zZ2lkICI2LURvdCBDb21wdXRlciIKKyN+IG1zZ3N0ciAiSW5mb3JtYXRpcXVlIDYgUG9pbnRzIgorCisjfiBtc2dpZCAiNi1Eb3QgQ29udHJhY3RlZCIKKyN+IG1zZ3N0ciAiQWJyw6lnw6kgNiBQb2ludHMiCisKKyN+IG1zZ2lkICI4LURvdCBDb21wdXRlciIKKyN+IG1zZ3N0ciAiSW5mb3JtYXRpcXVlIDggUG9pbnRzIgorCisjfiBtc2dpZCAiOC1Eb3QgQ29udHJhY3RlZCIKKyN+IG1zZ3N0ciAiQWJyw6lnw6kgOCBQb2ludHMiCisKKyN+IG1zZ2lkICJBbHBoYWJldGljIEJyYWlsbGUgV2luZG93IENvb3JkaW5hdGVzIgorI34gbXNnc3RyICJDb29yZG9ubsOpZXMgYWxwaGFiw6l0aXF1ZXMgZGUgbGEgZmVuw6p0cmUgYnJhaWxsZSIKKworI34gbXNnaWQgIkFscGhhYmV0aWMgU2NyZWVuIEN1cnNvciBDb29yZGluYXRlcyIKKyN+IG1zZ3N0ciAiQ29vcmRvbm7DqWVzIGFscGhhYsOpdGlxdWVzIGR1IGN1cnNldXIgw6AgbCfDqWNyYW4iCisKKyN+IG1zZ2lkICJBcHJpbCIKKyN+IG1zZ3N0ciAiQXZyaWwiCisKKyN+IG1zZ2lkICJBdHRyaWJ1dGVzIEludmlzaWJsZSBUaW1lIgorI34gbXNnc3RyICJEdXLDqWUgZGUgbCdpbnZpc2liaWxpdMOpIGRlcyBhdHRyaWJ1dHMiCisKKyN+IG1zZ2lkICJBdHRyaWJ1dGVzIFZpc2libGUgVGltZSIKKyN+IG1zZ3N0ciAiRHVyw6llIGRlIHZpc2liaWxpdMOpIGRlcyBhdHRyaWJ1dHMiCisKKyN+IG1zZ2lkICJBdWd1c3QiCisjfiBtc2dzdHIgIkFvw7t0IgorCisjfiBtc2dpZCAiQnJhaWxsZSBXaW5kb3cgQ29sdW1uIgorI34gbXNnc3RyICJDb2xvbm5lIGRlIGxhIGZlbsOqdHJlIGJyYWlsbGUiCisKKyN+IG1zZ2lkICJCcmFpbGxlIFdpbmRvdyBDb29yZGluYXRlcyIKKyN+IG1zZ3N0ciAiQ29vcmRvbm7DqWVzIGRlIGxhIGZlbsOqdHJlIGJyYWlsbGUiCisKKyN+IG1zZ2lkICJCcmFpbGxlIFdpbmRvdyBSb3ciCisjfiBtc2dzdHIgIkxpZ25lIGRlIGxhIGZlbsOqdHJlIGJyYWlsbGUiCisKKyN+IG1zZ2lkICJDYXBpdGFscyBJbnZpc2libGUgVGltZSIKKyN+IG1zZ3N0ciAiRHVyw6llIGQnaW52aXNpYmlsaXTDqSBkZXMgbWFqdXNjdWxlcyIKKworI34gbXNnaWQgIkNhcGl0YWxzIFZpc2libGUgVGltZSIKKyN+IG1zZ3N0ciAiRHVyw6llIGRlIHZpc2liaWxpdMOpIGRlcyBtYWp1c2N1bGVzIgorCisjfiBtc2dpZCAiRGVjZW1iZXIiCisjfiBtc2dzdHIgIkTDqWNlbWJyZSIKKworI34gbXNnaWQgIkZlYnJ1YXJ5IgorI34gbXNnc3RyICJGw6l2cmllciIKKworI34gbXNnaWQgIkphbnVhcnkiCisjfiBtc2dzdHIgIkphbnZpZXIiCisKKyN+IG1zZ2lkICJKdWx5IgorI34gbXNnc3RyICJKdWlsbGV0IgorCisjfiBtc2dpZCAiSnVuZSIKKyN+IG1zZ3N0ciAiSnVpbiIKKworI34gbXNnaWQgIk1hcmNoIgorI34gbXNnc3RyICJNYXJzIgorCisjfiBtc2dpZCAiTWF5IgorI34gbXNnc3RyICJNYWkiCisKKyN+IG1zZ2lkICJOb3ZlbWJlciIKKyN+IG1zZ3N0ciAiTm92ZW1icmUiCisKKyN+IG1zZ2lkICJPY3RvYmVyIgorI34gbXNnc3RyICJPY3RvYnJlIgorCisjfiBtc2dpZCAiU2NyZWVuIEN1cnNvciBDb2x1bW4iCisjfiBtc2dzdHIgIkNvbG9ubmUgZHUgY3Vyc2V1ciBkZSBsJ8OpY3JhbiIKKworI34gbXNnaWQgIlNjcmVlbiBDdXJzb3IgQ29vcmRpbmF0ZXMiCisjfiBtc2dzdHIgIkNvb3Jkb25uw6llcyBkdSBjdXJzZXVyIGRlIGwnw6ljcmFuIgorCisjfiBtc2dpZCAiU2NyZWVuIEN1cnNvciBJbnZpc2libGUgVGltZSIKKyN+IG1zZ3N0ciAiRHVyw6llIGQnaW52aXNpYmlsaXTDqSBkdSBjdXJzZXVyIGQnw6ljcmFuIgorCisjfiBtc2dpZCAiU2NyZWVuIEN1cnNvciBSb3ciCisjfiBtc2dzdHIgIkxpZ25lIGR1IGN1cnNldXIgZGUgbCfDqWNyYW4iCisKKyN+IG1zZ2lkICJTY3JlZW4gQ3Vyc29yIFZpc2libGUgVGltZSIKKyN+IG1zZ3N0ciAiRHVyw6llIGRlIHZpc2liaWxpdMOpIGR1IGN1cnNldXIgZGUgbCfDqWNyYW4iCisKKyN+IG1zZ2lkICJTY3JlZW4gQ3Vyc29yIGFuZCBCcmFpbGxlIFdpbmRvdyBDb2x1bW4iCisjfiBtc2dzdHIgIkNvbG9ubmUgZHUgY3Vyc2V1ciBkZSBsJ8OpY3JhbiBldCBkZSBsYSBmZW7DqnRyZSBicmFpbGxlIgorCisjfiBtc2dpZCAiU2NyZWVuIEN1cnNvciBhbmQgQnJhaWxsZSBXaW5kb3cgUm93IgorI34gbXNnc3RyICJMaWduZSBkdSBjdXJzZXVyIGRlIGwnw6ljcmFuIGV0IGRlIGxhIGZlbsOqdHJlIGJyYWlsbGUiCisKKyN+IG1zZ2lkICJTZXB0ZW1iZXIiCisjfiBtc2dzdHIgIlNlcHRlbWJyZSIKKworI34gbXNnaWQgIlNwZWVjaCBDdXJzb3IgSW52aXNpYmxlIFRpbWUiCisjfiBtc2dzdHIgIkR1csOpZSBkJ2ludmlzaWJpbGl0w6kgZHUgY3Vyc2V1ciIKKworI34gbXNnaWQgIlNwZWVjaCBDdXJzb3IgVmlzaWJsZSBUaW1lIgorI34gbXNnc3RyICJEdXLDqWUgZGUgdmlzaWJpbGl0w6kgZHUgY3Vyc2V1ciBkZSBsYSBzeW50aMOoc2UiCisKKyN+IG1zZ2lkICJibGluayIKKyN+IG1zZ3N0ciAiY2xpZ25vdGFudCIKKworI34gbXNnaWQgImxpc3QgYWxsIG9mIHRoZSB0cmFuc2xhdGlvbnMgKHRoZSBkZWZhdWx0KSIKKyN+IG1zZ3N0ciAibGlzdGUgdG91dGVzIGxlcyB0cmFkdWN0aW9ucyAoYWN0aW9uIHBhciBkw6lmYXV0KSIKKworI34gbXNnaWQgInBlcmNlbnRhZ2UiCisjfiBtc2dzdHIgIlBvdXJjZW50YWdlIgorCisjfiBtc2dpZCAic2Vjb25kIgorI34gbXNnaWRfcGx1cmFsICJzZWNvbmRzIgorI34gbXNnc3RyWzBdICJzZWNvbmRlIgorI34gbXNnc3RyWzFdICJzZWNvbmRlcyIKKworI34gbXNnaWQgInNob3cgdGhlIG1lc3NhZ2UgY291bnQiCisjfiBtc2dzdHIgImFmZmljaGUgbGUgbm9tYnJlIGRlIG1lc3NhZ2VzIgorCisjfiBtc2dpZCAic2hvdyB0aGUgdHJhbnNsYXRpb24gbWV0YWRhdGEiCisjfiBtc2dzdHIgImFmZmljaGUgbGVzIG3DqXRhZG9ubsOpZXMgZGUgdHJhZHVjdGlvbiIKKworI34gbXNnaWQgIkJyYWlsbGUgVHlwZSIKKyN+IG1zZ3N0ciAiVHlwZSBkZSBCcmFpbGxlIgorCisjfiBtc2dpZCAiNi1Eb3QgQ29tcHV0ZXIgQnJhaWxsZSIKKyN+IG1zZ3N0ciAiQnJhaWxsZSBpbmZvcm1hdGlxdWUgNiBwb2ludHMiCisKKyN+IG1zZ2lkICI4LURvdCBDb21wdXRlciBCcmFpbGxlIgorI34gbXNnc3RyICJCcmFpbGxlIGluZm9ybWF0aXF1ZSA4IHBvaW50cyIKKworI34gbXNnaWQgIkxpdGVyYXJ5IEJyYWlsbGUiCisjfiBtc2dzdHIgIkJyYWlsbGUgTGl0dMOpcmFpcmUiCisKKyN+IG1zZ2lkICJUZXh0IFN0eWxlIgorI34gbXNnc3RyICJBcHBhcmVuY2UgZHUgdGV4dGUiCisKKyN+IG1zZ2lkICJCdWcgUmVwb3J0cyIKKyN+IG1zZ3N0ciAiUmFwcG9ydHMgZGUgYnVnIgorCisjfiBtc2dpZCAiQXV0b3JlcGVhdCIKKyN+IG1zZ3N0ciAiUsOpcMOpdGl0aW9uIGF1dG9tYXRpcXVlIgorCisjfiBtc2dpZCAiQnJhaWxsZSBEaXNwbGF5IE9yaWVudGF0aW9uIgorI34gbXNnc3RyICJPcmllbnRhdGlvbiBkZSBsJ2FmZmljaGFnZSBicmFpbGxlIgorCisjfiBtc2dpZCAiQnJhaWxsZSBJbnB1dCBNb2RlIgorI34gbXNnc3RyICJNb2RlIGRlIHNhaXNpZSBicmFpbGxlIgorCisjfiBtc2dpZCAiQnJhaWxsZSBLZXlib2FyZCBFbmFibGVkIgorI34gbXNnc3RyICJDbGF2aWVyIGJyYWlsbGUgYWN0aXbDqSIKKworI34gbXNnaWQgIk5vcm1hbCIKKyN+IG1zZ3N0ciAiTm9ybWFsIgorCisjfiBtc2dpZCAiUm90YXRlZCIKKyN+IG1zZ3N0ciAiQ3ljbGlxdWUiCisKKyN+IG1zZ2lkICJDaGVjayBmb3IgdW5kZWZpbmVkIGNoYXJhY3RlcnMuIgorI34gbXNnc3RyICJWw6lyaWZpZSBsZXMgY2EhYWN0w6hyZXMgaW5kw6lmaW5pcyIKKworI34gbXNnaWQgIkJsaW5raW5nIEN1cnNvciIKKyN+IG1zZ3N0ciAiQ2xpZ25vdGVtZW50IGR1IGN1cnNldXIiCisKKyN+IG1zZ2lkICJDdXJzb3IgSW52aXNpYmxlIFRpbWUiCisjfiBtc2dzdHIgIkR1csOpZSBkJ2ludmlzaWJpbGl0w6kgZHUgY3Vyc2V1ciIKKworI34gbXNnaWQgIkN1cnNvciBTdHlsZSIKKyN+IG1zZ3N0ciAiQXBwYXJlbmNlIGR1IGN1cnNldXIiCisKKyN+IG1zZ2lkICJDdXJzb3IgVmlzaWJsZSBUaW1lIgorI34gbXNnc3RyICJEdXLDqWUgZGUgdmlzaWJpbGl0w6kgZHUgY3Vyc2V1ciIKKworI34gbXNnaWQgIlNob3cgQ3Vyc29yIgorI34gbXNnc3RyICJBZmZpY2hlciBsZSBjdXJzZXVyIgorCisjfiBtc2dpZCAiU3RhdGUgRGlyZWN0b3J5IgorI34gbXNnc3RyICJSw6lwZXJ0b2lyZSBkJ8OpdGF0IgorCisjfiBtc2dpZCAiV2luZG93IEZvbGxvd3MgUG9pbnRlciIKKyN+IG1zZ3N0ciAiTGEgZmVuw6p0cmUgc3VpdCBsZSBwb2ludGV1ciIKKworI34gbXNnaWQgImRyYWcgY3Vyc29yIgorI34gbXNnc3RyICJFbnRyYcOubmUgbGUgY3Vyc2V1ciIKKworI34gbXNnaWQgImdvIHVwIHRvIGxhc3QgbGluZSBvZiBwcmV2aW91cyBwYXJhZ3JhcGgiCisjfiBtc2dzdHIgIlJlbW9udGUgw6AgbGEgZGVybmnDqHJlIGxpZ25lIGR1IHBhcmFncmFwaGUgcHLDqWPDqWRlbnQiCisKKyN+IG1zZ2lkICJsZWZ0IG1hcmdpbiIKKyN+IG1zZ3N0ciAiTWFyZ2UgZGUgZ2F1Y2hlIgorCisjfiBtc2dpZCAibm9ybWFsaXplZCBwb3NpdGlvbiIKKyN+IG1zZ3N0ciAiUG9zaXRpb24gbm9ybWFsaXPDqWUiCisKKyN+IG1zZ2lkICJzZXQgY29udHJvbCBtb2RpZmllciBvZiBuZXh0IHR5cGVkIGNoYXJhY3RlciBvciBlbXVsYXRlZCBrZXkgb24vb2ZmIgorI34gbXNnc3RyICJBY3RpdmF0aW9uL2TDqXNhY3RpdmF0aW9uIGR1IG1vZGlmaWNhdGV1ciBkZSBjb250csO0bGUgYXUgcHJvY2hhaW4gY2FyYWN0w6hyZSB0YXDDqSBvdSDDoCBsYSBwcm9jaGFpbmUgdG91Y2hlIMOpbXVsw6llIgorCisjfiBtc2dpZCAic2V0IGN1cnNvciB0cmFja2luZyBvbi9vZmYiCisjfiBtc2dzdHIgIkFjdGl2ZSBvdSBkw6lzYWN0aXZlIGxhIHBvdXJzdWl0ZSBkdSBjdXJzZXVyIgorCisjfiBtc2dpZCAic2V0IG1ldGEgbW9kaWZpZXIgb2YgbmV4dCB0eXBlZCBjaGFyYWN0ZXIgb3IgZW11bGF0ZWQga2V5IG9uL29mZiIKKyN+IG1zZ3N0ciAiQWN0aXZhdGlvbi9kw6lzYWN0aXZhdGlvbiBkJ3VuIG1vZGlmaWNhdGV1ciBNZXRhIGF1IHByb2NoYWluIGNhcmFjdMOocmUgdGFww6kgb3Ugw6AgbGEgcHJvY2hhaW5lIHRvdWNoZSDDqW11bMOpZSIKKworI34gbXNnaWQgInNldCBzaGlmdCBtb2RpZmllciBvZiBuZXh0IHR5cGVkIGNoYXJhY3RlciBvciBlbXVsYXRlZCBrZXkgb24vb2ZmIgorI34gbXNnc3RyICJBY3RpdmF0aW9uL2TDqXNhY3RpdmF0aW9uIGR1IG1vZGlmaWNhdGV1ciBTaGlmdCBhdSBwcm9jaGFpbiBjYXJhY3TDqHJlIHRhcMOpIG91IMOgIGxhIHByb2NoYWluZSB0b3VjaGUgw6ltdWzDqWUiCisKKyN+IG1zZ2lkICJzZXQgc3BlZWNoIGxvY2F0aW9uIHZpc2liaWxpdHkgb24vb2ZmIgorI34gbXNnc3RyICJBY3RpdmVyL2TDqXNhY3RpdmVyIGxhIHZlcmJvc2l0w6kgZGUgbGEgcG9zaXRpb24iCisKKyN+IG1zZ2lkICJzZXQgdXBwZXIgbW9kaWZpZXIgb2YgbmV4dCB0eXBlZCBjaGFyYWN0ZXIgb3IgZW11bGF0ZWQga2V5IG9uL29mZiIKKyN+IG1zZ3N0ciAiQWN0aXZhdGlvbi9kw6lzYWN0aXZhdGlvbiBkdSBtb2RpZmljYXRldXIgVmVyci5tYWogYXUgcHJvY2hhaW4gY2FyYWN0w6hyZSB0YXDDqSBvdSDDoCBsYSBwcm9jaGFpbmUgdG91Y2hlIMOpbXVsw6llIgorCisjfiBtc2dpZCAic3dpdGNoIHRvIHZpcnR1YWwgdGVybWluYWwiCisjfiBtc2dzdHIgIkNoYW5nZSBkZSB0ZXJtaW5hbCB2aXJ0dWVsIgpkaWZmIC0tZ2l0IGEvTWVzc2FnZXMvaXQucG8gYi9NZXNzYWdlcy9pdC5wbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMzBjNTk3Ci0tLSAvZGV2L251bGwKKysrIGIvTWVzc2FnZXMvaXQucG8KQEAgLTAsMCArMSwzNjU0IEBACisjIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisjICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorIworIyBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisjCisjIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisjCisjIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyMgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorIyBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyMKKyMgV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworIworIyBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyMKK21zZ2lkICIiCittc2dzdHIgIiIKKyJQcm9qZWN0LUlkLVZlcnNpb246IGJybHR0eSA1LjZcbiIKKyJSZXBvcnQtTXNnaWQtQnVncy1UbzogQlJMVFRZQGJybHR0eS5hcHBcbiIKKyJQT1QtQ3JlYXRpb24tRGF0ZTogMjAyMS0wMS0yNSAwOTowMi0wNTAwXG4iCisiUE8tUmV2aXNpb24tRGF0ZTogMjAxOC0xMC0yMiAyMDo1MCswMjAwXG4iCisiTGFzdC1UcmFuc2xhdG9yOiBTZWJhc3RpYW5vIFBpc3RvcmUgPFNlYmFzdGlhbm9QaXN0b3JlLmluZm9AcHJvdG9ubWFpbC5jaD5cbiIKKyJMYW5ndWFnZS1UZWFtOiBGcmllbmRzIG9mIEJSTFRUWSA8QlJMVFRZQGJybHR0WS5hcHA+XG4iCisiTGFuZ3VhZ2U6IGl0XG4iCisiTUlNRS1WZXJzaW9uOiAxLjBcbiIKKyJDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLThcbiIKKyJDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0XG4iCisiUGx1cmFsLUZvcm1zOiBucGx1cmFscz0yOyBwbHVyYWw9KG4gIT0gMSk7XG4iCisiWC1HZW5lcmF0b3I6IFBvZWRpdCAyLjJcbiIKKworIzogUHJvZ3JhbXMvYnJsdHR5LmM6MTY3CisjLCBjLWZvcm1hdAorbXNnaWQgIlwiJXNcIiBzdGFydGVkIGFzIFwiJXNcIlxuIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzo0NTcgUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjQ1OAorIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjQ2MCBQcm9ncmFtcy9tZW51X3ByZWZzLmM6NDYxCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6NDY0IFByb2dyYW1zL21lbnVfcHJlZnMuYzo0NjUKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzo0NjYgUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjQ2OAorIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjQ2OQorbXNnaWQgIjEgY2VsbCIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6Nzg5Cittc2dpZCAiMSBzZWNvbmQiCittc2dzdHIgIjEgc2Vjb25kbyIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjg1MQorbXNnaWQgIjEwIHNlY29uZHMiCittc2dzdHIgIjEwIHNlY29uZGkiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzoxMTU4Cittc2dpZCAiMTIgSG91ciIKK21zZ3N0ciAiMTIgb3JlIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6NDU2IFByb2dyYW1zL21lbnVfcHJlZnMuYzo0NTkKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzo0NjIgUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjQ2MworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjQ2NworbXNnaWQgIjIgY2VsbHMiCittc2dzdHIgIjIgY2VsbGUiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzo3OTAKK21zZ2lkICIyIHNlY29uZHMiCittc2dzdHIgIjIgc2Vjb25kaSIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjg1MgorbXNnaWQgIjIwIHNlY29uZHMiCittc2dzdHIgIjIwIHNlY29uZGkiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzoxMTU3Cittc2dpZCAiMjQgSG91ciIKK21zZ3N0ciAiMjQgb3JlIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6Nzg3Cittc2dpZCAiMjUwIG1pbGxpc2Vjb25kcyIKK21zZ3N0ciAiMjUwIG1pbGxpc2Vjb25kaSIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjg1MworbXNnaWQgIjQwIHNlY29uZHMiCittc2dzdHIgIjQwIHNlY29uZGkiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzo4NTAKK21zZ2lkICI1IHNlY29uZHMiCittc2dzdHIgIjUgc2Vjb25kaSIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjc4OAorbXNnaWQgIjUwMCBtaWxsaXNlY29uZHMiCittc2dzdHIgIjUwMCBtaWxsaXNlY29uZGkiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzo2MTUKK21zZ2lkICI2LURvdCBDb21wdXRlciBCcmFpbGxlIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzo2MTMKK21zZ2lkICI4LURvdCBDb21wdXRlciBCcmFpbGxlIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL2JybHR0eS10dGIuYzoxNzkKK21zZ2lkICI4LWJpdCBjaGFyYWN0ZXIgc2V0IHRvIHVzZS4iCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvc2NyX21lbnUuYzoxMDQKK21zZ2lkICI8b2ZmPiIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9jb25maWcuYzoxMzgyCittc2dpZCAiQVBJIFBhcmFtZXRlciIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDoxMjUyCittc2dpZCAiQVQgKHNldCAyKSBrZXlib2FyZCBzY2FuIGNvZGUiCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvbWlkaS5jOjY3Cittc2dpZCAiQWNjb3JkaW9uIgorbXNnc3RyICIiCisKKyMuIEJhc3MKKyM6IFByb2dyYW1zL21pZGkuYzo4MAorbXNnaWQgIkFjb3VzdGljIEJhc3MiCittc2dzdHIgIiIKKworIy4gUGlhbm8KKyM6IFByb2dyYW1zL21pZGkuYzo0NAorbXNnaWQgIkFjb3VzdGljIEdyYW5kIFBpYW5vIgorbXNnc3RyICIiCisKKyMuIEd1aXRhcgorIzogUHJvZ3JhbXMvbWlkaS5jOjcxCittc2dpZCAiQWNvdXN0aWMgR3VpdGFyIChueWxvbikiCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvbWlkaS5jOjcyCittc2dpZCAiQWNvdXN0aWMgR3VpdGFyIChzdGVlbCkiCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjExODQKK21zZ2lkICJBZnRlciBUaW1lIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL21pZGkuYzoxNzEKK21zZ2lkICJBZ29nbyIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6MTM3NAorbXNnaWQgIkFsZXJ0IgorbXNnc3RyICJBdnZpc28iCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzo5OTMKK21zZ2lkICJBbGVydCBEb3RzIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzo5OTgKK21zZ2lkICJBbGVydCBNZXNzYWdlcyIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6OTM4Cittc2dpZCAiQWxlcnQgVHVuZXMiCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjc1MyBQcm9ncmFtcy9tZW51X3ByZWZzLmM6MTAzMgorbXNnaWQgIkFsbCIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6NDY4Cittc2dpZCAiQWxwaGFiZXRpYyBCcmFpbGxlIFdpbmRvdyBDb29yZGluYXRlcyIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6NDY5Cittc2dpZCAiQWxwaGFiZXRpYyBTY3JlZW4gQ3Vyc29yIENvb3JkaW5hdGVzIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL21pZGkuYzoxMTcKK21zZ2lkICJBbHRvIFNheCIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9taWRpLmM6MTg1Cittc2dpZCAiQXBwbGF1c2UiCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvY21kX21pc2NlbGxhbmVvdXMuYzo2MAorbXNnaWQgIkFwcmlsIgorbXNnc3RyICJBcHJpbGUiCisKKyM6IFByb2dyYW1zL2xvZy5jOjExOAorbXNnaWQgIkFzeW5jIEV2ZW50cyIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6NzEwCittc2dpZCAiQXR0cmlidXRlcyBJbnZpc2libGUgVGltZSIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9jb25maWcuYzoyODI3IFByb2dyYW1zL21lbnVfcHJlZnMuYzoxMjgwCittc2dpZCAiQXR0cmlidXRlcyBUYWJsZSIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6NzA0Cittc2dpZCAiQXR0cmlidXRlcyBWaXNpYmxlIFRpbWUiCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvY21kX21pc2NlbGxhbmVvdXMuYzo2NAorbXNnaWQgIkF1Z3VzdCIKK21zZ3N0ciAiQWdvc3RvIgorCisjOiBQcm9ncmFtcy9hbGVydC5jOjE2OAorbXNnaWQgIkF1dG9yZWxlYXNlIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzo4NTYKK21zZ2lkICJBdXRvcmVsZWFzZSBUaW1lIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzo4NzMKK21zZ2lkICJBdXRvcmVwZWF0IEVuYWJsZWQiCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjg3OQorbXNnaWQgIkF1dG9yZXBlYXQgSW50ZXJ2YWwiCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjg4NgorbXNnaWQgIkF1dG9yZXBlYXQgUGFubmluZyIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6MTA3NQorbXNnaWQgIkF1dG9zcGVhayIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9jb25maWcuYzoxODI3Cittc2dpZCAiQlJMVFRZIHN0b3BwZWQiCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvbWlkaS5jOjE2NgorbXNnaWQgIkJhZyBQaXBlIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL21pZGkuYzoxNjIKK21zZ2lkICJCYW5qbyIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9taWRpLmM6MTE5Cittc2dpZCAiQmFyaXRvbmUgU2F4IgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL21pZGkuYzoyOAorbXNnaWQgIkJhc3MiCittc2dzdHIgIkJhc3NvIgorCisjOiBQcm9ncmFtcy9taWRpLmM6MTIyCittc2dpZCAiQmFzc29vbiIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6OTQ1Cittc2dpZCAiQmVlcGVyIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzoxMTgzCittc2dpZCAiQmVmb3JlIFRpbWUiCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvbWlkaS5jOjE4MgorbXNnaWQgIkJpcmQgVHdlZXQiCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjY5OAorbXNnaWQgIkJsaW5raW5nIEF0dHJpYnV0ZXMiCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjcxNgorbXNnaWQgIkJsaW5raW5nIENhcGl0YWxzIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzo2NzUKK21zZ2lkICJCbGlua2luZyBTY3JlZW4gQ3Vyc29yIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzoxMTMzCittc2dpZCAiQmxpbmtpbmcgU3BlZWNoIEN1cnNvciIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6NTc2IFByb2dyYW1zL21lbnVfcHJlZnMuYzoxMjQzCittc2dpZCAiQmxvY2siCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvbWlkaS5jOjEyOQorbXNnaWQgIkJsb3duIEJvdHRsZSIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9sb2cuYzoxNDIKK21zZ2lkICJCbHVldG9vdGggSS9PIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL2NvbmZpZy5jOjE2MDMKK21zZ2lkICJCcmFpbGxlIERldmljZSIKK21zZ3N0ciAiRGlzcG9zaXRpdm8gYnJhaWxsZSIKKworIzogUHJvZ3JhbXMvY29uZmlnLmM6MTU5OQorbXNnaWQgIkJyYWlsbGUgRHJpdmVyIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL2xvZy5jOjE0OAorbXNnaWQgIkJyYWlsbGUgRHJpdmVyIEV2ZW50cyIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6NjUzCittc2dpZCAiQnJhaWxsZSBGaXJtbmVzcyIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9sb2cuYzo4MgorbXNnaWQgIkJyYWlsbGUgS2V5IEV2ZW50cyIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9jb25maWcuYzoxNjAyCittc2dpZCAiQnJhaWxsZSBQYXJhbWV0ZXIiCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjYwOQorbXNnaWQgIkJyYWlsbGUgUHJlc2VudGF0aW9uIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzoxMjcwCittc2dpZCAiQnJhaWxsZSBUYWJsZXMiCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjgyMQorbXNnaWQgIkJyYWlsbGUgVHlwaW5nIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzo0NTcKK21zZ2lkICJCcmFpbGxlIFdpbmRvdyBDb2x1bW4iCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjQ1NgorbXNnaWQgIkJyYWlsbGUgV2luZG93IENvb3JkaW5hdGVzIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzo3NzQKK21zZ2lkICJCcmFpbGxlIFdpbmRvdyBPdmVybGFwIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzo0NTgKK21zZ2lkICJCcmFpbGxlIFdpbmRvdyBSb3ciCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvY29uZmlnLmM6NDc1CisjLCBjLWZvcm1hdAorbXNnaWQgIkJyYWlsbGUgZHJpdmVyIGNvZGUgKCVzLCAlcywgb3Igb25lIG9mIHslc30pLiIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9taWRpLmM6MzEKK21zZ2lkICJCcmFzcyIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9taWRpLmM6MTEyCittc2dpZCAiQnJhc3MgU2VjdGlvbiIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9taWRpLmM6MTgwCittc2dpZCAiQnJlYXRoIE5vaXNlIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL21pZGkuYzo0NQorbXNnaWQgIkJyaWdodCBBY291c3RpYyBQaWFubyIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy94YnJsYXBpLmM6OTMKK21zZ2lkICJCcmxBUEkgYXV0aG9yaXphdGlvbi9hdXRoZW50aWNhdGlvbiBzY2hlbWVzIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL3hicmxhcGkuYzo4NgorbXNnaWQgIkJybEFQSSBob3N0IGFuZC9vciBwb3J0IHRvIGNvbm5lY3QgdG8iCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjEzMDcKK21zZ2lkICJCdWlsZCBJbmZvcm1hdGlvbiIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6NjM4Cittc2dpZCAiQ2FwaXRhbGl6YXRpb24gTW9kZSIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6NzI3Cittc2dpZCAiQ2FwaXRhbHMgSW52aXNpYmxlIFRpbWUiCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjcyMQorbXNnaWQgIkNhcGl0YWxzIFZpc2libGUgVGltZSIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6MTM5NworbXNnaWQgIkNhdGVnb3J5IExvZyBMZXZlbCIKK21zZ3N0ciAiIgorCisjLiBDaHJvbWF0aWMgUGVyY3Vzc2lvbgorIzogUHJvZ3JhbXMvbWlkaS5jOjUzCittc2dpZCAiQ2VsZXN0YSIKK21zZ3N0ciAiQ2VsZXN0YSIKKworIzogUHJvZ3JhbXMvbWlkaS5jOjkxCittc2dpZCAiQ2VsbG8iCittc2dzdHIgIlZpb2xvbmNlbGxvIgorCisjOiBQcm9ncmFtcy9taWRpLmM6MTAyCittc2dpZCAiQ2hvaXIgQWFocyIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9taWRpLmM6MjUKK21zZ2lkICJDaHJvbWF0aWMgUGVyY3Vzc2lvbiIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9taWRpLmM6NjUKK21zZ2lkICJDaHVyY2ggT3JnYW4iCittc2dzdHIgIk9yZ2FubyBhIGNhbm5lIgorCisjOiBQcm9ncmFtcy9taWRpLmM6MTIzCittc2dpZCAiQ2xhcmluZXQiCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvbWlkaS5jOjUxCittc2dpZCAiQ2xhdmkiCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvbWVudS5jOjgyMAorbXNnaWQgIkNsb3NlIgorbXNnc3RyICJDaGl1ZGkiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzoxMTY3Cittc2dpZCAiQ29sb24iCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjEzMzEKK21zZ2lkICJDb25maWd1cmF0aW9uIERpcmVjdG9yeSIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9jb25maWcuYzoyNzcwIFByb2dyYW1zL21lbnVfcHJlZnMuYzoxMzM2Cittc2dpZCAiQ29uZmlndXJhdGlvbiBGaWxlIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL2FsZXJ0LmM6MTYzCittc2dpZCAiQ29uc29sZSBCZWxsIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzo5MjQKK21zZ2lkICJDb25zb2xlIEJlbGwgQWxlcnQiCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvbWlkaS5jOjkyCittc2dpZCAiQ29udHJhYmFzcyIKK21zZ3N0ciAiQ29udHJhYmFzc28iCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzo2MTQKK21zZ2lkICJDb250cmFjdGVkIEJyYWlsbGUiCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvY29uZmlnLmM6MjgzNCBQcm9ncmFtcy9tZW51X3ByZWZzLmM6MTI4OAorbXNnaWQgIkNvbnRyYWN0aW9uIFRhYmxlIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL2JybHR0eS1jdGIuYzo2MgorbXNnaWQgIkNvbnRyYWN0aW9uIHRhYmxlLiIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9icmx0dHktY3RiLmM6NzYKK21zZ2lkICJDb250cmFjdGlvbiB2ZXJpZmljYXRpb24gdGFibGUuIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzoxMzc1Cittc2dpZCAiQ3JpdGljYWwiCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvbG9nLmM6MTAwCittc2dpZCAiQ3Vyc29yIFJvdXRpbmciCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvbG9nLmM6OTQKK21zZ2lkICJDdXJzb3IgVHJhY2tpbmciCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjc5MworbXNnaWQgIkN1cnNvciBUcmFja2luZyBEZWxheSIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6MTIwNQorbXNnaWQgIkRhc2giCittc2dzdHIgIlRyYXR0aW5vIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6MTE5OAorbXNnaWQgIkRhdGUgRm9ybWF0IgorbXNnc3RyICJGb3JtYXRvIGRhdGEiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzoxMTg3Cittc2dpZCAiRGF0ZSBQb3NpdGlvbiIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6MTIxMAorbXNnaWQgIkRhdGUgU2VwYXJhdG9yIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzoxMTk1Cittc2dpZCAiRGF5IE1vbnRoIFllYXIiCittc2dzdHIgIkdpb3JubyBtZXNlIGFubm8iCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzoxMzgwCittc2dpZCAiRGVidWciCittc2dzdHIgIkRlYnVnIgorCisjOiBQcm9ncmFtcy9jbWRfbWlzY2VsbGFuZW91cy5jOjY4Cittc2dpZCAiRGVjZW1iZXIiCittc2dzdHIgIkRpY2VtYnJlIgorCisjOiBQcm9ncmFtcy9jb25maWcuYzo0OTYKK21zZ2lkICJEZXZpY2UgZm9yIGFjY2Vzc2luZyBicmFpbGxlIGRpc3BsYXkuIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL2NvbmZpZy5jOjQ1NQorbXNnaWQgIkRpc2FibGUgdGhlIGFwcGxpY2F0aW9uIHByb2dyYW1taW5nIGludGVyZmFjZS4iCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvbWlkaS5jOjc3Cittc2dpZCAiRGlzdG9ydGlvbiBHdWl0YXIiCittc2dzdHIgIkNoaXRhcnJhIGNvbiBkaXN0b3Jzb3JlIgorCisjOiBQcm9ncmFtcy9jb25maWcuYzo1OTgKK21zZ2lkICJEbyBub3QgYXV0b3NwZWFrIHdoZW4gYnJhaWxsZSBpcyBub3QgYmVpbmcgdXNlZC4iCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMveGJybGFwaS5jOjExMgorbXNnaWQgIkRvIG5vdCB3cml0ZSBhbnkgdGV4dCB0byB0aGUgYnJhaWxsZSBkZXZpY2UiCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvYnJsdHR5LXRydHh0LmM6NzkKK21zZ2lkICJEb24ndCBmYWxsIGJhY2sgdG8gdGhlIFVuaWNvZGUgYmFzZSBjaGFyYWN0ZXIuIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL2NvbmZpZy5jOjM2NgorbXNnaWQgIkRvbid0IHN3aXRjaCB0byBhbiB1bnByaXZpbGVnZWQgdXNlciBvciByZWxpbnF1aXNoIGFueSBwcml2aWxlZ2VzIChncm91cCBtZW1iZXJzaGlwcywgY2FwYWJpbGl0aWVzLCBldGMpLiIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9hbGVydC5jOjUyCittc2dpZCAiRG9uZSIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6MTE2OCBQcm9ncmFtcy9tZW51X3ByZWZzLmM6MTIwNworbXNnaWQgIkRvdCIKK21zZ3N0ciAiUHVudG8iCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzo4MzEKK21zZ2lkICJEb3RzIHZpYSBVbmljb2RlIEJyYWlsbGUiCittc2dzdHIgIiIKKworIy4gT3JnYW4KKyM6IFByb2dyYW1zL21pZGkuYzo2MgorbXNnaWQgIkRyYXdiYXIgT3JnYW4iCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvY29uZmlnLmM6Mjc5MSBQcm9ncmFtcy9tZW51X3ByZWZzLmM6MTM1NgorbXNnaWQgIkRyaXZlcnMgRGlyZWN0b3J5IgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL21pZGkuYzo2MAorbXNnaWQgIkR1bGNpbWVyIgorbXNnc3RyICJTYWx0w6hyaW8iCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzo3NjgKK21zZ2lkICJFYWdlciBTbGlkaW5nIEJyYWlsbGUgV2luZG93IgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL2JybHR0eS10dGIuYzoxNTgKK21zZ2lkICJFZGl0IHRhYmxlLiIKK21zZ3N0ciAiTW9kaWZpY2FyZSB0YWJlbGxhLiIKKworIzogUHJvZ3JhbXMvbWlkaS5jOjgxCittc2dpZCAiRWxlY3RyaWMgQmFzcyAoZmluZ2VyKSIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9taWRpLmM6ODIKK21zZ2lkICJFbGVjdHJpYyBCYXNzIChwaWNrKSIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9taWRpLmM6NDYKK21zZ2lkICJFbGVjdHJpYyBHcmFuZCBQaWFubyIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9taWRpLmM6NzQKK21zZ2lkICJFbGVjdHJpYyBHdWl0YXIgKGNsZWFuKSIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9taWRpLmM6NzMKK21zZ2lkICJFbGVjdHJpYyBHdWl0YXIgKGphenopIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL21pZGkuYzo3NQorbXNnaWQgIkVsZWN0cmljIEd1aXRhciAobXV0ZWQpIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL21pZGkuYzo0OAorbXNnaWQgIkVsZWN0cmljIFBpYW5vIDEiCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvbWlkaS5jOjQ5Cittc2dpZCAiRWxlY3RyaWMgUGlhbm8gMiIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6MTM3MworbXNnaWQgIkVtZXJnZW5jeSIKK21zZ3N0ciAiRW1lcmdlbnphIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6NDU1Cittc2dpZCAiRW5kIgorbXNnc3RyICJGaW5lIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6NzU0Cittc2dpZCAiRW5kIG9mIExpbmUiCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvbWlkaS5jOjEyMQorbXNnaWQgIkVuZ2xpc2ggSG9ybiIKK21zZ3N0ciAiQ29ybm8gaW5nbGVzZSIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjEwNjcKK21zZ2lkICJFbnF1ZXVlIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL21pZGkuYzozMAorbXNnaWQgIkVuc2VtYmxlIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzoxMzc2Cittc2dpZCAiRXJyb3IiCittc2dzdHIgIkVycm9yZSIKKworIzogUHJvZ3JhbXMvbWlkaS5jOjM3Cittc2dpZCAiRXRobmljIEluc3RydW1lbnRzIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzo5MjEKK21zZ2lkICJFdmVudCBBbGVydHMiCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjYyNgorbXNnaWQgIkV4cGFuZCBDdXJyZW50IFdvcmQiCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvY29uZmlnLmM6NDEwCittc2dpZCAiRXhwbGljaXQgcHJlZmVyZW5jZSBzZXR0aW5ncy4iCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjk0OAorbXNnaWQgIkZNIgorbXNnc3RyICJGTSIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjk4NgorbXNnaWQgIkZNIFZvbHVtZSIKK21zZ3N0ciAiVm9sdW1lIEZNIgorCisjLiBTeW50aCBGTQorIzogUHJvZ3JhbXMvbWlkaS5jOjE1MgorbXNnaWQgIkZYIDEgKHJhaW4pIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL21pZGkuYzoxNTMKK21zZ2lkICJGWCAyIChzb3VuZHRyYWNrKSIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9taWRpLmM6MTU0Cittc2dpZCAiRlggMyAoY3J5c3RhbCkiCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvbWlkaS5jOjE1NQorbXNnaWQgIkZYIDQgKGF0bW9zcGhlcmUpIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL21pZGkuYzoxNTYKK21zZ2lkICJGWCA1IChicmlnaHRuZXNzKSIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9taWRpLmM6MTU3Cittc2dpZCAiRlggNiAoZ29ibGlucykiCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvbWlkaS5jOjE1OAorbXNnaWQgIkZYIDcgKGVjaG9lcykiCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvbWlkaS5jOjE1OQorbXNnaWQgIkZYIDggKHNjaS1maSkiCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvY21kX21pc2NlbGxhbmVvdXMuYzo1OAorbXNnaWQgIkZlYnJ1YXJ5IgorbXNnc3RyICJGZWJicmFpbyIKKworIzogUHJvZ3JhbXMvbWlkaS5jOjE2NworbXNnaWQgIkZpZGRsZSIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9taWRpLmM6MTI2Cittc2dpZCAiRmx1dGUiCittc2dzdHIgIkZsYXV0byIKKworIzogUHJvZ3JhbXMvYnJsdHR5LWN0Yi5jOjk2Cittc2dpZCAiRm9yY2UgaW1tZWRpYXRlIG91dHB1dC4iCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvYnJsdHR5LWNsZHIuYzo0MgorbXNnaWQgIkZvcm1hdCBvZiBlYWNoIG91dHB1dCBsaW5lLiIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9icmx0dHktdHRiLmM6MTY1Cittc2dpZCAiRm9ybWF0IG9mIGlucHV0IGZpbGUuIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL2JybHR0eS10dGIuYzoxNzIKK21zZ2lkICJGb3JtYXQgb2Ygb3V0cHV0IGZpbGUuIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL21pZGkuYzoxMTEKK21zZ2lkICJGcmVuY2ggSG9ybiIKK21zZ3N0ciAiQ29ybm8gZnJhbmNlc2UiCisKKyM6IFByb2dyYW1zL21pZGkuYzo4MworbXNnaWQgIkZyZXRsZXNzIEJhc3MiCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvYWxlcnQuYzo5NworbXNnaWQgIkZyb3plbiIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6NDcwCittc2dpZCAiR2VuZXJpYyIKK21zZ3N0ciAiR2VuZXJpY28iCisKKyM6IFByb2dyYW1zL2xvZy5jOjY0Cittc2dpZCAiR2VuZXJpYyBJbnB1dCIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9taWRpLmM6NTQKK21zZ2lkICJHbG9ja2Vuc3BpZWwiCittc2dzdHIgIkdsb2NrZW5zcGllbCIKKworIzogUHJvZ3JhbXMvbWlkaS5jOjI3Cittc2dpZCAiR3VpdGFyIgorbXNnc3RyICJDaGl0YXJyYSIKKworIy4gU291bmQgRWZmZWN0cworIzogUHJvZ3JhbXMvbWlkaS5jOjE3OQorbXNnaWQgIkd1aXRhciBGcmV0IE5vaXNlIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL21pZGkuYzo3OAorbXNnaWQgIkd1aXRhciBIYXJtb25pY3MiCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvbWlkaS5jOjE4NgorbXNnaWQgIkd1bnNob3QiCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvbWlkaS5jOjY4Cittc2dpZCAiSGFybW9uaWNhIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL21pZGkuYzo1MAorbXNnaWQgIkhhcnBzaWNob3JkIgorbXNnc3RyICJDbGF2aWNlbWJhbG8iCisKKyM6IFByb2dyYW1zL21pZGkuYzoxODQKK21zZ2lkICJIZWxpY29wdGVyIgorbXNnc3RyICJFbGljb3R0ZXJvIgorCisjOiBQcm9ncmFtcy9zY3JfaGVscC5jOjIxNQorbXNnaWQgIkhlbHAgU2NyZWVuIgorbXNnc3RyICJTY2hlcm1hdGEgZGkgYWl1dG8iCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzo2NDkgUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjkwMgorbXNnaWQgIkhpZ2giCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjgxMAorbXNnaWQgIkhpZ2hsaWdodCBCcmFpbGxlIFdpbmRvdyBMb2NhdGlvbiIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9taWRpLmM6NDcKK21zZ2lkICJIb25reXRvbmsgUGlhbm8iCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjEwNjYKK21zZ2lkICJJbW1lZGlhdGUiCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMveGJybGFwaS5jOjY2NQorbXNnaWQgIkluY29tcGF0aWJsZSBYS0IgbGlicmFyeVxuIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL3hicmxhcGkuYzo2NjcKK21zZ2lkICJJbmNvbXBhdGlibGUgWEtCIHNlcnZlciBzdXBwb3J0XG4iCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjEzNzkKK21zZ2lkICJJbmZvcm1hdGlvbiIKK21zZ3N0ciAiSW5mb3JtYXppb25lIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6ODQ1Cittc2dpZCAiSW5wdXQgT3B0aW9ucyIKK21zZ3N0ciAiT3B6aW9uaSBkaSBpbnB1dCIKKworIzogUHJvZ3JhbXMvbG9nLmM6NzAKK21zZ2lkICJJbnB1dCBQYWNrZXRzIgorbXNnc3RyICJQYWNjaGV0dGkgZGkgaW5wdXQiCisKKyM6IFByb2dyYW1zL2NvbmZpZy5jOjM0MQorIywgYy1mb3JtYXQKK21zZ2lkICJJbnN0YWxsIHRoZSAlcyBzZXJ2aWNlLCBhbmQgdGhlbiBleGl0LiIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6MTM4MworbXNnaWQgIkludGVybmFsIFBhcmFtZXRlcnMiCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvY21kX21pc2NlbGxhbmVvdXMuYzo1NworbXNnaWQgIkphbnVhcnkiCittc2dzdHIgIkdlbm5haW8iCisKKyM6IERyaXZlcnMvU2NyZWVuL0FuZHJvaWQvc2NyZWVuLmM6MTk3Cittc2dpZCAiSmF2YSBjbGFzcyBub3QgZm91bmQiCittc2dzdHIgIiIKKworIzogRHJpdmVycy9TY3JlZW4vQW5kcm9pZC9zY3JlZW4uYzoxODEKK21zZ2lkICJKYXZhIGV4Y2VwdGlvbiBvY2N1cnJlZCIKK21zZ3N0ciAiIgorCisjOiBEcml2ZXJzL1NjcmVlbi9BbmRyb2lkL3NjcmVlbi5jOjE5NAorbXNnaWQgIkphdmEgbWV0aG9kIG5vdCBmb3VuZCIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9jbWRfbWlzY2VsbGFuZW91cy5jOjYzCittc2dpZCAiSnVseSIKK21zZ3N0ciAiTHVnbGlvIgorCisjOiBQcm9ncmFtcy9jbWRfbWlzY2VsbGFuZW91cy5jOjYyCittc2dpZCAiSnVuZSIKK21zZ3N0ciAiR2l1Z25vIgorCisjOiBQcm9ncmFtcy9taWRpLmM6MTY1Cittc2dpZCAiS2FsaW1iYSIKK21zZ3N0ciAiS2FsaW1iYSIKKworIzogUHJvZ3JhbXMvY29uZmlnLmM6MTUyNQorbXNnaWQgIktleSBCaW5kaW5ncyIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9jb25maWcuYzoxMDY5Cittc2dpZCAiS2V5IEhlbHAiCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvY29uZmlnLmM6MTUzMCBQcm9ncmFtcy9rdGJfbGlzdC5jOjczNworbXNnaWQgIktleSBUYWJsZSIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6ODI0Cittc2dpZCAiS2V5Ym9hcmQgRW5hYmxlZCIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9sb2cuYzo4OAorbXNnaWQgIktleWJvYXJkIEtleSBFdmVudHMiCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjkzMQorbXNnaWQgIktleWJvYXJkIExFRCBBbGVydHMiCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvY29uZmlnLmM6Mjg0MSBQcm9ncmFtcy9tZW51X3ByZWZzLmM6OTEzCittc2dpZCAiS2V5Ym9hcmQgVGFibGUiCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvbWlkaS5jOjE2NAorbXNnaWQgIktvdG8iCittc2dzdHIgIktvdG8iCisKKyM6IFByb2dyYW1zL2NvbmZpZy5jOjI5NzMKK21zZ2lkICJMYW5ndWFnZSIKK21zZ3N0ciAiTGluZ3VhIgorCisjLiBTeW50aCBMZWFkCisjOiBQcm9ncmFtcy9taWRpLmM6MTM0Cittc2dpZCAiTGVhZCAxIChzcXVhcmUpIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL21pZGkuYzoxMzUKK21zZ2lkICJMZWFkIDIgKHNhd3Rvb3RoKSIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9taWRpLmM6MTM2Cittc2dpZCAiTGVhZCAzIChjYWxsaW9wZSkiCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvbWlkaS5jOjEzNworbXNnaWQgIkxlYWQgNCAoY2hpZmYpIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL21pZGkuYzoxMzgKK21zZ2lkICJMZWFkIDUgKGNoYXJhbmcpIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL21pZGkuYzoxMzkKK21zZ2lkICJMZWFkIDYgKHZvaWNlKSIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9taWRpLmM6MTQwCittc2dpZCAiTGVhZCA3IChmaWZ0aHMpIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL21pZGkuYzoxNDEKK21zZ2lkICJMZWFkIDggKGJhc3MgKyBsZWFkKSIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9sZWFybi5jOjEwMQorbXNnaWQgIkxlYXJuIE1vZGUiCittc2dzdHIgIk1vZGFsaXTDoCBhcHByZW5kaW1lbnRvIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6MTIyMgorbXNnaWQgIkxlZnQiCittc2dzdHIgIlNpbmlzdHJhIgorCisjOiBQcm9ncmFtcy9icmx0dHkta3RiLmM6NTEKK21zZ2lkICJMaXN0IGtleSBuYW1lcy4iCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvYnJsdHR5LWt0Yi5jOjU3Cittc2dpZCAiTGlzdCBrZXkgdGFibGUgaW4gaGVscCBzY3JlZW4gZm9ybWF0LiIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9icmx0dHkta3RiLmM6NjMKK21zZ2lkICJMaXN0IGtleSB0YWJsZSBpbiByZVN0cnVjdHVyZWRUZXh0IGZvcm1hdC4iCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjYxNgorbXNnaWQgIkxpdGVyYXJ5IEJyYWlsbGUiCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjEzNjYKK21zZ2lkICJMb2NhbGUgRGlyZWN0b3J5IgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzoxNDAyCittc2dpZCAiTG9nIENhdGVnb3JpZXMiCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvY29uZmlnLmM6ODM2Cittc2dpZCAiTG9nIExldmVsIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzoxNDYzCittc2dpZCAiTG9nIE1lc3NhZ2VzIgorbXNnc3RyICJNZXNzYWdnaSBkaSBsb2ciCisKKyM6IFByb2dyYW1zL2NvbmZpZy5jOjY4OAorbXNnaWQgIkxvZyB0aGUgdmVyc2lvbnMgb2YgdGhlIGNvcmUsIEFQSSwgYW5kIGJ1aWx0LWluIGRyaXZlcnMsIGFuZCB0aGVuIGV4aXQuIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL2NvbmZpZy5jOjY1MworbXNnaWQgIkxvZyB0byBzdGFuZGFyZCBlcnJvciByYXRoZXIgdGhhbiB0byB0aGUgc3lzdGVtIGxvZy4iCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvY29uZmlnLmM6NjY3CisjLCBjLWZvcm1hdAorbXNnaWQgIkxvZ2dpbmcgbGV2ZWwgKCVzIG9yIG9uZSBvZiB7JXN9KSBhbmQvb3IgbG9nIGNhdGVnb3JpZXMgdG8gZW5hYmxlIChhbnkgY29tYmluYXRpb24gb2YgeyVzfSwgZWFjaCBvcHRpb25hbGx5IHByZWZpeGVkIGJ5ICVzIHRvIGRpc2FibGUpIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzo4NjcKK21zZ2lkICJMb25nIFByZXNzIFRpbWUiCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjY0NyBQcm9ncmFtcy9tZW51X3ByZWZzLmM6OTAwCittc2dpZCAiTG93IgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzo1NzcKK21zZ2lkICJMb3dlciBMZWZ0IERvdCIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6NTc4Cittc2dpZCAiTG93ZXIgUmlnaHQgRG90IgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzo5NDcKK21zZ2lkICJNSURJIgorbXNnc3RyICJNSURJIgorCisjOiBQcm9ncmFtcy9jb25maWcuYzo2MzcKK21zZ2lkICJNSURJIChNdXNpY2FsIEluc3RydW1lbnQgRGlnaXRhbCBJbnRlcmZhY2UpIGRldmljZSBzcGVjaWZpZXIuIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzo5NzcKK21zZ2lkICJNSURJIEluc3RydW1lbnQiCittc2dzdHIgIlN0cnVtZW50byBNSURJIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6OTY3Cittc2dpZCAiTUlESSBWb2x1bWUiCittc2dzdHIgIlZvbHVtZSBNSURJIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6MTMyNgorbXNnaWQgIk1haWxpbmcgTGlzdCIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9jbWRfbWlzY2VsbGFuZW91cy5jOjU5Cittc2dpZCAiTWFyY2giCittc2dzdHIgIk1hcnpvIgorCisjOiBQcm9ncmFtcy9taWRpLmM6NTcKK21zZ2lkICJNYXJpbWJhIgorbXNnc3RyICJNYXJpbWJhIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6NjUwIFByb2dyYW1zL21lbnVfcHJlZnMuYzo5MDMKK21zZ2lkICJNYXhpbXVtIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL2JybHR0eS1jdGIuYzo5MAorbXNnaWQgIk1heGltdW0gbGVuZ3RoIG9mIGFuIG91dHB1dCBsaW5lLiIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9jbWRfbWlzY2VsbGFuZW91cy5jOjYxCittc2dpZCAiTWF5IgorbXNnc3RyICJNYWdnaW8iCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzo2NDggUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjkwMQorbXNnaWQgIk1lZGl1bSIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9taWRpLmM6MTc1Cittc2dpZCAiTWVsb2RpYyBUb20iCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjU5MAorbXNnaWQgIk1lbnUgT3B0aW9ucyIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9jb25maWcuYzo2NDYKK21zZ2lkICJNZXNzYWdlIGhvbGQgdGltZW91dCAoaW4gMTBtcyB1bml0cykuIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL2NvbmZpZy5jOjgzOQorbXNnaWQgIk1lc3NhZ2VzIERpcmVjdG9yeSIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9jb25maWcuYzo4MzgKK21zZ2lkICJNZXNzYWdlcyBEb21haW4iCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvY29uZmlnLmM6ODM3Cittc2dpZCAiTWVzc2FnZXMgTG9jYWxlIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzo2NDYgUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjg5OQorbXNnaWQgIk1pbmltdW0iCittc2dzdHIgIk1pbmltbyIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjExOTQKK21zZ2lkICJNb250aCBEYXkgWWVhciIKK21zZ3N0ciAiTWVzZSBnaW9ybm8sIGFubm8iCisKKyM6IFByb2dyYW1zL21pZGkuYzo1NQorbXNnaWQgIk11c2ljIEJveCIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6OTQ3Cittc2dpZCAiTXVzaWNhbCBJbnN0cnVtZW50IERpZ2l0YWwgSW50ZXJmYWNlIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL21pZGkuYzoxMTAKK21zZ2lkICJNdXRlZCBUcnVtcGV0IgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL2NvbmZpZy5jOjUzNworbXNnaWQgIk5hbWUgb2Ygb3IgcGF0aCB0byBhdHRyaWJ1dGVzIHRhYmxlLiIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9jb25maWcuYzo1NDYKK21zZ2lkICJOYW1lIG9mIG9yIHBhdGggdG8gY29udHJhY3Rpb24gdGFibGUuIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL2NvbmZpZy5jOjQwMgorbXNnaWQgIk5hbWUgb2Ygb3IgcGF0aCB0byBkZWZhdWx0IHByZWZlcmVuY2VzIGZpbGUuIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL2NvbmZpZy5jOjU1NQorbXNnaWQgIk5hbWUgb2Ygb3IgcGF0aCB0byBrZXlib2FyZCB0YWJsZS4iCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvY29uZmlnLmM6NTkxCittc2dpZCAiTmFtZSBvZiBvciBwYXRoIHRvIHNwZWVjaCBpbnB1dCBvYmplY3QuIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL2NvbmZpZy5jOjUyOAorIywgYy1mb3JtYXQKK21zZ2lkICJOYW1lIG9mIG9yIHBhdGggdG8gdGV4dCB0YWJsZSAob3IgJXMpLiIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6NzM0Cittc2dpZCAiTmF2aWdhdGlvbiBPcHRpb25zIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL21lbnUuYzo0NDkKK21zZ2lkICJObyIKK21zZ3N0ciAiTm8iCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzo2MzMKK21zZ2lkICJObyBDYXBpdGFsaXphdGlvbiIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6Nzg2IFByb2dyYW1zL21lbnVfcHJlZnMuYzoxMDMwCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6MTA0MyBQcm9ncmFtcy9tZW51X3ByZWZzLmM6MTA1NgorIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjExODIgUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjEyMjEKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzoxMjQxCittc2dpZCAiTm9uZSIKK21zZ3N0ciAiTmVzc3VubyIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjEzNzgKK21zZ2lkICJOb3RpY2UiCittc2dzdHIgIkF2dmlzbyIKKworIzogUHJvZ3JhbXMvY21kX21pc2NlbGxhbmVvdXMuYzo2NworbXNnaWQgIk5vdmVtYmVyIgorbXNnc3RyICJOb3ZlbWJyZSIKKworIzogUHJvZ3JhbXMvbWlkaS5jOjEyMAorbXNnaWQgIk9ib2UiCittc2dzdHIgIk9ib2UiCisKKyM6IFByb2dyYW1zL21pZGkuYzoxMzIKK21zZ2lkICJPY2FyaW5hIgorbXNnc3RyICJPY2FyaW5hIgorCisjOiBQcm9ncmFtcy9jbWRfbWlzY2VsbGFuZW91cy5jOjY2Cittc2dpZCAiT2N0b2JlciIKK21zZ3N0ciAiT3R0b2JyZSIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjg0OQorbXNnaWQgIk9mZiIKK21zZ3N0ciAiT2ZmIgorCisjOiBQcm9ncmFtcy9jb25maWcuYzoxNjE2Cittc2dpZCAiT2xkIFByZWZlcmVuY2VzIEZpbGUiCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjg2MgorbXNnaWQgIk9uIEZpcnN0IFJlbGVhc2UiCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvbWlkaS5jOjEwNQorbXNnaWQgIk9yY2hlc3RyYSBIaXQiCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvbWlkaS5jOjk1Cittc2dpZCAiT3JjaGVzdHJhbCBIYXJwIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL21pZGkuYzoyNgorbXNnaWQgIk9yZ2FuIgorbXNnc3RyICJPcmdhbm8iCisKKyM6IFByb2dyYW1zL2xvZy5jOjc2Cittc2dpZCAiT3V0cHV0IFBhY2tldHMiCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvbWlkaS5jOjc2Cittc2dpZCAiT3ZlcmRyaXZlbiBHdWl0YXIiCittc2dzdHIgIiIKKworIzogRHJpdmVycy9CcmFpbGxlL0lyaXMvYnJhaWxsZS5jOjE1NDUKK21zZ2lkICJQQyBtb2RlIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzo5NDYKK21zZ2lkICJQQ00iCittc2dzdHIgIlBDTSIKKworIzogUHJvZ3JhbXMvY29uZmlnLmM6NjI3Cittc2dpZCAiUENNIChzb3VuZGNhcmQgZGlnaXRhbCBhdWRpbykgZGV2aWNlIHNwZWNpZmllci4iCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjk1OQorbXNnaWQgIlBDTSBWb2x1bWUiCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6MTI2NgorbXNnaWQgIlBTLzIgKHNldCAzKSBrZXlib2FyZCBzY2FuIGNvZGUiCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjEzMTYKK21zZ2lkICJQYWNrYWdlIFJldmlzaW9uIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzoxMzExCittc2dpZCAiUGFja2FnZSBWZXJzaW9uIgorbXNnc3RyICIiCisKKyMuIFN5bnRoIFBhZAorIzogUHJvZ3JhbXMvbWlkaS5jOjE0MworbXNnaWQgIlBhZCAxIChuZXcgYWdlKSIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9taWRpLmM6MTQ0Cittc2dpZCAiUGFkIDIgKHdhcm0pIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL21pZGkuYzoxNDUKK21zZ2lkICJQYWQgMyAocG9seXN5bnRoKSIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9taWRpLmM6MTQ2Cittc2dpZCAiUGFkIDQgKGNob2lyKSIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9taWRpLmM6MTQ3Cittc2dpZCAiUGFkIDUgKGJvd2VkKSIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9taWRpLmM6MTQ4Cittc2dpZCAiUGFkIDYgKG1ldGFsbGljKSIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9taWRpLmM6MTQ5Cittc2dpZCAiUGFkIDcgKGhhbG8pIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL21pZGkuYzoxNTAKK21zZ2lkICJQYWQgOCAoc3dlZXApIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL21pZGkuYzoxMjgKK21zZ2lkICJQYW4gRmx1dGUiCittc2dzdHIgIkZsYXV0byBkaSBQYW4iCisKKyM6IFByb2dyYW1zL2NvbmZpZy5jOjQ2NAorbXNnaWQgIlBhcmFtZXRlcnMgZm9yIHRoZSBhcHBsaWNhdGlvbiBwcm9ncmFtbWluZyBpbnRlcmZhY2UuIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL2NvbmZpZy5jOjQ4NgorbXNnaWQgIlBhcmFtZXRlcnMgZm9yIHRoZSBicmFpbGxlIGRyaXZlci4iCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvY29uZmlnLmM6MzU5Cittc2dpZCAiUGFyYW1ldGVycyBmb3IgdGhlIHByaXZpbGVnZSBlc3RhYmxpc2htZW50IHN0YWdlLiIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9jb25maWcuYzo2MTgKK21zZ2lkICJQYXJhbWV0ZXJzIGZvciB0aGUgc2NyZWVuIGRyaXZlci4iCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvY29uZmlnLmM6NTgzCittc2dpZCAiUGFyYW1ldGVycyBmb3IgdGhlIHNwZWVjaCBkcml2ZXIuIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL2NvbmZpZy5jOjM5MworbXNnaWQgIlBhdGggdG8gZGVmYXVsdCBzZXR0aW5ncyBmaWxlLiIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9jb25maWcuYzo0NDcKK21zZ2lkICJQYXRoIHRvIGRpcmVjdG9yeSBjb250YWluaW5nIGRyaXZlcnMuIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL2JybHRlc3QuYzo2OCBQcm9ncmFtcy9icmx0dHktYXRiLmM6MzYgUHJvZ3JhbXMvYnJsdHR5LWN0Yi5jOjU0CisjOiBQcm9ncmFtcy9icmx0dHkta3RiLmM6NzMgUHJvZ3JhbXMvY29uZmlnLmM6NTE4Cittc2dpZCAiUGF0aCB0byBkaXJlY3RvcnkgY29udGFpbmluZyB0YWJsZXMuIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL2JybHR0eS10dGIuYzoxNTIKK21zZ2lkICJQYXRoIHRvIGRpcmVjdG9yeSBjb250YWluaW5nIHRleHQgdGFibGVzLiIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9icmx0dHkta3RiLmM6ODMKK21zZ2lkICJQYXRoIHRvIGRpcmVjdG9yeSBmb3IgbG9hZGluZyBkcml2ZXJzLiIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9icmx0dHktdHJ0eHQuYzo1MQorbXNnaWQgIlBhdGggdG8gZGlyZWN0b3J5IGZvciB0ZXh0IHRhYmxlcy4iCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvYnJsdGVzdC5jOjc4IFByb2dyYW1zL2NvbmZpZy5jOjQzNworbXNnaWQgIlBhdGggdG8gZGlyZWN0b3J5IHdoaWNoIGNhbiBiZSB3cml0dGVuIHRvLiIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9jb25maWcuYzo0MjcKK21zZ2lkICJQYXRoIHRvIGRpcmVjdG9yeSB3aGljaCBjb250YWlucyBmaWxlcyB0aGF0IGNhbiBiZSB1cGRhdGVkLiIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9jb25maWcuYzozMjcKK21zZ2lkICJQYXRoIHRvIGRpcmVjdG9yeSB3aGljaCBjb250YWlucyBtZXNzYWdlIHRyYW5zbGF0aW9ucy4iCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvYnJsdHR5LXRydHh0LmM6NTkKK21zZ2lkICJQYXRoIHRvIGlucHV0IHRleHQgdGFibGUuIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL2NvbmZpZy5jOjY3NgorbXNnaWQgIlBhdGggdG8gbG9nIGZpbGUuIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL2JybHR0eS10cnR4dC5jOjY3Cittc2dpZCAiUGF0aCB0byBvdXRwdXQgdGV4dCB0YWJsZS4iCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvY29uZmlnLmM6MzgzCittc2dpZCAiUGF0aCB0byBwcm9jZXNzIGlkZW50aWZpZXIgZmlsZS4iCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvY29uZmlnLmM6NDE3Cittc2dpZCAiUGF0dGVybnMgdGhhdCBtYXRjaCBjb21tYW5kIHByb21wdHMuIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL21pZGkuYzozOAorbXNnaWQgIlBlcmN1c3NpdmUgSW5zdHJ1bWVudHMiCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvbWlkaS5jOjYzCittc2dpZCAiUGVyY3Vzc2l2ZSBPcmdhbiIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9taWRpLmM6MjQKK21zZ2lkICJQaWFubyIKK21zZ3N0ciAiUGlhbm9mb3J0ZSIKKworIy4gUGlwZQorIzogUHJvZ3JhbXMvbWlkaS5jOjEyNQorbXNnaWQgIlBpY2NvbG8iCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvbWlkaS5jOjMzCittc2dpZCAiUGlwZSIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9taWRpLmM6OTQKK21zZ2lkICJQaXp6aWNhdG8gU3RyaW5ncyIKK21zZ3N0ciAiIgorCisjOiBEcml2ZXJzL0JyYWlsbGUvQmF1bS9icmFpbGxlLmM6MTExOQorbXNnaWQgIlBvd2VyZG93biIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9jb25maWcuYzoyNzcxIFByb2dyYW1zL21lbnVfcHJlZnMuYzoxMzQ2Cittc2dpZCAiUHJlZmVyZW5jZXMgRmlsZSIKK21zZ3N0ciAiRmlsZSBkZWxsZSBwcmVmZXJlbnplIgorCisjOiBQcm9ncmFtcy9zY3JfbWVudS5jOjI3MQorbXNnaWQgIlByZWZlcmVuY2VzIE1lbnUiCittc2dzdHIgIiIKKworIzogSGVhZGVycy9vcHRpb25zLmg6NzUKK21zZ2lkICJQcmludCBhIHVzYWdlIHN1bW1hcnkgKGFsbCBvcHRpb25zKSwgYW5kIHRoZW4gZXhpdC4iCittc2dzdHIgIiIKKworIzogSGVhZGVycy9vcHRpb25zLmg6NzAKK21zZ2lkICJQcmludCBhIHVzYWdlIHN1bW1hcnkgKGNvbW1vbmx5IHVzZWQgb3B0aW9ucyBvbmx5KSwgYW5kIHRoZW4gZXhpdC4iCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvY29uZmlnLmM6NzkwCittc2dpZCAiUHJpdmlsZWdlIFBhcmFtZXRlciIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6MTI5NworbXNnaWQgIlByb2ZpbGVzIgorbXNnc3RyICJQcm9maWxpIgorCisjOiBQcm9ncmFtcy9jb25maWcuYzo1NjMKK21zZ2lkICJQcm9wZXJ0aWVzIG9mIGVsaWdpYmxlIGtleWJvYXJkcy4iCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjgzOQorbXNnaWQgIlF1aWNrIFNwYWNlIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzoxMDQ3Cittc2dpZCAiUmFpc2UgUGl0Y2giCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvY29uZmlnLmM6MzE4Cittc2dpZCAiUmVjb2duaXplIGVudmlyb25tZW50IHZhcmlhYmxlcy4iCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvbWlkaS5jOjEyNworbXNnaWQgIlJlY29yZGVyIgorbXNnc3RyICJSZWdpc3RyYXRvcmUiCisKKyM6IFByb2dyYW1zL21pZGkuYzozMgorbXNnaWQgIlJlZWQiCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvbWlkaS5jOjY2Cittc2dpZCAiUmVlZCBPcmdhbiIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9icmx0dHktY3RiLmM6ODIKK21zZ2lkICJSZWZvcm1hdCBpbnB1dC4iCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvY29uZmlnLmM6NTA4Cittc2dpZCAiUmVsZWFzZSBicmFpbGxlIGRldmljZSB3aGVuIHNjcmVlbiBvciB3aW5kb3cgaXMgdW5yZWFkYWJsZS4iCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMveGJybGFwaS5jOjEwNgorbXNnaWQgIlJlbWFpbiBhIGZvcmVncm91bmQgcHJvY2VzcyIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9jb25maWcuYzozMzQKK21zZ2lkICJSZW1haW4gYSBmb3JlZ3JvdW5kIHByb2Nlc3MuIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL2JybHR0eS10cnR4dC5jOjczCittc2dpZCAiUmVtb3ZlIGRvdHMgc2V2ZW4gYW5kIGVpZ2h0LiIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9jb25maWcuYzozNDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVtb3ZlIHRoZSAlcyBzZXJ2aWNlLCBhbmQgdGhlbiBleGl0LiIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9icmx0dHkta3RiLmM6NDUKK21zZ2lkICJSZXBvcnQgcHJvYmxlbXMgd2l0aCB0aGUga2V5IHRhYmxlLiIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9icmx0dHktdHRiLmM6MTg2Cittc2dpZCAiUmVwb3J0IHRoZSBjaGFyYWN0ZXJzIHdpdGhpbiB0aGUgY3VycmVudCBzY3JlZW4gZm9udCB0aGF0IGFyZW4ndCBkZWZpbmVkIHdpdGhpbiB0aGUgdGV4dCB0YWJsZS4iCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjc1NQorbXNnaWQgIlJlc3Qgb2YgTGluZSIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6MTQ0NQorbXNnaWQgIlJlc3RhcnQgQnJhaWxsZSBEcml2ZXIiCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjE0NTcKK21zZ2lkICJSZXN0YXJ0IFNjcmVlbiBEcml2ZXIiCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjE0NTEKK21zZ2lkICJSZXN0YXJ0IFNwZWVjaCBEcml2ZXIiCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvbWlkaS5jOjE3NworbXNnaWQgIlJldmVyc2UgQ3ltYmFsIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzoxMjIzCittc2dpZCAiUmlnaHQiCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvbWlkaS5jOjY0Cittc2dpZCAiUm9jayBPcmdhbiIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6NTg1Cittc2dpZCAiU2F2ZSBvbiBFeGl0IgorbXNnc3RyICJTYWx2YSBhbGwndXNjaXRhIgorCisjLiAiY2FwIiBoZXJlLCB1c2VkIGR1cmluZyBzcGVlY2ggb3V0cHV0LCBpcyBzaG9ydCBmb3IgImNhcGl0YWwiLgorIy4gSXQgaXMgc3Bva2VuIGp1c3QgYmVmb3JlIGFuIHVwcGVyY2FzZSBsZXR0ZXIsIGUuZy4gImNhcCBBIi4KKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzoxMDQ2Cittc2dpZCAiU2F5IENhcCIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6MTA3MAorbXNnaWQgIlNheSBMaW5lIE1vZGUiCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjEwNTcKK21zZ2lkICJTYXkgU3BhY2UiCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjQ2MAorbXNnaWQgIlNjcmVlbiBDdXJzb3IgQ29sdW1uIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzo0NTkKK21zZ2lkICJTY3JlZW4gQ3Vyc29yIENvb3JkaW5hdGVzIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzo2ODcKK21zZ2lkICJTY3JlZW4gQ3Vyc29yIEludmlzaWJsZSBUaW1lIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzo0NjEKK21zZ2lkICJTY3JlZW4gQ3Vyc29yIFJvdyIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6NjY5Cittc2dpZCAiU2NyZWVuIEN1cnNvciBTdHlsZSIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6NjgxCittc2dpZCAiU2NyZWVuIEN1cnNvciBWaXNpYmxlIFRpbWUiCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjQ2MgorbXNnaWQgIlNjcmVlbiBDdXJzb3IgYW5kIEJyYWlsbGUgV2luZG93IENvbHVtbiIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6NDYzCittc2dpZCAiU2NyZWVuIEN1cnNvciBhbmQgQnJhaWxsZSBXaW5kb3cgUm93IgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL2NvbmZpZy5jOjIyNjgKK21zZ2lkICJTY3JlZW4gRHJpdmVyIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL2xvZy5jOjE2MAorbXNnaWQgIlNjcmVlbiBEcml2ZXIgRXZlbnRzIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzo0NjQKK21zZ2lkICJTY3JlZW4gTnVtYmVyIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL2NvbmZpZy5jOjIyNzQKK21zZ2lkICJTY3JlZW4gUGFyYW1ldGVyIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL2NvbmZpZy5jOjYwOAorIywgYy1mb3JtYXQKK21zZ2lkICJTY3JlZW4gZHJpdmVyIGNvZGUgKCVzLCAlcywgb3Igb25lIG9mIHslc30pLiIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6NzgwCittc2dpZCAiU2Nyb2xsLWF3YXJlIEN1cnNvciBOYXZpZ2F0aW9uIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL21pZGkuYzoxODEKK21zZ2lkICJTZWFzaG9yZSIKK21zZ3N0ciAiT25kZSBkZWwgbWFyZSIKKworIzogUHJvZ3JhbXMvY21kX21pc2NlbGxhbmVvdXMuYzo2NQorbXNnaWQgIlNlcHRlbWJlciIKK21zZ3N0ciAiU2V0dGVtYnJlIgorCisjOiBQcm9ncmFtcy9sb2cuYzoxMzAKK21zZ2lkICJTZXJpYWwgSS9PIgorbXNnc3RyICJJL08gc2VyaWFsZSIKKworIzogUHJvZ3JhbXMvbG9nLmM6MTI0Cittc2dpZCAiU2VydmVyIEV2ZW50cyIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9taWRpLmM6MTMwCittc2dpZCAiU2hha3VoYWNoaSIKK21zZ3N0ciAiU2hha3VoYWNoaSIKKworIzogUHJvZ3JhbXMvbWlkaS5jOjE2MworbXNnaWQgIlNoYW1pc2VuIgorbXNnc3RyICJTaGFtaXNlbiIKKworIzogUHJvZ3JhbXMvbWlkaS5jOjE2OAorbXNnaWQgIlNoYW5haSIKK21zZ3N0ciAiU2hhbmFpIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6NTk4Cittc2dpZCAiU2hvdyBBZHZhbmNlZCBTdWJtZW51cyIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6NjAzCittc2dpZCAiU2hvdyBBbGwgSXRlbXMiCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjY5MworbXNnaWQgIlNob3cgQXR0cmlidXRlcyIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6NjY0Cittc2dpZCAiU2hvdyBTY3JlZW4gQ3Vyc29yIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzoxMTc2Cittc2dpZCAiU2hvdyBTZWNvbmRzIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzoxMTIyCittc2dpZCAiU2hvdyBTcGVlY2ggQ3Vyc29yIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzo1OTMKK21zZ2lkICJTaG93IFN1Ym1lbnUgU2l6ZXMiCittc2dzdHIgIiIKKworIy4gRXRobmljIEluc3RydW1lbnRzCisjOiBQcm9ncmFtcy9taWRpLmM6MTYxCittc2dpZCAiU2l0YXIiCittc2dzdHIgIlNpdGFyIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6NzQ3Cittc2dpZCAiU2tpcCBCbGFuayBCcmFpbGxlIFdpbmRvd3MiCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjc0MQorbXNnaWQgIlNraXAgSWRlbnRpY2FsIExpbmVzIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzo3NTgKK21zZ2lkICJTa2lwIFdoaWNoIEJsYW5rIEJyYWlsbGUgV2luZG93cyIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9taWRpLmM6ODQKK21zZ2lkICJTbGFwIEJhc3MgMSIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9taWRpLmM6ODUKK21zZ2lkICJTbGFwIEJhc3MgMiIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6MTIwNgorbXNnaWQgIlNsYXNoIgorbXNnc3RyICJCYXJyYSIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjc2MworbXNnaWQgIlNsaWRpbmcgQnJhaWxsZSBXaW5kb3ciCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjEwMzEKK21zZ2lkICJTb21lIgorbXNnc3RyICIiCisKKyMuIFJlZWQKKyM6IFByb2dyYW1zL21pZGkuYzoxMTYKK21zZ2lkICJTb3ByYW5vIFNheCIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9taWRpLmM6MzkKK21zZ2lkICJTb3VuZCBFZmZlY3RzIgorbXNnc3RyICJFZmZldHRpIHNvbm9yaSIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjEyNDIKK21zZ2lkICJTcGFjZSIKK21zZ3N0ciAiU3BhemlvIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6MTExMAorbXNnaWQgIlNwZWFrIENvbXBsZXRlZCBXb3JkcyIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6MTA5OAorbXNnaWQgIlNwZWFrIERlbGV0ZWQgQ2hhcmFjdGVycyIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6MTA5MgorbXNnaWQgIlNwZWFrIEluc2VydGVkIENoYXJhY3RlcnMiCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjExMTYKK21zZ2lkICJTcGVhayBMaW5lIEluZGVudCIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6MTEwNAorbXNnaWQgIlNwZWFrIFJlcGxhY2VkIENoYXJhY3RlcnMiCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjEwODYKK21zZ2lkICJTcGVhayBTZWxlY3RlZCBDaGFyYWN0ZXIiCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjEwODAKK21zZ2lkICJTcGVhayBTZWxlY3RlZCBMaW5lIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzoxMTQ1Cittc2dpZCAiU3BlZWNoIEN1cnNvciBJbnZpc2libGUgVGltZSIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6MTEyNworbXNnaWQgIlNwZWVjaCBDdXJzb3IgU3R5bGUiCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjExMzkKK21zZ2lkICJTcGVlY2ggQ3Vyc29yIFZpc2libGUgVGltZSIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9jb25maWcuYzoyMDQzCittc2dpZCAiU3BlZWNoIERyaXZlciIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9sb2cuYzoxNTQKK21zZ2lkICJTcGVlY2ggRHJpdmVyIEV2ZW50cyIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9sb2cuYzoxMTIKK21zZ2lkICJTcGVlY2ggRXZlbnRzIgorbXNnc3RyICIiCisKKyMuIENyZWF0ZSB0aGUgZmlsZSBzeXN0ZW0gb2JqZWN0IGZvciBzcGVlY2ggaW5wdXQuCisjOiBQcm9ncmFtcy9jb25maWcuYzoyODgyCittc2dpZCAiU3BlZWNoIElucHV0IgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzoxMDA1Cittc2dpZCAiU3BlZWNoIE9wdGlvbnMiCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvY29uZmlnLmM6MjA0NgorbXNnaWQgIlNwZWVjaCBQYXJhbWV0ZXIiCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjEwMjIKK21zZ2lkICJTcGVlY2ggUGl0Y2giCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjEwMzUKK21zZ2lkICJTcGVlY2ggUHVuY3R1YXRpb24iCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjEwMTUKK21zZ2lkICJTcGVlY2ggUmF0ZSIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6MTA1MAorbXNnaWQgIlNwZWVjaCBVcHBlcmNhc2UgSW5kaWNhdG9yIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzoxMDA4Cittc2dpZCAiU3BlZWNoIFZvbHVtZSIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6MTA2MAorbXNnaWQgIlNwZWVjaCBXaGl0ZXNwYWNlIEluZGljYXRvciIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9jb25maWcuYzo1NzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3BlZWNoIGRyaXZlciBjb2RlICglcywgJXMsIG9yIG9uZSBvZiB7JXN9KS4iCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjEzOTIKK21zZ2lkICJTdGFuZGFyZCBFcnJvciBMb2cgTGV2ZWwiCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjgxNQorbXNnaWQgIlN0YXJ0IFNlbGVjdGlvbiB3aXRoIFJvdXRpbmcgS2V5IgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzo0NjUKK21zZ2lkICJTdGF0ZSBEb3RzIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzo0NjYKK21zZ2lkICJTdGF0ZSBMZXR0ZXIiCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjEyMTcKK21zZ2lkICJTdGF0dXMgQ2VsbHMiCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjEyMzMKK21zZ2lkICJTdGF0dXMgQ291bnQiCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjQ3NAorbXNnaWQgIlN0YXR1cyBGaWVsZCIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6MTIyNgorbXNnaWQgIlN0YXR1cyBQb3NpdGlvbiIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6MTI0OAorbXNnaWQgIlN0YXR1cyBTZXBhcmF0b3IiCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjEyNDQKK21zZ2lkICJTdGF0dXMgU2lkZSIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9taWRpLmM6MTcyCittc2dpZCAiU3RlZWwgRHJ1bXMiCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvY29uZmlnLmM6MzczCisjLCBjLWZvcm1hdAorbXNnaWQgIlN0b3AgYW4gZXhpc3RpbmcgaW5zdGFuY2Ugb2YgJXMsIGFuZCB0aGVuIGV4aXQuIgorbXNnc3RyICIiCisKKyMuIEVuc2VtYmxlCisjOiBQcm9ncmFtcy9taWRpLmM6OTgKK21zZ2lkICJTdHJpbmcgRW5zZW1ibGUgMSIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9taWRpLmM6OTkKK21zZ2lkICJTdHJpbmcgRW5zZW1ibGUgMiIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9taWRpLmM6MjkKK21zZ2lkICJTdHJpbmdzIgorbXNnc3RyICJTdHJpbmdlIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6NjM1Cittc2dpZCAiU3VwZXJpbXBvc2UgRG90IDciCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvY29uZmlnLmM6NjU5Cittc2dpZCAiU3VwcHJlc3Mgc3RhcnQtdXAgbWVzc2FnZXMuIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL21pZGkuYzo4NgorbXNnaWQgIlN5bnRoIEJhc3MgMSIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9taWRpLmM6ODcKK21zZ2lkICJTeW50aCBCYXNzIDIiCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvbWlkaS5jOjE3NgorbXNnaWQgIlN5bnRoIERydW0iCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvbWlkaS5jOjM2Cittc2dpZCAiU3ludGggRk0iCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvbWlkaS5jOjM0Cittc2dpZCAiU3ludGggTGVhZCIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9taWRpLmM6MzUKK21zZ2lkICJTeW50aCBQYWQiCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvbWlkaS5jOjEwNAorbXNnaWQgIlN5bnRoIFZvaWNlIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL21pZGkuYzoxMTMKK21zZ2lkICJTeW50aEJyYXNzIDEiCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvbWlkaS5jOjExNAorbXNnaWQgIlN5bnRoQnJhc3MgMiIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9taWRpLmM6MTAwCittc2dpZCAiU3ludGhTdHJpbmdzIDEiCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvbWlkaS5jOjEwMQorbXNnaWQgIlN5bnRoU3RyaW5ncyAyIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzoxMzg3Cittc2dpZCAiU3lzdGVtIExvZyBMZXZlbCIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9jb25maWcuYzoyNzkyIFByb2dyYW1zL21lbnVfcHJlZnMuYzoxMzYxCittc2dpZCAiVGFibGVzIERpcmVjdG9yeSIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9taWRpLmM6MTc0Cittc2dpZCAiVGFpa28gRHJ1bSIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9taWRpLmM6NjkKK21zZ2lkICJUYW5nbyBBY2NvcmRpb24iCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvbWlkaS5jOjE4MworbXNnaWQgIlRlbGVwaG9uZSBSaW5nIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL21pZGkuYzoxMTgKK21zZ2lkICJUZW5vciBTYXgiCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjY2MQorbXNnaWQgIlRleHQgSW5kaWNhdG9ycyIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6MTI0NQorbXNnaWQgIlRleHQgU2lkZSIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6NjE5Cittc2dpZCAiVGV4dCBTdHlsZSIKK21zZ3N0ciAiU3RpbGUgdGVzdG8iCisKKyM6IFByb2dyYW1zL2NvbmZpZy5jOjI4MTMgUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjEyNzMKK21zZ2lkICJUZXh0IFRhYmxlIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL2JybHR0eS1jdGIuYzo2OQorbXNnaWQgIlRleHQgdGFibGUuIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL2NvbmZpZy5jOjMwNAorbXNnaWQgIlRoZSB0ZXh0IHRvIGJlIHNob3duIHdoZW4gdGhlIGJyYWlsbGUgZHJpdmVyIHN0YXJ0cyBhbmQgdG8gYmUgc3Bva2VuIHdoZW4gdGhlIHNwZWVjaCBkcml2ZXIgc3RhcnRzLiIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9jb25maWcuYzozMTEKK21zZ2lkICJUaGUgdGV4dCB0byBiZSBzaG93biB3aGVuIHRoZSBicmFpbGxlIGRyaXZlciBzdG9wcy4iCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjQ2NworbXNnaWQgIlRpbWUiCittc2dzdHIgIk9yYXJpbyIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjExNjEKK21zZ2lkICJUaW1lIEZvcm1hdCIKK21zZ3N0ciAiRm9ybWF0byBkZWxsJ29ybyIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjExNTMKK21zZ2lkICJUaW1lIFByZXNlbnRhdGlvbiIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6MTE3MQorbXNnaWQgIlRpbWUgU2VwYXJhdG9yIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL21pZGkuYzo5NgorbXNnaWQgIlRpbXBhbmkiCittc2dzdHIgIlRpbXBhbmkiCisKKyMuIFBlcmN1c3NpdmUgSW5zdHJ1bWVudHMKKyM6IFByb2dyYW1zL21pZGkuYzoxNzAKK21zZ2lkICJUaW5rbGUgQmVsbCIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6MTQ0MQorbXNnaWQgIlRvb2xzIgorbXNnc3RyICJTdHJ1bWVudGkiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzo4OTIKK21zZ2lkICJUb3VjaCBOYXZpZ2F0aW9uIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzo5MDYKK21zZ2lkICJUb3VjaCBTZW5zaXRpdml0eSIKK21zZ3N0ciAiU2Vuc2liaWxpdMOgIGFsIHRvY2NvIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6ODA0Cittc2dpZCAiVHJhY2sgU2NyZWVuIFBvaW50ZXIiCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjc5OAorbXNnaWQgIlRyYWNrIFNjcmVlbiBTY3JvbGwiCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjgzMAorbXNnaWQgIlRyYW5zbGF0ZWQgdmlhIFRleHQgVGFibGUiCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvbWlkaS5jOjkzCittc2dpZCAiVHJlbW9sbyBTdHJpbmdzIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL21pZGkuYzoxMDgKK21zZ2lkICJUcm9tYm9uZSIKK21zZ3N0ciAiIgorCisjLiBCcmFzcworIzogUHJvZ3JhbXMvbWlkaS5jOjEwNworbXNnaWQgIlRydW1wZXQiCittc2dzdHIgIlRyb21iYSIKKworIzogUHJvZ3JhbXMvbWlkaS5jOjEwOQorbXNnaWQgIlR1YmEiCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvbWlkaS5jOjU5Cittc2dpZCAiVHVidWxhciBCZWxscyIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6OTUxCittc2dpZCAiVHVuZSBEZXZpY2UiCittc2dzdHIgIkFjY29yZGFyZSBkaXNwb3NpdGl2byIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjgzNAorbXNnaWQgIlR5cGluZyBNb2RlIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL2xvZy5jOjEzNgorbXNnaWQgIlVTQiBJL08iCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjU3NQorbXNnaWQgIlVuZGVybGluZSIKK21zZ3N0ciAiU290dG9saW5lYXRvIgorCisjOiBQcm9ncmFtcy9hbGVydC5jOjEwMgorbXNnaWQgIlVuZnJvemVuIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL2NvbmZpZy5jOjI3ODkgUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjEzNDEKK21zZ2lkICJVcGRhdGFibGUgRGlyZWN0b3J5IgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL2xvZy5jOjEwNgorbXNnaWQgIlVwZGF0ZSBFdmVudHMiCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvb3B0aW9ucy5jOjE1MQorbXNnaWQgIlVzYWdlIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzo2MzQKK21zZ2lkICJVc2UgQ2FwaXRhbCBTaWduIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL21pZGkuYzo1NgorbXNnaWQgIlZpYnJhcGhvbmUiCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvbWlkaS5jOjkwCittc2dpZCAiVmlvbGEiCittc2dzdHIgIiIKKworIy4gU3RyaW5ncworIzogUHJvZ3JhbXMvbWlkaS5jOjg5Cittc2dpZCAiVmlvbGluIgorbXNnc3RyICJWaW9saW5vIgorCisjOiBQcm9ncmFtcy9taWRpLmM6MTAzCittc2dpZCAiVm9pY2UgT29ocyIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6MTM3NworbXNnaWQgIldhcm5pbmciCittc2dzdHIgIkF2dmlzbyIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjEzMjEKK21zZ2lkICJXZWIgU2l0ZSIKK21zZ3N0ciAiU2l0byB3ZWIiCisKKyM6IFByb2dyYW1zL21pZGkuYzoxMzEKK21zZ2lkICJXaGlzdGxlIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL21pZGkuYzoxNzMKK21zZ2lkICJXb29kYmxvY2siCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjczNworbXNnaWQgIldvcmQgV3JhcCIKK21zZ3N0ciAiQSBjYXBvIGF1dG9tYXRpY28iCisKKyM6IFByb2dyYW1zL2NvbmZpZy5jOjI3NjMKK21zZ2lkICJXb3JraW5nIERpcmVjdG9yeSIKK21zZ3N0ciAiRGlyZWN0b3J5IGRpIGxhdm9ybyIKKworIzogUHJvZ3JhbXMvY29uZmlnLmM6Mjc5MCBQcm9ncmFtcy9tZW51X3ByZWZzLmM6MTM1MQorbXNnaWQgIldyaXRhYmxlIERpcmVjdG9yeSIKK21zZ3N0ciAiRGlyZWN0b3J5IGNvbiBhY2Nlc3NvIGluIHNjcml0dHVyYSIKKworIzogUHJvZ3JhbXMveGJybGFwaS5jOjExOAorbXNnaWQgIldyaXRlIGRlYnVnZ2luZyBvdXRwdXQgdG8gc3Rkb3V0IgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL2NvbmZpZy5jOjY4MgorbXNnaWQgIldyaXRlIHRoZSBzdGFydC11cCBsb2dzLCBhbmQgdGhlbiBleGl0LiIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy94YnJsYXBpLmM6MTAwCittc2dpZCAiWCBkaXNwbGF5IHRvIGNvbm5lY3QgdG8iCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvcGdtcHJpdnNfbGludXguYzoxOTUxCittc2dpZCAiWERHIHJ1bnRpbWUgZGlyZWN0b3J5IGFjY2VzcyBwcm9ibGVtIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL3BnbXByaXZzX2xpbnV4LmM6MTkzMworbXNnaWQgIlhERyBydW50aW1lIGRpcmVjdG9yeSBjcmVhdGVkIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL3BnbXByaXZzX2xpbnV4LmM6MTkyOAorbXNnaWQgIlhERyBydW50aW1lIGRpcmVjdG9yeSBleGlzdHMiCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMveGJybGFwaS5jOjc4NgorbXNnaWQgIlhGcmVlKHdtX25hbWUpIGZvciBjaGFuZ2UiCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6MTI1OQorbXNnaWQgIlhUIChzZXQgMSkga2V5Ym9hcmQgc2NhbiBjb2RlIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL21pZGkuYzo1OAorbXNnaWQgIlh5bG9waG9uZSIKK21zZ3N0ciAiWGlsb2Zvbm8iCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzoxMTkzCittc2dpZCAiWWVhciBNb250aCBEYXkiCittc2dzdHIgIkFubm8gbWVzZSBnaW9ybm8iCisKKyM6IFByb2dyYW1zL21lbnUuYzo0NTAKK21zZ2lkICJZZXMiCittc2dzdHIgIlPDrCIKKworIzogUHJvZ3JhbXMveGJybGFwaS5jOjg0Cittc2dpZCAiW2hvc3RdWzpwb3J0XSIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6NTc2Cittc2dpZCAiYWxsIGRvdHMiCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvY21kX21pc2NlbGxhbmVvdXMuYzoxMjEKK21zZ2lkICJhbmQiCittc2dzdHIgImUiCisKKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjExNDIKK21zZ2lkICJhcHBlbmQgY2hhcmFjdGVycyB0byBjbGlwYm9hcmQiCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6MTAzMworbXNnaWQgImFwcGVuZCB0byBjbGlwYm9hcmQgZnJvbSBjaGFyYWN0ZXIiCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvY21kLmM6MjkwCittc2dpZCAiYXQgY3Vyc29yIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjEzMDEKK21zZ2lkICJiYWNrc3BhY2Uga2V5IgorbXNnc3RyICIiCisKKyM6IERyaXZlcnMvQnJhaWxsZS9CYXVtL2JyYWlsbGUuYzoxMTEwIERyaXZlcnMvQnJhaWxsZS9UU0kvYnJhaWxsZS5jOjg2OQorbXNnaWQgImJhdHRlcnkgbG93IgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjEyMjIKK21zZ2lkICJiaW5kIHRvIHNwZWNpZmljIHZpcnR1YWwgdGVybWluYWwiCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6ODM1Cittc2dpZCAiYmluZCB0byB0aGUgbmV4dCB2aXJ0dWFsIHRlcm1pbmFsIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjgyOQorbXNnaWQgImJpbmQgdG8gdGhlIHByZXZpb3VzIHZpcnR1YWwgdGVybWluYWwiCittc2dzdHIgIiIKKworIy4KKyM6IFByb2dyYW1zL2NtZF91dGlscy5jOjE0NAorbXNnaWQgImJsYWNrIgorbXNnc3RyICJuZXJvIgorCisjOiBQcm9ncmFtcy9jb3JlLmM6MTEyMAorbXNnaWQgImJsYW5rIGxpbmUiCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvY21kX3V0aWxzLmM6MTY4Cittc2dpZCAiYmxpbmsiCittc2dzdHIgIiIKKworIy4gQgorIzogUHJvZ3JhbXMvY21kX3V0aWxzLmM6MTQ1Cittc2dpZCAiYmx1ZSIKK21zZ3N0ciAiYmx1IgorCisjOiBQcm9ncmFtcy9jb25maWcuYzoyODUzCisjLCBjLWZvcm1hdAorbXNnaWQgImJyYWlsbGUgZGV2aWNlIG5vdCBzcGVjaWZpZWQiCittc2dzdHIgImRpc3Bvc2l0aXZvIGJyYWlsbGUgbm9uIHNwZWNpZmljYXRvIgorCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDo1NDQKK21zZ2lkICJicmFpbGxlIGRpc3BsYXkgdGVtcG9yYXJpbHkgdW5hdmFpbGFibGUiCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvY29uZmlnLmM6MTU1MworbXNnaWQgImJyYWlsbGUgZHJpdmVyIGluaXRpYWxpemF0aW9uIGZhaWxlZCIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9jb25maWcuYzoxNjMyCittc2dpZCAiYnJhaWxsZSBkcml2ZXIgbm90IGxvYWRhYmxlIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL2NvbmZpZy5jOjE4OTIKK21zZ2lkICJicmFpbGxlIGRyaXZlciByZXN0YXJ0aW5nIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL2NtZF9taXNjZWxsYW5lb3VzLmM6MTc4Cittc2dpZCAiYnJhaWxsZSBkcml2ZXIgc3RvcHBlZCIKK21zZ3N0ciAiIgorCisjOiBEcml2ZXJzL1NjcmVlbi9BbmRyb2lkL3NjcmVlbi5jOjE4OQorbXNnaWQgImJyYWlsbGUgcmVsZWFzZWQiCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6MTAxOQorbXNnaWQgImJyaW5nIHNjcmVlbiBjdXJzb3IgdG8gY2hhcmFjdGVyIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjUyMAorbXNnaWQgImJyaW5nIHNjcmVlbiBjdXJzb3IgdG8gY3VycmVudCBsaW5lIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjExOTMKK21zZ2lkICJicmluZyBzY3JlZW4gY3Vyc29yIHRvIGxpbmUiCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6NzMwCittc2dpZCAiYnJpbmcgc2NyZWVuIGN1cnNvciB0byBzcGVlY2ggY3Vyc29yIgorbXNnc3RyICIiCisKKyMuIFJHCisjOiBQcm9ncmFtcy9jbWRfdXRpbHMuYzoxNTAKK21zZ2lkICJicm93biIKK21zZ3N0ciAibWFycm9uZSIKKworIzogRHJpdmVycy9TY3JlZW4vTGludXgvc2NyZWVuLmM6MTQzMgorbXNnaWQgImNhbid0IGdldCBjb25zb2xlIHN0YXRlIgorbXNnc3RyICIiCisKKyM6IERyaXZlcnMvU2NyZWVuL0xpbnV4L3NjcmVlbi5jOjE1MTAKK21zZ2lkICJjYW4ndCBvcGVuIGNvbnNvbGUiCittc2dzdHIgIiIKKworIzogRHJpdmVycy9TY3JlZW4vTGludXgvc2NyZWVuLmM6MTU1NgorbXNnaWQgImNhbid0IHJlYWQgc2NyZWVuIGNvbnRlbnQiCittc2dzdHIgIiIKKworIzogRHJpdmVycy9TY3JlZW4vTGludXgvc2NyZWVuLmM6MTYwMQorbXNnaWQgImNhbid0IHJlYWQgc2NyZWVuIGhlYWRlciIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9hdGJfdHJhbnNsYXRlLmM6NzAKK21zZ2lkICJjYW5ub3QgY29tcGlsZSBhdHRyaWJ1dGVzIHRhYmxlIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL2N0Yl90cmFuc2xhdGUuYzozNjUKK21zZ2lkICJjYW5ub3QgY29tcGlsZSBjb250cmFjdGlvbiB0YWJsZSIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9jb25maWcuYzoxNTM2Cittc2dpZCAiY2Fubm90IGNvbXBpbGUga2V5IHRhYmxlIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL2NvbmZpZy5jOjExMTMKK21zZ2lkICJjYW5ub3QgY29tcGlsZSBrZXlib2FyZCB0YWJsZSIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy90dGJfdHJhbnNsYXRlLmM6MjU2Cittc2dpZCAiY2Fubm90IGNvbXBpbGUgdGV4dCB0YWJsZSIKK21zZ3N0ciAiIgorCisjLiBUaGlzIGlzIHRoZSBmaXJzdCBhdHRlbXB0IHRvIGNvbm5lY3QgdG8gQlJMVFRZLCBhbmQgaXQgZmFpbGVkLgorIy4gKiBSZXR1cm4gdGhlIGVycm9yIGltbWVkaWF0ZWx5IHRvIHRoZSB1c2VyLCB0byBwcm92aWRlIGZlZWRiYWNrIHRvIHVzZXJzCisjLiAqIHJ1bm5pbmcgeGJybGFwaSBieSBoYW5kLCBidXQgbm90IGZpbGwgbG9ncywgZWF0IGJhdHRlcnksIHNwYW0KKyMuICogMTI3LjAuMC4xIHdpdGggcmVjb25uZWN0aW9uIGF0dGVtcHRzLgorIy4KKyM6IFByb2dyYW1zL3hicmxhcGkuYzoyMDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGNvbm5lY3QgdG8gYnJhaWxsZSBkZXZpY2VzIGRhZW1vbiBicmx0dHkgYXQgJXNcbiIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy94YnJsYXBpLmM6NjU0CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBjb25uZWN0IHRvIGRpc3BsYXkgJXNcbiIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9maWxlLmM6MzYwCittc2dpZCAiY2Fubm90IGNyZWF0ZSBkaXJlY3RvcnkiCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvcHJvZ3JhbS5jOjE0OAorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgZGV0ZXJtaW5lIHByb2dyYW0gZGlyZWN0b3J5IgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL2NvbmZpZy5jOjI3NjYgUHJvZ3JhbXMvbWVudS5jOjU0NAorbXNnaWQgImNhbm5vdCBkZXRlcm1pbmUgd29ya2luZyBkaXJlY3RvcnkiCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvc3lzdGVtX3dpbmRvd3MuYzo2MQorbXNnaWQgImNhbm5vdCBmaW5kIHByb2NlZHVyZSIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9wcm9ncmFtLmM6MTU2Cittc2dpZCAiY2Fubm90IGZpeCBpbnN0YWxsIHBhdGgiCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMveGJybGFwaS5jOjI1OQorbXNnaWQgImNhbm5vdCBnZXQgdHR5XG4iCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMveGJybGFwaS5jOjI2NQorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgZ2V0IHR0eSAlZFxuIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL2ZpbGUuYzo0OTcKK21zZ2lkICJjYW5ub3QgZ2V0IHdvcmtpbmcgZGlyZWN0b3J5IgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL3hicmxhcGkuYzo3MDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGdyYWIgd2luZG93cyBvbiBzY3JlZW4gJWRcbiIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy94YnJsYXBpLmM6MjcyCittc2dpZCAiY2Fubm90IGlnbm9yZSBrZXlzXG4iCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvYXRiX3RyYW5zbGF0ZS5jOjkwCittc2dpZCAiY2Fubm90IGxvYWQgYXR0cmlidXRlcyB0YWJsZSIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9zeXN0ZW1fd2luZG93cy5jOjU0Cittc2dpZCAiY2Fubm90IGxvYWQgbGlicmFyeSIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy90dGJfdHJhbnNsYXRlLmM6Mjc2Cittc2dpZCAiY2Fubm90IGxvYWQgdGV4dCB0YWJsZSIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9maWxlLmM6MzQ5Cittc2dpZCAiY2Fubm90IG1ha2Ugd29ybGQgd3JpdGFibGUiCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvY29uZmlnLmM6MTA3MQorbXNnaWQgImNhbm5vdCBvcGVuIGtleSBoZWxwIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL3Byb2dyYW0uYzoyNjAKK21zZ2lkICJjYW5ub3Qgb3BlbiBwcm9jZXNzIGlkZW50aWZpZXIgZmlsZSIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9tZW51LmM6NTQyCittc2dpZCAiY2Fubm90IG9wZW4gd29ya2luZyBkaXJlY3RvcnkiCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvcHJlZnMuYzozNTAKK21zZ2lkICJjYW5ub3QgcmVhZCBwcmVmZXJlbmNlcyBmaWxlIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL3hicmxhcGkuYzozMzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHNldCBmb2N1cyB0byAlIzAxMHhcbiIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9maWxlLmM6NTExIFByb2dyYW1zL21lbnUuYzo1MzEKK21zZ2lkICJjYW5ub3Qgc2V0IHdvcmtpbmcgZGlyZWN0b3J5IgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL3ByZWZzLmM6NTI1Cittc2dpZCAiY2Fubm90IHdyaXRlIHRvIHByZWZlcmVuY2VzIGZpbGUiCittc2dzdHIgIiIKKworIy4gImNhcCIgaGVyZSwgdXNlZCBkdXJpbmcgc3BlZWNoIG91dHB1dCwgaXMgc2hvcnQgZm9yICJjYXBpdGFsIi4KKyMuIEl0IGlzIHNwb2tlbiBqdXN0IGJlZm9yZSBhbiB1cHBlcmNhc2UgbGV0dGVyLCBlLmcuICJjYXAgQSIuCisjOiBQcm9ncmFtcy9jb3JlLmM6MTA2NQorbXNnaWQgImNhcCIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6Nzc1IFByb2dyYW1zL21lbnVfcHJlZnMuYzoxMjM0Cittc2dpZCAiY2VsbHMiCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvY21kX3ByZWZlcmVuY2VzLmM6ODcKK21zZ2lkICJjaGFuZ2VzIGRpc2NhcmRlZCIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDo3NzUKK21zZ2lkICJjbGVhciBhbGwgc3RpY2t5IGlucHV0IG1vZGlmaWVycyIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDo4ODkKK21zZ2lkICJjbGVhciB0aGUgdGV4dCBzZWxlY3Rpb24iCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvY21kX3NwZWVjaC5jOjQ3NQorbXNnaWQgImNvbHVtbiIKK21zZ3N0ciAiY29sb25uYSIKKworIy4gY29uZmlndXJhdGlvbiBtZW51CisjOiBEcml2ZXJzL0JyYWlsbGUvQnJhaWxsZUxpdGUvYnJhaWxsZS5jOjYwNworbXNnaWQgImNvbmZpZyIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9vcHRpb25zLmM6ODA3Cittc2dpZCAiY29uZmlndXJhdGlvbiBkaXJlY3RpdmUgc3BlY2lmaWVkIG1vcmUgdGhhbiBvbmNlIgorbXNnc3RyICIiCisKKyM6IERyaXZlcnMvU2NyZWVuL0xpbnV4L3NjcmVlbi5jOjE1MDgKK21zZ2lkICJjb25zb2xlIG5vdCBpbiB1c2UiCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjk0NQorbXNnaWQgImNvbnNvbGUgdG9uZSBnZW5lcmF0b3IiCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6MTEzNQorbXNnaWQgImNvcHkgY2hhcmFjdGVycyB0byBjbGlwYm9hcmQiCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6OTAxCittc2dpZCAiY29weSBzZWxlY3RlZCB0ZXh0IHRvIGhvc3QgY2xpcGJvYXJkIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL2NvbmZpZy5jOjY0NCBQcm9ncmFtcy9tZW51X3ByZWZzLmM6NTAzCittc2dpZCAiY3NlY3MiCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6MTI4MAorbXNnaWQgImN1cnJlbnQgcmVhZGluZyBsb2NhdGlvbiIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDoxMzM2Cittc2dpZCAiY3Vyc29yLWRvd24ga2V5IgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjEzMTUKK21zZ2lkICJjdXJzb3ItbGVmdCBrZXkiCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6MTMyMgorbXNnaWQgImN1cnNvci1yaWdodCBrZXkiCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6MTMyOQorbXNnaWQgImN1cnNvci11cCBrZXkiCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6OTA3Cittc2dpZCAiY3V0IHNlbGVjdGVkIHRleHQgdG8gaG9zdCBjbGlwYm9hcmQiCittc2dzdHIgIiIKKworIy4gR0IKKyM6IFByb2dyYW1zL2NtZF91dGlscy5jOjE0NworbXNnaWQgImN5YW4iCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6NzgxCittc2dpZCAiY3ljbGUgdGhlIEFsdEdyIChSaWdodCBBbHQpIHN0aWNreSBpbnB1dCBtb2RpZmllciAobmV4dCwgb24sIG9mZikiCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6NTYyCittc2dpZCAiY3ljbGUgdGhlIENvbnRyb2wgc3RpY2t5IGlucHV0IG1vZGlmaWVyIChuZXh0LCBvbiwgb2ZmKSIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDo3ODcKK21zZ2lkICJjeWNsZSB0aGUgR1VJIChXaW5kb3dzKSBzdGlja3kgaW5wdXQgbW9kaWZpZXIgKG5leHQsIG9uLCBvZmYpIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjU2OAorbXNnaWQgImN5Y2xlIHRoZSBNZXRhIChMZWZ0IEFsdCkgc3RpY2t5IGlucHV0IG1vZGlmaWVyIChuZXh0LCBvbiwgb2ZmKSIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDo1NTAKK21zZ2lkICJjeWNsZSB0aGUgU2hpZnQgc3RpY2t5IGlucHV0IG1vZGlmaWVyIChuZXh0LCBvbiwgb2ZmKSIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDo1NTYKK21zZ2lkICJjeWNsZSB0aGUgVXBwZXIgc3RpY2t5IGlucHV0IG1vZGlmaWVyIChuZXh0LCBvbiwgb2ZmKSIKK21zZ3N0ciAiIgorCisjLiBMCisjOiBQcm9ncmFtcy9jbWRfdXRpbHMuYzoxNTIKK21zZ2lkICJkYXJrIGdyZXkiCittc2dzdHIgImdyaWdpbyBzY3VybyIKKworIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6NDgzCittc2dpZCAiZGVjcmVhc2Ugc3BlYWtpbmcgcmF0ZSIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDo0OTUKK21zZ2lkICJkZWNyZWFzZSBzcGVha2luZyB2b2x1bWUiCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6MTM3OAorbXNnaWQgImRlbGV0ZSBrZXkiCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6MTA3OQorbXNnaWQgImRlc2NyaWJlIGNoYXJhY3RlciIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDo3MTcKK21zZ2lkICJkZXNjcmliZSBjdXJyZW50IGNoYXJhY3RlciIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9jb25maWcuYzo2MjUgUHJvZ3JhbXMvY29uZmlnLmM6NjM1Cittc2dpZCAiZGV2aWNlIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL2JybHRlc3QuYzo2NCBQcm9ncmFtcy9icmx0ZXN0LmM6NzQgUHJvZ3JhbXMvYnJsdHR5LWF0Yi5jOjMyCisjOiBQcm9ncmFtcy9icmx0dHktY3RiLmM6NTAgUHJvZ3JhbXMvYnJsdHR5LWt0Yi5jOjY5IFByb2dyYW1zL2JybHR0eS1rdGIuYzo3OQorIzogUHJvZ3JhbXMvYnJsdHR5LXRydHh0LmM6NDcgUHJvZ3JhbXMvY29uZmlnLmM6MzIzIFByb2dyYW1zL2NvbmZpZy5jOjQyMworIzogUHJvZ3JhbXMvY29uZmlnLmM6NDMzIFByb2dyYW1zL2NvbmZpZy5jOjQ0MyBQcm9ncmFtcy9jb25maWcuYzo1MTQKK21zZ2lkICJkaXJlY3RvcnkiCittc2dzdHIgImRpcmVjdG9yeSIKKworIzogUHJvZ3JhbXMveGJybGFwaS5jOjk4Cittc2dpZCAiZGlzcGxheSIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDo0Cittc2dpZCAiZG8gbm90aGluZyIKK21zZ3N0ciAibm9uIGZhcmUgbnVsbGEiCisKKyM6IFByb2dyYW1zL2xlYXJuLmM6MTA4Cittc2dpZCAiZG9uZSIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6NTc3Cittc2dpZCAiZG90IDciCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjU3OAorbXNnaWQgImRvdCA4IgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzo1NzUKK21zZ2lkICJkb3RzIDcgYW5kIDgiCittc2dzdHIgIiIKKworIzogRHJpdmVycy9CcmFpbGxlL0JhdW0vYnJhaWxsZS5jOjExMDcKK21zZ2lkICJkcml2ZXIgcmVxdWVzdCIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9jb25maWcuYzo0NzIgUHJvZ3JhbXMvY29uZmlnLmM6NTcwIFByb2dyYW1zL2NvbmZpZy5jOjYwNQorbXNnaWQgImRyaXZlciwuLi4iCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6MTM2NAorbXNnaWQgImVuZCBrZXkiCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6MTI4NworbXNnaWQgImVudGVyIGtleSIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDozODQKK21zZ2lkICJlbnRlci9sZWF2ZSBjb21tYW5kIGxlYXJuIG1vZGUiCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6MzcyCittc2dpZCAiZW50ZXIvbGVhdmUgaGVscCBkaXNwbGF5IgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjM5MAorbXNnaWQgImVudGVyL2xlYXZlIHByZWZlcmVuY2VzIG1lbnUiCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6Mzc4Cittc2dpZCAiZW50ZXIvbGVhdmUgc3RhdHVzIGRpc3BsYXkiCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6MTMwOAorbXNnaWQgImVzY2FwZSBrZXkiCittc2dzdHIgIiIKKworIzogRHJpdmVycy9CcmFpbGxlL0lyaXMvYnJhaWxsZS5jOjE0OTQKK21zZ2lkICJldXJvYnJhaWxsZSIKK21zZ3N0ciAiZXVyb2JyYWlsbGUiCisKKyM6IFByb2dyYW1zL2NtZF9taXNjZWxsYW5lb3VzLmM6MTE4Cittc2dpZCAiZXhhY3RseSIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9jb25maWcuYzo4MTkKK21zZ2lkICJleGNlc3MgYXJndW1lbnQiCittc2dzdHIgIiIKKworIy4gcGFyZW50CisjOiBQcm9ncmFtcy9icmx0dHkuYzoxNzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXhlY3V0aW5nIFwiJXNcIiAoZnJvbSBcIiVzXCIpXG4iCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvcGdtcHJpdnNfbGludXguYzoyMDQ1Cittc2dpZCAiZXhlY3V0aW5nIGFzIHRoZSBpbnZva2luZyB1c2VyIgorbXNnc3RyICIiCisKKyMuIGV4ZWN2KCkgc2hvdWxkbid0IHJldHVybgorIzogUHJvZ3JhbXMvYnJsdHR5LmM6MTg0CisjLCBjLWZvcm1hdAorbXNnaWQgImV4ZWN1dGlvbiBvZiBcIiVzXCIgZmFpbGVkOiAlc1xuIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL3hicmxhcGkuYzo3MDkKK21zZ2lkICJmYWlsZWQgdG8gZ2V0IGZpcnN0IGZvY3VzXG4iCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvYnJsdHR5LXRydHh0LmM6NTYgUHJvZ3JhbXMvYnJsdHR5LXRydHh0LmM6NjQgUHJvZ3JhbXMvY29uZmlnLmM6MzgwCisjOiBQcm9ncmFtcy9jb25maWcuYzozODkgUHJvZ3JhbXMvY29uZmlnLmM6Mzk5IFByb2dyYW1zL2NvbmZpZy5jOjUyNQorIzogUHJvZ3JhbXMvY29uZmlnLmM6NTM1IFByb2dyYW1zL2NvbmZpZy5jOjU0NCBQcm9ncmFtcy9jb25maWcuYzo1NTMKKyM6IFByb2dyYW1zL2NvbmZpZy5jOjU4OSBQcm9ncmFtcy9jb25maWcuYzo2NzQKK21zZ2lkICJmaWxlIgorbXNnc3RyICJmaWxlIgorCisjOiBQcm9ncmFtcy9vcHRpb25zLmM6OTkzCisjLCBjLWZvcm1hdAorbXNnaWQgImZpbGUgJyVzJyBwcm9jZXNzaW5nIGVycm9yLiIKK21zZ3N0ciAiIgorCisjLiBmYWlsZWQKKyM6IFByb2dyYW1zL2JybHR0eS5jOjE3MgorIywgYy1mb3JtYXQKK21zZ2lkICJmb3JrIG9mIFwiJXNcIiBmYWlsZWQ6ICVzXG4iCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6MTM4NgorbXNnaWQgImZ1bmN0aW9uIGtleSIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDoyNDAKK21zZ2lkICJnbyBiYWNrIGFmdGVyIGN1cnNvciB0cmFja2luZyIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDo5MzkKK21zZ2lkICJnbyBiYWNrIHRvIHRoZSBwcmV2aW91cyBzY3JlZW4iCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6MTg2Cittc2dpZCAiZ28gYmFja3dhcmQgb25lIGJyYWlsbGUgd2luZG93IgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjIwMgorbXNnaWQgImdvIGJhY2t3YXJkIHNraXBwaW5nIGJsYW5rIGJyYWlsbGUgd2luZG93cyIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDo4NDMKK21zZ2lkICJnbyBiYWNrd2FyZCB0byBuZWFyZXN0IG5vbi1ibGFuayBicmFpbGxlIHdpbmRvdyIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDoyMAorbXNnaWQgImdvIGRvd24gb25lIGxpbmUiCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6MzYKK21zZ2lkICJnbyBkb3duIHNldmVyYWwgbGluZXMiCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6MTE4Cittc2dpZCAiZ28gZG93biB0byBmaXJzdCBsaW5lIG9mIG5leHQgcGFyYWdyYXBoIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjQxOAorbXNnaWQgImdvIGRvd24gdG8gbGFzdCBpdGVtIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjExMjgKK21zZ2lkICJnbyBkb3duIHRvIG5lYXJlc3QgbGluZSB3aXRoIGRpZmZlcmVudCBjaGFyYWN0ZXIiCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6NTIKK21zZ2lkICJnbyBkb3duIHRvIG5lYXJlc3QgbGluZSB3aXRoIGRpZmZlcmVudCBjb250ZW50IgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjY4Cittc2dpZCAiZ28gZG93biB0byBuZWFyZXN0IGxpbmUgd2l0aCBkaWZmZXJlbnQgaGlnaGxpZ2h0aW5nIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjEwNzIKK21zZ2lkICJnbyBkb3duIHRvIG5lYXJlc3QgbGluZSB3aXRoIGxlc3MgaW5kZW50IHRoYW4gY2hhcmFjdGVyIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjEzNAorbXNnaWQgImdvIGRvd24gdG8gbmV4dCBjb21tYW5kIHByb21wdCIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDo0MzQKK21zZ2lkICJnbyBkb3duIHRvIG5leHQgaXRlbSIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDoxOTQKK21zZ2lkICJnbyBmb3J3YXJkIG9uZSBicmFpbGxlIHdpbmRvdyIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDoyMTAKK21zZ2lkICJnbyBmb3J3YXJkIHNraXBwaW5nIGJsYW5rIGJyYWlsbGUgd2luZG93cyIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDo4NTEKK21zZ2lkICJnbyBmb3J3YXJkIHRvIG5lYXJlc3Qgbm9uLWJsYW5rIGJyYWlsbGUgd2luZG93IgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjE3MAorbXNnaWQgImdvIGxlZnQgaGFsZiBhIGJyYWlsbGUgd2luZG93IgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjE1NAorbXNnaWQgImdvIGxlZnQgb25lIGNoYXJhY3RlciIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDoxNzgKK21zZ2lkICJnbyByaWdodCBoYWxmIGEgYnJhaWxsZSB3aW5kb3ciCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6MTYyCittc2dpZCAiZ28gcmlnaHQgb25lIGNoYXJhY3RlciIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDo2OTAKK21zZ2lkICJnbyB0byBhbmQgc3BlYWsgZmlyc3Qgbm9uLWJsYW5rIGNoYXJhY3RlciBvbiBsaW5lIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjcwNAorbXNnaWQgImdvIHRvIGFuZCBzcGVhayBmaXJzdCBub24tYmxhbmsgbGluZSBvbiBzY3JlZW4iCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6Njk3Cittc2dpZCAiZ28gdG8gYW5kIHNwZWFrIGxhc3Qgbm9uLWJsYW5rIGNoYXJhY3RlciBvbiBsaW5lIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjcxMQorbXNnaWQgImdvIHRvIGFuZCBzcGVhayBsYXN0IG5vbi1ibGFuayBsaW5lIG9uIHNjcmVlbiIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDo2NDMKK21zZ2lkICJnbyB0byBhbmQgc3BlYWsgbmV4dCBjaGFyYWN0ZXIiCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6NjgzCittc2dpZCAiZ28gdG8gYW5kIHNwZWFrIG5leHQgbGluZSIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDo2NjMKK21zZ2lkICJnbyB0byBhbmQgc3BlYWsgbmV4dCB3b3JkIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjYzNgorbXNnaWQgImdvIHRvIGFuZCBzcGVhayBwcmV2aW91cyBjaGFyYWN0ZXIiCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6Njc2Cittc2dpZCAiZ28gdG8gYW5kIHNwZWFrIHByZXZpb3VzIGxpbmUiCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6NjU2Cittc2dpZCAiZ28gdG8gYW5kIHNwZWFrIHByZXZpb3VzIHdvcmQiCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6MTAyCittc2dpZCAiZ28gdG8gYmVnaW5uaW5nIG9mIGJvdHRvbSBsaW5lIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjIxOAorbXNnaWQgImdvIHRvIGJlZ2lubmluZyBvZiBsaW5lIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjkzCittc2dpZCAiZ28gdG8gYmVnaW5uaW5nIG9mIHRvcCBsaW5lIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjg0Cittc2dpZCAiZ28gdG8gYm90dG9tIGxpbmUiCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6NDU5Cittc2dpZCAiZ28gdG8gY3VycmVudCBzcGVha2luZyBwb3NpdGlvbiIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDoyMjYKK21zZ2lkICJnbyB0byBlbmQgb2YgbGluZSIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDo1ODEKK21zZ2lkICJnbyB0byBwcmV2aW91cyBtZW51IGxldmVsIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjExMDEKK21zZ2lkICJnbyB0byByZW1lbWJlcmVkIGJyYWlsbGUgd2luZG93IHBvc2l0aW9uIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjIzMworbXNnaWQgImdvIHRvIHNjcmVlbiBjdXJzb3IiCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6MjQ3Cittc2dpZCAiZ28gdG8gc2NyZWVuIGN1cnNvciBvciBnbyBiYWNrIGFmdGVyIGN1cnNvciB0cmFja2luZyIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDoxMTEwCittc2dpZCAiZ28gdG8gc2VsZWN0ZWQgbGluZSIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDo5MzIKK21zZ2lkICJnbyB0byB0aGUgaG9tZSBzY3JlZW4iCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6NzYKK21zZ2lkICJnbyB0byB0b3AgbGluZSIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDoxMgorbXNnaWQgImdvIHVwIG9uZSBsaW5lIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjI4Cittc2dpZCAiZ28gdXAgc2V2ZXJhbCBsaW5lcyIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDo0MTAKK21zZ2lkICJnbyB1cCB0byBmaXJzdCBpdGVtIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjExMAorbXNnaWQgImdvIHVwIHRvIGZpcnN0IGxpbmUgb2YgcGFyYWdyYXBoIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjExMTkKK21zZ2lkICJnbyB1cCB0byBuZWFyZXN0IGxpbmUgd2l0aCBkaWZmZXJlbnQgY2hhcmFjdGVyIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjQ0Cittc2dpZCAiZ28gdXAgdG8gbmVhcmVzdCBsaW5lIHdpdGggZGlmZmVyZW50IGNvbnRlbnQiCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6NjAKK21zZ2lkICJnbyB1cCB0byBuZWFyZXN0IGxpbmUgd2l0aCBkaWZmZXJlbnQgaGlnaGxpZ2h0aW5nIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjEwNjMKK21zZ2lkICJnbyB1cCB0byBuZWFyZXN0IGxpbmUgd2l0aCBsZXNzIGluZGVudCB0aGFuIGNoYXJhY3RlciIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDoxMjYKK21zZ2lkICJnbyB1cCB0byBwcmV2aW91cyBjb21tYW5kIHByb21wdCIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDo0MjYKK21zZ2lkICJnbyB1cCB0byBwcmV2aW91cyBpdGVtIgorbXNnc3RyICIiCisKKyMuIEcKKyM6IFByb2dyYW1zL2NtZF91dGlscy5jOjE0NgorbXNnaWQgImdyZWVuIgorbXNnc3RyICJ2ZXJkZSIKKworIzogUHJvZ3JhbXMvcGdtcHJpdnNfbGludXguYzoyMTY3Cittc2dpZCAiZ3JvdXAgcGVybWlzc2lvbnMgYWRkZWQiCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvY21kX21pc2NlbGxhbmVvdXMuYzoyMjgKK21zZ2lkICJoZWxwIG5vdCBhdmFpbGFibGUiCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvc2NyX2hlbHAuYzoyMjkKK21zZ2lkICJoZWxwIHNjcmVlbiBub3QgcmVhZGFibGUiCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6MTM1NworbXNnaWQgImhvbWUga2V5IgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL2NvbmZpZy5jOjQ5MworbXNnaWQgImlkZW50aWZpZXIsLi4uIgorbXNnc3RyICIiCisKKyM6IERyaXZlcnMvQnJhaWxsZS9CYXVtL2JyYWlsbGUuYzoxMTA5Cittc2dpZCAiaWRsZSB0aW1lb3V0IgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjQ4OQorbXNnaWQgImluY3JlYXNlIHNwZWFraW5nIHJhdGUiCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6NTAxCittc2dpZCAiaW5jcmVhc2Ugc3BlYWtpbmcgdm9sdW1lIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL2NvcmUuYzoxMTIzCittc2dpZCAiaW5kZW50IgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjExNDkKK21zZ2lkICJpbnNlcnQgY2xpcGJvYXJkIGhpc3RvcnkgZW50cnkgYWZ0ZXIgc2NyZWVuIGN1cnNvciIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDo1MjYKK21zZ2lkICJpbnNlcnQgY2xpcGJvYXJkIHRleHQgYWZ0ZXIgc2NyZWVuIGN1cnNvciIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDo5MTMKK21zZ2lkICJpbnNlcnQgaG9zdCBjbGlwYm9hcmQgdGV4dCBhZnRlciBzY3JlZW4gY3Vyc29yIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjEzNzEKK21zZ2lkICJpbnNlcnQga2V5IgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL3Byb2dyYW0uYzoxNjQKK21zZ2lkICJpbnN0YWxsIHBhdGggbm90IGFic29sdXRlIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL29wdGlvbnMuYzoxMDQKK21zZ2lkICJpbnZhbGlkIGNvdW50ZXIgc2V0dGluZyIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9kYXRhZmlsZS5jOjMxOAorbXNnaWQgImludmFsaWQgZXNjYXBlIHNlcXVlbmNlIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL29wdGlvbnMuYzoxMTMKK21zZ2lkICJpbnZhbGlkIGZsYWcgc2V0dGluZyIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9jb25maWcuYzoyNjc4Cittc2dpZCAiaW52YWxpZCBtZXNzYWdlIGhvbGQgdGltZW91dCIKK21zZ3N0ciAiIgorCisjLiB0aGUgb3BlcmFuZCBmb3IgYW4gb3B0aW9uIGlzIGludmFsaWQKKyM6IFByb2dyYW1zL29wdGlvbnMuYzo1ODkKK21zZ2lkICJpbnZhbGlkIG9wZXJhbmQiCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvYnJsYXBpX3NlcnZlci5jOjQ0MTMKK21zZ2lkICJpbnZhbGlkIHRocmVhZCBzdGFjayBzaXplIgorbXNnc3RyICIiCisKKyM6IERyaXZlcnMvQnJhaWxsZS9CcmFpbGxlTGl0ZS9icmFpbGxlLmM6NTkwCisjOiBEcml2ZXJzL0JyYWlsbGUvQnJhaWxsZUxpdGUvYnJhaWxsZS5jOjY2OAorbXNnaWQgImtleWJvYXJkIGVtdSBvZmYiCittc2dzdHIgIiIKKworIzogRHJpdmVycy9CcmFpbGxlL0JyYWlsbGVMaXRlL2JyYWlsbGUuYzo1ODkKK21zZ2lkICJrZXlib2FyZCBlbXUgb24iCittc2dzdHIgIiIKKworIy4gTCAgQgorIzogUHJvZ3JhbXMvY21kX3V0aWxzLmM6MTUzCittc2dpZCAibGlnaHQgYmx1ZSIKK21zZ3N0ciAiIgorCisjLiBMIEdCCisjOiBQcm9ncmFtcy9jbWRfdXRpbHMuYzoxNTUKK21zZ2lkICJsaWdodCBjeWFuIgorbXNnc3RyICIiCisKKyMuIEwgRworIzogUHJvZ3JhbXMvY21kX3V0aWxzLmM6MTU0Cittc2dpZCAibGlnaHQgZ3JlZW4iCittc2dzdHIgIiIKKworIy4gUkdCCisjOiBQcm9ncmFtcy9jbWRfdXRpbHMuYzoxNTEKK21zZ2lkICJsaWdodCBncmV5IgorbXNnc3RyICIiCisKKyMuIExSIEIKKyM6IFByb2dyYW1zL2NtZF91dGlscy5jOjE1NworbXNnaWQgImxpZ2h0IG1hZ2VudGEiCittc2dzdHIgIiIKKworIy4gTFIKKyM6IFByb2dyYW1zL2NtZF91dGlscy5jOjE1NgorbXNnaWQgImxpZ2h0IHJlZCIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9jbWRfc3BlZWNoLmM6NDc0Cittc2dpZCAibGluZSIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDoxMDQ3Cittc2dpZCAibGluZWFyIGNvcHkgdG8gY2hhcmFjdGVyIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL2NvbmZpZy5jOjY2NQorbXNnaWQgImx2bHxjYXQsLi4uIgorbXNnc3RyICIiCisKKyMuIFIgQgorIzogUHJvZ3JhbXMvY21kX3V0aWxzLmM6MTQ5Cittc2dpZCAibWFnZW50YSIKK21zZ3N0ciAibWFnZW50YSIKKworIy4gdGhlIG9wZXJhbmQgZm9yIGEgc3RyaW5nIG9wdGlvbiBoYXNuJ3QgYmVlbiBzcGVjaWZpZWQKKyM6IFByb2dyYW1zL29wdGlvbnMuYzo1ODMKK21zZ2lkICJtaXNzaW5nIG9wZXJhbmQiCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvcGFyc2UuYzo0NzIKK21zZ2lkICJtaXNzaW5nIHBhcmFtZXRlciBuYW1lIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL3BhcnNlLmM6NDU4Cittc2dpZCAibWlzc2luZyBwYXJhbWV0ZXIgcXVhbGlmaWVyIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL3BhcnNlLmM6NDM0Cittc2dpZCAibWlzc2luZyBwYXJhbWV0ZXIgdmFsdWUiCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6OTkzCittc2dpZCAibW92ZSB0byB0aGUgZmlyc3QgaXRlbSBpbiB0aGUgc2NyZWVuIGFyZWEiCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6MTAxMQorbXNnaWQgIm1vdmUgdG8gdGhlIGxhc3QgaXRlbSBpbiB0aGUgc2NyZWVuIGFyZWEiCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6MTAwNQorbXNnaWQgIm1vdmUgdG8gdGhlIG5leHQgaXRlbSBpbiB0aGUgc2NyZWVuIGFyZWEiCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6OTk5Cittc2dpZCAibW92ZSB0byB0aGUgcHJldmlvdXMgaXRlbSBpbiB0aGUgc2NyZWVuIGFyZWEiCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvY29uZmlnLmM6MzU2IFByb2dyYW1zL2NvbmZpZy5jOjQwOCBQcm9ncmFtcy9jb25maWcuYzo0NjEKKyM6IFByb2dyYW1zL2NvbmZpZy5jOjQ4MyBQcm9ncmFtcy9jb25maWcuYzo1NjEgUHJvZ3JhbXMvY29uZmlnLmM6NTgwCisjOiBQcm9ncmFtcy9jb25maWcuYzo2MTUKK21zZ2lkICJuYW1lPXZhbHVlLC4uLiIKK21zZ3N0ciAiIgorCisjOiBEcml2ZXJzL0JyYWlsbGUvSXJpcy9icmFpbGxlLmM6MTUxMAorbXNnaWQgIm5hdGl2ZSIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9jb25maWcuYzoxMDgwCittc2dpZCAibm8ga2V5IGJpbmRpbmdzIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL3Njcl9kcml2ZXIuYzozOQorbXNnaWQgIm5vIHNjcmVlbiIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9jb25maWcuYzo3MTcKK21zZ2lkICJub25lIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL2NvbmZpZy5jOjEzNTMKK21zZ2lkICJub3Qgc2F2ZWQiCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvcGdtcHJpdnNfbGludXguYzoyMDE4Cittc2dpZCAibm90IHN3aXRjaGluZyB0byBhbiB1bnByaXZpbGVnZWQgdXNlciIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDo5NjkKK21zZ2lkICJvcGVuIHRoZSBhcHBsaWNhdGlvbiBhbGVydHMgd2luZG93IgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjk1NworbXNnaWQgIm9wZW4gdGhlIGFwcGxpY2F0aW9uIGxpc3Qgd2luZG93IgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjk2MworbXNnaWQgIm9wZW4gdGhlIGFwcGxpY2F0aW9uLXNwZWNpZmljIG1lbnUiCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6OTI1Cittc2dpZCAib3BlbiB0aGUgYnJhaWxsZSBhY3Rpb25zIHdpbmRvdyIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDo5NTEKK21zZ2lkICJvcGVuIHRoZSBkZXZpY2Ugb3B0aW9ucyB3aW5kb3ciCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6OTQ1Cittc2dpZCAib3BlbiB0aGUgZGV2aWNlIHNldHRpbmdzIHdpbmRvdyIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9vcHRpb25zLmM6MTU1Cittc2dpZCAib3B0aW9uIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL3BnbXByaXZzX2xpbnV4LmM6MjE1MgorbXNnaWQgIm93bmVyc2hpcCBjbGFpbWVkIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjEzNTAKK21zZ2lkICJwYWdlLWRvd24ga2V5IgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjEzNDMKK21zZ2lkICJwYWdlLXVwIGtleSIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6NTA5Cittc2dpZCAicGVyY2VudGFnZSIKK21zZ3N0ciAicGVyY2VudHVhbGUiCisKKyM6IFByb2dyYW1zL2NvbmZpZy5jOjI2NTEKK21zZ2lkICJwaWQgZmlsZSBub3Qgc3BlY2lmaWVkIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL3Byb2dyYW0uYzozMDYKK21zZ2lkICJwaWQgZmlsZSBvcGVuIGVycm9yIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL3Nway5jOjIwMAorbXNnaWQgInBpdGNoIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjEwODYKK21zZ2lkICJwbGFjZSBsZWZ0IGVuZCBvZiBicmFpbGxlIHdpbmRvdyBhdCBjaGFyYWN0ZXIiCittc2dzdHIgIiIKKworIzogRHJpdmVycy9CcmFpbGxlL0JhdW0vYnJhaWxsZS5jOjExMDgKK21zZ2lkICJwb3dlciBzd2l0Y2giCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvc3BrLmM6MTg2Cittc2dpZCAicmF0ZSIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDoxMDQwCittc2dpZCAicmVjdGFuZ3VsYXIgY29weSB0byBjaGFyYWN0ZXIiCittc2dzdHIgIiIKKworIy4gUgorIzogUHJvZ3JhbXMvY21kX3V0aWxzLmM6MTQ4Cittc2dpZCAicmVkIgorbXNnc3RyICJyb3NzbyIKKworIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6ODc3Cittc2dpZCAicmVmcmVzaCBicmFpbGxlIGRpc3BsYXkiCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6MTIwMQorbXNnaWQgInJlZnJlc2ggYnJhaWxsZSBsaW5lIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL2NvbmZpZy5jOjQxNQorbXNnaWQgInJlZ2V4cCwuLi4iCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvY29uZmlnLmM6MTg5NgorIywgYy1mb3JtYXQKK21zZ2lkICJyZWluaXRpYWxpemluZyBicmFpbGxlIGRyaXZlciIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9jb25maWcuYzoyNDA5CisjLCBjLWZvcm1hdAorbXNnaWQgInJlaW5pdGlhbGl6aW5nIHNjcmVlbiBkcml2ZXIiCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvY29uZmlnLmM6MjIwOQorIywgYy1mb3JtYXQKK21zZ2lkICJyZWluaXRpYWxpemluZyBzcGVlY2ggZHJpdmVyIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjEwOTMKK21zZ2lkICJyZW1lbWJlciBjdXJyZW50IGJyYWlsbGUgd2luZG93IHBvc2l0aW9uIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjEyMjkKK21zZ2lkICJyZW5kZXIgYW4gYWxlcnQiCittc2dzdHIgIiIKKworIzogRHJpdmVycy9CcmFpbGxlL0JyYWlsbGVMaXRlL2JyYWlsbGUuYzo2MDEKKyM6IERyaXZlcnMvQnJhaWxsZS9CcmFpbGxlTGl0ZS9icmFpbGxlLmM6NzgwCisjOiBEcml2ZXJzL0JyYWlsbGUvQnJhaWxsZUxpdGUvYnJhaWxsZS5jOjc4MgorIzogRHJpdmVycy9CcmFpbGxlL0JyYWlsbGVMaXRlL2JyYWlsbGUuYzo3OTEKK21zZ2lkICJyZXBlYXQgY291bnQiCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6NTMyCittc2dpZCAicmVzdGFydCBicmFpbGxlIGRyaXZlciIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDo1MzgKK21zZ2lkICJyZXN0YXJ0IHNwZWVjaCBkcml2ZXIiCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6NzU1Cittc2dpZCAicmVzdG9yZSBjbGlwYm9hcmQgZnJvbSBkaXNrIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjQwMgorbXNnaWQgInJlc3RvcmUgcHJlZmVyZW5jZXMgZnJvbSBkaXNrIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjk3NQorbXNnaWQgInJldHVybiB0byB0aGUgYWN0aXZlIHNjcmVlbiBhcmVhIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjc0OQorbXNnaWQgInNhdmUgY2xpcGJvYXJkIHRvIGRpc2siCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6Mzk2Cittc2dpZCAic2F2ZSBwcmVmZXJlbmNlcyB0byBkaXNrIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL3hicmxhcGkuYzo5MQorbXNnaWQgInNjaGVtZSsuLi4iCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvY29uZmlnLmM6MjI4NQorbXNnaWQgInNjcmVlbiBkcml2ZXIgbm90IGxvYWRhYmxlIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL2NvbmZpZy5jOjI0MDYKK21zZ2lkICJzY3JlZW4gZHJpdmVyIHJlc3RhcnRpbmciCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvY21kX21pc2NlbGxhbmVvdXMuYzoxODYKK21zZ2lkICJzY3JlZW4gZHJpdmVyIHN0b3BwZWQiCittc2dzdHIgIiIKKworIzogRHJpdmVycy9TY3JlZW4vQW5kcm9pZC9zY3JlZW4uYzoxODQKK21zZ2lkICJzY3JlZW4gbG9ja2VkIgorbXNnc3RyICIiCisKKyM6IERyaXZlcnMvU2NyZWVuL0xpbnV4L3NjcmVlbi5jOjE1MzEKK21zZ2lkICJzY3JlZW4gbm90IGluIHRleHQgbW9kZSIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDoxNDAKK21zZ2lkICJzZWFyY2ggYmFja3dhcmQgZm9yIGNsaXBib2FyZCB0ZXh0IgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjE0NgorbXNnaWQgInNlYXJjaCBmb3J3YXJkIGZvciBjbGlwYm9hcmQgdGV4dCIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9jbWRfbWlzY2VsbGFuZW91cy5jOjEyMgorbXNnaWQgInNlY29uZCIKK21zZ2lkX3BsdXJhbCAic2Vjb25kcyIKK21zZ3N0clswXSAic2Vjb25kbyIKK21zZ3N0clsxXSAic2Vjb25kaSIKKworIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6ODk1Cittc2dpZCAic2VsZWN0IGFsbCBvZiB0aGUgdGV4dCIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDo0NDYKK21zZ2lkICJzZWxlY3QgbmV4dCBjaG9pY2UiCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6NDQwCittc2dpZCAic2VsZWN0IHByZXZpb3VzIGNob2ljZSIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDozNTIKK21zZ2lkICJzZXQgYWxlcnQgdHVuZXMgb24vb2ZmIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjMzOAorbXNnaWQgInNldCBhdHRyaWJ1dGUgYmxpbmtpbmcgb24vb2ZmIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjMzMQorbXNnaWQgInNldCBhdHRyaWJ1dGUgdW5kZXJsaW5pbmcgb24vb2ZmIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjExNjMKK21zZ2lkICJzZXQgYXR0cmlidXRlcyB0YWJsZSIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDozNTkKK21zZ2lkICJzZXQgYXV0b3JlcGVhdCBvbi9vZmYiCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6NjIzCittc2dpZCAic2V0IGF1dG9zcGVhayBjb21wbGV0ZWQgd29yZHMgb24vb2ZmIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjYwOQorbXNnaWQgInNldCBhdXRvc3BlYWsgZGVsZXRlZCBjaGFyYWN0ZXJzIG9uL29mZiIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDo4NzEKK21zZ2lkICJzZXQgYXV0b3NwZWFrIGluZGVudCBvZiBjdXJyZW50IGxpbmUgb24vb2ZmIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjYwMgorbXNnaWQgInNldCBhdXRvc3BlYWsgaW5zZXJ0ZWQgY2hhcmFjdGVycyBvbi9vZmYiCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6MzY2Cittc2dpZCAic2V0IGF1dG9zcGVhayBvbi9vZmYiCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6NjE2Cittc2dpZCAic2V0IGF1dG9zcGVhayByZXBsYWNlZCBjaGFyYWN0ZXJzIG9uL29mZiIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDo1OTUKK21zZ2lkICJzZXQgYXV0b3NwZWFrIHNlbGVjdGVkIGNoYXJhY3RlciBvbi9vZmYiCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6NTg4Cittc2dpZCAic2V0IGF1dG9zcGVhayBzZWxlY3RlZCBsaW5lIG9uL29mZiIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDo3NjkKK21zZ2lkICJzZXQgYnJhaWxsZSBrZXlib2FyZCBlbmFibGVkL2Rpc2FibGVkIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjc2MgorbXNnaWQgInNldCBicmFpbGxlIHR5cGluZyBtb2RlIGRvdHMvdGV4dCIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDozNDUKK21zZ2lkICJzZXQgY2FwaXRhbCBsZXR0ZXIgYmxpbmtpbmcgb24vb2ZmIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjExNzAKK21zZ2lkICJzZXQgY29udHJhY3Rpb24gdGFibGUiCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6MjYxCittc2dpZCAic2V0IGRpc3BsYXkgbW9kZSBhdHRyaWJ1dGVzL3RleHQiCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6MzAzCittc2dpZCAic2V0IGhpZGRlbiBzY3JlZW4gY3Vyc29yIG9uL29mZiIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDoxMTc3Cittc2dpZCAic2V0IGtleWJvYXJkIHRhYmxlIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjExODQKK21zZ2lkICJzZXQgbGFuZ3VhZ2UgcHJvZmlsZSIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDozMjQKK21zZ2lkICJzZXQgc2NyZWVuIGN1cnNvciBibGlua2luZyBvbi9vZmYiCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6MzE3Cittc2dpZCAic2V0IHNjcmVlbiBjdXJzb3Igc3R5bGUgYmxvY2svdW5kZXJsaW5lIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjI5NgorbXNnaWQgInNldCBzY3JlZW4gY3Vyc29yIHZpc2liaWxpdHkgb24vb2ZmIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjI1NAorbXNnaWQgInNldCBzY3JlZW4gaW1hZ2UgZnJvemVuL3VuZnJvemVuIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjI4OQorbXNnaWQgInNldCBza2lwcGluZyBvZiBibGFuayBicmFpbGxlIHdpbmRvd3Mgb24vb2ZmIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjI4MgorbXNnaWQgInNldCBza2lwcGluZyBvZiBsaW5lcyB3aXRoIGlkZW50aWNhbCBjb250ZW50IG9uL29mZiIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDoyNzUKK21zZ2lkICJzZXQgc2xpZGluZyBicmFpbGxlIHdpbmRvdyBvbi9vZmYiCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6NzQzCittc2dpZCAic2V0IHNwZWVjaCBjdXJzb3IgdmlzaWJpbGl0eSBvbi9vZmYiCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6MTIxNQorbXNnaWQgInNldCB0ZXh0IHNlbGVjdGlvbiIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDoyNjgKK21zZ2lkICJzZXQgdGV4dCBzdHlsZSA2LWRvdC84LWRvdCIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDoxMTU2Cittc2dpZCAic2V0IHRleHQgdGFibGUiCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6ODU4Cittc2dpZCAic2V0IHRvdWNoIG5hdmlnYXRpb24gb24vb2ZmIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjMxMAorbXNnaWQgInNldCB0cmFjayBzY3JlZW4gY3Vyc29yIG9uL29mZiIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDo1NzQKK21zZ2lkICJzaG93IGN1cnJlbnQgZGF0ZSBhbmQgdGltZSIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDo5MTkKK21zZ2lkICJzaG93IHRoZSB3aW5kb3cgdGl0bGUiCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6ODgzCittc2dpZCAic2hvdyB2YXJpb3VzIGRldmljZSBzdGF0dXMgaW5kaWNhdG9ycyIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6OTQ2Cittc2dpZCAic291bmRjYXJkIGRpZ2l0YWwgYXVkaW8iCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjk0OAorbXNnaWQgInNvdW5kY2FyZCBzeW50aGVzaXplciIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9jbWQuYzoyNzcgUHJvZ3JhbXMvY29yZS5jOjEwNDYKK21zZ2lkICJzcGFjZSIKK21zZ3N0ciAic3BhemlvIgorCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDo2MjkKK21zZ2lkICJzcGVhayBjdXJyZW50IGNoYXJhY3RlciIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDo0NjUgUHJvZ3JhbXMvY21kcy5hdXRvLmg6NjY5Cittc2dpZCAic3BlYWsgY3VycmVudCBsaW5lIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjY0OQorbXNnaWQgInNwZWFrIGN1cnJlbnQgd29yZCIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDo0NzcKK21zZ2lkICJzcGVhayBmcm9tIGN1cnJlbnQgbGluZSB0aHJvdWdoIGJvdHRvbSBvZiBzY3JlZW4iCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6NDcxCittc2dpZCAic3BlYWsgZnJvbSB0b3Agb2Ygc2NyZWVuIHRocm91Z2ggY3VycmVudCBsaW5lIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjg2NAorbXNnaWQgInNwZWFrIGluZGVudCBvZiBjdXJyZW50IGxpbmUiCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6NzM2Cittc2dpZCAic3BlYWsgc3BlZWNoIGN1cnNvciBsb2NhdGlvbiIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9jb25maWcuYzoyMDU3Cittc2dpZCAic3BlZWNoIGRyaXZlciBub3QgbG9hZGFibGUiCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvY29uZmlnLmM6MjIwNgorbXNnaWQgInNwZWVjaCBkcml2ZXIgcmVzdGFydGluZyIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9jbWRfc3BlZWNoLmM6MTA0Cittc2dpZCAic3BlZWNoIGRyaXZlciBzdG9wcGVkIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjcyMworbXNnaWQgInNwZWxsIGN1cnJlbnQgd29yZCIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDoxMDI2Cittc2dpZCAic3RhcnQgbmV3IGNsaXBib2FyZCBhdCBjaGFyYWN0ZXIiCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6MTIwOAorbXNnaWQgInN0YXJ0IHRleHQgc2VsZWN0aW9uIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjc5OQorbXNnaWQgInN0YXJ0IHRoZSBicmFpbGxlIGRyaXZlciIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDo4MjMKK21zZ2lkICJzdGFydCB0aGUgc2NyZWVuIGRyaXZlciIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDo4MTEKK21zZ2lkICJzdGFydCB0aGUgc3BlZWNoIGRyaXZlciIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDo0NTIKK21zZ2lkICJzdG9wIHNwZWFraW5nIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjc5MworbXNnaWQgInN0b3AgdGhlIGJyYWlsbGUgZHJpdmVyIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjgxNworbXNnaWQgInN0b3AgdGhlIHNjcmVlbiBkcml2ZXIiCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6ODA1Cittc2dpZCAic3RvcCB0aGUgc3BlZWNoIGRyaXZlciIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy94YnJsYXBpLmM6NjU2Cittc2dpZCAic3RyYW5nZSBvbGQgZXJyb3IgaGFuZGxlclxuIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL2JybHR0eS1jbGRyLmM6MzkKK21zZ2lkICJzdHJpbmciCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6MTI3MworbXNnaWQgInN3aXRjaCB0byBjb21tYW5kIGNvbnRleHQiCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6MTA1NAorbXNnaWQgInN3aXRjaCB0byBzcGVjaWZpYyB2aXJ0dWFsIHRlcm1pbmFsIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjk4NworbXNnaWQgInN3aXRjaCB0byB0aGUgbmV4dCBzY3JlZW4gYXJlYSIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDo1MTMKK21zZ2lkICJzd2l0Y2ggdG8gdGhlIG5leHQgdmlydHVhbCB0ZXJtaW5hbCIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDo5ODEKK21zZ2lkICJzd2l0Y2ggdG8gdGhlIHByZXZpb3VzIHNjcmVlbiBhcmVhIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjUwNworbXNnaWQgInN3aXRjaCB0byB0aGUgcHJldmlvdXMgdmlydHVhbCB0ZXJtaW5hbCIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9wZ21wcml2c19saW51eC5jOjE5OTQKK21zZ2lkICJzd2l0Y2hlZCB0byB1bnByaXZpbGVnZWQgdXNlciIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDoxMjk0Cittc2dpZCAidGFiIGtleSIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9jb25maWcuYzozMDIgUHJvZ3JhbXMvY29uZmlnLmM6MzA5Cittc2dpZCAidGV4dCIKK21zZ3N0ciAidGVzdG8iCisKKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjEyNDUKK21zZ2lkICJ0eXBlIGJyYWlsbGUgZG90cyIKK21zZ3N0ciAidGlwbyBwdW50aSBicmFpbGxlIgorCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDoxMjM3Cittc2dpZCAidHlwZSB1bmljb2RlIGNoYXJhY3RlciIKK21zZ3N0ciAidGlwbyBjYXJhdHRlcmkgdW5pY29kZSIKKworIzogUHJvZ3JhbXMveGJybGFwaS5jOjk3NAorbXNnaWQgInVuZXhwZWN0ZWQgYmxvY2sgdHlwZSIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy94YnJsYXBpLmM6ODY0Cittc2dpZCAidW5leHBlY3RlZCBjbWQiCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvY21kX3F1ZXVlLmM6MTU3Cittc2dpZCAidW5oYW5kbGVkIGNvbW1hbmQiCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMvY21kLmM6MTk4Cittc2dpZCAidW5rbm93biBjb21tYW5kIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL29wdGlvbnMuYzo4MjMKK21zZ2lkICJ1bmtub3duIGNvbmZpZ3VyYXRpb24gZGlyZWN0aXZlIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL2NvbmZpZy5jOjczNworbXNnaWQgInVua25vd24gbG9nIGxldmVsIG9yIGNhdGVnb3J5IgorbXNnc3RyICIiCisKKyMuIGFuIHVua25vd24gb3B0aW9uIGhhcyBiZWVuIHNwZWNpZmllZAorIzogUHJvZ3JhbXMvb3B0aW9ucy5jOjU3MAorbXNnaWQgInVua25vd24gb3B0aW9uIgorbXNnc3RyICJvcHppb25lIHNjb25vc2NpdXRhIgorCisjOiBQcm9ncmFtcy9wYXJzZS5jOjUwMQorbXNnaWQgInVuc3VwcG9ydGVkIHBhcmFtZXRlciIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy9zcGsuYzoxNzIKK21zZ2lkICJ2b2x1bWUiCittc2dzdHIgInZvbHVtZSIKKworIy4gTFJHQgorIzogUHJvZ3JhbXMvY21kX3V0aWxzLmM6MTU5Cittc2dpZCAid2hpdGUiCittc2dzdHIgImJpYW5jbyIKKworIzogUHJvZ3JhbXMvcGdtcHJpdnNfbGludXguYzoxODU2Cittc2dpZCAid29ya2luZyBkaXJlY3RvcnkgY2hhbmdlZCIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy94YnJsYXBpLmM6OTExCisjLCBjLWZvcm1hdAorbXNnaWQgInhicmxhcGk6IENvdWxkbid0IGZpbmQgYSBrZXljb2RlIHRvIHJlbWFwIGZvciBzaW11bGF0aW5nIHVuYm91bmQga2V5c3ltICUwOFhcbiIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy94YnJsYXBpLmM6ODk4CisjLCBjLWZvcm1hdAorbXNnaWQgInhicmxhcGk6IENvdWxkbid0IGZpbmQgbW9kaWZpZXJzIHRvIGFwcGx5IHRvICVkIGZvciBnZXR0aW5nIGtleXN5bSAlMDhYXG4iCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMveGJybGFwaS5jOjg3NAorIywgYy1mb3JtYXQKK21zZ2lkICJ4YnJsYXBpOiBDb3VsZG4ndCB0cmFuc2xhdGUga2V5c3ltICUwOFggdG8ga2V5Y29kZS5cbiIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy94YnJsYXBpLmM6NDE1CisjLCBjLWZvcm1hdAorbXNnaWQgInhicmxhcGk6IFggRXJyb3IgJWQsICVzIG9uIGRpc3BsYXkgJXNcbiIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy94YnJsYXBpLmM6NDU3CisjLCBjLWZvcm1hdAorbXNnaWQgInhicmxhcGk6IGJhZCBmb3JtYXQgZm9yIFZUIG51bWJlclxuIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL3hicmxhcGkuYzo0NjAKKyMsIGMtZm9ybWF0Cittc2dpZCAieGJybGFwaTogYmFkIHR5cGUgZm9yIFZUIG51bWJlclxuIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL3hicmxhcGkuYzo0MzkKKyMsIGMtZm9ybWF0Cittc2dpZCAieGJybGFwaTogY2Fubm90IGdldCByb290IHdpbmRvdyBYRnJlZTg2X1ZUIHByb3BlcnR5XG4iCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMveGJybGFwaS5jOjMxNgorIywgYy1mb3JtYXQKK21zZ2lkICJ4YnJsYXBpOiBjYW5ub3Qgd3JpdGUgd2luZG93IG5hbWUgJXNcbiIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy94YnJsYXBpLmM6NzY0CisjLCBjLWZvcm1hdAorbXNnaWQgInhicmxhcGk6IGRpZG4ndCBncmFiIHBhcmVudCBvZiAlIzAxMGx4XG4iCittc2dzdHIgIiIKKworIzogUHJvZ3JhbXMveGJybGFwaS5jOjc4MgorIywgYy1mb3JtYXQKK21zZ2lkICJ4YnJsYXBpOiBkaWRuJ3QgZ3JhYiB3aW5kb3cgJSMwMTBseFxuIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL3hicmxhcGkuYzo1ODIKKyMsIGMtZm9ybWF0Cittc2dpZCAieGJybGFwaTogZGlkbid0IGdyYWIgd2luZG93ICUjMDEwbHggYnV0IGdvdCBmb2N1c1xuIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL3hicmxhcGkuYzo0NDgKKyMsIGMtZm9ybWF0Cittc2dpZCAieGJybGFwaTogbW9yZSB0aGFuIG9uZSBpdGVtIGZvciBWVCBudW1iZXJcbiIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy94YnJsYXBpLmM6NDMzCisjLCBjLWZvcm1hdAorbXNnaWQgInhicmxhcGk6IG5vIFhGcmVlODZfVlQgYXRvbVxuIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL3hicmxhcGkuYzo0NDQKKyMsIGMtZm9ybWF0Cittc2dpZCAieGJybGFwaTogbm8gaXRlbXMgZm9yIFZUIG51bWJlclxuIgorbXNnc3RyICIiCisKKyM6IFByb2dyYW1zL3hicmxhcGkuYzo0MTYKKyMsIGMtZm9ybWF0Cittc2dpZCAieGJybGFwaTogcmVzb3VyY2UgJSMwMTBseCwgcmVxICV1OiV1XG4iCittc2dzdHIgIiIKKworIy4gInNob3VsZG4ndCBoYXBwZW4iIGV2ZW50cworIzogUHJvZ3JhbXMveGJybGFwaS5jOjgxMQorIywgYy1mb3JtYXQKK21zZ2lkICJ4YnJsYXBpOiB1bmhhbmRsZWQgZXZlbnQgdHlwZTogJWRcbiIKK21zZ3N0ciAiIgorCisjOiBQcm9ncmFtcy94YnJsYXBpLmM6NzkwCisjLCBjLWZvcm1hdAorbXNnaWQgInhicmxhcGk6IHdpbmRvdyAlIzAxMGx4IGNoYW5nZWQgdG8gTlVMTCBuYW1lXG4iCittc2dzdHIgIiIKKworIy4gTFJHCisjOiBQcm9ncmFtcy9jbWRfdXRpbHMuYzoxNTgKK21zZ2lkICJ5ZWxsb3ciCittc2dzdHIgImdpYWxsbyIKKworI34gbXNnaWQgIkJ1ZyBSZXBvcnRzIgorI34gbXNnc3RyICJTZWduYWxhemlvbmkgYnVnIgorCisjfiBtc2dpZCAiTm9ybWFsIgorI34gbXNnc3RyICJOb3JtYWxlIgpkaWZmIC0tZ2l0IGEvTWVzc2FnZXMvcnUucG8gYi9NZXNzYWdlcy9ydS5wbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYzI4NDlkCi0tLSAvZGV2L251bGwKKysrIGIvTWVzc2FnZXMvcnUucG8KQEAgLTAsMCArMSwzNjMyIEBACisjIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisjICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorIworIyBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisjCisjIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisjCisjIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyMgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorIyBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyMKKyMgV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworIworIyBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyMKK21zZ2lkICIiCittc2dzdHIgIiIKKyJQcm9qZWN0LUlkLVZlcnNpb246IGJybHR0eSA0LjVcbiIKKyJSZXBvcnQtTXNnaWQtQnVncy1UbzogQlJMVFRZQGJybHR0eS5hcHBcbiIKKyJQT1QtQ3JlYXRpb24tRGF0ZTogMjAyMS0wMS0yNyAxMTo0Ny0wNTAwXG4iCisiUE8tUmV2aXNpb24tRGF0ZTogMjAyMS0wMi0wNyAwODoxOC0wNTAwXG4iCisiTGFzdC1UcmFuc2xhdG9yOiDQnNCw0YDQs9Cw0YDQuNGC0LAg0JzQtdC70YzQvdC40LrQvtCy0LAgPG1hcmdhcmV0bWVsbmlrb3ZhQGdtYWlsLmNvbT5cbiIKKyJMYW5ndWFnZS1UZWFtOiBGcmllbmRzIG9mIEJSTFRUWSA8QlJMVFRZQGJybHR0WS5hcHA+XG4iCisiTGFuZ3VhZ2U6IHJ1XG4iCisiTUlNRS1WZXJzaW9uOiAxLjBcbiIKKyJDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLThcbiIKKyJDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0XG4iCisiUGx1cmFsLUZvcm1zOiBucGx1cmFscz0zOyBwbHVyYWw9KG4lMTA9PTEgJiYgbiUxMDAhPTExID8gMCA6IG4lMTA+PTIgJiYgIgorIm4lMTA8PTQgJiYgKG4lMTAwPDEwIHx8IG4lMTAwPj0yMCkgPyAxIDogMik7XG4iCisKKyM6IFByb2dyYW1zL2JybHR0eS5jOjE2NworIywgYy1mb3JtYXQKK21zZ2lkICJcIiVzXCIgc3RhcnRlZCBhcyBcIiVzXCJcbiIKK21zZ3N0ciAiXCIlc1wiINC30LDQv9GD0YnQtdC90L4g0L7RgiDQuNC80LXQvdC4IFwiJXNcIlxuIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6NDU3IFByb2dyYW1zL21lbnVfcHJlZnMuYzo0NTgKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzo0NjAgUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjQ2MQorIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjQ2NCBQcm9ncmFtcy9tZW51X3ByZWZzLmM6NDY1CisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6NDY2IFByb2dyYW1zL21lbnVfcHJlZnMuYzo0NjgKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzo0NjkKK21zZ2lkICIxIGNlbGwiCittc2dzdHIgIjEg0LrQu9C10YLQutCwIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6Nzg5Cittc2dpZCAiMSBzZWNvbmQiCittc2dzdHIgIjEg0YHQtdC60YPQvdC00LAiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzo4NTEKK21zZ2lkICIxMCBzZWNvbmRzIgorbXNnc3RyICIxMCDRgdC10LrRg9C90LQiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzoxMTU4Cittc2dpZCAiMTIgSG91ciIKK21zZ3N0ciAiMTIg0YfQsNGB0L7QsiIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjQ1NiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6NDU5CisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6NDYyIFByb2dyYW1zL21lbnVfcHJlZnMuYzo0NjMKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzo0NjcKK21zZ2lkICIyIGNlbGxzIgorbXNnc3RyICIyINC60LvQtdGC0LrQuCIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjc5MAorbXNnaWQgIjIgc2Vjb25kcyIKK21zZ3N0ciAiMiDRgdC10LrRg9C90LTRiyIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjg1MgorbXNnaWQgIjIwIHNlY29uZHMiCittc2dzdHIgIjIwINGB0LXQutGD0L3QtCIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjExNTcKK21zZ2lkICIyNCBIb3VyIgorbXNnc3RyICIyNCDRh9Cw0YHQsCIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjc4NworbXNnaWQgIjI1MCBtaWxsaXNlY29uZHMiCittc2dzdHIgIjI1MCDQvNC40LvQu9C40YHQtdC60YPQvdC0IgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6ODUzCittc2dpZCAiNDAgc2Vjb25kcyIKK21zZ3N0ciAiNDAg0YHQtdC60YPQvdC0IgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6ODUwCittc2dpZCAiNSBzZWNvbmRzIgorbXNnc3RyICI1INGB0LXQutGD0L3QtCIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjc4OAorbXNnaWQgIjUwMCBtaWxsaXNlY29uZHMiCittc2dzdHIgIjUwMCDQvNC40LvQu9C40YHQtdC60YPQvdC0IgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6NjE1Cittc2dpZCAiNi1Eb3QgQ29tcHV0ZXIgQnJhaWxsZSIKK21zZ3N0ciAi0KjQtdGB0YLQuNGC0L7Rh9C10YfQvdGL0Lkg0LrQvtC80L/RjNGO0YLQtdGA0L3Ri9C5INCx0YDQsNC50LvRjCIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjYxMworbXNnaWQgIjgtRG90IENvbXB1dGVyIEJyYWlsbGUiCittc2dzdHIgItCy0L7RgdGM0LzQuNGC0L7Rh9C10YfQvdGL0Lkg0LrQvtC80L/RjNGO0YLQtdGA0L3Ri9C5INCx0YDQsNC50LvRjCIKKworIzogUHJvZ3JhbXMvYnJsdHR5LXR0Yi5jOjE3OQorbXNnaWQgIjgtYml0IGNoYXJhY3RlciBzZXQgdG8gdXNlLiIKK21zZ3N0ciAi0LjRgdC/0L7Qu9GM0LfRg9C10YLRgdGPIDgt0LHQuNGC0L3QsNGPINC60L7QtNC40YDQvtCy0LrQsCIKKworIzogUHJvZ3JhbXMvc2NyX21lbnUuYzoxMDQKK21zZ2lkICI8b2ZmPiIKK21zZ3N0ciAi0LLRi9C60LsuIgorCisjOiBQcm9ncmFtcy9jb25maWcuYzoxMzY3Cittc2dpZCAiQVBJIFBhcmFtZXRlciIKK21zZ3N0ciAi0J/QsNGA0LDQvNC10YLRgCBBUEkiCisKKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjEyNTIKK21zZ2lkICJBVCAoc2V0IDIpIGtleWJvYXJkIHNjYW4gY29kZSIKK21zZ3N0ciAiQVQgKHNldCAyKSDRgdC60LDQvS3QutC+0LQg0LrQu9Cw0LLQuNCw0YLRg9GA0YsiCisKKyM6IFByb2dyYW1zL21pZGkuYzo2NworbXNnaWQgIkFjY29yZGlvbiIKK21zZ3N0ciAi0LDQutC60L7RgNC00LXQvtC9IgorCisjLiBCYXNzCisjOiBQcm9ncmFtcy9taWRpLmM6ODAKK21zZ2lkICJBY291c3RpYyBCYXNzIgorbXNnc3RyICLQsNC60YPRgdGC0LjRh9C10YHQutC40Lkg0LHQsNGBIgorCisjLiBQaWFubworIzogUHJvZ3JhbXMvbWlkaS5jOjQ0Cittc2dpZCAiQWNvdXN0aWMgR3JhbmQgUGlhbm8iCittc2dzdHIgItCw0LrRg9GB0YLQuNGH0LXRgdC60LjQuSDRgNC+0Y/Qu9GMIgorCisjLiBHdWl0YXIKKyM6IFByb2dyYW1zL21pZGkuYzo3MQorbXNnaWQgIkFjb3VzdGljIEd1aXRhciAobnlsb24pIgorbXNnc3RyICLQsNC60YPRgdGC0LjRh9C10YHQutCw0Y8g0LPQuNGC0LDRgNCwICjQvdC10LnQu9C+0L0pIgorCisjOiBQcm9ncmFtcy9taWRpLmM6NzIKK21zZ2lkICJBY291c3RpYyBHdWl0YXIgKHN0ZWVsKSIKK21zZ3N0ciAi0LDQutGD0YHRgtC40YfQtdGB0LrQsNGPINCz0LjRgtCw0YDQsCAo0YHRgtCw0LvRjCkiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzoxMTg0Cittc2dpZCAiQWZ0ZXIgVGltZSIKK21zZ3N0ciAi0J/QviDQuNGB0YLQtdGH0LXQvdC40Lgg0LLRgNC10LzQtdC90LgiCisKKyM6IFByb2dyYW1zL21pZGkuYzoxNzEKK21zZ2lkICJBZ29nbyIKK21zZ3N0ciAi0JDQs9C+0LPQviIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjEzNzQKK21zZ2lkICJBbGVydCIKK21zZ3N0ciAi0YPQstC10LTQvtC80LvQtdC90LjQtSIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjk5MworbXNnaWQgIkFsZXJ0IERvdHMiCittc2dzdHIgItGD0LLQtdC00L7QvNC70LXQvdC40LUgINGC0L7Rh9C10LoiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzo5OTgKK21zZ2lkICJBbGVydCBNZXNzYWdlcyIKK21zZ3N0ciAi0YPQstC10LTQvtC80LvQtdC90LjQtSDRgdC+0L7QsdGJ0LXQvdC40Y8iCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzo5MzgKK21zZ2lkICJBbGVydCBUdW5lcyIKK21zZ3N0ciAi0YPQstC10LTQvtC80LvQtdC90LjQtSDRgtC+0L3Riy/Qt9Cy0YPQutC4IgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6NzUzIFByb2dyYW1zL21lbnVfcHJlZnMuYzoxMDMyCittc2dpZCAiQWxsIgorbXNnc3RyICLQstGB0ZEiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzo0NjgKK21zZ2lkICJBbHBoYWJldGljIEJyYWlsbGUgV2luZG93IENvb3JkaW5hdGVzIgorbXNnc3RyICLQsNC70YTQsNCy0LjRgtC90YvQtSDQutC+0L7RgNC00LjQvdCw0YLRiyDQvtC60L3QsCDQkdGA0LDQudC70Y8iCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzo0NjkKK21zZ2lkICJBbHBoYWJldGljIFNjcmVlbiBDdXJzb3IgQ29vcmRpbmF0ZXMiCittc2dzdHIgItCw0LvRhNCw0LLQuNGC0L3Ri9C1INC60L7QvtGA0LTQuNC90LDRgtGLINGN0LrRgNCw0L3QvdC+0LPQviDQutGD0YDRgdC+0YDQsCIKKworIzogUHJvZ3JhbXMvbWlkaS5jOjExNworbXNnaWQgIkFsdG8gU2F4IgorbXNnc3RyICLRgdCw0LrRgdC+0YTQvtC9LdCw0LvRjNGCIgorCisjOiBQcm9ncmFtcy9taWRpLmM6MTg1Cittc2dpZCAiQXBwbGF1c2UiCittc2dzdHIgItCw0L/Qu9C+0LTQuNGB0LzQtdC90YLRiyIKKworIzogUHJvZ3JhbXMvY21kX21pc2NlbGxhbmVvdXMuYzo2MAorbXNnaWQgIkFwcmlsIgorbXNnc3RyICLQsNC/0YDQtdC70YwiCisKKyM6IFByb2dyYW1zL2xvZy5jOjExNgorbXNnaWQgIkFzeW5jIEV2ZW50cyIKK21zZ3N0ciAi0LDRgdC40L3RhdGA0L7QvdC90YvQtSDRgdC+0LHRi9GC0LjRjyIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjcxMAorbXNnaWQgIkF0dHJpYnV0ZXMgSW52aXNpYmxlIFRpbWUiCittc2dzdHIgItCw0YLRgNC40LHRg9GC0YsgLSDRgdC60YDRi9GC0L7QtSDQstGA0LXQvNGPIgorCisjOiBQcm9ncmFtcy9jb25maWcuYzoyODEyIFByb2dyYW1zL21lbnVfcHJlZnMuYzoxMjgwCittc2dpZCAiQXR0cmlidXRlcyBUYWJsZSIKK21zZ3N0ciAi0LDRgtGA0LjQsdGD0YLRiyDRgtCw0LHQu9C40YbQsCIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjcwNAorbXNnaWQgIkF0dHJpYnV0ZXMgVmlzaWJsZSBUaW1lIgorbXNnc3RyICLQsNGC0YDQuNCx0YPRgtGLINCy0YDQtdC80Y8g0LLQuNC00LjQvNC+0YHRgtC4IgorCisjOiBQcm9ncmFtcy9jbWRfbWlzY2VsbGFuZW91cy5jOjY0Cittc2dpZCAiQXVndXN0IgorbXNnc3RyICLQsNCy0LPRg9GB0YIiCisKKyM6IFByb2dyYW1zL2FsZXJ0LmM6MTY4Cittc2dpZCAiQXV0b3JlbGVhc2UiCittc2dzdHIgItCw0LLRgtC+0LzQsNGC0LjRh9C10YHQutCw0Y8g0YDQsNC30LHQu9C+0LrQuNGA0L7QstC60LAiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzo4NTYKK21zZ2lkICJBdXRvcmVsZWFzZSBUaW1lIgorbXNnc3RyICLQstGA0LXQvNGPINCw0LLRgtC+0LzQsNGC0LjRh9C10YHQutC+0Lkg0YDQsNC30LHQu9C+0LrQuNGA0L7QstC60LgiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzo4NzMKK21zZ2lkICJBdXRvcmVwZWF0IEVuYWJsZWQiCittc2dzdHIgItCw0LLRgtC+0L/QvtCy0YLQvtGAINCy0LrQu9GO0YfRkdC9IgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6ODc5Cittc2dpZCAiQXV0b3JlcGVhdCBJbnRlcnZhbCIKK21zZ3N0ciAi0LjQvdGC0LXRgNCy0LDQuyDQsNCy0YLQvtC/0L7QstGC0L7RgNCwIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6ODg2Cittc2dpZCAiQXV0b3JlcGVhdCBQYW5uaW5nIgorbXNnc3RyICLQv9Cw0L3QvtGA0LDQvNC90YvQuSDQsNCy0YLQvtC/0L7QstGC0L7RgCIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjEwNzUKK21zZ2lkICJBdXRvc3BlYWsiCittc2dzdHIgItCw0LLRgtC+0L/RgNC+0LPQvtCy0LDRgNC40LLQsNC90LjQtSIKKworIzogUHJvZ3JhbXMvY29uZmlnLmM6MTgxMgorbXNnaWQgIkJSTFRUWSBzdG9wcGVkIgorbXNnc3RyICJCUkxUVFkg0L7RgdGC0LDQvdC+0LLQu9C10L3QviIKKworIzogUHJvZ3JhbXMvbWlkaS5jOjE2NgorbXNnaWQgIkJhZyBQaXBlIgorbXNnc3RyICLQstC+0LvRi9C90LrQsCIKKworIzogUHJvZ3JhbXMvbWlkaS5jOjE2MgorbXNnaWQgIkJhbmpvIgorbXNnc3RyICLQkdCw0L3QtNC20L4iCisKKyM6IFByb2dyYW1zL21pZGkuYzoxMTkKK21zZ2lkICJCYXJpdG9uZSBTYXgiCittc2dzdHIgItGB0LDQutGB0L7RhNC+0L0t0LHQsNGA0LjRgtC+0L0iCisKKyM6IFByb2dyYW1zL21pZGkuYzoyOAorbXNnaWQgIkJhc3MiCittc2dzdHIgItCx0LDRgSIKKworIzogUHJvZ3JhbXMvbWlkaS5jOjEyMgorbXNnaWQgIkJhc3Nvb24iCittc2dzdHIgItGE0LDQs9C+0YIiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzo5NDUKK21zZ2lkICJCZWVwZXIiCittc2dzdHIgItC/0LXQudC00LbQtdGAIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6MTE4MworbXNnaWQgIkJlZm9yZSBUaW1lIgorbXNnc3RyICLQtNC+INC90LDRh9Cw0LvQsCIKKworIzogUHJvZ3JhbXMvbWlkaS5jOjE4MgorbXNnaWQgIkJpcmQgVHdlZXQiCittc2dzdHIgItC/0YLQuNGH0LjQuSDRidC10LHQtdGCIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6Njk4Cittc2dpZCAiQmxpbmtpbmcgQXR0cmlidXRlcyIKK21zZ3N0ciAi0LDRgtGA0LjQsdGD0YLRiyDQvNC40LPQsNC90LjRjyIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjcxNgorbXNnaWQgIkJsaW5raW5nIENhcGl0YWxzIgorbXNnc3RyICLQvNC40LPQsNGO0YnQuNC1INC30LDQs9C70LDQstC90YvQtSDQsdGD0LrQstGLIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6Njc1Cittc2dpZCAiQmxpbmtpbmcgU2NyZWVuIEN1cnNvciIKK21zZ3N0ciAi0LzQuNCz0LDRjtGJ0LjQuSDRjdC60YDQsNC90L3Ri9C5INC60YPRgNGB0L7RgCIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjExMzMKK21zZ2lkICJCbGlua2luZyBTcGVlY2ggQ3Vyc29yIgorbXNnc3RyICLQvNC40LPQsNGO0YnQuNC5INGA0LXRh9C10LLQvtC5INC60YPRgNGB0L7RgCIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjU3NiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6MTI0MworbXNnaWQgIkJsb2NrIgorbXNnc3RyICLQt9Cw0LHQu9C+0LrQuNGA0L7QstCw0YLRjCIKKworIzogUHJvZ3JhbXMvbWlkaS5jOjEyOQorbXNnaWQgIkJsb3duIEJvdHRsZSIKK21zZ3N0ciAi0LLRi9C00YPQstC90LDRjyDQsdGD0YLRi9C70LrQsCIKKworIzogUHJvZ3JhbXMvbG9nLmM6MTQwCittc2dpZCAiQmx1ZXRvb3RoIEkvTyIKK21zZ3N0ciAiQmx1ZXRvb3RoINCy0LrQuy/QstGL0LrQuyIKKworIzogUHJvZ3JhbXMvY29uZmlnLmM6MTU4OAorbXNnaWQgIkJyYWlsbGUgRGV2aWNlIgorbXNnc3RyICLRg9GB0YLRgNC+0LnRgdGC0LLQviDQkdGA0LDQudC70Y8iCisKKyM6IFByb2dyYW1zL2NvbmZpZy5jOjE1ODQKK21zZ2lkICJCcmFpbGxlIERyaXZlciIKK21zZ3N0ciAi0LTRgNCw0LnQstC10YAg0JHRgNCw0LnQu9GPIgorCisjOiBQcm9ncmFtcy9sb2cuYzoxNDYKK21zZ2lkICJCcmFpbGxlIERyaXZlciBFdmVudHMiCittc2dzdHIgItGB0L7QsdGL0YLQuNGPINC00YDQsNC50LLQtdGA0LAg0JHRgNCw0LnQu9GPIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6NjUzCittc2dpZCAiQnJhaWxsZSBGaXJtbmVzcyIKK21zZ3N0ciAi0YLQstGR0YDQtNC+0YHRgtGMINGC0L7Rh9C10Log0JHRgNCw0LnQu9GPIgorCisjOiBQcm9ncmFtcy9sb2cuYzo4MAorbXNnaWQgIkJyYWlsbGUgS2V5IEV2ZW50cyIKK21zZ3N0ciAi0YHQvtCx0YvRgtC40Y8g0LrQu9Cw0LLQuNGI0Lgg0LLQstC+0LTQsCDQkdGA0LDQudC70Y8iCisKKyM6IFByb2dyYW1zL2NvbmZpZy5jOjE1ODcKK21zZ2lkICJCcmFpbGxlIFBhcmFtZXRlciIKK21zZ3N0ciAi0J/QsNGA0LDQvNC10YLRgCDQkdGA0LDQudC70Y8iCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzo2MDkKK21zZ2lkICJCcmFpbGxlIFByZXNlbnRhdGlvbiIKK21zZ3N0ciAi0L/RgNC10LTRgdGC0LDQstC70LXQvdC40LUg0JHRgNCw0LnQu9GPIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6MTI3MAorbXNnaWQgIkJyYWlsbGUgVGFibGVzIgorbXNnc3RyICLQotCw0LHQu9C40YbRiyDQkdGA0LDQudC70Y8iCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzo4MjEKK21zZ2lkICJCcmFpbGxlIFR5cGluZyIKK21zZ3N0ciAi0LLQstC+0LQg0JHRgNCw0LnQu9GPIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6NDU3Cittc2dpZCAiQnJhaWxsZSBXaW5kb3cgQ29sdW1uIgorbXNnc3RyICLQvtC60L3QviDQkdGA0LDQudC70Y8g0L/QviDQstC10YDRgtC40LrQsNC70LgiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzo0NTYKK21zZ2lkICJCcmFpbGxlIFdpbmRvdyBDb29yZGluYXRlcyIKK21zZ3N0ciAi0LrQvtC+0YDQtNC40L3QsNGC0Ysg0L7QutC90LAg0JHRgNCw0LnQu9GPIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6Nzc0Cittc2dpZCAiQnJhaWxsZSBXaW5kb3cgT3ZlcmxhcCIKK21zZ3N0ciAi0L7QutC90L4g0JHRgNCw0LnQu9GPINC/0L7QstC10YDRhSDQtNGA0YPQs9C40YUiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzo0NTgKK21zZ2lkICJCcmFpbGxlIFdpbmRvdyBSb3ciCittc2dzdHIgItC+0LrQvdC+INCR0YDQsNC50LvRjyDQv9C+INCz0L7RgNC40LfQvtC90YLQsNC70LgiCisKKyM6IFByb2dyYW1zL2NvbmZpZy5jOjQ2NAorIywgYy1mb3JtYXQKK21zZ2lkICJCcmFpbGxlIGRyaXZlciBjb2RlICglcywgJXMsIG9yIG9uZSBvZiB7JXN9KS4iCittc2dzdHIgItC60L7QtCDQtNGA0LDQudCy0LXRgNCwINCR0YDQsNC50LvRjyAoJXMsICVzLCDQuNC70Lgg0L7QtNC40L0g0LjQtyB7JXN9KS4iCisKKyM6IFByb2dyYW1zL21pZGkuYzozMQorbXNnaWQgIkJyYXNzIgorbXNnc3RyICLQtNGD0YXQvtCy0YvQtSDQuNC90YHRgtGA0YPQvNC10L3RgtGLIgorCisjOiBQcm9ncmFtcy9taWRpLmM6MTEyCittc2dpZCAiQnJhc3MgU2VjdGlvbiIKK21zZ3N0ciAi0LTRg9GF0L7QstGL0LUg0LjQvdGB0YLRgNGD0LzQtdC90YLRiyIKKworIzogUHJvZ3JhbXMvbWlkaS5jOjE4MAorbXNnaWQgIkJyZWF0aCBOb2lzZSIKK21zZ3N0ciAi0LfQstGD0Log0LTRi9GF0LDQvdC40Y8iCisKKyM6IFByb2dyYW1zL21pZGkuYzo0NQorbXNnaWQgIkJyaWdodCBBY291c3RpYyBQaWFubyIKK21zZ3N0ciAi0LzQvtGJ0L3QvtC1INCw0LrRg9GB0YLQuNGH0LXRgdC60L7QtSDQv9C40LDQvdC40L3QviIKKworIzogUHJvZ3JhbXMveGJybGFwaS5jOjkzCittc2dpZCAiQnJsQVBJIGF1dGhvcml6YXRpb24vYXV0aGVudGljYXRpb24gc2NoZW1lcyIKK21zZ3N0ciAi0KHRhdC10LzRiyDQsNCy0YLQvtGA0LjQt9Cw0YbQuNC4L9Cw0YPRgtC10L3RgtC40YTQuNC60LDRhtC40LggQnJsQXBpIgorCisjOiBQcm9ncmFtcy94YnJsYXBpLmM6ODYKK21zZ2lkICJCcmxBUEkgaG9zdCBhbmQvb3IgcG9ydCB0byBjb25uZWN0IHRvIgorbXNnc3RyICLRhdC+0YHRgiDQuC/QuNC70LggcG9ydCDQtNC70Y8g0L/QvtC00LrQu9GO0YfQtdC90LjRjyBCcmxBcGkiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzoxMzI2Cittc2dpZCAiQnVnIFJlcG9ydHMiCittc2dzdHIgItC+0YLRh9GR0YLRiyDQviDQvdC10L/QvtC70LDQtNC60LDRhSIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjEzMDcKK21zZ2lkICJCdWlsZCBJbmZvcm1hdGlvbiIKK21zZ3N0ciAi0LjQvdGE0L7RgNC80LDRhtC40Y8g0L4g0YHQsdC+0YDQutC1INC/0YDQvtCz0YDQsNC80LzRiyIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjYzOAorbXNnaWQgIkNhcGl0YWxpemF0aW9uIE1vZGUiCittc2dzdHIgItGA0LXQttC40Lwg0LfQsNCz0LvQsNCy0L3Ri9GFINCx0YPQutCyIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6NzI3Cittc2dpZCAiQ2FwaXRhbHMgSW52aXNpYmxlIFRpbWUiCittc2dzdHIgItC30LDQs9C70LDQstC90YvQtSDQsdGD0LrQstGLIC0g0YHQutGA0YvRgtC+0LUg0LLRgNC10LzRjyIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjcyMQorbXNnaWQgIkNhcGl0YWxzIFZpc2libGUgVGltZSIKK21zZ3N0ciAi0LfQsNCz0LvQsNCy0L3Ri9C1INCx0YPQutCy0YsgLSDQstGA0LXQvNGPINCy0LjQtNC40LzQvtGB0YLQuCIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjEzOTcKK21zZ2lkICJDYXRlZ29yeSBMb2cgTGV2ZWwiCittc2dzdHIgItC60LDRgtC10LPQvtGA0LjRjyDQo9GA0L7QstC10L3RjCDQstC10LTQtdC90LjRjyDQttGD0YDQvdCw0LvQsCDQvtCxINC+0YjQuNCx0LrQsNGFIgorCisjLiBDaHJvbWF0aWMgUGVyY3Vzc2lvbgorIzogUHJvZ3JhbXMvbWlkaS5jOjUzCittc2dpZCAiQ2VsZXN0YSIKK21zZ3N0ciAi0YfQtdC70LXRgdGC0LAiCisKKyM6IFByb2dyYW1zL21pZGkuYzo5MQorbXNnaWQgIkNlbGxvIgorbXNnc3RyICLQstC40L7Qu9C+0L3Rh9C10LvRjCIKKworIzogUHJvZ3JhbXMvbWlkaS5jOjEwMgorbXNnaWQgIkNob2lyIEFhaHMiCittc2dzdHIgItGF0L7RgNC+0LLRi9C1INC/0YDQuNC00YvRhdCw0L3QuNGPIgorCisjOiBQcm9ncmFtcy9taWRpLmM6MjUKK21zZ2lkICJDaHJvbWF0aWMgUGVyY3Vzc2lvbiIKK21zZ3N0ciAi0YXRgNC+0LzQsNGC0LjRh9C10YHQutCw0Y8g0L/QtdGA0LrRg9GB0YHQuNGPIgorCisjOiBQcm9ncmFtcy9taWRpLmM6NjUKK21zZ2lkICJDaHVyY2ggT3JnYW4iCittc2dzdHIgItGG0LXRgNC60L7QstC90YvQuSDQvtGA0LPQsNC9IgorCisjOiBQcm9ncmFtcy9taWRpLmM6MTIzCittc2dpZCAiQ2xhcmluZXQiCittc2dzdHIgItC60LvQsNGA0L3QtdGCIgorCisjOiBQcm9ncmFtcy9taWRpLmM6NTEKK21zZ2lkICJDbGF2aSIKK21zZ3N0ciAi0LrQu9Cw0LLQuNGAIgorCisjOiBQcm9ncmFtcy9tZW51LmM6ODIwCittc2dpZCAiQ2xvc2UiCittc2dzdHIgItC30LDQutGA0YvRgtGMIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6MTE2NworbXNnaWQgIkNvbG9uIgorbXNnc3RyICLQtNCy0L7QtdGC0L7Rh9C40LUiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzoxMzMxCittc2dpZCAiQ29uZmlndXJhdGlvbiBEaXJlY3RvcnkiCittc2dzdHIgItCa0LDRgtCw0LvQvtCzINC60L7QvdGE0LjQs9GD0YDQsNGG0LjQuCIKKworIzogUHJvZ3JhbXMvY29uZmlnLmM6Mjc1NSBQcm9ncmFtcy9tZW51X3ByZWZzLmM6MTMzNgorbXNnaWQgIkNvbmZpZ3VyYXRpb24gRmlsZSIKK21zZ3N0ciAi0YTQsNC50Lsg0LrQvtC90YTQuNCz0YPRgNCw0YbQuNC4IgorCisjOiBQcm9ncmFtcy9hbGVydC5jOjE2MworbXNnaWQgIkNvbnNvbGUgQmVsbCIKK21zZ3N0ciAi0LrQvtC90YHQvtC70YzQvdGL0Lkg0LfQstGD0LrQvtCy0L7QuSDRgdC40LPQvdCw0LsiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzo5MjQKK21zZ2lkICJDb25zb2xlIEJlbGwgQWxlcnQiCittc2dzdHIgItC60L7QvdGB0L7Qu9GM0L3Ri9C5INC30LLRg9C60L7QstC+0Lkg0YHQuNCz0L3QsNC7INGD0LLQtdC00L7QvNC70LXQvdC40LUiCisKKyM6IFByb2dyYW1zL21pZGkuYzo5MgorbXNnaWQgIkNvbnRyYWJhc3MiCittc2dzdHIgItC60L7QvdGC0YDQsNCx0LDRgSIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjYxNAorbXNnaWQgIkNvbnRyYWN0ZWQgQnJhaWxsZSIKK21zZ3N0ciAi0JrRgNCw0YLQutC+0L/QuNGB0YwiCisKKyM6IFByb2dyYW1zL2NvbmZpZy5jOjI4MTkgUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjEyODgKK21zZ2lkICJDb250cmFjdGlvbiBUYWJsZSIKK21zZ3N0ciAi0YLQsNCx0LvQuNGG0LAg0LrRgNCw0YLQutC+0L/QuNGB0L3Ri9GFINGB0L7QutGA0LDRidC10L3QuNC5IgorCisjOiBQcm9ncmFtcy9icmx0dHktY3RiLmM6NjIKK21zZ2lkICJDb250cmFjdGlvbiB0YWJsZS4iCittc2dzdHIgItGC0LDQsdC70LjRhtCwINC60YDQsNGC0LrQvtC/0LjRgdC90YvRhSDRgdC+0LrRgNCw0YnQtdC90LjQuS4iCisKKyM6IFByb2dyYW1zL2JybHR0eS1jdGIuYzo3NgorbXNnaWQgIkNvbnRyYWN0aW9uIHZlcmlmaWNhdGlvbiB0YWJsZS4iCittc2dzdHIgItCy0LXRgNC40YTQuNC60LDRhtC40L7QvdC90LDRjyDRgtCw0LHQu9C40YbQsCDRgdC+0LrRgNCw0YnQtdC90LjQuS4iCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzoxMzc1Cittc2dpZCAiQ3JpdGljYWwiCittc2dzdHIgItC60LvRjtGH0LXQstC+0LUiCisKKyM6IFByb2dyYW1zL2xvZy5jOjk4Cittc2dpZCAiQ3Vyc29yIFJvdXRpbmciCittc2dzdHIgItC90LDQv9GA0LDQstC70LXQvdC40LUg0LrRg9GA0YHQvtGA0LAiCisKKyM6IFByb2dyYW1zL2xvZy5jOjkyCittc2dpZCAiQ3Vyc29yIFRyYWNraW5nIgorbXNnc3RyICLQvtGC0YHQu9C10LbQuNCy0LDQvdC40LUg0LrRg9GA0YHQvtGA0LAiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzo3OTMKK21zZ2lkICJDdXJzb3IgVHJhY2tpbmcgRGVsYXkiCittc2dzdHIgItC30LDQtNC10YDQttC60LAg0L7RgtGB0LvQtdC20LjQstCw0L3QuNGPINC60YPRgNGB0L7RgNCwIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6MTIwNQorbXNnaWQgIkRhc2giCittc2dzdHIgItGC0LjRgNC1IgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6MTE5OAorbXNnaWQgIkRhdGUgRm9ybWF0IgorbXNnc3RyICLRhNC+0YDQvNCw0YIg0LTQsNC90L3Ri9GFIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6MTE4NworbXNnaWQgIkRhdGUgUG9zaXRpb24iCittc2dzdHIgItCf0L7Qt9C40YbQuNC+0L3QuNGA0L7QstCw0L3QuNC1ICDQtNCw0L3QvdGL0YUiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzoxMjEwCittc2dpZCAiRGF0ZSBTZXBhcmF0b3IiCittc2dzdHIgItGA0LDQt9C00LXQu9C40YLQtdC70Ywg0LTQsNC90L3Ri9GFIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6MTE5NQorbXNnaWQgIkRheSBNb250aCBZZWFyIgorbXNnc3RyICLQlNC10L3RjCDQnNC10YHRj9GGINCT0L7QtCIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjEzODAKK21zZ2lkICJEZWJ1ZyIKK21zZ3N0ciAi0YPRgdGC0YDQsNC90LjRgtGMINC90LXQv9C+0LvQsNC00LrQuCIKKworIzogUHJvZ3JhbXMvY21kX21pc2NlbGxhbmVvdXMuYzo2OAorbXNnaWQgIkRlY2VtYmVyIgorbXNnc3RyICLQtNC10LrQsNCx0YDRjCIKKworIzogUHJvZ3JhbXMvY29uZmlnLmM6NDg1Cittc2dpZCAiRGV2aWNlIGZvciBhY2Nlc3NpbmcgYnJhaWxsZSBkaXNwbGF5LiIKK21zZ3N0ciAi0YPRgdGC0YDQvtC50YHRgtCy0L4g0LTQvtGB0YLRg9C/0LAg0Log0LTQuNGB0L/Qu9C10Y4g0JHRgNCw0LnQu9GPIgorCisjOiBQcm9ncmFtcy9jb25maWcuYzo0NDQKK21zZ2lkICJEaXNhYmxlIHRoZSBhcHBsaWNhdGlvbiBwcm9ncmFtbWluZyBpbnRlcmZhY2UuIgorbXNnc3RyICLQvtGC0LrQu9GO0YfQuNGC0Ywg0L/RgNC+0LPRgNCw0LzQvdGL0Lkg0LjQvdGC0LXRgNGE0LXQudGBICDQv9GA0LjQu9C+0LbQtdC90LjRjyIKKworIzogUHJvZ3JhbXMvbWlkaS5jOjc3Cittc2dpZCAiRGlzdG9ydGlvbiBHdWl0YXIiCittc2dzdHIgItC00LjRgdGC0L7RgNGI0L0t0LPQuNGC0LDRgNCwIgorCisjOiBQcm9ncmFtcy9jb25maWcuYzo1ODcKK21zZ2lkICJEbyBub3QgYXV0b3NwZWFrIHdoZW4gYnJhaWxsZSBpcyBub3QgYmVpbmcgdXNlZC4iCittc2dzdHIgItC90LUg0L/RgNC+0LPQvtCy0LDRgNC40LLQsNGC0Ywg0LDQstGC0L7QvNCw0YLQuNGH0LXRgdC60LgsINC60L7Qs9C00LAg0JHRgNCw0LnQu9GMINC90LUg0LjRgdC/0L7Qu9GM0LfRg9C10YLRgdGPIgorCisjOiBQcm9ncmFtcy94YnJsYXBpLmM6MTEyCittc2dpZCAiRG8gbm90IHdyaXRlIGFueSB0ZXh0IHRvIHRoZSBicmFpbGxlIGRldmljZSIKK21zZ3N0ciAi0L3QtSDQv9C40YjQuNGC0LUg0L3QuNC60LDQutC+0LPQviDRgtC10LrRgdGC0LAg0L3QsCDRg9GB0YLRgNC+0LnRgdGC0LLQviDQkdGA0LDQudC70Y8iCisKKyM6IFByb2dyYW1zL2JybHR0eS10cnR4dC5jOjc5Cittc2dpZCAiRG9uJ3QgZmFsbCBiYWNrIHRvIHRoZSBVbmljb2RlIGJhc2UgY2hhcmFjdGVyLiIKK21zZ3N0ciAi0L3QtSDQstC+0LfQstGA0LDRidCw0LnRgtC10YHRjCDQuiDQvtGB0L3QvtCy0L3QvtC5INC60L7QtNC40YDQvtCy0LrQtSBVbmljb2RlIgorCisjOiBQcm9ncmFtcy9jb25maWcuYzozNTUKK21zZ2lkICJEb24ndCBzd2l0Y2ggdG8gYW4gdW5wcml2aWxlZ2VkIHVzZXIgb3IgcmVsaW5xdWlzaCBhbnkgcHJpdmlsZWdlcyAoZ3JvdXAgbWVtYmVyc2hpcHMsIGNhcGFiaWxpdGllcywgZXRjKS4iCittc2dzdHIgItC90LUg0L/QtdGA0LXQutC70Y7Rh9Cw0LnRgtC10YHRjCDQsiDRgNC10LbQuNC8INC+0LHRi9GH0L3QvtCz0L4g0L/QvtC70YzQt9C+0LLQsNGC0LXQu9GPINC4INC90LUg0L7RgtC60LDQt9GL0LLQsNC50YLQtdGB0Ywg0L7RgiDQutCw0LrQuNGFINCx0Ysg0YLQviDQvdC4INCx0YvQu9C+INC/0YDQtdC40LzRg9GJ0LXRgdGC0LIgKNGB0L7QstC80LXRgdGC0L3QvtC1INC40YHQv9C+0LvRjNC30L7QstCw0L3QuNC1LCDQtNC+0L/QvtC70L3QuNGC0LXQu9GM0L3Ri9C1INCy0L7Qt9C80L7QttC90L7RgdGC0Lgg0Lgg0KIuINCULikuIgorCisjOiBQcm9ncmFtcy9hbGVydC5jOjUyCittc2dpZCAiRG9uZSIKK21zZ3N0ciAi0LPQvtGC0L7QstC+IgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6MTE2OCBQcm9ncmFtcy9tZW51X3ByZWZzLmM6MTIwNworbXNnaWQgIkRvdCIKK21zZ3N0ciAi0YLQvtGH0LrQsCIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjgzMQorbXNnaWQgIkRvdHMgdmlhIFVuaWNvZGUgQnJhaWxsZSIKK21zZ3N0ciAi0YLQvtGH0LrQuCDQv9C+0YHRgNC10LTRgdGC0LLQvtC8IFVuaWNvZGUg0JHRgNCw0LnQu9GPIgorCisjLiBPcmdhbgorIzogUHJvZ3JhbXMvbWlkaS5jOjYyCittc2dpZCAiRHJhd2JhciBPcmdhbiIKK21zZ3N0ciAi0YLRj9Cz0L7QstGL0Lkg0L7RgNCz0LDQvSIKKworIzogUHJvZ3JhbXMvY29uZmlnLmM6Mjc3NiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6MTM1NgorbXNnaWQgIkRyaXZlcnMgRGlyZWN0b3J5IgorbXNnc3RyICLQutCw0YLQsNC70L7QsyDQtNGA0LDQudCy0LXRgNC+0LIiCisKKyM6IFByb2dyYW1zL21pZGkuYzo2MAorbXNnaWQgIkR1bGNpbWVyIgorbXNnc3RyICLRhtC40LzQsdCw0LvRiyIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjc2OAorbXNnaWQgIkVhZ2VyIFNsaWRpbmcgQnJhaWxsZSBXaW5kb3ciCittc2dzdHIgItCx0YvRgdGC0YDQvtC1INGB0LrQvtC70YzQttC10L3QuNC1INC+0LrQvdCwINCR0YDQsNC50LvRjyIKKworIzogUHJvZ3JhbXMvYnJsdHR5LXR0Yi5jOjE1OAorbXNnaWQgIkVkaXQgdGFibGUuIgorbXNnc3RyICLRgNC10LTQsNC60YLQuNGA0L7QstCw0YLRjCDRgtCw0LHQu9C40YbRgy4iCisKKyM6IFByb2dyYW1zL21pZGkuYzo4MQorbXNnaWQgIkVsZWN0cmljIEJhc3MgKGZpbmdlcikiCittc2dzdHIgItGN0LvQtdC60YLRgNC+0LHQsNGBICjQv9Cw0LvQtdGGKSIKKworIzogUHJvZ3JhbXMvbWlkaS5jOjgyCittc2dpZCAiRWxlY3RyaWMgQmFzcyAocGljaykiCittc2dzdHIgItGN0LvQtdC60YLRgNC+0LHQsNGBICjRidC40L/QvtC6KSIKKworIzogUHJvZ3JhbXMvbWlkaS5jOjQ2Cittc2dpZCAiRWxlY3RyaWMgR3JhbmQgUGlhbm8iCittc2dzdHIgItGN0LvQtdC60YLRgNC40YfQtdGB0LrQuNC5INGA0L7Rj9C70YwiCisKKyM6IFByb2dyYW1zL21pZGkuYzo3NAorbXNnaWQgIkVsZWN0cmljIEd1aXRhciAoY2xlYW4pIgorbXNnc3RyICLRjdC70LXQutGC0YDQvtCz0LjRgtCw0YDQsCAo0YfQuNGB0YLQvtC1INC30LLRg9GH0LDQvdC40LUpIgorCisjOiBQcm9ncmFtcy9taWRpLmM6NzMKK21zZ2lkICJFbGVjdHJpYyBHdWl0YXIgKGphenopIgorbXNnc3RyICLRjdC70LXQutGC0YDQvtCz0LjRgtCw0YDQsCAo0LTQttCw0LcpIgorCisjOiBQcm9ncmFtcy9taWRpLmM6NzUKK21zZ2lkICJFbGVjdHJpYyBHdWl0YXIgKG11dGVkKSIKK21zZ3N0ciAi0Y3Qu9C10LrRgtGA0L7Qs9C40YLQsNGA0LAgKNC/0YDQuNCz0LvRg9GI0ZHQvdC90YvQuSDQt9Cy0YPQuikiCisKKyM6IFByb2dyYW1zL21pZGkuYzo0OAorbXNnaWQgIkVsZWN0cmljIFBpYW5vIDEiCittc2dzdHIgItGN0LvQtdC60YLRgNC40YfQtdGB0LrQvtC1INC/0LjQsNC90LjQvdC+IDEiCisKKyM6IFByb2dyYW1zL21pZGkuYzo0OQorbXNnaWQgIkVsZWN0cmljIFBpYW5vIDIiCittc2dzdHIgItGN0LvQtdC60YLRgNC40YfQtdGB0LrQvtC1INC/0LjQsNC90LjQvdC+IDIiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzoxMzczCittc2dpZCAiRW1lcmdlbmN5IgorbXNnc3RyICLRgdC40LPQvdCw0LvQuNC30LDRhtC40Y8g0Y3QutGB0YLRgNC10L3QvdGL0YUg0YHQu9GD0LbQsSIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjQ1NQorbXNnaWQgIkVuZCIKK21zZ3N0ciAi0LrQvtC90LXRhiIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjc1NAorbXNnaWQgIkVuZCBvZiBMaW5lIgorbXNnc3RyICLQutC+0L3QtdGGINGB0YLRgNC+0LrQuCIKKworIzogUHJvZ3JhbXMvbWlkaS5jOjEyMQorbXNnaWQgIkVuZ2xpc2ggSG9ybiIKK21zZ3N0ciAi0LDQvdCz0LvQuNC50YHQutC40Lkg0YDQvtC20L7QuiIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjEwNjcKK21zZ2lkICJFbnF1ZXVlIgorbXNnc3RyICLQv9C+0YHRgtCw0LLQuNGC0Ywg0LIg0L7Rh9C10YDQtdC00YwiCisKKyM6IFByb2dyYW1zL21pZGkuYzozMAorbXNnaWQgIkVuc2VtYmxlIgorbXNnc3RyICLQsNC90YHQsNC80LHQu9GMIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6MTM3NgorbXNnaWQgIkVycm9yIgorbXNnc3RyICLQvtGI0LjQsdC60LAiCisKKyM6IFByb2dyYW1zL21pZGkuYzozNworbXNnaWQgIkV0aG5pYyBJbnN0cnVtZW50cyIKK21zZ3N0ciAi0L3QsNGA0L7QtNC90YvQtSDQuNC90YHRgtGA0YPQvNC10L3RgtGLIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6OTIxCittc2dpZCAiRXZlbnQgQWxlcnRzIgorbXNnc3RyICLRg9Cy0LXQtNC+0LzQu9C10L3QuNC1INC+INGB0L7QsdGL0YLQuNGP0YUiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzo2MjYKK21zZ2lkICJFeHBhbmQgQ3VycmVudCBXb3JkIgorbXNnc3RyICLQoNCw0LfQstC10YDQvdGD0YLRjCDRgtC10LrRg9GJ0LXQtSDRgdC70L7QstC+IgorCisjOiBQcm9ncmFtcy9jb25maWcuYzozOTkKK21zZ2lkICJFeHBsaWNpdCBwcmVmZXJlbmNlIHNldHRpbmdzLiIKK21zZ3N0ciAi0YDQsNGB0YjQuNGA0LXQvdC90YvQtSDQvdCw0YHRgtGA0L7QudC60LgiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzo5NDgKK21zZ2lkICJGTSIKK21zZ3N0ciAiRk0iCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzo5ODYKK21zZ2lkICJGTSBWb2x1bWUiCittc2dzdHIgItCz0YDQvtC80LrQvtGB0YLRjCBGTSIKKworIy4gU3ludGggRk0KKyM6IFByb2dyYW1zL21pZGkuYzoxNTIKK21zZ2lkICJGWCAxIChyYWluKSIKK21zZ3N0ciAi0LfQstGD0LrQvtCy0LDRjyDRgdGF0LXQvNCwIDEgKNC00L7QttC00YwpIgorCisjOiBQcm9ncmFtcy9taWRpLmM6MTUzCittc2dpZCAiRlggMiAoc291bmR0cmFjaykiCittc2dzdHIgItC30LLRg9C60L7QstCw0Y8g0YHRhdC10LzQsCAyICjRgdCw0YPQvdC00YLRgNC10LopIgorCisjOiBQcm9ncmFtcy9taWRpLmM6MTU0Cittc2dpZCAiRlggMyAoY3J5c3RhbCkiCittc2dzdHIgItC30LLRg9C60L7QstCw0Y8g0YHRhdC10LzQsCAzICjQutGA0LjRgdGC0LDQu9C7KSIKKworIzogUHJvZ3JhbXMvbWlkaS5jOjE1NQorbXNnaWQgIkZYIDQgKGF0bW9zcGhlcmUpIgorbXNnc3RyICLQt9Cy0YPQutC+0LLQsNGPINGB0YXQtdC80LAgNCAo0LDRgtC80L7RgdGE0LXRgNCwKSIKKworIzogUHJvZ3JhbXMvbWlkaS5jOjE1NgorbXNnaWQgIkZYIDUgKGJyaWdodG5lc3MpIgorbXNnc3RyICLQt9Cy0YPQutC+0LLQsNGPINGB0YXQtdC80LAgNSAo0Y/RgNC60L7RgdGC0YwpIgorCisjOiBQcm9ncmFtcy9taWRpLmM6MTU3Cittc2dpZCAiRlggNiAoZ29ibGlucykiCittc2dzdHIgItC30LLRg9C60L7QstCw0Y8g0YHRhdC10LzQsCA2ICjQs9C+0LHQu9C40L3RiykiCisKKyM6IFByb2dyYW1zL21pZGkuYzoxNTgKK21zZ2lkICJGWCA3IChlY2hvZXMpIgorbXNnc3RyICLQt9Cy0YPQutC+0LLQsNGPINGB0YXQtdC80LAgNyAo0LzQvdC+0LbQtdGB0YLQstC10L3QvdC+0LUg0Y3RhdC+KSIKKworIzogUHJvZ3JhbXMvbWlkaS5jOjE1OQorbXNnaWQgIkZYIDggKHNjaS1maSkiCittc2dzdHIgItC30LLRg9C60L7QstCw0Y8g0YHRhdC10LzQsCA4ICjQvdCw0YPRh9C90LDRjyDRhNCw0L3RgtCw0YHRgtC40LrQsCkiCisKKyM6IFByb2dyYW1zL2NtZF9taXNjZWxsYW5lb3VzLmM6NTgKK21zZ2lkICJGZWJydWFyeSIKK21zZ3N0ciAi0YTQtdCy0YDQsNC70YwiCisKKyM6IFByb2dyYW1zL21pZGkuYzoxNjcKK21zZ2lkICJGaWRkbGUiCittc2dzdHIgItGB0LrRgNC40L/QutCwIgorCisjOiBQcm9ncmFtcy9taWRpLmM6MTI2Cittc2dpZCAiRmx1dGUiCittc2dzdHIgItGE0LvQtdC50YLQsCIKKworIzogUHJvZ3JhbXMvYnJsdHR5LWN0Yi5jOjk2Cittc2dpZCAiRm9yY2UgaW1tZWRpYXRlIG91dHB1dC4iCittc2dzdHIgItC30LDQv9GA0L7RgdC40YLRjCDQvdC10LzQtdC00LvQtdC90L3Ri9C5INCy0YvQstC+0LQiCisKKyM6IFByb2dyYW1zL2JybHR0eS1jbGRyLmM6NDIKK21zZ2lkICJGb3JtYXQgb2YgZWFjaCBvdXRwdXQgbGluZS4iCittc2dzdHIgItGE0L7RgNC80LDRgiDQutCw0LbQtNC+0Lkg0LLRi9Cy0L7QtNC40LzQvtC5INGB0YLRgNC+0LrQuCIKKworIzogUHJvZ3JhbXMvYnJsdHR5LXR0Yi5jOjE2NQorbXNnaWQgIkZvcm1hdCBvZiBpbnB1dCBmaWxlLiIKK21zZ3N0ciAi0YTQvtGA0LzQsNGCINCy0YXQvtC00L3QvtCz0L4g0YTQsNC50LvQsCIKKworIzogUHJvZ3JhbXMvYnJsdHR5LXR0Yi5jOjE3MgorbXNnaWQgIkZvcm1hdCBvZiBvdXRwdXQgZmlsZS4iCittc2dzdHIgItGE0L7RgNC80LDRgiDQstGL0YXQvtC00L3QvtCz0L4g0YTQsNC50LvQsCIKKworIzogUHJvZ3JhbXMvbWlkaS5jOjExMQorbXNnaWQgIkZyZW5jaCBIb3JuIgorbXNnc3RyICLRhNGA0LDQvdGG0YPQt9GB0LrQuNC5INGA0L7QttC+0LoiCisKKyM6IFByb2dyYW1zL21pZGkuYzo4MworbXNnaWQgIkZyZXRsZXNzIEJhc3MiCittc2dzdHIgItCx0LXQt9C70LDQtNC+0LLQsNGPINCx0LDRgS3Qs9C40YLQsNGA0LAiCisKKyM6IFByb2dyYW1zL2FsZXJ0LmM6OTcKK21zZ2lkICJGcm96ZW4iCittc2dzdHIgItCf0YDQuNC+0YHRgtCw0L3QvtCy0LvQtdC90L4iCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzo0NzAKK21zZ2lkICJHZW5lcmljIgorbXNnc3RyICLQvtGB0L3QvtCy0L3QvtC1IgorCisjOiBQcm9ncmFtcy9sb2cuYzo2MgorbXNnaWQgIkdlbmVyaWMgSW5wdXQiCittc2dzdHIgItC+0YHQvdC+0LLQvdC+0Lkg0LLQstC+0LQiCisKKyM6IFByb2dyYW1zL21pZGkuYzo1NAorbXNnaWQgIkdsb2NrZW5zcGllbCIKK21zZ3N0ciAi0LrRg9GA0LDQvdGC0YsiCisKKyM6IFByb2dyYW1zL21pZGkuYzoyNworbXNnaWQgIkd1aXRhciIKK21zZ3N0ciAi0LPQuNGC0LDRgNCwIgorCisjLiBTb3VuZCBFZmZlY3RzCisjOiBQcm9ncmFtcy9taWRpLmM6MTc5Cittc2dpZCAiR3VpdGFyIEZyZXQgTm9pc2UiCittc2dzdHIgItCz0LjRgtCw0YDQvdGL0LUg0L/QtdGA0LXQsdC+0YDRiyIKKworIzogUHJvZ3JhbXMvbWlkaS5jOjc4Cittc2dpZCAiR3VpdGFyIEhhcm1vbmljcyIKK21zZ3N0ciAi0LPQuNGC0LDRgNC90LDRjyDQs9Cw0YDQvNC+0L3QuNC60LAiCisKKyM6IFByb2dyYW1zL21pZGkuYzoxODYKK21zZ2lkICJHdW5zaG90IgorbXNnc3RyICLQv9GD0YjQtdGH0L3Ri9C5INCy0YvRgdGC0YDQtdC7IgorCisjOiBQcm9ncmFtcy9taWRpLmM6NjgKK21zZ2lkICJIYXJtb25pY2EiCittc2dzdHIgItCz0LDRgNC80L7QvdC40LrQsCIKKworIzogUHJvZ3JhbXMvbWlkaS5jOjUwCittc2dpZCAiSGFycHNpY2hvcmQiCittc2dzdHIgItC60LvQsNCy0LXRgdC40L0iCisKKyM6IFByb2dyYW1zL21pZGkuYzoxODQKK21zZ2lkICJIZWxpY29wdGVyIgorbXNnc3RyICLQstC10YDRgtC+0LvRkdGCIgorCisjOiBQcm9ncmFtcy9zY3JfaGVscC5jOjIxNQorbXNnaWQgIkhlbHAgU2NyZWVuIgorbXNnc3RyICLRjdC60YDQsNC9INGB0L/RgNCw0LLQutC4IgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6NjQ5IFByb2dyYW1zL21lbnVfcHJlZnMuYzo5MDIKK21zZ2lkICJIaWdoIgorbXNnc3RyICLQstGL0YHQvtC60L4iCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzo4MTAKK21zZ2lkICJIaWdobGlnaHQgQnJhaWxsZSBXaW5kb3cgTG9jYXRpb24iCittc2dzdHIgItCy0YvQtNC10LvQuNGC0Ywg0YDQsNGB0L/QvtC70L7QttC10L3QuNC1INC+0LrQvdCwINCR0YDQsNC50LvRjyIKKworIzogUHJvZ3JhbXMvbWlkaS5jOjQ3Cittc2dpZCAiSG9ua3l0b25rIFBpYW5vIgorbXNnc3RyICLRgNCw0YHRgdGC0YDQvtC10L3QvdC+0LUg0L/QuNCw0L3QuNC90L4iCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzoxMDY2Cittc2dpZCAiSW1tZWRpYXRlIgorbXNnc3RyICLQvdC10LzQtdC00LvQtdC90L3QviIKKworIzogUHJvZ3JhbXMveGJybGFwaS5jOjY2NQorbXNnaWQgIkluY29tcGF0aWJsZSBYS0IgbGlicmFyeVxuIgorbXNnc3RyICLQndC10YHQvtCy0LzQtdGB0YLQuNC80LDRjyDQsdC40LHQu9C40L7RgtC10LrQsCBYS0JcbiIKKworIzogUHJvZ3JhbXMveGJybGFwaS5jOjY2NworbXNnaWQgIkluY29tcGF0aWJsZSBYS0Igc2VydmVyIHN1cHBvcnRcbiIKK21zZ3N0ciAi0J3QtdGB0L7QstC80LXRgdGC0LjQvNCw0Y8g0L/QvtC00LTQtdGA0LbQutCwINGB0LXRgNCy0LXRgNCwIFhLQlxuIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6MTM3OQorbXNnaWQgIkluZm9ybWF0aW9uIgorbXNnc3RyICLQuNC90YTQvtGA0LzQsNGG0LjRjyIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjg0NQorbXNnaWQgIklucHV0IE9wdGlvbnMiCittc2dzdHIgItC+0L/RhtC40Lgg0LLQstC+0LTQsCIKKworIzogUHJvZ3JhbXMvbG9nLmM6NjgKK21zZ2lkICJJbnB1dCBQYWNrZXRzIgorbXNnc3RyICLQv9Cw0LrQtdGC0L3Ri9C5INCy0LLQvtC0IgorCisjOiBQcm9ncmFtcy9jb25maWcuYzozMzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW5zdGFsbCB0aGUgJXMgc2VydmljZSwgYW5kIHRoZW4gZXhpdC4iCittc2dzdHIgItCj0YHRgtCw0L3QvtCy0LjRgtGMINGB0LXRgNCy0LjRgSAlcyDQuCDQstGL0LnRgtC4LiIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjEzODMKK21zZ2lkICJJbnRlcm5hbCBQYXJhbWV0ZXJzIgorbXNnc3RyICLQstC90YPRgtGA0LXQvdC90LjQtSDQv9Cw0YDQsNC80LXRgtGA0YsiCisKKyM6IFByb2dyYW1zL2NtZF9taXNjZWxsYW5lb3VzLmM6NTcKK21zZ2lkICJKYW51YXJ5IgorbXNnc3RyICLRj9C90LLQsNGA0YwiCisKKyM6IERyaXZlcnMvU2NyZWVuL0FuZHJvaWQvc2NyZWVuLmM6MTk3Cittc2dpZCAiSmF2YSBjbGFzcyBub3QgZm91bmQiCittc2dzdHIgItC60LvQsNGB0YEgSmF2YSDQvdC1INC90LDQudC00LXQvSIKKworIzogRHJpdmVycy9TY3JlZW4vQW5kcm9pZC9zY3JlZW4uYzoxODEKK21zZ2lkICJKYXZhIGV4Y2VwdGlvbiBvY2N1cnJlZCIKK21zZ3N0ciAi0L/RgNC+0LjQt9C+0YjQu9C+INC40YHQutC70Y7Rh9C10L3QuNC1IEphdmEiCisKKyM6IERyaXZlcnMvU2NyZWVuL0FuZHJvaWQvc2NyZWVuLmM6MTk0Cittc2dpZCAiSmF2YSBtZXRob2Qgbm90IGZvdW5kIgorbXNnc3RyICLQvNC10YLQvtC0IEphdmEg0L3QtSDQvdCw0LnQtNC10L0iCisKKyM6IFByb2dyYW1zL2NtZF9taXNjZWxsYW5lb3VzLmM6NjMKK21zZ2lkICJKdWx5IgorbXNnc3RyICLQuNGO0LvRjCIKKworIzogUHJvZ3JhbXMvY21kX21pc2NlbGxhbmVvdXMuYzo2MgorbXNnaWQgIkp1bmUiCittc2dzdHIgItC40Y7QvdGMIgorCisjOiBQcm9ncmFtcy9taWRpLmM6MTY1Cittc2dpZCAiS2FsaW1iYSIKK21zZ3N0ciAi0LrQsNC70LjQvNCx0LAiCisKKyM6IFByb2dyYW1zL2NvbmZpZy5jOjE1MTAKK21zZ2lkICJLZXkgQmluZGluZ3MiCittc2dzdHIgItC/0YDQuNCy0Y/Qt9C60Lgg0LrQu9Cw0LLQuNGIIgorCisjOiBQcm9ncmFtcy9jb25maWcuYzoxMDU0Cittc2dpZCAiS2V5IEhlbHAiCittc2dzdHIgItGB0L/RgNCw0LLQutCwINC/0L4g0LrQu9Cw0LLQuNGI0LDQvCIKKworIzogUHJvZ3JhbXMvY29uZmlnLmM6MTUxNSBQcm9ncmFtcy9rdGJfbGlzdC5jOjczNworbXNnaWQgIktleSBUYWJsZSIKK21zZ3N0ciAi0YLQsNCx0LvQuNGG0LAg0LrQu9Cw0LLQuNGIIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6ODI0Cittc2dpZCAiS2V5Ym9hcmQgRW5hYmxlZCIKK21zZ3N0ciAi0LrQu9Cw0LLQuNCw0YLRg9GA0LAg0LLQutC70Y7Rh9C10L3QsCIKKworIzogUHJvZ3JhbXMvbG9nLmM6ODYKK21zZ2lkICJLZXlib2FyZCBLZXkgRXZlbnRzIgorbXNnc3RyICLRgdC+0LHRi9GC0LjRjyDQutC70LDQstC40LDRgtGD0YDQvdGL0YUg0LrQvtC80LDQvdC0IgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6OTMxCittc2dpZCAiS2V5Ym9hcmQgTEVEIEFsZXJ0cyIKK21zZ3N0ciAi0YHQstC10YLQvtCy0YvQtSDQutC70LDQstC40LDRgtGD0YDQvdGL0LUg0YPQstC10LTQvtC80LvQtdC90LjRjyIKKworIzogUHJvZ3JhbXMvY29uZmlnLmM6MjgyNiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6OTEzCittc2dpZCAiS2V5Ym9hcmQgVGFibGUiCittc2dzdHIgItC60LvQsNCy0LjQsNGC0YPRgNC90LDRjyDRgtCw0LHQu9C40YbQsCIKKworIzogUHJvZ3JhbXMvbWlkaS5jOjE2NAorbXNnaWQgIktvdG8iCittc2dzdHIgItC60L7RgtC+IgorCisjOiBQcm9ncmFtcy9jb25maWcuYzoyOTU4Cittc2dpZCAiTGFuZ3VhZ2UiCittc2dzdHIgItGP0LfRi9C6IgorCisjLiBTeW50aCBMZWFkCisjOiBQcm9ncmFtcy9taWRpLmM6MTM0Cittc2dpZCAiTGVhZCAxIChzcXVhcmUpIgorbXNnc3RyICLQstC+0LvQvdCwIDEgKNC60LLQsNC00YDQsNGC0L3QsNGPKSIKKworIzogUHJvZ3JhbXMvbWlkaS5jOjEzNQorbXNnaWQgIkxlYWQgMiAoc2F3dG9vdGgpIgorbXNnc3RyICLQstC+0LvQvdCwIDIgKNC/0LjQu9C+0L7QsdGA0LDQt9C90LDRjykiCisKKyM6IFByb2dyYW1zL21pZGkuYzoxMzYKK21zZ2lkICJMZWFkIDMgKGNhbGxpb3BlKSIKK21zZ3N0ciAi0LLQvtC70L3QsCAzICjQutCw0LvQu9C40L7Qv9CwKSIKKworIzogUHJvZ3JhbXMvbWlkaS5jOjEzNworbXNnaWQgIkxlYWQgNCAoY2hpZmYpIgorbXNnc3RyICLQstC+0LvQvdCwIDQgKNC+0YHQvdC+0LLQvdCw0Y8pIgorCisjOiBQcm9ncmFtcy9taWRpLmM6MTM4Cittc2dpZCAiTGVhZCA1IChjaGFyYW5nKSIKK21zZ3N0ciAi0LLQvtC70L3QsCA1ICjRh9Cw0YDQsNC9KSIKKworIzogUHJvZ3JhbXMvbWlkaS5jOjEzOQorbXNnaWQgIkxlYWQgNiAodm9pY2UpIgorbXNnc3RyICLQstC+0LvQvdCwIDYgKNCz0L7Qu9C+0YEpIgorCisjOiBQcm9ncmFtcy9taWRpLmM6MTQwCittc2dpZCAiTGVhZCA3IChmaWZ0aHMpIgorbXNnc3RyICLQstC+0LvQvdCwIDcgKNC/0Y/RgtCw0Y8pIgorCisjOiBQcm9ncmFtcy9taWRpLmM6MTQxCittc2dpZCAiTGVhZCA4IChiYXNzICsgbGVhZCkiCittc2dzdHIgItCy0L7Qu9C90LAgOCAo0LHQsNGBICsg0YHQstC40L3QtdGGKSIKKworIzogUHJvZ3JhbXMvbGVhcm4uYzoxMDEKK21zZ2lkICJMZWFybiBNb2RlIgorbXNnc3RyICLRgNC10LbQuNC8INC+0LHRg9GH0LXQvdC40Y8iCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzoxMjIyCittc2dpZCAiTGVmdCIKK21zZ3N0ciAi0LvQtdCy0L4iCisKKyM6IFByb2dyYW1zL2JybHR0eS1rdGIuYzo1MQorbXNnaWQgIkxpc3Qga2V5IG5hbWVzLiIKK21zZ3N0ciAi0LLRi9Cy0LXRgdGC0Lgg0L3QsNC30LLQsNC90LjRjyDQutC70LDQstC40Ygg0LIg0YHQv9C40YHQutC1LiIKKworIzogUHJvZ3JhbXMvYnJsdHR5LWt0Yi5jOjU3Cittc2dpZCAiTGlzdCBrZXkgdGFibGUgaW4gaGVscCBzY3JlZW4gZm9ybWF0LiIKK21zZ3N0ciAi0LLRi9Cy0LXRgdGC0Lgg0YLQsNCx0LvQuNGG0YMg0LrQu9Cw0LLQuNGIINGB0L/QuNGB0LrQvtC8INCyINGE0L7RgNC80LDRgtC1INGB0L/RgNCw0LLQvtGH0L3QvtCz0L4g0L7QutC90LAuIgorCisjOiBQcm9ncmFtcy9icmx0dHkta3RiLmM6NjMKK21zZ2lkICJMaXN0IGtleSB0YWJsZSBpbiByZVN0cnVjdHVyZWRUZXh0IGZvcm1hdC4iCittc2dzdHIgItCy0YvQstC10YHRgtC4INGC0LDQsdC70LjRhtGDINC60LvQsNCy0LjRiCDRgdC/0LjRgdC60L7QvCDQsiDRhNC+0YDQvNCw0YLQtSDRgtC10LrRgdGC0LAg0YEg0LjQt9C80LXQvdGR0L3QvdC+0Lkg0YHRgtGA0YPQutGC0YPRgNC+0LkuIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6NjE2Cittc2dpZCAiTGl0ZXJhcnkgQnJhaWxsZSIKK21zZ3N0ciAi0LvQuNGC0LXRgNCw0YLRg9GA0L3Ri9C5INCR0YDQsNC50LvRjCIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjEzNjYKK21zZ2lkICJMb2NhbGUgRGlyZWN0b3J5IgorbXNnc3RyICLQu9C+0LrQsNC70YzQvdGL0Lkg0LrQsNGC0LDQu9C+0LMiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzoxNDAyCittc2dpZCAiTG9nIENhdGVnb3JpZXMiCittc2dzdHIgItC60LDRgtC10LPQvtGA0LjQuCDQttGD0YDQvdCw0LvQsCIKKworIzogUHJvZ3JhbXMvY29uZmlnLmM6ODI0Cittc2dpZCAiTG9nIExldmVsIgorbXNnc3RyICLRg9GA0L7QstC10L3RjCDQstC10LTQtdC90LjRjyDQttGD0YDQvdCw0LvQsCIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjE0NjMKK21zZ2lkICJMb2cgTWVzc2FnZXMiCittc2dzdHIgItGB0L7QvtCx0YnQtdC90LjRjyDQttGD0YDQvdCw0LvQsCIKKworIzogUHJvZ3JhbXMvY29uZmlnLmM6Njc3Cittc2dpZCAiTG9nIHRoZSB2ZXJzaW9ucyBvZiB0aGUgY29yZSwgQVBJLCBhbmQgYnVpbHQtaW4gZHJpdmVycywgYW5kIHRoZW4gZXhpdC4iCittc2dzdHIgItGB0L7RhdGA0LDQvdC40YLRjCDQsiDQttGD0YDQvdCw0LvQtSDQstC10YDRgdC40Lgg0L/RgNC+0YbQtdGB0YHQvtGA0LAsIEFQSSDQuCDQstGB0YLRgNC+0LXQvdC90YvRhSDQtNGA0LDQudCy0LXRgNC+0LIsINCwINC30LDRgtC10Lwg0LLRi9C50YLQuC4iCisKKyM6IFByb2dyYW1zL2NvbmZpZy5jOjY0MgorbXNnaWQgIkxvZyB0byBzdGFuZGFyZCBlcnJvciByYXRoZXIgdGhhbiB0byB0aGUgc3lzdGVtIGxvZy4iCittc2dzdHIgItC/0YDQtdC00L/QvtGH0LjRgtCw0YLRjCDQttGD0YDQvdCw0Lsg0YHRgtCw0L3QtNCw0YDRgtC90YvRhSDQvtGI0LjQsdC+0Log0YHQuNGB0YLQtdC80L3QvtC80YMg0LbRg9GA0L3QsNC70YMiCisKKyM6IFByb2dyYW1zL2NvbmZpZy5jOjY1NgorIywgYy1mb3JtYXQKK21zZ2lkICJMb2dnaW5nIGxldmVsICglcyBvciBvbmUgb2YgeyVzfSkgYW5kL29yIGxvZyBjYXRlZ29yaWVzIHRvIGVuYWJsZSAoYW55IGNvbWJpbmF0aW9uIG9mIHslc30sIGVhY2ggb3B0aW9uYWxseSBwcmVmaXhlZCBieSAlcyB0byBkaXNhYmxlKSIKK21zZ3N0ciAi0YPRgNC+0LLQtdC90Ywg0LLQtdC00LXQvdC40Y8g0LbRg9GA0L3QsNC70LAgKCVzINC40LvQuCDQvtC00LjQvSDQuNC3IHslc30pINC4L9C40LvQuCDQutCw0YLQtdCz0L7RgNC40Lgg0LbRg9GA0L3QsNC70LAg0LTQu9GPINC/0YDQtdC00L7RgdGC0LDQstC70LXQvdC40Y8g0LTQvtGB0YLRg9C/0LAgKNC6INC70Y7QsdGL0Lwg0YHQvtGH0LXRgtCw0L3QuNGP0LwgeyVzfSwg0LrQsNC20LTQvtC1INC40Lcg0LrQvtGC0L7RgNGL0YUg0L7Qv9GG0LjQvtC90LDQu9GM0L3QviDQv9GA0LXQtNCy0LDRgNGP0LXRgtGB0Y8gJXMg0LTQu9GPINC+0YLQutC70Y7Rh9C10L3QuNGPKSIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjg2NworbXNnaWQgIkxvbmcgUHJlc3MgVGltZSIKK21zZ3N0ciAi0LLRgNC10LzRjyDQtNC+0LvQs9C+0LPQviDQvdCw0LbQsNGC0LjRjyIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjY0NyBQcm9ncmFtcy9tZW51X3ByZWZzLmM6OTAwCittc2dpZCAiTG93IgorbXNnc3RyICLQvdC40LfQutC+IgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6NTc3Cittc2dpZCAiTG93ZXIgTGVmdCBEb3QiCittc2dzdHIgItC/0L7QvdC40LfQuNGC0Ywg0LvQtdCy0YPRjiDRgtC+0YfQutGDIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6NTc4Cittc2dpZCAiTG93ZXIgUmlnaHQgRG90IgorbXNnc3RyICLQv9C+0L3QuNC30LjRgtGMINC/0YDQsNCy0YPRjiDRgtC+0YfQutGDIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6OTQ3Cittc2dpZCAiTUlESSIKK21zZ3N0ciAiTUlESSIKKworIzogUHJvZ3JhbXMvY29uZmlnLmM6NjI2Cittc2dpZCAiTUlESSAoTXVzaWNhbCBJbnN0cnVtZW50IERpZ2l0YWwgSW50ZXJmYWNlKSBkZXZpY2Ugc3BlY2lmaWVyLiIKK21zZ3N0ciAi0YHQv9C10YbQuNGE0LjQutCw0YLQvtGAINGD0YHRgtGA0L7QudGB0YLQsiBNSURJIChNdXNpY2FsIEluc3RydW1lbnQgRGlnaXRhbCBJbnRlcmZhY2UpLiIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjk3NworbXNnaWQgIk1JREkgSW5zdHJ1bWVudCIKK21zZ3N0ciAi0LjQvdGB0YLRgNGD0LzQtdC90YIgTUlESSIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjk2NworbXNnaWQgIk1JREkgVm9sdW1lIgorbXNnc3RyICLQs9GA0L7QvNC60L7RgdGC0YwgTUlESSIKKworIzogUHJvZ3JhbXMvY21kX21pc2NlbGxhbmVvdXMuYzo1OQorbXNnaWQgIk1hcmNoIgorbXNnc3RyICLQvNCw0YDRgiIKKworIzogUHJvZ3JhbXMvbWlkaS5jOjU3Cittc2dpZCAiTWFyaW1iYSIKK21zZ3N0ciAi0JzQsNGA0LjQvNCx0LAiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzo2NTAgUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjkwMworbXNnaWQgIk1heGltdW0iCittc2dzdHIgItC80LDQutGB0LjQvNCw0LvRjNC90L7QtSIKKworIzogUHJvZ3JhbXMvYnJsdHR5LWN0Yi5jOjkwCittc2dpZCAiTWF4aW11bSBsZW5ndGggb2YgYW4gb3V0cHV0IGxpbmUuIgorbXNnc3RyICLQvNCw0LrRgdC40LzQsNC70YzQvdCw0Y8g0LTQu9C40L3QsCDQstGL0LLQvtC00LjQvNC+0Lkg0YHRgtGA0L7QutC4LiIKKworIzogUHJvZ3JhbXMvY21kX21pc2NlbGxhbmVvdXMuYzo2MQorbXNnaWQgIk1heSIKK21zZ3N0ciAi0LzQsNC5IgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6NjQ4IFByb2dyYW1zL21lbnVfcHJlZnMuYzo5MDEKK21zZ2lkICJNZWRpdW0iCittc2dzdHIgItGB0YDQtdC00L3QtdC1IgorCisjOiBQcm9ncmFtcy9taWRpLmM6MTc1Cittc2dpZCAiTWVsb2RpYyBUb20iCittc2dzdHIgItC80LXQu9C+0LTQuNGH0L3Ri9C5INCi0L7QvCIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjU5MAorbXNnaWQgIk1lbnUgT3B0aW9ucyIKK21zZ3N0ciAi0LzQtdC90Y4g0L7Qv9GG0LjQuSIKKworIzogUHJvZ3JhbXMvY29uZmlnLmM6NjM1Cittc2dpZCAiTWVzc2FnZSBob2xkIHRpbWVvdXQgKGluIDEwbXMgdW5pdHMpLiIKK21zZ3N0ciAi0YHQvtC+0LHRidC10L3QuNC1INCy0YDQtdC80Y8g0LfQsNC00LXRgNC20LrQuCAo0YjQsNCzINCyIDEwbXMpLiIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjY0NiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6ODk5Cittc2dpZCAiTWluaW11bSIKK21zZ3N0ciAi0LzQuNC90LjQvNCw0LvRjNC90L7QtSIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjExOTQKK21zZ2lkICJNb250aCBEYXkgWWVhciIKK21zZ3N0ciAi0LzQtdGB0Y/RhiDQtNC10L3RjCDQs9C+0LQiCisKKyM6IFByb2dyYW1zL21pZGkuYzo1NQorbXNnaWQgIk11c2ljIEJveCIKK21zZ3N0ciAi0LzRg9C30YvQutCw0LvRjNC90LDRjyDRiNC60LDRgtGD0LvQutCwIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6OTQ3Cittc2dpZCAiTXVzaWNhbCBJbnN0cnVtZW50IERpZ2l0YWwgSW50ZXJmYWNlIgorbXNnc3RyICLRhtC40YTRgNC+0LLQvtC5INC40L3RgtC10YDRhNC10LnRgSDQvNGD0LfRi9C60LDQu9GM0L3Ri9GFINC40L3RgdGC0YDRg9C80LXQvdGC0L7QsiIKKworIzogUHJvZ3JhbXMvbWlkaS5jOjExMAorbXNnaWQgIk11dGVkIFRydW1wZXQiCittc2dzdHIgItC/0YDQuNCz0LvRg9GI0ZHQvdC90LDRjyDRgtGA0YPQsdCwIgorCisjOiBQcm9ncmFtcy9jb25maWcuYzo1MjYKK21zZ2lkICJOYW1lIG9mIG9yIHBhdGggdG8gYXR0cmlidXRlcyB0YWJsZS4iCittc2dzdHIgItC40LzRjyDQuNC70Lgg0L/Rg9GC0Ywg0Log0YLQsNCx0LvQuNGG0LUg0LDRgtGA0LjQsdGD0YLQvtCyLiIKKworIzogUHJvZ3JhbXMvY29uZmlnLmM6NTM1Cittc2dpZCAiTmFtZSBvZiBvciBwYXRoIHRvIGNvbnRyYWN0aW9uIHRhYmxlLiIKK21zZ3N0ciAi0LjQvNGPINC40LvQuCDQv9GD0YLRjCDQuiDRgtCw0LHQu9C40YbQtSDRgdC+0LrRgNCw0YnQtdC90LjQuS4iCisKKyM6IFByb2dyYW1zL2NvbmZpZy5jOjM5MQorbXNnaWQgIk5hbWUgb2Ygb3IgcGF0aCB0byBkZWZhdWx0IHByZWZlcmVuY2VzIGZpbGUuIgorbXNnc3RyICLQuNC80Y8g0LjQu9C4INC/0YPRgtGMINC6INGE0LDQudC70YMg0L3QsNGB0YLRgNC+0LXQuiDQv9C+INGD0LzQvtC70YfQsNC90LjRji4iCisKKyM6IFByb2dyYW1zL2NvbmZpZy5jOjU0NAorbXNnaWQgIk5hbWUgb2Ygb3IgcGF0aCB0byBrZXlib2FyZCB0YWJsZS4iCittc2dzdHIgItC40LzRjyDQuNC70Lgg0L/Rg9GC0Ywg0Log0LrQu9Cw0LLQuNCw0YLRg9GA0L3QvtC5INGC0LDQsdC70LjRhtC1LiIKKworIzogUHJvZ3JhbXMvY29uZmlnLmM6NTgwCittc2dpZCAiTmFtZSBvZiBvciBwYXRoIHRvIHNwZWVjaCBpbnB1dCBvYmplY3QuIgorbXNnc3RyICLQuNC80Y8g0LjQu9C4INC/0YPRgtGMINC6INC+0LHRitC10LrRgtGDINGA0LXRh9C10LLQvtCz0L4g0LLQstC+0LTQsCIKKworIzogUHJvZ3JhbXMvY29uZmlnLmM6NTE3CisjLCBjLWZvcm1hdAorbXNnaWQgIk5hbWUgb2Ygb3IgcGF0aCB0byB0ZXh0IHRhYmxlIChvciAlcykuIgorbXNnc3RyICLQuNC80Y8g0LjQu9C4INC/0YPRgtGMINC6INGC0LDQsdC70LjRhtC1INGC0LXQutGB0YLQvtCyICjQuNC70LggJXMpLiIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjczNAorbXNnaWQgIk5hdmlnYXRpb24gT3B0aW9ucyIKK21zZ3N0ciAi0L7Qv9GG0LjQuCDQvdCw0LLQuNCz0LDRhtC40LgiCisKKyM6IFByb2dyYW1zL21lbnUuYzo0NDkKK21zZ2lkICJObyIKK21zZ3N0ciAi0L3QtdGCIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6NjMzCittc2dpZCAiTm8gQ2FwaXRhbGl6YXRpb24iCittc2dzdHIgItCy0YHQtSDQsdGD0LrQstGLINGB0YLRgNC+0YfQvdGL0LUiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzo3ODYgUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjEwMzAKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzoxMDQzIFByb2dyYW1zL21lbnVfcHJlZnMuYzoxMDU2CisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6MTE4MiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6MTIyMQorIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjEyNDEKK21zZ2lkICJOb25lIgorbXNnc3RyICLQvdC40LrQsNC60LjQtSIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjEzNzgKK21zZ2lkICJOb3RpY2UiCittc2dzdHIgItC30LDQvNC10YLQutCwIgorCisjOiBQcm9ncmFtcy9jbWRfbWlzY2VsbGFuZW91cy5jOjY3Cittc2dpZCAiTm92ZW1iZXIiCittc2dzdHIgItC90L7Rj9Cx0YDRjCIKKworIzogUHJvZ3JhbXMvbWlkaS5jOjEyMAorbXNnaWQgIk9ib2UiCittc2dzdHIgItCz0L7QsdC+0LkiCisKKyM6IFByb2dyYW1zL21pZGkuYzoxMzIKK21zZ2lkICJPY2FyaW5hIgorbXNnc3RyICLQvtC60LDRgNC40L3QsCIKKworIzogUHJvZ3JhbXMvY21kX21pc2NlbGxhbmVvdXMuYzo2NgorbXNnaWQgIk9jdG9iZXIiCittc2dzdHIgItC+0LrRgtGP0LHRgNGMIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6ODQ5Cittc2dpZCAiT2ZmIgorbXNnc3RyICLQstGL0LrQuy4iCisKKyM6IFByb2dyYW1zL2NvbmZpZy5jOjE2MDEKK21zZ2lkICJPbGQgUHJlZmVyZW5jZXMgRmlsZSIKK21zZ3N0ciAi0YTQsNC50Lsg0YHRgtCw0YDRi9GFINC90LDRgdGC0YDQvtC10LoiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzo4NjIKK21zZ2lkICJPbiBGaXJzdCBSZWxlYXNlIgorbXNnc3RyICLQv9GA0Lgg0L/QtdGA0LLQvtC8INC30LDQv9GD0YHQutC1IgorCisjOiBQcm9ncmFtcy9taWRpLmM6MTA1Cittc2dpZCAiT3JjaGVzdHJhIEhpdCIKK21zZ3N0ciAi0L7RgNC60LXRgdGC0YDQvtCy0YvQuSDRhdC40YIiCisKKyM6IFByb2dyYW1zL21pZGkuYzo5NQorbXNnaWQgIk9yY2hlc3RyYWwgSGFycCIKK21zZ3N0ciAi0L7RgNC60LXRgdGC0YDQvtCy0LDRjyDQsNGA0YTQsCIKKworIzogUHJvZ3JhbXMvbWlkaS5jOjI2Cittc2dpZCAiT3JnYW4iCittc2dzdHIgItC+0YDQs9Cw0L0iCisKKyM6IFByb2dyYW1zL2xvZy5jOjc0Cittc2dpZCAiT3V0cHV0IFBhY2tldHMiCittc2dzdHIgItC/0LDQutC10YLQvdGL0Lkg0LLRi9GF0L7QtCIKKworIzogUHJvZ3JhbXMvbWlkaS5jOjc2Cittc2dpZCAiT3ZlcmRyaXZlbiBHdWl0YXIiCittc2dzdHIgItC/0LXRgNC10LPRgNGD0LbQtdC90L3QsNGPINCz0LjRgtCw0YDQsCIKKworIzogRHJpdmVycy9CcmFpbGxlL0lyaXMvYnJhaWxsZS5jOjE1NDUKK21zZ2lkICJQQyBtb2RlIgorbXNnc3RyICLRgNC10LbQuNC8INCf0JoiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzo5NDYKK21zZ2lkICJQQ00iCittc2dzdHIgIlBDTSIKKworIzogUHJvZ3JhbXMvY29uZmlnLmM6NjE2Cittc2dpZCAiUENNIChzb3VuZGNhcmQgZGlnaXRhbCBhdWRpbykgZGV2aWNlIHNwZWNpZmllci4iCittc2dzdHIgIlBDTSDRgdC/0LXRhtC40YTQuNC60LDRgtC+0YAg0YPRgdGC0YDQvtC50YHRgtCy0LAgKNC30LLRg9C60L7QstCw0Y8g0LrQsNGA0YLQsCkuIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6OTU5Cittc2dpZCAiUENNIFZvbHVtZSIKK21zZ3N0ciAi0LPRgNC+0LzQutC+0YHRgtGMIFBDTSIKKworIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6MTI2NgorbXNnaWQgIlBTLzIgKHNldCAzKSBrZXlib2FyZCBzY2FuIGNvZGUiCittc2dzdHIgIlBTLzIgKHNldCAzKSDQutC70LDQstC40LDRgtGD0YDQvdGL0Lkg0YHQutCw0L0t0LrQvtC0IgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6MTMxNgorbXNnaWQgIlBhY2thZ2UgUmV2aXNpb24iCittc2dzdHIgItGA0LXQstC40LfQuNGPINGB0LHQvtGA0LrQuCIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjEzMTEKK21zZ2lkICJQYWNrYWdlIFZlcnNpb24iCittc2dzdHIgItCy0LXRgNGB0LjRjyDRgdCx0L7RgNC60LgiCisKKyMuIFN5bnRoIFBhZAorIzogUHJvZ3JhbXMvbWlkaS5jOjE0MworbXNnaWQgIlBhZCAxIChuZXcgYWdlKSIKK21zZ3N0ciAi0LfQsNGB0LvQvtC90LrQsCAxICjQvdGM0Y4t0Y3QudC00LYpIgorCisjOiBQcm9ncmFtcy9taWRpLmM6MTQ0Cittc2dpZCAiUGFkIDIgKHdhcm0pIgorbXNnc3RyICLQt9Cw0YHQu9C+0L3QutCwIDIgKNGC0ZHQv9C70YvQuSkiCisKKyM6IFByb2dyYW1zL21pZGkuYzoxNDUKK21zZ2lkICJQYWQgMyAocG9seXN5bnRoKSIKK21zZ3N0ciAi0LfQsNGB0LvQvtC90LrQsCAzICjQvNC90L7Qs9C+0YLQtdC80LHRgNC+0LLRi9C5INCz0LvRg9GF0L7QuSDQt9Cy0YPQuikiCisKKyM6IFByb2dyYW1zL21pZGkuYzoxNDYKK21zZ2lkICJQYWQgNCAoY2hvaXIpIgorbXNnc3RyICLQt9Cw0YHQu9C+0L3QutCwIDQgKNGF0L7RgCkiCisKKyM6IFByb2dyYW1zL21pZGkuYzoxNDcKK21zZ2lkICJQYWQgNSAoYm93ZWQpIgorbXNnc3RyICLQt9Cw0YHQu9C+0L3QutCwIDUgKNC60YDQuNCy0LjQt9C90LApIgorCisjOiBQcm9ncmFtcy9taWRpLmM6MTQ4Cittc2dpZCAiUGFkIDYgKG1ldGFsbGljKSIKK21zZ3N0ciAi0LfQsNGB0LvQvtC90LrQsCA2ICjQvNC10YLQsNC70LvQuNC6KSIKKworIzogUHJvZ3JhbXMvbWlkaS5jOjE0OQorbXNnaWQgIlBhZCA3IChoYWxvKSIKK21zZ3N0ciAi0LfQsNGB0LvQvtC90LrQsCA3ICjQvtGA0LXQvtC7KSIKKworIzogUHJvZ3JhbXMvbWlkaS5jOjE1MAorbXNnaWQgIlBhZCA4IChzd2VlcCkiCittc2dzdHIgItC30LDRgdC70L7QvdC60LAgOCAo0LzQtdGC0LvQsCkiCisKKyM6IFByb2dyYW1zL21pZGkuYzoxMjgKK21zZ2lkICJQYW4gRmx1dGUiCittc2dzdHIgItC/0LDQvSDRhNC70LXQudGC0LAiCisKKyM6IFByb2dyYW1zL2NvbmZpZy5jOjQ1MworbXNnaWQgIlBhcmFtZXRlcnMgZm9yIHRoZSBhcHBsaWNhdGlvbiBwcm9ncmFtbWluZyBpbnRlcmZhY2UuIgorbXNnc3RyICLQv9Cw0YDQsNC80LXRgtGA0Ysg0LTQu9GPINC/0YDQvtCz0YDQsNC80LzQuNGA0L7QstCw0L3QuNGPINC40L3RgtC10YDRhNC10LnRgdCwINC/0YDQuNC70L7QttC10L3QuNGPLiIKKworIzogUHJvZ3JhbXMvY29uZmlnLmM6NDc1Cittc2dpZCAiUGFyYW1ldGVycyBmb3IgdGhlIGJyYWlsbGUgZHJpdmVyLiIKK21zZ3N0ciAi0L/QsNGA0LDQvNC10YLRgNGLINC00YDQsNC50LLQtdGA0LAg0JHRgNCw0LnQu9GPLiIKKworIzogUHJvZ3JhbXMvY29uZmlnLmM6MzQ4Cittc2dpZCAiUGFyYW1ldGVycyBmb3IgdGhlIHByaXZpbGVnZSBlc3RhYmxpc2htZW50IHN0YWdlLiIKK21zZ3N0ciAi0L/QsNGA0LDQvNC10YLRgNGLINC00LvRjyDQv9GA0LXQuNC80YPRidC10YHRgtCy0LXQvdC90L7QuSDRg9GB0YLQsNC90L7QstC60LgiCisKKyM6IFByb2dyYW1zL2NvbmZpZy5jOjYwNworbXNnaWQgIlBhcmFtZXRlcnMgZm9yIHRoZSBzY3JlZW4gZHJpdmVyLiIKK21zZ3N0ciAi0L/QsNGA0LDQvNC10YLRgNGLINC00LvRjyDRjdC60YDQsNC90L3QvtCz0L4g0LTRgNCw0LnQstC10YDQsCIKKworIzogUHJvZ3JhbXMvY29uZmlnLmM6NTcyCittc2dpZCAiUGFyYW1ldGVycyBmb3IgdGhlIHNwZWVjaCBkcml2ZXIuIgorbXNnc3RyICLQv9Cw0YDQsNC80LXRgtGA0Ysg0LTQu9GPINGA0LXRh9C10LLQvtCz0L4g0LTRgNCw0LnQstC10YDQsCIKKworIzogUHJvZ3JhbXMvY29uZmlnLmM6MzgyCittc2dpZCAiUGF0aCB0byBkZWZhdWx0IHNldHRpbmdzIGZpbGUuIgorbXNnc3RyICLQv9GD0YLRjCDQuiDRhNCw0LnQu9GDINC90LDRgdGC0YDQvtC10Log0L/QviDRg9C80L7Qu9GH0LDQvdC40Y4iCisKKyM6IFByb2dyYW1zL2NvbmZpZy5jOjQzNgorbXNnaWQgIlBhdGggdG8gZGlyZWN0b3J5IGNvbnRhaW5pbmcgZHJpdmVycy4iCittc2dzdHIgItC/0YPRgtGMINC6INC60LDRgtCw0LvQvtCz0YMg0YEg0LTRgNCw0LnQstC10YDQsNC80LgiCisKKyM6IFByb2dyYW1zL2JybHRlc3QuYzo2OCBQcm9ncmFtcy9icmx0dHktYXRiLmM6MzYgUHJvZ3JhbXMvYnJsdHR5LWN0Yi5jOjU0CisjOiBQcm9ncmFtcy9icmx0dHkta3RiLmM6NzMgUHJvZ3JhbXMvY29uZmlnLmM6NTA3Cittc2dpZCAiUGF0aCB0byBkaXJlY3RvcnkgY29udGFpbmluZyB0YWJsZXMuIgorbXNnc3RyICLQv9GD0YLRjCDQuiDQutCw0YLQsNC70L7Qs9GDINGBINGC0LDQsdC70LjRhtCw0LzQuCIKKworIzogUHJvZ3JhbXMvYnJsdHR5LXR0Yi5jOjE1MgorbXNnaWQgIlBhdGggdG8gZGlyZWN0b3J5IGNvbnRhaW5pbmcgdGV4dCB0YWJsZXMuIgorbXNnc3RyICLQv9GD0YLRjCDQuiDQutCw0YLQsNC70L7Qs9GDINGBINGC0LDQsdC70LjRhtCw0LzQuCDRgtC10LrRgdGC0L7QsiIKKworIzogUHJvZ3JhbXMvYnJsdHR5LWt0Yi5jOjgzCittc2dpZCAiUGF0aCB0byBkaXJlY3RvcnkgZm9yIGxvYWRpbmcgZHJpdmVycy4iCittc2dzdHIgItC/0YPRgtGMINC6INC60LDRgtCw0LvQvtCz0YMg0LfQsNCz0YDRg9C30LrQuCDQtNGA0LDQudCy0LXRgNC+0LIiCisKKyM6IFByb2dyYW1zL2JybHR0eS10cnR4dC5jOjUxCittc2dpZCAiUGF0aCB0byBkaXJlY3RvcnkgZm9yIHRleHQgdGFibGVzLiIKK21zZ3N0ciAi0L/Rg9GC0Ywg0Log0LrQsNGC0LDQu9C+0LPRgyDQt9Cw0LPRgNGD0LfQutC4INGC0LDQsdC70LjRhiDRgtC10LrRgdGC0L7QsiIKKworIzogUHJvZ3JhbXMvYnJsdGVzdC5jOjc4IFByb2dyYW1zL2NvbmZpZy5jOjQyNgorbXNnaWQgIlBhdGggdG8gZGlyZWN0b3J5IHdoaWNoIGNhbiBiZSB3cml0dGVuIHRvLiIKK21zZ3N0ciAi0L/Rg9GC0Ywg0Log0LrQsNGC0LDQu9C+0LPRgyDQtNC70Y8g0LDQtNGA0LXRgdCw0YbQuNC4LiIKKworIzogUHJvZ3JhbXMvY29uZmlnLmM6NDE2Cittc2dpZCAiUGF0aCB0byBkaXJlY3Rvcnkgd2hpY2ggY29udGFpbnMgZmlsZXMgdGhhdCBjYW4gYmUgdXBkYXRlZC4iCittc2dzdHIgItC/0YPRgtGMINC6INC60LDRgtCw0LvQvtCz0YMg0YEg0YTQsNC50LvQsNC80LgsINC00L7RgdGC0YPQv9C90YvQvNC4INC00LvRjyDQvtCx0L3QvtCy0LvQtdC90LjRjy4iCisKKyM6IFByb2dyYW1zL2JybHR0eS10cnR4dC5jOjU5Cittc2dpZCAiUGF0aCB0byBpbnB1dCB0ZXh0IHRhYmxlLiIKK21zZ3N0ciAi0L/Rg9GC0Ywg0Log0YLQsNCx0LvQuNGG0LUg0LLQstC+0LTQsCDRgtC10LrRgdGC0LAuIgorCisjOiBQcm9ncmFtcy9jb25maWcuYzo2NjUKK21zZ2lkICJQYXRoIHRvIGxvZyBmaWxlLiIKK21zZ3N0ciAi0L/Rg9GC0Ywg0Log0YTQsNC50LvRgyDQttGD0YDQvdCw0LvQsC4iCisKKyM6IFByb2dyYW1zL2JybHR0eS10cnR4dC5jOjY3Cittc2dpZCAiUGF0aCB0byBvdXRwdXQgdGV4dCB0YWJsZS4iCittc2dzdHIgItC/0YPRgtGMINC6INGC0LDQsdC70LjRhtC1INCy0YvQstC+0LTQsCDRgtC10LrRgdGC0LAuIgorCisjOiBQcm9ncmFtcy9jb25maWcuYzozNzIKK21zZ2lkICJQYXRoIHRvIHByb2Nlc3MgaWRlbnRpZmllciBmaWxlLiIKK21zZ3N0ciAi0L/Rg9GC0Ywg0Log0YTQsNC50LvRgyDQuNC00LXQvdGC0LjRhNC40LrQsNGG0LjQuCDQv9GA0L7RhtC10YHRgdCwLiIKKworIzogUHJvZ3JhbXMvY29uZmlnLmM6NDA2Cittc2dpZCAiUGF0dGVybnMgdGhhdCBtYXRjaCBjb21tYW5kIHByb21wdHMuIgorbXNnc3RyICLQvtCx0YDQsNC30YbRiywg0L/QvtC00YXQvtC00Y/RidC40LUgINC00LvRjyDQv9C+0LTRgdC60LDQt9C+0LouIgorCisjOiBQcm9ncmFtcy9taWRpLmM6MzgKK21zZ2lkICJQZXJjdXNzaXZlIEluc3RydW1lbnRzIgorbXNnc3RyICLQv9C10YDQutGD0YHRgdC40L7QvdC90YvQtSDQuNC90YHRgtGA0YPQvNC10L3RgtGLIgorCisjOiBQcm9ncmFtcy9taWRpLmM6NjMKK21zZ2lkICJQZXJjdXNzaXZlIE9yZ2FuIgorbXNnc3RyICLQv9C10YDQutGD0YHRgdC40L7QvdC90YvQuSDQvtGA0LPQsNC9IgorCisjOiBQcm9ncmFtcy9taWRpLmM6MjQKK21zZ2lkICJQaWFubyIKK21zZ3N0ciAi0L/QuNCw0L3QuNC90L4iCisKKyMuIFBpcGUKKyM6IFByb2dyYW1zL21pZGkuYzoxMjUKK21zZ2lkICJQaWNjb2xvIgorbXNnc3RyICLQvNCw0LvQtdC90YzQutCw0Y8g0YTQu9C10LnRgtCwINC/0LjQutC60L7Qu9C+IgorCisjOiBQcm9ncmFtcy9taWRpLmM6MzMKK21zZ2lkICJQaXBlIgorbXNnc3RyICLRgtGA0YPQsdCwIgorCisjOiBQcm9ncmFtcy9taWRpLmM6OTQKK21zZ2lkICJQaXp6aWNhdG8gU3RyaW5ncyIKK21zZ3N0ciAi0LfQsNGJ0LXQvNC70ZHQvdC90YvQtSDRgdGC0YDRg9C90YsiCisKKyM6IERyaXZlcnMvQnJhaWxsZS9CYXVtL2JyYWlsbGUuYzoxMTE5Cittc2dpZCAiUG93ZXJkb3duIgorbXNnc3RyICLQstGL0LrQu9GO0YfQuNGC0YwiCisKKyM6IFByb2dyYW1zL2NvbmZpZy5jOjI3NTYgUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjEzNDYKK21zZ2lkICJQcmVmZXJlbmNlcyBGaWxlIgorbXNnc3RyICLRhNCw0LnQuyDQvdCw0YHRgtGA0L7QtdC6IgorCisjOiBQcm9ncmFtcy9zY3JfbWVudS5jOjI3MQorbXNnaWQgIlByZWZlcmVuY2VzIE1lbnUiCittc2dzdHIgItC80LXQvdGOINC90LDRgdGC0YDQvtC10LoiCisKKyM6IEhlYWRlcnMvb3B0aW9ucy5oOjc1Cittc2dpZCAiUHJpbnQgYSB1c2FnZSBzdW1tYXJ5IChhbGwgb3B0aW9ucyksIGFuZCB0aGVuIGV4aXQuIgorbXNnc3RyICLQoNCw0YHQv9C10YfQsNGC0LDRgtGMINC+0YLRh9GR0YIg0L/QviDQuNGB0L/QvtC70YzQt9C+0LLQsNC90LjRjiAo0LLRgdC10YUg0L7Qv9GG0LjQuSkg0Lgg0LLRi9C50YLQuC4iCisKKyM6IEhlYWRlcnMvb3B0aW9ucy5oOjcwCittc2dpZCAiUHJpbnQgYSB1c2FnZSBzdW1tYXJ5IChjb21tb25seSB1c2VkIG9wdGlvbnMgb25seSksIGFuZCB0aGVuIGV4aXQuIgorbXNnc3RyICLQoNCw0YHQv9C10YfQsNGC0LDRgtGMINC+0YLRh9GR0YIg0L/QviDQuNGB0L/QvtC70YzQt9C+0LLQsNC90LjRjiAo0YLQvtC70YzQutC+ICDRh9Cw0YHRgtC+ICAg0L/RgNC40LzQtdC90Y/QtdC80YvRhSDQvtC/0YbQuNC5KSDQuCDQstGL0LnRgtC4LiIKKworIzogUHJvZ3JhbXMvY29uZmlnLmM6Nzc5Cittc2dpZCAiUHJpdmlsZWdlIFBhcmFtZXRlciIKK21zZ3N0ciAi0L/QsNGA0LDQvNC10YLRgCDQv9GA0LXQuNC80YPRidC10YHRgtCy0LXQvdC90L7Qs9C+INC40YHQv9C+0LvRjNC30L7QstCw0L3QuNGPIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6MTI5NworbXNnaWQgIlByb2ZpbGVzIgorbXNnc3RyICLQv9GA0L7RhNC40LvQuCIKKworIzogUHJvZ3JhbXMvY29uZmlnLmM6NTUyCittc2dpZCAiUHJvcGVydGllcyBvZiBlbGlnaWJsZSBrZXlib2FyZHMuIgorbXNnc3RyICLRgdCy0L7QudGB0YLQstCwINC00L7Qv9GD0YHRgtC40LzRi9GFINC6INC40YHQv9C+0LvRjNC30L7QstCw0L3QuNGOINC60LvQsNCy0LjQsNGC0YPRgC4iCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzo4MzkKK21zZ2lkICJRdWljayBTcGFjZSIKK21zZ3N0ciAi0LHRi9GB0YLRgNGL0Lkg0L/RgNC+0LHQtdC7IgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6MTA0NworbXNnaWQgIlJhaXNlIFBpdGNoIgorbXNnc3RyICLQv9C+0LLRi9GB0LjRgtGMINGC0L7QvSIKKworIzogUHJvZ3JhbXMvY29uZmlnLmM6MzE2Cittc2dpZCAiUmVjb2duaXplIGVudmlyb25tZW50IHZhcmlhYmxlcy4iCittc2dzdHIgItGA0LDRgdC/0L7Qt9C90LDRgtGMINC/0LXRgNC10LzQtdC90L3Ri9C1ICDRgdC40YHRgtC10LzQvdC+0Lkg0YHRgNC10LTRiyIKKworIzogUHJvZ3JhbXMvbWlkaS5jOjEyNworbXNnaWQgIlJlY29yZGVyIgorbXNnc3RyICLQtNC40LrRgtC+0YTQvtC9IgorCisjOiBQcm9ncmFtcy9taWRpLmM6MzIKK21zZ2lkICJSZWVkIgorbXNnc3RyICLRgdCy0LjRgNC10LvRjCIKKworIzogUHJvZ3JhbXMvbWlkaS5jOjY2Cittc2dpZCAiUmVlZCBPcmdhbiIKK21zZ3N0ciAi0K/Qt9GL0YfQutC+0LLRi9C5INC+0YDQs9Cw0L0iCisKKyM6IFByb2dyYW1zL2JybHR0eS1jdGIuYzo4MgorbXNnaWQgIlJlZm9ybWF0IGlucHV0LiIKK21zZ3N0ciAi0L/QtdGA0LXRhNC+0YDQvNCw0YLQuNGA0L7QstCw0YLRjCDQstCy0L7QtCIKKworIzogUHJvZ3JhbXMvY29uZmlnLmM6NDk3Cittc2dpZCAiUmVsZWFzZSBicmFpbGxlIGRldmljZSB3aGVuIHNjcmVlbiBvciB3aW5kb3cgaXMgdW5yZWFkYWJsZS4iCittc2dzdHIgItC30LDQv9GD0YHRgtC40YLRjCDRg9GB0YLRgNC+0LnRgdGC0LLQviDQkdGA0LDQudC70Y8sINC10YHQu9C4INGN0LrRgNCw0L0g0LjQu9C4INC+0LrQvdC+INC90LUg0YfQuNGC0LDQtdGC0YHRjy4iCisKKyM6IFByb2dyYW1zL3hicmxhcGkuYzoxMDYKK21zZ2lkICJSZW1haW4gYSBmb3JlZ3JvdW5kIHByb2Nlc3MiCittc2dzdHIgItCf0YDQvtGG0LXRgdGBINC+0YHRgtCw0ZHRgtGB0Y8g0LIg0L/RgNC40L7RgNC10YLQtdGC0LUiCisKKyM6IFByb2dyYW1zL2NvbmZpZy5jOjMyMworbXNnaWQgIlJlbWFpbiBhIGZvcmVncm91bmQgcHJvY2Vzcy4iCittc2dzdHIgItCf0YDQvtGG0LXRgdGBINC+0YHRgtCw0ZHRgtGB0Y8g0LIg0L/RgNC40L7RgNC10YLQtdGC0LUuIgorCisjOiBQcm9ncmFtcy9icmx0dHktdHJ0eHQuYzo3MworbXNnaWQgIlJlbW92ZSBkb3RzIHNldmVuIGFuZCBlaWdodC4iCittc2dzdHIgItGD0LHRgNCw0YLRjCDRgtC+0YfQutC4INGB0LXQvNGMINC4INCy0L7RgdC10LzRjC4iCisKKyM6IFByb2dyYW1zL2NvbmZpZy5jOjMzOAorIywgYy1mb3JtYXQKK21zZ2lkICJSZW1vdmUgdGhlICVzIHNlcnZpY2UsIGFuZCB0aGVuIGV4aXQuIgorbXNnc3RyICLQo9Cx0YDQsNGC0Ywg0YHQtdGA0LLQuNGBICVzINC4INCy0YvQudGC0LguIgorCisjOiBQcm9ncmFtcy9icmx0dHkta3RiLmM6NDUKK21zZ2lkICJSZXBvcnQgcHJvYmxlbXMgd2l0aCB0aGUga2V5IHRhYmxlLiIKK21zZ3N0ciAi0KHQvtC+0LHRidC40YLRjCDQviDQv9GA0L7QsdC70LXQvNCw0YUg0YEg0YLQsNCx0LvQuNGG0LXQuSDQutC70LDQstC40YguIgorCisjOiBQcm9ncmFtcy9icmx0dHktdHRiLmM6MTg2Cittc2dpZCAiUmVwb3J0IHRoZSBjaGFyYWN0ZXJzIHdpdGhpbiB0aGUgY3VycmVudCBzY3JlZW4gZm9udCB0aGF0IGFyZW4ndCBkZWZpbmVkIHdpdGhpbiB0aGUgdGV4dCB0YWJsZS4iCittc2dzdHIgItCh0L7QvtCx0YnQuNGC0Ywg0L4g0YHQuNC80LLQvtC70LDRhSwg0L3QtdC+0L/RgNC10LTQtdC70Y/QtdC80YvRhSDQsiDQtNCw0L3QvdC+0Lkg0YLQsNCx0LvQuNGG0LUg0YLQtdC60YHRgtC+0LIg0YLQtdC60YPRidC10LPQviDRjdC60YDQsNC90L3QvtCz0L4g0YjRgNC40YTRgtCwLiIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjc1NQorbXNnaWQgIlJlc3Qgb2YgTGluZSIKK21zZ3N0ciAi0L7RgdGC0LDRgtC+0Log0YHRgtGA0L7QutC4IgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6MTQ0NQorbXNnaWQgIlJlc3RhcnQgQnJhaWxsZSBEcml2ZXIiCittc2dzdHIgItC/0LXRgNC10LfQsNC/0YPRgdGC0LjRgtGMINC00YDQsNC50LLQtdGAINCR0YDQsNC50LvRjyIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjE0NTcKK21zZ2lkICJSZXN0YXJ0IFNjcmVlbiBEcml2ZXIiCittc2dzdHIgItCf0LXRgNC10LfQsNC/0YPRgdGC0LjRgtGMINGN0LrRgNCw0L3QvdGL0Lkg0LTRgNCw0LnQstC10YAiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzoxNDUxCittc2dpZCAiUmVzdGFydCBTcGVlY2ggRHJpdmVyIgorbXNnc3RyICLQn9C10YDQtdC30LDQv9GD0YHRgtC40YLRjCDRgNC10YfQtdCy0L7QuSDQtNGA0LDQudCy0LXRgCIKKworIzogUHJvZ3JhbXMvbWlkaS5jOjE3NworbXNnaWQgIlJldmVyc2UgQ3ltYmFsIgorbXNnc3RyICLRgtCw0YDQtdC70LrQsCDRgNC10LLQtdGA0YEiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzoxMjIzCittc2dpZCAiUmlnaHQiCittc2dzdHIgItC/0YDQsNCy0L4iCisKKyM6IFByb2dyYW1zL21pZGkuYzo2NAorbXNnaWQgIlJvY2sgT3JnYW4iCittc2dzdHIgItCg0L7Qui3QvtGA0LPQsNC9IgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6NTg1Cittc2dpZCAiU2F2ZSBvbiBFeGl0IgorbXNnc3RyICLQodC+0YXRgNCw0L3QuNGC0Ywg0L/RgNC4INCy0YvRhdC+0LTQtSIKKworIy4gImNhcCIgaGVyZSwgdXNlZCBkdXJpbmcgc3BlZWNoIG91dHB1dCwgaXMgc2hvcnQgZm9yICJjYXBpdGFsIi4KKyMuIEl0IGlzIHNwb2tlbiBqdXN0IGJlZm9yZSBhbiB1cHBlcmNhc2UgbGV0dGVyLCBlLmcuICJjYXAgQSIuCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6MTA0NgorbXNnaWQgIlNheSBDYXAiCittc2dzdHIgItCf0YDQvtCz0L7QstCw0YDQuNCy0LDRgtGMINC30LDQs9C70LDQstC90YPRjiDQsdGD0LrQstGDIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6MTA3MAorbXNnaWQgIlNheSBMaW5lIE1vZGUiCittc2dzdHIgItC/0YDQvtCz0L7QstCw0YDQuNCy0LDRgtGMINGA0LXQttC40Lwg0YHRgtGA0L7QutC4IgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6MTA1NworbXNnaWQgIlNheSBTcGFjZSIKK21zZ3N0ciAi0L/RgNC+0LPQvtCy0LDRgNC40LLQsNGC0Ywg0L/RgNC+0LHQtdC7IgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6NDYwCittc2dpZCAiU2NyZWVuIEN1cnNvciBDb2x1bW4iCittc2dzdHIgItCS0LXRgNGC0LjQutCw0LvRjNC90YvQuSDRjdC60YDQsNC90L3Ri9C5INC60YPRgNGB0L7RgCIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjQ1OQorbXNnaWQgIlNjcmVlbiBDdXJzb3IgQ29vcmRpbmF0ZXMiCittc2dzdHIgItCa0L7QvtGA0LTQuNC90LDRgtGLINGN0LrRgNCw0L3QvdC+0LPQviDQutGD0YDRgdC+0YDQsCIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjY4NworbXNnaWQgIlNjcmVlbiBDdXJzb3IgSW52aXNpYmxlIFRpbWUiCittc2dzdHIgItCy0YDQtdC80Y8g0YHQutGA0YvRgtC40Y8g0Y3QutGA0LDQvdC90L7Qs9C+INC60YPRgNGB0L7RgNCwIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6NDYxCittc2dpZCAiU2NyZWVuIEN1cnNvciBSb3ciCittc2dzdHIgItCT0L7RgNC40LfQvtC90YLQsNC70YzQvdGL0Lkg0Y3QutGA0LDQvdC90YvQuSDQutGD0YDRgdC+0YAiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzo2NjkKK21zZ2lkICJTY3JlZW4gQ3Vyc29yIFN0eWxlIgorbXNnc3RyICLQodGC0LjQu9GMINGN0LrRgNCw0L3QvdC+0LPQviDQutGD0YDRgdC+0YDQsCIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjY4MQorbXNnaWQgIlNjcmVlbiBDdXJzb3IgVmlzaWJsZSBUaW1lIgorbXNnc3RyICLQstGA0LXQvNGPINCy0LjQtNC40LzQvtGB0YLQuCDRjdC60YDQsNC90L3QvtCz0L4g0LrRg9GA0YHQvtGA0LAiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzo0NjIKK21zZ2lkICJTY3JlZW4gQ3Vyc29yIGFuZCBCcmFpbGxlIFdpbmRvdyBDb2x1bW4iCittc2dzdHIgItGN0LrRgNCw0L3QvdGL0Lkg0LrRg9GA0YHQvtGAINC4INC+0LrQvdC+INCR0YDQsNC50LvRjyDQv9C+INCy0LXRgNGC0LjQutCw0LvQuCIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjQ2MworbXNnaWQgIlNjcmVlbiBDdXJzb3IgYW5kIEJyYWlsbGUgV2luZG93IFJvdyIKK21zZ3N0ciAi0K3QutGA0LDQvdC90YvQuSDQutGD0YDRgdC+0YAg0Lgg0L7QutC90L4g0JHRgNCw0LnQu9GPINC/0L4g0LPQvtGA0LjQt9C+0L3RgtCw0LvQuCIKKworIzogUHJvZ3JhbXMvY29uZmlnLmM6MjI1MworbXNnaWQgIlNjcmVlbiBEcml2ZXIiCittc2dzdHIgItCt0LrRgNCw0L3QvdGL0Lkg0LTRgNCw0LnQstC10YAiCisKKyM6IFByb2dyYW1zL2xvZy5jOjE1OAorbXNnaWQgIlNjcmVlbiBEcml2ZXIgRXZlbnRzIgorbXNnc3RyICLQodC+0LHRi9GC0LjRjyDRjdC60YDQsNC90L3QvtCz0L4g0LTRgNCw0LnQstC10YDQsCIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjQ2NAorbXNnaWQgIlNjcmVlbiBOdW1iZXIiCittc2dzdHIgItCd0L7QvNC10YAg0Y3QutGA0LDQvdCwIgorCisjOiBQcm9ncmFtcy9jb25maWcuYzoyMjU5Cittc2dpZCAiU2NyZWVuIFBhcmFtZXRlciIKK21zZ3N0ciAi0J/QsNGA0LDQvNC10YLRgCDRjdC60YDQsNC90LAiCisKKyM6IFByb2dyYW1zL2NvbmZpZy5jOjU5NworIywgYy1mb3JtYXQKK21zZ2lkICJTY3JlZW4gZHJpdmVyIGNvZGUgKCVzLCAlcywgb3Igb25lIG9mIHslc30pLiIKK21zZ3N0ciAi0JrQvtC0INGN0LrRgNCw0L3QvdC+0LPQviDQtNGA0LDQudCy0LXRgNCwICglcywgJXMsINC40LvQuCDQvtC00LjQvSDQuNC3IHslc30pLiIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjc4MAorbXNnaWQgIlNjcm9sbC1hd2FyZSBDdXJzb3IgTmF2aWdhdGlvbiIKK21zZ3N0ciAi0JrRg9GA0YHQvtGA0L3QsNGPINC90LDQstC40LPQsNGG0LjRjyDRgSDRg9GH0ZHRgtC+0Lwg0L/RgNC+0LrRgNGD0YLQutC4IgorCisjOiBQcm9ncmFtcy9taWRpLmM6MTgxCittc2dpZCAiU2Vhc2hvcmUiCittc2dzdHIgItCc0L7RgNGB0LrQvtC1INC/0L7QsdC10YDQtdC20YzQtSIKKworIzogUHJvZ3JhbXMvY21kX21pc2NlbGxhbmVvdXMuYzo2NQorbXNnaWQgIlNlcHRlbWJlciIKK21zZ3N0ciAi0KHQtdC90YLRj9Cx0YDRjCIKKworIzogUHJvZ3JhbXMvbG9nLmM6MTI4Cittc2dpZCAiU2VyaWFsIEkvTyIKK21zZ3N0ciAi0KHQtdGA0LjQudC90L4g0LLQutC7L9Cy0YvQutC7IgorCisjOiBQcm9ncmFtcy9sb2cuYzoxMjIKK21zZ2lkICJTZXJ2ZXIgRXZlbnRzIgorbXNnc3RyICLQodC+0LHRi9GC0LjRjyDRgdC10YDQstC10YDQsCIKKworIzogUHJvZ3JhbXMvbWlkaS5jOjEzMAorbXNnaWQgIlNoYWt1aGFjaGkiCittc2dzdHIgItGB0Y/QutGD0YXQsNGC0LgiCisKKyM6IFByb2dyYW1zL21pZGkuYzoxNjMKK21zZ2lkICJTaGFtaXNlbiIKK21zZ3N0ciAi0YHRj9C80LjRgdC10L0iCisKKyM6IFByb2dyYW1zL21pZGkuYzoxNjgKK21zZ2lkICJTaGFuYWkiCittc2dzdHIgItGB0LDQvdCw0LgiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzo1OTgKK21zZ2lkICJTaG93IEFkdmFuY2VkIFN1Ym1lbnVzIgorbXNnc3RyICLQn9C+0LrQsNC30LDRgtGMINC00L7Qv9C+0LvQvdC40YLQtdC70YzQvdGL0LUg0L/QvtC00LzQtdC90Y4iCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzo2MDMKK21zZ2lkICJTaG93IEFsbCBJdGVtcyIKK21zZ3N0ciAi0J/QvtC60LDQt9Cw0YLRjCDQstGB0LUg0Y3Qu9C10LzQtdC90YLRiyIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjY5MworbXNnaWQgIlNob3cgQXR0cmlidXRlcyIKK21zZ3N0ciAi0J/QvtC60LDQt9Cw0YLRjCDQsNGC0YDQuNCx0YPRgtGLIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6NjY0Cittc2dpZCAiU2hvdyBTY3JlZW4gQ3Vyc29yIgorbXNnc3RyICLQn9C+0LrQsNC30LDRgtGMINGN0LrRgNCw0L3QvdGL0Lkg0LrRg9GA0YHQvtGAIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6MTE3NgorbXNnaWQgIlNob3cgU2Vjb25kcyIKK21zZ3N0ciAi0J/QvtC60LDQt9Cw0YLRjCDRgdC10LrRg9C90LTRiyIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjExMjIKK21zZ2lkICJTaG93IFNwZWVjaCBDdXJzb3IiCittc2dzdHIgItCf0L7QutCw0LfQsNGC0Ywg0YDQtdGH0LXQstC+0Lkg0LrRg9GA0YHQvtGAIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6NTkzCittc2dpZCAiU2hvdyBTdWJtZW51IFNpemVzIgorbXNnc3RyICLQn9C+0LrQsNC30LDRgtGMINC80LDRgdGI0YLQsNCx0Ysg0L/QvtC00LzQtdC90Y4iCisKKyMuIEV0aG5pYyBJbnN0cnVtZW50cworIzogUHJvZ3JhbXMvbWlkaS5jOjE2MQorbXNnaWQgIlNpdGFyIgorbXNnc3RyICLRgdC40YLQsNGAIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6NzQ3Cittc2dpZCAiU2tpcCBCbGFuayBCcmFpbGxlIFdpbmRvd3MiCittc2dzdHIgItCf0YDQvtC/0YPRgdGC0LjRgtGMINC/0YPRgdGC0YvQtSDQvtC60L3QsCDQkdGA0LDQudC70Y8iCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzo3NDEKK21zZ2lkICJTa2lwIElkZW50aWNhbCBMaW5lcyIKK21zZ3N0ciAi0J/RgNC+0L/Rg9GB0YLQuNGC0Ywg0L7QtNC40L3QsNC60L7QstGL0LUg0YHRgtGA0L7QutC4IgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6NzU4Cittc2dpZCAiU2tpcCBXaGljaCBCbGFuayBCcmFpbGxlIFdpbmRvd3MiCittc2dzdHIgItCf0YDQvtC/0YPRgdGC0LjRgtGMINC/0YPRgdGC0YvQtSDQvtC60L3QsCDQkdGA0LDQudC70Y8iCisKKyM6IFByb2dyYW1zL21pZGkuYzo4NAorbXNnaWQgIlNsYXAgQmFzcyAxIgorbXNnc3RyICLRgdC70Y3Qvy3QsdCw0YEgMSIKKworIzogUHJvZ3JhbXMvbWlkaS5jOjg1Cittc2dpZCAiU2xhcCBCYXNzIDIiCittc2dzdHIgItGB0LvRjdC/LdCx0LDRgSAyIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6MTIwNgorbXNnaWQgIlNsYXNoIgorbXNnc3RyICLQutC+0YHQsNGPINGH0LXRgNGC0LAiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzo3NjMKK21zZ2lkICJTbGlkaW5nIEJyYWlsbGUgV2luZG93IgorbXNnc3RyICLRgdC60L7Qu9GM0LfRj9GJ0LXQtSDQvtC60L3QviDQkdGA0LDQudC70Y8iCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzoxMDMxCittc2dpZCAiU29tZSIKK21zZ3N0ciAi0L3QtdC60L7RgtC+0YDRi9C1IgorCisjLiBSZWVkCisjOiBQcm9ncmFtcy9taWRpLmM6MTE2Cittc2dpZCAiU29wcmFubyBTYXgiCittc2dzdHIgItGB0LDQutGB0L7RhNC+0L0t0YHQvtC/0YDQsNC90L4iCisKKyM6IFByb2dyYW1zL21pZGkuYzozOQorbXNnaWQgIlNvdW5kIEVmZmVjdHMiCittc2dzdHIgItC30LLRg9C60L7QstGL0LUg0Y3RhNGE0LXQutGC0YsiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzoxMjQyCittc2dpZCAiU3BhY2UiCittc2dzdHIgItCf0YDQvtCx0LXQuyIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjExMTAKK21zZ2lkICJTcGVhayBDb21wbGV0ZWQgV29yZHMiCittc2dzdHIgItCf0YDQvtCz0L7QstCw0YDQuNCy0LDRgtGMINC30LDQutC+0L3Rh9C10L3QvdGL0LUg0YHQu9C+0LLQsCIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjEwOTgKK21zZ2lkICJTcGVhayBEZWxldGVkIENoYXJhY3RlcnMiCittc2dzdHIgItCf0YDQvtCz0L7QstCw0YDQuNCy0LDRgtGMINGD0LTQsNC70ZHQvdC90YvQtSDRgdC40LzQstC+0LvRiyIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjEwOTIKK21zZ2lkICJTcGVhayBJbnNlcnRlZCBDaGFyYWN0ZXJzIgorbXNnc3RyICLQn9GA0L7Qs9C+0LLQsNGA0LjQstCw0YLRjCDQstGB0YLQsNCy0LvQtdC90L3Ri9C1INGB0LjQvNCy0L7Qu9GLIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6MTExNgorbXNnaWQgIlNwZWFrIExpbmUgSW5kZW50IgorbXNnc3RyICLQn9GA0L7Qs9C+0LLQsNGA0LjQstCw0YLRjCDQvtGC0YHRgtGD0L8iCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzoxMTA0Cittc2dpZCAiU3BlYWsgUmVwbGFjZWQgQ2hhcmFjdGVycyIKK21zZ3N0ciAi0L/RgNC+0LPQvtCy0LDRgNC40LLQsNGC0Ywg0LfQsNC80LXQvdGR0L3QvdGL0LUg0YHQuNC80LLQvtC70YsiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzoxMDg2Cittc2dpZCAiU3BlYWsgU2VsZWN0ZWQgQ2hhcmFjdGVyIgorbXNnc3RyICLQv9GA0L7Qs9C+0LLQsNGA0LjQstCw0YLRjCDQstGL0LHRgNCw0L3QvdGL0Lkg0YHQuNC80LLQvtC7IgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6MTA4MAorbXNnaWQgIlNwZWFrIFNlbGVjdGVkIExpbmUiCittc2dzdHIgItC/0YDQvtCz0L7QstCw0YDQuNCy0LDRgtGMINCy0YvQsdGA0LDQvdC90YPRjiDRgdGC0YDQvtC60YMiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzoxMTQ1Cittc2dpZCAiU3BlZWNoIEN1cnNvciBJbnZpc2libGUgVGltZSIKK21zZ3N0ciAi0LLRgNC10LzRjyDRgdC60YDRi9GC0LjRjyDRgNC10YfQtdCy0L7Qs9C+INC60YPRgNGB0L7RgNCwIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6MTEyNworbXNnaWQgIlNwZWVjaCBDdXJzb3IgU3R5bGUiCittc2dzdHIgItGB0YLQuNC70Ywg0YDQtdGH0LXQstC+0LPQviDQutGD0YDRgdC+0YDQsCIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjExMzkKK21zZ2lkICJTcGVlY2ggQ3Vyc29yIFZpc2libGUgVGltZSIKK21zZ3N0ciAi0LLRgNC10LzRjyDQstC40LTQuNC80L7RgdGC0Lgg0YDQtdGH0LXQstC+0LPQviDQutGD0YDRgdC+0YDQsCIKKworIzogUHJvZ3JhbXMvY29uZmlnLmM6MjAyOAorbXNnaWQgIlNwZWVjaCBEcml2ZXIiCittc2dzdHIgItGA0LXRh9C10LLQvtC5INC00YDQsNC50LLQtdGAIgorCisjOiBQcm9ncmFtcy9sb2cuYzoxNTIKK21zZ2lkICJTcGVlY2ggRHJpdmVyIEV2ZW50cyIKK21zZ3N0ciAi0YHQvtCx0YvRgtC40Y8g0YDQtdGH0LXQstC+0LPQviDQtNGA0LDQudCy0LXRgNCwIgorCisjOiBQcm9ncmFtcy9sb2cuYzoxMTAKK21zZ2lkICJTcGVlY2ggRXZlbnRzIgorbXNnc3RyICLRgNC10YfQtdCy0YvQtSDRgdC+0LHRi9GC0LjRjyIKKworIy4gQ3JlYXRlIHRoZSBmaWxlIHN5c3RlbSBvYmplY3QgZm9yIHNwZWVjaCBpbnB1dC4KKyM6IFByb2dyYW1zL2NvbmZpZy5jOjI4NjcKK21zZ2lkICJTcGVlY2ggSW5wdXQiCittc2dzdHIgItGA0LXRh9C10LLQvtC5INCy0LLQvtC0IgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6MTAwNQorbXNnaWQgIlNwZWVjaCBPcHRpb25zIgorbXNnc3RyICLRgdCy0L7QudGB0YLQstCwINGA0LXRh9C4IgorCisjOiBQcm9ncmFtcy9jb25maWcuYzoyMDMxCittc2dpZCAiU3BlZWNoIFBhcmFtZXRlciIKK21zZ3N0ciAi0L/QsNGA0LDQvNC10YLRgCDRgNC10YfQuCIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjEwMjIKK21zZ2lkICJTcGVlY2ggUGl0Y2giCittc2dzdHIgItCy0YvRgdC+0YLQsCDRgtC+0L3QsCIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjEwMzUKK21zZ2lkICJTcGVlY2ggUHVuY3R1YXRpb24iCittc2dzdHIgItCg0LXRh9C10LLQsNGPINC/0YPQvdC60YLRg9Cw0YbQuNGPIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6MTAxNQorbXNnaWQgIlNwZWVjaCBSYXRlIgorbXNnc3RyICLQodC60L7RgNC+0YHRgtGMINGA0LXRh9C4IgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6MTA1MAorbXNnaWQgIlNwZWVjaCBVcHBlcmNhc2UgSW5kaWNhdG9yIgorbXNnc3RyICLRgNC10YfQtdCy0L7QuSDQuNC90LTQuNC60LDRgtC+0YAg0LfQsNCz0LvQsNCy0L3Ri9GFINCx0YPQutCyIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6MTAwOAorbXNnaWQgIlNwZWVjaCBWb2x1bWUiCittc2dzdHIgItCT0YDQvtC80LrQvtGB0YLRjCDRgNC10YfQuCIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjEwNjAKK21zZ2lkICJTcGVlY2ggV2hpdGVzcGFjZSBJbmRpY2F0b3IiCittc2dzdHIgItCg0LXRh9C10LLQvtC5INC40L3QtNC40LrQsNGC0L7RgCDQv9GA0L7QsdC10LvQsCIKKworIzogUHJvZ3JhbXMvY29uZmlnLmM6NTYyCisjLCBjLWZvcm1hdAorbXNnaWQgIlNwZWVjaCBkcml2ZXIgY29kZSAoJXMsICVzLCBvciBvbmUgb2YgeyVzfSkuIgorbXNnc3RyICLQmtC+0LQg0YDQtdGH0LXQstC+0LPQviDQtNGA0LDQudCy0LXRgNCwICglcywgJXMsINC40LvQuCDQvtC00LjQvSDQuNC3IHslc30pLiIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjEzOTIKK21zZ2lkICJTdGFuZGFyZCBFcnJvciBMb2cgTGV2ZWwiCittc2dzdHIgItCh0YLQsNC90LTQsNGA0YLQvdGL0Lkg0YHQv9C+0YHQvtCxICDQstC10LTQtdC90LjRjyDQttGD0YDQvdCw0LvQsCAg0L7RiNC40LHQvtC6IgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6ODE1Cittc2dpZCAiU3RhcnQgU2VsZWN0aW9uIHdpdGggUm91dGluZyBLZXkiCittc2dzdHIgItC90LDRh9Cw0YLRjCDQstGL0LTQtdC70LXQvdC40LUsINC40YHQv9C+0LvRjNC30YPRjyAg0LrQu9Cw0LLQuNGI0YMg0LzQsNGA0YjRgNGD0YLQuNC30LDRhtC40LgiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzo0NjUKK21zZ2lkICJTdGF0ZSBEb3RzIgorbXNnc3RyICLQt9Cw0YTQuNC60YHQuNGA0L7QstCw0YLRjCDRgtC+0YfQutC4IgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6NDY2Cittc2dpZCAiU3RhdGUgTGV0dGVyIgorbXNnc3RyICLQt9Cw0YTQuNC60YHQuNGA0L7QstCw0YLRjCDQsdGD0LrQstGDIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6MTIxNworbXNnaWQgIlN0YXR1cyBDZWxscyIKK21zZ3N0ciAi0Y/Rh9C10LnQutC4INGBINC40L3RhNC+0YDQvNCw0YbQuNC10Lkg0L4g0YHRgtCw0YLRg9GB0LUiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzoxMjMzCittc2dpZCAiU3RhdHVzIENvdW50IgorbXNnc3RyICLRgdGH0ZHRgtGH0LjQuiDRgdGC0LDRgtGD0YHQsCIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjQ3NAorbXNnaWQgIlN0YXR1cyBGaWVsZCIKK21zZ3N0ciAi0L7QsdC70LDRgdGC0Ywg0YHRgtCw0YLRg9GB0LAiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzoxMjI2Cittc2dpZCAiU3RhdHVzIFBvc2l0aW9uIgorbXNnc3RyICLQv9C+0LvQvtC20LXQvdC40LUg0YHRgtCw0YLRg9GB0LAiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzoxMjQ4Cittc2dpZCAiU3RhdHVzIFNlcGFyYXRvciIKK21zZ3N0ciAi0YDQsNC30LTQtdC70LjRgtC10LvRjCDRgdGC0LDRgtGD0YHQsCIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjEyNDQKK21zZ2lkICJTdGF0dXMgU2lkZSIKK21zZ3N0ciAi0LPRgNCw0L3QuNGG0LAg0YHRgtGA0L7QutC4INGB0YLQsNGC0YPRgdCwIgorCisjOiBQcm9ncmFtcy9taWRpLmM6MTcyCittc2dpZCAiU3RlZWwgRHJ1bXMiCittc2dzdHIgItGB0YLQsNC70YzQvdGL0LUg0LHQsNGA0LDQsdCw0L3RiyIKKworIzogUHJvZ3JhbXMvY29uZmlnLmM6MzYyCisjLCBjLWZvcm1hdAorbXNnaWQgIlN0b3AgYW4gZXhpc3RpbmcgaW5zdGFuY2Ugb2YgJXMsIGFuZCB0aGVuIGV4aXQuIgorbXNnc3RyICLQntGB0YLQsNC90L7QstC40YLRjCDRgtC10LrRg9GJ0LXQtSDQtNC10LnRgdGC0LLQuNC1INC/0L4gJXMg0Lgg0LLRi9C50YLQuC4iCisKKyMuIEVuc2VtYmxlCisjOiBQcm9ncmFtcy9taWRpLmM6OTgKK21zZ2lkICJTdHJpbmcgRW5zZW1ibGUgMSIKK21zZ3N0ciAi0KHRgtGA0YPQvdC90YvQuSDQsNC90YHQsNC80LHQu9GMIDEiCisKKyM6IFByb2dyYW1zL21pZGkuYzo5OQorbXNnaWQgIlN0cmluZyBFbnNlbWJsZSAyIgorbXNnc3RyICLQodGC0YDRg9C90L3Ri9C5INCw0L3RgdCw0LzQsdC70YwgMiIKKworIzogUHJvZ3JhbXMvbWlkaS5jOjI5Cittc2dpZCAiU3RyaW5ncyIKK21zZ3N0ciAi0KHRgtGA0YPQvdC90YvQtSDQuNC90YHRgtGA0YPQvNC10L3RgtGLIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6NjM1Cittc2dpZCAiU3VwZXJpbXBvc2UgRG90IDciCittc2dzdHIgItCd0LDQu9C+0LbQuNGC0Ywg0YLQvtGH0LrRgyA3INC/0L7QstC10YDRhSIKKworIzogUHJvZ3JhbXMvY29uZmlnLmM6NjQ4Cittc2dpZCAiU3VwcHJlc3Mgc3RhcnQtdXAgbWVzc2FnZXMuIgorbXNnc3RyICLQodC+0LrRgNCw0YLQuNGC0Ywg0YHRgtCw0YDRgtC+0LLRi9C1INGB0L7QvtCx0YnQtdC90LjRjyIKKworIzogUHJvZ3JhbXMvbWlkaS5jOjg2Cittc2dpZCAiU3ludGggQmFzcyAxIgorbXNnc3RyICLRgdC40L3RgtC10LfQsNGC0L7RgNC90YvQuSDQsdCw0YEgMSIKKworIzogUHJvZ3JhbXMvbWlkaS5jOjg3Cittc2dpZCAiU3ludGggQmFzcyAyIgorbXNnc3RyICLRgdC40L3RgtC10LfQsNGC0L7RgNC90YvQuSDQsdCw0YEgMiIKKworIzogUHJvZ3JhbXMvbWlkaS5jOjE3NgorbXNnaWQgIlN5bnRoIERydW0iCittc2dzdHIgItGB0LjQvdGC0LXQt9Cw0YLQvtGA0L3Ri9C5INCx0LDRgNCw0LHQsNC9IgorCisjOiBQcm9ncmFtcy9taWRpLmM6MzYKK21zZ2lkICJTeW50aCBGTSIKK21zZ3N0ciAi0YHQuNC90YLQtdC30LDRgtC+0YAgRk0iCisKKyM6IFByb2dyYW1zL21pZGkuYzozNAorbXNnaWQgIlN5bnRoIExlYWQiCittc2dzdHIgItGB0LjQvdGC0LXQt9Cw0YLQvtGA0L3Ri9C5INGB0LLQuNC90LXRhiIKKworIzogUHJvZ3JhbXMvbWlkaS5jOjM1Cittc2dpZCAiU3ludGggUGFkIgorbXNnc3RyICLRgdC40L3RgtC10LfQsNGC0L7RgNC90LDRjyDQt9Cw0YHQu9C+0L3QutCwIgorCisjOiBQcm9ncmFtcy9taWRpLmM6MTA0Cittc2dpZCAiU3ludGggVm9pY2UiCittc2dzdHIgItGB0LjQvdGC0LXQt9C40YDQvtCy0LDQvdC90YvQuSDQs9C+0LvQvtGBIgorCisjOiBQcm9ncmFtcy9taWRpLmM6MTEzCittc2dpZCAiU3ludGhCcmFzcyAxIgorbXNnc3RyICLRgdC40L3RgtC10LfQsNGC0L7RgNC90YvQtSDQtNGD0YXQvtCy0YvQtSDQuNC90YHRgtGA0YPQvNC10L3RgtGLIDEiCisKKyM6IFByb2dyYW1zL21pZGkuYzoxMTQKK21zZ2lkICJTeW50aEJyYXNzIDIiCittc2dzdHIgItGB0LjQvdGC0LXQt9Cw0YLQvtGA0L3Ri9C1INC00YPRhdC+0LLRi9C1INC40L3RgdGC0YDRg9C80LXQvdGC0YsgMiIKKworIzogUHJvZ3JhbXMvbWlkaS5jOjEwMAorbXNnaWQgIlN5bnRoU3RyaW5ncyAxIgorbXNnc3RyICLRgdC40L3RgtC10LfQsNGC0L7RgNC90YvQtSDRgdGC0YDRg9C90L3Ri9C1INC40L3RgdGC0YDRg9C80LXQvdGC0YsgMSIKKworIzogUHJvZ3JhbXMvbWlkaS5jOjEwMQorbXNnaWQgIlN5bnRoU3RyaW5ncyAyIgorbXNnc3RyICLRgdC40L3RgtC10LfQsNGC0L7RgNC90YvQtSDRgdGC0YDRg9C90L3Ri9C1INC40L3RgdGC0YDRg9C80LXQvdGC0YsgMiIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjEzODcKK21zZ2lkICJTeXN0ZW0gTG9nIExldmVsIgorbXNnc3RyICLRg9GA0L7QstC10L3RjCDQstC10LTQtdC90LjRjyDRgdC40YHRgtC10LzQvdC+0LPQviDQttGD0YDQvdCw0LvQsCIKKworIzogUHJvZ3JhbXMvY29uZmlnLmM6Mjc3NyBQcm9ncmFtcy9tZW51X3ByZWZzLmM6MTM2MQorbXNnaWQgIlRhYmxlcyBEaXJlY3RvcnkiCittc2dzdHIgItC60LDRgtCw0LvQvtCzINGC0LDQsdC70LjRhiIKKworIzogUHJvZ3JhbXMvbWlkaS5jOjE3NAorbXNnaWQgIlRhaWtvIERydW0iCittc2dzdHIgItCx0LDRgNCw0LHQsNC9INGC0LDQudC60L4iCisKKyM6IFByb2dyYW1zL21pZGkuYzo2OQorbXNnaWQgIlRhbmdvIEFjY29yZGlvbiIKK21zZ3N0ciAi0YLQsNC90LPQvi3QsNC60LrQvtGA0LTQtdC+0L0iCisKKyM6IFByb2dyYW1zL21pZGkuYzoxODMKK21zZ2lkICJUZWxlcGhvbmUgUmluZyIKK21zZ3N0ciAi0YLQtdC70LXRhNC+0L3QvdGL0Lkg0LfQstC+0L3QvtC6IgorCisjOiBQcm9ncmFtcy9taWRpLmM6MTE4Cittc2dpZCAiVGVub3IgU2F4IgorbXNnc3RyICLRgdCw0LrRgdC+0YTQvtC9LdGC0LXQvdC+0YAiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzo2NjEKK21zZ2lkICJUZXh0IEluZGljYXRvcnMiCittc2dzdHIgItC40L3QtNC40LrQsNGC0L7RgNGLINGC0LXQutGB0YLQsCIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjEyNDUKK21zZ2lkICJUZXh0IFNpZGUiCittc2dzdHIgItGB0YLRgNC+0LrQsCDRgtC10LrRgdGC0LAiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzo2MTkKK21zZ2lkICJUZXh0IFN0eWxlIgorbXNnc3RyICLRgdGC0LjQu9GMINGC0LXQutGB0YLQsCIKKworIzogUHJvZ3JhbXMvY29uZmlnLmM6Mjc5OCBQcm9ncmFtcy9tZW51X3ByZWZzLmM6MTI3MworbXNnaWQgIlRleHQgVGFibGUiCittc2dzdHIgItGC0LDQsdC70LjRhtCwINGC0LXQutGB0YLQvtCyIgorCisjOiBQcm9ncmFtcy9icmx0dHktY3RiLmM6NjkKK21zZ2lkICJUZXh0IHRhYmxlLiIKK21zZ3N0ciAi0YLQsNCx0LvQuNGG0LAg0YLQtdC60YHRgtC+0LIuIgorCisjOiBQcm9ncmFtcy9jb25maWcuYzozMDIKK21zZ2lkICJUaGUgdGV4dCB0byBiZSBzaG93biB3aGVuIHRoZSBicmFpbGxlIGRyaXZlciBzdGFydHMgYW5kIHRvIGJlIHNwb2tlbiB3aGVuIHRoZSBzcGVlY2ggZHJpdmVyIHN0YXJ0cy4iCittc2dzdHIgItGC0LXQutGB0YIsINCy0YvQstC+0LTQuNC80YvQuSDQv9GA0Lgg0LfQsNC/0YPRgdC60LUg0LTRgNCw0LnQstC10YDQsCDQkdGA0LDQudC70Y8g0Lgg0L/RgNC+0LjQt9C90L7RgdC40LzRi9C5INC/0YDQuCDQt9Cw0L/Rg9GB0LrQtSDRgNC10YfQtdCy0L7Qs9C+INC00YDQsNC50LLQtdGA0LAuIgorCisjOiBQcm9ncmFtcy9jb25maWcuYzozMDkKK21zZ2lkICJUaGUgdGV4dCB0byBiZSBzaG93biB3aGVuIHRoZSBicmFpbGxlIGRyaXZlciBzdG9wcy4iCittc2dzdHIgItGC0LXQutGB0YIsINCy0YvQstC+0LTQuNC80YvQuSDQv9GA0Lgg0L7RgdGC0LDQvdC+0LLQutC1INC00YDQsNC50LLQtdGA0LAg0JHRgNCw0LnQu9GPLiIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjQ2NworbXNnaWQgIlRpbWUiCittc2dzdHIgItCy0YDQtdC80Y8iCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzoxMTYxCittc2dpZCAiVGltZSBGb3JtYXQiCittc2dzdHIgItGE0L7RgNC80LDRgiDQstGA0LXQvNC10L3QuCIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjExNTMKK21zZ2lkICJUaW1lIFByZXNlbnRhdGlvbiIKK21zZ3N0ciAi0L/RgNC10LTRgdGC0LDQstC70LXQvdC40LUg0LLRgNC10LzQtdC90LgiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzoxMTcxCittc2dpZCAiVGltZSBTZXBhcmF0b3IiCittc2dzdHIgItGA0LDQt9C00LXQu9C40YLQtdC70Ywg0LLRgNC10LzQtdC90LgiCisKKyM6IFByb2dyYW1zL21pZGkuYzo5NgorbXNnaWQgIlRpbXBhbmkiCittc2dzdHIgItC70LjRgtCw0LLRgNGLIgorCisjLiBQZXJjdXNzaXZlIEluc3RydW1lbnRzCisjOiBQcm9ncmFtcy9taWRpLmM6MTcwCittc2dpZCAiVGlua2xlIEJlbGwiCittc2dzdHIgItC30LLQvtC90LrQuNC5INC60L7Qu9C+0LrQvtC70YzRh9C40LoiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzoxNDQxCittc2dpZCAiVG9vbHMiCittc2dzdHIgItC40L3RgdGC0YDRg9C80LXQvdGC0YsiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzo4OTIKK21zZ2lkICJUb3VjaCBOYXZpZ2F0aW9uIgorbXNnc3RyICLQltC10YHRgtC+0LLQsNGPINC90LDQstC40LPQsNGG0LjRjyAiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzo5MDYKK21zZ2lkICJUb3VjaCBTZW5zaXRpdml0eSIKK21zZ3N0ciAi0YfRg9Cy0YHRgtCy0LjRgtC10LvRjNC90L7RgdGC0Ywg0Log0LLRi9C/0L7Qu9C90LXQvdC40Y4g0LbQtdGB0YLQvtCyIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6ODA0Cittc2dpZCAiVHJhY2sgU2NyZWVuIFBvaW50ZXIiCittc2dzdHIgItC+0YLRgdC70LXQttC40LLQsNGC0Ywg0Y3QutGA0LDQvdC90YvQuSDRg9C60LDQt9Cw0YLQtdC70YwiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzo3OTgKK21zZ2lkICJUcmFjayBTY3JlZW4gU2Nyb2xsIgorbXNnc3RyICLQvtGC0YHQu9C10LbQuNCy0LDRgtGMINC/0YDQvtC60YDRg9GC0LrRgyDRjdC60YDQsNC90LAiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzo4MzAKK21zZ2lkICJUcmFuc2xhdGVkIHZpYSBUZXh0IFRhYmxlIgorbXNnc3RyICLQv9C10YDQtdCy0LXQtNC10L3QviDQv9C+0YHRgNC10LTRgdGC0LLQvtC8INGC0LDQsdC70LjRhtGLINGC0LXQutGB0YLQvtCyIgorCisjOiBQcm9ncmFtcy9taWRpLmM6OTMKK21zZ2lkICJUcmVtb2xvIFN0cmluZ3MiCittc2dzdHIgItC00YDQvtC20LDQvdC40LUg0YHRgtGA0YPQvSIKKworIzogUHJvZ3JhbXMvbWlkaS5jOjEwOAorbXNnaWQgIlRyb21ib25lIgorbXNnc3RyICLRgtGA0L7QvNCx0L7QvSIKKworIy4gQnJhc3MKKyM6IFByb2dyYW1zL21pZGkuYzoxMDcKK21zZ2lkICJUcnVtcGV0IgorbXNnc3RyICLRgtGA0YPQsdCwIgorCisjOiBQcm9ncmFtcy9taWRpLmM6MTA5Cittc2dpZCAiVHViYSIKK21zZ3N0ciAi0YLRg9Cx0LAiCisKKyM6IFByb2dyYW1zL21pZGkuYzo1OQorbXNnaWQgIlR1YnVsYXIgQmVsbHMiCittc2dzdHIgItGC0YDRg9Cx0YfQsNGC0YvQtSDQutC+0LvQvtC60L7Qu9CwIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6OTUxCittc2dpZCAiVHVuZSBEZXZpY2UiCittc2dzdHIgItC90LDRgdGC0YDQvtC40YLRjCDRg9GB0YLRgNC+0LnRgdGC0LLQviIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjgzNAorbXNnaWQgIlR5cGluZyBNb2RlIgorbXNnc3RyICLRgNC10LbQuNC8INC90LDQsdC+0YDQsCIKKworIzogUHJvZ3JhbXMvbG9nLmM6MTM0Cittc2dpZCAiVVNCIEkvTyIKK21zZ3N0ciAiVVNCINCy0LrQuy/QstGL0LrQuyIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjU3NQorbXNnaWQgIlVuZGVybGluZSIKK21zZ3N0ciAi0L/QvtC00YfRkdGA0LrQvdGD0YLRi9C5IgorCisjOiBQcm9ncmFtcy9hbGVydC5jOjEwMgorbXNnaWQgIlVuZnJvemVuIgorbXNnc3RyICLQstC+0LfQvtCx0L3QvtCy0LvQtdC90L4iCisKKyM6IFByb2dyYW1zL2NvbmZpZy5jOjI3NzQgUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjEzNDEKK21zZ2lkICJVcGRhdGFibGUgRGlyZWN0b3J5IgorbXNnc3RyICLQntCx0L3QvtCy0LvRj9C10LzRi9C5INC60LDRgtCw0LvQvtCzIgorCisjOiBQcm9ncmFtcy9sb2cuYzoxMDQKK21zZ2lkICJVcGRhdGUgRXZlbnRzIgorbXNnc3RyICLQntCx0L3QvtCy0LjRgtGMINGB0L7QsdGL0YLQuNGPIgorCisjOiBQcm9ncmFtcy9vcHRpb25zLmM6MTUxCittc2dpZCAiVXNhZ2UiCittc2dzdHIgItCY0YHQv9C+0LvRjNC30L7QstCw0L3QuNC1IgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6NjM0Cittc2dpZCAiVXNlIENhcGl0YWwgU2lnbiIKK21zZ3N0ciAi0LjRgdC/0L7Qu9GM0LfQvtCy0LDRgtGMINC30L3QsNC6INC30LDQs9C70LDQstC90L7QuSDQsdGD0LrQstGLIgorCisjOiBQcm9ncmFtcy9taWRpLmM6NTYKK21zZ2lkICJWaWJyYXBob25lIgorbXNnc3RyICLQktC40LHRgNCw0YTQvtC9IgorCisjOiBQcm9ncmFtcy9taWRpLmM6OTAKK21zZ2lkICJWaW9sYSIKK21zZ3N0ciAi0LLQuNC+0LvQsCIKKworIy4gU3RyaW5ncworIzogUHJvZ3JhbXMvbWlkaS5jOjg5Cittc2dpZCAiVmlvbGluIgorbXNnc3RyICLRgdC60YDQuNC/0LrQsCIKKworIzogUHJvZ3JhbXMvbWlkaS5jOjEwMworbXNnaWQgIlZvaWNlIE9vaHMiCittc2dzdHIgItC30LLRg9C60LggXCLQvtGFIVwiIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6MTM3NworbXNnaWQgIldhcm5pbmciCittc2dzdHIgItC/0YDQtdC00YPQv9GA0LXQttC00LXQvdC40LUiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzoxMzIxCittc2dpZCAiV2ViIFNpdGUiCittc2dzdHIgItCy0LXQsdGB0LDQudGCIgorCisjOiBQcm9ncmFtcy9taWRpLmM6MTMxCittc2dpZCAiV2hpc3RsZSIKK21zZ3N0ciAi0YHQstC40YHRgiIKKworIzogUHJvZ3JhbXMvbWlkaS5jOjE3MworbXNnaWQgIldvb2RibG9jayIKK21zZ3N0ciAi0LrQvtC70L7QtNCwIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6NzM3Cittc2dpZCAiV29yZCBXcmFwIgorbXNnc3RyICLQv9C10YDQtdC90L7RgSDRgdC70L7QsiIKKworIzogUHJvZ3JhbXMvY29uZmlnLmM6Mjc0OAorbXNnaWQgIldvcmtpbmcgRGlyZWN0b3J5IgorbXNnc3RyICLQsNC60YLQuNCy0L3Ri9C5INC60LDRgtCw0LvQvtCzIgorCisjOiBQcm9ncmFtcy9jb25maWcuYzoyNzc1IFByb2dyYW1zL21lbnVfcHJlZnMuYzoxMzUxCittc2dpZCAiV3JpdGFibGUgRGlyZWN0b3J5IgorbXNnc3RyICLQutCw0YLQsNC70L7QsyDRgSDQtNC+0YHRgtGD0L/QvtC8INC00LvRjyDQt9Cw0L/QuNGB0LgiCisKKyM6IFByb2dyYW1zL3hicmxhcGkuYzoxMTgKK21zZ2lkICJXcml0ZSBkZWJ1Z2dpbmcgb3V0cHV0IHRvIHN0ZG91dCIKK21zZ3N0ciAi0JfQsNC/0LjRgdCw0YLRjCDRgNC10LfRg9C70YzRgtCw0YIg0L7RgtC70LDQtNC60Lgg0LIgc3Rkb3V0IgorCisjOiBQcm9ncmFtcy9jb25maWcuYzo2NzEKK21zZ2lkICJXcml0ZSB0aGUgc3RhcnQtdXAgbG9ncywgYW5kIHRoZW4gZXhpdC4iCittc2dzdHIgItCX0LDQv9C40YHQsNGC0Ywg0YHRgtCw0YDRgtC+0LLRi9C1INGB0L7QvtCx0YnQtdC90LjRjyDQsiDQttGD0YDQvdCw0Lsg0Lgg0LLRi9C50YLQuC4iCisKKyM6IFByb2dyYW1zL3hicmxhcGkuYzoxMDAKK21zZ2lkICJYIGRpc3BsYXkgdG8gY29ubmVjdCB0byIKK21zZ3N0ciAiWCDQtNC40YHQv9C70LXQuSDQtNC70Y8g0L/QvtC00LrQu9GO0YfQtdC90LjRjyIKKworIzogUHJvZ3JhbXMvcGdtcHJpdnNfbGludXguYzoxOTI1Cittc2dpZCAiWERHIHJ1bnRpbWUgZGlyZWN0b3J5IGFjY2VzcyBwcm9ibGVtIgorbXNnc3RyICLQv9GA0L7QsdC70LXQvNCwINC00L7RgdGC0YPQv9CwINC6INC60LDRgtCw0LvQvtCz0YMg0LLRi9C/0L7Qu9C90LXQvdC40Y8gWERHIgorCisjOiBQcm9ncmFtcy9wZ21wcml2c19saW51eC5jOjE5MDcKK21zZ2lkICJYREcgcnVudGltZSBkaXJlY3RvcnkgY3JlYXRlZCIKK21zZ3N0ciAi0LrQsNGC0LDQu9C+0LMg0LLRi9C/0L7Qu9C90LXQvdC40Y8gWERHINGB0L7Qt9C00LDQvSIKKworIzogUHJvZ3JhbXMvcGdtcHJpdnNfbGludXguYzoxOTAyCittc2dpZCAiWERHIHJ1bnRpbWUgZGlyZWN0b3J5IGV4aXN0cyIKK21zZ3N0ciAi0LrQsNGC0LDQu9C+0LMg0LLRi9C/0L7Qu9C90LXQvdC40Y8gWERHINGD0LbQtSDRgdGD0YnQtdGB0YLQstGD0LXRgiIKKworIzogUHJvZ3JhbXMveGJybGFwaS5jOjc4NgorbXNnaWQgIlhGcmVlKHdtX25hbWUpIGZvciBjaGFuZ2UiCittc2dzdHIgIlhGcmVlKHdtX25hbWUpINC00LvRjyDQuNC30LzQtdC90LXQvdC40Y8iCisKKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjEyNTkKK21zZ2lkICJYVCAoc2V0IDEpIGtleWJvYXJkIHNjYW4gY29kZSIKK21zZ3N0ciAi0LrQu9Cw0LLQuNCw0YLRg9GA0L3Ri9C5INGB0LrQsNC9LdC60L7QtCBYVCAoc2V0IDEpIgorCisjOiBQcm9ncmFtcy9taWRpLmM6NTgKK21zZ2lkICJYeWxvcGhvbmUiCittc2dzdHIgItC60YHQuNC70L7RhNC+0L0iCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzoxMTkzCittc2dpZCAiWWVhciBNb250aCBEYXkiCittc2dzdHIgItCz0L7QtCDQvNC10YHRj9GGINC00LXQvdGMIgorCisjOiBQcm9ncmFtcy9tZW51LmM6NDUwCittc2dpZCAiWWVzIgorbXNnc3RyICLQlNCwIgorCisjOiBQcm9ncmFtcy94YnJsYXBpLmM6ODQKK21zZ2lkICJbaG9zdF1bOnBvcnRdIgorbXNnc3RyICJb0YXQvtGB0YJdWzrQv9C+0YDRgl0iCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzo1NzYKK21zZ2lkICJhbGwgZG90cyIKK21zZ3N0ciAi0LLRgdC1INGC0L7Rh9C60LgiCisKKyM6IFByb2dyYW1zL2NtZF9taXNjZWxsYW5lb3VzLmM6MTIxCittc2dpZCAiYW5kIgorbXNnc3RyICLQuCIKKworIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6MTE0MgorbXNnaWQgImFwcGVuZCBjaGFyYWN0ZXJzIHRvIGNsaXBib2FyZCIKK21zZ3N0ciAi0J/RgNC40YHQvtC10LTQuNC90LjRgtGMINGB0LjQvNCy0L7Qu9GLINC6INCx0YPRhNC10YDRgyDQvtCx0LzQtdC90LAiCisKKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjEwMzMKK21zZ2lkICJhcHBlbmQgdG8gY2xpcGJvYXJkIGZyb20gY2hhcmFjdGVyIgorbXNnc3RyICLQv9GA0LjRgdC+0LXQtNC40L3QuNGC0Ywg0YHQvtC00LXRgNC20LjQvNC+0LUg0YHQuNC80LLQvtC70LAg0Log0LHRg9GE0LXRgNGDINC+0LHQvNC10L3QsCIKKworIzogUHJvZ3JhbXMvY21kLmM6MjkwCittc2dpZCAiYXQgY3Vyc29yIgorbXNnc3RyICLQn9C+0LQg0LrRg9GA0YHQvtGA0L7QvCIKKworIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6MTMwMQorbXNnaWQgImJhY2tzcGFjZSBrZXkiCittc2dzdHIgItCa0LvQsNCy0LjRiNCwINCf0YDQvtCx0LXQuyIKKworIzogRHJpdmVycy9CcmFpbGxlL0JhdW0vYnJhaWxsZS5jOjExMTAgRHJpdmVycy9CcmFpbGxlL1RTSS9icmFpbGxlLmM6ODY5Cittc2dpZCAiYmF0dGVyeSBsb3ciCittc2dzdHIgItCd0LjQt9C60LjQuSDQt9Cw0YDRj9C0INCx0LDRgtCw0YDQtdC4IgorCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDoxMjIyCittc2dpZCAiYmluZCB0byBzcGVjaWZpYyB2aXJ0dWFsIHRlcm1pbmFsIgorbXNnc3RyICLRgdCy0Y/Qt9Cw0YLRjCDRgSDQstGL0LHRgNCw0L3QvdGL0Lwg0LLQuNGA0YLRg9Cw0LvRjNC90YvQvCDRgtC10YDQvNC40L3QsNC70L7QvCIKKworIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6ODM1Cittc2dpZCAiYmluZCB0byB0aGUgbmV4dCB2aXJ0dWFsIHRlcm1pbmFsIgorbXNnc3RyICLRgdCy0Y/Qt9Cw0YLRjCDRgdC+INGB0LvQtdC00YPRjtGJ0LjQvCDQstC40YDRgtGD0LDQu9GM0L3Ri9C8INGC0LXRgNC80LjQvdCw0LvQvtC8IgorCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDo4MjkKK21zZ2lkICJiaW5kIHRvIHRoZSBwcmV2aW91cyB2aXJ0dWFsIHRlcm1pbmFsIgorbXNnc3RyICLQodCy0Y/Qt9Cw0YLRjCDRgSDQv9GA0LXQtNGL0LTRg9GJ0LjQvCDQstC40YDRgtGD0LDQu9GM0L3Ri9C8INGC0LXRgNC80LjQvdCw0LvQvtC8IgorCisjLgorIzogUHJvZ3JhbXMvY21kX3V0aWxzLmM6MTQ0Cittc2dpZCAiYmxhY2siCittc2dzdHIgItGH0ZHRgNC90YvQuSIKKworIzogUHJvZ3JhbXMvY29yZS5jOjExMjAKK21zZ2lkICJibGFuayBsaW5lIgorbXNnc3RyICLQv9GD0YHRgtCw0Y8g0YHRgtGA0L7QutCwIgorCisjOiBQcm9ncmFtcy9jbWRfdXRpbHMuYzoxNjgKK21zZ2lkICJibGluayIKK21zZ3N0ciAi0LzQuNCz0LDQvdC40LUiCisKKyMuIEIKKyM6IFByb2dyYW1zL2NtZF91dGlscy5jOjE0NQorbXNnaWQgImJsdWUiCittc2dzdHIgItGB0LjQvdC40LkiCisKKyM6IFByb2dyYW1zL2NvbmZpZy5jOjI4MzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiYnJhaWxsZSBkZXZpY2Ugbm90IHNwZWNpZmllZCIKK21zZ3N0ciAi0YPRgdGC0YDQvtC50YHRgtCy0L4g0JHRgNCw0LnQu9GPINC90LUg0L7Qv9GA0LXQtNC10LvQtdC90L4iCisKKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjU0NAorbXNnaWQgImJyYWlsbGUgZGlzcGxheSB0ZW1wb3JhcmlseSB1bmF2YWlsYWJsZSIKK21zZ3N0ciAi0JTQuNGB0L/Qu9C10Lkg0JHRgNCw0LnQu9GPINCy0YDQtdC80LXQvdC90L4g0L3QtdC00L7RgdGC0YPQv9C10L0iCisKKyM6IFByb2dyYW1zL2NvbmZpZy5jOjE1MzgKK21zZ2lkICJicmFpbGxlIGRyaXZlciBpbml0aWFsaXphdGlvbiBmYWlsZWQiCittc2dzdHIgItCe0YjQuNCx0LrQsCDQuNC90LjRhtC40LDQu9C40LfQsNGG0LjQuCDQtNGA0LDQudCy0LXRgNCwINCR0YDQsNC50LvRjyIKKworIzogUHJvZ3JhbXMvY29uZmlnLmM6MTYxNworbXNnaWQgImJyYWlsbGUgZHJpdmVyIG5vdCBsb2FkYWJsZSIKK21zZ3N0ciAi0JTRgNCw0LnQstC10YAg0JHRgNCw0LnQu9GPINC90LXQtNC+0YHRgtGD0L/QtdC9INC00LvRjyDQt9Cw0LPRgNGD0LfQutC4IgorCisjOiBQcm9ncmFtcy9jb25maWcuYzoxODc3Cittc2dpZCAiYnJhaWxsZSBkcml2ZXIgcmVzdGFydGluZyIKK21zZ3N0ciAi0LTRgNCw0LnQstC10YAg0JHRgNCw0LnQu9GPINC/0LXRgNC10LfQsNC/0YPRgdC60LDQtdGC0YHRjyIKKworIzogUHJvZ3JhbXMvY21kX21pc2NlbGxhbmVvdXMuYzoxNzgKK21zZ2lkICJicmFpbGxlIGRyaXZlciBzdG9wcGVkIgorbXNnc3RyICLQlNGA0LDQudCy0LXRgCDQkdGA0LDQudC70Y8g0L7RgdGC0LDQvdC+0LLQu9C10L0iCisKKyM6IERyaXZlcnMvU2NyZWVuL0FuZHJvaWQvc2NyZWVuLmM6MTg5Cittc2dpZCAiYnJhaWxsZSByZWxlYXNlZCIKK21zZ3N0ciAi0JHRgNCw0LnQu9GMINC30LDQv9GD0YnQtdC9IgorCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDoxMDE5Cittc2dpZCAiYnJpbmcgc2NyZWVuIGN1cnNvciB0byBjaGFyYWN0ZXIiCittc2dzdHIgItCf0YDQuNCy0LXRgdGC0Lgg0Y3QutGA0LDQvdC90YvQuSDQutGD0YDRgdC+0YAg0Log0YHQuNC80LLQvtC70YMiCisKKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjUyMAorbXNnaWQgImJyaW5nIHNjcmVlbiBjdXJzb3IgdG8gY3VycmVudCBsaW5lIgorbXNnc3RyICLQn9GA0LjQstC10YHRgtC4INGN0LrRgNCw0L3QvdGL0Lkg0LrRg9GA0YHQvtGAINC6INGC0LXQutGD0YnQtdC5INGB0YLRgNC+0LrQtSIKKworIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6MTE5MworbXNnaWQgImJyaW5nIHNjcmVlbiBjdXJzb3IgdG8gbGluZSIKK21zZ3N0ciAi0J/RgNC40LLQtdGB0YLQuCDRjdC60YDQsNC90L3Ri9C5INC60YPRgNGB0L7RgCDQuiDRgdGC0YDQvtC60LUiCisKKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjczMAorbXNnaWQgImJyaW5nIHNjcmVlbiBjdXJzb3IgdG8gc3BlZWNoIGN1cnNvciIKK21zZ3N0ciAi0L/RgNC40LLQtdGB0YLQuCDRjdC60YDQsNC90L3Ri9C5INC60YPRgNGB0L7RgCDQuiDRgNC10YfQtdCy0L7QvNGDINC60YPRgNGB0L7RgNGDIgorCisjLiBSRworIzogUHJvZ3JhbXMvY21kX3V0aWxzLmM6MTUwCittc2dpZCAiYnJvd24iCittc2dzdHIgItC60L7RgNC40YfQvdC10LLRi9C5IgorCisjOiBEcml2ZXJzL1NjcmVlbi9MaW51eC9zY3JlZW4uYzoxNDMyCittc2dpZCAiY2FuJ3QgZ2V0IGNvbnNvbGUgc3RhdGUiCittc2dzdHIgItCd0LXQstC+0LfQvNC+0LbQvdC+INC+0L/RgNC10LTQtdC70LjRgtGMINGB0L7RgdGC0L7Rj9C90LjQtSDQv9Cw0L3QtdC70Lgg0YPQv9GA0LDQstC70LXQvdC40Y8iCisKKyM6IERyaXZlcnMvU2NyZWVuL0xpbnV4L3NjcmVlbi5jOjE1MTAKK21zZ2lkICJjYW4ndCBvcGVuIGNvbnNvbGUiCittc2dzdHIgItCd0LXQstC+0LfQvNC+0LbQvdC+INC+0YLQutGA0YvRgtGMINC/0LDQvdC10LvRjCDRg9C/0YDQsNCy0LvQtdC90LjRjyIKKworIzogRHJpdmVycy9TY3JlZW4vTGludXgvc2NyZWVuLmM6MTU1NgorbXNnaWQgImNhbid0IHJlYWQgc2NyZWVuIGNvbnRlbnQiCittc2dzdHIgItCd0LXQstC+0LfQvNC+0LbQvdC+INC/0YDQvtGH0LjRgtCw0YLRjCDRgdC+0LTQtdGA0LbQuNC80L7QtSDRjdC60YDQsNC90LAiCisKKyM6IERyaXZlcnMvU2NyZWVuL0xpbnV4L3NjcmVlbi5jOjE2MDEKK21zZ2lkICJjYW4ndCByZWFkIHNjcmVlbiBoZWFkZXIiCittc2dzdHIgItCd0LXQstC+0LfQvNC+0LbQvdC+INC/0YDQvtGH0LjRgtCw0YLRjCDQt9Cw0LPQvtC70L7QstC+0Log0Y3QutGA0LDQvdCwIgorCisjOiBQcm9ncmFtcy9hdGJfdHJhbnNsYXRlLmM6NzAKK21zZ2lkICJjYW5ub3QgY29tcGlsZSBhdHRyaWJ1dGVzIHRhYmxlIgorbXNnc3RyICLQndC10LLQvtC30LzQvtC20L3QviDRgdC60L7QvNC/0LjQu9C40YDQvtCy0LDRgtGMINGC0LDQsdC70LjRhtGDINCw0YLRgNC40LHRg9GC0L7QsiIKKworIzogUHJvZ3JhbXMvY3RiX3RyYW5zbGF0ZS5jOjM2NQorbXNnaWQgImNhbm5vdCBjb21waWxlIGNvbnRyYWN0aW9uIHRhYmxlIgorbXNnc3RyICLQndC10LLQvtC30LzQvtC20L3QviDRgdC60L7QvNC/0LjQu9C40YDQvtCy0LDRgtGMINGC0LDQsdC70LjRhtGDINGB0L7QutGA0LDRidC10L3QuNC5IgorCisjOiBQcm9ncmFtcy9jb25maWcuYzoxNTIxCittc2dpZCAiY2Fubm90IGNvbXBpbGUga2V5IHRhYmxlIgorbXNnc3RyICLQndC10LLQvtC30LzQvtC20L3QviDRgdC60L7QvNC/0LjQu9C40YDQvtCy0LDRgtGMINGC0LDQsdC70LjRhtGDINC60LvQsNCy0LjRiCIKKworIzogUHJvZ3JhbXMvY29uZmlnLmM6MTA5OAorbXNnaWQgImNhbm5vdCBjb21waWxlIGtleWJvYXJkIHRhYmxlIgorbXNnc3RyICLQndC10LLQvtC30LzQvtC20L3QviDRgdC60L7QvNC/0LjQu9C40YDQvtCy0LDRgtGMINC60LvQsNCy0LjQsNGC0YPRgNC90YPRjiDRgtCw0LHQu9C40YbRgyIKKworIzogUHJvZ3JhbXMvdHRiX3RyYW5zbGF0ZS5jOjI1NgorbXNnaWQgImNhbm5vdCBjb21waWxlIHRleHQgdGFibGUiCittc2dzdHIgItCd0LXQstC+0LfQvNC+0LbQvdC+INGB0LrQvtC80L/QuNC70LjRgNC+0LLQsNGC0Ywg0YLQsNCx0LvQuNGG0YMg0YLQtdC60YHRgtC+0LIiCisKKyMuIFRoaXMgaXMgdGhlIGZpcnN0IGF0dGVtcHQgdG8gY29ubmVjdCB0byBCUkxUVFksIGFuZCBpdCBmYWlsZWQuCisjLiAqIFJldHVybiB0aGUgZXJyb3IgaW1tZWRpYXRlbHkgdG8gdGhlIHVzZXIsIHRvIHByb3ZpZGUgZmVlZGJhY2sgdG8gdXNlcnMKKyMuICogcnVubmluZyB4YnJsYXBpIGJ5IGhhbmQsIGJ1dCBub3QgZmlsbCBsb2dzLCBlYXQgYmF0dGVyeSwgc3BhbQorIy4gKiAxMjcuMC4wLjEgd2l0aCByZWNvbm5lY3Rpb24gYXR0ZW1wdHMuCisjLgorIzogUHJvZ3JhbXMveGJybGFwaS5jOjIwNAorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgY29ubmVjdCB0byBicmFpbGxlIGRldmljZXMgZGFlbW9uIGJybHR0eSBhdCAlc1xuIgorbXNnc3RyICLQvdC1INC80L7Qs9GDINC/0L7QtNC60LvRjtGH0LjRgtGM0YHRjyDQuiDRg9GB0YLRgNC+0LnRgdGC0LLQsNC8INCR0YDQsNC50LvRjyBkYWVtb24gYnJsdHR5INCyINGC0LXRh9C10L3QuNC1ICVzXG4iCisKKyM6IFByb2dyYW1zL3hicmxhcGkuYzo2NTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGNvbm5lY3QgdG8gZGlzcGxheSAlc1xuIgorbXNnc3RyICLQndC10LLQvtC30LzQvtC20L3QviAg0L/QvtC00LrQu9GO0YfQuNGC0YzRgdGPINC6INC00LjRgdC/0LvQtdGOICVzXG4iCisKKyM6IFByb2dyYW1zL2ZpbGUuYzozNTAKK21zZ2lkICJjYW5ub3QgY3JlYXRlIGRpcmVjdG9yeSIKK21zZ3N0ciAi0JrQsNGC0LDQu9C+0LMg0L3QtSDQvNC+0LbQtdGCINCx0YvRgtGMINGB0L7Qt9C00LDQvSIKKworIzogUHJvZ3JhbXMvcHJvZ3JhbS5jOjE2MgorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgZGV0ZXJtaW5lIHByb2dyYW0gZGlyZWN0b3J5IgorbXNnc3RyICLQmtCw0YLQsNC70L7QsyDQv9GA0L7Qs9GA0LDQvNC8INC90LUg0L7QsdC90LDRgNGD0LbQtdC9IgorCisjOiBQcm9ncmFtcy9jb25maWcuYzoyNzUxIFByb2dyYW1zL21lbnUuYzo1NDQKK21zZ2lkICJjYW5ub3QgZGV0ZXJtaW5lIHdvcmtpbmcgZGlyZWN0b3J5IgorbXNnc3RyICLQkNC60YLQuNCy0L3Ri9C5INC60LDRgtCw0LvQvtCzINC90LUg0L7QsdC90LDRgNGD0LbQtdC9IgorCisjOiBQcm9ncmFtcy9zeXN0ZW1fd2luZG93cy5jOjYwCittc2dpZCAiY2Fubm90IGZpbmQgcHJvY2VkdXJlIgorbXNnc3RyICLQktGL0L/QvtC70L3Rj9C10LzQvtC1INC00LXQudGB0YLQstC40LUg0L3QtSDQvtCx0L3QsNGA0YPQttC10L3QviIKKworIzogUHJvZ3JhbXMvcHJvZ3JhbS5jOjE3MAorbXNnaWQgImNhbm5vdCBmaXggaW5zdGFsbCBwYXRoIgorbXNnc3RyICLQvdC1INC80L7Qs9GDINGB0LrQvtGA0YDQtdC60YLQuNGA0L7QstCw0YLRjCDQv9GD0YLRjCDRg9GB0YLQsNC90L7QstC60LgiCisKKyM6IFByb2dyYW1zL3hicmxhcGkuYzoyNTkKK21zZ2lkICJjYW5ub3QgZ2V0IHR0eVxuIgorbXNnc3RyICLQvdC1INC80L7Qs9GDINC/0L7Qu9GD0YfQuNGC0YwgdHR5XG4iCisKKyM6IFByb2dyYW1zL3hicmxhcGkuYzoyNjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGdldCB0dHkgJWRcbiIKK21zZ3N0ciAi0L3QtSDQvNC+0LPRgyDQv9C+0LvRg9GH0LjRgtGMIHR0eSAlZFxuIgorCisjOiBQcm9ncmFtcy9maWxlLmM6NDg3Cittc2dpZCAiY2Fubm90IGdldCB3b3JraW5nIGRpcmVjdG9yeSIKK21zZ3N0ciAi0L3QtSDQvNC+0LPRgyDQv9C+0LvRg9GH0LjRgtGMINCw0LrRgtC40LLQvdGL0Lkg0LrQsNGC0LDQu9C+0LMiCisKKyM6IFByb2dyYW1zL3hicmxhcGkuYzo3MDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGdyYWIgd2luZG93cyBvbiBzY3JlZW4gJWRcbiIKK21zZ3N0ciAi0L3QtSDQvNC+0LPRgyDQt9Cw0YXQstCw0YLQuNGC0Ywg0L7QutC90LAg0L3QsCDRjdC60YDQsNC90LUlZFxuIgorCisjOiBQcm9ncmFtcy94YnJsYXBpLmM6MjcyCittc2dpZCAiY2Fubm90IGlnbm9yZSBrZXlzXG4iCittc2dzdHIgItC90LUg0LzQvtCz0YMg0L/RgNC+0LjQs9C90L7RgNC40YDQvtCy0LDRgtGMINC60LvQsNCy0LjRiNC4XG4iCisKKyM6IFByb2dyYW1zL2F0Yl90cmFuc2xhdGUuYzo5MAorbXNnaWQgImNhbm5vdCBsb2FkIGF0dHJpYnV0ZXMgdGFibGUiCittc2dzdHIgItC90LUg0LzQvtCz0YMg0LfQsNCz0YDRg9C30LjRgtGMINGC0LDQsdC70LjRhtGDINCw0YLRgNC40LHRg9GC0L7QsiIKKworIzogUHJvZ3JhbXMvc3lzdGVtX3dpbmRvd3MuYzo1MworbXNnaWQgImNhbm5vdCBsb2FkIGxpYnJhcnkiCittc2dzdHIgItC90LUg0LzQvtCz0YMg0LfQsNCz0YDRg9C30LjRgtGMINCx0LjQsdC70LjQvtGC0LXQutGDIgorCisjOiBQcm9ncmFtcy90dGJfdHJhbnNsYXRlLmM6Mjc2Cittc2dpZCAiY2Fubm90IGxvYWQgdGV4dCB0YWJsZSIKK21zZ3N0ciAi0L3QtSDQvNC+0LPRgyDQt9Cw0LPRgNGD0LfQuNGC0Ywg0YLQsNCx0LvQuNGG0YMg0YLQtdC60YHRgtC+0LIiCisKKyM6IFByb2dyYW1zL2ZpbGUuYzozMzkKK21zZ2lkICJjYW5ub3QgbWFrZSB3b3JsZCB3cml0YWJsZSIKK21zZ3N0ciAi0L3QtSDQvNC+0LPRgyDQvtGC0LrRgNGL0YLRjCDRgdGA0LXQtNGDINC00LvRjyDQt9Cw0L/QuNGB0LgiCisKKyM6IFByb2dyYW1zL2NvbmZpZy5jOjEwNTYKK21zZ2lkICJjYW5ub3Qgb3BlbiBrZXkgaGVscCIKK21zZ3N0ciAi0L3QtSDQvNC+0LPRgyDQvtGC0LrRgNGL0YLRjCDRgdC/0YDQsNCy0LrRgyDQv9C+INC60LvQsNCy0LjRiNCw0LwiCisKKyM6IFByb2dyYW1zL3Byb2dyYW0uYzoyNzQKK21zZ2lkICJjYW5ub3Qgb3BlbiBwcm9jZXNzIGlkZW50aWZpZXIgZmlsZSIKK21zZ3N0ciAi0L3QtSDQvNC+0LPRgyDQvtGC0LrRgNGL0YLRjCDRhNCw0LnQuyDQuNC00LXQvdGC0LjRhNC40LrQsNGG0LjQuCDQv9GA0L7RhtC10YHRgdCwIgorCisjOiBQcm9ncmFtcy9tZW51LmM6NTQyCittc2dpZCAiY2Fubm90IG9wZW4gd29ya2luZyBkaXJlY3RvcnkiCittc2dzdHIgItC90LUg0LzQvtCz0YMg0L7RgtC60YDRi9GC0Ywg0LDQutGC0LjQstC90YvQuSDQutCw0YLQsNC70L7QsyIKKworIzogUHJvZ3JhbXMvcHJlZnMuYzozNTAKK21zZ2lkICJjYW5ub3QgcmVhZCBwcmVmZXJlbmNlcyBmaWxlIgorbXNnc3RyICLQvdC1INC80L7Qs9GDINC/0YDQvtGH0LjRgtCw0YLRjCDRhNCw0LnQuyDQvdCw0YHRgtGA0L7QtdC6IgorCisjOiBQcm9ncmFtcy94YnJsYXBpLmM6MzM3CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBzZXQgZm9jdXMgdG8gJSMwMTB4XG4iCittc2dzdHIgItC90LUg0LzQvtCz0YMg0YPRgdGC0LDQvdC+0LLQuNGC0Ywg0YTQvtC60YPRgSDQvdCwICUjMDEweFxuIgorCisjOiBQcm9ncmFtcy9maWxlLmM6NTAxIFByb2dyYW1zL21lbnUuYzo1MzEKK21zZ2lkICJjYW5ub3Qgc2V0IHdvcmtpbmcgZGlyZWN0b3J5IgorbXNnc3RyICLQvdC1INC80L7Qs9GDINGD0YHRgtCw0L3QvtCy0LjRgtGMINCw0LrRgtC40LLQvdGL0Lkg0LrQsNGC0LDQu9C+0LMiCisKKyM6IFByb2dyYW1zL3ByZWZzLmM6NTI1Cittc2dpZCAiY2Fubm90IHdyaXRlIHRvIHByZWZlcmVuY2VzIGZpbGUiCittc2dzdHIgItC90LUg0LzQvtCz0YMg0YHQtNC10LvQsNGC0Ywg0LfQsNC/0LjRgdGMINCyINGE0LDQudC70LUg0L3QsNGB0YLRgNC+0LXQuiIKKworIy4gImNhcCIgaGVyZSwgdXNlZCBkdXJpbmcgc3BlZWNoIG91dHB1dCwgaXMgc2hvcnQgZm9yICJjYXBpdGFsIi4KKyMuIEl0IGlzIHNwb2tlbiBqdXN0IGJlZm9yZSBhbiB1cHBlcmNhc2UgbGV0dGVyLCBlLmcuICJjYXAgQSIuCisjOiBQcm9ncmFtcy9jb3JlLmM6MTA2NQorbXNnaWQgImNhcCIKK21zZ3N0ciAi0LfQsNCz0LvQsNCy0L3QsNGPINCx0YPQutCy0LAiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzo3NzUgUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjEyMzQKK21zZ2lkICJjZWxscyIKK21zZ3N0ciAi0Y/Rh9C10LnQutC4IgorCisjOiBQcm9ncmFtcy9jbWRfcHJlZmVyZW5jZXMuYzo4NworbXNnaWQgImNoYW5nZXMgZGlzY2FyZGVkIgorbXNnc3RyICLQuNC30LzQtdC90LXQvdC40Y8g0L7RgtC80LXQvdC10L3RiyIKKworIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6Nzc1Cittc2dpZCAiY2xlYXIgYWxsIHN0aWNreSBpbnB1dCBtb2RpZmllcnMiCittc2dzdHIgItGD0LHRgNCw0YLRjCDQstGB0LUg0LfQsNC70LjQv9Cw0Y7RidC40LUg0LzQvtC00LjRhNC40LrQsNGC0L7RgNGLINCy0LLQvtC00LAiCisKKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjg4OQorbXNnaWQgImNsZWFyIHRoZSB0ZXh0IHNlbGVjdGlvbiIKK21zZ3N0ciAi0YPQsdGA0LDRgtGMINCy0YvQtNC10LvQtdC90LjQtSDRgtC10LrRgdGC0LAiCisKKyM6IFByb2dyYW1zL2NtZF9zcGVlY2guYzo0NzUKK21zZ2lkICJjb2x1bW4iCittc2dzdHIgItGB0YLQvtC70LHQtdGGIgorCisjLiBjb25maWd1cmF0aW9uIG1lbnUKKyM6IERyaXZlcnMvQnJhaWxsZS9CcmFpbGxlTGl0ZS9icmFpbGxlLmM6NjA3Cittc2dpZCAiY29uZmlnIgorbXNnc3RyICLQutC+0L3RhNC40LPRg9GA0LDRhtC40Y8iCisKKyM6IFByb2dyYW1zL29wdGlvbnMuYzo4MDYKK21zZ2lkICJjb25maWd1cmF0aW9uIGRpcmVjdGl2ZSBzcGVjaWZpZWQgbW9yZSB0aGFuIG9uY2UiCittc2dzdHIgItGB0LLQvtC50YHRgtCy0L4g0LrQvtC90YTQuNCz0YPRgNCw0YbQuNC4INC+0L/RgNC10LTQtdC70LXQvdC+INCx0L7Qu9C10LUg0L7QtNC90L7Qs9C+INGA0LDQt9CwIgorCisjOiBEcml2ZXJzL1NjcmVlbi9MaW51eC9zY3JlZW4uYzoxNTA4Cittc2dpZCAiY29uc29sZSBub3QgaW4gdXNlIgorbXNnc3RyICLQutC+0L3RgdC+0LvRjCDQvdC1INC40YHQv9C+0LvRjNC30YPQtdGC0YHRjyIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjk0NQorbXNnaWQgImNvbnNvbGUgdG9uZSBnZW5lcmF0b3IiCittc2dzdHIgItCa0L7QvdGB0L7Qu9GMINCz0LXQvdC10YDQuNGA0L7QstCw0L3QuNGPINC30LLRg9C60L7QsiIKKworIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6MTEzNQorbXNnaWQgImNvcHkgY2hhcmFjdGVycyB0byBjbGlwYm9hcmQiCittc2dzdHIgItGB0LrQvtC/0LjRgNC+0LLQsNGC0Ywg0YHQuNC80LLQvtC70Ysg0LIg0LHRg9GE0LXRgCDQvtCx0LzQtdC90LAiCisKKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjkwMQorbXNnaWQgImNvcHkgc2VsZWN0ZWQgdGV4dCB0byBob3N0IGNsaXBib2FyZCIKK21zZ3N0ciAi0YHQutC+0L/QuNGA0L7QstCw0YLRjCDQstGL0LTQtdC70LXQvdC90YvQuSDRgtC10LrRgdGCINCyINC+0YHQvdC+0LLQvdC+0Lkg0LHRg9GE0LXRgCDQvtCx0LzQtdC90LAiCisKKyM6IFByb2dyYW1zL2NvbmZpZy5jOjYzMyBQcm9ncmFtcy9tZW51X3ByZWZzLmM6NTAzCittc2dpZCAiY3NlY3MiCittc2dzdHIgImNzZWNzIgorCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDoxMjgwCittc2dpZCAiY3VycmVudCByZWFkaW5nIGxvY2F0aW9uIgorbXNnc3RyICLRgtC10LrRg9GJ0LXQtSDQvNC10YHRgtC+INGH0YLQtdC90LjRjyIKKworIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6MTMzNgorbXNnaWQgImN1cnNvci1kb3duIGtleSIKK21zZ3N0ciAi0LrQu9Cw0LLQuNGI0LAg0LrRg9GA0YHQvtGAINCy0L3QuNC3IgorCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDoxMzE1Cittc2dpZCAiY3Vyc29yLWxlZnQga2V5IgorbXNnc3RyICLQutC70LDQstC40YjQsCDQutGD0YDRgdC+0YAg0LLQu9C10LLQviIKKworIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6MTMyMgorbXNnaWQgImN1cnNvci1yaWdodCBrZXkiCittc2dzdHIgItC60LvQsNCy0LjRiNCwINC60YPRgNGB0L7RgCDQstC/0YDQsNCy0L4iCisKKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjEzMjkKK21zZ2lkICJjdXJzb3ItdXAga2V5IgorbXNnc3RyICLQutC70LDQstC40YjQsCDQutGD0YDRgdC+0YAg0LLQstC10YDRhSIKKworIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6OTA3Cittc2dpZCAiY3V0IHNlbGVjdGVkIHRleHQgdG8gaG9zdCBjbGlwYm9hcmQiCittc2dzdHIgItCy0YvRgNC10LfQsNGC0Ywg0LLRi9C00LXQu9C10L3QvdGL0Lkg0YLQtdC60YHRgiDQsiDQvtGB0L3QvtCy0L3QvtC5INCx0YPRhNC10YAg0L7QsdC80LXQvdCwIgorCisjLiBHQgorIzogUHJvZ3JhbXMvY21kX3V0aWxzLmM6MTQ3Cittc2dpZCAiY3lhbiIKK21zZ3N0ciAi0LPQvtC70YPQsdC+0LkiCisKKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjc4MQorbXNnaWQgImN5Y2xlIHRoZSBBbHRHciAoUmlnaHQgQWx0KSBzdGlja3kgaW5wdXQgbW9kaWZpZXIgKG5leHQsIG9uLCBvZmYpIgorbXNnc3RyICLQptC40LrQu9C40YfQvdC+0LUg0LfQsNC70LjQv9Cw0L3QuNC1L9GA0LDQt9C70LjQv9Cw0L3QuNC1INC60LvQsNCy0LjRiNC4ICjQv9GA0LDQstGL0LkgQWx0KSIKKworIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6NTYyCittc2dpZCAiY3ljbGUgdGhlIENvbnRyb2wgc3RpY2t5IGlucHV0IG1vZGlmaWVyIChuZXh0LCBvbiwgb2ZmKSIKK21zZ3N0ciAi0KbQuNC60LvQuNGH0L3QvtC1INC30LDQu9C40L/QsNC90LjQtS/RgNCw0LfQu9C40L/QsNC90LjQtSDQutC70LDQstC40YjQuCBDb250cm9sIgorCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDo3ODcKK21zZ2lkICJjeWNsZSB0aGUgR1VJIChXaW5kb3dzKSBzdGlja3kgaW5wdXQgbW9kaWZpZXIgKG5leHQsIG9uLCBvZmYpIgorbXNnc3RyICLQptC40LrQu9C40YfQvdC+0LUg0LfQsNC70LjQv9Cw0L3QuNC1L9GA0LDQt9C70LjQv9Cw0L3QuNC1INC60LvQsNCy0LjRiNC4ICAgKFdpbmRvd3MpIgorCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDo1NjgKK21zZ2lkICJjeWNsZSB0aGUgTWV0YSAoTGVmdCBBbHQpIHN0aWNreSBpbnB1dCBtb2RpZmllciAobmV4dCwgb24sIG9mZikiCittc2dzdHIgItCm0LjQutC70LjRh9C90L7QtSDQt9Cw0LvQuNC/0LDQvdC40LUv0YDQsNC30LvQuNC/0LDQvdC40LUg0LrQu9Cw0LLQuNGI0LggICjQu9C10LLRi9C5IEFsdCIKKworIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6NTUwCittc2dpZCAiY3ljbGUgdGhlIFNoaWZ0IHN0aWNreSBpbnB1dCBtb2RpZmllciAobmV4dCwgb24sIG9mZikiCittc2dzdHIgItCm0LjQutC70LjRh9C90L7QtSDQt9Cw0LvQuNC/0LDQvdC40LUv0YDQsNC30LvQuNC/0LDQvdC40LUg0LrQu9Cw0LLQuNGI0LggU2hpZnQiCisKKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjU1NgorbXNnaWQgImN5Y2xlIHRoZSBVcHBlciBzdGlja3kgaW5wdXQgbW9kaWZpZXIgKG5leHQsIG9uLCBvZmYpIgorbXNnc3RyICLRhtC40LrQu9C40YfQvdC+0LUgINC30LDQu9C40L/QsNC90LjQtS/RgNCw0LfQu9C40L/QsNC90LjQtSDQstC10YDRhdC90LXQs9C+INC80L7QtNC40YTQuNC60LDRgtC+0YDQsCAiCisKKyMuIEwKKyM6IFByb2dyYW1zL2NtZF91dGlscy5jOjE1MgorbXNnaWQgImRhcmsgZ3JleSIKK21zZ3N0ciAi0YLRkdC80L3Qvi3RgdC10YDRi9C5IgorCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDo0ODMKK21zZ2lkICJkZWNyZWFzZSBzcGVha2luZyByYXRlIgorbXNnc3RyICLRg9C80LXQvdGM0YjQuNGC0Ywg0YHQutC+0YDQvtGB0YLRjCDRgNC10YfQuCIKKworIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6NDk1Cittc2dpZCAiZGVjcmVhc2Ugc3BlYWtpbmcgdm9sdW1lIgorbXNnc3RyICLRg9C80LXQvdGM0YjQuNGC0Ywg0LPRgNC+0LzQutC+0YHRgtGMINGA0LXRh9C4IgorCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDoxMzc4Cittc2dpZCAiZGVsZXRlIGtleSIKK21zZ3N0ciAi0LrQu9Cw0LLQuNGI0LAgRGVsIgorCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDoxMDc5Cittc2dpZCAiZGVzY3JpYmUgY2hhcmFjdGVyIgorbXNnc3RyICLQvtC/0LjRgdCw0YLRjCDRgdC40LzQstC+0LsiCisKKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjcxNworbXNnaWQgImRlc2NyaWJlIGN1cnJlbnQgY2hhcmFjdGVyIgorbXNnc3RyICLQvtC/0LjRgdCw0YLRjCDRgtC10LrRg9GJ0LjQuSDRgdC40LzQstC+0LsiCisKKyM6IFByb2dyYW1zL2NvbmZpZy5jOjYxNCBQcm9ncmFtcy9jb25maWcuYzo2MjQKK21zZ2lkICJkZXZpY2UiCittc2dzdHIgItGD0YHRgtGA0L7QudGB0YLQstC+IgorCisjOiBQcm9ncmFtcy9icmx0ZXN0LmM6NjQgUHJvZ3JhbXMvYnJsdGVzdC5jOjc0IFByb2dyYW1zL2JybHR0eS1hdGIuYzozMgorIzogUHJvZ3JhbXMvYnJsdHR5LWN0Yi5jOjUwIFByb2dyYW1zL2JybHR0eS1rdGIuYzo2OSBQcm9ncmFtcy9icmx0dHkta3RiLmM6NzkKKyM6IFByb2dyYW1zL2JybHR0eS10cnR4dC5jOjQ3IFByb2dyYW1zL2NvbmZpZy5jOjQxMiBQcm9ncmFtcy9jb25maWcuYzo0MjIKKyM6IFByb2dyYW1zL2NvbmZpZy5jOjQzMiBQcm9ncmFtcy9jb25maWcuYzo1MDMKK21zZ2lkICJkaXJlY3RvcnkiCittc2dzdHIgItC60LDRgtCw0LvQvtCzIgorCisjOiBQcm9ncmFtcy94YnJsYXBpLmM6OTgKK21zZ2lkICJkaXNwbGF5IgorbXNnc3RyICLQtNC40YHQv9C70LXQuSIKKworIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6NAorbXNnaWQgImRvIG5vdGhpbmciCittc2dzdHIgItC90LUg0LTQtdC70LDRgtGMINC90LjRh9C10LPQviIKKworIzogUHJvZ3JhbXMvbGVhcm4uYzoxMDgKK21zZ2lkICJkb25lIgorbXNnc3RyICLQs9C+0YLQvtCy0L4iCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzo1NzcKK21zZ2lkICJkb3QgNyIKK21zZ3N0ciAi0YLQvtGH0LrQsCA3IgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6NTc4Cittc2dpZCAiZG90IDgiCittc2dzdHIgItGC0L7Rh9C60LAgOCIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjU3NQorbXNnaWQgImRvdHMgNyBhbmQgOCIKK21zZ3N0ciAi0YLQvtGH0LrQuCA3INC4IDgiCisKKyM6IERyaXZlcnMvQnJhaWxsZS9CYXVtL2JyYWlsbGUuYzoxMTA3Cittc2dpZCAiZHJpdmVyIHJlcXVlc3QiCittc2dzdHIgItC30LDQv9GA0L7RgSDQtNGA0LDQudCy0LXRgNCwIgorCisjOiBQcm9ncmFtcy9jb25maWcuYzo0NjEgUHJvZ3JhbXMvY29uZmlnLmM6NTU5IFByb2dyYW1zL2NvbmZpZy5jOjU5NAorbXNnaWQgImRyaXZlciwuLi4iCittc2dzdHIgItC00YDQsNC50LLQtdGALC4uLiIKKworIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6MTM2NAorbXNnaWQgImVuZCBrZXkiCittc2dzdHIgItC60LvQsNCy0LjRiNCwIEVuZCIKKworIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6MTI4NworbXNnaWQgImVudGVyIGtleSIKK21zZ3N0ciAi0LrQu9Cw0LLQuNGI0LAg0JLQstC+0LQiCisKKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjM4NAorbXNnaWQgImVudGVyL2xlYXZlIGNvbW1hbmQgbGVhcm4gbW9kZSIKK21zZ3N0ciAi0L7RgtC60YDRi9GC0Ywv0LfQsNC60YDRi9GC0Ywg0YDQtdC20LjQvCDQuNC30YPRh9C10L3QuNGPINC60L7QvNCw0L3QtCIKKworIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6MzcyCittc2dpZCAiZW50ZXIvbGVhdmUgaGVscCBkaXNwbGF5IgorbXNnc3RyICLQvtGC0LrRgNGL0YLRjC/Qt9Cw0LrRgNGL0YLRjCDRjdC60YDQsNC9INGB0L/RgNCw0LLQutC4IgorCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDozOTAKK21zZ2lkICJlbnRlci9sZWF2ZSBwcmVmZXJlbmNlcyBtZW51IgorbXNnc3RyICLQvtGC0LrRgNGL0YLRjC/Qt9Cw0LrRgNGL0YLRjCDQvNC10L3RjiDQvdCw0YHRgtGA0L7QtdC6IgorCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDozNzgKK21zZ2lkICJlbnRlci9sZWF2ZSBzdGF0dXMgZGlzcGxheSIKK21zZ3N0ciAi0L7RgtC60YDRi9GC0Ywv0LfQsNC60YDRi9GC0Ywg0YHRgtGA0L7QutGDINGB0L7RgdGC0L7Rj9C90LjRjyDQtNC40YHQv9C70LXRjyIKKworIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6MTMwOAorbXNnaWQgImVzY2FwZSBrZXkiCittc2dzdHIgItC60LvQsNCy0LjRiNCwIEVzY2FwZSIKKworIzogRHJpdmVycy9CcmFpbGxlL0lyaXMvYnJhaWxsZS5jOjE0OTQKK21zZ2lkICJldXJvYnJhaWxsZSIKK21zZ3N0ciAi0LXQstGA0L7Qv9C10LnRgdC60LjQuSDQkdGA0LDQudC70YwiCisKKyM6IFByb2dyYW1zL2NtZF9taXNjZWxsYW5lb3VzLmM6MTE4Cittc2dpZCAiZXhhY3RseSIKK21zZ3N0ciAi0YLQvtGH0L3QviIKKworIzogUHJvZ3JhbXMvY29uZmlnLmM6ODA4Cittc2dpZCAiZXhjZXNzIGFyZ3VtZW50IgorbXNnc3RyICLQtNC+0LHQsNCy0L7Rh9C90YvQuSDQsNGA0LPRg9C80LXQvdGCIgorCisjLiBwYXJlbnQKKyM6IFByb2dyYW1zL2JybHR0eS5jOjE3NworIywgYy1mb3JtYXQKK21zZ2lkICJleGVjdXRpbmcgXCIlc1wiIChmcm9tIFwiJXNcIilcbiIKK21zZ3N0ciAi0LLRi9C/0L7Qu9C90Y/QtdGC0YHRjyBcIiVzXCIgKNC40LcgXCIlc1wiKVxuIgorCisjOiBQcm9ncmFtcy9wZ21wcml2c19saW51eC5jOjIwMTAKK21zZ2lkICJleGVjdXRpbmcgYXMgdGhlIGludm9raW5nIHVzZXIiCittc2dzdHIgItCy0YvQv9C+0LvQvdGP0LXRgtGB0Y8g0L7RgiDQstGL0LfRi9Cy0LDRjtGJ0LXQs9C+INC/0L7Qu9GM0LfQvtCy0LDRgtC10LvRjyIKKworIy4gZXhlY3YoKSBzaG91bGRuJ3QgcmV0dXJuCisjOiBQcm9ncmFtcy9icmx0dHkuYzoxODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXhlY3V0aW9uIG9mIFwiJXNcIiBmYWlsZWQ6ICVzXG4iCittc2dzdHIgItCy0YvQv9C+0LvQvdC10L3QuNC1IFwiJXNcIiDQvdC1INGD0LTQsNC70L7RgdGMOiAlc1xuIgorCisjOiBQcm9ncmFtcy94YnJsYXBpLmM6NzA5Cittc2dpZCAiZmFpbGVkIHRvIGdldCBmaXJzdCBmb2N1c1xuIgorbXNnc3RyICLQvdC1INGD0LTQsNC70L7RgdGMINC/0L7Qu9GD0YfQuNGC0Ywg0L/QtdGA0LLQuNGH0L3Ri9C5INGE0L7QutGD0YFcbiIKKworIzogUHJvZ3JhbXMvYnJsdHR5LXRydHh0LmM6NTYgUHJvZ3JhbXMvYnJsdHR5LXRydHh0LmM6NjQgUHJvZ3JhbXMvY29uZmlnLmM6MzY5CisjOiBQcm9ncmFtcy9jb25maWcuYzozNzggUHJvZ3JhbXMvY29uZmlnLmM6Mzg4IFByb2dyYW1zL2NvbmZpZy5jOjUxNAorIzogUHJvZ3JhbXMvY29uZmlnLmM6NTI0IFByb2dyYW1zL2NvbmZpZy5jOjUzMyBQcm9ncmFtcy9jb25maWcuYzo1NDIKKyM6IFByb2dyYW1zL2NvbmZpZy5jOjU3OCBQcm9ncmFtcy9jb25maWcuYzo2NjMKK21zZ2lkICJmaWxlIgorbXNnc3RyICLRhNCw0LnQuyIKKworIzogUHJvZ3JhbXMvb3B0aW9ucy5jOjk5MgorIywgYy1mb3JtYXQKK21zZ2lkICJmaWxlICclcycgcHJvY2Vzc2luZyBlcnJvci4iCittc2dzdHIgItC+0YjQuNCx0LrQsCDQvtCx0YDQsNCx0L7RgtC60Lgg0YTQsNC50LvQsCAnJXMnIC4iCisKKyMuIGZhaWxlZAorIzogUHJvZ3JhbXMvYnJsdHR5LmM6MTcyCisjLCBjLWZvcm1hdAorbXNnaWQgImZvcmsgb2YgXCIlc1wiIGZhaWxlZDogJXNcbiIKK21zZ3N0ciAi0YHQvtC30LTQsNC90LjQtSDQvtCx0YXQvtC00L3QvtCz0L4g0L/Rg9GC0Lgg0LTQu9GPIFwiJXNcIiDQvdC1INGD0LTQsNC70L7RgdGMOiAlc1xuIgorCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDoxMzg2Cittc2dpZCAiZnVuY3Rpb24ga2V5IgorbXNnc3RyICLQutC70LDQstC40YjQsCBGdW5jdGlvbiIKKworIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6MjQwCittc2dpZCAiZ28gYmFjayBhZnRlciBjdXJzb3IgdHJhY2tpbmciCittc2dzdHIgItCS0LXRgNC90YPRgtGM0YHRjyDQvdCw0LfQsNC0ICDQvdCwINC80LXRgdGC0L4gINGB0LvQtdC20LXQvdC40Y8g0LrRg9GA0YHQvtGA0LAiCisKKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjkzOQorbXNnaWQgImdvIGJhY2sgdG8gdGhlIHByZXZpb3VzIHNjcmVlbiIKK21zZ3N0ciAi0JLQtdGA0L3Rg9GC0YzRgdGPINC90LDQt9Cw0LQg0L3QsCDQv9GA0LXQtNGL0LTRg9GJ0LjQuSDRjdC60YDQsNC9IgorCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDoxODYKK21zZ2lkICJnbyBiYWNrd2FyZCBvbmUgYnJhaWxsZSB3aW5kb3ciCittc2dzdHIgItCS0LXRgNC90YPRgtGM0YHRjyDQvdCw0LfQsNC0INC90LAg0L7QtNC90L4g0L7QutC90L4g0JHRgNCw0LnQu9GPIgorCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDoyMDIKK21zZ2lkICJnbyBiYWNrd2FyZCBza2lwcGluZyBibGFuayBicmFpbGxlIHdpbmRvd3MiCittc2dzdHIgItCS0LXRgNC90YPRgtGM0YHRjyDQvdCw0LfQsNC0LCDQv9GA0L7Qv9GD0YHQutCw0Y8g0L/Rg9GB0YLRi9C1INC+0LrQvdCwINCR0YDQsNC50LvRjyIKKworIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6ODQzCittc2dpZCAiZ28gYmFja3dhcmQgdG8gbmVhcmVzdCBub24tYmxhbmsgYnJhaWxsZSB3aW5kb3ciCittc2dzdHIgItCS0LXRgNC90YPRgtGM0YHRjyDQvdCw0LfQsNC0LCDQvdCwINCx0LvQuNC20LDQudGI0LXQtSDQt9Cw0L/QvtC70L3QtdC90L3QvtC1ICDQvtC60L3QviDQkdGA0LDQudC70Y8iCisKKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjIwCittc2dpZCAiZ28gZG93biBvbmUgbGluZSIKK21zZ3N0ciAi0J/QtdGA0LXQudGC0Lgg0L3QsCDQvtC00L3RgyDRgdGC0YDQvtC60YMg0LLQvdC40LciCisKKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjM2Cittc2dpZCAiZ28gZG93biBzZXZlcmFsIGxpbmVzIgorbXNnc3RyICLQn9C10YDQtdC50YLQuCDQvdCwINC90LXRgdC60L7Qu9GM0LrQviDRgdGC0YDQvtC6INCy0L3QuNC3IgorCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDoxMTgKK21zZ2lkICJnbyBkb3duIHRvIGZpcnN0IGxpbmUgb2YgbmV4dCBwYXJhZ3JhcGgiCittc2dzdHIgItCf0LXRgNC10LnRgtC4INCy0L3QuNC3INC90LAg0L/QtdGA0LLRg9GOINGB0YLRgNC+0LrRgyDRgdC70LXQtNGD0Y7RidC10LPQviDQsNCx0LfQsNGG0LAiCisKKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjQxOAorbXNnaWQgImdvIGRvd24gdG8gbGFzdCBpdGVtIgorbXNnc3RyICLQn9C10YDQtdC50YLQuCDQstC90LjQtyDQuiDQv9C+0YHQu9C10LTQvdC10LzRgyDRjdC70LXQvNC10L3RgtGDIgorCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDoxMTI4Cittc2dpZCAiZ28gZG93biB0byBuZWFyZXN0IGxpbmUgd2l0aCBkaWZmZXJlbnQgY2hhcmFjdGVyIgorbXNnc3RyICLQn9C10YDQtdC50YLQuCDQstC90LjQtyDQuiDQsdC70LjQttCw0LnRiNC10Lkg0YHRgtGA0L7QutC1INGBINC00YDRg9Cz0LjQvCDRgdC40LzQstC+0LvQvtC8IgorCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDo1MgorbXNnaWQgImdvIGRvd24gdG8gbmVhcmVzdCBsaW5lIHdpdGggZGlmZmVyZW50IGNvbnRlbnQiCittc2dzdHIgItCf0LXRgNC10LnRgtC4INCy0L3QuNC3INC6INCx0LvQuNC20LDQudGI0LXQuSDRgdGC0YDQvtC60LUg0YEg0LTRgNGD0LPQuNC8INGB0L7QtNC10YDQttC40LzRi9C8IgorCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDo2OAorbXNnaWQgImdvIGRvd24gdG8gbmVhcmVzdCBsaW5lIHdpdGggZGlmZmVyZW50IGhpZ2hsaWdodGluZyIKK21zZ3N0ciAi0L/QtdGA0LXQudGC0Lgg0LLQvdC40Lcg0Log0LHQu9C40LbQsNC50YjQtdC5INGB0YLRgNC+0LrQtSDRgSDQtNGA0YPQs9C40Lwg0LLRi9C00LXQu9C10L3QuNC10LwiCisKKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjEwNzIKK21zZ2lkICJnbyBkb3duIHRvIG5lYXJlc3QgbGluZSB3aXRoIGxlc3MgaW5kZW50IHRoYW4gY2hhcmFjdGVyIgorbXNnc3RyICLQv9C10YDQtdC50YLQuCDQstC90LjQtyDQuiDQsdC70LjQttCw0LnRiNC10Lkg0YHRgtGA0L7QutC1INGBINC+0YLRgdGC0YPQv9C+0Lwg0LzQtdC90LXQtSDRh9C10Lwg0LIg0L7QtNC40L0g0YHQuNC80LLQvtC7IgorCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDoxMzQKK21zZ2lkICJnbyBkb3duIHRvIG5leHQgY29tbWFuZCBwcm9tcHQiCittc2dzdHIgItC/0LXRgNC10LnRgtC4ICDQuiDRgdC70LXQtNGD0Y7RidC10LkgINC/0L7QtNGB0LrQsNC30LrQtSIKKworIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6NDM0Cittc2dpZCAiZ28gZG93biB0byBuZXh0IGl0ZW0iCittc2dzdHIgItC/0LXRgNC10LnRgtC4ICDQuiDRgdC70LXQtNGD0Y7RidC10LzRgyDRjdC70LXQvNC10L3RgtGDIgorCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDoxOTQKK21zZ2lkICJnbyBmb3J3YXJkIG9uZSBicmFpbGxlIHdpbmRvdyIKK21zZ3N0ciAi0J/QtdGA0LXQudGC0Lgg0LLQv9C10YDRkdC0INC90LAg0L7QtNC90L4g0L7QutC90L4g0JHRgNCw0LnQu9GPIgorCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDoyMTAKK21zZ2lkICJnbyBmb3J3YXJkIHNraXBwaW5nIGJsYW5rIGJyYWlsbGUgd2luZG93cyIKK21zZ3N0ciAi0J/QtdGA0LXQudGC0Lgg0LLQv9C10YDRkdC0LCDQv9GA0L7Qv9GD0YHQutCw0Y8g0L/Rg9GB0YLRi9C1INC+0LrQvdCwINCR0YDQsNC50LvRjyIKKworIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6ODUxCittc2dpZCAiZ28gZm9yd2FyZCB0byBuZWFyZXN0IG5vbi1ibGFuayBicmFpbGxlIHdpbmRvdyIKK21zZ3N0ciAi0J/QtdGA0LXQudGC0Lgg0LLQv9C10YDRkdC0LCDQuiDQsdC70LjQttCw0LnRiNC10LzRgyDQt9Cw0L/QvtC70L3QtdC90L3QvtC80YMg0L7QutC90YMg0JHRgNCw0LnQu9GPIgorCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDoxNzAKK21zZ2lkICJnbyBsZWZ0IGhhbGYgYSBicmFpbGxlIHdpbmRvdyIKK21zZ3N0ciAi0J/QtdGA0LXQudGC0Lgg0LLQu9C10LLQviDQvdCwINC/0L7Qu9C+0LLQuNC90YMg0L7QutC90LAg0JHRgNCw0LnQu9GPIgorCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDoxNTQKK21zZ2lkICJnbyBsZWZ0IG9uZSBjaGFyYWN0ZXIiCittc2dzdHIgItCf0LXRgNC10LnRgtC4INCy0LvQtdCy0L4g0L3QsCDQvtC00LjQvSDRgdC40LzQstC+0LsiCisKKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjE3OAorbXNnaWQgImdvIHJpZ2h0IGhhbGYgYSBicmFpbGxlIHdpbmRvdyIKK21zZ3N0ciAi0J/QtdGA0LXQudGC0Lgg0LLQv9GA0LDQstC+INC90LAg0L/QvtC70L7QstC40L3RgyDQvtC60L3QsCDQkdGA0LDQudC70Y8iCisKKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjE2MgorbXNnaWQgImdvIHJpZ2h0IG9uZSBjaGFyYWN0ZXIiCittc2dzdHIgItCf0LXRgNC10LnRgtC4INCy0L/RgNCw0LLQviDQvdCwINC+0LTQuNC9INGB0LjQvNCy0L7QuyIKKworIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6NjkwCittc2dpZCAiZ28gdG8gYW5kIHNwZWFrIGZpcnN0IG5vbi1ibGFuayBjaGFyYWN0ZXIgb24gbGluZSIKK21zZ3N0ciAi0J/QtdGA0LXQudGC0Lgg0Log0LHQu9C40LbQsNC50YjQtdC80YMg0L3QtdC30LDQv9C+0LvQvdC10L3QvdC+0LzRgyDRgdC40LzQstC+0LvRgyDQsiDRgdGC0YDQvtC60LUg0Lgg0L/RgNC+0LPQvtCy0L7RgNC40YLRjCDQtdCz0L4iCisKKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjcwNAorbXNnaWQgImdvIHRvIGFuZCBzcGVhayBmaXJzdCBub24tYmxhbmsgbGluZSBvbiBzY3JlZW4iCittc2dzdHIgItCf0LXRgNC10LnRgtC4INC6INCx0LvQuNC20LDQudGI0LXQuSDQvdC10LfQsNC/0L7Qu9C90LXQvdC90L7QuSDRgdGC0YDQvtC60LUg0L3QsCDRjdC60YDQsNC90LUg0Lgg0L/RgNC+0LPQvtCy0L7RgNC40YLRjCDQtdGRIgorCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDo2OTcKK21zZ2lkICJnbyB0byBhbmQgc3BlYWsgbGFzdCBub24tYmxhbmsgY2hhcmFjdGVyIG9uIGxpbmUiCittc2dzdHIgItCf0LXRgNC10LnRgtC4INC6INC/0L7RgdC70LXQtNC90LXQvNGDINC90LXQt9Cw0L/QvtC70L3QtdC90L3QvtC80YMg0YHQuNC80LLQvtC70YMg0LIg0YHRgtGA0L7QutC1INC4INC/0YDQvtCz0L7QstC+0YDQuNGC0Ywg0LXQs9C+IgorCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDo3MTEKK21zZ2lkICJnbyB0byBhbmQgc3BlYWsgbGFzdCBub24tYmxhbmsgbGluZSBvbiBzY3JlZW4iCittc2dzdHIgItCf0LXRgNC10LnRgtC4INC6INC/0L7RgdC70LXQtNC90LXQuSDQvdC10LfQsNC/0L7Qu9C90LXQvdC90L7QuSDRgdGC0YDQvtC60LUg0L3QsCDRjdC60YDQsNC90LUg0Lgg0L/RgNC+0LPQvtCy0L7RgNC40YLRjCDQtdGRIgorCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDo2NDMKK21zZ2lkICJnbyB0byBhbmQgc3BlYWsgbmV4dCBjaGFyYWN0ZXIiCittc2dzdHIgItCf0LXRgNC10LnRgtC4INC6INGB0LvQtdC00YPRjtGJ0LXQvNGDINGB0LjQvNCy0L7Qu9GDINC4INC/0YDQvtCz0L7QstC+0YDQuNGC0Ywg0LXQs9C+IgorCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDo2ODMKK21zZ2lkICJnbyB0byBhbmQgc3BlYWsgbmV4dCBsaW5lIgorbXNnc3RyICLQn9C10YDQtdC50YLQuCDQuiDRgdC70LXQtNGD0Y7RidC10Lkg0YHRgtGA0L7QutC1INC4INC/0YDQvtCz0L7QstC+0YDQuNGC0Ywg0LXRkSIKKworIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6NjYzCittc2dpZCAiZ28gdG8gYW5kIHNwZWFrIG5leHQgd29yZCIKK21zZ3N0ciAi0J/QtdGA0LXQudGC0Lgg0Log0YHQu9C10LTRg9GO0YnQtdC80YMg0YHQu9C+0LLRgyDQuCDQv9GA0L7Qs9C+0LLQvtGA0LjRgtGMINC10LPQviIKKworIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6NjM2Cittc2dpZCAiZ28gdG8gYW5kIHNwZWFrIHByZXZpb3VzIGNoYXJhY3RlciIKK21zZ3N0ciAi0J/QtdGA0LXQudGC0Lgg0Log0L/RgNC10LTRi9C00YPRidC10LzRgyDRgdC40LzQstC+0LvRgyDQuCDQv9GA0L7Qs9C+0LLQvtGA0LjRgtGMINC10LPQviIKKworIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6Njc2Cittc2dpZCAiZ28gdG8gYW5kIHNwZWFrIHByZXZpb3VzIGxpbmUiCittc2dzdHIgItCf0LXRgNC10LnRgtC4INC6INC/0YDQtdC00YvQtNGD0YnQtdC5INGB0YLRgNC+0LrQtSDQuCDQv9GA0L7Qs9C+0LLQvtGA0LjRgtGMINC10ZEiCisKKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjY1NgorbXNnaWQgImdvIHRvIGFuZCBzcGVhayBwcmV2aW91cyB3b3JkIgorbXNnc3RyICLQn9C10YDQtdC50YLQuCDQuiDQv9GA0LXQtNGL0LTRg9GJ0LXQvNGDINGB0LvQvtCy0YMg0Lgg0L/RgNC+0LPQvtCy0L7RgNC40YLRjCDQtdCz0L4iCisKKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjEwMgorbXNnaWQgImdvIHRvIGJlZ2lubmluZyBvZiBib3R0b20gbGluZSIKK21zZ3N0ciAi0J/QtdGA0LXQudGC0Lgg0Log0L3QsNGH0LDQu9GDINC90LjQttC90LXQuSDRgdGC0YDQvtC60LgiCisKKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjIxOAorbXNnaWQgImdvIHRvIGJlZ2lubmluZyBvZiBsaW5lIgorbXNnc3RyICLQn9C10YDQtdC50YLQuCDQuiDQvdCw0YfQsNC70YMg0YHRgtGA0L7QutC4IgorCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDo5MworbXNnaWQgImdvIHRvIGJlZ2lubmluZyBvZiB0b3AgbGluZSIKK21zZ3N0ciAi0J/QtdGA0LXQudGC0Lgg0Log0L3QsNGH0LDQu9GDINCy0LXRgNGF0L3QtdC5INGB0YLRgNC+0LrQuCIKKworIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6ODQKK21zZ2lkICJnbyB0byBib3R0b20gbGluZSIKK21zZ3N0ciAi0J/QtdGA0LXQudGC0Lgg0LLQvdC40LciCisKKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjQ1OQorbXNnaWQgImdvIHRvIGN1cnJlbnQgc3BlYWtpbmcgcG9zaXRpb24iCittc2dzdHIgItCf0LXRgNC10LnRgtC4INC6INGC0LXQutGD0YnQtdC80YMg0LzQtdGB0YLRgyDQv9GA0L7Qs9C+0LLQsNGA0LjQstCw0L3QuNGPIgorCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDoyMjYKK21zZ2lkICJnbyB0byBlbmQgb2YgbGluZSIKK21zZ3N0ciAi0J/QtdGA0LXQudGC0Lgg0LIg0LrQvtC90LXRhiDRgdGC0YDQvtC60LgiCisKKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjU4MQorbXNnaWQgImdvIHRvIHByZXZpb3VzIG1lbnUgbGV2ZWwiCittc2dzdHIgItCf0LXRgNC10LnRgtC4INC90LAg0L/RgNC10LTRi9C00YPRidC40Lkg0YPRgNC+0LLQtdC90Ywg0LzQtdC90Y4iCisKKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjExMDEKK21zZ2lkICJnbyB0byByZW1lbWJlcmVkIGJyYWlsbGUgd2luZG93IHBvc2l0aW9uIgorbXNnc3RyICLQn9C10YDQtdC50YLQuCDQuiDRgdC+0YXRgNCw0L3QtdC90L3QvtC5INC/0L7Qt9C40YbQuNC4INC+0LrQvdCwINCR0YDQsNC50LvRjyIKKworIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6MjMzCittc2dpZCAiZ28gdG8gc2NyZWVuIGN1cnNvciIKK21zZ3N0ciAi0J/QtdGA0LXQudGC0Lgg0Log0Y3QutGA0LDQvdC90L7QvNGDINC60YPRgNGB0L7RgNGDIgorCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDoyNDcKK21zZ2lkICJnbyB0byBzY3JlZW4gY3Vyc29yIG9yIGdvIGJhY2sgYWZ0ZXIgY3Vyc29yIHRyYWNraW5nIgorbXNnc3RyICLQn9C10YDQtdC50YLQuCDQuiDRjdC60YDQsNC90L3QvtC80YMg0LrRg9GA0YHQvtGA0YMg0LjQu9C4INCy0LXRgNC90YPRgtGM0YHRjyDQvdCw0LfQsNC0INC6INC80LXRgdGC0YMg0YHQu9C10LbQtdC90LjRjyDQutGD0YDRgdC+0YDQsCAiCisKKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjExMTAKK21zZ2lkICJnbyB0byBzZWxlY3RlZCBsaW5lIgorbXNnc3RyICLQn9C10YDQtdC50YLQuCDQuiDQstGL0LTQtdC70LXQvdC90L7QuSDRgdGC0YDQvtC60LUiCisKKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjkzMgorbXNnaWQgImdvIHRvIHRoZSBob21lIHNjcmVlbiIKK21zZ3N0ciAi0J/QtdGA0LXQudGC0Lgg0L3QsCDQs9C70LDQstC90YvQuSDRjdC60YDQsNC9IgorCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDo3NgorbXNnaWQgImdvIHRvIHRvcCBsaW5lIgorbXNnc3RyICLQn9C10YDQtdC50YLQuCDQuiDQvdCw0YfQsNC70YMgICIKKworIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6MTIKK21zZ2lkICJnbyB1cCBvbmUgbGluZSIKK21zZ3N0ciAi0J/QtdGA0LXQudGC0LggINC90LAg0L7QtNC90YMg0YHRgtGA0L7QutGDINCy0LLQtdGA0YUiCisKKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjI4Cittc2dpZCAiZ28gdXAgc2V2ZXJhbCBsaW5lcyIKK21zZ3N0ciAi0L/QtdGA0LXQudGC0LggINC90LAg0L3QtdGB0LrQvtC70YzQutC+INGB0YLRgNC+0LoiCisKKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjQxMAorbXNnaWQgImdvIHVwIHRvIGZpcnN0IGl0ZW0iCittc2dzdHIgItC/0LXRgNC10LnRgtC4ICDQuiDQv9C10YDQstC+0LzRgyDRjdC70LXQvNC10L3RgtGDIgorCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDoxMTAKK21zZ2lkICJnbyB1cCB0byBmaXJzdCBsaW5lIG9mIHBhcmFncmFwaCIKK21zZ3N0ciAi0J/QtdGA0LXQudGC0LggINC6INC/0LXRgNCy0L7QuSDRgdGC0YDQvtC60LUg0LDQsdC30LDRhtCwIgorCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDoxMTE5Cittc2dpZCAiZ28gdXAgdG8gbmVhcmVzdCBsaW5lIHdpdGggZGlmZmVyZW50IGNoYXJhY3RlciIKK21zZ3N0ciAi0J/QtdGA0LXQudGC0LggINC6INCx0LvQuNC20LDQudGI0LXQuSDRgdGC0YDQvtC60LUg0YEg0LTRgNGD0LPQuNC8INGB0LjQvNCy0L7Qu9C+0LwiCisKKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjQ0Cittc2dpZCAiZ28gdXAgdG8gbmVhcmVzdCBsaW5lIHdpdGggZGlmZmVyZW50IGNvbnRlbnQiCittc2dzdHIgItCf0LXRgNC10LnRgtC4ICDQuiDQsdC70LjQttCw0LnRiNC10Lkg0YHRgtGA0L7QutC1INGBINC00YDRg9Cz0LjQvCDRgdC+0LTQtdGA0LbQuNC80YvQvCIKKworIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6NjAKK21zZ2lkICJnbyB1cCB0byBuZWFyZXN0IGxpbmUgd2l0aCBkaWZmZXJlbnQgaGlnaGxpZ2h0aW5nIgorbXNnc3RyICLQn9C10YDQtdC50YLQuCAg0Log0LHQu9C40LbQsNC50YjQtdC5INGB0YLRgNC+0LrQtSDRgSDQtNGA0YPQs9C40Lwg0LLRi9C00LXQu9C10L3QuNC10LwiCisKKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjEwNjMKK21zZ2lkICJnbyB1cCB0byBuZWFyZXN0IGxpbmUgd2l0aCBsZXNzIGluZGVudCB0aGFuIGNoYXJhY3RlciIKK21zZ3N0ciAi0J/QtdGA0LXQudGC0LggINC6INCx0LvQuNC20LDQudGI0LXQuSDRgdGC0YDQvtC60LUg0YEg0L7RgtGB0YLRg9C/0L7QvCDQvNC10L3QtdC1INGH0LXQvCDQsiAxINGB0LjQvNCy0L7QuyIKKworIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6MTI2Cittc2dpZCAiZ28gdXAgdG8gcHJldmlvdXMgY29tbWFuZCBwcm9tcHQiCittc2dzdHIgItCf0LXRgNC10LnRgtC4ICDQuiDQv9GA0LXQtNGL0LTRg9GJ0LXQuSDQv9C+0LTRgdC60LDQt9C60LUiCisKKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjQyNgorbXNnaWQgImdvIHVwIHRvIHByZXZpb3VzIGl0ZW0iCittc2dzdHIgItCf0LXRgNC10LnRgtC4ICDQuiDQv9GA0LXQtNGL0LTRg9GJ0LXQvNGDINGN0LvQtdC80LXQvdGC0YMiCisKKyMuIEcKKyM6IFByb2dyYW1zL2NtZF91dGlscy5jOjE0NgorbXNnaWQgImdyZWVuIgorbXNnc3RyICLQt9C10LvRkdC90YvQuSIKKworIzogUHJvZ3JhbXMvcGdtcHJpdnNfbGludXguYzoyMTMyCittc2dpZCAiZ3JvdXAgcGVybWlzc2lvbnMgYWRkZWQiCittc2dzdHIgItCT0YDRg9C/0L/QvtCy0YvQtSDRgNCw0LfRgNC10YjQtdC90LjRjyDQtNC+0LHQsNCy0LvQtdC90YsiCisKKyM6IFByb2dyYW1zL2NtZF9taXNjZWxsYW5lb3VzLmM6MjI4Cittc2dpZCAiaGVscCBub3QgYXZhaWxhYmxlIgorbXNnc3RyICLQodC/0YDQsNCy0LrQsCDQvdC10LTQvtGB0YLRg9C/0L3QsCIKKworIzogUHJvZ3JhbXMvc2NyX2hlbHAuYzoyMjkKK21zZ2lkICJoZWxwIHNjcmVlbiBub3QgcmVhZGFibGUiCittc2dzdHIgItCd0LXQstC+0LfQvNC+0LbQvdC+INC/0YDQvtGH0LjRgtCw0YLRjCDRjdC60YDQsNC9INGB0L/RgNCw0LLQutC4IgorCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDoxMzU3Cittc2dpZCAiaG9tZSBrZXkiCittc2dzdHIgItCa0LvQsNCy0LjRiNCwIEhvbWUiCisKKyM6IFByb2dyYW1zL2NvbmZpZy5jOjQ4MgorbXNnaWQgImlkZW50aWZpZXIsLi4uIgorbXNnc3RyICLQuNC00LXQvdGC0LjRhNC40LrQsNGC0L7RgCwuLi4iCisKKyM6IERyaXZlcnMvQnJhaWxsZS9CYXVtL2JyYWlsbGUuYzoxMTA5Cittc2dpZCAiaWRsZSB0aW1lb3V0IgorbXNnc3RyICIg0J3QtdGCINCw0LrRgtC40LLQvdC+0YHRgtC4IC0gINC/0LXRgNC10YDRi9CyIgorCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDo0ODkKK21zZ2lkICJpbmNyZWFzZSBzcGVha2luZyByYXRlIgorbXNnc3RyICLQo9Cy0LXQu9C40YfQuNGC0Ywg0YHQutC+0YDQvtGB0YLRjCDRgNC10YfQuCIKKworIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6NTAxCittc2dpZCAiaW5jcmVhc2Ugc3BlYWtpbmcgdm9sdW1lIgorbXNnc3RyICLQo9Cy0LXQu9C40YfQuNGC0Ywg0LPRgNC+0LzQutC+0YHRgtGMINGA0LXRh9C4IgorCisjOiBQcm9ncmFtcy9jb3JlLmM6MTEyMworbXNnaWQgImluZGVudCIKK21zZ3N0ciAi0J7RgtGB0YLRg9C/IgorCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDoxMTQ5Cittc2dpZCAiaW5zZXJ0IGNsaXBib2FyZCBoaXN0b3J5IGVudHJ5IGFmdGVyIHNjcmVlbiBjdXJzb3IiCittc2dzdHIgItCS0YHRgtCw0LLQuNGC0Ywg0LjRgdGC0L7RgNC40Y4gINC/0L7QuNGB0LrQvtCy0YvRhSDQt9Cw0L/RgNC+0YHQvtCyINC6INCx0YPRhNC10YDRgyDQvtCx0LzQtdC90LAg0L/QvtGB0LvQtSDRjdC60YDQsNC90L3QvtCz0L4g0LrRg9GA0YHQvtGA0LAiCisKKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjUyNgorbXNnaWQgImluc2VydCBjbGlwYm9hcmQgdGV4dCBhZnRlciBzY3JlZW4gY3Vyc29yIgorbXNnc3RyICLQktGB0YLQsNCy0LjRgtGMINGC0LXQutGB0YIg0LjQtyDQsdGD0YTQtdGA0LAg0L7QsdC80LXQvdCwINC/0L7RgdC70LUg0Y3QutGA0LDQvdC90L7Qs9C+INC60YPRgNGB0L7RgNCwIgorCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDo5MTMKK21zZ2lkICJpbnNlcnQgaG9zdCBjbGlwYm9hcmQgdGV4dCBhZnRlciBzY3JlZW4gY3Vyc29yIgorbXNnc3RyICLQktGB0YLQsNCy0LjRgtGMINGC0LXQutGB0YIg0LjQtyDQs9C70LDQstC90L7Qs9C+INCx0YPRhNC10YDQsCDQvtCx0LzQtdC90LAg0L/QvtGB0LvQtSDRjdC60YDQsNC90L3QvtCz0L4g0LrRg9GA0YHQvtGA0LAiCisKKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjEzNzEKK21zZ2lkICJpbnNlcnQga2V5IgorbXNnc3RyICLQktGB0YLQsNCy0LjRgtGMINC60L7QvNCw0L3QtNGDIgorCisjOiBQcm9ncmFtcy9wcm9ncmFtLmM6MTc4Cittc2dpZCAiaW5zdGFsbCBwYXRoIG5vdCBhYnNvbHV0ZSIKK21zZ3N0ciAi0J/Rg9GC0Ywg0YPRgdGC0LDQvdC+0LLQutC4INC90LUg0YPRgtC+0YfQvdGR0L0iCisKKyM6IFByb2dyYW1zL29wdGlvbnMuYzoxMDQKK21zZ2lkICJpbnZhbGlkIGNvdW50ZXIgc2V0dGluZyIKK21zZ3N0ciAi0J3QtdC60L7RgNGA0LXQutGC0L3QsNGPINGD0YHRgtCw0L3QvtCy0LrQsCDRgdGH0ZHRgtGH0LjQutCwIgorCisjOiBQcm9ncmFtcy9kYXRhZmlsZS5jOjMxOAorbXNnaWQgImludmFsaWQgZXNjYXBlIHNlcXVlbmNlIgorbXNnc3RyICLQndC10LTQvtC/0YPRgdGC0LjQvNCw0Y8g0L/QvtGB0LvQtdC00L7QstCw0YLQtdC70YzQvdC+0YHRgtGMINCy0YvRhdC+0LTQsCIKKworIzogUHJvZ3JhbXMvb3B0aW9ucy5jOjExMworbXNnaWQgImludmFsaWQgZmxhZyBzZXR0aW5nIgorbXNnc3RyICLQndC10LrQvtGA0YDQtdC60YLQvdCw0Y8g0YPRgdGC0LDQvdC+0LLQutCwINGE0LvQsNCz0LAiCisKKyM6IFByb2dyYW1zL2NvbmZpZy5jOjI2NjMKK21zZ2lkICJpbnZhbGlkIG1lc3NhZ2UgaG9sZCB0aW1lb3V0IgorbXNnc3RyICLQvdC10LTQvtC/0YPRgdGC0LjQvNC+0LUg0LLRgNC10LzRjyDQt9Cw0LTQtdGA0LbQutC4INGB0L7QvtCx0YnQtdC90LjRjyIKKworIy4gdGhlIG9wZXJhbmQgZm9yIGFuIG9wdGlvbiBpcyBpbnZhbGlkCisjOiBQcm9ncmFtcy9vcHRpb25zLmM6NTg4Cittc2dpZCAiaW52YWxpZCBvcGVyYW5kIgorbXNnc3RyICLQndC10LTQvtC/0YPRgdGC0LjQvNGL0Lkg0L7Qv9C10YDQsNC90YIiCisKKyM6IFByb2dyYW1zL2JybGFwaV9zZXJ2ZXIuYzo0NDEzCittc2dpZCAiaW52YWxpZCB0aHJlYWQgc3RhY2sgc2l6ZSIKK21zZ3N0ciAi0J3QtdC00L7Qv9GD0YHRgtC40LzRi9C5INGA0LDQt9C80LXRgCDRhdGA0LDQvdC40LvQuNGJ0LAg0YbQtdC/0L7Rh9C10LoiCisKKyM6IERyaXZlcnMvQnJhaWxsZS9CcmFpbGxlTGl0ZS9icmFpbGxlLmM6NTkwCisjOiBEcml2ZXJzL0JyYWlsbGUvQnJhaWxsZUxpdGUvYnJhaWxsZS5jOjY2OAorbXNnaWQgImtleWJvYXJkIGVtdSBvZmYiCittc2dzdHIgItCt0LzRg9C70Y/RgtC+0YAg0LrQu9Cw0LLQuNCw0YLRg9GA0Ysg0LLRi9C60LvRjtGH0LXQvSIKKworIzogRHJpdmVycy9CcmFpbGxlL0JyYWlsbGVMaXRlL2JyYWlsbGUuYzo1ODkKK21zZ2lkICJrZXlib2FyZCBlbXUgb24iCittc2dzdHIgItCt0LzRg9C70Y/RgtC+0YAg0LrQu9Cw0LLQuNCw0YLRg9GA0Ysg0LLQutC70Y7Rh9GR0L0iCisKKyMuIEwgIEIKKyM6IFByb2dyYW1zL2NtZF91dGlscy5jOjE1MworbXNnaWQgImxpZ2h0IGJsdWUiCittc2dzdHIgItGB0LLQtdGC0LvQvi3RgdC40L3QuNC5IgorCisjLiBMIEdCCisjOiBQcm9ncmFtcy9jbWRfdXRpbHMuYzoxNTUKK21zZ2lkICJsaWdodCBjeWFuIgorbXNnc3RyICLQvdC10LHQtdGB0L3Qvi3Qs9C+0LvRg9Cx0L7QuSIKKworIy4gTCBHCisjOiBQcm9ncmFtcy9jbWRfdXRpbHMuYzoxNTQKK21zZ2lkICJsaWdodCBncmVlbiIKK21zZ3N0ciAi0YHQstC10YLQu9C+LdC30LXQu9GR0L3Ri9C5IgorCisjLiBSR0IKKyM6IFByb2dyYW1zL2NtZF91dGlscy5jOjE1MQorbXNnaWQgImxpZ2h0IGdyZXkiCittc2dzdHIgItGB0LLQtdGC0LvQvi3RgdC10YDRi9C5IgorCisjLiBMUiBCCisjOiBQcm9ncmFtcy9jbWRfdXRpbHMuYzoxNTcKK21zZ2lkICJsaWdodCBtYWdlbnRhIgorbXNnc3RyICLQodCy0LXRgtC70L4t0L/Rg9GA0L/Rg9GA0L3Ri9C5IgorCisjLiBMUgorIzogUHJvZ3JhbXMvY21kX3V0aWxzLmM6MTU2Cittc2dpZCAibGlnaHQgcmVkIgorbXNnc3RyICLQr9GA0LrQvi3QutGA0LDRgdC90YvQuSIKKworIzogUHJvZ3JhbXMvY21kX3NwZWVjaC5jOjQ3NAorbXNnaWQgImxpbmUiCittc2dzdHIgItCh0YLRgNC+0LrQsCIKKworIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6MTA0NworbXNnaWQgImxpbmVhciBjb3B5IHRvIGNoYXJhY3RlciIKK21zZ3N0ciAi0J/QvtGB0YLRgNC+0YfQvdC+INC60L7Qv9C40YDQvtCy0LDRgtGMINCyINC60L7QtNC40YDQvtCy0LrRgyIKKworIzogUHJvZ3JhbXMvY29uZmlnLmM6NjU0Cittc2dpZCAibHZsfGNhdCwuLi4iCittc2dzdHIgImx2bHxjYXQsLi4uIgorCisjLiBSIEIKKyM6IFByb2dyYW1zL2NtZF91dGlscy5jOjE0OQorbXNnaWQgIm1hZ2VudGEiCittc2dzdHIgItCf0YPRgNC/0YPRgNC90YvQuSIKKworIy4gdGhlIG9wZXJhbmQgZm9yIGEgc3RyaW5nIG9wdGlvbiBoYXNuJ3QgYmVlbiBzcGVjaWZpZWQKKyM6IFByb2dyYW1zL29wdGlvbnMuYzo1ODIKK21zZ2lkICJtaXNzaW5nIG9wZXJhbmQiCittc2dzdHIgItCe0YLRgdGD0YLRgdGC0LLRg9C10YIg0L7Qv9C10YDQsNC90YIiCisKKyM6IFByb2dyYW1zL3BhcnNlLmM6NDcyCittc2dpZCAibWlzc2luZyBwYXJhbWV0ZXIgbmFtZSIKK21zZ3N0ciAi0J7RgtGB0YPRgtGB0YLQstGD0LXRgiDQuNC80Y8g0L/QsNGA0LDQvNC10YLRgNCwIgorCisjOiBQcm9ncmFtcy9wYXJzZS5jOjQ1OAorbXNnaWQgIm1pc3NpbmcgcGFyYW1ldGVyIHF1YWxpZmllciIKK21zZ3N0ciAi0J7RgtGB0YPRgtGB0YLQstGD0LXRgiDRgdC/0LXRhtC40YTQuNC60LDRgtC+0YAg0L/QsNGA0LDQvNC10YLRgNCwIgorCisjOiBQcm9ncmFtcy9wYXJzZS5jOjQzNAorbXNnaWQgIm1pc3NpbmcgcGFyYW1ldGVyIHZhbHVlIgorbXNnc3RyICLQntGC0YHRg9GC0YHRgtCy0YPQtdGCINC30L3QsNGH0LXQvdC40LUg0L/QsNGA0LDQvNC10YLRgNCwIgorCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDo5OTMKK21zZ2lkICJtb3ZlIHRvIHRoZSBmaXJzdCBpdGVtIGluIHRoZSBzY3JlZW4gYXJlYSIKK21zZ3N0ciAi0J/QtdGA0LXQudGC0Lgg0Log0L/QtdGA0LLQvtC80YMg0Y3Qu9C10LzQtdC90YLRgyDQsiDRjdC60YDQsNC90L3QvtC5INC+0LHQu9Cw0YHRgtC4IgorCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDoxMDExCittc2dpZCAibW92ZSB0byB0aGUgbGFzdCBpdGVtIGluIHRoZSBzY3JlZW4gYXJlYSIKK21zZ3N0ciAi0J/QtdGA0LXQudGC0Lgg0Log0L/QvtGB0LvQtdC00L3QtdC80YMg0Y3Qu9C10LzQtdC90YLRgyDQsiDRjdC60YDQsNC90L3QvtC5INC+0LHQu9Cw0YHRgtC4IgorCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDoxMDA1Cittc2dpZCAibW92ZSB0byB0aGUgbmV4dCBpdGVtIGluIHRoZSBzY3JlZW4gYXJlYSIKK21zZ3N0ciAi0J/QtdGA0LXQudGC0Lgg0Log0YHQu9C10LTRg9GO0YnQtdC80YMg0Y3Qu9C10LzQtdC90YLRgyDQsiDRjdC60YDQsNC90L3QvtC5INC+0LHQu9Cw0YHRgtC4IgorCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDo5OTkKK21zZ2lkICJtb3ZlIHRvIHRoZSBwcmV2aW91cyBpdGVtIGluIHRoZSBzY3JlZW4gYXJlYSIKK21zZ3N0ciAi0J/QtdGA0LXQudGC0Lgg0Log0L/RgNC10LTRi9C00YPRidC10LzRgyDRjdC70LXQvNC10L3RgtGDINCyINGN0LrRgNCw0L3QvdC+0Lkg0L7QsdC70LDRgdGC0LgiCisKKyM6IFByb2dyYW1zL2NvbmZpZy5jOjM0NSBQcm9ncmFtcy9jb25maWcuYzozOTcgUHJvZ3JhbXMvY29uZmlnLmM6NDUwCisjOiBQcm9ncmFtcy9jb25maWcuYzo0NzIgUHJvZ3JhbXMvY29uZmlnLmM6NTUwIFByb2dyYW1zL2NvbmZpZy5jOjU2OQorIzogUHJvZ3JhbXMvY29uZmlnLmM6NjA0Cittc2dpZCAibmFtZT12YWx1ZSwuLi4iCittc2dzdHIgItC40LzRjz3Qt9C90LDRh9C10L3QuNC1LC4uLiIKKworIzogRHJpdmVycy9CcmFpbGxlL0lyaXMvYnJhaWxsZS5jOjE1MTAKK21zZ2lkICJuYXRpdmUiCittc2dzdHIgItC40YHRhdC+0LTQvdC+0LUiCisKKyM6IFByb2dyYW1zL2NvbmZpZy5jOjEwNjUKK21zZ2lkICJubyBrZXkgYmluZGluZ3MiCittc2dzdHIgItC90LXRgiDQv9GA0LjQstGP0LfQutC4INC60LvQsNCy0LjRiCIKKworIzogUHJvZ3JhbXMvc2NyX2RyaXZlci5jOjM5Cittc2dpZCAibm8gc2NyZWVuIgorbXNnc3RyICLQvdC10YIg0Y3QutGA0LDQvdCwIgorCisjOiBQcm9ncmFtcy9jb25maWcuYzo3MDYKK21zZ2lkICJub25lIgorbXNnc3RyICLQvdC40LrQsNC60LjQtSIKKworIzogUHJvZ3JhbXMvY29uZmlnLmM6MTMzOAorbXNnaWQgIm5vdCBzYXZlZCIKK21zZ3N0ciAi0L3QtSDRgdC+0YXRgNCw0L3QtdC90L4iCisKKyM6IFByb2dyYW1zL3BnbXByaXZzX2xpbnV4LmM6MTk4MworbXNnaWQgIm5vdCBzd2l0Y2hpbmcgdG8gYW4gdW5wcml2aWxlZ2VkIHVzZXIiCittc2dzdHIgItC90LXRgiDQv9C10YDQtdGF0L7QtNCwINCyINGB0YLQsNGC0YPRgSDQvtCx0YvRh9C90L7Qs9C+INC/0L7Qu9GM0LfQvtCy0LDRgtC10LvRjyIKKworIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6OTY5Cittc2dpZCAib3BlbiB0aGUgYXBwbGljYXRpb24gYWxlcnRzIHdpbmRvdyIKK21zZ3N0ciAi0L7RgtC60YDRi9GC0Ywg0L7QutC90L4g0L7Qv9C+0LLQtdGJ0LXQvdC40LkiCisKKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjk1NworbXNnaWQgIm9wZW4gdGhlIGFwcGxpY2F0aW9uIGxpc3Qgd2luZG93IgorbXNnc3RyICLQvtGC0LrRgNGL0YLRjCDQvtC60L3QviDRgdC/0LjRgdC60LAg0L/RgNC40LvQvtC20LXQvdC40LkiCisKKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjk2MworbXNnaWQgIm9wZW4gdGhlIGFwcGxpY2F0aW9uLXNwZWNpZmljIG1lbnUiCittc2dzdHIgItC+0YLQutGA0YvRgtGMINC60L7QvdGC0LXQutGB0YLQvdC+0LUg0LzQtdC90Y4g0LTQu9GPINC00LDQvdC90L7Qs9C+INC/0YDQuNC70L7QttC10L3QuNGPIgorCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDo5MjUKK21zZ2lkICJvcGVuIHRoZSBicmFpbGxlIGFjdGlvbnMgd2luZG93IgorbXNnc3RyICLQvtGC0LrRgNGL0YLRjCDQvtC60L3QviDQtNC10LnRgdGC0LLQuNC5INCR0YDQsNC50LvRjyIKKworIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6OTUxCittc2dpZCAib3BlbiB0aGUgZGV2aWNlIG9wdGlvbnMgd2luZG93IgorbXNnc3RyICLQntGC0LrRgNGL0YLRjCDQvtC60L3QviDRgdCy0L7QudGB0YLQsiDRg9GB0YLRgNC+0LnRgdGC0LLQsCIKKworIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6OTQ1Cittc2dpZCAib3BlbiB0aGUgZGV2aWNlIHNldHRpbmdzIHdpbmRvdyIKK21zZ3N0ciAi0J7RgtC60YDRi9GC0Ywg0L7QutC90L4g0L3QsNGB0YLRgNC+0LXQuiDRg9GB0YLRgNC+0LnRgdGC0LLQsCIKKworIzogUHJvZ3JhbXMvb3B0aW9ucy5jOjE1NQorbXNnaWQgIm9wdGlvbiIKK21zZ3N0ciAi0YHQstC+0LnRgdGC0LLQviIKKworIzogUHJvZ3JhbXMvcGdtcHJpdnNfbGludXguYzoyMTE3Cittc2dpZCAib3duZXJzaGlwIGNsYWltZWQiCittc2dzdHIgItC30LDRj9Cy0LvQtdC90LjQtSDQviDQv9GA0LDQstCw0YUg0YHQvtCx0YHRgtCy0LXQvdC90L7RgdGC0LgiCisKKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjEzNTAKK21zZ2lkICJwYWdlLWRvd24ga2V5IgorbXNnc3RyICLQutC70LDQstC40YjQsCDQodGC0YDQsNC90LjRhtCwINCy0L3QuNC3IgorCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDoxMzQzCittc2dpZCAicGFnZS11cCBrZXkiCittc2dzdHIgItC60LvQsNCy0LjRiNCwINCh0YLRgNCw0L3QuNGG0LAg0LLQstC10YDRhSIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjUwOQorbXNnaWQgInBlcmNlbnRhZ2UiCittc2dzdHIgItCf0YDQvtGG0LXQvdGC0L3QvtC1INGB0L7QvtGC0L3QvtGI0LXQvdC40LUiCisKKyM6IFByb2dyYW1zL2NvbmZpZy5jOjI2MzYKK21zZ2lkICJwaWQgZmlsZSBub3Qgc3BlY2lmaWVkIgorbXNnc3RyICJwaWQt0YTQsNC50Lsg0L3QtSDQstGL0LHRgNCw0L0iCisKKyM6IFByb2dyYW1zL3Byb2dyYW0uYzozMjAKK21zZ2lkICJwaWQgZmlsZSBvcGVuIGVycm9yIgorbXNnc3RyICLQvtGI0LjQsdC60LAg0L7RgtC60YDRi9GC0LjRjyBwaWQt0YTQsNC50LvQsCIKKworIzogUHJvZ3JhbXMvc3BrLmM6MjAwCittc2dpZCAicGl0Y2giCittc2dzdHIgItCy0YvRgdC+0YLQsCDRgtC+0L3QsCIKKworIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6MTA4NgorbXNnaWQgInBsYWNlIGxlZnQgZW5kIG9mIGJyYWlsbGUgd2luZG93IGF0IGNoYXJhY3RlciIKK21zZ3N0ciAi0J/QvtC80LXRgdGC0LjRgtGMINC70LXQstGL0Lkg0LrQvtC90LXRhiDQvtC60L3QsCDQkdGA0LDQudC70Y8g0LLQvtC30LvQtSDRgdC40LzQstC+0LvQsCIKKworIzogRHJpdmVycy9CcmFpbGxlL0JhdW0vYnJhaWxsZS5jOjExMDgKK21zZ2lkICJwb3dlciBzd2l0Y2giCittc2dzdHIgItCy0LrQu9GO0YfQuNGC0Ywg0Y3Qu9C10LrRgtGA0L7Qv9C40YLQsNC90LjQtSIKKworIzogUHJvZ3JhbXMvc3BrLmM6MTg2Cittc2dpZCAicmF0ZSIKK21zZ3N0ciAi0YHQutC+0YDQvtGB0YLRjCIKKworIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6MTA0MAorbXNnaWQgInJlY3Rhbmd1bGFyIGNvcHkgdG8gY2hhcmFjdGVyIgorbXNnc3RyICLQn9GA0LXQstGA0LDRidC10L3QuNC1ICAg0YHQuNC80LLQvtC70LAg0LIg0L/RgNGP0LzQvtGD0LPQvtC70YzQvdC40LoiCisKKyMuIFIKKyM6IFByb2dyYW1zL2NtZF91dGlscy5jOjE0OAorbXNnaWQgInJlZCIKK21zZ3N0ciAi0LrRgNCw0YHQvdGL0LkiCisKKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjg3NworbXNnaWQgInJlZnJlc2ggYnJhaWxsZSBkaXNwbGF5IgorbXNnc3RyICLQvtCx0L3QvtCy0LjRgtGMINC00LjRgdC/0LvQtdC5INCR0YDQsNC50LvRjyIKKworIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6MTIwMQorbXNnaWQgInJlZnJlc2ggYnJhaWxsZSBsaW5lIgorbXNnc3RyICLQvtCx0L3QvtCy0LjRgtGMINGB0YLRgNC+0LrRgyDQkdGA0LDQudC70Y8iCisKKyM6IFByb2dyYW1zL2NvbmZpZy5jOjQwNAorbXNnaWQgInJlZ2V4cCwuLi4iCittc2dzdHIgInJlZ2V4cCwuLi4iCisKKyM6IFByb2dyYW1zL2NvbmZpZy5jOjE4ODEKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVpbml0aWFsaXppbmcgYnJhaWxsZSBkcml2ZXIiCittc2dzdHIgItCf0L7QstGC0L7RgNC90LDRjyDQuNC90LjRhtC40LDQu9C40LfQsNGG0LjRjyDQtNGA0LDQudCy0LXRgNCwINCR0YDQsNC50LvRjyIKKworIzogUHJvZ3JhbXMvY29uZmlnLmM6MjM5NAorIywgYy1mb3JtYXQKK21zZ2lkICJyZWluaXRpYWxpemluZyBzY3JlZW4gZHJpdmVyIgorbXNnc3RyICLQn9C+0LLRgtC+0YDQvdCw0Y8g0LjQvdC40YbQuNCw0LvQuNC30LDRhtC40Y8g0Y3QutGA0LDQvdC90L7Qs9C+INC00YDQsNC50LLQtdGA0LAiCisKKyM6IFByb2dyYW1zL2NvbmZpZy5jOjIxOTQKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVpbml0aWFsaXppbmcgc3BlZWNoIGRyaXZlciIKK21zZ3N0ciAi0J/QvtCy0YLQvtGA0L3QsNGPINC40L3QuNGG0LjQsNC70LjQt9Cw0YbQuNGPINGA0LXRh9C10LLQvtCz0L4g0LTRgNCw0LnQstC10YDQsCIKKworIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6MTA5MworbXNnaWQgInJlbWVtYmVyIGN1cnJlbnQgYnJhaWxsZSB3aW5kb3cgcG9zaXRpb24iCittc2dzdHIgItCX0LDQv9C+0LzQvdC40YLRjCDRgtC10LrRg9GJ0YPRjiDQv9C+0LfQuNGG0LjRjiDQvtC60L3QsCDQkdGA0LDQudC70Y8iCisKKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjEyMjkKK21zZ2lkICJyZW5kZXIgYW4gYWxlcnQiCittc2dzdHIgItCS0YvQstC10YHRgtC4INC+0L/QvtCy0LXRidC10L3QuNC1INC90LAg0Y3QutGA0LDQvSIKKworIzogRHJpdmVycy9CcmFpbGxlL0JyYWlsbGVMaXRlL2JyYWlsbGUuYzo2MDEKKyM6IERyaXZlcnMvQnJhaWxsZS9CcmFpbGxlTGl0ZS9icmFpbGxlLmM6NzgwCisjOiBEcml2ZXJzL0JyYWlsbGUvQnJhaWxsZUxpdGUvYnJhaWxsZS5jOjc4MgorIzogRHJpdmVycy9CcmFpbGxlL0JyYWlsbGVMaXRlL2JyYWlsbGUuYzo3OTEKK21zZ2lkICJyZXBlYXQgY291bnQiCittc2dzdHIgItC/0L7QstGC0L7RgNC40YLRjCDQvtGC0YHRh9GR0YIiCisKKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjUzMgorbXNnaWQgInJlc3RhcnQgYnJhaWxsZSBkcml2ZXIiCittc2dzdHIgItC/0LXRgNC10LfQsNC/0YPRgdGC0LjRgtGMINC00YDQsNC50LLQtdGAINCR0YDQsNC50LvRjyIKKworIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6NTM4Cittc2dpZCAicmVzdGFydCBzcGVlY2ggZHJpdmVyIgorbXNnc3RyICLQn9C10YDQtdC30LDQv9GD0YHRgtC40YLRjCDRgNC10YfQtdCy0L7QuSDQtNGA0LDQudCy0LXRgCIKKworIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6NzU1Cittc2dpZCAicmVzdG9yZSBjbGlwYm9hcmQgZnJvbSBkaXNrIgorbXNnc3RyICLQstC+0YHRgdGC0LDQvdC+0LLQuNGC0Ywg0LHRg9GE0LXRgCDQvtCx0LzQtdC90LAg0YEg0LTQuNGB0LrQsCIKKworIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6NDAyCittc2dpZCAicmVzdG9yZSBwcmVmZXJlbmNlcyBmcm9tIGRpc2siCittc2dzdHIgItCy0L7RgdGB0YLQsNC90L7QstC40YLRjCDQvdCw0YHRgtGA0L7QudC60Lgg0YEg0LTQuNGB0LrQsCIKKworIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6OTc1Cittc2dpZCAicmV0dXJuIHRvIHRoZSBhY3RpdmUgc2NyZWVuIGFyZWEiCittc2dzdHIgItCy0LXRgNC90YPRgtGM0YHRjyDQsiDQsNC60YLQuNCy0L3Rg9GOINC+0LHQu9Cw0YHRgtGMINGN0LrRgNCw0L3QsCIKKworIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6NzQ5Cittc2dpZCAic2F2ZSBjbGlwYm9hcmQgdG8gZGlzayIKK21zZ3N0ciAi0YHQvtGF0YDQsNC90LjRgtGMINCx0YPRhNC10YAg0L7QsdC80LXQvdCwINC90LAg0LTQuNGB0LoiCisKKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjM5NgorbXNnaWQgInNhdmUgcHJlZmVyZW5jZXMgdG8gZGlzayIKK21zZ3N0ciAi0YHQvtGF0YDQsNC90LjRgtGMINC90LDRgdGC0YDQvtC50LrQuCDQvdCwINC00LjRgdC6IgorCisjOiBQcm9ncmFtcy94YnJsYXBpLmM6OTEKK21zZ2lkICJzY2hlbWUrLi4uIgorbXNnc3RyICLRgdGF0LXQvNCwKy4uLiIKKworIzogUHJvZ3JhbXMvY29uZmlnLmM6MjI3MAorbXNnaWQgInNjcmVlbiBkcml2ZXIgbm90IGxvYWRhYmxlIgorbXNnc3RyICLRjdC60YDQsNC90L3Ri9C5INC00YDQsNC50LLQtdGAINC90LXQtNC+0YHRgtGD0L/QtdC9INC00LvRjyDQt9Cw0LPRgNGD0LfQutC4IgorCisjOiBQcm9ncmFtcy9jb25maWcuYzoyMzkxCittc2dpZCAic2NyZWVuIGRyaXZlciByZXN0YXJ0aW5nIgorbXNnc3RyICLQv9C10YDQtdC30LDQv9GD0YHQuiDRjdC60YDQsNC90L3QvtCz0L4g0LTRgNCw0LnQstC10YDQsCIKKworIzogUHJvZ3JhbXMvY21kX21pc2NlbGxhbmVvdXMuYzoxODYKK21zZ2lkICJzY3JlZW4gZHJpdmVyIHN0b3BwZWQiCittc2dzdHIgItGN0LrRgNCw0L3QvdGL0Lkg0LTRgNCw0LnQstC10YAg0L7RgdGC0LDQvdC+0LLQu9C10L0iCisKKyM6IERyaXZlcnMvU2NyZWVuL0FuZHJvaWQvc2NyZWVuLmM6MTg0Cittc2dpZCAic2NyZWVuIGxvY2tlZCIKK21zZ3N0ciAi0Y3QutGA0LDQvSDQt9Cw0LHQu9C+0LrQuNGA0L7QstCw0L0iCisKKyM6IERyaXZlcnMvU2NyZWVuL0xpbnV4L3NjcmVlbi5jOjE1MzEKK21zZ2lkICJzY3JlZW4gbm90IGluIHRleHQgbW9kZSIKK21zZ3N0ciAi0Y3QutGA0LDQvSDQvdC1INCyINGC0LXQutGB0YLQvtCy0L7QvCDRgNC10LbQuNC80LUiCisKKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjE0MAorbXNnaWQgInNlYXJjaCBiYWNrd2FyZCBmb3IgY2xpcGJvYXJkIHRleHQiCittc2dzdHIgItC+0LHRgNCw0YLQvdGL0Lkg0L/QvtC40YHQuiDRgtC10LrRgdGC0LAg0LIg0LHRg9GE0LXRgNC1INC+0LHQvNC10L3QsCIKKworIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6MTQ2Cittc2dpZCAic2VhcmNoIGZvcndhcmQgZm9yIGNsaXBib2FyZCB0ZXh0IgorbXNnc3RyICLQv9GA0Y/QvNC+0Lkg0L/QvtC40YHQuiDRgtC10LrRgdGC0LAg0LIg0LHRg9GE0LXRgNC1INC+0LHQvNC10L3QsCIKKworIzogUHJvZ3JhbXMvY21kX21pc2NlbGxhbmVvdXMuYzoxMjIKK21zZ2lkICJzZWNvbmQiCittc2dpZF9wbHVyYWwgInNlY29uZHMiCittc2dzdHJbMF0gItGB0LXQutGD0L3QtCIKK21zZ3N0clsxXSAi0YHQtdC60YPQvdC00LAiCisKKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjg5NQorbXNnaWQgInNlbGVjdCBhbGwgb2YgdGhlIHRleHQiCittc2dzdHIgItCy0YvQtNC10LvQuNGC0Ywg0LLQtdGB0Ywg0YLQtdC60YHRgiIKKworIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6NDQ2Cittc2dpZCAic2VsZWN0IG5leHQgY2hvaWNlIgorbXNnc3RyICLQstGL0LTQtdC70LjRgtGMINGB0LvQtdC00YPRjtGJ0LjQuSDQstGL0LHRgNCw0L3QvdGL0LkiCisKKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjQ0MAorbXNnaWQgInNlbGVjdCBwcmV2aW91cyBjaG9pY2UiCittc2dzdHIgItCy0YvQtNC10LvQuNGC0Ywg0L/RgNC10LTRi9C00YPRidC40Lkg0LLRi9Cx0YDQsNC90L3Ri9C5IgorCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDozNTIKK21zZ2lkICJzZXQgYWxlcnQgdHVuZXMgb24vb2ZmIgorbXNnc3RyICLQstC60LvRjtGH0LjRgtGML9Cy0YvQutC70Y7Rh9C40YLRjCDQt9Cy0YPQutC+0LLRi9C1INC+0L/QvtCy0LXRidC10L3QuNGPIgorCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDozMzgKK21zZ2lkICJzZXQgYXR0cmlidXRlIGJsaW5raW5nIG9uL29mZiIKK21zZ3N0ciAi0LLQutC70Y7Rh9C40YLRjC/QstGL0LrQu9GO0YfQuNGC0Ywg0LDRgtGA0LjQsdGD0YIg0LzQuNCz0LDQvdC40Y8iCisKKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjMzMQorbXNnaWQgInNldCBhdHRyaWJ1dGUgdW5kZXJsaW5pbmcgb24vb2ZmIgorbXNnc3RyICLQstC60LvRjtGH0LjRgtGML9Cy0YvQutC70Y7Rh9C40YLRjCDQsNGC0YDQuNCx0YPRgiDQv9C+0LTRh9GR0YDQutC40LLQsNC90LjRjyIKKworIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6MTE2MworbXNnaWQgInNldCBhdHRyaWJ1dGVzIHRhYmxlIgorbXNnc3RyICLQvdCw0YHRgtGA0L7QuNGC0Ywg0YLQsNCx0LvQuNGG0YMg0LDRgtGA0LjQsdGD0YLQvtCyIgorCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDozNTkKK21zZ2lkICJzZXQgYXV0b3JlcGVhdCBvbi9vZmYiCittc2dzdHIgItCy0LrQu9GO0YfQuNGC0Ywv0LLRi9C60LvRjtGH0LjRgtGMINCw0LLRgtC+0L/QvtCy0YLQvtGAIgorCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDo2MjMKK21zZ2lkICJzZXQgYXV0b3NwZWFrIGNvbXBsZXRlZCB3b3JkcyBvbi9vZmYiCittc2dzdHIgItCy0LrQu9GO0YfQuNGC0Ywv0LLRi9C60LvRjtGH0LjRgtGMINCw0LLRgtC+0L/RgNC+0LPQvtCy0LDRgNC40LLQsNC90LjQtSDQstCy0LXQtNGR0L3QvdGL0YUg0YHQu9C+0LIiCisKKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjYwOQorbXNnaWQgInNldCBhdXRvc3BlYWsgZGVsZXRlZCBjaGFyYWN0ZXJzIG9uL29mZiIKK21zZ3N0ciAi0LLQutC70Y7Rh9C40YLRjC/QstGL0LrQu9GO0YfQuNGC0Ywg0LDQstGC0L7Qv9GA0L7Qs9C+0LLQsNGA0LjQstCw0L3QuNC1INGD0LTQsNC70ZHQvdC90YvRhSDRgdC40LzQstC+0LvQvtCyIgorCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDo4NzEKK21zZ2lkICJzZXQgYXV0b3NwZWFrIGluZGVudCBvZiBjdXJyZW50IGxpbmUgb24vb2ZmIgorbXNnc3RyICLQstC60LvRjtGH0LjRgtGML9Cy0YvQutC70Y7Rh9C40YLRjCDQsNCy0YLQvtC/0YDQvtCz0L7QstCw0YDQuNCy0LDQvdC40LUg0L7RgtGB0YLRg9C/0LAg0YLQtdC60YPRidC10Lkg0YHRgtGA0L7QutC4IgorCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDo2MDIKK21zZ2lkICJzZXQgYXV0b3NwZWFrIGluc2VydGVkIGNoYXJhY3RlcnMgb24vb2ZmIgorbXNnc3RyICLQstC60LvRjtGH0LjRgtGML9Cy0YvQutC70Y7Rh9C40YLRjCDQsNCy0YLQvtC/0YDQvtCz0L7QstCw0YDQuNCy0LDQvdC40LUg0LLRgdGC0LDQstC70LXQvdC90YvRhSDRgdC40LzQstC+0LvQvtCyIgorCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDozNjYKK21zZ2lkICJzZXQgYXV0b3NwZWFrIG9uL29mZiIKK21zZ3N0ciAi0LLQutC70Y7Rh9C40YLRjC/QstGL0LrQu9GO0YfQuNGC0Ywg0LDQstGC0L7Qv9GA0L7Qs9C+0LLQsNGA0LjQstCw0L3QuNC1IgorCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDo2MTYKK21zZ2lkICJzZXQgYXV0b3NwZWFrIHJlcGxhY2VkIGNoYXJhY3RlcnMgb24vb2ZmIgorbXNnc3RyICLQstC60LvRjtGH0LjRgtGML9Cy0YvQutC70Y7Rh9C40YLRjCDQsNCy0YLQvtC/0YDQvtCz0L7QstCw0YDQuNCy0LDQvdC40LUg0LfQsNC80LXQvdGR0L3QvdGL0YUg0YHQuNC80LLQvtC70L7QsiIKKworIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6NTk1Cittc2dpZCAic2V0IGF1dG9zcGVhayBzZWxlY3RlZCBjaGFyYWN0ZXIgb24vb2ZmIgorbXNnc3RyICLQstC60LvRjtGH0LjRgtGML9Cy0YvQutC70Y7Rh9C40YLRjCDQsNCy0YLQvtC/0YDQvtCz0L7QstCw0YDQuNCy0LDQvdC40LUg0LLRi9C00LXQu9C10L3QvdC+0LPQviDRgdC40LzQstC+0LvQsCIKKworIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6NTg4Cittc2dpZCAic2V0IGF1dG9zcGVhayBzZWxlY3RlZCBsaW5lIG9uL29mZiIKK21zZ3N0ciAi0LLQutC70Y7Rh9C40YLRjC/QstGL0LrQu9GO0YfQuNGC0Ywg0LDQstGC0L7Qv9GA0L7Qs9C+0LLQsNGA0LjQstCw0L3QuNC1INCy0YvQtNC10LvQtdC90L3QvtC5INGB0YLRgNC+0LrQuCIKKworIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6NzY5Cittc2dpZCAic2V0IGJyYWlsbGUga2V5Ym9hcmQgZW5hYmxlZC9kaXNhYmxlZCIKK21zZ3N0ciAi0LLQutC70Y7Rh9C40YLRjC/QvtGC0LrQu9GO0YfQuNGC0Ywg0LrQu9Cw0LLQuNCw0YLRg9GA0YMg0JHRgNCw0LnQu9GPIgorCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDo3NjIKK21zZ2lkICJzZXQgYnJhaWxsZSB0eXBpbmcgbW9kZSBkb3RzL3RleHQiCittc2dzdHIgItGA0LXQttC40Lwg0LHRgNCw0LnQu9C10LLRgdC60L7Qs9C+INCy0LLQvtC00LA6INGC0L7Rh9C60Lgv0YLQtdC60YHRgiIKKworIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6MzQ1Cittc2dpZCAic2V0IGNhcGl0YWwgbGV0dGVyIGJsaW5raW5nIG9uL29mZiIKK21zZ3N0ciAi0LLQutC70Y7Rh9C40YLRjC/QstGL0LrQu9GO0YfQuNGC0Ywg0LzQuNCz0LDQvdC40LUg0LfQsNCz0LvQsNCy0L3QvtC5INCx0YPQutCy0YsiCisKKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjExNzAKK21zZ2lkICJzZXQgY29udHJhY3Rpb24gdGFibGUiCittc2dzdHIgItC90LDRgdGC0YDQvtC40YLRjCDRgtCw0LHQu9C40YbRgyDRgdC+0LrRgNCw0YnQtdC90LjQuSIKKworIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6MjYxCittc2dpZCAic2V0IGRpc3BsYXkgbW9kZSBhdHRyaWJ1dGVzL3RleHQiCittc2dzdHIgItGA0LXQttC40Lwg0LTQuNGB0L/Qu9C10Y86INCw0YLRgNC40LHRg9GC0Ysv0YLQtdC60YHRgiIKKworIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6MzAzCittc2dpZCAic2V0IGhpZGRlbiBzY3JlZW4gY3Vyc29yIG9uL29mZiIKK21zZ3N0ciAi0LLQutC70Y7Rh9C40YLRjC/QvtGC0LrQu9GO0YfQuNGC0Ywg0YHQutGA0YvRgtGL0Lkg0Y3QutGA0LDQvdC90YvQuSDQutGD0YDRgdC+0YAiCisKKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjExNzcKK21zZ2lkICJzZXQga2V5Ym9hcmQgdGFibGUiCittc2dzdHIgItC90LDRgdGC0YDQvtC40YLRjCDQutC70LDQstC40LDRgtGD0YDQvdGD0Y4g0YLQsNCx0LvQuNGG0YMiCisKKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjExODQKK21zZ2lkICJzZXQgbGFuZ3VhZ2UgcHJvZmlsZSIKK21zZ3N0ciAi0L3QsNGB0YLRgNC+0LjRgtGMINGP0LfRi9C60L7QstC+0Lkg0L/RgNC+0YTQuNC70YwiCisKKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjMyNAorbXNnaWQgInNldCBzY3JlZW4gY3Vyc29yIGJsaW5raW5nIG9uL29mZiIKK21zZ3N0ciAi0LLQutC70Y7Rh9C40YLRjC/QstGL0LrQu9GO0YfQuNGC0Ywg0LzQuNCz0LDQvdC40LUg0Y3QutGA0LDQvdC90L7Qs9C+INC60YPRgNGB0L7RgNCwIgorCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDozMTcKK21zZ2lkICJzZXQgc2NyZWVuIGN1cnNvciBzdHlsZSBibG9jay91bmRlcmxpbmUiCittc2dzdHIgItCf0LXRgNC10LLQtdGB0YLQuCDRjdC60YDQsNC90L3Ri9C5INC60YPRgNGB0L7RgCDQsiDRgNC10LbQuNC8INC/0L7QtNGH0ZHRgNC60LjQstCw0L3QuNGPIgorCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDoyOTYKK21zZ2lkICJzZXQgc2NyZWVuIGN1cnNvciB2aXNpYmlsaXR5IG9uL29mZiIKK21zZ3N0ciAi0LLQutC70Y7Rh9C40YLRjC/QstGL0LrQu9GO0YfQuNGC0Ywg0LLQuNC00LjQvNC+0YHRgtGMINGN0LrRgNCw0L3QvdC+0LPQviDQutGD0YDRgdC+0YDQsCIKKworIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6MjU0Cittc2dpZCAic2V0IHNjcmVlbiBpbWFnZSBmcm96ZW4vdW5mcm96ZW4iCittc2dzdHIgItC40LfQvtCx0YDQsNC20LXQvdC40LUg0L3QsCDRjdC60YDQsNC90LU6INC/0YDQuNC+0YHRgtCw0L3QvtCy0LjRgtGML9Cy0L7Qt9C+0LHQvdC+0LLQuNGC0YwiCisKKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjI4OQorbXNnaWQgInNldCBza2lwcGluZyBvZiBibGFuayBicmFpbGxlIHdpbmRvd3Mgb24vb2ZmIgorbXNnc3RyICLQstC60LvRjtGH0LjRgtGML9Cy0YvQutC70Y7Rh9C40YLRjCDQv9GA0L7Qv9GD0YHQuiDQv9GD0YHRgtGL0YUg0L7QutC+0L0g0JHRgNCw0LnQu9GPIgorCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDoyODIKK21zZ2lkICJzZXQgc2tpcHBpbmcgb2YgbGluZXMgd2l0aCBpZGVudGljYWwgY29udGVudCBvbi9vZmYiCittc2dzdHIgItCy0LrQu9GO0YfQuNGC0Ywv0LLRi9C60LvRjtGH0LjRgtGMINC/0YDQvtC/0YPRgdC6INGB0YLRgNC+0Log0YEg0L7QtNC40L3QsNC60L7QstGL0Lwg0YHQvtC00LXRgNC20LjQvNGL0LwiCisKKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjI3NQorbXNnaWQgInNldCBzbGlkaW5nIGJyYWlsbGUgd2luZG93IG9uL29mZiIKK21zZ3N0ciAi0LLQutC70Y7Rh9C40YLRjC/QstGL0LrQu9GO0YfQuNGC0Ywg0YHQutC+0LvRjNC20LXQvdC40LUg0L7QutC90LAg0JHRgNCw0LnQu9GPIgorCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDo3NDMKK21zZ2lkICJzZXQgc3BlZWNoIGN1cnNvciB2aXNpYmlsaXR5IG9uL29mZiIKK21zZ3N0ciAi0LLQutC70Y7Rh9C40YLRjC/QstGL0LrQu9GO0YfQuNGC0Ywg0LLQuNC00LjQvNC+0YHRgtGMINGA0LXRh9C10LLQvtCz0L4g0LrRg9GA0YHQvtGA0LAiCisKKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjEyMTUKK21zZ2lkICJzZXQgdGV4dCBzZWxlY3Rpb24iCittc2dzdHIgItC90LDRgdGC0YDQvtC40YLRjCDQstGL0LTQtdC70LXQvdC40LUg0YLQtdC60YHRgtCwIgorCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDoyNjgKK21zZ2lkICJzZXQgdGV4dCBzdHlsZSA2LWRvdC84LWRvdCIKK21zZ3N0ciAi0YHRgtC40LvRjCDRgtC10LrRgdGC0LA6INGI0LXRgdGC0LjRgtC+0YfQtdGH0L3Ri9C5L9Cy0L7RgdGM0LzQuNGC0L7Rh9C10YfQvdGL0LkiCisKKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjExNTYKK21zZ2lkICJzZXQgdGV4dCB0YWJsZSIKK21zZ3N0ciAi0L3QsNGB0YLRgNC+0LjRgtGMINGC0LDQsdC70LjRhtGDINGC0LXQutGB0YLQvtCyIgorCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDo4NTgKK21zZ2lkICJzZXQgdG91Y2ggbmF2aWdhdGlvbiBvbi9vZmYiCittc2dzdHIgItCy0LrQu9GO0YfQuNGC0Ywv0LLRi9C60LvRjtGH0LjRgtGMINC20LXRgdGC0L7QstGD0Y4g0L3QsNCy0LjQs9Cw0YbQuNGOIgorCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDozMTAKK21zZ2lkICJzZXQgdHJhY2sgc2NyZWVuIGN1cnNvciBvbi9vZmYiCittc2dzdHIgItCy0LrQu9GO0YfQuNGC0Ywv0LLRi9C60LvRjtGH0LjRgtGMINC+0YLRgdC70LXQttC40LLQsNC90LjQtSDRjdC60YDQsNC90L3QvtCz0L4g0LrRg9GA0YHQvtGA0LAiCisKKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjU3NAorbXNnaWQgInNob3cgY3VycmVudCBkYXRlIGFuZCB0aW1lIgorbXNnc3RyICLQv9C+0LrQsNC30LDRgtGMINGC0LXQutGD0YnQuNC1INC00LDRgtGDINC4INCy0YDQtdC80Y8iCisKKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjkxOQorbXNnaWQgInNob3cgdGhlIHdpbmRvdyB0aXRsZSIKK21zZ3N0ciAi0L/QvtC60LDQt9Cw0YLRjCDQt9Cw0LPQvtC70L7QstC+0Log0L7QutC90LAiCisKKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjg4MworbXNnaWQgInNob3cgdmFyaW91cyBkZXZpY2Ugc3RhdHVzIGluZGljYXRvcnMiCittc2dzdHIgItC/0L7QutCw0LfQsNGC0Ywg0LjQvdC00LjQutCw0YLQvtGA0Ysg0YHQvtGB0YLQvtGP0L3QuNGPINGD0YHRgtGA0L7QudGB0YLQstCwIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6OTQ2Cittc2dpZCAic291bmRjYXJkIGRpZ2l0YWwgYXVkaW8iCittc2dzdHIgItC30LLRg9C60L7QstCw0Y8g0LrQsNGA0YLQsCAtINGG0LjRhNGA0L7QstC+0LUg0LDRg9C00LjQviIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjk0OAorbXNnaWQgInNvdW5kY2FyZCBzeW50aGVzaXplciIKK21zZ3N0ciAi0LfQstGD0LrQvtCy0LDRjyDQutCw0YDRgtCwINGB0LjQvdGC0LXQt9Cw0YLQvtGAIgorCisjOiBQcm9ncmFtcy9jbWQuYzoyNzcgUHJvZ3JhbXMvY29yZS5jOjEwNDYKK21zZ2lkICJzcGFjZSIKK21zZ3N0ciAi0L/RgNC+0LHQtdC7IgorCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDo2MjkKK21zZ2lkICJzcGVhayBjdXJyZW50IGNoYXJhY3RlciIKK21zZ3N0ciAi0L/RgNC+0LPQvtCy0LDRgNC40LLQsNGC0Ywg0YLQtdC60YPRidC40Lkg0YHQuNC80LLQvtC7IgorCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDo0NjUgUHJvZ3JhbXMvY21kcy5hdXRvLmg6NjY5Cittc2dpZCAic3BlYWsgY3VycmVudCBsaW5lIgorbXNnc3RyICLQv9GA0L7Qs9C+0LLQsNGA0LjQstCw0YLRjCDRgtC10LrRg9GJ0YPRjiDRgdGC0YDQvtC60YMiCisKKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjY0OQorbXNnaWQgInNwZWFrIGN1cnJlbnQgd29yZCIKK21zZ3N0ciAi0L/RgNC+0LPQvtCy0LDRgNC40LLQsNGC0Ywg0YLQtdC60YPRidC10LUg0YHQu9C+0LLQviIKKworIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6NDc3Cittc2dpZCAic3BlYWsgZnJvbSBjdXJyZW50IGxpbmUgdGhyb3VnaCBib3R0b20gb2Ygc2NyZWVuIgorbXNnc3RyICLQv9GA0L7Qs9C+0LLQsNGA0LjQstCw0YLRjCDQvtGCINGC0LXQutGD0YnQtdC5INGB0YLRgNC+0LrQuCDQtNC+INC60L7QvdGG0LAg0Y3QutGA0LDQvdCwIgorCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDo0NzEKK21zZ2lkICJzcGVhayBmcm9tIHRvcCBvZiBzY3JlZW4gdGhyb3VnaCBjdXJyZW50IGxpbmUiCittc2dzdHIgItC/0YDQvtCz0L7QstCw0YDQuNCy0LDRgtGMINC+0YIg0L3QsNGH0LDQu9CwINGN0LrRgNCw0L3QsCDQtNC+INGC0LXQutGD0YnQtdC5INGB0YLRgNC+0LrQuCIKKworIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6ODY0Cittc2dpZCAic3BlYWsgaW5kZW50IG9mIGN1cnJlbnQgbGluZSIKK21zZ3N0ciAi0L/RgNC+0LPQvtCy0LDRgNC40LLQsNGC0Ywg0L7RgtGB0YLRg9C/INGC0LXQutGD0YnQtdC5INGB0YLRgNC+0LrQuCIKKworIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6NzM2Cittc2dpZCAic3BlYWsgc3BlZWNoIGN1cnNvciBsb2NhdGlvbiIKK21zZ3N0ciAi0L/RgNC+0LPQvtCy0LDRgNC40LLQsNGC0Ywg0L/QvtC70L7QttC10L3QuNC1INGA0LXRh9C10LLQvtCz0L4g0LrRg9GA0YHQvtGA0LAiCisKKyM6IFByb2dyYW1zL2NvbmZpZy5jOjIwNDIKK21zZ2lkICJzcGVlY2ggZHJpdmVyIG5vdCBsb2FkYWJsZSIKK21zZ3N0ciAi0L3QtdCy0L7Qt9C80L7QttC90L4g0LfQsNCz0YDRg9C30LjRgtGMINGA0LXRh9C10LLQvtC5INC00YDQsNC50LLQtdGAIgorCisjOiBQcm9ncmFtcy9jb25maWcuYzoyMTkxCittc2dpZCAic3BlZWNoIGRyaXZlciByZXN0YXJ0aW5nIgorbXNnc3RyICLQv9C10YDQtdC30LDQv9GD0YHQuiDRgNC10YfQtdCy0L7Qs9C+INC00YDQsNC50LLQtdGA0LAiCisKKyM6IFByb2dyYW1zL2NtZF9zcGVlY2guYzoxMDQKK21zZ2lkICJzcGVlY2ggZHJpdmVyIHN0b3BwZWQiCittc2dzdHIgItGA0LXRh9C10LLQvtC5INC00YDQsNC50LLQtdGAINC+0YHRgtCw0L3QvtCy0LvQtdC9IgorCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDo3MjMKK21zZ2lkICJzcGVsbCBjdXJyZW50IHdvcmQiCittc2dzdHIgItC/0YDQvtC40LfQvdC10YHRgtC4INGC0LXQutGD0YnQtdC1INGB0LvQvtCy0L4g0L/QviDQsdGD0LrQstCw0LwiCisKKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjEwMjYKK21zZ2lkICJzdGFydCBuZXcgY2xpcGJvYXJkIGF0IGNoYXJhY3RlciIKK21zZ3N0ciAi0YHQvtC30LTQsNGC0Ywg0L3QvtCy0YvQuSDQsdGD0YTQtdGAINC+0LHQvNC10L3QsCDQv9C+0YHQu9C1INGB0LjQvNCy0L7Qu9CwIgorCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDoxMjA4Cittc2dpZCAic3RhcnQgdGV4dCBzZWxlY3Rpb24iCittc2dzdHIgItC90LDRh9Cw0YLRjCDQstGL0LTQtdC70LXQvdC40LUg0YLQtdC60YHRgtCwIgorCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDo3OTkKK21zZ2lkICJzdGFydCB0aGUgYnJhaWxsZSBkcml2ZXIiCittc2dzdHIgItC30LDQv9GD0YHRgtC40YLRjCDQtNGA0LDQudCy0LXRgCDQkdGA0LDQudC70Y8iCisKKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjgyMworbXNnaWQgInN0YXJ0IHRoZSBzY3JlZW4gZHJpdmVyIgorbXNnc3RyICLQt9Cw0L/Rg9GB0YLQuNGC0Ywg0Y3QutGA0LDQvdC90YvQuSDQtNGA0LDQudCy0LXRgCIKKworIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6ODExCittc2dpZCAic3RhcnQgdGhlIHNwZWVjaCBkcml2ZXIiCittc2dzdHIgItC30LDQv9GD0YHRgtC40YLRjCDRgNC10YfQtdCy0L7QuSDQtNGA0LDQudCy0LXRgCIKKworIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6NDUyCittc2dpZCAic3RvcCBzcGVha2luZyIKK21zZ3N0ciAi0L7RgdGC0LDQvdC+0LLQuNGC0Ywg0L/RgNC+0LPQvtCy0LDRgNC40LLQsNC90LjQtSIKKworIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6NzkzCittc2dpZCAic3RvcCB0aGUgYnJhaWxsZSBkcml2ZXIiCittc2dzdHIgItC+0YHRgtCw0L3QvtCy0LjRgtGMINC00YDQsNC50LLQtdGAINCR0YDQsNC50LvRjyIKKworIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6ODE3Cittc2dpZCAic3RvcCB0aGUgc2NyZWVuIGRyaXZlciIKK21zZ3N0ciAi0L7RgdGC0LDQvdC+0LLQuNGC0Ywg0Y3QutGA0LDQvdC90YvQuSDQtNGA0LDQudCy0LXRgCIKKworIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6ODA1Cittc2dpZCAic3RvcCB0aGUgc3BlZWNoIGRyaXZlciIKK21zZ3N0ciAi0L7RgdGC0LDQvdC+0LLQuNGC0Ywg0YDQtdGH0LXQstC+0Lkg0LTRgNCw0LnQstC10YAiCisKKyM6IFByb2dyYW1zL3hicmxhcGkuYzo2NTYKK21zZ2lkICJzdHJhbmdlIG9sZCBlcnJvciBoYW5kbGVyXG4iCittc2dzdHIgItC80LDRgdGC0LXRgCDQv9C+INC40YHQv9GA0LDQstC70LXQvdC40Y4gINGB0YLQsNGA0YvRhSDQvtGI0LjQsdC+0LpcbiIKKworIzogUHJvZ3JhbXMvYnJsdHR5LWNsZHIuYzozOQorbXNnaWQgInN0cmluZyIKK21zZ3N0ciAi0YbQtdC/0L7Rh9C60LAiCisKKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjEyNzMKK21zZ2lkICJzd2l0Y2ggdG8gY29tbWFuZCBjb250ZXh0IgorbXNnc3RyICLQv9C10YDQtdC60LvRjtGH0LjRgtGM0YHRjyDQsiDQutC+0LzQsNC90LTQvdGD0Y4g0YHRgtGA0L7QutGDIgorCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDoxMDU0Cittc2dpZCAic3dpdGNoIHRvIHNwZWNpZmljIHZpcnR1YWwgdGVybWluYWwiCittc2dzdHIgItC/0LXRgNC10LrQu9GO0YfQuNGC0YzRgdGPINC90LAg0LLRi9Cx0YDQsNC90L3Ri9C5INCy0LjRgNGC0YPQsNC70YzQvdGL0Lkg0YLQtdGA0LzQuNC90LDQuyIKKworIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6OTg3Cittc2dpZCAic3dpdGNoIHRvIHRoZSBuZXh0IHNjcmVlbiBhcmVhIgorbXNnc3RyICLQv9C10YDQtdC50YLQuCDQuiDRgdC70LXQtNGD0Y7RidC10Lkg0Y3QutGA0LDQvdC90L7QuSDQvtCx0LvQsNGB0YLQuCIKKworIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6NTEzCittc2dpZCAic3dpdGNoIHRvIHRoZSBuZXh0IHZpcnR1YWwgdGVybWluYWwiCittc2dzdHIgItC/0LXRgNC10LrQu9GO0YfQuNGC0YzRgdGPINC90LAg0YHQu9C10LTRg9GO0YnQuNC5INCy0LjRgNGC0YPQsNC70YzQvdGL0Lkg0YLQtdGA0LzQuNC90LDQuyIKKworIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6OTgxCittc2dpZCAic3dpdGNoIHRvIHRoZSBwcmV2aW91cyBzY3JlZW4gYXJlYSIKK21zZ3N0ciAi0L/QtdGA0LXQudGC0Lgg0Log0L/RgNC10LTRi9C00YPRidC10Lkg0Y3QutGA0LDQvdC90L7QuSDQvtCx0LvQsNGB0YLQuCIKKworIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6NTA3Cittc2dpZCAic3dpdGNoIHRvIHRoZSBwcmV2aW91cyB2aXJ0dWFsIHRlcm1pbmFsIgorbXNnc3RyICLQv9C10YDQtdC60LvRjtGH0LjRgtGM0YHRjyDQvdCwINC/0YDQtdC00YvQtNGD0YnQuNC5INCy0LjRgNGC0YPQsNC70YzQvdGL0Lkg0YLQtdGA0LzQuNC90LDQuyIKKworIzogUHJvZ3JhbXMvcGdtcHJpdnNfbGludXguYzoxOTY4Cittc2dpZCAic3dpdGNoZWQgdG8gdW5wcml2aWxlZ2VkIHVzZXIiCittc2dzdHIgIiDQv9C10YDQtdGF0L7QtCDQuiAg0L7QsdGL0YfQvdC+0LzRgyDQv9C+0LvRjNC30L7QstCw0YLQtdC70Y4gIgorCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDoxMjk0Cittc2dpZCAidGFiIGtleSIKK21zZ3N0ciAi0LrQu9Cw0LLQuNGI0LAg0YLQsNCx0YPQu9GP0YbQuNC4IgorCisjOiBQcm9ncmFtcy9jb25maWcuYzozMDAgUHJvZ3JhbXMvY29uZmlnLmM6MzA3Cittc2dpZCAidGV4dCIKK21zZ3N0ciAi0YLQtdC60YHRgiIKKworIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6MTI0NQorbXNnaWQgInR5cGUgYnJhaWxsZSBkb3RzIgorbXNnc3RyICLQstCy0LXRgdGC0Lgg0YLQvtGH0LrQuCDQkdGA0LDQudC70Y8iCisKKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjEyMzcKK21zZ2lkICJ0eXBlIHVuaWNvZGUgY2hhcmFjdGVyIgorbXNnc3RyICLQstCy0LXRgdGC0Lgg0YHQuNC80LLQvtC7INCyINGE0L7RgNC80LDRgtC1IFVuaWNvZGUiCisKKyM6IFByb2dyYW1zL3hicmxhcGkuYzo5NzQKK21zZ2lkICJ1bmV4cGVjdGVkIGJsb2NrIHR5cGUiCittc2dzdHIgItCy0L3QtdC30LDQv9C90LDRjyDQsdC70L7QutC40YDQvtCy0LrQsCDQstCy0L7QtNCwIgorCisjOiBQcm9ncmFtcy94YnJsYXBpLmM6ODY0Cittc2dpZCAidW5leHBlY3RlZCBjbWQiCittc2dzdHIgItC90LXQv9GA0LXQtNCy0LjQtNC10L3QvdC+0LUgY21kIgorCisjOiBQcm9ncmFtcy9jbWRfcXVldWUuYzoxNTcKK21zZ2lkICJ1bmhhbmRsZWQgY29tbWFuZCIKK21zZ3N0ciAi0L3QtdC+0LHRgNCw0LHQvtGC0LDQvdC90LDRjyDQutC+0LzQsNC90LTQsCIKKworIzogUHJvZ3JhbXMvY21kLmM6MTk4Cittc2dpZCAidW5rbm93biBjb21tYW5kIgorbXNnc3RyICLQvdC10LjQt9Cy0LXRgdGC0L3QsNGPINC60L7QvNCw0L3QtNCwIgorCisjOiBQcm9ncmFtcy9vcHRpb25zLmM6ODIyCittc2dpZCAidW5rbm93biBjb25maWd1cmF0aW9uIGRpcmVjdGl2ZSIKK21zZ3N0ciAi0L3QtdC40LfQstC10YHRgtC90LDRjyDQtNC40YDQtdC60YLQuNCy0LAgINC60L7QvdGE0LjQs9GD0YDQsNGG0LjQuCIKKworIzogUHJvZ3JhbXMvY29uZmlnLmM6NzI2Cittc2dpZCAidW5rbm93biBsb2cgbGV2ZWwgb3IgY2F0ZWdvcnkiCittc2dzdHIgItC90LXQuNC30LLQtdGB0YLQvdCw0Y8g0LfQsNC/0LjRgdGMINCyINC20YPRgNC90LDQu9C1INC40LvQuCDQutCw0YLQtdCz0L7RgNC40Y8iCisKKyMuIGFuIHVua25vd24gb3B0aW9uIGhhcyBiZWVuIHNwZWNpZmllZAorIzogUHJvZ3JhbXMvb3B0aW9ucy5jOjU2OQorbXNnaWQgInVua25vd24gb3B0aW9uIgorbXNnc3RyICLQvdC10LjQt9Cy0LXRgdGC0L3QsNGPINC+0L/RhtC40Y8iCisKKyM6IFByb2dyYW1zL3BhcnNlLmM6NTAxCittc2dpZCAidW5zdXBwb3J0ZWQgcGFyYW1ldGVyIgorbXNnc3RyICLQvdC10L/QvtC00LTQtdGA0LbQuNCy0LDQtdC80YvQuSDQv9Cw0YDQsNC80LXRgtGAIgorCisjOiBQcm9ncmFtcy9zcGsuYzoxNzIKK21zZ2lkICJ2b2x1bWUiCittc2dzdHIgItCz0YDQvtC80LrQvtGB0YLRjCIKKworIy4gTFJHQgorIzogUHJvZ3JhbXMvY21kX3V0aWxzLmM6MTU5Cittc2dpZCAid2hpdGUiCittc2dzdHIgItCx0LXQu9GL0LkiCisKKyM6IFByb2dyYW1zL3BnbXByaXZzX2xpbnV4LmM6MTgzMAorbXNnaWQgIndvcmtpbmcgZGlyZWN0b3J5IGNoYW5nZWQiCittc2dzdHIgItCw0LrRgtC40LLQvdGL0Lkg0LrQsNGC0LDQu9C+0LMg0LjQt9C80LXQvdGR0L0iCisKKyM6IFByb2dyYW1zL3hicmxhcGkuYzo5MTEKKyMsIGMtZm9ybWF0Cittc2dpZCAieGJybGFwaTogQ291bGRuJ3QgZmluZCBhIGtleWNvZGUgdG8gcmVtYXAgZm9yIHNpbXVsYXRpbmcgdW5ib3VuZCAga2V5c3ltICUwOFhcbiIKK21zZ3N0ciAieGJybGFwaTog0J3QtSDQvNC+0LPRgyDQvdCw0LnRgtC4INC60L7QtCDQtNC70Y8g0L/QtdGA0LXQt9Cw0L/QuNGB0LggICDQuCDQutC+0L/QuNGA0L7QstCw0L3QuNGPICDQt9C90LDRh9C10L3QuNC5INC+0YLQtNC10LvRjNC90YvRhSDQutC70LDQstC40YggJTA4WFxuIgorCisjOiBQcm9ncmFtcy94YnJsYXBpLmM6ODk4CisjLCBjLWZvcm1hdAorbXNnaWQgInhicmxhcGk6IENvdWxkbid0IGZpbmQgbW9kaWZpZXJzIHRvIGFwcGx5IHRvICVkIGZvciBnZXR0aW5nIGtleXN5bSAlMDhYXG4iCittc2dzdHIgInhicmxhcGk6INCd0LUg0YPQtNCw0LvQvtGB0Ywg0L3QsNC50YLQuCDQs9C+0LTQvdGL0LUg0Log0L/RgNC40LzQtdC90LXQvdC40Y4g0LzQvtC00LjRhNC40LrQsNGC0L7RgNGLICVkINC00LvRjyDQv9C+0LvRg9GH0LXQvdC40Y8g0LfQvdCw0YfQtdC90LjRjyDQutC70LDQstC40YjQuCAlMDhYXG4iCisKKyM6IFByb2dyYW1zL3hicmxhcGkuYzo4NzQKKyMsIGMtZm9ybWF0Cittc2dpZCAieGJybGFwaTogQ291bGRuJ3QgdHJhbnNsYXRlIGtleXN5bSAlMDhYIHRvIGtleWNvZGUuXG4iCittc2dzdHIgInhicmxhcGk6INCd0LUg0YPQtNCw0LvQvtGB0Ywg0L/QtdGA0LXQstC10YHRgtC4INC30L3QsNGH0LXQvdC40LUg0LrQu9Cw0LLQuNGI0LggJTA4WCDQsiBr0LrQvtC00L7QstGL0Lkg0LrQu9GO0YcuXG4iCisKKyM6IFByb2dyYW1zL3hicmxhcGkuYzo0MTUKKyMsIGMtZm9ybWF0Cittc2dpZCAieGJybGFwaTogWCBFcnJvciAlZCwgJXMgb24gZGlzcGxheSAlc1xuIgorbXNnc3RyICJ4YnJsYXBpOiDQvdC10LjQt9Cy0LXRgdGC0L3QsNGPINCe0YjQuNCx0LrQsCAlZCwgJXMg0L3QsCDQtNC40YHQv9C70LXQtSAlc1xuIgorCisjOiBQcm9ncmFtcy94YnJsYXBpLmM6NDU3CisjLCBjLWZvcm1hdAorbXNnaWQgInhicmxhcGk6IGJhZCBmb3JtYXQgZm9yIFZUIG51bWJlclxuIgorbXNnc3RyICJ4YnJsYXBpOiDQvdC10L/QvtC00YXQvtC00Y/RidC40Lkg0YTQvtGA0LzQsNGCINGH0LjRgdC70LAgVlRcbiIKKworIzogUHJvZ3JhbXMveGJybGFwaS5jOjQ2MAorIywgYy1mb3JtYXQKK21zZ2lkICJ4YnJsYXBpOiBiYWQgdHlwZSBmb3IgVlQgbnVtYmVyXG4iCittc2dzdHIgInhicmxhcGk6INC90LXQv9C+0LTRhdC+0LTRj9GJ0LjQuSDQstC40LQg0YfQuNGB0LvQsCBWVFxuIgorCisjOiBQcm9ncmFtcy94YnJsYXBpLmM6NDM5CisjLCBjLWZvcm1hdAorbXNnaWQgInhicmxhcGk6IGNhbm5vdCBnZXQgcm9vdCB3aW5kb3cgWEZyZWU4Nl9WVCBwcm9wZXJ0eVxuIgorbXNnc3RyICJ4YnJsYXBpOiDQvdC1INC80L7Qs9GDINC/0L7Qu9GD0YfQuNGC0Ywg0LjRgdGF0L7QtNC90L7QtSDQvtC60L3QviBYRnJlZTg2X1ZUINGB0LLQvtC50YHRgtCy0L5cbiIKKworIzogUHJvZ3JhbXMveGJybGFwaS5jOjMxNgorIywgYy1mb3JtYXQKK21zZ2lkICJ4YnJsYXBpOiBjYW5ub3Qgd3JpdGUgd2luZG93IG5hbWUgJXNcbiIKK21zZ3N0ciAieGJybGFwaTog0L3QtSDQvNC+0LPRgyDQt9Cw0L/QuNGB0LDRgtGMINC40LzRjyDQvtC60L3QsCAlc1xuIgorCisjOiBQcm9ncmFtcy94YnJsYXBpLmM6NzY0CisjLCBjLWZvcm1hdAorbXNnaWQgInhicmxhcGk6IGRpZG4ndCBncmFiIHBhcmVudCBvZiAlIzAxMGx4XG4iCittc2dzdHIgInhicmxhcGk6INC90LUg0YPQtNCw0LvQvtGB0Ywg0L/QtdGA0LXRhdCy0LDRgtC40YLRjCDQuNGB0YLQvtGH0L3QuNC6ICUjMDEwbHhcbiIKKworIzogUHJvZ3JhbXMveGJybGFwaS5jOjc4MgorIywgYy1mb3JtYXQKK21zZ2lkICJ4YnJsYXBpOiBkaWRuJ3QgZ3JhYiB3aW5kb3cgJSMwMTBseFxuIgorbXNnc3RyICJ4YnJsYXBpOiDQvdC1INGD0LTQsNC70L7RgdGMINC/0LXRgNC10YXQstCw0YLQuNGC0Ywg0L7QutC90L4gJSMwMTBseFxuIgorCisjOiBQcm9ncmFtcy94YnJsYXBpLmM6NTgyCisjLCBjLWZvcm1hdAorbXNnaWQgInhicmxhcGk6IGRpZG4ndCBncmFiIHdpbmRvdyAlIzAxMGx4IGJ1dCBnb3QgZm9jdXNcbiIKK21zZ3N0ciAieGJybGFwaTog0L3QtSDRg9C00LDQu9C+0YHRjCDQv9C10YDQtdGF0LLQsNGC0LjRgtGMINC+0LrQvdC+ICUjMDEwbHgg0L7QtNC90LDQutC+INGD0LTQsNC70L7RgdGMINC/0L7Qu9GD0YfQuNGC0Ywg0YTQvtC60YPRgVxuIgorCisjOiBQcm9ncmFtcy94YnJsYXBpLmM6NDQ4CisjLCBjLWZvcm1hdAorbXNnaWQgInhicmxhcGk6IG1vcmUgdGhhbiBvbmUgaXRlbSBmb3IgVlQgbnVtYmVyXG4iCittc2dzdHIgInhicmxhcGk6INCx0L7Qu9C10LUg0L7QtNC90L7Qs9C+INGN0LvQtdC80LXQvdGC0LAg0LTQu9GPINGH0LjRgdC70LAgVlRcbiIKKworIzogUHJvZ3JhbXMveGJybGFwaS5jOjQzMworIywgYy1mb3JtYXQKK21zZ2lkICJ4YnJsYXBpOiBubyBYRnJlZTg2X1ZUIGF0b21cbiIKK21zZ3N0ciAieGJybGFwaTog0L3QtdGCIFhGcmVlODZfVlQgYXRvbVxuIgorCisjOiBQcm9ncmFtcy94YnJsYXBpLmM6NDQ0CisjLCBjLWZvcm1hdAorbXNnaWQgInhicmxhcGk6IG5vIGl0ZW1zIGZvciBWVCBudW1iZXJcbiIKK21zZ3N0ciAieGJybGFwaTog0L3QtdGCINGN0LvQtdC80LXQvdGC0L7QsiDQtNC70Y8g0YfQuNGB0LvQsCBWVFxuIgorCisjOiBQcm9ncmFtcy94YnJsYXBpLmM6NDE2CisjLCBjLWZvcm1hdAorbXNnaWQgInhicmxhcGk6IHJlc291cmNlICUjMDEwbHgsIHJlcSAldToldVxuIgorbXNnc3RyICJ4YnJsYXBpOiDQuNGB0YLQvtGH0L3QuNC6ICUjMDEwbHgsIHJlcSAldToldVxuIgorCisjLiAic2hvdWxkbid0IGhhcHBlbiIgZXZlbnRzCisjOiBQcm9ncmFtcy94YnJsYXBpLmM6ODExCisjLCBjLWZvcm1hdAorbXNnaWQgInhicmxhcGk6IHVuaGFuZGxlZCBldmVudCB0eXBlOiAlZFxuIgorbXNnc3RyICJ4YnJsYXBpOiDQvdC10L7QsdGA0LDQsdC+0YLQsNC90L3Ri9C5INCy0LjQtCDRgdC+0LHRi9GC0LjRjzogJWRcbiIKKworIzogUHJvZ3JhbXMveGJybGFwaS5jOjc5MAorIywgYy1mb3JtYXQKK21zZ2lkICJ4YnJsYXBpOiB3aW5kb3cgJSMwMTBseCBjaGFuZ2VkIHRvIE5VTEwgbmFtZVxuIgorbXNnc3RyICJ4YnJsYXBpOiDQvtC60L3QviAlIzAxMGx4INC40LfQvNC10L3QtdC90L4g0L3QsCDQvdGD0LvQtdCy0L7QtSDQuNC80Y9cbiIKKworIy4gTFJHCisjOiBQcm9ncmFtcy9jbWRfdXRpbHMuYzoxNTgKK21zZ2lkICJ5ZWxsb3ciCittc2dzdHIgItC20ZHQu9GC0YvQuSIKZGlmZiAtLWdpdCBhL01lc3NhZ2VzL3poLnBvIGIvTWVzc2FnZXMvemgucG8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2JjMWQ1ZgotLS0gL2Rldi9udWxsCisrKyBiL01lc3NhZ2VzL3poLnBvCkBAIC0wLDAgKzEsNDMzMSBAQAorIyBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorIyAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyMKKyMgQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorIworIyBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorIworIyBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisjIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyMgbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisjCisjIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisjCittc2dpZCAiIgorbXNnc3RyICIiCisiUHJvamVjdC1JZC1WZXJzaW9uOiBicmx0dHkgNC4zXG4iCisiUmVwb3J0LU1zZ2lkLUJ1Z3MtVG86IEJSTFRUWUBicmx0dHkuYXBwXG4iCisiUE9ULUNyZWF0aW9uLURhdGU6IDIwMjEtMDktMDQgMjA6MjYrMDIwMFxuIgorIlBPLVJldmlzaW9uLURhdGU6IDIwMjEtMDktMDQgMjE6MjcrMDAwMFxuIgorIkxhc3QtVHJhbnNsYXRvcjog6auY55Sf5pe6IDxjb3NjZWxsQG1vbGVyYXQubmV0PlxuIgorIkxhbmd1YWdlLVRlYW06IEZyaWVuZHMgb2YgQlJMVFRZIDxCUkxUVFlAYnJsdHRZLmFwcD5cbiIKKyJMYW5ndWFnZTogemhcbiIKKyJNSU1FLVZlcnNpb246IDEuMFxuIgorIkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtOFxuIgorIkNvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IFVURi04XG4iCisiUGx1cmFsLUZvcm1zOiBucGx1cmFscz0xOyBwbHVyYWw9MDtcbiIKKworIzogUHJvZ3JhbXMvYnJsdHR5LmM6MTY3CisjLCBjLWZvcm1hdAorbXNnaWQgIlwiJXNcIiBzdGFydGVkIGFzIFwiJXNcIlxuIgorbXNnc3RyICJcIiVzXCIg5ZWf5YuV54K6IFwiJXNcIlxuIgorCisjLiB4Z2V0dGV4dDogVGhpcyBwaHJhc2UgZGVzY3JpYmVzIHRoZSBjb2xvdXIgb2YgYSBjaGFyYWN0ZXIgb24gdGhlIHNjcmVlbi4KKyMuIHhnZXR0ZXh0OiAlMSRzIGlzIHRoZSAoYWxyZWFkeSB0cmFuc2xhdGVkKSBmb3JlZ3JvdW5kIGNvbG91ci4KKyMuIHhnZXR0ZXh0OiAlMiRzIGlzIHRoZSAoYWxyZWFkeSB0cmFuc2xhdGVkKSBiYWNrZ3JvdW5kIGNvbG91ci4KKyM6IFByb2dyYW1zL2NtZF91dGlscy5jOjE2OQorIywgYy1mb3JtYXQKK21zZ2lkICIlMSRzIG9uICUyJHMiCittc2dzdHIgIiUxJHMg5ZyoICUyJHMiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIGhvdyB0byBzYXkgd2hlbiB0aGUgdGltZSBpcyBleGFjdGx5IG9uIChpLmUuIHplcm8gbWludXRlcyBhZnRlcikgYW4gaG91ci4KKyMuIHhnZXR0ZXh0OiAoJXUgcmVwcmVzZW50cyB0aGUgbnVtYmVyIG9mIGhvdXJzKQorIzogUHJvZ3JhbXMvY21kX21pc2NlbGxhbmVvdXMuYzo4OQorIywgYy1mb3JtYXQKK21zZ2lkICIldSBvJ2Nsb2NrIgorbXNnaWRfcGx1cmFsICIldSBvJ2Nsb2NrIgorbXNnc3RyWzBdICIldSDpu57pkJgiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIGEgbnVtYmVyICgldSkgb2Ygc2Vjb25kcyAodGltZSB1bml0cykuCisjOiBQcm9ncmFtcy9jbWRfbWlzY2VsbGFuZW91cy5jOjEwNworIywgYy1mb3JtYXQKK21zZ2lkICIldSBzZWNvbmQiCittc2dpZF9wbHVyYWwgIiV1IHNlY29uZHMiCittc2dzdHJbMF0gIiV1IOenkumQmCIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjU0MyBQcm9ncmFtcy9tZW51X3ByZWZzLmM6NTQ0CisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6NTQ2IFByb2dyYW1zL21lbnVfcHJlZnMuYzo1NDcKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzo1NTAgUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjU1MQorIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjU1MiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6NTU0CisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6NTU1IFByb2dyYW1zL21lbnVfcHJlZnMuYzo1NjEKK21zZ2lkICIxIGNlbGwiCittc2dzdHIgIjEg5pa5IgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6OTAwCittc2dpZCAiMSBzZWNvbmQiCittc2dzdHIgIjEg56eSIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6OTYyCittc2dpZCAiMTAgc2Vjb25kcyIKK21zZ3N0ciAiMTAg56eSIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6MTI3MworbXNnaWQgIjEyIEhvdXIiCittc2dzdHIgIjEyIOWwj+aZgiIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjU0MiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6NTQ1CisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6NTQ4IFByb2dyYW1zL21lbnVfcHJlZnMuYzo1NDkKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzo1NTMKK21zZ2lkICIyIGNlbGxzIgorbXNnc3RyICIyIOaWuSIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjkwMQorbXNnaWQgIjIgc2Vjb25kcyIKK21zZ3N0ciAiMiDnp5IiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzo5NjMKK21zZ2lkICIyMCBzZWNvbmRzIgorbXNnc3RyICIyMCDnp5IiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzoxMjcyCittc2dpZCAiMjQgSG91ciIKK21zZ3N0ciAiMjQg5bCP5pmCIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6ODk4Cittc2dpZCAiMjUwIG1pbGxpc2Vjb25kcyIKK21zZ3N0ciAiMjUwIOavq+enkiIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjU1NyBQcm9ncmFtcy9tZW51X3ByZWZzLmM6NTU4CisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6NTU5IFByb2dyYW1zL21lbnVfcHJlZnMuYzo1NjAKK21zZ2lkICIzIGNlbGxzIgorbXNnc3RyICIzIOaWuSIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjk2NAorbXNnaWQgIjQwIHNlY29uZHMiCittc2dzdHIgIjQwIOenkiIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjk2MQorbXNnaWQgIjUgc2Vjb25kcyIKK21zZ3N0ciAiNSDnp5IiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzo4OTkKK21zZ2lkICI1MDAgbWlsbGlzZWNvbmRzIgorbXNnc3RyICI1MDAg5q+r56eSIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6NzMzCittc2dpZCAiNi1kb3QiCittc2dzdHIgIjYt6bueIgorCisjOiBQcm9ncmFtcy9icmx0dHktdHRiLmM6MTc5Cittc2dpZCAiOC1iaXQgY2hhcmFjdGVyIHNldCB0byB1c2UuIgorbXNnc3RyICLopoHnlKjnmoTlhavkvY3lhYPlrZflhYPpm4YiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzo3MzIKK21zZ2lkICI4LWRvdCIKK21zZ3N0ciAiOC3pu54iCisKKyM6IFByb2dyYW1zL3Njcl9tZW51LmM6MTA0Cittc2dpZCAiPG9mZj4iCittc2dzdHIgIjzpl5w+IgorCisjOiBQcm9ncmFtcy9jb25maWcuYzoxNTA2Cittc2dpZCAiQVBJIFBhcmFtZXRlciIKK21zZ3N0ciAiQVBJIOWPg+aVuCIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBQQVNTQVQgY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjE0NzEKK21zZ2lkICJBVCAoc2V0IDIpIGtleWJvYXJkIHNjYW4gY29kZSIKK21zZ3N0ciAiQVQgKHNldCAyKSDpjbXnm6TmjoPmj4/norwiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBuYW1lIG9mIE1JREkgbXVzaWNhbCBpbnN0cnVtZW50ICMyMiAoaW4gdGhlIE9yZ2FuIGdyb3VwKS4KKyM6IFByb2dyYW1zL21pZGkuYzoxNDUKK21zZ2lkICJBY2NvcmRpb24iCittc2dzdHIgIumiqOeQtCIKKworIy4gQmFzcworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIG5hbWUgb2YgTUlESSBtdXNpY2FsIGluc3RydW1lbnQgIzMzIChpbiB0aGUgQmFzcyBncm91cCkuCisjOiBQcm9ncmFtcy9taWRpLmM6MTgwCittc2dpZCAiQWNvdXN0aWMgQmFzcyIKK21zZ3N0ciAi5L2O6Z+z6KKr56eBIgorCisjLiBQaWFubworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIG5hbWUgb2YgTUlESSBtdXNpY2FsIGluc3RydW1lbnQgIzEgKGluIHRoZSBQaWFubyBncm91cCkuCisjOiBQcm9ncmFtcy9taWRpLmM6ODAKK21zZ2lkICJBY291c3RpYyBHcmFuZCBQaWFubyIKK21zZ3N0ciAi5bmz6Ie66Yu855C0IgorCisjLiBHdWl0YXIKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBuYW1lIG9mIE1JREkgbXVzaWNhbCBpbnN0cnVtZW50ICMyNSAoaW4gdGhlIEd1aXRhciBncm91cCkuCisjOiBQcm9ncmFtcy9taWRpLmM6MTU1Cittc2dpZCAiQWNvdXN0aWMgR3VpdGFyIChueWxvbikiCittc2dzdHIgIuWwvOm+jeWQieS7liIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIG5hbWUgb2YgTUlESSBtdXNpY2FsIGluc3RydW1lbnQgIzI2IChpbiB0aGUgR3VpdGFyIGdyb3VwKS4KKyM6IFByb2dyYW1zL21pZGkuYzoxNTgKK21zZ2lkICJBY291c3RpYyBHdWl0YXIgKHN0ZWVsKSIKK21zZ3N0ciAi6Yu85bym5ZCJ5LuWIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6MTI5OQorbXNnaWQgIkFmdGVyIFRpbWUiCittc2dzdHIgIuW+jOaZgumWkyIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIG5hbWUgb2YgTUlESSBtdXNpY2FsIGluc3RydW1lbnQgIzExNCAoaW4gdGhlIFBlcmN1c3NpdmUgZ3JvdXApLgorIzogUHJvZ3JhbXMvbWlkaS5jOjQzNAorbXNnaWQgIkFnb2dvIgorbXNnc3RyICJBZ29nbyIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjE0ODcKK21zZ2lkICJBbGVydCIKK21zZ3N0ciAi6K2m56S6IgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6MTEwNAorbXNnaWQgIkFsZXJ0IERvdHMiCittc2dzdHIgIuitpuekuum7nuS9jSIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjExMDkKK21zZ2lkICJBbGVydCBNZXNzYWdlcyIKK21zZ3N0ciAi6K2m56S66KiK5oGvIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6MTA0OQorbXNnaWQgIkFsZXJ0IFR1bmVzIgorbXNnc3RyICLorabnpLrpn7MiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzo4NjQgUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjExNDMKK21zZ2lkICJBbGwiCittc2dzdHIgIuWFqOmDqCIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjU1NQorbXNnaWQgIkFscGhhYmV0aWMgQ3Vyc29yIENvb3JkaW5hdGVzIgorbXNnc3RyICLlrZfmr43muLjmqJnluqfmqJkiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzo1NTQKK21zZ2lkICJBbHBoYWJldGljIFdpbmRvdyBDb29yZGluYXRlcyIKK21zZ3N0ciAi5a2X5q+N6KaW56qX5bqn5qiZIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgbmFtZSBvZiBNSURJIG11c2ljYWwgaW5zdHJ1bWVudCAjNjYgKGluIHRoZSBSZWVkIGdyb3VwKS4KKyM6IFByb2dyYW1zL21pZGkuYzoyODMKK21zZ2lkICJBbHRvIFNheG9waG9uZSIKK21zZ3N0ciAi5Lit6Z+z6Jap5YWL5pav6aKoIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgbmFtZSBvZiBNSURJIG11c2ljYWwgaW5zdHJ1bWVudCAjMTI3IChpbiB0aGUgU291bmQgRWZmZWN0cyBncm91cCkuCisjOiBQcm9ncmFtcy9taWRpLmM6NDc0Cittc2dpZCAiQXBwbGF1c2UiCittc2dzdHIgIuaOjOiBsiIKKworIzogUHJvZ3JhbXMvbG9nLmM6MTE4Cittc2dpZCAiQXN5bmMgRXZlbnRzIgorbXNnc3RyICLpnZ7lkIzmraXkuovku7YiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzo4MDcKK21zZ2lkICJBdHRyaWJ1dGVzIEJsaW5rIFBlcmlvZCIKK21zZ3N0ciAi5bGs5oCn6Lez5YuV5YW2IgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6ODE1Cittc2dpZCAiQXR0cmlidXRlcyBQZXJjZW50IFZpc2libGUiCittc2dzdHIgIuWPr+imi+eahOWxrOaAp+eZvuWIhuavlCIKKworIzogUHJvZ3JhbXMvY29uZmlnLmM6OTk5IFByb2dyYW1zL21lbnVfcHJlZnMuYzoxNDAyCittc2dpZCAiQXR0cmlidXRlcyBUYWJsZSIKK21zZ3N0ciAi5bGs5oCn6KGoIgorCisjOiBQcm9ncmFtcy9hbGVydC5jOjE2OAorbXNnaWQgIkF1dG9yZWxlYXNlIgorbXNnc3RyICLoh6rli5XmlL7plosiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzo5NjcKK21zZ2lkICJBdXRvcmVsZWFzZSBUaW1lIgorbXNnc3RyICLoh6rli5XmlL7plovmmYLplpMiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzo5ODQKK21zZ2lkICJBdXRvcmVwZWF0IEVuYWJsZWQiCittc2dzdHIgIuiHquWLlemHjeikh+WVn+eUqCIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjk5MAorbXNnaWQgIkF1dG9yZXBlYXQgSW50ZXJ2YWwiCittc2dzdHIgIuiHquWLlemHjeikh+mWk+malCIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjk5NworbXNnaWQgIkF1dG9yZXBlYXQgUGFubmluZyIKK21zZ3N0ciAi6Ieq5YuV6YeN6KSH56e75YuVIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6MTE4NgorbXNnaWQgIkF1dG9zcGVhayIKK21zZ3N0ciAi6Ieq5YuV5pyX6K6AIgorCisjOiBQcm9ncmFtcy9jb25maWcuYzoxOTUyCittc2dpZCAiQlJMVFRZIHN0b3BwZWQiCittc2dzdHIgIkJSTFRUWSDlgZzmraIiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBuYW1lIG9mIE1JREkgbXVzaWNhbCBpbnN0cnVtZW50ICMxMTAgKGluIHRoZSBFdGhuaWMgZ3JvdXApLgorIzogUHJvZ3JhbXMvbWlkaS5jOjQyMQorbXNnaWQgIkJhZyBQaXBlIgorbXNnc3RyICLmsLTnrqEiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBuYW1lIG9mIE1JREkgbXVzaWNhbCBpbnN0cnVtZW50ICMxMDYgKGluIHRoZSBFdGhuaWMgZ3JvdXApLgorIzogUHJvZ3JhbXMvbWlkaS5jOjQwOQorbXNnaWQgIkJhbmpvIgorbXNnc3RyICLmlpHps6kiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBuYW1lIG9mIE1JREkgbXVzaWNhbCBpbnN0cnVtZW50ICM2OCAoaW4gdGhlIFJlZWQgZ3JvdXApLgorIzogUHJvZ3JhbXMvbWlkaS5jOjI4OQorbXNnaWQgIkJhcml0b25lIFNheG9waG9uZSIKK21zZ3N0ciAi55S35Lit6Z+z6Jap5YWL5pav6aKoIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgbmFtZSBvZiBNSURJIG11c2ljYWwgaW5zdHJ1bWVudCBncm91cCAjNS4KKyM6IFByb2dyYW1zL21pZGkuYzozNworbXNnaWQgIkJhc3MiCittc2dzdHIgIuiiq+engSIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIG5hbWUgb2YgTUlESSBtdXNpY2FsIGluc3RydW1lbnQgIzcxIChpbiB0aGUgUmVlZCBncm91cCkuCisjOiBQcm9ncmFtcy9taWRpLmM6Mjk4Cittc2dpZCAiQmFzc29vbiIKK21zZ3N0ciAi5L2O6Z+z566hIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6MTA1NgorbXNnaWQgIkJlZXBlciIKK21zZ3N0ciAi57+B6bO05ZmoIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6MTI5OAorbXNnaWQgIkJlZm9yZSBUaW1lIgorbXNnc3RyICLliY3mmYLplpMiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBuYW1lIG9mIE1JREkgbXVzaWNhbCBpbnN0cnVtZW50ICMxMjQgKGluIHRoZSBTb3VuZCBFZmZlY3RzIGdyb3VwKS4KKyM6IFByb2dyYW1zL21pZGkuYzo0NjUKK21zZ2lkICJCaXJkIFR3ZWV0IgorbXNnc3RyICLps6Xps7QiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzo4MDEKK21zZ2lkICJCbGlua2luZyBBdHRyaWJ1dGVzIgorbXNnc3RyICLot7Pli5XlsazmgKciCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzo4MjMKK21zZ2lkICJCbGlua2luZyBDYXBpdGFscyIKK21zZ3N0ciAi6Lez5YuV5aSn5a+r5a2X5q+NIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6Nzc0Cittc2dpZCAiQmxpbmtpbmcgU2NyZWVuIEN1cnNvciIKK21zZ3N0ciAi6Lez5YuV5ri45qiZIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6MTI0NAorbXNnaWQgIkJsaW5raW5nIFNwZWVjaCBDdXJzb3IiCittc2dzdHIgIui3s+WLleiqnumfs+a4uOaomSIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjY2NSBQcm9ncmFtcy9tZW51X3ByZWZzLmM6MTM1OAorbXNnaWQgIkJsb2NrIgorbXNnc3RyICLljYDlv6siCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBuYW1lIG9mIE1JREkgbXVzaWNhbCBpbnN0cnVtZW50ICM3NyAoaW4gdGhlIFBpcGUgZ3JvdXApLgorIzogUHJvZ3JhbXMvbWlkaS5jOjMxNworbXNnaWQgIkJsb3duIEJvdHRsZSIKK21zZ3N0ciAi55O25a2QIgorCisjOiBQcm9ncmFtcy9sb2cuYzoxNDIKK21zZ2lkICJCbHVldG9vdGggSS9PIgorbXNnc3RyICLol43oir3ovLjlhaUv6Ly45Ye6IgorCisjOiBQcm9ncmFtcy9jb25maWcuYzoxNzI3Cittc2dpZCAiQnJhaWxsZSBEZXZpY2UiCittc2dzdHIgIum7nuWtl+ioreWCmSIKKworIzogUHJvZ3JhbXMvY29uZmlnLmM6MTcyMworbXNnaWQgIkJyYWlsbGUgRHJpdmVyIgorbXNnc3RyICLpu57lrZfpqYXli5UiCisKKyM6IFByb2dyYW1zL2xvZy5jOjE0OAorbXNnaWQgIkJyYWlsbGUgRHJpdmVyIEV2ZW50cyIKK21zZ3N0ciAi6bue5a2X6amF5YuV5LqL5Lu2IgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6NzUyCittc2dpZCAiQnJhaWxsZSBGaXJtbmVzcyIKK21zZ3N0ciAi6bue5a2X5by35bqmIgorCisjOiBQcm9ncmFtcy9sb2cuYzo4MgorbXNnaWQgIkJyYWlsbGUgS2V5IEV2ZW50cyIKK21zZ3N0ciAi6bue5a2X5oyJ6Y215LqL5Lu2IgorCisjOiBQcm9ncmFtcy9jb25maWcuYzoxNzI2Cittc2dpZCAiQnJhaWxsZSBQYXJhbWV0ZXIiCittc2dzdHIgIum7nuWtl+WPg+aVuCIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjY5OAorbXNnaWQgIkJyYWlsbGUgUHJlc2VudGF0aW9uIgorbXNnc3RyICLpu57lrZfpoa/npLoiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzoxMzg1Cittc2dpZCAiQnJhaWxsZSBUYWJsZXMiCittc2dzdHIgIum7nuWtl+ihqCIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjkzMgorbXNnaWQgIkJyYWlsbGUgVHlwaW5nIgorbXNnc3RyICLpu57lrZfovLjlhaUiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzo3MDYKK21zZ2lkICJCcmFpbGxlIFZhcmlhbnQiCittc2dzdHIgIum7nuWtl+eorumhniIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjg4NQorbXNnaWQgIkJyYWlsbGUgV2luZG93IE92ZXJsYXAiCittc2dzdHIgIum7nuWtl+imlueql+mHjeeWiiIKKworIzogUHJvZ3JhbXMvY29uZmlnLmM6NDczCisjLCBjLWZvcm1hdAorbXNnaWQgIkJyYWlsbGUgZHJpdmVyIGNvZGUgKCVzLCAlcywgb3Igb25lIG9mIHslc30pLiIKK21zZ3N0ciAi6bue5a2X6amF5YuV56K8ICglcywgJXMsIOaIliB7JXN9IOS5i+S4gCIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIG5hbWUgb2YgTUlESSBtdXNpY2FsIGluc3RydW1lbnQgZ3JvdXAgIzguCisjOiBQcm9ncmFtcy9taWRpLmM6NDYKK21zZ2lkICJCcmFzcyIKK21zZ3N0ciAi6YqF566hIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgbmFtZSBvZiBNSURJIG11c2ljYWwgaW5zdHJ1bWVudCAjNjIgKGluIHRoZSBCcmFzcyBncm91cCkuCisjOiBQcm9ncmFtcy9taWRpLmM6MjcwCittc2dpZCAiQnJhc3MgU2VjdGlvbiIKK21zZ3N0ciAi6YqF566h57WEIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgbmFtZSBvZiBNSURJIG11c2ljYWwgaW5zdHJ1bWVudCAjMTIyIChpbiB0aGUgU291bmQgRWZmZWN0cyBncm91cCkuCisjOiBQcm9ncmFtcy9taWRpLmM6NDU5Cittc2dpZCAiQnJlYXRoIE5vaXNlIgorbXNnc3RyICLlkbzlkLjogbIiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBuYW1lIG9mIE1JREkgbXVzaWNhbCBpbnN0cnVtZW50ICMyIChpbiB0aGUgUGlhbm8gZ3JvdXApLgorIzogUHJvZ3JhbXMvbWlkaS5jOjgzCittc2dpZCAiQnJpZ2h0IEFjb3VzdGljIFBpYW5vIgorbXNnc3RyICLmmI7kuq7pi7znkLQiCisKKyM6IFByb2dyYW1zL3hicmxhcGkuYzo5MworbXNnaWQgIkJybEFQSSBhdXRob3JpemF0aW9uL2F1dGhlbnRpY2F0aW9uIHNjaGVtZXMiCittc2dzdHIgIkJybEFQSSDmjojmrIov6Lqr5Lu96amX6K2J5pa55qGIIgorCisjOiBQcm9ncmFtcy94YnJsYXBpLmM6ODYKK21zZ2lkICJCcmxBUEkgaG9zdCBhbmQvb3IgcG9ydCB0byBjb25uZWN0IHRvIgorbXNnc3RyICLopoHpgKPmjqXnmoQgQnJsQVBJIOS4u+apn+WSjC/miJbln6Dlj6MiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzoxNDIwCittc2dpZCAiQnVpbGQgSW5mb3JtYXRpb24iCittc2dzdHIgIuW7uueri+izh+ioiiIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjcyNQorbXNnaWQgIkNhcGl0YWxpemF0aW9uIE1vZGUiCittc2dzdHIgIuWkp+Wvq+aooeW8jyIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjgyOAorbXNnaWQgIkNhcGl0YWxzIEJsaW5rIFBlcmlvZCIKK21zZ3N0ciAi5aSn5a+r6Lez5YuV6YCx5pyfIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6ODM2Cittc2dpZCAiQ2FwaXRhbHMgUGVyY2VudCBWaXNpYmxlIgorbXNnc3RyICLlj6/opovlpKflr6vnmb7liIbmr5QiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzoxNTEwCittc2dpZCAiQ2F0ZWdvcnkgTG9nIExldmVsIgorbXNnc3RyICLliIbpoZ7oqJjpjITnrYnntJoiCisKKyMuIENocm9tYXRpYyBQZXJjdXNzaW9uCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgbmFtZSBvZiBNSURJIG11c2ljYWwgaW5zdHJ1bWVudCAjOSAoaW4gdGhlIENocm9tYXRpYyBQZXJjdXNzaW9uIGdyb3VwKS4KKyM6IFByb2dyYW1zL21pZGkuYzoxMDUKK21zZ2lkICJDZWxlc3RhIgorbXNnc3RyICLpi7zniYfnkLQiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBuYW1lIG9mIE1JREkgbXVzaWNhbCBpbnN0cnVtZW50ICM0MyAoaW4gdGhlIFN0cmluZ3MgZ3JvdXApLgorIzogUHJvZ3JhbXMvbWlkaS5jOjIxMQorbXNnaWQgIkNlbGxvIgorbXNnc3RyICLlpKfmj5DnkLQiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBuYW1lIG9mIE1JREkgbXVzaWNhbCBpbnN0cnVtZW50ICM1MyAoaW4gdGhlIEVuc2VtYmxlIGdyb3VwKS4KKyM6IFByb2dyYW1zL21pZGkuYzoyNDIKK21zZ2lkICJDaG9pciBBYWhzIgorbXNnc3RyICLlkozogbLpmL8iCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBuYW1lIG9mIE1JREkgbXVzaWNhbCBpbnN0cnVtZW50IGdyb3VwICMyLgorIzogUHJvZ3JhbXMvbWlkaS5jOjI4Cittc2dpZCAiQ2hyb21hdGljIFBlcmN1c3Npb24iCittc2dzdHIgIuaciemfs+iqv+eahOaJk+aTiuaogiIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIG5hbWUgb2YgTUlESSBtdXNpY2FsIGluc3RydW1lbnQgIzIwIChpbiB0aGUgT3JnYW4gZ3JvdXApLgorIzogUHJvZ3JhbXMvbWlkaS5jOjEzOQorbXNnaWQgIkNodXJjaCBPcmdhbiIKK21zZ3N0ciAi5pWZ5aCC6aKo55C0IgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgbmFtZSBvZiBNSURJIG11c2ljYWwgaW5zdHJ1bWVudCAjNzIgKGluIHRoZSBSZWVkIGdyb3VwKS4KKyM6IFByb2dyYW1zL21pZGkuYzozMDEKK21zZ2lkICJDbGFyaW5ldCIKK21zZ3N0ciAi5Zau57Cn566hIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgbmFtZSBvZiBNSURJIG11c2ljYWwgaW5zdHJ1bWVudCAjOCAoaW4gdGhlIFBpYW5vIGdyb3VwKS4KKyM6IFByb2dyYW1zL21pZGkuYzoxMDEKK21zZ2lkICJDbGF2aW5ldCIKK21zZ3N0ciAi5Zau57Cn566hIgorCisjOiBQcm9ncmFtcy9tZW51LmM6ODk0Cittc2dpZCAiQ2xvc2UiCittc2dzdHIgIumXnOmWiSIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjEyODIKK21zZ2lkICJDb2xvbiIKK21zZ3N0ciAi5YaS6JmfIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6NzAyCittc2dpZCAiQ29tcHV0ZXIgQnJhaWxsZSIKK21zZ3N0ciAi6Zu76IWm6bue5a2XIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6NzM2Cittc2dpZCAiQ29tcHV0ZXIgQnJhaWxsZSBDZWxsIFR5cGUiCittc2dzdHIgIumbu+iFpum7nuWtl+aWuemhnuWeiyIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjE0NDQKK21zZ2lkICJDb25maWd1cmF0aW9uIERpcmVjdG9yeSIKK21zZ3N0ciAi6Kit5a6a5qqU55uu6YyEIgorCisjOiBQcm9ncmFtcy9jb25maWcuYzoyODk1IFByb2dyYW1zL21lbnVfcHJlZnMuYzoxNDQ5Cittc2dpZCAiQ29uZmlndXJhdGlvbiBGaWxlIgorbXNnc3RyICLoqK3lrprmqpQiCisKKyM6IFByb2dyYW1zL2FsZXJ0LmM6MTYzCittc2dpZCAiQ29uc29sZSBCZWxsIgorbXNnc3RyICLkuLvmjqflj7Dll7bogbIiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzoxMDM1Cittc2dpZCAiQ29uc29sZSBCZWxsIEFsZXJ0IgorbXNnc3RyICLkuLvmjqflj7Dll7bogbLorabnpLoiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBuYW1lIG9mIE1JREkgbXVzaWNhbCBpbnN0cnVtZW50ICM0NCAoaW4gdGhlIFN0cmluZ3MgZ3JvdXApLgorIzogUHJvZ3JhbXMvbWlkaS5jOjIxNAorbXNnaWQgIkNvbnRyYWJhc3MiCittc2dzdHIgIuWAjeS9jumfsyIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjcwMworbXNnaWQgIkNvbnRyYWN0ZWQgQnJhaWxsZSIKK21zZ3N0ciAi57iu5a+r6bue5a2XIgorCisjOiBQcm9ncmFtcy9jb25maWcuYzo5NjcgUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjEzOTUKK21zZ2lkICJDb250cmFjdGlvbiBUYWJsZSIKK21zZ3N0ciAi57iu5a+r6KGoIgorCisjOiBQcm9ncmFtcy9icmx0dHktY3RiLmM6NjIKK21zZ2lkICJDb250cmFjdGlvbiB0YWJsZS4iCittc2dzdHIgIue4ruWvq+ihqCIKKworIzogUHJvZ3JhbXMvYnJsdHR5LWN0Yi5jOjc2Cittc2dpZCAiQ29udHJhY3Rpb24gdmVyaWZpY2F0aW9uIHRhYmxlLiIKK21zZ3N0ciAi57iu5a+r5qqi5p+l6KGoIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6MTQ4OAorbXNnaWQgIkNyaXRpY2FsIgorbXNnc3RyICLpl5zpjbUiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzo1NDYKK21zZ2lkICJDdXJzb3IgQ29sdW1uIgorbXNnc3RyICLmuLjmqJnmrITkvY0iCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzo1NDUgUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjU1NworbXNnaWQgIkN1cnNvciBDb29yZGluYXRlcyIKK21zZ3N0ciAi5ri45qiZ5bqn5qiZIgorCisjOiBQcm9ncmFtcy9sb2cuYzoxMDAKK21zZ2lkICJDdXJzb3IgUm91dGluZyIKK21zZ3N0ciAi5ri45qiZ5a6a5L2NIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6NTQ3Cittc2dpZCAiQ3Vyc29yIFJvdyIKK21zZ3N0ciAi5ri45qiZ6KGMIgorCisjOiBQcm9ncmFtcy9sb2cuYzo5NAorbXNnaWQgIkN1cnNvciBUcmFja2luZyIKK21zZ3N0ciAi5ri45qiZ6L+96LmkIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6OTA0Cittc2dpZCAiQ3Vyc29yIFRyYWNraW5nIERlbGF5IgorbXNnc3RyICLmuLjmqJnov73ouaTlu7bpgbIiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzo1NDggUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjU1OQorbXNnaWQgIkN1cnNvciBhbmQgV2luZG93IENvbHVtbiIKK21zZ3N0ciAi5ri45qiZ6IiH6KaW56qX5qyE5L2NIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6NTQ5IFByb2dyYW1zL21lbnVfcHJlZnMuYzo1NjAKK21zZ2lkICJDdXJzb3IgYW5kIFdpbmRvdyBSb3ciCittc2dzdHIgIua4uOaomeiIh+imlueql+ihjCIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjEzMjAKK21zZ2lkICJEYXNoIgorbXNnc3RyICLoga/lrZfnrKbomZ8iCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzoxMzEzCittc2dpZCAiRGF0ZSBGb3JtYXQiCittc2dzdHIgIuaXpeacn+agvOW8jyIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjEzMDIKK21zZ2lkICJEYXRlIFBvc2l0aW9uIgorbXNnc3RyICLml6XmnJ/kvY3nva4iCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzoxMzI1Cittc2dpZCAiRGF0ZSBTZXBhcmF0b3IiCittc2dzdHIgIuaXpeacn+WIhumalOespuiZnyIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjEzMTAKK21zZ2lkICJEYXkgTW9udGggWWVhciIKK21zZ3N0ciAi5pelIOaciCDlubQiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzoxNDkzCittc2dpZCAiRGVidWciCittc2dzdHIgIumZpOmMryIKKworIzogUHJvZ3JhbXMvY29uZmlnLmM6NDk0Cittc2dpZCAiRGV2aWNlIGZvciBhY2Nlc3NpbmcgYnJhaWxsZSBkaXNwbGF5LiIKK21zZ3N0ciAi6JmV55CG6bue5a2X6aGv56S655qE6Kit5YKZIgorCisjOiBQcm9ncmFtcy9jb25maWcuYzo0NTMKK21zZ2lkICJEaXNhYmxlIHRoZSBhcHBsaWNhdGlvbiBwcm9ncmFtbWluZyBpbnRlcmZhY2UuIgorbXNnc3RyICLlj5bmtojnqIvlvI/oqK3oqIjnlYzpnaIiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBuYW1lIG9mIE1JREkgbXVzaWNhbCBpbnN0cnVtZW50ICMzMSAoaW4gdGhlIEd1aXRhciBncm91cCkuCisjOiBQcm9ncmFtcy9taWRpLmM6MTczCittc2dpZCAiRGlzdG9ydGlvbiBHdWl0YXIiCittc2dzdHIgIuWZqumfs+WQieS7liIKKworIzogUHJvZ3JhbXMvY29uZmlnLmM6NTk2Cittc2dpZCAiRG8gbm90IGF1dG9zcGVhayB3aGVuIGJyYWlsbGUgaXMgbm90IGJlaW5nIHVzZWQuIgorbXNnc3RyICLpu57lrZfmnKrllZ/nlKjljYHkuI3oh6rli5XmnJforoAiCisKKyM6IFByb2dyYW1zL3hicmxhcGkuYzoxMTIKK21zZ2lkICJEbyBub3Qgd3JpdGUgYW55IHRleHQgdG8gdGhlIGJyYWlsbGUgZGV2aWNlIgorbXNnc3RyICLkuI3lr6vlhaXku7vkvZXmloflrZfliLDpu57lrZfoqK3lgpkiCisKKyM6IFByb2dyYW1zL2JybHR0eS10cnR4dC5jOjc5Cittc2dpZCAiRG9uJ3QgZmFsbCBiYWNrIHRvIHRoZSBVbmljb2RlIGJhc2UgY2hhcmFjdGVyLiIKK21zZ3N0ciAi5LiN6L+U5ZueIFVuaWNvZGUg5a2X5YWDIgorCisjOiBQcm9ncmFtcy9jb25maWcuYzozNjQKK21zZ2lkICJEb24ndCBzd2l0Y2ggdG8gYW4gdW5wcml2aWxlZ2VkIHVzZXIgb3IgcmVsaW5xdWlzaCBhbnkgcHJpdmlsZWdlcyAoZ3JvdXAgbWVtYmVyc2hpcHMsIGNhcGFiaWxpdGllcywgZXRjKS4iCittc2dzdHIgIuS4jeWIh+aPm+eCuuacquaOiOasiueahOS9v+eUqOiAheaIluaUvuajhOasiumZkO+8iOe+pOe1hOaIkOWToei6q+S7veOAgeWKn+iDveetieetie+8iSIKKworIzogUHJvZ3JhbXMvYWxlcnQuYzo1MgorbXNnaWQgIkRvbmUiCittc2dzdHIgIuWujOaIkCIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjEyODMgUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjEzMjIKK21zZ2lkICJEb3QiCittc2dzdHIgIum7niIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjk0MgorbXNnaWQgIkRvdHMgdmlhIFVuaWNvZGUgQnJhaWxsZSIKK21zZ3N0ciAiVW5pY29kZSDpu57lrZfnorznmoTpu54iCisKKyMuIE9yZ2FuCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgbmFtZSBvZiBNSURJIG11c2ljYWwgaW5zdHJ1bWVudCAjMTcgKGluIHRoZSBPcmdhbiBncm91cCkuCisjOiBQcm9ncmFtcy9taWRpLmM6MTMwCittc2dpZCAiRHJhd2JhciBPcmdhbiIKK21zZ3N0ciAi5ouJ5oqK6aKo55C0IgorCisjOiBQcm9ncmFtcy9jb25maWcuYzoyOTE2IFByb2dyYW1zL21lbnVfcHJlZnMuYzoxNDY5Cittc2dpZCAiRHJpdmVycyBEaXJlY3RvcnkiCittc2dzdHIgIumpheWLleeoi+W8j+ebrumMhCIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIG5hbWUgb2YgTUlESSBtdXNpY2FsIGluc3RydW1lbnQgIzE2IChpbiB0aGUgQ2hyb21hdGljIFBlcmN1c3Npb24gZ3JvdXApLgorIzogUHJvZ3JhbXMvbWlkaS5jOjEyNgorbXNnaWQgIkR1bGNpbWVyIgorbXNnc3RyICLmtIvnkLQiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzo4NzkKK21zZ2lkICJFYWdlciBTbGlkaW5nIEJyYWlsbGUgV2luZG93IgorbXNnc3RyICLljbPmmYLmi4nli5Xpu57lrZfoppbnqpciCisKKyM6IFByb2dyYW1zL2JybHR0eS10dGIuYzoxNTgKK21zZ2lkICJFZGl0IHRhYmxlLiIKK21zZ3N0ciAi57eo6Lyv6KGoIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgbmFtZSBvZiBNSURJIG11c2ljYWwgaW5zdHJ1bWVudCAjMzQgKGluIHRoZSBCYXNzIGdyb3VwKS4KKyM6IFByb2dyYW1zL21pZGkuYzoxODMKK21zZ2lkICJFbGVjdHJpYyBCYXNzIChmaW5nZXIpIgorbXNnc3RyICLpm7vooqvnp4HvvIjmjIflvYjvvIkiCisKKyMgRWxla3Ryb25pc2NoZXIgQmFzcyAoUGljaykKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBuYW1lIG9mIE1JREkgbXVzaWNhbCBpbnN0cnVtZW50ICMzNSAoaW4gdGhlIEJhc3MgZ3JvdXApLgorIzogUHJvZ3JhbXMvbWlkaS5jOjE4NgorbXNnaWQgIkVsZWN0cmljIEJhc3MgKHBpY2spIgorbXNnc3RyICLpm7vooqvnp4HvvIjnjrvniYfvvIkiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBuYW1lIG9mIE1JREkgbXVzaWNhbCBpbnN0cnVtZW50ICMzIChpbiB0aGUgUGlhbm8gZ3JvdXApLgorIzogUHJvZ3JhbXMvbWlkaS5jOjg2Cittc2dpZCAiRWxlY3RyaWMgR3JhbmQgUGlhbm8iCittc2dzdHIgIumbu+mLvOeQtCIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIG5hbWUgb2YgTUlESSBtdXNpY2FsIGluc3RydW1lbnQgIzI4IChpbiB0aGUgR3VpdGFyIGdyb3VwKS4KKyM6IFByb2dyYW1zL21pZGkuYzoxNjQKK21zZ2lkICJFbGVjdHJpYyBHdWl0YXIgKGNsZWFuKSIKK21zZ3N0ciAi6Zu75ZCJ5LuW77yI5riF5r6I77yJIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgbmFtZSBvZiBNSURJIG11c2ljYWwgaW5zdHJ1bWVudCAjMjcgKGluIHRoZSBHdWl0YXIgZ3JvdXApLgorIzogUHJvZ3JhbXMvbWlkaS5jOjE2MQorbXNnaWQgIkVsZWN0cmljIEd1aXRhciAoamF6eikiCittc2dzdHIgIumbu+WQieS7lu+8iOeIteWjq++8iSIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIG5hbWUgb2YgTUlESSBtdXNpY2FsIGluc3RydW1lbnQgIzI5IChpbiB0aGUgR3VpdGFyIGdyb3VwKS4KKyM6IFByb2dyYW1zL21pZGkuYzoxNjcKK21zZ2lkICJFbGVjdHJpYyBHdWl0YXIgKG11dGVkKSIKK21zZ3N0ciAi6Zu75ZCJ5LuW77yI5oK26Z+z77yJIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgbmFtZSBvZiBNSURJIG11c2ljYWwgaW5zdHJ1bWVudCAjNSAoaW4gdGhlIFBpYW5vIGdyb3VwKS4KKyM6IFByb2dyYW1zL21pZGkuYzo5MgorbXNnaWQgIkVsZWN0cmljIFBpYW5vIDEiCittc2dzdHIgIumbu+mLvOeQtCAxIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgbmFtZSBvZiBNSURJIG11c2ljYWwgaW5zdHJ1bWVudCAjNiAoaW4gdGhlIFBpYW5vIGdyb3VwKS4KKyM6IFByb2dyYW1zL21pZGkuYzo5NQorbXNnaWQgIkVsZWN0cmljIFBpYW5vIDIiCittc2dzdHIgIumbu+mLvOeQtCAyIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6MTQ4NgorbXNnaWQgIkVtZXJnZW5jeSIKK21zZ3N0ciAi57eK5oClIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6NTQxCittc2dpZCAiRW5kIgorbXNnc3RyICLntZDlsL4iCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzo4NjUKK21zZ2lkICJFbmQgb2YgTGluZSIKK21zZ3N0ciAi6KGM5bC+IgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgbmFtZSBvZiBNSURJIG11c2ljYWwgaW5zdHJ1bWVudCAjNzAgKGluIHRoZSBSZWVkIGdyb3VwKS4KKyM6IFByb2dyYW1zL21pZGkuYzoyOTUKK21zZ2lkICJFbmdsaXNoIEhvcm4iCittc2dzdHIgIuiLseWci+euoSIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjExNzgKK21zZ2lkICJFbnF1ZXVlIgorbXNnc3RyICLmjpLpmooiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBuYW1lIG9mIE1JREkgbXVzaWNhbCBpbnN0cnVtZW50IGdyb3VwICM3LgorIzogUHJvZ3JhbXMvbWlkaS5jOjQzCittc2dpZCAiRW5zZW1ibGUiCittc2dzdHIgIuW8puaogue1hCIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjE0ODkKK21zZ2lkICJFcnJvciIKK21zZ3N0ciAi6Yyv6KqkIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgbmFtZSBvZiBNSURJIG11c2ljYWwgaW5zdHJ1bWVudCBncm91cCAjMTQuCisjOiBQcm9ncmFtcy9taWRpLmM6NjgKK21zZ2lkICJFdGhuaWMgSW5zdHJ1bWVudHMiCittc2dzdHIgIuawkeaXj+aoguWZqCIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjEwMzIKK21zZ2lkICJFdmVudCBBbGVydHMiCittc2dzdHIgIuS6i+S7tuitpuekuiIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjcxMworbXNnaWQgIkV4cGFuZCBDdXJyZW50IFdvcmQiCittc2dzdHIgIuWxlemWi+ebruWJjeWWruWtlyIKKworIzogUHJvZ3JhbXMvY29uZmlnLmM6NDA4Cittc2dpZCAiRXhwbGljaXQgcHJlZmVyZW5jZSBzZXR0aW5ncy4iCittc2dzdHIgIumhr+ekuuWBj+WlveioreWumiIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjEwNTkKK21zZ2lkICJGTSIKK21zZ3N0ciAiRk0iCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzoxMDk3Cittc2dpZCAiRk0gVm9sdW1lIgorbXNnc3RyICJGTSDpn7Pph48iCisKKyMuIFN5bnRoIEZNCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgbmFtZSBvZiBNSURJIG11c2ljYWwgaW5zdHJ1bWVudCAjOTcgKGluIHRoZSBTeW50aCBGTSBncm91cCkuCisjOiBQcm9ncmFtcy9taWRpLmM6MzgwCittc2dpZCAiRlggMSAocmFpbikiCittc2dzdHIgIkZYIDEg77yI6Zuo6IGy77yJIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgbmFtZSBvZiBNSURJIG11c2ljYWwgaW5zdHJ1bWVudCAjOTggKGluIHRoZSBTeW50aCBGTSBncm91cCkuCisjOiBQcm9ncmFtcy9taWRpLmM6MzgzCittc2dpZCAiRlggMiAoc291bmR0cmFjaykiCittc2dzdHIgIkZYIDIg77yI6Z+z6LuM77yJIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgbmFtZSBvZiBNSURJIG11c2ljYWwgaW5zdHJ1bWVudCAjOTkgKGluIHRoZSBTeW50aCBGTSBncm91cCkuCisjOiBQcm9ncmFtcy9taWRpLmM6Mzg2Cittc2dpZCAiRlggMyAoY3J5c3RhbCkiCittc2dzdHIgIkZYIDMg77yI5rC05pm277yJIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgbmFtZSBvZiBNSURJIG11c2ljYWwgaW5zdHJ1bWVudCAjMTAwIChpbiB0aGUgU3ludGggRk0gZ3JvdXApLgorIzogUHJvZ3JhbXMvbWlkaS5jOjM4OQorbXNnaWQgIkZYIDQgKGF0bW9zcGhlcmUpIgorbXNnc3RyICJGWCA0IO+8iOWOn+WtkO+8iSIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIG5hbWUgb2YgTUlESSBtdXNpY2FsIGluc3RydW1lbnQgIzEwMSAoaW4gdGhlIFN5bnRoIEZNIGdyb3VwKS4KKyM6IFByb2dyYW1zL21pZGkuYzozOTIKK21zZ2lkICJGWCA1IChicmlnaHRuZXNzKSIKK21zZ3N0ciAiRlggNSDvvIjmmI7kuq7vvIkiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBuYW1lIG9mIE1JREkgbXVzaWNhbCBpbnN0cnVtZW50ICMxMDIgKGluIHRoZSBTeW50aCBGTSBncm91cCkuCisjOiBQcm9ncmFtcy9taWRpLmM6Mzk1Cittc2dpZCAiRlggNiAoZ29ibGlucykiCittc2dzdHIgIkZYIDYg77yI5bCP5aaW77yJIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgbmFtZSBvZiBNSURJIG11c2ljYWwgaW5zdHJ1bWVudCAjMTAzIChpbiB0aGUgU3ludGggRk0gZ3JvdXApLgorIzogUHJvZ3JhbXMvbWlkaS5jOjM5OAorbXNnaWQgIkZYIDcgKGVjaG9lcykiCittc2dzdHIgIkZYIDcg77yI5Zue6Z+z77yJIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgbmFtZSBvZiBNSURJIG11c2ljYWwgaW5zdHJ1bWVudCAjMTA0IChpbiB0aGUgU3ludGggRk0gZ3JvdXApLgorIy4geGdldHRleHQ6IChzY2ktZmkgaXMgYSBjb21tb24gc2hvcnQgZm9ybSBmb3Igc2NpZW5jZSBmaWN0aW9uKQorIzogUHJvZ3JhbXMvbWlkaS5jOjQwMgorbXNnaWQgIkZYIDggKHNjaS1maSkiCittc2dzdHIgIkZYIDgg77yI56eR5bm777yJIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgbmFtZSBvZiBNSURJIG11c2ljYWwgaW5zdHJ1bWVudCAjMTExIChpbiB0aGUgRXRobmljIGdyb3VwKS4KKyM6IFByb2dyYW1zL21pZGkuYzo0MjQKK21zZ2lkICJGaWRkbGUiCittc2dzdHIgIuaPkOeQtCIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIG5hbWUgb2YgTUlESSBtdXNpY2FsIGluc3RydW1lbnQgIzc0IChpbiB0aGUgUGlwZSBncm91cCkuCisjOiBQcm9ncmFtcy9taWRpLmM6MzA4Cittc2dpZCAiRmx1dGUiCittc2dzdHIgIumVt+esmyIKKworIzogUHJvZ3JhbXMvYnJsdHR5LWN0Yi5jOjk2Cittc2dpZCAiRm9yY2UgaW1tZWRpYXRlIG91dHB1dC4iCittc2dzdHIgIuW8t+i/q+eri+WNs+i8uOWHuiIKKworIzogUHJvZ3JhbXMvYnJsdHR5LWNsZHIuYzo0MgorbXNnaWQgIkZvcm1hdCBvZiBlYWNoIG91dHB1dCBsaW5lLiIKK21zZ3N0ciAi5q+P5LiA6Ly45Ye66KGM55qE5qC85byPIgorCisjOiBQcm9ncmFtcy9icmx0dHktdHRiLmM6MTY1Cittc2dpZCAiRm9ybWF0IG9mIGlucHV0IGZpbGUuIgorbXNnc3RyICLovLjlhaXmqpTmoYjmoLzlvI8iCisKKyM6IFByb2dyYW1zL2JybHR0eS10dGIuYzoxNzIKK21zZ2lkICJGb3JtYXQgb2Ygb3V0cHV0IGZpbGUuIgorbXNnc3RyICLovLjlh7rmqpTmoYjmoLzlvI8iCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBuYW1lIG9mIE1JREkgbXVzaWNhbCBpbnN0cnVtZW50ICM2MSAoaW4gdGhlIEJyYXNzIGdyb3VwKS4KKyM6IFByb2dyYW1zL21pZGkuYzoyNjcKK21zZ2lkICJGcmVuY2ggSG9ybiIKK21zZ3N0ciAi5rOV5ZyL6JmfIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgbmFtZSBvZiBNSURJIG11c2ljYWwgaW5zdHJ1bWVudCAjMzYgKGluIHRoZSBCYXNzIGdyb3VwKS4KKyM6IFByb2dyYW1zL21pZGkuYzoxODkKK21zZ2lkICJGcmV0bGVzcyBCYXNzIgorbXNnc3RyICLntJTooqvnp4EiCisKKyM6IFByb2dyYW1zL2FsZXJ0LmM6OTcKK21zZ2lkICJGcm96ZW4iCittc2dzdHIgIuWHjee1kCIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjU1NgorbXNnaWQgIkdlbmVyaWMiCittc2dzdHIgIuS4gOiIrCIKKworIzogUHJvZ3JhbXMvbG9nLmM6NjQKK21zZ2lkICJHZW5lcmljIElucHV0IgorbXNnc3RyICLkuIDoiKzovLjlhaUiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBuYW1lIG9mIE1JREkgbXVzaWNhbCBpbnN0cnVtZW50ICMxMCAoaW4gdGhlIENocm9tYXRpYyBQZXJjdXNzaW9uIGdyb3VwKS4KKyM6IFByb2dyYW1zL21pZGkuYzoxMDgKK21zZ2lkICJHbG9ja2Vuc3BpZWwiCittc2dzdHIgIumQmOeQtCIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIG5hbWUgb2YgTUlESSBtdXNpY2FsIGluc3RydW1lbnQgZ3JvdXAgIzQuCisjOiBQcm9ncmFtcy9taWRpLmM6MzQKK21zZ2lkICJHdWl0YXIiCittc2dzdHIgIuWQieS7liIKKworIy4gU291bmQgRWZmZWN0cworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIG5hbWUgb2YgTUlESSBtdXNpY2FsIGluc3RydW1lbnQgIzEyMSAoaW4gdGhlIFNvdW5kIEVmZmVjdHMgZ3JvdXApLgorIzogUHJvZ3JhbXMvbWlkaS5jOjQ1NgorbXNnaWQgIkd1aXRhciBGcmV0IE5vaXNlIgorbXNnc3RyICLlkInku5bmj5vmiorogbIiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBuYW1lIG9mIE1JREkgbXVzaWNhbCBpbnN0cnVtZW50ICMzMiAoaW4gdGhlIEd1aXRhciBncm91cCkuCisjOiBQcm9ncmFtcy9taWRpLmM6MTc2Cittc2dpZCAiR3VpdGFyIEhhcm1vbmljcyIKK21zZ3N0ciAi5ZCJ5LuW5ZKM57WDIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgbmFtZSBvZiBNSURJIG11c2ljYWwgaW5zdHJ1bWVudCAjMTI4IChpbiB0aGUgU291bmQgRWZmZWN0cyBncm91cCkuCisjOiBQcm9ncmFtcy9taWRpLmM6NDc3Cittc2dpZCAiR3Vuc2hvdCIKK21zZ3N0ciAi5qeN6IGyIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgbmFtZSBvZiBNSURJIG11c2ljYWwgaW5zdHJ1bWVudCAjMjMgKGluIHRoZSBPcmdhbiBncm91cCkuCisjOiBQcm9ncmFtcy9taWRpLmM6MTQ4Cittc2dpZCAiSGFybW9uaWNhIgorbXNnc3RyICLlj6PnkLQiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBuYW1lIG9mIE1JREkgbXVzaWNhbCBpbnN0cnVtZW50ICM3IChpbiB0aGUgUGlhbm8gZ3JvdXApLgorIzogUHJvZ3JhbXMvbWlkaS5jOjk4Cittc2dpZCAiSGFycHNpY2hvcmQiCittc2dzdHIgIuWkp+mNteeQtCIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIG5hbWUgb2YgTUlESSBtdXNpY2FsIGluc3RydW1lbnQgIzEyNiAoaW4gdGhlIFNvdW5kIEVmZmVjdHMgZ3JvdXApLgorIzogUHJvZ3JhbXMvbWlkaS5jOjQ3MQorbXNnaWQgIkhlbGljb3B0ZXIiCittc2dzdHIgIuebtOWNh+apnyIKKworIzogUHJvZ3JhbXMvc2NyX2hlbHAuYzoyMTUKK21zZ2lkICJIZWxwIFNjcmVlbiIKK21zZ3N0ciAi6Kqq5piO55Wr6Z2iIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6NzQ4IFByb2dyYW1zL21lbnVfcHJlZnMuYzoxMDEzCittc2dpZCAiSGlnaCIKK21zZ3N0ciAi6auYIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6OTIxCittc2dpZCAiSGlnaGxpZ2h0IEJyYWlsbGUgV2luZG93IExvY2F0aW9uIgorbXNnc3RyICLlj43nmb3pu57lrZfoppbnqpfkvY3nva4iCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBuYW1lIG9mIE1JREkgbXVzaWNhbCBpbnN0cnVtZW50ICM0IChpbiB0aGUgUGlhbm8gZ3JvdXApLgorIzogUHJvZ3JhbXMvbWlkaS5jOjg5Cittc2dpZCAiSG9ua3l0b25rIFBpYW5vIgorbXNnc3RyICLphZLlkKfpi7znkLQiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzoxMTc3Cittc2dpZCAiSW1tZWRpYXRlIgorbXNnc3RyICLnq4vliLsiCisKKyM6IFByb2dyYW1zL3hicmxhcGkuYzo2NjUKK21zZ2lkICJJbmNvbXBhdGlibGUgWEtCIGxpYnJhcnlcbiIKK21zZ3N0ciAi5LiN55u45a6555qEIFhLQiDlkKvlvI/luqtcbiIKKworIzogUHJvZ3JhbXMveGJybGFwaS5jOjY2NworbXNnaWQgIkluY29tcGF0aWJsZSBYS0Igc2VydmVyIHN1cHBvcnRcbiIKK21zZ3N0ciAi5LiN55u45a6555qEIFhLQiDmnI3li5nmlK/mj7RcbiIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjE0OTIKK21zZ2lkICJJbmZvcm1hdGlvbiIKK21zZ3N0ciAi6LOH6KiKIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6OTU2Cittc2dpZCAiSW5wdXQgT3B0aW9ucyIKK21zZ3N0ciAi6Ly45YWl6YG45ZCRIgorCisjOiBQcm9ncmFtcy9sb2cuYzo3MAorbXNnaWQgIklucHV0IFBhY2tldHMiCittc2dzdHIgIui8uOWFpemiqOWMhSIKKworIzogUHJvZ3JhbXMvY29uZmlnLmM6MzM5CisjLCBjLWZvcm1hdAorbXNnaWQgIkluc3RhbGwgdGhlICVzIHNlcnZpY2UsIGFuZCB0aGVuIGV4aXQuIgorbXNnc3RyICLlronoo50gJXMg5pyN5YuZ54S25b6M6YCA5Ye6IgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6MTQ5NgorbXNnaWQgIkludGVybmFsIFBhcmFtZXRlcnMiCittc2dzdHIgIuWFp+mDqOWPg+aVuCIKKworIzogRHJpdmVycy9TY3JlZW4vQW5kcm9pZC9zY3JlZW4uYzoxOTcKK21zZ2lkICJKYXZhIGNsYXNzIG5vdCBmb3VuZCIKK21zZ3N0ciAi5rKS5pyJIEphdmEg6aGe5YilIgorCisjOiBEcml2ZXJzL1NjcmVlbi9BbmRyb2lkL3NjcmVlbi5jOjE4MQorbXNnaWQgIkphdmEgZXhjZXB0aW9uIG9jY3VycmVkIgorbXNnc3RyICLnmbznlJ8gSmF2YSDpjK/oqqQiCisKKyM6IERyaXZlcnMvU2NyZWVuL0FuZHJvaWQvc2NyZWVuLmM6MTk0Cittc2dpZCAiSmF2YSBtZXRob2Qgbm90IGZvdW5kIgorbXNnc3RyICLmspLmnIkgSmF2YSDlh73mlbgiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBuYW1lIG9mIE1JREkgbXVzaWNhbCBpbnN0cnVtZW50ICMxMDkgKGluIHRoZSBFdGhuaWMgZ3JvdXApLgorIzogUHJvZ3JhbXMvbWlkaS5jOjQxOAorbXNnaWQgIkthbGltYmEiCittc2dzdHIgIuWNoea3i+W3tCIKKworIzogUHJvZ3JhbXMvY29uZmlnLmM6MTY0OQorbXNnaWQgIktleSBCaW5kaW5ncyIKK21zZ3N0ciAi5oyJ6Y215qac5a6aIgorCisjOiBQcm9ncmFtcy9jb25maWcuYzoxMTc3Cittc2dpZCAiS2V5IEhlbHAiCittc2dzdHIgIuaMiemNteiqquaYjiIKKworIzogUHJvZ3JhbXMvY29uZmlnLmM6MTY1NCBQcm9ncmFtcy9rdGJfbGlzdC5jOjczNworbXNnaWQgIktleSBUYWJsZSIKK21zZ3N0ciAi5oyJ6Y216KGoIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6OTM1Cittc2dpZCAiS2V5Ym9hcmQgRW5hYmxlZCIKK21zZ3N0ciAi6Y2155uk5ZWf55SoIgorCisjOiBQcm9ncmFtcy9sb2cuYzo4OAorbXNnaWQgIktleWJvYXJkIEtleSBFdmVudHMiCittc2dzdHIgIumNteebpOaMiemNteS6i+S7tiIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjEwNDIKK21zZ2lkICJLZXlib2FyZCBMRUQgQWxlcnRzIgorbXNnc3RyICLpjbXnm6Tnh4jomZ/orabnpLoiCisKKyM6IFByb2dyYW1zL2NvbmZpZy5jOjEyNjIgUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjEwMjQKK21zZ2lkICJLZXlib2FyZCBUYWJsZSIKK21zZ3N0ciAi5oyJ6Y216KGoIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgbmFtZSBvZiBNSURJIG11c2ljYWwgaW5zdHJ1bWVudCAjMTA4IChpbiB0aGUgRXRobmljIGdyb3VwKS4KKyM6IFByb2dyYW1zL21pZGkuYzo0MTUKK21zZ2lkICJLb3RvIgorbXNnc3RyICLml6XmnKzljYHkuInlvKbnro8iCisKKyM6IFByb2dyYW1zL2NvbmZpZy5jOjMwNTIKK21zZ2lkICJMYW5ndWFnZSIKK21zZ3N0ciAi6Kqe6KiAIgorCisjLiBTeW50aCBMZWFkCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgbmFtZSBvZiBNSURJIG11c2ljYWwgaW5zdHJ1bWVudCAjODEgKGluIHRoZSBTeW50aCBMZWFkIGdyb3VwKS4KKyM6IFByb2dyYW1zL21pZGkuYzozMzAKK21zZ2lkICJMZWFkIDEgKHNxdWFyZSkiCittc2dzdHIgIkxlYWQgMSAo5pa55rOiKSIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIG5hbWUgb2YgTUlESSBtdXNpY2FsIGluc3RydW1lbnQgIzgyIChpbiB0aGUgU3ludGggTGVhZCBncm91cCkuCisjOiBQcm9ncmFtcy9taWRpLmM6MzMzCittc2dpZCAiTGVhZCAyIChzYXd0b290aCkiCittc2dzdHIgIkxlYWQgMiDvvIjpi7jpvZLvvIkiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBuYW1lIG9mIE1JREkgbXVzaWNhbCBpbnN0cnVtZW50ICM4MyAoaW4gdGhlIFN5bnRoIExlYWQgZ3JvdXApLgorIzogUHJvZ3JhbXMvbWlkaS5jOjMzNgorbXNnaWQgIkxlYWQgMyAoY2FsbGlvcGUpIgorbXNnc3RyICJMZWFkIDMgKOawo+esm+miqOeQtCkiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBuYW1lIG9mIE1JREkgbXVzaWNhbCBpbnN0cnVtZW50ICM4NCAoaW4gdGhlIFN5bnRoIExlYWQgZ3JvdXApLgorIzogUHJvZ3JhbXMvbWlkaS5jOjMzOQorbXNnaWQgIkxlYWQgNCAoY2hpZmYpIgorbXNnc3RyICJMZWFkIDQgKGNoaWZmKSIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIG5hbWUgb2YgTUlESSBtdXNpY2FsIGluc3RydW1lbnQgIzg1IChpbiB0aGUgU3ludGggTGVhZCBncm91cCkuCisjOiBQcm9ncmFtcy9taWRpLmM6MzQyCittc2dpZCAiTGVhZCA1IChjaGFyYW5nKSIKK21zZ3N0ciAiTGVhZCA1IChjaGFyYW5nKSIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIG5hbWUgb2YgTUlESSBtdXNpY2FsIGluc3RydW1lbnQgIzg2IChpbiB0aGUgU3ludGggTGVhZCBncm91cCkuCisjOiBQcm9ncmFtcy9taWRpLmM6MzQ1Cittc2dpZCAiTGVhZCA2ICh2b2ljZSkiCittc2dzdHIgIkxlYWQgNiAo5Lq66IGyKSIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIG5hbWUgb2YgTUlESSBtdXNpY2FsIGluc3RydW1lbnQgIzg3IChpbiB0aGUgU3ludGggTGVhZCBncm91cCkuCisjOiBQcm9ncmFtcy9taWRpLmM6MzQ4Cittc2dpZCAiTGVhZCA3IChmaWZ0aHMpIgorbXNnc3RyICJMZWFkIDcgKGZpZnRocykiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBuYW1lIG9mIE1JREkgbXVzaWNhbCBpbnN0cnVtZW50ICM4OCAoaW4gdGhlIFN5bnRoIExlYWQgZ3JvdXApLgorIzogUHJvZ3JhbXMvbWlkaS5jOjM1MQorbXNnaWQgIkxlYWQgOCAoYmFzcyArIGxlYWQpIgorbXNnc3RyICJMZWFkIDggKGJhc3MgKyBsZWFkKSIKKworIzogUHJvZ3JhbXMvbGVhcm4uYzoxMDEKK21zZ2lkICJMZWFybiBNb2RlIgorbXNnc3RyICLlrbjnv5LmqKHlvI8iCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzoxMzM3Cittc2dpZCAiTGVmdCIKK21zZ3N0ciAi5bemIgorCisjOiBQcm9ncmFtcy9icmx0dHkta3RiLmM6NTEKK21zZ2lkICJMaXN0IGtleSBuYW1lcy4iCittc2dzdHIgIuWIl+WHuuaMiemNteWQjeeosSIKKworIzogUHJvZ3JhbXMvYnJsdHR5LWt0Yi5jOjU3Cittc2dpZCAiTGlzdCBrZXkgdGFibGUgaW4gaGVscCBzY3JlZW4gZm9ybWF0LiIKK21zZ3N0ciAi5Lul6Kqq5piO55Wr6Z2i5qC85byP5YiX5Ye65oyJ6Y216KGoIgorCisjOiBQcm9ncmFtcy9icmx0dHkta3RiLmM6NjMKK21zZ2lkICJMaXN0IGtleSB0YWJsZSBpbiByZVN0cnVjdHVyZWRUZXh0IGZvcm1hdC4iCittc2dzdHIgIuS7pemHjeaWsOaetuani+aWh+Wtl+agvOW8j+WIl+WHuuaMiemNteihqCIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjE0NzkKK21zZ2lkICJMb2NhbGUgRGlyZWN0b3J5IgorbXNnc3RyICLmnKzlnJ/ljJbnm67pjIQiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzoxNTE1Cittc2dpZCAiTG9nIENhdGVnb3JpZXMiCittc2dzdHIgIue0gOmMhOWIhumhniIKKworIzogUHJvZ3JhbXMvY29uZmlnLmM6ODM0Cittc2dpZCAiTG9nIExldmVsIgorbXNnc3RyICLoqJjpjITnrYnntJoiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzoxNTc2Cittc2dpZCAiTG9nIE1lc3NhZ2VzIgorbXNnc3RyICLoqJjpjIToqIrmga8iCisKKyM6IFByb2dyYW1zL2NvbmZpZy5jOjY4NgorbXNnaWQgIkxvZyB0aGUgdmVyc2lvbnMgb2YgdGhlIGNvcmUsIEFQSSwgYW5kIGJ1aWx0LWluIGRyaXZlcnMsIGFuZCB0aGVuIGV4aXQuIgorbXNnc3RyICLoqJjpjITmoLjlv4PjgIFBUEksIOiIh+WFp+imi+mpheWLleeoi+W8j+etieeahOeJiOacrOeEtuW+jOmAgOWHuiIKKworIzogUHJvZ3JhbXMvY29uZmlnLmM6NjUxCittc2dpZCAiTG9nIHRvIHN0YW5kYXJkIGVycm9yIHJhdGhlciB0aGFuIHRvIHRoZSBzeXN0ZW0gbG9nLiIKK21zZ3N0ciAi6Ly45Ye65Yiw5qiZ5rqW6Yyv6Kqk6ICM6Z2e57O757Wx6KiY6YyEIgorCisjOiBQcm9ncmFtcy9jb25maWcuYzo2NjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiTG9nZ2luZyBsZXZlbCAoJXMgb3Igb25lIG9mIHslc30pIGFuZC9vciBsb2cgY2F0ZWdvcmllcyB0byBlbmFibGUgKGFueSBjb21iaW5hdGlvbiBvZiB7JXN9LCBlYWNoIG9wdGlvbmFsbHkgcHJlZml4ZWQgYnkgJXMgdG8gZGlzYWJsZSkiCittc2dzdHIgIuWVn+eUqOe0gOmMhOetiee0miAoJXMg5oiWIHslc30g5LmL5LiA77yJ5ZKML+aIlue0gOmMhOWIhumhnu+8iOS7u+S9lSB7JXN9IOeahOe1hOWQiOaIluavj+WAi+S7pSAlcyDplovpoK3nmoTpg73lj6/lgZznlKjvvIkiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzo5NzgKK21zZ2lkICJMb25nIFByZXNzIFRpbWUiCittc2dzdHIgIumVt+aMieaZgumWkyIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjc0NiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6MTAxMQorbXNnaWQgIkxvdyIKK21zZ3N0ciAi5L2OIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6NjY2Cittc2dpZCAiTG93ZXIgTGVmdCBEb3QiCittc2dzdHIgIuW3puS4i+aWueeahOm7niIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjY2NworbXNnaWQgIkxvd2VyIFJpZ2h0IERvdCIKK21zZ3N0ciAi5Y+z5LiL5pa555qE6bueIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6MTA1OAorbXNnaWQgIk1JREkiCittc2dzdHIgIk1JREkiCisKKyM6IFByb2dyYW1zL2NvbmZpZy5jOjYzNQorbXNnaWQgIk1JREkgKE11c2ljYWwgSW5zdHJ1bWVudCBEaWdpdGFsIEludGVyZmFjZSkgZGV2aWNlIHNwZWNpZmllci4iCittc2dzdHIgIk1JREkg77yI5qiC5Zmo5pW45L2N55WM6Z2i77yJ6Kit5YKZ5oyH5a6aIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6MTA4OAorbXNnaWQgIk1JREkgSW5zdHJ1bWVudCIKK21zZ3N0ciAiTUlESSDmqILlmagiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzoxMDc4Cittc2dpZCAiTUlESSBWb2x1bWUiCittc2dzdHIgIk1JREkg6Z+z6YePIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6MTQzOQorbXNnaWQgIk1haWxpbmcgTGlzdCIKK21zZ3N0ciAi6YO15Lu26KuW5aOHIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgbmFtZSBvZiBNSURJIG11c2ljYWwgaW5zdHJ1bWVudCAjMTMgKGluIHRoZSBDaHJvbWF0aWMgUGVyY3Vzc2lvbiBncm91cCkuCisjOiBQcm9ncmFtcy9taWRpLmM6MTE3Cittc2dpZCAiTWFyaW1iYSIKK21zZ3N0ciAi56K85reL5be0IgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6NzQ5IFByb2dyYW1zL21lbnVfcHJlZnMuYzoxMDE0Cittc2dpZCAiTWF4aW11bSIKK21zZ3N0ciAi5pyA5aSnIgorCisjOiBQcm9ncmFtcy9icmx0dHktY3RiLmM6OTAKK21zZ2lkICJNYXhpbXVtIGxlbmd0aCBvZiBhbiBvdXRwdXQgbGluZS4iCittc2dzdHIgIuS4gOihjOmhr+ekuueahOacgOWkp+mVt+W6piIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjc0NyBQcm9ncmFtcy9tZW51X3ByZWZzLmM6MTAxMgorbXNnaWQgIk1lZGl1bSIKK21zZ3N0ciAi5Lit562JIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgbmFtZSBvZiBNSURJIG11c2ljYWwgaW5zdHJ1bWVudCAjMTE4IChpbiB0aGUgUGVyY3Vzc2l2ZSBncm91cCkuCisjOiBQcm9ncmFtcy9taWRpLmM6NDQ2Cittc2dpZCAiTWVsb2RpYyBUb20iCittc2dzdHIgIuWumumfs+m8kyIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjY3OQorbXNnaWQgIk1lbnUgT3B0aW9ucyIKK21zZ3N0ciAi6YG45Zau6YG45ZCRIgorCisjOiBQcm9ncmFtcy9jb25maWcuYzo2NDQKK21zZ2lkICJNZXNzYWdlIGhvbGQgdGltZW91dCAoaW4gMTBtcyB1bml0cykuIgorbXNnc3RyICLoqIrmga/kv53nlZnmmYLplpPvvIjku6UgMTBtcyDngrrllq7kvY3vvIkiCisKKyM6IFByb2dyYW1zL2NvbmZpZy5jOjgzNworbXNnaWQgIk1lc3NhZ2VzIERpcmVjdG9yeSIKK21zZ3N0ciAi6KiK5oGv55uu6YyEIgorCisjOiBQcm9ncmFtcy9jb25maWcuYzo4MzYKK21zZ2lkICJNZXNzYWdlcyBEb21haW4iCittc2dzdHIgIuioiuaBr+eorumhniIKKworIzogUHJvZ3JhbXMvY29uZmlnLmM6ODM1Cittc2dpZCAiTWVzc2FnZXMgTG9jYWxlIgorbXNnc3RyICLoqIrmga/oqp7oqIAiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzo3NDUgUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjEwMTAKK21zZ2lkICJNaW5pbXVtIgorbXNnc3RyICLmnIDlsI8iCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzoxMzA5Cittc2dpZCAiTW9udGggRGF5IFllYXIiCittc2dzdHIgIuaciCDml6Ug5bm0IgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgbmFtZSBvZiBNSURJIG11c2ljYWwgaW5zdHJ1bWVudCAjMTEgKGluIHRoZSBDaHJvbWF0aWMgUGVyY3Vzc2lvbiBncm91cCkuCisjOiBQcm9ncmFtcy9taWRpLmM6MTExCittc2dpZCAiTXVzaWMgQm94IgorbXNnc3RyICLpn7PmqILnm5IiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzoxMDU4Cittc2dpZCAiTXVzaWNhbCBJbnN0cnVtZW50IERpZ2l0YWwgSW50ZXJmYWNlIgorbXNnc3RyICLmqILlmajmlbjkvY3nlYzpnaIiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBuYW1lIG9mIE1JREkgbXVzaWNhbCBpbnN0cnVtZW50ICM2MCAoaW4gdGhlIEJyYXNzIGdyb3VwKS4KKyM6IFByb2dyYW1zL21pZGkuYzoyNjQKK21zZ2lkICJNdXRlZCBUcnVtcGV0IgorbXNnc3RyICLliqDoi6Xpn7PlmajnmoTlsI/lloflj60iCisKKyM6IFByb2dyYW1zL2NvbmZpZy5jOjU0NAorbXNnaWQgIk5hbWUgb2Ygb3IgcGF0aCB0byBhdHRyaWJ1dGVzIHRhYmxlLiIKK21zZ3N0ciAi5bGs5oCn6KGo55qE5ZCN56ix5oiW6Lev5b6RIgorCisjOiBQcm9ncmFtcy9jb25maWcuYzo1MzYKK21zZ2lkICJOYW1lIG9mIG9yIHBhdGggdG8gY29udHJhY3Rpb24gdGFibGUuIgorbXNnc3RyICLnuK7lr6vooajnmoTlkI3nqLHmiJbot6/lvpEiCisKKyM6IFByb2dyYW1zL2NvbmZpZy5jOjQwMAorbXNnaWQgIk5hbWUgb2Ygb3IgcGF0aCB0byBkZWZhdWx0IHByZWZlcmVuY2VzIGZpbGUuIgorbXNnc3RyICLpoJDoqK3lgY/lpb3oqK3lrprmqpTnmoTlkI3nqLHmiJbot6/lvpEiCisKKyM6IFByb2dyYW1zL2NvbmZpZy5jOjU1MworbXNnaWQgIk5hbWUgb2Ygb3IgcGF0aCB0byBrZXlib2FyZCB0YWJsZS4iCittc2dzdHIgIuaMiemNteihqOeahOWQjeeoseaIlui3r+W+kSIKKworIzogUHJvZ3JhbXMvY29uZmlnLmM6NTg5Cittc2dpZCAiTmFtZSBvZiBvciBwYXRoIHRvIHNwZWVjaCBpbnB1dCBvYmplY3QuIgorbXNnc3RyICLoqp7pn7PovLjlhaXnianku7bnmoTlkI3nqLHmiJbot6/lvpEiCisKKyM6IFByb2dyYW1zL2NvbmZpZy5jOjUyNgorIywgYy1mb3JtYXQKK21zZ2lkICJOYW1lIG9mIG9yIHBhdGggdG8gdGV4dCB0YWJsZSAob3IgJXMpLiIKK21zZ3N0ciAi5paH5a2X6KGoICjmiJYgJXMpIOeahOWQjeeoseaIlui3r+W+kSIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjg0NQorbXNnaWQgIk5hdmlnYXRpb24gT3B0aW9ucyIKK21zZ3N0ciAi5bCO6Ka96YG45ZCRIgorCisjOiBQcm9ncmFtcy9tZW51LmM6NTIzCittc2dpZCAiTm8iCittc2dzdHIgIuWQpiIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjcyMAorbXNnaWQgIk5vIENhcGl0YWxpemF0aW9uIgorbXNnc3RyICLmspLmnInlpKflr6siCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzo4OTcgUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjExNDEKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzoxMTU0IFByb2dyYW1zL21lbnVfcHJlZnMuYzoxMTY3CisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6MTI5NyBQcm9ncmFtcy9tZW51X3ByZWZzLmM6MTMzNgorIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjEzNTYKK21zZ2lkICJOb25lIgorbXNnc3RyICLmspLmnIkiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzoxNDkxCittc2dpZCAiTm90aWNlIgorbXNnc3RyICLms6jmhI8iCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBuYW1lIG9mIE1JREkgbXVzaWNhbCBpbnN0cnVtZW50ICM2OSAoaW4gdGhlIFJlZWQgZ3JvdXApLgorIzogUHJvZ3JhbXMvbWlkaS5jOjI5MgorbXNnaWQgIk9ib2UiCittc2dzdHIgIumbmeewp+euoSIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIG5hbWUgb2YgTUlESSBtdXNpY2FsIGluc3RydW1lbnQgIzgwIChpbiB0aGUgUGlwZSBncm91cCkuCisjOiBQcm9ncmFtcy9taWRpLmM6MzI2Cittc2dpZCAiT2NhcmluYSIKK21zZ3N0ciAi6Zm256ybIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6OTYwCittc2dpZCAiT2ZmIgorbXNnc3RyICLpl5wiCisKKyM6IFByb2dyYW1zL2NvbmZpZy5jOjE3NDAKK21zZ2lkICJPbGQgUHJlZmVyZW5jZXMgRmlsZSIKK21zZ3N0ciAi6IiK55qE5YGP5aW96Kit5a6a5qqUIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6OTczCittc2dpZCAiT24gRmlyc3QgUmVsZWFzZSIKK21zZ3N0ciAi56ys5LiA5YCL5oyJ6Y215pS+6ZaLIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgbmFtZSBvZiBNSURJIG11c2ljYWwgaW5zdHJ1bWVudCAjNTYgKGluIHRoZSBFbnNlbWJsZSBncm91cCkuCisjOiBQcm9ncmFtcy9taWRpLmM6MjUxCittc2dpZCAiT3JjaGVzdHJhIEhpdCIKK21zZ3N0ciAi566h57WD5qiC5YW26amfIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgbmFtZSBvZiBNSURJIG11c2ljYWwgaW5zdHJ1bWVudCAjNDcgKGluIHRoZSBTdHJpbmdzIGdyb3VwKS4KKyM6IFByb2dyYW1zL21pZGkuYzoyMjMKK21zZ2lkICJPcmNoZXN0cmFsIEhhcnAiCittc2dzdHIgIuixjueQtCIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIG5hbWUgb2YgTUlESSBtdXNpY2FsIGluc3RydW1lbnQgZ3JvdXAgIzMuCisjOiBQcm9ncmFtcy9taWRpLmM6MzEKK21zZ2lkICJPcmdhbiIKK21zZ3N0ciAi566h6aKo55C0IgorCisjOiBQcm9ncmFtcy9sb2cuYzo3NgorbXNnaWQgIk91dHB1dCBQYWNrZXRzIgorbXNnc3RyICLovLjlh7rpoqjljIUiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBuYW1lIG9mIE1JREkgbXVzaWNhbCBpbnN0cnVtZW50ICMzMCAoaW4gdGhlIEd1aXRhciBncm91cCkuCisjOiBQcm9ncmFtcy9taWRpLmM6MTcwCittc2dpZCAiT3ZlcmRyaXZlbiBHdWl0YXIiCittc2dzdHIgIui2hemfs+WQieS7liIKKworIzogRHJpdmVycy9CcmFpbGxlL0lyaXMvYnJhaWxsZS5jOjE1NDUKK21zZ2lkICJQQyBtb2RlIgorbXNnc3RyICJQQyDmqKHlvI8iCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzoxMDU3Cittc2dpZCAiUENNIgorbXNnc3RyICJQQ00iCisKKyM6IFByb2dyYW1zL2NvbmZpZy5jOjYyNQorbXNnaWQgIlBDTSAoc291bmRjYXJkIGRpZ2l0YWwgYXVkaW8pIGRldmljZSBzcGVjaWZpZXIuIgorbXNnc3RyICJQQ00g77yI6Z+z5pWI5Y2h5pW45L2N6Z+z5pWI77yJ6Kit5YKZ5oyH5a6aIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6MTA3MAorbXNnaWQgIlBDTSBWb2x1bWUiCittc2dzdHIgIlBDTSDpn7Pph48iCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgUEFTU1BTMiBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6MTQ4NworbXNnaWQgIlBTLzIgKHNldCAzKSBrZXlib2FyZCBzY2FuIGNvZGUiCittc2dzdHIgIlBTLzIgKHNldCAzKSDpjbXnm6TmjoPmj4/norwiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzoxNDI5Cittc2dpZCAiUGFja2FnZSBSZXZpc2lvbiIKK21zZ3N0ciAi5aWX5Lu25L+u6KiC54mI5pysIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6MTQyNAorbXNnaWQgIlBhY2thZ2UgVmVyc2lvbiIKK21zZ3N0ciAi5aWX5Lu254mI5pysIgorCisjLiBTeW50aCBQYWQKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBuYW1lIG9mIE1JREkgbXVzaWNhbCBpbnN0cnVtZW50ICM4OSAoaW4gdGhlIFN5bnRoIFBhZCBncm91cCkuCisjOiBQcm9ncmFtcy9taWRpLmM6MzU1Cittc2dpZCAiUGFkIDEgKG5ldyBhZ2UpIgorbXNnc3RyICJwYWQgMSAo5paw5LiW57SAKSIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIG5hbWUgb2YgTUlESSBtdXNpY2FsIGluc3RydW1lbnQgIzkwIChpbiB0aGUgU3ludGggUGFkIGdyb3VwKS4KKyM6IFByb2dyYW1zL21pZGkuYzozNTgKK21zZ2lkICJQYWQgMiAod2FybSkiCittc2dzdHIgInBhZCAyICjmuqvmmpYpIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgbmFtZSBvZiBNSURJIG11c2ljYWwgaW5zdHJ1bWVudCAjOTEgKGluIHRoZSBTeW50aCBQYWQgZ3JvdXApLgorIzogUHJvZ3JhbXMvbWlkaS5jOjM2MQorbXNnaWQgIlBhZCAzIChwb2x5c3ludGgpIgorbXNnc3RyICJwYWQgMyAo5aSa6Z+z5ZCI5oiQKSIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIG5hbWUgb2YgTUlESSBtdXNpY2FsIGluc3RydW1lbnQgIzkyIChpbiB0aGUgU3ludGggUGFkIGdyb3VwKS4KKyM6IFByb2dyYW1zL21pZGkuYzozNjQKK21zZ2lkICJQYWQgNCAoY2hvaXIpIgorbXNnc3RyICJwYWQgNCAo5ZCI5ZSxKSIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIG5hbWUgb2YgTUlESSBtdXNpY2FsIGluc3RydW1lbnQgIzkzIChpbiB0aGUgU3ludGggUGFkIGdyb3VwKS4KKyM6IFByb2dyYW1zL21pZGkuYzozNjcKK21zZ2lkICJQYWQgNSAoYm93ZWQpIgorbXNnc3RyICJwYWQgNSAoYm93ZWQpIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgbmFtZSBvZiBNSURJIG11c2ljYWwgaW5zdHJ1bWVudCAjOTQgKGluIHRoZSBTeW50aCBQYWQgZ3JvdXApLgorIzogUHJvZ3JhbXMvbWlkaS5jOjM3MAorbXNnaWQgIlBhZCA2IChtZXRhbGxpYykiCittc2dzdHIgInBhZCA2ICjph5HlsawpIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgbmFtZSBvZiBNSURJIG11c2ljYWwgaW5zdHJ1bWVudCAjOTUgKGluIHRoZSBTeW50aCBQYWQgZ3JvdXApLgorIzogUHJvZ3JhbXMvbWlkaS5jOjM3MworbXNnaWQgIlBhZCA3IChoYWxvKSIKK21zZ3N0ciAicGFkIDcgKGhhbG8pIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgbmFtZSBvZiBNSURJIG11c2ljYWwgaW5zdHJ1bWVudCAjOTYgKGluIHRoZSBTeW50aCBQYWQgZ3JvdXApLgorIzogUHJvZ3JhbXMvbWlkaS5jOjM3NgorbXNnaWQgIlBhZCA4IChzd2VlcCkiCittc2dzdHIgInBhZCA4IChTd2VlcCkiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBuYW1lIG9mIE1JREkgbXVzaWNhbCBpbnN0cnVtZW50ICM3NiAoaW4gdGhlIFBpcGUgZ3JvdXApLgorIzogUHJvZ3JhbXMvbWlkaS5jOjMxNAorbXNnaWQgIlBhbiBGbHV0ZSIKK21zZ3N0ciAi5o6S56ybIgorCisjOiBQcm9ncmFtcy9jb25maWcuYzo0NjIKK21zZ2lkICJQYXJhbWV0ZXJzIGZvciB0aGUgYXBwbGljYXRpb24gcHJvZ3JhbW1pbmcgaW50ZXJmYWNlLiIKK21zZ3N0ciAi56iL5byP6Kit6KiI55WM6Z2i5Y+D5pW4IgorCisjOiBQcm9ncmFtcy9jb25maWcuYzo0ODQKK21zZ2lkICJQYXJhbWV0ZXJzIGZvciB0aGUgYnJhaWxsZSBkcml2ZXIuIgorbXNnc3RyICLpu57lrZfpqYXli5Xlj4PmlbgiCisKKyM6IFByb2dyYW1zL2NvbmZpZy5jOjM1NworbXNnaWQgIlBhcmFtZXRlcnMgZm9yIHRoZSBwcml2aWxlZ2UgZXN0YWJsaXNobWVudCBzdGFnZS4iCittc2dzdHIgIuasiumZkOW7uueri+majuauteeahOWPg+aVuCIKKworIzogUHJvZ3JhbXMvY29uZmlnLmM6NjE2Cittc2dpZCAiUGFyYW1ldGVycyBmb3IgdGhlIHNjcmVlbiBkcml2ZXIuIgorbXNnc3RyICLonqLluZXpqYXli5Xlj4PmlbgiCisKKyM6IFByb2dyYW1zL2NvbmZpZy5jOjU4MQorbXNnaWQgIlBhcmFtZXRlcnMgZm9yIHRoZSBzcGVlY2ggZHJpdmVyLiIKK21zZ3N0ciAi6Kqe6Z+z6amF5YuV5Y+D5pW4IgorCisjOiBQcm9ncmFtcy9jb25maWcuYzozOTEKK21zZ2lkICJQYXRoIHRvIGRlZmF1bHQgc2V0dGluZ3MgZmlsZS4iCittc2dzdHIgIumgkOioreioreWumuaqlOahiOi3r+W+kSIKKworIzogUHJvZ3JhbXMvY29uZmlnLmM6NDQ1Cittc2dpZCAiUGF0aCB0byBkaXJlY3RvcnkgY29udGFpbmluZyBkcml2ZXJzLiIKK21zZ3N0ciAi5YyF5ZCr6amF5YuV55qE55uu6YyE6Lev5b6RIgorCisjOiBQcm9ncmFtcy9icmx0ZXN0LmM6NjggUHJvZ3JhbXMvYnJsdHR5LWF0Yi5jOjM2IFByb2dyYW1zL2JybHR0eS1jdGIuYzo1NAorIzogUHJvZ3JhbXMvYnJsdHR5LWt0Yi5jOjczIFByb2dyYW1zL2NvbmZpZy5jOjUxNgorbXNnaWQgIlBhdGggdG8gZGlyZWN0b3J5IGNvbnRhaW5pbmcgdGFibGVzLiIKK21zZ3N0ciAi5bCN54Wn6KGo5omA5Zyo55uu6YyE6Lev5b6RIgorCisjOiBQcm9ncmFtcy9icmx0dHktdHRiLmM6MTUyCittc2dpZCAiUGF0aCB0byBkaXJlY3RvcnkgY29udGFpbmluZyB0ZXh0IHRhYmxlcy4iCittc2dzdHIgIuWMheWQq+aWh+Wtl+ihqOeahOebrumMhOi3r+W+kSIKKworIzogUHJvZ3JhbXMvYnJsdHR5LWt0Yi5jOjgzCittc2dpZCAiUGF0aCB0byBkaXJlY3RvcnkgZm9yIGxvYWRpbmcgZHJpdmVycy4iCittc2dzdHIgIumpheWLleeoi+W8j+aJgOWcqOebrumMhOi3r+W+kSIKKworIzogUHJvZ3JhbXMvYnJsdHR5LXRydHh0LmM6NTEKK21zZ2lkICJQYXRoIHRvIGRpcmVjdG9yeSBmb3IgdGV4dCB0YWJsZXMuIgorbXNnc3RyICLmloflrZfooajmiYDlnKjnm67pjITot6/lvpEiCisKKyM6IFByb2dyYW1zL2JybHRlc3QuYzo3OCBQcm9ncmFtcy9jb25maWcuYzo0MzUKK21zZ2lkICJQYXRoIHRvIGRpcmVjdG9yeSB3aGljaCBjYW4gYmUgd3JpdHRlbiB0by4iCittc2dzdHIgIuWPr+Wvq+WFpeeahOebrumMhOi3r+W+kSIKKworIzogUHJvZ3JhbXMvY29uZmlnLmM6NDI1Cittc2dpZCAiUGF0aCB0byBkaXJlY3Rvcnkgd2hpY2ggY29udGFpbnMgZmlsZXMgdGhhdCBjYW4gYmUgdXBkYXRlZC4iCittc2dzdHIgIuWMheWQq+WPr+WNh+e0muaqlOahiOeahOebrumMhOi3r+W+kSIKKworIzogUHJvZ3JhbXMvY29uZmlnLmM6MzI1Cittc2dpZCAiUGF0aCB0byBkaXJlY3Rvcnkgd2hpY2ggY29udGFpbnMgbWVzc2FnZSBsb2NhbGl6YXRpb25zLiIKK21zZ3N0ciAi5YyF5ZCr6KiK5oGv5pys5Zyw5YyW55qE55uu6YyE6Lev5b6R44CCIgorCisjOiBQcm9ncmFtcy9icmx0dHktdHJ0eHQuYzo1OQorbXNnaWQgIlBhdGggdG8gaW5wdXQgdGV4dCB0YWJsZS4iCittc2dzdHIgIui8uOWFpeaWh+Wtl+ihqOi3r+W+kSIKKworIzogUHJvZ3JhbXMvY29uZmlnLmM6Njc0Cittc2dpZCAiUGF0aCB0byBsb2cgZmlsZS4iCittc2dzdHIgIuiomOmMhOaqlOi3r+W+kSIKKworIzogUHJvZ3JhbXMvYnJsdHR5LXRydHh0LmM6NjcKK21zZ2lkICJQYXRoIHRvIG91dHB1dCB0ZXh0IHRhYmxlLiIKK21zZ3N0ciAi6Ly45Ye65paH5a2X6KGo6Lev5b6RIgorCisjOiBQcm9ncmFtcy9jb25maWcuYzozODEKK21zZ2lkICJQYXRoIHRvIHByb2Nlc3MgaWRlbnRpZmllciBmaWxlLiIKK21zZ3N0ciAi6JmV55CG56iL5bqP5Luj6Jmf5qqU55qE6Lev5b6RIgorCisjOiBQcm9ncmFtcy9jb25maWcuYzo0MTUKK21zZ2lkICJQYXR0ZXJucyB0aGF0IG1hdGNoIGNvbW1hbmQgcHJvbXB0cy4iCittc2dzdHIgIuespuWQiOWRveS7pOaPkOekuueahOaoo+W8jyIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIG5hbWUgb2YgTUlESSBtdXNpY2FsIGluc3RydW1lbnQgZ3JvdXAgIzE1LgorIzogUHJvZ3JhbXMvbWlkaS5jOjcxCittc2dpZCAiUGVyY3Vzc2l2ZSBJbnN0cnVtZW50cyIKK21zZ3N0ciAi5omT5pOK5qiC5ZmoIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgbmFtZSBvZiBNSURJIG11c2ljYWwgaW5zdHJ1bWVudCAjMTggKGluIHRoZSBPcmdhbiBncm91cCkuCisjOiBQcm9ncmFtcy9taWRpLmM6MTMzCittc2dpZCAiUGVyY3Vzc2l2ZSBPcmdhbiIKK21zZ3N0ciAi5omT5pOK566h6aKo55C0IgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgbmFtZSBvZiBNSURJIG11c2ljYWwgaW5zdHJ1bWVudCBncm91cCAjMS4KKyM6IFByb2dyYW1zL21pZGkuYzoyNQorbXNnaWQgIlBpYW5vIgorbXNnc3RyICLpi7znkLQiCisKKyMuIFBpcGUKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBuYW1lIG9mIE1JREkgbXVzaWNhbCBpbnN0cnVtZW50ICM3MyAoaW4gdGhlIFBpcGUgZ3JvdXApLgorIzogUHJvZ3JhbXMvbWlkaS5jOjMwNQorbXNnaWQgIlBpY2NvbG8iCittc2dzdHIgIuefreesmyIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIG5hbWUgb2YgTUlESSBtdXNpY2FsIGluc3RydW1lbnQgZ3JvdXAgIzEwLgorIzogUHJvZ3JhbXMvbWlkaS5jOjUyCittc2dpZCAiUGlwZSIKK21zZ3N0ciAi566h57eaIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgbmFtZSBvZiBNSURJIG11c2ljYWwgaW5zdHJ1bWVudCAjNDYgKGluIHRoZSBTdHJpbmdzIGdyb3VwKS4KKyM6IFByb2dyYW1zL21pZGkuYzoyMjAKK21zZ2lkICJQaXp6aWNhdG8gU3RyaW5ncyIKK21zZ3N0ciAi54675bymIgorCisjOiBEcml2ZXJzL0JyYWlsbGUvQmF1bS9icmFpbGxlLmM6MTE1OAorbXNnaWQgIlBvd2VyZG93biIKK21zZ3N0ciAi6ZmN5aOTIgorCisjOiBQcm9ncmFtcy9jb25maWcuYzoyODk2IFByb2dyYW1zL21lbnVfcHJlZnMuYzoxNDU5Cittc2dpZCAiUHJlZmVyZW5jZXMgRmlsZSIKK21zZ3N0ciAi5YGP5aW96Kit5a6a5qqUIgorCisjOiBQcm9ncmFtcy9zY3JfbWVudS5jOjI3MQorbXNnaWQgIlByZWZlcmVuY2VzIE1lbnUiCittc2dzdHIgIuWBj+WlveioreWumiIKKworIzogSGVhZGVycy9vcHRpb25zLmg6NzUKK21zZ2lkICJQcmludCBhIHVzYWdlIHN1bW1hcnkgKGFsbCBvcHRpb25zKSwgYW5kIHRoZW4gZXhpdC4iCittc2dzdHIgIuWNsOWHuueUqOazleaRmOimge+8iOaJgOaciemBuOWQke+8iWFsbGUgT3B0aW9uZW4pIOeEtuW+jOmAgOWHuiIKKworIzogSGVhZGVycy9vcHRpb25zLmg6NzAKK21zZ2lkICJQcmludCBhIHVzYWdlIHN1bW1hcnkgKGNvbW1vbmx5IHVzZWQgb3B0aW9ucyBvbmx5KSwgYW5kIHRoZW4gZXhpdC4iCittc2dzdHIgIuWNsOWHuueUqOazleaRmOimge+8iOWPquacieWFseeUqOmBuOWQke+8ieeEtuW+jOi3s+WHuiIKKworIzogUHJvZ3JhbXMvY29uZmlnLmM6Nzg4Cittc2dpZCAiUHJpdmlsZWdlIFBhcmFtZXRlciIKK21zZ3N0ciAi5qyK6ZmQ5Y+D5pW4IgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6MTQxMAorbXNnaWQgIlByb2ZpbGVzIgorbXNnc3RyICLoqK3lrprmqpQiCisKKyM6IFByb2dyYW1zL2NvbmZpZy5jOjU2MQorbXNnaWQgIlByb3BlcnRpZXMgb2YgZWxpZ2libGUga2V5Ym9hcmRzLiIKK21zZ3N0ciAi5ZCI5qC86Y2155uk55qE5bGs5oCnIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6OTUwCittc2dpZCAiUXVpY2sgU3BhY2UiCittc2dzdHIgIuepuueZvSIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjExNTgKK21zZ2lkICJSYWlzZSBQaXRjaCIKK21zZ3N0ciAi5o+Q6auY6Z+z6Kq/IgorCisjOiBQcm9ncmFtcy9jb25maWcuYzozMTYKK21zZ2lkICJSZWNvZ25pemUgZW52aXJvbm1lbnQgdmFyaWFibGVzLiIKK21zZ3N0ciAi6KqN6K2Y55Kw5aKD6K6K5pW4IgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgbmFtZSBvZiBNSURJIG11c2ljYWwgaW5zdHJ1bWVudCAjNzUgKGluIHRoZSBQaXBlIGdyb3VwKS4KKyM6IFByb2dyYW1zL21pZGkuYzozMTEKK21zZ2lkICJSZWNvcmRlciIKK21zZ3N0ciAi6YyE6Z+z5qmfIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgbmFtZSBvZiBNSURJIG11c2ljYWwgaW5zdHJ1bWVudCBncm91cCAjOS4KKyM6IFByb2dyYW1zL21pZGkuYzo0OQorbXNnaWQgIlJlZWQiCittc2dzdHIgIuewp+eJhyIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIG5hbWUgb2YgTUlESSBtdXNpY2FsIGluc3RydW1lbnQgIzIxIChpbiB0aGUgT3JnYW4gZ3JvdXApLgorIzogUHJvZ3JhbXMvbWlkaS5jOjE0MgorbXNnaWQgIlJlZWQgT3JnYW4iCittc2dzdHIgIuewp+eJh+miqOeQtCIKKworIzogUHJvZ3JhbXMvYnJsdHR5LWN0Yi5jOjgyCittc2dpZCAiUmVmb3JtYXQgaW5wdXQuIgorbXNnc3RyICLph43mlrDmoLzlvI/ovLjlhaUiCisKKyM6IFByb2dyYW1zL2NvbmZpZy5jOjUwNgorbXNnaWQgIlJlbGVhc2UgYnJhaWxsZSBkZXZpY2Ugd2hlbiBzY3JlZW4gb3Igd2luZG93IGlzIHVucmVhZGFibGUuIgorbXNnc3RyICLnlbbonqLluZXmiJboppbnqpfnhKHms5XplrHoroDmmYLph4vmlL7pu57lrZfoqK3lgpkiCisKKyM6IFByb2dyYW1zL3hicmxhcGkuYzoxMDYKK21zZ2lkICJSZW1haW4gYSBmb3JlZ3JvdW5kIHByb2Nlc3MiCittc2dzdHIgIuS/neeVmeWJjeaZr+iZleeQhueoi+W6jyIKKworIzogUHJvZ3JhbXMvY29uZmlnLmM6MzMyCittc2dpZCAiUmVtYWluIGEgZm9yZWdyb3VuZCBwcm9jZXNzLiIKK21zZ3N0ciAi5L+d55WZ5YmN5pmv6JmV55CG56iL5bqPIgorCisjOiBQcm9ncmFtcy9icmx0dHktdHJ0eHQuYzo3MworbXNnaWQgIlJlbW92ZSBkb3RzIHNldmVuIGFuZCBlaWdodC4iCittc2dzdHIgIuWunOmZpOS4g+WFq+m7niIKKworIzogUHJvZ3JhbXMvY29uZmlnLmM6MzQ3CisjLCBjLWZvcm1hdAorbXNnaWQgIlJlbW92ZSB0aGUgJXMgc2VydmljZSwgYW5kIHRoZW4gZXhpdC4iCittc2dzdHIgIuWunOmZpCAlcyDmnI3li5nnhLblvozpgIDlh7oiCisKKyM6IFByb2dyYW1zL2JybHR0eS1rdGIuYzo0NQorbXNnaWQgIlJlcG9ydCBwcm9ibGVtcyB3aXRoIHRoZSBrZXkgdGFibGUuIgorbXNnc3RyICLlm57loLHmjInpjbXooajllY/poYwiCisKKyM6IFByb2dyYW1zL2JybHR0eS10dGIuYzoxODYKK21zZ2lkICJSZXBvcnQgdGhlIGNoYXJhY3RlcnMgd2l0aGluIHRoZSBjdXJyZW50IHNjcmVlbiBmb250IHRoYXQgYXJlbid0IGRlZmluZWQgd2l0aGluIHRoZSB0ZXh0IHRhYmxlLiIKK21zZ3N0ciAi5Zue5aCx55uu5YmN6J6i5bmV5a2X5b2i5p2O55qE5a2X5YWD5Zyo5paH5a2X6KGo5p2O5rKS5pyJ5a6a576pIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6ODY2Cittc2dpZCAiUmVzdCBvZiBMaW5lIgorbXNnc3RyICLnm5vlpI/nmoTooYwiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzoxNTU4Cittc2dpZCAiUmVzdGFydCBCcmFpbGxlIERyaXZlciIKK21zZ3N0ciAi6YeN5paw5ZWf5YuV6bue5a2X6amF5YuVIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6MTU3MAorbXNnaWQgIlJlc3RhcnQgU2NyZWVuIERyaXZlciIKK21zZ3N0ciAi6YeN5paw5ZWf5YuV6J6i5bmV6amF5YuVIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6MTU2NAorbXNnaWQgIlJlc3RhcnQgU3BlZWNoIERyaXZlciIKK21zZ3N0ciAi6YeN5paw5ZWf5YuV6Kqe6Z+z6amF5YuVIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgbmFtZSBvZiBNSURJIG11c2ljYWwgaW5zdHJ1bWVudCAjMTIwIChpbiB0aGUgUGVyY3Vzc2l2ZSBncm91cCkuCisjOiBQcm9ncmFtcy9taWRpLmM6NDUyCittc2dpZCAiUmV2ZXJzZSBDeW1iYWwiCittc2dzdHIgIlJldmVyc2UgQ3ltYmFsIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6MTMzOAorbXNnaWQgIlJpZ2h0IgorbXNnc3RyICLlj7MiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBuYW1lIG9mIE1JREkgbXVzaWNhbCBpbnN0cnVtZW50ICMxOSAoaW4gdGhlIE9yZ2FuIGdyb3VwKS4KKyM6IFByb2dyYW1zL21pZGkuYzoxMzYKK21zZ2lkICJSb2NrIE9yZ2FuIgorbXNnc3RyICLmkJbmu77nrqHpoqjnkLQiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzo2NzQKK21zZ2lkICJTYXZlIG9uIEV4aXQiCittc2dzdHIgIumAgOWHuuWNgeWtmOaqlCIKKworIy4gImNhcCIgaGVyZSwgdXNlZCBkdXJpbmcgc3BlZWNoIG91dHB1dCwgaXMgc2hvcnQgZm9yICJjYXBpdGFsIi4KKyMuIEl0IGlzIHNwb2tlbiBqdXN0IGJlZm9yZSBhbiB1cHBlcmNhc2UgbGV0dGVyLCBlLmcuICJjYXAgQSIuCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6MTE1NworbXNnaWQgIlNheSBDYXAiCittc2dzdHIgIuiqquWkp+WvqyIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjExODEKK21zZ2lkICJTYXkgTGluZSBNb2RlIgorbXNnc3RyICLoqqrooYzmqKHlvI8iCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzoxMTY4Cittc2dpZCAiU2F5IFNwYWNlIgorbXNnc3RyICLoqqrnqbrnmb0iCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzo3ODAKK21zZ2lkICJTY3JlZW4gQ3Vyc29yIEJsaW5rIFBlcmlvZCIKK21zZ3N0ciAi6J6i5bmV5ri45qiZ6Lez5YuV6YCx5pyfIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6Nzg4Cittc2dpZCAiU2NyZWVuIEN1cnNvciBQZXJjZW50IFZpc2libGUiCittc2dzdHIgIuWPr+imi+ieouW5lea4uOaomeeZvuWIhuavlCIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjc2OAorbXNnaWQgIlNjcmVlbiBDdXJzb3IgU3R5bGUiCittc2dzdHIgIuieouW5lea4uOaomeW9oueLgCIKKworIzogUHJvZ3JhbXMvY29uZmlnLmM6MjM5MworbXNnaWQgIlNjcmVlbiBEcml2ZXIiCittc2dzdHIgIuieouW5lempheWLlSIKKworIzogUHJvZ3JhbXMvbG9nLmM6MTYwCittc2dpZCAiU2NyZWVuIERyaXZlciBFdmVudHMiCittc2dzdHIgIuieouW5lempheWLleS6i+S7tiIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjU1MAorbXNnaWQgIlNjcmVlbiBOdW1iZXIiCittc2dzdHIgIuieouW5lee3qOiZnyIKKworIzogUHJvZ3JhbXMvY29uZmlnLmM6MjM5OQorbXNnaWQgIlNjcmVlbiBQYXJhbWV0ZXIiCittc2dzdHIgIuieouW5leWPg+aVuCIKKworIzogUHJvZ3JhbXMvY29uZmlnLmM6NjA2CisjLCBjLWZvcm1hdAorbXNnaWQgIlNjcmVlbiBkcml2ZXIgY29kZSAoJXMsICVzLCBvciBvbmUgb2YgeyVzfSkuIgorbXNnc3RyICLonqLluZXpqYXli5Xnorw6ICglcywgJXMsIOaIliB7JXN9IOS5i+S4gCIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjg5MQorbXNnaWQgIlNjcm9sbC1hd2FyZSBDdXJzb3IgTmF2aWdhdGlvbiIKK21zZ3N0ciAi5ru+5YuV5byP5ri45qiZ5bCO6Ka9IgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgbmFtZSBvZiBNSURJIG11c2ljYWwgaW5zdHJ1bWVudCAjMTIzIChpbiB0aGUgU291bmQgRWZmZWN0cyBncm91cCkuCisjOiBQcm9ncmFtcy9taWRpLmM6NDYyCittc2dpZCAiU2Vhc2hvcmUiCittc2dzdHIgIua1t+a1qiIKKworIzogUHJvZ3JhbXMvbG9nLmM6MTMwCittc2dpZCAiU2VyaWFsIEkvTyIKK21zZ3N0ciAi5bqP5YiX6Ly45YWlL+i8uOWHuiIKKworIzogUHJvZ3JhbXMvbG9nLmM6MTI0Cittc2dpZCAiU2VydmVyIEV2ZW50cyIKK21zZ3N0ciAi5pyN5YuZ56iL5bqP5LqL5Lu2IgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgbmFtZSBvZiBNSURJIG11c2ljYWwgaW5zdHJ1bWVudCAjNzggKGluIHRoZSBQaXBlIGdyb3VwKS4KKyM6IFByb2dyYW1zL21pZGkuYzozMjAKK21zZ2lkICJTaGFrdWhhY2hpIgorbXNnc3RyICLlsLrlhasiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBuYW1lIG9mIE1JREkgbXVzaWNhbCBpbnN0cnVtZW50ICMxMDcgKGluIHRoZSBFdGhuaWMgZ3JvdXApLgorIzogUHJvZ3JhbXMvbWlkaS5jOjQxMgorbXNnaWQgIlNoYW1pc2VuIgorbXNnc3RyICLkuInlvKYiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBuYW1lIG9mIE1JREkgbXVzaWNhbCBpbnN0cnVtZW50ICMxMTIgKGluIHRoZSBFdGhuaWMgZ3JvdXApLgorIzogUHJvZ3JhbXMvbWlkaS5jOjQyNworbXNnaWQgIlNoYW5haSIKK21zZ3N0ciAi5bGx5aWI55C0IgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6Njg3Cittc2dpZCAiU2hvdyBBZHZhbmNlZCBTdWJtZW51cyIKK21zZ3N0ciAi6aGv56S66YCy6ZqO5a2Q6YG45ZauIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6NjkyCittc2dpZCAiU2hvdyBBbGwgSXRlbXMiCittc2dzdHIgIumhr+ekuuaJgOaciemgheebriIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjc5NgorbXNnaWQgIlNob3cgQXR0cmlidXRlcyIKK21zZ3N0ciAi6aGv56S65bGs5oCnIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6NzYzCittc2dpZCAiU2hvdyBTY3JlZW4gQ3Vyc29yIgorbXNnc3RyICLpoa/npLronqLluZXmuLjmqJkiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzoxMjkxCittc2dpZCAiU2hvdyBTZWNvbmRzIgorbXNnc3RyICLpoa/npLrnp5LmlbgiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzoxMjMzCittc2dpZCAiU2hvdyBTcGVlY2ggQ3Vyc29yIgorbXNnc3RyICLpoa/npLroqp7pn7PmuLjmqJkiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzo2ODIKK21zZ2lkICJTaG93IFN1Ym1lbnUgU2l6ZXMiCittc2dzdHIgIumhr+ekuuWtkOmBuOWWrumgheaVuCIKKworIy4gRXRobmljIEluc3RydW1lbnRzCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgbmFtZSBvZiBNSURJIG11c2ljYWwgaW5zdHJ1bWVudCAjMTA1IChpbiB0aGUgRXRobmljIGdyb3VwKS4KKyM6IFByb2dyYW1zL21pZGkuYzo0MDYKK21zZ2lkICJTaXRhciIKK21zZ3N0ciAi6KW/5aGU55C0IgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6ODU4Cittc2dpZCAiU2tpcCBCbGFuayBCcmFpbGxlIFdpbmRvd3MiCittc2dzdHIgIui3s+mBjuepuueZvem7nuWtl+imlueqlyIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjg1MgorbXNnaWQgIlNraXAgSWRlbnRpY2FsIExpbmVzIgorbXNnc3RyICLot7PpgY7nm7jlkIznmoTooYwiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzo4NjkKK21zZ2lkICJTa2lwIFdoaWNoIEJsYW5rIEJyYWlsbGUgV2luZG93cyIKK21zZ3N0ciAi6Lez6YGO5L2V56iu56m655m96bue5a2X6KaW56qXIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgbmFtZSBvZiBNSURJIG11c2ljYWwgaW5zdHJ1bWVudCAjMzcgKGluIHRoZSBCYXNzIGdyb3VwKS4KKyM6IFByb2dyYW1zL21pZGkuYzoxOTIKK21zZ2lkICJTbGFwIEJhc3MgMSIKK21zZ3N0ciAiU2xhcCBCYXNzIDEiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBuYW1lIG9mIE1JREkgbXVzaWNhbCBpbnN0cnVtZW50ICMzOCAoaW4gdGhlIEJhc3MgZ3JvdXApLgorIzogUHJvZ3JhbXMvbWlkaS5jOjE5NQorbXNnaWQgIlNsYXAgQmFzcyAyIgorbXNnc3RyICJTbGFwIEJhc3MgMiIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjEzMjEKK21zZ2lkICJTbGFzaCIKK21zZ3N0ciAi5YmK5ribIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6ODc0Cittc2dpZCAiU2xpZGluZyBCcmFpbGxlIFdpbmRvdyIKK21zZ3N0ciAi5ruR5YuV6bue5a2X6KaW56qXIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6MTE0MgorbXNnaWQgIlNvbWUiCittc2dzdHIgIuS4gOS6myIKKworIy4gUmVlZAorIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIG5hbWUgb2YgTUlESSBtdXNpY2FsIGluc3RydW1lbnQgIzY1IChpbiB0aGUgUmVlZCBncm91cCkuCisjOiBQcm9ncmFtcy9taWRpLmM6MjgwCittc2dpZCAiU29wcmFubyBTYXhvcGhvbmUiCittc2dzdHIgIumrmOmfs+iWqeWFi+aWr+miqCIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIG5hbWUgb2YgTUlESSBtdXNpY2FsIGluc3RydW1lbnQgZ3JvdXAgIzE2LgorIzogUHJvZ3JhbXMvbWlkaS5jOjc0Cittc2dpZCAiU291bmQgRWZmZWN0cyIKK21zZ3N0ciAi6Z+z5pWIIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6NTYxIFByb2dyYW1zL21lbnVfcHJlZnMuYzoxMzU3Cittc2dpZCAiU3BhY2UiCittc2dzdHIgIuepuueZvSIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjEyMjEKK21zZ2lkICJTcGVhayBDb21wbGV0ZWQgV29yZHMiCittc2dzdHIgIuacl+iugOWujOaVtOeahOWWruWtlyIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjEyMDkKK21zZ2lkICJTcGVhayBEZWxldGVkIENoYXJhY3RlcnMiCittc2dzdHIgIuacl+iugOWIqumZpOeahOWtl+WFgyIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjEyMDMKK21zZ2lkICJTcGVhayBJbnNlcnRlZCBDaGFyYWN0ZXJzIgorbXNnc3RyICLmnJforoDmj5LlhaXnmoTlrZflhYMiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzoxMjI3Cittc2dpZCAiU3BlYWsgTGluZSBJbmRlbnQiCittc2dzdHIgIuacl+iugOWFp+e4ruihjCIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjEyMTUKK21zZ2lkICJTcGVhayBSZXBsYWNlZCBDaGFyYWN0ZXJzIgorbXNnc3RyICLmnJforoDlj5bku6PnmoTlrZflhYMiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzoxMTk3Cittc2dpZCAiU3BlYWsgU2VsZWN0ZWQgQ2hhcmFjdGVyIgorbXNnc3RyICLmnJforoDpgbjlj5bnmoTlrZflhYMiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzoxMTkxCittc2dpZCAiU3BlYWsgU2VsZWN0ZWQgTGluZSIKK21zZ3N0ciAi5pyX6K6A6YG45Y+W55qE6KGMIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6MTI1MAorbXNnaWQgIlNwZWVjaCBDdXJzb3IgQmxpbmsgUGVyaW9kIgorbXNnc3RyICLoqp7pn7PmuLjmqJnot7Pli5XpgLHmnJ8iCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzoxMjU4Cittc2dpZCAiU3BlZWNoIEN1cnNvciBQZXJjZW50IFZpc2libGUiCittc2dzdHIgIuWPr+imi+iqnumfs+a4uOaomeeZvuWIhuavlCIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjEyMzgKK21zZ2lkICJTcGVlY2ggQ3Vyc29yIFN0eWxlIgorbXNnc3RyICLoqp7pn7PmuLjmqJnlvaLni4AiCisKKyM6IFByb2dyYW1zL2NvbmZpZy5jOjIxNjgKK21zZ2lkICJTcGVlY2ggRHJpdmVyIgorbXNnc3RyICLoqp7pn7PpqYXli5UiCisKKyM6IFByb2dyYW1zL2xvZy5jOjE1NAorbXNnaWQgIlNwZWVjaCBEcml2ZXIgRXZlbnRzIgorbXNnc3RyICLoqp7pn7PpqYXli5Xkuovku7YiCisKKyM6IFByb2dyYW1zL2xvZy5jOjExMgorbXNnaWQgIlNwZWVjaCBFdmVudHMiCittc2dzdHIgIuiqnumfs+S6i+S7tiIKKworIy4gQ3JlYXRlIHRoZSBmaWxlIHN5c3RlbSBvYmplY3QgZm9yIHNwZWVjaCBpbnB1dC4KKyM6IFByb2dyYW1zL2NvbmZpZy5jOjI5NjMKK21zZ2lkICJTcGVlY2ggSW5wdXQiCittc2dzdHIgIuiqnumfs+i8uOWFpSIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjExMTYKK21zZ2lkICJTcGVlY2ggT3B0aW9ucyIKK21zZ3N0ciAi6Kqe6Z+z6YG45ZCRIgorCisjOiBQcm9ncmFtcy9jb25maWcuYzoyMTcxCittc2dpZCAiU3BlZWNoIFBhcmFtZXRlciIKK21zZ3N0ciAi6Kqe6Z+z5Y+D5pW4IgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6MTEzMworbXNnaWQgIlNwZWVjaCBQaXRjaCIKK21zZ3N0ciAi6Kqe6Z+z6Z+z6Kq/IgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6MTE0NgorbXNnaWQgIlNwZWVjaCBQdW5jdHVhdGlvbiIKK21zZ3N0ciAi5pyX6K6A5qiZ6bueIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6MTEyNgorbXNnaWQgIlNwZWVjaCBSYXRlIgorbXNnc3RyICLoqp7pn7PpgJ/njociCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzoxMTYxCittc2dpZCAiU3BlZWNoIFVwcGVyY2FzZSBJbmRpY2F0b3IiCittc2dzdHIgIuiqquWHuuWkp+Wvq+espuiZnyIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjExMTkKK21zZ2lkICJTcGVlY2ggVm9sdW1lIgorbXNnc3RyICLoqp7pn7Ppn7Pph48iCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzoxMTcxCittc2dpZCAiU3BlZWNoIFdoaXRlc3BhY2UgSW5kaWNhdG9yIgorbXNnc3RyICLoqqrlh7rnqbrnmb3oqJjomZ8iCisKKyM6IFByb2dyYW1zL2NvbmZpZy5jOjU3MQorIywgYy1mb3JtYXQKK21zZ2lkICJTcGVlY2ggZHJpdmVyIGNvZGUgKCVzLCAlcywgb3Igb25lIG9mIHslc30pLiIKK21zZ3N0ciAi6Kqe6Z+z6amF5YuV56K8OiAoJXMsICVzIOaIliB7JXN9IOS5i+S4gCkiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzoxNTA1Cittc2dpZCAiU3RhbmRhcmQgRXJyb3IgTG9nIExldmVsIgorbXNnc3RyICLmqJnmupbpjK/oqqToqJjpjITnrYnntJoiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzo5MjYKK21zZ2lkICJTdGFydCBTZWxlY3Rpb24gd2l0aCBSb3V0aW5nIEtleSIKK21zZ3N0ciAi55So5a6a5L2N6Y216ZaL5aeL6YG45Y+WIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6NTUxCittc2dpZCAiU3RhdGUgRG90cyIKK21zZ3N0ciAi54uA5oWL6bueIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6NTUyCittc2dpZCAiU3RhdGUgTGV0dGVyIgorbXNnc3RyICLni4DmhYvlrZfmr40iCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzoxMzMyCittc2dpZCAiU3RhdHVzIENlbGxzIgorbXNnc3RyICLni4DmhYvmlrkiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzoxMzQ4Cittc2dpZCAiU3RhdHVzIENvdW50IgorbXNnc3RyICLni4DmhYvoqIjmlbgiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzo1NjUKK21zZ2lkICJTdGF0dXMgRmllbGQiCittc2dzdHIgIueLgOaFi+ashOS9jSIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjEzNDEKK21zZ2lkICJTdGF0dXMgUG9zaXRpb24iCittc2dzdHIgIueLgOaFi+S9jee9riIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjEzNjMKK21zZ2lkICJTdGF0dXMgU2VwYXJhdG9yIgorbXNnc3RyICLni4DmhYvliIbpmpTnrKbomZ8iCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzoxMzU5Cittc2dpZCAiU3RhdHVzIFNpZGUiCittc2dzdHIgIueLgOaFi+mCiuWBtCIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIG5hbWUgb2YgTUlESSBtdXNpY2FsIGluc3RydW1lbnQgIzExNSAoaW4gdGhlIFBlcmN1c3NpdmUgZ3JvdXApLgorIzogUHJvZ3JhbXMvbWlkaS5jOjQzNworbXNnaWQgIlN0ZWVsIERydW1zIgorbXNnc3RyICLpi7zpvJMiCisKKyM6IFByb2dyYW1zL2NvbmZpZy5jOjM3MQorIywgYy1mb3JtYXQKK21zZ2lkICJTdG9wIGFuIGV4aXN0aW5nIGluc3RhbmNlIG9mICVzLCBhbmQgdGhlbiBleGl0LiIKK21zZ3N0ciAi5YGc5q2i5a2Y5Zyo55qEICVzIOeoi+W6j+eEtuW+jOmAgOWHuiIKKworIy4gRW5zZW1ibGUKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBuYW1lIG9mIE1JREkgbXVzaWNhbCBpbnN0cnVtZW50ICM0OSAoaW4gdGhlIEVuc2VtYmxlIGdyb3VwKS4KKyM6IFByb2dyYW1zL21pZGkuYzoyMzAKK21zZ2lkICJTdHJpbmcgRW5zZW1ibGUgMSIKK21zZ3N0ciAi5bym5qiC57WEIDEiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBuYW1lIG9mIE1JREkgbXVzaWNhbCBpbnN0cnVtZW50ICM1MCAoaW4gdGhlIEVuc2VtYmxlIGdyb3VwKS4KKyM6IFByb2dyYW1zL21pZGkuYzoyMzMKK21zZ2lkICJTdHJpbmcgRW5zZW1ibGUgMiIKK21zZ3N0ciAi5bym5qiC57WEIDIiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBuYW1lIG9mIE1JREkgbXVzaWNhbCBpbnN0cnVtZW50IGdyb3VwICM2LgorIzogUHJvZ3JhbXMvbWlkaS5jOjQwCittc2dpZCAiU3RyaW5ncyIKK21zZ3N0ciAi5bym5qiCIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6NzIyCittc2dpZCAiU3VwZXJpbXBvc2UgRG90IDciCittc2dzdHIgIuWKoOS4iuesrOS4g+m7niIKKworIzogUHJvZ3JhbXMvY29uZmlnLmM6NjU3Cittc2dpZCAiU3VwcHJlc3Mgc3RhcnQtdXAgbWVzc2FnZXMuIgorbXNnc3RyICLlj5bmtojllZ/li5XoqIrmga8iCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBuYW1lIG9mIE1JREkgbXVzaWNhbCBpbnN0cnVtZW50ICMzOSAoaW4gdGhlIEJhc3MgZ3JvdXApLgorIzogUHJvZ3JhbXMvbWlkaS5jOjE5OAorbXNnaWQgIlN5bnRoIEJhc3MgMSIKK21zZ3N0ciAi5ZCI5oiQ6KKr5Y+4IDEiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBuYW1lIG9mIE1JREkgbXVzaWNhbCBpbnN0cnVtZW50ICM0MCAoaW4gdGhlIEJhc3MgZ3JvdXApLgorIzogUHJvZ3JhbXMvbWlkaS5jOjIwMQorbXNnaWQgIlN5bnRoIEJhc3MgMiIKK21zZ3N0ciAi5ZCI5oiQ6KKr5Y+4IDIiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBuYW1lIG9mIE1JREkgbXVzaWNhbCBpbnN0cnVtZW50ICMxMTkgKGluIHRoZSBQZXJjdXNzaXZlIGdyb3VwKS4KKyM6IFByb2dyYW1zL21pZGkuYzo0NDkKK21zZ2lkICJTeW50aCBEcnVtIgorbXNnc3RyICLlkIjmiJDpvJMiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBuYW1lIG9mIE1JREkgbXVzaWNhbCBpbnN0cnVtZW50IGdyb3VwICMxMy4KKyMuIHhnZXR0ZXh0OiAoc3ludGggaXMgYSBjb21tb24gc2hvcnQgZm9ybSBmb3Igc3ludGhlc2l6ZXIpCisjLiB4Z2V0dGV4dDogKEZNIGlzIHRoZSBhY3JvbnltIGZvciBGcmVxdWVuY3kgTW9kdWxhdGlvbikKKyM6IFByb2dyYW1zL21pZGkuYzo2NQorbXNnaWQgIlN5bnRoIEZNIgorbXNnc3RyICLlkIjmiJAgRk0iCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBuYW1lIG9mIE1JREkgbXVzaWNhbCBpbnN0cnVtZW50IGdyb3VwICMxMS4KKyMuIHhnZXR0ZXh0OiAoc3ludGggaXMgYSBjb21tb24gc2hvcnQgZm9ybSBmb3Igc3ludGhlc2l6ZXIpCisjOiBQcm9ncmFtcy9taWRpLmM6NTYKK21zZ2lkICJTeW50aCBMZWFkIgorbXNnc3RyICLlkIjmiJAgTGVhZCIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIG5hbWUgb2YgTUlESSBtdXNpY2FsIGluc3RydW1lbnQgZ3JvdXAgIzEyLgorIy4geGdldHRleHQ6IChzeW50aCBpcyBhIGNvbW1vbiBzaG9ydCBmb3JtIGZvciBzeW50aGVzaXplcikKKyM6IFByb2dyYW1zL21pZGkuYzo2MAorbXNnaWQgIlN5bnRoIFBhZCIKK21zZ3N0ciAi5ZCI5oiQIHBhZCIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIG5hbWUgb2YgTUlESSBtdXNpY2FsIGluc3RydW1lbnQgIzU1IChpbiB0aGUgRW5zZW1ibGUgZ3JvdXApLgorIzogUHJvZ3JhbXMvbWlkaS5jOjI0OAorbXNnaWQgIlN5bnRoIFZvaWNlIgorbXNnc3RyICLlkIjmiJDkurrogbIiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBuYW1lIG9mIE1JREkgbXVzaWNhbCBpbnN0cnVtZW50ICM2MyAoaW4gdGhlIEJyYXNzIGdyb3VwKS4KKyM6IFByb2dyYW1zL21pZGkuYzoyNzMKK21zZ2lkICJTeW50aEJyYXNzIDEiCittc2dzdHIgIuWQiOaIkOmKheeuoSAxIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgbmFtZSBvZiBNSURJIG11c2ljYWwgaW5zdHJ1bWVudCAjNjQgKGluIHRoZSBCcmFzcyBncm91cCkuCisjOiBQcm9ncmFtcy9taWRpLmM6Mjc2Cittc2dpZCAiU3ludGhCcmFzcyAyIgorbXNnc3RyICLlkIjmiJDpioXnrqEgMiIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIG5hbWUgb2YgTUlESSBtdXNpY2FsIGluc3RydW1lbnQgIzUxIChpbiB0aGUgRW5zZW1ibGUgZ3JvdXApLgorIzogUHJvZ3JhbXMvbWlkaS5jOjIzNgorbXNnaWQgIlN5bnRoU3RyaW5ncyAxIgorbXNnc3RyICLlkIjmiJDlvKbmqIIgMSIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIG5hbWUgb2YgTUlESSBtdXNpY2FsIGluc3RydW1lbnQgIzUyIChpbiB0aGUgRW5zZW1ibGUgZ3JvdXApLgorIzogUHJvZ3JhbXMvbWlkaS5jOjIzOQorbXNnaWQgIlN5bnRoU3RyaW5ncyAyIgorbXNnc3RyICLlkIjmiJDlvKbmqIIgMiIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjE1MDAKK21zZ2lkICJTeXN0ZW0gTG9nIExldmVsIgorbXNnc3RyICLns7vntbHoqJjpjITnrYnntJoiCisKKyM6IFByb2dyYW1zL2NvbmZpZy5jOjI5MTcgUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjE0NzQKK21zZ2lkICJUYWJsZXMgRGlyZWN0b3J5IgorbXNnc3RyICLlsI3nhafooajnm67pjIQiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBuYW1lIG9mIE1JREkgbXVzaWNhbCBpbnN0cnVtZW50ICMxMTcgKGluIHRoZSBQZXJjdXNzaXZlIGdyb3VwKS4KKyM6IFByb2dyYW1zL21pZGkuYzo0NDMKK21zZ2lkICJUYWlrbyBEcnVtIgorbXNnc3RyICLlpKrpvJMiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBuYW1lIG9mIE1JREkgbXVzaWNhbCBpbnN0cnVtZW50ICMyNCAoaW4gdGhlIE9yZ2FuIGdyb3VwKS4KKyM6IFByb2dyYW1zL21pZGkuYzoxNTEKK21zZ2lkICJUYW5nbyBBY2NvcmRpb24iCittc2dzdHIgIuaOouaIiOaJi+miqOeQtCIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIG5hbWUgb2YgTUlESSBtdXNpY2FsIGluc3RydW1lbnQgIzEyNSAoaW4gdGhlIFNvdW5kIEVmZmVjdHMgZ3JvdXApLgorIzogUHJvZ3JhbXMvbWlkaS5jOjQ2OAorbXNnaWQgIlRlbGVwaG9uZSBSaW5nIgorbXNnc3RyICLpm7voqbHpiLTnlJ8iCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBuYW1lIG9mIE1JREkgbXVzaWNhbCBpbnN0cnVtZW50ICM2NyAoaW4gdGhlIFJlZWQgZ3JvdXApLgorIzogUHJvZ3JhbXMvbWlkaS5jOjI4NgorbXNnaWQgIlRlbm9yIFNheG9waG9uZSIKK21zZ3N0ciAi5qyh5Lit6Z+z6Jap5YWL5pav6aKoIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6NzYwCittc2dpZCAiVGV4dCBJbmRpY2F0b3JzIgorbXNnc3RyICLmloflrZfmqJnoqJgiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzoxMzYwCittc2dpZCAiVGV4dCBTaWRlIgorbXNnc3RyICLmloflrZfpgorlgbQiCisKKyM6IFByb2dyYW1zL2NvbmZpZy5jOjk0MyBQcm9ncmFtcy9tZW51X3ByZWZzLmM6MTM4OAorbXNnaWQgIlRleHQgVGFibGUiCittc2dzdHIgIuaWh+Wtl+ihqCIKKworIzogUHJvZ3JhbXMvYnJsdHR5LWN0Yi5jOjY5Cittc2dpZCAiVGV4dCB0YWJsZS4iCittc2dzdHIgIuaWh+Wtl+ihqCIKKworIzogUHJvZ3JhbXMvY29uZmlnLmM6MzAyCittc2dpZCAiVGhlIHRleHQgdG8gYmUgc2hvd24gd2hlbiB0aGUgYnJhaWxsZSBkcml2ZXIgc3RhcnRzIGFuZCB0byBiZSBzcG9rZW4gd2hlbiB0aGUgc3BlZWNoIGRyaXZlciBzdGFydHMuIgorbXNnc3RyICLpu57lrZfllZ/li5Xpoa/npLrkvZXoqp7pn7PllZ/li5XmnJforoDnmoTmloflrZciCisKKyM6IFByb2dyYW1zL2NvbmZpZy5jOjMwOQorbXNnaWQgIlRoZSB0ZXh0IHRvIGJlIHNob3duIHdoZW4gdGhlIGJyYWlsbGUgZHJpdmVyIHN0b3BzLiIKK21zZ3N0ciAi6bue5a2X5YGc55So6aGv56S655qE5paH5a2XIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6NTUzCittc2dpZCAiVGltZSIKK21zZ3N0ciAi5pmC6ZaTIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6MTI3NgorbXNnaWQgIlRpbWUgRm9ybWF0IgorbXNnc3RyICLmmYLplpPmoLzlvI8iCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzoxMjY4Cittc2dpZCAiVGltZSBQcmVzZW50YXRpb24iCittc2dzdHIgIuaZgumWk+ihqOekuuazlSIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjEyODYKK21zZ2lkICJUaW1lIFNlcGFyYXRvciIKK21zZ3N0ciAi5pmC6ZaT5YiG6ZqU56ym6JmfIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgbmFtZSBvZiBNSURJIG11c2ljYWwgaW5zdHJ1bWVudCAjNDggKGluIHRoZSBTdHJpbmdzIGdyb3VwKS4KKyM6IFByb2dyYW1zL21pZGkuYzoyMjYKK21zZ2lkICJUaW1wYW5pIgorbXNnc3RyICLlrprpn7PpvJMiCisKKyMuIFBlcmN1c3NpdmUgSW5zdHJ1bWVudHMKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBuYW1lIG9mIE1JREkgbXVzaWNhbCBpbnN0cnVtZW50ICMxMTMgKGluIHRoZSBQZXJjdXNzaXZlIGdyb3VwKS4KKyM6IFByb2dyYW1zL21pZGkuYzo0MzEKK21zZ2lkICJUaW5rbGUgQmVsbCIKK21zZ3N0ciAi54mb6Zu2IgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6MTU1NAorbXNnaWQgIlRvb2xzIgorbXNnc3RyICLlt6XlhbciCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzoxMDAzCittc2dpZCAiVG91Y2ggTmF2aWdhdGlvbiIKK21zZ3N0ciAi6Ke45o6n5bCO6Ka9IgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6MTAxNworbXNnaWQgIlRvdWNoIFNlbnNpdGl2aXR5IgorbXNnc3RyICLop7jmjqfpnYjmlY/luqYiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzo5MTUKK21zZ2lkICJUcmFjayBTY3JlZW4gUG9pbnRlciIKK21zZ3N0ciAi6L+96Lmk6J6i5bmV5oyH5qiZIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6OTA5Cittc2dpZCAiVHJhY2sgU2NyZWVuIFNjcm9sbCIKK21zZ3N0ciAi6L+96Lmk6J6i5bmV5o2y5YuVIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6OTQxCittc2dpZCAiVHJhbnNsYXRlZCB2aWEgVGV4dCBUYWJsZSIKK21zZ3N0ciAi55Sx5paH5a2X6KGo57+76K2vIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgbmFtZSBvZiBNSURJIG11c2ljYWwgaW5zdHJ1bWVudCAjNDUgKGluIHRoZSBTdHJpbmdzIGdyb3VwKS4KKyM6IFByb2dyYW1zL21pZGkuYzoyMTcKK21zZ2lkICJUcmVtb2xvIFN0cmluZ3MiCittc2dzdHIgIumZo+mfs+W8puaogiIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIG5hbWUgb2YgTUlESSBtdXNpY2FsIGluc3RydW1lbnQgIzU4IChpbiB0aGUgQnJhc3MgZ3JvdXApLgorIzogUHJvZ3JhbXMvbWlkaS5jOjI1OAorbXNnaWQgIlRyb21ib25lIgorbXNnc3RyICLkvLjnuK7lloflj60iCisKKyMuIEJyYXNzCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgbmFtZSBvZiBNSURJIG11c2ljYWwgaW5zdHJ1bWVudCAjNTcgKGluIHRoZSBCcmFzcyBncm91cCkuCisjOiBQcm9ncmFtcy9taWRpLmM6MjU1Cittc2dpZCAiVHJ1bXBldCIKK21zZ3N0ciAi5bCP5ZaH5Y+tIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgbmFtZSBvZiBNSURJIG11c2ljYWwgaW5zdHJ1bWVudCAjNTkgKGluIHRoZSBCcmFzcyBncm91cCkuCisjOiBQcm9ncmFtcy9taWRpLmM6MjYxCittc2dpZCAiVHViYSIKK21zZ3N0ciAi5aSn6JmfIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgbmFtZSBvZiBNSURJIG11c2ljYWwgaW5zdHJ1bWVudCAjMTUgKGluIHRoZSBDaHJvbWF0aWMgUGVyY3Vzc2lvbiBncm91cCkuCisjOiBQcm9ncmFtcy9taWRpLmM6MTIzCittc2dpZCAiVHVidWxhciBCZWxscyIKK21zZ3N0ciAi566h5LitIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6MTA2MgorbXNnaWQgIlR1bmUgRGV2aWNlIgorbXNnc3RyICLogbLpn7PoqK3lgpkiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzo5NDUKK21zZ2lkICJUeXBpbmcgTW9kZSIKK21zZ3N0ciAi6Ly45YWl5qih5byPIgorCisjOiBQcm9ncmFtcy9sb2cuYzoxMzYKK21zZ2lkICJVU0IgSS9PIgorbXNnc3RyICJVU0Ig6Ly45YWlL+i8uOWHuiIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjY2NAorbXNnaWQgIlVuZGVybGluZSIKK21zZ3N0ciAi5bqV57eaIgorCisjOiBQcm9ncmFtcy9hbGVydC5jOjEwMgorbXNnaWQgIlVuZnJvemVuIgorbXNnc3RyICLop6Plh40iCisKKyM6IFByb2dyYW1zL2NvbmZpZy5jOjI5MTQgUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjE0NTQKK21zZ2lkICJVcGRhdGFibGUgRGlyZWN0b3J5IgorbXNnc3RyICLlj6/mm7TmlrDnmoTnm67pjIQiCisKKyM6IFByb2dyYW1zL2xvZy5jOjEwNgorbXNnaWQgIlVwZGF0ZSBFdmVudHMiCittc2dzdHIgIuabtOaWsOS6i+S7tiIKKworIzogUHJvZ3JhbXMvb3B0aW9ucy5jOjE1MQorbXNnaWQgIlVzYWdlIgorbXNnc3RyICLnlKjms5UiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzo3MjEKK21zZ2lkICJVc2UgQ2FwaXRhbCBTaWduIgorbXNnc3RyICLkvb/nlKjlpKflr6voqJjomZ8iCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBuYW1lIG9mIE1JREkgbXVzaWNhbCBpbnN0cnVtZW50ICMxMiAoaW4gdGhlIENocm9tYXRpYyBQZXJjdXNzaW9uIGdyb3VwKS4KKyM6IFByb2dyYW1zL21pZGkuYzoxMTQKK21zZ2lkICJWaWJyYXBob25lIgorbXNnc3RyICLpoavpn7MiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBuYW1lIG9mIE1JREkgbXVzaWNhbCBpbnN0cnVtZW50ICM0MiAoaW4gdGhlIFN0cmluZ3MgZ3JvdXApLgorIzogUHJvZ3JhbXMvbWlkaS5jOjIwOAorbXNnaWQgIlZpb2xhIgorbXNnc3RyICLkuK3mj5DnkLQiCisKKyMuIFN0cmluZ3MKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBuYW1lIG9mIE1JREkgbXVzaWNhbCBpbnN0cnVtZW50ICM0MSAoaW4gdGhlIFN0cmluZ3MgZ3JvdXApLgorIzogUHJvZ3JhbXMvbWlkaS5jOjIwNQorbXNnaWQgIlZpb2xpbiIKK21zZ3N0ciAi5bCP5o+Q55C0IgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgbmFtZSBvZiBNSURJIG11c2ljYWwgaW5zdHJ1bWVudCAjNTQgKGluIHRoZSBFbnNlbWJsZSBncm91cCkuCisjOiBQcm9ncmFtcy9taWRpLmM6MjQ1Cittc2dpZCAiVm9pY2UgT29ocyIKK21zZ3N0ciAi5Lq66IGy5ZaUIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6MTQ5MAorbXNnaWQgIldhcm5pbmciCittc2dzdHIgIuitpuWRiiIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjE0MzQKK21zZ2lkICJXZWIgU2l0ZSIKK21zZ3N0ciAi57ay56uZIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgbmFtZSBvZiBNSURJIG11c2ljYWwgaW5zdHJ1bWVudCAjNzkgKGluIHRoZSBQaXBlIGdyb3VwKS4KKyM6IFByb2dyYW1zL21pZGkuYzozMjMKK21zZ2lkICJXaGlzdGxlIgorbXNnc3RyICLlj6Plk6giCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzo1NDMKK21zZ2lkICJXaW5kb3cgQ29sdW1uIgorbXNnc3RyICLoppbnqpfmrITkvY0iCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzo1NDIgUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjU1OAorbXNnaWQgIldpbmRvdyBDb29yZGluYXRlcyIKK21zZ3N0ciAi6KaW56qX5bqn5qiZIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6NTQ0Cittc2dpZCAiV2luZG93IFJvdyIKK21zZ3N0ciAi6KaW56qX6KGMIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgbmFtZSBvZiBNSURJIG11c2ljYWwgaW5zdHJ1bWVudCAjMTE2IChpbiB0aGUgUGVyY3Vzc2l2ZSBncm91cCkuCisjOiBQcm9ncmFtcy9taWRpLmM6NDQwCittc2dpZCAiV29vZGJsb2NrIgorbXNnc3RyICLmnKjprZoiCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzo4NDgKK21zZ2lkICJXb3JkIFdyYXAiCittc2dzdHIgIuauteWtlyIKKworIzogUHJvZ3JhbXMvY29uZmlnLmM6Mjg4OAorbXNnaWQgIldvcmtpbmcgRGlyZWN0b3J5IgorbXNnc3RyICLlt6XkvZznm67pjIQiCisKKyM6IFByb2dyYW1zL2NvbmZpZy5jOjI5MTUgUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjE0NjQKK21zZ2lkICJXcml0YWJsZSBEaXJlY3RvcnkiCittc2dzdHIgIuWPr+Wvq+WFpeeahOebrumMhCIKKworIzogUHJvZ3JhbXMveGJybGFwaS5jOjExOAorbXNnaWQgIldyaXRlIGRlYnVnZ2luZyBvdXRwdXQgdG8gc3Rkb3V0IgorbXNnc3RyICLmiorpmaTpjK/oqIrmga/poa/npLrliLDmqJnmupbovLjlh7oiCisKKyM6IFByb2dyYW1zL2NvbmZpZy5jOjY4MAorbXNnaWQgIldyaXRlIHRoZSBzdGFydC11cCBsb2dzLCBhbmQgdGhlbiBleGl0LiIKK21zZ3N0ciAi5a+r5aW95ZWf5YuV6KiY6YyE54S25b6M6YCA5Ye6IgorCisjOiBQcm9ncmFtcy94YnJsYXBpLmM6MTAwCittc2dpZCAiWCBkaXNwbGF5IHRvIGNvbm5lY3QgdG8iCittc2dzdHIgIlgg6aGv56S66YCj5o6l5YiwIgorCisjOiBQcm9ncmFtcy9wZ21wcml2c19saW51eC5jOjE5NTEKK21zZ2lkICJYREcgcnVudGltZSBkaXJlY3RvcnkgYWNjZXNzIHByb2JsZW0iCittc2dzdHIgIlhERyDln7fooYzmmYLmnJ/nm67pjITomZXnkIbllY/poYwiCisKKyM6IFByb2dyYW1zL3BnbXByaXZzX2xpbnV4LmM6MTkzMworbXNnaWQgIlhERyBydW50aW1lIGRpcmVjdG9yeSBjcmVhdGVkIgorbXNnc3RyICJYREcg5Z+36KGM5pmC5pyf55uu6YyE5bu656uLIgorCisjOiBQcm9ncmFtcy9wZ21wcml2c19saW51eC5jOjE5MjgKK21zZ2lkICJYREcgcnVudGltZSBkaXJlY3RvcnkgZXhpc3RzIgorbXNnc3RyICJYREcg5Z+36KGM5pmC5pyf55uu6YyE5a2Y5ZyoIgorCisjOiBQcm9ncmFtcy94YnJsYXBpLmM6Nzg2Cittc2dpZCAiWEZyZWUod21fbmFtZSkgZm9yIGNoYW5nZSIKK21zZ3N0ciAiWEZyZWUod21fbmFtZSkg6K6K5pu0IgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIFBBU1NYVCBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6MTQ3OQorbXNnaWQgIlhUIChzZXQgMSkga2V5Ym9hcmQgc2NhbiBjb2RlIgorbXNnc3RyICJYVCAoc2V0IDEpIOmNteebpOaOg+aPj+eivCIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIG5hbWUgb2YgTUlESSBtdXNpY2FsIGluc3RydW1lbnQgIzE0IChpbiB0aGUgQ2hyb21hdGljIFBlcmN1c3Npb24gZ3JvdXApLgorIzogUHJvZ3JhbXMvbWlkaS5jOjEyMAorbXNnaWQgIlh5bG9waG9uZSIKK21zZ3N0ciAi5pyo55C0IgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6MTMwOAorbXNnaWQgIlllYXIgTW9udGggRGF5IgorbXNnc3RyICLlubQg5pyIIOaXpSIKKworIzogUHJvZ3JhbXMvbWVudS5jOjUyNAorbXNnaWQgIlllcyIKK21zZ3N0ciAi5pivIgorCisjOiBQcm9ncmFtcy94YnJsYXBpLmM6ODQKK21zZ2lkICJbaG9zdF1bOnBvcnRdIgorbXNnc3RyICJbSG9zdF1bOlBvcnRdIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6NjY1Cittc2dpZCAiYWxsIGRvdHMiCittc2dzdHIgIua7v+m7niIKKworIzogUHJvZ3JhbXMvY21kX21pc2NlbGxhbmVvdXMuYzoxMDQKK21zZ2lkICJhbmQiCittc2dzdHIgIuiIhyIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBDTElQX0FQUEVORCBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6MTM0NgorbXNnaWQgImFwcGVuZCBjaGFyYWN0ZXJzIHRvIGNsaXBib2FyZCIKK21zZ3N0ciAi6ZmE5Yqg5a2X5YWD5Yiw5Ymq6LK85LiNIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIENMSVBfQUREIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDoxMjIzCittc2dpZCAiYXBwZW5kIHRvIGNsaXBib2FyZCBmcm9tIGNoYXJhY3RlciIKK21zZ3N0ciAi5b6e5a2X5YWD6ZmE5Yqg5Yiw5Ymq6LK85LiNIgorCisjOiBQcm9ncmFtcy9jbWQuYzoyOTAKK21zZ2lkICJhdCBjdXJzb3IiCittc2dzdHIgIuWcqOa4uOaomSIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBLRVlfQkFDS1NQQUNFIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDoxNTI3Cittc2dpZCAiYmFja3NwYWNlIGtleSIKK21zZ3N0ciAi5YCS6Zmk6Y21IgorCisjOiBEcml2ZXJzL0JyYWlsbGUvQmF1bS9icmFpbGxlLmM6MTE0OSBEcml2ZXJzL0JyYWlsbGUvVFNJL2JyYWlsbGUuYzo4NjkKK21zZ2lkICJiYXR0ZXJ5IGxvdyIKK21zZ3N0ciAi6Zu76YeP5L2OIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIFNFTEVDVFZUIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDoxNDM3Cittc2dpZCAiYmluZCB0byBzcGVjaWZpYyB2aXJ0dWFsIHRlcm1pbmFsIgorbXNnc3RyICLmppzlrprliLDnibnlrprnmoTomZvmk6zntYLnq6/mqZ8iCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgU0VMRUNUVlRfTkVYVCBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6OTU3Cittc2dpZCAiYmluZCB0byB0aGUgbmV4dCB2aXJ0dWFsIHRlcm1pbmFsIgorbXNnc3RyICLmppzlrprliLDkuIvkuIDlgIvomZvmk6zntYLnq6/mqZ8iCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgU0VMRUNUVlRfUFJFViBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6OTUwCittc2dpZCAiYmluZCB0byB0aGUgcHJldmlvdXMgdmlydHVhbCB0ZXJtaW5hbCIKK21zZ3N0ciAi5qac5a6a5Yiw5YmN5LiA5YCL6Jmb5pOs57WC56uv5qmfIgorCisjLgorIzogUHJvZ3JhbXMvY21kX3V0aWxzLmM6MTQ0Cittc2dpZCAiYmxhY2siCittc2dzdHIgIum7kSIKKworIzogUHJvZ3JhbXMvY29yZS5jOjExMjUKK21zZ2lkICJibGFuayBsaW5lIgorbXNnc3RyICLnqbrnmb3ooYwiCisKKyM6IFByb2dyYW1zL2NtZF91dGlscy5jOjE3MworbXNnaWQgImJsaW5raW5nIgorbXNnc3RyICLot7Pli5UiCisKKyMuIEIKKyM6IFByb2dyYW1zL2NtZF91dGlscy5jOjE0NQorbXNnaWQgImJsdWUiCittc2dzdHIgIuiXjSIKKworIzogUHJvZ3JhbXMvY29uZmlnLmM6MjkzMworIywgYy1mb3JtYXQKK21zZ2lkICJicmFpbGxlIGRldmljZSBub3Qgc3BlY2lmaWVkIgorbXNnc3RyICLpu57lrZfoqK3lgpnmnKrmjIflrpoiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgT0ZGTElORSBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6NjIxCittc2dpZCAiYnJhaWxsZSBkaXNwbGF5IHRlbXBvcmFyaWx5IHVuYXZhaWxhYmxlIgorbXNnc3RyICLpu57lrZfoqK3lgpnmmqvmmYLnhKHkvZznlKgiCisKKyM6IFByb2dyYW1zL2NvbmZpZy5jOjE2NzcKK21zZ2lkICJicmFpbGxlIGRyaXZlciBpbml0aWFsaXphdGlvbiBmYWlsZWQiCittc2dzdHIgIum7nuWtl+mpheWLleWHuuS9v+WMluWkseaVlyIKKworIzogUHJvZ3JhbXMvY29uZmlnLmM6MTc1NgorbXNnaWQgImJyYWlsbGUgZHJpdmVyIG5vdCBsb2FkYWJsZSIKK21zZ3N0ciAi6bue5a2X6amF5YuV54Sh5rOV6LyJ5YWlIgorCisjOiBQcm9ncmFtcy9jb25maWcuYzoyMDE3Cittc2dpZCAiYnJhaWxsZSBkcml2ZXIgcmVzdGFydGluZyIKK21zZ3N0ciAi6bue5a2X6amF5YuV5q2j5Zyo5ZWf5YuVIgorCisjOiBQcm9ncmFtcy9jbWRfbWlzY2VsbGFuZW91cy5jOjE2MworbXNnaWQgImJyYWlsbGUgZHJpdmVyIHN0b3BwZWQiCittc2dzdHIgIum7nuWtl+WBnOatoiIKKworIzogRHJpdmVycy9TY3JlZW4vQW5kcm9pZC9zY3JlZW4uYzoxODkKK21zZ2lkICJicmFpbGxlIHJlbGVhc2VkIgorbXNnc3RyICLpu57lrZflgZzmraIiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgUk9VVEUgY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjEyMDcKK21zZ2lkICJicmluZyBzY3JlZW4gY3Vyc29yIHRvIGNoYXJhY3RlciIKK21zZ3N0ciAi5bi25YuV6J6i5bmV5ri45qiZ5Yiw5a2X5YWDIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIENTUkpNUF9WRVJUIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDo1OTMKK21zZ2lkICJicmluZyBzY3JlZW4gY3Vyc29yIHRvIGN1cnJlbnQgbGluZSIKK21zZ3N0ciAi5bi25YuV6J6i5bmV5ri45qiZ5Yiw55uu5YmN6KGMIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIFJPVVRFX0xJTkUgY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjE0MDQKK21zZ2lkICJicmluZyBzY3JlZW4gY3Vyc29yIHRvIGxpbmUiCittc2dzdHIgIuW4tuWLleieouW5lea4uOaomeWIsOihjCIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBST1VURV9DVVJSX0xPQ04gY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjgzNQorbXNnaWQgImJyaW5nIHNjcmVlbiBjdXJzb3IgdG8gc3BlZWNoIGN1cnNvciIKK21zZ3N0ciAi5bi25YuV6J6i5bmV5ri45qiZ5Yiw6Kqe6Z+z5ri45qiZIgorCisjLiBSRworIzogUHJvZ3JhbXMvY21kX3V0aWxzLmM6MTUwCittc2dpZCAiYnJvd24iCittc2dzdHIgIuajlSIKKworIzogRHJpdmVycy9TY3JlZW4vTGludXgvc2NyZWVuLmM6MTQzMgorbXNnaWQgImNhbid0IGdldCBjb25zb2xlIHN0YXRlIgorbXNnc3RyICLnhKHms5Xlj5blvpfkuLvmjqflj7Dni4DmhYsiCisKKyM6IERyaXZlcnMvU2NyZWVuL0xpbnV4L3NjcmVlbi5jOjE1MTAKK21zZ2lkICJjYW4ndCBvcGVuIGNvbnNvbGUiCittc2dzdHIgIueEoeazleaJk+mWi+S4u+aOp+WPsCIKKworIzogRHJpdmVycy9TY3JlZW4vTGludXgvc2NyZWVuLmM6MTU1NgorbXNnaWQgImNhbid0IHJlYWQgc2NyZWVuIGNvbnRlbnQiCittc2dzdHIgIueEoeazleiugOWPluieouW5leWFp+WuuSIKKworIzogRHJpdmVycy9TY3JlZW4vTGludXgvc2NyZWVuLmM6MTYwMQorbXNnaWQgImNhbid0IHJlYWQgc2NyZWVuIGhlYWRlciIKK21zZ3N0ciAi54Sh5rOV6K6A5Y+W55Wr6Z2i6KGo6aCtIgorCisjOiBQcm9ncmFtcy9jdGJfdHJhbnNsYXRlLmM6MzkzCittc2dpZCAiY2Fubm90IGFjY2VzcyBpbnRlcm5hbCBjb250cmFjdGlvbiB0YWJsZSIKK21zZ3N0ciAi54Sh5rOV5a2Y5Y+W5YWn6YOo57iu5a+r6KGoIgorCisjOiBQcm9ncmFtcy9hdGJfdHJhbnNsYXRlLmM6NzAKK21zZ2lkICJjYW5ub3QgY29tcGlsZSBhdHRyaWJ1dGVzIHRhYmxlIgorbXNnc3RyICLnhKHms5Xnt6jora/lsazmgKfooagiCisKKyM6IFByb2dyYW1zL2N0Yl90cmFuc2xhdGUuYzozODcKK21zZ2lkICJjYW5ub3QgY29tcGlsZSBjb250cmFjdGlvbiB0YWJsZSIKK21zZ3N0ciAi54Sh5rOV57eo6K2v57iu5a+r6KGoIgorCisjOiBQcm9ncmFtcy9jb25maWcuYzoxNjYwCittc2dpZCAiY2Fubm90IGNvbXBpbGUga2V5IHRhYmxlIgorbXNnc3RyICLnhKHms5Xnt6jora/mjInpjbXooagiCisKKyM6IFByb2dyYW1zL2NvbmZpZy5jOjEyMjQKK21zZ2lkICJjYW5ub3QgY29tcGlsZSBrZXlib2FyZCB0YWJsZSIKK21zZ3N0ciAi54Sh5rOV57eo6K2v6Y2155uk6KGoIgorCisjOiBQcm9ncmFtcy90dGJfdHJhbnNsYXRlLmM6Mjc1Cittc2dpZCAiY2Fubm90IGNvbXBpbGUgdGV4dCB0YWJsZSIKK21zZ3N0ciAi54Sh5rOV57eo6K2v5paH5a2X6KGoIgorCisjLiBUaGlzIGlzIHRoZSBmaXJzdCBhdHRlbXB0IHRvIGNvbm5lY3QgdG8gQlJMVFRZLCBhbmQgaXQgZmFpbGVkLgorIy4gKiBSZXR1cm4gdGhlIGVycm9yIGltbWVkaWF0ZWx5IHRvIHRoZSB1c2VyLCB0byBwcm92aWRlIGZlZWRiYWNrIHRvIHVzZXJzCisjLiAqIHJ1bm5pbmcgeGJybGFwaSBieSBoYW5kLCBidXQgbm90IGZpbGwgbG9ncywgZWF0IGJhdHRlcnksIHNwYW0KKyMuICogMTI3LjAuMC4xIHdpdGggcmVjb25uZWN0aW9uIGF0dGVtcHRzLgorIy4KKyM6IFByb2dyYW1zL3hicmxhcGkuYzoyMDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGNvbm5lY3QgdG8gYnJhaWxsZSBkZXZpY2VzIGRhZW1vbiBicmx0dHkgYXQgJXNcbiIKK21zZ3N0ciAi54Sh5rOV6YCj5o6l6bue5a2X6Kit5YKZ5pyN5YuZ56iL5bqPIGJybHR0eSDmlrwgJXNcbiIKKworIzogUHJvZ3JhbXMveGJybGFwaS5jOjY1NAorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgY29ubmVjdCB0byBkaXNwbGF5ICVzXG4iCittc2dzdHIgIueEoeazlemAo+aOpem7numhr+WZqCAlc1xuIgorCisjOiBQcm9ncmFtcy9maWxlLmM6MzgxCittc2dpZCAiY2Fubm90IGNyZWF0ZSBkaXJlY3RvcnkiCittc2dzdHIgIueEoeazleW7uueri+ebrumMhCIKKworIzogUHJvZ3JhbXMvcHJvZ3JhbS5jOjE1MAorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgZGV0ZXJtaW5lIHByb2dyYW0gZGlyZWN0b3J5IgorbXNnc3RyICLnhKHms5XlrprnvqnnqIvlvI/nm67pjIQiCisKKyM6IFByb2dyYW1zL2NvbmZpZy5jOjI4OTEgUHJvZ3JhbXMvbWVudS5jOjYxOAorbXNnaWQgImNhbm5vdCBkZXRlcm1pbmUgd29ya2luZyBkaXJlY3RvcnkiCittc2dzdHIgIueEoeazleWumue+qeW3peS9nOebrumMhCIKKworIzogUHJvZ3JhbXMvc3lzdGVtX3dpbmRvd3MuYzo2MQorbXNnaWQgImNhbm5vdCBmaW5kIHByb2NlZHVyZSIKK21zZ3N0ciAi54Sh5rOV5om+5Yiw56iL5bqPIgorCisjOiBQcm9ncmFtcy9wcm9ncmFtLmM6MTU4Cittc2dpZCAiY2Fubm90IGZpeCBpbnN0YWxsIHBhdGgiCittc2dzdHIgIueEoeazleS/ruW+qeWuieijnei3r+W+kSIKKworIzogUHJvZ3JhbXMveGJybGFwaS5jOjI1OQorbXNnaWQgImNhbm5vdCBnZXQgdHR5XG4iCittc2dzdHIgIueEoeazleWPluW+lyB0dHlcbiIKKworIzogUHJvZ3JhbXMveGJybGFwaS5jOjI2NQorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgZ2V0IHR0eSAlZFxuIgorbXNnc3RyICLnhKHms5Xlj5blvpcgdHR5ICVkXG4iCisKKyM6IFByb2dyYW1zL2ZpbGUuYzo1MTgKK21zZ2lkICJjYW5ub3QgZ2V0IHdvcmtpbmcgZGlyZWN0b3J5IgorbXNnc3RyICLnhKHms5Xlj5blvpflt6XkvZznm67pjIQiCisKKyM6IFByb2dyYW1zL3hicmxhcGkuYzo3MDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGdyYWIgd2luZG93cyBvbiBzY3JlZW4gJWRcbiIKK21zZ3N0ciAi54Sh5rOV5pO35Y+W6KaW56qX5Zyo6J6i5bmVICVkXG4iCisKKyM6IFByb2dyYW1zL3hicmxhcGkuYzoyNzIKK21zZ2lkICJjYW5ub3QgaWdub3JlIGtleXNcbiIKK21zZ3N0ciAi54Sh5rOV5b+955Wl5oyJ6Y21XG4iCisKKyM6IFByb2dyYW1zL2F0Yl90cmFuc2xhdGUuYzo5MAorbXNnaWQgImNhbm5vdCBsb2FkIGF0dHJpYnV0ZXMgdGFibGUiCittc2dzdHIgIueEoeazlei8ieWFpeWxrOaAp+ihqCIKKworIzogUHJvZ3JhbXMvY3RiX3RyYW5zbGF0ZS5jOjQwNworbXNnaWQgImNhbm5vdCBsb2FkIGNvbnRyYWN0aW9uIHRhYmxlIgorbXNnc3RyICLnhKHms5XovInlhaXnuK7lr6vooagiCisKKyM6IFByb2dyYW1zL3N5c3RlbV93aW5kb3dzLmM6NTQKK21zZ2lkICJjYW5ub3QgbG9hZCBsaWJyYXJ5IgorbXNnc3RyICLnhKHms5XovInlhaXlkKvlvI/luqsiCisKKyM6IFByb2dyYW1zL3R0Yl90cmFuc2xhdGUuYzoyOTUKK21zZ2lkICJjYW5ub3QgbG9hZCB0ZXh0IHRhYmxlIgorbXNnc3RyICLnhKHms5XovInlhaXmloflrZfooagiCisKKyM6IFByb2dyYW1zL2ZpbGUuYzozNzAKK21zZ2lkICJjYW5ub3QgbWFrZSB3b3JsZCB3cml0YWJsZSIKK21zZ3N0ciAi54Sh5rOV6K6T55Kw5aKD5Y+v5a+r5YWlIgorCisjOiBQcm9ncmFtcy9jb25maWcuYzoxMTc5Cittc2dpZCAiY2Fubm90IG9wZW4ga2V5IGhlbHAiCittc2dzdHIgIueEoeazlemWi+WVn+aMiemNteiqquaYjiIKKworIzogUHJvZ3JhbXMvcHJvZ3JhbS5jOjI2MgorbXNnaWQgImNhbm5vdCBvcGVuIHByb2Nlc3MgaWRlbnRpZmllciBmaWxlIgorbXNnc3RyICLnhKHms5XplovllZ/nqIvluo/nt6jomZ/mqpQiCisKKyM6IFByb2dyYW1zL21lbnUuYzo2MTYKK21zZ2lkICJjYW5ub3Qgb3BlbiB3b3JraW5nIGRpcmVjdG9yeSIKK21zZ3N0ciAi54Sh5rOV6ZaL5ZWf5bel5L2c55uu6YyEIgorCisjOiBQcm9ncmFtcy9wcmVmcy5jOjM2MworbXNnaWQgImNhbm5vdCByZWFkIHByZWZlcmVuY2VzIGZpbGUiCittc2dzdHIgIueEoeazleiugOWPluWBj+WlveioreWumuaqlCIKKworIzogUHJvZ3JhbXMveGJybGFwaS5jOjMzNworIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3Qgc2V0IGZvY3VzIHRvICUjMDEweFxuIgorbXNnc3RyICLnhKHms5XoqK3lrprnhKbpu57liLAgJSMwMTB4XG4iCisKKyM6IFByb2dyYW1zL2ZpbGUuYzo1MzIgUHJvZ3JhbXMvbWVudS5jOjYwNQorbXNnaWQgImNhbm5vdCBzZXQgd29ya2luZyBkaXJlY3RvcnkiCittc2dzdHIgIueEoeazleioreWumuW3peS9nOebrumMhCIKKworIzogUHJvZ3JhbXMvcHJlZnMuYzo1NzYKK21zZ2lkICJjYW5ub3Qgd3JpdGUgdG8gcHJlZmVyZW5jZXMgZmlsZSIKK21zZ3N0ciAi54Sh5rOV5a+r5YWl5YGP5aW96Kit5a6a5qqUIgorCisjLiAiY2FwIiBoZXJlLCB1c2VkIGR1cmluZyBzcGVlY2ggb3V0cHV0LCBpcyBzaG9ydCBmb3IgImNhcGl0YWwiLgorIy4gSXQgaXMgc3Bva2VuIGp1c3QgYmVmb3JlIGFuIHVwcGVyY2FzZSBsZXR0ZXIsIGUuZy4gImNhcCBBIi4KKyM6IFByb2dyYW1zL2NvcmUuYzoxMDcwCittc2dpZCAiY2FwIgorbXNnc3RyICLlpKflr6siCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzo4ODYgUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjEzNDkKK21zZ2lkICJjZWxscyIKK21zZ3N0ciAi6bue5a2X5pa5IgorCisjOiBQcm9ncmFtcy9jbWRfcHJlZmVyZW5jZXMuYzo4NworbXNnaWQgImNoYW5nZXMgZGlzY2FyZGVkIgorbXNnc3RyICLmlL7mo4Torormm7QiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgVU5TVElDSyBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6ODg3Cittc2dpZCAiY2xlYXIgYWxsIHN0aWNreSBpbnB1dCBtb2RpZmllcnMiCittc2dzdHIgIua4hemZpOaJgOacieebuOm7j+eahOi8uOWFpeioreWumiIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBUWFRTRUxfQ0xFQVIgY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjEwMTkKK21zZ2lkICJjbGVhciB0aGUgdGV4dCBzZWxlY3Rpb24iCittc2dzdHIgIua4hemZpOaWh+Wtl+mBuOWPliIKKworIzogUHJvZ3JhbXMvY21kX3NwZWVjaC5jOjUwMQorbXNnaWQgImNvbHVtbiIKK21zZ3N0ciAi5qyEIgorCisjLiBjb25maWd1cmF0aW9uIG1lbnUKKyM6IERyaXZlcnMvQnJhaWxsZS9CcmFpbGxlTGl0ZS9icmFpbGxlLmM6NjA3Cittc2dpZCAiY29uZmlnIgorbXNnc3RyICLoqK3lrpoiCisKKyM6IFByb2dyYW1zL29wdGlvbnMuYzo4MDcKK21zZ2lkICJjb25maWd1cmF0aW9uIGRpcmVjdGl2ZSBzcGVjaWZpZWQgbW9yZSB0aGFuIG9uY2UiCittc2dzdHIgIuioreWumuaVmOi/sOaMh+Wumui2hemBjuS4gOasoSIKKworIzogRHJpdmVycy9TY3JlZW4vTGludXgvc2NyZWVuLmM6MTUwOAorbXNnaWQgImNvbnNvbGUgbm90IGluIHVzZSIKK21zZ3N0ciAi5Li75o6n5Y+w5pyq5L2/55SoIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6MTA1NgorbXNnaWQgImNvbnNvbGUgdG9uZSBnZW5lcmF0b3IiCittc2dzdHIgIuS4u+aOp+WPsOmfs+mfv+eUoueUn+WZqCIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBDTElQX0NPUFkgY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjEzMzgKK21zZ2lkICJjb3B5IGNoYXJhY3RlcnMgdG8gY2xpcGJvYXJkIgorbXNnc3RyICLopIfoo73lrZflhYPliLDliarosrzkuI0iCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgSE9TVF9DT1BZIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDoxMDMzCittc2dpZCAiY29weSBzZWxlY3RlZCB0ZXh0IHRvIGhvc3QgY2xpcGJvYXJkIgorbXNnc3RyICLopIfoo73pgbjlj5bnmoTmloflrZfliLDkuLvmqZ/liarosrzkuI0iCisKKyM6IFByb2dyYW1zL2NvbmZpZy5jOjY0MgorbXNnaWQgImNzZWNzIgorbXNnc3RyICJjc2VjcyIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBUT1VDSF9BVCBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6MTUwMworbXNnaWQgImN1cnJlbnQgcmVhZGluZyBsb2NhdGlvbiIKK21zZ3N0ciAi55uu5YmN55qE6Zax6K6A5L2N572uIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIEtFWV9DVVJTT1JfRE9XTiBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6MTU2NworbXNnaWQgImN1cnNvci1kb3duIGtleSIKK21zZ3N0ciAi5ri45qiZ5b6A5LiL6Y21IgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIEtFWV9DVVJTT1JfTEVGVCBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6MTU0MworbXNnaWQgImN1cnNvci1sZWZ0IGtleSIKK21zZ3N0ciAi5ri45qiZ5b6A5bem6Y21IgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIEtFWV9DVVJTT1JfUklHSFQgY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjE1NTEKK21zZ2lkICJjdXJzb3ItcmlnaHQga2V5IgorbXNnc3RyICLmuLjmqJnlvoDlj7PpjbUiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgS0VZX0NVUlNPUl9VUCBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6MTU1OQorbXNnaWQgImN1cnNvci11cCBrZXkiCittc2dzdHIgIua4uOaomeW+gOS4iumNtSIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBIT1NUX0NVVCBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6MTA0MAorbXNnaWQgImN1dCBzZWxlY3RlZCB0ZXh0IHRvIGhvc3QgY2xpcGJvYXJkIgorbXNnc3RyICLliarkuIvpgbjlj5bnmoTmloflrZfliLDkuLvmqZ/liarosrznsL8iCisKKyMuIEdCCisjOiBQcm9ncmFtcy9jbWRfdXRpbHMuYzoxNDcKK21zZ2lkICJjeWFuIgorbXNnc3RyICLpnZIiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgQUxUR1IgY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjg5NAorbXNnaWQgImN5Y2xlIHRoZSBBbHRHciAoUmlnaHQgQWx0KSBzdGlja3kgaW5wdXQgbW9kaWZpZXIgKG5leHQsIG9uLCBvZmYpIgorbXNnc3RyICLlvqrnkrAgQWx0R3IgKOWPsyBBbHQpIOebuOm7j+i8uOWFpeioreWumiAo5LiL5LiA5YCLLCDplossIOmXnCkiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgQ09OVFJPTCBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6NjQyCittc2dpZCAiY3ljbGUgdGhlIENvbnRyb2wgc3RpY2t5IGlucHV0IG1vZGlmaWVyIChuZXh0LCBvbiwgb2ZmKSIKK21zZ3N0ciAi5b6q55KwIENvbnRyb2wg55u46buP6Ly45YWl6Kit5a6aICjkuIvkuIDlgIssIOmWiywg6ZecKSIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBHVUkgY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjkwMQorbXNnaWQgImN5Y2xlIHRoZSBHVUkgKFdpbmRvd3MpIHN0aWNreSBpbnB1dCBtb2RpZmllciAobmV4dCwgb24sIG9mZikiCittc2dzdHIgIuW+queSsCBHVUkgKFdpbmRvd3MpIOebuOm7j+i8uOWFpeioreWumiAo5LiL5LiA5YCLLCDplossIOmXnCkiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgTUVUQSBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6NjQ5Cittc2dpZCAiY3ljbGUgdGhlIE1ldGEgKExlZnQgQWx0KSBzdGlja3kgaW5wdXQgbW9kaWZpZXIgKG5leHQsIG9uLCBvZmYpIgorbXNnc3RyICLlvqrnkrAgTWV0YSAo5bemIEFsdCkg55u46buP6Ly45YWl6Kit5a6aICjkuIvkuIDlgIssIOmWiywg6ZecKSIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBTSElGVCBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6NjI4Cittc2dpZCAiY3ljbGUgdGhlIFNoaWZ0IHN0aWNreSBpbnB1dCBtb2RpZmllciAobmV4dCwgb24sIG9mZikiCittc2dzdHIgIuW+queSsCBTaGlmdCDnm7jpu4/ovLjlhaXoqK3lrpogKOS4i+S4gOWAiywg6ZaLLCDpl5wpIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIFVQUEVSIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDo2MzUKK21zZ2lkICJjeWNsZSB0aGUgVXBwZXIgc3RpY2t5IGlucHV0IG1vZGlmaWVyIChuZXh0LCBvbiwgb2ZmKSIKK21zZ3N0ciAi5b6q55KwIFVwcGVyIOebuOm7j+i8uOWFpeioreWumiAo5LiL5LiA5YCLLCDplossIOmXnCkiCisKKyMuIEwKKyM6IFByb2dyYW1zL2NtZF91dGlscy5jOjE1MgorbXNnaWQgImRhcmsgZ3JleSIKK21zZ3N0ciAi5pqX54GwIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIFNBWV9MT1dFUiBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6MTE2OAorbXNnaWQgImRlY3JlYXNlIHNwZWFraW5nIHBpdGNoIgorbXNnc3RyICLpmY3kvY7oqp7pn7Ppn7Poqr8iCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgU0FZX1NMT1dFUiBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6NTUwCittc2dpZCAiZGVjcmVhc2Ugc3BlYWtpbmcgcmF0ZSIKK21zZ3N0ciAi6ZmN5L2O6IiH5Zug57Sg546HIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIFNBWV9TT0ZURVIgY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjU2NAorbXNnaWQgImRlY3JlYXNlIHNwZWFraW5nIHZvbHVtZSIKK21zZ3N0ciAi6ZmN5L2O6Kqe6Z+z6Z+z6YePIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIEtFWV9ERUxFVEUgY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjE2MTUKK21zZ2lkICJkZWxldGUga2V5IgorbXNnc3RyICLliKrpmaTpjbUiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgREVTQ0NIQVIgY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjEyNzUKK21zZ2lkICJkZXNjcmliZSBjaGFyYWN0ZXIiCittc2dzdHIgIuaPj+i/sOWtl+WFgyIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBERVNDX0NVUlJfQ0hBUiBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6ODIwCittc2dpZCAiZGVzY3JpYmUgY3VycmVudCBjaGFyYWN0ZXIiCittc2dzdHIgIuaPj+i/sOebruWJjeWtl+WFgyIKKworIzogUHJvZ3JhbXMvY29uZmlnLmM6NjIzIFByb2dyYW1zL2NvbmZpZy5jOjYzMworbXNnaWQgImRldmljZSIKK21zZ3N0ciAi6Kit5YKZIgorCisjOiBQcm9ncmFtcy9icmx0ZXN0LmM6NjQgUHJvZ3JhbXMvYnJsdGVzdC5jOjc0IFByb2dyYW1zL2JybHR0eS1hdGIuYzozMgorIzogUHJvZ3JhbXMvYnJsdHR5LWN0Yi5jOjUwIFByb2dyYW1zL2JybHR0eS1rdGIuYzo2OSBQcm9ncmFtcy9icmx0dHkta3RiLmM6NzkKKyM6IFByb2dyYW1zL2JybHR0eS10cnR4dC5jOjQ3IFByb2dyYW1zL2NvbmZpZy5jOjMyMSBQcm9ncmFtcy9jb25maWcuYzo0MjEKKyM6IFByb2dyYW1zL2NvbmZpZy5jOjQzMSBQcm9ncmFtcy9jb25maWcuYzo0NDEgUHJvZ3JhbXMvY29uZmlnLmM6NTEyCittc2dpZCAiZGlyZWN0b3J5IgorbXNnc3RyICLnm67pjIQiCisKKyM6IFByb2dyYW1zL3hicmxhcGkuYzo5OAorbXNnaWQgImRpc3BsYXkiCittc2dzdHIgIumhr+ekuiIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBOT09QIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDo1Cittc2dpZCAiZG8gbm90aGluZyIKK21zZ3N0ciAi54Sh5L2c54K6IgorCisjOiBQcm9ncmFtcy9sZWFybi5jOjEwOAorbXNnaWQgImRvbmUiCittc2dzdHIgIuWujOaIkCIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjY2NgorbXNnaWQgImRvdCA3IgorbXNnc3RyICLnrKzkuIPpu54iCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzo2NjcKK21zZ2lkICJkb3QgOCIKK21zZ3N0ciAi5Zyw5YWr6bueIgorCisjOiBQcm9ncmFtcy9tZW51X3ByZWZzLmM6NjY0Cittc2dpZCAiZG90cyA3IGFuZCA4IgorbXNnc3RyICLkuIPlhavpu54iCisKKyM6IERyaXZlcnMvQnJhaWxsZS9CYXVtL2JyYWlsbGUuYzoxMTQ2Cittc2dpZCAiZHJpdmVyIHJlcXVlc3QiCittc2dzdHIgIumpheWLleimgeaxgiIKKworIzogUHJvZ3JhbXMvY29uZmlnLmM6NDcwIFByb2dyYW1zL2NvbmZpZy5jOjU2OCBQcm9ncmFtcy9jb25maWcuYzo2MDMKK21zZ2lkICJkcml2ZXIsLi4uIgorbXNnc3RyICLpqYXli5UsLi4uIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIEtFWV9FTkQgY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjE1OTkKK21zZ2lkICJlbmQga2V5IgorbXNnc3RyICJFbmQg6Y21IgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIEtFWV9FTlRFUiBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6MTUxMQorbXNnaWQgImVudGVyIGtleSIKK21zZ3N0ciAiRW50ZXIg6Y21IgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIExFQVJOIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDo0MzYKK21zZ2lkICJlbnRlci9sZWF2ZSBjb21tYW5kIGxlYXJuIG1vZGUiCittc2dzdHIgIumAsuWFpS/pm6LplovmjIfku6Tlrbjnv5LmqKHlvI8iCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgSEVMUCBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6NDIyCittc2dpZCAiZW50ZXIvbGVhdmUgaGVscCBkaXNwbGF5IgorbXNnc3RyICLpgLLlhaUv6Zui6ZaL6Kqq5piO55Wr6Z2iIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIFBSRUZNRU5VIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDo0NDMKK21zZ2lkICJlbnRlci9sZWF2ZSBwcmVmZXJlbmNlcyBtZW51IgorbXNnc3RyICLpgLLlhaUv6Zui6ZaL5YGP5aW96Kit5a6aIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIElORk8gY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjQyOQorbXNnaWQgImVudGVyL2xlYXZlIHN0YXR1cyBkaXNwbGF5IgorbXNnc3RyICLpgLLlhaUv6Zui6ZaL54uA5oWL55Wr6Z2iIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIEtFWV9FU0NBUEUgY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjE1MzUKK21zZ2lkICJlc2NhcGUga2V5IgorbXNnc3RyICJFc2NhcGUg6Y21IgorCisjOiBEcml2ZXJzL0JyYWlsbGUvSXJpcy9icmFpbGxlLmM6MTQ5NAorbXNnaWQgImV1cm9icmFpbGxlIgorbXNnc3RyICJFdXJvYnJhaWxsZSIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIHRlcm0gdXNlZCB3aGVuIHRoZSB0aW1lIGlzIGV4YWN0bHkgb24gKGkuZS4gemVybyBzZWNvbmRzIGFmdGVyKSBhIG1pbnV0ZS4KKyM6IFByb2dyYW1zL2NtZF9taXNjZWxsYW5lb3VzLmM6MTAyCittc2dpZCAiZXhhY3RseSIKK21zZ3N0ciAi57K+56K655qEIgorCisjOiBQcm9ncmFtcy9jb25maWcuYzo4MTcKK21zZ2lkICJleGNlc3MgYXJndW1lbnQiCittc2dzdHIgIumBjuWkmuW8lei/sCIKKworIy4gcGFyZW50CisjOiBQcm9ncmFtcy9icmx0dHkuYzoxNzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXhlY3V0aW5nIFwiJXNcIiAoZnJvbSBcIiVzXCIpXG4iCittc2dzdHIgIu+8iOW+niBcIiVzXCLvvInln7fooYwgXCIlc1wiXG4iCisKKyM6IFByb2dyYW1zL3BnbXByaXZzX2xpbnV4LmM6MjA0NQorbXNnaWQgImV4ZWN1dGluZyBhcyB0aGUgaW52b2tpbmcgdXNlciIKK21zZ3N0ciAi5Lul6Kq/55So55qE5L2/55So6ICF6Lqr5Lu95Z+36KGMIgorCisjLiBleGVjdigpIHNob3VsZG4ndCByZXR1cm4KKyM6IFByb2dyYW1zL2JybHR0eS5jOjE4NAorIywgYy1mb3JtYXQKK21zZ2lkICJleGVjdXRpb24gb2YgXCIlc1wiIGZhaWxlZDogJXNcbiIKK21zZ3N0ciAiXCIlc1wiIOWft+ihjOWkseaVlzogJXNcbiIKKworIzogUHJvZ3JhbXMveGJybGFwaS5jOjcwOQorbXNnaWQgImZhaWxlZCB0byBnZXQgZmlyc3QgZm9jdXNcbiIKK21zZ3N0ciAi5oiW5Y+W57eg5LiA5YCL54Sm6bue5aSx5pWXXG4iCisKKyM6IFByb2dyYW1zL2JybHR0eS10cnR4dC5jOjU2IFByb2dyYW1zL2JybHR0eS10cnR4dC5jOjY0IFByb2dyYW1zL2NvbmZpZy5jOjM3OAorIzogUHJvZ3JhbXMvY29uZmlnLmM6Mzg3IFByb2dyYW1zL2NvbmZpZy5jOjM5NyBQcm9ncmFtcy9jb25maWcuYzo1MjMKKyM6IFByb2dyYW1zL2NvbmZpZy5jOjUzMyBQcm9ncmFtcy9jb25maWcuYzo1NDIgUHJvZ3JhbXMvY29uZmlnLmM6NTUwCisjOiBQcm9ncmFtcy9jb25maWcuYzo1ODcgUHJvZ3JhbXMvY29uZmlnLmM6NjcyCittc2dpZCAiZmlsZSIKK21zZ3N0ciAi5qqU5qGIIgorCisjOiBQcm9ncmFtcy9vcHRpb25zLmM6OTkzCisjLCBjLWZvcm1hdAorbXNnaWQgImZpbGUgJyVzJyBwcm9jZXNzaW5nIGVycm9yLiIKK21zZ3N0ciAi5qqU5qGIICclcycg6JmV55CG6Yyv6KqkIgorCisjLiBmYWlsZWQKKyM6IFByb2dyYW1zL2JybHR0eS5jOjE3MgorIywgYy1mb3JtYXQKK21zZ2lkICJmb3JrIG9mIFwiJXNcIiBmYWlsZWQ6ICVzXG4iCittc2dzdHIgIlwiJXNcIiDliIblj4nlpLHmlZc6ICVzXG4iCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgS0VZX0ZVTkNUSU9OIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDoxNjI0Cittc2dpZCAiZnVuY3Rpb24ga2V5IgorbXNnc3RyICLlip/og73pjbUiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgQkFDSyBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6MjcxCittc2dpZCAiZ28gYmFjayBhZnRlciBjdXJzb3IgdHJhY2tpbmciCittc2dzdHIgIua4uOaomei/vei5pOW+jOi/lOWbniIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBHVUlfQkFDSyBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6MTA3NworbXNnaWQgImdvIGJhY2sgdG8gdGhlIHByZXZpb3VzIHNjcmVlbiIKK21zZ3N0ciAi6Lez5Zue5LiK5LiA5YCL55Wr6Z2iIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIEZXSU5MVCBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6MjEwCittc2dpZCAiZ28gYmFja3dhcmQgb25lIGJyYWlsbGUgd2luZG93IgorbXNnc3RyICLlgJLpgIDkuIDlgIvpu57lrZfoppbnqpciCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgRldJTkxUU0tJUCBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6MjI4Cittc2dpZCAiZ28gYmFja3dhcmQgc2tpcHBpbmcgYmxhbmsgYnJhaWxsZSB3aW5kb3dzIgorbXNnc3RyICLlgJLpgIDot7PpgY7nqbrnmb3pu57lrZfoppbnqpciCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgUFJOQldJTiBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6OTY2Cittc2dpZCAiZ28gYmFja3dhcmQgdG8gbmVhcmVzdCBub24tYmxhbmsgYnJhaWxsZSB3aW5kb3ciCittc2dzdHIgIuWAkumAgOmBk+acgOi/keeahOmdnuepuueZvem7nuWtl+imlueqlyIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBMTkROIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDoyMworbXNnaWQgImdvIGRvd24gb25lIGxpbmUiCittc2dzdHIgIuS4i+WunOS4gOihjCIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBXSU5ETiBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6NDEKK21zZ2lkICJnbyBkb3duIHNldmVyYWwgbGluZXMiCittc2dzdHIgIuS4i+WunOiLpeW5suihjCIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBOWFBHUlBIIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDoxMzMKK21zZ2lkICJnbyBkb3duIHRvIGZpcnN0IGxpbmUgb2YgbmV4dCBwYXJhZ3JhcGgiCittc2dzdHIgIuenu+WIsOS4i+S4gOauteesrOS4gOihjCIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBNRU5VX0xBU1RfSVRFTSBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6NDc1Cittc2dpZCAiZ28gZG93biB0byBsYXN0IGl0ZW0iCittc2dzdHIgIui3s+WIsOacgOW+jOS4gOmghSIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBOWERJRkNIQVIgY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjEzMzAKK21zZ2lkICJnbyBkb3duIHRvIG5lYXJlc3QgbGluZSB3aXRoIGRpZmZlcmVudCBjaGFyYWN0ZXIiCittc2dzdHIgIuS4i+enu+WIsOacgOi/keeahOS4jeWQjOWtl+WFg+ihjCIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBOWERJRkxOIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDo1OQorbXNnaWQgImdvIGRvd24gdG8gbmVhcmVzdCBsaW5lIHdpdGggZGlmZmVyZW50IGNvbnRlbnQiCittc2dzdHIgIuS4i+enu+WIsOacgOi/keeahOS4jeWQjOWFp+WuueihjCIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBBVFRSRE4gY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjc3Cittc2dpZCAiZ28gZG93biB0byBuZWFyZXN0IGxpbmUgd2l0aCBkaWZmZXJlbnQgaGlnaGxpZ2h0aW5nIgorbXNnc3RyICLkuIvnp7vliLDmnIDov5HnmoTkuI3lkIzlj43nmb3ooYwiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgTlhJTkRFTlQgY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjEyNjcKK21zZ2lkICJnbyBkb3duIHRvIG5lYXJlc3QgbGluZSB3aXRoIGxlc3MgaW5kZW50IHRoYW4gY2hhcmFjdGVyIgorbXNnc3RyICLkuIvnp7vliLDmnIDov5HnmoTlhafnuK7lsJHmlrzlrZflhYPnmoTooYwiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgTlhQUk9NUFQgY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjE1MQorbXNnaWQgImdvIGRvd24gdG8gbmV4dCBjb21tYW5kIHByb21wdCIKK21zZ3N0ciAi56e75Yiw5LiL5LiA5YCL5ZG95Luk5o+Q56S6IgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIE1FTlVfTkVYVF9JVEVNIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDo0OTMKK21zZ2lkICJnbyBkb3duIHRvIG5leHQgaXRlbSIKK21zZ3N0ciAi6Lez5Yiw5LiL5LiA6aCFIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIEZXSU5SVCBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6MjE5Cittc2dpZCAiZ28gZm9yd2FyZCBvbmUgYnJhaWxsZSB3aW5kb3ciCittc2dzdHIgIuWJjemAsuS4gOWAi+m7nuWtl+imlueqlyIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBGV0lOUlRTS0lQIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDoyMzcKK21zZ2lkICJnbyBmb3J3YXJkIHNraXBwaW5nIGJsYW5rIGJyYWlsbGUgd2luZG93cyIKK21zZ3N0ciAi5b6A5YmN6Lez6YGO56m655m96bue5a2X6KaW56qXIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIE5YTkJXSU4gY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjk3NQorbXNnaWQgImdvIGZvcndhcmQgdG8gbmVhcmVzdCBub24tYmxhbmsgYnJhaWxsZSB3aW5kb3ciCittc2dzdHIgIuWJjemAsumBk+acgOi/keeahOmdnuepuueZvem7nuWtl+imlueqlyIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBIV0lOTFQgY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjE5MgorbXNnaWQgImdvIGxlZnQgaGFsZiBhIGJyYWlsbGUgd2luZG93IgorbXNnc3RyICLlt6blrpzljYrlgIvpu57lrZfoppbnqpciCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgQ0hSTFQgY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjE3NAorbXNnaWQgImdvIGxlZnQgb25lIGNoYXJhY3RlciIKK21zZ3N0ciAi5bem5a6c5LiA5YCL5a2X5YWDIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIEhXSU5SVCBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6MjAxCittc2dpZCAiZ28gcmlnaHQgaGFsZiBhIGJyYWlsbGUgd2luZG93IgorbXNnc3RyICLlj7Pnp7vljYrlgIvpu57lrZfoppbnqpciCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgQ0hSUlQgY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjE4MworbXNnaWQgImdvIHJpZ2h0IG9uZSBjaGFyYWN0ZXIiCittc2dzdHIgIuWPs+enu+S4gOWAi+Wtl+WFgyIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBTUEVBS19GUlNUX0NIQVIgY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjc4OQorbXNnaWQgImdvIHRvIGFuZCBzcGVhayBmaXJzdCBub24tYmxhbmsgY2hhcmFjdGVyIG9uIGxpbmUiCittc2dzdHIgIui3s+WIsOS4puacl+iugOacrOihjOesrOS4gOWAi+mdnuepuueZveWtl+WFgyIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBTUEVBS19GUlNUX0xJTkUgY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjgwNQorbXNnaWQgImdvIHRvIGFuZCBzcGVhayBmaXJzdCBub24tYmxhbmsgbGluZSBvbiBzY3JlZW4iCittc2dzdHIgIui3s+WIsOS4puacl+iugOieouW5leS4iuW4neS4gOmdnuepuueZveihjCIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBTUEVBS19MQVNUX0NIQVIgY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjc5NworbXNnaWQgImdvIHRvIGFuZCBzcGVhayBsYXN0IG5vbi1ibGFuayBjaGFyYWN0ZXIgb24gbGluZSIKK21zZ3N0ciAi6Lez5Yiw5Lim5pyX6K6A5pys6KGM5pyA5b6M5LiA5YCL6Z2e56m655m95a2X5YWDIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIFNQRUFLX0xBU1RfTElORSBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6ODEzCittc2dpZCAiZ28gdG8gYW5kIHNwZWFrIGxhc3Qgbm9uLWJsYW5rIGxpbmUgb24gc2NyZWVuIgorbXNnc3RyICLot7PliLDkuKbmnJforoDonqLluZXmnIDlvozkuIDpnZ7nqbrnmb3ooYwiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgU1BFQUtfTkVYVF9DSEFSIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDo3MzUKK21zZ2lkICJnbyB0byBhbmQgc3BlYWsgbmV4dCBjaGFyYWN0ZXIiCittc2dzdHIgIui3s+WIsOS4puacl+iugOS4i+WAi+Wtl+WFgyIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBTUEVBS19ORVhUX0xJTkUgY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjc4MQorbXNnaWQgImdvIHRvIGFuZCBzcGVhayBuZXh0IGxpbmUiCittc2dzdHIgIui3s+WIsOS4puacl+iugOS4i+S4gOihjCIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBTUEVBS19ORVhUX1dPUkQgY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjc1OAorbXNnaWQgImdvIHRvIGFuZCBzcGVhayBuZXh0IHdvcmQiCittc2dzdHIgIui3s+WIsOS4puacl+iugOS4i+WAi+WWruWtlyIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBTUEVBS19QUkVWX0NIQVIgY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjcyNworbXNnaWQgImdvIHRvIGFuZCBzcGVhayBwcmV2aW91cyBjaGFyYWN0ZXIiCittc2dzdHIgIui3s+WIsOS4puacl+iugOS4iuS4gOWtl+WFgyIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBTUEVBS19QUkVWX0xJTkUgY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjc3MworbXNnaWQgImdvIHRvIGFuZCBzcGVhayBwcmV2aW91cyBsaW5lIgorbXNnc3RyICLot7PliLDkuKbmnJforoDkuIrkuIDooYwiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgU1BFQUtfUFJFVl9XT1JEIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDo3NTAKK21zZ2lkICJnbyB0byBhbmQgc3BlYWsgcHJldmlvdXMgd29yZCIKK21zZ3N0ciAi6Lez5Yiw5Lim5pyX6K6A5LiK5LiA5Zau5a2XIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIEJPVF9MRUZUIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDoxMTUKK21zZ2lkICJnbyB0byBiZWdpbm5pbmcgb2YgYm90dG9tIGxpbmUiCittc2dzdHIgIui3s+WIsOacgOW+jOS4gOihjOmWi+mgrSIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBMTkJFRyBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6MjQ2Cittc2dpZCAiZ28gdG8gYmVnaW5uaW5nIG9mIGxpbmUiCittc2dzdHIgIui3s+WIsOihjOmmliIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBUT1BfTEVGVCBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6MTA1Cittc2dpZCAiZ28gdG8gYmVnaW5uaW5nIG9mIHRvcCBsaW5lIgorbXNnc3RyICLot7PpgZPlnLDkuIDooYzplovpoK0iCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgQk9UIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDo5NQorbXNnaWQgImdvIHRvIGJvdHRvbSBsaW5lIgorbXNnc3RyICLot7PliLDmnIDlvozkuIDooYwiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgU1BLSE9NRSBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6NTIyCittc2dpZCAiZ28gdG8gY3VycmVudCBzcGVha2luZyBwb3NpdGlvbiIKK21zZ3N0ciAi6Lez5Yiw55uu5YmN6IiH5Zug54K66IezIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIExORU5EIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDoyNTUKK21zZ2lkICJnbyB0byBlbmQgb2YgbGluZSIKK21zZ3N0ciAi6Lez5Yiw6KGM5bC+IgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIE1FTlVfUFJFVl9MRVZFTCBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6NjY0Cittc2dpZCAiZ28gdG8gcHJldmlvdXMgbWVudSBsZXZlbCIKK21zZ3N0ciAi6Lez6YGT5LiK5LiA5pu+6YG45ZauIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIEdPVE9NQVJLIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDoxMzAwCittc2dpZCAiZ28gdG8gcmVtZW1iZXJlZCBicmFpbGxlIHdpbmRvdyBwb3NpdGlvbiIKK21zZ3N0ciAi6Lez5Yiw5r+f5Yqp55qE6bue5a2X6KaW56qX5L2N572uIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIEhPTUUgY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjI2MworbXNnaWQgImdvIHRvIHNjcmVlbiBjdXJzb3IiCittc2dzdHIgIui3s+WIsOieouW5lea4uOaomSIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBSRVRVUk4gY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjI3OQorbXNnaWQgImdvIHRvIHNjcmVlbiBjdXJzb3Igb3IgZ28gYmFjayBhZnRlciBjdXJzb3IgdHJhY2tpbmciCittc2dzdHIgIui3s+WIsOieouW5lea4uOaomeaIlua4uOaomei/vei5pOW+jOWPjeWbniIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBHT1RPTElORSBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6MTMxMAorbXNnaWQgImdvIHRvIHNlbGVjdGVkIGxpbmUiCittc2dzdHIgIui3s+WIsOmBuOWPlueahOihjCIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBHVUlfSE9NRSBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6MTA2OQorbXNnaWQgImdvIHRvIHRoZSBob21lIHNjcmVlbiIKK21zZ3N0ciAi6Lez5Yiw5Li755Wr6Z2iIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIFRPUCBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6ODYKK21zZ2lkICJnbyB0byB0b3AgbGluZSIKK21zZ3N0ciAi6Lez6YGT5Zyw5LiA6KGMIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIExOVVAgY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjE0Cittc2dpZCAiZ28gdXAgb25lIGxpbmUiCittc2dzdHIgIui3s+S4iuS4gOihjCIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBXSU5VUCBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6MzIKK21zZ2lkICJnbyB1cCBzZXZlcmFsIGxpbmVzIgorbXNnc3RyICLlvoDkuIrot7Poi6XlubLooYwiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgTUVOVV9GSVJTVF9JVEVNIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDo0NjYKK21zZ2lkICJnbyB1cCB0byBmaXJzdCBpdGVtIgorbXNnc3RyICLot7PliLDnrKzkuIDpoIUiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgUFJQR1JQSCBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6MTI0Cittc2dpZCAiZ28gdXAgdG8gZmlyc3QgbGluZSBvZiBwYXJhZ3JhcGgiCittc2dzdHIgIui3s+WIsOacrOauteesrOS4gOihjCIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBQUkRJRkNIQVIgY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjEzMjAKK21zZ2lkICJnbyB1cCB0byBuZWFyZXN0IGxpbmUgd2l0aCBkaWZmZXJlbnQgY2hhcmFjdGVyIgorbXNnc3RyICLlvoDkuIrot7PliLDmnIDov5HnmoTkuI3lkIzlrZflhYPooYwiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgUFJESUZMTiBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6NTAKK21zZ2lkICJnbyB1cCB0byBuZWFyZXN0IGxpbmUgd2l0aCBkaWZmZXJlbnQgY29udGVudCIKK21zZ3N0ciAi5b6A5LiK6Lez5Yiw5pyA6L+R55qE5LiN5ZCM5YWn5a656KGMIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIEFUVFJVUCBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6NjgKK21zZ2lkICJnbyB1cCB0byBuZWFyZXN0IGxpbmUgd2l0aCBkaWZmZXJlbnQgaGlnaGxpZ2h0aW5nIgorbXNnc3RyICLlvoDkuIrot7PliLDmnIDov5HnmoTkuI3lkIzlj43nmb3ooYwiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgUFJJTkRFTlQgY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjEyNTcKK21zZ2lkICJnbyB1cCB0byBuZWFyZXN0IGxpbmUgd2l0aCBsZXNzIGluZGVudCB0aGFuIGNoYXJhY3RlciIKK21zZ3N0ciAi5b6A5LiK6Lez5Yiw5pyA6L+R55qE5YWn57iu5YWn57iu5bCR5pa85a2X5YWD55qE6KGMIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIFBSUFJPTVBUIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDoxNDIKK21zZ2lkICJnbyB1cCB0byBwcmV2aW91cyBjb21tYW5kIHByb21wdCIKK21zZ3N0ciAi6Lez5Yiw5LiK5LiA5YCL5ZG95Luk5o+Q56S6IgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIE1FTlVfUFJFVl9JVEVNIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDo0ODQKK21zZ2lkICJnbyB1cCB0byBwcmV2aW91cyBpdGVtIgorbXNnc3RyICLot7PliLDkuIrkuIDpoIUiCisKKyMuIEcKKyM6IFByb2dyYW1zL2NtZF91dGlscy5jOjE0NgorbXNnaWQgImdyZWVuIgorbXNnc3RyICLntqAiCisKKyM6IFByb2dyYW1zL3BnbXByaXZzX2xpbnV4LmM6MjE2NworbXNnaWQgImdyb3VwIHBlcm1pc3Npb25zIGFkZGVkIgorbXNnc3RyICLku6XliqDlhaXnvqTntYTmrIrpmZAiCisKKyM6IFByb2dyYW1zL2NtZF9taXNjZWxsYW5lb3VzLmM6MjEzCittc2dpZCAiaGVscCBub3QgYXZhaWxhYmxlIgorbXNnc3RyICLmspLmnInoqqrmmI4iCisKKyM6IFByb2dyYW1zL3Njcl9oZWxwLmM6MjI5Cittc2dpZCAiaGVscCBzY3JlZW4gbm90IHJlYWRhYmxlIgorbXNnc3RyICLoqqrmmI7nlavpnaLnhKHms5XoroDlj5YiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgS0VZX0hPTUUgY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjE1OTEKK21zZ2lkICJob21lIGtleSIKK21zZ3N0ciAiaG9tZSDpjbUiCisKKyM6IFByb2dyYW1zL2NvbmZpZy5jOjQ5MQorbXNnaWQgImlkZW50aWZpZXIsLi4uIgorbXNnc3RyICLnm7jlkIwsLi4uIgorCisjOiBEcml2ZXJzL0JyYWlsbGUvQmF1bS9icmFpbGxlLmM6MTE0OAorbXNnaWQgImlkbGUgdGltZW91dCIKK21zZ3N0ciAi6ZaS572u6YC+5pmCIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIFNBWV9ISUdIRVIgY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjExNzUKK21zZ2lkICJpbmNyZWFzZSBzcGVha2luZyBwaXRjaCIKK21zZ3N0ciAi5o+Q6auY6Kqe6Z+z6Z+z6Kq/IgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIFNBWV9GQVNURVIgY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjU1NworbXNnaWQgImluY3JlYXNlIHNwZWFraW5nIHJhdGUiCittc2dzdHIgIuWinuWKoOiIh+WboOe0oOeOhyIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBTQVlfTE9VREVSIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDo1NzEKK21zZ2lkICJpbmNyZWFzZSBzcGVha2luZyB2b2x1bWUiCittc2dzdHIgIuWinuWKoOiqnumfs+mfs+mHjyIKKworIzogUHJvZ3JhbXMvY29yZS5jOjExMjgKK21zZ2lkICJpbmRlbnQiCittc2dzdHIgIuWFp+e4riIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBQQVNURV9ISVNUT1JZIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDoxMzU0Cittc2dpZCAiaW5zZXJ0IGNsaXBib2FyZCBoaXN0b3J5IGVudHJ5IGFmdGVyIHNjcmVlbiBjdXJzb3IiCittc2dzdHIgIuWcqOieouW5lea4uOaomeiZleaPkuWFpeWJquiyvOS4jeeahOWFiOWJjeWFp+WuuSIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBQQVNURSBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6NjAwCittc2dpZCAiaW5zZXJ0IGNsaXBib2FyZCB0ZXh0IGFmdGVyIHNjcmVlbiBjdXJzb3IiCittc2dzdHIgIuWcqOieouW5lea4uOaomeiZleaPkuWFpeWJquiyvOS4jeeahOaWh+WtlyIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBIT1NUX1BBU1RFIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDoxMDQ3Cittc2dpZCAiaW5zZXJ0IGhvc3QgY2xpcGJvYXJkIHRleHQgYWZ0ZXIgc2NyZWVuIGN1cnNvciIKK21zZ3N0ciAi5Zyo6J6i5bmV5ri45qiZ6JmV5o+S5YWl5Li75qmf5Ymq6LK85LiN55qE5paH5a2XIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIEtFWV9JTlNFUlQgY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjE2MDcKK21zZ2lkICJpbnNlcnQga2V5IgorbXNnc3RyICJpbnNlcnQg6Y21IgorCisjOiBQcm9ncmFtcy9wcm9ncmFtLmM6MTY2Cittc2dpZCAiaW5zdGFsbCBwYXRoIG5vdCBhYnNvbHV0ZSIKK21zZ3N0ciAi5a6J6KOd6Lev5b6R5LiN5piv57WV5bCNIgorCisjOiBQcm9ncmFtcy9vcHRpb25zLmM6MTA0Cittc2dpZCAiaW52YWxpZCBjb3VudGVyIHNldHRpbmciCittc2dzdHIgIueEoeaViOeahOioiOaVuOWZqOioreWumiIKKworIzogUHJvZ3JhbXMvZGF0YWZpbGUuYzozMTgKK21zZ2lkICJpbnZhbGlkIGVzY2FwZSBzZXF1ZW5jZSIKK21zZ3N0ciAi54Sh5pWI55qE6Lez6ISr5bqP5YiXIgorCisjOiBQcm9ncmFtcy9vcHRpb25zLmM6MTEzCittc2dpZCAiaW52YWxpZCBmbGFnIHNldHRpbmciCittc2dzdHIgIueEoeaViOeahOaXl+aomeioreWumiIKKworIzogUHJvZ3JhbXMvY29uZmlnLmM6MjgwMworbXNnaWQgImludmFsaWQgbWVzc2FnZSBob2xkIHRpbWVvdXQiCittc2dzdHIgIueEoeaViOeahOioiuaBr+S/neeVmeaZgumWkyIKKworIy4gdGhlIG9wZXJhbmQgZm9yIGFuIG9wdGlvbiBpcyBpbnZhbGlkCisjOiBQcm9ncmFtcy9vcHRpb25zLmM6NTg5Cittc2dpZCAiaW52YWxpZCBvcGVyYW5kIgorbXNnc3RyICLnhKHmlYjnmoTpgYvnrpflk6EiCisKKyM6IFByb2dyYW1zL2JybGFwaV9zZXJ2ZXIuYzo0NTE2Cittc2dpZCAiaW52YWxpZCB0aHJlYWQgc3RhY2sgc2l6ZSIKK21zZ3N0ciAi54Sh5pWI55qE57ea56iL5aCG55aK5aSn5bCPIgorCisjOiBEcml2ZXJzL0JyYWlsbGUvQnJhaWxsZUxpdGUvYnJhaWxsZS5jOjU5MAorIzogRHJpdmVycy9CcmFpbGxlL0JyYWlsbGVMaXRlL2JyYWlsbGUuYzo2NjgKK21zZ2lkICJrZXlib2FyZCBlbXUgb2ZmIgorbXNnc3RyICLpjbXnm6TmqKHmk6zpl5wiCisKKyM6IERyaXZlcnMvQnJhaWxsZS9CcmFpbGxlTGl0ZS9icmFpbGxlLmM6NTg5Cittc2dpZCAia2V5Ym9hcmQgZW11IG9uIgorbXNnc3RyICLpjbXnm6TmqKHmk6zplosiCisKKyMuIEwgIEIKKyM6IFByb2dyYW1zL2NtZF91dGlscy5jOjE1MworbXNnaWQgImxpZ2h0IGJsdWUiCittc2dzdHIgIua3oeiXjSIKKworIy4gTCBHQgorIzogUHJvZ3JhbXMvY21kX3V0aWxzLmM6MTU1Cittc2dpZCAibGlnaHQgY3lhbiIKK21zZ3N0ciAi5reh6Z2SIgorCisjLiBMIEcKKyM6IFByb2dyYW1zL2NtZF91dGlscy5jOjE1NAorbXNnaWQgImxpZ2h0IGdyZWVuIgorbXNnc3RyICLmt6HnjociCisKKyMuIFJHQgorIzogUHJvZ3JhbXMvY21kX3V0aWxzLmM6MTUxCittc2dpZCAibGlnaHQgZ3JleSIKK21zZ3N0ciAi5reh54GwIgorCisjLiBMUiBCCisjOiBQcm9ncmFtcy9jbWRfdXRpbHMuYzoxNTcKK21zZ2lkICJsaWdodCBtYWdlbnRhIgorbXNnc3RyICLmt6HntKsiCisKKyMuIExSCisjOiBQcm9ncmFtcy9jbWRfdXRpbHMuYzoxNTYKK21zZ2lkICJsaWdodCByZWQiCittc2dzdHIgIua3oee0hSIKKworIzogUHJvZ3JhbXMvY21kX3NwZWVjaC5jOjUwMAorbXNnaWQgImxpbmUiCittc2dzdHIgIuihjCIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBDT1BZX0xJTkUgY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjEyMzkKK21zZ2lkICJsaW5lYXIgY29weSB0byBjaGFyYWN0ZXIiCittc2dzdHIgIuebtOe3muaLt+iyneWtl+WFgyIKKworIzogUHJvZ3JhbXMvY29uZmlnLmM6NjYzCittc2dpZCAibHZsfGNhdCwuLi4iCittc2dzdHIgImx2bHxjYXQsLi4uIgorCisjLiBSIEIKKyM6IFByb2dyYW1zL2NtZF91dGlscy5jOjE0OQorbXNnaWQgIm1hZ2VudGEiCittc2dzdHIgIue0q+e0hSIKKworIy4gdGhlIG9wZXJhbmQgZm9yIGEgc3RyaW5nIG9wdGlvbiBoYXNuJ3QgYmVlbiBzcGVjaWZpZWQKKyM6IFByb2dyYW1zL29wdGlvbnMuYzo1ODMKK21zZ2lkICJtaXNzaW5nIG9wZXJhbmQiCittc2dzdHIgIue8uuWwkemBi+eul+WToSIKKworIzogUHJvZ3JhbXMvcGFyc2UuYzo0NzIKK21zZ2lkICJtaXNzaW5nIHBhcmFtZXRlciBuYW1lIgorbXNnc3RyICLnvLrlsJHlj4PmlbjlkI3nqLEiCisKKyM6IFByb2dyYW1zL3BhcnNlLmM6NDU4Cittc2dpZCAibWlzc2luZyBwYXJhbWV0ZXIgcXVhbGlmaWVyIgorbXNnc3RyICLnvLrlsJHlj4PmlbjmjIflrprnrKbomZ8iCisKKyM6IFByb2dyYW1zL3BhcnNlLmM6NDM0Cittc2dpZCAibWlzc2luZyBwYXJhbWV0ZXIgdmFsdWUiCittc2dzdHIgIue8uuWwkemkkOaVuOWAvCIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBHVUlfSVRFTV9GUlNUIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDoxMTQwCittc2dpZCAibW92ZSB0byB0aGUgZmlyc3QgaXRlbSBpbiB0aGUgc2NyZWVuIGFyZWEiCittc2dzdHIgIuenu+WIsOeVq+mdouS4reeahOesrOS4gOWAi+mgheebriIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBHVUlfSVRFTV9MQVNUIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDoxMTYxCittc2dpZCAibW92ZSB0byB0aGUgbGFzdCBpdGVtIGluIHRoZSBzY3JlZW4gYXJlYSIKK21zZ3N0ciAi56e75Yiw55Wr6Z2i5Lit55qE5pyA5b6M5LiA5YCL6aCF55uuIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIEdVSV9JVEVNX05FWFQgY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjExNTQKK21zZ2lkICJtb3ZlIHRvIHRoZSBuZXh0IGl0ZW0gaW4gdGhlIHNjcmVlbiBhcmVhIgorbXNnc3RyICLnp7vliLDnlavpnaLkuK3nmoTkuIvkuIDlgIvpoIXnm64iCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgR1VJX0lURU1fUFJFViBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6MTE0NworbXNnaWQgIm1vdmUgdG8gdGhlIHByZXZpb3VzIGl0ZW0gaW4gdGhlIHNjcmVlbiBhcmVhIgorbXNnc3RyICLnp7vliLDnlavpnaLkuK3nmoTkuIrkuIDlgIvpoIXnm64iCisKKyM6IFByb2dyYW1zL21zZ3Rlc3QuYzo1NworbXNnaWQgIm5hbWUiCittc2dzdHIgIuWQjeeosSIKKworIzogUHJvZ3JhbXMvY29uZmlnLmM6MzU0IFByb2dyYW1zL2NvbmZpZy5jOjQwNiBQcm9ncmFtcy9jb25maWcuYzo0NTkKKyM6IFByb2dyYW1zL2NvbmZpZy5jOjQ4MSBQcm9ncmFtcy9jb25maWcuYzo1NTkgUHJvZ3JhbXMvY29uZmlnLmM6NTc4CisjOiBQcm9ncmFtcy9jb25maWcuYzo2MTMKK21zZ2lkICJuYW1lPXZhbHVlLC4uLiIKK21zZ3N0ciAi5ZCN56ixPeaVuOWAvCwuLi4iCisKKyM6IERyaXZlcnMvQnJhaWxsZS9JcmlzL2JyYWlsbGUuYzoxNTEwCittc2dpZCAibmF0aXZlIgorbXNnc3RyICLlhafpg6giCisKKyM6IFByb2dyYW1zL2NvbmZpZy5jOjExODgKK21zZ2lkICJubyBrZXkgYmluZGluZ3MiCittc2dzdHIgIuaykuacieaMiemNtee2geWumiIKKworIzogUHJvZ3JhbXMvc2NyX2RyaXZlci5jOjM5Cittc2dpZCAibm8gc2NyZWVuIgorbXNnc3RyICLmspLmnInonqLluZUiCisKKyM6IFByb2dyYW1zL2NvbmZpZy5jOjcxNQorbXNnaWQgIm5vbmUiCittc2dzdHIgIuaykuaciSIKKworIzogUHJvZ3JhbXMvY29uZmlnLmM6MTQ3NworbXNnaWQgIm5vdCBzYXZlZCIKK21zZ3N0ciAi5pyq5a2Y5qqUIgorCisjOiBQcm9ncmFtcy9wZ21wcml2c19saW51eC5jOjIwMTgKK21zZ2lkICJub3Qgc3dpdGNoaW5nIHRvIGFuIHVucHJpdmlsZWdlZCB1c2VyIgorbXNnc3RyICLmnKrliIfmj5vliLDmnKrmjojmrIrnmoTkvb/nlKjogIUiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgR1VJX0FQUF9BTEVSVFMgY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjExMTIKK21zZ2lkICJvcGVuIHRoZSBhcHBsaWNhdGlvbiBhbGVydHMgd2luZG93IgorbXNnc3RyICLmiZPplovou5/pq5TorabnpLroppbnqpciCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgR1VJX0FQUF9MSVNUIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDoxMDk4Cittc2dpZCAib3BlbiB0aGUgYXBwbGljYXRpb24gbGlzdCB3aW5kb3ciCittc2dzdHIgIuaJk+mWi+i7n+mrlOWIl+ihqOimlueqlyIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBHVUlfQVBQX01FTlUgY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjExMDUKK21zZ2lkICJvcGVuIHRoZSBhcHBsaWNhdGlvbi1zcGVjaWZpYyBtZW51IgorbXNnc3RyICLmiZPplovou5/pq5TmjIflrprnmoTpgbjllq4iCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgR1VJX0JSTF9BQ1RJT05TIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDoxMDYxCittc2dpZCAib3BlbiB0aGUgYnJhaWxsZSBhY3Rpb25zIHdpbmRvdyIKK21zZ3N0ciAi5omT6ZaL6bue5a2X5rS75YuV6KaW56qXIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIEdVSV9ERVZfT1BUSU9OUyBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6MTA5MQorbXNnaWQgIm9wZW4gdGhlIGRldmljZSBvcHRpb25zIHdpbmRvdyIKK21zZ3N0ciAi5omT6ZaL6Kit5YKZ6YG46aCF6KaW56qXIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIEdVSV9ERVZfU0VUVElOR1MgY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjEwODQKK21zZ2lkICJvcGVuIHRoZSBkZXZpY2Ugc2V0dGluZ3Mgd2luZG93IgorbXNnc3RyICLmiZPplovoqK3lgpnoqK3lrproppbnqpciCisKKyM6IFByb2dyYW1zL29wdGlvbnMuYzoxNTUKK21zZ2lkICJvcHRpb24iCittc2dzdHIgIumBuOWQkSIKKworIzogUHJvZ3JhbXMvcGdtcHJpdnNfbGludXguYzoyMTUyCittc2dpZCAib3duZXJzaGlwIGNsYWltZWQiCittc2dzdHIgIuaJgOacieasiuS4u+W8tSIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBLRVlfUEFHRV9ET1dOIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDoxNTgzCittc2dpZCAicGFnZS1kb3duIGtleSIKK21zZ3N0ciAicGFnZS1kb3duIOmNtSIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBLRVlfUEFHRV9VUCBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6MTU3NQorbXNnaWQgInBhZ2UtdXAga2V5IgorbXNnc3RyICJwYWdlLXVwIOmNtSIKKworIzogUHJvZ3JhbXMvbXNndGVzdC5jOjQyCittc2dpZCAicGF0aCIKK21zZ3N0ciAi6Lev5b6RIgorCisjOiBQcm9ncmFtcy9jb25maWcuYzoyNzc2Cittc2dpZCAicGlkIGZpbGUgbm90IHNwZWNpZmllZCIKK21zZ3N0ciAicGlkIOaqlOahiOacquaMh+WumiIKKworIzogUHJvZ3JhbXMvcHJvZ3JhbS5jOjMwOAorbXNnaWQgInBpZCBmaWxlIG9wZW4gZXJyb3IiCittc2dzdHIgInBpZCDmqpTmoYjplovllZ/pjK/oqqQiCisKKyM6IFByb2dyYW1zL3Nway5jOjIzMgorbXNnaWQgInBpdGNoIgorbXNnc3RyICLpn7Poqr8iCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgU0VUTEVGVCBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6MTI4MworbXNnaWQgInBsYWNlIGxlZnQgZW5kIG9mIGJyYWlsbGUgd2luZG93IGF0IGNoYXJhY3RlciIKK21zZ3N0ciAi5oqK6bue5a2X6KaW56qX55qE5pyA5bem56uv5bCN6b2K5a2X5YWDIgorCisjOiBEcml2ZXJzL0JyYWlsbGUvQmF1bS9icmFpbGxlLmM6MTE0NworbXNnaWQgInBvd2VyIHN3aXRjaCIKK21zZ3N0ciAi6Zu75rqQ6ZaL6ZecIgorCisjOiBQcm9ncmFtcy9zcGsuYzoyMDYKK21zZ2lkICJyYXRlIgorbXNnc3RyICLpgJ/njociCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgQ09QWV9SRUNUIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDoxMjMxCittc2dpZCAicmVjdGFuZ3VsYXIgY29weSB0byBjaGFyYWN0ZXIiCittc2dzdHIgIuWNgOWhiuikh+ijveWtl+WFgyIKKworIy4gUgorIzogUHJvZ3JhbXMvY21kX3V0aWxzLmM6MTQ4Cittc2dpZCAicmVkIgorbXNnc3RyICLntIUiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgUkVGUkVTSCBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6MTAwNQorbXNnaWQgInJlZnJlc2ggYnJhaWxsZSBkaXNwbGF5IgorbXNnc3RyICLliLfmlrDpu57lrZfpoa/npLoiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgUkVGUkVTSF9MSU5FIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDoxNDEzCittc2dpZCAicmVmcmVzaCBicmFpbGxlIGxpbmUiCittc2dzdHIgIuWIt+aWsOm7nuWtl+mhr+ekuuihjCIKKworIzogUHJvZ3JhbXMvY29uZmlnLmM6NDEzCittc2dpZCAicmVnZXhwLC4uLiIKK21zZ3N0ciAicmVnZXhwLC4uLiIKKworIzogUHJvZ3JhbXMvY29uZmlnLmM6MjAyMQorIywgYy1mb3JtYXQKK21zZ2lkICJyZWluaXRpYWxpemluZyBicmFpbGxlIGRyaXZlciIKK21zZ3N0ciAi6YeN5paw5Ye65L2/5YyW6bue5a2X6amF5YuVIgorCisjOiBQcm9ncmFtcy9jb25maWcuYzoyNTM0CisjLCBjLWZvcm1hdAorbXNnaWQgInJlaW5pdGlhbGl6aW5nIHNjcmVlbiBkcml2ZXIiCittc2dzdHIgIumHjeaWsOWHuuS9v+WMluieouW5lempheWLlSIKKworIzogUHJvZ3JhbXMvY29uZmlnLmM6MjMzNAorIywgYy1mb3JtYXQKK21zZ2lkICJyZWluaXRpYWxpemluZyBzcGVlY2ggZHJpdmVyIgorbXNnc3RyICLph43mlrDlh7rkvb/ljJboqp7pn7PpqYXli5UiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgU0VUTUFSSyBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6MTI5MQorbXNnaWQgInJlbWVtYmVyIGN1cnJlbnQgYnJhaWxsZSB3aW5kb3cgcG9zaXRpb24iCittc2dzdHIgIua/n+WKqeebruWJjem7nuWtl+imlueql+S9jee9riIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBBTEVSVCBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6MTQ0NQorbXNnaWQgInJlbmRlciBhbiBhbGVydCIKK21zZ3N0ciAi55m85Ye66K2m5aCxIgorCisjOiBEcml2ZXJzL0JyYWlsbGUvQnJhaWxsZUxpdGUvYnJhaWxsZS5jOjYwMQorIzogRHJpdmVycy9CcmFpbGxlL0JyYWlsbGVMaXRlL2JyYWlsbGUuYzo3ODAKKyM6IERyaXZlcnMvQnJhaWxsZS9CcmFpbGxlTGl0ZS9icmFpbGxlLmM6NzgyCisjOiBEcml2ZXJzL0JyYWlsbGUvQnJhaWxsZUxpdGUvYnJhaWxsZS5jOjc5MQorbXNnaWQgInJlcGVhdCBjb3VudCIKK21zZ3N0ciAi6YeN6KSH6KiI5pW4IgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIFJFU1RBUlRCUkwgY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjYwNworbXNnaWQgInJlc3RhcnQgYnJhaWxsZSBkcml2ZXIiCittc2dzdHIgIumHjeaWsOWVn+WLlem7nuWtl+mpheWLlSIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBSRVNUQVJUU1BFRUNIIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDo2MTQKK21zZ2lkICJyZXN0YXJ0IHNwZWVjaCBkcml2ZXIiCittc2dzdHIgIumHjeaWsOWVn+WLleiqnumfs+mpheWLlSIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBDTElQX1JFU1RPUkUgY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjg2NAorbXNnaWQgInJlc3RvcmUgY2xpcGJvYXJkIGZyb20gZGlzayIKK21zZ3N0ciAi5b6e56OB56Kf6YKE5Y6f5Ymq6LK857C/IgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIFBSRUZMT0FEIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDo0NTcKK21zZ2lkICJyZXN0b3JlIHByZWZlcmVuY2VzIGZyb20gZGlzayIKK21zZ3N0ciAi5b6e56OB56Kf6YKE5Y6f5YGP5aW96Kit5a6aIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIEdVSV9BUkVBX0FDVFYgY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjExMTkKK21zZ2lkICJyZXR1cm4gdG8gdGhlIGFjdGl2ZSBzY3JlZW4gYXJlYSIKK21zZ3N0ciAi5Zue5q246YGL5L2c5Lit55qE55Wr6Z2iIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIENMSVBfU0FWRSBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6ODU3Cittc2dpZCAic2F2ZSBjbGlwYm9hcmQgdG8gZGlzayIKK21zZ3N0ciAi5YSy5a2Y5Ymq6LK857C/5Yiw56OB56KfIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIFBSRUZTQVZFIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDo0NTAKK21zZ2lkICJzYXZlIHByZWZlcmVuY2VzIHRvIGRpc2siCittc2dzdHIgIuWEsuWtmOWBj+WlveioreWumuWIsOejgeeinyIKKworIzogUHJvZ3JhbXMveGJybGFwaS5jOjkxCittc2dpZCAic2NoZW1lKy4uLiIKK21zZ3N0ciAic2NoZW1lKy4uLiIKKworIzogUHJvZ3JhbXMvY29uZmlnLmM6MjQxMAorbXNnaWQgInNjcmVlbiBkcml2ZXIgbm90IGxvYWRhYmxlIgorbXNnc3RyICLonqLluZXpqYXli5XnhKHms5XovInlhaUiCisKKyM6IFByb2dyYW1zL2NvbmZpZy5jOjI1MzEKK21zZ2lkICJzY3JlZW4gZHJpdmVyIHJlc3RhcnRpbmciCittc2dzdHIgIuieouW5lempheWLlemHjeaWsOWVn+WLlSIKKworIzogUHJvZ3JhbXMvY21kX21pc2NlbGxhbmVvdXMuYzoxNzEKK21zZ2lkICJzY3JlZW4gZHJpdmVyIHN0b3BwZWQiCittc2dzdHIgIuieouW5lempheWLleWBnOatoiIKKworIzogRHJpdmVycy9TY3JlZW4vQW5kcm9pZC9zY3JlZW4uYzoxODQKK21zZ2lkICJzY3JlZW4gbG9ja2VkIgorbXNnc3RyICLonqLluZXpjpblrpoiCisKKyM6IERyaXZlcnMvU2NyZWVuL0xpbnV4L3NjcmVlbi5jOjE1MzEKK21zZ2lkICJzY3JlZW4gbm90IGluIHRleHQgbW9kZSIKK21zZ3N0ciAi6J6i5bmV5LiN5Zyo5paH5a2X5qih5byPIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIFBSU0VBUkNIIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDoxNTgKK21zZ2lkICJzZWFyY2ggYmFja3dhcmQgZm9yIGNsaXBib2FyZCB0ZXh0IgorbXNnc3RyICLlvoDlm57lsIvmib7liarosrzkuI3mloflrZciCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgTlhTRUFSQ0ggY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjE2NQorbXNnaWQgInNlYXJjaCBmb3J3YXJkIGZvciBjbGlwYm9hcmQgdGV4dCIKK21zZ3N0ciAi5b6A5YmN5bCL5om+5Ymq6LK85LiN5paH5a2XIgorCisjOiBQcm9ncmFtcy9tZW51LmM6NDY5Cittc2dpZCAic2Vjb25kcyIKK21zZ3N0ciAi56eSIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIFRYVFNFTF9BTEwgY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjEwMjYKK21zZ2lkICJzZWxlY3QgYWxsIG9mIHRoZSB0ZXh0IgorbXNnc3RyICLlhajpgbjmloflrZciCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgTUVOVV9ORVhUX1NFVFRJTkcgY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjUwNworbXNnaWQgInNlbGVjdCBuZXh0IGNob2ljZSIKK21zZ3N0ciAi6YG45Y+W5LiL5LiA5ZCR6YG45pOHIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIE1FTlVfUFJFVl9TRVRUSU5HIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDo1MDAKK21zZ2lkICJzZWxlY3QgcHJldmlvdXMgY2hvaWNlIgorbXNnc3RyICLpgbjlj5bliY3kuIDlkJHpgbjmk4ciCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgVFVORVMgY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjM5OQorbXNnaWQgInNldCBhbGVydCB0dW5lcyBvbi9vZmYiCittc2dzdHIgIuioreWumuitpuekuumfs+mWi+mXnCIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBBVFRSQkxJTksgY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjM4MworbXNnaWQgInNldCBhdHRyaWJ1dGUgYmxpbmtpbmcgb24vb2ZmIgorbXNnc3RyICLoqK3lrprlsazmgKfot7Pli5Xplovpl5wiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgQVRUUlZJUyBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6Mzc1Cittc2dpZCAic2V0IGF0dHJpYnV0ZSB1bmRlcmxpbmluZyBvbi9vZmYiCittc2dzdHIgIuioreWumuWxrOaAp+WutuW6lee3mumWi+mXnCIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBTRVRfQVRUUklCVVRFU19UQUJMRSBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6MTM3MAorbXNnaWQgInNldCBhdHRyaWJ1dGVzIHRhYmxlIgorbXNnc3RyICLoqK3lrprlsazmgKfooagiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgQVVUT1JFUEVBVCBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6NDA3Cittc2dpZCAic2V0IGF1dG9yZXBlYXQgb24vb2ZmIgorbXNnc3RyICLoqK3lrproh6rli5Xph43opIfplovpl5wiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgQVNQS19DTVBfV09SRFMgY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjcxMgorbXNnaWQgInNldCBhdXRvc3BlYWsgY29tcGxldGVkIHdvcmRzIG9uL29mZiIKK21zZ3N0ciAi6Kit5a6a6Ieq5YuV5pyX6K6A5a6M5oiQ55qE5Zau5a2X6ZaL6ZecIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIEFTUEtfREVMX0NIQVJTIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDo2OTYKK21zZ2lkICJzZXQgYXV0b3NwZWFrIGRlbGV0ZWQgY2hhcmFjdGVycyBvbi9vZmYiCittc2dzdHIgIuioreWumuiHquWLleacl+iugOWIqumZpOeahOWtl+WFg+mWi+mXnCIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBBU1BLX0lOREVOVCBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6OTk4Cittc2dpZCAic2V0IGF1dG9zcGVhayBpbmRlbnQgb2YgY3VycmVudCBsaW5lIG9uL29mZiIKK21zZ3N0ciAi6Kit5a6a6Ieq5YuV5pyX6K6A5YWn57iu6KGM6ZaL6ZecIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIEFTUEtfSU5TX0NIQVJTIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDo2ODgKK21zZ2lkICJzZXQgYXV0b3NwZWFrIGluc2VydGVkIGNoYXJhY3RlcnMgb24vb2ZmIgorbXNnc3RyICLoqK3lrproh6rli5XmnJforoDmj5LlhaXnmoTlrZflhYPplovpl5wiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgQVVUT1NQRUFLIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDo0MTUKK21zZ2lkICJzZXQgYXV0b3NwZWFrIG9uL29mZiIKK21zZ3N0ciAi6Kit5a6a6Ieq5YuV5pyX6K6A6ZaL6ZecIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIEFTUEtfUkVQX0NIQVJTIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDo3MDQKK21zZ2lkICJzZXQgYXV0b3NwZWFrIHJlcGxhY2VkIGNoYXJhY3RlcnMgb24vb2ZmIgorbXNnc3RyICLoqK3lrproh6rli5XmnJforoDph43opIfnmoTlrZflhYPplovpl5wiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgQVNQS19TRUxfQ0hBUiBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6NjgwCittc2dpZCAic2V0IGF1dG9zcGVhayBzZWxlY3RlZCBjaGFyYWN0ZXIgb24vb2ZmIgorbXNnc3RyICLoqK3lrproh6rli5XmnJforoDpgbjlj5bnmoTlrZflhYPplovpl5wiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgQVNQS19TRUxfTElORSBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6NjcyCittc2dpZCAic2V0IGF1dG9zcGVhayBzZWxlY3RlZCBsaW5lIG9uL29mZiIKK21zZ3N0ciAi6Kit5a6a6Ieq5YuV5pyX6K6A6YG45Y+W55qE6KGM6ZaL6ZecIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIEJSTEtCRCBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6ODgwCittc2dpZCAic2V0IGJyYWlsbGUga2V5Ym9hcmQgZW5hYmxlZC9kaXNhYmxlZCIKK21zZ3N0ciAi6Kit5a6a6bue5a2X6Y2155ukIOWVn+eUqC/lgZznlKgiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgQlJMVUNET1RTIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDo4NzIKK21zZ2lkICJzZXQgYnJhaWxsZSB0eXBpbmcgbW9kZSBkb3RzL3RleHQiCittc2dzdHIgIuioreWumum7nuWtl+i8uOWFpeaooeW8jyDpu57kvY0v5paH5a2XIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIENBUEJMSU5LIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDozOTEKK21zZ2lkICJzZXQgY2FwaXRhbCBsZXR0ZXIgYmxpbmtpbmcgb24vb2ZmIgorbXNnc3RyICLoqK3lrprlpKflr6vlrZfmr43ot7Pli5Xplovpl5wiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgQ09OVFJBQ1RFRCBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6MTE5MAorbXNnaWQgInNldCBjb250cmFjdGVkL2NvbXB1dGVyIGJyYWlsbGUiCittc2dzdHIgIuioreWumue4ruWvq+aIlumbu+iFpum7nuWtlyIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBTRVRfQ09OVFJBQ1RJT05fVEFCTEUgY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjEzNzgKK21zZ2lkICJzZXQgY29udHJhY3Rpb24gdGFibGUiCittc2dzdHIgIuioreWumue4ruWvq+ihqCIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBESVNQTUQgY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjI5NQorbXNnaWQgInNldCBkaXNwbGF5IG1vZGUgYXR0cmlidXRlcy90ZXh0IgorbXNnc3RyICLoqK3lrprpoa/npLrmqKHlvI8g5bGs5oCnL+aWh+WtlyIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBDU1JISURFIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDozNDMKK21zZ2lkICJzZXQgaGlkZGVuIHNjcmVlbiBjdXJzb3Igb24vb2ZmIgorbXNnc3RyICLoqK3lrprpmrHol4/onqLluZXmuLjmqJnplovpl5wiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgU0VUX0tFWUJPQVJEX1RBQkxFIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDoxMzg2Cittc2dpZCAic2V0IGtleWJvYXJkIHRhYmxlIgorbXNnc3RyICLoqK3lrprmjInpjbXooagiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgU0VUX0xBTkdVQUdFX1BST0ZJTEUgY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjEzOTQKK21zZ2lkICJzZXQgbGFuZ3VhZ2UgcHJvZmlsZSIKK21zZ3N0ciAi6Kit5a6a6Kqe6KiA6Kit5a6a5qqUIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIENTUkJMSU5LIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDozNjcKK21zZ2lkICJzZXQgc2NyZWVuIGN1cnNvciBibGlua2luZyBvbi9vZmYiCittc2dzdHIgIuioreWumuieouW5lea4uOaomei3s+WLlemWi+mXnCIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBDU1JTSVpFIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDozNTkKK21zZ2lkICJzZXQgc2NyZWVuIGN1cnNvciBzdHlsZSBibG9jay91bmRlcmxpbmUiCittc2dzdHIgIuioreWumuieouW5lea4uOaomeW9oueLgCDljYDlv6sv5bqV57eaIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIENTUlZJUyBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6MzM1Cittc2dpZCAic2V0IHNjcmVlbiBjdXJzb3IgdmlzaWJpbGl0eSBvbi9vZmYiCittc2dzdHIgIuioreWumuieouW5lea4uOaomemhr+ekuumWi+mXnCIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBGUkVFWkUgY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjI4NworbXNnaWQgInNldCBzY3JlZW4gaW1hZ2UgZnJvemVuL3VuZnJvemVuIgorbXNnc3RyICLoqK3lrprnlavpnaLlnJblg48g5YeN57WQL+S4jeWLleevgCIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBDT01QQlJMNiBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6MTE5OAorbXNnaWQgInNldCBzaXgvZWlnaHQgZG90IGNvbXB1dGVyIGJyYWlsbGUiCittc2dzdHIgIuioreWumuWFrem7nuaIluWFq+m7numbu+iFpum7nuWtlyIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBTS1BCTE5LV0lOUyBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6MzI3Cittc2dpZCAic2V0IHNraXBwaW5nIG9mIGJsYW5rIGJyYWlsbGUgd2luZG93cyBvbi9vZmYiCittc2dzdHIgIuioreWumui3s+mBjuepuueZvem7nuWtl+imlueql+mWi+mXnCIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBTS1BJRExOUyBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6MzE5Cittc2dpZCAic2V0IHNraXBwaW5nIG9mIGxpbmVzIHdpdGggaWRlbnRpY2FsIGNvbnRlbnQgb24vb2ZmIgorbXNnc3RyICLoqK3lrprot7PpgY7nm7jlkIzlhaflrrnnmoTooYzplovpl5wiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgU0xJREVXSU4gY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjMxMQorbXNnaWQgInNldCBzbGlkaW5nIGJyYWlsbGUgd2luZG93IG9uL29mZiIKK21zZ3N0ciAi6Kit5a6a5ruR5YuV6bue5a2X6KaW56qX6ZaL6ZecIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIFNIT1dfQ1VSUl9MT0NOIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDo4NTAKK21zZ2lkICJzZXQgc3BlZWNoIGN1cnNvciB2aXNpYmlsaXR5IG9uL29mZiIKK21zZ3N0ciAi6Kit5a6a6Kqe6Z+z5ri45qiZ6aGv56S66ZaL6ZecIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIFRYVFNFTF9TRVQgY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjE0MjkKK21zZ2lkICJzZXQgdGV4dCBzZWxlY3Rpb24iCittc2dzdHIgIuioreWumuaWh+Wtl+mBuOWPliIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBTSVhET1RTIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDozMDMKK21zZ2lkICJzZXQgdGV4dCBzdHlsZSA2LWRvdC84LWRvdCIKK21zZ3N0ciAi6Kit5a6a5paH6Ieq6KGM5aSqIOWFrem7ni/lhavpu54iCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgU0VUX1RFWFRfVEFCTEUgY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjEzNjIKK21zZ2lkICJzZXQgdGV4dCB0YWJsZSIKK21zZ3N0ciAi6Kit5a6a5paH5a2X6KGoIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIFRPVUNIX05BViBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6OTgzCittc2dpZCAic2V0IHRvdWNoIG5hdmlnYXRpb24gb24vb2ZmIgorbXNnc3RyICLoqK3lrprop7jmjqflsI7opr3plovpl5wiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgQ1NSVFJLIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDozNTEKK21zZ2lkICJzZXQgdHJhY2sgc2NyZWVuIGN1cnNvciBvbi9vZmYiCittc2dzdHIgIuioreWumui/vei5pOieouW5lea4uOaomemWi+mXnCIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBUSU1FIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDo2NTYKK21zZ2lkICJzaG93IGN1cnJlbnQgZGF0ZSBhbmQgdGltZSIKK21zZ3N0ciAi6aGv56S655uu5YmN5pel5pyf6IiH5pmC6ZaTIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIEdVSV9USVRMRSBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6MTA1NAorbXNnaWQgInNob3cgdGhlIHdpbmRvdyB0aXRsZSIKK21zZ3N0ciAi6aGv56S66KaW56qX5qiZ6aGMIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIElORElDQVRPUlMgY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjEwMTIKK21zZ2lkICJzaG93IHZhcmlvdXMgZGV2aWNlIHN0YXR1cyBpbmRpY2F0b3JzIgorbXNnc3RyICLpoa/npLrlkITnqK7oqK3lgpnni4DmhYvmjIfnpLrnh4giCisKKyM6IFByb2dyYW1zL21lbnVfcHJlZnMuYzoxMDU3Cittc2dpZCAic291bmRjYXJkIGRpZ2l0YWwgYXVkaW8iCittc2dzdHIgIumfs+aViOWNoeaVuOS9jemfs+aViCIKKworIzogUHJvZ3JhbXMvbWVudV9wcmVmcy5jOjEwNTkKK21zZ2lkICJzb3VuZGNhcmQgc3ludGhlc2l6ZXIiCittc2dzdHIgIumfs+aViOWNoeWQiOaIkOWZqCIKKworIzogUHJvZ3JhbXMvY21kLmM6Mjc3IFByb2dyYW1zL2NvcmUuYzoxMDUxCittc2dpZCAic3BhY2UiCittc2dzdHIgIuepuueZvSIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBTUEVBS19DVVJSX0NIQVIgY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjcxOQorbXNnaWQgInNwZWFrIGN1cnJlbnQgY2hhcmFjdGVyIgorbXNnc3RyICLmnJforoDnm67liY3lrZflhYMiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgU0FZX0xJTkUgY29tbWFuZC4KKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgU1BFQUtfQ1VSUl9MSU5FIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDo1MjkgUHJvZ3JhbXMvY21kcy5hdXRvLmg6NzY1Cittc2dpZCAic3BlYWsgY3VycmVudCBsaW5lIgorbXNnc3RyICLmnJforoDmnKzooYwiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgU1BFQUtfQ1VSUl9XT1JEIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDo3NDIKK21zZ2lkICJzcGVhayBjdXJyZW50IHdvcmQiCittc2dzdHIgIuacl+iugOebruWJjeWWruWtlyIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBTQVlfQkVMT1cgY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjU0MworbXNnaWQgInNwZWFrIGZyb20gY3VycmVudCBsaW5lIHRocm91Z2ggYm90dG9tIG9mIHNjcmVlbiIKK21zZ3N0ciAi5b6e5pys6KGM6ZaL5aeL5pyX6K6A5Yiw55Wr6Z2i5bqV6YOoIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIFNBWV9BTEwgY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjExODIKK21zZ2lkICJzcGVhayBmcm9tIHRvcCBvZiBzY3JlZW4gdGhyb3VnaCBib3R0b20gb2Ygc2NyZWVuIgorbXNnc3RyICLlvp7nlavpnaLplovpoK3loLHoroDliLDnlavpnaLntZDmnZ8iCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgU0FZX0FCT1ZFIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDo1MzYKK21zZ2lkICJzcGVhayBmcm9tIHRvcCBvZiBzY3JlZW4gdGhyb3VnaCBjdXJyZW50IGxpbmUiCittc2dzdHIgIuW+nueVq+mdoumgguerr+mWi+Wni+acl+eNqOWIsOacrOihjCIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBTUEVBS19JTkRFTlQgY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjk5MAorbXNnaWQgInNwZWFrIGluZGVudCBvZiBjdXJyZW50IGxpbmUiCittc2dzdHIgIuacl+iugOWFp+e4ruihjCIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBTUEVBS19DVVJSX0xPQ04gY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjg0MgorbXNnaWQgInNwZWFrIHNwZWVjaCBjdXJzb3IgbG9jYXRpb24iCittc2dzdHIgIuacl+iugOiqnumfs+a4uOaomeS9jee9riIKKworIzogUHJvZ3JhbXMvbXNndGVzdC5jOjUwCittc2dpZCAic3BlY2lmaWVyIgorbXNnc3RyICLmjIflrprnrKbomZ8iCisKKyM6IFByb2dyYW1zL2NvbmZpZy5jOjIxODIKK21zZ2lkICJzcGVlY2ggZHJpdmVyIG5vdCBsb2FkYWJsZSIKK21zZ3N0ciAi6Kqe6Z+z6amF5YuV54Sh5rOV6LyJ5YWlIgorCisjOiBQcm9ncmFtcy9jb25maWcuYzoyMzMxCittc2dpZCAic3BlZWNoIGRyaXZlciByZXN0YXJ0aW5nIgorbXNnc3RyICLoqp7pn7PpqYXli5Xph43mlrDllZ/li5UiCisKKyM6IFByb2dyYW1zL2NtZF9zcGVlY2guYzoxMDQKK21zZ2lkICJzcGVlY2ggZHJpdmVyIHN0b3BwZWQiCittc2dzdHIgIuiqnumfs+mpheWLleWBnOatoiIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBTUEVMTF9DVVJSX1dPUkQgY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjgyNworbXNnaWQgInNwZWxsIGN1cnJlbnQgd29yZCIKK21zZ3N0ciAi5ou85Ye655uu5YmN55qE5Zau5a2XIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIENMSVBfTkVXIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDoxMjE1Cittc2dpZCAic3RhcnQgbmV3IGNsaXBib2FyZCBhdCBjaGFyYWN0ZXIiCittc2dzdHIgIuS7peWtl+WFg+mWi+Wni+aWsOeahOWJquiyvOS4jSIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBUWFRTRUxfU1RBUlQgY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjE0MjEKK21zZ2lkICJzdGFydCB0ZXh0IHNlbGVjdGlvbiIKK21zZ3N0ciAi6ZaL5aeL5paH5a2X6YG45Y+WIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIEJSTF9TVEFSVCBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6OTE1Cittc2dpZCAic3RhcnQgdGhlIGJyYWlsbGUgZHJpdmVyIgorbXNnc3RyICLllZ/li5Xpu57lrZfpqYXli5UiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgU0NSX1NUQVJUIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDo5NDMKK21zZ2lkICJzdGFydCB0aGUgc2NyZWVuIGRyaXZlciIKK21zZ3N0ciAi5ZWf5YuV6J6i5bmV6amF5YuVIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIFNQS19TVEFSVCBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6OTI5Cittc2dpZCAic3RhcnQgdGhlIHNwZWVjaCBkcml2ZXIiCittc2dzdHIgIuWVn+WLleiqnumfs+mpheWLlSIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBNVVRFIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDo1MTQKK21zZ2lkICJzdG9wIHNwZWFraW5nIgorbXNnc3RyICLlgZzmraLmnJforoAiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgQlJMX1NUT1AgY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjkwOAorbXNnaWQgInN0b3AgdGhlIGJyYWlsbGUgZHJpdmVyIgorbXNnc3RyICLlgZzmraLpu57lrZfpqYXli5UiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgU0NSX1NUT1AgY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjkzNgorbXNnaWQgInN0b3AgdGhlIHNjcmVlbiBkcml2ZXIiCittc2dzdHIgIuWBnOatouieouW5lempheWLlSIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBTUEtfU1RPUCBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6OTIyCittc2dpZCAic3RvcCB0aGUgc3BlZWNoIGRyaXZlciIKK21zZ3N0ciAi5YGc5q2i6Kqe6Z+z6amF5YuVIgorCisjOiBQcm9ncmFtcy94YnJsYXBpLmM6NjU2Cittc2dpZCAic3RyYW5nZSBvbGQgZXJyb3IgaGFuZGxlclxuIgorbXNnc3RyICLlpYfmgKrnmoTogIHoiIrpjK/oqqTomZXnkIbnqIvluo9cbiIKKworIzogUHJvZ3JhbXMvYnJsdHR5LWNsZHIuYzozOQorbXNnaWQgInN0cmluZyIKK21zZ3N0ciAi5bym5qiCIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIENPTlRFWFQgY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjE0OTUKK21zZ2lkICJzd2l0Y2ggdG8gY29tbWFuZCBjb250ZXh0IgorbXNnc3RyICLliIfmj5vliLDlkb3ku6Tpl5zoga8iCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgU1dJVENIVlQgY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjEyNDcKK21zZ2lkICJzd2l0Y2ggdG8gc3BlY2lmaWMgdmlydHVhbCB0ZXJtaW5hbCIKK21zZ3N0ciAi5YiH5o+b5Yiw54m55a6a55qE6Jmb5pOs57WC56uv5qmfIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIEdVSV9BUkVBX05FWFQgY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjExMzMKK21zZ2lkICJzd2l0Y2ggdG8gdGhlIG5leHQgc2NyZWVuIGFyZWEiCittc2dzdHIgIuWIh+aPm+WIsOS4i+S4gOWAi+eVq+mdoiIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBTV0lUQ0hWVF9ORVhUIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDo1ODUKK21zZ2lkICJzd2l0Y2ggdG8gdGhlIG5leHQgdmlydHVhbCB0ZXJtaW5hbCIKK21zZ3N0ciAi5YiH5o+b5Yiw5LiL5LiA5YCL6Jmb5pOs57WC56uv5qmfIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIEdVSV9BUkVBX1BSRVYgY29tbWFuZC4KKyM6IFByb2dyYW1zL2NtZHMuYXV0by5oOjExMjYKK21zZ2lkICJzd2l0Y2ggdG8gdGhlIHByZXZpb3VzIHNjcmVlbiBhcmVhIgorbXNnc3RyICLliIfmj5vliLDkuIrkuIDlgIvnlavpnaIiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgU1dJVENIVlRfUFJFViBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6NTc4Cittc2dpZCAic3dpdGNoIHRvIHRoZSBwcmV2aW91cyB2aXJ0dWFsIHRlcm1pbmFsIgorbXNnc3RyICLliIfmj5vliLDkuIrkuIDlgIvomZvmk6zntYLnq6/mqZ8iCisKKyM6IFByb2dyYW1zL3BnbXByaXZzX2xpbnV4LmM6MTk5NAorbXNnaWQgInN3aXRjaGVkIHRvIHVucHJpdmlsZWdlZCB1c2VyIgorbXNnc3RyICLliIfmj5vliLDmnKrmjojmrIrkvb/nlKjogIUiCisKKyMuIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgS0VZX1RBQiBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6MTUxOQorbXNnaWQgInRhYiBrZXkiCittc2dzdHIgInRhYiDpjbUiCisKKyM6IFByb2dyYW1zL2NvbmZpZy5jOjMwMCBQcm9ncmFtcy9jb25maWcuYzozMDcKK21zZ2lkICJ0ZXh0IgorbXNnc3RyICLmloflrZciCisKKyM6IFByb2dyYW1zL21zZ3Rlc3QuYzo0NQorbXNnaWQgInRoZSBsb2NhbGUgZGlyZWN0b3J5IGNvbnRhaW5pbmcgdGhlIHRyYW5zbGF0aW9ucyIKK21zZ3N0ciAi5ZCr5pyJ57+76K2v55qE6Kqe6KiA55uu6YyEIgorCisjOiBQcm9ncmFtcy9tc2d0ZXN0LmM6NTIKK21zZ2lkICJ0aGUgbG9jYWxlIGluIHdoaWNoIHRvIGxvb2sgdXAgYSB0cmFuc2xhdGlvbiIKK21zZ3N0ciAi5p+l6Kmi57+76K2v55qE6Kqe6KiAIgorCisjOiBQcm9ncmFtcy9tc2d0ZXN0LmM6NTkKK21zZ2lkICJ0aGUgbmFtZSBvZiB0aGUgZG9tYWluIGNvbnRhaW5pbmcgdGhlIHRyYW5zbGF0aW9ucyIKK21zZ3N0ciAi5ZCr5pyJ57+76K2v55qE56iu6aGe5ZCN56ixIgorCisjLiB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIFBBU1NET1RTIGNvbW1hbmQuCisjOiBQcm9ncmFtcy9jbWRzLmF1dG8uaDoxNDYzCittc2dpZCAidHlwZSBicmFpbGxlIGRvdHMiCittc2dzdHIgIui8uOWFpem7nuWtl+m7niIKKworIy4geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBQQVNTQ0hBUiBjb21tYW5kLgorIzogUHJvZ3JhbXMvY21kcy5hdXRvLmg6MTQ1NAorbXNnaWQgInR5cGUgdW5pY29kZSBjaGFyYWN0ZXIiCittc2dzdHIgIui8uOWFpSB1bmljb2RlIOWtl+WFgyIKKworIzogUHJvZ3JhbXMveGJybGFwaS5jOjk3NAorbXNnaWQgInVuZXhwZWN0ZWQgYmxvY2sgdHlwZSIKK21zZ3N0ciAi5pyq6aCQ5pyf55qE6Zi75pOL6Ly45YWlIgorCisjOiBQcm9ncmFtcy94YnJsYXBpLmM6ODY0Cittc2dpZCAidW5leHBlY3RlZCBjbWQiCittc2dzdHIgIuS4jemgkOacn+eahOaMh+S7pCIKKworIzogUHJvZ3JhbXMvY21kX3F1ZXVlLmM6MTU3Cittc2dpZCAidW5oYW5kbGVkIGNvbW1hbmQiCittc2dzdHIgIueEoeazleaOjOaOp+eahOWRveS7pCIKKworIzogUHJvZ3JhbXMvY21kLmM6MTk4Cittc2dpZCAidW5rbm93biBjb21tYW5kIgorbXNnc3RyICLmnKrnn6XnmoTlkb3ku6QiCisKKyM6IFByb2dyYW1zL29wdGlvbnMuYzo4MjMKK21zZ2lkICJ1bmtub3duIGNvbmZpZ3VyYXRpb24gZGlyZWN0aXZlIgorbXNnc3RyICLmnKrnn6XnmoToqK3lrprmlZjov7AiCisKKyM6IFByb2dyYW1zL2NvbmZpZy5jOjczNQorbXNnaWQgInVua25vd24gbG9nIGxldmVsIG9yIGNhdGVnb3J5IgorbXNnc3RyICLmnKrnn6XnmoToqJjpjITnrYnntJrmiJbliIbpoZ4iCisKKyMuIGFuIHVua25vd24gb3B0aW9uIGhhcyBiZWVuIHNwZWNpZmllZAorIzogUHJvZ3JhbXMvb3B0aW9ucy5jOjU3MAorbXNnaWQgInVua25vd24gb3B0aW9uIgorbXNnc3RyICLmnKrnn6XnmoTpgbjlkJEiCisKKyM6IFByb2dyYW1zL3BhcnNlLmM6NTAxCittc2dpZCAidW5zdXBwb3J0ZWQgcGFyYW1ldGVyIgorbXNnc3RyICLkuI3mlK/mj7TnmoTlj4PmlbgiCisKKyM6IFByb2dyYW1zL3Nway5jOjE4MAorbXNnaWQgInZvbHVtZSIKK21zZ3N0ciAi6Z+z6YePIgorCisjLiBMUkdCCisjOiBQcm9ncmFtcy9jbWRfdXRpbHMuYzoxNTkKK21zZ2lkICJ3aGl0ZSIKK21zZ3N0ciAi55m9IgorCisjOiBQcm9ncmFtcy9wZ21wcml2c19saW51eC5jOjE4NTYKK21zZ2lkICJ3b3JraW5nIGRpcmVjdG9yeSBjaGFuZ2VkIgorbXNnc3RyICLlt6XkvZznm67pjITorormm7QiCisKKyM6IFByb2dyYW1zL21zZ3Rlc3QuYzo2NQorbXNnaWQgIndyaXRlIHRoZSB0cmFuc2xhdGlvbnMgdXNpbmcgVVRGLTgiCittc2dzdHIgIueUqCBVVEYtOCDmkrDlr6vnv7vora8iCisKKyM6IFByb2dyYW1zL3hicmxhcGkuYzo5MTEKKyMsIGMtZm9ybWF0Cittc2dpZCAieGJybGFwaTogQ291bGRuJ3QgZmluZCBhIGtleWNvZGUgdG8gcmVtYXAgZm9yIHNpbXVsYXRpbmcgdW5ib3VuZCBrZXlzeW0gJTA4WFxuIgorbXNnc3RyICJ4YnJsYXBpOiDnhKHms5Xmib7liLDmjInpjbXnorzkvobph43oqK3mqKHmk6zmnKrntoHlrprnmoTmjInpjbXnrKbomZ8gJTA4WFxuIgorCisjOiBQcm9ncmFtcy94YnJsYXBpLmM6ODk4CisjLCBjLWZvcm1hdAorbXNnaWQgInhicmxhcGk6IENvdWxkbid0IGZpbmQgbW9kaWZpZXJzIHRvIGFwcGx5IHRvICVkIGZvciBnZXR0aW5nIGtleXN5bSAlMDhYXG4iCittc2dzdHIgInhicmxhcGk6IOeEoeazleaJvuWIsOe1hOWQiOimi+S+huWll+eUqOWIsCAlZCDku6Xlj5blvpfmjInpjbXnrKbomZ8gJTA4WFxuIgorCisjOiBQcm9ncmFtcy94YnJsYXBpLmM6ODc0CisjLCBjLWZvcm1hdAorbXNnaWQgInhicmxhcGk6IENvdWxkbid0IHRyYW5zbGF0ZSBrZXlzeW0gJTA4WCB0byBrZXljb2RlLlxuIgorbXNnc3RyICJ4YnJsYXBpOiDnhKHms5Xnv7vora/mjInpjbXnrKbomZ8gJTA4WCDliLDmjInpjbXnorxcbiIKKworIzogUHJvZ3JhbXMveGJybGFwaS5jOjQxNQorIywgYy1mb3JtYXQKK21zZ2lkICJ4YnJsYXBpOiBYIEVycm9yICVkLCAlcyBvbiBkaXNwbGF5ICVzXG4iCittc2dzdHIgInhicmxhcGk6IFgg6Yyv6KqkICVkLCAlcyDlnKjpoa/npLogJXNcbiIKKworIzogUHJvZ3JhbXMveGJybGFwaS5jOjQ1NworIywgYy1mb3JtYXQKK21zZ2lkICJ4YnJsYXBpOiBiYWQgZm9ybWF0IGZvciBWVCBudW1iZXJcbiIKK21zZ3N0ciAieGJybGFwaTog5LiN6Imv55qEIFZUIOe3qOiZn+agvOW8j1xuIgorCisjOiBQcm9ncmFtcy94YnJsYXBpLmM6NDYwCisjLCBjLWZvcm1hdAorbXNnaWQgInhicmxhcGk6IGJhZCB0eXBlIGZvciBWVCBudW1iZXJcbiIKK21zZ3N0ciAieGJybGFwaTog5LiN6Imv55qEIFZUIOe3qOiZn+mhnuWei1xuIgorCisjOiBQcm9ncmFtcy94YnJsYXBpLmM6NDM5CisjLCBjLWZvcm1hdAorbXNnaWQgInhicmxhcGk6IGNhbm5vdCBnZXQgcm9vdCB3aW5kb3cgWEZyZWU4Nl9WVCBwcm9wZXJ0eVxuIgorbXNnc3RyICJ4YnJsYXBpOiDnhKHms5XnjbLlj5bot5/oppbnqpcgWEZyZWU4Nl9WVCDlhaflrrlcbiIKKworIzogUHJvZ3JhbXMveGJybGFwaS5jOjMxNgorIywgYy1mb3JtYXQKK21zZ2lkICJ4YnJsYXBpOiBjYW5ub3Qgd3JpdGUgd2luZG93IG5hbWUgJXNcbiIKK21zZ3N0ciAieGJybGFwaTog54Sh5rOV5a+r5YWl6KaW56qX5ZCN56ixICVzXG4iCisKKyM6IFByb2dyYW1zL3hicmxhcGkuYzo3NjQKKyMsIGMtZm9ybWF0Cittc2dpZCAieGJybGFwaTogZGlkbid0IGdyYWIgcGFyZW50IG9mICUjMDEwbHhcbiIKK21zZ3N0ciAieGJybGFwaTog54Sh5rOV5pO35Y+WICUjMDEwbHgg55qE5LiK5bGkXG4iCisKKyM6IFByb2dyYW1zL3hicmxhcGkuYzo3ODIKKyMsIGMtZm9ybWF0Cittc2dpZCAieGJybGFwaTogZGlkbid0IGdyYWIgd2luZG93ICUjMDEwbHhcbiIKK21zZ3N0ciAieGJybGFwaTog5rKS5pyJ5pO35Y+W6KaW56qXICUjMDEwbHhcbiIKKworIzogUHJvZ3JhbXMveGJybGFwaS5jOjU4MgorIywgYy1mb3JtYXQKK21zZ2lkICJ4YnJsYXBpOiBkaWRuJ3QgZ3JhYiB3aW5kb3cgJSMwMTBseCBidXQgZ290IGZvY3VzXG4iCittc2dzdHIgInhicmxhcGk6IOaykuacieaTt+WPluimlueqlyAlIzAxMGx4IOS4jemBjuW+l+WIsOeEpum7nlxuIgorCisjOiBQcm9ncmFtcy94YnJsYXBpLmM6NDQ4CisjLCBjLWZvcm1hdAorbXNnaWQgInhicmxhcGk6IG1vcmUgdGhhbiBvbmUgaXRlbSBmb3IgVlQgbnVtYmVyXG4iCittc2dzdHIgInhicmxhcGk6IOWkmuS6huS4gOWAiyBWVCDnt6jomZ9cbiIKKworIzogUHJvZ3JhbXMveGJybGFwaS5jOjQzMworIywgYy1mb3JtYXQKK21zZ2lkICJ4YnJsYXBpOiBubyBYRnJlZTg2X1ZUIGF0b21cbiIKK21zZ3N0ciAieGJybGFwaTog5rKS5pyJIFhGcmVlODZfVlQgYXRvbVxuIgorCisjOiBQcm9ncmFtcy94YnJsYXBpLmM6NDQ0CisjLCBjLWZvcm1hdAorbXNnaWQgInhicmxhcGk6IG5vIGl0ZW1zIGZvciBWVCBudW1iZXJcbiIKK21zZ3N0ciAieGJybGFwaTog5rKS5pyJIFZUIOe3qOiZn1xuIgorCisjOiBQcm9ncmFtcy94YnJsYXBpLmM6NDE2CisjLCBjLWZvcm1hdAorbXNnaWQgInhicmxhcGk6IHJlc291cmNlICUjMDEwbHgsIHJlcSAldToldVxuIgorbXNnc3RyICJ4YnJsYXBpOiDos4fmupAgJSMwMTBseCwgcmVxICV1OiV1XG4iCisKKyMuICJzaG91bGRuJ3QgaGFwcGVuIiBldmVudHMKKyM6IFByb2dyYW1zL3hicmxhcGkuYzo4MTEKKyMsIGMtZm9ybWF0Cittc2dpZCAieGJybGFwaTogdW5oYW5kbGVkIGV2ZW50IHR5cGU6ICVkXG4iCittc2dzdHIgInhicmxhcGk6IOeEoeazleiZleeQhueahOS6i+S7tuWei+aFizogJWRcbiIKKworIzogUHJvZ3JhbXMveGJybGFwaS5jOjc5MAorIywgYy1mb3JtYXQKK21zZ2lkICJ4YnJsYXBpOiB3aW5kb3cgJSMwMTBseCBjaGFuZ2VkIHRvIE5VTEwgbmFtZVxuIgorbXNnc3RyICJ4YnJsYXBpOiDoppbnqpcgJSMwMTBseCDorormm7TngrrmspLmnInlkI3nqLFcbiIKKworIy4gTFJHCisjOiBQcm9ncmFtcy9jbWRfdXRpbHMuYzoxNTgKK21zZ2lkICJ5ZWxsb3ciCittc2dzdHIgIum7gyIKKworI34gbXNnaWQgIjYtRG90IENvbXB1dGVyIgorI34gbXNnc3RyICLlha3pu57pm7vohabpu57lrZciCisKKyN+IG1zZ2lkICI2LURvdCBDb250cmFjdGVkIgorI34gbXNnc3RyICLlha3pu57nuK7lr6vpu57lrZciCisKKyN+IG1zZ2lkICI4LURvdCBDb21wdXRlciIKKyN+IG1zZ3N0ciAi5YWr6bue6Zu76IWm6bue5a2XIgorCisjfiBtc2dpZCAiOC1Eb3QgQ29udHJhY3RlZCIKKyN+IG1zZ3N0ciAi5YWr6bue57iu5a+r6bue5a2XIgorCisjfiBtc2dpZCAiQWxwaGFiZXRpYyBCcmFpbGxlIFdpbmRvdyBDb29yZGluYXRlcyIKKyN+IG1zZ3N0ciAi5a2X5q+N6bue5a2X6KaW56qX5bqn5qiZIgorCisjfiBtc2dpZCAiQWxwaGFiZXRpYyBTY3JlZW4gQ3Vyc29yIENvb3JkaW5hdGVzIgorI34gbXNnc3RyICLlrZfmr43muLjmqJnkvY3nva4iCisKKyN+IG1zZ2lkICJBbHRvIFNheCIKKyN+IG1zZ3N0ciAi5Lit6Z+z6Jap5YWL5pav6aKoIgorCisjfiBtc2dpZCAiQXByaWwiCisjfiBtc2dzdHIgIuWbm+aciCIKKworI34gbXNnaWQgIkF0dHJpYnV0ZXMgSW52aXNpYmxlIFRpbWUiCisjfiBtc2dzdHIgIuWxrOaAp+maseiXj+aZgumWkyIKKworI34gbXNnaWQgIkF0dHJpYnV0ZXMgVmlzaWJsZSBUaW1lIgorI34gbXNnc3RyICLlsazmgKfpoa/npLrmmYLplpMiCisKKyN+IG1zZ2lkICJBdWd1c3QiCisjfiBtc2dzdHIgIuWFq+aciCIKKworI34gbXNnaWQgIkJhcml0b25lIFNheCIKKyN+IG1zZ3N0ciAi5L2O6Z+z6Jap5YWL5pav6aKoIgorCisjfiBtc2dpZCAiQnJhaWxsZSBXaW5kb3cgQ29sdW1uIgorI34gbXNnc3RyICLpu57lrZfoppbnqpfmrITkvY0iCisKKyN+IG1zZ2lkICJCcmFpbGxlIFdpbmRvdyBDb29yZGluYXRlcyIKKyN+IG1zZ3N0ciAi6bue5a2X6KaW56qX5bqn5qiZIgorCisjfiBtc2dpZCAiQnJhaWxsZSBXaW5kb3cgUm93IgorI34gbXNnc3RyICLpu57lrZfoppbnqpfooYwiCisKKyN+IG1zZ2lkICJDYXBpdGFscyBJbnZpc2libGUgVGltZSIKKyN+IG1zZ3N0ciAi5aSn5a+r6Zqx6JeP5pmC6ZaTIgorCisjfiBtc2dpZCAiQ2FwaXRhbHMgVmlzaWJsZSBUaW1lIgorI34gbXNnc3RyICLlpKflr6vpoa/npLrmmYLplpMiCisKKyN+IG1zZ2lkICJDbGF2aSIKKyN+IG1zZ3N0ciAi5aSn6Y2155C0IgorCisjfiBtc2dpZCAiRGVjZW1iZXIiCisjfiBtc2dzdHIgIuWNgeS6jOaciCIKKworI34gbXNnaWQgIkZlYnJ1YXJ5IgorI34gbXNnc3RyICLkuozmnIgiCisKKyN+IG1zZ2lkICJKYW51YXJ5IgorI34gbXNnc3RyICLkuIDmnIgiCisKKyN+IG1zZ2lkICJKdWx5IgorI34gbXNnc3RyICLkuIPmnIgiCisKKyN+IG1zZ2lkICJKdW5lIgorI34gbXNnc3RyICLlha3mnIgiCisKKyN+IG1zZ2lkICJNYXJjaCIKKyN+IG1zZ3N0ciAi5LiJ5pyIIgorCisjfiBtc2dpZCAiTWF5IgorI34gbXNnc3RyICLkupTltr0iCisKKyN+IG1zZ2lkICJOb3ZlbWJlciIKKyN+IG1zZ3N0ciAi5Y2B5LiA5pyIIgorCisjfiBtc2dpZCAiT2N0b2JlciIKKyN+IG1zZ3N0ciAi5Y2B5pyIIgorCisjfiBtc2dpZCAiUGF0aCB0byBkaXJlY3Rvcnkgd2hpY2ggY29udGFpbnMgbWVzc2FnZSB0cmFuc2xhdGlvbnMuIgorI34gbXNnc3RyICLljIXlkKvlj6/ljYfntJrmqpTmoYjnmoTnm67pjITot6/lvpEiCisKKyN+IG1zZ2lkICJTY3JlZW4gQ3Vyc29yIENvbHVtbiIKKyN+IG1zZ3N0ciAi6J6i5bmV5ri45qiZ5qyE5L2NIgorCisjfiBtc2dpZCAiU2NyZWVuIEN1cnNvciBDb29yZGluYXRlcyIKKyN+IG1zZ3N0ciAi6J6i5bmV5ri45qiZ5bqn5qiZIgorCisjfiBtc2dpZCAiU2NyZWVuIEN1cnNvciBJbnZpc2libGUgVGltZSIKKyN+IG1zZ3N0ciAi6J6i5bmV5ri45qiZ6Zqx6JeP5pmC6ZaTIgorCisjfiBtc2dpZCAiU2NyZWVuIEN1cnNvciBSb3ciCisjfiBtc2dzdHIgIuieouW5lea4uOaomeihjCIKKworI34gbXNnaWQgIlNjcmVlbiBDdXJzb3IgVmlzaWJsZSBUaW1lIgorI34gbXNnc3RyICLonqLluZXmuLjmqJnpoa/npLrmmYLplpMiCisKKyN+IG1zZ2lkICJTY3JlZW4gQ3Vyc29yIGFuZCBCcmFpbGxlIFdpbmRvdyBDb2x1bW4iCisjfiBtc2dzdHIgIuieouW5lea4uOaomeiIh+m7nuWtl+imlueql+ashOS9jSIKKworI34gbXNnaWQgIlNjcmVlbiBDdXJzb3IgYW5kIEJyYWlsbGUgV2luZG93IFJvdyIKKyN+IG1zZ3N0ciAi6J6i5bmV5ri45qiZ6IiH6bue5a2X6KaW56qX6KGMIgorCisjfiBtc2dpZCAiU2VwdGVtYmVyIgorI34gbXNnc3RyICLkuZ3mnIgiCisKKyN+IG1zZ2lkICJTb3ByYW5vIFNheCIKKyN+IG1zZ3N0ciAi6auY6Z+z6Jap5YWL5pav6aKoIgorCisjfiBtc2dpZCAiU3BlZWNoIEN1cnNvciBJbnZpc2libGUgVGltZSIKKyN+IG1zZ3N0ciAi6Kqe6Z+z5ri45qiZ6Zqx6JeP5pmC6ZaTIgorCisjfiBtc2dpZCAiU3BlZWNoIEN1cnNvciBWaXNpYmxlIFRpbWUiCisjfiBtc2dzdHIgIuiqnumfs+a4uOaomemhr+ekuuaZgumWkyIKKworI34gbXNnaWQgIlRlbm9yIFNheCIKKyN+IG1zZ3N0ciAi5Lit6Z+z6Jap5YWL5pav6aKoIgorCisjfiBtc2dpZCAiYmxpbmsiCisjfiBtc2dzdHIgIui3s+WLlSIKKworI34gbXNnaWQgImxpc3QgYWxsIG9mIHRoZSB0cmFuc2xhdGlvbnMgKHRoZSBkZWZhdWx0KSIKKyN+IG1zZ3N0ciAi5YiX5Ye65omA5pyJ57+76K2v77yI6aCQ6Kit77yJIgorCisjfiBtc2dpZCAicGVyY2VudGFnZSIKKyN+IG1zZ3N0ciAi55m+5YiG5q+UIgorCisjfiBtc2dpZCAic2Vjb25kIgorI34gbXNnaWRfcGx1cmFsICJzZWNvbmRzIgorI34gbXNnc3RyWzBdICLnp5IiCisjfiBtc2dzdHJbMV0gIuenkiIKKworI34gbXNnaWQgInNob3cgdGhlIG1lc3NhZ2UgY291bnQiCisjfiBtc2dzdHIgIumhr+ekuuioiuaBr+aVuOmHjyIKKworI34gbXNnaWQgInNob3cgdGhlIHRyYW5zbGF0aW9uIG1ldGFkYXRhIgorI34gbXNnc3RyICLpoa/npLrnv7vora/ljp/lp4vos4fmlpkiCisKKyN+IG1zZ2lkICI2LURvdCBDb21wdXRlciBCcmFpbGxlIgorI34gbXNnc3RyICLlha3pu57pm7vohabpu57lrZciCisKKyN+IG1zZ2lkICI4LURvdCBDb21wdXRlciBCcmFpbGxlIgorI34gbXNnc3RyICLlhavpu57pm7vohabpu57lrZciCisKKyN+IG1zZ2lkICJMaXRlcmFyeSBCcmFpbGxlIgorI34gbXNnc3RyICLmm7jpnaLpu57lrZciCisKKyN+IG1zZ2lkICJUZXh0IFN0eWxlIgorI34gbXNnc3RyICLmlofoh6rooYzlpKoiCisKKyN+IG1zZ2lkICJCdWcgUmVwb3J0cyIKKyN+IG1zZ3N0ciAi6Yyv6Kqk5aCx5ZGKIgorCisjfiBtc2dpZCAiQnJhaWxsZSBEaXNwbGF5IE9yaWVudGF0aW9uIgorI34gbXNnc3RyICLpu57lrZfpoa/npLrlmajlsI7lkJEiCisKKyN+IG1zZ2lkICJCcmFpbGxlIElucHV0IE1vZGUiCisjfiBtc2dzdHIgIum7nuWtl+i8uOWFpeaooeW8jyIKKworI34gbXNnaWQgIkJyYWlsbGUgS2V5Ym9hcmQgRW5hYmxlZCIKKyN+IG1zZ3N0ciAi6bue5a2X6Y2155uk5ZWf55SoIgorCisjfiBtc2dpZCAiTm9ybWFsIgorI34gbXNnc3RyICLmraPluLgiCisKKyN+IG1zZ2lkICJSb3RhdGVkIgorI34gbXNnc3RyICLlvqrnkrAiCisKKyN+IG1zZ2lkICLlkIjmiJDpioXnrqEgMiIKKyN+IG1zZ3N0ciAiU3ludGhCcmFzcyAyIgorCisjfiBtc2dpZCAi5bCP5o+Q55C0IgorI34gbXNnc3RyICLlsI/mj5DnkLQiCisKKyN+IG1zZ2lkICJDaGVjayBmb3IgdW5kZWZpbmVkIGNoYXJhY3RlcnMuIgorI34gbXNnc3RyICLmqqLmn6XmnKrlrprnvqnnmoTlrZflhYMiCisKKyN+IG1zZ2lkICJCbGlua2luZyBDdXJzb3IiCisjfiBtc2dzdHIgIua4uOaomei3s+WLlSIKKworI34gbXNnaWQgIkN1cnNvciBJbnZpc2libGUgVGltZSIKKyN+IG1zZ3N0ciAi5ri45qiZ6Zqx6JeP5pmC6ZaTIgorCisjfiBtc2dpZCAiQ3Vyc29yIFN0eWxlIgorI34gbXNnc3RyICLmuLjmqJnlvaLni4AiCisKKyN+IG1zZ2lkICJDdXJzb3IgVmlzaWJsZSBUaW1lIgorI34gbXNnc3RyICLmuLjmqJnpoa/npLrmmYLplpMiCisKKyN+IG1zZ2lkICJEaXJ2ZXJzIERpcmVjdG9yeSIKKyN+IG1zZ3N0ciAi6amF5YuV56iL5byP55uu6YyEIgorCisjfiBtc2dpZCAiU2hvdyBDdXJzb3IiCisjfiBtc2dzdHIgIumhr+ekuua4uOaomSIKKworI34gbXNnaWQgIlN0YXRlIERpcmVjdG9yeSIKKyN+IG1zZ3N0ciAi54uA5oWL55uu6YyEIgorCisjfiBtc2dpZCAiV2luZG93IEZvbGxvd3MgUG9pbnRlciIKKyN+IG1zZ3N0ciAi6KaW56qX6Lef6Zqo5oyH5qiZIgorCisjfiBtc2dpZCAiZHJhZyBjdXJzb3IiCisjfiBtc2dzdHIgIuaLluabs+a4uOaomSIKKworI34gbXNnaWQgImdvIHVwIHRvIGxhc3QgbGluZSBvZiBwcmV2aW91cyBwYXJhZ3JhcGgiCisjfiBtc2dzdHIgIui3s+mBk+S4iuS4gOauteacgOW+jOS4gOihjCIKKworI34gbXNnaWQgImxlZnQgbWFyZ2luIgorI34gbXNnc3RyICLlt6bpgornlYwiCisKKyN+IG1zZ2lkICJub3JtYWxpemVkIHBvc2l0aW9uIgorI34gbXNnc3RyICLmraPluLjljJbkvY3nva4iCisKKyN+IG1zZ2lkICJzZXQgY29udHJvbCBtb2RpZmllciBvZiBuZXh0IHR5cGVkIGNoYXJhY3RlciBvciBlbXVsYXRlZCBrZXkgb24vb2ZmIgorI34gbXNnc3RyICLoqK3lrprngrrovLjlhaXlrZflhYPlrrYgY29udHJvbCDmiJbmqKHmk6zpjbXnm6Tplovpl5wiCisKKyN+IG1zZ2lkICJzZXQgY3Vyc29yIHRyYWNraW5nIG9uL29mZiIKKyN+IG1zZ3N0ciAi6Kit5a6a5ri45qiZ6L+96Lmk6ZaL6ZecIgorCisjfiBtc2dpZCAic2V0IG1ldGEgbW9kaWZpZXIgb2YgbmV4dCB0eXBlZCBjaGFyYWN0ZXIgb3IgZW11bGF0ZWQga2V5IG9uL29mZiIKKyN+IG1zZ3N0ciAi6Kit5a6a6Ly45YWl5a2X5YWD5a62IGFsdCDmiJbmqKHmk6zpjbXnm6Tplovpl5wiCisKKyN+IG1zZ2lkICJzZXQgc2hpZnQgbW9kaWZpZXIgb2YgbmV4dCB0eXBlZCBjaGFyYWN0ZXIgb3IgZW11bGF0ZWQga2V5IG9uL29mZiIKKyN+IG1zZ3N0ciAi6Kit5a6a6Ly45YWl5a2X5YWD5a62IHNoaWZ0IOaIluaooeaTrOmNteebpOmWi+mXnCIKKworI34gbXNnaWQgInNldCBzcGVlY2ggbG9jYXRpb24gdmlzaWJpbGl0eSBvbi9vZmYiCisjfiBtc2dzdHIgIuioreWumuiIh+WboOeCuuiHs+mhr+ekuumWi+mXnCIKKworI34gbXNnaWQgInNldCB1cHBlciBtb2RpZmllciBvZiBuZXh0IHR5cGVkIGNoYXJhY3RlciBvciBlbXVsYXRlZCBrZXkgb24vb2ZmIgorI34gbXNnc3RyICLlsIflsIfovLjlhaXlrZflhYPoqK3ngrrkuIrkvY3nrKbomZ/miJbmqKHmk6zpjbXnm6Tplovpl5wiCisKKyN+IG1zZ2lkICJzd2l0Y2ggdG8gdmlydHVhbCB0ZXJtaW5hbCIKKyN+IG1zZ3N0ciAi5YiH5o+b5Yiw6Jmb5pOs57WC56uv5qmfIgorCisjfiBtc2dpZCAiSGVscCBQYXRoIgorI34gbXNnc3RyICLmsYLliqnnrqHpgZMiCisKKyN+IG1zZ2lkICJlbXVsYXRlIHNwZWNpYWwga2V5IgorI34gbXNnc3RyICLmqKHmk6znibnmrorpjbUiCisKKyN+IG1zZ2lkICJCcmFpbGxlIHdpbmRvdyB1cGRhdGUgaW50ZXJ2YWwgWzRdLiIKKyN+IG1zZ3N0ciAi6bue5a2X6KaW56qX5pu05paw6ZaT6ZqUIFs0XS4iCisKKyN+IG1zZ2lkICJDb21tYW5kIExlYXJuaW5nIG1vZGUiCisjfiBtc2dzdHIgIuaMh+S7pOWtuOe/kuaooeW8jyIKKworI34gbXNnaWQgIkRldmljZSBzcGVjaWZpZXIgZm9yIHNvdW5kY2FyZCBkaWdpdGFsIGF1ZGlvLiIKKyN+IG1zZ3N0ciAi6Z+z5pWI5Y2h5pW45L2N6Z+z5pWI55qE6Kit5YKZ5oyH5a6a56K8IgorCisjfiBtc2dpZCAiRGV2aWNlIHNwZWNpZmllciBmb3IgdGhlIE11c2ljYWwgSW5zdHJ1bWVudCBEaWdpdGFsIEludGVyZmFjZS4iCisjfiBtc2dzdHIgIuaoguWZqOaVuOS9jeeVjOmdoueahOioreWCmeaMh+WumueivCIKKworI34gbXNnaWQgIkRpYWdub3N0aWMgbG9nZ2luZyBsZXZlbDogJXMsIG9yIG9uZSBvZiB7JXN9IgorI34gbXNnc3RyICLoqLrmlrfoqJjpjITnrYnntJo6ICVzLCDmiJYgeyVzfSDkuYvkuIAiCisKKyN+IG1zZ2lkICJMb2cgY3Vyc29yIHJvdXRpbmUiCisjfiBtc2dzdHIgIuiomOmMhOa4uOaomeWumuS9jSIKKworI34gbXNnaWQgIlBhdGggdG8gYXR0cmlidXRlcyB0cmFuc2xhdGlvbiB0YWJsZSBmaWxlLiIKKyN+IG1zZ3N0ciAi5bGs5oCn57+76K2v6KGo5qqU5qGI6Lev5b6RIgorCisjfiBtc2dpZCAiUGF0aCB0byBkaXJlY3RvcnkgZm9yIHRleHQgYW5kIGF0dHJpYnV0ZXMgdGFibGVzLiIKKyN+IG1zZ3N0ciAi5paH5a2X6IiH5bGs5oCn6KGo5omA5Zyo55uu6YyE6Lev5b6RIgorCisjfiBtc2dpZCAiUGF0aCB0byB0ZXh0IHRyYW5zbGF0aW9uIHRhYmxlIGZpbGUuIgorI34gbXNnc3RyICLmloflrZfnv7vora/mqpTot6/lvpEiCisKKyN+IG1zZ2lkICJmcmVlemUvdW5mcmVlemUgc2NyZWVuIGltYWdlIgorI34gbXNnc3RyICLlh43ntZAv6Kej5YuV6J6i5bmV5pig5YOPIgorCisjfiBtc2dpZCAiaW52YWxpZCByZXRhaW4gZG90cyBzZXR0aW5nIgorI34gbXNnc3RyICLnhKHmlYjnmoTntq3mjIHpu57oqK3lrpoiCisKKyN+IG1zZ2lkICJpbnZhbGlkIHVwZGF0ZSBpbnRlcnZhbCIKKyN+IG1zZ3N0ciAi54Sh5pWI55qE5pu05paw6ZaT6ZqUIgorCisjfiBtc2dpZCAibGV2ZWwiCisjfiBtc2dzdHIgIuetiee0miIKKworI34gbXNnaWQgIm9wZXJhbmQgbm90IHN1cHBsaWVkIGZvciBjb25maWd1cmF0aW9uIGRpcmVjdGl2ZSIKKyN+IG1zZ3N0ciAi6Kit5a6a5pWY6L+w5pyq5o+Q5L6b6YGL566X5ZOhIgorCisjfiBtc2dpZCAicHV0IHJhbmRvbSBwYXNzd29yZCBpbnRvIGNsaXBib2FyZCIKKyN+IG1zZ3N0ciAi572u5pS+6Zqo5qmf5a+G56K85Yiw5Ymq6LK85LiNIgorCisjfiBtc2dpZCAic2V0IHNoaWZ0IG1vZGlmaWVyIG5leHQgY2hhcmFjdGVyIG9yIGVtdWxhdGUga2V5IG9uL29mZiIKKyN+IG1zZ3N0ciAi6Kit5a6a6Ly45YWl5a2X5YWD5o+b5L2N5oiW5qih5pOs6Y2155uk6ZaL6ZecIgorCisjfiBtc2dpZCAidG9vIG1hbnkgb3BlcmFuZHMgZm9yIGNvbmZpZ3VyYXRpb24gZGlyZWN0aXZlIgorI34gbXNnc3RyICLpgY7lpJrnmoToqK3lrprmlZjov7DpgYvnrpflk6EiCmRpZmYgLS1naXQgYS9QYXRjaGVzL3NjcmVlbi00LjAuMS5wYXRjaCBiL1BhdGNoZXMvc2NyZWVuLTQuMC4xLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI1N2NhZjIKLS0tIC9kZXYvbnVsbAorKysgYi9QYXRjaGVzL3NjcmVlbi00LjAuMS5wYXRjaApAQCAtMCwwICsxLDM3OSBAQAorLS0tIGNvbmZpZ3VyZS5pbi5vcmlnCTIwMDMtMDYtMDMgMDc6NTg6MjQuMDAwMDAwMDAwIC0wNDAwCisrKysgY29uZmlndXJlLmluCTIwMDYtMDctMjQgMDE6MjE6MjQuMDAwMDAwMDAwIC0wNDAwCitAQCAtMTE5MywxNyArMTE5MywxNyBAQAorICAgZXhpdCgwKTsgLyogbGliYyB2ZXJzaW9uIHdvcmtzIHByb3Blcmx5LiAgKi8KKyB9XSwgQUNfREVGSU5FKFVTRU1FTUNQWSkpCisgCistQUNfTVNHX0NIRUNLSU5HKGxvbmcgZmlsZSBuYW1lcykKKy0oZWNobyAxID4gL3RtcC9jb25mdGVzdDkwMTIzNDUpIDI+L2Rldi9udWxsCistKGVjaG8gMiA+IC90bXAvY29uZnRlc3Q5MDEyMzQ2KSAyPi9kZXYvbnVsbAorLXZhbD1gY2F0IC90bXAvY29uZnRlc3Q5MDEyMzQ1IDI+L2Rldi9udWxsYAorLWlmIHRlc3QgLWYgL3RtcC9jb25mdGVzdDkwMTIzNDUgJiYgdGVzdCAiJHZhbCIgPSAxOyB0aGVuCistQUNfTVNHX1JFU1VMVCh5ZXMpCistZWxzZQorLUFDX01TR19SRVNVTFQobm8pCistQUNfREVGSU5FKE5BTUVfTUFYLCAxNCkKKy1maQorLXJtIC1mIC90bXAvY29uZnRlc3QqCisrI0FDX01TR19DSEVDS0lORyhsb25nIGZpbGUgbmFtZXMpCisrIyhlY2hvIDEgPiAvdG1wL2NvbmZ0ZXN0OTAxMjM0NSkgMj4vZGV2L251bGwKKysjKGVjaG8gMiA+IC90bXAvY29uZnRlc3Q5MDEyMzQ2KSAyPi9kZXYvbnVsbAorKyN2YWw9YGNhdCAvdG1wL2NvbmZ0ZXN0OTAxMjM0NSAyPi9kZXYvbnVsbGAKKysjaWYgdGVzdCAtZiAvdG1wL2NvbmZ0ZXN0OTAxMjM0NSAmJiB0ZXN0ICIkdmFsIiA9IDE7IHRoZW4KKysjQUNfTVNHX1JFU1VMVCh5ZXMpCisrI2Vsc2UKKysjQUNfTVNHX1JFU1VMVChubykKKysjQUNfREVGSU5FKE5BTUVfTUFYLCAxNCkKKysjZmkKKysjcm0gLWYgL3RtcC9jb25mdGVzdCoKKyAKKyBBQ19NU0dfQ0hFQ0tJTkcoZm9yIHZzcHJpbnRmKQorIEFDX1RSWV9MSU5LKCxbdnNwcmludGYoMCwwLDApO10sIEFDX01TR19SRVNVTFQoeWVzKTtBQ19ERUZJTkUoVVNFVkFSQVJHUyksIEFDX01TR19SRVNVTFQobm8pKQorLS0tIE1ha2VmaWxlLmluLm9yaWcJMjAwMy0xMi0wNSAwODo1OTozOS4wMDAwMDAwMDAgLTA1MDAKKysrKyBNYWtlZmlsZS5pbgkyMDA2LTA3LTI0IDAxOjIyOjUxLjAwMDAwMDAwMCAtMDQwMAorQEAgLTQ2LDcgKzQ2LDEyIEBACisgIyAtRERVTVBTSEFET1cKKyAjCVdpdGggc2hhZG93LXB3IHNjcmVlbiB3b3VsZCBuZXZlciBkdW1wIGNvcmUuIFVzZSB0aGlzIG9wdGlvbiBpZgorICMJeW91IHN0aWxsIHdhbnQgdG8gaGF2ZSBhIGNvcmUuIFVzZSBvbmx5IGZvciBkZWJ1Z2dpbmcuCistT1BUSU9OUz0KKysjIC1ESVBDX0VYUE9SVF9JTUFHRQorKyMJQWxsb3dzIGFuIG90aGVyIHByb2dyYW0gdG8gZ2V0IHRoZSBzY3JlZW4gY29udGVudCB0aHJvdWdoIHNoYXJlZCBtZW0gCisrIwkgYW5kIGlwYy4gVGhpcyBpcyB1c2VkIGUuZy4gZm9yIGJyYWlsbGUgYW5kIHNwZWVjaCBzb2Z0d2FyZS4KKysKKytPUFRJT05TPS1ESVBDX0VYUE9SVF9JTUFHRQorKyNPUFRJT05TPQorICNPUFRJT05TPSAtRERFQlVHCisgCisgU0hFTEw9L2Jpbi9zaAorLS0tIGV4dGVybi5oLm9yaWcJMjAwMy0wOC0yMiAwODoyNzo1Ny4wMDAwMDAwMDAgLTA0MDAKKysrKyBleHRlcm4uaAkyMDA2LTA4LTA5IDExOjM1OjQyLjAwMDAwMDAwMCAtMDQwMAorQEAgLTEzOSw2ICsxMzksMTUgQEAKKyBleHRlcm4gdm9pZCAgRnJlZVBzZXVkb3dpbiBfX1AoKHN0cnVjdCB3aW4gKikpOworICNlbmRpZgorIGV4dGVybiB2b2lkICBud2luX2NvbXBvc2UgX19QKChzdHJ1Y3QgTmV3V2luZG93ICosIHN0cnVjdCBOZXdXaW5kb3cgKiwgc3RydWN0IE5ld1dpbmRvdyAqKSk7CisrCisrI2lmZGVmIElQQ19FWFBPUlRfSU1BR0UKKytleHRlcm4gdm9pZCBTZXRXaW5JbWFnZSBfX1AoKGNvbnN0IGNoYXIgKiwgdW5zaWduZWQgY2hhciAqKSk7CisrZXh0ZXJuIHZvaWQgQ29weVdpbkltYWdlIF9fUCgoc3RydWN0IHdpbiAqLCB1bnNpZ25lZCBjaGFyICopKTsKKytleHRlcm4gaW50IElzSW5wdXRMYXllciBfX1AoKHN0cnVjdCBsYXllciAqKSk7CisrZXh0ZXJuIGludCBHZXRJbnB1dFBvc2l0aW9uIF9fUCgoc3RydWN0IGxheWVyICopKTsKKytleHRlcm4gdm9pZCBDb3B5SW5wdXRMaW5lIF9fUCgoc3RydWN0IGxheWVyICosIGNoYXIgKiwgaW50KSk7CisrI2VuZGlmIC8qIElQQ19FWFBPUlRfSU1BR0UgKi8KKysKKyBleHRlcm4gaW50ICAgRG9TdGFydExvZyBfX1AoKHN0cnVjdCB3aW4gKiwgY2hhciAqLCBpbnQpKTsKKyBleHRlcm4gaW50ICAgUmVsZWFzZUF1dG9Xcml0ZWxvY2sgX19QKChzdHJ1Y3QgZGlzcGxheSAqLCBzdHJ1Y3Qgd2luICopKTsKKyBleHRlcm4gaW50ICAgT2J0YWluQXV0b1dyaXRlbG9jayBfX1AoKHN0cnVjdCBkaXNwbGF5ICosIHN0cnVjdCB3aW4gKikpOworLS0tIHNjcmVlbi5oLm9yaWcJMjAwMy0wOC0yMiAwODoyODo0My4wMDAwMDAwMDAgLTA0MDAKKysrKyBzY3JlZW4uaAkyMDA2LTA3LTI0IDAyOjA0OjA2LjAwMDAwMDAwMCAtMDQwMAorQEAgLTI4OCw2ICsyODgsMTAgQEAKKyAgIGludCBzeW07CS8qIHN5bWJvbCBkZWZpbmVkIGluIHR0eWRldi5oICovCisgfTsKKyAKKysjaWZkZWYgSVBDX0VYUE9SVF9JTUFHRQorK2V4dGVybiB1bnNpZ25lZCBjaGFyICpzaG07CQkgIC8qIHBvaW50ZXIgdG8gc2hhcmVkIG1lbW9yeSBzZWdtZW50ICovCisrI2VuZGlmCisrCisgLyoKKyAgKiB3aW5kb3dsaXN0IG9yZGVycworICAqLworLS0tIHNjcmVlbi5jLm9yaWcJMjAwMy0wOS0wOCAxMDoyNjo0MS4wMDAwMDAwMDAgLTA0MDAKKysrKyBzY3JlZW4uYwkyMDA2LTA3LTI1IDEwOjU1OjI0LjAwMDAwMDAwMCAtMDQwMAorQEAgLTcxLDYgKzcxLDE0IEBACisgI2lmIChkZWZpbmVkKEFVWCkgfHwgZGVmaW5lZChfQVVYX1NPVVJDRSkpICYmIGRlZmluZWQoUE9TSVgpCisgIyBpbmNsdWRlIDxjb21wYXQuaD4KKyAjZW5kaWYKKysKKysjaWZkZWYgSVBDX0VYUE9SVF9JTUFHRQorKyMgaW5jbHVkZSA8c3lzL2lwYy5oPgorKyMgaW5jbHVkZSA8c3lzL3NobS5oPgorKyNlbmRpZgorKworKworKworICNpZiBkZWZpbmVkKFVTRV9MT0NBTEUpIHx8IGRlZmluZWQoRU5DT0RJTkdTKQorICMgaW5jbHVkZSA8bG9jYWxlLmg+CisgI2VuZGlmCitAQCAtNzgsNiArODYsMTEgQEAKKyAjIGluY2x1ZGUgPGxhbmdpbmZvLmg+CisgI2VuZGlmCisgCisrI2lmZGVmIElQQ19FWFBPUlRfSU1BR0UKKysjIGluY2x1ZGUgPHN5cy9pcGMuaD4KKysjIGluY2x1ZGUgPHN5cy9zaG0uaD4KKysjZW5kaWYKKysKKyAjaW5jbHVkZSAic2NyZWVuLmgiCisgI2lmZGVmIEhBVkVfQlJBSUxMRQorICMgaW5jbHVkZSAiYnJhaWxsZS5oIgorQEAgLTIzNCw2ICsyNDcsMTIgQEAKKyAKKyAKKyAKKysKKysjaWZkZWYgSVBDX0VYUE9SVF9JTUFHRQorK3Vuc2lnbmVkIGNoYXIgKnNobTsgICAgICAgICAgICAgIC8qIHBvaW50ZXIgdG8gc2hhcmVkIG1lbW9yeSBzZWdtZW50ICovCisrI2VuZGlmCisrCisrCisgLyoKKyAgKiBEbyB0aGlzIGxhc3QKKyAgKi8KK0BAIC00NjEsNiArNDgwLDQwIEBACisgICB6bW9kZW1fcmVjdmNtZCA9IFNhdmVTdHIoIiEhISByeiAtdnYgLWIgLUUiKTsKKyAjZW5kaWYKKyAKKysjaWZkZWYgSVBDX0VYUE9SVF9JTUFHRQorKyAgeworKyAgICBjb25zdCBjaGFyICpwYXRoOworKyAgICBrZXlfdCBrZXk7CisrICAgIGludCBzaG1pZDsKKysKKysgICAgLyogYWxsb3cgZm9yIHRoZSBoZWFkZXIsIHRleHQsIGF0dHJpYnV0ZXMsIGFuZCBhdXhpbGlhcnkgZGF0YQorKyAgICAgKiAoYXNzdW1pbmcgbm8gc2NyZWVuIHdpbGwgYmUgYmlnZ2VyIHRoYW4gMTMyeDY2KQorKyAgICAgKi8KKysgICAgc2l6ZV90IHNpemUgPSAxODAwMDsgLyogICovCisrCisrICAgIHBhdGggPSBnZXRlbnYoIkhPTUUiKTsKKysgICAgaWYgKCFwYXRoIHx8ICEqcGF0aCkgcGF0aCA9ICIvIjsKKysgICAgaWYgKChrZXkgPSBmdG9rKHBhdGgsICdiJykpID09IC0xKSBrZXkgPSAwWEJBQ0QwNzJGOworKworKyAgICBzaG1pZCA9IHNobWdldCgga2V5LCBzaXplLCBJUENfQ1JFQVQgfCBTX0lSV1hVICk7CisrICAgIGlmKCBzaG1pZCA8IDAgKQorKyAgICAgIHsKKysgICAgICAgIFBhbmljKCBlcnJubywgInNobWdldCIgKTsKKysgICAgICAgIC8qIE5PVFJFQUNIRUQgKi8KKysgICAgICB9CisrCisrICAgIHNobSA9IHNobWF0KCBzaG1pZCwgMCwgMCk7CisrICAgIGlmICggc2htID09ICh2b2lkKiktMSApCisrICAgICAgeworKyAgICAgICAgUGFuaWMoIGVycm5vLCAic2htYXQiICk7CisrICAgICAgICAvKiBOT1RSRUFDSEVEICovCisrICAgICAgfQorKworKyAgICAvKiBwdXQgdmFsaWQgZGF0YSBpbnRvIHRoZSBpbWFnZSAqLworKyAgICBTZXRXaW5JbWFnZSggInNjcmVlbiBpcyBpbml0aWFsaXppbmcuLi4iLCBzaG0gKTsKKysgIH0KKysjZW5kaWYKKysKKyAjaWZkZWYgQ09QWV9QQVNURQorICAgQ29tcGlsZUtleXMoKGNoYXIgKikwLCAwLCBtYXJrX2tleV90YWIpOworICNlbmRpZgorLS0tIHNjaGVkLmMub3JpZwkyMDAzLTA5LTA4IDEwOjI2OjM2LjAwMDAwMDAwMCAtMDQwMAorKysrIHNjaGVkLmMJMjAwNi0wNy0yNCAwMTozMzozOS4wMDAwMDAwMDAgLTA0MDAKK0BAIC0xMTAsNiArMTEwLDEwIEBACisgICByZXR1cm4gbWluOworIH0KKyAKKysjaWZkZWYgSVBDX0VYUE9SVF9JTUFHRQorKyBleHRlcm4gc3RydWN0IHdpbiAqd2luZG93czsKKysjZW5kaWYKKysKKyB2b2lkCisgc2NoZWQoKQorIHsKK0BAIC0xMjEsNiArMTI1LDExIEBACisgCisgICBmb3IgKDs7KQorICAgICB7CisrI2lmZGVmIElQQ19FWFBPUlRfSU1BR0UKKysgICAgICAvKiBleHBvcnQgaW1hZ2UgZnJvbSBsYXN0IHVzZWQgd2luZG93IHdoaWNoIGlzIG9uIHRvcCBvZiB0aGUgbGlzdCAqLworKyAgICAgIENvcHlXaW5JbWFnZSggd2luZG93cywgc2htICk7CisrI2VuZGlmCisrCisgICAgICAgaWYgKGNhbGN0aW1lb3V0KQorIAl0aW1lb3V0ZXYgPSBjYWxjdGltbygpOworICAgICAgIGlmICh0aW1lb3V0ZXYpCistLS0gaW5wdXQuYy5vcmlnCTIwMDYtMDgtMDkgMTA6NDA6MTAuMDAwMDAwMDAwIC0wNDAwCisrKysgaW5wdXQuYwkyMDA2LTA4LTA5IDExOjQyOjM5LjAwMDAwMDAwMCAtMDQwMAorQEAgLTQwMCwzICs0MDAsNDkgQEAKKyAgIHJldHVybiAwOworIH0KKyAKKysjaWZkZWYgSVBDX0VYUE9SVF9JTUFHRQorK2ludAorK0lzSW5wdXRMYXllcihsKQorK3N0cnVjdCBsYXllciAqbDsKKyt7CisrICByZXR1cm4gbC0+bF9sYXlmbiA9PSAmSW5wTGY7CisrfQorKworK2ludAorK0dldElucHV0UG9zaXRpb24obCkKKytzdHJ1Y3QgbGF5ZXIgKmw7CisreworKyAgc3RydWN0IGlucGRhdGEgKmlucGRhdGEgPSAoc3RydWN0IGlucGRhdGEgKilsLT5sX2RhdGE7CisrICByZXR1cm4gaW5wZGF0YS0+aW5wc3RyaW5nbGVuICsgaW5wZGF0YS0+aW5wLnBvczsKKyt9CisrCisrdm9pZAorK0NvcHlJbnB1dExpbmUobCwgZGVzdCwgd2lkdGgpCisrc3RydWN0IGxheWVyICpsOworK2NoYXIgKmRlc3Q7CisraW50IHdpZHRoOworK3sKKysgIHN0cnVjdCBpbnBkYXRhICppbnBkYXRhID0gKHN0cnVjdCBpbnBkYXRhICopbC0+bF9kYXRhOworKyAgY2hhciAqc3JjOworKyAgaW50IGxlbjsKKysKKysgIGZvcgorKyAgKCAKKysgICAgc3JjID0gaW5wZGF0YS0+aW5wc3RyaW5nLCBsZW4gPSBpbnBkYXRhLT5pbnBzdHJpbmdsZW47CisrICAgIHdpZHRoICYmIGxlbjsKKysgICAgKmRlc3QrKyA9ICpzcmMrKywgbGVuLS0sIHdpZHRoLS0KKysgICk7CisrCisrICBpZiggIShpbnBkYXRhLT5pbnBtb2RlICYgSU5QX05PRUNITykgKQorKyAgICB7CisrICAgICAgZm9yCisrICAgICAgKCAKKysgICAgICAgIHNyYyA9IGlucGRhdGEtPmlucC5idWYsIGxlbiA9IGlucGRhdGEtPmlucC5sZW47CisrICAgICAgICB3aWR0aCAmJiBsZW47CisrICAgICAgICAqZGVzdCsrID0gKnNyYysrLCBsZW4tLSwgd2lkdGgtLQorKyAgICAgICk7CisrICAgIH0KKysKKysgIHdoaWxlKCB3aWR0aCApICpkZXN0KysgPSAnICcsIHdpZHRoLS07CisrfQorKyNlbmRpZgkvKiBJUENfRVhQT1JUX0lNQUdFICovCistLS0gd2luZG93LmMub3JpZwkyMDAzLTEyLTA1IDA4OjQ1OjQxLjAwMDAwMDAwMCAtMDUwMAorKysrIHdpbmRvdy5jCTIwMDYtMDgtMDkgMTE6MzQ6MjAuMDAwMDAwMDAwIC0wNDAwCitAQCAtMTk5Myw2ICsxOTkzLDEzOCBAQAorICAgICB9CisgfQorIAorKworKyNpZmRlZiBJUENfRVhQT1JUX0lNQUdFCisrCisrdm9pZAorK1NldFdpbkltYWdlKCBtc2csIGRlc3QgKQorK2NvbnN0IGNoYXIgKm1zZzsKKyt1bnNpZ25lZCBjaGFyICpkZXN0OworK3sKKysgIHVuc2lnbmVkIGNoYXIgKmQgPSBkZXN0OworKworKyAgKmQrKyA9IDgwOyAgIC8qIHNjcmVlbiB3aWR0aCAqLworKyAgKmQrKyA9IDE7ICAgIC8qIHNjcmVlbiBoZWlnaHQgKi8KKysgICpkKysgPSAwOyAgICAvKiBjdXJzb3IgY29sdW1uICovCisrICAqZCsrID0gMDsgICAgLyogY3Vyc29yIHJvdyAqLworKworKyAgeworKyAgICBzaXplX3QgY291bnQgPSBkZXN0WzBdICogZGVzdFsxXTsKKysKKysgICAgbWVtc2V0KCBkLCAnICcsIGNvdW50ICk7CisrICAgIHN0cmNweSggZCwgbXNnICk7CisrICAgIGRbc3RybGVuKGQpXSA9ICcgJzsKKysgICAgZCArPSBjb3VudDsKKysKKysgICAgbWVtc2V0KCBkLCAwWDA3LCBjb3VudCApOworKyAgICBkICs9IGNvdW50OworKyAgfQorKworKyAgKmQrKyA9IDA7ICAgIC8qIHdpbmRvdyBudW1iZXIgKi8KKysgICpkKysgPSAwOyAgICAvKiBmbGFncyAqLworK30KKysKKysKKyt2b2lkCisrQ29weVdpbkltYWdlKCBwLCBkZXN0ICkKKytzdHJ1Y3Qgd2luICpwOworK3Vuc2lnbmVkIGNoYXIgKmRlc3Q7CisreworKyAgcmVnaXN0ZXIgdW5zaWduZWQgY2hhciAqcywgKmQgPSBkZXN0LCAqbTsKKysgIHJlZ2lzdGVyIGludCB4LCB5OworKyAgc3RydWN0IGRpc3BsYXkgKmRpc3BsYXkgPSBwLT53X2xhc3RkaXNwOworKyAgaW50IHN0ID0gKGRpc3BsYXkgJiYgRF9zdGF0dXMpID8gMSA6IDA7CisrICBpbnQgaW4gPSBJc0lucHV0TGF5ZXIocC0+d19zYXZlbGF5ZXIpID8gMSA6IDA7CisrCisrICBpZiggcCAmJiBwLT53X21saW5lcyApCisrICAgIHsKKysgICAgICAqZCsrID0gcC0+d193aWR0aDsgICAgICAgICAgICAgICAgICAgICAgICAvKiBzY3JlZW4gd2lkdGggKi8KKysgICAgICAqZCsrID0gcC0+d19oZWlnaHQgKyAoc3QgfCBpbik7ICAgICAgICAgICAgICAgICAgLyogc2NyZWVuIGhlaWdodCAqLworKyAgICAgICpkKysgPSBzdD8gRF9zdGF0dXNfbGVuOiAgICAgICAgICAgICAgICAgIC8qIGN1cnNvciBjb2x1bW4gKi8KKysgICAgICAgICAgICAgaW4/IEdldElucHV0UG9zaXRpb24ocC0+d19zYXZlbGF5ZXIpOgorKyAgICAgICAgICAgICAgICAgcC0+d194OworKyAgICAgICpkKysgPSAoc3QgfHwgaW4pPyBwLT53X2hlaWdodDogcC0+d195OyAgICAgICAvKiBjdXJzb3Igcm93ICovCisrCisrICAgICAgLyogY29weSB3aW5kb3cgaW1hZ2UgdG8gYnVmZmVyICovCisrICAgICAgZm9yKCB5ID0gMDsgeSA8IHAtPndfaGVpZ2h0OyB5KysgKQorKyAgICAgICAgeworKyAgICAgICAgICBzID0gcC0+d19tbGluZXNbeV0uaW1hZ2U7CisrICAgICAgICAgIHggPSBwLT53X3dpZHRoOworKyAgICAgICAgICBmb3IoIDsgeDsgKmQrKyA9ICpzKyssIHgtLSApOworKyAgICAgICAgfQorKworKyAgICAgIC8qIGNvcHkgc3RhdHVzIGxpbmUgdG8gYnVmZmVyICovCisrICAgICAgaWYoIHN0ICkKKysgICAgICAgIHsKKysgICAgICAgICAgcyA9IERfc3RhdHVzX2xhc3Rtc2c7CisrICAgICAgICAgIHggPSBwLT53X3dpZHRoOworKyAgICAgICAgICBmb3IoIDsgKnMgJiYgeDsgKmQrKyA9ICpzKyssIHgtLSApOworKyAgICAgICAgICBmb3IoIDsgeDsgKmQrKyA9ICcgJywgeC0tICk7CisrICAgICAgICB9CisrICAgICAgZWxzZSBpZiAoaW4pCisrICAgICAgICB7CisrICAgICAgICAgIENvcHlJbnB1dExpbmUocC0+d19zYXZlbGF5ZXIsIGQsIHAtPndfd2lkdGgpOworKyAgICAgICAgICBkICs9IHAtPndfd2lkdGg7CisrICAgICAgICB9CisrCisrICAgICAgLyogY29weSBhdHRyaWJ1dGVzIGZyb20gd2luZG93IGltYWdlIHRvIGJ1ZmZlciAqLworKyNpZmRlZiBDT0xPUgorKyAgICAgIGZvciggeSA9IDA7IHkgPCBwLT53X2hlaWdodDsgeSsrICkKKysgICAgICAgIHsKKysgICAgICAgICAgc3RydWN0IG1saW5lICptbCA9ICZwLT53X21saW5lc1t5XTsKKysgICAgICAgICAgeCA9IDA7CisrICAgICAgICAgIGZvciggOyB4PHAtPndfd2lkdGg7IHgrKyApCisrICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgdHJbXSA9CisrICAgICAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgICAwWDAsIDBYNCwgMFgyLCAwWDYsIDBYMSwgMFg1LCAwWDMsIDBYNywKKysgICAgICAgICAgICAgICAgICAwWDgsIDBYQywgMFhBLCAwWEUsIDBYOSwgMFhELCAwWEIsIDBYRgorKyAgICAgICAgICAgICAgICB9OworKworKyAgICAgICAgICAgICAgc3RydWN0IG1jaGFyIG1jOworKyAgICAgICAgICAgICAgaW50IGZnOworKyAgICAgICAgICAgICAgaW50IGJnOworKworKyAgICAgICAgICAgICAgY29weV9tbGluZTJtY2hhciggJm1jLCBtbCwgeCApOworKyAgICAgICAgICAgICAgZmcgPSByZW5kX2dldGZnKCZtYyk7CisrICAgICAgICAgICAgICBiZyA9IHJlbmRfZ2V0YmcoJm1jKTsKKysKKysgICAgICAgICAgICAgIGZnID0gZmc/IHRyW2NvbGkyZShmZykgJiAwWEZdOiAwWDc7CisrICAgICAgICAgICAgICBiZyA9IGJnPyB0cltjb2xpMmUoYmcpICYgMFhGXTogMFgwOworKyAgICAgICAgICAgICAgKmQrKyA9IGZnIHwgKGJnIDw8IDQpOworKyAgICAgICAgICAgIH0KKysgICAgICAgIH0KKysKKysgICAgICBpZiggc3QgfHwgaW4gKQorKyAgICAgICAgeworKyAgICAgICAgICBtZW1zZXQoZCwgKHN0ID8gMFg3MCA6IDBYMDcpLCBwLT53X3dpZHRoKTsKKysgICAgICAgICAgZCArPSBwLT53X3dpZHRoOworKyAgICAgICAgfQorKyNlbHNlIC8qIENPTE9SICovCisrICAgICAgeworKyAgICAgICAgaW50IGNvdW50ID0gZGVzdFswXSAqIGRlc3RbMV07CisrICAgICAgICBtZW1zZXQoZCwgMFgwNywgY291bnQpOworKyAgICAgICAgZCArPSBjb3VudDsKKysgICAgICB9CisrI2VuZGlmIC8qIENPTE9SICovCisrCisrICAgICAgKmQrKyA9IHAtPndfbnVtYmVyOyAgLyogd2luZG93IG51bWJlciAqLworKworKyAgICAgICpkID0gMDsgIC8qIGZsYWdzICovCisrICAgICAgaWYgKHAtPndfY3Vyc29ya2V5cykgKmQgfD0gMFgwMTsgLyogY3Vyc29yIGtleXMgYXJlIGluIGFwcGxpY2F0aW9uIG1vZGUgKi8KKysgICAgICBpZiAocC0+d19rZXlwYWQpICpkIHw9IDBYMDI7IC8qIGtleXBhZCBpcyBpbiBhcHBsaWNhdGlvbiBtb2RlICovCisrICAgICAgZCsrOworKyAgICB9CisrICBlbHNlCisrICAgIHsKKysgICAgICAvKiBubyB3aW5kb3cgcG9pbnRlciAqLworKyAgICAgIFNldFdpbkltYWdlKCAibm8gYWN0aXZlIHNjcmVuIiwgZGVzdCApOworKyAgICB9CisrfQorKworKyNlbmRpZgkvKiBJUENfRVhQT1JUX0lNQUdFICovCisrIAorKworICNpZmRlZiBaTU9ERU0KKyAKKyBzdGF0aWMgaW50CmRpZmYgLS1naXQgYS9QYXRjaGVzL3NjcmVlbi00LjAuMS50eHQgYi9QYXRjaGVzL3NjcmVlbi00LjAuMS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTM2OTZkNQotLS0gL2Rldi9udWxsCisrKyBiL1BhdGNoZXMvc2NyZWVuLTQuMC4xLnR4dApAQCAtMCwwICsxLDY2IEBACitJbnRyb2R1Y3Rpb24KKz09PT09PT09PT09PQorCitTaGFyZWQgbWVtb3J5IGlzIGFub3RoZXIgbWV0aG9kIGZvciBCUkxUVFkgdG8gZ2V0IHRoZSBjb250ZW50IG9mIHRoZSBzY3JlZW4uCitGb3IgdGhpcyBtZXRob2QgeW91IG5lZWQgdHdvIGNvbXBvbmVudHM6CisKKyogIFNvbWUgb3RoZXIgYXBwbGljYXRpb24gbmVlZHMgdG8gbWFpbnRhaW4gdGhlIHNoYXJlZCBzY3JlZW4gaW1hZ2UuIFRoaXMgY2FuIAorICAgYmUgZG9uZSB2aWEgdGhlIHNjcmVlbiBwcm9ncmFtIHdoZW4gYXVnbWVudGVkIGJ5IGEgQlJMVFRZLXN1cHBsaWVkIHBhdGNoLgorKiAgQlJMVFRZIG5lZWRzIHRvIGJlIGFibGUgdG8gdmlldyB0aGUgc2hhcmVkIHNjcmVlbiBpbWFnZS4gVGhpcyBpcyBkb25lIHZpYQorICAgaXRzIFNjcmVlbiBzY3JlZW4gZHJpdmVyLgorCitUaGUgb3JpZ2luYWwgcHVycG9zZSBvZiBzY3JlZW4gd2FzIHRvIHJ1biBkaWZmZXJlbnQgInNjcmVlbnMiIG9uIGEgc2luZ2xlCit0ZXJtaW5hbC4gSXQgYWxzbyBzdXBwb3J0cyBmZWF0dXJlcyBsaWtlIGNvcHktYW5kLXBhc3RlLCBhIHNjcm9sbGJhY2sgYnVmZmVyLAorZXRjLiBTY3JlZW4gc3VwcG9ydHMgbG90cyBvZiB0ZXJtaW5hbCB0eXBlcywgZXNwZWNpYWxseSBYVEVSTS4gVGhpcyBpcworaW1wb3J0YW50IGJlY2F1c2UgaXQgcnVucyB1bmRlciBYLVdpbmRvd3Mgd2hpY2ggaXMgcGFydCBvZiBtb3N0IHVuaXhlcy4KKworCitJbnN0cnVjdGlvbnMKKz09PT09PT09PT09PQorCisxKSBCdWlsZCBhbmQgaW5zdGFsbCBCUkxUVFk6CisKKyAgICAgIC4vY29uZmlndXJlCisgICAgICBtYWtlCisgICAgICBtYWtlIGluc3RhbGwKKyAgIAorICAgQlJMVFRZJ3MgU2NyZWVuIHNjcmVlbiBkcml2ZXIgd2lsbCBiZSBidWlsdCBieSBkZWZhdWx0LiBCZSBzdXJlIG5vdCB0byAKKyAgIGV4cGxpY2l0bHkgZXhjbHVkZSBpdCB2aWEsIGZvciBleGFtcGxlLCBhIGNvbmZpZ3VyZSBvcHRpb24gbGlrZToKKworICAgICAgLS13aXRoLXNjcmVlbi1kcml2ZXI9LXNjCisKKzIpIEdldCB0aGUgc291cmNlIGZvciBzY3JlZW4gZnJvbTogCisKKyAgICAgIGZ0cDovL2Z0cC51bmktZXJsYW5nZW4uZGUvcHViL3V0aWxpdGllcy9zY3JlZW4vc2NyZWVuLTQuMC4xLnRhci5negorCiszKSBVbnBhY2sgdGhlIHNvdXJjZToKKworICAgICAgdGFyIHh6ZiAvcGF0aC90by9zY3JlZW4tNC4wLjEudGFyLmd6CisKKzQpIENoYW5nZSB0byB0aGUgc291cmNlIHRyZWU6CisKKyAgICAgIGNkIHNjcmVlbi00LjAuMQorCis1KSBBcHBseSB0aGUgcGF0Y2g6IAorCisgICAgICBwYXRjaCAtcDAgPC9wYXRoL3RvL2JybHR0eS9QYXRjaGVzL3NjcmVlbi00LjAuMS5wYXRjaAorCis2KSBCdWlsZCBzY3JlZW46CisKKyAgICAgIC4vY29uZmlndXJlCisgICAgICBtYWtlCisgICAgICBtYWtlIGluc3RhbGwKKworNykgUnVuIHNjcmVlbiwgYW5kIHRoZW4gYnJsdHR5IChzcGVjaWZ5aW5nIGl0cyBTY3JlZW4gc2NyZWVuIGRyaXZlcik6IAorCisgICAgICBzY3JlZW4KKyAgICAgIGJybHR0eSAteCBzYworCisgICBUaGUgb25seSBvcmRlciBkZXBlbmRlbmN5IGlzIHRoYXQgc2NyZWVuIG11c3QgYmUgcnVuIGZpcnN0IHRoZSBmaXJzdCB0aW1lIGluCisgICBvcmRlciB0byBnZXQgdGhlIHNoYXJlZCBtZW1vcnkgc2VnbWVudCBjcmVhdGVkLiBBbHRob3VnaCBicmx0dHkgY2FuIGJlIHJ1bgorICAgZmlyc3QgZnJvbSB0aGVuIG9uLCB0aGUgc2hhcmVkIG1lbW9yeSBpbWFnZSB3aWxsLCBvZiBjb3Vyc2UsIGJlIHN0YWxlIHVudGlsCisgICBzY3JlZW4gaXMgc3RhcnRlZC4KKworCitCUkxUVFkncyBzY3JlZW4gcGF0Y2ggd2FzIG9yaWdpbmFsbHkgZGV2ZWxvcGVkIGJ5IFJ1ZG9sZiBXZWViZXIKKzxydWRvbGYud2VlYmVyQGdteC5kZT4uCmRpZmYgLS1naXQgYS9QYXRjaGVzL3NjcmVlbi00LjIuMS5wYXRjaCBiL1BhdGNoZXMvc2NyZWVuLTQuMi4xLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE5OWY5ZGEKLS0tIC9kZXYvbnVsbAorKysgYi9QYXRjaGVzL3NjcmVlbi00LjIuMS5wYXRjaApAQCAtMCwwICsxLDI5MCBAQAorLS0tIGV4dGVybi5oLm9yZwkyMDE0LTA5LTE1IDIxOjAyOjEyLjAwMDAwMDAwMCArMDIwMAorKysrIGV4dGVybi5oCTIwMTQtMDktMTUgMjE6MTE6MjcuMDAwMDAwMDAwICswMjAwCitAQCAtMzMsMTIgKzMzLDE5IEBACisgI2VuZGlmCisgCisgLyogc2NyZWVuLmMgKi8KKysKKytleHRlcm4gdm9pZCBTZXRXaW5JbWFnZSBfX1AoKGNvbnN0IGNoYXIgKiwgdW5zaWduZWQgY2hhciAqKSk7CisrZXh0ZXJuIHZvaWQgQ29weVdpbkltYWdlIF9fUCgoc3RydWN0IHdpbiAqLCB1bnNpZ25lZCBjaGFyICopKTsKKytleHRlcm4gaW50IElzSW5wdXRMYXllciBfX1AoKHN0cnVjdCBsYXllciAqKSk7CisrZXh0ZXJuIGludCBHZXRJbnB1dFBvc2l0aW9uIF9fUCgoc3RydWN0IGxheWVyICopKTsKKytleHRlcm4gdm9pZCBDb3B5SW5wdXRMaW5lIF9fUCgoc3RydWN0IGxheWVyICosIGNoYXIgKiwgaW50KSk7CisgZXh0ZXJuIGludCAgIG1haW4gX19QKChpbnQsIGNoYXIgKiopKTsKKyBleHRlcm4gc2lncmV0X3QgU2lnSHVwIF9fUChTSUdQUk9UT0FSRyk7CisgZXh0ZXJuIHZvaWQgIGVleGl0IF9fUCgoaW50KSkgX19hdHRyaWJ1dGVfXygoX19ub3JldHVybl9fKSk7CisgZXh0ZXJuIHZvaWQgIERldGFjaCBfX1AoKGludCkpOworIGV4dGVybiB2b2lkICBIYW5ndXAgX19QKCh2b2lkKSk7CisgZXh0ZXJuIHZvaWQgIEtpbGwgX19QKChpbnQsIGludCkpOworKworICNpZmRlZiBVU0VWQVJBUkdTCisgZXh0ZXJuIHZvaWQgIE1zZyBfX1AoKGludCwgY29uc3QgY2hhciAqLCAuLi4pKSBfX2F0dHJpYnV0ZV9fKChmb3JtYXQocHJpbnRmLCAyLCAzKSkpOworIGV4dGVybiB2b2lkICBQYW5pYyBfX1AoKGludCwgY29uc3QgY2hhciAqLCAuLi4pKSBfX2F0dHJpYnV0ZV9fKChmb3JtYXQocHJpbnRmLCAyLCAzKSkpIF9fYXR0cmlidXRlX18oKF9fbm9yZXR1cm5fXykpOworLS0tIHNjcmVlbi5jLm9yZwkyMDE0LTA5LTE1IDIxOjA0OjMzLjAwMDAwMDAwMCArMDIwMAorKysrIHNjcmVlbi5jCTIwMTQtMDktMTUgMjI6MjA6NTEuMDAwMDAwMDAwICswMjAwCitAQCAtNTIsNiArNTIsMTEgQEAKKyAjIGluY2x1ZGUgPHN5cy9pb2N0bC5oPgorICNlbmRpZgorIAorKy8qIGV4cG9ydCBpcGMgaW1hZ2UgKi8KKysjaW5jbHVkZSA8c3lzL2lwYy5oPgorKyNpbmNsdWRlIDxzeXMvc2htLmg+CisrdW5zaWduZWQgY2hhciAqc2htOworKy8qIGVuZCBleHBvcnQgaXBjIGltYWdlICovCisgI2lmbmRlZiBTSUdJTlQKKyAjIGluY2x1ZGUgPHNpZ25hbC5oPgorICNlbmRpZgorQEAgLTQ4OSw2ICs0OTQsNDAgQEAKKyAjaWZkZWYgSEFWRV9CUkFJTExFCisgICBJbml0QnJhaWxsZSgpOworICNlbmRpZgorKworKy8qIGV4cG9ydCBpcGMgaW1hZ2UgKi8KKysgIHsKKysgICAgY29uc3QgY2hhciAqcGF0aDsKKysgICAga2V5X3Qga2V5OworKyAgICBpbnQgc2htaWQ7CisrCisrICAgIC8qIGFsbG93IGZvciB0aGUgaGVhZGVyLCB0ZXh0LCBhdHRyaWJ1dGVzLCBhbmQgYXV4aWxpYXJ5IGRhdGEKKysgICAgICogKGFzc3VtaW5nIG5vIHNjcmVlbiB3aWxsIGJlIGJpZ2dlciB0aGFuIDEzMng2NikKKysgICAgICovCisrICAgIHNpemVfdCBzaXplID0gMTgwMDA7IC8qICAqLworKworKyAgICBwYXRoID0gZ2V0ZW52KCJIT01FIik7CisrICAgIGlmICghcGF0aCB8fCAhKnBhdGgpIHBhdGggPSAiLyI7CisrICAgIGlmICgoa2V5ID0gZnRvayhwYXRoLCAnYicpKSA9PSAtMSkga2V5ID0gMFhCQUNEMDcyRjsKKysKKysgICAgc2htaWQgPSBzaG1nZXQoIGtleSwgc2l6ZSwgSVBDX0NSRUFUIHwgU19JUldYVSApOworKyAgICBpZiggc2htaWQgPCAwICkKKysgICAgICB7CisrICAgICAgICBQYW5pYyggZXJybm8sICJzaG1nZXQiICk7CisrICAgICAgICAvKiBOT1RSRUFDSEVEICovCisrICAgICAgfQorKworKyAgICBzaG0gPSBzaG1hdCggc2htaWQsIDAsIDApOworKyAgICBpZiAoIHNobSA9PSAodm9pZCopLTEgKQorKyAgICAgIHsKKysgICAgICAgIFBhbmljKCBlcnJubywgInNobWF0IiApOworKyAgICAgICAgLyogTk9UUkVBQ0hFRCAqLworKyAgICAgIH0KKysKKysgICAgLyogcHV0IHZhbGlkIGRhdGEgaW50byB0aGUgaW1hZ2UgKi8KKysgICAgU2V0V2luSW1hZ2UoICJzY3JlZW4gaXMgaW5pdGlhbGl6aW5nLi4uIiwgc2htICk7CisrICB9CisrLyogZW5kIGV4cG9ydCBpcGMgaW1hZ2UgKi8KKyAjaWZkZWYgWk1PREVNCisgICB6bW9kZW1fc2VuZGNtZCA9IFNhdmVTdHIoIiEhISBzeiAtdnYgLWIgIik7CisgICB6bW9kZW1fcmVjdmNtZCA9IFNhdmVTdHIoIiEhISByeiAtdnYgLWIgLUUiKTsKKy0tLSBzY2hlZC5jLm9yZwkyMDE0LTA5LTE1IDIxOjA0OjA3LjAwMDAwMDAwMCArMDIwMAorKysrIHNjaGVkLmMJMjAxNC0wOS0xNSAyMjo1NDowNy4wMDAwMDAwMDAgKzAyMDAKK0BAIC0xMTUsNiArMTE1LDEyIEBACisgICByZXR1cm4gbWluOworIH0KKyAKKysvKiBleHBvcnQgaXBjIGltYWdlICovCisrI2luY2x1ZGUgPHN5cy9zaG0uaD4KKyt1bnNpZ25lZCBjaGFyICpzaG07CisrZXh0ZXJuIHN0cnVjdCB3aW4gKndpbmRvd3M7CisrLyogZW5kIGV4cG9ydCBpcGMgaW1hZ2UgKi8KKysKKyB2b2lkCisgc2NoZWQoKQorIHsKK0BAIC0xMjYsNiArMTMyLDkgQEAKKyAKKyAgIGZvciAoOzspCisgICAgIHsKKysvKiBleHBvcnQgaW1hZ2UgZnJvbSBsYXN0IHVzZWQgd2luZG93IHdoaWNoIGlzIG9uIHRvcCBvZiB0aGUgbGlzdCAqLworKyAgICAgIENvcHlXaW5JbWFnZSggd2luZG93cywgc2htICk7CisrLyogZW5kIGV4cG9ydCBpcGMgaW1hZ2UgKi8KKyAgICAgICBpZiAoY2FsY3RpbWVvdXQpCisgCXRpbWVvdXRldiA9IGNhbGN0aW1vKCk7CisgICAgICAgaWYgKHRpbWVvdXRldikKKy0tLSB3aW5kb3cuYy5vcmcJMjAxNC0wOS0xNSAyMTowNToxOC4wMDAwMDAwMDAgKzAyMDAKKysrKyB3aW5kb3cuYwkyMDE0LTA5LTE1IDIyOjMzOjE1LjAwMDAwMDAwMCArMDIwMAorQEAgLTIwODIsNiArMjA4MiwxMzQgQEAKKyAgICAgfQorIH0KKyAKKysvKiBleHBvcnQgaXBjIGltYWdlICovCisrdm9pZAorK1NldFdpbkltYWdlKCBtc2csIGRlc3QgKQorK2NvbnN0IGNoYXIgKm1zZzsKKyt1bnNpZ25lZCBjaGFyICpkZXN0OworK3sKKysgIHVuc2lnbmVkIGNoYXIgKmQgPSBkZXN0OworKworKyAgKmQrKyA9IDgwOyAgIC8qIHNjcmVlbiB3aWR0aCAqLworKyAgKmQrKyA9IDE7ICAgIC8qIHNjcmVlbiBoZWlnaHQgKi8KKysgICpkKysgPSAwOyAgICAvKiBjdXJzb3IgY29sdW1uICovCisrICAqZCsrID0gMDsgICAgLyogY3Vyc29yIHJvdyAqLworKworKyAgeworKyAgICBzaXplX3QgY291bnQgPSBkZXN0WzBdICogZGVzdFsxXTsKKysKKysgICAgbWVtc2V0KCBkLCAnICcsIGNvdW50ICk7CisrICAgIHN0cmNweSggZCwgbXNnICk7CisrICAgIGRbc3RybGVuKGQpXSA9ICcgJzsKKysgICAgZCArPSBjb3VudDsKKysKKysgICAgbWVtc2V0KCBkLCAwWDA3LCBjb3VudCApOworKyAgICBkICs9IGNvdW50OworKyAgfQorKworKyAgKmQrKyA9IDA7ICAgIC8qIHdpbmRvdyBudW1iZXIgKi8KKysgICpkKysgPSAwOyAgICAvKiBmbGFncyAqLworK30KKysKKysKKyt2b2lkCisrQ29weVdpbkltYWdlKCBwLCBkZXN0ICkKKytzdHJ1Y3Qgd2luICpwOworK3Vuc2lnbmVkIGNoYXIgKmRlc3Q7CisreworKyAgcmVnaXN0ZXIgdW5zaWduZWQgY2hhciAqcywgKmQgPSBkZXN0LCAqbTsKKysgIHJlZ2lzdGVyIGludCB4LCB5OworKyAgc3RydWN0IGRpc3BsYXkgKmRpc3BsYXkgPSBwLT53X2xhc3RkaXNwOworKyAgaW50IHN0ID0gKGRpc3BsYXkgJiYgRF9zdGF0dXMpID8gMSA6IDA7CisrICBpbnQgaW4gPSBJc0lucHV0TGF5ZXIocC0+d19zYXZlbGF5ZXIpID8gMSA6IDA7CisrCisrICBpZiggcCAmJiBwLT53X21saW5lcyApCisrICAgIHsKKysgICAgICAqZCsrID0gcC0+d193aWR0aDsgICAgICAgICAgICAgICAgICAgICAgICAvKiBzY3JlZW4gd2lkdGggKi8KKysgICAgICAqZCsrID0gcC0+d19oZWlnaHQgKyAoc3QgfCBpbik7ICAgICAgICAgICAgICAgICAgLyogc2NyZWVuIGhlaWdodCAqLworKyAgICAgICpkKysgPSBzdD8gRF9zdGF0dXNfbGVuOiAgICAgICAgICAgICAgICAgIC8qIGN1cnNvciBjb2x1bW4gKi8KKysgICAgICAgICAgICAgaW4/IEdldElucHV0UG9zaXRpb24ocC0+d19zYXZlbGF5ZXIpOgorKyAgICAgICAgICAgICAgICAgcC0+d194OworKyAgICAgICpkKysgPSAoc3QgfHwgaW4pPyBwLT53X2hlaWdodDogcC0+d195OyAgICAgICAvKiBjdXJzb3Igcm93ICovCisrCisrICAgICAgLyogY29weSB3aW5kb3cgaW1hZ2UgdG8gYnVmZmVyICovCisrICAgICAgZm9yKCB5ID0gMDsgeSA8IHAtPndfaGVpZ2h0OyB5KysgKQorKyAgICAgICAgeworKyAgICAgICAgICBzID0gcC0+d19tbGluZXNbeV0uaW1hZ2U7CisrICAgICAgICAgIHggPSBwLT53X3dpZHRoOworKyAgICAgICAgICBmb3IoIDsgeDsgKmQrKyA9ICpzKyssIHgtLSApOworKyAgICAgICAgfQorKworKyAgICAgIC8qIGNvcHkgc3RhdHVzIGxpbmUgdG8gYnVmZmVyICovCisrICAgICAgaWYoIHN0ICkKKysgICAgICAgIHsKKysgICAgICAgICAgcyA9IERfc3RhdHVzX2xhc3Rtc2c7CisrICAgICAgICAgIHggPSBwLT53X3dpZHRoOworKyAgICAgICAgICBmb3IoIDsgKnMgJiYgeDsgKmQrKyA9ICpzKyssIHgtLSApOworKyAgICAgICAgICBmb3IoIDsgeDsgKmQrKyA9ICcgJywgeC0tICk7CisrICAgICAgICB9CisrICAgICAgZWxzZSBpZiAoaW4pCisrICAgICAgICB7CisrICAgICAgICAgIENvcHlJbnB1dExpbmUocC0+d19zYXZlbGF5ZXIsIGQsIHAtPndfd2lkdGgpOworKyAgICAgICAgICBkICs9IHAtPndfd2lkdGg7CisrICAgICAgICB9CisrCisrICAgICAgLyogY29weSBhdHRyaWJ1dGVzIGZyb20gd2luZG93IGltYWdlIHRvIGJ1ZmZlciAqLworKyNpZmRlZiBDT0xPUgorKyAgICAgIGZvciggeSA9IDA7IHkgPCBwLT53X2hlaWdodDsgeSsrICkKKysgICAgICAgIHsKKysgICAgICAgICAgc3RydWN0IG1saW5lICptbCA9ICZwLT53X21saW5lc1t5XTsKKysgICAgICAgICAgeCA9IDA7CisrICAgICAgICAgIGZvciggOyB4PHAtPndfd2lkdGg7IHgrKyApCisrICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgdHJbXSA9CisrICAgICAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgICAwWDAsIDBYNCwgMFgyLCAwWDYsIDBYMSwgMFg1LCAwWDMsIDBYNywKKysgICAgICAgICAgICAgICAgICAwWDgsIDBYQywgMFhBLCAwWEUsIDBYOSwgMFhELCAwWEIsIDBYRgorKyAgICAgICAgICAgICAgICB9OworKworKyAgICAgICAgICAgICAgc3RydWN0IG1jaGFyIG1jOworKyAgICAgICAgICAgICAgaW50IGZnOworKyAgICAgICAgICAgICAgaW50IGJnOworKworKyAgICAgICAgICAgICAgY29weV9tbGluZTJtY2hhciggJm1jLCBtbCwgeCApOworKyAgICAgICAgICAgICAgZmcgPSByZW5kX2dldGZnKCZtYyk7CisrICAgICAgICAgICAgICBiZyA9IHJlbmRfZ2V0YmcoJm1jKTsKKysKKysgICAgICAgICAgICAgIGZnID0gZmc/IHRyW2NvbGkyZShmZykgJiAwWEZdOiAwWDc7CisrICAgICAgICAgICAgICBiZyA9IGJnPyB0cltjb2xpMmUoYmcpICYgMFhGXTogMFgwOworKyAgICAgICAgICAgICAgKmQrKyA9IGZnIHwgKGJnIDw8IDQpOworKyAgICAgICAgICAgIH0KKysgICAgICAgIH0KKysKKysgICAgICBpZiggc3QgfHwgaW4gKQorKyAgICAgICAgeworKyAgICAgICAgICBtZW1zZXQoZCwgKHN0ID8gMFg3MCA6IDBYMDcpLCBwLT53X3dpZHRoKTsKKysgICAgICAgICAgZCArPSBwLT53X3dpZHRoOworKyAgICAgICAgfQorKyNlbHNlIC8qIENPTE9SICovCisrICAgICAgeworKyAgICAgICAgaW50IGNvdW50ID0gZGVzdFswXSAqIGRlc3RbMV07CisrICAgICAgICBtZW1zZXQoZCwgMFgwNywgY291bnQpOworKyAgICAgICAgZCArPSBjb3VudDsKKysgICAgICB9CisrI2VuZGlmIC8qIENPTE9SICovCisrCisrICAgICAgKmQrKyA9IHAtPndfbnVtYmVyOyAgLyogd2luZG93IG51bWJlciAqLworKworKyAgICAgICpkID0gMDsgIC8qIGZsYWdzICovCisrICAgICAgaWYgKHAtPndfY3Vyc29ya2V5cykgKmQgfD0gMFgwMTsgLyogY3Vyc29yIGtleXMgYXJlIGluIGFwcGxpY2F0aW9uIG1vZGUgKi8KKysgICAgICBpZiAocC0+d19rZXlwYWQpICpkIHw9IDBYMDI7IC8qIGtleXBhZCBpcyBpbiBhcHBsaWNhdGlvbiBtb2RlICovCisrICAgICAgZCsrOworKyAgICB9CisrICBlbHNlCisrICAgIHsKKysgICAgICAvKiBubyB3aW5kb3cgcG9pbnRlciAqLworKyAgICAgIFNldFdpbkltYWdlKCAibm8gYWN0aXZlIHNjcmVuIiwgZGVzdCApOworKyAgICB9CisrfQorKy8qIGVuZCBleHBvcnQgaXBjIGltYWdlICovCisrCisgc3RhdGljIHZvaWQKKyB3aW5fZGVzdHJveWV2X2ZuKGV2LCBkYXRhKQorIHN0cnVjdCBldmVudCAqZXY7CistLS0gaW5wdXQuYy5vcmcJMjAxNC0wOS0xNSAyMTowMzowNi4wMDAwMDAwMDAgKzAyMDAKKysrKyBpbnB1dC5jCTIwMTQtMDktMTUgMjM6MDk6NDMuMDAwMDAwMDAwICswMjAwCitAQCAtNTI1LDQgKzUyNSw0OSBAQAorICAgICAgIHEgKz0gbDsKKyAgICAgfQorIH0KKysvKiBhZGQgZXhwb3J0IGlwYyBzaGFyZWQgaW1hZ2UgKi8KKytpbnQKKytJc0lucHV0TGF5ZXIobCkKKytzdHJ1Y3QgbGF5ZXIgKmw7CisreworKyAgcmV0dXJuIGwtPmxfbGF5Zm4gPT0gJklucExmOworK30KKysKKytpbnQKKytHZXRJbnB1dFBvc2l0aW9uKGwpCisrc3RydWN0IGxheWVyICpsOworK3sKKysgIHN0cnVjdCBpbnBkYXRhICppbnBkYXRhID0gKHN0cnVjdCBpbnBkYXRhICopbC0+bF9kYXRhOworKyAgcmV0dXJuIGlucGRhdGEtPmlucHN0cmluZ2xlbiArIGlucGRhdGEtPmlucC5wb3M7CisrfQorKworK3ZvaWQKKytDb3B5SW5wdXRMaW5lKGwsIGRlc3QsIHdpZHRoKQorK3N0cnVjdCBsYXllciAqbDsKKytjaGFyICpkZXN0OworK2ludCB3aWR0aDsKKyt7CisrICBzdHJ1Y3QgaW5wZGF0YSAqaW5wZGF0YSA9IChzdHJ1Y3QgaW5wZGF0YSAqKWwtPmxfZGF0YTsKKysgIGNoYXIgKnNyYzsKKysgIGludCBsZW47CisrCisrICBmb3IKKysgICggCisrICAgIHNyYyA9IGlucGRhdGEtPmlucHN0cmluZywgbGVuID0gaW5wZGF0YS0+aW5wc3RyaW5nbGVuOworKyAgICB3aWR0aCAmJiBsZW47CisrICAgICpkZXN0KysgPSAqc3JjKyssIGxlbi0tLCB3aWR0aC0tCisrICApOworKworKyAgaWYoICEoaW5wZGF0YS0+aW5wbW9kZSAmIElOUF9OT0VDSE8pICkKKysgICAgeworKyAgICAgIGZvcgorKyAgICAgICggCisrICAgICAgICBzcmMgPSBpbnBkYXRhLT5pbnAuYnVmLCBsZW4gPSBpbnBkYXRhLT5pbnAubGVuOworKyAgICAgICAgd2lkdGggJiYgbGVuOworKyAgICAgICAgKmRlc3QrKyA9ICpzcmMrKywgbGVuLS0sIHdpZHRoLS0KKysgICAgICApOworKyAgICB9CisrCisrICB3aGlsZSggd2lkdGggKSAqZGVzdCsrID0gJyAnLCB3aWR0aC0tOworK30KZGlmZiAtLWdpdCBhL1BhdGNoZXMvc2NyZWVuLXB0eS5wYXRjaCBiL1BhdGNoZXMvc2NyZWVuLXB0eS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMzU0MTJlCi0tLSAvZGV2L251bGwKKysrIGIvUGF0Y2hlcy9zY3JlZW4tcHR5LnBhdGNoCkBAIC0wLDAgKzEsMTEgQEAKKy0tLSAuL3B0eS5jLm9yaWcJMjAwMy0wOS0wOCAxNjoyNjoxOC4wMDAwMDAwMDAgKzAyMDAKKysrKyAuL3B0eS5jCTIwMDctMTAtMjggMTY6Mjc6NTYuMDAwMDAwMDAwICswMTAwCitAQCAtMzQsNyArMzQsNyBAQAorICNlbmRpZgorIAorIC8qIGZvciBzb2xhcmlzIDIuMSwgVW5peHdhcmUgKFNWUjQuMikgYW5kIHBvc3NpYmx5IG90aGVycyAqLworLSNpZmRlZiBIQVZFX1NWUjRfUFRZUworKyNpZiBkZWZpbmVkKEhBVkVfU1ZSNF9QVFlTKSAmJiAhZGVmaW5lZChfX0FQUExFX18pCisgIyBpbmNsdWRlIDxzeXMvc3Ryb3B0cy5oPgorICNlbmRpZgorIApkaWZmIC0tZ2l0IGEvUGF0Y2hlcy9zY3JlZW4tcHR5LnR4dCBiL1BhdGNoZXMvc2NyZWVuLXB0eS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDc3ZmM4MQotLS0gL2Rldi9udWxsCisrKyBiL1BhdGNoZXMvc2NyZWVuLXB0eS50eHQKQEAgLTAsMCArMSwxNyBAQAorSWYgeW91IGNvbXBpbGUgc2NyZWVuIG9uIE1hYyBPUyBYIGFuZCBlbmNvdW50ZXIgdGhlIGZvbGxvd2luZyBlcnJvcjoKKworICAgcHR5LmM6Mzg6MjY6IGVycm9yOiBzeXMvc3Ryb3B0cy5oOiBObyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5CisKK3RoZW4gdHJ5IGFwcGx5aW5nIHRoZSBpbmNsdWRlZCBzY3JlZW4gcHR5LmMgcGF0Y2ggZm9yIHRoaXMgcHJvYmxlbSBhcyBmb2xsb3dzOgorCisgICBjZCAvcGF0aC90by9zY3JlZW4tYnVpbGQtdHJlZQorICAgcGF0Y2ggLXAwIDwvcGF0aC90by9icmx0dHkvUGF0Y2hlcy9zY3JlZW4tcHR5LnBhdGNoCisKK1RoaXMgcGF0Y2ggd2FzIGRvd25sb2FkZWQgZnJvbSB0aGUgZm9sbG93aW5nIGxvY2F0aW9uOgorCisgICBodHRwczovL3RyYWMubWFjcG9ydHMub3JnL3Jhdy1hdHRhY2htZW50L3RpY2tldC8xMzAwOS9wYXRjaC1wdHkuYworCitJdCBpcyBkb2N1bWVudGVkIGFzIE1hY1BvcnRzIHRpY2tldCAxMzAwOSwgd2hpY2ggY2FuIGJlIHJlYWQgYXQgdGhlIGZvbGxvd2luZyAKK2xvY2F0aW9uOgorCisgICBodHRwczovL3RyYWMubWFjcG9ydHMub3JnL3RpY2tldC8xMzAwOQpkaWZmIC0tZ2l0IGEvUHJvZ3JhbXMvTWFrZWZpbGUuaW4gYi9Qcm9ncmFtcy9NYWtlZmlsZS5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYmY0Y2M0Ci0tLSAvZGV2L251bGwKKysrIGIvUHJvZ3JhbXMvTWFrZWZpbGUuaW4KQEAgLTAsMCArMSwxMzc1IEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisjICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorIworIyBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisjCisjIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisjCisjIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyMgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorIyBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyMKKyMgV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworIworIyBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworYWxsOiBhbGwtY29tbWFuZHMgYWxsLXRvb2xzICQoQUxMX0FQSSkgJChBTExfQVBJX0JJTkRJTkdTKQorCithbGwtY29tbWFuZHM6IGFsbC1icmx0dHkgYWxsLWJybHR0eS10cnR4dCBhbGwtYnJsdHR5LXR0YiBhbGwtYnJsdHR5LWN0YiBhbGwtYnJsdHR5LWF0YiBhbGwtYnJsdHR5LWt0YiBhbGwtYnJsdHR5LXR1bmUgYWxsLWJybHR0eS1tb3JzZSBhbGwtYnJsdHR5LWxzY21kcyBhbGwtYnJsdHR5LWhpZCAkKEFMTF9CUkxUVFlfUFRZKQorYWxsLWJybHR0eTogYnJsdHR5JFggfCAkKEJSQUlMTEVfRFJJVkVSUykgJChTUEVFQ0hfRFJJVkVSUykgJChTQ1JFRU5fRFJJVkVSUykKK2FsbC1icmx0dHktdHJ0eHQ6IGJybHR0eS10cnR4dCRYCithbGwtYnJsdHR5LXR0YjogYnJsdHR5LXR0YiRYCithbGwtYnJsdHR5LWN0YjogYnJsdHR5LWN0YiRYCithbGwtYnJsdHR5LWF0YjogYnJsdHR5LWF0YiRYCithbGwtYnJsdHR5LWt0YjogYnJsdHR5LWt0YiRYIHwgJChCUkFJTExFX0RSSVZFUlMpCithbGwtYnJsdHR5LXR1bmU6IGJybHR0eS10dW5lJFgKK2FsbC1icmx0dHktbW9yc2U6IGJybHR0eS1tb3JzZSRYCithbGwtYnJsdHR5LWxzY21kczogYnJsdHR5LWxzY21kcyRYCithbGwtYnJsdHR5LWhpZDogYnJsdHR5LWhpZCRYCithbGwtYnJsdHR5LXB0eTogYnJsdHR5LXB0eSRYCisKK2FsbC10b29sczogYWxsLWJybHR0eS1jbGRyIGFsbC1icmx0dHktbHNpbmMKK2FsbC1icmx0dHktY2xkcjogYnJsdHR5LWNsZHIkWAorYWxsLWJybHR0eS1sc2luYzogYnJsdHR5LWxzaW5jJFgKKworZXZlcnl0aGluZzogYWxsIGFsbC1icmx0ZXN0IGFsbC1zcGt0ZXN0IGFsbC1zY3J0ZXN0IGFsbC1jcmN0ZXN0IGFsbC1tc2d0ZXN0CithbGwtYnJsdGVzdDogYnJsdGVzdCRYIHwgJChCUkFJTExFX0RSSVZFUlMpCithbGwtc3BrdGVzdDogc3BrdGVzdCRYIHwgJChTUEVFQ0hfRFJJVkVSUykKK2FsbC1zY3J0ZXN0OiBzY3J0ZXN0JFggfCAkKFNDUkVFTl9EUklWRVJTKQorYWxsLWNyY3Rlc3Q6IGNyY3Rlc3QkWAorYWxsLW1zZ3Rlc3Q6IG1zZ3Rlc3QkWAorCithbGwtYXBpOiAkKEFMTF9YQlJMQVBJKSBhbGwtYnJsdHR5LWNsaXAgYWxsLWFwaXRlc3QgYnJsYXBpX2JybGRlZnMuYXV0by5oCithbGwteGJybGFwaTogeGJybGFwaSRYCithbGwtYnJsdHR5LWNsaXA6IGJybHR0eS1jbGlwJFgKK2FsbC1hcGl0ZXN0OiBhcGl0ZXN0JFgKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitSRVZJU0lPTl9IRUFERVIgPSByZXZpc2lvbl9pZGVudGlmaWVyLmF1dG8uaAorJChSRVZJU0lPTl9IRUFERVIpOgorCS0kKFNSQ19UT1ApZ2V0cmV2aWQgLXMgLWYgJEAgLWQgdW5rbm93biAkKFNSQ19UT1ApCisKK3JldmlzaW9uLiRPOgorCSQoQ0MpICQoTElCQ0ZMQUdTKSAtYyAkKFNSQ19ESVIpL3JldmlzaW9uLmMKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitwcm9ncmFtLiRPOgorCSQoQ0MpICQoTElCQ0ZMQUdTKSAtYyAkKFNSQ19ESVIpL3Byb2dyYW0uYworCiskKFBHTVBBVEhfT0JKRUNUKS4kTzoKKwkkKENDKSAkKExJQkNGTEFHUykgJChQR01QQVRIX0lOQ0xVREVTKSAtYyAkKFNSQ19ESVIpLyQoUEdNUEFUSF9PQkpFQ1QpLmMKKworJChQR01QUklWU19PQkpFQ1QpLiRPOgorCSQoQ0MpICQoTElCQ0ZMQUdTKSAkKFBHTVBSSVZTX0lOQ0xVREVTKSAtYyAkKFNSQ19ESVIpLyQoUEdNUFJJVlNfT0JKRUNUKS5jCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworJChTRVJWSUNFX09CSkVDVCkuJE86CisJJChDQykgJChMSUJDRkxBR1MpICQoU0VSVklDRV9JTkNMVURFUykgLWMgJChTUkNfRElSKS8kKFNFUlZJQ0VfT0JKRUNUKS5jCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworY21kbGluZS4kTzoKKwkkKENDKSAkKExJQkNGTEFHUykgLWMgJChTUkNfRElSKS9jbWRsaW5lLmMKKworJChQQVJBTVNfT0JKRUNUKS4kTzoKKwkkKENDKSAkKExJQkNGTEFHUykgJChQQVJBTVNfSU5DTFVERVMpIC1jICQoU1JDX0RJUikvJChQQVJBTVNfT0JKRUNUKS5jCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworJChEWU5MRF9PQkpFQ1QpLiRPOgorCSQoQ0MpICQoTElCQ0ZMQUdTKSAkKERZTkxEX0lOQ0xVREVTKSAtYyAkKFNSQ19ESVIpLyQoRFlOTERfT0JKRUNUKS5jCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworY2hhcnNldC4kTzoKKwkkKENDKSAkKExJQkNGTEFHUykgLWMgJChTUkNfRElSKS9jaGFyc2V0LmMKKworJChDSEFSU0VUX09CSkVDVCkuJE86CisJJChDQykgJChMSUJDRkxBR1MpICQoQ0hBUlNFVF9JTkNMVURFUykgLWMgJChTUkNfRElSKS8kKENIQVJTRVRfT0JKRUNUKS5jCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworaG9zdGNtZC4kTzoKKwkkKENDKSAkKExJQkNGTEFHUykgLWMgJChTUkNfRElSKS9ob3N0Y21kLmMKKworJChIT1NUQ01EX09CSkVDVCkuJE86CisJJChDQykgJChMSUJDRkxBR1MpICQoSE9TVENNRF9JTkNMVURFUykgLWMgJChTUkNfRElSKS8kKEhPU1RDTURfT0JKRUNUKS5jCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworbW50cHQuJE86CisJJChDQykgJChMSUJDRkxBR1MpIC1jICQoU1JDX0RJUikvbW50cHQuYworCiskKE1OVFBUX09CSkVDVCkuJE86CisJJChDQykgJChMSUJDRkxBR1MpICQoTU5UUFRfSU5DTFVERVMpIC1jICQoU1JDX0RJUikvJChNTlRQVF9PQkpFQ1QpLmMKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCiskKE1OVEZTX09CSkVDVCkuJE86CisJJChDQykgJChMSUJDRkxBR1MpICQoTU5URlNfSU5DTFVERVMpIC1jICQoU1JDX0RJUikvJChNTlRGU19PQkpFQ1QpLmMKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitrYmQuJE86CisJJChDQykgJChMSUJDRkxBR1MpIC1jICQoU1JDX0RJUikva2JkLmMKKworJChLQkRfT0JKRUNUKS4kTzoKKwkkKENDKSAkKExJQkNGTEFHUykgJChLQkRfSU5DTFVERVMpIC1jICQoU1JDX0RJUikvJChLQkRfT0JKRUNUKS5jCisKK2tiZF9rZXljb2Rlcy4kTzoKKwkkKENDKSAkKExJQkNGTEFHUykgLWMgJChTUkNfRElSKS9rYmRfa2V5Y29kZXMuYworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK2JlbGwuJE86CisJJChDQykgJChMSUJDRkxBR1MpIC1jICQoU1JDX0RJUikvYmVsbC5jCisKKyQoQkVMTF9PQkpFQ1QpLiRPOgorCSQoQ0MpICQoTElCQ0ZMQUdTKSAkKEJFTExfSU5DTFVERVMpIC1jICQoU1JDX0RJUikvJChCRUxMX09CSkVDVCkuYworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK2xlZHMuJE86CisJJChDQykgJChMSUJDRkxBR1MpIC1jICQoU1JDX0RJUikvbGVkcy5jCisKKyQoTEVEU19PQkpFQ1QpLiRPOgorCSQoQ0MpICQoTElCQ0ZMQUdTKSAkKExFRFNfSU5DTFVERVMpIC1jICQoU1JDX0RJUikvJChMRURTX09CSkVDVCkuYworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK2JlZXAuJE86CisJJChDQykgJChMSUJDRkxBR1MpIC1jICQoU1JDX0RJUikvYmVlcC5jCisKKyQoQkVFUF9PQkpFQ1QpLiRPOgorCSQoQ0MpICQoTElCQ0ZMQUdTKSAkKEJFRVBfSU5DTFVERVMpIC1jICQoU1JDX0RJUikvJChCRUVQX09CSkVDVCkuYworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK3BjbS4kTzoKKwkkKENDKSAkKExJQkNGTEFHUykgLWMgJChTUkNfRElSKS9wY20uYworCiskKFBDTV9PQkpFQ1QpLiRPOgorCSQoQ0MpICQoTElCQ0ZMQUdTKSAkKFBDTV9JTkNMVURFUykgLWMgJChTUkNfRElSKS8kKFBDTV9PQkpFQ1QpLmMKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCittaWRpLiRPOgorCSQoQ0MpICQoTElCQ0ZMQUdTKSAtYyAkKFNSQ19ESVIpL21pZGkuYworCiskKE1JRElfT0JKRUNUKS4kTzoKKwkkKENDKSAkKExJQkNGTEFHUykgJChNSURJX0lOQ0xVREVTKSAtYyAkKFNSQ19ESVIpLyQoTUlESV9PQkpFQ1QpLmMKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCiskKEZNX09CSkVDVCkuJE86CisJJChDQykgJChMSUJDRkxBR1MpICQoRk1fSU5DTFVERVMpIC1jICQoU1JDX0RJUikvJChGTV9PQkpFQ1QpLmMKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitzZXJpYWwuJE86CisJJChDQykgJChMSUJDRkxBR1MpIC1jICQoU1JDX0RJUikvc2VyaWFsLmMKKworJChTRVJJQUxfT0JKRUNUKS4kTzoKKwkkKENDKSAkKExJQkNGTEFHUykgJChTRVJJQUxfSU5DTFVERVMpIC1jICQoU1JDX0RJUikvJChTRVJJQUxfT0JKRUNUKS5jCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKwordXNiLiRPOgorCSQoQ0MpICQoTElCQ0ZMQUdTKSAtYyAkKFNSQ19ESVIpL3VzYi5jCisKK3VzYl9oaWQuJE86CisJJChDQykgJChMSUJDRkxBR1MpIC1jICQoU1JDX0RJUikvdXNiX2hpZC5jCisKK3VzYl9kZXZpY2VzLiRPOgorCSQoQ0MpICQoTElCQ0ZMQUdTKSAtYyAkKFNSQ19ESVIpL3VzYl9kZXZpY2VzLmMKKwordXNiX3NlcmlhbC4kTzoKKwkkKENDKSAkKExJQkNGTEFHUykgLWMgJChTUkNfRElSKS91c2Jfc2VyaWFsLmMKKwordXNiX2FkYXB0ZXJzLiRPOgorCSQoQ0MpICQoTElCQ0ZMQUdTKSAtYyAkKFNSQ19ESVIpL3VzYl9hZGFwdGVycy5jCisKK3VzYl9jZGNfYWNtLiRPOgorCSQoQ0MpICQoTElCQ0ZMQUdTKSAtYyAkKFNSQ19ESVIpL3VzYl9jZGNfYWNtLmMKKwordXNiX2JlbGtpbi4kTzoKKwkkKENDKSAkKExJQkNGTEFHUykgLWMgJChTUkNfRElSKS91c2JfYmVsa2luLmMKKwordXNiX2NoMzQxLiRPOgorCSQoQ0MpICQoTElCQ0ZMQUdTKSAtYyAkKFNSQ19ESVIpL3VzYl9jaDM0MS5jCisKK3VzYl9jcDIxMDEuJE86CisJJChDQykgJChMSUJDRkxBR1MpIC1jICQoU1JDX0RJUikvdXNiX2NwMjEwMS5jCisKK3VzYl9jcDIxMTAuJE86CisJJChDQykgJChMSUJDRkxBR1MpIC1jICQoU1JDX0RJUikvdXNiX2NwMjExMC5jCisKK3VzYl9mdGRpLiRPOgorCSQoQ0MpICQoTElCQ0ZMQUdTKSAtYyAkKFNSQ19ESVIpL3VzYl9mdGRpLmMKKworJChVU0JfT0JKRUNUKS4kTzoKKwkkKENDKSAkKExJQkNGTEFHUykgJChVU0JfSU5DTFVERVMpIC1jICQoU1JDX0RJUikvJChVU0JfT0JKRUNUKS5jCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworYmx1ZXRvb3RoLiRPOgorCSQoQ0MpICQoTElCQ0ZMQUdTKSAtYyAkKFNSQ19ESVIpL2JsdWV0b290aC5jCisKK2JsdWV0b290aF9uYW1lcy4kTzoKKwkkKENDKSAkKExJQkNGTEFHUykgLWMgJChTUkNfRElSKS9ibHVldG9vdGhfbmFtZXMuYworCiskKEJMVUVUT09USF9PQkpFQ1QpLiRPOgorCSQoQ0MpICQoTElCQ0ZMQUdTKSAkKEJMVUVUT09USF9JTkNMVURFUykgLWMgJChTUkNfRElSKS8kKEJMVUVUT09USF9PQkpFQ1QpLmMKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCiskKFBPUlRTX09CSkVDVCkuJE86CisJJChDQykgJChMSUJDRkxBR1MpICQoUE9SVFNfSU5DTFVERVMpIC1jICQoU1JDX0RJUikvJChQT1JUU19PQkpFQ1QpLmMKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCiskKFNZU1RFTV9PQkpFQ1QpLiRPOgorCSQoQ0MpICQoTElCQ0ZMQUdTKSAkKFNZU1RFTV9JTkNMVURFUykgLWMgJChTUkNfRElSKS8kKFNZU1RFTV9PQkpFQ1QpLmMKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitpb19taXNjLiRPOgorCSQoQ0MpICQoTElCQ0ZMQUdTKSAtYyAkKFNSQ19ESVIpL2lvX21pc2MuYworCitpb19sb2cuJE86CisJJChDQykgJChMSUJDRkxBR1MpIC1jICQoU1JDX0RJUikvaW9fbG9nLmMKKworZ2lvLiRPOgorCSQoQ0MpICQoTElCQ0ZMQUdTKSAtYyAkKFNSQ19ESVIpL2dpby5jCisKK2dpb19udWxsLiRPOgorCSQoQ0MpICQoTElCQ0ZMQUdTKSAtYyAkKFNSQ19ESVIpL2dpb19udWxsLmMKKworZ2lvX3NlcmlhbC4kTzoKKwkkKENDKSAkKExJQkNGTEFHUykgLWMgJChTUkNfRElSKS9naW9fc2VyaWFsLmMKKworZ2lvX3VzYi4kTzoKKwkkKENDKSAkKExJQkNGTEFHUykgLWMgJChTUkNfRElSKS9naW9fdXNiLmMKKworZ2lvX2JsdWV0b290aC4kTzoKKwkkKENDKSAkKExJQkNGTEFHUykgLWMgJChTUkNfRElSKS9naW9fYmx1ZXRvb3RoLmMKKworZ2lvX2hpZC4kTzoKKwkkKENDKSAkKExJQkNGTEFHUykgLWMgJChTUkNfRElSKS9naW9faGlkLmMKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCithc3luY19oYW5kbGUuJE86CisJJChDQykgJChMSUJDRkxBR1MpIC1jICQoU1JDX0RJUikvYXN5bmNfaGFuZGxlLmMKKworYXN5bmNfZGF0YS4kTzoKKwkkKENDKSAkKExJQkNGTEFHUykgLWMgJChTUkNfRElSKS9hc3luY19kYXRhLmMKKworYXN5bmNfd2FpdC4kTzoKKwkkKENDKSAkKExJQkNGTEFHUykgLWMgJChTUkNfRElSKS9hc3luY193YWl0LmMKKworYXN5bmNfYWxhcm0uJE86CisJJChDQykgJChMSUJDRkxBR1MpIC1jICQoU1JDX0RJUikvYXN5bmNfYWxhcm0uYworCithc3luY190YXNrLiRPOgorCSQoQ0MpICQoTElCQ0ZMQUdTKSAtYyAkKFNSQ19ESVIpL2FzeW5jX3Rhc2suYworCithc3luY19pby4kTzoKKwkkKENDKSAkKExJQkNGTEFHUykgLWMgJChTUkNfRElSKS9hc3luY19pby5jCisKK2FzeW5jX2V2ZW50LiRPOgorCSQoQ0MpICQoTElCQ0ZMQUdTKSAtYyAkKFNSQ19ESVIpL2FzeW5jX2V2ZW50LmMKKworYXN5bmNfc2lnbmFsLiRPOgorCSQoQ0MpICQoTElCQ0ZMQUdTKSAtYyAkKFNSQ19ESVIpL2FzeW5jX3NpZ25hbC5jCisKK3RocmVhZC4kTzoKKwkkKENDKSAkKExJQkNGTEFHUykgLWMgJChTUkNfRElSKS90aHJlYWQuYworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK21lc3NhZ2VzLiRPOgorCSQoQ0MpICQoTElCQ0ZMQUdTKSAtYyAkKFNSQ19ESVIpL21lc3NhZ2VzLmMKKworbG9nLiRPOgorCSQoQ0MpICQoTElCQ0ZMQUdTKSAtYyAkKFNSQ19ESVIpL2xvZy5jCisKK2xvZ19oaXN0b3J5LiRPOgorCSQoQ0MpICQoTElCQ0ZMQUdTKSAtYyAkKFNSQ19ESVIpL2xvZ19oaXN0b3J5LmMKKworYWRkcmVzc2VzLiRPOgorCSQoQ0MpICQoTElCQ0ZMQUdTKSAtYyAkKFNSQ19ESVIpL2FkZHJlc3Nlcy5jCisKK3JlcG9ydC4kTzoKKwkkKENDKSAkKExJQkNGTEFHUykgLWMgJChTUkNfRElSKS9yZXBvcnQuYworCitmaWxlLiRPOgorCSQoQ0MpICQoTElCQ0ZMQUdTKSAtYyAkKFNSQ19ESVIpL2ZpbGUuYworCitkZXZpY2UuJE86CisJJChDQykgJChMSUJDRkxBR1MpIC1jICQoU1JDX0RJUikvZGV2aWNlLmMKKworcGlwZS4kTzoKKwkkKENDKSAkKExJQkNGTEFHUykgLWMgJChTUkNfRElSKS9waXBlLmMKKworcGFyc2UuJE86CisJJChDQykgJChMSUJDRkxBR1MpIC1jICQoU1JDX0RJUikvcGFyc2UuYworCit0aW1pbmcuJE86CisJJChDQykgJChMSUJDRkxBR1MpIC1jICQoU1JDX0RJUikvdGltaW5nLmMKKworcXVldWUuJE86CisJJChDQykgJChMSUJDRkxBR1MpIC1jICQoU1JDX0RJUikvcXVldWUuYworCitkYXRhZmlsZS4kTzoKKwkkKENDKSAkKExJQkNGTEFHUykgLWMgJChTUkNfRElSKS9kYXRhZmlsZS5jCisKK3ZhcmlhYmxlcy4kTzoKKwkkKENDKSAkKExJQkNGTEFHUykgLWMgJChTUkNfRElSKS92YXJpYWJsZXMuYworCit1bmljb2RlLiRPOgorCSQoQ0MpICQoTElCQ0ZMQUdTKSAkKElDVV9JTkNMVURFUykgLWMgJChTUkNfRElSKS91bmljb2RlLmMKKwordXRmOC4kTzoKKwkkKENDKSAkKExJQkNGTEFHUykgLWMgJChTUkNfRElSKS91dGY4LmMKKworbG9jay4kTzoKKwkkKENDKSAkKExJQkNGTEFHUykgLWMgJChTUkNfRElSKS9sb2NrLmMKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitwaWQuJE86CisJJChDQykgJChMSUJDRkxBR1MpIC1jICQoU1JDX0RJUikvcGlkLmMKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCithdXRoLiRPOgorCSQoQ0MpICQoTElCQ0ZMQUdTKSAkKFBPTEtJVF9JTkNMVURFUykgLWMgJChTUkNfRElSKS9hdXRoLmMKKworZGF0YWFyZWEuJE86CisJJChDQykgJChMSUJDRkxBR1MpIC1jICQoU1JDX0RJUikvZGF0YWFyZWEuYworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK1BSRUZTX09CSkVDVFMgPSBwcmVmcy4kTyBwcmVmX3RhYmxlcy4kTworCitwcmVmcy4kTzoKKwkkKENDKSAkKExJQkNGTEFHUykgLWMgJChTUkNfRElSKS9wcmVmcy5jCisKK3ByZWZfdGFibGVzLiRPOgorCSQoQ0MpICQoTElCQ0ZMQUdTKSAtYyAkKFNSQ19ESVIpL3ByZWZfdGFibGVzLmMKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitDUkNURVNUX09CSkVDVFMgPSBjcmN0ZXN0LiRPICQoUFJPR1JBTV9PQkpFQ1RTKSBjcmNfYWxnb3JpdGhtcy4kTyBjcmNfZ2VuZXJhdGUuJE8gY3JjX3ZlcmlmeS4kTworCitjcmN0ZXN0JFg6ICQoQ1JDVEVTVF9PQkpFQ1RTKQorCSQoQ0MpICQoTERGTEFHUykgLW8gJEAgJChDUkNURVNUX09CSkVDVFMpICQoTERMSUJTKQorCitjcmN0ZXN0LiRPOgorCSQoQ0MpICQoTElCQ0ZMQUdTKSAtYyAkKFNSQ19ESVIpL2NyY3Rlc3QuYworCitjcmNfYWxnb3JpdGhtcy4kTzoKKwkkKENDKSAkKExJQkNGTEFHUykgLWMgJChTUkNfRElSKS9jcmNfYWxnb3JpdGhtcy5jCisKK2NyY19nZW5lcmF0ZS4kTzoKKwkkKENDKSAkKExJQkNGTEFHUykgLWMgJChTUkNfRElSKS9jcmNfZ2VuZXJhdGUuYworCitjcmNfdmVyaWZ5LiRPOgorCSQoQ0MpICQoTElCQ0ZMQUdTKSAtYyAkKFNSQ19ESVIpL2NyY192ZXJpZnkuYworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK01TR1RFU1RfT0JKRUNUUyA9IG1zZ3Rlc3QuJE8gJChQUk9HUkFNX09CSkVDVFMpCisKK21zZ3Rlc3QkWDogJChNU0dURVNUX09CSkVDVFMpCisJJChDQykgJChMREZMQUdTKSAtbyAkQCAkKE1TR1RFU1RfT0JKRUNUUykgJChMRExJQlMpCisKK21zZ3Rlc3QuJE86CisJJChDQykgJChMSUJDRkxBR1MpIC1jICQoU1JDX0RJUikvbXNndGVzdC5jCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworaGlkX2l0ZW1zLiRPOgorCSQoQ0MpICQoTElCQ0ZMQUdTKSAtYyAkKFNSQ19ESVIpL2hpZF9pdGVtcy5jCisKK2hpZF9icmFpbGxlLiRPOgorCSQoQ0MpICQoTElCQ0ZMQUdTKSAtYyAkKFNSQ19ESVIpL2hpZF9icmFpbGxlLmMKKworaGlkLiRPOgorCSQoQ0MpICQoTElCQ0ZMQUdTKSAtYyAkKFNSQ19ESVIpL2hpZC5jCisKKyQoSElEX09CSkVDVCkuJE86CisJJChDQykgJChMSUJDRkxBR1MpICQoSElEX0lOQ0xVREVTKSAtYyAkKFNSQ19ESVIpLyQoSElEX09CSkVDVCkuYworCitCUkxUVFlfSElEX09CSkVDVFMgPSBicmx0dHktaGlkLiRPICQoUFJPR1JBTV9PQkpFQ1RTKSAkKEhJRF9PQkpFQ1RTKSBoaWRfaW5zcGVjdC4kTyBoaWRfdGFibGVzLiRPCisKK2JybHR0eS1oaWQkWDogJChCUkxUVFlfSElEX09CSkVDVFMpCisJJChDQykgJChMREZMQUdTKSAtbyAkQCAkKEJSTFRUWV9ISURfT0JKRUNUUykgJChISURfTElCUykgJChMRExJQlMpCisKK2JybHR0eS1oaWQuJE86CisJJChDQykgJChMSUJDRkxBR1MpIC1jICQoU1JDX0RJUikvYnJsdHR5LWhpZC5jCisKK2hpZF9pbnNwZWN0LiRPOgorCSQoQ0MpICQoTElCQ0ZMQUdTKSAtYyAkKFNSQ19ESVIpL2hpZF9pbnNwZWN0LmMKKworaGlkX3RhYmxlcy4kTzoKKwkkKENDKSAkKExJQkNGTEFHUykgLWMgJChTUkNfRElSKS9oaWRfdGFibGVzLmMKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitGSVJNV0FSRV9PQkpFQ1RTID0gaWhleC4kTyBlenVzYi4kTworCitpaGV4LiRPOgorCSQoQ0MpICQoTElCQ0ZMQUdTKSAtYyAkKFNSQ19ESVIpL2loZXguYworCitlenVzYi4kTzoKKwkkKENDKSAkKExJQkNGTEFHUykgLWMgJChTUkNfRElSKS9lenVzYi5jCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworQlJBSUxMRV9PQkpFQ1RTID0gYnJsLiRPIGJybF91dGlscy4kTyBicmxfaW5wdXQuJE8gYnJsX2RyaXZlci4kTyBicmxfYmFzZS4kTyAkKEJSQUlMTEVfRFJJVkVSX09CSkVDVFMpICQoSU9fT0JKRUNUUykgY3JjX2dlbmVyYXRlLiRPICQoRklSTVdBUkVfT0JKRUNUUykKKworYnJsLiRPOgorCSQoQ0MpICQoTElCQ0ZMQUdTKSAtYyAkKFNSQ19ESVIpL2JybC5jCisKK2JybF91dGlscy4kTzoKKwkkKENDKSAkKExJQkNGTEFHUykgLWMgJChTUkNfRElSKS9icmxfdXRpbHMuYworCiticmxfaW5wdXQuJE86CisJJChDQykgJChMSUJDRkxBR1MpIC1jICQoU1JDX0RJUikvYnJsX2lucHV0LmMKKworYnJsX2RyaXZlci4kTzoKKwkkKENDKSAkKExJQkNGTEFHUykgLWMgJChTUkNfRElSKS9icmxfZHJpdmVyLmMKKworYnJsX2Jhc2UuJE86CisJJChDQykgJChMSUJDRkxBR1MpIC1jICQoU1JDX0RJUikvYnJsX2Jhc2UuYworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK1NQRUVDSF9PQkpFQ1RTID0gJChTUEVFQ0hfT0JKRUNUKSBzcGtfdGhyZWFkLiRPIHNwa19kcml2ZXIuJE8gc3BrX2Jhc2UuJE8gJChTUEVFQ0hfRFJJVkVSX09CSkVDVFMpCisKK3Nway4kTzoKKwkkKENDKSAkKExJQkNGTEFHUykgLWMgJChTUkNfRElSKS9zcGsuYworCitzcGtfdGhyZWFkLiRPOgorCSQoQ0MpICQoTElCQ0ZMQUdTKSAtYyAkKFNSQ19ESVIpL3Nwa190aHJlYWQuYworCitzcGtfaW5wdXQuJE86CisJJChDQykgJChMSUJDRkxBR1MpIC1jICQoU1JDX0RJUikvc3BrX2lucHV0LmMKKworc3BrX2RyaXZlci4kTzoKKwkkKENDKSAkKExJQkNGTEFHUykgLWMgJChTUkNfRElSKS9zcGtfZHJpdmVyLmMKKworc3BrX2Jhc2UuJE86CisJJChDQykgJChMSUJDRkxBR1MpIC1jICQoU1JDX0RJUikvc3BrX2Jhc2UuYworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK1NDUkVFTl9PQkpFQ1RTID0gc2NyLiRPIHNjcl91dGlscy4kTyBzY3JfYmFzZS4kTyBzY3JfbWFpbi4kTyBzY3JfcmVhbC4kTyBzY3JfZ3BtLiRPIHNjcl9kcml2ZXIuJE8gcm91dGluZy4kTyAkKFNDUkVFTl9EUklWRVJfT0JKRUNUUykKKworc2NyLiRPOgorCSQoQ0MpICQoTElCQ0ZMQUdTKSAtYyAkKFNSQ19ESVIpL3Njci5jCisKK3Njcl91dGlscy4kTzoKKwkkKENDKSAkKExJQkNGTEFHUykgLWMgJChTUkNfRElSKS9zY3JfdXRpbHMuYworCitzY3JfYmFzZS4kTzoKKwkkKENDKSAkKExJQkNGTEFHUykgLWMgJChTUkNfRElSKS9zY3JfYmFzZS5jCisKK3Njcl9tYWluLiRPOgorCSQoQ0MpICQoTElCQ0ZMQUdTKSAtYyAkKFNSQ19ESVIpL3Njcl9tYWluLmMKKworc2NyX3JlYWwuJE86IHNjci5hdXRvLmgKKwkkKENDKSAkKExJQkNGTEFHUykgLWMgJChTUkNfRElSKS9zY3JfcmVhbC5jCisKK3Njcl9ncG0uJE86IHNjci5hdXRvLmgKKwkkKENDKSAkKExJQkNGTEFHUykgLWMgJChTUkNfRElSKS9zY3JfZ3BtLmMKKworc2NyX2RyaXZlci4kTzoKKwkkKENDKSAkKExJQkNGTEFHUykgLWMgJChTUkNfRElSKS9zY3JfZHJpdmVyLmMKKworcm91dGluZy4kTzoKKwkkKENDKSAkKExJQkNGTEFHUykgLWMgJChTUkNfRElSKS9yb3V0aW5nLmMKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitTUEVDSUFMX1NDUkVFTl9PQkpFQ1RTID0gc2NyX3NwZWNpYWwuJE8gc2NyX2Zyb3plbi4kTyBzY3JfaGVscC4kTyBzY3JfbWVudS4kTworCitzY3Jfc3BlY2lhbC4kTzoKKwkkKENDKSAkKExJQkNGTEFHUykgLWMgJChTUkNfRElSKS9zY3Jfc3BlY2lhbC5jCisKK3Njcl9mcm96ZW4uJE86CisJJChDQykgJChMSUJDRkxBR1MpIC1jICQoU1JDX0RJUikvc2NyX2Zyb3plbi5jCisKK3Njcl9oZWxwLiRPOgorCSQoQ0MpICQoTElCQ0ZMQUdTKSAtYyAkKFNSQ19ESVIpL3Njcl9oZWxwLmMKKworc2NyX21lbnUuJE86CisJJChDQykgJChMSUJDRkxBR1MpIC1jICQoU1JDX0RJUikvc2NyX21lbnUuYworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK0FMRVJUX09CSkVDVFMgPSBhbGVydC4kTyB0dW5lX2J1aWxkZXIuJE8gbWVzc2FnZS4kTyAkKFRVTkVfT0JKRUNUUykKKworYWxlcnQuJE86CisJJChDQykgJChMSUJDRkxBR1MpIC1jICQoU1JDX0RJUikvYWxlcnQuYworCittZXNzYWdlLiRPOgorCSQoQ0MpICQoTElCQ0ZMQUdTKSAtYyAkKFNSQ19ESVIpL21lc3NhZ2UuYworCit0dW5lLiRPOgorCSQoQ0MpICQoTElCQ0ZMQUdTKSAtYyAkKFNSQ19ESVIpL3R1bmUuYworCitub3Rlcy4kTzoKKwkkKENDKSAkKExJQkNGTEFHUykgLWMgJChTUkNfRElSKS9ub3Rlcy5jCisKK25vdGVzX2JlZXAuJE86CisJJChDQykgJChMSUJDRkxBR1MpIC1jICQoU1JDX0RJUikvbm90ZXNfYmVlcC5jCisKK25vdGVzX3BjbS4kTzoKKwkkKENDKSAkKExJQkNGTEFHUykgLWMgJChTUkNfRElSKS9ub3Rlc19wY20uYworCitub3Rlc19taWRpLiRPOgorCSQoQ0MpICQoTElCQ0ZMQUdTKSAtYyAkKFNSQ19ESVIpL25vdGVzX21pZGkuYworCitub3Rlc19mbS4kTzoKKwkkKENDKSAkKExJQkNGTEFHUykgLWMgJChTUkNfRElSKS9ub3Rlc19mbS5jCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworVFRCX09CSkVDVFMgPSB0dGJfdHJhbnNsYXRlLiRPIHR0Yl9jb21waWxlLiRPIHR0Yl9uYXRpdmUuJE8KKwordHRiX3RyYW5zbGF0ZS4kTzoKKwkkKENDKSAkKExJQkNGTEFHUykgLWMgJChTUkNfRElSKS90dGJfdHJhbnNsYXRlLmMKKwordHRiX2NvbXBpbGUuJE86CisJJChDQykgJChMSUJDRkxBR1MpIC1jICQoU1JDX0RJUikvdHRiX2NvbXBpbGUuYworCit0dGJfbmF0aXZlLiRPOgorCSQoQ0MpICQoTElCQ0ZMQUdTKSAtYyAkKFNSQ19ESVIpL3R0Yl9uYXRpdmUuYworCit0dGJfZ25vbWUuJE86CisJJChDQykgJChMSUJDRkxBR1MpIC1jICQoU1JDX0RJUikvdHRiX2dub21lLmMKKwordHRiX2xvdWlzLiRPOgorCSQoQ0MpICQoTElCQ0ZMQUdTKSAtYyAkKFNSQ19ESVIpL3R0Yl9sb3Vpcy5jCisKK0JSTFRUWV9UVEJfT0JKRUNUUyA9IGJybHR0eS10dGIuJE8gJChQUk9HUkFNX09CSkVDVFMpIGRhdGFhcmVhLiRPICQoVFRCX09CSkVDVFMpIHR0Yl9nbm9tZS4kTyB0dGJfbG91aXMuJE8gJChQUkVGU19PQkpFQ1RTKSAkKENIQVJTRVRfT0JKRUNUUykKKworYnJsdHR5LXR0YiRYOiAkKEJSTFRUWV9UVEJfT0JKRUNUUykgfCAkKEJVSUxEX0FQSSkKKwkkKENDKSAkKExERkxBR1MpIC1vICRAICQoQlJMVFRZX1RUQl9PQkpFQ1RTKSAkKEFQSV9SRUYpICQoQ1VSU0VTX0xJQlMpICQoTERMSUJTKQorCiticmx0dHktdHRiLiRPOgorCSQoQ0MpICQoQ0ZMQUdTKSAkKElDVV9JTkNMVURFUykgLWMgJChTUkNfRElSKS9icmx0dHktdHRiLmMKKworY2hlY2stdGV4dC10YWJsZXM6IGJybHR0eS10dGIkWCAkKEFQSV9MSUJfVkVSU0lPTkVEKQorCUBlY2hvIGNoZWNraW5nIHRleHQgdGFibGVzCisJc2V0IC0tICQoU1JDX1RPUCkkKFRCTF9ESVIpLyQoVEVYVF9UQUJMRVNfU1VCRElSRUNUT1JZKS8qJChURVhUX1RBQkxFX0VYVEVOU0lPTikgJiYgXAorCWZvciBmaWxlOyBkbyBcCisJTERfTElCUkFSWV9QQVRIPSQoQkxEX0RJUikgXAorCS4vYnJsdHR5LXR0YiRYIC1UJChTUkNfVE9QKSQoVEJMX0RJUikgJCR7ZmlsZSMjKi99OyBcCisJZG9uZQorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK2N0Yl9jb21waWxlLiRPOgorCSQoQ0MpICQoTElCQ0ZMQUdTKSAkKElDVV9JTkNMVURFUykgLWMgJChTUkNfRElSKS9jdGJfY29tcGlsZS5jCisKK2N0Yl90cmFuc2xhdGUuJE86CisJJChDQykgJChMSUJDRkxBR1MpICQoSUNVX0lOQ0xVREVTKSAtYyAkKFNSQ19ESVIpL2N0Yl90cmFuc2xhdGUuYworCitjdGJfbmF0aXZlLiRPOgorCSQoQ0MpICQoTElCQ0ZMQUdTKSAtYyAkKFNSQ19ESVIpL2N0Yl9uYXRpdmUuYworCitjdGJfZXh0ZXJuYWwuJE86CisJJChDQykgJChMSUJDRkxBR1MpIC1jICQoU1JDX0RJUikvY3RiX2V4dGVybmFsLmMKKworY3RiX2xvdWlzLiRPOgorCSQoQ0MpICQoTElCQ0ZMQUdTKSAkKExPVUlTX0lOQ0xVREVTKSAtYyAkKFNSQ19ESVIpL2N0Yl9sb3Vpcy5jCisKK0JSTFRUWV9DVEJfT0JKRUNUUyA9IGJybHR0eS1jdGIuJE8gJChQUk9HUkFNX09CSkVDVFMpICQoVFRCX09CSkVDVFMpICQoQ1RCX09CSkVDVFMpICQoUFJFRlNfT0JKRUNUUykgJChDSEFSU0VUX09CSkVDVFMpIGRhdGFhcmVhLiRPCisKK2JybHR0eS1jdGIkWDogJChCUkxUVFlfQ1RCX09CSkVDVFMpCisJJChDQykgJChMREZMQUdTKSAtbyAkQCAkKEJSTFRUWV9DVEJfT0JKRUNUUykgJChMT1VJU19MSUJTKSAkKEVYUEFUX0xJQlMpICQoTERMSUJTKQorCiticmx0dHktY3RiLiRPOgorCSQoQ0MpICQoQ0ZMQUdTKSAtYyAkKFNSQ19ESVIpL2JybHR0eS1jdGIuYworCitjaGVjay1jb250cmFjdGlvbi10YWJsZXM6IGJybHR0eS1jdGIkWAorCUBlY2hvIGNoZWNraW5nIGNvbnRyYWN0aW9uIHRhYmxlcworCXNldCAtLSAkKFNSQ19UT1ApJChUQkxfRElSKS8kKENPTlRSQUNUSU9OX1RBQkxFU19TVUJESVJFQ1RPUlkpLyokKENPTlRSQUNUSU9OX1RBQkxFX0VYVEVOU0lPTikgJiYgXAorCWZvciBmaWxlOyBkbyBcCisJdGVzdCAteCAkJHtmaWxlfSB8fCBcCisJLi9icmx0dHktY3RiJFggLVQkKFNSQ19UT1ApJChUQkxfRElSKSAtYyQke2ZpbGUjIyovfSA8L2Rldi9udWxsOyBcCisJZG9uZQorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK0FUQl9PQkpFQ1RTID0gYXRiX3RyYW5zbGF0ZS4kTyBhdGJfY29tcGlsZS4kTworCithdGJfdHJhbnNsYXRlLiRPOgorCSQoQ0MpICQoTElCQ0ZMQUdTKSAtYyAkKFNSQ19ESVIpL2F0Yl90cmFuc2xhdGUuYworCithdGJfY29tcGlsZS4kTzoKKwkkKENDKSAkKExJQkNGTEFHUykgLWMgJChTUkNfRElSKS9hdGJfY29tcGlsZS5jCisKK0JSTFRUWV9BVEJfT0JKRUNUUyA9IGJybHR0eS1hdGIuJE8gJChQUk9HUkFNX09CSkVDVFMpICQoQVRCX09CSkVDVFMpIGRhdGFhcmVhLiRPCisKK2JybHR0eS1hdGIkWDogJChCUkxUVFlfQVRCX09CSkVDVFMpCisJJChDQykgJChMREZMQUdTKSAtbyAkQCAkKEJSTFRUWV9BVEJfT0JKRUNUUykgJChMRExJQlMpCisKK2JybHR0eS1hdGIuJE86CisJJChDQykgJChDRkxBR1MpIC1jICQoU1JDX0RJUikvYnJsdHR5LWF0Yi5jCisKK2NoZWNrLWF0dHJpYnV0ZXMtdGFibGVzOiBicmx0dHktYXRiJFgKKwlAZWNobyBjaGVja2luZyBhdHRyaWJ1dGVzIHRhYmxlcworCXNldCAtLSAkKFNSQ19UT1ApJChUQkxfRElSKS8kKEFUVFJJQlVURVNfVEFCTEVTX1NVQkRJUkVDVE9SWSkvKiQoQVRUUklCVVRFU19UQUJMRV9FWFRFTlNJT04pICYmIFwKKwlmb3IgZmlsZTsgZG8gXAorCS4vYnJsdHR5LWF0YiRYIC1UJChTUkNfVE9QKSQoVEJMX0RJUikgJCR7ZmlsZSMjKi99OyBcCisJZG9uZQorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK0tUQl9PQkpFQ1RTID0ga3RiX3RyYW5zbGF0ZS4kTyBrdGJfY29tcGlsZS4kTyBrdGJfbGlzdC4kTyBrdGJfY21kcy4kTworCitrdGJfdHJhbnNsYXRlLiRPOgorCSQoQ0MpICQoTElCQ0ZMQUdTKSAtYyAkKFNSQ19ESVIpL2t0Yl90cmFuc2xhdGUuYworCitrdGJfY29tcGlsZS4kTzoKKwkkKENDKSAkKExJQkNGTEFHUykgLWMgJChTUkNfRElSKS9rdGJfY29tcGlsZS5jCisKK2t0Yl9saXN0LiRPOgorCSQoQ0MpICQoTElCQ0ZMQUdTKSAtYyAkKFNSQ19ESVIpL2t0Yl9saXN0LmMKKwora3RiX2F1ZGl0LiRPOgorCSQoQ0MpICQoTElCQ0ZMQUdTKSAtYyAkKFNSQ19ESVIpL2t0Yl9hdWRpdC5jCisKK2t0Yl9jbWRzLiRPOgorCSQoQ0MpICQoTElCQ0ZMQUdTKSAtYyAkKFNSQ19ESVIpL2t0Yl9jbWRzLmMKKwora3RiX2tleWJvYXJkLiRPOgorCSQoQ0MpICQoTElCQ0ZMQUdTKSAtYyAkKFNSQ19ESVIpL2t0Yl9rZXlib2FyZC5jCisKK0JSTFRUWV9LVEJfT0JKRUNUUyA9IGJybHR0eS1rdGIuJE8gJChQUk9HUkFNX09CSkVDVFMpICQoS1RCX09CSkVDVFMpIGt0Yl9hdWRpdC4kTyBrdGJfa2V5Ym9hcmQuJE8gJChUVEJfT0JKRUNUUykgJChQUkVGU19PQkpFQ1RTKSAkKENIQVJTRVRfT0JKRUNUUykgZGF0YWFyZWEuJE8gZHJpdmVycy4kTyBkcml2ZXIuJE8gYnJsX3V0aWxzLiRPIGJybF9kcml2ZXIuJE8gYnJsX2Jhc2UuJE8gJChCUkFJTExFX0RSSVZFUl9PQkpFQ1RTKSAkKElPX09CSkVDVFMpIGNtZC4kTyBjbWRfcXVldWUuJE8gaGlka2V5cy4kTyByZXBvcnQuJE8gY21kX2JybGFwaS4kTyBjcmNfZ2VuZXJhdGUuJE8gJChGSVJNV0FSRV9PQkpFQ1RTKQorCiticmx0dHkta3RiJFg6ICQoQlJMVFRZX0tUQl9PQkpFQ1RTKSB8ICQoQlJBSUxMRV9EUklWRVJTKQorCSQoQ0MpICQoTERGTEFHUykgLW8gJEAgJChCUkxUVFlfS1RCX09CSkVDVFMpICQoQlJBSUxMRV9EUklWRVJfTElCUkFSSUVTKSAkKFVTQl9MSUJTKSAkKEJMVUVUT09USF9MSUJTKSAkKEhJRF9MSUJTKSAkKExETElCUykKKworYnJsdHR5LWt0Yi4kTzoKKwkkKENDKSAkKENGTEFHUykgLWMgJChTUkNfRElSKS9icmx0dHkta3RiLmMKKworY2hlY2sta2V5Ym9hcmQtdGFibGVzOiBhbGwtYnJsdHR5LWt0YgorCUBlY2hvIGNoZWNraW5nIGtleWJvYXJkIHRhYmxlcworCXNldCAtLSAkKFNSQ19UT1ApJChUQkxfRElSKS8kKEtFWUJPQVJEX1RBQkxFU19TVUJESVJFQ1RPUlkpLyokKEtFWV9UQUJMRV9FWFRFTlNJT04pICYmIFwKKwlmb3IgZmlsZTsgZG8gXAorCW5hbWU9JCR7ZmlsZSMjKi99OyBcCisJbmFtZT0kJHtuYW1lJS4qfTsgXAorCS4vYnJsdHR5LWt0YiRYIC1hIC1EJChCTERfVE9QKSQoRFJWX0RJUikgLVQkKFNSQ19UT1ApJChUQkxfRElSKSAkJG5hbWU7IFwKKwlkb25lCisKK2NoZWNrLWlucHV0LXRhYmxlczogYWxsLWJybHR0eS1rdGIKKwlAZWNobyBjaGVja2luZyBpbnB1dCB0YWJsZXMKKwlmaW5kICQoU1JDX1RPUCkkKFRCTF9ESVIpLyQoSU5QVVRfVEFCTEVTX1NVQkRJUkVDVE9SWSkgLW5hbWUgJyokKEtFWV9UQUJMRV9FWFRFTlNJT04pJyAtcHJpbnQgfCBcCisJd2hpbGUgcmVhZCBmaWxlOyBkbyBcCisJZHJpdmVyPSQke2ZpbGUlLyp9OyBcCisJZHJpdmVyPSQke2RyaXZlciMjKi99OyBcCisJbmFtZT0kJHtmaWxlIyMqL307IFwKKwluYW1lPSQke25hbWUlLip9OyBcCisJLi9icmx0dHkta3RiJFggLWEgLUQkKEJMRF9UT1ApJChEUlZfRElSKSAtVCQoU1JDX1RPUCkkKFRCTF9ESVIpIC1iICQkZHJpdmVyICQkbmFtZTsgXAorCWRvbmUKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCithcGlfY29udHJvbC4kTzoKKwkkKENDKSAkKExJQkNGTEFHUykgLWMgJChTUkNfRElSKS9hcGlfY29udHJvbC5jCisKK2JybGFwaV9zZXJ2ZXIuJE86CisJJChDQykgJChMSUJDRkxBR1MpIC1jICQoU1JDX0RJUikvYnJsYXBpX3NlcnZlci5jCisKK2JybGFwaV9rZXlyYW5nZXMuJE86CisJJChDQykgJChMSUJDRkxBR1MpIC1jICQoU1JDX0RJUikvYnJsYXBpX2tleXJhbmdlcy5jCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworQVBJX0NMSUVOVF9PQkpFQ1RTID0gYnJsYXBpX2NsaWVudC4kTworCithcGk6ICQoQVBJX0RZTkFNSUNfTElCUkFSWSkgJChBUElfQVJDKQorCithcGktZHluYW1pYy1saWJyYXJ5OiAkKEFQSV9MSUJfVkVSU0lPTkVEKQorJChBUElfTElCX1ZFUlNJT05FRCk6ICQoQVBJX0xJQikKKwl0ZXN0IC1lICIkKEFQSV9MSUJfVkVSU0lPTkVEKSIgfHwgJChTWU1MSU5LKSAkKEFQSV9MSUIpICQoQVBJX0xJQl9WRVJTSU9ORUQpCisKKyQoQVBJX0xJQik6ICQoQVBJX0NMSUVOVF9PQkpFQ1RTKQorCSQoTUtMSUI6PG5hbWU+PSR7QVBJX0xJQl9WRVJTSU9ORUR9KSAkQCAkKEFQSV9DTElFTlRfT0JKRUNUUykgJChBUElfTElCUkFSSUVTKQorCithcGktZHluYW1pYy1saWJyYXJ5LXdpbmRvd3M6ICQoQVBJX0RMTCkKKyQoQVBJX0RMTCk6ICQoQVBJX0NMSUVOVF9PQkpFQ1RTKQorCS1ybSAtZiBpbXBsaWIuYSBsaWIuZGVmCisJJChNS0xJQjo8bmFtZT49JHtBUElfTElCX1ZFUlNJT05FRH0pICRAICQoQVBJX0NMSUVOVF9PQkpFQ1RTKSAkKEFQSV9MSUJSQVJJRVMpCisJWyAhIC1mIGltcGxpYi5hIF0gfHwgbXYgaW1wbGliLmEgJChBUElfSU1QTElCKQorCVsgISAtZiBsaWIuZGVmIF0gfHwgbXYgbGliLmRlZiAkKEFQSV9ERUYpCisKKyQoQVBJX0FSQyk6ICQoQVBJX0NMSUVOVF9PQkpFQ1RTKQorCWFyIHJjICRAICQoQVBJX0NMSUVOVF9PQkpFQ1RTKQorCSQoUkFOTElCKSAkQAorCiticmxhcGlfY2xpZW50LiRPOgorCSQoQ0MpICQoTElCQ0ZMQUdTKSAtYyAkKFNSQ19ESVIpL2JybGFwaV9jbGllbnQuYworCiticmxhcGlfY29uc3RhbnRzLmg6ICQoU1JDX0RJUikvYnJsYXBpX2NvbnN0YW50cy5hd2sgJChDT01NQU5EU19ERVBFTkRFTkNJRVMpCisJJChBV0spIC1mICQoU1JDX0RJUikvYnJsYXBpX2NvbnN0YW50cy5hd2sgJChDT01NQU5EU19BUkdVTUVOVFMpID4kQAorCiticmxhcGlfa2V5dGFiLmF1dG8uaDogJChTUkNfRElSKS9icmxhcGlfa2V5dGFiLmF3ayAkKENPTU1BTkRTX0RFUEVOREVOQ0lFUykKKwkkKEFXSykgLWYgJChTUkNfRElSKS9icmxhcGlfa2V5dGFiLmF3ayAkKENPTU1BTkRTX0FSR1VNRU5UUykgPiRACisKK2JybGFwaV9icmxkZWZzLmF1dG8uaDogJChTUkNfRElSKS9icmxhcGlfYnJsZGVmcy5hd2sgJChDT01NQU5EU19ERVBFTkRFTkNJRVMpCisJJChBV0spIC1mICQoU1JDX0RJUikvYnJsYXBpX2JybGRlZnMuYXdrICQoQ09NTUFORFNfQVJHVU1FTlRTKSA+JEAKKworYWxsLWFwaS1iaW5kaW5nczogfCBhcGkKKwlzZXQgLS0gJChBUElfQklORElOR1MpOyBcCisJZm9yIGxhbmd1YWdlIFwKKwlkbyAoY2QgJChCTERfVE9QKSQoQk5EX0RJUikvJCRsYW5ndWFnZSAmJiAkKE1BS0UpIGFsbCkgfHwgZXhpdCAxOyBcCisJZG9uZQorCitpbnN0YWxsLWFwaS1iaW5kaW5nczogYWxsLWFwaS1iaW5kaW5ncworCXNldCAtLSAkKEFQSV9CSU5ESU5HUyk7IFwKKwlmb3IgbGFuZ3VhZ2UgXAorCWRvIChjZCAkKEJMRF9UT1ApJChCTkRfRElSKS8kJGxhbmd1YWdlICYmICQoTUFLRSkgaW5zdGFsbCkgfHwgZXhpdCAxOyBcCisJZG9uZQorCit1bmluc3RhbGwtYXBpLWJpbmRpbmdzOgorCS1zZXQgLS0gJChBUElfQklORElOR1MpOyBcCisJZm9yIGxhbmd1YWdlIFwKKwlkbyAoY2QgJChCTERfVE9QKSQoQk5EX0RJUikvJCRsYW5ndWFnZSAmJiAkKE1BS0UpIHVuaW5zdGFsbCk7IFwKKwlkb25lCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworQlJMVFRZX0NMRFJfT0JKRUNUUyA9IGJybHR0eS1jbGRyLiRPIGNsZHIuJE8gJChQUk9HUkFNX09CSkVDVFMpCisKK2JybHR0eS1jbGRyJFg6ICQoQlJMVFRZX0NMRFJfT0JKRUNUUykKKwkkKENDKSAkKExERkxBR1MpIC1vICRAICQoQlJMVFRZX0NMRFJfT0JKRUNUUykgJChFWFBBVF9MSUJTKSAkKExETElCUykKKworYnJsdHR5LWNsZHIuJE86CisJJChDQykgJChMSUJDRkxBR1MpIC1jICQoU1JDX0RJUikvYnJsdHR5LWNsZHIuYworCitjbGRyLiRPOgorCSQoQ0MpICQoTElCQ0ZMQUdTKSAtYyAkKFNSQ19ESVIpL2NsZHIuYworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK3JneC4kTzoKKwkkKENDKSAkKExJQkNGTEFHUykgLWMgJChTUkNfRElSKS9yZ3guYworCiskKFJHWF9PQkpFQ1QpLiRPOgorCSQoQ0MpICQoTElCQ0ZMQUdTKSAkKFJHWF9JTkNMVURFUykgLWMgJChTUkNfRElSKS8kKFJHWF9PQkpFQ1QpLmMKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitDT1JFX09CSkVDVFMgPSBjb3JlLiRPICQoUFJPR1JBTV9PQkpFQ1RTKSByZXZpc2lvbi4kTyAkKFBHTVBSSVZTX09CSkVDVFMpIHJlcG9ydC4kTyBjb25maWcuJE8gJChSR1hfT0JKRUNUUykgJChTRVJWSUNFX09CSkVDVFMpIGFjdGl2aXR5LiRPICQoUFJFRlNfT0JKRUNUUykgcHJvZmlsZS4kTyBtZW51LiRPIG1lbnVfcHJlZnMuJE8gc2VzLiRPIHN0YXR1cy4kTyB1cGRhdGUuJE8gYmxpbmsuJE8gZGF0YWFyZWEuJE8gJChDTURfT0JKRUNUUykgcGlwZS4kTyAkKFRUQl9PQkpFQ1RTKSAkKENIQVJTRVRfT0JKRUNUUykgJChDVEJfT0JKRUNUUykgJChBVEJfT0JKRUNUUykgJChLVEJfT0JKRUNUUykga3RiX2tleWJvYXJkLiRPICQoS0JEX09CSkVDVFMpIGtiZF9rZXljb2Rlcy4kTyAkKEJFTExfT0JKRUNUUykgJChMRURTX09CSkVDVFMpICQoQUxFUlRfT0JKRUNUUykgaGlka2V5cy4kTyBkcml2ZXJzLiRPIGRyaXZlci4kTyAkKFNDUkVFTl9PQkpFQ1RTKSAkKFNQRUNJQUxfU0NSRUVOX09CSkVDVFMpICQoQlJBSUxMRV9PQkpFQ1RTKSAkKFNQRUVDSF9PQkpFQ1RTKSBzcGtfaW5wdXQuJE8gYXBpX2NvbnRyb2wuJE8gJChBUElfU0VSVkVSX09CSkVDVFMpCitDT1JFX05BTUUgPSBicmx0dHkKKworYnJsdHR5LWNvcmU6ICQoQ09SRV9PQkpFQ1RTKQorCitjb3JlLiRPOgorCSQoQ0MpICQoTElCQ0ZMQUdTKSAkKElDVV9JTkNMVURFUykgLWMgJChTUkNfRElSKS9jb3JlLmMKKworY29uZmlnLiRPOgorCSQoQ0MpICQoTElCQ0ZMQUdTKSAtYyAkKFNSQ19ESVIpL2NvbmZpZy5jCisKK2FjdGl2aXR5LiRPOgorCSQoQ0MpICQoTElCQ0ZMQUdTKSAtYyAkKFNSQ19ESVIpL2FjdGl2aXR5LmMKKworcHJvZmlsZS4kTzoKKwkkKENDKSAkKExJQkNGTEFHUykgLWMgJChTUkNfRElSKS9wcm9maWxlLmMKKworbWVudS4kTzoKKwkkKENDKSAkKExJQkNGTEFHUykgLWMgJChTUkNfRElSKS9tZW51LmMKKworbWVudV9wcmVmcy4kTzoKKwkkKENDKSAkKExJQkNGTEFHUykgLWMgJChTUkNfRElSKS9tZW51X3ByZWZzLmMKKworc2VzLiRPOgorCSQoQ0MpICQoTElCQ0ZMQUdTKSAtYyAkKFNSQ19ESVIpL3Nlcy5jCisKK3N0YXR1cy4kTzoKKwkkKENDKSAkKExJQkNGTEFHUykgLWMgJChTUkNfRElSKS9zdGF0dXMuYworCit1cGRhdGUuJE86CisJJChDQykgJChMSUJDRkxBR1MpIC1jICQoU1JDX0RJUikvdXBkYXRlLmMKKworYmxpbmsuJE86CisJJChDQykgJChMSUJDRkxBR1MpIC1jICQoU1JDX0RJUikvYmxpbmsuYworCitoaWRrZXlzLiRPOgorCSQoQ0MpICQoTElCQ0ZMQUdTKSAtYyAkKFNSQ19ESVIpL2hpZGtleXMuYworCitkcml2ZXJzLiRPOgorCSQoQ0MpICQoTElCQ0ZMQUdTKSAtYyAkKFNSQ19ESVIpL2RyaXZlcnMuYworCitkcml2ZXIuJE86CisJJChDQykgJChMSUJDRkxBR1MpIC1jICQoU1JDX0RJUikvZHJpdmVyLmMKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitDTURfT0JKRUNUUyA9IGNtZC4kTyBjbWRfYnJsYXBpLiRPIGNtZF9xdWV1ZS4kTyBjbWRfdXRpbHMuJE8gY21kX2NsaXBib2FyZC4kTyBjbWRfY3VzdG9tLiRPIGNtZF9pbnB1dC4kTyBjbWRfa2V5Y29kZXMuJE8gY21kX2xlYXJuLiRPIGNtZF9taXNjZWxsYW5lb3VzLiRPIGNtZF9uYXZpZ2F0aW9uLiRPIGNtZF9vdmVycmlkZS4kTyBjbWRfcHJlZmVyZW5jZXMuJE8gY21kX3NwZWVjaC4kTyBjbWRfdG9nZ2xlLiRPIGNtZF90b3VjaC4kTyBjbGlwYm9hcmQuJE8gbGVhcm4uJE8KKworY21kLiRPOgorCSQoQ0MpICQoTElCQ0ZMQUdTKSAtYyAkKFNSQ19ESVIpL2NtZC5jCisKK2NtZF9icmxhcGkuJE86CisJJChDQykgJChMSUJDRkxBR1MpIC1jICQoU1JDX0RJUikvY21kX2JybGFwaS5jCisKK2NtZF9xdWV1ZS4kTzoKKwkkKENDKSAkKExJQkNGTEFHUykgLWMgJChTUkNfRElSKS9jbWRfcXVldWUuYworCitjbWRfdXRpbHMuJE86CisJJChDQykgJChMSUJDRkxBR1MpICQoSUNVX0lOQ0xVREVTKSAtYyAkKFNSQ19ESVIpL2NtZF91dGlscy5jCisKK2NtZF9jbGlwYm9hcmQuJE86CisJJChDQykgJChMSUJDRkxBR1MpIC1jICQoU1JDX0RJUikvY21kX2NsaXBib2FyZC5jCisKK2NtZF9jdXN0b20uJE86CisJJChDQykgJChMSUJDRkxBR1MpICQoSUNVX0lOQ0xVREVTKSAtYyAkKFNSQ19ESVIpL2NtZF9jdXN0b20uYworCitjbWRfaW5wdXQuJE86CisJJChDQykgJChMSUJDRkxBR1MpIC1jICQoU1JDX0RJUikvY21kX2lucHV0LmMKKworY21kX2tleWNvZGVzLiRPOgorCSQoQ0MpICQoTElCQ0ZMQUdTKSAtYyAkKFNSQ19ESVIpL2NtZF9rZXljb2Rlcy5jCisKK2NtZF9sZWFybi4kTzoKKwkkKENDKSAkKExJQkNGTEFHUykgLWMgJChTUkNfRElSKS9jbWRfbGVhcm4uYworCitjbWRfbWlzY2VsbGFuZW91cy4kTzoKKwkkKENDKSAkKExJQkNGTEFHUykgLWMgJChTUkNfRElSKS9jbWRfbWlzY2VsbGFuZW91cy5jCisKK2NtZF9uYXZpZ2F0aW9uLiRPOgorCSQoQ0MpICQoTElCQ0ZMQUdTKSAkKElDVV9JTkNMVURFUykgLWMgJChTUkNfRElSKS9jbWRfbmF2aWdhdGlvbi5jCisKK2NtZF9vdmVycmlkZS4kTzoKKwkkKENDKSAkKExJQkNGTEFHUykgJChJQ1VfSU5DTFVERVMpIC1jICQoU1JDX0RJUikvY21kX292ZXJyaWRlLmMKKworY21kX3ByZWZlcmVuY2VzLiRPOgorCSQoQ0MpICQoTElCQ0ZMQUdTKSAtYyAkKFNSQ19ESVIpL2NtZF9wcmVmZXJlbmNlcy5jCisKK2NtZF9zcGVlY2guJE86CisJJChDQykgJChMSUJDRkxBR1MpIC1jICQoU1JDX0RJUikvY21kX3NwZWVjaC5jCisKK2NtZF90b2dnbGUuJE86CisJJChDQykgJChMSUJDRkxBR1MpIC1jICQoU1JDX0RJUikvY21kX3RvZ2dsZS5jCisKK2NtZF90b3VjaC4kTzoKKwkkKENDKSAkKExJQkNGTEFHUykgLWMgJChTUkNfRElSKS9jbWRfdG91Y2guYworCitjbGlwYm9hcmQuJE86CisJJChDQykgJChMSUJDRkxBR1MpIC1jICQoU1JDX0RJUikvY2xpcGJvYXJkLmMKKworbGVhcm4uJE86CisJJChDQykgJChMSUJDRkxBR1MpIC1jICQoU1JDX0RJUikvbGVhcm4uYworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK0JSTFRUWV9PQkpFQ1RTID0gYnJsdHR5LiRPICQoQ09SRV9PQkpFQ1RTKQorQlJMVFRZX0xJQlJBUklFUyA9ICQoQlJBSUxMRV9EUklWRVJfTElCUkFSSUVTKSAkKFNQRUVDSF9EUklWRVJfTElCUkFSSUVTKSAkKFNDUkVFTl9EUklWRVJfTElCUkFSSUVTKSAkKFNFUlZJQ0VfTElCUykgJChQQ01fTElCUykgJChNSURJX0xJQlMpICQoVVNCX0xJQlMpICQoQkxVRVRPT1RIX0xJQlMpICQoSElEX0xJQlMpICQoTE9VSVNfTElCUykgJChFWFBBVF9MSUJTKSAkKFJHWF9MSUJTKSAkKFBPTEtJVF9MSUJTKSAkKExETElCUykKKworYnJsdHR5JFg6ICQoQlJMVFRZX09CSkVDVFMpCisJJChDQykgJChMREZMQUdTKSAtbyAkQCAkKEJSTFRUWV9PQkpFQ1RTKSAkKEJSTFRUWV9MSUJSQVJJRVMpCisKK2JybHR0eS4kTzoKKwkkKENDKSAkKENGTEFHUykgLWMgJChTUkNfRElSKS9icmx0dHkuYworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK0JSTFRUWV9DT1JFX0xJQiA9ICQoTElCX1BGWCkkKENPUkVfTkFNRSlfY29yZS4kKExJQl9FWFQpCisKK2NvcmUtbGlicmFyeTogJChCUkxUVFlfQ09SRV9MSUIpCisKKyQoQlJMVFRZX0NPUkVfTElCKTogJChDT1JFX09CSkVDVFMpCisJJChNS0xJQjo8bmFtZT49JEAuJChQQUNLQUdFX1ZFUlNJT04pKSAkQCAkKENPUkVfT0JKRUNUUykgJChCUkxUVFlfTElCUkFSSUVTKQorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK0JSTFRUWV9KTklfSkFSID0gJChDT1JFX05BTUUpLmphcgorQlJMVFRZX0pOSV9MSUIgPSAkKExJQl9QRlgpJChDT1JFX05BTUUpX2puaS4kKExJQl9FWFQpCisKK2JybHR0eS1qbmk6ICQoQlJMVFRZX0pOSV9KQVIpICQoQlJMVFRZX0pOSV9MSUIpCisKKyQoQlJMVFRZX0pOSV9KQVIpOiBicmx0dHkuY2xhc3MKKwlqYXIgY2YgJEAgYnJsdHR5LmNsYXNzCisKK2JybHR0eS5jbGFzczogJChTUkNfRElSKS9icmx0dHkuamF2YQorCWphdmFjICQoU1JDX0RJUikvYnJsdHR5LmphdmEKKworJChCUkxUVFlfSk5JX0xJQik6IGJybHR0eV9qbmkuJE8gJChCUkxUVFlfQ09SRV9MSUIpCisJJChNS0xJQjo8bmFtZT49JEAuJChQQUNLQUdFX1ZFUlNJT04pKSAkQCBicmx0dHlfam5pLiRPICQoTERMSUJTKQorCiticmx0dHlfam5pLiRPOgorCSQoQ0MpICQoTElCQ0ZMQUdTKSAtYyAkKFNSQ19ESVIpL2JybHR0eV9qbmkuYworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK0JSTFRUWV9UUlRYVF9PQkpFQ1RTID0gYnJsdHR5LXRydHh0LiRPICQoUFJPR1JBTV9PQkpFQ1RTKSAkKFRUQl9PQkpFQ1RTKSAkKFBSRUZTX09CSkVDVFMpICQoQ0hBUlNFVF9PQkpFQ1RTKSBkYXRhYXJlYS4kTworCiticmx0dHktdHJ0eHQkWDogJChCUkxUVFlfVFJUWFRfT0JKRUNUUykKKwkkKENDKSAkKExERkxBR1MpIC1vICRAICQoQlJMVFRZX1RSVFhUX09CSkVDVFMpICQoTERMSUJTKQorCiticmx0dHktdHJ0eHQuJE86CisJJChDQykgJChDRkxBR1MpIC1jICQoU1JDX0RJUikvYnJsdHR5LXRydHh0LmMKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitCUkxUVFlfTFNDTURTX09CSkVDVFMgPSBicmx0dHktbHNjbWRzLiRPICQoUFJPR1JBTV9PQkpFQ1RTKSBrdGJfY21kcy4kTyBjbWQuJE8KKworYnJsdHR5LWxzY21kcyRYOiAkKEJSTFRUWV9MU0NNRFNfT0JKRUNUUykKKwkkKENDKSAkKExERkxBR1MpIC1vICRAICQoQlJMVFRZX0xTQ01EU19PQkpFQ1RTKSAkKExETElCUykKKworYnJsdHR5LWxzY21kcy4kTzoKKwkkKENDKSAkKENGTEFHUykgLWMgJChTUkNfRElSKS9icmx0dHktbHNjbWRzLmMKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitCUkxUVFlfTFNJTkNfT0JKRUNUUyA9IGJybHR0eS1sc2luYy4kTyAkKFBST0dSQU1fT0JKRUNUUykKKworYnJsdHR5LWxzaW5jJFg6ICQoQlJMVFRZX0xTSU5DX09CSkVDVFMpCisJJChDQykgJChMREZMQUdTKSAtbyAkQCAkKEJSTFRUWV9MU0lOQ19PQkpFQ1RTKSAkKExETElCUykKKworYnJsdHR5LWxzaW5jLiRPOgorCSQoQ0MpICQoQ0ZMQUdTKSAtYyAkKFNSQ19ESVIpL2JybHR0eS1sc2luYy5jCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworQlJMVEVTVF9PQkpFQ1RTID0gYnJsdGVzdC4kTyAkKFBST0dSQU1fT0JKRUNUUykgcmVwb3J0LiRPICQoVFRCX09CSkVDVFMpICQoS1RCX09CSkVDVFMpICQoUFJFRlNfT0JKRUNUUykgJChDSEFSU0VUX09CSkVDVFMpIGRhdGFhcmVhLiRPIGNtZC4kTyBjbWRfcXVldWUuJE8gZHJpdmVycy4kTyBkcml2ZXIuJE8gJChCUkFJTExFX09CSkVDVFMpIGhpZGtleXMuJE8gbGVhcm4uJE8KKworYnJsdGVzdCRYOiAkKEJSTFRFU1RfT0JKRUNUUykKKwkkKENDKSAkKExERkxBR1MpIC1vICRAICQoQlJMVEVTVF9PQkpFQ1RTKSAkKEJSQUlMTEVfRFJJVkVSX0xJQlJBUklFUykgJChVU0JfTElCUykgJChCTFVFVE9PVEhfTElCUykgJChISURfTElCUykgJChMRExJQlMpCisKK2JybHRlc3QuJE86CisJJChDQykgJChDRkxBR1MpIC1jICQoU1JDX0RJUikvYnJsdGVzdC5jCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworU1BLVEVTVF9PQkpFQ1RTID0gc3BrdGVzdC4kTyAkKFBST0dSQU1fT0JKRUNUUykgZHJpdmVycy4kTyBkcml2ZXIuJE8gJChTUEVFQ0hfT0JKRUNUUykgJChQUkVGU19PQkpFQ1RTKQorCitzcGt0ZXN0JFg6ICQoU1BLVEVTVF9PQkpFQ1RTKQorCSQoQ0MpICQoTERGTEFHUykgLW8gJEAgJChTUEtURVNUX09CSkVDVFMpICQoU1BFRUNIX0RSSVZFUl9MSUJSQVJJRVMpICQoTERMSUJTKQorCitzcGt0ZXN0LiRPOgorCSQoQ0MpICQoQ0ZMQUdTKSAtYyAkKFNSQ19ESVIpL3Nwa3Rlc3QuYworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK1NDUlRFU1RfT0JKRUNUUyA9IHNjcnRlc3QuJE8gJChQUk9HUkFNX09CSkVDVFMpICQoQ0hBUlNFVF9PQkpFQ1RTKSBkcml2ZXJzLiRPIGRyaXZlci4kTyAkKFNDUkVFTl9PQkpFQ1RTKSByZXBvcnQuJE8KKworc2NydGVzdCRYOiAkKFNDUlRFU1RfT0JKRUNUUykKKwkkKENDKSAkKExERkxBR1MpIC1vICRAICQoU0NSVEVTVF9PQkpFQ1RTKSAkKFNDUkVFTl9EUklWRVJfTElCUkFSSUVTKSAkKExETElCUykKKworc2NydGVzdC4kTzoKKwkkKENDKSAkKENGTEFHUykgLWMgJChTUkNfRElSKS9zY3J0ZXN0LmMKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitURVJNSU5BTF9FTVVMQVRPUl9PQkpFQ1RTID0gc2NyX3Rlcm1pbmFsLiRPIHNjcl9lbXVsYXRvci4kTyBtc2dfcXVldWUuJE8KKworc2NyX3Rlcm1pbmFsLiRPOgorCSQoQ0MpICQoQ0ZMQUdTKSAtYyAkKFNSQ19ESVIpL3Njcl90ZXJtaW5hbC5jCisKK3Njcl9lbXVsYXRvci4kTzoKKwkkKENDKSAkKENGTEFHUykgLWMgJChTUkNfRElSKS9zY3JfZW11bGF0b3IuYworCittc2dfcXVldWUuJE86CisJJChDQykgJChDRkxBR1MpIC1jICQoU1JDX0RJUikvbXNnX3F1ZXVlLmMKKworQlJMVFRZX1BUWV9PQkpFQ1RTID0gYnJsdHR5LXB0eS4kTyAkKFBST0dSQU1fT0JKRUNUUykgcHR5X29iamVjdC4kTyBwdHlfdGVybWluYWwuJE8gcHR5X3NjcmVlbi4kTyAkKFRFUk1JTkFMX0VNVUxBVE9SX09CSkVDVFMpCisKK2JybHR0eS1wdHkkWDogJChCUkxUVFlfUFRZX09CSkVDVFMpCisJJChDQykgJChMREZMQUdTKSAtbyAkQCAkKEJSTFRUWV9QVFlfT0JKRUNUUykgJChDVVJTRVNfTElCUykgJChMRExJQlMpCisKK2JybHR0eS1wdHkuJE86CisJJChDQykgJChDRkxBR1MpIC1jICQoU1JDX0RJUikvYnJsdHR5LXB0eS5jCisKK3B0eV9vYmplY3QuJE86CisJJChDQykgJChDRkxBR1MpIC1jICQoU1JDX0RJUikvcHR5X29iamVjdC5jCisKK3B0eV90ZXJtaW5hbC4kTzoKKwkkKENDKSAkKENGTEFHUykgLWMgJChTUkNfRElSKS9wdHlfdGVybWluYWwuYworCitwdHlfc2NyZWVuLiRPOgorCSQoQ0MpICQoQ0ZMQUdTKSAtYyAkKFNSQ19ESVIpL3B0eV9zY3JlZW4uYworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK0JSTFRUWV9UVU5FX09CSkVDVFMgPSBicmx0dHktdHVuZS4kTyB0dW5lX3V0aWxzLiRPIHR1bmVfYnVpbGRlci4kTyAkKFBST0dSQU1fT0JKRUNUUykgJChQUkVGU19PQkpFQ1RTKSAkKFRVTkVfT0JKRUNUUykKKworYnJsdHR5LXR1bmUkWDogJChCUkxUVFlfVFVORV9PQkpFQ1RTKQorCSQoQ0MpICQoTERGTEFHUykgLW8gJEAgJChCUkxUVFlfVFVORV9PQkpFQ1RTKSAkKFBDTV9MSUJTKSAkKE1JRElfTElCUykgJChMRExJQlMpCisKK2JybHR0eS10dW5lLiRPOgorCSQoQ0MpICQoQ0ZMQUdTKSAtYyAkKFNSQ19ESVIpL2JybHR0eS10dW5lLmMKKwordHVuZV91dGlscy4kTzoKKwkkKENDKSAkKExJQkNGTEFHUykgLWMgJChTUkNfRElSKS90dW5lX3V0aWxzLmMKKwordHVuZV9idWlsZGVyLiRPOgorCSQoQ0MpICQoTElCQ0ZMQUdTKSAtYyAkKFNSQ19ESVIpL3R1bmVfYnVpbGRlci5jCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworQlJMVFRZX01PUlNFX09CSkVDVFMgPSBicmx0dHktbW9yc2UuJE8gbW9yc2UuJE8gdHVuZV91dGlscy4kTyAkKFBST0dSQU1fT0JKRUNUUykgJChQUkVGU19PQkpFQ1RTKSAkKFRVTkVfT0JKRUNUUykKKworYnJsdHR5LW1vcnNlJFg6ICQoQlJMVFRZX01PUlNFX09CSkVDVFMpCisJJChDQykgJChMREZMQUdTKSAtbyAkQCAkKEJSTFRUWV9NT1JTRV9PQkpFQ1RTKSAkKFBDTV9MSUJTKSAkKE1JRElfTElCUykgJChMRExJQlMpCisKK2JybHR0eS1tb3JzZS4kTzoKKwkkKENDKSAkKENGTEFHUykgLWMgJChTUkNfRElSKS9icmx0dHktbW9yc2UuYworCittb3JzZS4kTzoKKwkkKENDKSAkKENGTEFHUykgLWMgJChTUkNfRElSKS9tb3JzZS5jCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworQVBJVEVTVF9PQkpFQ1RTID0gYXBpdGVzdC4kTyAkKFBST0dSQU1fT0JKRUNUUykgY21kLiRPIGNtZF9icmxhcGkuJE8gJChUVEJfT0JKRUNUUykgJChQUkVGU19PQkpFQ1RTKSAkKENIQVJTRVRfT0JKRUNUUykgZGF0YWFyZWEuJE8KKworYXBpdGVzdCRYOiAkKEFQSVRFU1RfT0JKRUNUUykgfCBhcGkKKwkkKENDKSAkKExERkxBR1MpIC1vICRAICQoQVBJVEVTVF9PQkpFQ1RTKSAkKEFQSV9MSUJTKSAkKExETElCUykKKworYXBpdGVzdC4kTzoKKwkkKENDKSAkKENGTEFHUykgLWMgJChTUkNfRElSKS9hcGl0ZXN0LmMKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCiticmFpbGxlLWRyaXZlcnM6ICQoQlVJTERfQVBJKQorCWZvciBkcml2ZXIgaW4gJChCUkFJTExFX0VYVEVSTkFMX0RSSVZFUl9OQU1FUyk7IFwKKwlkbyAoY2QgJChCTERfVE9QKSQoQlJMX0RJUikvJCRkcml2ZXIgJiYgJChNQUtFKSBicmFpbGxlLWRyaXZlcikgfHwgZXhpdCAxOyBcCisJZG9uZQorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK3NwZWVjaC1kcml2ZXJzOgorCWZvciBkcml2ZXIgaW4gJChTUEVFQ0hfRVhURVJOQUxfRFJJVkVSX05BTUVTKTsgXAorCWRvIChjZCAkKEJMRF9UT1ApJChTUEtfRElSKS8kJGRyaXZlciAmJiAkKE1BS0UpIHNwZWVjaC1kcml2ZXIpIHx8IGV4aXQgMTsgXAorCWRvbmUKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitzY3JlZW4tZHJpdmVyczoKKwlmb3IgZHJpdmVyIGluICQoU0NSRUVOX0VYVEVSTkFMX0RSSVZFUl9OQU1FUyk7IFwKKwlkbyAoY2QgJChCTERfVE9QKSQoU0NSX0RJUikvJCRkcml2ZXIgJiYgJChNQUtFKSBzY3JlZW4tZHJpdmVyKSB8fCBleGl0IDE7IFwKKwlkb25lCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworVEVYVF9UQUJMRV9GSUxFID0gJChTUkNfVE9QKSQoVEJMX0RJUikvJChURVhUX1RBQkxFU19TVUJESVJFQ1RPUlkpLyQoVEVYVF9UQUJMRSkkKFRFWFRfVEFCTEVfRVhURU5TSU9OKQordHRiLmF1dG8uaDogJChURVhUX1RBQkxFX0ZJTEUpIHRibDJoZXgkKFhfRk9SX0JVSUxEKQorCS4vdGJsMmhleCQoWF9GT1JfQlVJTEQpIC0tICQoVEVYVF9UQUJMRV9GSUxFKSA+JEAKKworQ09OVFJBQ1RJT05fVEFCTEVfRklMRSA9ICQoU1JDX1RPUCkkKFRCTF9ESVIpLyQoQ09OVFJBQ1RJT05fVEFCTEVTX1NVQkRJUkVDVE9SWSkvJChDT05UUkFDVElPTl9UQUJMRSkkKENPTlRSQUNUSU9OX1RBQkxFX0VYVEVOU0lPTikKK2N0Yi5hdXRvLmg6ICQoQ09OVFJBQ1RJT05fVEFCTEVfRklMRSkgdGJsMmhleCQoWF9GT1JfQlVJTEQpCisJLi90YmwyaGV4JChYX0ZPUl9CVUlMRCkgLS0gJChDT05UUkFDVElPTl9UQUJMRV9GSUxFKSA+JEAKKworQVRUUklCVVRFU19UQUJMRV9GSUxFID0gJChTUkNfVE9QKSQoVEJMX0RJUikvJChBVFRSSUJVVEVTX1RBQkxFU19TVUJESVJFQ1RPUlkpLyQoQVRUUklCVVRFU19UQUJMRSkkKEFUVFJJQlVURVNfVEFCTEVfRVhURU5TSU9OKQorYXRiLmF1dG8uaDogJChBVFRSSUJVVEVTX1RBQkxFX0ZJTEUpIHRibDJoZXgkKFhfRk9SX0JVSUxEKQorCS4vdGJsMmhleCQoWF9GT1JfQlVJTEQpIC0tICQoQVRUUklCVVRFU19UQUJMRV9GSUxFKSA+JEAKKworY21kcy5hdXRvLmg6ICQoU1JDX0RJUikvY21kcy5hd2sgJChDT01NQU5EU19ERVBFTkRFTkNJRVMpCisJJChBV0spIC1mICQoU1JDX0RJUikvY21kcy5hd2sgJChDT01NQU5EU19BUkdVTUVOVFMpID4kQAorCiticmwuYXV0by5oOiAkKFNSQ19ESVIpL21rZHJ2dGFiCisJJChTUkNfRElSKS9ta2RydnRhYiBCcmFpbGxlRHJpdmVyIGJybF9kcml2ZXJfICQoQlJBSUxMRV9JTlRFUk5BTF9EUklWRVJfQ09ERVMpID4kQAorCitzcGsuYXV0by5oOiAkKFNSQ19ESVIpL21rZHJ2dGFiCisJJChTUkNfRElSKS9ta2RydnRhYiBTcGVlY2hEcml2ZXIgc3BrX2RyaXZlcl8gJChTUEVFQ0hfSU5URVJOQUxfRFJJVkVSX0NPREVTKSA+JEAKKworc2NyLmF1dG8uaDogJChTUkNfRElSKS9ta2RydnRhYgorCSQoU1JDX0RJUikvbWtkcnZ0YWIgU2NyZWVuRHJpdmVyIHNjcl9kcml2ZXJfICQoU0NSRUVOX0lOVEVSTkFMX0RSSVZFUl9DT0RFUykgPiRACisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworWEJSTEFQSV9PQkpFQ1RTID0geGJybGFwaS4kTyAkKFhTRUxfT0JKRUNUKSAkKFBST0dSQU1fT0JKRUNUUykKKworeGJybGFwaSRYOiAkKFhCUkxBUElfT0JKRUNUUykgfCBhcGkKKwkkKENDKSAkKExERkxBR1MpIC1vICRAICQoWEJSTEFQSV9PQkpFQ1RTKSAkKEFQSV9MSUJTKSAkKFhLQl9MSUJTKSAkKFhGSVhFU19MSUJTKSAkKFgxMV9MSUJTKSAkKExETElCUykKKworeGJybGFwaS4kTzoKKwkkKENDKSAkKENGTEFHUykgJChYMTFfSU5DTFVERVMpIC1jICQoU1JDX0RJUikveGJybGFwaS5jCisKK3hzZWwuJE86CisJJChDQykgJChMSUJDRkxBR1MpICQoWDExX0lOQ0xVREVTKSAtYyAkKFNSQ19ESVIpL3hzZWwuYworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK0JSTFRUWV9DTElQX09CSkVDVFMgPSBicmx0dHktY2xpcC4kTyAkKFBST0dSQU1fT0JKRUNUUykKKworYnJsdHR5LWNsaXAkWDogJChCUkxUVFlfQ0xJUF9PQkpFQ1RTKSB8IGFwaQorCSQoQ0MpICQoTERGTEFHUykgLW8gJEAgJChCUkxUVFlfQ0xJUF9PQkpFQ1RTKSAkKEFQSV9MSUJTKSAkKExETElCUykKKworYnJsdHR5LWNsaXAuJE86CisJJChDQykgJChDRkxBR1MpIC1jICQoU1JDX0RJUikvYnJsdHR5LWNsaXAuYworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK1RCTDJIRVhfT0JKRUNUU19GT1JfQlVJTEQgPSB0YmwyaGV4LiQoT19GT1JfQlVJTEQpICQoUFJPR1JBTV9PQkpFQ1RTX0ZPUl9CVUlMRCkgZGF0YWFyZWEuJChPX0ZPUl9CVUlMRCkgdHRiX2NvbXBpbGUuJChPX0ZPUl9CVUlMRCkgdHRiX25hdGl2ZS4kKE9fRk9SX0JVSUxEKSAkKENIQVJTRVRfT0JKRUNUU19GT1JfQlVJTEQpIGN0Yl9jb21waWxlLiQoT19GT1JfQlVJTEQpIGNsZHIuJChPX0ZPUl9CVUlMRCkgYXRiX2NvbXBpbGUuJChPX0ZPUl9CVUlMRCkKK1RCTDJIRVhfT0JKRUNUUyA9ICQoVEJMMkhFWF9PQkpFQ1RTX0ZPUl9CVUlMRDouJChPX0ZPUl9CVUlMRCk9LiRCKQorCit0YmwyaGV4JChYX0ZPUl9CVUlMRCk6ICQoVEJMMkhFWF9PQkpFQ1RTKQorCSQoQ0NfRk9SX0JVSUxEKSAkKExERkxBR1NfRk9SX0JVSUxEKSAtbyAkQCAkKFRCTDJIRVhfT0JKRUNUUykgJChFWFBBVF9MSUJTX0ZPUl9CVUlMRCkgJChMRExJQlNfRk9SX0JVSUxEKQorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK2NoZWNrLWJyYWlsbGUtZHJpdmVyczogYnJsdHR5JFggJChBUElfTElCX1ZFUlNJT05FRCkgfCBicmFpbGxlLWRyaXZlcnMKKwlAZWNobyBjaGVja2luZyBicmFpbGxlIGRyaXZlcnMKKwlzZXQgLS0gJChCUkFJTExFX0RSSVZFUl9DT0RFUykgJiYgXAorCWZvciBjb2RlOyBkbyBcCisJTERfTElCUkFSWV9QQVRIPSQoQkxEX0RJUikgXAorCS4vYnJsdHR5IC12IC1sd2FybmluZyAtTiAtZSAtZiAvZGV2L251bGwgLWIgJCRjb2RlIC1zIG5vIC1EICIkKEJMRF9UT1ApJChEUlZfRElSKSIgLVQgIiQoQkxEX1RPUCkkKFRCTF9ESVIpIiAyPiYxIHx8IGV4aXQgMTE7IFwKKwlkb25lCisKK2NoZWNrLXNwZWVjaC1kcml2ZXJzOiBicmx0dHkkWCB8IHNwZWVjaC1kcml2ZXJzCisJQGVjaG8gY2hlY2tpbmcgc3BlZWNoIGRyaXZlcnMKKwlzZXQgLS0gJChTUEVFQ0hfRFJJVkVSX0NPREVTKSAmJiBcCisJZm9yIGNvZGU7IGRvIFwKKwkuL2JybHR0eSAtdiAtbHdhcm5pbmcgLU4gLWUgLWYgL2Rldi9udWxsIC1iIG5vIC1zICQkY29kZSAtRCAiJChCTERfVE9QKSQoRFJWX0RJUikiIC1UICIkKEJMRF9UT1ApJChUQkxfRElSKSIgMj4mMSB8fCBleGl0IDExOyBcCisJZG9uZQorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK2NoZWNrLXB1YmxpYy1oZWFkZXJzOgorCUBlY2hvIGNoZWNraW5nIHB1YmxpYyBoZWFkZXJzCisJJChTUkNfVE9QKWNoa2hkcnMgJChTUkNfVE9QKSQoSERSX0RJUikKKworY2hlY2stYWxsOiBjaGVjay10ZXh0LXRhYmxlcyBjaGVjay1jb250cmFjdGlvbi10YWJsZXMgY2hlY2stYXR0cmlidXRlcy10YWJsZXMgY2hlY2sta2V5Ym9hcmQtdGFibGVzIGNoZWNrLWlucHV0LXRhYmxlcyBjaGVjay1icmFpbGxlLWRyaXZlcnMgY2hlY2stc3BlZWNoLWRyaXZlcnMgY2hlY2stcHVibGljLWhlYWRlcnMKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitpbnN0YWxsOjogaW5zdGFsbC1wcm9ncmFtcyBpbnN0YWxsLXRhYmxlcyAkKElOU1RBTExfRFJJVkVSUykgaW5zdGFsbC1jb3JlLWhlYWRlcnMgJChJTlNUQUxMX01FU1NBR0VTKSBpbnN0YWxsLW1hbnBhZ2VzIGluc3RhbGwtcGtnY29uZmlnLWZpbGUgJChJTlNUQUxMX0FQSSkKKworaW5zdGFsbC1wcm9ncmFtczogaW5zdGFsbC1jb21tYW5kcyBpbnN0YWxsLXRvb2xzCisKK2luc3RhbGwtcHJvZ3JhbS1kaXJlY3RvcmllczogaW5zdGFsbC1wcm9ncmFtLWRpcmVjdG9yeQorCitpbnN0YWxsLWNvbW1hbmRzOiBhbGwtY29tbWFuZHMgaW5zdGFsbC1wcm9ncmFtLWRpcmVjdG9yaWVzICQoSU5TVEFMTF9CUkxUVFlfUFRZKQorCSQoSU5TVEFMTF9QUk9HUkFNKSBicmx0dHkkWCAkKElOU1RBTExfUFJPR1JBTV9ESVJFQ1RPUlkpIAorCSQoSU5TVEFMTF9QUk9HUkFNKSBicmx0dHktdHJ0eHQkWCAkKElOU1RBTExfUFJPR1JBTV9ESVJFQ1RPUlkpIAorCSQoSU5TVEFMTF9QUk9HUkFNKSBicmx0dHktdHRiJFggJChJTlNUQUxMX1BST0dSQU1fRElSRUNUT1JZKSAKKwkkKElOU1RBTExfUFJPR1JBTSkgYnJsdHR5LWN0YiRYICQoSU5TVEFMTF9QUk9HUkFNX0RJUkVDVE9SWSkgCisJJChJTlNUQUxMX1BST0dSQU0pIGJybHR0eS1hdGIkWCAkKElOU1RBTExfUFJPR1JBTV9ESVJFQ1RPUlkpIAorCSQoSU5TVEFMTF9QUk9HUkFNKSBicmx0dHkta3RiJFggJChJTlNUQUxMX1BST0dSQU1fRElSRUNUT1JZKSAKKwkkKElOU1RBTExfUFJPR1JBTSkgYnJsdHR5LXR1bmUkWCAkKElOU1RBTExfUFJPR1JBTV9ESVJFQ1RPUlkpIAorCSQoSU5TVEFMTF9QUk9HUkFNKSBicmx0dHktbW9yc2UkWCAkKElOU1RBTExfUFJPR1JBTV9ESVJFQ1RPUlkpIAorCSQoSU5TVEFMTF9QUk9HUkFNKSBicmx0dHktbHNjbWRzJFggJChJTlNUQUxMX1BST0dSQU1fRElSRUNUT1JZKSAKKwkkKElOU1RBTExfUFJPR1JBTSkgYnJsdHR5LWhpZCRYICQoSU5TVEFMTF9QUk9HUkFNX0RJUkVDVE9SWSkgCisKK2luc3RhbGwtYnJsdHR5LXB0eTogaW5zdGFsbC1jb21tYW5kcy1kaXJlY3RvcnkKKwkkKElOU1RBTExfUFJPR1JBTSkgYnJsdHR5LXB0eSRYICQoSU5TVEFMTF9DT01NQU5EU19ESVJFQ1RPUlkpIAorCitpbnN0YWxsLXRvb2xzOiBhbGwtdG9vbHMgaW5zdGFsbC1wcm9ncmFtLWRpcmVjdG9yaWVzCisJJChJTlNUQUxMX1BST0dSQU0pIGJybHR0eS1jbGRyJFggJChJTlNUQUxMX1BST0dSQU1fRElSRUNUT1JZKSAKKwkkKElOU1RBTExfUFJPR1JBTSkgYnJsdHR5LWxzaW5jJFggJChJTlNUQUxMX1BST0dSQU1fRElSRUNUT1JZKSAKKwkkKElOU1RBTExfREFUQSkgJChCTERfVE9QKWJybHR0eS1jb25maWcuc2ggJChJTlNUQUxMX1BST0dSQU1fRElSRUNUT1JZKQorCSQoSU5TVEFMTF9EQVRBKSAkKFNSQ19UT1ApYnJsdHR5LXByb2xvZ3VlLiogJChJTlNUQUxMX1BST0dSQU1fRElSRUNUT1JZKQorCSQoSU5TVEFMTF9TQ1JJUFQpICQoU1JDX1RPUClicmx0dHktbWt1c2VyICQoSU5TVEFMTF9QUk9HUkFNX0RJUkVDVE9SWSkKKwkkKElOU1RBTExfU0NSSVBUKSAkKFNSQ19UT1ApYnJsdHR5LXNldGNhcHMgJChJTlNUQUxMX1BST0dSQU1fRElSRUNUT1JZKQorCSQoSU5TVEFMTF9TQ1JJUFQpICQoU1JDX1RPUClicmx0dHktZ2Vua2V5ICQoSU5TVEFMTF9QUk9HUkFNX0RJUkVDVE9SWSkKKwkkKElOU1RBTExfU0NSSVBUKSAkKFNSQ19UT1ApYnJsdHR5LXRlcm0gJChJTlNUQUxMX1BST0dSQU1fRElSRUNUT1JZKQorCSQoSU5TVEFMTF9TQ1JJUFQpICQoU1JDX1RPUClicmx0dHktdHR5c2l6ZSAkKElOU1RBTExfUFJPR1JBTV9ESVJFQ1RPUlkpCisKK1hCUkxBUElfWDExX0FVVE9TVEFSVF9GSUxFID0gOTB4YnJsYXBpCitYQlJMQVBJX0dETV9BVVRPU1RBUlRfRklMRSA9IHhicmxhcGkuZGVza3RvcAorCitpbnN0YWxsLXhicmxhcGk6IHhicmxhcGkkWCBpbnN0YWxsLXByb2dyYW0tZGlyZWN0b3J5IGluc3RhbGwteDExLWF1dG9zdGFydC1kaXJlY3RvcnkgaW5zdGFsbC1nZG0tYXV0b3N0YXJ0LWRpcmVjdG9yeQorCSQoSU5TVEFMTF9QUk9HUkFNKSB4YnJsYXBpJFggJChJTlNUQUxMX1BST0dSQU1fRElSRUNUT1JZKSAKKwkkKElOU1RBTExfREFUQSkgJChCTERfVE9QKSQoRE9DX0RJUikveGJybGFwaS4xICQoSU5TVEFMTF9NQU4xX0RJUkVDVE9SWSkKKwkkKElOU1RBTExfREFUQSkgJChCTERfVE9QKUF1dG9zdGFydC9YMTEvJChYQlJMQVBJX1gxMV9BVVRPU1RBUlRfRklMRSkgJChJTlNUQUxMX1gxMV9BVVRPU1RBUlRfRElSRUNUT1JZKQorCSQoSU5TVEFMTF9EQVRBKSAkKFNSQ19UT1ApQXV0b3N0YXJ0L2dkbS8kKFhCUkxBUElfR0RNX0FVVE9TVEFSVF9GSUxFKSAkKElOU1RBTExfR0RNX0FVVE9TVEFSVF9ESVJFQ1RPUlkpCisKK2luc3RhbGwtdGFibGVzOiAkKElOU1RBTExfVEVYVF9UQUJMRVMpICQoSU5TVEFMTF9DT05UUkFDVElPTl9UQUJMRVMpICQoSU5TVEFMTF9BVFRSSUJVVEVTX1RBQkxFUykgaW5zdGFsbC1rZXlib2FyZC10YWJsZXMgaW5zdGFsbC1pbnB1dC10YWJsZXMKKworaW5zdGFsbC10ZXh0LXRhYmxlczogaW5zdGFsbC10ZXh0LXRhYmxlcy1kaXJlY3RvcnkKKwkkKElOU1RBTExfREFUQSkgJChTUkNfVE9QKSQoVEJMX0RJUikvJChURVhUX1RBQkxFU19TVUJESVJFQ1RPUlkpLyokKFRFWFRfVEFCTEVfRVhURU5TSU9OKSAkKElOU1RBTExfVEVYVF9UQUJMRVNfRElSRUNUT1JZKQorCSQoSU5TVEFMTF9EQVRBKSAkKFNSQ19UT1ApJChUQkxfRElSKS8kKFRFWFRfVEFCTEVTX1NVQkRJUkVDVE9SWSkvKiQoVEVYVF9TVUJUQUJMRV9FWFRFTlNJT04pICQoSU5TVEFMTF9URVhUX1RBQkxFU19ESVJFQ1RPUlkpCisKK2luc3RhbGwtY29udHJhY3Rpb24tdGFibGVzOiBpbnN0YWxsLWNvbnRyYWN0aW9uLXRhYmxlcy1kaXJlY3RvcnkKKwkkKElOU1RBTExfREFUQSkgJChTUkNfVE9QKSQoVEJMX0RJUikvJChDT05UUkFDVElPTl9UQUJMRVNfU1VCRElSRUNUT1JZKS8qJChDT05UUkFDVElPTl9UQUJMRV9FWFRFTlNJT04pICQoSU5TVEFMTF9DT05UUkFDVElPTl9UQUJMRVNfRElSRUNUT1JZKQorCWZvciB0YWJsZSBpbiBsYXRleC1hY2Nlc3M7IGRvIFwKKwkkKElOU1RBTExfU0NSSVBUKSAkKFNSQ19UT1ApJChUQkxfRElSKS8kKENPTlRSQUNUSU9OX1RBQkxFU19TVUJESVJFQ1RPUlkpLyQkdGFibGUkKENPTlRSQUNUSU9OX1RBQkxFX0VYVEVOU0lPTikgJChJTlNUQUxMX0NPTlRSQUNUSU9OX1RBQkxFU19ESVJFQ1RPUlkpOyBcCisJZG9uZQorCSQoSU5TVEFMTF9EQVRBKSAkKFNSQ19UT1ApJChUQkxfRElSKS8kKENPTlRSQUNUSU9OX1RBQkxFU19TVUJESVJFQ1RPUlkpLyokKENPTlRSQUNUSU9OX1NVQlRBQkxFX0VYVEVOU0lPTikgJChJTlNUQUxMX0NPTlRSQUNUSU9OX1RBQkxFU19ESVJFQ1RPUlkpCisKK2luc3RhbGwtYXR0cmlidXRlcy10YWJsZXM6IGluc3RhbGwtYXR0cmlidXRlcy10YWJsZXMtZGlyZWN0b3J5CisJJChJTlNUQUxMX0RBVEEpICQoU1JDX1RPUCkkKFRCTF9ESVIpLyQoQVRUUklCVVRFU19UQUJMRVNfU1VCRElSRUNUT1JZKS8qJChBVFRSSUJVVEVTX1RBQkxFX0VYVEVOU0lPTikgJChJTlNUQUxMX0FUVFJJQlVURVNfVEFCTEVTX0RJUkVDVE9SWSkKKwkjJChJTlNUQUxMX0RBVEEpICQoU1JDX1RPUCkkKFRCTF9ESVIpLyQoQVRUUklCVVRFU19UQUJMRVNfU1VCRElSRUNUT1JZKS8qJChBVFRSSUJVVEVTX1NVQlRBQkxFX0VYVEVOU0lPTikgJChJTlNUQUxMX0FUVFJJQlVURVNfVEFCTEVTX0RJUkVDVE9SWSkKKworaW5zdGFsbC1rZXlib2FyZC10YWJsZXM6IGluc3RhbGwta2V5Ym9hcmQtdGFibGVzLWRpcmVjdG9yeQorCSQoSU5TVEFMTF9EQVRBKSAkKFNSQ19UT1ApJChUQkxfRElSKS8kKEtFWUJPQVJEX1RBQkxFU19TVUJESVJFQ1RPUlkpLyokKEtFWV9UQUJMRV9FWFRFTlNJT04pICQoSU5TVEFMTF9LRVlCT0FSRF9UQUJMRVNfRElSRUNUT1JZKQorCSQoSU5TVEFMTF9EQVRBKSAkKFNSQ19UT1ApJChUQkxfRElSKS8kKEtFWUJPQVJEX1RBQkxFU19TVUJESVJFQ1RPUlkpLyokKEtFWV9TVUJUQUJMRV9FWFRFTlNJT04pICQoSU5TVEFMTF9LRVlCT0FSRF9UQUJMRVNfRElSRUNUT1JZKQorCitpbnN0YWxsLWlucHV0LXRhYmxlczogaW5zdGFsbC1pbnB1dC10YWJsZXMtZGlyZWN0b3J5CisJY2QgJChTUkNfVE9QKSQoVEJMX0RJUikvJChJTlBVVF9UQUJMRVNfU1VCRElSRUNUT1JZKSAmJiBcCisJc2V0IC0tICokKEtFWV9TVUJUQUJMRV9FWFRFTlNJT04pICovKiQoS0VZX1RBQkxFX0VYVEVOU0lPTikgKi8qJChLRVlfU1VCVEFCTEVfRVhURU5TSU9OKSAqLyokKEtFWV9IRUxQX0VYVEVOU0lPTikgJiYgXAorCWZvciBmaWxlOyBkbyBcCisJZHJpdmVyPWBkaXJuYW1lICQkZmlsZWAgJiYgXAorCXRhcmdldD0kKElOU1RBTExfSU5QVVRfVEFCTEVTX0RJUkVDVE9SWSkvJCRkcml2ZXIgJiYgXAorCSQoSU5TVEFMTF9ESVJFQ1RPUlkpICQkdGFyZ2V0ICYmIFwKKwkkKElOU1RBTExfREFUQSkgJCRmaWxlICQkdGFyZ2V0OyBcCisJZG9uZQorCitpbnN0YWxsLWRyaXZlcnM6ICQoQlJBSUxMRV9EUklWRVJTKSAkKFNQRUVDSF9EUklWRVJTKSAkKFNDUkVFTl9EUklWRVJTKSBpbnN0YWxsLWRyaXZlcnMtZGlyZWN0b3J5CisJJChJTlNUQUxMX1BST0dSQU0pICQoQkxEX1RPUCkkKERSVl9ESVIpLyouJChNT0RfRVhUKSAkKElOU1RBTExfRFJJVkVSU19ESVJFQ1RPUlkpCisKK0NPUkVfSEVBREVSUyA9ICQoU1JDX1RPUClIZWFkZXJzLyouaCAkKEJMRF9UT1ApY29uZmlnLmggJChCTERfVE9QKWZvcmJ1aWxkLmgKKworaW5zdGFsbC1jb3JlLWhlYWRlcnM6IGluc3RhbGwtaW5jbHVkZS1kaXJlY3RvcnkKKwkkKElOU1RBTExfREFUQSkgJChDT1JFX0hFQURFUlMpICQoSU5TVEFMTF9JTkNMVURFX0RJUkVDVE9SWSkKKworaW5zdGFsbC1tZXNzYWdlczoKKwljZCAkKEJMRF9UT1ApJChNU0dfRElSKSAmJiAkKE1BS0UpIGluc3RhbGwKKworaW5zdGFsbC1tYW5wYWdlczogaW5zdGFsbC1tYW4xLWRpcmVjdG9yeQorCSQoSU5TVEFMTF9EQVRBKSAkKEJMRF9UT1ApJChET0NfRElSKS9icmx0dHkuMSAkKElOU1RBTExfTUFOMV9ESVJFQ1RPUlkpCisKK1BLR0NPTkZJR19GSUxFX05BTUUgPSBicmx0dHkucGMKK1BLR0NPTkZJR19GSUxFX1BBVEggPSAkKElOU1RBTExfUEtHQ09ORklHX0RJUkVDVE9SWSkvJChQS0dDT05GSUdfRklMRV9OQU1FKQoraW5zdGFsbC1wa2djb25maWctZmlsZTogaW5zdGFsbC1wa2djb25maWctZGlyZWN0b3J5CisJJChJTlNUQUxMX0RBVEEpICQoQkxEX1RPUCkkKFBLR0NPTkZJR19GSUxFX05BTUUpICQoUEtHQ09ORklHX0ZJTEVfUEFUSCkKKwktJChTUkNfVE9QKWdldHJldmlkIC1wICJyZXZpc2lvbl9pZGVudGlmaWVyPSIgJChTUkNfVE9QKSA+PiQoUEtHQ09ORklHX0ZJTEVfUEFUSCkKKworaW5zdGFsbC1kb2N1bWVudHM6IGluc3RhbGwtZG9jdW1lbnQtZGlyZWN0b3J5IGJybHR0eS1rdGIkWCAkKEJSQUlMTEVfRFJJVkVSUykKKwljZCAkKEJMRF9UT1ApJChET0NfRElSKSAmJiAkKE1BS0UpIGFsbAorCSQoU1JDX1RPUClta2RvY3MgLW8gJChJTlNUQUxMX0RPQ1VNRU5UX0RJUkVDVE9SWSkgLXMgJChTUkNfVE9QKSAtYiAkKEJMRF9UT1ApCisKK2luc3RhbGwtYXBpOiAkKElOU1RBTExfQVBJX0xJQlJBUklFUykgaW5zdGFsbC1hcGktaGVhZGVycyBpbnN0YWxsLWFwaS1tYW5wYWdlcyBpbnN0YWxsLWFwaS1rZXkgaW5zdGFsbC1hcGktY29tbWFuZHMgJChJTlNUQUxMX1hCUkxBUEkpICQoSU5TVEFMTF9BUElfQklORElOR1MpCisKK2luc3RhbGwtYXBpLWxpYnJhcmllczogJChBUElfTElCKSAkKEFQSV9BUkMpIGluc3RhbGwtYXBpbGliLWRpcmVjdG9yeSBpbnN0YWxsLWFwaXNvYy1kaXJlY3RvcnkKKwkkKElOU1RBTExfUFJPR1JBTSkgJChBUElfTElCKSAkKElOU1RBTExfQVBJTElCX0RJUkVDVE9SWSkvJChBUElfTElCKS4kKEFQSV9SRUxFQVNFKQorCSQoU1lNTElOSykgLWYgJChBUElfTElCKS4kKEFQSV9SRUxFQVNFKSAkKElOU1RBTExfQVBJTElCX0RJUkVDVE9SWSkvJChBUElfTElCKQorCSQoU1lNTElOSykgLWYgJChBUElfTElCKS4kKEFQSV9SRUxFQVNFKSAkKElOU1RBTExfQVBJTElCX0RJUkVDVE9SWSkvJChBUElfTElCKS4kKEFQSV9WRVJTSU9OKQorCSQoQ09ORkxJQkRJUikgJChJTlNUQUxMX0FQSUxJQl9ESVJFQ1RPUlkpCisJJChJTlNUQUxMX0RBVEEpICQoQVBJX0FSQykgJChJTlNUQUxMX0FQSUxJQl9ESVJFQ1RPUlkpCisKK2luc3RhbGwtYXBpLWxpYnJhcmllcy13aW5kb3dzOiAkKEFQSV9ETEwpICQoQVBJX0FSQykgaW5zdGFsbC1wcm9ncmFtLWRpcmVjdG9yeSBpbnN0YWxsLWFwaWxpYi1kaXJlY3RvcnkKKwkkKElOU1RBTExfUFJPR1JBTSkgJChBUElfRExMKSAkKElOU1RBTExfUFJPR1JBTV9ESVJFQ1RPUlkpCisJJChJTlNUQUxMX0RBVEEpICQoQVBJX0lNUExJQikgJChJTlNUQUxMX0FQSUxJQl9ESVJFQ1RPUlkpLyQoQVBJX0lNUExJQl9WRVJTSU9ORUQpCisJY2QgJChJTlNUQUxMX0FQSUxJQl9ESVJFQ1RPUlkpICYmICQoU1lNTElOSykgLWYgJChBUElfSU1QTElCX1ZFUlNJT05FRCkgJChBUElfSU1QTElCKQorCSQoSU5TVEFMTF9EQVRBKSAkKEFQSV9BUkMpICQoSU5TVEFMTF9BUElMSUJfRElSRUNUT1JZKQorCSQoSU5TVEFMTF9EQVRBKSAkKEFQSV9ERUYpICQoSU5TVEFMTF9BUElMSUJfRElSRUNUT1JZKQorCitpbnN0YWxsLWFwaS1oZWFkZXJzOiBicmxhcGlfY29uc3RhbnRzLmggYnJsYXBpX2JybGRlZnMuYXV0by5oIGluc3RhbGwtYXBpaGRyLWRpcmVjdG9yeSBpbnN0YWxsLWluY2x1ZGUtZGlyZWN0b3J5CisJJChJTlNUQUxMX0RBVEEpIGJybGFwaS5oICQoSU5TVEFMTF9BUElIRFJfRElSRUNUT1JZKQorCSQoSU5TVEFMTF9EQVRBKSBicmxhcGlfY29uc3RhbnRzLmggJChJTlNUQUxMX0FQSUhEUl9ESVJFQ1RPUlkpCisJJChJTlNUQUxMX0RBVEEpICQoU1JDX0RJUikvYnJsYXBpX2tleWNvZGVzLmggJChJTlNUQUxMX0FQSUhEUl9ESVJFQ1RPUlkpCisJJChJTlNUQUxMX0RBVEEpICQoU1JDX0RJUikvYnJsYXBpX3BhcmFtLmggJChJTlNUQUxMX0FQSUhEUl9ESVJFQ1RPUlkpCisJJChJTlNUQUxMX0RBVEEpICQoU1JDX0RJUikvYnJsYXBpX3Byb3RvY29sLmggJChJTlNUQUxMX0FQSUhEUl9ESVJFQ1RPUlkpCisJJChJTlNUQUxMX0RBVEEpIGJybGFwaV9icmxkZWZzLmF1dG8uaCAkKElOU1RBTExfQVBJSERSX0RJUkVDVE9SWSkvYnJsYXBpX2JybGRlZnMuaAorCSQoSU5TVEFMTF9EQVRBKSAkKFNSQ19ESVIpL2FwaS5oICQoSU5TVEFMTF9JTkNMVURFX0RJUkVDVE9SWSkKKwkkKElOU1RBTExfREFUQSkgJChTUkNfRElSKS9icmxkZWZzLmggJChJTlNUQUxMX0lOQ0xVREVfRElSRUNUT1JZKQorCitpbnN0YWxsLWFwaS1tYW5wYWdlczogaW5zdGFsbC1tYW4zLWRpcmVjdG9yeQorCWNkICQoQkxEX1RPUCkkKERPQ19ESVIpICYmICQoTUFLRSkgbWFuMworCXNldCAtLSAkKEJMRF9UT1ApJChET0NfRElSKS9CcmxBUElyZWYvbWFuL21hbjMvYnJsYXBpXyouMyAmJiBbIC1mICQkMSBdIHx8IGV4aXQgMCAmJiBcCisJJChJTlNUQUxMX0RBVEEpICQkKiAkKElOU1RBTExfTUFOM19ESVJFQ1RPUlkpCisKK2luc3RhbGwtYXBpLWtleToKKwlmaWxlPSQoc3lzY29uZmRpcikvJChBUElfQVVUSEZJTEUpICYmIFwKKwlpZiB0ZXN0ICEgLWYgJCRmaWxlIC1hIC13ICQoc3lzY29uZmRpcikgLWEgLXogIiQoSU5TVEFMTF9ST09UKSI7IFwKKwl0aGVuICQoU1JDX1RPUClicmx0dHktZ2Vua2V5IC1mICQkZmlsZTsgZmkKKworaW5zdGFsbC1hcGktY29tbWFuZHM6IGFsbC1icmx0dHktY2xpcAorCSQoSU5TVEFMTF9QUk9HUkFNKSBicmx0dHktY2xpcCRYICQoSU5TVEFMTF9QUk9HUkFNX0RJUkVDVE9SWSkgCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKwordW5pbnN0YWxsOjogdW5pbnN0YWxsLXByb2dyYW1zIHVuaW5zdGFsbC10YWJsZXMgdW5pbnN0YWxsLWRyaXZlcnMgdW5pbnN0YWxsLW1lc3NhZ2VzIHVuaW5zdGFsbC1tYW5wYWdlcyB1bmluc3RhbGwtcGtnY29uZmlnLWZpbGUgdW5pbnN0YWxsLWRvY3VtZW50cyB1bmluc3RhbGwtaGVhZGVycyB1bmluc3RhbGwtYXBpLWJpbmRpbmdzCisKK3VuaW5zdGFsbC1wcm9ncmFtczoKKwktcm0gLWYgJChJTlNUQUxMX1BST0dSQU1fRElSRUNUT1JZKS9icmx0dHkkWAorCS1ybSAtZiAkKElOU1RBTExfUFJPR1JBTV9ESVJFQ1RPUlkpL2JybHR0eS0qCisJLXJtIC1mICQoSU5TVEFMTF9DT01NQU5EU19ESVJFQ1RPUlkpL2JybHR0eS0qCisJLXJtIC1mICQoSU5TVEFMTF9QUk9HUkFNX0RJUkVDVE9SWSkveGJybGFwaSRYCisJLXJtIC1mICQoSU5TVEFMTF9YMTFfQVVUT1NUQVJUX0RJUkVDVE9SWSkvJChYQlJMQVBJX1gxMV9BVVRPU1RBUlRfRklMRSkKKwktcm0gLWYgJChJTlNUQUxMX0dETV9BVVRPU1RBUlRfRElSRUNUT1JZKS8kKFhCUkxBUElfR0RNX0FVVE9TVEFSVF9GSUxFKQorCit1bmluc3RhbGwtdGFibGVzOgorCS1ybSAtZiAtciAkKElOU1RBTExfVEVYVF9UQUJMRVNfRElSRUNUT1JZKQorCS1ybSAtZiAtciAkKElOU1RBTExfQ09OVFJBQ1RJT05fVEFCTEVTX0RJUkVDVE9SWSkKKwktcm0gLWYgLXIgJChJTlNUQUxMX0FUVFJJQlVURVNfVEFCTEVTX0RJUkVDVE9SWSkKKwktcm0gLWYgLXIgJChJTlNUQUxMX0tFWUJPQVJEX1RBQkxFU19ESVJFQ1RPUlkpCisJLXJtIC1mIC1yICQoSU5TVEFMTF9JTlBVVF9UQUJMRVNfRElSRUNUT1JZKQorCS1bICEgLWQgJChJTlNUQUxMX1RBQkxFU19ESVJFQ1RPUlkpIF0gfHwgcm1kaXIgJChJTlNUQUxMX1RBQkxFU19ESVJFQ1RPUlkpCisKK3VuaW5zdGFsbC1kcml2ZXJzOiAkKFVOSU5TVEFMTF9BUElfTElCUkFSSUVTKQorCS1ybSAtZiAkKElOU1RBTExfRFJJVkVSU19ESVJFQ1RPUlkpLyQoTElCX05BTUUpKgorCS1bICEgLWQgJChJTlNUQUxMX0RSSVZFUlNfRElSRUNUT1JZKSBdIHx8IHJtZGlyICQoSU5TVEFMTF9EUklWRVJTX0RJUkVDVE9SWSkKKwordW5pbnN0YWxsLW1lc3NhZ2VzOgorCWNkICQoQkxEX1RPUCkkKE1TR19ESVIpICYmICQoTUFLRSkgdW5pbnN0YWxsCisKK3VuaW5zdGFsbC1tYW5wYWdlczoKKwktcm0gLWYgJChJTlNUQUxMX1JPT1QpJChNQU5QQUdFX0RJUkVDVE9SWSkvbWFuMS9icmx0dHkuMQorCS1ybSAtZiAkKElOU1RBTExfUk9PVCkkKE1BTlBBR0VfRElSRUNUT1JZKS9tYW4xL3hicmxhcGkuMQorCS1ybSAtZiAkKElOU1RBTExfTUFOM19ESVJFQ1RPUlkpL2JybGFwaV8qLjMKKwordW5pbnN0YWxsLXBrZ2NvbmZpZy1maWxlOgorCS1ybSAtZiAkKElOU1RBTExfUEtHQ09ORklHX0RJUkVDVE9SWSkvYnJsdHR5LioKKwordW5pbnN0YWxsLWRvY3VtZW50czoKKwktcm0gLXIgLWYgJChJTlNUQUxMX0RPQ1VNRU5UX0RJUkVDVE9SWSkKKwordW5pbnN0YWxsLWhlYWRlcnM6CisJLXJtIC1mICQoSU5TVEFMTF9BUElIRFJfRElSRUNUT1JZKS9icmxhcGkuaAorCS1ybSAtZiAkKElOU1RBTExfQVBJSERSX0RJUkVDVE9SWSkvYnJsYXBpXyouaAorCS1bICEgLWQgJChJTlNUQUxMX0lOQ0xVREVfRElSRUNUT1JZKSBdIHx8IHJtIC1mIC1yICQoSU5TVEFMTF9JTkNMVURFX0RJUkVDVE9SWSkKKwordW5pbnN0YWxsLWFwaS1saWJyYXJpZXM6CisJLXJtIC1mICQoSU5TVEFMTF9BUElMSUJfRElSRUNUT1JZKS8kKEFQSV9BUkMpCisJLXJtIC1mICQoSU5TVEFMTF9BUElMSUJfRElSRUNUT1JZKS8kKEFQSV9MSUIpCisJLXJtIC1mICQoSU5TVEFMTF9BUElMSUJfRElSRUNUT1JZKS8kKEFQSV9MSUIpLiQoQVBJX1ZFUlNJT04pCisJLXJtIC1mICQoSU5TVEFMTF9BUElMSUJfRElSRUNUT1JZKS8kKEFQSV9MSUIpLiQoQVBJX1JFTEVBU0UpCisJJChDT05GTElCRElSKSAkKElOU1RBTExfQVBJTElCX0RJUkVDVE9SWSkKKwktcm0gLWYgLXIgJChJTlNUQUxMX0FQSVNPQ19ESVJFQ1RPUlkpCisKK3VuaW5zdGFsbC1hcGktbGlicmFyaWVzLXdpbmRvd3M6CisJLXJtIC1mICQoSU5TVEFMTF9BUElMSUJfRElSRUNUT1JZKS8kKEFQSV9BUkMpCisJLXJtIC1mICQoSU5TVEFMTF9BUElMSUJfRElSRUNUT1JZKS8kKEFQSV9JTVBMSUIpCisJLXJtIC1mICQoSU5TVEFMTF9BUElMSUJfRElSRUNUT1JZKS8kKEFQSV9JTVBMSUJfVkVSU0lPTkVEKQorCS1ybSAtZiAkKElOU1RBTExfQVBJTElCX0RJUkVDVE9SWSkvJChBUElfREVGKQorCS1ybSAtZiAkKElOU1RBTExfUFJPR1JBTV9ESVJFQ1RPUlkpLyQoQVBJX0RMTCkKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitpbnN0YWxsIHVuaW5zdGFsbDo6CisJLXNldCAtLSAkKEJSQUlMTEVfRVhURVJOQUxfRFJJVkVSX05BTUVTKTsgXAorCWZvciBkcml2ZXIgZG8gKGNkICQoQkxEX1RPUCkkKEJSTF9ESVIpLyQkZHJpdmVyICYmICQoTUFLRSkgJEApOyBkb25lCisJLXNldCAtLSAkKFNQRUVDSF9FWFRFUk5BTF9EUklWRVJfTkFNRVMpOyBcCisJZm9yIGRyaXZlciBkbyAoY2QgJChCTERfVE9QKSQoU1BLX0RJUikvJCRkcml2ZXIgJiYgJChNQUtFKSAkQCk7IGRvbmUKKwktc2V0IC0tICQoU0NSRUVOX0VYVEVSTkFMX0RSSVZFUl9OQU1FUyk7IFwKKwlmb3IgZHJpdmVyIGRvIChjZCAkKEJMRF9UT1ApJChTQ1JfRElSKS8kJGRyaXZlciAmJiAkKE1BS0UpICRAKTsgZG9uZQorCitkaXN0Y2xlYW4gY2xlYW46OgorCS1zZXQgLS0gJChCUkFJTExFX0VYVEVSTkFMX0RSSVZFUl9OQU1FUykgJChCUkFJTExFX0lOVEVSTkFMX0RSSVZFUl9OQU1FUyk7IFwKKwlmb3IgZHJpdmVyIGRvIChjZCAkKEJMRF9UT1ApJChCUkxfRElSKS8kJGRyaXZlciAmJiAkKE1BS0UpICRAKTsgZG9uZQorCS1zZXQgLS0gJChTUEVFQ0hfRVhURVJOQUxfRFJJVkVSX05BTUVTKSAkKFNQRUVDSF9JTlRFUk5BTF9EUklWRVJfTkFNRVMpOyBcCisJZm9yIGRyaXZlciBkbyAoY2QgJChCTERfVE9QKSQoU1BLX0RJUikvJCRkcml2ZXIgJiYgJChNQUtFKSAkQCk7IGRvbmUKKwktc2V0IC0tICQoU0NSRUVOX0VYVEVSTkFMX0RSSVZFUl9OQU1FUykgJChTQ1JFRU5fSU5URVJOQUxfRFJJVkVSX05BTUVTKTsgXAorCWZvciBkcml2ZXIgZG8gKGNkICQoQkxEX1RPUCkkKFNDUl9ESVIpLyQkZHJpdmVyICYmICQoTUFLRSkgJEApOyBkb25lCisJLXNldCAtLSAkKEFQSV9CSU5ESU5HUyk7IFwKKwlmb3IgbGFuZ3VhZ2UgZG8gKGNkICQoQkxEX1RPUCkkKEJORF9ESVIpLyQkbGFuZ3VhZ2UgJiYgJChNQUtFKSAkQCk7IGRvbmUKKworY2xlYW46OgorCS1ybSAtZiBicmx0dHkkWAorCS1ybSAtZiBicmx0dHktdHJ0eHQkWCBicmx0dHktdHRiJFggYnJsdHR5LWN0YiRYIGJybHR0eS1hdGIkWCBicmx0dHkta3RiJFgKKwktcm0gLWYgYnJsdHR5LXR1bmUkWCBicmx0dHktbW9yc2UkWCBicmx0dHktcHR5JFgKKwktcm0gLWYgYnJsdHR5LWNsZHIkWCBicmx0dHktaGlkJFggYnJsdHR5LWxzY21kcyRYIGJybHR0eS1sc2luYyRYCisJLXJtIC1mIGJybHR0eS1jbGlwJFggeGJybGFwaSRYCisJLXJtIC1mIHRibDJoZXgkKFhfRk9SX0JVSUxEKSAqdGVzdCRYICotc3RhdGljJFgKKwktcm0gLWYgYnJsYXBpX2NvbnN0YW50cy5oICouJChMSUJfRVhUKSAqLiQoTElCX0VYVCkuKiAqLiQoQVJDX0VYVCkgKi5kZWYgKi5jbGFzcyAqLmphcgorCS1ybSAtZiAkKEJMRF9UT1ApJChEUlZfRElSKS8qCisKK2Rpc3RjbGVhbjo6CisJLXJtIC1mIGJybGFwaS5oCmRpZmYgLS1naXQgYS9Qcm9ncmFtcy9hY3Rpdml0eS5jIGIvUHJvZ3JhbXMvYWN0aXZpdHkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYjUwMTU2Ci0tLSAvZGV2L251bGwKKysrIGIvUHJvZ3JhbXMvYWN0aXZpdHkuYwpAQCAtMCwwICsxLDQwNiBAQAorLyoKKyAqIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisgKiAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisgKgorICogQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKKyNpbmNsdWRlICJwcm9sb2d1ZS5oIgorCisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKyNpbmNsdWRlICJsb2cuaCIKKyNpbmNsdWRlICJwYXJhbWV0ZXJzLmgiCisjaW5jbHVkZSAiYWN0aXZpdHkuaCIKKyNpbmNsdWRlICJhc3luY19oYW5kbGUuaCIKKyNpbmNsdWRlICJhc3luY19hbGFybS5oIgorI2luY2x1ZGUgImFzeW5jX3dhaXQuaCIKKwordHlwZWRlZiBlbnVtIHsKKyAgQUNUX1NUT1BQRUQsCisgIEFDVF9QUkVQQVJFRCwKKyAgQUNUX1NDSEVEVUxFRCwKKyAgQUNUX1NUQVJURUQsCisKKyAgQUNUX1BSRVBBUklORywKKyAgQUNUX1BSRVBBUklOR19TVE9QLAorCisgIEFDVF9TVEFSVElORywKKyAgQUNUX1NUQVJUSU5HX1NUT1AsCisgIEFDVF9TVEFSVElOR19SRVNUQVJULAorCisgIEFDVF9TVE9QUElORywKKyAgQUNUX1NUT1BQSU5HX1NUQVJUCit9IEFjdGl2aXR5U3RhdGU7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgY29uc3QgY2hhciAqbmFtZTsKK30gQWN0aXZpdHlTdGF0ZURlc2NyaXB0b3I7CisKK3N0YXRpYyBjb25zdCBBY3Rpdml0eVN0YXRlRGVzY3JpcHRvciBhY3Rpdml0eVN0YXRlRGVzY3JpcHRvcnNbXSA9IHsKKyAgW0FDVF9TVE9QUEVEXSA9IHsKKyAgICAubmFtZSA9ICJzdG9wcGVkIgorICB9LAorCisgIFtBQ1RfUFJFUEFSRURdID0geworICAgIC5uYW1lID0gInByZXBhcmVkIgorICB9LAorCisgIFtBQ1RfU0NIRURVTEVEXSA9IHsKKyAgICAubmFtZSA9ICJzY2hlZHVsZWQiCisgIH0sCisKKyAgW0FDVF9TVEFSVEVEXSA9IHsKKyAgICAubmFtZSA9ICJzdGFydGVkIgorICB9LAorCisgIFtBQ1RfUFJFUEFSSU5HXSA9IHsKKyAgICAubmFtZSA9ICJwcmVwYXJpbmciCisgIH0sCisKKyAgW0FDVF9QUkVQQVJJTkdfU1RPUF0gPSB7CisgICAgLm5hbWUgPSAicHJlcGFyaW5nK3N0b3AiCisgIH0sCisKKyAgW0FDVF9TVEFSVElOR10gPSB7CisgICAgLm5hbWUgPSAic3RhcnRpbmciCisgIH0sCisKKyAgW0FDVF9TVEFSVElOR19TVE9QXSA9IHsKKyAgICAubmFtZSA9ICJzdGFydGluZytzdG9wIgorICB9LAorCisgIFtBQ1RfU1RBUlRJTkdfUkVTVEFSVF0gPSB7CisgICAgLm5hbWUgPSAic3RhcnRpbmcrcmVzdGFydCIKKyAgfSwKKworICBbQUNUX1NUT1BQSU5HXSA9IHsKKyAgICAubmFtZSA9ICJzdG9wcGluZyIKKyAgfSwKKworICBbQUNUX1NUT1BQSU5HX1NUQVJUXSA9IHsKKyAgICAubmFtZSA9ICJzdG9wcGluZytzdGFydCIKKyAgfSwKK307CisKK3N0cnVjdCBBY3Rpdml0eU9iamVjdFN0cnVjdCB7CisgIGNvbnN0IEFjdGl2aXR5TWV0aG9kcyAqbWV0aG9kczsKKyAgdm9pZCAqZGF0YTsKKworICBBY3Rpdml0eVN0YXRlIHN0YXRlOworICBBc3luY0hhbmRsZSBzdGFydEFsYXJtOworfTsKKworc3RhdGljIGNvbnN0IGNoYXIgKgorZ2V0QWN0aXZpdHlTdGF0ZU5hbWUgKEFjdGl2aXR5U3RhdGUgc3RhdGUpIHsKKyAgaWYgKHN0YXRlIDwgQVJSQVlfQ09VTlQoYWN0aXZpdHlTdGF0ZURlc2NyaXB0b3JzKSkgeworICAgIGNvbnN0IGNoYXIgKm5hbWUgPSBhY3Rpdml0eVN0YXRlRGVzY3JpcHRvcnNbc3RhdGVdLm5hbWU7CisKKyAgICBpZiAobmFtZSAmJiAqbmFtZSkgcmV0dXJuIG5hbWU7CisgIH0KKworICByZXR1cm4gInVua25vd24iOworfQorCitzdGF0aWMgdm9pZAorbG9nVW5leHBlY3RlZEFjdGl2aXR5U3RhdGUgKEFjdGl2aXR5T2JqZWN0ICphY3Rpdml0eSwgY29uc3QgY2hhciAqYWN0aW9uKSB7CisgIEFjdGl2aXR5U3RhdGUgc3RhdGUgPSBhY3Rpdml0eS0+c3RhdGU7CisKKyAgbG9nTWVzc2FnZShMT0dfV0FSTklORywgInVuZXhwZWN0ZWQgYWN0aXZpdHkgc3RhdGU6ICVzOiAlczogJXVbJXNdIiwKKyAgICAgICAgICAgICBhY3Rpdml0eS0+bWV0aG9kcy0+YWN0aXZpdHlOYW1lLCBhY3Rpb24sIHN0YXRlLCBnZXRBY3Rpdml0eVN0YXRlTmFtZShzdGF0ZSkpOworfQorCitzdGF0aWMgdm9pZAorc2V0QWN0aXZpdHlTdGF0ZSAoQWN0aXZpdHlPYmplY3QgKmFjdGl2aXR5LCBBY3Rpdml0eVN0YXRlIHN0YXRlKSB7CisgIGxvZ01lc3NhZ2UoTE9HX0RFQlVHLCAiYWN0aXZpdHkgc3RhdGUgY2hhbmdlOiAlczogJXVbJXNdIiwKKyAgICAgICAgICAgICBhY3Rpdml0eS0+bWV0aG9kcy0+YWN0aXZpdHlOYW1lLCBzdGF0ZSwgZ2V0QWN0aXZpdHlTdGF0ZU5hbWUoc3RhdGUpKTsKKworICBhY3Rpdml0eS0+c3RhdGUgPSBzdGF0ZTsKK30KKworc3RhdGljIHZvaWQKK2xvZ0FjdGl2aXR5QWN0aW9uUmVxdWVzdCAoQWN0aXZpdHlPYmplY3QgKmFjdGl2aXR5LCBjb25zdCBjaGFyICphY3Rpb24pIHsKKyAgbG9nTWVzc2FnZShMT0dfREVCVUcsICJhY3Rpdml0eSBhY3Rpb24gcmVxdWVzdDogJXM6ICVzIiwKKyAgICAgICAgICAgICBhY3Rpdml0eS0+bWV0aG9kcy0+YWN0aXZpdHlOYW1lLCBhY3Rpb24pOworfQorCitzdGF0aWMgdm9pZAorbG9nQWN0aXZpdHlBY3Rpb25GYWlsZWQgKEFjdGl2aXR5T2JqZWN0ICphY3Rpdml0eSwgY29uc3QgY2hhciAqYWN0aW9uKSB7CisgIGxvZ01lc3NhZ2UoTE9HX0RFQlVHLCAiYWN0aXZpdHkgYWN0aW9uIGZhaWxlZDogJXM6ICVzIiwKKyAgICAgICAgICAgICBhY3Rpdml0eS0+bWV0aG9kcy0+YWN0aXZpdHlOYW1lLCBhY3Rpb24pOworfQorCitzdGF0aWMgdm9pZAorbG9nQWN0aXZpdHlBY3Rpb25UaW1lb3V0IChBY3Rpdml0eU9iamVjdCAqYWN0aXZpdHksIGNvbnN0IGNoYXIgKmFjdGlvbikgeworICBsb2dNZXNzYWdlKExPR19ERUJVRywgImFjdGl2aXR5IGFjdGlvbiB0aW1lb3V0OiAlczogJXMiLAorICAgICAgICAgICAgIGFjdGl2aXR5LT5tZXRob2RzLT5hY3Rpdml0eU5hbWUsIGFjdGlvbik7Cit9CisKK3N0YXRpYyB2b2lkCitjYW5jZWxBY3Rpdml0eVN0YXJ0QWxhcm0gKEFjdGl2aXR5T2JqZWN0ICphY3Rpdml0eSkgeworICBhc3luY0NhbmNlbFJlcXVlc3QoYWN0aXZpdHktPnN0YXJ0QWxhcm0pOworICBhY3Rpdml0eS0+c3RhcnRBbGFybSA9IE5VTEw7Cit9CisKK0FTWU5DX0FMQVJNX0NBTExCQUNLKGhhbmRsZUFjdGl2aXR5U3RhcnRBbGFybSkgeworICBBY3Rpdml0eU9iamVjdCAqYWN0aXZpdHkgPSBwYXJhbWV0ZXJzLT5kYXRhOworICBBY3Rpdml0eVN0YXJ0TWV0aG9kICpzdGFydCA9IGFjdGl2aXR5LT5tZXRob2RzLT5zdGFydDsKKyAgQWN0aXZpdHlTdGF0ZSBvbGRTdGF0ZSA9IGFjdGl2aXR5LT5zdGF0ZTsKKyAgaW50IHN0YXJ0ZWQ7CisgIEFjdGl2aXR5U3RhdGUgbmV3U3RhdGU7CisKKyAgc2V0QWN0aXZpdHlTdGF0ZShhY3Rpdml0eSwgQUNUX1NUQVJUSU5HKTsKKyAgc3RhcnRlZCA9ICFzdGFydCB8fCBzdGFydChhY3Rpdml0eS0+ZGF0YSk7CisKKyAgaWYgKHN0YXJ0ZWQpIHsKKyAgICBjYW5jZWxBY3Rpdml0eVN0YXJ0QWxhcm0oYWN0aXZpdHkpOworICB9IGVsc2UgeworICAgIGxvZ0FjdGl2aXR5QWN0aW9uRmFpbGVkKGFjdGl2aXR5LCAic3RhcnQiKTsKKyAgfQorCisgIG5ld1N0YXRlID0gYWN0aXZpdHktPnN0YXRlOworICBzZXRBY3Rpdml0eVN0YXRlKGFjdGl2aXR5LCAoc3RhcnRlZD8gQUNUX1NUQVJURUQ6IG9sZFN0YXRlKSk7CisKKyAgaWYgKG5ld1N0YXRlID09IEFDVF9TVEFSVElOR19TVE9QKSB7CisgICAgc3RvcEFjdGl2aXR5KGFjdGl2aXR5KTsKKyAgfSBlbHNlIGlmIChuZXdTdGF0ZSA9PSBBQ1RfU1RBUlRJTkdfUkVTVEFSVCkgeworICAgIHN0b3BBY3Rpdml0eShhY3Rpdml0eSk7CisgICAgc3RhcnRBY3Rpdml0eShhY3Rpdml0eSk7CisgIH0gZWxzZSBpZiAobmV3U3RhdGUgIT0gQUNUX1NUQVJUSU5HKSB7CisgICAgbG9nVW5leHBlY3RlZEFjdGl2aXR5U3RhdGUoYWN0aXZpdHksICJzdGFydGluZyIpOworICB9Cit9CisKK3N0YXRpYyBpbnQKK3ByZXBhcmVBY3Rpdml0eSAoQWN0aXZpdHlPYmplY3QgKmFjdGl2aXR5KSB7CisgIEFjdGl2aXR5UHJlcGFyZU1ldGhvZCAqcHJlcGFyZSA9IGFjdGl2aXR5LT5tZXRob2RzLT5wcmVwYXJlOworICBBY3Rpdml0eVN0YXRlIG9sZFN0YXRlID0gYWN0aXZpdHktPnN0YXRlOworCisgIGlmICghcHJlcGFyZSkgeworICAgIHNldEFjdGl2aXR5U3RhdGUoYWN0aXZpdHksIEFDVF9QUkVQQVJFRCk7CisgICAgcmV0dXJuIDE7CisgIH0KKworICBzZXRBY3Rpdml0eVN0YXRlKGFjdGl2aXR5LCBBQ1RfUFJFUEFSSU5HKTsKKworICBpZiAoIXByZXBhcmUoYWN0aXZpdHktPmRhdGEpKSB7CisgICAgc2V0QWN0aXZpdHlTdGF0ZShhY3Rpdml0eSwgb2xkU3RhdGUpOworICAgIHJldHVybiAwOworICB9CisKKyAgaWYgKGFjdGl2aXR5LT5zdGF0ZSA9PSBBQ1RfUFJFUEFSSU5HKSB7CisgICAgc2V0QWN0aXZpdHlTdGF0ZShhY3Rpdml0eSwgQUNUX1BSRVBBUkVEKTsKKyAgICByZXR1cm4gMTsKKyAgfQorCisgIGlmIChhY3Rpdml0eS0+c3RhdGUgPT0gQUNUX1BSRVBBUklOR19TVE9QKSB7CisgICAgc2V0QWN0aXZpdHlTdGF0ZShhY3Rpdml0eSwgQUNUX1NUT1BQRUQpOworICAgIHJldHVybiAwOworICB9CisKKyAgbG9nVW5leHBlY3RlZEFjdGl2aXR5U3RhdGUoYWN0aXZpdHksICJwcmVwYXJpbmciKTsKKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK3NjaGVkdWxlQWN0aXZpdHkgKEFjdGl2aXR5T2JqZWN0ICphY3Rpdml0eSkgeworICBpZiAoYXN5bmNOZXdSZWxhdGl2ZUFsYXJtKCZhY3Rpdml0eS0+c3RhcnRBbGFybSwgMCwgaGFuZGxlQWN0aXZpdHlTdGFydEFsYXJtLCBhY3Rpdml0eSkpIHsKKyAgICBpZiAoYXN5bmNSZXNldEFsYXJtSW50ZXJ2YWwoYWN0aXZpdHktPnN0YXJ0QWxhcm0sIGFjdGl2aXR5LT5tZXRob2RzLT5yZXRyeUludGVydmFsKSkgeworICAgICAgc2V0QWN0aXZpdHlTdGF0ZShhY3Rpdml0eSwgQUNUX1NDSEVEVUxFRCk7CisgICAgICByZXR1cm4gMTsKKyAgICB9CisKKyAgICBjYW5jZWxBY3Rpdml0eVN0YXJ0QWxhcm0oYWN0aXZpdHkpOworICB9CisKKyAgcmV0dXJuIDA7Cit9CisKK3ZvaWQKK3N0YXJ0QWN0aXZpdHkgKEFjdGl2aXR5T2JqZWN0ICphY3Rpdml0eSkgeworICBsb2dBY3Rpdml0eUFjdGlvblJlcXVlc3QoYWN0aXZpdHksICJzdGFydCIpOworCisgIHdoaWxlICgxKSB7CisgICAgc3dpdGNoIChhY3Rpdml0eS0+c3RhdGUpIHsKKyAgICAgIGNhc2UgQUNUX1NUT1BQRUQ6CisgICAgICAgIGlmIChwcmVwYXJlQWN0aXZpdHkoYWN0aXZpdHkpKSBjb250aW51ZTsKKyAgICAgICAgcmV0dXJuOworCisgICAgICBjYXNlIEFDVF9QUkVQQVJJTkdfU1RPUDoKKyAgICAgICAgc2V0QWN0aXZpdHlTdGF0ZShhY3Rpdml0eSwgQUNUX1BSRVBBUklORyk7CisgICAgICAgIGNvbnRpbnVlOworCisgICAgICBjYXNlIEFDVF9QUkVQQVJFRDoKKyAgICAgICAgaWYgKHNjaGVkdWxlQWN0aXZpdHkoYWN0aXZpdHkpKSBjb250aW51ZTsKKyAgICAgICAgcmV0dXJuOworCisgICAgICBjYXNlIEFDVF9TQ0hFRFVMRUQ6CisgICAgICAgIGFzeW5jUmVzZXRBbGFybUluKGFjdGl2aXR5LT5zdGFydEFsYXJtLCAwKTsKKyAgICAgICAgcmV0dXJuOworCisgICAgICBjYXNlIEFDVF9TVEFSVElOR19TVE9QOgorICAgICAgICBzZXRBY3Rpdml0eVN0YXRlKGFjdGl2aXR5LCBBQ1RfU1RBUlRJTkdfUkVTVEFSVCk7CisgICAgICAgIGNvbnRpbnVlOworCisgICAgICBjYXNlIEFDVF9TVE9QUElORzoKKyAgICAgICAgc2V0QWN0aXZpdHlTdGF0ZShhY3Rpdml0eSwgQUNUX1NUT1BQSU5HX1NUQVJUKTsKKyAgICAgICAgY29udGludWU7CisKKyAgICAgIGNhc2UgQUNUX1BSRVBBUklORzoKKyAgICAgIGNhc2UgQUNUX1NUQVJUSU5HOgorICAgICAgY2FzZSBBQ1RfU1RBUlRJTkdfUkVTVEFSVDoKKyAgICAgIGNhc2UgQUNUX1NUQVJURUQ6CisgICAgICBjYXNlIEFDVF9TVE9QUElOR19TVEFSVDoKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGxvZ1VuZXhwZWN0ZWRBY3Rpdml0eVN0YXRlKGFjdGl2aXR5LCAic3RhcnQiKTsKKyAgICBicmVhazsKKyAgfQorfQorCit2b2lkCitzdG9wQWN0aXZpdHkgKEFjdGl2aXR5T2JqZWN0ICphY3Rpdml0eSkgeworICBsb2dBY3Rpdml0eUFjdGlvblJlcXVlc3QoYWN0aXZpdHksICJzdG9wIik7CisKKyAgd2hpbGUgKDEpIHsKKyAgICBzd2l0Y2ggKGFjdGl2aXR5LT5zdGF0ZSkgeworICAgICAgY2FzZSBBQ1RfUFJFUEFSSU5HOgorICAgICAgICBzZXRBY3Rpdml0eVN0YXRlKGFjdGl2aXR5LCBBQ1RfUFJFUEFSSU5HX1NUT1ApOworICAgICAgICBjb250aW51ZTsKKworICAgICAgY2FzZSBBQ1RfUFJFUEFSRUQ6CisgICAgICAgIHNldEFjdGl2aXR5U3RhdGUoYWN0aXZpdHksIEFDVF9TVE9QUEVEKTsKKyAgICAgICAgY29udGludWU7CisKKyAgICAgIGNhc2UgQUNUX1NDSEVEVUxFRDoKKyAgICAgICAgY2FuY2VsQWN0aXZpdHlTdGFydEFsYXJtKGFjdGl2aXR5KTsKKyAgICAgICAgc2V0QWN0aXZpdHlTdGF0ZShhY3Rpdml0eSwgQUNUX1BSRVBBUkVEKTsKKyAgICAgICAgY29udGludWU7CisKKyAgICAgIGNhc2UgQUNUX1NUQVJUSU5HOgorICAgICAgY2FzZSBBQ1RfU1RBUlRJTkdfUkVTVEFSVDoKKyAgICAgICAgc2V0QWN0aXZpdHlTdGF0ZShhY3Rpdml0eSwgQUNUX1NUQVJUSU5HX1NUT1ApOworICAgICAgICBjb250aW51ZTsKKworICAgICAgY2FzZSBBQ1RfU1RBUlRFRDogeworICAgICAgICBBY3Rpdml0eVN0b3BNZXRob2QgKnN0b3AgPSBhY3Rpdml0eS0+bWV0aG9kcy0+c3RvcDsKKworICAgICAgICBpZiAoc3RvcCkgeworICAgICAgICAgIEFjdGl2aXR5U3RhdGUgbmV3U3RhdGU7CisKKyAgICAgICAgICBzZXRBY3Rpdml0eVN0YXRlKGFjdGl2aXR5LCBBQ1RfU1RPUFBJTkcpOworICAgICAgICAgIHN0b3AoYWN0aXZpdHktPmRhdGEpOworICAgICAgICAgIG5ld1N0YXRlID0gYWN0aXZpdHktPnN0YXRlOworICAgICAgICAgIHNldEFjdGl2aXR5U3RhdGUoYWN0aXZpdHksIEFDVF9TVE9QUEVEKTsKKworICAgICAgICAgIGlmIChuZXdTdGF0ZSA9PSBBQ1RfU1RPUFBJTkdfU1RBUlQpIHsKKyAgICAgICAgICAgIHN0YXJ0QWN0aXZpdHkoYWN0aXZpdHkpOworICAgICAgICAgIH0gZWxzZSBpZiAobmV3U3RhdGUgIT0gQUNUX1NUT1BQSU5HKSB7CisgICAgICAgICAgICBsb2dVbmV4cGVjdGVkQWN0aXZpdHlTdGF0ZShhY3Rpdml0eSwgInN0b3BwaW5nIik7CisgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgIHNldEFjdGl2aXR5U3RhdGUoYWN0aXZpdHksIEFDVF9TVE9QUEVEKTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybjsKKyAgICAgIH0KKworICAgICAgY2FzZSBBQ1RfU1RPUFBJTkdfU1RBUlQ6CisgICAgICAgIHNldEFjdGl2aXR5U3RhdGUoYWN0aXZpdHksIEFDVF9TVE9QUElORyk7CisgICAgICAgIGNvbnRpbnVlOworCisgICAgICBjYXNlIEFDVF9QUkVQQVJJTkdfU1RPUDoKKyAgICAgIGNhc2UgQUNUX1NUQVJUSU5HX1NUT1A6CisgICAgICBjYXNlIEFDVF9TVE9QUElORzoKKyAgICAgIGNhc2UgQUNUX1NUT1BQRUQ6CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBsb2dVbmV4cGVjdGVkQWN0aXZpdHlTdGF0ZShhY3Rpdml0eSwgInN0b3AiKTsKKyAgICBicmVhazsKKyAgfQorfQorCitBY3Rpdml0eU9iamVjdCAqCituZXdBY3Rpdml0eSAoY29uc3QgQWN0aXZpdHlNZXRob2RzICptZXRob2RzLCB2b2lkICpkYXRhKSB7CisgIEFjdGl2aXR5T2JqZWN0ICphY3Rpdml0eTsKKworICBpZiAoKGFjdGl2aXR5ID0gbWFsbG9jKHNpemVvZigqYWN0aXZpdHkpKSkpIHsKKyAgICBtZW1zZXQoYWN0aXZpdHksIDAsIHNpemVvZigqYWN0aXZpdHkpKTsKKworICAgIGFjdGl2aXR5LT5tZXRob2RzID0gbWV0aG9kczsKKyAgICBhY3Rpdml0eS0+ZGF0YSA9IGRhdGE7CisKKyAgICBhY3Rpdml0eS0+c3RhdGUgPSBBQ1RfU1RPUFBFRDsKKyAgICBhY3Rpdml0eS0+c3RhcnRBbGFybSA9IE5VTEw7CisKKyAgICByZXR1cm4gYWN0aXZpdHk7CisgIH0gZWxzZSB7CisgICAgbG9nTWFsbG9jRXJyb3IoKTsKKyAgfQorCisgIHJldHVybiBOVUxMOworfQorCit2b2lkCitkZXN0cm95QWN0aXZpdHkgKEFjdGl2aXR5T2JqZWN0ICphY3Rpdml0eSkgeworICBzdG9wQWN0aXZpdHkoYWN0aXZpdHkpOworICBhd2FpdEFjdGl2aXR5U3RvcHBlZChhY3Rpdml0eSk7CisgIGZyZWUoYWN0aXZpdHkpOworfQorCitpbnQKK2lzQWN0aXZpdHlTdGFydGVkIChjb25zdCBBY3Rpdml0eU9iamVjdCAqYWN0aXZpdHkpIHsKKyAgcmV0dXJuIGFjdGl2aXR5LT5zdGF0ZSA9PSBBQ1RfU1RBUlRFRDsKK30KKworaW50Citpc0FjdGl2aXR5U3RvcHBlZCAoY29uc3QgQWN0aXZpdHlPYmplY3QgKmFjdGl2aXR5KSB7CisgIHJldHVybiBhY3Rpdml0eS0+c3RhdGUgPT0gQUNUX1NUT1BQRUQ7Cit9CisKK0FTWU5DX0NPTkRJVElPTl9URVNURVIodGVzdEFjdGl2aXR5U3RhcnRlZCkgeworICBjb25zdCBBY3Rpdml0eU9iamVjdCAqYWN0aXZpdHkgPSBkYXRhOworCisgIHJldHVybiBpc0FjdGl2aXR5U3RhcnRlZChhY3Rpdml0eSk7Cit9CisKK2ludAorYXdhaXRBY3Rpdml0eVN0YXJ0ZWQgKEFjdGl2aXR5T2JqZWN0ICphY3Rpdml0eSkgeworICBpbnQgdGltZW91dCA9IGFjdGl2aXR5LT5tZXRob2RzLT5zdGFydFRpbWVvdXQ7CisKKyAgaWYgKCF0aW1lb3V0KSB0aW1lb3V0ID0gREVGQVVMVF9BQ1RJVklUWV9TVEFSVF9USU1FT1VUOworICBpZiAoYXN5bmNBd2FpdENvbmRpdGlvbih0aW1lb3V0LCB0ZXN0QWN0aXZpdHlTdGFydGVkLCBhY3Rpdml0eSkpIHJldHVybiAxOworCisgIGxvZ0FjdGl2aXR5QWN0aW9uVGltZW91dChhY3Rpdml0eSwgInN0YXJ0Iik7CisgIHJldHVybiAwOworfQorCitBU1lOQ19DT05ESVRJT05fVEVTVEVSKHRlc3RBY3Rpdml0eVN0b3BwZWQpIHsKKyAgY29uc3QgQWN0aXZpdHlPYmplY3QgKmFjdGl2aXR5ID0gZGF0YTsKKworICByZXR1cm4gaXNBY3Rpdml0eVN0b3BwZWQoYWN0aXZpdHkpOworfQorCitpbnQKK2F3YWl0QWN0aXZpdHlTdG9wcGVkIChBY3Rpdml0eU9iamVjdCAqYWN0aXZpdHkpIHsKKyAgaW50IHRpbWVvdXQgPSBhY3Rpdml0eS0+bWV0aG9kcy0+c3RvcFRpbWVvdXQ7CisKKyAgaWYgKCF0aW1lb3V0KSB0aW1lb3V0ID0gREVGQVVMVF9BQ1RJVklUWV9TVE9QX1RJTUVPVVQ7CisgIGlmIChhc3luY0F3YWl0Q29uZGl0aW9uKHRpbWVvdXQsIHRlc3RBY3Rpdml0eVN0b3BwZWQsIGFjdGl2aXR5KSkgcmV0dXJuIDE7CisKKyAgbG9nQWN0aXZpdHlBY3Rpb25UaW1lb3V0KGFjdGl2aXR5LCAic3RvcCIpOworICByZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL1Byb2dyYW1zL2FjdGl2aXR5LmggYi9Qcm9ncmFtcy9hY3Rpdml0eS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQzZjMzNDEKLS0tIC9kZXYvbnVsbAorKysgYi9Qcm9ncmFtcy9hY3Rpdml0eS5oCkBAIC0wLDAgKzEsNTkgQEAKKy8qCisgKiBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorICogICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorICoKKyAqIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorICoKKyAqIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyAqLworCisjaWZuZGVmIEJSTFRUWV9JTkNMVURFRF9BQ1RJVklUWQorI2RlZmluZSBCUkxUVFlfSU5DTFVERURfQUNUSVZJVFkKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZiAvKiBfX2NwbHVzcGx1cyAqLworCit0eXBlZGVmIGludCBBY3Rpdml0eVByZXBhcmVNZXRob2QgKHZvaWQgKmRhdGEpOwordHlwZWRlZiBpbnQgQWN0aXZpdHlTdGFydE1ldGhvZCAodm9pZCAqZGF0YSk7Cit0eXBlZGVmIHZvaWQgQWN0aXZpdHlTdG9wTWV0aG9kICh2b2lkICpkYXRhKTsKKwordHlwZWRlZiBzdHJ1Y3QgeworICBjb25zdCBjaGFyICphY3Rpdml0eU5hbWU7CisgIGludCByZXRyeUludGVydmFsOworICBpbnQgc3RhcnRUaW1lb3V0OworICBpbnQgc3RvcFRpbWVvdXQ7CisKKyAgQWN0aXZpdHlQcmVwYXJlTWV0aG9kICpwcmVwYXJlOworICBBY3Rpdml0eVN0YXJ0TWV0aG9kICpzdGFydDsKKyAgQWN0aXZpdHlTdG9wTWV0aG9kICpzdG9wOworfSBBY3Rpdml0eU1ldGhvZHM7CisKK3R5cGVkZWYgc3RydWN0IEFjdGl2aXR5T2JqZWN0U3RydWN0IEFjdGl2aXR5T2JqZWN0OworCitleHRlcm4gQWN0aXZpdHlPYmplY3QgKm5ld0FjdGl2aXR5IChjb25zdCBBY3Rpdml0eU1ldGhvZHMgKm1ldGhvZHMsIHZvaWQgKmRhdGEpOworZXh0ZXJuIHZvaWQgZGVzdHJveUFjdGl2aXR5IChBY3Rpdml0eU9iamVjdCAqYWN0aXZpdHkpOworCitleHRlcm4gdm9pZCBzdGFydEFjdGl2aXR5IChBY3Rpdml0eU9iamVjdCAqYWN0aXZpdHkpOworZXh0ZXJuIHZvaWQgc3RvcEFjdGl2aXR5IChBY3Rpdml0eU9iamVjdCAqYWN0aXZpdHkpOworCitleHRlcm4gaW50IGlzQWN0aXZpdHlTdGFydGVkIChjb25zdCBBY3Rpdml0eU9iamVjdCAqYWN0aXZpdHkpOworZXh0ZXJuIGludCBpc0FjdGl2aXR5U3RvcHBlZCAoY29uc3QgQWN0aXZpdHlPYmplY3QgKmFjdGl2aXR5KTsKKworZXh0ZXJuIGludCBhd2FpdEFjdGl2aXR5U3RhcnRlZCAoQWN0aXZpdHlPYmplY3QgKmFjdGl2aXR5KTsKK2V4dGVybiBpbnQgYXdhaXRBY3Rpdml0eVN0b3BwZWQgKEFjdGl2aXR5T2JqZWN0ICphY3Rpdml0eSk7CisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmIC8qIF9fY3BsdXNwbHVzICovCisKKyNlbmRpZiAvKiBCUkxUVFlfSU5DTFVERURfQUNUSVZJVFkgKi8KZGlmZiAtLWdpdCBhL1Byb2dyYW1zL2FkZHJlc3Nlcy5jIGIvUHJvZ3JhbXMvYWRkcmVzc2VzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmE0OTMxNgotLS0gL2Rldi9udWxsCisrKyBiL1Byb2dyYW1zL2FkZHJlc3Nlcy5jCkBAIC0wLDAgKzEsMTY4IEBACisvKgorICogQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyAqICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyAqCisgKiBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorICoKKyAqIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyAqCisgKiBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisgKi8KKworI2luY2x1ZGUgInByb2xvZ3VlLmgiCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGFyZy5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorCisjaW5jbHVkZSAiYWRkcmVzc2VzLmgiCisjaW5jbHVkZSAibG9nLmgiCisjaW5jbHVkZSAiZHlubGQuaCIKKyNpbmNsdWRlICJwcm9ncmFtLmgiCisKK3R5cGVkZWYgc3RydWN0IHsKKyAgdm9pZCAqYWRkcmVzczsKKyAgY2hhciBuYW1lWzBdOworfSBBZGRyZXNzRW50cnk7CisKK3N0YXRpYyBBZGRyZXNzRW50cnkgKiphZGRyZXNzVGFibGUgPSBOVUxMOworc3RhdGljIGludCBhZGRyZXNzQ291bnQgPSAwOworc3RhdGljIGludCBhZGRyZXNzTGltaXQgPSAwOworCitzdGF0aWMgdm9pZAorZXhpdEFkZHJlc3NUYWJsZSAodm9pZCAqZGF0YSkgeworICBpZiAoYWRkcmVzc1RhYmxlKSBmcmVlKGFkZHJlc3NUYWJsZSk7CisKKyAgYWRkcmVzc1RhYmxlID0gTlVMTDsKKyAgYWRkcmVzc0NvdW50ID0gMDsKKyAgYWRkcmVzc0xpbWl0ID0gMDsKK30KKworc3RhdGljIGludAorZmluZEFkZHJlc3NJbmRleCAoaW50ICppbmRleCwgdm9pZCAqYWRkcmVzcykgeworICBpbnQgZmlyc3QgPSAwOworICBpbnQgbGFzdCA9IGFkZHJlc3NDb3VudCAtIDE7CisKKyAgd2hpbGUgKGZpcnN0IDw9IGxhc3QpIHsKKyAgICBpbnQgY3VycmVudCA9IChmaXJzdCArIGxhc3QpIC8gMjsKKyAgICBBZGRyZXNzRW50cnkgKmVudHJ5ID0gYWRkcmVzc1RhYmxlW2N1cnJlbnRdOworCisgICAgaWYgKGVudHJ5LT5hZGRyZXNzID09IGFkZHJlc3MpIHsKKyAgICAgICppbmRleCA9IGN1cnJlbnQ7CisgICAgICByZXR1cm4gMTsKKyAgICB9CisKKyAgICBpZiAoYWRkcmVzcyA8IGVudHJ5LT5hZGRyZXNzKSB7CisgICAgICBsYXN0ID0gY3VycmVudCAtIDE7CisgICAgfSBlbHNlIHsKKyAgICAgIGZpcnN0ID0gY3VycmVudCArIDE7CisgICAgfQorICB9CisKKyAgKmluZGV4ID0gZmlyc3Q7CisgIHJldHVybiAwOworfQorCitzdGF0aWMgdm9pZAorbW92ZUFkZHJlc3NTbGljZSAoaW50IHRvLCBpbnQgZnJvbSwgaW50IGNvdW50KSB7CisgIG1lbW1vdmUoJmFkZHJlc3NUYWJsZVt0b10sICZhZGRyZXNzVGFibGVbZnJvbV0sIEFSUkFZX1NJWkUoYWRkcmVzc1RhYmxlLCBjb3VudCkpOworfQorCitzdGF0aWMgaW50CitpbnNlcnRBZGRyZXNzRW50cnkgKGludCBpbmRleCwgQWRkcmVzc0VudHJ5ICplbnRyeSkgeworICBpZiAoYWRkcmVzc0NvdW50ID09IGFkZHJlc3NMaW1pdCkgeworICAgIGludCBuZXdMaW1pdCA9IGFkZHJlc3NMaW1pdCArIDE7CisgICAgQWRkcmVzc0VudHJ5ICoqbmV3VGFibGUgPSByZWFsbG9jKGFkZHJlc3NUYWJsZSwgQVJSQVlfU0laRShuZXdUYWJsZSwgbmV3TGltaXQpKTsKKworICAgIGlmICghbmV3VGFibGUpIHsKKyAgICAgIGxvZ01hbGxvY0Vycm9yKCk7CisgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBpZiAoIWFkZHJlc3NUYWJsZSkgeworICAgICAgb25Qcm9ncmFtRXhpdCgiYWRkcmVzcy10YWJsZSIsIGV4aXRBZGRyZXNzVGFibGUsIE5VTEwpOworICAgIH0KKworICAgIGFkZHJlc3NUYWJsZSA9IG5ld1RhYmxlOworICAgIGFkZHJlc3NMaW1pdCA9IG5ld0xpbWl0OworICB9CisKKyAgbW92ZUFkZHJlc3NTbGljZShpbmRleCsxLCBpbmRleCwgKGFkZHJlc3NDb3VudCsrIC0gaW5kZXgpKTsKKyAgYWRkcmVzc1RhYmxlW2luZGV4XSA9IGVudHJ5OworICByZXR1cm4gMTsKK30KKworc3RhdGljIHZvaWQKK3JlbW92ZUFkZHJlc3NFbnRyeSAoaW50IGluZGV4KSB7CisgIGZyZWUoYWRkcmVzc1RhYmxlW2luZGV4XSk7CisgIG1vdmVBZGRyZXNzU2xpY2UoaW5kZXgsIGluZGV4KzEsICgtLWFkZHJlc3NDb3VudCAtIGluZGV4KSk7Cit9CisKK2ludAorc2V0QWRkcmVzc05hbWUgKHZvaWQgKmFkZHJlc3MsIGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKSB7CisgIGNoYXIgbmFtZVswWDEwMDBdOworICBBZGRyZXNzRW50cnkgKmVudHJ5OworICBzaXplX3Qgc2l6ZTsKKworICB7CisgICAgdmFfbGlzdCBhcmd1bWVudHM7CisKKyAgICB2YV9zdGFydChhcmd1bWVudHMsIGZvcm1hdCk7CisgICAgdnNucHJpbnRmKG5hbWUsIHNpemVvZihuYW1lKSwgZm9ybWF0LCBhcmd1bWVudHMpOworICAgIHZhX2VuZChhcmd1bWVudHMpOworICB9CisKKyAgc2l6ZSA9IHNpemVvZigqZW50cnkpICsgc3RybGVuKG5hbWUpICsgMTsKKworICBpZiAoKGVudHJ5ID0gbWFsbG9jKHNpemUpKSkgeworICAgIGludCBpbmRleDsKKworICAgIG1lbXNldChlbnRyeSwgMCwgc2l6ZW9mKCplbnRyeSkpOworICAgIGVudHJ5LT5hZGRyZXNzID0gYWRkcmVzczsKKyAgICBzdHJjcHkoZW50cnktPm5hbWUsIG5hbWUpOworCisgICAgaWYgKGZpbmRBZGRyZXNzSW5kZXgoJmluZGV4LCBhZGRyZXNzKSkgeworICAgICAgZnJlZShhZGRyZXNzVGFibGVbaW5kZXhdKTsKKyAgICAgIGFkZHJlc3NUYWJsZVtpbmRleF0gPSBlbnRyeTsKKyAgICAgIHJldHVybiAxOworICAgIH0KKworICAgIGlmIChpbnNlcnRBZGRyZXNzRW50cnkoaW5kZXgsIGVudHJ5KSkgcmV0dXJuIDE7CisKKyAgICBmcmVlKGVudHJ5KTsKKyAgfSBlbHNlIHsKKyAgICBsb2dNYWxsb2NFcnJvcigpOworICB9CisKKyAgcmV0dXJuIDA7Cit9CisKK3ZvaWQKK3Vuc2V0QWRkcmVzc05hbWUgKHZvaWQgKmFkZHJlc3MpIHsKKyAgaW50IGluZGV4OworCisgIGlmIChmaW5kQWRkcmVzc0luZGV4KCZpbmRleCwgYWRkcmVzcykpIHsKKyAgICByZW1vdmVBZGRyZXNzRW50cnkoaW5kZXgpOworICB9Cit9CisKK2NvbnN0IGNoYXIgKgorZ2V0QWRkcmVzc05hbWUgKHZvaWQgKmFkZHJlc3MsIHB0cmRpZmZfdCAqb2Zmc2V0KSB7CisgIHsKKyAgICBpbnQgaW5kZXg7CisKKyAgICBpZiAoZmluZEFkZHJlc3NJbmRleCgmaW5kZXgsIGFkZHJlc3MpKSB7CisgICAgICBpZiAob2Zmc2V0KSAqb2Zmc2V0ID0gMDsKKyAgICAgIHJldHVybiBhZGRyZXNzVGFibGVbaW5kZXhdLT5uYW1lOworICAgIH0KKyAgfQorCisgIHJldHVybiBnZXRTaGFyZWRTeW1ib2xOYW1lKGFkZHJlc3MsIG9mZnNldCk7Cit9CmRpZmYgLS1naXQgYS9Qcm9ncmFtcy9hbGVydC5jIGIvUHJvZ3JhbXMvYWxlcnQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMzE3YjFmCi0tLSAvZGV2L251bGwKKysrIGIvUHJvZ3JhbXMvYWxlcnQuYwpAQCAtMCwwICsxLDI4NyBAQAorLyoKKyAqIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisgKiAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisgKgorICogQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKKyNpbmNsdWRlICJwcm9sb2d1ZS5oIgorCisjaW5jbHVkZSAiYWxlcnQuaCIKKyNpbmNsdWRlICJwcm9ncmFtLmgiCisjaW5jbHVkZSAicHJlZnMuaCIKKyNpbmNsdWRlICJ0dW5lLmgiCisjaW5jbHVkZSAidHVuZV9idWlsZGVyLmgiCisjaW5jbHVkZSAibWVzc2FnZS5oIgorI2luY2x1ZGUgImJybF9kb3RzLmgiCisjaW5jbHVkZSAidXRmOC5oIgorI2luY2x1ZGUgImNvcmUuaCIKKworI2lmZGVmIEVOQUJMRV9TUEVFQ0hfU1VQUE9SVAorI2luY2x1ZGUgInNway5oIgorI2VuZGlmIC8qIEVOQUJMRV9TUEVFQ0hfU1VQUE9SVCAqLworCit0eXBlZGVmIHN0cnVjdCB7CisgIHVuc2lnbmVkIGNoYXIgZHVyYXRpb247CisgIEJybERvdHMgcGF0dGVybjsKK30gVGFjdGlsZUFsZXJ0OworCit0eXBlZGVmIHN0cnVjdCB7CisgIGNvbnN0IGNoYXIgKnR1bmU7CisgIGNvbnN0IGNoYXIgKm1lc3NhZ2U7CisgIFRhY3RpbGVBbGVydCB0YWN0aWxlOworfSBBbGVydEVudHJ5OworCisjZGVmaW5lIEFMRVJUX1RBQ1RJTEUoZCxwKSB7LmR1cmF0aW9uPShkKSwgLnBhdHRlcm49KHApfQorCitzdGF0aWMgY29uc3QgQWxlcnRFbnRyeSBhbGVydFRhYmxlW10gPSB7CisgIFtBTEVSVF9CUkFJTExFX09OXSA9IHsKKyAgICAudHVuZSA9ICJtNjRANjAgbTY5QDEwMCIKKyAgfSwKKworICBbQUxFUlRfQlJBSUxMRV9PRkZdID0geworICAgIC50dW5lID0gIm02NEA2MCBtNTdANjAiCisgIH0sCisKKyAgW0FMRVJUX0NPTU1BTkRfRE9ORV0gPSB7CisgICAgLm1lc3NhZ2UgPSBzdHJ0ZXh0KCJEb25lIiksCisgICAgLnR1bmUgPSAibTc0QDQwIHJAMzAgbTc0QDQwIHJANDAgbTc0QDE0MCByQDIwIG03OUA1MCIKKyAgfSwKKworICBbQUxFUlRfQ09NTUFORF9SRUpFQ1RFRF0gPSB7CisgICAgLnRhY3RpbGUgPSBBTEVSVF9UQUNUSUxFKDUwLCBCUkxfRE9UXzEgfCBCUkxfRE9UXzMgfCBCUkxfRE9UXzQgfCBCUkxfRE9UXzYpLAorICAgIC50dW5lID0gIm03OEAxMDAiCisgIH0sCisKKyAgW0FMRVJUX01BUktfU0VUXSA9IHsKKyAgICAudHVuZSA9ICJtODNAMjAgbTgxQDE1IG03OUAxNSBtODRAMjUiCisgIH0sCisKKyAgW0FMRVJUX0NMSVBCT0FSRF9CRUdJTl0gPSB7CisgICAgLnR1bmUgPSAibTc0QDQwIG04NkAyMCIKKyAgfSwKKworICBbQUxFUlRfQ0xJUEJPQVJEX0VORF0gPSB7CisgICAgLnR1bmUgPSAibTg2QDUwIG03NEAzMCIKKyAgfSwKKworICBbQUxFUlRfTk9fQ0hBTkdFXSA9IHsKKyAgICAudGFjdGlsZSA9IEFMRVJUX1RBQ1RJTEUoMzAsIEJSTF9ET1RfMiB8IEJSTF9ET1RfMyB8IEJSTF9ET1RfNSB8IEJSTF9ET1RfNiksCisgICAgLnR1bmUgPSAibTc5QDMwIHJAMzAgbTc5QDMwIHJAMzAgbTc5QDMwIgorICB9LAorCisgIFtBTEVSVF9UT0dHTEVfT05dID0geworICAgIC50YWN0aWxlID0gQUxFUlRfVEFDVElMRSgzMCwgQlJMX0RPVF8xIHwgQlJMX0RPVF8yIHwgQlJMX0RPVF80IHwgQlJMX0RPVF81KSwKKyAgICAudHVuZSA9ICJtNzRAMzAgckAzMCBtNzlAMzAgckAzMCBtODZAMzAiCisgIH0sCisKKyAgW0FMRVJUX1RPR0dMRV9PRkZdID0geworICAgIC50YWN0aWxlID0gQUxFUlRfVEFDVElMRSgzMCwgQlJMX0RPVF8zIHwgQlJMX0RPVF83IHwgQlJMX0RPVF82IHwgQlJMX0RPVF84KSwKKyAgICAudHVuZSA9ICJtODZAMzAgckAzMCBtNzlAMzAgckAzMCBtNzRAMzAiCisgIH0sCisKKyAgW0FMRVJUX0NVUlNPUl9MSU5LRURdID0geworICAgIC50dW5lID0gIm04MEA3IG03OUA3IG03NkAxMiIKKyAgfSwKKworICBbQUxFUlRfQ1VSU09SX1VOTElOS0VEXSA9IHsKKyAgICAudHVuZSA9ICJtNzhANyBtNzlANyBtODNAMjAiCisgIH0sCisKKyAgW0FMRVJUX1NDUkVFTl9GUk9aRU5dID0geworICAgIC5tZXNzYWdlID0gc3RydGV4dCgiRnJvemVuIiksCisgICAgLnR1bmUgPSAibTU4QDUgbTU5IG02MCBtNjEgbTYyIG02MyBtNjQgbTY1IG02NiBtNjcgbTY4IG02OSBtNzAgbTcxIG03MiBtNzMgbTc0IG03NiBtNzggbTgwIG04MyBtODYgbTkwIG05NSIKKyAgfSwKKworICBbQUxFUlRfU0NSRUVOX1VORlJPWkVOXSA9IHsKKyAgICAubWVzc2FnZSA9IHN0cnRleHQoIlVuZnJvemVuIiksCisgICAgLnR1bmUgPSAibTk1QDUgbTkwIG04NiBtODMgbTgwIG03OCBtNzYgbTc0IG03MyBtNzIgbTcxIG03MCBtNjkgbTY4IG02NyBtNjYgbTY1IG02NCBtNjMgbTYyIG02MSBtNjAgbTU5IG01OCIKKyAgfSwKKworICBbQUxFUlRfRlJFRVpFX1JFTUlOREVSXSA9IHsKKyAgICAudHVuZSA9ICJtNjBANTAgckAzMCBtNjBANTAiCisgIH0sCisKKyAgW0FMRVJUX1dSQVBfRE9XTl0gPSB7CisgICAgLnRhY3RpbGUgPSBBTEVSVF9UQUNUSUxFKDIwLCBCUkxfRE9UXzQgfCBCUkxfRE9UXzUgfCBCUkxfRE9UXzYgfCBCUkxfRE9UXzgpLAorICAgIC50dW5lID0gIm04NkA2IG03NEA2IG02MkA2IG01MEAxMCIKKyAgfSwKKworICBbQUxFUlRfV1JBUF9VUF0gPSB7CisgICAgLnRhY3RpbGUgPSBBTEVSVF9UQUNUSUxFKDIwLCBCUkxfRE9UXzEgfCBCUkxfRE9UXzIgfCBCUkxfRE9UXzMgfCBCUkxfRE9UXzcpLAorICAgIC50dW5lID0gIm01MEA2IG02MkA2IG03NEA2IG04NkAxMCIKKyAgfSwKKworICBbQUxFUlRfU0tJUF9GSVJTVF0gPSB7CisgICAgLnRhY3RpbGUgPSBBTEVSVF9UQUNUSUxFKDMwLCBCUkxfRE9UXzEgfCBCUkxfRE9UXzQgfCBCUkxfRE9UXzcgfCBCUkxfRE9UXzgpLAorICAgIC50dW5lID0gInJANDAgbTYyQDQgbTY3QDYgbTc0QDggckAyNSIKKyAgfSwKKworICBbQUxFUlRfU0tJUF9PTkVdID0geworICAgIC50dW5lID0gIm03NEAxMCByQDE4IgorICB9LAorCisgIFtBTEVSVF9TS0lQX1NFVkVSQUxdID0geworICAgIC50dW5lID0gIm03M0AyMCByQDEiCisgIH0sCisKKyAgW0FMRVJUX0JPVU5DRV0gPSB7CisgICAgLnRhY3RpbGUgPSBBTEVSVF9UQUNUSUxFKDUwLCBCUkxfRE9UXzEgfCBCUkxfRE9UXzIgfCBCUkxfRE9UXzMgfCBCUkxfRE9UXzQgfCBCUkxfRE9UXzUgfCBCUkxfRE9UXzYgfCBCUkxfRE9UXzcgfCBCUkxfRE9UXzgpLAorICAgIC50dW5lID0gIm05OEA2IG04NkA2IG03NEA2IG02MkA2IG01MEAxMCIKKyAgfSwKKworICBbQUxFUlRfUk9VVElOR19TVEFSVEVEXSA9IHsKKyAgICAudHVuZSA9ICJtNTVAMTAgckA2MCBtNjBAMTUiCisgIH0sCisKKyAgW0FMRVJUX1JPVVRJTkdfU1VDQ0VFREVEXSA9IHsKKyAgICAudHVuZSA9ICJtNjRANjAgbTc2QDIwIgorICB9LAorCisgIFtBTEVSVF9ST1VUSU5HX0ZBSUxFRF0gPSB7CisgICAgLnR1bmUgPSAibTgwQDgwIG03OUA5MCBtNzhAMTAwIG03N0AxMDAgckAyMCBtNzdAMTAwIHJAMjAgbTc3QDE1MCIKKyAgfSwKKworICBbQUxFUlRfTU9ESUZJRVJfT05DRV0gPSB7CisgICAgLnR1bmUgPSAibTcwQDYwIG03NEA2MCBtNzdAOTAiCisgIH0sCisKKyAgW0FMRVJUX01PRElGSUVSX0xPQ0tdID0geworICAgIC50dW5lID0gIm03MEA2MCBtNzRANjAgbTc3QDYwIG04MkA5MCIKKyAgfSwKKworICBbQUxFUlRfTU9ESUZJRVJfT0ZGXSA9IHsKKyAgICAudHVuZSA9ICJtODJANjAgbTc3QDYwIG03NEA2MCBtNzBAOTAiCisgIH0sCisKKyAgW0FMRVJUX0NPTlNPTEVfQkVMTF0gPSB7CisgICAgLm1lc3NhZ2UgPSBzdHJ0ZXh0KCJDb25zb2xlIEJlbGwiKSwKKyAgICAudHVuZSA9ICJtNzhAMTAwIgorICB9LAorCisgIFtBTEVSVF9LRVlTX0FVVE9SRUxFQVNFRF0gPSB7CisgICAgLm1lc3NhZ2UgPSBzdHJ0ZXh0KCJBdXRvcmVsZWFzZSIpLAorICAgIC50dW5lID0gImM2QDUwIGItIGcgZS0gcDUwIGNAMTAwIGMgYyIKKyAgfSwKKworICBbQUxFUlRfU0NST0xMX1VQXSA9IHsKKyAgICAudHVuZSA9ICJiNkAxMCBkNyIKKyAgfSwKKworICBbQUxFUlRfQ09OVEVYVF9ERUZBVUxUXSA9IHsKKyAgICAudHVuZSA9ICJtNzZANjAgbTczQDYwIG02OUA2MCBtNjZAOTAiCisgIH0sCisKKyAgW0FMRVJUX0NPTlRFWFRfUEVSU0lTVEVOVF0gPSB7CisgICAgLnR1bmUgPSAibTY2QDYwIG02OUA2MCBtNzNANjAgbTc2QDkwIgorICB9LAorCisgIFtBTEVSVF9DT05URVhUX1RFTVBPUkFSWV0gPSB7CisgICAgLnR1bmUgPSAibTY2QDYwIG02OUA2MCBtNzNAOTAiCisgIH0sCit9OworCitzdGF0aWMgVG9uZUVsZW1lbnQgKnR1bmVUYWJsZVtBUlJBWV9DT1VOVChhbGVydFRhYmxlKV0gPSB7TlVMTH07CitzdGF0aWMgVHVuZUJ1aWxkZXIgKnR1bmVCdWlsZGVyID0gTlVMTDsKK3N0YXRpYyBUb25lRWxlbWVudCBlbXB0eVR1bmVbXSA9IHtUT05FX1NUT1AoKX07CisKK3N0YXRpYyB2b2lkCitleGl0QWxlcnRUdW5lcyAodm9pZCAqZGF0YSkgeworICB0dW5lU3luY2hyb25pemUoKTsKKworICB7CisgICAgVG9uZUVsZW1lbnQgKip0dW5lID0gdHVuZVRhYmxlOworICAgIFRvbmVFbGVtZW50ICoqZW5kID0gdHVuZSArIEFSUkFZX0NPVU5UKHR1bmVUYWJsZSk7CisKKyAgICB3aGlsZSAodHVuZSA8IGVuZCkgeworICAgICAgaWYgKCp0dW5lKSB7CisgICAgICAgIGlmICgqdHVuZSAhPSBlbXB0eVR1bmUpIGZyZWUoKnR1bmUpOworICAgICAgICAqdHVuZSA9IE5VTEw7CisgICAgICB9CisKKyAgICAgIHR1bmUgKz0gMTsKKyAgICB9CisgIH0KKworICBpZiAodHVuZUJ1aWxkZXIpIHsKKyAgICBkZXN0cm95VHVuZUJ1aWxkZXIodHVuZUJ1aWxkZXIpOworICAgIHR1bmVCdWlsZGVyID0gTlVMTDsKKyAgfQorfQorCitzdGF0aWMgVHVuZUJ1aWxkZXIgKgorZ2V0VHVuZUJ1aWxkZXIgKHZvaWQpIHsKKyAgaWYgKCF0dW5lQnVpbGRlcikgeworICAgIGlmICghKHR1bmVCdWlsZGVyID0gbmV3VHVuZUJ1aWxkZXIoKSkpIHsKKyAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIG9uUHJvZ3JhbUV4aXQoImFsZXJ0LXR1bmVzIiwgZXhpdEFsZXJ0VHVuZXMsIE5VTEwpOworICB9CisKKyAgcmV0dXJuIHR1bmVCdWlsZGVyOworfQorCit2b2lkCithbGVydCAoQWxlcnRJZGVudGlmaWVyIGlkZW50aWZpZXIpIHsKKyAgaWYgKGlkZW50aWZpZXIgPCBBUlJBWV9DT1VOVChhbGVydFRhYmxlKSkgeworICAgIGNvbnN0IEFsZXJ0RW50cnkgKmFsZXJ0ID0gJmFsZXJ0VGFibGVbaWRlbnRpZmllcl07CisKKyAgICBpZiAocHJlZnMuYWxlcnRUdW5lcyAmJiBhbGVydC0+dHVuZSAmJiAqYWxlcnQtPnR1bmUpIHsKKyAgICAgIFRvbmVFbGVtZW50ICoqdHVuZSA9ICZ0dW5lVGFibGVbaWRlbnRpZmllcl07CisKKyAgICAgIGlmICghKnR1bmUpIHsKKyAgICAgICAgVHVuZUJ1aWxkZXIgKnRiID0gZ2V0VHVuZUJ1aWxkZXIoKTsKKworICAgICAgICBpZiAodGIpIHsKKyAgICAgICAgICBzZXRUdW5lU291cmNlTmFtZSh0dW5lQnVpbGRlciwgImFsZXJ0Iik7CisgICAgICAgICAgc2V0VHVuZVNvdXJjZUluZGV4KHRiLCBpZGVudGlmaWVyKTsKKworICAgICAgICAgIGlmIChwYXJzZVR1bmVTdHJpbmcodGIsICJwMTAwIikpIHsKKyAgICAgICAgICAgIGlmIChwYXJzZVR1bmVTdHJpbmcodGIsIGFsZXJ0LT50dW5lKSkgeworICAgICAgICAgICAgICAqdHVuZSA9IGdldFR1bmUodGIpOworICAgICAgICAgICAgfQorICAgICAgICAgIH0KKworICAgICAgICAgIHJlc2V0VHVuZUJ1aWxkZXIodGIpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCEqdHVuZSkgKnR1bmUgPSBlbXB0eVR1bmU7CisgICAgICB9CisKKyAgICAgIHR1bmVQbGF5VG9uZXMoKnR1bmUpOworICAgIH0gZWxzZSBpZiAocHJlZnMuYWxlcnREb3RzICYmIGFsZXJ0LT50YWN0aWxlLmR1cmF0aW9uKSB7CisgICAgICBzaG93RG90UGF0dGVybihhbGVydC0+dGFjdGlsZS5wYXR0ZXJuLCBhbGVydC0+dGFjdGlsZS5kdXJhdGlvbik7CisgICAgfSBlbHNlIGlmIChwcmVmcy5hbGVydE1lc3NhZ2VzICYmIGFsZXJ0LT5tZXNzYWdlKSB7CisgICAgICBtZXNzYWdlKE5VTEwsIGdldHRleHQoYWxlcnQtPm1lc3NhZ2UpLCAwKTsKKyAgICB9CisgIH0KK30KKwordm9pZAorc3BlYWtBbGVydE1lc3NhZ2UgKGNvbnN0IGNoYXIgKm1lc3NhZ2UpIHsKKyNpZmRlZiBFTkFCTEVfU1BFRUNIX1NVUFBPUlQKKyAgc2F5U3RyaW5nKCZzcGssIG1lc3NhZ2UsIFNBWV9PUFRfTVVURV9GSVJTVCk7CisjZW5kaWYgLyogRU5BQkxFX1NQRUVDSF9TVVBQT1JUICovCit9CisKK3ZvaWQKK3NwZWFrQWxlcnRUZXh0IChjb25zdCB3Y2hhcl90ICp0ZXh0KSB7CisgIGNoYXIgKm1lc3NhZ2UgPSBnZXRVdGY4RnJvbVdjaGFycyh0ZXh0LCB3Y3NsZW4odGV4dCksIE5VTEwpOworCisgIGlmIChtZXNzYWdlKSB7CisgICAgc3BlYWtBbGVydE1lc3NhZ2UobWVzc2FnZSk7CisgICAgZnJlZShtZXNzYWdlKTsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvUHJvZ3JhbXMvYXBpLmggYi9Qcm9ncmFtcy9hcGkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NTgzNTA2Ci0tLSAvZGV2L251bGwKKysrIGIvUHJvZ3JhbXMvYXBpLmgKQEAgLTAsMCArMSwyNSBAQAorLyoKKyAqIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisgKiAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisgKgorICogQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKKyNpZm5kZWYgQlJMQVBJX0lOQ0xVREVEX0JSTFRUWV9BUEkKKyNkZWZpbmUgQlJMQVBJX0lOQ0xVREVEX0JSTFRUWV9BUEkKKworI3dhcm5pbmcgaW5jbHVkZSA8YnJsYXBpLmg+IGluc3RlYWQgb2YgPGJybHR0eS9hcGkuaD4gKHNlZSBtYW4gYnJsYXBpX2RlcHJlY2F0ZWQpCisjaW5jbHVkZSA8YnJsYXBpLmg+CisKKyNlbmRpZiAvKiBCUkxBUElfSU5DTFVERURfQlJMVFRZX0FQSSAqLwpkaWZmIC0tZ2l0IGEvUHJvZ3JhbXMvYXBpX2NvbnRyb2wuYyBiL1Byb2dyYW1zL2FwaV9jb250cm9sLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzU0ODY1MAotLS0gL2Rldi9udWxsCisrKyBiL1Byb2dyYW1zL2FwaV9jb250cm9sLmMKQEAgLTAsMCArMSwyMzUgQEAKKy8qCisgKiBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorICogICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorICoKKyAqIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorICoKKyAqIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyAqLworCisjaW5jbHVkZSAicHJvbG9ndWUuaCIKKworI2luY2x1ZGUgImxvZy5oIgorI2luY2x1ZGUgImFwaV9jb250cm9sLmgiCisjaW5jbHVkZSAiYXBpX3NlcnZlci5oIgorI2luY2x1ZGUgInJlcG9ydC5oIgorI2luY2x1ZGUgImNvcmUuaCIKKworI2lmbmRlZiBFTkFCTEVfQVBJCitjb25zdCBjaGFyICpjb25zdCBhcGlfc2VydmVyUGFyYW1ldGVyc1tdID0ge05VTEx9OworCit2b2lkCithcGlfbG9nU2VydmVySWRlbnRpdHkgKGludCBmdWxsKSB7Cit9CisKK2ludAorYXBpX3N0YXJ0U2VydmVyIChCcmFpbGxlRGlzcGxheSAqYnJsLCBjaGFyICoqcGFyYW1ldGVycykgeworICByZXR1cm4gMDsKK30KKwordm9pZAorYXBpX3N0b3BTZXJ2ZXIgKEJyYWlsbGVEaXNwbGF5ICpicmwpIHsKK30KKwordm9pZAorYXBpX2xpbmtTZXJ2ZXIgKEJyYWlsbGVEaXNwbGF5ICpicmwpIHsKK30KKwordm9pZAorYXBpX3VubGlua1NlcnZlciAoQnJhaWxsZURpc3BsYXkgKmJybCkgeworfQorCit2b2lkCithcGlfc3VzcGVuZERyaXZlciAoQnJhaWxsZURpc3BsYXkgKmJybCkgeworfQorCitpbnQKK2FwaV9yZXN1bWVEcml2ZXIgKEJyYWlsbGVEaXNwbGF5ICpicmwpIHsKKyAgcmV0dXJuIDA7Cit9CisKK2ludAorYXBpX2NsYWltRHJpdmVyIChCcmFpbGxlRGlzcGxheSAqYnJsKSB7CisgIHJldHVybiAwOworfQorCit2b2lkCithcGlfcmVsZWFzZURyaXZlciAoQnJhaWxsZURpc3BsYXkgKmJybCkgeworfQorCitpbnQKK2FwaV9oYW5kbGVDb21tYW5kIChpbnQgY29tbWFuZCkgeworICByZXR1cm4gMDsKK30KKworaW50CithcGlfaGFuZGxlS2V5RXZlbnQgKEtleUdyb3VwIGdyb3VwLCBLZXlOdW1iZXIgbnVtYmVyLCBpbnQgcHJlc3MpIHsKKyAgcmV0dXJuIDA7Cit9CisKK2ludAorYXBpX2ZsdXNoT3V0cHV0IChCcmFpbGxlRGlzcGxheSAqYnJsKSB7CisgIHJldHVybiAwOworfQorCit2b2lkCithcGlfdXBkYXRlUGFyYW1ldGVyIChicmxhcGlfcGFyYW1fdCBwYXJhbWV0ZXIsIGJybGFwaV9wYXJhbV9zdWJwYXJhbV90IHN1YnBhcmFtKSB7Cit9CisjZW5kaWYgLyogRU5BQkxFX0FQSSAqLworCitzdGF0aWMgaW50IGlzUnVubmluZyA9IDA7CitzdGF0aWMgaW50IGlzTGlua2VkID0gMDsKK3N0YXRpYyBpbnQgaXNDbGFpbWVkID0gMDsKKworc3RhdGljIHZvaWQKK2FwaUxvZ1NlcnZlcklkZW50aXR5IChpbnQgZnVsbCkgeworICBhcGlfbG9nU2VydmVySWRlbnRpdHkoZnVsbCk7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICpjb25zdCAqCithcGlHZXRTZXJ2ZXJQYXJhbWV0ZXJzICh2b2lkKSB7CisgIHJldHVybiBhcGlfc2VydmVyUGFyYW1ldGVyczsKK30KKworc3RhdGljIGludAorYXBpU3RhcnRTZXJ2ZXIgKGNoYXIgKipwYXJhbWV0ZXJzKSB7CisgIGlmIChhcGlfc3RhcnRTZXJ2ZXIoJmJybCwgcGFyYW1ldGVycykpIHsKKyAgICBpc1J1bm5pbmcgPSAxOworICAgIHJldHVybiAxOworICB9CisKKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkCithcGlTdG9wU2VydmVyICh2b2lkKSB7CisgIGFwaV9zdG9wU2VydmVyKCZicmwpOworICBpc1J1bm5pbmcgPSAwOworfQorCitzdGF0aWMgaW50CithcGlJc1NlcnZlclJ1bm5pbmcgKHZvaWQpIHsKKyAgcmV0dXJuIGlzUnVubmluZzsKK30KKworc3RhdGljIHZvaWQKK2FwaUxpbmtTZXJ2ZXIgKHZvaWQpIHsKKyAgaWYgKGlzUnVubmluZykgeworICAgIGFwaV9saW5rU2VydmVyKCZicmwpOworICAgIGlzTGlua2VkID0gMTsKKyAgfQorfQorCitzdGF0aWMgdm9pZAorYXBpVW5saW5rU2VydmVyICh2b2lkKSB7CisgIGlmIChpc1J1bm5pbmcpIHsKKyAgICBhcGlfdW5saW5rU2VydmVyKCZicmwpOworICAgIGlzTGlua2VkID0gMDsKKyAgfQorfQorCitzdGF0aWMgaW50CithcGlJc1NlcnZlckxpbmtlZCAodm9pZCkgeworICByZXR1cm4gaXNMaW5rZWQ7Cit9CisKK3N0YXRpYyB2b2lkCithcGlTdXNwZW5kRHJpdmVyICh2b2lkKSB7CisjaWZkZWYgRU5BQkxFX0FQSQorICBpZiAoaXNSdW5uaW5nKSB7CisgICAgYXBpX3N1c3BlbmREcml2ZXIoJmJybCk7CisgIH0gZWxzZQorI2VuZGlmIC8qIEVOQUJMRV9BUEkgKi8KKworICB7CisgICAgZGVzdHJ1Y3RCcmFpbGxlRHJpdmVyKCk7CisgIH0KK30KKworc3RhdGljIGludAorYXBpUmVzdW1lRHJpdmVyICh2b2lkKSB7CisjaWZkZWYgRU5BQkxFX0FQSQorICBpZiAoaXNSdW5uaW5nKSByZXR1cm4gYXBpX3Jlc3VtZURyaXZlcigmYnJsKTsKKyNlbmRpZiAvKiBFTkFCTEVfQVBJICovCisKKyAgcmV0dXJuIGNvbnN0cnVjdEJyYWlsbGVEcml2ZXIoKTsKK30KKworc3RhdGljIGludAorYXBpQ2xhaW1Ecml2ZXIgKHZvaWQpIHsKKyAgaWYgKCFpc0NsYWltZWQgJiYgaXNSdW5uaW5nKSB7CisgICAgaWYgKCFhcGlfY2xhaW1Ecml2ZXIoJmJybCkpIHJldHVybiAwOworICAgIGlzQ2xhaW1lZCA9IDE7CisgIH0KKworICByZXR1cm4gMTsKK30KKworc3RhdGljIHZvaWQKK2FwaVJlbGVhc2VEcml2ZXIgKHZvaWQpIHsKKyAgaWYgKGlzQ2xhaW1lZCkgeworICAgIGFwaV9yZWxlYXNlRHJpdmVyKCZicmwpOworICAgIGlzQ2xhaW1lZCA9IDA7CisgIH0KK30KKworc3RhdGljIGludAorYXBpSGFuZGxlQ29tbWFuZCAoaW50IGNvbW1hbmQpIHsKKyAgaWYgKCFpc1J1bm5pbmcpIHJldHVybiAwOworICByZXR1cm4gYXBpX2hhbmRsZUNvbW1hbmQoY29tbWFuZCk7Cit9CisKK3N0YXRpYyBpbnQKK2FwaUhhbmRsZUtleUV2ZW50IChLZXlHcm91cCBncm91cCwgS2V5TnVtYmVyIG51bWJlciwgaW50IHByZXNzKSB7CisgIGlmICghaXNSdW5uaW5nKSByZXR1cm4gMDsKKyAgcmV0dXJuIGFwaV9oYW5kbGVLZXlFdmVudChncm91cCwgbnVtYmVyLCBwcmVzcyk7Cit9CisKK3N0YXRpYyBpbnQKK2FwaUZsdXNoT3V0cHV0ICh2b2lkKSB7CisgIGlmICghaXNSdW5uaW5nKSByZXR1cm4gMTsKKyAgcmV0dXJuIGFwaV9mbHVzaE91dHB1dCgmYnJsKTsKK30KKworc3RhdGljIHZvaWQKK2FwaVVwZGF0ZVBhcmFtZXRlciAoYnJsYXBpX3BhcmFtX3QgcGFyYW1ldGVyLCBicmxhcGlfcGFyYW1fc3VicGFyYW1fdCBzdWJwYXJhbSkgeworICBpZiAoaXNSdW5uaW5nKSB7CisgICAgYXBpX3VwZGF0ZVBhcmFtZXRlcihwYXJhbWV0ZXIsIHN1YnBhcmFtKTsKKyAgfSBlbHNlIHsKKyAgICByZXBvcnRQYXJhbWV0ZXJVcGRhdGVkKHBhcmFtZXRlciwgc3VicGFyYW0pOworICB9Cit9CisKK2NvbnN0IEFwaU1ldGhvZHMgYXBpID0geworICAubG9nU2VydmVySWRlbnRpdHkgPSBhcGlMb2dTZXJ2ZXJJZGVudGl0eSwKKyAgLmdldFNlcnZlclBhcmFtZXRlcnMgPSBhcGlHZXRTZXJ2ZXJQYXJhbWV0ZXJzLAorCisgIC5zdGFydFNlcnZlciA9IGFwaVN0YXJ0U2VydmVyLAorICAuc3RvcFNlcnZlciA9IGFwaVN0b3BTZXJ2ZXIsCisgIC5pc1NlcnZlclJ1bm5pbmcgPSBhcGlJc1NlcnZlclJ1bm5pbmcsCisKKyAgLmxpbmtTZXJ2ZXIgPSBhcGlMaW5rU2VydmVyLAorICAudW5saW5rU2VydmVyID0gYXBpVW5saW5rU2VydmVyLAorICAuaXNTZXJ2ZXJMaW5rZWQgPSBhcGlJc1NlcnZlckxpbmtlZCwKKworICAuc3VzcGVuZERyaXZlciA9IGFwaVN1c3BlbmREcml2ZXIsCisgIC5yZXN1bWVEcml2ZXIgPSBhcGlSZXN1bWVEcml2ZXIsCisKKyAgLmNsYWltRHJpdmVyID0gYXBpQ2xhaW1Ecml2ZXIsCisgIC5yZWxlYXNlRHJpdmVyID0gYXBpUmVsZWFzZURyaXZlciwKKworICAuaGFuZGxlQ29tbWFuZCA9IGFwaUhhbmRsZUNvbW1hbmQsCisgIC5oYW5kbGVLZXlFdmVudCA9IGFwaUhhbmRsZUtleUV2ZW50LAorCisgIC5mbHVzaE91dHB1dCA9IGFwaUZsdXNoT3V0cHV0LAorICAudXBkYXRlUGFyYW1ldGVyID0gYXBpVXBkYXRlUGFyYW1ldGVyCit9OwpkaWZmIC0tZ2l0IGEvUHJvZ3JhbXMvYXBpX2NvbnRyb2wuaCBiL1Byb2dyYW1zL2FwaV9jb250cm9sLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDZkOTQzOQotLS0gL2Rldi9udWxsCisrKyBiL1Byb2dyYW1zL2FwaV9jb250cm9sLmgKQEAgLTAsMCArMSw2MCBAQAorLyoKKyAqIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisgKiAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisgKgorICogQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKKyNpZm5kZWYgQlJMVFRZX0lOQ0xVREVEX0FQSV9DT05UUk9MCisjZGVmaW5lIEJSTFRUWV9JTkNMVURFRF9BUElfQ09OVFJPTAorCisjaW5jbHVkZSAiYnJsYXBpX3BhcmFtLmgiCisjaW5jbHVkZSAia3RiX3R5cGVzLmgiCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYgLyogX19jcGx1c3BsdXMgKi8KKwordHlwZWRlZiBzdHJ1Y3QgeworICB2b2lkICgqbG9nU2VydmVySWRlbnRpdHkpIChpbnQgZnVsbCk7CisgIGNvbnN0IGNoYXIgKmNvbnN0ICogKCpnZXRTZXJ2ZXJQYXJhbWV0ZXJzKSAodm9pZCk7CisKKyAgaW50ICgqc3RhcnRTZXJ2ZXIpIChjaGFyICoqcGFyYW1ldGVycyk7CisgIHZvaWQgKCpzdG9wU2VydmVyKSAodm9pZCk7CisgIGludCAoKmlzU2VydmVyUnVubmluZykgKHZvaWQpOworCisgIHZvaWQgKCpsaW5rU2VydmVyKSAodm9pZCk7CisgIHZvaWQgKCp1bmxpbmtTZXJ2ZXIpICh2b2lkKTsKKyAgaW50ICgqaXNTZXJ2ZXJMaW5rZWQpICh2b2lkKTsKKworICB2b2lkICgqc3VzcGVuZERyaXZlcikgKHZvaWQpOworICBpbnQgKCpyZXN1bWVEcml2ZXIpICh2b2lkKTsKKworICBpbnQgKCpjbGFpbURyaXZlcikgKHZvaWQpOworICB2b2lkICgqcmVsZWFzZURyaXZlcikgKHZvaWQpOworCisgIGludCAoKmhhbmRsZUNvbW1hbmQpIChpbnQgY29tbWFuZCk7CisgIGludCAoKmhhbmRsZUtleUV2ZW50KSAoS2V5R3JvdXAgZ3JvdXAsIEtleU51bWJlciBudW1iZXIsIGludCBwcmVzcyk7CisKKyAgaW50ICgqZmx1c2hPdXRwdXQpICh2b2lkKTsKKyAgdm9pZCAoKnVwZGF0ZVBhcmFtZXRlcikgKGJybGFwaV9wYXJhbV90IHBhcmFtZXRlciwgYnJsYXBpX3BhcmFtX3N1YnBhcmFtX3Qgc3VicGFyYW0pOworfSBBcGlNZXRob2RzOworCitleHRlcm4gY29uc3QgQXBpTWV0aG9kcyBhcGk7CisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmIC8qIF9fY3BsdXNwbHVzICovCisKKyNlbmRpZiAvKiBCUkxUVFlfSU5DTFVERURfQVBJX0NPTlRST0wgKi8KZGlmZiAtLWdpdCBhL1Byb2dyYW1zL2FwaV9zZXJ2ZXIuaCBiL1Byb2dyYW1zL2FwaV9zZXJ2ZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYjNjMDk5Ci0tLSAvZGV2L251bGwKKysrIGIvUHJvZ3JhbXMvYXBpX3NlcnZlci5oCkBAIC0wLDAgKzEsNTQgQEAKKy8qCisgKiBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorICogICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorICoKKyAqIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorICoKKyAqIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyAqLworCisjaWZuZGVmIEJSTFRUWV9JTkNMVURFRF9BUElfU0VSVkVSCisjZGVmaW5lIEJSTFRUWV9JTkNMVURFRF9BUElfU0VSVkVSCisKKyNpbmNsdWRlICJicmxfdHlwZXMuaCIKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZiAvKiBfX2NwbHVzcGx1cyAqLworCitleHRlcm4gdm9pZCBhcGlfbG9nU2VydmVySWRlbnRpdHkgKGludCBmdWxsKTsKK2V4dGVybiBjb25zdCBjaGFyICpjb25zdCBhcGlfc2VydmVyUGFyYW1ldGVyc1tdOworCitleHRlcm4gaW50IGFwaV9zdGFydFNlcnZlciAoQnJhaWxsZURpc3BsYXkgKmJybCwgY2hhciAqKnBhcmFtZXRlcnMpOworZXh0ZXJuIHZvaWQgYXBpX3N0b3BTZXJ2ZXIgKEJyYWlsbGVEaXNwbGF5ICpicmwpOworCitleHRlcm4gdm9pZCBhcGlfbGlua1NlcnZlciAoQnJhaWxsZURpc3BsYXkgKmJybCk7CitleHRlcm4gdm9pZCBhcGlfdW5saW5rU2VydmVyIChCcmFpbGxlRGlzcGxheSAqYnJsKTsKKworZXh0ZXJuIHZvaWQgYXBpX3N1c3BlbmREcml2ZXIgKEJyYWlsbGVEaXNwbGF5ICpicmwpOworZXh0ZXJuIGludCBhcGlfcmVzdW1lRHJpdmVyIChCcmFpbGxlRGlzcGxheSAqYnJsKTsKKworZXh0ZXJuIGludCBhcGlfY2xhaW1Ecml2ZXIgKEJyYWlsbGVEaXNwbGF5ICpicmwpOworZXh0ZXJuIHZvaWQgYXBpX3JlbGVhc2VEcml2ZXIgKEJyYWlsbGVEaXNwbGF5ICpicmwpOworCitleHRlcm4gaW50IGFwaV9oYW5kbGVDb21tYW5kIChpbnQgY29tbWFuZCk7CitleHRlcm4gaW50IGFwaV9oYW5kbGVLZXlFdmVudCAoS2V5R3JvdXAgZ3JvdXAsIEtleU51bWJlciBudW1iZXIsIGludCBwcmVzcyk7CisKK2V4dGVybiBpbnQgYXBpX2ZsdXNoT3V0cHV0IChCcmFpbGxlRGlzcGxheSAqYnJsKTsKKworZXh0ZXJuIHZvaWQgYXBpX3VwZGF0ZVBhcmFtZXRlciAoYnJsYXBpX3BhcmFtX3QgcGFyYW1ldGVyLCBicmxhcGlfcGFyYW1fc3VicGFyYW1fdCBzdWJwYXJhbSk7CisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmIC8qIF9fY3BsdXNwbHVzICovCisKKyNlbmRpZiAvKiBCUkxUVFlfSU5DTFVERURfQVBJX1NFUlZFUiAqLwpkaWZmIC0tZ2l0IGEvUHJvZ3JhbXMvYXBpdGVzdC5jIGIvUHJvZ3JhbXMvYXBpdGVzdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRhNzBiMTYKLS0tIC9kZXYvbnVsbAorKysgYi9Qcm9ncmFtcy9hcGl0ZXN0LmMKQEAgLTAsMCArMSw1NDAgQEAKKy8qCisgKiBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorICogICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorICoKKyAqIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorICoKKyAqIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyAqLworCisvKiBhcGl0ZXN0IHByb3ZpZGVzIGEgc21hbGwgdGVzdCB1dGlsaXR5IGZvciBCUkxUVFkncyBBUEkgKi8KKworI2luY2x1ZGUgInByb2xvZ3VlLmgiCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHNpZ25hbC5oPgorI2lmZGVmIF9fTUlOR1czMl9fCisjaW5jbHVkZSAid2luX3B0aHJlYWQuaCIKKyNlbHNlCisjaW5jbHVkZSA8cHRocmVhZC5oPgorI2VuZGlmCisKKyNpbmNsdWRlICJjbWRsaW5lLmgiCisjaW5jbHVkZSAicGlkLmgiCisjaW5jbHVkZSAiYnJsX2NtZHMuaCIKKyNpbmNsdWRlICJicmxfZG90cy5oIgorI2luY2x1ZGUgImNtZC5oIgorI2luY2x1ZGUgImNtZF9icmxhcGkuaCIKKyNpbmNsdWRlICJhc3luY193YWl0LmgiCisKKyNkZWZpbmUgQlJMQVBJX05PX0RFUFJFQ0FURUQKKyNpbmNsdWRlICJicmxhcGkuaCIKKworc3RhdGljIGJybGFwaV9jb25uZWN0aW9uU2V0dGluZ3NfdCBzZXR0aW5nczsKK3N0YXRpYyBjaGFyICpvcHRfaG9zdDsKK3N0YXRpYyBjaGFyICpvcHRfYXV0aDsKKworc3RhdGljIGludCBvcHRfc2hvd05hbWU7CitzdGF0aWMgaW50IG9wdF9zaG93TW9kZWxJZGVudGlmaWVyOworc3RhdGljIGludCBvcHRfc2hvd1NpemU7CisKK3N0YXRpYyBpbnQgb3B0X3Nob3dEb3RzOworc3RhdGljIGludCBvcHRfc2hvd0tleUNvZGVzOworc3RhdGljIGludCBvcHRfbGVhcm5Nb2RlOworc3RhdGljIGludCBvcHRfcGFyYW1ldGVyczsKKworc3RhdGljIGludCBvcHRfc3VzcGVuZE1vZGU7CitzdGF0aWMgaW50IG9wdF90aHJlYWRNb2RlOworCitCRUdJTl9PUFRJT05fVEFCTEUocHJvZ3JhbU9wdGlvbnMpCisgIHsgLndvcmQgPSAiYnJsYXBpIiwKKyAgICAubGV0dGVyID0gJ2InLAorICAgIC5hcmd1bWVudCA9ICJbaG9zdF1bOnBvcnRdIiwKKyAgICAuc2V0dGluZy5zdHJpbmcgPSAmb3B0X2hvc3QsCisgICAgLmRlc2NyaXB0aW9uID0gIkJybEFQSWEgaG9zdCBhbmQvb3IgcG9ydCB0byBjb25uZWN0IHRvLiIKKyAgfSwKKworICB7IC53b3JkID0gImF1dGgiLAorICAgIC5sZXR0ZXIgPSAnYScsCisgICAgLmFyZ3VtZW50ID0gInNjaGVtZSsuLi4iLAorICAgIC5zZXR0aW5nLnN0cmluZyA9ICZvcHRfYXV0aCwKKyAgICAuZGVzY3JpcHRpb24gPSAiQnJsQVBJIGF1dGhvcml6YXRpb24vYXV0aGVudGljYXRpb24gc2NoZW1lcy4iCisgIH0sCisKKyAgeyAud29yZCA9ICJuYW1lIiwKKyAgICAubGV0dGVyID0gJ24nLAorICAgIC5zZXR0aW5nLmZsYWcgPSAmb3B0X3Nob3dOYW1lLAorICAgIC5kZXNjcmlwdGlvbiA9ICJTaG93IHRoZSBuYW1lIG9mIHRoZSBicmFpbGxlIGRyaXZlci4iCisgIH0sCisKKyAgeyAud29yZCA9ICJtb2RlbCIsCisgICAgLmxldHRlciA9ICdtJywKKyAgICAuc2V0dGluZy5mbGFnID0gJm9wdF9zaG93TW9kZWxJZGVudGlmaWVyLAorICAgIC5kZXNjcmlwdGlvbiA9ICJTaG93IHRoZSBtb2RlbCBpZGVudGlmaWVyIG9mIHRoZSBicmFpbGxlIGRldmljZS4iCisgIH0sCisKKyAgeyAud29yZCA9ICJ3aW5kb3ciLAorICAgIC5sZXR0ZXIgPSAndycsCisgICAgLnNldHRpbmcuZmxhZyA9ICZvcHRfc2hvd1NpemUsCisgICAgLmRlc2NyaXB0aW9uID0gIlNob3cgdGhlIGRpbWVuc2lvbnMgb2YgdGhlIGJyYWlsbGUgd2luZG93LiIKKyAgfSwKKworICB7IC53b3JkID0gImRvdHMiLAorICAgIC5sZXR0ZXIgPSAnZCcsCisgICAgLnNldHRpbmcuZmxhZyA9ICZvcHRfc2hvd0RvdHMsCisgICAgLmRlc2NyaXB0aW9uID0gIlNob3cgZG90IHBhdHRlcm4uIgorICB9LAorCisgIHsgLndvcmQgPSAia2V5Y29kZXMiLAorICAgIC5sZXR0ZXIgPSAnaycsCisgICAgLnNldHRpbmcuZmxhZyA9ICZvcHRfc2hvd0tleUNvZGVzLAorICAgIC5kZXNjcmlwdGlvbiA9ICJFbnRlciBpbnRlcmFjdGl2ZSBrZXljb2RlIGxlYXJuIG1vZGUuIgorICB9LAorCisgIHsgLndvcmQgPSAibGVhcm4iLAorICAgIC5sZXR0ZXIgPSAnbCcsCisgICAgLnNldHRpbmcuZmxhZyA9ICZvcHRfbGVhcm5Nb2RlLAorICAgIC5kZXNjcmlwdGlvbiA9ICJFbnRlciBpbnRlcmFjdGl2ZSBjb21tYW5kIGxlYXJuIG1vZGUuIgorICB9LAorCisgIHsgLndvcmQgPSAicGFyYW1ldGVycyIsCisgICAgLmxldHRlciA9ICdwJywKKyAgICAuc2V0dGluZy5mbGFnID0gJm9wdF9wYXJhbWV0ZXJzLAorICAgIC5kZXNjcmlwdGlvbiA9ICJUZXN0IHBhcmFtZXRlcnMiCisgIH0sCisKKyAgeyAud29yZCA9ICJzdXNwZW5kIiwKKyAgICAubGV0dGVyID0gJ3MnLAorICAgIC5zZXR0aW5nLmZsYWcgPSAmb3B0X3N1c3BlbmRNb2RlLAorICAgIC5kZXNjcmlwdGlvbiA9ICJTdXNwZW5kIHRoZSBicmFpbGxlIGRyaXZlciAocHJlc3MgXkMgb3Igc2VuZCBTSUdVU1IxIHRvIHJlc3VtZSkuIgorICB9LAorCisgIHsgLndvcmQgPSAidGhyZWFkIiwKKyAgICAubGV0dGVyID0gJ3QnLAorICAgIC5zZXR0aW5nLmZsYWcgPSAmb3B0X3RocmVhZE1vZGUsCisgICAgLmRlc2NyaXB0aW9uID0gIkV4ZXJjaXNlIHRocmVhZGVkIHVzZSIKKyAgfSwKK0VORF9PUFRJT05fVEFCTEUocHJvZ3JhbU9wdGlvbnMpCisKK3N0YXRpYyB2b2lkIHNob3dEaXNwbGF5U2l6ZSh2b2lkKQoreworICB1bnNpZ25lZCBpbnQgeCwgeTsKKyAgZnByaW50ZihzdGRlcnIsIkdldHRpbmcgZGlzcGxheSBzaXplOiAiKTsKKyAgaWYgKGJybGFwaV9nZXREaXNwbGF5U2l6ZSgmeCwgJnkpPDApIHsKKyAgICBicmxhcGlfcGVycm9yKCJmYWlsZWQiKTsKKyAgICBleGl0KFBST0dfRVhJVF9GQVRBTCk7CisgIH0KKyAgZnByaW50ZihzdGRlcnIsICIlZFglZFxuIiwgeCwgeSk7Cit9CisKK3N0YXRpYyB2b2lkIHNob3dEcml2ZXJOYW1lKHZvaWQpCit7CisgIGNoYXIgbmFtZVszMF07CisgIGZwcmludGYoc3RkZXJyLCAiR2V0dGluZyBkcml2ZXIgbmFtZTogIik7CisgIGlmIChicmxhcGlfZ2V0RHJpdmVyTmFtZShuYW1lLCBzaXplb2YobmFtZSkpPDApIHsKKyAgICBicmxhcGlfcGVycm9yKCJmYWlsZWQiKTsKKyAgICBleGl0KFBST0dfRVhJVF9GQVRBTCk7CisgIH0KKyAgZnByaW50ZihzdGRlcnIsICIlc1xuIiwgbmFtZSk7Cit9CisKK3N0YXRpYyB2b2lkIHNob3dNb2RlbElkZW50aWZpZXIodm9pZCkKK3sKKyAgY2hhciBpZGVudGlmaWVyWzMwXTsKKyAgZnByaW50ZihzdGRlcnIsICJHZXR0aW5nIG1vZGVsIGlkZW50aWZpZXI6ICIpOworICBpZiAoYnJsYXBpX2dldE1vZGVsSWRlbnRpZmllcihpZGVudGlmaWVyLCBzaXplb2YoaWRlbnRpZmllcikpPDApIHsKKyAgICBicmxhcGlfcGVycm9yKCJmYWlsZWQiKTsKKyAgICBleGl0KFBST0dfRVhJVF9GQVRBTCk7CisgIH0KKyAgZnByaW50ZihzdGRlcnIsICIlc1xuIiwgaWRlbnRpZmllcik7Cit9CisKKyNkZWZpbmUgRE9UU19URVhUICJkb3RzOiAiCisjZGVmaW5lIERPVFNfVEVYVExFTiAoc3RybGVuKERPVFNfVEVYVCkpCisjZGVmaW5lIERPVFNfTEVOIDgKKyNkZWZpbmUgRE9UU19UT1RBTExFTiAoRE9UU19URVhUTEVOICsgRE9UU19MRU4pCitzdGF0aWMgdm9pZCBzaG93RG90cyh2b2lkKQoreworICB1bnNpZ25lZCBpbnQgc2l6ZTsKKworICB7CisgICAgdW5zaWduZWQgaW50IGNvbHVtbnMsIHJvd3M7CisKKyAgICBpZiAoYnJsYXBpX2dldERpc3BsYXlTaXplKCZjb2x1bW5zLCAmcm93cykgPCAwKSB7CisgICAgICBicmxhcGlfcGVycm9yKCJmYWlsZWQiKTsKKyAgICAgIGV4aXQoUFJPR19FWElUX0ZBVEFMKTsKKyAgICB9CisKKyAgICBzaXplID0gY29sdW1ucyAqIHJvd3M7CisgICAgdW5zaWduZWQgaW50IG1pbmltdW0gPSBET1RTX1RPVEFMTEVOOworCisgICAgaWYgKHNpemUgPCBtaW5pbXVtKSB7CisgICAgICBmcHJpbnRmKHN0ZGVyciwgImNhbid0IHNob3cgZG90cyBvbiBhIGJyYWlsbGUgZGlzcGxheSB3aXRoIGxlc3MgdGhhbiAldSBjZWxsc1xuIiwgbWluaW11bSk7CisgICAgICBleGl0KFBST0dfRVhJVF9TRU1BTlRJQyk7CisgICAgfQorICB9CisKKyAgaWYgKGJybGFwaV9lbnRlclR0eU1vZGUoLTEsIE5VTEwpIDwgMCkgeworICAgIGJybGFwaV9wZXJyb3IoImVudGVyVHR5TW9kZSIpOworICAgIGV4aXQoUFJPR19FWElUX0ZBVEFMKTsKKyAgfQorCisgIHsKKyAgICBmcHJpbnRmKHN0ZGVyciwgIlNob3dpbmcgZG90IHBhdHRlcm5zXG4iKTsKKworICAgIGNoYXIgdGV4dFtzaXplICsgMV07CisgICAgbWVtc2V0KHRleHQsICcgJywgc2l6ZSk7CisgICAgdGV4dFtzaXplXSA9IDA7CisgICAgbWVtY3B5KHRleHQsIERPVFNfVEVYVCwgRE9UU19URVhUTEVOKTsKKworICAgIHVuc2lnbmVkIGNoYXIgb3Jbc2l6ZV07CisgICAgbWVtc2V0KG9yLCAwLCBzaXplKTsKKyAgICBvcltET1RTX1RFWFRMRU4rMF0gPSBCUkxfRE9UXzE7CisgICAgb3JbRE9UU19URVhUTEVOKzFdID0gQlJMX0RPVF8yOworICAgIG9yW0RPVFNfVEVYVExFTisyXSA9IEJSTF9ET1RfMzsKKyAgICBvcltET1RTX1RFWFRMRU4rM10gPSBCUkxfRE9UXzQ7CisgICAgb3JbRE9UU19URVhUTEVOKzRdID0gQlJMX0RPVF81OworICAgIG9yW0RPVFNfVEVYVExFTis1XSA9IEJSTF9ET1RfNjsKKyAgICBvcltET1RTX1RFWFRMRU4rNl0gPSBCUkxfRE9UXzc7CisgICAgb3JbRE9UU19URVhUTEVOKzddID0gQlJMX0RPVF84OworCisgICAgYnJsYXBpX3dyaXRlQXJndW1lbnRzX3Qgd2EgPSBCUkxBUElfV1JJVEVBUkdVTUVOVFNfSU5JVElBTElaRVI7CisgICAgd2EucmVnaW9uQmVnaW4gPSAxOworICAgIHdhLnJlZ2lvblNpemUgPSBzaXplOworICAgIHdhLnRleHQgPSB0ZXh0OworICAgIHdhLm9yTWFzayA9IG9yOworCisgICAgaWYgKGJybGFwaV93cml0ZSgmd2EpIDwgMCkgeworICAgICAgYnJsYXBpX3BlcnJvcigiYnJsYXBpX3dyaXRlIik7CisgICAgICBleGl0KFBST0dfRVhJVF9GQVRBTCk7CisgICAgfQorICB9CisKKyAgeworICAgIGJybGFwaV9rZXlDb2RlX3Qga2V5OworICAgIGJybGFwaV9yZWFkS2V5KDEsICZrZXkpOworICB9Cit9CisKK3N0YXRpYyBjaGFyICpnZXRLZXlOYW1lIChicmxhcGlfa2V5Q29kZV90IGtleSkKK3sKKyAgcmV0dXJuIGJybGFwaV9nZXRQYXJhbWV0ZXJBbGxvYyhCUkxBUElfUEFSQU1fS0VZX1NIT1JUX05BTUUsIChrZXkgJiB+QlJMQVBJX0RSVl9LRVlfUFJFU1MpLCBCUkxBUElfUEFSQU1GX0dMT0JBTCwgTlVMTCk7Cit9CisKK3N0YXRpYyB2b2lkIGxpc3RLZXlzKHZvaWQpCit7CisgIHNpemVfdCBsZW5ndGg7CisgIGJybGFwaV9wYXJhbV9kcml2ZXJLZXljb2RlX3QgKmtleXMgPSBicmxhcGlfZ2V0UGFyYW1ldGVyQWxsb2MoQlJMQVBJX1BBUkFNX0RFVklDRV9LRVlfQ09ERVMsIDAsIEJSTEFQSV9QQVJBTUZfR0xPQkFMLCAmbGVuZ3RoKTsKKworICBpZiAoa2V5cykgeworICAgIGxlbmd0aCAvPSBzaXplb2YoKmtleXMpOworICAgIHByaW50ZigiJXp1IGtleXNcbiIsIGxlbmd0aCk7CisKKyAgICBmb3IgKGludCBpPTA7IGk8bGVuZ3RoOyBpKz0xKSB7CisgICAgICBwcmludGYoImtleSAlMDQiQlJMQVBJX1BSSXhLRVlDT0RFIjoiLCBrZXlzW2ldKTsKKworICAgICAgeworICAgICAgICBjaGFyICpuYW1lID0gZ2V0S2V5TmFtZShrZXlzW2ldKTsKKworICAgICAgICBpZiAobmFtZSkgeworICAgICAgICAgIHByaW50ZigiIG5hbWUgJXMiLCBuYW1lKTsKKyAgICAgICAgICBmcmVlKG5hbWUpOworICAgICAgICB9CisgICAgICB9CisKKyAgICAgIHByaW50ZigiXG4iKTsKKyAgICB9CisKKyAgICBmcmVlKGtleXMpOworICB9Cit9CisKK3N0YXRpYyB2b2lkIHNob3dLZXlDb2Rlcyh2b2lkKQoreworICBjaGFyIGJ1ZlswWDEwMF07CisKKyAgZnByaW50ZihzdGRlcnIsICJFbnRlcmluZyBrZXljb2RlIGxlYXJuIG1vZGVcbiIpOworCisgIGlmIChicmxhcGlfZ2V0RHJpdmVyTmFtZShidWYsIHNpemVvZihidWYpKT09LTEpIHsKKyAgICBicmxhcGlfcGVycm9yKCJnZXREcml2ZXJOYW1lIik7CisgICAgcmV0dXJuOworICB9CisKKyAgaWYgKGJybGFwaV9lbnRlclR0eU1vZGUoLTEsIGJ1Zik8MCkgeworICAgIGJybGFwaV9wZXJyb3IoImVudGVyVHR5TW9kZSIpOworICAgIHJldHVybjsKKyAgfQorCisgIGlmIChicmxhcGlfYWNjZXB0QWxsS2V5cygpPT0tMSkgeworICAgIGJybGFwaV9wZXJyb3IoImFjY2VwdEFsbEtleXMiKTsKKyAgICByZXR1cm47CisgIH0KKworICBpZiAoYnJsYXBpX3dyaXRlVGV4dChCUkxBUElfQ1VSU09SX09GRiwgInNob3dpbmcga2V5IGNvZGVzIik8MCkgeworICAgIGJybGFwaV9wZXJyb3IoImJybGFwaV93cml0ZVRleHQiKTsKKyAgICBleGl0KFBST0dfRVhJVF9GQVRBTCk7CisgIH0KKworICBpbnQgcmVzOworICBicmxhcGlfa2V5Q29kZV90IGtleTsKKworICB3aGlsZSAoKHJlcyA9IGJybGFwaV9yZWFkS2V5V2l0aFRpbWVvdXQoMTAwMDAsICZrZXkpKSA+IDApIHsKKyAgICBjb25zdCBjaGFyICphY3Rpb24gPSAoa2V5ICYgQlJMQVBJX0RSVl9LRVlfUFJFU1MpPyAicHJlc3MiOiAicmVsZWFzZSI7CisgICAgc2l6ZV90IGxlbmd0aCA9IHNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksICIlMDQiIEJSTEFQSV9QUkl4S0VZQ09ERSAiICglIiBCUkxBUElfUFJJdUtFWUNPREUgIikgJXMiLCBrZXksIGtleSwgYWN0aW9uKTsKKworICAgIHsKKyAgICAgIGNoYXIgKm5hbWUgPSBnZXRLZXlOYW1lKGtleSk7CisKKyAgICAgIGlmIChuYW1lKSB7CisgICAgICAgIHNucHJpbnRmKCZidWZbbGVuZ3RoXSwgKHNpemVvZihidWYpIC0gbGVuZ3RoKSwgIjogJXMiLCBuYW1lKTsKKyAgICAgICAgZnJlZShuYW1lKTsKKyAgICAgIH0KKyAgICB9CisKKyAgICBicmxhcGlfd3JpdGVUZXh0KEJSTEFQSV9DVVJTT1JfT0ZGLCBidWYpOworICAgIGZwcmludGYoc3RkZXJyLCAiJXNcbiIsIGJ1Zik7CisgIH0KKworICBpZiAocmVzIDwgMCkgYnJsYXBpX3BlcnJvcigiYnJsYXBpX3JlYWRLZXkiKTsKK30KKworc3RhdGljIHZvaWQgZW50ZXJMZWFybk1vZGUodm9pZCkKK3sKKyAgaW50IHJlczsKKyAgYnJsYXBpX2tleUNvZGVfdCBjb2RlOworICBpbnQgY21kOworICBjaGFyIGJ1ZlswWDEwMF0sICp2YWw7CisKKyAgZnByaW50ZihzdGRlcnIsIkVudGVyaW5nIGNvbW1hbmQgbGVhcm4gbW9kZVxuIik7CisgIGlmIChicmxhcGlfZW50ZXJUdHlNb2RlKC0xLCBOVUxMKTwwKSB7CisgICAgYnJsYXBpX3BlcnJvcigiZW50ZXJUdHlNb2RlIik7CisgICAgcmV0dXJuOworICB9CisKKyAgaWYgKGJybGFwaV93cml0ZVRleHQoQlJMQVBJX0NVUlNPUl9PRkYsICJjb21tYW5kIGxlYXJuIG1vZGUiKTwwKSB7CisgICAgYnJsYXBpX3BlcnJvcigiYnJsYXBpX3dyaXRlVGV4dCIpOworICAgIGV4aXQoUFJPR19FWElUX0ZBVEFMKTsKKyAgfQorCisgIHdoaWxlICgocmVzID0gYnJsYXBpX3JlYWRLZXkoMSwgJmNvZGUpKSAhPSAtMSkgeworICAgIGZwcmludGYoc3RkZXJyLCAiZ290IGtleSAlMDE2IkJSTEFQSV9QUkl4S0VZQ09ERSJcbiIsY29kZSk7CisgICAgY21kID0gY21kQnJsYXBpVG9Ccmx0dHkoY29kZSk7CisgICAgZGVzY3JpYmVDb21tYW5kKGJ1Ziwgc2l6ZW9mKGJ1ZiksIGNtZCwKKyAgICAgICAgICAgICAgICAgICAgKENET19JbmNsdWRlTmFtZSB8IENET19JbmNsdWRlT3BlcmFuZCkpOworICAgIGJybGFwaV93cml0ZVRleHQoQlJMQVBJX0NVUlNPUl9PRkYsIGJ1Zik7CisgICAgZnByaW50ZihzdGRlcnIsICIlc1xuIiwgYnVmKTsKKyAgICB2YWwgPSBicmxhcGlfZ2V0UGFyYW1ldGVyQWxsb2MoQlJMQVBJX1BBUkFNX0NPTU1BTkRfTE9OR19OQU1FLCBjbWQsIEJSTEFQSV9QQVJBTUZfR0xPQkFMLCBOVUxMKTsKKyAgICBmcHJpbnRmKHN0ZGVyciwgIiVzXG4iLCB2YWwpOworICAgIGZyZWUodmFsKTsKKyAgICBpZiAoY21kPT1CUkxfQ01EX0xFQVJOKSByZXR1cm47CisgIH0KKyAgYnJsYXBpX3BlcnJvcigiYnJsYXBpX3JlYWRLZXkiKTsKK30KKworc3RhdGljIHZvaWQgYnJhaWxsZVJldGFpbkRvdHNDaGFuZ2VkKGJybGFwaV9wYXJhbV90IHBhcmFtZXRlciwgYnJsYXBpX3BhcmFtX3N1YnBhcmFtX3Qgc3VicGFyYW0sIGJybGFwaV9wYXJhbV9mbGFnc190IGZsYWdzLCB2b2lkICpwcml2LCBjb25zdCB2b2lkICpkYXRhLCBzaXplX3QgbGVuKQoreworICBjb25zdCBicmxhcGlfcGFyYW1fcmV0YWluRG90c190ICpkID0gZGF0YTsKKyAgaWYgKHBhcmFtZXRlciAhPSBCUkxBUElfUEFSQU1fUkVUQUlOX0RPVFMpCisgIHsKKyAgICBwcmludGYoImhhbmRsZXIgY2FsbGVkIGZvciAleCwgYW5vdGhlciBwYXJhbWV0ZXIgdGhhbiByZXRhaW5kb3QgcGFyYW1ldGVyPyFcbiIsIHBhcmFtZXRlcik7CisgICAgcmV0dXJuOworICB9CisgIHByaW50ZigibmV3IHJldGFpbiBkb3RzICV6ZDogJWRcbiIsIGxlbiwgKmQpOworfQorCitzdGF0aWMgdm9pZCB0ZXN0UGFyYW1ldGVycyh2b2lkKQoreworICBicmxhcGlfcGFyYW1fcmV0YWluRG90c190IHZhbDsKKyAgaWYgKGJybGFwaV9nZXRQYXJhbWV0ZXIoQlJMQVBJX1BBUkFNX1JFVEFJTl9ET1RTLCAwLCBCUkxBUElfUEFSQU1GX0xPQ0FMLCAmdmFsLCBzaXplb2YodmFsKSkgPCAwKSB7CisgICAgYnJsYXBpX3BlcnJvcigiZ2V0UGFyYW1ldGVyIik7CisgIH0KKyAgcHJpbnRmKCJyZXRhaW4gZG90cyB3YXMgJWRcbiIsIHZhbCk7CisgIHByaW50Zigibm93IHdhdGNoaW5nIHJldGFpbiBkb3RzIHBhcmFtZXRlclxuIik7CisgIGlmIChicmxhcGlfd2F0Y2hQYXJhbWV0ZXIoQlJMQVBJX1BBUkFNX1JFVEFJTl9ET1RTLCAwLCBCUkxBUElfUEFSQU1GX0xPQ0FMLCBicmFpbGxlUmV0YWluRG90c0NoYW5nZWQsIE5VTEwsIE5VTEwsIDApID09IDApIHsKKyAgICBicmxhcGlfcGVycm9yKCJ3YXRjaFBhcmFtZXRlciIpOworICB9CisgIHZhbCA9IDA7CisgIHByaW50Zigic2V0dGluZyByZXRhaW4gZG90cyBwYXJhbWV0ZXIgdG8gJWRcbiIsIHZhbCk7CisgIGlmIChicmxhcGlfc2V0UGFyYW1ldGVyKEJSTEFQSV9QQVJBTV9SRVRBSU5fRE9UUywgMCwgQlJMQVBJX1BBUkFNRl9MT0NBTCwgJnZhbCwgc2l6ZW9mKHZhbCkpIDwgMCkgeworICAgIGJybGFwaV9wZXJyb3IoInNldFBhcmFtZXRlciIpOworICB9CisgIGlmIChicmxhcGlfZ2V0UGFyYW1ldGVyKEJSTEFQSV9QQVJBTV9SRVRBSU5fRE9UUywgMCwgQlJMQVBJX1BBUkFNRl9MT0NBTCwgJnZhbCwgc2l6ZW9mKHZhbCkpIDwgMCkgeworICAgIGJybGFwaV9wZXJyb3IoImdldFBhcmFtZXRlciIpOworICB9CisgIHByaW50ZigicmV0YWluIGRvdHMgbm93ICVkXG4iLCB2YWwpOworICB2YWwgPSAxOworICBwcmludGYoInNldHRpbmcgcmV0YWluIGRvdHMgcGFyYW1ldGVyIHRvICVkXG4iLCB2YWwpOworICBpZiAoYnJsYXBpX3NldFBhcmFtZXRlcihCUkxBUElfUEFSQU1fUkVUQUlOX0RPVFMsIDAsIEJSTEFQSV9QQVJBTUZfTE9DQUwsICZ2YWwsIHNpemVvZih2YWwpKSA8IDApIHsKKyAgICBicmxhcGlfcGVycm9yKCJzZXRQYXJhbWV0ZXIiKTsKKyAgfQorICBpZiAoYnJsYXBpX2dldFBhcmFtZXRlcihCUkxBUElfUEFSQU1fUkVUQUlOX0RPVFMsIDAsIEJSTEFQSV9QQVJBTUZfTE9DQUwsICZ2YWwsIHNpemVvZih2YWwpKSA8IDApIHsKKyAgICBicmxhcGlfcGVycm9yKCJnZXRQYXJhbWV0ZXIiKTsKKyAgfQorICBwcmludGYoInJldGFpbiBkb3RzIG5vdyAlZFxuIiwgdmFsKTsKKworICBsaXN0S2V5cygpOworfQorCisjaWZkZWYgU0lHVVNSMQorc3RhdGljIHZvaWQgZW1wdHlTaWduYWxIYW5kbGVyKGludCBzaWcpIHsgfQorI2VuZGlmIC8qIFNJR1VTUjEgKi8KKworc3RhdGljIHZvaWQgc3VzcGVuZERyaXZlcih2b2lkKQoreworICBjaGFyIGRyaXZlclszMF07CisgIGZwcmludGYoc3RkZXJyLCAiR2V0dGluZyBkcml2ZXIgbmFtZTogIik7CisKKyAgaWYgKGJybGFwaV9nZXREcml2ZXJOYW1lKGRyaXZlciwgc2l6ZW9mKGRyaXZlcikpPDApIHsKKyAgICBicmxhcGlfcGVycm9yKCJmYWlsZWQiKTsKKyAgICBleGl0KFBST0dfRVhJVF9GQVRBTCk7CisgIH0KKyAgZnByaW50ZihzdGRlcnIsICIlc1xuIiwgZHJpdmVyKTsKKworICBmcHJpbnRmKHN0ZGVyciwgIlN1c3BlbmRpbmcgZHJpdmVyXG4iKTsKKyAgaWYgKGJybGFwaV9zdXNwZW5kRHJpdmVyKGRyaXZlcikpIHsKKyAgICBicmxhcGlfcGVycm9yKCJzdXNwZW5kIik7CisgIH0gZWxzZSB7CisjaWZkZWYgU0lHVVNSMQorICAgIHNpZ25hbChTSUdVU1IxLGVtcHR5U2lnbmFsSGFuZGxlcik7CisjZW5kaWYgLyogU0lHVVNSMSAqLworCisgICAgeworICAgICAgUHJvY2Vzc0lkZW50aWZpZXIgcGlkID0gZ2V0UHJvY2Vzc0lkZW50aWZpZXIoKTsKKyAgICAgIGZwcmludGYoc3RkZXJyLCAiV2FpdGluZyAodG8gcmVzdW1lLCBzZW5kIFNJR1VTUjEgdG8gcHJvY2VzcyAlIlBSSXBpZCIpXG4iLCBwaWQpOworICAgIH0KKworICAgIGJybGFwaV9wYXVzZSgtMSk7CisKKyNpZmRlZiBTSUdVU1IxCisgICAgc2lnbmFsKFNJR1VTUjEsU0lHX0RGTCk7CisjZW5kaWYgLyogU0lHVVNSMSAqLworCisgICAgZnByaW50ZihzdGRlcnIsICJSZXN1bWluZyBkcml2ZXJcbiIpOworICAgIGlmIChicmxhcGlfcmVzdW1lRHJpdmVyKCkpIHsKKyAgICAgIGJybGFwaV9wZXJyb3IoInJlc3VtZURyaXZlciIpOworICAgIH0KKyAgfQorfQorCit2b2xhdGlsZSBpbnQgdGhyZWFkX2RvbmU7CitzdGF0aWMgdm9pZCAqdGhyZWFkX2Z1bih2b2lkICpmb28pCit7CisgIGJybGFwaV9rZXlDb2RlX3QgY29kZTsKKyAgZG8geworICAgIGJybGFwaV9yZWFkS2V5KDEsICZjb2RlKTsKKyAgICBwcmludGYoImdvdCBrZXkgJSJQUkl4NjQiXG4iLCBjb2RlKTsKKyAgICBpZiAoYnJsYXBpX3JlYWRLZXlXaXRoVGltZW91dCgxMDAwLCAmY29kZSkgIT0gMSkgeworICAgICAgcHJpbnRmKCJkaWRuJ3QgZ2V0IGEga2V5IHdpdGhpbiB0aGUgMXMgZGVsYXlcbiIpOworICAgIH0gZWxzZSB7CisgICAgICBwcmludGYoImdvdCBrZXkgJSJQUkl4NjQiIHdpdGhpbiB0aGUgMXMgZGVsYXlcbiIsIGNvZGUpOworICAgIH0KKyAgfSB3aGlsZSAoY29kZSAhPSAoQlJMQVBJX0tFWV9UWVBFX0NNRCB8IEJSTF9DTURfSE9NRSkpOworICB0aHJlYWRfZG9uZSA9IDE7CisgIHJldHVybiBOVUxMOworfQorCitzdGF0aWMgdm9pZCBleGVyY2lzZVRocmVhZHModm9pZCkKK3sKKyAgcHRocmVhZF90IHRocmVhZDsKKyAgdW5zaWduZWQgeCwgeTsKKyAgdW5zaWduZWQgaSA9IDA7CisgIGlmIChicmxhcGlfZ2V0RGlzcGxheVNpemUoJngsICZ5KTwwKSB7CisgICAgYnJsYXBpX3BlcnJvcigiZmFpbGVkIik7CisgICAgZXhpdChQUk9HX0VYSVRfRkFUQUwpOworICB9CisgIGlmIChicmxhcGlfZW50ZXJUdHlNb2RlKC0xLCBOVUxMKTwwKSB7CisgICAgYnJsYXBpX3BlcnJvcigiZW50ZXJUdHlNb2RlIik7CisgICAgZXhpdChQUk9HX0VYSVRfRkFUQUwpOworICB9CisgIHB0aHJlYWRfY3JlYXRlKCZ0aHJlYWQsIE5VTEwsIHRocmVhZF9mdW4sIE5VTEwpOworICB3aGlsZSAoIXRocmVhZF9kb25lKSB7CisgICAgY2hhciBidWZbeCsxXTsKKyAgICBzbnByaW50ZihidWYsIHNpemVvZihidWYpLCAiY291bnRpbmcgJWQiLCBpKTsKKyAgICBidWZbeF0gPSAwOworICAgIGJybGFwaV93cml0ZVRleHQoQlJMQVBJX0NVUlNPUl9PRkYsIGJ1Zik7CisgICAgYXN5bmNXYWl0KDEwMDApOworICAgIGkrKzsKKyAgfQorICBwdGhyZWFkX2pvaW4odGhyZWFkLCBOVUxMKTsKK30KKworaW50CittYWluIChpbnQgYXJnYywgY2hhciAqYXJndltdKSB7CisgIFByb2dyYW1FeGl0U3RhdHVzIGV4aXRTdGF0dXMgPSBQUk9HX0VYSVRfU1VDQ0VTUzsKKyAgYnJsYXBpX2ZpbGVEZXNjcmlwdG9yIGZkOworCisgIHsKKyAgICBjb25zdCBDb21tYW5kTGluZURlc2NyaXB0b3IgZGVzY3JpcHRvciA9IHsKKyAgICAgIC5vcHRpb25zID0gJnByb2dyYW1PcHRpb25zLAorICAgICAgLmFwcGxpY2F0aW9uTmFtZSA9ICJhcGl0ZXN0IiwKKworICAgICAgLnVzYWdlID0geworICAgICAgICAucHVycG9zZSA9IHN0cnRleHQoIlRlc3QgQnJsQVBJIGZ1bmN0aW9ucy4iKSwKKyAgICAgIH0KKyAgICB9OworCisgICAgUFJPQ0VTU19PUFRJT05TKGRlc2NyaXB0b3IsIGFyZ2MsIGFyZ3YpOworICB9CisKKyAgc2V0dGluZ3MuaG9zdCA9IG9wdF9ob3N0OworICBzZXR0aW5ncy5hdXRoID0gb3B0X2F1dGg7CisgIGZwcmludGYoc3RkZXJyLCAiQ29ubmVjdGluZyB0byBCcmxBUEkuLi4gIik7CisgIGlmICgoZmQ9YnJsYXBpX29wZW5Db25uZWN0aW9uKCZzZXR0aW5ncywgJnNldHRpbmdzKSkgIT0gKGJybGFwaV9maWxlRGVzY3JpcHRvcikoLTEpKSB7CisgICAgZnByaW50ZihzdGRlcnIsICJkb25lIChmZD0lIlBSSWZkIilcbiIsIGZkKTsKKyAgICBmcHJpbnRmKHN0ZGVyciwiQ29ubmVjdGVkIHRvICVzIHVzaW5nIGF1dGggJXNcbiIsIHNldHRpbmdzLmhvc3QsIHNldHRpbmdzLmF1dGgpOworCisgICAgaWYgKG9wdF9zaG93TmFtZSkgeworICAgICAgc2hvd0RyaXZlck5hbWUoKTsKKyAgICB9CisKKyAgICBpZiAob3B0X3Nob3dNb2RlbElkZW50aWZpZXIpIHsKKyAgICAgIHNob3dNb2RlbElkZW50aWZpZXIoKTsKKyAgICB9CisKKyAgICBpZiAob3B0X3Nob3dTaXplKSB7CisgICAgICBzaG93RGlzcGxheVNpemUoKTsKKyAgICB9CisKKyAgICBpZiAob3B0X3Nob3dEb3RzKSB7CisgICAgICBzaG93RG90cygpOworICAgIH0KKworICAgIGlmIChvcHRfc2hvd0tleUNvZGVzKSB7CisgICAgICBzaG93S2V5Q29kZXMoKTsKKyAgICB9CisKKyAgICBpZiAob3B0X2xlYXJuTW9kZSkgeworICAgICAgZW50ZXJMZWFybk1vZGUoKTsKKyAgICB9CisKKyAgICBpZiAob3B0X3BhcmFtZXRlcnMpIHsKKyAgICAgIHRlc3RQYXJhbWV0ZXJzKCk7CisgICAgfQorCisgICAgaWYgKG9wdF9zdXNwZW5kTW9kZSkgeworICAgICAgc3VzcGVuZERyaXZlcigpOworICAgIH0KKworICAgIGlmIChvcHRfdGhyZWFkTW9kZSkgeworICAgICAgZXhlcmNpc2VUaHJlYWRzKCk7CisgICAgfQorCisgICAgYnJsYXBpX2Nsb3NlQ29ubmVjdGlvbigpOworICAgIGZwcmludGYoc3RkZXJyLCAiRGlzY29ubmVjdGVkXG4iKTsKKyAgfSBlbHNlIHsKKyAgICBmcHJpbnRmKHN0ZGVyciwgImZhaWxlZCB0byBjb25uZWN0IHRvICVzIHVzaW5nIGF1dGggJXMiLHNldHRpbmdzLmhvc3QsIHNldHRpbmdzLmF1dGgpOworICAgIGJybGFwaV9wZXJyb3IoIiIpOworICAgIGV4aXRTdGF0dXMgPSBQUk9HX0VYSVRfRkFUQUw7CisgIH0KKyAgcmV0dXJuIGV4aXRTdGF0dXM7Cit9CmRpZmYgLS1naXQgYS9Qcm9ncmFtcy9hc3luY19hbGFybS5jIGIvUHJvZ3JhbXMvYXN5bmNfYWxhcm0uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNzVjYTIxCi0tLSAvZGV2L251bGwKKysrIGIvUHJvZ3JhbXMvYXN5bmNfYWxhcm0uYwpAQCAtMCwwICsxLDI5MiBAQAorLyoKKyAqIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisgKiAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisgKgorICogQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKKyNpbmNsdWRlICJwcm9sb2d1ZS5oIgorCisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKyNpbmNsdWRlICJsb2cuaCIKKyNpbmNsdWRlICJhc3luY19hbGFybS5oIgorI2luY2x1ZGUgImFzeW5jX2ludGVybmFsLmgiCisjaW5jbHVkZSAidGltaW5nLmgiCisKK3R5cGVkZWYgc3RydWN0IHsKKyAgVGltZVZhbHVlIHRpbWU7CisgIGludCBpbnRlcnZhbDsKKworICBBc3luY0FsYXJtQ2FsbGJhY2sgKmNhbGxiYWNrOworICB2b2lkICpkYXRhOworCisgIHVuc2lnbmVkIGFjdGl2ZToxOworICB1bnNpZ25lZCBjYW5jZWw6MTsKKyAgdW5zaWduZWQgcmVzY2hlZHVsZToxOworfSBBbGFybUVudHJ5OworCitzdHJ1Y3QgQXN5bmNBbGFybURhdGFTdHJ1Y3QgeworICBRdWV1ZSAqYWxhcm1RdWV1ZTsKK307CisKK3ZvaWQKK2FzeW5jRGVhbGxvY2F0ZUFsYXJtRGF0YSAoQXN5bmNBbGFybURhdGEgKmFkKSB7CisgIGlmIChhZCkgeworICAgIGlmIChhZC0+YWxhcm1RdWV1ZSkgZGVhbGxvY2F0ZVF1ZXVlKGFkLT5hbGFybVF1ZXVlKTsKKyAgICBmcmVlKGFkKTsKKyAgfQorfQorCitzdGF0aWMgQXN5bmNBbGFybURhdGEgKgorZ2V0QWxhcm1EYXRhICh2b2lkKSB7CisgIEFzeW5jVGhyZWFkU3BlY2lmaWNEYXRhICp0c2QgPSBhc3luY0dldFRocmVhZFNwZWNpZmljRGF0YSgpOworICBpZiAoIXRzZCkgcmV0dXJuIE5VTEw7CisKKyAgaWYgKCF0c2QtPmFsYXJtRGF0YSkgeworICAgIEFzeW5jQWxhcm1EYXRhICphZDsKKworICAgIGlmICghKGFkID0gbWFsbG9jKHNpemVvZigqYWQpKSkpIHsKKyAgICAgIGxvZ01hbGxvY0Vycm9yKCk7CisgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICBtZW1zZXQoYWQsIDAsIHNpemVvZigqYWQpKTsKKyAgICBhZC0+YWxhcm1RdWV1ZSA9IE5VTEw7CisgICAgdHNkLT5hbGFybURhdGEgPSBhZDsKKyAgfQorCisgIHJldHVybiB0c2QtPmFsYXJtRGF0YTsKK30KKworc3RhdGljIHZvaWQKK2NhbmNlbEFsYXJtIChFbGVtZW50ICplbGVtZW50KSB7CisgIEFsYXJtRW50cnkgKmFsYXJtID0gZ2V0RWxlbWVudEl0ZW0oZWxlbWVudCk7CisKKyAgaWYgKGFsYXJtLT5hY3RpdmUpIHsKKyAgICBhbGFybS0+Y2FuY2VsID0gMTsKKyAgfSBlbHNlIHsKKyAgICBkZWxldGVFbGVtZW50KGVsZW1lbnQpOworICB9Cit9CisKK3N0YXRpYyB2b2lkCitkZWFsbG9jYXRlQWxhcm1FbnRyeSAodm9pZCAqaXRlbSwgdm9pZCAqZGF0YSkgeworICBBbGFybUVudHJ5ICphbGFybSA9IGl0ZW07CisKKyAgZnJlZShhbGFybSk7Cit9CisKK3N0YXRpYyBpbnQKK2NvbXBhcmVBbGFybUVudHJpZXMgKGNvbnN0IHZvaWQgKm5ld0l0ZW0sIGNvbnN0IHZvaWQgKmV4aXN0aW5nSXRlbSwgdm9pZCAqcXVldWVEYXRhKSB7CisgIGNvbnN0IEFsYXJtRW50cnkgKm5ld0FsYXJtID0gbmV3SXRlbTsKKyAgY29uc3QgQWxhcm1FbnRyeSAqZXhpc3RpbmdBbGFybSA9IGV4aXN0aW5nSXRlbTsKKworICByZXR1cm4gY29tcGFyZVRpbWVWYWx1ZXMoJm5ld0FsYXJtLT50aW1lLCAmZXhpc3RpbmdBbGFybS0+dGltZSkgPCAwOworfQorCitzdGF0aWMgUXVldWUgKgorZ2V0QWxhcm1RdWV1ZSAoaW50IGNyZWF0ZSkgeworICBBc3luY0FsYXJtRGF0YSAqYWQgPSBnZXRBbGFybURhdGEoKTsKKyAgaWYgKCFhZCkgcmV0dXJuIE5VTEw7CisKKyAgaWYgKCFhZC0+YWxhcm1RdWV1ZSAmJiBjcmVhdGUpIHsKKyAgICBpZiAoKGFkLT5hbGFybVF1ZXVlID0gbmV3UXVldWUoZGVhbGxvY2F0ZUFsYXJtRW50cnksIGNvbXBhcmVBbGFybUVudHJpZXMpKSkgeworICAgICAgc3RhdGljIEFzeW5jUXVldWVNZXRob2RzIG1ldGhvZHMgPSB7CisgICAgICAgIC5jYW5jZWxSZXF1ZXN0ID0gY2FuY2VsQWxhcm0KKyAgICAgIH07CisKKyAgICAgIHNldFF1ZXVlRGF0YShhZC0+YWxhcm1RdWV1ZSwgJm1ldGhvZHMpOworICAgIH0KKyAgfQorCisgIHJldHVybiBhZC0+YWxhcm1RdWV1ZTsKK30KKwordHlwZWRlZiBzdHJ1Y3QgeworICBjb25zdCBUaW1lVmFsdWUgKnRpbWU7CisgIEFzeW5jQWxhcm1DYWxsYmFjayAqY2FsbGJhY2s7CisgIHZvaWQgKmRhdGE7Cit9IEFsYXJtRWxlbWVudFBhcmFtZXRlcnM7CisKK3N0YXRpYyBFbGVtZW50ICoKK25ld0FsYXJtRWxlbWVudCAoY29uc3Qgdm9pZCAqcGFyYW1ldGVycykgeworICBjb25zdCBBbGFybUVsZW1lbnRQYXJhbWV0ZXJzICphZXAgPSBwYXJhbWV0ZXJzOworICBRdWV1ZSAqYWxhcm1zID0gZ2V0QWxhcm1RdWV1ZSgxKTsKKworICBpZiAoYWxhcm1zKSB7CisgICAgQWxhcm1FbnRyeSAqYWxhcm07CisKKyAgICBpZiAoKGFsYXJtID0gbWFsbG9jKHNpemVvZigqYWxhcm0pKSkpIHsKKyAgICAgIG1lbXNldChhbGFybSwgMCwgc2l6ZW9mKCphbGFybSkpOworCisgICAgICBhbGFybS0+dGltZSA9ICphZXAtPnRpbWU7CisKKyAgICAgIGFsYXJtLT5jYWxsYmFjayA9IGFlcC0+Y2FsbGJhY2s7CisgICAgICBhbGFybS0+ZGF0YSA9IGFlcC0+ZGF0YTsKKworICAgICAgYWxhcm0tPmFjdGl2ZSA9IDA7CisgICAgICBhbGFybS0+Y2FuY2VsID0gMDsKKyAgICAgIGFsYXJtLT5yZXNjaGVkdWxlID0gMDsKKworICAgICAgeworICAgICAgICBFbGVtZW50ICplbGVtZW50ID0gZW5xdWV1ZUl0ZW0oYWxhcm1zLCBhbGFybSk7CisKKyAgICAgICAgaWYgKGVsZW1lbnQpIHsKKyAgICAgICAgICBsb2dTeW1ib2woTE9HX0NBVEVHT1JZKEFTWU5DX0VWRU5UUyksIGFlcC0+Y2FsbGJhY2ssICJhbGFybSBhZGRlZCIpOworICAgICAgICAgIHJldHVybiBlbGVtZW50OworICAgICAgICB9CisgICAgICB9CisKKyAgICAgIGZyZWUoYWxhcm0pOworICAgIH0gZWxzZSB7CisgICAgICBsb2dNYWxsb2NFcnJvcigpOworICAgIH0KKyAgfQorCisgIHJldHVybiBOVUxMOworfQorCitpbnQKK2FzeW5jTmV3QWJzb2x1dGVBbGFybSAoCisgIEFzeW5jSGFuZGxlICpoYW5kbGUsCisgIGNvbnN0IFRpbWVWYWx1ZSAqdGltZSwKKyAgQXN5bmNBbGFybUNhbGxiYWNrICpjYWxsYmFjaywKKyAgdm9pZCAqZGF0YQorKSB7CisgIGNvbnN0IEFsYXJtRWxlbWVudFBhcmFtZXRlcnMgYWVwID0geworICAgIC50aW1lID0gdGltZSwKKyAgICAuY2FsbGJhY2sgPSBjYWxsYmFjaywKKyAgICAuZGF0YSA9IGRhdGEKKyAgfTsKKworICByZXR1cm4gYXN5bmNNYWtlSGFuZGxlKGhhbmRsZSwgbmV3QWxhcm1FbGVtZW50LCAmYWVwKTsKK30KKworaW50Cithc3luY05ld1JlbGF0aXZlQWxhcm0gKAorICBBc3luY0hhbmRsZSAqaGFuZGxlLAorICBpbnQgbWlsbGlzZWNvbmRzLAorICBBc3luY0FsYXJtQ2FsbGJhY2sgKmNhbGxiYWNrLAorICB2b2lkICpkYXRhCispIHsKKyAgVGltZVZhbHVlIHRpbWU7CisKKyAgZ2V0TW9ub3RvbmljVGltZSgmdGltZSk7CisgIGFkanVzdFRpbWVWYWx1ZSgmdGltZSwgbWlsbGlzZWNvbmRzKTsKKyAgcmV0dXJuIGFzeW5jTmV3QWJzb2x1dGVBbGFybShoYW5kbGUsICZ0aW1lLCBjYWxsYmFjaywgZGF0YSk7Cit9CisKK3N0YXRpYyBFbGVtZW50ICoKK2dldEFsYXJtRWxlbWVudCAoQXN5bmNIYW5kbGUgaGFuZGxlKSB7CisgIHJldHVybiBhc3luY0dldEhhbmRsZUVsZW1lbnQoaGFuZGxlLCBnZXRBbGFybVF1ZXVlKDApKTsKK30KKworaW50Cithc3luY1Jlc2V0QWxhcm1UbyAoQXN5bmNIYW5kbGUgaGFuZGxlLCBjb25zdCBUaW1lVmFsdWUgKnRpbWUpIHsKKyAgRWxlbWVudCAqZWxlbWVudCA9IGdldEFsYXJtRWxlbWVudChoYW5kbGUpOworCisgIGlmIChlbGVtZW50KSB7CisgICAgQWxhcm1FbnRyeSAqYWxhcm0gPSBnZXRFbGVtZW50SXRlbShlbGVtZW50KTsKKworICAgIGFsYXJtLT50aW1lID0gKnRpbWU7CisgICAgcmVxdWV1ZUVsZW1lbnQoZWxlbWVudCk7CisgICAgcmV0dXJuIDE7CisgIH0KKworICByZXR1cm4gMDsKK30KKworaW50Cithc3luY1Jlc2V0QWxhcm1JbiAoQXN5bmNIYW5kbGUgaGFuZGxlLCBpbnQgbWlsbGlzZWNvbmRzKSB7CisgIFRpbWVWYWx1ZSB0aW1lOworCisgIGdldE1vbm90b25pY1RpbWUoJnRpbWUpOworICBhZGp1c3RUaW1lVmFsdWUoJnRpbWUsIG1pbGxpc2Vjb25kcyk7CisgIHJldHVybiBhc3luY1Jlc2V0QWxhcm1UbyhoYW5kbGUsICZ0aW1lKTsKK30KKworaW50Cithc3luY1Jlc2V0QWxhcm1JbnRlcnZhbCAoQXN5bmNIYW5kbGUgaGFuZGxlLCBpbnQgbWlsbGlzZWNvbmRzKSB7CisgIEVsZW1lbnQgKmVsZW1lbnQgPSBnZXRBbGFybUVsZW1lbnQoaGFuZGxlKTsKKworICBpZiAoZWxlbWVudCkgeworICAgIEFsYXJtRW50cnkgKmFsYXJtID0gZ2V0RWxlbWVudEl0ZW0oZWxlbWVudCk7CisKKyAgICBhbGFybS0+aW50ZXJ2YWwgPSBtaWxsaXNlY29uZHM7CisgICAgYWxhcm0tPnJlc2NoZWR1bGUgPSBtaWxsaXNlY29uZHMgPiAwOworICAgIHJldHVybiAxOworICB9CisKKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK3Rlc3RJbmFjdGl2ZUFsYXJtICh2b2lkICppdGVtLCB2b2lkICpkYXRhKSB7CisgIGNvbnN0IEFsYXJtRW50cnkgKmFsYXJtID0gaXRlbTsKKworICByZXR1cm4gIWFsYXJtLT5hY3RpdmU7Cit9CisKK2ludAorYXN5bmNFeGVjdXRlQWxhcm1DYWxsYmFjayAoQXN5bmNBbGFybURhdGEgKmFkLCBsb25nIGludCAqdGltZW91dCkgeworICBpZiAoYWQpIHsKKyAgICBRdWV1ZSAqYWxhcm1zID0gYWQtPmFsYXJtUXVldWU7CisKKyAgICBpZiAoYWxhcm1zKSB7CisgICAgICBFbGVtZW50ICplbGVtZW50ID0gcHJvY2Vzc1F1ZXVlKGFsYXJtcywgdGVzdEluYWN0aXZlQWxhcm0sIE5VTEwpOworCisgICAgICBpZiAoZWxlbWVudCkgeworICAgICAgICBBbGFybUVudHJ5ICphbGFybSA9IGdldEVsZW1lbnRJdGVtKGVsZW1lbnQpOworICAgICAgICBUaW1lVmFsdWUgbm93OworICAgICAgICBsb25nIGludCBtaWxsaXNlY29uZHM7CisKKyAgICAgICAgZ2V0TW9ub3RvbmljVGltZSgmbm93KTsKKyAgICAgICAgbWlsbGlzZWNvbmRzID0gbWlsbGlzZWNvbmRzQmV0d2Vlbigmbm93LCAmYWxhcm0tPnRpbWUpOworCisgICAgICAgIGlmIChtaWxsaXNlY29uZHMgPD0gMCkgeworICAgICAgICAgIEFzeW5jQWxhcm1DYWxsYmFjayAqY2FsbGJhY2sgPSBhbGFybS0+Y2FsbGJhY2s7CisgICAgICAgICAgY29uc3QgQXN5bmNBbGFybUNhbGxiYWNrUGFyYW1ldGVycyBwYXJhbWV0ZXJzID0geworICAgICAgICAgICAgLm5vdyA9ICZub3csCisgICAgICAgICAgICAuZGF0YSA9IGFsYXJtLT5kYXRhCisgICAgICAgICAgfTsKKworICAgICAgICAgIGxvZ1N5bWJvbChMT0dfQ0FURUdPUlkoQVNZTkNfRVZFTlRTKSwgY2FsbGJhY2ssICJhbGFybSBzdGFydGluZyIpOworICAgICAgICAgIGFsYXJtLT5hY3RpdmUgPSAxOworICAgICAgICAgIGlmIChjYWxsYmFjaykgY2FsbGJhY2soJnBhcmFtZXRlcnMpOworICAgICAgICAgIGFsYXJtLT5hY3RpdmUgPSAwOworCisgICAgICAgICAgaWYgKGFsYXJtLT5yZXNjaGVkdWxlKSB7CisgICAgICAgICAgICBhZGp1c3RUaW1lVmFsdWUoJmFsYXJtLT50aW1lLCBhbGFybS0+aW50ZXJ2YWwpOworICAgICAgICAgICAgZ2V0TW9ub3RvbmljVGltZSgmbm93KTsKKyAgICAgICAgICAgIGlmIChjb21wYXJlVGltZVZhbHVlcygmYWxhcm0tPnRpbWUsICZub3cpIDwgMCkgYWxhcm0tPnRpbWUgPSBub3c7CisgICAgICAgICAgICByZXF1ZXVlRWxlbWVudChlbGVtZW50KTsKKyAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgYWxhcm0tPmNhbmNlbCA9IDE7CisgICAgICAgICAgfQorCisgICAgICAgICAgaWYgKGFsYXJtLT5jYW5jZWwpIGRlbGV0ZUVsZW1lbnQoZWxlbWVudCk7CisgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgIH0KKworICAgICAgICBpZiAobWlsbGlzZWNvbmRzIDwgKnRpbWVvdXQpIHsKKyAgICAgICAgICAqdGltZW91dCA9IG1pbGxpc2Vjb25kczsKKyAgICAgICAgICBsb2dTeW1ib2woTE9HX0NBVEVHT1JZKEFTWU5DX0VWRU5UUyksIGFsYXJtLT5jYWxsYmFjaywgIm5leHQgYWxhcm06ICVsZCIsICp0aW1lb3V0KTsKKyAgICAgICAgfQorICAgICAgfQorICAgIH0KKyAgfQorCisgIHJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvUHJvZ3JhbXMvYXN5bmNfZGF0YS5jIGIvUHJvZ3JhbXMvYXN5bmNfZGF0YS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIwZWRiMzYKLS0tIC9kZXYvbnVsbAorKysgYi9Qcm9ncmFtcy9hc3luY19kYXRhLmMKQEAgLTAsMCArMSw2OSBAQAorLyoKKyAqIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisgKiAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisgKgorICogQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKKyNpbmNsdWRlICJwcm9sb2d1ZS5oIgorCisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKyNpbmNsdWRlICJsb2cuaCIKKyNpbmNsdWRlICJ0aHJlYWQuaCIKKyNpbmNsdWRlICJhc3luY19pbnRlcm5hbC5oIgorCitzdGF0aWMgVEhSRUFEX1NQRUNJRklDX0RBVEFfTkVXKHRzZEFzeW5jKSB7CisgIEFzeW5jVGhyZWFkU3BlY2lmaWNEYXRhICp0c2Q7CisKKyAgaWYgKCh0c2QgPSBtYWxsb2Moc2l6ZW9mKCp0c2QpKSkpIHsKKyAgICBtZW1zZXQodHNkLCAwLCBzaXplb2YoKnRzZCkpOworCisgICAgdHNkLT53YWl0RGF0YSA9IE5VTEw7CisgICAgdHNkLT5hbGFybURhdGEgPSBOVUxMOworICAgIHRzZC0+dGFza0RhdGEgPSBOVUxMOworICAgIHRzZC0+aW9EYXRhID0gTlVMTDsKKyAgICB0c2QtPnNpZ25hbERhdGEgPSBOVUxMOworCisgICAgcmV0dXJuIHRzZDsKKyAgfSBlbHNlIHsKKyAgICBsb2dNYWxsb2NFcnJvcigpOworICB9CisKKyAgcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBUSFJFQURfU1BFQ0lGSUNfREFUQV9ERVNUUk9ZKHRzZEFzeW5jKSB7CisgIEFzeW5jVGhyZWFkU3BlY2lmaWNEYXRhICp0c2QgPSBkYXRhOworCisgIGlmICh0c2QpIHsKKyAgICBhc3luY0RlYWxsb2NhdGVXYWl0RGF0YSh0c2QtPndhaXREYXRhKTsKKyAgICBhc3luY0RlYWxsb2NhdGVBbGFybURhdGEodHNkLT5hbGFybURhdGEpOworICAgIGFzeW5jRGVhbGxvY2F0ZVRhc2tEYXRhKHRzZC0+dGFza0RhdGEpOworICAgIGFzeW5jRGVhbGxvY2F0ZUlvRGF0YSh0c2QtPmlvRGF0YSk7CisKKyNpZmRlZiBBU1lOQ19DQU5fSEFORExFX1NJR05BTFMKKyAgICBhc3luY0RlYWxsb2NhdGVTaWduYWxEYXRhKHRzZC0+c2lnbmFsRGF0YSk7CisjZW5kaWYgLyogQVNZTkNfQ0FOX0hBTkRMRV9TSUdOQUxTICovCisKKyAgICBmcmVlKHRzZCk7CisgIH0KK30KKworVEhSRUFEX1NQRUNJRklDX0RBVEFfQ09OVFJPTCh0c2RBc3luYyk7CisKK0FzeW5jVGhyZWFkU3BlY2lmaWNEYXRhICoKK2FzeW5jR2V0VGhyZWFkU3BlY2lmaWNEYXRhICh2b2lkKSB7CisgIHJldHVybiBnZXRUaHJlYWRTcGVjaWZpY0RhdGEoJnRzZEFzeW5jKTsKK30KZGlmZiAtLWdpdCBhL1Byb2dyYW1zL2FzeW5jX2V2ZW50LmMgYi9Qcm9ncmFtcy9hc3luY19ldmVudC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAwOTk1NTAKLS0tIC9kZXYvbnVsbAorKysgYi9Qcm9ncmFtcy9hc3luY19ldmVudC5jCkBAIC0wLDAgKzEsMTYzIEBACisvKgorICogQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyAqICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyAqCisgKiBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorICoKKyAqIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyAqCisgKiBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisgKi8KKworI2luY2x1ZGUgInByb2xvZ3VlLmgiCisKKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworI2luY2x1ZGUgImxvZy5oIgorI2luY2x1ZGUgImFzeW5jX2lvLmgiCisjaW5jbHVkZSAiYXN5bmNfZXZlbnQuaCIKKyNpbmNsdWRlICJhc3luY19pbnRlcm5hbC5oIgorI2luY2x1ZGUgImZpbGUuaCIKKyNpbmNsdWRlICJpb19taXNjLmgiCisKK3N0cnVjdCBBc3luY0V2ZW50U3RydWN0IHsKKyAgQXN5bmNFdmVudENhbGxiYWNrICpjYWxsYmFjazsKKyAgdm9pZCAqZGF0YTsKKworICBGaWxlRGVzY3JpcHRvciBwaXBlSW5wdXQ7CisgIEZpbGVEZXNjcmlwdG9yIHBpcGVPdXRwdXQ7CisKKyAgRmlsZURlc2NyaXB0b3IgbW9uaXRvckRlc2NyaXB0b3I7CisgIEFzeW5jSGFuZGxlIG1vbml0b3JIYW5kbGU7CisKKyNpZmRlZiBfX01JTkdXMzJfXworICBDUklUSUNBTF9TRUNUSU9OIGNyaXRpY2FsU2VjdGlvbjsKKyAgdW5zaWduZWQgaW50IHBlbmRpbmdDb3VudDsKKyNlbmRpZiAvKiBfX01JTkdXMzJfXyAqLworfTsKKworQVNZTkNfTU9OSVRPUl9DQUxMQkFDSyhhc3luY01vbml0b3JFdmVudFBpcGUpIHsKKyAgQXN5bmNFdmVudCAqZXZlbnQgPSBwYXJhbWV0ZXJzLT5kYXRhOworICB2b2lkICpkYXRhOworICBjb25zdCBzaXplX3Qgc2l6ZSA9IHNpemVvZihkYXRhKTsKKworICBpZiAocmVhZEZpbGVEZXNjcmlwdG9yKGV2ZW50LT5waXBlT3V0cHV0LCAmZGF0YSwgc2l6ZSkgPT0gc2l6ZSkgeworI2lmZGVmIF9fTUlOR1czMl9fCisgICAgRW50ZXJDcml0aWNhbFNlY3Rpb24oJmV2ZW50LT5jcml0aWNhbFNlY3Rpb24pOworICAgIGlmICghLS1ldmVudC0+cGVuZGluZ0NvdW50KSBSZXNldEV2ZW50KGV2ZW50LT5tb25pdG9yRGVzY3JpcHRvcik7CisgICAgTGVhdmVDcml0aWNhbFNlY3Rpb24oJmV2ZW50LT5jcml0aWNhbFNlY3Rpb24pOworI2VuZGlmIC8qIF9fTUlOR1czMl9fICovCisKKyAgICB7CisgICAgICBBc3luY0V2ZW50Q2FsbGJhY2sgKmNhbGxiYWNrID0gZXZlbnQtPmNhbGxiYWNrOworCisgICAgICBjb25zdCBBc3luY0V2ZW50Q2FsbGJhY2tQYXJhbWV0ZXJzIHBhcmFtZXRlcnMgPSB7CisgICAgICAgIC5ldmVudERhdGEgPSBldmVudC0+ZGF0YSwKKyAgICAgICAgLnNpZ25hbERhdGEgPSBkYXRhCisgICAgICB9OworCisgICAgICBsb2dTeW1ib2woTE9HX0NBVEVHT1JZKEFTWU5DX0VWRU5UUyksIGNhbGxiYWNrLCAiZXZlbnQgc3RhcnRpbmciKTsKKyAgICAgIGlmIChjYWxsYmFjaykgY2FsbGJhY2soJnBhcmFtZXRlcnMpOworICAgIH0KKworICAgIHJldHVybiAxOworICB9CisKKyAgcmV0dXJuIDA7Cit9CisKK2ludAorYXN5bmNTaWduYWxFdmVudCAoQXN5bmNFdmVudCAqZXZlbnQsIHZvaWQgKmRhdGEpIHsKKyAgY29uc3Qgc2l6ZV90IHNpemUgPSBzaXplb2YoZGF0YSk7CisgIHNzaXplX3QgcmVzdWx0ID0gd3JpdGVGaWxlRGVzY3JpcHRvcihldmVudC0+cGlwZUlucHV0LCAmZGF0YSwgc2l6ZSk7CisKKyAgaWYgKHJlc3VsdCA9PSBzaXplKSB7CisjaWZkZWYgX19NSU5HVzMyX18KKyAgICBFbnRlckNyaXRpY2FsU2VjdGlvbigmZXZlbnQtPmNyaXRpY2FsU2VjdGlvbik7CisgICAgaWYgKCFldmVudC0+cGVuZGluZ0NvdW50KyspIFNldEV2ZW50KGV2ZW50LT5tb25pdG9yRGVzY3JpcHRvcik7CisgICAgTGVhdmVDcml0aWNhbFNlY3Rpb24oJmV2ZW50LT5jcml0aWNhbFNlY3Rpb24pOworI2VuZGlmIC8qIF9fTUlOR1czMl9fICovCisKKyAgICByZXR1cm4gMTsKKyAgfQorCisgIGlmIChyZXN1bHQgPT0gLTEpIHsKKyAgICBsb2dTeXN0ZW1FcnJvcigid3JpdGUiKTsKKyAgfSBlbHNlIHsKKyAgICBsb2dNZXNzYWdlKExPR19FUlIsICJzaG9ydCB3cml0ZSIpOyAKKyAgfQorCisgIHJldHVybiAwOworfQorCitBc3luY0V2ZW50ICoKK2FzeW5jTmV3RXZlbnQgKEFzeW5jRXZlbnRDYWxsYmFjayAqY2FsbGJhY2ssIHZvaWQgKmRhdGEpIHsKKyAgQXN5bmNFdmVudCAqZXZlbnQ7CisKKyAgaWYgKChldmVudCA9IG1hbGxvYyhzaXplb2YoKmV2ZW50KSkpKSB7CisgICAgbWVtc2V0KGV2ZW50LCAwLCBzaXplb2YoKmV2ZW50KSk7CisgICAgZXZlbnQtPmNhbGxiYWNrID0gY2FsbGJhY2s7CisgICAgZXZlbnQtPmRhdGEgPSBkYXRhOworCisgICAgaWYgKGNyZWF0ZUFub255bW91c1BpcGUoJmV2ZW50LT5waXBlSW5wdXQsICZldmVudC0+cGlwZU91dHB1dCkpIHsKKyNpZmRlZiBfX01JTkdXMzJfXworICAgICAgaWYgKCEoZXZlbnQtPm1vbml0b3JEZXNjcmlwdG9yID0gQ3JlYXRlRXZlbnQoTlVMTCwgVFJVRSwgRkFMU0UsIE5VTEwpKSkgeworICAgICAgICBsb2dXaW5kb3dzU3lzdGVtRXJyb3IoIkNyZWF0ZUV2ZW50Iik7CisgICAgICAgIGV2ZW50LT5tb25pdG9yRGVzY3JpcHRvciA9IElOVkFMSURfRklMRV9ERVNDUklQVE9SOworICAgICAgfQorI2Vsc2UgLyogX19NSU5HVzMyX18gKi8KKyAgICAgIHNldENsb3NlT25FeGVjKGV2ZW50LT5waXBlSW5wdXQsIDEpOworICAgICAgc2V0Q2xvc2VPbkV4ZWMoZXZlbnQtPnBpcGVPdXRwdXQsIDEpOworICAgICAgZXZlbnQtPm1vbml0b3JEZXNjcmlwdG9yID0gZXZlbnQtPnBpcGVPdXRwdXQ7CisjZW5kaWYgLyogX19NSU5HVzMyX18gKi8KKworICAgICAgaWYgKGV2ZW50LT5tb25pdG9yRGVzY3JpcHRvciAhPSBJTlZBTElEX0ZJTEVfREVTQ1JJUFRPUikgeworICAgICAgICBpZiAoYXN5bmNNb25pdG9yRmlsZUlucHV0KCZldmVudC0+bW9uaXRvckhhbmRsZSwgZXZlbnQtPm1vbml0b3JEZXNjcmlwdG9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzeW5jTW9uaXRvckV2ZW50UGlwZSwgZXZlbnQpKSB7CisjaWZkZWYgX19NSU5HVzMyX18KKyAgICAgICAgICBJbml0aWFsaXplQ3JpdGljYWxTZWN0aW9uKCZldmVudC0+Y3JpdGljYWxTZWN0aW9uKTsKKyAgICAgICAgICBldmVudC0+cGVuZGluZ0NvdW50ID0gMDsKKyNlbmRpZiAvKiBfX01JTkdXMzJfXyAqLworCisgICAgICAgICAgbG9nU3ltYm9sKExPR19DQVRFR09SWShBU1lOQ19FVkVOVFMpLCBldmVudC0+Y2FsbGJhY2ssICJldmVudCBhZGRlZCIpOworICAgICAgICAgIHJldHVybiBldmVudDsKKyAgICAgICAgfQorCisgICAgICAgIGNsb3NlRmlsZURlc2NyaXB0b3IoZXZlbnQtPm1vbml0b3JEZXNjcmlwdG9yKTsKKyAgICAgIH0KKworICAgICAgY2xvc2VGaWxlRGVzY3JpcHRvcihldmVudC0+cGlwZUlucHV0KTsKKyAgICAgIGNsb3NlRmlsZURlc2NyaXB0b3IoZXZlbnQtPnBpcGVPdXRwdXQpOworICAgIH0KKworICAgIGZyZWUoZXZlbnQpOworICB9IGVsc2UgeworICAgIGxvZ01hbGxvY0Vycm9yKCk7CisgIH0KKworICByZXR1cm4gTlVMTDsKK30KKwordm9pZAorYXN5bmNEaXNjYXJkRXZlbnQgKEFzeW5jRXZlbnQgKmV2ZW50KSB7CisgIGFzeW5jQ2FuY2VsUmVxdWVzdChldmVudC0+bW9uaXRvckhhbmRsZSk7CisKKyAgY2xvc2VGaWxlRGVzY3JpcHRvcihldmVudC0+cGlwZUlucHV0KTsKKyAgY2xvc2VGaWxlRGVzY3JpcHRvcihldmVudC0+cGlwZU91dHB1dCk7CisKKyNpZmRlZiBfX01JTkdXMzJfXworICBDbG9zZUhhbmRsZShldmVudC0+bW9uaXRvckRlc2NyaXB0b3IpOworICBEZWxldGVDcml0aWNhbFNlY3Rpb24oJmV2ZW50LT5jcml0aWNhbFNlY3Rpb24pOworI2VuZGlmIC8qIF9fTUlOR1czMl9fICovCisKKyAgbG9nU3ltYm9sKExPR19DQVRFR09SWShBU1lOQ19FVkVOVFMpLCBldmVudC0+Y2FsbGJhY2ssICJldmVudCByZW1vdmVkIik7CisgIGZyZWUoZXZlbnQpOworfQorCmRpZmYgLS1naXQgYS9Qcm9ncmFtcy9hc3luY19oYW5kbGUuYyBiL1Byb2dyYW1zL2FzeW5jX2hhbmRsZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUyNDVmNzEKLS0tIC9kZXYvbnVsbAorKysgYi9Qcm9ncmFtcy9hc3luY19oYW5kbGUuYwpAQCAtMCwwICsxLDEzNCBAQAorLyoKKyAqIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisgKiAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisgKgorICogQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKKyNpbmNsdWRlICJwcm9sb2d1ZS5oIgorCisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKyNpbmNsdWRlICJsb2cuaCIKKyNpbmNsdWRlICJhc3luY19pbnRlcm5hbC5oIgorCitzdHJ1Y3QgQXN5bmNIYW5kbGVTdHJ1Y3QgeworICBFbGVtZW50ICplbGVtZW50OworICBpbnQgaWRlbnRpZmllcjsKKyAgQXN5bmNUaHJlYWRTcGVjaWZpY0RhdGEgKnRzZDsKK307CisKK2ludAorYXN5bmNNYWtlSGFuZGxlICgKKyAgQXN5bmNIYW5kbGUgKmhhbmRsZSwKKyAgRWxlbWVudCAqKCpuZXdFbGVtZW50KSAoY29uc3Qgdm9pZCAqcGFyYW1ldGVycyksCisgIGNvbnN0IHZvaWQgKnBhcmFtZXRlcnMKKykgeworICBpZiAoaGFuZGxlKSB7CisgICAgaWYgKCEoKmhhbmRsZSA9IG1hbGxvYyhzaXplb2YoKipoYW5kbGUpKSkpIHsKKyAgICAgIGxvZ01hbGxvY0Vycm9yKCk7CisgICAgICByZXR1cm4gMDsKKyAgICB9CisgIH0KKworICB7CisgICAgRWxlbWVudCAqZWxlbWVudCA9IG5ld0VsZW1lbnQocGFyYW1ldGVycyk7CisKKyAgICBpZiAoZWxlbWVudCkgeworICAgICAgaWYgKGhhbmRsZSkgeworICAgICAgICBtZW1zZXQoKmhhbmRsZSwgMCwgc2l6ZW9mKCoqaGFuZGxlKSk7CisgICAgICAgICgqaGFuZGxlKS0+ZWxlbWVudCA9IGVsZW1lbnQ7CisgICAgICAgICgqaGFuZGxlKS0+aWRlbnRpZmllciA9IGdldEVsZW1lbnRJZGVudGlmaWVyKGVsZW1lbnQpOworICAgICAgICAoKmhhbmRsZSktPnRzZCA9IGFzeW5jR2V0VGhyZWFkU3BlY2lmaWNEYXRhKCk7CisgICAgICB9CisKKyAgICAgIHJldHVybiAxOworICAgIH0KKyAgfQorCisgIGlmIChoYW5kbGUpIGZyZWUoKmhhbmRsZSk7CisgIHJldHVybiAwOworfQorCitpbnQKK2FzeW5jVGVzdEhhbmRsZSAoQXN5bmNIYW5kbGUgaGFuZGxlKSB7CisgIEFzeW5jVGhyZWFkU3BlY2lmaWNEYXRhICp0c2QgPSBhc3luY0dldFRocmVhZFNwZWNpZmljRGF0YSgpOworCisgIGlmIChoYW5kbGUtPnRzZCA9PSB0c2QpIHJldHVybiAxOworICBsb2dNZXNzYWdlKExPR19XQVJOSU5HLCAiaW52YWxpZCBhc3luYyBoYW5kbGUiKTsKKyAgcmV0dXJuIDA7Cit9CisKK0VsZW1lbnQgKgorYXN5bmNHZXRIYW5kbGVFbGVtZW50IChBc3luY0hhbmRsZSBoYW5kbGUsIGNvbnN0IFF1ZXVlICpxdWV1ZSkgeworICBpZiAoYXN5bmNUZXN0SGFuZGxlKGhhbmRsZSkpIHsKKyAgICBpZiAocXVldWUpIHsKKyAgICAgIEVsZW1lbnQgKmVsZW1lbnQgPSBoYW5kbGUtPmVsZW1lbnQ7CisKKyAgICAgIGlmIChoYW5kbGUtPmlkZW50aWZpZXIgPT0gZ2V0RWxlbWVudElkZW50aWZpZXIoZWxlbWVudCkpIHsKKyAgICAgICAgaWYgKChxdWV1ZSA9PSBBU1lOQ19BTllfUVVFVUUpIHx8IChxdWV1ZSA9PSBnZXRFbGVtZW50UXVldWUoZWxlbWVudCkpKSB7CisgICAgICAgICAgcmV0dXJuIGVsZW1lbnQ7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9CisgIH0KKworICByZXR1cm4gTlVMTDsKK30KKwordm9pZAorYXN5bmNEaXNjYXJkSGFuZGxlIChBc3luY0hhbmRsZSBoYW5kbGUpIHsKKyAgZnJlZShoYW5kbGUpOworfQorCit2b2lkCithc3luY0NhbmNlbFJlcXVlc3QgKEFzeW5jSGFuZGxlIGhhbmRsZSkgeworICBFbGVtZW50ICplbGVtZW50ID0gYXN5bmNHZXRIYW5kbGVFbGVtZW50KGhhbmRsZSwgQVNZTkNfQU5ZX1FVRVVFKTsKKworICBhc3luY0Rpc2NhcmRIYW5kbGUoaGFuZGxlKTsKKworICBpZiAoZWxlbWVudCkgeworICAgIFF1ZXVlICpxdWV1ZSA9IGdldEVsZW1lbnRRdWV1ZShlbGVtZW50KTsKKyAgICBjb25zdCBBc3luY1F1ZXVlTWV0aG9kcyAqbWV0aG9kcyA9IGdldFF1ZXVlRGF0YShxdWV1ZSk7CisKKyAgICBpZiAobWV0aG9kcykgeworICAgICAgaWYgKG1ldGhvZHMtPmNhbmNlbFJlcXVlc3QpIHsKKyAgICAgICAgbWV0aG9kcy0+Y2FuY2VsUmVxdWVzdChlbGVtZW50KTsKKyAgICAgICAgcmV0dXJuOworICAgICAgfQorICAgIH0KKworICAgIGRlbGV0ZUVsZW1lbnQoZWxlbWVudCk7CisgIH0KK30KKwordHlwZWRlZiBzdHJ1Y3QgeworICBFbGVtZW50ICplbGVtZW50OworfSBFbGVtZW50SGFuZGxlUGFyYW1ldGVyczsKKworc3RhdGljIEVsZW1lbnQgKgorbmV3RWxlbWVudEhhbmRsZSAoY29uc3Qgdm9pZCAqcGFyYW1ldGVycykgeworICBjb25zdCBFbGVtZW50SGFuZGxlUGFyYW1ldGVycyAqZWhwID0gcGFyYW1ldGVyczsKKworICByZXR1cm4gZWhwLT5lbGVtZW50OworfQorCitpbnQKK2FzeW5jTWFrZUVsZW1lbnRIYW5kbGUgKEFzeW5jSGFuZGxlICpoYW5kbGUsIEVsZW1lbnQgKmVsZW1lbnQpIHsKKyAgY29uc3QgRWxlbWVudEhhbmRsZVBhcmFtZXRlcnMgZWhwID0geworICAgIC5lbGVtZW50ID0gZWxlbWVudAorICB9OworCisgIHJldHVybiBhc3luY01ha2VIYW5kbGUoaGFuZGxlLCBuZXdFbGVtZW50SGFuZGxlLCAmZWhwKTsKK30KZGlmZiAtLWdpdCBhL1Byb2dyYW1zL2FzeW5jX2ludGVybmFsLmggYi9Qcm9ncmFtcy9hc3luY19pbnRlcm5hbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNlNjJkYzkKLS0tIC9kZXYvbnVsbAorKysgYi9Qcm9ncmFtcy9hc3luY19pbnRlcm5hbC5oCkBAIC0wLDAgKzEsNzYgQEAKKy8qCisgKiBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorICogICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorICoKKyAqIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorICoKKyAqIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyAqLworCisjaWZuZGVmIEJSTFRUWV9JTkNMVURFRF9BU1lOQ19JTlRFUk5BTAorI2RlZmluZSBCUkxUVFlfSU5DTFVERURfQVNZTkNfSU5URVJOQUwKKworI2luY2x1ZGUgImFzeW5jX2hhbmRsZS5oIgorI2luY2x1ZGUgInF1ZXVlLmgiCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYgLyogX19jcGx1c3BsdXMgKi8KKwordHlwZWRlZiBzdHJ1Y3QgQXN5bmNXYWl0RGF0YVN0cnVjdCBBc3luY1dhaXREYXRhOworZXh0ZXJuIHZvaWQgYXN5bmNEZWFsbG9jYXRlV2FpdERhdGEgKEFzeW5jV2FpdERhdGEgKndhaXREYXRhKTsKKwordHlwZWRlZiBzdHJ1Y3QgQXN5bmNBbGFybURhdGFTdHJ1Y3QgQXN5bmNBbGFybURhdGE7CitleHRlcm4gdm9pZCBhc3luY0RlYWxsb2NhdGVBbGFybURhdGEgKEFzeW5jQWxhcm1EYXRhICphbGFybURhdGEpOworZXh0ZXJuIGludCBhc3luY0V4ZWN1dGVBbGFybUNhbGxiYWNrIChBc3luY0FsYXJtRGF0YSAqYWQsIGxvbmcgaW50ICp0aW1lb3V0KTsKKwordHlwZWRlZiBzdHJ1Y3QgQXN5bmNUYXNrRGF0YVN0cnVjdCBBc3luY1Rhc2tEYXRhOworZXh0ZXJuIHZvaWQgYXN5bmNEZWFsbG9jYXRlVGFza0RhdGEgKEFzeW5jVGFza0RhdGEgKnRhc2tEYXRhKTsKK2V4dGVybiBpbnQgYXN5bmNFeGVjdXRlVGFza0NhbGxiYWNrIChBc3luY1Rhc2tEYXRhICp0ZCk7CisKK3R5cGVkZWYgc3RydWN0IEFzeW5jSW9EYXRhU3RydWN0IEFzeW5jSW9EYXRhOworZXh0ZXJuIHZvaWQgYXN5bmNEZWFsbG9jYXRlSW9EYXRhIChBc3luY0lvRGF0YSAqaW9EYXRhKTsKK2V4dGVybiBpbnQgYXN5bmNFeGVjdXRlSW9DYWxsYmFjayAoQXN5bmNJb0RhdGEgKmlvZCwgbG9uZyBpbnQgdGltZW91dCk7CisKK3R5cGVkZWYgc3RydWN0IEFzeW5jU2lnbmFsRGF0YVN0cnVjdCBBc3luY1NpZ25hbERhdGE7CitleHRlcm4gdm9pZCBhc3luY0RlYWxsb2NhdGVTaWduYWxEYXRhIChBc3luY1NpZ25hbERhdGEgKnNkKTsKKwordHlwZWRlZiBzdHJ1Y3QgeworICBBc3luY1dhaXREYXRhICp3YWl0RGF0YTsKKyAgQXN5bmNBbGFybURhdGEgKmFsYXJtRGF0YTsKKyAgQXN5bmNUYXNrRGF0YSAqdGFza0RhdGE7CisgIEFzeW5jSW9EYXRhICppb0RhdGE7CisgIEFzeW5jU2lnbmFsRGF0YSAqc2lnbmFsRGF0YTsKK30gQXN5bmNUaHJlYWRTcGVjaWZpY0RhdGE7CisKK2V4dGVybiBBc3luY1RocmVhZFNwZWNpZmljRGF0YSAqYXN5bmNHZXRUaHJlYWRTcGVjaWZpY0RhdGEgKHZvaWQpOworCitleHRlcm4gaW50IGFzeW5jTWFrZUhhbmRsZSAoCisgIEFzeW5jSGFuZGxlICpoYW5kbGUsCisgIEVsZW1lbnQgKigqbmV3RWxlbWVudCkgKGNvbnN0IHZvaWQgKnBhcmFtZXRlcnMpLAorICBjb25zdCB2b2lkICpwYXJhbWV0ZXJzCispOworCitleHRlcm4gaW50IGFzeW5jTWFrZUVsZW1lbnRIYW5kbGUgKEFzeW5jSGFuZGxlICpoYW5kbGUsIEVsZW1lbnQgKmVsZW1lbnQpOworCisjZGVmaW5lIEFTWU5DX0FOWV9RVUVVRSAoKGNvbnN0IFF1ZXVlICopMSkKK2V4dGVybiBFbGVtZW50ICphc3luY0dldEhhbmRsZUVsZW1lbnQgKEFzeW5jSGFuZGxlIGhhbmRsZSwgY29uc3QgUXVldWUgKnF1ZXVlKTsKKwordHlwZWRlZiBzdHJ1Y3QgeworICB2b2lkICgqY2FuY2VsUmVxdWVzdCkgKEVsZW1lbnQgKmVsZW1lbnQpOworfSBBc3luY1F1ZXVlTWV0aG9kczsKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYgLyogX19jcGx1c3BsdXMgKi8KKworI2VuZGlmIC8qIEJSTFRUWV9JTkNMVURFRF9BU1lOQ19JTlRFUk5BTCAqLwpkaWZmIC0tZ2l0IGEvUHJvZ3JhbXMvYXN5bmNfaW8uYyBiL1Byb2dyYW1zL2FzeW5jX2lvLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzQyNDNkOAotLS0gL2Rldi9udWxsCisrKyBiL1Byb2dyYW1zL2FzeW5jX2lvLmMKQEAgLTAsMCArMSwxMzI1IEBACisvKgorICogQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyAqICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyAqCisgKiBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorICoKKyAqIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyAqCisgKiBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisgKi8KKworI2luY2x1ZGUgInByb2xvZ3VlLmgiCisKKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorCisjaW5jbHVkZSAiZ2V0X3NlbGVjdC5oIgorCisjaWZkZWYgX19NSU5HVzMyX18KKyNpZiBfV0lOMzJfV0lOTlQgPCBfV0lOMzJfV0lOTlRfVklTVEEKKyNkZWZpbmUgQ2FuY2VsSW9FeChoYW5kbGUsIG9sKSBDYW5jZWxJbygoaGFuZGxlKSkKKyNlbmRpZiAvKiBfV0lOMzJfV0lOTlQgPCBfV0lOMzJfV0lOTlRfVklTVEEgKi8KKyNlbmRpZiAvKiBfX01JTkdXMzJfXyAqLworCisjaWZkZWYgX19NU0RPU19fCisjaW5jbHVkZSAic3lzdGVtX21zZG9zLmgiCisjZW5kaWYgLyogX19NU0RPU19fICovCisKKyN1bmRlZiBBU1lOQ19DQU5fTU9OSVRPUl9JTworI2lmIGRlZmluZWQoX19NSU5HVzMyX18pCisjZGVmaW5lIEFTWU5DX0NBTl9NT05JVE9SX0lPCisKK3R5cGVkZWYgSEFORExFIE1vbml0b3JFbnRyeTsKKworI2VsaWYgZGVmaW5lZChIQVZFX1NZU19QT0xMX0gpCisjZGVmaW5lIEFTWU5DX0NBTl9NT05JVE9SX0lPCisKKyNpbmNsdWRlIDxwb2xsLmg+Cit0eXBlZGVmIHN0cnVjdCBwb2xsZmQgTW9uaXRvckVudHJ5OworCisjZWxpZiBkZWZpbmVkKEdPVF9TRUxFQ1QpCisjZGVmaW5lIEFTWU5DX0NBTl9NT05JVE9SX0lPCisKK3R5cGVkZWYgc3RydWN0IHsKKyAgaW50IHNpemU7CisgIGZkX3NldCBzZXQ7Cit9IFNlbGVjdERlc2NyaXB0b3I7CisKK3N0YXRpYyBTZWxlY3REZXNjcmlwdG9yIHNlbGVjdERlc2NyaXB0b3JfcmVhZDsKK3N0YXRpYyBTZWxlY3REZXNjcmlwdG9yIHNlbGVjdERlc2NyaXB0b3Jfd3JpdGU7CitzdGF0aWMgU2VsZWN0RGVzY3JpcHRvciBzZWxlY3REZXNjcmlwdG9yX2V4Y2VwdGlvbjsKKwordHlwZWRlZiBzdHJ1Y3QgeworICBmZF9zZXQgKnNlbGVjdFNldDsKKyAgRmlsZURlc2NyaXB0b3IgZmlsZURlc2NyaXB0b3I7Cit9IE1vbml0b3JFbnRyeTsKKworI2VuZGlmIC8qIG1vbml0b3IgZGVmaW5pdGlvbnMgKi8KKworI2luY2x1ZGUgImxvZy5oIgorI2luY2x1ZGUgImFzeW5jX2lvLmgiCisjaW5jbHVkZSAiYXN5bmNfaW50ZXJuYWwuaCIKKyNpbmNsdWRlICJ0aW1pbmcuaCIKKwordHlwZWRlZiBzdHJ1Y3QgRnVuY3Rpb25FbnRyeVN0cnVjdCBGdW5jdGlvbkVudHJ5OworCit0eXBlZGVmIHN0cnVjdCB7CisgIEFzeW5jTW9uaXRvckNhbGxiYWNrICpjYWxsYmFjazsKK30gTW9uaXRvckV4dGVuc2lvbjsKKwordHlwZWRlZiB1bmlvbiB7CisgIHN0cnVjdCB7CisgICAgQXN5bmNJbnB1dENhbGxiYWNrICpjYWxsYmFjazsKKyAgICB1bnNpZ25lZCBlbmQ6MTsKKyAgfSBpbnB1dDsKKworICBzdHJ1Y3QgeworICAgIEFzeW5jT3V0cHV0Q2FsbGJhY2sgKmNhbGxiYWNrOworICB9IG91dHB1dDsKK30gVHJhbnNmZXJEaXJlY3Rpb25VbmlvbjsKKwordHlwZWRlZiBzdHJ1Y3QgeworICBUcmFuc2ZlckRpcmVjdGlvblVuaW9uIGRpcmVjdGlvbjsKKyAgc2l6ZV90IHNpemU7CisgIHNpemVfdCBsZW5ndGg7CisgIHVuc2lnbmVkIGNoYXIgYnVmZmVyW107Cit9IFRyYW5zZmVyRXh0ZW5zaW9uOworCit0eXBlZGVmIHN0cnVjdCB7CisgIEZ1bmN0aW9uRW50cnkgKmZ1bmN0aW9uOworICB2b2lkICpleHRlbnNpb247CisgIHZvaWQgKmRhdGE7CisKKyAgTW9uaXRvckVudHJ5ICptb25pdG9yOworICBpbnQgZXJyb3I7CisKKyAgdW5zaWduZWQgYWN0aXZlOjE7CisgIHVuc2lnbmVkIGNhbmNlbDoxOworICB1bnNpZ25lZCBmaW5pc2hlZDoxOworfSBPcGVyYXRpb25FbnRyeTsKKwordHlwZWRlZiBzdHJ1Y3QgeworICBjb25zdCBjaGFyICpmdW5jdGlvbk5hbWU7CisKKyAgdm9pZCAoKmJlZ2luRnVuY3Rpb24pIChGdW5jdGlvbkVudHJ5ICpmdW5jdGlvbik7CisgIHZvaWQgKCplbmRGdW5jdGlvbikgKEZ1bmN0aW9uRW50cnkgKmZ1bmN0aW9uKTsKKworICB2b2lkICgqc3RhcnRPcGVyYXRpb24pIChPcGVyYXRpb25FbnRyeSAqb3BlcmF0aW9uKTsKKyAgdm9pZCAoKmZpbmlzaE9wZXJhdGlvbikgKE9wZXJhdGlvbkVudHJ5ICpvcGVyYXRpb24pOworICB2b2lkICgqY2FuY2VsT3BlcmF0aW9uKSAoT3BlcmF0aW9uRW50cnkgKm9wZXJhdGlvbik7CisKKyAgaW50ICgqaW52b2tlQ2FsbGJhY2spIChPcGVyYXRpb25FbnRyeSAqb3BlcmF0aW9uKTsKK30gRnVuY3Rpb25NZXRob2RzOworCitzdHJ1Y3QgRnVuY3Rpb25FbnRyeVN0cnVjdCB7CisgIEZpbGVEZXNjcmlwdG9yIGZpbGVEZXNjcmlwdG9yOworICBjb25zdCBGdW5jdGlvbk1ldGhvZHMgKm1ldGhvZHM7CisgIFF1ZXVlICpvcGVyYXRpb25zOworCisjaWYgZGVmaW5lZChfX01JTkdXMzJfXykKKyAgc3RydWN0IHsKKyAgICBPVkVSTEFQUEVEIG92ZXJsYXBwZWQ7CisgIH0gd2luZG93czsKKworI2VsaWYgZGVmaW5lZChIQVZFX1NZU19QT0xMX0gpCisgIHN0cnVjdCB7CisgICAgc2hvcnQgaW50IGV2ZW50czsKKyAgfSBwb2xsOworCisjZWxpZiBkZWZpbmVkKEhBVkVfU0VMRUNUKQorICBzdHJ1Y3QgeworICAgIFNlbGVjdERlc2NyaXB0b3IgKmRlc2NyaXB0b3I7CisgIH0gc2VsZWN0OworCisjZW5kaWYgLyogbW9uaXRvciBwYXJhZGlnbXMgKi8KK307CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgRmlsZURlc2NyaXB0b3IgZmlsZURlc2NyaXB0b3I7CisgIGNvbnN0IEZ1bmN0aW9uTWV0aG9kcyAqbWV0aG9kczsKK30gRnVuY3Rpb25LZXk7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgTW9uaXRvckVudHJ5ICpjb25zdCBhcnJheTsKKyAgdW5zaWduZWQgaW50IGNvdW50OworfSBNb25pdG9yR3JvdXA7CisKK3N0cnVjdCBBc3luY0lvRGF0YVN0cnVjdCB7CisgIFF1ZXVlICpmdW5jdGlvblF1ZXVlOworfTsKKwordm9pZAorYXN5bmNEZWFsbG9jYXRlSW9EYXRhIChBc3luY0lvRGF0YSAqaW9kKSB7CisgIGlmIChpb2QpIHsKKyAgICBpZiAoaW9kLT5mdW5jdGlvblF1ZXVlKSBkZWFsbG9jYXRlUXVldWUoaW9kLT5mdW5jdGlvblF1ZXVlKTsKKyAgICBmcmVlKGlvZCk7CisgIH0KK30KKworc3RhdGljIEFzeW5jSW9EYXRhICoKK2dldElvRGF0YSAodm9pZCkgeworICBBc3luY1RocmVhZFNwZWNpZmljRGF0YSAqdHNkID0gYXN5bmNHZXRUaHJlYWRTcGVjaWZpY0RhdGEoKTsKKyAgaWYgKCF0c2QpIHJldHVybiBOVUxMOworCisgIGlmICghdHNkLT5pb0RhdGEpIHsKKyAgICBBc3luY0lvRGF0YSAqaW9kOworCisgICAgaWYgKCEoaW9kID0gbWFsbG9jKHNpemVvZigqaW9kKSkpKSB7CisgICAgICBsb2dNYWxsb2NFcnJvcigpOworICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgbWVtc2V0KGlvZCwgMCwgc2l6ZW9mKCppb2QpKTsKKyAgICBpb2QtPmZ1bmN0aW9uUXVldWUgPSBOVUxMOworICAgIHRzZC0+aW9EYXRhID0gaW9kOworICB9CisKKyAgcmV0dXJuIHRzZC0+aW9EYXRhOworfQorCitzdGF0aWMgdm9pZAorbG9nT3BlcmF0aW9uIChjb25zdCBPcGVyYXRpb25FbnRyeSAqb3BlcmF0aW9uLCB2b2lkICpjYWxsYmFjaykgeworICBsb2dTeW1ib2woTE9HX0NBVEVHT1JZKEFTWU5DX0VWRU5UUyksCisgICAgICAgICAgICBjYWxsYmFjaywKKyAgICAgICAgICAgICIlcyIsIG9wZXJhdGlvbi0+ZnVuY3Rpb24tPm1ldGhvZHMtPmZ1bmN0aW9uTmFtZSk7Cit9CisKKyNpZmRlZiBfX01JTkdXMzJfXworc3RhdGljIHZvaWQKK3ByZXBhcmVNb25pdG9ycyAodm9pZCkgeworfQorCitzdGF0aWMgaW50Cithd2FpdE1vbml0b3JzIChjb25zdCBNb25pdG9yR3JvdXAgKm1vbml0b3JzLCBpbnQgdGltZW91dCkgeworICBpZiAobW9uaXRvcnMtPmNvdW50KSB7CisgICAgRFdPUkQgcmVzdWx0ID0gV2FpdEZvck11bHRpcGxlT2JqZWN0cyhtb25pdG9ycy0+Y291bnQsIG1vbml0b3JzLT5hcnJheSwgRkFMU0UsIHRpbWVvdXQpOworICAgIGlmICgocmVzdWx0ID49IFdBSVRfT0JKRUNUXzApICYmIChyZXN1bHQgPCAoV0FJVF9PQkpFQ1RfMCArIG1vbml0b3JzLT5jb3VudCkpKSByZXR1cm4gMTsKKworICAgIGlmIChyZXN1bHQgPT0gV0FJVF9GQUlMRUQpIHsKKyAgICAgIGxvZ1dpbmRvd3NTeXN0ZW1FcnJvcigiV2FpdEZvck11bHRpcGxlT2JqZWN0cyIpOworICAgIH0KKyAgfSBlbHNlIHsKKyAgICBhcHByb3hpbWF0ZURlbGF5KHRpbWVvdXQpOworICB9CisKKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkCitpbml0aWFsaXplTW9uaXRvciAoTW9uaXRvckVudHJ5ICptb25pdG9yLCBjb25zdCBGdW5jdGlvbkVudHJ5ICpmdW5jdGlvbiwgY29uc3QgT3BlcmF0aW9uRW50cnkgKm9wZXJhdGlvbikgeworICAqbW9uaXRvciA9IGZ1bmN0aW9uLT53aW5kb3dzLm92ZXJsYXBwZWQuaEV2ZW50OworICBpZiAoKm1vbml0b3IgPT0gSU5WQUxJRF9IQU5ETEVfVkFMVUUpICptb25pdG9yID0gZnVuY3Rpb24tPmZpbGVEZXNjcmlwdG9yOworfQorCitzdGF0aWMgaW50Cit0ZXN0TW9uaXRvciAoY29uc3QgTW9uaXRvckVudHJ5ICptb25pdG9yLCBpbnQgKmVycm9yKSB7CisgIERXT1JEIHJlc3VsdCA9IFdhaXRGb3JTaW5nbGVPYmplY3QoKm1vbml0b3IsIDApOworICBpZiAocmVzdWx0ID09IFdBSVRfT0JKRUNUXzApIHJldHVybiAxOworCisgIGlmIChyZXN1bHQgPT0gV0FJVF9GQUlMRUQpIHsKKyAgICBsb2dXaW5kb3dzU3lzdGVtRXJyb3IoIldhaXRGb3JTaW5nbGVPYmplY3QiKTsKKyAgfQorCisgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50CithbGxvY2F0ZVdpbmRvd3NFdmVudCAoSEFORExFICpldmVudCkgeworICBpZiAoKmV2ZW50ID09IElOVkFMSURfSEFORExFX1ZBTFVFKSB7CisgICAgSEFORExFIGhhbmRsZSA9IENyZWF0ZUV2ZW50KE5VTEwsIFRSVUUsIEZBTFNFLCBOVUxMKTsKKyAgICBpZiAoIWhhbmRsZSkgcmV0dXJuIDA7CisgICAgKmV2ZW50ID0gaGFuZGxlOworICB9CisKKyAgcmV0dXJuIFJlc2V0RXZlbnQoKmV2ZW50KTsKK30KKworc3RhdGljIHZvaWQKK2RlYWxsb2NhdGVXaW5kb3dzRXZlbnQgKEhBTkRMRSAqZXZlbnQpIHsKKyAgaWYgKCpldmVudCAhPSBJTlZBTElEX0hBTkRMRV9WQUxVRSkgeworICAgIENsb3NlSGFuZGxlKCpldmVudCk7CisgICAgKmV2ZW50ID0gSU5WQUxJRF9IQU5ETEVfVkFMVUU7CisgIH0KK30KKworc3RhdGljIGludAorYWxsb2NhdGVXaW5kb3dzUmVzb3VyY2VzIChPcGVyYXRpb25FbnRyeSAqb3BlcmF0aW9uKSB7CisgIEZ1bmN0aW9uRW50cnkgKmZ1bmN0aW9uID0gb3BlcmF0aW9uLT5mdW5jdGlvbjsKKworICBpZiAoYWxsb2NhdGVXaW5kb3dzRXZlbnQoJmZ1bmN0aW9uLT53aW5kb3dzLm92ZXJsYXBwZWQuaEV2ZW50KSkgeworICAgIHJldHVybiAxOworICB9CisKKyAgb3BlcmF0aW9uLT5maW5pc2hlZCA9IDE7CisgIG9wZXJhdGlvbi0+ZXJyb3IgPSBHZXRMYXN0RXJyb3IoKTsKKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkCitzZXRXaW5kb3dzVHJhbnNmZXJSZXN1bHQgKE9wZXJhdGlvbkVudHJ5ICpvcGVyYXRpb24sIERXT1JEIHN1Y2Nlc3MsIERXT1JEIGNvdW50KSB7CisgIFRyYW5zZmVyRXh0ZW5zaW9uICpleHRlbnNpb24gPSBvcGVyYXRpb24tPmV4dGVuc2lvbjsKKworICBpZiAoc3VjY2VzcykgeworICAgIGV4dGVuc2lvbi0+bGVuZ3RoICs9IGNvdW50OworICB9IGVsc2UgeworICAgIERXT1JEIGVycm9yID0gR2V0TGFzdEVycm9yKCk7CisKKyAgICBpZiAoKGVycm9yID09IEVSUk9SX0hBTkRMRV9FT0YpIHx8IChlcnJvciA9PSBFUlJPUl9CUk9LRU5fUElQRSkpIHsKKyAgICAgIGV4dGVuc2lvbi0+ZGlyZWN0aW9uLmlucHV0LmVuZCA9IDE7CisgICAgfSBlbHNlIHsKKyAgICAgIHNldEVycm5vKGVycm9yKTsKKyAgICAgIG9wZXJhdGlvbi0+ZXJyb3IgPSBlcnJubzsKKworICAgICAgaWYgKGVycm9yID09IEVSUk9SX0lPX1BFTkRJTkcpIHJldHVybjsKKyAgICAgIGlmIChlcnJvciA9PSBFUlJPUl9JT19JTkNPTVBMRVRFKSByZXR1cm47CisgICAgfQorICB9CisKKyAgb3BlcmF0aW9uLT5maW5pc2hlZCA9IDE7Cit9CisKK3N0YXRpYyB2b2lkCitiZWdpbldpbmRvd3NGdW5jdGlvbiAoRnVuY3Rpb25FbnRyeSAqZnVuY3Rpb24pIHsKKyAgWmVyb01lbW9yeSgmZnVuY3Rpb24tPndpbmRvd3Mub3ZlcmxhcHBlZCwgc2l6ZW9mKGZ1bmN0aW9uLT53aW5kb3dzLm92ZXJsYXBwZWQpKTsKKyAgZnVuY3Rpb24tPndpbmRvd3Mub3ZlcmxhcHBlZC5oRXZlbnQgPSBJTlZBTElEX0hBTkRMRV9WQUxVRTsKK30KKworc3RhdGljIHZvaWQKK2VuZFdpbmRvd3NGdW5jdGlvbiAoRnVuY3Rpb25FbnRyeSAqZnVuY3Rpb24pIHsKKyAgZGVhbGxvY2F0ZVdpbmRvd3NFdmVudCgmZnVuY3Rpb24tPndpbmRvd3Mub3ZlcmxhcHBlZC5oRXZlbnQpOworfQorCitzdGF0aWMgdm9pZAorc3RhcnRXaW5kb3dzUmVhZCAoT3BlcmF0aW9uRW50cnkgKm9wZXJhdGlvbikgeworICBGdW5jdGlvbkVudHJ5ICpmdW5jdGlvbiA9IG9wZXJhdGlvbi0+ZnVuY3Rpb247CisgIFRyYW5zZmVyRXh0ZW5zaW9uICpleHRlbnNpb24gPSBvcGVyYXRpb24tPmV4dGVuc2lvbjsKKworICBpZiAoYWxsb2NhdGVXaW5kb3dzUmVzb3VyY2VzKG9wZXJhdGlvbikpIHsKKyAgICBEV09SRCBjb3VudDsKKyAgICBCT09MIHN1Y2Nlc3MgPSBSZWFkRmlsZShmdW5jdGlvbi0+ZmlsZURlc2NyaXB0b3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmV4dGVuc2lvbi0+YnVmZmVyW2V4dGVuc2lvbi0+bGVuZ3RoXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRlbnNpb24tPnNpemUgLSBleHRlbnNpb24tPmxlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAmY291bnQsICZmdW5jdGlvbi0+d2luZG93cy5vdmVybGFwcGVkKTsKKworICAgIHNldFdpbmRvd3NUcmFuc2ZlclJlc3VsdChvcGVyYXRpb24sIHN1Y2Nlc3MsIGNvdW50KTsKKyAgfQorfQorCitzdGF0aWMgdm9pZAorc3RhcnRXaW5kb3dzV3JpdGUgKE9wZXJhdGlvbkVudHJ5ICpvcGVyYXRpb24pIHsKKyAgRnVuY3Rpb25FbnRyeSAqZnVuY3Rpb24gPSBvcGVyYXRpb24tPmZ1bmN0aW9uOworICBUcmFuc2ZlckV4dGVuc2lvbiAqZXh0ZW5zaW9uID0gb3BlcmF0aW9uLT5leHRlbnNpb247CisKKyAgaWYgKGFsbG9jYXRlV2luZG93c1Jlc291cmNlcyhvcGVyYXRpb24pKSB7CisgICAgRFdPUkQgY291bnQ7CisgICAgQk9PTCBzdWNjZXNzID0gV3JpdGVGaWxlKGZ1bmN0aW9uLT5maWxlRGVzY3JpcHRvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmV4dGVuc2lvbi0+YnVmZmVyW2V4dGVuc2lvbi0+bGVuZ3RoXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0ZW5zaW9uLT5zaXplIC0gZXh0ZW5zaW9uLT5sZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZjb3VudCwgJmZ1bmN0aW9uLT53aW5kb3dzLm92ZXJsYXBwZWQpOworCisgICAgc2V0V2luZG93c1RyYW5zZmVyUmVzdWx0KG9wZXJhdGlvbiwgc3VjY2VzcywgY291bnQpOworICB9Cit9CisKK3N0YXRpYyB2b2lkCitmaW5pc2hXaW5kb3dzVHJhbnNmZXJPcGVyYXRpb24gKE9wZXJhdGlvbkVudHJ5ICpvcGVyYXRpb24pIHsKKyAgRnVuY3Rpb25FbnRyeSAqZnVuY3Rpb24gPSBvcGVyYXRpb24tPmZ1bmN0aW9uOworICBEV09SRCBjb3VudDsKKyAgQk9PTCBzdWNjZXNzID0gR2V0T3ZlcmxhcHBlZFJlc3VsdChmdW5jdGlvbi0+ZmlsZURlc2NyaXB0b3IsICZmdW5jdGlvbi0+d2luZG93cy5vdmVybGFwcGVkLCAmY291bnQsIEZBTFNFKTsKKworICBzZXRXaW5kb3dzVHJhbnNmZXJSZXN1bHQob3BlcmF0aW9uLCBzdWNjZXNzLCBjb3VudCk7Cit9CisKK3N0YXRpYyB2b2lkCitjYW5jZWxXaW5kb3dzVHJhbnNmZXJPcGVyYXRpb24gKE9wZXJhdGlvbkVudHJ5ICpvcGVyYXRpb24pIHsKKyAgRnVuY3Rpb25FbnRyeSAqZnVuY3Rpb24gPSBvcGVyYXRpb24tPmZ1bmN0aW9uOworICBEV09SRCBjb3VudDsKKworICBpZiAoQ2FuY2VsSW9FeChmdW5jdGlvbi0+ZmlsZURlc2NyaXB0b3IsICZmdW5jdGlvbi0+d2luZG93cy5vdmVybGFwcGVkKSkgeworICAgIEdldE92ZXJsYXBwZWRSZXN1bHQoZnVuY3Rpb24tPmZpbGVEZXNjcmlwdG9yLCAmZnVuY3Rpb24tPndpbmRvd3Mub3ZlcmxhcHBlZCwgJmNvdW50LCBUUlVFKTsKKyAgfQorfQorCisjZWxzZSAvKiBfX01JTkdXMzJfXyAqLworCisjaWZkZWYgSEFWRV9TWVNfUE9MTF9ICitzdGF0aWMgdm9pZAorcHJlcGFyZU1vbml0b3JzICh2b2lkKSB7Cit9CisKK3N0YXRpYyBpbnQKK2F3YWl0TW9uaXRvcnMgKGNvbnN0IE1vbml0b3JHcm91cCAqbW9uaXRvcnMsIGludCB0aW1lb3V0KSB7CisgIGludCByZXN1bHQgPSBwb2xsKG1vbml0b3JzLT5hcnJheSwgbW9uaXRvcnMtPmNvdW50LCB0aW1lb3V0KTsKKyAgaWYgKHJlc3VsdCA+IDApIHJldHVybiAxOworCisgIGlmIChyZXN1bHQgPT0gLTEpIHsKKyAgICBpZiAoZXJybm8gIT0gRUlOVFIpIGxvZ1N5c3RlbUVycm9yKCJwb2xsIik7CisgIH0KKworICByZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQKK2luaXRpYWxpemVNb25pdG9yIChNb25pdG9yRW50cnkgKm1vbml0b3IsIGNvbnN0IEZ1bmN0aW9uRW50cnkgKmZ1bmN0aW9uLCBjb25zdCBPcGVyYXRpb25FbnRyeSAqb3BlcmF0aW9uKSB7CisgIG1vbml0b3ItPmZkID0gZnVuY3Rpb24tPmZpbGVEZXNjcmlwdG9yOworICBtb25pdG9yLT5ldmVudHMgPSBmdW5jdGlvbi0+cG9sbC5ldmVudHM7CisgIG1vbml0b3ItPnJldmVudHMgPSAwOworfQorCitzdGF0aWMgaW50Cit0ZXN0TW9uaXRvciAoY29uc3QgTW9uaXRvckVudHJ5ICptb25pdG9yLCBpbnQgKmVycm9yKSB7CisgIGlmICghbW9uaXRvci0+cmV2ZW50cykgcmV0dXJuIDA7CisKKyAgaWYgKCEobW9uaXRvci0+cmV2ZW50cyAmIG1vbml0b3ItPmV2ZW50cykpIHsKKyAgICBpZiAobW9uaXRvci0+cmV2ZW50cyAmIFBPTExIVVApIHsKKyAgICAgICplcnJvciA9IEVOT0RFVjsKKyAgICB9IGVsc2UgeworICAgICAgKmVycm9yID0gRUlPOworICAgIH0KKyAgfQorCisgIHJldHVybiAxOworfQorCitzdGF0aWMgdm9pZAorYmVnaW5Vbml4SW5wdXRGdW5jdGlvbiAoRnVuY3Rpb25FbnRyeSAqZnVuY3Rpb24pIHsKKyAgZnVuY3Rpb24tPnBvbGwuZXZlbnRzID0gUE9MTElOOworfQorCitzdGF0aWMgdm9pZAorYmVnaW5Vbml4T3V0cHV0RnVuY3Rpb24gKEZ1bmN0aW9uRW50cnkgKmZ1bmN0aW9uKSB7CisgIGZ1bmN0aW9uLT5wb2xsLmV2ZW50cyA9IFBPTExPVVQ7Cit9CisKK3N0YXRpYyB2b2lkCitiZWdpblVuaXhBbGVydEZ1bmN0aW9uIChGdW5jdGlvbkVudHJ5ICpmdW5jdGlvbikgeworICBmdW5jdGlvbi0+cG9sbC5ldmVudHMgPSBQT0xMUFJJOworfQorCisjZWxpZiBkZWZpbmVkKEhBVkVfU0VMRUNUKQorCitzdGF0aWMgdm9pZAorcHJlcGFyZVNlbGVjdERlc2NyaXB0b3IgKFNlbGVjdERlc2NyaXB0b3IgKmRlc2NyaXB0b3IpIHsKKyAgRkRfWkVSTygmZGVzY3JpcHRvci0+c2V0KTsKKyAgZGVzY3JpcHRvci0+c2l6ZSA9IDA7Cit9CisKK3N0YXRpYyB2b2lkCitwcmVwYXJlTW9uaXRvcnMgKHZvaWQpIHsKKyAgcHJlcGFyZVNlbGVjdERlc2NyaXB0b3IoJnNlbGVjdERlc2NyaXB0b3JfcmVhZCk7CisgIHByZXBhcmVTZWxlY3REZXNjcmlwdG9yKCZzZWxlY3REZXNjcmlwdG9yX3dyaXRlKTsKKyAgcHJlcGFyZVNlbGVjdERlc2NyaXB0b3IoJnNlbGVjdERlc2NyaXB0b3JfZXhjZXB0aW9uKTsKK30KKworc3RhdGljIGZkX3NldCAqCitnZXRTZWxlY3RTZXQgKFNlbGVjdERlc2NyaXB0b3IgKmRlc2NyaXB0b3IpIHsKKyAgcmV0dXJuIGRlc2NyaXB0b3ItPnNpemU/ICZkZXNjcmlwdG9yLT5zZXQ6IE5VTEw7Cit9CisKK3N0YXRpYyBpbnQKK2RvU2VsZWN0IChpbnQgc2V0U2l6ZSwgZmRfc2V0ICpyZWFkU2V0LCBmZF9zZXQgKndyaXRlU2V0LCBmZF9zZXQgKmV4Y2VwdGlvblNldCwgaW50IHRpbWVvdXQpIHsKKyAgc3RydWN0IHRpbWV2YWwgdGltZSA9IHsKKyAgICAudHZfc2VjID0gdGltZW91dCAvIE1TRUNTX1BFUl9TRUMsCisgICAgLnR2X3VzZWMgPSAodGltZW91dCAlIE1TRUNTX1BFUl9TRUMpICogVVNFQ1NfUEVSX01TRUMKKyAgfTsKKworICB7CisgICAgaW50IHJlc3VsdCA9IHNlbGVjdChzZXRTaXplLCByZWFkU2V0LCB3cml0ZVNldCwgZXhjZXB0aW9uU2V0LCAmdGltZSk7CisgICAgaWYgKHJlc3VsdCA+IDApIHJldHVybiAxOworCisgICAgaWYgKHJlc3VsdCA9PSAtMSkgeworICAgICAgaWYgKGVycm5vICE9IEVJTlRSKSBsb2dTeXN0ZW1FcnJvcigic2VsZWN0Iik7CisgICAgfQorCisgICAgcmV0dXJuIDA7CisgIH0KK30KKworc3RhdGljIGludAorYXdhaXRNb25pdG9ycyAoY29uc3QgTW9uaXRvckdyb3VwICptb25pdG9ycywgaW50IHRpbWVvdXQpIHsKKyAgZmRfc2V0ICpyZWFkU2V0ID0gZ2V0U2VsZWN0U2V0KCZzZWxlY3REZXNjcmlwdG9yX3JlYWQpOworICBmZF9zZXQgKndyaXRlU2V0ID0gZ2V0U2VsZWN0U2V0KCZzZWxlY3REZXNjcmlwdG9yX3dyaXRlKTsKKyAgZmRfc2V0ICpleGNlcHRpb25TZXQgPSBnZXRTZWxlY3RTZXQoJnNlbGVjdERlc2NyaXB0b3JfZXhjZXB0aW9uKTsKKworICBpbnQgc2V0U2l6ZSA9IHNlbGVjdERlc2NyaXB0b3JfcmVhZC5zaXplOworICBzZXRTaXplID0gTUFYKHNldFNpemUsIHNlbGVjdERlc2NyaXB0b3Jfd3JpdGUuc2l6ZSk7CisgIHNldFNpemUgPSBNQVgoc2V0U2l6ZSwgc2VsZWN0RGVzY3JpcHRvcl9leGNlcHRpb24uc2l6ZSk7CisKKyNpZmRlZiBfX01TRE9TX18KKyAgaW50IGVsYXBzZWQgPSAwOworCisgIGRvIHsKKyAgICBmZF9zZXQgcmVhZFNldDEsIHdyaXRlU2V0MSwgZXhjZXB0aW9uU2V0MTsKKworICAgIGlmIChyZWFkU2V0KSByZWFkU2V0MSA9ICpyZWFkU2V0OworICAgIGlmICh3cml0ZVNldCkgd3JpdGVTZXQxID0gKndyaXRlU2V0OworICAgIGlmIChleGNlcHRpb25TZXQpIGV4Y2VwdGlvblNldDEgPSAqZXhjZXB0aW9uU2V0OworCisgICAgaWYgKGRvU2VsZWN0KHNldFNpemUsCisgICAgICAgICAgICAgICAgIChyZWFkU2V0PyAmcmVhZFNldDE6IE5VTEwpLAorICAgICAgICAgICAgICAgICAod3JpdGVTZXQ/ICZ3cml0ZVNldDE6IE5VTEwpLAorICAgICAgICAgICAgICAgICAoZXhjZXB0aW9uU2V0PyAmZXhjZXB0aW9uU2V0MTogTlVMTCksCisgICAgICAgICAgICAgICAgIDApKSB7CisgICAgICBpZiAocmVhZFNldCkgKnJlYWRTZXQgPSByZWFkU2V0MTsKKyAgICAgIGlmICh3cml0ZVNldCkgKndyaXRlU2V0ID0gd3JpdGVTZXQxOworICAgICAgaWYgKGV4Y2VwdGlvblNldCkgKmV4Y2VwdGlvblNldCA9IGV4Y2VwdGlvblNldDE7CisgICAgICByZXR1cm4gMTsKKyAgICB9CisgIH0gd2hpbGUgKChlbGFwc2VkICs9IG1zZG9zVVNsZWVwKFVTRUNTX1BFUl9NU0VDKSkgPCB0aW1lb3V0KTsKKyNlbHNlIC8qIF9fTVNET1NfXyAqLworICBpZiAoZG9TZWxlY3Qoc2V0U2l6ZSwgcmVhZFNldCwgd3JpdGVTZXQsIGV4Y2VwdGlvblNldCwgdGltZW91dCkpIHJldHVybiAxOworI2VuZGlmIC8qIF9fTVNET1NfXyAqLworCisgIHJldHVybiAwOworfQorCitzdGF0aWMgdm9pZAoraW5pdGlhbGl6ZU1vbml0b3IgKE1vbml0b3JFbnRyeSAqbW9uaXRvciwgY29uc3QgRnVuY3Rpb25FbnRyeSAqZnVuY3Rpb24sIGNvbnN0IE9wZXJhdGlvbkVudHJ5ICpvcGVyYXRpb24pIHsKKyAgbW9uaXRvci0+c2VsZWN0U2V0ID0gJmZ1bmN0aW9uLT5zZWxlY3QuZGVzY3JpcHRvci0+c2V0OworICBtb25pdG9yLT5maWxlRGVzY3JpcHRvciA9IGZ1bmN0aW9uLT5maWxlRGVzY3JpcHRvcjsKKyAgRkRfU0VUKGZ1bmN0aW9uLT5maWxlRGVzY3JpcHRvciwgJmZ1bmN0aW9uLT5zZWxlY3QuZGVzY3JpcHRvci0+c2V0KTsKKworICBpZiAoZnVuY3Rpb24tPmZpbGVEZXNjcmlwdG9yID49IGZ1bmN0aW9uLT5zZWxlY3QuZGVzY3JpcHRvci0+c2l6ZSkgeworICAgIGZ1bmN0aW9uLT5zZWxlY3QuZGVzY3JpcHRvci0+c2l6ZSA9IGZ1bmN0aW9uLT5maWxlRGVzY3JpcHRvciArIDE7CisgIH0KK30KKworc3RhdGljIGludAordGVzdE1vbml0b3IgKGNvbnN0IE1vbml0b3JFbnRyeSAqbW9uaXRvciwgaW50ICplcnJvcikgeworICByZXR1cm4gRkRfSVNTRVQobW9uaXRvci0+ZmlsZURlc2NyaXB0b3IsIG1vbml0b3ItPnNlbGVjdFNldCk7Cit9CisKK3N0YXRpYyB2b2lkCitiZWdpblVuaXhJbnB1dEZ1bmN0aW9uIChGdW5jdGlvbkVudHJ5ICpmdW5jdGlvbikgeworICBmdW5jdGlvbi0+c2VsZWN0LmRlc2NyaXB0b3IgPSAmc2VsZWN0RGVzY3JpcHRvcl9yZWFkOworfQorCitzdGF0aWMgdm9pZAorYmVnaW5Vbml4T3V0cHV0RnVuY3Rpb24gKEZ1bmN0aW9uRW50cnkgKmZ1bmN0aW9uKSB7CisgIGZ1bmN0aW9uLT5zZWxlY3QuZGVzY3JpcHRvciA9ICZzZWxlY3REZXNjcmlwdG9yX3dyaXRlOworfQorCitzdGF0aWMgdm9pZAorYmVnaW5Vbml4QWxlcnRGdW5jdGlvbiAoRnVuY3Rpb25FbnRyeSAqZnVuY3Rpb24pIHsKKyAgZnVuY3Rpb24tPnNlbGVjdC5kZXNjcmlwdG9yID0gJnNlbGVjdERlc2NyaXB0b3JfZXhjZXB0aW9uOworfQorCisjZW5kaWYgLyogVW5peCBJL08gbW9uaXRvcmluZyBjYXBhYmlsaXRpZXMgKi8KKworI2lmZGVmIEFTWU5DX0NBTl9NT05JVE9SX0lPCitzdGF0aWMgdm9pZAorc2V0VW5peFRyYW5zZmVyUmVzdWx0IChPcGVyYXRpb25FbnRyeSAqb3BlcmF0aW9uLCBzc2l6ZV90IHJlc3VsdCkgeworICBUcmFuc2ZlckV4dGVuc2lvbiAqZXh0ZW5zaW9uID0gb3BlcmF0aW9uLT5leHRlbnNpb247CisKKyAgaWYgKHJlc3VsdCA9PSAtMSkgeworICAgIG9wZXJhdGlvbi0+ZXJyb3IgPSBlcnJubzsKKyAgfSBlbHNlIGlmIChyZXN1bHQgPT0gMCkgeworICAgIGV4dGVuc2lvbi0+ZGlyZWN0aW9uLmlucHV0LmVuZCA9IDE7CisgIH0gZWxzZSB7CisgICAgZXh0ZW5zaW9uLT5sZW5ndGggKz0gcmVzdWx0OworICB9CisKKyAgb3BlcmF0aW9uLT5maW5pc2hlZCA9IDE7Cit9CisKK3N0YXRpYyB2b2lkCitmaW5pc2hVbml4UmVhZCAoT3BlcmF0aW9uRW50cnkgKm9wZXJhdGlvbikgeworICBGdW5jdGlvbkVudHJ5ICpmdW5jdGlvbiA9IG9wZXJhdGlvbi0+ZnVuY3Rpb247CisgIFRyYW5zZmVyRXh0ZW5zaW9uICpleHRlbnNpb24gPSBvcGVyYXRpb24tPmV4dGVuc2lvbjsKKyAgc3NpemVfdCByZXN1bHQgPSByZWFkKGZ1bmN0aW9uLT5maWxlRGVzY3JpcHRvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICZleHRlbnNpb24tPmJ1ZmZlcltleHRlbnNpb24tPmxlbmd0aF0sCisgICAgICAgICAgICAgICAgICAgICAgICBleHRlbnNpb24tPnNpemUgLSBleHRlbnNpb24tPmxlbmd0aCk7CisKKyAgc2V0VW5peFRyYW5zZmVyUmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKK30KKworc3RhdGljIHZvaWQKK2ZpbmlzaFVuaXhXcml0ZSAoT3BlcmF0aW9uRW50cnkgKm9wZXJhdGlvbikgeworICBGdW5jdGlvbkVudHJ5ICpmdW5jdGlvbiA9IG9wZXJhdGlvbi0+ZnVuY3Rpb247CisgIFRyYW5zZmVyRXh0ZW5zaW9uICpleHRlbnNpb24gPSBvcGVyYXRpb24tPmV4dGVuc2lvbjsKKyAgc3NpemVfdCByZXN1bHQgPSB3cml0ZShmdW5jdGlvbi0+ZmlsZURlc2NyaXB0b3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgJmV4dGVuc2lvbi0+YnVmZmVyW2V4dGVuc2lvbi0+bGVuZ3RoXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBleHRlbnNpb24tPnNpemUgLSBleHRlbnNpb24tPmxlbmd0aCk7CisKKyAgc2V0VW5peFRyYW5zZmVyUmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKK30KKyNlbmRpZiAvKiBBU1lOQ19DQU5fTU9OSVRPUl9JTyAqLworI2VuZGlmIC8qIF9fTUlOR1czMl9fICovCisKKyNpZmRlZiBBU1lOQ19DQU5fTU9OSVRPUl9JTworc3RhdGljIHZvaWQKK2RlYWxsb2NhdGVGdW5jdGlvbkVudHJ5ICh2b2lkICppdGVtLCB2b2lkICpkYXRhKSB7CisgIEZ1bmN0aW9uRW50cnkgKmZ1bmN0aW9uID0gaXRlbTsKKworICBpZiAoZnVuY3Rpb24tPm9wZXJhdGlvbnMpIGRlYWxsb2NhdGVRdWV1ZShmdW5jdGlvbi0+b3BlcmF0aW9ucyk7CisgIGlmIChmdW5jdGlvbi0+bWV0aG9kcy0+ZW5kRnVuY3Rpb24pIGZ1bmN0aW9uLT5tZXRob2RzLT5lbmRGdW5jdGlvbihmdW5jdGlvbik7CisgIGZyZWUoZnVuY3Rpb24pOworfQorCitzdGF0aWMgUXVldWUgKgorZ2V0RnVuY3Rpb25RdWV1ZSAoaW50IGNyZWF0ZSkgeworICBBc3luY0lvRGF0YSAqaW9kID0gZ2V0SW9EYXRhKCk7CisgIGlmICghaW9kKSByZXR1cm4gTlVMTDsKKworICBpZiAoIWlvZC0+ZnVuY3Rpb25RdWV1ZSAmJiBjcmVhdGUpIHsKKyAgICBpb2QtPmZ1bmN0aW9uUXVldWUgPSBuZXdRdWV1ZShkZWFsbG9jYXRlRnVuY3Rpb25FbnRyeSwgTlVMTCk7CisgIH0KKworICByZXR1cm4gaW9kLT5mdW5jdGlvblF1ZXVlOworfQorCitzdGF0aWMgaW50CitpbnZva2VNb25pdG9yQ2FsbGJhY2sgKE9wZXJhdGlvbkVudHJ5ICpvcGVyYXRpb24pIHsKKyAgTW9uaXRvckV4dGVuc2lvbiAqZXh0ZW5zaW9uID0gb3BlcmF0aW9uLT5leHRlbnNpb247CisgIEFzeW5jTW9uaXRvckNhbGxiYWNrICpjYWxsYmFjayA9IGV4dGVuc2lvbi0+Y2FsbGJhY2s7CisKKyAgbG9nT3BlcmF0aW9uKG9wZXJhdGlvbiwgY2FsbGJhY2spOworCisgIGlmIChjYWxsYmFjaykgeworICAgIGNvbnN0IEFzeW5jTW9uaXRvckNhbGxiYWNrUGFyYW1ldGVycyBwYXJhbWV0ZXJzID0geworICAgICAgLmVycm9yID0gb3BlcmF0aW9uLT5lcnJvciwKKyAgICAgIC5kYXRhID0gb3BlcmF0aW9uLT5kYXRhCisgICAgfTsKKworICAgIGlmIChjYWxsYmFjaygmcGFyYW1ldGVycykpIHsKKyAgICAgIGlmICghb3BlcmF0aW9uLT5lcnJvcikgeworICAgICAgICByZXR1cm4gMTsKKyAgICAgIH0KKyAgICB9CisgIH0KKworICByZXR1cm4gMDsKK30KKworc3RhdGljIGludAoraW52b2tlSW5wdXRDYWxsYmFjayAoT3BlcmF0aW9uRW50cnkgKm9wZXJhdGlvbikgeworICBUcmFuc2ZlckV4dGVuc2lvbiAqZXh0ZW5zaW9uID0gb3BlcmF0aW9uLT5leHRlbnNpb247CisgIEFzeW5jSW5wdXRDYWxsYmFjayAqY2FsbGJhY2sgPSBleHRlbnNpb24tPmRpcmVjdGlvbi5pbnB1dC5jYWxsYmFjazsKKyAgc2l6ZV90IGNvdW50OworCisgIGxvZ09wZXJhdGlvbihvcGVyYXRpb24sIGNhbGxiYWNrKTsKKworICBpZiAoIWNhbGxiYWNrKSByZXR1cm4gMDsKKworICB7CisgICAgY29uc3QgQXN5bmNJbnB1dENhbGxiYWNrUGFyYW1ldGVycyBwYXJhbWV0ZXJzID0geworICAgICAgLmRhdGEgPSBvcGVyYXRpb24tPmRhdGEsCisgICAgICAuYnVmZmVyID0gZXh0ZW5zaW9uLT5idWZmZXIsCisgICAgICAuc2l6ZSA9IGV4dGVuc2lvbi0+c2l6ZSwKKyAgICAgIC5sZW5ndGggPSBleHRlbnNpb24tPmxlbmd0aCwKKyAgICAgIC5lcnJvciA9IG9wZXJhdGlvbi0+ZXJyb3IsCisgICAgICAuZW5kID0gZXh0ZW5zaW9uLT5kaXJlY3Rpb24uaW5wdXQuZW5kCisgICAgfTsKKworICAgIGNvdW50ID0gY2FsbGJhY2soJnBhcmFtZXRlcnMpOworICB9CisKKyAgaWYgKG9wZXJhdGlvbi0+ZXJyb3IpIHJldHVybiAwOworICBpZiAoZXh0ZW5zaW9uLT5kaXJlY3Rpb24uaW5wdXQuZW5kKSByZXR1cm4gMDsKKworICBvcGVyYXRpb24tPmZpbmlzaGVkID0gMDsKKyAgaWYgKGNvdW50KSB7CisgICAgbWVtbW92ZShleHRlbnNpb24tPmJ1ZmZlciwgJmV4dGVuc2lvbi0+YnVmZmVyW2NvdW50XSwKKyAgICAgICAgICAgIGV4dGVuc2lvbi0+bGVuZ3RoIC09IGNvdW50KTsKKyAgICBpZiAoZXh0ZW5zaW9uLT5sZW5ndGggPiAwKSBvcGVyYXRpb24tPmZpbmlzaGVkID0gMTsKKyAgfQorCisgIHJldHVybiAxOworfQorCitzdGF0aWMgaW50CitpbnZva2VPdXRwdXRDYWxsYmFjayAoT3BlcmF0aW9uRW50cnkgKm9wZXJhdGlvbikgeworICBUcmFuc2ZlckV4dGVuc2lvbiAqZXh0ZW5zaW9uID0gb3BlcmF0aW9uLT5leHRlbnNpb247CisgIEFzeW5jT3V0cHV0Q2FsbGJhY2sgKmNhbGxiYWNrID0gZXh0ZW5zaW9uLT5kaXJlY3Rpb24ub3V0cHV0LmNhbGxiYWNrOworCisgIGxvZ09wZXJhdGlvbihvcGVyYXRpb24sIGNhbGxiYWNrKTsKKworICBpZiAoIW9wZXJhdGlvbi0+ZXJyb3IgJiYgKGV4dGVuc2lvbi0+bGVuZ3RoIDwgZXh0ZW5zaW9uLT5zaXplKSkgeworICAgIG9wZXJhdGlvbi0+ZmluaXNoZWQgPSAwOworICAgIHJldHVybiAxOworICB9CisKKyAgaWYgKGNhbGxiYWNrKSB7CisgICAgY29uc3QgQXN5bmNPdXRwdXRDYWxsYmFja1BhcmFtZXRlcnMgcGFyYW1ldGVycyA9IHsKKyAgICAgIC5kYXRhID0gb3BlcmF0aW9uLT5kYXRhLAorICAgICAgLmJ1ZmZlciA9IGV4dGVuc2lvbi0+YnVmZmVyLAorICAgICAgLnNpemUgPSBleHRlbnNpb24tPnNpemUsCisgICAgICAuZXJyb3IgPSBvcGVyYXRpb24tPmVycm9yCisgICAgfTsKKworICAgIGNhbGxiYWNrKCZwYXJhbWV0ZXJzKTsKKyAgfQorCisgIHJldHVybiAwOworfQorCitzdGF0aWMgRWxlbWVudCAqCitnZXRBY3RpdmVPcGVyYXRpb25FbGVtZW50IChjb25zdCBGdW5jdGlvbkVudHJ5ICpmdW5jdGlvbikgeworICBRdWV1ZSAqcXVldWUgPSBmdW5jdGlvbi0+b3BlcmF0aW9uczsKKworICBpZiAoZnVuY3Rpb24tPm1ldGhvZHMtPmludm9rZUNhbGxiYWNrID09IGludm9rZU1vbml0b3JDYWxsYmFjaykgcmV0dXJuIGdldFN0YWNrSGVhZChxdWV1ZSk7CisgIHJldHVybiBnZXRRdWV1ZUhlYWQocXVldWUpOworfQorCitzdGF0aWMgT3BlcmF0aW9uRW50cnkgKgorZ2V0QWN0aXZlT3BlcmF0aW9uIChjb25zdCBGdW5jdGlvbkVudHJ5ICpmdW5jdGlvbikgeworICBFbGVtZW50ICplbGVtZW50ID0gZ2V0QWN0aXZlT3BlcmF0aW9uRWxlbWVudChmdW5jdGlvbik7CisKKyAgaWYgKGVsZW1lbnQpIHJldHVybiBnZXRFbGVtZW50SXRlbShlbGVtZW50KTsKKyAgcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyB2b2lkCitzdGFydE9wZXJhdGlvbiAoT3BlcmF0aW9uRW50cnkgKm9wZXJhdGlvbikgeworICBpZiAob3BlcmF0aW9uLT5mdW5jdGlvbi0+bWV0aG9kcy0+c3RhcnRPcGVyYXRpb24pIHsKKyAgICBvcGVyYXRpb24tPmZ1bmN0aW9uLT5tZXRob2RzLT5zdGFydE9wZXJhdGlvbihvcGVyYXRpb24pOworICB9Cit9CisKK3N0YXRpYyB2b2lkCitmaW5pc2hPcGVyYXRpb24gKE9wZXJhdGlvbkVudHJ5ICpvcGVyYXRpb24pIHsKKyAgaWYgKG9wZXJhdGlvbi0+ZnVuY3Rpb24tPm1ldGhvZHMtPmZpbmlzaE9wZXJhdGlvbikgeworICAgIG9wZXJhdGlvbi0+ZnVuY3Rpb24tPm1ldGhvZHMtPmZpbmlzaE9wZXJhdGlvbihvcGVyYXRpb24pOworICB9Cit9CisKK3N0YXRpYyBpbnQKK2FkZEZ1bmN0aW9uTW9uaXRvciAodm9pZCAqaXRlbSwgdm9pZCAqZGF0YSkgeworICBjb25zdCBGdW5jdGlvbkVudHJ5ICpmdW5jdGlvbiA9IGl0ZW07CisgIE1vbml0b3JHcm91cCAqbW9uaXRvcnMgPSBkYXRhOworICBPcGVyYXRpb25FbnRyeSAqb3BlcmF0aW9uID0gZ2V0QWN0aXZlT3BlcmF0aW9uKGZ1bmN0aW9uKTsKKworICBpZiAob3BlcmF0aW9uKSB7CisgICAgb3BlcmF0aW9uLT5tb25pdG9yID0gTlVMTDsKKworICAgIGlmICghb3BlcmF0aW9uLT5hY3RpdmUpIHsKKyAgICAgIGlmIChvcGVyYXRpb24tPmZpbmlzaGVkKSByZXR1cm4gMTsKKworICAgICAgb3BlcmF0aW9uLT5tb25pdG9yID0gJm1vbml0b3JzLT5hcnJheVttb25pdG9ycy0+Y291bnQrK107CisgICAgICBpbml0aWFsaXplTW9uaXRvcihvcGVyYXRpb24tPm1vbml0b3IsIGZ1bmN0aW9uLCBvcGVyYXRpb24pOworICAgIH0KKyAgfQorCisgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50Cit0ZXN0RnVuY3Rpb25Nb25pdG9yICh2b2lkICppdGVtLCB2b2lkICpkYXRhKSB7CisgIEZ1bmN0aW9uRW50cnkgKmZ1bmN0aW9uID0gaXRlbTsKKyAgT3BlcmF0aW9uRW50cnkgKm9wZXJhdGlvbiA9IGdldEFjdGl2ZU9wZXJhdGlvbihmdW5jdGlvbik7CisKKyAgaWYgKG9wZXJhdGlvbiAmJiBvcGVyYXRpb24tPm1vbml0b3IpIHsKKyAgICBpbnQgKmVycm9yID0gJm9wZXJhdGlvbi0+ZXJyb3I7CisKKyAgICAqZXJyb3IgPSAwOworICAgIGlmICh0ZXN0TW9uaXRvcihvcGVyYXRpb24tPm1vbml0b3IsIGVycm9yKSkgcmV0dXJuIDE7CisgIH0KKworICByZXR1cm4gMDsKK30KKworaW50Cithc3luY0V4ZWN1dGVJb0NhbGxiYWNrIChBc3luY0lvRGF0YSAqaW9kLCBsb25nIGludCB0aW1lb3V0KSB7CisgIGlmIChpb2QpIHsKKyAgICBRdWV1ZSAqZnVuY3Rpb25zID0gaW9kLT5mdW5jdGlvblF1ZXVlOworICAgIHVuc2lnbmVkIGludCBmdW5jdGlvbkNvdW50ID0gZnVuY3Rpb25zPyBnZXRRdWV1ZVNpemUoZnVuY3Rpb25zKTogMDsKKworICAgIHByZXBhcmVNb25pdG9ycygpOworCisgICAgaWYgKGZ1bmN0aW9uQ291bnQpIHsKKyAgICAgIE1vbml0b3JFbnRyeSBtb25pdG9yQXJyYXlbZnVuY3Rpb25Db3VudF07CisgICAgICBNb25pdG9yR3JvdXAgbW9uaXRvcnMgPSB7CisgICAgICAgIC5hcnJheSA9IG1vbml0b3JBcnJheSwKKyAgICAgICAgLmNvdW50ID0gMAorICAgICAgfTsKKworICAgICAgaW50IGV4ZWN1dGVkID0gMDsKKyAgICAgIEVsZW1lbnQgKmZ1bmN0aW9uRWxlbWVudCA9IHByb2Nlc3NRdWV1ZShmdW5jdGlvbnMsIGFkZEZ1bmN0aW9uTW9uaXRvciwgJm1vbml0b3JzKTsKKworICAgICAgaWYgKCFmdW5jdGlvbkVsZW1lbnQpIHsKKyAgICAgICAgaWYgKCFtb25pdG9ycy5jb3VudCkgeworICAgICAgICAgIGFwcHJveGltYXRlRGVsYXkodGltZW91dCk7CisgICAgICAgIH0gZWxzZSBpZiAoYXdhaXRNb25pdG9ycygmbW9uaXRvcnMsIHRpbWVvdXQpKSB7CisgICAgICAgICAgZnVuY3Rpb25FbGVtZW50ID0gcHJvY2Vzc1F1ZXVlKGZ1bmN0aW9ucywgdGVzdEZ1bmN0aW9uTW9uaXRvciwgTlVMTCk7CisgICAgICAgIH0KKyAgICAgIH0KKworICAgICAgaWYgKGZ1bmN0aW9uRWxlbWVudCkgeworICAgICAgICBGdW5jdGlvbkVudHJ5ICpmdW5jdGlvbiA9IGdldEVsZW1lbnRJdGVtKGZ1bmN0aW9uRWxlbWVudCk7CisgICAgICAgIEVsZW1lbnQgKm9wZXJhdGlvbkVsZW1lbnQgPSBnZXRBY3RpdmVPcGVyYXRpb25FbGVtZW50KGZ1bmN0aW9uKTsKKyAgICAgICAgT3BlcmF0aW9uRW50cnkgKm9wZXJhdGlvbiA9IGdldEVsZW1lbnRJdGVtKG9wZXJhdGlvbkVsZW1lbnQpOworCisgICAgICAgIGlmICghb3BlcmF0aW9uLT5maW5pc2hlZCkgZmluaXNoT3BlcmF0aW9uKG9wZXJhdGlvbik7CisKKyAgICAgICAgb3BlcmF0aW9uLT5hY3RpdmUgPSAxOworICAgICAgICBpZiAoIWZ1bmN0aW9uLT5tZXRob2RzLT5pbnZva2VDYWxsYmFjayhvcGVyYXRpb24pKSBvcGVyYXRpb24tPmNhbmNlbCA9IDE7CisgICAgICAgIG9wZXJhdGlvbi0+YWN0aXZlID0gMDsKKyAgICAgICAgZXhlY3V0ZWQgPSAxOworCisgICAgICAgIGlmIChvcGVyYXRpb24tPmNhbmNlbCkgeworICAgICAgICAgIGRlbGV0ZUVsZW1lbnQob3BlcmF0aW9uRWxlbWVudCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgb3BlcmF0aW9uLT5lcnJvciA9IDA7CisgICAgICAgIH0KKworICAgICAgICBpZiAoKG9wZXJhdGlvbkVsZW1lbnQgPSBnZXRBY3RpdmVPcGVyYXRpb25FbGVtZW50KGZ1bmN0aW9uKSkpIHsKKyAgICAgICAgICBvcGVyYXRpb24gPSBnZXRFbGVtZW50SXRlbShvcGVyYXRpb25FbGVtZW50KTsKKyAgICAgICAgICBpZiAoIW9wZXJhdGlvbi0+ZmluaXNoZWQpIHN0YXJ0T3BlcmF0aW9uKG9wZXJhdGlvbik7CisgICAgICAgICAgcmVxdWV1ZUVsZW1lbnQoZnVuY3Rpb25FbGVtZW50KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICBkZWxldGVFbGVtZW50KGZ1bmN0aW9uRWxlbWVudCk7CisgICAgICAgIH0KKyAgICAgIH0KKworICAgICAgcmV0dXJuIGV4ZWN1dGVkOworICAgIH0KKyAgfQorCisgIGFwcHJveGltYXRlRGVsYXkodGltZW91dCk7CisgIHJldHVybiAwOworfQorCitzdGF0aWMgdm9pZAorZGVhbGxvY2F0ZU9wZXJhdGlvbkVudHJ5ICh2b2lkICppdGVtLCB2b2lkICpkYXRhKSB7CisgIE9wZXJhdGlvbkVudHJ5ICpvcGVyYXRpb24gPSBpdGVtOworICBpZiAob3BlcmF0aW9uLT5leHRlbnNpb24pIGZyZWUob3BlcmF0aW9uLT5leHRlbnNpb24pOworICBmcmVlKG9wZXJhdGlvbik7Cit9CisKK3N0YXRpYyB2b2lkCitjYW5jZWxPcGVyYXRpb24gKEVsZW1lbnQgKm9wZXJhdGlvbkVsZW1lbnQpIHsKKyAgT3BlcmF0aW9uRW50cnkgKm9wZXJhdGlvbiA9IGdldEVsZW1lbnRJdGVtKG9wZXJhdGlvbkVsZW1lbnQpOworCisgIGlmIChvcGVyYXRpb24tPmFjdGl2ZSkgeworICAgIG9wZXJhdGlvbi0+Y2FuY2VsID0gMTsKKyAgfSBlbHNlIHsKKyAgICBGdW5jdGlvbkVudHJ5ICpmdW5jdGlvbiA9IG9wZXJhdGlvbi0+ZnVuY3Rpb247CisgICAgaW50IGlzRmlyc3RPcGVyYXRpb24gPSBvcGVyYXRpb25FbGVtZW50ID09IGdldEFjdGl2ZU9wZXJhdGlvbkVsZW1lbnQoZnVuY3Rpb24pOworCisgICAgaWYgKGlzRmlyc3RPcGVyYXRpb24pIHsKKyAgICAgIGlmICghb3BlcmF0aW9uLT5maW5pc2hlZCkgeworICAgICAgICBpZiAob3BlcmF0aW9uLT5mdW5jdGlvbi0+bWV0aG9kcy0+Y2FuY2VsT3BlcmF0aW9uKSB7CisgICAgICAgICAgb3BlcmF0aW9uLT5mdW5jdGlvbi0+bWV0aG9kcy0+Y2FuY2VsT3BlcmF0aW9uKG9wZXJhdGlvbik7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoZ2V0UXVldWVTaXplKGZ1bmN0aW9uLT5vcGVyYXRpb25zKSA9PSAxKSB7CisgICAgICBkZWxldGVFbGVtZW50KGZpbmRFbGVtZW50V2l0aEl0ZW0oZ2V0RnVuY3Rpb25RdWV1ZSgwKSwgZnVuY3Rpb24pKTsKKyAgICB9IGVsc2UgeworICAgICAgZGVsZXRlRWxlbWVudChvcGVyYXRpb25FbGVtZW50KTsKKworICAgICAgaWYgKGlzRmlyc3RPcGVyYXRpb24pIHsKKyAgICAgICAgb3BlcmF0aW9uRWxlbWVudCA9IGdldEFjdGl2ZU9wZXJhdGlvbkVsZW1lbnQoZnVuY3Rpb24pOworICAgICAgICBvcGVyYXRpb24gPSBnZXRFbGVtZW50SXRlbShvcGVyYXRpb25FbGVtZW50KTsKKworICAgICAgICBpZiAoIW9wZXJhdGlvbi0+ZmluaXNoZWQpIHN0YXJ0T3BlcmF0aW9uKG9wZXJhdGlvbik7CisgICAgICB9CisgICAgfQorICB9Cit9CisKK3N0YXRpYyBpbnQKK3Rlc3RGdW5jdGlvbkVudHJ5IChjb25zdCB2b2lkICppdGVtLCB2b2lkICpkYXRhKSB7CisgIGNvbnN0IEZ1bmN0aW9uRW50cnkgKmZ1bmN0aW9uID0gaXRlbTsKKyAgY29uc3QgRnVuY3Rpb25LZXkgKmtleSA9IGRhdGE7CisgIHJldHVybiAoZnVuY3Rpb24tPmZpbGVEZXNjcmlwdG9yID09IGtleS0+ZmlsZURlc2NyaXB0b3IpICYmCisgICAgICAgICAoZnVuY3Rpb24tPm1ldGhvZHMgPT0ga2V5LT5tZXRob2RzKTsKK30KKworc3RhdGljIEVsZW1lbnQgKgorZ2V0RnVuY3Rpb25FbGVtZW50IChGaWxlRGVzY3JpcHRvciBmaWxlRGVzY3JpcHRvciwgY29uc3QgRnVuY3Rpb25NZXRob2RzICptZXRob2RzLCBpbnQgY3JlYXRlKSB7CisgIFF1ZXVlICpmdW5jdGlvbnMgPSBnZXRGdW5jdGlvblF1ZXVlKGNyZWF0ZSk7CisKKyAgaWYgKGZ1bmN0aW9ucykgeworICAgIHsKKyAgICAgIEZ1bmN0aW9uS2V5IGtleSA9IHsKKyAgICAgICAgLmZpbGVEZXNjcmlwdG9yID0gZmlsZURlc2NyaXB0b3IsCisgICAgICAgIC5tZXRob2RzID0gbWV0aG9kcworICAgICAgfTsKKworICAgICAgeworICAgICAgICBFbGVtZW50ICplbGVtZW50ID0gZmluZEVsZW1lbnQoZnVuY3Rpb25zLCB0ZXN0RnVuY3Rpb25FbnRyeSwgJmtleSk7CisgICAgICAgIGlmIChlbGVtZW50KSByZXR1cm4gZWxlbWVudDsKKyAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoY3JlYXRlKSB7CisgICAgICBGdW5jdGlvbkVudHJ5ICpmdW5jdGlvbjsKKworICAgICAgaWYgKChmdW5jdGlvbiA9IG1hbGxvYyhzaXplb2YoKmZ1bmN0aW9uKSkpKSB7CisgICAgICAgIGZ1bmN0aW9uLT5maWxlRGVzY3JpcHRvciA9IGZpbGVEZXNjcmlwdG9yOworICAgICAgICBmdW5jdGlvbi0+bWV0aG9kcyA9IG1ldGhvZHM7CisKKyAgICAgICAgaWYgKChmdW5jdGlvbi0+b3BlcmF0aW9ucyA9IG5ld1F1ZXVlKGRlYWxsb2NhdGVPcGVyYXRpb25FbnRyeSwgTlVMTCkpKSB7CisgICAgICAgICAgeworICAgICAgICAgICAgc3RhdGljIEFzeW5jUXVldWVNZXRob2RzIG1ldGhvZHMgPSB7CisgICAgICAgICAgICAgIC5jYW5jZWxSZXF1ZXN0ID0gY2FuY2VsT3BlcmF0aW9uCisgICAgICAgICAgICB9OworCisgICAgICAgICAgICBzZXRRdWV1ZURhdGEoZnVuY3Rpb24tPm9wZXJhdGlvbnMsICZtZXRob2RzKTsKKyAgICAgICAgICB9CisKKyAgICAgICAgICBpZiAobWV0aG9kcy0+YmVnaW5GdW5jdGlvbikgbWV0aG9kcy0+YmVnaW5GdW5jdGlvbihmdW5jdGlvbik7CisKKyAgICAgICAgICB7CisgICAgICAgICAgICBFbGVtZW50ICplbGVtZW50ID0gZW5xdWV1ZUl0ZW0oZnVuY3Rpb25zLCBmdW5jdGlvbik7CisgICAgICAgICAgICBpZiAoZWxlbWVudCkgcmV0dXJuIGVsZW1lbnQ7CisgICAgICAgICAgfQorCisgICAgICAgICAgZGVhbGxvY2F0ZVF1ZXVlKGZ1bmN0aW9uLT5vcGVyYXRpb25zKTsKKyAgICAgICAgfQorCisgICAgICAgIGZyZWUoZnVuY3Rpb24pOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgbG9nTWFsbG9jRXJyb3IoKTsKKyAgICAgIH0KKyAgICB9CisgIH0KKworICByZXR1cm4gTlVMTDsKK30KKworc3RhdGljIEVsZW1lbnQgKgorbmV3T3BlcmF0aW9uICgKKyAgRmlsZURlc2NyaXB0b3IgZmlsZURlc2NyaXB0b3IsCisgIGNvbnN0IEZ1bmN0aW9uTWV0aG9kcyAqbWV0aG9kcywKKyAgdm9pZCAqZXh0ZW5zaW9uLAorICB2b2lkICpkYXRhCispIHsKKyAgT3BlcmF0aW9uRW50cnkgKm9wZXJhdGlvbjsKKworICBpZiAoKG9wZXJhdGlvbiA9IG1hbGxvYyhzaXplb2YoKm9wZXJhdGlvbikpKSkgeworICAgIEVsZW1lbnQgKmZ1bmN0aW9uRWxlbWVudDsKKworICAgIGlmICgoZnVuY3Rpb25FbGVtZW50ID0gZ2V0RnVuY3Rpb25FbGVtZW50KGZpbGVEZXNjcmlwdG9yLCBtZXRob2RzLCAxKSkpIHsKKyAgICAgIEZ1bmN0aW9uRW50cnkgKmZ1bmN0aW9uID0gZ2V0RWxlbWVudEl0ZW0oZnVuY3Rpb25FbGVtZW50KTsKKyAgICAgIGludCBpc0ZpcnN0T3BlcmF0aW9uID0gIWdldFF1ZXVlU2l6ZShmdW5jdGlvbi0+b3BlcmF0aW9ucyk7CisgICAgICBFbGVtZW50ICpvcGVyYXRpb25FbGVtZW50ID0gZW5xdWV1ZUl0ZW0oZnVuY3Rpb24tPm9wZXJhdGlvbnMsIG9wZXJhdGlvbik7CisKKyAgICAgIGlmIChvcGVyYXRpb25FbGVtZW50KSB7CisgICAgICAgIG9wZXJhdGlvbi0+ZnVuY3Rpb24gPSBmdW5jdGlvbjsKKyAgICAgICAgb3BlcmF0aW9uLT5leHRlbnNpb24gPSBleHRlbnNpb247CisgICAgICAgIG9wZXJhdGlvbi0+ZGF0YSA9IGRhdGE7CisKKyAgICAgICAgb3BlcmF0aW9uLT5tb25pdG9yID0gTlVMTDsKKyAgICAgICAgb3BlcmF0aW9uLT5lcnJvciA9IDA7CisKKyAgICAgICAgb3BlcmF0aW9uLT5hY3RpdmUgPSAwOworICAgICAgICBvcGVyYXRpb24tPmNhbmNlbCA9IDA7CisgICAgICAgIG9wZXJhdGlvbi0+ZmluaXNoZWQgPSAwOworCisgICAgICAgIGlmIChpc0ZpcnN0T3BlcmF0aW9uKSBzdGFydE9wZXJhdGlvbihvcGVyYXRpb24pOworICAgICAgICByZXR1cm4gb3BlcmF0aW9uRWxlbWVudDsKKyAgICAgIH0KKworICAgICAgaWYgKGlzRmlyc3RPcGVyYXRpb24pIGRlbGV0ZUVsZW1lbnQoZnVuY3Rpb25FbGVtZW50KTsKKyAgICB9CisKKyAgICBmcmVlKG9wZXJhdGlvbik7CisgIH0gZWxzZSB7CisgICAgbG9nTWFsbG9jRXJyb3IoKTsKKyAgfQorCisgIHJldHVybiBOVUxMOworfQorCit0eXBlZGVmIHN0cnVjdCB7CisgIEZpbGVEZXNjcmlwdG9yIGZpbGVEZXNjcmlwdG9yOworICBjb25zdCBGdW5jdGlvbk1ldGhvZHMgKm1ldGhvZHM7CisgIEFzeW5jTW9uaXRvckNhbGxiYWNrICpjYWxsYmFjazsKKyAgdm9pZCAqZGF0YTsKK30gTW9uaXRvckZpbGVPcGVyYXRpb25QYXJhbWV0ZXJzOworCitzdGF0aWMgRWxlbWVudCAqCituZXdGaWxlTW9uaXRvck9wZXJhdGlvbiAoY29uc3Qgdm9pZCAqcGFyYW1ldGVycykgeworICBjb25zdCBNb25pdG9yRmlsZU9wZXJhdGlvblBhcmFtZXRlcnMgKm1vcCA9IHBhcmFtZXRlcnM7CisgIE1vbml0b3JFeHRlbnNpb24gKmV4dGVuc2lvbjsKKworICBpZiAoKGV4dGVuc2lvbiA9IG1hbGxvYyhzaXplb2YoKmV4dGVuc2lvbikpKSkgeworICAgIGV4dGVuc2lvbi0+Y2FsbGJhY2sgPSBtb3AtPmNhbGxiYWNrOworCisgICAgeworICAgICAgRWxlbWVudCAqZWxlbWVudCA9IG5ld09wZXJhdGlvbihtb3AtPmZpbGVEZXNjcmlwdG9yLCBtb3AtPm1ldGhvZHMsIGV4dGVuc2lvbiwgbW9wLT5kYXRhKTsKKworICAgICAgaWYgKGVsZW1lbnQpIHJldHVybiBlbGVtZW50OworICAgIH0KKworICAgIGZyZWUoZXh0ZW5zaW9uKTsKKyAgfSBlbHNlIHsKKyAgICBsb2dNYWxsb2NFcnJvcigpOworICB9CisKKyAgcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBFbGVtZW50ICoKK25ld1RyYW5zZmVyT3BlcmF0aW9uICgKKyAgRmlsZURlc2NyaXB0b3IgZmlsZURlc2NyaXB0b3IsCisgIGNvbnN0IEZ1bmN0aW9uTWV0aG9kcyAqbWV0aG9kcywKKyAgY29uc3QgVHJhbnNmZXJEaXJlY3Rpb25VbmlvbiAqZGlyZWN0aW9uLAorICBzaXplX3Qgc2l6ZSwgY29uc3Qgdm9pZCAqYnVmZmVyLAorICB2b2lkICpkYXRhCispIHsKKyAgVHJhbnNmZXJFeHRlbnNpb24gKmV4dGVuc2lvbjsKKworICBpZiAoKGV4dGVuc2lvbiA9IG1hbGxvYyhzaXplb2YoKmV4dGVuc2lvbikgKyBzaXplKSkpIHsKKyAgICBleHRlbnNpb24tPmRpcmVjdGlvbiA9ICpkaXJlY3Rpb247CisgICAgZXh0ZW5zaW9uLT5zaXplID0gc2l6ZTsKKyAgICBleHRlbnNpb24tPmxlbmd0aCA9IDA7CisgICAgaWYgKGJ1ZmZlcikgbWVtY3B5KGV4dGVuc2lvbi0+YnVmZmVyLCBidWZmZXIsIHNpemUpOworCisgICAgeworICAgICAgRWxlbWVudCAqZWxlbWVudCA9IG5ld09wZXJhdGlvbihmaWxlRGVzY3JpcHRvciwgbWV0aG9kcywgZXh0ZW5zaW9uLCBkYXRhKTsKKworICAgICAgaWYgKGVsZW1lbnQpIHJldHVybiBlbGVtZW50OworICAgIH0KKworICAgIGZyZWUoZXh0ZW5zaW9uKTsKKyAgfSBlbHNlIHsKKyAgICBsb2dNYWxsb2NFcnJvcigpOworICB9CisKKyAgcmV0dXJuIE5VTEw7Cit9CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgRmlsZURlc2NyaXB0b3IgZmlsZURlc2NyaXB0b3I7CisgIHNpemVfdCBzaXplOworICBBc3luY0lucHV0Q2FsbGJhY2sgKmNhbGxiYWNrOworICB2b2lkICpkYXRhOworfSBJbnB1dE9wZXJhdGlvblBhcmFtZXRlcnM7CisKK3N0YXRpYyBFbGVtZW50ICoKK25ld0lucHV0T3BlcmF0aW9uIChjb25zdCB2b2lkICpwYXJhbWV0ZXJzKSB7CisgIGNvbnN0IElucHV0T3BlcmF0aW9uUGFyYW1ldGVycyAqaW9wID0gcGFyYW1ldGVyczsKKworICBUcmFuc2ZlckRpcmVjdGlvblVuaW9uIGRpcmVjdGlvbiA9IHsKKyAgICAuaW5wdXQgPSB7CisgICAgICAuY2FsbGJhY2sgPSBpb3AtPmNhbGxiYWNrLAorICAgICAgLmVuZCA9IDAKKyAgICB9CisgIH07CisKKyAgc3RhdGljIGNvbnN0IEZ1bmN0aW9uTWV0aG9kcyBtZXRob2RzID0geworICAgIC5mdW5jdGlvbk5hbWUgPSAiaW5wdXQgdHJhbnNmZXJyZWQiLAorCisjaWZkZWYgX19NSU5HVzMyX18KKyAgICAuYmVnaW5GdW5jdGlvbiA9IGJlZ2luV2luZG93c0Z1bmN0aW9uLAorICAgIC5lbmRGdW5jdGlvbiA9IGVuZFdpbmRvd3NGdW5jdGlvbiwKKyAgICAuc3RhcnRPcGVyYXRpb24gPSBzdGFydFdpbmRvd3NSZWFkLAorICAgIC5maW5pc2hPcGVyYXRpb24gPSBmaW5pc2hXaW5kb3dzVHJhbnNmZXJPcGVyYXRpb24sCisgICAgLmNhbmNlbE9wZXJhdGlvbiA9IGNhbmNlbFdpbmRvd3NUcmFuc2Zlck9wZXJhdGlvbiwKKyNlbHNlIC8qIF9fTUlOR1czMl9fICovCisgICAgLmJlZ2luRnVuY3Rpb24gPSBiZWdpblVuaXhJbnB1dEZ1bmN0aW9uLAorICAgIC5maW5pc2hPcGVyYXRpb24gPSBmaW5pc2hVbml4UmVhZCwKKyNlbmRpZiAvKiBfX01JTkdXMzJfXyAqLworCisgICAgLmludm9rZUNhbGxiYWNrID0gaW52b2tlSW5wdXRDYWxsYmFjaworICB9OworCisgIHJldHVybiBuZXdUcmFuc2Zlck9wZXJhdGlvbihpb3AtPmZpbGVEZXNjcmlwdG9yLCAmbWV0aG9kcywgJmRpcmVjdGlvbiwgaW9wLT5zaXplLCBOVUxMLCBpb3AtPmRhdGEpOworfQorCit0eXBlZGVmIHN0cnVjdCB7CisgIEZpbGVEZXNjcmlwdG9yIGZpbGVEZXNjcmlwdG9yOworICBzaXplX3Qgc2l6ZTsKKyAgY29uc3Qgdm9pZCAqYnVmZmVyOworICBBc3luY091dHB1dENhbGxiYWNrICpjYWxsYmFjazsKKyAgdm9pZCAqZGF0YTsKK30gT3V0cHV0T3BlcmF0aW9uUGFyYW1ldGVyczsKKworc3RhdGljIEVsZW1lbnQgKgorbmV3T3V0cHV0T3BlcmF0aW9uIChjb25zdCB2b2lkICpwYXJhbWV0ZXJzKSB7CisgIGNvbnN0IE91dHB1dE9wZXJhdGlvblBhcmFtZXRlcnMgKm9vcCA9IHBhcmFtZXRlcnM7CisKKyAgVHJhbnNmZXJEaXJlY3Rpb25VbmlvbiBkaXJlY3Rpb24gPSB7CisgICAgLm91dHB1dCA9IHsKKyAgICAgIC5jYWxsYmFjayA9IG9vcC0+Y2FsbGJhY2sKKyAgICB9CisgIH07CisKKyAgc3RhdGljIGNvbnN0IEZ1bmN0aW9uTWV0aG9kcyBtZXRob2RzID0geworICAgIC5mdW5jdGlvbk5hbWUgPSAib3V0cHV0IHRyYW5zZmVycmVkIiwKKworI2lmZGVmIF9fTUlOR1czMl9fCisgICAgLmJlZ2luRnVuY3Rpb24gPSBiZWdpbldpbmRvd3NGdW5jdGlvbiwKKyAgICAuZW5kRnVuY3Rpb24gPSBlbmRXaW5kb3dzRnVuY3Rpb24sCisgICAgLnN0YXJ0T3BlcmF0aW9uID0gc3RhcnRXaW5kb3dzV3JpdGUsCisgICAgLmZpbmlzaE9wZXJhdGlvbiA9IGZpbmlzaFdpbmRvd3NUcmFuc2Zlck9wZXJhdGlvbiwKKyAgICAuY2FuY2VsT3BlcmF0aW9uID0gY2FuY2VsV2luZG93c1RyYW5zZmVyT3BlcmF0aW9uLAorI2Vsc2UgLyogX19NSU5HVzMyX18gKi8KKyAgICAuYmVnaW5GdW5jdGlvbiA9IGJlZ2luVW5peE91dHB1dEZ1bmN0aW9uLAorICAgIC5maW5pc2hPcGVyYXRpb24gPSBmaW5pc2hVbml4V3JpdGUsCisjZW5kaWYgLyogX19NSU5HVzMyX18gKi8KKworICAgIC5pbnZva2VDYWxsYmFjayA9IGludm9rZU91dHB1dENhbGxiYWNrCisgIH07CisKKyAgcmV0dXJuIG5ld1RyYW5zZmVyT3BlcmF0aW9uKG9vcC0+ZmlsZURlc2NyaXB0b3IsICZtZXRob2RzLCAmZGlyZWN0aW9uLCBvb3AtPnNpemUsIG9vcC0+YnVmZmVyLCBvb3AtPmRhdGEpOworfQorCisjZWxzZSAvKiBBU1lOQ19DQU5fTU9OSVRPUl9JTyAqLworaW50Cithc3luY0hhbmRsZU9wZXJhdGlvbiAoQXN5bmNUaHJlYWRTcGVjaWZpY0RhdGEgKnRzZCwgbG9uZyBpbnQgdGltZW91dCkgeworICBhcHByb3hpbWF0ZURlbGF5KHRpbWVvdXQpOworICByZXR1cm4gMDsKK30KKyNlbmRpZiAvKiBBU1lOQ19DQU5fTU9OSVRPUl9JTyAqLworCitpbnQKK2FzeW5jTW9uaXRvckZpbGVJbnB1dCAoCisgIEFzeW5jSGFuZGxlICpoYW5kbGUsCisgIEZpbGVEZXNjcmlwdG9yIGZpbGVEZXNjcmlwdG9yLAorICBBc3luY01vbml0b3JDYWxsYmFjayAqY2FsbGJhY2ssIHZvaWQgKmRhdGEKKykgeworI2lmZGVmIEFTWU5DX0NBTl9NT05JVE9SX0lPCisgIHN0YXRpYyBjb25zdCBGdW5jdGlvbk1ldGhvZHMgbWV0aG9kcyA9IHsKKyAgICAuZnVuY3Rpb25OYW1lID0gImZpbGUgaW5wdXQgbW9uaXRvciIsCisKKyNpZmRlZiBfX01JTkdXMzJfXworICAgIC5iZWdpbkZ1bmN0aW9uID0gYmVnaW5XaW5kb3dzRnVuY3Rpb24sCisgICAgLmVuZEZ1bmN0aW9uID0gZW5kV2luZG93c0Z1bmN0aW9uLAorI2Vsc2UgLyogX19NSU5HVzMyX18gKi8KKyAgICAuYmVnaW5GdW5jdGlvbiA9IGJlZ2luVW5peElucHV0RnVuY3Rpb24sCisjZW5kaWYgLyogX19NSU5HVzMyX18gKi8KKworICAgIC5pbnZva2VDYWxsYmFjayA9IGludm9rZU1vbml0b3JDYWxsYmFjaworICB9OworCisgIGNvbnN0IE1vbml0b3JGaWxlT3BlcmF0aW9uUGFyYW1ldGVycyBtb3AgPSB7CisgICAgLmZpbGVEZXNjcmlwdG9yID0gZmlsZURlc2NyaXB0b3IsCisgICAgLm1ldGhvZHMgPSAmbWV0aG9kcywKKyAgICAuY2FsbGJhY2sgPSBjYWxsYmFjaywKKyAgICAuZGF0YSA9IGRhdGEKKyAgfTsKKworICByZXR1cm4gYXN5bmNNYWtlSGFuZGxlKGhhbmRsZSwgbmV3RmlsZU1vbml0b3JPcGVyYXRpb24sICZtb3ApOworI2Vsc2UgLyogQVNZTkNfQ0FOX01PTklUT1JfSU8gKi8KKyAgbG9nVW5zdXBwb3J0ZWRGdW5jdGlvbigpOworICByZXR1cm4gMDsKKyNlbmRpZiAvKiBBU1lOQ19DQU5fTU9OSVRPUl9JTyAqLworfQorCitpbnQKK2FzeW5jTW9uaXRvckZpbGVPdXRwdXQgKAorICBBc3luY0hhbmRsZSAqaGFuZGxlLAorICBGaWxlRGVzY3JpcHRvciBmaWxlRGVzY3JpcHRvciwKKyAgQXN5bmNNb25pdG9yQ2FsbGJhY2sgKmNhbGxiYWNrLCB2b2lkICpkYXRhCispIHsKKyNpZmRlZiBBU1lOQ19DQU5fTU9OSVRPUl9JTworICBzdGF0aWMgY29uc3QgRnVuY3Rpb25NZXRob2RzIG1ldGhvZHMgPSB7CisgICAgLmZ1bmN0aW9uTmFtZSA9ICJmaWxlIG91dHB1dCBtb25pdG9yIiwKKworI2lmZGVmIF9fTUlOR1czMl9fCisgICAgLmJlZ2luRnVuY3Rpb24gPSBiZWdpbldpbmRvd3NGdW5jdGlvbiwKKyAgICAuZW5kRnVuY3Rpb24gPSBlbmRXaW5kb3dzRnVuY3Rpb24sCisjZWxzZSAvKiBfX01JTkdXMzJfXyAqLworICAgIC5iZWdpbkZ1bmN0aW9uID0gYmVnaW5Vbml4T3V0cHV0RnVuY3Rpb24sCisjZW5kaWYgLyogX19NSU5HVzMyX18gKi8KKworICAgIC5pbnZva2VDYWxsYmFjayA9IGludm9rZU1vbml0b3JDYWxsYmFjaworICB9OworCisgIGNvbnN0IE1vbml0b3JGaWxlT3BlcmF0aW9uUGFyYW1ldGVycyBtb3AgPSB7CisgICAgLmZpbGVEZXNjcmlwdG9yID0gZmlsZURlc2NyaXB0b3IsCisgICAgLm1ldGhvZHMgPSAmbWV0aG9kcywKKyAgICAuY2FsbGJhY2sgPSBjYWxsYmFjaywKKyAgICAuZGF0YSA9IGRhdGEKKyAgfTsKKworICByZXR1cm4gYXN5bmNNYWtlSGFuZGxlKGhhbmRsZSwgbmV3RmlsZU1vbml0b3JPcGVyYXRpb24sICZtb3ApOworI2Vsc2UgLyogQVNZTkNfQ0FOX01PTklUT1JfSU8gKi8KKyAgbG9nVW5zdXBwb3J0ZWRGdW5jdGlvbigpOworICByZXR1cm4gMDsKKyNlbmRpZiAvKiBBU1lOQ19DQU5fTU9OSVRPUl9JTyAqLworfQorCitpbnQKK2FzeW5jTW9uaXRvckZpbGVBbGVydCAoCisgIEFzeW5jSGFuZGxlICpoYW5kbGUsCisgIEZpbGVEZXNjcmlwdG9yIGZpbGVEZXNjcmlwdG9yLAorICBBc3luY01vbml0b3JDYWxsYmFjayAqY2FsbGJhY2ssIHZvaWQgKmRhdGEKKykgeworI2lmZGVmIEFTWU5DX0NBTl9NT05JVE9SX0lPCisgIHN0YXRpYyBjb25zdCBGdW5jdGlvbk1ldGhvZHMgbWV0aG9kcyA9IHsKKyAgICAuZnVuY3Rpb25OYW1lID0gImZpbGUgYWxlcnQgbW9uaXRvciIsCisKKyNpZmRlZiBfX01JTkdXMzJfXworICAgIC5iZWdpbkZ1bmN0aW9uID0gYmVnaW5XaW5kb3dzRnVuY3Rpb24sCisgICAgLmVuZEZ1bmN0aW9uID0gZW5kV2luZG93c0Z1bmN0aW9uLAorI2Vsc2UgLyogX19NSU5HVzMyX18gKi8KKyAgICAuYmVnaW5GdW5jdGlvbiA9IGJlZ2luVW5peEFsZXJ0RnVuY3Rpb24sCisjZW5kaWYgLyogX19NSU5HVzMyX18gKi8KKworICAgIC5pbnZva2VDYWxsYmFjayA9IGludm9rZU1vbml0b3JDYWxsYmFjaworICB9OworCisgIGNvbnN0IE1vbml0b3JGaWxlT3BlcmF0aW9uUGFyYW1ldGVycyBtb3AgPSB7CisgICAgLmZpbGVEZXNjcmlwdG9yID0gZmlsZURlc2NyaXB0b3IsCisgICAgLm1ldGhvZHMgPSAmbWV0aG9kcywKKyAgICAuY2FsbGJhY2sgPSBjYWxsYmFjaywKKyAgICAuZGF0YSA9IGRhdGEKKyAgfTsKKworICByZXR1cm4gYXN5bmNNYWtlSGFuZGxlKGhhbmRsZSwgbmV3RmlsZU1vbml0b3JPcGVyYXRpb24sICZtb3ApOworI2Vsc2UgLyogQVNZTkNfQ0FOX01PTklUT1JfSU8gKi8KKyAgbG9nVW5zdXBwb3J0ZWRGdW5jdGlvbigpOworICByZXR1cm4gMDsKKyNlbmRpZiAvKiBBU1lOQ19DQU5fTU9OSVRPUl9JTyAqLworfQorCitpbnQKK2FzeW5jUmVhZEZpbGUgKAorICBBc3luY0hhbmRsZSAqaGFuZGxlLAorICBGaWxlRGVzY3JpcHRvciBmaWxlRGVzY3JpcHRvciwKKyAgc2l6ZV90IHNpemUsCisgIEFzeW5jSW5wdXRDYWxsYmFjayAqY2FsbGJhY2ssIHZvaWQgKmRhdGEKKykgeworI2lmZGVmIEFTWU5DX0NBTl9NT05JVE9SX0lPCisgIGNvbnN0IElucHV0T3BlcmF0aW9uUGFyYW1ldGVycyBpb3AgPSB7CisgICAgLmZpbGVEZXNjcmlwdG9yID0gZmlsZURlc2NyaXB0b3IsCisgICAgLnNpemUgPSBzaXplLAorICAgIC5jYWxsYmFjayA9IGNhbGxiYWNrLAorICAgIC5kYXRhID0gZGF0YQorICB9OworCisgIHJldHVybiBhc3luY01ha2VIYW5kbGUoaGFuZGxlLCBuZXdJbnB1dE9wZXJhdGlvbiwgJmlvcCk7CisjZWxzZSAvKiBBU1lOQ19DQU5fTU9OSVRPUl9JTyAqLworICBsb2dVbnN1cHBvcnRlZEZ1bmN0aW9uKCk7CisgIHJldHVybiAwOworI2VuZGlmIC8qIEFTWU5DX0NBTl9NT05JVE9SX0lPICovCit9CisKK2ludAorYXN5bmNXcml0ZUZpbGUgKAorICBBc3luY0hhbmRsZSAqaGFuZGxlLAorICBGaWxlRGVzY3JpcHRvciBmaWxlRGVzY3JpcHRvciwKKyAgY29uc3Qgdm9pZCAqYnVmZmVyLCBzaXplX3Qgc2l6ZSwKKyAgQXN5bmNPdXRwdXRDYWxsYmFjayAqY2FsbGJhY2ssIHZvaWQgKmRhdGEKKykgeworI2lmZGVmIEFTWU5DX0NBTl9NT05JVE9SX0lPCisgIGNvbnN0IE91dHB1dE9wZXJhdGlvblBhcmFtZXRlcnMgb29wID0geworICAgIC5maWxlRGVzY3JpcHRvciA9IGZpbGVEZXNjcmlwdG9yLAorICAgIC5zaXplID0gc2l6ZSwKKyAgICAuYnVmZmVyID0gYnVmZmVyLAorICAgIC5jYWxsYmFjayA9IGNhbGxiYWNrLAorICAgIC5kYXRhID0gZGF0YQorICB9OworCisgIHJldHVybiBhc3luY01ha2VIYW5kbGUoaGFuZGxlLCBuZXdPdXRwdXRPcGVyYXRpb24sICZvb3ApOworI2Vsc2UgLyogQVNZTkNfQ0FOX01PTklUT1JfSU8gKi8KKyAgbG9nVW5zdXBwb3J0ZWRGdW5jdGlvbigpOworICByZXR1cm4gMDsKKyNlbmRpZiAvKiBBU1lOQ19DQU5fTU9OSVRPUl9JTyAqLworfQorCisjaWZkZWYgX19NSU5HVzMyX18KK2ludAorYXN5bmNNb25pdG9yU29ja2V0SW5wdXQgKAorICBBc3luY0hhbmRsZSAqaGFuZGxlLAorICBTb2NrZXREZXNjcmlwdG9yIHNvY2tldERlc2NyaXB0b3IsCisgIEFzeW5jTW9uaXRvckNhbGxiYWNrICpjYWxsYmFjaywgdm9pZCAqZGF0YQorKSB7CisgIGxvZ1Vuc3VwcG9ydGVkRnVuY3Rpb24oKTsKKyAgcmV0dXJuIDA7Cit9CisKK2ludAorYXN5bmNNb25pdG9yU29ja2V0T3V0cHV0ICgKKyAgQXN5bmNIYW5kbGUgKmhhbmRsZSwKKyAgU29ja2V0RGVzY3JpcHRvciBzb2NrZXREZXNjcmlwdG9yLAorICBBc3luY01vbml0b3JDYWxsYmFjayAqY2FsbGJhY2ssIHZvaWQgKmRhdGEKKykgeworICBsb2dVbnN1cHBvcnRlZEZ1bmN0aW9uKCk7CisgIHJldHVybiAwOworfQorCitpbnQKK2FzeW5jTW9uaXRvclNvY2tldEFsZXJ0ICgKKyAgQXN5bmNIYW5kbGUgKmhhbmRsZSwKKyAgU29ja2V0RGVzY3JpcHRvciBzb2NrZXREZXNjcmlwdG9yLAorICBBc3luY01vbml0b3JDYWxsYmFjayAqY2FsbGJhY2ssIHZvaWQgKmRhdGEKKykgeworICBsb2dVbnN1cHBvcnRlZEZ1bmN0aW9uKCk7CisgIHJldHVybiAwOworfQorCitpbnQKK2FzeW5jUmVhZFNvY2tldCAoCisgIEFzeW5jSGFuZGxlICpoYW5kbGUsCisgIFNvY2tldERlc2NyaXB0b3Igc29ja2V0RGVzY3JpcHRvciwKKyAgc2l6ZV90IHNpemUsCisgIEFzeW5jSW5wdXRDYWxsYmFjayAqY2FsbGJhY2ssIHZvaWQgKmRhdGEKKykgeworICBsb2dVbnN1cHBvcnRlZEZ1bmN0aW9uKCk7CisgIHJldHVybiAwOworfQorCitpbnQKK2FzeW5jV3JpdGVTb2NrZXQgKAorICBBc3luY0hhbmRsZSAqaGFuZGxlLAorICBTb2NrZXREZXNjcmlwdG9yIHNvY2tldERlc2NyaXB0b3IsCisgIGNvbnN0IHZvaWQgKmJ1ZmZlciwgc2l6ZV90IHNpemUsCisgIEFzeW5jT3V0cHV0Q2FsbGJhY2sgKmNhbGxiYWNrLCB2b2lkICpkYXRhCispIHsKKyAgbG9nVW5zdXBwb3J0ZWRGdW5jdGlvbigpOworICByZXR1cm4gMDsKK30KKworI2Vsc2UgLyogX19NSU5HVzMyX18gKi8KK2ludAorYXN5bmNNb25pdG9yU29ja2V0SW5wdXQgKAorICBBc3luY0hhbmRsZSAqaGFuZGxlLAorICBTb2NrZXREZXNjcmlwdG9yIHNvY2tldERlc2NyaXB0b3IsCisgIEFzeW5jTW9uaXRvckNhbGxiYWNrICpjYWxsYmFjaywgdm9pZCAqZGF0YQorKSB7CisgIHJldHVybiBhc3luY01vbml0b3JGaWxlSW5wdXQoaGFuZGxlLCBzb2NrZXREZXNjcmlwdG9yLCBjYWxsYmFjaywgZGF0YSk7Cit9CisKK2ludAorYXN5bmNNb25pdG9yU29ja2V0T3V0cHV0ICgKKyAgQXN5bmNIYW5kbGUgKmhhbmRsZSwKKyAgU29ja2V0RGVzY3JpcHRvciBzb2NrZXREZXNjcmlwdG9yLAorICBBc3luY01vbml0b3JDYWxsYmFjayAqY2FsbGJhY2ssIHZvaWQgKmRhdGEKKykgeworICByZXR1cm4gYXN5bmNNb25pdG9yRmlsZU91dHB1dChoYW5kbGUsIHNvY2tldERlc2NyaXB0b3IsIGNhbGxiYWNrLCBkYXRhKTsKK30KKworaW50Cithc3luY01vbml0b3JTb2NrZXRBbGVydCAoCisgIEFzeW5jSGFuZGxlICpoYW5kbGUsCisgIFNvY2tldERlc2NyaXB0b3Igc29ja2V0RGVzY3JpcHRvciwKKyAgQXN5bmNNb25pdG9yQ2FsbGJhY2sgKmNhbGxiYWNrLCB2b2lkICpkYXRhCispIHsKKyAgcmV0dXJuIGFzeW5jTW9uaXRvckZpbGVBbGVydChoYW5kbGUsIHNvY2tldERlc2NyaXB0b3IsIGNhbGxiYWNrLCBkYXRhKTsKK30KKworaW50Cithc3luY1JlYWRTb2NrZXQgKAorICBBc3luY0hhbmRsZSAqaGFuZGxlLAorICBTb2NrZXREZXNjcmlwdG9yIHNvY2tldERlc2NyaXB0b3IsCisgIHNpemVfdCBzaXplLAorICBBc3luY0lucHV0Q2FsbGJhY2sgKmNhbGxiYWNrLCB2b2lkICpkYXRhCispIHsKKyAgcmV0dXJuIGFzeW5jUmVhZEZpbGUoaGFuZGxlLCBzb2NrZXREZXNjcmlwdG9yLCBzaXplLCBjYWxsYmFjaywgZGF0YSk7Cit9CisKK2ludAorYXN5bmNXcml0ZVNvY2tldCAoCisgIEFzeW5jSGFuZGxlICpoYW5kbGUsCisgIFNvY2tldERlc2NyaXB0b3Igc29ja2V0RGVzY3JpcHRvciwKKyAgY29uc3Qgdm9pZCAqYnVmZmVyLCBzaXplX3Qgc2l6ZSwKKyAgQXN5bmNPdXRwdXRDYWxsYmFjayAqY2FsbGJhY2ssIHZvaWQgKmRhdGEKKykgeworICByZXR1cm4gYXN5bmNXcml0ZUZpbGUoaGFuZGxlLCBzb2NrZXREZXNjcmlwdG9yLCBidWZmZXIsIHNpemUsIGNhbGxiYWNrLCBkYXRhKTsKK30KKyNlbmRpZiAvKiBfX01JTkdXMzJfXyAqLwpkaWZmIC0tZ2l0IGEvUHJvZ3JhbXMvYXN5bmNfc2lnbmFsLmMgYi9Qcm9ncmFtcy9hc3luY19zaWduYWwuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMTFmNGVmCi0tLSAvZGV2L251bGwKKysrIGIvUHJvZ3JhbXMvYXN5bmNfc2lnbmFsLmMKQEAgLTAsMCArMSw4MzQgQEAKKy8qCisgKiBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorICogICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorICoKKyAqIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorICoKKyAqIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyAqLworCisjaW5jbHVkZSAicHJvbG9ndWUuaCIKKworI2luY2x1ZGUgPHN0cmluZy5oPgorCisjaW5jbHVkZSAibG9nLmgiCisjaW5jbHVkZSAiYXN5bmNfZXZlbnQuaCIKKyNpbmNsdWRlICJhc3luY19zaWduYWwuaCIKKyNpbmNsdWRlICJhc3luY19pbnRlcm5hbC5oIgorI2luY2x1ZGUgImdldF90aHJlYWQuaCIKKworI2lmZGVmIEFTWU5DX0NBTl9IQU5ETEVfU0lHTkFMUworI2lmIGRlZmluZWQoSEFWRV9TWVNfU0lHTkFMRkRfSCkKKyNpbmNsdWRlIDxzeXMvc2lnbmFsZmQuaD4KKyNpbmNsdWRlICJhc3luY19pby5oIgorCisjZWxzZSAvKiBwYXJhZGlnbS1zcGVjaWZpYyBzaWduYWwgbW9uaXRvcmluZyBkZWZpbml0aW9ucyAqLworI2VuZGlmIC8qIHBhcmFkaWdtLXNwZWNpZmljIHNpZ25hbCBtb25pdG9yaW5nIGRlZmluaXRpb25zICovCisKK3N0cnVjdCBBc3luY1NpZ25hbERhdGFTdHJ1Y3QgeworI2lmZGVmIEFTWU5DX0NBTl9NT05JVE9SX1NJR05BTFMKKyAgUXVldWUgKnNpZ25hbFF1ZXVlOworI2VuZGlmIC8qIEFTWU5DX0NBTl9NT05JVE9SX1NJR05BTFMgKi8KKworI2lmZGVmIEFTWU5DX0NBTl9CTE9DS19TSUdOQUxTCisgIHNpZ3NldF90IG9idGFpbmFibGVTaWduYWxzOworI2VuZGlmIC8qIEFTWU5DX0NBTl9CTE9DS19TSUdOQUxTICovCisKKyNpZmRlZiBBU1lOQ19DQU5fT0JUQUlOX1NJR05BTFMKKyAgc2lnc2V0X3QgY2xhaW1lZFNpZ25hbHM7CisgIHNpZ3NldF90IG9idGFpbmVkU2lnbmFsczsKKworICBpbnQgZmlyc3RPYnRhaW5hYmxlU2lnbmFsOworICBpbnQgbGFzdE9idGFpbmFibGVTaWduYWw7CisjZW5kaWYgLyogQVNZTkNfQ0FOX09CVEFJTl9TSUdOQUxTICovCit9OworCit2b2lkCithc3luY0RlYWxsb2NhdGVTaWduYWxEYXRhIChBc3luY1NpZ25hbERhdGEgKnNkKSB7CisgIGlmIChzZCkgeworI2lmZGVmIEFTWU5DX0NBTl9NT05JVE9SX1NJR05BTFMKKyAgICBpZiAoc2QtPnNpZ25hbFF1ZXVlKSBkZWFsbG9jYXRlUXVldWUoc2QtPnNpZ25hbFF1ZXVlKTsKKyNlbmRpZiAvKiBBU1lOQ19DQU5fTU9OSVRPUl9TSUdOQUxTICovCisKKyAgICBmcmVlKHNkKTsKKyAgfQorfQorCisjaWYgZGVmaW5lZChBU1lOQ19DQU5fQkxPQ0tfU0lHTkFMUykgfHwgZGVmaW5lZChBU1lOQ19DQU5fTU9OSVRPUl9TSUdOQUxTKSB8fCBkZWZpbmVkKEFTWU5DX0NBTl9PQlRBSU5fU0lHTkFMUykKK3N0YXRpYyBBc3luY1NpZ25hbERhdGEgKgorZ2V0U2lnbmFsRGF0YSAodm9pZCkgeworICBBc3luY1RocmVhZFNwZWNpZmljRGF0YSAqdHNkID0gYXN5bmNHZXRUaHJlYWRTcGVjaWZpY0RhdGEoKTsKKyAgaWYgKCF0c2QpIHJldHVybiBOVUxMOworCisgIGlmICghdHNkLT5zaWduYWxEYXRhKSB7CisgICAgQXN5bmNTaWduYWxEYXRhICpzZDsKKworICAgIGlmICghKHNkID0gbWFsbG9jKHNpemVvZigqc2QpKSkpIHsKKyAgICAgIGxvZ01hbGxvY0Vycm9yKCk7CisgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICBtZW1zZXQoc2QsIDAsIHNpemVvZigqc2QpKTsKKworI2lmZGVmIEFTWU5DX0NBTl9NT05JVE9SX1NJR05BTFMKKyAgICBzZC0+c2lnbmFsUXVldWUgPSBOVUxMOworI2VuZGlmIC8qIEFTWU5DX0NBTl9NT05JVE9SX1NJR05BTFMgKi8KKworI2lmZGVmIEFTWU5DX0NBTl9CTE9DS19TSUdOQUxTCisgICAgc2lnZW1wdHlzZXQoJnNkLT5vYnRhaW5hYmxlU2lnbmFscyk7CisjZW5kaWYgLyogQVNZTkNfQ0FOX0JMT0NLX1NJR05BTFMgKi8KKworI2lmZGVmIEFTWU5DX0NBTl9PQlRBSU5fU0lHTkFMUworICAgIHNpZ2VtcHR5c2V0KCZzZC0+Y2xhaW1lZFNpZ25hbHMpOworICAgIHNpZ2VtcHR5c2V0KCZzZC0+b2J0YWluZWRTaWduYWxzKTsKKworICAgIHNkLT5maXJzdE9idGFpbmFibGVTaWduYWwgPSBTSUdSVE1JTjsKKyAgICBzZC0+bGFzdE9idGFpbmFibGVTaWduYWwgPSBTSUdSVE1BWDsKKworI2lmZGVmIEFTWU5DX0NBTl9CTE9DS19TSUdOQUxTCisgICAgeworICAgICAgaW50IHNpZ25hbE51bWJlcjsKKworICAgICAgZm9yIChzaWduYWxOdW1iZXI9c2QtPmZpcnN0T2J0YWluYWJsZVNpZ25hbDsgc2lnbmFsTnVtYmVyPD1zZC0+bGFzdE9idGFpbmFibGVTaWduYWw7IHNpZ25hbE51bWJlcis9MSkgeworICAgICAgICBzaWdhZGRzZXQoJnNkLT5vYnRhaW5hYmxlU2lnbmFscywgc2lnbmFsTnVtYmVyKTsKKyAgICAgIH0KKyAgICB9CisjZW5kaWYgLyogQVNZTkNfQ0FOX0JMT0NLX1NJR05BTFMgKi8KKyNlbmRpZiAvKiBBU1lOQ19DQU5fT0JUQUlOX1NJR05BTFMgKi8KKworICAgIHRzZC0+c2lnbmFsRGF0YSA9IHNkOworICB9CisKKyAgcmV0dXJuIHRzZC0+c2lnbmFsRGF0YTsKK30KKyNlbmRpZiAvKiBuZWVkIHNpZ25hbCBkYXRhICovCisKK2ludAorYXN5bmNIYW5kbGVTaWduYWwgKGludCBzaWduYWxOdW1iZXIsIEFzeW5jU2lnbmFsSGFuZGxlciAqbmV3SGFuZGxlciwgQXN5bmNTaWduYWxIYW5kbGVyICoqb2xkSGFuZGxlcikgeworI2lmIGRlZmluZWQoSEFWRV9TSUdBQ1RJT04pCisgIHN0cnVjdCBzaWdhY3Rpb24gbmV3QWN0aW9uOworICBzdHJ1Y3Qgc2lnYWN0aW9uIG9sZEFjdGlvbjsKKworICBtZW1zZXQoJm5ld0FjdGlvbiwgMCwgc2l6ZW9mKG5ld0FjdGlvbikpOworICBzaWdlbXB0eXNldCgmbmV3QWN0aW9uLnNhX21hc2spOworICBuZXdBY3Rpb24uc2FfaGFuZGxlciA9IG5ld0hhbmRsZXI7CisKKyAgaWYgKHNpZ2FjdGlvbihzaWduYWxOdW1iZXIsICZuZXdBY3Rpb24sICZvbGRBY3Rpb24pICE9IC0xKSB7CisgICAgaWYgKG9sZEhhbmRsZXIpICpvbGRIYW5kbGVyID0gb2xkQWN0aW9uLnNhX2hhbmRsZXI7CisgICAgcmV0dXJuIDE7CisgIH0KKworICBsb2dTeXN0ZW1FcnJvcigic2lnYWN0aW9uIik7CisjZWxzZSAvKiBzZXQgc2lnbmFsIGhhbmRsZXIgKi8KKyAgQXN5bmNTaWduYWxIYW5kbGVyICpyZXN1bHQgPSBzaWduYWwoc2lnbmFsTnVtYmVyLCBuZXdIYW5kbGVyKTsKKworICBpZiAocmVzdWx0ICE9IFNJR19FUlIpIHsKKyAgICBpZiAob2xkSGFuZGxlcikgKm9sZEhhbmRsZXIgPSByZXN1bHQ7CisgICAgcmV0dXJuIDE7CisgIH0KKworICBsb2dTeXN0ZW1FcnJvcigic2lnbmFsIik7CisjZW5kaWYgLyogc2V0IHNpZ25hbCBoYW5kbGVyICovCisKKyAgcmV0dXJuIDA7Cit9CisKK2ludAorYXN5bmNJZ25vcmVTaWduYWwgKGludCBzaWduYWxOdW1iZXIsIEFzeW5jU2lnbmFsSGFuZGxlciAqKm9sZEhhbmRsZXIpIHsKKyAgcmV0dXJuIGFzeW5jSGFuZGxlU2lnbmFsKHNpZ25hbE51bWJlciwgU0lHX0lHTiwgb2xkSGFuZGxlcik7Cit9CisKK2ludAorYXN5bmNSZXZlcnRTaWduYWwgKGludCBzaWduYWxOdW1iZXIsIEFzeW5jU2lnbmFsSGFuZGxlciAqKm9sZEhhbmRsZXIpIHsKKyAgcmV0dXJuIGFzeW5jSGFuZGxlU2lnbmFsKHNpZ25hbE51bWJlciwgU0lHX0RGTCwgb2xkSGFuZGxlcik7Cit9CisKK0FTWU5DX1NJR05BTF9IQU5ETEVSKGFzeW5jRW1wdHlTaWduYWxIYW5kbGVyKSB7Cit9CisKKyNpZmRlZiBBU1lOQ19DQU5fQkxPQ0tfU0lHTkFMUworc3RhdGljIGludAorc2V0U2lnbmFsTWFzayAoaW50IGhvdywgY29uc3Qgc2lnc2V0X3QgKm5ld01hc2ssIHNpZ3NldF90ICpvbGRNYXNrKSB7CisjaWZkZWYgR09UX1BUSFJFQURTCisgIGludCBlcnJvciA9IHB0aHJlYWRfc2lnbWFzayhob3csIG5ld01hc2ssIG9sZE1hc2spOworCisgIGlmICghZXJyb3IpIHJldHVybiAxOworICBsb2dBY3Rpb25FcnJvcihlcnJvciwgInB0aHJlYWRfc2V0bWFzayIpOworI2Vsc2UgLyogR09UX1BUSFJFQURTICovCisgIGlmIChzaWdwcm9jbWFzayhob3csIG5ld01hc2ssIG9sZE1hc2spICE9IC0xKSByZXR1cm4gMTsKKyAgbG9nU3lzdGVtRXJyb3IoInNpZ3Byb2NtYXNrIik7CisjZW5kaWYgLyogR09UX1BUSFJFQURTICovCisKKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK21ha2VTaWduYWxNYXNrIChzaWdzZXRfdCAqc2lnbmFsTWFzaywgaW50IHNpZ25hbE51bWJlcikgeworICBpZiAoc2lnZW1wdHlzZXQoc2lnbmFsTWFzaykgIT0gLTEpIHsKKyAgICBpZiAoc2lnYWRkc2V0KHNpZ25hbE1hc2ssIHNpZ25hbE51bWJlcikgIT0gLTEpIHsKKyAgICAgIHJldHVybiAxOworICAgIH0gZWxzZSB7CisgICAgICBsb2dTeXN0ZW1FcnJvcigic2lnYWRkc2V0Iik7CisgICAgfQorICB9IGVsc2UgeworICAgIGxvZ1N5c3RlbUVycm9yKCJzaWdlbXB0eXNldCIpOworICB9CisKKyAgcmV0dXJuIDA7Cit9CisKK2ludAorYXN5bmNTZXRTaWduYWxCbG9ja2VkIChpbnQgc2lnbmFsTnVtYmVyLCBpbnQgc3RhdGUpIHsKKyAgc2lnc2V0X3QgbWFzazsKKworICBpZiAobWFrZVNpZ25hbE1hc2soJm1hc2ssIHNpZ25hbE51bWJlcikpIHsKKyAgICBpZiAoc2V0U2lnbmFsTWFzaygoc3RhdGU/IFNJR19CTE9DSzogU0lHX1VOQkxPQ0spLCAmbWFzaywgTlVMTCkpIHsKKyAgICAgIHJldHVybiAxOworICAgIH0KKyAgfQorCisgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50CitnZXRTaWduYWxNYXNrIChzaWdzZXRfdCAqbWFzaykgeworICByZXR1cm4gc2V0U2lnbmFsTWFzayhTSUdfU0VUTUFTSywgTlVMTCwgbWFzayk7Cit9CisKK2ludAorYXN5bmNJc1NpZ25hbEJsb2NrZWQgKGludCBzaWduYWxOdW1iZXIpIHsKKyAgc2lnc2V0X3Qgc2lnbmFsTWFzazsKKworICBpZiAoZ2V0U2lnbmFsTWFzaygmc2lnbmFsTWFzaykpIHsKKyAgICBpbnQgcmVzdWx0ID0gc2lnaXNtZW1iZXIoJnNpZ25hbE1hc2ssIHNpZ25hbE51bWJlcik7CisKKyAgICBpZiAocmVzdWx0ICE9IC0xKSByZXR1cm4gcmVzdWx0OworICAgIGxvZ1N5c3RlbUVycm9yKCJzaWdpc21lbWJlciIpOworICB9CisKKyAgcmV0dXJuIDA7Cit9CisKK2ludAorYXN5bmNXaXRoU2lnbmFsc0Jsb2NrZWQgKAorICBjb25zdCBzaWdzZXRfdCAqbWFzaywKKyAgQXN5bmNXaXRoU2lnbmFsc0Jsb2NrZWRGdW5jdGlvbiAqZnVuY3Rpb24sCisgIHZvaWQgKmRhdGEKKykgeworICBzaWdzZXRfdCBvbGRNYXNrOworCisgIGlmIChzZXRTaWduYWxNYXNrKFNJR19CTE9DSywgbWFzaywgJm9sZE1hc2spKSB7CisgICAgZnVuY3Rpb24oZGF0YSk7CisgICAgc2V0U2lnbmFsTWFzayhTSUdfU0VUTUFTSywgJm9sZE1hc2ssIE5VTEwpOworICAgIHJldHVybiAxOworICB9CisKKyAgcmV0dXJuIDA7Cit9CisKK2ludAorYXN5bmNXaXRoU2lnbmFsQmxvY2tlZCAoCisgIGludCBudW1iZXIsCisgIEFzeW5jV2l0aFNpZ25hbHNCbG9ja2VkRnVuY3Rpb24gKmZ1bmN0aW9uLAorICB2b2lkICpkYXRhCispIHsKKyAgc2lnc2V0X3QgbWFzazsKKworICBpZiAobWFrZVNpZ25hbE1hc2soJm1hc2ssIG51bWJlcikpIHsKKyAgICBpZiAoYXN5bmNXaXRoU2lnbmFsc0Jsb2NrZWQoJm1hc2ssIGZ1bmN0aW9uLCBkYXRhKSkgeworICAgICAgcmV0dXJuIDE7CisgICAgfQorICB9CisKKyAgcmV0dXJuIDA7Cit9CisKK2ludAorYXN5bmNXaXRoQWxsU2lnbmFsc0Jsb2NrZWQgKAorICBBc3luY1dpdGhTaWduYWxzQmxvY2tlZEZ1bmN0aW9uICpmdW5jdGlvbiwKKyAgdm9pZCAqZGF0YQorKSB7CisgIHNpZ3NldF90IG1hc2s7CisKKyAgaWYgKHNpZ2ZpbGxzZXQoJm1hc2spICE9IC0xKSB7CisgICAgaWYgKGFzeW5jV2l0aFNpZ25hbHNCbG9ja2VkKCZtYXNrLCBmdW5jdGlvbiwgZGF0YSkpIHsKKyAgICAgIHJldHVybiAxOworICAgIH0KKyAgfSBlbHNlIHsKKyAgICBsb2dTeXN0ZW1FcnJvcigic2lnZmlsbHNldCIpOworICB9CisKKyAgcmV0dXJuIDA7Cit9CisKK2ludAorYXN5bmNXaXRoT2J0YWluYWJsZVNpZ25hbHNCbG9ja2VkICgKKyAgQXN5bmNXaXRoU2lnbmFsc0Jsb2NrZWRGdW5jdGlvbiAqZnVuY3Rpb24sCisgIHZvaWQgKmRhdGEKKykgeworICBBc3luY1NpZ25hbERhdGEgKnNkID0gZ2V0U2lnbmFsRGF0YSgpOworCisgIGlmIChzZCkgeworICAgIGlmIChhc3luY1dpdGhTaWduYWxzQmxvY2tlZCgmc2QtPm9idGFpbmFibGVTaWduYWxzLCBmdW5jdGlvbiwgZGF0YSkpIHsKKyAgICAgIHJldHVybiAxOworICAgIH0KKyAgfQorCisgIHJldHVybiAwOworfQorCitpbnQKK2FzeW5jQmxvY2tPYnRhaW5hYmxlU2lnbmFscyAodm9pZCkgeworICBBc3luY1NpZ25hbERhdGEgKnNkID0gZ2V0U2lnbmFsRGF0YSgpOworCisgIGlmIChzZCkgeworICAgIGlmIChzZXRTaWduYWxNYXNrKFNJR19CTE9DSywgJnNkLT5vYnRhaW5hYmxlU2lnbmFscywgTlVMTCkpIHsKKyAgICAgIHJldHVybiAxOworICAgIH0KKyAgfQorCisgIHJldHVybiAwOworfQorI2VuZGlmIC8qIEFTWU5DX0NBTl9CTE9DS19TSUdOQUxTICovCisKKyNpZmRlZiBBU1lOQ19DQU5fTU9OSVRPUl9TSUdOQUxTCit0eXBlZGVmIHN0cnVjdCB7CisgIGludCBudW1iZXI7CisgIFF1ZXVlICptb25pdG9yczsKKyAgdW5zaWduZWQgd2FzQmxvY2tlZDoxOworCisjaWYgZGVmaW5lZChIQVZFX1NZU19TSUdOQUxGRF9IKQorICBzdHJ1Y3QgeworICAgIGludCBmaWxlRGVzY3JpcHRvcjsKKyAgICBBc3luY0hhbmRsZSBhc3luY01vbml0b3I7CisgIH0gc2lnbmFsZmQ7CisKKyNlbHNlIC8qIHBhcmFkaWdtLXNwZWNpZmljIHNpZ25hbCBtb25pdG9yaW5nIGZpZWxkcyAqLworICBzdHJ1Y3QgeworICAgIEFzeW5jRXZlbnQgKmV2ZW50OworICAgIEFzeW5jU2lnbmFsSGFuZGxlciAqb2xkOworICB9IGhhbmRsZXI7CisjZW5kaWYgLyogcGFyYWRpZ20tc3BlY2lmaWMgc2lnbmFsIG1vbml0b3JpbmcgZmllbGRzICovCit9IFNpZ25hbEVudHJ5OworCit0eXBlZGVmIHN0cnVjdCB7CisgIFNpZ25hbEVudHJ5ICpzaWduYWw7CisgIEFzeW5jU2lnbmFsQ2FsbGJhY2sgKmNhbGxiYWNrOworICB2b2lkICpkYXRhOworICB1bnNpZ25lZCBhY3RpdmU6MTsKKyAgdW5zaWduZWQgZGVsZXRlOjE7Cit9IE1vbml0b3JFbnRyeTsKKworI2lmIGRlZmluZWQoSEFWRV9TWVNfU0lHTkFMRkRfSCkKK3N0YXRpYyB2b2lkCitsb2dTaWduYWxmZEFjdGlvbiAoY29uc3QgU2lnbmFsRW50cnkgKnNpZywgY29uc3QgY2hhciAqYWN0aW9uKSB7CisgIGxvZ01lc3NhZ2UoTE9HX0NBVEVHT1JZKEFTWU5DX0VWRU5UUyksICIlcyBzaWduYWxmZCBtb25pdG9yOiBzaWc9JWQgZmQ9JWQiLAorICAgICAgICAgICAgIGFjdGlvbiwgc2lnLT5udW1iZXIsIHNpZy0+c2lnbmFsZmQuZmlsZURlc2NyaXB0b3IpOworfQorCitzdGF0aWMgdm9pZAoraW5pdGlhbGl6ZVNpZ25hbGZkRmlsZURlc2NyaXB0b3IgKFNpZ25hbEVudHJ5ICpzaWcpIHsKKyAgc2lnLT5zaWduYWxmZC5maWxlRGVzY3JpcHRvciA9IC0xOworfQorCitzdGF0aWMgdm9pZAoraW5pdGlhbGl6ZVNpZ25hbGZkQXN5bmNNb25pdG9yIChTaWduYWxFbnRyeSAqc2lnKSB7CisgIHNpZy0+c2lnbmFsZmQuYXN5bmNNb25pdG9yID0gTlVMTDsKK30KKworc3RhdGljIHZvaWQKK2luaXRpYWxpemVTaWduYWxNb25pdG9yaW5nIChTaWduYWxFbnRyeSAqc2lnKSB7CisgIGluaXRpYWxpemVTaWduYWxmZEZpbGVEZXNjcmlwdG9yKHNpZyk7CisgIGluaXRpYWxpemVTaWduYWxmZEFzeW5jTW9uaXRvcihzaWcpOworfQorCitzdGF0aWMgdm9pZAorY2xvc2VTaWduYWxmZEZpbGVEZXNjcmlwdG9yIChTaWduYWxFbnRyeSAqc2lnKSB7CisgIHN0cnVjdCBzaWduYWxmZF9zaWdpbmZvIGJ1ZmZlcjsKKworICB3aGlsZSAocmVhZChzaWctPnNpZ25hbGZkLmZpbGVEZXNjcmlwdG9yLCAmYnVmZmVyLCBzaXplb2YoYnVmZmVyKSkgIT0gLTEpOworICBjbG9zZShzaWctPnNpZ25hbGZkLmZpbGVEZXNjcmlwdG9yKTsKKyAgaW5pdGlhbGl6ZVNpZ25hbGZkRmlsZURlc2NyaXB0b3Ioc2lnKTsKK30KKworc3RhdGljIHZvaWQKK2NhbmNlbFNpZ25hbGZkQXN5bmNNb25pdG9yIChTaWduYWxFbnRyeSAqc2lnKSB7CisgIGFzeW5jQ2FuY2VsUmVxdWVzdChzaWctPnNpZ25hbGZkLmFzeW5jTW9uaXRvcik7CisgIGluaXRpYWxpemVTaWduYWxmZEFzeW5jTW9uaXRvcihzaWcpOworfQorCitzdGF0aWMgdm9pZAorZGVhY3RpdmF0ZVNpZ25hbE1vbml0b3JpbmcgKFNpZ25hbEVudHJ5ICpzaWcpIHsKKyAgbG9nU2lnbmFsZmRBY3Rpb24oc2lnLCAiZGVzdHJveWluZyIpOworICBjYW5jZWxTaWduYWxmZEFzeW5jTW9uaXRvcihzaWcpOworICBjbG9zZVNpZ25hbGZkRmlsZURlc2NyaXB0b3Ioc2lnKTsKK30KKworI2Vsc2UgLyogcGFyYWRpZ20tc3BlY2lmaWMgc2lnbmFsIG1vbml0b3JpbmcgZnVuY3Rpb25zICovCitzdGF0aWMgdm9pZAoraW5pdGlhbGl6ZUhhbmRsZXJFdmVudCAoU2lnbmFsRW50cnkgKnNpZykgeworICBzaWctPmhhbmRsZXIuZXZlbnQgPSBOVUxMOworfQorCitzdGF0aWMgdm9pZAoraW5pdGlhbGl6ZU9sZEhhbmRsZXIgKFNpZ25hbEVudHJ5ICpzaWcpIHsKKyAgc2lnLT5oYW5kbGVyLm9sZCA9IE5VTEw7Cit9CisKK3N0YXRpYyB2b2lkCitpbml0aWFsaXplU2lnbmFsTW9uaXRvcmluZyAoU2lnbmFsRW50cnkgKnNpZykgeworICBpbml0aWFsaXplSGFuZGxlckV2ZW50KHNpZyk7CisgIGluaXRpYWxpemVPbGRIYW5kbGVyKHNpZyk7Cit9CisKK3N0YXRpYyB2b2lkCitkaXNjYXJkSGFuZGxlckV2ZW50IChTaWduYWxFbnRyeSAqc2lnKSB7CisgIGFzeW5jRGlzY2FyZEV2ZW50KHNpZy0+aGFuZGxlci5ldmVudCk7CisgIGluaXRpYWxpemVIYW5kbGVyRXZlbnQoc2lnKTsKK30KKworc3RhdGljIHZvaWQKK3Jlc3RvcmVPbGRIYW5kbGVyIChTaWduYWxFbnRyeSAqc2lnKSB7CisgIGFzeW5jSGFuZGxlU2lnbmFsKHNpZy0+bnVtYmVyLCBzaWctPmhhbmRsZXIub2xkLCBOVUxMKTsKKyAgaW5pdGlhbGl6ZU9sZEhhbmRsZXIoc2lnKTsKK30KKworc3RhdGljIHZvaWQKK2RlYWN0aXZhdGVTaWduYWxNb25pdG9yaW5nIChTaWduYWxFbnRyeSAqc2lnKSB7CisgIHJlc3RvcmVPbGRIYW5kbGVyKHNpZyk7CisgIGRpc2NhcmRIYW5kbGVyRXZlbnQoc2lnKTsKK30KKyNlbmRpZiAvKiBwYXJhZGlnbS1zcGVjaWZpYyBzaWduYWwgbW9uaXRvcmluZyBmdW5jdGlvbnMgKi8KKworc3RhdGljIHZvaWQKK2RlYWxsb2NhdGVNb25pdG9yRW50cnkgKHZvaWQgKml0ZW0sIHZvaWQgKmRhdGEpIHsKKyAgTW9uaXRvckVudHJ5ICptb24gPSBpdGVtOworCisgIGZyZWUobW9uKTsKK30KKworc3RhdGljIHZvaWQKK2RlYWxsb2NhdGVTaWduYWxFbnRyeSAodm9pZCAqaXRlbSwgdm9pZCAqZGF0YSkgeworICBTaWduYWxFbnRyeSAqc2lnID0gaXRlbTsKKworICBkZWFsbG9jYXRlUXVldWUoc2lnLT5tb25pdG9ycyk7CisgIGZyZWUoc2lnKTsKK30KKworc3RhdGljIFF1ZXVlICoKK2dldFNpZ25hbFF1ZXVlIChpbnQgY3JlYXRlKSB7CisgIEFzeW5jU2lnbmFsRGF0YSAqc2QgPSBnZXRTaWduYWxEYXRhKCk7CisgIGlmICghc2QpIHJldHVybiBOVUxMOworCisgIGlmICghc2QtPnNpZ25hbFF1ZXVlICYmIGNyZWF0ZSkgeworICAgIHNkLT5zaWduYWxRdWV1ZSA9IG5ld1F1ZXVlKGRlYWxsb2NhdGVTaWduYWxFbnRyeSwgTlVMTCk7CisgIH0KKworICByZXR1cm4gc2QtPnNpZ25hbFF1ZXVlOworfQorCit0eXBlZGVmIHN0cnVjdCB7CisgIFNpZ25hbEVudHJ5ICpjb25zdCBzaWduYWxFbnRyeTsKK30gRGVsZXRlU2lnbmFsRW50cnlQYXJhbWV0ZXJzOworCitBU1lOQ19XSVRIX1NJR05BTFNfQkxPQ0tFRF9GVU5DVElPTihhc3luY0RlbGV0ZVNpZ25hbEVudHJ5KSB7CisgIERlbGV0ZVNpZ25hbEVudHJ5UGFyYW1ldGVycyAqcGFyYW1ldGVycyA9IGRhdGE7CisgIFF1ZXVlICpzaWduYWxzID0gZ2V0U2lnbmFsUXVldWUoMCk7CisgIEVsZW1lbnQgKnNpZ25hbEVsZW1lbnQgPSBmaW5kRWxlbWVudFdpdGhJdGVtKHNpZ25hbHMsIHBhcmFtZXRlcnMtPnNpZ25hbEVudHJ5KTsKKworICBkZWxldGVFbGVtZW50KHNpZ25hbEVsZW1lbnQpOworfQorCitzdGF0aWMgdm9pZAorZGVsZXRlTW9uaXRvciAoRWxlbWVudCAqbW9uaXRvckVsZW1lbnQpIHsKKyAgTW9uaXRvckVudHJ5ICptb24gPSBnZXRFbGVtZW50SXRlbShtb25pdG9yRWxlbWVudCk7CisgIFNpZ25hbEVudHJ5ICpzaWcgPSBtb24tPnNpZ25hbDsKKworICBsb2dTeW1ib2woTE9HX0NBVEVHT1JZKEFTWU5DX0VWRU5UUyksIG1vbi0+Y2FsbGJhY2ssICJzaWduYWwgbW9uaXRvciByZW1vdmVkOiAlZCIsIHNpZy0+bnVtYmVyKTsKKyAgZGVsZXRlRWxlbWVudChtb25pdG9yRWxlbWVudCk7CisKKyAgaWYgKGdldFF1ZXVlU2l6ZShzaWctPm1vbml0b3JzKSA9PSAwKSB7CisgICAgbG9nTWVzc2FnZShMT0dfQ0FURUdPUlkoQVNZTkNfRVZFTlRTKSwgImRlYWN0aXZhdGluZyBzaWduYWwgbW9uaXRvcmluZzogJWQiLCBzaWctPm51bWJlcik7CisgICAgYXN5bmNTZXRTaWduYWxCbG9ja2VkKHNpZy0+bnVtYmVyLCBzaWctPndhc0Jsb2NrZWQpOworICAgIGRlYWN0aXZhdGVTaWduYWxNb25pdG9yaW5nKHNpZyk7CisKKyAgICB7CisgICAgICBEZWxldGVTaWduYWxFbnRyeVBhcmFtZXRlcnMgcGFyYW1ldGVycyA9IHsKKyAgICAgICAgLnNpZ25hbEVudHJ5ID0gc2lnCisgICAgICB9OworCisgICAgICBhc3luY1dpdGhBbGxTaWduYWxzQmxvY2tlZChhc3luY0RlbGV0ZVNpZ25hbEVudHJ5LCAmcGFyYW1ldGVycyk7CisgICAgfQorICB9Cit9CisKK3N0YXRpYyB2b2lkCitjYW5jZWxNb25pdG9yIChFbGVtZW50ICptb25pdG9yRWxlbWVudCkgeworICBNb25pdG9yRW50cnkgKm1vbiA9IGdldEVsZW1lbnRJdGVtKG1vbml0b3JFbGVtZW50KTsKKworICBpZiAobW9uLT5hY3RpdmUpIHsKKyAgICBtb24tPmRlbGV0ZSA9IDE7CisgIH0gZWxzZSB7CisgICAgZGVsZXRlTW9uaXRvcihtb25pdG9yRWxlbWVudCk7CisgIH0KK30KKworc3RhdGljIHZvaWQKK2hhbmRsZVBlbmRpbmdTaWduYWwgKGNvbnN0IFNpZ25hbEVudHJ5ICpzaWcpIHsKKyAgRWxlbWVudCAqbW9uaXRvckVsZW1lbnQgPSBnZXRTdGFja0hlYWQoc2lnLT5tb25pdG9ycyk7CisKKyAgaWYgKG1vbml0b3JFbGVtZW50KSB7CisgICAgTW9uaXRvckVudHJ5ICptb24gPSBnZXRFbGVtZW50SXRlbShtb25pdG9yRWxlbWVudCk7CisgICAgQXN5bmNTaWduYWxDYWxsYmFjayAqY2FsbGJhY2sgPSBtb24tPmNhbGxiYWNrOworCisgICAgY29uc3QgQXN5bmNTaWduYWxDYWxsYmFja1BhcmFtZXRlcnMgcGFyYW1ldGVycyA9IHsKKyAgICAgIC5zaWduYWwgPSBzaWctPm51bWJlciwKKyAgICAgIC5kYXRhID0gbW9uLT5kYXRhCisgICAgfTsKKworICAgIGxvZ1N5bWJvbChMT0dfQ0FURUdPUlkoQVNZTkNfRVZFTlRTKSwgY2FsbGJhY2ssICJzaWduYWwgJWQgc3RhcnRpbmciLCBzaWctPm51bWJlcik7CisgICAgbW9uLT5hY3RpdmUgPSAxOworICAgIGlmICghY2FsbGJhY2soJnBhcmFtZXRlcnMpKSBtb24tPmRlbGV0ZSA9IDE7CisgICAgbW9uLT5hY3RpdmUgPSAwOworICAgIGxvZ1N5bWJvbChMT0dfQ0FURUdPUlkoQVNZTkNfRVZFTlRTKSwgY2FsbGJhY2ssICJzaWduYWwgJWQgZmluaXNoZWQiLCBzaWctPm51bWJlcik7CisgICAgaWYgKG1vbi0+ZGVsZXRlKSBkZWxldGVNb25pdG9yKG1vbml0b3JFbGVtZW50KTsKKyAgfQorfQorCit0eXBlZGVmIHN0cnVjdCB7CisgIFF1ZXVlICpjb25zdCBzaWduYWxRdWV1ZTsKKyAgU2lnbmFsRW50cnkgKmNvbnN0IHNpZ25hbEVudHJ5OworCisgIEVsZW1lbnQgKnNpZ25hbEVsZW1lbnQ7Cit9IEFkZFNpZ25hbEVudHJ5UGFyYW1ldGVyczsKKworQVNZTkNfV0lUSF9TSUdOQUxTX0JMT0NLRURfRlVOQ1RJT04oYXN5bmNBZGRTaWduYWxFbnRyeSkgeworICBBZGRTaWduYWxFbnRyeVBhcmFtZXRlcnMgKnBhcmFtZXRlcnMgPSBkYXRhOworCisgIHBhcmFtZXRlcnMtPnNpZ25hbEVsZW1lbnQgPSBlbnF1ZXVlSXRlbShwYXJhbWV0ZXJzLT5zaWduYWxRdWV1ZSwgcGFyYW1ldGVycy0+c2lnbmFsRW50cnkpOworfQorCit0eXBlZGVmIHN0cnVjdCB7CisgIGludCBzaWduYWxOdW1iZXI7Cit9IFRlc3RNb25pdG9yZWRTaWduYWxLZXk7CisKK3N0YXRpYyBpbnQKK3Rlc3RNb25pdG9yZWRTaWduYWwgKGNvbnN0IHZvaWQgKml0ZW0sIHZvaWQgKmRhdGEpIHsKKyAgY29uc3QgU2lnbmFsRW50cnkgKnNpZyA9IGl0ZW07CisgIGNvbnN0IFRlc3RNb25pdG9yZWRTaWduYWxLZXkgKmtleSA9IGRhdGE7CisKKyAgcmV0dXJuIHNpZy0+bnVtYmVyID09IGtleS0+c2lnbmFsTnVtYmVyOworfQorCitzdGF0aWMgRWxlbWVudCAqCitnZXRTaWduYWxFbGVtZW50IChpbnQgc2lnbmFsTnVtYmVyLCBpbnQgY3JlYXRlKSB7CisgIFF1ZXVlICpzaWduYWxzID0gZ2V0U2lnbmFsUXVldWUoY3JlYXRlKTsKKworICBpZiAoc2lnbmFscykgeworICAgIHsKKyAgICAgIFRlc3RNb25pdG9yZWRTaWduYWxLZXkga2V5ID0geworICAgICAgICAuc2lnbmFsTnVtYmVyID0gc2lnbmFsTnVtYmVyCisgICAgICB9OworCisgICAgICB7CisgICAgICAgIEVsZW1lbnQgKmVsZW1lbnQgPSBmaW5kRWxlbWVudChzaWduYWxzLCB0ZXN0TW9uaXRvcmVkU2lnbmFsLCAma2V5KTsKKworICAgICAgICBpZiAoZWxlbWVudCkgcmV0dXJuIGVsZW1lbnQ7CisgICAgICB9CisgICAgfQorCisgICAgaWYgKGNyZWF0ZSkgeworICAgICAgU2lnbmFsRW50cnkgKnNpZzsKKworICAgICAgaWYgKChzaWcgPSBtYWxsb2Moc2l6ZW9mKCpzaWcpKSkpIHsKKyAgICAgICAgbWVtc2V0KHNpZywgMCwgc2l6ZW9mKCpzaWcpKTsKKyAgICAgICAgc2lnLT5udW1iZXIgPSBzaWduYWxOdW1iZXI7CisgICAgICAgIGluaXRpYWxpemVTaWduYWxNb25pdG9yaW5nKHNpZyk7CisKKyAgICAgICAgaWYgKChzaWctPm1vbml0b3JzID0gbmV3UXVldWUoZGVhbGxvY2F0ZU1vbml0b3JFbnRyeSwgTlVMTCkpKSB7CisgICAgICAgICAgeworICAgICAgICAgICAgc3RhdGljIEFzeW5jUXVldWVNZXRob2RzIG1ldGhvZHMgPSB7CisgICAgICAgICAgICAgIC5jYW5jZWxSZXF1ZXN0ID0gY2FuY2VsTW9uaXRvcgorICAgICAgICAgICAgfTsKKworICAgICAgICAgICAgc2V0UXVldWVEYXRhKHNpZy0+bW9uaXRvcnMsICZtZXRob2RzKTsKKyAgICAgICAgICB9CisKKyAgICAgICAgICB7CisgICAgICAgICAgICBBZGRTaWduYWxFbnRyeVBhcmFtZXRlcnMgcGFyYW1ldGVycyA9IHsKKyAgICAgICAgICAgICAgLnNpZ25hbFF1ZXVlID0gc2lnbmFscywKKyAgICAgICAgICAgICAgLnNpZ25hbEVudHJ5ID0gc2lnLAorCisgICAgICAgICAgICAgIC5zaWduYWxFbGVtZW50ID0gTlVMTAorICAgICAgICAgICAgfTsKKworICAgICAgICAgICAgYXN5bmNXaXRoQWxsU2lnbmFsc0Jsb2NrZWQoYXN5bmNBZGRTaWduYWxFbnRyeSwgJnBhcmFtZXRlcnMpOworICAgICAgICAgICAgaWYgKHBhcmFtZXRlcnMuc2lnbmFsRWxlbWVudCkgcmV0dXJuIHBhcmFtZXRlcnMuc2lnbmFsRWxlbWVudDsKKyAgICAgICAgICB9CisKKyAgICAgICAgICBkZWFsbG9jYXRlUXVldWUoc2lnLT5tb25pdG9ycyk7CisgICAgICAgIH0KKworICAgICAgICBmcmVlKHNpZyk7CisgICAgICB9IGVsc2UgeworICAgICAgICBsb2dNYWxsb2NFcnJvcigpOworICAgICAgfQorICAgIH0KKyAgfQorCisgIHJldHVybiBOVUxMOworfQorCisjaWYgZGVmaW5lZChIQVZFX1NZU19TSUdOQUxGRF9IKQorQVNZTkNfSU5QVVRfQ0FMTEJBQ0soYXN5bmNIYW5kbGVTaWduYWxmZElucHV0KSB7CisgIHN0YXRpYyBjb25zdCBjaGFyIGxhYmVsW10gPSAic2lnbmFsZmQiOworICBjb25zdCBTaWduYWxFbnRyeSAqc2lnID0gcGFyYW1ldGVycy0+ZGF0YTsKKworICBpZiAocGFyYW1ldGVycy0+ZXJyb3IpIHsKKyAgICBsb2dNZXNzYWdlKExPR19XQVJOSU5HLCAiJXMgcmVhZCBlcnJvcjogZmQ9JWQgc2lnPSVkOiAlcyIsCisgICAgICAgICAgICAgICBsYWJlbCwgc2lnLT5zaWduYWxmZC5maWxlRGVzY3JpcHRvciwgc2lnLT5udW1iZXIsIHN0cmVycm9yKHBhcmFtZXRlcnMtPmVycm9yKSk7CisgIH0gZWxzZSBpZiAocGFyYW1ldGVycy0+ZW5kKSB7CisgICAgbG9nTWVzc2FnZShMT0dfV0FSTklORywgIiVzIGVuZC1vZi1maWxlOiBmZD0lZCBzaWc9JWQiLAorICAgICAgICAgICAgICAgbGFiZWwsIHNpZy0+c2lnbmFsZmQuZmlsZURlc2NyaXB0b3IsIHNpZy0+bnVtYmVyKTsKKyAgfSBlbHNlIHsKKyAgICBjb25zdCBzdHJ1Y3Qgc2lnbmFsZmRfc2lnaW5mbyAqaW5mbyA9IHBhcmFtZXRlcnMtPmJ1ZmZlcjsKKworICAgIGhhbmRsZVBlbmRpbmdTaWduYWwoc2lnKTsKKyAgICByZXR1cm4gc2l6ZW9mKCppbmZvKTsKKyAgfQorCisgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50CithY3RpdmF0ZVNpZ25hbE1vbml0b3JpbmcgKFNpZ25hbEVudHJ5ICpzaWcpIHsKKyAgc2lnc2V0X3QgbWFzazsKKworICBpZiAobWFrZVNpZ25hbE1hc2soJm1hc2ssIHNpZy0+bnVtYmVyKSkgeworICAgIGludCBmbGFncyA9IDA7CisKKyNpZmRlZiBTRkRfTk9OQkxPQ0sKKyAgICBmbGFncyB8PSBTRkRfTk9OQkxPQ0s7CisjZW5kaWYgLyogU0ZEX05PTkJMT0NLICovCisKKyNpZmRlZiBTRkRfQ0xPRVhFQworICAgIGZsYWdzIHw9IFNGRF9DTE9FWEVDOworI2VuZGlmIC8qIFNGRF9DTE9FWEVDICovCisKKyAgICBpZiAoKHNpZy0+c2lnbmFsZmQuZmlsZURlc2NyaXB0b3IgPSBzaWduYWxmZCgtMSwgJm1hc2ssIGZsYWdzKSkgIT0gLTEpIHsKKyAgICAgIGlmIChhc3luY1JlYWRGaWxlKCZzaWctPnNpZ25hbGZkLmFzeW5jTW9uaXRvciwgc2lnLT5zaWduYWxmZC5maWxlRGVzY3JpcHRvciwKKyAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihzdHJ1Y3Qgc2lnbmFsZmRfc2lnaW5mbyksCisgICAgICAgICAgICAgICAgICAgICAgICBhc3luY0hhbmRsZVNpZ25hbGZkSW5wdXQsIHNpZykpIHsKKyAgICAgICAgaWYgKHNpZy0+d2FzQmxvY2tlZCB8fCBhc3luY1NldFNpZ25hbEJsb2NrZWQoc2lnLT5udW1iZXIsIDEpKSB7CisgICAgICAgICAgbG9nU2lnbmFsZmRBY3Rpb24oc2lnLCAiY3JlYXRlZCIpOworICAgICAgICAgIHJldHVybiAxOworICAgICAgICB9CisKKyAgICAgICAgY2FuY2VsU2lnbmFsZmRBc3luY01vbml0b3Ioc2lnKTsKKyAgICAgIH0KKworICAgICAgY2xvc2VTaWduYWxmZEZpbGVEZXNjcmlwdG9yKHNpZyk7CisgICAgfSBlbHNlIHsKKyAgICAgIGxvZ1N5c3RlbUVycm9yKCJzaWduYWxmZCIpOworICAgIH0KKyAgfQorCisgIHJldHVybiAwOworfQorCisjZWxzZSAvKiBwYXJhZGlnbS1zcGVjaWZpYyBzaWduYWwgbW9uaXRvcmluZyBoYW5kbGVycyAqLworQVNZTkNfRVZFTlRfQ0FMTEJBQ0soYXN5bmNIYW5kbGVQZW5kaW5nU2lnbmFsKSB7CisgIFNpZ25hbEVudHJ5ICpzaWcgPSBwYXJhbWV0ZXJzLT5ldmVudERhdGE7CisKKyAgaGFuZGxlUGVuZGluZ1NpZ25hbChzaWcpOworfQorCitBU1lOQ19TSUdOQUxfSEFORExFUihhc3luY0hhbmRsZU1vbml0b3JlZFNpZ25hbCkgeworICBFbGVtZW50ICpzaWduYWxFbGVtZW50ID0gZ2V0U2lnbmFsRWxlbWVudChzaWduYWxOdW1iZXIsIDApOworCisgIGlmIChzaWduYWxFbGVtZW50KSB7CisgICAgU2lnbmFsRW50cnkgKnNpZyA9IGdldEVsZW1lbnRJdGVtKHNpZ25hbEVsZW1lbnQpOworCisgICAgYXN5bmNTaWduYWxFdmVudChzaWctPmhhbmRsZXIuZXZlbnQsIE5VTEwpOworICB9Cit9CisKK3N0YXRpYyBpbnQKK2FjdGl2YXRlU2lnbmFsTW9uaXRvcmluZyAoU2lnbmFsRW50cnkgKnNpZykgeworICBpZiAoKHNpZy0+aGFuZGxlci5ldmVudCA9IGFzeW5jTmV3RXZlbnQoYXN5bmNIYW5kbGVQZW5kaW5nU2lnbmFsLCBzaWcpKSkgeworICAgIGlmIChhc3luY0hhbmRsZVNpZ25hbChzaWctPm51bWJlciwgYXN5bmNIYW5kbGVNb25pdG9yZWRTaWduYWwsICZzaWctPmhhbmRsZXIub2xkKSkgeworICAgICAgaWYgKCFzaWctPndhc0Jsb2NrZWQgfHwgYXN5bmNTZXRTaWduYWxCbG9ja2VkKHNpZy0+bnVtYmVyLCAwKSkgeworICAgICAgICByZXR1cm4gMTsKKyAgICAgIH0KKworICAgICAgcmVzdG9yZU9sZEhhbmRsZXIoc2lnKTsKKyAgICB9CisKKyAgICBkaXNjYXJkSGFuZGxlckV2ZW50KHNpZyk7CisgIH0KKworICByZXR1cm4gMDsKK30KKyNlbmRpZiAvKiBwYXJhZGlnbS1zcGVjaWZpYyBzaWduYWwgbW9uaXRvcmluZyBoYW5kbGVycyAqLworCit0eXBlZGVmIHN0cnVjdCB7CisgIGludCBzaWduYWw7CisgIEFzeW5jU2lnbmFsQ2FsbGJhY2sgKmNhbGxiYWNrOworICB2b2lkICpkYXRhOworfSBNb25pdG9yRWxlbWVudFBhcmFtZXRlcnM7CisKK3N0YXRpYyBFbGVtZW50ICoKK25ld01vbml0b3JFbGVtZW50IChjb25zdCB2b2lkICpwYXJhbWV0ZXJzKSB7CisgIGNvbnN0IE1vbml0b3JFbGVtZW50UGFyYW1ldGVycyAqbWVwID0gcGFyYW1ldGVyczsKKyAgRWxlbWVudCAqc2lnbmFsRWxlbWVudCA9IGdldFNpZ25hbEVsZW1lbnQobWVwLT5zaWduYWwsIDEpOworCisgIGlmIChzaWduYWxFbGVtZW50KSB7CisgICAgU2lnbmFsRW50cnkgKnNpZyA9IGdldEVsZW1lbnRJdGVtKHNpZ25hbEVsZW1lbnQpOworICAgIGludCBuZXdTaWduYWwgPSBnZXRRdWV1ZVNpemUoc2lnLT5tb25pdG9ycykgPT0gMDsKKyAgICBNb25pdG9yRW50cnkgKm1vbjsKKworICAgIGlmICgobW9uID0gbWFsbG9jKHNpemVvZigqbW9uKSkpKSB7CisgICAgICBtZW1zZXQobW9uLCAwLCBzaXplb2YoKm1vbikpOworCisgICAgICBtb24tPnNpZ25hbCA9IHNpZzsKKyAgICAgIG1vbi0+Y2FsbGJhY2sgPSBtZXAtPmNhbGxiYWNrOworICAgICAgbW9uLT5kYXRhID0gbWVwLT5kYXRhOworCisgICAgICBtb24tPmFjdGl2ZSA9IDA7CisgICAgICBtb24tPmRlbGV0ZSA9IDA7CisKKyAgICAgIHsKKyAgICAgICAgRWxlbWVudCAqbW9uaXRvckVsZW1lbnQgPSBlbnF1ZXVlSXRlbShzaWctPm1vbml0b3JzLCBtb24pOworCisgICAgICAgIGlmIChtb25pdG9yRWxlbWVudCkgeworICAgICAgICAgIGludCBhZGRlZCA9ICFuZXdTaWduYWw7CisKKyAgICAgICAgICBpZiAoIWFkZGVkKSB7CisgICAgICAgICAgICBsb2dNZXNzYWdlKExPR19DQVRFR09SWShBU1lOQ19FVkVOVFMpLCAiYWN0aXZhdGluZyBzaWduYWwgbW9uaXRvcmluZzogJWQiLCBzaWctPm51bWJlcik7CisgICAgICAgICAgICBzaWctPndhc0Jsb2NrZWQgPSBhc3luY0lzU2lnbmFsQmxvY2tlZChzaWctPm51bWJlcik7CisgICAgICAgICAgICBpZiAoYWN0aXZhdGVTaWduYWxNb25pdG9yaW5nKHNpZykpIGFkZGVkID0gMTsKKyAgICAgICAgICB9CisKKyAgICAgICAgICBpZiAoYWRkZWQpIHsKKyAgICAgICAgICAgIGxvZ1N5bWJvbChMT0dfQ0FURUdPUlkoQVNZTkNfRVZFTlRTKSwgbW9uLT5jYWxsYmFjaywgInNpZ25hbCBtb25pdG9yIGFkZGVkOiAlZCIsIHNpZy0+bnVtYmVyKTsKKyAgICAgICAgICAgIHJldHVybiBtb25pdG9yRWxlbWVudDsKKyAgICAgICAgICB9CisKKyAgICAgICAgICBkZWxldGVFbGVtZW50KG1vbml0b3JFbGVtZW50KTsKKyAgICAgICAgfQorICAgICAgfQorCisgICAgICBmcmVlKG1vbik7CisgICAgfSBlbHNlIHsKKyAgICAgIGxvZ01hbGxvY0Vycm9yKCk7CisgICAgfQorCisgICAgaWYgKG5ld1NpZ25hbCkgZGVsZXRlRWxlbWVudChzaWduYWxFbGVtZW50KTsKKyAgfQorCisgIHJldHVybiBOVUxMOworfQorCitpbnQKK2FzeW5jTW9uaXRvclNpZ25hbCAoCisgIEFzeW5jSGFuZGxlICpoYW5kbGUsIGludCBzaWduYWwsCisgIEFzeW5jU2lnbmFsQ2FsbGJhY2sgKmNhbGxiYWNrLCB2b2lkICpkYXRhCispIHsKKyAgY29uc3QgTW9uaXRvckVsZW1lbnRQYXJhbWV0ZXJzIG1lcCA9IHsKKyAgICAuc2lnbmFsID0gc2lnbmFsLAorICAgIC5jYWxsYmFjayA9IGNhbGxiYWNrLAorICAgIC5kYXRhID0gZGF0YQorICB9OworCisgIHJldHVybiBhc3luY01ha2VIYW5kbGUoaGFuZGxlLCBuZXdNb25pdG9yRWxlbWVudCwgJm1lcCk7Cit9CisjZW5kaWYgLyogQVNZTkNfQ0FOX01PTklUT1JfU0lHTkFMUyAqLworCisjaWZkZWYgQVNZTkNfQ0FOX09CVEFJTl9TSUdOQUxTCitpbnQKK2FzeW5jQ2xhaW1TaWduYWxOdW1iZXIgKGludCBzaWduYWwpIHsKKyAgQXN5bmNTaWduYWxEYXRhICpzZCA9IGdldFNpZ25hbERhdGEoKTsKKworICBpZiAoc2QpIHsKKyAgICBjb25zdCBjaGFyICpyZWFzb24gPSAic2lnbmFsIG51bWJlciBub3QgY2xhaW1hYmxlIjsKKworICAgIGlmIChzaWdpc21lbWJlcigmc2QtPm9idGFpbmFibGVTaWduYWxzLCBzaWduYWwpKSB7CisgICAgICBpZiAoc2lnaXNtZW1iZXIoJnNkLT5jbGFpbWVkU2lnbmFscywgc2lnbmFsKSkgeworICAgICAgICByZWFzb24gPSAic2lnbmFsIG51bWJlciBhbHJlYWR5IGNsYWltZWQiOworICAgICAgfSBlbHNlIGlmIChzaWdpc21lbWJlcigmc2QtPm9idGFpbmVkU2lnbmFscywgc2lnbmFsKSkgeworICAgICAgICByZWFzb24gPSAic2lnbmFsIG51bWJlciBpbiB1c2UiOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgc2lnYWRkc2V0KCZzZC0+Y2xhaW1lZFNpZ25hbHMsIHNpZ25hbCk7CisgICAgICAgIHJldHVybiAxOworICAgICAgfQorICAgIH0KKworICAgIGxvZ01lc3NhZ2UoTE9HX0VSUiwgIiVzOiAlZCIsIHJlYXNvbiwgc2lnbmFsKTsKKyAgfQorCisgIHJldHVybiAwOworfQorCitpbnQKK2FzeW5jUmVsZWFzZVNpZ25hbE51bWJlciAoaW50IHNpZ25hbCkgeworICBBc3luY1NpZ25hbERhdGEgKnNkID0gZ2V0U2lnbmFsRGF0YSgpOworCisgIGlmIChzZCkgeworICAgIGlmIChzaWdpc21lbWJlcigmc2QtPmNsYWltZWRTaWduYWxzLCBzaWduYWwpKSB7CisgICAgICBzaWdkZWxzZXQoJnNkLT5jbGFpbWVkU2lnbmFscywgc2lnbmFsKTsKKyAgICAgIHJldHVybiAxOworICAgIH0KKyAgfQorCisgIGxvZ01lc3NhZ2UoTE9HX0VSUiwgInNpZ25hbCBudW1iZXIgbm90IGNsYWltZWQ6ICVkIiwgc2lnbmFsKTsKKyAgcmV0dXJuIDA7Cit9CisKK2ludAorYXN5bmNPYnRhaW5TaWduYWxOdW1iZXIgKHZvaWQpIHsKKyAgQXN5bmNTaWduYWxEYXRhICpzZCA9IGdldFNpZ25hbERhdGEoKTsKKworICBpZiAoc2QpIHsKKyAgICBpbnQgc2lnbmFsOworCisgICAgZm9yIChzaWduYWw9c2QtPmZpcnN0T2J0YWluYWJsZVNpZ25hbDsgc2lnbmFsPD1zZC0+bGFzdE9idGFpbmFibGVTaWduYWw7IHNpZ25hbCs9MSkgeworICAgICAgaWYgKHNpZ2lzbWVtYmVyKCZzZC0+b2J0YWluYWJsZVNpZ25hbHMsIHNpZ25hbCkpIHsKKyAgICAgICAgaWYgKCFzaWdpc21lbWJlcigmc2QtPmNsYWltZWRTaWduYWxzLCBzaWduYWwpKSB7CisgICAgICAgICAgaWYgKCFzaWdpc21lbWJlcigmc2QtPm9idGFpbmVkU2lnbmFscywgc2lnbmFsKSkgeworICAgICAgICAgICAgc2lnYWRkc2V0KCZzZC0+b2J0YWluZWRTaWduYWxzLCBzaWduYWwpOworICAgICAgICAgICAgcmV0dXJuIHNpZ25hbDsKKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9CisgIH0KKworICBsb2dNZXNzYWdlKExPR19FUlIsICJubyBvYnRhaW5hYmxlIHNpZ25hbCBudW1iZXIiKTsKKyAgcmV0dXJuIDA7Cit9CisKK2ludAorYXN5bmNSZWxpbnF1aXNoU2lnbmFsTnVtYmVyIChpbnQgc2lnbmFsKSB7CisgIEFzeW5jU2lnbmFsRGF0YSAqc2QgPSBnZXRTaWduYWxEYXRhKCk7CisKKyAgaWYgKHNkKSB7CisgICAgaWYgKHNpZ2lzbWVtYmVyKCZzZC0+b2J0YWluZWRTaWduYWxzLCBzaWduYWwpKSB7CisgICAgICBzaWdkZWxzZXQoJnNkLT5vYnRhaW5lZFNpZ25hbHMsIHNpZ25hbCk7CisgICAgICByZXR1cm4gMTsKKyAgICB9CisgIH0KKworICBsb2dNZXNzYWdlKExPR19FUlIsICJzaWduYWwgbnVtYmVyIG5vdCBvYnRhaW5lZDogJWQiLCBzaWduYWwpOworICByZXR1cm4gMDsKK30KKyNlbmRpZiAvKiBBU1lOQ19DQU5fT0JUQUlOX1NJR05BTFMgKi8KKyNlbmRpZiAvKiBBU1lOQ19DQU5fSEFORExFX1NJR05BTFMgKi8KZGlmZiAtLWdpdCBhL1Byb2dyYW1zL2FzeW5jX3Rhc2suYyBiL1Byb2dyYW1zL2FzeW5jX3Rhc2suYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MTA4Zjg0Ci0tLSAvZGV2L251bGwKKysrIGIvUHJvZ3JhbXMvYXN5bmNfdGFzay5jCkBAIC0wLDAgKzEsMTUxIEBACisvKgorICogQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyAqICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyAqCisgKiBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorICoKKyAqIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyAqCisgKiBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisgKi8KKworI2luY2x1ZGUgInByb2xvZ3VlLmgiCisKKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworI2luY2x1ZGUgImxvZy5oIgorI2luY2x1ZGUgImFzeW5jX3Rhc2suaCIKKyNpbmNsdWRlICJhc3luY19pbnRlcm5hbC5oIgorI2luY2x1ZGUgImFzeW5jX2V2ZW50LmgiCisKK3R5cGVkZWYgc3RydWN0IHsKKyAgQXN5bmNUYXNrQ2FsbGJhY2sgKmNhbGxiYWNrOworICB2b2lkICpkYXRhOworfSBUYXNrRGVmaW5pdGlvbjsKKworc3RydWN0IEFzeW5jVGFza0RhdGFTdHJ1Y3QgeworICBRdWV1ZSAqdGFza1F1ZXVlOworfTsKKwordm9pZAorYXN5bmNEZWFsbG9jYXRlVGFza0RhdGEgKEFzeW5jVGFza0RhdGEgKnRkKSB7CisgIGlmICh0ZCkgeworICAgIGlmICh0ZC0+dGFza1F1ZXVlKSBkZWFsbG9jYXRlUXVldWUodGQtPnRhc2tRdWV1ZSk7CisgICAgZnJlZSh0ZCk7CisgIH0KK30KKworc3RhdGljIEFzeW5jVGFza0RhdGEgKgorZ2V0VGFza0RhdGEgKHZvaWQpIHsKKyAgQXN5bmNUaHJlYWRTcGVjaWZpY0RhdGEgKnRzZCA9IGFzeW5jR2V0VGhyZWFkU3BlY2lmaWNEYXRhKCk7CisgIGlmICghdHNkKSByZXR1cm4gTlVMTDsKKworICBpZiAoIXRzZC0+dGFza0RhdGEpIHsKKyAgICBBc3luY1Rhc2tEYXRhICp0ZDsKKworICAgIGlmICghKHRkID0gbWFsbG9jKHNpemVvZigqdGQpKSkpIHsKKyAgICAgIGxvZ01hbGxvY0Vycm9yKCk7CisgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICBtZW1zZXQodGQsIDAsIHNpemVvZigqdGQpKTsKKyAgICB0ZC0+dGFza1F1ZXVlID0gTlVMTDsKKyAgICB0c2QtPnRhc2tEYXRhID0gdGQ7CisgIH0KKworICByZXR1cm4gdHNkLT50YXNrRGF0YTsKK30KKworc3RhdGljIHZvaWQKK2RlYWxsb2NhdGVUYXNrRGVmaW5pdGlvbiAodm9pZCAqaXRlbSwgdm9pZCAqZGF0YSkgeworICBUYXNrRGVmaW5pdGlvbiAqdGFzayA9IGl0ZW07CisKKyAgZnJlZSh0YXNrKTsKK30KKworc3RhdGljIFF1ZXVlICoKK2dldFRhc2tRdWV1ZSAoaW50IGNyZWF0ZSkgeworICBBc3luY1Rhc2tEYXRhICp0ZCA9IGdldFRhc2tEYXRhKCk7CisgIGlmICghdGQpIHJldHVybiBOVUxMOworCisgIGlmICghdGQtPnRhc2tRdWV1ZSAmJiBjcmVhdGUpIHsKKyAgICB0ZC0+dGFza1F1ZXVlID0gbmV3UXVldWUoZGVhbGxvY2F0ZVRhc2tEZWZpbml0aW9uLCBOVUxMKTsKKyAgfQorCisgIHJldHVybiB0ZC0+dGFza1F1ZXVlOworfQorCitzdGF0aWMgaW50CithZGRUYXNrIChUYXNrRGVmaW5pdGlvbiAqdGFzaykgeworICBRdWV1ZSAqcXVldWUgPSBnZXRUYXNrUXVldWUoMSk7CisKKyAgaWYgKHF1ZXVlKSB7CisgICAgaWYgKGVucXVldWVJdGVtKHF1ZXVlLCB0YXNrKSkgeworICAgICAgbG9nU3ltYm9sKExPR19DQVRFR09SWShBU1lOQ19FVkVOVFMpLCB0YXNrLT5jYWxsYmFjaywgInRhc2sgYWRkZWQiKTsKKyAgICAgIHJldHVybiAxOworICAgIH0KKyAgfQorCisgIHJldHVybiAwOworfQorCitpbnQKK2FzeW5jQWRkVGFzayAoQXN5bmNFdmVudCAqZXZlbnQsIEFzeW5jVGFza0NhbGxiYWNrICpjYWxsYmFjaywgdm9pZCAqZGF0YSkgeworICBUYXNrRGVmaW5pdGlvbiAqdGFzazsKKworICBpZiAoKHRhc2sgPSBtYWxsb2Moc2l6ZW9mKCp0YXNrKSkpKSB7CisgICAgbWVtc2V0KHRhc2ssIDAsIHNpemVvZigqdGFzaykpOworICAgIHRhc2stPmNhbGxiYWNrID0gY2FsbGJhY2s7CisgICAgdGFzay0+ZGF0YSA9IGRhdGE7CisKKyAgICBpZiAoZXZlbnQpIHsKKyAgICAgIGlmIChhc3luY1NpZ25hbEV2ZW50KGV2ZW50LCB0YXNrKSkgcmV0dXJuIDE7CisgICAgfSBlbHNlIGlmIChhZGRUYXNrKHRhc2spKSB7CisgICAgICByZXR1cm4gMTsKKyAgICB9CisKKyAgICBmcmVlKHRhc2spOworICB9IGVsc2UgeworICAgIGxvZ01hbGxvY0Vycm9yKCk7CisgIH0KKworICByZXR1cm4gMDsKK30KKworQVNZTkNfRVZFTlRfQ0FMTEJBQ0soYXN5bmNIYW5kbGVBZGRUYXNrRXZlbnQpIHsKKyAgYWRkVGFzayhwYXJhbWV0ZXJzLT5zaWduYWxEYXRhKTsKK30KKworQXN5bmNFdmVudCAqCithc3luY05ld0FkZFRhc2tFdmVudCAodm9pZCkgeworICByZXR1cm4gYXN5bmNOZXdFdmVudChhc3luY0hhbmRsZUFkZFRhc2tFdmVudCwgTlVMTCk7Cit9CisKK2ludAorYXN5bmNFeGVjdXRlVGFza0NhbGxiYWNrIChBc3luY1Rhc2tEYXRhICp0ZCkgeworICBpZiAodGQpIHsKKyAgICBRdWV1ZSAqcXVldWUgPSB0ZC0+dGFza1F1ZXVlOworCisgICAgaWYgKHF1ZXVlKSB7CisgICAgICBUYXNrRGVmaW5pdGlvbiAqdGFzayA9IGRlcXVldWVJdGVtKHF1ZXVlKTsKKworICAgICAgaWYgKHRhc2spIHsKKyAgICAgICAgQXN5bmNUYXNrQ2FsbGJhY2sgKmNhbGxiYWNrID0gdGFzay0+Y2FsbGJhY2s7CisKKyAgICAgICAgbG9nU3ltYm9sKExPR19DQVRFR09SWShBU1lOQ19FVkVOVFMpLCBjYWxsYmFjaywgInRhc2sgc3RhcnRpbmciKTsKKyAgICAgICAgaWYgKGNhbGxiYWNrKSBjYWxsYmFjayh0YXNrLT5kYXRhKTsKKyAgICAgICAgZnJlZSh0YXNrKTsKKyAgICAgICAgcmV0dXJuIDE7CisgICAgICB9CisgICAgfQorICB9CisKKyAgcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9Qcm9ncmFtcy9hc3luY193YWl0LmMgYi9Qcm9ncmFtcy9hc3luY193YWl0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGZhMmNkOAotLS0gL2Rldi9udWxsCisrKyBiL1Byb2dyYW1zL2FzeW5jX3dhaXQuYwpAQCAtMCwwICsxLDE3NCBAQAorLyoKKyAqIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisgKiAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisgKgorICogQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKKyNpbmNsdWRlICJwcm9sb2d1ZS5oIgorCisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKyNpbmNsdWRlICJsb2cuaCIKKyNpbmNsdWRlICJhc3luY193YWl0LmgiCisjaW5jbHVkZSAiYXN5bmNfaW50ZXJuYWwuaCIKKyNpbmNsdWRlICJ0aW1pbmcuaCIKKwordHlwZWRlZiBzdHJ1Y3QgeworICBBc3luY1RocmVhZFNwZWNpZmljRGF0YSAqdHNkOworICBsb25nIGludCB0aW1lb3V0OworfSBDYWxsYmFja0V4ZWN1dGVyUGFyYW1ldGVyczsKKwordHlwZWRlZiBpbnQgQ2FsbGJhY2tFeGVjdXRlciAoQ2FsbGJhY2tFeGVjdXRlclBhcmFtZXRlcnMgKnBhcmFtZXRlcnMpOworCit0eXBlZGVmIHN0cnVjdCB7CisgIENhbGxiYWNrRXhlY3V0ZXIgKmV4ZWN1dGU7CisgIGNvbnN0IGNoYXIgKmFjdGlvbjsKK30gQ2FsbGJhY2tFeGVjdXRlckVudHJ5OworCitzdHJ1Y3QgQXN5bmNXYWl0RGF0YVN0cnVjdCB7CisgIEFzeW5jVGhyZWFkU3BlY2lmaWNEYXRhICp0c2Q7CisgIHVuc2lnbmVkIGludCB3YWl0RGVwdGg7Cit9OworCitzdGF0aWMgaW50CithbGFybUNhbGxiYWNrRXhlY3V0ZXIgKENhbGxiYWNrRXhlY3V0ZXJQYXJhbWV0ZXJzICpwYXJhbWV0ZXJzKSB7CisgIHJldHVybiBhc3luY0V4ZWN1dGVBbGFybUNhbGxiYWNrKHBhcmFtZXRlcnMtPnRzZC0+YWxhcm1EYXRhLCAmcGFyYW1ldGVycy0+dGltZW91dCk7Cit9CisKK3N0YXRpYyBpbnQKK3Rhc2tDYWxsYmFja0V4ZWN1dGVyIChDYWxsYmFja0V4ZWN1dGVyUGFyYW1ldGVycyAqcGFyYW1ldGVycykgeworICBBc3luY1RocmVhZFNwZWNpZmljRGF0YSAqdHNkID0gcGFyYW1ldGVycy0+dHNkOworCisgIGlmICh0c2QtPndhaXREYXRhLT53YWl0RGVwdGggIT0gMSkgcmV0dXJuIDA7CisgIHJldHVybiBhc3luY0V4ZWN1dGVUYXNrQ2FsbGJhY2sodHNkLT50YXNrRGF0YSk7Cit9CisKK3N0YXRpYyBpbnQKK2lvQ2FsbGJhY2tFeGVjdXRlciAoQ2FsbGJhY2tFeGVjdXRlclBhcmFtZXRlcnMgKnBhcmFtZXRlcnMpIHsKKyAgcmV0dXJuIGFzeW5jRXhlY3V0ZUlvQ2FsbGJhY2socGFyYW1ldGVycy0+dHNkLT5pb0RhdGEsIHBhcmFtZXRlcnMtPnRpbWVvdXQpOworfQorCitzdGF0aWMgY29uc3QgQ2FsbGJhY2tFeGVjdXRlckVudHJ5IGNhbGxiYWNrRXhlY3V0ZXJUYWJsZVtdID0geworICB7IC5leGVjdXRlID0gYWxhcm1DYWxsYmFja0V4ZWN1dGVyLAorICAgIC5hY3Rpb24gPSAiYWxhcm0gaGFuZGxlZCIKKyAgfSwKKworICB7IC5leGVjdXRlID0gdGFza0NhbGxiYWNrRXhlY3V0ZXIsCisgICAgLmFjdGlvbiA9ICJ0YXNrIHBlcmZvcm1lZCIKKyAgfSwKKworICB7IC5leGVjdXRlID0gaW9DYWxsYmFja0V4ZWN1dGVyLAorICAgIC5hY3Rpb24gPSAiSS9PIG9wZXJhdGlvbiBoYW5kbGVkIgorICB9LAorCisgIHsgLmV4ZWN1dGUgPSBOVUxMLAorICAgIC5hY3Rpb24gPSAid2FpdCB0aW1lZCBvdXQiCisgIH0KK307CisKK3ZvaWQKK2FzeW5jRGVhbGxvY2F0ZVdhaXREYXRhIChBc3luY1dhaXREYXRhICp3ZCkgeworICBpZiAod2QpIHsKKyAgICBmcmVlKHdkKTsKKyAgfQorfQorCitzdGF0aWMgQXN5bmNXYWl0RGF0YSAqCitnZXRXYWl0RGF0YSAodm9pZCkgeworICBBc3luY1RocmVhZFNwZWNpZmljRGF0YSAqdHNkID0gYXN5bmNHZXRUaHJlYWRTcGVjaWZpY0RhdGEoKTsKKyAgaWYgKCF0c2QpIHJldHVybiBOVUxMOworCisgIGlmICghdHNkLT53YWl0RGF0YSkgeworICAgIEFzeW5jV2FpdERhdGEgKndkOworCisgICAgaWYgKCEod2QgPSBtYWxsb2Moc2l6ZW9mKCp3ZCkpKSkgeworICAgICAgbG9nTWFsbG9jRXJyb3IoKTsKKyAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIG1lbXNldCh3ZCwgMCwgc2l6ZW9mKCp3ZCkpOworICAgIHdkLT50c2QgPSB0c2Q7CisgICAgd2QtPndhaXREZXB0aCA9IDA7CisgICAgdHNkLT53YWl0RGF0YSA9IHdkOworICB9CisKKyAgcmV0dXJuIHRzZC0+d2FpdERhdGE7Cit9CisKK3N0YXRpYyB2b2lkCithd2FpdEFjdGlvbiAobG9uZyBpbnQgdGltZW91dCkgeworICBBc3luY1dhaXREYXRhICp3ZCA9IGdldFdhaXREYXRhKCk7CisKKyAgaWYgKHdkKSB7CisgICAgY29uc3QgQ2FsbGJhY2tFeGVjdXRlckVudHJ5ICpjYnggPSBjYWxsYmFja0V4ZWN1dGVyVGFibGU7CisKKyAgICBDYWxsYmFja0V4ZWN1dGVyUGFyYW1ldGVycyBwYXJhbWV0ZXJzID0geworICAgICAgLnRzZCA9IHdkLT50c2QsCisgICAgICAudGltZW91dCA9IHRpbWVvdXQKKyAgICB9OworCisgICAgd2QtPndhaXREZXB0aCArPSAxOworICAgIGxvZ01lc3NhZ2UoTE9HX0NBVEVHT1JZKEFTWU5DX0VWRU5UUyksCisgICAgICAgICAgICAgICAiYmVnaW46IGxldmVsICV1OiB0aW1lb3V0ICVsZCIsCisgICAgICAgICAgICAgICB3ZC0+d2FpdERlcHRoLCB0aW1lb3V0KTsKKworICAgIHdoaWxlIChjYngtPmV4ZWN1dGUpIHsKKyAgICAgIGlmIChjYngtPmV4ZWN1dGUoJnBhcmFtZXRlcnMpKSBicmVhazsKKyAgICAgIGNieCArPSAxOworICAgIH0KKworICAgIGxvZ01lc3NhZ2UoTE9HX0NBVEVHT1JZKEFTWU5DX0VWRU5UUyksCisgICAgICAgICAgICAgICAiZW5kOiBsZXZlbCAldTogJXMiLAorICAgICAgICAgICAgICAgd2QtPndhaXREZXB0aCwgY2J4LT5hY3Rpb24pOworCisgICAgd2QtPndhaXREZXB0aCAtPSAxOworICB9IGVsc2UgeworICAgIGxvZ01lc3NhZ2UoTE9HX0NBVEVHT1JZKEFTWU5DX0VWRU5UUyksICJ3YWl0aW5nOiAlbGQiLCB0aW1lb3V0KTsKKyAgICBhcHByb3hpbWF0ZURlbGF5KHRpbWVvdXQpOworICB9Cit9CisKK2ludAorYXN5bmNBd2FpdENvbmRpdGlvbiAoaW50IHRpbWVvdXQsIEFzeW5jQ29uZGl0aW9uVGVzdGVyICp0ZXN0Q29uZGl0aW9uLCB2b2lkICpkYXRhKSB7CisgIGludCBmaXJzdCA9IDE7CisgIFRpbWVQZXJpb2QgcGVyaW9kOworICBzdGFydFRpbWVQZXJpb2QoJnBlcmlvZCwgdGltZW91dCk7CisKKyAgd2hpbGUgKCEodGVzdENvbmRpdGlvbiAmJiB0ZXN0Q29uZGl0aW9uKGRhdGEpKSkgeworICAgIGxvbmcgaW50IGVsYXBzZWQ7CisKKyAgICBpZiAoZmlyc3QpIHsKKyAgICAgIGZpcnN0ID0gMDsKKyAgICAgIGVsYXBzZWQgPSAwOworICAgIH0gZWxzZSBpZiAoYWZ0ZXJUaW1lUGVyaW9kKCZwZXJpb2QsICZlbGFwc2VkKSkgeworICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgYXdhaXRBY3Rpb24odGltZW91dCAtIGVsYXBzZWQpOworICB9CisKKyAgbG9nU3ltYm9sKExPR19DQVRFR09SWShBU1lOQ19FVkVOVFMpLCB0ZXN0Q29uZGl0aW9uLCAiY29uZGl0aW9uIHNhdGlzZmllZCIpOworICByZXR1cm4gMTsKK30KKwordm9pZAorYXN5bmNXYWl0IChpbnQgZHVyYXRpb24pIHsKKyAgYXN5bmNBd2FpdENvbmRpdGlvbihkdXJhdGlvbiwgTlVMTCwgTlVMTCk7Cit9CisKK3ZvaWQKK2FzeW5jV2FpdEZvciAoQXN5bmNDb25kaXRpb25UZXN0ZXIgKnRlc3RDb25kaXRpb24sIHZvaWQgKmRhdGEpIHsKKyAgd2hpbGUgKCFhc3luY0F3YWl0Q29uZGl0aW9uKDEwMDAwMDAsIHRlc3RDb25kaXRpb24sIGRhdGEpKTsKK30KZGlmZiAtLWdpdCBhL1Byb2dyYW1zL2F0Yi5hdXRvLmggYi9Qcm9ncmFtcy9hdGIuYXV0by5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdhNGU4MDEKLS0tIC9kZXYvbnVsbAorKysgYi9Qcm9ncmFtcy9hdGIuYXV0by5oCkBAIC0wLDAgKzEsMzIgQEAKK1swWDAxXSA9IDBYMDEsIDBYMDIsIDBYMDMsIDBYMDQsIDBYMDUsIDBYMDYsIDBYMDcsIDBYNDAsCitbMFgwOV0gPSAwWDQxLCAwWDQyLCAwWDQzLCAwWDQ0LCAwWDQ1LCAwWDQ2LCAwWDQ3LCAwWDA4LAorWzBYMTFdID0gMFgwOSwgMFgwQSwgMFgwQiwgMFgwQywgMFgwRCwgMFgwRSwgMFgwRiwgMFg0OCwKK1swWDE5XSA9IDBYNDksIDBYNEEsIDBYNEIsIDBYNEMsIDBYNEQsIDBYNEUsIDBYNEYsIDBYMTAsCitbMFgyMV0gPSAwWDExLCAwWDEyLCAwWDEzLCAwWDE0LCAwWDE1LCAwWDE2LCAwWDE3LCAwWDUwLAorWzBYMjldID0gMFg1MSwgMFg1MiwgMFg1MywgMFg1NCwgMFg1NSwgMFg1NiwgMFg1NywgMFgxOCwKK1swWDMxXSA9IDBYMTksIDBYMUEsIDBYMUIsIDBYMUMsIDBYMUQsIDBYMUUsIDBYMUYsIDBYNTgsCitbMFgzOV0gPSAwWDU5LCAwWDVBLCAwWDVCLCAwWDVDLCAwWDVELCAwWDVFLCAwWDVGLCAwWDIwLAorWzBYNDFdID0gMFgyMSwgMFgyMiwgMFgyMywgMFgyNCwgMFgyNSwgMFgyNiwgMFgyNywgMFg2MCwKK1swWDQ5XSA9IDBYNjEsIDBYNjIsIDBYNjMsIDBYNjQsIDBYNjUsIDBYNjYsIDBYNjcsIDBYMjgsCitbMFg1MV0gPSAwWDI5LCAwWDJBLCAwWDJCLCAwWDJDLCAwWDJELCAwWDJFLCAwWDJGLCAwWDY4LAorWzBYNTldID0gMFg2OSwgMFg2QSwgMFg2QiwgMFg2QywgMFg2RCwgMFg2RSwgMFg2RiwgMFgzMCwKK1swWDYxXSA9IDBYMzEsIDBYMzIsIDBYMzMsIDBYMzQsIDBYMzUsIDBYMzYsIDBYMzcsIDBYNzAsCitbMFg2OV0gPSAwWDcxLCAwWDcyLCAwWDczLCAwWDc0LCAwWDc1LCAwWDc2LCAwWDc3LCAwWDM4LAorWzBYNzFdID0gMFgzOSwgMFgzQSwgMFgzQiwgMFgzQywgMFgzRCwgMFgzRSwgMFgzRiwgMFg3OCwKK1swWDc5XSA9IDBYNzksIDBYN0EsIDBYN0IsIDBYN0MsIDBYN0QsIDBYN0UsIDBYN0YsIDBYODAsCitbMFg4MV0gPSAwWDgxLCAwWDgyLCAwWDgzLCAwWDg0LCAwWDg1LCAwWDg2LCAwWDg3LCAwWEMwLAorWzBYODldID0gMFhDMSwgMFhDMiwgMFhDMywgMFhDNCwgMFhDNSwgMFhDNiwgMFhDNywgMFg4OCwKK1swWDkxXSA9IDBYODksIDBYOEEsIDBYOEIsIDBYOEMsIDBYOEQsIDBYOEUsIDBYOEYsIDBYQzgsCitbMFg5OV0gPSAwWEM5LCAwWENBLCAwWENCLCAwWENDLCAwWENELCAwWENFLCAwWENGLCAwWDkwLAorWzBYQTFdID0gMFg5MSwgMFg5MiwgMFg5MywgMFg5NCwgMFg5NSwgMFg5NiwgMFg5NywgMFhEMCwKK1swWEE5XSA9IDBYRDEsIDBYRDIsIDBYRDMsIDBYRDQsIDBYRDUsIDBYRDYsIDBYRDcsIDBYOTgsCitbMFhCMV0gPSAwWDk5LCAwWDlBLCAwWDlCLCAwWDlDLCAwWDlELCAwWDlFLCAwWDlGLCAwWEQ4LAorWzBYQjldID0gMFhEOSwgMFhEQSwgMFhEQiwgMFhEQywgMFhERCwgMFhERSwgMFhERiwgMFhBMCwKK1swWEMxXSA9IDBYQTEsIDBYQTIsIDBYQTMsIDBYQTQsIDBYQTUsIDBYQTYsIDBYQTcsIDBYRTAsCitbMFhDOV0gPSAwWEUxLCAwWEUyLCAwWEUzLCAwWEU0LCAwWEU1LCAwWEU2LCAwWEU3LCAwWEE4LAorWzBYRDFdID0gMFhBOSwgMFhBQSwgMFhBQiwgMFhBQywgMFhBRCwgMFhBRSwgMFhBRiwgMFhFOCwKK1swWEQ5XSA9IDBYRTksIDBYRUEsIDBYRUIsIDBYRUMsIDBYRUQsIDBYRUUsIDBYRUYsIDBYQjAsCitbMFhFMV0gPSAwWEIxLCAwWEIyLCAwWEIzLCAwWEI0LCAwWEI1LCAwWEI2LCAwWEI3LCAwWEYwLAorWzBYRTldID0gMFhGMSwgMFhGMiwgMFhGMywgMFhGNCwgMFhGNSwgMFhGNiwgMFhGNywgMFhCOCwKK1swWEYxXSA9IDBYQjksIDBYQkEsIDBYQkIsIDBYQkMsIDBYQkQsIDBYQkUsIDBYQkYsIDBYRjgsCitbMFhGOV0gPSAwWEY5LCAwWEZBLCAwWEZCLCAwWEZDLCAwWEZELCAwWEZFLCAwWEZGCmRpZmYgLS1naXQgYS9Qcm9ncmFtcy9hdGJfY29tcGlsZS5jIGIvUHJvZ3JhbXMvYXRiX2NvbXBpbGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZDdjMGJhCi0tLSAvZGV2L251bGwKKysrIGIvUHJvZ3JhbXMvYXRiX2NvbXBpbGUuYwpAQCAtMCwwICsxLDIyMiBAQAorLyoKKyAqIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisgKiAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisgKgorICogQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKKyNpbmNsdWRlICJwcm9sb2d1ZS5oIgorCisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKyNpbmNsdWRlICJmaWxlLmgiCisjaW5jbHVkZSAiZGF0YWZpbGUuaCIKKyNpbmNsdWRlICJkYXRhYXJlYS5oIgorI2luY2x1ZGUgImF0Yi5oIgorI2luY2x1ZGUgImF0Yl9pbnRlcm5hbC5oIgorCit0eXBlZGVmIHN0cnVjdCB7CisgIHVuc2lnbmVkIGNoYXIgYXR0cmlidXRlOworICB1bnNpZ25lZCBjaGFyIG9wZXJhdGlvbjsKK30gRG90RGF0YTsKKwordHlwZWRlZiBzdHJ1Y3QgeworICBEYXRhQXJlYSAqYXJlYTsKKyAgRG90RGF0YSBkb3RzWzhdOworfSBBdHRyaWJ1dGVzVGFibGVEYXRhOworCitzdGF0aWMgaW5saW5lIEF0dHJpYnV0ZXNUYWJsZUhlYWRlciAqCitnZXRBdHRyaWJ1dGVzVGFibGVIZWFkZXIgKEF0dHJpYnV0ZXNUYWJsZURhdGEgKmF0ZCkgeworICByZXR1cm4gZ2V0RGF0YUl0ZW0oYXRkLT5hcmVhLCAwKTsKK30KKworc3RhdGljIGludAorbWFrZUF0dHJpYnV0ZXNUb0RvdHMgKEF0dHJpYnV0ZXNUYWJsZURhdGEgKmF0ZCkgeworICB1bnNpZ25lZCBjaGFyICp0YWJsZSA9IGdldEF0dHJpYnV0ZXNUYWJsZUhlYWRlcihhdGQpLT5hdHRyaWJ1dGVzVG9Eb3RzOworICB1bnNpZ25lZCBjaGFyIGJpdHMgPSAwOworCisgIGRvIHsKKyAgICB1bnNpZ25lZCBjaGFyICpjZWxsID0gJnRhYmxlW2JpdHNdOworICAgIHVuc2lnbmVkIGNoYXIgZG90SW5kZXg7CisKKyAgICAqY2VsbCA9IDA7CisgICAgZm9yIChkb3RJbmRleD0wOyBkb3RJbmRleDxCUkxfRE9UX0NPVU5UOyBkb3RJbmRleCs9MSkgeworICAgICAgY29uc3QgRG90RGF0YSAqZG90ID0gJmF0ZC0+ZG90c1tkb3RJbmRleF07CisgICAgICBpbnQgaXNTZXQgPSBiaXRzICYgZG90LT5hdHRyaWJ1dGU7CisgICAgICBpZiAoIWlzU2V0ID09ICFkb3QtPm9wZXJhdGlvbikgKmNlbGwgfD0gYnJsRG90Qml0c1tkb3RJbmRleF07CisgICAgfQorICB9IHdoaWxlICgoYml0cyArPSAxKSk7CisKKyAgcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQKK3BhcnNlQXR0cmlidXRlT3BlcmFuZCAoRGF0YUZpbGUgKmZpbGUsIHVuc2lnbmVkIGNoYXIgKmJpdCwgdW5zaWduZWQgY2hhciAqb3BlcmF0aW9uLCBjb25zdCB3Y2hhcl90ICpjaGFyYWN0ZXJzLCBpbnQgbGVuZ3RoKSB7CisgIGlmIChsZW5ndGggPiAxKSB7CisgICAgc3RhdGljIGNvbnN0IHdjaGFyX3Qgb3BlcmF0b3JzW10gPSB7J34nLCAnPSd9OworICAgIGNvbnN0IHdjaGFyX3QgKm9wZXJhdG9yID0gd21lbWNocihvcGVyYXRvcnMsIGNoYXJhY3RlcnNbMF0sIEFSUkFZX0NPVU5UKG9wZXJhdG9ycykpOworCisgICAgaWYgKG9wZXJhdG9yKSB7CisgICAgICB0eXBlZGVmIHN0cnVjdCB7CisgICAgICAgIGNvbnN0IHdjaGFyX3QgKm5hbWU7CisgICAgICAgIHVuc2lnbmVkIGNoYXIgYml0OworICAgICAgfSBBdHRyaWJ1dGVFbnRyeTsKKworICAgICAgc3RhdGljIGNvbnN0IEF0dHJpYnV0ZUVudHJ5IGF0dHJpYnV0ZVRhYmxlW10gPSB7CisgICAgICAgIHtXU19DKCJmZy1ibHVlIikgICwgMFgwMX0sCisgICAgICAgIHtXU19DKCJmZy1ncmVlbiIpICwgMFgwMn0sCisgICAgICAgIHtXU19DKCJmZy1yZWQiKSAgICwgMFgwNH0sCisgICAgICAgIHtXU19DKCJmZy1icmlnaHQiKSwgMFgwOH0sCisgICAgICAgIHtXU19DKCJiZy1ibHVlIikgICwgMFgxMH0sCisgICAgICAgIHtXU19DKCJiZy1ncmVlbiIpICwgMFgyMH0sCisgICAgICAgIHtXU19DKCJiZy1yZWQiKSAgICwgMFg0MH0sCisgICAgICAgIHtXU19DKCJibGluayIpICAgICwgMFg4MH0sCisKKyAgICAgICAge1dTX0MoImJpdDAiKSwgMFgwMX0sCisgICAgICAgIHtXU19DKCJiaXQxIiksIDBYMDJ9LAorICAgICAgICB7V1NfQygiYml0MiIpLCAwWDA0fSwKKyAgICAgICAge1dTX0MoImJpdDMiKSwgMFgwOH0sCisgICAgICAgIHtXU19DKCJiaXQ0IiksIDBYMTB9LAorICAgICAgICB7V1NfQygiYml0NSIpLCAwWDIwfSwKKyAgICAgICAge1dTX0MoImJpdDYiKSwgMFg0MH0sCisgICAgICAgIHtXU19DKCJiaXQ3IiksIDBYODB9LAorCisgICAgICAgIHtXU19DKCJiaXQwMSIpLCAwWDAxfSwKKyAgICAgICAge1dTX0MoImJpdDAyIiksIDBYMDJ9LAorICAgICAgICB7V1NfQygiYml0MDQiKSwgMFgwNH0sCisgICAgICAgIHtXU19DKCJiaXQwOCIpLCAwWDA4fSwKKyAgICAgICAge1dTX0MoImJpdDEwIiksIDBYMTB9LAorICAgICAgICB7V1NfQygiYml0MjAiKSwgMFgyMH0sCisgICAgICAgIHtXU19DKCJiaXQ0MCIpLCAwWDQwfSwKKyAgICAgICAge1dTX0MoImJpdDgwIiksIDBYODB9LAorCisgICAgICAgIHtOVUxMLCAwWDAwfQorICAgICAgfTsKKworICAgICAgY29uc3QgQXR0cmlidXRlRW50cnkgKmF0dHJpYnV0ZSA9IGF0dHJpYnV0ZVRhYmxlOworCisgICAgICBjaGFyYWN0ZXJzICs9IDEsIGxlbmd0aCAtPSAxOworCisgICAgICB3aGlsZSAoYXR0cmlidXRlLT5uYW1lKSB7CisgICAgICAgIGlmICgobGVuZ3RoID09IHdjc2xlbihhdHRyaWJ1dGUtPm5hbWUpKSAmJgorICAgICAgICAgICAgKHdtZW1jbXAoY2hhcmFjdGVycywgYXR0cmlidXRlLT5uYW1lLCBsZW5ndGgpID09IDApKSB7CisgICAgICAgICAgKmJpdCA9IGF0dHJpYnV0ZS0+Yml0OworICAgICAgICAgICpvcGVyYXRpb24gPSBvcGVyYXRvciAtIG9wZXJhdG9yczsKKyAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgfQorCisgICAgICAgIGF0dHJpYnV0ZSArPSAxOworICAgICAgfQorCisgICAgICByZXBvcnREYXRhRXJyb3IoZmlsZSwgImludmFsaWQgYXR0cmlidXRlIG5hbWU6ICUuKiIgUFJJd3MsIGxlbmd0aCwgY2hhcmFjdGVycyk7CisgICAgfSBlbHNlIHsKKyAgICAgIHJlcG9ydERhdGFFcnJvcihmaWxlLCAiaW52YWxpZCBhdHRyaWJ1dGUgb3BlcmF0b3I6ICUuMSIgUFJJd3MsICZjaGFyYWN0ZXJzWzBdKTsKKyAgICB9CisgIH0KKworICByZXR1cm4gMDsKK30KKworc3RhdGljIGludAorZ2V0QXR0cmlidXRlT3BlcmFuZCAoRGF0YUZpbGUgKmZpbGUsIHVuc2lnbmVkIGNoYXIgKmJpdCwgdW5zaWduZWQgY2hhciAqb3BlcmF0aW9uKSB7CisgIERhdGFPcGVyYW5kIGF0dHJpYnV0ZTsKKworICBpZiAoZ2V0RGF0YU9wZXJhbmQoZmlsZSwgJmF0dHJpYnV0ZSwgImF0dHJpYnV0ZSIpKQorICAgIGlmIChwYXJzZUF0dHJpYnV0ZU9wZXJhbmQoZmlsZSwgYml0LCBvcGVyYXRpb24sIGF0dHJpYnV0ZS5jaGFyYWN0ZXJzLCBhdHRyaWJ1dGUubGVuZ3RoKSkKKyAgICAgIHJldHVybiAxOworCisgIHJldHVybiAwOworfQorCitzdGF0aWMgREFUQV9PUEVSQU5EU19QUk9DRVNTT1IocHJvY2Vzc0RvdE9wZXJhbmRzKSB7CisgIEF0dHJpYnV0ZXNUYWJsZURhdGEgKmF0ZCA9IGRhdGE7CisgIGludCBkb3RJbmRleDsKKworICBpZiAoZ2V0RG90T3BlcmFuZChmaWxlLCAmZG90SW5kZXgpKSB7CisgICAgRG90RGF0YSAqZG90ID0gJmF0ZC0+ZG90c1tkb3RJbmRleF07CisKKyAgICBpZiAoZ2V0QXR0cmlidXRlT3BlcmFuZChmaWxlLCAmZG90LT5hdHRyaWJ1dGUsICZkb3QtPm9wZXJhdGlvbikpIHJldHVybiAxOworICB9CisKKyAgcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBEQVRBX09QRVJBTkRTX1BST0NFU1NPUihwcm9jZXNzQXR0cmlidXRlc1RhYmxlT3BlcmFuZHMpIHsKKyAgQkVHSU5fREFUQV9ESVJFQ1RJVkVfVEFCTEUKKyAgICBEQVRBX05FU1RJTkdfRElSRUNUSVZFUywKKyAgICB7Lm5hbWU9V1NfQygiZG90IiksIC5wcm9jZXNzb3I9cHJvY2Vzc0RvdE9wZXJhbmRzfSwKKyAgRU5EX0RBVEFfRElSRUNUSVZFX1RBQkxFCisKKyAgcmV0dXJuIHByb2Nlc3NEaXJlY3RpdmVPcGVyYW5kKGZpbGUsICZkaXJlY3RpdmVzLCAiYXR0cmlidXRlcyB0YWJsZSBkaXJlY3RpdmUiLCBkYXRhKTsKK30KKworQXR0cmlidXRlc1RhYmxlICoKK2NvbXBpbGVBdHRyaWJ1dGVzVGFibGUgKGNvbnN0IGNoYXIgKm5hbWUpIHsKKyAgQXR0cmlidXRlc1RhYmxlICp0YWJsZSA9IE5VTEw7CisKKyAgaWYgKHNldFRhYmxlRGF0YVZhcmlhYmxlcyhBVFRSSUJVVEVTX1RBQkxFX0VYVEVOU0lPTiwgQVRUUklCVVRFU19TVUJUQUJMRV9FWFRFTlNJT04pKSB7CisgICAgQXR0cmlidXRlc1RhYmxlRGF0YSBhdGQ7CisgICAgbWVtc2V0KCZhdGQsIDAsIHNpemVvZihhdGQpKTsKKworICAgIGlmICgoYXRkLmFyZWEgPSBuZXdEYXRhQXJlYSgpKSkgeworICAgICAgaWYgKGFsbG9jYXRlRGF0YUl0ZW0oYXRkLmFyZWEsIE5VTEwsIHNpemVvZihBdHRyaWJ1dGVzVGFibGVIZWFkZXIpLCBfX2FsaWdub2ZfXyhBdHRyaWJ1dGVzVGFibGVIZWFkZXIpKSkgeworICAgICAgICBjb25zdCBEYXRhRmlsZVBhcmFtZXRlcnMgcGFyYW1ldGVycyA9IHsKKyAgICAgICAgICAucHJvY2Vzc09wZXJhbmRzID0gcHJvY2Vzc0F0dHJpYnV0ZXNUYWJsZU9wZXJhbmRzLAorICAgICAgICAgIC5kYXRhID0gJmF0ZAorICAgICAgICB9OworCisgICAgICAgIGlmIChwcm9jZXNzRGF0YUZpbGUobmFtZSwgJnBhcmFtZXRlcnMpKSB7CisgICAgICAgICAgaWYgKG1ha2VBdHRyaWJ1dGVzVG9Eb3RzKCZhdGQpKSB7CisgICAgICAgICAgICBpZiAoKHRhYmxlID0gbWFsbG9jKHNpemVvZigqdGFibGUpKSkpIHsKKyAgICAgICAgICAgICAgdGFibGUtPmhlYWRlci5maWVsZHMgPSBnZXRBdHRyaWJ1dGVzVGFibGVIZWFkZXIoJmF0ZCk7CisgICAgICAgICAgICAgIHRhYmxlLT5zaXplID0gZ2V0RGF0YVNpemUoYXRkLmFyZWEpOworICAgICAgICAgICAgICByZXNldERhdGFBcmVhKGF0ZC5hcmVhKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgIH0KKworICAgICAgZGVzdHJveURhdGFBcmVhKGF0ZC5hcmVhKTsKKyAgICB9CisgIH0KKworICByZXR1cm4gdGFibGU7Cit9CisKK3ZvaWQKK2Rlc3Ryb3lBdHRyaWJ1dGVzVGFibGUgKEF0dHJpYnV0ZXNUYWJsZSAqdGFibGUpIHsKKyAgaWYgKHRhYmxlLT5zaXplKSB7CisgICAgZnJlZSh0YWJsZS0+aGVhZGVyLmZpZWxkcyk7CisgICAgZnJlZSh0YWJsZSk7CisgIH0KK30KKworY2hhciAqCitlbnN1cmVBdHRyaWJ1dGVzVGFibGVFeHRlbnNpb24gKGNvbnN0IGNoYXIgKnBhdGgpIHsKKyAgcmV0dXJuIGVuc3VyZUZpbGVFeHRlbnNpb24ocGF0aCwgQVRUUklCVVRFU19UQUJMRV9FWFRFTlNJT04pOworfQorCitjaGFyICoKK21ha2VBdHRyaWJ1dGVzVGFibGVQYXRoIChjb25zdCBjaGFyICpkaXJlY3RvcnksIGNvbnN0IGNoYXIgKm5hbWUpIHsKKyAgY2hhciAqc3ViZGlyZWN0b3J5ID0gbWFrZVBhdGgoZGlyZWN0b3J5LCBBVFRSSUJVVEVTX1RBQkxFU19TVUJESVJFQ1RPUlkpOworCisgIGlmIChzdWJkaXJlY3RvcnkpIHsKKyAgICBjaGFyICpmaWxlID0gbWFrZUZpbGVQYXRoKHN1YmRpcmVjdG9yeSwgbmFtZSwgQVRUUklCVVRFU19UQUJMRV9FWFRFTlNJT04pOworCisgICAgZnJlZShzdWJkaXJlY3RvcnkpOworICAgIGlmIChmaWxlKSByZXR1cm4gZmlsZTsKKyAgfQorCisgIHJldHVybiBOVUxMOworfQpkaWZmIC0tZ2l0IGEvUHJvZ3JhbXMvYXRiX2ludGVybmFsLmggYi9Qcm9ncmFtcy9hdGJfaW50ZXJuYWwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZWI3ZDEzCi0tLSAvZGV2L251bGwKKysrIGIvUHJvZ3JhbXMvYXRiX2ludGVybmFsLmgKQEAgLTAsMCArMSw0NSBAQAorLyoKKyAqIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisgKiAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisgKgorICogQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKKyNpZm5kZWYgQlJMVFRZX0lOQ0xVREVEX0FUQl9JTlRFUk5BTAorI2RlZmluZSBCUkxUVFlfSU5DTFVERURfQVRCX0lOVEVSTkFMCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYgLyogX19jcGx1c3BsdXMgKi8KKwordHlwZWRlZiB1aW50MzJfdCBBdHRyaWJ1dGVzVGFibGVPZmZzZXQ7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgdW5zaWduZWQgY2hhciBhdHRyaWJ1dGVzVG9Eb3RzWzBYMTAwXTsKK30gQXR0cmlidXRlc1RhYmxlSGVhZGVyOworCitzdHJ1Y3QgQXR0cmlidXRlc1RhYmxlU3RydWN0IHsKKyAgdW5pb24geworICAgIEF0dHJpYnV0ZXNUYWJsZUhlYWRlciAqZmllbGRzOworICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ5dGVzOworICB9IGhlYWRlcjsKKworICBzaXplX3Qgc2l6ZTsKK307CisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmIC8qIF9fY3BsdXNwbHVzICovCisKKyNlbmRpZiAvKiBCUkxUVFlfSU5DTFVERURfQVRCX0lOVEVSTkFMICovCmRpZmYgLS1naXQgYS9Qcm9ncmFtcy9hdGJfdHJhbnNsYXRlLmMgYi9Qcm9ncmFtcy9hdGJfdHJhbnNsYXRlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjZjYjA2YwotLS0gL2Rldi9udWxsCisrKyBiL1Byb2dyYW1zL2F0Yl90cmFuc2xhdGUuYwpAQCAtMCwwICsxLDkyIEBACisvKgorICogQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyAqICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyAqCisgKiBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorICoKKyAqIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyAqCisgKiBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisgKi8KKworI2luY2x1ZGUgInByb2xvZ3VlLmgiCisKKyNpbmNsdWRlICJsb2cuaCIKKyNpbmNsdWRlICJsb2NrLmgiCisjaW5jbHVkZSAiZmlsZS5oIgorI2luY2x1ZGUgImF0Yi5oIgorI2luY2x1ZGUgImF0Yl9pbnRlcm5hbC5oIgorCitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBpbnRlcm5hbEF0dHJpYnV0ZXNUYWJsZUJ5dGVzW10gPSB7CisjaW5jbHVkZSAiYXRiLmF1dG8uaCIKK307CisKK3N0YXRpYyBBdHRyaWJ1dGVzVGFibGUgaW50ZXJuYWxBdHRyaWJ1dGVzVGFibGUgPSB7CisgIC5oZWFkZXIuYnl0ZXMgPSBpbnRlcm5hbEF0dHJpYnV0ZXNUYWJsZUJ5dGVzLAorICAuc2l6ZSA9IDAKK307CisKK0F0dHJpYnV0ZXNUYWJsZSAqYXR0cmlidXRlc1RhYmxlID0gJmludGVybmFsQXR0cmlidXRlc1RhYmxlOworCitzdGF0aWMgTG9ja0Rlc2NyaXB0b3IgKgorZ2V0QXR0cmlidXRlc1RhYmxlTG9jayAodm9pZCkgeworICBzdGF0aWMgTG9ja0Rlc2NyaXB0b3IgKmxvY2sgPSBOVUxMOworICByZXR1cm4gZ2V0TG9ja0Rlc2NyaXB0b3IoJmxvY2ssICJhdHRyaWJ1dGVzLXRhYmxlIik7Cit9CisKK3ZvaWQKK2xvY2tBdHRyaWJ1dGVzVGFibGUgKHZvaWQpIHsKKyAgb2J0YWluRXhjbHVzaXZlTG9jayhnZXRBdHRyaWJ1dGVzVGFibGVMb2NrKCkpOworfQorCit2b2lkCit1bmxvY2tBdHRyaWJ1dGVzVGFibGUgKHZvaWQpIHsKKyAgcmVsZWFzZUxvY2soZ2V0QXR0cmlidXRlc1RhYmxlTG9jaygpKTsKK30KKwordW5zaWduZWQgY2hhcgorY29udmVydEF0dHJpYnV0ZXNUb0RvdHMgKEF0dHJpYnV0ZXNUYWJsZSAqdGFibGUsIHVuc2lnbmVkIGNoYXIgYXR0cmlidXRlcykgeworICByZXR1cm4gdGFibGUtPmhlYWRlci5maWVsZHMtPmF0dHJpYnV0ZXNUb0RvdHNbYXR0cmlidXRlc107Cit9CisKK2ludAorcmVwbGFjZUF0dHJpYnV0ZXNUYWJsZSAoY29uc3QgY2hhciAqZGlyZWN0b3J5LCBjb25zdCBjaGFyICpuYW1lKSB7CisgIEF0dHJpYnV0ZXNUYWJsZSAqbmV3VGFibGUgPSBOVUxMOworCisgIGlmICgqbmFtZSkgeworICAgIGNoYXIgKnBhdGg7CisKKyAgICBpZiAoKHBhdGggPSBtYWtlQXR0cmlidXRlc1RhYmxlUGF0aChkaXJlY3RvcnksIG5hbWUpKSkgeworICAgICAgbG9nTWVzc2FnZShMT0dfREVCVUcsICJjb21waWxpbmcgYXR0cmlidXRlcyB0YWJsZTogJXMiLCBwYXRoKTsKKworICAgICAgaWYgKCEobmV3VGFibGUgPSBjb21waWxlQXR0cmlidXRlc1RhYmxlKHBhdGgpKSkgeworICAgICAgICBsb2dNZXNzYWdlKExPR19FUlIsICIlczogJXMiLCBnZXR0ZXh0KCJjYW5ub3QgY29tcGlsZSBhdHRyaWJ1dGVzIHRhYmxlIiksIHBhdGgpOworICAgICAgfQorCisgICAgICBmcmVlKHBhdGgpOworICAgIH0KKyAgfSBlbHNlIHsKKyAgICBuZXdUYWJsZSA9ICZpbnRlcm5hbEF0dHJpYnV0ZXNUYWJsZTsKKyAgfQorCisgIGlmIChuZXdUYWJsZSkgeworICAgIEF0dHJpYnV0ZXNUYWJsZSAqb2xkVGFibGUgPSBhdHRyaWJ1dGVzVGFibGU7CisKKyAgICBsb2NrQXR0cmlidXRlc1RhYmxlKCk7CisgICAgICBhdHRyaWJ1dGVzVGFibGUgPSBuZXdUYWJsZTsKKyAgICB1bmxvY2tBdHRyaWJ1dGVzVGFibGUoKTsKKworICAgIGRlc3Ryb3lBdHRyaWJ1dGVzVGFibGUob2xkVGFibGUpOworICAgIHJldHVybiAxOworICB9CisKKyAgbG9nTWVzc2FnZShMT0dfRVJSLCAiJXM6ICVzIiwgZ2V0dGV4dCgiY2Fubm90IGxvYWQgYXR0cmlidXRlcyB0YWJsZSIpLCBuYW1lKTsKKyAgcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9Qcm9ncmFtcy9hdXRoLmMgYi9Qcm9ncmFtcy9hdXRoLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzlhYWU5NgotLS0gL2Rldi9udWxsCisrKyBiL1Byb2dyYW1zL2F1dGguYwpAQCAtMCwwICsxLDg1MSBAQAorLyoKKyAqIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisgKiAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisgKgorICogQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKKyNpbmNsdWRlICJwcm9sb2d1ZS5oIgorCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorCisjaWYgZGVmaW5lZChfX01JTkdXMzJfXykKKyNpbmNsdWRlIDx3czJ0Y3BpcC5oPgorCisjZWxpZiBkZWZpbmVkKF9fTVNET1NfXykKKworI2VsaWYgZGVmaW5lZChHUlVCX1JVTlRJTUUpCit0eXBlZGVmIHVuc2lnbmVkIGludCB1aWRfdDsKK3R5cGVkZWYgdW5zaWduZWQgaW50IGdpZF90OworCisjZWxzZSAvKiBVbml4ICovCisjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorI2luY2x1ZGUgPHN5cy91bi5oPgorI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KKyNpbmNsdWRlIDxhcnBhL2luZXQuaD4KKyNpbmNsdWRlIDxuZXRkYi5oPgorCisjaW5jbHVkZSA8cHdkLmg+CisjaW5jbHVkZSA8Z3JwLmg+CisjZW5kaWYgLyogcGxhdGZvcm0tc3BlY2lmaWMgaW5jbHVkZXMgKi8KKworI2lmICFkZWZpbmVkKEFGX0xPQ0FMKSAmJiBkZWZpbmVkKEFGX1VOSVgpCisjZGVmaW5lIEFGX0xPQ0FMIEFGX1VOSVgKKyNlbmRpZiAvKiAhZGVmaW5lZChBRl9MT0NBTCkgJiYgZGVmaW5lZChBRl9VTklYKSAqLworCisjaWYgIWRlZmluZWQoUEZfTE9DQUwpICYmIGRlZmluZWQoUEZfVU5JWCkKKyNkZWZpbmUgUEZfTE9DQUwgUEZfVU5JWAorI2VuZGlmIC8qICFkZWZpbmVkKFBGX0xPQ0FMKSAmJiBkZWZpbmVkKFBGX1VOSVgpICovCisKKyNpbmNsdWRlICJsb2cuaCIKKyNpbmNsdWRlICJzdHJmbXQuaCIKKyNpbmNsdWRlICJwYXJzZS5oIgorI2luY2x1ZGUgImF1dGguaCIKKyNpbmNsdWRlICJhc3luY193YWl0LmgiCisKKy8qIHBlZXIgY3JlZGVudGlhbHMgKi8KKyN1bmRlZiBDQU5fQ0hFQ0tfQ1JFREVOVElBTFMKKwordHlwZWRlZiBzdHJ1Y3QgeworI2lmZGVmIF9fTUlOR1czMl9fCisgIGNvbnN0IGNoYXIgKm5hbWU7CisjZWxzZSAvKiBfX01JTkdXMzJfXyAqLworICB1aWRfdCBpZDsKKyNlbmRpZiAvKiBfX01JTkdXMzJfXyAqLworfSBNZXRob2REZXNjcmlwdG9yX3VzZXI7CisKK3R5cGVkZWYgc3RydWN0IHsKKyNpZmRlZiBfX01JTkdXMzJfXworICBjb25zdCBjaGFyICpuYW1lOworI2Vsc2UgLyogX19NSU5HVzMyX18gKi8KKyAgZ2lkX3QgaWQ7CisjZW5kaWYgLyogX19NSU5HVzMyX18gKi8KK30gTWV0aG9kRGVzY3JpcHRvcl9ncm91cDsKKworI2lmIGRlZmluZWQoX19NSU5HVzMyX18pCisjZGVmaW5lIENBTl9DSEVDS19DUkVERU5USUFMUworCit0eXBlZGVmIHN0cnVjdCB7CisgIGNoYXIgKnVzZXI7Cit9IFBlZXJDcmVkZW50aWFsczsKKworc3RhdGljIGludAorcmV0cmlldmVQZWVyQ3JlZGVudGlhbHMgKFBlZXJDcmVkZW50aWFscyAqY3JlZGVudGlhbHMsIEZpbGVEZXNjcmlwdG9yIGZkKSB7CisgIGNoYXIgYnVmZmVyWzBYMTAwKzFdOworCisgIGlmIChHZXROYW1lZFBpcGVIYW5kbGVTdGF0ZShmZCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgYnVmZmVyLCBzaXplb2YoYnVmZmVyKSkpIHsKKyAgICBidWZmZXJbc2l6ZW9mKGJ1ZmZlcikgLSAxXSA9IDA7CisKKyAgICBpZiAoKGNyZWRlbnRpYWxzLT51c2VyID0gc3RyZHVwKGJ1ZmZlcikpKSB7CisgICAgICByZXR1cm4gMTsKKyAgICB9CisgIH0gZWxzZSB7CisgICAgc3dpdGNoIChHZXRMYXN0RXJyb3IoKSkgeworICAgICAgZGVmYXVsdDoKKyAgICAgICAgbG9nV2luZG93c1N5c3RlbUVycm9yKCJHZXROYW1lZFBpcGVIYW5kbGVTdGF0ZSIpOworCisgICAgICBjYXNlIEVSUk9SX0lOU1VGRklDSUVOVF9CVUZGRVI6IC8qIGJ1ZmZlciB0b28gc21hbGwgKi8KKyAgICAgIGNhc2UgRVJST1JfSU5WQUxJRF9IQU5ETEU6IC8qIG5vdCBhIG5hbWVkIHBpcGUgKi8KKyAgICAgIGNhc2UgRVJST1JfQ0FOTk9UX0lNUEVSU09OQVRFOiAvKiBubyBkYXRhIHRyYW5zZmVycmVkIHlldCAqLworICAgICAgICBicmVhazsKKyAgICB9CisgIH0KKworICByZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQKK3JlbGVhc2VQZWVyQ3JlZGVudGlhbHMgKFBlZXJDcmVkZW50aWFscyAqY3JlZGVudGlhbHMpIHsKKyAgZnJlZShjcmVkZW50aWFscy0+dXNlcik7Cit9CisKK3N0YXRpYyBpbnQKK2NoZWNrUGVlclVzZXIgKFBlZXJDcmVkZW50aWFscyAqY3JlZGVudGlhbHMsIGNvbnN0IE1ldGhvZERlc2NyaXB0b3JfdXNlciAqdXNlcikgeworICByZXR1cm4gc3RyY21wKHVzZXItPm5hbWUsIGNyZWRlbnRpYWxzLT51c2VyKSA9PSAwOworfQorCitzdGF0aWMgaW50CitjaGVja1BlZXJHcm91cCAoUGVlckNyZWRlbnRpYWxzICpjcmVkZW50aWFscywgY29uc3QgTWV0aG9kRGVzY3JpcHRvcl9ncm91cCAqZ3JvdXApIHsKKyAgcmV0dXJuIDA7Cit9CisKKyNlbGlmIGRlZmluZWQoSEFWRV9HRVRQRUVSVUNSRUQpCisjZGVmaW5lIENBTl9DSEVDS19DUkVERU5USUFMUworCisjaW5jbHVkZSA8dWNyZWQuaD4KKworI2lmZGVmIEhBVkVfR0VUWk9ORUlECisjaW5jbHVkZSA8em9uZS5oPgorI2VuZGlmIC8qIEhBVkVfR0VUWk9ORUlEICovCisKK3R5cGVkZWYgdWNyZWRfdCAqUGVlckNyZWRlbnRpYWxzOworCitzdGF0aWMgaW50CityZXRyaWV2ZVBlZXJDcmVkZW50aWFscyAoUGVlckNyZWRlbnRpYWxzICpjcmVkZW50aWFscywgaW50IGZkKSB7CisgICpjcmVkZW50aWFscyA9IE5VTEw7CisgIGlmIChnZXRwZWVydWNyZWQoZmQsIGNyZWRlbnRpYWxzKSA9PSAtMSkgeworICAgIGxvZ1N5c3RlbUVycm9yKCJnZXRwZWVydWNyZWQiKTsKKyAgICByZXR1cm4gMDsKKyAgfQorCisjaWZkZWYgSEFWRV9HRVRaT05FSUQKKyAgaWYgKHVjcmVkX2dldHpvbmVpZCgqY3JlZGVudGlhbHMpICE9IGdldHpvbmVpZCgpKSB7CisgICAgdWNyZWRfZnJlZSgqY3JlZGVudGlhbHMpOworICAgIHJldHVybiAwOworICB9CisjZW5kaWYgLyogSEFWRV9HRVRaT05FSUQgKi8KKworICByZXR1cm4gMTsKK30KKworc3RhdGljIHZvaWQKK3JlbGVhc2VQZWVyQ3JlZGVudGlhbHMgKFBlZXJDcmVkZW50aWFscyAqY3JlZGVudGlhbHMpIHsKKyAgdWNyZWRfZnJlZSgqY3JlZGVudGlhbHMpOworfQorCitzdGF0aWMgaW50CitjaGVja1BlZXJVc2VyIChQZWVyQ3JlZGVudGlhbHMgKmNyZWRlbnRpYWxzLCBjb25zdCBNZXRob2REZXNjcmlwdG9yX3VzZXIgKnVzZXIpIHsKKyAgaWYgKHVzZXItPmlkID09IHVjcmVkX2dldGV1aWQoKmNyZWRlbnRpYWxzKSkgcmV0dXJuIDE7CisgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50CitjaGVja1BlZXJHcm91cCAoUGVlckNyZWRlbnRpYWxzICpjcmVkZW50aWFscywgY29uc3QgTWV0aG9kRGVzY3JpcHRvcl9ncm91cCAqZ3JvdXApIHsKKyAgaWYgKGdyb3VwLT5pZCA9PSB1Y3JlZF9nZXRlZ2lkKCpjcmVkZW50aWFscykpIHJldHVybiAxOworCisgIHsKKyAgICBjb25zdCBnaWRfdCAqZ3JvdXBzOworICAgIGludCBjb3VudCA9IHVjcmVkX2dldGdyb3VwcygqY3JlZGVudGlhbHMsICZncm91cHMpOworICAgIHdoaWxlIChjb3VudCA+IDApCisgICAgICBpZiAoZ3JvdXAtPmlkID09IGdyb3Vwc1stLWNvdW50XSkKKyAgICAgICAgcmV0dXJuIDE7CisgIH0KKworICByZXR1cm4gMDsKK30KKworI2VsaWYgZGVmaW5lZChIQVZFX0dFVFBFRVJFSUQpCisjZGVmaW5lIENBTl9DSEVDS19DUkVERU5USUFMUworCit0eXBlZGVmIHN0cnVjdCB7CisgIHVpZF90IGV1aWQ7CisgIGdpZF90IGVnaWQ7Cit9IFBlZXJDcmVkZW50aWFsczsKKworc3RhdGljIGludAorcmV0cmlldmVQZWVyQ3JlZGVudGlhbHMgKFBlZXJDcmVkZW50aWFscyAqY3JlZGVudGlhbHMsIGludCBmZCkgeworICBpZiAoZ2V0cGVlcmVpZChmZCwgJmNyZWRlbnRpYWxzLT5ldWlkLCAmY3JlZGVudGlhbHMtPmVnaWQpICE9IC0xKSByZXR1cm4gMTsKKyAgbG9nU3lzdGVtRXJyb3IoImdldHBlZXJlaWQiKTsKKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkCityZWxlYXNlUGVlckNyZWRlbnRpYWxzIChQZWVyQ3JlZGVudGlhbHMgKmNyZWRlbnRpYWxzKSB7Cit9CisKK3N0YXRpYyBpbnQKK2NoZWNrUGVlclVzZXIgKFBlZXJDcmVkZW50aWFscyAqY3JlZGVudGlhbHMsIGNvbnN0IE1ldGhvZERlc2NyaXB0b3JfdXNlciAqdXNlcikgeworICByZXR1cm4gdXNlci0+aWQgPT0gY3JlZGVudGlhbHMtPmV1aWQ7Cit9CisKK3N0YXRpYyBpbnQKK2NoZWNrUGVlckdyb3VwIChQZWVyQ3JlZGVudGlhbHMgKmNyZWRlbnRpYWxzLCBjb25zdCBNZXRob2REZXNjcmlwdG9yX2dyb3VwICpncm91cCkgeworICByZXR1cm4gZ3JvdXAtPmlkID09IGNyZWRlbnRpYWxzLT5lZ2lkOworfQorCisjZWxpZiBkZWZpbmVkKFNPX1BFRVJDUkVEKQorI2RlZmluZSBDQU5fQ0hFQ0tfQ1JFREVOVElBTFMKKwordHlwZWRlZiBzdHJ1Y3QgdWNyZWQgUGVlckNyZWRlbnRpYWxzOworCitzdGF0aWMgaW50CityZXRyaWV2ZVBlZXJDcmVkZW50aWFscyAoUGVlckNyZWRlbnRpYWxzICpjcmVkZW50aWFscywgaW50IGZkKSB7CisgIHNvY2tsZW5fdCBsZW5ndGggPSBzaXplb2YoKmNyZWRlbnRpYWxzKTsKKyAgaWYgKGdldHNvY2tvcHQoZmQsIFNPTF9TT0NLRVQsIFNPX1BFRVJDUkVELCBjcmVkZW50aWFscywgJmxlbmd0aCkgIT0gLTEpIHJldHVybiAxOworICBsb2dTeXN0ZW1FcnJvcigiZ2V0c29ja29wdFtTT19QRUVSQ1JFRF0iKTsKKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkCityZWxlYXNlUGVlckNyZWRlbnRpYWxzIChQZWVyQ3JlZGVudGlhbHMgKmNyZWRlbnRpYWxzKSB7Cit9CisKK3N0YXRpYyBpbnQKK2NoZWNrUGVlclVzZXIgKFBlZXJDcmVkZW50aWFscyAqY3JlZGVudGlhbHMsIGNvbnN0IE1ldGhvZERlc2NyaXB0b3JfdXNlciAqdXNlcikgeworICByZXR1cm4gdXNlci0+aWQgPT0gY3JlZGVudGlhbHMtPnVpZDsKK30KKworc3RhdGljIGludAorY2hlY2tQZWVyR3JvdXAgKFBlZXJDcmVkZW50aWFscyAqY3JlZGVudGlhbHMsIGNvbnN0IE1ldGhvZERlc2NyaXB0b3JfZ3JvdXAgKmdyb3VwKSB7CisgIHJldHVybiBncm91cC0+aWQgPT0gY3JlZGVudGlhbHMtPmdpZDsKK30KKworI2Vsc2UgLyogcGVlciBjcmVkZW50aWFscyBtZXRob2QgKi8KKyN3YXJuaW5nIHBlZXIgY3JlZGVudGlhbHMgc3VwcG9ydCBub3QgYXZhaWxhYmxlIG9uIHRoaXMgcGxhdGZvcm0KKyNlbmRpZiAvKiBwZWVyIGNyZWRlbnRpYWxzIG1ldGhvZCAqLworCisvKiBnZW5lcmFsIHR5cGUgZGVmaW5pdGlvbnMgKi8KKwordHlwZWRlZiBpbnQgKCpNZXRob2RQZXJmb3JtKSAoQXV0aERlc2NyaXB0b3IgKmF1dGgsIEZpbGVEZXNjcmlwdG9yIGZkLCB2b2lkICpkYXRhKTsKKwordHlwZWRlZiBzdHJ1Y3QgeworICBjb25zdCBjaGFyICpuYW1lOworICB2b2lkICooKmluaXRpYWxpemUpIChjb25zdCBjaGFyICpwYXJhbWV0ZXIpOworICB2b2lkICgqcmVsZWFzZSkgKHZvaWQgKmRhdGEpOworICBNZXRob2RQZXJmb3JtIGNsaWVudDsKKyAgTWV0aG9kUGVyZm9ybSBzZXJ2ZXI7Cit9IE1ldGhvZERlZmluaXRpb247CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgY29uc3QgTWV0aG9kRGVmaW5pdGlvbiAqZGVmaW5pdGlvbjsKKyAgdm9pZCAqZGF0YTsKK30gTWV0aG9kRGVzY3JpcHRvcjsKKworI2lmZGVmIENBTl9DSEVDS19DUkVERU5USUFMUwordHlwZWRlZiBlbnVtIHsKKyAgUENTX05FRUQsCisgIFBDU19DQU5ULAorICBQQ1NfSEFWRQorfSBQZWVyQ3JlZGVudGlhbHNTdGF0ZTsKKyNlbmRpZiAvKiBDQU5fQ0hFQ0tfQ1JFREVOVElBTFMgKi8KKwordHlwZWRlZiBpbnQgKCpBdXRoUGVyZm9ybSkgKEF1dGhEZXNjcmlwdG9yICphdXRoLCBGaWxlRGVzY3JpcHRvciBmZCk7CisKK3N0cnVjdCBBdXRoRGVzY3JpcHRvclN0cnVjdCB7CisgIGludCBjb3VudDsKKyAgY2hhciAqKnBhcmFtZXRlcnM7CisgIE1ldGhvZERlc2NyaXB0b3IgKm1ldGhvZHM7CisgIEF1dGhQZXJmb3JtIHBlcmZvcm07CisKKyNpZmRlZiBDQU5fQ0hFQ0tfQ1JFREVOVElBTFMKKyAgUGVlckNyZWRlbnRpYWxzU3RhdGUgcGVlckNyZWRlbnRpYWxzU3RhdGU7CisgIFBlZXJDcmVkZW50aWFscyBwZWVyQ3JlZGVudGlhbHM7CisjZW5kaWYgLyogQ0FOX0NIRUNLX0NSRURFTlRJQUxTICovCit9OworCisvKiB0aGUga2V5ZmlsZSBtZXRob2QgKi8KKwordHlwZWRlZiBzdHJ1Y3QgeworICBjb25zdCBjaGFyICpwYXRoOworfSBNZXRob2REZXNjcmlwdG9yX2tleWZpbGU7CisKK3N0YXRpYyB2b2lkICoKK2F1dGhLZXlmaWxlX2luaXRpYWxpemUgKGNvbnN0IGNoYXIgKnBhcmFtZXRlcikgeworICBNZXRob2REZXNjcmlwdG9yX2tleWZpbGUgKmtleWZpbGU7CisKKyAgaWYgKChrZXlmaWxlID0gbWFsbG9jKHNpemVvZigqa2V5ZmlsZSkpKSkgeworICAgIGlmICgqcGFyYW1ldGVyKSB7CisgICAgICBrZXlmaWxlLT5wYXRoID0gcGFyYW1ldGVyOworICAgICAgcmV0dXJuIGtleWZpbGU7CisgICAgfSBlbHNlIHsKKyAgICAgIGxvZ01lc3NhZ2UoTE9HX0VSUiwgInBhdGggdG8ga2V5IGZpbGUgbm90IHNwZWNpZmllZCIpOworICAgIH0KKworICAgIGZyZWUoa2V5ZmlsZSk7CisgIH0gZWxzZSB7CisgICAgbG9nTWFsbG9jRXJyb3IoKTsKKyAgfQorCisgIHJldHVybiBOVUxMOworfQorCitzdGF0aWMgdm9pZAorYXV0aEtleWZpbGVfcmVsZWFzZSAodm9pZCAqZGF0YSkgeworICBNZXRob2REZXNjcmlwdG9yX2tleWZpbGUgKmtleWZpbGUgPSBkYXRhOworICBmcmVlKGtleWZpbGUpOworfQorCitzdGF0aWMgaW50CithdXRoS2V5ZmlsZV9jbGllbnQgKEF1dGhEZXNjcmlwdG9yICphdXRoLCBGaWxlRGVzY3JpcHRvciBmZCwgdm9pZCAqZGF0YSkgeworICByZXR1cm4gMTsKK30KKworc3RhdGljIGludAorYXV0aEtleWZpbGVfc2VydmVyIChBdXRoRGVzY3JpcHRvciAqYXV0aCwgRmlsZURlc2NyaXB0b3IgZmQsIHZvaWQgKmRhdGEpIHsKKyAgTWV0aG9kRGVzY3JpcHRvcl9rZXlmaWxlICprZXlmaWxlID0gZGF0YTsKKyAgbG9nTWVzc2FnZShMT0dfQ0FURUdPUlkoU0VSVkVSX0VWRU5UUyksICJjaGVja2luZyBrZXkgZmlsZTogJXMiLCBrZXlmaWxlLT5wYXRoKTsKKyAgcmV0dXJuIDE7Cit9CisKKyNpZmRlZiBDQU5fQ0hFQ0tfQ1JFREVOVElBTFMKK3N0YXRpYyBpbnQKK2dldFBlZXJDcmVkZW50aWFscyAoQXV0aERlc2NyaXB0b3IgKmF1dGgsIEZpbGVEZXNjcmlwdG9yIGZkKSB7CisgIGlmIChhdXRoLT5wZWVyQ3JlZGVudGlhbHNTdGF0ZSA9PSBQQ1NfTkVFRCkgeworICAgIGF1dGgtPnBlZXJDcmVkZW50aWFsc1N0YXRlID0gcmV0cmlldmVQZWVyQ3JlZGVudGlhbHMoJmF1dGgtPnBlZXJDcmVkZW50aWFscywgZmQpPyBQQ1NfSEFWRTogUENTX0NBTlQ7CisgIH0KKyAgcmV0dXJuIGF1dGgtPnBlZXJDcmVkZW50aWFsc1N0YXRlID09IFBDU19IQVZFOworfQorCisvKiB0aGUgdXNlciBtZXRob2QgKi8KKworc3RhdGljIHZvaWQgKgorYXV0aFVzZXJfaW5pdGlhbGl6ZSAoY29uc3QgY2hhciAqcGFyYW1ldGVyKSB7CisgIE1ldGhvZERlc2NyaXB0b3JfdXNlciAqdXNlcjsKKworICBpZiAoKHVzZXIgPSBtYWxsb2Moc2l6ZW9mKCp1c2VyKSkpKSB7CisjaWZkZWYgX19NSU5HVzMyX18KKyAgICB1c2VyLT5uYW1lID0gcGFyYW1ldGVyOworICAgIHJldHVybiB1c2VyOworI2Vsc2UgLyogX19NSU5HVzMyX18gKi8KKyAgICBpZiAoISpwYXJhbWV0ZXIpIHsKKyAgICAgIHVzZXItPmlkID0gZ2V0ZXVpZCgpOworICAgICAgcmV0dXJuIHVzZXI7CisgICAgfQorCisgICAgeworICAgICAgaW50IHZhbHVlOworICAgICAgaWYgKGlzSW50ZWdlcigmdmFsdWUsIHBhcmFtZXRlcikpIHsKKyAgICAgICAgdXNlci0+aWQgPSB2YWx1ZTsKKyAgICAgICAgcmV0dXJuIHVzZXI7CisgICAgICB9CisgICAgfQorCisgICAgeworICAgICAgY29uc3Qgc3RydWN0IHBhc3N3ZCAqcCA9IGdldHB3bmFtKHBhcmFtZXRlcik7CisgICAgICBpZiAocCkgeworICAgICAgICB1c2VyLT5pZCA9IHAtPnB3X3VpZDsKKyAgICAgICAgcmV0dXJuIHVzZXI7CisgICAgICB9CisgICAgfQorCisgICAgbG9nTWVzc2FnZShMT0dfRVJSLCAidW5rbm93biB1c2VyOiAlcyIsIHBhcmFtZXRlcik7CisgICAgZnJlZSh1c2VyKTsKKyNlbmRpZiAvKiBfX01JTkdXMzJfXyAqLworICB9IGVsc2UgeworICAgIGxvZ01hbGxvY0Vycm9yKCk7CisgIH0KKworICByZXR1cm4gTlVMTDsKK30KKworc3RhdGljIHZvaWQKK2F1dGhVc2VyX3JlbGVhc2UgKHZvaWQgKmRhdGEpIHsKKyAgTWV0aG9kRGVzY3JpcHRvcl91c2VyICp1c2VyID0gZGF0YTsKKyAgZnJlZSh1c2VyKTsKK30KKworc3RhdGljIGludAorYXV0aFVzZXJfc2VydmVyIChBdXRoRGVzY3JpcHRvciAqYXV0aCwgRmlsZURlc2NyaXB0b3IgZmQsIHZvaWQgKmRhdGEpIHsKKyAgTWV0aG9kRGVzY3JpcHRvcl91c2VyICp1c2VyID0gZGF0YTsKKyAgcmV0dXJuIGdldFBlZXJDcmVkZW50aWFscyhhdXRoLCBmZCkgJiYKKyAgICAgICAgIGNoZWNrUGVlclVzZXIoJmF1dGgtPnBlZXJDcmVkZW50aWFscywgdXNlcik7Cit9CisKKy8qIHRoZSBncm91cCBtZXRob2QgKi8KKworc3RhdGljIHZvaWQgKgorYXV0aEdyb3VwX2luaXRpYWxpemUgKGNvbnN0IGNoYXIgKnBhcmFtZXRlcikgeworICBNZXRob2REZXNjcmlwdG9yX2dyb3VwICpncm91cDsKKworICBpZiAoKGdyb3VwID0gbWFsbG9jKHNpemVvZigqZ3JvdXApKSkpIHsKKyNpZmRlZiBfX01JTkdXMzJfXworICAgIGdyb3VwLT5uYW1lID0gcGFyYW1ldGVyOworICAgIHJldHVybiBncm91cDsKKyNlbHNlIC8qIF9fTUlOR1czMl9fICovCisgICAgaWYgKCEqcGFyYW1ldGVyKSB7CisgICAgICBncm91cC0+aWQgPSBnZXRlZ2lkKCk7CisgICAgICByZXR1cm4gZ3JvdXA7CisgICAgfQorCisgICAgeworICAgICAgaW50IHZhbHVlOworICAgICAgaWYgKGlzSW50ZWdlcigmdmFsdWUsIHBhcmFtZXRlcikpIHsKKyAgICAgICAgZ3JvdXAtPmlkID0gdmFsdWU7CisgICAgICAgIHJldHVybiBncm91cDsKKyAgICAgIH0KKyAgICB9CisKKyAgICB7CisgICAgICBjb25zdCBzdHJ1Y3QgZ3JvdXAgKmcgPSBnZXRncm5hbShwYXJhbWV0ZXIpOworICAgICAgaWYgKGcpIHsKKyAgICAgICAgZ3JvdXAtPmlkID0gZy0+Z3JfZ2lkOworICAgICAgICByZXR1cm4gZ3JvdXA7CisgICAgICB9CisgICAgfQorCisgICAgbG9nTWVzc2FnZShMT0dfRVJSLCAidW5rbm93biBncm91cDogJXMiLCBwYXJhbWV0ZXIpOworICAgIGZyZWUoZ3JvdXApOworI2VuZGlmIC8qIF9fTUlOR1czMl9fICovCisgIH0gZWxzZSB7CisgICAgbG9nTWFsbG9jRXJyb3IoKTsKKyAgfQorCisgIHJldHVybiBOVUxMOworfQorCitzdGF0aWMgdm9pZAorYXV0aEdyb3VwX3JlbGVhc2UgKHZvaWQgKmRhdGEpIHsKKyAgTWV0aG9kRGVzY3JpcHRvcl9ncm91cCAqZ3JvdXAgPSBkYXRhOworICBmcmVlKGdyb3VwKTsKK30KKworc3RhdGljIGludAorYXV0aEdyb3VwX3NlcnZlciAoQXV0aERlc2NyaXB0b3IgKmF1dGgsIEZpbGVEZXNjcmlwdG9yIGZkLCB2b2lkICpkYXRhKSB7CisgIE1ldGhvZERlc2NyaXB0b3JfZ3JvdXAgKmdyb3VwID0gZGF0YTsKKyAgcmV0dXJuIGdldFBlZXJDcmVkZW50aWFscyhhdXRoLCBmZCkgJiYKKyAgICAgICAgIGNoZWNrUGVlckdyb3VwKCZhdXRoLT5wZWVyQ3JlZGVudGlhbHMsIGdyb3VwKTsKK30KKworI2lmZGVmIEhBVkVfUE9MS0lUCisjaW5jbHVkZSA8cG9sa2l0L3BvbGtpdC5oPgorCit0eXBlZGVmIHN0cnVjdCB7CisgIFBvbGtpdEF1dGhvcml0eSAqYXV0aG9yaXR5OworfSBNZXRob2REZXNjcmlwdG9yX3BvbGtpdDsKKworc3RhdGljIHZvaWQgKgorYXV0aFBvbGtpdF9pbml0aWFsaXplIChjb25zdCBjaGFyICpwYXJhbWV0ZXIpIHsKKyAgTWV0aG9kRGVzY3JpcHRvcl9wb2xraXQgKnBvbGtpdDsKKworICBpZiAoKHBvbGtpdCA9IG1hbGxvYyhzaXplb2YoKnBvbGtpdCkpKSkgeworICAgIG1lbXNldChwb2xraXQsIDAsIHNpemVvZigqcG9sa2l0KSk7CisKKyAgICB3aGlsZSAoMSkgeworICAgICAgR0Vycm9yICplcnJvciA9IE5VTEw7CisgICAgICBwb2xraXQtPmF1dGhvcml0eSA9IHBvbGtpdF9hdXRob3JpdHlfZ2V0X3N5bmMoTlVMTCwgJmVycm9yKTsKKyAgICAgIGlmIChwb2xraXQtPmF1dGhvcml0eSkgcmV0dXJuIHBvbGtpdDsKKworICAgICAgaW50IHdhaXQgPSAwOworICAgICAgY2hhciBtZXNzYWdlWzBYMTAwXTsKKworICAgICAgU1RSX0JFR0lOKG1lc3NhZ2UsIHNpemVvZihtZXNzYWdlKSk7CisgICAgICBTVFJfUFJJTlRGKCJ1bmFibGUgdG8gY29ubmVjdCB0byBwb2xraXQiKTsKKworICAgICAgaWYgKGVycm9yKSB7CisgICAgICAgIEdRdWFyayBkb21haW4gPSBlcnJvci0+ZG9tYWluOworICAgICAgICBnaW50IGNvZGUgPSBlcnJvci0+Y29kZTsKKworICAgICAgICBTVFJfUFJJTlRGKCI6ICVzICglZCkgJXMgKCVkKSIsCisgICAgICAgICAgICAgICAgICAgZ19xdWFya190b19zdHJpbmcoZG9tYWluKSwgKGludClkb21haW4sCisgICAgICAgICAgICAgICAgICAgZXJyb3ItPm1lc3NhZ2UsIGNvZGUpOworCisgICAgICAgIGdfZXJyb3JfZnJlZShlcnJvcik7CisgICAgICAgIGVycm9yID0gTlVMTDsKKworICAgICAgICBpZiAoKGRvbWFpbiA9PSBHX0lPX0VSUk9SKSB8fCAoY29kZSA9PSBHX0lPX0VSUk9SX05PVF9GT1VORCkpIHdhaXQgPSAxOworICAgICAgfQorCisgICAgICBTVFJfRU5EOworICAgICAgbG9nTWVzc2FnZShMT0dfV0FSTklORywgIiVzIiwgbWVzc2FnZSk7CisKKyAgICAgIGlmICghd2FpdCkgYnJlYWs7CisgICAgICBhc3luY1dhaXQoMTAwMCk7CisgICAgfQorCisgICAgZ19mcmVlKHBvbGtpdCk7CisgIH0gZWxzZSB7CisgICAgbG9nTWFsbG9jRXJyb3IoKTsKKyAgfQorCisgIHJldHVybiBOVUxMOworfQorCitzdGF0aWMgdm9pZAorYXV0aFBvbGtpdF9yZWxlYXNlICh2b2lkICpkYXRhKSB7CisgIE1ldGhvZERlc2NyaXB0b3JfcG9sa2l0ICpwb2xraXQgPSBkYXRhOworICBnX29iamVjdF91bnJlZiAocG9sa2l0LT5hdXRob3JpdHkpOworICBmcmVlKHBvbGtpdCk7Cit9CisKK3N0YXRpYyBpbnQKK2F1dGhQb2xraXRfc2VydmVyIChBdXRoRGVzY3JpcHRvciAqYXV0aCwgRmlsZURlc2NyaXB0b3IgZmQsIHZvaWQgKmRhdGEpIHsKKyAgTWV0aG9kRGVzY3JpcHRvcl9wb2xraXQgKnBvbGtpdCA9IGRhdGE7CisKKyAgc3RydWN0IHVjcmVkIGNyZWQ7CisgIHNvY2tsZW5fdCBsZW5ndGggPSBzaXplb2YoY3JlZCk7CisKKyAgaWYgKGdldHNvY2tvcHQoZmQsIFNPTF9TT0NLRVQsIFNPX1BFRVJDUkVELCAmY3JlZCwgJmxlbmd0aCkgIT0gLTEpIHsKKyAgICBsb2dNZXNzYWdlKExPR19DQVRFR09SWShTRVJWRVJfRVZFTlRTKSwKKyAgICAgICJhdHRlbXB0aW5nIHRvIGF1dGhvcml6ZSBjbGllbnQgKHBpZCAlZCwgdWlkICVkKSB2aWEgcG9sa2l0IiwKKyAgICAgIGNyZWQucGlkLCBjcmVkLnVpZAorICAgICk7CisKKyAgICBpZiAoY3JlZC51aWQgPT0gLTEpIHsKKyAgICAgIGxvZ01lc3NhZ2UoTE9HX0NBVEVHT1JZKFNFUlZFUl9FVkVOVFMpLAorICAgICAgICAidXNlciBub3Qgc3BlY2lmaWVkIGluIGNyZWRlbnRpYWxzIgorICAgICAgKTsKKyAgICB9IGVsc2UgeworICAgICAgUG9sa2l0U3ViamVjdCAqc3ViamVjdCA9IHBvbGtpdF91bml4X3Byb2Nlc3NfbmV3X2Zvcl9vd25lcihjcmVkLnBpZCwgMCwgY3JlZC51aWQpOworCisgICAgICBpZiAoc3ViamVjdCkgeworICAgICAgICBHRXJyb3IgKmVycm9yX2xvY2FsID0gTlVMTDsKKworICAgICAgICBQb2xraXRBdXRob3JpemF0aW9uUmVzdWx0ICpyZXN1bHQgPSBwb2xraXRfYXV0aG9yaXR5X2NoZWNrX2F1dGhvcml6YXRpb25fc3luYygKKyAgICAgICAgICBwb2xraXQtPmF1dGhvcml0eSwJCQkvKiBhdXRob3JpdHkgKi8KKyAgICAgICAgICBzdWJqZWN0LAkJCQkvKiBQb2xraXRTdWJqZWN0IGZvciBjbGllbnQgKi8KKyAgICAgICAgICAib3JnLmExMXkuYnJsYXBpLndyaXRlLWRpc3BsYXkiLAkJLyogbmFtZSBvZiBwb2xraXQgYWN0aW9uICovCisgICAgICAgICAgTlVMTCwJCQkJCS8qIGRldGFpbHMgKi8KKyAgICAgICAgICBQT0xLSVRfQ0hFQ0tfQVVUSE9SSVpBVElPTl9GTEFHU19OT05FLAkvKiBkaXNhbGxvdyBpbnRlcmFjdGlvbiAqLworICAgICAgICAgIE5VTEwsCQkJCQkvKiBHQ2FuY2VsbGFibGUgKi8KKyAgICAgICAgICAmZXJyb3JfbG9jYWwJCQkJLyogcmV0dXJuZWQgZXJyb3IgKi8KKyAgICAgICAgKTsKKworICAgICAgICBpZiAocmVzdWx0KSB7CisgICAgICAgICAgaW50IGlzQXV0aG9yaXplZCA9IHBvbGtpdF9hdXRob3JpemF0aW9uX3Jlc3VsdF9nZXRfaXNfYXV0aG9yaXplZChyZXN1bHQpOworICAgICAgICAgIGdfb2JqZWN0X3VucmVmKHJlc3VsdCk7CisKKyAgICAgICAgICBsb2dNZXNzYWdlKExPR19DQVRFR09SWShTRVJWRVJfRVZFTlRTKSwKKyAgICAgICAgICAgICJwb2xraXRfYXV0aG9yaXR5X2NoZWNrX2F1dGhvcml6YXRpb25fc3luYyByZXR1cm5lZCAlZCIsCisgICAgICAgICAgICBpc0F1dGhvcml6ZWQKKyAgICAgICAgICApOworCisgICAgICAgICAgcmV0dXJuIGlzQXV0aG9yaXplZDsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICBsb2dNZXNzYWdlKExPR19FUlIsICJwb2xraXRfYXV0aG9yaXR5X2NoZWNrX2F1dGhvcml6YXRpb25fc3luYyBlcnJvcjogJXMiLCBlcnJvcl9sb2NhbC0+bWVzc2FnZSk7CisgICAgICAgICAgZ19lcnJvcl9mcmVlKGVycm9yX2xvY2FsKTsKKyAgICAgICAgfQorCisgICAgICAgIGdfb2JqZWN0X3VucmVmKHN1YmplY3QpOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgbG9nU3lzdGVtRXJyb3IoInBvbGtpdF91bml4X3Byb2Nlc3NfbmV3X2Zvcl9vd25lciIpOworICAgICAgfQorICAgIH0KKyAgfSBlbHNlIHsKKyAgICBsb2dTeXN0ZW1FcnJvcigiZ2V0c29ja29wdFtTT19QRUVSQ1JFRF0iKTsKKyAgfQorCisgIHJldHVybiAwOworfQorI2VuZGlmIC8qIEhBVkVfUE9MS0lUICovCisjZW5kaWYgLyogQ0FOX0NIRUNLX0NSRURFTlRJQUxTICovCisKKy8qIGdlbmVyYWwgZnVuY3Rpb25zICovCisKK3N0YXRpYyBjb25zdCBNZXRob2REZWZpbml0aW9uIG1ldGhvZERlZmluaXRpb25zW10gPSB7CisgIHsgLm5hbWUgPSAia2V5ZmlsZSIsCisgICAgLmluaXRpYWxpemUgPSBhdXRoS2V5ZmlsZV9pbml0aWFsaXplLAorICAgIC5yZWxlYXNlID0gYXV0aEtleWZpbGVfcmVsZWFzZSwKKyAgICAuY2xpZW50ID0gYXV0aEtleWZpbGVfY2xpZW50LAorICAgIC5zZXJ2ZXIgPSBhdXRoS2V5ZmlsZV9zZXJ2ZXIKKyAgfSwKKworI2lmZGVmIENBTl9DSEVDS19DUkVERU5USUFMUworICB7IC5uYW1lID0gInVzZXIiLAorICAgIC5pbml0aWFsaXplID0gYXV0aFVzZXJfaW5pdGlhbGl6ZSwKKyAgICAucmVsZWFzZSA9IGF1dGhVc2VyX3JlbGVhc2UsCisgICAgLmNsaWVudCA9IE5VTEwsCisgICAgLnNlcnZlciA9IGF1dGhVc2VyX3NlcnZlcgorICB9LAorCisgIHsgLm5hbWUgPSAiZ3JvdXAiLAorICAgIC5pbml0aWFsaXplID0gYXV0aEdyb3VwX2luaXRpYWxpemUsCisgICAgLnJlbGVhc2UgPSBhdXRoR3JvdXBfcmVsZWFzZSwKKyAgICAuY2xpZW50ID0gTlVMTCwKKyAgICAuc2VydmVyID0gYXV0aEdyb3VwX3NlcnZlcgorICB9LAorCisjaWZkZWYgSEFWRV9QT0xLSVQKKyAgeyAubmFtZSA9ICJwb2xraXQiLAorICAgIC5pbml0aWFsaXplID0gYXV0aFBvbGtpdF9pbml0aWFsaXplLAorICAgIC5yZWxlYXNlID0gYXV0aFBvbGtpdF9yZWxlYXNlLAorICAgIC5jbGllbnQgPSBOVUxMLAorICAgIC5zZXJ2ZXIgPSBhdXRoUG9sa2l0X3NlcnZlcgorICB9LAorI2VuZGlmIC8qIEhBVkVfUE9MS0lUICovCisjZW5kaWYgLyogQ0FOX0NIRUNLX0NSRURFTlRJQUxTICovCisKKyAgey5uYW1lID0gTlVMTH0KK307CisKK3N0YXRpYyB2b2lkCityZWxlYXNlTWV0aG9kRGVzY3JpcHRvciAoTWV0aG9kRGVzY3JpcHRvciAqbWV0aG9kKSB7CisgIGlmIChtZXRob2QtPmRhdGEpIHsKKyAgICBpZiAobWV0aG9kLT5kZWZpbml0aW9uLT5yZWxlYXNlKSBtZXRob2QtPmRlZmluaXRpb24tPnJlbGVhc2UobWV0aG9kLT5kYXRhKTsKKyAgICBtZXRob2QtPmRhdGEgPSBOVUxMOworICB9Cit9CisKK3N0YXRpYyB2b2lkCityZWxlYXNlTWV0aG9kRGVzY3JpcHRvcnMgKEF1dGhEZXNjcmlwdG9yICphdXRoLCBpbnQgY291bnQpIHsKKyAgd2hpbGUgKGNvdW50ID4gMCkgcmVsZWFzZU1ldGhvZERlc2NyaXB0b3IoJmF1dGgtPm1ldGhvZHNbLS1jb3VudF0pOworfQorCitzdGF0aWMgaW50Citpbml0aWFsaXplTWV0aG9kRGVzY3JpcHRvciAoTWV0aG9kRGVzY3JpcHRvciAqbWV0aG9kLCBjb25zdCBjaGFyICpwYXJhbWV0ZXIpIHsKKyAgY29uc3QgY2hhciAqbmFtZTsKKyAgaW50IG5hbWVMZW5ndGg7CisKKyAgaWYgKChwYXJhbWV0ZXIgPSBzdHJjaHIobmFtZT1wYXJhbWV0ZXIsICc6JykpKSB7CisgICAgbmFtZUxlbmd0aCA9IHBhcmFtZXRlcisrIC0gbmFtZTsKKyAgfSBlbHNlIHsKKyAgICBwYXJhbWV0ZXIgPSBuYW1lICsgKG5hbWVMZW5ndGggPSBzdHJsZW4obmFtZSkpOworICB9CisKKyAgeworICAgIGNvbnN0IE1ldGhvZERlZmluaXRpb24gKmRlZmluaXRpb24gPSBtZXRob2REZWZpbml0aW9uczsKKyAgICB3aGlsZSAoZGVmaW5pdGlvbi0+bmFtZSkgeworICAgICAgaWYgKChuYW1lTGVuZ3RoID09IHN0cmxlbihkZWZpbml0aW9uLT5uYW1lKSkgJiYKKyAgICAgICAgICAoc3RybmNtcChuYW1lLCBkZWZpbml0aW9uLT5uYW1lLCBuYW1lTGVuZ3RoKSA9PSAwKSkgeworICAgICAgICB2b2lkICpkYXRhID0gZGVmaW5pdGlvbi0+aW5pdGlhbGl6ZShwYXJhbWV0ZXIpOworICAgICAgICBpZiAoIWRhdGEpIHJldHVybiAwOworCisgICAgICAgIG1ldGhvZC0+ZGVmaW5pdGlvbiA9IGRlZmluaXRpb247CisgICAgICAgIG1ldGhvZC0+ZGF0YSA9IGRhdGE7CisgICAgICAgIHJldHVybiAxOworICAgICAgfQorCisgICAgICArK2RlZmluaXRpb247CisgICAgfQorICB9CisKKyAgbG9nTWVzc2FnZShMT0dfV0FSTklORywgInVua25vd24gYXV0aG9yaXphdGlvbiBtZXRob2Q6ICUuKnMiLCBuYW1lTGVuZ3RoLCBuYW1lKTsKKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK2luaXRpYWxpemVNZXRob2REZXNjcmlwdG9ycyAoQXV0aERlc2NyaXB0b3IgKmF1dGgpIHsKKyAgaW50IGluZGV4ID0gMDsKKyAgd2hpbGUgKGluZGV4IDwgYXV0aC0+Y291bnQpIHsKKyAgICBpZiAoIWluaXRpYWxpemVNZXRob2REZXNjcmlwdG9yKCZhdXRoLT5tZXRob2RzW2luZGV4XSwgYXV0aC0+cGFyYW1ldGVyc1tpbmRleF0pKSB7CisgICAgICByZWxlYXNlTWV0aG9kRGVzY3JpcHRvcnMoYXV0aCwgaW5kZXgpOworICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgICsraW5kZXg7CisgIH0KKyAgcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBBdXRoRGVzY3JpcHRvciAqCithdXRoQmVnaW4gKGNvbnN0IGNoYXIgKnBhcmFtZXRlciwgY29uc3QgY2hhciAqZGVmYXVsdFBhcmFtZXRlciwgQXV0aFBlcmZvcm0gcGVyZm9ybSkgeworICBBdXRoRGVzY3JpcHRvciAqYXV0aDsKKworICBpZiAoKGF1dGggPSBtYWxsb2Moc2l6ZW9mKCphdXRoKSkpKSB7CisgICAgYXV0aC0+cGVyZm9ybSA9IHBlcmZvcm07CisKKyAgICBpZiAoIXBhcmFtZXRlcikgcGFyYW1ldGVyID0gIiI7CisgICAgaWYgKCEqcGFyYW1ldGVyKSB7CisgICAgICBwYXJhbWV0ZXIgPSBkZWZhdWx0UGFyYW1ldGVyOworICAgIH0gZWxzZSBpZiAoc3RyY21wKHBhcmFtZXRlciwgIm5vbmUiKSA9PSAwKSB7CisgICAgICBwYXJhbWV0ZXIgPSAiIjsKKyAgICB9CisKKyAgICBpZiAoKGF1dGgtPnBhcmFtZXRlcnMgPSBzcGxpdFN0cmluZyhwYXJhbWV0ZXIsICcrJywgJmF1dGgtPmNvdW50KSkpIHsKKyAgICAgIGlmICghYXV0aC0+Y291bnQpIHsKKyAgICAgICAgYXV0aC0+bWV0aG9kcyA9IE5VTEw7CisgICAgICAgIHJldHVybiBhdXRoOworICAgICAgfQorCisgICAgICBpZiAoKGF1dGgtPm1ldGhvZHMgPSBtYWxsb2MoQVJSQVlfU0laRShhdXRoLT5tZXRob2RzLCBhdXRoLT5jb3VudCkpKSkgeworICAgICAgICBpZiAoaW5pdGlhbGl6ZU1ldGhvZERlc2NyaXB0b3JzKGF1dGgpKSByZXR1cm4gYXV0aDsKKworICAgICAgICBmcmVlKGF1dGgtPm1ldGhvZHMpOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgbG9nTWFsbG9jRXJyb3IoKTsKKyAgICAgIH0KKworICAgICAgZGVhbGxvY2F0ZVN0cmluZ3MoYXV0aC0+cGFyYW1ldGVycyk7CisgICAgfQorCisgICAgZnJlZShhdXRoKTsKKyAgfSBlbHNlIHsKKyAgICBsb2dNYWxsb2NFcnJvcigpOworICB9CisKKyAgcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBpbnQKK2F1dGhQZXJmb3JtQ2xpZW50IChBdXRoRGVzY3JpcHRvciAqYXV0aCwgRmlsZURlc2NyaXB0b3IgZmQpIHsKKyAgcmV0dXJuIDE7Cit9CisKK0F1dGhEZXNjcmlwdG9yICoKK2F1dGhCZWdpbkNsaWVudCAoY29uc3QgY2hhciAqcGFyYW1ldGVyKSB7CisgIHJldHVybiBhdXRoQmVnaW4ocGFyYW1ldGVyLCAiIiwgYXV0aFBlcmZvcm1DbGllbnQpOworfQorCitzdGF0aWMgaW50CithdXRoUGVyZm9ybVNlcnZlciAoQXV0aERlc2NyaXB0b3IgKmF1dGgsIEZpbGVEZXNjcmlwdG9yIGZkKSB7CisgIGludCBvayA9IDA7CisKKyAgaWYgKCFhdXRoLT5jb3VudCkgcmV0dXJuIDE7CisKKyNpZmRlZiBDQU5fQ0hFQ0tfQ1JFREVOVElBTFMKKyAgYXV0aC0+cGVlckNyZWRlbnRpYWxzU3RhdGUgPSBQQ1NfTkVFRDsKKyNlbmRpZiAvKiBDQU5fQ0hFQ0tfQ1JFREVOVElBTFMgKi8KKworICB7CisgICAgaW50IGluZGV4OworICAgIGZvciAoaW5kZXg9MDsgaW5kZXg8YXV0aC0+Y291bnQ7ICsraW5kZXgpIHsKKyAgICAgIGNvbnN0IE1ldGhvZERlc2NyaXB0b3IgKm1ldGhvZCA9ICZhdXRoLT5tZXRob2RzW2luZGV4XTsKKworICAgICAgaWYgKCFtZXRob2QtPmRlZmluaXRpb24tPnNlcnZlcikgY29udGludWU7CisgICAgICBpZiAobWV0aG9kLT5kZWZpbml0aW9uLT5jbGllbnQpIGNvbnRpbnVlOworCisgICAgICBpZiAobWV0aG9kLT5kZWZpbml0aW9uLT5zZXJ2ZXIoYXV0aCwgZmQsIG1ldGhvZC0+ZGF0YSkpIHsKKyAgICAgICAgb2sgPSAxOworICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICB9CisgIH0KKworI2lmZGVmIENBTl9DSEVDS19DUkVERU5USUFMUworICBpZiAoYXV0aC0+cGVlckNyZWRlbnRpYWxzU3RhdGUgIT0gUENTX05FRUQpIHsKKyAgICBpZiAoYXV0aC0+cGVlckNyZWRlbnRpYWxzU3RhdGUgPT0gUENTX0hBVkUpIHJlbGVhc2VQZWVyQ3JlZGVudGlhbHMoJmF1dGgtPnBlZXJDcmVkZW50aWFscyk7CisgICAgaWYgKCFvaykgbG9nTWVzc2FnZShMT0dfRVJSLCAibm8gbWF0Y2hpbmcgdXNlciBvciBncm91cCIpOworICB9CisjZW5kaWYgLyogQ0FOX0NIRUNLX0NSRURFTlRJQUxTICovCisKKyAgaWYgKCFvaykgeworICAgIGludCBpbmRleDsKKyAgICBmb3IgKGluZGV4PTA7IGluZGV4PGF1dGgtPmNvdW50OyArK2luZGV4KSB7CisgICAgICBjb25zdCBNZXRob2REZXNjcmlwdG9yICptZXRob2QgPSAmYXV0aC0+bWV0aG9kc1tpbmRleF07CisKKyAgICAgIGlmICghbWV0aG9kLT5kZWZpbml0aW9uLT5zZXJ2ZXIpIGNvbnRpbnVlOworICAgICAgaWYgKCFtZXRob2QtPmRlZmluaXRpb24tPmNsaWVudCkgY29udGludWU7CisgICAgfQorICB9CisKKyAgcmV0dXJuIG9rOworfQorCitBdXRoRGVzY3JpcHRvciAqCithdXRoQmVnaW5TZXJ2ZXIgKGNvbnN0IGNoYXIgKnBhcmFtZXRlcikgeworICByZXR1cm4gYXV0aEJlZ2luKHBhcmFtZXRlciwgInVzZXIiLCBhdXRoUGVyZm9ybVNlcnZlcik7Cit9CisKK3ZvaWQKK2F1dGhFbmQgKEF1dGhEZXNjcmlwdG9yICphdXRoKSB7CisgIHJlbGVhc2VNZXRob2REZXNjcmlwdG9ycyhhdXRoLCBhdXRoLT5jb3VudCk7CisgIGlmIChhdXRoLT5tZXRob2RzKSBmcmVlKGF1dGgtPm1ldGhvZHMpOworICBkZWFsbG9jYXRlU3RyaW5ncyhhdXRoLT5wYXJhbWV0ZXJzKTsKKyAgZnJlZShhdXRoKTsKK30KKworaW50CithdXRoUGVyZm9ybSAoQXV0aERlc2NyaXB0b3IgKmF1dGgsIEZpbGVEZXNjcmlwdG9yIGZkKSB7CisgIHJldHVybiBhdXRoLT5wZXJmb3JtKGF1dGgsIGZkKTsKK30KKwordm9pZAorZm9ybWF0QWRkcmVzcyAoCisgIGNoYXIgKmJ1ZmZlciwgc2l6ZV90IGJ1ZmZlclNpemUsCisgIGNvbnN0IHZvaWQgKmFkZHJlc3MsIHNvY2tsZW5fdCBhZGRyZXNzU2l6ZQorKSB7CisjaWZkZWYgQUZfSU5FVAorICBjb25zdCBzdHJ1Y3Qgc29ja2FkZHIgKnNhID0gYWRkcmVzczsKKworICBzd2l0Y2ggKHNhLT5zYV9mYW1pbHkpIHsKKyNpZm5kZWYgX19NSU5HVzMyX18KKyAgICBjYXNlIEFGX0xPQ0FMOiB7CisgICAgICBjb25zdCBzdHJ1Y3Qgc29ja2FkZHJfdW4gKmxvY2FsID0gYWRkcmVzczsKKworICAgICAgaWYgKGFkZHJlc3NTaXplIDw9IHNpemVvZihzYV9mYW1pbHlfdCkpIHsKKyAgICAgICAgc25wcmludGYoYnVmZmVyLCBidWZmZXJTaXplLCAibG9jYWwgPHVubmFtZWQ+Iik7CisgICAgICB9IGVsc2UgeworICAgICAgICBzbnByaW50ZihidWZmZXIsIGJ1ZmZlclNpemUsICJsb2NhbCAlcyIsIGxvY2FsLT5zdW5fcGF0aCk7CisgICAgICB9CisgICAgICBicmVhazsKKyAgICB9CisjZW5kaWYgLyogX19NSU5HVzMyX18gKi8KKworICAgIGNhc2UgQUZfSU5FVDogeworICAgICAgY29uc3Qgc3RydWN0IHNvY2thZGRyX2luICppbmV0ID0gYWRkcmVzczsKKworICAgICAgc25wcmludGYoYnVmZmVyLCBidWZmZXJTaXplLCAiaW5ldCAlczolZCIsIGluZXRfbnRvYShpbmV0LT5zaW5fYWRkciksIG50b2hzKGluZXQtPnNpbl9wb3J0KSk7CisgICAgICBicmVhazsKKyAgICB9CisKKyAgICBkZWZhdWx0OgorI2lmIGRlZmluZWQoSEFWRV9HRVROQU1FSU5GTykgJiYgIWRlZmluZWQoV0lORE9XUykKKyAgICAgIHsKKyAgICAgICAgY2hhciBob3N0W05JX01BWEhPU1RdOworICAgICAgICBjaGFyIHNlcnZpY2VbTklfTUFYU0VSVl07CisgICAgICAgIGludCBlcnI7CisKKyAgICAgICAgaWYgKCEoZXJyID0gZ2V0bmFtZWluZm8oYWRkcmVzcywgYWRkcmVzc1NpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhvc3QsIHNpemVvZihob3N0KSwgc2VydmljZSwgc2l6ZW9mKHNlcnZpY2UpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOSV9OVU1FUklDSE9TVCB8IE5JX05VTUVSSUNTRVJWKSkpIHsKKyAgICAgICAgICBzbnByaW50ZihidWZmZXIsIGJ1ZmZlclNpemUsICJhZj0lZCAlczolcyIsIHNhLT5zYV9mYW1pbHksIGhvc3QsIHNlcnZpY2UpOworICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGVyciAhPSBFQUlfRkFNSUxZKSB7CisjaWZkZWYgSEFWRV9HQUlfU1RSRVJST1IKKyAgICAgICAgICBzbnByaW50ZihidWZmZXIsIGJ1ZmZlclNpemUsICJyZXZlcnNlIGxvb2t1cCBlcnJvciBmb3IgYWRkcmVzcyBmYW1pbHkgJWQ6ICVzIiwgCisgICAgICAgICAgICAgICAgICAgc2EtPnNhX2ZhbWlseSwKKyNpZmRlZiBFQUlfU1lTVEVNCisgICAgICAgICAgICAgICAgICAgKGVyciA9PSBFQUlfU1lTVEVNKT8gc3RyZXJyb3IoZXJybm8pOgorI2VuZGlmIC8qIEVBSV9TWVNURU0gKi8KKyAgICAgICAgICAgICAgICAgICBnYWlfc3RyZXJyb3IoZXJyKSk7CisjZWxzZSAvKiBIQVZFX0dBSV9TVFJFUlJPUiAqLworICAgICAgICAgIHNucHJpbnRmKGJ1ZmZlciwgYnVmZmVyU2l6ZSwgInJldmVyc2UgbG9va3VwIGVycm9yICVkIGZvciBhZGRyZXNzIGZhbWlseSAlZCIsCisgICAgICAgICAgICAgICAgICAgZXJyLCBzYS0+c2FfZmFtaWx5KTsKKyNlbmRpZiAvKiBIQVZFX0dBSV9TVFJFUlJPUiAqLworICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICB9CisjZW5kaWYgLyogR0VUTkFNRUlORk8gKi8KKworICAgICAgeworICAgICAgICBTVFJfQkVHSU4oYnVmZmVyLCBidWZmZXJTaXplKTsKKyAgICAgICAgU1RSX1BSSU5URigiYWRkcmVzcyBmYW1pbHkgJWQ6Iiwgc2EtPnNhX2ZhbWlseSk7CisKKyAgICAgICAgeworICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ5dGUgPSBhZGRyZXNzOworICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmVuZCA9IGJ5dGUgKyBhZGRyZXNzU2l6ZTsKKworICAgICAgICAgIHdoaWxlIChieXRlIDwgZW5kKSBTVFJfUFJJTlRGKCIgJTAyWCIsICpieXRlKyspOworICAgICAgICB9CisKKyAgICAgICAgU1RSX0VORDsKKyAgICAgIH0KKyAgICAgIGJyZWFrOworICB9CisjZWxzZSAvKiBBRl9JTkVUICovCisgIHNucHJpbnRmKGJ1ZmZlciwgYnVmZmVyU2l6ZSwgInVua25vd24iKTsKKyNlbmRpZiAvKiBBRl9JTkVUICovCit9CmRpZmYgLS1naXQgYS9Qcm9ncmFtcy9iZWVwLmMgYi9Qcm9ncmFtcy9iZWVwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjM3NmE3OQotLS0gL2Rldi9udWxsCisrKyBiL1Byb2dyYW1zL2JlZXAuYwpAQCAtMCwwICsxLDM5IEBACisvKgorICogQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyAqICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyAqCisgKiBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorICoKKyAqIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyAqCisgKiBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisgKi8KKworI2luY2x1ZGUgInByb2xvZ3VlLmgiCisKKyNpbmNsdWRlICJhc3luY193YWl0LmgiCisjaW5jbHVkZSAiYmVlcC5oIgorCitpbnQKK3BsYXlCZWVwIChCZWVwRnJlcXVlbmN5IGZyZXF1ZW5jeSwgQmVlcER1cmF0aW9uIGR1cmF0aW9uKSB7CisgIGlmIChhc3luY2hyb25vdXNCZWVwKGZyZXF1ZW5jeSwgZHVyYXRpb24qNCkpIHsKKyAgICBhc3luY1dhaXQoZHVyYXRpb24pOworICAgIHN0b3BCZWVwKCk7CisgICAgcmV0dXJuIDE7CisgIH0KKworICBpZiAoc3RhcnRCZWVwKGZyZXF1ZW5jeSkpIHsKKyAgICBhc3luY1dhaXQoZHVyYXRpb24pOworICAgIHN0b3BCZWVwKCk7CisgICAgcmV0dXJuIDE7CisgIH0KKworICByZXR1cm4gc3luY2hyb25vdXNCZWVwKGZyZXF1ZW5jeSwgZHVyYXRpb24pOworfQpkaWZmIC0tZ2l0IGEvUHJvZ3JhbXMvYmVlcF9saW51eC5jIGIvUHJvZ3JhbXMvYmVlcF9saW51eC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIwNjNiYzUKLS0tIC9kZXYvbnVsbAorKysgYi9Qcm9ncmFtcy9iZWVwX2xpbnV4LmMKQEAgLTAsMCArMSw5NSBAQAorLyoKKyAqIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisgKiAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisgKgorICogQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKKyNpbmNsdWRlICJwcm9sb2d1ZS5oIgorCisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxmY250bC5oPgorI2luY2x1ZGUgPHN5cy9pb2N0bC5oPgorI2luY2x1ZGUgPGxpbnV4L2tkLmg+CisKKyNpbmNsdWRlICJsb2cuaCIKKyNpbmNsdWRlICJiZWVwLmgiCisjaW5jbHVkZSAic3lzdGVtX2xpbnV4LmgiCisKKyNkZWZpbmUgQkVFUF9ERVZJQ0VfUEFUSCAiL2Rldi90dHkwIgorI2RlZmluZSBUSUNLU19QRVJfU0VDT05EIDExOTMxODAKKworc3RhdGljIGludCBiZWVwRGV2aWNlID0gSU5WQUxJRF9GSUxFX0RFU0NSSVBUT1I7CisKK3N0YXRpYyBpbmxpbmUgQmVlcEZyZXF1ZW5jeQorZ2V0VGlja3NQZXJXYXZlIChCZWVwRnJlcXVlbmN5IGZyZXF1ZW5jeSkgeworICByZXR1cm4gZnJlcXVlbmN5PyAoVElDS1NfUEVSX1NFQ09ORCAvIGZyZXF1ZW5jeSk6IDA7Cit9CisKK2ludAorY2FuQmVlcCAodm9pZCkgeworICBpZiAoYmVlcERldmljZSA9PSBJTlZBTElEX0ZJTEVfREVTQ1JJUFRPUikgeworICAgIGNvbnN0IGNoYXIgKnBhdGggPSBCRUVQX0RFVklDRV9QQVRIOworICAgIGludCBkZXZpY2UgPSBvcGVuKHBhdGgsIE9fV1JPTkxZKTsKKworICAgIGlmIChkZXZpY2UgPT0gLTEpIHsKKyAgICAgIGxvZ01lc3NhZ2UoTE9HX1dBUk5JTkcsICJjYW4ndCBvcGVuIGJlZXAgZGV2aWNlOiAlczogJXMiLCBwYXRoLCBzdHJlcnJvcihlcnJubykpOworICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgYmVlcERldmljZSA9IGRldmljZTsKKyAgICBpbnN0YWxsU3BlYWtlck1vZHVsZSgpOworICB9CisKKyAgcmV0dXJuIDE7Cit9CisKK2ludAorc3luY2hyb25vdXNCZWVwIChCZWVwRnJlcXVlbmN5IGZyZXF1ZW5jeSwgQmVlcER1cmF0aW9uIGR1cmF0aW9uKSB7CisgIHJldHVybiAwOworfQorCitpbnQKK2FzeW5jaHJvbm91c0JlZXAgKEJlZXBGcmVxdWVuY3kgZnJlcXVlbmN5LCBCZWVwRHVyYXRpb24gZHVyYXRpb24pIHsKKyAgaWYgKGJlZXBEZXZpY2UgIT0gSU5WQUxJRF9GSUxFX0RFU0NSSVBUT1IpIHsKKyAgICBpZiAoaW9jdGwoYmVlcERldmljZSwgS0RNS1RPTkUsICgoZHVyYXRpb24gPDwgMFgxMCkgfCBnZXRUaWNrc1BlcldhdmUoZnJlcXVlbmN5KSkpICE9IC0xKSByZXR1cm4gMTsKKyAgICBsb2dTeXN0ZW1FcnJvcigiaW9jdGxbS0RNS1RPTkVdIik7CisgIH0KKworICByZXR1cm4gMDsKK30KKworaW50CitzdGFydEJlZXAgKEJlZXBGcmVxdWVuY3kgZnJlcXVlbmN5KSB7CisgIGlmIChiZWVwRGV2aWNlICE9IElOVkFMSURfRklMRV9ERVNDUklQVE9SKSB7CisgICAgaWYgKGlvY3RsKGJlZXBEZXZpY2UsIEtJT0NTT1VORCwgZ2V0VGlja3NQZXJXYXZlKGZyZXF1ZW5jeSkpICE9IC0xKSByZXR1cm4gMTsKKyAgICBsb2dTeXN0ZW1FcnJvcigiaW9jdGxbS0lPQ1NPVU5EXSIpOworICB9CisKKyAgcmV0dXJuIDA7Cit9CisKK2ludAorc3RvcEJlZXAgKHZvaWQpIHsKKyAgcmV0dXJuIHN0YXJ0QmVlcCgwKTsKK30KKwordm9pZAorZW5kQmVlcCAodm9pZCkgeworICBpZiAoYmVlcERldmljZSAhPSBJTlZBTElEX0ZJTEVfREVTQ1JJUFRPUikgeworICAgIGNsb3NlKGJlZXBEZXZpY2UpOworICAgIGJlZXBEZXZpY2UgPSBJTlZBTElEX0ZJTEVfREVTQ1JJUFRPUjsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvUHJvZ3JhbXMvYmVlcF9tc2Rvcy5jIGIvUHJvZ3JhbXMvYmVlcF9tc2Rvcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhmNDAwZDQKLS0tIC9kZXYvbnVsbAorKysgYi9Qcm9ncmFtcy9iZWVwX21zZG9zLmMKQEAgLTAsMCArMSw1NCBAQAorLyoKKyAqIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisgKiAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisgKgorICogQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKKyNpbmNsdWRlICJwcm9sb2d1ZS5oIgorCisjaW5jbHVkZSA8cGMuaD4KKworI2luY2x1ZGUgImJlZXAuaCIKKworaW50CitjYW5CZWVwICh2b2lkKSB7CisgIHJldHVybiAxOworfQorCitpbnQKK2FzeW5jaHJvbm91c0JlZXAgKEJlZXBGcmVxdWVuY3kgZnJlcXVlbmN5LCBCZWVwRHVyYXRpb24gZHVyYXRpb24pIHsKKyAgcmV0dXJuIDA7Cit9CisKK2ludAorc3luY2hyb25vdXNCZWVwIChCZWVwRnJlcXVlbmN5IGZyZXF1ZW5jeSwgQmVlcER1cmF0aW9uIGR1cmF0aW9uKSB7CisgIHJldHVybiAwOworfQorCitpbnQKK3N0YXJ0QmVlcCAoQmVlcEZyZXF1ZW5jeSBmcmVxdWVuY3kpIHsKKyAgc291bmQoZnJlcXVlbmN5KTsKKyAgcmV0dXJuIDE7Cit9CisKK2ludAorc3RvcEJlZXAgKHZvaWQpIHsKKyAgbm9zb3VuZCgpOworICByZXR1cm4gMTsKK30KKwordm9pZAorZW5kQmVlcCAodm9pZCkgeworfQpkaWZmIC0tZ2l0IGEvUHJvZ3JhbXMvYmVlcF9ub25lLmMgYi9Qcm9ncmFtcy9iZWVwX25vbmUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YTRhNTNjCi0tLSAvZGV2L251bGwKKysrIGIvUHJvZ3JhbXMvYmVlcF9ub25lLmMKQEAgLTAsMCArMSw1MCBAQAorLyoKKyAqIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisgKiAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisgKgorICogQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKKyNpbmNsdWRlICJwcm9sb2d1ZS5oIgorCisjaW5jbHVkZSAiYmVlcC5oIgorCitpbnQKK2NhbkJlZXAgKHZvaWQpIHsKKyAgcmV0dXJuIDA7Cit9CisKK2ludAorYXN5bmNocm9ub3VzQmVlcCAoQmVlcEZyZXF1ZW5jeSBmcmVxdWVuY3ksIEJlZXBEdXJhdGlvbiBkdXJhdGlvbikgeworICByZXR1cm4gMDsKK30KKworaW50CitzeW5jaHJvbm91c0JlZXAgKEJlZXBGcmVxdWVuY3kgZnJlcXVlbmN5LCBCZWVwRHVyYXRpb24gZHVyYXRpb24pIHsKKyAgcmV0dXJuIDA7Cit9CisKK2ludAorc3RhcnRCZWVwIChCZWVwRnJlcXVlbmN5IGZyZXF1ZW5jeSkgeworICByZXR1cm4gMDsKK30KKworaW50CitzdG9wQmVlcCAodm9pZCkgeworICByZXR1cm4gMDsKK30KKwordm9pZAorZW5kQmVlcCAodm9pZCkgeworfQpkaWZmIC0tZ2l0IGEvUHJvZ3JhbXMvYmVlcF9zb2xhcmlzLmMgYi9Qcm9ncmFtcy9iZWVwX3NvbGFyaXMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZTRjM2M2Ci0tLSAvZGV2L251bGwKKysrIGIvUHJvZ3JhbXMvYmVlcF9zb2xhcmlzLmMKQEAgLTAsMCArMSw4MCBAQAorLyoKKyAqIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisgKiAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisgKgorICogQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKKyNpbmNsdWRlICJwcm9sb2d1ZS5oIgorCisjaW5jbHVkZSA8ZmNudGwuaD4KKyNpbmNsdWRlIDxzeXMva2Jpby5oPgorI2luY2x1ZGUgPHN5cy9rYmQuaD4KKworI2luY2x1ZGUgImxvZy5oIgorI2luY2x1ZGUgImJlZXAuaCIKKworc3RhdGljIGludAorZ2V0S2V5Ym9hcmQgKHZvaWQpIHsKKyAgc3RhdGljIGludCBrZXlib2FyZCA9IC0xOworICBpZiAoa2V5Ym9hcmQgPT0gLTEpIHsKKyAgICBpZiAoKGtleWJvYXJkID0gb3BlbigiL2Rldi9rYmQiLCBPX1dST05MWSkpICE9IC0xKSB7CisgICAgICBsb2dNZXNzYWdlKExPR19ERUJVRywgImtleWJvYXJkIG9wZW5lZDogZmQ9JWQiLCBrZXlib2FyZCk7CisgICAgfSBlbHNlIHsKKyAgICAgIGxvZ1N5c3RlbUVycm9yKCJrZXlib2FyZCBvcGVuIik7CisgICAgfQorICB9CisgIHJldHVybiBrZXlib2FyZDsKK30KKworaW50CitjYW5CZWVwICh2b2lkKSB7CisgIHJldHVybiBnZXRLZXlib2FyZCgpICE9IC0xOworfQorCitpbnQKK2FzeW5jaHJvbm91c0JlZXAgKEJlZXBGcmVxdWVuY3kgZnJlcXVlbmN5LCBCZWVwRHVyYXRpb24gZHVyYXRpb24pIHsKKyAgcmV0dXJuIDA7Cit9CisKK2ludAorc3luY2hyb25vdXNCZWVwIChCZWVwRnJlcXVlbmN5IGZyZXF1ZW5jeSwgQmVlcER1cmF0aW9uIGR1cmF0aW9uKSB7CisgIHJldHVybiAwOworfQorCitpbnQKK3N0YXJ0QmVlcCAoQmVlcEZyZXF1ZW5jeSBmcmVxdWVuY3kpIHsKKyAgaW50IGtleWJvYXJkID0gZ2V0S2V5Ym9hcmQoKTsKKyAgaWYgKGtleWJvYXJkICE9IC0xKSB7CisgICAgaW50IGNvbW1hbmQgPSBLQkRfQ01EX0JFTEw7CisgICAgaWYgKGlvY3RsKGtleWJvYXJkLCBLSU9DQ01ELCAmY29tbWFuZCkgIT0gLTEpIHJldHVybiAxOworICAgIGxvZ1N5c3RlbUVycm9yKCJpb2N0bCBLSU9DQ01EIEtCRF9DTURfQkVMTCIpOworICB9CisgIHJldHVybiAwOworfQorCitpbnQKK3N0b3BCZWVwICh2b2lkKSB7CisgIGludCBrZXlib2FyZCA9IGdldEtleWJvYXJkKCk7CisgIGlmIChrZXlib2FyZCAhPSAtMSkgeworICAgIGludCBjb21tYW5kID0gS0JEX0NNRF9OT0JFTEw7CisgICAgaWYgKGlvY3RsKGtleWJvYXJkLCBLSU9DQ01ELCAmY29tbWFuZCkgIT0gLTEpIHJldHVybiAxOworICAgIGxvZ1N5c3RlbUVycm9yKCJpb2N0bCBLSU9DQ01EIEtCRF9DTURfTk9CRUxMIik7CisgIH0KKyAgcmV0dXJuIDA7Cit9CisKK3ZvaWQKK2VuZEJlZXAgKHZvaWQpIHsKK30KZGlmZiAtLWdpdCBhL1Byb2dyYW1zL2JlZXBfc3Brci5jIGIvUHJvZ3JhbXMvYmVlcF9zcGtyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjhmZjI2NgotLS0gL2Rldi9udWxsCisrKyBiL1Byb2dyYW1zL2JlZXBfc3Brci5jCkBAIC0wLDAgKzEsMTA1IEBACisvKgorICogQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyAqICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyAqCisgKiBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorICoKKyAqIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyAqCisgKiBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisgKi8KKworI2luY2x1ZGUgInByb2xvZ3VlLmgiCisKKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxmY250bC5oPgorCisjdW5kZWYgQ0FOX0JFRVAKKworI2lmIGRlZmluZWQoSEFWRV9ERVZfU1BFQUtFUl9TUEVBS0VSX0gpCisjaW5jbHVkZSA8ZGV2L3NwZWFrZXIvc3BlYWtlci5oPgorI2RlZmluZSBDQU5fQkVFUAorCisjZWxpZiBkZWZpbmVkKEhBVkVfTUFDSElORV9TUEVBS0VSX0gpCisjaW5jbHVkZSA8bWFjaGluZS9zcGVha2VyLmg+CisjZGVmaW5lIENBTl9CRUVQCisKKyNlbHNlIC8qIHNwZWFrZXIuaCAqLworI3dhcm5pbmcgYmVlcHMgbm90IGF2YWlsYWJsZSBvbiB0aGlzIGluc3RhbGxhdGlvbjogbm8gc3BlYWtlci5oCisjZW5kaWYgLyogc3BlYWtlci5oICovCisKKyNpZmRlZiBDQU5fQkVFUAorI2luY2x1ZGUgImxvZy5oIgorI2luY2x1ZGUgImJlZXAuaCIKKworc3RhdGljIGludCBzcGVha2VyID0gLTE7CisKK3N0YXRpYyBpbnQKK2dldFNwZWFrZXIgKHZvaWQpIHsKKyAgaWYgKHNwZWFrZXIgPT0gLTEpIHsKKyAgICBpZiAoKHNwZWFrZXIgPSBvcGVuKCIvZGV2L3NwZWFrZXIiLCBPX1dST05MWSkpICE9IC0xKSB7CisgICAgICBsb2dNZXNzYWdlKExPR19ERUJVRywgIlNwZWFrZXIgb3BlbmVkOiBmZD0lZCIsIHNwZWFrZXIpOworICAgIH0gZWxzZSB7CisgICAgICBsb2dTeXN0ZW1FcnJvcigic3BlYWtlciBvcGVuIik7CisgICAgfQorICB9CisgIHJldHVybiBzcGVha2VyOworfQorI2VuZGlmIC8qIENBTl9CRUVQICovCisKK2ludAorY2FuQmVlcCAodm9pZCkgeworI2lmZGVmIENBTl9CRUVQCisgIHJldHVybiAxOworI2Vsc2UgLyogQ0FOX0JFRVAgKi8KKyAgcmV0dXJuIDA7CisjZW5kaWYgLyogQ0FOX0JFRVAgKi8KK30KKworaW50CitzeW5jaHJvbm91c0JlZXAgKEJlZXBGcmVxdWVuY3kgZnJlcXVlbmN5LCBCZWVwRHVyYXRpb24gZHVyYXRpb24pIHsKKyNpZmRlZiBDQU5fQkVFUAorICBpbnQgc3BlYWtlciA9IGdldFNwZWFrZXIoKTsKKyAgaWYgKHNwZWFrZXIgIT0gLTEpIHsKKyAgICB0b25lX3QgdG9uZTsKKyAgICBtZW1zZXQoJnRvbmUsIDAsIHNpemVvZih0b25lKSk7CisgICAgdG9uZS5mcmVxdWVuY3kgPSBmcmVxdWVuY3k7CisgICAgdG9uZS5kdXJhdGlvbiA9IChkdXJhdGlvbiArIDkpIC8gMTA7CisgICAgaWYgKGlvY3RsKHNwZWFrZXIsIFNQS1JUT05FLCAmdG9uZSkgIT0gLTEpIHJldHVybiAxOworICAgIGxvZ1N5c3RlbUVycm9yKCJzcGVha2VyIHRvbmUiKTsKKyAgfQorI2VuZGlmIC8qIENBTl9CRUVQICovCisgIHJldHVybiAwOworfQorCitpbnQKK2FzeW5jaHJvbm91c0JlZXAgKEJlZXBGcmVxdWVuY3kgZnJlcXVlbmN5LCBCZWVwRHVyYXRpb24gZHVyYXRpb24pIHsKKyAgcmV0dXJuIDA7Cit9CisKK2ludAorc3RhcnRCZWVwIChCZWVwRnJlcXVlbmN5IGZyZXF1ZW5jeSkgeworICByZXR1cm4gMDsKK30KKworaW50CitzdG9wQmVlcCAodm9pZCkgeworICByZXR1cm4gMDsKK30KKwordm9pZAorZW5kQmVlcCAodm9pZCkgeworI2lmZGVmIENBTl9CRUVQCisgIGlmIChzcGVha2VyICE9IC0xKSB7CisgICAgY2xvc2Uoc3BlYWtlcik7CisgICAgc3BlYWtlciA9IC0xOworICB9CisjZW5kaWYgLyogQ0FOX0JFRVAgKi8KK30KZGlmZiAtLWdpdCBhL1Byb2dyYW1zL2JlZXBfd2luZG93cy5jIGIvUHJvZ3JhbXMvYmVlcF93aW5kb3dzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjhkZWY2ZQotLS0gL2Rldi9udWxsCisrKyBiL1Byb2dyYW1zL2JlZXBfd2luZG93cy5jCkBAIC0wLDAgKzEsNTAgQEAKKy8qCisgKiBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorICogICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorICoKKyAqIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorICoKKyAqIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyAqLworCisjaW5jbHVkZSAicHJvbG9ndWUuaCIKKworI2luY2x1ZGUgImJlZXAuaCIKKworaW50CitjYW5CZWVwICh2b2lkKSB7CisgIHJldHVybiAxOworfQorCitpbnQKK2FzeW5jaHJvbm91c0JlZXAgKEJlZXBGcmVxdWVuY3kgZnJlcXVlbmN5LCBCZWVwRHVyYXRpb24gZHVyYXRpb24pIHsKKyAgcmV0dXJuIDA7Cit9CisKK2ludAorc3luY2hyb25vdXNCZWVwIChCZWVwRnJlcXVlbmN5IGZyZXF1ZW5jeSwgQmVlcER1cmF0aW9uIGR1cmF0aW9uKSB7CisgIHJldHVybiBCZWVwKGZyZXF1ZW5jeSwgZHVyYXRpb24pOworfQorCitpbnQKK3N0YXJ0QmVlcCAoQmVlcEZyZXF1ZW5jeSBmcmVxdWVuY3kpIHsKKyAgcmV0dXJuIDA7Cit9CisKK2ludAorc3RvcEJlZXAgKHZvaWQpIHsKKyAgcmV0dXJuIDA7Cit9CisKK3ZvaWQKK2VuZEJlZXAgKHZvaWQpIHsKK30KZGlmZiAtLWdpdCBhL1Byb2dyYW1zL2JlZXBfd3NrYmQuYyBiL1Byb2dyYW1zL2JlZXBfd3NrYmQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOWJiNjFhCi0tLSAvZGV2L251bGwKKysrIGIvUHJvZ3JhbXMvYmVlcF93c2tiZC5jCkBAIC0wLDAgKzEsNzUgQEAKKy8qCisgKiBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorICogICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorICoKKyAqIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorICoKKyAqIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyAqLworCisjaW5jbHVkZSAicHJvbG9ndWUuaCIKKworI2luY2x1ZGUgPHRpbWUuaD4KKyNpbmNsdWRlIDxzeXMvaW9jdGwuaD4KKyNpbmNsdWRlIDxkZXYvd3Njb25zL3dzY29uc2lvLmg+CisKKyNpbmNsdWRlICJsb2cuaCIKKyNpbmNsdWRlICJkZXZpY2UuaCIKKyNpbmNsdWRlICJiZWVwLmgiCisKK2ludAorY2FuQmVlcCAodm9pZCkgeworICByZXR1cm4gISFnZXRDb25zb2xlKCk7Cit9CisKK2ludAorc3luY2hyb25vdXNCZWVwIChCZWVwRnJlcXVlbmN5IGZyZXF1ZW5jeSwgQmVlcER1cmF0aW9uIGR1cmF0aW9uKSB7CisgIHJldHVybiAwOworfQorCitpbnQKK2FzeW5jaHJvbm91c0JlZXAgKEJlZXBGcmVxdWVuY3kgZnJlcXVlbmN5LCBCZWVwRHVyYXRpb24gZHVyYXRpb24pIHsKKyAgRklMRSAqY29uc29sZSA9IGdldENvbnNvbGUoKTsKKyAgaWYgKGNvbnNvbGUpIHsKKyAgICBzdHJ1Y3Qgd3NrYmRfYmVsbF9kYXRhIGJlbGw7CisgICAgaWYgKCEoYmVsbC5wZXJpb2QgPSBkdXJhdGlvbikpIHJldHVybiAxOworICAgIGJlbGwucGl0Y2ggPSBmcmVxdWVuY3k7CisgICAgYmVsbC52b2x1bWUgPSAxMDA7CisgICAgYmVsbC53aGljaCA9IFdTS0JEX0JFTExfRE9BTEw7CisgICAgaWYgKGlvY3RsKGZpbGVubyhjb25zb2xlKSwgV1NLQkRJT19DT01QTEVYQkVMTCwgJmJlbGwpICE9IC0xKSByZXR1cm4gMTsKKyAgICBsb2dTeXN0ZW1FcnJvcigiaW9jdGwgV1NLQkRJT19DT01QTEVYQkVMTCIpOworICB9CisgIHJldHVybiAwOworfQorCitpbnQKK3N0YXJ0QmVlcCAoQmVlcEZyZXF1ZW5jeSBmcmVxdWVuY3kpIHsKKyAgcmV0dXJuIDA7Cit9CisKK2ludAorc3RvcEJlZXAgKHZvaWQpIHsKKyAgRklMRSAqY29uc29sZSA9IGdldENvbnNvbGUoKTsKKyAgaWYgKGNvbnNvbGUpIHsKKyAgICBzdHJ1Y3Qgd3NrYmRfYmVsbF9kYXRhIGJlbGw7CisgICAgYmVsbC53aGljaCA9IFdTS0JEX0JFTExfRE9WT0xVTUUgfCBXU0tCRF9CRUxMX0RPUEVSSU9EOworICAgIGJlbGwudm9sdW1lID0gMDsKKyAgICBiZWxsLnBlcmlvZCA9IDA7CisgICAgaWYgKGlvY3RsKGZpbGVubyhjb25zb2xlKSwgV1NLQkRJT19DT01QTEVYQkVMTCwgJmJlbGwpICE9IC0xKSByZXR1cm4gMTsKKyAgICBsb2dTeXN0ZW1FcnJvcigiaW9jdGwgV1NLQkRJT19DT01QTEVYQkVMTCIpOworICB9CisgIHJldHVybiAwOworfQorCit2b2lkCitlbmRCZWVwICh2b2lkKSB7Cit9CmRpZmYgLS1naXQgYS9Qcm9ncmFtcy9iZWxsLmMgYi9Qcm9ncmFtcy9iZWxsLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGZjOWQxZgotLS0gL2Rldi9udWxsCisrKyBiL1Byb2dyYW1zL2JlbGwuYwpAQCAtMCwwICsxLDM3IEBACisvKgorICogQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyAqICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyAqCisgKiBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorICoKKyAqIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyAqCisgKiBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisgKi8KKworI2luY2x1ZGUgInByb2xvZ3VlLmgiCisKKyNpbmNsdWRlICJiZWxsLmgiCisjaW5jbHVkZSAiYWxlcnQuaCIKKyNpbmNsdWRlICJwcmVmcy5oIgorI2luY2x1ZGUgInR1bmVfdHlwZXMuaCIKKworaW50CitzZXRDb25zb2xlQmVsbE1vbml0b3JpbmcgKGludCBvbikgeworICBpZiAob24pIHJldHVybiBzdGFydE1vbml0b3JpbmdDb25zb2xlQmVsbCgpOworCisgIHN0b3BNb25pdG9yaW5nQ29uc29sZUJlbGwoKTsKKyAgcmV0dXJuIDE7Cit9CisKK3ZvaWQKK2FsZXJ0Q29uc29sZUJlbGwgKHZvaWQpIHsKKyAgaWYgKHByZWZzLnR1bmVEZXZpY2UgIT0gdGRCZWVwZXIpIGFsZXJ0KEFMRVJUX0NPTlNPTEVfQkVMTCk7Cit9CmRpZmYgLS1naXQgYS9Qcm9ncmFtcy9iZWxsX2xpbnV4LmMgYi9Qcm9ncmFtcy9iZWxsX2xpbnV4LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjYyN2U3YwotLS0gL2Rldi9udWxsCisrKyBiL1Byb2dyYW1zL2JlbGxfbGludXguYwpAQCAtMCwwICsxLDEwMSBAQAorLyoKKyAqIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisgKiAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisgKgorICogQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKKyNpbmNsdWRlICJwcm9sb2d1ZS5oIgorCisjaW5jbHVkZSAiYmVsbC5oIgorCisjaWZkZWYgSEFWRV9MSU5VWF9JTlBVVF9ICisjaW5jbHVkZSA8bGludXgvaW5wdXQuaD4KKworI2luY2x1ZGUgInN5c3RlbV9saW51eC5oIgorCitzdGF0aWMgSW5wdXRFdmVudE1vbml0b3IgKmlucHV0RXZlbnRNb25pdG9yID0gTlVMTDsKKworc3RhdGljIGludAorcHJlcGFyZVVpbnB1dE9iamVjdCAoVWlucHV0T2JqZWN0ICp1aW5wdXQpIHsKKyAgaWYgKCFlbmFibGVVaW5wdXRFdmVudFR5cGUodWlucHV0LCBFVl9TTkQpKSByZXR1cm4gMDsKKyAgaWYgKCFlbmFibGVVaW5wdXRTb3VuZCh1aW5wdXQsIFNORF9CRUxMKSkgcmV0dXJuIDA7CisgIHJldHVybiAxOworfQorCitzdGF0aWMgdm9pZAoraGFuZGxlSW5wdXRFdmVudCAoY29uc3QgSW5wdXRFdmVudCAqZXZlbnQpIHsKKyAgc3dpdGNoIChldmVudC0+dHlwZSkgeworICAgIGNhc2UgRVZfU05EOiB7CisgICAgICBpbnQgdmFsdWUgPSBldmVudC0+dmFsdWU7CisKKyAgICAgIHN3aXRjaCAoZXZlbnQtPmNvZGUpIHsKKyAgICAgICAgY2FzZSBTTkRfQkVMTDoKKyAgICAgICAgICBpZiAodmFsdWUpIGFsZXJ0Q29uc29sZUJlbGwoKTsKKyAgICAgICAgICBicmVhazsKKworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgIGJyZWFrOworICAgICAgfQorCisgICAgICBicmVhazsKKyAgICB9CisKKyAgICBkZWZhdWx0OgorICAgICAgYnJlYWs7CisgIH0KK30KKworaW50CitjYW5Nb25pdG9yQ29uc29sZUJlbGwgKHZvaWQpIHsKKyAgcmV0dXJuIDE7Cit9CisKK2ludAorc3RhcnRNb25pdG9yaW5nQ29uc29sZUJlbGwgKHZvaWQpIHsKKyAgaWYgKCFpbnB1dEV2ZW50TW9uaXRvcikgeworICAgIElucHV0RXZlbnRNb25pdG9yICptb25pdG9yID0gbmV3SW5wdXRFdmVudE1vbml0b3IoCisgICAgICAiQ29uc29sZSBCZWxsIE1vbml0b3IiLCBwcmVwYXJlVWlucHV0T2JqZWN0LCBoYW5kbGVJbnB1dEV2ZW50CisgICAgKTsKKworICAgIGlmICghbW9uaXRvcikgcmV0dXJuIDA7CisgICAgaW5wdXRFdmVudE1vbml0b3IgPSBtb25pdG9yOworICB9CisKKyAgcmV0dXJuIDE7Cit9CisKK3ZvaWQKK3N0b3BNb25pdG9yaW5nQ29uc29sZUJlbGwgKHZvaWQpIHsKKyAgaWYgKGlucHV0RXZlbnRNb25pdG9yKSB7CisgICAgZGVzdHJveUlucHV0RXZlbnRNb25pdG9yKGlucHV0RXZlbnRNb25pdG9yKTsKKyAgICBpbnB1dEV2ZW50TW9uaXRvciA9IE5VTEw7CisgIH0KK30KKworI2Vsc2UgLyogSEFWRV9MSU5VWF9JTlBVVF9IICovCitpbnQKK2Nhbk1vbml0b3JDb25zb2xlQmVsbCAodm9pZCkgeworICByZXR1cm4gMDsKK30KKworaW50CitzdGFydE1vbml0b3JpbmdDb25zb2xlQmVsbCAodm9pZCkgeworICByZXR1cm4gMDsKK30KKwordm9pZAorc3RvcE1vbml0b3JpbmdDb25zb2xlQmVsbCAodm9pZCkgeworfQorI2VuZGlmIC8qIEhBVkVfTElOVVhfSU5QVVRfSCAqLwpkaWZmIC0tZ2l0IGEvUHJvZ3JhbXMvYmVsbF9ub25lLmMgYi9Qcm9ncmFtcy9iZWxsX25vbmUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZTllMTgxCi0tLSAvZGV2L251bGwKKysrIGIvUHJvZ3JhbXMvYmVsbF9ub25lLmMKQEAgLTAsMCArMSwzNSBAQAorLyoKKyAqIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisgKiAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisgKgorICogQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKKyNpbmNsdWRlICJwcm9sb2d1ZS5oIgorCisjaW5jbHVkZSAiYmVsbC5oIgorCitpbnQKK2Nhbk1vbml0b3JDb25zb2xlQmVsbCAodm9pZCkgeworICByZXR1cm4gMDsKK30KKworaW50CitzdGFydE1vbml0b3JpbmdDb25zb2xlQmVsbCAodm9pZCkgeworICByZXR1cm4gMDsKK30KKwordm9pZAorc3RvcE1vbml0b3JpbmdDb25zb2xlQmVsbCAodm9pZCkgeworfQpkaWZmIC0tZ2l0IGEvUHJvZ3JhbXMvYmxpbmsuYyBiL1Byb2dyYW1zL2JsaW5rLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTU5MWMzZAotLS0gL2Rldi9udWxsCisrKyBiL1Byb2dyYW1zL2JsaW5rLmMKQEAgLTAsMCArMSwyMzggQEAKKy8qCisgKiBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorICogICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorICoKKyAqIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorICoKKyAqIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyAqLworCisjaW5jbHVkZSAicHJvbG9ndWUuaCIKKworI2luY2x1ZGUgInBhcmFtZXRlcnMuaCIKKyNpbmNsdWRlICJibGluay5oIgorI2luY2x1ZGUgInByZWZzLmgiCisjaW5jbHVkZSAiYXN5bmNfaGFuZGxlLmgiCisjaW5jbHVkZSAiYXN5bmNfYWxhcm0uaCIKKyNpbmNsdWRlICJ1cGRhdGUuaCIKKyNpbmNsdWRlICJjb3JlLmgiCisKK3N0cnVjdCBCbGlua0Rlc2NyaXB0b3JTdHJ1Y3QgeworICBjb25zdCBjaGFyICpjb25zdCBuYW1lOworICBjb25zdCB1bnNpZ25lZCBjaGFyICpjb25zdCBpc0VuYWJsZWQ7CisgIHVuc2lnbmVkIGNoYXIgKmNvbnN0IHZpc2libGVUaW1lOworICB1bnNpZ25lZCBjaGFyICpjb25zdCBpbnZpc2libGVUaW1lOworCisgIHVuc2lnbmVkIGlzUmVxdWlyZWQ6MTsKKyAgdW5zaWduZWQgaXNWaXNpYmxlOjE7CisgIEFzeW5jSGFuZGxlIGFsYXJtSGFuZGxlOworfTsKKworQmxpbmtEZXNjcmlwdG9yIHNjcmVlbkN1cnNvckJsaW5rRGVzY3JpcHRvciA9IHsKKyAgLm5hbWUgPSAiU2NyZWVuIEN1cnNvciIsCisgIC5pc0VuYWJsZWQgPSAmcHJlZnMuYmxpbmtpbmdTY3JlZW5DdXJzb3IsCisgIC52aXNpYmxlVGltZSA9ICZwcmVmcy5zY3JlZW5DdXJzb3JWaXNpYmxlVGltZSwKKyAgLmludmlzaWJsZVRpbWUgPSAmcHJlZnMuc2NyZWVuQ3Vyc29ySW52aXNpYmxlVGltZQorfTsKKworQmxpbmtEZXNjcmlwdG9yIGF0dHJpYnV0ZXNVbmRlcmxpbmVCbGlua0Rlc2NyaXB0b3IgPSB7CisgIC5uYW1lID0gIkF0dHJpYnV0ZXMgVW5kZXJsaW5lIiwKKyAgLmlzRW5hYmxlZCA9ICZwcmVmcy5ibGlua2luZ0F0dHJpYnV0ZXMsCisgIC52aXNpYmxlVGltZSA9ICZwcmVmcy5hdHRyaWJ1dGVzVmlzaWJsZVRpbWUsCisgIC5pbnZpc2libGVUaW1lID0gJnByZWZzLmF0dHJpYnV0ZXNJbnZpc2libGVUaW1lCit9OworCitCbGlua0Rlc2NyaXB0b3IgdXBwZXJjYXNlTGV0dGVyc0JsaW5rRGVzY3JpcHRvciA9IHsKKyAgLm5hbWUgPSAiVXBwZXJjYXNlIExldHRlcnMiLAorICAuaXNFbmFibGVkID0gJnByZWZzLmJsaW5raW5nQ2FwaXRhbHMsCisgIC52aXNpYmxlVGltZSA9ICZwcmVmcy5jYXBpdGFsc1Zpc2libGVUaW1lLAorICAuaW52aXNpYmxlVGltZSA9ICZwcmVmcy5jYXBpdGFsc0ludmlzaWJsZVRpbWUKK307CisKK0JsaW5rRGVzY3JpcHRvciBzcGVlY2hDdXJzb3JCbGlua0Rlc2NyaXB0b3IgPSB7CisgIC5uYW1lID0gIlNwZWVjaCBDdXJzb3IiLAorICAuaXNFbmFibGVkID0gJnByZWZzLmJsaW5raW5nU3BlZWNoQ3Vyc29yLAorICAudmlzaWJsZVRpbWUgPSAmcHJlZnMuc3BlZWNoQ3Vyc29yVmlzaWJsZVRpbWUsCisgIC5pbnZpc2libGVUaW1lID0gJnByZWZzLnNwZWVjaEN1cnNvckludmlzaWJsZVRpbWUKK307CisKK3N0YXRpYyBCbGlua0Rlc2NyaXB0b3IgKmNvbnN0IGJsaW5rRGVzY3JpcHRvcnNbXSA9IHsKKyAgJnNjcmVlbkN1cnNvckJsaW5rRGVzY3JpcHRvciwKKyAgJmF0dHJpYnV0ZXNVbmRlcmxpbmVCbGlua0Rlc2NyaXB0b3IsCisgICZ1cHBlcmNhc2VMZXR0ZXJzQmxpbmtEZXNjcmlwdG9yLAorICAmc3BlZWNoQ3Vyc29yQmxpbmtEZXNjcmlwdG9yLAorICBOVUxMCit9OworCitzdGF0aWMgaW5saW5lIGludAordG9QZXJjZW50YWdlIChpbnQgbnVtZXJhdG9yLCBpbnQgZGVub21pbmF0b3IpIHsKKyAgcmV0dXJuIChudW1lcmF0b3IgKiAxMDApIC8gZGVub21pbmF0b3I7Cit9CisKK2NvbnN0IGNoYXIgKgorZ2V0QmxpbmtOYW1lIChCbGlua0Rlc2NyaXB0b3IgKmJsaW5rKSB7CisgIHJldHVybiBibGluay0+bmFtZTsKK30KKworaW50CitnZXRCbGlua1Zpc2libGVUaW1lIChCbGlua0Rlc2NyaXB0b3IgKmJsaW5rKSB7CisgIHJldHVybiBQUkVGUzJNU0VDUygqYmxpbmstPnZpc2libGVUaW1lKTsKK30KKworaW50CitnZXRCbGlua0ludmlzaWJsZVRpbWUgKEJsaW5rRGVzY3JpcHRvciAqYmxpbmspIHsKKyAgcmV0dXJuIFBSRUZTMk1TRUNTKCpibGluay0+aW52aXNpYmxlVGltZSk7Cit9CisKK2ludAoraXNCbGlua0VuYWJsZWQgKEJsaW5rRGVzY3JpcHRvciAqYmxpbmspIHsKKyAgcmV0dXJuICpibGluay0+aXNFbmFibGVkOworfQorCitpbnQKK2dldEJsaW5rUGVyaW9kIChCbGlua0Rlc2NyaXB0b3IgKmJsaW5rKSB7CisgIHJldHVybiBnZXRCbGlua1Zpc2libGVUaW1lKGJsaW5rKSArIGdldEJsaW5rSW52aXNpYmxlVGltZShibGluayk7Cit9CisKK2ludAorZ2V0QmxpbmtQZXJjZW50VmlzaWJsZSAoQmxpbmtEZXNjcmlwdG9yICpibGluaykgeworICByZXR1cm4gdG9QZXJjZW50YWdlKGdldEJsaW5rVmlzaWJsZVRpbWUoYmxpbmspLCBnZXRCbGlua1BlcmlvZChibGluaykpOworfQorCitpbnQKK3NldEJsaW5rUHJvcGVydGllcyAoQmxpbmtEZXNjcmlwdG9yICpibGluaywgaW50IHBlcmlvZCwgaW50IHBlcmNlbnRWaXNpYmxlKSB7CisgIGlmIChwZXJpb2QgPCAxKSByZXR1cm4gMDsKKworICBpZiAocGVyY2VudFZpc2libGUgPCAxKSByZXR1cm4gMDsKKyAgaWYgKHBlcmNlbnRWaXNpYmxlID4gOTkpIHJldHVybiAwOworCisgIGNvbnN0IGludCBtaW5pbXVtVGltZSA9IFNDUkVFTl9VUERBVEVfU0NIRURVTEVfREVMQVk7CisgIHBlcmlvZCA9IE1BWChwZXJpb2QsIChtaW5pbXVtVGltZSAqIDIpKTsKKworICBpbnQgdmlzaWJsZVRpbWU7CisgIGludCBpbnZpc2libGVUaW1lOworCisgIC8vIGxldCB0aGUgdmlzaWJsZSB0aW1lIHJvdW5kIHRvd2FyZCA1MCUKKyAgaWYgKHBlcmNlbnRWaXNpYmxlIDwgNTApIHsKKyAgICBpbnZpc2libGVUaW1lID0gKHBlcmlvZCAqICgxMDAgLSBwZXJjZW50VmlzaWJsZSkpIC8gMTAwOworICAgIHZpc2libGVUaW1lID0gcGVyaW9kIC0gaW52aXNpYmxlVGltZTsKKyAgfSBlbHNlIHsKKyAgICB2aXNpYmxlVGltZSA9IChwZXJpb2QgKiBwZXJjZW50VmlzaWJsZSkgLyAxMDA7CisgICAgaW52aXNpYmxlVGltZSA9IHBlcmlvZCAtIHZpc2libGVUaW1lOworICB9CisKKyAgaWYgKHZpc2libGVUaW1lICYmICh2aXNpYmxlVGltZSA8IG1pbmltdW1UaW1lKSkgeworICAgIHZpc2libGVUaW1lID0gbWluaW11bVRpbWU7CisgICAgaW52aXNpYmxlVGltZSA9IHBlcmlvZCAtIHZpc2libGVUaW1lOworICB9IGVsc2UgaWYgKGludmlzaWJsZVRpbWUgJiYgKGludmlzaWJsZVRpbWUgPCBtaW5pbXVtVGltZSkpIHsKKyAgICBpbnZpc2libGVUaW1lID0gbWluaW11bVRpbWU7CisgICAgdmlzaWJsZVRpbWUgPSBwZXJpb2QgLSBpbnZpc2libGVUaW1lOworICB9CisKKyAgdmlzaWJsZVRpbWUgPSBNU0VDUzJQUkVGUyh2aXNpYmxlVGltZSk7CisgIGludmlzaWJsZVRpbWUgPSBNU0VDUzJQUkVGUyhpbnZpc2libGVUaW1lKTsKKyAgaWYgKCh2aXNpYmxlVGltZSArIGludmlzaWJsZVRpbWUpID4gVUlOVDhfTUFYKSByZXR1cm4gMDsKKworICAqYmxpbmstPnZpc2libGVUaW1lID0gdmlzaWJsZVRpbWU7CisgICpibGluay0+aW52aXNpYmxlVGltZSA9IGludmlzaWJsZVRpbWU7CisgIHJldHVybiAxOworfQorCitpbnQKK2lzQmxpbmtWaXNpYmxlIChjb25zdCBCbGlua0Rlc2NyaXB0b3IgKmJsaW5rKSB7CisgIGlmICghKmJsaW5rLT5pc0VuYWJsZWQpIHJldHVybiAxOworICByZXR1cm4gYmxpbmstPmlzVmlzaWJsZTsKK30KKworc3RhdGljIGludAorZ2V0QmxpbmtEdXJhdGlvbiAoY29uc3QgQmxpbmtEZXNjcmlwdG9yICpibGluaykgeworICByZXR1cm4gUFJFRlMyTVNFQ1MoYmxpbmstPmlzVmlzaWJsZT8gKmJsaW5rLT52aXNpYmxlVGltZTogKmJsaW5rLT5pbnZpc2libGVUaW1lKTsKK30KKwordm9pZAorc2V0QmxpbmtTdGF0ZSAoQmxpbmtEZXNjcmlwdG9yICpibGluaywgaW50IHZpc2libGUpIHsKKyAgaW50IGNoYW5nZWQgPSB2aXNpYmxlICE9IGJsaW5rLT5pc1Zpc2libGU7CisKKyAgYmxpbmstPmlzVmlzaWJsZSA9IHZpc2libGU7CisKKyAgaWYgKGJsaW5rLT5hbGFybUhhbmRsZSkgeworICAgIGFzeW5jUmVzZXRBbGFybUluKGJsaW5rLT5hbGFybUhhbmRsZSwgZ2V0QmxpbmtEdXJhdGlvbihibGluaykpOworICAgIGlmIChjaGFuZ2VkKSBzY2hlZHVsZVVwZGF0ZSgiYmxpbmsgc3RhdGUgc2V0Iik7CisgIH0KK30KKworc3RhdGljIHZvaWQgc2V0QmxpbmtBbGFybSAoQmxpbmtEZXNjcmlwdG9yICpibGluayk7CisKK0FTWU5DX0FMQVJNX0NBTExCQUNLKGhhbmRsZUJsaW5rQWxhcm0pIHsKKyAgQmxpbmtEZXNjcmlwdG9yICpibGluayA9IHBhcmFtZXRlcnMtPmRhdGE7CisKKyAgYXN5bmNEaXNjYXJkSGFuZGxlKGJsaW5rLT5hbGFybUhhbmRsZSk7CisgIGJsaW5rLT5hbGFybUhhbmRsZSA9IE5VTEw7CisKKyAgYmxpbmstPmlzVmlzaWJsZSA9ICFibGluay0+aXNWaXNpYmxlOworICBzZXRCbGlua0FsYXJtKGJsaW5rKTsKKyAgc2NoZWR1bGVVcGRhdGUoImJsaW5rIHN0YXRlIGNoYW5nZWQiKTsKK30KKworc3RhdGljIHZvaWQKK3NldEJsaW5rQWxhcm0gKEJsaW5rRGVzY3JpcHRvciAqYmxpbmspIHsKKyAgYXN5bmNOZXdSZWxhdGl2ZUFsYXJtKCZibGluay0+YWxhcm1IYW5kbGUsIGdldEJsaW5rRHVyYXRpb24oYmxpbmspLCBoYW5kbGVCbGlua0FsYXJtLCBibGluayk7Cit9CisKK3N0YXRpYyB2b2lkCitmb3JFYWNoQmxpbmtEZXNjcmlwdG9yICh2b2lkICgqaGFuZGxlQmxpbmtEZXNjcmlwdG9yKSAoQmxpbmtEZXNjcmlwdG9yICpibGluaykpIHsKKyAgQmxpbmtEZXNjcmlwdG9yICpjb25zdCAqYmxpbmsgPSBibGlua0Rlc2NyaXB0b3JzOworCisgIHdoaWxlICgqYmxpbmspIGhhbmRsZUJsaW5rRGVzY3JpcHRvcigqYmxpbmsrKyk7Cit9CisKK3N0YXRpYyB2b2lkCit1bnJlcXVpcmVCbGlua0Rlc2NyaXB0b3IgKEJsaW5rRGVzY3JpcHRvciAqYmxpbmspIHsKKyAgYmxpbmstPmlzUmVxdWlyZWQgPSAwOworfQorCit2b2lkCit1bnJlcXVpcmVBbGxCbGlua0Rlc2NyaXB0b3JzICh2b2lkKSB7CisgIGZvckVhY2hCbGlua0Rlc2NyaXB0b3IodW5yZXF1aXJlQmxpbmtEZXNjcmlwdG9yKTsKK30KKwordm9pZAorcmVxdWlyZUJsaW5rRGVzY3JpcHRvciAoQmxpbmtEZXNjcmlwdG9yICpibGluaykgeworICBibGluay0+aXNSZXF1aXJlZCA9IDE7Cit9CisKK3N0YXRpYyB2b2lkCitzdG9wQmxpbmtEZXNjcmlwdG9yIChCbGlua0Rlc2NyaXB0b3IgKmJsaW5rKSB7CisgIGlmIChibGluay0+YWxhcm1IYW5kbGUpIHsKKyAgICBhc3luY0NhbmNlbFJlcXVlc3QoYmxpbmstPmFsYXJtSGFuZGxlKTsKKyAgICBibGluay0+YWxhcm1IYW5kbGUgPSBOVUxMOworICB9Cit9CisKK3ZvaWQKK3N0b3BBbGxCbGlua0Rlc2NyaXB0b3JzICh2b2lkKSB7CisgIGZvckVhY2hCbGlua0Rlc2NyaXB0b3Ioc3RvcEJsaW5rRGVzY3JpcHRvcik7Cit9CisKK3N0YXRpYyB2b2lkCityZXNldEJsaW5rRGVzY3JpcHRvciAoQmxpbmtEZXNjcmlwdG9yICpibGluaykgeworICBpZiAoISgqYmxpbmstPmlzRW5hYmxlZCAmJiBibGluay0+aXNSZXF1aXJlZCkpIHsKKyAgICBzdG9wQmxpbmtEZXNjcmlwdG9yKGJsaW5rKTsKKyAgfSBlbHNlIGlmICghYmxpbmstPmFsYXJtSGFuZGxlKSB7CisgICAgc2V0QmxpbmtBbGFybShibGluayk7CisgIH0KK30KKwordm9pZAorcmVzZXRBbGxCbGlua0Rlc2NyaXB0b3JzICh2b2lkKSB7CisgIGZvckVhY2hCbGlua0Rlc2NyaXB0b3IocmVzZXRCbGlua0Rlc2NyaXB0b3IpOworfQpkaWZmIC0tZ2l0IGEvUHJvZ3JhbXMvYmxpbmsuaCBiL1Byb2dyYW1zL2JsaW5rLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzM5MjYxYQotLS0gL2Rldi9udWxsCisrKyBiL1Byb2dyYW1zL2JsaW5rLmgKQEAgLTAsMCArMSw2MiBAQAorLyoKKyAqIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisgKiAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisgKgorICogQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKKyNpZm5kZWYgQlJMVFRZX0lOQ0xVREVEX0JMSU5LCisjZGVmaW5lIEJSTFRUWV9JTkNMVURFRF9CTElOSworCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmIC8qIF9fY3BsdXNwbHVzICovCisKK3R5cGVkZWYgc3RydWN0IEJsaW5rRGVzY3JpcHRvclN0cnVjdCBCbGlua0Rlc2NyaXB0b3I7CitleHRlcm4gQmxpbmtEZXNjcmlwdG9yIHNjcmVlbkN1cnNvckJsaW5rRGVzY3JpcHRvcjsKK2V4dGVybiBCbGlua0Rlc2NyaXB0b3IgYXR0cmlidXRlc1VuZGVybGluZUJsaW5rRGVzY3JpcHRvcjsKK2V4dGVybiBCbGlua0Rlc2NyaXB0b3IgdXBwZXJjYXNlTGV0dGVyc0JsaW5rRGVzY3JpcHRvcjsKK2V4dGVybiBCbGlua0Rlc2NyaXB0b3Igc3BlZWNoQ3Vyc29yQmxpbmtEZXNjcmlwdG9yOworCitleHRlcm4gaW50IGdldEJsaW5rUGVyaW9kIChCbGlua0Rlc2NyaXB0b3IgKmJsaW5rKTsKK2V4dGVybiBpbnQgZ2V0QmxpbmtQZXJjZW50VmlzaWJsZSAoQmxpbmtEZXNjcmlwdG9yICpibGluayk7CitleHRlcm4gaW50IHNldEJsaW5rUHJvcGVydGllcyAoQmxpbmtEZXNjcmlwdG9yICpibGluaywgaW50IHBlcmlvZCwgaW50IHBlcmNlbnRWaXNpYmxlKTsKKworc3RhdGljIGlubGluZSBpbnQgc2V0QmxpbmtQZXJpb2QgKEJsaW5rRGVzY3JpcHRvciAqYmxpbmssIGludCBwZXJpb2QpIHsKKyAgcmV0dXJuIHNldEJsaW5rUHJvcGVydGllcyhibGluaywgcGVyaW9kLCBnZXRCbGlua1BlcmNlbnRWaXNpYmxlKGJsaW5rKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHNldEJsaW5rUGVyY2VudFZpc2libGUgKEJsaW5rRGVzY3JpcHRvciAqYmxpbmssIGludCBwZXJjZW50VmlzaWJsZSkgeworICByZXR1cm4gc2V0QmxpbmtQcm9wZXJ0aWVzKGJsaW5rLCBnZXRCbGlua1BlcmlvZChibGluayksIHBlcmNlbnRWaXNpYmxlKTsKK30KKworZXh0ZXJuIGNvbnN0IGNoYXIgKmdldEJsaW5rTmFtZSAoQmxpbmtEZXNjcmlwdG9yICpibGluayk7CitleHRlcm4gaW50IGdldEJsaW5rVmlzaWJsZVRpbWUgKEJsaW5rRGVzY3JpcHRvciAqYmxpbmspOworZXh0ZXJuIGludCBnZXRCbGlua0ludmlzaWJsZVRpbWUgKEJsaW5rRGVzY3JpcHRvciAqYmxpbmspOworZXh0ZXJuIGludCBpc0JsaW5rRW5hYmxlZCAoQmxpbmtEZXNjcmlwdG9yICpibGluayk7CisKK2V4dGVybiBpbnQgaXNCbGlua1Zpc2libGUgKGNvbnN0IEJsaW5rRGVzY3JpcHRvciAqYmxpbmspOworZXh0ZXJuIHZvaWQgc2V0QmxpbmtTdGF0ZSAoQmxpbmtEZXNjcmlwdG9yICpibGluaywgaW50IHZpc2libGUpOworCitleHRlcm4gdm9pZCB1bnJlcXVpcmVBbGxCbGlua0Rlc2NyaXB0b3JzICh2b2lkKTsKK2V4dGVybiB2b2lkIHJlcXVpcmVCbGlua0Rlc2NyaXB0b3IgKEJsaW5rRGVzY3JpcHRvciAqYmxpbmspOworCitleHRlcm4gdm9pZCByZXNldEFsbEJsaW5rRGVzY3JpcHRvcnMgKHZvaWQpOworZXh0ZXJuIHZvaWQgc3RvcEFsbEJsaW5rRGVzY3JpcHRvcnMgKHZvaWQpOworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZiAvKiBfX2NwbHVzcGx1cyAqLworCisjZW5kaWYgLyogQlJMVFRZX0lOQ0xVREVEX0JMSU5LICovCmRpZmYgLS1naXQgYS9Qcm9ncmFtcy9ibHVldG9vdGguYyBiL1Byb2dyYW1zL2JsdWV0b290aC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZhYWQ5NTcKLS0tIC9kZXYvbnVsbAorKysgYi9Qcm9ncmFtcy9ibHVldG9vdGguYwpAQCAtMCwwICsxLDc4NyBAQAorLyoKKyAqIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisgKiAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisgKgorICogQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKKyNpbmNsdWRlICJwcm9sb2d1ZS5oIgorCisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKworI2luY2x1ZGUgImxvZy5oIgorI2luY2x1ZGUgInN0cmZtdC5oIgorI2luY2x1ZGUgInBhcmFtZXRlcnMuaCIKKyNpbmNsdWRlICJ0aW1pbmcuaCIKKyNpbmNsdWRlICJhc3luY193YWl0LmgiCisjaW5jbHVkZSAicGFyc2UuaCIKKyNpbmNsdWRlICJkZXZpY2UuaCIKKyNpbmNsdWRlICJxdWV1ZS5oIgorI2luY2x1ZGUgImlvX2JsdWV0b290aC5oIgorI2luY2x1ZGUgImJsdWV0b290aF9pbnRlcm5hbC5oIgorCitzdGF0aWMgaW50CitidGhEaXNjb3ZlclNlcmlhbFBvcnRDaGFubmVsICh1aW50OF90ICpjaGFubmVsLCBCbHVldG9vdGhDb25uZWN0aW9uRXh0ZW5zaW9uICpiY3gsIGludCB0aW1lb3V0KSB7CisgIHN0YXRpYyBjb25zdCB1aW50OF90IHV1aWRbXSA9IHsKKyAgICAwWDAwLCAwWDAwLCAwWDExLCAwWDAxLAorICAgIDBYMDAsIDBYMDAsCisgICAgMFgxMCwgMFgwMCwKKyAgICAwWDgwLCAwWDAwLAorICAgIDBYMDAsIDBYODAsIDBYNUYsIDBYOUIsIDBYMzQsIDBYRkIKKyAgfTsKKworICBsb2dNZXNzYWdlKExPR19DQVRFR09SWShCTFVFVE9PVEhfSU8pLCAiZGlzY292ZXJpbmcgc2VyaWFsIHBvcnQgY2hhbm5lbCIpOworICBpbnQgZGlzY292ZXJlZCA9IGJ0aERpc2NvdmVyQ2hhbm5lbChjaGFubmVsLCBiY3gsIHV1aWQsIHNpemVvZih1dWlkKSwgdGltZW91dCk7CisKKyAgaWYgKGRpc2NvdmVyZWQpIHsKKyAgICBsb2dNZXNzYWdlKExPR19DQVRFR09SWShCTFVFVE9PVEhfSU8pLCAic2VyaWFsIHBvcnQgY2hhbm5lbCBkaXNjb3ZlcmVkOiAldSIsICpjaGFubmVsKTsKKyAgfSBlbHNlIHsKKyAgICBsb2dNZXNzYWdlKExPR19DQVRFR09SWShCTFVFVE9PVEhfSU8pLCAic2VyaWFsIHBvcnQgY2hhbm5lbCBub3QgZGlzY292ZXJlZCIpOworICB9CisKKyAgcmV0dXJuIGRpc2NvdmVyZWQ7Cit9CisKK3N0YXRpYyB2b2lkCitidGhMb2dDaGFubmVsICh1aW50OF90IGNoYW5uZWwpIHsKKyAgbG9nTWVzc2FnZShMT0dfQ0FURUdPUlkoQkxVRVRPT1RIX0lPKSwgIlJGQ09NTSBjaGFubmVsOiAldSIsIGNoYW5uZWwpOworfQorCit0eXBlZGVmIHN0cnVjdCB7CisgIHVpbnQ2NF90IGFkZHJlc3M7CisgIGNoYXIgKm5hbWU7CisgIGludCBlcnJvcjsKKyAgdW5zaWduZWQgcGFpcmVkOjE7Cit9IEJsdWV0b290aERldmljZUVudHJ5OworCitzdGF0aWMgdm9pZAorYnRoRGVhbGxvY2F0ZURldmljZUVudHJ5ICh2b2lkICppdGVtLCB2b2lkICpkYXRhKSB7CisgIEJsdWV0b290aERldmljZUVudHJ5ICplbnRyeSA9IGl0ZW07CisKKyAgaWYgKGVudHJ5LT5uYW1lKSBmcmVlKGVudHJ5LT5uYW1lKTsKKyAgZnJlZShlbnRyeSk7Cit9CisKK3N0YXRpYyBRdWV1ZSAqCitidGhDcmVhdGVEZXZpY2VRdWV1ZSAodm9pZCAqZGF0YSkgeworICByZXR1cm4gbmV3UXVldWUoYnRoRGVhbGxvY2F0ZURldmljZUVudHJ5LCBOVUxMKTsKK30KKworc3RhdGljIFF1ZXVlICoKK2J0aEdldERldmljZVF1ZXVlIChpbnQgY3JlYXRlKSB7CisgIHN0YXRpYyBRdWV1ZSAqZGV2aWNlcyA9IE5VTEw7CisKKyAgcmV0dXJuIGdldFByb2dyYW1RdWV1ZSgmZGV2aWNlcywgImJsdWV0b290aC1kZXZpY2UtcXVldWUiLCBjcmVhdGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgYnRoQ3JlYXRlRGV2aWNlUXVldWUsIE5VTEwpOworfQorCitzdGF0aWMgaW50CitidGhUZXN0RGV2aWNlQWRkcmVzcyAoY29uc3Qgdm9pZCAqaXRlbSwgdm9pZCAqZGF0YSkgeworICBjb25zdCBCbHVldG9vdGhEZXZpY2VFbnRyeSAqZGV2aWNlID0gaXRlbTsKKyAgY29uc3QgdWludDY0X3QgKmFkZHJlc3MgPSBkYXRhOworCisgIHJldHVybiBkZXZpY2UtPmFkZHJlc3MgPT0gKmFkZHJlc3M7Cit9CisKK3N0YXRpYyBCbHVldG9vdGhEZXZpY2VFbnRyeSAqCitidGhHZXREZXZpY2VFbnRyeSAodWludDY0X3QgYWRkcmVzcywgaW50IGFkZCkgeworICBRdWV1ZSAqZGV2aWNlcyA9IGJ0aEdldERldmljZVF1ZXVlKGFkZCk7CisKKyAgaWYgKGRldmljZXMpIHsKKyAgICBCbHVldG9vdGhEZXZpY2VFbnRyeSAqZW50cnkgPSBmaW5kSXRlbShkZXZpY2VzLCBidGhUZXN0RGV2aWNlQWRkcmVzcywgJmFkZHJlc3MpOworICAgIGlmIChlbnRyeSkgcmV0dXJuIGVudHJ5OworCisgICAgaWYgKGFkZCkgeworICAgICAgaWYgKChlbnRyeSA9IG1hbGxvYyhzaXplb2YoKmVudHJ5KSkpKSB7CisgICAgICAgIGVudHJ5LT5hZGRyZXNzID0gYWRkcmVzczsKKyAgICAgICAgZW50cnktPm5hbWUgPSBOVUxMOworICAgICAgICBlbnRyeS0+ZXJyb3IgPSAwOworICAgICAgICBlbnRyeS0+cGFpcmVkID0gMDsKKworICAgICAgICBpZiAoZW5xdWV1ZUl0ZW0oZGV2aWNlcywgZW50cnkpKSByZXR1cm4gZW50cnk7CisgICAgICAgIGZyZWUoZW50cnkpOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgbG9nTWFsbG9jRXJyb3IoKTsKKyAgICAgIH0KKyAgICB9CisgIH0KKworICByZXR1cm4gTlVMTDsKK30KKworc3RhdGljIGludAorYnRoUmVtZW1iZXJEZXZpY2VOYW1lIChCbHVldG9vdGhEZXZpY2VFbnRyeSAqZW50cnksIGNvbnN0IGNoYXIgKm5hbWUpIHsKKyAgaWYgKG5hbWUgJiYgKm5hbWUpIHsKKyAgICBjaGFyICpjb3B5ID0gc3RyZHVwKG5hbWUpOworCisgICAgaWYgKGNvcHkpIHsKKyAgICAgIGlmIChlbnRyeS0+bmFtZSkgZnJlZShlbnRyeS0+bmFtZSk7CisgICAgICBlbnRyeS0+bmFtZSA9IGNvcHk7CisgICAgICByZXR1cm4gMTsKKyAgICB9IGVsc2UgeworICAgICAgbG9nTWFsbG9jRXJyb3IoKTsKKyAgICB9CisgIH0KKworICByZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSBjb25zdCBjaGFyICoKK2J0aEdldFBhaXJlZEtleXdvcmQgKGludCBzdGF0ZSkgeworICByZXR1cm4gZ2V0RmxhZ0tleXdvcmRZZXNObyhzdGF0ZSk7Cit9CisKK3N0YXRpYyBpbnQKK2J0aFJlbWVtYmVyRGlzY292ZXJlZERldmljZSAoY29uc3QgRGlzY292ZXJlZEJsdWV0b290aERldmljZSAqZGV2aWNlLCB2b2lkICpkYXRhKSB7CisgIGxvZ01lc3NhZ2UoTE9HX0NBVEVHT1JZKEJMVUVUT09USF9JTyksCisgICAgICAgICAgICAgInJlbWVtYmVyIGRpc2NvdmVyZWQgZGV2aWNlOiAiCisgICAgICAgICAgICAgIkFkZHI6JTAxMiIgUFJJWDY0ICIgUGFpcmVkOiVzIE5hbWU6JXMiLAorICAgICAgICAgICAgIGRldmljZS0+YWRkcmVzcywgYnRoR2V0UGFpcmVkS2V5d29yZChkZXZpY2UtPnBhaXJlZCksIGRldmljZS0+bmFtZSk7CisKKyAgQmx1ZXRvb3RoRGV2aWNlRW50cnkgKmVudHJ5ID0gYnRoR2V0RGV2aWNlRW50cnkoZGV2aWNlLT5hZGRyZXNzLCAxKTsKKworICBpZiAoZW50cnkpIHsKKyAgICBidGhSZW1lbWJlckRldmljZU5hbWUoZW50cnksIGRldmljZS0+bmFtZSk7CisgICAgZW50cnktPnBhaXJlZCA9IGRldmljZS0+cGFpcmVkOworICB9CisKKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYmx1ZXRvb3RoRGV2aWNlc0Rpc2NvdmVyZWQgPSAwOworCitzdGF0aWMgdm9pZAorYnRoRGlzY292ZXJEZXZpY2VzICh2b2lkKSB7CisgIGlmICghYmx1ZXRvb3RoRGV2aWNlc0Rpc2NvdmVyZWQpIHsKKyAgICBsb2dNZXNzYWdlKExPR19DQVRFR09SWShCTFVFVE9PVEhfSU8pLCAiYmVnaW4gZGV2aWNlIGRpc2NvdmVyeSIpOworICAgIGJ0aFByb2Nlc3NEaXNjb3ZlcmVkRGV2aWNlcyhidGhSZW1lbWJlckRpc2NvdmVyZWREZXZpY2UsIE5VTEwpOworICAgIGJsdWV0b290aERldmljZXNEaXNjb3ZlcmVkID0gMTsKKyAgICBsb2dNZXNzYWdlKExPR19DQVRFR09SWShCTFVFVE9PVEhfSU8pLCAiZW5kIGRldmljZSBkaXNjb3ZlcnkiKTsKKyAgfQorfQorCit2b2lkCitidGhGb3JnZXREZXZpY2VzICh2b2lkKSB7CisgIFF1ZXVlICpkZXZpY2VzID0gYnRoR2V0RGV2aWNlUXVldWUoMCk7CisKKyAgaWYgKGRldmljZXMpIGRlbGV0ZUVsZW1lbnRzKGRldmljZXMpOworICBibHVldG9vdGhEZXZpY2VzRGlzY292ZXJlZCA9IDA7Cit9CisKK3N0YXRpYyBpbnQKK2J0aFJlbWVtYmVyQ29ubmVjdEVycm9yICh1aW50NjRfdCBhZGRyZXNzLCBpbnQgdmFsdWUpIHsKKyAgQmx1ZXRvb3RoRGV2aWNlRW50cnkgKmVudHJ5ID0gYnRoR2V0RGV2aWNlRW50cnkoYWRkcmVzcywgMSk7CisgIGlmICghZW50cnkpIHJldHVybiAwOworCisgIGVudHJ5LT5lcnJvciA9IHZhbHVlOworICByZXR1cm4gMTsKK30KKworc3RhdGljIGludAorYnRoUmVjYWxsQ29ubmVjdEVycm9yICh1aW50NjRfdCBhZGRyZXNzLCBpbnQgKnZhbHVlKSB7CisgIEJsdWV0b290aERldmljZUVudHJ5ICplbnRyeSA9IGJ0aEdldERldmljZUVudHJ5KGFkZHJlc3MsIDApOworICBpZiAoIWVudHJ5KSByZXR1cm4gMDsKKyAgaWYgKCFlbnRyeS0+ZXJyb3IpIHJldHVybiAwOworCisgICp2YWx1ZSA9IGVudHJ5LT5lcnJvcjsKKyAgcmV0dXJuIDE7Cit9CisKK3ZvaWQKK2J0aEluaXRpYWxpemVDb25uZWN0aW9uUmVxdWVzdCAoQmx1ZXRvb3RoQ29ubmVjdGlvblJlcXVlc3QgKnJlcXVlc3QpIHsKKyAgbWVtc2V0KHJlcXVlc3QsIDAsIHNpemVvZigqcmVxdWVzdCkpOworICByZXF1ZXN0LT5kcml2ZXIgPSBOVUxMOworICByZXF1ZXN0LT5hZGRyZXNzID0gMDsKKyAgcmVxdWVzdC0+dGltZW91dCA9IEJMVUVUT09USF9DSEFOTkVMX0NPTk5FQ1RfVElNRU9VVDsKKyAgcmVxdWVzdC0+Y2hhbm5lbCA9IDA7CisgIHJlcXVlc3QtPmRpc2NvdmVyID0gMDsKK30KKwordHlwZWRlZiBlbnVtIHsKKyAgQlRIX1BBUk1fQUREUkVTUywKKyAgQlRIX1BBUk1fTkFNRSwKKyAgQlRIX1BBUk1fQ0hBTk5FTCwKKyAgQlRIX1BBUk1fRElTQ09WRVIsCisgIEJUSF9QQVJNX1RJTUVPVVQKK30gQmx1ZXRvb3RoRGV2aWNlUGFyYW1ldGVyOworCitzdGF0aWMgY29uc3QgY2hhciAqY29uc3QgYnRoRGV2aWNlUGFyYW1ldGVyTmFtZXNbXSA9IHsKKyAgImFkZHJlc3MiLAorICAibmFtZSIsCisgICJjaGFubmVsIiwKKyAgImRpc2NvdmVyIiwKKyAgInRpbWVvdXQiLAorICBOVUxMCit9OworCitzdGF0aWMgY2hhciAqKgorYnRoR2V0RGV2aWNlUGFyYW1ldGVycyAoY29uc3QgY2hhciAqaWRlbnRpZmllcikgeworICBpZiAoIWlkZW50aWZpZXIpIGlkZW50aWZpZXIgPSAiIjsKKyAgcmV0dXJuIGdldERldmljZVBhcmFtZXRlcnMoYnRoRGV2aWNlUGFyYW1ldGVyTmFtZXMsIGlkZW50aWZpZXIpOworfQorCitpbnQKK2J0aFBhcnNlQWRkcmVzcyAodWludDY0X3QgKmFkZHJlc3MsIGNvbnN0IGNoYXIgKnN0cmluZykgeworICBjb25zdCBjaGFyICpjaGFyYWN0ZXIgPSBzdHJpbmc7CisgIHVuc2lnbmVkIGludCBjb3VudGVyID0gQkRBX1NJWkU7CisgIGNoYXIgZGVsaW1pdGVyID0gMDsKKyAgKmFkZHJlc3MgPSAwOworCisgIHdoaWxlICgqY2hhcmFjdGVyKSB7CisgICAgbG9uZyB1bnNpZ25lZCBpbnQgdmFsdWU7CisKKyAgICB7CisgICAgICBjb25zdCBjaGFyICpzdGFydCA9IGNoYXJhY3RlcjsKKyAgICAgIGNoYXIgKmVuZDsKKworICAgICAgdmFsdWUgPSBzdHJ0b3VsKGNoYXJhY3RlciwgJmVuZCwgMFgxMCk7CisgICAgICBpZiAoKGVuZCAtIHN0YXJ0KSAhPSAyKSBicmVhazsKKyAgICAgIGNoYXJhY3RlciA9IGVuZDsKKyAgICB9CisKKyAgICBpZiAodmFsdWUgPiBVSU5UOF9NQVgpIGJyZWFrOworICAgICphZGRyZXNzIDw8PSA4OworICAgICphZGRyZXNzIHw9IHZhbHVlOworCisgICAgaWYgKCEtLWNvdW50ZXIpIHsKKyAgICAgIGlmICgqY2hhcmFjdGVyKSBicmVhazsKKyAgICAgIHJldHVybiAxOworICAgIH0KKworICAgIGlmICghKmNoYXJhY3RlcikgYnJlYWs7CisKKyAgICBpZiAoIWRlbGltaXRlcikgeworICAgICAgZGVsaW1pdGVyID0gKmNoYXJhY3RlcjsKKyAgICAgIGlmICgoZGVsaW1pdGVyICE9ICc6JykgJiYgKGRlbGltaXRlciAhPSAnLScpKSBicmVhazsKKyAgICB9IGVsc2UgaWYgKCpjaGFyYWN0ZXIgIT0gZGVsaW1pdGVyKSB7CisgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjaGFyYWN0ZXIgKz0gMTsKKyAgfQorCisgIGxvZ01lc3NhZ2UoTE9HX0VSUiwgImludmFsaWQgQmx1ZXRvb3RoIGRldmljZSBhZGRyZXNzOiAlcyIsIHN0cmluZyk7CisgIGVycm5vID0gRUlOVkFMOworICByZXR1cm4gMDsKK30KKworaW50CitidGhQYXJzZUNoYW5uZWxOdW1iZXIgKHVpbnQ4X3QgKmNoYW5uZWwsIGNvbnN0IGNoYXIgKnN0cmluZykgeworICBpZiAoKnN0cmluZykgeworICAgIHVuc2lnbmVkIGludCB2YWx1ZTsKKworICAgIGlmIChpc1Vuc2lnbmVkSW50ZWdlcigmdmFsdWUsIHN0cmluZykpIHsKKyAgICAgIGlmICgodmFsdWUgPiAwKSAmJiAodmFsdWUgPCAwWDFGKSkgeworICAgICAgICAqY2hhbm5lbCA9IHZhbHVlOworICAgICAgICByZXR1cm4gMTsKKyAgICAgIH0KKyAgICB9CisgIH0KKworICBsb2dNZXNzYWdlKExPR19XQVJOSU5HLCAiaW52YWxpZCBSRkNPTU0gY2hhbm5lbCBudW1iZXI6ICVzIiwgc3RyaW5nKTsKKyAgcmV0dXJuIDA7Cit9CisKK1NUUl9CRUdJTl9GT1JNQVRURVIoYnRoRm9ybWF0QWRkcmVzcywgdWludDY0X3QgYWRkcmVzcykKKyAgdWludDhfdCBieXRlc1s2XTsKKyAgc2l6ZV90IGNvdW50ID0gQVJSQVlfQ09VTlQoYnl0ZXMpOworICB1bnNpZ25lZCBpbnQgaW5kZXggPSBjb3VudDsKKworICB3aGlsZSAoaW5kZXggPiAwKSB7CisgICAgYnl0ZXNbLS1pbmRleF0gPSBhZGRyZXNzICYgMFhGRjsKKyAgICBhZGRyZXNzID4+PSA4OworICB9CisKKyAgd2hpbGUgKGluZGV4IDwgY291bnQpIHsKKyAgICBpZiAoaW5kZXggPiAwKSBTVFJfUFJJTlRGKCIlYyIsICc6Jyk7CisgICAgU1RSX1BSSU5URigiJTAyWCIsIGJ5dGVzW2luZGV4KytdKTsKKyAgfQorU1RSX0VORF9GT1JNQVRURVIKKworc3RhdGljIGNvbnN0IEJsdWV0b290aE5hbWVFbnRyeSAqCitidGhHZXROYW1lRW50cnkgKGNvbnN0IGNoYXIgKm5hbWUpIHsKKyAgaWYgKG5hbWUgJiYgKm5hbWUpIHsKKyAgICBjb25zdCBCbHVldG9vdGhOYW1lRW50cnkgKmVudHJ5ID0gYmx1ZXRvb3RoTmFtZVRhYmxlOworCisgICAgd2hpbGUgKGVudHJ5LT5uYW1lUHJlZml4KSB7CisgICAgICBpZiAoc3RybmNtcChuYW1lLCBlbnRyeS0+bmFtZVByZWZpeCwgc3RybGVuKGVudHJ5LT5uYW1lUHJlZml4KSkgPT0gMCkgeworICAgICAgICByZXR1cm4gZW50cnk7CisgICAgICB9CisKKyAgICAgIGVudHJ5ICs9IDE7CisgICAgfQorICB9CisKKyAgcmV0dXJuIE5VTEw7Cit9CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgc3RydWN0IHsKKyAgICBjb25zdCBjaGFyICphZGRyZXNzOworICAgIHNpemVfdCBsZW5ndGg7CisgIH0gbmFtZTsKKworICBzdHJ1Y3QgeworICAgIGNvbnN0IGNoYXIgKmFkZHJlc3M7CisgICAgc2l6ZV90IGxlbmd0aDsKKyAgfSBkcml2ZXI7Cit9IEdldERldmljZUFkZHJlc3NEYXRhOworCitzdGF0aWMgaW50CitidGhUZXN0RGV2aWNlTmFtZSAoY29uc3Qgdm9pZCAqaXRlbSwgdm9pZCAqZGF0YSkgeworICBjb25zdCBCbHVldG9vdGhEZXZpY2VFbnRyeSAqZGV2aWNlID0gaXRlbTsKKyAgY29uc3QgR2V0RGV2aWNlQWRkcmVzc0RhdGEgKmdkYSA9IGRhdGE7CisKKyAgbG9nTWVzc2FnZShMT0dfQ0FURUdPUlkoQkxVRVRPT1RIX0lPKSwKKyAgICAgICAgICAgICAidGVzdGluZyBkZXZpY2U6IEFkZHI6JTAxMiIgUFJJWDY0ICIgUGFpcmVkOiVzIE5hbWU6JXMiLAorICAgICAgICAgICAgIGRldmljZS0+YWRkcmVzcywgYnRoR2V0UGFpcmVkS2V5d29yZChkZXZpY2UtPnBhaXJlZCksIGRldmljZS0+bmFtZQorICApOworCisgIGlmICghZGV2aWNlLT5wYWlyZWQpIHsKKyAgICBsb2dNZXNzYWdlKExPR19DQVRFR09SWShCTFVFVE9PVEhfSU8pLCAibm90IHBhaXJlZCIpOworICAgIHJldHVybiAwOworICB9CisKKyAgaWYgKGdkYS0+bmFtZS5sZW5ndGgpIHsKKyAgICBpZiAoc3RybmNtcChkZXZpY2UtPm5hbWUsIGdkYS0+bmFtZS5hZGRyZXNzLCBnZGEtPm5hbWUubGVuZ3RoKSAhPSAwKSB7CisgICAgICBsb2dNZXNzYWdlKExPR19DQVRFR09SWShCTFVFVE9PVEhfSU8pLCAiaW5lbGlnaWJsZSBuYW1lIik7CisgICAgICByZXR1cm4gMDsKKyAgICB9CisgIH0KKworICBjb25zdCBCbHVldG9vdGhOYW1lRW50cnkgKm5hbWUgPSBidGhHZXROYW1lRW50cnkoZGV2aWNlLT5uYW1lKTsKKyAgaWYgKCFuYW1lKSB7CisgICAgbG9nTWVzc2FnZShMT0dfQ0FURUdPUlkoQkxVRVRPT1RIX0lPKSwgInVucmVjb2duaXplZCBuYW1lIik7CisgICAgcmV0dXJuIDA7CisgIH0KKworICBpZiAoZ2RhLT5kcml2ZXIubGVuZ3RoKSB7CisgICAgY29uc3QgY2hhciAqY29uc3QgKmNvZGUgPSBuYW1lLT5kcml2ZXJDb2RlczsKKworICAgIHdoaWxlICgqY29kZSkgeworICAgICAgaWYgKHN0cm5jbXAoKmNvZGUsIGdkYS0+ZHJpdmVyLmFkZHJlc3MsIGdkYS0+ZHJpdmVyLmxlbmd0aCkgPT0gMCkgeworICAgICAgICBsb2dNZXNzYWdlKExPR19DQVRFR09SWShCTFVFVE9PVEhfSU8pLCAiZm91bmQiKTsKKyAgICAgICAgcmV0dXJuIDE7CisgICAgICB9CisKKyAgICAgIGNvZGUgKz0gMTsKKyAgICB9CisKKyAgICBsb2dNZXNzYWdlKExPR19DQVRFR09SWShCTFVFVE9PVEhfSU8pLCAiaW5lbGlnaWJsZSBkcml2ZXIiKTsKKyAgICByZXR1cm4gMDsKKyAgfQorCisgIGxvZ01lc3NhZ2UoTE9HX0NBVEVHT1JZKEJMVUVUT09USF9JTyksICJkcml2ZXIgbm90IHNwZWNpZmllZCIpOworICByZXR1cm4gMDsKK30KKworc3RhdGljIGludAorYnRoR2V0RGV2aWNlQWRkcmVzcyAodWludDY0X3QgKmFkZHJlc3MsIGNoYXIgKipwYXJhbWV0ZXJzLCBjb25zdCBjaGFyICpkcml2ZXIpIHsKKyAgeworICAgIGNvbnN0IGNoYXIgKnBhcmFtZXRlciA9IHBhcmFtZXRlcnNbQlRIX1BBUk1fQUREUkVTU107CisKKyAgICBpZiAocGFyYW1ldGVyICYmICpwYXJhbWV0ZXIpIHsKKyAgICAgIHJldHVybiBidGhQYXJzZUFkZHJlc3MoYWRkcmVzcywgcGFyYW1ldGVyKTsKKyAgICB9CisgIH0KKworICB7CisgICAgYnRoRGlzY292ZXJEZXZpY2VzKCk7CisgICAgUXVldWUgKmRldmljZXMgPSBidGhHZXREZXZpY2VRdWV1ZSgwKTsKKworICAgIGlmIChkZXZpY2VzKSB7CisgICAgICBjb25zdCBjaGFyICpuYW1lID0gcGFyYW1ldGVyc1tCVEhfUEFSTV9OQU1FXTsKKworICAgICAgR2V0RGV2aWNlQWRkcmVzc0RhdGEgZ2RhID0geworICAgICAgICAubmFtZSA9IHsKKyAgICAgICAgICAuYWRkcmVzcyA9IG5hbWUsCisgICAgICAgICAgLmxlbmd0aCA9IG5hbWU/IHN0cmxlbihuYW1lKTogMAorICAgICAgICB9LAorCisgICAgICAgIC5kcml2ZXIgPSB7CisgICAgICAgICAgLmFkZHJlc3MgPSBkcml2ZXIsCisgICAgICAgICAgLmxlbmd0aCA9IGRyaXZlcj8gc3RybGVuKGRyaXZlcik6IDAKKyAgICAgICAgfQorICAgICAgfTsKKworICAgICAgaWYgKGdkYS5kcml2ZXIubGVuZ3RoKSB7CisgICAgICAgIGxvZ01lc3NhZ2UoTE9HX0NBVEVHT1JZKEJMVUVUT09USF9JTyksICJiZWdpbiBkZXZpY2Ugc2VhcmNoIik7CisgICAgICAgIGNvbnN0IEJsdWV0b290aERldmljZUVudHJ5ICpkZXZpY2UgPSBmaW5kSXRlbShkZXZpY2VzLCBidGhUZXN0RGV2aWNlTmFtZSwgJmdkYSk7CisgICAgICAgIGxvZ01lc3NhZ2UoTE9HX0NBVEVHT1JZKEJMVUVUT09USF9JTyksICJlbmQgZGV2aWNlIHNlYXJjaCIpOworCisgICAgICAgIGlmIChkZXZpY2UpIHsKKyAgICAgICAgICAqYWRkcmVzcyA9IGRldmljZS0+YWRkcmVzczsKKyAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgfQorICAgICAgfQorICAgIH0KKyAgfQorCisgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50CitidGhQcm9jZXNzVGltZW91dFBhcmFtZXRlciAoQmx1ZXRvb3RoQ29ubmVjdGlvblJlcXVlc3QgKnJlcXVlc3QsIGNvbnN0IGNoYXIgKnBhcmFtZXRlcikgeworICBpbnQgc2Vjb25kczsKKworICBpZiAoIXBhcmFtZXRlcikgcmV0dXJuIDE7CisgIGlmICghKnBhcmFtZXRlcikgcmV0dXJuIDE7CisKKyAgaWYgKGlzSW50ZWdlcigmc2Vjb25kcywgcGFyYW1ldGVyKSkgeworICAgIGlmICgoc2Vjb25kcyA+IDApICYmIChzZWNvbmRzIDwgNjApKSB7CisgICAgICByZXF1ZXN0LT50aW1lb3V0ID0gc2Vjb25kcyAqIE1TRUNTX1BFUl9TRUM7CisgICAgICByZXR1cm4gMTsKKyAgICB9CisgIH0KKworICBsb2dNZXNzYWdlKExPR19FUlIsICJpbnZhbGlkIEJsdWV0b290aCBjb25uZWN0aW9uIHRpbWVvdXQ6ICVzIiwgcGFyYW1ldGVyKTsKKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK2J0aFByb2Nlc3NDaGFubmVsUGFyYW1ldGVyIChCbHVldG9vdGhDb25uZWN0aW9uUmVxdWVzdCAqcmVxdWVzdCwgY29uc3QgY2hhciAqcGFyYW1ldGVyKSB7CisgIHVpbnQ4X3QgY2hhbm5lbDsKKworICBpZiAoIXBhcmFtZXRlcikgcmV0dXJuIDE7CisgIGlmICghKnBhcmFtZXRlcikgcmV0dXJuIDE7CisKKyAgaWYgKGJ0aFBhcnNlQ2hhbm5lbE51bWJlcigmY2hhbm5lbCwgcGFyYW1ldGVyKSkgeworICAgIHJlcXVlc3QtPmNoYW5uZWwgPSBjaGFubmVsOworICAgIHJlcXVlc3QtPmRpc2NvdmVyID0gMDsKKyAgICByZXR1cm4gMTsKKyAgfQorCisgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50CitidGhQcm9jZXNzRGlzY292ZXJQYXJhbWV0ZXIgKEJsdWV0b290aENvbm5lY3Rpb25SZXF1ZXN0ICpyZXF1ZXN0LCBjb25zdCBjaGFyICpwYXJhbWV0ZXIpIHsKKyAgdW5zaWduZWQgaW50IGZsYWc7CisKKyAgaWYgKCFwYXJhbWV0ZXIpIHJldHVybiAxOworICBpZiAoISpwYXJhbWV0ZXIpIHJldHVybiAxOworCisgIGlmICh2YWxpZGF0ZVllc05vKCZmbGFnLCBwYXJhbWV0ZXIpKSB7CisgICAgcmVxdWVzdC0+ZGlzY292ZXIgPSBmbGFnOworICAgIHJldHVybiAxOworICB9CisKKyAgbG9nTWVzc2FnZShMT0dfRVJSLCAiaW52YWxpZCBkaXNjb3ZlciBvcHRpb246ICVzIiwgcGFyYW1ldGVyKTsKKyAgcmV0dXJuIDA7Cit9CisKK2ludAorYnRoQXBwbHlQYXJhbWV0ZXJzIChCbHVldG9vdGhDb25uZWN0aW9uUmVxdWVzdCAqcmVxdWVzdCwgY29uc3QgY2hhciAqaWRlbnRpZmllcikgeworICBjaGFyICoqcGFyYW1ldGVycyA9IGJ0aEdldERldmljZVBhcmFtZXRlcnMoaWRlbnRpZmllcik7CisgIGlmICghcGFyYW1ldGVycykgcmV0dXJuIDA7CisKKyAgaW50IG9rID0gMTsKKyAgaWYgKCFidGhQcm9jZXNzQ2hhbm5lbFBhcmFtZXRlcihyZXF1ZXN0LCBwYXJhbWV0ZXJzW0JUSF9QQVJNX0NIQU5ORUxdKSkgb2sgPSAwOworICBpZiAoIWJ0aFByb2Nlc3NEaXNjb3ZlclBhcmFtZXRlcihyZXF1ZXN0LCBwYXJhbWV0ZXJzW0JUSF9QQVJNX0RJU0NPVkVSXSkpIG9rID0gMDsKKyAgaWYgKCFidGhQcm9jZXNzVGltZW91dFBhcmFtZXRlcihyZXF1ZXN0LCBwYXJhbWV0ZXJzW0JUSF9QQVJNX1RJTUVPVVRdKSkgb2sgPSAwOworICBpZiAoIWJ0aEdldERldmljZUFkZHJlc3MoJnJlcXVlc3QtPmFkZHJlc3MsIHBhcmFtZXRlcnMsIHJlcXVlc3QtPmRyaXZlcikpIG9rID0gMDsKKworICBkZWFsbG9jYXRlU3RyaW5ncyhwYXJhbWV0ZXJzKTsKKyAgcmV0dXJuIG9rOworfQorCitCbHVldG9vdGhDb25uZWN0aW9uICoKK2J0aE9wZW5Db25uZWN0aW9uIChjb25zdCBCbHVldG9vdGhDb25uZWN0aW9uUmVxdWVzdCAqcmVxdWVzdCkgeworICBCbHVldG9vdGhDb25uZWN0aW9uICpjb25uZWN0aW9uOworCisgIGlmICgoY29ubmVjdGlvbiA9IG1hbGxvYyhzaXplb2YoKmNvbm5lY3Rpb24pKSkpIHsKKyAgICBtZW1zZXQoY29ubmVjdGlvbiwgMCwgc2l6ZW9mKCpjb25uZWN0aW9uKSk7CisgICAgY29ubmVjdGlvbi0+YWRkcmVzcyA9IHJlcXVlc3QtPmFkZHJlc3M7CisgICAgY29ubmVjdGlvbi0+Y2hhbm5lbCA9IHJlcXVlc3QtPmNoYW5uZWw7CisKKyAgICBpZiAoKGNvbm5lY3Rpb24tPmV4dGVuc2lvbiA9IGJ0aE5ld0Nvbm5lY3Rpb25FeHRlbnNpb24oY29ubmVjdGlvbi0+YWRkcmVzcykpKSB7CisgICAgICBpbnQgYWxyZWFkeVRyaWVkID0gMDsKKworICAgICAgeworICAgICAgICBpbnQgdmFsdWU7CisKKyAgICAgICAgaWYgKGJ0aFJlY2FsbENvbm5lY3RFcnJvcihjb25uZWN0aW9uLT5hZGRyZXNzLCAmdmFsdWUpKSB7CisgICAgICAgICAgZXJybm8gPSB2YWx1ZTsKKyAgICAgICAgICBhbHJlYWR5VHJpZWQgPSAxOworICAgICAgICB9CisgICAgICB9CisKKyAgICAgIGlmICghYWxyZWFkeVRyaWVkKSB7CisgICAgICAgIGlmIChyZXF1ZXN0LT5kaXNjb3ZlcikgYnRoRGlzY292ZXJTZXJpYWxQb3J0Q2hhbm5lbCgmY29ubmVjdGlvbi0+Y2hhbm5lbCwgY29ubmVjdGlvbi0+ZXh0ZW5zaW9uLCByZXF1ZXN0LT50aW1lb3V0KTsKKyAgICAgICAgYnRoTG9nQ2hhbm5lbChjb25uZWN0aW9uLT5jaGFubmVsKTsKKworICAgICAgICB7CisgICAgICAgICAgVGltZVBlcmlvZCBwZXJpb2Q7CisgICAgICAgICAgc3RhcnRUaW1lUGVyaW9kKCZwZXJpb2QsIEJMVUVUT09USF9DSEFOTkVMX0JVU1lfUkVUUllfVElNRU9VVCk7CisKKyAgICAgICAgICB3aGlsZSAoMSkgeworICAgICAgICAgICAgaWYgKGJ0aE9wZW5DaGFubmVsKGNvbm5lY3Rpb24tPmV4dGVuc2lvbiwgY29ubmVjdGlvbi0+Y2hhbm5lbCwgcmVxdWVzdC0+dGltZW91dCkpIHsKKyAgICAgICAgICAgICAgcmV0dXJuIGNvbm5lY3Rpb247CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChhZnRlclRpbWVQZXJpb2QoJnBlcmlvZCwgTlVMTCkpIGJyZWFrOworICAgICAgICAgICAgaWYgKGVycm5vICE9IEVCVVNZKSBicmVhazsKKyAgICAgICAgICAgIGFzeW5jV2FpdChCTFVFVE9PVEhfQ0hBTk5FTF9CVVNZX1JFVFJZX0lOVEVSVkFMKTsKKyAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBidGhSZW1lbWJlckNvbm5lY3RFcnJvcihjb25uZWN0aW9uLT5hZGRyZXNzLCBlcnJubyk7CisgICAgICB9CisKKyAgICAgIGJ0aFJlbGVhc2VDb25uZWN0aW9uRXh0ZW5zaW9uKGNvbm5lY3Rpb24tPmV4dGVuc2lvbik7CisgICAgfQorCisgICAgZnJlZShjb25uZWN0aW9uKTsKKyAgfSBlbHNlIHsKKyAgICBsb2dNYWxsb2NFcnJvcigpOworICB9CisKKyAgcmV0dXJuIE5VTEw7Cit9CisKK3ZvaWQKK2J0aENsb3NlQ29ubmVjdGlvbiAoQmx1ZXRvb3RoQ29ubmVjdGlvbiAqY29ubmVjdGlvbikgeworICBidGhSZWxlYXNlQ29ubmVjdGlvbkV4dGVuc2lvbihjb25uZWN0aW9uLT5leHRlbnNpb24pOworICBmcmVlKGNvbm5lY3Rpb24pOworfQorCitjb25zdCBjaGFyICoKK2J0aE1ha2VDb25uZWN0aW9uSWRlbnRpZmllciAoQmx1ZXRvb3RoQ29ubmVjdGlvbiAqY29ubmVjdGlvbiwgY2hhciAqYnVmZmVyLCBzaXplX3Qgc2l6ZSkgeworICBzaXplX3QgbGVuZ3RoOworICBTVFJfQkVHSU4oYnVmZmVyLCBzaXplKTsKKyAgU1RSX1BSSU5URigiJXMlYyIsIEJMVUVUT09USF9ERVZJQ0VfUVVBTElGSUVSLCBQQVJBTUVURVJfUVVBTElGSUVSX0NIQVJBQ1RFUik7CisKKyAgeworICAgIHVpbnQ2NF90IGFkZHJlc3MgPSBidGhHZXRBZGRyZXNzKGNvbm5lY3Rpb24pOworICAgIFNUUl9QUklOVEYoIiVzJWMiLCBidGhEZXZpY2VQYXJhbWV0ZXJOYW1lc1tCVEhfUEFSTV9BRERSRVNTXSwgUEFSQU1FVEVSX0FTU0lHTk1FTlRfQ0hBUkFDVEVSKTsKKyAgICBTVFJfRk9STUFUKGJ0aEZvcm1hdEFkZHJlc3MsIGFkZHJlc3MpOworICAgIFNUUl9QUklOVEYoIiVjIiwgREVWSUNFX1BBUkFNRVRFUl9TRVBBUkFUT1IpOworICB9CisKKyAgeworICAgIHVpbnQ4X3QgY2hhbm5lbCA9IGJ0aEdldENoYW5uZWwoY29ubmVjdGlvbik7CisKKyAgICBpZiAoY2hhbm5lbCkgeworICAgICAgU1RSX1BSSU5URigKKyAgICAgICAgIiVzJWMldSVjIiwKKyAgICAgICAgYnRoRGV2aWNlUGFyYW1ldGVyTmFtZXNbQlRIX1BBUk1fQ0hBTk5FTF0sCisgICAgICAgIFBBUkFNRVRFUl9BU1NJR05NRU5UX0NIQVJBQ1RFUiwKKyAgICAgICAgY2hhbm5lbCwKKyAgICAgICAgREVWSUNFX1BBUkFNRVRFUl9TRVBBUkFUT1IKKyAgICAgICk7CisgICAgfQorICB9CisKKyAgbGVuZ3RoID0gU1RSX0xFTkdUSDsKKyAgU1RSX0VORDsKKworICB7CisgICAgY2hhciAqbGFzdCA9ICZidWZmZXJbbGVuZ3RoXSAtIDE7CisgICAgaWYgKCpsYXN0ID09IERFVklDRV9QQVJBTUVURVJfU0VQQVJBVE9SKSAqbGFzdCA9IDA7CisgIH0KKworICByZXR1cm4gYnVmZmVyOworfQorCit1aW50NjRfdAorYnRoR2V0QWRkcmVzcyAoQmx1ZXRvb3RoQ29ubmVjdGlvbiAqY29ubmVjdGlvbikgeworICByZXR1cm4gY29ubmVjdGlvbi0+YWRkcmVzczsKK30KKwordWludDhfdAorYnRoR2V0Q2hhbm5lbCAoQmx1ZXRvb3RoQ29ubmVjdGlvbiAqY29ubmVjdGlvbikgeworICByZXR1cm4gY29ubmVjdGlvbi0+Y2hhbm5lbDsKK30KKworaW50CitidGhBd2FpdElucHV0IChCbHVldG9vdGhDb25uZWN0aW9uICpjb25uZWN0aW9uLCBpbnQgdGltZW91dCkgeworICByZXR1cm4gYnRoUG9sbElucHV0KGNvbm5lY3Rpb24tPmV4dGVuc2lvbiwgdGltZW91dCk7Cit9CisKK3NzaXplX3QKK2J0aFJlYWREYXRhICgKKyAgQmx1ZXRvb3RoQ29ubmVjdGlvbiAqY29ubmVjdGlvbiwgdm9pZCAqYnVmZmVyLCBzaXplX3Qgc2l6ZSwKKyAgaW50IGluaXRpYWxUaW1lb3V0LCBpbnQgc3Vic2VxdWVudFRpbWVvdXQKKykgeworICBzc2l6ZV90IHJlc3VsdCA9IGJ0aEdldERhdGEoY29ubmVjdGlvbi0+ZXh0ZW5zaW9uLCBidWZmZXIsIHNpemUsIGluaXRpYWxUaW1lb3V0LCBzdWJzZXF1ZW50VGltZW91dCk7CisKKyAgaWYgKHJlc3VsdCA+IDApIGxvZ0J5dGVzKExPR19DQVRFR09SWShCTFVFVE9PVEhfSU8pLCAiaW5wdXQiLCBidWZmZXIsIHJlc3VsdCk7CisgIHJldHVybiByZXN1bHQ7Cit9CisKK3NzaXplX3QKK2J0aFdyaXRlRGF0YSAoQmx1ZXRvb3RoQ29ubmVjdGlvbiAqY29ubmVjdGlvbiwgY29uc3Qgdm9pZCAqYnVmZmVyLCBzaXplX3Qgc2l6ZSkgeworICBpZiAoc2l6ZSA+IDApIGxvZ0J5dGVzKExPR19DQVRFR09SWShCTFVFVE9PVEhfSU8pLCAib3V0cHV0IiwgYnVmZmVyLCBzaXplKTsKKyAgcmV0dXJuIGJ0aFB1dERhdGEoY29ubmVjdGlvbi0+ZXh0ZW5zaW9uLCBidWZmZXIsIHNpemUpOworfQorCitzdGF0aWMgY29uc3QgY2hhciAqCitidGhHZXREZXZpY2VOYW1lICh1aW50NjRfdCBhZGRyZXNzLCBpbnQgdGltZW91dCkgeworICBidGhEaXNjb3ZlckRldmljZXMoKTsKKyAgQmx1ZXRvb3RoRGV2aWNlRW50cnkgKmVudHJ5ID0gYnRoR2V0RGV2aWNlRW50cnkoYWRkcmVzcywgMSk7CisKKyAgaWYgKGVudHJ5KSB7CisgICAgaWYgKCFlbnRyeS0+bmFtZSkgeworICAgICAgbG9nTWVzc2FnZShMT0dfQ0FURUdPUlkoQkxVRVRPT1RIX0lPKSwgIm9idGFpbmluZyBkZXZpY2UgbmFtZSIpOworCisgICAgICBpZiAoKGVudHJ5LT5uYW1lID0gYnRoT2J0YWluRGV2aWNlTmFtZShhZGRyZXNzLCB0aW1lb3V0KSkpIHsKKyAgICAgICAgbG9nTWVzc2FnZShMT0dfQ0FURUdPUlkoQkxVRVRPT1RIX0lPKSwgImRldmljZSBuYW1lOiAlcyIsIGVudHJ5LT5uYW1lKTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIGxvZ01lc3NhZ2UoTE9HX0NBVEVHT1JZKEJMVUVUT09USF9JTyksICJkZXZpY2UgbmFtZSBub3Qgb2J0YWluZWQiKTsKKyAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gZW50cnktPm5hbWU7CisgIH0KKworICByZXR1cm4gTlVMTDsKK30KKworY29uc3QgY2hhciAqCitidGhHZXROYW1lT2ZEZXZpY2UgKEJsdWV0b290aENvbm5lY3Rpb24gKmNvbm5lY3Rpb24sIGludCB0aW1lb3V0KSB7CisgIHJldHVybiBidGhHZXREZXZpY2VOYW1lKGNvbm5lY3Rpb24tPmFkZHJlc3MsIHRpbWVvdXQpOworfQorCitjb25zdCBjaGFyICoKK2J0aEdldE5hbWVBdEFkZHJlc3MgKGNvbnN0IGNoYXIgKmFkZHJlc3MsIGludCB0aW1lb3V0KSB7CisgIHVpbnQ2NF90IGJkYTsKKworICBpZiAoYnRoUGFyc2VBZGRyZXNzKCZiZGEsIGFkZHJlc3MpKSB7CisgICAgcmV0dXJuIGJ0aEdldERldmljZU5hbWUoYmRhLCB0aW1lb3V0KTsKKyAgfQorCisgIHJldHVybiBOVUxMOworfQorCitzdGF0aWMgc3RydWN0IHsKKyAgY29uc3QgY2hhciAqKnRhYmxlOworICB1bnNpZ25lZCBpbnQgY291bnQ7CisgIHVuc2lnbmVkIGludCBzaXplOworfSBkcml2ZXJDb2RlcyA9IHsKKyAgLnRhYmxlID0gTlVMTCwKKyAgLmNvdW50ID0gMCwKKyAgLnNpemUgPSAwCit9OworCitzdGF0aWMgaW50CitidGhGaW5kRHJpdmVyQ29kZSAodW5zaWduZWQgaW50ICpwb3NpdGlvbiwgY29uc3QgY2hhciAqY29kZSkgeworICBpbnQgZmlyc3QgPSAwOworICBpbnQgbGFzdCA9IGRyaXZlckNvZGVzLmNvdW50IC0gMTsKKworICB3aGlsZSAoZmlyc3QgPD0gbGFzdCkgeworICAgIHVuc2lnbmVkIGludCBjdXJyZW50ID0gKGZpcnN0ICsgbGFzdCkgLyAyOworICAgIGludCByZWxhdGlvbiA9IHN0cmNtcChjb2RlLCBkcml2ZXJDb2Rlcy50YWJsZVtjdXJyZW50XSk7CisKKyAgICBpZiAocmVsYXRpb24gPCAwKSB7CisgICAgICBsYXN0ID0gY3VycmVudCAtIDE7CisgICAgfSBlbHNlIGlmIChyZWxhdGlvbiA+IDApIHsKKyAgICAgIGZpcnN0ID0gY3VycmVudCArIDE7CisgICAgfSBlbHNlIHsKKyAgICAgICpwb3NpdGlvbiA9IGN1cnJlbnQ7CisgICAgICByZXR1cm4gMTsKKyAgICB9CisgIH0KKworICAqcG9zaXRpb24gPSBmaXJzdDsKKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK2J0aEVuc3VyZURyaXZlckNvZGVUYWJsZVNpemUgKHZvaWQpIHsKKyAgaWYgKGRyaXZlckNvZGVzLmNvdW50IDwgZHJpdmVyQ29kZXMuc2l6ZSkgcmV0dXJuIDE7CisKKyAgdW5zaWduZWQgaW50IG5ld1NpemUgPSBkcml2ZXJDb2Rlcy5zaXplICsgMFgxMDsKKyAgY29uc3QgY2hhciAqKm5ld1RhYmxlID0gcmVhbGxvYyhkcml2ZXJDb2Rlcy50YWJsZSwgQVJSQVlfU0laRShkcml2ZXJDb2Rlcy50YWJsZSwgbmV3U2l6ZSkpOworCisgIGlmICghbmV3VGFibGUpIHsKKyAgICBsb2dNYWxsb2NFcnJvcigpOworICAgIHJldHVybiAwOworICB9CisKKyAgZHJpdmVyQ29kZXMudGFibGUgPSBuZXdUYWJsZTsKKyAgZHJpdmVyQ29kZXMuc2l6ZSA9IG5ld1NpemU7CisgIHJldHVybiAxOworfQorCitzdGF0aWMgaW50CitidGhBZGREcml2ZXJDb2RlIChjb25zdCBjaGFyICpjb2RlKSB7CisgIHVuc2lnbmVkIGludCBwb3NpdGlvbjsKKyAgaWYgKGJ0aEZpbmREcml2ZXJDb2RlKCZwb3NpdGlvbiwgY29kZSkpIHJldHVybiAxOworICBpZiAoIWJ0aEVuc3VyZURyaXZlckNvZGVUYWJsZVNpemUoKSkgcmV0dXJuIDA7CisKKyAgbWVtbW92ZSgmZHJpdmVyQ29kZXMudGFibGVbcG9zaXRpb24rMV0sICZkcml2ZXJDb2Rlcy50YWJsZVtwb3NpdGlvbl0sCisgICAgICAgICAgQVJSQVlfU0laRShkcml2ZXJDb2Rlcy50YWJsZSwgKGRyaXZlckNvZGVzLmNvdW50IC0gcG9zaXRpb24pKSk7CisKKyAgZHJpdmVyQ29kZXMuY291bnQgKz0gMTsKKyAgZHJpdmVyQ29kZXMudGFibGVbcG9zaXRpb25dID0gY29kZTsKKyAgcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICpjb25zdCAqCitidGhHZXRBbGxEcml2ZXJDb2RlcyAodm9pZCkgeworICBpZiAoZHJpdmVyQ29kZXMudGFibGUpIHJldHVybiBkcml2ZXJDb2Rlcy50YWJsZTsKKyAgY29uc3QgQmx1ZXRvb3RoTmFtZUVudHJ5ICplbnRyeSA9IGJsdWV0b290aE5hbWVUYWJsZTsKKworICB3aGlsZSAoZW50cnktPm5hbWVQcmVmaXgpIHsKKyAgICBjb25zdCBjaGFyICpjb25zdCAqY29kZSA9IGVudHJ5LT5kcml2ZXJDb2RlczsKKworICAgIHdoaWxlICgqY29kZSkgeworICAgICAgaWYgKCFidGhBZGREcml2ZXJDb2RlKCpjb2RlKSkgZ290byBmYWlsdXJlOworICAgICAgY29kZSArPSAxOworICAgIH0KKworICAgIGVudHJ5ICs9IDE7CisgIH0KKworICBpZiAoYnRoRW5zdXJlRHJpdmVyQ29kZVRhYmxlU2l6ZSgpKSB7CisgICAgZHJpdmVyQ29kZXMudGFibGVbZHJpdmVyQ29kZXMuY291bnRdID0gTlVMTDsKKyAgICByZXR1cm4gZHJpdmVyQ29kZXMudGFibGU7CisgIH0KKworZmFpbHVyZToKKyAgaWYgKGRyaXZlckNvZGVzLnRhYmxlKSB7CisgICAgZnJlZShkcml2ZXJDb2Rlcy50YWJsZSk7CisgICAgbWVtc2V0KCZkcml2ZXJDb2RlcywgMCwgc2l6ZW9mKGRyaXZlckNvZGVzKSk7CisgIH0KKworICBzdGF0aWMgY29uc3QgY2hhciAqY29uc3QgKm5vRHJpdmVyQ29kZXMgPSB7TlVMTH07CisgIHJldHVybiBub0RyaXZlckNvZGVzOworfQorCitjb25zdCBjaGFyICpjb25zdCAqCitidGhHZXREcml2ZXJDb2RlcyAoY29uc3QgY2hhciAqaWRlbnRpZmllciwgaW50IHRpbWVvdXQpIHsKKyAgY29uc3QgY2hhciAqY29uc3QgKmNvZGVzID0gTlVMTDsKKyAgY2hhciAqKnBhcmFtZXRlcnMgPSBidGhHZXREZXZpY2VQYXJhbWV0ZXJzKGlkZW50aWZpZXIpOworCisgIGlmIChwYXJhbWV0ZXJzKSB7CisgICAgdWludDY0X3QgYWRkcmVzczsKKworICAgIGlmIChidGhHZXREZXZpY2VBZGRyZXNzKCZhZGRyZXNzLCBwYXJhbWV0ZXJzLCBOVUxMKSkgeworICAgICAgY29uc3QgY2hhciAqbmFtZSA9IGJ0aEdldERldmljZU5hbWUoYWRkcmVzcywgdGltZW91dCk7CisgICAgICBjb25zdCBCbHVldG9vdGhOYW1lRW50cnkgKmVudHJ5ID0gYnRoR2V0TmFtZUVudHJ5KG5hbWUpOworICAgICAgaWYgKGVudHJ5KSBjb2RlcyA9IGVudHJ5LT5kcml2ZXJDb2RlczsKKyAgICB9CisKKyAgICBkZWFsbG9jYXRlU3RyaW5ncyhwYXJhbWV0ZXJzKTsKKyAgfQorCisgIGlmICghY29kZXMpIGNvZGVzID0gYnRoR2V0QWxsRHJpdmVyQ29kZXMoKTsKKyAgcmV0dXJuIGNvZGVzOworfQorCitpbnQKK2lzQmx1ZXRvb3RoRGV2aWNlSWRlbnRpZmllciAoY29uc3QgY2hhciAqKmlkZW50aWZpZXIpIHsKKyAgcmV0dXJuIGhhc1F1YWxpZmllcihpZGVudGlmaWVyLCBCTFVFVE9PVEhfREVWSUNFX1FVQUxJRklFUik7Cit9CmRpZmYgLS1naXQgYS9Qcm9ncmFtcy9ibHVldG9vdGhfYW5kcm9pZC5jIGIvUHJvZ3JhbXMvYmx1ZXRvb3RoX2FuZHJvaWQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41Y2QyM2Y1Ci0tLSAvZGV2L251bGwKKysrIGIvUHJvZ3JhbXMvYmx1ZXRvb3RoX2FuZHJvaWQuYwpAQCAtMCwwICsxLDQ0OCBAQAorLyoKKyAqIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisgKiAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisgKgorICogQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKKyNpbmNsdWRlICJwcm9sb2d1ZS5oIgorCisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKworI2luY2x1ZGUgImxvZy5oIgorI2luY2x1ZGUgImlvX2JsdWV0b290aC5oIgorI2luY2x1ZGUgImJsdWV0b290aF9pbnRlcm5hbC5oIgorI2luY2x1ZGUgImFzeW5jX2hhbmRsZS5oIgorI2luY2x1ZGUgImFzeW5jX2lvLmgiCisjaW5jbHVkZSAiaW9fbWlzYy5oIgorI2luY2x1ZGUgInRocmVhZC5oIgorI2luY2x1ZGUgInN5c3RlbV9qYXZhLmgiCisKK3N0YXRpYyBqY2xhc3MgY29ubmVjdGlvbkNsYXNzID0gTlVMTDsKK3N0YXRpYyBqbWV0aG9kSUQgY29ubmVjdGlvbkNvbnN0cnVjdG9yID0gMDsKK3N0YXRpYyBqbWV0aG9kSUQgY2FuRGlzY292ZXJNZXRob2QgPSAwOworc3RhdGljIGptZXRob2RJRCBvcGVuTWV0aG9kID0gMDsKK3N0YXRpYyBqbWV0aG9kSUQgY2xvc2VNZXRob2QgPSAwOworc3RhdGljIGptZXRob2RJRCB3cml0ZU1ldGhvZCA9IDA7CisKK3N0YXRpYyBpbnQKK2J0aEdldENvbm5lY3Rpb25DbGFzcyAoSk5JRW52ICplbnYpIHsKKyAgcmV0dXJuIGZpbmRKYXZhQ2xhc3MoCisgICAgZW52LCAmY29ubmVjdGlvbkNsYXNzLCBKQVZBX09CSl9CUkxUVFkoIkJsdWV0b290aENvbm5lY3Rpb24iKQorICApOworfQorCitzdGF0aWMgaW50CitidGhHZXRDb25uZWN0aW9uQ29uc3RydWN0b3IgKEpOSUVudiAqZW52KSB7CisgIHJldHVybiBmaW5kSmF2YUNvbnN0cnVjdG9yKAorICAgIGVudiwgJmNvbm5lY3Rpb25Db25zdHJ1Y3RvciwgY29ubmVjdGlvbkNsYXNzLAorICAgIEpBVkFfU0lHX0NPTlNUUlVDVE9SKAorICAgICAgSkFWQV9TSUdfTE9ORyAvLyBhZGRyZXNzCisgICAgKQorICApOworfQorCitzdGF0aWMgaW50CitidGhHZXRDYW5EaXNjb3Zlck1ldGhvZCAoSk5JRW52ICplbnYpIHsKKyAgcmV0dXJuIGZpbmRKYXZhSW5zdGFuY2VNZXRob2QoCisgICAgZW52LCAmY2FuRGlzY292ZXJNZXRob2QsIGNvbm5lY3Rpb25DbGFzcywgImNhbkRpc2NvdmVyIiwKKyAgICBKQVZBX1NJR19NRVRIT0QoSkFWQV9TSUdfQk9PTEVBTiwKKyAgICApCisgICk7Cit9CisKK3N0YXRpYyBpbnQKK2J0aEdldE9wZW5NZXRob2QgKEpOSUVudiAqZW52KSB7CisgIHJldHVybiBmaW5kSmF2YUluc3RhbmNlTWV0aG9kKAorICAgIGVudiwgJm9wZW5NZXRob2QsIGNvbm5lY3Rpb25DbGFzcywgIm9wZW4iLAorICAgIEpBVkFfU0lHX01FVEhPRChKQVZBX1NJR19CT09MRUFOLAorICAgICAgSkFWQV9TSUdfSU5UIC8vIGlucHV0UGlwZQorICAgICAgSkFWQV9TSUdfSU5UIC8vIGNoYW5uZWwKKyAgICAgIEpBVkFfU0lHX0JPT0xFQU4gLy8gc2VjdXJlCisgICAgKQorICApOworfQorCitzdGF0aWMgaW50CitidGhHZXRDbG9zZU1ldGhvZCAoSk5JRW52ICplbnYpIHsKKyAgcmV0dXJuIGZpbmRKYXZhSW5zdGFuY2VNZXRob2QoCisgICAgZW52LCAmY2xvc2VNZXRob2QsIGNvbm5lY3Rpb25DbGFzcywgImNsb3NlIiwKKyAgICBKQVZBX1NJR19NRVRIT0QoSkFWQV9TSUdfVk9JRCwKKyAgICApCisgICk7Cit9CisKK3N0YXRpYyBpbnQKK2J0aEdldFdyaXRlTWV0aG9kIChKTklFbnYgKmVudikgeworICByZXR1cm4gKGZpbmRKYXZhSW5zdGFuY2VNZXRob2QoCisgICAgZW52LCAmd3JpdGVNZXRob2QsIGNvbm5lY3Rpb25DbGFzcywgIndyaXRlIiwKKyAgICBKQVZBX1NJR19NRVRIT0QoSkFWQV9TSUdfQk9PTEVBTiwKKyAgICAgIEpBVkFfU0lHX0FSUkFZKEpBVkFfU0lHX0JZVEUpKSAvLyBieXRlcworICAgICkKKyAgKTsKK30KKworc3RydWN0IEJsdWV0b290aENvbm5lY3Rpb25FeHRlbnNpb25TdHJ1Y3QgeworICBKTklFbnYgKmVudjsKKworICBqb2JqZWN0IGNvbm5lY3Rpb247CisgIEFzeW5jSGFuZGxlIGlucHV0TW9uaXRvcjsKKyAgaW50IGlucHV0UGlwZVsyXTsKK307CisKK0JsdWV0b290aENvbm5lY3Rpb25FeHRlbnNpb24gKgorYnRoTmV3Q29ubmVjdGlvbkV4dGVuc2lvbiAodWludDY0X3QgYmRhKSB7CisgIEJsdWV0b290aENvbm5lY3Rpb25FeHRlbnNpb24gKmJjeDsKKworICBpZiAoKGJjeCA9IG1hbGxvYyhzaXplb2YoKmJjeCkpKSkgeworICAgIG1lbXNldChiY3gsIDAsIHNpemVvZigqYmN4KSk7CisKKyAgICBiY3gtPmlucHV0UGlwZVswXSA9IElOVkFMSURfRklMRV9ERVNDUklQVE9SOworICAgIGJjeC0+aW5wdXRQaXBlWzFdID0gSU5WQUxJRF9GSUxFX0RFU0NSSVBUT1I7CisKKyAgICBpZiAoKGJjeC0+ZW52ID0gZ2V0SmF2YU5hdGl2ZUludGVyZmFjZSgpKSkgeworICAgICAgaWYgKGJ0aEdldENvbm5lY3Rpb25DbGFzcyhiY3gtPmVudikpIHsKKyAgICAgICAgaWYgKGJ0aEdldENvbm5lY3Rpb25Db25zdHJ1Y3RvcihiY3gtPmVudikpIHsKKyAgICAgICAgICBqb2JqZWN0IGxvY2FsUmVmZXJlbmNlID0gKCpiY3gtPmVudiktPk5ld09iamVjdChiY3gtPmVudiwgY29ubmVjdGlvbkNsYXNzLCBjb25uZWN0aW9uQ29uc3RydWN0b3IsIGJkYSk7CisKKyAgICAgICAgICBpZiAoIWNsZWFySmF2YUV4Y2VwdGlvbihiY3gtPmVudiwgMSkpIHsKKyAgICAgICAgICAgIGpvYmplY3QgZ2xvYmFsUmVmZXJlbmNlID0gKCpiY3gtPmVudiktPk5ld0dsb2JhbFJlZihiY3gtPmVudiwgbG9jYWxSZWZlcmVuY2UpOworCisgICAgICAgICAgICAoKmJjeC0+ZW52KS0+RGVsZXRlTG9jYWxSZWYoYmN4LT5lbnYsIGxvY2FsUmVmZXJlbmNlKTsKKyAgICAgICAgICAgIGxvY2FsUmVmZXJlbmNlID0gTlVMTDsKKworICAgICAgICAgICAgaWYgKGdsb2JhbFJlZmVyZW5jZSkgeworICAgICAgICAgICAgICBiY3gtPmNvbm5lY3Rpb24gPSBnbG9iYWxSZWZlcmVuY2U7CisgICAgICAgICAgICAgIHJldHVybiBiY3g7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICBsb2dNYWxsb2NFcnJvcigpOworICAgICAgICAgICAgICBjbGVhckphdmFFeGNlcHRpb24oYmN4LT5lbnYsIDApOworICAgICAgICAgICAgfQorICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgfQorICAgIH0KKworICAgIGZyZWUoYmN4KTsKKyAgfSBlbHNlIHsKKyAgICBsb2dNYWxsb2NFcnJvcigpOworICB9CisKKyAgcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyB2b2lkCitidGhDYW5jZWxJbnB1dE1vbml0b3IgKEJsdWV0b290aENvbm5lY3Rpb25FeHRlbnNpb24gKmJjeCkgeworICBpZiAoYmN4LT5pbnB1dE1vbml0b3IpIHsKKyAgICBhc3luY0NhbmNlbFJlcXVlc3QoYmN4LT5pbnB1dE1vbml0b3IpOworICAgIGJjeC0+aW5wdXRNb25pdG9yID0gTlVMTDsKKyAgfQorfQorCit2b2lkCitidGhSZWxlYXNlQ29ubmVjdGlvbkV4dGVuc2lvbiAoQmx1ZXRvb3RoQ29ubmVjdGlvbkV4dGVuc2lvbiAqYmN4KSB7CisgIGJ0aENhbmNlbElucHV0TW9uaXRvcihiY3gpOworCisgIGlmIChiY3gtPmNvbm5lY3Rpb24pIHsKKyAgICBpZiAoYnRoR2V0Q2xvc2VNZXRob2QoYmN4LT5lbnYpKSB7CisgICAgICAoKmJjeC0+ZW52KS0+Q2FsbFZvaWRNZXRob2QoYmN4LT5lbnYsIGJjeC0+Y29ubmVjdGlvbiwgY2xvc2VNZXRob2QpOworICAgIH0KKworICAgICgqYmN4LT5lbnYpLT5EZWxldGVHbG9iYWxSZWYoYmN4LT5lbnYsIGJjeC0+Y29ubmVjdGlvbik7CisgICAgY2xlYXJKYXZhRXhjZXB0aW9uKGJjeC0+ZW52LCAxKTsKKyAgfQorCisgIGNsb3NlRmlsZSgmYmN4LT5pbnB1dFBpcGVbMF0pOworICBjbG9zZUZpbGUoJmJjeC0+aW5wdXRQaXBlWzFdKTsKKworICBmcmVlKGJjeCk7Cit9CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgQmx1ZXRvb3RoQ29ubmVjdGlvbkV4dGVuc2lvbiAqY29uc3QgYmN4OworICB1aW50OF90IGNvbnN0IGNoYW5uZWw7CisgIGludCBjb25zdCB0aW1lb3V0OworCisgIGludCBlcnJvcjsKK30gT3BlbkJsdWV0b290aENvbm5lY3Rpb25EYXRhOworCitUSFJFQURfRlVOQ1RJT04ocnVuT3BlbkJsdWV0b290aENvbm5lY3Rpb24pIHsKKyAgT3BlbkJsdWV0b290aENvbm5lY3Rpb25EYXRhICpvYmMgPSBhcmd1bWVudDsKKyAgSk5JRW52ICplbnY7CisKKyAgaWYgKChlbnYgPSBnZXRKYXZhTmF0aXZlSW50ZXJmYWNlKCkpKSB7CisgICAgaWYgKHBpcGUob2JjLT5iY3gtPmlucHV0UGlwZSkgIT0gLTEpIHsKKyAgICAgIGlmIChzZXRCbG9ja2luZ0lvKG9iYy0+YmN4LT5pbnB1dFBpcGVbMF0sIDApKSB7CisgICAgICAgIGlmIChidGhHZXRPcGVuTWV0aG9kKGVudikpIHsKKyAgICAgICAgICBqYm9vbGVhbiByZXN1bHQgPSAoKmVudiktPkNhbGxCb29sZWFuTWV0aG9kKGVudiwgb2JjLT5iY3gtPmNvbm5lY3Rpb24sIG9wZW5NZXRob2QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmMtPmJjeC0+aW5wdXRQaXBlWzFdLCBvYmMtPmNoYW5uZWwsIEpOSV9GQUxTRSk7CisKKyAgICAgICAgICBpZiAoIWNsZWFySmF2YUV4Y2VwdGlvbihlbnYsIDEpKSB7CisgICAgICAgICAgICBpZiAocmVzdWx0ID09IEpOSV9UUlVFKSB7CisgICAgICAgICAgICAgIGNsb3NlRmlsZSgmb2JjLT5iY3gtPmlucHV0UGlwZVsxXSk7CisgICAgICAgICAgICAgIG9iYy0+ZXJyb3IgPSAwOworICAgICAgICAgICAgICBnb3RvIGRvbmU7CisgICAgICAgICAgICB9CisgICAgICAgICAgfQorCisgICAgICAgICAgZXJybm8gPSBFSU87CisgICAgICAgIH0KKyAgICAgIH0KKworICAgICAgY2xvc2VGaWxlKCZvYmMtPmJjeC0+aW5wdXRQaXBlWzBdKTsKKyAgICAgIGNsb3NlRmlsZSgmb2JjLT5iY3gtPmlucHV0UGlwZVsxXSk7CisgICAgfSBlbHNlIHsKKyAgICAgIGxvZ1N5c3RlbUVycm9yKCJwaXBlIik7CisgICAgfQorICB9CisKKyAgb2JjLT5lcnJvciA9IGVycm5vOworZG9uZToKKyAgcmV0dXJuIE5VTEw7Cit9CisKK2ludAorYnRoT3BlbkNoYW5uZWwgKEJsdWV0b290aENvbm5lY3Rpb25FeHRlbnNpb24gKmJjeCwgdWludDhfdCBjaGFubmVsLCBpbnQgdGltZW91dCkgeworICBPcGVuQmx1ZXRvb3RoQ29ubmVjdGlvbkRhdGEgb2JjID0geworICAgIC5iY3ggPSBiY3gsCisgICAgLmNoYW5uZWwgPSBjaGFubmVsLAorICAgIC50aW1lb3V0ID0gdGltZW91dCwKKworICAgIC5lcnJvciA9IEVJTworICB9OworCisgIGlmIChjYWxsVGhyZWFkRnVuY3Rpb24oImJsdWV0b290aC1vcGVuIiwgcnVuT3BlbkJsdWV0b290aENvbm5lY3Rpb24sICZvYmMsIE5VTEwpKSB7CisgICAgaWYgKCFvYmMuZXJyb3IpIHJldHVybiAxOworICAgIGVycm5vID0gb2JjLmVycm9yOworICB9CisKKyAgcmV0dXJuIDA7Cit9CisKK2ludAorYnRoRGlzY292ZXJDaGFubmVsICgKKyAgdWludDhfdCAqY2hhbm5lbCwgQmx1ZXRvb3RoQ29ubmVjdGlvbkV4dGVuc2lvbiAqYmN4LAorICBjb25zdCB2b2lkICp1dWlkQnl0ZXMsIHNpemVfdCB1dWlkTGVuZ3RoLAorICBpbnQgdGltZW91dAorKSB7CisgIEpOSUVudiAqZW52ID0gYmN4LT5lbnY7CisKKyAgaWYgKGJ0aEdldENhbkRpc2NvdmVyTWV0aG9kKGVudikpIHsKKyAgICBqYm9vbGVhbiByZXN1bHQgPSAoKmVudiktPkNhbGxCb29sZWFuTWV0aG9kKGVudiwgYmN4LT5jb25uZWN0aW9uLCBjYW5EaXNjb3Zlck1ldGhvZCk7CisKKyAgICBpZiAoIWNsZWFySmF2YUV4Y2VwdGlvbihlbnYsIDEpKSB7CisgICAgICBpbnQgeWVzID0gcmVzdWx0ID09IEpOSV9UUlVFOworCisgICAgICBpZiAoeWVzKSB7CisgICAgICAgIGxvZ01lc3NhZ2UoTE9HX0NBVEVHT1JZKEJMVUVUT09USF9JTyksICJjYW4gZGlzY292ZXIgc2VyaWFsIHBvcnQgY2hhbm5lbCIpOworICAgICAgICAqY2hhbm5lbCA9IDA7CisgICAgICB9IGVsc2UgeworICAgICAgICBlcnJubyA9IEVOT0VOVDsKKyAgICAgIH0KKworICAgICAgcmV0dXJuIHllczsKKyAgICB9CisgIH0KKworICBlcnJubyA9IEVJTzsKKyAgcmV0dXJuIDA7Cit9CisKK2ludAorYnRoTW9uaXRvcklucHV0IChCbHVldG9vdGhDb25uZWN0aW9uICpjb25uZWN0aW9uLCBBc3luY01vbml0b3JDYWxsYmFjayAqY2FsbGJhY2ssIHZvaWQgKmRhdGEpIHsKKyAgQmx1ZXRvb3RoQ29ubmVjdGlvbkV4dGVuc2lvbiAqYmN4ID0gY29ubmVjdGlvbi0+ZXh0ZW5zaW9uOworCisgIGJ0aENhbmNlbElucHV0TW9uaXRvcihiY3gpOworICBpZiAoIWNhbGxiYWNrKSByZXR1cm4gMTsKKyAgcmV0dXJuIGFzeW5jTW9uaXRvckZpbGVJbnB1dCgmYmN4LT5pbnB1dE1vbml0b3IsIGJjeC0+aW5wdXRQaXBlWzBdLCBjYWxsYmFjaywgZGF0YSk7Cit9CisKK2ludAorYnRoUG9sbElucHV0IChCbHVldG9vdGhDb25uZWN0aW9uRXh0ZW5zaW9uICpiY3gsIGludCB0aW1lb3V0KSB7CisgIHJldHVybiBhd2FpdEZpbGVJbnB1dChiY3gtPmlucHV0UGlwZVswXSwgdGltZW91dCk7Cit9CisKK3NzaXplX3QKK2J0aEdldERhdGEgKAorICBCbHVldG9vdGhDb25uZWN0aW9uRXh0ZW5zaW9uICpiY3gsIHZvaWQgKmJ1ZmZlciwgc2l6ZV90IHNpemUsCisgIGludCBpbml0aWFsVGltZW91dCwgaW50IHN1YnNlcXVlbnRUaW1lb3V0CispIHsKKyAgcmV0dXJuIHJlYWRGaWxlKGJjeC0+aW5wdXRQaXBlWzBdLCBidWZmZXIsIHNpemUsIGluaXRpYWxUaW1lb3V0LCBzdWJzZXF1ZW50VGltZW91dCk7Cit9CisKK3NzaXplX3QKK2J0aFB1dERhdGEgKEJsdWV0b290aENvbm5lY3Rpb25FeHRlbnNpb24gKmJjeCwgY29uc3Qgdm9pZCAqYnVmZmVyLCBzaXplX3Qgc2l6ZSkgeworICBpZiAoYnRoR2V0V3JpdGVNZXRob2QoYmN4LT5lbnYpKSB7CisgICAgamJ5dGVBcnJheSBieXRlcyA9ICgqYmN4LT5lbnYpLT5OZXdCeXRlQXJyYXkoYmN4LT5lbnYsIHNpemUpOworCisgICAgaWYgKGJ5dGVzKSB7CisgICAgICBqYm9vbGVhbiByZXN1bHQ7CisKKyAgICAgICgqYmN4LT5lbnYpLT5TZXRCeXRlQXJyYXlSZWdpb24oYmN4LT5lbnYsIGJ5dGVzLCAwLCBzaXplLCBidWZmZXIpOworICAgICAgcmVzdWx0ID0gKCpiY3gtPmVudiktPkNhbGxCb29sZWFuTWV0aG9kKGJjeC0+ZW52LCBiY3gtPmNvbm5lY3Rpb24sIHdyaXRlTWV0aG9kLCBieXRlcyk7CisgICAgICAoKmJjeC0+ZW52KS0+RGVsZXRlTG9jYWxSZWYoYmN4LT5lbnYsIGJ5dGVzKTsKKworICAgICAgaWYgKCFjbGVhckphdmFFeGNlcHRpb24oYmN4LT5lbnYsIDEpKSB7CisgICAgICAgIGlmIChyZXN1bHQgPT0gSk5JX1RSVUUpIHsKKyAgICAgICAgICByZXR1cm4gc2l6ZTsKKyAgICAgICAgfQorICAgICAgfQorCisgICAgICBlcnJubyA9IEVJTzsKKyAgICB9IGVsc2UgeworICAgICAgZXJybm8gPSBFTk9NRU07CisgICAgfQorICB9IGVsc2UgeworICAgIGVycm5vID0gRU5PU1lTOworICB9CisKKyAgbG9nU3lzdGVtRXJyb3IoIkJsdWV0b290aCB3cml0ZSIpOworICByZXR1cm4gLTE7Cit9CisKK2NoYXIgKgorYnRoT2J0YWluRGV2aWNlTmFtZSAodWludDY0X3QgYmRhLCBpbnQgdGltZW91dCkgeworICBjaGFyICpuYW1lID0gTlVMTDsKKyAgSk5JRW52ICplbnYgPSBnZXRKYXZhTmF0aXZlSW50ZXJmYWNlKCk7CisKKyAgaWYgKGVudikgeworICAgIGlmIChidGhHZXRDb25uZWN0aW9uQ2xhc3MoZW52KSkgeworICAgICAgc3RhdGljIGptZXRob2RJRCBtZXRob2QgPSAwOworCisgICAgICBpZiAoZmluZEphdmFTdGF0aWNNZXRob2QoZW52LCAmbWV0aG9kLCBjb25uZWN0aW9uQ2xhc3MsICJnZXROYW1lIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKQVZBX1NJR19NRVRIT0QoSkFWQV9TSUdfU1RSSU5HLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKQVZBX1NJR19MT05HIC8vIGFkZHJlc3MKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApKSkgeworICAgICAgICBqc3RyaW5nIGpOYW1lID0gKCplbnYpLT5DYWxsU3RhdGljT2JqZWN0TWV0aG9kKGVudiwgY29ubmVjdGlvbkNsYXNzLCBtZXRob2QsIGJkYSk7CisKKyAgICAgICAgaWYgKGpOYW1lKSB7CisgICAgICAgICAgY29uc3QgY2hhciAqY05hbWUgPSAoKmVudiktPkdldFN0cmluZ1VURkNoYXJzKGVudiwgak5hbWUsIE5VTEwpOworCisgICAgICAgICAgaWYgKGNOYW1lKSB7CisgICAgICAgICAgICBpZiAoIShuYW1lID0gc3RyZHVwKGNOYW1lKSkpIGxvZ01hbGxvY0Vycm9yKCk7CisgICAgICAgICAgICAoKmVudiktPlJlbGVhc2VTdHJpbmdVVEZDaGFycyhlbnYsIGpOYW1lLCBjTmFtZSk7CisgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGxvZ01hbGxvY0Vycm9yKCk7CisgICAgICAgICAgICBjbGVhckphdmFFeGNlcHRpb24oZW52LCAwKTsKKyAgICAgICAgICB9CisKKyAgICAgICAgICAoKmVudiktPkRlbGV0ZUxvY2FsUmVmKGVudiwgak5hbWUpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgIGxvZ01hbGxvY0Vycm9yKCk7CisgICAgICAgICAgY2xlYXJKYXZhRXhjZXB0aW9uKGVudiwgMCk7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9CisgIH0KKworICByZXR1cm4gbmFtZTsKK30KKworc3RhdGljIGptZXRob2RJRCBnZXRQYWlyZWREZXZpY2VDb3VudE1ldGhvZCA9IDA7CitzdGF0aWMgam1ldGhvZElEIGdldFBhaXJlZERldmljZUFkZHJlc3NNZXRob2QgPSAwOworc3RhdGljIGptZXRob2RJRCBnZXRQYWlyZWREZXZpY2VOYW1lTWV0aG9kID0gMDsKKworc3RhdGljIGludAorYnRoR2V0UGFpcmVkRGV2aWNlQ291bnRNZXRob2QgKEpOSUVudiAqZW52KSB7CisgIHJldHVybiBmaW5kSmF2YVN0YXRpY01ldGhvZCgKKyAgICBlbnYsICZnZXRQYWlyZWREZXZpY2VDb3VudE1ldGhvZCwgY29ubmVjdGlvbkNsYXNzLCAiZ2V0UGFpcmVkRGV2aWNlQ291bnQiLAorICAgIEpBVkFfU0lHX01FVEhPRChKQVZBX1NJR19JTlQsCisgICAgKQorICApOworfQorCitzdGF0aWMgaW50CitidGhHZXRQYWlyZWREZXZpY2VBZGRyZXNzTWV0aG9kIChKTklFbnYgKmVudikgeworICByZXR1cm4gZmluZEphdmFTdGF0aWNNZXRob2QoCisgICAgZW52LCAmZ2V0UGFpcmVkRGV2aWNlQWRkcmVzc01ldGhvZCwgY29ubmVjdGlvbkNsYXNzLCAiZ2V0UGFpcmVkRGV2aWNlQWRkcmVzcyIsCisgICAgSkFWQV9TSUdfTUVUSE9EKEpBVkFfU0lHX1NUUklORywKKyAgICAgIEpBVkFfU0lHX0lOVCAvLyBpbmRleAorICAgICkKKyAgKTsKK30KKworc3RhdGljIGludAorYnRoR2V0UGFpcmVkRGV2aWNlTmFtZU1ldGhvZCAoSk5JRW52ICplbnYpIHsKKyAgcmV0dXJuIGZpbmRKYXZhU3RhdGljTWV0aG9kKAorICAgIGVudiwgJmdldFBhaXJlZERldmljZU5hbWVNZXRob2QsIGNvbm5lY3Rpb25DbGFzcywgImdldFBhaXJlZERldmljZU5hbWUiLAorICAgIEpBVkFfU0lHX01FVEhPRChKQVZBX1NJR19TVFJJTkcsCisgICAgICBKQVZBX1NJR19JTlQgLy8gaW5kZXgKKyAgICApCisgICk7Cit9CisKK3N0YXRpYyBKTklFbnYgKgorYnRoR2V0UGFpcmVkRGV2aWNlTWV0aG9kcyAodm9pZCkgeworICBKTklFbnYgKmVudiA9IGdldEphdmFOYXRpdmVJbnRlcmZhY2UoKTsKKworICBpZiAoZW52KSB7CisgICAgaWYgKGJ0aEdldENvbm5lY3Rpb25DbGFzcyhlbnYpKSB7CisgICAgICBpZiAoYnRoR2V0UGFpcmVkRGV2aWNlQ291bnRNZXRob2QoZW52KSkgeworICAgICAgICBpZiAoYnRoR2V0UGFpcmVkRGV2aWNlQWRkcmVzc01ldGhvZChlbnYpKSB7CisgICAgICAgICAgaWYgKGJ0aEdldFBhaXJlZERldmljZU5hbWVNZXRob2QoZW52KSkgeworICAgICAgICAgICAgcmV0dXJuIGVudjsKKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9CisgIH0KKworICByZXR1cm4gTlVMTDsKK30KKwordm9pZAorYnRoUHJvY2Vzc0Rpc2NvdmVyZWREZXZpY2VzICgKKyAgRGlzY292ZXJlZEJsdWV0b290aERldmljZVRlc3RlciAqdGVzdERldmljZSwgdm9pZCAqZGF0YQorKSB7CisgIEpOSUVudiAqZW52ID0gYnRoR2V0UGFpcmVkRGV2aWNlTWV0aG9kcygpOworCisgIGlmIChlbnYpIHsKKyAgICBqaW50IGNvdW50ID0gKCplbnYpLT5DYWxsU3RhdGljSW50TWV0aG9kKGVudiwgY29ubmVjdGlvbkNsYXNzLCBnZXRQYWlyZWREZXZpY2VDb3VudE1ldGhvZCk7CisKKyAgICBmb3IgKGppbnQgaW5kZXg9MDsgaW5kZXg8Y291bnQ7IGluZGV4Kz0xKSB7CisgICAgICBpbnQgZm91bmQgPSAwOworICAgICAganN0cmluZyBqQWRkcmVzcyA9ICgqZW52KS0+Q2FsbFN0YXRpY09iamVjdE1ldGhvZChlbnYsIGNvbm5lY3Rpb25DbGFzcywgZ2V0UGFpcmVkRGV2aWNlQWRkcmVzc01ldGhvZCwgaW5kZXgpOworCisgICAgICBpZiAoakFkZHJlc3MpIHsKKyAgICAgICAgY29uc3QgY2hhciAqY0FkZHJlc3MgPSAoKmVudiktPkdldFN0cmluZ1VURkNoYXJzKGVudiwgakFkZHJlc3MsIE5VTEwpOworCisgICAgICAgIGlmIChjQWRkcmVzcykgeworICAgICAgICAgIHVpbnQ2NF90IGFkZHJlc3M7CisKKyAgICAgICAgICBpZiAoYnRoUGFyc2VBZGRyZXNzKCZhZGRyZXNzLCBjQWRkcmVzcykpIHsKKyAgICAgICAgICAgIGpzdHJpbmcgak5hbWUgPSAoKmVudiktPkNhbGxTdGF0aWNPYmplY3RNZXRob2QoZW52LCBjb25uZWN0aW9uQ2xhc3MsIGdldFBhaXJlZERldmljZU5hbWVNZXRob2QsIGluZGV4KTsKKyAgICAgICAgICAgIGNvbnN0IGNoYXIgKmNOYW1lID0gak5hbWU/ICgqZW52KS0+R2V0U3RyaW5nVVRGQ2hhcnMoZW52LCBqTmFtZSwgTlVMTCk6IE5VTEw7CisKKyAgICAgICAgICAgIGNvbnN0IERpc2NvdmVyZWRCbHVldG9vdGhEZXZpY2UgZGV2aWNlID0geworICAgICAgICAgICAgICAuYWRkcmVzcyA9IGFkZHJlc3MsCisgICAgICAgICAgICAgIC5uYW1lID0gY05hbWUsCisgICAgICAgICAgICAgIC5wYWlyZWQgPSAxCisgICAgICAgICAgICB9OworCisgICAgICAgICAgICBpZiAodGVzdERldmljZSgmZGV2aWNlLCBkYXRhKSkgZm91bmQgPSAxOworICAgICAgICAgICAgaWYgKGNOYW1lKSAoKmVudiktPlJlbGVhc2VTdHJpbmdVVEZDaGFycyhlbnYsIGpOYW1lLCBjTmFtZSk7CisgICAgICAgICAgICBpZiAoak5hbWUpICgqZW52KS0+RGVsZXRlTG9jYWxSZWYoZW52LCBqTmFtZSk7CisgICAgICAgICAgfQorCisgICAgICAgICAgKCplbnYpLT5SZWxlYXNlU3RyaW5nVVRGQ2hhcnMoZW52LCBqQWRkcmVzcywgY0FkZHJlc3MpOworICAgICAgICB9CisKKyAgICAgICAgKCplbnYpLT5EZWxldGVMb2NhbFJlZihlbnYsIGpBZGRyZXNzKTsKKyAgICAgIH0KKworICAgICAgaWYgKGZvdW5kKSBicmVhazsKKyAgICB9CisgIH0KK30KZGlmZiAtLWdpdCBhL1Byb2dyYW1zL2JsdWV0b290aF9kYXJ3aW4uYyBiL1Byb2dyYW1zL2JsdWV0b290aF9kYXJ3aW4uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MWFkMzZlCi0tLSAvZGV2L251bGwKKysrIGIvUHJvZ3JhbXMvYmx1ZXRvb3RoX2Rhcndpbi5jCkBAIC0wLDAgKzEsMzczIEBACisvKgorICogQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyAqICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyAqCisgKiBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorICoKKyAqIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyAqCisgKiBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisgKi8KKworI2luY2x1ZGUgInByb2xvZ3VlLmgiCisKKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorCisjaW1wb3J0IDxJT0JsdWV0b290aC9vYmpjL0lPQmx1ZXRvb3RoRGV2aWNlLmg+CisjaW1wb3J0IDxJT0JsdWV0b290aC9vYmpjL0lPQmx1ZXRvb3RoU0RQVVVJRC5oPgorI2ltcG9ydCA8SU9CbHVldG9vdGgvb2JqYy9JT0JsdWV0b290aFNEUFNlcnZpY2VSZWNvcmQuaD4KKyNpbXBvcnQgPElPQmx1ZXRvb3RoL29iamMvSU9CbHVldG9vdGhSRkNPTU1DaGFubmVsLmg+CisKKyNpbmNsdWRlICJsb2cuaCIKKyNpbmNsdWRlICJpb19taXNjLmgiCisjaW5jbHVkZSAiaW9fYmx1ZXRvb3RoLmgiCisjaW5jbHVkZSAiYmx1ZXRvb3RoX2ludGVybmFsLmgiCisjaW5jbHVkZSAic3lzdGVtX2Rhcndpbi5oIgorCitAaW50ZXJmYWNlIFNlcnZpY2VRdWVyeVJlc3VsdDogQXN5bmNocm9ub3VzUmVzdWx0CistICh2b2lkKSBzZHBRdWVyeUNvbXBsZXRlCisgIDogKElPQmx1ZXRvb3RoRGV2aWNlICopIGRldmljZQorICBzdGF0dXM6IChJT1JldHVybikgc3RhdHVzOworQGVuZAorCitAaW50ZXJmYWNlIEJsdWV0b290aENvbm5lY3Rpb25EZWxlZ2F0ZTogQXN5bmNocm9ub3VzVGFzaworQHByb3BlcnR5IChhc3NpZ24pIEJsdWV0b290aENvbm5lY3Rpb25FeHRlbnNpb24gKmJsdWV0b290aENvbm5lY3Rpb25FeHRlbnNpb247CitAZW5kCisKK0BpbnRlcmZhY2UgUmZjb21tQ2hhbm5lbERlbGVnYXRlOiBCbHVldG9vdGhDb25uZWN0aW9uRGVsZWdhdGUKKy0gKHZvaWQpIHJmY29tbUNoYW5uZWxEYXRhCisgIDogKElPQmx1ZXRvb3RoUkZDT01NQ2hhbm5lbCAqKSByZmNvbW1DaGFubmVsCisgIGRhdGE6ICh2b2lkICopIGRhdGFQb2ludGVyCisgIGxlbmd0aDogKHNpemVfdCkgZGF0YUxlbmd0aDsKKworLSAodm9pZCkgcmZjb21tQ2hhbm5lbENsb3NlZAorICA6IChJT0JsdWV0b290aFJGQ09NTUNoYW5uZWwqKSByZmNvbW1DaGFubmVsOworCistIChJT1JldHVybikgcnVuOworQGVuZAorCitzdHJ1Y3QgQmx1ZXRvb3RoQ29ubmVjdGlvbkV4dGVuc2lvblN0cnVjdCB7CisgIEJsdWV0b290aERldmljZUFkZHJlc3MgYmx1ZXRvb3RoQWRkcmVzczsKKyAgSU9CbHVldG9vdGhEZXZpY2UgKmJsdWV0b290aERldmljZTsKKworICBJT0JsdWV0b290aFJGQ09NTUNoYW5uZWwgKnJmY29tbUNoYW5uZWw7CisgIFJmY29tbUNoYW5uZWxEZWxlZ2F0ZSAqcmZjb21tRGVsZWdhdGU7CisKKyAgaW50IGlucHV0UGlwZVsyXTsKK307CisKK3N0YXRpYyB2b2lkCitidGhTZXRFcnJvciAoSU9SZXR1cm4gcmVzdWx0LCBjb25zdCBjaGFyICphY3Rpb24pIHsKKyAgc2V0RGFyd2luU3lzdGVtRXJyb3IocmVzdWx0KTsKKyAgbG9nU3lzdGVtRXJyb3IoYWN0aW9uKTsKK30KKworc3RhdGljIHZvaWQKK2J0aEluaXRpYWxpemVSZmNvbW1DaGFubmVsIChCbHVldG9vdGhDb25uZWN0aW9uRXh0ZW5zaW9uICpiY3gpIHsKKyAgYmN4LT5yZmNvbW1DaGFubmVsID0gbmlsOworfQorCitzdGF0aWMgdm9pZAorYnRoRGVzdHJveVJmY29tbUNoYW5uZWwgKEJsdWV0b290aENvbm5lY3Rpb25FeHRlbnNpb24gKmJjeCkgeworICBpZiAoYmN4LT5yZmNvbW1DaGFubmVsKSB7CisgICAgW2JjeC0+cmZjb21tQ2hhbm5lbCBjbG9zZUNoYW5uZWxdOworICAgIFtiY3gtPnJmY29tbUNoYW5uZWwgcmVsZWFzZV07CisgICAgYnRoSW5pdGlhbGl6ZVJmY29tbUNoYW5uZWwoYmN4KTsKKyAgfQorfQorCitzdGF0aWMgdm9pZAorYnRoSW5pdGlhbGl6ZVJmY29tbURlbGVnYXRlIChCbHVldG9vdGhDb25uZWN0aW9uRXh0ZW5zaW9uICpiY3gpIHsKKyAgYmN4LT5yZmNvbW1EZWxlZ2F0ZSA9IG5pbDsKK30KKworc3RhdGljIHZvaWQKK2J0aERlc3Ryb3lSZmNvbW1EZWxlZ2F0ZSAoQmx1ZXRvb3RoQ29ubmVjdGlvbkV4dGVuc2lvbiAqYmN4KSB7CisgIGlmIChiY3gtPnJmY29tbURlbGVnYXRlKSB7CisgICAgW2JjeC0+cmZjb21tRGVsZWdhdGUgc3RvcF07CisgICAgW2JjeC0+cmZjb21tRGVsZWdhdGUgd2FpdDo1XTsKKyAgICBbYmN4LT5yZmNvbW1EZWxlZ2F0ZSByZWxlYXNlXTsKKyAgICBidGhJbml0aWFsaXplUmZjb21tRGVsZWdhdGUoYmN4KTsKKyAgfQorfQorCitzdGF0aWMgdm9pZAorYnRoSW5pdGlhbGl6ZUJsdWV0b290aERldmljZSAoQmx1ZXRvb3RoQ29ubmVjdGlvbkV4dGVuc2lvbiAqYmN4KSB7CisgIGJjeC0+Ymx1ZXRvb3RoRGV2aWNlID0gbmlsOworfQorCitzdGF0aWMgdm9pZAorYnRoRGVzdHJveUJsdWV0b290aERldmljZSAoQmx1ZXRvb3RoQ29ubmVjdGlvbkV4dGVuc2lvbiAqYmN4KSB7CisgIGlmIChiY3gtPmJsdWV0b290aERldmljZSkgeworICAgIFtiY3gtPmJsdWV0b290aERldmljZSBjbG9zZUNvbm5lY3Rpb25dOworICAgIFtiY3gtPmJsdWV0b290aERldmljZSByZWxlYXNlXTsKKyAgICBidGhJbml0aWFsaXplQmx1ZXRvb3RoRGV2aWNlKGJjeCk7CisgIH0KK30KKworc3RhdGljIHZvaWQKK2J0aEluaXRpYWxpemVJbnB1dFBpcGUgKEJsdWV0b290aENvbm5lY3Rpb25FeHRlbnNpb24gKmJjeCkgeworICBiY3gtPmlucHV0UGlwZVswXSA9IGJjeC0+aW5wdXRQaXBlWzFdID0gSU5WQUxJRF9GSUxFX0RFU0NSSVBUT1I7Cit9CisKK3N0YXRpYyB2b2lkCitidGhEZXN0cm95SW5wdXRQaXBlIChCbHVldG9vdGhDb25uZWN0aW9uRXh0ZW5zaW9uICpiY3gpIHsKKyAgaW50ICpmaWxlRGVzY3JpcHRvciA9IGJjeC0+aW5wdXRQaXBlOworICBjb25zdCBpbnQgKmVuZCA9IGZpbGVEZXNjcmlwdG9yICsgQVJSQVlfQ09VTlQoYmN4LT5pbnB1dFBpcGUpOworCisgIHdoaWxlIChmaWxlRGVzY3JpcHRvciA8IGVuZCkgeworICAgIGNsb3NlRmlsZShmaWxlRGVzY3JpcHRvcik7CisgICAgZmlsZURlc2NyaXB0b3IgKz0gMTsKKyAgfQorfQorCitzdGF0aWMgdm9pZAorYnRoTWFrZUFkZHJlc3MgKEJsdWV0b290aERldmljZUFkZHJlc3MgKmFkZHJlc3MsIHVpbnQ2NF90IGJkYSkgeworICB1bnNpZ25lZCBpbnQgaW5kZXggPSBzaXplb2YoYWRkcmVzcy0+ZGF0YSk7CisKKyAgd2hpbGUgKGluZGV4ID4gMCkgeworICAgIGFkZHJlc3MtPmRhdGFbLS1pbmRleF0gPSBiZGEgJiAwWEZGOworICAgIGJkYSA+Pj0gODsKKyAgfQorfQorCitCbHVldG9vdGhDb25uZWN0aW9uRXh0ZW5zaW9uICoKK2J0aE5ld0Nvbm5lY3Rpb25FeHRlbnNpb24gKHVpbnQ2NF90IGJkYSkgeworICBCbHVldG9vdGhDb25uZWN0aW9uRXh0ZW5zaW9uICpiY3g7CisKKyAgaWYgKChiY3ggPSBtYWxsb2Moc2l6ZW9mKCpiY3gpKSkpIHsKKyAgICBtZW1zZXQoYmN4LCAwLCBzaXplb2YoKmJjeCkpOworICAgIGJ0aEluaXRpYWxpemVJbnB1dFBpcGUoYmN4KTsKKyAgICBidGhNYWtlQWRkcmVzcygmYmN4LT5ibHVldG9vdGhBZGRyZXNzLCBiZGEpOworCisgICAgaWYgKChiY3gtPmJsdWV0b290aERldmljZSA9IFtJT0JsdWV0b290aERldmljZSBkZXZpY2VXaXRoQWRkcmVzczomYmN4LT5ibHVldG9vdGhBZGRyZXNzXSkpIHsKKyAgICAgIFtiY3gtPmJsdWV0b290aERldmljZSByZXRhaW5dOworCisgICAgICByZXR1cm4gYmN4OworICAgIH0KKworICAgIGZyZWUoYmN4KTsKKyAgfSBlbHNlIHsKKyAgICBsb2dNYWxsb2NFcnJvcigpOworICB9CisKKyAgcmV0dXJuIE5VTEw7Cit9CisKK3ZvaWQKK2J0aFJlbGVhc2VDb25uZWN0aW9uRXh0ZW5zaW9uIChCbHVldG9vdGhDb25uZWN0aW9uRXh0ZW5zaW9uICpiY3gpIHsKKyAgYnRoRGVzdHJveVJmY29tbUNoYW5uZWwoYmN4KTsKKyAgYnRoRGVzdHJveVJmY29tbURlbGVnYXRlKGJjeCk7CisgIGJ0aERlc3Ryb3lCbHVldG9vdGhEZXZpY2UoYmN4KTsKKyAgYnRoRGVzdHJveUlucHV0UGlwZShiY3gpOworICBmcmVlKGJjeCk7Cit9CisKK2ludAorYnRoT3BlbkNoYW5uZWwgKEJsdWV0b290aENvbm5lY3Rpb25FeHRlbnNpb24gKmJjeCwgdWludDhfdCBjaGFubmVsLCBpbnQgdGltZW91dCkgeworICBJT1JldHVybiByZXN1bHQ7CisKKyAgaWYgKHBpcGUoYmN4LT5pbnB1dFBpcGUpICE9IC0xKSB7CisgICAgaWYgKHNldEJsb2NraW5nSW8oYmN4LT5pbnB1dFBpcGVbMF0sIDApKSB7CisgICAgICBpZiAoKGJjeC0+cmZjb21tRGVsZWdhdGUgPSBbUmZjb21tQ2hhbm5lbERlbGVnYXRlIG5ld10pKSB7CisgICAgICAgIGJjeC0+cmZjb21tRGVsZWdhdGUuYmx1ZXRvb3RoQ29ubmVjdGlvbkV4dGVuc2lvbiA9IGJjeDsKKworICAgICAgICBpZiAoKHJlc3VsdCA9IFtiY3gtPmJsdWV0b290aERldmljZSBvcGVuUkZDT01NQ2hhbm5lbFN5bmM6JmJjeC0+cmZjb21tQ2hhbm5lbCB3aXRoQ2hhbm5lbElEOmNoYW5uZWwgZGVsZWdhdGU6bmlsXSkgPT0ga0lPUmV0dXJuU3VjY2VzcykgeworICAgICAgICAgIGlmIChbYmN4LT5yZmNvbW1EZWxlZ2F0ZSBzdGFydF0pIHsKKyAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICAgIH0KKworICAgICAgICAgIGJ0aERlc3Ryb3lSZmNvbW1DaGFubmVsKGJjeCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgYnRoU2V0RXJyb3IocmVzdWx0LCAiUkZDT01NIGNoYW5uZWwgb3BlbiIpOworICAgICAgICB9CisKKyAgICAgICAgYnRoRGVzdHJveVJmY29tbURlbGVnYXRlKGJjeCk7CisgICAgICB9CisgICAgfQorCisgICAgYnRoRGVzdHJveUlucHV0UGlwZShiY3gpOworICB9IGVsc2UgeworICAgIGxvZ1N5c3RlbUVycm9yKCJwaXBlIik7CisgIH0KKworICByZXR1cm4gMDsKK30KKworc3RhdGljIGludAorYnRoUGVyZm9ybVNlcnZpY2VRdWVyeSAoQmx1ZXRvb3RoQ29ubmVjdGlvbkV4dGVuc2lvbiAqYmN4KSB7CisgIGludCBvayA9IDA7CisgIElPUmV0dXJuIHJlc3VsdDsKKyAgU2VydmljZVF1ZXJ5UmVzdWx0ICp0YXJnZXQgPSBbU2VydmljZVF1ZXJ5UmVzdWx0IG5ld107CisKKyAgaWYgKHRhcmdldCkgeworICAgIGlmICgocmVzdWx0ID0gW2JjeC0+Ymx1ZXRvb3RoRGV2aWNlIHBlcmZvcm1TRFBRdWVyeTp0YXJnZXRdKSA9PSBrSU9SZXR1cm5TdWNjZXNzKSB7CisgICAgICBpZiAoW3RhcmdldCB3YWl0OjEwXSkgeworICAgICAgICBpZiAoKHJlc3VsdCA9IHRhcmdldC5maW5hbFN0YXR1cykgPT0ga0lPUmV0dXJuU3VjY2VzcykgeworICAgICAgICAgIG9rID0gMTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICBidGhTZXRFcnJvcihyZXN1bHQsICJzZXJ2aWNlIGRpc2NvdmVyeSByZXNwb25zZSIpOworICAgICAgICB9CisgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgIGJ0aFNldEVycm9yKHJlc3VsdCwgInNlcnZpY2UgZGlzY292ZXJ5IHJlcXVlc3QiKTsKKyAgICB9CisKKyAgICBbdGFyZ2V0IHJlbGVhc2VdOworICB9CisKKyAgcmV0dXJuIG9rOworfQorCitpbnQKK2J0aERpc2NvdmVyQ2hhbm5lbCAoCisgIHVpbnQ4X3QgKmNoYW5uZWwsIEJsdWV0b290aENvbm5lY3Rpb25FeHRlbnNpb24gKmJjeCwKKyAgY29uc3Qgdm9pZCAqdXVpZEJ5dGVzLCBzaXplX3QgdXVpZExlbmd0aCwKKyAgaW50IHRpbWVvdXQKKykgeworICBJT1JldHVybiByZXN1bHQ7CisKKyAgaWYgKGJ0aFBlcmZvcm1TZXJ2aWNlUXVlcnkoYmN4KSkgeworICAgIElPQmx1ZXRvb3RoU0RQVVVJRCAqdXVpZCA9IFtJT0JsdWV0b290aFNEUFVVSUQgdXVpZFdpdGhCeXRlczp1dWlkQnl0ZXMgbGVuZ3RoOnV1aWRMZW5ndGhdOworCisgICAgaWYgKHV1aWQpIHsKKyAgICAgIElPQmx1ZXRvb3RoU0RQU2VydmljZVJlY29yZCAqcmVjb3JkID0gW2JjeC0+Ymx1ZXRvb3RoRGV2aWNlIGdldFNlcnZpY2VSZWNvcmRGb3JVVUlEOnV1aWRdOworCisgICAgICBpZiAocmVjb3JkKSB7CisgICAgICAgIGlmICgocmVzdWx0ID0gW3JlY29yZCBnZXRSRkNPTU1DaGFubmVsSUQ6Y2hhbm5lbF0pID09IGtJT1JldHVyblN1Y2Nlc3MpIHsKKyAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICBidGhTZXRFcnJvcihyZXN1bHQsICJSRkNPTU0gY2hhbm5lbCBsb29rdXAiKTsKKyAgICAgICAgfQorICAgICAgfQorICAgIH0KKyAgfQorCisgIHJldHVybiAwOworfQorCitpbnQKK2J0aE1vbml0b3JJbnB1dCAoQmx1ZXRvb3RoQ29ubmVjdGlvbiAqY29ubmVjdGlvbiwgQXN5bmNNb25pdG9yQ2FsbGJhY2sgKmNhbGxiYWNrLCB2b2lkICpkYXRhKSB7CisgIHJldHVybiAwOworfQorCitpbnQKK2J0aFBvbGxJbnB1dCAoQmx1ZXRvb3RoQ29ubmVjdGlvbkV4dGVuc2lvbiAqYmN4LCBpbnQgdGltZW91dCkgeworICByZXR1cm4gYXdhaXRGaWxlSW5wdXQoYmN4LT5pbnB1dFBpcGVbMF0sIHRpbWVvdXQpOworfQorCitzc2l6ZV90CitidGhHZXREYXRhICgKKyAgQmx1ZXRvb3RoQ29ubmVjdGlvbkV4dGVuc2lvbiAqYmN4LCB2b2lkICpidWZmZXIsIHNpemVfdCBzaXplLAorICBpbnQgaW5pdGlhbFRpbWVvdXQsIGludCBzdWJzZXF1ZW50VGltZW91dAorKSB7CisgIHJldHVybiByZWFkRmlsZShiY3gtPmlucHV0UGlwZVswXSwgYnVmZmVyLCBzaXplLCBpbml0aWFsVGltZW91dCwgc3Vic2VxdWVudFRpbWVvdXQpOworfQorCitzc2l6ZV90CitidGhQdXREYXRhIChCbHVldG9vdGhDb25uZWN0aW9uRXh0ZW5zaW9uICpiY3gsIGNvbnN0IHZvaWQgKmJ1ZmZlciwgc2l6ZV90IHNpemUpIHsKKyAgSU9SZXR1cm4gcmVzdWx0ID0gW2JjeC0+cmZjb21tQ2hhbm5lbCB3cml0ZVN5bmM6KHZvaWQgKilidWZmZXIgbGVuZ3RoOnNpemVdOworCisgIGlmIChyZXN1bHQgPT0ga0lPUmV0dXJuU3VjY2VzcykgcmV0dXJuIHNpemU7CisgIGJ0aFNldEVycm9yKHJlc3VsdCwgIlJGQ09NTSBjaGFubmVsIHdyaXRlIik7CisgIHJldHVybiAtMTsKK30KKworY2hhciAqCitidGhPYnRhaW5EZXZpY2VOYW1lICh1aW50NjRfdCBiZGEsIGludCB0aW1lb3V0KSB7CisgIElPUmV0dXJuIHJlc3VsdDsKKyAgQmx1ZXRvb3RoRGV2aWNlQWRkcmVzcyBhZGRyZXNzOworCisgIGJ0aE1ha2VBZGRyZXNzKCZhZGRyZXNzLCBiZGEpOworCisgIHsKKyAgICBJT0JsdWV0b290aERldmljZSAqZGV2aWNlID0gW0lPQmx1ZXRvb3RoRGV2aWNlIGRldmljZVdpdGhBZGRyZXNzOiZhZGRyZXNzXTsKKworICAgIGlmIChkZXZpY2UgIT0gbmlsKSB7CisgICAgICBpZiAoKHJlc3VsdCA9IFtkZXZpY2UgcmVtb3RlTmFtZVJlcXVlc3Q6bmlsXSkgPT0ga0lPUmV0dXJuU3VjY2VzcykgeworICAgICAgICBOU1N0cmluZyAqbnNOYW1lID0gZGV2aWNlLm5hbWU7CisKKyAgICAgICAgaWYgKG5zTmFtZSAhPSBuaWwpIHsKKyAgICAgICAgICBjb25zdCBjaGFyICp1dGY4TmFtZSA9IFtuc05hbWUgVVRGOFN0cmluZ107CisKKyAgICAgICAgICBpZiAodXRmOE5hbWUgIT0gTlVMTCkgeworICAgICAgICAgICAgY2hhciAqbmFtZSA9IHN0cmR1cCh1dGY4TmFtZSk7CisKKyAgICAgICAgICAgIGlmIChuYW1lICE9IE5VTEwpIHsKKyAgICAgICAgICAgICAgcmV0dXJuIG5hbWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICB9IGVsc2UgeworICAgICAgICBidGhTZXRFcnJvcihyZXN1bHQsICJkZXZpY2UgbmFtZSBxdWVyeSIpOworICAgICAgfQorCisgICAgICBbZGV2aWNlIGNsb3NlQ29ubmVjdGlvbl07CisgICAgfQorICB9CisKKyAgcmV0dXJuIE5VTEw7Cit9CisKK0BpbXBsZW1lbnRhdGlvbiBTZXJ2aWNlUXVlcnlSZXN1bHQKKy0gKHZvaWQpIHNkcFF1ZXJ5Q29tcGxldGUKKyAgOiAoSU9CbHVldG9vdGhEZXZpY2UgKikgZGV2aWNlCisgIHN0YXR1czogKElPUmV0dXJuKSBzdGF0dXMKKyAgeworICAgIFtzZWxmIHNldFN0YXR1czpzdGF0dXNdOworICB9CitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBCbHVldG9vdGhDb25uZWN0aW9uRGVsZWdhdGUKK0BzeW50aGVzaXplIGJsdWV0b290aENvbm5lY3Rpb25FeHRlbnNpb247CitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBSZmNvbW1DaGFubmVsRGVsZWdhdGUKKy0gKHZvaWQpIHJmY29tbUNoYW5uZWxEYXRhCisgIDogKElPQmx1ZXRvb3RoUkZDT01NQ2hhbm5lbCAqKSByZmNvbW1DaGFubmVsCisgIGRhdGE6ICh2b2lkICopIGRhdGFQb2ludGVyCisgIGxlbmd0aDogKHNpemVfdCkgZGF0YUxlbmd0aAorICB7CisgICAgd3JpdGVGaWxlKHNlbGYuYmx1ZXRvb3RoQ29ubmVjdGlvbkV4dGVuc2lvbi0+aW5wdXRQaXBlWzFdLCBkYXRhUG9pbnRlciwgZGF0YUxlbmd0aCk7CisgIH0KKworLSAodm9pZCkgcmZjb21tQ2hhbm5lbENsb3NlZAorICA6IChJT0JsdWV0b290aFJGQ09NTUNoYW5uZWwqKSByZmNvbW1DaGFubmVsCisgIHsKKyAgICBsb2dNZXNzYWdlKExPR19OT1RJQ0UsICJSRkNPTU0gY2hhbm5lbCBjbG9zZWQiKTsKKyAgfQorCistIChJT1JldHVybikgcnVuCisgIHsKKyAgICBJT1JldHVybiByZXN1bHQ7CisgICAgbG9nTWVzc2FnZShMT0dfQ0FURUdPUlkoQkxVRVRPT1RIX0lPKSwgIlJGQ09NTSBjaGFubmVsIGRlbGVnYXRlIHN0YXJ0ZWQiKTsKKworICAgIHsKKyAgICAgIEJsdWV0b290aENvbm5lY3Rpb25FeHRlbnNpb24gKmJjeCA9IHNlbGYuYmx1ZXRvb3RoQ29ubmVjdGlvbkV4dGVuc2lvbjsKKworICAgICAgaWYgKChyZXN1bHQgPSBbYmN4LT5yZmNvbW1DaGFubmVsIHNldERlbGVnYXRlOnNlbGZdKSA9PSBrSU9SZXR1cm5TdWNjZXNzKSB7CisgICAgICAgIENGUnVuTG9vcFJ1bigpOworICAgICAgICByZXN1bHQgPSBrSU9SZXR1cm5TdWNjZXNzOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgYnRoU2V0RXJyb3IocmVzdWx0LCAiUkZDT01NIGNoYW5uZWwgZGVsZWdhdGUgc2V0Iik7CisgICAgICB9CisgICAgfQorCisgICAgbG9nTWVzc2FnZShMT0dfQ0FURUdPUlkoQkxVRVRPT1RIX0lPKSwgIlJGQ09NTSBjaGFubmVsIGRlbGVnYXRlIGZpbmlzaGVkIik7CisgICAgcmV0dXJuIHJlc3VsdDsKKyAgfQorQGVuZAorCit2b2lkCitidGhQcm9jZXNzRGlzY292ZXJlZERldmljZXMgKAorICBEaXNjb3ZlcmVkQmx1ZXRvb3RoRGV2aWNlVGVzdGVyICp0ZXN0RGV2aWNlLCB2b2lkICpkYXRhCispIHsKK30KZGlmZiAtLWdpdCBhL1Byb2dyYW1zL2JsdWV0b290aF9pbnRlcm5hbC5oIGIvUHJvZ3JhbXMvYmx1ZXRvb3RoX2ludGVybmFsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjBiMDJhNQotLS0gL2Rldi9udWxsCisrKyBiL1Byb2dyYW1zL2JsdWV0b290aF9pbnRlcm5hbC5oCkBAIC0wLDAgKzEsODMgQEAKKy8qCisgKiBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorICogICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorICoKKyAqIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorICoKKyAqIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyAqLworCisjaWZuZGVmIEJSTFRUWV9JTkNMVURFRF9CTFVFVE9PVEhfSU5URVJOQUwKKyNkZWZpbmUgQlJMVFRZX0lOQ0xVREVEX0JMVUVUT09USF9JTlRFUk5BTAorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmIC8qIF9fY3BsdXNwbHVzICovCisKKyNkZWZpbmUgQkRBX1NJWkUgNgorCitleHRlcm4gY2hhciAqYnRoT2J0YWluRGV2aWNlTmFtZSAodWludDY0X3QgYmRhLCBpbnQgdGltZW91dCk7CisKK3R5cGVkZWYgc3RydWN0IEJsdWV0b290aENvbm5lY3Rpb25FeHRlbnNpb25TdHJ1Y3QgQmx1ZXRvb3RoQ29ubmVjdGlvbkV4dGVuc2lvbjsKKworZXh0ZXJuIEJsdWV0b290aENvbm5lY3Rpb25FeHRlbnNpb24gKmJ0aE5ld0Nvbm5lY3Rpb25FeHRlbnNpb24gKHVpbnQ2NF90IGJkYSk7CitleHRlcm4gdm9pZCBidGhSZWxlYXNlQ29ubmVjdGlvbkV4dGVuc2lvbiAoQmx1ZXRvb3RoQ29ubmVjdGlvbkV4dGVuc2lvbiAqYmN4KTsKKworZXh0ZXJuIGludCBidGhQb2xsSW5wdXQgKEJsdWV0b290aENvbm5lY3Rpb25FeHRlbnNpb24gKmJjeCwgaW50IHRpbWVvdXQpOworCitleHRlcm4gc3NpemVfdCBidGhHZXREYXRhICgKKyAgQmx1ZXRvb3RoQ29ubmVjdGlvbkV4dGVuc2lvbiAqYmN4LCB2b2lkICpidWZmZXIsIHNpemVfdCBzaXplLAorICBpbnQgaW5pdGlhbFRpbWVvdXQsIGludCBzdWJzZXF1ZW50VGltZW91dAorKTsKKworZXh0ZXJuIHNzaXplX3QgYnRoUHV0RGF0YSAoQmx1ZXRvb3RoQ29ubmVjdGlvbkV4dGVuc2lvbiAqYmN4LCBjb25zdCB2b2lkICpidWZmZXIsIHNpemVfdCBzaXplKTsKKworZXh0ZXJuIGludCBidGhEaXNjb3ZlckNoYW5uZWwgKAorICB1aW50OF90ICpjaGFubmVsLCBCbHVldG9vdGhDb25uZWN0aW9uRXh0ZW5zaW9uICpiY3gsCisgIGNvbnN0IHZvaWQgKnV1aWRCeXRlcywgc2l6ZV90IHV1aWRMZW5ndGgsCisgIGludCB0aW1lb3V0CispOworCitleHRlcm4gaW50IGJ0aE9wZW5DaGFubmVsIChCbHVldG9vdGhDb25uZWN0aW9uRXh0ZW5zaW9uICpiY3gsIHVpbnQ4X3QgY2hhbm5lbCwgaW50IHRpbWVvdXQpOworCitzdHJ1Y3QgQmx1ZXRvb3RoQ29ubmVjdGlvblN0cnVjdCB7CisgIHVpbnQ2NF90IGFkZHJlc3M7CisgIHVpbnQ4X3QgY2hhbm5lbDsKKyAgQmx1ZXRvb3RoQ29ubmVjdGlvbkV4dGVuc2lvbiAqZXh0ZW5zaW9uOworfTsKKwordHlwZWRlZiBzdHJ1Y3QgeworICBjb25zdCBjaGFyICpuYW1lUHJlZml4OworICBjb25zdCBjaGFyICpjb25zdCAqZHJpdmVyQ29kZXM7Cit9IEJsdWV0b290aE5hbWVFbnRyeTsKKworZXh0ZXJuIGNvbnN0IEJsdWV0b290aE5hbWVFbnRyeSBibHVldG9vdGhOYW1lVGFibGVbXTsKKwordHlwZWRlZiBzdHJ1Y3QgeworICBjb25zdCBjaGFyICpuYW1lOworICB1aW50NjRfdCBhZGRyZXNzOworICB1bnNpZ25lZCBwYWlyZWQ6MTsKK30gRGlzY292ZXJlZEJsdWV0b290aERldmljZTsKKwordHlwZWRlZiBpbnQgRGlzY292ZXJlZEJsdWV0b290aERldmljZVRlc3RlciAoCisgIGNvbnN0IERpc2NvdmVyZWRCbHVldG9vdGhEZXZpY2UgKmRldmljZSwgdm9pZCAqZGF0YQorKTsKKworZXh0ZXJuIHZvaWQgYnRoUHJvY2Vzc0Rpc2NvdmVyZWREZXZpY2VzICgKKyAgRGlzY292ZXJlZEJsdWV0b290aERldmljZVRlc3RlciAqdGVzdERldmljZSwgdm9pZCAqZGF0YQorKTsKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYgLyogX19jcGx1c3BsdXMgKi8KKworI2VuZGlmIC8qIEJSTFRUWV9JTkNMVURFRF9CTFVFVE9PVEhfSU5URVJOQUwgKi8KZGlmZiAtLWdpdCBhL1Byb2dyYW1zL2JsdWV0b290aF9saW51eC5jIGIvUHJvZ3JhbXMvYmx1ZXRvb3RoX2xpbnV4LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmIyNDYyNgotLS0gL2Rldi9udWxsCisrKyBiL1Byb2dyYW1zL2JsdWV0b290aF9saW51eC5jCkBAIC0wLDAgKzEsNzkyIEBACisvKgorICogQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyAqICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyAqCisgKiBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorICoKKyAqIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyAqCisgKiBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisgKi8KKworI2luY2x1ZGUgInByb2xvZ3VlLmgiCisKKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyNpbmNsdWRlIDxibHVldG9vdGgvYmx1ZXRvb3RoLmg+CisjaW5jbHVkZSA8Ymx1ZXRvb3RoL2hjaS5oPgorI2luY2x1ZGUgPGJsdWV0b290aC9oY2lfbGliLmg+CisjaW5jbHVkZSA8Ymx1ZXRvb3RoL2wyY2FwLmg+CisjaW5jbHVkZSA8Ymx1ZXRvb3RoL3NkcC5oPgorI2luY2x1ZGUgPGJsdWV0b290aC9zZHBfbGliLmg+CisjaW5jbHVkZSA8Ymx1ZXRvb3RoL3JmY29tbS5oPgorCisjaW5jbHVkZSAibG9nLmgiCisjaW5jbHVkZSAicGFyYW1ldGVycy5oIgorI2luY2x1ZGUgImlvX2JsdWV0b290aC5oIgorI2luY2x1ZGUgImJsdWV0b290aF9pbnRlcm5hbC5oIgorI2luY2x1ZGUgImFzeW5jX2hhbmRsZS5oIgorI2luY2x1ZGUgImFzeW5jX2lvLmgiCisjaW5jbHVkZSAiaW9fbWlzYy5oIgorI2luY2x1ZGUgInRpbWluZy5oIgorCitzdHJ1Y3QgQmx1ZXRvb3RoQ29ubmVjdGlvbkV4dGVuc2lvblN0cnVjdCB7CisgIFNvY2tldERlc2NyaXB0b3Igc29ja2V0RGVzY3JpcHRvcjsKKyAgc3RydWN0IHNvY2thZGRyX3JjIGxvY2FsQWRkcmVzczsKKyAgc3RydWN0IHNvY2thZGRyX3JjIHJlbW90ZUFkZHJlc3M7CisgIEFzeW5jSGFuZGxlIGlucHV0TW9uaXRvcjsKK307CisKK3R5cGVkZWYgdW5pb24geworICB1bnNpZ25lZCBjaGFyIGhjaUV2ZW50W0hDSV9NQVhfRVZFTlRfU0laRV07CisKKyAgc3RydWN0IHsKKyAgICB1bnNpZ25lZCBjaGFyIHR5cGU7CisKKyAgICB1bmlvbiB7CisgICAgICBzdHJ1Y3QgeworICAgICAgICBoY2lfZXZlbnRfaGRyIGhlYWRlcjsKKworICAgICAgICB1bmlvbiB7CisgICAgICAgICAgZXZ0X3JlbW90ZV9uYW1lX3JlcV9jb21wbGV0ZSBybjsKKyAgICAgICAgICBldnRfY21kX2NvbXBsZXRlIGNjOworICAgICAgICAgIGV2dF9jbWRfc3RhdHVzIGNzOworICAgICAgICB9IGRhdGE7CisgICAgICB9IFBBQ0tFRCBoY2lFdmVudDsKKyAgICB9IGRhdGE7CisgIH0gUEFDS0VEIGZpZWxkczsKK30gQmx1ZXRvb3RoUGFja2V0OworCitzdGF0aWMgdm9pZAorYnRoTWFrZUFkZHJlc3MgKGJkYWRkcl90ICphZGRyZXNzLCB1aW50NjRfdCBiZGEpIHsKKyAgdW5zaWduZWQgaW50IGluZGV4OworCisgIGZvciAoaW5kZXg9MDsgaW5kZXg8QkRBX1NJWkU7IGluZGV4Kz0xKSB7CisgICAgYWRkcmVzcy0+YltpbmRleF0gPSBiZGEgJiAwWEZGOworICAgIGJkYSA+Pj0gODsKKyAgfQorfQorCitCbHVldG9vdGhDb25uZWN0aW9uRXh0ZW5zaW9uICoKK2J0aE5ld0Nvbm5lY3Rpb25FeHRlbnNpb24gKHVpbnQ2NF90IGJkYSkgeworICBCbHVldG9vdGhDb25uZWN0aW9uRXh0ZW5zaW9uICpiY3g7CisKKyAgaWYgKChiY3ggPSBtYWxsb2Moc2l6ZW9mKCpiY3gpKSkpIHsKKyAgICBtZW1zZXQoYmN4LCAwLCBzaXplb2YoKmJjeCkpOworCisgICAgYmN4LT5sb2NhbEFkZHJlc3MucmNfZmFtaWx5ID0gQUZfQkxVRVRPT1RIOworICAgIGJjeC0+bG9jYWxBZGRyZXNzLnJjX2NoYW5uZWwgPSAwOworICAgIGJhY3B5KCZiY3gtPmxvY2FsQWRkcmVzcy5yY19iZGFkZHIsIEJEQUREUl9BTlkpOyAvKiBBbnkgSENJLiBObyBzdXBwb3J0IGZvciBleHBsaWNpdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBpbnRlcmZhY2Ugc3BlY2lmaWNhdGlvbiB5ZXQuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCisgICAgYmN4LT5yZW1vdGVBZGRyZXNzLnJjX2ZhbWlseSA9IEFGX0JMVUVUT09USDsKKyAgICBiY3gtPnJlbW90ZUFkZHJlc3MucmNfY2hhbm5lbCA9IDA7CisgICAgYnRoTWFrZUFkZHJlc3MoJmJjeC0+cmVtb3RlQWRkcmVzcy5yY19iZGFkZHIsIGJkYSk7CisKKyAgICBiY3gtPnNvY2tldERlc2NyaXB0b3IgPSBJTlZBTElEX1NPQ0tFVF9ERVNDUklQVE9SOworICAgIHJldHVybiBiY3g7CisgIH0gZWxzZSB7CisgICAgbG9nTWFsbG9jRXJyb3IoKTsKKyAgfQorCisgIHJldHVybiBOVUxMOworfQorCitzdGF0aWMgdm9pZAorYnRoQ2FuY2VsSW5wdXRNb25pdG9yIChCbHVldG9vdGhDb25uZWN0aW9uRXh0ZW5zaW9uICpiY3gpIHsKKyAgaWYgKGJjeC0+aW5wdXRNb25pdG9yKSB7CisgICAgYXN5bmNDYW5jZWxSZXF1ZXN0KGJjeC0+aW5wdXRNb25pdG9yKTsKKyAgICBiY3gtPmlucHV0TW9uaXRvciA9IE5VTEw7CisgIH0KK30KKwordm9pZAorYnRoUmVsZWFzZUNvbm5lY3Rpb25FeHRlbnNpb24gKEJsdWV0b290aENvbm5lY3Rpb25FeHRlbnNpb24gKmJjeCkgeworICBidGhDYW5jZWxJbnB1dE1vbml0b3IoYmN4KTsKKyAgY2xvc2VTb2NrZXQoJmJjeC0+c29ja2V0RGVzY3JpcHRvcik7CisgIGZyZWUoYmN4KTsKK30KKworc3RhdGljIGludAorYnRoR2V0Q29ubmVjdExvZ0xldmVsIChpbnQgZXJyb3IpIHsKKyAgc3dpdGNoIChlcnJvcikgeworICAgIGNhc2UgRUhPU1RVTlJFQUNIOgorICAgIGNhc2UgRUhPU1RET1dOOgorICAgICAgcmV0dXJuIExPR19DQVRFR09SWShCTFVFVE9PVEhfSU8pOworCisgICAgZGVmYXVsdDoKKyAgICAgIHJldHVybiBMT0dfRVJSOworICB9Cit9CisKK2ludAorYnRoT3BlbkNoYW5uZWwgKEJsdWV0b290aENvbm5lY3Rpb25FeHRlbnNpb24gKmJjeCwgdWludDhfdCBjaGFubmVsLCBpbnQgdGltZW91dCkgeworICBiY3gtPnJlbW90ZUFkZHJlc3MucmNfY2hhbm5lbCA9IGNoYW5uZWw7CisKKyAgaWYgKChiY3gtPnNvY2tldERlc2NyaXB0b3IgPSBzb2NrZXQoUEZfQkxVRVRPT1RILCBTT0NLX1NUUkVBTSwgQlRQUk9UT19SRkNPTU0pKSAhPSAtMSkgeworICAgIHNldENsb3NlT25FeGVjKGJjeC0+c29ja2V0RGVzY3JpcHRvciwgMSk7CisKKyAgICBpZiAoYmluZChiY3gtPnNvY2tldERlc2NyaXB0b3IsIChzdHJ1Y3Qgc29ja2FkZHIgKikmYmN4LT5sb2NhbEFkZHJlc3MsIHNpemVvZihiY3gtPmxvY2FsQWRkcmVzcykpICE9IC0xKSB7CisgICAgICBpZiAoc2V0QmxvY2tpbmdJbyhiY3gtPnNvY2tldERlc2NyaXB0b3IsIDApKSB7CisgICAgICAgIGludCBjb25uZWN0UmVzdWx0ID0gTElOVVhfQkxVRVRPT1RIX0NIQU5ORUxfQ09OTkVDVF9BU1lOQ0hST05PVVM/CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25uZWN0U29ja2V0KGJjeC0+c29ja2V0RGVzY3JpcHRvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHN0cnVjdCBzb2NrYWRkciAqKSZiY3gtPnJlbW90ZUFkZHJlc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihiY3gtPnJlbW90ZUFkZHJlc3MpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lb3V0KToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbm5lY3QoYmN4LT5zb2NrZXREZXNjcmlwdG9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc3RydWN0IHNvY2thZGRyICopJmJjeC0+cmVtb3RlQWRkcmVzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKGJjeC0+cmVtb3RlQWRkcmVzcykpOworCisgICAgICAgIGlmIChjb25uZWN0UmVzdWx0ICE9IC0xKSByZXR1cm4gMTsKKyAgICAgICAgbG9nU3lzdGVtUHJvYmxlbShidGhHZXRDb25uZWN0TG9nTGV2ZWwoZXJybm8pLCAiUkZDT01NIGNvbm5lY3QiKTsKKyAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgbG9nU3lzdGVtRXJyb3IoIlJGQ09NTSBiaW5kIik7CisgICAgfQorCisgICAgc2V0U29ja2V0Tm9MaW5nZXIoYmN4LT5zb2NrZXREZXNjcmlwdG9yKTsKKyAgICBjbG9zZShiY3gtPnNvY2tldERlc2NyaXB0b3IpOworICAgIGJjeC0+c29ja2V0RGVzY3JpcHRvciA9IElOVkFMSURfU09DS0VUX0RFU0NSSVBUT1I7CisgIH0gZWxzZSB7CisgICAgbG9nU3lzdGVtRXJyb3IoIlJGQ09NTSBzb2NrZXQiKTsKKyAgfQorCisgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50CitidGhGaW5kQ2hhbm5lbCAodWludDhfdCAqY2hhbm5lbCwgc2RwX3JlY29yZF90ICpyZWNvcmQpIHsKKyAgaW50IGZvdW5kQ2hhbm5lbCA9IDA7CisgIGludCBzdG9wU2VhcmNoaW5nID0gMDsKKyAgc2RwX2xpc3RfdCAqcHJvdG9jb2xzTGlzdDsKKworICBpZiAoIShzZHBfZ2V0X2FjY2Vzc19wcm90b3MocmVjb3JkLCAmcHJvdG9jb2xzTGlzdCkpKSB7CisgICAgc2RwX2xpc3RfdCAqcHJvdG9jb2xzRWxlbWVudCA9IHByb3RvY29sc0xpc3Q7CisKKyAgICB3aGlsZSAocHJvdG9jb2xzRWxlbWVudCkgeworICAgICAgc2RwX2xpc3RfdCAqcHJvdG9jb2xMaXN0ID0gKHNkcF9saXN0X3QgKilwcm90b2NvbHNFbGVtZW50LT5kYXRhOworICAgICAgc2RwX2xpc3RfdCAqcHJvdG9jb2xFbGVtZW50ID0gcHJvdG9jb2xMaXN0OworCisgICAgICB3aGlsZSAocHJvdG9jb2xFbGVtZW50KSB7CisgICAgICAgIHNkcF9kYXRhX3QgKmRhdGFMaXN0ID0gKHNkcF9kYXRhX3QgKilwcm90b2NvbEVsZW1lbnQtPmRhdGE7CisgICAgICAgIHNkcF9kYXRhX3QgKmRhdGFFbGVtZW50ID0gZGF0YUxpc3Q7CisgICAgICAgIGludCB1dWlkUHJvdG9jb2wgPSAwOworCisgICAgICAgIHdoaWxlIChkYXRhRWxlbWVudCkgeworICAgICAgICAgIGlmIChTRFBfSVNfVVVJRChkYXRhRWxlbWVudC0+ZHRkKSkgeworICAgICAgICAgICAgdXVpZFByb3RvY29sID0gc2RwX3V1aWRfdG9fcHJvdG8oJmRhdGFFbGVtZW50LT52YWwudXVpZCk7CisgICAgICAgICAgfSBlbHNlIGlmIChkYXRhRWxlbWVudC0+ZHRkID09IFNEUF9VSU5UOCkgeworICAgICAgICAgICAgaWYgKHV1aWRQcm90b2NvbCA9PSBSRkNPTU1fVVVJRCkgeworICAgICAgICAgICAgICAqY2hhbm5lbCA9IGRhdGFFbGVtZW50LT52YWwudWludDg7CisgICAgICAgICAgICAgIGZvdW5kQ2hhbm5lbCA9IDE7CisgICAgICAgICAgICAgIHN0b3BTZWFyY2hpbmcgPSAxOworICAgICAgICAgICAgfQorICAgICAgICAgIH0KKworICAgICAgICAgIGlmIChzdG9wU2VhcmNoaW5nKSBicmVhazsKKyAgICAgICAgICBkYXRhRWxlbWVudCA9IGRhdGFFbGVtZW50LT5uZXh0OworICAgICAgICB9CisKKyAgICAgICAgaWYgKHN0b3BTZWFyY2hpbmcpIGJyZWFrOworICAgICAgICBwcm90b2NvbEVsZW1lbnQgPSBwcm90b2NvbEVsZW1lbnQtPm5leHQ7CisgICAgICB9CisKKyAgICAgIHNkcF9saXN0X2ZyZWUocHJvdG9jb2xMaXN0LCBOVUxMKTsKKyAgICAgIGlmIChzdG9wU2VhcmNoaW5nKSBicmVhazsKKyAgICAgIHByb3RvY29sc0VsZW1lbnQgPSBwcm90b2NvbHNFbGVtZW50LT5uZXh0OworICAgIH0KKworICAgIHNkcF9saXN0X2ZyZWUocHJvdG9jb2xzTGlzdCwgTlVMTCk7CisgIH0gZWxzZSB7CisgICAgbG9nU3lzdGVtRXJyb3IoInNkcF9nZXRfYWNjZXNzX3Byb3RvcyIpOworICB9CisKKyAgcmV0dXJuIGZvdW5kQ2hhbm5lbDsKK30KKworc3RhdGljIFNvY2tldERlc2NyaXB0b3IKK2J0aE5ld0wyY2FwQ29ubmVjdGlvbiAoY29uc3QgYmRhZGRyX3QgKmFkZHJlc3MsIGludCB0aW1lb3V0KSB7CisgIFNvY2tldERlc2NyaXB0b3Igc29ja2V0RGVzY3JpcHRvciA9IHNvY2tldChQRl9CTFVFVE9PVEgsIFNPQ0tfU0VRUEFDS0VULCBCVFBST1RPX0wyQ0FQKTsKKworICBpZiAoc29ja2V0RGVzY3JpcHRvciAhPSAtMSkgeworICAgIHNldENsb3NlT25FeGVjKHNvY2tldERlc2NyaXB0b3IsIDEpOworCisgICAgaWYgKHNldEJsb2NraW5nSW8oc29ja2V0RGVzY3JpcHRvciwgMCkpIHsKKyAgICAgIHN0cnVjdCBzb2NrYWRkcl9sMiBzb2NrZXRBZGRyZXNzID0geworICAgICAgICAubDJfZmFtaWx5ID0gQUZfQkxVRVRPT1RILAorICAgICAgICAubDJfYmRhZGRyID0gKmFkZHJlc3MsCisgICAgICAgIC5sMl9wc20gPSBodG9icyhTRFBfUFNNKQorICAgICAgfTsKKworICAgICAgaW50IGNvbm5lY3RSZXN1bHQgPSBjb25uZWN0U29ja2V0KHNvY2tldERlc2NyaXB0b3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHN0cnVjdCBzb2NrYWRkciAqKSZzb2NrZXRBZGRyZXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihzb2NrZXRBZGRyZXNzKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lb3V0KTsKKworICAgICAgaWYgKGNvbm5lY3RSZXN1bHQgIT0gLTEpIHJldHVybiBzb2NrZXREZXNjcmlwdG9yOworICAgICAgbG9nU3lzdGVtUHJvYmxlbShidGhHZXRDb25uZWN0TG9nTGV2ZWwoZXJybm8pLCAiTDJDQVAgY29ubmVjdCIpOworICAgIH0KKworICAgIHNldFNvY2tldE5vTGluZ2VyKHNvY2tldERlc2NyaXB0b3IpOworICAgIGNsb3NlKHNvY2tldERlc2NyaXB0b3IpOworICB9IGVsc2UgeworICAgIGxvZ1N5c3RlbUVycm9yKCJMMkNBUCBzb2NrZXQiKTsKKyAgfQorCisgIHJldHVybiBJTlZBTElEX1NPQ0tFVF9ERVNDUklQVE9SOworfQorCit0eXBlZGVmIHN0cnVjdCB7CisgIHNkcF9zZXNzaW9uX3QgKnNlc3Npb247CisgIGludCAqZm91bmQ7CisgIHVpbnQ4X3QgKmNoYW5uZWw7Cit9IEJsdWV0b290aENoYW5uZWxEaXNjb3ZlcnlEYXRhOworCitzdGF0aWMgdm9pZAorYnRoSGFuZGxlQ2hhbm5lbERpc2NvdmVyeVJlc3BvbnNlICgKKyAgdWludDhfdCB0eXBlLCB1aW50MTZfdCBzdGF0dXMsCisgIHVpbnQ4X3QgKnJlc3BvbnNlLCBzaXplX3Qgc2l6ZSwKKyAgdm9pZCAqZGF0YQorKSB7CisgIEJsdWV0b290aENoYW5uZWxEaXNjb3ZlcnlEYXRhICpiY2QgPSBkYXRhOworCisgIHN3aXRjaCAoc3RhdHVzKSB7CisgICAgY2FzZSAwOgorICAgICAgc3dpdGNoICh0eXBlKSB7CisgICAgICAgIGNhc2UgU0RQX1NWQ19TRUFSQ0hfQVRUUl9SU1A6IHsKKyAgICAgICAgICB1aW50OF90ICpuZXh0Qnl0ZSA9IHJlc3BvbnNlOworICAgICAgICAgIGludCBieXRlc0xlZnQgPSBzaXplOworCisgICAgICAgICAgdWludDhfdCBkdGQgPSAwOworICAgICAgICAgIGludCBkYXRhTGVmdCA9IDA7CisgICAgICAgICAgaW50IGhlYWRlckxlbmd0aCA9IHNkcF9leHRyYWN0X3NlcXR5cGUobmV4dEJ5dGUsIGJ5dGVzTGVmdCwgJmR0ZCwgJmRhdGFMZWZ0KTsKKworICAgICAgICAgIGlmIChoZWFkZXJMZW5ndGggPiAwKSB7CisgICAgICAgICAgICBuZXh0Qnl0ZSArPSBoZWFkZXJMZW5ndGg7CisgICAgICAgICAgICBieXRlc0xlZnQgLT0gaGVhZGVyTGVuZ3RoOworCisgICAgICAgICAgICB3aGlsZSAoZGF0YUxlZnQgPiAwKSB7CisgICAgICAgICAgICAgIGludCBzdG9wID0gMDsKKyAgICAgICAgICAgICAgaW50IHJlY29yZExlbmd0aCA9IDA7CisgICAgICAgICAgICAgIHNkcF9yZWNvcmRfdCAqcmVjb3JkID0gc2RwX2V4dHJhY3RfcGR1KG5leHRCeXRlLCBieXRlc0xlZnQsICZyZWNvcmRMZW5ndGgpOworCisgICAgICAgICAgICAgIGlmIChyZWNvcmQpIHsKKyAgICAgICAgICAgICAgICBpZiAoYnRoRmluZENoYW5uZWwoYmNkLT5jaGFubmVsLCByZWNvcmQpKSB7CisgICAgICAgICAgICAgICAgICAqYmNkLT5mb3VuZCA9IDE7CisgICAgICAgICAgICAgICAgICBzdG9wID0gMTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBuZXh0Qnl0ZSArPSByZWNvcmRMZW5ndGg7CisgICAgICAgICAgICAgICAgYnl0ZXNMZWZ0IC09IHJlY29yZExlbmd0aDsKKyAgICAgICAgICAgICAgICBkYXRhTGVmdCAtPSByZWNvcmRMZW5ndGg7CisKKyAgICAgICAgICAgICAgICBzZHBfcmVjb3JkX2ZyZWUocmVjb3JkKTsKKyAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBsb2dTeXN0ZW1FcnJvcigic2RwX2V4dHJhY3RfcGR1Iik7CisgICAgICAgICAgICAgICAgc3RvcCA9IDE7CisgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICBpZiAoc3RvcCkgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgfQorCisgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgIGxvZ01lc3NhZ2UoTE9HX0VSUiwgInVuZXhwZWN0ZWQgY2hhbm5lbCBkaXNjb3ZlcnkgcmVzcG9uc2UgdHlwZTogJXUiLCB0eXBlKTsKKyAgICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICAgIGJyZWFrOworCisgICAgY2FzZSAwWEZGRkY6CisgICAgICBlcnJubyA9IHNkcF9nZXRfZXJyb3IoYmNkLT5zZXNzaW9uKTsKKyAgICAgIGlmIChlcnJubyA8IDApIGVycm5vID0gRUlOVkFMOworICAgICAgbG9nU3lzdGVtRXJyb3IoImNoYW5uZWwgZGlzY292ZXJ5IHJlc3BvbnNlIik7CisgICAgICBicmVhazsKKworICAgIGRlZmF1bHQ6CisgICAgICBsb2dNZXNzYWdlKExPR19FUlIsICJ1bmV4cGVjdGVkIGNoYW5uZWwgZGlzY292ZXJ5IHJlc3BvbnNlIHN0YXR1czogJXUiLCBzdGF0dXMpOworICAgICAgYnJlYWs7CisgIH0KK30KKworaW50CitidGhEaXNjb3ZlckNoYW5uZWwgKAorICB1aW50OF90ICpjaGFubmVsLCBCbHVldG9vdGhDb25uZWN0aW9uRXh0ZW5zaW9uICpiY3gsCisgIGNvbnN0IHZvaWQgKnV1aWRCeXRlcywgc2l6ZV90IHV1aWRMZW5ndGgsCisgIGludCB0aW1lb3V0CispIHsKKyAgaW50IGZvdW5kQ2hhbm5lbCA9IDA7CisKKyAgdXVpZF90IHV1aWQ7CisgIHNkcF9saXN0X3QgKnNlYXJjaExpc3Q7CisKKyAgc2RwX3V1aWQxMjhfY3JlYXRlKCZ1dWlkLCB1dWlkQnl0ZXMpOworICBzZWFyY2hMaXN0ID0gc2RwX2xpc3RfYXBwZW5kKE5VTEwsICZ1dWlkKTsKKworICBpZiAoc2VhcmNoTGlzdCkgeworICAgIHVpbnQzMl90IGF0dHJpYnV0ZXNSYW5nZSA9IDBYMDAwMEZGRkY7CisgICAgc2RwX2xpc3RfdCAqYXR0cmlidXRlc0xpc3QgPSBzZHBfbGlzdF9hcHBlbmQoTlVMTCwgJmF0dHJpYnV0ZXNSYW5nZSk7CisKKyAgICBpZiAoYXR0cmlidXRlc0xpc3QpIHsKKyAgICAgIGlmIChMSU5VWF9CTFVFVE9PVEhfQ0hBTk5FTF9ESVNDT1ZFUl9BU1lOQ0hST05PVVMpIHsKKyAgICAgICAgU29ja2V0RGVzY3JpcHRvciBsMmNhcFNvY2tldDsKKyAgICAgICAgVGltZVBlcmlvZCBwZXJpb2Q7CisgICAgICAgIHN0YXJ0VGltZVBlcmlvZCgmcGVyaW9kLCB0aW1lb3V0KTsKKworICAgICAgICBpZiAoKGwyY2FwU29ja2V0ID0gYnRoTmV3TDJjYXBDb25uZWN0aW9uKCZiY3gtPnJlbW90ZUFkZHJlc3MucmNfYmRhZGRyLCB0aW1lb3V0KSkgIT0gSU5WQUxJRF9TT0NLRVRfREVTQ1JJUFRPUikgeworICAgICAgICAgIHNkcF9zZXNzaW9uX3QgKnNlc3Npb24gPSBzZHBfY3JlYXRlKGwyY2FwU29ja2V0LCAwKTsKKworICAgICAgICAgIGlmIChzZXNzaW9uKSB7CisgICAgICAgICAgICBCbHVldG9vdGhDaGFubmVsRGlzY292ZXJ5RGF0YSBiY2QgPSB7CisgICAgICAgICAgICAgIC5zZXNzaW9uID0gc2Vzc2lvbiwKKyAgICAgICAgICAgICAgLmZvdW5kID0gJmZvdW5kQ2hhbm5lbCwKKyAgICAgICAgICAgICAgLmNoYW5uZWwgPSBjaGFubmVsCisgICAgICAgICAgICB9OworCisgICAgICAgICAgICBpZiAoc2RwX3NldF9ub3RpZnkoc2Vzc2lvbiwgYnRoSGFuZGxlQ2hhbm5lbERpc2NvdmVyeVJlc3BvbnNlLCAmYmNkKSAhPSAtMSkgeworICAgICAgICAgICAgICBpbnQgcXVlcnlTdGF0dXMgPSBzZHBfc2VydmljZV9zZWFyY2hfYXR0cl9hc3luYyhzZXNzaW9uLCBzZWFyY2hMaXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTRFBfQVRUUl9SRVFfUkFOR0UsIGF0dHJpYnV0ZXNMaXN0KTsKKworICAgICAgICAgICAgICBpZiAoIXF1ZXJ5U3RhdHVzKSB7CisgICAgICAgICAgICAgICAgbG9uZyBpbnQgZWxhcHNlZDsKKworICAgICAgICAgICAgICAgIHdoaWxlICghYWZ0ZXJUaW1lUGVyaW9kKCZwZXJpb2QsICZlbGFwc2VkKSkgeworICAgICAgICAgICAgICAgICAgaWYgKCFhd2FpdFNvY2tldElucHV0KGwyY2FwU29ja2V0LCAodGltZW91dCAtIGVsYXBzZWQpKSkgYnJlYWs7CisgICAgICAgICAgICAgICAgICBpZiAoc2RwX3Byb2Nlc3Moc2Vzc2lvbikgPT0gLTEpIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBsb2dTeXN0ZW1FcnJvcigic2RwX3NlcnZpY2Vfc2VhcmNoX2F0dHJfYXN5bmMiKTsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgbG9nU3lzdGVtRXJyb3IoInNkcF9zZXRfbm90aWZ5Iik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHNkcF9jbG9zZShzZXNzaW9uKTsKKyAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgbG9nU3lzdGVtRXJyb3IoInNkcF9jcmVhdGUiKTsKKyAgICAgICAgICB9CisKKyAgICAgICAgICBjbG9zZShsMmNhcFNvY2tldCk7CisgICAgICAgIH0KKyAgICAgIH0gZWxzZSB7CisgICAgICAgIHNkcF9zZXNzaW9uX3QgKnNlc3Npb24gPSBzZHBfY29ubmVjdChCREFERFJfQU5ZLCAmYmN4LT5yZW1vdGVBZGRyZXNzLnJjX2JkYWRkciwgU0RQX1JFVFJZX0lGX0JVU1kpOworCisgICAgICAgIGlmIChzZXNzaW9uKSB7CisgICAgICAgICAgc2RwX2xpc3RfdCAqcmVjb3JkTGlzdCA9IE5VTEw7CisgICAgICAgICAgaW50IHF1ZXJ5U3RhdHVzID0gc2RwX3NlcnZpY2Vfc2VhcmNoX2F0dHJfcmVxKHNlc3Npb24sIHNlYXJjaExpc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNEUF9BVFRSX1JFUV9SQU5HRSwgYXR0cmlidXRlc0xpc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZyZWNvcmRMaXN0KTsKKworICAgICAgICAgIGlmICghcXVlcnlTdGF0dXMpIHsKKyAgICAgICAgICAgIGludCBzdG9wU2VhcmNoaW5nID0gMDsKKyAgICAgICAgICAgIHNkcF9saXN0X3QgKnJlY29yZEVsZW1lbnQgPSByZWNvcmRMaXN0OworCisgICAgICAgICAgICB3aGlsZSAocmVjb3JkRWxlbWVudCkgeworICAgICAgICAgICAgICBzZHBfcmVjb3JkX3QgKnJlY29yZCA9IChzZHBfcmVjb3JkX3QgKilyZWNvcmRFbGVtZW50LT5kYXRhOworCisgICAgICAgICAgICAgIGlmIChyZWNvcmQpIHsKKyAgICAgICAgICAgICAgICBpZiAoYnRoRmluZENoYW5uZWwoY2hhbm5lbCwgcmVjb3JkKSkgeworICAgICAgICAgICAgICAgICAgZm91bmRDaGFubmVsID0gMTsKKyAgICAgICAgICAgICAgICAgIHN0b3BTZWFyY2hpbmcgPSAxOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIHNkcF9yZWNvcmRfZnJlZShyZWNvcmQpOworICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGxvZ01hbGxvY0Vycm9yKCk7CisgICAgICAgICAgICAgICAgc3RvcFNlYXJjaGluZyA9IDE7CisgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICBpZiAoc3RvcFNlYXJjaGluZykgYnJlYWs7CisgICAgICAgICAgICAgIHJlY29yZEVsZW1lbnQgPSByZWNvcmRFbGVtZW50LT5uZXh0OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBzZHBfbGlzdF9mcmVlKHJlY29yZExpc3QsIE5VTEwpOworICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBsb2dTeXN0ZW1FcnJvcigic2RwX3NlcnZpY2Vfc2VhcmNoX2F0dHJfcmVxIik7CisgICAgICAgICAgfQorCisgICAgICAgICAgc2RwX2Nsb3NlKHNlc3Npb24pOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgIGxvZ1N5c3RlbUVycm9yKCJzZHBfY29ubmVjdCIpOworICAgICAgICB9CisgICAgICB9CisKKyAgICAgIHNkcF9saXN0X2ZyZWUoYXR0cmlidXRlc0xpc3QsIE5VTEwpOworICAgIH0gZWxzZSB7CisgICAgICBsb2dNYWxsb2NFcnJvcigpOworICAgIH0KKworICAgIHNkcF9saXN0X2ZyZWUoc2VhcmNoTGlzdCwgTlVMTCk7CisgIH0gZWxzZSB7CisgICAgbG9nTWFsbG9jRXJyb3IoKTsKKyAgfQorCisgIHJldHVybiBmb3VuZENoYW5uZWw7Cit9CisKK2ludAorYnRoTW9uaXRvcklucHV0IChCbHVldG9vdGhDb25uZWN0aW9uICpjb25uZWN0aW9uLCBBc3luY01vbml0b3JDYWxsYmFjayAqY2FsbGJhY2ssIHZvaWQgKmRhdGEpIHsKKyAgQmx1ZXRvb3RoQ29ubmVjdGlvbkV4dGVuc2lvbiAqYmN4ID0gY29ubmVjdGlvbi0+ZXh0ZW5zaW9uOworCisgIGJ0aENhbmNlbElucHV0TW9uaXRvcihiY3gpOworICBpZiAoIWNhbGxiYWNrKSByZXR1cm4gMTsKKyAgcmV0dXJuIGFzeW5jTW9uaXRvclNvY2tldElucHV0KCZiY3gtPmlucHV0TW9uaXRvciwgYmN4LT5zb2NrZXREZXNjcmlwdG9yLCBjYWxsYmFjaywgZGF0YSk7Cit9CisKK2ludAorYnRoUG9sbElucHV0IChCbHVldG9vdGhDb25uZWN0aW9uRXh0ZW5zaW9uICpiY3gsIGludCB0aW1lb3V0KSB7CisgIHJldHVybiBhd2FpdFNvY2tldElucHV0KGJjeC0+c29ja2V0RGVzY3JpcHRvciwgdGltZW91dCk7Cit9CisKK3NzaXplX3QKK2J0aEdldERhdGEgKAorICBCbHVldG9vdGhDb25uZWN0aW9uRXh0ZW5zaW9uICpiY3gsIHZvaWQgKmJ1ZmZlciwgc2l6ZV90IHNpemUsCisgIGludCBpbml0aWFsVGltZW91dCwgaW50IHN1YnNlcXVlbnRUaW1lb3V0CispIHsKKyAgcmV0dXJuIHJlYWRTb2NrZXQoYmN4LT5zb2NrZXREZXNjcmlwdG9yLCBidWZmZXIsIHNpemUsIGluaXRpYWxUaW1lb3V0LCBzdWJzZXF1ZW50VGltZW91dCk7Cit9CisKK3NzaXplX3QKK2J0aFB1dERhdGEgKEJsdWV0b290aENvbm5lY3Rpb25FeHRlbnNpb24gKmJjeCwgY29uc3Qgdm9pZCAqYnVmZmVyLCBzaXplX3Qgc2l6ZSkgeworICByZXR1cm4gd3JpdGVTb2NrZXQoYmN4LT5zb2NrZXREZXNjcmlwdG9yLCBidWZmZXIsIHNpemUpOworfQorCitjaGFyICoKK2J0aE9idGFpbkRldmljZU5hbWUgKHVpbnQ2NF90IGJkYSwgaW50IHRpbWVvdXQpIHsKKyAgY2hhciAqbmFtZSA9IE5VTEw7CisgIGludCBkZXZpY2UgPSBoY2lfZ2V0X3JvdXRlKE5VTEwpOworCisgIGlmIChkZXZpY2UgPj0gMCkgeworICAgIFNvY2tldERlc2NyaXB0b3Igc29ja2V0RGVzY3JpcHRvciA9IGhjaV9vcGVuX2RldihkZXZpY2UpOworCisgICAgaWYgKHNvY2tldERlc2NyaXB0b3IgPj0gMCkgeworICAgICAgaW50IG9idGFpbmVkID0gMDsKKyAgICAgIGJkYWRkcl90IGFkZHJlc3M7CisgICAgICBjaGFyIGJ1ZmZlcltIQ0lfTUFYX05BTUVfTEVOR1RIXTsKKworICAgICAgYnRoTWFrZUFkZHJlc3MoJmFkZHJlc3MsIGJkYSk7CisgICAgICBtZW1zZXQoYnVmZmVyLCAwLCBzaXplb2YoYnVmZmVyKSk7CisKKyAgICAgIGlmIChMSU5VWF9CTFVFVE9PVEhfTkFNRV9PQlRBSU5fQVNZTkNIUk9OT1VTKSB7CisgICAgICAgIGlmIChzZXRCbG9ja2luZ0lvKHNvY2tldERlc2NyaXB0b3IsIDApKSB7CisgICAgICAgICAgc3RydWN0IGhjaV9maWx0ZXIgb2xkRmlsdGVyOworICAgICAgICAgIHNvY2tsZW5fdCBvbGRMZW5ndGggPSBzaXplb2Yob2xkRmlsdGVyKTsKKworICAgICAgICAgIGlmIChnZXRzb2Nrb3B0KHNvY2tldERlc2NyaXB0b3IsIFNPTF9IQ0ksIEhDSV9GSUxURVIsICZvbGRGaWx0ZXIsICZvbGRMZW5ndGgpICE9IC0xKSB7CisgICAgICAgICAgICB1aW50MTZfdCBvZ2YgPSBPR0ZfTElOS19DVEw7CisgICAgICAgICAgICB1aW50MTZfdCBvY2YgPSBPQ0ZfUkVNT1RFX05BTUVfUkVROworICAgICAgICAgICAgdWludDE2X3Qgb3Bjb2RlID0gaHRvYnMoY21kX29wY29kZV9wYWNrKG9nZiwgb2NmKSk7CisgICAgICAgICAgICBzdHJ1Y3QgaGNpX2ZpbHRlciBuZXdGaWx0ZXI7CisKKyAgICAgICAgICAgIGhjaV9maWx0ZXJfY2xlYXIoJm5ld0ZpbHRlcik7CisgICAgICAgICAgICBoY2lfZmlsdGVyX3NldF9wdHlwZShIQ0lfRVZFTlRfUEtULCAmbmV3RmlsdGVyKTsKKyAgICAgICAgICAgIGhjaV9maWx0ZXJfc2V0X2V2ZW50KEVWVF9DTURfU1RBVFVTLCAmbmV3RmlsdGVyKTsKKyAgICAgICAgICAgIGhjaV9maWx0ZXJfc2V0X2V2ZW50KEVWVF9DTURfQ09NUExFVEUsICZuZXdGaWx0ZXIpOworICAgICAgICAgICAgaGNpX2ZpbHRlcl9zZXRfZXZlbnQoRVZUX1JFTU9URV9OQU1FX1JFUV9DT01QTEVURSwgJm5ld0ZpbHRlcik7CisgICAgICAgICAgICBoY2lfZmlsdGVyX3NldF9vcGNvZGUob3Bjb2RlLCAmbmV3RmlsdGVyKTsKKworICAgICAgICAgICAgaWYgKHNldHNvY2tvcHQoc29ja2V0RGVzY3JpcHRvciwgU09MX0hDSSwgSENJX0ZJTFRFUiwgJm5ld0ZpbHRlciwgc2l6ZW9mKG5ld0ZpbHRlcikpICE9IC0xKSB7CisgICAgICAgICAgICAgIHJlbW90ZV9uYW1lX3JlcV9jcCBwYXJhbWV0ZXJzOworCisgICAgICAgICAgICAgIG1lbXNldCgmcGFyYW1ldGVycywgMCwgc2l6ZW9mKHBhcmFtZXRlcnMpKTsKKyAgICAgICAgICAgICAgYmFjcHkoJnBhcmFtZXRlcnMuYmRhZGRyLCAmYWRkcmVzcyk7CisgICAgICAgICAgICAgIHBhcmFtZXRlcnMucHNjYW5fcmVwX21vZGUgPSAwWDAyOworICAgICAgICAgICAgICBwYXJhbWV0ZXJzLmNsb2NrX29mZnNldCA9IDA7CisKKyAgICAgICAgICAgICAgaWYgKGhjaV9zZW5kX2NtZChzb2NrZXREZXNjcmlwdG9yLCBvZ2YsIG9jZiwgc2l6ZW9mKHBhcmFtZXRlcnMpLCAmcGFyYW1ldGVycykgIT0gLTEpIHsKKyAgICAgICAgICAgICAgICBsb25nIGludCBlbGFwc2VkID0gMDsKKyAgICAgICAgICAgICAgICBUaW1lUGVyaW9kIHBlcmlvZDsKKyAgICAgICAgICAgICAgICBzdGFydFRpbWVQZXJpb2QoJnBlcmlvZCwgdGltZW91dCk7CisKKyAgICAgICAgICAgICAgICB3aGlsZSAoYXdhaXRTb2NrZXRJbnB1dChzb2NrZXREZXNjcmlwdG9yLCAodGltZW91dCAtIGVsYXBzZWQpKSkgeworICAgICAgICAgICAgICAgICAgZW51bSB7CisgICAgICAgICAgICAgICAgICAgIFVORVhQRUNURUQsCisgICAgICAgICAgICAgICAgICAgIEhBTkRMRUQsCisgICAgICAgICAgICAgICAgICAgIERPTkUKKyAgICAgICAgICAgICAgICAgIH0gc3RhdGUgPSBVTkVYUEVDVEVEOworCisgICAgICAgICAgICAgICAgICBCbHVldG9vdGhQYWNrZXQgcGFja2V0OworICAgICAgICAgICAgICAgICAgaW50IHJlc3VsdCA9IHJlYWQoc29ja2V0RGVzY3JpcHRvciwgJnBhY2tldCwgc2l6ZW9mKHBhY2tldCkpOworCisgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0ID09IC0xKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChlcnJubyA9PSBFQUdBSU4pIGNvbnRpbnVlOworICAgICAgICAgICAgICAgICAgICBpZiAoZXJybm8gPT0gRUlOVFIpIGNvbnRpbnVlOworCisgICAgICAgICAgICAgICAgICAgIGxvZ1N5c3RlbUVycm9yKCJyZWFkIik7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICBzd2l0Y2ggKHBhY2tldC5maWVsZHMudHlwZSkgeworICAgICAgICAgICAgICAgICAgICBjYXNlIEhDSV9FVkVOVF9QS1Q6IHsKKyAgICAgICAgICAgICAgICAgICAgICBoY2lfZXZlbnRfaGRyICpoZWFkZXIgPSAmcGFja2V0LmZpZWxkcy5kYXRhLmhjaUV2ZW50LmhlYWRlcjsKKworICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoaGVhZGVyLT5ldnQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgRVZUX1JFTU9URV9OQU1FX1JFUV9DT01QTEVURTogeworICAgICAgICAgICAgICAgICAgICAgICAgICBldnRfcmVtb3RlX25hbWVfcmVxX2NvbXBsZXRlICpybiA9ICZwYWNrZXQuZmllbGRzLmRhdGEuaGNpRXZlbnQuZGF0YS5ybjsKKworICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYmFjbXAoJnJuLT5iZGFkZHIsICZhZGRyZXNzKSA9PSAwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUgPSBET05FOworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFybi0+c3RhdHVzKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgbGVuZ3RoID0gaGVhZGVyLT5wbGVuOworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZW5ndGggLT0gcm4tPm5hbWUgLSAodW5zaWduZWQgY2hhciAqKXJuOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVuZ3RoID0gTUlOKGxlbmd0aCwgc2l6ZW9mKHJuLT5uYW1lKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZW5ndGggPSBNSU4obGVuZ3RoLCBzaXplb2YoYnVmZmVyKS0xKTsKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVtY3B5KGJ1ZmZlciwgcm4tPm5hbWUsIGxlbmd0aCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXJbbGVuZ3RoXSA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYnRhaW5lZCA9IDE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgRVZUX0NNRF9TVEFUVVM6IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZXZ0X2NtZF9zdGF0dXMgKmNzID0gJnBhY2tldC5maWVsZHMuZGF0YS5oY2lFdmVudC5kYXRhLmNzOworCisgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjcy0+b3Bjb2RlID09IG9wY29kZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlID0gSEFORExFRDsKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjcy0+c3RhdHVzKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgICAgICAgIGxvZ01lc3NhZ2UoTE9HX0NBVEVHT1JZKEJMVUVUT09USF9JTyksICJ1bmV4cGVjdGVkIEhDSSBldmVudCB0eXBlOiAldSIsIGhlYWRlci0+ZXZ0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICAgIGxvZ01lc3NhZ2UoTE9HX0NBVEVHT1JZKEJMVUVUT09USF9JTyksICJ1bmV4cGVjdGVkIEJsdWV0b290aCBwYWNrZXQgdHlwZTogJXUiLCBwYWNrZXQuZmllbGRzLnR5cGUpOworICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICBpZiAoc3RhdGUgPT0gRE9ORSkgYnJlYWs7CisgICAgICAgICAgICAgICAgICBpZiAoc3RhdGUgPT0gVU5FWFBFQ1RFRCkgbG9nQnl0ZXMoTE9HX1dBUk5JTkcsICJ1bmV4cGVjdGVkIEJsdWV0b290aCBwYWNrZXQiLCAmcGFja2V0LCByZXN1bHQpOworICAgICAgICAgICAgICAgICAgaWYgKGFmdGVyVGltZVBlcmlvZCgmcGVyaW9kLCAmZWxhcHNlZCkpIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBsb2dTeXN0ZW1FcnJvcigiaGNpX3NlbmRfY21kIik7CisgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICBpZiAoc2V0c29ja29wdChzb2NrZXREZXNjcmlwdG9yLCBTT0xfSENJLCBIQ0lfRklMVEVSLCAmb2xkRmlsdGVyLCBvbGRMZW5ndGgpID09IC0xKSB7CisgICAgICAgICAgICAgICAgbG9nU3lzdGVtRXJyb3IoInNldHNvY2tvcHRbU09MX0hDSSxIQ0lfRklMVEVSXSIpOworICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICBsb2dTeXN0ZW1FcnJvcigic2V0c29ja29wdFtTT0xfSENJLEhDSV9GSUxURVJdIik7CisgICAgICAgICAgICB9CisgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGxvZ1N5c3RlbUVycm9yKCJnZXRzb2Nrb3B0W1NPTF9IQ0ksSENJX0ZJTFRFUl0iKTsKKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgIH0gZWxzZSB7CisgICAgICAgIGludCByZXN1bHQgPSBoY2lfcmVhZF9yZW1vdGVfbmFtZShzb2NrZXREZXNjcmlwdG9yLCAmYWRkcmVzcywgc2l6ZW9mKGJ1ZmZlciksIGJ1ZmZlciwgdGltZW91dCk7CisKKyAgICAgICAgaWYgKHJlc3VsdCA+PSAwKSB7CisgICAgICAgICAgb2J0YWluZWQgPSAxOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgIGxvZ1N5c3RlbUVycm9yKCJoY2lfcmVhZF9yZW1vdGVfbmFtZSIpOworICAgICAgICB9CisgICAgICB9CisKKyAgICAgIGlmIChvYnRhaW5lZCkgeworICAgICAgICBpZiAoIShuYW1lID0gc3RyZHVwKGJ1ZmZlcikpKSB7CisgICAgICAgICAgbG9nTWFsbG9jRXJyb3IoKTsKKyAgICAgICAgfQorICAgICAgfQorCisgICAgICBjbG9zZShzb2NrZXREZXNjcmlwdG9yKTsKKyAgICB9IGVsc2UgeworICAgICAgbG9nU3lzdGVtRXJyb3IoImhjaV9vcGVuX2RldiIpOworICAgIH0KKyAgfSBlbHNlIHsKKyAgICBsb2dTeXN0ZW1FcnJvcigiaGNpX2dldF9yb3V0ZSIpOworICB9CisKKyAgcmV0dXJuIG5hbWU7Cit9CisKKyNpZmRlZiBIQVZFX1BLR19EQlVTCisjaW5jbHVkZSA8ZGJ1cy9kYnVzLmg+CisKK3N0YXRpYyB2b2lkCitsb2dEQnVzRXJyb3IgKGNvbnN0IGNoYXIgKmFjdGlvbiwgY29uc3QgREJ1c0Vycm9yICplcnJvcikgeworICBjb25zdCBjaGFyICptZXNzYWdlID0gZXJyb3ItPm1lc3NhZ2U7CisgIGludCBsZW5ndGggPSBzdHJsZW4obWVzc2FnZSk7CisKKyAgd2hpbGUgKGxlbmd0aCA+IDApIHsKKyAgICBjaGFyIGNoYXJhY3RlciA9IG1lc3NhZ2VbLS1sZW5ndGhdOworICAgIGlmIChjaGFyYWN0ZXIgIT0gJ1xuJykgYnJlYWs7CisgIH0KKworICBsb2dNZXNzYWdlKExPR19DQVRFR09SWShCTFVFVE9PVEhfSU8pLAorICAgICAgICAgICAgICJEQnVzIGVycm9yOiAlczogJXM6ICUuKnMiLAorICAgICAgICAgICAgIGFjdGlvbiwgZXJyb3ItPm5hbWUsIGxlbmd0aCwgbWVzc2FnZSk7Cit9CisjZW5kaWYgLyogSEFWRV9QS0dfREJVUyAqLworCit2b2lkCitidGhQcm9jZXNzRGlzY292ZXJlZERldmljZXMgKAorICBEaXNjb3ZlcmVkQmx1ZXRvb3RoRGV2aWNlVGVzdGVyICp0ZXN0RGV2aWNlLCB2b2lkICpkYXRhCispIHsKKyNpZmRlZiBIQVZFX1BLR19EQlVTCisgIGludCBmb3VuZCA9IDA7CisKKyAgREJ1c0Vycm9yIGVycm9yOworICBEQnVzQ29ubmVjdGlvbiAqYnVzOworIAorICBkYnVzX2Vycm9yX2luaXQoJmVycm9yKTsKKyAgYnVzID0gZGJ1c19idXNfZ2V0KERCVVNfQlVTX1NZU1RFTSwgJmVycm9yKTsKKworICBpZiAoZGJ1c19lcnJvcl9pc19zZXQoJmVycm9yKSkgeworICAgIGxvZ0RCdXNFcnJvcigiZ2V0IGJ1cyIsICZlcnJvcik7CisgICAgZGJ1c19lcnJvcl9mcmVlKCZlcnJvcik7CisgIH0gZWxzZSBpZiAoIWJ1cykgeworICAgIGxvZ01hbGxvY0Vycm9yKCk7CisgIH0gZWxzZSB7CisgICAgREJ1c01lc3NhZ2UgKmdldE1hbmFnZWRPYmplY3RzID0gZGJ1c19tZXNzYWdlX25ld19tZXRob2RfY2FsbCgKKyAgICAgICJvcmcuYmx1ZXoiLCAiLyIsCisgICAgICAib3JnLmZyZWVkZXNrdG9wLkRCdXMuT2JqZWN0TWFuYWdlciIsCisgICAgICAiR2V0TWFuYWdlZE9iamVjdHMiCisgICAgKTsKKworICAgIGlmICghZ2V0TWFuYWdlZE9iamVjdHMpIHsKKyAgICAgIGxvZ01hbGxvY0Vycm9yKCk7CisgICAgfSBlbHNlIHsKKyAgICAgIERCdXNNZXNzYWdlICptYW5hZ2VkT2JqZWN0cyA9IGRidXNfY29ubmVjdGlvbl9zZW5kX3dpdGhfcmVwbHlfYW5kX2Jsb2NrKAorICAgICAgICBidXMsIGdldE1hbmFnZWRPYmplY3RzLCAtMSwgJmVycm9yCisgICAgICApOworCisgICAgICBkYnVzX21lc3NhZ2VfdW5yZWYoZ2V0TWFuYWdlZE9iamVjdHMpOworICAgICAgZ2V0TWFuYWdlZE9iamVjdHMgPSBOVUxMOworCisgICAgICBpZiAoZGJ1c19lcnJvcl9pc19zZXQoJmVycm9yKSkgeworICAgICAgICBsb2dEQnVzRXJyb3IoInNlbmQgbWVzc2FnZSIsICZlcnJvcik7CisgICAgICAgIGRidXNfZXJyb3JfZnJlZSgmZXJyb3IpOworICAgICAgfSBlbHNlIGlmICghbWFuYWdlZE9iamVjdHMpIHsKKyAgICAgICAgbG9nTWFsbG9jRXJyb3IoKTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIERCdXNNZXNzYWdlSXRlciBhcmdzOworCisgICAgICAgIGlmIChkYnVzX21lc3NhZ2VfaXRlcl9pbml0KG1hbmFnZWRPYmplY3RzLCAmYXJncykgPT0gRkFMU0UpIHsKKyAgICAgICAgICBsb2dNZXNzYWdlKExPR19FUlIsICJyZXBseSBoYXMgbm8gYXJndW1lbnRzIik7CisgICAgICAgIH0gZWxzZSBpZiAoZGJ1c19tZXNzYWdlX2l0ZXJfZ2V0X2FyZ190eXBlKCZhcmdzKSAhPSBEQlVTX1RZUEVfQVJSQVkpIHsKKyAgICAgICAgICBsb2dNZXNzYWdlKExPR19FUlIsICJleHBlY3RpbmcgYW4gYXJyYXkiKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICBEQnVzTWVzc2FnZUl0ZXIgb2JqZWN0czsKKyAgICAgICAgICBkYnVzX21lc3NhZ2VfaXRlcl9yZWN1cnNlKCZhcmdzLCAmb2JqZWN0cyk7CisKKyAgICAgICAgICB3aGlsZSAoZGJ1c19tZXNzYWdlX2l0ZXJfZ2V0X2FyZ190eXBlKCZvYmplY3RzKSA9PSBEQlVTX1RZUEVfRElDVF9FTlRSWSkgeworICAgICAgICAgICAgREJ1c01lc3NhZ2VJdGVyIG9iamVjdDsKKyAgICAgICAgICAgIGRidXNfbWVzc2FnZV9pdGVyX3JlY3Vyc2UoJm9iamVjdHMsICZvYmplY3QpOworCisgICAgICAgICAgICBpZiAoZGJ1c19tZXNzYWdlX2l0ZXJfZ2V0X2FyZ190eXBlKCZvYmplY3QpID09IERCVVNfVFlQRV9PQkpFQ1RfUEFUSCkgeworICAgICAgICAgICAgICAvLyBEQnVzIHBhdGggdG8gdGFsayB0byB0aGlzIG9iamVjdAorICAgICAgICAgICAgICBkYnVzX21lc3NhZ2VfaXRlcl9uZXh0KCZvYmplY3QpOworCisgICAgICAgICAgICAgIGlmIChkYnVzX21lc3NhZ2VfaXRlcl9nZXRfYXJnX3R5cGUoJm9iamVjdCkgPT0gREJVU19UWVBFX0FSUkFZKSB7CisgICAgICAgICAgICAgICAgREJ1c01lc3NhZ2VJdGVyIGludGVyZmFjZXM7CisgICAgICAgICAgICAgICAgZGJ1c19tZXNzYWdlX2l0ZXJfcmVjdXJzZSgmb2JqZWN0LCAmaW50ZXJmYWNlcyk7CisKKyAgICAgICAgICAgICAgICB3aGlsZSAoZGJ1c19tZXNzYWdlX2l0ZXJfZ2V0X2FyZ190eXBlKCZpbnRlcmZhY2VzKSA9PSBEQlVTX1RZUEVfRElDVF9FTlRSWSkgeworICAgICAgICAgICAgICAgICAgREJ1c01lc3NhZ2VJdGVyIGludGVyZmFjZTsKKyAgICAgICAgICAgICAgICAgIGRidXNfbWVzc2FnZV9pdGVyX3JlY3Vyc2UoJmludGVyZmFjZXMsICZpbnRlcmZhY2UpOworCisgICAgICAgICAgICAgICAgICBpZiAoZGJ1c19tZXNzYWdlX2l0ZXJfZ2V0X2FyZ190eXBlKCZpbnRlcmZhY2UpID09IERCVVNfVFlQRV9TVFJJTkcpIHsKKyAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqaW50ZXJmYWNlTmFtZTsKKyAgICAgICAgICAgICAgICAgICAgZGJ1c19tZXNzYWdlX2l0ZXJfZ2V0X2Jhc2ljKCZpbnRlcmZhY2UsICZpbnRlcmZhY2VOYW1lKTsKKworICAgICAgICAgICAgICAgICAgICBpZiAoc3RyY21wKGludGVyZmFjZU5hbWUsICJvcmcuYmx1ZXouRGV2aWNlMSIpID09IDApIHsKKyAgICAgICAgICAgICAgICAgICAgICBkYnVzX21lc3NhZ2VfaXRlcl9uZXh0KCZpbnRlcmZhY2UpOworCisgICAgICAgICAgICAgICAgICAgICAgaWYgKGRidXNfbWVzc2FnZV9pdGVyX2dldF9hcmdfdHlwZSgmaW50ZXJmYWNlKSA9PSBEQlVTX1RZUEVfQVJSQVkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIERpc2NvdmVyZWRCbHVldG9vdGhEZXZpY2UgZGV2aWNlOworICAgICAgICAgICAgICAgICAgICAgICAgbWVtc2V0KCZkZXZpY2UsIDAsIHNpemVvZihkZXZpY2UpKTsKKworICAgICAgICAgICAgICAgICAgICAgICAgREJ1c01lc3NhZ2VJdGVyIHByb3BlcnRpZXM7CisgICAgICAgICAgICAgICAgICAgICAgICBkYnVzX21lc3NhZ2VfaXRlcl9yZWN1cnNlKCZpbnRlcmZhY2UsICZwcm9wZXJ0aWVzKTsKKworICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKERCVVNfVFlQRV9ESUNUX0VOVFJZID09IGRidXNfbWVzc2FnZV9pdGVyX2dldF9hcmdfdHlwZSgmcHJvcGVydGllcykpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgREJ1c01lc3NhZ2VJdGVyIHByb3BlcnR5OworICAgICAgICAgICAgICAgICAgICAgICAgICBkYnVzX21lc3NhZ2VfaXRlcl9yZWN1cnNlKCZwcm9wZXJ0aWVzLCAmcHJvcGVydHkpOworCisgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkYnVzX21lc3NhZ2VfaXRlcl9nZXRfYXJnX3R5cGUoJnByb3BlcnR5KSA9PSBEQlVTX1RZUEVfU1RSSU5HKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqcHJvcGVydHlOYW1lOworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGJ1c19tZXNzYWdlX2l0ZXJfZ2V0X2Jhc2ljKCZwcm9wZXJ0eSwgJnByb3BlcnR5TmFtZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGJ1c19tZXNzYWdlX2l0ZXJfbmV4dCgmcHJvcGVydHkpOworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRidXNfbWVzc2FnZV9pdGVyX2dldF9hcmdfdHlwZSgmcHJvcGVydHkpID09IERCVVNfVFlQRV9WQVJJQU5UKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEQnVzTWVzc2FnZUl0ZXIgdmFyaWFudDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRidXNfbWVzc2FnZV9pdGVyX3JlY3Vyc2UoJnByb3BlcnR5LCAmdmFyaWFudCk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoc3RyY21wKHByb3BlcnR5TmFtZSwgIkFkZHJlc3MiKSA9PSAwKSAmJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChkYnVzX21lc3NhZ2VfaXRlcl9nZXRfYXJnX3R5cGUoJnZhcmlhbnQpID09IERCVVNfVFlQRV9TVFJJTkcpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmFkZHJlc3M7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRidXNfbWVzc2FnZV9pdGVyX2dldF9iYXNpYygmdmFyaWFudCwgJmFkZHJlc3MpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidGhQYXJzZUFkZHJlc3MoJmRldmljZS5hZGRyZXNzLCBhZGRyZXNzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoKHN0cmNtcChwcm9wZXJ0eU5hbWUsICJOYW1lIikgPT0gMCkgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGRidXNfbWVzc2FnZV9pdGVyX2dldF9hcmdfdHlwZSgmdmFyaWFudCkgPT0gREJVU19UWVBFX1NUUklORykpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqbmFtZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGJ1c19tZXNzYWdlX2l0ZXJfZ2V0X2Jhc2ljKCZ2YXJpYW50LCAmbmFtZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRldmljZS5uYW1lID0gbmFtZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoKHN0cmNtcChwcm9wZXJ0eU5hbWUsICJQYWlyZWQiKSA9PSAwKSAmJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZGJ1c19tZXNzYWdlX2l0ZXJfZ2V0X2FyZ190eXBlKCZ2YXJpYW50KSA9PSBEQlVTX1RZUEVfQk9PTEVBTikpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGJ1c19ib29sX3QgcGFpcmVkOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYnVzX21lc3NhZ2VfaXRlcl9nZXRfYmFzaWMoJnZhcmlhbnQsICZwYWlyZWQpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXZpY2UucGFpcmVkID0gcGFpcmVkID09IFRSVUU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZGJ1c19tZXNzYWdlX2l0ZXJfbmV4dCgmcHJvcGVydGllcyk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkZXZpY2UuYWRkcmVzcykgeworICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGVzdERldmljZSgmZGV2aWNlLCBkYXRhKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvdW5kID0gMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICBpZiAoZm91bmQpIGJyZWFrOworICAgICAgICAgICAgICAgICAgZGJ1c19tZXNzYWdlX2l0ZXJfbmV4dCgmaW50ZXJmYWNlcyk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChmb3VuZCkgYnJlYWs7CisgICAgICAgICAgICBkYnVzX21lc3NhZ2VfaXRlcl9uZXh0KCZvYmplY3RzKTsKKyAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBkYnVzX21lc3NhZ2VfdW5yZWYobWFuYWdlZE9iamVjdHMpOworICAgICAgICBtYW5hZ2VkT2JqZWN0cyA9IE5VTEw7CisgICAgICB9CisgICAgfQorCisgICAgZGJ1c19jb25uZWN0aW9uX3VucmVmKGJ1cyk7CisgICAgYnVzID0gTlVMTDsKKyAgfQorI2VuZGlmIC8qIEhBVkVfUEtHX0RCVVMgKi8KK30KZGlmZiAtLWdpdCBhL1Byb2dyYW1zL2JsdWV0b290aF9uYW1lcy5jIGIvUHJvZ3JhbXMvYmx1ZXRvb3RoX25hbWVzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDg1MWIyYwotLS0gL2Rldi9udWxsCisrKyBiL1Byb2dyYW1zL2JsdWV0b290aF9uYW1lcy5jCkBAIC0wLDAgKzEsMTcyIEBACisvKgorICogQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyAqICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyAqCisgKiBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorICoKKyAqIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyAqCisgKiBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisgKi8KKworI2luY2x1ZGUgInByb2xvZ3VlLmgiCisKKyNpbmNsdWRlICJibHVldG9vdGhfaW50ZXJuYWwuaCIKKworI2RlZmluZSBCTFVFVE9PVEhfTkFNRV9FTlRSWShuYW1lLC4uLikgeyBcCisgIC5uYW1lUHJlZml4ID0gbmFtZSwgXAorICAuZHJpdmVyQ29kZXMgPSBOVUxMX1RFUk1JTkFURURfU1RSSU5HX0FSUkFZKF9fVkFfQVJHU19fKSBcCit9CisKK2NvbnN0IEJsdWV0b290aE5hbWVFbnRyeSBibHVldG9vdGhOYW1lVGFibGVbXSA9IHsKKyAgLy8gSGFuZHlUZWNoOiBBY3RpbGlubworICBCTFVFVE9PVEhfTkFNRV9FTlRSWSgiQWN0aWxpbm8gQUxPIiwgImh0IiksCisKKyAgLy8gSGFuZHlUZWNoOiBBY3RpdmF0b3IKKyAgQkxVRVRPT1RIX05BTUVfRU5UUlkoIkFjdGl2YXRvciBBQzQiLCAiaHQiKSwKKworICAvLyBIYW5keVRlY2g6IEFjdGl2ZSBCcmFpbGxlCisgIEJMVUVUT09USF9OQU1FX0VOVFJZKCJBY3RpdmUgQnJhaWxsZSBBQiIsICJodCIpLAorCisgIC8vIEhhbmR5VGVjaDogQWN0aXZlIFN0YXIKKyAgQkxVRVRPT1RIX05BTUVfRU5UUlkoIkFjdGl2ZSBTdGFyIEFTIiwgImh0IiksCisKKyAgLy8gQWx2YTogQmFzaWMgQ29udHJvbGxlciAoNm5uKQorICBCTFVFVE9PVEhfTkFNRV9FTlRSWSgiQUxWQSBCQyIsICJhbCIpLAorCisgIC8vIEh1bWFuV2FyZTogQVBIIENoYW1lbGVvbgorICBCTFVFVE9PVEhfTkFNRV9FTlRSWSgiQVBIIENoYW1lbGVvbiIsICJodyIpLAorCisgIC8vIEh1bWFuV2FyZTogQVBIIE1hbnRpcworICBCTFVFVE9PVEhfTkFNRV9FTlRSWSgiQVBIIE1hbnRpcyIsICJodyIpLAorCisgIC8vIEhhbmR5VGVjaDogQmFzaWMgQnJhaWxsZQorICBCTFVFVE9PVEhfTkFNRV9FTlRSWSgiQmFzaWMgQnJhaWxsZSBCQiIsICJodCIpLAorCisgIC8vIEhhbmR5VGVjaDogQmFzaWMgQnJhaWxsZSBQbHVzCisgIEJMVUVUT09USF9OQU1FX0VOVFJZKCJCYXNpYyBCcmFpbGxlIFBsdXMgQlAiLCAiaHQiKSwKKworICAvLyBCYXVtOiBDb25ueQorICBCTFVFVE9PVEhfTkFNRV9FTlRSWSgiQkFVTSBDb25ueSIsICJibSIpLAorCisgIC8vIEJhdW06IFBvY2tldCBWYXJpbworICBCTFVFVE9PVEhfTkFNRV9FTlRSWSgiQmF1bSBQb2NrZXRWYXJpbyIsICJibSIpLAorCisgIC8vIEJhdW06IFN1cGVyIFZhcmlvCisgIEJMVUVUT09USF9OQU1FX0VOVFJZKCJCYXVtIFN1cGVyVmFyaW8iLCAiYm0iKSwKKworICAvLyBCYXVtOiBTdXBlciBWYXJpbworICBCTFVFVE9PVEhfTkFNRV9FTlRSWSgiQmF1bSBTVmFyaW8iLCAiYm0iKSwKKworICAvLyBCYXVtOiBCcmFpbGxlIENvbm5lY3QKKyAgQkxVRVRPT1RIX05BTUVfRU5UUlkoIkJyYWlsbGVDb25uZWN0IiwgImJtIiksCisKKyAgLy8gSElNUzogQnJhaWxsZSBFZGdlCisgIEJMVUVUT09USF9OQU1FX0VOVFJZKCJCcmFpbGxlRURHRSIsICJobSIpLAorCisgIC8vIEluY2VwdG9yOiBCcmFpbGxlIE1lCisgIEJMVUVUT09USF9OQU1FX0VOVFJZKCJCcmFpbGxlTWUiLCAiaWMiKSwKKworICAvLyBLR1M6IEJyYWlsbGUgTWVtbyBQb2NrZXQKKyAgQkxVRVRPT1RIX05BTUVfRU5UUlkoIkJNcGsiLCAibW0iKSwKKworICAvLyBLR1M6IEJyYWlsbGUgTWVtbyBTbWFydAorICBCTFVFVE9PVEhfTkFNRV9FTlRSWSgiQk1zbWFydCIsICJtbSIpLAorCisgIC8vIEtHUzogQnJhaWxsZSBNZW1vIDMyCisgIEJMVUVUT09USF9OQU1FX0VOVFJZKCJCTTMyIiwgIm1tIiksCisKKyAgLy8gSHVtYW5XYXJlOiBCcmFpbGxlIE5vdGUgVG91Y2gKKyAgQkxVRVRPT1RIX05BTUVfRU5UUlkoIkJyYWlsbGVOb3RlIFRvdWNoIiwgImh3IiksCisKKyAgLy8gSElNUzogQnJhaWxsZSBTZW5zZQorICBCTFVFVE9PVEhfTkFNRV9FTlRSWSgiQnJhaWxsZVNlbnNlIiwgImhtIiksCisKKyAgLy8gSGFuZHlUZWNoOiBCcmFpbGxlIFN0YXIKKyAgQkxVRVRPT1RIX05BTUVfRU5UUlkoIkJyYWlsbGUgU3RhciIsICJodCIpLAorCisgIC8vIFBhcGVubWVpZXIKKyAgQkxVRVRPT1RIX05BTUVfRU5UUlkoIkJyYWlsbGV4IiwgInBtIiksCisKKyAgLy8gSHVtYW5XYXJlOiBCcmFpbGxpYW50IEJJCisgIEJMVUVUT09USF9OQU1FX0VOVFJZKCJCcmFpbGxpYW50IEJJIiwgImh3IiksCisKKyAgLy8gSHVtYW5XYXJlOiBCcmFpbGxpYW50IEJJIDE0CisgIEJMVUVUT09USF9OQU1FX0VOVFJZKCJCcmFpbGxpYW50IDE0IiwgImh3IiksCisKKyAgLy8gSHVtYW5XYXJlOiBCcmFpbGxpYW50IEIgODAKKyAgQkxVRVRPT1RIX05BTUVfRU5UUlkoIkJyYWlsbGlhbnQgODAiLCAiaHciKSwKKworICAvLyBIYW5keVRlY2g6IEJyYWlsbGlubworICBCTFVFVE9PVEhfTkFNRV9FTlRSWSgiQnJhaWxsaW5vIEJMIiwgImh0IiksCisKKyAgLy8gTmF0aW9uYWwgQnJhaWxsZSBQcmVzczogQjJHCisgIEJMVUVUT09USF9OQU1FX0VOVFJZKCJCMkciLCAiYm0iKSwKKworICAvLyBCYXVtOiBDb25ueQorICBCTFVFVE9PVEhfTkFNRV9FTlRSWSgiQ29ubnkiLCAiYm0iKSwKKworICAvLyBEb3RQYWQKKyAgQkxVRVRPT1RIX05BTUVfRU5UUlkoIkRvdFBhZCIsICJkcCIpLAorCisgIC8vIEhhbmR5VGVjaDogRWFzeSBCcmFpbGxlCisgIEJMVUVUT09USF9OQU1FX0VOVFJZKCJFYXN5IEJyYWlsbGUgRUJSIiwgImh0IiksCisKKyAgLy8gQWx2YTogRUwxMgorICAvLyBIYXJwbzogQnJhaWxsZSBQZW4KKyAgQkxVRVRPT1RIX05BTUVfRU5UUlkoIkVMMTItIiwgImFsIiwgInZvIiksCisKKyAgLy8gRXVyb0JyYWlsbGUKKyAgQkxVRVRPT1RIX05BTUVfRU5UUlkoIkVzeXMtIiwgImV1IiksCisKKyAgLy8gRnJlZWRvbSBTY2llbnRpZmljOiBGb2N1cworICBCTFVFVE9PVEhfTkFNRV9FTlRSWSgiRm9jdXMiLCAiZnMiKSwKKworICAvLyBIdW1hbldhcmU6IEJyYWlsbGVPbmUKKyAgQkxVRVRPT1RIX05BTUVfRU5UUlkoIkh1bWFud2FyZSBCcmFpbGxlT25lIiwgImh3IiksCisKKyAgLy8gSHVtYW5XYXJlOiBCcmFpbGxpYW50CisgIEJMVUVUT09USF9OQU1FX0VOVFJZKCJIV0cgQnJhaWxsaWFudCIsICJibSIpLAorCisgIC8vIE1EVgorICBCTFVFVE9PVEhfTkFNRV9FTlRSWSgiTUIyNDgiLCAibWQiKSwKKworICAvLyBOTFMgZVJlYWRlcjogSHVtYW5XYXJlCisgIEJMVUVUT09USF9OQU1FX0VOVFJZKCJOTFMgZVJlYWRlciBIIiwgImh3IiksCisKKyAgLy8gTkxTIGVSZWFkZXI6IFpvb21heAorICBCTFVFVE9PVEhfTkFNRV9FTlRSWSgiTkxTIGVSZWFkZXIgWiIsICJibSIpLAorCisgIC8vIEFtZXJpY2FuIFByaW50aW5nIEhvdXNlOiBPcmJpdCBSZWFkZXIKKyAgQkxVRVRPT1RIX05BTUVfRU5UUlkoIk9yYml0IFJlYWRlciIsICJibSIpLAorCisgIC8vIEJhdW06IFByb250byEKKyAgQkxVRVRPT1RIX05BTUVfRU5UUlkoIlByb250byEiLCAiYm0iKSwKKworICAvLyBBbWVyaWNhbiBQcmludGluZyBIb3VzZTogUmVmcmVzaGFicmFpbGxlCisgIEJMVUVUT09USF9OQU1FX0VOVFJZKCJSZWZyZXNoYWJyYWlsbGUiLCAiYm0iKSwKKworICAvLyBISU1TOiBTbWFydCBCZWV0bGUKKyAgQkxVRVRPT1RIX05BTUVfRU5UUlkoIlNtYXJ0QmVldGxlIiwgImhtIiksCisKKyAgLy8gQmF1bTogU3VwZXIgVmFyaW8KKyAgQkxVRVRPT1RIX05BTUVfRU5UUlkoIlN1cGVyVmFyaW8iLCAiYm0iKSwKKworICAvLyBTZWlrYTogTm90ZSBUYWtlcgorICBCTFVFVE9PVEhfTkFNRV9FTlRSWSgiVFNNIiwgInNrIiksCisKKyAgLy8gQmF1bTogVmFyaW8gQ29ubmVjdAorICBCTFVFVE9PVEhfTkFNRV9FTlRSWSgiVmFyaW9Db25uZWN0IiwgImJtIiksCisKKyAgLy8gQmF1bTogVmFyaW8gVWx0cmEKKyAgQkxVRVRPT1RIX05BTUVfRU5UUlkoIlZhcmlvVWx0cmEiLCAiYm0iKSwKKworICB7IC5uYW1lUHJlZml4ID0gTlVMTCB9Cit9OwpkaWZmIC0tZ2l0IGEvUHJvZ3JhbXMvYmx1ZXRvb3RoX25vbmUuYyBiL1Byb2dyYW1zL2JsdWV0b290aF9ub25lLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzJmZjllNQotLS0gL2Rldi9udWxsCisrKyBiL1Byb2dyYW1zL2JsdWV0b290aF9ub25lLmMKQEAgLTAsMCArMSw5OSBAQAorLyoKKyAqIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisgKiAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisgKgorICogQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKKyNpbmNsdWRlICJwcm9sb2d1ZS5oIgorCisjaW5jbHVkZSA8ZXJybm8uaD4KKworI2luY2x1ZGUgImlvX2JsdWV0b290aC5oIgorI2luY2x1ZGUgImJsdWV0b290aF9pbnRlcm5hbC5oIgorI2luY2x1ZGUgImxvZy5oIgorCitCbHVldG9vdGhDb25uZWN0aW9uRXh0ZW5zaW9uICoKK2J0aE5ld0Nvbm5lY3Rpb25FeHRlbnNpb24gKHVpbnQ2NF90IGJkYSkgeworICBsb2dVbnN1cHBvcnRlZEZ1bmN0aW9uKCk7CisgIHJldHVybiBOVUxMOworfQorCit2b2lkCitidGhSZWxlYXNlQ29ubmVjdGlvbkV4dGVuc2lvbiAoQmx1ZXRvb3RoQ29ubmVjdGlvbkV4dGVuc2lvbiAqYmN4KSB7Cit9CisKK2ludAorYnRoT3BlbkNoYW5uZWwgKEJsdWV0b290aENvbm5lY3Rpb25FeHRlbnNpb24gKmJjeCwgdWludDhfdCBjaGFubmVsLCBpbnQgdGltZW91dCkgeworICBsb2dVbnN1cHBvcnRlZEZ1bmN0aW9uKCk7CisgIHJldHVybiAwOworfQorCitpbnQKK2J0aERpc2NvdmVyQ2hhbm5lbCAoCisgIHVpbnQ4X3QgKmNoYW5uZWwsIEJsdWV0b290aENvbm5lY3Rpb25FeHRlbnNpb24gKmJjeCwKKyAgY29uc3Qgdm9pZCAqdXVpZEJ5dGVzLCBzaXplX3QgdXVpZExlbmd0aCwKKyAgaW50IHRpbWVvdXQKKykgeworICBsb2dVbnN1cHBvcnRlZEZ1bmN0aW9uKCk7CisgIHJldHVybiAwOworfQorCitCbHVldG9vdGhDb25uZWN0aW9uRXh0ZW5zaW9uICoKK2J0aENvbm5lY3QgKHVpbnQ2NF90IGJkYSwgdWludDhfdCBjaGFubmVsLCBpbnQgZGlzY292ZXIsIGludCB0aW1lb3V0KSB7CisgIGxvZ1Vuc3VwcG9ydGVkRnVuY3Rpb24oKTsKKyAgcmV0dXJuIE5VTEw7Cit9CisKK3ZvaWQKK2J0aERpc2Nvbm5lY3QgKEJsdWV0b290aENvbm5lY3Rpb25FeHRlbnNpb24gKmJjeCkgeworfQorCitpbnQKK2J0aE1vbml0b3JJbnB1dCAoQmx1ZXRvb3RoQ29ubmVjdGlvbiAqY29ubmVjdGlvbiwgQXN5bmNNb25pdG9yQ2FsbGJhY2sgKmNhbGxiYWNrLCB2b2lkICpkYXRhKSB7CisgIHJldHVybiAwOworfQorCitpbnQKK2J0aFBvbGxJbnB1dCAoQmx1ZXRvb3RoQ29ubmVjdGlvbkV4dGVuc2lvbiAqYmN4LCBpbnQgdGltZW91dCkgeworICBsb2dVbnN1cHBvcnRlZEZ1bmN0aW9uKCk7CisgIHJldHVybiAwOworfQorCitzc2l6ZV90CitidGhHZXREYXRhICgKKyAgQmx1ZXRvb3RoQ29ubmVjdGlvbkV4dGVuc2lvbiAqYmN4LCB2b2lkICpidWZmZXIsIHNpemVfdCBzaXplLAorICBpbnQgaW5pdGlhbFRpbWVvdXQsIGludCBzdWJzZXF1ZW50VGltZW91dAorKSB7CisgIGxvZ1Vuc3VwcG9ydGVkRnVuY3Rpb24oKTsKKyAgcmV0dXJuIC0xOworfQorCitzc2l6ZV90CitidGhQdXREYXRhIChCbHVldG9vdGhDb25uZWN0aW9uRXh0ZW5zaW9uICpiY3gsIGNvbnN0IHZvaWQgKmJ1ZmZlciwgc2l6ZV90IHNpemUpIHsKKyAgbG9nVW5zdXBwb3J0ZWRGdW5jdGlvbigpOworICByZXR1cm4gLTE7Cit9CisKK2NoYXIgKgorYnRoT2J0YWluRGV2aWNlTmFtZSAodWludDY0X3QgYmRhLCBpbnQgdGltZW91dCkgeworICBlcnJubyA9IEVOT1NZUzsKKyAgcmV0dXJuIE5VTEw7Cit9CisKK3ZvaWQKK2J0aFByb2Nlc3NEaXNjb3ZlcmVkRGV2aWNlcyAoCisgIERpc2NvdmVyZWRCbHVldG9vdGhEZXZpY2VUZXN0ZXIgKnRlc3REZXZpY2UsIHZvaWQgKmRhdGEKKykgeworfQpkaWZmIC0tZ2l0IGEvUHJvZ3JhbXMvYmx1ZXRvb3RoX3dpbmRvd3MuYyBiL1Byb2dyYW1zL2JsdWV0b290aF93aW5kb3dzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzEyNDM1NQotLS0gL2Rldi9udWxsCisrKyBiL1Byb2dyYW1zL2JsdWV0b290aF93aW5kb3dzLmMKQEAgLTAsMCArMSw0NzkgQEAKKy8qCisgKiBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorICogICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorICoKKyAqIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorICoKKyAqIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyAqLworCisjZGVmaW5lIF9XSU4zMl9XSU5OVCBfV0lOMzJfV0lOTlRfVklTVEEKKyNkZWZpbmUgX19VU0VfVzMyX1NPQ0tFVFMKKworI3ByYWdtYSBwYWNrKHB1c2gsMikKKyNpbmNsdWRlIDx3aW5zb2NrMi5oPgorI2luY2x1ZGUgPHdzMmJ0aC5oPgorI2luY2x1ZGUgPG5zcGFwaS5oPgorI3ByYWdtYSBwYWNrKHBvcCkKKworI2luY2x1ZGUgInByb2xvZ3VlLmgiCisKKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorCisjaWYgZGVmaW5lZChBRl9CVEgpCisjaWZuZGVmIFBGX0JUSAorI2RlZmluZSBQRl9CVEggQUZfQlRICisjZW5kaWYgLyogUEZfQlRIICovCisKKyNlbGlmIGRlZmluZWQoUEZfQlRIKQorI2lmbmRlZiBBRl9CVEgKKyNkZWZpbmUgQUZfQlRIIFBGX0JUSAorI2VuZGlmIC8qIEFGX0JUSCAqLworCisjZWxzZSAvKiBibHVldG9vdGggYWRkcmVzcy9wcm90b2NvbCBmYW1pbHkgZGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgQUZfQlRIIDMyCisjZGVmaW5lIFBGX0JUSCBBRl9CVEgKKyN3YXJuaW5nIHVzaW5nIGhhcmQtY29kZWQgdmFsdWUgZm9yIEJsdWV0b290aCBzb2NrZXQgYWRkcmVzcyBhbmQgcHJvdG9jb2wgZmFtaWx5IGNvbnN0YW50cworI2VuZGlmIC8qIGJsdWV0b290aCBhZGRyZXNzL3Byb3RvY29sIGZhbWlseSBkZWZpbml0aW9ucyAqLworCisjaWZuZGVmIE5TX0JUSAorI2RlZmluZSBOU19CVEggMTYKKyN3YXJuaW5nIHVzaW5nIGhhcmQtY29kZWQgdmFsdWUgZm9yIEJsdWV0b290aCBuYW1lc3BhY2UgY29uc3RhbnQKKyNlbmRpZiAvKiBOU19CVEggKi8KKworI2lmIGRlZmluZWQoX19DWUdXSU5fXykgJiYgIWRlZmluZWQoX19DWUdXSU4zMl9fKQorI2RlZmluZSBJT0NUTFNPQ0tFVF9BUkdVTUVOVF9UWVBFIHVuc2lnbmVkIGludAorI2Vsc2UgLyogaW9jdGxjb250cm9sIGFyZ3VtZW50IHR5cGUgKi8KKyNkZWZpbmUgSU9DVExTT0NLRVRfQVJHVU1FTlRfVFlQRSB1X2xvbmcKKyNlbmRpZiAvKiBpb2N0bGNvbnRyb2wgYXJndW1lbnQgdHlwZSAqLworCisjaW5jbHVkZSAibG9nLmgiCisjaW5jbHVkZSAidGltaW5nLmgiCisjaW5jbHVkZSAiYml0ZmllbGQuaCIKKyNpbmNsdWRlICJpb19ibHVldG9vdGguaCIKKyNpbmNsdWRlICJibHVldG9vdGhfaW50ZXJuYWwuaCIKKworc3RydWN0IEJsdWV0b290aENvbm5lY3Rpb25FeHRlbnNpb25TdHJ1Y3QgeworICBTT0NLRVQgc29ja2V0OworICBTT0NLQUREUl9CVEggbG9jYWw7CisgIFNPQ0tBRERSX0JUSCByZW1vdGU7Cit9OworCitzdGF0aWMgdm9pZAorYnRoU2V0RXJybm8gKERXT1JEIGVycm9yLCBjb25zdCBjaGFyICphY3Rpb24sIGNvbnN0IERXT1JEICpleGNlcHRpb25zKSB7CisgIGlmIChleGNlcHRpb25zKSB7CisgICAgY29uc3QgRFdPUkQgKmV4Y2VwdGlvbiA9IGV4Y2VwdGlvbnM7CisKKyAgICB3aGlsZSAoKmV4Y2VwdGlvbiAhPSBOT19FUlJPUikgeworICAgICAgaWYgKGVycm9yID09ICpleGNlcHRpb24pIGdvdG8gaXNFeGNlcHRpb247CisgICAgICBleGNlcHRpb24gKz0gMTsKKyAgICB9CisgIH0KKworICBsb2dXaW5kb3dzRXJyb3IoZXJyb3IsIGFjdGlvbik7Citpc0V4Y2VwdGlvbjoKKyAgc2V0RXJybm8oZXJyb3IpOworfQorCitzdGF0aWMgRFdPUkQKK2J0aFNvY2tldEVycm9yIChjb25zdCBjaGFyICphY3Rpb24sIGNvbnN0IERXT1JEICpleGNlcHRpb25zKSB7CisgIERXT1JEIGVycm9yID0gV1NBR2V0TGFzdEVycm9yKCk7CisKKyAgYnRoU2V0RXJybm8oZXJyb3IsIGFjdGlvbiwgZXhjZXB0aW9ucyk7CisgIHJldHVybiBlcnJvcjsKK30KKworc3RhdGljIGludAorYnRoU3RhcnRTb2NrZXRzICh2b2lkKSB7CisgIFdTQURBVEEgd3NhOworICBpbnQgcmVzdWx0ID0gV1NBU3RhcnR1cChNQUtFV09SRCgyLCAyKSwgJndzYSk7CisKKyAgaWYgKCFyZXN1bHQpIHJldHVybiAxOworICBidGhTZXRFcnJubyhyZXN1bHQsICJXU0Egc3RhcnR1cCIsIE5VTEwpOworICByZXR1cm4gMDsKK30KKworQmx1ZXRvb3RoQ29ubmVjdGlvbkV4dGVuc2lvbiAqCitidGhOZXdDb25uZWN0aW9uRXh0ZW5zaW9uICh1aW50NjRfdCBiZGEpIHsKKyAgQmx1ZXRvb3RoQ29ubmVjdGlvbkV4dGVuc2lvbiAqYmN4OworCisgIGlmICgoYmN4ID0gbWFsbG9jKHNpemVvZigqYmN4KSkpKSB7CisgICAgbWVtc2V0KGJjeCwgMCwgc2l6ZW9mKCpiY3gpKTsKKworICAgIGJjeC0+bG9jYWwuYWRkcmVzc0ZhbWlseSA9IEFGX0JUSDsKKyAgICBiY3gtPmxvY2FsLmJ0QWRkciA9IEJUSF9BRERSX05VTEw7CisgICAgYmN4LT5sb2NhbC5wb3J0ID0gMDsKKworICAgIGJjeC0+cmVtb3RlLmFkZHJlc3NGYW1pbHkgPSBBRl9CVEg7CisgICAgYmN4LT5yZW1vdGUuYnRBZGRyID0gYmRhOworICAgIGJjeC0+cmVtb3RlLnBvcnQgPSAwOworCisgICAgYmN4LT5zb2NrZXQgPSBJTlZBTElEX1NPQ0tFVDsKKyAgICByZXR1cm4gYmN4OworICB9IGVsc2UgeworICAgIGxvZ01hbGxvY0Vycm9yKCk7CisgIH0KKworICByZXR1cm4gTlVMTDsKK30KKwordm9pZAorYnRoUmVsZWFzZUNvbm5lY3Rpb25FeHRlbnNpb24gKEJsdWV0b290aENvbm5lY3Rpb25FeHRlbnNpb24gKmJjeCkgeworICBpZiAoYmN4LT5zb2NrZXQgIT0gSU5WQUxJRF9TT0NLRVQpIHsKKyAgICBjbG9zZXNvY2tldChiY3gtPnNvY2tldCk7CisgICAgYmN4LT5zb2NrZXQgPSBJTlZBTElEX1NPQ0tFVDsKKyAgfQorCisgIGZyZWUoYmN4KTsKK30KKworaW50CitidGhPcGVuQ2hhbm5lbCAoQmx1ZXRvb3RoQ29ubmVjdGlvbkV4dGVuc2lvbiAqYmN4LCB1aW50OF90IGNoYW5uZWwsIGludCB0aW1lb3V0KSB7CisgIGJjeC0+cmVtb3RlLnBvcnQgPSBjaGFubmVsOworCisgIGlmIChidGhTdGFydFNvY2tldHMoKSkgeworICAgIGlmICgoYmN4LT5zb2NrZXQgPSBzb2NrZXQoUEZfQlRILCBTT0NLX1NUUkVBTSwgQlRIUFJPVE9fUkZDT01NKSkgIT0gSU5WQUxJRF9TT0NLRVQpIHsKKyAgICAgIGlmIChiaW5kKGJjeC0+c29ja2V0LCAoU09DS0FERFIgKikmYmN4LT5sb2NhbCwgc2l6ZW9mKGJjeC0+bG9jYWwpKSAhPSBTT0NLRVRfRVJST1IpIHsKKyAgICAgICAgaWYgKGNvbm5lY3QoYmN4LT5zb2NrZXQsIChTT0NLQUREUiAqKSZiY3gtPnJlbW90ZSwgc2l6ZW9mKGJjeC0+cmVtb3RlKSkgIT0gU09DS0VUX0VSUk9SKSB7CisgICAgICAgICAgSU9DVExTT0NLRVRfQVJHVU1FTlRfVFlQRSBub25ibG9ja2luZyA9IDE7CisKKyAgICAgICAgICBpZiAoaW9jdGxzb2NrZXQoYmN4LT5zb2NrZXQsIEZJT05CSU8sICZub25ibG9ja2luZykgIT0gU09DS0VUX0VSUk9SKSB7CisgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgYnRoU29ja2V0RXJyb3IoIlJGQ09NTSBub25ibG9ja2luZyIsIE5VTEwpOworICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICBzdGF0aWMgY29uc3QgRFdPUkQgZXhjZXB0aW9uc1tdID0geworICAgICAgICAgICAgRVJST1JfSE9TVF9ET1dOLAorICAgICAgICAgICAgRVJST1JfSE9TVF9VTlJFQUNIQUJMRSwKKyAgICAgICAgICAgIE5PX0VSUk9SCisgICAgICAgICAgfTsKKworICAgICAgICAgIGJ0aFNvY2tldEVycm9yKCJSRkNPTU0gY29ubmVjdCIsIGV4Y2VwdGlvbnMpOworICAgICAgICB9CisgICAgICB9IGVsc2UgeworICAgICAgICBidGhTb2NrZXRFcnJvcigiUkZDT01NIGJpbmQiLCBOVUxMKTsKKyAgICAgIH0KKworICAgICAgY2xvc2Vzb2NrZXQoYmN4LT5zb2NrZXQpOworICAgICAgYmN4LT5zb2NrZXQgPSBJTlZBTElEX1NPQ0tFVDsKKyAgICB9IGVsc2UgeworICAgICAgYnRoU29ja2V0RXJyb3IoIlJGQ09NTSBzb2NrZXQiLCBOVUxMKTsKKyAgICB9CisgIH0KKworICByZXR1cm4gMDsKK30KKwordHlwZWRlZiB1bmlvbiB7CisgIGRvdWJsZSBlbnN1cmVDb3JyZWN0QWxpZ25tZW50OworICB1bnNpZ25lZCBjaGFyIGVuc3VyZUFkZXF1YXRlU2l6ZVswWDEwMDBdOworICBXU0FRVUVSWVNFVCBxdWVyeVNldDsKK30gQmx1ZXRvb3RoU2VydmljZUxvb2t1cFJlc3VsdDsKKworc3RhdGljIGludAorYnRoUGVyZm9ybVNlcnZpY2VMb29rdXAgKAorICBCbHVldG9vdGhTZXJ2aWNlTG9va3VwUmVzdWx0ICpyZXN1bHQsCisgIFVMT05HTE9ORyBhZGRyZXNzLCBHVUlEICpndWlkLAorICBEV09SRCBiZWdpbkZsYWdzLCBEV09SRCBuZXh0RmxhZ3MKKykgeworICBpbnQgZm91bmQgPSAwOworCisgIGlmIChidGhTdGFydFNvY2tldHMoKSkgeworICAgIFNPQ0tBRERSX0JUSCBzb2NrZXRBZGRyZXNzID0geworICAgICAgLmFkZHJlc3NGYW1pbHkgPSBBRl9CVEgsCisgICAgICAuYnRBZGRyID0gYWRkcmVzcworICAgIH07CisKKyAgICBjaGFyIGFkZHJlc3NTdHJpbmdbMFgxMDBdOworICAgIERXT1JEIGFkZHJlc3NMZW5ndGggPSBzaXplb2YoYWRkcmVzc1N0cmluZyk7CisKKyAgICBpZiAoV1NBQWRkcmVzc1RvU3RyaW5nKChTT0NLQUREUiAqKSZzb2NrZXRBZGRyZXNzLCBzaXplb2Yoc29ja2V0QWRkcmVzcyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRyZXNzU3RyaW5nLCAmYWRkcmVzc0xlbmd0aCkgIT0gU09DS0VUX0VSUk9SKSB7CisgICAgICBIQU5ETEUgaGFuZGxlOworCisgICAgICBDU0FERFJfSU5GTyBjc2FbXSA9IHsKKyAgICAgICAgeworICAgICAgICAgIC5SZW1vdGVBZGRyID0geworICAgICAgICAgICAgLmxwU29ja2FkZHIgPSAoU09DS0FERFIgKikmc29ja2V0QWRkcmVzcywKKyAgICAgICAgICAgIC5pU29ja2FkZHJMZW5ndGggPSBzaXplb2Yoc29ja2V0QWRkcmVzcykKKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgIH07CisKKyAgICAgIFdTQVFVRVJZU0VUIHJlc3RyaWN0aW9ucyA9IHsKKyAgICAgICAgLmR3TmFtZVNwYWNlID0gTlNfQlRILAorICAgICAgICAubHBzekNvbnRleHQgPSBhZGRyZXNzU3RyaW5nLAorICAgICAgICAubHBjc2FCdWZmZXIgPSBjc2EsCisgICAgICAgIC5kd051bWJlck9mQ3NBZGRycyA9IEFSUkFZX0NPVU5UKGNzYSksCisgICAgICAgIC5scFNlcnZpY2VDbGFzc0lkID0gZ3VpZCwKKyAgICAgICAgLmR3U2l6ZSA9IHNpemVvZihyZXN0cmljdGlvbnMpCisgICAgICB9OworCisgICAgICBpZiAoV1NBTG9va3VwU2VydmljZUJlZ2luKCZyZXN0cmljdGlvbnMsIChMVVBfRkxVU0hDQUNIRSB8IGJlZ2luRmxhZ3MpLCAmaGFuZGxlKSAhPSBTT0NLRVRfRVJST1IpIHsKKyAgICAgICAgRFdPUkQgcmVzdWx0TGVuZ3RoID0gc2l6ZW9mKCpyZXN1bHQpOworCisgICAgICAgIGlmIChXU0FMb29rdXBTZXJ2aWNlTmV4dChoYW5kbGUsIG5leHRGbGFncywgJnJlc3VsdExlbmd0aCwgJnJlc3VsdC0+cXVlcnlTZXQpICE9IFNPQ0tFVF9FUlJPUikgeworICAgICAgICAgIGZvdW5kID0gMTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICBzdGF0aWMgY29uc3QgRFdPUkQgZXhjZXB0aW9uc1tdID0geworI2lmZGVmIFdTQV9FX05PX01PUkUKKyAgICAgICAgICAgIFdTQV9FX05PX01PUkUsCisjZW5kaWYgLyogV1NBX0VfTk9fTU9SRSAqLworCisjaWZkZWYgV1NBRU5PTU9SRQorICAgICAgICAgICAgV1NBRU5PTU9SRSwKKyNlbmRpZiAvKiBXU0FFTk9NT1JFICovCisKKyAgICAgICAgICAgIE5PX0VSUk9SCisgICAgICAgICAgfTsKKworICAgICAgICAgIGJ0aFNvY2tldEVycm9yKCJXU0FMb29rdXBTZXJ2aWNlTmV4dCIsIGV4Y2VwdGlvbnMpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKFdTQUxvb2t1cFNlcnZpY2VFbmQoaGFuZGxlKSA9PSBTT0NLRVRfRVJST1IpIHsKKyAgICAgICAgICBidGhTb2NrZXRFcnJvcigiV1NBTG9va3VwU2VydmljZUVuZCIsIE5VTEwpOworICAgICAgICB9CisgICAgICB9IGVsc2UgeworICAgICAgICBzdGF0aWMgY29uc3QgRFdPUkQgZXhjZXB0aW9uc1tdID0geworICAgICAgICAgIFdTQVNFUlZJQ0VfTk9UX0ZPVU5ELAorICAgICAgICAgIE5PX0VSUk9SCisgICAgICAgIH07CisKKyAgICAgICAgYnRoU29ja2V0RXJyb3IoIldTQUxvb2t1cFNlcnZpY2VCZWdpbiIsIGV4Y2VwdGlvbnMpOworICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICBidGhTb2NrZXRFcnJvcigiV1NBQWRkcmVzc1RvU3RyaW5nIiwgTlVMTCk7CisgICAgfQorICB9CisKKyAgcmV0dXJuIGZvdW5kOworfQorCitpbnQKK2J0aERpc2NvdmVyQ2hhbm5lbCAoCisgIHVpbnQ4X3QgKmNoYW5uZWwsIEJsdWV0b290aENvbm5lY3Rpb25FeHRlbnNpb24gKmJjeCwKKyAgY29uc3Qgdm9pZCAqdXVpZEJ5dGVzLCBzaXplX3QgdXVpZExlbmd0aCwKKyAgaW50IHRpbWVvdXQKKykgeworICBHVUlEIGd1aWQ7CisKKyAgbWVtY3B5KCZndWlkLCB1dWlkQnl0ZXMsIHNpemVvZihndWlkKSk7CisgIHB1dE5hdGl2ZUVuZGlhbjMyKCh1aW50MzJfdCAqKSZndWlkLkRhdGExLCBnZXRCaWdFbmRpYW4zMihndWlkLkRhdGExKSk7CisgIHB1dE5hdGl2ZUVuZGlhbjE2KCh1aW50MTZfdCAqKSZndWlkLkRhdGEyLCBnZXRCaWdFbmRpYW4xNihndWlkLkRhdGEyKSk7CisgIHB1dE5hdGl2ZUVuZGlhbjE2KCh1aW50MTZfdCAqKSZndWlkLkRhdGEzLCBnZXRCaWdFbmRpYW4xNihndWlkLkRhdGEzKSk7CisKKyNpZiAxCisgIHsKKyAgICBCbHVldG9vdGhTZXJ2aWNlTG9va3VwUmVzdWx0IHJlc3VsdDsKKworICAgIGlmIChidGhQZXJmb3JtU2VydmljZUxvb2t1cCgmcmVzdWx0LCBiY3gtPnJlbW90ZS5idEFkZHIsICZndWlkLCAwLCBMVVBfUkVUVVJOX0FERFIpKSB7CisgICAgICBTT0NLQUREUl9CVEggKmJ0aCA9IChTT0NLQUREUl9CVEggKilyZXN1bHQucXVlcnlTZXQubHBjc2FCdWZmZXJbMF0uUmVtb3RlQWRkci5scFNvY2thZGRyOworCisgICAgICBpZiAoYnRoLT5wb3J0KSB7CisgICAgICAgICpjaGFubmVsID0gYnRoLT5wb3J0OworICAgICAgICByZXR1cm4gMTsKKyAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gMDsKKyAgfQorI2Vsc2UgLyogZGlzY292ZXIgY2hhbm5lbCAqLworICBtZW1jcHkoJmJjeC0+cmVtb3RlLnNlcnZpY2VDbGFzc0lkLCAmZ3VpZCwgc2l6ZW9mKGJjeC0+cmVtb3RlLnNlcnZpY2VDbGFzc0lkKSk7CisgICpjaGFubmVsID0gMDsKKyAgcmV0dXJuIDE7CisjZW5kaWYgLyogZGlzY292ZXIgY2hhbm5lbCAqLworfQorCitpbnQKK2J0aE1vbml0b3JJbnB1dCAoQmx1ZXRvb3RoQ29ubmVjdGlvbiAqY29ubmVjdGlvbiwgQXN5bmNNb25pdG9yQ2FsbGJhY2sgKmNhbGxiYWNrLCB2b2lkICpkYXRhKSB7CisgIHJldHVybiAwOworfQorCitpbnQKK2J0aFBvbGxJbnB1dCAoQmx1ZXRvb3RoQ29ubmVjdGlvbkV4dGVuc2lvbiAqYmN4LCBpbnQgdGltZW91dCkgeworICBmZF9zZXQgaW5wdXQ7CisgIFRJTUVWQUwgdGltZTsKKworICBGRF9aRVJPKCZpbnB1dCk7CisgIEZEX1NFVChiY3gtPnNvY2tldCwgJmlucHV0KTsKKworICBtZW1zZXQoJnRpbWUsIDAsIHNpemVvZih0aW1lKSk7CisgIHRpbWUudHZfc2VjID0gdGltZW91dCAvIE1TRUNTX1BFUl9TRUM7CisgIHRpbWUudHZfdXNlYyA9ICh0aW1lb3V0ICUgTVNFQ1NfUEVSX1NFQykgKiBVU0VDU19QRVJfTVNFQzsKKworICBzd2l0Y2ggKHNlbGVjdChiY3gtPnNvY2tldCsxLCAmaW5wdXQsIE5VTEwsIE5VTEwsICZ0aW1lKSkgeworICAgIGNhc2UgU09DS0VUX0VSUk9SOgorICAgICAgYnRoU29ja2V0RXJyb3IoIlJGQ09NTSB3YWl0IiwgTlVMTCk7CisgICAgICBicmVhazsKKworICAgIGNhc2UgMDoKKyAgICAgIGVycm5vID0gRUFHQUlOOworICAgICAgYnJlYWs7CisKKyAgICBkZWZhdWx0OgorICAgICAgcmV0dXJuIDE7CisgIH0KKworICByZXR1cm4gMDsKK30KKworc3NpemVfdAorYnRoR2V0RGF0YSAoCisgIEJsdWV0b290aENvbm5lY3Rpb25FeHRlbnNpb24gKmJjeCwgdm9pZCAqYnVmZmVyLCBzaXplX3Qgc2l6ZSwKKyAgaW50IGluaXRpYWxUaW1lb3V0LCBpbnQgc3Vic2VxdWVudFRpbWVvdXQKKykgeworICBzaXplX3QgY291bnQgPSBzaXplOworCisgIGlmIChjb3VudCkgeworICAgIGNoYXIgKnRvID0gYnVmZmVyOworCisgICAgd2hpbGUgKDEpIHsKKyAgICAgIGludCByZXN1bHQgPSByZWN2KGJjeC0+c29ja2V0LCB0bywgY291bnQsIDApOworCisgICAgICBpZiAocmVzdWx0ICE9IFNPQ0tFVF9FUlJPUikgeworICAgICAgICB0byArPSByZXN1bHQ7CisgICAgICAgIGlmICghKGNvdW50IC09IHJlc3VsdCkpIGJyZWFrOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgc3RhdGljIGNvbnN0IERXT1JEIGV4Y2VwdGlvbnNbXSA9IHsKKyAgICAgICAgICBXU0FFV09VTERCTE9DSywKKyAgICAgICAgICBOT19FUlJPUgorICAgICAgICB9OworCisgICAgICAgIERXT1JEIGVycm9yID0gYnRoU29ja2V0RXJyb3IoIlJGQ09NTSByZWFkIiwgZXhjZXB0aW9ucyk7CisgICAgICAgIGlmIChlcnJvciAhPSBXU0FFV09VTERCTE9DSykgcmV0dXJuIC0xOworICAgICAgfQorCisgICAgICB7CisgICAgICAgIGludCB0aW1lb3V0ID0gKHRvID09IGJ1ZmZlcik/IGluaXRpYWxUaW1lb3V0OiBzdWJzZXF1ZW50VGltZW91dDsKKworICAgICAgICBpZiAoIXRpbWVvdXQpIGJyZWFrOworICAgICAgICBpZiAoIWJ0aFBvbGxJbnB1dChiY3gsIHRpbWVvdXQpKSByZXR1cm4gLTE7CisgICAgICB9CisgICAgfQorICB9CisKKyAgaWYgKHNpemUgPT0gY291bnQpIGVycm5vID0gRUFHQUlOOworICByZXR1cm4gc2l6ZSAtIGNvdW50OworfQorCitzc2l6ZV90CitidGhQdXREYXRhIChCbHVldG9vdGhDb25uZWN0aW9uRXh0ZW5zaW9uICpiY3gsIGNvbnN0IHZvaWQgKmJ1ZmZlciwgc2l6ZV90IHNpemUpIHsKKyAgY29uc3QgY2hhciAqZnJvbSA9IGJ1ZmZlcjsKKyAgc2l6ZV90IGNvdW50ID0gc2l6ZTsKKworICB3aGlsZSAoY291bnQpIHsKKyAgICBpbnQgcmVzdWx0ID0gc2VuZChiY3gtPnNvY2tldCwgZnJvbSwgY291bnQsIDApOworCisgICAgaWYgKHJlc3VsdCA9PSBTT0NLRVRfRVJST1IpIHsKKyAgICAgIGJ0aFNvY2tldEVycm9yKCJSRkNPTU0gd3JpdGUiLCBOVUxMKTsKKyAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICBmcm9tICs9IHJlc3VsdDsKKyAgICBjb3VudCAtPSByZXN1bHQ7CisgIH0KKworICByZXR1cm4gc2l6ZTsKK30KKworY2hhciAqCitidGhPYnRhaW5EZXZpY2VOYW1lICh1aW50NjRfdCBiZGEsIGludCB0aW1lb3V0KSB7CisgIEJsdWV0b290aFNlcnZpY2VMb29rdXBSZXN1bHQgcmVzdWx0OworCisgIGlmIChidGhQZXJmb3JtU2VydmljZUxvb2t1cCgmcmVzdWx0LCBiZGEsIE5VTEwsIExVUF9DT05UQUlORVJTLCBMVVBfUkVUVVJOX05BTUUpKSB7CisgICAgY2hhciAqbmFtZSA9IHN0cmR1cChyZXN1bHQucXVlcnlTZXQubHBzelNlcnZpY2VJbnN0YW5jZU5hbWUpOworCisgICAgaWYgKG5hbWUpIHsKKyAgICAgIHJldHVybiBuYW1lOworICAgIH0gZWxzZSB7CisgICAgICBsb2dNYWxsb2NFcnJvcigpOworICAgIH0KKyAgfQorCisgIHJldHVybiBOVUxMOworfQorCit2b2lkCitidGhQcm9jZXNzRGlzY292ZXJlZERldmljZXMgKAorICBEaXNjb3ZlcmVkQmx1ZXRvb3RoRGV2aWNlVGVzdGVyICp0ZXN0RGV2aWNlLCB2b2lkICpkYXRhCispIHsKKyAgaWYgKGJ0aFN0YXJ0U29ja2V0cygpKSB7CisgICAgSEFORExFIGhhbmRsZTsKKworICAgIFdTQVFVRVJZU0VUIHJlc3RyaWN0aW9ucyA9IHsKKyAgICAgIC5kd05hbWVTcGFjZSA9IE5TX0JUSCwKKyAgICAgIC5kd1NpemUgPSBzaXplb2YocmVzdHJpY3Rpb25zKQorICAgIH07CisKKyAgICBpZiAoV1NBTG9va3VwU2VydmljZUJlZ2luKCZyZXN0cmljdGlvbnMsIExVUF9DT05UQUlORVJTLCAmaGFuZGxlKSAhPSBTT0NLRVRfRVJST1IpIHsKKyAgICAgIHdoaWxlICgxKSB7CisgICAgICAgIEJsdWV0b290aFNlcnZpY2VMb29rdXBSZXN1bHQgcmVzdWx0OworICAgICAgICBEV09SRCByZXN1bHRMZW5ndGggPSBzaXplb2YocmVzdWx0KTsKKworICAgICAgICBpZiAoV1NBTG9va3VwU2VydmljZU5leHQoaGFuZGxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKExVUF9SRVRVUk5fQUREUiB8IExVUF9SRVRVUk5fTkFNRSB8IExVUF9SRVRVUk5fQkxPQiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcmVzdWx0TGVuZ3RoLCAmcmVzdWx0LnF1ZXJ5U2V0KSA9PSBTT0NLRVRfRVJST1IpIHsKKyAgICAgICAgICBzdGF0aWMgY29uc3QgRFdPUkQgZXhjZXB0aW9uc1tdID0geworI2lmZGVmIFdTQV9FX05PX01PUkUKKyAgICAgICAgICAgIFdTQV9FX05PX01PUkUsCisjZW5kaWYgLyogV1NBX0VfTk9fTU9SRSAqLworCisjaWZkZWYgV1NBRU5PTU9SRQorICAgICAgICAgICAgV1NBRU5PTU9SRSwKKyNlbmRpZiAvKiBXU0FFTk9NT1JFICovCisKKyAgICAgICAgICAgIE5PX0VSUk9SCisgICAgICAgICAgfTsKKworICAgICAgICAgIGJ0aFNvY2tldEVycm9yKCJXU0FMb29rdXBTZXJ2aWNlTmV4dCIsIGV4Y2VwdGlvbnMpOworICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHJlc3VsdC5xdWVyeVNldC5kd051bWJlck9mQ3NBZGRycyA9PSAxKSB7CisgICAgICAgICAgRGlzY292ZXJlZEJsdWV0b290aERldmljZSBkZXZpY2U7CisgICAgICAgICAgbWVtc2V0KCZkZXZpY2UsIDAsIHNpemVvZihkZXZpY2UpKTsKKworICAgICAgICAgIHsKKyAgICAgICAgICAgIEJUSF9BRERSIGFkZHJlc3MgPSAoKFNPQ0tBRERSX0JUSCAqKXJlc3VsdC5xdWVyeVNldC5scGNzYUJ1ZmZlci0+UmVtb3RlQWRkci5scFNvY2thZGRyKS0+YnRBZGRyOworICAgICAgICAgICAgZGV2aWNlLmFkZHJlc3MgPSAoKHVpbnQ2NF90KUdFVF9OQVAoYWRkcmVzcykgPDwgMFgyMCkgfCAodWludDY0X3QpR0VUX1NBUChhZGRyZXNzKTsKKyAgICAgICAgICB9CisKKyAgICAgICAgICB7CisgICAgICAgICAgICBjaGFyICpuYW1lID0gcmVzdWx0LnF1ZXJ5U2V0Lmxwc3pTZXJ2aWNlSW5zdGFuY2VOYW1lOworICAgICAgICAgICAgaWYgKG5hbWUgJiYgKm5hbWUpIGRldmljZS5uYW1lID0gbmFtZTsKKyAgICAgICAgICB9CisKKyAgICAgICAgICB7CisgICAgICAgICAgICBCVEhfREVWSUNFX0lORk8gKmluZm8gPSAoQlRIX0RFVklDRV9JTkZPICopcmVzdWx0LnF1ZXJ5U2V0LmxwQmxvYi0+cEJsb2JEYXRhOworICAgICAgICAgICAgZGV2aWNlLnBhaXJlZCA9ICEhKGluZm8tPmZsYWdzICYgQkRJRl9QQUlSRUQpOworICAgICAgICAgIH0KKworICAgICAgICAgIGlmICh0ZXN0RGV2aWNlKCZkZXZpY2UsIGRhdGEpKSBicmVhazsKKyAgICAgICAgfQorICAgICAgfQorCisgICAgICBpZiAoV1NBTG9va3VwU2VydmljZUVuZChoYW5kbGUpID09IFNPQ0tFVF9FUlJPUikgeworICAgICAgICBidGhTb2NrZXRFcnJvcigiV1NBTG9va3VwU2VydmljZUVuZCIsIE5VTEwpOworICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICBzdGF0aWMgY29uc3QgRFdPUkQgZXhjZXB0aW9uc1tdID0geworICAgICAgICBXU0FTRVJWSUNFX05PVF9GT1VORCwKKyAgICAgICAgTk9fRVJST1IKKyAgICAgIH07CisKKyAgICAgIGJ0aFNvY2tldEVycm9yKCJXU0FMb29rdXBTZXJ2aWNlQmVnaW4iLCBleGNlcHRpb25zKTsKKyAgICB9CisgIH0KK30KZGlmZiAtLWdpdCBhL1Byb2dyYW1zL2JybC5hdXRvLmggYi9Qcm9ncmFtcy9icmwuYXV0by5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc1ODczZmYKLS0tIC9kZXYvbnVsbAorKysgYi9Qcm9ncmFtcy9icmwuYXV0by5oCkBAIC0wLDAgKzEsMjQgQEAKK2V4dGVybiBjb25zdCBCcmFpbGxlRHJpdmVyIGJybF9kcml2ZXJfYWw7CitleHRlcm4gY29uc3QgQnJhaWxsZURyaXZlciBicmxfZHJpdmVyX2JtOworZXh0ZXJuIGNvbnN0IEJyYWlsbGVEcml2ZXIgYnJsX2RyaXZlcl9ldTsKK2V4dGVybiBjb25zdCBCcmFpbGxlRHJpdmVyIGJybF9kcml2ZXJfZnM7CitleHRlcm4gY29uc3QgQnJhaWxsZURyaXZlciBicmxfZHJpdmVyX2hpZDsKK2V4dGVybiBjb25zdCBCcmFpbGxlRHJpdmVyIGJybF9kcml2ZXJfaG07CitleHRlcm4gY29uc3QgQnJhaWxsZURyaXZlciBicmxfZHJpdmVyX2h0OworZXh0ZXJuIGNvbnN0IEJyYWlsbGVEcml2ZXIgYnJsX2RyaXZlcl9odzsKK2V4dGVybiBjb25zdCBCcmFpbGxlRHJpdmVyIGJybF9kcml2ZXJfcG07CitleHRlcm4gY29uc3QgQnJhaWxsZURyaXZlciBicmxfZHJpdmVyX3NrOworZXh0ZXJuIGNvbnN0IEJyYWlsbGVEcml2ZXIgYnJsX2RyaXZlcl92bzsKK3N0YXRpYyBjb25zdCBEcml2ZXJFbnRyeSBkcml2ZXJUYWJsZVtdID0geworICAgIHsmYnJsX2RyaXZlcl9hbCwgJmJybF9kcml2ZXJfYWwuZGVmaW5pdGlvbn0sCisgICAgeyZicmxfZHJpdmVyX2JtLCAmYnJsX2RyaXZlcl9ibS5kZWZpbml0aW9ufSwKKyAgICB7JmJybF9kcml2ZXJfZXUsICZicmxfZHJpdmVyX2V1LmRlZmluaXRpb259LAorICAgIHsmYnJsX2RyaXZlcl9mcywgJmJybF9kcml2ZXJfZnMuZGVmaW5pdGlvbn0sCisgICAgeyZicmxfZHJpdmVyX2hpZCwgJmJybF9kcml2ZXJfaGlkLmRlZmluaXRpb259LAorICAgIHsmYnJsX2RyaXZlcl9obSwgJmJybF9kcml2ZXJfaG0uZGVmaW5pdGlvbn0sCisgICAgeyZicmxfZHJpdmVyX2h0LCAmYnJsX2RyaXZlcl9odC5kZWZpbml0aW9ufSwKKyAgICB7JmJybF9kcml2ZXJfaHcsICZicmxfZHJpdmVyX2h3LmRlZmluaXRpb259LAorICAgIHsmYnJsX2RyaXZlcl9wbSwgJmJybF9kcml2ZXJfcG0uZGVmaW5pdGlvbn0sCisgICAgeyZicmxfZHJpdmVyX3NrLCAmYnJsX2RyaXZlcl9zay5kZWZpbml0aW9ufSwKKyAgICB7JmJybF9kcml2ZXJfdm8sICZicmxfZHJpdmVyX3ZvLmRlZmluaXRpb259LAorICAgIHtOVUxMLCBOVUxMfX07CmRpZmYgLS1naXQgYS9Qcm9ncmFtcy9icmwuYyBiL1Byb2dyYW1zL2JybC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ0ZTEzZTgKLS0tIC9kZXYvbnVsbAorKysgYi9Qcm9ncmFtcy9icmwuYwpAQCAtMCwwICsxLDM0OSBAQAorLyoKKyAqIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisgKiAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisgKgorICogQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKKyNpbmNsdWRlICJwcm9sb2d1ZS5oIgorCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPGZjbnRsLmg+CisKKyNpbmNsdWRlICJsb2cuaCIKKyNpbmNsdWRlICJwYXJhbWV0ZXJzLmgiCisjaW5jbHVkZSAiY2hhcnNldC5oIgorI2luY2x1ZGUgInVuaWNvZGUuaCIKKyNpbmNsdWRlICJicmwuaCIKKyNpbmNsdWRlICJ0dGIuaCIKKyNpbmNsdWRlICJrdGIuaCIKKyNpbmNsdWRlICJxdWV1ZS5oIgorI2luY2x1ZGUgImFzeW5jX2hhbmRsZS5oIgorCit2b2lkCitjb25zdHJ1Y3RCcmFpbGxlRGlzcGxheSAoQnJhaWxsZURpc3BsYXkgKmJybCkgeworICBicmwtPmRhdGEgPSBOVUxMOworCisgIGJybC0+cmVmcmVzaEJyYWlsbGVEaXNwbGF5ID0gTlVMTDsKKyAgYnJsLT5yZWZyZXNoQnJhaWxsZVJvdyA9IE5VTEw7CisKKyAgYnJsLT5zZXRCcmFpbGxlRmlybW5lc3MgPSBOVUxMOworICBicmwtPnNldFRvdWNoU2Vuc2l0aXZpdHkgPSBOVUxMOworICBicmwtPnNldEF1dG9yZXBlYXRQcm9wZXJ0aWVzID0gTlVMTDsKKworICBicmwtPnRleHRDb2x1bW5zID0gMDsKKyAgYnJsLT50ZXh0Um93cyA9IDE7CisgIGJybC0+c3RhdHVzQ29sdW1ucyA9IDA7CisgIGJybC0+c3RhdHVzUm93cyA9IDA7CisgIGJybC0+Y2VsbFNpemUgPSA4OworCisgIGJybC0+a2V5QmluZGluZ3MgPSAiYWxsIjsKKyAgYnJsLT5rZXlOYW1lcyA9IE5VTEw7CisgIGJybC0+a2V5VGFibGUgPSBOVUxMOworCisgIGJybC0+Z2lvRW5kcG9pbnQgPSBOVUxMOworICBicmwtPndyaXRlRGVsYXkgPSAwOworCisgIGJybC0+YnVmZmVyID0gTlVMTDsKKyAgYnJsLT5idWZmZXJSZXNpemVkID0gTlVMTDsKKworICBicmwtPnJvd0Rlc2NyaXB0b3JzLmFycmF5ID0gTlVMTDsKKyAgYnJsLT5yb3dEZXNjcmlwdG9ycy5zaXplID0gMDsKKworICBicmwtPmN1cnNvciA9IEJSTF9OT19DVVJTT1I7CisgIGJybC0+cXVhbGl0eSA9IDA7CisKKyAgYnJsLT5ub0Rpc3BsYXkgPSAwOworICBicmwtPmhhc0ZhaWxlZCA9IDA7CisgIGJybC0+aXNPZmZsaW5lID0gMDsKKyAgYnJsLT5pc1N1c3BlbmRlZCA9IDA7CisgIGJybC0+aXNDb3JlQnVmZmVyID0gMDsKKyAgYnJsLT5yZXNpemVSZXF1aXJlZCA9IDA7CisgIGJybC0+aGlkZUN1cnNvciA9IDA7CisKKyAgYnJsLT5hY2tub3dsZWRnZW1lbnRzLm1lc3NhZ2VzID0gTlVMTDsKKyAgYnJsLT5hY2tub3dsZWRnZW1lbnRzLmFsYXJtID0gTlVMTDsKKyAgYnJsLT5hY2tub3dsZWRnZW1lbnRzLm1pc3NpbmcudGltZW91dCA9IEJSQUlMTEVfTUVTU0FHRV9BQ0tOT1dMRURHRU1FTlRfVElNRU9VVDsKKyAgYnJsLT5hY2tub3dsZWRnZW1lbnRzLm1pc3NpbmcuY291bnQgPSAwOworICBicmwtPmFja25vd2xlZGdlbWVudHMubWlzc2luZy5saW1pdCA9IEJSQUlMTEVfTUVTU0FHRV9VTkFDS05PV0xFREdFRURfTElNSVQ7Cit9CisKK3N0YXRpYyB2b2lkCitkZXN0cnVjdENvbnRyYWN0aW9uQ2FjaGUgKENvbnRyYWN0aW9uQ2FjaGUgKmNhY2hlKSB7CisgIGlmIChjYWNoZS0+aW5wdXQuY2hhcmFjdGVycykgeworICAgIGZyZWUoY2FjaGUtPmlucHV0LmNoYXJhY3RlcnMpOworICAgIGNhY2hlLT5pbnB1dC5jaGFyYWN0ZXJzID0gTlVMTDsKKyAgfQorCisgIGlmIChjYWNoZS0+b3V0cHV0LmNlbGxzKSB7CisgICAgZnJlZShjYWNoZS0+b3V0cHV0LmNlbGxzKTsKKyAgICBjYWNoZS0+b3V0cHV0LmNlbGxzID0gTlVMTDsKKyAgfQorCisgIGlmIChjYWNoZS0+b2Zmc2V0cy5hcnJheSkgeworICAgIGZyZWUoY2FjaGUtPm9mZnNldHMuYXJyYXkpOworICAgIGNhY2hlLT5vZmZzZXRzLmFycmF5ID0gTlVMTDsKKyAgfQorfQorCitzdGF0aWMgdm9pZAorZGVzdHJ1Y3RCcmFpbGxlUm93RGVzY3JpcHRvciAoQnJhaWxsZVJvd0Rlc2NyaXB0b3IgKmJyZCkgeworICBkZXN0cnVjdENvbnRyYWN0aW9uQ2FjaGUoJmJyZC0+Y29udHJhY3RlZC5jYWNoZSk7CisgIGlmIChicmQtPmNvbnRyYWN0ZWQub2Zmc2V0cy5hcnJheSkgZnJlZShicmQtPmNvbnRyYWN0ZWQub2Zmc2V0cy5hcnJheSk7Cit9CisKK3ZvaWQKK2Rlc3RydWN0QnJhaWxsZURpc3BsYXkgKEJyYWlsbGVEaXNwbGF5ICpicmwpIHsKKyAgaWYgKGJybC0+YWNrbm93bGVkZ2VtZW50cy5hbGFybSkgeworICAgIGFzeW5jQ2FuY2VsUmVxdWVzdChicmwtPmFja25vd2xlZGdlbWVudHMuYWxhcm0pOworICAgIGJybC0+YWNrbm93bGVkZ2VtZW50cy5hbGFybSA9IE5VTEw7CisgIH0KKworICBpZiAoYnJsLT5hY2tub3dsZWRnZW1lbnRzLm1lc3NhZ2VzKSB7CisgICAgZGVhbGxvY2F0ZVF1ZXVlKGJybC0+YWNrbm93bGVkZ2VtZW50cy5tZXNzYWdlcyk7CisgICAgYnJsLT5hY2tub3dsZWRnZW1lbnRzLm1lc3NhZ2VzID0gTlVMTDsKKyAgfQorCisgIGlmIChicmwtPmtleVRhYmxlKSB7CisgICAgZGVzdHJveUtleVRhYmxlKGJybC0+a2V5VGFibGUpOworICAgIGJybC0+a2V5VGFibGUgPSBOVUxMOworICB9CisKKyAgaWYgKGJybC0+cm93RGVzY3JpcHRvcnMuYXJyYXkpIHsKKyAgICB3aGlsZSAoYnJsLT5yb3dEZXNjcmlwdG9ycy5zaXplID4gMCkgeworICAgICAgQnJhaWxsZVJvd0Rlc2NyaXB0b3IgKmJyZCA9ICZicmwtPnJvd0Rlc2NyaXB0b3JzLmFycmF5Wy0tYnJsLT5yb3dEZXNjcmlwdG9ycy5zaXplXTsKKyAgICAgIGRlc3RydWN0QnJhaWxsZVJvd0Rlc2NyaXB0b3IoYnJkKTsKKyAgICB9CisKKyAgICBmcmVlKGJybC0+cm93RGVzY3JpcHRvcnMuYXJyYXkpOworICAgIGJybC0+cm93RGVzY3JpcHRvcnMuYXJyYXkgPSBOVUxMOworICB9CisKKyAgaWYgKGJybC0+YnVmZmVyKSB7CisgICAgaWYgKGJybC0+aXNDb3JlQnVmZmVyKSBmcmVlKGJybC0+YnVmZmVyKTsKKyAgICBicmwtPmJ1ZmZlciA9IE5VTEw7CisgIH0KK30KKworc3RhdGljIHZvaWQKK2ZpbGxSZWdpb24gKAorICB3Y2hhcl90ICp0ZXh0LCB1bnNpZ25lZCBjaGFyICpkb3RzLAorICB1bnNpZ25lZCBpbnQgc3RhcnQsIHVuc2lnbmVkIGludCBjb3VudCwKKyAgdW5zaWduZWQgaW50IGNvbHVtbnMsIHVuc2lnbmVkIGludCByb3dzLAorICB2b2lkICpkYXRhLCB1bnNpZ25lZCBpbnQgbGVuZ3RoLAorICB2b2lkICgqZmlsbCkgKHdjaGFyX3QgKnRleHQsIHVuc2lnbmVkIGNoYXIgKmRvdHMsIHZvaWQgKmRhdGEpCispIHsKKyAgdGV4dCArPSBzdGFydDsKKyAgZG90cyArPSBzdGFydDsKKworICB3aGlsZSAocm93cyA+IDApIHsKKyAgICB1bnNpZ25lZCBpbnQgaW5kZXggPSAwOworICAgIHNpemVfdCBhbW91bnQgPSBsZW5ndGg7CisgICAgaWYgKGFtb3VudCA+IGNvdW50KSBhbW91bnQgPSBjb3VudDsKKworICAgIHdoaWxlIChpbmRleCA8IGFtb3VudCkgeworICAgICAgZmlsbCgmdGV4dFtpbmRleF0sICZkb3RzW2luZGV4XSwgZGF0YSk7CisgICAgICBpbmRleCArPSAxOworICAgIH0KKyAgICBsZW5ndGggLT0gYW1vdW50OworCisgICAgYW1vdW50ID0gY291bnQgLSBpbmRleDsKKyAgICB3bWVtc2V0KCZ0ZXh0W2luZGV4XSwgV0NfQygnICcpLCBhbW91bnQpOworICAgIG1lbXNldCgmZG90c1tpbmRleF0sIDAsIGFtb3VudCk7CisKKyAgICB0ZXh0ICs9IGNvbHVtbnM7CisgICAgZG90cyArPSBjb2x1bW5zOworICAgIHJvd3MgLT0gMTsKKyAgfQorfQorCitzdGF0aWMgdm9pZAorZmlsbFRleHQgKHdjaGFyX3QgKnRleHQsIHVuc2lnbmVkIGNoYXIgKmRvdHMsIHZvaWQgKmRhdGEpIHsKKyAgd2NoYXJfdCAqKmNoYXJhY3RlciA9IGRhdGE7CisgICpkb3RzID0gY29udmVydENoYXJhY3RlclRvRG90cyh0ZXh0VGFibGUsICgqdGV4dCA9ICooKmNoYXJhY3RlcikrKykpOworfQorCit2b2lkCitmaWxsVGV4dFJlZ2lvbiAoCisgIHdjaGFyX3QgKnRleHQsIHVuc2lnbmVkIGNoYXIgKmRvdHMsCisgIHVuc2lnbmVkIGludCBzdGFydCwgdW5zaWduZWQgaW50IGNvdW50LAorICB1bnNpZ25lZCBpbnQgY29sdW1ucywgdW5zaWduZWQgaW50IHJvd3MsCisgIGNvbnN0IHdjaGFyX3QgKmNoYXJhY3RlcnMsIHNpemVfdCBsZW5ndGgKKykgeworICBmaWxsUmVnaW9uKHRleHQsIGRvdHMsIHN0YXJ0LCBjb3VudCwgY29sdW1ucywgcm93cywgJmNoYXJhY3RlcnMsIGxlbmd0aCwgZmlsbFRleHQpOworfQorCitzdGF0aWMgdm9pZAorZmlsbERvdHMgKHdjaGFyX3QgKnRleHQsIHVuc2lnbmVkIGNoYXIgKmRvdHMsIHZvaWQgKmRhdGEpIHsKKyAgdW5zaWduZWQgY2hhciAqKmNlbGwgPSBkYXRhOworICAqdGV4dCA9IFVOSUNPREVfQlJBSUxMRV9ST1cgfCAoKmRvdHMgPSAqKCpjZWxsKSsrKTsKK30KKwordm9pZAorZmlsbERvdHNSZWdpb24gKAorICB3Y2hhcl90ICp0ZXh0LCB1bnNpZ25lZCBjaGFyICpkb3RzLAorICB1bnNpZ25lZCBpbnQgc3RhcnQsIHVuc2lnbmVkIGludCBjb3VudCwKKyAgdW5zaWduZWQgaW50IGNvbHVtbnMsIHVuc2lnbmVkIGludCByb3dzLAorICBjb25zdCB1bnNpZ25lZCBjaGFyICpjZWxscywgc2l6ZV90IGxlbmd0aAorKSB7CisgIGZpbGxSZWdpb24odGV4dCwgZG90cywgc3RhcnQsIGNvdW50LCBjb2x1bW5zLCByb3dzLCAmY2VsbHMsIGxlbmd0aCwgZmlsbERvdHMpOworfQorCisKK2ludAorc2V0U3RhdHVzVGV4dCAoQnJhaWxsZURpc3BsYXkgKmJybCwgY29uc3QgY2hhciAqdGV4dCkgeworICB1bnNpZ25lZCBpbnQgbGVuZ3RoID0gYnJsLT5zdGF0dXNDb2x1bW5zICogYnJsLT5zdGF0dXNSb3dzOworCisgIGlmIChicmFpbGxlLT53cml0ZVN0YXR1cyAmJiAobGVuZ3RoID4gMCkpIHsKKyAgICB1bnNpZ25lZCBjaGFyIGNlbGxzW2xlbmd0aF07CisKKyAgICB7CisgICAgICB1bnNpZ25lZCBpbnQgaW5kZXggPSAwOworCisgICAgICB3aGlsZSAoaW5kZXggPCBsZW5ndGgpIHsKKyAgICAgICAgY2hhciBjOworICAgICAgICB3aW50X3Qgd2M7CisKKyAgICAgICAgaWYgKCEoYyA9IHRleHRbaW5kZXhdKSkgYnJlYWs7CisgICAgICAgIGlmICgod2MgPSBjb252ZXJ0Q2hhclRvV2NoYXIoYykpID09IFdFT0YpIHdjID0gV0NfQygnPycpOworICAgICAgICBjZWxsc1tpbmRleCsrXSA9IGNvbnZlcnRDaGFyYWN0ZXJUb0RvdHModGV4dFRhYmxlLCB3Yyk7CisgICAgICB9CisKKyAgICAgIG1lbXNldCgmY2VsbHNbaW5kZXhdLCAwLCBsZW5ndGgtaW5kZXgpOworICAgIH0KKworICAgIGlmICghYnJhaWxsZS0+d3JpdGVTdGF0dXMoYnJsLCBjZWxscykpIHJldHVybiAwOworICB9CisKKyAgcmV0dXJuIDE7Cit9CisKK2ludAorY2xlYXJTdGF0dXNDZWxscyAoQnJhaWxsZURpc3BsYXkgKmJybCkgeworICByZXR1cm4gc2V0U3RhdHVzVGV4dChicmwsICIiKTsKK30KKworc3RhdGljIHZvaWQKK2JyYWlsbGVCdWZmZXJSZXNpemVkIChCcmFpbGxlRGlzcGxheSAqYnJsLCBpbnQgaW5mb0xldmVsKSB7CisgIGxvZ01lc3NhZ2UoaW5mb0xldmVsLAorICAgICJCcmFpbGxlIERpc3BsYXkgRGltZW5zaW9uczogJWQgJXMsICVkICVzIiwKKyAgICBicmwtPnRleHRDb2x1bW5zLCAoKGJybC0+dGV4dENvbHVtbnMgPT0gMSk/ICJjb2x1bW4iOiAiY29sdW1ucyIpLAorICAgIGJybC0+dGV4dFJvd3MsICgoYnJsLT50ZXh0Um93cyA9PSAxKT8gInJvdyI6ICJyb3dzIikKKyAgKTsKKworICBtZW1zZXQoYnJsLT5idWZmZXIsIDAsIGJybC0+dGV4dENvbHVtbnMqYnJsLT50ZXh0Um93cyk7CisgIGlmIChicmwtPmJ1ZmZlclJlc2l6ZWQpIGJybC0+YnVmZmVyUmVzaXplZChicmwtPnRleHRSb3dzLCBicmwtPnRleHRDb2x1bW5zKTsKK30KKworc3RhdGljIGludAorcmVzaXplQnJhaWxsZUJ1ZmZlciAoQnJhaWxsZURpc3BsYXkgKmJybCwgaW50IHJlc2l6ZWQsIGludCBpbmZvTGV2ZWwpIHsKKyAgaWYgKGJybC0+cmVzaXplUmVxdWlyZWQpIHsKKyAgICBicmwtPnJlc2l6ZVJlcXVpcmVkID0gMDsKKyAgICByZXNpemVkID0gMTsKKworICAgIGlmIChicmwtPmlzQ29yZUJ1ZmZlcikgeworICAgICAgc2l6ZV90IG5ld1NpemUgPSBicmwtPnRleHRDb2x1bW5zICogYnJsLT50ZXh0Um93czsKKyAgICAgIHVuc2lnbmVkIGNoYXIgKm5ld0FkZHJlc3MgPSBtYWxsb2MobmV3U2l6ZSk7CisKKyAgICAgIGlmICghbmV3QWRkcmVzcykgeworICAgICAgICBsb2dNYWxsb2NFcnJvcigpOworICAgICAgICByZXR1cm4gMDsKKyAgICAgIH0KKworICAgICAgaWYgKGJybC0+YnVmZmVyKSBmcmVlKGJybC0+YnVmZmVyKTsKKyAgICAgIGJybC0+YnVmZmVyID0gbmV3QWRkcmVzczsKKyAgICB9CisgIH0KKworICBpZiAocmVzaXplZCkgYnJhaWxsZUJ1ZmZlclJlc2l6ZWQoYnJsLCBpbmZvTGV2ZWwpOworICByZXR1cm4gMTsKK30KKworaW50CitlbnN1cmVCcmFpbGxlQnVmZmVyIChCcmFpbGxlRGlzcGxheSAqYnJsLCBpbnQgaW5mb0xldmVsKSB7CisgIGJybC0+cmVzaXplUmVxdWlyZWQgPSBicmwtPmlzQ29yZUJ1ZmZlciA9ICFicmwtPmJ1ZmZlcjsKKyAgaWYgKChicmwtPm5vRGlzcGxheSA9ICFicmwtPnRleHRDb2x1bW5zKSkgYnJsLT50ZXh0Q29sdW1ucyA9IDE7CisgIHJldHVybiByZXNpemVCcmFpbGxlQnVmZmVyKGJybCwgMSwgaW5mb0xldmVsKTsKK30KKworaW50CityZWFkQnJhaWxsZUNvbW1hbmQgKEJyYWlsbGVEaXNwbGF5ICpicmwsIEtleVRhYmxlQ29tbWFuZENvbnRleHQgY29udGV4dCkgeworICBpbnQgY29tbWFuZCA9IGJyYWlsbGUtPnJlYWRDb21tYW5kKGJybCwgY29udGV4dCk7CisKKyAgcmVzaXplQnJhaWxsZUJ1ZmZlcihicmwsIDAsIExPR19JTkZPKTsKKyAgcmV0dXJuIGNvbW1hbmQ7Cit9CisKK2ludAorY2FuUmVmcmVzaEJyYWlsbGVEaXNwbGF5IChCcmFpbGxlRGlzcGxheSAqYnJsKSB7CisgIHJldHVybiBicmwtPnJlZnJlc2hCcmFpbGxlRGlzcGxheSAhPSBOVUxMOworfQorCitpbnQKK3JlZnJlc2hCcmFpbGxlRGlzcGxheSAoQnJhaWxsZURpc3BsYXkgKmJybCkgeworICBpZiAoIWNhblJlZnJlc2hCcmFpbGxlRGlzcGxheShicmwpKSByZXR1cm4gMDsKKyAgbG9nTWVzc2FnZShMT0dfREVCVUcsICJyZWZyZXNoaW5nIGJyYWlsbGUgZGlzcGxheSIpOworICByZXR1cm4gYnJsLT5yZWZyZXNoQnJhaWxsZURpc3BsYXkoYnJsKTsKK30KKworaW50CitjYW5SZWZyZXNoQnJhaWxsZVJvdyAoQnJhaWxsZURpc3BsYXkgKmJybCkgeworICByZXR1cm4gYnJsLT5yZWZyZXNoQnJhaWxsZVJvdyAhPSBOVUxMOworfQorCitpbnQKK3JlZnJlc2hCcmFpbGxlUm93IChCcmFpbGxlRGlzcGxheSAqYnJsLCBpbnQgcm93KSB7CisgIGlmICghY2FuUmVmcmVzaEJyYWlsbGVSb3coYnJsKSkgcmV0dXJuIDA7CisgIGxvZ01lc3NhZ2UoTE9HX0RFQlVHLCAicmVmcmVzaGluZyBicmFpbGxlIHJvdzogJWQiLCByb3cpOworICByZXR1cm4gYnJsLT5yZWZyZXNoQnJhaWxsZVJvdyhicmwsIHJvdyk7Cit9CisKK2ludAorY2FuU2V0QnJhaWxsZUZpcm1uZXNzIChCcmFpbGxlRGlzcGxheSAqYnJsKSB7CisgIHJldHVybiBicmwtPnNldEJyYWlsbGVGaXJtbmVzcyAhPSBOVUxMOworfQorCitpbnQKK3NldEJyYWlsbGVGaXJtbmVzcyAoQnJhaWxsZURpc3BsYXkgKmJybCwgQnJhaWxsZUZpcm1uZXNzIHNldHRpbmcpIHsKKyAgaWYgKCFjYW5TZXRCcmFpbGxlRmlybW5lc3MoYnJsKSkgcmV0dXJuIDA7CisgIGxvZ01lc3NhZ2UoTE9HX0RFQlVHLCAic2V0dGluZyBicmFpbGxlIGZpcm1uZXNzOiAlZCIsIHNldHRpbmcpOworICByZXR1cm4gYnJsLT5zZXRCcmFpbGxlRmlybW5lc3MoYnJsLCBzZXR0aW5nKTsKK30KKworaW50CitjYW5TZXRUb3VjaFNlbnNpdGl2aXR5IChCcmFpbGxlRGlzcGxheSAqYnJsKSB7CisgIHJldHVybiBicmwtPnNldFRvdWNoU2Vuc2l0aXZpdHkgIT0gTlVMTDsKK30KKworaW50CitzZXRUb3VjaFNlbnNpdGl2aXR5IChCcmFpbGxlRGlzcGxheSAqYnJsLCBUb3VjaFNlbnNpdGl2aXR5IHNldHRpbmcpIHsKKyAgaWYgKCFjYW5TZXRUb3VjaFNlbnNpdGl2aXR5KGJybCkpIHJldHVybiAwOworICBsb2dNZXNzYWdlKExPR19ERUJVRywgInNldHRpbmcgdG91Y2ggc2Vuc2l0aXZpdHk6ICVkIiwgc2V0dGluZyk7CisgIHJldHVybiBicmwtPnNldFRvdWNoU2Vuc2l0aXZpdHkoYnJsLCBzZXR0aW5nKTsKK30KKworaW50CitjYW5TZXRBdXRvcmVwZWF0UHJvcGVydGllcyAoQnJhaWxsZURpc3BsYXkgKmJybCkgeworICByZXR1cm4gYnJsLT5zZXRBdXRvcmVwZWF0UHJvcGVydGllcyAhPSBOVUxMOworfQorCitpbnQKK3NldEF1dG9yZXBlYXRQcm9wZXJ0aWVzIChCcmFpbGxlRGlzcGxheSAqYnJsLCBpbnQgb24sIGludCBkZWxheSwgaW50IGludGVydmFsKSB7CisgIGlmICghY2FuU2V0QXV0b3JlcGVhdFByb3BlcnRpZXMoYnJsKSkgcmV0dXJuIDA7CisgIGxvZ01lc3NhZ2UoTE9HX0RFQlVHLCAic2V0dGluZyBhdXRvcmVwZWF0IHByb3BlcnRpZXM6ICVzIERlbGF5OiVkIEludGVydmFsOiVkIiwgCisgICAgICAgICAgICAgKG9uPyAib24iOiAib2ZmIiksIGRlbGF5LCBpbnRlcnZhbCk7CisgIHJldHVybiBicmwtPnNldEF1dG9yZXBlYXRQcm9wZXJ0aWVzKGJybCwgb24sIGRlbGF5LCBpbnRlcnZhbCk7Cit9CmRpZmYgLS1naXQgYS9Qcm9ncmFtcy9icmwuaCBiL1Byb2dyYW1zL2JybC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE3NTI5YzkKLS0tIC9kZXYvbnVsbAorKysgYi9Qcm9ncmFtcy9icmwuaApAQCAtMCwwICsxLDgxIEBACisvKgorICogQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyAqICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyAqCisgKiBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorICoKKyAqIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyAqCisgKiBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisgKi8KKworI2lmbmRlZiBCUkxUVFlfSU5DTFVERURfQlJMCisjZGVmaW5lIEJSTFRUWV9JTkNMVURFRF9CUkwKKworI2luY2x1ZGUgInByb2xvZ3VlLmgiCisKKyNpbmNsdWRlICJicmxfdHlwZXMuaCIKKyNpbmNsdWRlICJrdGJfdHlwZXMuaCIKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZiAvKiBfX2NwbHVzcGx1cyAqLworCitleHRlcm4gdm9pZCBjb25zdHJ1Y3RCcmFpbGxlRGlzcGxheSAoQnJhaWxsZURpc3BsYXkgKmJybCk7CitleHRlcm4gaW50IGVuc3VyZUJyYWlsbGVCdWZmZXIgKEJyYWlsbGVEaXNwbGF5ICpicmwsIGludCBpbmZvTGV2ZWwpOworZXh0ZXJuIHZvaWQgZGVzdHJ1Y3RCcmFpbGxlRGlzcGxheSAoQnJhaWxsZURpc3BsYXkgKmJybCk7CisKK2V4dGVybiB2b2lkIGZpbGxUZXh0UmVnaW9uICgKKyAgd2NoYXJfdCAqdGV4dCwgdW5zaWduZWQgY2hhciAqZG90cywKKyAgdW5zaWduZWQgaW50IHN0YXJ0LCB1bnNpZ25lZCBpbnQgY291bnQsCisgIHVuc2lnbmVkIGludCBjb2x1bW5zLCB1bnNpZ25lZCBpbnQgcm93cywKKyAgY29uc3Qgd2NoYXJfdCAqY2hhcmFjdGVycywgc2l6ZV90IGxlbmd0aAorKTsKKworZXh0ZXJuIHZvaWQgZmlsbERvdHNSZWdpb24gKAorICB3Y2hhcl90ICp0ZXh0LCB1bnNpZ25lZCBjaGFyICpkb3RzLAorICB1bnNpZ25lZCBpbnQgc3RhcnQsIHVuc2lnbmVkIGludCBjb3VudCwKKyAgdW5zaWduZWQgaW50IGNvbHVtbnMsIHVuc2lnbmVkIGludCByb3dzLAorICBjb25zdCB1bnNpZ25lZCBjaGFyICpjZWxscywgc2l6ZV90IGxlbmd0aAorKTsKKworZXh0ZXJuIGludCBjbGVhclN0YXR1c0NlbGxzIChCcmFpbGxlRGlzcGxheSAqYnJsKTsKK2V4dGVybiBpbnQgc2V0U3RhdHVzVGV4dCAoQnJhaWxsZURpc3BsYXkgKmJybCwgY29uc3QgY2hhciAqdGV4dCk7CisKK2V4dGVybiBpbnQgcmVhZEJyYWlsbGVDb21tYW5kIChCcmFpbGxlRGlzcGxheSAqLCBLZXlUYWJsZUNvbW1hbmRDb250ZXh0KTsKKworZXh0ZXJuIGludCBjYW5SZWZyZXNoQnJhaWxsZURpc3BsYXkgKEJyYWlsbGVEaXNwbGF5ICpicmwpOworZXh0ZXJuIGludCByZWZyZXNoQnJhaWxsZURpc3BsYXkgKEJyYWlsbGVEaXNwbGF5ICpicmwpOworCitleHRlcm4gaW50IGNhblJlZnJlc2hCcmFpbGxlUm93IChCcmFpbGxlRGlzcGxheSAqYnJsKTsKK2V4dGVybiBpbnQgcmVmcmVzaEJyYWlsbGVSb3cgKEJyYWlsbGVEaXNwbGF5ICpicmwsIGludCByb3cpOworCitleHRlcm4gaW50IGNhblNldEJyYWlsbGVGaXJtbmVzcyAoQnJhaWxsZURpc3BsYXkgKmJybCk7CitleHRlcm4gaW50IHNldEJyYWlsbGVGaXJtbmVzcyAoQnJhaWxsZURpc3BsYXkgKmJybCwgQnJhaWxsZUZpcm1uZXNzIHNldHRpbmcpOworCitleHRlcm4gaW50IGNhblNldFRvdWNoU2Vuc2l0aXZpdHkgKEJyYWlsbGVEaXNwbGF5ICpicmwpOworZXh0ZXJuIGludCBzZXRUb3VjaFNlbnNpdGl2aXR5IChCcmFpbGxlRGlzcGxheSAqYnJsLCBUb3VjaFNlbnNpdGl2aXR5IHNldHRpbmcpOworCitleHRlcm4gaW50IGNhblNldEF1dG9yZXBlYXRQcm9wZXJ0aWVzIChCcmFpbGxlRGlzcGxheSAqYnJsKTsKK2V4dGVybiBpbnQgc2V0QXV0b3JlcGVhdFByb3BlcnRpZXMgKEJyYWlsbGVEaXNwbGF5ICpicmwsIGludCBvbiwgaW50IGRlbGF5LCBpbnQgaW50ZXJ2YWwpOworCitleHRlcm4gaW50IGhhdmVCcmFpbGxlRHJpdmVyIChjb25zdCBjaGFyICpjb2RlKTsKK2V4dGVybiBjb25zdCBjaGFyICpnZXREZWZhdWx0QnJhaWxsZURyaXZlciAodm9pZCk7CitleHRlcm4gY29uc3QgQnJhaWxsZURyaXZlciAqbG9hZEJyYWlsbGVEcml2ZXIgKGNvbnN0IGNoYXIgKmNvZGUsIHZvaWQgKipkcml2ZXJPYmplY3QsIGNvbnN0IGNoYXIgKmRyaXZlckRpcmVjdG9yeSk7CitleHRlcm4gdm9pZCBpZGVudGlmeUJyYWlsbGVEcml2ZXIgKGNvbnN0IEJyYWlsbGVEcml2ZXIgKmRyaXZlciwgaW50IGZ1bGwpOworZXh0ZXJuIHZvaWQgaWRlbnRpZnlCcmFpbGxlRHJpdmVycyAoaW50IGZ1bGwpOworZXh0ZXJuIGNvbnN0IEJyYWlsbGVEcml2ZXIgKmJyYWlsbGU7CitleHRlcm4gY29uc3QgQnJhaWxsZURyaXZlciBub0JyYWlsbGU7CisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmIC8qIF9fY3BsdXNwbHVzICovCisKKyNlbmRpZiAvKiBCUkxUVFlfSU5DTFVERURfQlJMICovCmRpZmYgLS1naXQgYS9Qcm9ncmFtcy9icmxfYmFzZS5jIGIvUHJvZ3JhbXMvYnJsX2Jhc2UuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ODljZTk2Ci0tLSAvZGV2L251bGwKKysrIGIvUHJvZ3JhbXMvYnJsX2Jhc2UuYwpAQCAtMCwwICsxLDgyMSBAQAorLyoKKyAqIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisgKiAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisgKgorICogQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKKyNpbmNsdWRlICJwcm9sb2d1ZS5oIgorCisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKworI2luY2x1ZGUgImxvZy5oIgorI2luY2x1ZGUgInJlcG9ydC5oIgorI2luY2x1ZGUgImFwaV9jb250cm9sLmgiCisjaW5jbHVkZSAicXVldWUuaCIKKyNpbmNsdWRlICJhc3luY19oYW5kbGUuaCIKKyNpbmNsdWRlICJhc3luY19hbGFybS5oIgorI2luY2x1ZGUgImJybF9iYXNlLmgiCisjaW5jbHVkZSAiYnJsX3V0aWxzLmgiCisjaW5jbHVkZSAiYnJsX2RvdHMuaCIKKyNpbmNsdWRlICJrYmRfa2V5Y29kZXMuaCIKKyNpbmNsdWRlICJpb19nZW5lcmljLmgiCisjaW5jbHVkZSAiY21kX3F1ZXVlLmgiCisjaW5jbHVkZSAia3RiLmgiCisKK2NvbnN0IERvdHNUYWJsZSBkb3RzVGFibGVfSVNPMTE1NDhfMSA9IHsKKyAgQlJMX0RPVF8xLCBCUkxfRE9UXzIsIEJSTF9ET1RfMywgQlJMX0RPVF80LAorICBCUkxfRE9UXzUsIEJSTF9ET1RfNiwgQlJMX0RPVF83LCBCUkxfRE9UXzgKK307CisKK2NvbnN0IERvdHNUYWJsZSBkb3RzVGFibGVfcm90YXRlZCA9IHsKKyAgQlJMX0RPVF84LCBCUkxfRE9UXzYsIEJSTF9ET1RfNSwgQlJMX0RPVF83LAorICBCUkxfRE9UXzMsIEJSTF9ET1RfMiwgQlJMX0RPVF80LCBCUkxfRE9UXzEKK307CisKK3ZvaWQKK21ha2VUcmFuc2xhdGlvblRhYmxlIChjb25zdCBEb3RzVGFibGUgZG90cywgVHJhbnNsYXRpb25UYWJsZSB0YWJsZSkgeworICBpbnQgYnl0ZTsKKworICBmb3IgKGJ5dGU9MDsgYnl0ZTxUUkFOU0xBVElPTl9UQUJMRV9TSVpFOyBieXRlKz0xKSB7CisgICAgdW5zaWduZWQgY2hhciBjZWxsID0gMDsKKyAgICBpbnQgZG90OworCisgICAgZm9yIChkb3Q9MDsgZG90PERPVFNfVEFCTEVfU0laRTsgZG90Kz0xKSB7CisgICAgICBpZiAoYnl0ZSAmIGRvdHNUYWJsZV9JU08xMTU0OF8xW2RvdF0pIHsKKyAgICAgICAgY2VsbCB8PSBkb3RzW2RvdF07CisgICAgICB9CisgICAgfQorCisgICAgdGFibGVbYnl0ZV0gPSBjZWxsOworICB9Cit9CisKK3ZvaWQKK3JldmVyc2VUcmFuc2xhdGlvblRhYmxlIChjb25zdCBUcmFuc2xhdGlvblRhYmxlIGZyb20sIFRyYW5zbGF0aW9uVGFibGUgdG8pIHsKKyAgaW50IGJ5dGU7CisgIG1lbXNldCh0bywgMCwgc2l6ZW9mKFRyYW5zbGF0aW9uVGFibGUpKTsKKyAgZm9yIChieXRlPVRSQU5TTEFUSU9OX1RBQkxFX1NJWkUtMTsgYnl0ZT49MDsgYnl0ZS0tKSB0b1tmcm9tW2J5dGVdXSA9IGJ5dGU7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCAqCit0cmFuc2xhdGVDZWxscyAoCisgIGNvbnN0IFRyYW5zbGF0aW9uVGFibGUgdGFibGUsCisgIHVuc2lnbmVkIGNoYXIgKnRhcmdldCwgY29uc3QgdW5zaWduZWQgY2hhciAqc291cmNlLCBzaXplX3QgY291bnQKKykgeworICBpZiAodGFibGUpIHsKKyAgICB3aGlsZSAoY291bnQtLSkgKnRhcmdldCsrID0gdGFibGVbKnNvdXJjZSsrXTsKKyAgICByZXR1cm4gdGFyZ2V0OworICB9CisKKyAgaWYgKHRhcmdldCA9PSBzb3VyY2UpIHJldHVybiB0YXJnZXQgKyBjb3VudDsKKyAgcmV0dXJuIG1lbXBjcHkodGFyZ2V0LCBzb3VyY2UsIGNvdW50KTsKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBjaGFyCit0cmFuc2xhdGVDZWxsIChjb25zdCBUcmFuc2xhdGlvblRhYmxlIHRhYmxlLCB1bnNpZ25lZCBjaGFyIGNlbGwpIHsKKyAgcmV0dXJuIHRhYmxlPyB0YWJsZVtjZWxsXTogY2VsbDsKK30KKworc3RhdGljIFRyYW5zbGF0aW9uVGFibGUgaW50ZXJuYWxPdXRwdXRUYWJsZTsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyICpvdXRwdXRUYWJsZTsKKwordm9pZAorc2V0T3V0cHV0VGFibGUgKGNvbnN0IFRyYW5zbGF0aW9uVGFibGUgdGFibGUpIHsKKyAgb3V0cHV0VGFibGUgPSB0YWJsZTsKK30KKwordm9pZAorbWFrZU91dHB1dFRhYmxlIChjb25zdCBEb3RzVGFibGUgZG90cykgeworICBpZiAobWVtY21wKGRvdHMsIGRvdHNUYWJsZV9JU08xMTU0OF8xLCBET1RTX1RBQkxFX1NJWkUpID09IDApIHsKKyAgICBvdXRwdXRUYWJsZSA9IE5VTEw7CisgIH0gZWxzZSB7CisgICAgbWFrZVRyYW5zbGF0aW9uVGFibGUoZG90cywgaW50ZXJuYWxPdXRwdXRUYWJsZSk7CisgICAgb3V0cHV0VGFibGUgPSBpbnRlcm5hbE91dHB1dFRhYmxlOworICB9Cit9CisKK3ZvaWQgKgordHJhbnNsYXRlT3V0cHV0Q2VsbHMgKHVuc2lnbmVkIGNoYXIgKnRhcmdldCwgY29uc3QgdW5zaWduZWQgY2hhciAqc291cmNlLCBzaXplX3QgY291bnQpIHsKKyAgcmV0dXJuIHRyYW5zbGF0ZUNlbGxzKG91dHB1dFRhYmxlLCB0YXJnZXQsIHNvdXJjZSwgY291bnQpOworfQorCit1bnNpZ25lZCBjaGFyCit0cmFuc2xhdGVPdXRwdXRDZWxsICh1bnNpZ25lZCBjaGFyIGNlbGwpIHsKKyAgcmV0dXJuIHRyYW5zbGF0ZUNlbGwob3V0cHV0VGFibGUsIGNlbGwpOworfQorCitzdGF0aWMgVHJhbnNsYXRpb25UYWJsZSBpbnRlcm5hbElucHV0VGFibGU7CitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciAqaW5wdXRUYWJsZTsKKwordm9pZAorbWFrZUlucHV0VGFibGUgKHZvaWQpIHsKKyAgaWYgKG91dHB1dFRhYmxlKSB7CisgICAgcmV2ZXJzZVRyYW5zbGF0aW9uVGFibGUob3V0cHV0VGFibGUsIGludGVybmFsSW5wdXRUYWJsZSk7CisgICAgaW5wdXRUYWJsZSA9IGludGVybmFsSW5wdXRUYWJsZTsKKyAgfSBlbHNlIHsKKyAgICBpbnB1dFRhYmxlID0gTlVMTDsKKyAgfQorfQorCit2b2lkICoKK3RyYW5zbGF0ZUlucHV0Q2VsbHMgKHVuc2lnbmVkIGNoYXIgKnRhcmdldCwgY29uc3QgdW5zaWduZWQgY2hhciAqc291cmNlLCBzaXplX3QgY291bnQpIHsKKyAgcmV0dXJuIHRyYW5zbGF0ZUNlbGxzKGlucHV0VGFibGUsIHRhcmdldCwgc291cmNlLCBjb3VudCk7Cit9CisKK3Vuc2lnbmVkIGNoYXIKK3RyYW5zbGF0ZUlucHV0Q2VsbCAodW5zaWduZWQgY2hhciBjZWxsKSB7CisgIHJldHVybiB0cmFuc2xhdGVDZWxsKGlucHV0VGFibGUsIGNlbGwpOworfQorCitpbnQKK2F3YWl0QnJhaWxsZUlucHV0IChCcmFpbGxlRGlzcGxheSAqYnJsLCBpbnQgdGltZW91dCkgeworICByZXR1cm4gZ2lvQXdhaXRJbnB1dChicmwtPmdpb0VuZHBvaW50LCB0aW1lb3V0KTsKK30KKworaW50Citjb25uZWN0QnJhaWxsZVJlc291cmNlICgKKyAgQnJhaWxsZURpc3BsYXkgKmJybCwKKyAgY29uc3QgY2hhciAqaWRlbnRpZmllciwKKyAgY29uc3QgR2lvRGVzY3JpcHRvciAqZGVzY3JpcHRvciwKKyAgQnJhaWxsZVNlc3Npb25Jbml0aWFsaXplciAqaW5pdGlhbGl6ZVNlc3Npb24KKykgeworICBpZiAoKGJybC0+Z2lvRW5kcG9pbnQgPSBnaW9Db25uZWN0UmVzb3VyY2UoaWRlbnRpZmllciwgZGVzY3JpcHRvcikpKSB7CisgICAgaWYgKCFpbml0aWFsaXplU2Vzc2lvbiB8fCBpbml0aWFsaXplU2Vzc2lvbihicmwpKSB7CisgICAgICBpZiAoZ2lvRGlzY2FyZElucHV0KGJybC0+Z2lvRW5kcG9pbnQpKSB7CisgICAgICAgIHJldHVybiAxOworICAgICAgfQorICAgIH0KKworICAgIGdpb0Rpc2Nvbm5lY3RSZXNvdXJjZShicmwtPmdpb0VuZHBvaW50KTsKKyAgICBicmwtPmdpb0VuZHBvaW50ID0gTlVMTDsKKyAgfQorCisgIHJldHVybiAwOworfQorCit2b2lkCitkaXNjb25uZWN0QnJhaWxsZVJlc291cmNlICgKKyAgQnJhaWxsZURpc3BsYXkgKmJybCwKKyAgQnJhaWxsZVNlc3Npb25FbmRlciAqZW5kU2Vzc2lvbgorKSB7CisgIGlmIChicmwtPmdpb0VuZHBvaW50KSB7CisgICAgaWYgKGVuZFNlc3Npb24pIGVuZFNlc3Npb24oYnJsKTsKKyAgICBkcmFpbkJyYWlsbGVPdXRwdXQoYnJsLCAwKTsKKyAgICBnaW9EaXNjb25uZWN0UmVzb3VyY2UoYnJsLT5naW9FbmRwb2ludCk7CisgICAgYnJsLT5naW9FbmRwb2ludCA9IE5VTEw7CisgIH0KK30KKworc2l6ZV90CityZWFkQnJhaWxsZVBhY2tldCAoCisgIEJyYWlsbGVEaXNwbGF5ICpicmwsCisgIEdpb0VuZHBvaW50ICplbmRwb2ludCwKKyAgdm9pZCAqcGFja2V0LCBzaXplX3Qgc2l6ZSwKKyAgQnJhaWxsZVBhY2tldFZlcmlmaWVyICp2ZXJpZnlQYWNrZXQsIHZvaWQgKmRhdGEKKykgeworICBpZiAoIWVuZHBvaW50KSBlbmRwb2ludCA9IGJybC0+Z2lvRW5kcG9pbnQ7CisKKyAgdW5zaWduZWQgY2hhciAqYnl0ZXMgPSBwYWNrZXQ7CisgIHNpemVfdCBjb3VudCA9IDA7CisgIHNpemVfdCBsZW5ndGggPSAxOworICBpbnQgc3RhcnRlZCA9IDA7CisKKyAgd2hpbGUgKDEpIHsKKyAgICB1bnNpZ25lZCBjaGFyIGJ5dGU7CisKKyAgICBpZiAoIWdpb1JlYWRCeXRlKGVuZHBvaW50LCAmYnl0ZSwgc3RhcnRlZCkpIHsKKyAgICAgIGlmIChjb3VudCA+IDApIGxvZ1BhcnRpYWxQYWNrZXQoYnl0ZXMsIGNvdW50KTsKKyAgICAgIHJldHVybiAwOworICAgIH0KKworICBnb3RCeXRlOgorICAgIGlmIChjb3VudCA8IHNpemUpIHsKKyAgICAgIGJ5dGVzW2NvdW50KytdID0gYnl0ZTsKKyAgICAgIEJyYWlsbGVQYWNrZXRWZXJpZmllclJlc3VsdCByZXN1bHQgPSB2ZXJpZnlQYWNrZXQoYnJsLCBieXRlcywgY291bnQsICZsZW5ndGgsIGRhdGEpOworCisgICAgICBzd2l0Y2ggKHJlc3VsdCkgeworICAgICAgICBjYXNlIEJSTF9QVlJfRVhDTFVERToKKyAgICAgICAgICBjb3VudCAtPSAxOworICAgICAgICAgIC8qIGZhbGwgdGhyb3VnaCAqLworICAgICAgICBjYXNlIEJSTF9QVlJfSU5DTFVERToKKyAgICAgICAgICBzdGFydGVkID0gMTsKKyAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIEJSTF9QVlJfSUdOT1JFOgorICAgICAgICAgIGNvdW50IC09IDE7CisgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICBsb2dNZXNzYWdlKExPR19XQVJOSU5HLCAidW5pbXBsZW1lbnRlZCBicmFpbGxlIHBhY2tldCB2ZXJpZmllciByZXN1bHQ6ICV1IiwgcmVzdWx0KTsKKyAgICAgICAgICAvKiBmYWxsIHRocm91Z2ggKi8KKyAgICAgICAgY2FzZSBCUkxfUFZSX0lOVkFMSUQ6CisgICAgICAgICAgc3RhcnRlZCA9IDA7CisgICAgICAgICAgbGVuZ3RoID0gMTsKKworICAgICAgICAgIGlmICgtLWNvdW50KSB7CisgICAgICAgICAgICBsb2dTaG9ydFBhY2tldChieXRlcywgY291bnQpOworICAgICAgICAgICAgY291bnQgPSAwOworICAgICAgICAgICAgZ290byBnb3RCeXRlOworICAgICAgICAgIH0KKworICAgICAgICAgIGxvZ0lnbm9yZWRCeXRlKGJ5dGUpOworICAgICAgICAgIGNvbnRpbnVlOworICAgICAgfQorCisgICAgICBpZiAoY291bnQgPj0gbGVuZ3RoKSB7CisgICAgICAgIGxvZ0lucHV0UGFja2V0KGJ5dGVzLCBsZW5ndGgpOworICAgICAgICByZXR1cm4gbGVuZ3RoOworICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICBpZiAoY291bnQrKyA9PSBzaXplKSBsb2dUcnVuY2F0ZWRQYWNrZXQoYnl0ZXMsIHNpemUpOworICAgICAgbG9nRGlzY2FyZGVkQnl0ZShieXRlKTsKKyAgICB9CisgIH0KK30KKworaW50Cit3cml0ZUJyYWlsbGVQYWNrZXQgKAorICBCcmFpbGxlRGlzcGxheSAqYnJsLCBHaW9FbmRwb2ludCAqZW5kcG9pbnQsCisgIGNvbnN0IHZvaWQgKnBhY2tldCwgc2l6ZV90IHNpemUKKykgeworICBpZiAoIWVuZHBvaW50KSBlbmRwb2ludCA9IGJybC0+Z2lvRW5kcG9pbnQ7CisgIGxvZ091dHB1dFBhY2tldChwYWNrZXQsIHNpemUpOworICBpZiAoZ2lvV3JpdGVEYXRhKGVuZHBvaW50LCBwYWNrZXQsIHNpemUpID09IC0xKSByZXR1cm4gMDsKKworICBpZiAoZW5kcG9pbnQgPT0gYnJsLT5naW9FbmRwb2ludCkgeworICAgIGJybC0+d3JpdGVEZWxheSArPSBnaW9HZXRNaWxsaXNlY29uZHNUb1RyYW5zZmVyKGVuZHBvaW50LCBzaXplKTsKKyAgfQorCisgIHJldHVybiAxOworfQorCit0eXBlZGVmIHN0cnVjdCB7CisgIEdpb0VuZHBvaW50ICplbmRwb2ludDsKKyAgdW5zaWduZWQgaW50IHR5cGU7CisgIHNpemVfdCBzaXplOworICB1bnNpZ25lZCBjaGFyIHBhY2tldFtdOworfSBCcmFpbGxlTWVzc2FnZTsKKworc3RhdGljIHZvaWQKK2xvZ0JyYWlsbGVNZXNzYWdlIChCcmFpbGxlTWVzc2FnZSAqbXNnLCBjb25zdCBjaGFyICphY3Rpb24pIHsKKyAgbG9nQnl0ZXMoTE9HX0NBVEVHT1JZKE9VVFBVVF9QQUNLRVRTKSwgIiVzIiwgbXNnLT5wYWNrZXQsIG1zZy0+c2l6ZSwgYWN0aW9uKTsKK30KKworc3RhdGljIHZvaWQKK2RlYWxsb2NhdGVCcmFpbGxlTWVzc2FnZSAoQnJhaWxsZU1lc3NhZ2UgKm1zZykgeworICBmcmVlKG1zZyk7Cit9CisKK3N0YXRpYyB2b2lkCitjYW5jZWxCcmFpbGxlTWVzc2FnZUFsYXJtIChCcmFpbGxlRGlzcGxheSAqYnJsKSB7CisgIGlmIChicmwtPmFja25vd2xlZGdlbWVudHMuYWxhcm0pIHsKKyAgICBhc3luY0NhbmNlbFJlcXVlc3QoYnJsLT5hY2tub3dsZWRnZW1lbnRzLmFsYXJtKTsKKyAgICBicmwtPmFja25vd2xlZGdlbWVudHMuYWxhcm0gPSBOVUxMOworICB9Cit9CisKK3N0YXRpYyB2b2lkIHNldEJyYWlsbGVNZXNzYWdlQWxhcm0gKEJyYWlsbGVEaXNwbGF5ICpicmwpOworCitzdGF0aWMgaW50Cit3cml0ZU5leHRCcmFpbGxlTWVzc2FnZSAoQnJhaWxsZURpc3BsYXkgKmJybCkgeworICBpbnQgb2sgPSAxOworCisgIGlmIChicmwtPmFja25vd2xlZGdlbWVudHMubWVzc2FnZXMpIHsKKyAgICBCcmFpbGxlTWVzc2FnZSAqbXNnID0gZGVxdWV1ZUl0ZW0oYnJsLT5hY2tub3dsZWRnZW1lbnRzLm1lc3NhZ2VzKTsKKworICAgIGlmIChtc2cpIHsKKyAgICAgIGludCB3cml0dGVuOworCisgICAgICBsb2dCcmFpbGxlTWVzc2FnZShtc2csICJkZXF1ZXVlZCIpOworICAgICAgd3JpdHRlbiA9IHdyaXRlQnJhaWxsZVBhY2tldChicmwsIG1zZy0+ZW5kcG9pbnQsIG1zZy0+cGFja2V0LCBtc2ctPnNpemUpOworCisgICAgICBkZWFsbG9jYXRlQnJhaWxsZU1lc3NhZ2UobXNnKTsKKyAgICAgIG1zZyA9IE5VTEw7CisKKyAgICAgIGlmICh3cml0dGVuKSB7CisgICAgICAgIHNldEJyYWlsbGVNZXNzYWdlQWxhcm0oYnJsKTsKKyAgICAgICAgcmV0dXJuIDE7CisgICAgICB9CisKKyAgICAgIG9rID0gMDsKKyAgICB9CisgIH0KKworICBjYW5jZWxCcmFpbGxlTWVzc2FnZUFsYXJtKGJybCk7CisgIHJldHVybiBvazsKK30KKworaW50CithY2tub3dsZWRnZUJyYWlsbGVNZXNzYWdlIChCcmFpbGxlRGlzcGxheSAqYnJsKSB7CisgIGxvZ01lc3NhZ2UoTE9HX0NBVEVHT1JZKE9VVFBVVF9QQUNLRVRTKSwgImFja25vd2xlZGdlZCIpOworICBicmwtPmFja25vd2xlZGdlbWVudHMubWlzc2luZy5jb3VudCA9IDA7CisgIHJldHVybiB3cml0ZU5leHRCcmFpbGxlTWVzc2FnZShicmwpOworfQorCitBU1lOQ19BTEFSTV9DQUxMQkFDSyhoYW5kbGVCcmFpbGxlTWVzc2FnZVRpbWVvdXQpIHsKKyAgQnJhaWxsZURpc3BsYXkgKmJybCA9IHBhcmFtZXRlcnMtPmRhdGE7CisKKyAgYXN5bmNEaXNjYXJkSGFuZGxlKGJybC0+YWNrbm93bGVkZ2VtZW50cy5hbGFybSk7CisgIGJybC0+YWNrbm93bGVkZ2VtZW50cy5hbGFybSA9IE5VTEw7CisKKyAgaWYgKChicmwtPmFja25vd2xlZGdlbWVudHMubWlzc2luZy5jb3VudCArPSAxKSA8IGJybC0+YWNrbm93bGVkZ2VtZW50cy5taXNzaW5nLmxpbWl0KSB7CisgICAgbG9nTWVzc2FnZShMT0dfV0FSTklORywgIm1pc3NpbmcgYnJhaWxsZSBtZXNzYWdlIGFja25vd2xlZGdlbWVudCIpOworICAgIHdyaXRlTmV4dEJyYWlsbGVNZXNzYWdlKGJybCk7CisgIH0gZWxzZSB7CisgICAgbG9nTWVzc2FnZShMT0dfV0FSTklORywgInRvbyBtYW55IG1pc3NpbmcgYnJhaWxsZSBtZXNzYWdlIGFja25vd2xlZGdlbWVudHMiKTsKKyAgICBicmwtPmhhc0ZhaWxlZCA9IDE7CisgIH0KK30KKworc3RhdGljIHZvaWQKK3NldEJyYWlsbGVNZXNzYWdlQWxhcm0gKEJyYWlsbGVEaXNwbGF5ICpicmwpIHsKKyAgaWYgKGJybC0+YWNrbm93bGVkZ2VtZW50cy5hbGFybSkgeworICAgIGFzeW5jUmVzZXRBbGFybUluKGJybC0+YWNrbm93bGVkZ2VtZW50cy5hbGFybSwgYnJsLT5hY2tub3dsZWRnZW1lbnRzLm1pc3NpbmcudGltZW91dCk7CisgIH0gZWxzZSB7CisgICAgYXN5bmNOZXdSZWxhdGl2ZUFsYXJtKCZicmwtPmFja25vd2xlZGdlbWVudHMuYWxhcm0sIGJybC0+YWNrbm93bGVkZ2VtZW50cy5taXNzaW5nLnRpbWVvdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZUJyYWlsbGVNZXNzYWdlVGltZW91dCwgYnJsKTsKKyAgfQorfQorCitzdGF0aWMgaW50CitmaW5kT2xkQnJhaWxsZU1lc3NhZ2UgKGNvbnN0IHZvaWQgKml0ZW0sIHZvaWQgKmRhdGEpIHsKKyAgY29uc3QgQnJhaWxsZU1lc3NhZ2UgKm9sZCA9IGl0ZW07CisgIGNvbnN0IEJyYWlsbGVNZXNzYWdlICpuZXcgPSBkYXRhOworCisgIHJldHVybiBvbGQtPnR5cGUgPT0gbmV3LT50eXBlOworfQorCitzdGF0aWMgdm9pZAorZGVhbGxvY2F0ZUJyYWlsbGVNZXNzYWdlSXRlbSAodm9pZCAqaXRlbSwgdm9pZCAqZGF0YSkgeworICBCcmFpbGxlTWVzc2FnZSAqbXNnID0gaXRlbTsKKworICBkZWFsbG9jYXRlQnJhaWxsZU1lc3NhZ2UobXNnKTsKK30KKworaW50Cit3cml0ZUJyYWlsbGVNZXNzYWdlICgKKyAgQnJhaWxsZURpc3BsYXkgKmJybCwgR2lvRW5kcG9pbnQgKmVuZHBvaW50LAorICB1bnNpZ25lZCBpbnQgdHlwZSwKKyAgY29uc3Qgdm9pZCAqcGFja2V0LCBzaXplX3Qgc2l6ZQorKSB7CisgIGlmIChicmwtPmFja25vd2xlZGdlbWVudHMuYWxhcm0pIHsKKyAgICBCcmFpbGxlTWVzc2FnZSAqbXNnOworCisgICAgaWYgKCFicmwtPmFja25vd2xlZGdlbWVudHMubWVzc2FnZXMpIHsKKyAgICAgIGlmICghKGJybC0+YWNrbm93bGVkZ2VtZW50cy5tZXNzYWdlcyA9IG5ld1F1ZXVlKGRlYWxsb2NhdGVCcmFpbGxlTWVzc2FnZUl0ZW0sIE5VTEwpKSkgeworICAgICAgICByZXR1cm4gMDsKKyAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoKG1zZyA9IG1hbGxvYyhzaXplb2YoKm1zZykgKyBzaXplKSkpIHsKKyAgICAgIG1lbXNldChtc2csIDAsIHNpemVvZigqbXNnKSk7CisgICAgICBtc2ctPmVuZHBvaW50ID0gZW5kcG9pbnQ7CisgICAgICBtc2ctPnR5cGUgPSB0eXBlOworICAgICAgbXNnLT5zaXplID0gc2l6ZTsKKyAgICAgIG1lbWNweShtc2ctPnBhY2tldCwgcGFja2V0LCBzaXplKTsKKworICAgICAgeworICAgICAgICBFbGVtZW50ICplbGVtZW50ID0gZmluZEVsZW1lbnQoYnJsLT5hY2tub3dsZWRnZW1lbnRzLm1lc3NhZ2VzLCBmaW5kT2xkQnJhaWxsZU1lc3NhZ2UsIG1zZyk7CisKKyAgICAgICAgaWYgKGVsZW1lbnQpIHsKKyAgICAgICAgICBsb2dCcmFpbGxlTWVzc2FnZShnZXRFbGVtZW50SXRlbShlbGVtZW50KSwgInVucXVldWVkIik7CisgICAgICAgICAgZGVsZXRlRWxlbWVudChlbGVtZW50KTsKKyAgICAgICAgfQorICAgICAgfQorCisgICAgICBpZiAoZW5xdWV1ZUl0ZW0oYnJsLT5hY2tub3dsZWRnZW1lbnRzLm1lc3NhZ2VzLCBtc2cpKSB7CisgICAgICAgIGxvZ0JyYWlsbGVNZXNzYWdlKG1zZywgImVucXVldWVkIik7CisgICAgICAgIHJldHVybiAxOworICAgICAgfQorCisgICAgICBsb2dCcmFpbGxlTWVzc2FnZShtc2csICJkaXNjYXJkZWQiKTsKKyAgICAgIGZyZWUobXNnKTsKKyAgICB9IGVsc2UgeworICAgICAgbG9nTWFsbG9jRXJyb3IoKTsKKyAgICB9CisgIH0gZWxzZSBpZiAod3JpdGVCcmFpbGxlUGFja2V0KGJybCwgZW5kcG9pbnQsIHBhY2tldCwgc2l6ZSkpIHsKKyAgICBzZXRCcmFpbGxlTWVzc2FnZUFsYXJtKGJybCk7CisgICAgcmV0dXJuIDE7CisgIH0KKworICByZXR1cm4gMDsKK30KKwordm9pZAorZW5kQnJhaWxsZU1lc3NhZ2VzIChCcmFpbGxlRGlzcGxheSAqYnJsKSB7CisgIGNhbmNlbEJyYWlsbGVNZXNzYWdlQWxhcm0oYnJsKTsKKworICBpZiAoYnJsLT5hY2tub3dsZWRnZW1lbnRzLm1lc3NhZ2VzKSB7CisgICAgZGVhbGxvY2F0ZVF1ZXVlKGJybC0+YWNrbm93bGVkZ2VtZW50cy5tZXNzYWdlcyk7CisgICAgYnJsLT5hY2tub3dsZWRnZW1lbnRzLm1lc3NhZ2VzID0gTlVMTDsKKyAgfQorfQorCitpbnQKK2dldEJyYWlsbGVSZXBvcnRTaXplIChCcmFpbGxlRGlzcGxheSAqYnJsLCB1bnNpZ25lZCBjaGFyIGlkZW50aWZpZXIsIEhpZFJlcG9ydFNpemUgKnNpemUpIHsKKyAgcmV0dXJuIGdpb0dldEhpZFJlcG9ydFNpemUoYnJsLT5naW9FbmRwb2ludCwgaWRlbnRpZmllciwgc2l6ZSk7Cit9CisKK2ludAorZ2V0QnJhaWxsZVJlcG9ydFNpemVzIChCcmFpbGxlRGlzcGxheSAqYnJsLCBjb25zdCBCcmFpbGxlUmVwb3J0U2l6ZUVudHJ5ICp0YWJsZSkgeworICBjb25zdCBCcmFpbGxlUmVwb3J0U2l6ZUVudHJ5ICplbnRyeSA9IHRhYmxlOworCisgIHdoaWxlIChlbnRyeS0+aWRlbnRpZmllcikgeworICAgIEhpZFJlcG9ydFNpemUgc2l6ZTsKKyAgICBpZiAoIWdldEJyYWlsbGVSZXBvcnRTaXplKGJybCwgZW50cnktPmlkZW50aWZpZXIsICZzaXplKSkgcmV0dXJuIDA7CisKKyAgICBpZiAoZW50cnktPmlucHV0KSAqZW50cnktPmlucHV0ID0gc2l6ZS5pbnB1dDsKKyAgICBpZiAoZW50cnktPm91dHB1dCkgKmVudHJ5LT5vdXRwdXQgPSBzaXplLm91dHB1dDsKKyAgICBpZiAoZW50cnktPmZlYXR1cmUpICplbnRyeS0+ZmVhdHVyZSA9IHNpemUuZmVhdHVyZTsKKworICAgIGVudHJ5ICs9IDE7CisgIH0KKworICByZXR1cm4gMTsKK30KKworaW50Citwcm9iZUJyYWlsbGVEaXNwbGF5ICgKKyAgQnJhaWxsZURpc3BsYXkgKmJybCwgdW5zaWduZWQgaW50IHJldHJ5TGltaXQsCisgIEdpb0VuZHBvaW50ICplbmRwb2ludCwgaW50IGlucHV0VGltZW91dCwKKyAgQnJhaWxsZVJlcXVlc3RXcml0ZXIgKndyaXRlUmVxdWVzdCwKKyAgQnJhaWxsZVBhY2tldFJlYWRlciAqcmVhZFBhY2tldCwgdm9pZCAqcmVzcG9uc2VQYWNrZXQsIHNpemVfdCByZXNwb25zZVNpemUsCisgIEJyYWlsbGVSZXNwb25zZUhhbmRsZXIgKmhhbmRsZVJlc3BvbnNlCispIHsKKyAgdW5zaWduZWQgaW50IHJldHJ5Q291bnQgPSAwOworCisgIGlmICghZW5kcG9pbnQpIGVuZHBvaW50ID0gYnJsLT5naW9FbmRwb2ludDsKKworICB3aGlsZSAod3JpdGVSZXF1ZXN0KGJybCkpIHsKKyAgICBkcmFpbkJyYWlsbGVPdXRwdXQoYnJsLCAwKTsKKworICAgIHdoaWxlIChnaW9Bd2FpdElucHV0KGVuZHBvaW50LCBpbnB1dFRpbWVvdXQpKSB7CisgICAgICBzaXplX3Qgc2l6ZSA9IHJlYWRQYWNrZXQoYnJsLCByZXNwb25zZVBhY2tldCwgcmVzcG9uc2VTaXplKTsKKyAgICAgIGlmICghc2l6ZSkgYnJlYWs7CisKKyAgICAgIHsKKyAgICAgICAgQnJhaWxsZVJlc3BvbnNlUmVzdWx0IHJlc3VsdCA9IGhhbmRsZVJlc3BvbnNlKGJybCwgcmVzcG9uc2VQYWNrZXQsIHNpemUpOworCisgICAgICAgIHN3aXRjaCAocmVzdWx0KSB7CisgICAgICAgICAgY2FzZSBCUkxfUlNQX0RPTkU6CisgICAgICAgICAgICByZXR1cm4gMTsKKworICAgICAgICAgIGNhc2UgQlJMX1JTUF9VTkVYUEVDVEVEOgorICAgICAgICAgICAgbG9nVW5leHBlY3RlZFBhY2tldChyZXNwb25zZVBhY2tldCwgc2l6ZSk7CisgICAgICAgICAgY2FzZSBCUkxfUlNQX0NPTlRJTlVFOgorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgbG9nTWVzc2FnZShMT0dfV0FSTklORywgInVuaW1wbGVtZW50ZWQgYnJhaWxsZSByZXNwb25zZSByZXN1bHQ6ICV1IiwgcmVzdWx0KTsKKyAgICAgICAgICAgIC8qIGZhbGwgdGhyb3VnaCAqLworICAgICAgICAgIGNhc2UgQlJMX1JTUF9GQUlMOgorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoZXJybm8gIT0gRUFHQUlOKQorI2lmZGVmIEVUSU1FRE9VVAorICAgICAgaWYgKGVycm5vICE9IEVUSU1FRE9VVCkKKyNlbmRpZiAvKiBFVElNRURPVVQgKi8KKyAgICAgICAgYnJlYWs7CisKKyAgICBpZiAocmV0cnlDb3VudCA9PSByZXRyeUxpbWl0KSBicmVhazsKKyAgICByZXRyeUNvdW50ICs9IDE7CisgIH0KKworICByZXR1cm4gMDsKK30KKwordm9pZAorcmVsZWFzZUJyYWlsbGVLZXlzIChCcmFpbGxlRGlzcGxheSAqYnJsKSB7CisgIHJlbGVhc2VBbGxLZXlzKGJybC0+a2V5VGFibGUpOworfQorCitLZXlOdW1iZXJTZXQKK21hcEtleU51bWJlcnMgKEtleU51bWJlclNldCBmcm9tS2V5cywgY29uc3QgS2V5TnVtYmVyTWFwRW50cnkgKm1hcCwgc2l6ZV90IGNvdW50KSB7CisgIEtleU51bWJlclNldCB0b0tleXMgPSBmcm9tS2V5czsKKyAgY29uc3QgS2V5TnVtYmVyTWFwRW50cnkgKmVuZCA9IG1hcCArIGNvdW50OworCisgIHdoaWxlIChtYXAgPCBlbmQpIHsKKyAgICBLZXlOdW1iZXIga2V5ID0gbWFwLT5mcm9tOworICAgIGludCB5ZXMgPSAoa2V5ID09IEtUQl9LRVlfQU5ZKT8gMDogaXNLZXlOdW1iZXJJbmNsdWRlZChmcm9tS2V5cywga2V5KTsKKworICAgIHNldEtleU51bWJlckluY2x1ZGVkKCZ0b0tleXMsIG1hcC0+dG8sIHllcyk7CisgICAgbWFwICs9IDE7CisgIH0KKworICByZXR1cm4gdG9LZXlzOworfQorCit2b2lkCityZW1hcEtleU51bWJlcnMgKEtleU51bWJlclNldCAqa2V5cywgY29uc3QgS2V5TnVtYmVyTWFwRW50cnkgKm1hcCwgc2l6ZV90IGNvdW50KSB7CisgICprZXlzID0gbWFwS2V5TnVtYmVycygqa2V5cywgbWFwLCBjb3VudCk7Cit9CisKK3N0cnVjdCBLZXlOdW1iZXJTZXRNYXBTdHJ1Y3QgeworICBjb25zdCBLZXlOdW1iZXJTZXRNYXBFbnRyeSAqbGluZWFyOworICBjb25zdCBLZXlOdW1iZXJTZXRNYXBFbnRyeSAqKnNvcnRlZDsKKyAgc2l6ZV90IGNvdW50OworfTsKKworc3RhdGljIGludAorY29tcGFyZUtleU51bWJlclNldHMgKEtleU51bWJlclNldCBrZXlzMSwgS2V5TnVtYmVyU2V0IGtleXMyKSB7CisgIGlmIChrZXlzMSA8IGtleXMyKSByZXR1cm4gLTE7CisgIGlmIChrZXlzMSA+IGtleXMyKSByZXR1cm4gMTsKKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK3NvcnRLZXlOdW1iZXJTZXRzIChjb25zdCB2b2lkICplbGVtZW50MSwgY29uc3Qgdm9pZCAqZWxlbWVudDIpIHsKKyAgY29uc3QgS2V5TnVtYmVyU2V0TWFwRW50cnkgKmNvbnN0ICplbnRyeTEgPSBlbGVtZW50MTsKKyAgY29uc3QgS2V5TnVtYmVyU2V0TWFwRW50cnkgKmNvbnN0ICplbnRyeTIgPSBlbGVtZW50MjsKKyAgcmV0dXJuIGNvbXBhcmVLZXlOdW1iZXJTZXRzKCgqZW50cnkxKS0+ZnJvbSwgKCplbnRyeTIpLT5mcm9tKTsKK30KKworc3RhdGljIGludAorc2VhcmNoS2V5TnVtYmVyU2V0TWFwRW50cnkgKGNvbnN0IHZvaWQgKnRhcmdldCwgY29uc3Qgdm9pZCAqZWxlbWVudCkgeworICBjb25zdCBLZXlOdW1iZXJTZXQgKnJlZmVyZW5jZSA9IHRhcmdldDsKKyAgY29uc3QgS2V5TnVtYmVyU2V0TWFwRW50cnkgKmNvbnN0ICplbnRyeSA9IGVsZW1lbnQ7CisgIHJldHVybiBjb21wYXJlS2V5TnVtYmVyU2V0cygqcmVmZXJlbmNlLCAoKmVudHJ5KS0+ZnJvbSk7Cit9CisKK0tleU51bWJlclNldE1hcCAqCituZXdLZXlOdW1iZXJTZXRNYXAgKGNvbnN0IEtleU51bWJlclNldE1hcEVudHJ5ICplbnRyaWVzLCBzaXplX3QgY291bnQpIHsKKyAgS2V5TnVtYmVyU2V0TWFwICptYXA7CisKKyAgaWYgKChtYXAgPSBtYWxsb2Moc2l6ZW9mKCptYXApKSkpIHsKKyAgICBtZW1zZXQobWFwLCAwLCBzaXplb2YoKm1hcCkpOworCisgICAgbWFwLT5saW5lYXIgPSBlbnRyaWVzOworICAgIG1hcC0+Y291bnQgPSBjb3VudDsKKworICAgIGlmIChjb3VudCA8IDQpIHsKKyAgICAgIG1hcC0+c29ydGVkID0gTlVMTDsKKyAgICAgIHJldHVybiBtYXA7CisgICAgfQorCisgICAgaWYgKChtYXAtPnNvcnRlZCA9IG1hbGxvYyhBUlJBWV9TSVpFKG1hcC0+c29ydGVkLCBjb3VudCkpKSkgeworICAgICAgZm9yIChzaXplX3QgaT0wOyBpPGNvdW50OyBpKz0xKSB7CisgICAgICAgIG1hcC0+c29ydGVkW2ldID0gJmVudHJpZXNbaV07CisgICAgICB9CisKKyAgICAgIHFzb3J0KG1hcC0+c29ydGVkLCBtYXAtPmNvdW50LCBzaXplb2YoKm1hcC0+c29ydGVkKSwgc29ydEtleU51bWJlclNldHMpOworICAgICAgcmV0dXJuIG1hcDsKKyAgICB9CisKKyAgICBmcmVlKG1hcCk7CisgIH0KKworICBsb2dNYWxsb2NFcnJvcigpOworICByZXR1cm4gTlVMTDsKK30KKwordm9pZAorZGVzdHJveUtleU51bWJlclNldE1hcCAoS2V5TnVtYmVyU2V0TWFwICptYXApIHsKKyAgaWYgKG1hcC0+c29ydGVkKSBmcmVlKG1hcC0+c29ydGVkKTsKKyAgZnJlZShtYXApOworfQorCitLZXlOdW1iZXJTZXQKK21hcEtleU51bWJlclNldCAoS2V5TnVtYmVyU2V0IGtleXMsIGNvbnN0IEtleU51bWJlclNldE1hcCAqbWFwKSB7CisgIGlmIChtYXApIHsKKyAgICBpZiAobWFwLT5zb3J0ZWQpIHsKKyAgICAgIGNvbnN0IEtleU51bWJlclNldE1hcEVudHJ5ICpjb25zdCAqZW50cnkgPSBic2VhcmNoKAorICAgICAgICAma2V5cywgbWFwLT5zb3J0ZWQsIG1hcC0+Y291bnQsCisgICAgICAgIHNpemVvZigqbWFwLT5zb3J0ZWQpLCBzZWFyY2hLZXlOdW1iZXJTZXRNYXBFbnRyeQorICAgICAgKTsKKworICAgICAgaWYgKGVudHJ5KSByZXR1cm4gKCplbnRyeSktPnRvOworICAgIH0gZWxzZSB7CisgICAgICBjb25zdCBLZXlOdW1iZXJTZXRNYXBFbnRyeSAqZW50cnkgPSBtYXAtPmxpbmVhcjsKKyAgICAgIGNvbnN0IEtleU51bWJlclNldE1hcEVudHJ5ICplbmQgPSBlbnRyeSArIG1hcC0+Y291bnQ7CisKKyAgICAgIHdoaWxlIChlbnRyeSA8IGVuZCkgeworICAgICAgICBpZiAoa2V5cyA9PSBlbnRyeS0+ZnJvbSkgcmV0dXJuIGVudHJ5LT50bzsKKyAgICAgICAgZW50cnkgKz0gMTsKKyAgICAgIH0KKyAgICB9CisgIH0KKworICByZXR1cm4ga2V5czsKK30KKwordm9pZAorcmVtYXBLZXlOdW1iZXJTZXQgKEtleU51bWJlclNldCAqa2V5cywgY29uc3QgS2V5TnVtYmVyU2V0TWFwICptYXApIHsKKyAgKmtleXMgPSBtYXBLZXlOdW1iZXJTZXQoKmtleXMsIG1hcCk7Cit9CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgY29uc3QgS2V5R3JvdXAgZ3JvdXA7CisKKyAgS2V5TnVtYmVyU2V0IHNldDsKK30gSW5jbHVkZUtleU51bWJlckRhdGE7CisKK3N0YXRpYyBpbnQKK2luY2x1ZGVLZXlOdW1iZXIgKGNvbnN0IEtleU5hbWVFbnRyeSAqa25lLCB2b2lkICpkYXRhKSB7CisgIGlmIChrbmUpIHsKKyAgICBJbmNsdWRlS2V5TnVtYmVyRGF0YSAqaWtuID0gZGF0YTsKKworICAgIGlmIChrbmUtPnZhbHVlLmdyb3VwID09IGlrbi0+Z3JvdXApIGlrbi0+c2V0IHw9IEtFWV9OVU1CRVJfQklUKGtuZS0+dmFsdWUubnVtYmVyKTsKKyAgfQorCisgIHJldHVybiAxOworfQorCitLZXlOdW1iZXJTZXQKK21ha2VLZXlOdW1iZXJTZXQgKEtFWV9OQU1FX1RBQkxFU19SRUZFUkVOQ0Uga2V5cywgS2V5R3JvdXAgZ3JvdXApIHsKKyAgSW5jbHVkZUtleU51bWJlckRhdGEgaWtuID0geworICAgIC5ncm91cCA9IGdyb3VwLAorCisgICAgLnNldCA9IDAKKyAgfTsKKworICBmb3JFYWNoS2V5TmFtZShrZXlzLCBpbmNsdWRlS2V5TnVtYmVyLCAmaWtuKTsKKyAgcmV0dXJuIGlrbi5zZXQ7Cit9CisKK2ludAorZW5xdWV1ZUtleUV2ZW50ICgKKyAgQnJhaWxsZURpc3BsYXkgKmJybCwKKyAgS2V5R3JvdXAgZ3JvdXAsIEtleU51bWJlciBudW1iZXIsIGludCBwcmVzcworKSB7CisgIHJlcG9ydChSRVBPUlRfQlJBSUxMRV9LRVlfRVZFTlQsIE5VTEwpOworICBpZiAoYXBpLmhhbmRsZUtleUV2ZW50KGdyb3VwLCBudW1iZXIsIHByZXNzKSkgcmV0dXJuIDE7CisKKyAgaWYgKGJybC0+a2V5VGFibGUpIHsKKyAgICBwcm9jZXNzS2V5RXZlbnQoYnJsLT5rZXlUYWJsZSwgZ2V0Q3VycmVudENvbW1hbmRDb250ZXh0KCksIGdyb3VwLCBudW1iZXIsIHByZXNzKTsKKyAgICByZXR1cm4gMTsKKyAgfQorCisgIHJldHVybiAwOworfQorCitpbnQKK2VucXVldWVLZXlFdmVudHMgKAorICBCcmFpbGxlRGlzcGxheSAqYnJsLAorICBLZXlOdW1iZXJTZXQgc2V0LCBLZXlHcm91cCBncm91cCwgS2V5TnVtYmVyIG51bWJlciwgaW50IHByZXNzCispIHsKKyAgd2hpbGUgKHNldCkgeworICAgIGlmIChzZXQgJiAwWDEpIHsKKyAgICAgIGlmICghZW5xdWV1ZUtleUV2ZW50KGJybCwgZ3JvdXAsIG51bWJlciwgcHJlc3MpKSB7CisgICAgICAgIHJldHVybiAwOworICAgICAgfQorICAgIH0KKworICAgIHNldCA+Pj0gMTsKKyAgICBudW1iZXIgKz0gMTsKKyAgfQorCisgIHJldHVybiAxOworfQorCitpbnQKK2VucXVldWVLZXkgKAorICBCcmFpbGxlRGlzcGxheSAqYnJsLAorICBLZXlHcm91cCBncm91cCwgS2V5TnVtYmVyIG51bWJlcgorKSB7CisgIGlmIChlbnF1ZXVlS2V5RXZlbnQoYnJsLCBncm91cCwgbnVtYmVyLCAxKSkgeworICAgIGlmIChlbnF1ZXVlS2V5RXZlbnQoYnJsLCBncm91cCwgbnVtYmVyLCAwKSkgeworICAgICAgcmV0dXJuIDE7CisgICAgfQorICB9CisKKyAgcmV0dXJuIDA7Cit9CisKK2ludAorZW5xdWV1ZUtleXMgKAorICBCcmFpbGxlRGlzcGxheSAqYnJsLAorICBLZXlOdW1iZXJTZXQgc2V0LCBLZXlHcm91cCBncm91cCwgS2V5TnVtYmVyIG51bWJlcgorKSB7CisgIEtleU51bWJlciBzdGFja1tVSU5UOF9NQVggKyAxXTsKKyAgdW5zaWduZWQgY2hhciBjb3VudCA9IDA7CisKKyAgd2hpbGUgKHNldCkgeworICAgIGlmIChzZXQgJiAwWDEpIHsKKyAgICAgIGlmICghZW5xdWV1ZUtleUV2ZW50KGJybCwgZ3JvdXAsIG51bWJlciwgMSkpIHJldHVybiAwOworICAgICAgc3RhY2tbY291bnQrK10gPSBudW1iZXI7CisgICAgfQorCisgICAgc2V0ID4+PSAxOworICAgIG51bWJlciArPSAxOworICB9CisKKyAgd2hpbGUgKGNvdW50KSB7CisgICAgaWYgKCFlbnF1ZXVlS2V5RXZlbnQoYnJsLCBncm91cCwgc3RhY2tbLS1jb3VudF0sIDApKSB7CisgICAgICByZXR1cm4gMDsKKyAgICB9CisgIH0KKworICByZXR1cm4gMTsKK30KKworaW50CitlbnF1ZXVlVXBkYXRlZEtleXMgKAorICBCcmFpbGxlRGlzcGxheSAqYnJsLAorICBLZXlOdW1iZXJTZXQgbmV3LCBLZXlOdW1iZXJTZXQgKm9sZCwgS2V5R3JvdXAgZ3JvdXAsIEtleU51bWJlciBudW1iZXIKKykgeworICBLZXlOdW1iZXJTZXQgYml0ID0gS0VZX05VTUJFUl9CSVQoMCk7CisgIEtleU51bWJlciBzdGFja1tVSU5UOF9NQVggKyAxXTsKKyAgdW5zaWduZWQgY2hhciBjb3VudCA9IDA7CisKKyAgd2hpbGUgKCpvbGQgIT0gbmV3KSB7CisgICAgaWYgKChuZXcgJiBiaXQpICYmICEoKm9sZCAmIGJpdCkpIHsKKyAgICAgIHN0YWNrW2NvdW50KytdID0gbnVtYmVyOworICAgICAgKm9sZCB8PSBiaXQ7CisgICAgfSBlbHNlIGlmICghKG5ldyAmIGJpdCkgJiYgKCpvbGQgJiBiaXQpKSB7CisgICAgICBpZiAoIWVucXVldWVLZXlFdmVudChicmwsIGdyb3VwLCBudW1iZXIsIDApKSByZXR1cm4gMDsKKyAgICAgICpvbGQgJj0gfmJpdDsKKyAgICB9CisKKyAgICBudW1iZXIgKz0gMTsKKyAgICBiaXQgPDw9IDE7CisgIH0KKworICB3aGlsZSAoY291bnQpIHsKKyAgICBpZiAoIWVucXVldWVLZXlFdmVudChicmwsIGdyb3VwLCBzdGFja1stLWNvdW50XSwgMSkpIHsKKyAgICAgIHJldHVybiAwOworICAgIH0KKyAgfQorCisgIHJldHVybiAxOworfQorCitpbnQKK2VucXVldWVVcGRhdGVkS2V5R3JvdXAgKAorICBCcmFpbGxlRGlzcGxheSAqYnJsLAorICB1bnNpZ25lZCBpbnQgY291bnQsCisgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKm5ldywKKyAgdW5zaWduZWQgY2hhciAqb2xkLAorICBLZXlHcm91cCBncm91cAorKSB7CisgIEtleU51bWJlciBwcmVzc1N0YWNrW2NvdW50XTsKKyAgdW5zaWduZWQgY2hhciBwcmVzc0NvdW50ID0gMDsKKyAgS2V5TnVtYmVyIGJhc2UgPSAwOworCisgIHdoaWxlIChiYXNlIDwgY291bnQpIHsKKyAgICBLZXlOdW1iZXIgbnVtYmVyID0gYmFzZTsKKyAgICB1bnNpZ25lZCBjaGFyIGJpdCA9IDE7CisKKyAgICB3aGlsZSAoKm9sZCAhPSAqbmV3KSB7CisgICAgICB1bnNpZ25lZCBjaGFyIGlzUHJlc3NlZCA9ICpuZXcgJiBiaXQ7CisgICAgICB1bnNpZ25lZCBjaGFyIHdhc1ByZXNzZWQgPSAqb2xkICYgYml0OworCisgICAgICBpZiAoaXNQcmVzc2VkICYmICF3YXNQcmVzc2VkKSB7CisgICAgICAgICpvbGQgfD0gYml0OworICAgICAgICBwcmVzc1N0YWNrW3ByZXNzQ291bnQrK10gPSBudW1iZXI7CisgICAgICB9IGVsc2UgaWYgKHdhc1ByZXNzZWQgJiYgIWlzUHJlc3NlZCkgeworICAgICAgICAqb2xkICY9IH5iaXQ7CisgICAgICAgIGVucXVldWVLZXlFdmVudChicmwsIGdyb3VwLCBudW1iZXIsIDApOworICAgICAgfQorCisgICAgICBpZiAoKytudW1iZXIgPT0gY291bnQpIGJyZWFrOworICAgICAgYml0IDw8PSAxOworICAgIH0KKworICAgIG9sZCArPSAxOworICAgIG5ldyArPSAxOworICAgIGJhc2UgKz0gODsKKyAgfQorCisgIHdoaWxlIChwcmVzc0NvdW50ID4gMCkgeworICAgIGVucXVldWVLZXlFdmVudChicmwsIGdyb3VwLCBwcmVzc1N0YWNrWy0tcHJlc3NDb3VudF0sIDEpOworICB9CisKKyAgcmV0dXJuIDE7Cit9CisKK2ludAorZW5xdWV1ZVh0U2NhbkNvZGUgKAorICBCcmFpbGxlRGlzcGxheSAqYnJsLAorICB1bnNpZ25lZCBjaGFyIGtleSwgdW5zaWduZWQgY2hhciBlc2NhcGUsCisgIEtleUdyb3VwIGdyb3VwMDAsIEtleUdyb3VwIGdyb3VwRTAsIEtleUdyb3VwIGdyb3VwRTEKKykgeworICBLZXlHcm91cCBncm91cDsKKworICBzd2l0Y2ggKGVzY2FwZSkgeworICAgIGNhc2UgWFRfTU9EXzAwOiBncm91cCA9IGdyb3VwMDA7IGJyZWFrOworICAgIGNhc2UgWFRfTU9EX0UwOiBncm91cCA9IGdyb3VwRTA7IGJyZWFrOworICAgIGNhc2UgWFRfTU9EX0UxOiBncm91cCA9IGdyb3VwRTE7IGJyZWFrOworCisgICAgZGVmYXVsdDoKKyAgICAgIGxvZ01lc3NhZ2UoTE9HX1dBUk5JTkcsICJ1bnN1cHBvcnRlZCBYVCBzY2FuIGNvZGU6ICUwMlggJTAyWCIsIGVzY2FwZSwga2V5KTsKKyAgICAgIHJldHVybiAwOworICB9CisKKyAgcmV0dXJuIGVucXVldWVLZXkoYnJsLCBncm91cCwga2V5KTsKK30KZGlmZiAtLWdpdCBhL1Byb2dyYW1zL2JybF9jbWRzLmF3ayBiL1Byb2dyYW1zL2JybF9jbWRzLmF3awpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YTIxMDk3Ci0tLSAvZGV2L251bGwKKysrIGIvUHJvZ3JhbXMvYnJsX2NtZHMuYXdrCkBAIC0wLDAgKzEsMTg1IEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisjICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorIworIyBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisjCisjIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisjCisjIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyMgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorIyBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyMKKyMgV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworIworIyBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworQkVHSU4geworICBicmxDb21tYW5kVmFsdWUgPSAwCisgIGJybEJsb2NrVmFsdWUgPSAwCisgIGJybEtleVZhbHVlID0gMAorCisgIGJybEJsb2NrRGVwcmVjYXRpb25zWyJDTElQX05FVyJdID0gIkNVVEJFR0lOIgorICBicmxCbG9ja0RlcHJlY2F0aW9uc1siQ0xJUF9BREQiXSA9ICJDVVRBUFBFTkQiCisgIGJybEJsb2NrRGVwcmVjYXRpb25zWyJDT1BZX0xJTkUiXSA9ICJDVVRMSU5FIgorICBicmxCbG9ja0RlcHJlY2F0aW9uc1siQ09QWV9SRUNUIl0gPSAiQ1VUUkVDVCIKKyAgYnJsQmxvY2tEZXByZWNhdGlvbnNbIkNMSVBfQ09QWSJdID0gIkNPUFlDSEFSUyIKKyAgYnJsQmxvY2tEZXByZWNhdGlvbnNbIkNMSVBfQVBQRU5EIl0gPSAiQVBORENIQVJTIgorfQorCisvXltbOnNwYWNlOl1dKkJSTF9DTURfLyB7CisgIGJybENvbW1hbmQoc3Vic3RyKCQxLCA5KSwgJDEsIGJybENvbW1hbmRWYWx1ZSsrLCBnZXRDb21tZW50KCQwKSkKKyAgbmV4dAorfQorCisvXltbOnNwYWNlOl1dKkJSTF9CTEtfLyB7CisgIHByZWZpeCA9IHN1YnN0cigkMSwgMSwgOCkKKyAgbmFtZSA9IHN1YnN0cigkMSwgOSkKKyAgdmFsdWUgPSBicmxCbG9ja1ZhbHVlKysKKyAgaGVscCA9IGdldENvbW1lbnQoJDApCisKKyAgaWYgKGhlbHAgIX4gL15cKC8pIHsKKyAgICBicmxCbG9jayhuYW1lLCAkMSwgdmFsdWUsIGhlbHApCisKKyAgICBpZiAobmFtZSBpbiBicmxCbG9ja0RlcHJlY2F0aW9ucykgeworICAgICAgYWxpYXMgPSBicmxCbG9ja0RlcHJlY2F0aW9uc1tuYW1lXQorICAgICAgYnJsQmxvY2soYWxpYXMsIHByZWZpeCBhbGlhcywgdmFsdWUsICJkZXByZWNhdGVkIGRlZmluaXRpb24gb2YgIiBuYW1lICIgLSAiIGhlbHApCisgICAgfQorICB9CisKKyAgbmV4dAorfQorCisvXltbOnNwYWNlOl1dKkJSTF9LRVlfLyB7CisgIGdzdWIoIiwiLCAiIiwgJDEpCisgIGtleSA9IHRvbG93ZXIoc3Vic3RyKCQxLCA5KSkKKyAgZ3N1YigiXyIsICItIiwga2V5KQorICBicmxLZXkoc3Vic3RyKCQxLCA5KSwgJDEsIGJybEtleVZhbHVlKyssIGtleSAiIGtleSIpCisgIG5leHQKK30KKworLyNkZWZpbmVbWzpzcGFjZTpdXStCUkxfRkxHXy8geworICBicmxGbGFnKHN1YnN0cigkMiwgOSksICQyLCBnZXREZWZpbmVWYWx1ZSgpLCBnZXRDb21tZW50KCQwKSkKKyAgbmV4dAorfQorCisvI2RlZmluZVtbOnNwYWNlOl1dK0JSTF9ET1QvIHsKKyAgdmFsdWUgPSBnZXREZWZpbmVWYWx1ZSgpCisgIHN1YigiXi4qXFwoIiwgIiIsIHZhbHVlKQorICBzdWIoIlxcKS4qJCIsICIiLCB2YWx1ZSkKKyAgdmFsdWUgPSAyIF4gKHZhbHVlIC0gMSkKKyAgYnJsRG90KHN1YnN0cigkMiwgOCksICQyLCB2YWx1ZSwgZ2V0Q29tbWVudCgkMCkpCisgIG5leHQKK30KKworZnVuY3Rpb24gd3JpdGVIZWFkZXJQcm9sb2d1ZShzeW1ib2wsIGNvcHlyaWdodEZpbGUpIHsKKyAgd3JpdGVDb3B5cmlnaHQoY29weXJpZ2h0RmlsZSkKKworICBoZWFkZXJTeW1ib2wgPSBzeW1ib2wKKyAgcHJpbnQgIiNpZm5kZWYgIiBoZWFkZXJTeW1ib2wKKyAgd3JpdGVNYWNyb0RlZmluaXRpb24oaGVhZGVyU3ltYm9sKQorICBwcmludCAiIgorCisgIHByaW50ICIjaWZkZWYgX19jcGx1c3BsdXMiCisgIHByaW50ICJleHRlcm4gXCJDXCIgeyIKKyAgcHJpbnQgIiNlbmRpZiAvKiBfX2NwbHVzcGx1cyAqLyIKKyAgcHJpbnQgIiIKK30KKworZnVuY3Rpb24gd3JpdGVDb3B5cmlnaHQoZmlsZSkgeworICBpZiAobGVuZ3RoKGZpbGUpID4gMCkgeworICAgIHdoaWxlIChnZXRsaW5lIGxpbmUgPGZpbGUgPT0gMSkgeworICAgICAgaWYgKG1hdGNoKGxpbmUsICJeICovXFwqICokIikpIHsKKyAgICAgICAgcHJpbnQgbGluZQorCisgICAgICAgIHdoaWxlIChnZXRsaW5lIGxpbmUgPGZpbGUgPT0gMSkgeworICAgICAgICAgIHByaW50IGxpbmUKKyAgICAgICAgICBpZiAobWF0Y2gobGluZSwgIl4gKlxcKi8gKiQiKSkgYnJlYWsKKyAgICAgICAgfQorCisgICAgICAgIHByaW50ICIiCisgICAgICAgIGJyZWFrCisgICAgICB9CisgICAgfQorICB9Cit9CisKK2Z1bmN0aW9uIHdyaXRlSGVhZGVyRXBpbG9ndWUoKSB7CisgIHByaW50ICIiCisgIHByaW50ICIjaWZkZWYgX19jcGx1c3BsdXMiCisgIHByaW50ICJ9IgorICBwcmludCAiI2VuZGlmIC8qIF9fY3BsdXNwbHVzICovIgorCisgIHByaW50ICIiCisgIHByaW50ICIjZW5kaWYgLyogIiBoZWFkZXJTeW1ib2wgIiAqLyIKK30KKworZnVuY3Rpb24gd3JpdGVNYWNyb0RlZmluaXRpb24obmFtZSwgZGVmaW5pdGlvbiwgaGVscCkgeworICBzdGF0ZW1lbnQgPSAiI2RlZmluZSAiIG5hbWUKKyAgaWYgKGxlbmd0aChkZWZpbml0aW9uKSA+IDApIHN0YXRlbWVudCA9IHN0YXRlbWVudCAiICIgZGVmaW5pdGlvbgorCisgIGlmIChsZW5ndGgoaGVscCkgPiAwKSBwcmludCBtYWtlRG94eWdlbkNvbW1lbnQoaGVscCkKKyAgcHJpbnQgc3RhdGVtZW50Cit9CisKK2Z1bmN0aW9uIGdldENvbW1lbnQobGluZSwgICAgIGNvbW1lbnQsIGxhc3QpIHsKKyAgY29tbWVudCA9ICIiCisKKyAgaWYgKG1hdGNoKGxpbmUsICIvXFwqIikpIHsKKyAgICBsaW5lID0gc3Vic3RyKGxpbmUsIFJTVEFSVCsyKQorICAgIGdzdWIoIl5cXCoqPD8gKiIsICIiLCBsaW5lKQorCisgICAgd2hpbGUgKDEpIHsKKyAgICAgIGxhc3QgPSBnc3ViKCJcXCovLiokIiwgIiIsIGxpbmUpCisgICAgICBnc3ViKCIgKiQiLCAiIiwgbGluZSkKKworICAgICAgaWYgKGxlbmd0aChjb21tZW50KSA+IDApIGNvbW1lbnQgPSBjb21tZW50ICIgIgorICAgICAgY29tbWVudCA9IGNvbW1lbnQgbGluZQorICAgICAgaWYgKGxhc3QpIGJyZWFrCisKKyAgICAgIGdldGxpbmUgbGluZQorICAgICAgZ3N1YigiXltbOnNwYWNlOl1dKlxcKipbWzpzcGFjZTpdXSoiLCAiIiwgbGluZSkKKyAgICB9CisgIH0gZWxzZSBpZiAobWF0Y2gobGluZSwgIi8vIikpIHsKKyAgICBjb21tZW50ID0gc3Vic3RyKGxpbmUsIFJTVEFSVCsyKTsKKyAgICBnc3ViKCJeICoiLCAiIiwgY29tbWVudCkKKworICAgIGdzdWIoIlxcKi8uKiQiLCAiIiwgY29tbWVudCkKKyAgICBnc3ViKCIgKiQiLCAiIiwgY29tbWVudCkKKyAgfQorCisgIHJldHVybiBjb21tZW50Cit9CisKK2Z1bmN0aW9uIGdldERlZmluZVZhbHVlKCkgeworICBpZiAoJDMgIX4gIl5cXCgiKSByZXR1cm4gZ2V0Tm9ybWFsaXplZENvbnN0YW50KCQzKQorICBpZiAobWF0Y2goJDAsICJcXChbXildKlxcKSIpKSByZXR1cm4gc3Vic3RyKCQwLCBSU1RBUlQsIFJMRU5HVEgpCisgIHJldHVybiAiIgorfQorCitmdW5jdGlvbiBnZXROb3JtYWxpemVkQ29uc3RhbnQodmFsdWUpIHsKKyAgIGlmICh2YWx1ZSB+ICJeVUlOVDY0X0NcXCguK1xcKSQiKSB2YWx1ZSA9IHN1YnN0cih2YWx1ZSwgMTAsIGxlbmd0aCh2YWx1ZSktMTApCisgICByZXR1cm4gdmFsdWUKK30KKworZnVuY3Rpb24gbWFrZURveHlnZW5Db21tZW50KHRleHQpIHsKKyAgcmV0dXJuICIvKiogIiB0ZXh0ICIgKi8iCit9CisKK2Z1bmN0aW9uIG1ha2VUcmFuc2xhdG9yTm90ZSh0ZXh0KSB7CisgIHJldHVybiAiLy8geGdldHRleHQ6ICIgdGV4dAorfQorCitmdW5jdGlvbiBiZWdpbkRveHlnZW5GaWxlKCkgeworICBwcmludCAiLyoqIFxcZmlsZSIKKyAgcHJpbnQgIiAqLyIKKyAgcHJpbnQgIiIKK30KKworZnVuY3Rpb24gZ2V0QnJsYXBpS2V5TmFtZShuYW1lKSB7CisgIGlmIChuYW1lID09ICJFTlRFUiIpIHJldHVybiAiTElORUZFRUQiCisgIGlmIChuYW1lIH4gL15DVVJTT1JfLykgcmV0dXJuIHN1YnN0cihuYW1lLCA4KQorICByZXR1cm4gbmFtZQorfQpkaWZmIC0tZ2l0IGEvUHJvZ3JhbXMvYnJsX2RyaXZlci5jIGIvUHJvZ3JhbXMvYnJsX2RyaXZlci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYwYTEzN2QKLS0tIC9kZXYvbnVsbAorKysgYi9Qcm9ncmFtcy9icmxfZHJpdmVyLmMKQEAgLTAsMCArMSwxMDIgQEAKKy8qCisgKiBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorICogICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorICoKKyAqIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorICoKKyAqIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyAqLworCisjaW5jbHVkZSAicHJvbG9ndWUuaCIKKworI2luY2x1ZGUgImxvZy5oIgorI2luY2x1ZGUgImRyaXZlcnMuaCIKKyNpbmNsdWRlICJicmwuaCIKKworI2RlZmluZSBCUkxTWU1CT0wgbm9CcmFpbGxlCisjZGVmaW5lIERSSVZFUl9OQU1FIE5vQnJhaWxsZQorI2RlZmluZSBEUklWRVJfQ09ERSBubworI2RlZmluZSBEUklWRVJfQ09NTUVOVCAibm8gYnJhaWxsZSBzdXBwb3J0IgorI2RlZmluZSBEUklWRVJfVkVSU0lPTiAiIgorI2RlZmluZSBEUklWRVJfREVWRUxPUEVSUyAiIgorI2luY2x1ZGUgImJybF9kcml2ZXIuaCIKKyNpbmNsdWRlICJicmwuYXV0by5oIgorCitzdGF0aWMgaW50Citjb25uZWN0UmVzb3VyY2UgKEJyYWlsbGVEaXNwbGF5ICpicmwsIGNvbnN0IGNoYXIgKmlkZW50aWZpZXIpIHsKKyAgR2lvRGVzY3JpcHRvciBkZXNjcmlwdG9yOworICBnaW9Jbml0aWFsaXplRGVzY3JpcHRvcigmZGVzY3JpcHRvcik7CisKKyAgaWYgKGNvbm5lY3RCcmFpbGxlUmVzb3VyY2UoYnJsLCBpZGVudGlmaWVyLCAmZGVzY3JpcHRvciwgTlVMTCkpIHsKKyAgICByZXR1cm4gMTsKKyAgfQorCisgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50CiticmxfY29uc3RydWN0IChCcmFpbGxlRGlzcGxheSAqYnJsLCBjaGFyICoqcGFyYW1ldGVycywgY29uc3QgY2hhciAqZGV2aWNlKSB7CisgIGlmIChjb25uZWN0UmVzb3VyY2UoYnJsLCAibnVsbDoiKSkgeworICAgIHJldHVybiAxOworICB9CisKKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkCiticmxfZGVzdHJ1Y3QgKEJyYWlsbGVEaXNwbGF5ICpicmwgVU5VU0VEKSB7CisgIGRpc2Nvbm5lY3RCcmFpbGxlUmVzb3VyY2UoYnJsLCBOVUxMKTsKK30KKworc3RhdGljIGludAorYnJsX3JlYWRDb21tYW5kIChCcmFpbGxlRGlzcGxheSAqYnJsIFVOVVNFRCwgS2V5VGFibGVDb21tYW5kQ29udGV4dCBjb250ZXh0IFVOVVNFRCkgeworICByZXR1cm4gRU9GOworfQorCitzdGF0aWMgaW50Citicmxfd3JpdGVXaW5kb3cgKEJyYWlsbGVEaXNwbGF5ICpicmwgVU5VU0VELCBjb25zdCB3Y2hhcl90ICpjaGFyYWN0ZXJzIFVOVVNFRCkgeworICByZXR1cm4gMTsKK30KKworY29uc3QgQnJhaWxsZURyaXZlciAqYnJhaWxsZSA9ICZub0JyYWlsbGU7CisKK2ludAoraGF2ZUJyYWlsbGVEcml2ZXIgKGNvbnN0IGNoYXIgKmNvZGUpIHsKKyAgcmV0dXJuIGhhdmVEcml2ZXIoY29kZSwgQlJBSUxMRV9EUklWRVJfQ09ERVMsIGRyaXZlclRhYmxlKTsKK30KKworY29uc3QgY2hhciAqCitnZXREZWZhdWx0QnJhaWxsZURyaXZlciAodm9pZCkgeworICByZXR1cm4gZ2V0RGVmYXVsdERyaXZlcihkcml2ZXJUYWJsZSk7Cit9CisKK2NvbnN0IEJyYWlsbGVEcml2ZXIgKgorbG9hZEJyYWlsbGVEcml2ZXIgKGNvbnN0IGNoYXIgKmNvZGUsIHZvaWQgKipkcml2ZXJPYmplY3QsIGNvbnN0IGNoYXIgKmRyaXZlckRpcmVjdG9yeSkgeworICByZXR1cm4gbG9hZERyaXZlcihjb2RlLCBkcml2ZXJPYmplY3QsCisgICAgICAgICAgICAgICAgICAgIGRyaXZlckRpcmVjdG9yeSwgZHJpdmVyVGFibGUsCisgICAgICAgICAgICAgICAgICAgICJicmFpbGxlIiwgJ2InLCAiYnJsIiwKKyAgICAgICAgICAgICAgICAgICAgJm5vQnJhaWxsZSwgJm5vQnJhaWxsZS5kZWZpbml0aW9uKTsKK30KKwordm9pZAoraWRlbnRpZnlCcmFpbGxlRHJpdmVyIChjb25zdCBCcmFpbGxlRHJpdmVyICpkcml2ZXIsIGludCBmdWxsKSB7CisgIGlkZW50aWZ5RHJpdmVyKCJCcmFpbGxlIiwgJmRyaXZlci0+ZGVmaW5pdGlvbiwgZnVsbCk7Cit9CisKK3ZvaWQKK2lkZW50aWZ5QnJhaWxsZURyaXZlcnMgKGludCBmdWxsKSB7CisgIGNvbnN0IERyaXZlckVudHJ5ICplbnRyeSA9IGRyaXZlclRhYmxlOworICB3aGlsZSAoZW50cnktPmFkZHJlc3MpIHsKKyAgICBjb25zdCBCcmFpbGxlRHJpdmVyICpkcml2ZXIgPSBlbnRyeSsrLT5hZGRyZXNzOworICAgIGlkZW50aWZ5QnJhaWxsZURyaXZlcihkcml2ZXIsIGZ1bGwpOworICB9Cit9CmRpZmYgLS1naXQgYS9Qcm9ncmFtcy9icmxfaW5wdXQuYyBiL1Byb2dyYW1zL2JybF9pbnB1dC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg5OWMzNzIKLS0tIC9kZXYvbnVsbAorKysgYi9Qcm9ncmFtcy9icmxfaW5wdXQuYwpAQCAtMCwwICsxLDExMSBAQAorLyoKKyAqIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisgKiAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisgKgorICogQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKKyNpbmNsdWRlICJwcm9sb2d1ZS5oIgorCisjaW5jbHVkZSA8c3RkaW8uaD4KKworI2luY2x1ZGUgImxvZy5oIgorI2luY2x1ZGUgImVtYmVkLmgiCisjaW5jbHVkZSAicGFyYW1ldGVycy5oIgorI2luY2x1ZGUgImFwaV9jb250cm9sLmgiCisjaW5jbHVkZSAiYnJsX2lucHV0LmgiCisjaW5jbHVkZSAiYnJsX3V0aWxzLmgiCisjaW5jbHVkZSAiYnJsX2NtZHMuaCIKKyNpbmNsdWRlICJjbWRfcXVldWUuaCIKKyNpbmNsdWRlICJjbWRfZW5xdWV1ZS5oIgorI2luY2x1ZGUgImlvX2dlbmVyaWMuaCIKKyNpbmNsdWRlICJjb3JlLmgiCisKK3N0YXRpYyBpbnQKK3Byb2Nlc3NJbnB1dCAodm9pZCkgeworICBpbnQgY29tbWFuZCA9IHJlYWRCcmFpbGxlQ29tbWFuZCgmYnJsLCBnZXRDdXJyZW50Q29tbWFuZENvbnRleHQoKSk7CisKKyAgaWYgKGNvbW1hbmQgIT0gRU9GKSB7CisgICAgc3dpdGNoIChjb21tYW5kICYgQlJMX01TS19DTUQpIHsKKyAgICAgIGNhc2UgQlJMX0NNRF9PRkZMSU5FOgorICAgICAgICBzZXRCcmFpbGxlT2ZmbGluZSgmYnJsKTsKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgfQorCisgIHNldEJyYWlsbGVPbmxpbmUoJmJybCk7CisgIGlmIChjb21tYW5kID09IEVPRikgcmV0dXJuIDA7CisgIGVucXVldWVDb21tYW5kKGNvbW1hbmQpOworICByZXR1cm4gMTsKK30KKworc3RhdGljCitHSU9fSU5QVVRfSEFORExFUihoYW5kbGVCcmFpbGxlSW5wdXQpIHsKKyAgaW50IHByb2Nlc3NlZCA9IDA7CisKKyAgeworICAgIGludCBlcnJvciA9IHBhcmFtZXRlcnMtPmVycm9yOworCisgICAgaWYgKGVycm9yKSB7CisgICAgICBsb2dBY3Rpb25FcnJvcihlcnJvciwgImJyYWlsbGUgaW5wdXQgbW9uaXRvciIpOworICAgICAgYnJsLmhhc0ZhaWxlZCA9IDE7CisgICAgICByZXR1cm4gMDsKKyAgICB9CisgIH0KKworICBzdXNwZW5kQ29tbWFuZFF1ZXVlKCk7CisKKyAgaWYgKCFicmwuaXNTdXNwZW5kZWQpIHsKKyAgICBhcGkuY2xhaW1Ecml2ZXIoKTsKKyAgICBpZiAocHJvY2Vzc0lucHV0KCkpIHByb2Nlc3NlZCA9IDE7CisgICAgYXBpLnJlbGVhc2VEcml2ZXIoKTsKKyAgfQorCisjaWZkZWYgRU5BQkxFX0FQSQorICBlbHNlIGlmIChhcGkuaXNTZXJ2ZXJSdW5uaW5nKCkpIHsKKyAgICBzd2l0Y2ggKHJlYWRCcmFpbGxlQ29tbWFuZCgmYnJsLCBLVEJfQ1RYX0RFRkFVTFQpKSB7CisgICAgICBjYXNlIEJSTF9DTURfUkVTVEFSVEJSTDoKKyAgICAgICAgYnJsLmhhc0ZhaWxlZCA9IDE7CisgICAgICAgIGJyZWFrOworCisgICAgICBkZWZhdWx0OgorICAgICAgICBwcm9jZXNzZWQgPSAxOworICAgICAgY2FzZSBFT0Y6CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgfQorI2VuZGlmIC8qIEVOQUJMRV9BUEkgKi8KKworICByZXN1bWVDb21tYW5kUXVldWUoKTsKKyAgcmV0dXJuIHByb2Nlc3NlZDsKK30KKworc3RhdGljIEdpb0hhbmRsZUlucHV0T2JqZWN0ICpoYW5kbGVCcmFpbGxlSW5wdXRPYmplY3QgPSBOVUxMOworCit2b2lkCitzdG9wQnJhaWxsZUlucHV0ICh2b2lkKSB7CisgIGlmIChoYW5kbGVCcmFpbGxlSW5wdXRPYmplY3QpIHsKKyAgICBnaW9EZXN0cm95SGFuZGxlSW5wdXRPYmplY3QoaGFuZGxlQnJhaWxsZUlucHV0T2JqZWN0KTsKKyAgICBoYW5kbGVCcmFpbGxlSW5wdXRPYmplY3QgPSBOVUxMOworICB9Cit9CisKK3ZvaWQKK3N0YXJ0QnJhaWxsZUlucHV0ICh2b2lkKSB7CisgIHN0b3BCcmFpbGxlSW5wdXQoKTsKKyAgaGFuZGxlQnJhaWxsZUlucHV0T2JqZWN0ID0gZ2lvTmV3SGFuZGxlSW5wdXRPYmplY3QoYnJsLmdpb0VuZHBvaW50LCBCUkFJTExFX0RSSVZFUl9JTlBVVF9QT0xMX0lOVEVSVkFMLCBoYW5kbGVCcmFpbGxlSW5wdXQsICZicmwpOworfQpkaWZmIC0tZ2l0IGEvUHJvZ3JhbXMvYnJsX2lucHV0LmggYi9Qcm9ncmFtcy9icmxfaW5wdXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZDk4NjZlCi0tLSAvZGV2L251bGwKKysrIGIvUHJvZ3JhbXMvYnJsX2lucHV0LmgKQEAgLTAsMCArMSwzMyBAQAorLyoKKyAqIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisgKiAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisgKgorICogQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKKyNpZm5kZWYgQlJMVFRZX0lOQ0xVREVEX0JSTF9JTlBVVAorI2RlZmluZSBCUkxUVFlfSU5DTFVERURfQlJMX0lOUFVUCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYgLyogX19jcGx1c3BsdXMgKi8KKworZXh0ZXJuIHZvaWQgc3RhcnRCcmFpbGxlSW5wdXQgKHZvaWQpOworZXh0ZXJuIHZvaWQgc3RvcEJyYWlsbGVJbnB1dCAodm9pZCk7CisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmIC8qIF9fY3BsdXNwbHVzICovCisKKyNlbmRpZiAvKiBCUkxUVFlfSU5DTFVERURfQlJMX0lOUFVUICovCmRpZmYgLS1naXQgYS9Qcm9ncmFtcy9icmxfdXRpbHMuYyBiL1Byb2dyYW1zL2JybF91dGlscy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJlMzliOTAKLS0tIC9kZXYvbnVsbAorKysgYi9Qcm9ncmFtcy9icmxfdXRpbHMuYwpAQCAtMCwwICsxLDI1NSBAQAorLyoKKyAqIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisgKiAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisgKgorICogQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKKyNpbmNsdWRlICJwcm9sb2d1ZS5oIgorCisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKyNpbmNsdWRlICJsb2cuaCIKKyNpbmNsdWRlICJyZXBvcnQuaCIKKyNpbmNsdWRlICJhcGlfY29udHJvbC5oIgorI2luY2x1ZGUgImJybF91dGlscy5oIgorI2luY2x1ZGUgImJybF9kb3RzLmgiCisjaW5jbHVkZSAiYXN5bmNfd2FpdC5oIgorI2luY2x1ZGUgImt0Yi5oIgorCit2b2lkCitkcmFpbkJyYWlsbGVPdXRwdXQgKEJyYWlsbGVEaXNwbGF5ICpicmwsIGludCBtaW5pbXVtRGVsYXkpIHsKKyAgaW50IGR1cmF0aW9uID0gYnJsLT53cml0ZURlbGF5ICsgMTsKKworICBicmwtPndyaXRlRGVsYXkgPSAwOworICBpZiAoZHVyYXRpb24gPCBtaW5pbXVtRGVsYXkpIGR1cmF0aW9uID0gbWluaW11bURlbGF5OworICBhc3luY1dhaXQoZHVyYXRpb24pOworfQorCit2b2lkCithbm5vdW5jZUJyYWlsbGVPZmZsaW5lICh2b2lkKSB7CisgIGxvZ01lc3NhZ2UoTE9HX0RFQlVHLCAiYnJhaWxsZSBpcyBvZmZsaW5lIik7CisgIGFwaS51cGRhdGVQYXJhbWV0ZXIoQlJMQVBJX1BBUkFNX0RFVklDRV9PTkxJTkUsIDApOworICByZXBvcnQoUkVQT1JUX0JSQUlMTEVfREVWSUNFX09GRkxJTkUsIE5VTEwpOworfQorCit2b2lkCithbm5vdW5jZUJyYWlsbGVPbmxpbmUgKHZvaWQpIHsKKyAgbG9nTWVzc2FnZShMT0dfREVCVUcsICJicmFpbGxlIGlzIG9ubGluZSIpOworICBhcGkudXBkYXRlUGFyYW1ldGVyKEJSTEFQSV9QQVJBTV9ERVZJQ0VfT05MSU5FLCAwKTsKKyAgcmVwb3J0KFJFUE9SVF9CUkFJTExFX0RFVklDRV9PTkxJTkUsIE5VTEwpOworfQorCit2b2lkCitzZXRCcmFpbGxlT2ZmbGluZSAoQnJhaWxsZURpc3BsYXkgKmJybCkgeworICBpZiAoIWJybC0+aXNPZmZsaW5lKSB7CisgICAgYnJsLT5pc09mZmxpbmUgPSAxOworICAgIGFubm91bmNlQnJhaWxsZU9mZmxpbmUoKTsKKworICAgIHsKKyAgICAgIEtleVRhYmxlICprZXlUYWJsZSA9IGJybC0+a2V5VGFibGU7CisKKyAgICAgIGlmIChrZXlUYWJsZSkgcmVsZWFzZUFsbEtleXMoa2V5VGFibGUpOworICAgIH0KKyAgfQorfQorCit2b2lkCitzZXRCcmFpbGxlT25saW5lIChCcmFpbGxlRGlzcGxheSAqYnJsKSB7CisgIGlmIChicmwtPmlzT2ZmbGluZSkgeworICAgIGJybC0+aXNPZmZsaW5lID0gMDsKKyAgICBhbm5vdW5jZUJyYWlsbGVPbmxpbmUoKTsKKworICAgIGJybC0+d3JpdGVEZWxheSA9IDA7CisgIH0KK30KKworaW50CitjZWxsc0hhdmVDaGFuZ2VkICgKKyAgdW5zaWduZWQgY2hhciAqY2VsbHMsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKm5ldywgdW5zaWduZWQgaW50IGNvdW50LAorICB1bnNpZ25lZCBpbnQgKmZyb20sIHVuc2lnbmVkIGludCAqdG8sIHVuc2lnbmVkIGNoYXIgKmZvcmNlCispIHsKKyAgdW5zaWduZWQgaW50IGZpcnN0ID0gMDsKKworICBpZiAoZm9yY2UgJiYgKmZvcmNlKSB7CisgICAgKmZvcmNlID0gMDsKKyAgfSBlbHNlIGlmIChtZW1jbXAoY2VsbHMsIG5ldywgY291bnQpICE9IDApIHsKKyAgICBpZiAodG8pIHsKKyAgICAgIHdoaWxlIChjb3VudCkgeworICAgICAgICB1bnNpZ25lZCBpbnQgbGFzdCA9IGNvdW50IC0gMTsKKyAgICAgICAgaWYgKGNlbGxzW2xhc3RdICE9IG5ld1tsYXN0XSkgYnJlYWs7CisgICAgICAgIGNvdW50ID0gbGFzdDsKKyAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoZnJvbSkgeworICAgICAgd2hpbGUgKGZpcnN0IDwgY291bnQpIHsKKyAgICAgICAgaWYgKGNlbGxzW2ZpcnN0XSAhPSBuZXdbZmlyc3RdKSBicmVhazsKKyAgICAgICAgZmlyc3QgKz0gMTsKKyAgICAgIH0KKyAgICB9CisgIH0gZWxzZSB7CisgICAgcmV0dXJuIDA7CisgIH0KKworICBpZiAoZnJvbSkgKmZyb20gPSBmaXJzdDsKKyAgaWYgKHRvKSAqdG8gPSBjb3VudDsKKworICBtZW1jcHkoY2VsbHMrZmlyc3QsIG5ldytmaXJzdCwgY291bnQtZmlyc3QpOworICByZXR1cm4gMTsKK30KKworaW50Cit0ZXh0SGFzQ2hhbmdlZCAoCisgIHdjaGFyX3QgKnRleHQsIGNvbnN0IHdjaGFyX3QgKm5ldywgdW5zaWduZWQgaW50IGNvdW50LAorICB1bnNpZ25lZCBpbnQgKmZyb20sIHVuc2lnbmVkIGludCAqdG8sIHVuc2lnbmVkIGNoYXIgKmZvcmNlCispIHsKKyAgdW5zaWduZWQgaW50IGZpcnN0ID0gMDsKKworICBpZiAoZm9yY2UgJiYgKmZvcmNlKSB7CisgICAgKmZvcmNlID0gMDsKKyAgfSBlbHNlIGlmICh3bWVtY21wKHRleHQsIG5ldywgY291bnQpICE9IDApIHsKKyAgICBpZiAodG8pIHsKKyAgICAgIHdoaWxlIChjb3VudCkgeworICAgICAgICB1bnNpZ25lZCBpbnQgbGFzdCA9IGNvdW50IC0gMTsKKyAgICAgICAgaWYgKHRleHRbbGFzdF0gIT0gbmV3W2xhc3RdKSBicmVhazsKKyAgICAgICAgY291bnQgPSBsYXN0OworICAgICAgfQorICAgIH0KKworICAgIGlmIChmcm9tKSB7CisgICAgICB3aGlsZSAoZmlyc3QgPCBjb3VudCkgeworICAgICAgICBpZiAodGV4dFtmaXJzdF0gIT0gbmV3W2ZpcnN0XSkgYnJlYWs7CisgICAgICAgIGZpcnN0ICs9IDE7CisgICAgICB9CisgICAgfQorICB9IGVsc2UgeworICAgIHJldHVybiAwOworICB9CisKKyAgaWYgKGZyb20pICpmcm9tID0gZmlyc3Q7CisgIGlmICh0bykgKnRvID0gY291bnQ7CisKKyAgd21lbWNweSh0ZXh0K2ZpcnN0LCBuZXcrZmlyc3QsIGNvdW50LWZpcnN0KTsKKyAgcmV0dXJuIDE7Cit9CisKK2ludAorY3Vyc29ySGFzQ2hhbmdlZCAoaW50ICpjdXJzb3IsIGludCBuZXcsIHVuc2lnbmVkIGNoYXIgKmZvcmNlKSB7CisgIGlmIChmb3JjZSAmJiAqZm9yY2UpIHsKKyAgICAqZm9yY2UgPSAwOworICB9IGVsc2UgaWYgKG5ldyA9PSAqY3Vyc29yKSB7CisgICAgcmV0dXJuIDA7CisgIH0KKworICAqY3Vyc29yID0gbmV3OworICByZXR1cm4gMTsKK30KKwordW5zaWduZWQgY2hhcgordG9Mb3dlckRpZ2l0ICh1bnNpZ25lZCBjaGFyIHVwcGVyKSB7CisgIHVuc2lnbmVkIGNoYXIgbG93ZXIgPSAwOworICBpZiAodXBwZXIgJiBCUkxfRE9UXzEpIGxvd2VyIHw9IEJSTF9ET1RfMzsKKyAgaWYgKHVwcGVyICYgQlJMX0RPVF8yKSBsb3dlciB8PSBCUkxfRE9UXzc7CisgIGlmICh1cHBlciAmIEJSTF9ET1RfNCkgbG93ZXIgfD0gQlJMX0RPVF82OworICBpZiAodXBwZXIgJiBCUkxfRE9UXzUpIGxvd2VyIHw9IEJSTF9ET1RfODsKKyAgcmV0dXJuIGxvd2VyOworfQorCisvKiBEb3RzIGZvciBsYW5kc2NhcGUgKGNvdW50ZXJjbG9ja3dpc2Utcm90YXRlZCkgZGlnaXRzLiAqLworY29uc3QgRGlnaXRzVGFibGUgbGFuZHNjYXBlRGlnaXRzID0geworICBbIDBdID0gQlJMX0RPVF8xIHwgQlJMX0RPVF81IHwgQlJMX0RPVF8yLAorICBbIDFdID0gQlJMX0RPVF80LAorICBbIDJdID0gQlJMX0RPVF80IHwgQlJMX0RPVF8xLAorICBbIDNdID0gQlJMX0RPVF80IHwgQlJMX0RPVF81LAorICBbIDRdID0gQlJMX0RPVF80IHwgQlJMX0RPVF81IHwgQlJMX0RPVF8yLAorICBbIDVdID0gQlJMX0RPVF80IHwgQlJMX0RPVF8yLAorICBbIDZdID0gQlJMX0RPVF80IHwgQlJMX0RPVF8xIHwgQlJMX0RPVF81LAorICBbIDddID0gQlJMX0RPVF80IHwgQlJMX0RPVF8xIHwgQlJMX0RPVF81IHwgQlJMX0RPVF8yLAorICBbIDhdID0gQlJMX0RPVF80IHwgQlJMX0RPVF8xIHwgQlJMX0RPVF8yLAorICBbIDldID0gQlJMX0RPVF8xIHwgQlJMX0RPVF81LAorICBbMTBdID0gQlJMX0RPVF8xIHwgQlJMX0RPVF8yIHwgQlJMX0RPVF80IHwgQlJMX0RPVF81Cit9OworCisvKiBGb3JtYXQgbGFuZHNjYXBlIHJlcHJlc2VudGF0aW9uIG9mIG51bWJlcnMgMCB0aHJvdWdoIDk5LiAqLwordW5zaWduZWQgY2hhcgorbWFrZUxhbmRzY2FwZU51bWJlciAoaW50IHgpIHsKKyAgcmV0dXJuIGxhbmRzY2FwZURpZ2l0c1soeCAvIDEwKSAlIDEwXSB8IHRvTG93ZXJEaWdpdChsYW5kc2NhcGVEaWdpdHNbeCAlIDEwXSk7ICAKK30KKworLyogRm9ybWF0IGxhbmRzY2FwZSBmbGFnIHN0YXRlIGluZGljYXRvci4gKi8KK3Vuc2lnbmVkIGNoYXIKK21ha2VMYW5kc2NhcGVGbGFnIChpbnQgbnVtYmVyLCBpbnQgb24pIHsKKyAgdW5zaWduZWQgY2hhciBkb3RzID0gbGFuZHNjYXBlRGlnaXRzW251bWJlciAlIDEwXTsKKyAgaWYgKG9uKSBkb3RzIHw9IHRvTG93ZXJEaWdpdChsYW5kc2NhcGVEaWdpdHNbMTBdKTsKKyAgcmV0dXJuIGRvdHM7Cit9CisKKy8qIERvdHMgZm9yIHNlYXNjYXBlIChjbG9ja3dpc2Utcm90YXRlZCkgZGlnaXRzLiAqLworY29uc3QgRGlnaXRzVGFibGUgc2Vhc2NhcGVEaWdpdHMgPSB7CisgIFsgMF0gPSBCUkxfRE9UXzUgfCBCUkxfRE9UXzEgfCBCUkxfRE9UXzQsCisgIFsgMV0gPSBCUkxfRE9UXzIsCisgIFsgMl0gPSBCUkxfRE9UXzIgfCBCUkxfRE9UXzUsCisgIFsgM10gPSBCUkxfRE9UXzIgfCBCUkxfRE9UXzEsCisgIFsgNF0gPSBCUkxfRE9UXzIgfCBCUkxfRE9UXzEgfCBCUkxfRE9UXzQsCisgIFsgNV0gPSBCUkxfRE9UXzIgfCBCUkxfRE9UXzQsCisgIFsgNl0gPSBCUkxfRE9UXzIgfCBCUkxfRE9UXzUgfCBCUkxfRE9UXzEsCisgIFsgN10gPSBCUkxfRE9UXzIgfCBCUkxfRE9UXzUgfCBCUkxfRE9UXzEgfCBCUkxfRE9UXzQsCisgIFsgOF0gPSBCUkxfRE9UXzIgfCBCUkxfRE9UXzUgfCBCUkxfRE9UXzQsCisgIFsgOV0gPSBCUkxfRE9UXzUgfCBCUkxfRE9UXzEsCisgIFsxMF0gPSBCUkxfRE9UXzEgfCBCUkxfRE9UXzIgfCBCUkxfRE9UXzQgfCBCUkxfRE9UXzUKK307CisKKy8qIEZvcm1hdCBzZWFzY2FwZSByZXByZXNlbnRhdGlvbiBvZiBudW1iZXJzIDAgdGhyb3VnaCA5OS4gKi8KK3Vuc2lnbmVkIGNoYXIKK21ha2VTZWFzY2FwZU51bWJlciAoaW50IHgpIHsKKyAgcmV0dXJuIHRvTG93ZXJEaWdpdChzZWFzY2FwZURpZ2l0c1soeCAvIDEwKSAlIDEwXSkgfCBzZWFzY2FwZURpZ2l0c1t4ICUgMTBdOyAgCit9CisKKy8qIEZvcm1hdCBzZWFzY2FwZSBmbGFnIHN0YXRlIGluZGljYXRvci4gKi8KK3Vuc2lnbmVkIGNoYXIKK21ha2VTZWFzY2FwZUZsYWcgKGludCBudW1iZXIsIGludCBvbikgeworICB1bnNpZ25lZCBjaGFyIGRvdHMgPSB0b0xvd2VyRGlnaXQoc2Vhc2NhcGVEaWdpdHNbbnVtYmVyICUgMTBdKTsKKyAgaWYgKG9uKSBkb3RzIHw9IHNlYXNjYXBlRGlnaXRzWzEwXTsKKyAgcmV0dXJuIGRvdHM7Cit9CisKKy8qIERvdHMgZm9yIHBvcnRyYWl0IGRpZ2l0cyAtIDIgbnVtYmVycyBpbiBvbmUgY2VsbHMgKi8KK2NvbnN0IERpZ2l0c1RhYmxlIHBvcnRyYWl0RGlnaXRzID0geworICBbIDBdID0gQlJMX0RPVF8yIHwgQlJMX0RPVF80IHwgQlJMX0RPVF81LAorICBbIDFdID0gQlJMX0RPVF8xLAorICBbIDJdID0gQlJMX0RPVF8xIHwgQlJMX0RPVF8yLAorICBbIDNdID0gQlJMX0RPVF8xIHwgQlJMX0RPVF80LAorICBbIDRdID0gQlJMX0RPVF8xIHwgQlJMX0RPVF80IHwgQlJMX0RPVF81LAorICBbIDVdID0gQlJMX0RPVF8xIHwgQlJMX0RPVF81LAorICBbIDZdID0gQlJMX0RPVF8xIHwgQlJMX0RPVF8yIHwgQlJMX0RPVF80LAorICBbIDddID0gQlJMX0RPVF8xIHwgQlJMX0RPVF8yIHwgQlJMX0RPVF80IHwgQlJMX0RPVF81LAorICBbIDhdID0gQlJMX0RPVF8xIHwgQlJMX0RPVF8yIHwgQlJMX0RPVF81LAorICBbIDldID0gQlJMX0RPVF8yIHwgQlJMX0RPVF80LAorICBbMTBdID0gQlJMX0RPVF8xIHwgQlJMX0RPVF8yIHwgQlJMX0RPVF80IHwgQlJMX0RPVF81Cit9OworCisvKiBGb3JtYXQgcG9ydHJhaXQgcmVwcmVzZW50YXRpb24gb2YgbnVtYmVycyAwIHRocm91Z2ggOTkuICovCit1bnNpZ25lZCBjaGFyCittYWtlUG9ydHJhaXROdW1iZXIgKGludCB4KSB7CisgIHJldHVybiBwb3J0cmFpdERpZ2l0c1soeCAvIDEwKSAlIDEwXSB8IHRvTG93ZXJEaWdpdChwb3J0cmFpdERpZ2l0c1t4ICUgMTBdKTsgIAorfQorCisvKiBGb3JtYXQgcG9ydHJhaXQgZmxhZyBzdGF0ZSBpbmRpY2F0b3IuICovCit1bnNpZ25lZCBjaGFyCittYWtlUG9ydHJhaXRGbGFnIChpbnQgbnVtYmVyLCBpbnQgb24pIHsKKyAgdW5zaWduZWQgY2hhciBkb3RzID0gdG9Mb3dlckRpZ2l0KHBvcnRyYWl0RGlnaXRzW251bWJlciAlIDEwXSk7CisgIGlmIChvbikgZG90cyB8PSBwb3J0cmFpdERpZ2l0c1sxMF07CisgIHJldHVybiBkb3RzOworfQpkaWZmIC0tZ2l0IGEvUHJvZ3JhbXMvYnJsYXBpLmF3ayBiL1Byb2dyYW1zL2JybGFwaS5hd2sKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDMzZGFkMAotLS0gL2Rldi9udWxsCisrKyBiL1Byb2dyYW1zL2JybGFwaS5hd2sKQEAgLTAsMCArMSw5MSBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorIyAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyMKKyMgQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorIworIyBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorIworIyBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisjIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyMgbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisjCisjIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK0JFR0lOIHsKKyAgYXBpUmFuZ2VUeXBlQ291bnQgPSAwCisgIGFwaVBhcmFtZXRlclR5cGVDb3VudCA9IDAKK30KKworLyNkZWZpbmVbWzpzcGFjZTpdXStCUkxBUElfKENVUlNPUnxESVNQTEFZfFRUWSlfLyB7CisgIGFwaUNvbnN0YW50KHN1YnN0cigkMiwgOCksICQyLCBnZXREZWZpbmVWYWx1ZSgpLCAiIikKKyAgbmV4dAorfQorCisvXltbOnNwYWNlOl1dKkJSTEFQSV8oRVJST1IpX1teWzpzcGFjZTpdXStbWzpzcGFjZTpdXSs9W1s6c3BhY2U6XV0vIHsKKyAgZ3N1YigiLCIsICIiLCAkMykKKyAgYXBpQ29uc3RhbnQoc3Vic3RyKCQxLCA4KSwgJDEsICQzLCBnZXRDb21tZW50KCQwKSkKKyAgbmV4dAorfQorCisvI2RlZmluZVtbOnNwYWNlOl1dK0JSTEFQSV9LRVlfTUFYLyB7CisgIGFwaU1hc2soc3Vic3RyKCQyLCAxMiksICQyLCBnZXREZWZpbmVWYWx1ZSgpLCAiIikKKyAgbmV4dAorfQorCisvI2RlZmluZVtbOnNwYWNlOl1dK0JSTEFQSV9LRVlfW0EtWl9dK19NQVNLLyB7CisgIGFwaU1hc2soc3Vic3RyKCQyLCAxMiksICQyLCBnZXREZWZpbmVWYWx1ZSgpLCAiIikKKyAgbmV4dAorfQorCisvI2RlZmluZVtbOnNwYWNlOl1dK0JSTEFQSV9LRVlfW0EtWl9dK19TSElGVC8geworICBhcGlTaGlmdChzdWJzdHIoJDIsIDEyKSwgJDIsIGdldERlZmluZVZhbHVlKCksICIiKQorICBuZXh0Cit9CisKKy8jZGVmaW5lW1s6c3BhY2U6XV0rQlJMQVBJX0tFWV9UWVBFXy8geworICBhcGlUeXBlKHN1YnN0cigkMiwgMTcpLCAkMiwgZ2V0RGVmaW5lVmFsdWUoKSwgIiIpCisgIG5leHQKK30KKworLyNkZWZpbmVbWzpzcGFjZTpdXStCUkxBUElfS0VZX1NZTV8vIHsKKyAgYXBpS2V5KHN1YnN0cigkMiwgMTYpLCAkMiwgZ2V0RGVmaW5lVmFsdWUoKSwgIiIpCisgIG5leHQKK30KKworL15bWzpzcGFjZTpdXSpicmxhcGlfcmFuZ2VUeXBlXy8geworICBnc3ViKCIsIiwgIiIsICQxKQorICBhcGlSYW5nZVR5cGUoc3Vic3RyKCQxLCAxOCksICQxLCBhcGlSYW5nZVR5cGVDb3VudCsrLCAiIikKKyAgbmV4dAorfQorCisvI2RlZmluZVtbOnNwYWNlOl1dK0JSTEFQSV9QQVJBTUZfLyB7CisgIGFwaUNvbnN0YW50KHN1YnN0cigkMiwgOCksICQyLCBnZXREZWZpbmVWYWx1ZSgpLCAiIikKKyAgbmV4dAorfQorCisvXltbOnNwYWNlOl1dKkJSTEFQSV9QQVJBTV9UWVBFX1teWzpzcGFjZTpdLF0rLD8vIHsKKyAgZ3N1YigiLCIsICIiLCAkMSkKKyAgbmFtZSA9IHN1YnN0cigkMSwgOCkKKworICBpZiAoJDIgPT0gIj0iICkgeworICAgIGdzdWIoIl5CUkxBUElfIiwgIiIsICQzKQorICAgIGdzdWIoIiwiLCAiIiwgJDMpCisgICAgYXBpQ29uc3RhbnQobmFtZSwgJDEsIGFwaVBhcmFtZXRlclR5cGVWYWx1ZXNbJDNdLCBnZXRDb21tZW50KCQwKSkKKyAgfSBlbHNlIHsKKyAgICBhcGlQYXJhbWV0ZXJUeXBlVmFsdWVzW25hbWVdID0gYXBpUGFyYW1ldGVyVHlwZUNvdW50CisgICAgYXBpQ29uc3RhbnQobmFtZSwgJDEsIGFwaVBhcmFtZXRlclR5cGVDb3VudCsrLCBnZXRDb21tZW50KCQwKSkKKyAgfQorCisgIG5leHQKK30KKworL15bWzpzcGFjZTpdXSpCUkxBUElfUEFSQU1fW15bOnNwYWNlOl1dK1tbOnNwYWNlOl1dKz1bWzpzcGFjZTpdXStbMC05XSssPy8geworICBnc3ViKCIsIiwgIiIsICQzKQorICBhcGlDb25zdGFudChzdWJzdHIoJDEsIDgpLCAkMSwgJDMsIGdldENvbW1lbnQoJDApKQorICBuZXh0Cit9CmRpZmYgLS1naXQgYS9Qcm9ncmFtcy9icmxhcGkuaCBiL1Byb2dyYW1zL2JybGFwaS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAzMWE5ZWIKLS0tIC9kZXYvbnVsbAorKysgYi9Qcm9ncmFtcy9icmxhcGkuaApAQCAtMCwwICsxLDE1ODMgQEAKKy8qIFByb2dyYW1zL2JybGFwaS5oLiAgR2VuZXJhdGVkIGZyb20gYnJsYXBpLmguaW4gYnkgY29uZmlndXJlLiAgKi8KKy8qCisgKiBsaWJicmxhcGkgLSBBIGxpYnJhcnkgcHJvdmlkaW5nIGFjY2VzcyB0byBicmFpbGxlIHRlcm1pbmFscyBmb3IgYXBwbGljYXRpb25zLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwMi0yMDIzIGJ5CisgKiAgIFNhbXVlbCBUaGliYXVsdCA8U2FtdWVsLlRoaWJhdWx0QGVucy1seW9uLm9yZz4KKyAqICAgU8OpYmFzdGllbiBIaW5kZXJlciA8U2ViYXN0aWVuLkhpbmRlcmVyQGVucy1seW9uLm9yZz4KKyAqCisgKiBsaWJicmxhcGkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorICoKKyAqIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyAqCisgKiBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisgKi8KKworLyoqIFxmaWxlCisgKiBcYnJpZWYgVHlwZXMsIGRlZmluZXMgYW5kIGZ1bmN0aW9ucyBwcm90b3R5cGVzIGZvciBcZSBCcmxBUEkncyBsaWJyYXJ5CisgKi8KKworI2lmbmRlZiBCUkxBUElfSU5DTFVERUQKKyNkZWZpbmUgQlJMQVBJX0lOQ0xVREVECisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYgLyogX19jcGx1c3BsdXMgKi8KKworLyogI3VuZGVmIEJSTEFQSV9XSU4zMiAqLworCisvKiogXGRlZmdyb3VwIGJybGFwaV92ZXJzaW9uIFZlcnNpb24gb2YgdGhlIEJybEFQSSBsaWJyYXJ5CisgKiBAeyAqLworCisvKiogTGlicmFyeSB2ZXJzaW9uLiAqLworI2RlZmluZSBCUkxBUElfUkVMRUFTRSAiMC44LjUiCisKKy8qKiBMaWJyYXJ5IG1ham9yIHZlcnNpb24uICovCisjZGVmaW5lIEJSTEFQSV9NQUpPUiAwCisKKy8qKiBMaWJyYXJ5IG1pbm9yIHZlcnNpb24uICovCisjZGVmaW5lIEJSTEFQSV9NSU5PUiA4CisKKy8qKiBMaWJyYXJ5IHJldmlzaW9uLiAqLworI2RlZmluZSBCUkxBUElfUkVWSVNJT04gNQorCisvKiogUmV0dXJucyB0aGUgdmVyc2lvbiBvZiB0aGUgbGlicmFyeSAqLwordm9pZCBicmxhcGlfZ2V0TGlicmFyeVZlcnNpb24oaW50ICptYWpvciwgaW50ICptaW5vciwgaW50ICpyZXZpc2lvbik7CisKKy8qKiBAfSAqLworCisvKiBUeXBlcyBhcmUgZGVmaW5lZCB0aGVyZSAqLworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorCisjaWZkZWYgQlJMQVBJX1dJTjMyCisjaW5jbHVkZSA8d2luZG93cy5oPgorI2RlZmluZSBCUkxBUElfU1REQ0FMTCBfX3N0ZGNhbGwKKyNlbHNlIC8qIEJSTEFQSV9XSU4zMiAqLworI2RlZmluZSBCUkxBUElfU1REQ0FMTAorI2VuZGlmIC8qIEJSTEFQSV9XSU4zMiAqLworCisjaWZkZWYgX01TQ19WRVIKK3R5cGVkZWYgX19pbnQ2NCB1aW50NjRfdDsKK3R5cGVkZWYgX19pbnQzMiB1aW50MzJfdDsKKyNkZWZpbmUgVUlOVDY0X0MoeCkgKHggIyMgVWk2NCkKKyNkZWZpbmUgUFJJeDY0ICJJNjR4IgordHlwZWRlZiBzaWduZWQgaW50IHNzaXplX3Q7CisjZWxzZSAvKiBfTVNDX1ZFUiAqLworCisvKiB0aGlzIGlzIGZvciB1aW50Kl90ICovCisjaW5jbHVkZSA8c3RkaW50Lmg+CisKKy8qIE5VTEwgaXMgZGVmaW5lZCB0aGVyZSAqLworI2luY2x1ZGUgPHVuaXN0ZC5oPgorCisjaW5jbHVkZSA8aW50dHlwZXMuaD4gLyogRm9yIFBSSXg2NCAqLworI2VuZGlmIC8qIF9NU0NfVkVSICovCisKKyNpbmNsdWRlIDx3Y2hhci5oPgorCisvKiogXGRlZmdyb3VwIGJybGFwaV9oYW5kbGVzIEJybEFQSSBoYW5kbGVzCisgKgorICogRWFjaCBmdW5jdGlvbiBwcm92aWRlZCBieSBCcmxBUEkgY29tZXMgaW4gdHdvIHZlcnNpb25zLgorICoKKyAqIDEuIEEgdmVyc2lvbiB3aG9zZSBuYW1lIGlzIHByZWZpeGVkIGJ5IGJybGFwaV8gZm9yIGNsaWVudHMgb3BlbmluZyBvbmx5CisgKiBvbmUgc2ltdWx0YW5lb3VzIGNvbm5lY3Rpb24gd2l0aCBCcmxBUEkgKG1vc3QgZnJlcXVlbiBjYXNlKQorICoKKyAqIDIuIEEgdmVyc2lvbiB3aG9zZSBuYW1lIGlzIHByZWZpeGVkIGJ5IGJybGFwaV9fIGZvciB1c2UgYnkgY2xpZW50cworICogd2lzaGluZyB0byBvcGVuIG1vcmUgdGhhbiBvbmUgY29ubmVjdGlvbiB0byBCcmxBUEkuCisgKgorICogQSBmdW5jdGlvbiBjYWxsZWQgYnJsYXBpX19mb28gaXMgdXNlZCBpbiBleGFjdGx5IHRoZSBzYW1lIHdheSBhcyBpdHMKKyAqIGJybGFwaV9mb28gY291bnRlcnBhcnQsIGV4Y2VwdCB0aGF0IGl0IHRha2VzIGFuIGFkZGl0aW9uYWwgYXJndW1lbnQKKyAqICh0aGUgZmlyc3Qgb25lKSwgd2hpY2ggaXMgYSBoYW5kbGUgbGV0dGluZyB0aGUgY2xpZW50IHJlZmVyIHRvIGEgZ2l2ZW4KKyAqIGNvbm5lY3Rpb24gaW4gYSBzaW1pbGFyIG1hbm5lciB0byB3aGF0IGZpbGUgZGVzY3JpcHRvcnMgZG8uCisgKgorICogSW4gY2FzZSB5b3Ugd2FudCB0byBjaGVjayB0aGF0IHlvdXIgY29kZSBpcyBub3QgZXJyb25lb3VzbHkgdXNpbmcgYnJsYXBpX2ZvbworICogZnVuY3Rpb25zLCBkZWZpbmUgQlJMQVBJX05PX1NJTkdMRV9TRVNTSU9OIGJlZm9yZSBpbmNsdWRpbmcgPGJybGFwaS5oPjogdGhhdAorICogd2lsbCBkaXNhYmxlIHRoZSBkZWNsYXJhdGlvbiBvZiBhbGwgc2luZ2xlIHNlc3Npb24gZnVuY3Rpb25zLgorICoKKyAqIEB7ICovCisKKy8qKiBUeXBlIGZvciBCcmxBUEkgaGFubGVzICovCit0eXBlZGVmIHN0cnVjdCBicmxhcGlfaGFuZGxlX3QgYnJsYXBpX2hhbmRsZV90OworCisvKiogUmV0dXJucyB0aGUgc2l6ZSBvZiBhbiBvYmplY3Qgb2YgdHlwZSBicmxhcGlfaGFuZGxlX3QgaW4gYnl0ZXMgKi8KK3NpemVfdCBCUkxBUElfU1REQ0FMTCBicmxhcGlfZ2V0SGFuZGxlU2l6ZSh2b2lkKTsKKworLyoqIEB9ICovCisKKy8qKiBcZGVmZ3JvdXAgYnJsYXBpX2Nvbm5lY3Rpb24gQ29ubmVjdGluZyB0byBCcmxBUEkKKyAqCisgKiBCZWZvcmUgY2FsbGluZyBhbnkgb3RoZXIgZnVuY3Rpb24gb2YgdGhlIGxpYnJhcnksIGNhbGxpbmcKKyAqIGJybGFwaV9vcGVuQ29ubmVjdGlvbigpIGlzIG5lZWRlZCB0byBlc3RhYmxpc2ggYSBjb25uZWN0aW9uIHRvCisgKiBcZSBCcmxBUEkgJ3Mgc2VydmVyLgorICogV2hlbiB0aGUgY29ubmVjdGlvbiBpcyBub3QgbmVlZGVkIGFueSBtb3JlLCBicmxhcGlfY2xvc2VDb25uZWN0aW9uKCkgbXVzdCBiZQorICogY2FsbGVkIHRvIGNsb3NlIHRoZSBjb25uZWN0aW9uLgorICoKKyAqIEB7ICovCisKKy8qKiBEZWZhdWx0IHBvcnQgbnVtYmVyIG9uIHdoaWNoIGNvbm5lY3Rpb25zIHRvIFxlIEJybEFQSSBjYW4gYmUgZXN0YWJsaXNoZWQgKi8KKyNkZWZpbmUgQlJMQVBJX1NPQ0tFVFBPUlROVU0gNDEwMQorI2RlZmluZSBCUkxBUElfU09DS0VUUE9SVCAiNDEwMSIKKworLyoqIERlZmF1bHQgdW5peCBwYXRoIG9uIHdoaWNoIGNvbm5lY3Rpb25zIHRvIFxlIEJybEFQSSBjYW4gYmUgZXN0YWJsaXNoZWQgKi8KKyNkZWZpbmUgQlJMQVBJX1NPQ0tFVFBBVEggIi92YXIvbGliL0JybEFQSSIKKworLyoqIFxlIGJybHR0eSAncyBzZXR0aW5ncyBkaXJlY3RvcnkKKyAqCisgKiBUaGlzIGlzIHdoZXJlIGF1dGhvcml6YXRpb24ga2V5IGFuZCBkcml2ZXItZGVwZW5kZW50IGtleSBuYW1lcyBhcmUgZm91bmQKKyAqIGZvciBpbnN0YW5jZS4gKi8KKyNkZWZpbmUgQlJMQVBJX0VUQ0RJUiAiL2V0YyIKKworLyoqIERlZmF1bHQgbmFtZSBvZiB0aGUgZmlsZSBjb250YWluaW5nIFxlIEJybEFQSSAncyBhdXRob3JpemF0aW9uIGtleQorICoKKyAqIFRoaXMgbmFtZSBpcyByZWxhdGl2ZSB0byBCUkxBUElfRVRDRElSICovCisjZGVmaW5lIEJSTEFQSV9BVVRIS0VZRklMRSAiYnJsYXBpLmtleSIKKworLyoqIERlZmF1bHQgYXV0aG9yaXphdGlvbiBzZXR0aW5nICovCisjaWZkZWYgQlJMQVBJX1dJTjMyCisvKiBObyBhdXRoZW50aWNhdGlvbiBieSBkZWZhdWx0IG9uIFdpbmRvd3MgKi8KKyNkZWZpbmUgQlJMQVBJX0RFRkFVVEggIm5vbmUiCisjZWxzZSAvKiBCUkxBUElfV0lOMzIgKi8KKyNkZWZpbmUgQlJMQVBJX0RFRkFVVEhfS0VZRklMRSAia2V5ZmlsZToiIEJSTEFQSV9FVENESVIgIi8iIEJSTEFQSV9BVVRIS0VZRklMRQorCisjaWZkZWYgSEFWRV9QT0xLSVQKKyNkZWZpbmUgQlJMQVBJX0RFRkFVVEhfUE9MS0lUICIrcG9sa2l0IgorI2Vsc2UgLyogSEFWRV9QT0xLSVQgKi8KKyNkZWZpbmUgQlJMQVBJX0RFRkFVVEhfUE9MS0lUICIiCisjZW5kaWYgLyogSEFWRV9QT0xLSVQgKi8KKworI2RlZmluZSBCUkxBUElfREVGQVVUSCBCUkxBUElfREVGQVVUSF9LRVlGSUxFIEJSTEFQSV9ERUZBVVRIX1BPTEtJVAorI2VuZGlmIC8qIEJSTEFQSV9XSU4zMiAqLworCisvKiogT1MtZGVwZW5kZW50IGZpbGUgZGVzY3JpcHRvciB0eXBlCisgKgorICogVGhpcyBpcyB0aGUgdHlwZSBmb3IgZmlsZSBkZXNjcmlwdG9ycyByZXR1cm5lZCBieSBicmxhcGlfb3BlbkNvbm5lY3Rpb24oKSBhbmQKKyAqIGJybGFwaV9nZXRGaWxlRGVzY3JpcHRvcigpLgorICovCisjaWZkZWYgX19NSU5HVzMyX18KK3R5cGVkZWYgSEFORExFIGJybGFwaV9maWxlRGVzY3JpcHRvcjsKKyNlbHNlIC8qIF9fTUlOR1czMl9fICovCit0eXBlZGVmIGludCBicmxhcGlfZmlsZURlc2NyaXB0b3I7CisjZW5kaWYgLyogX19NSU5HVzMyX18gKi8KKworLyoqIEludmFsaWQgdmFsdWUgZm9yIGJybGFwaV9maWxlRGVzY3JpcHRvcgorICoKKyAqIFRoaXMgaXMgcmV0dXJuZWQgYnkgYnJsYXBpX2dldEZpbGVEZXNjcmlwdG9yKCkgd2hlbiB0aGUgY29ubmVjdGlvbiBpcyBjbG9zZWQuCisgKi8KKyNpZmRlZiBfX01JTkdXMzJfXworI2RlZmluZSBCUkxBUElfSU5WQUxJRF9GSUxFX0RFU0NSSVBUT1IgSU5WQUxJRF9IQU5ETEVfVkFMVUUKKyNlbHNlIC8qIF9fTUlOR1czMl9fICovCisjZGVmaW5lIEJSTEFQSV9JTlZBTElEX0ZJTEVfREVTQ1JJUFRPUiAtMQorI2VuZGlmIC8qIF9fTUlOR1czMl9fICovCisKKy8qKiBcYnJpZWYgU2V0dGluZ3Mgc3RydWN0dXJlIGZvciBcZSBCcmxBUEkgY29ubmVjdGlvbgorICoKKyAqIFRoaXMgc3RydWN0dXJlIGhvbGRzIGV2ZXJ5IHBhcmFtZXRlciBuZWVkZWQgdG8gY29ubmVjdCB0byBcZSBCcmxBUEk6IHdoaWNoCisgKiBmaWxlIHRoZSBhdXRob3JpemF0aW9uIGtleSBjYW4gYmUgZm91bmQgaW4gYW5kIHdoaWNoIGNvbXB1dGVyIHRvIGNvbm5lY3QgdG8uCisgKgorICogXHBhciBFeGFtcGxlczoKKyAqIFxjb2RlCisgKiBicmxhcGlfY29ubmVjdGlvblNldHRpbmdzX3Qgc2V0dGluZ3M7CisgKgorICogc2V0dGluZ3MuYXV0aD0iL2V0Yy9icmxhcGkua2V5IjsKKyAqIHNldHRpbmdzLmhvc3Q9ImZvbyI7CisgKiBcZW5kY29kZQorICoKKyAqIFxlIGxpYmJybGFwaSB3aWxsIHJlYWQgYXV0aG9yaXphdGlvbiBrZXkgZnJvbSBmaWxlIFxwIC9ldGMvYnJsYXBpLmtleQorICogYW5kIGNvbm5lY3QgdG8gdGhlIG1hY2hpbmUgY2FsbGVkICJmb28iLCBvbiB0aGUgZGVmYXVsdCBUQ1AgcG9ydC4KKyAqCisgKiBcY29kZQorICogc2V0dGluZ3MuaG9zdD0iMTAuMS4wLjIiOworICogXGVuZGNvZGUKKyAqCisgKiBsZXRzIGRpcmVjdGx5IGVudGVyIGFuIElQIGFkZHJlc3MgaW5zdGVhZCBvZiBhIG1hY2hpbmUgbmFtZS4KKyAqCisgKiBcY29kZQorICogc2V0dGluZ3MuaG9zdD0iOjEiOworICogXGVuZGNvZGUKKyAqCisgKiBsZXRzIFxlIGxpYmJybGFwaSBjb25uZWN0IHRvIHRoZSBsb2NhbCBjb21wdXRlciwgb24gcG9ydCBCUkxBUElfU09DS0VUUE9SVE5VTSsxCisgKgorICogXHNhIGJybGFwaV9vcGVuQ29ubmVjdGlvbigpCisgKi8KK3R5cGVkZWYgc3RydWN0IHsKKyAgLyoqIEZvciBzZWN1cml0eSByZWFzb25zLCBcZSBsaWJicmxhcGkgaGFzIHRvIGdldCBhdXRob3JpemVkIHRvIGNvbm5lY3QgdG8gdGhlCisgICAqIFxlIEJybEFQSSBzZXJ2ZXIuIFRoaXMgY2FuIGJlIGRvbmUgdmlhIGEgc2VjcmV0IGtleSwgZm9yIGluc3RhbmNlLiBUaGlzIGlzCisgICAqIHRoZSBwYXRoIHRvIHRoZSBmaWxlIHdoaWNoIGhvbGRzIGl0OyBpdCB3aWxsIGhlbmNlIGhhdmUgdG8gYmUgcmVhZGFibGUgYnkKKyAgICogdGhlIGFwcGxpY2F0aW9uLgorICAgKgorICAgKiBTZXR0aW5nIFxjIE5VTEwgZGVmYXVsdHMgaXQgdG8gbG9jYWwgaW5zdGFsbGF0aW9uIHNldHVwIG9yIHRvIHRoZSBjb250ZW50CisgICAqIG9mIHRoZSBCUkxBUElfQVVUSCBlbnZpcm9ubWVudCB2YXJpYWJsZSwgaWYgaXQgZXhpc3RzLiAqLworICBjb25zdCBjaGFyICphdXRoOworCisgIC8qKiBUaGlzIHRlbGxzIHdoZXJlIHRoZSBcZSBCcmxBUEkgc2VydmVyIHJlc2lkZXM6IGl0IG1pZ2h0IGJlIGxpc3RlbmluZyBvbgorICAgKiBhbm90aGVyIGNvbXB1dGVyLCBvbiBhbnkgVENQIHBvcnQuIEl0IHNob3VsZCBsb29rIGxpa2UgImZvbzoxIiwgd2hpY2gKKyAgICogbWVhbnMgVENQIHBvcnQgbnVtYmVyIEJSTEFQSV9TT0NLRVRQT1JUTlVNKzEgb24gY29tcHV0ZXIgY2FsbGVkICJmb28iLgorICAgKiBcbm90ZSBQbGVhc2UgY2hlY2sgdGhhdCByZXNvbHZpbmcgdGhpcyBuYW1lIHdvcmtzIGJlZm9yZSBjb21wbGFpbmluZworICAgKgorICAgKiBTZXR0aW5ncyBcYyBOVUxMIGRlZmF1bHRzIGl0IHRvIGxvY2FsaG9zdCwgdXNpbmcgdGhlIGxvY2FsIGluc3RhbGxhdGlvbidzCisgICAqIGRlZmF1bHQgVENQIHBvcnQsIG9yIHRvIHRoZSBjb250ZW50IG9mIHRoZSBCUkxBUElfSE9TVCBlbnZpcm9ubWVudAorICAgKiB2YXJpYWJsZSwgaWYgaXQgZXhpc3RzLiAqLworICBjb25zdCBjaGFyICpob3N0OworfSBicmxhcGlfY29ubmVjdGlvblNldHRpbmdzX3Q7CisKKy8qIEJSTEFQSV9TRVRUSU5HU19JTklUSUFMSVpFUiAqLworLyoqIEFsbG93cyB0byBpbml0aWFsaXplIGEgc3RydWN0dXJlIG9mIHR5cGUgXGUgYnJsYXBpX2Nvbm5lY3Rpb25TZXR0aW5nc190ICoKKyAqIHdpdGggZGVmYXVsdCB2YWx1ZXMuICovCisjZGVmaW5lIEJSTEFQSV9TRVRUSU5HU19JTklUSUFMSVpFUiB7IE5VTEwsIE5VTEwgfQorCisvKiBicmxhcGlfb3BlbkNvbm5lY3Rpb24gKi8KKy8qKiBPcGVuIGEgc29ja2V0IGFuZCBjb25uZWN0IGl0IHRvIFxlIEJybEFQSSAncyBzZXJ2ZXIKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGZpcnN0IGxvYWRzIGFuIGF1dGhvcml6YXRpb24ga2V5IGFzIHNwZWNpZmllZCBpbiBzZXR0aW5ncy4KKyAqIEl0IHRoZW4gY3JlYXRlcyBhIFRDUCBzb2NrZXQgYW5kIGNvbm5lY3RzIGl0IHRvIHRoZSBzcGVjaWZpZWQgbWFjaGluZSwgb24KKyAqIHRoZSBzcGVjaWZpZWQgcG9ydC4gSXQgd3JpdGVzIHRoZSBhdXRob3JpemF0aW9uIGtleSBvbiB0aGUgc29ja2V0IGFuZAorICogd2FpdHMgZm9yIGFja25vd2xlZGdlbWVudC4KKyAqCisgKiBccmV0dXJuIHRoZSBmaWxlIGRlc2NyaXB0b3IsIG9yIEJSTEFQSV9JTlZBTElEX0ZJTEVfREVTQ1JJUFRPUiBvbiBlcnJvcgorICoKKyAqIFxub3RlIFRoZSBmaWxlIGRlc2NyaXB0b3IgaXMgcmV0dXJuZWQgaW4gY2FzZSB0aGUgY2xpZW50IHdhbnRzIHRvCisgKiBjb21tdW5pY2F0ZSB3aXRoIHRoZSBzZXJ2ZXIgd2l0aG91dCB1c2luZyBcZSBsaWJicmxhcGkgZnVuY3Rpb25zLiBJZiBpdCB1c2VzCisgKiB0aGVtIGhvd2V2ZXIsIGl0IHdvbid0IGhhdmUgdG8gcGFzcyB0aGUgZmlsZSBkZXNjcmlwdG9yIGxhdGVyLCBzaW5jZSB0aGUKKyAqIGxpYnJhcnkga2VlcHMgYSBjb3B5IG9mIGl0LiBCdXQgdGhhdCBhbHNvIG1lYW5zIHRoYXQKKyAqIGJybGFwaV9vcGVuQ29ubmVjdGlvbigpIG1heSBiZSBjYWxsZWQgc2V2ZXJhbCB0aW1lcywgYnV0IFxlIGxpYmJybGFwaQorICogZnVuY3Rpb25zIHdpbGwgYWx3YXlzIHdvcmsgd2l0aCB0aGUgbGFzdCBjYWxsJ3MgZGVzY3JpcHRvcgorICoKKyAqIFxwYXIgRXhhbXBsZToKKyAqIFxjb2RlCisgKiBpZiAoYnJsYXBpX29wZW5Db25uZWN0aW9uKCZzZXR0aW5ncywmc2V0dGluZ3MpPDApIHsKKyAqICBmcHJpbnRmKHN0ZGVyciwiY291bGRuJ3QgY29ubmVjdCB0byBCcmxBUEkgYXQgJXM6ICVzXG4iLAorICogICBzZXR0aW5ncy5ob3N0LCBicmxhcGlfc3RyZXJyb3IoJmJybGFwaV9lcnJvcikpOworICogIGV4aXQoMSk7CisgKiB9CisgKiBcZW5kY29kZQorICoKKyAqIFxwYXIgRXJyb3JzOgorICogXGUgQnJsQVBJIG1pZ2h0IG5vdCBiZSBvbiB0aGlzIFRDUCBwb3J0LCB0aGUgaG9zdCBuYW1lIG1pZ2h0IG5vdCBiZQorICogcmVzb2x2YWJsZSwgdGhlIGF1dGhvcml6YXRpb24gbWF5IGZhaWwsLi4uCisgKgorICogXHBhcmFtIGRlc2lyZWRTZXR0aW5ncyB0aGlzIGdpdmVzIHRoZSBkZXNpcmVkIGNvbm5lY3Rpb24gcGFyYW1ldGVycywgYXMgZGVzY3JpYmVkCisgKiBpbiBicmxhcGlfY29ubmVjdGlvblNldHRpbmdzX3QuIElmIFxjIE5VTEwsIGRlZmF1bHRzIHZhbHVlcyBhcmUgdXNlZCwgc28gdGhhdCBpdCBpcworICogZ2VuZXJhbGx5IGEgZ29vZCBpZGVhIHRvIGdpdmUgXGMgTlVMTCBhcyBkZWZhdWx0LCBhbmQgb25seSBmaWxsIGEKKyAqIGJybGFwaV9jb25uZWN0aW9uU2V0dGluZ3NfdCBzdHJ1Y3R1cmUgd2hlbiB0aGUgdXNlciBnYXZlIHBhcmFtZXRlcnMgdG8gdGhlIHByb2dyYW0KKyAqIGZvciBpbnN0YW5jZTsKKyAqIFxwYXJhbSBhY3R1YWxTZXR0aW5ncyBpZiBub3QgXGMgTlVMTCwgcGFyYW1ldGVycyB3aGljaCB3ZXJlIGFjdHVhbGx5IHVzZWQgYXJlCisgKiBzdG9yZWQgaGVyZSwgaWYgdGhlIGFwcGxpY2F0aW9uIGV2ZXIgbmVlZHMgdGhlbS4gU2luY2UgdGhleSBhcmUgY29uc3RhbnQKKyAqIHN0cmluZ3MsIG9yIGNvbWUgZnJvbSBhIGdldGVudiBjYWxsLCB0aGVzZSBtdXN0IG5vdCBiZSBmcmVlZCBieSB0aGUKKyAqIGFwcGxpY2F0aW9uLgorICoKKyAqIFxzYQorICogYnJsYXBpX2Nvbm5lY3Rpb25TZXR0aW5nc190CisgKiBicmxhcGlfd3JpdGVQYWNrZXQoKQorICogYnJsYXBpX3JlYWRQYWNrZXRIZWFkZXIoKQorICogYnJsYXBpX3JlYWRQYWNrZXRDb250ZW50KCkKKyAqIGJybGFwaV9yZWFkUGFja2V0KCkKKyAqLworI2lmbmRlZiBCUkxBUElfTk9fU0lOR0xFX1NFU1NJT04KK2JybGFwaV9maWxlRGVzY3JpcHRvciBCUkxBUElfU1REQ0FMTCBicmxhcGlfb3BlbkNvbm5lY3Rpb24oY29uc3QgYnJsYXBpX2Nvbm5lY3Rpb25TZXR0aW5nc190ICpkZXNpcmVkU2V0dGluZ3MsIGJybGFwaV9jb25uZWN0aW9uU2V0dGluZ3NfdCAqYWN0dWFsU2V0dGluZ3MpOworI2VuZGlmIC8qIEJSTEFQSV9OT19TSU5HTEVfU0VTU0lPTiAqLworYnJsYXBpX2ZpbGVEZXNjcmlwdG9yIEJSTEFQSV9TVERDQUxMIGJybGFwaV9fb3BlbkNvbm5lY3Rpb24oYnJsYXBpX2hhbmRsZV90ICpoYW5kbGUsIGNvbnN0IGJybGFwaV9jb25uZWN0aW9uU2V0dGluZ3NfdCAqZGVzaXJlZFNldHRpbmdzLCBicmxhcGlfY29ubmVjdGlvblNldHRpbmdzX3QgKmFjdHVhbFNldHRpbmdzKTsKKworLyogYnJsYXBpX2ZpbGVEZXNjcmlwdG9yICovCisvKiogUmV0dXJuIHRoZSBmaWxlIGRlc2NyaXB0b3IgdXNlZCBieSB0aGUgQnJsQVBJIGNvbm5lY3Rpb24KKyAqCisgKiBUaGlzIGFsbG93cyB0byB1c2UgaXQgd2l0aCBcYyBzZWxlY3QoKSwgXGMgZ19pb19hZGRfd2F0Y2goKSwgXGMKKyAqIFh0QXBwQWRkSW5wdXQoKSwgZXRjLgorICoKKyAqIEJSTEFQSV9JTlZBTElEX0ZJTEVfREVTQ1JJUFRPUiBpcyByZXR1cm5lZCB3aGVuIHRoZSBjb25uZWN0aW9uIHdhcyBjbG9zZWQuCisgKi8KKyNpZm5kZWYgQlJMQVBJX05PX1NJTkdMRV9TRVNTSU9OCiticmxhcGlfZmlsZURlc2NyaXB0b3IgQlJMQVBJX1NURENBTEwgYnJsYXBpX2dldEZpbGVEZXNjcmlwdG9yKHZvaWQpOworI2VuZGlmIC8qIEJSTEFQSV9OT19TSU5HTEVfU0VTU0lPTiAqLworYnJsYXBpX2ZpbGVEZXNjcmlwdG9yIEJSTEFQSV9TVERDQUxMIGJybGFwaV9fZ2V0RmlsZURlc2NyaXB0b3IoYnJsYXBpX2hhbmRsZV90ICpoYW5kbGUpOworCisKKy8qIGJybGFwaV9jbG9zZUNvbm5lY3Rpb24gKi8KKy8qKiBDbGVhbmx5IGNsb3NlIHRoZSBzb2NrZXQKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGxvY2tzIHVudGlsIGEgY2xvc2luZyBhY2tub3dsZWRnZW1lbnQgaXMgcmVjZWl2ZWQgZnJvbSB0aGUKKyAqIHNlcnZlci4gVGhlIHNvY2tldCBpcyB0aGVuIGZyZWVkLCBzbyB0aGUgZmlsZSBkZXNjcmlwdG9yCisgKiBicmxhcGlfb3BlbkNvbm5lY3Rpb24oKSBnYXZlIGhhcyBubyBtZWFuaW5nIGFueSBtb3JlCisgKi8KKyNpZm5kZWYgQlJMQVBJX05PX1NJTkdMRV9TRVNTSU9OCit2b2lkIEJSTEFQSV9TVERDQUxMIGJybGFwaV9jbG9zZUNvbm5lY3Rpb24odm9pZCk7CisjZW5kaWYgLyogQlJMQVBJX05PX1NJTkdMRV9TRVNTSU9OICovCit2b2lkIEJSTEFQSV9TVERDQUxMIGJybGFwaV9fY2xvc2VDb25uZWN0aW9uKGJybGFwaV9oYW5kbGVfdCAqaGFuZGxlKTsKKworLyoqIEB9ICovCisKKy8qKiBcZGVmZ3JvdXAgYnJsYXBpX2NsaWVudERhdGEgU2V0dGluZyBhbmQgZ2V0dGluZyBjbGllbnQgZGF0YQorICoKKyAqIENsaWVudHMgY2FuIHJlZ2lzdGVyIGEgcG9pbnRlciB0byBkYXRhIHRoYXQgY2FuIHRoZW4gYmUgdXNlZAorICogZS5nLiBpbiBleGNlcHRpb24gaGFuZGxlcnMuCisgKiBAeyAqLworCisvKiBicmxhcGlfX3NldENsaWVudERhdGEgKi8KKy8qKiBSZWdpc3RlciBhIHBvaW50ZXIgdG8gY2xpZW50IGRhdGEKKyAqCisgKiBccGFyYW0gZGF0YSBUaGUgcG9pbnRlciB0byB0aGUgcHJpdmF0ZSBjbGllbnQgZGF0YQorICovCisjaWZuZGVmIEJSTEFQSV9OT19TSU5HTEVfU0VTU0lPTgordm9pZCBCUkxBUElfU1REQ0FMTCBicmxhcGlfc2V0Q2xpZW50RGF0YSh2b2lkICpkYXRhKTsKKyNlbmRpZiAvKiBCUkxBUElfTk9fU0lOR0xFX1NFU1NJT04gKi8KK3ZvaWQgQlJMQVBJX1NURENBTEwgYnJsYXBpX19zZXRDbGllbnREYXRhKGJybGFwaV9oYW5kbGVfdCAqaGFuZGxlLCB2b2lkICpkYXRhKTsKKworLyogYnJsYXBpX19nZXRDbGllbnREYXRhICovCisvKiogUmV0cmlldmVzIHRoZSBwb2ludGVyIHRvIHRoZSBwcml2YXRlIGNsaWVudCBkYXRhCisgKgorICogXHJldHVybiB0aGUgcG9pbnRlciB0byB0aGUgcHJpdmF0ZSBjbGllbnQgZGF0YQorICovCisjaWZuZGVmIEJSTEFQSV9OT19TSU5HTEVfU0VTU0lPTgordm9pZCAqIEJSTEFQSV9TVERDQUxMIGJybGFwaV9nZXRDbGllbnREYXRhKHZvaWQpOworI2VuZGlmIC8qIEJSTEFQSV9OT19TSU5HTEVfU0VTU0lPTiAqLwordm9pZCAqIEJSTEFQSV9TVERDQUxMIGJybGFwaV9fZ2V0Q2xpZW50RGF0YShicmxhcGlfaGFuZGxlX3QgKmhhbmRsZSk7CisKKy8qKiBAfSAqLworCisvKiogXGRlZmdyb3VwIGJybGFwaV9pbmZvIEdldHRpbmcgVGVybWluYWwgaW5mb3JtYXRpb24KKyAqIFxicmllZiBIb3cgdG8gZ2V0IGluZm9ybWF0aW9uIGFib3V0IHRoZSBjb25uZWN0ZWQgVGVybWluYWwKKyAqCisgKiBCZWZvcmUgdXNpbmcgUmF3IG1vZGUgb3Iga2V5IGNvZGVzLCB0aGUgYXBwbGljYXRpb24gc2hvdWxkIGFsd2F5cyBjaGVjayB0aGUKKyAqIHR5cGUgb2YgdGhlIGNvbm5lY3RlZCB0ZXJtaW5hbCwgdG8gYmUgc3VyZSBpdCBpcyByZWFsbHkgdGhlIG9uZSBpdCBleHBlY3RzLgorICoKKyAqIE9uZSBzaG91bGQgYWxzbyBjaGVjayBmb3IgZGlzcGxheSBzaXplLCBzbyBhcyB0byBhZGp1c3QgZnVydGhlciBkaXNwbGF5aW5nCisgKiBvbiBpdC4KKyAqIEB7CisgKi8KKworLyoqIE1heGltdW0gbmFtZSBsZW5ndGggZm9yIGRyaXZlciBuYW1lcyBlbWJlZGVkIGluIEJybEFQSSBwYWNrZXRzLCBub3QgY291bnRpbmcKKyAqIGFueSB0ZXJtaW5hdGlvbiBcXDAgY2hhcmFjdGVyICovCisjZGVmaW5lIEJSTEFQSV9NQVhOQU1FTEVOR1RIIDMxCisKKy8qIGJybGFwaV9nZXREcml2ZXJOYW1lICovCisvKiogUmV0dXJuIHRoZSBjb21wbGV0ZSBuYW1lIG9mIHRoZSBkcml2ZXIgdXNlZCBieSBcZSBicmx0dHkKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGZpbGxzIGl0cyBhcmd1bWVudCB3aXRoIHRoZSB3aG9sZSBuYW1lIG9mIHRoZSBicmFpbGxlCisgKiBkcml2ZXIgaWYgYXZhaWxhYmxlLCB0ZXJtaW5hdGVkIHdpdGggYSAnXFwwJy4KKyAqCisgKiBccGFyYW0gYnVmZmVyIGlzIHRoZSBidWZmZXIgcHJvdmlkZWQgYnkgdGhlIGFwcGxpY2F0aW9uOworICogXHBhcmFtIHNpemUgaXMgdGhlIG1heGltdW0gc2l6ZSBmb3IgdGhlIG5hbWUgYnVmZmVyLgorICoKKyAqIFxyZXR1cm4gLTEgb24gZXJyb3IsIG90aGVyd2lzZSBhIHBvc2l0aXZlIHZhbHVlIGdpdmluZyB0aGUgc2l6ZSBvZiB0aGUgbmVlZGVkCisgKiBidWZmZXIgKGluY2x1ZGluZyAnXFwwJykuIElmIHRoYXQgdmFsdWUgaXMgYmlnZ2VyIHRoYW4gXHAgc2l6ZSwgdGhlIHZhbHVlIHdhcworICogdHJ1bmNhdGVkIGFuZCB0aGUgY2FsbGVyIHNob3VsZCByZXRyeSB3aXRoIGEgYmlnZ2VyIGJ1ZmZlciBhY2NvcmRpbmdseS4KKyAqLworI2lmbmRlZiBCUkxBUElfTk9fU0lOR0xFX1NFU1NJT04KK2ludCBCUkxBUElfU1REQ0FMTCBicmxhcGlfZ2V0RHJpdmVyTmFtZShjaGFyICpidWZmZXIsIHNpemVfdCBzaXplKTsKKyNlbmRpZiAvKiBCUkxBUElfTk9fU0lOR0xFX1NFU1NJT04gKi8KK2ludCBCUkxBUElfU1REQ0FMTCBicmxhcGlfX2dldERyaXZlck5hbWUoYnJsYXBpX2hhbmRsZV90ICpoYW5kbGUsIGNoYXIgKmJ1ZmZlciwgc2l6ZV90IHNpemUpOworCisvKiBicmxhcGlfZ2V0TW9kZWxJZGVudGlmaWVyICovCisvKiogUmV0dXJuIGFuIGlkZW50aWZpZXIgZm9yIHRoZSBkZXZpY2UgbW9kZWwgdXNlZCBieSBcZSBicmx0dHkKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGZpbGxzIGl0cyBhcmd1bWVudCB3aXRoIHRoZSB3aG9sZSBpZGVudGlmaWVyIG9mIHRoZSBicmFpbGxlCisgKiBkZXZpY2UgbW9kZWwgaWYgYXZhaWxhYmxlLCB0ZXJtaW5hdGVkIHdpdGggYSAnXFwwJy4KKyAqCisgKiBccGFyYW0gYnVmZmVyIGlzIHRoZSBidWZmZXIgZ2l2ZW4gYnkgdGhlIGFwcGxpY2F0aW9uOworICogXHBhcmFtIHNpemUgaXMgdGhlIG1heGltdW0gc2l6ZSBmb3IgdGhlIGlkZW50aWZpZXIgYnVmZmVyLgorICoKKyAqIFxyZXR1cm4gLTEgb24gZXJyb3IsIG90aGVyd2lzZSBhIHBvc2l0aXZlIHZhbHVlIGdpdmluZyB0aGUgc2l6ZSBvZiB0aGUgbmVlZGVkCisgKiBidWZmZXIgKGluY2x1ZGluZyAnXFwwJykuIElmIHRoYXQgdmFsdWUgaXMgYmlnZ2VyIHRoYW4gXHAgc2l6ZSwgdGhlIHZhbHVlIHdhcworICogdHJ1bmNhdGVkIGFuZCB0aGUgY2FsbGVyIHNob3VsZCByZXRyeSB3aXRoIGEgYmlnZ2VyIGJ1ZmZlciBhY2NvcmRpbmdseS4KKyAqLworI2lmbmRlZiBCUkxBUElfTk9fU0lOR0xFX1NFU1NJT04KK2ludCBCUkxBUElfU1REQ0FMTCBicmxhcGlfZ2V0TW9kZWxJZGVudGlmaWVyKGNoYXIgKmJ1ZmZlciwgc2l6ZV90IHNpemUpOworI2VuZGlmIC8qIEJSTEFQSV9OT19TSU5HTEVfU0VTU0lPTiAqLworaW50IEJSTEFQSV9TVERDQUxMIGJybGFwaV9fZ2V0TW9kZWxJZGVudGlmaWVyKGJybGFwaV9oYW5kbGVfdCAqaGFuZGxlLCBjaGFyICpidWZmZXIsIHNpemVfdCBzaXplKTsKKworLyogYnJsYXBpX2dldERpc3BsYXlTaXplICovCisvKiogUmV0dXJuIHRoZSBzaXplIG9mIHRoZSBicmFpbGxlIGRpc3BsYXkgKi8KKyNpZm5kZWYgQlJMQVBJX05PX1NJTkdMRV9TRVNTSU9OCitpbnQgQlJMQVBJX1NURENBTEwgYnJsYXBpX2dldERpc3BsYXlTaXplKHVuc2lnbmVkIGludCAqeCwgdW5zaWduZWQgaW50ICp5KTsKKyNlbmRpZiAvKiBCUkxBUElfTk9fU0lOR0xFX1NFU1NJT04gKi8KK2ludCBCUkxBUElfU1REQ0FMTCBicmxhcGlfX2dldERpc3BsYXlTaXplKGJybGFwaV9oYW5kbGVfdCAqaGFuZGxlLCB1bnNpZ25lZCBpbnQgKngsIHVuc2lnbmVkIGludCAqeSk7CisKKy8qKiBAfSAqLworCisvKiogXGRlZmdyb3VwIGJybGFwaV90dHkgRW50ZXJpbmcgJiBsZWF2aW5nIHR0eSBtb2RlCisgKiBcYnJpZWYgSG93IHRvIHRha2UgY29udHJvbCBvZiB0dHlzIGZvciBkaXJlY3QgYnJhaWxsZSBkaXNwbGF5IC8gcmVhZAorICoKKyAqIEJlZm9yZSBiZWluZyBhYmxlIHRvIHdyaXRlIG9uIHRoZSBicmFpbGxlIGRpc3BsYXksIHRoZSBhcHBsaWNhdGlvbiBtdXN0IHRlbGwKKyAqIHRoZSBzZXJ2ZXIgd2hpY2ggdHR5IGl0IHdpbGwgaGFuZGxlLgorICoKKyAqIFRoZSBhcHBsaWNhdGlvbiBtdXN0IGFsc28gc3BlY2lmeSBob3cgYnJhaWxsZSBrZXlzIHdpbGwgYmUgZGVsaXZlcmVkIHRvIGl0LgorICogVHdvIHdheXMgYXJlIHBvc3NpYmxlOgorICoKKyAqIC0gZHJpdmVyLXNwZWNpZmljIGtleWNvZGVzOiBhcHBsaWNhdGlvbnMgd2lsbCBnZXQgdmFsdWVzIHNwZWNpZmljIHRvIGVhY2ggYnJhaWxsZSBkcml2ZXIsIHNpbmNlIHRoZSBrZXljb2RlLCBhcworICogICBkZWZpbmVkIGluIHRoZSBkcml2ZXIgd2lsbCBiZSBnaXZlbiBmb3IgZWFjaCBrZXkgZXZlbnQgKHByZXNzIG9yIHJlbGVhc2UpLgorICogICBVc2luZyB0aGVtIGxlYWRzIHRvIGJ1aWxkaW5nIGhpZ2hseSBkcml2ZXItZGVwZW5kZW50IGFwcGxpY2F0aW9ucywgd2hpY2gKKyAqICAgY2FuIHlldCBzb21ldGltZXMgYmUgdXNlZnVsIHRvIG1pbWljIGV4aXN0aW5nIHByb3ByaWV0YXJ5IGFwcGxpY2F0aW9ucworICogICBmb3IgaW5zdGFuY2UuCisgKiAtIGNvbW1hbmRzOiBhcHBsaWNhdGlvbnMgd2lsbCBnZXQgZXhhY3RseSB0aGUgc2FtZSB2YWx1ZXMgYXMKKyAqICAgXGUgYnJsdHR5LiBUaGlzIGFsbG93cyBkcml2ZXItaW5kZXBlbmRlbnQgY2xpZW50cywgd2hpY2ggd2lsbCBob3BlZnVsbHkKKyAqICAgYmUgbmljZSB0byB1c2Ugd2l0aCBhIGxvdCBvZiBkaWZmZXJlbnQgdGVybWluYWxzLgorICogXHNhIGJybGFwaV9yZWFkS2V5KCkKKyAqIEB7CisgKi8KKworLyogYnJsYXBpX2VudGVyVHR5TW9kZSAqLworLyoqIEFzayBmb3Igc29tZSB0dHksIHdpdGggc29tZSBrZXkgbWVjaGFuaXNtCisgKgorICogXHBhcmFtIHR0eQorICogLSBJZiB0dHk+PTAgdGhlbiB0YWtlIGNvbnRyb2wgb2YgdGhlIHNwZWNpZmllZCB0dHkuCisgKiAtIElmIHR0eT09OjpCUkxBUElfVFRZX0RFRkFVTFQgdGhlbiB0YWtlIGNvbnRyb2wgb2YgdGhlIGRlZmF1bHQgdHR5LgorICoKKyAqIFxwYXJhbSBkcml2ZXIgdGVsbHMgaG93IHRoZSBhcHBsaWNhdGlvbiB3YW50cyBicmxhcGlfcmVhZEtleSgpIHRvIHJldHVybgorICoga2V5IHByZXNzZXMuIE5VTEwgb3IgIiIgbWVhbnMgQlJMVFRZIGNvbW1hbmRzIGFyZSByZXF1aXJlZCwKKyAqIHdoZXJlYXMgYSBkcml2ZXIgbmFtZSBtZWFucyB0aGF0IGRyaXZlci1zcGVjaWZpYyBrZXljb2RlcyBhcmUgZXhwZWN0ZWQuCisgKgorICogXHJldHVybiB0aGUgdXNlZCB0dHkgbnVtYmVyIG9uIHN1Y2Nlc3MsIC0xIG9uIGVycm9yCisgKgorICogV0lORE9XUEFUSCBhbmQgV0lORE9XSUQgc2hvdWxkIGJlIHByb3BhZ2F0ZWQgd2hlbiBydW5uaW5nIHJlbW90ZSBhcHBsaWNhdGlvbnMKKyAqIHZpYSBzc2gsIGZvciBpbnN0YW5jZSwgYWxvbmcgd2l0aCBCUkxBUElfSE9TVCBhbmQgdGhlIGF1dGhvcml6YXRpb24ga2V5IChzZWUKKyAqIFNlbmRFbnYgaW4gc3NoX2NvbmZpZyg1KSBhbmQgQWNjZXB0RW52IGluIHNzaGRfY29uZmlnKDUpKQorICoKKyAqIE9uY2UgYnJsYXBpX2VudGVyVHR5TW9kZSgpIGlzIGNhbGxlZCwgYnJsYXBpX2xlYXZlVHR5TW9kZSgpIGhhcyB0byBiZSBjYWxsZWQKKyAqIGJlZm9yZSBjYWxsaW5nIGJybGFwaV9lbnRlclR0eU1vZGUoKSBhZ2Fpbi4KKyAqCisgKiBUT0RPOiBkb2N1bWVudCB3aGljaCBmdW5jdGlvbnMgd29yayBpbiBUVFkgbW9kZSBvbmx5LgorICoKKyAqIFxzYSBicmxhcGlfbGVhdmVUdHlNb2RlKCkgYnJsYXBpX3JlYWRLZXkoKQorICovCisjaWZuZGVmIEJSTEFQSV9OT19TSU5HTEVfU0VTU0lPTgoraW50IEJSTEFQSV9TVERDQUxMIGJybGFwaV9lbnRlclR0eU1vZGUoaW50IHR0eSwgY29uc3QgY2hhciAqZHJpdmVyKTsKKyNlbmRpZiAvKiBCUkxBUElfTk9fU0lOR0xFX1NFU1NJT04gKi8KK2ludCBCUkxBUElfU1REQ0FMTCBicmxhcGlfX2VudGVyVHR5TW9kZShicmxhcGlfaGFuZGxlX3QgKmhhbmRsZSwgaW50IHR0eSwgY29uc3QgY2hhciAqZHJpdmVyKTsKKworLyoqIFNlbGVjdCB0aGUgZGVmYXVsdCB0dHkuCisgKgorICogVGhlIGxpYnJhcnkgdGFrZXMgdGhlIGZvbGxvd2luZyBzdGVwczoKKyAqIC0jIFRyeSB0byBnZXQgdGhlIHR0eSBudW1iZXIgZnJvbSB0aGUgXGMgV0lORE9XSUQgZW52aXJvbm1lbnQgdmFyaWFibGUgKGZvciB0aGUgXGMgeHRlcm0gY2FzZSkuCisgKiAtIyBUcnkgdG8gZ2V0IHRoZSB0dHkgbnVtYmVyIGZyb20gdGhlIFxjIENPTlRST0xWVCBlbnZpcm9ubWVudCB2YXJpYWJsZS4KKyAqIC0jIFJlYWQgXGMgL3Byb2Mvc2VsZi9zdGF0IChvbiBcYyBMaW51eCkuCisgKgorICogXHNhIGJybGFwaV9lbnRlclR0eU1vZGUoKQorICovCisjZGVmaW5lIEJSTEFQSV9UVFlfREVGQVVMVCAtMQorCisvKiBicmxhcGlfZW50ZXJUdHlNb2RlV2l0aFBhdGggKi8KKy8qKiBBc2sgZm9yIHNvbWUgdHR5IHNwZWNpZmllZCBieSBpdHMgcGF0aCBpbiB0aGUgdHR5IHRyZWUsIHdpdGggc29tZSBrZXkgbWVjaGFuaXNtCisgKgorICogXHBhcmFtIHR0eXMgcG9pbnRzIG9uIHRoZSBhcnJheSBvZiB0dHlzIHJlcHJlc2VudGluZyB0aGUgdHR5IHBhdGggdG8gYmUgZ290LgorICogQ2FuIGJlIE5VTEwgaWYgbnR0eXMgaXMgMC4KKyAqIFxwYXJhbSBjb3VudCBnaXZlcyB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzIGluIHR0eXMuCisgKiBccGFyYW0gZHJpdmVyIGhhcyB0aGUgc2FtZSBtZWFuaW5nIGFzIGluIGJybGFwaV9lbnRlclR0eU1vZGUoKQorICoKKyAqIFByb3ZpZGluZyBudHR5cyA9PSAwIG1lYW5zIHRvIGdldCB0aGUgcm9vdCwgd2hpY2ggaXMgdXN1YWxseSB3aGF0IGEgc2NyZWVuCisgKiByZWFkZXJzIHdhbnRzIHRvIHVzZS4KKyAqCisgKiBUaGUgY29udGVudCBvZiBXSU5ET1dQQVRIIG9yIFhER19WVE5SIHdpbGwgYWx3YXlzIGJlIHByZXBlbmRlZCB0byB0aGUgZ2l2ZW4KKyAqIFxwIHR0eXMgYXJyYXksIHNvIHRoZSBhcHBsaWNhdGlvbiBkb2VzIG5vdCBuZWVkIHRvIGRldGVybWluZSBieSBpdHNlbGYgd2hlcmUKKyAqIGl0IGlzIHJ1bm5pbmcuCisgKgorICogXHJldHVybiAwIG9uIHN1Y2Nlc3MsIC0xIG9uIGVycm9yLgorICoKKyAqIFxzYSBicmxhcGlfZW50ZXJUdHlNb2RlKCkKKyAqLworI2lmbmRlZiBCUkxBUElfTk9fU0lOR0xFX1NFU1NJT04KK2ludCBCUkxBUElfU1REQ0FMTCBicmxhcGlfZW50ZXJUdHlNb2RlV2l0aFBhdGgoY29uc3QgaW50ICp0dHlzLCBpbnQgY291bnQsIGNvbnN0IGNoYXIgKmRyaXZlcik7CisjZW5kaWYgLyogQlJMQVBJX05PX1NJTkdMRV9TRVNTSU9OICovCitpbnQgQlJMQVBJX1NURENBTEwgYnJsYXBpX19lbnRlclR0eU1vZGVXaXRoUGF0aChicmxhcGlfaGFuZGxlX3QgKmhhbmRsZSwgY29uc3QgaW50ICp0dHlzLCBpbnQgY291bnQsIGNvbnN0IGNoYXIgKmRyaXZlcik7CisKKy8qIGJybGFwaV9sZWF2ZVR0eU1vZGUgKi8KKy8qKiBTdG9wIGNvbnRyb2xsaW5nIHRoZSB0dHkKKyAqCisgKiBccmV0dXJuIDAgb24gc3VjY2VzcywgLTEgb24gZXJyb3IuCisgKgorICogXHNhIGJybGFwaV9lbnRlclR0eU1vZGUoKQorICovCisjaWZuZGVmIEJSTEFQSV9OT19TSU5HTEVfU0VTU0lPTgoraW50IEJSTEFQSV9TVERDQUxMIGJybGFwaV9sZWF2ZVR0eU1vZGUodm9pZCk7CisjZW5kaWYgLyogQlJMQVBJX05PX1NJTkdMRV9TRVNTSU9OICovCitpbnQgQlJMQVBJX1NURENBTEwgYnJsYXBpX19sZWF2ZVR0eU1vZGUoYnJsYXBpX2hhbmRsZV90ICpoYW5kbGUpOworCisvKiBicmxhcGlfc2V0Rm9jdXMgKi8KKy8qKiBUZWxsIHRoZSBjdXJyZW50IHR0eSB0byBicmx0dHkKKyAqCisgKiBUaGlzIGlzIGludGVuZGVkIGZvciBmb2N1cyB0ZWxsZXJzLCBzdWNoIGFzIGJybHR0eSwgeGJybGFwaSwgc2NyZWVuLCAuLi4KKyAqIGJybGFwaV9lbnRlclR0eU1vZGUoKSBtdXN0IGhhdmUgYmVlbiBjYWxsZWQgYmVmb3JlaGFuZCB0byB0ZWxsIHdoZXJlIHRoaXMgZm9jdXMKKyAqIGFwcGxpZXMgaW4gdGhlIHR0eSB0cmVlLgorICoKKyAqIFxyZXR1cm4gMCBvbiBzdWNjZXNzLCAtMSBvbiBlcnJvci4KKyAqCisgKiBcc2EgYnJsYXBpX2VudGVyVHR5TW9kZSgpIGJybGFwaV9sZWF2ZVR0eU1vZGUoKQorICovCisjaWZuZGVmIEJSTEFQSV9OT19TSU5HTEVfU0VTU0lPTgoraW50IEJSTEFQSV9TVERDQUxMIGJybGFwaV9zZXRGb2N1cyhpbnQgdHR5KTsKKyNlbmRpZiAvKiBCUkxBUElfTk9fU0lOR0xFX1NFU1NJT04gKi8KK2ludCBCUkxBUElfU1REQ0FMTCBicmxhcGlfX3NldEZvY3VzKGJybGFwaV9oYW5kbGVfdCAqaGFuZGxlLCBpbnQgdHR5KTsKKworLyoqIEB9ICovCisKKy8qKiBcZGVmZ3JvdXAgYnJsYXBpX3dyaXRlIFdyaXRpbmcgb24gdGhlIGJyYWlsbGUgZGlzcGxheQorICogXGJyaWVmIFdyaXRlIHRleHQgdG8gdGhlIGJyYWlsbGUgZGlzcGxheQorICoKKyAqIEFmdGVyIGJybGFwaV9lbnRlclR0eU1vZGUoKSBoYXMgYmVlbiBjYWxsZWQsIHRoZSBhcHBsaWNhdGlvbiBjYW4KKyAqIGNhbGwgb25lIG9mIHRoZXNlIGZ1bmN0aW9ucyB0byB3cml0ZSB0aGluZ3Mgb24gdGhlIGJyYWlsbGUgZGlzcGxheS4KKyAqCisgKiBcbm90ZSBCZSBzdXJlIHRvIGNhbGwgYnJsYXBpX2VudGVyVHR5TW9kZSgpIFxlIGJlZm9yZSBjYWxsaW5nIGJybGFwaV93cml0ZSgpLAorICogb3IgZWxzZSB5b3UnbGwgZ2V0IGFuIGVycm9yLiBUaGlzIGlzIHBhcnRpY3VsYXJseSBub3QgYWx3YXlzIHRyaXZpYWwgd2hlbgorICogd3JpdGluZyBtdWx0aXRocmVhZGVkIGFwcGxpY2F0aW9ucy4KKyAqCisgKiBcbm90ZSBEb3RzIGFyZSBjb2RlZCBhcyBkZXNjcmliZWQgaW4gSVNPL1RSIDExNTQ4LTE6IGEgZG90IHBhdHRlcm4gaXMgY29kZWQKKyAqIGJ5IGEgYnl0ZSBpbiB3aGljaCBiaXQgMCBpcyBzZXQgaWZmIGRvdCAxIGlzIHVwLCBiaXQgMSBpcyBzZXQgaWZmIGRvdCAyIGlzCisgKiB1cCwgLi4uIGJpdCA3IGlzIHNldCBpZmYgZG90IDggaXMgdXAuIFRoaXMgYWxzbyBjb3JyZXNwb25kcyB0byB0aGUgbG93LW9yZGVyCisgKiBieXRlIG9mIHRoZSBjb2Rpbmcgb2YgdW5pY29kZSdzIGJyYWlsbGUgcm93IFUrMjgwMC4KKyAqCisgKiBcbm90ZSBUZXh0IGlzIHRyYW5zbGF0ZWQgYnkgdGhlIHNlcnZlciBvbmUgdG8gb25lLCBieSBqdXN0IHVzaW5nIGEgc2ltcGxlCisgKiB3Y2hhcl90IHRvIHBhdHRlcm4gdGFibGUsIGkuZS4gbm8gY29udHJhY3Rpb24vZXhwYW5zaW9uIGlzIHBlcmZvcm1lZCwgYmVjYXVzZQorICogdGhlIGNsaWVudCB3b3VsZCB0aGVuIGhhdmUgbm8gd2F5IHRvIGtub3cgaG93IHdpZGUgdGhlIG91dHB1dCB3b3VsZCBiZSBhbmQKKyAqIHRodXMgdGhlIHF1YW50aXR5IG9mIHRleHQgdG8gZmVlZC4gIElmIGNvbnRyYWN0aW9uL2V4cGFuc2lvbiBpcyBkZXNpcmVkLCB0aGUKKyAqIGNsaWVudCBzaG91bGQgcGVyZm9ybSBpdCBpdHNlbGYgKGUuZy4gdGhhbmtzIHRvIGxpYmxvdWlzIG9yIGdub21lLWJyYWlsbGUpCisgKiBhbmQgc2VuZCB0aGUgcmVzdWx0aW5nIGRvdCBwYXR0ZXJucy4gIFRoaXMgaXMgYWN0dWFsbHkgZXhhY3RseSB0aGUgc2FtZQorICogcHJvYmxlbSBhcyBmb250IHJlbmRlcmluZyBvbiBhIGdyYXBoaWNhbCBkaXNwbGF5OiBmb3IgYmV0dGVyIGNvbnRyb2wsCisgKiBub3dhZGF5cyBhbGwgZm9udCByYXN0ZXJpemF0aW9uIGlzIHBlcmZvcm1lZCBvbiB0aGUgY2xpZW50IHNpZGUsIGFuZCBtZXJlCisgKiBwaXhtYXBzIGFyZSBzZW50IHRvIHRoZSBYIHNlcnZlci4KKyAqCisgKiBcbm90ZSBGb3IgYnJhaWxsZSBkaXNwbGF5cyB3aXRoIG11bHRpcGxlIGxpbmVzLCB0ZXh0IHdpbGwgYmUgd3JhcHBlZCBvdmVyIHRoZQorICogbGluZXMuCisgKgorICogQHsgKi8KKworLyogYnJsYXBpX3dyaXRlVGV4dCAqLworLyoqIFdyaXRlIHRoZSBnaXZlbiBcXDAtdGVybWluYXRlZCBzdHJpbmcgdG8gdGhlIGJyYWlsbGUgZGlzcGxheQorICoKKyAqIElmIHRoZSBzdHJpbmcgaXMgdG9vIGxvbmcsIGl0IGlzIHRydW5jYXRlZC4gSWYgaXQncyB0b28gc2hvcnQsCisgKiBpdCBpcyBwYWRkZWQgd2l0aCBzcGFjZXMuIFRoZSB0ZXh0IGlzIGFzc3VtZWQgdG8gYmUgaW4gdGhlIGN1cnJlbnQgYXBwbGljYXRpb24KKyAqIGxvY2FsZSBjaGFyc2V0IHNldCBieSBzZXRsb2NhbGUoMykgaWYgaXQgd2FzIGNhbGxlZCwgb3IgdGhlIGxvY2FsZSBjaGFyc2V0CisgKiBmcm9tIHRoZSBhcHBsaWNhdGlvbiBsb2NhbGUgZW52aXJvbm1lbnQgdmFyaWFibGVzIGlmIHNldGxvY2FsZSgzKSB3YXMgbm90IGNhbGxlZC4KKyAqCisgKiBccGFyYW0gY3Vyc29yIGdpdmVzIHRoZSBjdXJzb3IgcG9zaXRpb247IGlmIGVxdWFsIHRvIDo6QlJMQVBJX0NVUlNPUl9PRkYsIG5vIGN1cnNvciBpcyBzaG93biBhdAorICogYWxsOyBpZiBjdXJzb3I9PTo6QlJMQVBJX0NVUlNPUl9MRUFWRSwgdGhlIGN1cnNvciBpcyBsZWZ0IHdoZXJlIGl0IGlzCisgKgorICogXHBhcmFtIHRleHQgcG9pbnRzIHRvIHRoZSBzdHJpbmcgdG8gYmUgZGlzcGxheWVkLgorICoKKyAqIFxyZXR1cm4gMCBvbiBzdWNjZXNzLCAtMSBvbiBlcnJvci4KKyAqLworI2lmbmRlZiBCUkxBUElfTk9fU0lOR0xFX1NFU1NJT04KK2ludCBCUkxBUElfU1REQ0FMTCBicmxhcGlfd3JpdGVUZXh0KGludCBjdXJzb3IsIGNvbnN0IGNoYXIgKnRleHQpOworI2VuZGlmIC8qIEJSTEFQSV9OT19TSU5HTEVfU0VTU0lPTiAqLworaW50IEJSTEFQSV9TVERDQUxMIGJybGFwaV9fd3JpdGVUZXh0KGJybGFwaV9oYW5kbGVfdCAqaGFuZGxlLCBpbnQgY3Vyc29yLCBjb25zdCBjaGFyICp0ZXh0KTsKKworLyogYnJsYXBpX3dyaXRlV1RleHQgKi8KKy8qKiBXcml0ZSB0aGUgZ2l2ZW4gXFwwLXRlcm1pbmF0ZWQgdW5pY29kZSBzdHJpbmcgdG8gdGhlIGJyYWlsbGUgZGlzcGxheQorICoKKyAqIElmIHRoZSBzdHJpbmcgaXMgdG9vIGxvbmcsIGl0IGlzIHRydW5jYXRlZC4gSWYgaXQncyB0b28gc2hvcnQsCisgKiBpdCBpcyBwYWRkZWQgd2l0aCBzcGFjZXMuCisgKgorICogXHBhcmFtIGN1cnNvciBnaXZlcyB0aGUgY3Vyc29yIHBvc2l0aW9uOyBpZiBlcXVhbCB0byA6OkJSTEFQSV9DVVJTT1JfT0ZGLCBubyBjdXJzb3IgaXMgc2hvd24gYXQKKyAqIGFsbDsgaWYgY3Vyc29yPT06OkJSTEFQSV9DVVJTT1JfTEVBVkUsIHRoZSBjdXJzb3IgaXMgbGVmdCB3aGVyZSBpdCBpcworICoKKyAqIFxwYXJhbSB0ZXh0IHBvaW50cyB0byB0aGUgc3RyaW5nIHRvIGJlIGRpc3BsYXllZC4KKyAqCisgKiBccmV0dXJuIDAgb24gc3VjY2VzcywgLTEgb24gZXJyb3IuCisgKi8KKyNpZm5kZWYgQlJMQVBJX05PX1NJTkdMRV9TRVNTSU9OCitpbnQgQlJMQVBJX1NURENBTEwgYnJsYXBpX3dyaXRlV1RleHQoaW50IGN1cnNvciwgY29uc3Qgd2NoYXJfdCAqdGV4dCk7CisjZW5kaWYgLyogQlJMQVBJX05PX1NJTkdMRV9TRVNTSU9OICovCitpbnQgQlJMQVBJX1NURENBTEwgYnJsYXBpX193cml0ZVdUZXh0KGJybGFwaV9oYW5kbGVfdCAqaGFuZGxlLCBpbnQgY3Vyc29yLCBjb25zdCB3Y2hhcl90ICp0ZXh0KTsKKworLyogYnJsYXBpX3dyaXRlRG90cyAqLworLyoqIFdyaXRlIHRoZSBnaXZlbiBkb3RzIGFycmF5IHRvIHRoZSBkaXNwbGF5CisgKgorICogXHBhcmFtIGRvdHMgcG9pbnRzIG9uIGFuIGFycmF5IG9mIGRvdCBpbmZvcm1hdGlvbiwgb25lIHBlciBjaGFyYWN0ZXIuIEl0cworICogc2l6ZSBtdXN0IGhlbmNlIGJlIHRoZSBzYW1lIGFzIHdoYXQgYnJsYXBpX2dldERpc3BsYXlTaXplKCkgcmV0dXJucy4KKyAqCisgKiBccmV0dXJuIDAgb24gc3VjY2VzcywgLTEgb24gZXJyb3IuCisgKi8KKyNpZm5kZWYgQlJMQVBJX05PX1NJTkdMRV9TRVNTSU9OCitpbnQgQlJMQVBJX1NURENBTEwgYnJsYXBpX3dyaXRlRG90cyhjb25zdCB1bnNpZ25lZCBjaGFyICpkb3RzKTsKKyNlbmRpZiAvKiBCUkxBUElfTk9fU0lOR0xFX1NFU1NJT04gKi8KK2ludCBCUkxBUElfU1REQ0FMTCBicmxhcGlfX3dyaXRlRG90cyhicmxhcGlfaGFuZGxlX3QgKmhhbmRsZSwgY29uc3QgdW5zaWduZWQgY2hhciAqZG90cyk7CisKKy8qIGJybGFwaV93cml0ZUFyZ3VtZW50c190ICovCisvKiogU3RydWN0dXJlIGNvbnRhaW5pbmcgYXJndW1lbnRzIHRvIGJlIGdpdmVuIHRvIGJybGFwaV93cml0ZSgpICovCit0eXBlZGVmIHN0cnVjdCB7CisgIGludCBkaXNwbGF5TnVtYmVyIC8qKiBEaXNwbGF5IG51bWJlciA6OkJSTEFQSV9ESVNQTEFZX0RFRkFVTFQgPT0gdW5zcGVjaWZpZWQgKi87CisgIHVuc2lnbmVkIGludAorICAgICAgcmVnaW9uQmVnaW4gLyoqIFJlZ2lvbiBvZiBkaXNwbGF5IHRvIHVwZGF0ZSwgMXN0IGNoYXJhY3RlciBvZiBkaXNwbGF5IGlzCisgICAgICAgICAgICAgICAgICAgICAxLCAxc3QgY2hhcmFjdGVyIG9mIHRoZSBzZWNvbmQgbGluZSBvZiBkaXNwbGF5IGlzIHRoZSB3aWR0aAorICAgICAgICAgICAgICAgICAgICAgb2YgYSBsaW5lIHBsdXMgMSwgZXRjLiBSZWdpb25zIGFyZSBhbHdheXMgYSBsaW5lYXIgd3JhcAorICAgICAgICAgICAgICAgICAgICAgb3ZlciB0aGUgZGlmZmVyZW50IGxpbmVzLiAqLworICAgICAgOworICBpbnQgcmVnaW9uU2l6ZSAvKiogTnVtYmVyIG9mIGNoYXJhY3RlcnMgaGVsZCBpbiBhbmRNYXNrIGFuZCBvck1hc2suIElmIG5lZ2F0aXZlLCBpdHMgYWJzb2x1dGUgdmFsdWUgaXMgdGFrZW4gaW50byBhY2NvdW50LCBhbmQgdGhlIG91dHB1dCBpcyBwYWRkZWQgb3IgdHJ1bmNhdGVkIHRvIGZpbGwgdGhlIHJlc3Qgb2YgdGhlIGRpc3BsYXkuICovOworICBjb25zdCBjaGFyICp0ZXh0IC8qKiBUZXh0IHRvIGRpc3BsYXksIG11c3QgaG9sZCBhcyBtYW55IGNoYXJhY3RlcnMgYXMgdGhlIHJlZ2lvbiBmaWVsZHMgZXhwcmVzc2VzLiAqLzsKKyAgaW50IHRleHRTaXplIC8qKiBTaXplIG9mIHRleHQgaW4gYnl0ZXMuIElmIC0xLCBzdHJsZW4oKSBpcyB1c2VkIGZvciBjb21wdXRpbmcgaXQuICovOworICBjb25zdCB1bnNpZ25lZCBjaGFyICphbmRNYXNrIC8qKiBBbmQgYXR0cmlidXRlczsgYXBwbGllZCBmaXJzdCAqLzsKKyAgY29uc3QgdW5zaWduZWQgY2hhciAqb3JNYXNrIC8qKiBPciBhdHRyaWJ1dGVzOyBhcHBsaWVkIFxlIGFmdGVyIEFORGluZyAqLzsKKyAgaW50IGN1cnNvciAvKiogOjpCUkxBUElfQ1VSU09SX0xFQVZFID09IGRvbid0IHRvdWNoLCA6OkJSTEFQSV9DVVJTT1JfT0ZGID09IHR1cm4gb2ZmLCAxID0gMXN0IGNoYXIgb2YgZGlzcGxheSwgLi4uICovOworICBjb25zdCBjaGFyICpjaGFyc2V0IC8qKiBUZXh0IGNoYXJzZXQuIE5VTEwgbWVhbnMgaXQgaXMgYXNzdW1lZCB0byBiZSA4Yml0cywgYW5kIHRoZSBzYW1lIGFzIHRoZSBzZXJ2ZXIncy4gIiIgbWVhbnMgY3VycmVudCBsb2NhbGUncyBjaGFyc2V0LiBJZiBubyBsb2NhbGUgd2FzIHNlbGVjdGVkLCBkZWZhdWx0cyB0byBOVUxMJ3MgbWVhbmluZy4gKi87Cit9IGJybGFwaV93cml0ZUFyZ3VtZW50c190OworCisvKiogV3JpdGUgdG8gdGhlIGRlZmF1bHQgZGlzcGxheSBvbiB0aGUgYnJhaWxsZSBkZXZpY2UuCisgKgorICogXHNhIGJybGFwaV93cml0ZSgpIGJybGFwaV93cml0ZUFyZ3VtZW50c190CisgKi8KKyNkZWZpbmUgQlJMQVBJX0RJU1BMQVlfREVGQVVMVCAtMQorCisvKiogRG8gbm90IGNoYW5nZSB0aGUgY3Vyc29yJ3Mgc3RhdGUgb3IgcG9zaXRpb24uCisgKgorICogXHNhIGJybGFwaV93cml0ZVRleHQoKSBicmxhcGlfd3JpdGUoKSBicmxhcGlfd3JpdGVBcmd1bWVudHNfdAorICovCisjZGVmaW5lIEJSTEFQSV9DVVJTT1JfTEVBVkUgLTEKKworLyoqIERvIG5vdCBkaXNwbGF5IHRoZSBjdXJzb3IuCisgKgorICogXHNhIGJybGFwaV93cml0ZVRleHQoKSBicmxhcGlfd3JpdGUoKSBicmxhcGlfd3JpdGVBcmd1bWVudHNfdAorICovCisjZGVmaW5lIEJSTEFQSV9DVVJTT1JfT0ZGIDAKKworLyogQlJMQVBJX1dSSVRFQVJHVU1FTlRTX0lOSVRJQUxJWkVSICovCisvKiogQWxsb3dzIHRvIGluaXRpYWxpemUgYSBzdHJ1Y3R1cmUgb2YgdHlwZSBcZSBicmxhcGlfd3JpdGVBcmd1bWVudHNfdCAqCisgKiB3aXRoIGRlZmF1bHQgdmFsdWVzOgorICogZGlzcGxheU51bWJlciA9IDo6QlJMQVBJX0RJU1BMQVlfREVGQVVMVDsgKHVuc3BlY2lmaWVkKQorICogcmVnaW9uQmVnaW4gPSByZWdpb25TaXplID0gMDsgKHVwZGF0ZSB0aGUgd2hvbGUgZGlzcGxheSwgREVQUkVDQVRFRCBhbmQgd2lsbAorICogYmUgZm9yYmlkZGVuIGluIG5leHQgcmVsZWFzZS4gWW91IG11c3QgYWx3YXlzIGV4cHJlc3MgdGhlIHJlZ2lvbiB5b3Ugd2lzaCB0bworICogdXBkYXRlKQorICogdGV4dCA9IGFuZE1hc2sgPSBvck1hc2sgPSBOVUxMOyAobm8gdGV4dCwgbm8gYXR0cmlidXRlKQorICogY3Vyc29yID0gOjpCUkxBUElfQ1VSU09SX0xFQVZFOyAoZG9uJ3QgdG91Y2ggY3Vyc29yKQorKi8KKyNkZWZpbmUgQlJMQVBJX1dSSVRFQVJHVU1FTlRTX0lOSVRJQUxJWkVSIHsgXAorICAuZGlzcGxheU51bWJlciA9IEJSTEFQSV9ESVNQTEFZX0RFRkFVTFQsIFwKKyAgLnJlZ2lvbkJlZ2luID0gMCwgXAorICAucmVnaW9uU2l6ZSA9IDAsIFwKKyAgLnRleHQgPSBOVUxMLCBcCisgIC50ZXh0U2l6ZSA9IC0xLCBcCisgIC5hbmRNYXNrID0gTlVMTCwgXAorICAub3JNYXNrID0gTlVMTCwgXAorICAuY3Vyc29yID0gQlJMQVBJX0NVUlNPUl9MRUFWRSwgXAorICAuY2hhcnNldCA9IE5VTEwgXAorfQorCisvKiBicmxhcGlfd3JpdGUgKi8KKy8qKiBVcGRhdGUgYSBzcGVjaWZpYyByZWdpb24gb2YgdGhlIGJyYWlsbGUgZGlzcGxheSBhbmQgYXBwbHkgYW5kL29yIG1hc2tzCisgKgorICogXHBhcmFtIGFyZ3VtZW50cyBnaXZlcyBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHRoZSB1cGRhdGUKKyAqCisgKiByZWdpb25CZWdpbiBhbmQgcmVnaW9uU2l6ZSBtdXN0IGJlIGZpbGxlZCBmb3Igc3BlY2lmeWluZyB3aGljaCBwYXJ0IG9mIHRoZQorICogZGlzcGxheSB3aWxsIGJlIHVwZGF0ZWQsIGFzIHdlbGwgYXMgdGhlIHNpemUgKGluIGNoYXJhY3RlcnMsIG5vdCBieXRlcykgb2YKKyAqIHRoZSB0ZXh0LCBhbmRNYXNrIGFuZCBvck1hc2sgbWVtYmVycy4KKyAqCisgKiBJZiBnaXZlbiwgdGhlICJ0ZXh0IiBmaWVsZCBob2xkcyB0aGUgdGV4dCB0aGF0IHdpbGwgYmUgZGlzcGxheWVkIGluIHRoZQorICogcmVnaW9uLiAgVGhlIGNoYXIgc3RyaW5nIG11c3QgaG9sZCBleGFjdGx5IGFzIG1hbnkgY2hhcmFjdGVycyBhcyB0aGUgcmVnaW9uCisgKiBmaWVsZHMgZXhwcmVzcy4gIEZvciBtdWx0aWJ5dGUgdGV4dCwgdGhpcyBpcyB0aGUgbnVtYmVyIG9mIFxlIG11bHRpYnl0ZQorICogY2FyYWN0ZXJzLiAgTm90YWJseSwgY29tYmluaW5nIGFuZCBkb3VibGUtd2lkdGggY2FyYWN0ZXJzIGNvdW50IGZvciAxLgorICoKKyAqIFRoZSBhY3R1YWwgbGVuZ3RoIG9mIHRoZSB0ZXh0IGluIFxlIGJ5dGVzIG1heSBiZSBzcGVjaWZpZWQgdGhhbmtzIHRvCisgKiB0ZXh0U2l6ZS4gIElmIC0xIGlzIGdpdmVuLCBpdCB3aWxsIGJlIGNvbXB1dGVkIHRoYW5rcyB0byBzdHJsZW4oKSwgc28gInRleHQiCisgKiBtdXN0IHRoZW4gYmUgYSBOVUwtdGVybWluYXRlZCBzdHJpbmcuCisgKgorICogVGhlICJhbmRNYXNrIiBhbmQgIm9yTWFzayIgbWFza3MsIGlmIHByZXNlbnQsIGFyZSB0aGVuIGFwcGxpZWQgb24gdG9wIG9mCisgKiB0aGUgdGV4dCwgb25lIGJ5dGUgcGVyIGNoYXJhY3Rlci4gIFRoaXMgaGVuY2UgcGVybWl0cyB0aGUgc3VwZXJpbXBvc2luZyBvZgorICogYXR0cmlidXRlcyBvdmVyIHRoZSB0ZXh0LiAgRm9yIGluc3RhbmNlLCBzZXR0aW5nIGFuIGFuZE1hc2sgbWFzayBmdWxsIG9mCisgKiBCUkxBUElfRE9UUygxLDEsMSwxLDEsMSwwLDApIHdpbGwgb25seSBrZWVwIChsb2dpY2FsIEFORCkgZG90cyAxLTYsCisgKiBoZW5jZSBkcm9wcGluZyBkb3RzIDcgYW5kIDguICBPbiB0aGUgY29udHJhcnksIHNldHRpbmcgYW4gb3JNYXNrIGZ1bGwgb2YKKyAqIEJSTEFQSV9ET1Q3fEJSTEFQSV9ET1Q4IHdpbGwgYWRkIChsb2dpY2FsIE9SKSBkb3RzIDcgYW5kIDguCisgKgorICogVGhlICJjaGFyc2V0IiBmaWVsZCwgaWYgcHJlc2VudCwgc3BlY2lmaWVzIHRoZSBjaGFyc2V0IG9mIHRoZSAidGV4dCIgZmllbGQuCisgKiBJZiBpdCBpcyAiIiwgdGhlIGN1cnJlbnQgbG9jYWxlJ3MgY2hhcnNldCAoaWYgYW55KSBpcyBhc3N1bWVkLiAgRWxzZSwgdGhlCisgKiA4LWJpdCBjaGFyc2V0IG9mIHRoZSBzZXJ2ZXIgaXMgYXNzdW1lZC4KKyAqCisgKiBBIHNwZWNpYWwgaW52b2NhdGlvbiBpcyB3aXRoIGFuIHVubW9kaWZpZWQgaW5pdGlhbGl6ZWQgc3RydWN0dXJlOiB0aGlzIGNsZWFycworICogdGhlIGNsaWVudCdzIHdob2xlIGRpc3BsYXksIGxldHRpbmcgdGhlIGRpc3BsYXkgb2Ygb3RoZXIgYXBwbGljYXRpb25zIG9uCisgKiB0aGUgc2FtZSB0dHkgb3Igb2YgYXBwbGljYXRpb25zICJ1bmRlciIgdGhlIHR0eSBhcHBlYXIuIFNlZSBDb25jdXJyZW5jeQorICogbWFuYWdlbWVudCBzZWN0aW9uIG9mIHRoZSBCcmxBUEkgZG9jdW1lbnRhdGlvbiBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFxyZXR1cm4gMCBvbiBzdWNjZXNzLCAtMSBvbiBlcnJvci4KKyAqLworI2lmbmRlZiBCUkxBUElfTk9fU0lOR0xFX1NFU1NJT04KK2ludCBCUkxBUElfU1REQ0FMTCBicmxhcGlfd3JpdGUoY29uc3QgYnJsYXBpX3dyaXRlQXJndW1lbnRzX3QgKmFyZ3VtZW50cyk7CisjZW5kaWYgLyogQlJMQVBJX05PX1NJTkdMRV9TRVNTSU9OICovCitpbnQgQlJMQVBJX1NURENBTEwgYnJsYXBpX193cml0ZShicmxhcGlfaGFuZGxlX3QgKmhhbmRsZSwgY29uc3QgYnJsYXBpX3dyaXRlQXJndW1lbnRzX3QgKmFyZ3VtZW50cyk7CisKKy8qKiBAfSAqLworCisjaW5jbHVkZSAiYnJsYXBpX2tleWNvZGVzLmgiCisKKy8qKiBcZGVmZ3JvdXAgYnJsYXBpX2tleXMgUmVhZGluZyBrZXkgcHJlc3NlcworICogXGJyaWVmIEhvdyB0byByZWFkIGtleSBwcmVzc2VzIGZyb20gdGhlIGJyYWlsbGUgdGVybWluYWwKKyAqCisgKiBPbmNlIGJybGFwaV9lbnRlclR0eU1vZGUoKSBoYXMgYmVlbiBjYWxsZWQsIHRoZSBhcHBsaWNhdGlvbiBjYW4gY2FsbCBicmxhcGlfcmVhZEtleSgpIHRvCisgKiByZWFkIGtleSBwcmVzc2VzLiBFaXRoZXIga2V5IGNvZGVzIChzZWUgXHJlZiBicmxhcGlfa2V5Y29kZXMpIG9yIGNvbW1hbmRzIHdpbGwgYmUgcmV0dXJuZWQsIGRlcGVuZGluZworICogb24gcGFyYW1ldGVycyBnaXZlbiB0byBicmxhcGlfZW50ZXJUdHlNb2RlKCkuCisgKgorICogS2V5IHByZXNzZXMgYXJlIGJ1ZmZlcmVkLCBzbyB0aGF0IGNhbGxpbmcgYnJsYXBpX3JlYWRLZXkoKSBpbiBub24tYmxvY2tpbmcKKyAqIG1vZGUgZnJvbSB0aW1lIHRvIHRpbWUgc2hvdWxkIHN1ZmZpY2UuCisgKgorICogQHsKKyAqLworCisvKiBicmxhcGlfZXhwYW5kZWRLZXlDb2RlX3QgKi8KKy8qKiBTdHJ1Y3R1cmUgaG9sZGluZyB0aGUgY29tcG9uZW50cyBvZiBhIGtleSBjb2RlIGFzIHJldHVybmVkIGJ5IGJybGFwaV9leHBhbmRLZXlDb2RlKCkgKi8KK3R5cGVkZWYgc3RydWN0IHsKKyAgdW5zaWduZWQgaW50IHR5cGUgLyoqIHRoZSB0eXBlIHZhbHVlICovOworICB1bnNpZ25lZCBpbnQgY29tbWFuZCAvKiogdGhlIGNvbW1hbmQgdmFsdWUgKi87CisgIHVuc2lnbmVkIGludCBhcmd1bWVudCAvKiogdGhlIGFyZ3VtZW50IHZhbHVlICovOworICB1bnNpZ25lZCBpbnQgZmxhZ3MgLyoqIHRoZSBmbGFncyB2YWx1ZSAqLzsKK30gYnJsYXBpX2V4cGFuZGVkS2V5Q29kZV90OworCisvKiBicmxhcGlfZXhwYW5kS2V5Q29kZSAqLworLyoqIEV4cGFuZCB0aGUgY29tcG9uZW50cyBvZiBhIGtleSBjb2RlCisgKgorICogXHBhcmFtIGNvZGUgdGhlIGtleSBjb2RlIHRvIGJlIGV4cGFuZGVkCisgKiBccGFyYW0gZXhwYW5zaW9uIHBvaW50ZXIgdG8gdGhlIHN0cnVjdHVyZSB0aGF0IHJlY2VpdmVzIHRoZSBjb21wb25lbnRzCisgKgorICogXHJldHVybiAwIG9uIHN1Y2Nlc3MsIC0xIG9uIGVycm9yCisgKi8KK2ludCBCUkxBUElfU1REQ0FMTCBicmxhcGlfZXhwYW5kS2V5Q29kZSAoYnJsYXBpX2tleUNvZGVfdCBjb2RlLCBicmxhcGlfZXhwYW5kZWRLZXlDb2RlX3QgKmV4cGFuc2lvbik7CisKKy8qIGJybGFwaV9kZXNjcmliZWRLZXlDb2RlX3QgKi8KKy8qKiBTdHJ1Y3R1cmUgaG9sZGluZyB0aGUgY29tcG9uZW50cyBvZiBhIGtleSBjb2RlIGFzIHJldHVybmVkIGJ5IGJybGFwaV9kZXNjcmliZUtleUNvZGUoKSAqLwordHlwZWRlZiBzdHJ1Y3QgeworICBjb25zdCBjaGFyICp0eXBlIC8qKiB0aGUgIHR5cGUgbmFtZSAqLzsKKyAgY29uc3QgY2hhciAqY29tbWFuZCAvKiogdGhlIGNvbW1hbmQgbmFtZSAqLzsKKyAgdW5zaWduZWQgaW50IGFyZ3VtZW50IC8qKiB0aGUgYXJndW1lbnQgdmFsdWUgKi87CisgIHVuc2lnbmVkIGludCBmbGFncyAvKiogdGhlIGZsYWcgY291bnQgKi87CisgIGNvbnN0IGNoYXIgKmZsYWdbNjQgLSBCUkxBUElfS0VZX0ZMQUdTX1NISUZUXSAvKiogdGhlIGZsYWcgbmFtZXMgKi87CisgIGJybGFwaV9leHBhbmRlZEtleUNvZGVfdCB2YWx1ZXMgLyoqIHRoZSBhY3R1YWwgdmFsdWVzIG9mIHRoZSBjb21wb25lbnRzICovOworfSBicmxhcGlfZGVzY3JpYmVkS2V5Q29kZV90OworCisvKiBicmxhcGlfZGVzY3JpYmVLZXlDb2RlICovCisvKiogRGVzY3JpYmUgdGhlIGNvbXBvbmVudHMgb2YgYSBrZXkgY29kZS4KKyAqCisgKiBccGFyYW0gY29kZSB0aGUga2V5Y29kZSB0byBiZSBkZXNjcmliZWQKKyAqIFxwYXJhbSBkZXNjcmlwdGlvbiBwb2ludGVyIHRvIHRoZSBzdHJ1Y3R1cmUgdGhhdCByZWNlaXZlcyB0aGUgZGVzY3JpcHRpb24KKyAqCisgKiBccmV0dXJuIDAgb24gc3VjY2VzcywgLTEgb24gZXJyb3IKKyAqLworaW50IEJSTEFQSV9TVERDQUxMIGJybGFwaV9kZXNjcmliZUtleUNvZGUgKGJybGFwaV9rZXlDb2RlX3QgY29kZSwgYnJsYXBpX2Rlc2NyaWJlZEtleUNvZGVfdCAqZGVzY3JpcHRpb24pOworCisvKiogVW5pY29kZSBicmFpbGxlIHJvdyAqLworI2RlZmluZSBCUkxBUElfVUNfUk9XCTB4MjgwMFVMCisKKy8qIGJybGFwaV9yZWFkS2V5ICovCisvKiogUmVhZCBhIGtleSBmcm9tIHRoZSBicmFpbGxlIGtleWJvYXJkCisgKgorICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIG9uZSBrZXkgcHJlc3MncyBjb2RlLgorICoKKyAqIElmIE5VTEwgb3IgIiIgd2FzIGdpdmVuIHRvIGJybGFwaV9lbnRlclR0eU1vZGUoKSwgYSBcZSBicmx0dHkgY29tbWFuZCBpcyByZXR1cm5lZCwKKyAqIGFzIGRlc2NyaWJlZCBpbiB0aGUgZG9jdW1lbnRhdGlvbiBmb3IgOjpicmxhcGlfa2V5Q29kZV90IC4gSXQgaXMgaGVuY2UgcHJldHR5CisgKiBkcml2ZXItaW5kZXBlbmRlbnQsIGFuZCBzaG91bGQgYmUgdXNlZCBieSBkZWZhdWx0IHdoZW4gbm8gb3RoZXIgb3B0aW9uIGlzCisgKiBwb3NzaWJsZS4KKyAqCisgKiBCeSBkZWZhdWx0LCBhbGwgY29tbWFuZHMgYnV0IHRob3NlIHdoaWNoIHJlc3RhcnQgZHJpdmVycyBhbmQgc3dpdGNoCisgKiB2aXJ0dWFsIHRlcm1pbmFscyBhcmUgcmV0dXJuZWQgdG8gdGhlIGFwcGxpY2F0aW9uIGFuZCBub3QgdG8gYnJsdHR5LgorICogSWYgdGhlIGFwcGxpY2F0aW9uIGRvZXNuJ3Qgd2FudCB0byBzZWUgc29tZSBjb21tYW5kIGV2ZW50cywKKyAqIGl0IHNob3VsZCBjYWxsIGJybGFwaV9pZ25vcmVLZXlzKCkKKyAqCisgKiBJZiBhIGRyaXZlciBuYW1lIHdhcyBnaXZlbiB0byBicmxhcGlfZW50ZXJUdHlNb2RlKCksIGEgZHJpdmVyLXNwZWNpZmljIGtleWNvZGUgaXMgcmV0dXJuZWQsCisgKiBhcyBzcGVjaWZpZWQgYnkgdGhlIGJyYWlsbGUgZHJpdmVyLCB1c3VhbGx5IGluIDxicmx0dHkvYnJsZGVmcy14eT4gd2hlcmUgeHkKKyAqIGlzIHRoZSBkcml2ZXIncyBjb2RlLiBJdCBnZW5lcmFsbHkgY29ycmVzcG9uZHMgdG8gdGhlIHZlcnkgY29kZSB0aGF0IHRoZQorICogdGVybWluYWwgdGVsbHMgdG8gdGhlIGRyaXZlci4KKyAqIFRoaXMgc2hvdWxkIG9ubHkgYmUgdXNlZCBieSBhcHBsaWNhdGlvbnMgd2hpY2ggYXJlIGRlZGljYXRlZCB0byBhIHBhcnRpY3VsYXIKKyAqIGJyYWlsbGUgdGVybWluYWwuIEhlbmNlLCBjaGVja2luZyB0aGUgdGVybWluYWwgdHlwZSB0aGFua3MgdG8gYSBjYWxsIHRvCisgKiBicmxhcGlfZ2V0RHJpdmVyTmFtZSgpIGJlZm9yZSBnZXR0aW5nIHR0eSBjb250cm9sIGlzIGEgcHJldHR5IGdvb2QgaWRlYS4KKyAqCisgKiBCeSBkZWZhdWx0LCBhbGwgdGhlIGtleXByZXNzZXMgd2lsbCBiZSBwYXNzZWQgdG8gdGhlIGNsaWVudCwgbm9uZSB3aWxsIGdvCisgKiB0aHJvdWdoIGJybHR0eSwgc28gdGhlIGFwcGxpY2F0aW9uIHdpbGwgaGF2ZSB0byBoYW5kbGUgY29uc29sZSBzd2l0Y2hpbmcKKyAqIGl0c2VsZiBmb3IgaW5zdGFuY2UuCisgKgorICogXHBhcmFtIHdhaXQgdGVsbHMgd2hldGhlciB0aGUgY2FsbCBzaG91bGQgYmxvY2sgdW50aWwgYSBrZXkgaXMgcHJlc3NlZCAoMSkKKyAqICBvciBzaG91bGQgb25seSBwcm9iZSBrZXkgcHJlc3NlcyAoMCk7CisgKiBccGFyYW0gY29kZSBob2xkcyB0aGUga2V5IGNvZGUgaWYgYSBrZXkgcHJlc3MgaXMgaW5kZWVkIHJlYWQuCisgKgorICogXHJldHVybiAtMSBvbiBlcnJvciBvciBzaWduYWwgaW50ZXJydXB0IGFuZCAqY29kZSBpcyB0aGVuIHVuZGVmaW5lZCwgMCBpZgorICogYmxvY2sgd2FzIDAgYW5kIG5vIGtleSB3YXMgcHJlc3NlZCBzbyBmYXIsIG9yIDEgYW5kICpjb2RlIGhvbGRzIHRoZSBrZXkgY29kZS4KKyAqCisgKiBQcm9ncmFtbWluZyBoaW50czoKKyAqCisgKiBJZiB5b3VyIGFwcGxpY2F0aW9uIGlzIG9ubHkgZHJpdmVuIGJ5IGJyYWlsbGUgY29tbWFuZCBrZXlwcmVzc2VzLCB5b3UgY2FuCisgKiBqdXN0IGNhbGwgYnJsYXBpX3JlYWRLZXkoMSwgJmNvZGUpIHNvIHRoYXQgaXQga2VlcHMgYmxvY2tpbmcsIHdhaXRpbmcgZm9yCisgKiBrZXlwcmVzc2VzLgorICoKKyAqIEVsc2UsIHlvdSdsbCBwcm9iYWJseSB3YW50IHRvIHVzZSB0aGUgZmlsZSBkZXNjcmlwdG9yIHJldHVybmVkIGJ5CisgKiBicmxhcGlfb3BlbkNvbm5lY3Rpb24oKSBvciBicmxhcGlfZ2V0RmlsZURlc2NyaXB0b3IoKSBpbiB5b3VyICJiaWcgcG9sbGluZyBsb29wIi4KKyAqIEZvciBpbnN0YW5jZToKKyAqCisgKiAtIGluIGEgXGMgc2VsZWN0KCkgbG9vcCwganVzdCBhZGQgaXQgdG8gdGhlIFxjIHJlYWRmZHMgYW5kIFxjIGV4Y2VwdGZkcyBmaWxlCisgKiAgIGRlc2NyaXB0b3Igc2V0czsKKyAqIC0gaW4gYSBndGsgb3IgYXRzcGkgYXBwbGljYXRpb24sIHVzZQorICogICBcYyBnX2lvX2FkZF93YXRjaChmaWxlRGVzY3JpcHRvciwgXGMgR19JT19JTnxHX0lPX0VSUnxHX0lPX0hVUCwgXGMgZiwgXGMgZGF0YSkKKyAqICAgZm9yIGFkZGluZyBhIGNhbGxiYWNrIGNhbGxlZCBcYyBmOworICogLSBpbiBhbiBYdC9YYXcvbW90aWYtYmFzZWQgYXBwbGljYXRpb24sIHVzZQorICogICBcYyBYdEFwcEFkZElucHV0KGFwcF9jb250ZXh0LCBcYyBmaWxlRGVzY3JpcHRvciwgXGMgWHRJbnB1dFJlYWRNYXNrfFh0SW5wdXRFeGNlcHRNYXNrLCBcYyBmLCBcYyBkYXRhKQorICogLSBldGMuCisgKgorICogYW5kIHRoZW4sIHdoZW4geW91IGRldGVjdCBpbmJvdW5kIHRyYWZpYyBvbiB0aGUgZmlsZSBkZXNjcmlwdG9yLCBkbyBzb21ldGhpbmcKKyAqIGxpa2UgdGhpczoKKyAqCisgKiB3aGlsZSAoYnJsYXBpX3JlYWRLZXkoMCwgJmNvZGUpIHsKKyAqICAgIC8vIHByb2Nlc3Mga2V5Y29kZSBjb2RlCisgKiAgICAvLyAuLi4KKyAqIH0KKyAqCisgKiBUaGUgXGMgd2hpbGUgbG9vcCBpcyBuZWVkZWQgZm9yIHByb2Nlc3NpbmcgXGUgYWxsIHBlbmRpbmcga2V5IHByZXNzZXMsIGVsc2UKKyAqIHNvbWUgb2YgdGhlbSBtYXkgYmUgbGVmdCBpbiBsaWJicmxhcGkncyBpbnRlcm5hbCBrZXkgYnVmZmVyIGFuZCB5b3Ugd291bGRuJ3QKKyAqIGdldCB0aGVtIGltbWVkaWF0ZWx5LgorICoKKyAqIFxub3RlIElmIHRoZSByZWFkIGlzIGludGVycnVwdGVkIGJ5IGEgc2lnbmFsIG9yIGJ5IGEgcGFyYW1ldGVyIGNoYW5nZQorICogbm90aWZpY2F0aW9uLCBicmxhcGlfcmVhZEtleSgpIHdpbGwgcmV0dXJuIC0xLCBicmxhcGlfZXJybm8gd2lsbCBiZQorICogQlJMQVBJX0VSUk9SX0xJQkNFUlIgYW5kIGVycm5vIHdpbGwgYmUgRUlOVFIuCisgKi8KKyNpZm5kZWYgQlJMQVBJX05PX1NJTkdMRV9TRVNTSU9OCitpbnQgQlJMQVBJX1NURENBTEwgYnJsYXBpX3JlYWRLZXkoaW50IHdhaXQsIGJybGFwaV9rZXlDb2RlX3QgKmNvZGUpOworI2VuZGlmIC8qIEJSTEFQSV9OT19TSU5HTEVfU0VTU0lPTiAqLworaW50IEJSTEFQSV9TVERDQUxMIGJybGFwaV9fcmVhZEtleShicmxhcGlfaGFuZGxlX3QgKmhhbmRsZSwgaW50IHdhaXQsIGJybGFwaV9rZXlDb2RlX3QgKmNvZGUpOworCisvKiBicmxhcGlfcmVhZEtleVdpdGhUaW1lb3V0ICovCisvKiogUmVhZCBhIGtleSBmcm9tIHRoZSBicmFpbGxlIGtleWJvYXJkLCB1bmxlc3MgYSB0aW1lb3V0IGV4cGlyZXMKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHdvcmtzIGxpa2UgYnJsYXBpX3JlYWRLZXksIGV4Y2VwdCB0aGF0IHBhcmFtZXRlciBcZSB3YWl0IGlzCisgKiByZXBsYWNlZCBieSBhIFxlIHRpbWVvdXRfbXMgcGFyYW1ldGVyCisgKgorICogXHBhcmFtIHRpbWVvdXRfbXMgc3BlY2lmaWVzIGhvdyBsb25nIHRoZSBmdW5jdGlvbiBzaG91bGQgd2FpdCBmb3IgYSBrZXlwcmVzcy4KKyAqIFxwYXJhbSBjb2RlIGhvbGRzIHRoZSBrZXkgY29kZSBpZiBhIGtleSBwcmVzcyBpcyBpbmRlZWQgcmVhZC4KKyAqCisgKiBccmV0dXJuIC0xIG9uIGVycm9yLCBzaWduYWwgaW50ZXJydXB0IG9yIHBhcmFtZXRlciBjaGFuZ2Ugbm90aWZpY2F0aW9uIGFuZAorICogKmNvZGUgaXMgdGhlbiB1bmRlZmluZWQsIDAgaWYgdGhlIHRpbWVvdXQgZXhwaXJlZCBhbmQgbm8ga2V5IHdhcyBwcmVzc2VkLCBvcgorICogMSBhbmQgKmNvZGUgaG9sZHMgdGhlIGtleSBjb2RlLgorICoKKyAqIElmIHRoZSB0aW1lb3V0IGV4cGlyZXMgd2l0aG91dCBhbnkga2V5IGJlaW5nIHByZXNzZWQsIDAgaXMgcmV0dXJuZWQuCisgKgorICogSWYgdGltZW91dF9tcyBpcyBzZXQgdG8gMCwgdGhpcyBmdW5jdGlvbiBsb29rcyBmb3Iga2V5IGV2ZW50cyB0aGF0IGhhdmUgYmVlbgorICogYWxyZWFkeSByZWNlaXZlZCwgYnV0IGRvZXMgbm90IHdhaXQgYXQgYWxsIGlmIG5vIGV2ZW50IHdhcyByZWNlaXZlZC4KKyAqCisgKiBJZiB0aW1lb3V0X21zIGlzIHNldCB0byBhIG5lZ2F0aXZlIHZhbHVlLCB0aGlzIGZ1bmN0aW9uIGJlaGF2ZXMgbGlrZQorICogYnJsYXBpX3JlYWRLZXksIGkuZS4gaXQgdXNlcyBhbiBpbmZpbml0ZSB0aW1lb3V0LgorICovCisjaWZuZGVmIEJSTEFQSV9OT19TSU5HTEVfU0VTU0lPTgoraW50IEJSTEFQSV9TVERDQUxMIGJybGFwaV9yZWFkS2V5V2l0aFRpbWVvdXQoaW50IHRpbWVvdXRfbXMsIGJybGFwaV9rZXlDb2RlX3QgKmNvZGUpOworI2VuZGlmIC8qIEJSTEFQSV9OT19TSU5HTEVfU0VTU0lPTiAqLworaW50IEJSTEFQSV9TVERDQUxMIGJybGFwaV9fcmVhZEtleVdpdGhUaW1lb3V0KGJybGFwaV9oYW5kbGVfdCAqaGFuZGxlLCBpbnQgdGltZW91dF9tcywgYnJsYXBpX2tleUNvZGVfdCAqY29kZSk7CisKKy8qKiB0eXBlcyBvZiBrZXkgcmFuZ2VzICovCit0eXBlZGVmIGVudW0geworICBicmxhcGlfcmFuZ2VUeXBlX2FsbCwJLyoqPCBhbGwga2V5cywgY29kZSBtdXN0IGJlIDAgKi8KKyAgYnJsYXBpX3JhbmdlVHlwZV90eXBlLAkvKio8IGFsbCBrZXlzIG9mIGEgZ2l2ZW4gdHlwZSAqLworICBicmxhcGlfcmFuZ2VUeXBlX2NvbW1hbmQsCS8qKjwgYWxsIGtleXMgb2YgYSBnaXZlbiBjb21tYW5kIGJsb2NrLCBpLmUuIG1hdGNoaW5nIHRoZSBrZXkgdHlwZSBhbmQgY29tbWFuZCBwYXJ0cyAqLworICBicmxhcGlfcmFuZ2VUeXBlX2tleSwJLyoqPCBhIGdpdmVuIGtleSB3aXRoIGFueSBmbGFncyAqLworICBicmxhcGlfcmFuZ2VUeXBlX2NvZGUsCS8qKjwgYSBnaXZlbiBrZXkgY29kZSAqLworfSBicmxhcGlfcmFuZ2VUeXBlX3Q7CisKKy8qIGJybGFwaV9pZ25vcmVLZXlzICovCisvKiogSWdub3JlIHNvbWUga2V5IHByZXNzZXMgZnJvbSB0aGUgYnJhaWxsZSBrZXlib2FyZAorICoKKyAqIFRoaXMgZnVuY3Rpb24gYXNrcyB0aGUgc2VydmVyIHRvIGdpdmUgdGhlIHByb3ZpZGVkIGtleXMgdG8gXGUgYnJsdHR5LCByYXRoZXIKKyAqIHRoYW4gcmV0dXJuaW5nIHRoZW0gdG8gdGhlIGFwcGxpY2F0aW9uIHZpYSBicmxhcGlfcmVhZEtleSgpLgorICoKKyAqIFRoZSBzZXRzIG9mIHN1Y2gga2V5cyBhcmUgcmVzZXQgb24gYnJsYXBpX2VudGVyVHR5TW9kZSBjYWxsLgorICoKKyAqIFxwYXJhbSB0eXBlIHR5cGUgb2Yga2V5cyB0byBiZSBpZ25vcmVkCisgKiBccGFyYW0ga2V5cyBhcnJheSBvZiBrZXlzIHRvIGJlIGlnbm9yZWQKKyAqIFxwYXJhbSBjb3VudCBudW1iZXIgb2Yga2V5cworICovCisjaWZuZGVmIEJSTEFQSV9OT19TSU5HTEVfU0VTU0lPTgoraW50IEJSTEFQSV9TVERDQUxMIGJybGFwaV9pZ25vcmVLZXlzKGJybGFwaV9yYW5nZVR5cGVfdCB0eXBlLCBjb25zdCBicmxhcGlfa2V5Q29kZV90IGtleXNbXSwgdW5zaWduZWQgaW50IGNvdW50KTsKKyNlbmRpZiAvKiBCUkxBUElfTk9fU0lOR0xFX1NFU1NJT04gKi8KK2ludCBCUkxBUElfU1REQ0FMTCBicmxhcGlfX2lnbm9yZUtleXMoYnJsYXBpX2hhbmRsZV90ICpoYW5kbGUsIGJybGFwaV9yYW5nZVR5cGVfdCB0eXBlLCBjb25zdCBicmxhcGlfa2V5Q29kZV90IGtleXNbXSwgdW5zaWduZWQgaW50IGNvdW50KTsKKworLyogYnJsYXBpX2FjY2VwdEtleXMgKi8KKy8qKiBBY2NlcHQgc29tZSBrZXkgcHJlc3NlcyBmcm9tIHRoZSBicmFpbGxlIGtleWJvYXJkCisgKgorICogVGhpcyBmdW5jdGlvbiBhc2tzIHRoZSBzZXJ2ZXIgdG8gZ2l2ZSB0aGUgcHJvdmlkZWQga2V5cyB0byB0aGUgYXBwbGljYXRpb24sCisgKiBhbmQgbm90IGdpdmUgdGhlbSB0byBcZSBicmx0dHkuCisgKgorICogVGhlIHNldHMgb2Ygc3VjaCBrZXlzIGFyZSByZXNldCBvbiBicmxhcGlfZW50ZXJUdHlNb2RlIGNhbGwuCisgKgorICogXHBhcmFtIHR5cGUgdHlwZSBvZiBrZXlzIHRvIGJlIGlnbm9yZWQKKyAqIFxwYXJhbSBrZXlzIGFycmF5IG9mIGtleXMgdG8gYmUgaWdub3JlZAorICogXHBhcmFtIGNvdW50IG51bWJlciBvZiBrZXlzCisgKi8KKyNpZm5kZWYgQlJMQVBJX05PX1NJTkdMRV9TRVNTSU9OCitpbnQgQlJMQVBJX1NURENBTEwgYnJsYXBpX2FjY2VwdEtleXMoYnJsYXBpX3JhbmdlVHlwZV90IHR5cGUsIGNvbnN0IGJybGFwaV9rZXlDb2RlX3Qga2V5c1tdLCB1bnNpZ25lZCBpbnQgY291bnQpOworI2VuZGlmIC8qIEJSTEFQSV9OT19TSU5HTEVfU0VTU0lPTiAqLworaW50IEJSTEFQSV9TVERDQUxMIGJybGFwaV9fYWNjZXB0S2V5cyhicmxhcGlfaGFuZGxlX3QgKmhhbmRsZSwgYnJsYXBpX3JhbmdlVHlwZV90IHR5cGUsIGNvbnN0IGJybGFwaV9rZXlDb2RlX3Qga2V5c1tdLCB1bnNpZ25lZCBpbnQgY291bnQpOworCisvKiBicmxhcGlfaWdub3JlQWxsS2V5cyAqLworLyoqIElnbm9yZSBhbGwga2V5IHByZXNzZXMgZnJvbSB0aGUgYnJhaWxsZSBrZXlib2FyZAorICoKKyAqIFRoaXMgZnVuY3Rpb24gYXNrcyB0aGUgc2VydmVyIHRvIGdpdmUgYWxsIGtleXMgdG8gXGUgYnJsdHR5LCByYXRoZXIgdGhhbgorICogcmV0dXJuaW5nIHRoZW0gdG8gdGhlIGFwcGxpY2F0aW9uIHZpYSBicmxhcGlfcmVhZEtleSgpLgorICoKKyAqIFRoZSBzZXRzIG9mIHN1Y2gga2V5cyBhcmUgcmVzZXQgb24gYnJsYXBpX2VudGVyVHR5TW9kZSBjYWxsLgorICovCisjaWZuZGVmIEJSTEFQSV9OT19TSU5HTEVfU0VTU0lPTgoraW50IEJSTEFQSV9TVERDQUxMIGJybGFwaV9pZ25vcmVBbGxLZXlzKHZvaWQpOworI2RlZmluZSBicmxhcGlfaWdub3JlQWxsS2V5cygpIGJybGFwaV9pZ25vcmVLZXlzKGJybGFwaV9yYW5nZVR5cGVfYWxsLCBOVUxMLCAwKQorI2VuZGlmIC8qIEJSTEFQSV9OT19TSU5HTEVfU0VTU0lPTiAqLworaW50IEJSTEFQSV9TVERDQUxMIGJybGFwaV9faWdub3JlQWxsS2V5cyhicmxhcGlfaGFuZGxlX3QgKmhhbmRsZSk7CisjZGVmaW5lIGJybGFwaV9faWdub3JlQWxsS2V5cyhoYW5kbGUpIGJybGFwaV9faWdub3JlS2V5cyhoYW5kbGUsIGJybGFwaV9yYW5nZVR5cGVfYWxsLCBOVUxMLCAwKQorCisvKiBicmxhcGlfYWNjZXB0QWxsS2V5cyAqLworLyoqIEFjY2VwdCBhbGwga2V5IHByZXNzZXMgZnJvbSB0aGUgYnJhaWxsZSBrZXlib2FyZAorICoKKyAqIFRoaXMgZnVuY3Rpb24gYXNrcyB0aGUgc2VydmVyIHRvIGdpdmUgYWxsIGtleXMgdG8gdGhlIGFwcGxpY2F0aW9uLCBhbmQgbm90CisgKiBnaXZlIHRoZW0gdG8gXGUgYnJsdHR5LgorICoKKyAqIFdhcm5pbmc6IGFmdGVyIGNhbGxpbmcgdGhpcyBmdW5jdGlvbiwgbWFrZSBzdXJlIHRvIGNhbGwgYnJsYXBpX2lnbm9yZUtleXMoKQorICogZm9yIGlnbm9yaW5nIGltcG9ydGFudCBrZXlzIGxpa2UgQlJMX0NNRF9TV0lUQ0hWVF9QUkVWL05FWFQgYW5kIHN1Y2guCisgKgorICogVGhlIHNldHMgb2Ygc3VjaCBrZXlzIGFyZSByZXNldCBvbiBicmxhcGlfZW50ZXJUdHlNb2RlIGNhbGwuCisgKi8KKyNpZm5kZWYgQlJMQVBJX05PX1NJTkdMRV9TRVNTSU9OCitpbnQgQlJMQVBJX1NURENBTEwgYnJsYXBpX2FjY2VwdEFsbEtleXModm9pZCk7CisjZGVmaW5lIGJybGFwaV9hY2NlcHRBbGxLZXlzKCkgYnJsYXBpX2FjY2VwdEtleXMoYnJsYXBpX3JhbmdlVHlwZV9hbGwsIE5VTEwsIDApCisjZW5kaWYgLyogQlJMQVBJX05PX1NJTkdMRV9TRVNTSU9OICovCitpbnQgQlJMQVBJX1NURENBTEwgYnJsYXBpX19hY2NlcHRBbGxLZXlzKGJybGFwaV9oYW5kbGVfdCAqaGFuZGxlKTsKKyNkZWZpbmUgYnJsYXBpX19hY2NlcHRBbGxLZXlzKGhhbmRsZSkgYnJsYXBpX19hY2NlcHRLZXlzKGhhbmRsZSwgYnJsYXBpX3JhbmdlVHlwZV9hbGwsIE5VTEwsIDApCisKKy8qKiBUeXBlIGZvciBrZXljb2RlIHJhbmdlcworICoKKyAqIERlbm90ZXMgdGhlIHNldCBvZiBrZXljb2RlcyBiZXR3ZWVuIFxlIGZpcnN0IGFuZCBcZSBsYXN0IChpbmNsdXNpdmUpCisgKi8KK3R5cGVkZWYgc3RydWN0IHsKKwlicmxhcGlfa2V5Q29kZV90IGZpcnN0OwkvKio8IGZpcnN0IGtleSBvZiB0aGUgcmFuZ2UgKi8KKwlicmxhcGlfa2V5Q29kZV90IGxhc3Q7CS8qKjwgbGFzdCBrZXkgb2YgdGhlIHJhbmdlICovCit9IGJybGFwaV9yYW5nZV90OworCisvKiBicmxhcGlfaWdub3JlS2V5UmFuZ2VzICovCisvKiogSWdub3JlIHNvbWUga2V5IHByZXNzZXMgZnJvbSB0aGUgYnJhaWxsZSBrZXlib2FyZAorICoKKyAqIFRoaXMgZnVuY3Rpb24gYXNrcyB0aGUgc2VydmVyIHRvIGdpdmUgdGhlIHByb3ZpZGVkIGtleSByYW5nZXMgdG8gXGUgYnJsdHR5LAorICogcmF0aGVyIHRoYW4gcmV0dXJuaW5nIHRoZW0gdG8gdGhlIGFwcGxpY2F0aW9uIHZpYSBicmxhcGlfcmVhZEtleSgpLgorICoKKyAqIFRoZSBzZXRzIG9mIHN1Y2gga2V5cyBhcmUgcmVzZXQgb24gYnJsYXBpX2VudGVyVHR5TW9kZSBjYWxsLgorICoKKyAqIFxwYXJhbSByYW5nZXMga2V5IHJhbmdlcywgd2hpY2ggYXJlIGluY2x1c2l2ZSwgc2VlIFxyZWYgYnJsYXBpX2tleWNvZGVzIGFib3V0IGtleSByYW5nZXMKKyAqIFxwYXJhbSBjb3VudCBudW1iZXIgb2YgcmFuZ2VzCisgKi8KKyNpZm5kZWYgQlJMQVBJX05PX1NJTkdMRV9TRVNTSU9OCitpbnQgQlJMQVBJX1NURENBTEwgYnJsYXBpX2lnbm9yZUtleVJhbmdlcyhjb25zdCBicmxhcGlfcmFuZ2VfdCByYW5nZXNbXSwgdW5zaWduZWQgaW50IGNvdW50KTsKKyNlbmRpZiAvKiBCUkxBUElfTk9fU0lOR0xFX1NFU1NJT04gKi8KK2ludCBCUkxBUElfU1REQ0FMTCBicmxhcGlfX2lnbm9yZUtleVJhbmdlcyhicmxhcGlfaGFuZGxlX3QgKmhhbmRsZSwgY29uc3QgYnJsYXBpX3JhbmdlX3QgcmFuZ2VzW10sIHVuc2lnbmVkIGludCBjb3VudCk7CisKKy8qIGJybGFwaV9hY2NlcHRLZXlSYW5nZXMgKi8KKy8qKiBBY2NlcHQgc29tZSBrZXkgcHJlc3NlcyBmcm9tIHRoZSBicmFpbGxlIGtleWJvYXJkCisgKgorICogVGhpcyBmdW5jdGlvbiBhc2tzIHRoZSBzZXJ2ZXIgdG8gcmV0dXJuIHRoZSBwcm92aWRlZCBrZXkgcmFuZ2VzIChpbmNsdXNpdmUpCisgKiB0byB0aGUgYXBwbGljYXRpb24sIGFuZCBub3QgZ2l2ZSB0aGVtIHRvIFxlIGJybHR0eS4KKyAqCisgKiBUaGUgc2V0cyBvZiBzdWNoIGtleXMgYXJlIHJlc2V0IG9uIGJybGFwaV9lbnRlclR0eU1vZGUgY2FsbC4KKyAqCisgKiBccGFyYW0gcmFuZ2VzIGtleSByYW5nZXMsIHdoaWNoIGFyZSBpbmNsdXNpdmUsIHNlZSBccmVmIGJybGFwaV9rZXljb2RlcyBhYm91dCBrZXkgcmFuZ2VzCisgKiBccGFyYW0gY291bnQgbnVtYmVyIG9mIHJhbmdlcworICovCisjaWZuZGVmIEJSTEFQSV9OT19TSU5HTEVfU0VTU0lPTgoraW50IEJSTEFQSV9TVERDQUxMIGJybGFwaV9hY2NlcHRLZXlSYW5nZXMoY29uc3QgYnJsYXBpX3JhbmdlX3QgcmFuZ2VzW10sIHVuc2lnbmVkIGludCBjb3VudCk7CisjZW5kaWYgLyogQlJMQVBJX05PX1NJTkdMRV9TRVNTSU9OICovCitpbnQgQlJMQVBJX1NURENBTEwgYnJsYXBpX19hY2NlcHRLZXlSYW5nZXMoYnJsYXBpX2hhbmRsZV90ICpoYW5kbGUsIGNvbnN0IGJybGFwaV9yYW5nZV90IHJhbmdlc1tdLCB1bnNpZ25lZCBpbnQgY291bnQpOworLyoqIEB9ICovCisKKy8qKiBcZGVmZ3JvdXAgYnJsYXBpX2RyaXZlcnNwZWNpZmljIERyaXZlci1TcGVjaWZpYyBtb2RlcworICogXGJyaWVmIFJhdyBhbmQgU3VzcGVuZCBNb2RlcyBtZWNoYW5pc20KKyAqCisgKiBJZiB0aGUgYXBwbGljYXRpb24gd2FudHMgdG8gZGlyZWN0bHkgdGFsayB0byB0aGUgYnJhaWxsZSB0ZXJtaW5hbCwgaXQgc2hvdWxkCisgKiB1c2UgUmF3IE1vZGUuIEluIHRoaXMgc3BlY2lhbCBtb2RlLCB0aGUgZHJpdmVyIGdpdmVzIHRoZSB3aG9sZSBjb250cm9sIG9mIHRoZQorICogdGVybWluYWwgdG8gaXQ6IFxlIGJybHR0eSBkb2Vzbid0IHdvcmsgYW55IG1vcmUuCisgKgorICogRm9yIHRoaXMsIGl0IHNpbXBseSBoYXMgdG8gY2FsbCBicmxhcGlfZW50ZXJSYXdNb2RlKCksIHRoZW4gYnJsYXBpX3NlbmRSYXcoKQorICogYW5kIGJybGFwaV9yZWN2UmF3KCksIGFuZCBmaW5hbGx5IGdpdmUgY29udHJvbCBiYWNrIHRoYW5rcyB0bworICogYnJsYXBpX2xlYXZlUmF3TW9kZSgpLgorICoKKyAqIFNwZWNpYWwgY2FyZSBvZiB0aGUgdGVybWluYWwgc2hvdWxkIGJlIHRha2VuLCBzaW5jZSBvbmUgbWlnaHQgY29tcGxldGVseQorICogdHJhc2ggdGhlIHRlcm1pbmFsJ3MgZGF0YSwgb3IgZXZlbiBsb2NrIGl0ISBUaGUgYXBwbGljYXRpb24gc2hvdWxkIGFsd2F5cworICogY2hlY2sgZm9yIHRlcm1pbmFsJ3MgdHlwZSB0aGFua3MgdG8gYnJsYXBpX2dldERyaXZlck5hbWUoKS4KKyAqCisgKiBUaGUgY2xpZW50IGNhbiBhbHNvIG1ha2UgYnJsdHR5IGNsb3NlIHRoZSBkcml2ZXIgYnkgdXNpbmcgYnJsYXBpX3N1c3BlbmREcml2ZXIoKSwKKyAqIGFuZCByZXN1bWUgaXQgYWdhaW4gd2l0aCBicmxhcGlfcmVzdW1lRHJpdmVyKCkuICBUaGlzIHNob3VsZCBub3QgYmUgdXNlZCBpZgorICogcG9zc2libGU6IHJhdyBtb2RlIHNob3VsZCBiZSBzdWZmaWNpZW50IGZvciBhbnkgdXNlLiAgSWYgbm90LCBwbGVhc2UgYXNrIGZvcgorICogZmVhdHVyZXMgOikKKyAqCisgKiBAeworICovCisKKy8qIGJybGFwaV9lbnRlclJhd01vZGUgKi8KKy8qKiBTd2l0Y2ggdG8gUmF3IG1vZGUKKyAqCisgKiBUT0RPOiBkb2N1bWVudCB3aGljaCBmdW5jdGlvbnMgd29yayBpbiByYXcgbW9kZS4KKyAqCisgKiBccGFyYW0gZHJpdmVyIFNwZWNpZmllcyB0aGUgbmFtZSBvZiB0aGUgZHJpdmVyIGZvciB3aGljaCB0aGUgcmF3CisgKiBjb21tdW5pY2F0aW9uIHdpbGwgYmUgZXN0YWJsaXNoZWQuCisgKiBccmV0dXJuIDAgb24gc3VjY2VzcywgLTEgb24gZXJyb3IgKi8KKyNpZm5kZWYgQlJMQVBJX05PX1NJTkdMRV9TRVNTSU9OCitpbnQgQlJMQVBJX1NURENBTEwgYnJsYXBpX2VudGVyUmF3TW9kZShjb25zdCBjaGFyICpkcml2ZXIpOworI2VuZGlmIC8qIEJSTEFQSV9OT19TSU5HTEVfU0VTU0lPTiAqLworaW50IEJSTEFQSV9TVERDQUxMIGJybGFwaV9fZW50ZXJSYXdNb2RlKGJybGFwaV9oYW5kbGVfdCAqaGFuZGxlLCBjb25zdCBjaGFyICpkcml2ZXIpOworCisvKiBicmxhcGlfbGVhdmVSYXdNb2RlICovCisvKiogTGVhdmUgUmF3IG1vZGUKKyAqIFxyZXR1cm4gMCBvbiBzdWNjZXNzLCAtMSBvbiBlcnJvciAqLworI2lmbmRlZiBCUkxBUElfTk9fU0lOR0xFX1NFU1NJT04KK2ludCBCUkxBUElfU1REQ0FMTCBicmxhcGlfbGVhdmVSYXdNb2RlKHZvaWQpOworI2VuZGlmIC8qIEJSTEFQSV9OT19TSU5HTEVfU0VTU0lPTiAqLworaW50IEJSTEFQSV9TVERDQUxMIGJybGFwaV9fbGVhdmVSYXdNb2RlKGJybGFwaV9oYW5kbGVfdCAqaGFuZGxlKTsKKworLyogYnJsYXBpX3NlbmRSYXcgKi8KKy8qKiBTZW5kIFJhdyBkYXRhCisgKgorICogXHBhcmFtIGJ1ZmZlciBwb2ludHMgb24gdGhlIGRhdGE7CisgKiBccGFyYW0gc2l6ZSBob2xkcyB0aGUgcGFja2V0IHNpemUuCisgKiBccmV0dXJuIHNpemUgb24gc3VjY2VzcywgLTEgb24gZXJyb3IgKi8KKyNpZm5kZWYgQlJMQVBJX05PX1NJTkdMRV9TRVNTSU9OCitzc2l6ZV90IEJSTEFQSV9TVERDQUxMIGJybGFwaV9zZW5kUmF3KGNvbnN0IHZvaWQgKmJ1ZmZlciwgc2l6ZV90IHNpemUpOworI2VuZGlmIC8qIEJSTEFQSV9OT19TSU5HTEVfU0VTU0lPTiAqLworc3NpemVfdCBCUkxBUElfU1REQ0FMTCBicmxhcGlfX3NlbmRSYXcoYnJsYXBpX2hhbmRsZV90ICpoYW5kbGUsIGNvbnN0IHZvaWQgKmJ1ZmZlciwgc2l6ZV90IHNpemUpOworCisvKiBicmxhcGlfcmVjdlJhdyAqLworLyoqIEdldCBSYXcgZGF0YQorICoKKyAqIFxwYXJhbSBidWZmZXIgcG9pbnRzIG9uIGEgYnVmZmVyIHdoZXJlIHRoZSBmdW5jdGlvbiB3aWxsIHN0b3JlIHRoZSByZWNlaXZlZAorICogZGF0YTsKKyAqIFxwYXJhbSBzaXplIGhvbGRzIHRoZSBidWZmZXIgc2l6ZS4KKyAqIFxyZXR1cm4gaXRzIHNpemUsIC0xIG9uIGVycm9yLCBvciBvbiBpbnRlcnJ1cHRpb24gYnkgYSBzaWduYWwgb3IgYSBwYXJhbWV0ZXIKKyAqIGNoYW5nZSBub3RpZmljYXRpb24sIGluIHdoaWNoIGNhc2UgYnJsYXBpX2Vycm5vIHdpbGwgYmUgQlJMQVBJX0VSUk9SX0xJQkNFUlIKKyAqIGFuZCBlcnJubyB3aWxsIGJlIEVJTlRSLiAqLworI2lmbmRlZiBCUkxBUElfTk9fU0lOR0xFX1NFU1NJT04KK3NzaXplX3QgQlJMQVBJX1NURENBTEwgYnJsYXBpX3JlY3ZSYXcodm9pZCAqYnVmZmVyLCBzaXplX3Qgc2l6ZSk7CisjZW5kaWYgLyogQlJMQVBJX05PX1NJTkdMRV9TRVNTSU9OICovCitzc2l6ZV90IEJSTEFQSV9TVERDQUxMIGJybGFwaV9fcmVjdlJhdyhicmxhcGlfaGFuZGxlX3QgKmhhbmRsZSwgdm9pZCAqYnVmZmVyLCBzaXplX3Qgc2l6ZSk7CisKKy8qIGJybGFwaV9zdXNwZW5kRHJpdmVyICovCisvKiogU3VzcGVuZCBicmFpbGxlIGRyaXZlcgorICogXHBhcmFtIGRyaXZlciBTcGVjaWZpZXMgdGhlIG5hbWUgb2YgdGhlIGRyaXZlciB3aGljaCB3aWxsIGJlIHN1c3BlbmRlZC4KKyAqIFxyZXR1cm4gLTEgb24gZXJyb3IKKyAqLworI2lmbmRlZiBCUkxBUElfTk9fU0lOR0xFX1NFU1NJT04KK2ludCBCUkxBUElfU1REQ0FMTCBicmxhcGlfc3VzcGVuZERyaXZlcihjb25zdCBjaGFyICpkcml2ZXIpOworI2VuZGlmIC8qIEJSTEFQSV9OT19TSU5HTEVfU0VTU0lPTiAqLworaW50IEJSTEFQSV9TVERDQUxMIGJybGFwaV9fc3VzcGVuZERyaXZlcihicmxhcGlfaGFuZGxlX3QgKmhhbmRsZSwgY29uc3QgY2hhciAqZHJpdmVyKTsKKworLyogYnJsYXBpX3Jlc3VtZURyaXZlciAqLworLyoqIFJlc3VtZSBicmFpbGxlIGRyaXZlcgorICogXHJldHVybiAtMSBvbiBlcnJvcgorICovCisjaWZuZGVmIEJSTEFQSV9OT19TSU5HTEVfU0VTU0lPTgoraW50IEJSTEFQSV9TVERDQUxMIGJybGFwaV9yZXN1bWVEcml2ZXIodm9pZCk7CisjZW5kaWYgLyogQlJMQVBJX05PX1NJTkdMRV9TRVNTSU9OICovCitpbnQgQlJMQVBJX1NURENBTEwgYnJsYXBpX19yZXN1bWVEcml2ZXIoYnJsYXBpX2hhbmRsZV90ICpoYW5kbGUpOworLyoqIEB9ICovCisKKyNpbmNsdWRlICJicmxhcGlfcGFyYW0uaCIKKworLyoqIFxkZWZncm91cCBicmxhcGlfcGFyYW1ldGVyTWFuYWdlbWVudCBQYXJhbWV0ZXIgbWFuYWdlbWVudAorICogXGJyaWVmIEhvdyB0byBtYW5hZ2UgQnJsQVBJIHBhcmFtZXRlcnMKKyAqCisgKiBUaGVyZSBhcmUgc2V2ZXJhbCBraW5kcyBvZiBwYXJhbWV0ZXJzOgorICogLSBzdGF0ZXMgYXNzb2NpYXRlZCB3aXRoIHRoZSBicmFpbGxlIGRldmljZSBpdHNlbGYsIHN1Y2ggYXMgaXRzIHNpemUgb3IKKyAqIHBhcmFtZXRlcnMgb2YgdGhlIGRldmljZSBwb3J0CisgKiAtIHN0YXRlcyBvZiB0aGUgQnJsQVBJIGNvbm5lY3Rpb24gaXRzZWxmLCBzdWNoIGFzIHRoZSBkaXNwbGF5aW5nIGxldmVsIG9yCisgKiBrZXkgcGFzc2luZyBwcmVmZXJlbmNlcy4KKyAqIC0gZ2VuZXJhbCBzdGF0ZXMgc3VjaCBhcyB0aGUgY3V0IGJ1ZmZlciwKKyAqIC0gYnJhaWxsZSBwYXJhbWV0ZXJzOiBicmFpbGxlIHRhYmxlLCBjb250cmFjdGlvbiwgY3Vyc29yIHNoYXBlLCBldGMsCisgKiAtIGJyb3dzZSBwYXJhbWV0ZXJzOiBsaW5lIHNraXAsIGJlZXAsIGV0Yy4KKyAqCisgKiBTb21lIG9mIHRoZW0gYXJlIHN1YmRpdmlkZWQgaW4gc3VicGFyYW1ldGVycy4gIE90aGVycyBoYXZlIG9ubHkgc3VicGFyYW1ldGVyIDAuCisgKgorICogU29tZSBvZiB0aGVtIGFyZSByZWFkLW9ubHksIG90aGVycyBhcmUgcmVhZC93cml0ZS4KKyAqCisgKiBBIGNsaWVudCBjYW4gZWl0aGVyIHJlcXVlc3QgdGhlIGltbWVkaWF0ZSBjb250ZW50IG9mIGEgcGFyYW1ldGVyIGJ5CisgKiB1c2luZyBicmxhcGlfZ2V0UGFyYW1ldGVyKCk7IHNldCB0aGUgY29udGVudCBvZiBhIHBhcmFtZXRlciBieSB1c2luZworICogYnJsYXBpX3NldFBhcmFtZXRlcigpOyBvciByZWdpc3RlciBhIGNhbGxiYWNrIHRoYXQgbWF5IGJlIGNhbGxlZCBpbW1lZGlhdGVseQorICogYW5kIG9uIGVhY2ggY2hhbmdlIG9mIGEgZ2l2ZW4gcGFyYW1ldGVyLCBieSB1c2luZyBicmxhcGlfd2F0Y2hQYXJhbWV0ZXIoKS4KKyAqCisgKiBAeyAqLworCisvKiogRmxhZ3MgZm9yIHBhcmFtZXRlciByZXF1ZXN0cyAqLwordHlwZWRlZiB1aW50MzJfdCBicmxhcGlfcGFyYW1fZmxhZ3NfdDsKKyNkZWZpbmUgQlJMQVBJX1BBUkFNRl9MT0NBTCAgICAgICAgICAwWDAwICAgIC8qKjwgUmVmZXIgdG8gdGhlIHZhbHVlIGxvY2FsIHRvIHRoZSBjb25uZWN0aW9uIGluc3RlYWQgb2YgdGhlIGdsb2JhbCB2YWx1ZSAqLworI2RlZmluZSBCUkxBUElfUEFSQU1GX0dMT0JBTCAgICAgICAgIDBYMDEgICAgLyoqPCBSZWZlciB0byB0aGUgZ2xvYmFsIHZhbHVlIGluc3RlYWQgb2YgdGhlIHZhbHVlIGxvY2FsIHRvIHRoZSBjb25uZWN0aW9uICovCisjZGVmaW5lIEJSTEFQSV9QQVJBTUZfU0VMRiAgICAgICAgICAgMFgwMiAgICAvKio8IFNwZWNpZnkgd2hldGhlciB0byByZWNlaXZlIG5vdGlmaWNhdGlvbnMgb2YgdmFsdWUgc2VsZi1jaGFuZ2VzICovCisKKy8qIGJybGFwaV9nZXRQYXJhbWV0ZXIgKi8KKy8qKiBHZXQgdGhlIGNvbnRlbnQgb2YgYSBwYXJhbWV0ZXIKKyAqCisgKiBicmxhcGlfZ2V0UGFyYW1ldGVyIGdldHMgdGhlIGN1cnJlbnQgY29udGVudCBvZiBhIHBhcmFtZXRlcgorICoKKyAqIFxwYXJhbSBwYXJhbWV0ZXIgaXMgdGhlIHBhcmFtZXRlciB3aG9zZSBjb250ZW50IHNoYWxsIGJlIGdvdHRlbjsKKyAqIFxwYXJhbSBzdWJwYXJhbSBpcyBhIHNwZWNpZmljIGluc3RhbmNlIG9mIHRoZSBwYXJhbWV0ZXI7CisgKiBccGFyYW0gZmxhZ3Mgc3BlY2lmeSB3aGljaCB2YWx1ZSBhbmQgaG93IGl0IHNob3VsZCBiZSByZXR1cm5lZDsKKyAqIFxwYXJhbSBkYXRhIGlzIGEgYnVmZmVyIHdoZXJlIGNvbnRlbnQgb2YgdGhlIHBhcmFtZXRlciBzaGFsbCBiZSBzdG9yZWQ7CisgKiBccGFyYW0gbGVuIGlzIHRoZSBzaXplIG9mIHRoZSBidWZmZXIuCisgKgorICogXHJldHVybiB0aGUgcmVhbCBzaXplIG9mIHRoZSBwYXJhbWV0ZXIncyBjb250ZW50LiBJZiB0aGUgcGFyYW1ldGVyIGRvZXMgbm90IGZpdCBpbiB0aGUgcHJvdmlkZWQgYnVmZmVyLCBpdCBpcyB0cnVuY2F0ZWQgdG8gbGVuIGJ5dGVzIChidXQgdGhlIHJlYWwgc2l6ZSBvZiB0aGUgcGFyYW1ldGVyIGlzIHN0aWxsIHJldHVybmVkKS4gSW4gdGhhdCBjYXNlLCB0aGUgY2xpZW50IG11c3QgY2FsbCBicmxhcGlfZ2V0UGFyYW1ldGVyIGFnYWluIHdpdGggYSBiaWcgZW5vdWdoIGJ1ZmZlci4KKyAqLworI2lmbmRlZiBCUkxBUElfTk9fU0lOR0xFX1NFU1NJT04KK3NzaXplX3QgQlJMQVBJX1NURENBTEwgYnJsYXBpX2dldFBhcmFtZXRlcihicmxhcGlfcGFyYW1fdCBwYXJhbWV0ZXIsIGJybGFwaV9wYXJhbV9zdWJwYXJhbV90IHN1YnBhcmFtLCBicmxhcGlfcGFyYW1fZmxhZ3NfdCBmbGFncywgdm9pZCogZGF0YSwgc2l6ZV90IGxlbik7CisjZW5kaWYKK3NzaXplX3QgQlJMQVBJX1NURENBTEwgYnJsYXBpX19nZXRQYXJhbWV0ZXIoYnJsYXBpX2hhbmRsZV90ICpoYW5kbGUsIGJybGFwaV9wYXJhbV90IHBhcmFtZXRlciwgYnJsYXBpX3BhcmFtX3N1YnBhcmFtX3Qgc3VicGFyYW0sIGJybGFwaV9wYXJhbV9mbGFnc190IGZsYWdzLCB2b2lkKiBkYXRhLCBzaXplX3QgbGVuKTsKKworLyogYnJsYXBpX2dldFBhcmFtZXRlckFsbG9jICovCisvKiogUmV0dXJuIHRoZSBjb250ZW50IG9mIGEgcGFyYW1ldGVyCisgKgorICogYnJsYXBpX2dldFBhcmFtZXRlckFsbG9jIGdldHMgdGhlIGN1cnJlbnQgY29udGVudCBvZiBhIHBhcmFtZXRlciwgYnkgcmV0dXJuaW5nIGl0IGFzIGEgbmV3bHktYWxsb2NhdGVkIGJ1ZmZlci4KKyAqIFRoZSBidWZmZXIgaXMgYWxsb2NhdGVkIHRvIG9uZSBieXRlIG1vcmUgdGhhbiB0aGUgcGFyYW1ldGVyIHZhbHVlLiBUaGlzIGJ5dGUgaXMgc2V0IHRvIHplcm8uIFRoaXMgYWxsb3dzLCBmb3Igc3RyaW5nIHBhcmFtZXRlcnMsIHRvIGJlIGFibGUgdG8gaW1tZWRpYXRlbHkgdXNlIGl0IGFzIGEgQyBzdHJpbmcuCisgKgorICogXHBhcmFtIHBhcmFtZXRlciBpcyB0aGUgcGFyYW1ldGVyIHdob3NlIGNvbnRlbnQgc2hhbGwgYmUgZ290dGVuOworICogXHBhcmFtIHN1YnBhcmFtIGlzIGEgc3BlY2lmaWMgaW5zdGFuY2Ugb2YgdGhlIHBhcmFtZXRlcjsKKyAqIFxwYXJhbSBmbGFncyBzcGVjaWZ5IHdoaWNoIHZhbHVlIGFuZCBob3cgaXQgc2hvdWxkIGJlIHJldHVybmVkOworICogXHBhcmFtIGxlbiBpcyB0aGUgYWRkcmVzcyB3aGVyZSB0byBzdG9yZSB0aGUgc2l6ZSBvZiB0aGUgcGFyYW1ldGVyIHZhbHVlLgorICoKKyAqIFxyZXR1cm4gYSBuZXdseS1hbGxvY2F0ZWQgYnVmZmVyIHRoYXQgY29udGFpbnMgdGhlIHZhbHVlIG9mIHRoZSBwYXJhbWV0ZXIuIFRoZSBjYWxsZXIgbXVzdCBjYWxsIGZyZWUoKSBvbiBpdCBhZnRlciB1c2UuIE5VTEwgaXMgcmV0dXJuZWQgb24gZXJyb3JzCisgKi8KKyNpZm5kZWYgQlJMQVBJX05PX1NJTkdMRV9TRVNTSU9OCit2b2lkICogQlJMQVBJX1NURENBTEwgYnJsYXBpX2dldFBhcmFtZXRlckFsbG9jKGJybGFwaV9wYXJhbV90IHBhcmFtZXRlciwgYnJsYXBpX3BhcmFtX3N1YnBhcmFtX3Qgc3VicGFyYW0sIGJybGFwaV9wYXJhbV9mbGFnc190IGZsYWdzLCBzaXplX3QgKmxlbik7CisjZW5kaWYKK3ZvaWQgKiBCUkxBUElfU1REQ0FMTCBicmxhcGlfX2dldFBhcmFtZXRlckFsbG9jKGJybGFwaV9oYW5kbGVfdCAqaGFuZGxlLCBicmxhcGlfcGFyYW1fdCBwYXJhbWV0ZXIsIGJybGFwaV9wYXJhbV9zdWJwYXJhbV90IHN1YnBhcmFtLCBicmxhcGlfcGFyYW1fZmxhZ3NfdCBmbGFncywgc2l6ZV90ICpsZW4pOworCisvKiBicmxhcGlfc2V0UGFyYW1ldGVyICovCisvKiogU2V0IHRoZSBjb250ZW50IG9mIGEgcGFyYW1ldGVyCisgKgorICogYnJsYXBpX3NldFBhcmFtZXRlciBzZXRzIHRoZSBjb250ZW50IG9mIGEgcGFyYW1ldGVyCisgKgorICogXHBhcmFtIHBhcmFtZXRlciBpcyB0aGUgcGFyYW1ldGVyIHRvIHNldDsKKyAqIFxwYXJhbSBzdWJwYXJhbSBpcyBhIHNwZWNpZmljIGluc3RhbmNlIG9mIHRoZSBwYXJhbWV0ZXI7CisgKiBccGFyYW0gZmxhZ3Mgc3BlY2lmeSB3aGljaCB2YWx1ZSBhbmQgaG93IGl0IHNob3VsZCBiZSBzZXQ7CisgKiBccGFyYW0gZGF0YSBpcyBhIGJ1ZmZlciBjb250YWluaW5nIHRoZSBkYXRhIHRvIHN0b3JlIGluIHRoZSBwYXJhbWV0ZXI7CisgKiBccGFyYW0gbGVuIGlzIHRoZSBzaXplIG9mIHRoZSBkYXRhLgorICoKKyAqIFxyZXR1cm4gMCBvbiBzdWNjZXNzLCAtMSBvbiBlcnJvciAocmVhZC1vbmx5IHBhcmFtZXRlciBmb3IgaW5zdGFuY2UpLgorICovCisjaWZuZGVmIEJSTEFQSV9OT19TSU5HTEVfU0VTU0lPTgoraW50IEJSTEFQSV9TVERDQUxMIGJybGFwaV9zZXRQYXJhbWV0ZXIoYnJsYXBpX3BhcmFtX3QgcGFyYW1ldGVyLCBicmxhcGlfcGFyYW1fc3VicGFyYW1fdCBzdWJwYXJhbSwgYnJsYXBpX3BhcmFtX2ZsYWdzX3QgZmxhZ3MsIGNvbnN0IHZvaWQqIGRhdGEsIHNpemVfdCBsZW4pOworI2VuZGlmCitpbnQgQlJMQVBJX1NURENBTEwgYnJsYXBpX19zZXRQYXJhbWV0ZXIoYnJsYXBpX2hhbmRsZV90ICpoYW5kbGUsIGJybGFwaV9wYXJhbV90IHBhcmFtZXRlciwgYnJsYXBpX3BhcmFtX3N1YnBhcmFtX3Qgc3VicGFyYW0sIGJybGFwaV9wYXJhbV9mbGFnc190IGZsYWdzLCBjb25zdCB2b2lkKiBkYXRhLCBzaXplX3QgbGVuKTsKKworLyogYnJsYXBpX3BhcmFtQ2FsbGJhY2tfdCAqLworLyoqIENhbGxiYWNrIGZvciBwYXJhbWV0ZXIgY2hhbmdlcworICoKKyAqIFdoZW4gYSBwYXJhbWV0ZXIgZ2V0cyBjaGFuZ2VkLCBhcHBsaWNhdGlvbi1kZWZpbmVkIGNhbGxiYWNrcyBzZXQgYnkgdGhlCisgKiBicmxhcGlfd2F0Y2hQYXJhbWV0ZXIoKSBmdW5jdGlvbiBhcmUgY2FsbGVkLgorICoKKyAqIFxwYXJhbSBwYXJhbWV0ZXIgaXMgdGhlIHBhcmFtZXRlciB0aGF0IGNoYW5nZWQ7CisgKiBccGFyYW0gc3VicGFyYW0gaXMgYSBzcGVjaWZpYyBpbnN0YW5jZSBvZiB0aGUgcGFyYW1ldGVyOworICogXHBhcmFtIGZsYWdzIHNwZWNpZnkgd2hpY2ggdmFsdWUgYW5kIGhvdyBpdCB3YXMgY2hhbmdlZDsKKyAqIFxwYXJhbSBwcml2IGlzIHRoZSB2b2lkIHBvaW50ZXIgdGhhdCB3YXMgcGFzc2VkIHRvIHRoZSBicmxhcGlfd2F0Y2hQYXJhbWV0ZXIgY2FsbCB3aGljaCByZWdpc3RlcmVkIHRoZSBjYWxsYmFjazsKKyAqIFxwYXJhbSBkYXRhIGlzIGEgYnVmZmVyIGNvbnRhaW5pbmcgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgcGFyYW1ldGVyOworICogXHBhcmFtIGxlbiBpcyB0aGUgc2l6ZSBvZiB0aGUgZGF0YS4KKyAqCisgKiBUaGlzIGNhbGxiYWNrIG9ubHkgZ2V0cyBjYWxsZWQgd2hlbiB0aGUgYXBwbGljYXRpb24gY2FsbHMgc29tZSBicmxhcGlfCisgKiBmdW5jdGlvbiAoaS5lLiBCcmxBUEkgZ2V0cyBkaXJlY3QgY29udHJvbCBvZiB0aGUgZXhlY3V0aW9uKS4KKyAqLwordHlwZWRlZiB2b2lkICgqYnJsYXBpX3BhcmFtQ2FsbGJhY2tfdCkoYnJsYXBpX3BhcmFtX3QgcGFyYW1ldGVyLCBicmxhcGlfcGFyYW1fc3VicGFyYW1fdCBzdWJwYXJhbSwgYnJsYXBpX3BhcmFtX2ZsYWdzX3QgZmxhZ3MsIHZvaWQgKnByaXYsIGNvbnN0IHZvaWQgKmRhdGEsIHNpemVfdCBsZW4pOworCisvKiBicmxhcGlfcGFyYW1DYWxsYmFja0Rlc2NyaXB0b3JfdCAqLworLyoqIFR5cGUgZm9yIGNhbGxiYWNrIGRlc2NyaXB0b3JzCisgKiBUaGlzIGlzIHJldHVybmVkIGJ5IGJybGFwaV93YXRjaFBhcmFtZXRlciwgdG8gYmUgcGFzc2VkIHRvCisgKiBicmxhcGlfdW53YXRjaFBhcmFtZXRlci4KKyAqLwordHlwZWRlZiB2b2lkICpicmxhcGlfcGFyYW1DYWxsYmFja0Rlc2NyaXB0b3JfdDsKKworLyogYnJsYXBpX3dhdGNoUGFyYW1ldGVyICovCisvKiogU2V0IGEgcGFyYW1ldGVyIGNoYW5nZSBjYWxsYmFjaworICoKKyAqIGJybGFwaV93YXRjaFBhcmFtZXRlciByZWdpc3RlcnMgYSBwYXJhbWV0ZXIgY2hhbmdlIGNhbGxiYWNrOiB3aGVuZXZlciB0aGUKKyAqIGdpdmVuIHBhcmFtZXRlciBjaGFuZ2VzLCB0aGUgZ2l2ZW4gZnVuY3Rpb24gaXMgY2FsbGVkLgorICoKKyAqIFxwYXJhbSBwYXJhbWV0ZXIgaXMgdGhlIHBhcmFtZXRlciB0byB3YXRjaDsKKyAqIFxwYXJhbSBzdWJwYXJhbSBpcyBhIHNwZWNpZmljIGluc3RhbmNlIG9mIHRoZSBwYXJhbWV0ZXI7CisgKiBccGFyYW0gZmxhZ3Mgc3BlY2lmeSB3aGljaCB2YWx1ZSBhbmQgaG93IGl0IHNob3VsZCBiZSBtb25pdG9yZWQ7CisgKiBccGFyYW0gZnVuYyBpcyB0aGUgZnVuY3Rpb24gdG8gY2FsbCBvbiBwYXJhbWV0ZXIgY2hhbmdlOworICogXHBhcmFtIHByaXYgaXMgYSB2b2lkIHBvaW50ZXIgd2hpY2ggd2lsbCBiZSBwYXNzZWQgYXMgc3VjaCB0byB0aGUgZnVuY3Rpb247CisgKiBccGFyYW0gZGF0YSBpcyBhIGJ1ZmZlciB3aGVyZSB0aGUgY3VycmVudCBjb250ZW50IG9mIHRoZSBwYXJhbWV0ZXIgc2hhbGwgYmUKKyAqIHN0b3JlZDsKKyAqIFxwYXJhbSBsZW4gaXMgdGhlIHNpemUgb2YgdGhlIGJ1ZmZlci4KKyAqCisgKiBccmV0dXJuIHRoZSBjYWxsYmFjayBkZXNjcmlwdG9yICh0byBiZSBwYXNzZWQgdG8gYnJsYXBpX3Vud2F0Y2hQYXJhbWV0ZXIgdG8KKyAqIHVucmVnaXN0ZXIgdGhlIGNhbGxiYWNrKSwgb3IgTlVMTCBvbiBlcnJvci4KKyAqCisgKiBcbm90ZSBEZWZhdWx0IHBhcmFtZXRlciBjYWxsYmFja3MgZG9uJ3QgZG8gYW55dGhpbmcsIGV4Y2VwdCB0aGUgb25lcyBmb3IKKyAqIGRpc3BsYXkgc2l6ZSB3aGljaCBqdXN0IHJhaXNlIFNJR1dJTkNILgorICogXG5vdGUgSWYgZGF0YSBpcyBOVUxMLCB0aGUgY2FsbGJhY2sgd2lsbCBiZSBjYWxsZWQgaW1tZWRpYXRlbHkgYnkKKyAqIGJybGFwaV93YXRjaFBhcmFtZXRlciwgZm9yIHByb3ZpZGluZyB0aGUgaW5pdGlhbCB2YWx1ZQorICovCisjaWZuZGVmIEJSTEFQSV9OT19TSU5HTEVfU0VTU0lPTgorYnJsYXBpX3BhcmFtQ2FsbGJhY2tEZXNjcmlwdG9yX3QgQlJMQVBJX1NURENBTEwgYnJsYXBpX3dhdGNoUGFyYW1ldGVyKGJybGFwaV9wYXJhbV90IHBhcmFtZXRlciwgYnJsYXBpX3BhcmFtX3N1YnBhcmFtX3Qgc3VicGFyYW0sIGJybGFwaV9wYXJhbV9mbGFnc190IGZsYWdzLCBicmxhcGlfcGFyYW1DYWxsYmFja190IGZ1bmMsIHZvaWQgKnByaXYsIHZvaWQqIGRhdGEsIHNpemVfdCBsZW4pOworI2VuZGlmCiticmxhcGlfcGFyYW1DYWxsYmFja0Rlc2NyaXB0b3JfdCBCUkxBUElfU1REQ0FMTCBicmxhcGlfX3dhdGNoUGFyYW1ldGVyKGJybGFwaV9oYW5kbGVfdCAqaGFuZGxlLCBicmxhcGlfcGFyYW1fdCBwYXJhbWV0ZXIsIGJybGFwaV9wYXJhbV9zdWJwYXJhbV90IHN1YnBhcmFtLCBicmxhcGlfcGFyYW1fZmxhZ3NfdCBmbGFncywgYnJsYXBpX3BhcmFtQ2FsbGJhY2tfdCBmdW5jLCB2b2lkICpwcml2LCB2b2lkKiBkYXRhLCBzaXplX3QgbGVuKTsKKworLyogYnJsYXBpX3Vud2F0Y2hQYXJhbWV0ZXIgKi8KKy8qKiBDbGVhciBhIHBhcmFtZXRlciBjaGFuZ2UgY2FsbGJhY2sKKyAqCisgKiBicmxhcGlfdW53YXRjaFBhcmFtZXRlciB1bnJlZ2lzdGVycyBhIHBhcmFtZXRlciBjaGFuZ2UgY2FsbGJhY2s6IHRoZQorICogY2FsbGJhY2sgZnVuY3Rpb24gcHJldmlvdXNseSByZWdpc3RlcmVkIHdpdGggYnJsYXBpX3dhdGNoUGFyYW1ldGVyIHdpbGwKKyAqIG5vdCBiZSBjYWxsZWQgYW55IGxvbmdlci4KKyAqCisgKiBccGFyYW0gZGVzY3JpcHRvciByZWZlcnMgdG8gdGhlIGNhbGxiYWNrIHRvIGJlIHJlbW92ZWQuCisgKgorICogXHJldHVybiAwIG9uIHN1Y2Nlc3MsIC0xIG9uIGVycm9yLgorICovCisjaWZuZGVmIEJSTEFQSV9OT19TSU5HTEVfU0VTU0lPTgoraW50IEJSTEFQSV9TVERDQUxMIGJybGFwaV91bndhdGNoUGFyYW1ldGVyKGJybGFwaV9wYXJhbUNhbGxiYWNrRGVzY3JpcHRvcl90IGRlc2NyaXB0b3IpOworI2VuZGlmCitpbnQgQlJMQVBJX1NURENBTEwgYnJsYXBpX191bndhdGNoUGFyYW1ldGVyKGJybGFwaV9oYW5kbGVfdCAqaGFuZGxlLCBicmxhcGlfcGFyYW1DYWxsYmFja0Rlc2NyaXB0b3JfdCBkZXNjcmlwdG9yKTsKKworLyoqIEB9ICovCisKKy8qKiBcZGVmZ3JvdXAgYnJsYXBpX21pc2MgTWlzY2VsbGFuZW91cyBmdW5jdGlvbnMKKyAqIEB7ICovCisKKy8qIGJybGFwaV9wYXVzZSAqLworLyoqCisgKiBXYWl0cyB1bnRpbCBhbiBldmVudCBpcyByZWNlaXZlZCBmcm9tIHRoZSBCcmxBUEkgc2VydmVyCisgKiBccGFyYW0gdGltZW91dF9tcyBzcGVjaWZpZXMgYW4gb3B0aW9uYWwgdGltZW91dCB3aGljaCBjYW4gYmUgemVybyBmb3IgcG9sbGluZywgb3IgLTEgZm9yIGluZmluaXRlIHdhaXQKKyAqIFxyZXR1cm4gMCBvbiB0aW1lb3V0LCAtMSBvbiBlcnJvciwgb3Igb24gaW50ZXJydXB0aW9uIGJ5IGEgc2lnbmFsIG9yIGEgcGFyYW1ldGVyCisgKiBjaGFuZ2Ugbm90aWZpY2F0aW9uLCBpbiB3aGljaCBjYXNlIGJybGFwaV9lcnJubyB3aWxsIGJlIEJSTEFQSV9FUlJPUl9MSUJDRVJSCisgKiBhbmQgZXJybm8gd2lsbCBiZSBFSU5UUi4gKi8KKyNpZm5kZWYgQlJMQVBJX05PX1NJTkdMRV9TRVNTSU9OCitpbnQgQlJMQVBJX1NURENBTEwgYnJsYXBpX3BhdXNlKGludCB0aW1lb3V0X21zKTsKKyNlbmRpZgoraW50IEJSTEFQSV9TVERDQUxMIGJybGFwaV9fcGF1c2UoYnJsYXBpX2hhbmRsZV90ICpoYW5kbGUsIGludCB0aW1lb3V0X21zKTsKKworLyogYnJsYXBpX3N5bmMgKi8KKy8qKgorICogU3luY2hyb25pemUgYWdhaW5zdCBhbnkgcGVuZGluZyBleGNlcHRpb24sIGFuZCByZXR1cm5zIGl0LiBUaGlzIGFsbG93cyB0bworICogc3luY2hyb25vdXNseSBjYXRjaCBleGNlcHRpb24gcmFpc2VkIGJ5IGJybGFwaV93cml0ZSBjYWxscy4KKyAqIFRoaXMgd29ya3MgYnkgdGVtcG9yYXJpbHkgcmVwbGFjaW5nIHRoZSBjdXJyZW50IGV4Y2VwdGlvbiBoYW5kbGVyIGJ5IGl0cyBvd24KKyAqIGhhbmRsZXIuCisgKiBccmV0dXJuIDAgaWYgbm8gZXhjZXB0aW9uIHdhcyBwZW5kaW5nLCAtMSBpZiBhbiBleGNlcHRpb24gd2FzIGNhdWdodC4KKyAqLworI2lmbmRlZiBCUkxBUElfTk9fU0lOR0xFX1NFU1NJT04KK2ludCBCUkxBUElfU1REQ0FMTCBicmxhcGlfc3luYyh2b2lkKTsKKyNlbmRpZgoraW50IEJSTEFQSV9TVERDQUxMIGJybGFwaV9fc3luYyhicmxhcGlfaGFuZGxlX3QgKmhhbmRsZSk7CisKKy8qKiBAfSAqLworCisvKiogXGRlZmdyb3VwIGJybGFwaV9lcnJvciBFcnJvciBoYW5kbGluZworICogXGJyaWVmIEhvdyB0byBoYW5kbGUgZXJyb3JzCisgKgorICogV2hlbiBhIGZ1bmN0aW9uIGZhaWxzLCA6OmJybGFwaV9lcnJubyB3aWxsIGhvbGQgYW4gZXJyb3IKKyAqIGNvZGUgdG8gZXhwbGFpbiB3aHkgaXQgZmFpbGVkLiBJdCBzaG91bGQgYWx3YXlzIGJlIHJlcG9ydGVkIHNvbWVob3cuCisgKgorICogQWx0aG91Z2ggbW9zdCBlcnJvcnMgYXJlIHJlcG9ydGVkIHRoYXQgd2F5LCBzb21lIChjYWxsZWQgZXhjZXB0aW9ucykKKyAqIGFyZSByZXBvcnRlZCBhc3luY2hyb25vdXNseSBmb3IgZWZmaWNpZW5jeSByZWFzb25zLCBiZWNhdXNlIHRoZXkgYWx3YXlzCisgKiBqdXN0IHJlcG9ydCBhIHByb2dyYW1taW5nIGVycm9yLiBUaGUgYWZmZWN0ZWQgZnVuY3Rpb25zIGFyZTogYnJsYXBpX3NldEZvY3VzLAorICogYnJsYXBpX3dyaXRlKiBhbmQgYnJsYXBpX3NlbmRSYXcuICBXaGVuIHRoZXkgaGFwcGVuLCB0aGUgbmV4dCBjYWxsIHRvCisgKiBicmxhcGlfc29tZXRoaW5nIHdpbGwgY2xvc2UgdGhlIGNvbm5lY3Rpb24gYW5kIGNhbGwgdGhlIFxlIGV4Y2VwdGlvbgorICogaGFuZGxlci4gSWYgdGhlIGV4Y2VwdGlvbiBoYW5kbGVyIHJldHVybnMsIHRoZSBicmxhcGlfc29tZXRoaW5nIGZ1bmN0aW9uIHdpbGwKKyAqIHJldHVybiBhbiBlbmQtb2YtZmlsZSBlcnJvci4KKyAqCisgKiBUaGUgZGVmYXVsdCBleGNlcHRpb24gaGFuZGxlciAoYnJsYXBpX2RlZmF1bHRFeGNlcHRpb25IYW5kbGVyKCkpIGR1bXBzCisgKiB0aGUgZ3VpbHR5IHBhY2tldCBiZWZvcmUgYWJvcnQoKWluZy4gIEl0IGNhbiBiZSByZXBsYWNlZCBieSBjYWxsaW5nCisgKiBicmxhcGlfc2V0RXhjZXB0aW9uSGFuZGxlcigpLiAgRm9yIGluc3RhbmNlLCB0aGUgSmF2YSBhbmQgUHl0aG9uIGJpbmRpbmdzIHVzZQorICogdGhpcyBmb3IgcmFpc2luZyBhIEphdmEgb3IgUHl0aG9uIGV4Y2VwdGlvbiB0aGF0IG1heSBiZSBjYXVnaHQuCisgKgorICogQHsgKi8KKworLyoqIEJybEFQSSBFcnJvciBjb2RlcyAqLworZW51bSBicmxhcGlfZXJyb3IgeworICBCUkxBUElfRVJST1JfU1VDQ0VTUyAgICAgICAgICAgICA9ICAwLCAgLyoqPCBTdWNjZXNzICovCisjZGVmaW5lICBCUkxBUElfRVJST1JfU1VDQ0VTUyAgICAgICAgICAgICAgMAorICBCUkxBUElfRVJST1JfTk9NRU0gICAgICAgICAgICAgICA9ICAxLCAgLyoqPCBOb3QgZW5vdWdoIG1lbW9yeSAqLworI2RlZmluZSBCUkxBUElfRVJST1JfTk9NRU0gICAgICAgICAgICAgICAgQlJMQVBJX0VSUk9SX05PTUVNCisgIEJSTEFQSV9FUlJPUl9UVFlCVVNZICAgICAgICAgICAgID0gIDIsICAvKio8IEEgY29ubmVjdGlvbiBpcyBhbHJlYWR5IHJ1bm5pbmcgaW4gdGhpcyB0dHkgKi8KKyNkZWZpbmUgQlJMQVBJX0VSUk9SX1RUWUJVU1kgICAgICAgICAgICAgIEJSTEFQSV9FUlJPUl9UVFlCVVNZCisgIEJSTEFQSV9FUlJPUl9ERVZJQ0VCVVNZICAgICAgICAgID0gIDMsICAvKio8IEEgY29ubmVjdGlvbiBpcyBhbHJlYWR5IHVzaW5nIFJBVyBvciBzdXNwZW5kIG1vZGUgKi8KKyNkZWZpbmUgQlJMQVBJX0VSUk9SX0RFVklDRUJVU1kgICAgICAgICAgIEJSTEFQSV9FUlJPUl9ERVZJQ0VCVVNZCisgIEJSTEFQSV9FUlJPUl9VTktOT1dOX0lOU1RSVUNUSU9OID0gIDQsICAvKio8IE5vdCBpbXBsZW1lbnRlZCBpbiBwcm90b2NvbCAqLworI2RlZmluZSBCUkxBUElfRVJST1JfVU5LTk9XTl9JTlNUUlVDVElPTiAgQlJMQVBJX0VSUk9SX1VOS05PV05fSU5TVFJVQ1RJT04KKyAgQlJMQVBJX0VSUk9SX0lMTEVHQUxfSU5TVFJVQ1RJT04gPSAgNSwgIC8qKjwgRm9yYmlkZW4gaW4gY3VycmVudCBtb2RlICovCisjZGVmaW5lIEJSTEFQSV9FUlJPUl9JTExFR0FMX0lOU1RSVUNUSU9OICBCUkxBUElfRVJST1JfSUxMRUdBTF9JTlNUUlVDVElPTgorICBCUkxBUElfRVJST1JfSU5WQUxJRF9QQVJBTUVURVIgICA9ICA2LCAgLyoqPCBPdXQgb2YgcmFuZ2Ugb3IgaGF2ZSBubyBzZW5zZSAqLworI2RlZmluZSBCUkxBUElfRVJST1JfSU5WQUxJRF9QQVJBTUVURVIgICAgQlJMQVBJX0VSUk9SX0lOVkFMSURfUEFSQU1FVEVSCisgIEJSTEFQSV9FUlJPUl9JTlZBTElEX1BBQ0tFVCAgICAgID0gIDcsICAvKio8IEludmFsaWQgc2l6ZSAqLworI2RlZmluZSBCUkxBUElfRVJST1JfSU5WQUxJRF9QQUNLRVQgICAgICAgQlJMQVBJX0VSUk9SX0lOVkFMSURfUEFDS0VUCisgIEJSTEFQSV9FUlJPUl9DT05OUkVGVVNFRCAgICAgICAgID0gIDgsICAvKio8IENvbm5lY3Rpb24gcmVmdXNlZCAqLworI2RlZmluZSBCUkxBUElfRVJST1JfQ09OTlJFRlVTRUQgICAgICAgICAgQlJMQVBJX0VSUk9SX0NPTk5SRUZVU0VECisgIEJSTEFQSV9FUlJPUl9PUE5PVFNVUFAgICAgICAgICAgID0gIDksICAvKio8IE9wZXJhdGlvbiBub3Qgc3VwcG9ydGVkICovCisjZGVmaW5lIEJSTEFQSV9FUlJPUl9PUE5PVFNVUFAgICAgICAgICAgICBCUkxBUElfRVJST1JfT1BOT1RTVVBQCisgIEJSTEFQSV9FUlJPUl9HQUlFUlIgICAgICAgICAgICAgID0gMTAsICAvKio8IEdldGFkZHJpbmZvIGVycm9yICovCisjZGVmaW5lIEJSTEFQSV9FUlJPUl9HQUlFUlIgICAgICAgICAgICAgICBCUkxBUElfRVJST1JfR0FJRVJSCisgIEJSTEFQSV9FUlJPUl9MSUJDRVJSICAgICAgICAgICAgID0gMTEsICAvKio8IExpYmMgZXJyb3IgKi8KKyNkZWZpbmUgQlJMQVBJX0VSUk9SX0xJQkNFUlIgICAgICAgICAgICAgIEJSTEFQSV9FUlJPUl9MSUJDRVJSCisgIEJSTEFQSV9FUlJPUl9VTktOT1dOVFRZICAgICAgICAgID0gMTIsICAvKio8IENvdWxkbid0IGZpbmQgb3V0IHRoZSB0dHkgbnVtYmVyICovCisjZGVmaW5lIEJSTEFQSV9FUlJPUl9VTktOT1dOVFRZICAgICAgICAgICBCUkxBUElfRVJST1JfVU5LTk9XTlRUWQorICBCUkxBUElfRVJST1JfUFJPVE9DT0xfVkVSU0lPTiAgICA9IDEzLCAgLyoqPCBCYWQgcHJvdG9jb2wgdmVyc2lvbiAqLworI2RlZmluZSBCUkxBUElfRVJST1JfUFJPVE9DT0xfVkVSU0lPTiAgICAgQlJMQVBJX0VSUk9SX1BST1RPQ09MX1ZFUlNJT04KKyAgQlJMQVBJX0VSUk9SX0VPRiAgICAgICAgICAgICAgICAgPSAxNCwgIC8qKjwgVW5leHBlY3RlZCBlbmQgb2YgZmlsZSAqLworI2RlZmluZSBCUkxBUElfRVJST1JfRU9GICAgICAgICAgICAgICAgICAgQlJMQVBJX0VSUk9SX0VPRgorICBCUkxBUElfRVJST1JfRU1QVFlLRVkgICAgICAgICAgICA9IDE1LCAgLyoqPCBLZXkgZmlsZSBlbXB0eSAqLworI2RlZmluZSBCUkxBUElfRVJST1JfRU1QVFlLRVkgICAgICAgICAgICAgQlJMQVBJX0VSUk9SX0VNUFRZS0VZCisgIEJSTEFQSV9FUlJPUl9EUklWRVJFUlJPUiAgICAgICAgID0gMTYsICAvKio8IFBhY2tldCByZXR1cm5lZCBieSBkcml2ZXIgdG9vIGxhcmdlICovCisjZGVmaW5lIEJSTEFQSV9FUlJPUl9EUklWRVJFUlJPUiAgICAgICAgICBCUkxBUElfRVJST1JfRFJJVkVSRVJST1IKKyAgQlJMQVBJX0VSUk9SX0FVVEhFTlRJQ0FUSU9OICAgICAgPSAxNywgIC8qKjwgQXV0aGVudGljYXRpb24gZmFpbGVkICovCisjZGVmaW5lIEJSTEFQSV9FUlJPUl9BVVRIRU5USUNBVElPTiAgICAgICBCUkxBUElfRVJST1JfQVVUSEVOVElDQVRJT04KKyAgQlJMQVBJX0VSUk9SX1JFQURPTkxZX1BBUkFNRVRFUiAgPSAxOCwgIC8qKjwgUGFyYW1ldGVyIGNhbiBub3QgYmUgY2hhbmdlZCAqLworI2RlZmluZSBCUkxBUElfRVJST1JfUkVBRE9OTFlfUEFSQU1FVEVSICAgQlJMQVBJX0VSUk9SX1JFQURPTkxZX1BBUkFNRVRFUgorfTsKKworLyogYnJsYXBpX2Vycmxpc3QgKi8KKy8qKiBFcnJvciBtZXNzYWdlIGxpc3QKKyAqCisgKiBUaGVzZSBhcmUgdGhlIHN0cmluZyBjb25zdGFudHMgdXNlZCBieSBicmxhcGlfcGVycm9yKCkuCisgKi8KK2V4dGVybiBjb25zdCBjaGFyICpicmxhcGlfZXJybGlzdFtdOworCisvKiBicmxhcGlfbmVyciAqLworLyoqIE51bWJlciBvZiBlcnJvciBtZXNzYWdlcyAqLworZXh0ZXJuIGNvbnN0IGludCBicmxhcGlfbmVycjsKKworLyogYnJsYXBpX3BlcnJvciAqLworLyoqIFByaW50IGEgQnJsQVBJIGVycm9yIG1lc3NhZ2UKKyAqCisgKiBicmxhcGlfcGVycm9yKCkgcmVhZHMgOjpicmxhcGlfZXJyb3IsIGFuZCBhY3RzIGp1c3QgbGlrZSBwZXJyb3IoKS4KKyAqLwordm9pZCBCUkxBUElfU1REQ0FMTCBicmxhcGlfcGVycm9yKGNvbnN0IGNoYXIgKnMpOworCisvKiBicmxhcGlfZXJyb3JfdCAqLworLyoqIEFsbCBpbmZvcm1hdGlvbiB0aGF0IGlzIG5lZWRlZCB0byBkZXNjcmliZSBicmxhcGkgZXJyb3JzICovCit0eXBlZGVmIHN0cnVjdCB7CisgIGVudW0gYnJsYXBpX2Vycm9yIGJybGVycm5vOworICBpbnQgbGliY2Vycm5vOworICBpbnQgZ2FpZXJybm87CisgIGNvbnN0IGNoYXIgKmVycmZ1bjsKK30gYnJsYXBpX2Vycm9yX3Q7CisKKy8qKiBHZXQgcGVyLXRocmVhZCBlcnJvciBsb2NhdGlvbgorICoKKyAqIEluIG11bHRpdGhyZWFkZWQgc29mdHdhcmUsIDo6YnJsYXBpX2Vycm9yIGlzIHRocmVhZC1zcGVjaWZpYywgc28gYXBpLmgKKyAqIGNoZWF0cyBhYm91dCB0aGUgYnJsYXBpX2Vycm9yIHRva2VuIGFuZCBhY3R1YWxseSBjYWxscworICogYnJsYXBpX2Vycm9yX2xvY2F0aW9uKCkuCisgKgorICogVGhpcyBnZXRzIHRoZSB0aHJlYWQgc3BlY2lmaWMgbG9jYXRpb24gb2YgZ2xvYmFsIHZhcmlhYmxlIDo6YnJsYXBpX2Vycm9yCisgKi8KK2JybGFwaV9lcnJvcl90ICogQlJMQVBJX1NURENBTEwgYnJsYXBpX2Vycm9yX2xvY2F0aW9uKHZvaWQpOworCisvKiogR2xvYmFsIHZhcmlhYmxlIGJybGFwaV9lcnJvcgorICoKKyAqIDo6YnJsYXBpX2Vycm9yIGlzIGEgZ2xvYmFsIGxlZnQtdmFsdWUgY29udGFpbmluZyB0aGUgbGFzdCBlcnJvciBpbmZvcm1hdGlvbi4KKyAqIEl0cyBlcnJubyBmaWVsZCBpcyBub3QgcmVzZXQgdG8gQlJMQVBJX0VSUk9SX1NVQ0NFU1Mgb24gc3VjY2Vzcy4KKyAqCisgKiBUaGlzIGluZm9ybWF0aW9uIG1heSBiZSBjb3BpZWQgaW4gYnJsYXBpX2Vycm9yX3QgdmFyaWFibGVzIGZvciBsYXRlciB1c2UKKyAqIHdpdGggdGhlIGJybGFwaV9zdHJlcnJvciBmdW5jdGlvbi4KKyAqLworZXh0ZXJuIGJybGFwaV9lcnJvcl90IGJybGFwaV9lcnJvcjsKKworLyoqIFNob3J0aGFuZCBmb3IgYnJsYXBpX2Vycm9yLmVycm5vICovCitleHRlcm4gZW51bSBicmxhcGlfZXJyb3IgYnJsYXBpX2Vycm5vOworLyoqIFNob3J0aGFuZCBmb3IgYnJsYXBpX2Vycm9yLmxpYmNlcnJubyAqLworZXh0ZXJuIGludCBicmxhcGlfbGliY2Vycm5vOworLyoqIFNob3J0aGFuZCBmb3IgYnJsYXBpX2Vycm9yLmdhaWVycm5vICovCitleHRlcm4gaW50IGJybGFwaV9nYWllcnJubzsKKy8qKiBTaG9ydGhhbmQgZm9yIGJybGFwaV9lcnJvci5lcnJmdW4gKi8KK2V4dGVybiBjb25zdCBjaGFyICpicmxhcGlfZXJyZnVuOworCisvKiogQ2hlYXQgYWJvdXQgdGhlIGJybGFwaV9lcnJvciBDIHRva2VuICovCisjZGVmaW5lIGJybGFwaV9lcnJvciAoKmJybGFwaV9lcnJvcl9sb2NhdGlvbigpKQorLyoqIENoZWF0IGFib3V0IHRoZSBicmxhcGlfZXJybm8gQyB0b2tlbiAqLworI2RlZmluZSBicmxhcGlfZXJybm8gKGJybGFwaV9lcnJvci5icmxlcnJubykKKy8qKiBDaGVhdCBhYm91dCB0aGUgYnJsYXBpX2xpYmNlcnJubyBDIHRva2VuICovCisjZGVmaW5lIGJybGFwaV9saWJjZXJybm8gKGJybGFwaV9lcnJvci5saWJjZXJybm8pCisvKiogQ2hlYXQgYWJvdXQgdGhlIGJybGFwaV9nYWllcnJubyBDIHRva2VuICovCisjZGVmaW5lIGJybGFwaV9nYWllcnJubyAoYnJsYXBpX2Vycm9yLmdhaWVycm5vKQorLyoqIENoZWF0IGFib3V0IHRoZSBicmxhcGlfZXJyZnVuIEMgdG9rZW4gKi8KKyNkZWZpbmUgYnJsYXBpX2VycmZ1biAoYnJsYXBpX2Vycm9yLmVycmZ1bikKKworLyogYnJsYXBpX3N0cmVycm9yICovCisvKiogR2V0IHBsYWluIGVycm9yIG1lc3NhZ2UKKyAqCisgKiBicmxhcGlfc3RyZXJyb3IoKSByZXR1cm5zIHRoZSBwbGFpbiBlcnJvciBtZXNzYWdlIGNvcnJlc3BvbmRpbmcgdG8gaXRzCisgKiBhcmd1bWVudC4gU2luY2UgdGhlIG1lc3NhZ2UgaXMgYSBjb25zdGFudCBzdHJpbmcsIHRoZSBhcHBsaWNhdGlvbiBtdXN0IG5vdAorICogZnJlZSBpdC4gQWxzbywgdGhpcyBtYWtlcyBpdCB1bnNhZmUgaW4gdGhyZWFkZWQgZW52aXJvbm1lbnRzLAorICogYnJsYXBpX3N0cmVycm9yX3IoKSBzaG91bGQgYmUgdXNlZCBpbnN0ZWFkIGluIHRoYXQgY2FzZS4KKyAqLworY29uc3QgY2hhciAqIEJSTEFQSV9TVERDQUxMIGJybGFwaV9zdHJlcnJvcihjb25zdCBicmxhcGlfZXJyb3JfdCAqZXJyb3IpOworCisvKiBicmxhcGlfc3RyZXJyb3JfciAqLworLyoqIFN0b3JlIHBsYWluIGVycm9yIG1lc3NhZ2UKKyAqCisgKiBicmxhcGlfc3RyZXJyb3JfcigpIHN0b3JlcyB0aGUgcGxhaW4gZXJyb3IgbWVzc2FnZSBjb3JyZXNwb25kaW5nIHRvIGl0cworICogXHAgZXJyb3IgYXJndW1lbnQuIFxwIGJ1ZmxlbiBoYXMgdG8gYmUgc2V0IHRvIHRoZSBzaXplIG9mIFxwIGJ1ZiwgYW5kCisgKiBicmxhcGlfc3RyZXJyb3JfcigpIHdpbGwgc3RvcmUgYXQgbW9zdCBccCBidWZsZW4gYnl0ZXMgaW4gXHAgYnVmLiBJZiBccAorICogYnVmbGVuIGlzIG5vdCBsYXJnZSBlbm91Z2ggZm9yIHRoZSB3aG9sZSBlcnJvciBtZXNzYWdlLCBpdCB3aWxsIGJlIHRydW5jYXRlZCwKKyAqIGJ1dCBhIHRyYWlsaW5nIFwwIGNoYXJhY3RlciB3aWxsIHN0aWxsIGJlIHNldCBhdCBidWZbYnVmbGVuLTFdLgorICoKKyAqIFxyZXR1cm5zIHRoZSBudW1iZXIgb2YgY2hhcmFjdGVycyB0aGF0IHNob3VsZCBoYXZlIGJlZW4gc3RvcmVkIGluIFxwIGJ1ZgorICogKHdpdGhvdXQgdGhlIHRyYWlsaW5nIFwwIGNoYXJhY3RlcikuIEEgdmFsdWUgZ3JlYXRlciBvciBlcXVhbCB0byBccCBidWZsZW4KKyAqIHRodXMgbWVhbnMgdGhhdCB0aGUgb3V0cHV0IHdhcyB0cnVuY2F0ZWQuCisgKgorICogSWYgXHAgYnVmbGVuIGlzIHNldCB0byAwLCBccCBidWYgY2FuIGJlIHNldCB0byBOVUxMLCBhbmQgYnJsYXBpX3N0cmVycm9yX3IKKyAqIHdpbGwgdGh1cyBvbmx5IHJldHVybiB0aGUgbnVtYmVyIG9mIGNoYXJhY3RlcnMgdGhhdCB3b3VsZCBoYXZlIGJlZW4gc3RvcmVkCisgKiAod2l0aG91dCB0aGUgdHJhaWxpbmcgXDAgY2hhcmFjdGVyKS4KKyAqLworc2l6ZV90IEJSTEFQSV9TVERDQUxMIGJybGFwaV9zdHJlcnJvcl9yKGNvbnN0IGJybGFwaV9lcnJvcl90ICplcnJvciwgY2hhciAqYnVmLCBzaXplX3QgYnVmbGVuKTsKKworLyoqIFR5cGUgZm9yIHBhY2tldCB0eXBlLiBPbmx5IHVuc2lnbmVkIGNhbiBjcm9zcyBuZXR3b3JrcywgMzJiaXRzICovCit0eXBlZGVmIHVpbnQzMl90IGJybGFwaV9wYWNrZXRUeXBlX3Q7CisKKy8qIGJybGFwaV9nZXRQYWNrZXRUeXBlTmFtZSAqLworLyoqIEdldCBwbGFpbiBwYWNrZXQgdHlwZQorICoKKyAqIGJybGFwaV9nZXRQYWNrZXRUeXBlTmFtZSgpIHJldHVybnMgdGhlIHBsYWluIHBhY2tldCB0eXBlIG5hbWUgY29ycmVzcG9uZGluZyB0bworICogaXRzIGFyZ3VtZW50LgorICovCitjb25zdCBjaGFyICogQlJMQVBJX1NURENBTEwgYnJsYXBpX2dldFBhY2tldFR5cGVOYW1lKGJybGFwaV9wYWNrZXRUeXBlX3QgdHlwZSk7CisKKy8qIGJybGFwaV9leGNlcHRpb25IYW5kbGVyX3QgKi8KKy8qKiBUeXBlcyBmb3IgZXhjZXB0aW9uIGhhbmRsZXJzCisgKgorICogVHlwZXMgb2YgZXhjZXB0aW9uIGhhbmRsZXJzIHdoaWNoIGFyZSB0byBiZSBnaXZlbiB0bworICogYnJsYXBpX3NldEV4Y2VwdGlvbkhhbmRsZXIoKSBhbmQgYnJsYXBpX19zZXRFeGNlcHRpb25IYW5kbGVyKCkuCisgKgorICogXHBhcmFtIGVycm9yIGlzIGEgQlJMQVBJX0VSUk9SXyBlcnJvciBjb2RlOworICogXHBhcmFtIHR5cGUgaXMgdGhlIHR5cGUgb2YgdGhlIGd1aWx0eSBwYWNrZXQ7CisgKiBccGFyYW0gcGFja2V0IHBvaW50cyB0byB0aGUgY29udGVudCBvZiB0aGUgZ3VpbHR5IHBhY2tldCAobWlnaHQgYmUgYSBsaXR0bGUgYml0IHRydW5jYXRlZCk7CisgKiBccGFyYW0gc2l6ZSBnaXZlcyB0aGUgZ3VpbHR5IHBhY2tldCdzIHNpemUuCisgKi8KKyNpZm5kZWYgQlJMQVBJX05PX1NJTkdMRV9TRVNTSU9OCit0eXBlZGVmIHZvaWQgKEJSTEFQSV9TVERDQUxMICpicmxhcGlfZXhjZXB0aW9uSGFuZGxlcl90KShpbnQgZXJyb3IsIGJybGFwaV9wYWNrZXRUeXBlX3QgdHlwZSwgY29uc3Qgdm9pZCAqcGFja2V0LCBzaXplX3Qgc2l6ZSk7CisjZW5kaWYgLyogQlJMQVBJX05PX1NJTkdMRV9TRVNTSU9OICovCit0eXBlZGVmIHZvaWQgKEJSTEFQSV9TVERDQUxMICpicmxhcGlfX2V4Y2VwdGlvbkhhbmRsZXJfdCkoYnJsYXBpX2hhbmRsZV90ICpoYW5kbGUsIGludCBlcnJvciwgYnJsYXBpX3BhY2tldFR5cGVfdCB0eXBlLCBjb25zdCB2b2lkICpwYWNrZXQsIHNpemVfdCBzaXplKTsKKworLyogYnJsYXBpX3N0cmV4Y2VwdGlvbiAqLworLyoqIERlc2NyaWJlcyBhbiBleGNlcHRpb24KKyAqCisgKiBicmxhcGlfc3RyZXhjZXB0aW9uKCkgcHV0cyBhIHRleHQgZGVzY3JpYmluZyB0aGUgZ2l2ZW4gZXhjZXB0aW9uIGluIGJ1ZmZlci4KKyAqCisgKiBUaGUgYmVnaW5uaW5nIG9mIHRoZSBndWlsdHkgcGFja2V0IGlzIGR1bXBlZCBhcyBhIHNlcXVlbmNlIG9mIGhleCBieXRlcy4KKyAqCisgKiBccmV0dXJuIHRoZSBzaXplIG9mIHRoZSB0ZXh0IGRlc2NyaWJpbmcgdGhlIGV4Y2VwdGlvbiwgZm9sbG93aW5nCisgKiBzbnByaW50ZigpJ3Mgc2VtYW50aWNzLgorKi8KKyNpZm5kZWYgQlJMQVBJX05PX1NJTkdMRV9TRVNTSU9OCitpbnQgQlJMQVBJX1NURENBTEwgYnJsYXBpX3N0cmV4Y2VwdGlvbihjaGFyICpidWZmZXIsIHNpemVfdCBidWZmZXJTaXplLCBpbnQgZXJyb3IsIGJybGFwaV9wYWNrZXRUeXBlX3QgdHlwZSwgY29uc3Qgdm9pZCAqcGFja2V0LCBzaXplX3QgcGFja2V0U2l6ZSk7CisjZW5kaWYgLyogQlJMQVBJX05PX1NJTkdMRV9TRVNTSU9OICovCitpbnQgQlJMQVBJX1NURENBTEwgYnJsYXBpX19zdHJleGNlcHRpb24oYnJsYXBpX2hhbmRsZV90ICpoYW5kbGUsIGNoYXIgKmJ1ZmZlciwgc2l6ZV90IGJ1ZmZlclNpemUsIGludCBlcnJvciwgYnJsYXBpX3BhY2tldFR5cGVfdCB0eXBlLCBjb25zdCB2b2lkICpwYWNrZXQsIHNpemVfdCBwYWNrZXRTaXplKTsKKworLyogYnJsYXBpX3NldEV4Y2VwdGlvbkhhbmRsZXIgKi8KKy8qKiBTZXQgYSBuZXcgZXhjZXB0aW9uIGhhbmRsZXIKKyAqCisgKiBicmxhcGlfc2V0RXhjZXB0aW9uSGFuZGxlcigpIHJlcGxhY2VzIHRoZSBwcmV2aW91cyBleGNlcHRpb24gaGFuZGxlciB3aXRoCisgKiB0aGUgaGFuZGxlciBwYXJhbWV0ZXIuIFRoZSBwcmV2aW91cyBleGNlcHRpb24gaGFuZGxlciBpcyByZXR1cm5lZCB0byBtYWtlCisgKiBjaGFpbmluZyBlcnJvciBoYW5kbGVycyBwb3NzaWJsZS4KKyAqCisgKiBUaGUgZGVmYXVsdCBoYW5kbGVyIGp1c3QgcHJpbnRzIHRoZSBleGNlcHRpb24gYW5kIGFib3J0KClzLgorICovCisjaWZuZGVmIEJSTEFQSV9OT19TSU5HTEVfU0VTU0lPTgorYnJsYXBpX2V4Y2VwdGlvbkhhbmRsZXJfdCBCUkxBUElfU1REQ0FMTCBicmxhcGlfc2V0RXhjZXB0aW9uSGFuZGxlcihicmxhcGlfZXhjZXB0aW9uSGFuZGxlcl90IGhhbmRsZXIpOworI2VuZGlmIC8qIEJSTEFQSV9OT19TSU5HTEVfU0VTU0lPTiAqLworYnJsYXBpX19leGNlcHRpb25IYW5kbGVyX3QgQlJMQVBJX1NURENBTEwgYnJsYXBpX19zZXRFeGNlcHRpb25IYW5kbGVyKGJybGFwaV9oYW5kbGVfdCAqaGFuZGxlLCBicmxhcGlfX2V4Y2VwdGlvbkhhbmRsZXJfdCBoYW5kbGVyKTsKKworI2lmbmRlZiBCUkxBUElfTk9fU0lOR0xFX1NFU1NJT04KK3ZvaWQgQlJMQVBJX1NURENBTEwgYnJsYXBpX2RlZmF1bHRFeGNlcHRpb25IYW5kbGVyKGludCBlcnJvciwgYnJsYXBpX3BhY2tldFR5cGVfdCB0eXBlLCBjb25zdCB2b2lkICpwYWNrZXQsIHNpemVfdCBzaXplKTsKKyNlbmRpZiAvKiBCUkxBUElfTk9fU0lOR0xFX1NFU1NJT04gKi8KK3ZvaWQgQlJMQVBJX1NURENBTEwgYnJsYXBpX19kZWZhdWx0RXhjZXB0aW9uSGFuZGxlcihicmxhcGlfaGFuZGxlX3QgKmhhbmRsZSwgaW50IGVycm9yLCBicmxhcGlfcGFja2V0VHlwZV90IHR5cGUsIGNvbnN0IHZvaWQgKnBhY2tldCwgc2l6ZV90IHNpemUpOworCisvKiogQH0gKi8KKworLyogV2luZG93cy1zcGVjaWZpYyB0cmlja3MgLSBkb24ndCBsb29rIGF0IHRoaXMgKi8KKyNpZmRlZiBCUkxBUElfV0lOMzIKKyNpZm5kZWYgQlJMQVBJX05PX1NJTkdMRV9TRVNTSU9OCitpbnQgQlJMQVBJX1NURENBTEwgYnJsYXBpX3dyaXRlVGV4dFdpbihpbnQgY3Vyc29yLCBjb25zdCB2b2lkICpzdHIsIGludCB3aWRlKTsKKyNlbmRpZiAvKiBCUkxBUElfTk9fU0lOR0xFX1NFU1NJT04gKi8KK2ludCBCUkxBUElfU1REQ0FMTCBicmxhcGlfX3dyaXRlVGV4dFdpbihicmxhcGlfaGFuZGxlX3QgKmhhbmRsZSwgaW50IGN1cnNvciwgY29uc3Qgdm9pZCAqc3RyLCBpbnQgd2lkZSk7CisKKyNpZm5kZWYgQlJMQVBJX05PX1NJTkdMRV9TRVNTSU9OCitpbnQgQlJMQVBJX1NURENBTEwgYnJsYXBpX3dyaXRlV2luKGNvbnN0IGJybGFwaV93cml0ZUFyZ3VtZW50c190ICpzLCBpbnQgd2lkZSk7CisjZW5kaWYgLyogQlJMQVBJX05PX1NJTkdMRV9TRVNTSU9OICovCitpbnQgQlJMQVBJX1NURENBTEwgYnJsYXBpX193cml0ZVdpbihicmxhcGlfaGFuZGxlX3QgKmhhbmRsZSwgY29uc3QgYnJsYXBpX3dyaXRlQXJndW1lbnRzX3QgKnMsIGludCB3aWRlKTsKKworI2lmZGVmIFVOSUNPREUKKyNpZm5kZWYgQlJMQVBJX05PX1NJTkdMRV9TRVNTSU9OCisjZGVmaW5lIGJybGFwaV93cml0ZVRleHQoY3Vyc29yLCBzdHIpIGJybGFwaV93cml0ZVRleHRXaW4oY3Vyc29yLCBzdHIsIDEpCisjZW5kaWYgLyogQlJMQVBJX05PX1NJTkdMRV9TRVNTSU9OICovCisjZGVmaW5lIGJybGFwaV9fd3JpdGVUZXh0KGhhbmRsZSwgY3Vyc29yLCBzdHIpIGJybGFwaV9fd3JpdGVUZXh0V2luKGhhbmRsZSwgY3Vyc29yLCBzdHIsIDEpCisKKyNpZm5kZWYgQlJMQVBJX05PX1NJTkdMRV9TRVNTSU9OCisjZGVmaW5lIGJybGFwaV93cml0ZShzKSBicmxhcGlfd3JpdGVXaW4ocywgMSkKKyNlbmRpZiAvKiBCUkxBUElfTk9fU0lOR0xFX1NFU1NJT04gKi8KKyNkZWZpbmUgYnJsYXBpX193cml0ZShoYW5kbGUsIHMpIGJybGFwaV9fd3JpdGVXaW4oaGFuZGxlLCBzLCAxKQorCisjZWxzZSAvKiBVTklDT0RFICovCisKKyNpZm5kZWYgQlJMQVBJX05PX1NJTkdMRV9TRVNTSU9OCisjZGVmaW5lIGJybGFwaV93cml0ZVRleHQoY3Vyc29yLCBzdHIpIGJybGFwaV93cml0ZVRleHRXaW4oY3Vyc29yLCBzdHIsIDApCisjZW5kaWYgLyogQlJMQVBJX05PX1NJTkdMRV9TRVNTSU9OICovCisjZGVmaW5lIGJybGFwaV9fd3JpdGVUZXh0KGhhbmRsZSwgY3Vyc29yLCBzdHIpIGJybGFwaV9fd3JpdGVUZXh0V2luKGhhbmRsZSwgY3Vyc29yLCBzdHIsIDApCisKKyNpZm5kZWYgQlJMQVBJX05PX1NJTkdMRV9TRVNTSU9OCisjZGVmaW5lIGJybGFwaV93cml0ZShzKSBicmxhcGlfd3JpdGVXaW4ocywgMCkKKyNlbmRpZiAvKiBCUkxBUElfTk9fU0lOR0xFX1NFU1NJT04gKi8KKyNkZWZpbmUgYnJsYXBpX193cml0ZShoYW5kbGUsIHMpIGJybGFwaV9fd3JpdGVXaW4oaGFuZGxlLCBzLCAwKQorCisjZW5kaWYgLyogVU5JQ09ERSAqLworI2VuZGlmIC8qIEJSTEFQSV9XSU4zMiAqLworCisjaWZuZGVmIEJSTEFQSV9OT19ERVBSRUNBVEVECisvKiogXGRlZmdyb3VwIGJybGFwaV9kZXByZWNhdGVkIERlcHJlY2F0ZWQgbmFtZXMKKyAqCisgKiBXaXRoIHZlcnNpb24gMC41LjAsIEJybEFQSSBpcyBub3cgcHJvdmlkZWQgdGhyb3VnaCBpbmNsdWRpbmcgPGJybGFwaS5oPiBhbmQKKyAqIGdvdCBhIGJpZyByZW5hbWluZyBwYXNzLiBPbGQgbmFtZXMgYXJlIHN0aWxsIGF2YWlsYWJsZSB0aHJvdWdoIG1hY3JvcywgYnV0CisgKiB0aGV5IGFyZSBkZXByZWNhdGVkIHNpbmNlIHRoZXkgd2lsbCBnZXQgZHJvcHBlZCBpbiB0aGUgbmV4dCByZWxlYXNlLiBUaGlzCisgKiBkb2N1bWVudGF0aW9uIGlzIGZvciB5b3UgdG8ga25vdyB0aGUgbmV3IG5hbWVzLgorICoKKyAqIEZvciBjaGVja2luZyB0aGF0IHlvdSBoYXZlIGNvbXBsZXRlbHkgc3dpdGNoZWQgdG8gbmV3IG5hbWVzLCBqdXN0IGRlZmluZQorICogQlJMQVBJX05PX0RFUFJFQ0FURUQ6IHRoYXQgd2lsbCBkaXNhYmxlIGNvbXBhdGliaWxpdHkgbWFjcm9zLgorICoKKyAqIEB7ICovCisKKyNkZWZpbmUgYnJsYXBpX3NldHRpbmdzX3QgYnJsYXBpX2Nvbm5lY3Rpb25TZXR0aW5nc190CisKKy8qKiBicmxhcGlfd3JpdGVTdHJ1Y3QsIHJlcGxhY2VkIGJ5IGJybGFwaV93cml0ZUFyZ3VtZW50c190ICovCit0eXBlZGVmIHN0cnVjdCB7CisgIGludCBkaXNwbGF5TnVtYmVyOworICB1bnNpZ25lZCBpbnQgcmVnaW9uQmVnaW47CisgIHVuc2lnbmVkIGludCByZWdpb25TaXplOworICBjb25zdCBjaGFyICp0ZXh0OworICBpbnQgdGV4dFNpemU7CisgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmF0dHJBbmQ7CisgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmF0dHJPcjsKKyAgaW50IGN1cnNvcjsKKyAgY29uc3QgY2hhciAqY2hhcnNldDsKK30gYnJsYXBpX3dyaXRlU3RydWN0OworI2RlZmluZSBCUkxBUElfV1JJVEVTVFJVQ1RfSU5JVElBTElaRVIgQlJMQVBJX1dSSVRFQVJHVU1FTlRTX0lOSVRJQUxJWkVSCisKKyNkZWZpbmUgYnJsX2tleWNvZGVfdCBicmxhcGlfa2V5Q29kZV90CisjZGVmaW5lIGJybF90eXBlX3QgYnJsYXBpX3BhY2tldFR5cGVfdAorCisjZGVmaW5lIEJSTENPTU1BTkRTIE5VTEwKKyNkZWZpbmUgQlJMX0tFWUNPREVfTUFYIEJSTEFQSV9LRVlfTUFYCisKKyNpZm5kZWYgQlJMQVBJX05PX1NJTkdMRV9TRVNTSU9OCisjZGVmaW5lIGJybGFwaV9pbml0aWFsaXplQ29ubmVjdGlvbiBicmxhcGlfb3BlbkNvbm5lY3Rpb24KKyNkZWZpbmUgYnJsYXBpX2dldFR0eSBicmxhcGlfZW50ZXJUdHlNb2RlCisjZGVmaW5lIGJybGFwaV9nZXRUdHlQYXRoIGJybGFwaV9lbnRlclR0eU1vZGVXaXRoUGF0aAorI2RlZmluZSBicmxhcGlfbGVhdmVUdHkgYnJsYXBpX2xlYXZlVHR5TW9kZQorI2RlZmluZSBicmxhcGlfdW5pZ25vcmVLZXlSYW5nZSBicmxhcGlfYWNjZXB0S2V5UmFuZ2UKKyNkZWZpbmUgYnJsYXBpX3VuaWdub3JlS2V5U2V0IGJybGFwaV9hY2NlcHRLZXlTZXQKKyNkZWZpbmUgYnJsYXBpX2dldFJhdyBicmxhcGlfZW50ZXJSYXdNb2RlCisjZGVmaW5lIGJybGFwaV9sZWF2ZVJhdyBicmxhcGlfbGVhdmVSYXdNb2RlCisjZGVmaW5lIGJybGFwaV9zdXNwZW5kIGJybGFwaV9zdXNwZW5kRHJpdmVyCisjZGVmaW5lIGJybGFwaV9yZXN1bWUgYnJsYXBpX3Jlc3VtZURyaXZlcgorI2VuZGlmIC8qIEJSTEFQSV9OT19TSU5HTEVfU0VTU0lPTiAqLworCisjZGVmaW5lIEJSTEVSUl9TVUNDRVNTICAgICAgICAgICAgICAgICBCUkxBUElfRVJST1JfU1VDQ0VTUworI2RlZmluZSBCUkxFUlJfTk9NRU0gICAgICAgICAgICAgICAgICAgQlJMQVBJX0VSUk9SX05PTUVNCisjZGVmaW5lIEJSTEVSUl9UVFlCVVNZICAgICAgICAgICAgICAgICBCUkxBUElfRVJST1JfVFRZQlVTWQorI2RlZmluZSBCUkxFUlJfREVWSUNFQlVTWSAgICAgICAgICAgICAgQlJMQVBJX0VSUk9SX0RFVklDRUJVU1kKKyNkZWZpbmUgQlJMRVJSX1VOS05PV05fSU5TVFJVQ1RJT04gICAgIEJSTEFQSV9FUlJPUl9VTktOT1dOX0lOU1RSVUNUSU9OCisjZGVmaW5lIEJSTEVSUl9JTExFR0FMX0lOU1RSVUNUSU9OICAgICBCUkxBUElfRVJST1JfSUxMRUdBTF9JTlNUUlVDVElPTgorI2RlZmluZSBCUkxFUlJfSU5WQUxJRF9QQVJBTUVURVIgICAgICAgQlJMQVBJX0VSUk9SX0lOVkFMSURfUEFSQU1FVEVSCisjZGVmaW5lIEJSTEVSUl9JTlZBTElEX1BBQ0tFVCAgICAgICAgICBCUkxBUElfRVJST1JfSU5WQUxJRF9QQUNLRVQKKyNkZWZpbmUgQlJMRVJSX0NPTk5SRUZVU0VEICAgICAgICAgICAgIEJSTEFQSV9FUlJPUl9DT05OUkVGVVNFRAorI2RlZmluZSBCUkxFUlJfT1BOT1RTVVBQICAgICAgICAgICAgICAgQlJMQVBJX0VSUk9SX09QTk9UU1VQUAorI2RlZmluZSBCUkxFUlJfR0FJRVJSICAgICAgICAgICAgICAgICAgQlJMQVBJX0VSUk9SX0dBSUVSUgorI2RlZmluZSBCUkxFUlJfTElCQ0VSUiAgICAgICAgICAgICAgICAgQlJMQVBJX0VSUk9SX0xJQkNFUlIKKyNkZWZpbmUgQlJMRVJSX1VOS05PV05UVFkgICAgICAgICAgICAgIEJSTEFQSV9FUlJPUl9VTktOT1dOVFRZCisjZGVmaW5lIEJSTEVSUl9QUk9UT0NPTF9WRVJTSU9OICAgICAgICBCUkxBUElfRVJST1JfUFJPVE9DT0xfVkVSU0lPTgorI2RlZmluZSBCUkxFUlJfRU9GICAgICAgICAgICAgICAgICAgICAgQlJMQVBJX0VSUk9SX0VPRgorI2RlZmluZSBCUkxFUlJfRU1QVFlLRVkgICAgICAgICAgICAgICAgQlJMQVBJX0VSUk9SX0VNUFRZS0VZCisjZGVmaW5lIEJSTEVSUl9EUklWRVJFUlJPUiAgICAgICAgICAgICBCUkxBUElfRVJST1JfRFJJVkVSRVJST1IKKworLyoqIEB9ICovCisjZW5kaWYgLyogQlJMQVBJX05PX0RFUFJFQ0FURUQgKi8KKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYgLyogX19jcGx1c3BsdXMgKi8KKworI2VuZGlmIC8qIEJSTEFQSV9JTkNMVURFRCAqLwpkaWZmIC0tZ2l0IGEvUHJvZ3JhbXMvYnJsYXBpLmguaW4gYi9Qcm9ncmFtcy9icmxhcGkuaC5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYjQ5ZWQ4Ci0tLSAvZGV2L251bGwKKysrIGIvUHJvZ3JhbXMvYnJsYXBpLmguaW4KQEAgLTAsMCArMSwxNTc3IEBACisvKgorICogbGliYnJsYXBpIC0gQSBsaWJyYXJ5IHByb3ZpZGluZyBhY2Nlc3MgdG8gYnJhaWxsZSB0ZXJtaW5hbHMgZm9yIGFwcGxpY2F0aW9ucy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDItMjAyMyBieQorICogICBTYW11ZWwgVGhpYmF1bHQgPFNhbXVlbC5UaGliYXVsdEBlbnMtbHlvbi5vcmc+CisgKiAgIFPDqWJhc3RpZW4gSGluZGVyZXIgPFNlYmFzdGllbi5IaW5kZXJlckBlbnMtbHlvbi5vcmc+CisgKgorICogbGliYnJsYXBpIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKKy8qKiBcZmlsZQorICogXGJyaWVmIFR5cGVzLCBkZWZpbmVzIGFuZCBmdW5jdGlvbnMgcHJvdG90eXBlcyBmb3IgXGUgQnJsQVBJJ3MgbGlicmFyeQorICovCisKKyNpZm5kZWYgQlJMQVBJX0lOQ0xVREVECisjZGVmaW5lIEJSTEFQSV9JTkNMVURFRAorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmIC8qIF9fY3BsdXNwbHVzICovCisKKyN1bmRlZiBCUkxBUElfV0lOMzIKKworLyoqIFxkZWZncm91cCBicmxhcGlfdmVyc2lvbiBWZXJzaW9uIG9mIHRoZSBCcmxBUEkgbGlicmFyeQorICogQHsgKi8KKworLyoqIExpYnJhcnkgdmVyc2lvbi4gKi8KKyN1bmRlZiBCUkxBUElfUkVMRUFTRQorCisvKiogTGlicmFyeSBtYWpvciB2ZXJzaW9uLiAqLworI3VuZGVmIEJSTEFQSV9NQUpPUgorCisvKiogTGlicmFyeSBtaW5vciB2ZXJzaW9uLiAqLworI3VuZGVmIEJSTEFQSV9NSU5PUgorCisvKiogTGlicmFyeSByZXZpc2lvbi4gKi8KKyN1bmRlZiBCUkxBUElfUkVWSVNJT04KKworLyoqIFJldHVybnMgdGhlIHZlcnNpb24gb2YgdGhlIGxpYnJhcnkgKi8KK3ZvaWQgYnJsYXBpX2dldExpYnJhcnlWZXJzaW9uKGludCAqbWFqb3IsIGludCAqbWlub3IsIGludCAqcmV2aXNpb24pOworCisvKiogQH0gKi8KKworLyogVHlwZXMgYXJlIGRlZmluZWQgdGhlcmUgKi8KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKworI2lmZGVmIEJSTEFQSV9XSU4zMgorI2luY2x1ZGUgPHdpbmRvd3MuaD4KKyNkZWZpbmUgQlJMQVBJX1NURENBTEwgX19zdGRjYWxsCisjZWxzZSAvKiBCUkxBUElfV0lOMzIgKi8KKyNkZWZpbmUgQlJMQVBJX1NURENBTEwKKyNlbmRpZiAvKiBCUkxBUElfV0lOMzIgKi8KKworI2lmZGVmIF9NU0NfVkVSCit0eXBlZGVmIF9faW50NjQgdWludDY0X3Q7Cit0eXBlZGVmIF9faW50MzIgdWludDMyX3Q7CisjZGVmaW5lIFVJTlQ2NF9DKHgpICh4ICMjIFVpNjQpCisjZGVmaW5lIFBSSXg2NCAiSTY0eCIKK3R5cGVkZWYgc2lnbmVkIGludCBzc2l6ZV90OworI2Vsc2UgLyogX01TQ19WRVIgKi8KKworLyogdGhpcyBpcyBmb3IgdWludCpfdCAqLworI2luY2x1ZGUgPHN0ZGludC5oPgorCisvKiBOVUxMIGlzIGRlZmluZWQgdGhlcmUgKi8KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKworI2luY2x1ZGUgPGludHR5cGVzLmg+IC8qIEZvciBQUkl4NjQgKi8KKyNlbmRpZiAvKiBfTVNDX1ZFUiAqLworCisjaW5jbHVkZSA8d2NoYXIuaD4KKworLyoqIFxkZWZncm91cCBicmxhcGlfaGFuZGxlcyBCcmxBUEkgaGFuZGxlcworICoKKyAqIEVhY2ggZnVuY3Rpb24gcHJvdmlkZWQgYnkgQnJsQVBJIGNvbWVzIGluIHR3byB2ZXJzaW9ucy4KKyAqCisgKiAxLiBBIHZlcnNpb24gd2hvc2UgbmFtZSBpcyBwcmVmaXhlZCBieSBicmxhcGlfIGZvciBjbGllbnRzIG9wZW5pbmcgb25seQorICogb25lIHNpbXVsdGFuZW91cyBjb25uZWN0aW9uIHdpdGggQnJsQVBJIChtb3N0IGZyZXF1ZW4gY2FzZSkKKyAqCisgKiAyLiBBIHZlcnNpb24gd2hvc2UgbmFtZSBpcyBwcmVmaXhlZCBieSBicmxhcGlfXyBmb3IgdXNlIGJ5IGNsaWVudHMKKyAqIHdpc2hpbmcgdG8gb3BlbiBtb3JlIHRoYW4gb25lIGNvbm5lY3Rpb24gdG8gQnJsQVBJLgorICoKKyAqIEEgZnVuY3Rpb24gY2FsbGVkIGJybGFwaV9fZm9vIGlzIHVzZWQgaW4gZXhhY3RseSB0aGUgc2FtZSB3YXkgYXMgaXRzCisgKiBicmxhcGlfZm9vIGNvdW50ZXJwYXJ0LCBleGNlcHQgdGhhdCBpdCB0YWtlcyBhbiBhZGRpdGlvbmFsIGFyZ3VtZW50CisgKiAodGhlIGZpcnN0IG9uZSksIHdoaWNoIGlzIGEgaGFuZGxlIGxldHRpbmcgdGhlIGNsaWVudCByZWZlciB0byBhIGdpdmVuCisgKiBjb25uZWN0aW9uIGluIGEgc2ltaWxhciBtYW5uZXIgdG8gd2hhdCBmaWxlIGRlc2NyaXB0b3JzIGRvLgorICoKKyAqIEluIGNhc2UgeW91IHdhbnQgdG8gY2hlY2sgdGhhdCB5b3VyIGNvZGUgaXMgbm90IGVycm9uZW91c2x5IHVzaW5nIGJybGFwaV9mb28KKyAqIGZ1bmN0aW9ucywgZGVmaW5lIEJSTEFQSV9OT19TSU5HTEVfU0VTU0lPTiBiZWZvcmUgaW5jbHVkaW5nIDxicmxhcGkuaD46IHRoYXQKKyAqIHdpbGwgZGlzYWJsZSB0aGUgZGVjbGFyYXRpb24gb2YgYWxsIHNpbmdsZSBzZXNzaW9uIGZ1bmN0aW9ucy4KKyAqCisgKiBAeyAqLworCisvKiogVHlwZSBmb3IgQnJsQVBJIGhhbmxlcyAqLwordHlwZWRlZiBzdHJ1Y3QgYnJsYXBpX2hhbmRsZV90IGJybGFwaV9oYW5kbGVfdDsKKworLyoqIFJldHVybnMgdGhlIHNpemUgb2YgYW4gb2JqZWN0IG9mIHR5cGUgYnJsYXBpX2hhbmRsZV90IGluIGJ5dGVzICovCitzaXplX3QgQlJMQVBJX1NURENBTEwgYnJsYXBpX2dldEhhbmRsZVNpemUodm9pZCk7CisKKy8qKiBAfSAqLworCisvKiogXGRlZmdyb3VwIGJybGFwaV9jb25uZWN0aW9uIENvbm5lY3RpbmcgdG8gQnJsQVBJCisgKgorICogQmVmb3JlIGNhbGxpbmcgYW55IG90aGVyIGZ1bmN0aW9uIG9mIHRoZSBsaWJyYXJ5LCBjYWxsaW5nCisgKiBicmxhcGlfb3BlbkNvbm5lY3Rpb24oKSBpcyBuZWVkZWQgdG8gZXN0YWJsaXNoIGEgY29ubmVjdGlvbiB0bworICogXGUgQnJsQVBJICdzIHNlcnZlci4KKyAqIFdoZW4gdGhlIGNvbm5lY3Rpb24gaXMgbm90IG5lZWRlZCBhbnkgbW9yZSwgYnJsYXBpX2Nsb3NlQ29ubmVjdGlvbigpIG11c3QgYmUKKyAqIGNhbGxlZCB0byBjbG9zZSB0aGUgY29ubmVjdGlvbi4KKyAqCisgKiBAeyAqLworCisvKiogRGVmYXVsdCBwb3J0IG51bWJlciBvbiB3aGljaCBjb25uZWN0aW9ucyB0byBcZSBCcmxBUEkgY2FuIGJlIGVzdGFibGlzaGVkICovCisjZGVmaW5lIEJSTEFQSV9TT0NLRVRQT1JUTlVNIDQxMDEKKyNkZWZpbmUgQlJMQVBJX1NPQ0tFVFBPUlQgIjQxMDEiCisKKy8qKiBEZWZhdWx0IHVuaXggcGF0aCBvbiB3aGljaCBjb25uZWN0aW9ucyB0byBcZSBCcmxBUEkgY2FuIGJlIGVzdGFibGlzaGVkICovCisjdW5kZWYgQlJMQVBJX1NPQ0tFVFBBVEgKKworLyoqIFxlIGJybHR0eSAncyBzZXR0aW5ncyBkaXJlY3RvcnkKKyAqCisgKiBUaGlzIGlzIHdoZXJlIGF1dGhvcml6YXRpb24ga2V5IGFuZCBkcml2ZXItZGVwZW5kZW50IGtleSBuYW1lcyBhcmUgZm91bmQKKyAqIGZvciBpbnN0YW5jZS4gKi8KKyN1bmRlZiBCUkxBUElfRVRDRElSCisKKy8qKiBEZWZhdWx0IG5hbWUgb2YgdGhlIGZpbGUgY29udGFpbmluZyBcZSBCcmxBUEkgJ3MgYXV0aG9yaXphdGlvbiBrZXkKKyAqCisgKiBUaGlzIG5hbWUgaXMgcmVsYXRpdmUgdG8gQlJMQVBJX0VUQ0RJUiAqLworI3VuZGVmIEJSTEFQSV9BVVRIS0VZRklMRQorCisvKiogRGVmYXVsdCBhdXRob3JpemF0aW9uIHNldHRpbmcgKi8KKyNpZmRlZiBCUkxBUElfV0lOMzIKKy8qIE5vIGF1dGhlbnRpY2F0aW9uIGJ5IGRlZmF1bHQgb24gV2luZG93cyAqLworI2RlZmluZSBCUkxBUElfREVGQVVUSCAibm9uZSIKKyNlbHNlIC8qIEJSTEFQSV9XSU4zMiAqLworI2RlZmluZSBCUkxBUElfREVGQVVUSF9LRVlGSUxFICJrZXlmaWxlOiIgQlJMQVBJX0VUQ0RJUiAiLyIgQlJMQVBJX0FVVEhLRVlGSUxFCisKKyNpZmRlZiBIQVZFX1BPTEtJVAorI2RlZmluZSBCUkxBUElfREVGQVVUSF9QT0xLSVQgIitwb2xraXQiCisjZWxzZSAvKiBIQVZFX1BPTEtJVCAqLworI2RlZmluZSBCUkxBUElfREVGQVVUSF9QT0xLSVQgIiIKKyNlbmRpZiAvKiBIQVZFX1BPTEtJVCAqLworCisjZGVmaW5lIEJSTEFQSV9ERUZBVVRIIEJSTEFQSV9ERUZBVVRIX0tFWUZJTEUgQlJMQVBJX0RFRkFVVEhfUE9MS0lUCisjZW5kaWYgLyogQlJMQVBJX1dJTjMyICovCisKKy8qKiBPUy1kZXBlbmRlbnQgZmlsZSBkZXNjcmlwdG9yIHR5cGUKKyAqCisgKiBUaGlzIGlzIHRoZSB0eXBlIGZvciBmaWxlIGRlc2NyaXB0b3JzIHJldHVybmVkIGJ5IGJybGFwaV9vcGVuQ29ubmVjdGlvbigpIGFuZAorICogYnJsYXBpX2dldEZpbGVEZXNjcmlwdG9yKCkuCisgKi8KKyNpZmRlZiBfX01JTkdXMzJfXwordHlwZWRlZiBIQU5ETEUgYnJsYXBpX2ZpbGVEZXNjcmlwdG9yOworI2Vsc2UgLyogX19NSU5HVzMyX18gKi8KK3R5cGVkZWYgaW50IGJybGFwaV9maWxlRGVzY3JpcHRvcjsKKyNlbmRpZiAvKiBfX01JTkdXMzJfXyAqLworCisvKiogSW52YWxpZCB2YWx1ZSBmb3IgYnJsYXBpX2ZpbGVEZXNjcmlwdG9yCisgKgorICogVGhpcyBpcyByZXR1cm5lZCBieSBicmxhcGlfZ2V0RmlsZURlc2NyaXB0b3IoKSB3aGVuIHRoZSBjb25uZWN0aW9uIGlzIGNsb3NlZC4KKyAqLworI2lmZGVmIF9fTUlOR1czMl9fCisjZGVmaW5lIEJSTEFQSV9JTlZBTElEX0ZJTEVfREVTQ1JJUFRPUiBJTlZBTElEX0hBTkRMRV9WQUxVRQorI2Vsc2UgLyogX19NSU5HVzMyX18gKi8KKyNkZWZpbmUgQlJMQVBJX0lOVkFMSURfRklMRV9ERVNDUklQVE9SIC0xCisjZW5kaWYgLyogX19NSU5HVzMyX18gKi8KKworLyoqIFxicmllZiBTZXR0aW5ncyBzdHJ1Y3R1cmUgZm9yIFxlIEJybEFQSSBjb25uZWN0aW9uCisgKgorICogVGhpcyBzdHJ1Y3R1cmUgaG9sZHMgZXZlcnkgcGFyYW1ldGVyIG5lZWRlZCB0byBjb25uZWN0IHRvIFxlIEJybEFQSTogd2hpY2gKKyAqIGZpbGUgdGhlIGF1dGhvcml6YXRpb24ga2V5IGNhbiBiZSBmb3VuZCBpbiBhbmQgd2hpY2ggY29tcHV0ZXIgdG8gY29ubmVjdCB0by4KKyAqCisgKiBccGFyIEV4YW1wbGVzOgorICogXGNvZGUKKyAqIGJybGFwaV9jb25uZWN0aW9uU2V0dGluZ3NfdCBzZXR0aW5nczsKKyAqCisgKiBzZXR0aW5ncy5hdXRoPSIvZXRjL2JybGFwaS5rZXkiOworICogc2V0dGluZ3MuaG9zdD0iZm9vIjsKKyAqIFxlbmRjb2RlCisgKgorICogXGUgbGliYnJsYXBpIHdpbGwgcmVhZCBhdXRob3JpemF0aW9uIGtleSBmcm9tIGZpbGUgXHAgL2V0Yy9icmxhcGkua2V5CisgKiBhbmQgY29ubmVjdCB0byB0aGUgbWFjaGluZSBjYWxsZWQgImZvbyIsIG9uIHRoZSBkZWZhdWx0IFRDUCBwb3J0LgorICoKKyAqIFxjb2RlCisgKiBzZXR0aW5ncy5ob3N0PSIxMC4xLjAuMiI7CisgKiBcZW5kY29kZQorICoKKyAqIGxldHMgZGlyZWN0bHkgZW50ZXIgYW4gSVAgYWRkcmVzcyBpbnN0ZWFkIG9mIGEgbWFjaGluZSBuYW1lLgorICoKKyAqIFxjb2RlCisgKiBzZXR0aW5ncy5ob3N0PSI6MSI7CisgKiBcZW5kY29kZQorICoKKyAqIGxldHMgXGUgbGliYnJsYXBpIGNvbm5lY3QgdG8gdGhlIGxvY2FsIGNvbXB1dGVyLCBvbiBwb3J0IEJSTEFQSV9TT0NLRVRQT1JUTlVNKzEKKyAqCisgKiBcc2EgYnJsYXBpX29wZW5Db25uZWN0aW9uKCkKKyAqLwordHlwZWRlZiBzdHJ1Y3QgeworICAvKiogRm9yIHNlY3VyaXR5IHJlYXNvbnMsIFxlIGxpYmJybGFwaSBoYXMgdG8gZ2V0IGF1dGhvcml6ZWQgdG8gY29ubmVjdCB0byB0aGUKKyAgICogXGUgQnJsQVBJIHNlcnZlci4gVGhpcyBjYW4gYmUgZG9uZSB2aWEgYSBzZWNyZXQga2V5LCBmb3IgaW5zdGFuY2UuIFRoaXMgaXMKKyAgICogdGhlIHBhdGggdG8gdGhlIGZpbGUgd2hpY2ggaG9sZHMgaXQ7IGl0IHdpbGwgaGVuY2UgaGF2ZSB0byBiZSByZWFkYWJsZSBieQorICAgKiB0aGUgYXBwbGljYXRpb24uCisgICAqCisgICAqIFNldHRpbmcgXGMgTlVMTCBkZWZhdWx0cyBpdCB0byBsb2NhbCBpbnN0YWxsYXRpb24gc2V0dXAgb3IgdG8gdGhlIGNvbnRlbnQKKyAgICogb2YgdGhlIEJSTEFQSV9BVVRIIGVudmlyb25tZW50IHZhcmlhYmxlLCBpZiBpdCBleGlzdHMuICovCisgIGNvbnN0IGNoYXIgKmF1dGg7CisKKyAgLyoqIFRoaXMgdGVsbHMgd2hlcmUgdGhlIFxlIEJybEFQSSBzZXJ2ZXIgcmVzaWRlczogaXQgbWlnaHQgYmUgbGlzdGVuaW5nIG9uCisgICAqIGFub3RoZXIgY29tcHV0ZXIsIG9uIGFueSBUQ1AgcG9ydC4gSXQgc2hvdWxkIGxvb2sgbGlrZSAiZm9vOjEiLCB3aGljaAorICAgKiBtZWFucyBUQ1AgcG9ydCBudW1iZXIgQlJMQVBJX1NPQ0tFVFBPUlROVU0rMSBvbiBjb21wdXRlciBjYWxsZWQgImZvbyIuCisgICAqIFxub3RlIFBsZWFzZSBjaGVjayB0aGF0IHJlc29sdmluZyB0aGlzIG5hbWUgd29ya3MgYmVmb3JlIGNvbXBsYWluaW5nCisgICAqCisgICAqIFNldHRpbmdzIFxjIE5VTEwgZGVmYXVsdHMgaXQgdG8gbG9jYWxob3N0LCB1c2luZyB0aGUgbG9jYWwgaW5zdGFsbGF0aW9uJ3MKKyAgICogZGVmYXVsdCBUQ1AgcG9ydCwgb3IgdG8gdGhlIGNvbnRlbnQgb2YgdGhlIEJSTEFQSV9IT1NUIGVudmlyb25tZW50CisgICAqIHZhcmlhYmxlLCBpZiBpdCBleGlzdHMuICovCisgIGNvbnN0IGNoYXIgKmhvc3Q7Cit9IGJybGFwaV9jb25uZWN0aW9uU2V0dGluZ3NfdDsKKworLyogQlJMQVBJX1NFVFRJTkdTX0lOSVRJQUxJWkVSICovCisvKiogQWxsb3dzIHRvIGluaXRpYWxpemUgYSBzdHJ1Y3R1cmUgb2YgdHlwZSBcZSBicmxhcGlfY29ubmVjdGlvblNldHRpbmdzX3QgKgorICogd2l0aCBkZWZhdWx0IHZhbHVlcy4gKi8KKyNkZWZpbmUgQlJMQVBJX1NFVFRJTkdTX0lOSVRJQUxJWkVSIHsgTlVMTCwgTlVMTCB9CisKKy8qIGJybGFwaV9vcGVuQ29ubmVjdGlvbiAqLworLyoqIE9wZW4gYSBzb2NrZXQgYW5kIGNvbm5lY3QgaXQgdG8gXGUgQnJsQVBJICdzIHNlcnZlcgorICoKKyAqIFRoaXMgZnVuY3Rpb24gZmlyc3QgbG9hZHMgYW4gYXV0aG9yaXphdGlvbiBrZXkgYXMgc3BlY2lmaWVkIGluIHNldHRpbmdzLgorICogSXQgdGhlbiBjcmVhdGVzIGEgVENQIHNvY2tldCBhbmQgY29ubmVjdHMgaXQgdG8gdGhlIHNwZWNpZmllZCBtYWNoaW5lLCBvbgorICogdGhlIHNwZWNpZmllZCBwb3J0LiBJdCB3cml0ZXMgdGhlIGF1dGhvcml6YXRpb24ga2V5IG9uIHRoZSBzb2NrZXQgYW5kCisgKiB3YWl0cyBmb3IgYWNrbm93bGVkZ2VtZW50LgorICoKKyAqIFxyZXR1cm4gdGhlIGZpbGUgZGVzY3JpcHRvciwgb3IgQlJMQVBJX0lOVkFMSURfRklMRV9ERVNDUklQVE9SIG9uIGVycm9yCisgKgorICogXG5vdGUgVGhlIGZpbGUgZGVzY3JpcHRvciBpcyByZXR1cm5lZCBpbiBjYXNlIHRoZSBjbGllbnQgd2FudHMgdG8KKyAqIGNvbW11bmljYXRlIHdpdGggdGhlIHNlcnZlciB3aXRob3V0IHVzaW5nIFxlIGxpYmJybGFwaSBmdW5jdGlvbnMuIElmIGl0IHVzZXMKKyAqIHRoZW0gaG93ZXZlciwgaXQgd29uJ3QgaGF2ZSB0byBwYXNzIHRoZSBmaWxlIGRlc2NyaXB0b3IgbGF0ZXIsIHNpbmNlIHRoZQorICogbGlicmFyeSBrZWVwcyBhIGNvcHkgb2YgaXQuIEJ1dCB0aGF0IGFsc28gbWVhbnMgdGhhdAorICogYnJsYXBpX29wZW5Db25uZWN0aW9uKCkgbWF5IGJlIGNhbGxlZCBzZXZlcmFsIHRpbWVzLCBidXQgXGUgbGliYnJsYXBpCisgKiBmdW5jdGlvbnMgd2lsbCBhbHdheXMgd29yayB3aXRoIHRoZSBsYXN0IGNhbGwncyBkZXNjcmlwdG9yCisgKgorICogXHBhciBFeGFtcGxlOgorICogXGNvZGUKKyAqIGlmIChicmxhcGlfb3BlbkNvbm5lY3Rpb24oJnNldHRpbmdzLCZzZXR0aW5ncyk8MCkgeworICogIGZwcmludGYoc3RkZXJyLCJjb3VsZG4ndCBjb25uZWN0IHRvIEJybEFQSSBhdCAlczogJXNcbiIsCisgKiAgIHNldHRpbmdzLmhvc3QsIGJybGFwaV9zdHJlcnJvcigmYnJsYXBpX2Vycm9yKSk7CisgKiAgZXhpdCgxKTsKKyAqIH0KKyAqIFxlbmRjb2RlCisgKgorICogXHBhciBFcnJvcnM6CisgKiBcZSBCcmxBUEkgbWlnaHQgbm90IGJlIG9uIHRoaXMgVENQIHBvcnQsIHRoZSBob3N0IG5hbWUgbWlnaHQgbm90IGJlCisgKiByZXNvbHZhYmxlLCB0aGUgYXV0aG9yaXphdGlvbiBtYXkgZmFpbCwuLi4KKyAqCisgKiBccGFyYW0gZGVzaXJlZFNldHRpbmdzIHRoaXMgZ2l2ZXMgdGhlIGRlc2lyZWQgY29ubmVjdGlvbiBwYXJhbWV0ZXJzLCBhcyBkZXNjcmliZWQKKyAqIGluIGJybGFwaV9jb25uZWN0aW9uU2V0dGluZ3NfdC4gSWYgXGMgTlVMTCwgZGVmYXVsdHMgdmFsdWVzIGFyZSB1c2VkLCBzbyB0aGF0IGl0IGlzCisgKiBnZW5lcmFsbHkgYSBnb29kIGlkZWEgdG8gZ2l2ZSBcYyBOVUxMIGFzIGRlZmF1bHQsIGFuZCBvbmx5IGZpbGwgYQorICogYnJsYXBpX2Nvbm5lY3Rpb25TZXR0aW5nc190IHN0cnVjdHVyZSB3aGVuIHRoZSB1c2VyIGdhdmUgcGFyYW1ldGVycyB0byB0aGUgcHJvZ3JhbQorICogZm9yIGluc3RhbmNlOworICogXHBhcmFtIGFjdHVhbFNldHRpbmdzIGlmIG5vdCBcYyBOVUxMLCBwYXJhbWV0ZXJzIHdoaWNoIHdlcmUgYWN0dWFsbHkgdXNlZCBhcmUKKyAqIHN0b3JlZCBoZXJlLCBpZiB0aGUgYXBwbGljYXRpb24gZXZlciBuZWVkcyB0aGVtLiBTaW5jZSB0aGV5IGFyZSBjb25zdGFudAorICogc3RyaW5ncywgb3IgY29tZSBmcm9tIGEgZ2V0ZW52IGNhbGwsIHRoZXNlIG11c3Qgbm90IGJlIGZyZWVkIGJ5IHRoZQorICogYXBwbGljYXRpb24uCisgKgorICogXHNhCisgKiBicmxhcGlfY29ubmVjdGlvblNldHRpbmdzX3QKKyAqIGJybGFwaV93cml0ZVBhY2tldCgpCisgKiBicmxhcGlfcmVhZFBhY2tldEhlYWRlcigpCisgKiBicmxhcGlfcmVhZFBhY2tldENvbnRlbnQoKQorICogYnJsYXBpX3JlYWRQYWNrZXQoKQorICovCisjaWZuZGVmIEJSTEFQSV9OT19TSU5HTEVfU0VTU0lPTgorYnJsYXBpX2ZpbGVEZXNjcmlwdG9yIEJSTEFQSV9TVERDQUxMIGJybGFwaV9vcGVuQ29ubmVjdGlvbihjb25zdCBicmxhcGlfY29ubmVjdGlvblNldHRpbmdzX3QgKmRlc2lyZWRTZXR0aW5ncywgYnJsYXBpX2Nvbm5lY3Rpb25TZXR0aW5nc190ICphY3R1YWxTZXR0aW5ncyk7CisjZW5kaWYgLyogQlJMQVBJX05PX1NJTkdMRV9TRVNTSU9OICovCiticmxhcGlfZmlsZURlc2NyaXB0b3IgQlJMQVBJX1NURENBTEwgYnJsYXBpX19vcGVuQ29ubmVjdGlvbihicmxhcGlfaGFuZGxlX3QgKmhhbmRsZSwgY29uc3QgYnJsYXBpX2Nvbm5lY3Rpb25TZXR0aW5nc190ICpkZXNpcmVkU2V0dGluZ3MsIGJybGFwaV9jb25uZWN0aW9uU2V0dGluZ3NfdCAqYWN0dWFsU2V0dGluZ3MpOworCisvKiBicmxhcGlfZmlsZURlc2NyaXB0b3IgKi8KKy8qKiBSZXR1cm4gdGhlIGZpbGUgZGVzY3JpcHRvciB1c2VkIGJ5IHRoZSBCcmxBUEkgY29ubmVjdGlvbgorICoKKyAqIFRoaXMgYWxsb3dzIHRvIHVzZSBpdCB3aXRoIFxjIHNlbGVjdCgpLCBcYyBnX2lvX2FkZF93YXRjaCgpLCBcYworICogWHRBcHBBZGRJbnB1dCgpLCBldGMuCisgKgorICogQlJMQVBJX0lOVkFMSURfRklMRV9ERVNDUklQVE9SIGlzIHJldHVybmVkIHdoZW4gdGhlIGNvbm5lY3Rpb24gd2FzIGNsb3NlZC4KKyAqLworI2lmbmRlZiBCUkxBUElfTk9fU0lOR0xFX1NFU1NJT04KK2JybGFwaV9maWxlRGVzY3JpcHRvciBCUkxBUElfU1REQ0FMTCBicmxhcGlfZ2V0RmlsZURlc2NyaXB0b3Iodm9pZCk7CisjZW5kaWYgLyogQlJMQVBJX05PX1NJTkdMRV9TRVNTSU9OICovCiticmxhcGlfZmlsZURlc2NyaXB0b3IgQlJMQVBJX1NURENBTEwgYnJsYXBpX19nZXRGaWxlRGVzY3JpcHRvcihicmxhcGlfaGFuZGxlX3QgKmhhbmRsZSk7CisKKworLyogYnJsYXBpX2Nsb3NlQ29ubmVjdGlvbiAqLworLyoqIENsZWFubHkgY2xvc2UgdGhlIHNvY2tldAorICoKKyAqIFRoaXMgZnVuY3Rpb24gbG9ja3MgdW50aWwgYSBjbG9zaW5nIGFja25vd2xlZGdlbWVudCBpcyByZWNlaXZlZCBmcm9tIHRoZQorICogc2VydmVyLiBUaGUgc29ja2V0IGlzIHRoZW4gZnJlZWQsIHNvIHRoZSBmaWxlIGRlc2NyaXB0b3IKKyAqIGJybGFwaV9vcGVuQ29ubmVjdGlvbigpIGdhdmUgaGFzIG5vIG1lYW5pbmcgYW55IG1vcmUKKyAqLworI2lmbmRlZiBCUkxBUElfTk9fU0lOR0xFX1NFU1NJT04KK3ZvaWQgQlJMQVBJX1NURENBTEwgYnJsYXBpX2Nsb3NlQ29ubmVjdGlvbih2b2lkKTsKKyNlbmRpZiAvKiBCUkxBUElfTk9fU0lOR0xFX1NFU1NJT04gKi8KK3ZvaWQgQlJMQVBJX1NURENBTEwgYnJsYXBpX19jbG9zZUNvbm5lY3Rpb24oYnJsYXBpX2hhbmRsZV90ICpoYW5kbGUpOworCisvKiogQH0gKi8KKworLyoqIFxkZWZncm91cCBicmxhcGlfY2xpZW50RGF0YSBTZXR0aW5nIGFuZCBnZXR0aW5nIGNsaWVudCBkYXRhCisgKgorICogQ2xpZW50cyBjYW4gcmVnaXN0ZXIgYSBwb2ludGVyIHRvIGRhdGEgdGhhdCBjYW4gdGhlbiBiZSB1c2VkCisgKiBlLmcuIGluIGV4Y2VwdGlvbiBoYW5kbGVycy4KKyAqIEB7ICovCisKKy8qIGJybGFwaV9fc2V0Q2xpZW50RGF0YSAqLworLyoqIFJlZ2lzdGVyIGEgcG9pbnRlciB0byBjbGllbnQgZGF0YQorICoKKyAqIFxwYXJhbSBkYXRhIFRoZSBwb2ludGVyIHRvIHRoZSBwcml2YXRlIGNsaWVudCBkYXRhCisgKi8KKyNpZm5kZWYgQlJMQVBJX05PX1NJTkdMRV9TRVNTSU9OCit2b2lkIEJSTEFQSV9TVERDQUxMIGJybGFwaV9zZXRDbGllbnREYXRhKHZvaWQgKmRhdGEpOworI2VuZGlmIC8qIEJSTEFQSV9OT19TSU5HTEVfU0VTU0lPTiAqLwordm9pZCBCUkxBUElfU1REQ0FMTCBicmxhcGlfX3NldENsaWVudERhdGEoYnJsYXBpX2hhbmRsZV90ICpoYW5kbGUsIHZvaWQgKmRhdGEpOworCisvKiBicmxhcGlfX2dldENsaWVudERhdGEgKi8KKy8qKiBSZXRyaWV2ZXMgdGhlIHBvaW50ZXIgdG8gdGhlIHByaXZhdGUgY2xpZW50IGRhdGEKKyAqCisgKiBccmV0dXJuIHRoZSBwb2ludGVyIHRvIHRoZSBwcml2YXRlIGNsaWVudCBkYXRhCisgKi8KKyNpZm5kZWYgQlJMQVBJX05PX1NJTkdMRV9TRVNTSU9OCit2b2lkICogQlJMQVBJX1NURENBTEwgYnJsYXBpX2dldENsaWVudERhdGEodm9pZCk7CisjZW5kaWYgLyogQlJMQVBJX05PX1NJTkdMRV9TRVNTSU9OICovCit2b2lkICogQlJMQVBJX1NURENBTEwgYnJsYXBpX19nZXRDbGllbnREYXRhKGJybGFwaV9oYW5kbGVfdCAqaGFuZGxlKTsKKworLyoqIEB9ICovCisKKy8qKiBcZGVmZ3JvdXAgYnJsYXBpX2luZm8gR2V0dGluZyBUZXJtaW5hbCBpbmZvcm1hdGlvbgorICogXGJyaWVmIEhvdyB0byBnZXQgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGNvbm5lY3RlZCBUZXJtaW5hbAorICoKKyAqIEJlZm9yZSB1c2luZyBSYXcgbW9kZSBvciBrZXkgY29kZXMsIHRoZSBhcHBsaWNhdGlvbiBzaG91bGQgYWx3YXlzIGNoZWNrIHRoZQorICogdHlwZSBvZiB0aGUgY29ubmVjdGVkIHRlcm1pbmFsLCB0byBiZSBzdXJlIGl0IGlzIHJlYWxseSB0aGUgb25lIGl0IGV4cGVjdHMuCisgKgorICogT25lIHNob3VsZCBhbHNvIGNoZWNrIGZvciBkaXNwbGF5IHNpemUsIHNvIGFzIHRvIGFkanVzdCBmdXJ0aGVyIGRpc3BsYXlpbmcKKyAqIG9uIGl0LgorICogQHsKKyAqLworCisvKiogTWF4aW11bSBuYW1lIGxlbmd0aCBmb3IgZHJpdmVyIG5hbWVzIGVtYmVkZWQgaW4gQnJsQVBJIHBhY2tldHMsIG5vdCBjb3VudGluZworICogYW55IHRlcm1pbmF0aW9uIFxcMCBjaGFyYWN0ZXIgKi8KKyNkZWZpbmUgQlJMQVBJX01BWE5BTUVMRU5HVEggMzEKKworLyogYnJsYXBpX2dldERyaXZlck5hbWUgKi8KKy8qKiBSZXR1cm4gdGhlIGNvbXBsZXRlIG5hbWUgb2YgdGhlIGRyaXZlciB1c2VkIGJ5IFxlIGJybHR0eQorICoKKyAqIFRoaXMgZnVuY3Rpb24gZmlsbHMgaXRzIGFyZ3VtZW50IHdpdGggdGhlIHdob2xlIG5hbWUgb2YgdGhlIGJyYWlsbGUKKyAqIGRyaXZlciBpZiBhdmFpbGFibGUsIHRlcm1pbmF0ZWQgd2l0aCBhICdcXDAnLgorICoKKyAqIFxwYXJhbSBidWZmZXIgaXMgdGhlIGJ1ZmZlciBwcm92aWRlZCBieSB0aGUgYXBwbGljYXRpb247CisgKiBccGFyYW0gc2l6ZSBpcyB0aGUgbWF4aW11bSBzaXplIGZvciB0aGUgbmFtZSBidWZmZXIuCisgKgorICogXHJldHVybiAtMSBvbiBlcnJvciwgb3RoZXJ3aXNlIGEgcG9zaXRpdmUgdmFsdWUgZ2l2aW5nIHRoZSBzaXplIG9mIHRoZSBuZWVkZWQKKyAqIGJ1ZmZlciAoaW5jbHVkaW5nICdcXDAnKS4gSWYgdGhhdCB2YWx1ZSBpcyBiaWdnZXIgdGhhbiBccCBzaXplLCB0aGUgdmFsdWUgd2FzCisgKiB0cnVuY2F0ZWQgYW5kIHRoZSBjYWxsZXIgc2hvdWxkIHJldHJ5IHdpdGggYSBiaWdnZXIgYnVmZmVyIGFjY29yZGluZ2x5LgorICovCisjaWZuZGVmIEJSTEFQSV9OT19TSU5HTEVfU0VTU0lPTgoraW50IEJSTEFQSV9TVERDQUxMIGJybGFwaV9nZXREcml2ZXJOYW1lKGNoYXIgKmJ1ZmZlciwgc2l6ZV90IHNpemUpOworI2VuZGlmIC8qIEJSTEFQSV9OT19TSU5HTEVfU0VTU0lPTiAqLworaW50IEJSTEFQSV9TVERDQUxMIGJybGFwaV9fZ2V0RHJpdmVyTmFtZShicmxhcGlfaGFuZGxlX3QgKmhhbmRsZSwgY2hhciAqYnVmZmVyLCBzaXplX3Qgc2l6ZSk7CisKKy8qIGJybGFwaV9nZXRNb2RlbElkZW50aWZpZXIgKi8KKy8qKiBSZXR1cm4gYW4gaWRlbnRpZmllciBmb3IgdGhlIGRldmljZSBtb2RlbCB1c2VkIGJ5IFxlIGJybHR0eQorICoKKyAqIFRoaXMgZnVuY3Rpb24gZmlsbHMgaXRzIGFyZ3VtZW50IHdpdGggdGhlIHdob2xlIGlkZW50aWZpZXIgb2YgdGhlIGJyYWlsbGUKKyAqIGRldmljZSBtb2RlbCBpZiBhdmFpbGFibGUsIHRlcm1pbmF0ZWQgd2l0aCBhICdcXDAnLgorICoKKyAqIFxwYXJhbSBidWZmZXIgaXMgdGhlIGJ1ZmZlciBnaXZlbiBieSB0aGUgYXBwbGljYXRpb247CisgKiBccGFyYW0gc2l6ZSBpcyB0aGUgbWF4aW11bSBzaXplIGZvciB0aGUgaWRlbnRpZmllciBidWZmZXIuCisgKgorICogXHJldHVybiAtMSBvbiBlcnJvciwgb3RoZXJ3aXNlIGEgcG9zaXRpdmUgdmFsdWUgZ2l2aW5nIHRoZSBzaXplIG9mIHRoZSBuZWVkZWQKKyAqIGJ1ZmZlciAoaW5jbHVkaW5nICdcXDAnKS4gSWYgdGhhdCB2YWx1ZSBpcyBiaWdnZXIgdGhhbiBccCBzaXplLCB0aGUgdmFsdWUgd2FzCisgKiB0cnVuY2F0ZWQgYW5kIHRoZSBjYWxsZXIgc2hvdWxkIHJldHJ5IHdpdGggYSBiaWdnZXIgYnVmZmVyIGFjY29yZGluZ2x5LgorICovCisjaWZuZGVmIEJSTEFQSV9OT19TSU5HTEVfU0VTU0lPTgoraW50IEJSTEFQSV9TVERDQUxMIGJybGFwaV9nZXRNb2RlbElkZW50aWZpZXIoY2hhciAqYnVmZmVyLCBzaXplX3Qgc2l6ZSk7CisjZW5kaWYgLyogQlJMQVBJX05PX1NJTkdMRV9TRVNTSU9OICovCitpbnQgQlJMQVBJX1NURENBTEwgYnJsYXBpX19nZXRNb2RlbElkZW50aWZpZXIoYnJsYXBpX2hhbmRsZV90ICpoYW5kbGUsIGNoYXIgKmJ1ZmZlciwgc2l6ZV90IHNpemUpOworCisvKiBicmxhcGlfZ2V0RGlzcGxheVNpemUgKi8KKy8qKiBSZXR1cm4gdGhlIHNpemUgb2YgdGhlIGJyYWlsbGUgZGlzcGxheSAqLworI2lmbmRlZiBCUkxBUElfTk9fU0lOR0xFX1NFU1NJT04KK2ludCBCUkxBUElfU1REQ0FMTCBicmxhcGlfZ2V0RGlzcGxheVNpemUodW5zaWduZWQgaW50ICp4LCB1bnNpZ25lZCBpbnQgKnkpOworI2VuZGlmIC8qIEJSTEFQSV9OT19TSU5HTEVfU0VTU0lPTiAqLworaW50IEJSTEFQSV9TVERDQUxMIGJybGFwaV9fZ2V0RGlzcGxheVNpemUoYnJsYXBpX2hhbmRsZV90ICpoYW5kbGUsIHVuc2lnbmVkIGludCAqeCwgdW5zaWduZWQgaW50ICp5KTsKKworLyoqIEB9ICovCisKKy8qKiBcZGVmZ3JvdXAgYnJsYXBpX3R0eSBFbnRlcmluZyAmIGxlYXZpbmcgdHR5IG1vZGUKKyAqIFxicmllZiBIb3cgdG8gdGFrZSBjb250cm9sIG9mIHR0eXMgZm9yIGRpcmVjdCBicmFpbGxlIGRpc3BsYXkgLyByZWFkCisgKgorICogQmVmb3JlIGJlaW5nIGFibGUgdG8gd3JpdGUgb24gdGhlIGJyYWlsbGUgZGlzcGxheSwgdGhlIGFwcGxpY2F0aW9uIG11c3QgdGVsbAorICogdGhlIHNlcnZlciB3aGljaCB0dHkgaXQgd2lsbCBoYW5kbGUuCisgKgorICogVGhlIGFwcGxpY2F0aW9uIG11c3QgYWxzbyBzcGVjaWZ5IGhvdyBicmFpbGxlIGtleXMgd2lsbCBiZSBkZWxpdmVyZWQgdG8gaXQuCisgKiBUd28gd2F5cyBhcmUgcG9zc2libGU6CisgKgorICogLSBkcml2ZXItc3BlY2lmaWMga2V5Y29kZXM6IGFwcGxpY2F0aW9ucyB3aWxsIGdldCB2YWx1ZXMgc3BlY2lmaWMgdG8gZWFjaCBicmFpbGxlIGRyaXZlciwgc2luY2UgdGhlIGtleWNvZGUsIGFzCisgKiAgIGRlZmluZWQgaW4gdGhlIGRyaXZlciB3aWxsIGJlIGdpdmVuIGZvciBlYWNoIGtleSBldmVudCAocHJlc3Mgb3IgcmVsZWFzZSkuCisgKiAgIFVzaW5nIHRoZW0gbGVhZHMgdG8gYnVpbGRpbmcgaGlnaGx5IGRyaXZlci1kZXBlbmRlbnQgYXBwbGljYXRpb25zLCB3aGljaAorICogICBjYW4geWV0IHNvbWV0aW1lcyBiZSB1c2VmdWwgdG8gbWltaWMgZXhpc3RpbmcgcHJvcHJpZXRhcnkgYXBwbGljYXRpb25zCisgKiAgIGZvciBpbnN0YW5jZS4KKyAqIC0gY29tbWFuZHM6IGFwcGxpY2F0aW9ucyB3aWxsIGdldCBleGFjdGx5IHRoZSBzYW1lIHZhbHVlcyBhcworICogICBcZSBicmx0dHkuIFRoaXMgYWxsb3dzIGRyaXZlci1pbmRlcGVuZGVudCBjbGllbnRzLCB3aGljaCB3aWxsIGhvcGVmdWxseQorICogICBiZSBuaWNlIHRvIHVzZSB3aXRoIGEgbG90IG9mIGRpZmZlcmVudCB0ZXJtaW5hbHMuCisgKiBcc2EgYnJsYXBpX3JlYWRLZXkoKQorICogQHsKKyAqLworCisvKiBicmxhcGlfZW50ZXJUdHlNb2RlICovCisvKiogQXNrIGZvciBzb21lIHR0eSwgd2l0aCBzb21lIGtleSBtZWNoYW5pc20KKyAqCisgKiBccGFyYW0gdHR5CisgKiAtIElmIHR0eT49MCB0aGVuIHRha2UgY29udHJvbCBvZiB0aGUgc3BlY2lmaWVkIHR0eS4KKyAqIC0gSWYgdHR5PT06OkJSTEFQSV9UVFlfREVGQVVMVCB0aGVuIHRha2UgY29udHJvbCBvZiB0aGUgZGVmYXVsdCB0dHkuCisgKgorICogXHBhcmFtIGRyaXZlciB0ZWxscyBob3cgdGhlIGFwcGxpY2F0aW9uIHdhbnRzIGJybGFwaV9yZWFkS2V5KCkgdG8gcmV0dXJuCisgKiBrZXkgcHJlc3Nlcy4gTlVMTCBvciAiIiBtZWFucyBCUkxUVFkgY29tbWFuZHMgYXJlIHJlcXVpcmVkLAorICogd2hlcmVhcyBhIGRyaXZlciBuYW1lIG1lYW5zIHRoYXQgZHJpdmVyLXNwZWNpZmljIGtleWNvZGVzIGFyZSBleHBlY3RlZC4KKyAqCisgKiBccmV0dXJuIHRoZSB1c2VkIHR0eSBudW1iZXIgb24gc3VjY2VzcywgLTEgb24gZXJyb3IKKyAqCisgKiBXSU5ET1dQQVRIIGFuZCBXSU5ET1dJRCBzaG91bGQgYmUgcHJvcGFnYXRlZCB3aGVuIHJ1bm5pbmcgcmVtb3RlIGFwcGxpY2F0aW9ucworICogdmlhIHNzaCwgZm9yIGluc3RhbmNlLCBhbG9uZyB3aXRoIEJSTEFQSV9IT1NUIGFuZCB0aGUgYXV0aG9yaXphdGlvbiBrZXkgKHNlZQorICogU2VuZEVudiBpbiBzc2hfY29uZmlnKDUpIGFuZCBBY2NlcHRFbnYgaW4gc3NoZF9jb25maWcoNSkpCisgKgorICogT25jZSBicmxhcGlfZW50ZXJUdHlNb2RlKCkgaXMgY2FsbGVkLCBicmxhcGlfbGVhdmVUdHlNb2RlKCkgaGFzIHRvIGJlIGNhbGxlZAorICogYmVmb3JlIGNhbGxpbmcgYnJsYXBpX2VudGVyVHR5TW9kZSgpIGFnYWluLgorICoKKyAqIFRPRE86IGRvY3VtZW50IHdoaWNoIGZ1bmN0aW9ucyB3b3JrIGluIFRUWSBtb2RlIG9ubHkuCisgKgorICogXHNhIGJybGFwaV9sZWF2ZVR0eU1vZGUoKSBicmxhcGlfcmVhZEtleSgpCisgKi8KKyNpZm5kZWYgQlJMQVBJX05PX1NJTkdMRV9TRVNTSU9OCitpbnQgQlJMQVBJX1NURENBTEwgYnJsYXBpX2VudGVyVHR5TW9kZShpbnQgdHR5LCBjb25zdCBjaGFyICpkcml2ZXIpOworI2VuZGlmIC8qIEJSTEFQSV9OT19TSU5HTEVfU0VTU0lPTiAqLworaW50IEJSTEFQSV9TVERDQUxMIGJybGFwaV9fZW50ZXJUdHlNb2RlKGJybGFwaV9oYW5kbGVfdCAqaGFuZGxlLCBpbnQgdHR5LCBjb25zdCBjaGFyICpkcml2ZXIpOworCisvKiogU2VsZWN0IHRoZSBkZWZhdWx0IHR0eS4KKyAqCisgKiBUaGUgbGlicmFyeSB0YWtlcyB0aGUgZm9sbG93aW5nIHN0ZXBzOgorICogLSMgVHJ5IHRvIGdldCB0aGUgdHR5IG51bWJlciBmcm9tIHRoZSBcYyBXSU5ET1dJRCBlbnZpcm9ubWVudCB2YXJpYWJsZSAoZm9yIHRoZSBcYyB4dGVybSBjYXNlKS4KKyAqIC0jIFRyeSB0byBnZXQgdGhlIHR0eSBudW1iZXIgZnJvbSB0aGUgXGMgQ09OVFJPTFZUIGVudmlyb25tZW50IHZhcmlhYmxlLgorICogLSMgUmVhZCBcYyAvcHJvYy9zZWxmL3N0YXQgKG9uIFxjIExpbnV4KS4KKyAqCisgKiBcc2EgYnJsYXBpX2VudGVyVHR5TW9kZSgpCisgKi8KKyNkZWZpbmUgQlJMQVBJX1RUWV9ERUZBVUxUIC0xCisKKy8qIGJybGFwaV9lbnRlclR0eU1vZGVXaXRoUGF0aCAqLworLyoqIEFzayBmb3Igc29tZSB0dHkgc3BlY2lmaWVkIGJ5IGl0cyBwYXRoIGluIHRoZSB0dHkgdHJlZSwgd2l0aCBzb21lIGtleSBtZWNoYW5pc20KKyAqCisgKiBccGFyYW0gdHR5cyBwb2ludHMgb24gdGhlIGFycmF5IG9mIHR0eXMgcmVwcmVzZW50aW5nIHRoZSB0dHkgcGF0aCB0byBiZSBnb3QuCisgKiBDYW4gYmUgTlVMTCBpZiBudHR5cyBpcyAwLgorICogXHBhcmFtIGNvdW50IGdpdmVzIHRoZSBudW1iZXIgb2YgZWxlbWVudHMgaW4gdHR5cy4KKyAqIFxwYXJhbSBkcml2ZXIgaGFzIHRoZSBzYW1lIG1lYW5pbmcgYXMgaW4gYnJsYXBpX2VudGVyVHR5TW9kZSgpCisgKgorICogUHJvdmlkaW5nIG50dHlzID09IDAgbWVhbnMgdG8gZ2V0IHRoZSByb290LCB3aGljaCBpcyB1c3VhbGx5IHdoYXQgYSBzY3JlZW4KKyAqIHJlYWRlcnMgd2FudHMgdG8gdXNlLgorICoKKyAqIFRoZSBjb250ZW50IG9mIFdJTkRPV1BBVEggb3IgWERHX1ZUTlIgd2lsbCBhbHdheXMgYmUgcHJlcGVuZGVkIHRvIHRoZSBnaXZlbgorICogXHAgdHR5cyBhcnJheSwgc28gdGhlIGFwcGxpY2F0aW9uIGRvZXMgbm90IG5lZWQgdG8gZGV0ZXJtaW5lIGJ5IGl0c2VsZiB3aGVyZQorICogaXQgaXMgcnVubmluZy4KKyAqCisgKiBccmV0dXJuIDAgb24gc3VjY2VzcywgLTEgb24gZXJyb3IuCisgKgorICogXHNhIGJybGFwaV9lbnRlclR0eU1vZGUoKQorICovCisjaWZuZGVmIEJSTEFQSV9OT19TSU5HTEVfU0VTU0lPTgoraW50IEJSTEFQSV9TVERDQUxMIGJybGFwaV9lbnRlclR0eU1vZGVXaXRoUGF0aChjb25zdCBpbnQgKnR0eXMsIGludCBjb3VudCwgY29uc3QgY2hhciAqZHJpdmVyKTsKKyNlbmRpZiAvKiBCUkxBUElfTk9fU0lOR0xFX1NFU1NJT04gKi8KK2ludCBCUkxBUElfU1REQ0FMTCBicmxhcGlfX2VudGVyVHR5TW9kZVdpdGhQYXRoKGJybGFwaV9oYW5kbGVfdCAqaGFuZGxlLCBjb25zdCBpbnQgKnR0eXMsIGludCBjb3VudCwgY29uc3QgY2hhciAqZHJpdmVyKTsKKworLyogYnJsYXBpX2xlYXZlVHR5TW9kZSAqLworLyoqIFN0b3AgY29udHJvbGxpbmcgdGhlIHR0eQorICoKKyAqIFxyZXR1cm4gMCBvbiBzdWNjZXNzLCAtMSBvbiBlcnJvci4KKyAqCisgKiBcc2EgYnJsYXBpX2VudGVyVHR5TW9kZSgpCisgKi8KKyNpZm5kZWYgQlJMQVBJX05PX1NJTkdMRV9TRVNTSU9OCitpbnQgQlJMQVBJX1NURENBTEwgYnJsYXBpX2xlYXZlVHR5TW9kZSh2b2lkKTsKKyNlbmRpZiAvKiBCUkxBUElfTk9fU0lOR0xFX1NFU1NJT04gKi8KK2ludCBCUkxBUElfU1REQ0FMTCBicmxhcGlfX2xlYXZlVHR5TW9kZShicmxhcGlfaGFuZGxlX3QgKmhhbmRsZSk7CisKKy8qIGJybGFwaV9zZXRGb2N1cyAqLworLyoqIFRlbGwgdGhlIGN1cnJlbnQgdHR5IHRvIGJybHR0eQorICoKKyAqIFRoaXMgaXMgaW50ZW5kZWQgZm9yIGZvY3VzIHRlbGxlcnMsIHN1Y2ggYXMgYnJsdHR5LCB4YnJsYXBpLCBzY3JlZW4sIC4uLgorICogYnJsYXBpX2VudGVyVHR5TW9kZSgpIG11c3QgaGF2ZSBiZWVuIGNhbGxlZCBiZWZvcmVoYW5kIHRvIHRlbGwgd2hlcmUgdGhpcyBmb2N1cworICogYXBwbGllcyBpbiB0aGUgdHR5IHRyZWUuCisgKgorICogXHJldHVybiAwIG9uIHN1Y2Nlc3MsIC0xIG9uIGVycm9yLgorICoKKyAqIFxzYSBicmxhcGlfZW50ZXJUdHlNb2RlKCkgYnJsYXBpX2xlYXZlVHR5TW9kZSgpCisgKi8KKyNpZm5kZWYgQlJMQVBJX05PX1NJTkdMRV9TRVNTSU9OCitpbnQgQlJMQVBJX1NURENBTEwgYnJsYXBpX3NldEZvY3VzKGludCB0dHkpOworI2VuZGlmIC8qIEJSTEFQSV9OT19TSU5HTEVfU0VTU0lPTiAqLworaW50IEJSTEFQSV9TVERDQUxMIGJybGFwaV9fc2V0Rm9jdXMoYnJsYXBpX2hhbmRsZV90ICpoYW5kbGUsIGludCB0dHkpOworCisvKiogQH0gKi8KKworLyoqIFxkZWZncm91cCBicmxhcGlfd3JpdGUgV3JpdGluZyBvbiB0aGUgYnJhaWxsZSBkaXNwbGF5CisgKiBcYnJpZWYgV3JpdGUgdGV4dCB0byB0aGUgYnJhaWxsZSBkaXNwbGF5CisgKgorICogQWZ0ZXIgYnJsYXBpX2VudGVyVHR5TW9kZSgpIGhhcyBiZWVuIGNhbGxlZCwgdGhlIGFwcGxpY2F0aW9uIGNhbgorICogY2FsbCBvbmUgb2YgdGhlc2UgZnVuY3Rpb25zIHRvIHdyaXRlIHRoaW5ncyBvbiB0aGUgYnJhaWxsZSBkaXNwbGF5LgorICoKKyAqIFxub3RlIEJlIHN1cmUgdG8gY2FsbCBicmxhcGlfZW50ZXJUdHlNb2RlKCkgXGUgYmVmb3JlIGNhbGxpbmcgYnJsYXBpX3dyaXRlKCksIG9yCisgKiBlbHNlIHlvdSdsbCBnZXQgYW4gZXJyb3IuIFRoaXMgaXMgcGFydGljdWxhcmx5IG5vdCBhbHdheXMgdHJpdmlhbCB3aGVuCisgKiB3cml0aW5nIG11bHRpdGhyZWFkZWQgYXBwbGljYXRpb25zLgorICoKKyAqIFxub3RlIERvdHMgYXJlIGNvZGVkIGFzIGRlc2NyaWJlZCBpbiBJU08vVFIgMTE1NDgtMTogYSBkb3QgcGF0dGVybiBpcyBjb2RlZAorICogYnkgYSBieXRlIGluIHdoaWNoIGJpdCAwIGlzIHNldCBpZmYgZG90IDEgaXMgdXAsIGJpdCAxIGlzIHNldCBpZmYgZG90IDIgaXMKKyAqIHVwLCAuLi4gYml0IDcgaXMgc2V0IGlmZiBkb3QgOCBpcyB1cC4gVGhpcyBhbHNvIGNvcnJlc3BvbmRzIHRvIHRoZSBsb3ctb3JkZXIKKyAqIGJ5dGUgb2YgdGhlIGNvZGluZyBvZiB1bmljb2RlJ3MgYnJhaWxsZSByb3cgVSsyODAwLgorICoKKyAqIFxub3RlIFRleHQgaXMgdHJhbnNsYXRlZCBieSB0aGUgc2VydmVyIG9uZSB0byBvbmUsIGJ5IGp1c3QgdXNpbmcgYSBzaW1wbGUKKyAqIHdjaGFyX3QgdG8gcGF0dGVybiB0YWJsZSwgaS5lLiBubyBjb250cmFjdGlvbi9leHBhbnNpb24gaXMgcGVyZm9ybWVkLCBiZWNhdXNlCisgKiB0aGUgY2xpZW50IHdvdWxkIHRoZW4gaGF2ZSBubyB3YXkgdG8ga25vdyBob3cgd2lkZSB0aGUgb3V0cHV0IHdvdWxkIGJlIGFuZAorICogdGh1cyB0aGUgcXVhbnRpdHkgb2YgdGV4dCB0byBmZWVkLiAgSWYgY29udHJhY3Rpb24vZXhwYW5zaW9uIGlzIGRlc2lyZWQsIHRoZQorICogY2xpZW50IHNob3VsZCBwZXJmb3JtIGl0IGl0c2VsZiAoZS5nLiB0aGFua3MgdG8gbGlibG91aXMgb3IgZ25vbWUtYnJhaWxsZSkKKyAqIGFuZCBzZW5kIHRoZSByZXN1bHRpbmcgZG90IHBhdHRlcm5zLiAgVGhpcyBpcyBhY3R1YWxseSBleGFjdGx5IHRoZSBzYW1lCisgKiBwcm9ibGVtIGFzIGZvbnQgcmVuZGVyaW5nIG9uIGEgZ3JhcGhpY2FsIGRpc3BsYXk6IGZvciBiZXR0ZXIgY29udHJvbCwKKyAqIG5vd2FkYXlzIGFsbCBmb250IHJhc3Rlcml6YXRpb24gaXMgcGVyZm9ybWVkIG9uIHRoZSBjbGllbnQgc2lkZSwgYW5kIG1lcmUKKyAqIHBpeG1hcHMgYXJlIHNlbnQgdG8gdGhlIFggc2VydmVyLgorICoKKyAqIFxub3RlIEZvciBicmFpbGxlIGRpc3BsYXlzIHdpdGggbXVsdGlwbGUgbGluZXMsIHRleHQgd2lsbCBiZSB3cmFwcGVkIG92ZXIgdGhlCisgKiBsaW5lcy4KKyAqCisgKiBAeyAqLworCisvKiBicmxhcGlfd3JpdGVUZXh0ICovCisvKiogV3JpdGUgdGhlIGdpdmVuIFxcMC10ZXJtaW5hdGVkIHN0cmluZyB0byB0aGUgYnJhaWxsZSBkaXNwbGF5CisgKgorICogSWYgdGhlIHN0cmluZyBpcyB0b28gbG9uZywgaXQgaXMgdHJ1bmNhdGVkLiBJZiBpdCdzIHRvbyBzaG9ydCwKKyAqIGl0IGlzIHBhZGRlZCB3aXRoIHNwYWNlcy4gVGhlIHRleHQgaXMgYXNzdW1lZCB0byBiZSBpbiB0aGUgY3VycmVudCBhcHBsaWNhdGlvbgorICogbG9jYWxlIGNoYXJzZXQgc2V0IGJ5IHNldGxvY2FsZSgzKSBpZiBpdCB3YXMgY2FsbGVkLCBvciB0aGUgbG9jYWxlIGNoYXJzZXQKKyAqIGZyb20gdGhlIGFwcGxpY2F0aW9uIGxvY2FsZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgaWYgc2V0bG9jYWxlKDMpIHdhcyBub3QgY2FsbGVkLgorICoKKyAqIFxwYXJhbSBjdXJzb3IgZ2l2ZXMgdGhlIGN1cnNvciBwb3NpdGlvbjsgaWYgZXF1YWwgdG8gOjpCUkxBUElfQ1VSU09SX09GRiwgbm8gY3Vyc29yIGlzIHNob3duIGF0CisgKiBhbGw7IGlmIGN1cnNvcj09OjpCUkxBUElfQ1VSU09SX0xFQVZFLCB0aGUgY3Vyc29yIGlzIGxlZnQgd2hlcmUgaXQgaXMKKyAqCisgKiBccGFyYW0gdGV4dCBwb2ludHMgdG8gdGhlIHN0cmluZyB0byBiZSBkaXNwbGF5ZWQuCisgKgorICogXHJldHVybiAwIG9uIHN1Y2Nlc3MsIC0xIG9uIGVycm9yLgorICovCisjaWZuZGVmIEJSTEFQSV9OT19TSU5HTEVfU0VTU0lPTgoraW50IEJSTEFQSV9TVERDQUxMIGJybGFwaV93cml0ZVRleHQoaW50IGN1cnNvciwgY29uc3QgY2hhciAqdGV4dCk7CisjZW5kaWYgLyogQlJMQVBJX05PX1NJTkdMRV9TRVNTSU9OICovCitpbnQgQlJMQVBJX1NURENBTEwgYnJsYXBpX193cml0ZVRleHQoYnJsYXBpX2hhbmRsZV90ICpoYW5kbGUsIGludCBjdXJzb3IsIGNvbnN0IGNoYXIgKnRleHQpOworCisvKiBicmxhcGlfd3JpdGVXVGV4dCAqLworLyoqIFdyaXRlIHRoZSBnaXZlbiBcXDAtdGVybWluYXRlZCB1bmljb2RlIHN0cmluZyB0byB0aGUgYnJhaWxsZSBkaXNwbGF5CisgKgorICogSWYgdGhlIHN0cmluZyBpcyB0b28gbG9uZywgaXQgaXMgdHJ1bmNhdGVkLiBJZiBpdCdzIHRvbyBzaG9ydCwKKyAqIGl0IGlzIHBhZGRlZCB3aXRoIHNwYWNlcy4KKyAqCisgKiBccGFyYW0gY3Vyc29yIGdpdmVzIHRoZSBjdXJzb3IgcG9zaXRpb247IGlmIGVxdWFsIHRvIDo6QlJMQVBJX0NVUlNPUl9PRkYsIG5vIGN1cnNvciBpcyBzaG93biBhdAorICogYWxsOyBpZiBjdXJzb3I9PTo6QlJMQVBJX0NVUlNPUl9MRUFWRSwgdGhlIGN1cnNvciBpcyBsZWZ0IHdoZXJlIGl0IGlzCisgKgorICogXHBhcmFtIHRleHQgcG9pbnRzIHRvIHRoZSBzdHJpbmcgdG8gYmUgZGlzcGxheWVkLgorICoKKyAqIFxyZXR1cm4gMCBvbiBzdWNjZXNzLCAtMSBvbiBlcnJvci4KKyAqLworI2lmbmRlZiBCUkxBUElfTk9fU0lOR0xFX1NFU1NJT04KK2ludCBCUkxBUElfU1REQ0FMTCBicmxhcGlfd3JpdGVXVGV4dChpbnQgY3Vyc29yLCBjb25zdCB3Y2hhcl90ICp0ZXh0KTsKKyNlbmRpZiAvKiBCUkxBUElfTk9fU0lOR0xFX1NFU1NJT04gKi8KK2ludCBCUkxBUElfU1REQ0FMTCBicmxhcGlfX3dyaXRlV1RleHQoYnJsYXBpX2hhbmRsZV90ICpoYW5kbGUsIGludCBjdXJzb3IsIGNvbnN0IHdjaGFyX3QgKnRleHQpOworCisvKiBicmxhcGlfd3JpdGVEb3RzICovCisvKiogV3JpdGUgdGhlIGdpdmVuIGRvdHMgYXJyYXkgdG8gdGhlIGRpc3BsYXkKKyAqCisgKiBccGFyYW0gZG90cyBwb2ludHMgb24gYW4gYXJyYXkgb2YgZG90IGluZm9ybWF0aW9uLCBvbmUgcGVyIGNoYXJhY3Rlci4gSXRzCisgKiBzaXplIG11c3QgaGVuY2UgYmUgdGhlIHNhbWUgYXMgd2hhdCBicmxhcGlfZ2V0RGlzcGxheVNpemUoKSByZXR1cm5zLgorICoKKyAqIFxyZXR1cm4gMCBvbiBzdWNjZXNzLCAtMSBvbiBlcnJvci4KKyAqLworI2lmbmRlZiBCUkxBUElfTk9fU0lOR0xFX1NFU1NJT04KK2ludCBCUkxBUElfU1REQ0FMTCBicmxhcGlfd3JpdGVEb3RzKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRvdHMpOworI2VuZGlmIC8qIEJSTEFQSV9OT19TSU5HTEVfU0VTU0lPTiAqLworaW50IEJSTEFQSV9TVERDQUxMIGJybGFwaV9fd3JpdGVEb3RzKGJybGFwaV9oYW5kbGVfdCAqaGFuZGxlLCBjb25zdCB1bnNpZ25lZCBjaGFyICpkb3RzKTsKKworLyogYnJsYXBpX3dyaXRlQXJndW1lbnRzX3QgKi8KKy8qKiBTdHJ1Y3R1cmUgY29udGFpbmluZyBhcmd1bWVudHMgdG8gYmUgZ2l2ZW4gdG8gYnJsYXBpX3dyaXRlKCkgKi8KK3R5cGVkZWYgc3RydWN0IHsKKyAgaW50IGRpc3BsYXlOdW1iZXIgLyoqIERpc3BsYXkgbnVtYmVyIDo6QlJMQVBJX0RJU1BMQVlfREVGQVVMVCA9PSB1bnNwZWNpZmllZCAqLzsKKyAgdW5zaWduZWQgaW50IHJlZ2lvbkJlZ2luIC8qKiBSZWdpb24gb2YgZGlzcGxheSB0byB1cGRhdGUsIDFzdCBjaGFyYWN0ZXIgb2YgZGlzcGxheSBpcyAxLCAxc3QgY2hhcmFjdGVyIG9mIHRoZSBzZWNvbmQgbGluZSBvZiBkaXNwbGF5IGlzIHRoZSB3aWR0aCBvZiBhIGxpbmUgcGx1cyAxLCBldGMuIFJlZ2lvbnMgYXJlIGFsd2F5cyBhIGxpbmVhciB3cmFwIG92ZXIgdGhlIGRpZmZlcmVudCBsaW5lcy4gKi87CisgIGludCByZWdpb25TaXplIC8qKiBOdW1iZXIgb2YgY2hhcmFjdGVycyBoZWxkIGluIGFuZE1hc2sgYW5kIG9yTWFzay4gSWYgbmVnYXRpdmUsIGl0cyBhYnNvbHV0ZSB2YWx1ZSBpcyB0YWtlbiBpbnRvIGFjY291bnQsIGFuZCB0aGUgb3V0cHV0IGlzIHBhZGRlZCBvciB0cnVuY2F0ZWQgdG8gZmlsbCB0aGUgcmVzdCBvZiB0aGUgZGlzcGxheS4gKi87CisgIGNvbnN0IGNoYXIgKnRleHQgLyoqIFRleHQgdG8gZGlzcGxheSwgbXVzdCBob2xkIGFzIG1hbnkgY2hhcmFjdGVycyBhcyB0aGUgcmVnaW9uIGZpZWxkcyBleHByZXNzZXMuICovOworICBpbnQgdGV4dFNpemUgLyoqIFNpemUgb2YgdGV4dCBpbiBieXRlcy4gSWYgLTEsIHN0cmxlbigpIGlzIHVzZWQgZm9yIGNvbXB1dGluZyBpdC4gKi87CisgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmFuZE1hc2sgLyoqIEFuZCBhdHRyaWJ1dGVzOyBhcHBsaWVkIGZpcnN0ICovOworICBjb25zdCB1bnNpZ25lZCBjaGFyICpvck1hc2sgLyoqIE9yIGF0dHJpYnV0ZXM7IGFwcGxpZWQgXGUgYWZ0ZXIgQU5EaW5nICovOworICBpbnQgY3Vyc29yIC8qKiA6OkJSTEFQSV9DVVJTT1JfTEVBVkUgPT0gZG9uJ3QgdG91Y2gsIDo6QlJMQVBJX0NVUlNPUl9PRkYgPT0gdHVybiBvZmYsIDEgPSAxc3QgY2hhciBvZiBkaXNwbGF5LCAuLi4gKi87CisgIGNvbnN0IGNoYXIgKmNoYXJzZXQgLyoqIFRleHQgY2hhcnNldC4gTlVMTCBtZWFucyBpdCBpcyBhc3N1bWVkIHRvIGJlIDhiaXRzLCBhbmQgdGhlIHNhbWUgYXMgdGhlIHNlcnZlcidzLiAiIiBtZWFucyBjdXJyZW50IGxvY2FsZSdzIGNoYXJzZXQuIElmIG5vIGxvY2FsZSB3YXMgc2VsZWN0ZWQsIGRlZmF1bHRzIHRvIE5VTEwncyBtZWFuaW5nLiAqLzsKK30gYnJsYXBpX3dyaXRlQXJndW1lbnRzX3Q7CisKKy8qKiBXcml0ZSB0byB0aGUgZGVmYXVsdCBkaXNwbGF5IG9uIHRoZSBicmFpbGxlIGRldmljZS4KKyAqCisgKiBcc2EgYnJsYXBpX3dyaXRlKCkgYnJsYXBpX3dyaXRlQXJndW1lbnRzX3QKKyAqLworI2RlZmluZSBCUkxBUElfRElTUExBWV9ERUZBVUxUIC0xCisKKy8qKiBEbyBub3QgY2hhbmdlIHRoZSBjdXJzb3IncyBzdGF0ZSBvciBwb3NpdGlvbi4KKyAqCisgKiBcc2EgYnJsYXBpX3dyaXRlVGV4dCgpIGJybGFwaV93cml0ZSgpIGJybGFwaV93cml0ZUFyZ3VtZW50c190CisgKi8KKyNkZWZpbmUgQlJMQVBJX0NVUlNPUl9MRUFWRSAtMQorCisvKiogRG8gbm90IGRpc3BsYXkgdGhlIGN1cnNvci4KKyAqCisgKiBcc2EgYnJsYXBpX3dyaXRlVGV4dCgpIGJybGFwaV93cml0ZSgpIGJybGFwaV93cml0ZUFyZ3VtZW50c190CisgKi8KKyNkZWZpbmUgQlJMQVBJX0NVUlNPUl9PRkYgMAorCisvKiBCUkxBUElfV1JJVEVBUkdVTUVOVFNfSU5JVElBTElaRVIgKi8KKy8qKiBBbGxvd3MgdG8gaW5pdGlhbGl6ZSBhIHN0cnVjdHVyZSBvZiB0eXBlIFxlIGJybGFwaV93cml0ZUFyZ3VtZW50c190ICoKKyAqIHdpdGggZGVmYXVsdCB2YWx1ZXM6CisgKiBkaXNwbGF5TnVtYmVyID0gOjpCUkxBUElfRElTUExBWV9ERUZBVUxUOyAodW5zcGVjaWZpZWQpCisgKiByZWdpb25CZWdpbiA9IHJlZ2lvblNpemUgPSAwOyAodXBkYXRlIHRoZSB3aG9sZSBkaXNwbGF5LCBERVBSRUNBVEVEIGFuZCB3aWxsCisgKiBiZSBmb3JiaWRkZW4gaW4gbmV4dCByZWxlYXNlLiBZb3UgbXVzdCBhbHdheXMgZXhwcmVzcyB0aGUgcmVnaW9uIHlvdSB3aXNoIHRvCisgKiB1cGRhdGUpCisgKiB0ZXh0ID0gYW5kTWFzayA9IG9yTWFzayA9IE5VTEw7IChubyB0ZXh0LCBubyBhdHRyaWJ1dGUpCisgKiBjdXJzb3IgPSA6OkJSTEFQSV9DVVJTT1JfTEVBVkU7IChkb24ndCB0b3VjaCBjdXJzb3IpCisqLworI2RlZmluZSBCUkxBUElfV1JJVEVBUkdVTUVOVFNfSU5JVElBTElaRVIgeyBcCisgIC5kaXNwbGF5TnVtYmVyID0gQlJMQVBJX0RJU1BMQVlfREVGQVVMVCwgXAorICAucmVnaW9uQmVnaW4gPSAwLCBcCisgIC5yZWdpb25TaXplID0gMCwgXAorICAudGV4dCA9IE5VTEwsIFwKKyAgLnRleHRTaXplID0gLTEsIFwKKyAgLmFuZE1hc2sgPSBOVUxMLCBcCisgIC5vck1hc2sgPSBOVUxMLCBcCisgIC5jdXJzb3IgPSBCUkxBUElfQ1VSU09SX0xFQVZFLCBcCisgIC5jaGFyc2V0ID0gTlVMTCBcCit9CisKKy8qIGJybGFwaV93cml0ZSAqLworLyoqIFVwZGF0ZSBhIHNwZWNpZmljIHJlZ2lvbiBvZiB0aGUgYnJhaWxsZSBkaXNwbGF5IGFuZCBhcHBseSBhbmQvb3IgbWFza3MKKyAqCisgKiBccGFyYW0gYXJndW1lbnRzIGdpdmVzIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdGhlIHVwZGF0ZQorICoKKyAqIHJlZ2lvbkJlZ2luIGFuZCByZWdpb25TaXplIG11c3QgYmUgZmlsbGVkIGZvciBzcGVjaWZ5aW5nIHdoaWNoIHBhcnQgb2YgdGhlCisgKiBkaXNwbGF5IHdpbGwgYmUgdXBkYXRlZCwgYXMgd2VsbCBhcyB0aGUgc2l6ZSAoaW4gY2hhcmFjdGVycywgbm90IGJ5dGVzKSBvZgorICogdGhlIHRleHQsIGFuZE1hc2sgYW5kIG9yTWFzayBtZW1iZXJzLgorICoKKyAqIElmIGdpdmVuLCB0aGUgInRleHQiIGZpZWxkIGhvbGRzIHRoZSB0ZXh0IHRoYXQgd2lsbCBiZSBkaXNwbGF5ZWQgaW4gdGhlCisgKiByZWdpb24uICBUaGUgY2hhciBzdHJpbmcgbXVzdCBob2xkIGV4YWN0bHkgYXMgbWFueSBjaGFyYWN0ZXJzIGFzIHRoZSByZWdpb24KKyAqIGZpZWxkcyBleHByZXNzLiAgRm9yIG11bHRpYnl0ZSB0ZXh0LCB0aGlzIGlzIHRoZSBudW1iZXIgb2YgXGUgbXVsdGlieXRlCisgKiBjYXJhY3RlcnMuICBOb3RhYmx5LCBjb21iaW5pbmcgYW5kIGRvdWJsZS13aWR0aCBjYXJhY3RlcnMgY291bnQgZm9yIDEuCisgKgorICogVGhlIGFjdHVhbCBsZW5ndGggb2YgdGhlIHRleHQgaW4gXGUgYnl0ZXMgbWF5IGJlIHNwZWNpZmllZCB0aGFua3MgdG8KKyAqIHRleHRTaXplLiAgSWYgLTEgaXMgZ2l2ZW4sIGl0IHdpbGwgYmUgY29tcHV0ZWQgdGhhbmtzIHRvIHN0cmxlbigpLCBzbyAidGV4dCIKKyAqIG11c3QgdGhlbiBiZSBhIE5VTC10ZXJtaW5hdGVkIHN0cmluZy4KKyAqCisgKiBUaGUgImFuZE1hc2siIGFuZCAib3JNYXNrIiBtYXNrcywgaWYgcHJlc2VudCwgYXJlIHRoZW4gYXBwbGllZCBvbiB0b3Agb2YKKyAqIHRoZSB0ZXh0LCBvbmUgYnl0ZSBwZXIgY2hhcmFjdGVyLiAgVGhpcyBoZW5jZSBwZXJtaXRzIHRoZSBzdXBlcmltcG9zaW5nIG9mCisgKiBhdHRyaWJ1dGVzIG92ZXIgdGhlIHRleHQuICBGb3IgaW5zdGFuY2UsIHNldHRpbmcgYW4gYW5kTWFzayBtYXNrIGZ1bGwgb2YKKyAqIEJSTEFQSV9ET1RTKDEsMSwxLDEsMSwxLDAsMCkgd2lsbCBvbmx5IGtlZXAgKGxvZ2ljYWwgQU5EKSBkb3RzIDEtNiwKKyAqIGhlbmNlIGRyb3BwaW5nIGRvdHMgNyBhbmQgOC4gIE9uIHRoZSBjb250cmFyeSwgc2V0dGluZyBhbiBvck1hc2sgZnVsbCBvZgorICogQlJMQVBJX0RPVDd8QlJMQVBJX0RPVDggd2lsbCBhZGQgKGxvZ2ljYWwgT1IpIGRvdHMgNyBhbmQgOC4KKyAqCisgKiBUaGUgImNoYXJzZXQiIGZpZWxkLCBpZiBwcmVzZW50LCBzcGVjaWZpZXMgdGhlIGNoYXJzZXQgb2YgdGhlICJ0ZXh0IiBmaWVsZC4KKyAqIElmIGl0IGlzICIiLCB0aGUgY3VycmVudCBsb2NhbGUncyBjaGFyc2V0IChpZiBhbnkpIGlzIGFzc3VtZWQuICBFbHNlLCB0aGUKKyAqIDgtYml0IGNoYXJzZXQgb2YgdGhlIHNlcnZlciBpcyBhc3N1bWVkLgorICoKKyAqIEEgc3BlY2lhbCBpbnZvY2F0aW9uIGlzIHdpdGggYW4gdW5tb2RpZmllZCBpbml0aWFsaXplZCBzdHJ1Y3R1cmU6IHRoaXMgY2xlYXJzCisgKiB0aGUgY2xpZW50J3Mgd2hvbGUgZGlzcGxheSwgbGV0dGluZyB0aGUgZGlzcGxheSBvZiBvdGhlciBhcHBsaWNhdGlvbnMgb24KKyAqIHRoZSBzYW1lIHR0eSBvciBvZiBhcHBsaWNhdGlvbnMgInVuZGVyIiB0aGUgdHR5IGFwcGVhci4gU2VlIENvbmN1cnJlbmN5CisgKiBtYW5hZ2VtZW50IHNlY3Rpb24gb2YgdGhlIEJybEFQSSBkb2N1bWVudGF0aW9uIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogXHJldHVybiAwIG9uIHN1Y2Nlc3MsIC0xIG9uIGVycm9yLgorICovCisjaWZuZGVmIEJSTEFQSV9OT19TSU5HTEVfU0VTU0lPTgoraW50IEJSTEFQSV9TVERDQUxMIGJybGFwaV93cml0ZShjb25zdCBicmxhcGlfd3JpdGVBcmd1bWVudHNfdCAqYXJndW1lbnRzKTsKKyNlbmRpZiAvKiBCUkxBUElfTk9fU0lOR0xFX1NFU1NJT04gKi8KK2ludCBCUkxBUElfU1REQ0FMTCBicmxhcGlfX3dyaXRlKGJybGFwaV9oYW5kbGVfdCAqaGFuZGxlLCBjb25zdCBicmxhcGlfd3JpdGVBcmd1bWVudHNfdCAqYXJndW1lbnRzKTsKKworLyoqIEB9ICovCisKKyNpbmNsdWRlICJicmxhcGlfa2V5Y29kZXMuaCIKKworLyoqIFxkZWZncm91cCBicmxhcGlfa2V5cyBSZWFkaW5nIGtleSBwcmVzc2VzCisgKiBcYnJpZWYgSG93IHRvIHJlYWQga2V5IHByZXNzZXMgZnJvbSB0aGUgYnJhaWxsZSB0ZXJtaW5hbAorICoKKyAqIE9uY2UgYnJsYXBpX2VudGVyVHR5TW9kZSgpIGhhcyBiZWVuIGNhbGxlZCwgdGhlIGFwcGxpY2F0aW9uIGNhbiBjYWxsIGJybGFwaV9yZWFkS2V5KCkgdG8KKyAqIHJlYWQga2V5IHByZXNzZXMuIEVpdGhlciBrZXkgY29kZXMgKHNlZSBccmVmIGJybGFwaV9rZXljb2Rlcykgb3IgY29tbWFuZHMgd2lsbCBiZSByZXR1cm5lZCwgZGVwZW5kaW5nCisgKiBvbiBwYXJhbWV0ZXJzIGdpdmVuIHRvIGJybGFwaV9lbnRlclR0eU1vZGUoKS4KKyAqCisgKiBLZXkgcHJlc3NlcyBhcmUgYnVmZmVyZWQsIHNvIHRoYXQgY2FsbGluZyBicmxhcGlfcmVhZEtleSgpIGluIG5vbi1ibG9ja2luZworICogbW9kZSBmcm9tIHRpbWUgdG8gdGltZSBzaG91bGQgc3VmZmljZS4KKyAqCisgKiBAeworICovCisKKy8qIGJybGFwaV9leHBhbmRlZEtleUNvZGVfdCAqLworLyoqIFN0cnVjdHVyZSBob2xkaW5nIHRoZSBjb21wb25lbnRzIG9mIGEga2V5IGNvZGUgYXMgcmV0dXJuZWQgYnkgYnJsYXBpX2V4cGFuZEtleUNvZGUoKSAqLwordHlwZWRlZiBzdHJ1Y3QgeworICB1bnNpZ25lZCBpbnQgdHlwZSAvKiogdGhlIHR5cGUgdmFsdWUgKi87CisgIHVuc2lnbmVkIGludCBjb21tYW5kIC8qKiB0aGUgY29tbWFuZCB2YWx1ZSAqLzsKKyAgdW5zaWduZWQgaW50IGFyZ3VtZW50IC8qKiB0aGUgYXJndW1lbnQgdmFsdWUgKi87CisgIHVuc2lnbmVkIGludCBmbGFncyAvKiogdGhlIGZsYWdzIHZhbHVlICovOworfSBicmxhcGlfZXhwYW5kZWRLZXlDb2RlX3Q7CisKKy8qIGJybGFwaV9leHBhbmRLZXlDb2RlICovCisvKiogRXhwYW5kIHRoZSBjb21wb25lbnRzIG9mIGEga2V5IGNvZGUKKyAqCisgKiBccGFyYW0gY29kZSB0aGUga2V5IGNvZGUgdG8gYmUgZXhwYW5kZWQKKyAqIFxwYXJhbSBleHBhbnNpb24gcG9pbnRlciB0byB0aGUgc3RydWN0dXJlIHRoYXQgcmVjZWl2ZXMgdGhlIGNvbXBvbmVudHMKKyAqCisgKiBccmV0dXJuIDAgb24gc3VjY2VzcywgLTEgb24gZXJyb3IKKyAqLworaW50IEJSTEFQSV9TVERDQUxMIGJybGFwaV9leHBhbmRLZXlDb2RlIChicmxhcGlfa2V5Q29kZV90IGNvZGUsIGJybGFwaV9leHBhbmRlZEtleUNvZGVfdCAqZXhwYW5zaW9uKTsKKworLyogYnJsYXBpX2Rlc2NyaWJlZEtleUNvZGVfdCAqLworLyoqIFN0cnVjdHVyZSBob2xkaW5nIHRoZSBjb21wb25lbnRzIG9mIGEga2V5IGNvZGUgYXMgcmV0dXJuZWQgYnkgYnJsYXBpX2Rlc2NyaWJlS2V5Q29kZSgpICovCit0eXBlZGVmIHN0cnVjdCB7CisgIGNvbnN0IGNoYXIgKnR5cGUgLyoqIHRoZSAgdHlwZSBuYW1lICovOworICBjb25zdCBjaGFyICpjb21tYW5kIC8qKiB0aGUgY29tbWFuZCBuYW1lICovOworICB1bnNpZ25lZCBpbnQgYXJndW1lbnQgLyoqIHRoZSBhcmd1bWVudCB2YWx1ZSAqLzsKKyAgdW5zaWduZWQgaW50IGZsYWdzIC8qKiB0aGUgZmxhZyBjb3VudCAqLzsKKyAgY29uc3QgY2hhciAqZmxhZ1s2NCAtIEJSTEFQSV9LRVlfRkxBR1NfU0hJRlRdIC8qKiB0aGUgZmxhZyBuYW1lcyAqLzsKKyAgYnJsYXBpX2V4cGFuZGVkS2V5Q29kZV90IHZhbHVlcyAvKiogdGhlIGFjdHVhbCB2YWx1ZXMgb2YgdGhlIGNvbXBvbmVudHMgKi87Cit9IGJybGFwaV9kZXNjcmliZWRLZXlDb2RlX3Q7CisKKy8qIGJybGFwaV9kZXNjcmliZUtleUNvZGUgKi8KKy8qKiBEZXNjcmliZSB0aGUgY29tcG9uZW50cyBvZiBhIGtleSBjb2RlLgorICoKKyAqIFxwYXJhbSBjb2RlIHRoZSBrZXljb2RlIHRvIGJlIGRlc2NyaWJlZAorICogXHBhcmFtIGRlc2NyaXB0aW9uIHBvaW50ZXIgdG8gdGhlIHN0cnVjdHVyZSB0aGF0IHJlY2VpdmVzIHRoZSBkZXNjcmlwdGlvbgorICoKKyAqIFxyZXR1cm4gMCBvbiBzdWNjZXNzLCAtMSBvbiBlcnJvcgorICovCitpbnQgQlJMQVBJX1NURENBTEwgYnJsYXBpX2Rlc2NyaWJlS2V5Q29kZSAoYnJsYXBpX2tleUNvZGVfdCBjb2RlLCBicmxhcGlfZGVzY3JpYmVkS2V5Q29kZV90ICpkZXNjcmlwdGlvbik7CisKKy8qKiBVbmljb2RlIGJyYWlsbGUgcm93ICovCisjZGVmaW5lIEJSTEFQSV9VQ19ST1cJMHgyODAwVUwKKworLyogYnJsYXBpX3JlYWRLZXkgKi8KKy8qKiBSZWFkIGEga2V5IGZyb20gdGhlIGJyYWlsbGUga2V5Ym9hcmQKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgb25lIGtleSBwcmVzcydzIGNvZGUuCisgKgorICogSWYgTlVMTCBvciAiIiB3YXMgZ2l2ZW4gdG8gYnJsYXBpX2VudGVyVHR5TW9kZSgpLCBhIFxlIGJybHR0eSBjb21tYW5kIGlzIHJldHVybmVkLAorICogYXMgZGVzY3JpYmVkIGluIHRoZSBkb2N1bWVudGF0aW9uIGZvciA6OmJybGFwaV9rZXlDb2RlX3QgLiBJdCBpcyBoZW5jZSBwcmV0dHkKKyAqIGRyaXZlci1pbmRlcGVuZGVudCwgYW5kIHNob3VsZCBiZSB1c2VkIGJ5IGRlZmF1bHQgd2hlbiBubyBvdGhlciBvcHRpb24gaXMKKyAqIHBvc3NpYmxlLgorICoKKyAqIEJ5IGRlZmF1bHQsIGFsbCBjb21tYW5kcyBidXQgdGhvc2Ugd2hpY2ggcmVzdGFydCBkcml2ZXJzIGFuZCBzd2l0Y2gKKyAqIHZpcnR1YWwgdGVybWluYWxzIGFyZSByZXR1cm5lZCB0byB0aGUgYXBwbGljYXRpb24gYW5kIG5vdCB0byBicmx0dHkuCisgKiBJZiB0aGUgYXBwbGljYXRpb24gZG9lc24ndCB3YW50IHRvIHNlZSBzb21lIGNvbW1hbmQgZXZlbnRzLAorICogaXQgc2hvdWxkIGNhbGwgYnJsYXBpX2lnbm9yZUtleXMoKQorICoKKyAqIElmIGEgZHJpdmVyIG5hbWUgd2FzIGdpdmVuIHRvIGJybGFwaV9lbnRlclR0eU1vZGUoKSwgYSBkcml2ZXItc3BlY2lmaWMga2V5Y29kZSBpcyByZXR1cm5lZCwKKyAqIGFzIHNwZWNpZmllZCBieSB0aGUgYnJhaWxsZSBkcml2ZXIsIHVzdWFsbHkgaW4gPGJybHR0eS9icmxkZWZzLXh5PiB3aGVyZSB4eQorICogaXMgdGhlIGRyaXZlcidzIGNvZGUuIEl0IGdlbmVyYWxseSBjb3JyZXNwb25kcyB0byB0aGUgdmVyeSBjb2RlIHRoYXQgdGhlCisgKiB0ZXJtaW5hbCB0ZWxscyB0byB0aGUgZHJpdmVyLgorICogVGhpcyBzaG91bGQgb25seSBiZSB1c2VkIGJ5IGFwcGxpY2F0aW9ucyB3aGljaCBhcmUgZGVkaWNhdGVkIHRvIGEgcGFydGljdWxhcgorICogYnJhaWxsZSB0ZXJtaW5hbC4gSGVuY2UsIGNoZWNraW5nIHRoZSB0ZXJtaW5hbCB0eXBlIHRoYW5rcyB0byBhIGNhbGwgdG8KKyAqIGJybGFwaV9nZXREcml2ZXJOYW1lKCkgYmVmb3JlIGdldHRpbmcgdHR5IGNvbnRyb2wgaXMgYSBwcmV0dHkgZ29vZCBpZGVhLgorICoKKyAqIEJ5IGRlZmF1bHQsIGFsbCB0aGUga2V5cHJlc3NlcyB3aWxsIGJlIHBhc3NlZCB0byB0aGUgY2xpZW50LCBub25lIHdpbGwgZ28KKyAqIHRocm91Z2ggYnJsdHR5LCBzbyB0aGUgYXBwbGljYXRpb24gd2lsbCBoYXZlIHRvIGhhbmRsZSBjb25zb2xlIHN3aXRjaGluZworICogaXRzZWxmIGZvciBpbnN0YW5jZS4KKyAqCisgKiBccGFyYW0gd2FpdCB0ZWxscyB3aGV0aGVyIHRoZSBjYWxsIHNob3VsZCBibG9jayB1bnRpbCBhIGtleSBpcyBwcmVzc2VkICgxKQorICogIG9yIHNob3VsZCBvbmx5IHByb2JlIGtleSBwcmVzc2VzICgwKTsKKyAqIFxwYXJhbSBjb2RlIGhvbGRzIHRoZSBrZXkgY29kZSBpZiBhIGtleSBwcmVzcyBpcyBpbmRlZWQgcmVhZC4KKyAqCisgKiBccmV0dXJuIC0xIG9uIGVycm9yIG9yIHNpZ25hbCBpbnRlcnJ1cHQgYW5kICpjb2RlIGlzIHRoZW4gdW5kZWZpbmVkLCAwIGlmCisgKiBibG9jayB3YXMgMCBhbmQgbm8ga2V5IHdhcyBwcmVzc2VkIHNvIGZhciwgb3IgMSBhbmQgKmNvZGUgaG9sZHMgdGhlIGtleSBjb2RlLgorICoKKyAqIFByb2dyYW1taW5nIGhpbnRzOgorICoKKyAqIElmIHlvdXIgYXBwbGljYXRpb24gaXMgb25seSBkcml2ZW4gYnkgYnJhaWxsZSBjb21tYW5kIGtleXByZXNzZXMsIHlvdSBjYW4KKyAqIGp1c3QgY2FsbCBicmxhcGlfcmVhZEtleSgxLCAmY29kZSkgc28gdGhhdCBpdCBrZWVwcyBibG9ja2luZywgd2FpdGluZyBmb3IKKyAqIGtleXByZXNzZXMuCisgKgorICogRWxzZSwgeW91J2xsIHByb2JhYmx5IHdhbnQgdG8gdXNlIHRoZSBmaWxlIGRlc2NyaXB0b3IgcmV0dXJuZWQgYnkKKyAqIGJybGFwaV9vcGVuQ29ubmVjdGlvbigpIG9yIGJybGFwaV9nZXRGaWxlRGVzY3JpcHRvcigpIGluIHlvdXIgImJpZyBwb2xsaW5nIGxvb3AiLgorICogRm9yIGluc3RhbmNlOgorICoKKyAqIC0gaW4gYSBcYyBzZWxlY3QoKSBsb29wLCBqdXN0IGFkZCBpdCB0byB0aGUgXGMgcmVhZGZkcyBhbmQgXGMgZXhjZXB0ZmRzIGZpbGUKKyAqICAgZGVzY3JpcHRvciBzZXRzOworICogLSBpbiBhIGd0ayBvciBhdHNwaSBhcHBsaWNhdGlvbiwgdXNlCisgKiAgIFxjIGdfaW9fYWRkX3dhdGNoKGZpbGVEZXNjcmlwdG9yLCBcYyBHX0lPX0lOfEdfSU9fRVJSfEdfSU9fSFVQLCBcYyBmLCBcYyBkYXRhKQorICogICBmb3IgYWRkaW5nIGEgY2FsbGJhY2sgY2FsbGVkIFxjIGY7CisgKiAtIGluIGFuIFh0L1hhdy9tb3RpZi1iYXNlZCBhcHBsaWNhdGlvbiwgdXNlCisgKiAgIFxjIFh0QXBwQWRkSW5wdXQoYXBwX2NvbnRleHQsIFxjIGZpbGVEZXNjcmlwdG9yLCBcYyBYdElucHV0UmVhZE1hc2t8WHRJbnB1dEV4Y2VwdE1hc2ssIFxjIGYsIFxjIGRhdGEpCisgKiAtIGV0Yy4KKyAqCisgKiBhbmQgdGhlbiwgd2hlbiB5b3UgZGV0ZWN0IGluYm91bmQgdHJhZmljIG9uIHRoZSBmaWxlIGRlc2NyaXB0b3IsIGRvIHNvbWV0aGluZworICogbGlrZSB0aGlzOgorICoKKyAqIHdoaWxlIChicmxhcGlfcmVhZEtleSgwLCAmY29kZSkgeworICogICAgLy8gcHJvY2VzcyBrZXljb2RlIGNvZGUKKyAqICAgIC8vIC4uLgorICogfQorICoKKyAqIFRoZSBcYyB3aGlsZSBsb29wIGlzIG5lZWRlZCBmb3IgcHJvY2Vzc2luZyBcZSBhbGwgcGVuZGluZyBrZXkgcHJlc3NlcywgZWxzZQorICogc29tZSBvZiB0aGVtIG1heSBiZSBsZWZ0IGluIGxpYmJybGFwaSdzIGludGVybmFsIGtleSBidWZmZXIgYW5kIHlvdSB3b3VsZG4ndAorICogZ2V0IHRoZW0gaW1tZWRpYXRlbHkuCisgKgorICogXG5vdGUgSWYgdGhlIHJlYWQgaXMgaW50ZXJydXB0ZWQgYnkgYSBzaWduYWwgb3IgYnkgYSBwYXJhbWV0ZXIgY2hhbmdlCisgKiBub3RpZmljYXRpb24sIGJybGFwaV9yZWFkS2V5KCkgd2lsbCByZXR1cm4gLTEsIGJybGFwaV9lcnJubyB3aWxsIGJlCisgKiBCUkxBUElfRVJST1JfTElCQ0VSUiBhbmQgZXJybm8gd2lsbCBiZSBFSU5UUi4KKyAqLworI2lmbmRlZiBCUkxBUElfTk9fU0lOR0xFX1NFU1NJT04KK2ludCBCUkxBUElfU1REQ0FMTCBicmxhcGlfcmVhZEtleShpbnQgd2FpdCwgYnJsYXBpX2tleUNvZGVfdCAqY29kZSk7CisjZW5kaWYgLyogQlJMQVBJX05PX1NJTkdMRV9TRVNTSU9OICovCitpbnQgQlJMQVBJX1NURENBTEwgYnJsYXBpX19yZWFkS2V5KGJybGFwaV9oYW5kbGVfdCAqaGFuZGxlLCBpbnQgd2FpdCwgYnJsYXBpX2tleUNvZGVfdCAqY29kZSk7CisKKy8qIGJybGFwaV9yZWFkS2V5V2l0aFRpbWVvdXQgKi8KKy8qKiBSZWFkIGEga2V5IGZyb20gdGhlIGJyYWlsbGUga2V5Ym9hcmQsIHVubGVzcyBhIHRpbWVvdXQgZXhwaXJlcworICoKKyAqIFRoaXMgZnVuY3Rpb24gd29ya3MgbGlrZSBicmxhcGlfcmVhZEtleSwgZXhjZXB0IHRoYXQgcGFyYW1ldGVyIFxlIHdhaXQgaXMKKyAqIHJlcGxhY2VkIGJ5IGEgXGUgdGltZW91dF9tcyBwYXJhbWV0ZXIKKyAqCisgKiBccGFyYW0gdGltZW91dF9tcyBzcGVjaWZpZXMgaG93IGxvbmcgdGhlIGZ1bmN0aW9uIHNob3VsZCB3YWl0IGZvciBhIGtleXByZXNzLgorICogXHBhcmFtIGNvZGUgaG9sZHMgdGhlIGtleSBjb2RlIGlmIGEga2V5IHByZXNzIGlzIGluZGVlZCByZWFkLgorICoKKyAqIFxyZXR1cm4gLTEgb24gZXJyb3IsIHNpZ25hbCBpbnRlcnJ1cHQgb3IgcGFyYW1ldGVyIGNoYW5nZSBub3RpZmljYXRpb24gYW5kCisgKiAqY29kZSBpcyB0aGVuIHVuZGVmaW5lZCwgMCBpZiB0aGUgdGltZW91dCBleHBpcmVkIGFuZCBubyBrZXkgd2FzIHByZXNzZWQsIG9yCisgKiAxIGFuZCAqY29kZSBob2xkcyB0aGUga2V5IGNvZGUuCisgKgorICogSWYgdGhlIHRpbWVvdXQgZXhwaXJlcyB3aXRob3V0IGFueSBrZXkgYmVpbmcgcHJlc3NlZCwgMCBpcyByZXR1cm5lZC4KKyAqCisgKiBJZiB0aW1lb3V0X21zIGlzIHNldCB0byAwLCB0aGlzIGZ1bmN0aW9uIGxvb2tzIGZvciBrZXkgZXZlbnRzIHRoYXQgaGF2ZSBiZWVuCisgKiBhbHJlYWR5IHJlY2VpdmVkLCBidXQgZG9lcyBub3Qgd2FpdCBhdCBhbGwgaWYgbm8gZXZlbnQgd2FzIHJlY2VpdmVkLgorICoKKyAqIElmIHRpbWVvdXRfbXMgaXMgc2V0IHRvIGEgbmVnYXRpdmUgdmFsdWUsIHRoaXMgZnVuY3Rpb24gYmVoYXZlcyBsaWtlCisgKiBicmxhcGlfcmVhZEtleSwgaS5lLiBpdCB1c2VzIGFuIGluZmluaXRlIHRpbWVvdXQuCisgKi8KKyNpZm5kZWYgQlJMQVBJX05PX1NJTkdMRV9TRVNTSU9OCitpbnQgQlJMQVBJX1NURENBTEwgYnJsYXBpX3JlYWRLZXlXaXRoVGltZW91dChpbnQgdGltZW91dF9tcywgYnJsYXBpX2tleUNvZGVfdCAqY29kZSk7CisjZW5kaWYgLyogQlJMQVBJX05PX1NJTkdMRV9TRVNTSU9OICovCitpbnQgQlJMQVBJX1NURENBTEwgYnJsYXBpX19yZWFkS2V5V2l0aFRpbWVvdXQoYnJsYXBpX2hhbmRsZV90ICpoYW5kbGUsIGludCB0aW1lb3V0X21zLCBicmxhcGlfa2V5Q29kZV90ICpjb2RlKTsKKworLyoqIHR5cGVzIG9mIGtleSByYW5nZXMgKi8KK3R5cGVkZWYgZW51bSB7CisgIGJybGFwaV9yYW5nZVR5cGVfYWxsLAkvKio8IGFsbCBrZXlzLCBjb2RlIG11c3QgYmUgMCAqLworICBicmxhcGlfcmFuZ2VUeXBlX3R5cGUsCS8qKjwgYWxsIGtleXMgb2YgYSBnaXZlbiB0eXBlICovCisgIGJybGFwaV9yYW5nZVR5cGVfY29tbWFuZCwJLyoqPCBhbGwga2V5cyBvZiBhIGdpdmVuIGNvbW1hbmQgYmxvY2ssIGkuZS4gbWF0Y2hpbmcgdGhlIGtleSB0eXBlIGFuZCBjb21tYW5kIHBhcnRzICovCisgIGJybGFwaV9yYW5nZVR5cGVfa2V5LAkvKio8IGEgZ2l2ZW4ga2V5IHdpdGggYW55IGZsYWdzICovCisgIGJybGFwaV9yYW5nZVR5cGVfY29kZSwJLyoqPCBhIGdpdmVuIGtleSBjb2RlICovCit9IGJybGFwaV9yYW5nZVR5cGVfdDsKKworLyogYnJsYXBpX2lnbm9yZUtleXMgKi8KKy8qKiBJZ25vcmUgc29tZSBrZXkgcHJlc3NlcyBmcm9tIHRoZSBicmFpbGxlIGtleWJvYXJkCisgKgorICogVGhpcyBmdW5jdGlvbiBhc2tzIHRoZSBzZXJ2ZXIgdG8gZ2l2ZSB0aGUgcHJvdmlkZWQga2V5cyB0byBcZSBicmx0dHksIHJhdGhlcgorICogdGhhbiByZXR1cm5pbmcgdGhlbSB0byB0aGUgYXBwbGljYXRpb24gdmlhIGJybGFwaV9yZWFkS2V5KCkuCisgKgorICogVGhlIHNldHMgb2Ygc3VjaCBrZXlzIGFyZSByZXNldCBvbiBicmxhcGlfZW50ZXJUdHlNb2RlIGNhbGwuCisgKgorICogXHBhcmFtIHR5cGUgdHlwZSBvZiBrZXlzIHRvIGJlIGlnbm9yZWQKKyAqIFxwYXJhbSBrZXlzIGFycmF5IG9mIGtleXMgdG8gYmUgaWdub3JlZAorICogXHBhcmFtIGNvdW50IG51bWJlciBvZiBrZXlzCisgKi8KKyNpZm5kZWYgQlJMQVBJX05PX1NJTkdMRV9TRVNTSU9OCitpbnQgQlJMQVBJX1NURENBTEwgYnJsYXBpX2lnbm9yZUtleXMoYnJsYXBpX3JhbmdlVHlwZV90IHR5cGUsIGNvbnN0IGJybGFwaV9rZXlDb2RlX3Qga2V5c1tdLCB1bnNpZ25lZCBpbnQgY291bnQpOworI2VuZGlmIC8qIEJSTEFQSV9OT19TSU5HTEVfU0VTU0lPTiAqLworaW50IEJSTEFQSV9TVERDQUxMIGJybGFwaV9faWdub3JlS2V5cyhicmxhcGlfaGFuZGxlX3QgKmhhbmRsZSwgYnJsYXBpX3JhbmdlVHlwZV90IHR5cGUsIGNvbnN0IGJybGFwaV9rZXlDb2RlX3Qga2V5c1tdLCB1bnNpZ25lZCBpbnQgY291bnQpOworCisvKiBicmxhcGlfYWNjZXB0S2V5cyAqLworLyoqIEFjY2VwdCBzb21lIGtleSBwcmVzc2VzIGZyb20gdGhlIGJyYWlsbGUga2V5Ym9hcmQKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGFza3MgdGhlIHNlcnZlciB0byBnaXZlIHRoZSBwcm92aWRlZCBrZXlzIHRvIHRoZSBhcHBsaWNhdGlvbiwKKyAqIGFuZCBub3QgZ2l2ZSB0aGVtIHRvIFxlIGJybHR0eS4KKyAqCisgKiBUaGUgc2V0cyBvZiBzdWNoIGtleXMgYXJlIHJlc2V0IG9uIGJybGFwaV9lbnRlclR0eU1vZGUgY2FsbC4KKyAqCisgKiBccGFyYW0gdHlwZSB0eXBlIG9mIGtleXMgdG8gYmUgaWdub3JlZAorICogXHBhcmFtIGtleXMgYXJyYXkgb2Yga2V5cyB0byBiZSBpZ25vcmVkCisgKiBccGFyYW0gY291bnQgbnVtYmVyIG9mIGtleXMKKyAqLworI2lmbmRlZiBCUkxBUElfTk9fU0lOR0xFX1NFU1NJT04KK2ludCBCUkxBUElfU1REQ0FMTCBicmxhcGlfYWNjZXB0S2V5cyhicmxhcGlfcmFuZ2VUeXBlX3QgdHlwZSwgY29uc3QgYnJsYXBpX2tleUNvZGVfdCBrZXlzW10sIHVuc2lnbmVkIGludCBjb3VudCk7CisjZW5kaWYgLyogQlJMQVBJX05PX1NJTkdMRV9TRVNTSU9OICovCitpbnQgQlJMQVBJX1NURENBTEwgYnJsYXBpX19hY2NlcHRLZXlzKGJybGFwaV9oYW5kbGVfdCAqaGFuZGxlLCBicmxhcGlfcmFuZ2VUeXBlX3QgdHlwZSwgY29uc3QgYnJsYXBpX2tleUNvZGVfdCBrZXlzW10sIHVuc2lnbmVkIGludCBjb3VudCk7CisKKy8qIGJybGFwaV9pZ25vcmVBbGxLZXlzICovCisvKiogSWdub3JlIGFsbCBrZXkgcHJlc3NlcyBmcm9tIHRoZSBicmFpbGxlIGtleWJvYXJkCisgKgorICogVGhpcyBmdW5jdGlvbiBhc2tzIHRoZSBzZXJ2ZXIgdG8gZ2l2ZSBhbGwga2V5cyB0byBcZSBicmx0dHksIHJhdGhlciB0aGFuCisgKiByZXR1cm5pbmcgdGhlbSB0byB0aGUgYXBwbGljYXRpb24gdmlhIGJybGFwaV9yZWFkS2V5KCkuCisgKgorICogVGhlIHNldHMgb2Ygc3VjaCBrZXlzIGFyZSByZXNldCBvbiBicmxhcGlfZW50ZXJUdHlNb2RlIGNhbGwuCisgKi8KKyNpZm5kZWYgQlJMQVBJX05PX1NJTkdMRV9TRVNTSU9OCitpbnQgQlJMQVBJX1NURENBTEwgYnJsYXBpX2lnbm9yZUFsbEtleXModm9pZCk7CisjZGVmaW5lIGJybGFwaV9pZ25vcmVBbGxLZXlzKCkgYnJsYXBpX2lnbm9yZUtleXMoYnJsYXBpX3JhbmdlVHlwZV9hbGwsIE5VTEwsIDApCisjZW5kaWYgLyogQlJMQVBJX05PX1NJTkdMRV9TRVNTSU9OICovCitpbnQgQlJMQVBJX1NURENBTEwgYnJsYXBpX19pZ25vcmVBbGxLZXlzKGJybGFwaV9oYW5kbGVfdCAqaGFuZGxlKTsKKyNkZWZpbmUgYnJsYXBpX19pZ25vcmVBbGxLZXlzKGhhbmRsZSkgYnJsYXBpX19pZ25vcmVLZXlzKGhhbmRsZSwgYnJsYXBpX3JhbmdlVHlwZV9hbGwsIE5VTEwsIDApCisKKy8qIGJybGFwaV9hY2NlcHRBbGxLZXlzICovCisvKiogQWNjZXB0IGFsbCBrZXkgcHJlc3NlcyBmcm9tIHRoZSBicmFpbGxlIGtleWJvYXJkCisgKgorICogVGhpcyBmdW5jdGlvbiBhc2tzIHRoZSBzZXJ2ZXIgdG8gZ2l2ZSBhbGwga2V5cyB0byB0aGUgYXBwbGljYXRpb24sIGFuZCBub3QKKyAqIGdpdmUgdGhlbSB0byBcZSBicmx0dHkuCisgKgorICogV2FybmluZzogYWZ0ZXIgY2FsbGluZyB0aGlzIGZ1bmN0aW9uLCBtYWtlIHN1cmUgdG8gY2FsbCBicmxhcGlfaWdub3JlS2V5cygpCisgKiBmb3IgaWdub3JpbmcgaW1wb3J0YW50IGtleXMgbGlrZSBCUkxfQ01EX1NXSVRDSFZUX1BSRVYvTkVYVCBhbmQgc3VjaC4KKyAqCisgKiBUaGUgc2V0cyBvZiBzdWNoIGtleXMgYXJlIHJlc2V0IG9uIGJybGFwaV9lbnRlclR0eU1vZGUgY2FsbC4KKyAqLworI2lmbmRlZiBCUkxBUElfTk9fU0lOR0xFX1NFU1NJT04KK2ludCBCUkxBUElfU1REQ0FMTCBicmxhcGlfYWNjZXB0QWxsS2V5cyh2b2lkKTsKKyNkZWZpbmUgYnJsYXBpX2FjY2VwdEFsbEtleXMoKSBicmxhcGlfYWNjZXB0S2V5cyhicmxhcGlfcmFuZ2VUeXBlX2FsbCwgTlVMTCwgMCkKKyNlbmRpZiAvKiBCUkxBUElfTk9fU0lOR0xFX1NFU1NJT04gKi8KK2ludCBCUkxBUElfU1REQ0FMTCBicmxhcGlfX2FjY2VwdEFsbEtleXMoYnJsYXBpX2hhbmRsZV90ICpoYW5kbGUpOworI2RlZmluZSBicmxhcGlfX2FjY2VwdEFsbEtleXMoaGFuZGxlKSBicmxhcGlfX2FjY2VwdEtleXMoaGFuZGxlLCBicmxhcGlfcmFuZ2VUeXBlX2FsbCwgTlVMTCwgMCkKKworLyoqIFR5cGUgZm9yIGtleWNvZGUgcmFuZ2VzCisgKgorICogRGVub3RlcyB0aGUgc2V0IG9mIGtleWNvZGVzIGJldHdlZW4gXGUgZmlyc3QgYW5kIFxlIGxhc3QgKGluY2x1c2l2ZSkKKyAqLwordHlwZWRlZiBzdHJ1Y3QgeworCWJybGFwaV9rZXlDb2RlX3QgZmlyc3Q7CS8qKjwgZmlyc3Qga2V5IG9mIHRoZSByYW5nZSAqLworCWJybGFwaV9rZXlDb2RlX3QgbGFzdDsJLyoqPCBsYXN0IGtleSBvZiB0aGUgcmFuZ2UgKi8KK30gYnJsYXBpX3JhbmdlX3Q7CisKKy8qIGJybGFwaV9pZ25vcmVLZXlSYW5nZXMgKi8KKy8qKiBJZ25vcmUgc29tZSBrZXkgcHJlc3NlcyBmcm9tIHRoZSBicmFpbGxlIGtleWJvYXJkCisgKgorICogVGhpcyBmdW5jdGlvbiBhc2tzIHRoZSBzZXJ2ZXIgdG8gZ2l2ZSB0aGUgcHJvdmlkZWQga2V5IHJhbmdlcyB0byBcZSBicmx0dHksCisgKiByYXRoZXIgdGhhbiByZXR1cm5pbmcgdGhlbSB0byB0aGUgYXBwbGljYXRpb24gdmlhIGJybGFwaV9yZWFkS2V5KCkuCisgKgorICogVGhlIHNldHMgb2Ygc3VjaCBrZXlzIGFyZSByZXNldCBvbiBicmxhcGlfZW50ZXJUdHlNb2RlIGNhbGwuCisgKgorICogXHBhcmFtIHJhbmdlcyBrZXkgcmFuZ2VzLCB3aGljaCBhcmUgaW5jbHVzaXZlLCBzZWUgXHJlZiBicmxhcGlfa2V5Y29kZXMgYWJvdXQga2V5IHJhbmdlcworICogXHBhcmFtIGNvdW50IG51bWJlciBvZiByYW5nZXMKKyAqLworI2lmbmRlZiBCUkxBUElfTk9fU0lOR0xFX1NFU1NJT04KK2ludCBCUkxBUElfU1REQ0FMTCBicmxhcGlfaWdub3JlS2V5UmFuZ2VzKGNvbnN0IGJybGFwaV9yYW5nZV90IHJhbmdlc1tdLCB1bnNpZ25lZCBpbnQgY291bnQpOworI2VuZGlmIC8qIEJSTEFQSV9OT19TSU5HTEVfU0VTU0lPTiAqLworaW50IEJSTEFQSV9TVERDQUxMIGJybGFwaV9faWdub3JlS2V5UmFuZ2VzKGJybGFwaV9oYW5kbGVfdCAqaGFuZGxlLCBjb25zdCBicmxhcGlfcmFuZ2VfdCByYW5nZXNbXSwgdW5zaWduZWQgaW50IGNvdW50KTsKKworLyogYnJsYXBpX2FjY2VwdEtleVJhbmdlcyAqLworLyoqIEFjY2VwdCBzb21lIGtleSBwcmVzc2VzIGZyb20gdGhlIGJyYWlsbGUga2V5Ym9hcmQKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGFza3MgdGhlIHNlcnZlciB0byByZXR1cm4gdGhlIHByb3ZpZGVkIGtleSByYW5nZXMgKGluY2x1c2l2ZSkKKyAqIHRvIHRoZSBhcHBsaWNhdGlvbiwgYW5kIG5vdCBnaXZlIHRoZW0gdG8gXGUgYnJsdHR5LgorICoKKyAqIFRoZSBzZXRzIG9mIHN1Y2gga2V5cyBhcmUgcmVzZXQgb24gYnJsYXBpX2VudGVyVHR5TW9kZSBjYWxsLgorICoKKyAqIFxwYXJhbSByYW5nZXMga2V5IHJhbmdlcywgd2hpY2ggYXJlIGluY2x1c2l2ZSwgc2VlIFxyZWYgYnJsYXBpX2tleWNvZGVzIGFib3V0IGtleSByYW5nZXMKKyAqIFxwYXJhbSBjb3VudCBudW1iZXIgb2YgcmFuZ2VzCisgKi8KKyNpZm5kZWYgQlJMQVBJX05PX1NJTkdMRV9TRVNTSU9OCitpbnQgQlJMQVBJX1NURENBTEwgYnJsYXBpX2FjY2VwdEtleVJhbmdlcyhjb25zdCBicmxhcGlfcmFuZ2VfdCByYW5nZXNbXSwgdW5zaWduZWQgaW50IGNvdW50KTsKKyNlbmRpZiAvKiBCUkxBUElfTk9fU0lOR0xFX1NFU1NJT04gKi8KK2ludCBCUkxBUElfU1REQ0FMTCBicmxhcGlfX2FjY2VwdEtleVJhbmdlcyhicmxhcGlfaGFuZGxlX3QgKmhhbmRsZSwgY29uc3QgYnJsYXBpX3JhbmdlX3QgcmFuZ2VzW10sIHVuc2lnbmVkIGludCBjb3VudCk7CisvKiogQH0gKi8KKworLyoqIFxkZWZncm91cCBicmxhcGlfZHJpdmVyc3BlY2lmaWMgRHJpdmVyLVNwZWNpZmljIG1vZGVzCisgKiBcYnJpZWYgUmF3IGFuZCBTdXNwZW5kIE1vZGVzIG1lY2hhbmlzbQorICoKKyAqIElmIHRoZSBhcHBsaWNhdGlvbiB3YW50cyB0byBkaXJlY3RseSB0YWxrIHRvIHRoZSBicmFpbGxlIHRlcm1pbmFsLCBpdCBzaG91bGQKKyAqIHVzZSBSYXcgTW9kZS4gSW4gdGhpcyBzcGVjaWFsIG1vZGUsIHRoZSBkcml2ZXIgZ2l2ZXMgdGhlIHdob2xlIGNvbnRyb2wgb2YgdGhlCisgKiB0ZXJtaW5hbCB0byBpdDogXGUgYnJsdHR5IGRvZXNuJ3Qgd29yayBhbnkgbW9yZS4KKyAqCisgKiBGb3IgdGhpcywgaXQgc2ltcGx5IGhhcyB0byBjYWxsIGJybGFwaV9lbnRlclJhd01vZGUoKSwgdGhlbiBicmxhcGlfc2VuZFJhdygpCisgKiBhbmQgYnJsYXBpX3JlY3ZSYXcoKSwgYW5kIGZpbmFsbHkgZ2l2ZSBjb250cm9sIGJhY2sgdGhhbmtzIHRvCisgKiBicmxhcGlfbGVhdmVSYXdNb2RlKCkuCisgKgorICogU3BlY2lhbCBjYXJlIG9mIHRoZSB0ZXJtaW5hbCBzaG91bGQgYmUgdGFrZW4sIHNpbmNlIG9uZSBtaWdodCBjb21wbGV0ZWx5CisgKiB0cmFzaCB0aGUgdGVybWluYWwncyBkYXRhLCBvciBldmVuIGxvY2sgaXQhIFRoZSBhcHBsaWNhdGlvbiBzaG91bGQgYWx3YXlzCisgKiBjaGVjayBmb3IgdGVybWluYWwncyB0eXBlIHRoYW5rcyB0byBicmxhcGlfZ2V0RHJpdmVyTmFtZSgpLgorICoKKyAqIFRoZSBjbGllbnQgY2FuIGFsc28gbWFrZSBicmx0dHkgY2xvc2UgdGhlIGRyaXZlciBieSB1c2luZyBicmxhcGlfc3VzcGVuZERyaXZlcigpLAorICogYW5kIHJlc3VtZSBpdCBhZ2FpbiB3aXRoIGJybGFwaV9yZXN1bWVEcml2ZXIoKS4gIFRoaXMgc2hvdWxkIG5vdCBiZSB1c2VkIGlmCisgKiBwb3NzaWJsZTogcmF3IG1vZGUgc2hvdWxkIGJlIHN1ZmZpY2llbnQgZm9yIGFueSB1c2UuICBJZiBub3QsIHBsZWFzZSBhc2sgZm9yCisgKiBmZWF0dXJlcyA6KQorICoKKyAqIEB7CisgKi8KKworLyogYnJsYXBpX2VudGVyUmF3TW9kZSAqLworLyoqIFN3aXRjaCB0byBSYXcgbW9kZQorICoKKyAqIFRPRE86IGRvY3VtZW50IHdoaWNoIGZ1bmN0aW9ucyB3b3JrIGluIHJhdyBtb2RlLgorICoKKyAqIFxwYXJhbSBkcml2ZXIgU3BlY2lmaWVzIHRoZSBuYW1lIG9mIHRoZSBkcml2ZXIgZm9yIHdoaWNoIHRoZSByYXcKKyAqIGNvbW11bmljYXRpb24gd2lsbCBiZSBlc3RhYmxpc2hlZC4KKyAqIFxyZXR1cm4gMCBvbiBzdWNjZXNzLCAtMSBvbiBlcnJvciAqLworI2lmbmRlZiBCUkxBUElfTk9fU0lOR0xFX1NFU1NJT04KK2ludCBCUkxBUElfU1REQ0FMTCBicmxhcGlfZW50ZXJSYXdNb2RlKGNvbnN0IGNoYXIgKmRyaXZlcik7CisjZW5kaWYgLyogQlJMQVBJX05PX1NJTkdMRV9TRVNTSU9OICovCitpbnQgQlJMQVBJX1NURENBTEwgYnJsYXBpX19lbnRlclJhd01vZGUoYnJsYXBpX2hhbmRsZV90ICpoYW5kbGUsIGNvbnN0IGNoYXIgKmRyaXZlcik7CisKKy8qIGJybGFwaV9sZWF2ZVJhd01vZGUgKi8KKy8qKiBMZWF2ZSBSYXcgbW9kZQorICogXHJldHVybiAwIG9uIHN1Y2Nlc3MsIC0xIG9uIGVycm9yICovCisjaWZuZGVmIEJSTEFQSV9OT19TSU5HTEVfU0VTU0lPTgoraW50IEJSTEFQSV9TVERDQUxMIGJybGFwaV9sZWF2ZVJhd01vZGUodm9pZCk7CisjZW5kaWYgLyogQlJMQVBJX05PX1NJTkdMRV9TRVNTSU9OICovCitpbnQgQlJMQVBJX1NURENBTEwgYnJsYXBpX19sZWF2ZVJhd01vZGUoYnJsYXBpX2hhbmRsZV90ICpoYW5kbGUpOworCisvKiBicmxhcGlfc2VuZFJhdyAqLworLyoqIFNlbmQgUmF3IGRhdGEKKyAqCisgKiBccGFyYW0gYnVmZmVyIHBvaW50cyBvbiB0aGUgZGF0YTsKKyAqIFxwYXJhbSBzaXplIGhvbGRzIHRoZSBwYWNrZXQgc2l6ZS4KKyAqIFxyZXR1cm4gc2l6ZSBvbiBzdWNjZXNzLCAtMSBvbiBlcnJvciAqLworI2lmbmRlZiBCUkxBUElfTk9fU0lOR0xFX1NFU1NJT04KK3NzaXplX3QgQlJMQVBJX1NURENBTEwgYnJsYXBpX3NlbmRSYXcoY29uc3Qgdm9pZCAqYnVmZmVyLCBzaXplX3Qgc2l6ZSk7CisjZW5kaWYgLyogQlJMQVBJX05PX1NJTkdMRV9TRVNTSU9OICovCitzc2l6ZV90IEJSTEFQSV9TVERDQUxMIGJybGFwaV9fc2VuZFJhdyhicmxhcGlfaGFuZGxlX3QgKmhhbmRsZSwgY29uc3Qgdm9pZCAqYnVmZmVyLCBzaXplX3Qgc2l6ZSk7CisKKy8qIGJybGFwaV9yZWN2UmF3ICovCisvKiogR2V0IFJhdyBkYXRhCisgKgorICogXHBhcmFtIGJ1ZmZlciBwb2ludHMgb24gYSBidWZmZXIgd2hlcmUgdGhlIGZ1bmN0aW9uIHdpbGwgc3RvcmUgdGhlIHJlY2VpdmVkCisgKiBkYXRhOworICogXHBhcmFtIHNpemUgaG9sZHMgdGhlIGJ1ZmZlciBzaXplLgorICogXHJldHVybiBpdHMgc2l6ZSwgLTEgb24gZXJyb3IsIG9yIG9uIGludGVycnVwdGlvbiBieSBhIHNpZ25hbCBvciBhIHBhcmFtZXRlcgorICogY2hhbmdlIG5vdGlmaWNhdGlvbiwgaW4gd2hpY2ggY2FzZSBicmxhcGlfZXJybm8gd2lsbCBiZSBCUkxBUElfRVJST1JfTElCQ0VSUgorICogYW5kIGVycm5vIHdpbGwgYmUgRUlOVFIuICovCisjaWZuZGVmIEJSTEFQSV9OT19TSU5HTEVfU0VTU0lPTgorc3NpemVfdCBCUkxBUElfU1REQ0FMTCBicmxhcGlfcmVjdlJhdyh2b2lkICpidWZmZXIsIHNpemVfdCBzaXplKTsKKyNlbmRpZiAvKiBCUkxBUElfTk9fU0lOR0xFX1NFU1NJT04gKi8KK3NzaXplX3QgQlJMQVBJX1NURENBTEwgYnJsYXBpX19yZWN2UmF3KGJybGFwaV9oYW5kbGVfdCAqaGFuZGxlLCB2b2lkICpidWZmZXIsIHNpemVfdCBzaXplKTsKKworLyogYnJsYXBpX3N1c3BlbmREcml2ZXIgKi8KKy8qKiBTdXNwZW5kIGJyYWlsbGUgZHJpdmVyCisgKiBccGFyYW0gZHJpdmVyIFNwZWNpZmllcyB0aGUgbmFtZSBvZiB0aGUgZHJpdmVyIHdoaWNoIHdpbGwgYmUgc3VzcGVuZGVkLgorICogXHJldHVybiAtMSBvbiBlcnJvcgorICovCisjaWZuZGVmIEJSTEFQSV9OT19TSU5HTEVfU0VTU0lPTgoraW50IEJSTEFQSV9TVERDQUxMIGJybGFwaV9zdXNwZW5kRHJpdmVyKGNvbnN0IGNoYXIgKmRyaXZlcik7CisjZW5kaWYgLyogQlJMQVBJX05PX1NJTkdMRV9TRVNTSU9OICovCitpbnQgQlJMQVBJX1NURENBTEwgYnJsYXBpX19zdXNwZW5kRHJpdmVyKGJybGFwaV9oYW5kbGVfdCAqaGFuZGxlLCBjb25zdCBjaGFyICpkcml2ZXIpOworCisvKiBicmxhcGlfcmVzdW1lRHJpdmVyICovCisvKiogUmVzdW1lIGJyYWlsbGUgZHJpdmVyCisgKiBccmV0dXJuIC0xIG9uIGVycm9yCisgKi8KKyNpZm5kZWYgQlJMQVBJX05PX1NJTkdMRV9TRVNTSU9OCitpbnQgQlJMQVBJX1NURENBTEwgYnJsYXBpX3Jlc3VtZURyaXZlcih2b2lkKTsKKyNlbmRpZiAvKiBCUkxBUElfTk9fU0lOR0xFX1NFU1NJT04gKi8KK2ludCBCUkxBUElfU1REQ0FMTCBicmxhcGlfX3Jlc3VtZURyaXZlcihicmxhcGlfaGFuZGxlX3QgKmhhbmRsZSk7CisvKiogQH0gKi8KKworI2luY2x1ZGUgImJybGFwaV9wYXJhbS5oIgorCisvKiogXGRlZmdyb3VwIGJybGFwaV9wYXJhbWV0ZXJNYW5hZ2VtZW50IFBhcmFtZXRlciBtYW5hZ2VtZW50CisgKiBcYnJpZWYgSG93IHRvIG1hbmFnZSBCcmxBUEkgcGFyYW1ldGVycworICoKKyAqIFRoZXJlIGFyZSBzZXZlcmFsIGtpbmRzIG9mIHBhcmFtZXRlcnM6CisgKiAtIHN0YXRlcyBhc3NvY2lhdGVkIHdpdGggdGhlIGJyYWlsbGUgZGV2aWNlIGl0c2VsZiwgc3VjaCBhcyBpdHMgc2l6ZSBvcgorICogcGFyYW1ldGVycyBvZiB0aGUgZGV2aWNlIHBvcnQKKyAqIC0gc3RhdGVzIG9mIHRoZSBCcmxBUEkgY29ubmVjdGlvbiBpdHNlbGYsIHN1Y2ggYXMgdGhlIGRpc3BsYXlpbmcgbGV2ZWwgb3IKKyAqIGtleSBwYXNzaW5nIHByZWZlcmVuY2VzLgorICogLSBnZW5lcmFsIHN0YXRlcyBzdWNoIGFzIHRoZSBjdXQgYnVmZmVyLAorICogLSBicmFpbGxlIHBhcmFtZXRlcnM6IGJyYWlsbGUgdGFibGUsIGNvbnRyYWN0aW9uLCBjdXJzb3Igc2hhcGUsIGV0YywKKyAqIC0gYnJvd3NlIHBhcmFtZXRlcnM6IGxpbmUgc2tpcCwgYmVlcCwgZXRjLgorICoKKyAqIFNvbWUgb2YgdGhlbSBhcmUgc3ViZGl2aWRlZCBpbiBzdWJwYXJhbWV0ZXJzLiAgT3RoZXJzIGhhdmUgb25seSBzdWJwYXJhbWV0ZXIgMC4KKyAqCisgKiBTb21lIG9mIHRoZW0gYXJlIHJlYWQtb25seSwgb3RoZXJzIGFyZSByZWFkL3dyaXRlLgorICoKKyAqIEEgY2xpZW50IGNhbiBlaXRoZXIgcmVxdWVzdCB0aGUgaW1tZWRpYXRlIGNvbnRlbnQgb2YgYSBwYXJhbWV0ZXIgYnkKKyAqIHVzaW5nIGJybGFwaV9nZXRQYXJhbWV0ZXIoKTsgc2V0IHRoZSBjb250ZW50IG9mIGEgcGFyYW1ldGVyIGJ5IHVzaW5nCisgKiBicmxhcGlfc2V0UGFyYW1ldGVyKCk7IG9yIHJlZ2lzdGVyIGEgY2FsbGJhY2sgdGhhdCBtYXkgYmUgY2FsbGVkIGltbWVkaWF0ZWx5CisgKiBhbmQgb24gZWFjaCBjaGFuZ2Ugb2YgYSBnaXZlbiBwYXJhbWV0ZXIsIGJ5IHVzaW5nIGJybGFwaV93YXRjaFBhcmFtZXRlcigpLgorICoKKyAqIEB7ICovCisKKy8qKiBGbGFncyBmb3IgcGFyYW1ldGVyIHJlcXVlc3RzICovCit0eXBlZGVmIHVpbnQzMl90IGJybGFwaV9wYXJhbV9mbGFnc190OworI2RlZmluZSBCUkxBUElfUEFSQU1GX0xPQ0FMICAgICAgICAgIDBYMDAgICAgLyoqPCBSZWZlciB0byB0aGUgdmFsdWUgbG9jYWwgdG8gdGhlIGNvbm5lY3Rpb24gaW5zdGVhZCBvZiB0aGUgZ2xvYmFsIHZhbHVlICovCisjZGVmaW5lIEJSTEFQSV9QQVJBTUZfR0xPQkFMICAgICAgICAgMFgwMSAgICAvKio8IFJlZmVyIHRvIHRoZSBnbG9iYWwgdmFsdWUgaW5zdGVhZCBvZiB0aGUgdmFsdWUgbG9jYWwgdG8gdGhlIGNvbm5lY3Rpb24gKi8KKyNkZWZpbmUgQlJMQVBJX1BBUkFNRl9TRUxGICAgICAgICAgICAwWDAyICAgIC8qKjwgU3BlY2lmeSB3aGV0aGVyIHRvIHJlY2VpdmUgbm90aWZpY2F0aW9ucyBvZiB2YWx1ZSBzZWxmLWNoYW5nZXMgKi8KKworLyogYnJsYXBpX2dldFBhcmFtZXRlciAqLworLyoqIEdldCB0aGUgY29udGVudCBvZiBhIHBhcmFtZXRlcgorICoKKyAqIGJybGFwaV9nZXRQYXJhbWV0ZXIgZ2V0cyB0aGUgY3VycmVudCBjb250ZW50IG9mIGEgcGFyYW1ldGVyCisgKgorICogXHBhcmFtIHBhcmFtZXRlciBpcyB0aGUgcGFyYW1ldGVyIHdob3NlIGNvbnRlbnQgc2hhbGwgYmUgZ290dGVuOworICogXHBhcmFtIHN1YnBhcmFtIGlzIGEgc3BlY2lmaWMgaW5zdGFuY2Ugb2YgdGhlIHBhcmFtZXRlcjsKKyAqIFxwYXJhbSBmbGFncyBzcGVjaWZ5IHdoaWNoIHZhbHVlIGFuZCBob3cgaXQgc2hvdWxkIGJlIHJldHVybmVkOworICogXHBhcmFtIGRhdGEgaXMgYSBidWZmZXIgd2hlcmUgY29udGVudCBvZiB0aGUgcGFyYW1ldGVyIHNoYWxsIGJlIHN0b3JlZDsKKyAqIFxwYXJhbSBsZW4gaXMgdGhlIHNpemUgb2YgdGhlIGJ1ZmZlci4KKyAqCisgKiBccmV0dXJuIHRoZSByZWFsIHNpemUgb2YgdGhlIHBhcmFtZXRlcidzIGNvbnRlbnQuIElmIHRoZSBwYXJhbWV0ZXIgZG9lcyBub3QgZml0IGluIHRoZSBwcm92aWRlZCBidWZmZXIsIGl0IGlzIHRydW5jYXRlZCB0byBsZW4gYnl0ZXMgKGJ1dCB0aGUgcmVhbCBzaXplIG9mIHRoZSBwYXJhbWV0ZXIgaXMgc3RpbGwgcmV0dXJuZWQpLiBJbiB0aGF0IGNhc2UsIHRoZSBjbGllbnQgbXVzdCBjYWxsIGJybGFwaV9nZXRQYXJhbWV0ZXIgYWdhaW4gd2l0aCBhIGJpZyBlbm91Z2ggYnVmZmVyLgorICovCisjaWZuZGVmIEJSTEFQSV9OT19TSU5HTEVfU0VTU0lPTgorc3NpemVfdCBCUkxBUElfU1REQ0FMTCBicmxhcGlfZ2V0UGFyYW1ldGVyKGJybGFwaV9wYXJhbV90IHBhcmFtZXRlciwgYnJsYXBpX3BhcmFtX3N1YnBhcmFtX3Qgc3VicGFyYW0sIGJybGFwaV9wYXJhbV9mbGFnc190IGZsYWdzLCB2b2lkKiBkYXRhLCBzaXplX3QgbGVuKTsKKyNlbmRpZgorc3NpemVfdCBCUkxBUElfU1REQ0FMTCBicmxhcGlfX2dldFBhcmFtZXRlcihicmxhcGlfaGFuZGxlX3QgKmhhbmRsZSwgYnJsYXBpX3BhcmFtX3QgcGFyYW1ldGVyLCBicmxhcGlfcGFyYW1fc3VicGFyYW1fdCBzdWJwYXJhbSwgYnJsYXBpX3BhcmFtX2ZsYWdzX3QgZmxhZ3MsIHZvaWQqIGRhdGEsIHNpemVfdCBsZW4pOworCisvKiBicmxhcGlfZ2V0UGFyYW1ldGVyQWxsb2MgKi8KKy8qKiBSZXR1cm4gdGhlIGNvbnRlbnQgb2YgYSBwYXJhbWV0ZXIKKyAqCisgKiBicmxhcGlfZ2V0UGFyYW1ldGVyQWxsb2MgZ2V0cyB0aGUgY3VycmVudCBjb250ZW50IG9mIGEgcGFyYW1ldGVyLCBieSByZXR1cm5pbmcgaXQgYXMgYSBuZXdseS1hbGxvY2F0ZWQgYnVmZmVyLgorICogVGhlIGJ1ZmZlciBpcyBhbGxvY2F0ZWQgdG8gb25lIGJ5dGUgbW9yZSB0aGFuIHRoZSBwYXJhbWV0ZXIgdmFsdWUuIFRoaXMgYnl0ZSBpcyBzZXQgdG8gemVyby4gVGhpcyBhbGxvd3MsIGZvciBzdHJpbmcgcGFyYW1ldGVycywgdG8gYmUgYWJsZSB0byBpbW1lZGlhdGVseSB1c2UgaXQgYXMgYSBDIHN0cmluZy4KKyAqCisgKiBccGFyYW0gcGFyYW1ldGVyIGlzIHRoZSBwYXJhbWV0ZXIgd2hvc2UgY29udGVudCBzaGFsbCBiZSBnb3R0ZW47CisgKiBccGFyYW0gc3VicGFyYW0gaXMgYSBzcGVjaWZpYyBpbnN0YW5jZSBvZiB0aGUgcGFyYW1ldGVyOworICogXHBhcmFtIGZsYWdzIHNwZWNpZnkgd2hpY2ggdmFsdWUgYW5kIGhvdyBpdCBzaG91bGQgYmUgcmV0dXJuZWQ7CisgKiBccGFyYW0gbGVuIGlzIHRoZSBhZGRyZXNzIHdoZXJlIHRvIHN0b3JlIHRoZSBzaXplIG9mIHRoZSBwYXJhbWV0ZXIgdmFsdWUuCisgKgorICogXHJldHVybiBhIG5ld2x5LWFsbG9jYXRlZCBidWZmZXIgdGhhdCBjb250YWlucyB0aGUgdmFsdWUgb2YgdGhlIHBhcmFtZXRlci4gVGhlIGNhbGxlciBtdXN0IGNhbGwgZnJlZSgpIG9uIGl0IGFmdGVyIHVzZS4gTlVMTCBpcyByZXR1cm5lZCBvbiBlcnJvcnMKKyAqLworI2lmbmRlZiBCUkxBUElfTk9fU0lOR0xFX1NFU1NJT04KK3ZvaWQgKiBCUkxBUElfU1REQ0FMTCBicmxhcGlfZ2V0UGFyYW1ldGVyQWxsb2MoYnJsYXBpX3BhcmFtX3QgcGFyYW1ldGVyLCBicmxhcGlfcGFyYW1fc3VicGFyYW1fdCBzdWJwYXJhbSwgYnJsYXBpX3BhcmFtX2ZsYWdzX3QgZmxhZ3MsIHNpemVfdCAqbGVuKTsKKyNlbmRpZgordm9pZCAqIEJSTEFQSV9TVERDQUxMIGJybGFwaV9fZ2V0UGFyYW1ldGVyQWxsb2MoYnJsYXBpX2hhbmRsZV90ICpoYW5kbGUsIGJybGFwaV9wYXJhbV90IHBhcmFtZXRlciwgYnJsYXBpX3BhcmFtX3N1YnBhcmFtX3Qgc3VicGFyYW0sIGJybGFwaV9wYXJhbV9mbGFnc190IGZsYWdzLCBzaXplX3QgKmxlbik7CisKKy8qIGJybGFwaV9zZXRQYXJhbWV0ZXIgKi8KKy8qKiBTZXQgdGhlIGNvbnRlbnQgb2YgYSBwYXJhbWV0ZXIKKyAqCisgKiBicmxhcGlfc2V0UGFyYW1ldGVyIHNldHMgdGhlIGNvbnRlbnQgb2YgYSBwYXJhbWV0ZXIKKyAqCisgKiBccGFyYW0gcGFyYW1ldGVyIGlzIHRoZSBwYXJhbWV0ZXIgdG8gc2V0OworICogXHBhcmFtIHN1YnBhcmFtIGlzIGEgc3BlY2lmaWMgaW5zdGFuY2Ugb2YgdGhlIHBhcmFtZXRlcjsKKyAqIFxwYXJhbSBmbGFncyBzcGVjaWZ5IHdoaWNoIHZhbHVlIGFuZCBob3cgaXQgc2hvdWxkIGJlIHNldDsKKyAqIFxwYXJhbSBkYXRhIGlzIGEgYnVmZmVyIGNvbnRhaW5pbmcgdGhlIGRhdGEgdG8gc3RvcmUgaW4gdGhlIHBhcmFtZXRlcjsKKyAqIFxwYXJhbSBsZW4gaXMgdGhlIHNpemUgb2YgdGhlIGRhdGEuCisgKgorICogXHJldHVybiAwIG9uIHN1Y2Nlc3MsIC0xIG9uIGVycm9yIChyZWFkLW9ubHkgcGFyYW1ldGVyIGZvciBpbnN0YW5jZSkuCisgKi8KKyNpZm5kZWYgQlJMQVBJX05PX1NJTkdMRV9TRVNTSU9OCitpbnQgQlJMQVBJX1NURENBTEwgYnJsYXBpX3NldFBhcmFtZXRlcihicmxhcGlfcGFyYW1fdCBwYXJhbWV0ZXIsIGJybGFwaV9wYXJhbV9zdWJwYXJhbV90IHN1YnBhcmFtLCBicmxhcGlfcGFyYW1fZmxhZ3NfdCBmbGFncywgY29uc3Qgdm9pZCogZGF0YSwgc2l6ZV90IGxlbik7CisjZW5kaWYKK2ludCBCUkxBUElfU1REQ0FMTCBicmxhcGlfX3NldFBhcmFtZXRlcihicmxhcGlfaGFuZGxlX3QgKmhhbmRsZSwgYnJsYXBpX3BhcmFtX3QgcGFyYW1ldGVyLCBicmxhcGlfcGFyYW1fc3VicGFyYW1fdCBzdWJwYXJhbSwgYnJsYXBpX3BhcmFtX2ZsYWdzX3QgZmxhZ3MsIGNvbnN0IHZvaWQqIGRhdGEsIHNpemVfdCBsZW4pOworCisvKiBicmxhcGlfcGFyYW1DYWxsYmFja190ICovCisvKiogQ2FsbGJhY2sgZm9yIHBhcmFtZXRlciBjaGFuZ2VzCisgKgorICogV2hlbiBhIHBhcmFtZXRlciBnZXRzIGNoYW5nZWQsIGFwcGxpY2F0aW9uLWRlZmluZWQgY2FsbGJhY2tzIHNldCBieSB0aGUKKyAqIGJybGFwaV93YXRjaFBhcmFtZXRlcigpIGZ1bmN0aW9uIGFyZSBjYWxsZWQuCisgKgorICogXHBhcmFtIHBhcmFtZXRlciBpcyB0aGUgcGFyYW1ldGVyIHRoYXQgY2hhbmdlZDsKKyAqIFxwYXJhbSBzdWJwYXJhbSBpcyBhIHNwZWNpZmljIGluc3RhbmNlIG9mIHRoZSBwYXJhbWV0ZXI7CisgKiBccGFyYW0gZmxhZ3Mgc3BlY2lmeSB3aGljaCB2YWx1ZSBhbmQgaG93IGl0IHdhcyBjaGFuZ2VkOworICogXHBhcmFtIHByaXYgaXMgdGhlIHZvaWQgcG9pbnRlciB0aGF0IHdhcyBwYXNzZWQgdG8gdGhlIGJybGFwaV93YXRjaFBhcmFtZXRlciBjYWxsIHdoaWNoIHJlZ2lzdGVyZWQgdGhlIGNhbGxiYWNrOworICogXHBhcmFtIGRhdGEgaXMgYSBidWZmZXIgY29udGFpbmluZyB0aGUgbmV3IHZhbHVlIG9mIHRoZSBwYXJhbWV0ZXI7CisgKiBccGFyYW0gbGVuIGlzIHRoZSBzaXplIG9mIHRoZSBkYXRhLgorICoKKyAqIFRoaXMgY2FsbGJhY2sgb25seSBnZXRzIGNhbGxlZCB3aGVuIHRoZSBhcHBsaWNhdGlvbiBjYWxscyBzb21lIGJybGFwaV8KKyAqIGZ1bmN0aW9uIChpLmUuIEJybEFQSSBnZXRzIGRpcmVjdCBjb250cm9sIG9mIHRoZSBleGVjdXRpb24pLgorICovCit0eXBlZGVmIHZvaWQgKCpicmxhcGlfcGFyYW1DYWxsYmFja190KShicmxhcGlfcGFyYW1fdCBwYXJhbWV0ZXIsIGJybGFwaV9wYXJhbV9zdWJwYXJhbV90IHN1YnBhcmFtLCBicmxhcGlfcGFyYW1fZmxhZ3NfdCBmbGFncywgdm9pZCAqcHJpdiwgY29uc3Qgdm9pZCAqZGF0YSwgc2l6ZV90IGxlbik7CisKKy8qIGJybGFwaV9wYXJhbUNhbGxiYWNrRGVzY3JpcHRvcl90ICovCisvKiogVHlwZSBmb3IgY2FsbGJhY2sgZGVzY3JpcHRvcnMKKyAqIFRoaXMgaXMgcmV0dXJuZWQgYnkgYnJsYXBpX3dhdGNoUGFyYW1ldGVyLCB0byBiZSBwYXNzZWQgdG8KKyAqIGJybGFwaV91bndhdGNoUGFyYW1ldGVyLgorICovCit0eXBlZGVmIHZvaWQgKmJybGFwaV9wYXJhbUNhbGxiYWNrRGVzY3JpcHRvcl90OworCisvKiBicmxhcGlfd2F0Y2hQYXJhbWV0ZXIgKi8KKy8qKiBTZXQgYSBwYXJhbWV0ZXIgY2hhbmdlIGNhbGxiYWNrCisgKgorICogYnJsYXBpX3dhdGNoUGFyYW1ldGVyIHJlZ2lzdGVycyBhIHBhcmFtZXRlciBjaGFuZ2UgY2FsbGJhY2s6IHdoZW5ldmVyIHRoZQorICogZ2l2ZW4gcGFyYW1ldGVyIGNoYW5nZXMsIHRoZSBnaXZlbiBmdW5jdGlvbiBpcyBjYWxsZWQuCisgKgorICogXHBhcmFtIHBhcmFtZXRlciBpcyB0aGUgcGFyYW1ldGVyIHRvIHdhdGNoOworICogXHBhcmFtIHN1YnBhcmFtIGlzIGEgc3BlY2lmaWMgaW5zdGFuY2Ugb2YgdGhlIHBhcmFtZXRlcjsKKyAqIFxwYXJhbSBmbGFncyBzcGVjaWZ5IHdoaWNoIHZhbHVlIGFuZCBob3cgaXQgc2hvdWxkIGJlIG1vbml0b3JlZDsKKyAqIFxwYXJhbSBmdW5jIGlzIHRoZSBmdW5jdGlvbiB0byBjYWxsIG9uIHBhcmFtZXRlciBjaGFuZ2U7CisgKiBccGFyYW0gcHJpdiBpcyBhIHZvaWQgcG9pbnRlciB3aGljaCB3aWxsIGJlIHBhc3NlZCBhcyBzdWNoIHRvIHRoZSBmdW5jdGlvbjsKKyAqIFxwYXJhbSBkYXRhIGlzIGEgYnVmZmVyIHdoZXJlIHRoZSBjdXJyZW50IGNvbnRlbnQgb2YgdGhlIHBhcmFtZXRlciBzaGFsbCBiZQorICogc3RvcmVkOworICogXHBhcmFtIGxlbiBpcyB0aGUgc2l6ZSBvZiB0aGUgYnVmZmVyLgorICoKKyAqIFxyZXR1cm4gdGhlIGNhbGxiYWNrIGRlc2NyaXB0b3IgKHRvIGJlIHBhc3NlZCB0byBicmxhcGlfdW53YXRjaFBhcmFtZXRlciB0bworICogdW5yZWdpc3RlciB0aGUgY2FsbGJhY2spLCBvciBOVUxMIG9uIGVycm9yLgorICoKKyAqIFxub3RlIERlZmF1bHQgcGFyYW1ldGVyIGNhbGxiYWNrcyBkb24ndCBkbyBhbnl0aGluZywgZXhjZXB0IHRoZSBvbmVzIGZvcgorICogZGlzcGxheSBzaXplIHdoaWNoIGp1c3QgcmFpc2UgU0lHV0lOQ0guCisgKiBcbm90ZSBJZiBkYXRhIGlzIE5VTEwsIHRoZSBjYWxsYmFjayB3aWxsIGJlIGNhbGxlZCBpbW1lZGlhdGVseSBieQorICogYnJsYXBpX3dhdGNoUGFyYW1ldGVyLCBmb3IgcHJvdmlkaW5nIHRoZSBpbml0aWFsIHZhbHVlCisgKi8KKyNpZm5kZWYgQlJMQVBJX05PX1NJTkdMRV9TRVNTSU9OCiticmxhcGlfcGFyYW1DYWxsYmFja0Rlc2NyaXB0b3JfdCBCUkxBUElfU1REQ0FMTCBicmxhcGlfd2F0Y2hQYXJhbWV0ZXIoYnJsYXBpX3BhcmFtX3QgcGFyYW1ldGVyLCBicmxhcGlfcGFyYW1fc3VicGFyYW1fdCBzdWJwYXJhbSwgYnJsYXBpX3BhcmFtX2ZsYWdzX3QgZmxhZ3MsIGJybGFwaV9wYXJhbUNhbGxiYWNrX3QgZnVuYywgdm9pZCAqcHJpdiwgdm9pZCogZGF0YSwgc2l6ZV90IGxlbik7CisjZW5kaWYKK2JybGFwaV9wYXJhbUNhbGxiYWNrRGVzY3JpcHRvcl90IEJSTEFQSV9TVERDQUxMIGJybGFwaV9fd2F0Y2hQYXJhbWV0ZXIoYnJsYXBpX2hhbmRsZV90ICpoYW5kbGUsIGJybGFwaV9wYXJhbV90IHBhcmFtZXRlciwgYnJsYXBpX3BhcmFtX3N1YnBhcmFtX3Qgc3VicGFyYW0sIGJybGFwaV9wYXJhbV9mbGFnc190IGZsYWdzLCBicmxhcGlfcGFyYW1DYWxsYmFja190IGZ1bmMsIHZvaWQgKnByaXYsIHZvaWQqIGRhdGEsIHNpemVfdCBsZW4pOworCisvKiBicmxhcGlfdW53YXRjaFBhcmFtZXRlciAqLworLyoqIENsZWFyIGEgcGFyYW1ldGVyIGNoYW5nZSBjYWxsYmFjaworICoKKyAqIGJybGFwaV91bndhdGNoUGFyYW1ldGVyIHVucmVnaXN0ZXJzIGEgcGFyYW1ldGVyIGNoYW5nZSBjYWxsYmFjazogdGhlCisgKiBjYWxsYmFjayBmdW5jdGlvbiBwcmV2aW91c2x5IHJlZ2lzdGVyZWQgd2l0aCBicmxhcGlfd2F0Y2hQYXJhbWV0ZXIgd2lsbAorICogbm90IGJlIGNhbGxlZCBhbnkgbG9uZ2VyLgorICoKKyAqIFxwYXJhbSBkZXNjcmlwdG9yIHJlZmVycyB0byB0aGUgY2FsbGJhY2sgdG8gYmUgcmVtb3ZlZC4KKyAqCisgKiBccmV0dXJuIDAgb24gc3VjY2VzcywgLTEgb24gZXJyb3IuCisgKi8KKyNpZm5kZWYgQlJMQVBJX05PX1NJTkdMRV9TRVNTSU9OCitpbnQgQlJMQVBJX1NURENBTEwgYnJsYXBpX3Vud2F0Y2hQYXJhbWV0ZXIoYnJsYXBpX3BhcmFtQ2FsbGJhY2tEZXNjcmlwdG9yX3QgZGVzY3JpcHRvcik7CisjZW5kaWYKK2ludCBCUkxBUElfU1REQ0FMTCBicmxhcGlfX3Vud2F0Y2hQYXJhbWV0ZXIoYnJsYXBpX2hhbmRsZV90ICpoYW5kbGUsIGJybGFwaV9wYXJhbUNhbGxiYWNrRGVzY3JpcHRvcl90IGRlc2NyaXB0b3IpOworCisvKiogQH0gKi8KKworLyoqIFxkZWZncm91cCBicmxhcGlfbWlzYyBNaXNjZWxsYW5lb3VzIGZ1bmN0aW9ucworICogQHsgKi8KKworLyogYnJsYXBpX3BhdXNlICovCisvKioKKyAqIFdhaXRzIHVudGlsIGFuIGV2ZW50IGlzIHJlY2VpdmVkIGZyb20gdGhlIEJybEFQSSBzZXJ2ZXIKKyAqIFxwYXJhbSB0aW1lb3V0X21zIHNwZWNpZmllcyBhbiBvcHRpb25hbCB0aW1lb3V0IHdoaWNoIGNhbiBiZSB6ZXJvIGZvciBwb2xsaW5nLCBvciAtMSBmb3IgaW5maW5pdGUgd2FpdAorICogXHJldHVybiAwIG9uIHRpbWVvdXQsIC0xIG9uIGVycm9yLCBvciBvbiBpbnRlcnJ1cHRpb24gYnkgYSBzaWduYWwgb3IgYSBwYXJhbWV0ZXIKKyAqIGNoYW5nZSBub3RpZmljYXRpb24sIGluIHdoaWNoIGNhc2UgYnJsYXBpX2Vycm5vIHdpbGwgYmUgQlJMQVBJX0VSUk9SX0xJQkNFUlIKKyAqIGFuZCBlcnJubyB3aWxsIGJlIEVJTlRSLiAqLworI2lmbmRlZiBCUkxBUElfTk9fU0lOR0xFX1NFU1NJT04KK2ludCBCUkxBUElfU1REQ0FMTCBicmxhcGlfcGF1c2UoaW50IHRpbWVvdXRfbXMpOworI2VuZGlmCitpbnQgQlJMQVBJX1NURENBTEwgYnJsYXBpX19wYXVzZShicmxhcGlfaGFuZGxlX3QgKmhhbmRsZSwgaW50IHRpbWVvdXRfbXMpOworCisvKiBicmxhcGlfc3luYyAqLworLyoqCisgKiBTeW5jaHJvbml6ZSBhZ2FpbnN0IGFueSBwZW5kaW5nIGV4Y2VwdGlvbiwgYW5kIHJldHVybnMgaXQuIFRoaXMgYWxsb3dzIHRvCisgKiBzeW5jaHJvbm91c2x5IGNhdGNoIGV4Y2VwdGlvbiByYWlzZWQgYnkgYnJsYXBpX3dyaXRlIGNhbGxzLgorICogVGhpcyB3b3JrcyBieSB0ZW1wb3JhcmlseSByZXBsYWNpbmcgdGhlIGN1cnJlbnQgZXhjZXB0aW9uIGhhbmRsZXIgYnkgaXRzIG93bgorICogaGFuZGxlci4KKyAqIFxyZXR1cm4gMCBpZiBubyBleGNlcHRpb24gd2FzIHBlbmRpbmcsIC0xIGlmIGFuIGV4Y2VwdGlvbiB3YXMgY2F1Z2h0LgorICovCisjaWZuZGVmIEJSTEFQSV9OT19TSU5HTEVfU0VTU0lPTgoraW50IEJSTEFQSV9TVERDQUxMIGJybGFwaV9zeW5jKHZvaWQpOworI2VuZGlmCitpbnQgQlJMQVBJX1NURENBTEwgYnJsYXBpX19zeW5jKGJybGFwaV9oYW5kbGVfdCAqaGFuZGxlKTsKKworLyoqIEB9ICovCisKKy8qKiBcZGVmZ3JvdXAgYnJsYXBpX2Vycm9yIEVycm9yIGhhbmRsaW5nCisgKiBcYnJpZWYgSG93IHRvIGhhbmRsZSBlcnJvcnMKKyAqCisgKiBXaGVuIGEgZnVuY3Rpb24gZmFpbHMsIDo6YnJsYXBpX2Vycm5vIHdpbGwgaG9sZCBhbiBlcnJvcgorICogY29kZSB0byBleHBsYWluIHdoeSBpdCBmYWlsZWQuIEl0IHNob3VsZCBhbHdheXMgYmUgcmVwb3J0ZWQgc29tZWhvdy4KKyAqCisgKiBBbHRob3VnaCBtb3N0IGVycm9ycyBhcmUgcmVwb3J0ZWQgdGhhdCB3YXksIHNvbWUgKGNhbGxlZCBleGNlcHRpb25zKQorICogYXJlIHJlcG9ydGVkIGFzeW5jaHJvbm91c2x5IGZvciBlZmZpY2llbmN5IHJlYXNvbnMsIGJlY2F1c2UgdGhleSBhbHdheXMKKyAqIGp1c3QgcmVwb3J0IGEgcHJvZ3JhbW1pbmcgZXJyb3IuIFRoZSBhZmZlY3RlZCBmdW5jdGlvbnMgYXJlOiBicmxhcGlfc2V0Rm9jdXMsCisgKiBicmxhcGlfd3JpdGUqIGFuZCBicmxhcGlfc2VuZFJhdy4gIFdoZW4gdGhleSBoYXBwZW4sIHRoZSBuZXh0IGNhbGwgdG8KKyAqIGJybGFwaV9zb21ldGhpbmcgd2lsbCBjbG9zZSB0aGUgY29ubmVjdGlvbiBhbmQgY2FsbCB0aGUgXGUgZXhjZXB0aW9uCisgKiBoYW5kbGVyLiBJZiB0aGUgZXhjZXB0aW9uIGhhbmRsZXIgcmV0dXJucywgdGhlIGJybGFwaV9zb21ldGhpbmcgZnVuY3Rpb24gd2lsbAorICogcmV0dXJuIGFuIGVuZC1vZi1maWxlIGVycm9yLgorICoKKyAqIFRoZSBkZWZhdWx0IGV4Y2VwdGlvbiBoYW5kbGVyIChicmxhcGlfZGVmYXVsdEV4Y2VwdGlvbkhhbmRsZXIoKSkgZHVtcHMKKyAqIHRoZSBndWlsdHkgcGFja2V0IGJlZm9yZSBhYm9ydCgpaW5nLiAgSXQgY2FuIGJlIHJlcGxhY2VkIGJ5IGNhbGxpbmcKKyAqIGJybGFwaV9zZXRFeGNlcHRpb25IYW5kbGVyKCkuICBGb3IgaW5zdGFuY2UsIHRoZSBKYXZhIGFuZCBQeXRob24gYmluZGluZ3MgdXNlCisgKiB0aGlzIGZvciByYWlzaW5nIGEgSmF2YSBvciBQeXRob24gZXhjZXB0aW9uIHRoYXQgbWF5IGJlIGNhdWdodC4KKyAqCisgKiBAeyAqLworCisvKiogQnJsQVBJIEVycm9yIGNvZGVzICovCitlbnVtIGJybGFwaV9lcnJvciB7CisgIEJSTEFQSV9FUlJPUl9TVUNDRVNTICAgICAgICAgICAgID0gIDAsICAvKio8IFN1Y2Nlc3MgKi8KKyNkZWZpbmUgIEJSTEFQSV9FUlJPUl9TVUNDRVNTICAgICAgICAgICAgICAwCisgIEJSTEFQSV9FUlJPUl9OT01FTSAgICAgICAgICAgICAgID0gIDEsICAvKio8IE5vdCBlbm91Z2ggbWVtb3J5ICovCisjZGVmaW5lIEJSTEFQSV9FUlJPUl9OT01FTSAgICAgICAgICAgICAgICBCUkxBUElfRVJST1JfTk9NRU0KKyAgQlJMQVBJX0VSUk9SX1RUWUJVU1kgICAgICAgICAgICAgPSAgMiwgIC8qKjwgQSBjb25uZWN0aW9uIGlzIGFscmVhZHkgcnVubmluZyBpbiB0aGlzIHR0eSAqLworI2RlZmluZSBCUkxBUElfRVJST1JfVFRZQlVTWSAgICAgICAgICAgICAgQlJMQVBJX0VSUk9SX1RUWUJVU1kKKyAgQlJMQVBJX0VSUk9SX0RFVklDRUJVU1kgICAgICAgICAgPSAgMywgIC8qKjwgQSBjb25uZWN0aW9uIGlzIGFscmVhZHkgdXNpbmcgUkFXIG9yIHN1c3BlbmQgbW9kZSAqLworI2RlZmluZSBCUkxBUElfRVJST1JfREVWSUNFQlVTWSAgICAgICAgICAgQlJMQVBJX0VSUk9SX0RFVklDRUJVU1kKKyAgQlJMQVBJX0VSUk9SX1VOS05PV05fSU5TVFJVQ1RJT04gPSAgNCwgIC8qKjwgTm90IGltcGxlbWVudGVkIGluIHByb3RvY29sICovCisjZGVmaW5lIEJSTEFQSV9FUlJPUl9VTktOT1dOX0lOU1RSVUNUSU9OICBCUkxBUElfRVJST1JfVU5LTk9XTl9JTlNUUlVDVElPTgorICBCUkxBUElfRVJST1JfSUxMRUdBTF9JTlNUUlVDVElPTiA9ICA1LCAgLyoqPCBGb3JiaWRlbiBpbiBjdXJyZW50IG1vZGUgKi8KKyNkZWZpbmUgQlJMQVBJX0VSUk9SX0lMTEVHQUxfSU5TVFJVQ1RJT04gIEJSTEFQSV9FUlJPUl9JTExFR0FMX0lOU1RSVUNUSU9OCisgIEJSTEFQSV9FUlJPUl9JTlZBTElEX1BBUkFNRVRFUiAgID0gIDYsICAvKio8IE91dCBvZiByYW5nZSBvciBoYXZlIG5vIHNlbnNlICovCisjZGVmaW5lIEJSTEFQSV9FUlJPUl9JTlZBTElEX1BBUkFNRVRFUiAgICBCUkxBUElfRVJST1JfSU5WQUxJRF9QQVJBTUVURVIKKyAgQlJMQVBJX0VSUk9SX0lOVkFMSURfUEFDS0VUICAgICAgPSAgNywgIC8qKjwgSW52YWxpZCBzaXplICovCisjZGVmaW5lIEJSTEFQSV9FUlJPUl9JTlZBTElEX1BBQ0tFVCAgICAgICBCUkxBUElfRVJST1JfSU5WQUxJRF9QQUNLRVQKKyAgQlJMQVBJX0VSUk9SX0NPTk5SRUZVU0VEICAgICAgICAgPSAgOCwgIC8qKjwgQ29ubmVjdGlvbiByZWZ1c2VkICovCisjZGVmaW5lIEJSTEFQSV9FUlJPUl9DT05OUkVGVVNFRCAgICAgICAgICBCUkxBUElfRVJST1JfQ09OTlJFRlVTRUQKKyAgQlJMQVBJX0VSUk9SX09QTk9UU1VQUCAgICAgICAgICAgPSAgOSwgIC8qKjwgT3BlcmF0aW9uIG5vdCBzdXBwb3J0ZWQgKi8KKyNkZWZpbmUgQlJMQVBJX0VSUk9SX09QTk9UU1VQUCAgICAgICAgICAgIEJSTEFQSV9FUlJPUl9PUE5PVFNVUFAKKyAgQlJMQVBJX0VSUk9SX0dBSUVSUiAgICAgICAgICAgICAgPSAxMCwgIC8qKjwgR2V0YWRkcmluZm8gZXJyb3IgKi8KKyNkZWZpbmUgQlJMQVBJX0VSUk9SX0dBSUVSUiAgICAgICAgICAgICAgIEJSTEFQSV9FUlJPUl9HQUlFUlIKKyAgQlJMQVBJX0VSUk9SX0xJQkNFUlIgICAgICAgICAgICAgPSAxMSwgIC8qKjwgTGliYyBlcnJvciAqLworI2RlZmluZSBCUkxBUElfRVJST1JfTElCQ0VSUiAgICAgICAgICAgICAgQlJMQVBJX0VSUk9SX0xJQkNFUlIKKyAgQlJMQVBJX0VSUk9SX1VOS05PV05UVFkgICAgICAgICAgPSAxMiwgIC8qKjwgQ291bGRuJ3QgZmluZCBvdXQgdGhlIHR0eSBudW1iZXIgKi8KKyNkZWZpbmUgQlJMQVBJX0VSUk9SX1VOS05PV05UVFkgICAgICAgICAgIEJSTEFQSV9FUlJPUl9VTktOT1dOVFRZCisgIEJSTEFQSV9FUlJPUl9QUk9UT0NPTF9WRVJTSU9OICAgID0gMTMsICAvKio8IEJhZCBwcm90b2NvbCB2ZXJzaW9uICovCisjZGVmaW5lIEJSTEFQSV9FUlJPUl9QUk9UT0NPTF9WRVJTSU9OICAgICBCUkxBUElfRVJST1JfUFJPVE9DT0xfVkVSU0lPTgorICBCUkxBUElfRVJST1JfRU9GICAgICAgICAgICAgICAgICA9IDE0LCAgLyoqPCBVbmV4cGVjdGVkIGVuZCBvZiBmaWxlICovCisjZGVmaW5lIEJSTEFQSV9FUlJPUl9FT0YgICAgICAgICAgICAgICAgICBCUkxBUElfRVJST1JfRU9GCisgIEJSTEFQSV9FUlJPUl9FTVBUWUtFWSAgICAgICAgICAgID0gMTUsICAvKio8IEtleSBmaWxlIGVtcHR5ICovCisjZGVmaW5lIEJSTEFQSV9FUlJPUl9FTVBUWUtFWSAgICAgICAgICAgICBCUkxBUElfRVJST1JfRU1QVFlLRVkKKyAgQlJMQVBJX0VSUk9SX0RSSVZFUkVSUk9SICAgICAgICAgPSAxNiwgIC8qKjwgUGFja2V0IHJldHVybmVkIGJ5IGRyaXZlciB0b28gbGFyZ2UgKi8KKyNkZWZpbmUgQlJMQVBJX0VSUk9SX0RSSVZFUkVSUk9SICAgICAgICAgIEJSTEFQSV9FUlJPUl9EUklWRVJFUlJPUgorICBCUkxBUElfRVJST1JfQVVUSEVOVElDQVRJT04gICAgICA9IDE3LCAgLyoqPCBBdXRoZW50aWNhdGlvbiBmYWlsZWQgKi8KKyNkZWZpbmUgQlJMQVBJX0VSUk9SX0FVVEhFTlRJQ0FUSU9OICAgICAgIEJSTEFQSV9FUlJPUl9BVVRIRU5USUNBVElPTgorICBCUkxBUElfRVJST1JfUkVBRE9OTFlfUEFSQU1FVEVSICA9IDE4LCAgLyoqPCBQYXJhbWV0ZXIgY2FuIG5vdCBiZSBjaGFuZ2VkICovCisjZGVmaW5lIEJSTEFQSV9FUlJPUl9SRUFET05MWV9QQVJBTUVURVIgICBCUkxBUElfRVJST1JfUkVBRE9OTFlfUEFSQU1FVEVSCit9OworCisvKiBicmxhcGlfZXJybGlzdCAqLworLyoqIEVycm9yIG1lc3NhZ2UgbGlzdAorICoKKyAqIFRoZXNlIGFyZSB0aGUgc3RyaW5nIGNvbnN0YW50cyB1c2VkIGJ5IGJybGFwaV9wZXJyb3IoKS4KKyAqLworZXh0ZXJuIGNvbnN0IGNoYXIgKmJybGFwaV9lcnJsaXN0W107CisKKy8qIGJybGFwaV9uZXJyICovCisvKiogTnVtYmVyIG9mIGVycm9yIG1lc3NhZ2VzICovCitleHRlcm4gY29uc3QgaW50IGJybGFwaV9uZXJyOworCisvKiBicmxhcGlfcGVycm9yICovCisvKiogUHJpbnQgYSBCcmxBUEkgZXJyb3IgbWVzc2FnZQorICoKKyAqIGJybGFwaV9wZXJyb3IoKSByZWFkcyA6OmJybGFwaV9lcnJvciwgYW5kIGFjdHMganVzdCBsaWtlIHBlcnJvcigpLgorICovCit2b2lkIEJSTEFQSV9TVERDQUxMIGJybGFwaV9wZXJyb3IoY29uc3QgY2hhciAqcyk7CisKKy8qIGJybGFwaV9lcnJvcl90ICovCisvKiogQWxsIGluZm9ybWF0aW9uIHRoYXQgaXMgbmVlZGVkIHRvIGRlc2NyaWJlIGJybGFwaSBlcnJvcnMgKi8KK3R5cGVkZWYgc3RydWN0IHsKKyAgZW51bSBicmxhcGlfZXJyb3IgYnJsZXJybm87CisgIGludCBsaWJjZXJybm87CisgIGludCBnYWllcnJubzsKKyAgY29uc3QgY2hhciAqZXJyZnVuOworfSBicmxhcGlfZXJyb3JfdDsKKworLyoqIEdldCBwZXItdGhyZWFkIGVycm9yIGxvY2F0aW9uCisgKgorICogSW4gbXVsdGl0aHJlYWRlZCBzb2Z0d2FyZSwgOjpicmxhcGlfZXJyb3IgaXMgdGhyZWFkLXNwZWNpZmljLCBzbyBhcGkuaAorICogY2hlYXRzIGFib3V0IHRoZSBicmxhcGlfZXJyb3IgdG9rZW4gYW5kIGFjdHVhbGx5IGNhbGxzCisgKiBicmxhcGlfZXJyb3JfbG9jYXRpb24oKS4KKyAqCisgKiBUaGlzIGdldHMgdGhlIHRocmVhZCBzcGVjaWZpYyBsb2NhdGlvbiBvZiBnbG9iYWwgdmFyaWFibGUgOjpicmxhcGlfZXJyb3IKKyAqLworYnJsYXBpX2Vycm9yX3QgKiBCUkxBUElfU1REQ0FMTCBicmxhcGlfZXJyb3JfbG9jYXRpb24odm9pZCk7CisKKy8qKiBHbG9iYWwgdmFyaWFibGUgYnJsYXBpX2Vycm9yCisgKgorICogOjpicmxhcGlfZXJyb3IgaXMgYSBnbG9iYWwgbGVmdC12YWx1ZSBjb250YWluaW5nIHRoZSBsYXN0IGVycm9yIGluZm9ybWF0aW9uLgorICogSXRzIGVycm5vIGZpZWxkIGlzIG5vdCByZXNldCB0byBCUkxBUElfRVJST1JfU1VDQ0VTUyBvbiBzdWNjZXNzLgorICoKKyAqIFRoaXMgaW5mb3JtYXRpb24gbWF5IGJlIGNvcGllZCBpbiBicmxhcGlfZXJyb3JfdCB2YXJpYWJsZXMgZm9yIGxhdGVyIHVzZQorICogd2l0aCB0aGUgYnJsYXBpX3N0cmVycm9yIGZ1bmN0aW9uLgorICovCitleHRlcm4gYnJsYXBpX2Vycm9yX3QgYnJsYXBpX2Vycm9yOworCisvKiogU2hvcnRoYW5kIGZvciBicmxhcGlfZXJyb3IuZXJybm8gKi8KK2V4dGVybiBlbnVtIGJybGFwaV9lcnJvciBicmxhcGlfZXJybm87CisvKiogU2hvcnRoYW5kIGZvciBicmxhcGlfZXJyb3IubGliY2Vycm5vICovCitleHRlcm4gaW50IGJybGFwaV9saWJjZXJybm87CisvKiogU2hvcnRoYW5kIGZvciBicmxhcGlfZXJyb3IuZ2FpZXJybm8gKi8KK2V4dGVybiBpbnQgYnJsYXBpX2dhaWVycm5vOworLyoqIFNob3J0aGFuZCBmb3IgYnJsYXBpX2Vycm9yLmVycmZ1biAqLworZXh0ZXJuIGNvbnN0IGNoYXIgKmJybGFwaV9lcnJmdW47CisKKy8qKiBDaGVhdCBhYm91dCB0aGUgYnJsYXBpX2Vycm9yIEMgdG9rZW4gKi8KKyNkZWZpbmUgYnJsYXBpX2Vycm9yICgqYnJsYXBpX2Vycm9yX2xvY2F0aW9uKCkpCisvKiogQ2hlYXQgYWJvdXQgdGhlIGJybGFwaV9lcnJubyBDIHRva2VuICovCisjZGVmaW5lIGJybGFwaV9lcnJubyAoYnJsYXBpX2Vycm9yLmJybGVycm5vKQorLyoqIENoZWF0IGFib3V0IHRoZSBicmxhcGlfbGliY2Vycm5vIEMgdG9rZW4gKi8KKyNkZWZpbmUgYnJsYXBpX2xpYmNlcnJubyAoYnJsYXBpX2Vycm9yLmxpYmNlcnJubykKKy8qKiBDaGVhdCBhYm91dCB0aGUgYnJsYXBpX2dhaWVycm5vIEMgdG9rZW4gKi8KKyNkZWZpbmUgYnJsYXBpX2dhaWVycm5vIChicmxhcGlfZXJyb3IuZ2FpZXJybm8pCisvKiogQ2hlYXQgYWJvdXQgdGhlIGJybGFwaV9lcnJmdW4gQyB0b2tlbiAqLworI2RlZmluZSBicmxhcGlfZXJyZnVuIChicmxhcGlfZXJyb3IuZXJyZnVuKQorCisvKiBicmxhcGlfc3RyZXJyb3IgKi8KKy8qKiBHZXQgcGxhaW4gZXJyb3IgbWVzc2FnZQorICoKKyAqIGJybGFwaV9zdHJlcnJvcigpIHJldHVybnMgdGhlIHBsYWluIGVycm9yIG1lc3NhZ2UgY29ycmVzcG9uZGluZyB0byBpdHMKKyAqIGFyZ3VtZW50LiBTaW5jZSB0aGUgbWVzc2FnZSBpcyBhIGNvbnN0YW50IHN0cmluZywgdGhlIGFwcGxpY2F0aW9uIG11c3Qgbm90CisgKiBmcmVlIGl0LiBBbHNvLCB0aGlzIG1ha2VzIGl0IHVuc2FmZSBpbiB0aHJlYWRlZCBlbnZpcm9ubWVudHMsCisgKiBicmxhcGlfc3RyZXJyb3JfcigpIHNob3VsZCBiZSB1c2VkIGluc3RlYWQgaW4gdGhhdCBjYXNlLgorICovCitjb25zdCBjaGFyICogQlJMQVBJX1NURENBTEwgYnJsYXBpX3N0cmVycm9yKGNvbnN0IGJybGFwaV9lcnJvcl90ICplcnJvcik7CisKKy8qIGJybGFwaV9zdHJlcnJvcl9yICovCisvKiogU3RvcmUgcGxhaW4gZXJyb3IgbWVzc2FnZQorICoKKyAqIGJybGFwaV9zdHJlcnJvcl9yKCkgc3RvcmVzIHRoZSBwbGFpbiBlcnJvciBtZXNzYWdlIGNvcnJlc3BvbmRpbmcgdG8gaXRzCisgKiBccCBlcnJvciBhcmd1bWVudC4gXHAgYnVmbGVuIGhhcyB0byBiZSBzZXQgdG8gdGhlIHNpemUgb2YgXHAgYnVmLCBhbmQKKyAqIGJybGFwaV9zdHJlcnJvcl9yKCkgd2lsbCBzdG9yZSBhdCBtb3N0IFxwIGJ1ZmxlbiBieXRlcyBpbiBccCBidWYuIElmIFxwCisgKiBidWZsZW4gaXMgbm90IGxhcmdlIGVub3VnaCBmb3IgdGhlIHdob2xlIGVycm9yIG1lc3NhZ2UsIGl0IHdpbGwgYmUgdHJ1bmNhdGVkLAorICogYnV0IGEgdHJhaWxpbmcgXDAgY2hhcmFjdGVyIHdpbGwgc3RpbGwgYmUgc2V0IGF0IGJ1ZltidWZsZW4tMV0uCisgKgorICogXHJldHVybnMgdGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzIHRoYXQgc2hvdWxkIGhhdmUgYmVlbiBzdG9yZWQgaW4gXHAgYnVmCisgKiAod2l0aG91dCB0aGUgdHJhaWxpbmcgXDAgY2hhcmFjdGVyKS4gQSB2YWx1ZSBncmVhdGVyIG9yIGVxdWFsIHRvIFxwIGJ1ZmxlbgorICogdGh1cyBtZWFucyB0aGF0IHRoZSBvdXRwdXQgd2FzIHRydW5jYXRlZC4KKyAqCisgKiBJZiBccCBidWZsZW4gaXMgc2V0IHRvIDAsIFxwIGJ1ZiBjYW4gYmUgc2V0IHRvIE5VTEwsIGFuZCBicmxhcGlfc3RyZXJyb3JfcgorICogd2lsbCB0aHVzIG9ubHkgcmV0dXJuIHRoZSBudW1iZXIgb2YgY2hhcmFjdGVycyB0aGF0IHdvdWxkIGhhdmUgYmVlbiBzdG9yZWQKKyAqICh3aXRob3V0IHRoZSB0cmFpbGluZyBcMCBjaGFyYWN0ZXIpLgorICovCitzaXplX3QgQlJMQVBJX1NURENBTEwgYnJsYXBpX3N0cmVycm9yX3IoY29uc3QgYnJsYXBpX2Vycm9yX3QgKmVycm9yLCBjaGFyICpidWYsIHNpemVfdCBidWZsZW4pOworCisvKiogVHlwZSBmb3IgcGFja2V0IHR5cGUuIE9ubHkgdW5zaWduZWQgY2FuIGNyb3NzIG5ldHdvcmtzLCAzMmJpdHMgKi8KK3R5cGVkZWYgdWludDMyX3QgYnJsYXBpX3BhY2tldFR5cGVfdDsKKworLyogYnJsYXBpX2dldFBhY2tldFR5cGVOYW1lICovCisvKiogR2V0IHBsYWluIHBhY2tldCB0eXBlCisgKgorICogYnJsYXBpX2dldFBhY2tldFR5cGVOYW1lKCkgcmV0dXJucyB0aGUgcGxhaW4gcGFja2V0IHR5cGUgbmFtZSBjb3JyZXNwb25kaW5nIHRvCisgKiBpdHMgYXJndW1lbnQuCisgKi8KK2NvbnN0IGNoYXIgKiBCUkxBUElfU1REQ0FMTCBicmxhcGlfZ2V0UGFja2V0VHlwZU5hbWUoYnJsYXBpX3BhY2tldFR5cGVfdCB0eXBlKTsKKworLyogYnJsYXBpX2V4Y2VwdGlvbkhhbmRsZXJfdCAqLworLyoqIFR5cGVzIGZvciBleGNlcHRpb24gaGFuZGxlcnMKKyAqCisgKiBUeXBlcyBvZiBleGNlcHRpb24gaGFuZGxlcnMgd2hpY2ggYXJlIHRvIGJlIGdpdmVuIHRvCisgKiBicmxhcGlfc2V0RXhjZXB0aW9uSGFuZGxlcigpIGFuZCBicmxhcGlfX3NldEV4Y2VwdGlvbkhhbmRsZXIoKS4KKyAqCisgKiBccGFyYW0gZXJyb3IgaXMgYSBCUkxBUElfRVJST1JfIGVycm9yIGNvZGU7CisgKiBccGFyYW0gdHlwZSBpcyB0aGUgdHlwZSBvZiB0aGUgZ3VpbHR5IHBhY2tldDsKKyAqIFxwYXJhbSBwYWNrZXQgcG9pbnRzIHRvIHRoZSBjb250ZW50IG9mIHRoZSBndWlsdHkgcGFja2V0IChtaWdodCBiZSBhIGxpdHRsZSBiaXQgdHJ1bmNhdGVkKTsKKyAqIFxwYXJhbSBzaXplIGdpdmVzIHRoZSBndWlsdHkgcGFja2V0J3Mgc2l6ZS4KKyAqLworI2lmbmRlZiBCUkxBUElfTk9fU0lOR0xFX1NFU1NJT04KK3R5cGVkZWYgdm9pZCAoQlJMQVBJX1NURENBTEwgKmJybGFwaV9leGNlcHRpb25IYW5kbGVyX3QpKGludCBlcnJvciwgYnJsYXBpX3BhY2tldFR5cGVfdCB0eXBlLCBjb25zdCB2b2lkICpwYWNrZXQsIHNpemVfdCBzaXplKTsKKyNlbmRpZiAvKiBCUkxBUElfTk9fU0lOR0xFX1NFU1NJT04gKi8KK3R5cGVkZWYgdm9pZCAoQlJMQVBJX1NURENBTEwgKmJybGFwaV9fZXhjZXB0aW9uSGFuZGxlcl90KShicmxhcGlfaGFuZGxlX3QgKmhhbmRsZSwgaW50IGVycm9yLCBicmxhcGlfcGFja2V0VHlwZV90IHR5cGUsIGNvbnN0IHZvaWQgKnBhY2tldCwgc2l6ZV90IHNpemUpOworCisvKiBicmxhcGlfc3RyZXhjZXB0aW9uICovCisvKiogRGVzY3JpYmVzIGFuIGV4Y2VwdGlvbgorICoKKyAqIGJybGFwaV9zdHJleGNlcHRpb24oKSBwdXRzIGEgdGV4dCBkZXNjcmliaW5nIHRoZSBnaXZlbiBleGNlcHRpb24gaW4gYnVmZmVyLgorICoKKyAqIFRoZSBiZWdpbm5pbmcgb2YgdGhlIGd1aWx0eSBwYWNrZXQgaXMgZHVtcGVkIGFzIGEgc2VxdWVuY2Ugb2YgaGV4IGJ5dGVzLgorICoKKyAqIFxyZXR1cm4gdGhlIHNpemUgb2YgdGhlIHRleHQgZGVzY3JpYmluZyB0aGUgZXhjZXB0aW9uLCBmb2xsb3dpbmcKKyAqIHNucHJpbnRmKCkncyBzZW1hbnRpY3MuCisqLworI2lmbmRlZiBCUkxBUElfTk9fU0lOR0xFX1NFU1NJT04KK2ludCBCUkxBUElfU1REQ0FMTCBicmxhcGlfc3RyZXhjZXB0aW9uKGNoYXIgKmJ1ZmZlciwgc2l6ZV90IGJ1ZmZlclNpemUsIGludCBlcnJvciwgYnJsYXBpX3BhY2tldFR5cGVfdCB0eXBlLCBjb25zdCB2b2lkICpwYWNrZXQsIHNpemVfdCBwYWNrZXRTaXplKTsKKyNlbmRpZiAvKiBCUkxBUElfTk9fU0lOR0xFX1NFU1NJT04gKi8KK2ludCBCUkxBUElfU1REQ0FMTCBicmxhcGlfX3N0cmV4Y2VwdGlvbihicmxhcGlfaGFuZGxlX3QgKmhhbmRsZSwgY2hhciAqYnVmZmVyLCBzaXplX3QgYnVmZmVyU2l6ZSwgaW50IGVycm9yLCBicmxhcGlfcGFja2V0VHlwZV90IHR5cGUsIGNvbnN0IHZvaWQgKnBhY2tldCwgc2l6ZV90IHBhY2tldFNpemUpOworCisvKiBicmxhcGlfc2V0RXhjZXB0aW9uSGFuZGxlciAqLworLyoqIFNldCBhIG5ldyBleGNlcHRpb24gaGFuZGxlcgorICoKKyAqIGJybGFwaV9zZXRFeGNlcHRpb25IYW5kbGVyKCkgcmVwbGFjZXMgdGhlIHByZXZpb3VzIGV4Y2VwdGlvbiBoYW5kbGVyIHdpdGgKKyAqIHRoZSBoYW5kbGVyIHBhcmFtZXRlci4gVGhlIHByZXZpb3VzIGV4Y2VwdGlvbiBoYW5kbGVyIGlzIHJldHVybmVkIHRvIG1ha2UKKyAqIGNoYWluaW5nIGVycm9yIGhhbmRsZXJzIHBvc3NpYmxlLgorICoKKyAqIFRoZSBkZWZhdWx0IGhhbmRsZXIganVzdCBwcmludHMgdGhlIGV4Y2VwdGlvbiBhbmQgYWJvcnQoKXMuCisgKi8KKyNpZm5kZWYgQlJMQVBJX05PX1NJTkdMRV9TRVNTSU9OCiticmxhcGlfZXhjZXB0aW9uSGFuZGxlcl90IEJSTEFQSV9TVERDQUxMIGJybGFwaV9zZXRFeGNlcHRpb25IYW5kbGVyKGJybGFwaV9leGNlcHRpb25IYW5kbGVyX3QgaGFuZGxlcik7CisjZW5kaWYgLyogQlJMQVBJX05PX1NJTkdMRV9TRVNTSU9OICovCiticmxhcGlfX2V4Y2VwdGlvbkhhbmRsZXJfdCBCUkxBUElfU1REQ0FMTCBicmxhcGlfX3NldEV4Y2VwdGlvbkhhbmRsZXIoYnJsYXBpX2hhbmRsZV90ICpoYW5kbGUsIGJybGFwaV9fZXhjZXB0aW9uSGFuZGxlcl90IGhhbmRsZXIpOworCisjaWZuZGVmIEJSTEFQSV9OT19TSU5HTEVfU0VTU0lPTgordm9pZCBCUkxBUElfU1REQ0FMTCBicmxhcGlfZGVmYXVsdEV4Y2VwdGlvbkhhbmRsZXIoaW50IGVycm9yLCBicmxhcGlfcGFja2V0VHlwZV90IHR5cGUsIGNvbnN0IHZvaWQgKnBhY2tldCwgc2l6ZV90IHNpemUpOworI2VuZGlmIC8qIEJSTEFQSV9OT19TSU5HTEVfU0VTU0lPTiAqLwordm9pZCBCUkxBUElfU1REQ0FMTCBicmxhcGlfX2RlZmF1bHRFeGNlcHRpb25IYW5kbGVyKGJybGFwaV9oYW5kbGVfdCAqaGFuZGxlLCBpbnQgZXJyb3IsIGJybGFwaV9wYWNrZXRUeXBlX3QgdHlwZSwgY29uc3Qgdm9pZCAqcGFja2V0LCBzaXplX3Qgc2l6ZSk7CisKKy8qKiBAfSAqLworCisvKiBXaW5kb3dzLXNwZWNpZmljIHRyaWNrcyAtIGRvbid0IGxvb2sgYXQgdGhpcyAqLworI2lmZGVmIEJSTEFQSV9XSU4zMgorI2lmbmRlZiBCUkxBUElfTk9fU0lOR0xFX1NFU1NJT04KK2ludCBCUkxBUElfU1REQ0FMTCBicmxhcGlfd3JpdGVUZXh0V2luKGludCBjdXJzb3IsIGNvbnN0IHZvaWQgKnN0ciwgaW50IHdpZGUpOworI2VuZGlmIC8qIEJSTEFQSV9OT19TSU5HTEVfU0VTU0lPTiAqLworaW50IEJSTEFQSV9TVERDQUxMIGJybGFwaV9fd3JpdGVUZXh0V2luKGJybGFwaV9oYW5kbGVfdCAqaGFuZGxlLCBpbnQgY3Vyc29yLCBjb25zdCB2b2lkICpzdHIsIGludCB3aWRlKTsKKworI2lmbmRlZiBCUkxBUElfTk9fU0lOR0xFX1NFU1NJT04KK2ludCBCUkxBUElfU1REQ0FMTCBicmxhcGlfd3JpdGVXaW4oY29uc3QgYnJsYXBpX3dyaXRlQXJndW1lbnRzX3QgKnMsIGludCB3aWRlKTsKKyNlbmRpZiAvKiBCUkxBUElfTk9fU0lOR0xFX1NFU1NJT04gKi8KK2ludCBCUkxBUElfU1REQ0FMTCBicmxhcGlfX3dyaXRlV2luKGJybGFwaV9oYW5kbGVfdCAqaGFuZGxlLCBjb25zdCBicmxhcGlfd3JpdGVBcmd1bWVudHNfdCAqcywgaW50IHdpZGUpOworCisjaWZkZWYgVU5JQ09ERQorI2lmbmRlZiBCUkxBUElfTk9fU0lOR0xFX1NFU1NJT04KKyNkZWZpbmUgYnJsYXBpX3dyaXRlVGV4dChjdXJzb3IsIHN0cikgYnJsYXBpX3dyaXRlVGV4dFdpbihjdXJzb3IsIHN0ciwgMSkKKyNlbmRpZiAvKiBCUkxBUElfTk9fU0lOR0xFX1NFU1NJT04gKi8KKyNkZWZpbmUgYnJsYXBpX193cml0ZVRleHQoaGFuZGxlLCBjdXJzb3IsIHN0cikgYnJsYXBpX193cml0ZVRleHRXaW4oaGFuZGxlLCBjdXJzb3IsIHN0ciwgMSkKKworI2lmbmRlZiBCUkxBUElfTk9fU0lOR0xFX1NFU1NJT04KKyNkZWZpbmUgYnJsYXBpX3dyaXRlKHMpIGJybGFwaV93cml0ZVdpbihzLCAxKQorI2VuZGlmIC8qIEJSTEFQSV9OT19TSU5HTEVfU0VTU0lPTiAqLworI2RlZmluZSBicmxhcGlfX3dyaXRlKGhhbmRsZSwgcykgYnJsYXBpX193cml0ZVdpbihoYW5kbGUsIHMsIDEpCisKKyNlbHNlIC8qIFVOSUNPREUgKi8KKworI2lmbmRlZiBCUkxBUElfTk9fU0lOR0xFX1NFU1NJT04KKyNkZWZpbmUgYnJsYXBpX3dyaXRlVGV4dChjdXJzb3IsIHN0cikgYnJsYXBpX3dyaXRlVGV4dFdpbihjdXJzb3IsIHN0ciwgMCkKKyNlbmRpZiAvKiBCUkxBUElfTk9fU0lOR0xFX1NFU1NJT04gKi8KKyNkZWZpbmUgYnJsYXBpX193cml0ZVRleHQoaGFuZGxlLCBjdXJzb3IsIHN0cikgYnJsYXBpX193cml0ZVRleHRXaW4oaGFuZGxlLCBjdXJzb3IsIHN0ciwgMCkKKworI2lmbmRlZiBCUkxBUElfTk9fU0lOR0xFX1NFU1NJT04KKyNkZWZpbmUgYnJsYXBpX3dyaXRlKHMpIGJybGFwaV93cml0ZVdpbihzLCAwKQorI2VuZGlmIC8qIEJSTEFQSV9OT19TSU5HTEVfU0VTU0lPTiAqLworI2RlZmluZSBicmxhcGlfX3dyaXRlKGhhbmRsZSwgcykgYnJsYXBpX193cml0ZVdpbihoYW5kbGUsIHMsIDApCisKKyNlbmRpZiAvKiBVTklDT0RFICovCisjZW5kaWYgLyogQlJMQVBJX1dJTjMyICovCisKKyNpZm5kZWYgQlJMQVBJX05PX0RFUFJFQ0FURUQKKy8qKiBcZGVmZ3JvdXAgYnJsYXBpX2RlcHJlY2F0ZWQgRGVwcmVjYXRlZCBuYW1lcworICoKKyAqIFdpdGggdmVyc2lvbiAwLjUuMCwgQnJsQVBJIGlzIG5vdyBwcm92aWRlZCB0aHJvdWdoIGluY2x1ZGluZyA8YnJsYXBpLmg+IGFuZAorICogZ290IGEgYmlnIHJlbmFtaW5nIHBhc3MuIE9sZCBuYW1lcyBhcmUgc3RpbGwgYXZhaWxhYmxlIHRocm91Z2ggbWFjcm9zLCBidXQKKyAqIHRoZXkgYXJlIGRlcHJlY2F0ZWQgc2luY2UgdGhleSB3aWxsIGdldCBkcm9wcGVkIGluIHRoZSBuZXh0IHJlbGVhc2UuIFRoaXMKKyAqIGRvY3VtZW50YXRpb24gaXMgZm9yIHlvdSB0byBrbm93IHRoZSBuZXcgbmFtZXMuCisgKgorICogRm9yIGNoZWNraW5nIHRoYXQgeW91IGhhdmUgY29tcGxldGVseSBzd2l0Y2hlZCB0byBuZXcgbmFtZXMsIGp1c3QgZGVmaW5lCisgKiBCUkxBUElfTk9fREVQUkVDQVRFRDogdGhhdCB3aWxsIGRpc2FibGUgY29tcGF0aWJpbGl0eSBtYWNyb3MuCisgKgorICogQHsgKi8KKworI2RlZmluZSBicmxhcGlfc2V0dGluZ3NfdCBicmxhcGlfY29ubmVjdGlvblNldHRpbmdzX3QKKworLyoqIGJybGFwaV93cml0ZVN0cnVjdCwgcmVwbGFjZWQgYnkgYnJsYXBpX3dyaXRlQXJndW1lbnRzX3QgKi8KK3R5cGVkZWYgc3RydWN0IHsKKyAgaW50IGRpc3BsYXlOdW1iZXI7CisgIHVuc2lnbmVkIGludCByZWdpb25CZWdpbjsKKyAgdW5zaWduZWQgaW50IHJlZ2lvblNpemU7CisgIGNvbnN0IGNoYXIgKnRleHQ7CisgIGludCB0ZXh0U2l6ZTsKKyAgY29uc3QgdW5zaWduZWQgY2hhciAqYXR0ckFuZDsKKyAgY29uc3QgdW5zaWduZWQgY2hhciAqYXR0ck9yOworICBpbnQgY3Vyc29yOworICBjb25zdCBjaGFyICpjaGFyc2V0OworfSBicmxhcGlfd3JpdGVTdHJ1Y3Q7CisjZGVmaW5lIEJSTEFQSV9XUklURVNUUlVDVF9JTklUSUFMSVpFUiBCUkxBUElfV1JJVEVBUkdVTUVOVFNfSU5JVElBTElaRVIKKworI2RlZmluZSBicmxfa2V5Y29kZV90IGJybGFwaV9rZXlDb2RlX3QKKyNkZWZpbmUgYnJsX3R5cGVfdCBicmxhcGlfcGFja2V0VHlwZV90CisKKyNkZWZpbmUgQlJMQ09NTUFORFMgTlVMTAorI2RlZmluZSBCUkxfS0VZQ09ERV9NQVggQlJMQVBJX0tFWV9NQVgKKworI2lmbmRlZiBCUkxBUElfTk9fU0lOR0xFX1NFU1NJT04KKyNkZWZpbmUgYnJsYXBpX2luaXRpYWxpemVDb25uZWN0aW9uIGJybGFwaV9vcGVuQ29ubmVjdGlvbgorI2RlZmluZSBicmxhcGlfZ2V0VHR5IGJybGFwaV9lbnRlclR0eU1vZGUKKyNkZWZpbmUgYnJsYXBpX2dldFR0eVBhdGggYnJsYXBpX2VudGVyVHR5TW9kZVdpdGhQYXRoCisjZGVmaW5lIGJybGFwaV9sZWF2ZVR0eSBicmxhcGlfbGVhdmVUdHlNb2RlCisjZGVmaW5lIGJybGFwaV91bmlnbm9yZUtleVJhbmdlIGJybGFwaV9hY2NlcHRLZXlSYW5nZQorI2RlZmluZSBicmxhcGlfdW5pZ25vcmVLZXlTZXQgYnJsYXBpX2FjY2VwdEtleVNldAorI2RlZmluZSBicmxhcGlfZ2V0UmF3IGJybGFwaV9lbnRlclJhd01vZGUKKyNkZWZpbmUgYnJsYXBpX2xlYXZlUmF3IGJybGFwaV9sZWF2ZVJhd01vZGUKKyNkZWZpbmUgYnJsYXBpX3N1c3BlbmQgYnJsYXBpX3N1c3BlbmREcml2ZXIKKyNkZWZpbmUgYnJsYXBpX3Jlc3VtZSBicmxhcGlfcmVzdW1lRHJpdmVyCisjZW5kaWYgLyogQlJMQVBJX05PX1NJTkdMRV9TRVNTSU9OICovCisKKyNkZWZpbmUgQlJMRVJSX1NVQ0NFU1MgICAgICAgICAgICAgICAgIEJSTEFQSV9FUlJPUl9TVUNDRVNTCisjZGVmaW5lIEJSTEVSUl9OT01FTSAgICAgICAgICAgICAgICAgICBCUkxBUElfRVJST1JfTk9NRU0KKyNkZWZpbmUgQlJMRVJSX1RUWUJVU1kgICAgICAgICAgICAgICAgIEJSTEFQSV9FUlJPUl9UVFlCVVNZCisjZGVmaW5lIEJSTEVSUl9ERVZJQ0VCVVNZICAgICAgICAgICAgICBCUkxBUElfRVJST1JfREVWSUNFQlVTWQorI2RlZmluZSBCUkxFUlJfVU5LTk9XTl9JTlNUUlVDVElPTiAgICAgQlJMQVBJX0VSUk9SX1VOS05PV05fSU5TVFJVQ1RJT04KKyNkZWZpbmUgQlJMRVJSX0lMTEVHQUxfSU5TVFJVQ1RJT04gICAgIEJSTEFQSV9FUlJPUl9JTExFR0FMX0lOU1RSVUNUSU9OCisjZGVmaW5lIEJSTEVSUl9JTlZBTElEX1BBUkFNRVRFUiAgICAgICBCUkxBUElfRVJST1JfSU5WQUxJRF9QQVJBTUVURVIKKyNkZWZpbmUgQlJMRVJSX0lOVkFMSURfUEFDS0VUICAgICAgICAgIEJSTEFQSV9FUlJPUl9JTlZBTElEX1BBQ0tFVAorI2RlZmluZSBCUkxFUlJfQ09OTlJFRlVTRUQgICAgICAgICAgICAgQlJMQVBJX0VSUk9SX0NPTk5SRUZVU0VECisjZGVmaW5lIEJSTEVSUl9PUE5PVFNVUFAgICAgICAgICAgICAgICBCUkxBUElfRVJST1JfT1BOT1RTVVBQCisjZGVmaW5lIEJSTEVSUl9HQUlFUlIgICAgICAgICAgICAgICAgICBCUkxBUElfRVJST1JfR0FJRVJSCisjZGVmaW5lIEJSTEVSUl9MSUJDRVJSICAgICAgICAgICAgICAgICBCUkxBUElfRVJST1JfTElCQ0VSUgorI2RlZmluZSBCUkxFUlJfVU5LTk9XTlRUWSAgICAgICAgICAgICAgQlJMQVBJX0VSUk9SX1VOS05PV05UVFkKKyNkZWZpbmUgQlJMRVJSX1BST1RPQ09MX1ZFUlNJT04gICAgICAgIEJSTEFQSV9FUlJPUl9QUk9UT0NPTF9WRVJTSU9OCisjZGVmaW5lIEJSTEVSUl9FT0YgICAgICAgICAgICAgICAgICAgICBCUkxBUElfRVJST1JfRU9GCisjZGVmaW5lIEJSTEVSUl9FTVBUWUtFWSAgICAgICAgICAgICAgICBCUkxBUElfRVJST1JfRU1QVFlLRVkKKyNkZWZpbmUgQlJMRVJSX0RSSVZFUkVSUk9SICAgICAgICAgICAgIEJSTEFQSV9FUlJPUl9EUklWRVJFUlJPUgorCisvKiogQH0gKi8KKyNlbmRpZiAvKiBCUkxBUElfTk9fREVQUkVDQVRFRCAqLworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZiAvKiBfX2NwbHVzcGx1cyAqLworCisjZW5kaWYgLyogQlJMQVBJX0lOQ0xVREVEICovCmRpZmYgLS1naXQgYS9Qcm9ncmFtcy9icmxhcGlfYnJsZGVmcy5hd2sgYi9Qcm9ncmFtcy9icmxhcGlfYnJsZGVmcy5hd2sKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGJmNDU2NwotLS0gL2Rldi9udWxsCisrKyBiL1Byb2dyYW1zL2JybGFwaV9icmxkZWZzLmF3awpAQCAtMCwwICsxLDcyIEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisjICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorIworIyBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisjCisjIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisjCisjIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyMgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorIyBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyMKKyMgV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworIworIyBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworQkVHSU4geworICB3cml0ZUhlYWRlclByb2xvZ3VlKCJCUkxBUElfSU5DTFVERURfQlJMREVGUyIsICJhcGkuaCIpCit9CisKK0VORCB7CisgIHdyaXRlTWFjcm9EZWZpbml0aW9uKCJCUkxfTVNLX0JMSyIsICIoQlJMQVBJX0tFWV9UWVBFX01BU0sgfCBCUkxBUElfS0VZX0NNRF9CTEtfTUFTSykiLCAibWFzayBmb3IgY29tbWFuZCB0eXBlIikKKyAgd3JpdGVNYXNrRGVmaW5pdGlvbigiQVJHIiwgIm1hc2sgZm9yIGNvbW1hbmQgdmFsdWUvYXJndW1lbnQiKQorICB3cml0ZU1hY3JvRGVmaW5pdGlvbigiQlJMX01TS19GTEciLCAiQlJMQVBJX0tFWV9GTEFHU19NQVNLIiwgIm1hc2sgZm9yIGNvbW1hbmQgZmxhZ3MiKQorICB3cml0ZU1hY3JvRGVmaW5pdGlvbigiQlJMX01TS19DTUQiLCAiKEJSTF9NU0tfQkxLIHwgQlJMX01TS19BUkcpIiwgIm1hc2sgZm9yIGNvbW1hbmQiKQorCisgIHdyaXRlSGVhZGVyRXBpbG9ndWUoKQorfQorCitmdW5jdGlvbiB3cml0ZU1hc2tEZWZpbml0aW9uKG5hbWUsIGhlbHApIHsKKyAgd3JpdGVTeW1ib2xEZWZpbml0aW9uKG5hbWUsICJCUkxfTVNLXyIsICIiLCAiQlJMQVBJX0tFWV9DTURfIiwgIl9NQVNLIiwgaGVscCkKK30KKworZnVuY3Rpb24gd3JpdGVTeW1ib2xEZWZpbml0aW9uKG5hbWUsIGJybFByZWZpeCwgYnJsU3VmZml4LCBhcGlQcmVmaXgsIGFwaVN1ZmZpeCwgaGVscCkgeworICB3cml0ZU1hY3JvRGVmaW5pdGlvbihicmxQcmVmaXggbmFtZSBicmxTdWZmaXgsIGFwaVByZWZpeCBuYW1lIGFwaVN1ZmZpeCwgaGVscCkKK30KKworZnVuY3Rpb24gYnJsQ29tbWFuZChuYW1lLCBzeW1ib2wsIHZhbHVlLCBoZWxwKSB7CisgIHdyaXRlU3ltYm9sRGVmaW5pdGlvbihuYW1lLCAiQlJMX0NNRF8iLCAiIiwgIihCUkxBUElfS0VZX1RZUEVfQ01EIHwgQlJMQVBJX0tFWV9DTURfIiwgIikiLCBoZWxwKQorfQorCitmdW5jdGlvbiBicmxCbG9jayhuYW1lLCBzeW1ib2wsIHZhbHVlLCBoZWxwKSB7CisgIGlmIChuYW1lID09ICJQQVNTQ0hBUiIpIHsKKyAgICB3cml0ZU1hY3JvRGVmaW5pdGlvbigiQlJMX0tFWV8iIG5hbWUsICIoQlJMQVBJX0tFWV9UWVBFX1NZTSB8IDBYMDAwMCkiLCBoZWxwKQorICB9IGVsc2UgaWYgKG5hbWUgPT0gIlBBU1NLRVkiKSB7CisgICAgd3JpdGVNYWNyb0RlZmluaXRpb24oIkJSTF9LRVlfIiBuYW1lLCAiKEJSTEFQSV9LRVlfVFlQRV9TWU0gfCAwWEZGMDApIiwgaGVscCkKKyAgfSBlbHNlIHsKKyAgICB3cml0ZVN5bWJvbERlZmluaXRpb24obmFtZSwgIkJSTF9CTEtfIiwgIiIsICIoQlJMQVBJX0tFWV9UWVBFX0NNRCB8IEJSTEFQSV9LRVlfQ01EXyIsICIpIiwgaGVscCkKKyAgfQorfQorCitmdW5jdGlvbiBicmxLZXkobmFtZSwgc3ltYm9sLCB2YWx1ZSwgaGVscCkgeworICB3cml0ZU1hY3JvRGVmaW5pdGlvbigiQlJMX0tFWV8iIG5hbWUsICIoQlJMQVBJX0tFWV9TWU1fIiBnZXRCcmxhcGlLZXlOYW1lKG5hbWUpICIgJiAwWEZGKSIsIGhlbHApCit9CisKK2Z1bmN0aW9uIGJybEZsYWcobmFtZSwgc3ltYm9sLCB2YWx1ZSwgaGVscCkgeworICBpZiAobWF0Y2gobmFtZSwgIl5bXl9dKl8iKSkgeworICAgIHR5cGUgPSBzdWJzdHIobmFtZSwgMSwgUkxFTkdUSC0xKQorICAgIGlmICh0eXBlID09ICJDSEFSIikgeworICAgICAgbmFtZSA9IHN1YnN0cihuYW1lLCBSTEVOR1RIKzEpCisgICAgICB3cml0ZVN5bWJvbERlZmluaXRpb24obmFtZSwgIkJSTF9GTEdfIiB0eXBlICJfIiwgIiIsICJCUkxBUElfS0VZX0ZMR18iLCAiIiwgaGVscCkKKyAgICAgIHJldHVybgorICAgIH0KKyAgfQorICB3cml0ZVN5bWJvbERlZmluaXRpb24obmFtZSwgIkJSTF9GTEdfIiwgIiIsICJCUkxBUElfS0VZX0ZMR18iLCAiIiwgaGVscCkKK30KKworZnVuY3Rpb24gYnJsRG90KG51bWJlciwgc3ltYm9sLCB2YWx1ZSwgaGVscCkgeworICB3cml0ZVN5bWJvbERlZmluaXRpb24obnVtYmVyLCAiQlJMX0RPVCIsICIiLCAiQlJMQVBJX0RPVCIsICIiLCBoZWxwKQorfQpkaWZmIC0tZ2l0IGEvUHJvZ3JhbXMvYnJsYXBpX2NsaWVudC5jIGIvUHJvZ3JhbXMvYnJsYXBpX2NsaWVudC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgyYzE1MjAKLS0tIC9kZXYvbnVsbAorKysgYi9Qcm9ncmFtcy9icmxhcGlfY2xpZW50LmMKQEAgLTAsMCArMSwyNzgzIEBACisvKgorICogbGliYnJsYXBpIC0gQSBsaWJyYXJ5IHByb3ZpZGluZyBhY2Nlc3MgdG8gYnJhaWxsZSB0ZXJtaW5hbHMgZm9yIGFwcGxpY2F0aW9ucy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDItMjAyMyBieQorICogICBTYW11ZWwgVGhpYmF1bHQgPFNhbXVlbC5UaGliYXVsdEBlbnMtbHlvbi5vcmc+CisgKiAgIFPDqWJhc3RpZW4gSGluZGVyZXIgPFNlYmFzdGllbi5IaW5kZXJlckBlbnMtbHlvbi5vcmc+CisgKgorICogbGliYnJsYXBpIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKKy8qIGFwaV9jbGllbnQuYyBoYW5kbGVzIGNvbm5lY3Rpb24gd2l0aCBCcmxBcGkgKi8KKworI2lmZGVmIF9fQU5EUk9JRF9fCisjZGVmaW5lIF9fQU5EUk9JRF9BUElfXyAyMQorI2VuZGlmIC8qIF9fQU5EUk9JRF9fICovCisKKyNkZWZpbmUgV0lOX0VSUk5PX1NUT1JBR0VfQ0xBU1Mgc3RhdGljCisjaW5jbHVkZSAicHJvbG9ndWUuaCIKKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkZGVmLmg+CisjaW5jbHVkZSA8c3RkYXJnLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxmY250bC5oPgorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisjaW5jbHVkZSA8bG9jYWxlLmg+CisjaW5jbHVkZSA8YXNzZXJ0Lmg+CisjaW5jbHVkZSA8bGltaXRzLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisKKyNpZm5kZWYgX19NSU5HVzMyX18KKyNpZmRlZiBIQVZFX0xBTkdJTkZPX0gKKyNpbmNsdWRlIDxsYW5naW5mby5oPgorI2VuZGlmIC8qIEhBVkVfTEFOR0lORk9fSCAqLworI2VuZGlmIC8qIF9fTUlOR1czMl9fICovCisKKyNpZmRlZiBfX01JTkdXMzJfXworI2luY2x1ZGUgPHdzMnRjcGlwLmg+CisjaW5jbHVkZSAid2luX3B0aHJlYWQuaCIKKworI2luY2x1ZGUgIndpbl9lcnJuby5oIgorCisjZGVmaW5lIHN5c2xvZyhsZXZlbCxmbXQsLi4uKSBmcHJpbnRmKHN0ZGVyciwjbGV2ZWwgIjogIiBmbXQsICMjIF9fVkFfQVJHU19fKQorCisjZWxzZSAvKiBfX01JTkdXMzJfXyAqLworI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyNpbmNsdWRlIDxzeXMvdW4uaD4KKyNpbmNsdWRlIDxuZXRpbmV0L2luLmg+CisjaW5jbHVkZSA8bmV0aW5ldC90Y3AuaD4KKyNpbmNsdWRlIDxhcnBhL2luZXQuaD4KKyNpbmNsdWRlIDxuZXRkYi5oPgorCisjaW5jbHVkZSA8cHRocmVhZC5oPgorI2luY2x1ZGUgPHN5c2xvZy5oPgorCisjaWYgZGVmaW5lZChfX0FQUExFX18pCisjaW5jbHVkZSA8bWFjaC9tYWNoLmg+CisjaW5jbHVkZSA8bWFjaC9zZW1hcGhvcmUuaD4KKworI2Vsc2UgLyogc2VtYXBob3JlIHN1cHBvcnQgKi8KKyNpbmNsdWRlIDxzZW1hcGhvcmUuaD4KKyNlbmRpZiAvKiBzZW1hcGhvcmUgc3VwcG9ydCAqLworCisjaWZkZWYgSEFWRV9TWVNfU0VMRUNUX0gKKyNpbmNsdWRlIDxzeXMvc2VsZWN0Lmg+CisjZW5kaWYgLyogSEFWRV9TWVNfU0VMRUNUX0ggKi8KKyNpZmRlZiBIQVZFX1NZU19QT0xMX0gKKyNpbmNsdWRlIDxwb2xsLmg+CisjZW5kaWYgLyogSEFWRV9TWVNfUE9MTF9IICovCisjZW5kaWYgLyogX19NSU5HVzMyX18gKi8KKworI2luY2x1ZGUgPHN5cy90aW1lLmg+CisjaW5jbHVkZSAiZ2V0dGltZS5oIgorCisjaWZkZWYgbGludXgKKyNpbmNsdWRlIDxzeXMvc3lzbWFjcm9zLmg+CisjaW5jbHVkZSA8bGludXgvbWFqb3IuaD4KKyNpbmNsdWRlIDxsaW51eC90dHkuaD4KKyNpbmNsdWRlIDxsaW51eC92dC5oPgorI2RlZmluZSBNQVhJTVVNX1ZJUlRVQUxfQ09OU09MRSBNQVhfTlJfQ09OU09MRVMKKyNlbmRpZiAvKiBsaW51eCAqLworCisjaWZkZWYgX19PcGVuQlNEX18KKyNkZWZpbmUgTUFYSU1VTV9WSVJUVUFMX0NPTlNPTEUgMTYKKyNlbmRpZiAvKiBfX09wZW5CU0RfXyAqLworCisjaWZuZGVmIE1BWElNVU1fVklSVFVBTF9DT05TT0xFCisjZGVmaW5lIE1BWElNVU1fVklSVFVBTF9DT05TT0xFIDEKKyNlbmRpZiAvKiBNQVhJTVVNX1ZJUlRVQUxfQ09OU09MRSAqLworCisjaWZkZWYgSEFWRV9TRF9TRVNTSU9OX0dFVF9WVAorI2luY2x1ZGUgPHN5c3RlbWQvc2QtbG9naW4uaD4KKyNlbmRpZiAvKiBIQVZFX1NEX1NFU1NJT05fR0VUX1ZUICovCisKKyNkZWZpbmUgQlJMQVBJX05PX0RFUFJFQ0FURUQKKyNpbmNsdWRlICJicmxhcGkuaCIKKyNpbmNsdWRlICJicmxhcGlfcHJvdG9jb2wuaCIKKworI2RlZmluZSBCUkxBUEkoZnVuKSBicmxhcGlfICMjIGZ1bgorI2luY2x1ZGUgImJybGFwaV9jb21tb24uaCIKKworI2lmbmRlZiBNSU4KKyNkZWZpbmUgTUlOKGEsIGIpICgoKGEpIDwgKGIpKT8gKGEpOiAoYikpCisjZW5kaWYgLyogTUlOICovCisKKyNpZm5kZWYgTUFYCisjZGVmaW5lIE1BWChhLCBiKSAoKChhKSA+IChiKSk/IChhKTogKGIpKQorI2VuZGlmIC8qIE1BWCAqLworCisvKiBBUEkgc3RhdGVzICovCisjZGVmaW5lIFNUQ09OTkVDVEVEIDEKKyNkZWZpbmUgU1RSQVcgMgorI2RlZmluZSBTVFNVU1BFTkQgNAorI2RlZmluZSBTVENPTlRST0xMSU5HVFRZIDgKKworI2lmZGVmIFdJTkRPV1MKKyNpZmRlZiBfX01JTkdXMzJfXworc3RhdGljIFdTQURBVEEgd3NhZGF0YTsKKyNlbmRpZiAvKiBfX01JTkdXMzJfXyAqLworCitzdGF0aWMgdm9pZCogR2V0UHJvYyhjb25zdCBjaGFyICpsaWJyYXJ5LCBjb25zdCBjaGFyICpmdW4pIHsKKyAgSE1PRFVMRSBtb2R1bGU7CisgIHZvaWQgKnJldDsKKyAgaWYgKCEobW9kdWxlID0gTG9hZExpYnJhcnkobGlicmFyeSkpKSByZXR1cm4gKHZvaWQqKSgtMSk7CisgIGlmICgocmV0ID0gR2V0UHJvY0FkZHJlc3MobW9kdWxlLCBmdW4pKSkgcmV0dXJuIHJldDsKKyAgRnJlZUxpYnJhcnkobW9kdWxlKTsKKyAgcmV0dXJuICh2b2lkKikoLTEpOworfQorCisjZGVmaW5lIENIRUNLUFJPQyhsaWJyYXJ5LCBuYW1lKSBcCisgIChuYW1lIyNQcm9jICYmIG5hbWUjI1Byb2MgIT0gKHZvaWQqKSgtMSkpCisjZGVmaW5lIENIRUNLR0VUUFJPQyhsaWJyYXJ5LCBuYW1lKSBcCisgIChuYW1lIyNQcm9jICE9ICh2b2lkKikoLTEpICYmIChuYW1lIyNQcm9jIHx8IChuYW1lIyNQcm9jID0gR2V0UHJvYyhsaWJyYXJ5LCNuYW1lKSkgIT0gKHZvaWQqKSgtMSkpKQorI2RlZmluZSBXSU5fUFJPQ19TVFVCKG5hbWUpIHR5cGVvZihuYW1lKSAoKm5hbWUjI1Byb2MpOworCisKK3N0YXRpYyBXSU5fUFJPQ19TVFVCKEdldENvbnNvbGVXaW5kb3cpOworCisjaWZkZWYgX19NSU5HVzMyX18KK3N0YXRpYyBXSU5fUFJPQ19TVFVCKHdjc2xlbik7CisKK3N0YXRpYyBXSU5fUFJPQ19TVFVCKGdldGFkZHJpbmZvKTsKKyNkZWZpbmUgZ2V0YWRkcmluZm8oaG9zdCxwb3J0LGhpbnRzLHJlcykgZ2V0YWRkcmluZm9Qcm9jKGhvc3QscG9ydCxoaW50cyxyZXMpCitzdGF0aWMgV0lOX1BST0NfU1RVQihmcmVlYWRkcmluZm8pOworI2RlZmluZSBmcmVlYWRkcmluZm8ocmVzKSBmcmVlYWRkcmluZm9Qcm9jKHJlcykKKyNlbmRpZiAvKiBfX01JTkdXMzJfXyAqLworI2VuZGlmIC8qIFdJTkRPV1MgKi8KKworLyogV2UgbmVlZCB0byBkZWNsYXJlIHRoZXNlIGFzIHdlYWsgZXh0ZXJuYWwgcmVmZXJlbmNlcyB0byBkZXRlcm1pbmUKKyAqIGF0IHJ1bnRpbWUgd2hldGhlciBsaWJwdGhyZWFkIGlzIHVzZWQgb3Igbm90LgorICogV2UgYWxzbyBjYW4ndCByZWx5IG9uIHRoZSBmdW5jdGlvbnMgcHJvdG90eXBlcy4KKyAqLworI2lmIGRlZmluZWQoV0lORE9XUykKKworI2VsaWYgZGVmaW5lZChfX0FQUExFX18pCisjcHJhZ21hIHdlYWsgcHRocmVhZF9rZXlfY3JlYXRlCisjcHJhZ21hIHdlYWsgcHRocmVhZF9vbmNlCisjcHJhZ21hIHdlYWsgcHRocmVhZF9nZXRzcGVjaWZpYworI3ByYWdtYSB3ZWFrIHB0aHJlYWRfc2V0c3BlY2lmaWMKKwordHlwZWRlZiBzZW1hcGhvcmVfdCBzZW1fdDsKKworc3RhdGljIGludAorc2VtX2luaXQgKHNlbV90ICpzZW0sIGludCBzaGFyZWQsIGludCB2YWx1ZSkgeworICByZXR1cm4gc2VtYXBob3JlX2NyZWF0ZShtYWNoX3Rhc2tfc2VsZigpLCBzZW0sIFNZTkNfUE9MSUNZX0ZJRk8sIHZhbHVlKTsKK30KKworc3RhdGljIGludAorc2VtX3Bvc3QgKHNlbV90ICpzZW0pIHsKKyAgcmV0dXJuIHNlbWFwaG9yZV9zaWduYWwoKnNlbSk7Cit9CisKK3N0YXRpYyBpbnQKK3NlbV93YWl0IChzZW1fdCAqc2VtKSB7CisgIHJldHVybiBzZW1hcGhvcmVfd2FpdCgqc2VtKTsKK30KKworc3RhdGljIGludAorc2VtX3RpbWVkd2FpdCAoc2VtX3QgKnNlbSwgY29uc3Qgc3RydWN0IHRpbWVzcGVjICphYnMpIHsKKyAgc3RydWN0IHRpbWV2YWwgbm93OworICBnZXRSZWFsVGltZSgmbm93KTsKKworICBtYWNoX3RpbWVzcGVjX3QgcmVsID0geworICAgIC50dl9zZWMgPSBhYnMtPnR2X3NlYyAtIG5vdy50dl9zZWMsCisgICAgLnR2X25zZWMgPSBhYnMtPnR2X25zZWMgLSAobm93LnR2X3VzZWMgKiAxMDAwKQorICB9OworCisgIGlmIChyZWwudHZfbnNlYyA8IDApIHJlbC50dl9zZWMgLT0gMSwgcmVsLnR2X25zZWMgKz0gMTAwMDAwMDAwMDsKKyAgaWYgKHJlbC50dl9zZWMgPCAwKSByZWwudHZfc2VjID0gMCwgcmVsLnR2X25zZWMgPSAwOworCisgIHJldHVybiBzZW1hcGhvcmVfdGltZWR3YWl0KCpzZW0sIHJlbCk7Cit9CisKK3N0YXRpYyBpbnQKK3NlbV90cnl3YWl0IChzZW1fdCAqc2VtKSB7CisgIG1hY2hfdGltZXNwZWNfdCByZWwgPSB7IC50dl9zZWM9MCwgLnR2X25zZWM9MCB9OworICByZXR1cm4gc2VtYXBob3JlX3RpbWVkd2FpdCgqc2VtLCByZWwpOworfQorCitzdGF0aWMgaW50CitzZW1fZGVzdHJveSAoc2VtX3QgKnNlbSkgeworICByZXR1cm4gc2VtYXBob3JlX2Rlc3Ryb3kobWFjaF90YXNrX3NlbGYoKSwgKnNlbSk7Cit9CisKKyNlbGlmIGRlZmluZWQoX19HTlVDX18pIHx8IGRlZmluZWQoX19zdW5fXykKKyNwcmFnbWEgd2VhayBwdGhyZWFkX2tleV9jcmVhdGUKKyNwcmFnbWEgd2VhayBwdGhyZWFkX29uY2UKKyNwcmFnbWEgd2VhayBwdGhyZWFkX2dldHNwZWNpZmljCisjcHJhZ21hIHdlYWsgcHRocmVhZF9zZXRzcGVjaWZpYworI3ByYWdtYSB3ZWFrIHNlbV9pbml0CisjcHJhZ21hIHdlYWsgc2VtX3Bvc3QKKyNwcmFnbWEgd2VhayBzZW1fd2FpdAorI3ByYWdtYSB3ZWFrIHNlbV9kZXN0cm95CisjZW5kaWYgLyogd2VhayBleHRlcm5hbCByZWZlcmVuY2VzICovCisKKy8qKiBrZXkgcHJlc3NlcyBidWZmZXIgc2l6ZQorICoKKyAqIGtleSBwcmVzc2VzIHdvbid0IGJlIGxvc3QgcHJvdmlkZWQgbm8gbW9yZSB0aGFuIEJSTF9LRVlCVUZfU0laRSBrZXkgcHJlc3NlcworICogYXJlIGRvbmUgYmV0d2VlbiB0d28gY2FsbHMgdG8gYnJsYXBpX3JlYWQqIGlmIGEgY2FsbCB0byBhbm90aGVyIGZ1bmN0aW9uIGlzCisgKiBkb25lIGluIHRoZSBtZWFud2hpbGUgKHdoaWNoIG5lZWRzIHNvbWV3aGVyZSB0byBwdXQgdGhlbSBiZWZvcmUgYmVpbmcgYWJsZQorICogdG8gZ2V0IHJlc3BvbnNlcyBmcm9tIHRoZSBzZXJ2ZXIpCisqLworI2RlZmluZSBCUkxfS0VZQlVGX1NJWkUgMjU2CisKK3N0cnVjdCBicmxhcGlfcGFyYW1ldGVyQ2FsbGJhY2tfdCB7CisgIGJybGFwaV9wYXJhbV90IHBhcmFtZXRlcjsKKyAgYnJsYXBpX3BhcmFtX3N1YnBhcmFtX3Qgc3VicGFyYW07CisgIGJybGFwaV9wYXJhbV9mbGFnc190IGZsYWdzOworICBicmxhcGlfcGFyYW1DYWxsYmFja190IGZ1bmM7CisgIHZvaWQgKnByaXY7CisgIHN0cnVjdCBicmxhcGlfcGFyYW1ldGVyQ2FsbGJhY2tfdCAqcHJldiwgKm5leHQ7Cit9OworCitzdHJ1Y3QgYnJsYXBpX2hhbmRsZV90IHsgLyogQ29ubmVjdGlvbi1zcGVjaWZpYyBpbmZvcm1hdGlvbiAqLworICB1aW50MzJfdCBzZXJ2ZXJWZXJzaW9uOworICB1bnNpZ25lZCBpbnQgYnJseDsKKyAgdW5zaWduZWQgaW50IGJybHk7CisgIGJybGFwaV9maWxlRGVzY3JpcHRvciBmaWxlRGVzY3JpcHRvcjsgLyogRGVzY3JpcHRvciBvZiB0aGUgc29ja2V0IGNvbm5lY3RlZCB0byBCcmxBcGkgKi8KKyAgaW50IGFkZHJmYW1pbHk7IC8qIEFkZHJlc3MgZmFtaWx5IG9mIHRoZSBzb2NrZXQgKi8KKyAgLyogdG8gcHJvdGVjdCBjb25jdXJyZW50IGZkIHdyaXRlIG9wZXJhdGlvbnMgKi8KKyAgcHRocmVhZF9tdXRleF90IGZpbGVEZXNjcmlwdG9yX211dGV4OworICAvKiB0byBwcm90ZWN0IGNvbmN1cnJlbnQgZmQgcmVxdWVzdHMgKi8KKyAgcHRocmVhZF9tdXRleF90IHJlcV9tdXRleDsKKyAgLyogdG8gcHJvdGVjdCBjb25jdXJyZW50IGtleSByZWFkaW5nICovCisgIHB0aHJlYWRfbXV0ZXhfdCBrZXlfbXV0ZXg7CisgIC8qIHRvIHByb3RlY3QgY29uY3VycmVudCBmZCBrZXkgZXZlbnRzIGFuZCByZXF1ZXN0IGFuc3dlcnMsIGFsc28gcHJvdGVjdHMgdGhlCisgICAqIGtleSBidWZmZXIgKi8KKyAgLyogT25seSB0d28gdGhyZWFkcyBtaWdodCB3YW50IHRvIHRha2UgaXQ6IG9uZSB0aGF0IGFscmVhZHkgZ290CisgICogYnJsYXBpX3JlcV9tdXRleCwgb3Igb25lIHRoYXQgZ290IGtleV9tdXRleCAqLworICBwdGhyZWFkX211dGV4X3QgcmVhZF9tdXRleDsKKyAgUGFja2V0IHBhY2tldDsKKyAgLyogd2hlbiBzb21lb25lIGlzIGFscmVhZHkgcmVhZGluZyAocmVhZGluZz09MSksIHB1dCBleHBlY3RlZCB0eXBlLAorICAgKiBhZGRyZXNzL3NpemUgb2YgYnVmZmVyLCBhbmQgYWRkcmVzcyBvZiByZXR1cm4gdmFsdWUsIHRoZW4gd2FpdCBvbiBzZW1hcGhvcmUsCisgICAqIHRoZSBidWZmZXIgZ2V0cyBmaWxsZWQsIGFsdFJlcyB0b28gKi8KKyAgaW50IHJlYWRpbmc7CisgIGJybGFwaV9wYWNrZXRUeXBlX3QgYWx0RXhwZWN0ZWRQYWNrZXRUeXBlOworICB1bnNpZ25lZCBjaGFyICphbHRQYWNrZXQ7CisgIHNpemVfdCBhbHRTaXplOworICBzc2l6ZV90ICphbHRSZXM7CisgIHNlbV90ICphbHRTZW07CisgIGludCBzdGF0ZTsKKyAgcHRocmVhZF9tdXRleF90IHN0YXRlX211dGV4OworCisjaWZkZWYgTENfR0xPQkFMX0xPQ0FMRQorICBsb2NhbGVfdCBkZWZhdWx0X2xvY2FsZTsKKyNlbmRpZiAvKiBMQ19HTE9CQUxfTE9DQUxFICovCisKKyAgLyoga2V5IHByZXNzZXMgYnVmZmVyLCBmb3Igd2hlbiBrZXkgcHJlc3NlcyBhcmUgcmVjZWl2ZWQgaW5zdGVhZCBvZgorICAgKiBhY2tub3dsZWRnZW1lbnRzIGZvciBpbnN0YW5jZQorICAgKgorICAgKiBldmVyeSBmdW5jdGlvbiBtdXN0IGhlbmNlIGJlIGFibGUgdG8gcmVhZCBhdCBsZWFzdCBzaXplb2YoYnJsYXBpX2tleUNvZGVfdCkgKi8KKyAgYnJsYXBpX2tleUNvZGVfdCBrZXlidWZbQlJMX0tFWUJVRl9TSVpFXTsKKyAgdW5zaWduZWQga2V5YnVmX25leHQ7CisgIHVuc2lnbmVkIGtleWJ1Zl9uYjsKKyAgdW5pb24geworICAgIGJybGFwaV9leGNlcHRpb25IYW5kbGVyX3Qgd2l0aG91dEhhbmRsZTsKKyAgICBicmxhcGlfX2V4Y2VwdGlvbkhhbmRsZXJfdCB3aXRoSGFuZGxlOworICB9IGV4Y2VwdGlvbkhhbmRsZXI7CisgIGludCBleGNlcHRpb25fc3luYzsKKyAgaW50IGV4Y2VwdGlvbl9lcnJvcjsKKyAgcHRocmVhZF9tdXRleF90IGV4Y2VwdGlvbkhhbmRsZXJfbXV0ZXg7CisKKyAgc3RydWN0IGJybGFwaV9wYXJhbWV0ZXJDYWxsYmFja190ICpwYXJhbWV0ZXJDYWxsYmFja3M7CisgIC8qIFRoaXMgcHJvdGVjdHMgdGhlIGNhbGxiYWNrIGxpc3QsIGJ1dCBhbHNvIGNhbGxiYWNrIGNhbGxpbmcgY29udmVudGlvbnMgaW4KKyAgICogZ2VuZXJhbDoKKyAgICogY2FsbGJhY2tzIGFyZSBjYWxsZWQgaW4gdGhlIHVwZGF0ZSBvcmRlciwgYW5kIG5vdCBhZnRlciB1bnJlZ2lzdHJhdGlvbiAqLworICBwdGhyZWFkX211dGV4X3QgY2FsbGJhY2tzX211dGV4OworICAvKiBUaGUgY2FsbGJhY2sgbWlnaHQgd2FudCB0byB1bnJlZ2lzdGVyIGl0c2VsZiwgd2hpbGUgd2UgYXJlIHByb2Nlc3NpbmcgdGhlCisgICAqIGxpc3Qgb2YgY2FsbGJhY2tzLiBUaGlzIHJlY29yZHMgd2hlcmUgd2UgYXJlIGluIHRoZSBsaXN0LCB0byBza2lwIHRoZQorICAgKiBkZWxldGVkIGl0ZW0uICovCisgIHN0cnVjdCBicmxhcGlfcGFyYW1ldGVyQ2FsbGJhY2tfdCAqbmV4dENhbGxiYWNrOworCisgIHZvaWQgKmNsaWVudERhdGE7IC8qIFByaXZhdGUgY2xpZW50IGRhdGEgKi8KK307CisKKy8qIEZ1bmN0aW9uIGJybGFwaV9nZXRMaWJyYXJ5VmVyc2lvbiAqLwordm9pZCBicmxhcGlfZ2V0TGlicmFyeVZlcnNpb24oaW50ICptYWpvciwgaW50ICptaW5vciwgaW50ICpyZXZpc2lvbikKK3sKKyAgKm1ham9yID0gQlJMQVBJX01BSk9SOworICAqbWlub3IgPSBCUkxBUElfTUlOT1I7CisgICpyZXZpc2lvbiA9IEJSTEFQSV9SRVZJU0lPTjsKK30KKworLyogRnVuY3Rpb24gYnJsYXBpX2dldEhhbmRsZVNpemUgKi8KK3NpemVfdCBCUkxBUElfU1REQ0FMTCBicmxhcGlfZ2V0SGFuZGxlU2l6ZSh2b2lkKQoreworICByZXR1cm4gc2l6ZW9mKGJybGFwaV9oYW5kbGVfdCk7Cit9CisKK3N0YXRpYyBicmxhcGlfaGFuZGxlX3QgZGVmYXVsdEhhbmRsZTsKKworLyogYnJsYXBpX2luaXRpYWxpemVIYW5kbGUgKi8KKy8qIEluaXRpYWxpemUgYSBCcmxBUEkgaGFuZGxlICovCitzdGF0aWMgdm9pZCBicmxhcGlfaW5pdGlhbGl6ZUhhbmRsZShicmxhcGlfaGFuZGxlX3QgKmhhbmRsZSkKK3sKKyAgaGFuZGxlLT5icmx4ID0gMDsKKyAgaGFuZGxlLT5icmx5ID0gMDsKKyAgaGFuZGxlLT5maWxlRGVzY3JpcHRvciA9IEJSTEFQSV9JTlZBTElEX0ZJTEVfREVTQ1JJUFRPUjsKKyAgaGFuZGxlLT5hZGRyZmFtaWx5ID0gMDsKKyAgcHRocmVhZF9tdXRleF9pbml0KCZoYW5kbGUtPmZpbGVEZXNjcmlwdG9yX211dGV4LCBOVUxMKTsKKyAgcHRocmVhZF9tdXRleF9pbml0KCZoYW5kbGUtPnJlcV9tdXRleCwgTlVMTCk7CisgIHB0aHJlYWRfbXV0ZXhfaW5pdCgmaGFuZGxlLT5rZXlfbXV0ZXgsIE5VTEwpOworICBwdGhyZWFkX211dGV4X2luaXQoJmhhbmRsZS0+cmVhZF9tdXRleCwgTlVMTCk7CisgIGJybGFwaV9pbml0aWFsaXplUGFja2V0KCZoYW5kbGUtPnBhY2tldCk7CisgIGhhbmRsZS0+cmVhZGluZyA9IDA7CisgIGhhbmRsZS0+YWx0RXhwZWN0ZWRQYWNrZXRUeXBlID0gMDsKKyAgaGFuZGxlLT5hbHRQYWNrZXQgPSBOVUxMOworICBoYW5kbGUtPmFsdFNpemUgPSAwOworICBoYW5kbGUtPmFsdFJlcyA9IE5VTEw7CisgIGhhbmRsZS0+YWx0U2VtID0gTlVMTDsKKyAgaGFuZGxlLT5zdGF0ZSA9IDA7CisgIHB0aHJlYWRfbXV0ZXhfaW5pdCgmaGFuZGxlLT5zdGF0ZV9tdXRleCwgTlVMTCk7CisKKyNpZmRlZiBMQ19HTE9CQUxfTE9DQUxFCisgIGhhbmRsZS0+ZGVmYXVsdF9sb2NhbGUgPSBMQ19HTE9CQUxfTE9DQUxFOworI2VuZGlmIC8qIExDX0dMT0JBTF9MT0NBTEUgKi8KKworICBtZW1zZXQoaGFuZGxlLT5rZXlidWYsIDAsIHNpemVvZihoYW5kbGUtPmtleWJ1ZikpOworICBoYW5kbGUtPmtleWJ1Zl9uZXh0ID0gMDsKKyAgaGFuZGxlLT5rZXlidWZfbmIgPSAwOworICBpZiAoaGFuZGxlID09ICZkZWZhdWx0SGFuZGxlKQorICAgIGhhbmRsZS0+ZXhjZXB0aW9uSGFuZGxlci53aXRob3V0SGFuZGxlID0gYnJsYXBpX2RlZmF1bHRFeGNlcHRpb25IYW5kbGVyOworICBlbHNlCisgICAgaGFuZGxlLT5leGNlcHRpb25IYW5kbGVyLndpdGhIYW5kbGUgPSBicmxhcGlfX2RlZmF1bHRFeGNlcHRpb25IYW5kbGVyOworICBoYW5kbGUtPmV4Y2VwdGlvbl9zeW5jID0gMDsKKyAgaGFuZGxlLT5leGNlcHRpb25fZXJyb3IgPSBCUkxBUElfRVJST1JfU1VDQ0VTUzsKKyAgcHRocmVhZF9tdXRleF9pbml0KCZoYW5kbGUtPmV4Y2VwdGlvbkhhbmRsZXJfbXV0ZXgsIE5VTEwpOworICBoYW5kbGUtPnBhcmFtZXRlckNhbGxiYWNrcyA9IE5VTEw7CisgIHsKKyAgICBwdGhyZWFkX211dGV4YXR0cl90IG1hdHRyOworICAgIHB0aHJlYWRfbXV0ZXhhdHRyX2luaXQoJm1hdHRyKTsKKyAgICBwdGhyZWFkX211dGV4YXR0cl9zZXR0eXBlKCZtYXR0ciwgUFRIUkVBRF9NVVRFWF9SRUNVUlNJVkUpOworICAgIHB0aHJlYWRfbXV0ZXhfaW5pdCgmaGFuZGxlLT5jYWxsYmFja3NfbXV0ZXgsICZtYXR0cik7CisgIH0KKyAgaGFuZGxlLT5uZXh0Q2FsbGJhY2sgPSBOVUxMOworICBoYW5kbGUtPmNsaWVudERhdGEgPSBOVUxMOworfQorCisvKiBicmxhcGlfZG9XYWl0Rm9yUGFja2V0ICovCisvKiBXYWl0cyBmb3IgdGhlIHNwZWNpZmllZCB0eXBlIG9mIHBhY2tldDogbXVzdCBiZSBjYWxsZWQgd2l0aCBicmxhcGlfcmVxX211dGV4IGxvY2tlZCAqLworLyogZGVhZGxpbmUgY2FuIGJlIHVzZWQgdG8gc3RvcCB3YWl0aW5nIGFmdGVyIGEgZ2l2ZW4gZGF0ZSwgb3Igd2FpdCBmb3JldmVyIChOVUxMKSAqLworLyogSWYgdGhlIHJpZ2h0IHBhY2tldCB0eXBlIGFycml2ZXMsIHJldHVybnMgaXRzIHNpemUgKi8KKy8qIFJldHVybnMgLTEgaWYgYSBub24tZmF0YWwgZXJyb3IgaXMgZW5jb3VudGVyZWQgKi8KKy8qIFJldHVybnMgLTIgb24gZW5kIG9mIGZpbGUgKi8KKy8qIFJldHVybnMgLTMgaWYgdGhlIGF2YWlsYWJsZSBwYWNrZXQgd2FzIG5vdCBmb3IgdXMgKi8KKy8qIFJldHVybnMgLTQgb24gdGltZW91dCAoaWYgZGVhZGxpbmUgaXMgbm90IE5VTEwpICovCisvKiBDYWxscyB0aGUgZXhjZXB0aW9uIGhhbmRsZXIgaWYgYW4gZXhjZXB0aW9uIGlzIGVuY291bnRlcmVkICovCitzdGF0aWMgc3NpemVfdCBicmxhcGlfX2RvV2FpdEZvclBhY2tldChicmxhcGlfaGFuZGxlX3QgKmhhbmRsZSwgYnJsYXBpX3BhY2tldFR5cGVfdCBleHBlY3RlZFBhY2tldFR5cGUsIHZvaWQgKnBhY2tldCwgc2l6ZV90IHBhY2tldFNpemUsIHN0cnVjdCB0aW1ldmFsICpkZWFkbGluZSkKK3sKKyAgdWludDMyX3QgKnVpbnQzMlBhY2tldCA9IGhhbmRsZS0+cGFja2V0LmNvbnRlbnQ7CisgIGNvbnN0IGJybGFwaV9wYWNrZXRfdCAqbG9jYWxQYWNrZXQgPSAoYnJsYXBpX3BhY2tldF90ICopIHVpbnQzMlBhY2tldDsKKyAgY29uc3QgYnJsYXBpX2Vycm9yUGFja2V0X3QgKmVycm9yUGFja2V0ID0gJmxvY2FsUGFja2V0LT5lcnJvcjsKKworICB1aW50MzJfdCBzaXplOworICBicmxhcGlfcGFja2V0VHlwZV90IHR5cGU7CisgIGludCByZXQgPSAwOworCisgIHN0cnVjdCB0aW1ldmFsIG5vdzsKKyAgbG9uZyBkZWxheSA9IDA7CisgIGludCBwb2xsZWQgPSAwOyAvKiBXaGV0aGVyIHdlIGhhdmUgcG9sbGVkIGF0IGxlYXN0IG9uY2UgKi8KKworICBkbyB7CisgICAgaWYgKGRlYWRsaW5lKSB7CisgICAgICBnZXRSZWFsVGltZSgmbm93KTsKKyAgICAgIGRlbGF5ID0gKGRlYWRsaW5lLT50dl9zZWMgIC0gbm93LnR2X3NlYyApICogMTAwMCArCisJICAgICAgKGRlYWRsaW5lLT50dl91c2VjIC0gbm93LnR2X3VzZWMpIC8gMTAwMDsKKyAgICAgIGlmIChkZWxheSA8IDApIHsKKwlpZiAocG9sbGVkKSB7CisJICAvKiBUaGUgZGVhZGxpbmUgaGFzIGV4cGlyZWQsIGRvbid0IHdhaXQgbW9yZSAqLworCSAgcmV0dXJuIC00OworCX0KKwkvKiBQb2xsIGF0IGxlYXN0IG9uY2UgKi8KKwlkZWxheSA9IDA7CisgICAgICB9CisgICAgfQorICAgIHBvbGxlZCA9IDE7CisjaWZkZWYgX19NSU5HVzMyX18KKyAgICBEV09SRCBkdzsKKyAgICBkdyA9IFdhaXRGb3JTaW5nbGVPYmplY3QoaGFuZGxlLT5wYWNrZXQub3ZlcmwuaEV2ZW50LCBkZWFkbGluZSA/IGRlbGF5IDogSU5GSU5JVEUpOworICAgIGlmIChkdyA9PSBXQUlUX0ZBSUxFRCkgeworICAgICAgc2V0U3lzdGVtRXJybm8oKTsKKyAgICAgIExpYmNFcnJvcigid2FpdGluZyBmb3IgcGFja2V0Iik7CisgICAgICByZXR1cm4gLTI7CisgICAgfQorCisgICAgaWYgKGR3ID09IFdBSVRfT0JKRUNUXzApCisjZWxzZSAvKiBfX01JTkdXMzJfXyAqLworI2lmZGVmIEhBVkVfUE9MTAorICAgIHN0cnVjdCBwb2xsZmQgcG9sbGZkOworCisgICAgcG9sbGZkLmZkID0gaGFuZGxlLT5maWxlRGVzY3JpcHRvcjsKKyAgICBwb2xsZmQuZXZlbnRzID0gUE9MTElOOworICAgIHBvbGxmZC5yZXZlbnRzID0gMDsKKworICAgIGlmIChwb2xsKCZwb2xsZmQsIDEsIGRlYWRsaW5lID8gZGVsYXkgOiAtMSkgPCAwKSB7CisgICAgICBMaWJjRXJyb3IoIndhaXRpbmcgZm9yIHBhY2tldCIpOworICAgICAgcmV0dXJuIC0yOworICAgIH0KKworICAgIGlmIChwb2xsZmQucmV2ZW50cyAmIFBPTExJTikKKyNlbHNlIC8qIEhBVkVfUE9MTCAqLworICAgIGZkX3NldCBzb2Nrc2V0OworICAgIHN0cnVjdCB0aW1ldmFsIHRpbWVvdXQsICpwdGltZW91dCA9IE5VTEw7CisgICAgaWYgKGRlYWRsaW5lKSB7CisgICAgICB0aW1lb3V0LnR2X3NlYyA9IGRlbGF5IC8gMTAwMDsKKyAgICAgIHRpbWVvdXQudHZfdXNlYyA9IChkZWxheSAlIDEwMDApICogMTAwMDsKKyAgICAgIHB0aW1lb3V0ID0gJnRpbWVvdXQ7CisgICAgfQorCisgICAgRkRfWkVSTygmc29ja3NldCk7CisgICAgRkRfU0VUKGhhbmRsZS0+ZmlsZURlc2NyaXB0b3IsICZzb2Nrc2V0KTsKKyAgICBpZiAoc2VsZWN0KGhhbmRsZS0+ZmlsZURlc2NyaXB0b3IrMSwgJnNvY2tzZXQsIE5VTEwsIE5VTEwsIHB0aW1lb3V0KSA8IDApIHsKKyAgICAgIExpYmNFcnJvcigid2FpdGluZyBmb3IgcGFja2V0Iik7CisgICAgICByZXR1cm4gLTI7CisgICAgfQorCisgICAgaWYgKEZEX0lTU0VUKGhhbmRsZS0+ZmlsZURlc2NyaXB0b3IsICZzb2Nrc2V0KSkKKyNlbmRpZiAvKiAhSEFWRV9QT0xMICovCisjZW5kaWYgLyogX19NSU5HVzMyX18gKi8KKyAgICB7CisgICAgICAvKiBTb21lIGRhdGEgaXMgaGVyZSwgcmVhZCBpdCAqLworICAgICAgcmV0ID0gYnJsYXBpX19yZWFkUGFja2V0KCZoYW5kbGUtPnBhY2tldCwgaGFuZGxlLT5maWxlRGVzY3JpcHRvcik7CisgICAgICBpZiAocmV0ID09IC0xKSB7CisJTGliY0Vycm9yKCJyZWFkaW5nIHBhY2tldCIpOworICAgICAgfQorICAgICAgaWYgKHJldCA8IDApIHsKKwkvKiBlcnJvciBvciBlbmQgb2YgZmlsZSAqLworCXJldHVybiAtMjsKKyAgICAgIH0KKyAgICB9CisgIH0gd2hpbGUgKHJldCA9PSAwKTsKKworICAvKiBHb3QgYSBwYWNrZXQsIHByb2Nlc3MgaXQuICAqLworICBzaXplID0gaGFuZGxlLT5wYWNrZXQuaGVhZGVyLnNpemU7CisgIHR5cGUgPSBoYW5kbGUtPnBhY2tldC5oZWFkZXIudHlwZTsKKworICBpZiAodHlwZT09ZXhwZWN0ZWRQYWNrZXRUeXBlKQorICB7CisgICAgLyogRm9yIHVzLCBqdXN0IGNvcHkgKi8KKyAgICBtZW1jcHkocGFja2V0LCBoYW5kbGUtPnBhY2tldC5jb250ZW50LCBNSU4ocGFja2V0U2l6ZSwgc2l6ZSkpOworICAgIHJldHVybiBzaXplOworICB9CisKKyAgLyogTm90IGZvciB1cy4gRm9yIGFsdGVybmF0ZSByZWFkZXI/ICovCisgIHB0aHJlYWRfbXV0ZXhfbG9jaygmaGFuZGxlLT5yZWFkX211dGV4KTsKKyAgaWYgKGhhbmRsZS0+YWx0U2VtICYmIHR5cGU9PWhhbmRsZS0+YWx0RXhwZWN0ZWRQYWNrZXRUeXBlKSB7CisgICAgLyogWWVzLCBwdXQgcGFja2V0IGNvbnRlbnQgdGhlcmUgKi8KKyAgICBtZW1jcHkoaGFuZGxlLT5hbHRQYWNrZXQsIGhhbmRsZS0+cGFja2V0LmNvbnRlbnQsIE1JTihoYW5kbGUtPmFsdFNpemUsIHNpemUpKTsKKyAgICAqaGFuZGxlLT5hbHRSZXMgPSBzaXplOworI2lmbmRlZiBXSU5ET1dTCisgICAgaWYgKHNlbV9wb3N0KQorI2VuZGlmIC8qIFdJTkRPV1MgKi8KKyAgICAgIHNlbV9wb3N0KGhhbmRsZS0+YWx0U2VtKTsKKyAgICBoYW5kbGUtPmFsdFNlbSA9IE5VTEw7CisgICAgcHRocmVhZF9tdXRleF91bmxvY2soJmhhbmRsZS0+cmVhZF9tdXRleCk7CisgICAgcmV0dXJuIC0zOworICB9CisgIC8qIE5vIGFsdGVybmF0ZSByZWFkZXIsIHJlYWQgaXQgbG9jYWxseS4uLiAqLworICBpZiAoKHR5cGU9PUJSTEFQSV9QQUNLRVRfS0VZKSAmJiAoaGFuZGxlLT5zdGF0ZSAmIFNUQ09OVFJPTExJTkdUVFkpICYmIChzaXplPT1zaXplb2YoYnJsYXBpX2tleUNvZGVfdCkpKSB7CisgICAgLyoga2V5cHJlc3MsIGJ1ZmZlciBpdCAqLworICAgIGlmIChoYW5kbGUtPmtleWJ1Zl9uYj49QlJMX0tFWUJVRl9TSVpFKSB7CisgICAgICBzeXNsb2coTE9HX1dBUk5JTkcsImxvc3Qga2V5OiAwWCU4bHglOGx4XG4iLCh1bnNpZ25lZCBsb25nKW50b2hsKHVpbnQzMlBhY2tldFswXSksKHVuc2lnbmVkIGxvbmcpbnRvaGwodWludDMyUGFja2V0WzFdKSk7CisgICAgfSBlbHNlIHsKKyAgICAgIGhhbmRsZS0+a2V5YnVmWyhoYW5kbGUtPmtleWJ1Zl9uZXh0K2hhbmRsZS0+a2V5YnVmX25iKyspJUJSTF9LRVlCVUZfU0laRV0KKyAgICAgICAgICA9IGJybGFwaV9wYWNrZXRUb0tleUNvZGUodWludDMyUGFja2V0KTsKKyAgICB9CisgICAgcHRocmVhZF9tdXRleF91bmxvY2soJmhhbmRsZS0+cmVhZF9tdXRleCk7CisgICAgcmV0dXJuIC0zOworICB9CisgIGlmICh0eXBlPT1CUkxBUElfUEFDS0VUX1BBUkFNX1VQREFURSkgeworICAgIC8qIFBhcmFtZXRlciB1cGRhdGUsIGZpbmQgaGFuZGxlciAqLworICAgIGJybGFwaV9wYXJhbVZhbHVlUGFja2V0X3QgKnZhbHVlID0gKHZvaWQqKSBoYW5kbGUtPnBhY2tldC5jb250ZW50OworICAgIGJybGFwaV9wYXJhbV9mbGFnc190IGZsYWdzID0gbnRvaGwodmFsdWUtPmZsYWdzKTsKKyAgICBicmxhcGlfcGFyYW1fdCBwYXJhbSA9IG50b2hsKHZhbHVlLT5wYXJhbSk7CisgICAgYnJsYXBpX3BhcmFtX3N1YnBhcmFtX3Qgc3VicGFyYW0gPSAoKGJybGFwaV9wYXJhbV9zdWJwYXJhbV90KW50b2hsKHZhbHVlLT5zdWJwYXJhbV9oaSkgPDwgMzIpIHwgbnRvaGwodmFsdWUtPnN1YnBhcmFtX2xvKTsKKyAgICBzaXplX3QgcmxlbiA9IHNpemUgLSBzaXplb2YoZmxhZ3MpIC0gc2l6ZW9mKHBhcmFtKSAtIHNpemVvZihzdWJwYXJhbSk7CisgICAgX2JybGFwaV9udG9oUGFyYW1ldGVyKHBhcmFtLCB2YWx1ZSwgcmxlbik7CisgICAgcHRocmVhZF9tdXRleF9sb2NrKCZoYW5kbGUtPmNhbGxiYWNrc19tdXRleCk7CisgICAgZm9yKGhhbmRsZS0+bmV4dENhbGxiYWNrID0gaGFuZGxlLT5wYXJhbWV0ZXJDYWxsYmFja3M7CisJaGFuZGxlLT5uZXh0Q2FsbGJhY2s7ICkgeworICAgICAgc3RydWN0IGJybGFwaV9wYXJhbWV0ZXJDYWxsYmFja190ICpjYWxsYmFjayA9IGhhbmRsZS0+bmV4dENhbGxiYWNrOworICAgICAgaGFuZGxlLT5uZXh0Q2FsbGJhY2sgPSBoYW5kbGUtPm5leHRDYWxsYmFjay0+bmV4dDsKKyAgICAgIGlmIChjYWxsYmFjay0+cGFyYW1ldGVyID09IHBhcmFtICYmCisJICBjYWxsYmFjay0+c3VicGFyYW0gPT0gc3VicGFyYW0gJiYKKwkgIChjYWxsYmFjay0+ZmxhZ3MgJiBCUkxBUElfUEFSQU1GX0dMT0JBTCkgPT0gKGZsYWdzICYgQlJMQVBJX1BBUkFNRl9HTE9CQUwpKSB7CisJY2FsbGJhY2stPmZ1bmMocGFyYW0sIHN1YnBhcmFtLCBjYWxsYmFjay0+ZmxhZ3MsIGNhbGxiYWNrLT5wcml2LCB2YWx1ZS0+ZGF0YSwgcmxlbik7CisJLyogTm90ZTogdGhlIGNhbGxiYWNrIG1pZ2h0IGhhdmUgcmVtb3ZlZCB0aGlzIGVudHJ5ICovCisgICAgICB9CisgICAgfQorICAgIGhhbmRsZS0+bmV4dENhbGxiYWNrID0gTlVMTDsKKyAgICBwdGhyZWFkX211dGV4X3VubG9jaygmaGFuZGxlLT5jYWxsYmFja3NfbXV0ZXgpOworICB9CisgIHB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZoYW5kbGUtPnJlYWRfbXV0ZXgpOworCisgIC8qIG90aGVyd2lzZSB0aGlzIGlzIGFuIGVycm9yICovCisKKyAgaWYgKHR5cGU9PUJSTEFQSV9QQUNLRVRfRVJST1IpIHsKKyAgICBicmxhcGlfZXJybm8gPSBudG9obChlcnJvclBhY2tldC0+Y29kZSk7CisgICAgcmV0dXJuIC0xOworICB9CisKKyAgaWYgKHR5cGU9PUJSTEFQSV9QQUNLRVRfRVhDRVBUSU9OKSB7CisgICAgc2l6ZV90IGVzaXplOworICAgIGludCBoZHJTaXplID0gc2l6ZW9mKGVycm9yUGFja2V0LT5jb2RlKStzaXplb2YoZXJyb3JQYWNrZXQtPnR5cGUpOworICAgIGludCBlcnIgPSBudG9obChlcnJvclBhY2tldC0+Y29kZSk7CisKKyAgICBpZiAoc2l6ZTxoZHJTaXplKQorICAgICAgZXNpemUgPSAwOworICAgIGVsc2UKKyAgICAgIGVzaXplID0gc2l6ZS1oZHJTaXplOworCisgICAgcHRocmVhZF9tdXRleF9sb2NrKCZoYW5kbGUtPmV4Y2VwdGlvbkhhbmRsZXJfbXV0ZXgpOworICAgIGlmIChoYW5kbGUtPmV4Y2VwdGlvbl9zeW5jKSB7CisgICAgICBoYW5kbGUtPmV4Y2VwdGlvbl9lcnJvciA9IGVycjsKKyAgICAgIHB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZoYW5kbGUtPmV4Y2VwdGlvbkhhbmRsZXJfbXV0ZXgpOworICAgICAgcmV0dXJuIC0zOworICAgIH0KKyAgICBpZiAoaGFuZGxlPT0mZGVmYXVsdEhhbmRsZSkKKyAgICAgIGRlZmF1bHRIYW5kbGUuZXhjZXB0aW9uSGFuZGxlci53aXRob3V0SGFuZGxlKGVyciwgbnRvaGwoZXJyb3JQYWNrZXQtPnR5cGUpLCAmZXJyb3JQYWNrZXQtPnBhY2tldCwgZXNpemUpOworICAgIGVsc2UKKyAgICAgIGhhbmRsZS0+ZXhjZXB0aW9uSGFuZGxlci53aXRoSGFuZGxlKGhhbmRsZSwgZXJyLCBudG9obChlcnJvclBhY2tldC0+dHlwZSksICZlcnJvclBhY2tldC0+cGFja2V0LCBlc2l6ZSk7CisgICAgcHRocmVhZF9tdXRleF91bmxvY2soJmhhbmRsZS0+ZXhjZXB0aW9uSGFuZGxlcl9tdXRleCk7CisKKyAgICBwdGhyZWFkX211dGV4X2xvY2soJmhhbmRsZS0+ZmlsZURlc2NyaXB0b3JfbXV0ZXgpOworICAgIGNsb3NlRmlsZURlc2NyaXB0b3IoaGFuZGxlLT5maWxlRGVzY3JpcHRvcik7CisgICAgaGFuZGxlLT5maWxlRGVzY3JpcHRvciA9IEJSTEFQSV9JTlZBTElEX0ZJTEVfREVTQ1JJUFRPUjsKKyAgICBwdGhyZWFkX211dGV4X3VubG9jaygmaGFuZGxlLT5maWxlRGVzY3JpcHRvcl9tdXRleCk7CisKKyAgICByZXR1cm4gLTI7CisgIH0KKworICBzeXNsb2coTE9HX0VSUiwiKGJybGFwaV93YWl0Rm9yUGFja2V0KSBSZWNlaXZlZCB1bmV4cGVjdGVkIHBhY2tldCBvZiB0eXBlICVzIGFuZCBzaXplICVsZFxuIixicmxhcGlfZ2V0UGFja2V0VHlwZU5hbWUodHlwZSksKGxvbmcpc2l6ZSk7CisgIHJldHVybiAtMzsKK30KKworI2RlZmluZSBUUllfV0FJVF9GT1JfRVhQRUNURURfUEFDS0VUIDAKKyNkZWZpbmUgV0FJVF9GT1JfRVhQRUNURURfUEFDS0VUIDEKKworI2RlZmluZSBQT0xMIDAKKyNkZWZpbmUgV0FJVF9GT1JFVkVSICgtMSkKKworLyogYnJsYXBpX3dhaXRGb3JQYWNrZXQgKi8KKy8qIHNhbWUgYXMgYnJsYXBpX2RvV2FpdEZvclBhY2tldCwgYnV0IHNsZWVwcyBpbnN0ZWFkIG9mIHJlYWRpbmcgaWYgYW5vdGhlcgorICogdGhyZWFkIGlzIGFscmVhZHkgcmVhZGluZywgYW5kIHRpbWVvdXRfbXMgZXhwcmVzc2VkIGFzIHJlbGF0aXZlIG1zIGRlbGF5CisgKiBpbnN0ZWFkIG9mIGFic29sdXRlIGRlYWRsaW5lLgorICogdGltZW91dF9tcyBzZXQgdG8gV0FJVF9GT1JFVkVSIG1lYW5zIG5vIGRlYWRsaW5lLgorICogTmV2ZXIgcmV0dXJucyAtMi4gSWYgbG9vcCBpcyBXQUlUX0ZPUl9FWFBFQ1RFRF9QQUNLRVQsIG5ldmVyIHJldHVybnMgLTMuCisgKi8KK3N0YXRpYyBzc2l6ZV90IGJybGFwaV9fd2FpdEZvclBhY2tldChicmxhcGlfaGFuZGxlX3QgKmhhbmRsZSwgYnJsYXBpX3BhY2tldFR5cGVfdCBleHBlY3RlZFBhY2tldFR5cGUsIHZvaWQgKnBhY2tldCwgc2l6ZV90IHNpemUsIGludCBsb29wLCBpbnQgdGltZW91dF9tcykgeworICBpbnQgZG9yZWFkOworICBzc2l6ZV90IHJlczsKKyAgc2VtX3Qgc2VtOworICBzdHJ1Y3QgdGltZXZhbCBkZWFkbGluZSwgKnBkZWFkbGluZSA9IE5VTEw7CisgIGlmICh0aW1lb3V0X21zID49IDApIHsKKyAgICBnZXRSZWFsVGltZSgmZGVhZGxpbmUpOworICAgIGRlYWRsaW5lLnR2X3NlYyArPSB0aW1lb3V0X21zIC8gMTAwMDsKKyAgICBkZWFkbGluZS50dl91c2VjICs9ICh0aW1lb3V0X21zICUgMTAwMCkgKiAxMDAwOworICAgIGlmIChkZWFkbGluZS50dl91c2VjID49IDEwMDAwMDApIHsKKyAgICAgIGRlYWRsaW5lLnR2X3NlYysrOworICAgICAgZGVhZGxpbmUudHZfdXNlYyAtPSAxMDAwMDAwOworICAgIH0KKyAgICBwZGVhZGxpbmUgPSAmZGVhZGxpbmU7CisgIH0KK2FnYWluOgorICBkb3JlYWQgPSAwOworICBwdGhyZWFkX211dGV4X2xvY2soJmhhbmRsZS0+cmVhZF9tdXRleCk7CisgIGlmICghaGFuZGxlLT5yZWFkaW5nKSB7CisgICAgZG9yZWFkID0gaGFuZGxlLT5yZWFkaW5nID0gMTsKKyAgfSBlbHNlIHsKKyAgICBpZiAoCisjaWZuZGVmIFdJTkRPV1MKKyAgICAgICFzZW1faW5pdCB8fCAhc2VtX3Bvc3QgfHwgIXNlbV93YWl0IHx8ICFzZW1fZGVzdHJveSB8fAorI2VuZGlmIC8qIFdJTkRPV1MgKi8KKwloYW5kbGUtPmFsdFNlbSkgeworICAgICAgLyogVGhpcyBjYW4ndCBoYXBwZW4gd2l0aG91dCB0aHJlYWRzICovCisgICAgICBwdGhyZWFkX211dGV4X3VubG9jaygmaGFuZGxlLT5yZWFkX211dGV4KTsKKyAgICAgIHN5c2xvZyhMT0dfRVJSLCJ0aGlyZCBjYWxsIHRvIGJybGFwaV93YWl0Rm9yUGFja2V0ICEiKTsKKyAgICAgIGJybGFwaV9lcnJubyA9IEJSTEFQSV9FUlJPUl9JTExFR0FMX0lOU1RSVUNUSU9OOworICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIGhhbmRsZS0+YWx0RXhwZWN0ZWRQYWNrZXRUeXBlID0gZXhwZWN0ZWRQYWNrZXRUeXBlOworICAgIGhhbmRsZS0+YWx0UGFja2V0ID0gcGFja2V0OworICAgIGhhbmRsZS0+YWx0U2l6ZSA9IHNpemU7CisgICAgaGFuZGxlLT5hbHRSZXMgPSAmcmVzOworICAgIHNlbV9pbml0KCZzZW0sIDAsIDApOworICAgIGhhbmRsZS0+YWx0U2VtID0gJnNlbTsKKyAgfQorICBwdGhyZWFkX211dGV4X3VubG9jaygmaGFuZGxlLT5yZWFkX211dGV4KTsKKyAgaWYgKGRvcmVhZCkgeworICAgIGRvIHsKKyAgICAgIHJlcyA9IGJybGFwaV9fZG9XYWl0Rm9yUGFja2V0KGhhbmRsZSwgZXhwZWN0ZWRQYWNrZXRUeXBlLCBwYWNrZXQsIHNpemUsIHBkZWFkbGluZSk7CisgICAgfSB3aGlsZSAobG9vcCAmJiAocmVzID09IC0zIHx8IChyZXMgPT0gLTEgJiYgYnJsYXBpX2Vycm5vID09IEJSTEFQSV9FUlJPUl9MSUJDRVJSICYmICgKKwkgIGJybGFwaV9saWJjZXJybm8gPT0gRUlOVFIgfHwKKyNpZmRlZiBFV09VTERCTE9DSworCSAgYnJsYXBpX2xpYmNlcnJubyA9PSBFV09VTERCTE9DSyB8fAorI2VuZGlmIC8qIEVXT1VMREJMT0NLICovCisJICBicmxhcGlfbGliY2Vycm5vID09IEVBR0FJTikpKSk7CisgICAgcHRocmVhZF9tdXRleF9sb2NrKCZoYW5kbGUtPnJlYWRfbXV0ZXgpOworICAgIGlmIChoYW5kbGUtPmFsdFNlbSkgeworICAgICAgKmhhbmRsZS0+YWx0UmVzID0gLTM7IC8qIG5vIHBhY2tldCBmb3IgaGltICovCisjaWZuZGVmIFdJTkRPV1MKKyAgICAgIGlmIChzZW1fcG9zdCkKKyNlbmRpZiAvKiBXSU5ET1dTICovCisgICAgICAgIHNlbV9wb3N0KGhhbmRsZS0+YWx0U2VtKTsKKyAgICAgIGhhbmRsZS0+YWx0U2VtID0gTlVMTDsKKyAgICB9CisgICAgaGFuZGxlLT5yZWFkaW5nID0gMDsKKyAgICBwdGhyZWFkX211dGV4X3VubG9jaygmaGFuZGxlLT5yZWFkX211dGV4KTsKKyAgfSBlbHNlIHsKKyAgICBpbnQgcmV0OworICAgIGlmICh0aW1lb3V0X21zID09IDApIHsKKyAgICAgIHJldCA9IHNlbV90cnl3YWl0KCZzZW0pOworICAgIH0gZWxzZSBpZiAodGltZW91dF9tcyA+IDApIHsKKyAgICAgIHN0cnVjdCB0aW1lc3BlYyBhYnNfdGltZW91dDsKKyAgICAgIGFic190aW1lb3V0LnR2X3NlYyA9IGRlYWRsaW5lLnR2X3NlYzsKKyAgICAgIGFic190aW1lb3V0LnR2X25zZWMgPSBkZWFkbGluZS50dl91c2VjICogMTAwMDsKKyAgICAgIHJldCA9IHNlbV90aW1lZHdhaXQoJnNlbSwgJmFic190aW1lb3V0KTsKKyAgICB9IGVsc2UgeworICAgICAgZG8geworCXJldCA9IHNlbV93YWl0KCZzZW0pOworICAgICAgfSB3aGlsZSAocmV0ICYmIGVycm5vID09IEVJTlRSKTsKKyAgICB9CisgICAgaWYgKHJldCkgeworICAgICAgLyogVGltZW91dCwgZHJvcCBvdXIgc2VtYXBob3JlICovCisgICAgICBwdGhyZWFkX211dGV4X2xvY2soJmhhbmRsZS0+cmVhZF9tdXRleCk7CisgICAgICBoYW5kbGUtPmFsdFNlbSA9IE5VTEw7CisgICAgICBwdGhyZWFkX211dGV4X3VubG9jaygmaGFuZGxlLT5yZWFkX211dGV4KTsKKyAgICAgIHJlcyA9IC00OworICAgIH0KKyAgICBzZW1fZGVzdHJveSgmc2VtKTsKKyAgICBpZiAocmVzID09IC0xIC8qIEhlIGdvdCBhbiBlcnJvciwgd2Ugd2FudCB0byByZWFkIGl0IHRvbyAqLworCXx8IChyZXMgPT0gLTMgJiYgbG9vcCkpIC8qIHJlYWRlciBoYWRuJ3QgYW55IHBhY2tldCBmb3IgdXMgKi8KKyAgICAgIGdvdG8gYWdhaW47CisgIH0KKyAgaWYgKHJlcz09LTIpIHsKKyAgICByZXMgPSAtMTsKKyAgICBicmxhcGlfZXJybm8gPSBCUkxBUElfRVJST1JfRU9GOworICB9CisgIHJldHVybiByZXM7Cit9CisKKy8qIGJybGFwaV93YWl0Rm9yQWNrICovCisvKiBXYWl0IGZvciBhbiBhY2tub3dsZWRnZW1lbnQsIG11c3QgYmUgY2FsbGVkIHdpdGggYnJsYXBpX3JlcV9tdXRleCBsb2NrZWQgKi8KK3N0YXRpYyBpbnQgYnJsYXBpX193YWl0Rm9yQWNrKGJybGFwaV9oYW5kbGVfdCAqaGFuZGxlKQoreworICByZXR1cm4gYnJsYXBpX193YWl0Rm9yUGFja2V0KGhhbmRsZSwgQlJMQVBJX1BBQ0tFVF9BQ0ssIE5VTEwsIDAsIFdBSVRfRk9SX0VYUEVDVEVEX1BBQ0tFVCwgV0FJVF9GT1JFVkVSKTsKK30KKworLyogYnJsYXBpX3dyaXRlUGFja2V0V2FpdEZvckFjayAqLworLyogd3JpdGUgYSBwYWNrZXQgYW5kIHdhaXQgZm9yIGFuIGFja25vd2xlZGdlbWVudCAqLworc3RhdGljIGludCBicmxhcGlfX3dyaXRlUGFja2V0V2FpdEZvckFjayhicmxhcGlfaGFuZGxlX3QgKmhhbmRsZSwgYnJsYXBpX3BhY2tldFR5cGVfdCB0eXBlLCBjb25zdCB2b2lkICpidWYsIHNpemVfdCBzaXplKQoreworICBzc2l6ZV90IHJlczsKKyAgcHRocmVhZF9tdXRleF9sb2NrKCZoYW5kbGUtPnJlcV9tdXRleCk7CisgIGlmICgocmVzPWJybGFwaV93cml0ZVBhY2tldChoYW5kbGUtPmZpbGVEZXNjcmlwdG9yLCB0eXBlLGJ1ZixzaXplKSk8MCkgeworICAgIHB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZoYW5kbGUtPnJlcV9tdXRleCk7CisgICAgcmV0dXJuIHJlczsKKyAgfQorICByZXM9YnJsYXBpX193YWl0Rm9yQWNrKGhhbmRsZSk7CisgIHB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZoYW5kbGUtPnJlcV9tdXRleCk7CisgIHJldHVybiByZXM7Cit9CisKKy8qIGJybGFwaV9fcGF1c2UgKi8KKy8qIFdhaXQgZm9yIGFuIGV2ZW50IHRvIGJlIHJlY2VpdmVkICovCitpbnQgQlJMQVBJX1NURENBTEwgYnJsYXBpX19wYXVzZShicmxhcGlfaGFuZGxlX3QgKmhhbmRsZSwgaW50IHRpbWVvdXRfbXMpIHsKKyAgc3NpemVfdCByZXMgPSBicmxhcGlfX3dhaXRGb3JQYWNrZXQoaGFuZGxlLCAwLCBOVUxMLCAwLCBUUllfV0FJVF9GT1JfRVhQRUNURURfUEFDS0VULCB0aW1lb3V0X21zKTsKKyAgaWYgKHJlcyA9PSAtMykgeworICAgIGJybGFwaV9saWJjZXJybm8gPSBFSU5UUjsKKyAgICBicmxhcGlfZXJybm8gPSBCUkxBUElfRVJST1JfTElCQ0VSUjsKKyAgICBicmxhcGlfZXJyZnVuID0gIndhaXRGb3JQYWNrZXQiOworICAgIHJlcyA9IC0xOworICB9CisgIGlmIChyZXMgPT0gLTQpIHsKKyAgICAvKiBUaW1lb3V0ICovCisgICAgcmVzID0gMDsKKyAgfQorICByZXR1cm4gcmVzOworfQorCisvKiBicmxhcGlfcGF1c2UgKi8KK2ludCBCUkxBUElfU1REQ0FMTCBicmxhcGlfcGF1c2UoaW50IHRpbWVvdXRfbXMpIHsKKyAgcmV0dXJuIGJybGFwaV9fcGF1c2UoJmRlZmF1bHRIYW5kbGUsIHRpbWVvdXRfbXMpOworfQorCisKKy8qIGJybGFwaV9fc3luYyAqLworaW50IEJSTEFQSV9TVERDQUxMIGJybGFwaV9fc3luYyhicmxhcGlfaGFuZGxlX3QgKmhhbmRsZSkgeworICBpbnQgcmVzLCBlcnJvcjsKKworICBwdGhyZWFkX211dGV4X2xvY2soJmhhbmRsZS0+ZXhjZXB0aW9uSGFuZGxlcl9tdXRleCk7CisgIGhhbmRsZS0+ZXhjZXB0aW9uX3N5bmMrKzsKKyAgZXJyb3IgPSBoYW5kbGUtPmV4Y2VwdGlvbl9lcnJvcjsKKyAgaGFuZGxlLT5leGNlcHRpb25fZXJyb3IgPSBCUkxBUElfRVJST1JfU1VDQ0VTUzsKKyAgcHRocmVhZF9tdXRleF91bmxvY2soJmhhbmRsZS0+ZXhjZXB0aW9uSGFuZGxlcl9tdXRleCk7CisKKyAgaWYgKGVycm9yICE9IEJSTEFQSV9FUlJPUl9TVUNDRVNTKSB7CisgICAgcHRocmVhZF9tdXRleF9sb2NrKCZoYW5kbGUtPmV4Y2VwdGlvbkhhbmRsZXJfbXV0ZXgpOworICAgIGhhbmRsZS0+ZXhjZXB0aW9uX3N5bmMtLTsKKyAgICBwdGhyZWFkX211dGV4X3VubG9jaygmaGFuZGxlLT5leGNlcHRpb25IYW5kbGVyX211dGV4KTsKKyAgICBicmxhcGlfZXJybm8gPSBlcnJvcjsKKyAgICByZXR1cm4gLTE7CisgIH0KKworICByZXMgPSBicmxhcGlfX3dyaXRlUGFja2V0V2FpdEZvckFjayhoYW5kbGUsQlJMQVBJX1BBQ0tFVF9TWU5DSFJPTklaRSxOVUxMLDApOworCisgIGlmIChyZXMgPT0gLTEpIHsKKyAgICBwdGhyZWFkX211dGV4X2xvY2soJmhhbmRsZS0+ZXhjZXB0aW9uSGFuZGxlcl9tdXRleCk7CisgICAgaGFuZGxlLT5leGNlcHRpb25fc3luYy0tOworICAgIHB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZoYW5kbGUtPmV4Y2VwdGlvbkhhbmRsZXJfbXV0ZXgpOworICAgIHJldHVybiAtMTsKKyAgfQorCisgIHB0aHJlYWRfbXV0ZXhfbG9jaygmaGFuZGxlLT5leGNlcHRpb25IYW5kbGVyX211dGV4KTsKKyAgaGFuZGxlLT5leGNlcHRpb25fc3luYy0tOworICBlcnJvciA9IGhhbmRsZS0+ZXhjZXB0aW9uX2Vycm9yOworICBoYW5kbGUtPmV4Y2VwdGlvbl9lcnJvciA9IEJSTEFQSV9FUlJPUl9TVUNDRVNTOworICBwdGhyZWFkX211dGV4X3VubG9jaygmaGFuZGxlLT5leGNlcHRpb25IYW5kbGVyX211dGV4KTsKKworICBpZiAoZXJyb3IgIT0gQlJMQVBJX0VSUk9SX1NVQ0NFU1MpIHsKKyAgICBicmxhcGlfZXJybm8gPSBlcnJvcjsKKyAgICByZXR1cm4gLTE7CisgIH0KKyAgcmV0dXJuIDA7Cit9CisKKy8qIGJybGFwaV9zeW5jICovCitpbnQgQlJMQVBJX1NURENBTEwgYnJsYXBpX3N5bmModm9pZCkgeworICByZXR1cm4gYnJsYXBpX19zeW5jKCZkZWZhdWx0SGFuZGxlKTsKK30KKworLyogRnVuY3Rpb246IHRyeUhvc3QgKi8KKy8qIFRyaWVzIHRvIGNvbm5lY3QgdG8gdGhlIGdpdmVuIGhvc3QuICovCitzdGF0aWMgaW50IHRyeUhvc3QoYnJsYXBpX2hhbmRsZV90ICpoYW5kbGUsIGNvbnN0IGNoYXIgKmhvc3RBbmRQb3J0KSB7CisgIGNoYXIgKmhvc3QgPSBOVUxMOworICBjaGFyICpwb3J0OworICBTb2NrZXREZXNjcmlwdG9yIHNvY2tmZCA9IC0xOworCisjaWZkZWYgX19NSU5HVzMyX18KKyAgaWYgKFdTQVN0YXJ0dXAoCisjaWZkZWYgSEFWRV9HRVRBRERSSU5GTworCSAgTUFLRVdPUkQoMiwwKSwKKyNlbHNlIC8qIEhBVkVfR0VUQUREUklORk8gKi8KKwkgIE1BS0VXT1JEKDEsMSksCisjZW5kaWYgLyogSEFWRV9HRVRBRERSSU5GTyAqLworCSAgJndzYWRhdGEpKQorICAgIHJldHVybiAtMTsKKyNlbmRpZiAvKiBfX01JTkdXMzJfXyAqLworCisgIGhhbmRsZS0+YWRkcmZhbWlseSA9IGJybGFwaV9leHBhbmRIb3N0KGhvc3RBbmRQb3J0LCZob3N0LCZwb3J0KTsKKworI2lmIGRlZmluZWQoUEZfTE9DQUwpCisgIGlmIChoYW5kbGUtPmFkZHJmYW1pbHkgPT0gUEZfTE9DQUwpIHsKKyAgICBpbnQgbHBhdGggPSBzdHJsZW4oQlJMQVBJX1NPQ0tFVFBBVEgpLGxwb3J0OworICAgIGxwb3J0ID0gc3RybGVuKHBvcnQpOworCisjaWZkZWYgX19NSU5HVzMyX18KKyAgICB7CisgICAgICBIQU5ETEUgcGlwZWZkOworICAgICAgY2hhciBwYXRoW2xwYXRoK2xwb3J0KzFdOworCisgICAgICBtZW1jcHkocGF0aCwgQlJMQVBJX1NPQ0tFVFBBVEgsIGxwYXRoKTsKKyAgICAgIG1lbWNweShwYXRoK2xwYXRoLCBwb3J0LCBscG9ydCsxKTsKKworICAgICAgd2hpbGUgKChwaXBlZmQgPSBDcmVhdGVGaWxlKHBhdGgsR0VORVJJQ19SRUFEfEdFTkVSSUNfV1JJVEUsCisJICAgICAgRklMRV9TSEFSRV9SRUFEfEZJTEVfU0hBUkVfV1JJVEUsTlVMTCxPUEVOX0VYSVNUSU5HLFNFQ1VSSVRZX0lNUEVSU09OQVRJT058RklMRV9GTEFHX09WRVJMQVBQRUQsTlVMTCkpCisJICA9PSBJTlZBTElEX0hBTkRMRV9WQUxVRSkgeworCWlmIChHZXRMYXN0RXJyb3IoKSAhPSBFUlJPUl9QSVBFX0JVU1kpIHsKKwkgIGJybGFwaV9lcnJmdW4gPSAiQ3JlYXRlRmlsZSI7CisJICBnb3RvIG91dGxpYmM7CisJfQorCisJV2FpdE5hbWVkUGlwZShwYXRoLCBOTVBXQUlUX1dBSVRfRk9SRVZFUik7CisgICAgICB9CisKKyAgICAgIHNvY2tmZCA9IChTb2NrZXREZXNjcmlwdG9yKXBpcGVmZDsKKyAgICB9CisjZWxzZSAvKiBfX01JTkdXMzJfXyAqLworICAgIHsKKyAgICAgIHN0cnVjdCBzb2NrYWRkcl91biBzYTsKKworICAgICAgaWYgKGxwYXRoKzErbHBvcnQrMSA+IHNpemVvZihzYS5zdW5fcGF0aCkpIHsKKwlicmxhcGlfbGliY2Vycm5vPUVOQU1FVE9PTE9ORzsKKwlicmxhcGlfZXJyZnVuPSJwYXRoIjsKKwlicmxhcGlfZXJybm8gPSBCUkxBUElfRVJST1JfTElCQ0VSUjsKKwlnb3RvIG91dDsKKyAgICAgIH0KKworICAgICAgaWYgKChzb2NrZmQgPSBzb2NrZXQoUEZfTE9DQUwsIFNPQ0tfU1RSRUFNLCAwKSk8MCkgeworICAgICAgICBicmxhcGlfZXJyZnVuPSJzb2NrZXQiOworICAgICAgICBzZXRTb2NrZXRFcnJubygpOworICAgICAgICBnb3RvIG91dGxpYmM7CisgICAgICB9CisKKyNpZiAhZGVmaW5lZChIQVZFX1BPTEwpCisgICAgICBpZiAoc29ja2ZkID49IEZEX1NFVFNJWkUpIHsKKwkvKiBXaWxsIG5vdCBiZSBhYmxlIHRvIGNhbGwgc2VsZWN0KCkgb24gdGhpcyAqLworCWNsb3NlRmlsZURlc2NyaXB0b3Ioc29ja2ZkKTsKKwlicmxhcGlfZXJyZnVuPSJzb2NrZXQiOworCXNldEVycm5vKEVNRklMRSk7CisJZ290byBvdXRsaWJjOworICAgICAgfQorI2VuZGlmIC8qICFIQVZFX1BPTEwgKi8KKworICAgICAgc2Euc3VuX2ZhbWlseSA9IEFGX0xPQ0FMOworICAgICAgbWVtY3B5KHNhLnN1bl9wYXRoLEJSTEFQSV9TT0NLRVRQQVRIICIvIixscGF0aCsxKTsKKyAgICAgIG1lbWNweShzYS5zdW5fcGF0aCtscGF0aCsxLHBvcnQsbHBvcnQrMSk7CisKKyAgICAgIGlmIChjb25uZWN0KHNvY2tmZCwgKHN0cnVjdCBzb2NrYWRkciAqKSAmc2EsIHNpemVvZihzYSkpPDApIHsKKyAgICAgICAgYnJsYXBpX2VycmZ1bj0iY29ubmVjdCI7CisgICAgICAgIHNldFNvY2tldEVycm5vKCk7CisgICAgICAgIGdvdG8gb3V0bGliYzsKKyAgICAgIH0KKyAgICB9CisjZW5kaWYgLyogX19NSU5HVzMyX18gKi8KKworICAgIGhhbmRsZS0+ZmlsZURlc2NyaXB0b3IgPSAoRmlsZURlc2NyaXB0b3IpIHNvY2tmZDsKKyAgfSBlbHNlIHsKKyNlbHNlIC8qIFBGX0xPQ0FMICovCisgIGlmICgwKSB7fSBlbHNlIHsKKyNlbmRpZiAvKiBQRl9MT0NBTCAqLworCisjaWZkZWYgX19NSU5HVzMyX18KKyAgICBpZiAoQ0hFQ0tHRVRQUk9DKCJ3czJfMzIuZGxsIixnZXRhZGRyaW5mbykKKwkmJiBDSEVDS0dFVFBST0MoIndzMl8zMi5kbGwiLGZyZWVhZGRyaW5mbykpIHsKKyNlbmRpZiAvKiBfX01JTkdXMzJfXyAqLworI2lmIGRlZmluZWQoSEFWRV9HRVRBRERSSU5GTykgfHwgZGVmaW5lZChfX01JTkdXMzJfXykKKworICAgIHN0cnVjdCBhZGRyaW5mbyAqcmVzLCpjdXI7CisgICAgc3RydWN0IGFkZHJpbmZvIGhpbnRzOworCisgICAgbWVtc2V0KCZoaW50cywgMCwgc2l6ZW9mKGhpbnRzKSk7CisgICAgaGludHMuYWlfZmFtaWx5ID0gUEZfVU5TUEVDOworICAgIGhpbnRzLmFpX3NvY2t0eXBlID0gU09DS19TVFJFQU07CisKKyAgICBicmxhcGlfZ2FpZXJybm8gPSBnZXRhZGRyaW5mbyhob3N0LCBwb3J0LCAmaGludHMsICZyZXMpOworICAgIGlmIChicmxhcGlfZ2FpZXJybm8pIHsKKyAgICAgIGJybGFwaV9lcnJubz1CUkxBUElfRVJST1JfR0FJRVJSOworICAgICAgYnJsYXBpX2xpYmNlcnJubz1lcnJubzsKKyAgICAgIGdvdG8gb3V0OworICAgIH0KKyAgICBmb3IoY3VyID0gcmVzOyBjdXI7IGN1ciA9IGN1ci0+YWlfbmV4dCkgeworICAgICAgc29ja2ZkID0gc29ja2V0KGN1ci0+YWlfZmFtaWx5LCBjdXItPmFpX3NvY2t0eXBlLCBjdXItPmFpX3Byb3RvY29sKTsKKyAgICAgIGlmIChzb2NrZmQ8MCkgY29udGludWU7CisKKyNpZiAhZGVmaW5lZChfX01JTkdXMzJfXykgJiYgIWRlZmluZWQoSEFWRV9QT0xMKQorICAgICAgaWYgKHNvY2tmZCA+PSBGRF9TRVRTSVpFKSB7CisJLyogV2lsbCBub3QgYmUgYWJsZSB0byBjYWxsIHNlbGVjdCgpIG9uIHRoaXMgKi8KKwljbG9zZUZpbGVEZXNjcmlwdG9yKHNvY2tmZCk7CisJYnJsYXBpX2VycmZ1bj0ic29ja2V0IjsKKwlzZXRFcnJubyhFTUZJTEUpOworCWdvdG8gb3V0bGliYzsKKyAgICAgIH0KKyNlbmRpZiAvKiAhX19NSU5HVzMyX18gJiYgIUhBVkVfUE9MTCAqLworCisgICAgICBpZiAoY29ubmVjdChzb2NrZmQsIGN1ci0+YWlfYWRkciwgY3VyLT5haV9hZGRybGVuKTwwKSB7CisgICAgICAgIGNsb3NlU29ja2V0RGVzY3JpcHRvcihzb2NrZmQpOworICAgICAgICBjb250aW51ZTsKKyAgICAgIH0KKyAgICAgIGJyZWFrOworICAgIH0KKyAgICBmcmVlYWRkcmluZm8ocmVzKTsKKyAgICBpZiAoIWN1cikgeworICAgICAgYnJsYXBpX2Vycm5vPUJSTEFQSV9FUlJPUl9DT05OUkVGVVNFRDsKKyAgICAgIGdvdG8gb3V0OworICAgIH0KKworI2VuZGlmIC8qIEhBVkVfR0VUQUREUklORk8gKi8KKyNpZmRlZiBfX01JTkdXMzJfXworICAgIH0gZWxzZSB7CisjZW5kaWYgLyogX19NSU5HVzMyX18gKi8KKyNpZiAhZGVmaW5lZChIQVZFX0dFVEFERFJJTkZPKSB8fCBkZWZpbmVkKF9fTUlOR1czMl9fKQorCisgICAgc3RydWN0IHNvY2thZGRyX2luIGFkZHI7CisgICAgc3RydWN0IGhvc3RlbnQgKmhlOworCisgICAgbWVtc2V0KCZhZGRyLDAsc2l6ZW9mKGFkZHIpKTsKKyAgICBhZGRyLnNpbl9mYW1pbHkgPSBBRl9JTkVUOworICAgIGlmICghcG9ydCkKKyAgICAgIGFkZHIuc2luX3BvcnQgPSBodG9ucyhCUkxBUElfU09DS0VUUE9SVE5VTSk7CisgICAgZWxzZSB7CisgICAgICBjaGFyICpjOworICAgICAgYWRkci5zaW5fcG9ydCA9IGh0b25zKHN0cnRvbChwb3J0LCAmYywgMCkpOworICAgICAgaWYgKCpjKSB7CisJc3RydWN0IHNlcnZlbnQgKnNlOworCisJaWYgKCEoc2UgPSBnZXRzZXJ2YnluYW1lKHBvcnQsInRjcCIpKSkgeworCSAgYnJsYXBpX2dhaWVycm5vID0gaF9lcnJubzsKKyAgICAgICAgICBicmxhcGlfZXJybm89QlJMQVBJX0VSUk9SX0dBSUVSUjsKKwkgIGdvdG8gb3V0OworCX0KKwlhZGRyLnNpbl9wb3J0ID0gc2UtPnNfcG9ydDsKKyAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoIWhvc3QpIHsKKyAgICAgIGFkZHIuc2luX2FkZHIuc19hZGRyID0gaHRvbmwoSU5BRERSX0xPT1BCQUNLKTsKKyAgICB9IGVsc2UgaWYgKChhZGRyLnNpbl9hZGRyLnNfYWRkciA9IGluZXRfYWRkcihob3N0KSkgPT0gaHRvbmwoSU5BRERSX05PTkUpKSB7CisgICAgICBpZiAoIShoZSA9IGdldGhvc3RieW5hbWUoaG9zdCkpKSB7CisJYnJsYXBpX2dhaWVycm5vID0gaF9lcnJubzsKKwlicmxhcGlfZXJybm8gPSBCUkxBUElfRVJST1JfR0FJRVJSOworCWdvdG8gb3V0OworICAgICAgfQorICAgICAgaWYgKGhlLT5oX2FkZHJ0eXBlICE9IEFGX0lORVQpIHsKKyNpZmRlZiBFQUZOT1NVUFBPUlQKKyAgICAgICAgZXJybm8gPSBFQUZOT1NVUFBPUlQ7CisjZWxzZSAvKiBFQUZOT1NVUFBPUlQgKi8KKyAgICAgICAgZXJybm8gPSBFSU5WQUw7CisjZW5kaWYgLyogRUFGTk9TVVBQT1JUICovCisJYnJsYXBpX2VycmZ1biA9ICJnZXRob3N0YnluYW1lIjsKKwlnb3RvIG91dGxpYmM7CisgICAgICB9CisgICAgICBpZiAoaGUtPmhfbGVuZ3RoID4gc2l6ZW9mKGFkZHIuc2luX2FkZHIpKSB7CisgICAgICAgIGVycm5vID0gRUlOVkFMOworCWJybGFwaV9lcnJmdW4gPSAiZ2V0aG9zdGJ5bmFtZSI7CisJZ290byBvdXRsaWJjOworICAgICAgfQorICAgICAgbWVtY3B5KCZhZGRyLnNpbl9hZGRyLGhlLT5oX2FkZHIsaGUtPmhfbGVuZ3RoKTsKKyAgICB9CisKKyAgICBzb2NrZmQgPSBzb2NrZXQoYWRkci5zaW5fZmFtaWx5LCBTT0NLX1NUUkVBTSwgMCk7CisgICAgaWYgKHNvY2tmZDwwKSB7CisgICAgICBicmxhcGlfZXJyZnVuID0gInNvY2tldCI7CisgICAgICBzZXRTb2NrZXRFcnJubygpOworICAgICAgZ290byBvdXRsaWJjOworICAgIH0KKworI2lmICFkZWZpbmVkKF9fTUlOR1czMl9fKSAmJiAhZGVmaW5lZChIQVZFX1BPTEwpCisgICAgaWYgKHNvY2tmZCA+PSBGRF9TRVRTSVpFKSB7CisgICAgICAvKiBXaWxsIG5vdCBiZSBhYmxlIHRvIGNhbGwgc2VsZWN0KCkgb24gdGhpcyAqLworICAgICAgY2xvc2VGaWxlRGVzY3JpcHRvcihzb2NrZmQpOworICAgICAgYnJsYXBpX2VycmZ1bj0ic29ja2V0IjsKKyAgICAgIHNldEVycm5vKEVNRklMRSk7CisgICAgICBnb3RvIG91dGxpYmM7CisgICAgfQorI2VuZGlmIC8qICFfX01JTkdXMzJfXyAmJiAhSEFWRV9QT0xMICovCisKKyAgICBpZiAoY29ubmVjdChzb2NrZmQsIChzdHJ1Y3Qgc29ja2FkZHIgKikgJmFkZHIsIHNpemVvZihhZGRyKSk8MCkgeworICAgICAgYnJsYXBpX2VycmZ1biA9ICJjb25uZWN0IjsKKyAgICAgIHNldFNvY2tldEVycm5vKCk7CisgICAgICBnb3RvIG91dGxpYmM7CisgICAgfQorCisjZW5kaWYgLyogIUhBVkVfR0VUQUREUklORk8gKi8KKyNpZmRlZiBfX01JTkdXMzJfXworICAgIH0KKyNlbmRpZiAvKiBfX01JTkdXMzJfXyAqLworCisjaWYgZGVmaW5lZChJUFBST1RPX1RDUCkgJiYgZGVmaW5lZChUQ1BfTk9ERUxBWSkKKyAgICB7CisgICAgICBpbnQgeWVzPTE7CisgICAgICBzZXRzb2Nrb3B0KHNvY2tmZCxJUFBST1RPX1RDUCxUQ1BfTk9ERUxBWSwodm9pZCopJnllcyxzaXplb2YoeWVzKSk7CisgICAgfQorI2VuZGlmIC8qIGRlZmluZWQoSVBQUk9UT19UQ1ApICYmIGRlZmluZWQoVENQX05PREVMQVkpICovCisgICAgaGFuZGxlLT5maWxlRGVzY3JpcHRvciA9IChGaWxlRGVzY3JpcHRvcikgc29ja2ZkOworICB9CisgIGZyZWUoaG9zdCk7CisgIGZyZWUocG9ydCk7CisgIHJldHVybiAwOworCitvdXRsaWJjOgorICBicmxhcGlfZXJybm8gPSBCUkxBUElfRVJST1JfTElCQ0VSUjsKKyAgYnJsYXBpX2xpYmNlcnJubyA9IGVycm5vOworICBpZiAoc29ja2ZkPj0wKQorICAgIGNsb3NlU29ja2V0RGVzY3JpcHRvcihzb2NrZmQpOworb3V0OgorICBmcmVlKGhvc3QpOworICBmcmVlKHBvcnQpOworICByZXR1cm4gLTE7Cit9CisKKy8qIEZ1bmN0aW9uIDogdXBkYXRlU2V0dGluZ3MgKi8KKy8qIFVwZGF0ZXMgdGhlIGNvbnRlbnQgb2YgYSBicmxhcGlfY29ubmVjdGlvblNldHRpbmdzX3Qgc3RydWN0dXJlIGFjY29yZGluZyB0byAqLworLyogYW5vdGhlciBzdHJ1Y3R1cmUgb2YgdGhlIHNhbWUgdHlwZSAqLworc3RhdGljIHZvaWQgdXBkYXRlU2V0dGluZ3MoYnJsYXBpX2Nvbm5lY3Rpb25TZXR0aW5nc190ICpzMSwgY29uc3QgYnJsYXBpX2Nvbm5lY3Rpb25TZXR0aW5nc190ICpzMikKK3sKKyAgaWYgKHMyPT1OVUxMKSByZXR1cm47CisgIGlmICgoczItPmF1dGgpICYmICgqczItPmF1dGgpKQorICAgIHMxLT5hdXRoID0gczItPmF1dGg7CisgIGlmICgoczItPmhvc3QpICYmICgqczItPmhvc3QpKQorICAgIHMxLT5ob3N0ID0gczItPmhvc3Q7Cit9CisKKy8qIEZ1bmN0aW9uOiBicmxhcGlfb3BlbkNvbm5lY3Rpb24KKyAqIENyZWF0ZXMgYSBzb2NrZXQgdG8gY29ubmVjdCB0byBCcmxBcGkgKi8KK2JybGFwaV9maWxlRGVzY3JpcHRvciBCUkxBUElfU1REQ0FMTCBicmxhcGlfX29wZW5Db25uZWN0aW9uKGJybGFwaV9oYW5kbGVfdCAqaGFuZGxlLCBjb25zdCBicmxhcGlfY29ubmVjdGlvblNldHRpbmdzX3QgKmNsaWVudFNldHRpbmdzLCBicmxhcGlfY29ubmVjdGlvblNldHRpbmdzX3QgKnVzZWRTZXR0aW5ncykKK3sKKyAgYnJsYXBpX3BhY2tldF90IHBhY2tldDsKKyAgYnJsYXBpX3BhY2tldF90IHNlcnZlclBhY2tldDsKKyAgYnJsYXBpX2F1dGhDbGllbnRQYWNrZXRfdCAqYXV0aCA9ICZwYWNrZXQuYXV0aENsaWVudDsKKyAgYnJsYXBpX2F1dGhTZXJ2ZXJQYWNrZXRfdCAqYXV0aFNlcnZlciA9ICZzZXJ2ZXJQYWNrZXQuYXV0aFNlcnZlcjsKKyAgYnJsYXBpX3ZlcnNpb25QYWNrZXRfdCAqdmVyc2lvbiA9ICZzZXJ2ZXJQYWNrZXQudmVyc2lvbjsKKyAgdWludDMyX3QgKnR5cGU7CisgIGludCBsZW47CisKKyAgYnJsYXBpX2Nvbm5lY3Rpb25TZXR0aW5nc190IHNldHRpbmdzID0geyBCUkxBUElfREVGQVVUSCwgIjowIiB9OworICBicmxhcGlfY29ubmVjdGlvblNldHRpbmdzX3QgZW52c2V0dGluZ3MgPSB7IGdldGVudigiQlJMQVBJX0FVVEgiKSwgZ2V0ZW52KCJCUkxBUElfSE9TVCIpIH07CisKKyAgLyogSGVyZSB1cGRhdGUgc2V0dGluZ3Mgd2l0aCB0aGUgcGFyYW1ldGVycyBmcm9tIG1pc2Mgc291cmNlcyAoZmlsZXMsIGVudi4uLikgKi8KKyAgdXBkYXRlU2V0dGluZ3MoJnNldHRpbmdzLCAmZW52c2V0dGluZ3MpOworICB1cGRhdGVTZXR0aW5ncygmc2V0dGluZ3MsIGNsaWVudFNldHRpbmdzKTsKKyAgaWYgKHVzZWRTZXR0aW5ncyE9TlVMTCkgdXBkYXRlU2V0dGluZ3ModXNlZFNldHRpbmdzLCAmc2V0dGluZ3MpOworICBicmxhcGlfaW5pdGlhbGl6ZUhhbmRsZShoYW5kbGUpOworCisgIGlmICh0cnlIb3N0KGhhbmRsZSwgc2V0dGluZ3MuaG9zdCk8MCkgeworICAgIGNvbnN0IGNoYXIgKnBvcnQgPSBzdHJyY2hyKHNldHRpbmdzLmhvc3QsICc6Jyk7CisgICAgaWYgKHBvcnQgIT0gc2V0dGluZ3MuaG9zdCkgZ290byBvdXQ7CisgICAgaWYgKCFpc1BvcnROdW1iZXIocG9ydCsxLCBOVUxMKSkgZ290byBvdXQ7CisKKyAgICBicmxhcGlfZXJyb3JfdCBvcmlnaW5hbEVycm9yID0gYnJsYXBpX2Vycm9yOworICAgIHNpemVfdCBwb3J0TGVuZ3RoID0gc3RybGVuKHBvcnQpOworCisgICAgc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IGxvY2FsaG9zdEFkZHJlc3NUYWJsZVtdID0geworICAgICAgTE9DQUxIT1NUX0FERFJFU1NfSVBWNCwKKworICAgICAgI2lmZGVmIEFGX0lORVQ2CisgICAgICBMT0NBTEhPU1RfQUREUkVTU19JUFY2LAorICAgICAgI2VuZGlmIC8qIEFGX0lORVQ2ICovCisgICAgfTsKKworICAgIGNvbnN0IGNoYXIgKmNvbnN0ICpsaGEgPSBsb2NhbGhvc3RBZGRyZXNzVGFibGU7CisgICAgY29uc3QgY2hhciAqY29uc3QgKmVuZCA9IGxoYSArIEFSUkFZX0NPVU5UKGxvY2FsaG9zdEFkZHJlc3NUYWJsZSk7CisKKyAgICB3aGlsZSAobGhhIDwgZW5kKSB7CisgICAgICBzaXplX3QgaG9zdExlbmd0aCA9IHN0cmxlbigqbGhhKTsKKyAgICAgIGNoYXIgaG9zdFtob3N0TGVuZ3RoICsgcG9ydExlbmd0aCArIDFdOworICAgICAgc25wcmludGYoaG9zdCwgc2l6ZW9mKGhvc3QpLCAiJXMlcyIsICpsaGEsIHBvcnQpOworCisgICAgICBpZiAodHJ5SG9zdChoYW5kbGUsIGhvc3QpICE9IC0xKSB7CisgICAgICAgIGlmICh1c2VkU2V0dGluZ3MpIHVzZWRTZXR0aW5ncy0+aG9zdCA9IHN0cmR1cChob3N0KTsKKyAgICAgICAgYnJlYWs7CisgICAgICB9CisKKyAgICAgIGxoYSArPSAxOworICAgIH0KKworICAgIGlmIChsaGEgPT0gZW5kKSB7CisgICAgICBicmxhcGlfZXJyb3IgPSBvcmlnaW5hbEVycm9yOworICAgICAgZ290byBvdXQ7CisgICAgfQorICB9CisKKyAgaWYgKChsZW4gPSBicmxhcGlfX3dhaXRGb3JQYWNrZXQoaGFuZGxlLCBCUkxBUElfUEFDS0VUX1ZFUlNJT04sICZzZXJ2ZXJQYWNrZXQsIHNpemVvZihzZXJ2ZXJQYWNrZXQpLCBXQUlUX0ZPUl9FWFBFQ1RFRF9QQUNLRVQsIFdBSVRfRk9SRVZFUikpIDwgMCkKKyAgICBnb3RvIG91dGZkOworCisgIGhhbmRsZS0+c2VydmVyVmVyc2lvbiA9IG50b2hsKHZlcnNpb24tPnByb3RvY29sVmVyc2lvbik7CisgIGlmIChoYW5kbGUtPnNlcnZlclZlcnNpb24gPCA4KSB7CisgICAgLyogV2Ugb25seSBwcm92aWRlIGNvbXBhdGliaWxpdHkgd2l0aCB2ZXJzaW9uIDggYW5kIGxhdGVyLiAqLworICAgIGJybGFwaV9lcnJubyA9IEJSTEFQSV9FUlJPUl9QUk9UT0NPTF9WRVJTSU9OOworICAgIGdvdG8gb3V0ZmQ7CisgIH0KKworICB2ZXJzaW9uLT5wcm90b2NvbFZlcnNpb24gPSBodG9ubChCUkxBUElfUFJPVE9DT0xfVkVSU0lPTik7CisgIGlmIChicmxhcGlfd3JpdGVQYWNrZXQoaGFuZGxlLT5maWxlRGVzY3JpcHRvciwgQlJMQVBJX1BBQ0tFVF9WRVJTSU9OLCB2ZXJzaW9uLCBzaXplb2YoKnZlcnNpb24pKSA8IDApCisgICAgZ290byBvdXRmZDsKKworICBpZiAoKGxlbiA9IGJybGFwaV9fd2FpdEZvclBhY2tldChoYW5kbGUsIEJSTEFQSV9QQUNLRVRfQVVUSCwgJnNlcnZlclBhY2tldCwgc2l6ZW9mKHNlcnZlclBhY2tldCksIFdBSVRfRk9SX0VYUEVDVEVEX1BBQ0tFVCwgV0FJVF9GT1JFVkVSKSkgPCAwKQorICAgIHJldHVybiBCUkxBUElfSU5WQUxJRF9GSUxFX0RFU0NSSVBUT1I7CisKKyAgZm9yICh0eXBlID0gJmF1dGhTZXJ2ZXItPnR5cGVbMF07IHR5cGUgPCAmYXV0aFNlcnZlci0+dHlwZVtsZW4gLyBzaXplb2YoYXV0aFNlcnZlci0+dHlwZVswXSldOyB0eXBlKyspIHsKKyAgICBhdXRoLT50eXBlID0gKnR5cGU7CisgICAgc3dpdGNoIChudG9obCgqdHlwZSkpIHsKKyAgICAgIGNhc2UgQlJMQVBJX0FVVEhfTk9ORToKKwlpZiAodXNlZFNldHRpbmdzKSB1c2VkU2V0dGluZ3MtPmF1dGggPSAibm9uZSI7CisJZ290byBkb25lOworICAgICAgY2FzZSBCUkxBUElfQVVUSF9LRVk6IHsKKyAgICAgICAgc2l6ZV90IGF1dGhLZXlMZW5ndGg7CisJaW50IHJlczsKKwljaGFyICprZXlmaWxlID0gYnJsYXBpX2dldEtleUZpbGUoc2V0dGluZ3MuYXV0aCk7CisJaWYgKCFrZXlmaWxlKQorCSAgY29udGludWU7CisJcmVzID0gYnJsYXBpX2xvYWRBdXRoS2V5KGtleWZpbGUsICZhdXRoS2V5TGVuZ3RoLCAodm9pZCAqKSAmYXV0aC0+a2V5KTsKKwlmcmVlKGtleWZpbGUpOworICAgICAgICBpZiAocmVzIDwgMCkKKwkgIGNvbnRpbnVlOworICAgICAgICByZXMgPSBicmxhcGlfd3JpdGVQYWNrZXQoaGFuZGxlLT5maWxlRGVzY3JpcHRvciwgQlJMQVBJX1BBQ0tFVF9BVVRILCBhdXRoLAorCSAgc2l6ZW9mKGF1dGgtPnR5cGUpK2F1dGhLZXlMZW5ndGgpOworCW1lbXNldCgmYXV0aC0+a2V5LCAwLCBhdXRoS2V5TGVuZ3RoKTsKKwlpZiAocmVzIDwgMCkKKwkgIGdvdG8gb3V0ZmQ7CisJaWYgKHVzZWRTZXR0aW5ncykgdXNlZFNldHRpbmdzLT5hdXRoID0gc2V0dGluZ3MuYXV0aDsKKwlicmVhazsKKyAgICAgIH0KKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIC8qIHVuc3VwcG9ydGVkIGF1dGhvcml6YXRpb24gdHlwZSAqLworCWNvbnRpbnVlOworICAgIH0KKyAgICBpZiAoKGJybGFwaV9fd2FpdEZvckFjayhoYW5kbGUpKSA9PSAwKSBnb3RvIGRvbmU7CisgIH0KKworICAvKiBubyBzdWl0YWJsZSBhdXRob3JpemF0aW9uIG1ldGhvZCAqLworICBicmxhcGlfZXJybm8gPSBCUkxBUElfRVJST1JfQVVUSEVOVElDQVRJT047CitvdXRmZDoKKyAgY2xvc2VGaWxlRGVzY3JpcHRvcihoYW5kbGUtPmZpbGVEZXNjcmlwdG9yKTsKKyAgaGFuZGxlLT5maWxlRGVzY3JpcHRvciA9IEJSTEFQSV9JTlZBTElEX0ZJTEVfREVTQ1JJUFRPUjsKK291dDoKKyAgcmV0dXJuIEJSTEFQSV9JTlZBTElEX0ZJTEVfREVTQ1JJUFRPUjsKKworZG9uZToKKyAgcHRocmVhZF9tdXRleF9sb2NrKCZoYW5kbGUtPnN0YXRlX211dGV4KTsKKyAgaGFuZGxlLT5zdGF0ZSA9IFNUQ09OTkVDVEVEOworICBwdGhyZWFkX211dGV4X3VubG9jaygmaGFuZGxlLT5zdGF0ZV9tdXRleCk7CisgIHJldHVybiBoYW5kbGUtPmZpbGVEZXNjcmlwdG9yOworfQorCiticmxhcGlfZmlsZURlc2NyaXB0b3IgQlJMQVBJX1NURENBTEwgYnJsYXBpX29wZW5Db25uZWN0aW9uKGNvbnN0IGJybGFwaV9jb25uZWN0aW9uU2V0dGluZ3NfdCAqY2xpZW50U2V0dGluZ3MsIGJybGFwaV9jb25uZWN0aW9uU2V0dGluZ3NfdCAqdXNlZFNldHRpbmdzKQoreworICByZXR1cm4gYnJsYXBpX19vcGVuQ29ubmVjdGlvbigmZGVmYXVsdEhhbmRsZSwgY2xpZW50U2V0dGluZ3MsIHVzZWRTZXR0aW5ncyk7Cit9CisKK2JybGFwaV9maWxlRGVzY3JpcHRvciBCUkxBUElfU1REQ0FMTCBicmxhcGlfX2dldEZpbGVEZXNjcmlwdG9yKGJybGFwaV9oYW5kbGVfdCAqaGFuZGxlKQoreworICByZXR1cm4gaGFuZGxlLT5maWxlRGVzY3JpcHRvcjsKK30KKworYnJsYXBpX2ZpbGVEZXNjcmlwdG9yIEJSTEFQSV9TVERDQUxMIGJybGFwaV9nZXRGaWxlRGVzY3JpcHRvcih2b2lkKQoreworICByZXR1cm4gYnJsYXBpX19nZXRGaWxlRGVzY3JpcHRvcigmZGVmYXVsdEhhbmRsZSk7Cit9CisKKy8qIGJybGFwaV9jbG9zZUNvbm5lY3Rpb24gKi8KKy8qIENsZWFubHkgY2xvc2UgdGhlIHNvY2tldCAqLwordm9pZCBCUkxBUElfU1REQ0FMTCBicmxhcGlfX2Nsb3NlQ29ubmVjdGlvbihicmxhcGlfaGFuZGxlX3QgKmhhbmRsZSkKK3sKKyAgcHRocmVhZF9tdXRleF9sb2NrKCZoYW5kbGUtPnN0YXRlX211dGV4KTsKKyAgaGFuZGxlLT5zdGF0ZSA9IDA7CisgIHB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZoYW5kbGUtPnN0YXRlX211dGV4KTsKKyAgcHRocmVhZF9tdXRleF9sb2NrKCZoYW5kbGUtPmZpbGVEZXNjcmlwdG9yX211dGV4KTsKKyAgY2xvc2VGaWxlRGVzY3JpcHRvcihoYW5kbGUtPmZpbGVEZXNjcmlwdG9yKTsKKyAgaGFuZGxlLT5maWxlRGVzY3JpcHRvciA9IEJSTEFQSV9JTlZBTElEX0ZJTEVfREVTQ1JJUFRPUjsKKyAgcHRocmVhZF9tdXRleF91bmxvY2soJmhhbmRsZS0+ZmlsZURlc2NyaXB0b3JfbXV0ZXgpOworCisjaWZkZWYgTENfR0xPQkFMX0xPQ0FMRQorICBpZiAoaGFuZGxlLT5kZWZhdWx0X2xvY2FsZSAhPSBMQ19HTE9CQUxfTE9DQUxFKSB7CisgICAgZnJlZWxvY2FsZShoYW5kbGUtPmRlZmF1bHRfbG9jYWxlKTsKKyAgfQorI2VuZGlmIC8qIExDX0dMT0JBTF9MT0NBTEUgKi8KKworI2lmZGVmIF9fTUlOR1czMl9fCisgIFdTQUNsZWFudXAoKTsKKyNlbmRpZiAvKiBfX01JTkdXMzJfXyAqLworfQorCit2b2lkIEJSTEFQSV9TVERDQUxMIGJybGFwaV9jbG9zZUNvbm5lY3Rpb24odm9pZCkKK3sKKyAgYnJsYXBpX19jbG9zZUNvbm5lY3Rpb24oJmRlZmF1bHRIYW5kbGUpOworfQorCisvKiBicmxhcGlfX3NldENsaWVudERhdGEgKi8KK3ZvaWQgQlJMQVBJX1NURENBTEwgYnJsYXBpX19zZXRDbGllbnREYXRhKGJybGFwaV9oYW5kbGVfdCAqaGFuZGxlLCB2b2lkICpkYXRhKQoreworICBoYW5kbGUtPmNsaWVudERhdGEgPSBkYXRhOworfQorCit2b2lkIEJSTEFQSV9TVERDQUxMIGJybGFwaV9zZXRDbGllbnREYXRhKHZvaWQgKmRhdGEpCit7CisgIGJybGFwaV9fc2V0Q2xpZW50RGF0YSgmZGVmYXVsdEhhbmRsZSwgZGF0YSk7Cit9CisKKy8qIGJybGFwaV9fZ2V0Q2xpZW50RGF0YSAqLwordm9pZCAqIEJSTEFQSV9TVERDQUxMIGJybGFwaV9fZ2V0Q2xpZW50RGF0YShicmxhcGlfaGFuZGxlX3QgKmhhbmRsZSkKK3sKKyAgcmV0dXJuIGhhbmRsZS0+Y2xpZW50RGF0YTsKK30KKwordm9pZCAqIEJSTEFQSV9TVERDQUxMIGJybGFwaV9nZXRDbGllbnREYXRhKHZvaWQpCit7CisgIHJldHVybiBicmxhcGlfX2dldENsaWVudERhdGEoJmRlZmF1bHRIYW5kbGUpOworfQorCisvKiBicmxhcGlfZ2V0RHJpdmVyU3BlY2lmaWMgKi8KKy8qIFN3aXRjaCB0byBkZXZpY2Ugc3BlY2lmaWMgbW9kZSAqLworc3RhdGljIGludCBicmxhcGlfX2dldERyaXZlclNwZWNpZmljKGJybGFwaV9oYW5kbGVfdCAqaGFuZGxlLCBjb25zdCBjaGFyICpkcml2ZXIsIGJybGFwaV9wYWNrZXRUeXBlX3QgdHlwZSwgaW50IHN0KQoreworICBpbnQgcmVzOworICBicmxhcGlfcGFja2V0X3QgcGFja2V0OworICBicmxhcGlfZ2V0RHJpdmVyU3BlY2lmaWNNb2RlUGFja2V0X3QgKmRyaXZlclBhY2tldCA9ICZwYWNrZXQuZ2V0RHJpdmVyU3BlY2lmaWNNb2RlOworICB1bnNpZ25lZCBpbnQgbiA9IHN0cmxlbihkcml2ZXIpOworICBpZiAobj5CUkxBUElfTUFYTkFNRUxFTkdUSCkgeworICAgIGJybGFwaV9lcnJubyA9IEJSTEFQSV9FUlJPUl9JTlZBTElEX1BBUkFNRVRFUjsKKyAgICByZXR1cm4gLTE7CisgIH0KKyAgcHRocmVhZF9tdXRleF9sb2NrKCZkZWZhdWx0SGFuZGxlLnN0YXRlX211dGV4KTsKKyAgaWYgKChkZWZhdWx0SGFuZGxlLnN0YXRlICYgc3QpKSB7CisgICAgYnJsYXBpX2Vycm5vID0gQlJMQVBJX0VSUk9SX0lMTEVHQUxfSU5TVFJVQ1RJT047CisgICAgcmVzID0gLTE7CisgICAgZ290byBvdXQ7CisgIH0KKyAgZHJpdmVyUGFja2V0LT5tYWdpYyA9IGh0b25sKEJSTEFQSV9ERVZJQ0VfTUFHSUMpOworICBkcml2ZXJQYWNrZXQtPm5hbWVMZW5ndGggPSBuOworICBtZW1jcHkoJmRyaXZlclBhY2tldC0+bmFtZSwgZHJpdmVyLCBuKTsKKyAgcmVzID0gYnJsYXBpX193cml0ZVBhY2tldFdhaXRGb3JBY2soaGFuZGxlLCB0eXBlLCAmcGFja2V0LCBzaXplb2YodWludDMyX3QpKzErbik7CisgIGlmIChyZXMhPS0xKQorICAgIGhhbmRsZS0+c3RhdGUgfD0gc3Q7CitvdXQ6CisgIHB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZoYW5kbGUtPnN0YXRlX211dGV4KTsKKyAgcmV0dXJuIHJlczsKK30KKworLyogYnJsYXBpX2xlYXZlRHJpdmVyU3BlY2lmaWMgKi8KKy8qIExlYXZlIGRldmljZSBzcGVjaWZpYyBtb2RlICovCitzdGF0aWMgaW50IGJybGFwaV9fbGVhdmVEcml2ZXJTcGVjaWZpYyhicmxhcGlfaGFuZGxlX3QgKmhhbmRsZSwgYnJsYXBpX3BhY2tldFR5cGVfdCB0eXBlLCBpbnQgc3QpCit7CisgIGludCByZXM7CisgIHB0aHJlYWRfbXV0ZXhfbG9jaygmaGFuZGxlLT5zdGF0ZV9tdXRleCk7CisgIGlmICghKGhhbmRsZS0+c3RhdGUgJiBzdCkpIHsKKyAgICBicmxhcGlfZXJybm8gPSBCUkxBUElfRVJST1JfSUxMRUdBTF9JTlNUUlVDVElPTjsKKyAgICByZXMgPSAtMTsKKyAgICBnb3RvIG91dDsKKyAgfQorICByZXMgPSBicmxhcGlfX3dyaXRlUGFja2V0V2FpdEZvckFjayhoYW5kbGUsIHR5cGUsIE5VTEwsIDApOworICBpZiAoIXJlcykKKyAgICBoYW5kbGUtPnN0YXRlICY9IH5zdDsKK291dDoKKyAgcHRocmVhZF9tdXRleF91bmxvY2soJmhhbmRsZS0+c3RhdGVfbXV0ZXgpOworICByZXR1cm4gcmVzOworfQorCisvKiBicmxhcGlfZW50ZXJSYXdNb2RlICovCisvKiBTd2l0Y2ggdG8gUmF3IG1vZGUgKi8KK2ludCBCUkxBUElfU1REQ0FMTCBicmxhcGlfX2VudGVyUmF3TW9kZShicmxhcGlfaGFuZGxlX3QgKmhhbmRsZSwgY29uc3QgY2hhciAqZHJpdmVyKQoreworICByZXR1cm4gYnJsYXBpX19nZXREcml2ZXJTcGVjaWZpYyhoYW5kbGUsIGRyaXZlciwgQlJMQVBJX1BBQ0tFVF9FTlRFUlJBV01PREUsIFNUUkFXKTsKK30KKworaW50IEJSTEFQSV9TVERDQUxMIGJybGFwaV9lbnRlclJhd01vZGUoY29uc3QgY2hhciAqZHJpdmVyKQoreworICByZXR1cm4gYnJsYXBpX19lbnRlclJhd01vZGUoJmRlZmF1bHRIYW5kbGUsIGRyaXZlcik7Cit9CisKKy8qIGJybGFwaV9sZWF2ZVJhd01vZGUgKi8KKy8qIExlYXZlIFJhdyBtb2RlICovCitpbnQgQlJMQVBJX1NURENBTEwgYnJsYXBpX19sZWF2ZVJhd01vZGUoYnJsYXBpX2hhbmRsZV90ICpoYW5kbGUpCit7CisgIHJldHVybiBicmxhcGlfX2xlYXZlRHJpdmVyU3BlY2lmaWMoaGFuZGxlLCBCUkxBUElfUEFDS0VUX0xFQVZFUkFXTU9ERSwgU1RSQVcpOworfQorCitpbnQgQlJMQVBJX1NURENBTEwgYnJsYXBpX2xlYXZlUmF3TW9kZSh2b2lkKQoreworICByZXR1cm4gYnJsYXBpX19sZWF2ZVJhd01vZGUoJmRlZmF1bHRIYW5kbGUpOworfQorCisvKiBicmxhcGlfc2VuZFJhdyAqLworLyogU2VuZCBhIFJhdyBQYWNrZXQgKi8KK3NzaXplX3QgQlJMQVBJX1NURENBTEwgYnJsYXBpX19zZW5kUmF3KGJybGFwaV9oYW5kbGVfdCAqaGFuZGxlLCBjb25zdCB2b2lkICpidWYsIHNpemVfdCBzaXplKQoreworICBzc2l6ZV90IHJlczsKKyAgcHRocmVhZF9tdXRleF9sb2NrKCZoYW5kbGUtPmZpbGVEZXNjcmlwdG9yX211dGV4KTsKKyAgcmVzPWJybGFwaV93cml0ZVBhY2tldChoYW5kbGUtPmZpbGVEZXNjcmlwdG9yLCBCUkxBUElfUEFDS0VUX1BBQ0tFVCwgYnVmLCBzaXplKTsKKyAgcHRocmVhZF9tdXRleF91bmxvY2soJmhhbmRsZS0+ZmlsZURlc2NyaXB0b3JfbXV0ZXgpOworICByZXR1cm4gcmVzOworfQorCitzc2l6ZV90IEJSTEFQSV9TVERDQUxMIGJybGFwaV9zZW5kUmF3KGNvbnN0IHZvaWQgKmJ1Ziwgc2l6ZV90IHNpemUpCit7CisgIHJldHVybiBicmxhcGlfX3NlbmRSYXcoJmRlZmF1bHRIYW5kbGUsIGJ1Ziwgc2l6ZSk7Cit9CisKKy8qIGJybGFwaV9yZWN2UmF3ICovCisvKiBHZXQgYSBSYXcgcGFja2V0ICovCitzc2l6ZV90IEJSTEFQSV9TVERDQUxMIGJybGFwaV9fcmVjdlJhdyhicmxhcGlfaGFuZGxlX3QgKmhhbmRsZSwgdm9pZCAqYnVmLCBzaXplX3Qgc2l6ZSkKK3sKKyAgc3NpemVfdCByZXM7CisgIGlmICghKGhhbmRsZS0+c3RhdGUgJiBTVFJBVykpIHsKKyAgICBicmxhcGlfZXJybm8gPSBCUkxBUElfRVJST1JfSUxMRUdBTF9JTlNUUlVDVElPTjsKKyAgICByZXR1cm4gLTE7CisgIH0KKyAgcmVzID0gYnJsYXBpX193YWl0Rm9yUGFja2V0KGhhbmRsZSwgQlJMQVBJX1BBQ0tFVF9QQUNLRVQsIGJ1Ziwgc2l6ZSwgVFJZX1dBSVRfRk9SX0VYUEVDVEVEX1BBQ0tFVCwgV0FJVF9GT1JFVkVSKTsKKyAgaWYgKHJlcyA9PSAtMykgeworICAgIGJybGFwaV9saWJjZXJybm8gPSBFSU5UUjsKKyAgICBicmxhcGlfZXJybm8gPSBCUkxBUElfRVJST1JfTElCQ0VSUjsKKyAgICBicmxhcGlfZXJyZnVuID0gIndhaXRGb3JQYWNrZXQiOworICAgIHJlcyA9IC0xOworICB9CisgIHJldHVybiByZXM7Cit9CisKK3NzaXplX3QgQlJMQVBJX1NURENBTEwgYnJsYXBpX3JlY3ZSYXcodm9pZCAqYnVmLCBzaXplX3Qgc2l6ZSkKK3sKKyAgcmV0dXJuIGJybGFwaV9fcmVjdlJhdygmZGVmYXVsdEhhbmRsZSwgYnVmLCBzaXplKTsKK30KKworLyogYnJsYXBpX3N1c3BlbmREcml2ZXIgKi8KK2ludCBCUkxBUElfU1REQ0FMTCBicmxhcGlfX3N1c3BlbmREcml2ZXIoYnJsYXBpX2hhbmRsZV90ICpoYW5kbGUsIGNvbnN0IGNoYXIgKmRyaXZlcikKK3sKKyAgcmV0dXJuIGJybGFwaV9fZ2V0RHJpdmVyU3BlY2lmaWMoaGFuZGxlLCBkcml2ZXIsIEJSTEFQSV9QQUNLRVRfU1VTUEVORERSSVZFUiwgU1RTVVNQRU5EKTsKK30KKworaW50IEJSTEFQSV9TVERDQUxMIGJybGFwaV9zdXNwZW5kRHJpdmVyKGNvbnN0IGNoYXIgKmRyaXZlcikKK3sKKyAgcmV0dXJuIGJybGFwaV9fc3VzcGVuZERyaXZlcigmZGVmYXVsdEhhbmRsZSwgZHJpdmVyKTsKK30KKworLyogYnJsYXBpX3Jlc3VtZURyaXZlciAqLworaW50IEJSTEFQSV9TVERDQUxMIGJybGFwaV9fcmVzdW1lRHJpdmVyKGJybGFwaV9oYW5kbGVfdCAqaGFuZGxlKQoreworICByZXR1cm4gYnJsYXBpX19sZWF2ZURyaXZlclNwZWNpZmljKGhhbmRsZSwgQlJMQVBJX1BBQ0tFVF9SRVNVTUVEUklWRVIsIFNUU1VTUEVORCk7Cit9CisKK2ludCBCUkxBUElfU1REQ0FMTCBicmxhcGlfcmVzdW1lRHJpdmVyKHZvaWQpCit7CisgIHJldHVybiBicmxhcGlfX3Jlc3VtZURyaXZlcigmZGVmYXVsdEhhbmRsZSk7Cit9CisKKy8qIEZ1bmN0aW9uIGJybGFwaV9yZXF1ZXN0ICovCisvKiBTZW5kcyBhIHJlcXVlc3QgdG8gdGhlIEFQSSBhbmQgd2FpdHMgZm9yIHRoZSBhbnN3ZXIgKi8KKy8qIFRoZSBhbnN3ZXIgaXMgcHV0IGluIHRoZSBnaXZlbiBwYWNrZXQgKi8KK3N0YXRpYyBzc2l6ZV90IGJybGFwaV9fcmVxdWVzdChicmxhcGlfaGFuZGxlX3QgKmhhbmRsZSwgYnJsYXBpX3BhY2tldFR5cGVfdCByZXF1ZXN0LCB2b2lkICpwYWNrZXQsIHNpemVfdCBzaXplKQoreworICBzc2l6ZV90IHJlczsKKyAgcHRocmVhZF9tdXRleF9sb2NrKCZoYW5kbGUtPnJlcV9tdXRleCk7CisgIHJlcyA9IGJybGFwaV93cml0ZVBhY2tldChoYW5kbGUtPmZpbGVEZXNjcmlwdG9yLCByZXF1ZXN0LCBOVUxMLCAwKTsKKyAgaWYgKHJlcz09LTEpIHsKKyAgICBwdGhyZWFkX211dGV4X3VubG9jaygmaGFuZGxlLT5yZXFfbXV0ZXgpOworICAgIHJldHVybiAtMTsKKyAgfQorICByZXMgPSBicmxhcGlfX3dhaXRGb3JQYWNrZXQoaGFuZGxlLCByZXF1ZXN0LCBwYWNrZXQsIHNpemUsIFdBSVRfRk9SX0VYUEVDVEVEX1BBQ0tFVCwgV0FJVF9GT1JFVkVSKTsKKyAgcHRocmVhZF9tdXRleF91bmxvY2soJmhhbmRsZS0+cmVxX211dGV4KTsKKyAgcmV0dXJuIHJlczsKK30KKworLyogRnVuY3Rpb24gOiBicmxhcGlfZ2V0RHJpdmVyTmFtZSAqLworLyogTmFtZSBvZiB0aGUgZHJpdmVyIHVzZWQgYnkgYnJsdHR5ICovCitpbnQgQlJMQVBJX1NURENBTEwgYnJsYXBpX19nZXREcml2ZXJOYW1lKGJybGFwaV9oYW5kbGVfdCAqaGFuZGxlLCBjaGFyICpuYW1lLCBzaXplX3QgbikKK3sKKyAgc3NpemVfdCByZXMgPSBicmxhcGlfX3JlcXVlc3QoaGFuZGxlLCBCUkxBUElfUEFDS0VUX0dFVERSSVZFUk5BTUUsIG5hbWUsIG4pOworICBpZiAoKHJlcz4wKSAmJiAocmVzPD1uKSkgbmFtZVtyZXMtMV0gPSAnXDAnOworICByZXR1cm4gcmVzOworfQorCitpbnQgQlJMQVBJX1NURENBTEwgYnJsYXBpX2dldERyaXZlck5hbWUoY2hhciAqbmFtZSwgc2l6ZV90IG4pCit7CisgIHJldHVybiBicmxhcGlfX2dldERyaXZlck5hbWUoJmRlZmF1bHRIYW5kbGUsIG5hbWUsIG4pOworfQorCisvKiBGdW5jdGlvbiA6IGJybGFwaV9nZXRNb2RlbElkZW50aWZpZXIgKi8KKy8qIEFuIGlkZW50aWZpZXIgZm9yIHRoZSBtb2RlbCBvZiB0aGUgZGV2aWNlIHVzZWQgYnkgYnJsdHR5ICovCitpbnQgQlJMQVBJX1NURENBTEwgYnJsYXBpX19nZXRNb2RlbElkZW50aWZpZXIoYnJsYXBpX2hhbmRsZV90ICpoYW5kbGUsIGNoYXIgKmlkZW50aWZpZXIsIHNpemVfdCBuKQoreworICBzc2l6ZV90IHJlcyA9IGJybGFwaV9fcmVxdWVzdChoYW5kbGUsIEJSTEFQSV9QQUNLRVRfR0VUTU9ERUxJRCwgaWRlbnRpZmllciwgbik7CisgIGlmICgocmVzPjApICYmIChyZXM8PW4pKSBpZGVudGlmaWVyW3Jlcy0xXSA9ICdcMCc7CisgIHJldHVybiByZXM7Cit9CisKK2ludCBCUkxBUElfU1REQ0FMTCBicmxhcGlfZ2V0TW9kZWxJZGVudGlmaWVyKGNoYXIgKmlkZW50aWZpZXIsIHNpemVfdCBuKQoreworICByZXR1cm4gYnJsYXBpX19nZXRNb2RlbElkZW50aWZpZXIoJmRlZmF1bHRIYW5kbGUsIGlkZW50aWZpZXIsIG4pOworfQorCisvKiBGdW5jdGlvbiA6IGJybGFwaV9nZXREaXNwbGF5U2l6ZSAqLworLyogUmV0dXJucyB0aGUgc2l6ZSBvZiB0aGUgYnJhaWxsZSBkaXNwbGF5ICovCitpbnQgQlJMQVBJX1NURENBTEwgYnJsYXBpX19nZXREaXNwbGF5U2l6ZShicmxhcGlfaGFuZGxlX3QgKmhhbmRsZSwgdW5zaWduZWQgaW50ICp4LCB1bnNpZ25lZCBpbnQgKnkpCit7CisgIHVpbnQzMl90IGRpc3BsYXlTaXplWzJdOworICBzc2l6ZV90IHJlczsKKworICBpZiAoaGFuZGxlLT5icmx4JiZoYW5kbGUtPmJybHkpIHsgKnggPSBoYW5kbGUtPmJybHg7ICp5ID0gaGFuZGxlLT5icmx5OyByZXR1cm4gMDsgfQorICByZXMgPSBicmxhcGlfX3JlcXVlc3QoaGFuZGxlLCBCUkxBUElfUEFDS0VUX0dFVERJU1BMQVlTSVpFLCBkaXNwbGF5U2l6ZSwgc2l6ZW9mKGRpc3BsYXlTaXplKSk7CisgIGlmIChyZXM9PS0xKSB7IHJldHVybiAtMTsgfQorICBoYW5kbGUtPmJybHggPSBudG9obChkaXNwbGF5U2l6ZVswXSk7CisgIGhhbmRsZS0+YnJseSA9IG50b2hsKGRpc3BsYXlTaXplWzFdKTsKKyAgKnggPSBoYW5kbGUtPmJybHg7ICp5ID0gaGFuZGxlLT5icmx5OworICByZXR1cm4gMDsKK30KKworaW50IEJSTEFQSV9TVERDQUxMIGJybGFwaV9nZXREaXNwbGF5U2l6ZSh1bnNpZ25lZCBpbnQgKngsIHVuc2lnbmVkIGludCAqeSkKK3sKKyAgcmV0dXJuIGJybGFwaV9fZ2V0RGlzcGxheVNpemUoJmRlZmF1bHRIYW5kbGUsIHgsIHkpOworfQorCisvKiBGdW5jdGlvbjogYnJsYXBpX2dldFBhcmFtZXRlciAqLworCisvKiBJbnRlcm5hbCB2ZXJzaW9uLCByZXR1cm5zIHRoZSByZXBseSB2YWx1ZSBwYWNrZXQgYW5kIHRoZSBsZW5ndGggb2YgdGhlIHZhbHVlICovCitzdGF0aWMgc3NpemVfdCBfYnJsYXBpX19nZXRQYXJhbWV0ZXIoYnJsYXBpX2hhbmRsZV90ICpoYW5kbGUsIGJybGFwaV9wYXJhbV90IHBhcmFtZXRlciwgYnJsYXBpX3BhcmFtX3N1YnBhcmFtX3Qgc3VicGFyYW0sIGJybGFwaV9wYXJhbV9mbGFnc190IGZsYWdzLCBicmxhcGlfcGFyYW1WYWx1ZVBhY2tldF90ICpyZXBseSkKK3sKKyAgYnJsYXBpX3BhcmFtUmVxdWVzdFBhY2tldF90IHJlcXVlc3Q7CisgIGludCByZXM7CisgIHNzaXplX3QgcmxlbjsKKworICByZXF1ZXN0LmZsYWdzID0gaHRvbmwoZmxhZ3MpOworICByZXF1ZXN0LnBhcmFtID0gaHRvbmwocGFyYW1ldGVyKTsKKyAgcmVxdWVzdC5zdWJwYXJhbV9oaSA9IGh0b25sKHN1YnBhcmFtID4+IDMyKTsKKyAgcmVxdWVzdC5zdWJwYXJhbV9sbyA9IGh0b25sKHN1YnBhcmFtICYgMHhmZmZmZmZmZnVsKTsKKworICBwdGhyZWFkX211dGV4X2xvY2soJmhhbmRsZS0+cmVxX211dGV4KTsKKyAgcmVzID0gYnJsYXBpX3dyaXRlUGFja2V0KGhhbmRsZS0+ZmlsZURlc2NyaXB0b3IsIEJSTEFQSV9QQUNLRVRfUEFSQU1fUkVRVUVTVCwgJnJlcXVlc3QsIHNpemVvZihyZXF1ZXN0KSk7CisgIGlmIChyZXMgPCAwKSB7CisgICAgcHRocmVhZF9tdXRleF91bmxvY2soJmhhbmRsZS0+cmVxX211dGV4KTsKKyAgICByZXR1cm4gLTE7CisgIH0KKyAgaWYgKGZsYWdzICYgQlJMQVBJX1BBUkFNRl9HRVQpCisgICAgcmxlbiA9IGJybGFwaV9fd2FpdEZvclBhY2tldChoYW5kbGUsIEJSTEFQSV9QQUNLRVRfUEFSQU1fVkFMVUUsIHJlcGx5LCBzaXplb2YoKnJlcGx5KSwgMSwgLTEpOworICBlbHNlCisgICAgcmxlbiA9IGJybGFwaV9fd2FpdEZvckFjayhoYW5kbGUpOworICBwdGhyZWFkX211dGV4X3VubG9jaygmaGFuZGxlLT5yZXFfbXV0ZXgpOworCisgIGlmIChybGVuIDwgMCkgeworICAgIHJldHVybiAtMTsKKyAgfQorCisgIGlmIChmbGFncyAmIEJSTEFQSV9QQVJBTUZfR0VUKSB7CisgICAgcmxlbiAtPSBzaXplb2YoYnJsYXBpX3BhcmFtX2ZsYWdzX3QpICsgc2l6ZW9mKGJybGFwaV9wYXJhbV90KSArIHNpemVvZihicmxhcGlfcGFyYW1fc3VicGFyYW1fdCk7CisgICAgaWYgKHJsZW4gPCAwKSB7CisgICAgICBicmxhcGlfZXJybm8gPSBCUkxBUElfRVJST1JfSU5WQUxJRF9QQVJBTUVURVI7CisgICAgICByZXR1cm4gLTE7CisgICAgfQorICB9CisKKyAgcmV0dXJuIHJsZW47Cit9CisKK3NzaXplX3QgQlJMQVBJX1NURENBTEwgYnJsYXBpX19nZXRQYXJhbWV0ZXIoYnJsYXBpX2hhbmRsZV90ICpoYW5kbGUsIGJybGFwaV9wYXJhbV90IHBhcmFtZXRlciwgYnJsYXBpX3BhcmFtX3N1YnBhcmFtX3Qgc3VicGFyYW0sIGJybGFwaV9wYXJhbV9mbGFnc190IGZsYWdzLCB2b2lkKiBkYXRhLCBzaXplX3QgbGVuKQoreworICBicmxhcGlfcGFyYW1WYWx1ZVBhY2tldF90IHJlcGx5OworICBzc2l6ZV90IHJsZW47CisKKyAgaWYgKGZsYWdzICYgfkJSTEFQSV9QQVJBTUZfR0xPQkFMKSB7CisgICAgYnJsYXBpX2Vycm5vID0gQlJMQVBJX0VSUk9SX0lOVkFMSURfUEFSQU1FVEVSOworICAgIHJldHVybiAtMTsKKyAgfQorCisgIHJsZW4gPSBfYnJsYXBpX19nZXRQYXJhbWV0ZXIoaGFuZGxlLCBwYXJhbWV0ZXIsIHN1YnBhcmFtLCBmbGFncyB8IEJSTEFQSV9QQVJBTUZfR0VULCAmcmVwbHkpOworICBpZiAocmxlbiA8IDApCisgICAgcmV0dXJuIC0xOworCisgIGlmIChybGVuIDwgbGVuKSB7CisgICAgbGVuID0gcmxlbjsKKyAgfQorICBfYnJsYXBpX250b2hQYXJhbWV0ZXIocGFyYW1ldGVyLCAmcmVwbHksIHJsZW4pOworICBtZW1jcHkoZGF0YSwgJnJlcGx5LmRhdGEsIGxlbik7CisKKyAgcmV0dXJuIHJsZW47Cit9CisKK3NzaXplX3QgQlJMQVBJX1NURENBTEwgYnJsYXBpX2dldFBhcmFtZXRlcihicmxhcGlfcGFyYW1fdCBwYXJhbWV0ZXIsIGJybGFwaV9wYXJhbV9zdWJwYXJhbV90IHN1YnBhcmFtLCBicmxhcGlfcGFyYW1fZmxhZ3NfdCBmbGFncywgdm9pZCogZGF0YSwgc2l6ZV90IGxlbikKK3sKKyAgcmV0dXJuIGJybGFwaV9fZ2V0UGFyYW1ldGVyKCZkZWZhdWx0SGFuZGxlLCBwYXJhbWV0ZXIsIHN1YnBhcmFtLCBmbGFncywgZGF0YSwgbGVuKTsKK30KKwordm9pZCogQlJMQVBJX1NURENBTEwgYnJsYXBpX19nZXRQYXJhbWV0ZXJBbGxvYyhicmxhcGlfaGFuZGxlX3QgKmhhbmRsZSwgYnJsYXBpX3BhcmFtX3QgcGFyYW1ldGVyLCBicmxhcGlfcGFyYW1fc3VicGFyYW1fdCBzdWJwYXJhbSwgYnJsYXBpX3BhcmFtX2ZsYWdzX3QgZmxhZ3MsIHNpemVfdCAqbGVuKQoreworICBicmxhcGlfcGFyYW1WYWx1ZVBhY2tldF90IHJlcGx5OworICBzc2l6ZV90IHJsZW47CisgIHZvaWQgKmRhdGE7CisKKyAgaWYgKGZsYWdzICYgfkJSTEFQSV9QQVJBTUZfR0xPQkFMKSB7CisgICAgYnJsYXBpX2Vycm5vID0gQlJMQVBJX0VSUk9SX0lOVkFMSURfUEFSQU1FVEVSOworICAgIHJldHVybiBOVUxMOworICB9CisKKyAgcmxlbiA9IF9icmxhcGlfX2dldFBhcmFtZXRlcihoYW5kbGUsIHBhcmFtZXRlciwgc3VicGFyYW0sIGZsYWdzIHwgQlJMQVBJX1BBUkFNRl9HRVQsICZyZXBseSk7CisgIGlmIChybGVuIDwgMCkKKyAgICByZXR1cm4gTlVMTDsKKworICBkYXRhID0gbWFsbG9jKHJsZW4gKyAxKTsKKyAgaWYgKCFkYXRhKQorICAgIHJldHVybiBOVUxMOworCisgIF9icmxhcGlfbnRvaFBhcmFtZXRlcihwYXJhbWV0ZXIsICZyZXBseSwgcmxlbik7CisgIG1lbWNweShkYXRhLCAmcmVwbHkuZGF0YSwgcmxlbik7CisgICgoY2hhciopZGF0YSlbcmxlbl0gPSAwOworICBpZiAobGVuKQorICAgICpsZW4gPSBybGVuOworICByZXR1cm4gZGF0YTsKK30KKwordm9pZCogQlJMQVBJX1NURENBTEwgYnJsYXBpX2dldFBhcmFtZXRlckFsbG9jKGJybGFwaV9wYXJhbV90IHBhcmFtZXRlciwgYnJsYXBpX3BhcmFtX3N1YnBhcmFtX3Qgc3VicGFyYW0sIGJybGFwaV9wYXJhbV9mbGFnc190IGZsYWdzLCBzaXplX3QgKmxlbikKK3sKKyAgcmV0dXJuIGJybGFwaV9fZ2V0UGFyYW1ldGVyQWxsb2MoJmRlZmF1bHRIYW5kbGUsIHBhcmFtZXRlciwgc3VicGFyYW0sIGZsYWdzLCBsZW4pOworfQorCisvKiBGdW5jdGlvbjogYnJsYXBpX3NldFBhcmFtZXRlciAqLworaW50IEJSTEFQSV9TVERDQUxMIGJybGFwaV9fc2V0UGFyYW1ldGVyKGJybGFwaV9oYW5kbGVfdCAqaGFuZGxlLCBicmxhcGlfcGFyYW1fdCBwYXJhbWV0ZXIsIGJybGFwaV9wYXJhbV9zdWJwYXJhbV90IHN1YnBhcmFtLCBicmxhcGlfcGFyYW1fZmxhZ3NfdCBmbGFncywgY29uc3Qgdm9pZCogZGF0YSwgc2l6ZV90IGxlbikKK3sKKyAgYnJsYXBpX3BhcmFtVmFsdWVQYWNrZXRfdCBwYWNrZXQ7CisgIGludCByZXM7CisKKyAgaWYgKGZsYWdzICYgfkJSTEFQSV9QQVJBTUZfR0xPQkFMKSB7CisgICAgYnJsYXBpX2Vycm5vID0gQlJMQVBJX0VSUk9SX0lOVkFMSURfUEFSQU1FVEVSOworICAgIHJldHVybiAtMTsKKyAgfQorCisgIGlmIChsZW4gPiBzaXplb2YocGFja2V0LmRhdGEpKSB7CisgICAgYnJsYXBpX2Vycm5vID0gQlJMQVBJX0VSUk9SX0lOVkFMSURfUEFSQU1FVEVSOworICAgIHJldHVybiAtMTsKKyAgfQorCisgIHBhY2tldC5mbGFncyA9IGh0b25sKGZsYWdzKTsKKyAgcGFja2V0LnBhcmFtID0gaHRvbmwocGFyYW1ldGVyKTsKKyAgcGFja2V0LnN1YnBhcmFtX2hpID0gaHRvbmwoc3VicGFyYW0gPj4gMzIpOworICBwYWNrZXQuc3VicGFyYW1fbG8gPSBodG9ubChzdWJwYXJhbSAmIDB4ZmZmZmZmZmZ1bCk7CisgIG1lbWNweShwYWNrZXQuZGF0YSwgZGF0YSwgbGVuKTsKKyAgX2JybGFwaV9odG9uUGFyYW1ldGVyKHBhcmFtZXRlciwgJnBhY2tldCwgbGVuKTsKKworICByZXMgPSBicmxhcGlfX3dyaXRlUGFja2V0V2FpdEZvckFjayhoYW5kbGUsIEJSTEFQSV9QQUNLRVRfUEFSQU1fVkFMVUUsICZwYWNrZXQsIHNpemVvZihwYWNrZXQuZmxhZ3MpICsgc2l6ZW9mKHBhcmFtZXRlcikgKyBzaXplb2Yoc3VicGFyYW0pICsgbGVuKTsKKyAgcmV0dXJuIHJlczsKK30KKworaW50IEJSTEFQSV9TVERDQUxMIGJybGFwaV9zZXRQYXJhbWV0ZXIoYnJsYXBpX3BhcmFtX3QgcGFyYW1ldGVyLCBicmxhcGlfcGFyYW1fc3VicGFyYW1fdCBzdWJwYXJhbSwgYnJsYXBpX3BhcmFtX2ZsYWdzX3QgZmxhZ3MsIGNvbnN0IHZvaWQqIGRhdGEsIHNpemVfdCBsZW4pCit7CisgIHJldHVybiBicmxhcGlfX3NldFBhcmFtZXRlcigmZGVmYXVsdEhhbmRsZSwgcGFyYW1ldGVyLCBzdWJwYXJhbSwgZmxhZ3MsIGRhdGEsIGxlbik7Cit9CisKKy8qIEZ1bmN0aW9uOiBicmxhcGlfd2F0Y2hQYXJhbWV0ZXIgKi8KK2JybGFwaV9wYXJhbUNhbGxiYWNrRGVzY3JpcHRvcl90IEJSTEFQSV9TVERDQUxMIGJybGFwaV9fd2F0Y2hQYXJhbWV0ZXIoYnJsYXBpX2hhbmRsZV90ICpoYW5kbGUsIGJybGFwaV9wYXJhbV90IHBhcmFtZXRlciwgYnJsYXBpX3BhcmFtX3N1YnBhcmFtX3Qgc3VicGFyYW0sIGJybGFwaV9wYXJhbV9mbGFnc190IGZsYWdzLCBicmxhcGlfcGFyYW1DYWxsYmFja190IGZ1bmMsIHZvaWQgKnByaXYsIHZvaWQqIGRhdGEsIHNpemVfdCBsZW4pCit7CisgIGJybGFwaV9wYXJhbVZhbHVlUGFja2V0X3QgcmVwbHk7CisgIHNzaXplX3QgcmxlbjsKKyAgc3RydWN0IGJybGFwaV9wYXJhbWV0ZXJDYWxsYmFja190ICpjYWxsYmFjazsKKworICBpZiAoZmxhZ3MgJiB+KEJSTEFQSV9QQVJBTUZfR0xPQkFMfEJSTEFQSV9QQVJBTUZfU0VMRikpIHsKKyAgICBicmxhcGlfZXJybm8gPSBCUkxBUElfRVJST1JfSU5WQUxJRF9QQVJBTUVURVI7CisgICAgcmV0dXJuIE5VTEw7CisgIH0KKworICBwdGhyZWFkX211dGV4X2xvY2soJmhhbmRsZS0+Y2FsbGJhY2tzX211dGV4KTsKKyAgcmxlbiA9IF9icmxhcGlfX2dldFBhcmFtZXRlcihoYW5kbGUsIHBhcmFtZXRlciwgc3VicGFyYW0sIGZsYWdzIHwgQlJMQVBJX1BBUkFNRl9HRVQgfCBCUkxBUElfUEFSQU1GX1NVQlNDUklCRSwgJnJlcGx5KTsKKyAgaWYgKHJsZW4gPCAwKSB7CisgICAgcHRocmVhZF9tdXRleF91bmxvY2soJmhhbmRsZS0+Y2FsbGJhY2tzX211dGV4KTsKKyAgICByZXR1cm4gTlVMTDsKKyAgfQorCisgIGNhbGxiYWNrID0gbWFsbG9jKHNpemVvZigqY2FsbGJhY2spKTsKKyAgaWYgKGNhbGxiYWNrID09IE5VTEwpIHsKKyAgICBicmxhcGlfZXJybm8gPSBCUkxBUElfRVJST1JfTk9NRU07CisgICAgcmV0dXJuIE5VTEw7CisgIH0KKyAgY2FsbGJhY2stPnBhcmFtZXRlciA9IHBhcmFtZXRlcjsKKyAgY2FsbGJhY2stPnN1YnBhcmFtID0gc3VicGFyYW07CisgIGNhbGxiYWNrLT5mbGFncyA9IGZsYWdzOworICBjYWxsYmFjay0+ZnVuYyA9IGZ1bmM7CisgIGNhbGxiYWNrLT5wcml2ID0gcHJpdjsKKworICBjYWxsYmFjay0+bmV4dCA9IGhhbmRsZS0+cGFyYW1ldGVyQ2FsbGJhY2tzOworICBpZiAoY2FsbGJhY2stPm5leHQpCisgICAgY2FsbGJhY2stPm5leHQtPnByZXYgPSBjYWxsYmFjazsKKyAgY2FsbGJhY2stPnByZXYgPSBOVUxMOworICBoYW5kbGUtPnBhcmFtZXRlckNhbGxiYWNrcyA9IGNhbGxiYWNrOworCisgIF9icmxhcGlfbnRvaFBhcmFtZXRlcihwYXJhbWV0ZXIsICZyZXBseSwgcmxlbik7CisgIGlmIChkYXRhKSB7CisgICAgaWYgKHJsZW4gPCBsZW4pIHsKKyAgICAgIGxlbiA9IHJsZW47CisgICAgfQorICAgIG1lbWNweShkYXRhLCAmcmVwbHkuZGF0YSwgbGVuKTsKKyAgfSBlbHNlIHsKKyAgICBmdW5jKHBhcmFtZXRlciwgc3VicGFyYW0sIGZsYWdzLCBwcml2LCAmcmVwbHkuZGF0YSwgcmxlbik7CisgIH0KKyAgcHRocmVhZF9tdXRleF91bmxvY2soJmhhbmRsZS0+Y2FsbGJhY2tzX211dGV4KTsKKworICByZXR1cm4gY2FsbGJhY2s7Cit9CisKK2JybGFwaV9wYXJhbUNhbGxiYWNrRGVzY3JpcHRvcl90IEJSTEFQSV9TVERDQUxMIGJybGFwaV93YXRjaFBhcmFtZXRlcihicmxhcGlfcGFyYW1fdCBwYXJhbWV0ZXIsIGJybGFwaV9wYXJhbV9zdWJwYXJhbV90IHN1YnBhcmFtLCBicmxhcGlfcGFyYW1fZmxhZ3NfdCBmbGFncywgYnJsYXBpX3BhcmFtQ2FsbGJhY2tfdCBmdW5jLCB2b2lkICpwcml2LCB2b2lkKiBkYXRhLCBzaXplX3QgbGVuKQoreworICByZXR1cm4gYnJsYXBpX193YXRjaFBhcmFtZXRlcigmZGVmYXVsdEhhbmRsZSwgcGFyYW1ldGVyLCBzdWJwYXJhbSwgZmxhZ3MsIGZ1bmMsIHByaXYsIGRhdGEsIGxlbik7Cit9CisKKy8qIEZ1bmN0aW9uOiBicmxhcGlfdW53YXRjaFBhcmFtZXRlciAqLworaW50IEJSTEFQSV9TVERDQUxMIGJybGFwaV9fdW53YXRjaFBhcmFtZXRlcihicmxhcGlfaGFuZGxlX3QgKmhhbmRsZSwgYnJsYXBpX3BhcmFtQ2FsbGJhY2tEZXNjcmlwdG9yX3QgZGVzY3JpcHRvcikKK3sKKyAgYnJsYXBpX3BhcmFtVmFsdWVQYWNrZXRfdCByZXBseTsKKyAgc3NpemVfdCBybGVuOworICBzdHJ1Y3QgYnJsYXBpX3BhcmFtZXRlckNhbGxiYWNrX3QgKmNhbGxiYWNrID0gZGVzY3JpcHRvcjsKKworICBwdGhyZWFkX211dGV4X2xvY2soJmhhbmRsZS0+Y2FsbGJhY2tzX211dGV4KTsKKyAgcmxlbiA9IF9icmxhcGlfX2dldFBhcmFtZXRlcihoYW5kbGUsIGNhbGxiYWNrLT5wYXJhbWV0ZXIsIGNhbGxiYWNrLT5zdWJwYXJhbSwgY2FsbGJhY2stPmZsYWdzIHwgQlJMQVBJX1BBUkFNRl9VTlNVQlNDUklCRSwgJnJlcGx5KTsKKyAgaWYgKHJsZW4gPCAwKSB7CisgICAgcHRocmVhZF9tdXRleF91bmxvY2soJmhhbmRsZS0+Y2FsbGJhY2tzX211dGV4KTsKKyAgICByZXR1cm4gLTE7CisgIH0KKworICBpZiAoaGFuZGxlLT5uZXh0Q2FsbGJhY2sgPT0gY2FsbGJhY2spIHsKKyAgICAvKiBXZSBtaWdodCBiZSByZW1vdmluZyBhbiBlbnRyeSB3aGljaCBicmxhcGlfX2RvV2FpdEZvclBhY2tldCB3YXMgcGxhbm5pbmcKKyAgICAgKiB0byBoYXZlIGEgbG9vayBhdCBuZXh0LCBtYWtlIGl0IHNraXAgaXQuICovCisgICAgaGFuZGxlLT5uZXh0Q2FsbGJhY2sgPSBoYW5kbGUtPm5leHRDYWxsYmFjay0+bmV4dDsKKyAgfQorCisgIGlmIChjYWxsYmFjay0+bmV4dCkgeworICAgIGNhbGxiYWNrLT5uZXh0LT5wcmV2ID0gY2FsbGJhY2stPnByZXY7CisgIH0KKyAgaWYgKGNhbGxiYWNrLT5wcmV2KSB7CisgICAgY2FsbGJhY2stPnByZXYtPm5leHQgPSBjYWxsYmFjay0+bmV4dDsKKyAgfSBlbHNlIHsKKyAgICBoYW5kbGUtPnBhcmFtZXRlckNhbGxiYWNrcyA9IGNhbGxiYWNrLT5uZXh0OworICB9CisgIHB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZoYW5kbGUtPmNhbGxiYWNrc19tdXRleCk7CisgIGZyZWUoY2FsbGJhY2spOworICByZXR1cm4gMDsKK30KKworaW50IEJSTEFQSV9TVERDQUxMIGJybGFwaV91bndhdGNoUGFyYW1ldGVyKGJybGFwaV9wYXJhbUNhbGxiYWNrRGVzY3JpcHRvcl90IGRlc2NyaXB0b3IpCit7CisgIHJldHVybiBicmxhcGlfX3Vud2F0Y2hQYXJhbWV0ZXIoJmRlZmF1bHRIYW5kbGUsIGRlc2NyaXB0b3IpOworfQorCisKKy8qIEZ1bmN0aW9uIDogZ2V0Q29udHJvbGxpbmdUdHkgKi8KKy8qIFJldHVybnMgdGhlIG51bWJlciBvZiB0aGUgY2FsbGVyJ3MgY29udHJvbGxpbmcgdGVybWluYWwgKi8KKy8qIC0xIGlmIGVycm9yIG9yIHVua25vd24gKi8KK3N0YXRpYyBpbnQgZ2V0Q29udHJvbGxpbmdUdHkodm9pZCkKK3sKKyAgaW50IHR0eTsKKyAgY29uc3QgY2hhciAqZW52OworCisgIC8qaWYgKChlbnYgPSBnZXRlbnYoIldJTkRPVyIpKSAmJiBzc2NhbmYoZW52LCAiJXUiLCAmdHR5KSA9PSAxKSByZXR1cm4gdHR5OyovCisgIGlmICgoZW52ID0gZ2V0ZW52KCJXSU5ET1dJRCIpKSAmJiBzc2NhbmYoZW52LCAiJXUiLCAmdHR5KSA9PSAxKSByZXR1cm4gdHR5OworICBpZiAoKGVudiA9IGdldGVudigiQ09OVFJPTFZUIikpICYmIHNzY2FuZihlbnYsICIldSIsICZ0dHkpID09IDEpIHJldHVybiB0dHk7CisgIGlmICghZ2V0ZW52KCJESVNQTEFZIikgJiYgIWdldGVudigiV0FZTEFORF9ESVNQTEFZIikpCisgICAgaWYgKChlbnYgPSBnZXRlbnYoIlhER19WVE5SIikpICYmIHNzY2FuZihlbnYsICIldSIsICZ0dHkpID09IDEpIHJldHVybiB0dHk7CisKKyNpZmRlZiBXSU5ET1dTCisgIGlmIChDSEVDS0dFVFBST0MoImtlcm5lbDMyLmRsbCIsIEdldENvbnNvbGVXaW5kb3cpKQorICAgIC8qIHJlYWxseSBnb29kIGd1ZXNzICovCisgICAgaWYgKCh0dHkgPSAoTE9OR19QVFIpIEdldENvbnNvbGVXaW5kb3dQcm9jKCkpKSByZXR1cm4gdHR5OworICBpZiAoKHR0eSA9IChMT05HX1BUUikgR2V0QWN0aXZlV2luZG93KCkpIHx8ICh0dHkgPSAoTE9OR19QVFIpIEdldEZvY3VzKCkpKSB7CisgICAgLyogZ29vZCBndWVzcywgYnV0IG5lZWQgdG8gZ2V0IGJhY2sgdXAgdG8gcGFyZW50IHdpbmRvdyAqLworICAgIEhXTkQgcm9vdCA9IEdldERlc2t0b3BXaW5kb3coKTsKKyAgICBIV05EIHRtcCA9IChIV05EKSAoTE9OR19QVFIpIHR0eTsKKyAgICB3aGlsZSAoMSkgeworICAgICAgdG1wID0gR2V0UGFyZW50KHRtcCk7CisgICAgICBpZiAoIXRtcCB8fCB0bXAgPT0gcm9vdCkgcmV0dXJuIHR0eTsKKyAgICAgIHR0eSA9IChMT05HX1BUUikgdG1wOworICAgIH0KKyAgfQorICAvKiBwb29yIGd1ZXNzOiBhc3N1bWVzIHRoYXQgZm9jdXMgaXMgaGVyZSAqLworICBpZiAoKHR0eSA9IChMT05HX1BUUikgR2V0Rm9yZWdyb3VuZFdpbmRvdygpKSkgcmV0dXJuIHR0eTsKKyNlbmRpZiAvKiBXSU5ET1dTICovCisKKyNpZmRlZiBsaW51eAorICBkbyB7CisgICAgaW50IGZkID0gb3BlbigiL3Byb2Mvc2VsZi9zdGF0IiwgT19SRE9OTFksIDApOworICAgIGlmIChmZCA8IDApIHsKKyAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNoYXIgYnVmWzI1Nl07CisgICAgc3NpemVfdCByZWFkX2J5dGVzID0gcmVhZChmZCwgYnVmLCBzaXplb2YoYnVmKSAtIDEpOworICAgIGNsb3NlKGZkKTsKKyAgICBpZiAocmVhZF9ieXRlcyA8IDApIHsKKyAgICAgIGJyZWFrOworICAgIH0KKyAgICAvKiBBcHBlbmQgbnVsbCBhdCB0aGUgZW5kIG9mIGJ1ZmZlciB0byBlbnN1cmUgdGhhdCBzc2NhbmYgZG9lc24ndAorICAgICAqIG92ZXJmbG93cy4qLworICAgIGJ1ZltyZWFkX2J5dGVzXSA9ICdcMCc7CisKKyAgICAvKiBUaGUgbGluZSBmb3JtYXQgaXMgIiRwaWQgKCRjb21tKSAkc3RhdGUgLi4uCisgICAgICogd2hlcmUgY29tbSBtYXkgY29udGFpbiBzcGFjZSBhbmQgYClgIGFzIHBhcnQgb2YgaXRzIG5hbWUsIGV4OgorICAgICAqIDEyMzQ1IChzb21lIHByb2MgKGZvbykpIFIgLi4uCisgICAgICogU28gdG8gcHJvY2VzcyB2YWxpZCBpZGVudGlmaWVkIGFmdGVyIGNvbW0sIHdlIHNob3VsZCBza2lwIGNvbW0gYnkKKyAgICAgKiBnZXR0aW5nIHRoZSAxc3QgYClgIGZyb20gZW5kLgorICAgICAqLworICAgIGNoYXIgKnB0ciA9IGJ1ZiArIHJlYWRfYnl0ZXMgLSAxOworICAgIHdoaWxlIChwdHIgPiBidWYgJiYgKnB0ciAhPSAnKScpIHsKKyAgICAgIHB0ciAtPSAxOworICAgIH0KKyAgICBpZiAoKnB0ciAhPSAnKScpIHsKKyAgICAgIGJyZWFrOworICAgIH0KKyAgICAvKiBQb2ludCB0byBzcGFjZSBhZnRlciAoJGNvbW0pLiAqLworICAgIHB0ciArPSAxOworCisgICAgaW50IHZ0OworICAgIGludCBvayA9IHNzY2FuZihwdHIsICIgJSpjICUqZCAlKmQgJSpkICVkIiwgJnR0eSkgPT0gMTsKKworICAgIGlmIChvayAmJiAobWFqb3IodHR5KSA9PSBUVFlfTUFKT1IpKSB7CisgICAgICB2dCA9IG1pbm9yKHR0eSk7CisgICAgICBpZiAoKHZ0ID49IDEpICYmICh2dCA8PSBNQVhJTVVNX1ZJUlRVQUxfQ09OU09MRSkpIHJldHVybiB2dDsKKyAgICB9CisgIH0gd2hpbGUgKDApOworI2VuZGlmIC8qIGxpbnV4ICovCisKKyAgcmV0dXJuIC0xOworfQorCisvKiBGdW5jdGlvbiA6IGJybGFwaV9lbnRlclR0eU1vZGUgKi8KKy8qIFRha2VzIGNvbnRyb2wgb2YgYSB0dHkgKi8KK2ludCBCUkxBUElfU1REQ0FMTCBicmxhcGlfX2VudGVyVHR5TW9kZShicmxhcGlfaGFuZGxlX3QgKmhhbmRsZSwgaW50IHR0eSwgY29uc3QgY2hhciAqZHJpdmVyTmFtZSkKK3sKKyAgLyogRGV0ZXJtaW5lIHdoaWNoIHR0eSB0byB0YWtlIGNvbnRyb2wgb2YgKi8KKyAgaWYgKHR0eTwwKSB0dHkgPSBnZXRDb250cm9sbGluZ1R0eSgpOworICAvKiAwIGNhbiBiZSBhIHZhbGlkIHNjcmVlbiBXSU5ET1cKKyAgMHhmZmZmZmZmZiBjYW4gbm90IGJlIGEgdmFsaWQgV0lORE9XSUQgKHRvcCAzIGJpdHMgZ3VhcmFudGVlZCB0byBiZSB6ZXJvKSAqLworICBpZiAodHR5PDApIHsgYnJsYXBpX2Vycm5vPUJSTEFQSV9FUlJPUl9VTktOT1dOVFRZOyByZXR1cm4gLTE7IH0KKworICBpZiAoYnJsYXBpX19lbnRlclR0eU1vZGVXaXRoUGF0aChoYW5kbGUsICZ0dHksIDEsIGRyaXZlck5hbWUpKSByZXR1cm4gLTE7CisKKyAgcmV0dXJuIHR0eTsKK30KKworaW50IEJSTEFQSV9TVERDQUxMIGJybGFwaV9lbnRlclR0eU1vZGUoaW50IHR0eSwgY29uc3QgY2hhciAqaG93KQoreworICByZXR1cm4gYnJsYXBpX19lbnRlclR0eU1vZGUoJmRlZmF1bHRIYW5kbGUsIHR0eSwgaG93KTsKK30KKworLyogRnVuY3Rpb24gOiBicmxhcGlfZW50ZXJUdHlNb2RlV2l0aFBhdGggKi8KKy8qIFRha2VzIGNvbnRyb2wgb2YgYSB0dHkgcGF0aCAqLworaW50IEJSTEFQSV9TVERDQUxMIGJybGFwaV9fZW50ZXJUdHlNb2RlV2l0aFBhdGgoYnJsYXBpX2hhbmRsZV90ICpoYW5kbGUsIGNvbnN0IGludCAqdHR5cywgaW50IG50dHlzLCBjb25zdCBjaGFyICpkcml2ZXJOYW1lKQoreworICBpbnQgcmVzOworICB2b2lkICpwYWNrZXQ7CisgIHVuc2lnbmVkIGNoYXIgKnA7CisgIHVpbnQzMl90ICpuYlR0eXMsICp0OworICBjaGFyICp0dHl0cmVlcGF0aCwqY3VyLCpuZXh0OworICBpbnQgdHR5cGF0aDsKKyAgdW5zaWduZWQgaW50IG4sIG50dHl0cmVlcGF0aDsKKyAgc2l6ZV90IHNpemU7CisKKyAgcHRocmVhZF9tdXRleF9sb2NrKCZoYW5kbGUtPnN0YXRlX211dGV4KTsKKyAgaWYgKChoYW5kbGUtPnN0YXRlICYgU1RDT05UUk9MTElOR1RUWSkpIHsKKyAgICBwdGhyZWFkX211dGV4X3VubG9jaygmaGFuZGxlLT5zdGF0ZV9tdXRleCk7CisgICAgYnJsYXBpX2Vycm5vID0gQlJMQVBJX0VSUk9SX0lMTEVHQUxfSU5TVFJVQ1RJT047CisgICAgcmV0dXJuIC0xOworICB9CisKKyAgaWYgKGJybGFwaV9fZ2V0RGlzcGxheVNpemUoaGFuZGxlLCAmaGFuZGxlLT5icmx4LCAmaGFuZGxlLT5icmx5KTwwKXsKKyAgICBwdGhyZWFkX211dGV4X3VubG9jaygmaGFuZGxlLT5zdGF0ZV9tdXRleCk7CisgICAgcmV0dXJuIC0xOworICB9CisKKyAgLyogQ2xlYXIga2V5IGJ1ZmZlciBiZWZvcmUgdGFraW5nIHRoZSB0dHksIGp1c3QgaW4gY2FzZS4uLiAqLworICBwdGhyZWFkX211dGV4X2xvY2soJmhhbmRsZS0+cmVhZF9tdXRleCk7CisgIGhhbmRsZS0+a2V5YnVmX25leHQgPSBoYW5kbGUtPmtleWJ1Zl9uYiA9IDA7CisgIHB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZoYW5kbGUtPnJlYWRfbXV0ZXgpOworCisgIC8qIE9LLCBOb3cgd2Uga25vdyB3aGVyZSB3ZSBhcmUsIHNvIGdldCB0aGUgZWZmZWN0aXZlIGNvbnRyb2wgb2YgdGhlIHRlcm1pbmFsISAqLworICB0dHl0cmVlcGF0aCA9IGdldGVudigiV0lORE9XUEFUSCIpOworICBpZiAoIXR0eXRyZWVwYXRoICYmIChnZXRlbnYoIkRJU1BMQVkiKSB8fCBnZXRlbnYoIldBWUxBTkRfRElTUExBWSIpKSkgeworICAgIC8qIENvcGUgd2l0aCBzb21lIERNcyB3aGljaCBhcmUgbm90IHNldHRpbmcgV0lORE9XUEFUSCAoZS5nLiBnZG0gMy4xMikgKi8KKyAgICB0dHl0cmVlcGF0aCA9IGdldGVudigiWERHX1ZUTlIiKTsKKworI2lmZGVmIEhBVkVfU0RfU0VTU0lPTl9HRVRfVlQKKyAgICBpZiAoIXR0eXRyZWVwYXRoKSB7CisgICAgICAvKiBGYWxsYmFjayB0byBhc2tpbmcgbG9naW5kICovCisgICAgICBjaGFyICppZDsKKyAgICAgIHVuc2lnbmVkIHZ0bnIgPSAwOworICAgICAgaW50IHJldDsKKworICAgICAgcmV0ID0gc2RfcGlkX2dldF9zZXNzaW9uKDAsICZpZCk7CisgICAgICBpZiAocmV0ID09IDAgJiYgaWQgIT0gTlVMTCkgeworCXNkX3Nlc3Npb25fZ2V0X3Z0KGlkLCAmdnRucik7CisJZnJlZShpZCk7CisgICAgICB9IGVsc2UgeworCWNoYXIgKipzZXNzaW9uczsKKwkvKiBOb3QgZXZlbiBsb2dpbmQga25vd3MgOi8gd2UgYXJlIHByb2JhYmx5IGxvZ2dlZCBpbiBmcm9tIGdkbSAqLworCWludCBuc2Vzc2lvbnMgPSBzZF91aWRfZ2V0X3Nlc3Npb25zKGdldHVpZCgpLCAwLCAmc2Vzc2lvbnMpOworCisJaWYgKG5zZXNzaW9ucyA+IDApIHsKKwkgIGludCBpLCBjaG9zZW4gPSAtMTsKKworCSAgZm9yIChpID0gMDsgaSA8IG5zZXNzaW9uczsgaSsrKSB7CisJICAgIGNoYXIgKnR5cGU7CisKKwkgICAgcmV0ID0gc2Rfc2Vzc2lvbl9nZXRfdHlwZShzZXNzaW9uc1tpXSwgJnR5cGUpOworCSAgICBpZiAocmV0ID09IDApIHsKKwkgICAgICBpZiAoc3RyY21wKHR5cGUsICJ0dHkiKSAhPSAwICYmCisJICAgICAgICAgIHN0cmNtcCh0eXBlLCAidW5zcGVjaWZpZWQiKSAhPSAwKSB7CisJCS8qIHgxMSwgd2F5bGFuZCBvciBtaXIsIHNvIGdyYXBoaWNhbC4KKwkJICogVXNlciBub3JtYWxseSBoYXMgb25seSBvbmUgb2YgdGhlbSAqLworCQlpZiAoY2hvc2VuID49IDApIHsKKwkJICAvKiBPb3BzLCBzZXZlcmFsIHNlc3Npb25zPyBUaGF0IGlzIG5vdCBzdXBwb3NlZCB0byBoYXBwZW4sIGJldHRlcgorCQkgICAqIGNob29zZSBub25lIG9mIHRoZW0uICovCisJCSAgY2hvc2VuID0gLTE7CisJCSAgYnJlYWs7CisJCX0KKwkJY2hvc2VuID0gaTsKKwkgICAgICB9CisJICAgIH0KKwkgIH0KKworCSAgaWYgKGNob3NlbiA+PSAwKSBzZF9zZXNzaW9uX2dldF92dChzZXNzaW9uc1tpXSwgJnZ0bnIpOworCisJICBmb3IgKGkgPSAwOyBpIDwgbnNlc3Npb25zOyBpKyspIGZyZWUoc2Vzc2lvbnNbaV0pOworCSAgZnJlZShzZXNzaW9ucyk7CisJfQorICAgICAgfQorCisgICAgICBpZiAodnRucikgeworCXNpemVfdCBzaXplID0gc2l6ZW9mKHZ0bnIpKjMgKyAxOworCXR0eXRyZWVwYXRoPWFsbG9jYShzaXplKTsKKwlzbnByaW50Zih0dHl0cmVlcGF0aCwgc2l6ZSwgIiV1IiwgdnRucik7CisgICAgICB9CisgICAgfQorI2VuZGlmIC8qIEhBVkVfU0RfU0VTU0lPTl9HRVRfVlQgKi8KKyAgfQorCisgIG50dHl0cmVlcGF0aCA9IDA7CisgIGlmICh0dHl0cmVlcGF0aCkgeworICAgIC8qIENvdW50IHR0eXMgZnJvbSBwYXRoICovCisgICAgZm9yKGN1ciA9IHR0eXRyZWVwYXRoOyAqY3VyOyBudHR5dHJlZXBhdGgrKywgY3VyID0gbmV4dCsxKSB7CisgICAgICBzdHJ0b2woY3VyLCZuZXh0LDApOworICAgICAgaWYgKG5leHQ9PWN1cikgeworICAgICAgICBzeXNsb2coTE9HX1dBUk5JTkcsICJFcnJvbmVvdXMgd2luZG93IHBhdGggJXMiLCB0dHl0cmVlcGF0aCk7CisgICAgICAgIHB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZoYW5kbGUtPnN0YXRlX211dGV4KTsKKyAgICAgICAgYnJsYXBpX2Vycm5vID0gQlJMQVBJX0VSUk9SX0lOVkFMSURfUEFSQU1FVEVSOworICAgICAgICByZXR1cm4gLTE7CisgICAgICB9CisgICAgICBpZiAoKm5leHQ9PTApIHsgbnR0eXRyZWVwYXRoKys7IGJyZWFrOyB9CisgICAgfQorICB9CisKKyAgc2l6ZSA9ICgxICsgbnR0eXRyZWVwYXRoICsgbnR0eXMpICogc2l6ZW9mKHVpbnQzMl90KTsKKyAgc2l6ZSArPSAxICsgKGRyaXZlck5hbWUgPyBzdHJsZW4oZHJpdmVyTmFtZSkgOiAwKTsKKyAgcGFja2V0ID0gYWxsb2NhKHNpemUpOworICBuYlR0eXMgPSBwYWNrZXQ7CisgIHQgPSBuYlR0eXMrMTsKKyAgKm5iVHR5cyA9IGh0b25sKG50dHl0cmVlcGF0aCArIG50dHlzKTsKKworICBpZiAodHR5dHJlZXBhdGgpIHsKKyAgICAvKiBGaXJzdCBhZGQgdHR5cyBmcm9tIGVudmlyb25tZW50IHBhdGggKi8KKyAgICBmb3IoY3VyPXR0eXRyZWVwYXRoOyAqY3VyOyBudHR5dHJlZXBhdGgrKywgY3VyPW5leHQrMSkgeworICAgICAgdHR5cGF0aD1zdHJ0b2woY3VyLCZuZXh0LDApOworICAgICAgKnQrKyA9IGh0b25sKHR0eXBhdGgpOworICAgICAgaWYgKCpuZXh0PT0wKSBicmVhazsKKyAgICB9CisgIH0KKworICAvKiBUaGVuIGFkZCB0dHlzIGZyb20gY2FsbGVyIHBhdGggKi8KKyAgZm9yIChuPTA7IG48bnR0eXM7IG4rKykgKnQrKyA9IGh0b25sKHR0eXNbbl0pOworCisgIHAgPSAodW5zaWduZWQgY2hhciAqKSB0OworICBpZiAoZHJpdmVyTmFtZT09TlVMTCkgbiA9IDA7IGVsc2UgbiA9IHN0cmxlbihkcml2ZXJOYW1lKTsKKyAgaWYgKG4+QlJMQVBJX01BWE5BTUVMRU5HVEgpIHsKKyAgICBwdGhyZWFkX211dGV4X3VubG9jaygmaGFuZGxlLT5zdGF0ZV9tdXRleCk7CisgICAgYnJsYXBpX2Vycm5vID0gQlJMQVBJX0VSUk9SX0lOVkFMSURfUEFSQU1FVEVSOworICAgIHJldHVybiAtMTsKKyAgfQorICAqcCA9IG47CisgIHArKzsKKyAgaWYgKG4pIHAgPSBtZW1wY3B5KHAsIGRyaXZlck5hbWUsIG4pOworCisgIGFzc2VydChwLSh1bnNpZ25lZCBjaGFyICopcGFja2V0ID09IHNpemUpOworICBpZiAoKHJlcz1icmxhcGlfX3dyaXRlUGFja2V0V2FpdEZvckFjayhoYW5kbGUsQlJMQVBJX1BBQ0tFVF9FTlRFUlRUWU1PREUscGFja2V0LHNpemUpKSA9PSAwKSB7CisgICAgaGFuZGxlLT5zdGF0ZSB8PSBTVENPTlRST0xMSU5HVFRZOworICB9CisKKyAgcHRocmVhZF9tdXRleF91bmxvY2soJmhhbmRsZS0+c3RhdGVfbXV0ZXgpOworCisgIC8qIERldGVybWluZSBkZWZhdWx0IGNoYXJzZXQgaWYgYXBwbGljYXRpb24gZGlkIG5vdCBjYWxsIHNldGxvY2FsZS4gICovCisjaWZkZWYgTENfR0xPQkFMX0xPQ0FMRQorICBjb25zdCBjaGFyICpsb2NhbGUgPSBzZXRsb2NhbGUoTENfQ1RZUEUsIE5VTEwpOworCisgIGlmICghbG9jYWxlIHx8ICFzdHJjbXAobG9jYWxlLCAiQyIpKSB7CisgICAgLyogQXBwbGljYXRpb24gZGlkIG5vdCBjYWxsIHNldGxvY2FsZSwgdHJ5IHRvIGxvYWQgdGhlIGN1cnJlbnQgbG9jYWxlLiAgKi8KKyAgICBsb2NhbGVfdCBkZWZhdWx0X2xvY2FsZSA9IG5ld2xvY2FsZShMQ19DVFlQRV9NQVNLLCAiIiwgMCk7CisgICAgaWYgKGRlZmF1bHRfbG9jYWxlKSBoYW5kbGUtPmRlZmF1bHRfbG9jYWxlID0gZGVmYXVsdF9sb2NhbGU7CisgIH0KKyNlbmRpZiAvKiBMQ19HTE9CQUxfTE9DQUxFICovCisKKyAgcmV0dXJuIHJlczsKK30KKworaW50IEJSTEFQSV9TVERDQUxMIGJybGFwaV9lbnRlclR0eU1vZGVXaXRoUGF0aChjb25zdCBpbnQgKnR0eXMsIGludCBudHR5cywgY29uc3QgY2hhciAqaG93KQoreworICByZXR1cm4gYnJsYXBpX19lbnRlclR0eU1vZGVXaXRoUGF0aCgmZGVmYXVsdEhhbmRsZSwgdHR5cywgbnR0eXMsIGhvdyk7Cit9CisKKy8qIEZ1bmN0aW9uIDogYnJsYXBpX2xlYXZlVHR5TW9kZSAqLworLyogR2l2ZXMgYmFjayBjb250cm9sIG9mIG91ciB0dHkgdG8gYnJsdHR5ICovCitpbnQgQlJMQVBJX1NURENBTEwgYnJsYXBpX19sZWF2ZVR0eU1vZGUoYnJsYXBpX2hhbmRsZV90ICpoYW5kbGUpCit7CisgIGludCByZXM7CisgIHB0aHJlYWRfbXV0ZXhfbG9jaygmaGFuZGxlLT5zdGF0ZV9tdXRleCk7CisgIGlmICghKGhhbmRsZS0+c3RhdGUgJiBTVENPTlRST0xMSU5HVFRZKSkgeworICAgIGJybGFwaV9lcnJubyA9IEJSTEFQSV9FUlJPUl9JTExFR0FMX0lOU1RSVUNUSU9OOworICAgIHJlcyA9IC0xOworICAgIGdvdG8gb3V0OworICB9CisgIGhhbmRsZS0+YnJseCA9IDA7IGhhbmRsZS0+YnJseSA9IDA7CisgIHJlcyA9IGJybGFwaV9fd3JpdGVQYWNrZXRXYWl0Rm9yQWNrKGhhbmRsZSxCUkxBUElfUEFDS0VUX0xFQVZFVFRZTU9ERSxOVUxMLDApOworICBoYW5kbGUtPnN0YXRlICY9IH5TVENPTlRST0xMSU5HVFRZOworb3V0OgorICBwdGhyZWFkX211dGV4X3VubG9jaygmaGFuZGxlLT5zdGF0ZV9tdXRleCk7CisgIHJldHVybiByZXM7Cit9CisKK2ludCBCUkxBUElfU1REQ0FMTCBicmxhcGlfbGVhdmVUdHlNb2RlKHZvaWQpCit7CisgIHJldHVybiBicmxhcGlfX2xlYXZlVHR5TW9kZSgmZGVmYXVsdEhhbmRsZSk7Cit9CisKKy8qIEZ1bmN0aW9uIDogYnJsYXBpX3NldEZvY3VzICovCisvKiBzZW5kcyB0aGUgY3VycmVudCBmb2N1cyB0byBicmx0dHkgKi8KK2ludCBCUkxBUElfU1REQ0FMTCBicmxhcGlfX3NldEZvY3VzKGJybGFwaV9oYW5kbGVfdCAqaGFuZGxlLCBpbnQgdHR5KQoreworICB1aW50MzJfdCB1dHR5OworICBpbnQgcmVzOworICB1dHR5ID0gaHRvbmwodHR5KTsKKyAgcHRocmVhZF9tdXRleF9sb2NrKCZoYW5kbGUtPmZpbGVEZXNjcmlwdG9yX211dGV4KTsKKyAgcmVzID0gYnJsYXBpX3dyaXRlUGFja2V0KGhhbmRsZS0+ZmlsZURlc2NyaXB0b3IsIEJSTEFQSV9QQUNLRVRfU0VURk9DVVMsICZ1dHR5LCBzaXplb2YodXR0eSkpOworICBwdGhyZWFkX211dGV4X3VubG9jaygmaGFuZGxlLT5maWxlRGVzY3JpcHRvcl9tdXRleCk7CisgIHJldHVybiByZXM7Cit9CisKK2ludCBCUkxBUElfU1REQ0FMTCBicmxhcGlfc2V0Rm9jdXMoaW50IHR0eSkKK3sKKyAgcmV0dXJuIGJybGFwaV9fc2V0Rm9jdXMoJmRlZmF1bHRIYW5kbGUsIHR0eSk7Cit9CisKK3N0YXRpYyBzaXplX3QgZ2V0Q2hhcnNldChicmxhcGlfaGFuZGxlX3QgKmhhbmRsZSwgdm9pZCAqYnVmZmVyLCBpbnQgd2lkZSkgeworICBjaGFyICpwID0gYnVmZmVyOworICBjb25zdCBjaGFyICpzdGFydCA9IHA7CisgIGNvbnN0IGNoYXIgKmxvY2FsZSA9IHNldGxvY2FsZShMQ19DVFlQRSwgTlVMTCk7CisKKyAgaWYgKHdpZGUKKyNpZmRlZiBfX01JTkdXMzJfXworICAgICAgJiYgQ0hFQ0tQUk9DKCJudGRsbC5kbGwiLCB3Y3NsZW4pCisjZW5kaWYgLyogX19NSU5HVzMyX18gKi8KKyAgKSB7CisgICAgc2l6ZV90IGxlbmd0aCA9IHN0cmxlbihXQ0hBUl9DSEFSU0VUKTsKKyAgICAqcCsrID0gbGVuZ3RoOworICAgIHAgPSBtZW1wY3B5KHAsIFdDSEFSX0NIQVJTRVQsIGxlbmd0aCk7CisgIH0gZWxzZSBpZiAoKGxvY2FsZSAmJiBzdHJjbXAobG9jYWxlLCAiQyIpKQorI2lmZGVmIExDX0dMT0JBTF9MT0NBTEUKKyAgICAgICAgICAgICB8fCAoaGFuZGxlLT5kZWZhdWx0X2xvY2FsZSAhPSBMQ19HTE9CQUxfTE9DQUxFKQorI2VuZGlmIC8qIExDX0dMT0JBTF9MT0NBTEUgKi8KKyAgICAgICAgICAgICkgeworICAgIC8qIG5vdCBkZWZhdWx0IGxvY2FsZSwgdGVsbCBjaGFyc2V0IHRvIHNlcnZlciAqLworI2lmZGVmIFdJTkRPV1MKKyAgICBVSU5UIENQID0gR2V0QUNQKCk7CisgICAgaWYgKCFDUCkgQ1AgPSBHZXRPRU1DUCgpOworCisgICAgaWYgKENQKSB7CisgICAgICBzaXplX3QgbGVuZ3RoID0gc3ByaW50ZihwKzEsICJDUCV1IiwgQ1ApOworICAgICAgKnArKyA9IGxlbmd0aDsKKyAgICAgIHAgKz0gbGVuZ3RoOworICAgIH0KKyNlbGlmIGRlZmluZWQoSEFWRV9OTF9MQU5HSU5GTykKKyAgICBjaGFyICpsYW5ndWFnZSA9IG5sX2xhbmdpbmZvKENPREVTRVQpOworICAgIHNpemVfdCBsZW5ndGggPSBzdHJsZW4obGFuZ3VhZ2UpOworCisgICAgKnArKyA9IGxlbmd0aDsKKyAgICBwID0gbWVtcGNweShwLCBsYW5ndWFnZSwgbGVuZ3RoKTsKKyNlbmRpZiAvKiBnZXQgbm9uLXdpZGUgY2hhcmFjdGVyIHNldCAqLworICB9CisKKyAgcmV0dXJuIHAtc3RhcnQ7Cit9CisKKy8qIEZ1bmN0aW9uIDogYnJsYXBpX3dyaXRlVGV4dCAqLworLyogV3JpdGVzIGEgc3RyaW5nIHRvIHRoZSBicmFpbGxlIGRpc3BsYXkgKi8KK3N0YXRpYyBpbnQgYnJsYXBpX19fd3JpdGVUZXh0KGJybGFwaV9oYW5kbGVfdCAqaGFuZGxlLCBpbnQgY3Vyc29yLCBjb25zdCB2b2lkICpzdHIsIGludCB3aWRlKQoreworICBpbnQgZGlzcFNpemUgPSBoYW5kbGUtPmJybHggKiBoYW5kbGUtPmJybHk7CisgIGJybGFwaV9wYWNrZXRfdCBwYWNrZXQ7CisgIGJybGFwaV93cml0ZUFyZ3VtZW50c1BhY2tldF90ICp3YSA9ICZwYWNrZXQud3JpdGVBcmd1bWVudHM7CisgIHVuc2lnbmVkIGNoYXIgKnAgPSAmd2EtPmRhdGE7CisgIGludCByZXM7CisgIHNpemVfdCBsZW47CisKKyNpZmRlZiBMQ19HTE9CQUxfTE9DQUxFCisgIGxvY2FsZV90IG9sZF9sb2NhbGUgPSAwOworCisgIGlmIChoYW5kbGUtPmRlZmF1bHRfbG9jYWxlICE9IExDX0dMT0JBTF9MT0NBTEUpIHsKKyAgICAvKiBUZW1wb3JhcmlseSBsb2FkIHRoZSBkZWZhdWx0IGxvY2FsZS4gICovCisgICAgb2xkX2xvY2FsZSA9IHVzZWxvY2FsZShoYW5kbGUtPmRlZmF1bHRfbG9jYWxlKTsKKyAgfQorCisjZWxzZSAvKiBMQ19HTE9CQUxfTE9DQUxFICovCisgIHNldGxvY2FsZShMQ19DVFlQRSxOVUxMKTsKKyNlbmRpZiAvKiBMQ19HTE9CQUxfTE9DQUxFICovCisKKyAgd2EtPmZsYWdzID0gQlJMQVBJX1dGX1JFR0lPTjsKKyAgKigodWludDMyX3QgKikgcCkgPSBodG9ubCgxKTsgcCArPSBzaXplb2YodWludDMyX3QpOworICAqKCh1aW50MzJfdCAqKSBwKSA9IGh0b25sKC1kaXNwU2l6ZSk7IHAgKz0gc2l6ZW9mKHVpbnQzMl90KTsKKworICBpZiAoc3RyKSB7CisgICAgd2EtPmZsYWdzIHw9IEJSTEFQSV9XRl9URVhUOworI2lmIGRlZmluZWQoX19NSU5HVzMyX18pCisgICAgaWYgKENIRUNLR0VUUFJPQygibnRkbGwuZGxsIiwgd2NzbGVuKSAmJiB3aWRlKQorICAgICAgbGVuID0gc2l6ZW9mKHdjaGFyX3QpICogd2NzbGVuUHJvYyhzdHIpOworI2Vsc2UgLyogX19NSU5HVzMyX18gKi8KKyAgICBpZiAod2lkZSkKKyAgICAgIGxlbiA9IHNpemVvZih3Y2hhcl90KSAqIHdjc2xlbihzdHIpOworI2VuZGlmIC8qIF9fTUlOR1czMl9fICovCisgICAgZWxzZQorICAgICAgbGVuID0gc3RybGVuKHN0cik7CisgICAgKigodWludDMyX3QgKikgcCkgPSBodG9ubChsZW4pOyBwICs9IHNpemVvZih1aW50MzJfdCk7CisgICAgbWVtY3B5KHAsIHN0ciwgbGVuKTsKKyAgICBwICs9IGxlbjsKKyAgfQorICBpZiAoY3Vyc29yIT1CUkxBUElfQ1VSU09SX0xFQVZFKSB7CisgICAgd2EtPmZsYWdzIHw9IEJSTEFQSV9XRl9DVVJTT1I7CisgICAgKigodWludDMyX3QgKikgcCkgPSBodG9ubChjdXJzb3IpOworICAgIHAgKz0gc2l6ZW9mKHVpbnQzMl90KTsKKyAgfQorCisgIGlmICgobGVuID0gZ2V0Q2hhcnNldChoYW5kbGUsIHAgLCB3aWRlKSkpIHsKKyAgICB3YS0+ZmxhZ3MgfD0gQlJMQVBJX1dGX0NIQVJTRVQ7CisgICAgcCArPSBsZW47CisgIH0KKworICB3YS0+ZmxhZ3MgPSBodG9ubCh3YS0+ZmxhZ3MpOworICBwdGhyZWFkX211dGV4X2xvY2soJmhhbmRsZS0+ZmlsZURlc2NyaXB0b3JfbXV0ZXgpOworICByZXMgPSBicmxhcGlfd3JpdGVQYWNrZXQoaGFuZGxlLT5maWxlRGVzY3JpcHRvcixCUkxBUElfUEFDS0VUX1dSSVRFLCZwYWNrZXQsc2l6ZW9mKHdhLT5mbGFncykrKHAtJndhLT5kYXRhKSk7CisgIHB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZoYW5kbGUtPmZpbGVEZXNjcmlwdG9yX211dGV4KTsKKworI2lmZGVmIExDX0dMT0JBTF9MT0NBTEUKKyAgaWYgKGhhbmRsZS0+ZGVmYXVsdF9sb2NhbGUgIT0gTENfR0xPQkFMX0xPQ0FMRSkgeworICAgIC8qIFJlc3RvcmUgYXBwbGljYXRpb24gbG9jYWxlICovCisgICAgdXNlbG9jYWxlKG9sZF9sb2NhbGUpOworICB9CisjZW5kaWYgLyogTENfR0xPQkFMX0xPQ0FMRSAqLworCisgIHJldHVybiByZXM7Cit9CisKKyNpZmRlZiBXSU5ET1dTCitpbnQgQlJMQVBJX1NURENBTEwgYnJsYXBpX193cml0ZVRleHRXaW4oYnJsYXBpX2hhbmRsZV90ICpoYW5kbGUsIGludCBjdXJzb3IsIGNvbnN0IHZvaWQgKnN0ciwgaW50IHdpZGUpCit7CisgIHJldHVybiBicmxhcGlfX193cml0ZVRleHQoaGFuZGxlLCBjdXJzb3IsIHN0ciwgd2lkZSk7Cit9CisKK2ludCBCUkxBUElfU1REQ0FMTCBicmxhcGlfd3JpdGVUZXh0V2luKGludCBjdXJzb3IsIGNvbnN0IHZvaWQgKnN0ciwgaW50IHdpZGUpCit7CisgIHJldHVybiBicmxhcGlfX193cml0ZVRleHQoJmRlZmF1bHRIYW5kbGUsIGN1cnNvciwgc3RyLCB3aWRlKTsKK30KKyNlbHNlIC8qIFdJTkRPV1MgKi8KK2ludCBCUkxBUElfU1REQ0FMTCBicmxhcGlfX3dyaXRlVGV4dChicmxhcGlfaGFuZGxlX3QgKmhhbmRsZSwgaW50IGN1cnNvciwgY29uc3QgY2hhciAqc3RyKQoreworICByZXR1cm4gYnJsYXBpX19fd3JpdGVUZXh0KGhhbmRsZSwgY3Vyc29yLCBzdHIsIDApOworfQorCitpbnQgQlJMQVBJX1NURENBTEwgYnJsYXBpX193cml0ZVdUZXh0KGJybGFwaV9oYW5kbGVfdCAqaGFuZGxlLCBpbnQgY3Vyc29yLCBjb25zdCB3Y2hhcl90ICpzdHIpCit7CisgIHJldHVybiBicmxhcGlfX193cml0ZVRleHQoaGFuZGxlLCBjdXJzb3IsIHN0ciwgMSk7Cit9CisKK2ludCBCUkxBUElfU1REQ0FMTCBicmxhcGlfd3JpdGVUZXh0KGludCBjdXJzb3IsIGNvbnN0IGNoYXIgKnN0cikKK3sKKyAgcmV0dXJuIGJybGFwaV9fd3JpdGVUZXh0KCZkZWZhdWx0SGFuZGxlLCBjdXJzb3IsIHN0cik7Cit9CisKK2ludCBCUkxBUElfU1REQ0FMTCBicmxhcGlfd3JpdGVXVGV4dChpbnQgY3Vyc29yLCBjb25zdCB3Y2hhcl90ICpzdHIpCit7CisgIHJldHVybiBicmxhcGlfX3dyaXRlV1RleHQoJmRlZmF1bHRIYW5kbGUsIGN1cnNvciwgc3RyKTsKK30KKyNlbmRpZiAvKiBXSU5ET1dTICovCisKKy8qIEZ1bmN0aW9uIDogYnJsYXBpX3dyaXRlRG90cyAqLworLyogV3JpdGVzIGRvdC1tYXRyaXggdG8gdGhlIGJyYWlsbGUgZGlzcGxheSAqLworaW50IEJSTEFQSV9TVERDQUxMIGJybGFwaV9fd3JpdGVEb3RzKGJybGFwaV9oYW5kbGVfdCAqaGFuZGxlLCBjb25zdCB1bnNpZ25lZCBjaGFyICpkb3RzKQoreworICBicmxhcGlfd3JpdGVBcmd1bWVudHNfdCB3YSA9IEJSTEFQSV9XUklURUFSR1VNRU5UU19JTklUSUFMSVpFUjsKKyAgdW5zaWduZWQgaW50IHNpemUgPSBoYW5kbGUtPmJybHggKiBoYW5kbGUtPmJybHk7CisKKyAgaWYgKHNpemUgPT0gMCkgeworICAgIGJybGFwaV9lcnJubz1CUkxBUElfRVJST1JfSU5WQUxJRF9QQVJBTUVURVI7CisgICAgcmV0dXJuIC0xOworICB9CisKKyAgdW5zaWduZWQgY2hhciBhbmRNYXNrW3NpemVdOworICBtZW1zZXQoYW5kTWFzaywgMCwgc2l6ZSk7CisgIHdhLmFuZE1hc2sgPSBhbmRNYXNrOworCisgIHVuc2lnbmVkIGNoYXIgb3JNYXNrW3NpemVdOworICBtZW1jcHkob3JNYXNrLCBkb3RzLCBzaXplKTsKKyAgd2Eub3JNYXNrID0gb3JNYXNrOworCisgIGNoYXIgdGV4dFsoc2l6ZSAqIDMpICsgMV07CisgIHdhLnRleHQgPSB0ZXh0OworICB3YS5jaGFyc2V0ID0gInV0Zi04IjsKKworICB7CisgICAgLyogUGFzcyBhIFVURjgtZW5jb2RlZCBzdHJpbmcgb2YgdGhlIGJyYWlsbGUgY2hhcmFjdGVycyBhcyB0aGUgdGV4dC4KKyAgICAgKgorICAgICAqIFRoZSBVbmljb2RlIHJvdyBmb3IgdGhlIGJyYWlsbGUgcGF0dGVybiBjaGFyYWN0ZXJzIGlzIFUrMjgwMC4KKyAgICAgKiBFYWNoIG9mIHRoZSBlaWdodCBkb3RzIGlzIHJlcHJlc2VudGVkIGJ5IGEgYml0IGluIHRoZSBsb3ctb3JkZXIgYnl0ZToKKyAgICAgKiBEb3QxIGJ5IDBYMDEsIERvdDIgYnkgMFgwMiwgLi4uLCBEb3Q3IGJ5IDBYNDAsIGFuZCBEb3Q4IGJ5IDBYODAuCisgICAgICoKKyAgICAgKiBUaGUgVVRGLTggdGVtcGxhdGUgZm9yIHRoZSBVbmljb2RlIGJyYWlsbGUgcm93IGlzOiAwWEUyLCAwWEEwLCAwWDgwLgorICAgICAqIERvdHMgMS02IGFyZSB0aGUgbG93LW9yZGVyIHNpeCBiaXRzIG9mIHRoZSBsYXN0ICgwWDgwKSBieXRlLgorICAgICAqIERvdHMgNy04IGFyZSB0aGUgbG93LW9yZGVyIHR3byBiaXRzIG9mIHRoZSBtaWRkbGUgKDBYQTApIGJ5dGUuCisgICAgICovCisKKyAgICBjaGFyICpieXRlID0gdGV4dDsKKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpjZWxsID0gZG90czsKKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyICplbmQgPSBjZWxsICsgc2l6ZTsKKworICAgIHdoaWxlIChjZWxsIDwgZW5kKSB7CisgICAgICAqYnl0ZSsrID0gMFhFMjsKKyAgICAgICpieXRlKysgPSAwWEEwIHwgKCgqY2VsbCA+PiA2KSAmIDBYMyk7IC8vIGRvdHMgNy04CisgICAgICAqYnl0ZSsrID0gMFg4MCB8ICgqY2VsbCAmIDBYM0YpOyAvLyBkb3RzIDEtNgorICAgICAgY2VsbCArPSAxOworICAgIH0KKworICAgICpieXRlID0gMDsKKyAgICB3YS50ZXh0U2l6ZSA9IGJ5dGUgLSB0ZXh0OworICB9CisKKyAgd2EucmVnaW9uQmVnaW4gPSAxOworICB3YS5yZWdpb25TaXplID0gLXNpemU7CisgIHdhLmN1cnNvciA9IEJSTEFQSV9DVVJTT1JfT0ZGOworCisgIHJldHVybiBicmxhcGlfX3dyaXRlKGhhbmRsZSwgJndhKTsKK30KKworaW50IEJSTEFQSV9TVERDQUxMIGJybGFwaV93cml0ZURvdHMoY29uc3QgdW5zaWduZWQgY2hhciAqZG90cykKK3sKKyAgcmV0dXJuIGJybGFwaV9fd3JpdGVEb3RzKCZkZWZhdWx0SGFuZGxlLCBkb3RzKTsKK30KKworLyogRnVuY3Rpb24gOiBicmxhcGlfd3JpdGUgKi8KKy8qIEV4dGVuZGVkIHdyaXRlcyBvbiBicmFpbGxlIGRpc3BsYXlzICovCisjaWZkZWYgV0lORE9XUworaW50IEJSTEFQSV9TVERDQUxMIGJybGFwaV9fd3JpdGVXaW4oYnJsYXBpX2hhbmRsZV90ICpoYW5kbGUsIGNvbnN0IGJybGFwaV93cml0ZUFyZ3VtZW50c190ICpzLCBpbnQgd2lkZSkKKyNlbHNlIC8qIFdJTkRPV1MgKi8KK2ludCBicmxhcGlfX3dyaXRlKGJybGFwaV9oYW5kbGVfdCAqaGFuZGxlLCBjb25zdCBicmxhcGlfd3JpdGVBcmd1bWVudHNfdCAqcykKKyNlbmRpZiAvKiBXSU5ET1dTICovCit7CisgIGludCBkaXNwU2l6ZSA9IGhhbmRsZS0+YnJseCAqIGhhbmRsZS0+YnJseTsKKyAgdW5zaWduZWQgaW50IHJiZWcsIHN0ckxlbjsKKyAgaW50IHJzaXo7CisgIGJybGFwaV9wYWNrZXRfdCBwYWNrZXQ7CisgIGJybGFwaV93cml0ZUFyZ3VtZW50c1BhY2tldF90ICp3YSA9ICZwYWNrZXQud3JpdGVBcmd1bWVudHM7CisgIHVuc2lnbmVkIGNoYXIgKnAgPSAmd2EtPmRhdGE7CisgIHVuc2lnbmVkIGNoYXIgKmVuZCA9ICh1bnNpZ25lZCBjaGFyKikgJnBhY2tldC5kYXRhW3NpemVvZihwYWNrZXQpXTsKKyAgaW50IHJlczsKKyNpZm5kZWYgV0lORE9XUworICBpbnQgd2lkZSA9IDA7CisjZW5kaWYgLyogV0lORE9XUyAqLworICB3YS0+ZmxhZ3MgPSAwOworICBpZiAocz09TlVMTCkgZ290byBzZW5kOworICByYmVnID0gcy0+cmVnaW9uQmVnaW47CisgIHJzaXogPSBzLT5yZWdpb25TaXplOworICBpZiAocmJlZyB8fCByc2l6KSB7CisgICAgaWYgKHJzaXogPT0gMCkgcmV0dXJuIDA7CisgICAgd2EtPmZsYWdzIHw9IEJSTEFQSV9XRl9SRUdJT047CisgICAgKigodWludDMyX3QgKikgcCkgPSBodG9ubChyYmVnKTsgcCArPSBzaXplb2YodWludDMyX3QpOworICAgICooKHVpbnQzMl90ICopIHApID0gaHRvbmwoKGludDMyX3QpIHJzaXopOyBwICs9IHNpemVvZih1aW50MzJfdCk7CisgIH0gZWxzZSB7CisgICAgLyogREVQUkVDQVRFRCAqLworICAgIHJzaXogPSAtZGlzcFNpemU7CisgIH0KKyAgaWYgKHJzaXogPCAwKQorICAgIHJzaXogPSAtcnNpejsKKyAgaWYgKHMtPnRleHQpIHsKKyAgICBpZiAocy0+dGV4dFNpemUgIT0gLTEpCisgICAgICBzdHJMZW4gPSBzLT50ZXh0U2l6ZTsKKyAgICBlbHNlCisjaWYgZGVmaW5lZChfX0NZR1dJTl9fKQorICAgICAgaWYgKHdpZGUpCisJc3RyTGVuID0gc2l6ZW9mKHdjaGFyX3QpICogd2NzbGVuKCh3Y2hhcl90ICopIHMtPnRleHQpOworICAgICAgZWxzZQorI2VsaWYgZGVmaW5lZChfX01JTkdXMzJfXykKKyAgICAgIGlmIChDSEVDS0dFVFBST0MoIm50ZGxsLmRsbCIsIHdjc2xlbikgJiYgd2lkZSkKKwlzdHJMZW4gPSBzaXplb2Yod2NoYXJfdCkgKiB3Y3NsZW5Qcm9jKCh3Y2hhcl90ICopIHMtPnRleHQpOworICAgICAgZWxzZQorI2VuZGlmIC8qIHdpbmRvd3Mgd2lkZSBzdHJpbmcgbGVuZ3RoICovCisJc3RyTGVuID0gc3RybGVuKHMtPnRleHQpOworICAgICooKHVpbnQzMl90ICopIHApID0gaHRvbmwoc3RyTGVuKTsgcCArPSBzaXplb2YodWludDMyX3QpOworICAgIHdhLT5mbGFncyB8PSBCUkxBUElfV0ZfVEVYVDsKKyAgICBpZiAocCArIHN0ckxlbiA+IGVuZCkgeworICAgICAgYnJsYXBpX2Vycm5vID0gQlJMQVBJX0VSUk9SX0lOVkFMSURfUEFSQU1FVEVSOworICAgICAgcmV0dXJuIC0xOworICAgIH0KKyAgICBtZW1jcHkocCwgcy0+dGV4dCwgc3RyTGVuKTsKKyAgICBwICs9IHN0ckxlbjsKKyAgfQorICBpZiAocy0+YW5kTWFzaykgeworICAgIHdhLT5mbGFncyB8PSBCUkxBUElfV0ZfQVRUUl9BTkQ7CisgICAgaWYgKHAgKyByc2l6ID4gZW5kKSB7CisgICAgICBicmxhcGlfZXJybm8gPSBCUkxBUElfRVJST1JfSU5WQUxJRF9QQVJBTUVURVI7CisgICAgICByZXR1cm4gLTE7CisgICAgfQorICAgIG1lbWNweShwLCBzLT5hbmRNYXNrLCByc2l6KTsKKyAgICBwICs9IHJzaXo7CisgIH0KKyAgaWYgKHMtPm9yTWFzaykgeworICAgIHdhLT5mbGFncyB8PSBCUkxBUElfV0ZfQVRUUl9PUjsKKyAgICBpZiAocCArIHJzaXogPiBlbmQpIHsKKyAgICAgIGJybGFwaV9lcnJubyA9IEJSTEFQSV9FUlJPUl9JTlZBTElEX1BBUkFNRVRFUjsKKyAgICAgIHJldHVybiAtMTsKKyAgICB9CisgICAgbWVtY3B5KHAsIHMtPm9yTWFzaywgcnNpeik7CisgICAgcCArPSByc2l6OworICB9CisgIGlmICgocy0+Y3Vyc29yPj0wKSAmJiAocy0+Y3Vyc29yPD1kaXNwU2l6ZSkpIHsKKyAgICB3YS0+ZmxhZ3MgfD0gQlJMQVBJX1dGX0NVUlNPUjsKKyAgICBpZiAocCArIHNpemVvZih1aW50MzJfdCkgPiBlbmQpIHsKKyAgICAgIGJybGFwaV9lcnJubyA9IEJSTEFQSV9FUlJPUl9JTlZBTElEX1BBUkFNRVRFUjsKKyAgICAgIHJldHVybiAtMTsKKyAgICB9CisgICAgKigodWludDMyX3QgKikgcCkgPSBodG9ubChzLT5jdXJzb3IpOworICAgIHAgKz0gc2l6ZW9mKHVpbnQzMl90KTsKKyAgfSBlbHNlIGlmIChzLT5jdXJzb3IgIT0gQlJMQVBJX0NVUlNPUl9MRUFWRSkgeworICAgIGJybGFwaV9lcnJubyA9IEJSTEFQSV9FUlJPUl9JTlZBTElEX1BBUkFNRVRFUjsKKyAgICByZXR1cm4gLTE7CisgIH0KKworICBpZiAocy0+Y2hhcnNldCkgeworICAgIGlmICghKnMtPmNoYXJzZXQpIHsKKyNpZmRlZiBMQ19HTE9CQUxfTE9DQUxFCisgICAgICBsb2NhbGVfdCBvbGRfbG9jYWxlID0gMDsKKworICAgICAgaWYgKGhhbmRsZS0+ZGVmYXVsdF9sb2NhbGUgIT0gTENfR0xPQkFMX0xPQ0FMRSkgeworCS8qIFRlbXBvcmFyaWx5IGxvYWQgdGhlIGRlZmF1bHQgbG9jYWxlLiAgKi8KKwlvbGRfbG9jYWxlID0gdXNlbG9jYWxlKGhhbmRsZS0+ZGVmYXVsdF9sb2NhbGUpOworICAgICAgfQorI2VuZGlmIC8qIExDX0dMT0JBTF9MT0NBTEUgKi8KKworICAgICAgaWYgKChzdHJMZW4gPSBnZXRDaGFyc2V0KGhhbmRsZSwgcCwgd2lkZSkpKSB7CisJd2EtPmZsYWdzIHw9IEJSTEFQSV9XRl9DSEFSU0VUOworCXAgKz0gc3RyTGVuOworICAgICAgfQorCisjaWZkZWYgTENfR0xPQkFMX0xPQ0FMRQorICAgICAgaWYgKGhhbmRsZS0+ZGVmYXVsdF9sb2NhbGUgIT0gTENfR0xPQkFMX0xPQ0FMRSkgeworCS8qIFJlc3RvcmUgYXBwbGljYXRpb24gbG9jYWxlICovCisJdXNlbG9jYWxlKG9sZF9sb2NhbGUpOworICAgICAgfQorI2VuZGlmIC8qIExDX0dMT0JBTF9MT0NBTEUgKi8KKyAgICB9IGVsc2UgeworICAgICAgc3RyTGVuID0gc3RybGVuKHMtPmNoYXJzZXQpOworICAgICAgKnArKyA9IHN0ckxlbjsKKyAgICAgIHdhLT5mbGFncyB8PSBCUkxBUElfV0ZfQ0hBUlNFVDsKKyAgICAgIGlmIChwICsgc3RyTGVuID4gZW5kKSB7CisJYnJsYXBpX2Vycm5vID0gQlJMQVBJX0VSUk9SX0lOVkFMSURfUEFSQU1FVEVSOworCXJldHVybiAtMTsKKyAgICAgIH0KKworICAgICAgbWVtY3B5KHAsIHMtPmNoYXJzZXQsIHN0ckxlbik7CisgICAgICBwICs9IHN0ckxlbjsKKyAgICB9CisgIH0KKworc2VuZDoKKyAgd2EtPmZsYWdzID0gaHRvbmwod2EtPmZsYWdzKTsKKyAgcHRocmVhZF9tdXRleF9sb2NrKCZoYW5kbGUtPmZpbGVEZXNjcmlwdG9yX211dGV4KTsKKyAgcmVzID0gYnJsYXBpX3dyaXRlUGFja2V0KGhhbmRsZS0+ZmlsZURlc2NyaXB0b3IsQlJMQVBJX1BBQ0tFVF9XUklURSwmcGFja2V0LHNpemVvZih3YS0+ZmxhZ3MpKyhwLSZ3YS0+ZGF0YSkpOworICBwdGhyZWFkX211dGV4X3VubG9jaygmaGFuZGxlLT5maWxlRGVzY3JpcHRvcl9tdXRleCk7CisgIHJldHVybiByZXM7Cit9CisKKyNpZmRlZiBXSU5ET1dTCitpbnQgQlJMQVBJX1NURENBTEwgYnJsYXBpX3dyaXRlV2luKGNvbnN0IGJybGFwaV93cml0ZUFyZ3VtZW50c190ICpzLCBpbnQgd2lkZSkKK3sKKyAgcmV0dXJuIGJybGFwaV9fd3JpdGVXaW4oJmRlZmF1bHRIYW5kbGUsIHMsIHdpZGUpOworfQorI2Vsc2UgLyogV0lORE9XUyAqLworaW50IGJybGFwaV93cml0ZShjb25zdCBicmxhcGlfd3JpdGVBcmd1bWVudHNfdCAqcykKK3sKKyAgcmV0dXJuIGJybGFwaV9fd3JpdGUoJmRlZmF1bHRIYW5kbGUsIHMpOworfQorI2VuZGlmIC8qIFdJTkRPV1MgKi8KKworLyogRnVuY3Rpb24gOiBicmxhcGlfcmVhZEtleSAqLworLyogUmVhZHMgYSBrZXkgZnJvbSB0aGUgYnJhaWxsZSBrZXlib2FyZCAqLworaW50IEJSTEFQSV9TVERDQUxMIGJybGFwaV9fcmVhZEtleVdpdGhUaW1lb3V0KGJybGFwaV9oYW5kbGVfdCAqaGFuZGxlLCBpbnQgdGltZW91dF9tcywgYnJsYXBpX2tleUNvZGVfdCAqY29kZSkKK3sKKyAgc3NpemVfdCByZXM7CisgIHVpbnQzMl90IGJ1ZlsyXTsKKworICBwdGhyZWFkX211dGV4X2xvY2soJmhhbmRsZS0+c3RhdGVfbXV0ZXgpOworICBpZiAoIShoYW5kbGUtPnN0YXRlICYgU1RDT05UUk9MTElOR1RUWSkpIHsKKyAgICBwdGhyZWFkX211dGV4X3VubG9jaygmaGFuZGxlLT5zdGF0ZV9tdXRleCk7CisgICAgYnJsYXBpX2Vycm5vID0gQlJMQVBJX0VSUk9SX0lMTEVHQUxfSU5TVFJVQ1RJT047CisgICAgcmV0dXJuIC0xOworICB9CisgIHB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZoYW5kbGUtPnN0YXRlX211dGV4KTsKKworICBwdGhyZWFkX211dGV4X2xvY2soJmhhbmRsZS0+cmVhZF9tdXRleCk7CisgIGlmIChoYW5kbGUtPmtleWJ1Zl9uYj4wKSB7CisgICAgKmNvZGU9aGFuZGxlLT5rZXlidWZbaGFuZGxlLT5rZXlidWZfbmV4dF07CisgICAgaGFuZGxlLT5rZXlidWZfbmV4dD0oaGFuZGxlLT5rZXlidWZfbmV4dCsxKSVCUkxfS0VZQlVGX1NJWkU7CisgICAgaGFuZGxlLT5rZXlidWZfbmItLTsKKyAgICBwdGhyZWFkX211dGV4X3VubG9jaygmaGFuZGxlLT5yZWFkX211dGV4KTsKKyAgICByZXR1cm4gMTsKKyAgfQorICBwdGhyZWFkX211dGV4X3VubG9jaygmaGFuZGxlLT5yZWFkX211dGV4KTsKKworICBwdGhyZWFkX211dGV4X2xvY2soJmhhbmRsZS0+a2V5X211dGV4KTsKKyAgcmVzID0gYnJsYXBpX193YWl0Rm9yUGFja2V0KGhhbmRsZSxCUkxBUElfUEFDS0VUX0tFWSwgYnVmLCBzaXplb2YoYnVmKSwgVFJZX1dBSVRfRk9SX0VYUEVDVEVEX1BBQ0tFVCwgdGltZW91dF9tcyk7CisgIHB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZoYW5kbGUtPmtleV9tdXRleCk7CisgIGlmIChyZXMgPT0gLTMpIHsKKyAgICBpZiAodGltZW91dF9tcyA9PSAwKSByZXR1cm4gMDsKKyAgICBicmxhcGlfbGliY2Vycm5vID0gRUlOVFI7CisgICAgYnJsYXBpX2Vycm5vID0gQlJMQVBJX0VSUk9SX0xJQkNFUlI7CisgICAgYnJsYXBpX2VycmZ1biA9ICJ3YWl0Rm9yUGFja2V0IjsKKyAgICByZXR1cm4gLTE7CisgIH0KKyAgaWYgKHJlcyA9PSAtNCkgeworICAgIC8qIFRpbWVvdXQgKi8KKyAgICByZXR1cm4gMDsKKyAgfQorICBpZiAocmVzIDwgMCkgcmV0dXJuIC0xOworICAqY29kZSA9IGJybGFwaV9wYWNrZXRUb0tleUNvZGUoYnVmKTsKKyAgcmV0dXJuIDE7Cit9CisKK2ludCBCUkxBUElfU1REQ0FMTCBicmxhcGlfcmVhZEtleVdpdGhUaW1lb3V0KGludCB0aW1lb3V0X21zLCBicmxhcGlfa2V5Q29kZV90ICpjb2RlKQoreworICByZXR1cm4gYnJsYXBpX19yZWFkS2V5V2l0aFRpbWVvdXQoJmRlZmF1bHRIYW5kbGUsIHRpbWVvdXRfbXMsIGNvZGUpOworfQorCitpbnQgQlJMQVBJX1NURENBTEwgYnJsYXBpX19yZWFkS2V5KGJybGFwaV9oYW5kbGVfdCAqaGFuZGxlLCBpbnQgYmxvY2ssIGJybGFwaV9rZXlDb2RlX3QgKmNvZGUpCit7CisgIHJldHVybiBicmxhcGlfX3JlYWRLZXlXaXRoVGltZW91dChoYW5kbGUsIGJsb2NrID8gLTEgOiAwLCBjb2RlKTsKK30KKworaW50IEJSTEFQSV9TVERDQUxMIGJybGFwaV9yZWFkS2V5KGludCBibG9jaywgYnJsYXBpX2tleUNvZGVfdCAqY29kZSkKK3sKKyAgcmV0dXJuIGJybGFwaV9fcmVhZEtleVdpdGhUaW1lb3V0KCZkZWZhdWx0SGFuZGxlLCBibG9jayA/IC0xIDogMCwgY29kZSk7Cit9CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgYnJsYXBpX2tleUNvZGVfdCBjb2RlOworICBjb25zdCBjaGFyICpuYW1lOworfSBicmxhcGlfa2V5RW50cnlfdDsKKworc3RhdGljIGNvbnN0IGJybGFwaV9rZXlFbnRyeV90IGJybGFwaV9rZXlUYWJsZVtdID0geworI2luY2x1ZGUgImJybGFwaV9rZXl0YWIuYXV0by5oIgorCisgIHsuY29kZT0wWDAwMDBVLCAubmFtZT0iTEFUSU4xIn0sCisgIHsuY29kZT0wWDAxMDBVLCAubmFtZT0iTEFUSU4yIn0sCisgIHsuY29kZT0wWDAyMDBVLCAubmFtZT0iTEFUSU4zIn0sCisgIHsuY29kZT0wWDAzMDBVLCAubmFtZT0iTEFUSU40In0sCisgIHsuY29kZT0wWDA0MDBVLCAubmFtZT0iS0FUQUtBTkEifSwKKyAgey5jb2RlPTBYMDUwMFUsIC5uYW1lPSJBUkFCSUMifSwKKyAgey5jb2RlPTBYMDYwMFUsIC5uYW1lPSJDWVJJTExJQyJ9LAorICB7LmNvZGU9MFgwNzAwVSwgLm5hbWU9IkdSRUVLIn0sCisgIHsuY29kZT0wWDA4MDBVLCAubmFtZT0iVEVDSE5JQ0FMIn0sCisgIHsuY29kZT0wWDA5MDBVLCAubmFtZT0iU1BFQ0lBTCJ9LAorICB7LmNvZGU9MFgwQTAwVSwgLm5hbWU9IlBVQkxJU0hJTkcifSwKKyAgey5jb2RlPTBYMEIwMFUsIC5uYW1lPSJBUEwifSwKKyAgey5jb2RlPTBYMEMwMFUsIC5uYW1lPSJIRUJSRVcifSwKKyAgey5jb2RlPTBYMEQwMFUsIC5uYW1lPSJUSEFJIn0sCisgIHsuY29kZT0wWDBFMDBVLCAubmFtZT0iS09SRUFOIn0sCisgIHsuY29kZT0wWDEyMDBVLCAubmFtZT0iTEFUSU44In0sCisgIHsuY29kZT0wWDEzMDBVLCAubmFtZT0iTEFUSU45In0sCisgIHsuY29kZT0wWDE0MDBVLCAubmFtZT0iQVJNRU5JQU4ifSwKKyAgey5jb2RlPTBYMTUwMFUsIC5uYW1lPSJHRU9SR0lBTiJ9LAorICB7LmNvZGU9MFgxNjAwVSwgLm5hbWU9IkNBVUNBU1VTIn0sCisgIHsuY29kZT0wWDFFMDBVLCAubmFtZT0iVklFVE5BTUVTRSJ9LAorICB7LmNvZGU9MFgyMDAwVSwgLm5hbWU9IkNVUlJFTkNZIn0sCisgIHsuY29kZT0wWEZEMDBVLCAubmFtZT0iMzI3MCJ9LAorICB7LmNvZGU9MFhGRTAwVSwgLm5hbWU9IlhLQiJ9LAorICB7LmNvZGU9MFhGRjAwVSwgLm5hbWU9Ik1JU0NFTExBTlkifSwKKyAgey5jb2RlPTBYMDEwMDAwMDBVLCAubmFtZT0iVU5JQ09ERSJ9LAorCisgIHsubmFtZT1OVUxMfQorfTsKKworaW50IEJSTEFQSV9TVERDQUxMCiticmxhcGlfZXhwYW5kS2V5Q29kZSAoYnJsYXBpX2tleUNvZGVfdCBrZXlDb2RlLCBicmxhcGlfZXhwYW5kZWRLZXlDb2RlX3QgKmVrYykgeworICBpbnQgYXJndW1lbnRXaWR0aCA9IGJybGFwaV9nZXRBcmd1bWVudFdpZHRoKGtleUNvZGUpOworCisgIGlmIChhcmd1bWVudFdpZHRoICE9IC0xKSB7CisgICAgdW5zaWduZWQgaW50IGFyZ3VtZW50TWFzayA9ICgxIDw8IGFyZ3VtZW50V2lkdGgpIC0gMTsKKyAgICBicmxhcGlfa2V5Q29kZV90IHR5cGUgPSBrZXlDb2RlICYgQlJMQVBJX0tFWV9UWVBFX01BU0s7CisgICAgYnJsYXBpX2tleUNvZGVfdCBjb2RlID0ga2V5Q29kZSAmIEJSTEFQSV9LRVlfQ09ERV9NQVNLOworCisgICAgZWtjLT50eXBlID0gdHlwZTsKKyAgICBla2MtPmNvbW1hbmQgPSAoY29kZSAmIH5hcmd1bWVudE1hc2spOworICAgIGVrYy0+YXJndW1lbnQgPSBjb2RlICYgYXJndW1lbnRNYXNrOworICAgIGVrYy0+ZmxhZ3MgPSAoa2V5Q29kZSAmIEJSTEFQSV9LRVlfRkxBR1NfTUFTSykgPj4gQlJMQVBJX0tFWV9GTEFHU19TSElGVDsKKworICAgIHJldHVybiAwOworICB9CisKKyAgcmV0dXJuIC0xOworfQorCitpbnQgQlJMQVBJX1NURENBTEwKK2JybGFwaV9kZXNjcmliZUtleUNvZGUgKGJybGFwaV9rZXlDb2RlX3Qga2V5Q29kZSwgYnJsYXBpX2Rlc2NyaWJlZEtleUNvZGVfdCAqZGtjKSB7CisgIGJybGFwaV9leHBhbmRlZEtleUNvZGVfdCBla2M7CisgIGludCByZXN1bHQgPSBicmxhcGlfZXhwYW5kS2V5Q29kZShrZXlDb2RlLCAmZWtjKTsKKworICBpZiAocmVzdWx0ICE9IC0xKSB7CisgICAgdW5zaWduZWQgaW50IGFyZ3VtZW50ID0gZWtjLmFyZ3VtZW50OworICAgIHVuc2lnbmVkIGludCBjb2RlV2l0aG91dEFyZ3VtZW50ID0gZWtjLnR5cGUgfCBla2MuY29tbWFuZDsKKyAgICB1bnNpZ25lZCBpbnQgY29kZVdpdGhBcmd1bWVudCA9IGNvZGVXaXRob3V0QXJndW1lbnQgfCBhcmd1bWVudDsKKyAgICBjb25zdCBicmxhcGlfa2V5RW50cnlfdCAqa2V5V2l0aG91dEFyZ3VtZW50ID0gTlVMTDsKKyAgICBjb25zdCBicmxhcGlfa2V5RW50cnlfdCAqa2V5ID0gYnJsYXBpX2tleVRhYmxlOworCisgICAgd2hpbGUgKGtleS0+bmFtZSkgeworICAgICAgaWYgKGNvZGVXaXRoQXJndW1lbnQgPT0ga2V5LT5jb2RlKSB7CisgICAgICAgIGFyZ3VtZW50ID0gMDsKKyAgICAgICAgZ290byBmb3VuZDsKKyAgICAgIH0KKworICAgICAgaWYgKGNvZGVXaXRob3V0QXJndW1lbnQgPT0ga2V5LT5jb2RlKQorICAgICAgICBpZiAoIWtleVdpdGhvdXRBcmd1bWVudCkKKyAgICAgICAgICBrZXlXaXRob3V0QXJndW1lbnQgPSBrZXk7CisKKyAgICAgICsra2V5OworICAgIH0KKworICAgIGlmIChrZXlXaXRob3V0QXJndW1lbnQpIHsKKyAgICAgIGtleSA9IGtleVdpdGhvdXRBcmd1bWVudDsKKyAgICAgIGdvdG8gZm91bmQ7CisgICAgfQorCisgICAgYnJsYXBpX2Vycm5vID0gQlJMQVBJX0VSUk9SX0lOVkFMSURfUEFSQU1FVEVSOworICAgIHJlc3VsdCA9IC0xOworICAgIGdvdG8gZG9uZTsKKworICBmb3VuZDoKKyAgICBka2MtPmNvbW1hbmQgPSBrZXktPm5hbWU7CisgICAgZGtjLT5hcmd1bWVudCA9IGFyZ3VtZW50OworICAgIGRrYy0+dmFsdWVzID0gZWtjOworCisgICAgc3dpdGNoIChla2MudHlwZSkgeworICAgICAgY2FzZSBCUkxBUElfS0VZX1RZUEVfU1lNOiBka2MtPnR5cGUgPSAiU1lNIjsgICAgIGJyZWFrOworICAgICAgY2FzZSBCUkxBUElfS0VZX1RZUEVfQ01EOiBka2MtPnR5cGUgPSAiQ01EIjsgICAgIGJyZWFrOworICAgICAgZGVmYXVsdDogICAgICAgICAgICAgICAgICBka2MtPnR5cGUgPSAiVU5LTk9XTiI7IGJyZWFrOworICAgIH0KKworI2RlZmluZSBGTEFHKG5hbWUpIGlmIChrZXlDb2RlICYgQlJMQVBJX0tFWV9GTEdfIyNuYW1lKSBka2MtPmZsYWdbZGtjLT5mbGFncysrXSA9ICNuYW1lCisgICAgZGtjLT5mbGFncyA9IDA7CisKKyAgICBGTEFHKFNISUZUKTsKKyAgICBGTEFHKFVQUEVSKTsKKyAgICBGTEFHKENPTlRST0wpOworICAgIEZMQUcoTUVUQSk7CisgICAgRkxBRyhBTFRHUik7CisgICAgRkxBRyhHVUkpOworCisgICAgc3dpdGNoIChla2MudHlwZSkgeworICAgICAgY2FzZSBCUkxBUElfS0VZX1RZUEVfQ01EOgorICAgICAgICBzd2l0Y2ggKGVrYy5jb21tYW5kICYgQlJMQVBJX0tFWV9DTURfQkxLX01BU0spIHsKKyAgICAgICAgICBjYXNlIEJSTEFQSV9LRVlfQ01EX1BBU1NET1RTOgorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICBjYXNlIEJSTEFQSV9LRVlfQ01EX1BBU1NYVDoKKyAgICAgICAgICBjYXNlIEJSTEFQSV9LRVlfQ01EX1BBU1NBVDoKKyAgICAgICAgICBjYXNlIEJSTEFQSV9LRVlfQ01EX1BBU1NQUzI6CisgICAgICAgICAgICBGTEFHKEtCRF9SRUxFQVNFKTsKKyAgICAgICAgICAgIEZMQUcoS0JEX0VNVUwwKTsKKyAgICAgICAgICAgIEZMQUcoS0JEX0VNVUwxKTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIEZMQUcoVE9HR0xFX09OKTsKKyAgICAgICAgICAgIEZMQUcoVE9HR0xFX09GRik7CisgICAgICAgICAgICBGTEFHKE1PVElPTl9ST1VURSk7CisgICAgICAgICAgICBGTEFHKE1PVElPTl9TQ0FMRUQpOworICAgICAgICAgICAgRkxBRyhNT1RJT05fVE9MRUZUKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIH0KKyN1bmRlZiBGTEFHCisgIH0KKworZG9uZToKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworLyogRnVuY3Rpb24gOiBpZ25vcmVfYWNjZXB0X2tleV9yYW5nZSAqLworLyogQ29tbW9uIHRhc2tzIGZvciBpZ25vcmluZyBhbmQgdW5pZ25vcmluZyBrZXkgcmFuZ2VzICovCisvKiB3aGF0ID0gMCBmb3IgaWdub3JpbmcgITAgZm9yIHVuaWdub3JpbmcgKi8KK3N0YXRpYyBpbnQgaWdub3JlX2FjY2VwdF9rZXlfcmFuZ2VzKGJybGFwaV9oYW5kbGVfdCAqaGFuZGxlLCBpbnQgd2hhdCwgY29uc3QgYnJsYXBpX3JhbmdlX3QgcmFuZ2VzW10sIHVuc2lnbmVkIGludCBuKQoreworICB1aW50MzJfdCBpbnRzW25dWzRdOworICB1bnNpZ25lZCBpbnQgaTsKKworICBmb3IgKGk9MDsgaTxuOyBpKyspIHsKKyAgICBpbnRzW2ldWzBdID0gaHRvbmwocmFuZ2VzW2ldLmZpcnN0ID4+IDMyKTsKKyAgICBpbnRzW2ldWzFdID0gaHRvbmwocmFuZ2VzW2ldLmZpcnN0ICYgMHhmZmZmZmZmZik7CisgICAgaW50c1tpXVsyXSA9IGh0b25sKHJhbmdlc1tpXS5sYXN0ID4+IDMyKTsKKyAgICBpbnRzW2ldWzNdID0gaHRvbmwocmFuZ2VzW2ldLmxhc3QgJiAweGZmZmZmZmZmKTsKKyAgfTsKKworICBpZiAoYnJsYXBpX193cml0ZVBhY2tldFdhaXRGb3JBY2soaGFuZGxlLCh3aGF0ID8gQlJMQVBJX1BBQ0tFVF9BQ0NFUFRLRVlSQU5HRVMgOiBCUkxBUElfUEFDS0VUX0lHTk9SRUtFWVJBTkdFUyksaW50cyxuKjIqc2l6ZW9mKGJybGFwaV9rZXlDb2RlX3QpKSkKKyAgICByZXR1cm4gLTE7CisgIHJldHVybiAwOworfQorCisvKiBGdW5jdGlvbiA6IGlnbm9yZV9hY2NlcHRfa2V5cyAqLworLyogQ29tbW9uIHRhc2tzIGZvciBpZ25vcmluZyBhbmQgdW5pZ25vcmluZyBrZXlzICovCisvKiB3aGF0ID0gMCBmb3IgaWdub3JpbmcgITAgZm9yIHVuaWdub3JpbmcgKi8KK3N0YXRpYyBpbnQgaWdub3JlX2FjY2VwdF9rZXlzKGJybGFwaV9oYW5kbGVfdCAqaGFuZGxlLCBpbnQgd2hhdCwgYnJsYXBpX3JhbmdlVHlwZV90IHIsIGNvbnN0IGJybGFwaV9rZXlDb2RlX3QgKmNvZGUsIHVuc2lnbmVkIGludCBuKQoreworICBpZiAoIW4pIHsKKyAgICBpZiAociAhPSBicmxhcGlfcmFuZ2VUeXBlX2FsbCkgeworICAgICAgYnJsYXBpX2Vycm5vID0gQlJMQVBJX0VSUk9SX0lOVkFMSURfUEFSQU1FVEVSOworICAgICAgcmV0dXJuIC0xOworICAgIH0KKyAgICBicmxhcGlfcmFuZ2VfdCByYW5nZSA9IHsgLmZpcnN0ID0gMCwgLmxhc3QgPSBCUkxBUElfS0VZX01BWCB9OworICAgIHJldHVybiBpZ25vcmVfYWNjZXB0X2tleV9yYW5nZXMoaGFuZGxlLCB3aGF0LCAmcmFuZ2UsIDEpOworICB9IGVsc2UgeworICAgIGJybGFwaV9yYW5nZV90IHJhbmdlc1tuXTsKKyAgICB1bnNpZ25lZCBpbnQgaTsKKyAgICBicmxhcGlfa2V5Q29kZV90IG1hc2s7CisKKyAgICBmb3IgKGk9MDsgaTxuOyBpKyspIHsKKyAgICAgIGlmIChicmxhcGlfZ2V0S2V5cmFuZ2VNYXNrKHIsIGNvZGVbaV0sICZtYXNrKSkKKwlyZXR1cm4gLTE7CisgICAgICBpZiAoY29kZVtpXSAmIG1hc2spIHsKKwlicmxhcGlfZXJybm8gPSBCUkxBUElfRVJST1JfSU5WQUxJRF9QQVJBTUVURVI7CisJcmV0dXJuIC0xOworICAgICAgfQorICAgICAgcmFuZ2VzW2ldLmZpcnN0ID0gY29kZVtpXTsKKyAgICAgIHJhbmdlc1tpXS5sYXN0ID0gY29kZVtpXSB8IG1hc2s7CisgICAgfQorICAgIHJldHVybiBpZ25vcmVfYWNjZXB0X2tleV9yYW5nZXMoaGFuZGxlLCB3aGF0LCByYW5nZXMsIG4pOworICB9Cit9CisKKy8qIEZ1bmN0aW9uIDogYnJsYXBpX2FjY2VwdEtleVJhbmdlcyAqLworaW50IEJSTEFQSV9TVERDQUxMIGJybGFwaV9fYWNjZXB0S2V5UmFuZ2VzKGJybGFwaV9oYW5kbGVfdCAqaGFuZGxlLCBjb25zdCBicmxhcGlfcmFuZ2VfdCByYW5nZXNbXSwgdW5zaWduZWQgaW50IG4pCit7CisgIHJldHVybiBpZ25vcmVfYWNjZXB0X2tleV9yYW5nZXMoaGFuZGxlLCAhMCwgcmFuZ2VzLCBuKTsKK30KKworaW50IEJSTEFQSV9TVERDQUxMIGJybGFwaV9hY2NlcHRLZXlSYW5nZXMoY29uc3QgYnJsYXBpX3JhbmdlX3QgcmFuZ2VzW10sIHVuc2lnbmVkIGludCBuKQoreworICByZXR1cm4gYnJsYXBpX19hY2NlcHRLZXlSYW5nZXMoJmRlZmF1bHRIYW5kbGUsIHJhbmdlcywgbik7Cit9CisKKy8qIEZ1bmN0aW9uIDogYnJsYXBpX2FjY2VwdEtleXMgKi8KK2ludCBCUkxBUElfU1REQ0FMTCBicmxhcGlfX2FjY2VwdEtleXMoYnJsYXBpX2hhbmRsZV90ICpoYW5kbGUsIGJybGFwaV9yYW5nZVR5cGVfdCByLCBjb25zdCBicmxhcGlfa2V5Q29kZV90ICpjb2RlLCB1bnNpZ25lZCBpbnQgbikKK3sKKyAgcmV0dXJuIGlnbm9yZV9hY2NlcHRfa2V5cyhoYW5kbGUsICEwLCByLCBjb2RlLCBuKTsKK30KKworaW50IEJSTEFQSV9TVERDQUxMIGJybGFwaV9hY2NlcHRLZXlzKGJybGFwaV9yYW5nZVR5cGVfdCByLCBjb25zdCBicmxhcGlfa2V5Q29kZV90ICpjb2RlLCB1bnNpZ25lZCBpbnQgbikKK3sKKyAgcmV0dXJuIGJybGFwaV9fYWNjZXB0S2V5cygmZGVmYXVsdEhhbmRsZSwgciwgY29kZSwgbik7Cit9CisKKy8qIEZ1bmN0aW9uIDogYnJsYXBpX2lnbm9yZUtleVJhbmdlcyAqLworaW50IEJSTEFQSV9TVERDQUxMIGJybGFwaV9faWdub3JlS2V5UmFuZ2VzKGJybGFwaV9oYW5kbGVfdCAqaGFuZGxlLCBjb25zdCBicmxhcGlfcmFuZ2VfdCByYW5nZXNbXSwgdW5zaWduZWQgaW50IG4pCit7CisgIHJldHVybiBpZ25vcmVfYWNjZXB0X2tleV9yYW5nZXMoaGFuZGxlLCAwLCByYW5nZXMsIG4pOworfQorCitpbnQgQlJMQVBJX1NURENBTEwgYnJsYXBpX2lnbm9yZUtleVJhbmdlcyhjb25zdCBicmxhcGlfcmFuZ2VfdCByYW5nZXNbXSwgdW5zaWduZWQgaW50IG4pCit7CisgIHJldHVybiBicmxhcGlfX2lnbm9yZUtleVJhbmdlcygmZGVmYXVsdEhhbmRsZSwgcmFuZ2VzLCBuKTsKK30KKworLyogRnVuY3Rpb24gOiBicmxhcGlfaWdub3JlS2V5cyAqLworaW50IEJSTEFQSV9TVERDQUxMIGJybGFwaV9faWdub3JlS2V5cyhicmxhcGlfaGFuZGxlX3QgKmhhbmRsZSwgYnJsYXBpX3JhbmdlVHlwZV90IHIsIGNvbnN0IGJybGFwaV9rZXlDb2RlX3QgKmNvZGUsIHVuc2lnbmVkIGludCBuKQoreworICByZXR1cm4gaWdub3JlX2FjY2VwdF9rZXlzKGhhbmRsZSwgMCwgciwgY29kZSwgbik7Cit9CisKK2ludCBCUkxBUElfU1REQ0FMTCBicmxhcGlfaWdub3JlS2V5cyhicmxhcGlfcmFuZ2VUeXBlX3QgciwgY29uc3QgYnJsYXBpX2tleUNvZGVfdCAqY29kZSwgdW5zaWduZWQgaW50IG4pCit7CisgIHJldHVybiBicmxhcGlfX2lnbm9yZUtleXMoJmRlZmF1bHRIYW5kbGUsIHIsIGNvZGUsIG4pOworfQorCisvKiBFcnJvciBjb2RlIGhhbmRsaW5nICovCisKKy8qIGJybGFwaV9lcnJsaXN0OiBlcnJvciBtZXNzYWdlcyAqLworY29uc3QgY2hhciAqYnJsYXBpX2Vycmxpc3RbXSA9IHsKKyAgWzBdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9ICJTdWNjZXNzIiwKKyAgW0JSTEFQSV9FUlJPUl9OT01FTV0gICAgICAgICAgICAgICA9ICJJbnN1ZmZpY2llbnQgbWVtb3J5IiwKKyAgW0JSTEFQSV9FUlJPUl9UVFlCVVNZXSAgICAgICAgICAgICA9ICJUdHkgaXMgYnVzeSIsCisgIFtCUkxBUElfRVJST1JfREVWSUNFQlVTWV0gICAgICAgICAgPSAiRGV2aWNlIGlzIGJ1c3kiLAorICBbQlJMQVBJX0VSUk9SX1VOS05PV05fSU5TVFJVQ1RJT05dID0gIlVua25vd24gaW5zdHJ1Y3Rpb24iLAorICBbQlJMQVBJX0VSUk9SX0lMTEVHQUxfSU5TVFJVQ1RJT05dID0gIklsbGVnYWwgaW5zdHJ1Y3Rpb24iLAorICBbQlJMQVBJX0VSUk9SX0lOVkFMSURfUEFSQU1FVEVSXSAgID0gIkludmFsaWQgcGFyYW1ldGVyIiwKKyAgW0JSTEFQSV9FUlJPUl9JTlZBTElEX1BBQ0tFVF0gICAgICA9ICJJbnZhbGlkIHBhY2tldCIsCisgIFtCUkxBUElfRVJST1JfQ09OTlJFRlVTRURdICAgICAgICAgPSAiQ29ubmVjdGlvbiByZWZ1c2VkIiwKKyAgW0JSTEFQSV9FUlJPUl9PUE5PVFNVUFBdICAgICAgICAgICA9ICJPcGVyYXRpb24gbm90IHN1cHBvcnRlZCIsCisgIFtCUkxBUElfRVJST1JfR0FJRVJSXSAgICAgICAgICAgICAgPSAiZ2V0YWRkcmluZm8oKSBlcnJvciIsCisgIFtCUkxBUElfRVJST1JfTElCQ0VSUl0gICAgICAgICAgICAgPSAibGliYyBlcnJvciIsCisgIFtCUkxBUElfRVJST1JfVU5LTk9XTlRUWV0gICAgICAgICAgPSAiQ2FuJ3QgZGV0ZXJtaW5lIHR0eSBudW1iZXIiLAorICBbQlJMQVBJX0VSUk9SX1BST1RPQ09MX1ZFUlNJT05dICAgID0gIkJhZCBwcm90b2NvbCB2ZXJzaW9uIiwKKyAgW0JSTEFQSV9FUlJPUl9FT0ZdICAgICAgICAgICAgICAgICA9ICJVbmV4cGVjdGVkIGVuZCBvZiBmaWxlIiwKKyAgW0JSTEFQSV9FUlJPUl9FTVBUWUtFWV0gICAgICAgICAgICA9ICJLZXkgZmlsZSBpcyBlbXB0eSIsCisgIFtCUkxBUElfRVJST1JfRFJJVkVSRVJST1JdICAgICAgICAgPSAiRHJpdmVyIGVycm9yIiwKKyAgW0JSTEFQSV9FUlJPUl9BVVRIRU5USUNBVElPTl0gICAgICA9ICJBdXRoZW50aWNhdGlvbiBmYWlsZWQiLAorICBbQlJMQVBJX0VSUk9SX1JFQURPTkxZX1BBUkFNRVRFUl0gID0gIlBhcmFtZXRlciBjYW4gbm90IGJlIGNoYW5nZWQiLAorfTsKKworLyogYnJsYXBpX25lcnI6IG51bWJlciBvZiBlcnJvciBjb2RlcyAqLworY29uc3QgaW50IGJybGFwaV9uZXJyID0gKHNpemVvZihicmxhcGlfZXJybGlzdCkvc2l6ZW9mKGNoYXIqKSk7CisKKy8qIF9icmxhcGlfc3RyZXJyb3JfY3B5OiBzdG9yZSBjb25zdGFudC1zdHJpbmcgZXJyb3IgbWVzc2FnZSAqLworc3RhdGljIHNpemVfdCBfYnJsYXBpX3N0cmVycm9yX2NweShjaGFyICpidWYsIHNpemVfdCBidWZsZW4sIGNvbnN0IGNoYXIgKm1zZykKK3sKKyAgc2l6ZV90IHRvdHNpemUgPSBzdHJsZW4obXNnKTsKKworICBpZiAoYnVmbGVuID09IDApCisgICAgcmV0dXJuIHRvdHNpemU7CisKKyAgaWYgKGJ1ZmxlbiA+IHRvdHNpemUrMSkgeworICAgIGJ1ZmxlbiA9IHRvdHNpemUrMTsKKyAgfQorICBtZW1jcHkoYnVmLCBtc2csIGJ1Zmxlbi0xKTsKKyAgYnVmW2J1Zmxlbi0xXSA9ICdcMCc7CisKKyAgcmV0dXJuIHRvdHNpemU7Cit9CisKKy8qIF9icmxhcGlfc3RyZXJyb3Jfc25wcmludGY6IHN0b3JlIGZvcm1hdHRlZCBlcnJvciBtZXNzYWdlICovCitzdGF0aWMgc2l6ZV90IF9icmxhcGlfc3RyZXJyb3Jfc25wcmludGYoY2hhciAqYnVmLCBzaXplX3QgYnVmbGVuLCBjb25zdCBjaGFyICpmbXQsIC4uLikKK3sKKyAgdmFfbGlzdCB2YTsKKyAgaW50IHRvdHNpemU7CisKKyAgdmFfc3RhcnQodmEsIGZtdCk7CisgIHRvdHNpemUgPSB2c25wcmludGYoYnVmLCBidWZsZW4sIGZtdCwgdmEpOworICB2YV9lbmQodmEpOworCisgIHJldHVybiB0b3RzaXplOworfQorCisvKiBicmxhcGlfc3RyZXJyb3Jfcjogc3RvcmUgZXJyb3IgbWVzc2FnZSAqLworc2l6ZV90IEJSTEFQSV9TVERDQUxMIGJybGFwaV9zdHJlcnJvcl9yKGNvbnN0IGJybGFwaV9lcnJvcl90ICplcnJvciwgY2hhciAqYnVmLCBzaXplX3QgYnVmbGVuKQoreworICBpZiAoZXJyb3ItPmJybGVycm5vPj1icmxhcGlfbmVycikKKyAgICByZXR1cm4gX2JybGFwaV9zdHJlcnJvcl9jcHkoYnVmLCBidWZsZW4sICJVbmtub3duIGVycm9yIik7CisgIGVsc2UgaWYgKGVycm9yLT5icmxlcnJubz09QlJMQVBJX0VSUk9SX0dBSUVSUikgeworI2lmIGRlZmluZWQoRUFJX1NZU1RFTSkKKyAgICBpZiAoZXJyb3ItPmdhaWVycm5vID09IEVBSV9TWVNURU0pCisgICAgICByZXR1cm4gX2JybGFwaV9zdHJlcnJvcl9zbnByaW50ZihidWYsYnVmbGVuLCJyZXNvbHZlOiAlcyIsIHN0cmVycm9yKGVycm9yLT5saWJjZXJybm8pKTsKKyAgICBlbHNlCisjZW5kaWYgLyogRUFJX1NZU1RFTSAqLworICAgICAgcmV0dXJuIF9icmxhcGlfc3RyZXJyb3Jfc25wcmludGYoYnVmLGJ1ZmxlbiwicmVzb2x2ZTogIgorI2lmIGRlZmluZWQoSEFWRV9HRVRBRERSSU5GTykKKyNpZiBkZWZpbmVkKEhBVkVfR0FJX1NUUkVSUk9SKQorCSIlcyIsIGdhaV9zdHJlcnJvcihlcnJvci0+Z2FpZXJybm8pCisjZWxzZQorCSIlZCIsIGVycm9yLT5nYWllcnJubworI2VuZGlmCisjZWxpZiBkZWZpbmVkKEhBVkVfSFNUUkVSUk9SKSAmJiAhZGVmaW5lZChfX01JTkdXMzJfXykKKwkiJXMiLCBoc3RyZXJyb3IoZXJyb3ItPmdhaWVycm5vKQorI2Vsc2UKKwkiJXgiLCBlcnJvci0+Z2FpZXJybm8KKyNlbmRpZgorCSk7CisgIH0KKyAgZWxzZSBpZiAoZXJyb3ItPmJybGVycm5vPT1CUkxBUElfRVJST1JfTElCQ0VSUikgeworICAgIHJldHVybiBfYnJsYXBpX3N0cmVycm9yX3NucHJpbnRmKGJ1ZixidWZsZW4sIiVzOiAlcyIsIGVycm9yLT5lcnJmdW4/ZXJyb3ItPmVycmZ1bjoiKG51bGwpIiwgc3RyZXJyb3IoZXJyb3ItPmxpYmNlcnJubykpOworICB9IGVsc2UKKyAgICByZXR1cm4gX2JybGFwaV9zdHJlcnJvcl9jcHkoYnVmLCBidWZsZW4sIGJybGFwaV9lcnJsaXN0W2Vycm9yLT5icmxlcnJub10pOworfQorCisvKiBicmxhcGlfc3RyZXJyb3I6IHJldHVybiBlcnJvciBtZXNzYWdlICovCitjb25zdCBjaGFyICogQlJMQVBJX1NURENBTEwgYnJsYXBpX3N0cmVycm9yKGNvbnN0IGJybGFwaV9lcnJvcl90ICplcnJvcikKK3sKKyAgc3RhdGljIGNoYXIgZXJybXNnWzEyOF07CisgIGJybGFwaV9zdHJlcnJvcl9yKGVycm9yLCBlcnJtc2csIHNpemVvZihlcnJtc2cpKTsKKyAgcmV0dXJuIGVycm1zZzsKK30KKworLyogYnJsYXBpX3BlcnJvcjogZXJyb3IgbWVzc2FnZSBwcmludGluZyAqLwordm9pZCBCUkxBUElfU1REQ0FMTCBicmxhcGlfcGVycm9yKGNvbnN0IGNoYXIgKnMpCit7CisgIGZwcmludGYoc3RkZXJyLCIlczogJXNcbiIscyxicmxhcGlfc3RyZXJyb3IoJmJybGFwaV9lcnJvcikpOworfQorCisvKiBYWFggZnVuY3Rpb25zIG11c3RuJ3QgdXNlIGJybGFwaV9lcnJubyBhZnRlciB0aGlzIHNpbmNlIGl0ICN1bmRlZnMgaXQgWFhYICovCisKKyNpZmRlZiBicmxhcGlfZXJyb3IKKyN1bmRlZiBicmxhcGlfZXJyb3IKKyNlbmRpZiAvKiBicmxhcGlfZXJyb3IgKi8KKworYnJsYXBpX2Vycm9yX3QgYnJsYXBpX2Vycm9yOworc3RhdGljIGludCBwdGhyZWFkX2Vycm9yX29rOworCisvKiB3ZSBuZWVkIGEgcGVyLXRocmVhZCBlcnJubyB2YXJpYWJsZSwgdGhhbmtzIHRvIHB0aHJlYWRfa2V5cyAqLworc3RhdGljIHB0aHJlYWRfa2V5X3QgZXJyb3Jfa2V5OworCisvKiB0aGUga2V5IG11c3QgYmUgY3JlYXRlZCBhdCBtb3N0IG9uY2UgKi8KK3N0YXRpYyBwdGhyZWFkX29uY2VfdCBlcnJvcl9rZXlfb25jZSA9IFBUSFJFQURfT05DRV9JTklUOworCitzdGF0aWMgdm9pZCBlcnJvcl9rZXlfZnJlZSh2b2lkICprZXkpCit7CisgIGZyZWUoa2V5KTsKK30KKworc3RhdGljIHZvaWQgZXJyb3Jfa2V5X2FsbG9jKHZvaWQpCit7CisgIHB0aHJlYWRfZXJyb3Jfb2s9IXB0aHJlYWRfa2V5X2NyZWF0ZSgmZXJyb3Jfa2V5LCBlcnJvcl9rZXlfZnJlZSk7Cit9CisKKy8qIGhvdyB0byBnZXQgcGVyLXRocmVhZCBlcnJubyB2YXJpYWJsZS4gVGhpcyB3aWxsIGJlIGNhbGxlZCBieSB0aGUgbWFjcm8KKyAqIGJybGFwaV9lcnJubyAqLworYnJsYXBpX2Vycm9yX3QgKiBCUkxBUElfU1REQ0FMTCBicmxhcGlfZXJyb3JfbG9jYXRpb24odm9pZCkKK3sKKyAgYnJsYXBpX2Vycm9yX3QgKmVycm9ycDsKKyNpZm5kZWYgV0lORE9XUworICBpZiAocHRocmVhZF9vbmNlICYmIHB0aHJlYWRfa2V5X2NyZWF0ZSkgeworI2VuZGlmIC8qIFdJTkRPV1MgKi8KKyAgICBwdGhyZWFkX29uY2UoJmVycm9yX2tleV9vbmNlLCBlcnJvcl9rZXlfYWxsb2MpOworICAgIGlmIChwdGhyZWFkX2Vycm9yX29rKSB7CisgICAgICBpZiAoKGVycm9ycD0oYnJsYXBpX2Vycm9yX3QgKikgcHRocmVhZF9nZXRzcGVjaWZpYyhlcnJvcl9rZXkpKSkKKyAgICAgICAgLyogbm9ybWFsIGNhc2UgKi8KKyAgICAgICAgcmV0dXJuIGVycm9ycDsKKyAgICAgIGVsc2UKKyAgICAgICAgLyogb24gdGhlIGZpcnN0IHRpbWUsIG11c3QgYWxsb2NhdGUgaXQgKi8KKyAgICAgICAgaWYgKChlcnJvcnA9bWFsbG9jKHNpemVvZigqZXJyb3JwKSkpICYmICFwdGhyZWFkX3NldHNwZWNpZmljKGVycm9yX2tleSxlcnJvcnApKSB7CisJICBtZW1zZXQoZXJyb3JwLDAsc2l6ZW9mKCplcnJvcnApKTsKKyAgICAgICAgICByZXR1cm4gZXJyb3JwOworCX0KKyAgICB9CisjaWZuZGVmIFdJTkRPV1MKKyAgfQorI2VuZGlmIC8qIFdJTkRPV1MgKi8KKyAgLyogZmFsbC1iYWNrOiBzaGFyZWQgZXJybm8gOi8gKi8KKyAgcmV0dXJuICZicmxhcGlfZXJyb3I7Cit9CisKK2JybGFwaV9fZXhjZXB0aW9uSGFuZGxlcl90IEJSTEFQSV9TVERDQUxMIGJybGFwaV9fc2V0RXhjZXB0aW9uSGFuZGxlcihicmxhcGlfaGFuZGxlX3QgKmhhbmRsZSwgYnJsYXBpX19leGNlcHRpb25IYW5kbGVyX3QgbmV3KQoreworICBicmxhcGlfX2V4Y2VwdGlvbkhhbmRsZXJfdCB0bXA7CisgIHB0aHJlYWRfbXV0ZXhfbG9jaygmaGFuZGxlLT5leGNlcHRpb25IYW5kbGVyX211dGV4KTsKKyAgdG1wID0gaGFuZGxlLT5leGNlcHRpb25IYW5kbGVyLndpdGhIYW5kbGU7CisgIGlmIChuZXchPU5VTEwpIGhhbmRsZS0+ZXhjZXB0aW9uSGFuZGxlci53aXRoSGFuZGxlID0gbmV3OworICBwdGhyZWFkX211dGV4X3VubG9jaygmaGFuZGxlLT5leGNlcHRpb25IYW5kbGVyX211dGV4KTsKKyAgcmV0dXJuIHRtcDsKK30KKworYnJsYXBpX2V4Y2VwdGlvbkhhbmRsZXJfdCBCUkxBUElfU1REQ0FMTCBicmxhcGlfc2V0RXhjZXB0aW9uSGFuZGxlcihicmxhcGlfZXhjZXB0aW9uSGFuZGxlcl90IG5ldykKK3sKKyAgYnJsYXBpX2V4Y2VwdGlvbkhhbmRsZXJfdCB0bXA7CisgIHB0aHJlYWRfbXV0ZXhfbG9jaygmZGVmYXVsdEhhbmRsZS5leGNlcHRpb25IYW5kbGVyX211dGV4KTsKKyAgdG1wID0gZGVmYXVsdEhhbmRsZS5leGNlcHRpb25IYW5kbGVyLndpdGhvdXRIYW5kbGU7CisgIGlmIChuZXchPU5VTEwpIGRlZmF1bHRIYW5kbGUuZXhjZXB0aW9uSGFuZGxlci53aXRob3V0SGFuZGxlID0gbmV3OworICBwdGhyZWFkX211dGV4X3VubG9jaygmZGVmYXVsdEhhbmRsZS5leGNlcHRpb25IYW5kbGVyX211dGV4KTsKKyAgcmV0dXJuIHRtcDsKK30KKworaW50IEJSTEFQSV9TVERDQUxMIGJybGFwaV9fc3RyZXhjZXB0aW9uKGJybGFwaV9oYW5kbGVfdCAqaGFuZGxlLCBjaGFyICpidWYsIHNpemVfdCBuLCBpbnQgZXJyLCBicmxhcGlfcGFja2V0VHlwZV90IHR5cGUsIGNvbnN0IHZvaWQgKnBhY2tldCwgc2l6ZV90IHNpemUpCit7CisgIGludCBjaGFycyA9IDEyODsgLyogTnVtYmVyIG9mIGJ5dGVzIHRvIGR1bXAgKi8KKyAgY2hhciBoZXhTdHJpbmdbMypjaGFycysxXTsKKyAgaW50IGksIG5iQ2hhcnMgPSBNSU4oY2hhcnMsIHNpemUpOworICBjaGFyICpwID0gaGV4U3RyaW5nOworICBicmxhcGlfZXJyb3JfdCBlcnJvciA9IHsgLmJybGVycm5vID0gZXJyIH07CisgIGZvciAoaT0wOyBpPG5iQ2hhcnM7IGkrKykKKyAgICBwICs9IHNwcmludGYocCwgIiUwMnggIiwgKCh1bnNpZ25lZCBjaGFyICopIHBhY2tldClbaV0pOworICBwLS07IC8qIERvbid0IGtlZXAgbGFzdCBzcGFjZSAqLworICAqcCA9ICdcMCc7CisgIHJldHVybiBzbnByaW50ZihidWYsIG4sICIlcyBvbiAlcyByZXF1ZXN0IG9mIHNpemUgJWQgKCVzKSIsCisgICAgYnJsYXBpX3N0cmVycm9yKCZlcnJvciksIGJybGFwaV9nZXRQYWNrZXRUeXBlTmFtZSh0eXBlKSwgKGludClzaXplLCBoZXhTdHJpbmcpOworfQorCitpbnQgQlJMQVBJX1NURENBTEwgYnJsYXBpX3N0cmV4Y2VwdGlvbihjaGFyICpidWYsIHNpemVfdCBuLCBpbnQgZXJyLCBicmxhcGlfcGFja2V0VHlwZV90IHR5cGUsIGNvbnN0IHZvaWQgKnBhY2tldCwgc2l6ZV90IHNpemUpCit7CisgIHJldHVybiBicmxhcGlfX3N0cmV4Y2VwdGlvbigmZGVmYXVsdEhhbmRsZSwgYnVmLCBuLCBlcnIsIHR5cGUsIHBhY2tldCwgc2l6ZSk7Cit9CisKK3ZvaWQgQlJMQVBJX1NURENBTEwgYnJsYXBpX19kZWZhdWx0RXhjZXB0aW9uSGFuZGxlcihicmxhcGlfaGFuZGxlX3QgKmhhbmRsZSwgaW50IGVyciwgYnJsYXBpX3BhY2tldFR5cGVfdCB0eXBlLCBjb25zdCB2b2lkICpwYWNrZXQsIHNpemVfdCBzaXplKQoreworICBjaGFyIHN0clswWDEwMF07CisgIGJybGFwaV9zdHJleGNlcHRpb24oc3RyLDBYMTAwLCBlcnIsIHR5cGUsIHBhY2tldCwgc2l6ZSk7CisgIGZwcmludGYoc3RkZXJyLCAiQnJsQVBJIGV4Y2VwdGlvbjogJXNcbllvdSBtYXkgd2lzaCB0byBhZGQgdGhlIC1sZGVidWcgb3B0aW9uIHRvIHRoZSBicmx0dHkgY29tbWFuZCBsaW5lIGluIG9yZGVyIHRvIGdldCBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIGluIHRoZSBzeXN0ZW0gbG9nXG4iLCBzdHIpOworICBmcHJpbnRmKHN0ZGVyciwgIkNyYXNoaW5nIHRoZSBjbGllbnQgbm93LiBZb3UgbWF5IHdhbnQgdG8gdXNlIGJybGFwaV9zZXRFeGNlcHRpb25IYW5kbGVyIHRvIGRlZmluZSB5b3VyIG93biBleGNlcHRpb24gaGFuZGxpbmcuXG4iKTsKKyAgYWJvcnQoKTsKK30KKwordm9pZCBCUkxBUElfU1REQ0FMTCBicmxhcGlfZGVmYXVsdEV4Y2VwdGlvbkhhbmRsZXIoaW50IGVyciwgYnJsYXBpX3BhY2tldFR5cGVfdCB0eXBlLCBjb25zdCB2b2lkICpwYWNrZXQsIHNpemVfdCBzaXplKQoreworICBicmxhcGlfX2RlZmF1bHRFeGNlcHRpb25IYW5kbGVyKCZkZWZhdWx0SGFuZGxlLCBlcnIsIHR5cGUsIHBhY2tldCwgc2l6ZSk7Cit9CmRpZmYgLS1naXQgYS9Qcm9ncmFtcy9icmxhcGlfY29tbW9uLmggYi9Qcm9ncmFtcy9icmxhcGlfY29tbW9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTAyYzM4OQotLS0gL2Rldi9udWxsCisrKyBiL1Byb2dyYW1zL2JybGFwaV9jb21tb24uaApAQCAtMCwwICsxLDk1MSBAQAorLyoKKyAqIGxpYmJybGFwaSAtIEEgbGlicmFyeSBwcm92aWRpbmcgYWNjZXNzIHRvIGJyYWlsbGUgdGVybWluYWxzIGZvciBhcHBsaWNhdGlvbnMuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDAyLTIwMjMgYnkKKyAqICAgU2FtdWVsIFRoaWJhdWx0IDxTYW11ZWwuVGhpYmF1bHRAZW5zLWx5b24ub3JnPgorICogICBTw6liYXN0aWVuIEhpbmRlcmVyIDxTZWJhc3RpZW4uSGluZGVyZXJAZW5zLWx5b24ub3JnPgorICoKKyAqIGxpYmJybGFwaSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorICoKKyAqIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyAqLworCisvKiBhcGlfY29tbW9uLmggLSBwcml2YXRlIGRlZmluaXRpb25zIHNoYXJlZCBieSBib3RoIHNlcnZlciAmIGNsaWVudCAqLworCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRkZWYuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKworI2lmZGVmIF9fTUlOR1czMl9fCisjaW5jbHVkZSA8aW8uaD4KKyNlbHNlIC8qIF9fTUlOR1czMl9fICovCisjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorI2luY2x1ZGUgPHN5cy91bi5oPgorI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KKyNpbmNsdWRlIDxhcnBhL2luZXQuaD4KKyNlbmRpZiAvKiBfX01JTkdXMzJfXyAqLworCisjaW5jbHVkZSAiYnJsYXBpX3Byb3RvY29sLmgiCisKKyNpZiAhZGVmaW5lZChBRl9MT0NBTCkgJiYgZGVmaW5lZChBRl9VTklYKQorI2RlZmluZSBBRl9MT0NBTCBBRl9VTklYCisjZW5kaWYgLyogIWRlZmluZWQoQUZfTE9DQUwpICYmIGRlZmluZWQoQUZfVU5JWCkgKi8KKworI2lmICFkZWZpbmVkKFBGX0xPQ0FMKSAmJiBkZWZpbmVkKFBGX1VOSVgpCisjZGVmaW5lIFBGX0xPQ0FMIFBGX1VOSVgKKyNlbmRpZiAvKiAhZGVmaW5lZChQRl9MT0NBTCkgJiYgZGVmaW5lZChQRl9VTklYKSAqLworCisjaWZuZGVmIE1JTgorI2RlZmluZSBNSU4oYSwgYikgKCgoYSkgPCAoYikpPyAoYSk6IChiKSkKKyNlbmRpZiAvKiBNSU4gKi8KKworI2lmbmRlZiBNQVgKKyNkZWZpbmUgTUFYKGEsIGIpICgoKGEpID4gKGIpKT8gKGEpOiAoYikpCisjZW5kaWYgLyogTUFYICovCisKKyNpZmRlZiBfX01JTkdXMzJfXworI2RlZmluZSBnZXRfb3NmaGFuZGxlKGZkKSBfZ2V0X29zZmhhbmRsZShmZCkKKyNlbmRpZiAvKiBfX01JTkdXMzJfXyAqLworCisjZGVmaW5lIExpYmNFcnJvcihmdW5jdGlvbikgXAorICBicmxhcGlfZXJybm89QlJMQVBJX0VSUk9SX0xJQkNFUlI7IFwKKyAgYnJsYXBpX2xpYmNlcnJubyA9IGVycm5vOyBcCisgIGJybGFwaV9lcnJmdW4gPSBmdW5jdGlvbjsKKworLyogYnJsYXBpX3dyaXRlRmlsZSAqLworLyogV3JpdGVzIGEgYnVmZmVyIHRvIGEgZmlsZSAqLworc3RhdGljIHNzaXplX3QgYnJsYXBpX3dyaXRlRmlsZShicmxhcGlfZmlsZURlc2NyaXB0b3IgZmQsIGNvbnN0IHZvaWQgKmJ1ZmZlciwgc2l6ZV90IHNpemUpCit7CisgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZiA9IGJ1ZmZlcjsKKyAgc2l6ZV90IG47CisjaWZkZWYgX19NSU5HVzMyX18KKyAgRFdPUkQgcmVzPTA7CisjZWxzZSAvKiBfX01JTkdXMzJfXyAqLworICBzc2l6ZV90IHJlcz0wOworI2VuZGlmIC8qIF9fTUlOR1czMl9fICovCisgIGZvciAobj0wO248c2l6ZTtuKz1yZXMpIHsKKyNpZmRlZiBfX01JTkdXMzJfXworICAgIE9WRVJMQVBQRUQgb3ZlcmwgPSB7MCwgMCwge3swLCAwfX0sIENyZWF0ZUV2ZW50KE5VTEwsIFRSVUUsIEZBTFNFLCBOVUxMKX07CisgICAgaWYgKCghV3JpdGVGaWxlKGZkLGJ1ZituLHNpemUtbiwmcmVzLCZvdmVybCkKKyAgICAgICYmIEdldExhc3RFcnJvcigpICE9IEVSUk9SX0lPX1BFTkRJTkcpIHx8CisgICAgICAhR2V0T3ZlcmxhcHBlZFJlc3VsdChmZCwgJm92ZXJsLCAmcmVzLCBUUlVFKSkgeworICAgICAgcmVzID0gR2V0TGFzdEVycm9yKCk7CisgICAgICBDbG9zZUhhbmRsZShvdmVybC5oRXZlbnQpOworICAgICAgc2V0RXJybm8ocmVzKTsKKyAgICAgIHJldHVybiAtMTsKKyAgICB9CisgICAgQ2xvc2VIYW5kbGUob3ZlcmwuaEV2ZW50KTsKKyNlbHNlIC8qIF9fTUlOR1czMl9fICovCisgICAgcmVzPXNlbmQoZmQsYnVmK24sc2l6ZS1uLDApOworICAgIGlmICgocmVzPDApICYmCisgICAgICAgIChlcnJubyE9RUlOVFIpICYmCisjaWZkZWYgRVdPVUxEQkxPQ0sKKyAgICAgICAgKGVycm5vIT1FV09VTERCTE9DSykgJiYKKyNlbmRpZiAvKiBFV09VTERCTE9DSyAqLworICAgICAgICAoZXJybm8hPUVBR0FJTikpIHsgLyogRUFHQUlOIHNob3VsZG4ndCBoYXBwZW4sIGJ1dCB3aG8ga25vd3MuLi4gKi8KKyAgICAgIHJldHVybiByZXM7CisgICAgfQorI2VuZGlmIC8qIF9fTUlOR1czMl9fICovCisgIH0KKyAgcmV0dXJuIG47Cit9CisKKy8qIGJybGFwaV9yZWFkRmlsZSAqLworLyogUmVhZHMgYSBidWZmZXIgZnJvbSBhIGZpbGUgKi8KK3N0YXRpYyBzc2l6ZV90IGJybGFwaV9yZWFkRmlsZShicmxhcGlfZmlsZURlc2NyaXB0b3IgZmQsIHZvaWQgKmJ1ZmZlciwgc2l6ZV90IHNpemUsIGludCBsb29wKQoreworICB1bnNpZ25lZCBjaGFyICpidWYgPSBidWZmZXI7CisgIHNpemVfdCBuOworI2lmZGVmIF9fTUlOR1czMl9fCisgIERXT1JEIHJlcz0wOworI2Vsc2UgLyogX19NSU5HVzMyX18gKi8KKyAgc3NpemVfdCByZXM9MDsKKyNlbmRpZiAvKiBfX01JTkdXMzJfXyAqLworICBmb3IgKG49MDtuPHNpemUgJiYgcmVzPj0wO24rPXJlcykgeworI2lmZGVmIF9fTUlOR1czMl9fCisgICAgT1ZFUkxBUFBFRCBvdmVybCA9IHswLCAwLCB7ezAsIDB9fSwgQ3JlYXRlRXZlbnQoTlVMTCwgVFJVRSwgRkFMU0UsIE5VTEwpfTsKKyAgICBpZiAoKCFSZWFkRmlsZShmZCxidWYrbixzaXplLW4sJnJlcywmb3ZlcmwpCisgICAgICAmJiBHZXRMYXN0RXJyb3IoKSAhPSBFUlJPUl9JT19QRU5ESU5HKSB8fAorICAgICAgIUdldE92ZXJsYXBwZWRSZXN1bHQoZmQsICZvdmVybCwgJnJlcywgVFJVRSkpIHsKKyAgICAgIHJlcyA9IEdldExhc3RFcnJvcigpOworICAgICAgQ2xvc2VIYW5kbGUob3ZlcmwuaEV2ZW50KTsKKyAgICAgIGlmIChyZXMgPT0gRVJST1JfSEFORExFX0VPRikgcmV0dXJuIG47CisgICAgICBzZXRFcnJubyhyZXMpOworICAgICAgcmV0dXJuIC0xOworICAgIH0KKyAgICBDbG9zZUhhbmRsZShvdmVybC5oRXZlbnQpOworI2Vsc2UgLyogX19NSU5HVzMyX18gKi8KKyAgICByZXM9cmVhZChmZCxidWYrbixzaXplLW4pOworICAgIGlmIChyZXM8MCkgeworICAgICAgaWYgKChlcnJubyE9RUlOVFIpICYmCisjaWZkZWYgRVdPVUxEQkxPQ0sKKyAgICAgICAgKGVycm5vIT1FV09VTERCTE9DSykgJiYKKyNlbmRpZiAvKiBFV09VTERCTE9DSyAqLworICAgICAgICAoZXJybm8hPUVBR0FJTikpIHsgLyogRUFHQUlOIHNob3VsZG4ndCBoYXBwZW4sIGJ1dCB3aG8ga25vd3MuLi4gKi8KKwlyZXR1cm4gLTE7CisgICAgICB9CisgICAgICBpZiAoIWxvb3AgJiYgIW4pIHJldHVybiAtMTsgLyogTm90aGluZyByZWFkIHlldCwgcmVwb3J0IEVJTlRSICovCisgICAgICAvKiBlbHNlLCBjb250aW51ZSByZWFkaW5nICovCisgICAgfQorI2VuZGlmIC8qIF9fTUlOR1czMl9fICovCisgICAgaWYgKHJlcz09MCkKKyAgICAgIC8qIFVuZXhwZWN0ZWQgZW5kIG9mIGZpbGUgISAqLworICAgICAgYnJlYWs7CisgIH0KKyAgcmV0dXJuIG47Cit9CisKK3R5cGVkZWYgZW51bSB7CisjaWZkZWYgX19NSU5HVzMyX18KKyAgUkVBRFksIC8qIGJ1dCBubyBwZW5kaW5nIFJlYWRGaWxlICovCisjZW5kaWYgLyogX19NSU5HVzMyX18gKi8KKyAgUkVBRElOR19IRUFERVIsCisgIFJFQURJTkdfQ09OVEVOVCwKKyAgRElTQ0FSRElORworfSBQYWNrZXRTdGF0ZTsKKwordHlwZWRlZiBzdHJ1Y3QgeworICBicmxhcGlfaGVhZGVyX3QgaGVhZGVyOworICB1aW50MzJfdCBjb250ZW50W0JSTEFQSV9NQVhQQUNLRVRTSVpFL3NpemVvZih1aW50MzJfdCkrMV07IC8qICsxIGZvciBhZGRpdGlvbmFsIFwwICovCisgIFBhY2tldFN0YXRlIHN0YXRlOworICBpbnQgcmVhZEJ5dGVzOyAvKiBBbHJlYWR5IHJlYWQgYnl0ZXMgKi8KKyAgdW5zaWduZWQgY2hhciAqcDsgLyogV2hlcmUgcmVhZCgpIHNob3VsZCBsb2FkIGRhdGFzICovCisgIGludCBuOyAvKiBWYWx1ZSB0byBnaXZlIHNvIHJlYWQoKSAqLworI2lmZGVmIF9fTUlOR1czMl9fCisgIE9WRVJMQVBQRUQgb3Zlcmw7CisjZW5kaWYgLyogX19NSU5HVzMyX18gKi8KK30gUGFja2V0OworCisvKiBGdW5jdGlvbjogYnJsYXBpX3Jlc2V0UGFja2V0ICovCisvKiBSZXNldHMgYSBQYWNrZXQgc3RydWN0dXJlICovCitzdGF0aWMgdm9pZCBicmxhcGlfcmVzZXRQYWNrZXQoUGFja2V0ICpwYWNrZXQpCit7CisjaWZkZWYgX19NSU5HVzMyX18KKyAgcGFja2V0LT5zdGF0ZSA9IFJFQURZOworI2Vsc2UgLyogX19NSU5HVzMyX18gKi8KKyAgcGFja2V0LT5zdGF0ZSA9IFJFQURJTkdfSEVBREVSOworI2VuZGlmIC8qIF9fTUlOR1czMl9fICovCisgIHBhY2tldC0+cmVhZEJ5dGVzID0gMDsKKyAgcGFja2V0LT5wID0gKHVuc2lnbmVkIGNoYXIgKikgJnBhY2tldC0+aGVhZGVyOworICBwYWNrZXQtPm4gPSBzaXplb2YocGFja2V0LT5oZWFkZXIpOworI2lmZGVmIF9fTUlOR1czMl9fCisgIFNldEV2ZW50KHBhY2tldC0+b3ZlcmwuaEV2ZW50KTsKKyNlbmRpZiAvKiBfX01JTkdXMzJfXyAqLworfQorCisvKiBGdW5jdGlvbjogYnJsYXBpX2luaXRpYWxpemVQYWNrZXQgKi8KKy8qIFByZXBhcmVzIGEgUGFja2V0IHN0cnVjdHVyZSAqLworLyogcmV0dXJucyAwIG9uIHN1Y2Nlc3MsIC0xIG9uIGZhaWx1cmUgKi8KK3N0YXRpYyBpbnQgYnJsYXBpX2luaXRpYWxpemVQYWNrZXQoUGFja2V0ICpwYWNrZXQpCit7CisjaWZkZWYgX19NSU5HVzMyX18KKyAgbWVtc2V0KCZwYWNrZXQtPm92ZXJsLDAsc2l6ZW9mKHBhY2tldC0+b3ZlcmwpKTsKKyAgaWYgKCEocGFja2V0LT5vdmVybC5oRXZlbnQgPSBDcmVhdGVFdmVudChOVUxMLCBUUlVFLCBUUlVFLCBOVUxMKSkpIHsKKyAgICBzZXRTeXN0ZW1FcnJubygpOworICAgIExpYmNFcnJvcigiQ3JlYXRlRXZlbnQgZm9yIHJlYWRQYWNrZXQiKTsKKyAgICByZXR1cm4gLTE7CisgIH0KKyNlbmRpZiAvKiBfX01JTkdXMzJfXyAqLworICBicmxhcGlfcmVzZXRQYWNrZXQocGFja2V0KTsKKyAgcmV0dXJuIDA7Cit9CisKKy8qIEZ1bmN0aW9uIDogcmVhZFBhY2tldCAqLworLyogUmVhZHMgYSBwYWNrZXQgZm9yIHRoZSBnaXZlbiBjb25uZWN0aW9uICovCisvKiBSZXR1cm5zIC0yIG9uIEVPRiwgLTEgb24gZXJyb3IsIDAgaWYgdGhlIHJlYWRpbmcgaXMgbm90IGNvbXBsZXRlLCAqLworLyogMSBpZiB0aGUgcGFja2V0IGhhcyBiZWVuIHJlYWQuICovCitzdGF0aWMgaW50IGJybGFwaV9fcmVhZFBhY2tldChQYWNrZXQgKnBhY2tldCwgYnJsYXBpX2ZpbGVEZXNjcmlwdG9yIGRlc2NyaXB0b3IpCit7CisjaWZkZWYgX19NSU5HVzMyX18KKyAgRFdPUkQgcmVzOworICBpZiAocGFja2V0LT5zdGF0ZSE9UkVBRFkpIHsKKyAgICAvKiBwZW5kaW5nIHJlYWQgKi8KKyAgICBpZiAoIUdldE92ZXJsYXBwZWRSZXN1bHQoZGVzY3JpcHRvciwmcGFja2V0LT5vdmVybCwmcmVzLEZBTFNFKSkgeworICAgICAgc3dpdGNoIChHZXRMYXN0RXJyb3IoKSkgeworICAgICAgICBjYXNlIEVSUk9SX0lPX1BFTkRJTkc6IHJldHVybiAwOworICAgICAgICBjYXNlIEVSUk9SX0hBTkRMRV9FT0Y6CisgICAgICAgIGNhc2UgRVJST1JfQlJPS0VOX1BJUEU6IHJldHVybiAtMjsKKyAgICAgICAgZGVmYXVsdDogc2V0U3lzdGVtRXJybm8oKTsgTGliY0Vycm9yKCJHZXRPdmVybGFwcGVkUmVzdWx0Iik7IHJldHVybiAtMTsKKyAgICAgIH0KKyAgICB9CityZWFkOgorI2Vsc2UgLyogX19NSU5HVzMyX18gKi8KKyAgaW50IHJlczsKK3JlYWQ6CisgIHJlcyA9IHJlYWQoZGVzY3JpcHRvciwgcGFja2V0LT5wLCBwYWNrZXQtPm4pOworICBpZiAocmVzPT0tMSkgeworICAgIHN3aXRjaCAoZXJybm8pIHsKKyAgICAgIGNhc2UgRUlOVFI6IGdvdG8gcmVhZDsKKyAgICAgIGNhc2UgRUFHQUlOOiByZXR1cm4gMDsKKyAgICAgIGRlZmF1bHQ6IHJldHVybiAtMTsKKyAgICB9CisgIH0KKyNlbmRpZiAvKiBfX01JTkdXMzJfXyAqLworICBpZiAocmVzPT0wKSByZXR1cm4gLTI7IC8qIEVPRiAqLworICBwYWNrZXQtPnJlYWRCeXRlcyArPSByZXM7CisgIGlmICgocGFja2V0LT5zdGF0ZT09UkVBRElOR19IRUFERVIpICYmIChwYWNrZXQtPnJlYWRCeXRlcz09QlJMQVBJX0hFQURFUlNJWkUpKSB7CisgICAgcGFja2V0LT5oZWFkZXIuc2l6ZSA9IG50b2hsKHBhY2tldC0+aGVhZGVyLnNpemUpOworICAgIHBhY2tldC0+aGVhZGVyLnR5cGUgPSBudG9obChwYWNrZXQtPmhlYWRlci50eXBlKTsKKyAgICBpZiAocGFja2V0LT5oZWFkZXIuc2l6ZT09MCkgZ290byBvdXQ7CisgICAgcGFja2V0LT5yZWFkQnl0ZXMgPSAwOworICAgIGlmIChwYWNrZXQtPmhlYWRlci5zaXplPD1CUkxBUElfTUFYUEFDS0VUU0laRSkgeworICAgICAgcGFja2V0LT5zdGF0ZSA9IFJFQURJTkdfQ09OVEVOVDsKKyAgICAgIHBhY2tldC0+biA9IHBhY2tldC0+aGVhZGVyLnNpemU7CisgICAgfSBlbHNlIHsKKyAgICAgIHBhY2tldC0+c3RhdGUgPSBESVNDQVJESU5HOworICAgICAgcGFja2V0LT5uID0gQlJMQVBJX01BWFBBQ0tFVFNJWkU7CisgICAgfQorICAgIHBhY2tldC0+cCA9ICh1bnNpZ25lZCBjaGFyKikgcGFja2V0LT5jb250ZW50OworICB9IGVsc2UgaWYgKChwYWNrZXQtPnN0YXRlID09IFJFQURJTkdfQ09OVEVOVCkgJiYgKHBhY2tldC0+cmVhZEJ5dGVzPT1wYWNrZXQtPmhlYWRlci5zaXplKSkgZ290byBvdXQ7CisgIGVsc2UgaWYgKHBhY2tldC0+c3RhdGU9PURJU0NBUkRJTkcpIHsKKyAgICBwYWNrZXQtPnAgPSAodW5zaWduZWQgY2hhciAqKSBwYWNrZXQtPmNvbnRlbnQ7CisgICAgcGFja2V0LT5uID0gTUlOKHBhY2tldC0+aGVhZGVyLnNpemUtcGFja2V0LT5yZWFkQnl0ZXMsIEJSTEFQSV9NQVhQQUNLRVRTSVpFKTsKKyAgfSBlbHNlIHsKKyAgICBwYWNrZXQtPm4gLT0gcmVzOworICAgIHBhY2tldC0+cCArPSByZXM7CisgIH0KKyNpZmRlZiBfX01JTkdXMzJfXworICB9IGVsc2UgcGFja2V0LT5zdGF0ZSA9IFJFQURJTkdfSEVBREVSOworICBpZiAoIVJlc2V0RXZlbnQocGFja2V0LT5vdmVybC5oRXZlbnQpKQorICB7CisgICAgc2V0U3lzdGVtRXJybm8oKTsKKyAgICBMaWJjRXJyb3IoIlJlc2V0RXZlbnQgaW4gcmVhZFBhY2tldCIpOworICB9CisgIGlmICghUmVhZEZpbGUoZGVzY3JpcHRvciwgcGFja2V0LT5wLCBwYWNrZXQtPm4sICZyZXMsICZwYWNrZXQtPm92ZXJsKSkgeworICAgIHN3aXRjaCAoR2V0TGFzdEVycm9yKCkpIHsKKyAgICAgIGNhc2UgRVJST1JfSU9fUEVORElORzogcmV0dXJuIDA7CisgICAgICBjYXNlIEVSUk9SX0hBTkRMRV9FT0Y6CisgICAgICBjYXNlIEVSUk9SX0JST0tFTl9QSVBFOiByZXR1cm4gLTI7CisgICAgICBkZWZhdWx0OiBzZXRTeXN0ZW1FcnJubygpOyBMaWJjRXJyb3IoIlJlYWRGaWxlIik7IHJldHVybiAtMTsKKyAgICB9CisgIH0KKyNlbmRpZiAvKiBfX01JTkdXMzJfXyAqLworICBnb3RvIHJlYWQ7CisKK291dDoKKyAgYnJsYXBpX3Jlc2V0UGFja2V0KHBhY2tldCk7CisgIHJldHVybiAxOworfQorCisvKiBicmxhcGlfd3JpdGVQYWNrZXQgKi8KKy8qIFdyaXRlIGEgcGFja2V0IG9uIHRoZSBzb2NrZXQgKi8KK3NzaXplX3QgQlJMQVBJKHdyaXRlUGFja2V0KShicmxhcGlfZmlsZURlc2NyaXB0b3IgZmQsIGJybGFwaV9wYWNrZXRUeXBlX3QgdHlwZSwgY29uc3Qgdm9pZCAqYnVmLCBzaXplX3Qgc2l6ZSkKK3sKKyAgdWludDMyX3QgaGVhZGVyWzJdID0geyBodG9ubChzaXplKSwgaHRvbmwodHlwZSkgfTsKKyAgc3NpemVfdCByZXM7CisKKyAgLyogZmlyc3Qgc2VuZCBwYWNrZXQgaGVhZGVyIChzaXplK3R5cGUpICovCisgIGlmICgocmVzPWJybGFwaV93cml0ZUZpbGUoZmQsJmhlYWRlclswXSxzaXplb2YoaGVhZGVyKSkpPDApIHsKKyAgICBMaWJjRXJyb3IoIndyaXRlIGluIHdyaXRlUGFja2V0Iik7CisgICAgcmV0dXJuIHJlczsKKyAgfQorCisgIC8qIGV2ZW50dWFsbHkgZGF0YSAqLworICBpZiAoc2l6ZSAmJiBidWYpCisgICAgaWYgKChyZXM9YnJsYXBpX3dyaXRlRmlsZShmZCxidWYsc2l6ZSkpPDApIHsKKyAgICAgIExpYmNFcnJvcigid3JpdGUgaW4gd3JpdGVQYWNrZXQiKTsKKyAgICAgIHJldHVybiByZXM7CisgICAgfQorCisgIHJldHVybiAwOworfQorCisvKiBicmxhcGlfcmVhZFBhY2tldEhlYWRlciAqLworLyogUmVhZCBhIHBhY2tldCdzIGhlYWRlciBhbmQgcmV0dXJuIHBhY2tldCdzIHNpemUgKi8KK3NzaXplX3QgQlJMQVBJKHJlYWRQYWNrZXRIZWFkZXIpKGJybGFwaV9maWxlRGVzY3JpcHRvciBmZCwgYnJsYXBpX3BhY2tldFR5cGVfdCAqcGFja2V0VHlwZSkKK3sKKyAgdWludDMyX3QgaGVhZGVyWzJdOworICBzc2l6ZV90IHJlczsKKyAgaWYgKChyZXM9YnJsYXBpX3JlYWRGaWxlKGZkLGhlYWRlcixzaXplb2YoaGVhZGVyKSwwKSkgIT0gc2l6ZW9mKGhlYWRlcikpIHsKKyAgICBpZiAocmVzPDApIHsKKyAgICAgIC8qIHJlcG9ydHMgRUlOVFIgdG9vICovCisgICAgICBMaWJjRXJyb3IoInJlYWQgaW4gYnJsYXBpX3JlYWRQYWNrZXRIZWFkZXIiKTsKKyAgICAgIHJldHVybiAtMTsKKyAgICB9IGVsc2UgcmV0dXJuIC0yOworICB9CisgICpwYWNrZXRUeXBlID0gbnRvaGwoaGVhZGVyWzFdKTsKKyAgcmV0dXJuIG50b2hsKGhlYWRlclswXSk7Cit9CisKKy8qIGJybGFwaV9yZWFkUGFja2V0Q29udGVudCAqLworLyogUmVhZCBhIHBhY2tldCdzIGNvbnRlbnQgaW50byB0aGUgZ2l2ZW4gYnVmZmVyICovCisvKiBJZiB0aGUgcGFja2V0IGlzIHRvbyBsYXJnZSwgdGhlIGJ1ZmZlciBpcyBmaWxsZWQgd2l0aCB0aGUgKi8KKy8qIGJlZ2lubmluZyBvZiB0aGUgcGFja2V0LCB0aGUgcmVzdCBvZiB0aGUgcGFja2V0IGJlaW5nIGRpc2NhcmRlZCAqLworLyogUmV0dXJucyBwYWNrZXQgc2l6ZSwgLTEgb24gZmFpbHVyZSwgLTIgb24gRU9GICovCitzc2l6ZV90IEJSTEFQSShyZWFkUGFja2V0Q29udGVudCkoYnJsYXBpX2ZpbGVEZXNjcmlwdG9yIGZkLCBzaXplX3QgcGFja2V0U2l6ZSwgdm9pZCAqYnVmLCBzaXplX3QgYnVmU2l6ZSkKK3sKKyAgc3NpemVfdCByZXM7CisgIGNoYXIgZm9vW0JSTEFQSV9NQVhQQUNLRVRTSVpFXTsKKyAgd2hpbGUgKDEpIHsKKyAgICByZXMgPSBicmxhcGlfcmVhZEZpbGUoZmQsYnVmLE1JTihidWZTaXplLHBhY2tldFNpemUpLDEpOworICAgIGlmIChyZXMgPj0gMCkgYnJlYWs7CisgICAgaWYgKGVycm5vICE9IEVJTlRSCisjaWZkZWYgRVdPVUxEQkxPQ0sKKwkmJiBlcnJubyAhPSBFV09VTERCTE9DSworI2VuZGlmIC8qIEVXT1VMREJMT0NLICovCisJJiYgZXJybm8gIT0gRUFHQUlOKQorICAgICAgZ290byBvdXQ7CisgIH0KKyAgaWYgKHJlczxNSU4oYnVmU2l6ZSxwYWNrZXRTaXplKSkgcmV0dXJuIC0yOyAvKiBwa3Qgc21hbGxlciB0aGFuIGFubm91bmNlZCA9PiBFT0YgKi8KKyAgaWYgKHBhY2tldFNpemU+YnVmU2l6ZSkgeworICAgIHNpemVfdCBkaXNjYXJkID0gcGFja2V0U2l6ZS1idWZTaXplOworICAgIGZvciAocmVzPTA7IHJlczxkaXNjYXJkIC8gc2l6ZW9mKGZvbyk7IHJlcysrKQorICAgICAgYnJsYXBpX3JlYWRGaWxlKGZkLGZvbyxzaXplb2YoZm9vKSwxKTsKKyAgICBicmxhcGlfcmVhZEZpbGUoZmQsZm9vLGRpc2NhcmQgJSBzaXplb2YoZm9vKSwxKTsKKyAgfQorICByZXR1cm4gcGFja2V0U2l6ZTsKKworb3V0OgorICBMaWJjRXJyb3IoInJlYWQgaW4gYnJsYXBpX3JlYWRQYWNrZXQiKTsKKyAgcmV0dXJuIC0xOworfQorCisvKiBicmxhcGlfcmVhZFBhY2tldCAqLworLyogUmVhZCBhIHBhY2tldCAqLworLyogUmV0dXJucyBwYWNrZXQncyBzaXplLCAtMiBpZiBFT0YsIC0xIG9uIGVycm9yICovCisvKiBJZiB0aGUgcGFja2V0IGlzIGxhcmdlciB0aGFuIHRoZSBzdXBwbGllZCBidWZmZXIsIHRoZW4gKi8KKy8qIHRoZSBwYWNrZXQgaXMgdHJ1bmNhdGVkIHRvIGJ1ZmZlcidzIHNpemUsIGxpa2UgaW4gdGhlIHJlY3Ygc3lzdGVtIGNhbGwgKi8KKy8qIHdpdGggb3B0aW9uIE1TR19UUlVOQyAocmVzdCBvZiB0aGUgcGNrZXQgaXMgcmVhZCBidXQgZGlzY2FyZGVkKSAqLworc3NpemVfdCBCUkxBUEkocmVhZFBhY2tldCkoYnJsYXBpX2ZpbGVEZXNjcmlwdG9yIGZkLCBicmxhcGlfcGFja2V0VHlwZV90ICpwYWNrZXRUeXBlLCB2b2lkICpidWYsIHNpemVfdCBzaXplKQoreworICBzc2l6ZV90IHJlcyA9IEJSTEFQSShyZWFkUGFja2V0SGVhZGVyKShmZCwgcGFja2V0VHlwZSk7CisgIGlmIChyZXM8MCkgcmV0dXJuIHJlczsgLyogcmVwb3J0cyBFSU5UUiB0b28gKi8KKyAgcmV0dXJuIEJSTEFQSShyZWFkUGFja2V0Q29udGVudCkoZmQsIHJlcywgYnVmLCBzaXplKTsKK30KKworLyogRnVuY3Rpb24gOiBicmxhcGlfbG9hZEF1dGhLZXkgKi8KKy8qIExvYWRzIGFuIGF1dGhvcml6YXRpb24ga2V5IGZyb20gdGhlIGdpdmVuIGZpbGUgKi8KKy8qIEl0IGlzIHN0b3JlZCBpbiBhdXRoLCBhbmQgaXRzIHNpemUgaW4gYXV0aExlbmd0aCAqLworLyogSWYgdGhlIGZpbGUgaXMgbm9uLWV4aXN0YW50IG9yIHVucmVhZGFibGUsIHJldHVybnMgLTEgKi8KK3N0YXRpYyBpbnQgQlJMQVBJKGxvYWRBdXRoS2V5KShjb25zdCBjaGFyICpmaWxlbmFtZSwgc2l6ZV90ICphdXRobGVuZ3RoLCB2b2lkICphdXRoKQoreworICBpbnQgZmQ7CisgIG9mZl90IHN0c2l6ZTsKKyAgc3RydWN0IHN0YXQgc3RhdGJ1ZjsKKyAgaWYgKHN0YXQoZmlsZW5hbWUsICZzdGF0YnVmKTwwKSB7CisgICAgTGliY0Vycm9yKCJzdGF0IGluIGxvYWRBdXRoS2V5Iik7CisgICAgcmV0dXJuIC0xOworICB9CisKKyAgaWYgKHN0YXRidWYuc3Rfc2l6ZT09MCkgeworICAgIGJybGFwaV9lcnJubyA9IEJSTEFQSV9FUlJPUl9FTVBUWUtFWTsKKyAgICBicmxhcGlfZXJyZnVuID0gImJybGFwaV9sYXVkQXV0aEtleSI7CisgICAgcmV0dXJuIC0xOworICB9CisKKyAgc3RzaXplID0gTUlOKHN0YXRidWYuc3Rfc2l6ZSwgQlJMQVBJX01BWFBBQ0tFVFNJWkUtMipzaXplb2YodWludDMyX3QpKTsKKworICBpZiAoKGZkID0gb3BlbihmaWxlbmFtZSwgT19SRE9OTFkpKSA8MCkgeworICAgIExpYmNFcnJvcigib3BlbiBpbiBsb2FkQXV0aEtleSIpOworICAgIHJldHVybiAtMTsKKyAgfQorCisgICphdXRobGVuZ3RoID0gYnJsYXBpX3JlYWRGaWxlKAorI2lmZGVmIF9fTUlOR1czMl9fCisJCSAgKEhBTkRMRSkgZ2V0X29zZmhhbmRsZShmZCksCisjZWxzZSAvKiBfX01JTkdXMzJfXyAqLworCQkgIGZkLAorI2VuZGlmIC8qIF9fTUlOR1czMl9fICovCisJCSAgYXV0aCwgc3RzaXplLCAxKTsKKworICBpZiAoKmF1dGhsZW5ndGghPShzaXplX3Qpc3RzaXplKSB7CisgICAgTGliY0Vycm9yKCJyZWFkIGluIGxvYWRBdXRoS2V5Iik7CisgICAgY2xvc2UoZmQpOworICAgIHJldHVybiAtMTsKKyAgfQorCisgIGNsb3NlKGZkKTsKKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjaGFyICoKK2ludFRvU3RyaW5nIChpbnQ2NF90IHZhbHVlKSB7CisgIGNoYXIgYnVmZmVyWzBYMjBdOworICBzbnByaW50ZihidWZmZXIsIHNpemVvZihidWZmZXIpLCAiJSJQUklkNjQsIHZhbHVlKTsKKyAgcmV0dXJuIHN0cmR1cChidWZmZXIpOworfQorCisjZGVmaW5lIExPQ0FMSE9TVF9BRERSRVNTX0lQVjQgIjEyNy4wLjAuMSIKKyNkZWZpbmUgTE9DQUxIT1NUX0FERFJFU1NfSVBWNiAiOjoxIgorCitzdGF0aWMgaW50Citpc1BvcnROdW1iZXIgKGNvbnN0IGNoYXIgKm51bWJlciwgdWludDE2X3QgKnBvcnQpIHsKKyAgaWYgKCFudW1iZXIpIHJldHVybiAwOworICBpZiAoKm51bWJlciA8ICcwJykgcmV0dXJuIDA7CisgIGlmICgqbnVtYmVyID4gJzknKSByZXR1cm4gMDsKKworICBjaGFyICplbmQ7CisgIGxvbmcgaW50IHZhbHVlID0gc3RydG9sKG51bWJlciwgJmVuZCwgMTApOworICBpZiAoKmVuZCkgcmV0dXJuIDA7CisKKyAgaWYgKHZhbHVlIDwgMCkgcmV0dXJuIDA7CisgIGlmICh2YWx1ZSA+IChVSU5UMTZfTUFYIC0gQlJMQVBJX1NPQ0tFVFBPUlROVU0pKSByZXR1cm4gMDsKKworICBpZiAocG9ydCkgKnBvcnQgPSB2YWx1ZSArIEJSTEFQSV9TT0NLRVRQT1JUTlVNOworICByZXR1cm4gMTsKK30KKworLyogRnVuY3Rpb246IGJybGFwaV9leHBhbmRIb3N0CisgKiBzcGxpdHMgaG9zdCBpbnRvIGhvc3QgJiBwb3J0ICovCitzdGF0aWMgaW50IEJSTEFQSShleHBhbmRIb3N0KShjb25zdCBjaGFyICpob3N0QW5kUG9ydCwgY2hhciAqKmhvc3QsIGNoYXIgKipwb3J0KSB7CisgIGNvbnN0IGNoYXIgKmM7CisgIGlmICghaG9zdEFuZFBvcnQgfHwgISpob3N0QW5kUG9ydCkgeworI2lmIGRlZmluZWQoUEZfTE9DQUwpCisgICAgKmhvc3QgPSBOVUxMOworICAgICpwb3J0ID0gc3RyZHVwKCIwIik7CisgICAgcmV0dXJuIFBGX0xPQ0FMOworI2Vsc2UgLyogUEZfTE9DQUwgKi8KKyAgICAqaG9zdCA9IHN0cmR1cChMT0NBTEhPU1RfQUREUkVTU19JUFY0KTsKKyAgICAqcG9ydCA9IHN0cmR1cChCUkxBUElfU09DS0VUUE9SVCk7CisgICAgcmV0dXJuIFBGX1VOU1BFQzsKKyNlbmRpZiAvKiBQRl9MT0NBTCAqLworICB9IGVsc2UgaWYgKChjID0gc3RycmNocihob3N0QW5kUG9ydCwnOicpKSkgeworICAgIGlmIChjICE9IGhvc3RBbmRQb3J0KSB7CisgICAgICB1aW50MTZfdCBwb3J0aSA9IEJSTEFQSV9TT0NLRVRQT1JUTlVNOworICAgICAgaXNQb3J0TnVtYmVyKGMrMSwgJnBvcnRpKTsKKyAgICAgICpob3N0ID0gbWFsbG9jKGMtaG9zdEFuZFBvcnQrMSk7CisgICAgICBtZW1jcHkoKmhvc3QsIGhvc3RBbmRQb3J0LCBjLWhvc3RBbmRQb3J0KTsKKyAgICAgICgqaG9zdClbYy1ob3N0QW5kUG9ydF0gPSAwOworICAgICAgKnBvcnQgPSBpbnRUb1N0cmluZyhwb3J0aSk7CisgICAgICByZXR1cm4gUEZfVU5TUEVDOworICAgIH0gZWxzZSB7CisjaWYgZGVmaW5lZChQRl9MT0NBTCkKKyAgICAgICpob3N0ID0gTlVMTDsKKyAgICAgICpwb3J0ID0gc3RyZHVwKGMrMSk7CisgICAgICByZXR1cm4gUEZfTE9DQUw7CisjZWxzZSAvKiBQRl9MT0NBTCAqLworICAgICAgdWludDE2X3QgcG9ydGkgPSBCUkxBUElfU09DS0VUUE9SVE5VTTsKKyAgICAgIGlzUG9ydE51bWJlcihjKzEsICZwb3J0aSk7CisgICAgICAqaG9zdCA9IHN0cmR1cChMT0NBTEhPU1RfQUREUkVTU19JUFY0KTsKKyAgICAgICpwb3J0ID0gaW50VG9TdHJpbmcocG9ydGkpOworICAgICAgcmV0dXJuIFBGX1VOU1BFQzsKKyNlbmRpZiAvKiBQRl9MT0NBTCAqLworICAgIH0KKyAgfSBlbHNlIHsKKyAgICAqaG9zdCA9IHN0cmR1cChob3N0QW5kUG9ydCk7CisgICAgKnBvcnQgPSBzdHJkdXAoQlJMQVBJX1NPQ0tFVFBPUlQpOworICAgIHJldHVybiBQRl9VTlNQRUM7CisgIH0KK30KKwordHlwZWRlZiBzdHJ1Y3QgeworICBicmxhcGlfcGFja2V0VHlwZV90IHR5cGU7CisgIGNvbnN0IGNoYXIgKm5hbWU7Cit9IGJybGFwaV9wYWNrZXRUeXBlRW50cnlfdDsKKworc3RhdGljIGNvbnN0IGJybGFwaV9wYWNrZXRUeXBlRW50cnlfdCBicmxhcGlfcGFja2V0VHlwZVRhYmxlW10gPSB7CisgIHsgQlJMQVBJX1BBQ0tFVF9WRVJTSU9OLCAiVmVyc2lvbiIgfSwKKyAgeyBCUkxBUElfUEFDS0VUX0FVVEgsICJBdXRoIiB9LAorICB7IEJSTEFQSV9QQUNLRVRfR0VURFJJVkVSTkFNRSwgIkdldERyaXZlck5hbWUiIH0sCisgIHsgQlJMQVBJX1BBQ0tFVF9HRVRESVNQTEFZU0laRSwgIkdldERpc3BsYXlTaXplIiB9LAorICB7IEJSTEFQSV9QQUNLRVRfRU5URVJUVFlNT0RFLCAiRW50ZXJUdHlNb2RlIiB9LAorICB7IEJSTEFQSV9QQUNLRVRfU0VURk9DVVMsICJTZXRGb2N1cyIgfSwKKyAgeyBCUkxBUElfUEFDS0VUX0xFQVZFVFRZTU9ERSwgIkxlYXZlVHR5TW9kZSIgfSwKKyAgeyBCUkxBUElfUEFDS0VUX0tFWSwgIktleSIgfSwKKyAgeyBCUkxBUElfUEFDS0VUX0lHTk9SRUtFWVJBTkdFUywgIklnbm9yZUtleVJhbmdlcyIgfSwKKyAgeyBCUkxBUElfUEFDS0VUX0FDQ0VQVEtFWVJBTkdFUywgIkFjY2VwdEtleVJhbmdlcyIgfSwKKyAgeyBCUkxBUElfUEFDS0VUX1dSSVRFLCAiV3JpdGUiIH0sCisgIHsgQlJMQVBJX1BBQ0tFVF9FTlRFUlJBV01PREUsICJFbnRlclJhd01vZGUiIH0sCisgIHsgQlJMQVBJX1BBQ0tFVF9MRUFWRVJBV01PREUsICJMZWF2ZVJhd01vZGUiIH0sCisgIHsgQlJMQVBJX1BBQ0tFVF9QQUNLRVQsICJQYWNrZXQiIH0sCisgIHsgQlJMQVBJX1BBQ0tFVF9TVVNQRU5ERFJJVkVSLCAiU3VzcGVuZERyaXZlciIgfSwKKyAgeyBCUkxBUElfUEFDS0VUX1JFU1VNRURSSVZFUiwgIlJlc3VtZURyaXZlciIgfSwKKyAgeyBCUkxBUElfUEFDS0VUX1BBUkFNX1ZBTFVFLCAiUGFyYW1ldGVyVmFsdWUiIH0sCisgIHsgQlJMQVBJX1BBQ0tFVF9QQVJBTV9SRVFVRVNULCAiUGFyYW1ldGVyUmVxdWVzdCIgfSwKKyAgeyBCUkxBUElfUEFDS0VUX1NZTkNIUk9OSVpFLCAiU3luY2hyb25pemUiIH0sCisgIHsgQlJMQVBJX1BBQ0tFVF9BQ0ssICJBY2siIH0sCisgIHsgQlJMQVBJX1BBQ0tFVF9FUlJPUiwgIkVycm9yIiB9LAorICB7IEJSTEFQSV9QQUNLRVRfRVhDRVBUSU9OLCAiRXhjZXB0aW9uIiB9LAorICB7IDAsIE5VTEwgfQorfTsKKworY29uc3QgY2hhciAqIEJSTEFQSV9TVERDQUxMIEJSTEFQSShnZXRQYWNrZXRUeXBlTmFtZSkoYnJsYXBpX3BhY2tldFR5cGVfdCB0eXBlKQoreworICBjb25zdCBicmxhcGlfcGFja2V0VHlwZUVudHJ5X3QgKnA7CisgIGZvciAocCA9IGJybGFwaV9wYWNrZXRUeXBlVGFibGU7IHAtPnR5cGU7IHArKykKKyAgICBpZiAodHlwZT09cC0+dHlwZSkgcmV0dXJuIHAtPm5hbWU7CisgIHJldHVybiAiVW5rbm93biI7Cit9CisKK3N0YXRpYyBpbnQKK0JSTEFQSShnZXRBcmd1bWVudFdpZHRoKSAoYnJsYXBpX2tleUNvZGVfdCBrZXlDb2RlKSB7CisgIGJybGFwaV9rZXlDb2RlX3QgY29kZSA9IGtleUNvZGUgJiBCUkxBUElfS0VZX0NPREVfTUFTSzsKKworICBzd2l0Y2ggKGtleUNvZGUgJiBCUkxBUElfS0VZX1RZUEVfTUFTSykgeworICAgIGRlZmF1bHQ6IGJyZWFrOworCisgICAgY2FzZSBCUkxBUElfS0VZX1RZUEVfU1lNOgorICAgICAgc3dpdGNoIChjb2RlICYgMFhGRjAwMDAwMFUpIHsKKyAgICAgICAgZGVmYXVsdDogYnJlYWs7CisKKyAgICAgICAgY2FzZSAwWDAwMDAwMDAwVToKKyAgICAgICAgICBzd2l0Y2ggKGNvZGUgJiAwWEZGMDAwMFUpIHsKKyAgICAgICAgICAgIGRlZmF1bHQ6IGJyZWFrOworICAgICAgICAgICAgY2FzZSAwWDAwMDAwMFU6IHJldHVybiA4OworICAgICAgICAgIH0KKyAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIDBYMDEwMDAwMDBVOiByZXR1cm4gMjQ7CisgICAgICB9CisgICAgICBicmVhazsKKworICAgIGNhc2UgQlJMQVBJX0tFWV9UWVBFX0NNRDoKKyAgICAgIHN3aXRjaCAoY29kZSAmIEJSTEFQSV9LRVlfQ01EX0JMS19NQVNLKSB7CisgICAgICAgIGRlZmF1bHQ6IHJldHVybiAxNjsKKyAgICAgICAgY2FzZSAwOiByZXR1cm4gMDsKKyAgICAgIH0KKyAgICAgIGJyZWFrOworICB9CisKKyAgYnJsYXBpX2Vycm5vID0gQlJMQVBJX0VSUk9SX0lOVkFMSURfUEFSQU1FVEVSOworICByZXR1cm4gLTE7Cit9CisKKy8qIEZ1bmN0aW9uIGJybGFwaV91aW50MzJUb0tleUNvZGUgKi8KKy8qIFRyYW5zbGF0ZSBrZXljb2RlcyBzdG9yZWQgaW4gYSBwYWNrZXQgdG8gYSBrZXljb2RlICovCitzdGF0aWMgYnJsYXBpX2tleUNvZGVfdAorQlJMQVBJKHBhY2tldFRvS2V5Q29kZSkodWludDMyX3QgdFsyXSkKK3sKKyAgcmV0dXJuICgoKGJybGFwaV9rZXlDb2RlX3QpbnRvaGwodFswXSkpIDw8IDMyKSB8IG50b2hsKHRbMV0pOworfQorCisvKiBGdW5jdGlvbiA6IGJybGFwaV9nZXRLZXlyYW5nZU1hc2sgKi8KKy8qIHJldHVybnMgdGhlIGtleUNvZGUgbWFzayBmb3IgYSBnaXZlbiByYW5nZSB0eXBlICovCitzdGF0aWMgaW50CitCUkxBUEkoZ2V0S2V5cmFuZ2VNYXNrKSAoYnJsYXBpX3JhbmdlVHlwZV90IHIsIGJybGFwaV9rZXlDb2RlX3QgY29kZSwgYnJsYXBpX2tleUNvZGVfdCAqbWFzaykKK3sKKyAgc3dpdGNoKHIpIHsKKyAgICBjYXNlIGJybGFwaV9yYW5nZVR5cGVfYWxsOgorICAgICAgKm1hc2sgPSBCUkxBUElfS0VZX01BWDsKKyAgICAgIHJldHVybiAwOworICAgIGNhc2UgYnJsYXBpX3JhbmdlVHlwZV90eXBlOgorICAgICAgKm1hc2sgPSBCUkxBUElfS0VZX0NPREVfTUFTS3xCUkxBUElfS0VZX0ZMQUdTX01BU0s7CisgICAgICByZXR1cm4gMDsKKyAgICBjYXNlIGJybGFwaV9yYW5nZVR5cGVfY29tbWFuZDogeworICAgICAgaW50IHdpZHRoID0gQlJMQVBJKGdldEFyZ3VtZW50V2lkdGgpKGNvZGUpOworICAgICAgaWYgKHdpZHRoID09IC0xKSByZXR1cm4gLTE7CisgICAgICAqbWFzayA9ICgoMSA8PCB3aWR0aCkgLSAxKSB8IEJSTEFQSV9LRVlfRkxBR1NfTUFTSzsKKyAgICAgIHJldHVybiAwOworICAgIH0KKyAgICBjYXNlIGJybGFwaV9yYW5nZVR5cGVfa2V5OgorICAgICAgKm1hc2sgPSBCUkxBUElfS0VZX0ZMQUdTX01BU0s7CisgICAgICByZXR1cm4gMDsKKyAgICBjYXNlIGJybGFwaV9yYW5nZVR5cGVfY29kZToKKyAgICAgICptYXNrID0gMDsKKyAgICAgIHJldHVybiAwOworICB9CisgIGJybGFwaV9lcnJubyA9IEJSTEFQSV9FUlJPUl9JTlZBTElEX1BBUkFNRVRFUjsKKyAgcmV0dXJuIC0xOworfQorCitzdGF0aWMgY2hhciAqCitCUkxBUEkoZ2V0S2V5RmlsZSkoY29uc3QgY2hhciAqYXV0aCkKK3sKKyAgY29uc3QgY2hhciAqcGF0aDsKKyAgY2hhciAqcmV0LCAqZGVsaW07CisgIGlmICghc3RybmNtcChhdXRoLCJrZXlmaWxlOiIsOCkpCisgICAgcGF0aD1hdXRoKzg7CisgIGVsc2UgeworICAgIHBhdGg9c3Ryc3RyKGF1dGgsIitrZXlmaWxlOiIpOworICAgIGlmIChwYXRoKSBwYXRoKz05OworICAgIGVsc2UgcGF0aD1hdXRoOworICB9CisgIHJldD1zdHJkdXAocGF0aCk7CisgIGRlbGltPXN0cmNocihyZXQsJysnKTsKKyAgaWYgKGRlbGltKQorICAgICpkZWxpbSA9IDA7CisgIHJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBjb25zdCBicmxhcGlfcGFyYW1fcHJvcGVydGllc190IGJybGFwaV9wYXJhbV9wcm9wZXJ0aWVzW0JSTEFQSV9QQVJBTV9DT1VOVF0gPSB7CisvL0Nvbm5lY3Rpb24gUGFyYW1ldGVycworICBbQlJMQVBJX1BBUkFNX1NFUlZFUl9WRVJTSU9OXSA9IHsKKyAgICAudHlwZSA9IEJSTEFQSV9QQVJBTV9UWVBFX1VJTlQzMiwKKyAgICAuY2FuUmVhZCA9IDEsCisgICAgLmNhbldhdGNoID0gMSwKKyAgfSwKKworICBbQlJMQVBJX1BBUkFNX0NMSUVOVF9QUklPUklUWV0gPSB7CisgICAgLnR5cGUgPSBCUkxBUElfUEFSQU1fVFlQRV9VSU5UMzIsCisgICAgLmNhblJlYWQgPSAxLAorICAgIC5jYW5XYXRjaCA9IDEsCisgICAgLmNhbldyaXRlID0gMSwKKyAgfSwKKworLy9EZXZpY2UgUGFyYW1ldGVycworICBbQlJMQVBJX1BBUkFNX0RSSVZFUl9OQU1FXSA9IHsKKyAgICAudHlwZSA9IEJSTEFQSV9QQVJBTV9UWVBFX1NUUklORywKKyAgICAuY2FuUmVhZCA9IDEsCisgICAgLmNhbldhdGNoID0gMSwKKyAgfSwKKworICBbQlJMQVBJX1BBUkFNX0RSSVZFUl9DT0RFXSA9IHsKKyAgICAudHlwZSA9IEJSTEFQSV9QQVJBTV9UWVBFX1NUUklORywKKyAgICAuY2FuUmVhZCA9IDEsCisgICAgLmNhbldhdGNoID0gMSwKKyAgfSwKKworICBbQlJMQVBJX1BBUkFNX0RSSVZFUl9WRVJTSU9OXSA9IHsKKyAgICAudHlwZSA9IEJSTEFQSV9QQVJBTV9UWVBFX1NUUklORywKKyAgICAuY2FuUmVhZCA9IDEsCisgICAgLmNhbldhdGNoID0gMSwKKyAgfSwKKworICBbQlJMQVBJX1BBUkFNX0RFVklDRV9NT0RFTF0gPSB7CisgICAgLnR5cGUgPSBCUkxBUElfUEFSQU1fVFlQRV9TVFJJTkcsCisgICAgLmNhblJlYWQgPSAxLAorICAgIC5jYW5XYXRjaCA9IDEsCisgIH0sCisKKyAgW0JSTEFQSV9QQVJBTV9ERVZJQ0VfQ0VMTF9TSVpFXSA9IHsKKyAgICAudHlwZSA9IEJSTEFQSV9QQVJBTV9UWVBFX1VJTlQ4LAorICAgIC5jYW5SZWFkID0gMSwKKyAgICAuY2FuV2F0Y2ggPSAxLAorICB9LAorCisgIFtCUkxBUElfUEFSQU1fRElTUExBWV9TSVpFXSA9IHsKKyAgICAudHlwZSA9IEJSTEFQSV9QQVJBTV9UWVBFX1VJTlQzMiwKKyAgICAuY2FuUmVhZCA9IDEsCisgICAgLmNhbldhdGNoID0gMSwKKyAgICAuaXNBcnJheSA9IDEsCisgICAgLmFycmF5U2l6ZSA9IDIsCisgIH0sCisKKyAgW0JSTEFQSV9QQVJBTV9ERVZJQ0VfSURFTlRJRklFUl0gPSB7CisgICAgLnR5cGUgPSBCUkxBUElfUEFSQU1fVFlQRV9TVFJJTkcsCisgICAgLmNhblJlYWQgPSAxLAorICAgIC5jYW5XYXRjaCA9IDEsCisgIH0sCisKKyAgW0JSTEFQSV9QQVJBTV9ERVZJQ0VfU1BFRURdID0geworICAgIC50eXBlID0gQlJMQVBJX1BBUkFNX1RZUEVfVUlOVDMyLAorICAgIC5jYW5SZWFkID0gMSwKKyAgICAuY2FuV2F0Y2ggPSAxLAorICB9LAorCisgIFtCUkxBUElfUEFSQU1fREVWSUNFX09OTElORV0gPSB7CisgICAgLnR5cGUgPSBCUkxBUElfUEFSQU1fVFlQRV9CT09MRUFOLAorICAgIC5jYW5SZWFkID0gMSwKKyAgICAuY2FuV2F0Y2ggPSAxLAorICB9LAorCisvL0lucHV0IFBhcmFtZXRlcnMKKyAgW0JSTEFQSV9QQVJBTV9SRVRBSU5fRE9UU10gPSB7CisgICAgLnR5cGUgPSBCUkxBUElfUEFSQU1fVFlQRV9CT09MRUFOLAorICAgIC5jYW5SZWFkID0gMSwKKyAgICAuY2FuV2F0Y2ggPSAxLAorICAgIC5jYW5Xcml0ZSA9IDEsCisgIH0sCisKKy8vQnJhaWxsZSBSZW5kZXJpbmcgUGFyYW1ldGVycworICBbQlJMQVBJX1BBUkFNX0NPTVBVVEVSX0JSQUlMTEVfQ0VMTF9TSVpFXSA9IHsKKyAgICAudHlwZSA9IEJSTEFQSV9QQVJBTV9UWVBFX1VJTlQ4LAorICAgIC5jYW5SZWFkID0gMSwKKyAgICAuY2FuV2F0Y2ggPSAxLAorICAgIC5jYW5Xcml0ZSA9IDEsCisgIH0sCisKKyAgW0JSTEFQSV9QQVJBTV9MSVRFUkFSWV9CUkFJTExFXSA9IHsKKyAgICAudHlwZSA9IEJSTEFQSV9QQVJBTV9UWVBFX0JPT0xFQU4sCisgICAgLmNhblJlYWQgPSAxLAorICAgIC5jYW5XYXRjaCA9IDEsCisgICAgLmNhbldyaXRlID0gMSwKKyAgfSwKKworICBbQlJMQVBJX1BBUkFNX0NVUlNPUl9ET1RTXSA9IHsKKyAgICAudHlwZSA9IEJSTEFQSV9QQVJBTV9UWVBFX1VJTlQ4LAorICAgIC5jYW5SZWFkID0gMSwKKyAgICAuY2FuV2F0Y2ggPSAxLAorICAgIC5jYW5Xcml0ZSA9IDEsCisgIH0sCisKKyAgW0JSTEFQSV9QQVJBTV9DVVJTT1JfQkxJTktfUEVSSU9EXSA9IHsKKyAgICAudHlwZSA9IEJSTEFQSV9QQVJBTV9UWVBFX1VJTlQzMiwKKyAgICAuY2FuUmVhZCA9IDEsCisgICAgLmNhbldhdGNoID0gMSwKKyAgICAuY2FuV3JpdGUgPSAxLAorICB9LAorCisgIFtCUkxBUElfUEFSQU1fQ1VSU09SX0JMSU5LX1BFUkNFTlRBR0VdID0geworICAgIC50eXBlID0gQlJMQVBJX1BBUkFNX1RZUEVfVUlOVDgsCisgICAgLmNhblJlYWQgPSAxLAorICAgIC5jYW5XYXRjaCA9IDEsCisgICAgLmNhbldyaXRlID0gMSwKKyAgfSwKKworICBbQlJMQVBJX1BBUkFNX1JFTkRFUkVEX0NFTExTXSA9IHsKKyAgICAudHlwZSA9IEJSTEFQSV9QQVJBTV9UWVBFX1VJTlQ4LAorICAgIC5jYW5SZWFkID0gMSwKKyAgICAuY2FuV2F0Y2ggPSAxLAorICAgIC5pc0FycmF5ID0gMSwKKyAgfSwKKworLy9OYXZpZ2F0aW9uIFBhcmFtZXRlcnMKKyAgW0JSTEFQSV9QQVJBTV9TS0lQX0lERU5USUNBTF9MSU5FU10gPSB7CisgICAgLnR5cGUgPSBCUkxBUElfUEFSQU1fVFlQRV9CT09MRUFOLAorICAgIC5jYW5SZWFkID0gMSwKKyAgICAuY2FuV2F0Y2ggPSAxLAorICAgIC5jYW5Xcml0ZSA9IDEsCisgIH0sCisKKyAgW0JSTEFQSV9QQVJBTV9BVURJQkxFX0FMRVJUU10gPSB7CisgICAgLnR5cGUgPSBCUkxBUElfUEFSQU1fVFlQRV9CT09MRUFOLAorICAgIC5jYW5SZWFkID0gMSwKKyAgICAuY2FuV2F0Y2ggPSAxLAorICAgIC5jYW5Xcml0ZSA9IDEsCisgIH0sCisKKy8vQ2xpcGJvYXJkIFBhcmFtZXRlcnMKKyAgW0JSTEFQSV9QQVJBTV9DTElQQk9BUkRfQ09OVEVOVF0gPSB7CisgICAgLnR5cGUgPSBCUkxBUElfUEFSQU1fVFlQRV9TVFJJTkcsCisgICAgLmNhblJlYWQgPSAxLAorICAgIC5jYW5XYXRjaCA9IDEsCisgICAgLmNhbldyaXRlID0gMSwKKyAgfSwKKworLy9UVFkgTW9kZSBQYXJhbWV0ZXJzCisgIFtCUkxBUElfUEFSQU1fQk9VTkRfQ09NTUFORF9LRVlDT0RFU10gPSB7CisgICAgLnR5cGUgPSBCUkxBUElfUEFSQU1fVFlQRV9LRVlDT0RFLAorICAgIC5jYW5SZWFkID0gMSwKKyAgICAuY2FuV2F0Y2ggPSAxLAorICAgIC5pc0FycmF5ID0gMSwKKyAgfSwKKworICBbQlJMQVBJX1BBUkFNX0NPTU1BTkRfS0VZQ09ERV9OQU1FXSA9IHsKKyAgICAudHlwZSA9IEJSTEFQSV9QQVJBTV9UWVBFX1NUUklORywKKyAgICAuY2FuUmVhZCA9IDEsCisgICAgLmhhc1N1YnBhcmFtID0gMSwKKyAgfSwKKworICBbQlJMQVBJX1BBUkFNX0NPTU1BTkRfS0VZQ09ERV9TVU1NQVJZXSA9IHsKKyAgICAudHlwZSA9IEJSTEFQSV9QQVJBTV9UWVBFX1NUUklORywKKyAgICAuY2FuUmVhZCA9IDEsCisgICAgLmhhc1N1YnBhcmFtID0gMSwKKyAgfSwKKworICBbQlJMQVBJX1BBUkFNX0RFRklORURfRFJJVkVSX0tFWUNPREVTXSA9IHsKKyAgICAudHlwZSA9IEJSTEFQSV9QQVJBTV9UWVBFX0tFWUNPREUsCisgICAgLmNhblJlYWQgPSAxLAorICAgIC5jYW5XYXRjaCA9IDEsCisgICAgLmlzQXJyYXkgPSAxLAorICB9LAorCisgIFtCUkxBUElfUEFSQU1fRFJJVkVSX0tFWUNPREVfTkFNRV0gPSB7CisgICAgLnR5cGUgPSBCUkxBUElfUEFSQU1fVFlQRV9TVFJJTkcsCisgICAgLmNhblJlYWQgPSAxLAorICAgIC5oYXNTdWJwYXJhbSA9IDEsCisgIH0sCisKKyAgW0JSTEFQSV9QQVJBTV9EUklWRVJfS0VZQ09ERV9TVU1NQVJZXSA9IHsKKyAgICAudHlwZSA9IEJSTEFQSV9QQVJBTV9UWVBFX1NUUklORywKKyAgICAuY2FuUmVhZCA9IDEsCisgICAgLmhhc1N1YnBhcmFtID0gMSwKKyAgfSwKKworLy9CcmFpbGxlIFRyYW5zbGF0aW9uIFBhcmFtZXRlcnMKKyAgW0JSTEFQSV9QQVJBTV9DT01QVVRFUl9CUkFJTExFX1JPV1NfTUFTS10gPSB7CisgICAgLnR5cGUgPSBCUkxBUElfUEFSQU1fVFlQRV9VSU5UOCwKKyAgICAuY2FuUmVhZCA9IDEsCisgICAgLmlzQXJyYXkgPSAxLAorICAgIC5hcnJheVNpemUgPSAoMFgxMEZGRkYgKyAxKSAvIDBYMTAwIC8gOCwKKyAgfSwKKworICBbQlJMQVBJX1BBUkFNX0NPTVBVVEVSX0JSQUlMTEVfUk9XX0NFTExTXSA9IHsKKyAgICAudHlwZSA9IEJSTEFQSV9QQVJBTV9UWVBFX1VJTlQ4LAorICAgIC5jYW5SZWFkID0gMSwKKyAgICAuaXNBcnJheSA9IDEsCisgICAgLmFycmF5U2l6ZSA9IDBYMTAwICsgKDBYMTAwIC8gOCksCisgICAgLmhhc1N1YnBhcmFtID0gMSwKKyAgfSwKKworICBbQlJMQVBJX1BBUkFNX0NPTVBVVEVSX0JSQUlMTEVfVEFCTEVdID0geworICAgIC50eXBlID0gQlJMQVBJX1BBUkFNX1RZUEVfU1RSSU5HLAorICAgIC5jYW5SZWFkID0gMSwKKyAgICAuY2FuV2F0Y2ggPSAxLAorICAgIC5jYW5Xcml0ZSA9IDEsCisgIH0sCisKKyAgW0JSTEFQSV9QQVJBTV9MSVRFUkFSWV9CUkFJTExFX1RBQkxFXSA9IHsKKyAgICAudHlwZSA9IEJSTEFQSV9QQVJBTV9UWVBFX1NUUklORywKKyAgICAuY2FuUmVhZCA9IDEsCisgICAgLmNhbldhdGNoID0gMSwKKyAgICAuY2FuV3JpdGUgPSAxLAorICB9LAorCisgIFtCUkxBUElfUEFSQU1fTUVTU0FHRV9MT0NBTEVdID0geworICAgIC50eXBlID0gQlJMQVBJX1BBUkFNX1RZUEVfU1RSSU5HLAorICAgIC5jYW5SZWFkID0gMSwKKyAgICAuY2FuV2F0Y2ggPSAxLAorICAgIC5jYW5Xcml0ZSA9IDEsCisgIH0sCit9OworCitjb25zdCBicmxhcGlfcGFyYW1fcHJvcGVydGllc190ICpicmxhcGlfZ2V0UGFyYW1ldGVyUHJvcGVydGllcyhicmxhcGlfcGFyYW1fdCBwYXJhbWV0ZXIpIHsKKyAgaWYgKHBhcmFtZXRlciA+PSAoc2l6ZW9mKGJybGFwaV9wYXJhbV9wcm9wZXJ0aWVzKSAvIHNpemVvZigqYnJsYXBpX3BhcmFtX3Byb3BlcnRpZXMpKSkKKyAgICByZXR1cm4gTlVMTDsKKworICByZXR1cm4gJmJybGFwaV9wYXJhbV9wcm9wZXJ0aWVzW3BhcmFtZXRlcl07Cit9CisKK3R5cGVkZWYgdm9pZCBJbnRlZ2VyQ29udmVydGVyICh2b2lkICp2KTsKKworc3RhdGljIHZvaWQgY29udmVydEludGVnZXJfaHRvbjE2ICh2b2lkICp2KSB7CisgIHVpbnQxNl90ICp1ID0gdjsKKyAgKnUgPSBodG9ucygqdSk7Cit9CisKK3N0YXRpYyB2b2lkIGNvbnZlcnRJbnRlZ2VyX250b2gxNiAodm9pZCAqdikgeworICB1aW50MTZfdCAqdSA9IHY7CisgICp1ID0gbnRvaHMoKnUpOworfQorCitzdGF0aWMgdm9pZCBjb252ZXJ0SW50ZWdlcl9odG9uMzIgKHZvaWQgKnYpIHsKKyAgdWludDMyX3QgKnUgPSB2OworICAqdSA9IGh0b25sKCp1KTsKK30KKworc3RhdGljIHZvaWQgY29udmVydEludGVnZXJfbnRvaDMyICh2b2lkICp2KSB7CisgIHVpbnQzMl90ICp1ID0gdjsKKyAgKnUgPSBudG9obCgqdSk7Cit9CisKKyNkZWZpbmUgVUlOVDY0X1NISUZUICgoc2l6ZW9mKHVpbnQ2NF90KSAvIDIpICogOCkKKyNkZWZpbmUgVUlOVDY0X0xPVyAoKFVJTlQ2NF9DKDEpIDw8IFVJTlQ2NF9TSElGVCkgLSAxKQorCitzdGF0aWMgdm9pZCBjb252ZXJ0SW50ZWdlcl9odG9uNjQgKHZvaWQgKnYpIHsKKyNpZm5kZWYgV09SRFNfQklHRU5ESUFOCisgIHVpbnQ2NF90ICp1ID0gdjsKKyAgdWludDMyX3QgbG93ID0gKnUgJiBVSU5UNjRfTE9XOworICB1aW50MzJfdCBoaWdoID0gKnUgPj4gVUlOVDY0X1NISUZUOworICAqdSA9ICgodWludDY0X3QpaHRvbmwobG93KSA8PCBVSU5UNjRfU0hJRlQpIHwgaHRvbmwoaGlnaCk7CisjZW5kaWYgLyogV09SRFNfQklHRU5ESUFOICovCit9CisKK3N0YXRpYyB2b2lkIGNvbnZlcnRJbnRlZ2VyX250b2g2NCAodm9pZCAqdikgeworI2lmbmRlZiBXT1JEU19CSUdFTkRJQU4KKyAgdWludDY0X3QgKnUgPSB2OworICB1aW50MzJfdCBsb3cgPSAqdSAmIFVJTlQ2NF9MT1c7CisgIHVpbnQzMl90IGhpZ2ggPSAqdSA+PiBVSU5UNjRfU0hJRlQ7CisgICp1ID0gKCh1aW50NjRfdCludG9obChsb3cpIDw8IFVJTlQ2NF9TSElGVCkgfCBudG9obChoaWdoKTsKKyNlbmRpZiAvKiBXT1JEU19CSUdFTkRJQU4gKi8KK30KKworc3RhdGljIHZvaWQgY29udmVydEludGVnZXJzICh2b2lkICpkYXRhLCBzaXplX3QgbGVuZ3RoLCBzaXplX3Qgc2l6ZSwgSW50ZWdlckNvbnZlcnRlciAqY29udmVydCkgeworICBsZW5ndGggLz0gc2l6ZTsKKyAgbGVuZ3RoICo9IHNpemU7CisgIHZvaWQgKmVuZCA9IGRhdGEgKyBsZW5ndGg7CisKKyAgd2hpbGUgKGRhdGEgPCBlbmQpIHsKKyAgICBjb252ZXJ0KGRhdGEpOworICAgIGRhdGEgKz0gc2l6ZTsKKyAgfQorfQorCisvKiBGdW5jdGlvbjogX2JybGFwaV9odG9uUGFyYW1ldGVyICovCisvKiBzd2FwIHVpbnQzMiB2YWx1ZXMgb2YgdGhlIHBhcmFtZXRlciBmcm9tIGhvc3QgdG8gbmV0d29yayAqLwordm9pZCBfYnJsYXBpX2h0b25QYXJhbWV0ZXIoYnJsYXBpX3BhcmFtX3QgcGFyYW1ldGVyLCBicmxhcGlfcGFyYW1WYWx1ZVBhY2tldF90ICp2YWx1ZSwgc2l6ZV90IGxlbikKK3sKKyAgY29uc3QgYnJsYXBpX3BhcmFtX3Byb3BlcnRpZXNfdCAqcHJvcGVydGllcyA9IGJybGFwaV9nZXRQYXJhbWV0ZXJQcm9wZXJ0aWVzKHBhcmFtZXRlcik7CisKKyAgaWYgKHByb3BlcnRpZXMpIHsKKyAgICB2b2lkICpwID0gIHZhbHVlLT5kYXRhOworCisgICAgc3dpdGNoIChwcm9wZXJ0aWVzLT50eXBlKSB7CisgICAgICBjYXNlIEJSTEFQSV9QQVJBTV9UWVBFX1VJTlQxNjoKKyAgICAgICAgY29udmVydEludGVnZXJzKHAsIGxlbiwgc2l6ZW9mKHVpbnQxNl90KSwgY29udmVydEludGVnZXJfaHRvbjE2KTsKKyAgICAgICAgcmV0dXJuOworCisgICAgICBjYXNlIEJSTEFQSV9QQVJBTV9UWVBFX1VJTlQzMjoKKyAgICAgICAgY29udmVydEludGVnZXJzKHAsIGxlbiwgc2l6ZW9mKHVpbnQzMl90KSwgY29udmVydEludGVnZXJfaHRvbjMyKTsKKyAgICAgICAgcmV0dXJuOworCisgICAgICBjYXNlIEJSTEFQSV9QQVJBTV9UWVBFX1VJTlQ2NDoKKyAgICAgICAgY29udmVydEludGVnZXJzKHAsIGxlbiwgc2l6ZW9mKHVpbnQ2NF90KSwgY29udmVydEludGVnZXJfaHRvbjY0KTsKKyAgICAgICAgcmV0dXJuOworCisgICAgICBkZWZhdWx0OgorICAgICAgICAvKiBubyBjb252ZXJzaW9uIG5lZWRlZCAqLworICAgICAgICByZXR1cm47CisgICAgfQorICB9Cit9CisKKy8qIEZ1bmN0aW9uOiBfYnJsYXBpX250b2hQYXJhbWV0ZXIgKi8KKy8qIHN3YXAgdWludDMyIHZhbHVlcyBvZiB0aGUgcGFyYW1ldGVyIGZyb20gbmV0d29yayB0byBob3N0ICovCit2b2lkIF9icmxhcGlfbnRvaFBhcmFtZXRlcihicmxhcGlfcGFyYW1fdCBwYXJhbWV0ZXIsIGJybGFwaV9wYXJhbVZhbHVlUGFja2V0X3QgKnZhbHVlLCBzaXplX3QgbGVuKQoreworICBjb25zdCBicmxhcGlfcGFyYW1fcHJvcGVydGllc190ICpwcm9wZXJ0aWVzID0gYnJsYXBpX2dldFBhcmFtZXRlclByb3BlcnRpZXMocGFyYW1ldGVyKTsKKworICBpZiAocHJvcGVydGllcykgeworICAgIHZvaWQgKnAgPSAgdmFsdWUtPmRhdGE7CisKKyAgICBzd2l0Y2ggKHByb3BlcnRpZXMtPnR5cGUpIHsKKyAgICAgIGNhc2UgQlJMQVBJX1BBUkFNX1RZUEVfVUlOVDE2OgorICAgICAgICBjb252ZXJ0SW50ZWdlcnMocCwgbGVuLCBzaXplb2YodWludDE2X3QpLCBjb252ZXJ0SW50ZWdlcl9udG9oMTYpOworICAgICAgICByZXR1cm47CisKKyAgICAgIGNhc2UgQlJMQVBJX1BBUkFNX1RZUEVfVUlOVDMyOgorICAgICAgICBjb252ZXJ0SW50ZWdlcnMocCwgbGVuLCBzaXplb2YodWludDMyX3QpLCBjb252ZXJ0SW50ZWdlcl9udG9oMzIpOworICAgICAgICByZXR1cm47CisKKyAgICAgIGNhc2UgQlJMQVBJX1BBUkFNX1RZUEVfVUlOVDY0OgorICAgICAgICBjb252ZXJ0SW50ZWdlcnMocCwgbGVuLCBzaXplb2YodWludDY0X3QpLCBjb252ZXJ0SW50ZWdlcl9udG9oNjQpOworICAgICAgICByZXR1cm47CisKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIC8qIG5vIGNvbnZlcnNpb24gbmVlZGVkICovCisgICAgICAgIHJldHVybjsKKyAgICB9CisgIH0KK30KKwpkaWZmIC0tZ2l0IGEvUHJvZ3JhbXMvYnJsYXBpX2NvbnN0YW50cy5hd2sgYi9Qcm9ncmFtcy9icmxhcGlfY29uc3RhbnRzLmF3awpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNjFkOTEyCi0tLSAvZGV2L251bGwKKysrIGIvUHJvZ3JhbXMvYnJsYXBpX2NvbnN0YW50cy5hd2sKQEAgLTAsMCArMSw5MyBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorIyAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyMKKyMgQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorIworIyBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorIworIyBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisjIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyMgbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisjCisjIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK0JFR0lOIHsKKyAgd3JpdGVIZWFkZXJQcm9sb2d1ZSgiQlJMQVBJX0lOQ0xVREVEX0NPTlNUQU5UUyIsICJicmxhcGkuaCIpCisgIGJlZ2luRG94eWdlbkZpbGUoKQorICBwcmludCAiLyoqIFxcaW5ncm91cCBicmxhcGlfa2V5Y29kZXMiCisgIHByaW50ICIgKiBAeyAqLyIKKyAgcHJpbnQgIiIKK30KKworRU5EIHsKKyAgd3JpdGVCcmxhcGlEb3RzKCkKKyAgcHJpbnQgIi8qKiBAfSAqLyIKKyAgcHJpbnQgIiIKKyAgd3JpdGVIZWFkZXJFcGlsb2d1ZSgpCit9CisKK2Z1bmN0aW9uIGJybENvbW1hbmQobmFtZSwgc3ltYm9sLCB2YWx1ZSwgaGVscCkgeworICB3cml0ZU1hY3JvRGVmaW5pdGlvbigiQlJMQVBJX0tFWV9DTURfIiBuYW1lLCAiKEJSTEFQSV9LRVlfQ01EKDApICsgIiB2YWx1ZSAiKSIsIGhlbHApCit9CisKK2Z1bmN0aW9uIGJybEJsb2NrKG5hbWUsIHN5bWJvbCwgdmFsdWUsIGhlbHApIHsKKyAgaWYgKG5hbWUgPT0gIlBBU1NDSEFSIikgcmV0dXJuCisgIGlmIChuYW1lID09ICJQQVNTS0VZIikgcmV0dXJuCisKKyAgd3JpdGVNYWNyb0RlZmluaXRpb24oIkJSTEFQSV9LRVlfQ01EXyIgbmFtZSwgIkJSTEFQSV9LRVlfQ01EKCIgdmFsdWUgIikiLCBoZWxwKQorfQorCitmdW5jdGlvbiBicmxLZXkobmFtZSwgc3ltYm9sLCB2YWx1ZSwgaGVscCkgeworfQorCitmdW5jdGlvbiBicmxGbGFnKG5hbWUsIHN5bWJvbCwgdmFsdWUsIGhlbHApIHsKKyAgaWYgKHZhbHVlIH4gL14wW3hYXVswLTlhLWZBLUZdKzAwMDAkLykgeworICAgIHZhbHVlID0gc3Vic3RyKHZhbHVlLCAxLCBsZW5ndGgodmFsdWUpLTQpCisgICAgaWYgKG5hbWUgfiAvXklOUFVUXy8pIHsKKyAgICAgIG5hbWUgPSBzdWJzdHIobmFtZSwgNykKKyAgICB9IGVsc2UgeworICAgICAgdmFsdWUgPSB2YWx1ZSAiMDAiCisgICAgfQorICAgIHZhbHVlID0gIkJSTEFQSV9LRVlfRkxHKCIgdmFsdWUgIikiCisgIH0gZWxzZSBpZiAodmFsdWUgfiAvXlwoLykgeworICAgIGdzdWIoIkJSTF9GTEdfIiwgIkJSTEFQSV9LRVlfRkxHXyIsIHZhbHVlKQorICB9IGVsc2UgeworICAgIHJldHVybgorICB9CisgIHdyaXRlTWFjcm9EZWZpbml0aW9uKCJCUkxBUElfS0VZX0ZMR18iIG5hbWUsIHZhbHVlLCBoZWxwKQorfQorCitmdW5jdGlvbiBicmxEb3QobnVtYmVyLCBzeW1ib2wsIHZhbHVlLCBoZWxwKSB7CisgIHdyaXRlTWFjcm9EZWZpbml0aW9uKCJCUkxBUElfRE9UIiBudW1iZXIsIHZhbHVlLCBoZWxwKQorfQorCitmdW5jdGlvbiB3cml0ZUJybGFwaURvdHMoKSB7CisgIHByaW50ICIiCisgIHByaW50ICIvKiogSGVscGVyIG1hY3JvIHRvIGVhc2lseSBwcm9kdWNlIGJyYWlsbGUgcGF0dGVybnMgKi8iCisKKyAgYXJndW1lbnRzID0gIiIKKyAgYXJndW1lbnREZWxpbWl0ZXIgPSAiIgorICBleHByZXNzaW9uID0gIiIKKyAgc3ViZXhwcmVzc2lvbkRlbGltaXRlciA9ICIiCisKKyAgZm9yIChkb3ROdW1iZXI9MTsgZG90TnVtYmVyPD04OyArK2RvdE51bWJlcikgeworICAgIGFyZ3VtZW50TmFtZSA9ICJkb3QiIGRvdE51bWJlcgorCisgICAgYXJndW1lbnRzID0gYXJndW1lbnRzIGFyZ3VtZW50RGVsaW1pdGVyIGFyZ3VtZW50TmFtZQorICAgIGFyZ3VtZW50RGVsaW1pdGVyID0gIiwgIgorCisgICAgc3ViZXhwcmVzc2lvbiA9ICIoKCIgYXJndW1lbnROYW1lICIpPyBCUkxBUElfRE9UIiBkb3ROdW1iZXIgIjogMCkiCisgICAgZXhwcmVzc2lvbiA9IGV4cHJlc3Npb24gc3ViZXhwcmVzc2lvbkRlbGltaXRlciAiICAiIHN1YmV4cHJlc3Npb24KKyAgICBzdWJleHByZXNzaW9uRGVsaW1pdGVyID0gIiB8IFxcXG4iCisgIH0KKworICBwcmludCAiI2RlZmluZSBCUkxBUElfRE9UUygiIGFyZ3VtZW50cyAiKSAoXFxcbiIgZXhwcmVzc2lvbiAiIFxcXG4pIgorCisgIHByaW50ICIiCisgIHdyaXRlTWFjcm9EZWZpbml0aW9uKCJCUkxBUElfRE9UX0NIT1JEIiwgMjU2LCAic3BhY2Uga2V5IikKK30KZGlmZiAtLWdpdCBhL1Byb2dyYW1zL2JybGFwaV9jb25zdGFudHMuaCBiL1Byb2dyYW1zL2JybGFwaV9jb25zdGFudHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYmM4MTFhCi0tLSAvZGV2L251bGwKKysrIGIvUHJvZ3JhbXMvYnJsYXBpX2NvbnN0YW50cy5oCkBAIC0wLDAgKzEsNTA1IEBACisvKgorICogbGliYnJsYXBpIC0gQSBsaWJyYXJ5IHByb3ZpZGluZyBhY2Nlc3MgdG8gYnJhaWxsZSB0ZXJtaW5hbHMgZm9yIGFwcGxpY2F0aW9ucy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDItMjAyMyBieQorICogICBTYW11ZWwgVGhpYmF1bHQgPFNhbXVlbC5UaGliYXVsdEBlbnMtbHlvbi5vcmc+CisgKiAgIFPDqWJhc3RpZW4gSGluZGVyZXIgPFNlYmFzdGllbi5IaW5kZXJlckBlbnMtbHlvbi5vcmc+CisgKgorICogbGliYnJsYXBpIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKKyNpZm5kZWYgQlJMQVBJX0lOQ0xVREVEX0NPTlNUQU5UUworI2RlZmluZSBCUkxBUElfSU5DTFVERURfQ09OU1RBTlRTCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYgLyogX19jcGx1c3BsdXMgKi8KKworLyoqIFxmaWxlCisgKi8KKworLyoqIFxpbmdyb3VwIGJybGFwaV9rZXljb2RlcworICogQHsgKi8KKworLyoqIGRvIG5vdGhpbmcgKi8KKyNkZWZpbmUgQlJMQVBJX0tFWV9DTURfTk9PUCAoQlJMQVBJX0tFWV9DTUQoMCkgKyAwKQorLyoqIGdvIHVwIG9uZSBsaW5lICovCisjZGVmaW5lIEJSTEFQSV9LRVlfQ01EX0xOVVAgKEJSTEFQSV9LRVlfQ01EKDApICsgMSkKKy8qKiBnbyBkb3duIG9uZSBsaW5lICovCisjZGVmaW5lIEJSTEFQSV9LRVlfQ01EX0xORE4gKEJSTEFQSV9LRVlfQ01EKDApICsgMikKKy8qKiBnbyB1cCBzZXZlcmFsIGxpbmVzICovCisjZGVmaW5lIEJSTEFQSV9LRVlfQ01EX1dJTlVQIChCUkxBUElfS0VZX0NNRCgwKSArIDMpCisvKiogZ28gZG93biBzZXZlcmFsIGxpbmVzICovCisjZGVmaW5lIEJSTEFQSV9LRVlfQ01EX1dJTkROIChCUkxBUElfS0VZX0NNRCgwKSArIDQpCisvKiogZ28gdXAgdG8gbmVhcmVzdCBsaW5lIHdpdGggZGlmZmVyZW50IGNvbnRlbnQgKi8KKyNkZWZpbmUgQlJMQVBJX0tFWV9DTURfUFJESUZMTiAoQlJMQVBJX0tFWV9DTUQoMCkgKyA1KQorLyoqIGdvIGRvd24gdG8gbmVhcmVzdCBsaW5lIHdpdGggZGlmZmVyZW50IGNvbnRlbnQgKi8KKyNkZWZpbmUgQlJMQVBJX0tFWV9DTURfTlhESUZMTiAoQlJMQVBJX0tFWV9DTUQoMCkgKyA2KQorLyoqIGdvIHVwIHRvIG5lYXJlc3QgbGluZSB3aXRoIGRpZmZlcmVudCBoaWdobGlnaHRpbmcgKi8KKyNkZWZpbmUgQlJMQVBJX0tFWV9DTURfQVRUUlVQIChCUkxBUElfS0VZX0NNRCgwKSArIDcpCisvKiogZ28gZG93biB0byBuZWFyZXN0IGxpbmUgd2l0aCBkaWZmZXJlbnQgaGlnaGxpZ2h0aW5nICovCisjZGVmaW5lIEJSTEFQSV9LRVlfQ01EX0FUVFJETiAoQlJMQVBJX0tFWV9DTUQoMCkgKyA4KQorLyoqIGdvIHRvIHRvcCBsaW5lICovCisjZGVmaW5lIEJSTEFQSV9LRVlfQ01EX1RPUCAoQlJMQVBJX0tFWV9DTUQoMCkgKyA5KQorLyoqIGdvIHRvIGJvdHRvbSBsaW5lICovCisjZGVmaW5lIEJSTEFQSV9LRVlfQ01EX0JPVCAoQlJMQVBJX0tFWV9DTUQoMCkgKyAxMCkKKy8qKiBnbyB0byBiZWdpbm5pbmcgb2YgdG9wIGxpbmUgKi8KKyNkZWZpbmUgQlJMQVBJX0tFWV9DTURfVE9QX0xFRlQgKEJSTEFQSV9LRVlfQ01EKDApICsgMTEpCisvKiogZ28gdG8gYmVnaW5uaW5nIG9mIGJvdHRvbSBsaW5lICovCisjZGVmaW5lIEJSTEFQSV9LRVlfQ01EX0JPVF9MRUZUIChCUkxBUElfS0VZX0NNRCgwKSArIDEyKQorLyoqIGdvIHVwIHRvIGZpcnN0IGxpbmUgb2YgcGFyYWdyYXBoICovCisjZGVmaW5lIEJSTEFQSV9LRVlfQ01EX1BSUEdSUEggKEJSTEFQSV9LRVlfQ01EKDApICsgMTMpCisvKiogZ28gZG93biB0byBmaXJzdCBsaW5lIG9mIG5leHQgcGFyYWdyYXBoICovCisjZGVmaW5lIEJSTEFQSV9LRVlfQ01EX05YUEdSUEggKEJSTEFQSV9LRVlfQ01EKDApICsgMTQpCisvKiogZ28gdXAgdG8gcHJldmlvdXMgY29tbWFuZCBwcm9tcHQgKi8KKyNkZWZpbmUgQlJMQVBJX0tFWV9DTURfUFJQUk9NUFQgKEJSTEFQSV9LRVlfQ01EKDApICsgMTUpCisvKiogZ28gZG93biB0byBuZXh0IGNvbW1hbmQgcHJvbXB0ICovCisjZGVmaW5lIEJSTEFQSV9LRVlfQ01EX05YUFJPTVBUIChCUkxBUElfS0VZX0NNRCgwKSArIDE2KQorLyoqIHNlYXJjaCBiYWNrd2FyZCBmb3IgY2xpcGJvYXJkIHRleHQgKi8KKyNkZWZpbmUgQlJMQVBJX0tFWV9DTURfUFJTRUFSQ0ggKEJSTEFQSV9LRVlfQ01EKDApICsgMTcpCisvKiogc2VhcmNoIGZvcndhcmQgZm9yIGNsaXBib2FyZCB0ZXh0ICovCisjZGVmaW5lIEJSTEFQSV9LRVlfQ01EX05YU0VBUkNIIChCUkxBUElfS0VZX0NNRCgwKSArIDE4KQorLyoqIGdvIGxlZnQgb25lIGNoYXJhY3RlciAqLworI2RlZmluZSBCUkxBUElfS0VZX0NNRF9DSFJMVCAoQlJMQVBJX0tFWV9DTUQoMCkgKyAxOSkKKy8qKiBnbyByaWdodCBvbmUgY2hhcmFjdGVyICovCisjZGVmaW5lIEJSTEFQSV9LRVlfQ01EX0NIUlJUIChCUkxBUElfS0VZX0NNRCgwKSArIDIwKQorLyoqIGdvIGxlZnQgaGFsZiBhIGJyYWlsbGUgd2luZG93ICovCisjZGVmaW5lIEJSTEFQSV9LRVlfQ01EX0hXSU5MVCAoQlJMQVBJX0tFWV9DTUQoMCkgKyAyMSkKKy8qKiBnbyByaWdodCBoYWxmIGEgYnJhaWxsZSB3aW5kb3cgKi8KKyNkZWZpbmUgQlJMQVBJX0tFWV9DTURfSFdJTlJUIChCUkxBUElfS0VZX0NNRCgwKSArIDIyKQorLyoqIGdvIGJhY2t3YXJkIG9uZSBicmFpbGxlIHdpbmRvdyAqLworI2RlZmluZSBCUkxBUElfS0VZX0NNRF9GV0lOTFQgKEJSTEFQSV9LRVlfQ01EKDApICsgMjMpCisvKiogZ28gZm9yd2FyZCBvbmUgYnJhaWxsZSB3aW5kb3cgKi8KKyNkZWZpbmUgQlJMQVBJX0tFWV9DTURfRldJTlJUIChCUkxBUElfS0VZX0NNRCgwKSArIDI0KQorLyoqIGdvIGJhY2t3YXJkIHNraXBwaW5nIGJsYW5rIGJyYWlsbGUgd2luZG93cyAqLworI2RlZmluZSBCUkxBUElfS0VZX0NNRF9GV0lOTFRTS0lQIChCUkxBUElfS0VZX0NNRCgwKSArIDI1KQorLyoqIGdvIGZvcndhcmQgc2tpcHBpbmcgYmxhbmsgYnJhaWxsZSB3aW5kb3dzICovCisjZGVmaW5lIEJSTEFQSV9LRVlfQ01EX0ZXSU5SVFNLSVAgKEJSTEFQSV9LRVlfQ01EKDApICsgMjYpCisvKiogZ28gdG8gYmVnaW5uaW5nIG9mIGxpbmUgKi8KKyNkZWZpbmUgQlJMQVBJX0tFWV9DTURfTE5CRUcgKEJSTEFQSV9LRVlfQ01EKDApICsgMjcpCisvKiogZ28gdG8gZW5kIG9mIGxpbmUgKi8KKyNkZWZpbmUgQlJMQVBJX0tFWV9DTURfTE5FTkQgKEJSTEFQSV9LRVlfQ01EKDApICsgMjgpCisvKiogZ28gdG8gc2NyZWVuIGN1cnNvciAqLworI2RlZmluZSBCUkxBUElfS0VZX0NNRF9IT01FIChCUkxBUElfS0VZX0NNRCgwKSArIDI5KQorLyoqIGdvIGJhY2sgYWZ0ZXIgY3Vyc29yIHRyYWNraW5nICovCisjZGVmaW5lIEJSTEFQSV9LRVlfQ01EX0JBQ0sgKEJSTEFQSV9LRVlfQ01EKDApICsgMzApCisvKiogZ28gdG8gc2NyZWVuIGN1cnNvciBvciBnbyBiYWNrIGFmdGVyIGN1cnNvciB0cmFja2luZyAqLworI2RlZmluZSBCUkxBUElfS0VZX0NNRF9SRVRVUk4gKEJSTEFQSV9LRVlfQ01EKDApICsgMzEpCisvKiogc2V0IHNjcmVlbiBpbWFnZSBmcm96ZW4vdW5mcm96ZW4gKi8KKyNkZWZpbmUgQlJMQVBJX0tFWV9DTURfRlJFRVpFIChCUkxBUElfS0VZX0NNRCgwKSArIDMyKQorLyoqIHNldCBkaXNwbGF5IG1vZGUgYXR0cmlidXRlcy90ZXh0ICovCisjZGVmaW5lIEJSTEFQSV9LRVlfQ01EX0RJU1BNRCAoQlJMQVBJX0tFWV9DTUQoMCkgKyAzMykKKy8qKiBzZXQgdGV4dCBzdHlsZSA2LWRvdC84LWRvdCAqLworI2RlZmluZSBCUkxBUElfS0VZX0NNRF9TSVhET1RTIChCUkxBUElfS0VZX0NNRCgwKSArIDM0KQorLyoqIHNldCBzbGlkaW5nIGJyYWlsbGUgd2luZG93IG9uL29mZiAqLworI2RlZmluZSBCUkxBUElfS0VZX0NNRF9TTElERVdJTiAoQlJMQVBJX0tFWV9DTUQoMCkgKyAzNSkKKy8qKiBzZXQgc2tpcHBpbmcgb2YgbGluZXMgd2l0aCBpZGVudGljYWwgY29udGVudCBvbi9vZmYgKi8KKyNkZWZpbmUgQlJMQVBJX0tFWV9DTURfU0tQSURMTlMgKEJSTEFQSV9LRVlfQ01EKDApICsgMzYpCisvKiogc2V0IHNraXBwaW5nIG9mIGJsYW5rIGJyYWlsbGUgd2luZG93cyBvbi9vZmYgKi8KKyNkZWZpbmUgQlJMQVBJX0tFWV9DTURfU0tQQkxOS1dJTlMgKEJSTEFQSV9LRVlfQ01EKDApICsgMzcpCisvKiogc2V0IHNjcmVlbiBjdXJzb3IgdmlzaWJpbGl0eSBvbi9vZmYgKi8KKyNkZWZpbmUgQlJMQVBJX0tFWV9DTURfQ1NSVklTIChCUkxBUElfS0VZX0NNRCgwKSArIDM4KQorLyoqIHNldCBoaWRkZW4gc2NyZWVuIGN1cnNvciBvbi9vZmYgKi8KKyNkZWZpbmUgQlJMQVBJX0tFWV9DTURfQ1NSSElERSAoQlJMQVBJX0tFWV9DTUQoMCkgKyAzOSkKKy8qKiBzZXQgdHJhY2sgc2NyZWVuIGN1cnNvciBvbi9vZmYgKi8KKyNkZWZpbmUgQlJMQVBJX0tFWV9DTURfQ1NSVFJLIChCUkxBUElfS0VZX0NNRCgwKSArIDQwKQorLyoqIHNldCBzY3JlZW4gY3Vyc29yIHN0eWxlIGJsb2NrL3VuZGVybGluZSAqLworI2RlZmluZSBCUkxBUElfS0VZX0NNRF9DU1JTSVpFIChCUkxBUElfS0VZX0NNRCgwKSArIDQxKQorLyoqIHNldCBzY3JlZW4gY3Vyc29yIGJsaW5raW5nIG9uL29mZiAqLworI2RlZmluZSBCUkxBUElfS0VZX0NNRF9DU1JCTElOSyAoQlJMQVBJX0tFWV9DTUQoMCkgKyA0MikKKy8qKiBzZXQgYXR0cmlidXRlIHVuZGVybGluaW5nIG9uL29mZiAqLworI2RlZmluZSBCUkxBUElfS0VZX0NNRF9BVFRSVklTIChCUkxBUElfS0VZX0NNRCgwKSArIDQzKQorLyoqIHNldCBhdHRyaWJ1dGUgYmxpbmtpbmcgb24vb2ZmICovCisjZGVmaW5lIEJSTEFQSV9LRVlfQ01EX0FUVFJCTElOSyAoQlJMQVBJX0tFWV9DTUQoMCkgKyA0NCkKKy8qKiBzZXQgY2FwaXRhbCBsZXR0ZXIgYmxpbmtpbmcgb24vb2ZmICovCisjZGVmaW5lIEJSTEFQSV9LRVlfQ01EX0NBUEJMSU5LIChCUkxBUElfS0VZX0NNRCgwKSArIDQ1KQorLyoqIHNldCBhbGVydCB0dW5lcyBvbi9vZmYgKi8KKyNkZWZpbmUgQlJMQVBJX0tFWV9DTURfVFVORVMgKEJSTEFQSV9LRVlfQ01EKDApICsgNDYpCisvKiogc2V0IGF1dG9yZXBlYXQgb24vb2ZmICovCisjZGVmaW5lIEJSTEFQSV9LRVlfQ01EX0FVVE9SRVBFQVQgKEJSTEFQSV9LRVlfQ01EKDApICsgNDcpCisvKiogc2V0IGF1dG9zcGVhayBvbi9vZmYgKi8KKyNkZWZpbmUgQlJMQVBJX0tFWV9DTURfQVVUT1NQRUFLIChCUkxBUElfS0VZX0NNRCgwKSArIDQ4KQorLyoqIGVudGVyL2xlYXZlIGhlbHAgZGlzcGxheSAqLworI2RlZmluZSBCUkxBUElfS0VZX0NNRF9IRUxQIChCUkxBUElfS0VZX0NNRCgwKSArIDQ5KQorLyoqIGVudGVyL2xlYXZlIHN0YXR1cyBkaXNwbGF5ICovCisjZGVmaW5lIEJSTEFQSV9LRVlfQ01EX0lORk8gKEJSTEFQSV9LRVlfQ01EKDApICsgNTApCisvKiogZW50ZXIvbGVhdmUgY29tbWFuZCBsZWFybiBtb2RlICovCisjZGVmaW5lIEJSTEFQSV9LRVlfQ01EX0xFQVJOIChCUkxBUElfS0VZX0NNRCgwKSArIDUxKQorLyoqIGVudGVyL2xlYXZlIHByZWZlcmVuY2VzIG1lbnUgKi8KKyNkZWZpbmUgQlJMQVBJX0tFWV9DTURfUFJFRk1FTlUgKEJSTEFQSV9LRVlfQ01EKDApICsgNTIpCisvKiogc2F2ZSBwcmVmZXJlbmNlcyB0byBkaXNrICovCisjZGVmaW5lIEJSTEFQSV9LRVlfQ01EX1BSRUZTQVZFIChCUkxBUElfS0VZX0NNRCgwKSArIDUzKQorLyoqIHJlc3RvcmUgcHJlZmVyZW5jZXMgZnJvbSBkaXNrICovCisjZGVmaW5lIEJSTEFQSV9LRVlfQ01EX1BSRUZMT0FEIChCUkxBUElfS0VZX0NNRCgwKSArIDU0KQorLyoqIGdvIHVwIHRvIGZpcnN0IGl0ZW0gKi8KKyNkZWZpbmUgQlJMQVBJX0tFWV9DTURfTUVOVV9GSVJTVF9JVEVNIChCUkxBUElfS0VZX0NNRCgwKSArIDU1KQorLyoqIGdvIGRvd24gdG8gbGFzdCBpdGVtICovCisjZGVmaW5lIEJSTEFQSV9LRVlfQ01EX01FTlVfTEFTVF9JVEVNIChCUkxBUElfS0VZX0NNRCgwKSArIDU2KQorLyoqIGdvIHVwIHRvIHByZXZpb3VzIGl0ZW0gKi8KKyNkZWZpbmUgQlJMQVBJX0tFWV9DTURfTUVOVV9QUkVWX0lURU0gKEJSTEFQSV9LRVlfQ01EKDApICsgNTcpCisvKiogZ28gZG93biB0byBuZXh0IGl0ZW0gKi8KKyNkZWZpbmUgQlJMQVBJX0tFWV9DTURfTUVOVV9ORVhUX0lURU0gKEJSTEFQSV9LRVlfQ01EKDApICsgNTgpCisvKiogc2VsZWN0IHByZXZpb3VzIGNob2ljZSAqLworI2RlZmluZSBCUkxBUElfS0VZX0NNRF9NRU5VX1BSRVZfU0VUVElORyAoQlJMQVBJX0tFWV9DTUQoMCkgKyA1OSkKKy8qKiBzZWxlY3QgbmV4dCBjaG9pY2UgKi8KKyNkZWZpbmUgQlJMQVBJX0tFWV9DTURfTUVOVV9ORVhUX1NFVFRJTkcgKEJSTEFQSV9LRVlfQ01EKDApICsgNjApCisvKiogc3RvcCBzcGVha2luZyAqLworI2RlZmluZSBCUkxBUElfS0VZX0NNRF9NVVRFIChCUkxBUElfS0VZX0NNRCgwKSArIDYxKQorLyoqIGdvIHRvIGN1cnJlbnQgc3BlYWtpbmcgcG9zaXRpb24gKi8KKyNkZWZpbmUgQlJMQVBJX0tFWV9DTURfU1BLSE9NRSAoQlJMQVBJX0tFWV9DTUQoMCkgKyA2MikKKy8qKiBzcGVhayBjdXJyZW50IGxpbmUgKi8KKyNkZWZpbmUgQlJMQVBJX0tFWV9DTURfU0FZX0xJTkUgKEJSTEFQSV9LRVlfQ01EKDApICsgNjMpCisvKiogc3BlYWsgZnJvbSB0b3Agb2Ygc2NyZWVuIHRocm91Z2ggY3VycmVudCBsaW5lICovCisjZGVmaW5lIEJSTEFQSV9LRVlfQ01EX1NBWV9BQk9WRSAoQlJMQVBJX0tFWV9DTUQoMCkgKyA2NCkKKy8qKiBzcGVhayBmcm9tIGN1cnJlbnQgbGluZSB0aHJvdWdoIGJvdHRvbSBvZiBzY3JlZW4gKi8KKyNkZWZpbmUgQlJMQVBJX0tFWV9DTURfU0FZX0JFTE9XIChCUkxBUElfS0VZX0NNRCgwKSArIDY1KQorLyoqIGRlY3JlYXNlIHNwZWFraW5nIHJhdGUgKi8KKyNkZWZpbmUgQlJMQVBJX0tFWV9DTURfU0FZX1NMT1dFUiAoQlJMQVBJX0tFWV9DTUQoMCkgKyA2NikKKy8qKiBpbmNyZWFzZSBzcGVha2luZyByYXRlICovCisjZGVmaW5lIEJSTEFQSV9LRVlfQ01EX1NBWV9GQVNURVIgKEJSTEFQSV9LRVlfQ01EKDApICsgNjcpCisvKiogZGVjcmVhc2Ugc3BlYWtpbmcgdm9sdW1lICovCisjZGVmaW5lIEJSTEFQSV9LRVlfQ01EX1NBWV9TT0ZURVIgKEJSTEFQSV9LRVlfQ01EKDApICsgNjgpCisvKiogaW5jcmVhc2Ugc3BlYWtpbmcgdm9sdW1lICovCisjZGVmaW5lIEJSTEFQSV9LRVlfQ01EX1NBWV9MT1VERVIgKEJSTEFQSV9LRVlfQ01EKDApICsgNjkpCisvKiogc3dpdGNoIHRvIHRoZSBwcmV2aW91cyB2aXJ0dWFsIHRlcm1pbmFsICovCisjZGVmaW5lIEJSTEFQSV9LRVlfQ01EX1NXSVRDSFZUX1BSRVYgKEJSTEFQSV9LRVlfQ01EKDApICsgNzApCisvKiogc3dpdGNoIHRvIHRoZSBuZXh0IHZpcnR1YWwgdGVybWluYWwgKi8KKyNkZWZpbmUgQlJMQVBJX0tFWV9DTURfU1dJVENIVlRfTkVYVCAoQlJMQVBJX0tFWV9DTUQoMCkgKyA3MSkKKy8qKiBicmluZyBzY3JlZW4gY3Vyc29yIHRvIGN1cnJlbnQgbGluZSAqLworI2RlZmluZSBCUkxBUElfS0VZX0NNRF9DU1JKTVBfVkVSVCAoQlJMQVBJX0tFWV9DTUQoMCkgKyA3MikKKy8qKiBpbnNlcnQgY2xpcGJvYXJkIHRleHQgYWZ0ZXIgc2NyZWVuIGN1cnNvciAqLworI2RlZmluZSBCUkxBUElfS0VZX0NNRF9QQVNURSAoQlJMQVBJX0tFWV9DTUQoMCkgKyA3MykKKy8qKiByZXN0YXJ0IGJyYWlsbGUgZHJpdmVyICovCisjZGVmaW5lIEJSTEFQSV9LRVlfQ01EX1JFU1RBUlRCUkwgKEJSTEFQSV9LRVlfQ01EKDApICsgNzQpCisvKiogcmVzdGFydCBzcGVlY2ggZHJpdmVyICovCisjZGVmaW5lIEJSTEFQSV9LRVlfQ01EX1JFU1RBUlRTUEVFQ0ggKEJSTEFQSV9LRVlfQ01EKDApICsgNzUpCisvKiogYnJhaWxsZSBkaXNwbGF5IHRlbXBvcmFyaWx5IHVuYXZhaWxhYmxlICovCisjZGVmaW5lIEJSTEFQSV9LRVlfQ01EX09GRkxJTkUgKEJSTEFQSV9LRVlfQ01EKDApICsgNzYpCisvKiogY3ljbGUgdGhlIFNoaWZ0IHN0aWNreSBpbnB1dCBtb2RpZmllciAobmV4dCwgb24sIG9mZikgKi8KKyNkZWZpbmUgQlJMQVBJX0tFWV9DTURfU0hJRlQgKEJSTEFQSV9LRVlfQ01EKDApICsgNzcpCisvKiogY3ljbGUgdGhlIFVwcGVyIHN0aWNreSBpbnB1dCBtb2RpZmllciAobmV4dCwgb24sIG9mZikgKi8KKyNkZWZpbmUgQlJMQVBJX0tFWV9DTURfVVBQRVIgKEJSTEFQSV9LRVlfQ01EKDApICsgNzgpCisvKiogY3ljbGUgdGhlIENvbnRyb2wgc3RpY2t5IGlucHV0IG1vZGlmaWVyIChuZXh0LCBvbiwgb2ZmKSAqLworI2RlZmluZSBCUkxBUElfS0VZX0NNRF9DT05UUk9MIChCUkxBUElfS0VZX0NNRCgwKSArIDc5KQorLyoqIGN5Y2xlIHRoZSBNZXRhIChMZWZ0IEFsdCkgc3RpY2t5IGlucHV0IG1vZGlmaWVyIChuZXh0LCBvbiwgb2ZmKSAqLworI2RlZmluZSBCUkxBUElfS0VZX0NNRF9NRVRBIChCUkxBUElfS0VZX0NNRCgwKSArIDgwKQorLyoqIHNob3cgY3VycmVudCBkYXRlIGFuZCB0aW1lICovCisjZGVmaW5lIEJSTEFQSV9LRVlfQ01EX1RJTUUgKEJSTEFQSV9LRVlfQ01EKDApICsgODEpCisvKiogZ28gdG8gcHJldmlvdXMgbWVudSBsZXZlbCAqLworI2RlZmluZSBCUkxBUElfS0VZX0NNRF9NRU5VX1BSRVZfTEVWRUwgKEJSTEFQSV9LRVlfQ01EKDApICsgODIpCisvKiogc2V0IGF1dG9zcGVhayBzZWxlY3RlZCBsaW5lIG9uL29mZiAqLworI2RlZmluZSBCUkxBUElfS0VZX0NNRF9BU1BLX1NFTF9MSU5FIChCUkxBUElfS0VZX0NNRCgwKSArIDgzKQorLyoqIHNldCBhdXRvc3BlYWsgc2VsZWN0ZWQgY2hhcmFjdGVyIG9uL29mZiAqLworI2RlZmluZSBCUkxBUElfS0VZX0NNRF9BU1BLX1NFTF9DSEFSIChCUkxBUElfS0VZX0NNRCgwKSArIDg0KQorLyoqIHNldCBhdXRvc3BlYWsgaW5zZXJ0ZWQgY2hhcmFjdGVycyBvbi9vZmYgKi8KKyNkZWZpbmUgQlJMQVBJX0tFWV9DTURfQVNQS19JTlNfQ0hBUlMgKEJSTEFQSV9LRVlfQ01EKDApICsgODUpCisvKiogc2V0IGF1dG9zcGVhayBkZWxldGVkIGNoYXJhY3RlcnMgb24vb2ZmICovCisjZGVmaW5lIEJSTEFQSV9LRVlfQ01EX0FTUEtfREVMX0NIQVJTIChCUkxBUElfS0VZX0NNRCgwKSArIDg2KQorLyoqIHNldCBhdXRvc3BlYWsgcmVwbGFjZWQgY2hhcmFjdGVycyBvbi9vZmYgKi8KKyNkZWZpbmUgQlJMQVBJX0tFWV9DTURfQVNQS19SRVBfQ0hBUlMgKEJSTEFQSV9LRVlfQ01EKDApICsgODcpCisvKiogc2V0IGF1dG9zcGVhayBjb21wbGV0ZWQgd29yZHMgb24vb2ZmICovCisjZGVmaW5lIEJSTEFQSV9LRVlfQ01EX0FTUEtfQ01QX1dPUkRTIChCUkxBUElfS0VZX0NNRCgwKSArIDg4KQorLyoqIHNwZWFrIGN1cnJlbnQgY2hhcmFjdGVyICovCisjZGVmaW5lIEJSTEFQSV9LRVlfQ01EX1NQRUFLX0NVUlJfQ0hBUiAoQlJMQVBJX0tFWV9DTUQoMCkgKyA4OSkKKy8qKiBnbyB0byBhbmQgc3BlYWsgcHJldmlvdXMgY2hhcmFjdGVyICovCisjZGVmaW5lIEJSTEFQSV9LRVlfQ01EX1NQRUFLX1BSRVZfQ0hBUiAoQlJMQVBJX0tFWV9DTUQoMCkgKyA5MCkKKy8qKiBnbyB0byBhbmQgc3BlYWsgbmV4dCBjaGFyYWN0ZXIgKi8KKyNkZWZpbmUgQlJMQVBJX0tFWV9DTURfU1BFQUtfTkVYVF9DSEFSIChCUkxBUElfS0VZX0NNRCgwKSArIDkxKQorLyoqIHNwZWFrIGN1cnJlbnQgd29yZCAqLworI2RlZmluZSBCUkxBUElfS0VZX0NNRF9TUEVBS19DVVJSX1dPUkQgKEJSTEFQSV9LRVlfQ01EKDApICsgOTIpCisvKiogZ28gdG8gYW5kIHNwZWFrIHByZXZpb3VzIHdvcmQgKi8KKyNkZWZpbmUgQlJMQVBJX0tFWV9DTURfU1BFQUtfUFJFVl9XT1JEIChCUkxBUElfS0VZX0NNRCgwKSArIDkzKQorLyoqIGdvIHRvIGFuZCBzcGVhayBuZXh0IHdvcmQgKi8KKyNkZWZpbmUgQlJMQVBJX0tFWV9DTURfU1BFQUtfTkVYVF9XT1JEIChCUkxBUElfS0VZX0NNRCgwKSArIDk0KQorLyoqIHNwZWFrIGN1cnJlbnQgbGluZSAqLworI2RlZmluZSBCUkxBUElfS0VZX0NNRF9TUEVBS19DVVJSX0xJTkUgKEJSTEFQSV9LRVlfQ01EKDApICsgOTUpCisvKiogZ28gdG8gYW5kIHNwZWFrIHByZXZpb3VzIGxpbmUgKi8KKyNkZWZpbmUgQlJMQVBJX0tFWV9DTURfU1BFQUtfUFJFVl9MSU5FIChCUkxBUElfS0VZX0NNRCgwKSArIDk2KQorLyoqIGdvIHRvIGFuZCBzcGVhayBuZXh0IGxpbmUgKi8KKyNkZWZpbmUgQlJMQVBJX0tFWV9DTURfU1BFQUtfTkVYVF9MSU5FIChCUkxBUElfS0VZX0NNRCgwKSArIDk3KQorLyoqIGdvIHRvIGFuZCBzcGVhayBmaXJzdCBub24tYmxhbmsgY2hhcmFjdGVyIG9uIGxpbmUgKi8KKyNkZWZpbmUgQlJMQVBJX0tFWV9DTURfU1BFQUtfRlJTVF9DSEFSIChCUkxBUElfS0VZX0NNRCgwKSArIDk4KQorLyoqIGdvIHRvIGFuZCBzcGVhayBsYXN0IG5vbi1ibGFuayBjaGFyYWN0ZXIgb24gbGluZSAqLworI2RlZmluZSBCUkxBUElfS0VZX0NNRF9TUEVBS19MQVNUX0NIQVIgKEJSTEFQSV9LRVlfQ01EKDApICsgOTkpCisvKiogZ28gdG8gYW5kIHNwZWFrIGZpcnN0IG5vbi1ibGFuayBsaW5lIG9uIHNjcmVlbiAqLworI2RlZmluZSBCUkxBUElfS0VZX0NNRF9TUEVBS19GUlNUX0xJTkUgKEJSTEFQSV9LRVlfQ01EKDApICsgMTAwKQorLyoqIGdvIHRvIGFuZCBzcGVhayBsYXN0IG5vbi1ibGFuayBsaW5lIG9uIHNjcmVlbiAqLworI2RlZmluZSBCUkxBUElfS0VZX0NNRF9TUEVBS19MQVNUX0xJTkUgKEJSTEFQSV9LRVlfQ01EKDApICsgMTAxKQorLyoqIGRlc2NyaWJlIGN1cnJlbnQgY2hhcmFjdGVyICovCisjZGVmaW5lIEJSTEFQSV9LRVlfQ01EX0RFU0NfQ1VSUl9DSEFSIChCUkxBUElfS0VZX0NNRCgwKSArIDEwMikKKy8qKiBzcGVsbCBjdXJyZW50IHdvcmQgKi8KKyNkZWZpbmUgQlJMQVBJX0tFWV9DTURfU1BFTExfQ1VSUl9XT1JEIChCUkxBUElfS0VZX0NNRCgwKSArIDEwMykKKy8qKiBicmluZyBzY3JlZW4gY3Vyc29yIHRvIHNwZWVjaCBjdXJzb3IgKi8KKyNkZWZpbmUgQlJMQVBJX0tFWV9DTURfUk9VVEVfQ1VSUl9MT0NOIChCUkxBUElfS0VZX0NNRCgwKSArIDEwNCkKKy8qKiBzcGVhayBzcGVlY2ggY3Vyc29yIGxvY2F0aW9uICovCisjZGVmaW5lIEJSTEFQSV9LRVlfQ01EX1NQRUFLX0NVUlJfTE9DTiAoQlJMQVBJX0tFWV9DTUQoMCkgKyAxMDUpCisvKiogc2V0IHNwZWVjaCBjdXJzb3IgdmlzaWJpbGl0eSBvbi9vZmYgKi8KKyNkZWZpbmUgQlJMQVBJX0tFWV9DTURfU0hPV19DVVJSX0xPQ04gKEJSTEFQSV9LRVlfQ01EKDApICsgMTA2KQorLyoqIHNhdmUgY2xpcGJvYXJkIHRvIGRpc2sgKi8KKyNkZWZpbmUgQlJMQVBJX0tFWV9DTURfQ0xJUF9TQVZFIChCUkxBUElfS0VZX0NNRCgwKSArIDEwNykKKy8qKiByZXN0b3JlIGNsaXBib2FyZCBmcm9tIGRpc2sgKi8KKyNkZWZpbmUgQlJMQVBJX0tFWV9DTURfQ0xJUF9SRVNUT1JFIChCUkxBUElfS0VZX0NNRCgwKSArIDEwOCkKKy8qKiBzZXQgYnJhaWxsZSB0eXBpbmcgbW9kZSBkb3RzL3RleHQgKi8KKyNkZWZpbmUgQlJMQVBJX0tFWV9DTURfQlJMVUNET1RTIChCUkxBUElfS0VZX0NNRCgwKSArIDEwOSkKKy8qKiBzZXQgYnJhaWxsZSBrZXlib2FyZCBlbmFibGVkL2Rpc2FibGVkICovCisjZGVmaW5lIEJSTEFQSV9LRVlfQ01EX0JSTEtCRCAoQlJMQVBJX0tFWV9DTUQoMCkgKyAxMTApCisvKiogY2xlYXIgYWxsIHN0aWNreSBpbnB1dCBtb2RpZmllcnMgKi8KKyNkZWZpbmUgQlJMQVBJX0tFWV9DTURfVU5TVElDSyAoQlJMQVBJX0tFWV9DTUQoMCkgKyAxMTEpCisvKiogY3ljbGUgdGhlIEFsdEdyIChSaWdodCBBbHQpIHN0aWNreSBpbnB1dCBtb2RpZmllciAobmV4dCwgb24sIG9mZikgKi8KKyNkZWZpbmUgQlJMQVBJX0tFWV9DTURfQUxUR1IgKEJSTEFQSV9LRVlfQ01EKDApICsgMTEyKQorLyoqIGN5Y2xlIHRoZSBHVUkgKFdpbmRvd3MpIHN0aWNreSBpbnB1dCBtb2RpZmllciAobmV4dCwgb24sIG9mZikgKi8KKyNkZWZpbmUgQlJMQVBJX0tFWV9DTURfR1VJIChCUkxBUElfS0VZX0NNRCgwKSArIDExMykKKy8qKiBzdG9wIHRoZSBicmFpbGxlIGRyaXZlciAqLworI2RlZmluZSBCUkxBUElfS0VZX0NNRF9CUkxfU1RPUCAoQlJMQVBJX0tFWV9DTUQoMCkgKyAxMTQpCisvKiogc3RhcnQgdGhlIGJyYWlsbGUgZHJpdmVyICovCisjZGVmaW5lIEJSTEFQSV9LRVlfQ01EX0JSTF9TVEFSVCAoQlJMQVBJX0tFWV9DTUQoMCkgKyAxMTUpCisvKiogc3RvcCB0aGUgc3BlZWNoIGRyaXZlciAqLworI2RlZmluZSBCUkxBUElfS0VZX0NNRF9TUEtfU1RPUCAoQlJMQVBJX0tFWV9DTUQoMCkgKyAxMTYpCisvKiogc3RhcnQgdGhlIHNwZWVjaCBkcml2ZXIgKi8KKyNkZWZpbmUgQlJMQVBJX0tFWV9DTURfU1BLX1NUQVJUIChCUkxBUElfS0VZX0NNRCgwKSArIDExNykKKy8qKiBzdG9wIHRoZSBzY3JlZW4gZHJpdmVyICovCisjZGVmaW5lIEJSTEFQSV9LRVlfQ01EX1NDUl9TVE9QIChCUkxBUElfS0VZX0NNRCgwKSArIDExOCkKKy8qKiBzdGFydCB0aGUgc2NyZWVuIGRyaXZlciAqLworI2RlZmluZSBCUkxBUElfS0VZX0NNRF9TQ1JfU1RBUlQgKEJSTEFQSV9LRVlfQ01EKDApICsgMTE5KQorLyoqIGJpbmQgdG8gdGhlIHByZXZpb3VzIHZpcnR1YWwgdGVybWluYWwgKi8KKyNkZWZpbmUgQlJMQVBJX0tFWV9DTURfU0VMRUNUVlRfUFJFViAoQlJMQVBJX0tFWV9DTUQoMCkgKyAxMjApCisvKiogYmluZCB0byB0aGUgbmV4dCB2aXJ0dWFsIHRlcm1pbmFsICovCisjZGVmaW5lIEJSTEFQSV9LRVlfQ01EX1NFTEVDVFZUX05FWFQgKEJSTEFQSV9LRVlfQ01EKDApICsgMTIxKQorLyoqIGdvIGJhY2t3YXJkIHRvIG5lYXJlc3Qgbm9uLWJsYW5rIGJyYWlsbGUgd2luZG93ICovCisjZGVmaW5lIEJSTEFQSV9LRVlfQ01EX1BSTkJXSU4gKEJSTEFQSV9LRVlfQ01EKDApICsgMTIyKQorLyoqIGdvIGZvcndhcmQgdG8gbmVhcmVzdCBub24tYmxhbmsgYnJhaWxsZSB3aW5kb3cgKi8KKyNkZWZpbmUgQlJMQVBJX0tFWV9DTURfTlhOQldJTiAoQlJMQVBJX0tFWV9DTUQoMCkgKyAxMjMpCisvKiogc2V0IHRvdWNoIG5hdmlnYXRpb24gb24vb2ZmICovCisjZGVmaW5lIEJSTEFQSV9LRVlfQ01EX1RPVUNIX05BViAoQlJMQVBJX0tFWV9DTUQoMCkgKyAxMjQpCisvKiogc3BlYWsgaW5kZW50IG9mIGN1cnJlbnQgbGluZSAqLworI2RlZmluZSBCUkxBUElfS0VZX0NNRF9TUEVBS19JTkRFTlQgKEJSTEFQSV9LRVlfQ01EKDApICsgMTI1KQorLyoqIHNldCBhdXRvc3BlYWsgaW5kZW50IG9mIGN1cnJlbnQgbGluZSBvbi9vZmYgKi8KKyNkZWZpbmUgQlJMQVBJX0tFWV9DTURfQVNQS19JTkRFTlQgKEJSTEFQSV9LRVlfQ01EKDApICsgMTI2KQorLyoqIHJlZnJlc2ggYnJhaWxsZSBkaXNwbGF5ICovCisjZGVmaW5lIEJSTEFQSV9LRVlfQ01EX1JFRlJFU0ggKEJSTEFQSV9LRVlfQ01EKDApICsgMTI3KQorLyoqIHNob3cgdmFyaW91cyBkZXZpY2Ugc3RhdHVzIGluZGljYXRvcnMgKi8KKyNkZWZpbmUgQlJMQVBJX0tFWV9DTURfSU5ESUNBVE9SUyAoQlJMQVBJX0tFWV9DTUQoMCkgKyAxMjgpCisvKiogY2xlYXIgdGhlIHRleHQgc2VsZWN0aW9uICovCisjZGVmaW5lIEJSTEFQSV9LRVlfQ01EX1RYVFNFTF9DTEVBUiAoQlJMQVBJX0tFWV9DTUQoMCkgKyAxMjkpCisvKiogc2VsZWN0IGFsbCBvZiB0aGUgdGV4dCAqLworI2RlZmluZSBCUkxBUElfS0VZX0NNRF9UWFRTRUxfQUxMIChCUkxBUElfS0VZX0NNRCgwKSArIDEzMCkKKy8qKiBjb3B5IHNlbGVjdGVkIHRleHQgdG8gaG9zdCBjbGlwYm9hcmQgKi8KKyNkZWZpbmUgQlJMQVBJX0tFWV9DTURfSE9TVF9DT1BZIChCUkxBUElfS0VZX0NNRCgwKSArIDEzMSkKKy8qKiBjdXQgc2VsZWN0ZWQgdGV4dCB0byBob3N0IGNsaXBib2FyZCAqLworI2RlZmluZSBCUkxBUElfS0VZX0NNRF9IT1NUX0NVVCAoQlJMQVBJX0tFWV9DTUQoMCkgKyAxMzIpCisvKiogaW5zZXJ0IGhvc3QgY2xpcGJvYXJkIHRleHQgYWZ0ZXIgc2NyZWVuIGN1cnNvciAqLworI2RlZmluZSBCUkxBUElfS0VZX0NNRF9IT1NUX1BBU1RFIChCUkxBUElfS0VZX0NNRCgwKSArIDEzMykKKy8qKiBzaG93IHRoZSB3aW5kb3cgdGl0bGUgKi8KKyNkZWZpbmUgQlJMQVBJX0tFWV9DTURfR1VJX1RJVExFIChCUkxBUElfS0VZX0NNRCgwKSArIDEzNCkKKy8qKiBvcGVuIHRoZSBicmFpbGxlIGFjdGlvbnMgd2luZG93ICovCisjZGVmaW5lIEJSTEFQSV9LRVlfQ01EX0dVSV9CUkxfQUNUSU9OUyAoQlJMQVBJX0tFWV9DTUQoMCkgKyAxMzUpCisvKiogZ28gdG8gdGhlIGhvbWUgc2NyZWVuICovCisjZGVmaW5lIEJSTEFQSV9LRVlfQ01EX0dVSV9IT01FIChCUkxBUElfS0VZX0NNRCgwKSArIDEzNikKKy8qKiBnbyBiYWNrIHRvIHRoZSBwcmV2aW91cyBzY3JlZW4gKi8KKyNkZWZpbmUgQlJMQVBJX0tFWV9DTURfR1VJX0JBQ0sgKEJSTEFQSV9LRVlfQ01EKDApICsgMTM3KQorLyoqIG9wZW4gdGhlIGRldmljZSBzZXR0aW5ncyB3aW5kb3cgKi8KKyNkZWZpbmUgQlJMQVBJX0tFWV9DTURfR1VJX0RFVl9TRVRUSU5HUyAoQlJMQVBJX0tFWV9DTUQoMCkgKyAxMzgpCisvKiogb3BlbiB0aGUgZGV2aWNlIG9wdGlvbnMgd2luZG93ICovCisjZGVmaW5lIEJSTEFQSV9LRVlfQ01EX0dVSV9ERVZfT1BUSU9OUyAoQlJMQVBJX0tFWV9DTUQoMCkgKyAxMzkpCisvKiogb3BlbiB0aGUgYXBwbGljYXRpb24gbGlzdCB3aW5kb3cgKi8KKyNkZWZpbmUgQlJMQVBJX0tFWV9DTURfR1VJX0FQUF9MSVNUIChCUkxBUElfS0VZX0NNRCgwKSArIDE0MCkKKy8qKiBvcGVuIHRoZSBhcHBsaWNhdGlvbi1zcGVjaWZpYyBtZW51ICovCisjZGVmaW5lIEJSTEFQSV9LRVlfQ01EX0dVSV9BUFBfTUVOVSAoQlJMQVBJX0tFWV9DTUQoMCkgKyAxNDEpCisvKiogb3BlbiB0aGUgYXBwbGljYXRpb24gYWxlcnRzIHdpbmRvdyAqLworI2RlZmluZSBCUkxBUElfS0VZX0NNRF9HVUlfQVBQX0FMRVJUUyAoQlJMQVBJX0tFWV9DTUQoMCkgKyAxNDIpCisvKiogcmV0dXJuIHRvIHRoZSBhY3RpdmUgc2NyZWVuIGFyZWEgKi8KKyNkZWZpbmUgQlJMQVBJX0tFWV9DTURfR1VJX0FSRUFfQUNUViAoQlJMQVBJX0tFWV9DTUQoMCkgKyAxNDMpCisvKiogc3dpdGNoIHRvIHRoZSBwcmV2aW91cyBzY3JlZW4gYXJlYSAqLworI2RlZmluZSBCUkxBUElfS0VZX0NNRF9HVUlfQVJFQV9QUkVWIChCUkxBUElfS0VZX0NNRCgwKSArIDE0NCkKKy8qKiBzd2l0Y2ggdG8gdGhlIG5leHQgc2NyZWVuIGFyZWEgKi8KKyNkZWZpbmUgQlJMQVBJX0tFWV9DTURfR1VJX0FSRUFfTkVYVCAoQlJMQVBJX0tFWV9DTUQoMCkgKyAxNDUpCisvKiogbW92ZSB0byB0aGUgZmlyc3QgaXRlbSBpbiB0aGUgc2NyZWVuIGFyZWEgKi8KKyNkZWZpbmUgQlJMQVBJX0tFWV9DTURfR1VJX0lURU1fRlJTVCAoQlJMQVBJX0tFWV9DTUQoMCkgKyAxNDYpCisvKiogbW92ZSB0byB0aGUgcHJldmlvdXMgaXRlbSBpbiB0aGUgc2NyZWVuIGFyZWEgKi8KKyNkZWZpbmUgQlJMQVBJX0tFWV9DTURfR1VJX0lURU1fUFJFViAoQlJMQVBJX0tFWV9DTUQoMCkgKyAxNDcpCisvKiogbW92ZSB0byB0aGUgbmV4dCBpdGVtIGluIHRoZSBzY3JlZW4gYXJlYSAqLworI2RlZmluZSBCUkxBUElfS0VZX0NNRF9HVUlfSVRFTV9ORVhUIChCUkxBUElfS0VZX0NNRCgwKSArIDE0OCkKKy8qKiBtb3ZlIHRvIHRoZSBsYXN0IGl0ZW0gaW4gdGhlIHNjcmVlbiBhcmVhICovCisjZGVmaW5lIEJSTEFQSV9LRVlfQ01EX0dVSV9JVEVNX0xBU1QgKEJSTEFQSV9LRVlfQ01EKDApICsgMTQ5KQorLyoqIGRlY3JlYXNlIHNwZWFraW5nIHBpdGNoICovCisjZGVmaW5lIEJSTEFQSV9LRVlfQ01EX1NBWV9MT1dFUiAoQlJMQVBJX0tFWV9DTUQoMCkgKyAxNTApCisvKiogaW5jcmVhc2Ugc3BlYWtpbmcgcGl0Y2ggKi8KKyNkZWZpbmUgQlJMQVBJX0tFWV9DTURfU0FZX0hJR0hFUiAoQlJMQVBJX0tFWV9DTUQoMCkgKyAxNTEpCisvKiogc3BlYWsgZnJvbSB0b3Agb2Ygc2NyZWVuIHRocm91Z2ggYm90dG9tIG9mIHNjcmVlbiAqLworI2RlZmluZSBCUkxBUElfS0VZX0NNRF9TQVlfQUxMIChCUkxBUElfS0VZX0NNRCgwKSArIDE1MikKKy8qKiBzZXQgY29udHJhY3RlZC9jb21wdXRlciBicmFpbGxlICovCisjZGVmaW5lIEJSTEFQSV9LRVlfQ01EX0NPTlRSQUNURUQgKEJSTEFQSV9LRVlfQ01EKDApICsgMTUzKQorLyoqIHNldCBzaXgvZWlnaHQgZG90IGNvbXB1dGVyIGJyYWlsbGUgKi8KKyNkZWZpbmUgQlJMQVBJX0tFWV9DTURfQ09NUEJSTDYgKEJSTEFQSV9LRVlfQ01EKDApICsgMTU0KQorLyoqIHJlc2V0IHByZWZlcmVuY2VzIHRvIGRlZmF1bHRzICovCisjZGVmaW5lIEJSTEFQSV9LRVlfQ01EX1BSRUZSRVNFVCAoQlJMQVBJX0tFWV9DTUQoMCkgKyAxNTUpCisvKiogYnJpbmcgc2NyZWVuIGN1cnNvciB0byBjaGFyYWN0ZXIgKi8KKyNkZWZpbmUgQlJMQVBJX0tFWV9DTURfUk9VVEUgQlJMQVBJX0tFWV9DTUQoMSkKKy8qKiBzdGFydCBuZXcgY2xpcGJvYXJkIGF0IGNoYXJhY3RlciAqLworI2RlZmluZSBCUkxBUElfS0VZX0NNRF9DTElQX05FVyBCUkxBUElfS0VZX0NNRCgyKQorLyoqIGRlcHJlY2F0ZWQgZGVmaW5pdGlvbiBvZiBDTElQX05FVyAtIHN0YXJ0IG5ldyBjbGlwYm9hcmQgYXQgY2hhcmFjdGVyICovCisjZGVmaW5lIEJSTEFQSV9LRVlfQ01EX0NVVEJFR0lOIEJSTEFQSV9LRVlfQ01EKDIpCisvKiogYXBwZW5kIHRvIGNsaXBib2FyZCBmcm9tIGNoYXJhY3RlciAqLworI2RlZmluZSBCUkxBUElfS0VZX0NNRF9DTElQX0FERCBCUkxBUElfS0VZX0NNRCgzKQorLyoqIGRlcHJlY2F0ZWQgZGVmaW5pdGlvbiBvZiBDTElQX0FERCAtIGFwcGVuZCB0byBjbGlwYm9hcmQgZnJvbSBjaGFyYWN0ZXIgKi8KKyNkZWZpbmUgQlJMQVBJX0tFWV9DTURfQ1VUQVBQRU5EIEJSTEFQSV9LRVlfQ01EKDMpCisvKiogcmVjdGFuZ3VsYXIgY29weSB0byBjaGFyYWN0ZXIgKi8KKyNkZWZpbmUgQlJMQVBJX0tFWV9DTURfQ09QWV9SRUNUIEJSTEFQSV9LRVlfQ01EKDQpCisvKiogZGVwcmVjYXRlZCBkZWZpbml0aW9uIG9mIENPUFlfUkVDVCAtIHJlY3Rhbmd1bGFyIGNvcHkgdG8gY2hhcmFjdGVyICovCisjZGVmaW5lIEJSTEFQSV9LRVlfQ01EX0NVVFJFQ1QgQlJMQVBJX0tFWV9DTUQoNCkKKy8qKiBsaW5lYXIgY29weSB0byBjaGFyYWN0ZXIgKi8KKyNkZWZpbmUgQlJMQVBJX0tFWV9DTURfQ09QWV9MSU5FIEJSTEFQSV9LRVlfQ01EKDUpCisvKiogZGVwcmVjYXRlZCBkZWZpbml0aW9uIG9mIENPUFlfTElORSAtIGxpbmVhciBjb3B5IHRvIGNoYXJhY3RlciAqLworI2RlZmluZSBCUkxBUElfS0VZX0NNRF9DVVRMSU5FIEJSTEFQSV9LRVlfQ01EKDUpCisvKiogc3dpdGNoIHRvIHNwZWNpZmljIHZpcnR1YWwgdGVybWluYWwgKi8KKyNkZWZpbmUgQlJMQVBJX0tFWV9DTURfU1dJVENIVlQgQlJMQVBJX0tFWV9DTUQoNikKKy8qKiBnbyB1cCB0byBuZWFyZXN0IGxpbmUgd2l0aCBsZXNzIGluZGVudCB0aGFuIGNoYXJhY3RlciAqLworI2RlZmluZSBCUkxBUElfS0VZX0NNRF9QUklOREVOVCBCUkxBUElfS0VZX0NNRCg3KQorLyoqIGdvIGRvd24gdG8gbmVhcmVzdCBsaW5lIHdpdGggbGVzcyBpbmRlbnQgdGhhbiBjaGFyYWN0ZXIgKi8KKyNkZWZpbmUgQlJMQVBJX0tFWV9DTURfTlhJTkRFTlQgQlJMQVBJX0tFWV9DTUQoOCkKKy8qKiBkZXNjcmliZSBjaGFyYWN0ZXIgKi8KKyNkZWZpbmUgQlJMQVBJX0tFWV9DTURfREVTQ0NIQVIgQlJMQVBJX0tFWV9DTUQoOSkKKy8qKiBwbGFjZSBsZWZ0IGVuZCBvZiBicmFpbGxlIHdpbmRvdyBhdCBjaGFyYWN0ZXIgKi8KKyNkZWZpbmUgQlJMQVBJX0tFWV9DTURfU0VUTEVGVCBCUkxBUElfS0VZX0NNRCgxMCkKKy8qKiByZW1lbWJlciBjdXJyZW50IGJyYWlsbGUgd2luZG93IHBvc2l0aW9uICovCisjZGVmaW5lIEJSTEFQSV9LRVlfQ01EX1NFVE1BUksgQlJMQVBJX0tFWV9DTUQoMTEpCisvKiogZ28gdG8gcmVtZW1iZXJlZCBicmFpbGxlIHdpbmRvdyBwb3NpdGlvbiAqLworI2RlZmluZSBCUkxBUElfS0VZX0NNRF9HT1RPTUFSSyBCUkxBUElfS0VZX0NNRCgxMikKKy8qKiBnbyB0byBzZWxlY3RlZCBsaW5lICovCisjZGVmaW5lIEJSTEFQSV9LRVlfQ01EX0dPVE9MSU5FIEJSTEFQSV9LRVlfQ01EKDEzKQorLyoqIGdvIHVwIHRvIG5lYXJlc3QgbGluZSB3aXRoIGRpZmZlcmVudCBjaGFyYWN0ZXIgKi8KKyNkZWZpbmUgQlJMQVBJX0tFWV9DTURfUFJESUZDSEFSIEJSTEFQSV9LRVlfQ01EKDE0KQorLyoqIGdvIGRvd24gdG8gbmVhcmVzdCBsaW5lIHdpdGggZGlmZmVyZW50IGNoYXJhY3RlciAqLworI2RlZmluZSBCUkxBUElfS0VZX0NNRF9OWERJRkNIQVIgQlJMQVBJX0tFWV9DTUQoMTUpCisvKiogY29weSBjaGFyYWN0ZXJzIHRvIGNsaXBib2FyZCAqLworI2RlZmluZSBCUkxBUElfS0VZX0NNRF9DTElQX0NPUFkgQlJMQVBJX0tFWV9DTUQoMTYpCisvKiogZGVwcmVjYXRlZCBkZWZpbml0aW9uIG9mIENMSVBfQ09QWSAtIGNvcHkgY2hhcmFjdGVycyB0byBjbGlwYm9hcmQgKi8KKyNkZWZpbmUgQlJMQVBJX0tFWV9DTURfQ09QWUNIQVJTIEJSTEFQSV9LRVlfQ01EKDE2KQorLyoqIGFwcGVuZCBjaGFyYWN0ZXJzIHRvIGNsaXBib2FyZCAqLworI2RlZmluZSBCUkxBUElfS0VZX0NNRF9DTElQX0FQUEVORCBCUkxBUElfS0VZX0NNRCgxNykKKy8qKiBkZXByZWNhdGVkIGRlZmluaXRpb24gb2YgQ0xJUF9BUFBFTkQgLSBhcHBlbmQgY2hhcmFjdGVycyB0byBjbGlwYm9hcmQgKi8KKyNkZWZpbmUgQlJMQVBJX0tFWV9DTURfQVBORENIQVJTIEJSTEFQSV9LRVlfQ01EKDE3KQorLyoqIGluc2VydCBjbGlwYm9hcmQgaGlzdG9yeSBlbnRyeSBhZnRlciBzY3JlZW4gY3Vyc29yICovCisjZGVmaW5lIEJSTEFQSV9LRVlfQ01EX1BBU1RFX0hJU1RPUlkgQlJMQVBJX0tFWV9DTUQoMTgpCisvKiogc2V0IHRleHQgdGFibGUgKi8KKyNkZWZpbmUgQlJMQVBJX0tFWV9DTURfU0VUX1RFWFRfVEFCTEUgQlJMQVBJX0tFWV9DTUQoMTkpCisvKiogc2V0IGF0dHJpYnV0ZXMgdGFibGUgKi8KKyNkZWZpbmUgQlJMQVBJX0tFWV9DTURfU0VUX0FUVFJJQlVURVNfVEFCTEUgQlJMQVBJX0tFWV9DTUQoMjApCisvKiogc2V0IGNvbnRyYWN0aW9uIHRhYmxlICovCisjZGVmaW5lIEJSTEFQSV9LRVlfQ01EX1NFVF9DT05UUkFDVElPTl9UQUJMRSBCUkxBUElfS0VZX0NNRCgyMSkKKy8qKiBzZXQga2V5Ym9hcmQgdGFibGUgKi8KKyNkZWZpbmUgQlJMQVBJX0tFWV9DTURfU0VUX0tFWUJPQVJEX1RBQkxFIEJSTEFQSV9LRVlfQ01EKDIyKQorLyoqIHNldCBsYW5ndWFnZSBwcm9maWxlICovCisjZGVmaW5lIEJSTEFQSV9LRVlfQ01EX1NFVF9MQU5HVUFHRV9QUk9GSUxFIEJSTEFQSV9LRVlfQ01EKDIzKQorLyoqIGJyaW5nIHNjcmVlbiBjdXJzb3IgdG8gbGluZSAqLworI2RlZmluZSBCUkxBUElfS0VZX0NNRF9ST1VURV9MSU5FIEJSTEFQSV9LRVlfQ01EKDI0KQorLyoqIHJlZnJlc2ggYnJhaWxsZSBsaW5lICovCisjZGVmaW5lIEJSTEFQSV9LRVlfQ01EX1JFRlJFU0hfTElORSBCUkxBUElfS0VZX0NNRCgyNSkKKy8qKiBzdGFydCB0ZXh0IHNlbGVjdGlvbiAqLworI2RlZmluZSBCUkxBUElfS0VZX0NNRF9UWFRTRUxfU1RBUlQgQlJMQVBJX0tFWV9DTUQoMjYpCisvKiogc2V0IHRleHQgc2VsZWN0aW9uICovCisjZGVmaW5lIEJSTEFQSV9LRVlfQ01EX1RYVFNFTF9TRVQgQlJMQVBJX0tFWV9DTUQoMjcpCisvKiogYnJpbmcgc3BlZWNoIGN1cnNvciB0byBjaGFyYWN0ZXIgKi8KKyNkZWZpbmUgQlJMQVBJX0tFWV9DTURfUk9VVEVfU1BFRUNIIEJSTEFQSV9LRVlfQ01EKDI4KQorLyoqIGJpbmQgdG8gc3BlY2lmaWMgdmlydHVhbCB0ZXJtaW5hbCAqLworI2RlZmluZSBCUkxBUElfS0VZX0NNRF9TRUxFQ1RWVCBCUkxBUElfS0VZX0NNRCgzMCkKKy8qKiByZW5kZXIgYW4gYWxlcnQgKi8KKyNkZWZpbmUgQlJMQVBJX0tFWV9DTURfQUxFUlQgQlJMQVBJX0tFWV9DTUQoMzEpCisvKiogdHlwZSBicmFpbGxlIGRvdHMgKi8KKyNkZWZpbmUgQlJMQVBJX0tFWV9DTURfUEFTU0RPVFMgQlJMQVBJX0tFWV9DTUQoMzQpCisvKiogQVQgKHNldCAyKSBrZXlib2FyZCBzY2FuIGNvZGUgKi8KKyNkZWZpbmUgQlJMQVBJX0tFWV9DTURfUEFTU0FUIEJSTEFQSV9LRVlfQ01EKDM1KQorLyoqIFhUIChzZXQgMSkga2V5Ym9hcmQgc2NhbiBjb2RlICovCisjZGVmaW5lIEJSTEFQSV9LRVlfQ01EX1BBU1NYVCBCUkxBUElfS0VZX0NNRCgzNikKKy8qKiBQUy8yIChzZXQgMykga2V5Ym9hcmQgc2NhbiBjb2RlICovCisjZGVmaW5lIEJSTEFQSV9LRVlfQ01EX1BBU1NQUzIgQlJMQVBJX0tFWV9DTUQoMzcpCisvKiogc3dpdGNoIHRvIGNvbW1hbmQgY29udGV4dCAqLworI2RlZmluZSBCUkxBUElfS0VZX0NNRF9DT05URVhUIEJSTEFQSV9LRVlfQ01EKDM4KQorLyoqIGN1cnJlbnQgcmVhZGluZyBsb2NhdGlvbiAqLworI2RlZmluZSBCUkxBUElfS0VZX0NNRF9UT1VDSF9BVCBCUkxBUElfS0VZX0NNRCgzOSkKKy8qKiBleGVjdXRlIGNvbW1hbmQgbWFjcm8gKi8KKyNkZWZpbmUgQlJMQVBJX0tFWV9DTURfTUFDUk8gQlJMQVBJX0tFWV9DTUQoNDApCisvKiogcnVuIGhvc3QgY29tbWFuZCAqLworI2RlZmluZSBCUkxBUElfS0VZX0NNRF9IT1NUQ01EIEJSTEFQSV9LRVlfQ01EKDQxKQorLyoqIGVuYWJsZSBmZWF0dXJlICovCisjZGVmaW5lIEJSTEFQSV9LRVlfRkxHX1RPR0dMRV9PTiBCUkxBUElfS0VZX0ZMRygwWDAxMDApCisvKiogZGlzYWJsZSBmZWF0dXJlICovCisjZGVmaW5lIEJSTEFQSV9LRVlfRkxHX1RPR0dMRV9PRkYgQlJMQVBJX0tFWV9GTEcoMFgwMjAwKQorLyoqIG1hc2sgZm9yIGFsbCB0b2dnbGUgZmxhZ3MgKi8KKyNkZWZpbmUgQlJMQVBJX0tFWV9GTEdfVE9HR0xFX01BU0sgKEJSTEFQSV9LRVlfRkxHX1RPR0dMRV9PTiB8IEJSTEFQSV9LRVlfRkxHX1RPR0dMRV9PRkYpCisvKiogYnJpbmcgc2NyZWVuIGN1cnNvciBpbnRvIGJyYWlsbGUgd2luZG93IGFmdGVyIGZ1bmN0aW9uICovCisjZGVmaW5lIEJSTEFQSV9LRVlfRkxHX01PVElPTl9ST1VURSBCUkxBUElfS0VZX0ZMRygwWDA0MDApCisvKiogc2NhbGUgYXJnPTBYMDAtMFhGRiB0byBzY3JlZW4gaGVpZ2h0ICovCisjZGVmaW5lIEJSTEFQSV9LRVlfRkxHX01PVElPTl9TQ0FMRUQgQlJMQVBJX0tFWV9GTEcoMFgwODAwKQorLyoqIGdvIHRvIGJlZ2lubmluZyBvZiBsaW5lICovCisjZGVmaW5lIEJSTEFQSV9LRVlfRkxHX01PVElPTl9UT0xFRlQgQlJMQVBJX0tFWV9GTEcoMFgxMDAwKQorLyoqIHNoaWZ0IGtleSBwcmVzc2VkICovCisjZGVmaW5lIEJSTEFQSV9LRVlfRkxHX1NISUZUIEJSTEFQSV9LRVlfRkxHKDBYMDEpCisvKiogY29udmVydCB0byB1cHBlcmNhc2UgKi8KKyNkZWZpbmUgQlJMQVBJX0tFWV9GTEdfVVBQRVIgQlJMQVBJX0tFWV9GTEcoMFgwMikKKy8qKiBjb250cm9sIGtleSBwcmVzc2VkICovCisjZGVmaW5lIEJSTEFQSV9LRVlfRkxHX0NPTlRST0wgQlJMQVBJX0tFWV9GTEcoMFgwNCkKKy8qKiBtZXRhIChsZWZ0IGFsdCkga2V5IHByZXNzZWQgKi8KKyNkZWZpbmUgQlJMQVBJX0tFWV9GTEdfTUVUQSBCUkxBUElfS0VZX0ZMRygwWDA4KQorLyoqIGFsdGdyIChyaWdodCBhbHQpIGtleSBwcmVzc2VkICovCisjZGVmaW5lIEJSTEFQSV9LRVlfRkxHX0FMVEdSIEJSTEFQSV9LRVlfRkxHKDBYMTApCisvKiogZ3VpICh3aW5kb3dzKSBrZXkgcHJlc3NlZCAqLworI2RlZmluZSBCUkxBUElfS0VZX0ZMR19HVUkgQlJMQVBJX0tFWV9GTEcoMFgyMCkKKy8qKiBwcmVmaXggd2l0aCBlc2NhcGUgKi8KKyNkZWZpbmUgQlJMQVBJX0tFWV9GTEdfRVNDQVBFRCBCUkxBUElfS0VZX0ZMRygwWDQwKQorLyoqIGl0IGlzIGEgcmVsZWFzZSBzY2FuIGNvZGUgKi8KKyNkZWZpbmUgQlJMQVBJX0tFWV9GTEdfS0JEX1JFTEVBU0UgQlJMQVBJX0tFWV9GTEcoMFgwMTAwKQorLyoqIGl0IGlzIGFuIGVtdWxhdGlvbiAwIHNjYW4gY29kZSAqLworI2RlZmluZSBCUkxBUElfS0VZX0ZMR19LQkRfRU1VTDAgQlJMQVBJX0tFWV9GTEcoMFgwMjAwKQorLyoqIGl0IGlzIGFuIGVtdWxhdGlvbiAxIHNjYW4gY29kZSAqLworI2RlZmluZSBCUkxBUElfS0VZX0ZMR19LQkRfRU1VTDEgQlJMQVBJX0tFWV9GTEcoMFgwNDAwKQorLyoqIHVwcGVyLWxlZnQgZG90IG9mIHN0YW5kYXJkIGJyYWlsbGUgY2VsbCAqLworI2RlZmluZSBCUkxBUElfRE9UMSAxCisvKiogbWlkZGxlLWxlZnQgZG90IG9mIHN0YW5kYXJkIGJyYWlsbGUgY2VsbCAqLworI2RlZmluZSBCUkxBUElfRE9UMiAyCisvKiogbG93ZXItbGVmdCBkb3Qgb2Ygc3RhbmRhcmQgYnJhaWxsZSBjZWxsICovCisjZGVmaW5lIEJSTEFQSV9ET1QzIDQKKy8qKiB1cHBlci1yaWdodCBkb3Qgb2Ygc3RhbmRhcmQgYnJhaWxsZSBjZWxsICovCisjZGVmaW5lIEJSTEFQSV9ET1Q0IDgKKy8qKiBtaWRkbGUtcmlnaHQgZG90IG9mIHN0YW5kYXJkIGJyYWlsbGUgY2VsbCAqLworI2RlZmluZSBCUkxBUElfRE9UNSAxNgorLyoqIGxvd2VyLXJpZ2h0IGRvdCBvZiBzdGFuZGFyZCBicmFpbGxlIGNlbGwgKi8KKyNkZWZpbmUgQlJMQVBJX0RPVDYgMzIKKy8qKiBsb3dlci1sZWZ0IGRvdCBvZiBjb21wdXRlciBicmFpbGxlIGNlbGwgKi8KKyNkZWZpbmUgQlJMQVBJX0RPVDcgNjQKKy8qKiBsb3dlci1yaWdodCBkb3Qgb2YgY29tcHV0ZXIgYnJhaWxsZSBjZWxsICovCisjZGVmaW5lIEJSTEFQSV9ET1Q4IDEyOAorLyoqIGNob3JkIChzcGFjZSBiYXIgb24gYnJhaWxsZSBrZXlib2FyZCkgKi8KKyNkZWZpbmUgQlJMQVBJX0RPVEMgMjU2CisKKy8qKiBIZWxwZXIgbWFjcm8gdG8gZWFzaWx5IHByb2R1Y2UgYnJhaWxsZSBwYXR0ZXJucyAqLworI2RlZmluZSBCUkxBUElfRE9UUyhkb3QxLCBkb3QyLCBkb3QzLCBkb3Q0LCBkb3Q1LCBkb3Q2LCBkb3Q3LCBkb3Q4KSAoXAorICAoKGRvdDEpPyBCUkxBUElfRE9UMTogMCkgfCBcCisgICgoZG90Mik/IEJSTEFQSV9ET1QyOiAwKSB8IFwKKyAgKChkb3QzKT8gQlJMQVBJX0RPVDM6IDApIHwgXAorICAoKGRvdDQpPyBCUkxBUElfRE9UNDogMCkgfCBcCisgICgoZG90NSk/IEJSTEFQSV9ET1Q1OiAwKSB8IFwKKyAgKChkb3Q2KT8gQlJMQVBJX0RPVDY6IDApIHwgXAorICAoKGRvdDcpPyBCUkxBUElfRE9UNzogMCkgfCBcCisgICgoZG90OCk/IEJSTEFQSV9ET1Q4OiAwKSBcCispCisKKy8qKiBzcGFjZSBrZXkgKi8KKyNkZWZpbmUgQlJMQVBJX0RPVF9DSE9SRCAyNTYKKy8qKiBAfSAqLworCisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmIC8qIF9fY3BsdXNwbHVzICovCisKKyNlbmRpZiAvKiBCUkxBUElfSU5DTFVERURfQ09OU1RBTlRTICovCmRpZmYgLS1naXQgYS9Qcm9ncmFtcy9icmxhcGlfa2V5Y29kZXMuaCBiL1Byb2dyYW1zL2JybGFwaV9rZXljb2Rlcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVkZWMzOTEKLS0tIC9kZXYvbnVsbAorKysgYi9Qcm9ncmFtcy9icmxhcGlfa2V5Y29kZXMuaApAQCAtMCwwICsxLDIzNCBAQAorLyoKKyAqIGxpYmJybGFwaSAtIEEgbGlicmFyeSBwcm92aWRpbmcgYWNjZXNzIHRvIGJyYWlsbGUgdGVybWluYWxzIGZvciBhcHBsaWNhdGlvbnMuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDAyLTIwMjMgYnkKKyAqICAgU2FtdWVsIFRoaWJhdWx0IDxTYW11ZWwuVGhpYmF1bHRAZW5zLWx5b24ub3JnPgorICogICBTw6liYXN0aWVuIEhpbmRlcmVyIDxTZWJhc3RpZW4uSGluZGVyZXJAZW5zLWx5b24ub3JnPgorICoKKyAqIGxpYmJybGFwaSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorICoKKyAqIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyAqLworCisvKiogXGZpbGUKKyAqLworCisjaWZuZGVmIEJSTEFQSV9JTkNMVURFRF9LRVlDT0RFUworI2RlZmluZSBCUkxBUElfSU5DTFVERURfS0VZQ09ERVMKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZiAvKiBfX2NwbHVzcGx1cyAqLworCisvKiogXGRlZmdyb3VwIGJybGFwaV9rZXljb2RlcyBUeXBlcyBhbmQgRGVmaW5lcyBmb3IgXGUgQnJsQVBJIEtleSBDb2RlcworICoKKyAqIEtleSBjb2RlcyBhcmUgdW5zaWduZWQgNjQgYml0IGludGVnZXJzLiAgVGhpcyA2NC1iaXQgc3BhY2UgaXMgc3BsaXQgaW50byAzCisgKiBwYXJ0czoKKyAqCisgKiAtIGJpdHMgNjMtMzIgKEJSTEFQSV9LRVlfRkxBR1NfTUFTSyksIGZsYWdzOiBiaXRzIDM5LTMyIGFyZSBzdGFuZGFyZCBYCisgKiBtb2RpZmllcnMgKHNoaWZ0LCBjb250cm9sLCBtZXRhLCAuLi4pLiBPdGhlciBmbGFncyBhcmUgdXNlZCBmb3Igc29tZSBjb21tYW5kcywKKyAqIHNlZSBkb2N1bWVudGF0aW9uIG9mIEJSTEFQSV9LRVlfRkxHXyogZm9yIHRoZWlyIHJlc3BlY3RpdmUgdXNlcy4KKyAqIC0gYml0cyAzMS0yOSAoQlJMQVBJX0tFWV9UWVBFX01BU0spLCBrZXkgdHlwZTogZWl0aGVyIEJSTEFQSV9LRVlfVFlQRV9DTUQgZm9yCisgKiBicmFpbGxlIGNvbW1hbmRzLCBvciBCUkxBUElfS0VZX1RZUEVfU1lNIGZvciBzdGFuZGFyZCBYIGtleXN5bXMuCisgKiAtIGJpdHMgMjgtMCAoQlJMQVBJX0tFWV9DT0RFX01BU0spLCBrZXkgY29kZTogZm9yIGJyYWlsbGUgY29tbWFuZHMsIHNlZQorICogQlJMQVBJX0tFWV9DTURfKiA7IGZvciBzdGFuZGFyZCBYIGtleXN5bXMsIHRoaXMgaXMgdGhlIGtleXN5bSB2YWx1ZSwgc2VlCisgKiBYMTEgZG9jdW1lbnRhdGlvbiwgYSBjb21wbGV0ZSBsaXN0IGlzIHByb2JhYmx5IGF2YWlsYWJsZSBvbiB5b3VyIHN5c3RlbSBpbgorICogL3Vzci9pbmNsdWRlL1gxMS9rZXlzeW1kZWYuaAorICoKKyAqIFRoZSBzZWNvbmQgYW5kIHRoaXJkIHBhcnQgYXJlIHRodXMgbWFuZGF0b3J5IHRvIHRlbGwgdGhlIHR5cGUgb2Yga2V5Y29kZSBhbmQKKyAqIHRoZSB2YWx1ZSBvZiB0aGUga2V5Y29kZSwgYW5kIHRoZSBmaXJzdCBwYXJ0IGNvbnRhaW5zIG9wdGlvbmFsIGZsYWdzLgorICoKKyAqIFRoZSB0aGlyZCBwYXJ0IGlzIGl0c2VsZiBzcGxpdCBpbnRvIHR3byBwYXJ0czogYSBjb21tYW5kIG51bWJlciBhbmQgYSBjb21tYW5kCisgKiB2YWx1ZS4gIFRoZSByZWxhdGl2ZSBzaXplcyBvZiB0aGVzZSBwYXJ0cyB2YXJ5IGFjY29yZGluZyB0byB0aGUga2V5IHR5cGUuCisgKgorICogRm9yIGEgYnJhaWxsZSBjb21tYW5kLCBiaXRzIDI4LTE2IChCUkxBUElfS0VZX0NNRF9CTEtfTUFTSykgaG9sZCB0aGUgYnJhaWxsZQorICogY29tbWFuZCBudW1iZXIsIHdoaWxlIGJpdHMgMTUtMCAoQlJMQVBJX0tFWV9DTURfQVJHX01BU0spIGhvbGQgdGhlIGNvbW1hbmQKKyAqIHZhbHVlLgorICoKKyAqIFRoZSBicmxhcGlfZXhwYW5kS2V5Q29kZSgpIGZ1bmN0aW9uIG1heSBiZSB1c2VkIGZvciBzcGxpdHRpbmcga2V5IGNvZGVzIGludG8KKyAqIHRoZXNlIHBhcnRzLgorICoKKyAqIEZvciBhIFgga2V5c3ltLCBpZiBpdCBpcyBhIHVuaWNvZGUga2V5c3ltICgweDF1dnd4eXopLCB0aGVuIHRoZSBjb21tYW5kCisgKiBudW1iZXIgcGFydCBpcyAweDEwMDAwMDAgYW5kIHRoZSB2YWx1ZSBwYXJ0IGlzIDB4dXZ3eHl6LiBFbHNlLCB0aGUgY29tbWFuZAorICogcGFydCBpcyBoZWxkIGJ5IGJpdHMgMjgtOCBhbmQgdGhlIHZhbHVlIHBhcnQgaXMgaGVsZCBieSBiaXRzIDctMC4gVGhpcworICogcGVybWl0cyB0byBlYXNpbHkgaGFuZGxlIHVzdWFsIGNhc2VzIGxpa2UgMHgwMHh5IChsYXRpbjEpLCAweDAxeHkgKGxhdGluMiksCisgKiBYS19CYWNrc3BhY2UgKDB4ZmYwOCwgYmFja3NwYWNlKSwgWEtfVGFiICgweGZmMDksIHRhYiksIC4uLgorICoKKyAqIEZvciBpbnN0YW5jZSwgaWYga2V5ID09IDB4MDAwMDAwMDAyMDAxMDAwOCwKKyAqIC0gKGtleSAmIEJSTEFQSV9LRVlfVFlQRV9NQVNLKSA9PSBCUkxBUElfS0VZX1RZUEVfQ01ELCBzbyBpdCdzIGEgYnJhaWxsZQorICogY29tbWFuZAorICogLSAoa2V5ICYgQlJMQVBJX0tFWV9DTURfQkxLX01BU0spID09IEJSTEFQSV9LRVlfQ01EX1JPVVRFLCBzbyBpdCdzIHRoZQorICogYnJhaWxsZSByb3V0ZSBjb21tYW5kLgorICogLSAoa2V5ICYgQlJMQVBJX0tFWV9DTURfQVJHX01BU0spID09IDgsIHNvIHRoZSBoaWdobGlnaHRlZCBjZWxsIGlzIHRoZSA5dGgKKyAqIG9uZSAoY2VsbHMgYXJlIG51bWJlcmVkIGZyb20gMCkKKyAqIC0gKGtleSAmIEJSTEFQSV9LRVlfRkxBR1NfTUFTSykgPT0gMCwgc28gbm8gbW9kaWZpZXIga2V5IHdhcyBwcmVzc2VkIGR1cmluZworICogdGhlIGNvbW1hbmQsIGFuZCBubyBwYXJ0aWN1bGFyIGZsYWcgYXBwbGllcyB0byB0aGUgY29tbWFuZC4KKyAqCisgKiBpZiBrZXkgPT0gMHgwMDAwMDAwMTAwMDBGRjA5LAorICogLSAoa2V5ICYgQlJMQVBJX0tFWV9UWVBFX01BU0spID09IEJSTEFQSV9LRVlfVFlQRV9TWU0sIHNvIGl0J3MgYSBrZXlzeW0KKyAqIC0gKGtleSAmIEJSTEFQSV9LRVlfQ09ERV9NQVNLKSA9PSBYS19UYWIsIHNvIGl0J3MgdGhlIHRhYiBrZXkuCisgKiBCUkxBUElfS0VZX1NZTV9UQUIgY2FuIGFsc28gYmUgdXNlZCBoZXJlLCBhcyB3ZWxsIGFzIGEgZmV3IG90aGVyCisgKiBCUkxBUElfS0VZX1NZTV8qIGNvbnN0YW50cyB3aGljaCBhcmUgcHJvdmlkZWQgdG8gYXZvaWQgaGF2aW5nIHRvIGluY2x1ZGUKKyAqIFgxMS9rZXlzeW1kZWYuaAorICogLSAoa2V5ICYgQlJMQVBJX0tFWV9GTEFHU19NQVNLKSA9PSBCUkxBUElfS0VZX0ZMR19TSElGVCwgc28gdGhlIHNoaWZ0CisgKiBtb2RpZmllciB3YXMgcHJlc3NlZCBkdXJpbmcgdGhlIGNvbW1hbmQuCisgKgorICogaW4gdGhlIFgxMSBzdGFuZGFyZCBzb21lIGtleXN5bXMgYXJlIGRpcmVjdGx5IHVuaWNvZGUsIGZvciBpbnN0YW5jZSBpZgorICoga2V5ID09IDB4MDAwMDAwMDAwMTAwMUVBMCwKKyAqIC0gKGtleSAmIEJSTEFQSV9LRVlfVFlQRV9NQVNLKSA9PSBCUkxBUElfS0VZX1RZUEVfU1lNLCBzbyBpdCdzIGEga2V5c3ltCisgKiAtIChrZXkgJiBCUkxBUElfS0VZX1NZTV9VTklDT0RFKSAhPSAwIHNvIGl0J3MgYSB1bmljb2RlIGtleXN5bSwgd2hvc2UgdmFsdWUKKyAqIGlzIGtleSAmIChCUkxBUElfS0VZX1NZTV9VTklDT0RFLTEpLiAgT2YgY291cnNlLCBvbmUgY2FuIGFsc28gY29uc2lkZXIKKyAqIChrZXkgJiBCUkxBUElfS0VZX0NPREVfTUFTSykgPT0gWEtfQWJlbG93ZG90CisgKiAtIChrZXkgJiBCUkxBUElfS0VZX0ZMQUdTX01BU0spID09IDAsIHNvIG5vIG1vZGlmaWVyIGtleSB3YXMgcHJlc3NlZCBkdXJpbmcKKyAqIHRoZSBjb21tYW5kLCBhbmQgbm8gcGFydGljdWxhciBmbGFnIGFwcGxpZXMgdG8gdGhlIGNvbW1hbmQuCisgKgorICogYnJsYXBpX2lnbm9yZUtleVJhbmdlcygpIGFuZCBicmxhcGlfYWNjZXB0S2V5UmFuZ2VzKCkgbWFuaXB1bGF0ZSBrZXljb2RlCisgKiByYW5nZXMuIFRoZXkgYXJlIGNvbXBvc2VkIG9mIDIga2V5Y29kZXM6IHRoZSAiZmlyc3QiIGFuZCB0aGUgImxhc3QiCisgKiBib3VuZGFyaWVzLiBUaGUgcmFuZ2UgZXhwcmVzc2VkIGJ5IHRoZXNlIHR3byBrZXljb2RlcyBpcyB0aGUgc2V0IG9mIGtleWNvZGVzCisgKiB3aG9zZSBsb3dlciBwYXJ0IChiaXRzIDMxLTApIGlzIGJldHdlZW4gdGhlIGxvd2VyIHBhcnQgb2YgdGhlICJmaXJzdCIga2V5Y29kZQorICogYW5kIHRoZSAibGFzdCIga2V5Y29kZSAoaW5jbHVzaXZlKSwgYW5kIHdob3NlIGhpZ2ggcGFydCAoYml0cyA2My0zMiksIHRoZQorICogZmxhZ3MsIGNvbnRhaW5zIGF0IGxlYXN0IHRoZSBmbGFncyBvZiB0aGUgImZpcnN0IiBrZXljb2RlLCBhbmQgYXQgbW9zdCB0aGUKKyAqIGZsYWdzIG9mIHRoZSAibGFzdCIga2V5Y29kZS4gU2V0dGluZyB0aGUgImZpcnN0IiBhbmQgImxhc3QiIGtleWNvZGUgdG8gdGhlCisgKiBzYW1lIHZhbHVlIGV4cHJlc3Mgb25seSBvbmUga2V5Y29kZSwgZm9yIGluc3RhbmNlLiBTZXR0aW5nIHRoZSBmaXJzdCBhbmQgbGFzdAorICoga2V5Y29kZSB0byB0aGUgc2FtZSBjb21tYW5kIGNvZGUgYnV0IHNldHRpbmcgbm8gZmxhZ3MgaW4gdGhlICJmaXJzdCIga2V5Y29kZQorICogYW5kIHNldHRpbmcgb25lIGZsYWcgaW4gdGhlICJsYXN0IiBrZXljb2RlIGV4cHJlc3NlcyBvbmx5IHR3byBrZXljb2RlLCB3aXRoCisgKiB0aGUgc2FtZSBsb3dlciBwYXJ0IGFuZCBubyBmbGFncyBzZXQgZXhjZXB0IHBvc3NpYmx5IHRoZSBmbGFnIHRoYXQgaXMgc2V0IGluCisgKiB0aGUgImxhc3QiIGtleWNvZGUuIFNldHRpbmcgb25lIGZsYWcgaSBpbiB0aGUgImZpcnN0IiBrZXljb2RlIGFuZCBzZXR0aW5nCisgKiB0aGUgc2FtZSBmbGFnIHBsdXMgYW5vdGhlciBmbGFnIGogaW4gdGhlICJsYXN0IiBrZXljb2RlIGV4cHJlc3NlcyB0aGF0IHRoZQorICoga2V5Y29kZXMgaW4gdGhlIHJhbmdlIGhhdmUgZmxhZyBpIHNldCBhbmQgcG9zc2libHkgZmxhZyBqIHNldCwgYnV0IG5vIG90aGVyCisgKiBmbGFnLgorICogQHsKKyAqLwordHlwZWRlZiB1aW50NjRfdCBicmxhcGlfa2V5Q29kZV90OworCisvKiogRGVmaW5lIGEgYnJsYXBpX2tleUNvZGVfdCBjb25zdGFudCAqLworI2RlZmluZSBCUkxBUElfS0VZQ09ERV9DKHZhbHVlKSBVSU5UNjRfQyh2YWx1ZSkKKworLyoqIEhleGFkZWNpbWFsIHByaW50IGZvcm1hdCBmb3IgYnJsYXBpX2tleUNvZGVfdCAqLworI2RlZmluZSBCUkxBUElfUFJJeEtFWUNPREUgUFJJeDY0CisKKy8qKiBVbnNpZ25lZCBkZWNpbWFsIHByaW50IGZvcm1hdCBmb3IgYnJsYXBpX2tleUNvZGVfdCAqLworI2RlZmluZSBCUkxBUElfUFJJdUtFWUNPREUgUFJJdTY0CisKKy8qKiBCcmxhcGlfa2V5Q29kZV90J3MgYmlnZ2VzdCB2YWx1ZQorICoKKyAqIEFzIGRlZmluZWQgaW4gXGMgPHN0ZGludC5oPiAqLworI2RlZmluZSBCUkxBUElfS0VZX01BWCBVSU5UNjRfQygwWEZGRkZGRkZGRkZGRkZGRkYpCisKKy8qKgorICogTWFzayBmb3IgZmxhZ3Mgb2YgYnJsYXBpX2tleUNvZGVfdAorICovCisjZGVmaW5lIEJSTEFQSV9LRVlfRkxBR1NfTUFTSwkJVUlOVDY0X0MoMFhGRkZGRkZGRjAwMDAwMDAwKQorLyoqIFNoaWZ0IGZvciBmbGFncyBvZiBicmxhcGlfa2V5Q29kZV90ICovCisjZGVmaW5lIEJSTEFQSV9LRVlfRkxBR1NfU0hJRlQJCTMyCisKKyNkZWZpbmUgQlJMQVBJX0tFWV9GTEcodikJCSgoYnJsYXBpX2tleUNvZGVfdCkodikgPDwgQlJMQVBJX0tFWV9GTEFHU19TSElGVCkKKy8qKiBTdGFuZGFyZCBYIG1vZGlmaWVycyAqLworLyoqIE1vZDEgbW9kaWZpZXIgKEFLQSBtZXRhKSAqLworI2RlZmluZSBCUkxBUElfS0VZX0ZMR19NT0QxCQlCUkxBUElfS0VZX0ZMRygweDAwMDAwMDA4KQorLyoqIE1vZDIgbW9kaWZpZXIgKHVzdWFsbHkgbnVtbG9jaykgKi8KKyNkZWZpbmUgQlJMQVBJX0tFWV9GTEdfTU9EMgkJQlJMQVBJX0tFWV9GTEcoMHgwMDAwMDAxMCkKKy8qKiBNb2QzIG1vZGlmaWVyICovCisjZGVmaW5lIEJSTEFQSV9LRVlfRkxHX01PRDMJCUJSTEFQSV9LRVlfRkxHKDB4MDAwMDAwMjApCisvKiogTW9kNCBtb2RpZmllciAqLworI2RlZmluZSBCUkxBUElfS0VZX0ZMR19NT0Q0CQlCUkxBUElfS0VZX0ZMRygweDAwMDAwMDQwKQorLyoqIE1vZDUgbW9kaWZpZXIgKHVzdWFsbHkgQWx0LUdyKSAqLworI2RlZmluZSBCUkxBUElfS0VZX0ZMR19NT0Q1CQlCUkxBUElfS0VZX0ZMRygweDAwMDAwMDgwKQorCisKKy8qKgorICogTWFzayBmb3IgdHlwZSBvZiBicmxhcGlfa2V5Q29kZV90CisgKi8KKyNkZWZpbmUgQlJMQVBJX0tFWV9UWVBFX01BU0sJCVVJTlQ2NF9DKDBYMDAwMDAwMDBFMDAwMDAwMCkKKy8qKiBTaGlmdCBmb3IgdHlwZSBvZiBicmxhcGlfa2V5Q29kZV90ICovCisjZGVmaW5lIEJSTEFQSV9LRVlfVFlQRV9TSElGVAkJMjkKKy8qKiBCcmFpbGxlIGNvbW1hbmQgYnJsYXBpX2tleUNvZGVfdCAqLworI2RlZmluZSBCUkxBUElfS0VZX1RZUEVfQ01ECQlVSU5UNjRfQygwWDAwMDAwMDAwMjAwMDAwMDApCisvKiogWCBLZXlzeW0gYnJsYXBpX2tleUNvZGVfdCAqLworI2RlZmluZSBCUkxBUElfS0VZX1RZUEVfU1lNCQlVSU5UNjRfQygwWDAwMDAwMDAwMDAwMDAwMDApCisKKy8qKgorICogTWFzayBmb3IgY29kZSBvZiBicmxhcGlfa2V5Q29kZV90CisgKi8KKyNkZWZpbmUgQlJMQVBJX0tFWV9DT0RFX01BU0sJCVVJTlQ2NF9DKDBYMDAwMDAwMDAxRkZGRkZGRikKKy8qKiBTaGlmdCBmb3IgY29kZSBvZiBicmxhcGlfa2V5Q29kZV90ICovCisjZGVmaW5lIEJSTEFQSV9LRVlfQ09ERV9TSElGVAkJMAorCisvKiogTWFzayBmb3IgYnJhaWxsZSBjb21tYW5kIHR5cGUgKi8KKyNkZWZpbmUgQlJMQVBJX0tFWV9DTURfQkxLX01BU0sJCVVJTlQ2NF9DKDBYMUZGRjAwMDApCisvKiogU2hpZnQgZm9yIGJyYWlsbGUgY29tbWFuZCB0eXBlICovCisjZGVmaW5lIEJSTEFQSV9LRVlfQ01EX0JMS19TSElGVAkxNgorLyoqIE1hc2sgZm9yIGJyYWlsbGUgY29tbWFuZCB2YWx1ZSAqLworI2RlZmluZSBCUkxBUElfS0VZX0NNRF9BUkdfTUFTSwkJVUlOVDY0X0MoMFgwMDAwRkZGRikKKy8qKiBTaGlmdCBmb3IgYnJhaWxsZSBjb21tYW5kIHZhbHVlICovCisjZGVmaW5lIEJSTEFQSV9LRVlfQ01EX0FSR19TSElGVAkwCisjZGVmaW5lIEJSTEFQSV9LRVlfQ01EKHYpCQkoKHYpIDw8IEJSTEFQSV9LRVlfQ01EX0JMS19TSElGVCkKKworLyoqIFN0YW5kYXJkIFgga2V5c3ltcyAqLworI2RlZmluZSBCUkxBUElfS0VZX1NZTV9CQUNLU1BBQ0UJVUlOVDY0X0MoMFgwMDAwRkYwOCkKKyNkZWZpbmUgQlJMQVBJX0tFWV9TWU1fVEFCCQlVSU5UNjRfQygwWDAwMDBGRjA5KQorI2RlZmluZSBCUkxBUElfS0VZX1NZTV9MSU5FRkVFRAkJVUlOVDY0X0MoMFgwMDAwRkYwRCkKKyNkZWZpbmUgQlJMQVBJX0tFWV9TWU1fRVNDQVBFCQlVSU5UNjRfQygwWDAwMDBGRjFCKQorI2RlZmluZSBCUkxBUElfS0VZX1NZTV9IT01FCQlVSU5UNjRfQygwWDAwMDBGRjUwKQorI2RlZmluZSBCUkxBUElfS0VZX1NZTV9MRUZUCQlVSU5UNjRfQygwWDAwMDBGRjUxKQorI2RlZmluZSBCUkxBUElfS0VZX1NZTV9VUAkJVUlOVDY0X0MoMFgwMDAwRkY1MikKKyNkZWZpbmUgQlJMQVBJX0tFWV9TWU1fUklHSFQJCVVJTlQ2NF9DKDBYMDAwMEZGNTMpCisjZGVmaW5lIEJSTEFQSV9LRVlfU1lNX0RPV04JCVVJTlQ2NF9DKDBYMDAwMEZGNTQpCisjZGVmaW5lIEJSTEFQSV9LRVlfU1lNX1BBR0VfVVAJCVVJTlQ2NF9DKDBYMDAwMEZGNTUpCisjZGVmaW5lIEJSTEFQSV9LRVlfU1lNX1BBR0VfRE9XTglVSU5UNjRfQygwWDAwMDBGRjU2KQorI2RlZmluZSBCUkxBUElfS0VZX1NZTV9FTkQJCVVJTlQ2NF9DKDBYMDAwMEZGNTcpCisjZGVmaW5lIEJSTEFQSV9LRVlfU1lNX0lOU0VSVAkJVUlOVDY0X0MoMFgwMDAwRkY2MykKKyNkZWZpbmUgQlJMQVBJX0tFWV9TWU1fRlVOQ1RJT04JCVVJTlQ2NF9DKDBYMDAwMEZGQkUpCisjZGVmaW5lIEJSTEFQSV9LRVlfU1lNX0RFTEVURQkJVUlOVDY0X0MoMFgwMDAwRkZGRikKKyNkZWZpbmUgQlJMQVBJX0tFWV9TWU1fVU5JQ09ERQkJVUlOVDY0X0MoMFgwMTAwMDAwMCkKKworLyoqCisgKiBXaGVuIGJybGFwaV9lbnRlclR0eU1vZGUoKSBvciBicmxhcGlfZW50ZyRlclR0eU1vZGVXaXRoUGF0aCgpIGlzIGNhbGxlZAorICogd2l0aCBhIGRyaXZlciBuYW1lLCBicmxhcGlfcmVhZEtleSgpIGFuZCBicmxhcGlfcmVhZEtleVdpdGhUaW1lb3V0KCkKKyAqIHdpbGwgcmV0dXJuIGRyaXZlci1zcGVjaWZpYyBrZXkgY29kZXMuIEZyb20gbW9zdC0gdG8gbGVhc3Qtc2lnbmlmaWNhbnQsCisgKiB0aGVpciBlaWdodCBieXRlcyBhcmU6IEYgMCAwIDAgMCAwIEcgTi4gRiBpcyBhIGJ5dGUgdGhhdCBjb250YWlucyBmbGFnCisgKiBiaXRzIHdoaWNoIGFyZSBjb21tb24gZm9yIGFsbCBkcml2ZXJzLiBCUkxBUElfRFJWX0tFWV9QUkVTUywgd2hpY2gKKyAqIGluZGljYXRlcyB0aGF0IGl0J3MgYSBrZXkgcHJlc3MgKGFzIG9wcG9zZWQgdG8gYSByZWxlYXNlKSBldmVudCwgaXMgdGhlCisgKiBvbmx5IGN1cnJlbnRseSBkZWZpbmVkIGZsYWcuIFRoZSBvdGhlciBmbGFnIGJpdHMgYXJlIGFsd2F5cyAwLgorICogRyBpcyB0aGUga2V5J3MgZ3JvdXAsIGFuZCBOIGlzIHRoZSBrZXkncyBudW1iZXIgd2l0aGluIHRoYXQgZ3JvdXAuCisgKi8KKworLyoqIEZsYWcgZm9yIGEgZHJpdmVyLXNwZWNpZmljIGtleWNvZGUgcHJlc3MgKG5vdCBzZXQgbWVhbnMgYSByZWxlYXNlKSAqLworI2RlZmluZSBCUkxBUElfRFJWX0tFWV9QUkVTUyBCUkxBUElfS0VZQ09ERV9DKDBYODAwMDAwMDAwMDAwMDAwMCkKKworLyoqIFNoaWZ0IGZvciBrZXkgbnVtYmVyIG9mIGJybGFwaV9rZXlDb2RlX3QgKi8KKyNkZWZpbmUgQlJMQVBJX0RSVl9LRVlfTlVNQkVSX1NISUZUIDAKKy8qKiBNYXNrIGZvciBrZXkgbnVtYmVyIG9mIGJybGFwaV9rZXlDb2RlX3QgKi8KKyNkZWZpbmUgQlJMQVBJX0RSVl9LRVlfTlVNQkVSX01BU0sgMFhGRgorLyoqIEdldCBrZXkgbnVtYmVyIG9mIGJybGFwaV9rZXlDb2RlX3QgKi8KKyNkZWZpbmUgQlJMQVBJX0RSVl9LRVlfTlVNQkVSKGNvZGUpICgoKGNvZGUpICYgQlJMQVBJX0RSVl9LRVlfTlVNQkVSX01BU0spID4+IEJSTEFQSV9EUlZfS0VZX05VTUJFUl9TSElGVCkKKworLyoqIFNoaWZ0IGZvciBrZXkgZ3JvdXAgb2YgYnJsYXBpX2tleUNvZGVfdCAqLworI2RlZmluZSBCUkxBUElfRFJWX0tFWV9HUk9VUF9TSElGVCA4CisvKiogTWFzayBmb3Iga2V5IGdyb3VwIG9mIGJybGFwaV9rZXlDb2RlX3QgKi8KKyNkZWZpbmUgQlJMQVBJX0RSVl9LRVlfR1JPVVBfTUFTSyAwWEZGMDAKKy8qKiBHZXQga2V5IGdyb3VwIG9mIGJybGFwaV9rZXlDb2RlX3QgKi8KKyNkZWZpbmUgQlJMQVBJX0RSVl9LRVlfR1JPVVAoY29kZSkgKCgoY29kZSkgJiBCUkxBUElfRFJWX0tFWV9HUk9VUF9NQVNLKSA+PiBCUkxBUElfRFJWX0tFWV9HUk9VUF9TSElGVCkKKworLyoqIE1hc2sgZm9yIGtleSB2YWx1ZSAoZ3JvdXAgYW5kIG51bWJlcikgb2YgYnJsYXBpX2tleUNvZGVfdCAqLworI2RlZmluZSBCUkxBUElfRFJWX0tFWV9WQUxVRV9NQVNLIChCUkxBUElfRFJWX0tFWV9HUk9VUF9NQVNLIHwgQlJMQVBJX0RSVl9LRVlfTlVNQkVSX01BU0spCisKKy8qKiBLZXkgbnVtYmVyIHJlcHJlc2VudGluZyBhbnkga2V5IGluIHRoZSBncm91cCAqLworI2RlZmluZSBCUkxBUElfRFJWX0tFWV9OVU1CRVJfQU5ZIDBYRkYKKworLyoqIEB9ICovCisKKyNpbmNsdWRlICJicmxhcGlfY29uc3RhbnRzLmgiCisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmIC8qIF9fY3BsdXNwbHVzICovCisKKyNlbmRpZiAvKiBCUkxBUElfSU5DTFVERURfS0VZQ09ERVMgKi8KZGlmZiAtLWdpdCBhL1Byb2dyYW1zL2JybGFwaV9rZXlyYW5nZXMuYyBiL1Byb2dyYW1zL2JybGFwaV9rZXlyYW5nZXMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mODg1MTY5Ci0tLSAvZGV2L251bGwKKysrIGIvUHJvZ3JhbXMvYnJsYXBpX2tleXJhbmdlcy5jCkBAIC0wLDAgKzEsMjEwIEBACisvKgorICogQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyAqICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyAqCisgKiBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorICoKKyAqIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyAqCisgKiBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisgKi8KKworI2luY2x1ZGUgInByb2xvZ3VlLmgiCisKKy8qIFNvdXJjZSBmaWxlIGZvciByYW5nZSBsaXN0IG1hbmFnZW1lbnQgbW9kdWxlICovCisvKiBGb3IgYSBkZXNjcmlwdGlvbiBvZiB3aGF0IGVhY2ggZnVuY3Rpb24gZG9lcywgc2VlIHJhbmdlbGlzdC5oICovCisKKyNpbmNsdWRlIDxzdGRpby5oPgorCisjaW5jbHVkZSAiYnJsYXBpX2tleXJhbmdlcy5oIgorI2luY2x1ZGUgImxvZy5oIgorCitzdGF0aWMgaW50IGluS2V5cmFuZ2UoS2V5cmFuZ2VMaXN0ICpsLCBLZXlyYW5nZUVsZW0gZSkKK3sKKyAgdWludDMyX3QgZmxhZ3MgPSBLZXlyYW5nZUZsYWdzKGUpOworICB1aW50MzJfdCB2YWwgPSBLZXlyYW5nZVZhbChlKTsKKyAgcmV0dXJuIChsLT5taW5WYWwgPD0gdmFsICYmIHZhbCA8PSBsLT5tYXhWYWwgJiYgKGZsYWdzIHwgbC0+bWluRmxhZ3MpID09IGZsYWdzICYmICgoZmxhZ3MgJiB+bC0+bWF4RmxhZ3MpID09IDApKTsKK30KKworLyogRnVuY3Rpb24gOiBjcmVhdGVLZXlyYW5nZSAqLworc3RhdGljIEtleXJhbmdlTGlzdCAqKmNyZWF0ZUtleXJhbmdlKEtleXJhbmdlTGlzdCAqKnAsIHVpbnQzMl90IG1pbkZsYWdzLCB1aW50MzJfdCBtaW5WYWwsIHVpbnQzMl90IG1heEZsYWdzLCB1aW50MzJfdCBtYXhWYWwsIEtleXJhbmdlTGlzdCAqbikKK3sKKyAgS2V5cmFuZ2VMaXN0ICpjID0gbWFsbG9jKHNpemVvZihLZXlyYW5nZUxpc3QpKTsKKyAgaWYgKGM9PU5VTEwpIHJldHVybiBOVUxMOworICBjLT5taW5GbGFncyA9IG1pbkZsYWdzOyBjLT5taW5WYWwgPSBtaW5WYWw7CisgIGMtPm1heEZsYWdzID0gbWF4RmxhZ3M7IGMtPm1heFZhbCA9IG1heFZhbDsKKyAgYy0+bmV4dCA9IG47CisgICpwID0gYzsKKyAgcmV0dXJuICZjLT5uZXh0OworfQorCisvKiBGdW5jdGlvbiA6IGZyZWVLZXlyYW5nZSAqLworc3RhdGljIHZvaWQgZnJlZUtleXJhbmdlKEtleXJhbmdlTGlzdCAqKnAsIEtleXJhbmdlTGlzdCAqYykKK3sKKyAgaWYgKGM9PU5VTEwpIHJldHVybjsKKyAgKnAgPSBjLT5uZXh0OworICBmcmVlKGMpOworfQorCisvKiBGdW5jdGlvbiA6IGZyZWVLZXlyYW5nZUxpc3QgKi8KK3ZvaWQgZnJlZUtleXJhbmdlTGlzdChLZXlyYW5nZUxpc3QgKipsKQoreworICBLZXlyYW5nZUxpc3QgKnAxLCAqcDI7CisgIGlmIChsPT1OVUxMKSByZXR1cm47CisgIHAyID0gKmw7CisgIHdoaWxlIChwMiE9TlVMTCkgeworICAgIHAxID0gcDI7CisgICAgcDIgPSBwMS0+bmV4dDsKKyAgICBmcmVlKHAxKTsKKyAgfQorICAqbCA9IE5VTEw7Cit9CisKKy8qIEZ1bmN0aW9uIDogaW5LZXlyYW5nZUxpc3QgKi8KK0tleXJhbmdlTGlzdCAqaW5LZXlyYW5nZUxpc3QoS2V5cmFuZ2VMaXN0ICpsLCBLZXlyYW5nZUVsZW0gbikKK3sKKyAgS2V5cmFuZ2VMaXN0ICpjID0gbDsKKyAgd2hpbGUgKGMhPU5VTEwpIHsKKyAgICBpZiAoaW5LZXlyYW5nZShjLCBuKSkgcmV0dXJuIGM7CisgICAgYyA9IGMtPm5leHQ7CisgIH0KKyAgcmV0dXJuIE5VTEw7Cit9CisKKy8qIEZ1bmN0aW9uIDogRGlzcGxheUtleXJhbmdlTGlzdCAqLwordm9pZCBEaXNwbGF5S2V5cmFuZ2VMaXN0KEtleXJhbmdlTGlzdCAqbCkKK3sKKyAgaWYgKGw9PU5VTEwpIHByaW50ZigiZW1wdHlzZXQiKTsKKyAgZWxzZSB7CisgICAgS2V5cmFuZ2VMaXN0ICpjID0gbDsKKyAgICB3aGlsZSAoMSkgeworICAgICAgcHJpbnRmKCJbJWx4KCVseCkuLiVseCglbHgpXSIsKHVuc2lnbmVkIGxvbmcpYy0+bWluVmFsLCh1bnNpZ25lZCBsb25nKWMtPm1pbkZsYWdzLCh1bnNpZ25lZCBsb25nKWMtPm1heFZhbCwodW5zaWduZWQgbG9uZyljLT5tYXhGbGFncyk7CisgICAgICBpZiAoYy0+bmV4dD09TlVMTCkgYnJlYWs7CisgICAgICBwcmludGYoIiwiKTsKKyAgICAgIGMgPSBjLT5uZXh0OworICAgIH0KKyAgfQorICBwcmludGYoIlxuIik7Cit9CisKKy8qIEZ1bmN0aW9uIDogYWRkS2V5cmFuZ2UgKi8KK2ludCBhZGRLZXlyYW5nZShLZXlyYW5nZUVsZW0geDAsIEtleXJhbmdlRWxlbSB5MCwgS2V5cmFuZ2VMaXN0ICoqbCkKK3sKKyAgS2V5cmFuZ2VMaXN0ICpjOworICB1aW50MzJfdCBtaW5GbGFncyA9IEtleXJhbmdlRmxhZ3MoeDApICYgS2V5cmFuZ2VGbGFncyh5MCk7CisgIHVpbnQzMl90IG1heEZsYWdzID0gS2V5cmFuZ2VGbGFncyh4MCkgfCBLZXlyYW5nZUZsYWdzKHkwKTsKKyAgdWludDMyX3QgbWluVmFsICAgPSBNSU4oS2V5cmFuZ2VWYWwoeDApLCBLZXlyYW5nZVZhbCh5MCkpOworICB1aW50MzJfdCBtYXhWYWwgICA9IE1BWChLZXlyYW5nZVZhbCh4MCksIEtleXJhbmdlVmFsKHkwKSk7CisgIEtleXJhbmdlRWxlbSBtaW4gPSBLZXlyYW5nZUVsZW0obWluRmxhZ3MsIG1pblZhbCk7CisgIEtleXJhbmdlRWxlbSBtYXggPSBLZXlyYW5nZUVsZW0obWF4RmxhZ3MsIG1heFZhbCk7CisKKyAgbG9nTWVzc2FnZShMT0dfQ0FURUdPUlkoU0VSVkVSX0VWRU5UUykgfCBMT0dfREVCVUcsCisgICAgImFkZGluZyByYW5nZSBbJSJQUkl4MzIiKCUiUFJJeDMyIikuLiUiUFJJeDMyIiglIlBSSXgzMiIpXSIsCisgICAgbWluVmFsLCBtaW5GbGFncywgbWF4VmFsLCBtYXhGbGFncworICApOworCisgIGMgPSAqbDsKKyAgd2hpbGUgKGMpIHsKKyAgICBpZiAoaW5LZXlyYW5nZShjLCBtaW4pICYmIGluS2V5cmFuZ2UoYywgbWF4KSkKKyAgICAgIC8qIEZhbGxzIGNvbXBsZXRlbHkgd2l0aGluIGFuIGV4aXN0aW5nIHJhbmdlICovCisgICAgICByZXR1cm4gMDsKKworICAgIGlmIChjLT5taW5WYWwgPD0gbWF4VmFsICYmIG1heFZhbCA8PSBjLT5tYXhWYWwgJiYgbWluRmxhZ3MgPT0gYy0+bWluRmxhZ3MgJiYgbWF4RmxhZ3MgPT0gYy0+bWF4RmxhZ3MpIHsKKyAgICAgIC8qIE1heSBqdXN0IGNoYW5nZSBsb3dlciBib3VuZCAqLworICAgICAgLyogTm90ZSB0aGF0IG1pblZhbCBjYW4ndCBiZSA+PSBjLT5taW5WYWwgKi8KKyAgICAgIGMtPm1pblZhbCA9IG1pblZhbDsKKyAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIGlmIChjLT5taW5WYWwgPD0gbWluVmFsICYmIG1pblZhbCA8PSBjLT5tYXhWYWwgJiYgbWluRmxhZ3MgPT0gYy0+bWluRmxhZ3MgJiYgbWF4RmxhZ3MgPT0gYy0+bWF4RmxhZ3MpIHsKKyAgICAgIC8qIE1heSBqdXN0IGNoYW5nZSB1cHBlciBib3VuZCAqLworICAgICAgLyogTm90ZSB0aGF0IG1heFZhbCBjYW4ndCBiZSA8PSBjLT5tYXhWYWwgKi8KKyAgICAgIGMtPm1heFZhbCA9IG1heFZhbDsKKyAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIGMgPSBjLT5uZXh0OworICB9CisKKyAgLyogRWxzZSB0aGluZ3MgYXJlIG5vdCBlYXN5LCBqdXN0IGFkZCAqLworICBpZiAoKGNyZWF0ZUtleXJhbmdlKGwsbWluRmxhZ3MsbWluVmFsLG1heEZsYWdzLG1heFZhbCwqbCkpID09IE5VTEwpIHJldHVybiAtMTsKKyAgcmV0dXJuIDA7Cit9CisKK2ludCByZW1vdmVLZXlyYW5nZShLZXlyYW5nZUVsZW0geDAsIEtleXJhbmdlRWxlbSB5MCwgS2V5cmFuZ2VMaXN0ICoqbCkKK3sKKyAgdWludDMyX3QgbWluRmxhZ3MgPSBLZXlyYW5nZUZsYWdzKHgwKSAmIEtleXJhbmdlRmxhZ3MoeTApOworICB1aW50MzJfdCBtYXhGbGFncyA9IEtleXJhbmdlRmxhZ3MoeDApIHwgS2V5cmFuZ2VGbGFncyh5MCk7CisgIHVpbnQzMl90IG1pblZhbCAgID0gTUlOKEtleXJhbmdlVmFsKHgwKSwgS2V5cmFuZ2VWYWwoeTApKTsKKyAgdWludDMyX3QgbWF4VmFsICAgPSBNQVgoS2V5cmFuZ2VWYWwoeDApLCBLZXlyYW5nZVZhbCh5MCkpOworICBLZXlyYW5nZUxpc3QgKmMsICoqcCwgKnRtcDsKKworICBpZiAoKGw9PU5VTEwpIHx8ICgqbD09TlVMTCkpIHJldHVybiAwOworCisgIGxvZ01lc3NhZ2UoTE9HX0NBVEVHT1JZKFNFUlZFUl9FVkVOVFMpIHwgTE9HX0RFQlVHLAorICAgICJyZW1vdmluZyByYW5nZSBbJSJQUkl4MzIiKCUiUFJJeDMyIikuLiUiUFJJeDMyIiglIlBSSXgzMiIpXSIsCisgICAgbWluVmFsLCBtaW5GbGFncywgbWF4VmFsLCBtYXhGbGFncworICApOworCisgIC8qIE5lZWQgdG8gaW50ZXJzZWN0IHdpdGggZXZlcnkgcmFuZ2UgKi8KKyAgcCA9IGw7IGMgPSAqcDsKKyAgd2hpbGUgKGMpIHsKKyAgICBpZiAoYy0+bWluVmFsID4gbWF4VmFsIHx8IGMtPm1heFZhbCA8IG1pblZhbCB8fAorICAgICAgICAhKGMtPm1heEZsYWdzIHwgfm1pbkZsYWdzKSB8fCAhKH5jLT5taW5GbGFncyB8IG1heEZsYWdzKSkgeworICAgICAgLyogZG9uJ3QgaW50ZXJzZWN0ICovCisgICAgICBwID0gJmMtPm5leHQ7CisgICAgICBjID0gKnA7CisgICAgICBjb250aW51ZTsKKyAgICB9CisKKyAgICBpZiAobWluVmFsIDw9IGMtPm1pblZhbCAmJiBtYXhWYWwgPj0gYy0+bWF4VmFsICYmCisgICAgICAgIChjLT5taW5GbGFncyB8IG1pbkZsYWdzKSA9PSBjLT5taW5GbGFncyAmJgorICAgICAgICAoYy0+bWF4RmxhZ3MgJiB+bWF4RmxhZ3MpID09IDApIHsKKyAgICAgIC8qIHJhbmdlIGZhbGxzIGNvbXBsZXRlbHkgaW4gZGVsZXRpb24gcmFuZ2UsIGp1c3QgZHJvcCBpdCAqLworICAgICAgdG1wID0gYzsgYyA9IGMtPm5leHQ7CisgICAgICBmcmVlS2V5cmFuZ2UocCx0bXApOworICAgICAgY29udGludWU7CisgICAgfQorCisgICAgLyogUGFydGx5IGludGVyc2VjdCAqLworCisgICAgaWYgKGMtPm1pblZhbCA8IG1pblZhbCkgeworICAgICAgLyogbG93ZXIgcGFydCBzaG91bGQgYmUga2VwdCBpbnRhY3QsIHNhdmUgaXQuICovCisgICAgICBwID0gY3JlYXRlS2V5cmFuZ2UocCwgYy0+bWluRmxhZ3MsIGMtPm1pblZhbCwgYy0+bWF4RmxhZ3MsIG1pblZhbCAtIDEsIGMpOworICAgICAgaWYgKHAgPT0gTlVMTCkgcmV0dXJuIC0xOworICAgICAgYy0+bWluVmFsID0gbWluVmFsOworICAgIH0KKworICAgIGlmIChjLT5tYXhWYWwgPiBtYXhWYWwpIHsKKyAgICAgIC8qIHVwcGVyIHBhcnQgc2hvdWxkIGJlIGtlcHQgaW50YWN0LCBzYXZlIGl0LiAqLworICAgICAgcCA9IGNyZWF0ZUtleXJhbmdlKHAsIGMtPm1pbkZsYWdzLCBtYXhWYWwgKyAxLCBjLT5tYXhGbGFncywgYy0+bWF4VmFsLCBjKTsKKyAgICAgIGlmIChwID09IE5VTEwpIHJldHVybiAtMTsKKyAgICAgIGMtPm1heFZhbCA9IG1heFZhbDsKKyAgICB9CisKKyAgICAvKiBOb3cgdmFsdWVzIGFyZSBjb250YWluZWQgaW4gc3VwcHJlc3Npb24sIGludGVyc2VjdCBhZ2FpbnN0IGZsYWdzICovCisKKyAgICBpZiAofm1pbkZsYWdzICYgbWF4RmxhZ3MpIHsKKyAgICAgIC8qIEF0IGxlYXN0IHNvbWUgZmxhZyBtdXN0IG5vdyBiZSBuZWl0aGVyIGNsZWFyZWQgbm9yIHNldCwgZHJvcCByYW5nZSAqLworICAgICAgdG1wID0gYzsgYyA9IGMtPm5leHQ7CisgICAgICBmcmVlS2V5cmFuZ2UocCx0bXApOworICAgICAgY29udGludWU7CisgICAgfQorCisgICAgLyogQ2xhbXAgZmxhZ3Mgb24gdGhlIHZhbHVlIGludGVydmFsICovCisgICAgYy0+bWluRmxhZ3MgfD0gfm1heEZsYWdzOworICAgIGMtPm1heEZsYWdzICY9IH5taW5GbGFnczsKKworICAgIHAgPSAmYy0+bmV4dDsKKyAgICBjID0gKnA7CisgIH0KKworICByZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL1Byb2dyYW1zL2JybGFwaV9rZXlyYW5nZXMuaCBiL1Byb2dyYW1zL2JybGFwaV9rZXlyYW5nZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOWZjZjM3Ci0tLSAvZGV2L251bGwKKysrIGIvUHJvZ3JhbXMvYnJsYXBpX2tleXJhbmdlcy5oCkBAIC0wLDAgKzEsNzYgQEAKKy8qCisgKiBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorICogICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorICoKKyAqIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorICoKKyAqIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyAqLworCisjaWZuZGVmIEJSTEFQSV9JTkNMVURFRF9LRVlSQU5HRVMKKyNkZWZpbmUgQlJMQVBJX0lOQ0xVREVEX0tFWVJBTkdFUworCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmIC8qIF9fY3BsdXNwbHVzICovCisKKy8qIEhlYWRlciBmaWxlIGZvciB0aGUgcmFuZ2UgbGlzdCBtYW5hZ2VtZW50IG1vZHVsZSAqLworCisjaW5jbHVkZSAicHJvbG9ndWUuaCIKKwordHlwZWRlZiB1aW50NjRfdCBLZXlyYW5nZUVsZW07CisKKyNkZWZpbmUgS2V5cmFuZ2VGbGFncyh2KSAoKCh2KSA+PiAzMikgJiAweGZmZmZmZmZmdWxsKQorI2RlZmluZSBLZXlyYW5nZVZhbCh2KSAoKHYpICYgMHhmZmZmZmZmZnVsbCkKKworI2RlZmluZSBLZXlyYW5nZUVsZW0oZmxhZ3MsdmFsKSAoKChLZXlyYW5nZUVsZW0pKGZsYWdzKSA8PCAzMikgfCAodmFsKSkKKworCit0eXBlZGVmIHN0cnVjdCBLZXlyYW5nZUxpc3QgeworICB1aW50MzJfdCBtaW5GbGFncywgbWF4RmxhZ3M7CisgIHVpbnQzMl90IG1pblZhbCwgbWF4VmFsOworICBzdHJ1Y3QgS2V5cmFuZ2VMaXN0ICpuZXh0OworfSBLZXlyYW5nZUxpc3Q7CisKKy8qIEZ1bmN0aW9uIDogZnJlZUtleXJhbmdlTGlzdCAqLworLyogRnJlZXMgYSB3aG9sZSBsaXN0ICovCisvKiBJZiB5b3Ugd2FudCB0byBkZXN0cm95IGEgd2hvbGUgbGlzdCwgY2FsbCB0aGlzIGZ1bmN0aW9uLCByYXRoZXIgdGhhbiAqLworLyogY2FsbGluZyBmcmVlS2V5cmFuZ2Ugb24gZWFjaCBlbGVtZW50LCBzaW5jZSB0aCBsYXR0ZXIgY2FyZXMgYWJvdXQgbGlua3MgKi8KKy8qIGFuZCBoZW5jZSBpcyBzbG93ZXIgKi8KK2V4dGVybiB2b2lkIGZyZWVLZXlyYW5nZUxpc3QoS2V5cmFuZ2VMaXN0ICoqbCk7CisKKy8qIEZ1bmN0aW9uIDogaW5LZXlyYW5nZUxpc3QgKi8KKy8qIERldGVybWluZXMgaWYgdGhlIHJhbmdlIGxpc3QgbCBjb250YWlucyB4ICovCisvKiBJZiB5ZXMsIHJldHVybnMgdGhlIGFkcmVzcyBvZiB0aGUgY2VsbCBbYS4uYl0gc3VjaCB0aGF0IGE8PXg8PWIgKi8KKy8qIElmIG5vLCByZXR1cm5zIE5VTEwgKi8KK2V4dGVybiBLZXlyYW5nZUxpc3QgKmluS2V5cmFuZ2VMaXN0KEtleXJhbmdlTGlzdCAqbCwgS2V5cmFuZ2VFbGVtIG4pOworCisvKiBGdW5jdGlvbiA6IGRpc3BsYXlLZXlyYW5nZUxpc3QgKi8KKy8qIFByaW50cyBhIHJhbmdlIGxpc3Qgb24gc3Rkb3V0ICovCisvKiBUaGlzIGlzIGZvciBkZWJ1Z2dpbmcgb25seSAqLworZXh0ZXJuIHZvaWQgZGlzcGxheUtleXJhbmdlTGlzdChLZXlyYW5nZUxpc3QgKmwpOworCisvKiBGdW5jdGlvbiA6IGFkZEtleXJhbmdlICovCisvKiBBZGRzIGEgcmFuZ2UgdG8gYSByYW5nZSBsaXN0ICovCisvKiBSZXR1cm4gMCBpZiBzdWNjZXNzLCAtMSBpZiBhbiBlcnJvciBvY2N1cnMgKi8KK2V4dGVybiBpbnQgYWRkS2V5cmFuZ2UoS2V5cmFuZ2VFbGVtIHgwLCBLZXlyYW5nZUVsZW0geTAsIEtleXJhbmdlTGlzdCAqKmwpOworCisvKiBGdW5jdGlvbiA6IHJlbW92ZUtleXJhbmdlICovCisvKiBSZW1vdmVzIGEgcmFuZ2UgZnJvbSBhIHJhbmdlIGxpc3QgKi8KKy8qIFJldHVybnMgMCBpZiBzdWNjZXNzLCAtMSBpZiBmYWlsdXJlICovCitleHRlcm4gaW50IHJlbW92ZUtleXJhbmdlKEtleXJhbmdlRWxlbSB4MCwgS2V5cmFuZ2VFbGVtIHkwLCBLZXlyYW5nZUxpc3QgKipsKTsKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYgLyogX19jcGx1c3BsdXMgKi8KKworI2VuZGlmIC8qIEJSTEFQSV9JTkNMVURFRF9LRVlSQU5HRVMgKi8KZGlmZiAtLWdpdCBhL1Byb2dyYW1zL2JybGFwaV9rZXl0YWIuYXdrIGIvUHJvZ3JhbXMvYnJsYXBpX2tleXRhYi5hd2sKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzRkOTBhZgotLS0gL2Rldi9udWxsCisrKyBiL1Byb2dyYW1zL2JybGFwaV9rZXl0YWIuYXdrCkBAIC0wLDAgKzEsNjIgQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyMgICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisjCisjIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyMKKyMgQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitCRUdJTiB7CisgIHdyaXRlSGVhZGVyUHJvbG9ndWUoIkJSTEFQSV9JTkNMVURFRF9LRVlUQUIiLCAiYXBpLmgiKQorfQorCitFTkQgeworICB3cml0ZUhlYWRlckVwaWxvZ3VlKCkKK30KKworZnVuY3Rpb24gYnJsQ29tbWFuZChuYW1lLCBzeW1ib2wsIHZhbHVlLCBoZWxwKSB7CisgIHdyaXRlU2ltcGxlS2V5KCJDTUQiLCBuYW1lKQorfQorCitmdW5jdGlvbiBicmxCbG9jayhuYW1lLCBzeW1ib2wsIHZhbHVlLCBoZWxwKSB7CisgIGlmIChuYW1lID09ICJQQVNTQ0hBUiIpIHJldHVybgorICBpZiAobmFtZSA9PSAiUEFTU0tFWSIpIHJldHVybgorICB3cml0ZVNpbXBsZUtleSgiQ01EIiwgbmFtZSkKK30KKworZnVuY3Rpb24gYnJsS2V5KG5hbWUsIHN5bWJvbCwgdmFsdWUsIGhlbHApIHsKKyAgaWYgKG5hbWUgPT0gIkZVTkNUSU9OIikgeworICAgIGZvciAoZnVuY3Rpb25OdW1iZXI9MTsgZnVuY3Rpb25OdW1iZXI8PTM1OyArK2Z1bmN0aW9uTnVtYmVyKSB7CisgICAgICB3cml0ZUNvbXBsZXhLZXkoIkYiIGZ1bmN0aW9uTnVtYmVyLCAiQlJMQVBJX0tFWV9TWU1fRlVOQ1RJT04rIiAoZnVuY3Rpb25OdW1iZXIgLSAxKSkKKyAgICB9CisgIH0gZWxzZSB7CisgICAgd3JpdGVTaW1wbGVLZXkoIlNZTSIsIGdldEJybGFwaUtleU5hbWUobmFtZSkpCisgIH0KK30KKworZnVuY3Rpb24gYnJsRmxhZyhuYW1lLCBzeW1ib2wsIHZhbHVlLCBoZWxwKSB7Cit9CisKK2Z1bmN0aW9uIGJybERvdChudW1iZXIsIHN5bWJvbCwgdmFsdWUsIGhlbHApIHsKK30KKworZnVuY3Rpb24gd3JpdGVTaW1wbGVLZXkodHlwZSwgbmFtZSkgeworICB3cml0ZUNvbXBsZXhLZXkobmFtZSwgIihCUkxBUElfS0VZX1RZUEVfIiB0eXBlICIgfCBCUkxBUElfS0VZXyIgdHlwZSAiXyIgbmFtZSAiKSIpCit9CisKK2Z1bmN0aW9uIHdyaXRlQ29tcGxleEtleShuYW1lLCBjb2RlKSB7CisgIHByaW50ICJ7IgorICBwcmludCAiICAubmFtZSA9IFwiIiBuYW1lICJcIiwiCisgIHByaW50ICIgIC5jb2RlID0gIiBjb2RlCisgIHByaW50ICJ9LCIKK30KZGlmZiAtLWdpdCBhL1Byb2dyYW1zL2JybGFwaV9wYXJhbS5oIGIvUHJvZ3JhbXMvYnJsYXBpX3BhcmFtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDNhY2ZlYgotLS0gL2Rldi9udWxsCisrKyBiL1Byb2dyYW1zL2JybGFwaV9wYXJhbS5oCkBAIC0wLDAgKzEsMzI4IEBACisvKgorICogbGliYnJsYXBpIC0gQSBsaWJyYXJ5IHByb3ZpZGluZyBhY2Nlc3MgdG8gYnJhaWxsZSB0ZXJtaW5hbHMgZm9yIGFwcGxpY2F0aW9ucy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDItMjAyMyBieQorICogICBTYW11ZWwgVGhpYmF1bHQgPFNhbXVlbC5UaGliYXVsdEBlbnMtbHlvbi5vcmc+CisgKiAgIFPDqWJhc3RpZW4gSGluZGVyZXIgPFNlYmFzdGllbi5IaW5kZXJlckBlbnMtbHlvbi5vcmc+CisgKgorICogbGliYnJsYXBpIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKKy8qKiBcZmlsZQorICovCisKKyNpZm5kZWYgQlJMQVBJX0lOQ0xVREVEX1BBUkFNCisjZGVmaW5lIEJSTEFQSV9JTkNMVURFRF9QQVJBTQorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmIC8qIF9fY3BsdXNwbHVzICovCisKKyNpbmNsdWRlICJicmxhcGlfa2V5Y29kZXMuaCIKKworLyoqIFxpbmdyb3VwIGJybGFwaV9wYXJhbWV0ZXJNYW5hZ2VtZW50CisgKgorICogQHsgKi8KKwordHlwZWRlZiBlbnVtIHsKKy8vQ29ubmVjdGlvbiBQYXJhbWV0ZXJzCisgIEJSTEFQSV9QQVJBTV9TRVJWRVJfVkVSU0lPTiA9IDAsCQkvKio8IFZlcnNpb24gb2YgdGhlIHNlcnZlcjogdWludDMyX3QgKi8KKyAgQlJMQVBJX1BBUkFNX0NMSUVOVF9QUklPUklUWSA9IDEsCQkvKio8IFByaW9yaXR5IG9mIHRoZSBjbGllbnQ6IHVpbnQzMl90IChmcm9tIDAgdGhyb3VnaCAxMDAsIGRlZmF1bHQgaXMgNTApICovCisKKy8vRGV2aWNlIFBhcmFtZXRlcnMKKyAgQlJMQVBJX1BBUkFNX0RSSVZFUl9OQU1FID0gMiwJCQkvKio8IEZ1bGwgbmFtZSBvZiB0aGUgZHJpdmVyOiBzdHJpbmcgKi8KKyAgQlJMQVBJX1BBUkFNX0RSSVZFUl9DT0RFID0gMywJCQkvKio8IENvZGUgKHNob3J0IG5hbWUpIG9mIHRoZSBkcml2ZXI6IHN0cmluZyAqLworICBCUkxBUElfUEFSQU1fRFJJVkVSX1ZFUlNJT04gPSA0LAkJLyoqPCBWZXJzaW9uIG9mIHRoZSBkcml2ZXI6IHN0cmluZyAqLworICBCUkxBUElfUEFSQU1fREVWSUNFX01PREVMID0gNSwJCS8qKjwgTW9kZWwgb2YgdGhlIGRldmljZTogc3RyaW5nICovCisgIEJSTEFQSV9QQVJBTV9ERVZJQ0VfQ0VMTF9TSVpFID0gMzEsCQkvKio8IE51bWJlciBvZiBkb3RzIGluIGEgY2VsbDogdWludDhfdCAqLworICBCUkxBUElfUEFSQU1fRElTUExBWV9TSVpFID0gNiwJCS8qKjwgRGltZW5zaW9ucyBvZiB0aGUgYnJhaWxsZSBkaXNwbGF5OiB7IHVpbnQzMl90IGNvbHVtbnM7IHVpbnQzMl90IHJvd3M7IH0gKi8KKyAgQlJMQVBJX1BBUkFNX0RFVklDRV9JREVOVElGSUVSID0gNywJCS8qKjwgSWRlbnRpZmllciBvZiB0aGUgZGV2aWNlOiBzdHJpbmcgKi8KKyAgQlJMQVBJX1BBUkFNX0RFVklDRV9TUEVFRCA9IDgsCQkvKio8IFNwZWVkIG9mIHRoZSBkZXZpY2U6IHVpbnQzMl90ICovCisgIEJSTEFQSV9QQVJBTV9ERVZJQ0VfT05MSU5FID0gOSwJCS8qKjwgRGV2aWNlIGlzIG9ubGluZTogYm9vbGVhbiAqLworLyogVE9ETzogc3RhdHVzIGFyZWEgKi8KKworLy9JbnB1dCBQYXJhbWV0ZXJzCisgIEJSTEFQSV9QQVJBTV9SRVRBSU5fRE9UUyA9IDEwLAkJLyoqPCBQYXNzIGRvdCBjb21iaW5hdGlvbnMgKHJhdGhlciB0aGFuIGNoYXJhY3RlcnMpOiBib29sZWFuICovCisKKy8vQnJhaWxsZSBSZW5kZXJpbmcgUGFyYW1ldGVycworICBCUkxBUElfUEFSQU1fQ09NUFVURVJfQlJBSUxMRV9DRUxMX1NJWkUgPSAxMSwJLyoqPCBOdW1iZXIgb2YgZG90cyB1c2VkIHRvIHJlbmRlciBhIGNvbXB1dGVyIGJyYWlsbGUgY2hhcmFjdGVyOiB1aW50OF90ICg4IG9yIDYpICovCisgIEJSTEFQSV9QQVJBTV9MSVRFUkFSWV9CUkFJTExFID0gMTIsCQkvKio8IFdoZXRoZXIgYnJhaWxsZSBpcyBsaXRlcmFyeSAocmF0aGVyIHRoYW4gY29tcHV0ZXIpOiBib29sZWFuICovCisgIEJSTEFQSV9QQVJBTV9DVVJTT1JfRE9UUyA9IDEzLAkJLyoqPCBSZXByZXNlbnRhdGlvbiBvZiB0aGUgY3Vyc29yOiB1aW50OF90IChJU08gMTE1NDgtMSkgKi8KKyAgQlJMQVBJX1BBUkFNX0NVUlNPUl9CTElOS19QRVJJT0QgPSAxNCwJLyoqPCBCbGlua2luZyBwZXJpb2Qgb2YgdGhlIGN1cnNvcjogdWludDMyX3QgKG1pbGxpc2Vjb25kcykgKi8KKyAgQlJMQVBJX1BBUkFNX0NVUlNPUl9CTElOS19QRVJDRU5UQUdFID0gMTUsCS8qKjwgUG9ydGlvbiBvZiB0aGUgYmxpbmtpbmcgcGVyaW9kIHRoYXQgdGhlIGN1cnNvciBpcyB2aXNpYmxlOiB1aW50OF90IChmcm9tIDAgdGhyb3VnaCAxMDApICovCisgIEJSTEFQSV9QQVJBTV9SRU5ERVJFRF9DRUxMUyA9IDE2LAkJLyoqPCBDZWxscyByZW5kZXJlZCBieSB0aGUgY2xpZW50OiB1aW50OF90W10gKElTTyAxMTU0OC0xKSwgb25lIGNlbGwgcGVyIGVsZW1lbnQgKi8KKworLy9OYXZpZ2F0aW9uIFBhcmFtZXRlcnMKKyAgQlJMQVBJX1BBUkFNX1NLSVBfSURFTlRJQ0FMX0xJTkVTID0gMTcsCS8qKjwgV2hldGhlciB0byBza2lwIGlkZW50aWNhbCBzY3JlZW4gbGluZXM6IGJvb2xlYW4gKi8KKyAgQlJMQVBJX1BBUkFNX0FVRElCTEVfQUxFUlRTID0gMTgsCQkvKio8IFdoZXRoZXIgdG8gdXNlIGF1ZGlibGUgYWxlcnRzOiBib29sZWFuICovCisKKy8vQ2xpcGJvYXJkIFBhcmFtZXRlcnMKKyAgQlJMQVBJX1BBUkFNX0NMSVBCT0FSRF9DT05URU5UID0gMTksCQkvKio8IENvbnRlbnQgb2YgdGhlIGNsaXBib2FyZDogVVRGLTggc3RyaW5nICovCisKKy8vVFRZIE1vZGUgUGFyYW1ldGVycworICBCUkxBUElfUEFSQU1fQk9VTkRfQ09NTUFORF9LRVlDT0RFUyA9IDIwLAkvKio8IENvbW1hbmRzIGJvdW5kIGJ5IHRoZSBkcml2ZXI6CisJCQkJCQkgICogdWludDY0X3RbXSwgb25lIGNvbW1hbmQga2V5Y29kZSBwZXIgZWxlbWVudCAqLworICBCUkxBUElfUEFSQU1fQ09NTUFORF9LRVlDT0RFX05BTUUgPSAyMSwJLyoqPCBOYW1lIGZvciBhIGNvbW1hbmQga2V5Y29kZQorCQkJCQkJICAqIChzcGVjaWZpZWQgdmlhIHRoZSBzdWJwYXJhbSBhcmd1bWVudCk6CisJCQkJCQkgICogc3RyaW5nICh1c3VhbGx5IGEgZmV3IGNoYXJhY3RlcnMpICovCisgIEJSTEFQSV9QQVJBTV9DT01NQU5EX0tFWUNPREVfU1VNTUFSWSA9IDIyLAkvKio8IERlc2NyaXB0aW9uIGZvciBhIGNvbW1hbmQga2V5Y29kZQorCQkJCQkJICAqIChzcGVjaWZpZWQgdmlhIHRoZSBzdWJwYXJhbSBhcmd1bWVudCk6CisJCQkJCQkgICogc3RyaW5nICh1c3VhbGx5IGEgZmV3IHdvcmRzKSAqLworICBCUkxBUElfUEFSQU1fREVGSU5FRF9EUklWRVJfS0VZQ09ERVMgPSAyMywJLyoqPCBLZXljb2RlcyBkZWZpbmVkIGJ5IHRoZSBkcml2ZXI6CisJCQkJCQkgICogdWludDY0X3RbXSwgb25lIGtleWNvZGUgcGVyIGVsZW1lbnQgKi8KKyAgQlJMQVBJX1BBUkFNX0RSSVZFUl9LRVlDT0RFX05BTUUgPSAyNCwJLyoqPCBOYW1lIGZvciBhIGRyaXZlciBrZXljb2RlCisJCQkJCQkgICogKHNwZWNpZmllZCB2aWEgdGhlIHN1YnBhcmFtIGFyZ3VtZW50KToKKwkJCQkJCSAgKiBzdHJpbmcgKHVzdWFsbHkgYSBmZXcgY2hhcmFjdGVycykgKi8KKyAgQlJMQVBJX1BBUkFNX0RSSVZFUl9LRVlDT0RFX1NVTU1BUlkgPSAyNSwJLyoqPCBEZXNjcmlwdGlvbiBmb3IgYSBkcml2ZXIga2V5Y29kZQorCQkJCQkJICAqIChzcGVjaWZpZWQgdmlhIHRoZSBzdWJwYXJhbSBhcmd1bWVudCk6CisJCQkJCQkgICogc3RyaW5nICh1c3VhbGx5IGEgZmV3IHdvcmRzKSAqLworCisvL0JyYWlsbGUgVHJhbnNsYXRpb24gUGFyYW1ldGVycworICBCUkxBUElfUEFSQU1fQ09NUFVURVJfQlJBSUxMRV9ST1dTX01BU0sgPSAyNiwJLyoqPCBTZXQgb2YgVW5pY29kZSByb3dzIHRoYXQgYXJlIGRlZmluZWQgZm9yIGNvbXB1dGVyIGJyYWlsbGUKKwkJCQkJCSAgKiAoZnJvbSBVKzAwMDAgdGhyb3VnaCBVKzEwRkZGRik6CisJCQkJCQkgICogdWludDhfdFs1NDRdLCBvbmUgYml0IHBlciByb3csIGVpZ2h0IHJvd3MgcGVyIGVsZW1lbnQgKi8KKyAgQlJMQVBJX1BBUkFNX0NPTVBVVEVSX0JSQUlMTEVfUk9XX0NFTExTID0gMjcsCS8qKjwgQ29tcHV0ZXIgYnJhaWxsZSBjZWxscyBmb3IgYSBVbmljb2RlIHJvdworCQkJCQkJICAqIChzcGVjaWZpZWQgdmlhIHRoZSBzdWJwYXJhbSBhcmd1bWVudCk6CisJCQkJCQkgICogdWludDhfdFsyNTZdIChJU08gMTE1NDgtMSksIG9uZSBjZWxsIHBlciBlbGVtZW50ICovCisgIEJSTEFQSV9QQVJBTV9DT01QVVRFUl9CUkFJTExFX1RBQkxFID0gMjgsCS8qKjwgTmFtZSBvZiB0aGUgY29tcHV0ZXIgYnJhaWxsZSB0YWJsZTogc3RyaW5nICovCisgIEJSTEFQSV9QQVJBTV9MSVRFUkFSWV9CUkFJTExFX1RBQkxFID0gMjksCS8qKjwgTmFtZSBvZiB0aGUgbGl0ZXJhcnkgYnJhaWxsZSB0YWJsZTogc3RyaW5nICovCisgIEJSTEFQSV9QQVJBTV9NRVNTQUdFX0xPQ0FMRSA9IDMwLAkJLyoqPCBMb2NhbGUgdG8gdXNlIGZvciBtZXNzYWdlczogc3RyaW5nICovCisvKiBUT0RPOiBkb3QtdG8tdW5pY29kZSBhcyB3ZWxsICovCisKKyAvKiBUT0RPOiBoZWxwIHN0cmluZ3MgKi8KKworICBCUkxBUElfUEFSQU1fQ09VTlQgPSAzMiAvKiogTnVtYmVyIG9mIHBhcmFtZXRlcnMgKi8KK30gYnJsYXBpX3BhcmFtX3Q7CisKKy8qIGJybGFwaV9wYXJhbV9zdWJwYXJhbV90ICovCisvKiogVHlwZSB0byBiZSB1c2VkIGZvciBzcGVjaWZ5aW5nIGEgc3ViLXBhcmFtZXRlciAqLwordHlwZWRlZiB1aW50NjRfdCBicmxhcGlfcGFyYW1fc3VicGFyYW1fdDsKKworLyogYnJsYXBpX3BhcmFtX2Jvb2xfdCAqLworLyoqIFR5cGUgdG8gYmUgdXNlZCBmb3IgYm9vbGVhbiBwYXJhbWV0ZXJzICovCit0eXBlZGVmIHVpbnQ4X3QgYnJsYXBpX3BhcmFtX2Jvb2xfdDsKKworLyogYnJsYXBpX3BhcmFtX3NlcnZlclZlcnNpb25fdCAqLworLyoqIFR5cGUgdG8gYmUgdXNlZCBmb3IgQlJMQVBJX1BBUkFNX1NFUlZFUl9WRVJTSU9OICovCit0eXBlZGVmIHVpbnQzMl90IGJybGFwaV9wYXJhbV9zZXJ2ZXJWZXJzaW9uX3Q7CisKKy8qIGJybGFwaV9wYXJhbV9jbGllbnRQcmlvcml0eV90ICovCisvKiogVHlwZSB0byBiZSB1c2VkIGZvciBCUkxBUElfUEFSQU1fQ0xJRU5UX1BSSU9SSVRZICovCit0eXBlZGVmIHVpbnQzMl90IGJybGFwaV9wYXJhbV9jbGllbnRQcmlvcml0eV90OworCisvKiBCUkxBUElfUEFSQU1fQ0xJRU5UX1BSSU9SSVRZX0RFRkFVTFQgKi8KKy8qKiBEZWZhdWx0IHZhbHVlIGZvciBCUkxBUElfUEFSQU1fQ0xJRU5UX1BSSU9SSVRZICovCisjZGVmaW5lIEJSTEFQSV9QQVJBTV9DTElFTlRfUFJJT1JJVFlfREVGQVVMVCA1MAorCisvKiBCUkxBUElfUEFSQU1fQ0xJRU5UX1BSSU9SSVRZX0RJU0FCTEUgKi8KKy8qKiBWYWx1ZSBmb3IgQlJMQVBJX1BBUkFNX0NMSUVOVF9QUklPUklUWSB3aGljaCBhY3R1YWxseSBkaXNhYmxlcyBpbnB1dCBhbmQKKyAqIG91dHB1dCAqLworI2RlZmluZSBCUkxBUElfUEFSQU1fQ0xJRU5UX1BSSU9SSVRZX0RJU0FCTEUgMAorCisvKiBicmxhcGlfcGFyYW1fZHJpdmVyTmFtZV90ICovCisvKiogVHlwZSB0byBiZSB1c2VkIGZvciBCUkxBUElfUEFSQU1fRFJJVkVSX05BTUUgKi8KK3R5cGVkZWYgY2hhciAqYnJsYXBpX3BhcmFtX2RyaXZlck5hbWVfdDsKKworLyogYnJsYXBpX3BhcmFtX2RyaXZlckNvZGVfdCAqLworLyoqIFR5cGUgdG8gYmUgdXNlZCBmb3IgQlJMQVBJX1BBUkFNX0RSSVZFUl9DT0RFICovCit0eXBlZGVmIGNoYXIgKmJybGFwaV9wYXJhbV9kcml2ZXJDb2RlX3Q7CisKKy8qIGJybGFwaV9wYXJhbV9kcml2ZXJWZXJzaW9uX3QgKi8KKy8qKiBUeXBlIHRvIGJlIHVzZWQgZm9yIEJSTEFQSV9QQVJBTV9EUklWRVJfVkVSU0lPTiAqLwordHlwZWRlZiBjaGFyICpicmxhcGlfcGFyYW1fZHJpdmVyVmVyc2lvbl90OworCisvKiBicmxhcGlfcGFyYW1fZGV2aWNlTW9kZWxfdCAqLworLyoqIFR5cGUgdG8gYmUgdXNlZCBmb3IgQlJMQVBJX1BBUkFNX0RFVklDRV9NT0RFTCAqLwordHlwZWRlZiBjaGFyICpicmxhcGlfcGFyYW1fZGV2aWNlTW9kZWxfdDsKKworLyogYnJsYXBpX3BhcmFtX2RldmljZUNlbGxTaXplX3QgKi8KKy8qKiBUeXBlIHRvIGJlIHVzZWQgZm9yIEJSTEFQSV9QQVJBTV9ERVZJQ0VfQ0VMTF9TSVpFICovCit0eXBlZGVmIHVpbnQ4X3QgYnJsYXBpX3BhcmFtX2RldmljZUNlbGxTaXplX3Q7CisKKy8qIGJybGFwaV9wYXJhbV9kaXNwbGF5U2l6ZV90ICovCisvKiogVHlwZSB0byBiZSB1c2VkIGZvciBCUkxBUElfUEFSQU1fRElTUExBWV9TSVpFICovCit0eXBlZGVmIHN0cnVjdCB7CisgIHVpbnQzMl90IGNvbHVtbnM7CisgIHVpbnQzMl90IHJvd3M7Cit9IGJybGFwaV9wYXJhbV9kaXNwbGF5U2l6ZV90OworCisvKiBicmxhcGlfcGFyYW1fZGV2aWNlSWRlbnRpZmllcl90ICovCisvKiogVHlwZSB0byBiZSB1c2VkIGZvciBCUkxBUElfUEFSQU1fREVWSUNFX0lERU5USUZJRVIgKi8KK3R5cGVkZWYgY2hhciAqYnJsYXBpX3BhcmFtX2RldmljZUlkZW50aWZpZXJfdDsKKworLyogYnJsYXBpX3BhcmFtX2RldmljZVNwZWVkX3QgKi8KKy8qKiBUeXBlIHRvIGJlIHVzZWQgZm9yIEJSTEFQSV9QQVJBTV9ERVZJQ0VfU1BFRUQgKi8KK3R5cGVkZWYgdWludDMyX3QgYnJsYXBpX3BhcmFtX2RldmljZVNwZWVkX3Q7CisKKy8qIGJybGFwaV9wYXJhbV9kZXZpY2VPbmxpbmVfdCAqLworLyoqIFR5cGUgdG8gYmUgdXNlZCBmb3IgQlJMQVBJX1BBUkFNX0RFVklDRV9PTkxJTkUgKi8KK3R5cGVkZWYgYnJsYXBpX3BhcmFtX2Jvb2xfdCBicmxhcGlfcGFyYW1fZGV2aWNlT25saW5lX3Q7CisKKy8qIGJybGFwaV9wYXJhbV9yZXRhaW5Eb3RzX3QgKi8KKy8qKiBUeXBlIHRvIGJlIHVzZWQgZm9yIEJSTEFQSV9QQVJBTV9SRVRBSU5fRE9UUyAqLwordHlwZWRlZiBicmxhcGlfcGFyYW1fYm9vbF90IGJybGFwaV9wYXJhbV9yZXRhaW5Eb3RzX3Q7CisKKy8qIGJybGFwaV9wYXJhbV9jb21wdXRlckJyYWlsbGVDZWxsU2l6ZV90ICovCisvKiogVHlwZSB0byBiZSB1c2VkIGZvciBCUkxBUElfUEFSQU1fQ09NUFVURVJfQlJBSUxMRV9DRUxMX1NJWkUgKi8KK3R5cGVkZWYgdWludDhfdCBicmxhcGlfcGFyYW1fY29tcHV0ZXJCcmFpbGxlQ2VsbFNpemVfdDsKKworLyogYnJsYXBpX3BhcmFtX2xpdGVyYXJ5QnJhaWxsZV90ICovCisvKiogVHlwZSB0byBiZSB1c2VkIGZvciBCUkxBUElfUEFSQU1fTElURVJBUllfQlJBSUxMRSAqLwordHlwZWRlZiBicmxhcGlfcGFyYW1fYm9vbF90IGJybGFwaV9wYXJhbV9saXRlcmFyeUJyYWlsbGVfdDsKKworLyogYnJsYXBpX3BhcmFtX2N1cnNvckRvdHNfdCAqLworLyoqIFR5cGUgdG8gYmUgdXNlZCBmb3IgQlJMQVBJX1BBUkFNX0NVUlNPUl9ET1RTICovCit0eXBlZGVmIHVpbnQ4X3QgYnJsYXBpX3BhcmFtX2N1cnNvckRvdHNfdDsKKworLyogYnJsYXBpX3BhcmFtX2N1cnNvckJsaW5rUGVyaW9kX3QgKi8KKy8qKiBUeXBlIHRvIGJlIHVzZWQgZm9yIEJSTEFQSV9QQVJBTV9DVVJTT1JfQkxJTktfUEVSSU9EICovCit0eXBlZGVmIHVpbnQzMl90IGJybGFwaV9wYXJhbV9jdXJzb3JCbGlua1BlcmlvZF90OworCisvKiBicmxhcGlfcGFyYW1fY3Vyc29yQmxpbmtQZXJjZW50YWdlX3QgKi8KKy8qKiBUeXBlIHRvIGJlIHVzZWQgZm9yIEJSTEFQSV9QQVJBTV9DVVJTT1JfQkxJTktfUEVSQ0VOVEFHRSAqLwordHlwZWRlZiB1aW50OF90IGJybGFwaV9wYXJhbV9jdXJzb3JCbGlua1BlcmNlbnRhZ2VfdDsKKworLyogYnJsYXBpX3BhcmFtX3JlbmRlcmVkQ2VsbHNfdCAqLworLyoqIFR5cGUgdG8gYmUgdXNlZCBmb3IgQlJMQVBJX1BBUkFNX1JFTkRFUkVEX0NFTExTICovCit0eXBlZGVmIHVpbnQ4X3QgKmJybGFwaV9wYXJhbV9yZW5kZXJlZENlbGxzX3Q7CisKKy8qIGJybGFwaV9wYXJhbV9za2lwSWRlbnRpY2FsTGluZXNfdCAqLworLyoqIFR5cGUgdG8gYmUgdXNlZCBmb3IgQlJMQVBJX1BBUkFNX1NLSVBfSURFTlRJQ0FMX0xJTkVTICovCit0eXBlZGVmIGJybGFwaV9wYXJhbV9ib29sX3QgYnJsYXBpX3BhcmFtX3NraXBJZGVudGljYWxMaW5lc190OworCisvKiBicmxhcGlfcGFyYW1fYXVkaWJsZUFsZXJ0c190ICovCisvKiogVHlwZSB0byBiZSB1c2VkIGZvciBCUkxBUElfUEFSQU1fQVVESUJMRV9BTEVSVFMgKi8KK3R5cGVkZWYgYnJsYXBpX3BhcmFtX2Jvb2xfdCBicmxhcGlfcGFyYW1fYXVkaWJsZUFsZXJ0c190OworCisvKiBicmxhcGlfcGFyYW1fY2xpcGJvYXJkQ29udGVudF90ICovCisvKiogVHlwZSB0byBiZSB1c2VkIGZvciBCUkxBUElfUEFSQU1fQ0xJUEJPQVJEX0NPTlRFTlQgKi8KK3R5cGVkZWYgY2hhciAqYnJsYXBpX3BhcmFtX2NsaXBib2FyZENvbnRlbnRfdDsKKworLyogYnJsYXBpX3BhcmFtX2NvbW1hbmRLZXljb2RlX3QgKi8KKy8qKiBUeXBlIHRvIGJlIHVzZWQgZm9yIEJSTEFQSV9QQVJBTV9CT1VORF9DT01NQU5EX0tFWUNPREVTICovCit0eXBlZGVmIGJybGFwaV9rZXlDb2RlX3QgYnJsYXBpX3BhcmFtX2NvbW1hbmRLZXljb2RlX3Q7CisKKy8qIGJybGFwaV9wYXJhbV9jb21tYW5kS2V5Y29kZU5hbWVfdCAqLworLyoqIFR5cGUgdG8gYmUgdXNlZCBmb3IgQlJMQVBJX1BBUkFNX0NPTU1BTkRfS0VZQ09ERV9OQU1FICovCit0eXBlZGVmIGNoYXIgKmJybGFwaV9wYXJhbV9jb21tYW5kS2V5Y29kZU5hbWVfdDsKKworLyogYnJsYXBpX3BhcmFtX2NvbW1hbmRLZXljb2RlU3VtbWFyeV90ICovCisvKiogVHlwZSB0byBiZSB1c2VkIGZvciBCUkxBUElfUEFSQU1fQ09NTUFORF9LRVlDT0RFX1NVTU1BUlkgKi8KK3R5cGVkZWYgY2hhciAqYnJsYXBpX3BhcmFtX2NvbW1hbmRLZXljb2RlU3VtbWFyeV90OworCisvKiBicmxhcGlfcGFyYW1fZHJpdmVyS2V5Y29kZV90ICovCisvKiogVHlwZSB0byBiZSB1c2VkIGZvciBCUkxBUElfUEFSQU1fREVGSU5FRF9EUklWRVJfS0VZQ09ERVMgKi8KK3R5cGVkZWYgYnJsYXBpX2tleUNvZGVfdCBicmxhcGlfcGFyYW1fZHJpdmVyS2V5Y29kZV90OworCisvKiBicmxhcGlfcGFyYW1fZHJpdmVyS2V5Y29kZU5hbWVfdCAqLworLyoqIFR5cGUgdG8gYmUgdXNlZCBmb3IgQlJMQVBJX1BBUkFNX0RSSVZFUl9LRVlDT0RFX05BTUUgKi8KK3R5cGVkZWYgY2hhciAqYnJsYXBpX3BhcmFtX2RyaXZlcktleWNvZGVOYW1lX3Q7CisKKy8qIGJybGFwaV9wYXJhbV9kcml2ZXJLZXljb2RlU3VtbWFyeV90ICovCisvKiogVHlwZSB0byBiZSB1c2VkIGZvciBCUkxBUElfUEFSQU1fRFJJVkVSX0tFWUNPREVfU1VNTUFSWSAqLwordHlwZWRlZiBjaGFyICpicmxhcGlfcGFyYW1fZHJpdmVyS2V5Y29kZVN1bW1hcnlfdDsKKworLyogYnJsYXBpX3BhcmFtX2NvbXB1dGVyQnJhaWxsZVJvd3NNYXNrX3QgKi8KKy8qKiBUeXBlIHRvIGJlIHVzZWQgZm9yIEJSTEFQSV9QQVJBTV9DT01QVVRFUl9CUkFJTExFX1JPV1NfTUFTSyAqLwordHlwZWRlZiB1aW50OF90IGJybGFwaV9wYXJhbV9jb21wdXRlckJyYWlsbGVSb3dzTWFza190WzU0NF07CisKKy8qIGJybGFwaV9wYXJhbV9jb21wdXRlckJyYWlsbGVSb3dDZWxsc190ICovCisvKiogVHlwZSB0byBiZSB1c2VkIGZvciBCUkxBUElfUEFSQU1fQ09NUFVURVJfQlJBSUxMRV9ST1dfQ0VMTFMgKi8KK3R5cGVkZWYgc3RydWN0IHsKKyAgdWludDhfdCBjZWxsc1swWDEwMF07CisgIHVpbnQ4X3QgZGVmaW5lZFswWDEwMCAvIDhdOworfSBicmxhcGlfcGFyYW1fY29tcHV0ZXJCcmFpbGxlUm93Q2VsbHNfdDsKKworLyogYnJsYXBpX3BhcmFtX2NvbXB1dGVyQnJhaWxsZVRhYmxlX3QgKi8KKy8qKiBUeXBlIHRvIGJlIHVzZWQgZm9yIEJSTEFQSV9QQVJBTV9DT01QVVRFUl9CUkFJTExFX1RBQkxFICovCit0eXBlZGVmIGNoYXIgKmJybGFwaV9wYXJhbV9jb21wdXRlckJyYWlsbGVUYWJsZV90OworCisvKiBicmxhcGlfcGFyYW1fbGl0ZXJhcnlCcmFpbGxlVGFibGVfdCAqLworLyoqIFR5cGUgdG8gYmUgdXNlZCBmb3IgQlJMQVBJX1BBUkFNX0xJVEVSQVJZX0JSQUlMTEVfVEFCTEUgKi8KK3R5cGVkZWYgY2hhciAqYnJsYXBpX3BhcmFtX2xpdGVyYXJ5QnJhaWxsZVRhYmxlX3Q7CisKKy8qIGJybGFwaV9wYXJhbV9tZXNzYWdlTG9jYWxlX3QgKi8KKy8qKiBUeXBlIHRvIGJlIHVzZWQgZm9yIEJSTEFQSV9QQVJBTV9NRVNTQUdFX0xPQ0FMRSAgICAgICovCit0eXBlZGVmIGNoYXIgKmJybGFwaV9wYXJhbV9tZXNzYWdlTG9jYWxlX3Q7CisKKy8qKiBEZXByZWNhdGVkIGluIEJSTFRUWS02LjIgLSB1c2UgQlJMQVBJX1BBUkFNX0JPVU5EX0NPTU1BTkRfS0VZQ09ERVMgKi8KKyNkZWZpbmUgQlJMQVBJX1BBUkFNX0JPVU5EX0NPTU1BTkRfQ09ERVMgQlJMQVBJX1BBUkFNX0JPVU5EX0NPTU1BTkRfS0VZQ09ERVMKKy8qKiBEZXByZWNhdGVkIGluIEJSTFRUWS02LjIgLSB1c2UgYnJsYXBpX3BhcmFtX2NvbW1hbmRLZXljb2RlX3QgKi8KK3R5cGVkZWYgYnJsYXBpX3BhcmFtX2NvbW1hbmRLZXljb2RlX3QgYnJsYXBpX3BhcmFtX2NvbW1hbmRDb2RlX3Q7CisKKy8qKiBEZXByZWNhdGVkIGluIEJSTFRUWS02LjIgLSB1c2UgQlJMQVBJX1BBUkFNX0NPTU1BTkRfS0VZQ09ERV9OQU1FICovCisjZGVmaW5lIEJSTEFQSV9QQVJBTV9DT01NQU5EX1NIT1JUX05BTUUgQlJMQVBJX1BBUkFNX0NPTU1BTkRfS0VZQ09ERV9OQU1FCisvKiogRGVwcmVjYXRlZCBpbiBCUkxUVFktNi4yIC0gdXNlIGJybGFwaV9wYXJhbV9jb21tYW5kS2V5Y29kZU5hbWVfdCAqLwordHlwZWRlZiBicmxhcGlfcGFyYW1fY29tbWFuZEtleWNvZGVOYW1lX3QgYnJsYXBpX3BhcmFtX2NvbW1hbmRTaG9ydE5hbWVfdDsKKworLyoqIERlcHJlY2F0ZWQgaW4gQlJMVFRZLTYuMiAtIHVzZSBCUkxBUElfUEFSQU1fQ09NTUFORF9LRVlDT0RFX1NVTU1BUlkgKi8KKyNkZWZpbmUgQlJMQVBJX1BBUkFNX0NPTU1BTkRfTE9OR19OQU1FIEJSTEFQSV9QQVJBTV9DT01NQU5EX0tFWUNPREVfU1VNTUFSWQorLyoqIERlcHJlY2F0ZWQgaW4gQlJMVFRZLTYuMiAtIHVzZSBicmxhcGlfcGFyYW1fY29tbWFuZEtleWNvZGVTdW1tYXJ5X3QgKi8KK3R5cGVkZWYgYnJsYXBpX3BhcmFtX2NvbW1hbmRLZXljb2RlU3VtbWFyeV90IGJybGFwaV9wYXJhbV9jb21tYW5kTG9uZ05hbWVfdDsKKworLyoqIERlcHJlY2F0ZWQgaW4gQlJMVFRZLTYuMiAtIHVzZSBCUkxBUElfUEFSQU1fREVGSU5FRF9EUklWRVJfS0VZQ09ERVMgKi8KKyNkZWZpbmUgQlJMQVBJX1BBUkFNX0RFVklDRV9LRVlfQ09ERVMgQlJMQVBJX1BBUkFNX0RFRklORURfRFJJVkVSX0tFWUNPREVTCisvKiogRGVwcmVjYXRlZCBpbiBCUkxUVFktNi4yIC0gdXNlIGJybGFwaV9wYXJhbV9kcml2ZXJLZXljb2RlX3QgKi8KK3R5cGVkZWYgYnJsYXBpX3BhcmFtX2RyaXZlcktleWNvZGVfdCBicmxhcGlfcGFyYW1fa2V5Q29kZV90OworCisvKiogRGVwcmVjYXRlZCBpbiBCUkxUVFktNi4yIC0gdXNlIEJSTEFQSV9QQVJBTV9EUklWRVJfS0VZQ09ERV9OQU1FICovCisjZGVmaW5lIEJSTEFQSV9QQVJBTV9LRVlfU0hPUlRfTkFNRSBCUkxBUElfUEFSQU1fRFJJVkVSX0tFWUNPREVfTkFNRQorLyoqIERlcHJlY2F0ZWQgaW4gQlJMVFRZLTYuMiAtIHVzZSBicmxhcGlfcGFyYW1fZHJpdmVyS2V5Y29kZU5hbWVfdCAqLwordHlwZWRlZiBicmxhcGlfcGFyYW1fZHJpdmVyS2V5Y29kZU5hbWVfdCBicmxhcGlfcGFyYW1fa2V5U2hvcnROYW1lX3Q7CisKKy8qKiBEZXByZWNhdGVkIGluIEJSTFRUWS02LjIgLSB1c2UgQlJMQVBJX1BBUkFNX0RSSVZFUl9LRVlDT0RFX1NVTU1BUlkgKi8KKyNkZWZpbmUgQlJMQVBJX1BBUkFNX0tFWV9MT05HX05BTUUgQlJMQVBJX1BBUkFNX0RSSVZFUl9LRVlDT0RFX1NVTU1BUlkKKy8qKiBEZXByZWNhdGVkIGluIEJSTFRUWS02LjIgLSB1c2UgYnJsYXBpX3BhcmFtX2RyaXZlcktleWNvZGVTdW1tYXJ5X3QgKi8KK3R5cGVkZWYgYnJsYXBpX3BhcmFtX2RyaXZlcktleWNvZGVTdW1tYXJ5X3QgYnJsYXBpX3BhcmFtX2tleUxvbmdOYW1lX3Q7CisKKy8qKiBFbnVtZXJhdGlvbiBvZiBwYXJhbWV0ZXIgdmFsdWUgdHlwZXMgKi8KK3R5cGVkZWYgZW51bSB7CisgIEJSTEFQSV9QQVJBTV9UWVBFX1NUUklORywJLyoqPCBQYXJhbWV0ZXIgaXMgYSBzdHJpbmcgb2YgVVRGLTggY2hhcmFjdGVycyAqLworICBCUkxBUElfUEFSQU1fVFlQRV9CT09MRUFOLAkvKio8IFBhcmFtZXRlciBpcyBvbmUgb3IgbW9yZSBib29sZWFucyByZXByZXNlbnRlZCBieSBhIHVpbnQ4X3QgKi8KKyAgQlJMQVBJX1BBUkFNX1RZUEVfVUlOVDgsCS8qKjwgUGFyYW1ldGVyIGlzIG9uZSBvciBtb3JlIDgtYml0IHVuc2lnbmVkIGludGVnZXJzICovCisgIEJSTEFQSV9QQVJBTV9UWVBFX1VJTlQxNiwJLyoqPCBQYXJhbWV0ZXIgaXMgb25lIG9yIG1vcmUgMTYtYml0IHVuc2lnbmVkIGludGVnZXJzICovCisgIEJSTEFQSV9QQVJBTV9UWVBFX1VJTlQzMiwJLyoqPCBQYXJhbWV0ZXIgaXMgb25lIG9yIG1vcmUgMzItYml0IHVuc2lnbmVkIGludGVnZXJzICovCisgIEJSTEFQSV9QQVJBTV9UWVBFX1VJTlQ2NCwJLyoqPCBQYXJhbWV0ZXIgaXMgb25lIG9yIG1vcmUgNjQtYml0IHVuc2lnbmVkIGludGVnZXJzICovCisgIEJSTEFQSV9QQVJBTV9UWVBFX0tFWUNPREUgPSBCUkxBUElfUEFSQU1fVFlQRV9VSU5UNjQsCS8qKjwgUGFyYW1ldGVyIGlzIG9uZSBvciBtb3JlIGtleSBjb2RlcyAqLworfSBicmxhcGlfcGFyYW1fdHlwZV90OworCisvKiogU3RydWN0dXJlIHRoYXQgZGVzY3JpYmVzIHRoZSBwcm9wZXJ0aWVzIG9mIGEgcGFyYW1ldGVyICovCit0eXBlZGVmIHN0cnVjdCB7CisgIGJybGFwaV9wYXJhbV90eXBlX3QgdHlwZTsJLyoqPCBUeXBlIG9mIHRoZSBwYXJhbWV0ZXIncyB2YWx1ZSAqLworICB1aW50MTZfdCBhcnJheVNpemU7CQkvKio8IElmIC5pc0FycmF5IGlzIHRydWUsIHRoZSBudW1iZXIgb2YgZWxlbWVudHMgaW4gdGhlIHBhcmFtZXRlcidzIHZhbHVlOworCQkJCSAgKiBpZiAuaXNBcnJheSBpcyBmYWxzZSB0aGVuIHRoZSBudW1iZXIgb2YgZWxlbWVudHMgaW4gdGhlIHBhcmFtZXRlcidzIHZhbHVlIGlzIGFsd2F5cyBleGFjdGx5IG9uZSAqLworICB1aW50MTZfdCBpc0FycmF5OjE7CQkvKio8IFRydWUgaWYgdGhlIHBhcmFtZXRlcidzIHZhbHVlIGNvbnRhaW5zIHNldmVyYWwgdmFsdWVzOworCQkJCSAgKjwgRmFsc2UgbWVhbnMgYWx3YXlzIGF4YWN0bHkgb25lICovCisgIHVpbnQxNl90IGNhblJlYWQ6MTsJCS8qKjwgVHJ1ZSBpZiB0aGUgcGFyYW1ldGVyIGlzIHJlYWRhYmxlICovCisgIHVpbnQxNl90IGNhbldyaXRlOjE7CQkvKio8IFRydWUgaWYgdGhlIHBhcmFtZXRlciBpcyB3cml0YWJsZSAqLworICB1aW50MTZfdCBjYW5XYXRjaDoxOwkJLyoqPCBUcnVlIGlmIHRoZSBwYXJhbWV0ZXIgY2FuIGJlIHdhdGNoZWQgKi8KKyAgdWludDE2X3QgYWJpUGFkZGluZzE6NDsKKyAgdWludDE2X3QgaGFzU3VicGFyYW06MTsJLyoqPCB3aGV0aGVyIHRoZSBQYXJhbWV0ZXIgdXNlcyB0aGUgc3VicGFyYW0gYXJndW1lbnQgKi8KK30gYnJsYXBpX3BhcmFtX3Byb3BlcnRpZXNfdDsKKworLyoqIEVudW1lcmF0aW9uIG9mIHBhcmFtZXRlciB0eXBlcyAqLworLyogYnJsYXBpX2dldFBhcmFtZXRlclByb3BlcnRpZXMgKi8KKy8qKiBSZXR1cm4gYSBkZXNjcmlwdGlvbiBvZiB0aGUgcHJvcGVydGllcyBvZiBhIHBhcmFtZXRlcgorICoKKyAqIFxwYXJhbSBwYXJhbWV0ZXIgaXMgdGhlIHBhcmFtZXRlciB3aG9zZSBwcm9wZXJ0aWVzIGRlc2NyaWJpb24gc2hhbGwgYmUgcmV0dXJuZWQuCisgKgorICogXHJldHVybiBhIHBvaW50ZXIgdG8gdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBwcm9wZXJ0aWVzIG9mIHRoZSBwYXJhbWV0ZXIuCisgKi8KK2V4dGVybiBjb25zdCBicmxhcGlfcGFyYW1fcHJvcGVydGllc190ICpicmxhcGlfZ2V0UGFyYW1ldGVyUHJvcGVydGllcyhicmxhcGlfcGFyYW1fdCBwYXJhbWV0ZXIpOworCisvKiogQH0gKi8KKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYgLyogX19jcGx1c3BsdXMgKi8KKworI2VuZGlmIC8qIEJSTEFQSV9JTkNMVURFRF9QQVJBTSAqLwpkaWZmIC0tZ2l0IGEvUHJvZ3JhbXMvYnJsYXBpX3Byb3RvY29sLmggYi9Qcm9ncmFtcy9icmxhcGlfcHJvdG9jb2wuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MjBiYTQ2Ci0tLSAvZGV2L251bGwKKysrIGIvUHJvZ3JhbXMvYnJsYXBpX3Byb3RvY29sLmgKQEAgLTAsMCArMSwzMDkgQEAKKy8qCisgKiBsaWJicmxhcGkgLSBBIGxpYnJhcnkgcHJvdmlkaW5nIGFjY2VzcyB0byBicmFpbGxlIHRlcm1pbmFscyBmb3IgYXBwbGljYXRpb25zLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwMi0yMDIzIGJ5CisgKiAgIFNhbXVlbCBUaGliYXVsdCA8U2FtdWVsLlRoaWJhdWx0QGVucy1seW9uLm9yZz4KKyAqICAgU8OpYmFzdGllbiBIaW5kZXJlciA8U2ViYXN0aWVuLkhpbmRlcmVyQGVucy1seW9uLm9yZz4KKyAqCisgKiBsaWJicmxhcGkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorICoKKyAqIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyAqCisgKiBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisgKi8KKworLyoqIFxmaWxlCisgKiBcYnJpZWYgdHlwZXMgYW5kIGNvbnN0YW50cyBmb3IgXGUgQnJsQVBJJ3MgcHJvdG9jb2wKKyAqLworCisjaWZuZGVmIEJSTEFQSV9JTkNMVURFRF9QUk9UT0NPTAorI2RlZmluZSBCUkxBUElfSU5DTFVERURfUFJPVE9DT0wKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZiAvKiBfX2NwbHVzcGx1cyAqLworCisjaW5jbHVkZSAiYnJsYXBpLmgiCisKKy8qIHRoaXMgaXMgZm9yIFVJTlQzMl9NQVggKi8KKyNpbmNsdWRlIDxpbnR0eXBlcy5oPgorI2lmbmRlZiBVSU5UMzJfTUFYCisjZGVmaW5lIFVJTlQzMl9NQVggKDQyOTQ5NjcyOTVVKQorI2VuZGlmIC8qIFVJTlQzMl9NQVggKi8KKworLyogVGhlIHR5cGUgc2l6ZV90IGlzIGRlZmluZWQgdGhlcmUhICovCisjaW5jbHVkZSA8dW5pc3RkLmg+CisKKy8qKiBcZGVmZ3JvdXAgYnJsYXBpX3Byb3RvY29sIEJybEFQSSdzIHByb3RvY29sCisgKiBcYnJpZWYgSW5zdHJ1Y3Rpb25zIGFuZCBjb25zdGFudHMgZm9yIFxlIEJybEFQSSAncyBwcm90b2NvbAorICoKKyAqIFRoZXNlIGFyZSBkZWZpbmVzIGZvciB0aGUgcHJvdG9jb2wgYmV0d2VlbiBcZSBCcmxBUEkgJ3Mgc2VydmVyIGFuZCBjbGllbnRzLgorICogVW5kZXJzdGFuZGluZyBpcyBub3QgbmVlZGVkIHRvIHVzZSB0aGUgXGUgQnJsQVBJIGxpYnJhcnksIHNvIHJlYWRpbmcgdGhpcworICogaXMgbm90IG5lZWRlZCB1bmxlc3MgcmVhbGx5IHdhbnRpbmcgdG8gY29ubmVjdCB0byBcZSBCcmxBUEkgd2l0aG91dAorICogXGUgQnJsQVBJICdzIGxpYnJhcnkuCisgKgorICogQHsgKi8KKworI2RlZmluZSBCUkxBUElfUFJPVE9DT0xfVkVSU0lPTiAoKHVpbnQzMl90KSA4KSAvKiogQ29tbXVuaWNhdGlvbiBwcm90b2NvbCB2ZXJzaW9uICovCisKKy8qKiBNYXhpbXVtIHBhY2tldCBzaXplIGZvciBwYWNrZXRzIGV4Y2hhbmdlZCBvbiBzb2NrZXRzIGFuZCB3aXRoIGJyYWlsbGUKKyAqIHRlcm1pbmFsICovCisjZGVmaW5lIEJSTEFQSV9NQVhQQUNLRVRTSVpFIDQwOTYKKworI2RlZmluZSBCUkxBUElfUEFDS0VUX1ZFUlNJT04gICAgICAgICAndicgICAvKio8IFZlcnNpb24gICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBCUkxBUElfUEFDS0VUX0FVVEggICAgICAgICAgICAnYScgICAvKio8IEF1dGhvcml6YXRpb24gICAgICAgICAgICAgICAqLworI2RlZmluZSBCUkxBUElfUEFDS0VUX0dFVERSSVZFUk5BTUUgICAnbicgICAvKio8IEFzayB3aGljaCBkcml2ZXIgaXMgdXNlZCAgICAqLworI2RlZmluZSBCUkxBUElfUEFDS0VUX0dFVE1PREVMSUQgICAgICAnZCcgICAvKio8IEFzayB3aGljaCBtb2RlbCBpcyB1c2VkICAgICAqLworI2RlZmluZSBCUkxBUElfUEFDS0VUX0dFVERJU1BMQVlTSVpFICAncycgICAvKio8IERpbWVuc2lvbnMgb2YgYnJsIGRpc3BsYXkgICAqLworI2RlZmluZSBCUkxBUElfUEFDS0VUX0VOVEVSVFRZTU9ERSAgICAndCcgICAvKio8IEFza3MgZm9yIGEgc3BlY2lmaWVkIHR0eSAgICAqLworI2RlZmluZSBCUkxBUElfUEFDS0VUX1NFVEZPQ1VTICAgICAgICAnRicgICAvKio8IFNldCBjdXJyZW50IHR0eSBmb2N1cyAgICAgICAqLworI2RlZmluZSBCUkxBUElfUEFDS0VUX0xFQVZFVFRZTU9ERSAgICAnTCcgICAvKio8IFJlbGVhc2UgdGhlIHR0eSAgICAgICAgICAgICAqLworI2RlZmluZSBCUkxBUElfUEFDS0VUX0tFWSAgICAgICAgICAgICAnaycgICAvKio8IEJyYWlsbGUga2V5ICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBCUkxBUElfUEFDS0VUX0lHTk9SRUtFWVJBTkdFUyAnbScgICAvKio8IE1hc2sga2V5IHJhbmdlcyAgICAgICAgICAgICAqLworI2RlZmluZSBCUkxBUElfUEFDS0VUX0FDQ0VQVEtFWVJBTkdFUyAndScgICAvKio8IFVubWFzayBrZXkgcmFuZ2VzICAgICAgICAgICAqLworI2RlZmluZSBCUkxBUElfUEFDS0VUX1dSSVRFICAgICAgICAgICAndycgICAvKio8IFdyaXRlICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBCUkxBUElfUEFDS0VUX0VOVEVSUkFXTU9ERSAgICAnKicgICAvKio8IEVudGVyIGluIHJhdyBtb2RlICAgICAgICAgICAqLworI2RlZmluZSBCUkxBUElfUEFDS0VUX0xFQVZFUkFXTU9ERSAgICAnIycgICAvKio8IExlYXZlIHJhdyBtb2RlICAgICAgICAgICAgICAqLworI2RlZmluZSBCUkxBUElfUEFDS0VUX1BBQ0tFVCAgICAgICAgICAncCcgICAvKio8IFJhdyBwYWNrZXRzICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBCUkxBUElfUEFDS0VUX0FDSyAgICAgICAgICAgICAnQScgICAvKio8IEFja25vd2xlZGdlbWVudCAgICAgICAgICAgICAqLworI2RlZmluZSBCUkxBUElfUEFDS0VUX0VSUk9SICAgICAgICAgICAnZScgICAvKio8IG5vbi1mYXRhbCBlcnJvciAgICAgICAgICAgICAqLworI2RlZmluZSBCUkxBUElfUEFDS0VUX0VYQ0VQVElPTiAgICAgICAnRScgICAvKio8IEV4Y2VwdGlvbiAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBCUkxBUElfUEFDS0VUX1NVU1BFTkREUklWRVIgICAnUycgICAvKio8IFN1c3BlbmQgZHJpdmVyICAgICAgICAgICAgICAqLworI2RlZmluZSBCUkxBUElfUEFDS0VUX1JFU1VNRURSSVZFUiAgICAnUicgICAvKio8IFJlc3VtZSBkcml2ZXIgICAgICAgICAgICAgICAqLworI2RlZmluZSBCUkxBUElfUEFDS0VUX1NZTkNIUk9OSVpFICAgICAnWicgICAvKio8IFN5bmNocm9uaXplIGV4Y2VwdGlvbnMgICAgICAqLworI2RlZmluZSBCUkxBUElfUEFDS0VUX1BBUkFNX1ZBTFVFICAgICAoKCdQJzw8OCkgKyAnVicpIC8qKjwgUGFyYW1ldGVyIHZhbHVlICAqLworI2RlZmluZSBCUkxBUElfUEFDS0VUX1BBUkFNX1JFUVVFU1QgICAoKCdQJzw8OCkgKyAnUicpIC8qKjwgUGFyYW1ldGVyIHJlcXVlc3QqLworI2RlZmluZSBCUkxBUElfUEFDS0VUX1BBUkFNX1VQREFURSAgICAoKCdQJzw8OCkgKyAnVScpIC8qKjwgUGFyYW1ldGVyIHVwZGF0ZSAqLworCisvKiogTWFnaWMgbnVtYmVyIHRvIGdpdmUgd2hlbiBzZW5kaW5nIGEgQlJMUEFDS0VUX0VOVEVSUkFXTU9ERSBvciBCUkxQQUNLRVRfU1VTUEVORCBwYWNrZXQgKi8KKyNkZWZpbmUgQlJMQVBJX0RFVklDRV9NQUdJQyAoMHhkZWFkYmVlZkwpCisKKy8qKiBTdHJ1Y3R1cmUgb2YgcGFja2V0cyBoZWFkZXJzICovCit0eXBlZGVmIHN0cnVjdCB7CisgIHVpbnQzMl90IHNpemU7CisgIGJybGFwaV9wYWNrZXRUeXBlX3QgdHlwZTsKK30gYnJsYXBpX2hlYWRlcl90OworCisvKiogU2l6ZSBvZiBwYWNrZXQgaGVhZGVycyAqLworI2RlZmluZSBCUkxBUElfSEVBREVSU0laRSBzaXplb2YoYnJsYXBpX2hlYWRlcl90KQorCisvKiogU3RydWN0dXJlIG9mIHZlcnNpb24gcGFja2V0cyAqLwordHlwZWRlZiBzdHJ1Y3QgeworICB1aW50MzJfdCBwcm90b2NvbFZlcnNpb247Cit9IGJybGFwaV92ZXJzaW9uUGFja2V0X3Q7CisKKy8qKiBTdHJ1Y3R1cmUgb2YgYXV0aG9yaXphdGlvbiBwYWNrZXRzICovCit0eXBlZGVmIHN0cnVjdCB7CisgIHVpbnQzMl90IHR5cGU7CisgIHVuc2lnbmVkIGNoYXIga2V5OworfSBicmxhcGlfYXV0aENsaWVudFBhY2tldF90OworCit0eXBlZGVmIHN0cnVjdCB7CisgIHVpbnQzMl90IHR5cGVbMV07Cit9IGJybGFwaV9hdXRoU2VydmVyUGFja2V0X3Q7CisKKyNkZWZpbmUgQlJMQVBJX0FVVEhfTk9ORSAnTicgLyoqPCBObyBvciBpbXBsaWNpdCBhdXRob3JpemF0aW9uICAgICAgICAgICAgICAqLworI2RlZmluZSBCUkxBUElfQVVUSF9LRVkgICdLJyAvKio8IEtleSBhdXRob3JpemF0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEJSTEFQSV9BVVRIX0NSRUQgJ0MnIC8qKjwgRXhwbGljaXQgc29ja2V0IGNyZWRlbnRpYWxzIGF1dGhvcml6YXRpb24gKi8KKworLyoqIFN0cnVjdHVyZSBvZiBlcnJvciBwYWNrZXRzICovCit0eXBlZGVmIHN0cnVjdCB7CisgIHVpbnQzMl90IGNvZGU7CisgIGJybGFwaV9wYWNrZXRUeXBlX3QgdHlwZTsKKyAgdW5zaWduZWQgY2hhciBwYWNrZXQ7Cit9IGJybGFwaV9lcnJvclBhY2tldF90OworCisvKiogU3RydWN0dXJlIG9mIGVudGVyUmF3TW9kZSAvIHN1c3BlbmQgcGFja2V0cyAqLwordHlwZWRlZiBzdHJ1Y3QgeworICB1aW50MzJfdCBtYWdpYzsKKyAgdW5zaWduZWQgY2hhciBuYW1lTGVuZ3RoOworICBjaGFyIG5hbWU7Cit9IGJybGFwaV9nZXREcml2ZXJTcGVjaWZpY01vZGVQYWNrZXRfdDsKKworLyoqIEZsYWdzIGZvciB3cml0aW5nICovCisjZGVmaW5lIEJSTEFQSV9XRl9ESVNQTEFZTlVNQkVSIDBYMDEgICAgLyoqPCBEaXNwbGF5IG51bWJlciAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQlJMQVBJX1dGX1JFR0lPTiAgICAgICAgMFgwMiAgICAvKio8IFJlZ2lvbiBwYXJhbWV0ZXIgICAgICAgICAgICAgICAqLworI2RlZmluZSBCUkxBUElfV0ZfVEVYVCAgICAgICAgICAwWDA0ICAgIC8qKjwgQ29udGFpbnMgc29tZSB0ZXh0ICAgICAgICAgICAgICovCisjZGVmaW5lIEJSTEFQSV9XRl9BVFRSX0FORCAgICAgIDBYMDggICAgLyoqPCBBbmQgYXR0cmlidXRlcyAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQlJMQVBJX1dGX0FUVFJfT1IgICAgICAgMFgxMCAgICAvKio8IE9yIGF0dHJpYnV0ZXMgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBCUkxBUElfV0ZfQ1VSU09SICAgICAgICAwWDIwICAgIC8qKjwgQ3Vyc29yIHBvc2l0aW9uICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEJSTEFQSV9XRl9DSEFSU0VUICAgICAgIDBYNDAgICAgLyoqPCBDaGFyc2V0ICAgICAgICAgICAgICAgICAgICAgICAgKi8KKworLyoqIFN0cnVjdHVyZSBvZiBleHRlbmRlZCB3cml0ZSBwYWNrZXRzICovCit0eXBlZGVmIHN0cnVjdCB7CisgIHVpbnQzMl90IGZsYWdzOyAvKiogRmxhZ3MgdG8gdGVsbCB3aGljaCBmaWVsZHMgYXJlIHByZXNlbnQgKi8KKyAgdW5zaWduZWQgY2hhciBkYXRhOyAvKiogRmllbGRzIGluIHRoZSBzYW1lIG9yZGVyIGFzIGZsYWcgd2VpZ2h0ICovCit9IGJybGFwaV93cml0ZUFyZ3VtZW50c1BhY2tldF90OworCisvKiogRmxhZ3MgZm9yIHBhcmFtZXRlciB2YWx1ZXMgKi8KKyNkZWZpbmUgQlJMQVBJX1BWRl9HTE9CQUwgICAgICAgICAgICAwWDAxICAgIC8qKiBWYWx1ZSBpcyB0aGUgZ2xvYmFsIHZhbHVlICovCisKKyNkZWZpbmUgQlJMQVBJX01BWFBBUkFNU0laRSAoQlJMQVBJX01BWFBBQ0tFVFNJWkUgLSAoc2l6ZW9mKHVpbnQzMl90KSArIHNpemVvZihicmxhcGlfcGFyYW1fdCkgKyAyKnNpemVvZih1aW50MzJfdCkpKQorCisvKiogU3RydWN0dXJlIG9mIFBhcmFtZXRlciB2YWx1ZSBvciB1cGRhdGUgKi8KK3R5cGVkZWYgc3RydWN0IHsKKyAgdWludDMyX3QgZmxhZ3M7IC8qKiBGbGFncyB0byB0ZWxsIGhvdyB2YWx1ZSB3YXMgZ290dGVuICovCisgIGJybGFwaV9wYXJhbV90IHBhcmFtOyAvKiogV2hpY2ggcGFyYW1ldGVyIGJlaW5nIHRyYW5zbWl0dGVkICovCisgIHVpbnQzMl90IHN1YnBhcmFtX2hpOyAvKiogV2hpY2ggc3ViLXBhcmFtZXRlciBiZWluZyB0cmFuc21pdHRlZCwgaGkgMzJiaXRzICovCisgIHVpbnQzMl90IHN1YnBhcmFtX2xvOyAvKiogV2hpY2ggc3ViLXBhcmFtZXRlciBiZWluZyB0cmFuc21pdHRlZCwgbG8gMzJiaXRzICovCisgIHVuc2lnbmVkIGNoYXIgZGF0YVtCUkxBUElfTUFYUEFSQU1TSVpFXTsgLyoqIENvbnRlbnQgb2YgdGhlIHBhcmFtZXRlciAqLworfSBicmxhcGlfcGFyYW1WYWx1ZVBhY2tldF90OworCisvKiogRmxhZ3MgZm9yIHBhcmFtZXRlciByZXF1ZXN0cyAqLworI2RlZmluZSBCUkxBUElfUEFSQU1GX0dFVCAgICAgICAgICAgIDBYMTAwICAgIC8qKiBHZXQgY3VycmVudCBwYXJhbWV0ZXIgdmFsdWUgICAgKi8KKyNkZWZpbmUgQlJMQVBJX1BBUkFNRl9TVUJTQ1JJQkUgICAgICAwWDIwMCAgICAvKiogU3Vic2NyaWJlIHRvIHBhcmFtZXRlciB1cGRhdGVzICovCisjZGVmaW5lIEJSTEFQSV9QQVJBTUZfVU5TVUJTQ1JJQkUgICAgMFg0MDAgICAgLyoqIFVuc3Vic2NyaWJlIGZyb20gcGFyYW1ldGVyIHVwZGF0ZXMgKi8KKworLyoqIFN0cnVjdHVyZSBvZiBQYXJhbWV0ZXIgcmVxdWVzdCAqLwordHlwZWRlZiBzdHJ1Y3QgeworICB1aW50MzJfdCBmbGFnczsgLyoqIEZsYWdzIHRvIHRlbGwgd2hldGhlci9ob3cgdG8gZ2V0IHZhbHVlcyAqLworICBicmxhcGlfcGFyYW1fdCBwYXJhbTsgLyoqIFdoaWNoIHBhcmFtZXRlciB0byBiZSB0cmFuc21pdHRlZCAqLworICB1aW50MzJfdCBzdWJwYXJhbV9oaTsgLyoqIFdoaWNoIHN1Yi1wYXJhbWV0ZXIgYmVpbmcgdHJhbnNtaXR0ZWQsIGhpIDMyYml0cyAqLworICB1aW50MzJfdCBzdWJwYXJhbV9sbzsgLyoqIFdoaWNoIHN1Yi1wYXJhbWV0ZXIgYmVpbmcgdHJhbnNtaXR0ZWQsIGxvIDMyYml0cyAqLworfSBicmxhcGlfcGFyYW1SZXF1ZXN0UGFja2V0X3Q7CisKKy8qKiBUeXBlIGZvciBwYWNrZXRzLiAgU2hvdWxkIGJlIHVzZWQgaW5zdGVhZCBvZiBhIG1lcmUgY2hhcltdLCBzaW5jZSBpdCBoYXMKKyAqIGNvcnJlY3QgYWxpZ25tZW50IHJlcXVpcmVtZW50cy4gKi8KK3R5cGVkZWYgdW5pb24geworCXVuc2lnbmVkIGNoYXIgZGF0YVtCUkxBUElfTUFYUEFDS0VUU0laRV07CisJYnJsYXBpX3ZlcnNpb25QYWNrZXRfdCB2ZXJzaW9uOworCWJybGFwaV9hdXRoQ2xpZW50UGFja2V0X3QgYXV0aENsaWVudDsKKwlicmxhcGlfYXV0aFNlcnZlclBhY2tldF90IGF1dGhTZXJ2ZXI7CisJYnJsYXBpX2Vycm9yUGFja2V0X3QgZXJyb3I7CisJYnJsYXBpX2dldERyaXZlclNwZWNpZmljTW9kZVBhY2tldF90IGdldERyaXZlclNwZWNpZmljTW9kZTsKKwlicmxhcGlfd3JpdGVBcmd1bWVudHNQYWNrZXRfdCB3cml0ZUFyZ3VtZW50czsKKwlicmxhcGlfcGFyYW1WYWx1ZVBhY2tldF90IHBhcmFtVmFsdWU7CisJYnJsYXBpX3BhcmFtUmVxdWVzdFBhY2tldF90IHBhcmFtUmVxdWVzdDsKKwl1aW50MzJfdCB1aW50MzI7Cit9IGJybGFwaV9wYWNrZXRfdDsKKworLyogYnJsYXBpX3dyaXRlUGFja2V0ICovCisvKiogU2VuZCBhIHBhY2tldCB0byBcZSBCcmxBUEkgc2VydmVyCisgKgorICogVGhpcyBmdW5jdGlvbiBpcyBmb3IgaW50ZXJuYWwgdXNlLCBidXQgb25lIG1pZ2h0IHVzZSBpdCBpZiBvbmUgcmVhbGx5IGtub3dzCisgKiB3aGF0IG9uZSBpcyBkb2luZy4uLgorICoKKyAqIFxlIHR5cGUgc2hvdWxkIG9ubHkgYmUgb25lIG9mIHRoZSBhYm92ZSBkZWZpbmVkIEJSTFBBQ0tFVF8qLgorICoKKyAqIFRoZSBzeW50YXggaXMgdGhlIHNhbWUgYXMgd3JpdGUoKSdzLgorICoKKyAqIFxyZXR1cm4gMCBvbiBzdWNjZXNzLCAtMSBvbiBmYWlsdXJlLgorICoKKyAqIFxzYSBicmxhcGlfcmVhZFBhY2tldEhlYWRlcigpCisgKiBicmxhcGlfcmVhZFBhY2tldENvbnRlbnQoKQorICogYnJsYXBpX3JlYWRQYWNrZXQoKQorICovCitzc2l6ZV90IGJybGFwaV93cml0ZVBhY2tldChicmxhcGlfZmlsZURlc2NyaXB0b3IgZmQsIGJybGFwaV9wYWNrZXRUeXBlX3QgdHlwZSwgY29uc3Qgdm9pZCAqYnVmLCBzaXplX3Qgc2l6ZSk7CisKKy8qIGJybGFwaV9yZWFkUGFja2V0SGVhZGVyICovCisvKiogUmVhZCB0aGUgaGVhZGVyICh0eXBlK3NpemUpIG9mIGEgcGFja2V0IGZyb20gXGUgQnJsQVBJIHNlcnZlcgorICoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgZm9yIGludGVybmFsIHVzZSwgYnV0IG9uZSBtaWdodCB1c2UgaXQgaWYgb25lIHJlYWxseSBrbm93cworICogd2hhdCBvbmUgaXMgZG9pbmcuLi4KKyAqCisgKiBcZSB0eXBlIGlzIHdoZXJlIHRoZSBmdW5jdGlvbiB3aWxsIHN0b3JlIHRoZSBwYWNrZXQgdHlwZTsgaXQgc2hvdWxkIGFsd2F5cworICogYmUgb25lIG9mIHRoZSBhYm92ZSBkZWZpbmVkIEJSTFBBQ0tFVF8qIChvciBlbHNlIHNvbWV0aGluZyB2ZXJ5IG5hc3R5IG11c3QKKyAqIGhhdmUgaGFwcGVuZWQgOi8pLgorICoKKyAqIFxyZXR1cm4gcGFja2V0J3Mgc2l6ZSwgLTIgaWYgXGMgRU9GIG9jY3VycmVkLCAtMSBvbiBlcnJvciBvciBzaWduYWwKKyAqIGludGVycnVwdGlvbi4KKyAqCisgKiBcc2EgYnJsYXBpX3dyaXRlUGFja2V0KCkKKyAqIGJybGFwaV9yZWFkUGFja2V0Q29udGVudAorICogYnJsYXBpX3JlYWRQYWNrZXQKKyAqLworc3NpemVfdCBicmxhcGlfcmVhZFBhY2tldEhlYWRlcihicmxhcGlfZmlsZURlc2NyaXB0b3IgZmQsIGJybGFwaV9wYWNrZXRUeXBlX3QgKnBhY2tldFR5cGUpOworCisvKiBicmxhcGlfcmVhZFBhY2tldENvbnRlbnQgKi8KKy8qKiBSZWFkIHRoZSBjb250ZW50IG9mIGEgcGFja2V0IGZyb20gXGUgQnJsQVBJIHNlcnZlcgorICoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgZm9yIGludGVybmFsIHVzZSwgYnV0IG9uZSBtaWdodCB1c2UgaXQgaWYgb25lIHJlYWxseSBrbm93cworICogd2hhdCBvbmUgaXMgZG9pbmcuLi4KKyAqCisgKiBcZSBwYWNrZXRTaXplIGlzIHRoZSBzaXplIGFubm91bmNlZCBieSBcZSBicmxhcGlfcmVhZFBhY2tldEhlYWRlcigpCisgKgorICogXGUgYnVmU2l6ZSBpcyB0aGUgc2l6ZSBvZiBcZSBidWYKKyAqCisgKiBccmV0dXJuIHBhY2tldFNpemUsIC0yIGlmIFxjIEVPRiBvY2N1cnJlZCwgLTEgb24gZXJyb3IuCisgKgorICogSWYgdGhlIHBhY2tldCBpcyBsYXJnZXIgdGhhbiB0aGUgc3VwcGxpZWQgYnVmZmVyLCB0aGUgYnVmZmVyIHdpbGwgYmUKKyAqIGZpbGxlZCB3aXRoIHRoZSBiZWdpbm5pbmcgb2YgdGhlIHBhY2tldCwgdGhlIHJlc3Qgb2YgdGhlIHBhY2tldCBiZWluZworICogZGlzY2FyZGVkLiBUaGlzIGZvbGxvd3MgdGhlIHNlbWFudGljcyBvZiB0aGUgcmVjdiBzeXN0ZW0gY2FsbCB3aGVuIHRoZQorICogTVNHX1RSVU5DIG9wdGlvbiBpcyBnaXZlbi4KKyAqCisgKiBcc2EgYnJsYXBpX3dyaXRlUGFja2V0KCkKKyAqIGJybGFwaV9yZWFkUGFja2V0SGVhZGVyKCkKKyAqIGJybGFwaV9yZWFkUGFja2V0KCkKKyAqLworc3NpemVfdCBicmxhcGlfcmVhZFBhY2tldENvbnRlbnQoYnJsYXBpX2ZpbGVEZXNjcmlwdG9yIGZkLCBzaXplX3QgcGFja2V0U2l6ZSwgdm9pZCAqYnVmLCBzaXplX3QgYnVmU2l6ZSk7CisKKy8qIGJybGFwaV9yZWFkUGFja2V0ICovCisvKiogUmVhZCBhIHBhY2tldCBmcm9tIFxlIEJybEFQSSBzZXJ2ZXIKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGZvciBpbnRlcm5hbCB1c2UsIGJ1dCBvbmUgbWlnaHQgdXNlIGl0IGlmIG9uZSByZWFsbHkga25vd3MKKyAqIHdoYXQgb25lIGlzIGRvaW5nLi4uCisgKgorICogXGUgdHlwZSBpcyB3aGVyZSB0aGUgZnVuY3Rpb24gd2lsbCBzdG9yZSB0aGUgcGFja2V0IHR5cGU7IGl0IHNob3VsZCBhbHdheXMKKyAqIGJlIG9uZSBvZiB0aGUgYWJvdmUgZGVmaW5lZCBCUkxQQUNLRVRfKiAob3IgZWxzZSBzb21ldGhpbmcgdmVyeSBuYXN0eSBtdXN0CisgKiBoYXZlIGhhcHBlbmVkIDovKS4KKyAqCisgKiBUaGUgc3ludGF4IGlzIHRoZSBzYW1lIGFzIHJlYWQoKSdzLgorICoKKyAqIFxyZXR1cm4gcGFja2V0J3Mgc2l6ZSwgLTIgaWYgXGMgRU9GIG9jY3VycmVkLCAtMSBvbiBlcnJvciBvciBzaWduYWwKKyAqIGludGVycnVwdGlvbi4KKyAqCisgKiBJZiB0aGUgcGFja2V0IGlzIGxhcmdlciB0aGFuIHRoZSBzdXBwbGllZCBidWZmZXIsIHRoZSBidWZmZXIgd2lsbCBiZQorICogZmlsbGVkIHdpdGggdGhlIGJlZ2lubmluZyBvZiB0aGUgcGFja2V0LCB0aGUgcmVzdCBvZiB0aGUgcGFja2V0IGJlaW5nCisgKiBkaXNjYXJkZWQuIFRoaXMgZm9sbG93cyB0aGUgc2VtYW50aWNzIG9mIHRoZSByZWN2IHN5c3RlbSBjYWxsIHdoZW4gdGhlCisgKiBNU0dfVFJVTkMgb3B0aW9uIGlzIGdpdmVuLgorICoKKyAqIFxzYSBicmxhcGlfd3JpdGVQYWNrZXQoKQorICovCitzc2l6ZV90IGJybGFwaV9yZWFkUGFja2V0KGJybGFwaV9maWxlRGVzY3JpcHRvciBmZCwgYnJsYXBpX3BhY2tldFR5cGVfdCAqdHlwZSwgdm9pZCAqYnVmLCBzaXplX3Qgc2l6ZSk7CisKKy8qIGJybGFwaV9mZF9tdXRleCAqLworLyoqIE11dGV4IGZvciBwcm90ZWN0aW5nIGNvbmN1cnJlbnQgZmQgYWNjZXNzCisgKgorICogSW4gb3JkZXIgdG8gcmVndWxhdGUgY29uY3VycmVudCBhY2Nlc3MgdG8gdGhlIGxpYnJhcnkncyBmaWxlIGRlc2NyaXB0b3IgYW5kCisgKiByZXF1ZXN0cyB0byAvIGFuc3dlcnMgZnJvbSBcZSBCcmxBUEkgc2VydmVyLCBldmVyeSBmdW5jdGlvbiBvZiB0aGUgbGlicmFyeQorICogbG9ja3MgdGhpcyBtdXRleCwgbmFtZWx5CisgKgorICogLSBicmxhcGlfb3BlbkNvbm5lY3Rpb24oKQorICogLSBicmxhcGlfY2xvc2VDb25uZWN0aW9uKCkKKyAqIC0gYnJsYXBpX2VudGVyUmF3TW9kZSgpCisgKiAtIGJybGFwaV9sZWF2ZVJhd01vZGUoKQorICogLSBicmxhcGlfc2VuZFJhdygpCisgKiAtIGJybGFwaV9yZWN2UmF3KCkKKyAqIC0gYnJsYXBpX2dldERyaXZlck5hbWUoKQorICogLSBicmxhcGlfZ2V0RGlzcGxheVNpemUoKQorICogLSBicmxhcGlfZW50ZXJUdHlNb2RlKCkKKyAqIC0gYnJsYXBpX2VudGVyVHR5TW9kZVdpdGhQYXRoKCkKKyAqIC0gYnJsYXBpX2xlYXZlVHR5TW9kZSgpCisgKiAtIGJybGFwaV8qd3JpdGUqKCkKKyAqIC0gYnJsYXBpXyh1bik/aWdub3Jla2V5KFJhbmdlfFNldCkoKQorICogLSBicmxhcGlfcmVhZEtleSgpCisgKgorICogSWYgYm90aCB0aGVzZSBmdW5jdGlvbnMgYW5kIGJybGFwaV93cml0ZVBhY2tldCgpIG9yIGJybGFwaV9yZWFkUGFja2V0KCkgYXJlCisgKiB1c2VkIGluIGEgbXVsdGl0aHJlYWRlZCBhcHBsaWNhdGlvbiwgdGhpcyBtdXRleCBtdXN0IGJlIGxvY2tlZCBiZWZvcmUgY2FsbGluZworICogYnJsYXBpX3dyaXRlUGFja2V0KCkgb3IgYnJsYXBpX3JlYWRQYWNrZXQoKSwgYW5kIHVubG9ja2VkIGFmdGVyd2FyZHMuCisgKi8KKyNpZmRlZiBfX01JTkdXMzJfXworI2luY2x1ZGUgPHdpbmRvd3MuaD4KK2V4dGVybiBIQU5ETEUgYnJsYXBpX2ZkX211dGV4OworI2Vsc2UgLyogX19NSU5HVzMyX18gKi8KKyNpbmNsdWRlIDxwdGhyZWFkLmg+CitleHRlcm4gcHRocmVhZF9tdXRleF90IGJybGFwaV9mZF9tdXRleDsKKyNlbmRpZiAvKiBfX01JTkdXMzJfXyAqLworCisvKiogQH0gKi8KKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYgLyogX19jcGx1c3BsdXMgKi8KKworI2VuZGlmIC8qIEJSTEFQSV9JTkNMVURFRF9QUk9UT0NPTCAqLwpkaWZmIC0tZ2l0IGEvUHJvZ3JhbXMvYnJsYXBpX3NlcnZlci5jIGIvUHJvZ3JhbXMvYnJsYXBpX3NlcnZlci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ5NTgwMjUKLS0tIC9kZXYvbnVsbAorKysgYi9Qcm9ncmFtcy9icmxhcGlfc2VydmVyLmMKQEAgLTAsMCArMSw0ODkyIEBACisvKgorICogQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyAqICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyAqCisgKiBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorICoKKyAqIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyAqCisgKiBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisgKi8KKworLyogYXBpX3NlcnZlci5jIDogTWFpbiBmaWxlIGZvciBCcmxBcGkgc2VydmVyICovCisKKyNkZWZpbmUgU0VSVkVSX1NPQ0tFVF9MSU1JVCA0CisjZGVmaW5lIFNFUlZFUl9TRUxFQ1RfVElNRU9VVCAxCisjZGVmaW5lIFVOQVVUSF9MSU1JVCA1CisjZGVmaW5lIFVOQVVUSF9USU1FT1VUIDMwCisKKyNkZWZpbmUgUkVMRUFTRSAiQnJsQVBJIFNlcnZlcjogcmVsZWFzZSAiIEJSTEFQSV9SRUxFQVNFCisjZGVmaW5lIENPUFlSSUdIVCAiICAgQ29weXJpZ2h0IChDKSAyMDAyLTIwMjMgYnkgU8OpYmFzdGllbiBIaW5kZXJlciA8U2ViYXN0aWVuLkhpbmRlcmVyQGVucy1seW9uLm9yZz4sIFwKK1NhbXVlbCBUaGliYXVsdCA8c2FtdWVsLnRoaWJhdWx0QGVucy1seW9uLm9yZz4iCisKKyNpbmNsdWRlICJwcm9sb2d1ZS5oIgorCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRkZWYuaD4KKyNpbmNsdWRlIDxzdGRib29sLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxmY250bC5oPgorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisjaW5jbHVkZSA8dGltZS5oPgorI2luY2x1ZGUgPGxvY2FsZS5oPgorCisjaWZkZWYgSEFWRV9JQ09OVl9ICisjaW5jbHVkZSA8aWNvbnYuaD4KKyNlbmRpZiAvKiBIQVZFX0lDT05WX0ggKi8KKworI2lmZGVmIEhBVkVfQUxMT0NBX0gKKyNpbmNsdWRlIDxhbGxvY2EuaD4KKyNlbmRpZiAvKiBIQVZFX0FMTE9DQV9IICovCisKKyNpZmRlZiBfX01JTkdXMzJfXworI2luY2x1ZGUgInN5c3RlbV93aW5kb3dzLmgiCisjaW5jbHVkZSAid2luX3B0aHJlYWQuaCIKKworI2Vsc2UgLyogX19NSU5HVzMyX18gKi8KKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisjaW5jbHVkZSA8c3lzL3VuLmg+CisjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgorI2luY2x1ZGUgPG5ldGluZXQvdGNwLmg+CisjaW5jbHVkZSA8YXJwYS9pbmV0Lmg+CisjaW5jbHVkZSA8bmV0ZGIuaD4KKyNpbmNsdWRlIDxwdGhyZWFkLmg+CisKKyNpZmRlZiBIQVZFX1NZU19TRUxFQ1RfSAorI2luY2x1ZGUgPHN5cy9zZWxlY3QuaD4KKyNlbHNlIC8qIEhBVkVfU1lTX1NFTEVDVF9IICovCisjaW5jbHVkZSA8c3lzL3RpbWUuaD4KKyNlbmRpZiAvKiBIQVZFX1NZU19TRUxFQ1RfSCAqLworI2VuZGlmIC8qIF9fTUlOR1czMl9fICovCisKKyNkZWZpbmUgQlJMQVBJX05PX0RFUFJFQ0FURUQKKyNpbmNsdWRlICJicmxhcGkuaCIKKyNpbmNsdWRlICJicmxhcGlfcHJvdG9jb2wuaCIKKyNpbmNsdWRlICJicmxhcGlfa2V5cmFuZ2VzLmgiCisKKyNpbmNsdWRlICJjbWRfYnJsYXBpLmgiCisjaW5jbHVkZSAiYnJsX2NtZHMuaCIKKyNpbmNsdWRlICJicmxfdXRpbHMuaCIKKyNpbmNsdWRlICJlbWJlZC5oIgorI2luY2x1ZGUgImNsaXBib2FyZC5oIgorI2luY2x1ZGUgInR0Yi5oIgorI2luY2x1ZGUgImNvcmUuaCIKKyNpbmNsdWRlICJhcGlfc2VydmVyLmgiCisjaW5jbHVkZSAicmVwb3J0LmgiCisjaW5jbHVkZSAibG9nLmgiCisjaW5jbHVkZSAiYWRkcmVzc2VzLmgiCisjaW5jbHVkZSAicHJlZnMuaCIKKyNpbmNsdWRlICJmaWxlLmgiCisjaW5jbHVkZSAicGFyc2UuaCIKKyNpbmNsdWRlICJ0aW1pbmcuaCIKKyNpbmNsdWRlICJhdXRoLmgiCisjaW5jbHVkZSAiaW9fZ2VuZXJpYy5oIgorI2luY2x1ZGUgImlvX21pc2MuaCIKKyNpbmNsdWRlICJzY3IuaCIKKyNpbmNsdWRlICJjaGFyc2V0LmgiCisjaW5jbHVkZSAiYXN5bmNfc2lnbmFsLmgiCisjaW5jbHVkZSAidGhyZWFkLmgiCisjaW5jbHVkZSAiYmxpbmsuaCIKKworI2lmZGVmIF9fTUlOR1czMl9fCisjZGVmaW5lIExvZ1NvY2tldEVycm9yKG1zZykgbG9nV2luZG93c1NvY2tldEVycm9yKG1zZykKKyNlbHNlIC8qIF9fTUlOR1czMl9fICovCisjZGVmaW5lIExvZ1NvY2tldEVycm9yKG1zZykgbG9nU3lzdGVtRXJyb3IobXNnKQorI2VuZGlmIC8qIF9fTUlOR1czMl9fICovCisKKyNpZmRlZiBfX0NZR1dJTl9fCisjdW5kZWYgUEZfTE9DQUwKKyNlbmRpZiAvKiBfX0NZR1dJTl9fICovCisKK3R5cGVkZWYgZW51bSB7CisgIFBBUk1fQVVUSCwKKyAgUEFSTV9IT1NULAorI2lmZGVmIEVOQUJMRV9BUElfRlVaWklORworICBQQVJNX0ZVWlosCisgIFBBUk1fRlVaWlNFRUQsCisgIFBBUk1fRlVaWkhFQUQsCisgIFBBUk1fRlVaWldSSVRFLAorICBQQVJNX0ZVWlpXUklURVVURjgsCisgIFBBUk1fQ1JBU0gsCisjZW5kaWYKK30gUGFyYW1ldGVyczsKKworY29uc3QgY2hhciAqY29uc3QgYXBpX3NlcnZlclBhcmFtZXRlcnNbXSA9IHsKKyAgImF1dGgiLCAiaG9zdCIsCisjaWZkZWYgRU5BQkxFX0FQSV9GVVpaSU5HCisgICJmdXp6IiwgImZ1enpzZWVkIiwgImZ1enpoZWFkIiwgImZ1enp3cml0ZSIsICJmdXp6d3JpdGV1dGY4IiwgImNyYXNoIiwKKyNlbmRpZiAvKiBFTkFCTEVfQVBJX0ZVWlpJTkcgKi8KKyAgTlVMTAorfTsKKworI2lmZGVmIEVOQUJMRV9BUElfRlVaWklORworc3RhdGljIGludCBmdXp6X3J1bnM7CitzdGF0aWMgaW50IGZ1enpfc2VlZDsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgZnV6el9oZWFkOworc3RhdGljIHVuc2lnbmVkIGludCBmdXp6X3dyaXRlOworc3RhdGljIHVuc2lnbmVkIGludCBmdXp6X3dyaXRldXRmODsKKyNlbmRpZiAvKiBFTkFCTEVfQVBJX0ZVWlpJTkcgKi8KKworI2RlZmluZSBXRVJSKHgsIHksIC4uLikgZG8geyBcCisgIGxvZ01lc3NhZ2UoTE9HX0VSUiwgIndyaXRpbmcgZXJyb3IgJWQgdG8gJSJQUklmZCwgeSwgeCk7IFwKKyAgbG9nTWVzc2FnZShMT0dfRVJSLCBfX1ZBX0FSR1NfXyk7IFwKKyAgd3JpdGVFcnJvcih4LCB5KTsgXAorfSB3aGlsZSgwKQorI2RlZmluZSBXRVhDKGZkLCBlcnIsIHR5cGUsIHBhY2tldCwgc2l6ZSwgLi4uKSBkbyB7IFwKKyAgbG9nTWVzc2FnZShMT0dfRVJSLCAid3JpdGluZyBleGNlcHRpb24gJWQgdG8gZmQgJSJQUklmZCwgZXJyLCBmZCk7IFwKKyAgbG9nTWVzc2FnZShMT0dfRVJSLCBfX1ZBX0FSR1NfXyk7IFwKKyAgd3JpdGVFeGNlcHRpb24oZmQsIGVyciwgdHlwZSwgcGFja2V0LCBzaXplKTsgXAorfSB3aGlsZSgwKQorCisvKiBUaGVzZSBDSEVDSyogbWFjcm9zIGNoZWNrIHdoZXRoZXIgYSBjb25kaXRpb24gaXMgdHJ1ZSwgYW5kLCBpZiBub3QsICovCisvKiBzZW5kIGJhY2sgZWl0aGVyIGEgbm9uLWZhdGFsIGVycm9yLCBvciBhbiBleGNlcHRpb24gKi8KKyNkZWZpbmUgQ0hFQ0tFUlIoY29uZGl0aW9uLCBlcnJvciwgbXNnLCAuLi4pIFwKK2lmICghKCBjb25kaXRpb24gKSkgeyBcCisgIFdFUlIoYy0+ZmQsIGVycm9yLCAiJXMgbm90IG1ldDogIiBtc2csICNjb25kaXRpb24sICMjIF9fVkFfQVJHU19fKTsgXAorICByZXR1cm4gMDsgXAorfSBlbHNlIHsgfQorI2RlZmluZSBDSEVDS0VYQyhjb25kaXRpb24sIGVycm9yLCBtc2csIC4uLikgXAoraWYgKCEoIGNvbmRpdGlvbiApKSB7IFwKKyAgV0VYQyhjLT5mZCwgZXJyb3IsIHR5cGUsIHBhY2tldCwgc2l6ZSwgIiVzIG5vdCBtZXQ6ICIgbXNnLCAjY29uZGl0aW9uLCAjIyBfX1ZBX0FSR1NfXyk7IFwKKyAgcmV0dXJuIDA7IFwKK30gZWxzZSB7IH0KKworI2lmZGVmIGJybGFwaV9lcnJvcgorI3VuZGVmIGJybGFwaV9lcnJvcgorI2VuZGlmCisKK3N0YXRpYyBicmxhcGlfZXJyb3JfdCBicmxhcGlzZXJ2ZXJfZXJyb3I7CisjZGVmaW5lIGJybGFwaV9lcnJvciBicmxhcGlzZXJ2ZXJfZXJyb3IKKworI2RlZmluZSBCUkxBUEkoZnVuKSBicmxhcGlzZXJ2ZXJfICMjIGZ1bgorI2luY2x1ZGUgImJybGFwaV9jb21tb24uaCIKKworLyoqIGFzayBmb3IgXGUgYnJsdHR5IGNvbW1hbmRzICovCisjZGVmaW5lIEJSTF9DT01NQU5EUyAwCisvKiogYXNrIGZvciByYXcgZHJpdmVyIGtleWNvZGVzICovCisjZGVmaW5lIEJSTF9LRVlDT0RFUyAxCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqIEdMT0JBTCBUWVBFUyBBTkQgVkFSSUFCTEVTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworZXh0ZXJuIGNoYXIgKm9wdF9icmFpbGxlUGFyYW1ldGVyczsKK2V4dGVybiBjaGFyICpjZmdfYnJhaWxsZVBhcmFtZXRlcnM7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgdW5zaWduZWQgaW50IGN1cnNvcjsKKyAgd2NoYXJfdCAqdGV4dDsKKyAgdW5zaWduZWQgY2hhciAqYW5kQXR0cjsKKyAgdW5zaWduZWQgY2hhciAqb3JBdHRyOworfSBCcmFpbGxlV2luZG93OworCit0eXBlZGVmIGVudW0geyBUT0RJU1BMQVksIEVNUFRZIH0gQnJsQnVmU3RhdGU7CisKK3R5cGVkZWYgc3RydWN0IFN1YnNjcmlwdGlvbiB7CisgIGJybGFwaV9wYXJhbV90IHBhcmFtZXRlcjsKKyAgYnJsYXBpX3BhcmFtX3N1YnBhcmFtX3Qgc3VicGFyYW07CisgIGJybGFwaV9wYXJhbV9mbGFnc190IGZsYWdzOworICBzdHJ1Y3QgU3Vic2NyaXB0aW9uICpwcmV2LCAqbmV4dDsKK30gU3Vic2NyaXB0aW9uOworCit0eXBlZGVmIHN0cnVjdCBDb25uZWN0aW9uIHsKKyAgdWludDMyX3QgY2xpZW50VmVyc2lvbjsKKyAgc3RydWN0IENvbm5lY3Rpb24gKnByZXYsICpuZXh0OworICBGaWxlRGVzY3JpcHRvciBmZDsKKyAgaW50IGF1dGg7CisgIHN0cnVjdCBUdHkgKnR0eTsKKyAgYnJsYXBpX3BhcmFtX2NsaWVudFByaW9yaXR5X3QgY2xpZW50X3ByaW9yaXR5OworICBpbnQgcmF3LCBzdXNwZW5kOworICB1bnNpZ25lZCBpbnQgaG93OyAvKiBob3cga2V5cyBtdXN0IGJlIGRlbGl2ZXJlZCB0byBjbGllbnRzICovCisgIHVpbnQ4X3QgcmV0YWluRG90czsgLyogd2hldGhlciBjbGllbnQgd2FudHMgZG90cyBpbnN0ZWFkIG9mIHRyYW5zbGF0aW5nIHRvIGNoYXJzICovCisgIEJyYWlsbGVXaW5kb3cgYnJhaWxsZVdpbmRvdzsKKyAgQnJsQnVmU3RhdGUgYnJsYnVmc3RhdGU7CisgIHB0aHJlYWRfbXV0ZXhfdCBicmFpbGxlV2luZG93TXV0ZXg7CisgIEtleXJhbmdlTGlzdCAqYWNjZXB0ZWRLZXlzOworICBwdGhyZWFkX211dGV4X3QgYWNjZXB0ZWRLZXlzTXV0ZXg7CisgIHRpbWVfdCB1cFRpbWU7CisgIFBhY2tldCBwYWNrZXQ7CisgIHN0cnVjdCBTdWJzY3JpcHRpb24gc3Vic2NyaXB0aW9uczsKK30gQ29ubmVjdGlvbjsKKwordHlwZWRlZiBzdHJ1Y3QgVHR5IHsKKyAgaW50IGZvY3VzOworICBpbnQgbnVtYmVyOworICBzdHJ1Y3QgQ29ubmVjdGlvbiAqY29ubmVjdGlvbnM7CisgIHN0cnVjdCBUdHkgKmZhdGhlcjsgLyogZmF0aGVyICovCisgIHN0cnVjdCBUdHkgKipwcmV2bmV4dCwqbmV4dDsgLyogc2libGluZ3MgKi8KKyAgc3RydWN0IFR0eSAqc3VidHR5czsgLyogY2hpbGRyZW4gKi8KK30gVHR5OworCit0eXBlZGVmIHN0cnVjdCB7CisgIHVuc2lnbmVkIGxvY2FsX3N1YnNjcmlwdGlvbnM7CisgIHVuc2lnbmVkIGdsb2JhbF9zdWJzY3JpcHRpb25zOworfSBQYXJhbVN0YXRlOworCitzdGF0aWMgUGFyYW1TdGF0ZSBwYXJhbVN0YXRlW0JSTEFQSV9QQVJBTV9DT1VOVF07CisKKy8qIFBvaW50ZXIgdG8gdGhlIGNvbm5lY3Rpb24gYWNjZXB0ZXIgdGhyZWFkICovCitzdGF0aWMgcHRocmVhZF90IHNlcnZlclRocmVhZDsgLyogc2VydmVyICovCisjaWZkZWYgRU5BQkxFX0FQSV9GVVpaSU5HCitzdGF0aWMgcHRocmVhZF90IGZ1enplclRocmVhZDsgICAgICAgICAgICAgICAgICAgICAgIC8qIGZ1enplciAqLworc3RhdGljIHB0aHJlYWRfdCBjcmFzaGVyVGhyZWFkOyAgICAgICAgICAgICAgICAgICAgICAvKiBjcmFzaCByZXByb2R1Y2VyICovCisjZW5kaWYgLyogRU5BQkxFX0FQSV9GVVpaSU5HICovCitzdGF0aWMgcHRocmVhZF90IHNvY2tldFRocmVhZHNbU0VSVkVSX1NPQ0tFVF9MSU1JVF07IC8qIHNvY2tldCBiaW5kaW5nIHRocmVhZHMgKi8KK3N0YXRpYyBpbnQgcnVubmluZzsgLyogc2hvdWxkIHRocmVhZHMgYmUgcnVubmluZz8gKi8KK3N0YXRpYyBjaGFyICoqc29ja2V0SG9zdHMgPSBOVUxMOyAvKiBzb2NrZXQgbG9jYWwgaG9zdHMgKi8KK3N0YXRpYyBzdHJ1Y3Qgc29ja2V0SW5mbyB7CisgIGludCBhZGRyZmFtaWx5OworICBGaWxlRGVzY3JpcHRvciBmZDsKKyAgY2hhciAqaG9zdDsKKyAgY2hhciAqcG9ydDsKKyNpZmRlZiBfX01JTkdXMzJfXworICBPVkVSTEFQUEVEIG92ZXJsOworI2VuZGlmIC8qIF9fTUlOR1czMl9fICovCit9IHNvY2tldEluZm9bU0VSVkVSX1NPQ0tFVF9MSU1JVF07IC8qIGluZm9ybWF0aW9uIGZvciBjbGVhbmluZyBzb2NrZXRzICovCisKK3N0YXRpYyBpbnQgc2VydmVyU29ja2V0Q291bnQ7IC8qIG51bWJlciBvZiBzb2NrZXRzICovCitzdGF0aWMgaW50IHNlcnZlclNvY2tldHNQZW5kaW5nOyAvKiBudW1iZXIgb2Ygc29ja2V0cyBub3Qgb3BlbmVkIHlldCAqLworcHRocmVhZF9tdXRleF90IGFwaVNvY2tldHNNdXRleDsKKworLyogUHJvdGVjdHMgZnJvbSBjb25uZWN0aW9uIGFkZGl0aW9uIC8gcmVtb3ZlIGZyb20gdGhlIHNlcnZlciB0aHJlYWQgKi8KK3B0aHJlYWRfbXV0ZXhfdCBhcGlDb25uZWN0aW9uc011dGV4OworCisvKiBQcm90ZWN0cyB0aGUgcmVhbCBkcml2ZXIncyBmdW5jdGlvbnMgKi8KK3B0aHJlYWRfbXV0ZXhfdCBhcGlEcml2ZXJNdXRleDsKKworLyogV2hpY2ggY29ubmVjdGlvbiBjdXJyZW50bHkgaGFzIHJhdyBtb2RlIG9yIHJlcXVlc3RlZCBkZXZpY2Ugc3VzcGVuc2lvbiAqLworcHRocmVhZF9tdXRleF90IGFwaVJhd011dGV4Oworc3RhdGljIENvbm5lY3Rpb24gKnJhd0Nvbm5lY3Rpb24gPSBOVUxMOworc3RhdGljIENvbm5lY3Rpb24gKnN1c3BlbmRDb25uZWN0aW9uID0gTlVMTDsKKworcHRocmVhZF9tdXRleF90IGFwaVBhcmFtTXV0ZXg7CisvKiBXaGljaCBjb25uZWN0aW9uIGlzIGN1cnJlbnRseSBtb2RpZnlpbmcgYSBwYXJhbWV0ZXIgKi8KK3N0YXRpYyBDb25uZWN0aW9uICpwYXJhbVVwZGF0ZUNvbm5lY3Rpb247CisKKy8qIG11dGV4IGxvY2sgb3JkZXIgaXMgYXMgZm9sbG93czoKKyAqIDEuIGFwaVBhcmFtTXV0ZXgKKyAqIDIuIGFwaUNvbm5lY3Rpb25zTXV0ZXgKKyAqIDMuIGFwaVJhd011dGV4CisgKiA0LiBhY2NlcHRlZEtleXNNdXRleCBvciBicmFpbGxlV2luZG93TXV0ZXgKKyAqIDUuIGFwaURyaXZlck11dGV4CisqLworCitzdGF0aWMgVHR5IG5vdHR5Oworc3RhdGljIFR0eSB0dHlzOworCitzdGF0aWMgdW5zaWduZWQgaW50IHVuYXV0aENvbm5lY3Rpb25zOworc3RhdGljIHVuc2lnbmVkIGludCB1bmF1dGhDb25uTG9nID0gMDsKKworLyoKKyAqIEFQSSBzdGF0ZXMgYXJlCisgKiAtIHN0b3BwZWQ6IE5vIHRocmVhZCBpcyBydW5uaW5nIChoZW5jZSBubyBjb25uZWN0aW9uIGFsbG93ZWQpLgorICogICBzdGFydGVkOiBUaGUgc2VydmVyIHRocmVhZCBpcyBydW5uaW5nLCBhY2NlcHRpbmcgY29ubmVjdGlvbnMuCisgKiAtIHVubGlua2VkOiBUcnVlQnJhaWxsZSA9PSAmbm9CcmFpbGxlOiBBUEkgaGFzIG5vIGNvbnRyb2wgb24gdGhlIGRyaXZlci4KKyAqICAgbGlua2VkOiBUcnVlQnJhaWxsZSAhPSAmbm9CcmFpbGxlOiBBUEkgY29udHJvbHMgdGhlIGRyaXZlci4KKyAqIC0gY29yZSBzdXNwZW5kZWQ6IFRoZSBjb3JlIGFza2VkIHRvIGtlZXAgdGhlIGRldmljZSBjbG9zZWQuCisgKiAgIGNvcmUgYWN0aXZlOiBUaGUgY29yZSBhc2tlZCBoYXMgb3BlbmVkIHRoZSBkZXZpY2UuCisgKiAtIGRldmljZSBjbG9zZWQ6IEFQSSBrZWVwcyB0aGUgZGV2aWNlIGNsb3NlZC4KKyAqICAgZGV2aWNlIG9wZW5lZDogQVBJIGhhcyByZWFsbHkgb3BlbmVkIHRoZSBkZXZpY2UuCisgKgorICogQ29tYmluYXRpb25zIGNhbiBiZToKKyAqIC0gaW5pdGlhbDogQVBJIHN0b3BwZWQsIHVubGlua2VkLCBjb3JlIHN1c3BlbmRlZCBhbmQgZGV2aWNlIGNsb3NlZC4KKyAqIC0gc3RhcnRlZDogQVBJIHN0YXJ0ZWQsIHVubGlua2VkLCBjb3JlIHN1c3BlbmRlZCBhbmQgZGV2aWNlIGNsb3NlZC4KKyAqIC0gbm9ybWFsOiBBUEkgc3RhcnRlZCwgbGlua2VkLCBjb3JlIGFjdGl2ZSBhbmQgZGV2aWNlIG9wZW5lZC4KKyAqIC0gY29yZSBzdXNwZW5kOiBBUEkgc3RhcnRlZCwgbGlua2VkLCBjb3JlIHN1c3BlbmRlZCBidXQgZGV2aWNlIG9wZW5lZC4KKyAqICAgKEJybEFQSS1vbmx5IG91dHB1dCkuCisgKiAtIGZ1bGwgc3VzcGVuZDogQVBJIHN0YXJ0ZWQsIGxpbmtlZCwgY29yZSBzdXNwZW5kZWQgYW5kIGRldmljZSBjbG9zZWQuCisgKiAtIGJybHR0eSBjb250cm9sOiBBUEkgc3RhcnRlZCwgY29yZSBhY3RpdmUgYW5kIGRldmljZSBvcGVuZWQsIGJ1dCB1bmxpbmtlZC4KKyAqCisgKiBPdGhlciBzdGF0ZXMgZG9uJ3QgbWFrZSBzZW5zZSwgc2luY2UKKyAqIC0gYXBpIG5lZWRzIHRvIGJlIHN0YXJ0ZWQgYmVmb3JlIGJlaW5nIGxpbmtlZCwKKyAqIC0gdGhlIGRldmljZSBjYW4ndCByZW1haW4gY2xvc2VkIGlmIGNvcmUgaXMgYWN0aXZlLAorICogLSB0aGUgY29yZSBtdXN0IHJlc3VtZSBiZWZvcmUgdW5saW5raW5nIGFwaSAoc28gYXMgdG8gbGV0IHRoZSBhcGkgcmUtb3BlbgorICogICB0aGUgZHJpdmVyIGlmIG5lY2Vzc2FyeSkKKyAqLworCisvKiBQb2ludGVyIHRvIHN1YnJvdXRpbmVzIG9mIHRoZSByZWFsIGJyYWlsbGUgZHJpdmVyLCAmbm9CcmFpbGxlIHdoZW4gQVBJIGlzCisgKiB1bmxpbmtlZCAgKi8KK3N0YXRpYyBjb25zdCBCcmFpbGxlRHJpdmVyICp0cnVlQnJhaWxsZTsKK3N0YXRpYyBCcmFpbGxlRHJpdmVyIEFwaUJyYWlsbGU7CisKKy8qIElkZW50aWNhdGlvbiBvZiB0aGUgUkVBTCBicmFpbGxlIGRyaXZlciBjdXJyZW50bHkgdXNlZCAqLworCisvKiBUaGUgZm9sbG93aW5nIHZhcmlhYmxlIGNvbnRhaW5zIHRoZSBzaXplIG9mIHRoZSBicmFpbGxlIGRpc3BsYXkgKi8KKy8qIHN0b3JlZCBhcyBhIHBhaXIgb2YgX25ldHdvcmtfLWZvcm1hdHRlZCBpbnRlZ2VycyAqLworc3RhdGljIHVpbnQzMl90IGRpc3BsYXlEaW1lbnNpb25zWzJdID0geyAwLCAwIH07CitzdGF0aWMgdW5zaWduZWQgaW50IGRpc3BsYXlTaXplID0gMDsKKworc3RhdGljIEJyYWlsbGVEaXNwbGF5ICpkaXNwOyAvKiBQYXJhbWV0ZXIgdG8gcGFzcyB0byBicmFpbGxlIGRyaXZlcnMgKi8KKworc3RhdGljIGludCBjb3JlQWN0aXZlOyAvKiBXaGV0aGVyIGNvcmUgaXMgYWN0aXZlICovCitzdGF0aWMgaW50IG9mZmxpbmU7IC8qIFdoZXRoZXIgZGV2aWNlIGlzIG9mZmxpbmUgKi8KK3N0YXRpYyBpbnQgZHJpdmVyQ29uc3RydWN0ZWQ7IC8qIFdoZXRoZXIgZGV2aWNlIGlzIHJlYWxseSBvcGVuZWQsIHByb3RlY3RlZCBieSBhcGlEcml2ZXJNdXRleCAqLworc3RhdGljIGludCBkcml2ZXJDb25zdHJ1Y3Rpbmc7IC8qIFdoZXRoZXIgZGV2aWNlIGJlaW5nIGNvbnN0cnVjdGVkLCBwcm90ZWN0ZWQgYnkgYXBpRHJpdmVyTXV0ZXggKi8KK3N0YXRpYyB3Y2hhcl90ICpjb3JlV2luZG93VGV4dDsgLyogTGFzdCB0ZXh0IHdyaXR0ZW4gYnkgdGhlIGNvcmUgKi8KK3N0YXRpYyB1bnNpZ25lZCBjaGFyICpjb3JlV2luZG93RG90czsgLyogTGFzdCBkb3RzIHdyaXR0ZW4gYnkgdGhlIGNvcmUgKi8KK3N0YXRpYyBpbnQgY29yZVdpbmRvd0N1cnNvcjsgLyogTGFzdCBjdXJzb3IgcG9zaXRpb24gc2V0IGJ5IHRoZSBjb3JlICovCitwdGhyZWFkX211dGV4X3QgYXBpU3VzcGVuZE11dGV4OyAvKiBQcm90ZWN0cyB1c2Ugb2YgZHJpdmVyQ29uc3RydWN0ZWQgc3RhdGUgKi8KKworc3RhdGljIGNvbnN0IGNoYXIgKmF1dGggPSBCUkxBUElfREVGQVVUSDsKK3N0YXRpYyBBdXRoRGVzY3JpcHRvciAqYXV0aERlc2NyaXB0b3I7CisKKyNpZmRlZiBfX01JTkdXMzJfXworc3RhdGljIFdTQURBVEEgd3NhZGF0YTsKKyNlbmRpZiAvKiBfX01JTkdXMzJfXyAqLworCitzdGF0aWMgdW5zaWduZWQgY2hhciBjdXJzb3JPdmVybGF5ID0gMDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiogU09NRSBQUk9UT1RZUEVTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitleHRlcm4gdm9pZCBwcm9jZXNzUGFyYW1ldGVycyhjaGFyICoqKnZhbHVlcywgY29uc3QgY2hhciAqY29uc3QgKm5hbWVzLCBjb25zdCBjaGFyICpkZXNjcmlwdGlvbiwgY2hhciAqb3B0aW9uUGFyYW1ldGVycywgY2hhciAqY29uZmlndXJlZFBhcmFtZXRlcnMsIGNvbnN0IGNoYXIgKmVudmlyb25tZW50VmFyaWFibGUpOworc3RhdGljIGludCBpbml0aWFsaXplQWNjZXB0ZWRLZXlzKENvbm5lY3Rpb24gKmMsIGludCBob3cpOworc3RhdGljIHZvaWQgYnJsUmVzaXplKEJyYWlsbGVEaXNwbGF5ICpicmwpOworc3RhdGljIHZvaWQgaGFuZGxlUGFyYW1VcGRhdGUoQ29ubmVjdGlvbiAqc291cmNlLCBDb25uZWN0aW9uICpkZXN0LCBicmxhcGlfcGFyYW1fdCBwYXJhbSwgYnJsYXBpX3BhcmFtX3N1YnBhcmFtX3Qgc3VicGFyYW0sIGJybGFwaV9wYXJhbV9mbGFnc190IGZsYWdzLCBjb25zdCB2b2lkICpkYXRhLCBzaXplX3Qgc2l6ZSk7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqIERSSVZFUiBDQVBBQklMSVRJRVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogRnVuY3Rpb24gOiBpc1Jhd0NhcGFibGUgKi8KKy8qIFJldHVybnMgITAgaWYgdGhlIHNwZWNpZmllZCBkcml2ZXIgaXMgcmF3IGNhcGFibGUsIDAgaWYgaXQgaXMgbm90LiAqLworc3RhdGljIGludCBpc1Jhd0NhcGFibGUoY29uc3QgQnJhaWxsZURyaXZlciAqYnJsKQoreworICByZXR1cm4gKChicmwtPnJlYWRQYWNrZXQhPU5VTEwpICYmIChicmwtPndyaXRlUGFja2V0IT1OVUxMKSAmJiAoYnJsLT5yZXNldCE9TlVMTCkpOworfQorCisvKiBGdW5jdGlvbiA6IGlzS2V5Q2FwYWJsZSAqLworLyogUmV0dXJucyAhMCBpZiBkcml2ZXIgY2FuIHJldHVybiBzcGVjaWZpYyBrZXljb2RlcywgMCBpZiBub3QuICovCitzdGF0aWMgaW50IGlzS2V5Q2FwYWJsZShjb25zdCBCcmFpbGxlRHJpdmVyICpicmwpCit7CisgIGludCByZXQ7CisgIGxvY2tNdXRleCgmYXBpRHJpdmVyTXV0ZXgpOworICByZXQgPSAoZGlzcCAmJiAoZGlzcC0+a2V5TmFtZXMgIT0gTlVMTCkpOworICB1bmxvY2tNdXRleCgmYXBpRHJpdmVyTXV0ZXgpOworICByZXR1cm4gcmV0OworfQorCisvKiBGdW5jdGlvbiA6IHN1c3BlbmRCcmFpbGxlRHJpdmVyICovCisvKiBSZWFsbHkgc3VzcGVuZCB0aGUgYnJhaWxsZSBkcml2ZXIuIEFzc3VtZXMgdGhhdCBhcGlEcml2ZXJNdXRleCBpcyBsb2NrZWQgKi8KK3N0YXRpYyB2b2lkIHN1c3BlbmRCcmFpbGxlRHJpdmVyKHZvaWQpIHsKKyAgaWYgKHRydWVCcmFpbGxlID09ICZub0JyYWlsbGUpIHJldHVybjsgLyogY29yZSB1bmxpbmtlZCBhcGkgKi8KKyAgbG9nTWVzc2FnZShMT0dfQ0FURUdPUlkoU0VSVkVSX0VWRU5UUyksICJkcml2ZXIgc3VzcGVuZGVkIik7CisgIGxvY2tNdXRleCgmYXBpU3VzcGVuZE11dGV4KTsKKyAgZHJpdmVyQ29uc3RydWN0ZWQgPSAwOworICBkZXN0cnVjdEJyYWlsbGVEcml2ZXIoKTsKKyAgdW5sb2NrTXV0ZXgoJmFwaVN1c3BlbmRNdXRleCk7Cit9CisKKworQ09SRV9UQVNLX0NBTExCQUNLKGFwaUNvcmVUYXNrX2Rlc3RydWN0QnJhaWxsZURyaXZlcikgeworICBsb2NrTXV0ZXgoJmFwaURyaXZlck11dGV4KTsKKyAgaWYgKGRyaXZlckNvbnN0cnVjdGVkKSB7CisgICAgc3VzcGVuZEJyYWlsbGVEcml2ZXIoKTsKKyAgfQorICB1bmxvY2tNdXRleCgmYXBpRHJpdmVyTXV0ZXgpOworfQorCisvKiBGdW5jdGlvbiA6IHN1c3BlbmREcml2ZXIgKi8KKy8qIFJlcXVlc3RzIHN1c3BlbmRpbmcgdGhlIGRyaXZlciAqLworc3RhdGljIHZvaWQgc3VzcGVuZERyaXZlcih2b2lkKSB7CisgIHJ1bkNvcmVUYXNrKGFwaUNvcmVUYXNrX2Rlc3RydWN0QnJhaWxsZURyaXZlciwgTlVMTCwgMSk7Cit9CisKKy8qIEZ1bmN0aW9uIDogcmVzdW1lQnJhaWxsZURyaXZlciAqLworLyogUmVhbGx5IHJlc3VtZSB0aGUgYnJhaWxsZSBkcml2ZXIuIEFzc3VtZXMgdGhhdCBhcGlEcml2ZXJNdXRleCBpcyBsb2NrZWQgKi8KK3N0YXRpYyBpbnQgcmVzdW1lQnJhaWxsZURyaXZlcihCcmFpbGxlRGlzcGxheSAqYnJsKSB7CisgIGlmICh0cnVlQnJhaWxsZSA9PSAmbm9CcmFpbGxlKSByZXR1cm4gMDsgLyogY29yZSB1bmxpbmtlZCBhcGkgKi8KKyAgZHJpdmVyQ29uc3RydWN0aW5nID0gMTsKKyAgbG9ja011dGV4KCZhcGlTdXNwZW5kTXV0ZXgpOworICBkcml2ZXJDb25zdHJ1Y3RlZCA9IGNvbnN0cnVjdEJyYWlsbGVEcml2ZXIoKTsKKyAgaWYgKGRyaXZlckNvbnN0cnVjdGVkKSB7CisgICAgZGlzcCA9IGJybDsKKyAgfQorICB1bmxvY2tNdXRleCgmYXBpU3VzcGVuZE11dGV4KTsKKyAgaWYgKGRyaXZlckNvbnN0cnVjdGVkKSB7CisgICAgbG9nTWVzc2FnZShMT0dfQ0FURUdPUlkoU0VSVkVSX0VWRU5UUyksICJkcml2ZXIgcmVzdW1lZCIpOworICAgIGhhbmRsZVBhcmFtVXBkYXRlKE5VTEwsIE5VTEwsIEJSTEFQSV9QQVJBTV9EUklWRVJfTkFNRSwgMCwgQlJMQVBJX1BBUkFNRl9HTE9CQUwsIGJyYWlsbGUtPmRlZmluaXRpb24ubmFtZSwgc3RybGVuKGJyYWlsbGUtPmRlZmluaXRpb24ubmFtZSkpOworICAgIGhhbmRsZVBhcmFtVXBkYXRlKE5VTEwsIE5VTEwsIEJSTEFQSV9QQVJBTV9EUklWRVJfQ09ERSwgMCwgQlJMQVBJX1BBUkFNRl9HTE9CQUwsIGJyYWlsbGUtPmRlZmluaXRpb24uY29kZSwgc3RybGVuKGJyYWlsbGUtPmRlZmluaXRpb24uY29kZSkpOworICAgIGhhbmRsZVBhcmFtVXBkYXRlKE5VTEwsIE5VTEwsIEJSTEFQSV9QQVJBTV9EUklWRVJfVkVSU0lPTiwgMCwgQlJMQVBJX1BBUkFNRl9HTE9CQUwsIGJyYWlsbGUtPmRlZmluaXRpb24udmVyc2lvbiwgc3RybGVuKGJyYWlsbGUtPmRlZmluaXRpb24udmVyc2lvbikpOworICAgIGhhbmRsZVBhcmFtVXBkYXRlKE5VTEwsIE5VTEwsIEJSTEFQSV9QQVJBTV9ERVZJQ0VfTU9ERUwsIDAsIEJSTEFQSV9QQVJBTUZfR0xPQkFMLCBkaXNwLT5rZXlCaW5kaW5ncywgc3RybGVuKGRpc3AtPmtleUJpbmRpbmdzKSk7CisgICAgYnJsUmVzaXplKGJybCk7CisgIH0KKyAgZHJpdmVyQ29uc3RydWN0aW5nID0gMDsKKyAgcmV0dXJuIGRyaXZlckNvbnN0cnVjdGVkOworfQorCit0eXBlZGVmIHN0cnVjdCB7CisgIHVuc2lnbmVkIHJlc3VtZWQ6MTsKK30gQ29yZVRhc2tEYXRhX3Jlc3VtZUJyYWlsbGVEcml2ZXI7CisKK0NPUkVfVEFTS19DQUxMQkFDSyhhcGlDb3JlVGFza19yZXN1bWVCcmFpbGxlRHJpdmVyKSB7CisgIENvcmVUYXNrRGF0YV9yZXN1bWVCcmFpbGxlRHJpdmVyICpyYmQgPSBkYXRhOworICBsb2NrTXV0ZXgoJmFwaURyaXZlck11dGV4KTsKKyAgaWYgKCFkaXNwKSB7CisgICAgcmJkLT5yZXN1bWVkID0gMDsKKyAgfSBlbHNlIGlmIChkcml2ZXJDb25zdHJ1Y3RlZCB8fCBkcml2ZXJDb25zdHJ1Y3RpbmcpIHsKKyAgICByYmQtPnJlc3VtZWQgPSAxOworICB9IGVsc2UgeworICAgIHJiZC0+cmVzdW1lZCA9IHJlc3VtZUJyYWlsbGVEcml2ZXIoZGlzcCk7CisgIH0KKyAgdW5sb2NrTXV0ZXgoJmFwaURyaXZlck11dGV4KTsKK30KKworLyogRnVuY3Rpb24gOiByZXN1bWVEcml2ZXIgKi8KKy8qIFJlcXVlc3RzIHJlc3VtaW5nIHRoZSBkcml2ZXIgKi8KK3N0YXRpYyBpbnQgcmVzdW1lRHJpdmVyKHZvaWQpIHsKKyAgQ29yZVRhc2tEYXRhX3Jlc3VtZUJyYWlsbGVEcml2ZXIgcmJkID0geworICAgIC5yZXN1bWVkID0gMAorICB9OworCisgIHJ1bkNvcmVUYXNrKGFwaUNvcmVUYXNrX3Jlc3VtZUJyYWlsbGVEcml2ZXIsICZyYmQsIDEpOworICByZXR1cm4gcmJkLnJlc3VtZWQ7Cit9CisKKy8qIEZ1bmN0aW9uIDogcmVzZXRCcmFpbGxlRHJpdmVyICovCisvKiBSZWFsbHkgcmVzZXQgdGhlIGJyYWlsbGUgZHJpdmVyLiBBc3N1bWVzIHRoYXQgYXBpRHJpdmVyTXV0ZXggaXMgbG9ja2VkICovCitzdGF0aWMgdm9pZCByZXNldEJyYWlsbGVEZXZpY2Uodm9pZCkgeworICBsb2dNZXNzYWdlKExPR19XQVJOSU5HLCAidHJ5aW5nIHRvIHJlc2V0IHRoZSBicmFpbGxlIGRldmljZSIpOworCisgIGlmICghdHJ1ZUJyYWlsbGUtPnJlc2V0IHx8ICFkaXNwIHx8ICF0cnVlQnJhaWxsZS0+cmVzZXQoZGlzcCkpIHsKKyAgICBpZiAodHJ1ZUJyYWlsbGUtPnJlc2V0KSB7CisgICAgICBsb2dNZXNzYWdlKExPR19XQVJOSU5HLCAicmVzZXQgZmFpbGVkIC0gcmVzdGFydGluZyB0aGUgYnJhaWxsZSBkcml2ZXIiKTsKKyAgICB9CisKKyAgICByZXN0YXJ0QnJhaWxsZURyaXZlcigpOworICB9Cit9CisKK0NPUkVfVEFTS19DQUxMQkFDSyhhcGlDb3JlVGFza19yZXNldEJyYWlsbGVEZXZpY2UpIHsKKyAgbG9ja011dGV4KCZhcGlEcml2ZXJNdXRleCk7CisgIHJlc2V0QnJhaWxsZURldmljZSgpOworICB1bmxvY2tNdXRleCgmYXBpRHJpdmVyTXV0ZXgpOworfQorCisvKiBGdW5jdGlvbiA6IHJlc2V0RHJpdmVyICovCisvKiBSZXF1ZXN0cyByZXNldHRpbmcgdGhlIGRyaXZlciAqLworc3RhdGljIHZvaWQgcmVzZXREZXZpY2Uodm9pZCkgeworICBydW5Db3JlVGFzayhhcGlDb3JlVGFza19yZXNldEJyYWlsbGVEZXZpY2UsIE5VTEwsIDEpOworfQorCitzdGF0aWMgaW50IGZsdXNoQnJhaWxsZU91dHB1dChCcmFpbGxlRGlzcGxheSAqYnJsKSB7CisgIGludCBmbHVzaGVkID0gYXBpX2ZsdXNoT3V0cHV0KGJybCk7CisgIGlmICghZmx1c2hlZCkgYnJsLT5oYXNGYWlsZWQgPSAxOworICByZXNldEFsbEJsaW5rRGVzY3JpcHRvcnMoKTsKKyAgcmV0dXJuIGZsdXNoZWQ7Cit9CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgdW5zaWduZWQgZmx1c2hlZDoxOworfSBDb3JlVGFza0RhdGFfZmx1c2hCcmFpbGxlT3V0cHV0OworCitDT1JFX1RBU0tfQ0FMTEJBQ0soYXBpQ29yZVRhc2tfZmx1c2hCcmFpbGxlT3V0cHV0KSB7CisgIENvcmVUYXNrRGF0YV9mbHVzaEJyYWlsbGVPdXRwdXQgKmZibyA9IGRhdGE7CisgIGZiby0+Zmx1c2hlZCA9IGZsdXNoQnJhaWxsZU91dHB1dCgmYnJsKTsKK30KKworc3RhdGljIGludCBmbHVzaE91dHB1dCh2b2lkKSB7CisgIENvcmVUYXNrRGF0YV9mbHVzaEJyYWlsbGVPdXRwdXQgZmJvID0geworICAgIC5mbHVzaGVkID0gMAorICB9OworCisgIHJ1bkNvcmVUYXNrKGFwaUNvcmVUYXNrX2ZsdXNoQnJhaWxsZU91dHB1dCwgJmZibywgMSk7CisgIHJldHVybiBmYm8uZmx1c2hlZDsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiogUEFDS0VUIEhBTkRMSU5HICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiBGdW5jdGlvbiA6IHdyaXRlQWNrICovCisvKiBTZW5kcyBhbiBhY2tub3dsZWRnZW1lbnQgb24gdGhlIGdpdmVuIHNvY2tldCAqLworc3RhdGljIGlubGluZSB2b2lkIHdyaXRlQWNrKEZpbGVEZXNjcmlwdG9yIGZkKQoreworICBicmxhcGlzZXJ2ZXJfd3JpdGVQYWNrZXQoZmQsQlJMQVBJX1BBQ0tFVF9BQ0ssTlVMTCwwKTsKK30KKworLyogRnVuY3Rpb24gOiB3cml0ZUVycm9yICovCisvKiBTZW5kcyB0aGUgZ2l2ZW4gbm9uLWZhdGFsIGVycm9yIG9uIHRoZSBnaXZlbiBzb2NrZXQgKi8KK3N0YXRpYyB2b2lkIHdyaXRlRXJyb3IoRmlsZURlc2NyaXB0b3IgZmQsIHVuc2lnbmVkIGludCBlcnIpCit7CisgIHVpbnQzMl90IGNvZGUgPSBodG9ubChlcnIpOworICBsb2dNZXNzYWdlKExPR19DQVRFR09SWShTRVJWRVJfRVZFTlRTKSwgImVycm9yICV1IG9uIGZkICUiUFJJZmQsIGVyciwgZmQpOworICBicmxhcGlzZXJ2ZXJfd3JpdGVQYWNrZXQoZmQsQlJMQVBJX1BBQ0tFVF9FUlJPUiwmY29kZSxzaXplb2YoY29kZSkpOworfQorCisvKiBGdW5jdGlvbiA6IHdyaXRlRXhjZXB0aW9uICovCisvKiBTZW5kcyB0aGUgZ2l2ZW4gZXJyb3IgY29kZSBvbiB0aGUgZ2l2ZW4gc29ja2V0ICovCitzdGF0aWMgdm9pZCB3cml0ZUV4Y2VwdGlvbihGaWxlRGVzY3JpcHRvciBmZCwgdW5zaWduZWQgaW50IGVyciwgYnJsYXBpX3BhY2tldFR5cGVfdCB0eXBlLCBjb25zdCBicmxhcGlfcGFja2V0X3QgKnBhY2tldCwgc2l6ZV90IHNpemUpCit7CisgIGludCBoZHJzaXplLCBlc2l6ZTsKKyAgYnJsYXBpX3BhY2tldF90IGVwYWNrZXQ7CisgIGJybGFwaV9lcnJvclBhY2tldF90ICogZXJyb3JQYWNrZXQgPSAmZXBhY2tldC5lcnJvcjsKKyAgbG9nTWVzc2FnZShMT0dfQ0FURUdPUlkoU0VSVkVSX0VWRU5UUyksICJleGNlcHRpb24gJXUgZm9yIHBhY2tldCB0eXBlICVsdSBvbiBmZCAlIlBSSWZkLCBlcnIsICh1bnNpZ25lZCBsb25nKXR5cGUsIGZkKTsKKyAgaGRyc2l6ZSA9IHNpemVvZihlcnJvclBhY2tldC0+Y29kZSkrc2l6ZW9mKGVycm9yUGFja2V0LT50eXBlKTsKKyAgZXJyb3JQYWNrZXQtPmNvZGUgPSBodG9ubChlcnIpOworICBlcnJvclBhY2tldC0+dHlwZSA9IGh0b25sKHR5cGUpOworICBlc2l6ZSA9IE1JTihzaXplLCBCUkxBUElfTUFYUEFDS0VUU0laRS1oZHJzaXplKTsKKyAgaWYgKChwYWNrZXQhPU5VTEwpICYmIChzaXplIT0wKSkgbWVtY3B5KCZlcnJvclBhY2tldC0+cGFja2V0LCAmcGFja2V0LT5kYXRhLCBlc2l6ZSk7CisgIGJybGFwaXNlcnZlcl93cml0ZVBhY2tldChmZCxCUkxBUElfUEFDS0VUX0VYQ0VQVElPTiwmZXBhY2tldC5kYXRhLCBoZHJzaXplK2VzaXplKTsKK30KKworc3RhdGljIHZvaWQgd3JpdGVLZXkoRmlsZURlc2NyaXB0b3IgZmQsIGJybGFwaV9rZXlDb2RlX3Qga2V5KSB7CisgIHVpbnQzMl90IGJ1ZlsyXTsKKyAgYnVmWzBdID0gaHRvbmwoa2V5ID4+IDMyKTsKKyAgYnVmWzFdID0gaHRvbmwoa2V5ICYgMHhmZmZmZmZmZik7CisgIGxvZ01lc3NhZ2UoTE9HX0NBVEVHT1JZKFNFUlZFUl9FVkVOVFMpLCAid3JpdGluZyBrZXkgJTA4IlBSSXgzMiIgJTA4IlBSSXgzMiIgdG8gZmQgJSJQUklmZCxidWZbMF0sYnVmWzFdLGZkKTsKKyAgYnJsYXBpc2VydmVyX3dyaXRlUGFja2V0KGZkLEJSTEFQSV9QQUNLRVRfS0VZLCZidWYsc2l6ZW9mKGJ1ZikpOworfQorCit0eXBlZGVmIGludCgqUGFja2V0SGFuZGxlcikoQ29ubmVjdGlvbiAqLCBicmxhcGlfcGFja2V0VHlwZV90LCBicmxhcGlfcGFja2V0X3QgKiwgc2l6ZV90KTsKKwordHlwZWRlZiBzdHJ1Y3QgeyAvKiBwYWNrZXQgaGFuZGxlcnMgKi8KKyAgUGFja2V0SGFuZGxlciBnZXREcml2ZXJOYW1lOworICBQYWNrZXRIYW5kbGVyIGdldE1vZGVsSWRlbnRpZmllcjsKKyAgUGFja2V0SGFuZGxlciBnZXREaXNwbGF5U2l6ZTsKKyAgUGFja2V0SGFuZGxlciBlbnRlclR0eU1vZGU7CisgIFBhY2tldEhhbmRsZXIgc2V0Rm9jdXM7CisgIFBhY2tldEhhbmRsZXIgbGVhdmVUdHlNb2RlOworICBQYWNrZXRIYW5kbGVyIGlnbm9yZUtleVJhbmdlczsKKyAgUGFja2V0SGFuZGxlciBhY2NlcHRLZXlSYW5nZXM7CisgIFBhY2tldEhhbmRsZXIgd3JpdGU7CisgIFBhY2tldEhhbmRsZXIgZW50ZXJSYXdNb2RlOworICBQYWNrZXRIYW5kbGVyIGxlYXZlUmF3TW9kZTsKKyAgUGFja2V0SGFuZGxlciBwYWNrZXQ7CisgIFBhY2tldEhhbmRsZXIgc3VzcGVuZERyaXZlcjsKKyAgUGFja2V0SGFuZGxlciByZXN1bWVEcml2ZXI7CisgIFBhY2tldEhhbmRsZXIgcGFyYW1ldGVyVmFsdWU7CisgIFBhY2tldEhhbmRsZXIgcGFyYW1ldGVyUmVxdWVzdDsKKyAgUGFja2V0SGFuZGxlciBzeW5jOworfSBQYWNrZXRIYW5kbGVyczsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiogQlJBSUxMRSBXSU5ET1dTIE1BTkFHSU5HICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiBGdW5jdGlvbiA6IGFsbG9jQnJhaWxsZVdpbmRvdyAqLworLyogQWxsb2NhdGVzIGFuZCBpbml0aWFsaXplcyB0aGUgbWVtYmVycyBvZiBhIEJyYWlsbGVXaW5kb3cgc3RydWN0dXJlICovCisvKiBVc2VzIGRpc3BsYXlTaXplIHRvIGRldGVybWluZSBzaXplIG9mIGFsbG9jYXRlZCBidWZmZXJzICovCisvKiBSZXR1cm5zIHRvIHJlcG9ydCBzdWNjZXNzLCAtMSBvbiBlcnJvcnMgKi8KK3N0YXRpYyBpbnQgYWxsb2NCcmFpbGxlV2luZG93KEJyYWlsbGVXaW5kb3cgKmJyYWlsbGVXaW5kb3cpCit7CisgIGlmICghKGJyYWlsbGVXaW5kb3ctPnRleHQgPSBtYWxsb2MoZGlzcGxheVNpemUqc2l6ZW9mKHdjaGFyX3QpKSkpIGdvdG8gb3V0OworICBpZiAoIShicmFpbGxlV2luZG93LT5hbmRBdHRyID0gbWFsbG9jKGRpc3BsYXlTaXplKSkpIGdvdG8gb3V0VGV4dDsKKyAgaWYgKCEoYnJhaWxsZVdpbmRvdy0+b3JBdHRyID0gbWFsbG9jKGRpc3BsYXlTaXplKSkpIGdvdG8gb3V0QW5kOworCisgIHdtZW1zZXQoYnJhaWxsZVdpbmRvdy0+dGV4dCwgV0NfQygnICcpLCBkaXNwbGF5U2l6ZSk7CisgIG1lbXNldChicmFpbGxlV2luZG93LT5hbmRBdHRyLCAweEZGLCBkaXNwbGF5U2l6ZSk7CisgIG1lbXNldChicmFpbGxlV2luZG93LT5vckF0dHIsIDB4MDAsIGRpc3BsYXlTaXplKTsKKyAgYnJhaWxsZVdpbmRvdy0+Y3Vyc29yID0gMDsKKyAgcmV0dXJuIDA7CisKK291dEFuZDoKKyAgZnJlZShicmFpbGxlV2luZG93LT5hbmRBdHRyKTsKKworb3V0VGV4dDoKKyAgZnJlZShicmFpbGxlV2luZG93LT50ZXh0KTsKKworb3V0OgorICByZXR1cm4gLTE7Cit9CisKKy8qIEZ1bmN0aW9uOiBmcmVlQnJhaWxsZVdpbmRvdyAqLworLyogRnJlZXMgdGhlIGZpZWxkcyBvZiBhIEJyYWlsbGVXaW5kb3cgc3RydWN0dXJlICovCitzdGF0aWMgdm9pZCBmcmVlQnJhaWxsZVdpbmRvdyhCcmFpbGxlV2luZG93ICpicmFpbGxlV2luZG93KQoreworICBmcmVlKGJyYWlsbGVXaW5kb3ctPnRleHQpOyBicmFpbGxlV2luZG93LT50ZXh0ID0gTlVMTDsKKyAgZnJlZShicmFpbGxlV2luZG93LT5hbmRBdHRyKTsgYnJhaWxsZVdpbmRvdy0+YW5kQXR0ciA9IE5VTEw7CisgIGZyZWUoYnJhaWxsZVdpbmRvdy0+b3JBdHRyKTsgYnJhaWxsZVdpbmRvdy0+b3JBdHRyID0gTlVMTDsKK30KKworc3RhdGljIHVuc2lnbmVkIGNoYXIKK2dldEN1cnNvck92ZXJsYXkgKEJyYWlsbGVEaXNwbGF5ICpicmwpIHsKKyAgaWYgKHByZWZzLnNob3dTY3JlZW5DdXJzb3IgJiYgIWJybC0+aGlkZUN1cnNvcikgeworICAgIEJsaW5rRGVzY3JpcHRvciAqYmxpbmsgPSAmc2NyZWVuQ3Vyc29yQmxpbmtEZXNjcmlwdG9yOworICAgIHJlcXVpcmVCbGlua0Rlc2NyaXB0b3IoYmxpbmspOworCisgICAgaWYgKGlzQmxpbmtWaXNpYmxlKGJsaW5rKSkgeworICAgICAgcmV0dXJuIG1hcEN1cnNvckRvdHMoZ2V0U2NyZWVuQ3Vyc29yRG90cygpKTsKKyAgICB9CisgIH0KKworICByZXR1cm4gMDsKK30KKworLyogRnVuY3Rpb246IGdldERvdHMgKi8KKy8qIFJldHVybnMgdGhlIGJyYWlsbGUgZG90cyBjb3JyZXNwb25kaW5nIHRvIGEgQnJhaWxsZVdpbmRvdyBzdHJ1Y3R1cmUgKi8KKy8qIE5vIGFsbG9jYXRpb24gb2YgYnVmIGlzIHBlcmZvcm1lZCAqLworc3RhdGljIHZvaWQgZ2V0RG90cyhjb25zdCBCcmFpbGxlV2luZG93ICpicmFpbGxlV2luZG93LCB1bnNpZ25lZCBjaGFyICpidWYpCit7CisgIGludCBpOworICB1bnNpZ25lZCBjaGFyIGM7CisgIGZvciAoaT0wOyBpPGRpc3BsYXlTaXplOyBpKyspIHsKKyAgICBjID0gY29udmVydENoYXJhY3RlclRvRG90cyh0ZXh0VGFibGUsIGJyYWlsbGVXaW5kb3ctPnRleHRbaV0pOworICAgIGJ1ZltpXSA9IChjICYgYnJhaWxsZVdpbmRvdy0+YW5kQXR0cltpXSkgfCBicmFpbGxlV2luZG93LT5vckF0dHJbaV07CisgIH0KKworICBpZiAoYnJhaWxsZVdpbmRvdy0+Y3Vyc29yKSB7CisgICAgYnVmW2JyYWlsbGVXaW5kb3ctPmN1cnNvci0xXSB8PSBjdXJzb3JPdmVybGF5OworICB9Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqIENPTk5FQ1RJT05TIE1BTkFHSU5HICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogRnVuY3Rpb24gOiBjcmVhdGVDb25uZWN0aW9uICovCisvKiBDcmVhdGVzIGEgY29ubmVjdGlvbiAqLworc3RhdGljIENvbm5lY3Rpb24gKmNyZWF0ZUNvbm5lY3Rpb24oRmlsZURlc2NyaXB0b3IgZmQsIHRpbWVfdCBjdXJyZW50VGltZSkKK3sKKyAgQ29ubmVjdGlvbiAqYyA9ICBtYWxsb2Moc2l6ZW9mKENvbm5lY3Rpb24pKTsKKyAgaWYgKGM9PU5VTEwpIGdvdG8gb3V0OworCisgIGMtPmF1dGggPSAtMTsKKyAgYy0+ZmQgPSBmZDsKKyAgYy0+dHR5ID0gTlVMTDsKKyAgYy0+Y2xpZW50X3ByaW9yaXR5ID0gQlJMQVBJX1BBUkFNX0NMSUVOVF9QUklPUklUWV9ERUZBVUxUOworICBjLT5yYXcgPSAwOworICBjLT5zdXNwZW5kID0gMDsKKyAgYy0+YnJsYnVmc3RhdGUgPSBFTVBUWTsKKworICB7CisgICAgcHRocmVhZF9tdXRleGF0dHJfdCBtYXR0cjsKKworICAgIHB0aHJlYWRfbXV0ZXhhdHRyX2luaXQoJm1hdHRyKTsKKyAgICBwdGhyZWFkX211dGV4YXR0cl9zZXR0eXBlKCZtYXR0ciwgUFRIUkVBRF9NVVRFWF9SRUNVUlNJVkUpOworCisgICAgcHRocmVhZF9tdXRleF9pbml0KCZjLT5icmFpbGxlV2luZG93TXV0ZXgsJm1hdHRyKTsKKyAgICBzZXRBZGRyZXNzTmFtZSgmYy0+YnJhaWxsZVdpbmRvd011dGV4LCAiYXBpQnJhaWxsZVdpbmRvd011dGV4WyIgUFJJZmQgIl0iLCBmZCk7CisKKyAgICBwdGhyZWFkX211dGV4X2luaXQoJmMtPmFjY2VwdGVkS2V5c011dGV4LCZtYXR0cik7CisgICAgc2V0QWRkcmVzc05hbWUoJmMtPmFjY2VwdGVkS2V5c011dGV4LCAiYXBpQWNjZXB0ZWRLZXlzTXV0ZXhbIiBQUklmZCAiXSIsIGZkKTsKKyAgfQorCisgIGMtPmhvdyA9IDA7CisgIGMtPnJldGFpbkRvdHMgPSAxOworICBjLT5hY2NlcHRlZEtleXMgPSBOVUxMOworICBjLT51cFRpbWUgPSBjdXJyZW50VGltZTsKKyAgYy0+YnJhaWxsZVdpbmRvdy50ZXh0ID0gTlVMTDsKKyAgYy0+YnJhaWxsZVdpbmRvdy5hbmRBdHRyID0gTlVMTDsKKyAgYy0+YnJhaWxsZVdpbmRvdy5vckF0dHIgPSBOVUxMOworICBpZiAoYnJsYXBpX2luaXRpYWxpemVQYWNrZXQoJmMtPnBhY2tldCkpCisgICAgZ290byBvdXRtYWxsb2M7CisgIGMtPnN1YnNjcmlwdGlvbnMubmV4dCA9ICZjLT5zdWJzY3JpcHRpb25zOworICBjLT5zdWJzY3JpcHRpb25zLnByZXYgPSAmYy0+c3Vic2NyaXB0aW9uczsKKyAgcmV0dXJuIGM7CisKK291dG1hbGxvYzoKKyAgZnJlZShjKTsKK291dDoKKyAgaWYgKGZkICE9IElOVkFMSURfRklMRV9ERVNDUklQVE9SKSB7CisgICAgd3JpdGVFcnJvcihmZCxCUkxBUElfRVJST1JfTk9NRU0pOworICAgIGNsb3NlRmlsZURlc2NyaXB0b3IoZmQpOworICB9CisgIHJldHVybiBOVUxMOworfQorCisvKiBGdW5jdGlvbiA6IGZyZWVDb25uZWN0aW9uICovCisvKiBGcmVlcyBhbGwgcmVzb3VyY2VzIGFzc29jaWF0ZWQgdG8gYSBjb25uZWN0aW9uICovCitzdGF0aWMgdm9pZCBmcmVlQ29ubmVjdGlvbihDb25uZWN0aW9uICpjKQoreworICBzdHJ1Y3QgU3Vic2NyaXB0aW9uICpzLCAqbmV4dDsKKworICBpZiAoYy0+ZmQgIT0gSU5WQUxJRF9GSUxFX0RFU0NSSVBUT1IpIHsKKyAgICBsb2NrTXV0ZXgoJmFwaVBhcmFtTXV0ZXgpOworICAgIGZvciAocz1jLT5zdWJzY3JpcHRpb25zLm5leHQ7IHMhPSZjLT5zdWJzY3JpcHRpb25zOyBzPW5leHQpIHsKKyAgICAgIGlmIChzLT5mbGFncyAmIEJSTEFQSV9QQVJBTUZfR0xPQkFMKQorCXBhcmFtU3RhdGVbcy0+cGFyYW1ldGVyXS5nbG9iYWxfc3Vic2NyaXB0aW9ucy0tOworICAgICAgZWxzZQorCXBhcmFtU3RhdGVbcy0+cGFyYW1ldGVyXS5sb2NhbF9zdWJzY3JpcHRpb25zLS07CisgICAgICBuZXh0ID0gcy0+bmV4dDsKKyAgICAgIGZyZWUocyk7CisgICAgfQorICAgIHVubG9ja011dGV4KCZhcGlQYXJhbU11dGV4KTsKKworICAgIGlmIChjLT5hdXRoICE9IDEpIHVuYXV0aENvbm5lY3Rpb25zLS07CisgICAgY2xvc2VGaWxlRGVzY3JpcHRvcihjLT5mZCk7CisgIH0KKworICBwdGhyZWFkX211dGV4X2Rlc3Ryb3koJmMtPmJyYWlsbGVXaW5kb3dNdXRleCk7CisgIHVuc2V0QWRkcmVzc05hbWUoJmMtPmJyYWlsbGVXaW5kb3dNdXRleCk7CisKKyAgcHRocmVhZF9tdXRleF9kZXN0cm95KCZjLT5hY2NlcHRlZEtleXNNdXRleCk7CisgIHVuc2V0QWRkcmVzc05hbWUoJmMtPmFjY2VwdGVkS2V5c011dGV4KTsKKworICBmcmVlQnJhaWxsZVdpbmRvdygmYy0+YnJhaWxsZVdpbmRvdyk7CisgIGZyZWVLZXlyYW5nZUxpc3QoJmMtPmFjY2VwdGVkS2V5cyk7CisgIGZyZWUoYyk7Cit9CisKKy8qIEZ1bmN0aW9uIDogYWRkQ29ubmVjdGlvbiAqLworLyogQ3JlYXRlcyBhIGNvbm5lY3Rpb24gYW5kIGFkZHMgaXQgdG8gdGhlIGNvbm5lY3Rpb24gbGlzdCAqLworc3RhdGljIHZvaWQgX19hZGRDb25uZWN0aW9uKENvbm5lY3Rpb24gKmMsIENvbm5lY3Rpb24gKmNvbm5lY3Rpb25zKQoreworICBjLT5uZXh0ID0gY29ubmVjdGlvbnMtPm5leHQ7CisgIGMtPnByZXYgPSBjb25uZWN0aW9uczsKKyAgY29ubmVjdGlvbnMtPm5leHQtPnByZXYgPSBjOworICBjb25uZWN0aW9ucy0+bmV4dCA9IGM7Cit9CitzdGF0aWMgdm9pZCBfX2FkZENvbm5lY3Rpb25Tb3J0ZWQoQ29ubmVjdGlvbiAqYywgQ29ubmVjdGlvbiAqaGVhZCkKK3sKKyAgQ29ubmVjdGlvbiAqY3VyID0gaGVhZDsKKyAgd2hpbGUgKGN1ci0+bmV4dCAhPSBoZWFkICYmIGN1ci0+bmV4dC0+Y2xpZW50X3ByaW9yaXR5ID4gYy0+Y2xpZW50X3ByaW9yaXR5KQorICAgIGN1ciA9IGN1ci0+bmV4dDsKKyAgX19hZGRDb25uZWN0aW9uKGMsIGN1cik7Cit9CitzdGF0aWMgdm9pZCBhZGRDb25uZWN0aW9uKENvbm5lY3Rpb24gKmMsIENvbm5lY3Rpb24gKmNvbm5lY3Rpb25zKQoreworICBsb2NrTXV0ZXgoJmFwaUNvbm5lY3Rpb25zTXV0ZXgpOworICBfX2FkZENvbm5lY3Rpb24oYyxjb25uZWN0aW9ucyk7CisgIHVubG9ja011dGV4KCZhcGlDb25uZWN0aW9uc011dGV4KTsKK30KKworLyogRnVuY3Rpb24gOiByZW1vdmVDb25uZWN0aW9uICovCisvKiBSZW1vdmVzIHRoZSBjb25uZWN0aW9uIGZyb20gdGhlIGxpc3QgKi8KK3N0YXRpYyB2b2lkIF9fcmVtb3ZlQ29ubmVjdGlvbihDb25uZWN0aW9uICpjKQoreworICBjLT5wcmV2LT5uZXh0ID0gYy0+bmV4dDsKKyAgYy0+bmV4dC0+cHJldiA9IGMtPnByZXY7Cit9CitzdGF0aWMgdm9pZCByZW1vdmVDb25uZWN0aW9uKENvbm5lY3Rpb24gKmMpCit7CisgIGxvY2tNdXRleCgmYXBpQ29ubmVjdGlvbnNNdXRleCk7CisgIF9fcmVtb3ZlQ29ubmVjdGlvbihjKTsKKyAgdW5sb2NrTXV0ZXgoJmFwaUNvbm5lY3Rpb25zTXV0ZXgpOworfQorCisvKiBGdW5jdGlvbjogcmVtb3ZlRnJlZUNvbm5lY3Rpb24gKi8KKy8qIFJlbW92ZXMgdGhlIGNvbm5lY3Rpb24gZnJvbSB0aGUgbGlzdCBhbmQgZnJlZXMgaXRzIHJlc291cmNlcyAqLworc3RhdGljIHZvaWQgcmVtb3ZlRnJlZUNvbm5lY3Rpb24oQ29ubmVjdGlvbiAqYykKK3sKKyAgcmVtb3ZlQ29ubmVjdGlvbihjKTsKKyAgZnJlZUNvbm5lY3Rpb24oYyk7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqIFRUWXMgTUFOQUdJTkcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogRnVuY3Rpb246IG5ld1R0eSAqLworLyogY3JlYXRlcyBhIG5ldyB0dHkgYW5kIGluc2VydHMgaXQgaW4gdGhlIGhpZXJhcmNoeSAqLworc3RhdGljIGlubGluZSBUdHkgKm5ld1R0eShUdHkgKmZhdGhlciwgaW50IG51bWJlcikKK3sKKyAgVHR5ICp0dHk7CisgIGlmICghKHR0eSA9IGNhbGxvYygxLHNpemVvZigqdHR5KSkpKSBnb3RvIG91dDsKKyAgaWYgKCEodHR5LT5jb25uZWN0aW9ucyA9IGNyZWF0ZUNvbm5lY3Rpb24oSU5WQUxJRF9GSUxFX0RFU0NSSVBUT1IsMCkpKSBnb3RvIG91dHR0eTsKKyAgdHR5LT5jb25uZWN0aW9ucy0+bmV4dCA9IHR0eS0+Y29ubmVjdGlvbnMtPnByZXYgPSB0dHktPmNvbm5lY3Rpb25zOworICB0dHktPm51bWJlciA9IG51bWJlcjsKKyAgdHR5LT5mb2N1cyA9IFNDUl9OT19WVDsKKyAgdHR5LT5mYXRoZXIgPSBmYXRoZXI7CisgIHR0eS0+cHJldm5leHQgPSAmZmF0aGVyLT5zdWJ0dHlzOworICBpZiAoKHR0eS0+bmV4dCA9IGZhdGhlci0+c3VidHR5cykpCisgICAgdHR5LT5uZXh0LT5wcmV2bmV4dCA9ICZ0dHktPm5leHQ7CisgIGZhdGhlci0+c3VidHR5cyA9IHR0eTsKKyAgcmV0dXJuIHR0eTsKKworb3V0dHR5OgorICBmcmVlKHR0eSk7CitvdXQ6CisgIHJldHVybiBOVUxMOworfQorCisvKiBGdW5jdGlvbjogcmVtb3ZlVHR5ICovCisvKiByZW1vdmVzIGFuIHVudXNlZCB0dHkgZnJvbSB0aGUgaGllcmFyY2h5ICovCitzdGF0aWMgaW5saW5lIHZvaWQgcmVtb3ZlVHR5KFR0eSAqdG9yZW1vdmUpCit7CisgIGlmICh0b3JlbW92ZS0+bmV4dCkKKyAgICB0b3JlbW92ZS0+bmV4dC0+cHJldm5leHQgPSB0b3JlbW92ZS0+cHJldm5leHQ7CisgICoodG9yZW1vdmUtPnByZXZuZXh0KSA9IHRvcmVtb3ZlLT5uZXh0OworfQorCisvKiBGdW5jdGlvbjogZnJlZVR0eSAqLworLyogZnJlZXMgYSB0dHkgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBmcmVlVHR5KFR0eSAqdHR5KQoreworICBmcmVlQ29ubmVjdGlvbih0dHktPmNvbm5lY3Rpb25zKTsKKyAgZnJlZSh0dHkpOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKiBDT01NVU5JQ0FUSU9OIFBST1RPQ09MIEhBTkRMSU5HICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIEZ1bmN0aW9uIGxvZ1JlcXVlc3QgKi8KKy8qIExvZ3MgdGhlIGdpdmVuIHJlcXVlc3QgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBsb2dSZXF1ZXN0KGJybGFwaV9wYWNrZXRUeXBlX3QgdHlwZSwgRmlsZURlc2NyaXB0b3IgZmQpCit7CisgIGxvZ01lc3NhZ2UoTE9HX0NBVEVHT1JZKFNFUlZFUl9FVkVOVFMpLCAicmVjZWl2ZWQgJXMgcmVxdWVzdCBvbiBmZCAlIlBSSWZkLCBicmxhcGlzZXJ2ZXJfZ2V0UGFja2V0VHlwZU5hbWUodHlwZSksIGZkKTsKK30KKworc3RhdGljIGludCBoYW5kbGVHZXREcml2ZXIoQ29ubmVjdGlvbiAqYywgYnJsYXBpX3BhY2tldFR5cGVfdCB0eXBlLCBzaXplX3Qgc2l6ZSwgY29uc3QgY2hhciAqc3RyKQoreworICBpbnQgbGVuID0gc3RybGVuKHN0cik7CisgIENIRUNLRVJSKHNpemU9PTAsQlJMQVBJX0VSUk9SX0lOVkFMSURfUEFDS0VULCJwYWNrZXQgc2hvdWxkIGJlIGVtcHR5Iik7CisgIENIRUNLRVJSKCFjLT5yYXcsQlJMQVBJX0VSUk9SX0lMTEVHQUxfSU5TVFJVQ1RJT04sIm5vdCBhbGxvd2VkIGluIHJhdyBtb2RlIik7CisgIGJybGFwaXNlcnZlcl93cml0ZVBhY2tldChjLT5mZCwgdHlwZSwgc3RyLCBsZW4rMSk7CisgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50IGhhbmRsZUdldERyaXZlck5hbWUoQ29ubmVjdGlvbiAqYywgYnJsYXBpX3BhY2tldFR5cGVfdCB0eXBlLCBicmxhcGlfcGFja2V0X3QgKnBhY2tldCwgc2l6ZV90IHNpemUpCit7CisgIHJldHVybiBoYW5kbGVHZXREcml2ZXIoYywgdHlwZSwgc2l6ZSwgYnJhaWxsZS0+ZGVmaW5pdGlvbi5uYW1lKTsKK30KKworc3RhdGljIGludCBoYW5kbGVHZXRNb2RlbElkZW50aWZpZXIoQ29ubmVjdGlvbiAqYywgYnJsYXBpX3BhY2tldFR5cGVfdCB0eXBlLCBicmxhcGlfcGFja2V0X3QgKnBhY2tldCwgc2l6ZV90IHNpemUpCit7CisgIHJldHVybiBoYW5kbGVHZXREcml2ZXIoYywgdHlwZSwgc2l6ZSwgZGlzcCAmJiBkaXNwLT5rZXlCaW5kaW5ncyA/IGRpc3AtPmtleUJpbmRpbmdzIDogIiIpOworfQorCitzdGF0aWMgaW50IGhhbmRsZUdldERpc3BsYXlTaXplKENvbm5lY3Rpb24gKmMsIGJybGFwaV9wYWNrZXRUeXBlX3QgdHlwZSwgYnJsYXBpX3BhY2tldF90ICpwYWNrZXQsIHNpemVfdCBzaXplKQoreworICBDSEVDS0VSUihzaXplPT0wLEJSTEFQSV9FUlJPUl9JTlZBTElEX1BBQ0tFVCwicGFja2V0IHNob3VsZCBiZSBlbXB0eSIpOworICBDSEVDS0VSUighYy0+cmF3LEJSTEFQSV9FUlJPUl9JTExFR0FMX0lOU1RSVUNUSU9OLCJub3QgYWxsb3dlZCBpbiByYXcgbW9kZSIpOworICBicmxhcGlzZXJ2ZXJfd3JpdGVQYWNrZXQoYy0+ZmQsQlJMQVBJX1BBQ0tFVF9HRVRESVNQTEFZU0laRSwmZGlzcGxheURpbWVuc2lvbnNbMF0sc2l6ZW9mKGRpc3BsYXlEaW1lbnNpb25zKSk7CisgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50IGhhbmRsZUVudGVyVHR5TW9kZShDb25uZWN0aW9uICpjLCBicmxhcGlfcGFja2V0VHlwZV90IHR5cGUsIGJybGFwaV9wYWNrZXRfdCAqcGFja2V0LCBzaXplX3Qgc2l6ZSkKK3sKKyAgdWludDMyX3QgKiBpbnRzID0gJnBhY2tldC0+dWludDMyOworICB1aW50MzJfdCBuYlR0eXM7CisgIGludCBob3c7CisgIHVuc2lnbmVkIGludCBuOworICB1bnNpZ25lZCBjaGFyICpwID0gcGFja2V0LT5kYXRhOworICBjaGFyIG5hbWVbQlJMQVBJX01BWE5BTUVMRU5HVEgrMV07CisgIFR0eSAqdHR5LCp0dHkyLCp0dHkzOworICB1aW50MzJfdCAqcHR0eTsKKyAgc2l6ZV90IHJlbWFpbmluZyA9IHNpemU7CisgIENIRUNLRVJSKCghYy0+cmF3KSxCUkxBUElfRVJST1JfSUxMRUdBTF9JTlNUUlVDVElPTiwibm90IGFsbG93ZWQgaW4gcmF3IG1vZGUiKTsKKyAgQ0hFQ0tFUlIocmVtYWluaW5nPj1zaXplb2YodWludDMyX3QpLCBCUkxBUElfRVJST1JfSU5WQUxJRF9QQUNLRVQsICJwYWNrZXQgdG9vIHNtYWxsIik7CisgIHAgKz0gc2l6ZW9mKHVpbnQzMl90KTsgcmVtYWluaW5nIC09IHNpemVvZih1aW50MzJfdCk7CisgIG5iVHR5cyA9IG50b2hsKGludHNbMF0pOworICBDSEVDS0VSUihyZW1haW5pbmc+PW5iVHR5cypzaXplb2YodWludDMyX3QpLCBCUkxBUElfRVJST1JfSU5WQUxJRF9QQUNLRVQsICJwYWNrZXQgdG9vIHNtYWxsIGZvciBwcm92aWRlZCBudW1iZXIgb2YgdHR5cyIpOworICBwICs9IG5iVHR5cypzaXplb2YodWludDMyX3QpOyByZW1haW5pbmcgLT0gbmJUdHlzKnNpemVvZih1aW50MzJfdCk7CisgIENIRUNLRVJSKCpwPD1CUkxBUElfTUFYTkFNRUxFTkdUSCwgQlJMQVBJX0VSUk9SX0lOVkFMSURfUEFSQU1FVEVSLCAiZHJpdmVyIG5hbWUgdG9vIGxvbmciKTsKKyAgbiA9ICpwOyBwKys7IHJlbWFpbmluZy0tOworICBDSEVDS0VSUihyZW1haW5pbmc9PW4sIEJSTEFQSV9FUlJPUl9JTlZBTElEX1BBQ0tFVCwicGFja2V0IHNpemUgZG9lc24ndCBtYXRjaCBmb3JtYXQiKTsKKyAgbWVtY3B5KG5hbWUsIHAsIG4pOworICBuYW1lW25dID0gJ1wwJzsKKyAgaWYgKCEqbmFtZSkgaG93ID0gQlJMX0NPTU1BTkRTOyBlbHNlIHsKKyAgICBDSEVDS0VSUighc3RyY21wKG5hbWUsIHRydWVCcmFpbGxlLT5kZWZpbml0aW9uLm5hbWUpLCBCUkxBUElfRVJST1JfSU5WQUxJRF9QQVJBTUVURVIsICJ3cm9uZyBkcml2ZXIgbmFtZSIpOworICAgIENIRUNLRVJSKGlzS2V5Q2FwYWJsZSh0cnVlQnJhaWxsZSksIEJSTEFQSV9FUlJPUl9PUE5PVFNVUFAsICJkcml2ZXIgZG9lc24ndCBzdXBwb3J0IHJhdyBrZXljb2RlcyIpOworICAgIGhvdyA9IEJSTF9LRVlDT0RFUzsKKyAgfQorICBmcmVlQnJhaWxsZVdpbmRvdygmYy0+YnJhaWxsZVdpbmRvdyk7IC8qIEluIGNhc2Ugb2YgbXVsdGlwbGUgZW50ZXJUdHlNb2RlIHJlcXVlc3RzICovCisKKyAgaWYgKChpbml0aWFsaXplQWNjZXB0ZWRLZXlzKGMsIGhvdyk9PS0xKSB8fCAoYWxsb2NCcmFpbGxlV2luZG93KCZjLT5icmFpbGxlV2luZG93KT09LTEpKSB7CisgICAgbG9nTWVzc2FnZShMT0dfV0FSTklORywiRmFpbGVkIHRvIGFsbG9jYXRlIHNvbWUgcmVzb3VyY2VzIik7CisgICAgZnJlZUtleXJhbmdlTGlzdCgmYy0+YWNjZXB0ZWRLZXlzKTsKKyAgICBXRVJSKGMtPmZkLEJSTEFQSV9FUlJPUl9OT01FTSwgIm5vIG1lbW9yeSBmb3IgYWNjZXB0ZWQga2V5cyIpOworICAgIHJldHVybiAwOworICB9CisKKyAgbG9ja011dGV4KCZhcGlDb25uZWN0aW9uc011dGV4KTsKKyAgdHR5ID0gdHR5MiA9ICZ0dHlzOworCisgIGZvciAocHR0eT1pbnRzKzE7IHB0dHk8PWludHMrbmJUdHlzOyBwdHR5KyspIHsKKyAgICBmb3IgKHR0eTI9dHR5LT5zdWJ0dHlzOyB0dHkyOyB0dHkyPXR0eTItPm5leHQpIHsKKyAgICAgIGlmICh0dHkyLT5udW1iZXIgPT0gbnRvaGwoKnB0dHkpKSBicmVhazsKKyAgICB9CisKKyAgICBpZiAoIXR0eTIpIGJyZWFrOworICAgIHR0eSA9IHR0eTI7CisgICAgbG9nTWVzc2FnZShMT0dfQ0FURUdPUlkoU0VSVkVSX0VWRU5UUyksICJ0dHkgJSMwMTBseCBvayIsKHVuc2lnbmVkIGxvbmcpbnRvaGwoKnB0dHkpKTsKKyAgfQorCisgIGlmICghdHR5MikgeworICAgIC8qIHdlIHdlcmUgc3RvcHBlZCBhdCBzb21lIHBvaW50IGJlY2F1c2UgdGhlIHBhdGggZG9lc24ndCBleGlzdCB5ZXQgKi8KKyAgICBpZiAoYy0+dHR5KSB7CisgICAgICAvKiB1aHUsIHdlIGFscmVhZHkgZ290IGEgdHR5LCBidXQgbm90IHRoaXMgb25lLCBzaW5jZSB0aGUgcGF0aAorICAgICAgICogZG9lc24ndCBleGlzdCB5ZXQuIFRoaXMgaXMgZm9yYmlkZGVuLiAqLworICAgICAgdW5sb2NrTXV0ZXgoJmFwaUNvbm5lY3Rpb25zTXV0ZXgpOworICAgICAgV0VSUihjLT5mZCwgQlJMQVBJX0VSUk9SX0lOVkFMSURfUEFSQU1FVEVSLCAiYWxyZWFkeSBoYXZpbmcgYW5vdGhlciB0dHkiKTsKKyAgICAgIHJldHVybiAwOworICAgIH0KKyAgICAvKiBvaywgYWxsb2NhdGUgcGF0aCAqLworICAgIC8qIHdlIGxvY2sgdGhlIGVudGlyZSBzdWJ0cmVlIGZvciBlYXNpZXIgY2xlYW51cCAqLworICAgIGlmICghKHR0eTIgPSBuZXdUdHkodHR5LG50b2hsKCpwdHR5KSkpKSB7CisgICAgICB1bmxvY2tNdXRleCgmYXBpQ29ubmVjdGlvbnNNdXRleCk7CisgICAgICBXRVJSKGMtPmZkLEJSTEFQSV9FUlJPUl9OT01FTSwgIm5vIG1lbW9yeSBmb3IgbmV3IHR0eSIpOworICAgICAgZnJlZUJyYWlsbGVXaW5kb3coJmMtPmJyYWlsbGVXaW5kb3cpOworICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIHB0dHkrKzsKKyAgICBsb2dNZXNzYWdlKExPR19DQVRFR09SWShTRVJWRVJfRVZFTlRTKSwgImFsbG9jYXRlZCB0dHkgJSMwMTBseCIsKHVuc2lnbmVkIGxvbmcpbnRvaGwoKihwdHR5LTEpKSk7CisgICAgZm9yICg7IHB0dHk8PWludHMrbmJUdHlzOyBwdHR5KyspIHsKKyAgICAgIGlmICghKHR0eTIgPSBuZXdUdHkodHR5MixudG9obCgqcHR0eSkpKSkgeworICAgICAgICAvKiBnYXNwLCBjb3VsZG4ndCBhbGxvY2F0ZSA6LywgY2xlYW4gdHJlZSAqLworICAgICAgICBmb3IgKHR0eTIgPSB0dHktPnN1YnR0eXM7IHR0eTI7IHR0eTIgPSB0dHkzKSB7CisgICAgICAgICAgdHR5MyA9IHR0eTItPnN1YnR0eXM7CisgICAgICAgICAgZnJlZVR0eSh0dHkyKTsKKyAgICAgICAgfQorICAgICAgICB1bmxvY2tNdXRleCgmYXBpQ29ubmVjdGlvbnNNdXRleCk7CisgICAgICAgIFdFUlIoYy0+ZmQsQlJMQVBJX0VSUk9SX05PTUVNLCAibm8gbWVtb3J5IGZvciBuZXcgdHR5Iik7CisgICAgICAgIGZyZWVCcmFpbGxlV2luZG93KCZjLT5icmFpbGxlV2luZG93KTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgICB9CisgICAgICBsb2dNZXNzYWdlKExPR19DQVRFR09SWShTRVJWRVJfRVZFTlRTKSwgImFsbG9jYXRlZCB0dHkgJSMwMTBseCIsKHVuc2lnbmVkIGxvbmcpbnRvaGwoKnB0dHkpKTsKKyAgICB9CisgICAgdHR5ID0gdHR5MjsKKyAgfQorICBpZiAoYy0+dHR5KSB7CisgICAgdW5sb2NrTXV0ZXgoJmFwaUNvbm5lY3Rpb25zTXV0ZXgpOworICAgIGlmIChjLT50dHkgPT0gdHR5KSB7CisgICAgICBpZiAoYy0+aG93PT1ob3cpIHsKKwlXRVJSKGMtPmZkLCBCUkxBUElfRVJST1JfSUxMRUdBTF9JTlNUUlVDVElPTiwgImFscmVhZHkgY29udHJvbGxpbmcgdHR5ICUjMDEweCIsIGMtPnR0eS0+bnVtYmVyKTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIC8qIEhlcmUgb25lIGlzIGluIHRoZSBjYXNlIHdoZXJlIHRoZSBjbGllbnQgdHJpZXMgdG8gY2hhbmdlICovCisgICAgICAgIC8qIGZyb20gQlJMX0tFWUNPREVTIHRvIEJSTF9DT01NQU5EUywgb3Igc29tZXRoaW5nIGxpa2UgdGhhdCAqLworICAgICAgICAvKiBGb3IgdGhlIG1vbWVudCB0aGlzIG9wZXJhdGlvbiBpcyBub3Qgc3VwcG9ydGVkICovCisgICAgICAgIC8qIEEgY2xpZW50IHRoYXQgd2FudHMgdG8gZG8gdGhhdCBzaG91bGQgZmlyc3QgTGVhdmVUdHkoKSAqLworICAgICAgICAvKiBhbmQgdGhlbiBnZXQgaXQgYWdhaW4sIHJpc2tpbmcgdG8gbG9zZSBpdCAqLworICAgICAgICBXRVJSKGMtPmZkLEJSTEFQSV9FUlJPUl9PUE5PVFNVUFAsICJTd2l0Y2hpbmcgZnJvbSBCUkxfS0VZQ09ERVMgdG8gQlJMX0NPTU1BTkRTIG5vdCBzdXBwb3J0ZWQgeWV0Iik7CisgICAgICB9CisgICAgICByZXR1cm4gMDsKKyAgICB9IGVsc2UgeworICAgICAgLyogdWh1LCB3ZSBhbHJlYWR5IGdvdCBhIHR0eSwgYnV0IG5vdCB0aGlzIG9uZTogdGhpcyBpcyBmb3JiaWRkZW4uICovCisgICAgICBXRVJSKGMtPmZkLCBCUkxBUElfRVJST1JfSU5WQUxJRF9QQVJBTUVURVIsICJhbHJlYWR5IGhhdmluZyBhIHR0eSIpOworICAgICAgcmV0dXJuIDA7CisgICAgfQorICB9CisgIGMtPnR0eSA9IHR0eTsKKyAgYy0+aG93ID0gaG93OworICBfX3JlbW92ZUNvbm5lY3Rpb24oYyk7CisgIF9fYWRkQ29ubmVjdGlvblNvcnRlZChjLHR0eS0+Y29ubmVjdGlvbnMpOworICB1bmxvY2tNdXRleCgmYXBpQ29ubmVjdGlvbnNNdXRleCk7CisgIHdyaXRlQWNrKGMtPmZkKTsKKyAgbG9nTWVzc2FnZShMT0dfQ0FURUdPUlkoU0VSVkVSX0VWRU5UUyksICJmZCAlIlBSSWZkIiB0YWtpbmcgY29udHJvbCBvZiB0dHkgJSMwMTB4IChob3c9JWQpIixjLT5mZCx0dHktPm51bWJlcixob3cpOworICByZXR1cm4gMDsKK30KKworc3RhdGljIGludCBoYW5kbGVTZXRGb2N1cyhDb25uZWN0aW9uICpjLCBicmxhcGlfcGFja2V0VHlwZV90IHR5cGUsIGJybGFwaV9wYWNrZXRfdCAqcGFja2V0LCBzaXplX3Qgc2l6ZSkKK3sKKyAgdWludDMyX3QgKiBpbnRzID0gJnBhY2tldC0+dWludDMyOworICBDSEVDS0VYQyghYy0+cmF3LEJSTEFQSV9FUlJPUl9JTExFR0FMX0lOU1RSVUNUSU9OLCJub3QgYWxsb3dlZCBpbiByYXcgbW9kZSIpOworICBDSEVDS0VYQyhjLT50dHksQlJMQVBJX0VSUk9SX0lMTEVHQUxfSU5TVFJVQ1RJT04sIm5vdCBhbGxvd2VkIG91dCBvZiB0dHkgbW9kZSIpOworICBjLT50dHktPmZvY3VzID0gbnRvaGwoaW50c1swXSk7CisgIGxvZ01lc3NhZ2UoTE9HX0NBVEVHT1JZKFNFUlZFUl9FVkVOVFMpLCAiZm9jdXMgb24gd2luZG93ICUjMDEweCBmcm9tIGZkJSJQUklmZCxjLT50dHktPmZvY3VzLGMtPmZkKTsKKyAgZmx1c2hPdXRwdXQoKTsKKyAgcmV0dXJuIDA7Cit9CisKKy8qIEZ1bmN0aW9uIGRvTGVhdmVUdHkgKi8KKy8qIGhhbmRsZXMgYSBjb25uZWN0aW9uIGxlYXZpbmcgaXRzIHR0eSAqLworc3RhdGljIHZvaWQgZG9MZWF2ZVR0eShDb25uZWN0aW9uICpjKQoreworICBUdHkgKnR0eSA9IGMtPnR0eTsKKyAgbG9nTWVzc2FnZShMT0dfQ0FURUdPUlkoU0VSVkVSX0VWRU5UUyksICJmZCAlIlBSSWZkIiByZWxlYXNpbmcgdHR5ICUjMDEweCIsYy0+ZmQsdHR5LT5udW1iZXIpOworICBjLT50dHkgPSBOVUxMOworICBsb2NrTXV0ZXgoJmFwaUNvbm5lY3Rpb25zTXV0ZXgpOworICBfX3JlbW92ZUNvbm5lY3Rpb24oYyk7CisgIF9fYWRkQ29ubmVjdGlvbihjLG5vdHR5LmNvbm5lY3Rpb25zKTsKKyAgdW5sb2NrTXV0ZXgoJmFwaUNvbm5lY3Rpb25zTXV0ZXgpOworICBmcmVlS2V5cmFuZ2VMaXN0KCZjLT5hY2NlcHRlZEtleXMpOworICBmcmVlQnJhaWxsZVdpbmRvdygmYy0+YnJhaWxsZVdpbmRvdyk7Cit9CisKK3N0YXRpYyBpbnQgaGFuZGxlTGVhdmVUdHlNb2RlKENvbm5lY3Rpb24gKmMsIGJybGFwaV9wYWNrZXRUeXBlX3QgdHlwZSwgYnJsYXBpX3BhY2tldF90ICpwYWNrZXQsIHNpemVfdCBzaXplKQoreworICBDSEVDS0VSUighYy0+cmF3LEJSTEFQSV9FUlJPUl9JTExFR0FMX0lOU1RSVUNUSU9OLCJub3QgYWxsb3dlZCBpbiByYXcgbW9kZSIpOworICBDSEVDS0VSUihjLT50dHksQlJMQVBJX0VSUk9SX0lMTEVHQUxfSU5TVFJVQ1RJT04sIm5vdCBhbGxvd2VkIG91dCBvZiB0dHkgbW9kZSIpOworICBkb0xlYXZlVHR5KGMpOworICB3cml0ZUFjayhjLT5mZCk7CisgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50IGhhbmRsZUtleVJhbmdlcyhDb25uZWN0aW9uICpjLCBicmxhcGlfcGFja2V0VHlwZV90IHR5cGUsIGJybGFwaV9wYWNrZXRfdCAqcGFja2V0LCBzaXplX3Qgc2l6ZSkKK3sKKyAgaW50IHJlcyA9IDA7CisgIGJybGFwaV9rZXlDb2RlX3QgeCx5OworICB1aW50MzJfdCAoKmludHMpWzRdID0gKHVpbnQzMl90ICgqKVs0XSkgJnBhY2tldC0+dWludDMyOworICB1bnNpZ25lZCBpbnQgaTsKKyAgQ0hFQ0tFUlIoIWMtPnJhdyxCUkxBUElfRVJST1JfSUxMRUdBTF9JTlNUUlVDVElPTiwibm90IGFsbG93ZWQgaW4gcmF3IG1vZGUiKTsKKyAgQ0hFQ0tFUlIoYy0+dHR5LEJSTEFQSV9FUlJPUl9JTExFR0FMX0lOU1RSVUNUSU9OLCJub3QgYWxsb3dlZCBvdXQgb2YgdHR5IG1vZGUiKTsKKyAgQ0hFQ0tFUlIoIShzaXplJSgyKnNpemVvZihicmxhcGlfa2V5Q29kZV90KSkpLEJSTEFQSV9FUlJPUl9JTlZBTElEX1BBQ0tFVCwid3JvbmcgcGFja2V0IHNpemUiKTsKKyAgbG9ja011dGV4KCZjLT5hY2NlcHRlZEtleXNNdXRleCk7CisgIGZvciAoaT0wOyBpPHNpemUvKDIqc2l6ZW9mKGJybGFwaV9rZXlDb2RlX3QpKTsgaSsrKSB7CisgICAgeCA9IGJybGFwaXNlcnZlcl9wYWNrZXRUb0tleUNvZGUoJmludHNbaV1bMF0pOworICAgIHkgPSBicmxhcGlzZXJ2ZXJfcGFja2V0VG9LZXlDb2RlKCZpbnRzW2ldWzJdKTsKKyAgICBsb2dNZXNzYWdlKExPR19DQVRFR09SWShTRVJWRVJfRVZFTlRTKSwgImZkICUiUFJJZmQiIHJhbmdlOiBbJTAxNiJCUkxBUElfUFJJeEtFWUNPREUiLi4lMDE2IkJSTEFQSV9QUkl4S0VZQ09ERSJdIixjLT5mZCx4LHkpOworICAgIGlmICh0eXBlPT1CUkxBUElfUEFDS0VUX0lHTk9SRUtFWVJBTkdFUykgcmVzID0gcmVtb3ZlS2V5cmFuZ2UoeCx5LCZjLT5hY2NlcHRlZEtleXMpOworICAgIGVsc2UgcmVzID0gYWRkS2V5cmFuZ2UoeCx5LCZjLT5hY2NlcHRlZEtleXMpOworICAgIGlmIChyZXM9PS0xKSB7CisgICAgICAvKiBYWFg6IGh1bWYsIGluIHRoZSBtaWRkbGUgb2Yga2V5Y29kZSB1cGRhdGVzIDooICovCisgICAgICBXRVJSKGMtPmZkLEJSTEFQSV9FUlJPUl9OT01FTSwibm8gbWVtb3J5IGZvciBrZXkgcmFuZ2UiKTsKKyAgICAgIGJyZWFrOworICAgIH0KKyAgfQorICB1bmxvY2tNdXRleCgmYy0+YWNjZXB0ZWRLZXlzTXV0ZXgpOworICBpZiAoIXJlcykgd3JpdGVBY2soYy0+ZmQpOworICByZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQKK2xvZ0NvbnZlcnNpb25EZWNpc2lvbiAoQ29ubmVjdGlvbiAqY29ubmVjdGlvbiwgY29uc3QgY2hhciAqY2hhcnNldCwgY29uc3QgY2hhciAqZGVjaXNpb24pIHsKKyAgbG9nTWVzc2FnZShMT0dfQ0FURUdPUlkoU0VSVkVSX0VWRU5UUyksCisgICAgImZkICUiUFJJZmQiIGNoYXJzZXQgJXMgJXMiLAorICAgIGNvbm5lY3Rpb24tPmZkLCBjaGFyc2V0LCBkZWNpc2lvbgorICApOworfQorCitzdGF0aWMgdm9pZAorbG9nQ29udmVyc2lvblJlc3VsdCAoQ29ubmVjdGlvbiAqY29ubmVjdGlvbiwgdW5zaWduZWQgaW50IGNoYXJzLCB1bnNpZ25lZCBpbnQgYnl0ZXMpIHsKKyAgbG9nTWVzc2FnZShMT0dfQ0FURUdPUlkoU0VSVkVSX0VWRU5UUyksCisgICAgImZkICUiUFJJZmQiIHdyb3RlICVkIGNoYXJhY3RlcnMgJWQgYnl0ZXMiLAorICAgIGNvbm5lY3Rpb24tPmZkLCBjaGFycywgYnl0ZXMKKyAgKTsKK30KKworc3RhdGljIHZvaWQKK2NvbnZlcnRGcm9tTGF0aW4xIChDb25uZWN0aW9uICpjLCB1bnNpZ25lZCBpbnQgcmJlZywgdW5zaWduZWQgaW50IHJzaXosIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnRleHQpIHsKKyAgZm9yIChpbnQgaT0wOyBpPHJzaXo7IGkrPTEpIHsKKyAgICBjLT5icmFpbGxlV2luZG93LnRleHRbcmJlZy0xK2ldID0gdGV4dFtpXTsKKyAgfQorCisgIGxvZ0NvbnZlcnNpb25SZXN1bHQoYywgcnNpeiwgcnNpeik7Cit9CisKK3N0YXRpYyBpbnQKK2NvbnZlcnRGcm9tVVRGOCAoQ29ubmVjdGlvbiAqYywgd2NoYXJfdCAqb3V0QnVmZiwgc2l6ZV90ICpvdXRMZWZ0LCBjb25zdCBjaGFyICppbkJ1ZmYsIHNpemVfdCAqaW5MZWZ0KSB7CisgIHdjaGFyX3QgKm91dCA9IG91dEJ1ZmY7CisgIGNvbnN0IGNoYXIgKmluID0gaW5CdWZmOworCisgIHdoaWxlICgoKm91dExlZnQgPiAwKSAmJiAoKmluTGVmdCA+IDApKSB7CisgICAgd2ludF90IHdjID0gY29udmVydFV0ZjhUb1djaGFyKCZpbiwgaW5MZWZ0KTsKKyAgICBpZiAod2MgPT0gV0VPRikgcmV0dXJuIDA7CisKKyAgICAqb3V0KysgPSB3YzsKKyAgICAqb3V0TGVmdCAtPSAxOworICB9CisKKyAgbG9nQ29udmVyc2lvblJlc3VsdChjLCAob3V0IC0gb3V0QnVmZiksIChpbiAtIGluQnVmZikpOworICByZXR1cm4gMTsKK30KKworc3RhdGljIGludCBoYW5kbGVXcml0ZShDb25uZWN0aW9uICpjLCBicmxhcGlfcGFja2V0VHlwZV90IHR5cGUsIGJybGFwaV9wYWNrZXRfdCAqcGFja2V0LCBzaXplX3Qgc2l6ZSkKK3sKKyAgYnJsYXBpX3dyaXRlQXJndW1lbnRzUGFja2V0X3QgKndhID0gJnBhY2tldC0+d3JpdGVBcmd1bWVudHM7CisgIHVuc2lnbmVkIGNoYXIgKnRleHQgPSBOVUxMLCAqb3JBdHRyID0gTlVMTCwgKmFuZEF0dHIgPSBOVUxMOworICB1bnNpZ25lZCBpbnQgcmJlZywgcnNpeiwgdGV4dExlbiA9IDA7CisgIGJvb2wgZmlsbDsKKyAgaW50IGN1cnNvciA9IC0xOworICB1bnNpZ25lZCBjaGFyICpwID0gJndhLT5kYXRhOworICBpbnQgcmVtYWluaW5nID0gc2l6ZTsKKyAgY2hhciAqY2hhcnNldCA9IE5VTEw7CisgIHVuc2lnbmVkIGludCBjaGFyc2V0TGVuID0gMDsKKyAgQ0hFQ0tFWEMocmVtYWluaW5nPj1zaXplb2Yod2EtPmZsYWdzKSwgQlJMQVBJX0VSUk9SX0lOVkFMSURfUEFDS0VULCAicGFja2V0IHRvbyBzbWFsbCBmb3IgZmxhZ3MiKTsKKyAgQ0hFQ0tFWEMoIWMtPnJhdyxCUkxBUElfRVJST1JfSUxMRUdBTF9JTlNUUlVDVElPTiwibm90IGFsbG93ZWQgaW4gcmF3IG1vZGUiKTsKKyAgQ0hFQ0tFWEMoYy0+dHR5LEJSTEFQSV9FUlJPUl9JTExFR0FMX0lOU1RSVUNUSU9OLCJub3QgYWxsb3dlZCBvdXQgb2YgdHR5IG1vZGUiKTsKKyAgd2EtPmZsYWdzID0gbnRvaGwod2EtPmZsYWdzKTsKKyAgaWYgKChyZW1haW5pbmc9PXNpemVvZih3YS0+ZmxhZ3MpKSYmKHdhLT5mbGFncz09MCkpIHsKKyAgICBjLT5icmxidWZzdGF0ZSA9IEVNUFRZOworICAgIHJldHVybiAwOworICB9CisgIHJlbWFpbmluZyAtPSBzaXplb2Yod2EtPmZsYWdzKTsgLyogZmxhZ3MgKi8KKyAgQ0hFQ0tFWEMoKHdhLT5mbGFncyAmIEJSTEFQSV9XRl9ESVNQTEFZTlVNQkVSKT09MCwgQlJMQVBJX0VSUk9SX09QTk9UU1VQUCwgImRpc3BsYXkgbnVtYmVyIG5vdCB5ZXQgc3VwcG9ydGVkIik7CisgIGlmICh3YS0+ZmxhZ3MgJiBCUkxBUElfV0ZfUkVHSU9OKSB7CisgICAgaW50IHJlZ2lvblNpemU7CisgICAgQ0hFQ0tFWEMocmVtYWluaW5nPjIqc2l6ZW9mKHVpbnQzMl90KSwgQlJMQVBJX0VSUk9SX0lOVkFMSURfUEFDS0VULCAicGFja2V0IHRvbyBzbWFsbCBmb3IgcmVnaW9uIik7CisgICAgcmJlZyA9IG50b2hsKCAqKCh1aW50MzJfdCAqKSBwKSApOworICAgIHAgKz0gc2l6ZW9mKHVpbnQzMl90KTsgcmVtYWluaW5nIC09IHNpemVvZih1aW50MzJfdCk7IC8qIHJlZ2lvbiBiZWdpbiAqLworICAgIHJlZ2lvblNpemUgPSAoaW50MzJfdCkgbnRvaGwoICooKHVpbnQzMl90ICopIHApICk7CisgICAgcCArPSBzaXplb2YodWludDMyX3QpOyByZW1haW5pbmcgLT0gc2l6ZW9mKHVpbnQzMl90KTsgLyogcmVnaW9uIHNpemUgKi8KKyAgICBpZiAocmVnaW9uU2l6ZSA8IDApIHsKKyAgICAgIENIRUNLRVhDKHJlZ2lvblNpemUgIT0gSU5UMzJfTUlOLCBCUkxBUElfRVJST1JfSU5WQUxJRF9QQVJBTUVURVIsICJpbnZhbGlkIHJlZ2lvbiBzaXplIik7CisgICAgICByc2l6ID0gLXJlZ2lvblNpemU7CisgICAgICBmaWxsID0gdHJ1ZTsKKyAgICB9IGVsc2UgeworICAgICAgcnNpeiA9IHJlZ2lvblNpemU7CisgICAgICBmaWxsID0gZmFsc2U7CisgICAgfQorCisgICAgQ0hFQ0tFWEMoCisgICAgICAocmJlZyA+PSAxKSAmJiAocmJlZyA8PSBkaXNwbGF5U2l6ZSksCisgICAgICBCUkxBUElfRVJST1JfSU5WQUxJRF9QQVJBTUVURVIsICJpbnZhbGlkIHJlZ2lvbiBzdGFydCIKKyAgICApOworCisgICAgQ0hFQ0tFWEMoCisgICAgICAocnNpeiA+PSAxKSAmJiAocnNpeiA8PSBkaXNwbGF5U2l6ZSksCisgICAgICBCUkxBUElfRVJST1JfSU5WQUxJRF9QQVJBTUVURVIsICJpbnZhbGlkIHJlZ2lvbiBzaXplIgorICAgICk7CisKKyAgICBDSEVDS0VYQygKKyAgICAgIChyYmVnICsgcnNpeiAtIDEgPD0gZGlzcGxheVNpemUpLAorICAgICAgQlJMQVBJX0VSUk9SX0lOVkFMSURfUEFSQU1FVEVSLCAiaW52YWxpZCByZWdpb24iCisgICAgKTsKKyAgfSBlbHNlIHsKKyAgICBsb2dNZXNzYWdlKExPR19DQVRFR09SWShTRVJWRVJfRVZFTlRTKSwgIndhcm5pbmc6IGZkICUiUFJJZmQiIHVzZXMgZGVwcmVjYXRlZCByZWdpb25CZWdpbj0wIGFuZCByZWdpb25TaXplID0gMCIsYy0+ZmQpOworICAgIHJiZWcgPSAxOworICAgIHJzaXogPSBkaXNwbGF5U2l6ZTsKKyAgICBmaWxsID0gdHJ1ZTsKKyAgfQorICBpZiAod2EtPmZsYWdzICYgQlJMQVBJX1dGX1RFWFQpIHsKKyAgICBDSEVDS0VYQyhyZW1haW5pbmc+PXNpemVvZih1aW50MzJfdCksIEJSTEFQSV9FUlJPUl9JTlZBTElEX1BBQ0tFVCwgInBhY2tldCB0b28gc21hbGwgZm9yIHRleHQgbGVuZ3RoIik7CisgICAgdGV4dExlbiA9IG50b2hsKCAqKCh1aW50MzJfdCAqKSBwKSApOworICAgIHAgKz0gc2l6ZW9mKHVpbnQzMl90KTsgcmVtYWluaW5nIC09IHNpemVvZih1aW50MzJfdCk7IC8qIHRleHQgc2l6ZSAqLworICAgIENIRUNLRVhDKHJlbWFpbmluZz49dGV4dExlbiwgQlJMQVBJX0VSUk9SX0lOVkFMSURfUEFDS0VULCAicGFja2V0IHRvbyBzbWFsbCBmb3IgdGV4dCIpOworICAgIHRleHQgPSBwOworICAgIHAgKz0gdGV4dExlbjsgcmVtYWluaW5nIC09IHRleHRMZW47IC8qIHRleHQgKi8KKyAgfQorICBpZiAod2EtPmZsYWdzICYgQlJMQVBJX1dGX0FUVFJfQU5EKSB7CisgICAgQ0hFQ0tFWEMocmVtYWluaW5nPj1yc2l6LCBCUkxBUElfRVJST1JfSU5WQUxJRF9QQUNLRVQsICJwYWNrZXQgdG9vIHNtYWxsIGZvciBBbmQgbWFzayIpOworICAgIGFuZEF0dHIgPSBwOworICAgIHAgKz0gcnNpejsgcmVtYWluaW5nIC09IHJzaXo7IC8qIGFuZCBhdHRyaWJ1dGVzICovCisgIH0KKyAgaWYgKHdhLT5mbGFncyAmIEJSTEFQSV9XRl9BVFRSX09SKSB7CisgICAgQ0hFQ0tFWEMocmVtYWluaW5nPj1yc2l6LCBCUkxBUElfRVJST1JfSU5WQUxJRF9QQUNLRVQsICJwYWNrZXQgdG9vIHNtYWxsIGZvciBPciBtYXNrIik7CisgICAgb3JBdHRyID0gcDsKKyAgICBwICs9IHJzaXo7IHJlbWFpbmluZyAtPSByc2l6OyAvKiBvciBhdHRyaWJ1dGVzICovCisgIH0KKyAgaWYgKHdhLT5mbGFncyAmIEJSTEFQSV9XRl9DVVJTT1IpIHsKKyAgICB1aW50MzJfdCB1MzI7CisgICAgQ0hFQ0tFWEMocmVtYWluaW5nPj1zaXplb2YodWludDMyX3QpLCBCUkxBUElfRVJST1JfSU5WQUxJRF9QQUNLRVQsICJwYWNrZXQgdG9vIHNtYWxsIGZvciBjdXJzb3IiKTsKKyAgICBtZW1jcHkoJnUzMiwgcCwgc2l6ZW9mKHVpbnQzMl90KSk7CisgICAgY3Vyc29yID0gbnRvaGwodTMyKTsKKyAgICBwICs9IHNpemVvZih1aW50MzJfdCk7IHJlbWFpbmluZyAtPSBzaXplb2YodWludDMyX3QpOyAvKiBjdXJzb3IgKi8KKyAgICBDSEVDS0VYQyhjdXJzb3I8PWRpc3BsYXlTaXplLCBCUkxBUElfRVJST1JfSU5WQUxJRF9QQUNLRVQsICJ3cm9uZyBjdXJzb3IiKTsKKyAgfQorICBpZiAod2EtPmZsYWdzICYgQlJMQVBJX1dGX0NIQVJTRVQpIHsKKyAgICBDSEVDS0VYQyh3YS0+ZmxhZ3MgJiBCUkxBUElfV0ZfVEVYVCwgQlJMQVBJX0VSUk9SX0lOVkFMSURfUEFDS0VULCAiY2hhcnNldCByZXF1aXJlcyB0ZXh0Iik7CisgICAgQ0hFQ0tFWEMocmVtYWluaW5nPj0xLCBCUkxBUElfRVJST1JfSU5WQUxJRF9QQUNLRVQsICJwYWNrZXQgdG9vIHNtYWxsIGZvciBjaGFyc2V0IGxlbmd0aCIpOworICAgIGNoYXJzZXRMZW4gPSAqcCsrOyByZW1haW5pbmctLTsgLyogY2hhcnNldCBsZW5ndGggKi8KKyAgICBDSEVDS0VYQyhyZW1haW5pbmc+PWNoYXJzZXRMZW4sIEJSTEFQSV9FUlJPUl9JTlZBTElEX1BBQ0tFVCwgInBhY2tldCB0b28gc21hbGwgZm9yIGNoYXJzZXQiKTsKKyAgICBjaGFyc2V0ID0gKGNoYXIgKikgcDsKKyAgICBwICs9IGNoYXJzZXRMZW47IHJlbWFpbmluZyAtPSBjaGFyc2V0TGVuOyAvKiBjaGFyc2V0IG5hbWUgKi8KKyAgfQorICBDSEVDS0VYQyhyZW1haW5pbmc9PTAsIEJSTEFQSV9FUlJPUl9JTlZBTElEX1BBQ0tFVCwgInBhY2tldCB0b28gYmlnIik7CisgIC8qIEhlcmUgdGhlIHdob2xlIHBhY2tldCBoYXMgYmVlbiBjaGVja2VkICovCisKKyAgdW5zaWduZWQgaW50IHJzaXpfZmlsbGVkID0gZmlsbCA/IGRpc3BsYXlTaXplIC0gcmJlZyArIDEgOiByc2l6OworCisgIGlmICh0ZXh0KSB7CisgICAgaW50IGlzVVRGOCA9IDA7CisgICAgaW50IGlzTGF0aW4xID0gMDsKKworI2lmbmRlZiBIQVZFX0FMTE9DQV9ICisgICAgY2hhciBjaGFyc2V0QnVmZmVyWzBYMjBdOworI2VuZGlmIC8qIEhBVkVfQUxMT0NBX0ggKi8KKworICAgIGlmIChjaGFyc2V0KSB7CisgICAgICBjaGFyc2V0W2NoYXJzZXRMZW5dID0gMDsgLyogd2UgaGF2ZSByb29tIGZvciB0aGlzICovCisgICAgfSBlbHNlIHsKKyAgICAgIGxvY2tDaGFyc2V0KDApOworICAgICAgY29uc3QgY2hhciAqbmFtZSA9IGdldENoYXJzZXQoKTsKKworICAgICAgaWYgKG5hbWUpIHsKKyAgICAgICAgc2l6ZV90IGxlbmd0aCA9IHN0cmxlbihuYW1lKTsKKworI2lmZGVmIEhBVkVfQUxMT0NBX0gKKyAgICAgICAgc2l6ZV90IHNpemUgPSBsZW5ndGggKyAxOworICAgICAgICBjaGFyc2V0ID0gYWxsb2NhKHNpemUpOworICAgICAgICBzdHJjcHkoY2hhcnNldCwgbmFtZSk7CisjZWxzZSAvKiBIQVZFX0FMTE9DQV9IICovCisgICAgICAgIGlmIChsZW5ndGggPCBzaXplb2YoY2hhcnNldEJ1ZmZlcikpIHsKKyAgICAgICAgICBzdHJjcHkoY2hhcnNldEJ1ZmZlciwgbmFtZSk7CisgICAgICAgICAgY2hhcnNldCA9IGNoYXJzZXRCdWZmZXI7CisgICAgICAgIH0KKyNlbmRpZiAvKiBIQVZFX0FMTE9DQV9IICovCisKKyAgICAgICAgaWYgKGNoYXJzZXQpIGNoYXJzZXRMZW4gPSBsZW5ndGg7CisgICAgICB9CisKKyAgICAgIHVubG9ja0NoYXJzZXQoKTsKKyAgICB9CisKKyAgICBpZiAoY2hhcnNldCkgeworICAgICAgaWYgKGlzQ2hhcnNldFVURjgoY2hhcnNldCkpIHsKKyAgICAgICAgaXNVVEY4ID0gMTsKKyAgICAgIH0gZWxzZSBpZiAoaXNDaGFyc2V0TGF0aW4xKGNoYXJzZXQpKSB7CisgICAgICAgIGlzTGF0aW4xID0gMTsKKyAgICAgIH0gZWxzZSB7CisjaWZuZGVmIEhBVkVfSUNPTlZfSAorICAgICAgICBDSEVDS0VYQygwLCBCUkxBUElfRVJST1JfT1BOT1RTVVBQLCAiY2hhcnNldCBjb252ZXJzaW9uIG5vdCBzdXBwb3J0ZWQgKGVuYWJsZSBpY29udj8pIik7CisjZW5kaWYgLyogIUhBVkVfSUNPTlZfSCAqLworICAgICAgfQorICAgIH0KKworICAgIHNpemVfdCBlbmQ7CisgICAgaWYgKGlzVVRGOCkgeworICAgICAgbG9nQ29udmVyc2lvbkRlY2lzaW9uKGMsICJVVEYtOCIsICJpbnRlcm5hbCBjb252ZXJzaW9uIik7CisKKyAgICAgIHNpemVfdCBvdXRMZWZ0ID0gcnNpel9maWxsZWQ7CisgICAgICB3Y2hhcl90IG91dEJ1ZmZbb3V0TGVmdF07CisKKyAgICAgIHNpemVfdCBpbkxlZnQgPSB0ZXh0TGVuOworICAgICAgY29uc3QgY2hhciAqaW5CdWZmID0gKGNoYXIgKil0ZXh0OworCisgICAgICBDSEVDS0VYQygKKyAgICAgICAgY29udmVydEZyb21VVEY4KGMsIG91dEJ1ZmYsICZvdXRMZWZ0LCBpbkJ1ZmYsICZpbkxlZnQpLAorICAgICAgICBCUkxBUElfRVJST1JfSU5WQUxJRF9QQUNLRVQsICJpbnZhbGlkIGNoYXJzZXQgY29udmVyc2lvbiIKKyAgICAgICk7CisKKyAgICAgIGlmICghZmlsbCkgeworCUNIRUNLRVhDKCFpbkxlZnQsIEJSTEFQSV9FUlJPUl9JTlZBTElEX1BBQ0tFVCwgInRleHQgdG9vIGJpZyIpOworCUNIRUNLRVhDKCFvdXRMZWZ0LCBCUkxBUElfRVJST1JfSU5WQUxJRF9QQUNLRVQsICJ0ZXh0IHRvbyBzbWFsbCIpOworICAgICAgfSBlbHNlIHsKKwlDSEVDS0VYQyhpbkxlZnQgfHwgKCFhbmRBdHRyICYmICFvckF0dHIpIHx8IHJzaXpfZmlsbGVkIC0gb3V0TGVmdCA9PSByc2l6LCBCUkxBUElfRVJST1JfSU5WQUxJRF9QQUNLRVQsICJ0ZXh0IGxlbmd0aCBkb2VzIG5vdCBtYXRjaCBhbmQvb3IgbWFzayBsZW5ndGgiKTsKKyAgICAgIH0KKworICAgICAgbG9ja011dGV4KCZjLT5icmFpbGxlV2luZG93TXV0ZXgpOworICAgICAgd21lbWNweShjLT5icmFpbGxlV2luZG93LnRleHQrcmJlZy0xLCBvdXRCdWZmLCByc2l6X2ZpbGxlZCAtIG91dExlZnQpOworICAgICAgZW5kID0gcmJlZy0xICsgcnNpel9maWxsZWQgLSBvdXRMZWZ0OworICAgIH0KKworI2lmZGVmIEhBVkVfSUNPTlZfSAorICAgIGVsc2UgaWYgKGNoYXJzZXQgJiYgIWlzTGF0aW4xKSB7CisgICAgICBsb2dDb252ZXJzaW9uRGVjaXNpb24oYywgY2hhcnNldCwgImljb252IGNvbnZlcnNpb24iKTsKKworICAgICAgc2l6ZV90IGxlbiA9IGZpbGwgPyB0ZXh0TGVuIDogcnNpejsKKyAgICAgIHdjaGFyX3QgdGV4dEJ1ZltsZW4gPyBsZW4gOiAxXTsKKyAgICAgIGNoYXIgKmluID0gKGNoYXIgKikgdGV4dCwgKm91dCA9IChjaGFyICopIHRleHRCdWY7CisgICAgICBzaXplX3Qgc2luID0gdGV4dExlbiwgc291dCA9IGxlbiAqIHNpemVvZih3Y2hhcl90KTsKKworICAgICAgaWNvbnZfdCBjb252ID0gaWNvbnZfb3BlbihnZXRXY2hhckNoYXJzZXQoKSwgY2hhcnNldCk7CisgICAgICBDSEVDS0VYQygoY29udiAhPSAoaWNvbnZfdCkoLTEpKSwgQlJMQVBJX0VSUk9SX0lOVkFMSURfUEFDS0VULCAiaW52YWxpZCBjaGFyc2V0Iik7CisgICAgICBzaXplX3QgcmVzID0gaWNvbnYoY29udiwmaW4sJnNpbiwmb3V0LCZzb3V0KTsKKyAgICAgIGljb252X2Nsb3NlKGNvbnYpOworCisgICAgICBDSEVDS0VYQygocmVzICE9IChzaXplX3QpLTEpLCBCUkxBUElfRVJST1JfSU5WQUxJRF9QQUNLRVQsICJpbnZhbGlkIGNoYXJzZXQgY29udmVyc2lvbiIpOworICAgICAgaWYgKCFmaWxsKSB7CisJQ0hFQ0tFWEMoIXNpbiwgQlJMQVBJX0VSUk9SX0lOVkFMSURfUEFDS0VULCAidGV4dCB0b28gYmlnIik7CisJQ0hFQ0tFWEMoIXNvdXQsIEJSTEFQSV9FUlJPUl9JTlZBTElEX1BBQ0tFVCwgInRleHQgdG9vIHNtYWxsIik7CisgICAgICB9IGVsc2UgeworCUNIRUNLRVhDKHNpbiB8fCAoIWFuZEF0dHIgJiYgIW9yQXR0cikgfHwgbGVuIC0gc291dCAvIHNpemVvZih3Y2hhcl90KSA9PSByc2l6LCBCUkxBUElfRVJST1JfSU5WQUxJRF9QQUNLRVQsICJ0ZXh0IGxlbmd0aCBkb2VzIG5vdCBtYXRjaCBhbmQvb3IgbWFzayBsZW5ndGgiKTsKKyAgICAgIH0KKyAgICAgIGxvZ0NvbnZlcnNpb25SZXN1bHQoYywgcnNpeiwgdGV4dExlbik7CisgICAgICBsZW4gLT0gc291dCAvIHNpemVvZih3Y2hhcl90KTsKKyAgICAgIGlmIChsZW4gPiBkaXNwbGF5U2l6ZSAtIHJiZWcgKyAxKQorCWxlbiA9IGRpc3BsYXlTaXplIC0gcmJlZyArIDE7CisKKyAgICAgIGxvY2tNdXRleCgmYy0+YnJhaWxsZVdpbmRvd011dGV4KTsKKyAgICAgIHdtZW1jcHkoYy0+YnJhaWxsZVdpbmRvdy50ZXh0K3JiZWctMSwgdGV4dEJ1ZiwgbGVuKTsKKyAgICAgIGVuZCA9IHJiZWctMSArIGxlbjsKKyAgICB9CisjZW5kaWYgLyogSEFWRV9JQ09OVl9IICovCisKKyAgICBlbHNlIHsKKyAgICAgIGxvZ0NvbnZlcnNpb25EZWNpc2lvbihjLCAiSVNPXzg4NTktMSIsIGlzTGF0aW4xID8gImludGVybmFsIGNvbnZlcnNpb24iIDogImFzc3VtZWQiKTsKKyAgICAgIHNpemVfdCBsZW4gPSB0ZXh0TGVuOworICAgICAgaWYgKCFmaWxsKSB7CisJQ0hFQ0tFWEMobGVuIDw9IHJzaXosIEJSTEFQSV9FUlJPUl9JTlZBTElEX1BBQ0tFVCwgInRleHQgdG9vIGJpZyIpOworCUNIRUNLRVhDKGxlbiA+PSByc2l6LCBCUkxBUElfRVJST1JfSU5WQUxJRF9QQUNLRVQsICJ0ZXh0IHRvbyBzbWFsbCIpOworICAgICAgfSBlbHNlIHsKKwlpZiAobGVuID4gcnNpel9maWxsZWQpCisJICBsZW4gPSByc2l6X2ZpbGxlZDsKKwllbHNlCisJICBDSEVDS0VYQygoIWFuZEF0dHIgJiYgIW9yQXR0cikgfHwgbGVuID09IHJzaXosIEJSTEFQSV9FUlJPUl9JTlZBTElEX1BBQ0tFVCwgInRleHQgbGVuZ3RoIGRvZXMgbm90IG1hdGNoIGFuZC9vciBtYXNrIGxlbmd0aCIpOworICAgICAgfQorICAgICAgbG9ja011dGV4KCZjLT5icmFpbGxlV2luZG93TXV0ZXgpOworICAgICAgY29udmVydEZyb21MYXRpbjEoYywgcmJlZywgbGVuLCB0ZXh0KTsKKyAgICAgIGVuZCA9IHJiZWctMSArIGxlbjsKKyAgICB9CisgICAgaWYgKGZpbGwpCisgICAgICB3bWVtc2V0KGMtPmJyYWlsbGVXaW5kb3cudGV4dCtlbmQsIEwnICcsIGRpc3BsYXlTaXplIC0gZW5kKTsKKworICAgIC8vIEZvcmdldCB0aGUgY2hhcnNldCBpbiBjYXNlIGl0J3MgcG9pbnRpbmcgdG8gYSBsb2NhbCBidWZmZXIuCisgICAgLy8gVGhpcyBvY2N1cnMgd2hlbiBnZXRDaGFyc2V0KCkgaXMgc2F2ZWQgYW5kIGFsbG9jYSgpIGlzbid0IGF2YWlsYWJsZS4KKyAgICBjaGFyc2V0ID0gTlVMTDsKKyAgICBjaGFyc2V0TGVuID0gMDsKKworICAgIGlmICghYW5kQXR0cikgbWVtc2V0KGMtPmJyYWlsbGVXaW5kb3cuYW5kQXR0cityYmVnLTEsMHhGRixyc2l6X2ZpbGxlZCk7CisgICAgaWYgKCFvckF0dHIpICBtZW1zZXQoYy0+YnJhaWxsZVdpbmRvdy5vckF0dHIrcmJlZy0xLDB4MDAscnNpel9maWxsZWQpOworICAgIGlmIChmaWxsKSAgICAgbWVtc2V0KGMtPmJyYWlsbGVXaW5kb3cuYW5kQXR0cityYmVnLTErcnNpeiwweDAwLHJzaXpfZmlsbGVkLXJzaXopOworICB9IGVsc2UgeworICAgIGxvY2tNdXRleCgmYy0+YnJhaWxsZVdpbmRvd011dGV4KTsKKyAgfQorCisgIGlmIChhbmRBdHRyKSB7CisgICAgbWVtY3B5KGMtPmJyYWlsbGVXaW5kb3cuYW5kQXR0cityYmVnLTEsYW5kQXR0cixyc2l6KTsKKyAgICBtZW1zZXQoYy0+YnJhaWxsZVdpbmRvdy5hbmRBdHRyK3JiZWctMStyc2l6LDBYMDAscnNpel9maWxsZWQtcnNpeik7CisgIH0KKyAgaWYgKG9yQXR0cikgeworICAgIG1lbWNweShjLT5icmFpbGxlV2luZG93Lm9yQXR0cityYmVnLTEsb3JBdHRyLHJzaXopOworICAgIG1lbXNldChjLT5icmFpbGxlV2luZG93Lm9yQXR0cityYmVnLTErcnNpeiwwWDAwLHJzaXpfZmlsbGVkLXJzaXopOworICB9CisgIGlmIChjdXJzb3IgPj0gMCkgYy0+YnJhaWxsZVdpbmRvdy5jdXJzb3IgPSBjdXJzb3I7CisKKyAgYy0+YnJsYnVmc3RhdGUgPSBUT0RJU1BMQVk7CisgIHVubG9ja011dGV4KCZjLT5icmFpbGxlV2luZG93TXV0ZXgpOworICBmbHVzaE91dHB1dCgpOworICByZXR1cm4gMDsKK30KKworc3RhdGljIGludCBjaGVja0RyaXZlclNwZWNpZmljTW9kZVBhY2tldChDb25uZWN0aW9uICpjLCBicmxhcGlfcGFja2V0X3QgKnBhY2tldCwgc2l6ZV90IHNpemUpCit7CisgIGJybGFwaV9nZXREcml2ZXJTcGVjaWZpY01vZGVQYWNrZXRfdCAqZ2V0RGV2aWNlUGFja2V0ID0gJnBhY2tldC0+Z2V0RHJpdmVyU3BlY2lmaWNNb2RlOworICBpbnQgcmVtYWluaW5nID0gc2l6ZTsKKyAgQ0hFQ0tFUlIocmVtYWluaW5nPnNpemVvZih1aW50MzJfdCksIEJSTEFQSV9FUlJPUl9JTlZBTElEX1BBQ0tFVCwgInBhY2tldCB0b28gc21hbGwiKTsKKyAgcmVtYWluaW5nIC09IHNpemVvZih1aW50MzJfdCk7CisgIENIRUNLRVJSKG50b2hsKGdldERldmljZVBhY2tldC0+bWFnaWMpPT1CUkxBUElfREVWSUNFX01BR0lDLEJSTEFQSV9FUlJPUl9JTlZBTElEX1BBUkFNRVRFUiwgIndyb25nIG1hZ2ljIG51bWJlciIpOworICByZW1haW5pbmctLTsKKyAgQ0hFQ0tFUlIoZ2V0RGV2aWNlUGFja2V0LT5uYW1lTGVuZ3RoPD1CUkxBUElfTUFYTkFNRUxFTkdUSCAmJiBnZXREZXZpY2VQYWNrZXQtPm5hbWVMZW5ndGggPT0gc3RybGVuKHRydWVCcmFpbGxlLT5kZWZpbml0aW9uLm5hbWUpLCBCUkxBUElfRVJST1JfSU5WQUxJRF9QQVJBTUVURVIsICJ3cm9uZyBkcml2ZXIgbGVuZ3RoIik7CisgIENIRUNLRVJSKHJlbWFpbmluZz09Z2V0RGV2aWNlUGFja2V0LT5uYW1lTGVuZ3RoLCBCUkxBUElfRVJST1JfSU5WQUxJRF9QQUNLRVQsICJ3cm9uZyBwYWNrZXQgc2l6ZSIpOworICBDSEVDS0VSUigoKCFzdHJuY21wKCZnZXREZXZpY2VQYWNrZXQtPm5hbWUsIHRydWVCcmFpbGxlLT5kZWZpbml0aW9uLm5hbWUsIHJlbWFpbmluZykpKSwgQlJMQVBJX0VSUk9SX0lOVkFMSURfUEFSQU1FVEVSLCAid3JvbmcgZHJpdmVyIG5hbWUiKTsKKyAgcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQgaGFuZGxlRW50ZXJSYXdNb2RlKENvbm5lY3Rpb24gKmMsIGJybGFwaV9wYWNrZXRUeXBlX3QgdHlwZSwgYnJsYXBpX3BhY2tldF90ICpwYWNrZXQsIHNpemVfdCBzaXplKQoreworICBDSEVDS0VSUighYy0+cmF3LCBCUkxBUElfRVJST1JfSUxMRUdBTF9JTlNUUlVDVElPTiwibm90IGFsbG93ZWQgaW4gcmF3IG1vZGUiKTsKKyAgaWYgKCFjaGVja0RyaXZlclNwZWNpZmljTW9kZVBhY2tldChjLCBwYWNrZXQsIHNpemUpKSByZXR1cm4gMDsKKyAgQ0hFQ0tFUlIoaXNSYXdDYXBhYmxlKHRydWVCcmFpbGxlKSwgQlJMQVBJX0VSUk9SX09QTk9UU1VQUCwgImRyaXZlciBkb2Vzbid0IHN1cHBvcnQgUmF3IG1vZGUiKTsKKyAgbG9ja011dGV4KCZhcGlSYXdNdXRleCk7CisgIGlmIChyYXdDb25uZWN0aW9uIHx8IHN1c3BlbmRDb25uZWN0aW9uKSB7CisgICAgV0VSUihjLT5mZCxCUkxBUElfRVJST1JfREVWSUNFQlVTWSwiZHJpdmVyIGJ1c3kgKCVzKSIsIHJhd0Nvbm5lY3Rpb24/InJhdyI6InN1c3BlbmQiKTsKKyAgICB1bmxvY2tNdXRleCgmYXBpUmF3TXV0ZXgpOworICAgIHJldHVybiAwOworICB9CisgIHJhd0Nvbm5lY3Rpb24gPSBjOworICB1bmxvY2tNdXRleCgmYXBpUmF3TXV0ZXgpOworICBpZiAoIXJlc3VtZURyaXZlcigpKSB7CisgICAgV0VSUihjLT5mZCwgQlJMQVBJX0VSUk9SX0RSSVZFUkVSUk9SLCJkcml2ZXIgcmVzdW1lIGVycm9yIik7CisgICAgcmV0dXJuIDA7CisgIH0KKyAgYy0+cmF3ID0gMTsKKyAgd3JpdGVBY2soYy0+ZmQpOworICByZXR1cm4gMDsKK30KKworc3RhdGljIGludCBoYW5kbGVMZWF2ZVJhd01vZGUoQ29ubmVjdGlvbiAqYywgYnJsYXBpX3BhY2tldFR5cGVfdCB0eXBlLCBicmxhcGlfcGFja2V0X3QgKnBhY2tldCwgc2l6ZV90IHNpemUpCit7CisgIENIRUNLRVJSKGMtPnJhdyxCUkxBUElfRVJST1JfSUxMRUdBTF9JTlNUUlVDVElPTiwibm90IGFsbG93ZWQgb3V0IG9mIHJhdyBtb2RlIik7CisgIGxvZ01lc3NhZ2UoTE9HX0NBVEVHT1JZKFNFUlZFUl9FVkVOVFMpLCAiZmQgJSJQUklmZCIgZ29pbmcgb3V0IG9mIHJhdyBtb2RlIixjLT5mZCk7CisgIGMtPnJhdyA9IDA7CisgIGxvY2tNdXRleCgmYXBpUmF3TXV0ZXgpOworICByYXdDb25uZWN0aW9uID0gTlVMTDsKKyAgdW5sb2NrTXV0ZXgoJmFwaVJhd011dGV4KTsKKyAgd3JpdGVBY2soYy0+ZmQpOworICByZXR1cm4gMDsKK30KKworc3RhdGljIGludCBoYW5kbGVQYWNrZXQoQ29ubmVjdGlvbiAqYywgYnJsYXBpX3BhY2tldFR5cGVfdCB0eXBlLCBicmxhcGlfcGFja2V0X3QgKnBhY2tldCwgc2l6ZV90IHNpemUpCit7CisgIENIRUNLRVhDKGMtPnJhdyxCUkxBUElfRVJST1JfSUxMRUdBTF9JTlNUUlVDVElPTiwibm90IGFsbG93ZWQgb3V0IG9mIHJhdyBtb2RlIik7CisgIGxvY2tNdXRleCgmYXBpRHJpdmVyTXV0ZXgpOworICB0cnVlQnJhaWxsZS0+d3JpdGVQYWNrZXQoZGlzcCwmcGFja2V0LT5kYXRhLHNpemUpOworICB1bmxvY2tNdXRleCgmYXBpRHJpdmVyTXV0ZXgpOworICByZXR1cm4gMDsKK30KKworc3RhdGljIGludCBoYW5kbGVTdXNwZW5kRHJpdmVyKENvbm5lY3Rpb24gKmMsIGJybGFwaV9wYWNrZXRUeXBlX3QgdHlwZSwgYnJsYXBpX3BhY2tldF90ICpwYWNrZXQsIHNpemVfdCBzaXplKQoreworICBpZiAoIWNoZWNrRHJpdmVyU3BlY2lmaWNNb2RlUGFja2V0KGMsIHBhY2tldCwgc2l6ZSkpIHJldHVybiAwOworICBDSEVDS0VSUighYy0+c3VzcGVuZCxCUkxBUElfRVJST1JfSUxMRUdBTF9JTlNUUlVDVElPTiwgIm5vdCBhbGxvd2VkIGluIHN1c3BlbmQgbW9kZSIpOworICBsb2NrTXV0ZXgoJmFwaVJhd011dGV4KTsKKyAgaWYgKHN1c3BlbmRDb25uZWN0aW9uIHx8IHJhd0Nvbm5lY3Rpb24pIHsKKyAgICBXRVJSKGMtPmZkLCBCUkxBUElfRVJST1JfREVWSUNFQlVTWSwiZHJpdmVyIGJ1c3kgKCVzKSIsIHJhd0Nvbm5lY3Rpb24/InJhdyI6InN1c3BlbmQiKTsKKyAgICB1bmxvY2tNdXRleCgmYXBpUmF3TXV0ZXgpOworICAgIHJldHVybiAwOworICB9CisgIHN1c3BlbmRDb25uZWN0aW9uID0gYzsKKyAgdW5sb2NrTXV0ZXgoJmFwaVJhd011dGV4KTsKKyAgYy0+c3VzcGVuZCA9IDE7CisgIHN1c3BlbmREcml2ZXIoKTsKKyAgd3JpdGVBY2soYy0+ZmQpOworICByZXR1cm4gMDsKK30KKworc3RhdGljIGludCBoYW5kbGVSZXN1bWVEcml2ZXIoQ29ubmVjdGlvbiAqYywgYnJsYXBpX3BhY2tldFR5cGVfdCB0eXBlLCBicmxhcGlfcGFja2V0X3QgKnBhY2tldCwgc2l6ZV90IHNpemUpCit7CisgIENIRUNLRVJSKGMtPnN1c3BlbmQsQlJMQVBJX0VSUk9SX0lMTEVHQUxfSU5TVFJVQ1RJT04sICJub3QgYWxsb3dlZCBvdXQgb2Ygc3VzcGVuZCBtb2RlIik7CisgIGMtPnN1c3BlbmQgPSAwOworICBsb2NrTXV0ZXgoJmFwaVJhd011dGV4KTsKKyAgc3VzcGVuZENvbm5lY3Rpb24gPSBOVUxMOworICB1bmxvY2tNdXRleCgmYXBpUmF3TXV0ZXgpOworICByZXN1bWVEcml2ZXIoKTsKKyAgd3JpdGVBY2soYy0+ZmQpOworICByZXR1cm4gMDsKK30KKworc3RhdGljIGJybGFwaV9rZXlDb2RlX3QgbWFrZURyaXZlcktleUNvZGUgKEtleUdyb3VwIGdyb3VwLCBLZXlOdW1iZXIgbnVtYmVyLCBpbnQgcHJlc3MpCit7CisgIGJybGFwaV9rZXlDb2RlX3QgY29kZSA9CisgICAgKChncm91cCA8PCBCUkxBUElfRFJWX0tFWV9HUk9VUF9TSElGVCkgJiBCUkxBUElfRFJWX0tFWV9HUk9VUF9NQVNLKSB8CisgICAgKChudW1iZXIgPDwgQlJMQVBJX0RSVl9LRVlfTlVNQkVSX1NISUZUKSAmIEJSTEFQSV9EUlZfS0VZX05VTUJFUl9NQVNLKTsKKworICBpZiAocHJlc3MpIGNvZGUgfD0gQlJMQVBJX0RSVl9LRVlfUFJFU1M7CisgIHJldHVybiBjb2RlOworfQorCisvKiBPbiBzdWNjZXNzLCB0aGlzIHNob3VsZCBmaWxsICdkYXRhJywgYWRqdXN0ICdzaXplJywgYW5kIHJldHVybiBOVUxMLgorICogT24gZmFpbHVyZSwgdGhpcyBzaG91bGQgcmV0dXJuIGEgbm9uLWFsbG9jYXRlZCBlcnJvciBtZXNzYWdlIHN0cmluZy4gKi8KKyNkZWZpbmUgUEFSQU1fUkVBREVSX0RFQ0xBUkFUSU9OKG5hbWUpIGNvbnN0IGNoYXIgKm5hbWUgKENvbm5lY3Rpb24gKmMsIGJybGFwaV9wYXJhbV90IHBhcmFtZXRlciwgYnJsYXBpX3BhcmFtX3N1YnBhcmFtX3Qgc3VicGFyYW0sIGJybGFwaV9wYXJhbV9mbGFnc190IGZsYWdzLCB2b2lkICpkYXRhLCBzaXplX3QgKnNpemUpCit0eXBlZGVmIFBBUkFNX1JFQURFUl9ERUNMQVJBVElPTihQYXJhbVJlYWRlcik7CisjZGVmaW5lIFBBUkFNX1JFQURFUihuYW1lKSBzdGF0aWMgUEFSQU1fUkVBREVSX0RFQ0xBUkFUSU9OKHBhcmFtXyAjIyBuYW1lICMjIF9yZWFkKQorCisvKiBPbiBzdWNjZXNzLCB0aGlzIHNob3VsZCByZXR1cm4gTlVMTC4KKyAqIE9uIGZhaWx1cmUsIHRoaXMgc2hvdWxkIHJldHVybiBhIG5vbi1hbGxvY2F0ZWQgZXJyb3IgbWVzc2FnZSBzdHJpbmcuICovCisjZGVmaW5lIFBBUkFNX1dSSVRFUl9ERUNMQVJBVElPTihuYW1lKSBjb25zdCBjaGFyICpuYW1lIChDb25uZWN0aW9uICpjLCBicmxhcGlfcGFyYW1fdCBwYXJhbWV0ZXIsIGJybGFwaV9wYXJhbV9zdWJwYXJhbV90IHN1YnBhcmFtLCBicmxhcGlfcGFyYW1fZmxhZ3NfdCBmbGFncywgY29uc3Qgdm9pZCAqZGF0YSwgc2l6ZV90IHNpemUpCit0eXBlZGVmIFBBUkFNX1dSSVRFUl9ERUNMQVJBVElPTihQYXJhbVdyaXRlcik7CisjZGVmaW5lIFBBUkFNX1dSSVRFUihuYW1lKSBzdGF0aWMgUEFSQU1fV1JJVEVSX0RFQ0xBUkFUSU9OKHBhcmFtXyAjIyBuYW1lICMjIF93cml0ZSkKKworI2RlZmluZSBQQVJBTV9BU1NFUlQoY29uZGl0aW9uKSBcCitkbyB7IFwKKyAgaWYgKCEoY29uZGl0aW9uKSkgcmV0dXJuICJhc3NlcnRpb24gZmFpbGVkOiAiICNjb25kaXRpb247IFwKK30gd2hpbGUgKDApCisKKyNkZWZpbmUgUEFSQU1fQVNTRVJUX1NJWkUocG9pbnRlcikgUEFSQU1fQVNTRVJUKHNpemUgPT0gc2l6ZW9mKCpwb2ludGVyKSkKKworc3RhdGljIHZvaWQgcGFyYW1fcmVhZFN0cmluZyhjb25zdCBjaGFyICpzdHJpbmcsIHZvaWQgKmRhdGEsIHNpemVfdCAqc2l6ZSkKK3sKKyAgaWYgKCFzdHJpbmcpIHN0cmluZyA9ICIiOworICBzaXplX3QgbGVuZ3RoID0gc3RybGVuKHN0cmluZyk7CisgIGlmIChsZW5ndGggPCAqc2l6ZSkgKnNpemUgPSBsZW5ndGg7CisgIG1lbWNweShkYXRhLCBzdHJpbmcsICpzaXplKTsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgKnBhcmFtX3dyaXRlU3RyaW5nKGludCAoKmhhbmRsZXIpIChjb25zdCBjaGFyICpzdHJpbmcpLCBjb25zdCB2b2lkICpkYXRhLCBzaXplX3Qgc2l6ZSkKK3sKKyAgY2hhciBzdHJpbmdbc2l6ZSArIDFdOworICBtZW1jcHkoc3RyaW5nLCBkYXRhLCBzaXplKTsKKyAgc3RyaW5nW3NpemVdID0gMDsKKworICBpZiAoaGFuZGxlcihzdHJpbmcpKSByZXR1cm4gTlVMTDsKKyAgcmV0dXJuICJzZXQgc3RyaW5nIHBhcmFtZXRlciBmYWlsZWQiOworfQorCisvKiBCUkxBUElfUEFSQU1fU0VSVkVSX1ZFUlNJT04gKi8KK1BBUkFNX1JFQURFUihzZXJ2ZXJWZXJzaW9uKQoreworICBicmxhcGlfcGFyYW1fc2VydmVyVmVyc2lvbl90ICpzZXJ2ZXJWZXJzaW9uID0gZGF0YTsKKyAgKnNpemUgPSBzaXplb2YoKnNlcnZlclZlcnNpb24pOworICAqc2VydmVyVmVyc2lvbiA9IEJSTEFQSV9QUk9UT0NPTF9WRVJTSU9OOworICByZXR1cm4gTlVMTDsKK30KKworLyogQlJMQVBJX1BBUkFNX0NMSUVOVF9QUklPUklUWSAqLworUEFSQU1fUkVBREVSKGNsaWVudFByaW9yaXR5KQoreworICBicmxhcGlfcGFyYW1fY2xpZW50UHJpb3JpdHlfdCAqY2xpZW50UHJpb3JpdHkgPSBkYXRhOworICAqc2l6ZSA9IHNpemVvZigqY2xpZW50UHJpb3JpdHkpOworICAqY2xpZW50UHJpb3JpdHkgPSBjLT5jbGllbnRfcHJpb3JpdHk7CisgIHJldHVybiBOVUxMOworfQorCitQQVJBTV9XUklURVIoY2xpZW50UHJpb3JpdHkpCit7CisgIGNvbnN0IGJybGFwaV9wYXJhbV9jbGllbnRQcmlvcml0eV90ICpjbGllbnRQcmlvcml0eSA9IGRhdGE7CisgIFBBUkFNX0FTU0VSVF9TSVpFKGNsaWVudFByaW9yaXR5KTsKKworICBsb2NrTXV0ZXgoJmFwaUNvbm5lY3Rpb25zTXV0ZXgpOworICAgIGMtPmNsaWVudF9wcmlvcml0eSA9ICpjbGllbnRQcmlvcml0eTsKKworICAgIGlmIChjLT50dHkpIHsKKyAgICAgIF9fcmVtb3ZlQ29ubmVjdGlvbihjKTsKKyAgICAgIF9fYWRkQ29ubmVjdGlvblNvcnRlZChjLGMtPnR0eS0+Y29ubmVjdGlvbnMpOworICAgIH0KKyAgdW5sb2NrTXV0ZXgoJmFwaUNvbm5lY3Rpb25zTXV0ZXgpOworCisgIHJldHVybiBOVUxMOworfQorCisvKiBCUkxBUElfUEFSQU1fRFJJVkVSX05BTUUgKi8KK1BBUkFNX1JFQURFUihkcml2ZXJOYW1lKQoreworICBsb2NrQnJhaWxsZURyaXZlcigpOworICAgIGlmIChpc0JyYWlsbGVEcml2ZXJDb25zdHJ1Y3RlZCgpKSB7CisgICAgICBwYXJhbV9yZWFkU3RyaW5nKGJyYWlsbGUtPmRlZmluaXRpb24ubmFtZSwgZGF0YSwgc2l6ZSk7CisgICAgfSBlbHNlIHsKKyAgICAgICpzaXplID0gMDsKKyAgICB9CisgIHVubG9ja0JyYWlsbGVEcml2ZXIoKTsKKworICByZXR1cm4gTlVMTDsKK30KKworLyogQlJMQVBJX1BBUkFNX0RSSVZFUl9DT0RFICovCitQQVJBTV9SRUFERVIoZHJpdmVyQ29kZSkKK3sKKyAgbG9ja0JyYWlsbGVEcml2ZXIoKTsKKyAgICBpZiAoaXNCcmFpbGxlRHJpdmVyQ29uc3RydWN0ZWQoKSkgeworICAgICAgcGFyYW1fcmVhZFN0cmluZyhicmFpbGxlLT5kZWZpbml0aW9uLmNvZGUsIGRhdGEsIHNpemUpOworICAgIH0gZWxzZSB7CisgICAgICAqc2l6ZSA9IDA7CisgICAgfQorICB1bmxvY2tCcmFpbGxlRHJpdmVyKCk7CisKKyAgcmV0dXJuIE5VTEw7Cit9CisKKy8qIEJSTEFQSV9QQVJBTV9EUklWRVJfVkVSU0lPTiAqLworUEFSQU1fUkVBREVSKGRyaXZlclZlcnNpb24pCit7CisgIGxvY2tCcmFpbGxlRHJpdmVyKCk7CisgICAgaWYgKGlzQnJhaWxsZURyaXZlckNvbnN0cnVjdGVkKCkpIHsKKyAgICAgIHBhcmFtX3JlYWRTdHJpbmcoYnJhaWxsZS0+ZGVmaW5pdGlvbi52ZXJzaW9uLCBkYXRhLCBzaXplKTsKKyAgICB9IGVsc2UgeworICAgICAgKnNpemUgPSAwOworICAgIH0KKyAgdW5sb2NrQnJhaWxsZURyaXZlcigpOworCisgIHJldHVybiBOVUxMOworfQorCisvKiBCUkxBUElfUEFSQU1fREVWSUNFX01PREVMICovCitQQVJBTV9SRUFERVIoZGV2aWNlTW9kZWwpCit7CisgIGxvY2tCcmFpbGxlRHJpdmVyKCk7CisgICAgaWYgKGlzQnJhaWxsZURyaXZlckNvbnN0cnVjdGVkKCkpIHsKKyAgICAgIGNvbnN0IGNoYXIgKmRldmljZU1vZGVsID0gYnJsLmtleUJpbmRpbmdzOworCisgICAgICBpZiAoZGV2aWNlTW9kZWwpIHsKKyAgICAgICAgcGFyYW1fcmVhZFN0cmluZyhkZXZpY2VNb2RlbCwgZGF0YSwgc2l6ZSk7CisgICAgICAgIGdvdG8gdW5sb2NrOworICAgICAgfQorICAgIH0KKworICAgICpzaXplID0gMDsKK3VubG9jazoKKyAgdW5sb2NrQnJhaWxsZURyaXZlcigpOworCisgIHJldHVybiBOVUxMOworfQorCisvKiBCUkxBUElfUEFSQU1fREVWSUNFX0NFTExfU0laRSAqLworUEFSQU1fUkVBREVSKGRldmljZUNlbGxTaXplKQoreworICBicmxhcGlfcGFyYW1fZGV2aWNlQ2VsbFNpemVfdCAqZGV2aWNlQ2VsbFNpemUgPSBkYXRhOworICAqc2l6ZSA9IHNpemVvZigqZGV2aWNlQ2VsbFNpemUpOworCisgIGxvY2tCcmFpbGxlRHJpdmVyKCk7CisgICAgaWYgKGlzQnJhaWxsZURyaXZlckNvbnN0cnVjdGVkKCkpIHsKKyAgICAgICpkZXZpY2VDZWxsU2l6ZSA9IGJybC5jZWxsU2l6ZTsKKyAgICB9IGVsc2UgeworICAgICAgKmRldmljZUNlbGxTaXplID0gMDsKKyAgICB9CisgIHVubG9ja0JyYWlsbGVEcml2ZXIoKTsKKworICByZXR1cm4gTlVMTDsKK30KKworLyogQlJMQVBJX1BBUkFNX0RJU1BMQVlfU0laRSAqLworUEFSQU1fUkVBREVSKGRpc3BsYXlTaXplKQoreworICBicmxhcGlfcGFyYW1fZGlzcGxheVNpemVfdCAqZGlzcGxheVNpemUgPSBkYXRhOworICAqc2l6ZSA9IHNpemVvZigqZGlzcGxheVNpemUpOworCisgIGxvY2tCcmFpbGxlRHJpdmVyKCk7CisgICAgaWYgKGlzQnJhaWxsZURyaXZlckNvbnN0cnVjdGVkKCkpIHsKKyAgICAgIGRpc3BsYXlTaXplLT5jb2x1bW5zID0gYnJsLnRleHRDb2x1bW5zOworICAgICAgZGlzcGxheVNpemUtPnJvd3MgPSBicmwudGV4dFJvd3M7CisgICAgfSBlbHNlIHsKKyAgICAgIGRpc3BsYXlTaXplLT5jb2x1bW5zID0gMDsKKyAgICAgIGRpc3BsYXlTaXplLT5yb3dzID0gMDsKKyAgICB9CisgIHVubG9ja0JyYWlsbGVEcml2ZXIoKTsKKworICByZXR1cm4gTlVMTDsKK30KKworLyogQlJMQVBJX1BBUkFNX0RFVklDRV9JREVOVElGSUVSICovCitQQVJBTV9SRUFERVIoZGV2aWNlSWRlbnRpZmllcikKK3sKKyAgbG9ja0JyYWlsbGVEcml2ZXIoKTsKKyAgICBpZiAoaXNCcmFpbGxlRHJpdmVyQ29uc3RydWN0ZWQoKSkgeworICAgICAgR2lvRW5kcG9pbnQgKmVuZHBvaW50ID0gYnJsLmdpb0VuZHBvaW50OworCisgICAgICBpZiAoZW5kcG9pbnQpIHsKKyAgICAgICAgZ2lvTWFrZVJlc291cmNlSWRlbnRpZmllcihlbmRwb2ludCwgZGF0YSwgKnNpemUpOworICAgICAgICAqc2l6ZSA9IHN0cmxlbihkYXRhKTsKKyAgICAgICAgZ290byB1bmxvY2s7CisgICAgICB9CisgICAgfQorCisgICAgKnNpemUgPSAwOwordW5sb2NrOgorICB1bmxvY2tCcmFpbGxlRHJpdmVyKCk7CisKKyAgcmV0dXJuIE5VTEw7Cit9CisKKy8qIEJSTEFQSV9QQVJBTV9ERVZJQ0VfU1BFRUQgKi8KK1BBUkFNX1JFQURFUihkZXZpY2VTcGVlZCkKK3sKKyAgYnJsYXBpX3BhcmFtX2RldmljZVNwZWVkX3QgKmRldmljZVNwZWVkID0gZGF0YTsKKyAgKnNpemUgPSBzaXplb2YoKmRldmljZVNwZWVkKTsKKyAgKmRldmljZVNwZWVkID0gMDsKKworICBsb2NrQnJhaWxsZURyaXZlcigpOworICAgIGlmIChpc0JyYWlsbGVEcml2ZXJDb25zdHJ1Y3RlZCgpKSB7CisgICAgICBHaW9FbmRwb2ludCAqZW5kcG9pbnQgPSBicmwuZ2lvRW5kcG9pbnQ7CisKKyAgICAgIGlmIChlbmRwb2ludCkgeworICAgICAgICAqZGV2aWNlU3BlZWQgPSBnaW9HZXRCeXRlc1BlclNlY29uZChlbmRwb2ludCk7CisgICAgICB9CisgICAgfQorICB1bmxvY2tCcmFpbGxlRHJpdmVyKCk7CisKKyAgcmV0dXJuIE5VTEw7Cit9CisKKy8qIEJSTEFQSV9QQVJBTV9ERVZJQ0VfT05MSU5FICovCitQQVJBTV9SRUFERVIoZGV2aWNlT25saW5lKQoreworICBicmxhcGlfcGFyYW1fZGV2aWNlT25saW5lX3QgKmRldmljZU9ubGluZSA9IGRhdGE7CisgICpzaXplID0gc2l6ZW9mKCpkZXZpY2VPbmxpbmUpOworCisgIGxvY2tCcmFpbGxlRHJpdmVyKCk7CisgICAgKmRldmljZU9ubGluZSA9IGlzQnJhaWxsZU9ubGluZSgpOworICB1bmxvY2tCcmFpbGxlRHJpdmVyKCk7CisKKyAgcmV0dXJuIE5VTEw7Cit9CisKKy8qIEJSTEFQSV9QQVJBTV9SRVRBSU5fRE9UUyAqLworUEFSQU1fUkVBREVSKHJldGFpbkRvdHMpCit7CisgIGJybGFwaV9wYXJhbV9yZXRhaW5Eb3RzX3QgKnJldGFpbkRvdHMgPSBkYXRhOworICAqc2l6ZSA9IHNpemVvZigqcmV0YWluRG90cyk7CisgICpyZXRhaW5Eb3RzID0gYy0+cmV0YWluRG90czsKKyAgcmV0dXJuIE5VTEw7Cit9CisKK1BBUkFNX1dSSVRFUihyZXRhaW5Eb3RzKQoreworICBjb25zdCBicmxhcGlfcGFyYW1fcmV0YWluRG90c190ICpyZXRhaW5Eb3RzID0gZGF0YTsKKyAgUEFSQU1fQVNTRVJUX1NJWkUocmV0YWluRG90cyk7CisgIGMtPnJldGFpbkRvdHMgPSAqcmV0YWluRG90czsKKyAgcmV0dXJuIE5VTEw7Cit9CisKKy8qIEJSTEFQSV9QQVJBTV9DT01QVVRFUl9CUkFJTExFX0NFTExfU0laRSAqLworUEFSQU1fUkVBREVSKGNvbXB1dGVyQnJhaWxsZUNlbGxTaXplKQoreworICBicmxhcGlfcGFyYW1fY29tcHV0ZXJCcmFpbGxlQ2VsbFNpemVfdCAqY29tcHV0ZXJCcmFpbGxlQ2VsbFNpemUgPSBkYXRhOworICAqc2l6ZSA9IHNpemVvZigqY29tcHV0ZXJCcmFpbGxlQ2VsbFNpemUpOworICAqY29tcHV0ZXJCcmFpbGxlQ2VsbFNpemUgPSBpc1NpeERvdENvbXB1dGVyQnJhaWxsZSgpPyA2OiA4OworICByZXR1cm4gTlVMTDsKK30KKworUEFSQU1fV1JJVEVSKGNvbXB1dGVyQnJhaWxsZUNlbGxTaXplKQoreworICBjb25zdCBicmxhcGlfcGFyYW1fY29tcHV0ZXJCcmFpbGxlQ2VsbFNpemVfdCAqY29tcHV0ZXJCcmFpbGxlQ2VsbFNpemUgPSBkYXRhOworICBQQVJBTV9BU1NFUlRfU0laRShjb21wdXRlckJyYWlsbGVDZWxsU2l6ZSk7CisKKyAgc2V0U2l4RG90Q29tcHV0ZXJCcmFpbGxlKCpjb21wdXRlckJyYWlsbGVDZWxsU2l6ZSA8PSA2KTsKKyAgcmV0dXJuIE5VTEw7Cit9CisKKy8qIEJSTEFQSV9QQVJBTV9MSVRFUkFSWV9CUkFJTExFICovCitQQVJBTV9SRUFERVIobGl0ZXJhcnlCcmFpbGxlKQoreworICBicmxhcGlfcGFyYW1fbGl0ZXJhcnlCcmFpbGxlX3QgKmxpdGVyYXJ5QnJhaWxsZSA9IGRhdGE7CisgICpzaXplID0gc2l6ZW9mKCpsaXRlcmFyeUJyYWlsbGUpOworICAqbGl0ZXJhcnlCcmFpbGxlID0gaXNDb250cmFjdGVkQnJhaWxsZSgpOworICByZXR1cm4gTlVMTDsKK30KKworUEFSQU1fV1JJVEVSKGxpdGVyYXJ5QnJhaWxsZSkKK3sKKyAgY29uc3QgYnJsYXBpX3BhcmFtX2xpdGVyYXJ5QnJhaWxsZV90ICpsaXRlcmFyeUJyYWlsbGUgPSBkYXRhOworICBQQVJBTV9BU1NFUlRfU0laRShsaXRlcmFyeUJyYWlsbGUpOworICBzZXRDb250cmFjdGVkQnJhaWxsZSgqbGl0ZXJhcnlCcmFpbGxlKTsKKyAgcmV0dXJuIE5VTEw7Cit9CisKKy8qIEJSTEFQSV9QQVJBTV9DVVJTT1JfRE9UUyAqLworUEFSQU1fUkVBREVSKGN1cnNvckRvdHMpCit7CisgIGJybGFwaV9wYXJhbV9jdXJzb3JEb3RzX3QgKmN1cnNvckRvdHMgPSBkYXRhOworICAqc2l6ZSA9IHNpemVvZigqY3Vyc29yRG90cyk7CisgICpjdXJzb3JEb3RzID0gZ2V0U2NyZWVuQ3Vyc29yRG90cygpOworICByZXR1cm4gTlVMTDsKK30KKworUEFSQU1fV1JJVEVSKGN1cnNvckRvdHMpCit7CisgIGNvbnN0IGJybGFwaV9wYXJhbV9jdXJzb3JEb3RzX3QgKmN1cnNvckRvdHMgPSBkYXRhOworICBQQVJBTV9BU1NFUlRfU0laRShjdXJzb3JEb3RzKTsKKyAgaWYgKCFzZXRTY3JlZW5DdXJzb3JEb3RzKCpjdXJzb3JEb3RzKSkgcmV0dXJuICJ1bnN1cHBvcnRlZCBjdXJzb3Igc3R5bGUiOworICByZXR1cm4gTlVMTDsKK30KKworLyogQlJMQVBJX1BBUkFNX0NVUlNPUl9CTElOS19QRVJJT0QgKi8KK1BBUkFNX1JFQURFUihjdXJzb3JCbGlua1BlcmlvZCkKK3sKKyAgYnJsYXBpX3BhcmFtX2N1cnNvckJsaW5rUGVyaW9kX3QgKmN1cnNvckJsaW5rUGVyaW9kID0gZGF0YTsKKyAgKnNpemUgPSBzaXplb2YoKmN1cnNvckJsaW5rUGVyaW9kKTsKKyAgKmN1cnNvckJsaW5rUGVyaW9kID0gZ2V0QmxpbmtQZXJpb2QoJnNjcmVlbkN1cnNvckJsaW5rRGVzY3JpcHRvcik7CisgIHJldHVybiBOVUxMOworfQorCitQQVJBTV9XUklURVIoY3Vyc29yQmxpbmtQZXJpb2QpCit7CisgIGNvbnN0IGJybGFwaV9wYXJhbV9jdXJzb3JCbGlua1BlcmlvZF90ICpjdXJzb3JCbGlua1BlcmlvZCA9IGRhdGE7CisgIFBBUkFNX0FTU0VSVF9TSVpFKGN1cnNvckJsaW5rUGVyaW9kKTsKKyAgaWYgKCFzZXRCbGlua1BlcmlvZCgmc2NyZWVuQ3Vyc29yQmxpbmtEZXNjcmlwdG9yLCAqY3Vyc29yQmxpbmtQZXJpb2QpKSByZXR1cm4gInVuc3VwcG9ydGVkIGN1cnNvciBibGluayBwZXJpb2QiOworICByZXR1cm4gTlVMTDsKK30KKworLyogQlJMQVBJX1BBUkFNX0NVUlNPUl9CTElOS19QRVJDRU5UQUdFICovCitQQVJBTV9SRUFERVIoY3Vyc29yQmxpbmtQZXJjZW50YWdlKQoreworICBicmxhcGlfcGFyYW1fY3Vyc29yQmxpbmtQZXJjZW50YWdlX3QgKmN1cnNvckJsaW5rUGVyY2VudGFnZSA9IGRhdGE7CisgICpzaXplID0gc2l6ZW9mKCpjdXJzb3JCbGlua1BlcmNlbnRhZ2UpOworICAqY3Vyc29yQmxpbmtQZXJjZW50YWdlID0gZ2V0QmxpbmtQZXJjZW50VmlzaWJsZSgmc2NyZWVuQ3Vyc29yQmxpbmtEZXNjcmlwdG9yKTsKKyAgcmV0dXJuIE5VTEw7Cit9CisKK1BBUkFNX1dSSVRFUihjdXJzb3JCbGlua1BlcmNlbnRhZ2UpCit7CisgIGNvbnN0IGJybGFwaV9wYXJhbV9jdXJzb3JCbGlua1BlcmNlbnRhZ2VfdCAqY3Vyc29yQmxpbmtQZXJjZW50YWdlID0gZGF0YTsKKyAgUEFSQU1fQVNTRVJUX1NJWkUoY3Vyc29yQmxpbmtQZXJjZW50YWdlKTsKKyAgaWYgKCFzZXRCbGlua1BlcmNlbnRWaXNpYmxlKCZzY3JlZW5DdXJzb3JCbGlua0Rlc2NyaXB0b3IsICpjdXJzb3JCbGlua1BlcmNlbnRhZ2UpKSByZXR1cm4gInVuc3VwcG9ydGVkIGN1cnNvciBibGluayBwZXJjZW50YWdlIjsKKyAgcmV0dXJuIE5VTEw7Cit9CisKKy8qIEJSTEFQSV9QQVJBTV9SRU5ERVJFRF9DRUxMUyAqLworUEFSQU1fUkVBREVSKHJlbmRlcmVkQ2VsbHMpCit7CisgIGxvY2tNdXRleCgmYXBpRHJpdmVyTXV0ZXgpOworICAgIGlmIChkaXNwICYmIGMtPmJyYWlsbGVXaW5kb3cudGV4dCkgeworICAgICAgdW5zaWduZWQgY2hhciBidWZmZXJbZGlzcGxheVNpemVdOworICAgICAgZ2V0RG90cygmYy0+YnJhaWxsZVdpbmRvdywgYnVmZmVyKTsKKworICAgICAgaWYgKGRpc3BsYXlTaXplIDwgKnNpemUpICpzaXplID0gZGlzcGxheVNpemU7CisgICAgICBtZW1jcHkoZGF0YSwgYnVmZmVyLCAqc2l6ZSk7CisgICAgfSBlbHNlIHsKKyAgICAgICpzaXplID0gMDsKKyAgICB9CisgIHVubG9ja011dGV4KCZhcGlEcml2ZXJNdXRleCk7CisKKyAgcmV0dXJuIE5VTEw7Cit9CisKKy8qIEJSTEFQSV9QQVJBTV9TS0lQX0lERU5USUNBTF9MSU5FUyAqLworUEFSQU1fUkVBREVSKHNraXBJZGVudGljYWxMaW5lcykKK3sKKyAgYnJsYXBpX3BhcmFtX3NraXBJZGVudGljYWxMaW5lc190ICpza2lwSWRlbnRpY2FsTGluZXMgPSBkYXRhOworICAqc2l6ZSA9IHNpemVvZigqc2tpcElkZW50aWNhbExpbmVzKTsKKyAgKnNraXBJZGVudGljYWxMaW5lcyA9ICEhcHJlZnMuc2tpcElkZW50aWNhbExpbmVzOworICByZXR1cm4gTlVMTDsKK30KKworUEFSQU1fV1JJVEVSKHNraXBJZGVudGljYWxMaW5lcykKK3sKKyAgY29uc3QgYnJsYXBpX3BhcmFtX3NraXBJZGVudGljYWxMaW5lc190ICpza2lwSWRlbnRpY2FsTGluZXMgPSBkYXRhOworICBQQVJBTV9BU1NFUlRfU0laRShza2lwSWRlbnRpY2FsTGluZXMpOworICBwcmVmcy5za2lwSWRlbnRpY2FsTGluZXMgPSAhISpza2lwSWRlbnRpY2FsTGluZXM7CisgIGFwaV91cGRhdGVQYXJhbWV0ZXIoQlJMQVBJX1BBUkFNX1NLSVBfSURFTlRJQ0FMX0xJTkVTLCAwKTsKKyAgcmV0dXJuIE5VTEw7Cit9CisKKy8qIEJSTEFQSV9QQVJBTV9BVURJQkxFX0FMRVJUUyAqLworUEFSQU1fUkVBREVSKGF1ZGlibGVBbGVydHMpCit7CisgIGJybGFwaV9wYXJhbV9hdWRpYmxlQWxlcnRzX3QgKmF1ZGlibGVBbGVydHMgPSBkYXRhOworICAqc2l6ZSA9IHNpemVvZigqYXVkaWJsZUFsZXJ0cyk7CisgICphdWRpYmxlQWxlcnRzID0gISFwcmVmcy5hbGVydFR1bmVzOworICByZXR1cm4gTlVMTDsKK30KKworUEFSQU1fV1JJVEVSKGF1ZGlibGVBbGVydHMpCit7CisgIGNvbnN0IGJybGFwaV9wYXJhbV9hdWRpYmxlQWxlcnRzX3QgKmF1ZGlibGVBbGVydHMgPSBkYXRhOworICBQQVJBTV9BU1NFUlRfU0laRShhdWRpYmxlQWxlcnRzKTsKKyAgcHJlZnMuYWxlcnRUdW5lcyA9ICEhKmF1ZGlibGVBbGVydHM7CisgIGFwaV91cGRhdGVQYXJhbWV0ZXIoQlJMQVBJX1BBUkFNX0FVRElCTEVfQUxFUlRTLCAwKTsKKyAgcmV0dXJuIE5VTEw7Cit9CisKKy8qIEJSTEFQSV9QQVJBTV9DTElQQk9BUkRfQ09OVEVOVCAqLworUEFSQU1fUkVBREVSKGNsaXBib2FyZENvbnRlbnQpCit7CisgIGNoYXIgKmNvbnRlbnQgPSBnZXRNYWluQ2xpcGJvYXJkQ29udGVudCgpOworICBpZiAoIWNvbnRlbnQpIHJldHVybiAibm8gbWVtb3J5IjsKKworICBwYXJhbV9yZWFkU3RyaW5nKGNvbnRlbnQsIGRhdGEsIHNpemUpOworICBmcmVlKGNvbnRlbnQpOworICByZXR1cm4gTlVMTDsKK30KKworUEFSQU1fV1JJVEVSKGNsaXBib2FyZENvbnRlbnQpCit7CisgIHJldHVybiBwYXJhbV93cml0ZVN0cmluZyhzZXRNYWluQ2xpcGJvYXJkQ29udGVudCwgZGF0YSwgc2l6ZSk7Cit9CisKKy8qIEJSTEFQSV9QQVJBTV9CT1VORF9DT01NQU5EX0tFWUNPREVTICovCitQQVJBTV9SRUFERVIoYm91bmRDb21tYW5kS2V5Y29kZXMpCit7CisgIGxvY2tCcmFpbGxlRHJpdmVyKCk7CisgICAgaWYgKGlzQnJhaWxsZURyaXZlckNvbnN0cnVjdGVkKCkpIHsKKyAgICAgIEtleVRhYmxlICp0YWJsZSA9IGJybC5rZXlUYWJsZTsKKworICAgICAgaWYgKHRhYmxlKSB7CisgICAgICAgIHVuc2lnbmVkIGludCBjb3VudDsKKyAgICAgICAgaW50ICpjb21tYW5kcyA9IGdldEJvdW5kQ29tbWFuZHModGFibGUsICZjb3VudCk7CisKKyAgICAgICAgaWYgKGNvbW1hbmRzKSB7CisgICAgICAgICAgKnNpemUgLz0gc2l6ZW9mKGJybGFwaV9wYXJhbV9jb21tYW5kS2V5Y29kZV90KTsKKyAgICAgICAgICAqc2l6ZSAqPSBzaXplb2YoYnJsYXBpX3BhcmFtX2NvbW1hbmRLZXljb2RlX3QpOworCisgICAgICAgICAgdm9pZCAqbmV4dCA9IGRhdGE7CisgICAgICAgICAgY29uc3Qgdm9pZCAqZW5kID0gbmV4dCArICpzaXplOworCisgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaT0wOyBpPGNvdW50OyBpKz0xKSB7CisgICAgICAgICAgICBpZiAobmV4dCA9PSBlbmQpIGJyZWFrOworICAgICAgICAgICAgYnJsYXBpX2tleUNvZGVfdCBrZXlDb2RlOworCisgICAgICAgICAgICBpZiAoY21kQnJsdHR5VG9CcmxhcGkoJmtleUNvZGUsIGNvbW1hbmRzW2ldLCBjLT5yZXRhaW5Eb3RzKSkgeworICAgICAgICAgICAgICBicmxhcGlfcGFyYW1fY29tbWFuZEtleWNvZGVfdCAqY29tbWFuZENvZGUgPSBuZXh0OworICAgICAgICAgICAgICAqY29tbWFuZENvZGUgPSBrZXlDb2RlOworICAgICAgICAgICAgICBuZXh0ICs9IHNpemVvZigqY29tbWFuZENvZGUpOworICAgICAgICAgICAgfQorICAgICAgICAgIH0KKworICAgICAgICAgICpzaXplID0gbmV4dCAtIGRhdGE7CisgICAgICAgICAgZnJlZShjb21tYW5kcyk7CisgICAgICAgICAgZ290byB1bmxvY2s7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9CisKKyAgICAqc2l6ZSA9IDA7Cit1bmxvY2s6CisgIHVubG9ja0JyYWlsbGVEcml2ZXIoKTsKKworICByZXR1cm4gTlVMTDsKK30KKworLyogQlJMQVBJX1BBUkFNX0NPTU1BTkRfS0VZQ09ERV9OQU1FICovCitQQVJBTV9SRUFERVIoY29tbWFuZEtleWNvZGVOYW1lKQoreworICBpbnQgY29tbWFuZCA9IGNtZEJybGFwaVRvQnJsdHR5KHN1YnBhcmFtKTsKKworICBpZiAoY29tbWFuZCA9PSBFT0YpIHsKKyAgICAqc2l6ZSA9IDA7CisgIH0gZWxzZSB7CisgICAgZGVzY3JpYmVDb21tYW5kKGRhdGEsICpzaXplLCBjb21tYW5kLCBDRE9fSW5jbHVkZU5hbWUpOworICAgIGNoYXIgKmNvbG9uID0gc3RyY2hyKGRhdGEsICc6Jyk7CisgICAgaWYgKGNvbG9uKSAqY29sb24gPSAwOworICAgICpzaXplID0gc3RybGVuKGRhdGEpOworICB9CisKKyAgcmV0dXJuIE5VTEw7Cit9CisKKy8qIEJSTEFQSV9QQVJBTV9DT01NQU5EX0tFWUNPREVfU1VNTUFSWSAqLworUEFSQU1fUkVBREVSKGNvbW1hbmRLZXljb2RlU3VtbWFyeSkKK3sKKyAgaW50IGNvbW1hbmQgPSBjbWRCcmxhcGlUb0JybHR0eShzdWJwYXJhbSk7CisKKyAgaWYgKGNvbW1hbmQgPT0gRU9GKSB7CisgICAgKnNpemUgPSAwOworICB9IGVsc2UgeworICAgIGRlc2NyaWJlQ29tbWFuZChkYXRhLCAqc2l6ZSwgY29tbWFuZCwgMCk7CisgICAgKnNpemUgPSBzdHJsZW4oZGF0YSk7CisgIH0KKworICByZXR1cm4gTlVMTDsKK30KKworLyogQlJMQVBJX1BBUkFNX0RFRklORURfRFJJVkVSX0tFWUNPREVTICovCit0eXBlZGVmIHN0cnVjdCB7CisgIHZvaWQgKm5leHQ7CisgIGNvbnN0IHZvaWQgKmVuZDsKK30gcGFyYW1fYWRkS2V5Q29kZV90OworCitzdGF0aWMgaW50IHBhcmFtX2FkZEtleUNvZGUgKGNvbnN0IEtleU5hbWVFbnRyeSAqa25lLCB2b2lkICpkYXRhKQoreworICBpZiAoa25lKSB7CisgICAgcGFyYW1fYWRkS2V5Q29kZV90ICpha2MgPSBkYXRhOworCisgICAgaWYgKGFrYy0+bmV4dCA8IGFrYy0+ZW5kKSB7CisgICAgICBicmxhcGlfcGFyYW1fZHJpdmVyS2V5Y29kZV90ICprZXkgPSBha2MtPm5leHQ7CisgICAgICAqa2V5ID0gbWFrZURyaXZlcktleUNvZGUoa25lLT52YWx1ZS5ncm91cCwga25lLT52YWx1ZS5udW1iZXIsIDApOworICAgICAgYWtjLT5uZXh0ICs9IHNpemVvZigqa2V5KTsKKyAgICB9CisgIH0KKworICByZXR1cm4gMTsKK30KKworUEFSQU1fUkVBREVSKGRlZmluZWREcml2ZXJLZXljb2RlcykKK3sKKyAgbG9ja0JyYWlsbGVEcml2ZXIoKTsKKyAgICBpZiAoaXNCcmFpbGxlRHJpdmVyQ29uc3RydWN0ZWQoKSkgeworICAgICAgS0VZX05BTUVfVEFCTEVTX1JFRkVSRU5DRSBrZXlzID0gYnJsLmtleU5hbWVzOworCisgICAgICBpZiAoa2V5cykgeworICAgICAgICAqc2l6ZSAvPSBzaXplb2YoYnJsYXBpX3BhcmFtX2RyaXZlcktleWNvZGVfdCk7CisgICAgICAgICpzaXplICo9IHNpemVvZihicmxhcGlfcGFyYW1fZHJpdmVyS2V5Y29kZV90KTsKKworICAgICAgICBwYXJhbV9hZGRLZXlDb2RlX3QgYWtjID0geworICAgICAgICAgIC5uZXh0ID0gZGF0YSwKKyAgICAgICAgICAuZW5kID0gZGF0YSArICpzaXplCisgICAgICAgIH07CisKKyAgICAgICAgZm9yRWFjaEtleU5hbWUoa2V5cywgcGFyYW1fYWRkS2V5Q29kZSwgJmFrYyk7CisgICAgICAgICpzaXplID0gYWtjLm5leHQgLSBkYXRhOworICAgICAgICBnb3RvIHVubG9jazsKKyAgICAgIH0KKyAgICB9CisKKyAgICAqc2l6ZSA9IDA7Cit1bmxvY2s6CisgIHVubG9ja0JyYWlsbGVEcml2ZXIoKTsKKworICByZXR1cm4gTlVMTDsKK30KKworLyogQlJMQVBJX1BBUkFNX0RSSVZFUl9LRVlDT0RFX05BTUUgKi8KK1BBUkFNX1JFQURFUihkcml2ZXJLZXljb2RlTmFtZSkKK3sKKyAgbG9ja0JyYWlsbGVEcml2ZXIoKTsKKyAgICBpZiAoaXNCcmFpbGxlRHJpdmVyQ29uc3RydWN0ZWQoKSkgeworICAgICAgS2V5VGFibGUgKnRhYmxlID0gYnJsLmtleVRhYmxlOworCisgICAgICBpZiAodGFibGUpIHsKKyAgICAgICAgaWYgKHN1YnBhcmFtIDw9IFVJTlQxNl9NQVgpIHsKKyAgICAgICAgICBjb25zdCBLZXlWYWx1ZSBrZXlWYWx1ZSA9IHsKKyAgICAgICAgICAgIC5ncm91cCA9IHN1YnBhcmFtID4+IDgsCisgICAgICAgICAgICAubnVtYmVyID0gc3VicGFyYW0gJiAwWEZGCisgICAgICAgICAgfTsKKworICAgICAgICAgIGNvbnN0IEtleU5hbWVFbnRyeSAqa25lID0gZmluZEtleU5hbWVFbnRyeSh0YWJsZSwgJmtleVZhbHVlKTsKKyAgICAgICAgICBpZiAoa25lKSB7CisgICAgICAgICAgICBwYXJhbV9yZWFkU3RyaW5nKGtuZS0+bmFtZSwgZGF0YSwgc2l6ZSk7CisgICAgICAgICAgICBnb3RvIHVubG9jazsKKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9CisKKyAgICAqc2l6ZSA9IDA7Cit1bmxvY2s6CisgIHVubG9ja0JyYWlsbGVEcml2ZXIoKTsKKworICByZXR1cm4gTlVMTDsKK30KKworLyogQlJMQVBJX1BBUkFNX0RSSVZFUl9LRVlDT0RFX1NVTU1BUlkgKi8KK1BBUkFNX1JFQURFUihkcml2ZXJLZXljb2RlU3VtbWFyeSkKK3sKKyAgKnNpemUgPSAwOworICByZXR1cm4gTlVMTDsKK30KKworLyogQlJMQVBJX1BBUkFNX0NPTVBVVEVSX0JSQUlMTEVfUk9XU19NQVNLICovCitQQVJBTV9SRUFERVIoY29tcHV0ZXJCcmFpbGxlUm93c01hc2spCit7CisgIGxvY2tUZXh0VGFibGUoKTsKKyAgICAqc2l6ZSA9IGdldFRleHRUYWJsZVJvd3NNYXNrKHRleHRUYWJsZSwgZGF0YSwgKnNpemUpOworICB1bmxvY2tUZXh0VGFibGUoKTsKKworICByZXR1cm4gTlVMTDsKK30KKworLyogQlJMQVBJX1BBUkFNX0NPTVBVVEVSX0JSQUlMTEVfUk9XX0NFTExTICovCitQQVJBTV9SRUFERVIoY29tcHV0ZXJCcmFpbGxlUm93Q2VsbHMpCit7CisgIGJybGFwaV9wYXJhbV9jb21wdXRlckJyYWlsbGVSb3dDZWxsc190ICpjb21wdXRlckJyYWlsbGVSb3dDZWxscyA9IGRhdGE7CisgIGludCByb3dEZWZpbmVkOworCisgIGxvY2tUZXh0VGFibGUoKTsKKyAgICByb3dEZWZpbmVkID0gZ2V0VGV4dFRhYmxlUm93Q2VsbHMoCisgICAgICB0ZXh0VGFibGUsIHN1YnBhcmFtLAorICAgICAgY29tcHV0ZXJCcmFpbGxlUm93Q2VsbHMtPmNlbGxzLAorICAgICAgY29tcHV0ZXJCcmFpbGxlUm93Q2VsbHMtPmRlZmluZWQKKyAgICApOworICB1bmxvY2tUZXh0VGFibGUoKTsKKworICBpZiAocm93RGVmaW5lZCkgeworICAgICpzaXplID0gc2l6ZW9mKCpjb21wdXRlckJyYWlsbGVSb3dDZWxscyk7CisgIH0gZWxzZSB7CisgICAgKnNpemUgPSAwOworICB9CisKKyAgcmV0dXJuIE5VTEw7Cit9CisKKy8qIEJSTEFQSV9QQVJBTV9DT01QVVRFUl9CUkFJTExFX1RBQkxFICovCitQQVJBTV9SRUFERVIoY29tcHV0ZXJCcmFpbGxlVGFibGUpCit7CisgIHBhcmFtX3JlYWRTdHJpbmcob3B0X3RleHRUYWJsZSwgZGF0YSwgc2l6ZSk7CisgIHJldHVybiBOVUxMOworfQorCitQQVJBTV9XUklURVIoY29tcHV0ZXJCcmFpbGxlVGFibGUpCit7CisgIHJldHVybiBwYXJhbV93cml0ZVN0cmluZyhjaGFuZ2VUZXh0VGFibGUsIGRhdGEsIHNpemUpOworfQorCisvKiBCUkxBUElfUEFSQU1fTElURVJBUllfQlJBSUxMRV9UQUJMRSAqLworUEFSQU1fUkVBREVSKGxpdGVyYXJ5QnJhaWxsZVRhYmxlKQoreworICBwYXJhbV9yZWFkU3RyaW5nKG9wdF9jb250cmFjdGlvblRhYmxlLCBkYXRhLCBzaXplKTsKKyAgcmV0dXJuIE5VTEw7Cit9CisKK1BBUkFNX1dSSVRFUihsaXRlcmFyeUJyYWlsbGVUYWJsZSkKK3sKKyAgcmV0dXJuIHBhcmFtX3dyaXRlU3RyaW5nKGNoYW5nZUNvbnRyYWN0aW9uVGFibGUsIGRhdGEsIHNpemUpOworfQorCisvKiBCUkxBUElfUEFSQU1fTUVTU0FHRV9MT0NBTEUgKi8KK1BBUkFNX1JFQURFUihtZXNzYWdlTG9jYWxlKQoreworICBwYXJhbV9yZWFkU3RyaW5nKHNldGxvY2FsZShMQ19BTEwsIE5VTEwpLCBkYXRhLCBzaXplKTsKKyAgcmV0dXJuIE5VTEw7Cit9CisKK1BBUkFNX1dSSVRFUihtZXNzYWdlTG9jYWxlKQoreworICByZXR1cm4gcGFyYW1fd3JpdGVTdHJpbmcoY2hhbmdlTWVzc2FnZUxvY2FsZSwgZGF0YSwgc2l6ZSk7Cit9CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgdW5zaWduZWQgbG9jYWw6MTsKKyAgdW5zaWduZWQgZ2xvYmFsOjE7CisgIGJybGFwaV9wYXJhbV90IHJvb3RQYXJhbWV0ZXI7CisgIFBhcmFtUmVhZGVyICpyZWFkOworICBQYXJhbVdyaXRlciAqd3JpdGU7Cit9IFBhcmFtRGlzcGF0Y2g7CisKK3N0YXRpYyBjb25zdCBQYXJhbURpc3BhdGNoIHBhcmFtRGlzcGF0Y2hbQlJMQVBJX1BBUkFNX0NPVU5UXSA9IHsKKy8vQ29ubmVjdGlvbiBQYXJhbWV0ZXJzCisgIFtCUkxBUElfUEFSQU1fU0VSVkVSX1ZFUlNJT05dID0geworICAgIC5nbG9iYWwgPSAxLAorICAgIC5yZWFkID0gcGFyYW1fc2VydmVyVmVyc2lvbl9yZWFkLAorICB9LAorCisgIFtCUkxBUElfUEFSQU1fQ0xJRU5UX1BSSU9SSVRZXSA9IHsKKyAgICAubG9jYWwgPSAxLAorICAgIC5yZWFkID0gcGFyYW1fY2xpZW50UHJpb3JpdHlfcmVhZCwKKyAgICAud3JpdGUgPSBwYXJhbV9jbGllbnRQcmlvcml0eV93cml0ZSwKKyAgfSwKKworLy9EZXZpY2UgUGFyYW1ldGVycworICBbQlJMQVBJX1BBUkFNX0RSSVZFUl9OQU1FXSA9IHsKKyAgICAuZ2xvYmFsID0gMSwKKyAgICAucmVhZCA9IHBhcmFtX2RyaXZlck5hbWVfcmVhZCwKKyAgfSwKKworICBbQlJMQVBJX1BBUkFNX0RSSVZFUl9DT0RFXSA9IHsKKyAgICAuZ2xvYmFsID0gMSwKKyAgICAucmVhZCA9IHBhcmFtX2RyaXZlckNvZGVfcmVhZCwKKyAgfSwKKworICBbQlJMQVBJX1BBUkFNX0RSSVZFUl9WRVJTSU9OXSA9IHsKKyAgICAuZ2xvYmFsID0gMSwKKyAgICAucmVhZCA9IHBhcmFtX2RyaXZlclZlcnNpb25fcmVhZCwKKyAgfSwKKworICBbQlJMQVBJX1BBUkFNX0RFVklDRV9NT0RFTF0gPSB7CisgICAgLmdsb2JhbCA9IDEsCisgICAgLnJlYWQgPSBwYXJhbV9kZXZpY2VNb2RlbF9yZWFkLAorICB9LAorCisgIFtCUkxBUElfUEFSQU1fREVWSUNFX0NFTExfU0laRV0gPSB7CisgICAgLmdsb2JhbCA9IDEsCisgICAgLnJlYWQgPSBwYXJhbV9kZXZpY2VDZWxsU2l6ZV9yZWFkLAorICB9LAorCisgIFtCUkxBUElfUEFSQU1fRElTUExBWV9TSVpFXSA9IHsKKyAgICAuZ2xvYmFsID0gMSwKKyAgICAucmVhZCA9IHBhcmFtX2Rpc3BsYXlTaXplX3JlYWQsCisgIH0sCisKKyAgW0JSTEFQSV9QQVJBTV9ERVZJQ0VfSURFTlRJRklFUl0gPSB7CisgICAgLmdsb2JhbCA9IDEsCisgICAgLnJlYWQgPSBwYXJhbV9kZXZpY2VJZGVudGlmaWVyX3JlYWQsCisgIH0sCisKKyAgW0JSTEFQSV9QQVJBTV9ERVZJQ0VfU1BFRURdID0geworICAgIC5nbG9iYWwgPSAxLAorICAgIC5yZWFkID0gcGFyYW1fZGV2aWNlU3BlZWRfcmVhZCwKKyAgfSwKKworICBbQlJMQVBJX1BBUkFNX0RFVklDRV9PTkxJTkVdID0geworICAgIC5nbG9iYWwgPSAxLAorICAgIC5yZWFkID0gcGFyYW1fZGV2aWNlT25saW5lX3JlYWQsCisgIH0sCisKKy8vSW5wdXQgUGFyYW1ldGVycworICBbQlJMQVBJX1BBUkFNX1JFVEFJTl9ET1RTXSA9IHsKKyAgICAubG9jYWwgPSAxLAorICAgIC5yZWFkID0gcGFyYW1fcmV0YWluRG90c19yZWFkLAorICAgIC53cml0ZSA9IHBhcmFtX3JldGFpbkRvdHNfd3JpdGUsCisgIH0sCisKKy8vQnJhaWxsZSBSZW5kZXJpbmcgUGFyYW1ldGVycworICBbQlJMQVBJX1BBUkFNX0NPTVBVVEVSX0JSQUlMTEVfQ0VMTF9TSVpFXSA9IHsKKyAgICAuZ2xvYmFsID0gMSwKKyAgICAucmVhZCA9IHBhcmFtX2NvbXB1dGVyQnJhaWxsZUNlbGxTaXplX3JlYWQsCisgICAgLndyaXRlID0gcGFyYW1fY29tcHV0ZXJCcmFpbGxlQ2VsbFNpemVfd3JpdGUsCisgIH0sCisKKyAgW0JSTEFQSV9QQVJBTV9MSVRFUkFSWV9CUkFJTExFXSA9IHsKKyAgICAuZ2xvYmFsID0gMSwKKyAgICAucmVhZCA9IHBhcmFtX2xpdGVyYXJ5QnJhaWxsZV9yZWFkLAorICAgIC53cml0ZSA9IHBhcmFtX2xpdGVyYXJ5QnJhaWxsZV93cml0ZSwKKyAgfSwKKworICBbQlJMQVBJX1BBUkFNX0NVUlNPUl9ET1RTXSA9IHsKKyAgICAuZ2xvYmFsID0gMSwKKyAgICAucmVhZCA9IHBhcmFtX2N1cnNvckRvdHNfcmVhZCwKKyAgICAud3JpdGUgPSBwYXJhbV9jdXJzb3JEb3RzX3dyaXRlLAorICB9LAorCisgIFtCUkxBUElfUEFSQU1fQ1VSU09SX0JMSU5LX1BFUklPRF0gPSB7CisgICAgLmdsb2JhbCA9IDEsCisgICAgLnJlYWQgPSBwYXJhbV9jdXJzb3JCbGlua1BlcmlvZF9yZWFkLAorICAgIC53cml0ZSA9IHBhcmFtX2N1cnNvckJsaW5rUGVyaW9kX3dyaXRlLAorICB9LAorCisgIFtCUkxBUElfUEFSQU1fQ1VSU09SX0JMSU5LX1BFUkNFTlRBR0VdID0geworICAgIC5nbG9iYWwgPSAxLAorICAgIC5yZWFkID0gcGFyYW1fY3Vyc29yQmxpbmtQZXJjZW50YWdlX3JlYWQsCisgICAgLndyaXRlID0gcGFyYW1fY3Vyc29yQmxpbmtQZXJjZW50YWdlX3dyaXRlLAorICB9LAorCisgIFtCUkxBUElfUEFSQU1fUkVOREVSRURfQ0VMTFNdID0geworICAgIC5sb2NhbCA9IDEsCisgICAgLnJlYWQgPSBwYXJhbV9yZW5kZXJlZENlbGxzX3JlYWQsCisgIH0sCisKKy8vTmF2aWdhdGlvbiBQYXJhbWV0ZXJzCisgIFtCUkxBUElfUEFSQU1fU0tJUF9JREVOVElDQUxfTElORVNdID0geworICAgIC5nbG9iYWwgPSAxLAorICAgIC5yZWFkID0gcGFyYW1fc2tpcElkZW50aWNhbExpbmVzX3JlYWQsCisgICAgLndyaXRlID0gcGFyYW1fc2tpcElkZW50aWNhbExpbmVzX3dyaXRlLAorICB9LAorCisgIFtCUkxBUElfUEFSQU1fQVVESUJMRV9BTEVSVFNdID0geworICAgIC5nbG9iYWwgPSAxLAorICAgIC5yZWFkID0gcGFyYW1fYXVkaWJsZUFsZXJ0c19yZWFkLAorICAgIC53cml0ZSA9IHBhcmFtX2F1ZGlibGVBbGVydHNfd3JpdGUsCisgIH0sCisKKy8vQ2xpcGJvYXJkIFBhcmFtZXRlcnMKKyAgW0JSTEFQSV9QQVJBTV9DTElQQk9BUkRfQ09OVEVOVF0gPSB7CisgICAgLmdsb2JhbCA9IDEsCisgICAgLnJlYWQgPSBwYXJhbV9jbGlwYm9hcmRDb250ZW50X3JlYWQsCisgICAgLndyaXRlID0gcGFyYW1fY2xpcGJvYXJkQ29udGVudF93cml0ZSwKKyAgfSwKKworLy9UVFkgTW9kZSBQYXJhbWV0ZXJzCisgIFtCUkxBUElfUEFSQU1fQk9VTkRfQ09NTUFORF9LRVlDT0RFU10gPSB7CisgICAgLmdsb2JhbCA9IDEsCisgICAgLnJlYWQgPSBwYXJhbV9ib3VuZENvbW1hbmRLZXljb2Rlc19yZWFkLAorICB9LAorCisgIFtCUkxBUElfUEFSQU1fQ09NTUFORF9LRVlDT0RFX05BTUVdID0geworICAgIC5nbG9iYWwgPSAxLAorICAgIC5yb290UGFyYW1ldGVyID0gQlJMQVBJX1BBUkFNX0JPVU5EX0NPTU1BTkRfS0VZQ09ERVMsCisgICAgLnJlYWQgPSBwYXJhbV9jb21tYW5kS2V5Y29kZU5hbWVfcmVhZCwKKyAgfSwKKworICBbQlJMQVBJX1BBUkFNX0NPTU1BTkRfS0VZQ09ERV9TVU1NQVJZXSA9IHsKKyAgICAuZ2xvYmFsID0gMSwKKyAgICAucm9vdFBhcmFtZXRlciA9IEJSTEFQSV9QQVJBTV9CT1VORF9DT01NQU5EX0tFWUNPREVTLAorICAgIC5yZWFkID0gcGFyYW1fY29tbWFuZEtleWNvZGVTdW1tYXJ5X3JlYWQsCisgIH0sCisKKyAgW0JSTEFQSV9QQVJBTV9ERUZJTkVEX0RSSVZFUl9LRVlDT0RFU10gPSB7CisgICAgLmdsb2JhbCA9IDEsCisgICAgLnJlYWQgPSBwYXJhbV9kZWZpbmVkRHJpdmVyS2V5Y29kZXNfcmVhZCwKKyAgfSwKKworICBbQlJMQVBJX1BBUkFNX0RSSVZFUl9LRVlDT0RFX05BTUVdID0geworICAgIC5nbG9iYWwgPSAxLAorICAgIC5yb290UGFyYW1ldGVyID0gQlJMQVBJX1BBUkFNX0RFRklORURfRFJJVkVSX0tFWUNPREVTLAorICAgIC5yZWFkID0gcGFyYW1fZHJpdmVyS2V5Y29kZU5hbWVfcmVhZCwKKyAgfSwKKworICBbQlJMQVBJX1BBUkFNX0RSSVZFUl9LRVlDT0RFX1NVTU1BUlldID0geworICAgIC5nbG9iYWwgPSAxLAorICAgIC5yb290UGFyYW1ldGVyID0gQlJMQVBJX1BBUkFNX0RFRklORURfRFJJVkVSX0tFWUNPREVTLAorICAgIC5yZWFkID0gcGFyYW1fZHJpdmVyS2V5Y29kZVN1bW1hcnlfcmVhZCwKKyAgfSwKKworLy9CcmFpbGxlIFRyYW5zbGF0aW9uIFBhcmFtZXRlcnMKKyAgW0JSTEFQSV9QQVJBTV9DT01QVVRFUl9CUkFJTExFX1JPV1NfTUFTS10gPSB7CisgICAgLmdsb2JhbCA9IDEsCisgICAgLnJvb3RQYXJhbWV0ZXIgPSBCUkxBUElfUEFSQU1fQ09NUFVURVJfQlJBSUxMRV9UQUJMRSwKKyAgICAucmVhZCA9IHBhcmFtX2NvbXB1dGVyQnJhaWxsZVJvd3NNYXNrX3JlYWQsCisgIH0sCisKKyAgW0JSTEFQSV9QQVJBTV9DT01QVVRFUl9CUkFJTExFX1JPV19DRUxMU10gPSB7CisgICAgLmdsb2JhbCA9IDEsCisgICAgLnJvb3RQYXJhbWV0ZXIgPSBCUkxBUElfUEFSQU1fQ09NUFVURVJfQlJBSUxMRV9UQUJMRSwKKyAgICAucmVhZCA9IHBhcmFtX2NvbXB1dGVyQnJhaWxsZVJvd0NlbGxzX3JlYWQsCisgIH0sCisKKyAgW0JSTEFQSV9QQVJBTV9DT01QVVRFUl9CUkFJTExFX1RBQkxFXSA9IHsKKyAgICAuZ2xvYmFsID0gMSwKKyAgICAucmVhZCA9IHBhcmFtX2NvbXB1dGVyQnJhaWxsZVRhYmxlX3JlYWQsCisgICAgLndyaXRlID0gcGFyYW1fY29tcHV0ZXJCcmFpbGxlVGFibGVfd3JpdGUsCisgIH0sCisKKyAgW0JSTEFQSV9QQVJBTV9MSVRFUkFSWV9CUkFJTExFX1RBQkxFXSA9IHsKKyAgICAuZ2xvYmFsID0gMSwKKyAgICAucmVhZCA9IHBhcmFtX2xpdGVyYXJ5QnJhaWxsZVRhYmxlX3JlYWQsCisgICAgLndyaXRlID0gcGFyYW1fbGl0ZXJhcnlCcmFpbGxlVGFibGVfd3JpdGUsCisgIH0sCisKKyAgW0JSTEFQSV9QQVJBTV9NRVNTQUdFX0xPQ0FMRV0gPSB7CisgICAgLmdsb2JhbCA9IDEsCisgICAgLnJlYWQgPSBwYXJhbV9tZXNzYWdlTG9jYWxlX3JlYWQsCisgICAgLndyaXRlID0gcGFyYW1fbWVzc2FnZUxvY2FsZV93cml0ZSwKKyAgfSwKK307CisKK3N0YXRpYyBpbmxpbmUgY29uc3QgUGFyYW1EaXNwYXRjaCAqcGFyYW1fZ2V0RGlzcGF0Y2goYnJsYXBpX3BhcmFtX3QgcGFyYW1ldGVyKQoreworICBpZiAocGFyYW1ldGVyID49IEFSUkFZX0NPVU5UKHBhcmFtRGlzcGF0Y2gpKSByZXR1cm4gTlVMTDsKKyAgcmV0dXJuICZwYXJhbURpc3BhdGNoW3BhcmFtZXRlcl07Cit9CisKK3N0YXRpYyBpbnQgY2hlY2tQYXJhbUxvY2FsR2xvYmFsKENvbm5lY3Rpb24gKmMsIGJybGFwaV9wYXJhbV90IHBhcmFtLCBicmxhcGlfcGFyYW1fZmxhZ3NfdCBmbGFncykKK3sKKyAgaWYgKGZsYWdzICYgQlJMQVBJX1BBUkFNRl9HTE9CQUwpIHsKKyAgICBpZiAoIXBhcmFtRGlzcGF0Y2hbcGFyYW1dLmdsb2JhbCkgeworICAgICAgV0VSUihjLT5mZCwgQlJMQVBJX0VSUk9SX0lOVkFMSURfUEFSQU1FVEVSLCAicGFyYW1ldGVyICV1IGRvZXMgbm90IG1ha2Ugc2Vuc2UgZ2xvYmFsbHkiLCBwYXJhbSk7CisgICAgICByZXR1cm4gMDsKKyAgICB9CisgIH0gZWxzZSB7CisgICAgaWYgKCFwYXJhbURpc3BhdGNoW3BhcmFtXS5sb2NhbCkgeworICAgICAgV0VSUihjLT5mZCwgQlJMQVBJX0VSUk9SX0lOVkFMSURfUEFSQU1FVEVSLCAicGFyYW1ldGVyICV1IGRvZXMgbm90IG1ha2Ugc2Vuc2UgbG9jYWxseSIsIHBhcmFtKTsKKyAgICAgIHJldHVybiAwOworICAgIH0KKyAgfQorICByZXR1cm4gMTsKK30KKworc3RhdGljIGludCBoYW5kbGVQYXJhbVZhbHVlKENvbm5lY3Rpb24gKmMsIGJybGFwaV9wYWNrZXRUeXBlX3QgdHlwZSwgYnJsYXBpX3BhY2tldF90ICpwYWNrZXQsIHNpemVfdCBzaXplKQoreworICBicmxhcGlfcGFyYW1WYWx1ZVBhY2tldF90ICpwYXJhbVZhbHVlID0gJnBhY2tldC0+cGFyYW1WYWx1ZTsKKyAgYnJsYXBpX3BhcmFtX3QgcGFyYW07CisgIGJybGFwaV9wYXJhbV9zdWJwYXJhbV90IHN1YnBhcmFtOworICBicmxhcGlfcGFyYW1fZmxhZ3NfdCBmbGFnczsKKworICBDSEVDS0VSUiggKHNpemUgPj0gc2l6ZW9mKGZsYWdzKSArIHNpemVvZihwYXJhbSkgKyBzaXplb2Yoc3VicGFyYW0pKSwgQlJMQVBJX0VSUk9SX0lOVkFMSURfUEFDS0VULCAid3Jvbmcgc2l6ZSBmb3IgcGFyYW1WYWx1ZSBwYWNrZXQiKTsKKyAgZmxhZ3MgPSBudG9obChwYXJhbVZhbHVlLT5mbGFncyk7CisgIHBhcmFtID0gbnRvaGwocGFyYW1WYWx1ZS0+cGFyYW0pOworCisgIGlmIChwYXJhbSA+PSBzaXplb2YocGFyYW1EaXNwYXRjaCkgLyBzaXplb2YoKnBhcmFtRGlzcGF0Y2gpKSB7CisgICAgV0VSUihjLT5mZCwgQlJMQVBJX0VSUk9SX0lOVkFMSURfUEFSQU1FVEVSLCAidW5rbm93biBwYXJhbWV0ZXIgJXUiLCBwYXJhbSk7CisgICAgcmV0dXJuIDA7CisgIH0KKworICBQYXJhbVdyaXRlciAqd3JpdGVIYW5kbGVyID0gcGFyYW1EaXNwYXRjaFtwYXJhbV0ud3JpdGU7CisgIC8qIENoZWNrIGFnYWluc3QgcmVhZC1vbmx5IHBhcmFtZXRlcnMgKi8KKyAgaWYgKCF3cml0ZUhhbmRsZXIpIHsKKyAgICBXRVJSKGMtPmZkLCBCUkxBUElfRVJST1JfUkVBRE9OTFlfUEFSQU1FVEVSLCAicGFyYW1ldGVyICV1IG5vdCBhdmFpbGFibGUgZm9yIHdyaXRpbmciLCBwYXJhbSk7CisgICAgcmV0dXJuIDA7CisgIH0KKworICBpZiAoIWNoZWNrUGFyYW1Mb2NhbEdsb2JhbChjLCBwYXJhbSwgZmxhZ3MpKQorICAgIHJldHVybiAwOworCisgIHN1YnBhcmFtID0gKChicmxhcGlfcGFyYW1fc3VicGFyYW1fdCludG9obChwYXJhbVZhbHVlLT5zdWJwYXJhbV9oaSkgPDwgMzIpIHx8IG50b2hsKHBhcmFtVmFsdWUtPnN1YnBhcmFtX2xvKTsKKyAgc2l6ZSAtPSBzaXplb2YoZmxhZ3MpICsgc2l6ZW9mKHBhcmFtKSArIHNpemVvZihzdWJwYXJhbSk7CisgIF9icmxhcGlfbnRvaFBhcmFtZXRlcihwYXJhbSwgcGFyYW1WYWx1ZSwgc2l6ZSk7CisKKyAgeworICAgIGNvbnN0IGNoYXIgKmVycm9yOworCisgICAgbG9ja011dGV4KCZhcGlQYXJhbU11dGV4KTsKKyAgICBwYXJhbVVwZGF0ZUNvbm5lY3Rpb24gPSBjOworICAgIGVycm9yID0gd3JpdGVIYW5kbGVyKGMsIHBhcmFtLCBzdWJwYXJhbSwgZmxhZ3MsIHBhcmFtVmFsdWUtPmRhdGEsIHNpemUpOworICAgIHBhcmFtVXBkYXRlQ29ubmVjdGlvbiA9IE5VTEw7CisgICAgdW5sb2NrTXV0ZXgoJmFwaVBhcmFtTXV0ZXgpOworCisgICAgaWYgKGVycm9yKSB7CisgICAgICBXRVJSKGMtPmZkLCBCUkxBUElfRVJST1JfSU5WQUxJRF9QQVJBTUVURVIsICJwYXJhbWV0ZXIgJXUgd3JpdGUgZXJyb3I6ICVzIiwgcGFyYW0sIGVycm9yKTsKKyAgICAgIHJldHVybiAwOworICAgIH0KKyAgfQorCisgIGlmICghKGZsYWdzICYgQlJMQVBJX1BBUkFNRl9HTE9CQUwpKSB7CisgICAgaGFuZGxlUGFyYW1VcGRhdGUoYywgYywgcGFyYW0sIHN1YnBhcmFtLCBmbGFncywgcGFyYW1WYWx1ZS0+ZGF0YSwgc2l6ZSk7CisgIH0KKyAgd3JpdGVBY2soYy0+ZmQpOworICByZXR1cm4gMDsKK30KKworCisvKiBzZW5kQ29ubmVjdGlvblBhcmFtVXBkYXRlOiBTZW5kIHRoZSBwYXJhbWV0ZXIgdXBkYXRlIHRvIGEgY29ubmVjdGlvbiAqLworc3RhdGljIHZvaWQgc2VuZENvbm5lY3Rpb25QYXJhbVVwZGF0ZShDb25uZWN0aW9uICpjLCBicmxhcGlfcGFyYW1fdCBwYXJhbSwgYnJsYXBpX3BhcmFtX3N1YnBhcmFtX3Qgc3VicGFyYW0sIGJybGFwaV9wYXJhbV9mbGFnc190IGZsYWdzLCBicmxhcGlfcGFyYW1WYWx1ZVBhY2tldF90ICpwYXJhbVZhbHVlLCBzaXplX3Qgc2l6ZSkKK3sKKyAgc3RydWN0IFN1YnNjcmlwdGlvbiAqczsKKworICBmb3IgKHM9Yy0+c3Vic2NyaXB0aW9ucy5uZXh0OyBzIT0mYy0+c3Vic2NyaXB0aW9uczsgcz1zLT5uZXh0KSB7CisgICAgaWYgKHMtPnBhcmFtZXRlciA9PSBwYXJhbQorCSYmIHMtPnN1YnBhcmFtID09IHN1YnBhcmFtCisJJiYgKHMtPmZsYWdzICYgQlJMQVBJX1BBUkFNRl9HTE9CQUwpID09IChmbGFncyAmIEJSTEFQSV9QQVJBTUZfR0xPQkFMKQorCSYmICgocy0+ZmxhZ3MgJiBCUkxBUElfUEFSQU1GX1NFTEYpIHx8IChwYXJhbVVwZGF0ZUNvbm5lY3Rpb24gIT0gYykpKQorICAgIHsKKyAgICAgIGxvZ01lc3NhZ2UoTE9HX0NBVEVHT1JZKFNFUlZFUl9FVkVOVFMpLCAid3JpdGluZyBwYXJhbWV0ZXIgJSJQUkl4MzIiIHVwZGF0ZSB0byBmZCAlIlBSSWZkLHBhcmFtLGMtPmZkKTsKKyAgICAgIGJybGFwaXNlcnZlcl93cml0ZVBhY2tldChjLT5mZCxCUkxBUElfUEFDS0VUX1BBUkFNX1VQREFURSxwYXJhbVZhbHVlLHNpemUpOworICAgICAgYnJlYWs7CisgICAgfQorICB9Cit9CisKKy8qIHNlbmRQYXJhbVVwZGF0ZTogU2VuZCB0aGUgcGFyYW1ldGVyIHVwZGF0ZSB0byBjb25uZWN0aW9ucyBib3VuZCB0byBhIGdpdmVuIHRyZWUgb2YgdHR5cyAqLworc3RhdGljIHZvaWQgc2VuZFBhcmFtVXBkYXRlKFR0eSAqdHR5LCBicmxhcGlfcGFyYW1fdCBwYXJhbSwgYnJsYXBpX3BhcmFtX3N1YnBhcmFtX3Qgc3VicGFyYW0sIGJybGFwaV9wYXJhbV9mbGFnc190IGZsYWdzLCBicmxhcGlfcGFyYW1WYWx1ZVBhY2tldF90ICpwYXJhbVZhbHVlLCBzaXplX3Qgc2l6ZSkKK3sKKyAgQ29ubmVjdGlvbiAqYzsKKyAgVHR5ICp0OworCisgIGZvciAoYyA9IHR0eS0+Y29ubmVjdGlvbnMtPm5leHQ7IGMhPXR0eS0+Y29ubmVjdGlvbnM7IGMgPSBjLT5uZXh0KQorICAgIHNlbmRDb25uZWN0aW9uUGFyYW1VcGRhdGUoYywgcGFyYW0sIHN1YnBhcmFtLCBmbGFncywgcGFyYW1WYWx1ZSwgc2l6ZSk7CisgIGZvciAodCA9IHR0eS0+c3VidHR5czsgdDsgdCA9IHQtPm5leHQpCisgICAgc2VuZFBhcmFtVXBkYXRlKHQsIHBhcmFtLCBzdWJwYXJhbSwgZmxhZ3MsIHBhcmFtVmFsdWUsIHNpemUpOworfQorCisvKiBoYW5kbGVQYXJhbVVwZGF0ZTogUHJlcGFyZSBhbmQgc2VuZCB0aGUgcGFyYW1ldGVyIHVwZGF0ZSB0byBhbGwgY29ubmVjdGlvbnMgKi8KK3N0YXRpYyB2b2lkIF9faGFuZGxlUGFyYW1VcGRhdGUoQ29ubmVjdGlvbiAqZGVzdCwgYnJsYXBpX3BhcmFtX3QgcGFyYW0sIGJybGFwaV9wYXJhbV9zdWJwYXJhbV90IHN1YnBhcmFtLCBicmxhcGlfcGFyYW1fZmxhZ3NfdCBmbGFncywgY29uc3Qgdm9pZCAqZGF0YSwgc2l6ZV90IHNpemUpCit7CisgIGJybGFwaV9wYWNrZXRfdCByZXNwb25zZTsKKyAgYnJsYXBpX3BhcmFtVmFsdWVQYWNrZXRfdCAqcGFyYW1WYWx1ZSA9ICZyZXNwb25zZS5wYXJhbVZhbHVlOworICB1bnNpZ25lZCBjaGFyICpwID0gcGFyYW1WYWx1ZS0+ZGF0YTsKKyAgcGFyYW1WYWx1ZS0+ZmxhZ3MgPSBodG9ubChmbGFncyk7CisgIHBhcmFtVmFsdWUtPnBhcmFtID0gaHRvbmwocGFyYW0pOworICBwYXJhbVZhbHVlLT5zdWJwYXJhbV9oaSA9IGh0b25sKHN1YnBhcmFtID4+IDMyKTsKKyAgcGFyYW1WYWx1ZS0+c3VicGFyYW1fbG8gPSBodG9ubChzdWJwYXJhbSAmIDB4ZmZmZmZmZmZ1bCk7CisgIG1lbWNweShwLCBkYXRhLCBzaXplKTsKKyAgX2JybGFwaV9odG9uUGFyYW1ldGVyKHBhcmFtLCBwYXJhbVZhbHVlLCBzaXplKTsKKyAgc2l6ZSArPSBzaXplb2YoZmxhZ3MpICsgc2l6ZW9mKHBhcmFtKSArIHNpemVvZihzdWJwYXJhbSk7CisgIGlmICghKGZsYWdzICYgQlJMQVBJX1BBUkFNRl9HTE9CQUwpKSB7CisgICAgc2VuZENvbm5lY3Rpb25QYXJhbVVwZGF0ZShkZXN0LHBhcmFtLHN1YnBhcmFtLGZsYWdzLHBhcmFtVmFsdWUsc2l6ZSk7CisgIH0gZWxzZSB7CisgICAgbG9ja011dGV4KCZhcGlDb25uZWN0aW9uc011dGV4KTsKKyAgICBzZW5kUGFyYW1VcGRhdGUoJnR0eXMscGFyYW0sc3VicGFyYW0sZmxhZ3MscGFyYW1WYWx1ZSxzaXplKTsKKyAgICBzZW5kUGFyYW1VcGRhdGUoJm5vdHR5LHBhcmFtLHN1YnBhcmFtLGZsYWdzLHBhcmFtVmFsdWUsc2l6ZSk7CisgICAgdW5sb2NrTXV0ZXgoJmFwaUNvbm5lY3Rpb25zTXV0ZXgpOworICB9Cit9CisKK3N0YXRpYyB2b2lkIGhhbmRsZVBhcmFtVXBkYXRlKENvbm5lY3Rpb24gKnNvdXJjZSwgQ29ubmVjdGlvbiAqZGVzdCwgYnJsYXBpX3BhcmFtX3QgcGFyYW0sIGJybGFwaV9wYXJhbV9zdWJwYXJhbV90IHN1YnBhcmFtLCBicmxhcGlfcGFyYW1fZmxhZ3NfdCBmbGFncywgY29uc3Qgdm9pZCAqZGF0YSwgc2l6ZV90IHNpemUpCit7CisgIGxvY2tNdXRleCgmYXBpUGFyYW1NdXRleCk7CisgIHBhcmFtVXBkYXRlQ29ubmVjdGlvbiA9IHNvdXJjZTsKKyAgaWYgKCgoZmxhZ3MgJiBCUkxBUElfUEFSQU1GX0dMT0JBTCkgJiYgcGFyYW1TdGF0ZVtwYXJhbV0uZ2xvYmFsX3N1YnNjcmlwdGlvbnMpCisgIHx8ICghKGZsYWdzICYgQlJMQVBJX1BBUkFNRl9HTE9CQUwpICYmIHBhcmFtU3RhdGVbcGFyYW1dLmxvY2FsX3N1YnNjcmlwdGlvbnMpKQorICAgIF9faGFuZGxlUGFyYW1VcGRhdGUoZGVzdCwgcGFyYW0sIHN1YnBhcmFtLCBmbGFncywgZGF0YSwgc2l6ZSk7CisgIHBhcmFtVXBkYXRlQ29ubmVjdGlvbiA9IE5VTEw7CisgIHVubG9ja011dGV4KCZhcGlQYXJhbU11dGV4KTsKK30KKwordm9pZCBhcGlfdXBkYXRlUGFyYW1ldGVyKGJybGFwaV9wYXJhbV90IHBhcmFtZXRlciwgYnJsYXBpX3BhcmFtX3N1YnBhcmFtX3Qgc3VicGFyYW0pCit7CisgIGNvbnN0IFBhcmFtRGlzcGF0Y2ggKnBkID0gcGFyYW1fZ2V0RGlzcGF0Y2gocGFyYW1ldGVyKTsKKworICBpZiAocGQpIHsKKyAgICBpZiAocGQtPmdsb2JhbCkgeworICAgICAgUGFyYW1SZWFkZXIgKnJlYWRIYW5kbGVyID0gcGQtPnJlYWQ7CisKKyAgICAgIGlmIChyZWFkSGFuZGxlcikgeworICAgICAgICBsb2NrTXV0ZXgoJmFwaVBhcmFtTXV0ZXgpOworICAgICAgICB7CisgICAgICAgICAgaWYgKHBhcmFtU3RhdGVbcGFyYW1ldGVyXS5nbG9iYWxfc3Vic2NyaXB0aW9ucykgeworICAgICAgICAgICAgdW5zaWduZWQgY2hhciBkYXRhW0JSTEFQSV9NQVhQQVJBTVNJWkVdOworICAgICAgICAgICAgc2l6ZV90IHNpemUgPSBzaXplb2YoZGF0YSk7CisgICAgICAgICAgICBjb25zdCBjaGFyICplcnJvciA9IHJlYWRIYW5kbGVyKE5VTEwsIHBhcmFtZXRlciwgc3VicGFyYW0sIEJSTEFQSV9QQVJBTUZfR0xPQkFMLCBkYXRhLCAmc2l6ZSk7CisKKyAgICAgICAgICAgIGlmIChlcnJvcikgeworICAgICAgICAgICAgICBsb2dNZXNzYWdlKExPR19DQVRFR09SWShTRVJWRVJfRVZFTlRTKSwgInBhcmFtZXRlciAldSByZWFkIGVycm9yOiAlcyIsIHBhcmFtZXRlciwgZXJyb3IpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgX19oYW5kbGVQYXJhbVVwZGF0ZShOVUxMLCBwYXJhbWV0ZXIsIHN1YnBhcmFtLCBCUkxBUElfUEFSQU1GX0dMT0JBTCwgZGF0YSwgc2l6ZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHVubG9ja011dGV4KCZhcGlQYXJhbU11dGV4KTsKKworICAgICAgICByZXBvcnRQYXJhbWV0ZXJVcGRhdGVkKHBhcmFtZXRlciwgc3VicGFyYW0pOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgbG9nTWVzc2FnZShMT0dfQ0FURUdPUlkoU0VSVkVSX0VWRU5UUyksICJwYXJhbWV0ZXIgJXUgaXMgbm90IHJlYWRhYmxlIiwgcGFyYW1ldGVyKTsKKyAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgbG9nTWVzc2FnZShMT0dfQ0FURUdPUlkoU0VSVkVSX0VWRU5UUyksICJwYXJhbWV0ZXIgJXUgaXMgbm90IGdsb2JhbCIsIHBhcmFtZXRlcik7CisgICAgfQorICB9IGVsc2UgeworICAgIGxvZ01lc3NhZ2UoTE9HX0NBVEVHT1JZKFNFUlZFUl9FVkVOVFMpLCAicGFyYW1ldGVyICV1IGlzIG91dCBvZiByYW5nZSIsIHBhcmFtZXRlcik7CisgIH0KK30KKworc3RhdGljIGludCBoYW5kbGVQYXJhbVJlcXVlc3QoQ29ubmVjdGlvbiAqYywgYnJsYXBpX3BhY2tldFR5cGVfdCB0eXBlLCBicmxhcGlfcGFja2V0X3QgKnBhY2tldCwgc2l6ZV90IHNpemUpCit7CisgIGJybGFwaV9wYXJhbVJlcXVlc3RQYWNrZXRfdCAqcGFyYW1SZXF1ZXN0ID0gJnBhY2tldC0+cGFyYW1SZXF1ZXN0OworICBicmxhcGlfcGFyYW1fdCBwYXJhbTsKKyAgYnJsYXBpX3BhcmFtX3N1YnBhcmFtX3Qgc3VicGFyYW07CisgIGJybGFwaV9wYXJhbV9mbGFnc190IGZsYWdzOworCisgIENIRUNLRVJSKCAoc2l6ZSA9PSBzaXplb2YoYnJsYXBpX3BhcmFtUmVxdWVzdFBhY2tldF90KSksIEJSTEFQSV9FUlJPUl9JTlZBTElEX1BBQ0tFVCwgIndyb25nIHNpemUgZm9yIHBhcmFtUmVxdWVzdCBwYWNrZXQ6ICVsdSB2cyAlbHUiLCAodW5zaWduZWQgbG9uZykgc2l6ZSwgKHVuc2lnbmVkIGxvbmcpIHNpemVvZihicmxhcGlfcGFyYW1SZXF1ZXN0UGFja2V0X3QpKTsKKyAgZmxhZ3MgPSBudG9obChwYXJhbVJlcXVlc3QtPmZsYWdzKTsKKyAgcGFyYW0gPSBudG9obChwYXJhbVJlcXVlc3QtPnBhcmFtKTsKKworICBpZiAocGFyYW0gPj0gc2l6ZW9mKHBhcmFtRGlzcGF0Y2gpIC8gc2l6ZW9mKCpwYXJhbURpc3BhdGNoKSkgeworICAgIFdFUlIoYy0+ZmQsIEJSTEFQSV9FUlJPUl9JTlZBTElEX1BBUkFNRVRFUiwgInVua25vd24gcGFyYW1ldGVyICV1IiwgcGFyYW0pOworICAgIHJldHVybiAwOworICB9CisKKyAgUGFyYW1SZWFkZXIgKnJlYWRIYW5kbGVyID0gcGFyYW1EaXNwYXRjaFtwYXJhbV0ucmVhZDsKKyAgLyogQ2hlY2sgYWdhaW5zdCBub24tcmVhZGFibGUgcGFyYW1ldGVycyAqLworICBpZiAoIXJlYWRIYW5kbGVyKSB7CisgICAgV0VSUihjLT5mZCwgQlJMQVBJX0VSUk9SX0lOVkFMSURfUEFSQU1FVEVSLCAicGFyYW1ldGVyICV1IG5vdCBhdmFpbGFibGUgZm9yIHJlYWRpbmciLCBwYXJhbSk7CisgICAgcmV0dXJuIDA7CisgIH0KKworICBpZiAoIWNoZWNrUGFyYW1Mb2NhbEdsb2JhbChjLCBwYXJhbSwgZmxhZ3MpKQorICAgIHJldHVybiAwOworCisgIHN1YnBhcmFtID0gKGJybGFwaV9wYXJhbV9zdWJwYXJhbV90KW50b2hsKHBhcmFtUmVxdWVzdC0+c3VicGFyYW1faGkpIDw8IDMyIHwgbnRvaGwocGFyYW1SZXF1ZXN0LT5zdWJwYXJhbV9sbyk7CisgIGlmICgoZmxhZ3MgJiBCUkxBUElfUEFSQU1GX1NVQlNDUklCRSkgJiYKKyAgICAgIChmbGFncyAmIEJSTEFQSV9QQVJBTUZfVU5TVUJTQ1JJQkUpKSB7CisgICAgV0VSUihjLT5mZCwgQlJMQVBJX0VSUk9SX0lOVkFMSURfUEFSQU1FVEVSLCAic3Vic2NyaWJlIGFuZCB1bnN1YnNjcmliZSBmbGFncyBib3RoIHNldCIpOworICAgIHJldHVybiAwOworICB9CisgIGxvY2tNdXRleCgmYXBpUGFyYW1NdXRleCk7CisgIGlmIChmbGFncyAmIEJSTEFQSV9QQVJBTUZfU1VCU0NSSUJFKSB7CisgICAgLyogc3Vic2NyaWJlIHRvIHBhcmFtZXRlciB1cGRhdGVzICovCisKKyAgICB7CisgICAgICBicmxhcGlfcGFyYW1fdCByb290ID0gcGFyYW1EaXNwYXRjaFtwYXJhbV0ucm9vdFBhcmFtZXRlcjsKKworICAgICAgaWYgKHJvb3QpIHsKKyAgICAgICAgV0VSUihjLT5mZCwgQlJMQVBJX0VSUk9SX0lOVkFMSURfUEFSQU1FVEVSLCAicGFyYW1ldGVyICV1IG5vdCBhdmFpbGFibGUgZm9yIHdhdGNoaW5nIC0gJXUgc2hvdWxkIGJlIHdhdGNoZWQgaW5zdGVhZCIsIHBhcmFtLCByb290KTsKKyAgICAgICAgdW5sb2NrTXV0ZXgoJmFwaVBhcmFtTXV0ZXgpOworICAgICAgICByZXR1cm4gMDsKKyAgICAgIH0KKyAgICB9CisKKyAgICBzdHJ1Y3QgU3Vic2NyaXB0aW9uICpzOworICAgIGxvY2tNdXRleCgmYXBpQ29ubmVjdGlvbnNNdXRleCk7CisgICAgaWYgKGZsYWdzICYgQlJMQVBJX1BBUkFNRl9HTE9CQUwpCisgICAgICBwYXJhbVN0YXRlW3BhcmFtXS5nbG9iYWxfc3Vic2NyaXB0aW9ucysrOworICAgIGVsc2UKKyAgICAgIHBhcmFtU3RhdGVbcGFyYW1dLmxvY2FsX3N1YnNjcmlwdGlvbnMrKzsKKyAgICBzID0gbWFsbG9jKHNpemVvZigqcykpOworICAgIHMtPnBhcmFtZXRlciA9IHBhcmFtOworICAgIHMtPnN1YnBhcmFtID0gc3VicGFyYW07CisgICAgcy0+ZmxhZ3MgPSBmbGFnczsKKyAgICBzLT5uZXh0ID0gYy0+c3Vic2NyaXB0aW9ucy5uZXh0OworICAgIHMtPnByZXYgPSAmYy0+c3Vic2NyaXB0aW9uczsKKyAgICBzLT5uZXh0LT5wcmV2ID0gczsKKyAgICBzLT5wcmV2LT5uZXh0ID0gczsKKyAgICB1bmxvY2tNdXRleCgmYXBpQ29ubmVjdGlvbnNNdXRleCk7CisgIH0gZWxzZSBpZiAoZmxhZ3MgJiBCUkxBUElfUEFSQU1GX1VOU1VCU0NSSUJFKSB7CisgICAgLyogdW5zdWJzY3JpYmUgZnJvbSBwYXJhbWV0ZXIgdXBkYXRlcyAqLworICAgIHN0cnVjdCBTdWJzY3JpcHRpb24gKnM7CisgICAgbG9ja011dGV4KCZhcGlDb25uZWN0aW9uc011dGV4KTsKKyAgICBmb3IgKHMgPSBjLT5zdWJzY3JpcHRpb25zLm5leHQ7IHMhPSZjLT5zdWJzY3JpcHRpb25zOyBzPXMtPm5leHQpIHsKKyAgICAgIGlmIChzLT5wYXJhbWV0ZXIgPT0gcGFyYW0KKwkgICYmIChzLT5mbGFncyAmIEJSTEFQSV9QQVJBTUZfR0xPQkFMKSA9PSAoZmxhZ3MgJiBCUkxBUElfUEFSQU1GX0dMT0JBTCkpCisJYnJlYWs7CisgICAgfQorICAgIGlmIChzICE9ICZjLT5zdWJzY3JpcHRpb25zKSB7CisgICAgICBpZiAoZmxhZ3MgJiBCUkxBUElfUEFSQU1GX0dMT0JBTCkKKyAgICAgICAgcGFyYW1TdGF0ZVtwYXJhbV0uZ2xvYmFsX3N1YnNjcmlwdGlvbnMtLTsKKyAgICAgIGVsc2UKKyAgICAgICAgcGFyYW1TdGF0ZVtwYXJhbV0ubG9jYWxfc3Vic2NyaXB0aW9ucy0tOworICAgICAgcy0+bmV4dC0+cHJldiA9IHMtPnByZXY7CisgICAgICBzLT5wcmV2LT5uZXh0ID0gcy0+bmV4dDsKKyAgICAgIGZyZWUocyk7CisgICAgfSBlbHNlIHsKKyAgICAgIFdFUlIoYy0+ZmQsIEJSTEFQSV9FUlJPUl9JTlZBTElEX1BBUkFNRVRFUiwgIndhcyBub3Qgc3Vic2NyaWJlZCIpOworICAgICAgdW5sb2NrTXV0ZXgoJmFwaVBhcmFtTXV0ZXgpOworICAgICAgdW5sb2NrTXV0ZXgoJmFwaUNvbm5lY3Rpb25zTXV0ZXgpOworICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIHVubG9ja011dGV4KCZhcGlDb25uZWN0aW9uc011dGV4KTsKKyAgfQorICBpZiAoZmxhZ3MgJiBCUkxBUElfUEFSQU1GX0dFVCkgeyAvKiBBY2sgYnkgc2VuZGluZyBwYXJhbWV0ZXIgdmFsdWUgKi8KKyAgICBicmxhcGlfcGFja2V0X3QgcmVzcG9uc2U7CisgICAgYnJsYXBpX3BhcmFtVmFsdWVQYWNrZXRfdCAqcGFyYW1WYWx1ZSA9ICZyZXNwb25zZS5wYXJhbVZhbHVlOworICAgIHBhcmFtVmFsdWUtPmZsYWdzID0gaHRvbmwoZmxhZ3MgJiBCUkxBUElfUEFSQU1GX0dMT0JBTCk7CisgICAgcGFyYW1WYWx1ZS0+cGFyYW0gPSBwYXJhbVJlcXVlc3QtPnBhcmFtOworICAgIHBhcmFtVmFsdWUtPnN1YnBhcmFtX2hpID0gcGFyYW1SZXF1ZXN0LT5zdWJwYXJhbV9oaTsKKyAgICBwYXJhbVZhbHVlLT5zdWJwYXJhbV9sbyA9IHBhcmFtUmVxdWVzdC0+c3VicGFyYW1fbG87CisgICAgc2l6ZSA9IHNpemVvZihwYXJhbVZhbHVlLT5kYXRhKTsKKyAgICBjb25zdCBjaGFyICplcnJvciA9IHJlYWRIYW5kbGVyKGMsIHBhcmFtLCBzdWJwYXJhbSwgZmxhZ3MsIHBhcmFtVmFsdWUtPmRhdGEsICZzaXplKTsKKworICAgIGlmIChlcnJvcikgeworICAgICAgV0VSUihjLT5mZCwgQlJMQVBJX0VSUk9SX0lOVkFMSURfUEFSQU1FVEVSLCAicGFyYW1ldGVyICV1IHJlYWQgZXJyb3I6ICVzIiwgcGFyYW0sIGVycm9yKTsKKyAgICB9IGVsc2UgeworICAgICAgX2JybGFwaV9odG9uUGFyYW1ldGVyKHBhcmFtLCBwYXJhbVZhbHVlLCBzaXplKTsKKyAgICAgIHNpemUgKz0gc2l6ZW9mKGZsYWdzKSArIHNpemVvZihwYXJhbSkgKyBzaXplb2Yoc3VicGFyYW0pOworICAgICAgYnJsYXBpc2VydmVyX3dyaXRlUGFja2V0KGMtPmZkLEJSTEFQSV9QQUNLRVRfUEFSQU1fVkFMVUUscGFyYW1WYWx1ZSxzaXplKTsKKyAgICB9CisgIH0gZWxzZSB7IC8qIEFjayB3aXRoIGFjayAqLworICAgIHdyaXRlQWNrKGMtPmZkKTsKKyAgfQorICB1bmxvY2tNdXRleCgmYXBpUGFyYW1NdXRleCk7CisgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50IGhhbmRsZVN5bmMoQ29ubmVjdGlvbiAqYywgYnJsYXBpX3BhY2tldFR5cGVfdCB0eXBlLCBicmxhcGlfcGFja2V0X3QgKnBhY2tldCwgc2l6ZV90IHNpemUpCit7CisgIHdyaXRlQWNrKGMtPmZkKTsKKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBQYWNrZXRIYW5kbGVycyBwYWNrZXRIYW5kbGVycyA9IHsKKyAgaGFuZGxlR2V0RHJpdmVyTmFtZSwgaGFuZGxlR2V0TW9kZWxJZGVudGlmaWVyLCBoYW5kbGVHZXREaXNwbGF5U2l6ZSwKKyAgaGFuZGxlRW50ZXJUdHlNb2RlLCBoYW5kbGVTZXRGb2N1cywgaGFuZGxlTGVhdmVUdHlNb2RlLAorICBoYW5kbGVLZXlSYW5nZXMsIGhhbmRsZUtleVJhbmdlcywgaGFuZGxlV3JpdGUsCisgIGhhbmRsZUVudGVyUmF3TW9kZSwgaGFuZGxlTGVhdmVSYXdNb2RlLCBoYW5kbGVQYWNrZXQsCisgIGhhbmRsZVN1c3BlbmREcml2ZXIsIGhhbmRsZVJlc3VtZURyaXZlciwKKyAgaGFuZGxlUGFyYW1WYWx1ZSwgaGFuZGxlUGFyYW1SZXF1ZXN0LAorICBoYW5kbGVTeW5jLAorfTsKKworc3RhdGljIHZvaWQgaGFuZGxlTmV3Q29ubmVjdGlvbihDb25uZWN0aW9uICpjKQoreworICBicmxhcGlfcGFja2V0X3QgdmVyc2lvblBhY2tldDsKKyAgdmVyc2lvblBhY2tldC52ZXJzaW9uLnByb3RvY29sVmVyc2lvbiA9IGh0b25sKEJSTEFQSV9QUk9UT0NPTF9WRVJTSU9OKTsKKworICBicmxhcGlzZXJ2ZXJfd3JpdGVQYWNrZXQoYy0+ZmQsQlJMQVBJX1BBQ0tFVF9WRVJTSU9OLCZ2ZXJzaW9uUGFja2V0LmRhdGEsc2l6ZW9mKHZlcnNpb25QYWNrZXQudmVyc2lvbikpOworfQorCitzdGF0aWMgaW50CitoYXNLZXlGaWxlKGNvbnN0IGNoYXIgKmF1dGgpCit7CisgIGlmIChpc0Fic29sdXRlUGF0aChhdXRoKSkKKyAgICByZXR1cm4gMTsKKyAgaWYgKCFzdHJuY21wKGF1dGgsImtleWZpbGU6IiwgOCkpCisgICAgcmV0dXJuIDE7CisgIGlmIChzdHJzdHIoYXV0aCwiK2tleWZpbGU6IikpCisgICAgcmV0dXJuIDE7CisgIHJldHVybiAwOworfQorCisvKiBGdW5jdGlvbiA6IGhhbmRsZVVuYXV0aG9yaXplZENvbm5lY3Rpb24gKi8KKy8qIFJldHVybnMgMSBpZiBjb25uZWN0aW9uIGhhcyB0byBiZSByZW1vdmVkICovCitzdGF0aWMgaW50IGhhbmRsZVVuYXV0aG9yaXplZENvbm5lY3Rpb24oQ29ubmVjdGlvbiAqYywgYnJsYXBpX3BhY2tldFR5cGVfdCB0eXBlLCBicmxhcGlfcGFja2V0X3QgKnBhY2tldCwgc2l6ZV90IHNpemUpCit7CisgIGlmIChjLT5hdXRoID09IC0xKSB7CisgICAgaWYgKHR5cGUgIT0gQlJMQVBJX1BBQ0tFVF9WRVJTSU9OKSB7CisgICAgICBXRVJSKGMtPmZkLCBCUkxBUElfRVJST1JfUFJPVE9DT0xfVkVSU0lPTiwgIndyb25nIHBhY2tldCB0eXBlIChzaG91bGQgYmUgdmVyc2lvbikiKTsKKyAgICAgIHJldHVybiAxOworICAgIH0KKworICAgIHsKKyAgICAgIGJybGFwaV92ZXJzaW9uUGFja2V0X3QgKnZlcnNpb25QYWNrZXQgPSAmcGFja2V0LT52ZXJzaW9uOworICAgICAgYnJsYXBpX3BhY2tldF90IHNlcnZlclBhY2tldDsKKyAgICAgIGJybGFwaV9hdXRoU2VydmVyUGFja2V0X3QgKmF1dGhQYWNrZXQgPSAmc2VydmVyUGFja2V0LmF1dGhTZXJ2ZXI7CisgICAgICBpbnQgbmJtZXRob2RzID0gMDsKKworICAgICAgaWYgKHNpemU8c2l6ZW9mKCp2ZXJzaW9uUGFja2V0KSkgeworCVdFUlIoYy0+ZmQsIEJSTEFQSV9FUlJPUl9QUk9UT0NPTF9WRVJTSU9OLCAid3JvbmcgcHJvdG9jb2wgdmVyc2lvbiIpOworCXJldHVybiAxOworICAgICAgfQorCisgICAgICBjLT5jbGllbnRWZXJzaW9uID0gbnRvaGwodmVyc2lvblBhY2tldC0+cHJvdG9jb2xWZXJzaW9uKTsKKyAgICAgIGlmIChjLT5jbGllbnRWZXJzaW9uIDwgOCkgeworCS8qIFdlIG9ubHkgcHJvdmlkZSBjb21wYXRpYmlsaXR5IHdpdGggdmVyc2lvbiA4IGFuZCBsYXRlci4gKi8KKwlXRVJSKGMtPmZkLCBCUkxBUElfRVJST1JfUFJPVE9DT0xfVkVSU0lPTiwgInByb3RvY29sIHZlcnNpb24gJSJQUkl1MzIiIDwgOCBpcyBub3Qgc3VwcG9ydGVkIiwgYy0+Y2xpZW50VmVyc2lvbik7CisJcmV0dXJuIDE7CisgICAgICB9CisKKyAgICAgIC8qIFRPRE86IG1vdmUgdGhpcyBpbnNpZGUgYXV0aC5jICovCisgICAgICBpZiAoYXV0aERlc2NyaXB0b3IgJiYgYXV0aFBlcmZvcm0oYXV0aERlc2NyaXB0b3IsIGMtPmZkKSkgeworCWF1dGhQYWNrZXQtPnR5cGVbbmJtZXRob2RzKytdID0gaHRvbmwoQlJMQVBJX0FVVEhfTk9ORSk7CisJdW5hdXRoQ29ubmVjdGlvbnMtLTsKKwljLT5hdXRoID0gMTsKKyAgICAgIH0gZWxzZSB7CisJaWYgKGhhc0tleUZpbGUoYXV0aCkpCisJICBhdXRoUGFja2V0LT50eXBlW25ibWV0aG9kcysrXSA9IGh0b25sKEJSTEFQSV9BVVRIX0tFWSk7CisJYy0+YXV0aCA9IDA7CisgICAgICB9CisKKyAgICAgIGJybGFwaXNlcnZlcl93cml0ZVBhY2tldChjLT5mZCxCUkxBUElfUEFDS0VUX0FVVEgsJnNlcnZlclBhY2tldCxuYm1ldGhvZHMqc2l6ZW9mKGF1dGhQYWNrZXQtPnR5cGUpKTsKKworICAgICAgcmV0dXJuIDA7CisgICAgfQorICB9CisKKyAgaWYgKHR5cGUhPUJSTEFQSV9QQUNLRVRfQVVUSCkgeworICAgIFdFUlIoYy0+ZmQsIEJSTEFQSV9FUlJPUl9QUk9UT0NPTF9WRVJTSU9OLCAid3JvbmcgcGFja2V0IHR5cGUgKHNob3VsZCBiZSBhdXRoKSIpOworICAgIHJldHVybiAxOworICB9CisKKyAgeworICAgIHNpemVfdCBhdXRoS2V5TGVuZ3RoID0gMDsKKyAgICBicmxhcGlfcGFja2V0X3QgYXV0aEtleTsKKyAgICBpbnQgYXV0aENvcnJlY3QgPSAwOworICAgIGJybGFwaV9hdXRoQ2xpZW50UGFja2V0X3QgKmF1dGhQYWNrZXQgPSAmcGFja2V0LT5hdXRoQ2xpZW50OworICAgIGludCByZW1haW5pbmcgPSBzaXplOworICAgIHVpbnQzMl90IGF1dGhUeXBlOworCisgICAgaWYgKCFzdHJjbXAoYXV0aCwibm9uZSIpKQorICAgICAgYXV0aENvcnJlY3QgPSAxOworICAgIGVsc2UgeworICAgICAgYXV0aFR5cGUgPSBudG9obChhdXRoUGFja2V0LT50eXBlKTsKKyAgICAgIHJlbWFpbmluZyAtPSBzaXplb2YoYXV0aFBhY2tldC0+dHlwZSk7CisKKyAgICAvKiBUT0RPOiBtb3ZlIHRoaXMgaW5zaWRlIGF1dGguYyAqLworICAgICAgc3dpdGNoKGF1dGhUeXBlKSB7CisJY2FzZSBCUkxBUElfQVVUSF9OT05FOgorCSAgaWYgKGF1dGhEZXNjcmlwdG9yKSBhdXRoQ29ycmVjdCA9IGF1dGhQZXJmb3JtKGF1dGhEZXNjcmlwdG9yLCBjLT5mZCk7CisJICBicmVhazsKKwljYXNlIEJSTEFQSV9BVVRIX0tFWToKKwkgIGlmIChoYXNLZXlGaWxlKGF1dGgpKSB7CisJICAgIGNoYXIgKnBhdGggPSBicmxhcGlzZXJ2ZXJfZ2V0S2V5RmlsZShhdXRoKTsKKwkgICAgaW50IHJldCA9IGJybGFwaXNlcnZlcl9sb2FkQXV0aEtleShwYXRoLCZhdXRoS2V5TGVuZ3RoLCZhdXRoS2V5KTsKKwkgICAgaWYgKHJldD09LTEpIHsKKwkgICAgICBsb2dNZXNzYWdlKExPR19XQVJOSU5HLCJVbmFibGUgdG8gbG9hZCBBUEkgYXV0aG9yaXphdGlvbiBrZXkgZnJvbSAlczogJXMgaW4gJXMuIFlvdSBtYXkgdXNlIHBhcmFtZXRlciBhdXRoPW5vbmUgaWYgeW91IGRvbid0IHdhbnQgYW55IGF1dGhvcml6YXRpb24gKGRhbmdlcm91cykiLCBwYXRoLCBzdHJlcnJvcihicmxhcGlfbGliY2Vycm5vKSwgYnJsYXBpX2VycmZ1bik7CisJICAgICAgZnJlZShwYXRoKTsKKwkgICAgICBicmVhazsKKwkgICAgfQorCSAgICBmcmVlKHBhdGgpOworCSAgICBsb2dNZXNzYWdlKExPR19DQVRFR09SWShTRVJWRVJfRVZFTlRTKSwgImF1dGhvcml6YXRpb24ga2V5IGxvYWRlZCIpOworCSAgICBhdXRoQ29ycmVjdCA9IChyZW1haW5pbmc9PWF1dGhLZXlMZW5ndGgpICYmICghbWVtY21wKCZhdXRoUGFja2V0LT5rZXksICZhdXRoS2V5LCBhdXRoS2V5TGVuZ3RoKSk7CisJICAgIG1lbXNldCgmYXV0aEtleSwgMCwgYXV0aEtleUxlbmd0aCk7CisJICAgIG1lbXNldCgmYXV0aFBhY2tldC0+a2V5LCAwLCByZW1haW5pbmcpOworCSAgfQorCSAgYnJlYWs7CisJZGVmYXVsdDoKKwkgIGxvZ01lc3NhZ2UoTE9HX0NBVEVHT1JZKFNFUlZFUl9FVkVOVFMpLCAidW5zdXBwb3J0ZWQgYXV0aG9yaXphdGlvbiBtZXRob2QgJSJQUklkMzIsIGF1dGhUeXBlKTsKKwkgIGJyZWFrOworICAgICAgfQorICAgIH0KKworICAgIGlmICghYXV0aENvcnJlY3QpIHsKKyAgICAgIHdyaXRlRXJyb3IoYy0+ZmQsIEJSTEFQSV9FUlJPUl9BVVRIRU5USUNBVElPTik7CisgICAgICBsb2dNZXNzYWdlKExPR19XQVJOSU5HLCAiQnJsQVBJIGNvbm5lY3Rpb24gZmQ9JSJQUklmZCIgZmFpbGVkIGF1dGhvcml6YXRpb24iLCBjLT5mZCk7CisgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICB1bmF1dGhDb25uZWN0aW9ucy0tOworICAgIHdyaXRlQWNrKGMtPmZkKTsKKyAgICBjLT5hdXRoID0gMTsKKyAgICByZXR1cm4gMDsKKyAgfQorfQorCisvKiBGdW5jdGlvbiA6IHByb2Nlc3NSZXF1ZXN0ICovCisvKiBSZWFkcyBhIHBhY2tldCBmcm8gYy0+ZmQgYW5kIHByb2Nlc3NlcyBpdCAqLworLyogUmV0dXJucyAxIGlmIGNvbm5lY3Rpb24gaGFzIHRvIGJlIHJlbW92ZWQgKi8KKy8qIElmIEVPRiBpcyByZWFjaGVkLCBjbG9zZXMgZmQgYW5kIGZyZWVzIGFsbCBhc3NvY2lhdGVkIHJlc291cmNlcyAqLworc3RhdGljIGludCBwcm9jZXNzUmVxdWVzdChDb25uZWN0aW9uICpjLCBQYWNrZXRIYW5kbGVycyAqaGFuZGxlcnMpCit7CisgIFBhY2tldEhhbmRsZXIgcCA9IE5VTEw7CisgIGludCByZXM7CisgIHNzaXplX3Qgc2l6ZTsKKyAgYnJsYXBpX3BhY2tldF90ICpwYWNrZXQgPSAoYnJsYXBpX3BhY2tldF90ICopIGMtPnBhY2tldC5jb250ZW50OworICBicmxhcGlfcGFja2V0VHlwZV90IHR5cGU7CisgIHJlcyA9IGJybGFwaV9fcmVhZFBhY2tldCgmYy0+cGFja2V0LCBjLT5mZCk7CisgIGlmIChyZXM9PTApIHJldHVybiAwOyAvKiBObyBwYWNrZXQgcmVhZHkgKi8KKyAgaWYgKHJlczwwKSB7CisgICAgaWYgKHJlcz09LTEpIHsKKyAgICAgIGxvZ01lc3NhZ2UoTE9HX1dBUk5JTkcsInJlYWQgOiAlcyAoY29ubmVjdGlvbiBvbiBmZCAlIlBSSWZkIikiLHN0cmVycm9yKGVycm5vKSxjLT5mZCk7CisgICAgfSBlbHNlIHsKKyAgICAgIGxvZ01lc3NhZ2UoTE9HX0NBVEVHT1JZKFNFUlZFUl9FVkVOVFMpLCAiY2xvc2luZyBjb25uZWN0aW9uIG9uIGZkICUiUFJJZmQsYy0+ZmQpOworICAgIH0KKyAgICBpZiAoYy0+cmF3KSB7CisgICAgICBjLT5yYXcgPSAwOworICAgICAgbG9ja011dGV4KCZhcGlSYXdNdXRleCk7CisgICAgICByYXdDb25uZWN0aW9uID0gTlVMTDsKKyAgICAgIHVubG9ja011dGV4KCZhcGlSYXdNdXRleCk7CisgICAgICBsb2dNZXNzYWdlKExPR19XQVJOSU5HLCJDbGllbnQgb24gZmQgJSJQUklmZCIgZGlkIG5vdCBnaXZlIHVwIHJhdyBtb2RlIHByb3Blcmx5IixjLT5mZCk7CisgICAgICByZXNldERldmljZSgpOworICAgIH0gZWxzZSBpZiAoYy0+c3VzcGVuZCkgeworICAgICAgYy0+c3VzcGVuZCA9IDA7CisgICAgICBsb2NrTXV0ZXgoJmFwaVJhd011dGV4KTsKKyAgICAgIHN1c3BlbmRDb25uZWN0aW9uID0gTlVMTDsKKyAgICAgIHVubG9ja011dGV4KCZhcGlSYXdNdXRleCk7CisgICAgICBsb2dNZXNzYWdlKExPR19XQVJOSU5HLCJDbGllbnQgb24gZmQgJSJQUklmZCIgZGlkIG5vdCBnaXZlIHVwIHN1c3BlbmRlZCBtb2RlIHByb3Blcmx5IixjLT5mZCk7CisgICAgICBpZiAoIXJlc3VtZURyaXZlcigpKQorCWxvZ01lc3NhZ2UoTE9HX1dBUk5JTkcsIkNvdWxkbid0IHJlc3VtZSBicmFpbGxlIGRyaXZlciIpOworICAgIH0KKyAgICBpZiAoYy0+dHR5KSB7CisgICAgICBsb2dNZXNzYWdlKExPR19DQVRFR09SWShTRVJWRVJfRVZFTlRTKSwgImNsaWVudCBvbiBmZCAlIlBSSWZkIiBkaWQgbm90IGdpdmUgdXAgY29udHJvbCBvZiB0dHkgJSMwMTB4IHByb3Blcmx5IixjLT5mZCxjLT50dHktPm51bWJlcik7CisgICAgICBkb0xlYXZlVHR5KGMpOworICAgIH0KKyAgICByZXR1cm4gMTsKKyAgfQorICBzaXplID0gYy0+cGFja2V0LmhlYWRlci5zaXplOworICB0eXBlID0gYy0+cGFja2V0LmhlYWRlci50eXBlOworCisgIGlmIChjLT5hdXRoIT0xKSByZXR1cm4gaGFuZGxlVW5hdXRob3JpemVkQ29ubmVjdGlvbihjLCB0eXBlLCBwYWNrZXQsIHNpemUpOworCisgIGlmIChzaXplPkJSTEFQSV9NQVhQQUNLRVRTSVpFKSB7CisgICAgbG9nTWVzc2FnZShMT0dfV0FSTklORywgIkRpc2NhcmRpbmcgdG9vIGxhcmdlIHBhY2tldCBvZiB0eXBlICVzIG9uIGZkICUiUFJJZmQsYnJsYXBpc2VydmVyX2dldFBhY2tldFR5cGVOYW1lKHR5cGUpLCBjLT5mZCk7CisgICAgcmV0dXJuIDA7CisgIH0KKyAgc3dpdGNoICh0eXBlKSB7CisgICAgY2FzZSBCUkxBUElfUEFDS0VUX0dFVERSSVZFUk5BTUU6IHAgPSBoYW5kbGVycy0+Z2V0RHJpdmVyTmFtZTsgYnJlYWs7CisgICAgY2FzZSBCUkxBUElfUEFDS0VUX0dFVE1PREVMSUQ6IHAgPSBoYW5kbGVycy0+Z2V0TW9kZWxJZGVudGlmaWVyOyBicmVhazsKKyAgICBjYXNlIEJSTEFQSV9QQUNLRVRfR0VURElTUExBWVNJWkU6IHAgPSBoYW5kbGVycy0+Z2V0RGlzcGxheVNpemU7IGJyZWFrOworICAgIGNhc2UgQlJMQVBJX1BBQ0tFVF9FTlRFUlRUWU1PREU6IHAgPSBoYW5kbGVycy0+ZW50ZXJUdHlNb2RlOyBicmVhazsKKyAgICBjYXNlIEJSTEFQSV9QQUNLRVRfU0VURk9DVVM6IHAgPSBoYW5kbGVycy0+c2V0Rm9jdXM7IGJyZWFrOworICAgIGNhc2UgQlJMQVBJX1BBQ0tFVF9MRUFWRVRUWU1PREU6IHAgPSBoYW5kbGVycy0+bGVhdmVUdHlNb2RlOyBicmVhazsKKyAgICBjYXNlIEJSTEFQSV9QQUNLRVRfSUdOT1JFS0VZUkFOR0VTOiBwID0gaGFuZGxlcnMtPmlnbm9yZUtleVJhbmdlczsgYnJlYWs7CisgICAgY2FzZSBCUkxBUElfUEFDS0VUX0FDQ0VQVEtFWVJBTkdFUzogcCA9IGhhbmRsZXJzLT5hY2NlcHRLZXlSYW5nZXM7IGJyZWFrOworICAgIGNhc2UgQlJMQVBJX1BBQ0tFVF9XUklURTogcCA9IGhhbmRsZXJzLT53cml0ZTsgYnJlYWs7CisgICAgY2FzZSBCUkxBUElfUEFDS0VUX0VOVEVSUkFXTU9ERTogcCA9IGhhbmRsZXJzLT5lbnRlclJhd01vZGU7IGJyZWFrOworICAgIGNhc2UgQlJMQVBJX1BBQ0tFVF9MRUFWRVJBV01PREU6IHAgPSBoYW5kbGVycy0+bGVhdmVSYXdNb2RlOyBicmVhazsKKyAgICBjYXNlIEJSTEFQSV9QQUNLRVRfUEFDS0VUOiBwID0gaGFuZGxlcnMtPnBhY2tldDsgYnJlYWs7CisgICAgY2FzZSBCUkxBUElfUEFDS0VUX1NVU1BFTkREUklWRVI6IHAgPSBoYW5kbGVycy0+c3VzcGVuZERyaXZlcjsgYnJlYWs7CisgICAgY2FzZSBCUkxBUElfUEFDS0VUX1JFU1VNRURSSVZFUjogcCA9IGhhbmRsZXJzLT5yZXN1bWVEcml2ZXI7IGJyZWFrOworICAgIGNhc2UgQlJMQVBJX1BBQ0tFVF9QQVJBTV9WQUxVRTogcCA9IGhhbmRsZXJzLT5wYXJhbWV0ZXJWYWx1ZTsgYnJlYWs7CisgICAgY2FzZSBCUkxBUElfUEFDS0VUX1BBUkFNX1JFUVVFU1Q6IHAgPSBoYW5kbGVycy0+cGFyYW1ldGVyUmVxdWVzdDsgYnJlYWs7CisgICAgY2FzZSBCUkxBUElfUEFDS0VUX1NZTkNIUk9OSVpFOiBwID0gaGFuZGxlcnMtPnN5bmM7IGJyZWFrOworICB9CisgIGlmIChwIT1OVUxMKSB7CisgICAgbG9nUmVxdWVzdCh0eXBlLCBjLT5mZCk7CisgICAgcChjLCB0eXBlLCBwYWNrZXQsIHNpemUpOworICB9IGVsc2UgeworICAgIFdFWEMoYy0+ZmQsQlJMQVBJX0VSUk9SX1VOS05PV05fSU5TVFJVQ1RJT04sIHR5cGUsIHBhY2tldCwgc2l6ZSwgInVua25vd24gcGFja2V0IHR5cGUgJXgiLCB0eXBlKTsKKyAgfQorICByZXR1cm4gMDsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiogU09DS0VUUyBBTkQgQ09OTkVDVElPTlMgTUFOQUdJTkcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKgorICogVGhlcmUgaXMgb25lIHNlcnZlciB0aHJlYWQgd2hpY2ggZmlyc3QgbGF1bmNoZXMgYmluZGluZyB0aHJlYWRzIGFuZCB0aGVuCisgKiBlbnRlcnMgaW5maW5pdGUgbG9vcCB0cnlpbmcgdG8gYWNjZXB0IGNvbm5lY3Rpb25zLCByZWFkIHBhY2tldHMsIGV0Yy4KKyAqCisgKiBCaW5kaW5nIHRocmVhZHMgbG9vcCB0cnlpbmcgdG8gZXN0YWJsaXNoIHNvbWUgc29ja2V0LCB3YWl0aW5nIGZvcgorICogZmlsZXN5c3RlbXMgdG8gYmUgcmVhZC93cml0ZSBvciBuZXR3b3JrIHRvIGJlIGNvbmZpZ3VyZWQuCisgKgorICogT24gd2luZG93cywgV1NBRXZlbnRTZWxlY3QoKSBpcyBlbXVsYXRlZCBieSBhIHN0YW5kYWxvbmUgdGhyZWFkLgorICovCisKKy8qIEZ1bmN0aW9uOiBsb29wQmluZCAqLworLyogdHJpZXMgYmluZGluZyB3aGlsZSB0ZW1wb3JhcnkgZXJyb3JzIG9jY3VyICovCitzdGF0aWMgaW50IGxvb3BCaW5kKFNvY2tldERlc2NyaXB0b3IgZmQsIGNvbnN0IHN0cnVjdCBzb2NrYWRkciAqYWRkcmVzcywgc29ja2xlbl90IGxlbmd0aCkKK3sKKyAgY2hhciBidWZmZXJbMFgxMDBdID0gezB9OworICBjb25zdCBpbnQgbWF4aW11bSA9IDEwMDsKKyAgaW50IGRlbGF5ID0gMTsKKyAgaW50IHJlczsKKworICB3aGlsZSAoMSkgeworICAgIHsKKyAgICAgIGxvY2tVbWFzaygpOworICAgICAgbW9kZV90IG9yaWdpbmFsTWFzayA9IHVtYXNrKDApOworICAgICAgcmVzID0gYmluZChmZCwgYWRkcmVzcywgbGVuZ3RoKTsKKyAgICAgIHVtYXNrKG9yaWdpbmFsTWFzayk7CisgICAgICB1bmxvY2tVbWFzaygpOworICAgIH0KKworICAgIGlmIChyZXMgIT0gLTEpIGJyZWFrOworICAgIGlmICghcnVubmluZykgYnJlYWs7CisKKyAgICBpZiAoCisjaWZkZWYgRUFERFJOT1RBVkFJTAorICAgICAgICAoZXJybm8gIT0gRUFERFJOT1RBVkFJTCkgJiYKKyNlbmRpZiAvKiBFQUREUk5PVEFWQUlMICovCisjaWZkZWYgRUFERFJJTlVTRQorICAgICAgICAoZXJybm8gIT0gRUFERFJJTlVTRSkgJiYKKyNlbmRpZiAvKiBFQUREUklOVVNFICovCisgICAgICAgIChlcnJubyAhPSBFUk9GUykpIHsKKyAgICAgIGJyZWFrOworICAgIH0KKworICAgIGlmICghYnVmZmVyWzBdKSB7CisgICAgICBmb3JtYXRBZGRyZXNzKGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlciksIGFkZHJlc3MsIGxlbmd0aCk7CisgICAgfQorCisgICAgbG9nTWVzc2FnZShMT0dfQ0FURUdPUlkoU0VSVkVSX0VWRU5UUyksICJiaW5kIHdhaXRpbmc6ICVzOiAlcyIsIGJ1ZmZlciwgc3RyZXJyb3IoZXJybm8pKTsKKyAgICBhcHByb3hpbWF0ZURlbGF5KGRlbGF5ICogTVNFQ1NfUEVSX1NFQyk7CisKKyAgICBkZWxheSA8PD0gMTsKKyAgICBkZWxheSA9IE1JTihkZWxheSwgbWF4aW11bSk7CisgIH0KKworICByZXR1cm4gcmVzOworfQorCitzdGF0aWMgU29ja2V0RGVzY3JpcHRvciBuZXdUY3BTb2NrZXQoaW50IGZhbWlseSwgaW50IHR5cGUsIGludCBwcm90b2NvbCwgY29uc3Qgc3RydWN0IHNvY2thZGRyICphZGRyLCBzb2NrbGVuX3QgbGVuKQoreworICBzdGF0aWMgY29uc3QgaW50IHllcyA9IDE7CisgIFNvY2tldERlc2NyaXB0b3IgZmQgPSBzb2NrZXQoZmFtaWx5LCB0eXBlLCBwcm90b2NvbCk7CisKKyAgaWYgKGZkICE9IElOVkFMSURfU09DS0VUX0RFU0NSSVBUT1IpIHsKKyAgLy9zZXRDbG9zZU9uRXhlYyhmZCwgMSk7CisKKyNpZmRlZiBTT19SRVVTRUFERFIKKyAgICBpZiAoc2V0c29ja29wdChmZCwgU09MX1NPQ0tFVCwgU09fUkVVU0VBRERSLAorICAgICAgICAgICAgICAgICAgIChjb25zdCB2b2lkICopJnllcywgc2l6ZW9mKHllcykpID09IC0xKSB7CisgICAgICBMb2dTb2NrZXRFcnJvcigic2V0c29ja29wdFtTT0NLRVQsUkVVU0VBRERSXSIpOworICAgIH0KKyNlbmRpZiAvKiBTT19SRVVTRUFERFIgKi8KKworI2lmZGVmIFNPTF9UQ1AKKyNpZmRlZiBUQ1BfTk9ERUxBWQorICAgIGlmIChzZXRzb2Nrb3B0KGZkLCBTT0xfVENQLCBUQ1BfTk9ERUxBWSwKKyAgICAgICAgICAgICAgICAgICAoY29uc3Qgdm9pZCAqKSZ5ZXMsIHNpemVvZih5ZXMpKSA9PSAtMSkgeworICAgICAgTG9nU29ja2V0RXJyb3IoInNldHNvY2tvcHRbVENQLE5PREVMQVldIik7CisgICAgfQorI2VuZGlmIC8qIFRDUF9OT0RFTEFZICovCisjZW5kaWYgLyogU09MX1RDUCAqLworCisgICAgaWYgKGxvb3BCaW5kKGZkLCBhZGRyLCBsZW4pICE9IC0xKSB7CisgICAgICBpZiAobGlzdGVuKGZkLCAxKSAhPSAtMSkgeworICAgICAgICByZXR1cm4gZmQ7CisgICAgICB9IGVsc2UgeworICAgICAgICBMb2dTb2NrZXRFcnJvcigibGlzdGVuIik7CisgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgIExvZ1NvY2tldEVycm9yKCJiaW5kIik7CisgICAgfQorCisgICAgY2xvc2VTb2NrZXREZXNjcmlwdG9yKGZkKTsKKyAgfSBlbHNlIHsKKyAgICBzZXRTb2NrZXRFcnJubygpOworCisjaWZkZWYgRUFGTk9TVVBQT1JUCisgICAgaWYgKGVycm5vICE9IEVBRk5PU1VQUE9SVCkKKyNlbmRpZiAvKiBFQUZOT1NVUFBPUlQgKi8KKyAgICAgIGxvZ01lc3NhZ2UoTE9HX1dBUk5JTkcsICJzb2NrZXQgYWxsb2NhdGlvbiBlcnJvcjogJXMiLCBzdHJlcnJvcihlcnJubykpOworICB9CisKKyAgcmV0dXJuIElOVkFMSURfU09DS0VUX0RFU0NSSVBUT1I7Cit9CisKKy8qIEZ1bmN0aW9uIDogY3JlYXRlVGNwU29ja2V0ICovCisvKiBDcmVhdGVzIHRoZSBsaXN0ZW5pbmcgc29ja2V0IGZvciBpbi1jb25uZWN0aW9ucyAqLworLyogUmV0dXJucyB0aGUgZGVzY3JpcHRvciwgb3IgLTEgaWYgYW4gZXJyb3Igb2NjdXJyZWQgKi8KK3N0YXRpYyBGaWxlRGVzY3JpcHRvciBjcmVhdGVUY3BTb2NrZXQoc3RydWN0IHNvY2tldEluZm8gKmluZm8pCit7CisgIFNvY2tldERlc2NyaXB0b3IgZmQgPSBJTlZBTElEX1NPQ0tFVF9ERVNDUklQVE9SOworCisjaWZkZWYgX19NSU5HVzMyX18KKyAgaWYgKGdldGFkZHJpbmZvUHJvYykgeworI2VuZGlmIC8qIF9fTUlOR1czMl9fICovCisKKyNpZiBkZWZpbmVkKEhBVkVfR0VUQUREUklORk8pIHx8IGRlZmluZWQoX19NSU5HVzMyX18pCisgIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYWRkcmluZm8gaGludHMgPSB7CisgICAgLmFpX2ZsYWdzID0gQUlfUEFTU0lWRSwKKyAgICAuYWlfZmFtaWx5ID0gUEZfVU5TUEVDLAorICAgIC5haV9zb2NrdHlwZSA9IFNPQ0tfU1RSRUFNCisgIH07CisKKyAgc3RydWN0IGFkZHJpbmZvICpyZXMsICpjdXI7CisgIGludCBlcnIgPSBnZXRhZGRyaW5mbyhpbmZvLT5ob3N0LCBpbmZvLT5wb3J0LCAmaGludHMsICZyZXMpOworCisgIGlmIChlcnIpIHsKKyAgICBsb2dNZXNzYWdlKExPR19XQVJOSU5HLAorICAgICAgICAgICAgICAgImdldGFkZHJpbmZvKCVzLCVzKTogIgorI2lmZGVmIEhBVkVfR0FJX1NUUkVSUk9SCisgICAgICAgICAgICAgICAiJXMiCisjZWxzZSAvKiBIQVZFX0dBSV9TVFJFUlJPUiAqLworICAgICAgICAgICAgICAgIiVkIgorI2VuZGlmIC8qIEhBVkVfR0FJX1NUUkVSUk9SICovCisgICAgICAgICAgICAgICAsIGluZm8tPmhvc3QKKyAgICAgICAgICAgICAgICwgaW5mby0+cG9ydAorI2lmZGVmIEhBVkVfR0FJX1NUUkVSUk9SCisgICAgICAgICAgICAgICAsCisjaWZkZWYgRUFJX1NZU1RFTQorICAgICAgICAgICAgICAgICAoZXJyID09IEVBSV9TWVNURU0pPyBzdHJlcnJvcihlcnJubyk6CisjZW5kaWYgLyogRUFJX1NZU1RFTSAqLworICAgICAgICAgICAgICAgICBnYWlfc3RyZXJyb3IoZXJyKQorI2Vsc2UgLyogSEFWRV9HQUlfU1RSRVJST1IgKi8KKyAgICAgICAgICAgICAgICwgZXJyCisjZW5kaWYgLyogSEFWRV9HQUlfU1RSRVJST1IgKi8KKyAgICApOworICAgIHJldHVybiBJTlZBTElEX0ZJTEVfREVTQ1JJUFRPUjsKKyAgfQorCisgIGZvciAoY3VyID0gcmVzOyBjdXI7IGN1ciA9IGN1ci0+YWlfbmV4dCkgeworICAgIGZkID0gbmV3VGNwU29ja2V0KGN1ci0+YWlfZmFtaWx5LCBjdXItPmFpX3NvY2t0eXBlLCBjdXItPmFpX3Byb3RvY29sLAorICAgICAgICAgICAgICAgICAgICAgIGN1ci0+YWlfYWRkciwgY3VyLT5haV9hZGRybGVuKTsKKworICAgIGlmIChmZCAhPSBJTlZBTElEX1NPQ0tFVF9ERVNDUklQVE9SKSBicmVhazsKKyAgfQorCisgIGlmICghY3VyKSBmZCA9IElOVkFMSURfU09DS0VUX0RFU0NSSVBUT1I7CisgIGZyZWVhZGRyaW5mbyhyZXMpOworI2VuZGlmIC8qIEhBVkVfR0VUQUREUklORk8gKi8KKworI2lmZGVmIF9fTUlOR1czMl9fCisgIH0gZWxzZSB7CisjZW5kaWYgLyogX19NSU5HVzMyX18gKi8KKworI2lmICFkZWZpbmVkKEhBVkVfR0VUQUREUklORk8pIHx8IGRlZmluZWQoX19NSU5HVzMyX18pCisgIHN0cnVjdCBob3N0ZW50ICpoZTsKKworICBzdHJ1Y3Qgc29ja2FkZHJfaW4gYWRkciA9IHsKKyAgICAuc2luX2ZhbWlseSA9IEFGX0lORVQKKyAgfTsKKworICBpZiAoIWluZm8tPnBvcnQpIHsKKyAgICBhZGRyLnNpbl9wb3J0ID0gaHRvbnMoQlJMQVBJX1NPQ0tFVFBPUlROVU0pOworICB9IGVsc2UgeworICAgIHVuc2lnbmVkIGludCBwb3J0OworCisgICAgaWYgKCFpc1Vuc2lnbmVkSW50ZWdlcigmcG9ydCwgaW5mby0+cG9ydCkpIHsKKyAgICAgIHN0cnVjdCBzZXJ2ZW50ICpzZTsKKworICAgICAgaWYgKCEoc2UgPSBnZXRzZXJ2YnluYW1lKGluZm8tPnBvcnQsICJ0Y3AiKSkpIHsKKyAgICAgICAgbG9nTWVzc2FnZShMT0dfRVJSLAorICAgICAgICAgICAgICAgICAgICJUQ1AgcG9ydCAlczogIgorI2lmZGVmIF9fTUlOR1czMl9fCisgICAgICAgICAgICAgICAgICAgIiVkIgorI2Vsc2UgLyogX19NSU5HVzMyX18gKi8KKyAgICAgICAgICAgICAgICAgICAiJXMiCisjZW5kaWYgLyogX19NSU5HVzMyX18gKi8KKyAgICAgICAgICAgICAgICAgICAsIGluZm8tPnBvcnQKKyNpZmRlZiBfX01JTkdXMzJfXworICAgICAgICAgICAgICAgICAgICwgV1NBR2V0TGFzdEVycm9yKCkKKyNlbHNlIC8qIF9fTUlOR1czMl9fICovCisgICAgICAgICAgICAgICAgICAgLCBoc3RyZXJyb3IoaF9lcnJubykKKyNlbmRpZiAvKiBfX01JTkdXMzJfXyAqLworCSk7CisKKwlyZXR1cm4gSU5WQUxJRF9GSUxFX0RFU0NSSVBUT1I7CisgICAgICB9CisKKyAgICAgIGFkZHIuc2luX3BvcnQgPSBzZS0+c19wb3J0OworICAgIH0gZWxzZSBpZiAoKHBvcnQgPiAwKSAmJiAocG9ydCA8PSBVSU5UMTZfTUFYKSkgeworICAgICAgYWRkci5zaW5fcG9ydCA9IGh0b25zKHBvcnQpOworICAgIH0gZWxzZSB7CisgICAgICBsb2dNZXNzYWdlKExPR19FUlIsICJpbnZhbGlkIFRDUCBwb3J0OiAlcyIsIGluZm8tPnBvcnQpOworICAgICAgcmV0dXJuIElOVkFMSURfRklMRV9ERVNDUklQVE9SOworICAgIH0KKyAgfQorCisgIGlmICghaW5mby0+aG9zdCkgeworICAgIGFkZHIuc2luX2FkZHIuc19hZGRyID0gaHRvbmwoSU5BRERSX0xPT1BCQUNLKTsKKyAgfSBlbHNlIGlmICgoYWRkci5zaW5fYWRkci5zX2FkZHIgPSBpbmV0X2FkZHIoaW5mby0+aG9zdCkpID09IGh0b25sKElOQUREUl9OT05FKSkgeworICAgIGlmICghKGhlID0gZ2V0aG9zdGJ5bmFtZShpbmZvLT5ob3N0KSkpIHsKKyAgICAgIGxvZ01lc3NhZ2UoTE9HX0VSUiwKKyAgICAgICAgICAgICAgICAgImdldGhvc3RieW5hbWUoJXMpOiAiCisjaWZkZWYgX19NSU5HVzMyX18KKyAgICAgICAgICAgICAgICAgIiVkIgorI2Vsc2UgLyogX19NSU5HVzMyX18gKi8KKyAgICAgICAgICAgICAgICAgIiVzIgorI2VuZGlmIC8qIF9fTUlOR1czMl9fICovCisgICAgICAgICAgICAgICAgICwgaW5mby0+aG9zdAorI2lmZGVmIF9fTUlOR1czMl9fCisgICAgICAgICAgICAgICAgICwgV1NBR2V0TGFzdEVycm9yKCkKKyNlbHNlIC8qIF9fTUlOR1czMl9fICovCisgICAgICAgICAgICAgICAgICwgaHN0cmVycm9yKGhfZXJybm8pCisjZW5kaWYgLyogX19NSU5HVzMyX18gKi8KKyAgICAgICk7CisKKyAgICAgIHJldHVybiBJTlZBTElEX0ZJTEVfREVTQ1JJUFRPUjsKKyAgICB9CisKKyAgICBpZiAoaGUtPmhfYWRkcnR5cGUgIT0gQUZfSU5FVCkgeworI2lmZGVmIEVBRk5PU1VQUE9SVAorICAgICAgZXJybm8gPSBFQUZOT1NVUFBPUlQ7CisjZWxzZSAvKiBFQUZOT1NVUFBPUlQgKi8KKyAgICAgIGVycm5vID0gRUlOVkFMOworI2VuZGlmIC8qIEVBRk5PU1VQUE9SVCAqLworCisgICAgICBsb2dNZXNzYWdlKExPR19FUlIsICJ1bmtub3duIGFkZHJlc3MgdHlwZSAlZCIsIGhlLT5oX2FkZHJ0eXBlKTsKKyAgICAgIHJldHVybiBJTlZBTElEX0ZJTEVfREVTQ1JJUFRPUjsKKyAgICB9CisKKyAgICBpZiAoaGUtPmhfbGVuZ3RoID4gc2l6ZW9mKGFkZHIuc2luX2FkZHIpKSB7CisgICAgICBlcnJubyA9IEVJTlZBTDsKKyAgICAgIGxvZ01lc3NhZ2UoTE9HX0VSUiwgImFkZHJlc3MgdG9vIGJpZzogJWQiLCBoZS0+aF9sZW5ndGgpOworICAgICAgcmV0dXJuIElOVkFMSURfRklMRV9ERVNDUklQVE9SOworICAgIH0KKworICAgIG1lbWNweSgmYWRkci5zaW5fYWRkciwgaGUtPmhfYWRkciwgaGUtPmhfbGVuZ3RoKTsKKyAgfQorCisgIGZkID0gbmV3VGNwU29ja2V0KFBGX0lORVQsIFNPQ0tfU1RSRUFNLCBJUFBST1RPX1RDUCwKKyAgICAgICAgICAgICAgICAgICAgKHN0cnVjdCBzb2NrYWRkciAqKSZhZGRyLCBzaXplb2YoYWRkcikpOworI2VuZGlmIC8qICFIQVZFX0dFVEFERFJJTkZPICovCisKKyNpZmRlZiBfX01JTkdXMzJfXworICB9CisjZW5kaWYgLyogX19NSU5HVzMyX18gKi8KKworICBpZiAoZmQgPT0gSU5WQUxJRF9TT0NLRVRfREVTQ1JJUFRPUikgeworICAgIGxvZ01lc3NhZ2UoTE9HX1dBUk5JTkcsInVuYWJsZSB0byBmaW5kIGEgbG9jYWwgVENQIHBvcnQgJXM6JXMgISIsaW5mby0+aG9zdCxpbmZvLT5wb3J0KTsKKyAgfQorCisgIGlmIChpbmZvLT5ob3N0KSB7CisgICAgZnJlZShpbmZvLT5ob3N0KTsKKyAgICBpbmZvLT5ob3N0ID0gTlVMTDsKKyAgfQorCisgIGlmIChpbmZvLT5wb3J0KSB7CisgICAgZnJlZShpbmZvLT5wb3J0KTsKKyAgICBpbmZvLT5wb3J0ID0gTlVMTDsKKyAgfQorCisgIGlmIChmZCA9PSBJTlZBTElEX1NPQ0tFVF9ERVNDUklQVE9SKSB7CisgICAgcmV0dXJuIElOVkFMSURfRklMRV9ERVNDUklQVE9SOworICB9CisKKyNpZmRlZiBfX01JTkdXMzJfXworICBpZiAoIShpbmZvLT5vdmVybC5oRXZlbnQgPSBDcmVhdGVFdmVudChOVUxMLCBUUlVFLCBGQUxTRSwgTlVMTCkpKSB7CisgICAgbG9nV2luZG93c1N5c3RlbUVycm9yKCJDcmVhdGVFdmVudCIpOworICAgIGNsb3NlU29ja2V0RGVzY3JpcHRvcihmZCk7CisgICAgcmV0dXJuIElOVkFMSURfRklMRV9ERVNDUklQVE9SOworICB9CisKKyAgbG9nTWVzc2FnZShMT0dfQ0FURUdPUlkoU0VSVkVSX0VWRU5UUyksICJldmVudCAtPiAlcCIsIGluZm8tPm92ZXJsLmhFdmVudCk7CisgIFdTQUV2ZW50U2VsZWN0KGZkLCBpbmZvLT5vdmVybC5oRXZlbnQsIEZEX0FDQ0VQVCk7CisjZW5kaWYgLyogX19NSU5HVzMyX18gKi8KKworICByZXR1cm4gKEZpbGVEZXNjcmlwdG9yKWZkOworfQorCisjaWYgZGVmaW5lZChQRl9MT0NBTCkKKworI2lmbmRlZiBfX01JTkdXMzJfXworc3RhdGljIGludCByZWFkUGlkKGNoYXIgKnBhdGgpCisgIC8qIHJlYWQgcGlkIGZyb20gc3BlY2lmaWVkIGZpbGUuIFJldHVybiAwIG9uIGFueSBlcnJvciAqLworeworICBjaGFyIHBpZHNbMTZdLCAqcHRyOworICBwaWRfdCBwaWQ7CisgIGludCBuOworICBGaWxlRGVzY3JpcHRvciBmZDsKKworICB7CisgICAgaW50IG9wZW5GbGFncyA9IE9fUkRPTkxZOworCisgICAgI2lmZGVmIE9fQ0xPRVhFQworICAgIG9wZW5GbGFncyB8PSBPX0NMT0VYRUM7CisgICAgI2VuZGlmIC8qIE9fQ0xPRVhFQyAqLworCisgICAgZmQgPSBvcGVuKHBhdGgsIG9wZW5GbGFncyk7CisgIH0KKworICBpZiAoZmQgPT0gLTEpIHJldHVybiAwOworICBuID0gcmVhZChmZCwgcGlkcywgc2l6ZW9mKHBpZHMpLTEpOworICBjbG9zZUZpbGVEZXNjcmlwdG9yKGZkKTsKKyAgaWYgKG4gPT0gLTEpIHJldHVybiAwOworICBwaWRzW25dID0gMDsKKyAgcGlkID0gc3RydG9sKHBpZHMsICZwdHIsIDEwKTsKKyAgaWYgKHB0ciAhPSAmcGlkc1tuXSkgcmV0dXJuIDA7CisgIHJldHVybiBwaWQ7Cit9CisKK3N0YXRpYyBpbnQKK2FkanVzdFBlcm1pc3Npb25zICgKKyAgY29uc3Qgdm9pZCAqb2JqZWN0LCBjb25zdCBjaGFyICpjb250YWluZXIsCisgIGludCAoKmdldFN0YXR1cykgKGNvbnN0IHZvaWQgKm9iamVjdCwgc3RydWN0IHN0YXQgKnN0YXR1cyksCisgIGludCAoKnNldFBlcm1pc3Npb25zKSAoY29uc3Qgdm9pZCAqb2JqZWN0LCBtb2RlX3QgcGVybWlzc2lvbnMpCispIHsKKyAgdWlkX3QgdXNlciA9IGdldGV1aWQoKTsKKyAgaW50IGFkanVzdCA9ICF1c2VyOworCisgIGlmICghYWRqdXN0KSB7CisgICAgc3RydWN0IHN0YXQgc3RhdHVzOworCisgICAgaWYgKHN0YXQoY29udGFpbmVyLCAmc3RhdHVzKSA9PSAtMSkgeworICAgICAgbG9nU3lzdGVtRXJyb3IoInN0YXQiKTsKKyAgICB9IGVsc2UgaWYgKHN0YXR1cy5zdF91aWQgPT0gdXNlcikgeworICAgICAgYWRqdXN0ID0gMTsKKyAgICB9CisgIH0KKworICBpZiAoYWRqdXN0KSB7CisgICAgc3RydWN0IHN0YXQgc3RhdHVzOworICAgIGlmICghZ2V0U3RhdHVzKG9iamVjdCwgJnN0YXR1cykpIHJldHVybiAwOworCisgICAgeworICAgICAgbW9kZV90IG9sZFBlcm1pc3Npb25zID0gc3RhdHVzLnN0X21vZGUgJiB+U19JRk1UOworICAgICAgbW9kZV90IG5ld1Blcm1pc3Npb25zID0gb2xkUGVybWlzc2lvbnM7CisKKyAgICAgICNpZmRlZiBTX0lSR1JQCisgICAgICBpZiAob2xkUGVybWlzc2lvbnMgJiBTX0lSVVNSKSBuZXdQZXJtaXNzaW9ucyB8PSBTX0lSR1JQIHwgU19JUk9USDsKKyAgICAgIGlmIChvbGRQZXJtaXNzaW9ucyAmIFNfSVdVU1IpIG5ld1Blcm1pc3Npb25zIHw9IFNfSVdHUlAgfCBTX0lXT1RIOworICAgICAgaWYgKG9sZFBlcm1pc3Npb25zICYgU19JWFVTUikgbmV3UGVybWlzc2lvbnMgfD0gU19JWEdSUCB8IFNfSVhPVEg7CisgICAgICBpZiAoU19JU0RJUihzdGF0dXMuc3RfbW9kZSkpIG5ld1Blcm1pc3Npb25zIHw9IFNfSVNWVFggfCBTX0lYT1RIOworICAgICAgI2VuZGlmCisKKyAgICAgIGlmIChuZXdQZXJtaXNzaW9ucyAhPSBvbGRQZXJtaXNzaW9ucykgeworICAgICAgICBpZiAoIXNldFBlcm1pc3Npb25zKG9iamVjdCwgbmV3UGVybWlzc2lvbnMpKSB7CisgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9CisgIH0KKworICByZXR1cm4gMTsKK30KKworc3RhdGljIGludAorZ2V0UGF0aFN0YXR1cyAoY29uc3Qgdm9pZCAqb2JqZWN0LCBzdHJ1Y3Qgc3RhdCAqc3RhdHVzKSB7CisgIGNvbnN0IGNoYXIgKnBhdGggPSBvYmplY3Q7CisgIGlmIChzdGF0KHBhdGgsIHN0YXR1cykgIT0gLTEpIHJldHVybiAxOworICBsb2dTeXN0ZW1FcnJvcigic3RhdCIpOworICByZXR1cm4gMDsKK30KKworc3RhdGljIGludAorc2V0UGF0aFBlcm1pc3Npb25zIChjb25zdCB2b2lkICpvYmplY3QsIG1vZGVfdCBwZXJtaXNzaW9ucykgeworICBjb25zdCBjaGFyICpwYXRoID0gb2JqZWN0OworCisgIGxvY2tVbWFzaygpOworICBpbnQgY2hhbmdlZCA9IGNobW9kKHBhdGgsIHBlcm1pc3Npb25zKSAhPSAtMTsKKyAgdW5sb2NrVW1hc2soKTsKKworICBpZiAoIWNoYW5nZWQpIGxvZ1N5c3RlbUVycm9yKCJjaG1vZCIpOworICByZXR1cm4gY2hhbmdlZDsKK30KKworc3RhdGljIGludAorYWRqdXN0UGF0aFBlcm1pc3Npb25zIChjb25zdCBjaGFyICpwYXRoKSB7CisgIGludCBvayA9IDA7CisgIGNoYXIgKnBhcmVudCA9IGdldFBhdGhEaXJlY3RvcnkocGF0aCk7CisKKyAgaWYgKHBhcmVudCkgeworICAgIGlmIChhZGp1c3RQZXJtaXNzaW9ucyhwYXRoLCBwYXJlbnQsIGdldFBhdGhTdGF0dXMsIHNldFBhdGhQZXJtaXNzaW9ucykpIG9rID0gMTsKKyAgICBmcmVlKHBhcmVudCk7CisgIH0KKworICByZXR1cm4gb2s7Cit9CisKK3N0YXRpYyBpbnQKK2dldEZpbGVTdGF0dXMgKGNvbnN0IHZvaWQgKm9iamVjdCwgc3RydWN0IHN0YXQgKnN0YXR1cykgeworICBjb25zdCBpbnQgKmZkID0gb2JqZWN0OworICBpZiAoZnN0YXQoKmZkLCBzdGF0dXMpICE9IC0xKSByZXR1cm4gMTsKKyAgbG9nU3lzdGVtRXJyb3IoImZzdGF0Iik7CisgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50CitzZXRGaWxlUGVybWlzc2lvbnMgKGNvbnN0IHZvaWQgKm9iamVjdCwgbW9kZV90IHBlcm1pc3Npb25zKSB7CisgIGNvbnN0IGludCAqZmQgPSBvYmplY3Q7CisKKyAgbG9ja1VtYXNrKCk7CisgIGludCBjaGFuZ2VkID0gZmNobW9kKCpmZCwgcGVybWlzc2lvbnMpICE9IC0xOworICB1bmxvY2tVbWFzaygpOworCisgIGlmICghY2hhbmdlZCkgbG9nU3lzdGVtRXJyb3IoImZjaG1vZCIpOworICByZXR1cm4gY2hhbmdlZDsKK30KKworc3RhdGljIGludAorYWRqdXN0RmlsZVBlcm1pc3Npb25zIChpbnQgZmQsIGNvbnN0IGNoYXIgKmRpcmVjdG9yeSkgeworICByZXR1cm4gYWRqdXN0UGVybWlzc2lvbnMoCisgICAgJmZkLCBkaXJlY3RvcnksCisgICAgZ2V0RmlsZVN0YXR1cywKKyAgICBzZXRGaWxlUGVybWlzc2lvbnMKKyAgKTsKK30KKyNlbmRpZiAvKiBfX01JTkdXMzJfXyAqLworCisvKiBGdW5jdGlvbiA6IGNyZWF0ZUxvY2FsU29ja2V0ICovCisvKiBDcmVhdGVzIHRoZSBsaXN0ZW5pbmcgc29ja2V0IGZvciBpbi1jb25uZWN0aW9ucyAqLworLyogUmV0dXJucyAxLCBvciAwIGlmIGFuIGVycm9yIG9jY3VycmVkICovCitzdGF0aWMgRmlsZURlc2NyaXB0b3IgY3JlYXRlTG9jYWxTb2NrZXQoc3RydWN0IHNvY2tldEluZm8gKmluZm8pCit7CisgIGludCBscGF0aD1zdHJsZW4oQlJMQVBJX1NPQ0tFVFBBVEgpLGxwb3J0PXN0cmxlbihpbmZvLT5wb3J0KTsKKyAgRmlsZURlc2NyaXB0b3IgZmQ7CisjaWZkZWYgX19NSU5HVzMyX18KKyAgY2hhciBwYXRoW2xwYXRoK2xwb3J0KzFdOworICBtZW1jcHkocGF0aCxCUkxBUElfU09DS0VUUEFUSCxscGF0aCk7CisgIG1lbWNweShwYXRoK2xwYXRoLGluZm8tPnBvcnQsbHBvcnQrMSk7CisgIGlmICgoZmQgPSBDcmVhdGVOYW1lZFBpcGUocGF0aCwKKwkgIFBJUEVfQUNDRVNTX0RVUExFWCB8IEZJTEVfRkxBR19PVkVSTEFQUEVELAorCSAgUElQRV9UWVBFX0JZVEUgfCBQSVBFX1JFQURNT0RFX0JZVEUsCisJICBQSVBFX1VOTElNSVRFRF9JTlNUQU5DRVMsCisJICBCUkxBUElfTUFYUEFDS0VUU0laRSArIHNpemVvZihicmxhcGlfaGVhZGVyX3QpLAorCSAgQlJMQVBJX01BWFBBQ0tFVFNJWkUgKyBzaXplb2YoYnJsYXBpX2hlYWRlcl90KSwKKwkgIDAsIE5VTEwpKSA9PSBJTlZBTElEX0hBTkRMRV9WQUxVRSkgeworICAgIGlmIChHZXRMYXN0RXJyb3IoKSAhPSBFUlJPUl9DQUxMX05PVF9JTVBMRU1FTlRFRCkKKyAgICAgIGxvZ1dpbmRvd3NTeXN0ZW1FcnJvcigiQ3JlYXRlTmFtZWRQaXBlIik7CisgICAgZ290byBvdXQ7CisgIH0KKyAgbG9nTWVzc2FnZShMT0dfQ0FURUdPUlkoU0VSVkVSX0VWRU5UUyksICJDcmVhdGVGaWxlIC0+ICUiUFJJZmQsZmQpOworICBpZiAoIWluZm8tPm92ZXJsLmhFdmVudCkgeworICAgIGlmICghKGluZm8tPm92ZXJsLmhFdmVudCA9IENyZWF0ZUV2ZW50KE5VTEwsIFRSVUUsIEZBTFNFLCBOVUxMKSkpIHsKKyAgICAgIGxvZ1dpbmRvd3NTeXN0ZW1FcnJvcigiQ3JlYXRlRXZlbnQiKTsKKyAgICAgIGdvdG8gb3V0ZmQ7CisgICAgfQorICAgIGxvZ01lc3NhZ2UoTE9HX0NBVEVHT1JZKFNFUlZFUl9FVkVOVFMpLCAiZXZlbnQgLT4gJXAiLGluZm8tPm92ZXJsLmhFdmVudCk7CisgIH0KKyAgaWYgKCEoUmVzZXRFdmVudChpbmZvLT5vdmVybC5oRXZlbnQpKSkgeworICAgIGxvZ1dpbmRvd3NTeXN0ZW1FcnJvcigiUmVzZXRFdmVudCIpOworICAgIGdvdG8gb3V0ZmQ7CisgIH0KKyAgaWYgKENvbm5lY3ROYW1lZFBpcGUoZmQsICZpbmZvLT5vdmVybCkpIHsKKyAgICBsb2dNZXNzYWdlKExPR19DQVRFR09SWShTRVJWRVJfRVZFTlRTKSwgImFscmVhZHkgY29ubmVjdGVkICEiKTsKKyAgICByZXR1cm4gZmQ7CisgIH0KKworICBzd2l0Y2goR2V0TGFzdEVycm9yKCkpIHsKKyAgICBjYXNlIEVSUk9SX0lPX1BFTkRJTkc6IHJldHVybiBmZDsKKyAgICBjYXNlIEVSUk9SX1BJUEVfQ09OTkVDVEVEOiBTZXRFdmVudChpbmZvLT5vdmVybC5oRXZlbnQpOyByZXR1cm4gZmQ7CisgICAgZGVmYXVsdDogbG9nV2luZG93c1N5c3RlbUVycm9yKCJDb25uZWN0TmFtZWRQaXBlIik7CisgIH0KKyAgQ2xvc2VIYW5kbGUoaW5mby0+b3ZlcmwuaEV2ZW50KTsKKyNlbHNlIC8qIF9fTUlOR1czMl9fICovCisgIHN0cnVjdCBzb2NrYWRkcl91biBzYTsKKyAgY2hhciB0bXBwYXRoW2xwYXRoK2xwb3J0KzRdOworICBjaGFyIGxvY2twYXRoW2xwYXRoK2xwb3J0KzNdOworICBzdHJ1Y3Qgc3RhdCBzdDsKKyAgY2hhciBwaWRzWzE2XTsKKyAgcGlkX3QgcGlkOworICBpbnQgbG9jayxuLGRvbmUscmVzOworICBtb2RlX3QgcGVybWlzc2lvbnMgPSBTX0lSV1hVIHwgU19JUldYRyB8IFNfSVJXWE87CisKKyAgaWYgKChmZCA9IHNvY2tldChQRl9MT0NBTCwgU09DS19TVFJFQU0sIDApKT09LTEpIHsKKyAgICBsb2dTeXN0ZW1FcnJvcigic29ja2V0Iik7CisgICAgZ290byBvdXQ7CisgIH0KKworICBzZXRDbG9zZU9uRXhlYyhmZCwgMSk7CisgIHNhLnN1bl9mYW1pbHkgPSBBRl9MT0NBTDsKKworICBpZiAobHBhdGgrbHBvcnQrMT5zaXplb2Yoc2Euc3VuX3BhdGgpKSB7CisgICAgbG9nTWVzc2FnZShMT0dfRVJSLCAiVW5peCBwYXRoIHRvbyBsb25nIik7CisgICAgZ290byBvdXRmZDsKKyAgfQorCisgIHdoaWxlICgxKSB7CisgICAgeworICAgICAgbG9ja1VtYXNrKCk7CisgICAgICBpbnQgbWtkaXJSZXN1bHQgPSBta2RpcihCUkxBUElfU09DS0VUUEFUSCwgKHBlcm1pc3Npb25zIHwgU19JU1ZUWCkpOworICAgICAgdW5sb2NrVW1hc2soKTsKKyAgICAgIGlmIChta2RpclJlc3VsdCAhPSAtMSkgYnJlYWs7CisgICAgfQorCisgICAgaWYgKCFydW5uaW5nKSBnb3RvIG91dGZkOworICAgIGlmIChlcnJubyA9PSBFRVhJU1QpIGJyZWFrOworCisgICAgaWYgKChlcnJubyAhPSBFUk9GUykgJiYgKGVycm5vICE9IEVOT0VOVCkpIHsKKyAgICAgIGxvZ1N5c3RlbUVycm9yKCJtYWtpbmcgc29ja2V0IGRpcmVjdG9yeSIpOworICAgICAgZ290byBvdXRmZDsKKyAgICB9CisKKyAgICAvKiByZWFkLW9ubHksIG9yIG5vdCBtb3VudGVkIHlldCwgd2FpdCAqLworICAgIGFwcHJveGltYXRlRGVsYXkoMTAwMCk7CisgIH0KKworICBpZiAoIWFkanVzdFBhdGhQZXJtaXNzaW9ucyhCUkxBUElfU09DS0VUUEFUSCkpIHsKKyAgICBnb3RvIG91dGZkOworICB9CisKKyAgbWVtY3B5KHNhLnN1bl9wYXRoLEJSTEFQSV9TT0NLRVRQQVRIICIvIixscGF0aCsxKTsKKyAgbWVtY3B5KHNhLnN1bl9wYXRoK2xwYXRoKzEsaW5mby0+cG9ydCxscG9ydCsxKTsKKyAgbWVtY3B5KHRtcHBhdGgsIEJSTEFQSV9TT0NLRVRQQVRIICIvIiwgbHBhdGgrMSk7CisgIHRtcHBhdGhbbHBhdGgrMV09Jy4nOworICBtZW1jcHkodG1wcGF0aCtscGF0aCsyLCBpbmZvLT5wb3J0LCBscG9ydCk7CisgIG1lbWNweShsb2NrcGF0aCwgdG1wcGF0aCwgbHBhdGgrMitscG9ydCk7CisgIHRtcHBhdGhbbHBhdGgrMitscG9ydF09J18nOworICB0bXBwYXRoW2xwYXRoKzIrbHBvcnQrMV09MDsKKyAgbG9ja3BhdGhbbHBhdGgrMitscG9ydF09MDsKKworICB3aGlsZSAoMSkgeworICAgIHsKKyAgICAgIGxvY2tVbWFzaygpOworCisgICAgICB7CisgICAgICAgIGludCBvcGVuRmxhZ3MgPSBPX1dST05MWSB8IE9fQ1JFQVQgfCBPX0VYQ0w7CisKKyAgICAgICAgI2lmZGVmIE9fQ0xPRVhFQworICAgICAgICBvcGVuRmxhZ3MgfD0gT19DTE9FWEVDOworICAgICAgICAjZW5kaWYgLyogT19DTE9FWEVDICovCisKKyAgICAgICAgbG9jayA9IG9wZW4oCisgICAgICAgICAgdG1wcGF0aCwgb3BlbkZsYWdzLAorICAgICAgICAgIChwZXJtaXNzaW9ucyAmIChTX0lSVVNSIHwgU19JV1VTUiB8IFNfSVJHUlAgfCBTX0lST1RIKSkKKyAgICAgICAgKTsKKyAgICAgIH0KKworICAgICAgdW5sb2NrVW1hc2soKTsKKyAgICB9CisKKyAgICBpZiAobG9jayAhPSAtMSkgYnJlYWs7CisgICAgaWYgKCFydW5uaW5nKSBnb3RvIG91dGZkOworCisgICAgaWYgKGVycm5vID09IEVST0ZTKSB7CisgICAgICBhcHByb3hpbWF0ZURlbGF5KDEwMDApOworICAgICAgY29udGludWU7CisgICAgfQorCisgICAgaWYgKGVycm5vICE9IEVFWElTVCkgeworICAgICAgbG9nU3lzdGVtRXJyb3IoIm9wZW5pbmcgbG9jYWwgc29ja2V0IGxvY2siKTsKKyAgICAgIGdvdG8gb3V0ZmQ7CisgICAgfQorCisgICAgaWYgKChwaWQgPSByZWFkUGlkKHRtcHBhdGgpKSAmJiBwaWQgIT0gZ2V0cGlkKCkKKwkmJiAoa2lsbChwaWQsIDApICE9IC0xIHx8IGVycm5vICE9IEVTUkNIKSkgeworICAgICAgbG9nTWVzc2FnZShMT0dfRVJSLCJhbm90aGVyIEJybEFQSSBzZXJ2ZXIgaXMgYWxyZWFkeSBsaXN0ZW5pbmcgb24gJXMgKGZpbGUgJXMgZXhpc3RzKSIsaW5mby0+cG9ydCwgdG1wcGF0aCk7CisgICAgICBnb3RvIG91dGZkOworICAgIH0KKworICAgIC8qIGJvZ3VzIGZpbGUsIG15c2VsZiBvciBub24tZXhpc3RlbnQgcHJvY2VzcywgcmVtb3ZlICovCisgICAgd2hpbGUgKHVubGluayh0bXBwYXRoKSkgeworICAgICAgaWYgKGVycm5vICE9IEVST0ZTKSB7CisJbG9nU3lzdGVtRXJyb3IoInJlbW92aW5nIHN0YWxlIGxvY2FsIHNvY2tldCBsb2NrIik7CisJZ290byBvdXRmZDsKKyAgICAgIH0KKworICAgICAgYXBwcm94aW1hdGVEZWxheSgxMDAwKTsKKyAgICB9CisgIH0KKworICBuID0gc25wcmludGYocGlkcyxzaXplb2YocGlkcyksIiVkIixnZXRwaWQoKSk7CisgIGRvbmUgPSAwOworCisgIHdoaWxlICgocmVzID0gd3JpdGUobG9jayxwaWRzK2RvbmUsbikpIDwgbikgeworICAgIGlmICghcnVubmluZykgZ290byBvdXRsb2NrZmQ7CisKKyAgICBpZiAocmVzID09IC0xKSB7CisgICAgICBpZiAoZXJybm8gIT0gRU5PU1BDKSB7CisJbG9nU3lzdGVtRXJyb3IoIndyaXRpbmcgcGlkIGluIGxvY2FsIHNvY2tldCBsb2NrIik7CisJZ290byBvdXRsb2NrZmQ7CisgICAgICB9CisKKyAgICAgIGFwcHJveGltYXRlRGVsYXkoMTAwMCk7CisgICAgfSBlbHNlIHsKKyAgICAgIGRvbmUgKz0gcmVzOworICAgICAgbiAtPSByZXM7CisgICAgfQorICB9CisKKyAgd2hpbGUgKDEpIHsKKyAgICBpZiAoIXJ1bm5pbmcpIGdvdG8gb3V0dG1wOworCisgICAgaWYgKGxpbmsodG1wcGF0aCwgbG9ja3BhdGgpID09IC0xKSB7CisgICAgICBsb2dNZXNzYWdlKExPR19DQVRFR09SWShTRVJWRVJfRVZFTlRTKSwgImxpbmtpbmcgbG9jYWwgc29ja2V0IGxvY2s6ICVzIiwgc3RyZXJyb3IoZXJybm8pKTsKKyAgICAgIC8qIGJ1dCBubyBhY3Rpb246IGxpbmsoKSBtaWdodCBlcnJvbmVvdXNseSByZXR1cm4gZXJyb3JzLCBzZWUgbWFucGFnZSAqLworICAgIH0KKworICAgIGlmIChmc3RhdChsb2NrLCAmc3QpID09IC0xKSB7CisgICAgICBsb2dTeXN0ZW1FcnJvcigiY2hlY2tpbmcgbG9jYWwgc29ja2V0IGxvY2siKTsKKyAgICAgIGdvdG8gb3V0dG1wOworICAgIH0KKworICAgIGlmIChzdC5zdF9ubGluayA9PSAyKSB7CisgICAgICAvKiBzdWNjZXNzICovCisgICAgICBicmVhazsKKyAgICB9CisKKyAgICAvKiBmYWlsZWQgdG8gbGluayAqLworICAgIGlmICgocGlkID0gcmVhZFBpZChsb2NrcGF0aCkpICYmIHBpZCAhPSBnZXRwaWQoKQorCSYmIChraWxsKHBpZCwgMCkgIT0gLTEgfHwgZXJybm8gIT0gRVNSQ0gpKSB7CisgICAgICBsb2dNZXNzYWdlKExPR19FUlIsImFub3RoZXIgQnJsQVBJIHNlcnZlciBpcyBhbHJlYWR5IGxpc3RlbmluZyBvbiAlcyAoZmlsZSAlcyBleGlzdHMpIixpbmZvLT5wb3J0LCBsb2NrcGF0aCk7CisgICAgICBnb3RvIG91dHRtcDsKKyAgICB9CisKKyAgICAvKiBib2d1cyBmaWxlLCBteXNlbGYgb3Igbm9uLWV4aXN0ZW50IHByb2Nlc3MsIHJlbW92ZSAqLworICAgIGlmICh1bmxpbmsobG9ja3BhdGgpKSB7CisgICAgICBsb2dTeXN0ZW1FcnJvcigicmVtb3Zpbmcgc3RhbGUgbG9jYWwgc29ja2V0IGxvY2siKTsKKyAgICAgIGdvdG8gb3V0dG1wOworICAgIH0KKyAgfQorCisgIGNsb3NlRmlsZURlc2NyaXB0b3IobG9jayk7CisKKyAgaWYgKHVubGluayh0bXBwYXRoKSA9PSAtMSkgeworICAgIGxvZ1N5c3RlbUVycm9yKCJyZW1vdmluZyB0ZW1wIGxvY2FsIHNvY2tldCBsb2NrIik7CisgIH0KKworICBpZiAodW5saW5rKHNhLnN1bl9wYXRoKSAmJiBlcnJubyAhPSBFTk9FTlQpIHsKKyAgICBsb2dTeXN0ZW1FcnJvcigicmVtb3Zpbmcgb2xkIHNvY2tldCIpOworICAgIGdvdG8gb3V0ZmQ7CisgIH0KKworICBpZiAobG9vcEJpbmQoZmQsIChzdHJ1Y3Qgc29ja2FkZHIgKikgJnNhLCBzaXplb2Yoc2EpKSA9PSAtMSkgeworICAgIGxvZ01lc3NhZ2UoTE9HX1dBUk5JTkcsICJiaW5kOiAlcyIsIHN0cmVycm9yKGVycm5vKSk7CisgICAgZ290byBvdXRmZDsKKyAgfQorCisgIGlmICghYWRqdXN0RmlsZVBlcm1pc3Npb25zKGZkLCBCUkxBUElfU09DS0VUUEFUSCkpIHsKKyAgICBnb3RvIG91dGZkOworICB9CisKKyAgaWYgKGxpc3RlbihmZCwxKTwwKSB7CisgICAgbG9nU3lzdGVtRXJyb3IoImxpc3RlbiIpOworICAgIGdvdG8gb3V0ZmQ7CisgIH0KKyAgcmV0dXJuIGZkOworCitvdXR0bXA6CisgIHVubGluayh0bXBwYXRoKTsKK291dGxvY2tmZDoKKyAgY2xvc2VGaWxlRGVzY3JpcHRvcihsb2NrKTsKKyNlbmRpZiAvKiBfX01JTkdXMzJfXyAqLworb3V0ZmQ6CisgIGNsb3NlRmlsZURlc2NyaXB0b3IoZmQpOworb3V0OgorICByZXR1cm4gSU5WQUxJRF9GSUxFX0RFU0NSSVBUT1I7Cit9CisjZW5kaWYgLyogUEZfTE9DQUwgKi8KKworc3RhdGljIHZvaWQgY3JlYXRlU29ja2V0KGludCBudW0pCit7CisgIHN0cnVjdCBzb2NrZXRJbmZvICpjaW5mbyA9ICZzb2NrZXRJbmZvW251bV07CisKKyAgbG9nTWVzc2FnZShMT0dfQ0FURUdPUlkoU0VSVkVSX0VWRU5UUyksICJjcmVhdGluZyBzb2NrZXQ6ICVkICglczolcykiLAorICAgICAgICAgICAgIG51bSwKKyAgICAgICAgICAgICAoY2luZm8tPmhvc3Q/IGNpbmZvLT5ob3N0OiAiTE9DQUwiKSwKKyAgICAgICAgICAgICAoY2luZm8tPnBvcnQ/IGNpbmZvLT5wb3J0OiAiREVGQVVMVCIpCisgICk7CisKKyAgY2luZm8tPmZkID0KKyNpZiBkZWZpbmVkKFBGX0xPQ0FMKQorICAgIChjaW5mby0+YWRkcmZhbWlseSA9PSBQRl9MT0NBTCk/IGNyZWF0ZUxvY2FsU29ja2V0KGNpbmZvKToKKyNlbmRpZiAvKiBQRl9MT0NBTCAqLworICAgIGNyZWF0ZVRjcFNvY2tldChjaW5mbyk7CisKKyAgaWYgKGNpbmZvLT5mZCA9PSBJTlZBTElEX0ZJTEVfREVTQ1JJUFRPUikgeworICAgIGxvZ01lc3NhZ2UoTE9HX1dBUk5JTkcsICJlcnJvciB3aGlsZSBjcmVhdGluZyBzb2NrZXQgJWQiLCBudW0pOworICB9IGVsc2UgeworICAgIGxvZ01lc3NhZ2UoTE9HX0NBVEVHT1JZKFNFUlZFUl9FVkVOVFMpLCAic29ja2V0ICVkIGNyZWF0ZWQgKGZkICUiUFJJZmQiKSIsIG51bSwgY2luZm8tPmZkKTsKKyAgfQorfQorCitzdGF0aWMgdm9pZCBjbG9zZVNvY2tldHModm9pZCAqYXJnKQoreworICBpbnQgaTsKKyAgc3RydWN0IHNvY2tldEluZm8gKmluZm87CisKKyAgZm9yIChpPTA7aTxzZXJ2ZXJTb2NrZXRDb3VudDtpKyspIHsKKyNpZmRlZiBfX01JTkdXMzJfXworICAgIHB0aHJlYWRfY2FuY2VsKHNvY2tldFRocmVhZHNbaV0pOworI2Vsc2UgLyogX19NSU5HVzMyX18gKi8KKyAgICBwdGhyZWFkX2tpbGwoc29ja2V0VGhyZWFkc1tpXSwgU0lHVVNSMik7CisjZW5kaWYgLyogX19NSU5HVzMyX18gKi8KKyAgICBwdGhyZWFkX2pvaW4oc29ja2V0VGhyZWFkc1tpXSwgTlVMTCk7CisKKyAgICBpbmZvPSZzb2NrZXRJbmZvW2ldOworCisgICAgaWYgKGluZm8tPmZkPj0wKSB7CisgICAgICBpZiAoY2xvc2VGaWxlRGVzY3JpcHRvcihpbmZvLT5mZCkpIHsKKyAgICAgICAgbG9nU3lzdGVtRXJyb3IoImNsb3Npbmcgc29ja2V0Iik7CisgICAgICB9CisgICAgICBpbmZvLT5mZD1JTlZBTElEX0ZJTEVfREVTQ1JJUFRPUjsKKworI2lmZGVmIF9fTUlOR1czMl9fCisgICAgICBpZiAoKGluZm8tPm92ZXJsLmhFdmVudCkpIHsKKwlDbG9zZUhhbmRsZShpbmZvLT5vdmVybC5oRXZlbnQpOworCWluZm8tPm92ZXJsLmhFdmVudCA9IE5VTEw7CisgICAgICB9CisjZWxzZSAvKiBfX01JTkdXMzJfXyAqLworCisjaWYgZGVmaW5lZChQRl9MT0NBTCkKKyAgICAgIGlmIChpbmZvLT5hZGRyZmFtaWx5PT1QRl9MT0NBTCkgeworCWNoYXIgKnBhdGg7CisJaW50IGxwYXRoPXN0cmxlbihCUkxBUElfU09DS0VUUEFUSCksbHBvcnQ9c3RybGVuKGluZm8tPnBvcnQpOworCisJaWYgKChwYXRoPW1hbGxvYyhscGF0aCtscG9ydCszKSkpIHsKKwkgIG1lbWNweShwYXRoLEJSTEFQSV9TT0NLRVRQQVRIICIvIixscGF0aCsxKTsKKwkgIG1lbWNweShwYXRoK2xwYXRoKzEsaW5mby0+cG9ydCxscG9ydCsxKTsKKworCSAgaWYgKHVubGluayhwYXRoKSA9PSAtMSkgeworCSAgICBsb2dTeXN0ZW1FcnJvcigidW5saW5raW5nIGxvY2FsIHNvY2tldCIpOworICAgICAgICAgIH0KKworCSAgcGF0aFtscGF0aCsxXT0nLic7CisJICBtZW1jcHkocGF0aCtscGF0aCsyLGluZm8tPnBvcnQsbHBvcnQrMSk7CisKKwkgIGlmICh1bmxpbmsocGF0aCkgPT0gLTEpIHsKKwkgICAgbG9nU3lzdGVtRXJyb3IoInVubGlua2luZyBsb2NhbCBzb2NrZXQgbG9jayIpOworICAgICAgICAgIH0KKworCSAgZnJlZShwYXRoKTsKKwl9CisgICAgICB9CisjZW5kaWYgLyogUEZfTE9DQUwgKi8KKyNlbmRpZiAvKiBfX01JTkdXMzJfXyAqLworICAgIH0KKworICAgIGZyZWUoaW5mby0+cG9ydCk7CisgICAgaW5mby0+cG9ydCA9IE5VTEw7CisKKyAgICBmcmVlKGluZm8tPmhvc3QpOworICAgIGluZm8tPmhvc3QgPSBOVUxMOworICB9Cit9CisKKy8qIEZ1bmN0aW9uOiBhZGRUdHlGZHMgKi8KKy8qIHJlY3Vyc2l2ZWx5IGFkZCBmZHMgb2YgdHR5cyAqLworI2lmZGVmIF9fTUlOR1czMl9fCitzdGF0aWMgdm9pZCBhZGRUdHlGZHMoSEFORExFICoqbHBIYW5kbGVzLCBpbnQgKm5iQWxsb2MsIGludCAqbmJIYW5kbGVzLCBUdHkgKnR0eSkgeworI2Vsc2UgLyogX19NSU5HVzMyX18gKi8KK3N0YXRpYyB2b2lkIGFkZFR0eUZkcyhmZF9zZXQgKmZkcywgaW50ICpmZG1heCwgVHR5ICp0dHkpIHsKKyNlbmRpZiAvKiBfX01JTkdXMzJfXyAqLworICB7CisgICAgQ29ubmVjdGlvbiAqYzsKKyAgICBmb3IgKGMgPSB0dHktPmNvbm5lY3Rpb25zLT5uZXh0OyBjICE9IHR0eS0+Y29ubmVjdGlvbnM7IGMgPSBjIC0+IG5leHQpIHsKKyNpZmRlZiBfX01JTkdXMzJfXworICAgICAgaWYgKCpuYkhhbmRsZXMgPT0gKm5iQWxsb2MpIHsKKwkqbmJBbGxvYyAqPSAyOworCSpscEhhbmRsZXMgPSByZWFsbG9jKCpscEhhbmRsZXMsKm5iQWxsb2Mqc2l6ZW9mKCoqbHBIYW5kbGVzKSk7CisgICAgICB9CisgICAgICAoKmxwSGFuZGxlcylbKCpuYkhhbmRsZXMpKytdID0gYy0+cGFja2V0Lm92ZXJsLmhFdmVudDsKKyNlbHNlIC8qIF9fTUlOR1czMl9fICovCisgICAgICBpZiAoYy0+ZmQ+KmZkbWF4KSAqZmRtYXggPSBjLT5mZDsKKyAgICAgIEZEX1NFVChjLT5mZCxmZHMpOworI2VuZGlmIC8qIF9fTUlOR1czMl9fICovCisgICAgfQorICB9CisgIHsKKyAgICBUdHkgKnQ7CisgICAgZm9yICh0ID0gdHR5LT5zdWJ0dHlzOyB0OyB0ID0gdC0+bmV4dCkKKyNpZmRlZiBfX01JTkdXMzJfXworICAgICAgYWRkVHR5RmRzKGxwSGFuZGxlcywgbmJBbGxvYywgbmJIYW5kbGVzLCB0KTsKKyNlbHNlIC8qIF9fTUlOR1czMl9fICovCisgICAgICBhZGRUdHlGZHMoZmRzLGZkbWF4LHQpOworI2VuZGlmIC8qIF9fTUlOR1czMl9fICovCisgIH0KK30KKworLyogRnVuY3Rpb246IGhhbmRsZVR0eUZkcyAqLworLyogcmVjdXJzaXZlbHkgaGFuZGxlIHR0eXMnIGZkcyAqLworc3RhdGljIHZvaWQgaGFuZGxlVHR5RmRzKGZkX3NldCAqZmRzLCB0aW1lX3QgY3VycmVudFRpbWUsIFR0eSAqdHR5KSB7CisgIHsKKyAgICBDb25uZWN0aW9uICpjLCpuZXh0OworICAgIGMgPSB0dHktPmNvbm5lY3Rpb25zLT5uZXh0OworCisgICAgd2hpbGUgKGMgIT0gdHR5LT5jb25uZWN0aW9ucykgeworICAgICAgaW50IHJlbW92ZSA9IDA7CisgICAgICBuZXh0ID0gYy0+bmV4dDsKKworI2lmZGVmIF9fTUlOR1czMl9fCisgICAgICBpZiAoV2FpdEZvclNpbmdsZU9iamVjdChjLT5wYWNrZXQub3ZlcmwuaEV2ZW50LCAwKSA9PSBXQUlUX09CSkVDVF8wKQorI2Vsc2UgLyogX19NSU5HVzMyX18gKi8KKyAgICAgIGlmIChGRF9JU1NFVChjLT5mZCwgZmRzKSkKKyNlbmRpZiAvKiBfX01JTkdXMzJfXyAqLworICAgICAgeworCXJlbW92ZSA9IHByb2Nlc3NSZXF1ZXN0KGMsICZwYWNrZXRIYW5kbGVycyk7CisgICAgICB9IGVsc2UgeworICAgICAgICByZW1vdmUgPSAoYy0+YXV0aCAhPSAxKSAmJiAoKGN1cnJlbnRUaW1lIC0gYy0+dXBUaW1lKSA+IFVOQVVUSF9USU1FT1VUKTsKKyAgICAgIH0KKworI2lmbmRlZiBfX01JTkdXMzJfXworICAgICAgRkRfQ0xSKGMtPmZkLGZkcyk7CisjZW5kaWYgLyogX19NSU5HVzMyX18gKi8KKworICAgICAgaWYgKHJlbW92ZSkgcmVtb3ZlRnJlZUNvbm5lY3Rpb24oYyk7CisgICAgICBjID0gbmV4dDsKKyAgICB9CisgIH0KKworICB7CisgICAgVHR5ICp0LCpuZXh0OworICAgIGZvciAodCA9IHR0eS0+c3VidHR5czsgdDsgdCA9IG5leHQpIHsKKyAgICAgIG5leHQgPSB0LT5uZXh0OworICAgICAgaGFuZGxlVHR5RmRzKGZkcyxjdXJyZW50VGltZSx0KTsKKyAgICB9CisgIH0KKyAgaWYgKHR0eSE9JnR0eXMgJiYgdHR5IT0mbm90dHkKKyAgICAgICYmIHR0eS0+Y29ubmVjdGlvbnMtPm5leHQgPT0gdHR5LT5jb25uZWN0aW9ucyAmJiAhdHR5LT5zdWJ0dHlzKSB7CisgICAgbG9nTWVzc2FnZShMT0dfQ0FURUdPUlkoU0VSVkVSX0VWRU5UUyksICJmcmVlaW5nIHR0eSAlIzAxMHgiLHR0eS0+bnVtYmVyKTsKKyAgICBsb2NrTXV0ZXgoJmFwaUNvbm5lY3Rpb25zTXV0ZXgpOworICAgIHJlbW92ZVR0eSh0dHkpOworICAgIGZyZWVUdHkodHR5KTsKKyAgICB1bmxvY2tNdXRleCgmYXBpQ29ubmVjdGlvbnNNdXRleCk7CisgIH0KK30KKworI2lmbmRlZiBfX01JTkdXMzJfXworc3RhdGljIHNpZ3NldF90IGJsb2NrZWRTaWduYWxzTWFzazsKKworc3RhdGljIHZvaWQgaW5pdGlhbGl6ZUJsb2NrZWRTaWduYWxzTWFzayh2b2lkKQoreworICBzaWdlbXB0eXNldCgmYmxvY2tlZFNpZ25hbHNNYXNrKTsKKworICBzaWdhZGRzZXQoJmJsb2NrZWRTaWduYWxzTWFzaywgU0lHVEVSTSk7CisgIHNpZ2FkZHNldCgmYmxvY2tlZFNpZ25hbHNNYXNrLCBTSUdJTlQpOworICBzaWdhZGRzZXQoJmJsb2NrZWRTaWduYWxzTWFzaywgU0lHUElQRSk7CisgIHNpZ2FkZHNldCgmYmxvY2tlZFNpZ25hbHNNYXNrLCBTSUdDSExEKTsKKyAgc2lnYWRkc2V0KCZibG9ja2VkU2lnbmFsc01hc2ssIFNJR1VTUjEpOworfQorI2VuZGlmIC8qIF9fTUlOR1czMl9fICovCisKK3N0YXRpYyBpbnQgcHJlcGFyZVRocmVhZCh2b2lkKQoreworI2lmbmRlZiBfX01JTkdXMzJfXworICBpZiAocHRocmVhZF9zaWdtYXNrKFNJR19CTE9DSywgJmJsb2NrZWRTaWduYWxzTWFzaywgTlVMTCkgIT0gMCkgeworICAgIGxvZ1N5c3RlbUVycm9yKCJwdGhyZWFkX3NpZ21hc2tbU0lHX0JMT0NLXSIpOworICAgIHJldHVybiAwOworICB9CisjZW5kaWYgLyogX19NSU5HVzMyX18gKi8KKworICByZXR1cm4gMTsKK30KKworVEhSRUFEX0ZVTkNUSU9OKGNyZWF0ZVNlcnZlclNvY2tldCkgeworICBpbnRwdHJfdCBudW0gPSAoaW50cHRyX3QpIGFyZ3VtZW50OworICBsb2dNZXNzYWdlKExPR19DQVRFR09SWShTRVJWRVJfRVZFTlRTKSwgInNvY2tldCBjcmVhdGlvbiBzdGFydGVkOiAlIlBSSWRQVFIsIG51bSk7CisKKyAgaWYgKHByZXBhcmVUaHJlYWQoKSkgeworICAgIGNyZWF0ZVNvY2tldChudW0pOworICB9CisKKyAgbG9ja011dGV4KCZhcGlTb2NrZXRzTXV0ZXgpOworICAgIHNlcnZlclNvY2tldHNQZW5kaW5nIC09IDE7CisgIHVubG9ja011dGV4KCZhcGlTb2NrZXRzTXV0ZXgpOworCisgIGxvZ01lc3NhZ2UoTE9HX0NBVEVHT1JZKFNFUlZFUl9FVkVOVFMpLCAic29ja2V0IGNyZWF0aW9uIGZpbmlzaGVkOiAlIlBSSWRQVFIsIG51bSk7CisgIHJldHVybiBOVUxMOworfQorCisvKiBGdW5jdGlvbiA6IHJ1blNlcnZlciAqLworLyogVGhlIHNlcnZlciB0aHJlYWQgKi8KKy8qIFJldHVybnMgTlVMTCBpbiBhbnkgY2FzZSAqLworVEhSRUFEX0ZVTkNUSU9OKHJ1blNlcnZlcikgeworICBjaGFyICpob3N0cyA9IChjaGFyICopYXJndW1lbnQ7CisgIGludCBpOworICBpbnQgcmVzOworICBzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSBhZGRyOworICBzb2NrbGVuX3QgYWRkcmxlbjsKKyAgQ29ubmVjdGlvbiAqYzsKKyAgdGltZV90IGN1cnJlbnRUaW1lOworICBmZF9zZXQgc29ja3NldDsKKyAgRmlsZURlc2NyaXB0b3IgcmVzZmQ7CisKKyNpZmRlZiBfX01JTkdXMzJfXworICBIQU5ETEUgKmxwSGFuZGxlczsKKyAgaW50IG5iQWxsb2M7CisgIGludCBuYkhhbmRsZXMgPSAwOworI2Vsc2UgLyogX19NSU5HVzMyX18gKi8KKyAgaW50IGZkbWF4OworI2VuZGlmIC8qIF9fTUlOR1czMl9fICovCisKKyAgbG9nTWVzc2FnZShMT0dfQ0FURUdPUlkoU0VSVkVSX0VWRU5UUyksICJzZXJ2ZXIgdGhyZWFkIHN0YXJ0ZWQiKTsKKyAgaWYgKCFwcmVwYXJlVGhyZWFkKCkpIGdvdG8gZmluaXNoZWQ7CisKKyAgaWYgKGF1dGggJiYgIWlzQWJzb2x1dGVQYXRoKGF1dGgpKSB7CisgICAgaWYgKCEoYXV0aERlc2NyaXB0b3IgPSBhdXRoQmVnaW5TZXJ2ZXIoYXV0aCkpKSB7CisgICAgICBsb2dNZXNzYWdlKExPR19XQVJOSU5HLCAiVW5hYmxlIHRvIHN0YXJ0IGF1dGggc2VydmVyIik7CisgICAgICBnb3RvIGZpbmlzaGVkOworICAgIH0KKyAgfQorCisgIHNvY2tldEhvc3RzID0gc3BsaXRTdHJpbmcoaG9zdHMsJysnLCZzZXJ2ZXJTb2NrZXRDb3VudCk7CisgIGlmIChzZXJ2ZXJTb2NrZXRDb3VudCA+IFNFUlZFUl9TT0NLRVRfTElNSVQpIHsKKyAgICBsb2dNZXNzYWdlKExPR19FUlIsICJ0b28gbWFueSBob3N0cyBzcGVjaWZpZWQ6ICVkID4gJWQpIiwKKyAgICAgICAgICAgICAgIHNlcnZlclNvY2tldENvdW50LCBTRVJWRVJfU09DS0VUX0xJTUlUKTsKKyAgICBnb3RvIGZpbmlzaGVkOworICB9CisgIGlmIChzZXJ2ZXJTb2NrZXRDb3VudCA9PSAwKSB7CisgICAgbG9nTWVzc2FnZShMT0dfSU5GTywibm8gaG9zdHMgc3BlY2lmaWVkIik7CisgICAgZ290byBmaW5pc2hlZDsKKyAgfQorI2lmZGVmIF9fTUlOR1czMl9fCisgIG5iQWxsb2MgPSBzZXJ2ZXJTb2NrZXRDb3VudDsKKyNlbmRpZiAvKiBfX01JTkdXMzJfXyAqLworCisgIGZvciAoaT0wO2k8c2VydmVyU29ja2V0Q291bnQ7aSsrKQorICAgIHNvY2tldEluZm9baV0uZmQgPSBJTlZBTElEX0ZJTEVfREVTQ1JJUFRPUjsKKworI2lmZGVmIF9fTUlOR1czMl9fCisgIGlmICgoZ2V0YWRkcmluZm9Qcm9jICYmIFdTQVN0YXJ0dXAoTUFLRVdPUkQoMiwwKSwgJndzYWRhdGEpKQorCXx8ICghZ2V0YWRkcmluZm9Qcm9jICYmIFdTQVN0YXJ0dXAoTUFLRVdPUkQoMSwxKSwgJndzYWRhdGEpKSkgeworICAgIGxvZ1dpbmRvd3NTb2NrZXRFcnJvcigiU3RhcnRpbmcgc29ja2V0IGxpYnJhcnkiKTsKKyAgICBnb3RvIGZpbmlzaGVkOworICB9CisjZW5kaWYgLyogX19NSU5HVzMyX18gKi8KKworI2lmZGVmIF9fTUlOR1czMl9fCisgIHB0aHJlYWRfY2xlYW51cF9wdXNoKGNsb3NlU29ja2V0cyxOVUxMKTsKKyNlbmRpZiAvKiBfX01JTkdXMzJfXyAqLworCisgIHsKKyAgICBwdGhyZWFkX211dGV4YXR0cl90IGF0dHJpYnV0ZXM7CisgICAgcHRocmVhZF9tdXRleGF0dHJfaW5pdCgmYXR0cmlidXRlcyk7CisgICAgcHRocmVhZF9tdXRleF9pbml0KCZhcGlTb2NrZXRzTXV0ZXgsICZhdHRyaWJ1dGVzKTsKKyAgICBzZXJ2ZXJTb2NrZXRzUGVuZGluZyA9IHNlcnZlclNvY2tldENvdW50OworICB9CisKKyAgZm9yIChpPTA7aTxzZXJ2ZXJTb2NrZXRDb3VudDtpKyspIHsKKyAgICBzb2NrZXRJbmZvW2ldLmFkZHJmYW1pbHk9YnJsYXBpc2VydmVyX2V4cGFuZEhvc3Qoc29ja2V0SG9zdHNbaV0sJnNvY2tldEluZm9baV0uaG9zdCwmc29ja2V0SW5mb1tpXS5wb3J0KTsKKworI2lmZGVmIF9fTUlOR1czMl9fCisgICAgaWYgKHNvY2tldEluZm9baV0uYWRkcmZhbWlseSAhPSBQRl9MT0NBTCkgeworI2VuZGlmIC8qIF9fTUlOR1czMl9fICovCisgICAgICB7CisgICAgICAgIGNoYXIgbmFtZVswWDEwMF07CisgICAgICAgIHNucHJpbnRmKG5hbWUsIHNpemVvZihuYW1lKSwgInNlcnZlci1zb2NrZXQtY3JlYXRlLSVkIiwgaSk7CisKKyAgICAgICAgcmVzID0gY3JlYXRlVGhyZWFkKG5hbWUsICZzb2NrZXRUaHJlYWRzW2ldLCBOVUxMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgY3JlYXRlU2VydmVyU29ja2V0LCAodm9pZCAqKShpbnRwdHJfdClpKTsKKyAgICAgIH0KKworICAgICAgaWYgKHJlcyAhPSAwKSB7CisJbG9nTWVzc2FnZShMT0dfV0FSTklORywicHRocmVhZF9jcmVhdGU6ICVzIixzdHJlcnJvcihyZXMpKTsKKworCWZvciAoaS0tO2k+PTA7aS0tKSB7CisjaWZkZWYgX19NSU5HVzMyX18KKwkgIHB0aHJlYWRfY2FuY2VsKHNvY2tldFRocmVhZHNbaV0pOworI2Vsc2UgLyogX19NSU5HVzMyX18gKi8KKwkgIHB0aHJlYWRfa2lsbChzb2NrZXRUaHJlYWRzW2ldLCBTSUdVU1IyKTsKKyNlbmRpZiAvKiBfX01JTkdXMzJfXyAqLworCSAgcHRocmVhZF9qb2luKHNvY2tldFRocmVhZHNbaV0sIE5VTEwpOworICAgICAgICB9CisKKwlnb3RvIGZpbmlzaGVkOworICAgICAgfQorCisjaWZkZWYgX19NSU5HVzMyX18KKyAgICB9IGVsc2UgeworICAgICAgLyogV2luZG93cyBkb2Vzbid0IGhhdmUgdHJvdWJsZSB3aXRoIGxvY2FsIHNvY2tldHMgb24gcmVhZC1vbmx5CisgICAgICAgKiBmaWxlc3lzdGVtcywgYnV0IGl0IGhhcyB3aXRoIGludGVyLXRocmVhZCBvdmVybGFwcGVkIG9wZXJhdGlvbnMsCisgICAgICAgKiBzbyBjYWxsIGZyb20gaGVyZQorICAgICAgICovCisgICAgICBjcmVhdGVTb2NrZXQoaSk7CisgICAgfQorI2VuZGlmIC8qIF9fTUlOR1czMl9fICovCisgIH0KKworICB1bmF1dGhDb25uZWN0aW9ucyA9IDA7CisgIHVuYXV0aENvbm5Mb2cgPSAwOworCisgIHdoaWxlIChydW5uaW5nKSB7CisjaWZkZWYgX19NSU5HVzMyX18KKyAgICBscEhhbmRsZXMgPSBtYWxsb2MobmJBbGxvYyAqIHNpemVvZigqbHBIYW5kbGVzKSk7CisgICAgbmJIYW5kbGVzID0gMDsKKworICAgIGZvciAoaT0wO2k8c2VydmVyU29ja2V0Q291bnQ7aSsrKSB7CisgICAgICBpZiAoc29ja2V0SW5mb1tpXS5mZCAhPSBJTlZBTElEX0hBTkRMRV9WQUxVRSkgeworCWxwSGFuZGxlc1tuYkhhbmRsZXMrK10gPSBzb2NrZXRJbmZvW2ldLm92ZXJsLmhFdmVudDsKKyAgICAgIH0KKyAgICB9CisKKyAgICBsb2NrTXV0ZXgoJmFwaUNvbm5lY3Rpb25zTXV0ZXgpOworICAgIGFkZFR0eUZkcygmbHBIYW5kbGVzLCAmbmJBbGxvYywgJm5iSGFuZGxlcywgJm5vdHR5KTsKKyAgICBhZGRUdHlGZHMoJmxwSGFuZGxlcywgJm5iQWxsb2MsICZuYkhhbmRsZXMsICZ0dHlzKTsKKyAgICB1bmxvY2tNdXRleCgmYXBpQ29ubmVjdGlvbnNNdXRleCk7CisKKyAgICBpZiAoIW5iSGFuZGxlcykgeworICAgICAgZnJlZShscEhhbmRsZXMpOworICAgICAgYXBwcm94aW1hdGVEZWxheSgxMDAwKTsKKyAgICAgIGNvbnRpbnVlOworICAgIH0KKworICAgIHN3aXRjaCAoV2FpdEZvck11bHRpcGxlT2JqZWN0cyhuYkhhbmRsZXMsIGxwSGFuZGxlcywgRkFMU0UsIDEwMDApKSB7CisgICAgICBjYXNlIFdBSVRfVElNRU9VVDoKKyAgICAgICAgY29udGludWU7CisKKyAgICAgIGNhc2UgV0FJVF9GQUlMRUQ6CisgICAgICAgIGxvZ1dpbmRvd3NTeXN0ZW1FcnJvcigiV2FpdEZvck11bHRpcGxlT2JqZWN0cyIpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBmcmVlKGxwSGFuZGxlcyk7CisjZWxzZSAvKiBfX01JTkdXMzJfXyAqLworICAgIC8qIENvbXB1dGUgc29ja2V0cyBzZXQgYW5kIGZkbWF4ICovCisgICAgRkRfWkVSTygmc29ja3NldCk7CisgICAgZmRtYXg9MDsKKworICAgIGxvY2tNdXRleCgmYXBpQ29ubmVjdGlvbnNNdXRleCk7CisgICAgYWRkVHR5RmRzKCZzb2Nrc2V0LCAmZmRtYXgsICZub3R0eSk7CisgICAgYWRkVHR5RmRzKCZzb2Nrc2V0LCAmZmRtYXgsICZ0dHlzKTsKKyAgICB1bmxvY2tNdXRleCgmYXBpQ29ubmVjdGlvbnNNdXRleCk7CisKKyAgICB7CisgICAgICBzdHJ1Y3QgdGltZXZhbCB0diwgKnRpbWVvdXQ7CisKKyAgICAgIGxvY2tNdXRleCgmYXBpU29ja2V0c011dGV4KTsKKwlmb3IgKGk9MDtpPHNlcnZlclNvY2tldENvdW50O2krKykgeworCSAgaWYgKHNvY2tldEluZm9baV0uZmQ+PTApIHsKKwkgICAgRkRfU0VUKHNvY2tldEluZm9baV0uZmQsICZzb2Nrc2V0KTsKKworCSAgICBpZiAoc29ja2V0SW5mb1tpXS5mZD5mZG1heCkgeworCSAgICAgIGZkbWF4ID0gc29ja2V0SW5mb1tpXS5mZDsKKwkgICAgfQorCSAgfQorCX0KKworICAgICAgICBpZiAodW5hdXRoQ29ubmVjdGlvbnMgfHwgc2VydmVyU29ja2V0c1BlbmRpbmcpIHsKKyAgICAgICAgICBtZW1zZXQoJnR2LCAwLCBzaXplb2YodHYpKTsKKyAgICAgICAgICB0di50dl9zZWMgPSBTRVJWRVJfU0VMRUNUX1RJTUVPVVQ7CisgICAgICAgICAgdGltZW91dCA9ICZ0djsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICB0aW1lb3V0ID0gTlVMTDsKKyAgICAgICAgfQorICAgICAgdW5sb2NrTXV0ZXgoJmFwaVNvY2tldHNNdXRleCk7CisKKyAgICAgIGlmIChzZWxlY3QoZmRtYXgrMSwgJnNvY2tzZXQsIE5VTEwsIE5VTEwsIHRpbWVvdXQpIDwgMCkgeworICAgICAgICBpZiAoZmRtYXg9PTApIGNvbnRpbnVlOyAvKiBzdGlsbCBubyBzZXJ2ZXIgc29ja2V0ICovCisgICAgICAgIGxvZ01lc3NhZ2UoTE9HX1dBUk5JTkcsInNlbGVjdDogJXMiLHN0cmVycm9yKGVycm5vKSk7CisgICAgICAgIGJyZWFrOworICAgICAgfQorICAgIH0KKyNlbmRpZiAvKiBfX01JTkdXMzJfXyAqLworCisgICAgdGltZSgmY3VycmVudFRpbWUpOworCisgICAgZm9yIChpPTA7aTxzZXJ2ZXJTb2NrZXRDb3VudDtpKyspIHsKKyAgICAgIGNoYXIgc291cmNlWzBYMTAwXTsKKworI2lmZGVmIF9fTUlOR1czMl9fCisgICAgICBpZiAoc29ja2V0SW5mb1tpXS5mZCAhPSBJTlZBTElEX0ZJTEVfREVTQ1JJUFRPUiAmJgorICAgICAgICAgIFdhaXRGb3JTaW5nbGVPYmplY3Qoc29ja2V0SW5mb1tpXS5vdmVybC5oRXZlbnQsIDApID09IFdBSVRfT0JKRUNUXzApIHsKKyAgICAgICAgaWYgKHNvY2tldEluZm9baV0uYWRkcmZhbWlseSA9PSBQRl9MT0NBTCkgeworICAgICAgICAgIERXT1JEIGZvbzsKKworICAgICAgICAgIGlmICghKEdldE92ZXJsYXBwZWRSZXN1bHQoc29ja2V0SW5mb1tpXS5mZCwgJnNvY2tldEluZm9baV0ub3ZlcmwsICZmb28sIEZBTFNFKSkpIHsKKyAgICAgICAgICAgIGxvZ1dpbmRvd3NTeXN0ZW1FcnJvcigiR2V0T3ZlcmxhcHBlZFJlc3VsdCIpOworICAgICAgICAgIH0KKworICAgICAgICAgIHJlc2ZkID0gc29ja2V0SW5mb1tpXS5mZDsKKyAgICAgICAgICBpZiAoKHNvY2tldEluZm9baV0uZmQgPSBjcmVhdGVMb2NhbFNvY2tldCgmc29ja2V0SW5mb1tpXSkpICE9IElOVkFMSURfRklMRV9ERVNDUklQVE9SKSB7CisgICAgICAgICAgICBsb2dNZXNzYWdlKExPR19DQVRFR09SWShTRVJWRVJfRVZFTlRTKSwgInNvY2tldCAlZCByZS1lc3RhYmxpc2hlZCAoZmQgJSJQUklmZCIsIHdhcyAlIlBSSWZkIikiLGksc29ja2V0SW5mb1tpXS5mZCxyZXNmZCk7CisgICAgICAgICAgfQorCisgICAgICAgICAgc25wcmludGYoc291cmNlLCBzaXplb2Yoc291cmNlKSwgQlJMQVBJX1NPQ0tFVFBBVEggIiVzIiwgc29ja2V0SW5mb1tpXS5wb3J0KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICBpZiAoIVJlc2V0RXZlbnQoc29ja2V0SW5mb1tpXS5vdmVybC5oRXZlbnQpKSB7CisgICAgICAgICAgICBsb2dXaW5kb3dzU3lzdGVtRXJyb3IoIlJlc2V0RXZlbnQgaW4gc2VydmVyIGxvb3AiKTsKKyAgICAgICAgICB9CisjZWxzZSAvKiBfX01JTkdXMzJfXyAqLworICAgICAgaWYgKHNvY2tldEluZm9baV0uZmQ+PTAgJiYgRkRfSVNTRVQoc29ja2V0SW5mb1tpXS5mZCwgJnNvY2tzZXQpKSB7CisjZW5kaWYgLyogX19NSU5HVzMyX18gKi8KKyAgICAgICAgICBhZGRybGVuID0gc2l6ZW9mKGFkZHIpOworICAgICAgICAgIHJlc2ZkID0gKEZpbGVEZXNjcmlwdG9yKWFjY2VwdCgoU29ja2V0RGVzY3JpcHRvcilzb2NrZXRJbmZvW2ldLmZkLCAoc3RydWN0IHNvY2thZGRyICopICZhZGRyLCAmYWRkcmxlbik7CisKKyAgICAgICAgICBpZiAocmVzZmQgPT0gSU5WQUxJRF9GSUxFX0RFU0NSSVBUT1IpIHsKKyAgICAgICAgICAgIHNldFNvY2tldEVycm5vKCk7CisgICAgICAgICAgICBsb2dNZXNzYWdlKExPR19XQVJOSU5HLCJhY2NlcHQoJSJQUklmZCIpOiAlcyIsc29ja2V0SW5mb1tpXS5mZCxzdHJlcnJvcihlcnJubykpOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgfQorCisjaWZuZGVmIF9fTUlOR1czMl9fCisgICAgICAgICAgaWYgKHJlc2ZkID49IEZEX1NFVFNJWkUpIHsKKyAgICAgICAgICAgIC8qIFdpbGwgbm90IGJlIGFibGUgdG8gY2FsbCBzZWxlY3QoKSBvbiB0aGlzICovCisgICAgICAgICAgICBzZXRFcnJubyhFTUZJTEUpOworICAgICAgICAgICAgbG9nTWVzc2FnZShMT0dfV0FSTklORywiYWNjZXB0KCUiUFJJZmQiKTogJXMiLHNvY2tldEluZm9baV0uZmQsc3RyZXJyb3IoZXJybm8pKTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgIH0KKworI2VuZGlmIC8qICFfX01JTkdXMzJfXyAqLworCisgICAgICAgICAgZm9ybWF0QWRkcmVzcyhzb3VyY2UsIHNpemVvZihzb3VyY2UpLCAmYWRkciwgYWRkcmxlbik7CisjaWZkZWYgX19NSU5HVzMyX18KKyAgICAgICAgfQorI2VuZGlmIC8qIF9fTUlOR1czMl9fICovCisKKyAgICAgICAgbG9nTWVzc2FnZShMT0dfQ0FURUdPUlkoU0VSVkVSX0VWRU5UUyksCisgICAgICAgICAgIkJybEFQSSBjb25uZWN0aW9uIGZkPSUiUFJJZmQiIGFjY2VwdGVkOiAlcyIsIHJlc2ZkLCBzb3VyY2UKKyAgICAgICAgKTsKKworICAgICAgICBpZiAodW5hdXRoQ29ubmVjdGlvbnMgPj0gVU5BVVRIX0xJTUlUKSB7CisgICAgICAgICAgd3JpdGVFcnJvcihyZXNmZCwgQlJMQVBJX0VSUk9SX0NPTk5SRUZVU0VEKTsKKyAgICAgICAgICBjbG9zZUZpbGVEZXNjcmlwdG9yKHJlc2ZkKTsKKworICAgICAgICAgIGlmICh1bmF1dGhDb25uTG9nPT0wKSB7CisgICAgICAgICAgICBsb2dNZXNzYWdlKExPR19XQVJOSU5HLCAiVG9vIG1hbnkgc2ltdWx0YW5lb3VzIHVuYXV0aG9yaXplZCBjb25uZWN0aW9ucyIpOworICAgICAgICAgIH0KKworICAgICAgICAgIHVuYXV0aENvbm5Mb2crKzsKKyAgICAgICAgfSBlbHNlIHsKKyNpZm5kZWYgX19NSU5HVzMyX18KKyAgICAgICAgICBpZiAoIXNldEJsb2NraW5nSW8ocmVzZmQsIDApKSB7CisgICAgICAgICAgICBsb2dNZXNzYWdlKExPR19XQVJOSU5HLCAiRmFpbGVkIHRvIHN3aXRjaCB0byBub24tYmxvY2tpbmcgbW9kZTogJXMiLHN0cmVycm9yKGVycm5vKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICB9CisjZW5kaWYgLyogX19NSU5HVzMyX18gKi8KKworICAgICAgICAgIGMgPSBjcmVhdGVDb25uZWN0aW9uKHJlc2ZkLCBjdXJyZW50VGltZSk7CisgICAgICAgICAgaWYgKGM9PU5VTEwpIHsKKyAgICAgICAgICAgIGxvZ01lc3NhZ2UoTE9HX1dBUk5JTkcsIkZhaWxlZCB0byBjcmVhdGUgY29ubmVjdGlvbiBzdHJ1Y3R1cmUiKTsKKyAgICAgICAgICAgIGNsb3NlRmlsZURlc2NyaXB0b3IocmVzZmQpOworICAgICAgICAgIH0gZWxzZSB7CisJICAgIHVuYXV0aENvbm5lY3Rpb25zKys7CisJICAgIGFkZENvbm5lY3Rpb24oYywgbm90dHkuY29ubmVjdGlvbnMpOworCSAgICBoYW5kbGVOZXdDb25uZWN0aW9uKGMpOworCSAgfQorICAgICAgICB9CisgICAgICB9CisgICAgfQorCisgICAgaGFuZGxlVHR5RmRzKCZzb2Nrc2V0LGN1cnJlbnRUaW1lLCZub3R0eSk7CisgICAgaGFuZGxlVHR5RmRzKCZzb2Nrc2V0LGN1cnJlbnRUaW1lLCZ0dHlzKTsKKyAgfQorCisgIHJ1bm5pbmcgPSAwOworI2lmZGVmIF9fTUlOR1czMl9fCisgIHB0aHJlYWRfY2xlYW51cF9wb3AoMSk7CisjZWxzZSAvKiBfX01JTkdXMzJfXyAqLworICBjbG9zZVNvY2tldHMoTlVMTCk7CisjZW5kaWYgLyogX19NSU5HVzMyX18gKi8KKworZmluaXNoZWQ6CisgIGxvZ01lc3NhZ2UoTE9HX0NBVEVHT1JZKFNFUlZFUl9FVkVOVFMpLCAic2VydmVyIHRocmVhZCBmaW5pc2hlZCIpOworICByZXR1cm4gTlVMTDsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiogTUlTQ0VMTEFORU9VUyBGVU5DVElPTlMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiBGdW5jdGlvbiA6IGluaXRpYWxpemVBY2NlcHRlZEtleXMgKi8KKy8qIFNwZWNpZnkgd2hpY2gga2V5cyBzaG91bGQgYmUgcGFzc2VkIHRvIHRoZSBjbGllbnQgYnkgZGVmYXVsdCwgYXMgc29vbiAqLworLyogYXMgaXQgY29udHJvbHMgdGhlIHR0eSAqLworLyogSWYgY2xpZW50IGFza2VkIGZvciBjb21tYW5kcywgb25lIGxldHMgaXQgcHJvY2VzcyByb3V0aW5nIGN1cnNvciAqLworLyogYW5kIHNjcmVlbi1yZWxhdGVkIGNvbW1hbmRzICovCisvKiBJZiB0aGUgY2xpZW50IGlzIGludGVyZXN0ZWQgaW4gYnJhaWxsZSBjb2Rlcywgb25lIHBhc3NlcyBpdCBub3RoaW5nICovCisvKiB0byBsZXQgdGhlIHVzZXIgcmVhZCB0aGUgc2NyZWVuIGluIGNhc2UgdGhlcmVlIGlzIGFuIGVycm9yICovCitzdGF0aWMgaW50IGluaXRpYWxpemVBY2NlcHRlZEtleXMoQ29ubmVjdGlvbiAqYywgaW50IGhvdykKK3sKKyAgaWYgKGhvdyA9PSBCUkxfS0VZQ09ERVMpIHsKKyAgICBpZiAoYyAmJiBhZGRLZXlyYW5nZSgwLCBCUkxBUElfS0VZX01BWCwgJmMtPmFjY2VwdGVkS2V5cykgPT0gLTEpIHJldHVybiAtMTsKKyAgfSBlbHNlIHsKKyAgICBpZiAoYykgeworICAgICAgdHlwZWRlZiBzdHJ1Y3QgeworICAgICAgICBpbnQgKCphY3Rpb24pIChicmxhcGlfa2V5Q29kZV90IGZpcnN0LCBicmxhcGlfa2V5Q29kZV90IGxhc3QsIEtleXJhbmdlTGlzdCAqKmxpc3QpOworICAgICAgICBicmxhcGlfcmFuZ2VUeXBlX3QgdHlwZTsKKyAgICAgICAgYnJsYXBpX2tleUNvZGVfdCBjb2RlOworICAgICAgfSBLZXlyYW5nZUVudHJ5OworCisgICAgICBzdGF0aWMgY29uc3QgS2V5cmFuZ2VFbnRyeSBrZXlyYW5nZVRhYmxlW10gPSB7CisgICAgICAgIHsgLmFjdGlvbiA9IGFkZEtleXJhbmdlLAorICAgICAgICAgIC50eXBlID0gYnJsYXBpX3JhbmdlVHlwZV9hbGwsCisgICAgICAgICAgLmNvZGUgPSAwCisgICAgICAgIH0sCisKKyAgICAgICAgeyAuYWN0aW9uID0gcmVtb3ZlS2V5cmFuZ2UsCisgICAgICAgICAgLnR5cGUgPSBicmxhcGlfcmFuZ2VUeXBlX2NvbW1hbmQsCisgICAgICAgICAgLmNvZGUgPSBCUkxBUElfS0VZX1RZUEVfQ01EIHwgQlJMQVBJX0tFWV9DTURfT0ZGTElORQorICAgICAgICB9LAorCisgICAgICAgIHsgLmFjdGlvbiA9IHJlbW92ZUtleXJhbmdlLAorICAgICAgICAgIC50eXBlID0gYnJsYXBpX3JhbmdlVHlwZV9jb21tYW5kLAorICAgICAgICAgIC5jb2RlID0gQlJMQVBJX0tFWV9UWVBFX0NNRCB8IEJSTEFQSV9LRVlfQ01EX05PT1AKKyAgICAgICAgfSwKKworICAgICAgICB7IC5hY3Rpb24gPSByZW1vdmVLZXlyYW5nZSwKKyAgICAgICAgICAudHlwZSA9IGJybGFwaV9yYW5nZVR5cGVfY29tbWFuZCwKKyAgICAgICAgICAuY29kZSA9IEJSTEFQSV9LRVlfVFlQRV9DTUQgfCBCUkxBUElfS0VZX0NNRF9SRVNUQVJUQlJMCisgICAgICAgIH0sCisKKyAgICAgICAgeyAuYWN0aW9uID0gcmVtb3ZlS2V5cmFuZ2UsCisgICAgICAgICAgLnR5cGUgPSBicmxhcGlfcmFuZ2VUeXBlX2NvbW1hbmQsCisgICAgICAgICAgLmNvZGUgPSBCUkxBUElfS0VZX1RZUEVfQ01EIHwgQlJMQVBJX0tFWV9DTURfQlJMX1NUQVJUCisgICAgICAgIH0sCisKKyAgICAgICAgeyAuYWN0aW9uID0gcmVtb3ZlS2V5cmFuZ2UsCisgICAgICAgICAgLnR5cGUgPSBicmxhcGlfcmFuZ2VUeXBlX2NvbW1hbmQsCisgICAgICAgICAgLmNvZGUgPSBCUkxBUElfS0VZX1RZUEVfQ01EIHwgQlJMQVBJX0tFWV9DTURfQlJMX1NUT1AKKyAgICAgICAgfSwKKworICAgICAgICB7IC5hY3Rpb24gPSByZW1vdmVLZXlyYW5nZSwKKyAgICAgICAgICAudHlwZSA9IGJybGFwaV9yYW5nZVR5cGVfY29tbWFuZCwKKyAgICAgICAgICAuY29kZSA9IEJSTEFQSV9LRVlfVFlQRV9DTUQgfCBCUkxBUElfS0VZX0NNRF9SRVNUQVJUU1BFRUNICisgICAgICAgIH0sCisKKyAgICAgICAgeyAuYWN0aW9uID0gcmVtb3ZlS2V5cmFuZ2UsCisgICAgICAgICAgLnR5cGUgPSBicmxhcGlfcmFuZ2VUeXBlX2NvbW1hbmQsCisgICAgICAgICAgLmNvZGUgPSBCUkxBUElfS0VZX1RZUEVfQ01EIHwgQlJMQVBJX0tFWV9DTURfU1BLX1NUQVJUCisgICAgICAgIH0sCisKKyAgICAgICAgeyAuYWN0aW9uID0gcmVtb3ZlS2V5cmFuZ2UsCisgICAgICAgICAgLnR5cGUgPSBicmxhcGlfcmFuZ2VUeXBlX2NvbW1hbmQsCisgICAgICAgICAgLmNvZGUgPSBCUkxBUElfS0VZX1RZUEVfQ01EIHwgQlJMQVBJX0tFWV9DTURfU1BLX1NUT1AKKyAgICAgICAgfSwKKworICAgICAgICB7IC5hY3Rpb24gPSByZW1vdmVLZXlyYW5nZSwKKyAgICAgICAgICAudHlwZSA9IGJybGFwaV9yYW5nZVR5cGVfY29tbWFuZCwKKyAgICAgICAgICAuY29kZSA9IEJSTEFQSV9LRVlfVFlQRV9DTUQgfCBCUkxBUElfS0VZX0NNRF9TQ1JfU1RBUlQKKyAgICAgICAgfSwKKworICAgICAgICB7IC5hY3Rpb24gPSByZW1vdmVLZXlyYW5nZSwKKyAgICAgICAgICAudHlwZSA9IGJybGFwaV9yYW5nZVR5cGVfY29tbWFuZCwKKyAgICAgICAgICAuY29kZSA9IEJSTEFQSV9LRVlfVFlQRV9DTUQgfCBCUkxBUElfS0VZX0NNRF9TQ1JfU1RPUAorICAgICAgICB9LAorCisgICAgICAgIHsgLmFjdGlvbiA9IHJlbW92ZUtleXJhbmdlLAorICAgICAgICAgIC50eXBlID0gYnJsYXBpX3JhbmdlVHlwZV9jb21tYW5kLAorICAgICAgICAgIC5jb2RlID0gQlJMQVBJX0tFWV9UWVBFX0NNRCB8IEJSTEFQSV9LRVlfQ01EX1NXSVRDSFZUCisgICAgICAgIH0sCisKKyAgICAgICAgeyAuYWN0aW9uID0gcmVtb3ZlS2V5cmFuZ2UsCisgICAgICAgICAgLnR5cGUgPSBicmxhcGlfcmFuZ2VUeXBlX2NvbW1hbmQsCisgICAgICAgICAgLmNvZGUgPSBCUkxBUElfS0VZX1RZUEVfQ01EIHwgQlJMQVBJX0tFWV9DTURfU1dJVENIVlRfUFJFVgorICAgICAgICB9LAorCisgICAgICAgIHsgLmFjdGlvbiA9IHJlbW92ZUtleXJhbmdlLAorICAgICAgICAgIC50eXBlID0gYnJsYXBpX3JhbmdlVHlwZV9jb21tYW5kLAorICAgICAgICAgIC5jb2RlID0gQlJMQVBJX0tFWV9UWVBFX0NNRCB8IEJSTEFQSV9LRVlfQ01EX1NXSVRDSFZUX05FWFQKKyAgICAgICAgfSwKKworICAgICAgICB7IC5hY3Rpb24gPSByZW1vdmVLZXlyYW5nZSwKKyAgICAgICAgICAudHlwZSA9IGJybGFwaV9yYW5nZVR5cGVfY29tbWFuZCwKKyAgICAgICAgICAuY29kZSA9IEJSTEFQSV9LRVlfVFlQRV9DTUQgfCBCUkxBUElfS0VZX0NNRF9TRUxFQ1RWVAorICAgICAgICB9LAorCisgICAgICAgIHsgLmFjdGlvbiA9IHJlbW92ZUtleXJhbmdlLAorICAgICAgICAgIC50eXBlID0gYnJsYXBpX3JhbmdlVHlwZV9jb21tYW5kLAorICAgICAgICAgIC5jb2RlID0gQlJMQVBJX0tFWV9UWVBFX0NNRCB8IEJSTEFQSV9LRVlfQ01EX1NFTEVDVFZUX1BSRVYKKyAgICAgICAgfSwKKworICAgICAgICB7IC5hY3Rpb24gPSByZW1vdmVLZXlyYW5nZSwKKyAgICAgICAgICAudHlwZSA9IGJybGFwaV9yYW5nZVR5cGVfY29tbWFuZCwKKyAgICAgICAgICAuY29kZSA9IEJSTEFQSV9LRVlfVFlQRV9DTUQgfCBCUkxBUElfS0VZX0NNRF9TRUxFQ1RWVF9ORVhUCisgICAgICAgIH0sCisKKyAgICAgICAgeyAuYWN0aW9uID0gcmVtb3ZlS2V5cmFuZ2UsCisgICAgICAgICAgLnR5cGUgPSBicmxhcGlfcmFuZ2VUeXBlX2NvbW1hbmQsCisgICAgICAgICAgLmNvZGUgPSBCUkxBUElfS0VZX1RZUEVfQ01EIHwgQlJMQVBJX0tFWV9DTURfUEFTU1hUCisgICAgICAgIH0sCisKKyAgICAgICAgeyAuYWN0aW9uID0gcmVtb3ZlS2V5cmFuZ2UsCisgICAgICAgICAgLnR5cGUgPSBicmxhcGlfcmFuZ2VUeXBlX2NvbW1hbmQsCisgICAgICAgICAgLmNvZGUgPSBCUkxBUElfS0VZX1RZUEVfQ01EIHwgQlJMQVBJX0tFWV9DTURfUEFTU0FUCisgICAgICAgIH0sCisKKyAgICAgICAgeyAuYWN0aW9uID0gcmVtb3ZlS2V5cmFuZ2UsCisgICAgICAgICAgLnR5cGUgPSBicmxhcGlfcmFuZ2VUeXBlX2NvbW1hbmQsCisgICAgICAgICAgLmNvZGUgPSBCUkxBUElfS0VZX1RZUEVfQ01EIHwgQlJMQVBJX0tFWV9DTURfUEFTU1BTMgorICAgICAgICB9LAorCisgICAgICAgIHsgLmFjdGlvbiA9IHJlbW92ZUtleXJhbmdlLAorICAgICAgICAgIC50eXBlID0gYnJsYXBpX3JhbmdlVHlwZV9jb21tYW5kLAorICAgICAgICAgIC5jb2RlID0gQlJMQVBJX0tFWV9UWVBFX0NNRCB8IEJSTEFQSV9LRVlfQ01EX0NPTlRFWFQKKyAgICAgICAgfSwKKworICAgICAgICB7IC5hY3Rpb24gPSByZW1vdmVLZXlyYW5nZSwKKyAgICAgICAgICAudHlwZSA9IGJybGFwaV9yYW5nZVR5cGVfY29tbWFuZCwKKyAgICAgICAgICAuY29kZSA9IEJSTEFQSV9LRVlfVFlQRV9DTUQgfCBCUkxBUElfS0VZX0NNRF9BTEVSVAorICAgICAgICB9LAorCisgICAgICAgIHsgLmFjdGlvbiA9IHJlbW92ZUtleXJhbmdlLAorICAgICAgICAgIC50eXBlID0gYnJsYXBpX3JhbmdlVHlwZV9jb21tYW5kLAorICAgICAgICAgIC5jb2RlID0gQlJMQVBJX0tFWV9UWVBFX0NNRCB8IEJSTEFQSV9LRVlfQ01EX1BBU1NET1RTCisgICAgICAgIH0sCisKKyAgICAgICAgeyAuYWN0aW9uID0gTlVMTCB9CisgICAgICB9OworCisgICAgICBjb25zdCBLZXlyYW5nZUVudHJ5ICprZXlyYW5nZSA9IGtleXJhbmdlVGFibGU7CisKKyAgICAgIHdoaWxlIChrZXlyYW5nZS0+YWN0aW9uKSB7CisgICAgICAgIGJybGFwaV9rZXlDb2RlX3QgZmlyc3Q7CisgICAgICAgIGJybGFwaV9rZXlDb2RlX3QgbWFzazsKKyAgICAgICAgYnJsYXBpX2tleUNvZGVfdCBsYXN0OworCisgICAgICAgIGZpcnN0ID0ga2V5cmFuZ2UtPmNvZGU7CisgICAgICAgIGlmIChicmxhcGlzZXJ2ZXJfZ2V0S2V5cmFuZ2VNYXNrKGtleXJhbmdlLT50eXBlLCBmaXJzdCwgJm1hc2spID09IC0xKSByZXR1cm4gLTE7CisgICAgICAgIGxhc3QgPSBmaXJzdCB8IG1hc2s7CisKKyAgICAgICAgaWYgKGtleXJhbmdlLT5hY3Rpb24oZmlyc3QsIGxhc3QsICZjLT5hY2NlcHRlZEtleXMpID09IC0xKSByZXR1cm4gLTE7CisgICAgICAgIGtleXJhbmdlICs9IDE7CisgICAgICB9CisgICAgfQorICB9CisKKyAgcmV0dXJuIDA7Cit9CisKKy8qIEZ1bmN0aW9uOiB0dHlUZXJtaW5hdGlvbkhhbmRsZXIgKi8KKy8qIFJlY3Vyc2l2ZWx5IHJlbW92ZXMgY29ubmVjdGlvbnMgKi8KK3N0YXRpYyB2b2lkIHR0eVRlcm1pbmF0aW9uSGFuZGxlcihUdHkgKnR0eSkKK3sKKyAgd2hpbGUgKHR0eS0+Y29ubmVjdGlvbnMtPm5leHQgIT0gdHR5LT5jb25uZWN0aW9ucykgeworICAgIHJlbW92ZUZyZWVDb25uZWN0aW9uKHR0eS0+Y29ubmVjdGlvbnMtPm5leHQpOworICB9CisgIGZyZWVDb25uZWN0aW9uKHR0eS0+Y29ubmVjdGlvbnMpOworCisgIHsKKyAgICBUdHkgKnQgPSB0dHktPnN1YnR0eXM7CisKKyAgICB3aGlsZSAodCkgeworICAgICAgdHR5VGVybWluYXRpb25IYW5kbGVyKHQpOworICAgICAgdCA9IHQtPm5leHQ7CisgICAgfQorICB9Cit9CisvKiBGdW5jdGlvbiA6IHRlcm1pbmF0aW9uSGFuZGxlciAqLworLyogVGVybWluYXRlcyBkcml2ZXIgKi8KK3N0YXRpYyB2b2lkIHRlcm1pbmF0aW9uSGFuZGxlcih2b2lkKQoreworICBpbnQgcmVzOworICBydW5uaW5nID0gMDsKKworI2lmZGVmIF9fTUlOR1czMl9fCisgIHJlcyA9IHB0aHJlYWRfY2FuY2VsKHNlcnZlclRocmVhZCk7CisjZWxzZSAvKiBfX01JTkdXMzJfXyAqLworICByZXMgPSBwdGhyZWFkX2tpbGwoc2VydmVyVGhyZWFkLCBTSUdVU1IyKTsKKyNlbmRpZiAvKiBfX01JTkdXMzJfXyAqLworICBwdGhyZWFkX2pvaW4oc2VydmVyVGhyZWFkLCBOVUxMKTsKKworICBpZiAocmVzICE9IDApIHsKKyAgICBsb2dNZXNzYWdlKExPR19XQVJOSU5HLCJwdGhyZWFkX2NhbmNlbDogJXMiLHN0cmVycm9yKHJlcykpOworICB9CisKKyAgdHR5VGVybWluYXRpb25IYW5kbGVyKCZub3R0eSk7CisgIHR0eVRlcm1pbmF0aW9uSGFuZGxlcigmdHR5cyk7CisKKyAgaWYgKGF1dGhEZXNjcmlwdG9yKSB7CisgICAgYXV0aEVuZChhdXRoRGVzY3JpcHRvcik7CisgICAgYXV0aERlc2NyaXB0b3IgPSBOVUxMOworICB9CisKKyNpZmRlZiBfX01JTkdXMzJfXworICBXU0FDbGVhbnVwKCk7CisjZW5kaWYgLyogX19NSU5HVzMyX18gKi8KKworICBpZiAoc29ja2V0SG9zdHMpIHsKKyAgICBkZWFsbG9jYXRlU3RyaW5ncyhzb2NrZXRIb3N0cyk7CisgICAgc29ja2V0SG9zdHMgPSBOVUxMOworICB9Cit9CisKKy8qIEZ1bmN0aW9uOiB3aG9GaWxsc1R0eSAqLworLyogUmV0dXJucyB0aGUgY29ubmVjdGlvbiB3aGljaCBmaWxscyB0aGUgdHR5ICovCitzdGF0aWMgQ29ubmVjdGlvbiAqd2hvRmlsbHNUdHkoVHR5ICp0dHkpIHsKKyAgQ29ubmVjdGlvbiAqYzsKKyAgVHR5ICp0OworICBmb3IgKGM9dHR5LT5jb25uZWN0aW9ucy0+bmV4dDsgYyE9dHR5LT5jb25uZWN0aW9uczsgYyA9IGMtPm5leHQpCisgICAgaWYgKGMtPmJybGJ1ZnN0YXRlIT1FTVBUWQorICAgICAgICAmJiBjLT5jbGllbnRfcHJpb3JpdHkgIT0gQlJMQVBJX1BBUkFNX0NMSUVOVF9QUklPUklUWV9ESVNBQkxFKSB7CisgICAgICBnb3RvIGZvdW5kOworICAgIH0KKworICBjID0gTlVMTDsKK2ZvdW5kOgorICBmb3IgKHQgPSB0dHktPnN1YnR0eXM7IHQ7IHQgPSB0LT5uZXh0KQorICAgIGlmICh0dHktPmZvY3VzPT1TQ1JfTk9fVlQgfHwgdC0+bnVtYmVyID09IHR0eS0+Zm9jdXMpIHsKKyAgICAgIENvbm5lY3Rpb24gKnJlY3VyX2MgPSB3aG9GaWxsc1R0eSh0KTsKKyAgICAgIHJldHVybiByZWN1cl9jID8gcmVjdXJfYyA6IGM7CisgICAgfQorICByZXR1cm4gYzsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHNldEN1cnJlbnRSb290VHR5KHZvaWQpIHsKKyAgdHR5cy5mb2N1cyA9IGN1cnJlbnRWaXJ0dWFsVGVybWluYWwoKTsKK30KKworLyogRnVuY3Rpb24gOiBhcGlfd3JpdGVXaW5kb3cgKi8KK3N0YXRpYyBpbnQgYXBpX3dyaXRlV2luZG93KEJyYWlsbGVEaXNwbGF5ICpicmwsIGNvbnN0IHdjaGFyX3QgKnRleHQpCit7CisgIGludCBvayA9IDE7CisgIGlmICh0ZXh0KQorICAgIG1lbWNweShjb3JlV2luZG93VGV4dCwgdGV4dCwgZGlzcGxheVNpemUgKiBzaXplb2YoKmNvcmVXaW5kb3dUZXh0KSk7CisgIGVsc2UKKyAgICBtZW1zZXQoY29yZVdpbmRvd1RleHQsIDAsIGRpc3BsYXlTaXplICogc2l6ZW9mKCpjb3JlV2luZG93VGV4dCkpOworICBtZW1jcHkoY29yZVdpbmRvd0RvdHMsIGJybC0+YnVmZmVyLCBkaXNwbGF5U2l6ZSAqIHNpemVvZigqY29yZVdpbmRvd0RvdHMpKTsKKyAgY29yZVdpbmRvd0N1cnNvciA9IGJybC0+Y3Vyc29yOworICBzZXRDdXJyZW50Um9vdFR0eSgpOworICBsb2NrTXV0ZXgoJmFwaUNvbm5lY3Rpb25zTXV0ZXgpOworICBsb2NrTXV0ZXgoJmFwaVJhd011dGV4KTsKKyAgaWYgKCFvZmZsaW5lICYmICFzdXNwZW5kQ29ubmVjdGlvbiAmJiAhcmF3Q29ubmVjdGlvbiAmJiAhd2hvRmlsbHNUdHkoJnR0eXMpKSB7CisgICAgbG9ja011dGV4KCZhcGlEcml2ZXJNdXRleCk7CisgICAgaWYgKCF0cnVlQnJhaWxsZS0+d3JpdGVXaW5kb3coYnJsLCB0ZXh0KSkgb2sgPSAwOworICAgIHVubG9ja011dGV4KCZhcGlEcml2ZXJNdXRleCk7CisgIH0KKyAgdW5sb2NrTXV0ZXgoJmFwaVJhd011dGV4KTsKKyAgdW5sb2NrTXV0ZXgoJmFwaUNvbm5lY3Rpb25zTXV0ZXgpOworICByZXR1cm4gb2s7Cit9CisKKy8qIEZ1bmN0aW9uOiB3aG9HZXRzS2V5ICovCisvKiBSZXR1cm5zIHRoZSBjb25uZWN0aW9uIHdoaWNoIGdldHMgdGhhdCBrZXkgKi8KK3N0YXRpYyBDb25uZWN0aW9uICp3aG9HZXRzS2V5KFR0eSAqdHR5LCBicmxhcGlfa2V5Q29kZV90IGNvZGUsIHVuc2lnbmVkIGludCBob3csIHVuc2lnbmVkIGludCByZXRhaW5Eb3RzKQoreworICBDb25uZWN0aW9uICpjOworICBUdHkgKnQ7CisgIGludCBwYXNzS2V5OworICBmb3IgKGM9dHR5LT5jb25uZWN0aW9ucy0+bmV4dDsgYyE9dHR5LT5jb25uZWN0aW9uczsgYyA9IGMtPm5leHQpIHsKKyAgICBsb2NrTXV0ZXgoJmMtPmFjY2VwdGVkS2V5c011dGV4KTsKKyAgICBwYXNzS2V5ID0gKGMtPmhvdz09aG93KSAmJiAoaW5LZXlyYW5nZUxpc3QoYy0+YWNjZXB0ZWRLZXlzLGNvZGUpICE9IE5VTEwpCisgICAgICAmJiAoaG93ICE9IEJSTF9DT01NQU5EUyB8fCAoIXJldGFpbkRvdHMgfHwgYy0+cmV0YWluRG90cykpOworICAgIHVubG9ja011dGV4KCZjLT5hY2NlcHRlZEtleXNNdXRleCk7CisgICAgaWYgKHBhc3NLZXkpIGdvdG8gZm91bmQ7CisgIH0KKyAgYyA9IE5VTEw7Citmb3VuZDoKKyAgZm9yICh0ID0gdHR5LT5zdWJ0dHlzOyB0OyB0ID0gdC0+bmV4dCkKKyAgICBpZiAodHR5LT5mb2N1cz09U0NSX05PX1ZUIHx8IHQtPm51bWJlciA9PSB0dHktPmZvY3VzKSB7CisgICAgICBDb25uZWN0aW9uICpyZWN1cl9jID0gd2hvR2V0c0tleSh0LCBjb2RlLCBob3csIHJldGFpbkRvdHMpOworICAgICAgcmV0dXJuIHJlY3VyX2MgPyByZWN1cl9jIDogYzsKKyAgICB9CisgIHJldHVybiBjOworfQorCisvKiBUZW1wb3JhcnkgZnVuY3Rpb24sIHVudGlsIHdlIGltcGxlbWVudCBwcm9wZXIgZ2VuZXJpYyBzdXBwb3J0IGZvciB2YXJpYWJsZXMuCisgKi8KK3N0YXRpYyB2b2lkIGJyb2FkY2FzdEtleShUdHkgKnR0eSwgYnJsYXBpX2tleUNvZGVfdCBjb2RlLCB1bnNpZ25lZCBpbnQgaG93KSB7CisgIENvbm5lY3Rpb24gKmM7CisgIFR0eSAqdDsKKyAgZm9yIChjPXR0eS0+Y29ubmVjdGlvbnMtPm5leHQ7IGMhPXR0eS0+Y29ubmVjdGlvbnM7IGMgPSBjLT5uZXh0KSB7CisgICAgbG9ja011dGV4KCZjLT5hY2NlcHRlZEtleXNNdXRleCk7CisgICAgaWYgKChjLT5ob3c9PWhvdykgJiYgKGluS2V5cmFuZ2VMaXN0KGMtPmFjY2VwdGVkS2V5cyxjb2RlKSAhPSBOVUxMKSkKKyAgICAgIHdyaXRlS2V5KGMtPmZkLGNvZGUpOworICAgIHVubG9ja011dGV4KCZjLT5hY2NlcHRlZEtleXNNdXRleCk7CisgIH0KKyAgZm9yICh0ID0gdHR5LT5zdWJ0dHlzOyB0OyB0ID0gdC0+bmV4dCkKKyAgICBicm9hZGNhc3RLZXkodCwgY29kZSwgaG93KTsKK30KKworLyogVGhlIGNvcmUgcHJvZHVjZWQgYSBrZXkgZXZlbnQsIHRyeSB0byBzZW5kIGl0IHRvIGEgYnJsYXBpIGNsaWVudC4gKi8KK3N0YXRpYyBpbnQgYXBpX19oYW5kbGVLZXlFdmVudChicmxhcGlfa2V5Q29kZV90IGNsaWVudENvZGUpIHsKKyAgQ29ubmVjdGlvbiAqYzsKKworICBpZiAob2ZmbGluZSkgeworICAgIGJyb2FkY2FzdEtleSgmdHR5cywgQlJMQVBJX0tFWV9UWVBFX0NNRHxCUkxBUElfS0VZX0NNRF9OT09QLCBCUkxfQ09NTUFORFMpOworICAgIG9mZmxpbmUgPSAwOworICB9CisgIC8qIHNvbWVib2R5IGdldHMgdGhlIHJhdyBjb2RlICovCisgIGlmICgoYyA9IHdob0dldHNLZXkoJnR0eXMsIGNsaWVudENvZGUsIEJSTF9LRVlDT0RFUywgMCkpKSB7CisgICAgbG9nTWVzc2FnZShMT0dfQ0FURUdPUlkoU0VSVkVSX0VWRU5UUyksICJ0cmFuc21pdHRpbmcgYWNjZXB0ZWQga2V5ICUwMTYiQlJMQVBJX1BSSXhLRVlDT0RFIiB0byBmZCAlIlBSSWZkLGNsaWVudENvZGUsYy0+ZmQpOworICAgIHdyaXRlS2V5KGMtPmZkLGNsaWVudENvZGUpOworICAgIHJldHVybiAxOworICB9CisgIHJldHVybiAwOworfQorCitpbnQgYXBpX2hhbmRsZUtleUV2ZW50KEtleUdyb3VwIGdyb3VwLCBLZXlOdW1iZXIgbnVtYmVyLCBpbnQgcHJlc3MpIHsKKyAgYnJsYXBpX2tleUNvZGVfdCBjbGllbnRDb2RlID0gbWFrZURyaXZlcktleUNvZGUoZ3JvdXAsIG51bWJlciwgcHJlc3MpOworICBsb2dNZXNzYWdlKExPR19DQVRFR09SWShTRVJWRVJfRVZFTlRTKSwgIkFQSSBnb3Qga2V5ICUwMnggJTAyeCAocHJlc3MgJWQpLCB0aHVzIGNsaWVudCBjb2RlICUwMTYiQlJMQVBJX1BSSXhLRVlDT0RFLCBncm91cCwgbnVtYmVyLCBwcmVzcywgY2xpZW50Q29kZSk7CisKKyAgaW50IHJldDsKKyAgbG9ja011dGV4KCZhcGlDb25uZWN0aW9uc011dGV4KTsKKyAgcmV0ID0gYXBpX19oYW5kbGVLZXlFdmVudChjbGllbnRDb2RlKTsKKyAgdW5sb2NrTXV0ZXgoJmFwaUNvbm5lY3Rpb25zTXV0ZXgpOworICByZXR1cm4gcmV0OworfQorCisvKiBUaGUgY29yZSBwcm9kdWNlZCBhIGNvbW1hbmQsIHRyeSB0byBzZW5kIGl0IHRvIGEgYnJsYXBpIGNsaWVudC4KKyAqIFJldHVybiB0cnVlIGlmIGhhbmRsZWQgYW5kIGZhbHNlIG90aGVyd2lzZS4gICovCitzdGF0aWMgaW50IGFwaV9faGFuZGxlQ29tbWFuZChpbnQgY29tbWFuZCkgeworICBpZiAoY29tbWFuZCA9PSBCUkxfQ01EX09GRkxJTkUpIHsKKyAgICBpZiAoIW9mZmxpbmUpIHsKKyAgICAgIGJyb2FkY2FzdEtleSgmdHR5cywgQlJMQVBJX0tFWV9UWVBFX0NNRHxCUkxBUElfS0VZX0NNRF9PRkZMSU5FLCBCUkxfQ09NTUFORFMpOworICAgICAgb2ZmbGluZSA9IDE7CisgICAgfQorCisgICAgcmV0dXJuIDA7CisgIH0KKworICBpZiAob2ZmbGluZSkgeworICAgIGJyb2FkY2FzdEtleSgmdHR5cywgQlJMQVBJX0tFWV9UWVBFX0NNRHxCUkxBUElfS0VZX0NNRF9OT09QLCBCUkxfQ09NTUFORFMpOworICAgIG9mZmxpbmUgPSAwOworICB9CisKKyAgaWYgKGNvbW1hbmQgIT0gRU9GKSB7CisgICAgQ29ubmVjdGlvbiAqYyA9IE5VTEw7CisgICAgYnJsYXBpX2tleUNvZGVfdCBjb2RlOworICAgIGlmICghY21kQnJsdHR5VG9CcmxhcGkoJmNvZGUsIGNvbW1hbmQsIDEpKSB7CisgICAgICBsb2dNZXNzYWdlKExPR19DQVRFR09SWShTRVJWRVJfRVZFTlRTKSwgImNvbW1hbmQgJTA4eCBjb3VsZCBub3QgYmUgY29udmVydGVkIHRvIEJybEFQSSB3aXRoIHJldGFpbkRvdHMiLCBjb21tYW5kKTsKKyAgICB9IGVsc2UgeworICAgICAgbG9nTWVzc2FnZShMT0dfQ0FURUdPUlkoU0VSVkVSX0VWRU5UUyksICJjb21tYW5kICUwOHggLT4gY2xpZW50IGNvZGUgJTAxNiJCUkxBUElfUFJJeEtFWUNPREUsIGNvbW1hbmQsIGNvZGUpOworICAgICAgYyA9IHdob0dldHNLZXkoJnR0eXMsIGNvZGUsIEJSTF9DT01NQU5EUywgMSk7CisgICAgfQorCisgICAgaWYgKCFjKSB7CisgICAgICBicmxhcGlfa2V5Q29kZV90IGFsdGVybmF0ZTsKKyAgICAgIGlmICghY21kQnJsdHR5VG9CcmxhcGkoJmFsdGVybmF0ZSwgY29tbWFuZCwgMCkpIHsKKwlsb2dNZXNzYWdlKExPR19DQVRFR09SWShTRVJWRVJfRVZFTlRTKSwgImNvbW1hbmQgJTA4eCBjb3VsZCBub3QgYmUgY29udmVydGVkIHRvIEJybEFQSSB3aXRob3V0IHJldGFpbkRvdHMiLCBjb21tYW5kKTsKKyAgICAgIH0gZWxzZSB7CisJbG9nTWVzc2FnZShMT0dfQ0FURUdPUlkoU0VSVkVSX0VWRU5UUyksICJjb21tYW5kICUwOHggLT4gY2xpZW50IGNvZGUgJTAxNiJCUkxBUElfUFJJeEtFWUNPREUsIGNvbW1hbmQsIGFsdGVybmF0ZSk7CisJYyA9IHdob0dldHNLZXkoJnR0eXMsIGFsdGVybmF0ZSwgQlJMX0NPTU1BTkRTLCAwKTsKKwlpZiAoYykgY29kZSA9IGFsdGVybmF0ZTsKKyAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoYykgeworICAgICAgbG9nTWVzc2FnZShMT0dfQ0FURUdPUlkoU0VSVkVSX0VWRU5UUyksICJ0cmFuc21pdHRpbmcgYWNjZXB0ZWQgY29tbWFuZCAlbHggYXMgY2xpZW50IGNvZGUgJTAxNiJCUkxBUElfUFJJeEtFWUNPREUiIHRvIGZkICUiUFJJZmQsKHVuc2lnbmVkIGxvbmcpY29tbWFuZCxjb2RlLGMtPmZkKTsKKyAgICAgIHdyaXRlS2V5KGMtPmZkLCBjb2RlKTsKKyAgICAgIHJldHVybiAxOworICAgIH0KKyAgfQorCisgIHJldHVybiAwOworfQorCitpbnQgYXBpX2hhbmRsZUNvbW1hbmQoaW50IGNvbW1hbmQpIHsKKyAgaW50IGhhbmRsZWQ7CisKKyAgbG9ja011dGV4KCZhcGlDb25uZWN0aW9uc011dGV4KTsKKyAgaGFuZGxlZCA9IGFwaV9faGFuZGxlQ29tbWFuZChjb21tYW5kKTsKKyAgdW5sb2NrTXV0ZXgoJmFwaUNvbm5lY3Rpb25zTXV0ZXgpOworCisgIHJldHVybiBoYW5kbGVkOworfQorCisvKiBGdW5jdGlvbiA6IGFwaV9yZWFkQ29tbWFuZAorICogQ2FsbCBkcml2ZXItPnJlYWRDb21tYW5kIHVubGVzcyB0aGUgZHJpdmVyIGlzIHN1c3BlbmRlZC4KKyAqLworc3RhdGljIGludCBhcGlfcmVhZENvbW1hbmQoQnJhaWxsZURpc3BsYXkgKmJybCwgS2V5VGFibGVDb21tYW5kQ29udGV4dCBjb250ZXh0KSB7CisgIHNzaXplX3Qgc2l6ZTsKKyAgYnJsYXBpX3BhY2tldF90IHBhY2tldDsKKyAgaW50IHJlczsKKyAgaW50IGNvbW1hbmQgPSBFT0Y7CisKKyAgbG9ja011dGV4KCZhcGlDb25uZWN0aW9uc011dGV4KTsKKyAgbG9ja011dGV4KCZhcGlSYXdNdXRleCk7CisgIGlmIChzdXNwZW5kQ29ubmVjdGlvbiB8fCAhZHJpdmVyQ29uc3RydWN0ZWQpIHsKKyAgICB1bmxvY2tNdXRleCgmYXBpUmF3TXV0ZXgpOworICAgIGdvdG8gb3V0OworICB9CisgIGlmIChyYXdDb25uZWN0aW9uIT1OVUxMKSB7CisgICAgbG9ja011dGV4KCZhcGlEcml2ZXJNdXRleCk7CisgICAgc2l6ZSA9IHRydWVCcmFpbGxlLT5yZWFkUGFja2V0KGJybCwgJnBhY2tldC5kYXRhLCBCUkxBUElfTUFYUEFDS0VUU0laRSk7CisgICAgdW5sb2NrTXV0ZXgoJmFwaURyaXZlck11dGV4KTsKKyAgICBpZiAoc2l6ZTwwKQorICAgICAgd3JpdGVFeGNlcHRpb24ocmF3Q29ubmVjdGlvbi0+ZmQsIEJSTEFQSV9FUlJPUl9EUklWRVJFUlJPUiwgQlJMQVBJX1BBQ0tFVF9QQUNLRVQsIE5VTEwsIDApOworICAgIGVsc2UgaWYgKHNpemUpCisgICAgICBicmxhcGlzZXJ2ZXJfd3JpdGVQYWNrZXQocmF3Q29ubmVjdGlvbi0+ZmQsQlJMQVBJX1BBQ0tFVF9QQUNLRVQsJnBhY2tldC5kYXRhLHNpemUpOworICAgIHVubG9ja011dGV4KCZhcGlSYXdNdXRleCk7CisgICAgZ290byBvdXQ7CisgIH0KKworICBsb2NrTXV0ZXgoJmFwaURyaXZlck11dGV4KTsKKyAgcmVzID0gdHJ1ZUJyYWlsbGUtPnJlYWRDb21tYW5kKGJybCxjb250ZXh0KTsKKyAgdW5sb2NrTXV0ZXgoJmFwaURyaXZlck11dGV4KTsKKyAgaWYgKGJybC0+cmVzaXplUmVxdWlyZWQpCisgICAgYnJsUmVzaXplKGJybCk7CisgIGNvbW1hbmQgPSByZXM7CisgIC8qIHNvbWUgY2xpZW50IG1heSBnZXQgcmF3IG1vZGUgb25seSBmcm9tIG5vdyAqLworICB1bmxvY2tNdXRleCgmYXBpUmF3TXV0ZXgpOworb3V0OgorICB1bmxvY2tNdXRleCgmYXBpQ29ubmVjdGlvbnNNdXRleCk7CisgIHJldHVybiBjb21tYW5kOworfQorCisvKiBGdW5jdGlvbiA6IGFwaV9mbHVzaE91dHB1dAorICogRmx1c2ggd3JpdGVzIHRvIHRoZSBicmFpbGxlIGRldmljZS4KKyAqLworaW50IGFwaV9mbHVzaE91dHB1dChCcmFpbGxlRGlzcGxheSAqYnJsKSB7CisgIENvbm5lY3Rpb24gKmM7CisgIHN0YXRpYyBDb25uZWN0aW9uICpkaXNwbGF5ZWRfbGFzdDsKKyAgaW50IG9rID0gMTsKKyAgaW50IGRyYWluID0gMDsKKyAgaW50IHVwZGF0ZSA9IDA7CisKKyAgbG9ja011dGV4KCZhcGlQYXJhbU11dGV4KTsKKyAgbG9ja011dGV4KCZhcGlDb25uZWN0aW9uc011dGV4KTsKKyAgbG9ja011dGV4KCZhcGlSYXdNdXRleCk7CisgIGlmIChzdXNwZW5kQ29ubmVjdGlvbikgeworICAgIHVubG9ja011dGV4KCZhcGlSYXdNdXRleCk7CisgICAgZ290byBvdXQ7CisgIH0KKyAgc2V0Q3VycmVudFJvb3RUdHkoKTsKKyAgYyA9IHdob0ZpbGxzVHR5KCZ0dHlzKTsKKyAgaWYgKCFvZmZsaW5lICYmIGMpIHsKKyAgICBsb2NrTXV0ZXgoJmMtPmJyYWlsbGVXaW5kb3dNdXRleCk7CisgICAgbG9ja011dGV4KCZhcGlEcml2ZXJNdXRleCk7CisgICAgaWYgKCFkcml2ZXJDb25zdHJ1Y3RlZCAmJiAhZHJpdmVyQ29uc3RydWN0aW5nKSB7CisgICAgICBpZiAoIXJlc3VtZUJyYWlsbGVEcml2ZXIoYnJsKSkgeworCXVubG9ja011dGV4KCZhcGlEcml2ZXJNdXRleCk7CisJdW5sb2NrTXV0ZXgoJmMtPmJyYWlsbGVXaW5kb3dNdXRleCk7CisgICAgICAgIHVubG9ja011dGV4KCZhcGlSYXdNdXRleCk7CisJZ290byBvdXQ7CisgICAgICB9CisgICAgfQorCisgICAgaWYgKGMtPmJyYWlsbGVXaW5kb3cuY3Vyc29yKSB7CisgICAgICB1bnNpZ25lZCBjaGFyIG5ld0N1cnNvck92ZXJsYXkgPSBnZXRDdXJzb3JPdmVybGF5KGJybCk7CisKKyAgICAgIGlmIChuZXdDdXJzb3JPdmVybGF5ICE9IGN1cnNvck92ZXJsYXkpIHsKKyAgICAgICAgY3Vyc29yT3ZlcmxheSA9IG5ld0N1cnNvck92ZXJsYXk7CisgICAgICAgIHVwZGF0ZSA9IDE7CisgICAgICB9CisgICAgfQorCisgICAgaWYgKGMgIT0gZGlzcGxheWVkX2xhc3QgfHwgYy0+YnJsYnVmc3RhdGU9PVRPRElTUExBWSB8fCB1cGRhdGUpIHsKKyAgICAgIHVuc2lnbmVkIGNoYXIgKm9sZGJ1ZiA9IGRpc3AtPmJ1ZmZlciwgYnVmW2Rpc3BsYXlTaXplXTsKKyAgICAgIGRpc3AtPmJ1ZmZlciA9IGJ1ZjsKKyAgICAgIGdldERvdHMoJmMtPmJyYWlsbGVXaW5kb3csIGJ1Zik7CisgICAgICBicmwtPmN1cnNvciA9IGMtPmJyYWlsbGVXaW5kb3cuY3Vyc29yLTE7CisgICAgICBpZiAoIXRydWVCcmFpbGxlLT53cml0ZVdpbmRvdyhicmwsIGMtPmJyYWlsbGVXaW5kb3cudGV4dCkpIG9rID0gMDsKKyAgICAgIC8qIEZJWE1FOiB0aGUgY2xpZW50IHNob3VsZCBoYXZlIGdvdHRlbiB0aGUgbm90aWZpY2F0aW9uIHdoZW4gdGhlIHdyaXRlCisgICAgICAgKiB3YXMgcmVjZWl2ZWQsIHJhdGhlciB0aGFuIG9ubHkgd2hlbiBpdCBldmVudHVhbGx5IGdldHMgZGlzcGxheWVkCisgICAgICAgKiAocG9zc2libHkgb25seSBiZWNhdXNlIG9mIGZvY3VzIGNoYW5nZSkgKi8KKyAgICAgIGlmIChvaykgaGFuZGxlUGFyYW1VcGRhdGUoYywgYywgQlJMQVBJX1BBUkFNX1JFTkRFUkVEX0NFTExTLCAwLCAwLCBkaXNwLT5idWZmZXIsIGRpc3BsYXlTaXplKTsKKyAgICAgIGRyYWluID0gMTsKKyAgICAgIGRpc3AtPmJ1ZmZlciA9IG9sZGJ1ZjsKKyAgICAgIGRpc3BsYXllZF9sYXN0ID0gYzsKKyAgICB9CisgICAgdW5sb2NrTXV0ZXgoJmFwaURyaXZlck11dGV4KTsKKyAgICB1bmxvY2tNdXRleCgmYy0+YnJhaWxsZVdpbmRvd011dGV4KTsKKyAgfSBlbHNlIHsKKyAgICAvKiBubyBSQVcsIG5vIGNvbm5lY3Rpb24gZmlsbGluZyB0dHksIGhlbmNlIHN1c3BlbmQgaWYgbmVlZGVkICovCisgICAgbG9ja011dGV4KCZhcGlEcml2ZXJNdXRleCk7CisgICAgaWYgKCFjb3JlQWN0aXZlKSB7CisgICAgICBpZiAoZHJpdmVyQ29uc3RydWN0ZWQpIHsKKwkvKiBQdXQgYmFjayBjb3JlIG91dHB1dCBiZWZvcmUgc3VzcGVuZGluZyAqLworCXVuc2lnbmVkIGNoYXIgKm9sZGJ1ZiA9IGRpc3AtPmJ1ZmZlcjsKKwlkaXNwLT5idWZmZXIgPSBjb3JlV2luZG93RG90czsKKwlicmwtPmN1cnNvciA9IGNvcmVXaW5kb3dDdXJzb3I7CisJaWYgKCF0cnVlQnJhaWxsZS0+d3JpdGVXaW5kb3coYnJsLCBjb3JlV2luZG93VGV4dCkpIG9rID0gMDsKKwlkaXNwLT5idWZmZXIgPSBvbGRidWY7CisJc3VzcGVuZEJyYWlsbGVEcml2ZXIoKTsKKyAgICAgIH0KKyAgICAgIHVubG9ja011dGV4KCZhcGlEcml2ZXJNdXRleCk7CisgICAgICB1bmxvY2tNdXRleCgmYXBpUmF3TXV0ZXgpOworICAgICAgZ290byBvdXQ7CisgICAgfQorICAgIHVubG9ja011dGV4KCZhcGlEcml2ZXJNdXRleCk7CisgIH0KKyAgaWYgKCFvaykgeworICAgIHVubG9ja011dGV4KCZhcGlSYXdNdXRleCk7CisgICAgZ290byBvdXQ7CisgIH0KKyAgaWYgKGRyYWluKQorICAgIGRyYWluQnJhaWxsZU91dHB1dChicmwsIDApOworICB1bmxvY2tNdXRleCgmYXBpUmF3TXV0ZXgpOworb3V0OgorICB1bmxvY2tNdXRleCgmYXBpQ29ubmVjdGlvbnNNdXRleCk7CisgIHVubG9ja011dGV4KCZhcGlQYXJhbU11dGV4KTsKKyAgcmV0dXJuIG9rOworfQorCitpbnQgYXBpX3Jlc3VtZURyaXZlcihCcmFpbGxlRGlzcGxheSAqYnJsKSB7CisgIC8qIGNvcmUgaXMgcmVzdW1pbmcgb3Igb3BlbmluZyB0aGUgZGV2aWNlIGZvciB0aGUgZmlyc3QgdGltZSwgbGV0J3MgdHJ5IHRvIGdvCisgICAqIHRvIG5vcm1hbCBzdGF0ZSAqLworICBsb2NrTXV0ZXgoJmFwaVJhd011dGV4KTsKKyAgbG9ja011dGV4KCZhcGlEcml2ZXJNdXRleCk7CisgIGlmICghc3VzcGVuZENvbm5lY3Rpb24gJiYgIWRyaXZlckNvbnN0cnVjdGVkKQorICAgIHJlc3VtZUJyYWlsbGVEcml2ZXIoYnJsKTsKKyAgdW5sb2NrTXV0ZXgoJmFwaURyaXZlck11dGV4KTsKKyAgdW5sb2NrTXV0ZXgoJmFwaVJhd011dGV4KTsKKyAgcmV0dXJuIChjb3JlQWN0aXZlID0gZHJpdmVyQ29uc3RydWN0ZWQpOworfQorCisvKiB0cnkgdG8gZ2V0IGFjY2VzcyB0byBkZXZpY2UuIElmIHN1c3BlbmRlZCwgcmV0dXJucyAwICovCitpbnQgYXBpX2NsYWltRHJpdmVyIChCcmFpbGxlRGlzcGxheSAqYnJsKQoreworICBpbnQgcmV0OworICBsb2NrTXV0ZXgoJmFwaVN1c3BlbmRNdXRleCk7CisgIHJldCA9IGRyaXZlckNvbnN0cnVjdGVkOworICByZXR1cm4gcmV0OworfQorCit2b2lkIGFwaV9yZWxlYXNlRHJpdmVyKEJyYWlsbGVEaXNwbGF5ICpicmwpCit7CisgIHVubG9ja011dGV4KCZhcGlTdXNwZW5kTXV0ZXgpOworfQorCit2b2lkIGFwaV9zdXNwZW5kRHJpdmVyKEJyYWlsbGVEaXNwbGF5ICpicmwpIHsKKyAgLyogY29yZSBpcyBzdXNwZW5kaW5nLCBnb2luZyB0byBjb3JlIHN1c3BlbmQgc3RhdGUgKi8KKyAgY29yZUFjdGl2ZSA9IDA7CisgIGZsdXNoQnJhaWxsZU91dHB1dChicmwpOworfQorCitzdGF0aWMgdm9pZCBicmxSZXNpemUoQnJhaWxsZURpc3BsYXkgKmJybCkKK3sKKyAgZGlzcGxheURpbWVuc2lvbnNbMF0gPSBodG9ubChicmwtPnRleHRDb2x1bW5zKTsKKyAgZGlzcGxheURpbWVuc2lvbnNbMV0gPSBodG9ubChicmwtPnRleHRSb3dzKTsKKyAgZGlzcGxheVNpemUgPSBicmwtPnRleHRDb2x1bW5zICogYnJsLT50ZXh0Um93czsKKyAgY29yZVdpbmRvd1RleHQgPSByZWFsbG9jKGNvcmVXaW5kb3dUZXh0LCBkaXNwbGF5U2l6ZSAqIHNpemVvZigqY29yZVdpbmRvd1RleHQpKTsKKyAgY29yZVdpbmRvd0RvdHMgPSByZWFsbG9jKGNvcmVXaW5kb3dEb3RzLCBkaXNwbGF5U2l6ZSAqIHNpemVvZigqY29yZVdpbmRvd0RvdHMpKTsKKyAgY29yZVdpbmRvd0N1cnNvciA9IDA7CisgIGhhbmRsZVBhcmFtVXBkYXRlKE5VTEwsIE5VTEwsIEJSTEFQSV9QQVJBTV9ESVNQTEFZX1NJWkUsIDAsIEJSTEFQSV9QQVJBTUZfR0xPQkFMLCBkaXNwbGF5RGltZW5zaW9ucywgc2l6ZW9mKGRpc3BsYXlEaW1lbnNpb25zKSk7Cit9CisKK1JFUE9SVF9MSVNURU5FUihicmxhcGlfaGFuZGxlUmVwb3J0cykKK3sKKyAgaWYgKHBhcmFtZXRlcnMtPnJlcG9ydElkZW50aWZpZXIgPT0gUkVQT1JUX0JSQUlMTEVfREVWSUNFX09OTElORSkgeworICAgIEJyYWlsbGVEaXNwbGF5ICpicmwgPSBwYXJhbWV0ZXJzLT5saXN0ZW5lckRhdGE7CisgICAgZmx1c2hCcmFpbGxlT3V0cHV0KGJybCk7CisgIH0KK30KKworc3RhdGljIFJlcG9ydExpc3RlbmVySW5zdGFuY2UgKmFwaV9yZXBvcnRMaXN0ZW5lcjsKKworLyogRnVuY3Rpb24gOiBhcGlfbGlua1NlcnZlciAqLworLyogRG9lcyBhbGwgdGhlIGxpbmsgc3R1ZmYgdG8gbGV0IGFwaSBnZXQgZXZlbnRzIGZyb20gdGhlIGRyaXZlciBhbmQgKi8KKy8qIHdyaXRlcyBmcm9tIGJybHR0eSAqLwordm9pZCBhcGlfbGlua1NlcnZlcihCcmFpbGxlRGlzcGxheSAqYnJsKQoreworICBsb2dNZXNzYWdlKExPR19DQVRFR09SWShTRVJWRVJfRVZFTlRTKSwgImFwaSBsaW5rIik7CisgIHRydWVCcmFpbGxlPWJyYWlsbGU7CisgIG1lbWNweSgmQXBpQnJhaWxsZSxicmFpbGxlLHNpemVvZihCcmFpbGxlRHJpdmVyKSk7CisgIEFwaUJyYWlsbGUud3JpdGVXaW5kb3c9YXBpX3dyaXRlV2luZG93OworICBBcGlCcmFpbGxlLnJlYWRDb21tYW5kPWFwaV9yZWFkQ29tbWFuZDsKKyAgQXBpQnJhaWxsZS5yZWFkUGFja2V0ID0gTlVMTDsKKyAgQXBpQnJhaWxsZS53cml0ZVBhY2tldCA9IE5VTEw7CisgIGJyYWlsbGU9JkFwaUJyYWlsbGU7CisgIGxvY2tNdXRleCgmYXBpRHJpdmVyTXV0ZXgpOworICBkaXNwID0gYnJsOworICBkcml2ZXJDb25zdHJ1Y3RlZD0xOworICB1bmxvY2tNdXRleCgmYXBpRHJpdmVyTXV0ZXgpOworICBicmxSZXNpemUoYnJsKTsKKyAgbG9ja011dGV4KCZhcGlDb25uZWN0aW9uc011dGV4KTsKKyAgYnJvYWRjYXN0S2V5KCZ0dHlzLCBCUkxBUElfS0VZX1RZUEVfQ01EfEJSTEFQSV9LRVlfQ01EX05PT1AsIEJSTF9DT01NQU5EUyk7CisgIHVubG9ja011dGV4KCZhcGlDb25uZWN0aW9uc011dGV4KTsKKyAgYXBpX3JlcG9ydExpc3RlbmVyID0gcmVnaXN0ZXJSZXBvcnRMaXN0ZW5lcihSRVBPUlRfQlJBSUxMRV9ERVZJQ0VfT05MSU5FLCBicmxhcGlfaGFuZGxlUmVwb3J0cywgYnJsKTsKK30KKworLyogRnVuY3Rpb24gOiBhcGlfdW5saW5rU2VydmVyICovCisvKiBEb2VzIGFsbCB0aGUgdW5saW5rIHN0dWZmIHRvIHJlbW92ZSBhcGkgZnJvbSB0aGUgcGljdHVyZSAqLwordm9pZCBhcGlfdW5saW5rU2VydmVyKEJyYWlsbGVEaXNwbGF5ICpicmwpCit7CisgIGxvZ01lc3NhZ2UoTE9HX0NBVEVHT1JZKFNFUlZFUl9FVkVOVFMpLCAiYXBpIHVubGluayIpOworICB1bnJlZ2lzdGVyUmVwb3J0TGlzdGVuZXIoYXBpX3JlcG9ydExpc3RlbmVyKTsKKyAgbG9ja011dGV4KCZhcGlDb25uZWN0aW9uc011dGV4KTsKKyAgYnJvYWRjYXN0S2V5KCZ0dHlzLCBCUkxBUElfS0VZX1RZUEVfQ01EfEJSTEFQSV9LRVlfQ01EX09GRkxJTkUsIEJSTF9DT01NQU5EUyk7CisgIHVubG9ja011dGV4KCZhcGlDb25uZWN0aW9uc011dGV4KTsKKyAgZnJlZShjb3JlV2luZG93VGV4dCk7CisgIGNvcmVXaW5kb3dUZXh0ID0gTlVMTDsKKyAgZnJlZShjb3JlV2luZG93RG90cyk7CisgIGNvcmVXaW5kb3dEb3RzID0gTlVMTDsKKyAgYnJhaWxsZT10cnVlQnJhaWxsZTsKKyAgdHJ1ZUJyYWlsbGU9Jm5vQnJhaWxsZTsKKyAgbG9ja011dGV4KCZhcGlEcml2ZXJNdXRleCk7CisgIGlmICghY29yZUFjdGl2ZSAmJiBkcml2ZXJDb25zdHJ1Y3RlZCkKKyAgICBzdXNwZW5kQnJhaWxsZURyaXZlcigpOworICBkcml2ZXJDb25zdHJ1Y3RlZD0wOworICBkaXNwID0gTlVMTDsKKyAgdW5sb2NrTXV0ZXgoJmFwaURyaXZlck11dGV4KTsKK30KKworLyogRnVuY3Rpb24gOiBhcGlfbG9nU2VydmVySWRlbnRpdHkgKi8KKy8qIElkZW50aWZpZXMgQnJsQXBpICovCit2b2lkIGFwaV9sb2dTZXJ2ZXJJZGVudGl0eShpbnQgZnVsbCkKK3sKKyAgbG9nTWVzc2FnZShMT0dfTk9USUNFLCBSRUxFQVNFKTsKKyAgaWYgKGZ1bGwpIHsKKyAgICBsb2dNZXNzYWdlKExPR19JTkZPLCBDT1BZUklHSFQpOworICB9Cit9CisKKyNpZmRlZiBFTkFCTEVfQVBJX0ZVWlpJTkcKKy8qIEZ1bmN0aW9uIDogYXBpX2Nvbm5lY3QgKi8KKy8qIENvbm5lY3QgdG8gb3VyIG93biBBUEkgc2VydmVyICovCitzdGF0aWMgaW50IGFwaV9jb25uZWN0KHZvaWQpeworICBpbnQgczsKKyAgc3RydWN0IHNvY2thZGRyX3N0b3JhZ2Ugc3M7CisgIHNpemVfdCBzc19zaXplOworCisjaWZkZWYgUEZfTE9DQUwKKyAgaWYgKHNvY2tldEluZm9bMF0uYWRkcmZhbWlseSA9PSBQRl9MT0NBTCkgeworICAgIHN0cnVjdCBzb2NrYWRkcl91biAqc3VuID0gKHN0cnVjdCBzb2NrYWRkcl91biAqKSAmc3M7CisgICAgcyA9IHNvY2tldChQRl9MT0NBTCwgU09DS19TVFJFQU0sIDApOworICAgIHNzX3NpemUgPSBzaXplb2YoKnN1bik7CisgICAgbWVtc2V0KHN1biwgMCwgc3Nfc2l6ZSk7CisgICAgc3VuLT5zdW5fZmFtaWx5ID0gQUZfTE9DQUw7CisgICAgc3ByaW50ZihzdW4tPnN1bl9wYXRoLCBCUkxBUElfU09DS0VUUEFUSCAiLyVzIiwgc29ja2V0SW5mb1swXS5wb3J0KTsKKyAgfSBlbHNlCisjZW5kaWYgLyogUEZfTE9DQUwgKi8KKyAgeworICAgIHN0cnVjdCBzb2NrYWRkcl9pbiAqc2luID0gKHN0cnVjdCBzb2NrYWRkcl9pbiAqKSAmc3M7CisgICAgcyA9IHNvY2tldChBRl9JTkVULCBTT0NLX1NUUkVBTSwgMCk7CisgICAgc3Nfc2l6ZSA9IHNpemVvZigqc2luKTsKKyAgICBtZW1zZXQoc2luLCAwLCBzc19zaXplKTsKKyAgICBzaW4tPnNpbl9mYW1pbHkgPSBBRl9JTkVUOworICAgIHNpbi0+c2luX2FkZHIuc19hZGRyID0gaHRvbmwoSU5BRERSX0xPT1BCQUNLKTsKKyAgICBzaW4tPnNpbl9wb3J0ID0gaHRvbnMoQlJMQVBJX1NPQ0tFVFBPUlROVU0rYXRvaShzb2NrZXRJbmZvWzBdLnBvcnQpKTsKKyAgfQorCisgIHdoaWxlICh0cnVlKSB7CisgICAgaW50IGMgPSBjb25uZWN0KHMsIChzdHJ1Y3Qgc29ja2FkZHIgKikgJnNzLCBzc19zaXplKTsKKyAgICBpZiAoIWMpIGJyZWFrOworICAgIGlmIChlcnJubyAhPSBFQ09OTlJFRlVTRUQpCisgICAgICBsb2dNZXNzYWdlKExPR19XQVJOSU5HLCAiQ291bGQgbm90IGNvbm5lY3QgdG8gQVBJOiAlcyIsIHN0cmVycm9yKGVycm5vKSk7CisgICAgc2xlZXAoMSk7CisgIH0KKyAgcmV0dXJuIHM7Cit9CisKKy8qIEZ1bmN0aW9uIDogYXBpX3dyaXRlRGF0YSAqLworLyogV3JpdGUgdG8gQVBJIHNvY2tldCBzb21lIGRhdGEgKi8KK3N0YXRpYyBpbnQgYXBpX3dyaXRlRGF0YShpbnQgcywgY29uc3Qgdm9pZCogZGF0YSwgc2l6ZV90IHNpemUpIHsKKyAgc2l6ZV90IHJlbWFpbmluZyA9IHNpemU7CisgIHdoaWxlIChyZW1haW5pbmcpIHsKKyAgICBzc2l6ZV90IGRvbmUgPSB3cml0ZShzLCBkYXRhLCByZW1haW5pbmcpOworICAgIGlmIChkb25lIDwgMCkgeworICAgICAgaWYgKGVycm5vICE9IEVJTlRSICYmIGVycm5vICE9IEVBR0FJTikKKwlyZXR1cm4gMDsKKyAgICAgIGRvbmUgPSAwOworICAgIH0KKyAgICByZW1haW5pbmcgLT0gZG9uZTsKKyAgICBkYXRhICs9IGRvbmU7CisgIH0KKyAgcmV0dXJuIDE7Cit9CisKKy8qIEZ1bmN0aW9uIDogYXBpX3dyaXRlRmlsZSAqLworLyogV3JpdGUgdG8gQVBJIHNvY2tldCB0aGUgY29udGVudCBvZiBhIGZpbGUgKi8KK3N0YXRpYyBpbnQgYXBpX3dyaXRlRmlsZShpbnQgcywgY29uc3QgY2hhciogZmlsZW5hbWUpIHsKKyAgc3RydWN0IHN0YXQgc3Q7CisgIGludCBmZDsKKyAgc2l6ZV90IHNpemU7CisgIGZkID0gb3BlbihmaWxlbmFtZSwgT19SRE9OTFkpOworICBpZiAoZmQgPCAwKSByZXR1cm4gMDsKKyAgaWYgKGZzdGF0KGZkLCAmc3QpIDwgMCkgeworICAgIGNsb3NlKGZkKTsKKyAgICByZXR1cm4gMDsKKyAgfQorICBzaXplID0gc3Quc3Rfc2l6ZTsKKyAgaWYgKHNpemUgPT0gMCkgcmV0dXJuIDA7CisgIHsKKyAgICB1aW50OF90IGJ1ZmZbc2l6ZV07CisgICAgc3NpemVfdCByZXQ7CisgICAgcmV0ID0gcmVhZChmZCwgYnVmZiwgc2l6ZSk7CisgICAgY2xvc2UoZmQpOworICAgIGlmIChyZXQgPCBzaXplKSByZXR1cm4gMDsKKyAgICByZXR1cm4gYXBpX3dyaXRlRGF0YShzLCBidWZmLCBzaXplKTsKKyAgfQorfQorCisvKiBGdW5jdGlvbiA6IGFwaV93cml0ZUhlYWQgKi8KKy8qIFdyaXRlIHRvIEFQSSBzb2NrZXQgdGhlIHZlcnNpb24gKyBhdXRoIGhlYWQsIHNvIHRoZSBmdXp6ZXIgZG9lcyBub3QgaGF2ZSB0byBndWVzcyB0aGVzZSAqLworc3RhdGljIGludCBhcGlfd3JpdGVIZWFkKGludCBzKSB7CisgIGNvbnN0IHVpbnQzMl90IHZlcnNpb25QYWNrZXRbXSA9IHsKKyAgICBodG9ubCg0KSwgaHRvbmwoQlJMQVBJX1BBQ0tFVF9WRVJTSU9OKSwKKyAgICBodG9ubChCUkxBUElfUFJPVE9DT0xfVkVSU0lPTikKKyAgfTsKKyAgaWYgKCFhcGlfd3JpdGVEYXRhKHMsIHZlcnNpb25QYWNrZXQsIHNpemVvZih2ZXJzaW9uUGFja2V0KSkpIHJldHVybiAwOworICByZXR1cm4gMTsKK30KKworLyogRnVuY3Rpb24gOiBhcGlfd3JpdGVXcml0ZSAqLworLyogV3JpdGUgdG8gQVBJIHNvY2tldCB0aGUgd3JpdGUgaGVhZGVyLCBzbyB0aGUgZnV6emVyIGRvZXMgbm90IGhhdmUgdG8gZ3Vlc3MgaXQgKi8KK3N0YXRpYyBpbnQgYXBpX3dyaXRlV3JpdGUoaW50IHMsIGludCB1dGY4KSB7CisgIHsKKyAgICBjb25zdCB1aW50MzJfdCBlbnRlclR0eU1vZGVQYWNrZXRbXSA9IHsgaHRvbmwoMio0KSwgaHRvbmwoQlJMQVBJX1BBQ0tFVF9FTlRFUlRUWU1PREUpLCBodG9ubCgxKSwgaHRvbmwoMSkgfTsKKyAgICBpZiAoIWFwaV93cml0ZURhdGEocywgZW50ZXJUdHlNb2RlUGFja2V0LCBzaXplb2YoZW50ZXJUdHlNb2RlUGFja2V0KSkpIHJldHVybiAwOworICB9CisgIHsKKyAgICBjb25zdCB1aW50MzJfdCB3cml0ZVBhY2tldFtdID0geworICAgICAgaHRvbmwoMyAqIDQgKyBkaXNwbGF5U2l6ZSArICh1dGY4ID8gNiA6IDExKSksIGh0b25sKEJSTEFQSV9QQUNLRVRfV1JJVEUpLAorICAgICAgaHRvbmwoQlJMQVBJX1dGX1JFR0lPTiB8IEJSTEFQSV9XRl9URVhUIHwgQlJMQVBJX1dGX0NIQVJTRVQpLAorICAgICAgaHRvbmwoMSksIGh0b25sKGRpc3BsYXlTaXplKSwKKyAgICB9OworICAgIGlmICghYXBpX3dyaXRlRGF0YShzLCB3cml0ZVBhY2tldCwgc2l6ZW9mKHdyaXRlUGFja2V0KSkpIHJldHVybiAwOworICB9CisgIHJldHVybiAxOworfQorCisvKiBGdW5jdGlvbiA6IGFwaV93cml0ZUxhdGluMUNoYXJzZXQgKi8KKy8qIFdyaXRlIHRvIEFQSSBzb2NrZXQgdGhlIHdyaXRlIGZvb3RlciBmb3IgbGF0aW4xLCBzbyB0aGUgZnV6emVyIGRvZXMgbm90IGhhdmUgdG8gZ3Vlc3MgaXQgKi8KK3N0YXRpYyBpbnQgYXBpX3dyaXRlTGF0aW4xQ2hhcnNldChpbnQgcykgeworICByZXR1cm4gYXBpX3dyaXRlRGF0YShzLCAiXHgwYWlzby04ODU5LTEiLCAxMSk7Cit9CisKKy8qIEZ1bmN0aW9uIDogYXBpX3dyaXRlVXRmOENoYXJzZXQgKi8KKy8qIFdyaXRlIHRvIEFQSSBzb2NrZXQgdGhlIHdyaXRlIGZvb3RlciBmb3IgVVRGLTgsIHNvIHRoZSBmdXp6ZXIgZG9lcyBub3QgaGF2ZSB0byBndWVzcyBpdCAqLworc3RhdGljIGludCBhcGlfd3JpdGVVdGY4Q2hhcnNldChpbnQgcykgeworICByZXR1cm4gYXBpX3dyaXRlRGF0YShzLCAiXHgwNVVURi04IiwgNik7Cit9CisKKy8qIEZ1bmN0aW9uIDogYXBpX3dyaXRlSGVhZGluZyAqLworLyogV3JpdGUgdG8gQVBJIHNvY2tldCB0aGUgaGVhZGluZyBmb3IgYSB0ZXN0ICovCitzdGF0aWMgaW50IGFwaV93cml0ZUhlYWRpbmcoaW50IHMpIHsKKyAgaWYgKCFmdXp6X2hlYWQgJiYgIWFwaV93cml0ZUhlYWQocykpIHJldHVybiAwOworICBpZiAoZnV6el93cml0ZSAmJiAhYXBpX3dyaXRlV3JpdGUocywgZnV6el93cml0ZXV0ZjgpKSByZXR1cm4gMDsKKyAgcmV0dXJuIDE7Cit9CisKKy8qIEZ1bmN0aW9uIDogYXBpX3dyaXRlVHJhaWxpbmcgKi8KKy8qIFdyaXRlIHRvIEFQSSBzb2NrZXQgdGhlIHRyYWlsaW5nIGZvciBhIHRlc3QgKi8KK3N0YXRpYyBpbnQgYXBpX3dyaXRlVHJhaWxpbmcoaW50IHMpIHsKKyAgaWYgKGZ1enpfd3JpdGUpIHsKKyAgICBpZiAoZnV6el93cml0ZXV0ZjgpIHsKKyAgICAgIGlmICghYXBpX3dyaXRlVXRmOENoYXJzZXQocykpIHJldHVybiAwOworICAgIH0gZWxzZSB7CisgICAgICBpZiAoIWFwaV93cml0ZUxhdGluMUNoYXJzZXQocykpIHJldHVybiAwOworICAgIH0KKyAgfQorICByZXR1cm4gMTsKK30KKworLyogRnVuY3Rpb24gOiBhcGlfd3JpdGVJbnB1dCAqLworLyogV3JpdGUgdG8gQVBJIHNvY2tldCBzb21lIGRhdGEgc2V0ICovCitzdGF0aWMgaW50IGFwaV93cml0ZUlucHV0KGludCBzLCBjb25zdCB1aW50OF90ICpkYXRhLCBzaXplX3Qgc2l6ZSkgeworICBpZiAoZnV6el93cml0ZSkgeworICAgIC8qIFJlamVjdCBzaXplcyB0aGF0IGRvbid0IG1hdGNoIGRpc3BsYXkgc2l6ZSAqLworICAgIGlmIChmdXp6X3dyaXRldXRmOCkgeworICAgICAgY2hhciBidWZbc2l6ZSsxXTsKKyAgICAgIG1lbWNweShidWYsIGRhdGEsIHNpemUpOworICAgICAgYnVmW3NpemVdID0gMDsKKyAgICAgIGlmIChjb3VudFV0ZjhDaGFyYWN0ZXJzKChjb25zdCBjaGFyKikgZGF0YSkgIT0gZGlzcGxheVNpemUpIHJldHVybiAtMTsKKyAgICB9IGVsc2UgeworICAgICAgaWYgKHNpemUgIT0gZGlzcGxheVNpemUpIHJldHVybiAtMTsKKyAgICB9CisgIH0KKyAgaWYgKCFhcGlfd3JpdGVIZWFkaW5nKHMpKSByZXR1cm4gMDsKKyAgaWYgKCFhcGlfd3JpdGVEYXRhKHMsIGRhdGEsIHNpemUpKSByZXR1cm4gMDsKKyAgaWYgKCFhcGlfd3JpdGVUcmFpbGluZyhzKSkgcmV0dXJuIDA7CisgIHJldHVybiAxOworfQorCisvKiBGdW5jdGlvbjogYXBpX3JlYWREYXRhICovCisvKiBSZWFkIGFsbCBkYXRhIGNvbWluZyBmcm9tIEFQSSBzb2NrZXQgKi8KK3N0YXRpYyBpbnQgYXBpX3JlYWREYXRhKGludCBzKXsKKyAgd2hpbGUgKDEpIHsKKyAgICBjaGFyIGJ1ZmZbNDA5Nl07CisgICAgc3NpemVfdCByID0gcmVhZChzLCBidWZmLCBzaXplb2YoYnVmZikpOworICAgIGlmIChyIDw9IDApIHsKKyAgICAgIGNsb3NlKHMpOworICAgICAgcmV0dXJuIHIgPT0gMDsKKyAgICB9CisgIH0KK30KKworLyogRnVuY3Rpb246IGFwaV90ZXN0T25lSW5wdXQgKi8KKy8qIFRlc3QgZmVlZGluZyBBUEkgd2l0aCBmZWVkaW5nIG9uZSBpbnB1dCBzZXQgKi8KK3N0YXRpYyBpbnQgYXBpX3Rlc3RPbmVJbnB1dChjb25zdCB1aW50OF90ICpkYXRhLCBzaXplX3Qgc2l6ZSkKK3sKKyAgaW50IHMgPSBhcGlfY29ubmVjdCgpOworICBpbnQgciA9IGFwaV93cml0ZUlucHV0KHMsIGRhdGEsIHNpemUpOworICBpZiAociA9PSAtMSkgcmV0dXJuIC0xOyAvKiBSZWplY3QgdGhpcyBkYXRhICovCisgIGlmIChyID09IDApIGdvdG8gb3V0OworICBzaHV0ZG93bihzLCBTSFVUX1dSKTsgLyogV2UgYXJlIGZpbmlzaGVkIHNwZWFraW5nICovCisgIGFwaV9yZWFkRGF0YShzKTsKK291dDoKKyAgY2xvc2Uocyk7CisgIHJldHVybiAwOworfQorCisvKiBQcm90b3R5cGUgZm9yIExMVk0gZnV6emVyIHJ1bm5lciAqLworZXh0ZXJuIGludCBMTFZNRnV6emVyUnVuRHJpdmVyKGludCAqYXJnYywgY2hhciAqKiphcmd2LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAoKlVzZXJDYikoY29uc3QgdWludDhfdCAqZGF0YSwgc2l6ZV90IHNpemUpKTsKKworLyogRnVuY3Rpb246IGZ1enplckZ1bmN0aW9uICovCisvKiBSdW5zIHRoZSBMTFZNIGZ1enplciAqLworVEhSRUFEX0ZVTkNUSU9OKGZ1enplckZ1bmN0aW9uKQoreworICBjaGFyIHJ1bnNbMThdOworICBjaGFyIHNlZWRbMThdOworICBjaGFyICphcmd2W10gPSB7ICJicmx0dHkiLCAiLW1heF9sZW49MTAwMCIsICItZGljdD1Ub29scy9icmxhcGkuZC9mdXp6LWRpY3QiLCAiLWRldGVjdF9sZWFrcz0wIiwgIi1yc3NfbGltaXRfbWI9MTAwMCIsIHJ1bnMsIHNlZWQsIE5VTEwgfTsKKyAgaW50IGEgPSBzaXplb2YoYXJndikgLyBzaXplb2YoYXJndlswXSkgLSAxOworICBjaGFyICoqYV8yID0gYXJndjsKKyAgc25wcmludGYocnVucywgc2l6ZW9mKHJ1bnMpLCAiLXJ1bnM9JWQiLCBmdXp6X3J1bnMpOworICBzbnByaW50ZihzZWVkLCBzaXplb2Yoc2VlZCksICItc2VlZD0lZCIsIGZ1enpfc2VlZCk7CisgIHNsZWVwKDEpOworICBMTFZNRnV6emVyUnVuRHJpdmVyKCZhLCAmYV8yLCAmYXBpX3Rlc3RPbmVJbnB1dCk7CisgIF9leGl0KEVYSVRfU1VDQ0VTUyk7CisgIHJldHVybiAwOworfQorCisvKiBGdW5jdGlvbjogY3Jhc2hlckZ1bmN0aW9uICovCisvKiBSdW5zIG9uZSBjcmFzaGVyIHJlcHJvZHVjZXIgKi8KK1RIUkVBRF9GVU5DVElPTihjcmFzaGVyRnVuY3Rpb24pCit7CisgIGludCBzLCByID0gMDsKKyAgc2xlZXAoMSk7CisgIHMgPSBhcGlfY29ubmVjdCgpOworICBpZiAoIWFwaV93cml0ZUhlYWRpbmcocykpIGdvdG8gb3V0OworICBpZiAoIWFwaV93cml0ZUZpbGUocywgYXJndW1lbnQpKSBnb3RvIG91dDsKKyAgaWYgKCFhcGlfd3JpdGVUcmFpbGluZyhzKSkgZ290byBvdXQ7CisgIHNodXRkb3duKHMsIFNIVVRfV1IpOworICBhcGlfcmVhZERhdGEocyk7CisgIHIgPSAxOworb3V0OgorICBjbG9zZShzKTsKKyAgaWYgKHIpCisgICAgbG9nTWVzc2FnZShMT0dfQUxFUlQsICJjcmFzaCB0ZXN0IHBhc3NlZCIpOworICBfZXhpdChFWElUX1NVQ0NFU1MpOworICByZXR1cm4gTlVMTDsKK30KKyNlbmRpZiAvKiBFTkFCTEVfQVBJX0ZVWlpJTkcgKi8KKworLyogRnVuY3Rpb24gOiBhcGlfc3RhcnRTZXJ2ZXIgKi8KKy8qIEluaXRpYWxpemVzIEJybEFwaSAqLworLyogT25lIGZpcnN0IGluaXRpYWxpemUgdGhlIGRyaXZlciAqLworLyogVGhlbiBvbmUgY3JlYXRlcyB0aGUgY29tbXVuaWNhdGlvbiBzb2NrZXQgKi8KK2ludCBhcGlfc3RhcnRTZXJ2ZXIoQnJhaWxsZURpc3BsYXkgKmJybCwgY2hhciAqKnBhcmFtZXRlcnMpCit7CisgIGludCByZXMsaTsKKworICBjaGFyICpob3N0cyA9CisjaWYgZGVmaW5lZChQRl9MT0NBTCkKKwkiOjArMTI3LjAuMC4xOjArOjoxOjAiCisjZWxzZSAvKiBQRl9MT0NBTCAqLworCSIxMjcuMC4wLjE6MCs6OjE6MCIKKyNlbmRpZiAvKiBQRl9MT0NBTCAqLworCTsKKworICB7CisgICAgY2hhciAqb3BlcmFuZCA9IHBhcmFtZXRlcnNbUEFSTV9IT1NUXTsKKworICAgIGlmICgqb3BlcmFuZCkgaG9zdHMgPSBvcGVyYW5kOworICB9CisKKyAgYXV0aCA9IEJSTEFQSV9ERUZBVVRIOworICB7CisgICAgY29uc3QgY2hhciAqb3BlcmFuZCA9IHBhcmFtZXRlcnNbUEFSTV9BVVRIXTsKKworICAgIGlmICgqb3BlcmFuZCkgYXV0aCA9IG9wZXJhbmQ7CisgIH0KKworICBwdGhyZWFkX211dGV4YXR0cl90IG1hdHRyOworCisgIGNvcmVBY3RpdmU9MTsKKworICBpZiAoKG5vdHR5LmNvbm5lY3Rpb25zID0gY3JlYXRlQ29ubmVjdGlvbihJTlZBTElEX0ZJTEVfREVTQ1JJUFRPUiwwKSkgPT0gTlVMTCkgeworICAgIGxvZ01lc3NhZ2UoTE9HX1dBUk5JTkcsICJVbmFibGUgdG8gY3JlYXRlIGNvbm5lY3Rpb25zIGxpc3QiKTsKKyAgICBnb3RvIG5vTm90dHlDb25uZWN0aW9uczsKKyAgfQorICBub3R0eS5jb25uZWN0aW9ucy0+cHJldiA9IG5vdHR5LmNvbm5lY3Rpb25zLT5uZXh0ID0gbm90dHkuY29ubmVjdGlvbnM7CisgIGlmICgodHR5cy5jb25uZWN0aW9ucyA9IGNyZWF0ZUNvbm5lY3Rpb24oSU5WQUxJRF9GSUxFX0RFU0NSSVBUT1IsIDApKSA9PSBOVUxMKSB7CisgICAgbG9nTWVzc2FnZShMT0dfV0FSTklORywgIlVuYWJsZSB0byBjcmVhdGUgdHR5cycgY29ubmVjdGlvbnMgbGlzdCIpOworICAgIGdvdG8gbm9UdHlzQ29ubmVjdGlvbnM7CisgIH0KKyAgdHR5cy5jb25uZWN0aW9ucy0+cHJldiA9IHR0eXMuY29ubmVjdGlvbnMtPm5leHQgPSB0dHlzLmNvbm5lY3Rpb25zOworICB0dHlzLmZvY3VzID0gU0NSX05PX1ZUOworCisgIHB0aHJlYWRfbXV0ZXhhdHRyX2luaXQoJm1hdHRyKTsKKyAgcHRocmVhZF9tdXRleGF0dHJfc2V0dHlwZSgmbWF0dHIsIFBUSFJFQURfTVVURVhfUkVDVVJTSVZFKTsKKworICBwdGhyZWFkX211dGV4X2luaXQoJmFwaUNvbm5lY3Rpb25zTXV0ZXgsJm1hdHRyKTsKKyAgcHRocmVhZF9tdXRleF9pbml0KCZhcGlEcml2ZXJNdXRleCwmbWF0dHIpOworICBwdGhyZWFkX211dGV4X2luaXQoJmFwaVJhd011dGV4LCZtYXR0cik7CisgIHB0aHJlYWRfbXV0ZXhfaW5pdCgmYXBpU3VzcGVuZE11dGV4LCZtYXR0cik7CisgIHB0aHJlYWRfbXV0ZXhfaW5pdCgmYXBpUGFyYW1NdXRleCwmbWF0dHIpOworCisjaWZuZGVmIF9fTUlOR1czMl9fCisgIGluaXRpYWxpemVCbG9ja2VkU2lnbmFsc01hc2soKTsKKyAgYXN5bmNIYW5kbGVTaWduYWwoU0lHVVNSMiwgYXN5bmNFbXB0eVNpZ25hbEhhbmRsZXIsIE5VTEwpOworI2VuZGlmIC8qIF9fTUlOR1czMl9fICovCisKKyAgcnVubmluZyA9IDE7CisgIHRydWVCcmFpbGxlPSZub0JyYWlsbGU7CisKKyAgaWYgKChyZXMgPSBjcmVhdGVUaHJlYWQoInNlcnZlci1tYWluIiwgJnNlcnZlclRocmVhZCwgTlVMTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgcnVuU2VydmVyLCBob3N0cykpICE9IDApIHsKKyAgICBsb2dNZXNzYWdlKExPR19XQVJOSU5HLCJwdGhyZWFkX2NyZWF0ZTogJXMiLHN0cmVycm9yKHJlcykpOworICAgIHJ1bm5pbmcgPSAwOworCisgICAgZm9yIChpPTA7aTxzZXJ2ZXJTb2NrZXRDb3VudDtpKyspIHsKKyNpZmRlZiBfX01JTkdXMzJfXworICAgICAgcHRocmVhZF9jYW5jZWwoc29ja2V0VGhyZWFkc1tpXSk7CisjZWxzZSAvKiBfX01JTkdXMzJfXyAqLworICAgICAgcHRocmVhZF9raWxsKHNvY2tldFRocmVhZHNbaV0sIFNJR1VTUjIpOworI2VuZGlmIC8qIF9fTUlOR1czMl9fICovCisgICAgICBwdGhyZWFkX2pvaW4oc29ja2V0VGhyZWFkc1tpXSwgTlVMTCk7CisgICAgfQorCisgICAgZ290byBub1NlcnZlclRocmVhZDsKKyAgfQorCisjaWZkZWYgRU5BQkxFX0FQSV9GVVpaSU5HCisgIHZhbGlkYXRlT25PZmYoJmZ1enpfaGVhZCwgcGFyYW1ldGVyc1tQQVJNX0ZVWlpIRUFEXSk7CisgIHZhbGlkYXRlT25PZmYoJmZ1enpfd3JpdGUsIHBhcmFtZXRlcnNbUEFSTV9GVVpaV1JJVEVdKTsKKyAgdmFsaWRhdGVPbk9mZigmZnV6el93cml0ZXV0ZjgsIHBhcmFtZXRlcnNbUEFSTV9GVVpaV1JJVEVVVEY4XSk7CisKKyAgY29uc3QgY2hhciAqZnV6eiA9IHBhcmFtZXRlcnNbUEFSTV9GVVpaXTsKKyAgaWYgKGZ1enopIHsKKyAgICB2YWxpZGF0ZUludGVnZXIoJmZ1enpfcnVucywgZnV6eiwgTlVMTCwgTlVMTCk7CisgICAgaWYgKGZ1enpfcnVucykgeworICAgICAgaWYgKHBhcmFtZXRlcnNbUEFSTV9GVVpaU0VFRF0pCisgICAgICAgIHZhbGlkYXRlSW50ZWdlcigmZnV6el9zZWVkLCBwYXJhbWV0ZXJzW1BBUk1fRlVaWlNFRURdLCBOVUxMLCBOVUxMKTsKKyAgICAgIGNyZWF0ZVRocmVhZCgiZnV6emVyIiwgJmZ1enplclRocmVhZCwgTlVMTCwgZnV6emVyRnVuY3Rpb24sIE5VTEwpOworICAgIH0KKyAgfQorCisgIGNvbnN0IGNoYXIgKmNyYXNoID0gcGFyYW1ldGVyc1tQQVJNX0NSQVNIXTsKKyAgaWYgKGNyYXNoICYmIGNyYXNoWzBdKQorICAgIGNyZWF0ZVRocmVhZCgiY3Jhc2hlciIsICZjcmFzaGVyVGhyZWFkLCBOVUxMLCBjcmFzaGVyRnVuY3Rpb24sICh2b2lkKikgY3Jhc2gpOworI2VuZGlmIC8qIEVOQUJMRV9BUElfRlVaWklORyAqLworCisgIHJldHVybiAxOworCitub1NlcnZlclRocmVhZDoKKyAgZnJlZUNvbm5lY3Rpb24odHR5cy5jb25uZWN0aW9ucyk7Citub1R0eXNDb25uZWN0aW9uczoKKyAgZnJlZUNvbm5lY3Rpb24obm90dHkuY29ubmVjdGlvbnMpOworbm9Ob3R0eUNvbm5lY3Rpb25zOgorICBhdXRoRW5kKGF1dGhEZXNjcmlwdG9yKTsKKyAgYXV0aERlc2NyaXB0b3IgPSBOVUxMOworICByZXR1cm4gMDsKK30KKworLyogRnVuY3Rpb24gOiBhcGlfc3RvcFNlcnZlciAqLworLyogRW5kIG9mIEJybEFwaSBzZXNzaW9uLiBDbG9zZXMgdGhlIGxpc3RlbmluZyBzb2NrZXQgKi8KKy8qIGRlc3Ryb3lzIG9wZW5lZCBjb25uZWN0aW9ucyBhbmQgYXNzb2NpYXRlZCByZXNvdXJjZXMgKi8KKy8qIENsb3NlcyB0aGUgZHJpdmVyICovCit2b2lkIGFwaV9zdG9wU2VydmVyKEJyYWlsbGVEaXNwbGF5ICpicmwpCit7CisgIHRlcm1pbmF0aW9uSGFuZGxlcigpOworfQpkaWZmIC0tZ2l0IGEvUHJvZ3JhbXMvYnJsZGVmcy5oIGIvUHJvZ3JhbXMvYnJsZGVmcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM1YjVkNjkKLS0tIC9kZXYvbnVsbAorKysgYi9Qcm9ncmFtcy9icmxkZWZzLmgKQEAgLTAsMCArMSwyNSBAQAorLyoKKyAqIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisgKiAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisgKgorICogQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKKyNpZm5kZWYgQlJMQVBJX0lOQ0xVREVEX0JSTFRUWV9CUkxERUZTCisjZGVmaW5lIEJSTEFQSV9JTkNMVURFRF9CUkxUVFlfQlJMREVGUworCisjd2FybmluZyBpbmNsdWRlIDxicmxhcGlfYnJsZGVmcy5oPiBpbnN0ZWFkIG9mIDxicmx0dHkvYnJsZGVmcy5oPiAoc2VlIG1hbiBicmxhcGlfZGVwcmVjYXRlZCkKKyNpbmNsdWRlIDxicmxhcGlfYnJsZGVmcy5oPgorCisjZW5kaWYgLyogQlJMQVBJX0lOQ0xVREVEX0JSTFRUWV9CUkxERUZTICovCmRpZmYgLS1naXQgYS9Qcm9ncmFtcy9icmx0ZXN0LmMgYi9Qcm9ncmFtcy9icmx0ZXN0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2EwZjIwMgotLS0gL2Rldi9udWxsCisrKyBiL1Byb2dyYW1zL2JybHRlc3QuYwpAQCAtMCwwICsxLDMxMSBAQAorLyoKKyAqIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisgKiAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisgKgorICogQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKKyNpbmNsdWRlICJwcm9sb2d1ZS5oIgorCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxzdHJpbmdzLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKworI2luY2x1ZGUgInByb2dyYW0uaCIKKyNpbmNsdWRlICJjbWRsaW5lLmgiCisjaW5jbHVkZSAicGFyYW1ldGVycy5oIgorI2luY2x1ZGUgImxvZy5oIgorI2luY2x1ZGUgInBhcnNlLmgiCisjaW5jbHVkZSAiZmlsZS5oIgorI2luY2x1ZGUgImNtZF9xdWV1ZS5oIgorI2luY2x1ZGUgImJybC5oIgorI2luY2x1ZGUgImJybF9pbnB1dC5oIgorI2luY2x1ZGUgImJybF91dGlscy5oIgorI2luY2x1ZGUgInR0Yi5oIgorI2luY2x1ZGUgImt0Yi5oIgorI2luY2x1ZGUgIm1lc3NhZ2UuaCIKKyNpbmNsdWRlICJ1dGY4LmgiCisjaW5jbHVkZSAiYXN5bmNfd2FpdC5oIgorI2luY2x1ZGUgImxlYXJuLmgiCisKK0JyYWlsbGVEaXNwbGF5IGJybDsKKworc3RhdGljIGNoYXIgKm9wdF9icmFpbGxlRGV2aWNlOworY2hhciAqb3B0X2RyaXZlcnNEaXJlY3Rvcnk7CitzdGF0aWMgY2hhciAqb3B0X3RhYmxlc0RpcmVjdG9yeTsKK3N0YXRpYyBjaGFyICpvcHRfd3JpdGFibGVEaXJlY3Rvcnk7CisKK0JFR0lOX09QVElPTl9UQUJMRShwcm9ncmFtT3B0aW9ucykKKyAgeyAud29yZCA9ICJkZXZpY2UiLAorICAgIC5sZXR0ZXIgPSAnZCcsCisgICAgLmFyZ3VtZW50ID0gImRldmljZSIsCisgICAgLnNldHRpbmcuc3RyaW5nID0gJm9wdF9icmFpbGxlRGV2aWNlLAorICAgIC5pbnRlcm5hbC5zZXR0aW5nID0gQlJBSUxMRV9ERVZJQ0UsCisgICAgLmRlc2NyaXB0aW9uID0gIlBhdGggdG8gZGV2aWNlIGZvciBhY2Nlc3NpbmcgYnJhaWxsZSBkaXNwbGF5LiIKKyAgfSwKKworICB7IC53b3JkID0gInRhYmxlcy1kaXJlY3RvcnkiLAorICAgIC5sZXR0ZXIgPSAnVCcsCisgICAgLmFyZ3VtZW50ID0gc3RydGV4dCgiZGlyZWN0b3J5IiksCisgICAgLnNldHRpbmcuc3RyaW5nID0gJm9wdF90YWJsZXNEaXJlY3RvcnksCisgICAgLmludGVybmFsLnNldHRpbmcgPSBUQUJMRVNfRElSRUNUT1JZLAorICAgIC5pbnRlcm5hbC5hZGp1c3QgPSBmaXhJbnN0YWxsUGF0aCwKKyAgICAuZGVzY3JpcHRpb24gPSBzdHJ0ZXh0KCJQYXRoIHRvIGRpcmVjdG9yeSBjb250YWluaW5nIHRhYmxlcy4iKQorICB9LAorCisgIHsgLndvcmQgPSAiZHJpdmVycy1kaXJlY3RvcnkiLAorICAgIC5sZXR0ZXIgPSAnRCcsCisgICAgLmFyZ3VtZW50ID0gImRpcmVjdG9yeSIsCisgICAgLnNldHRpbmcuc3RyaW5nID0gJm9wdF9kcml2ZXJzRGlyZWN0b3J5LAorICAgIC5pbnRlcm5hbC5zZXR0aW5nID0gRFJJVkVSU19ESVJFQ1RPUlksCisgICAgLmludGVybmFsLmFkanVzdCA9IGZpeEluc3RhbGxQYXRoLAorICAgIC5kZXNjcmlwdGlvbiA9ICJQYXRoIHRvIGRpcmVjdG9yeSBmb3IgbG9hZGluZyBkcml2ZXJzLiIKKyAgfSwKKworICB7IC53b3JkID0gIndyaXRhYmxlLWRpcmVjdG9yeSIsCisgICAgLmxldHRlciA9ICdXJywKKyAgICAuYXJndW1lbnQgPSBzdHJ0ZXh0KCJkaXJlY3RvcnkiKSwKKyAgICAuc2V0dGluZy5zdHJpbmcgPSAmb3B0X3dyaXRhYmxlRGlyZWN0b3J5LAorICAgIC5pbnRlcm5hbC5zZXR0aW5nID0gV1JJVEFCTEVfRElSRUNUT1JZLAorICAgIC5pbnRlcm5hbC5hZGp1c3QgPSBmaXhJbnN0YWxsUGF0aCwKKyAgICAuZGVzY3JpcHRpb24gPSBzdHJ0ZXh0KCJQYXRoIHRvIGRpcmVjdG9yeSB3aGljaCBjYW4gYmUgd3JpdHRlbiB0by4iKQorICB9LAorRU5EX09QVElPTl9UQUJMRShwcm9ncmFtT3B0aW9ucykKKworaW50CittYWluIChpbnQgYXJnYywgY2hhciAqYXJndltdKSB7CisgIFByb2dyYW1FeGl0U3RhdHVzIGV4aXRTdGF0dXM7CisKKyAgY29uc3QgY2hhciAqZHJpdmVyID0gTlVMTDsKKyAgdm9pZCAqb2JqZWN0OworCisgIHsKKyAgICBjb25zdCBDb21tYW5kTGluZURlc2NyaXB0b3IgZGVzY3JpcHRvciA9IHsKKyAgICAgIC5vcHRpb25zID0gJnByb2dyYW1PcHRpb25zLAorICAgICAgLmFwcGxpY2F0aW9uTmFtZSA9ICJicmx0ZXN0IiwKKworICAgICAgLnVzYWdlID0geworICAgICAgICAucHVycG9zZSA9IHN0cnRleHQoIlRlc3QgYSBicmFpbGxlIGRyaXZlci4iKSwKKyAgICAgICAgLnBhcmFtZXRlcnMgPSAiW2RyaXZlciBbcGFyYW1ldGVyPXZhbHVlIC4uLl1dIiwKKyAgICAgIH0KKyAgICB9OworCisgICAgUFJPQ0VTU19PUFRJT05TKGRlc2NyaXB0b3IsIGFyZ2MsIGFyZ3YpOworICB9CisKKyAgc2V0V3JpdGFibGVEaXJlY3Rvcnkob3B0X3dyaXRhYmxlRGlyZWN0b3J5KTsKKworICBpZiAoYXJnYykgeworICAgIGRyaXZlciA9ICphcmd2KyssIC0tYXJnYzsKKyAgfQorCisgIGlmICghKm9wdF9icmFpbGxlRGV2aWNlKSB7CisgICAgY2hhbmdlU3RyaW5nU2V0dGluZygmb3B0X2JyYWlsbGVEZXZpY2UsIEJSQUlMTEVfREVWSUNFKTsKKyAgfQorCisgIGlmICgoYnJhaWxsZSA9IGxvYWRCcmFpbGxlRHJpdmVyKGRyaXZlciwgJm9iamVjdCwgb3B0X2RyaXZlcnNEaXJlY3RvcnkpKSkgeworICAgIGNvbnN0IGNoYXIgKmNvbnN0ICpwYXJhbWV0ZXJOYW1lcyA9IGJyYWlsbGUtPnBhcmFtZXRlcnM7CisgICAgY2hhciAqKnBhcmFtZXRlclNldHRpbmdzOworCisgICAgaWYgKCFwYXJhbWV0ZXJOYW1lcykgeworICAgICAgc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IG5vTmFtZXNbXSA9IHtOVUxMfTsKKworICAgICAgcGFyYW1ldGVyTmFtZXMgPSBub05hbWVzOworICAgIH0KKworICAgIHsKKyAgICAgIGNvbnN0IGNoYXIgKmNvbnN0ICpuYW1lID0gcGFyYW1ldGVyTmFtZXM7CisgICAgICB1bnNpZ25lZCBpbnQgY291bnQ7CisgICAgICBjaGFyICoqc2V0dGluZzsKKworICAgICAgd2hpbGUgKCpuYW1lKSBuYW1lICs9IDE7CisgICAgICBjb3VudCA9IG5hbWUgLSBwYXJhbWV0ZXJOYW1lczsKKworICAgICAgaWYgKCEocGFyYW1ldGVyU2V0dGluZ3MgPSBtYWxsb2MoKGNvdW50ICsgMSkgKiBzaXplb2YoKnBhcmFtZXRlclNldHRpbmdzKSkpKSB7CisgICAgICAgIGxvZ01hbGxvY0Vycm9yKCk7CisgICAgICAgIHJldHVybiBQUk9HX0VYSVRfRkFUQUw7CisgICAgICB9CisKKyAgICAgIHNldHRpbmcgPSBwYXJhbWV0ZXJTZXR0aW5nczsKKyAgICAgIHdoaWxlIChjb3VudC0tKSAqc2V0dGluZysrID0gIiI7CisgICAgICAqc2V0dGluZyA9IE5VTEw7CisgICAgfQorCisgICAgd2hpbGUgKGFyZ2MpIHsKKyAgICAgIGNoYXIgKmFzc2lnbm1lbnQgPSAqYXJndisrOworICAgICAgaW50IG9rID0gMDsKKyAgICAgIGNoYXIgKmRlbGltaXRlciA9IHN0cmNocihhc3NpZ25tZW50LCAnPScpOworCisgICAgICBpZiAoIWRlbGltaXRlcikgeworICAgICAgICBsb2dNZXNzYWdlKExPR19FUlIsICJtaXNzaW5nIGJyYWlsbGUgZHJpdmVyIHBhcmFtZXRlciB2YWx1ZTogJXMiLCBhc3NpZ25tZW50KTsKKyAgICAgIH0gZWxzZSBpZiAoZGVsaW1pdGVyID09IGFzc2lnbm1lbnQpIHsKKyAgICAgICAgbG9nTWVzc2FnZShMT0dfRVJSLCAibWlzc2luZyBicmFpbGxlIGRyaXZlciBwYXJhbWV0ZXIgbmFtZTogJXMiLCBhc3NpZ25tZW50KTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIHNpemVfdCBuYW1lTGVuZ3RoID0gZGVsaW1pdGVyIC0gYXNzaWdubWVudDsKKyAgICAgICAgY29uc3QgY2hhciAqY29uc3QgKm5hbWUgPSBwYXJhbWV0ZXJOYW1lczsKKworICAgICAgICB3aGlsZSAoKm5hbWUpIHsKKyAgICAgICAgICBpZiAoc3RybmNhc2VjbXAoYXNzaWdubWVudCwgKm5hbWUsIG5hbWVMZW5ndGgpID09IDApIHsKKyAgICAgICAgICAgIHBhcmFtZXRlclNldHRpbmdzW25hbWUgLSBwYXJhbWV0ZXJOYW1lc10gPSBkZWxpbWl0ZXIgKyAxOworICAgICAgICAgICAgb2sgPSAxOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgfQorCisgICAgICAgICAgbmFtZSArPSAxOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCFvaykgbG9nTWVzc2FnZShMT0dfRVJSLCAiaW52YWxpZCBicmFpbGxlIGRyaXZlciBwYXJhbWV0ZXI6ICVzIiwgYXNzaWdubWVudCk7CisgICAgICB9CisKKyAgICAgIGlmICghb2spIHJldHVybiBQUk9HX0VYSVRfU1lOVEFYOworICAgICAgYXJnYyAtPSAxOworICAgIH0KKworICAgIGNvbnN0cnVjdEJyYWlsbGVEaXNwbGF5KCZicmwpOworICAgIGlkZW50aWZ5QnJhaWxsZURyaXZlcihicmFpbGxlLCAwKTsJCS8qIHN0YXJ0LXVwIG1lc3NhZ2VzICovCisKKyAgICBpZiAoYnJhaWxsZS0+Y29uc3RydWN0KCZicmwsIHBhcmFtZXRlclNldHRpbmdzLCBvcHRfYnJhaWxsZURldmljZSkpIHsKKyAgICAgIGlmIChlbnN1cmVCcmFpbGxlQnVmZmVyKCZicmwsIExPR19JTkZPKSkgeworICAgICAgICBpZiAoYnJsLmtleU5hbWVzKSB7CisgICAgICAgICAgY2hhciAqcGF0aCA9IG1ha2VJbnB1dFRhYmxlUGF0aChvcHRfdGFibGVzRGlyZWN0b3J5LCBicmFpbGxlLT5kZWZpbml0aW9uLmNvZGUsIGJybC5rZXlCaW5kaW5ncyk7CisKKyAgICAgICAgICBpZiAocGF0aCkgeworICAgICAgICAgICAgYnJsLmtleVRhYmxlID0gY29tcGlsZUtleVRhYmxlKHBhdGgsIGJybC5rZXlOYW1lcyk7CisKKyAgICAgICAgICAgIGZyZWUocGF0aCk7CisgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgYmVnaW5Db21tYW5kUXVldWUoKTsKKyAgICAgICAgc3RhcnRCcmFpbGxlSW5wdXQoKTsKKyAgICAgICAgbGVhcm5Nb2RlKDEwMDAwKTsKKyAgICAgICAgc3RvcEJyYWlsbGVJbnB1dCgpOworCisgICAgICAgIGlmIChicmwua2V5VGFibGUpIHsKKyAgICAgICAgICBLZXlUYWJsZSAqdGFibGUgPSBicmwua2V5VGFibGU7CisKKyAgICAgICAgICBicmwua2V5VGFibGUgPSBOVUxMOworICAgICAgICAgIGRlc3Ryb3lLZXlUYWJsZSh0YWJsZSk7CisgICAgICAgIH0KKworICAgICAgICBicmFpbGxlLT5kZXN0cnVjdCgmYnJsKTsJCS8qIGZpbmlzaCB3aXRoIHRoZSBkaXNwbGF5ICovCisgICAgICAgIGV4aXRTdGF0dXMgPSBQUk9HX0VYSVRfU1VDQ0VTUzsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIGxvZ01lc3NhZ2UoTE9HX0VSUiwgImNhbid0IGFsbG9jYXRlIGJyYWlsbGUgYnVmZmVyIik7CisgICAgICAgIGV4aXRTdGF0dXMgPSBQUk9HX0VYSVRfRkFUQUw7CisgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgIGxvZ01lc3NhZ2UoTE9HX0VSUiwgImNhbid0IGluaXRpYWxpemUgYnJhaWxsZSBkcml2ZXIiKTsKKyAgICAgIGV4aXRTdGF0dXMgPSBQUk9HX0VYSVRfRkFUQUw7CisgICAgfQorICB9IGVsc2UgeworICAgIGxvZ01lc3NhZ2UoTE9HX0VSUiwgImNhbid0IGxvYWQgYnJhaWxsZSBkcml2ZXIiKTsKKyAgICBleGl0U3RhdHVzID0gUFJPR19FWElUX0ZBVEFMOworICB9CisKKyAgcmV0dXJuIGV4aXRTdGF0dXM7Cit9CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgdW5zaWduZWQgZW5kV2FpdDoxOworfSBNZXNzYWdlRGF0YTsKKworc3RhdGljIGludAoraGFuZGxlTWVzc2FnZUNvbW1hbmRzIChpbnQgY29tbWFuZCwgdm9pZCAqZGF0YSkgeworICBNZXNzYWdlRGF0YSAqbWdkID0gZGF0YTsKKworICBtZ2QtPmVuZFdhaXQgPSAxOworICByZXR1cm4gMTsKK30KKworQVNZTkNfQ09ORElUSU9OX1RFU1RFUih0ZXN0RW5kTWVzc2FnZVdhaXQpIHsKKyAgY29uc3QgTWVzc2FnZURhdGEgKm1nZCA9IGRhdGE7CisKKyAgcmV0dXJuIG1nZC0+ZW5kV2FpdDsKK30KKworaW50CittZXNzYWdlIChjb25zdCBjaGFyICptb2RlLCBjb25zdCBjaGFyICp0ZXh0LCBNZXNzYWdlT3B0aW9ucyBvcHRpb25zKSB7CisgIE1lc3NhZ2VEYXRhIG1nZDsKKworICBzaXplX3Qgc2l6ZSA9IGJybC50ZXh0Q29sdW1ucyAqIGJybC50ZXh0Um93czsKKyAgd2NoYXJfdCBidWZmZXJbc2l6ZV07CisKKyAgc2l6ZV90IGxlbmd0aCA9IGNvdW50VXRmOENoYXJhY3RlcnModGV4dCk7CisgIHdjaGFyX3QgY2hhcmFjdGVyc1tsZW5ndGggKyAxXTsKKyAgY29uc3Qgd2NoYXJfdCAqY2hhcmFjdGVyID0gY2hhcmFjdGVyczsKKworICBjbGVhclN0YXR1c0NlbGxzKCZicmwpOworICBtYWtlV2NoYXJzRnJvbVV0ZjgodGV4dCwgY2hhcmFjdGVycywgQVJSQVlfQ09VTlQoY2hhcmFjdGVycykpOworCisgIHB1c2hDb21tYW5kRW52aXJvbm1lbnQoIm1lc3NhZ2UiLCBOVUxMLCBOVUxMKTsKKyAgcHVzaENvbW1hbmRIYW5kbGVyKCJtZXNzYWdlIiwgS1RCX0NUWF9XQUlUSU5HLAorICAgICAgICAgICAgICAgICAgICAgaGFuZGxlTWVzc2FnZUNvbW1hbmRzLCBOVUxMLCAmbWdkKTsKKworICB3aGlsZSAobGVuZ3RoKSB7CisgICAgc2l6ZV90IGNvdW50ID0gKGxlbmd0aCA8PSBzaXplKT8gbGVuZ3RoOiAoc2l6ZSAtIDEpOworCisgICAgd21lbWNweShidWZmZXIsIGNoYXJhY3RlciwgY291bnQpOworICAgIGNoYXJhY3RlciArPSBjb3VudDsKKyAgICBsZW5ndGggLT0gY291bnQ7CisKKyAgICBpZiAobGVuZ3RoKSB7CisgICAgICBidWZmZXJbKGNvdW50ID0gc2l6ZSkgLSAxXSA9IFdDX0MoJy0nKTsKKyAgICB9CisgICAgd21lbXNldCgmYnVmZmVyW2NvdW50XSwgV0NfQygnICcpLCAoc2l6ZSAtIGNvdW50KSk7CisKKyAgICB7CisgICAgICB1bnNpZ25lZCBpbnQgaTsKKworICAgICAgZm9yIChpPTA7IGk8c2l6ZTsgaSs9MSkgeworICAgICAgICBicmwuYnVmZmVyW2ldID0gY29udmVydENoYXJhY3RlclRvRG90cyh0ZXh0VGFibGUsIGJ1ZmZlcltpXSk7CisgICAgICB9CisgICAgfQorCisgICAgaWYgKCFicmFpbGxlLT53cml0ZVdpbmRvdygmYnJsLCBidWZmZXIpKSByZXR1cm4gMDsKKworICAgIGlmIChsZW5ndGgpIHsKKyAgICAgIGludCBkZWxheSA9IE1FU1NBR0VfSE9MRF9USU1FT1VUIC0gYnJsLndyaXRlRGVsYXk7CisKKyAgICAgIG1nZC5lbmRXYWl0ID0gMDsKKyAgICAgIGRyYWluQnJhaWxsZU91dHB1dCgmYnJsLCAwKTsKKyAgICAgIGFzeW5jQXdhaXRDb25kaXRpb24oZGVsYXksIHRlc3RFbmRNZXNzYWdlV2FpdCwgJm1nZCk7CisgICAgfQorICB9CisKKyAgcG9wQ29tbWFuZEVudmlyb25tZW50KCk7CisgIHJldHVybiAxOworfQorCisjaW5jbHVkZSAic2NyLmgiCisKK0tleVRhYmxlQ29tbWFuZENvbnRleHQKK2dldFNjcmVlbkNvbW1hbmRDb250ZXh0ICh2b2lkKSB7CisgIHJldHVybiBLVEJfQ1RYX0RFRkFVTFQ7Cit9CisKKyNpbmNsdWRlICJhbGVydC5oIgorCit2b2lkCithbGVydCAoQWxlcnRJZGVudGlmaWVyIGlkZW50aWZpZXIpIHsKK30KKwordm9pZAorc3BlYWtBbGVydFRleHQgKGNvbnN0IHdjaGFyX3QgKnRleHQpIHsKK30KKworI2luY2x1ZGUgImFwaV9jb250cm9sLmgiCisKK2NvbnN0IEFwaU1ldGhvZHMgYXBpOwpkaWZmIC0tZ2l0IGEvUHJvZ3JhbXMvYnJsdHR5LWF0Yi5jIGIvUHJvZ3JhbXMvYnJsdHR5LWF0Yi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM1OTVhNTAKLS0tIC9kZXYvbnVsbAorKysgYi9Qcm9ncmFtcy9icmx0dHktYXRiLmMKQEAgLTAsMCArMSw3OSBAQAorLyoKKyAqIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisgKiAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisgKgorICogQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKKyNpbmNsdWRlICJwcm9sb2d1ZS5oIgorCisjaW5jbHVkZSAicHJvZ3JhbS5oIgorI2luY2x1ZGUgImNtZGxpbmUuaCIKKyNpbmNsdWRlICJsb2cuaCIKKyNpbmNsdWRlICJhdGIuaCIKKworc3RhdGljIGNoYXIgKm9wdF90YWJsZXNEaXJlY3Rvcnk7CisKK0JFR0lOX09QVElPTl9UQUJMRShwcm9ncmFtT3B0aW9ucykKKyAgeyAud29yZCA9ICJ0YWJsZXMtZGlyZWN0b3J5IiwKKyAgICAubGV0dGVyID0gJ1QnLAorICAgIC5hcmd1bWVudCA9IHN0cnRleHQoImRpcmVjdG9yeSIpLAorICAgIC5zZXR0aW5nLnN0cmluZyA9ICZvcHRfdGFibGVzRGlyZWN0b3J5LAorICAgIC5pbnRlcm5hbC5zZXR0aW5nID0gVEFCTEVTX0RJUkVDVE9SWSwKKyAgICAuaW50ZXJuYWwuYWRqdXN0ID0gZml4SW5zdGFsbFBhdGgsCisgICAgLmRlc2NyaXB0aW9uID0gc3RydGV4dCgiUGF0aCB0byBkaXJlY3RvcnkgY29udGFpbmluZyB0YWJsZXMuIikKKyAgfSwKK0VORF9PUFRJT05fVEFCTEUocHJvZ3JhbU9wdGlvbnMpCisKK2ludAorbWFpbiAoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkgeworICBQcm9ncmFtRXhpdFN0YXR1cyBleGl0U3RhdHVzID0gUFJPR19FWElUX1NVQ0NFU1M7CisKKyAgeworICAgIGNvbnN0IENvbW1hbmRMaW5lRGVzY3JpcHRvciBkZXNjcmlwdG9yID0geworICAgICAgLm9wdGlvbnMgPSAmcHJvZ3JhbU9wdGlvbnMsCisgICAgICAuYXBwbGljYXRpb25OYW1lID0gImJybHR0eS1hdGIiLAorCisgICAgICAudXNhZ2UgPSB7CisgICAgICAgIC5wdXJwb3NlID0gc3RydGV4dCgiQ2hlY2sgYW4gYXR0cmlidXRlcyB0YWJsZS4iKSwKKyAgICAgICAgLnBhcmFtZXRlcnMgPSAiYXR0cmlidXRlcy10YWJsZSIsCisgICAgICB9CisgICAgfTsKKyAgICBQUk9DRVNTX09QVElPTlMoZGVzY3JpcHRvciwgYXJnYywgYXJndik7CisgIH0KKworICBpZiAoYXJnYykgeworICAgIGNvbnN0IGNoYXIgKnRhYmxlTmFtZSA9IChhcmdjLS0sICphcmd2KyspOworICAgIGNoYXIgKnRhYmxlUGF0aCA9IG1ha2VBdHRyaWJ1dGVzVGFibGVQYXRoKG9wdF90YWJsZXNEaXJlY3RvcnksIHRhYmxlTmFtZSk7CisKKyAgICBpZiAodGFibGVQYXRoKSB7CisgICAgICBpZiAoKGF0dHJpYnV0ZXNUYWJsZSA9IGNvbXBpbGVBdHRyaWJ1dGVzVGFibGUodGFibGVQYXRoKSkpIHsKKyAgICAgICAgZXhpdFN0YXR1cyA9IFBST0dfRVhJVF9TVUNDRVNTOworCisgICAgICAgIGRlc3Ryb3lBdHRyaWJ1dGVzVGFibGUoYXR0cmlidXRlc1RhYmxlKTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIGV4aXRTdGF0dXMgPSBQUk9HX0VYSVRfRkFUQUw7CisgICAgICB9CisKKyAgICAgIGZyZWUodGFibGVQYXRoKTsKKyAgICB9IGVsc2UgeworICAgICAgZXhpdFN0YXR1cyA9IFBST0dfRVhJVF9GQVRBTDsKKyAgICB9CisgIH0gZWxzZSB7CisgICAgbG9nTWVzc2FnZShMT0dfRVJSLCAibWlzc2luZyBhdHRyaWJ1dGVzIHRhYmxlIG5hbWUiKTsKKyAgICBleGl0U3RhdHVzID0gUFJPR19FWElUX1NZTlRBWDsKKyAgfQorCisgIHJldHVybiBleGl0U3RhdHVzOworfQpkaWZmIC0tZ2l0IGEvUHJvZ3JhbXMvYnJsdHR5LWNsZHIuYyBiL1Byb2dyYW1zL2JybHR0eS1jbGRyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjg4N2VmNQotLS0gL2Rldi9udWxsCisrKyBiL1Byb2dyYW1zL2JybHR0eS1jbGRyLmMKQEAgLTAsMCArMSwyNjIgQEAKKy8qCisgKiBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorICogICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorICoKKyAqIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorICoKKyAqIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyAqLworCisjaW5jbHVkZSAicHJvbG9ndWUuaCIKKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKworI2luY2x1ZGUgInByb2dyYW0uaCIKKyNpbmNsdWRlICJjbWRsaW5lLmgiCisjaW5jbHVkZSAibG9nLmgiCisjaW5jbHVkZSAiY2xkci5oIgorI2luY2x1ZGUgImRhdGFmaWxlLmgiCisjaW5jbHVkZSAidXRmOC5oIgorCisjZGVmaW5lIERFRkFVTFRfT1VUUFVUX0ZPUk1BVCAiJXNcXHQlblxcbiIKKworc3RhdGljIGNoYXIgKm9wdF9vdXRwdXRGb3JtYXQ7CisKK0JFR0lOX09QVElPTl9UQUJMRShwcm9ncmFtT3B0aW9ucykKKyAgeyAud29yZCA9ICJvdXRwdXQtZm9ybWF0IiwKKyAgICAubGV0dGVyID0gJ2YnLAorICAgIC5hcmd1bWVudCA9IHN0cnRleHQoInN0cmluZyIpLAorICAgIC5zZXR0aW5nLnN0cmluZyA9ICZvcHRfb3V0cHV0Rm9ybWF0LAorICAgIC5pbnRlcm5hbC5zZXR0aW5nID0gREVGQVVMVF9PVVRQVVRfRk9STUFULAorICAgIC5kZXNjcmlwdGlvbiA9IHN0cnRleHQoIlRoZSBmb3JtYXQgb2YgZWFjaCBvdXRwdXQgbGluZS4iKQorICB9LAorRU5EX09QVElPTl9UQUJMRShwcm9ncmFtT3B0aW9ucykKKworc3RhdGljCitCRUdJTl9VU0FHRV9OT1RFUyh1c2FnZU5vdGVzKQorICAiVGhlIG91dHB1dCBmb3JtYXQgaXMgcHJpbnRmLWxpa2UgLSIsCisgICJhcmJpdHJhcnkgdGV4dCB3aGljaCBtYXkgY29udGFpbiIsCisgICJmaWVsZCBzcGVjaWZpZXJzIChpbnRyb2R1Y2VkIHZpYSBhIHBlcmNlbnQgc2lnbiBbJV0pIiwKKyAgImFuZC9vciBzcGVjaWFsIGNoYXJhY3RlcnMgKGludHJvZHVjZWQgdmlhIGEgYmFja3NsYXNoIFtcXF0pLiIsCisgICJUaGUgZGVmYXVsdCBmb3JtYXQsIGV4Y2x1ZGluZyB0aGUgcXVvdGVzLCBpcyBcIiIgREVGQVVMVF9PVVRQVVRfRk9STUFUICJcIi4iLAorICAiIiwKKyAgIlRoZXNlIGZpZWxkIHNwZWNpZmllcnMgYXJlIHJlY29nbml6ZWQ6IiwKKyAgIiAgJW4gIHRoZSBuYW1lIG9mIHRoZSBjaGFyYWN0ZXIgc2VxdWVuY2UiLAorICAiICAlcyAgdGhlIGNoYXJhY3RlciBzZXF1ZW5jZSBpdHNlbGYiLAorICAiICAleCAgdGhlIGNoYXJhY3RlciBzZXF1ZW5jZSBpbiBoZXhhZGVjaW1hbCIsCisgICIgICUlICBhIGxpdGVyYWwgcGVyY2VudCBzaWduIiwKKyAgIiIsCisgICJUaGVzZSBzcGVjaWFsIGNoYXJhY3RlcnMgYXJlIHJlY29nbml6ZWQ6IiwKKyAgIiAgXFxhICBhbGVydCAoYmVsbCkiLAorICAiICBcXGIgIGJhY2tzcGFjZSIsCisgICIgIFxcZSAgZXNjYXBlIiwKKyAgIiAgXFxmICBmb3JtIGZlZWQiLAorICAiICBcXG4gIG5ldyBsaW5lIiwKKyAgIiAgXFxyICBjYXJyaWFnZSByZXR1cm4iLAorICAiICBcXHQgIGhvcml6b250YWwgdGFiIiwKKyAgIiAgXFx2ICB2ZXJ0aWNhbCB0YWIiLAorICAiICBcXFxcICBsaXRlcmFsIGJhY2tzbGFzaGEgICIsCitFTkRfVVNBR0VfTk9URVMKKworc3RhdGljIHZvaWQKK29uRm9ybWF0RXJyb3IgKHZvaWQpIHsKKyAgZXhpdChQUk9HX0VYSVRfU1lOVEFYKTsKK30KKworc3RhdGljIHZvaWQKK29uTWlzc2luZ0NoYXJhY3RlciAoY29uc3QgY2hhciAqdHlwZSkgeworICBsb2dNZXNzYWdlKExPR19FUlIsICJtaXNzaW5nICVzIGNoYXJhY3RlciIsIHR5cGUpOworICBvbkZvcm1hdEVycm9yKCk7Cit9CisKK3N0YXRpYyB2b2lkCitvblVucmVjb2duaXplZENoYXJhY3RlciAoY29uc3QgY2hhciAqdHlwZSwgaW50IGJ5dGUpIHsKKyAgbG9nTWVzc2FnZShMT0dfRVJSLCAidW5yZWNvZ25pemVkICVzIGNoYXJhY3RlcjogJWMiLCB0eXBlLCBieXRlKTsKKyAgb25Gb3JtYXRFcnJvcigpOworfQorCitzdGF0aWMgdm9pZAorb25PdXRwdXRFcnJvciAodm9pZCkgeworICBsb2dNZXNzYWdlKExPR19FUlIsICJvdXRwdXQgZXJyb3IgJWQ6ICVzIiwgZXJybm8sIHN0cmVycm9yKGVycm5vKSk7CisgIGV4aXQoUFJPR19FWElUX0ZBVEFMKTsKK30KKworc3RhdGljIHZvaWQKK3B1dEJ5dGUgKGludCBieXRlKSB7CisgIGlmIChmcHV0YyhieXRlLCBzdGRvdXQpID09IEVPRikgb25PdXRwdXRFcnJvcigpOworfQorCitzdGF0aWMgdm9pZAorcHV0U3RyaW5nIChjb25zdCBjaGFyICpzdHJpbmcpIHsKKyAgaWYgKGZwdXRzKHN0cmluZywgc3Rkb3V0KSA9PSBFT0YpIG9uT3V0cHV0RXJyb3IoKTsKK30KKworc3RhdGljIHZvaWQKK3B1dEhleGFkZWNpbWFsIChjb25zdCBjaGFyICpzdHJpbmcpIHsKKyAgc2l6ZV90IHNpemUgPSBzdHJsZW4oc3RyaW5nKSArIDE7CisgIHdjaGFyX3QgY2hhcmFjdGVyc1tzaXplXTsKKworICBjb25zdCBjaGFyICpieXRlID0gc3RyaW5nOworICB3Y2hhcl90ICpjaGFyYWN0ZXIgPSBjaGFyYWN0ZXJzOworICB3Y2hhcl90ICplbmQgPSBjaGFyYWN0ZXI7CisgIGNvbnZlcnRVdGY4VG9XY2hhcnMoJmJ5dGUsICZlbmQsIHNpemUpOworCisgIHdoaWxlIChjaGFyYWN0ZXIgPCBlbmQpIHsKKyAgICBpZiAod3JpdGVIZXhhZGVjaW1hbENoYXJhY3RlcihzdGRvdXQsICpjaGFyYWN0ZXIpID09IEVPRikgb25PdXRwdXRFcnJvcigpOworICAgIGNoYXJhY3RlciArPSAxOworICB9Cit9CisKK3N0YXRpYworQ0xEUl9BTk5PVEFUSU9OX0hBTkRMRVIoaGFuZGxlQW5ub3RhdGlvbikgeworICB0eXBlZGVmIGVudW0ge0xJVEVSQUwsIEZPUk1BVCwgRVNDQVBFfSBTdGF0ZTsKKyAgU3RhdGUgc3RhdGUgPSBMSVRFUkFMOworICBjb25zdCBjaGFyICpmb3JtYXQgPSBvcHRfb3V0cHV0Rm9ybWF0OworCisgIHdoaWxlICgqZm9ybWF0KSB7CisgICAgaW50IGJ5dGUgPSAqZm9ybWF0ICYgMFhGRjsKKworICAgIHN3aXRjaCAoc3RhdGUpIHsKKyAgICAgIGNhc2UgTElURVJBTDogeworICAgICAgICBzd2l0Y2ggKGJ5dGUpIHsKKyAgICAgICAgICBjYXNlICclJzoKKyAgICAgICAgICAgIHN0YXRlID0gRk9STUFUOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICBjYXNlICdcXCc6CisgICAgICAgICAgICBzdGF0ZSA9IEVTQ0FQRTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHB1dEJ5dGUoYnl0ZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGJyZWFrOworICAgICAgfQorCisgICAgICBjYXNlIEZPUk1BVDogeworICAgICAgICBzd2l0Y2ggKGJ5dGUpIHsKKyAgICAgICAgICBjYXNlICduJzoKKyAgICAgICAgICAgIHB1dFN0cmluZyhwYXJhbWV0ZXJzLT5uYW1lKTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgY2FzZSAncyc6CisgICAgICAgICAgICBwdXRTdHJpbmcocGFyYW1ldGVycy0+c2VxdWVuY2UpOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICBjYXNlICd4JzoKKyAgICAgICAgICAgIHB1dEhleGFkZWNpbWFsKHBhcmFtZXRlcnMtPnNlcXVlbmNlKTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgY2FzZSAnJSc6CisgICAgICAgICAgICBwdXRCeXRlKGJ5dGUpOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgb25VbnJlY29nbml6ZWRDaGFyYWN0ZXIoImZvcm1hdCIsIGJ5dGUpOworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKworICAgICAgICBzdGF0ZSA9IExJVEVSQUw7CisgICAgICAgIGJyZWFrOworICAgICAgfQorCisgICAgICBjYXNlIEVTQ0FQRTogeworICAgICAgICBzdGF0aWMgY29uc3QgY2hhciBlc2NhcGVzW10gPSB7CisgICAgICAgICAgWydhJ10gPSAnXGEnLAorICAgICAgICAgIFsnYiddID0gJ1xiJywKKyAgICAgICAgICBbJ2UnXSA9ICdcZScsCisgICAgICAgICAgWydmJ10gPSAnXGYnLAorICAgICAgICAgIFsnbiddID0gJ1xuJywKKyAgICAgICAgICBbJ3InXSA9ICdccicsCisgICAgICAgICAgWyd0J10gPSAnXHQnLAorICAgICAgICAgIFsndiddID0gJ1x2JywKKyAgICAgICAgICBbJ1xcJ10gPSAnXFwnCisgICAgICAgIH07CisKKyAgICAgICAgc3dpdGNoIChieXRlKSB7CisgICAgICAgICAgZGVmYXVsdDogeworICAgICAgICAgICAgaWYgKGJ5dGUgPCBBUlJBWV9DT1VOVChlc2NhcGVzKSkgeworICAgICAgICAgICAgICBjaGFyIGVzY2FwZSA9IGVzY2FwZXNbYnl0ZV07CisKKyAgICAgICAgICAgICAgaWYgKGVzY2FwZSkgeworICAgICAgICAgICAgICAgIHB1dEJ5dGUoZXNjYXBlKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBvblVucmVjb2duaXplZENoYXJhY3RlcigiZXNjYXBlIiwgYnl0ZSk7CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBzdGF0ZSA9IExJVEVSQUw7CisgICAgICAgIGJyZWFrOworICAgICAgfQorICAgIH0KKworICAgIGZvcm1hdCArPSAxOworICB9CisKKyAgc3dpdGNoIChzdGF0ZSkgeworICAgIGNhc2UgTElURVJBTDoKKyAgICAgIHJldHVybiAxOworCisgICAgY2FzZSBGT1JNQVQ6CisgICAgICBvbk1pc3NpbmdDaGFyYWN0ZXIoImZvcm1hdCIpOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIEVTQ0FQRToKKyAgICAgIG9uTWlzc2luZ0NoYXJhY3RlcigiZXNjYXBlIik7CisgICAgICBicmVhazsKKyAgfQorCisgIHJldHVybiAwOworfQorCitpbnQKK21haW4gKGludCBhcmdjLCBjaGFyICphcmd2W10pIHsKKyAgeworICAgIGNvbnN0IENvbW1hbmRMaW5lRGVzY3JpcHRvciBkZXNjcmlwdG9yID0geworICAgICAgLm9wdGlvbnMgPSAmcHJvZ3JhbU9wdGlvbnMsCisgICAgICAuYXBwbGljYXRpb25OYW1lID0gImJybHR0eS1jbGRyIiwKKworICAgICAgLnVzYWdlID0geworICAgICAgICAucHVycG9zZSA9IHN0cnRleHQoIkxpc3QgdGhlIGNoYXJhY3RlcnMgZGVmaW5lZCB3aXRoaW4gYSBDTERSIChDb21tb24gTG9jYWxlIERhdGEgUmVwb3NpdG9yeSBQcm9qZWN0KSBhbm5vdGF0aW9ucyBmaWxlLiIpLAorICAgICAgICAucGFyYW1ldGVycyA9ICJpbnB1dC1maWxlIiwKKyAgICAgICAgLm5vdGVzID0gVVNBR0VfTk9URVModXNhZ2VOb3RlcyksCisgICAgICB9CisgICAgfTsKKworICAgIFBST0NFU1NfT1BUSU9OUyhkZXNjcmlwdG9yLCBhcmdjLCBhcmd2KTsKKyAgfQorCisgIGlmIChhcmdjIDwgMSkgeworICAgIGxvZ01lc3NhZ2UoTE9HX0VSUiwgIm1pc3NpbmcgYW5ub3RhdGlvbnMgZmlsZSBuYW1lIik7CisgICAgcmV0dXJuIFBST0dfRVhJVF9TWU5UQVg7CisgIH0KKworICBjb25zdCBjaGFyICppbnB1dEZpbGUgPSAqYXJndisrOworICBhcmdjIC09IDE7CisKKyAgaWYgKGFyZ2MgPiAwKSB7CisgICAgbG9nTWVzc2FnZShMT0dfRVJSLCAidG9vIG1hbnkgcGFyYW1ldGVycyIpOworICAgIHJldHVybiBQUk9HX0VYSVRfU1lOVEFYOworICB9CisKKyAgcmV0dXJuIGNsZHJQYXJzZUZpbGUoaW5wdXRGaWxlLCBoYW5kbGVBbm5vdGF0aW9uLCBOVUxMKT8KKyAgICAgICAgIFBST0dfRVhJVF9TVUNDRVNTOgorICAgICAgICAgUFJPR19FWElUX0ZBVEFMOworfQpkaWZmIC0tZ2l0IGEvUHJvZ3JhbXMvYnJsdHR5LWNsaXAuYyBiL1Byb2dyYW1zL2JybHR0eS1jbGlwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTBlOTgxOQotLS0gL2Rldi9udWxsCisrKyBiL1Byb2dyYW1zL2JybHR0eS1jbGlwLmMKQEAgLTAsMCArMSwyNjQgQEAKKy8qCisgKiBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorICogICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorICoKKyAqIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorICoKKyAqIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyAqLworCisjaW5jbHVkZSAicHJvbG9ndWUuaCIKKworI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisKKyNpbmNsdWRlICJsb2cuaCIKKyNpbmNsdWRlICJjbWRsaW5lLmgiCisjaW5jbHVkZSAiZGF0YWZpbGUuaCIKKyNpbmNsdWRlICJ1dGY4LmgiCisjaW5jbHVkZSAiYnJsYXBpLmgiCisKK3N0YXRpYyBjaGFyICpvcHRfYXBpSG9zdDsKK3N0YXRpYyBjaGFyICpvcHRfYXV0aFNjaGVtZXM7CitzdGF0aWMgaW50IG9wdF9nZXRDb250ZW50Oworc3RhdGljIGNoYXIgKm9wdF9zZXRDb250ZW50Oworc3RhdGljIGludCBvcHRfcmVtb3ZlTmV3bGluZTsKKworQkVHSU5fT1BUSU9OX1RBQkxFKHByb2dyYW1PcHRpb25zKQorICB7IC53b3JkID0gImJybGFwaSIsCisgICAgLmxldHRlciA9ICdiJywKKyAgICAuYXJndW1lbnQgPSAiW2hvc3RdWzpwb3J0XSIsCisgICAgLnNldHRpbmcuc3RyaW5nID0gJm9wdF9hcGlIb3N0LAorICAgIC5kZXNjcmlwdGlvbiA9ICJCcmxBUElhIGhvc3QgYW5kL29yIHBvcnQgdG8gY29ubmVjdCB0by4iCisgIH0sCisKKyAgeyAud29yZCA9ICJhdXRoIiwKKyAgICAubGV0dGVyID0gJ2EnLAorICAgIC5hcmd1bWVudCA9ICJzY2hlbWUrLi4uIiwKKyAgICAuc2V0dGluZy5zdHJpbmcgPSAmb3B0X2F1dGhTY2hlbWVzLAorICAgIC5kZXNjcmlwdGlvbiA9ICJCcmxBUEkgYXV0aG9yaXphdGlvbi9hdXRoZW50aWNhdGlvbiBzY2hlbWVzLiIKKyAgfSwKKworICB7IC53b3JkID0gImdldC1jb250ZW50IiwKKyAgICAubGV0dGVyID0gJ2cnLAorICAgIC5zZXR0aW5nLmZsYWcgPSAmb3B0X2dldENvbnRlbnQsCisgICAgLmRlc2NyaXB0aW9uID0gIldyaXRlIHRoZSBjb250ZW50IG9mIHRoZSBjbGlwYm9hcmQgdG8gc3RhbmRhcmQgb3V0cHV0LiIKKyAgfSwKKworICB7IC53b3JkID0gInNldC1jb250ZW50IiwKKyAgICAubGV0dGVyID0gJ3MnLAorICAgIC5hcmd1bWVudCA9ICJjb250ZW50IiwKKyAgICAuc2V0dGluZy5zdHJpbmcgPSAmb3B0X3NldENvbnRlbnQsCisgICAgLmRlc2NyaXB0aW9uID0gIlNldCB0aGUgY29udGVudCBvZiB0aGUgY2xpcGJvYXJkLiIKKyAgfSwKKworICB7IC53b3JkID0gInJlbW92ZS1uZXdsaW5lIiwKKyAgICAubGV0dGVyID0gJ3InLAorICAgIC5zZXR0aW5nLmZsYWcgPSAmb3B0X3JlbW92ZU5ld2xpbmUsCisgICAgLmRlc2NyaXB0aW9uID0gIlJlbW92ZSBhIHRyYWlsaW5nIG5ld2xpbmUuIgorICB9LAorRU5EX09QVElPTl9UQUJMRShwcm9ncmFtT3B0aW9ucykKKworc3RhdGljIGNvbnN0IGJybGFwaV9wYXJhbV90IGFwaVBhcmFtZXRlciA9IEJSTEFQSV9QQVJBTV9DTElQQk9BUkRfQ09OVEVOVDsKK3N0YXRpYyBjb25zdCBicmxhcGlfcGFyYW1fc3VicGFyYW1fdCBhcGlTdWJwYXJhbSA9IDA7CitzdGF0aWMgY29uc3QgYnJsYXBpX3BhcmFtX2ZsYWdzX3QgYXBpRmxhZ3MgPSBCUkxBUElfUEFSQU1GX0dMT0JBTDsKKworc3RhdGljIGNoYXIgKgorZ2V0Q2xpcGJvYXJkQ29udGVudCAodm9pZCkgeworICByZXR1cm4gYnJsYXBpX2dldFBhcmFtZXRlckFsbG9jKGFwaVBhcmFtZXRlciwgYXBpU3VicGFyYW0sIGFwaUZsYWdzLCBOVUxMKTsKK30KKworc3RhdGljIGludAorc2V0Q2xpcGJvYXJkQ29udGVudCAoY29uc3QgY2hhciAqY29udGVudCwgc2l6ZV90IGxlbmd0aCkgeworICBpZiAob3B0X3JlbW92ZU5ld2xpbmUpIHsKKyAgICBpZiAobGVuZ3RoID4gMCkgeworICAgICAgc2l6ZV90IG5ld0xlbmd0aCA9IGxlbmd0aCAtIDE7CisgICAgICBpZiAoY29udGVudFtuZXdMZW5ndGhdID09ICdcbicpIGxlbmd0aCA9IG5ld0xlbmd0aDsKKyAgICB9CisgIH0KKworICByZXR1cm4gYnJsYXBpX3NldFBhcmFtZXRlcihhcGlQYXJhbWV0ZXIsIGFwaVN1YnBhcmFtLCBhcGlGbGFncywgY29udGVudCwgbGVuZ3RoKSA+PSAwOworfQorCit0eXBlZGVmIHN0cnVjdCB7CisgIHN0cnVjdCB7CisgICAgd2NoYXJfdCAqY2hhcmFjdGVyczsKKyAgICBzaXplX3Qgc2l6ZTsKKyAgICBzaXplX3QgY291bnQ7CisgIH0gY29udGVudDsKK30gTGluZVByb2Nlc3NpbmdEYXRhOworCitzdGF0aWMgaW50CithZGRDb250ZW50IChMaW5lUHJvY2Vzc2luZ0RhdGEgKmxwZCwgY29uc3Qgd2NoYXJfdCAqY2hhcmFjdGVycywgc2l6ZV90IGNvdW50KSB7CisgIHsKKyAgICBzaXplX3QgbmV3U2l6ZSA9IGxwZC0+Y29udGVudC5jb3VudCArIGNvdW50OworCisgICAgaWYgKG5ld1NpemUgPiBscGQtPmNvbnRlbnQuc2l6ZSkgeworICAgICAgbmV3U2l6ZSB8PSAwWEZGRjsKKyAgICAgIG5ld1NpemUgKz0gMTsKKyAgICAgIHdjaGFyX3QgKm5ld0NoYXJhY3RlcnMgPSBhbGxvY2F0ZUNoYXJhY3RlcnMobmV3U2l6ZSk7CisKKyAgICAgIGlmICghbmV3Q2hhcmFjdGVycykgeworICAgICAgICBsb2dNYWxsb2NFcnJvcigpOworICAgICAgICByZXR1cm4gMDsKKyAgICAgIH0KKworICAgICAgaWYgKGxwZC0+Y29udGVudC5jaGFyYWN0ZXJzKSB7CisgICAgICAgIHdtZW1jcHkobmV3Q2hhcmFjdGVycywgbHBkLT5jb250ZW50LmNoYXJhY3RlcnMsIGxwZC0+Y29udGVudC5jb3VudCk7CisgICAgICB9CisKKyAgICAgIGxwZC0+Y29udGVudC5jaGFyYWN0ZXJzID0gbmV3Q2hhcmFjdGVyczsKKyAgICAgIGxwZC0+Y29udGVudC5zaXplID0gbmV3U2l6ZTsKKyAgICB9CisgIH0KKworICB3bWVtY3B5KCZscGQtPmNvbnRlbnQuY2hhcmFjdGVyc1tscGQtPmNvbnRlbnQuY291bnRdLCBjaGFyYWN0ZXJzLCBjb3VudCk7CisgIGxwZC0+Y29udGVudC5jb3VudCArPSBjb3VudDsKKyAgcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBEQVRBX09QRVJBTkRTX1BST0NFU1NPUihwcm9jZXNzSW5wdXRMaW5lKSB7CisgIExpbmVQcm9jZXNzaW5nRGF0YSAqbHBkID0gZGF0YTsKKworICB7CisgICAgRGF0YU9wZXJhbmQgbGluZTsKKyAgICBnZXRUZXh0UmVtYWluaW5nKGZpbGUsICZsaW5lKTsKKyAgICBpZiAoIWFkZENvbnRlbnQobHBkLCBsaW5lLmNoYXJhY3RlcnMsIGxpbmUubGVuZ3RoKSkgcmV0dXJuIDA7CisgIH0KKworICB7CisgICAgc3RhdGljIGNvbnN0IHdjaGFyX3QgZGVsaW1pdGVyW10gPSB7V0NfQygnXG4nKX07CisgICAgcmV0dXJuIGFkZENvbnRlbnQobHBkLCBkZWxpbWl0ZXIsIEFSUkFZX0NPVU5UKGRlbGltaXRlcikpOworICB9Cit9CisKK2ludAorbWFpbiAoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkgeworICBQcm9ncmFtRXhpdFN0YXR1cyBleGl0U3RhdHVzID0gUFJPR19FWElUX0ZBVEFMOworCisgIHsKKyAgICBjb25zdCBDb21tYW5kTGluZURlc2NyaXB0b3IgZGVzY3JpcHRvciA9IHsKKyAgICAgIC5vcHRpb25zID0gJnByb2dyYW1PcHRpb25zLAorICAgICAgLmFwcGxpY2F0aW9uTmFtZSA9ICJicmx0dHktY2xpcCIsCisKKyAgICAgIC51c2FnZSA9IHsKKyAgICAgICAgLnB1cnBvc2UgPSBzdHJ0ZXh0KCJNYW5hZ2UgYnJsdHR5J3MgY2xpcGJvYXJkIGZyb20gdGhlIGNvbW1hbmQgbGluZS4iKSwKKyAgICAgICAgLnBhcmFtZXRlcnMgPSAiW3tpbnB1dC1maWxlIHwgLX0gLi4uXSIsCisgICAgICB9CisgICAgfTsKKworICAgIFBST0NFU1NfT1BUSU9OUyhkZXNjcmlwdG9yLCBhcmdjLCBhcmd2KTsKKyAgfQorCisgIGJybGFwaV9jb25uZWN0aW9uU2V0dGluZ3NfdCBzZXR0aW5ncyA9IHsKKyAgICAuaG9zdCA9IG9wdF9hcGlIb3N0LAorICAgIC5hdXRoID0gb3B0X2F1dGhTY2hlbWVzCisgIH07CisKKyAgYnJsYXBpX2ZpbGVEZXNjcmlwdG9yIGZpbGVEZXNjcmlwdG9yID0gYnJsYXBpX29wZW5Db25uZWN0aW9uKCZzZXR0aW5ncywgJnNldHRpbmdzKTsKKworICBpZiAoZmlsZURlc2NyaXB0b3IgIT0gKGJybGFwaV9maWxlRGVzY3JpcHRvcikoLTEpKSB7CisgICAgY2hhciAqb2xkQ29udGVudCA9IE5VTEw7CisKKyAgICBMaW5lUHJvY2Vzc2luZ0RhdGEgbHBkID0geworICAgICAgLmNvbnRlbnQgPSB7CisgICAgICAgIC5jaGFyYWN0ZXJzID0gTlVMTCwKKyAgICAgICAgLnNpemUgPSAwLAorICAgICAgICAuY291bnQgPSAwCisgICAgICB9CisgICAgfTsKKworICAgIGludCBnZXRDb250ZW50ID0gISFvcHRfZ2V0Q29udGVudDsKKyAgICBpbnQgc2V0Q29udGVudCA9ICEhKm9wdF9zZXRDb250ZW50OworCisgICAgaWYgKCEoZ2V0Q29udGVudCB8fCBzZXRDb250ZW50KSkgeworICAgICAgY29uc3QgSW5wdXRGaWxlc1Byb2Nlc3NpbmdQYXJhbWV0ZXJzIHBhcmFtZXRlcnMgPSB7CisgICAgICAgIC5kYXRhRmlsZVBhcmFtZXRlcnMgPSB7CisgICAgICAgICAgLm9wdGlvbnMgPSBERk9fTk9fQ09NTUVOVFMsCisgICAgICAgICAgLnByb2Nlc3NPcGVyYW5kcyA9IHByb2Nlc3NJbnB1dExpbmUsCisgICAgICAgICAgLmRhdGEgPSAmbHBkCisgICAgICAgIH0KKyAgICAgIH07CisKKyAgICAgIGV4aXRTdGF0dXMgPSBwcm9jZXNzSW5wdXRGaWxlcyhhcmd2LCBhcmdjLCAmcGFyYW1ldGVycyk7CisgICAgfSBlbHNlIGlmIChhcmdjID4gMCkgeworICAgICAgbG9nTWVzc2FnZShMT0dfRVJSLCAidG9vIG1hbnkgYXJndW1lbnRzIik7CisgICAgICBleGl0U3RhdHVzID0gUFJPR19FWElUX1NZTlRBWDsKKyAgICB9IGVsc2UgeworICAgICAgZXhpdFN0YXR1cyA9IFBST0dfRVhJVF9TVUNDRVNTOworICAgIH0KKworICAgIGlmIChleGl0U3RhdHVzID09IFBST0dfRVhJVF9TVUNDRVNTKSB7CisgICAgICBpZiAoZ2V0Q29udGVudCkgeworICAgICAgICBvbGRDb250ZW50ID0gZ2V0Q2xpcGJvYXJkQ29udGVudCgpOworICAgICAgICBpZiAoIW9sZENvbnRlbnQpIGV4aXRTdGF0dXMgPSBQUk9HX0VYSVRfRkFUQUw7CisgICAgICB9CisgICAgfQorCisgICAgaWYgKGV4aXRTdGF0dXMgPT0gUFJPR19FWElUX1NVQ0NFU1MpIHsKKyAgICAgIGlmIChzZXRDb250ZW50KSB7CisgICAgICAgIGlmICghc2V0Q2xpcGJvYXJkQ29udGVudChvcHRfc2V0Q29udGVudCwgc3RybGVuKG9wdF9zZXRDb250ZW50KSkpIHsKKyAgICAgICAgICBleGl0U3RhdHVzID0gUFJPR19FWElUX0ZBVEFMOworICAgICAgICB9CisgICAgICB9CisgICAgfQorCisgICAgaWYgKGxwZC5jb250ZW50LmNoYXJhY3RlcnMpIHsKKyAgICAgIGlmIChleGl0U3RhdHVzID09IFBST0dfRVhJVF9TVUNDRVNTKSB7CisgICAgICAgIGV4aXRTdGF0dXMgPSBQUk9HX0VYSVRfRkFUQUw7CisKKyAgICAgICAgc2l6ZV90IGxlbmd0aDsKKyAgICAgICAgY2hhciAqY29udGVudCA9IGdldFV0ZjhGcm9tV2NoYXJzKGxwZC5jb250ZW50LmNoYXJhY3RlcnMsIGxwZC5jb250ZW50LmNvdW50LCAmbGVuZ3RoKTsKKworICAgICAgICBpZiAoY29udGVudCkgeworICAgICAgICAgIGlmIChzZXRDbGlwYm9hcmRDb250ZW50KGNvbnRlbnQsIGxlbmd0aCkpIHsKKyAgICAgICAgICAgIGV4aXRTdGF0dXMgPSBQUk9HX0VYSVRfU1VDQ0VTUzsKKyAgICAgICAgICB9CisKKyAgICAgICAgICBmcmVlKGNvbnRlbnQpOworICAgICAgICB9CisgICAgICB9CisKKyAgICAgIGZyZWUobHBkLmNvbnRlbnQuY2hhcmFjdGVycyk7CisgICAgfQorCisgICAgaWYgKG9sZENvbnRlbnQpIHsKKyAgICAgIGlmIChleGl0U3RhdHVzID09IFBST0dfRVhJVF9TVUNDRVNTKSB7CisgICAgICAgIGlmIChvcHRfcmVtb3ZlTmV3bGluZSkgeworICAgICAgICAgIHNpemVfdCBsZW5ndGggPSBzdHJsZW4ob2xkQ29udGVudCk7CisKKyAgICAgICAgICBpZiAobGVuZ3RoID4gMCkgeworICAgICAgICAgICAgaWYgKG9sZENvbnRlbnRbLS1sZW5ndGhdID09ICdcbicpIHsKKyAgICAgICAgICAgICAgb2xkQ29udGVudFtsZW5ndGhdID0gMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBwcmludGYoIiVzIiwgb2xkQ29udGVudCk7CisKKyAgICAgICAgaWYgKGZlcnJvcihzdGRvdXQpKSB7CisgICAgICAgICAgbG9nTWVzc2FnZShMT0dfRVJSLCAic3RhbmRhcmQgb3V0cHV0IHdyaXRlIGVycm9yOiAlcyIsIHN0cmVycm9yKGVycm5vKSk7CisgICAgICAgICAgZXhpdFN0YXR1cyA9IFBST0dfRVhJVF9GQVRBTDsKKyAgICAgICAgfQorICAgICAgfQorCisgICAgICBmcmVlKG9sZENvbnRlbnQpOworICAgIH0KKworICAgIGJybGFwaV9jbG9zZUNvbm5lY3Rpb24oKTsKKyAgfSBlbHNlIHsKKyAgICBsb2dNZXNzYWdlKExPR19FUlIsICJmYWlsZWQgdG8gY29ubmVjdCB0byAlcyB1c2luZyBhdXRoICVzOiAlcyIsCisgICAgICAgICAgICAgICBzZXR0aW5ncy5ob3N0LCBzZXR0aW5ncy5hdXRoLCBicmxhcGlfc3RyZXJyb3IoJmJybGFwaV9lcnJvcikpOworICB9CisKKyAgcmV0dXJuIGV4aXRTdGF0dXM7Cit9CmRpZmYgLS1naXQgYS9Qcm9ncmFtcy9icmx0dHktY3RiLmMgYi9Qcm9ncmFtcy9icmx0dHktY3RiLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWY3MzAwYwotLS0gL2Rldi9udWxsCisrKyBiL1Byb2dyYW1zL2JybHR0eS1jdGIuYwpAQCAtMCwwICsxLDU2NCBAQAorLyoKKyAqIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisgKiAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisgKgorICogQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKKyNpbmNsdWRlICJwcm9sb2d1ZS5oIgorCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorCisjaW5jbHVkZSAicHJvZ3JhbS5oIgorI2luY2x1ZGUgImNtZGxpbmUuaCIKKyNpbmNsdWRlICJwcmVmcy5oIgorI2luY2x1ZGUgImxvZy5oIgorI2luY2x1ZGUgImZpbGUuaCIKKyNpbmNsdWRlICJkYXRhZmlsZS5oIgorI2luY2x1ZGUgInBhcnNlLmgiCisjaW5jbHVkZSAidXRmOC5oIgorI2luY2x1ZGUgInVuaWNvZGUuaCIKKyNpbmNsdWRlICJhc2NpaS5oIgorI2luY2x1ZGUgInR0Yi5oIgorI2luY2x1ZGUgImN0Yi5oIgorCitzdGF0aWMgY2hhciAqb3B0X3RhYmxlc0RpcmVjdG9yeTsKK3N0YXRpYyBjaGFyICpvcHRfY29udHJhY3Rpb25UYWJsZTsKK3N0YXRpYyBjaGFyICpvcHRfdGV4dFRhYmxlOworc3RhdGljIGNoYXIgKm9wdF92ZXJpZmljYXRpb25UYWJsZTsKKworc3RhdGljIGNoYXIgKm9wdF9vdXRwdXRXaWR0aDsKK3N0YXRpYyBpbnQgb3B0X3JlZm9ybWF0VGV4dDsKK3N0YXRpYyBpbnQgb3B0X2ZvcmNlT3V0cHV0OworCitCRUdJTl9PUFRJT05fVEFCTEUocHJvZ3JhbU9wdGlvbnMpCisgIHsgLndvcmQgPSAib3V0cHV0LXdpZHRoIiwKKyAgICAubGV0dGVyID0gJ3cnLAorICAgIC5hcmd1bWVudCA9ICJjb2x1bW5zIiwKKyAgICAuc2V0dGluZy5zdHJpbmcgPSAmb3B0X291dHB1dFdpZHRoLAorICAgIC5pbnRlcm5hbC5zZXR0aW5nID0gIiIsCisgICAgLmRlc2NyaXB0aW9uID0gc3RydGV4dCgiTWF4aW11bSBsZW5ndGggb2YgYW4gb3V0cHV0IGxpbmUuIikKKyAgfSwKKworICB7IC53b3JkID0gInJlZm9ybWF0LXRleHQiLAorICAgIC5sZXR0ZXIgPSAncicsCisgICAgLnNldHRpbmcuZmxhZyA9ICZvcHRfcmVmb3JtYXRUZXh0LAorICAgIC5kZXNjcmlwdGlvbiA9IHN0cnRleHQoIlJlZm9ybWF0IGlucHV0LiIpCisgIH0sCisKKyAgeyAud29yZCA9ICJmb3JjZS1vdXRwdXQiLAorICAgIC5sZXR0ZXIgPSAnZicsCisgICAgLnNldHRpbmcuZmxhZyA9ICZvcHRfZm9yY2VPdXRwdXQsCisgICAgLmRlc2NyaXB0aW9uID0gc3RydGV4dCgiRm9yY2UgaW1tZWRpYXRlIG91dHB1dC4iKQorICB9LAorCisgIHsgLndvcmQgPSAiY29udHJhY3Rpb24tdGFibGUiLAorICAgIC5sZXR0ZXIgPSAnYycsCisgICAgLmFyZ3VtZW50ID0gImZpbGUiLAorICAgIC5zZXR0aW5nLnN0cmluZyA9ICZvcHRfY29udHJhY3Rpb25UYWJsZSwKKyAgICAuaW50ZXJuYWwuc2V0dGluZyA9ICJlbi11cy1nMiIsCisgICAgLmRlc2NyaXB0aW9uID0gc3RydGV4dCgiQ29udHJhY3Rpb24gdGFibGUuIikKKyAgfSwKKworICB7IC53b3JkID0gInRleHQtdGFibGUiLAorICAgIC5sZXR0ZXIgPSAndCcsCisgICAgLmFyZ3VtZW50ID0gImZpbGUiLAorICAgIC5zZXR0aW5nLnN0cmluZyA9ICZvcHRfdGV4dFRhYmxlLAorICAgIC5kZXNjcmlwdGlvbiA9IHN0cnRleHQoIlRleHQgdGFibGUuIikKKyAgfSwKKworICB7IC53b3JkID0gInZlcmlmaWNhdGlvbi10YWJsZSIsCisgICAgLmxldHRlciA9ICd2JywKKyAgICAuYXJndW1lbnQgPSAiZmlsZSIsCisgICAgLnNldHRpbmcuc3RyaW5nID0gJm9wdF92ZXJpZmljYXRpb25UYWJsZSwKKyAgICAuZGVzY3JpcHRpb24gPSBzdHJ0ZXh0KCJDb250cmFjdGlvbiB2ZXJpZmljYXRpb24gdGFibGUuIikKKyAgfSwKKworICB7IC53b3JkID0gInRhYmxlcy1kaXJlY3RvcnkiLAorICAgIC5sZXR0ZXIgPSAnVCcsCisgICAgLmFyZ3VtZW50ID0gc3RydGV4dCgiZGlyZWN0b3J5IiksCisgICAgLnNldHRpbmcuc3RyaW5nID0gJm9wdF90YWJsZXNEaXJlY3RvcnksCisgICAgLmludGVybmFsLnNldHRpbmcgPSBUQUJMRVNfRElSRUNUT1JZLAorICAgIC5pbnRlcm5hbC5hZGp1c3QgPSBmaXhJbnN0YWxsUGF0aCwKKyAgICAuZGVzY3JpcHRpb24gPSBzdHJ0ZXh0KCJQYXRoIHRvIGRpcmVjdG9yeSBjb250YWluaW5nIHRhYmxlcy4iKQorICB9LAorRU5EX09QVElPTl9UQUJMRShwcm9ncmFtT3B0aW9ucykKKworc3RhdGljIHdjaGFyX3QgKmlucHV0QnVmZmVyOworc3RhdGljIHNpemVfdCBpbnB1dFNpemU7CitzdGF0aWMgc2l6ZV90IGlucHV0TGVuZ3RoOworCitzdGF0aWMgRklMRSAqb3V0cHV0U3RyZWFtOworc3RhdGljIHVuc2lnbmVkIGNoYXIgKm91dHB1dEJ1ZmZlcjsKK3N0YXRpYyBpbnQgb3V0cHV0V2lkdGg7CitzdGF0aWMgaW50IG91dHB1dEV4dGVuZDsKKworI2RlZmluZSBWRVJJRklDQVRJT05fVEFCTEVfRVhURU5TSU9OICIuY3ZiIgorI2RlZmluZSBWRVJJRklDQVRJT05fU1VCVEFCTEVfRVhURU5TSU9OICIuY3ZpIgorCitzdGF0aWMgY2hhciAqdmVyaWZpY2F0aW9uVGFibGVQYXRoOworc3RhdGljIEZJTEUgKnZlcmlmaWNhdGlvblRhYmxlU3RyZWFtOworCitzdGF0aWMgaW50ICgqcHJvY2Vzc0lucHV0Q2hhcmFjdGVycykgKGNvbnN0IHdjaGFyX3QgKmNoYXJhY3RlcnMsIHNpemVfdCBsZW5ndGgsIHZvaWQgKmRhdGEpOworc3RhdGljIGludCAoKnB1dENlbGwpICh1bnNpZ25lZCBjaGFyIGNlbGwsIHZvaWQgKmRhdGEpOworCit0eXBlZGVmIHN0cnVjdCB7CisgIFByb2dyYW1FeGl0U3RhdHVzIGV4aXRTdGF0dXM7Cit9IExpbmVQcm9jZXNzaW5nRGF0YTsKKworc3RhdGljIHZvaWQKK25vTWVtb3J5ICh2b2lkICpkYXRhKSB7CisgIExpbmVQcm9jZXNzaW5nRGF0YSAqbHBkID0gZGF0YTsKKworICBsb2dNYWxsb2NFcnJvcigpOworICBscGQtPmV4aXRTdGF0dXMgPSBQUk9HX0VYSVRfRkFUQUw7Cit9CisKK3N0YXRpYyBpbnQKK2NoZWNrT3V0cHV0U3RyZWFtICh2b2lkICpkYXRhKSB7CisgIExpbmVQcm9jZXNzaW5nRGF0YSAqbHBkID0gZGF0YTsKKworICBpZiAoZmVycm9yKG91dHB1dFN0cmVhbSkpIHsKKyAgICBsb2dTeXN0ZW1FcnJvcigib3V0cHV0Iik7CisgICAgbHBkLT5leGl0U3RhdHVzID0gUFJPR19FWElUX0ZBVEFMOworICAgIHJldHVybiAwOworICB9CisKKyAgcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQKK2ZsdXNoT3V0cHV0U3RyZWFtICh2b2lkICpkYXRhKSB7CisgIGZmbHVzaChvdXRwdXRTdHJlYW0pOworICByZXR1cm4gY2hlY2tPdXRwdXRTdHJlYW0oZGF0YSk7Cit9CisKK3N0YXRpYyBpbnQKK3B1dENoYXJhY3RlciAodW5zaWduZWQgY2hhciBjaGFyYWN0ZXIsIHZvaWQgKmRhdGEpIHsKKyAgZnB1dGMoY2hhcmFjdGVyLCBvdXRwdXRTdHJlYW0pOworICByZXR1cm4gY2hlY2tPdXRwdXRTdHJlYW0oZGF0YSk7Cit9CisKK3N0YXRpYyBpbnQKK3B1dENlbGxDaGFyYWN0ZXIgKHdjaGFyX3QgY2hhcmFjdGVyLCB2b2lkICpkYXRhKSB7CisgIFV0ZjhCdWZmZXIgdXRmODsKKyAgc2l6ZV90IHV0ZnMgPSBjb252ZXJ0V2NoYXJUb1V0ZjgoY2hhcmFjdGVyLCB1dGY4KTsKKworICBmcHJpbnRmKG91dHB1dFN0cmVhbSwgIiUuKnMiLCAoaW50KXV0ZnMsIHV0ZjgpOworICByZXR1cm4gY2hlY2tPdXRwdXRTdHJlYW0oZGF0YSk7Cit9CisKK3N0YXRpYyBpbnQKK3B1dFRleHRDZWxsICh1bnNpZ25lZCBjaGFyIGNlbGwsIHZvaWQgKmRhdGEpIHsKKyAgcmV0dXJuIHB1dENlbGxDaGFyYWN0ZXIoY29udmVydERvdHNUb0NoYXJhY3Rlcih0ZXh0VGFibGUsIGNlbGwpLCBkYXRhKTsKK30KKworc3RhdGljIGludAorcHV0QnJhaWxsZUNlbGwgKHVuc2lnbmVkIGNoYXIgY2VsbCwgdm9pZCAqZGF0YSkgeworICByZXR1cm4gcHV0Q2VsbENoYXJhY3RlcigoVU5JQ09ERV9CUkFJTExFX1JPVyB8IGNlbGwpLCBkYXRhKTsKK30KKworc3RhdGljIGludAord3JpdGVDaGFyYWN0ZXJzIChjb25zdCB3Y2hhcl90ICppbnB1dExpbmUsIHNpemVfdCBpbnB1dExlbmd0aCwgdm9pZCAqZGF0YSkgeworICBjb25zdCB3Y2hhcl90ICppbnB1dEJ1ZmZlciA9IGlucHV0TGluZTsKKworICB3aGlsZSAoaW5wdXRMZW5ndGgpIHsKKyAgICBpbnQgaW5wdXRDb3VudCA9IGlucHV0TGVuZ3RoOworICAgIGludCBvdXRwdXRDb3VudCA9IG91dHB1dFdpZHRoOworCisgICAgaWYgKCFvdXRwdXRCdWZmZXIpIHsKKyAgICAgIGlmICghKG91dHB1dEJ1ZmZlciA9IG1hbGxvYyhvdXRwdXRXaWR0aCkpKSB7CisgICAgICAgIG5vTWVtb3J5KGRhdGEpOworICAgICAgICByZXR1cm4gMDsKKyAgICAgIH0KKyAgICB9CisKKyAgICBjb250cmFjdFRleHQoY29udHJhY3Rpb25UYWJsZSwgTlVMTCwKKyAgICAgICAgICAgICAgICAgaW5wdXRCdWZmZXIsICZpbnB1dENvdW50LAorICAgICAgICAgICAgICAgICBvdXRwdXRCdWZmZXIsICZvdXRwdXRDb3VudCwKKyAgICAgICAgICAgICAgICAgTlVMTCwgQ1RCX05PX0NVUlNPUik7CisKKyAgICBpZiAoKGlucHV0Q291bnQgPCBpbnB1dExlbmd0aCkgJiYgb3V0cHV0RXh0ZW5kKSB7CisgICAgICBmcmVlKG91dHB1dEJ1ZmZlcik7CisgICAgICBvdXRwdXRCdWZmZXIgPSBOVUxMOworICAgICAgb3V0cHV0V2lkdGggPDw9IDE7CisgICAgfSBlbHNlIHsKKyAgICAgIHsKKyAgICAgICAgaW50IGluZGV4OworCisgICAgICAgIGZvciAoaW5kZXg9MDsgaW5kZXg8b3V0cHV0Q291bnQ7IGluZGV4Kz0xKQorICAgICAgICAgIGlmICghcHV0Q2VsbChvdXRwdXRCdWZmZXJbaW5kZXhdLCBkYXRhKSkKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgfQorCisgICAgICBpbnB1dEJ1ZmZlciArPSBpbnB1dENvdW50OworICAgICAgaW5wdXRMZW5ndGggLT0gaW5wdXRDb3VudDsKKworICAgICAgaWYgKGlucHV0TGVuZ3RoKQorICAgICAgICBpZiAoIXB1dENoYXJhY3RlcignXG4nLCBkYXRhKSkKKyAgICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgIH0KKworICByZXR1cm4gMTsKK30KKworc3RhdGljIGludAorZmx1c2hDaGFyYWN0ZXJzICh3Y2hhcl90IGVuZCwgdm9pZCAqZGF0YSkgeworICBpZiAoaW5wdXRMZW5ndGgpIHsKKyAgICBpZiAoIXdyaXRlQ2hhcmFjdGVycyhpbnB1dEJ1ZmZlciwgaW5wdXRMZW5ndGgsIGRhdGEpKSByZXR1cm4gMDsKKyAgICBpbnB1dExlbmd0aCA9IDA7CisKKyAgICBpZiAoZW5kKQorICAgICAgaWYgKCFwdXRDaGFyYWN0ZXIoZW5kLCBkYXRhKSkKKyAgICAgICAgcmV0dXJuIDA7CisgIH0KKworICByZXR1cm4gMTsKK30KKworc3RhdGljIGludAorcHJvY2Vzc0NoYXJhY3RlcnMgKGNvbnN0IHdjaGFyX3QgKmNoYXJhY3RlcnMsIHNpemVfdCBjb3VudCwgd2NoYXJfdCBlbmQsIHZvaWQgKmRhdGEpIHsKKyAgaWYgKG9wdF9yZWZvcm1hdFRleHQgJiYgY291bnQpIHsKKyAgICBpZiAoaXN3c3BhY2UoY2hhcmFjdGVyc1swXSkpCisgICAgICBpZiAoIWZsdXNoQ2hhcmFjdGVycygnXG4nLCBkYXRhKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICB7CisgICAgICB1bnNpZ25lZCBpbnQgc3BhY2VzID0gIWlucHV0TGVuZ3RoPyAwOiAxOworICAgICAgc2l6ZV90IG5ld0xlbmd0aCA9IGlucHV0TGVuZ3RoICsgc3BhY2VzICsgY291bnQ7CisKKyAgICAgIGlmIChuZXdMZW5ndGggPiBpbnB1dFNpemUpIHsKKyAgICAgICAgc2l6ZV90IG5ld1NpemUgPSBuZXdMZW5ndGggfCAwWEZGOworICAgICAgICB3Y2hhcl90ICpuZXdCdWZmZXIgPSBjYWxsb2MobmV3U2l6ZSwgc2l6ZW9mKCpuZXdCdWZmZXIpKTsKKworICAgICAgICBpZiAoIW5ld0J1ZmZlcikgeworICAgICAgICAgIG5vTWVtb3J5KGRhdGEpOworICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CisKKyAgICAgICAgd21lbWNweShuZXdCdWZmZXIsIGlucHV0QnVmZmVyLCBpbnB1dExlbmd0aCk7CisgICAgICAgIGZyZWUoaW5wdXRCdWZmZXIpOworCisgICAgICAgIGlucHV0QnVmZmVyID0gbmV3QnVmZmVyOworICAgICAgICBpbnB1dFNpemUgPSBuZXdTaXplOworICAgICAgfQorCisgICAgICB3aGlsZSAoc3BhY2VzKSB7CisgICAgICAgIGlucHV0QnVmZmVyW2lucHV0TGVuZ3RoKytdID0gV0NfQygnICcpOworICAgICAgICBzcGFjZXMgLT0gMTsKKyAgICAgIH0KKworICAgICAgd21lbWNweSgmaW5wdXRCdWZmZXJbaW5wdXRMZW5ndGhdLCBjaGFyYWN0ZXJzLCBjb3VudCk7CisgICAgICBpbnB1dExlbmd0aCArPSBjb3VudDsKKyAgICB9CisKKyAgICBpZiAoZW5kICE9ICdcbicpIHsKKyAgICAgIGlmICghZmx1c2hDaGFyYWN0ZXJzKDAsIGRhdGEpKSByZXR1cm4gMDsKKyAgICAgIGlmICghcHV0Q2hhcmFjdGVyKGVuZCwgZGF0YSkpIHJldHVybiAwOworICAgIH0KKyAgfSBlbHNlIHsKKyAgICBpZiAoIWZsdXNoQ2hhcmFjdGVycygnXG4nLCBkYXRhKSkgcmV0dXJuIDA7CisgICAgaWYgKCF3cml0ZUNoYXJhY3RlcnMoY2hhcmFjdGVycywgY291bnQsIGRhdGEpKSByZXR1cm4gMDsKKyAgICBpZiAoIXB1dENoYXJhY3RlcihlbmQsIGRhdGEpKSByZXR1cm4gMDsKKyAgfQorCisgIHJldHVybiAxOworfQorCitzdGF0aWMgaW50Cit3cml0ZUNvbnRyYWN0ZWRCcmFpbGxlIChjb25zdCB3Y2hhcl90ICpjaGFyYWN0ZXJzLCBzaXplX3QgbGVuZ3RoLCB2b2lkICpkYXRhKSB7CisgIGNvbnN0IHdjaGFyX3QgKmNoYXJhY3RlciA9IGNoYXJhY3RlcnM7CisKKyAgd2hpbGUgKDEpIHsKKyAgICBjb25zdCB3Y2hhcl90ICplbmQgPSB3bWVtY2hyKGNoYXJhY3RlciwgQVNDSUlfRkYsIGxlbmd0aCk7CisgICAgc2l6ZV90IGNvdW50OworCisgICAgaWYgKCFlbmQpIGJyZWFrOworICAgIGNvdW50ID0gZW5kIC0gY2hhcmFjdGVyOworICAgIGlmICghcHJvY2Vzc0NoYXJhY3RlcnMoY2hhcmFjdGVyLCBjb3VudCwgKmVuZCwgZGF0YSkpIHJldHVybiAwOworCisgICAgY291bnQgKz0gMTsKKyAgICBjaGFyYWN0ZXIgKz0gY291bnQ7CisgICAgbGVuZ3RoIC09IGNvdW50OworICB9CisgIGlmICghcHJvY2Vzc0NoYXJhY3RlcnMoY2hhcmFjdGVyLCBsZW5ndGgsICdcbicsIGRhdGEpKSByZXR1cm4gMDsKKworICBpZiAob3B0X2ZvcmNlT3V0cHV0KQorICAgIGlmICghZmx1c2hPdXRwdXRTdHJlYW0oZGF0YSkpCisgICAgICByZXR1cm4gMDsKKworICByZXR1cm4gMTsKK30KKworc3RhdGljIGNoYXIgKgorbWFrZVV0ZjhGcm9tQ2VsbHMgKHVuc2lnbmVkIGNoYXIgKmNlbGxzLCBzaXplX3QgY291bnQpIHsKKyAgY2hhciAqdGV4dCA9IG1hbGxvYygoY291bnQgKiBVVEY4X0xFTl9NQVgpICsgMSk7CisKKyAgaWYgKHRleHQpIHsKKyAgICBjaGFyICpjaCA9IHRleHQ7CisgICAgc2l6ZV90IGk7CisKKyAgICBmb3IgKGk9MDsgaTxjb3VudDsgaSs9MSkgeworICAgICAgVXRmOEJ1ZmZlciB1dGY4OworICAgICAgc2l6ZV90IHV0ZnMgPSBjb252ZXJ0V2NoYXJUb1V0ZjgoY2VsbHNbaV18VU5JQ09ERV9CUkFJTExFX1JPVywgdXRmOCk7CisKKyAgICAgIGlmICh1dGZzKSB7CisgICAgICAgIGNoID0gbWVtcGNweShjaCwgdXRmOCwgdXRmcyk7CisgICAgICB9IGVsc2UgeworICAgICAgICAqY2grKyA9ICcgJzsKKyAgICAgIH0KKyAgICB9CisKKyAgICAqY2ggPSAwOworCisgICAgcmV0dXJuIHRleHQ7CisgIH0gZWxzZSB7CisgICAgbG9nTWFsbG9jRXJyb3IoKTsKKyAgfQorCisgIHJldHVybiBOVUxMOworfQorCitzdGF0aWMgaW50Cit3cml0ZVZlcmlmaWNhdGlvblRhYmxlTGluZSAoY29uc3Qgd2NoYXJfdCAqY2hhcmFjdGVycywgc2l6ZV90IGxlbmd0aCwgdm9pZCAqZGF0YSkgeworICBpbnQgaW5wdXRDb3VudCA9IGxlbmd0aDsKKyAgaW50IG91dHB1dENvdW50ID0gbGVuZ3RoIDw8IDI7CisgIHVuc2lnbmVkIGNoYXIgb3V0cHV0QnVmZmVyW291dHB1dENvdW50XTsKKworICBjb250cmFjdFRleHQoY29udHJhY3Rpb25UYWJsZSwgTlVMTCwKKyAgICAgICAgICAgICAgIGNoYXJhY3RlcnMsICZpbnB1dENvdW50LAorICAgICAgICAgICAgICAgb3V0cHV0QnVmZmVyLCAmb3V0cHV0Q291bnQsCisgICAgICAgICAgICAgICBOVUxMLCBDVEJfTk9fQ1VSU09SKTsKKworICBpZiAoZnByaW50Zih2ZXJpZmljYXRpb25UYWJsZVN0cmVhbSwgImNvbnRyYWN0cyAiKSA9PSBFT0YpIGdvdG8gb3V0cHV0RXJyb3I7CisgIGlmICghd3JpdGVFc2NhcGVkQ2hhcmFjdGVycyh2ZXJpZmljYXRpb25UYWJsZVN0cmVhbSwgY2hhcmFjdGVycywgbGVuZ3RoKSkgZ290byBvdXRwdXRFcnJvcjsKKyAgaWYgKGZwcmludGYodmVyaWZpY2F0aW9uVGFibGVTdHJlYW0sICIgIikgPT0gRU9GKSBnb3RvIG91dHB1dEVycm9yOworICBpZiAoIXdyaXRlRG90c0NlbGxzKHZlcmlmaWNhdGlvblRhYmxlU3RyZWFtLCBvdXRwdXRCdWZmZXIsIG91dHB1dENvdW50KSkgZ290byBvdXRwdXRFcnJvcjsKKyAgaWYgKGZwcmludGYodmVyaWZpY2F0aW9uVGFibGVTdHJlYW0sICIgIikgPT0gRU9GKSBnb3RvIG91dHB1dEVycm9yOworICBpZiAoIXdyaXRlVXRmOENlbGxzKHZlcmlmaWNhdGlvblRhYmxlU3RyZWFtLCBvdXRwdXRCdWZmZXIsIG91dHB1dENvdW50KSkgZ290byBvdXRwdXRFcnJvcjsKKyAgaWYgKGZwcmludGYodmVyaWZpY2F0aW9uVGFibGVTdHJlYW0sICJcbiIpID09IEVPRikgZ290byBvdXRwdXRFcnJvcjsKKyAgcmV0dXJuIDE7CisKK291dHB1dEVycm9yOgorICBsb2dNZXNzYWdlKExPR19FUlIsICJvdXRwdXQgZXJyb3I6ICVzIiwgc3RyZXJyb3IoZXJybm8pKTsKKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBEQVRBX09QRVJBTkRTX1BST0NFU1NPUihwcm9jZXNzQ29udHJhY3RzT3BlcmFuZHMpIHsKKyAgRGF0YVN0cmluZyB0ZXh0OworCisgIGlmIChnZXREYXRhU3RyaW5nKGZpbGUsICZ0ZXh0LCAxLCAidW5jb250cmFjdGVkIHRleHQiKSkgeworICAgIEJ5dGVPcGVyYW5kIGNlbGxzOworCisgICAgaWYgKGdldENlbGxzT3BlcmFuZChmaWxlLCAmY2VsbHMsICJjb250cmFjdGVkIGJyYWlsbGUiKSkgeworICAgICAgaW50IGlucHV0Q291bnQgPSB0ZXh0Lmxlbmd0aDsKKyAgICAgIGludCBvdXRwdXRDb3VudCA9IGlucHV0Q291bnQgPDwgMzsKKyAgICAgIHVuc2lnbmVkIGNoYXIgb3V0cHV0QnVmZmVyW291dHB1dENvdW50XTsKKworICAgICAgY29udHJhY3RUZXh0KGNvbnRyYWN0aW9uVGFibGUsIE5VTEwsCisJCSAgIHRleHQuY2hhcmFjdGVycywgJmlucHV0Q291bnQsCisJCSAgIG91dHB1dEJ1ZmZlciwgJm91dHB1dENvdW50LAorCQkgICBOVUxMLCBDVEJfTk9fQ1VSU09SKTsKKworICAgICAgaWYgKChvdXRwdXRDb3VudCAhPSBjZWxscy5sZW5ndGgpIHx8CisJICAobWVtY21wKGNlbGxzLmJ5dGVzLCBvdXRwdXRCdWZmZXIsIG91dHB1dENvdW50KSAhPSAwKSkgeworCWNoYXIgKmV4cGVjdGVkOworCisJaWYgKChleHBlY3RlZCA9IG1ha2VVdGY4RnJvbUNlbGxzKGNlbGxzLmJ5dGVzLCBjZWxscy5sZW5ndGgpKSkgeworICAgICAgICAgICBjaGFyICphY3R1YWw7CisKKyAgICAgICAgICAgaWYgKChhY3R1YWwgPSBtYWtlVXRmOEZyb21DZWxscyhvdXRwdXRCdWZmZXIsIG91dHB1dENvdW50KSkpIHsKKyAgICAgICAgICAgICAgcmVwb3J0RGF0YUVycm9yKGZpbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiJSIgUFJJd3MgIjogZXhwZWN0ZWQgJXMsIGdvdCAlcyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0LmNoYXJhY3RlcnMsIGV4cGVjdGVkLCBhY3R1YWwpOyAKKyAgICAgICAgICAgICAgZnJlZShhY3R1YWwpOworICAgICAgICAgICB9CisKKyAgICAgICAgICAgZnJlZShleHBlY3RlZCk7CisgICAgICAgIH0KKyAgICAgIH0KKworICAgICAgcmV0dXJuIDE7CisgICAgfQorICB9CisKKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyAgREFUQV9PUEVSQU5EU19QUk9DRVNTT1IocHJvY2Vzc1ZlcmlmaWNhdGlvbk9wZXJhbmRzKSB7CisgIEJFR0lOX0RBVEFfRElSRUNUSVZFX1RBQkxFCisgICAgey5uYW1lPVdTX0MoImNvbnRyYWN0cyIpLCAucHJvY2Vzc29yPXByb2Nlc3NDb250cmFjdHNPcGVyYW5kc30sCisgIEVORF9EQVRBX0RJUkVDVElWRV9UQUJMRQorCisgIHJldHVybiBwcm9jZXNzRGlyZWN0aXZlT3BlcmFuZChmaWxlLCAmZGlyZWN0aXZlcywgImNvbnRyYWN0aW9uIHZlcmlmaWNhdGlvbiBkaXJlY3RpdmUiLCBkYXRhKTsKK30KKworc3RhdGljIFByb2dyYW1FeGl0U3RhdHVzCitwcm9jZXNzVmVyaWZpY2F0aW9uVGFibGUgKHZvaWQpIHsKKyAgaWYgKHNldFRhYmxlRGF0YVZhcmlhYmxlcyhWRVJJRklDQVRJT05fVEFCTEVfRVhURU5TSU9OLCBWRVJJRklDQVRJT05fU1VCVEFCTEVfRVhURU5TSU9OKSkgeworICAgIGNvbnN0IERhdGFGaWxlUGFyYW1ldGVycyBwYXJhbWV0ZXJzID0geworICAgICAgLnByb2Nlc3NPcGVyYW5kcyA9IHByb2Nlc3NWZXJpZmljYXRpb25PcGVyYW5kcywKKyAgICAgIC5kYXRhID0gTlVMTAorICAgIH07CisKKyAgICBpZiAocHJvY2Vzc0RhdGFTdHJlYW0oTlVMTCwgdmVyaWZpY2F0aW9uVGFibGVTdHJlYW0sIHZlcmlmaWNhdGlvblRhYmxlUGF0aCwgJnBhcmFtZXRlcnMpKSB7CisgICAgICByZXR1cm4gUFJPR19FWElUX1NVQ0NFU1M7CisgICAgfQorICB9CisKKyAgcmV0dXJuIFBST0dfRVhJVF9GQVRBTDsKK30KKworc3RhdGljIERBVEFfT1BFUkFORFNfUFJPQ0VTU09SKHByb2Nlc3NJbnB1dExpbmUpIHsKKyAgRGF0YU9wZXJhbmQgbGluZTsKKyAgZ2V0VGV4dFJlbWFpbmluZyhmaWxlLCAmbGluZSk7CisgIHJldHVybiBwcm9jZXNzSW5wdXRDaGFyYWN0ZXJzKGxpbmUuY2hhcmFjdGVycywgbGluZS5sZW5ndGgsIGRhdGEpOworfQorCitpbnQKK21haW4gKGludCBhcmdjLCBjaGFyICphcmd2W10pIHsKKyAgUHJvZ3JhbUV4aXRTdGF0dXMgZXhpdFN0YXR1cyA9IFBST0dfRVhJVF9GQVRBTDsKKworICB2ZXJpZmljYXRpb25UYWJsZVBhdGggPSBOVUxMOworICB2ZXJpZmljYXRpb25UYWJsZVN0cmVhbSA9IE5VTEw7CisgIHByb2Nlc3NJbnB1dENoYXJhY3RlcnMgPSB3cml0ZUNvbnRyYWN0ZWRCcmFpbGxlOworCisgIHJlc2V0UHJlZmVyZW5jZXMoKTsKKyAgcHJlZnMuZXhwYW5kQ3VycmVudFdvcmQgPSAwOworCisgIHsKKyAgICBjb25zdCBDb21tYW5kTGluZURlc2NyaXB0b3IgZGVzY3JpcHRvciA9IHsKKyAgICAgIC5vcHRpb25zID0gJnByb2dyYW1PcHRpb25zLAorICAgICAgLmFwcGxpY2F0aW9uTmFtZSA9ICJicmx0dHktY3RiIiwKKworICAgICAgLnVzYWdlID0geworICAgICAgICAucHVycG9zZSA9IHN0cnRleHQoIkNoZWNrL3ZhbGlkYXRlIGEgY29udHJhY3Rpb24gKGxpdGVyYXJ5IGJyYWlsbGUpIHRhYmxlLCBvciB0cmFuc2xhdGUgdGV4dCBpbnRvIGNvbnRyYWN0ZWQgYnJhaWxsZS4iKSwKKyAgICAgICAgLnBhcmFtZXRlcnMgPSAiW3tpbnB1dC1maWxlIHwgLX0gLi4uXSIsCisgICAgICB9CisgICAgfTsKKworICAgIFBST0NFU1NfT1BUSU9OUyhkZXNjcmlwdG9yLCBhcmdjLCBhcmd2KTsKKyAgfQorCisgIGlucHV0QnVmZmVyID0gTlVMTDsKKyAgaW5wdXRTaXplID0gMDsKKyAgaW5wdXRMZW5ndGggPSAwOworCisgIG91dHB1dFN0cmVhbSA9IHN0ZG91dDsKKyAgb3V0cHV0QnVmZmVyID0gTlVMTDsKKworICBpZiAoKG91dHB1dEV4dGVuZCA9ICEqb3B0X291dHB1dFdpZHRoKSkgeworICAgIG91dHB1dFdpZHRoID0gMFg4MDsKKyAgfSBlbHNlIHsKKyAgICBzdGF0aWMgY29uc3QgaW50IG1pbmltdW0gPSAxOworCisgICAgaWYgKCF2YWxpZGF0ZUludGVnZXIoJm91dHB1dFdpZHRoLCBvcHRfb3V0cHV0V2lkdGgsICZtaW5pbXVtLCBOVUxMKSkgeworICAgICAgbG9nTWVzc2FnZShMT0dfRVJSLCAiJXM6ICVzIiwgImludmFsaWQgb3V0cHV0IHdpZHRoIiwgb3B0X291dHB1dFdpZHRoKTsKKyAgICAgIHJldHVybiBQUk9HX0VYSVRfU1lOVEFYOworICAgIH0KKyAgfQorCisgIHsKKyAgICBjaGFyICpjb250cmFjdGlvblRhYmxlUGF0aDsKKworICAgIGlmICgoY29udHJhY3Rpb25UYWJsZVBhdGggPSBtYWtlQ29udHJhY3Rpb25UYWJsZVBhdGgob3B0X3RhYmxlc0RpcmVjdG9yeSwgb3B0X2NvbnRyYWN0aW9uVGFibGUpKSkgeworICAgICAgaWYgKChjb250cmFjdGlvblRhYmxlID0gY29tcGlsZUNvbnRyYWN0aW9uVGFibGUoY29udHJhY3Rpb25UYWJsZVBhdGgpKSkgeworICAgICAgICBpZiAoKm9wdF90ZXh0VGFibGUpIHsKKyAgICAgICAgICBwdXRDZWxsID0gcHV0VGV4dENlbGw7CisgICAgICAgICAgY2hhciAqdGV4dFRhYmxlUGF0aDsKKworICAgICAgICAgIGlmICgodGV4dFRhYmxlUGF0aCA9IG1ha2VUZXh0VGFibGVQYXRoKG9wdF90YWJsZXNEaXJlY3RvcnksIG9wdF90ZXh0VGFibGUpKSkgeworICAgICAgICAgICAgdGV4dFRhYmxlID0gY29tcGlsZVRleHRUYWJsZSh0ZXh0VGFibGVQYXRoKTsKKyAgICAgICAgICAgIGV4aXRTdGF0dXMgPSB0ZXh0VGFibGU/IFBST0dfRVhJVF9TVUNDRVNTOiBQUk9HX0VYSVRfRkFUQUw7CisgICAgICAgICAgICBmcmVlKHRleHRUYWJsZVBhdGgpOworICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBleGl0U3RhdHVzID0gUFJPR19FWElUX0ZBVEFMOworICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICBwdXRDZWxsID0gcHV0QnJhaWxsZUNlbGw7CisgICAgICAgICAgdGV4dFRhYmxlID0gTlVMTDsKKyAgICAgICAgICBleGl0U3RhdHVzID0gUFJPR19FWElUX1NVQ0NFU1M7CisgICAgICAgIH0KKworICAgICAgICBpZiAoZXhpdFN0YXR1cyA9PSBQUk9HX0VYSVRfU1VDQ0VTUykgeworICAgICAgICAgIGlmIChvcHRfdmVyaWZpY2F0aW9uVGFibGUgJiYgKm9wdF92ZXJpZmljYXRpb25UYWJsZSkgeworICAgICAgICAgICAgaWYgKCh2ZXJpZmljYXRpb25UYWJsZVBhdGggPSBtYWtlRmlsZVBhdGgoTlVMTCwgb3B0X3ZlcmlmaWNhdGlvblRhYmxlLCBWRVJJRklDQVRJT05fVEFCTEVfRVhURU5TSU9OKSkpIHsKKyAgICAgICAgICAgICAgY29uc3QgY2hhciAqdmVyaWZpY2F0aW9uVGFibGVNb2RlID0gKGFyZ2MgPiAwKT8gInciOiAiciI7CisKKyAgICAgICAgICAgICAgaWYgKCh2ZXJpZmljYXRpb25UYWJsZVN0cmVhbSA9IG9wZW5EYXRhRmlsZSh2ZXJpZmljYXRpb25UYWJsZVBhdGgsIHZlcmlmaWNhdGlvblRhYmxlTW9kZSwgMCkpKSB7CisgICAgICAgICAgICAgICAgcHJvY2Vzc0lucHV0Q2hhcmFjdGVycyA9IHdyaXRlVmVyaWZpY2F0aW9uVGFibGVMaW5lOworICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGV4aXRTdGF0dXMgPSBQUk9HX0VYSVRfRkFUQUw7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgIGV4aXRTdGF0dXMgPSBQUk9HX0VYSVRfRkFUQUw7CisgICAgICAgICAgICB9CisgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYgKGV4aXRTdGF0dXMgPT0gUFJPR19FWElUX1NVQ0NFU1MpIHsKKyAgICAgICAgICBpZiAodmVyaWZpY2F0aW9uVGFibGVTdHJlYW0gJiYgIWFyZ2MpIHsKKyAgICAgICAgICAgIGV4aXRTdGF0dXMgPSBwcm9jZXNzVmVyaWZpY2F0aW9uVGFibGUoKTsKKyAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgTGluZVByb2Nlc3NpbmdEYXRhIGxwZCA9IHsKKyAgICAgICAgICAgICAgLmV4aXRTdGF0dXMgPSBQUk9HX0VYSVRfU1VDQ0VTUworICAgICAgICAgICAgfTsKKworICAgICAgICAgICAgY29uc3QgSW5wdXRGaWxlc1Byb2Nlc3NpbmdQYXJhbWV0ZXJzIHBhcmFtZXRlcnMgPSB7CisgICAgICAgICAgICAgIC5kYXRhRmlsZVBhcmFtZXRlcnMgPSB7CisgICAgICAgICAgICAgICAgLm9wdGlvbnMgPSBERk9fTk9fQ09NTUVOVFMsCisgICAgICAgICAgICAgICAgLnByb2Nlc3NPcGVyYW5kcyA9IHByb2Nlc3NJbnB1dExpbmUsCisgICAgICAgICAgICAgICAgLmRhdGEgPSAmbHBkCisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH07CisKKyAgICAgICAgICAgIGlmICgoZXhpdFN0YXR1cyA9IHByb2Nlc3NJbnB1dEZpbGVzKGFyZ3YsIGFyZ2MsICZwYXJhbWV0ZXJzKSkgPT0gUFJPR19FWElUX1NVQ0NFU1MpIHsKKyAgICAgICAgICAgICAgaWYgKCEoZmx1c2hDaGFyYWN0ZXJzKCdcbicsICZscGQpICYmIGZsdXNoT3V0cHV0U3RyZWFtKCZscGQpKSkgeworICAgICAgICAgICAgICAgIGV4aXRTdGF0dXMgPSBscGQuZXhpdFN0YXR1czsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgIH0KKworICAgICAgICAgIGlmICh0ZXh0VGFibGUpIGRlc3Ryb3lUZXh0VGFibGUodGV4dFRhYmxlKTsKKyAgICAgICAgfQorCisgICAgICAgIGRlc3Ryb3lDb250cmFjdGlvblRhYmxlKGNvbnRyYWN0aW9uVGFibGUpOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgZXhpdFN0YXR1cyA9IFBST0dfRVhJVF9GQVRBTDsKKyAgICAgIH0KKworICAgICAgZnJlZShjb250cmFjdGlvblRhYmxlUGF0aCk7CisgICAgfQorICB9CisKKyAgaWYgKHZlcmlmaWNhdGlvblRhYmxlU3RyZWFtKSB7CisgICAgaWYgKGZjbG9zZSh2ZXJpZmljYXRpb25UYWJsZVN0cmVhbSkgPT0gRU9GKSB7CisgICAgICBleGl0U3RhdHVzID0gUFJPR19FWElUX0ZBVEFMOworICAgIH0KKworICAgIHZlcmlmaWNhdGlvblRhYmxlU3RyZWFtID0gTlVMTDsKKyAgfQorCisgIGlmICh2ZXJpZmljYXRpb25UYWJsZVBhdGgpIHsKKyAgICBmcmVlKHZlcmlmaWNhdGlvblRhYmxlUGF0aCk7CisgICAgdmVyaWZpY2F0aW9uVGFibGVQYXRoID0gTlVMTDsKKyAgfQorCisgIGlmIChvdXRwdXRCdWZmZXIpIGZyZWUob3V0cHV0QnVmZmVyKTsKKyAgaWYgKGlucHV0QnVmZmVyKSBmcmVlKGlucHV0QnVmZmVyKTsKKyAgcmV0dXJuIGV4aXRTdGF0dXM7Cit9CmRpZmYgLS1naXQgYS9Qcm9ncmFtcy9icmx0dHktaGlkLmMgYi9Qcm9ncmFtcy9icmx0dHktaGlkLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDI0MmFlYgotLS0gL2Rldi9udWxsCisrKyBiL1Byb2dyYW1zL2JybHR0eS1oaWQuYwpAQCAtMCwwICsxLDExMDEgQEAKKy8qCisgKiBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorICogICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorICoKKyAqIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorICoKKyAqIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyAqLworCisjaW5jbHVkZSAicHJvbG9ndWUuaCIKKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkYXJnLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKworI2luY2x1ZGUgInByb2dyYW0uaCIKKyNpbmNsdWRlICJjbWRsaW5lLmgiCisjaW5jbHVkZSAibG9nLmgiCisjaW5jbHVkZSAic3RyZm10LmgiCisjaW5jbHVkZSAicGFyc2UuaCIKKyNpbmNsdWRlICJpb19oaWQuaCIKKyNpbmNsdWRlICJoaWRfaXRlbXMuaCIKKyNpbmNsdWRlICJoaWRfaW5zcGVjdC5oIgorCitzdGF0aWMgaW50IG9wdF9tYXRjaFVTQkRldmljZXM7CitzdGF0aWMgaW50IG9wdF9tYXRjaEJsdWV0b290aERldmljZXM7CisKK3N0YXRpYyBjaGFyICpvcHRfbWF0Y2hWZW5kb3JJZGVudGlmaWVyOworc3RhdGljIGNoYXIgKm9wdF9tYXRjaFByb2R1Y3RJZGVudGlmaWVyOworCitzdGF0aWMgY2hhciAqb3B0X21hdGNoTWFudWZhY3R1cmVyTmFtZTsKK3N0YXRpYyBjaGFyICpvcHRfbWF0Y2hQcm9kdWN0RGVzY3JpcHRpb247CitzdGF0aWMgY2hhciAqb3B0X21hdGNoU2VyaWFsTnVtYmVyOworCitzdGF0aWMgY2hhciAqb3B0X21hdGNoRGV2aWNlQWRkcmVzczsKK3N0YXRpYyBjaGFyICpvcHRfbWF0Y2hEZXZpY2VOYW1lOworCitzdGF0aWMgaW50IG9wdF9zaG93RGV2aWNlSWRlbnRpZmllcnM7CitzdGF0aWMgaW50IG9wdF9zaG93RGV2aWNlQWRkcmVzczsKK3N0YXRpYyBpbnQgb3B0X3Nob3dEZXZpY2VOYW1lOworc3RhdGljIGludCBvcHRfc2hvd0hvc3RQYXRoOworc3RhdGljIGludCBvcHRfc2hvd0hvc3REZXZpY2U7CisKK3N0YXRpYyBpbnQgb3B0X2xpc3RJdGVtczsKK3N0YXRpYyBpbnQgb3B0X2xpc3RSZXBvcnRzOworCitzdGF0aWMgY2hhciAqb3B0X3JlYWRSZXBvcnQ7CitzdGF0aWMgY2hhciAqb3B0X3JlYWRGZWF0dXJlOworCitzdGF0aWMgY2hhciAqb3B0X3dyaXRlUmVwb3J0Oworc3RhdGljIGNoYXIgKm9wdF93cml0ZUZlYXR1cmU7CisKK3N0YXRpYyBpbnQgb3B0X2VjaG9JbnB1dDsKK3N0YXRpYyBjaGFyICpvcHRfaW5wdXRUaW1lb3V0OworCitCRUdJTl9PUFRJT05fVEFCTEUocHJvZ3JhbU9wdGlvbnMpCisgIHsgLndvcmQgPSAibWF0Y2gtdXNiLWRldmljZXMiLAorICAgIC5sZXR0ZXIgPSAndScsCisgICAgLnNldHRpbmcuZmxhZyA9ICZvcHRfbWF0Y2hVU0JEZXZpY2VzLAorICAgIC5kZXNjcmlwdGlvbiA9IHN0cnRleHQoIkZpbHRlciBmb3IgYSBVU0IgZGV2aWNlICh0aGUgZGVmYXVsdCBpZiBub3QgYW1iaWd1b3VzKS4iKQorICB9LAorCisgIHsgLndvcmQgPSAibWF0Y2gtYmx1ZXRvb3RoLWRldmljZXMiLAorICAgIC5sZXR0ZXIgPSAnYicsCisgICAgLnNldHRpbmcuZmxhZyA9ICZvcHRfbWF0Y2hCbHVldG9vdGhEZXZpY2VzLAorICAgIC5kZXNjcmlwdGlvbiA9IHN0cnRleHQoIkZpbHRlciBmb3IgYSBCbHVldG9vdGggZGV2aWNlLiIpCisgIH0sCisKKyAgeyAud29yZCA9ICJtYXRjaC12ZW5kb3ItaWRlbnRpZmllciIsCisgICAgLmxldHRlciA9ICd2JywKKyAgICAuYXJndW1lbnQgPSBzdHJ0ZXh0KCJpZGVudGlmaWVyIiksCisgICAgLnNldHRpbmcuc3RyaW5nID0gJm9wdF9tYXRjaFZlbmRvcklkZW50aWZpZXIsCisgICAgLmRlc2NyaXB0aW9uID0gc3RydGV4dCgiTWF0Y2ggdGhlIHZlbmRvciBpZGVudGlmaWVyIChmb3VyIGhleGFkZWNpbWFsIGRpZ2l0cykuIikKKyAgfSwKKworICB7IC53b3JkID0gIm1hdGNoLXByb2R1Y3QtaWRlbnRpZmllciIsCisgICAgLmxldHRlciA9ICdwJywKKyAgICAuYXJndW1lbnQgPSBzdHJ0ZXh0KCJpZGVudGlmaWVyIiksCisgICAgLnNldHRpbmcuc3RyaW5nID0gJm9wdF9tYXRjaFByb2R1Y3RJZGVudGlmaWVyLAorICAgIC5kZXNjcmlwdGlvbiA9IHN0cnRleHQoIk1hdGNoIHRoZSBwcm9kdWN0IGlkZW50aWZpZXIgKGZvdXIgaGV4YWRlY2ltYWwgZGlnaXRzKS4iKQorICB9LAorCisgIHsgLndvcmQgPSAibWF0Y2gtbWFudWZhY3R1cmVyLW5hbWUiLAorICAgIC5sZXR0ZXIgPSAnbScsCisgICAgLmFyZ3VtZW50ID0gc3RydGV4dCgic3RyaW5nIiksCisgICAgLnNldHRpbmcuc3RyaW5nID0gJm9wdF9tYXRjaE1hbnVmYWN0dXJlck5hbWUsCisgICAgLmRlc2NyaXB0aW9uID0gc3RydGV4dCgiTWF0Y2ggdGhlIHN0YXJ0IG9mIHRoZSBtYW51ZmFjdHVyZXIgbmFtZSAoVVNCIG9ubHkpLiIpCisgIH0sCisKKyAgeyAud29yZCA9ICJtYXRjaC1wcm9kdWN0LWRlc2NyaXB0aW9uIiwKKyAgICAubGV0dGVyID0gJ2QnLAorICAgIC5hcmd1bWVudCA9IHN0cnRleHQoInN0cmluZyIpLAorICAgIC5zZXR0aW5nLnN0cmluZyA9ICZvcHRfbWF0Y2hQcm9kdWN0RGVzY3JpcHRpb24sCisgICAgLmRlc2NyaXB0aW9uID0gc3RydGV4dCgiTWF0Y2ggdGhlIHN0YXJ0IG9mIHRoZSBwcm9kdWN0IGRlc2NyaXB0aW9uIChVU0Igb25seSkuIikKKyAgfSwKKworICB7IC53b3JkID0gIm1hdGNoLXNlcmlhbC1udW1iZXIiLAorICAgIC5sZXR0ZXIgPSAncycsCisgICAgLmFyZ3VtZW50ID0gc3RydGV4dCgic3RyaW5nIiksCisgICAgLnNldHRpbmcuc3RyaW5nID0gJm9wdF9tYXRjaFNlcmlhbE51bWJlciwKKyAgICAuZGVzY3JpcHRpb24gPSBzdHJ0ZXh0KCJNYXRjaCB0aGUgc3RhcnQgb2YgdGhlIHNlcmlhbCBudW1iZXIgKFVTQiBvbmx5KS4iKQorICB9LAorCisgIHsgLndvcmQgPSAibWF0Y2gtZGV2aWNlLWFkZHJlc3MiLAorICAgIC5sZXR0ZXIgPSAnYScsCisgICAgLmFyZ3VtZW50ID0gc3RydGV4dCgib2N0ZXRzIiksCisgICAgLnNldHRpbmcuc3RyaW5nID0gJm9wdF9tYXRjaERldmljZUFkZHJlc3MsCisgICAgLmRlc2NyaXB0aW9uID0gc3RydGV4dCgiTWF0Y2ggdGhlIGZ1bGwgZGV2aWNlIGFkZHJlc3MgKEJsdWV0b290aCBvbmx5IC0gYWxsIHNpeCB0d28tZGlnaXQsIGhleGFkZWNpbWFsIG9jdGV0cyBzZXBhcmF0ZWQgYnkgYSBjb2xvbiBbOl0pLiIpCisgIH0sCisKKyAgeyAud29yZCA9ICJtYXRjaC1kZXZpY2UtbmFtZSIsCisgICAgLmxldHRlciA9ICduJywKKyAgICAuYXJndW1lbnQgPSBzdHJ0ZXh0KCJzdHJpbmciKSwKKyAgICAuc2V0dGluZy5zdHJpbmcgPSAmb3B0X21hdGNoRGV2aWNlTmFtZSwKKyAgICAuZGVzY3JpcHRpb24gPSBzdHJ0ZXh0KCJNYXRjaCB0aGUgc3RhcnQgb2YgdGhlIGRldmljZSBuYW1lIChCbHVldG9vdGggb25seSkuIikKKyAgfSwKKworICB7IC53b3JkID0gInNob3ctZGV2aWNlLWlkZW50aWZpZXJzIiwKKyAgICAubGV0dGVyID0gJ0knLAorICAgIC5zZXR0aW5nLmZsYWcgPSAmb3B0X3Nob3dEZXZpY2VJZGVudGlmaWVycywKKyAgICAuZGVzY3JpcHRpb24gPSBzdHJ0ZXh0KCJTaG93IHRoZSB2ZW5kb3IgYW5kIHByb2R1Y3QgaWRlbnRpZmllcnMuIikKKyAgfSwKKworICB7IC53b3JkID0gInNob3ctZGV2aWNlLWFkZHJlc3MiLAorICAgIC5sZXR0ZXIgPSAnQScsCisgICAgLnNldHRpbmcuZmxhZyA9ICZvcHRfc2hvd0RldmljZUFkZHJlc3MsCisgICAgLmRlc2NyaXB0aW9uID0gc3RydGV4dCgiU2hvdyB0aGUgZGV2aWNlIGFkZHJlc3MgKFVTQiBzZXJpYWwgbnVtYmVyLCBCbHVldG9vdGggZGV2aWNlIGFkZHJlc3MsIGV0YykuIikKKyAgfSwKKworICB7IC53b3JkID0gInNob3ctZGV2aWNlLW5hbWUiLAorICAgIC5sZXR0ZXIgPSAnTicsCisgICAgLnNldHRpbmcuZmxhZyA9ICZvcHRfc2hvd0RldmljZU5hbWUsCisgICAgLmRlc2NyaXB0aW9uID0gc3RydGV4dCgiU2hvdyB0aGUgZGV2aWNlIG5hbWUgKFVTQiBtYW51ZmFjdHVyZXIgYW5kL29yIHByb2R1Y3Qgc3RyaW5ncywgQmx1ZXRvb3RoIGRldmljZSBuYW1lLCBldGMpLiIpCisgIH0sCisKKyAgeyAud29yZCA9ICJzaG93LWhvc3QtcGF0aCIsCisgICAgLmxldHRlciA9ICdQJywKKyAgICAuc2V0dGluZy5mbGFnID0gJm9wdF9zaG93SG9zdFBhdGgsCisgICAgLmRlc2NyaXB0aW9uID0gc3RydGV4dCgiU2hvdyB0aGUgaG9zdCBwYXRoIChVU0IgdG9wb2xvZ3ksIEJsdWV0b290aCBob3N0IGNvbnRyb2xsZXIgYWRkcmVzcywgZXRjKS4iKQorICB9LAorCisgIHsgLndvcmQgPSAic2hvdy1ob3N0LWRldmljZSIsCisgICAgLmxldHRlciA9ICdEJywKKyAgICAuc2V0dGluZy5mbGFnID0gJm9wdF9zaG93SG9zdERldmljZSwKKyAgICAuZGVzY3JpcHRpb24gPSBzdHJ0ZXh0KCJTaG93IHRoZSBob3N0IGRldmljZSAodXN1YWxseSBpdHMgYWJzb2x1dGUgcGF0aCkuIikKKyAgfSwKKworICB7IC53b3JkID0gImxpc3QtaXRlbXMiLAorICAgIC5sZXR0ZXIgPSAnbCcsCisgICAgLnNldHRpbmcuZmxhZyA9ICZvcHRfbGlzdEl0ZW1zLAorICAgIC5kZXNjcmlwdGlvbiA9IHN0cnRleHQoIkxpc3QgdGhlIEhJRCByZXBvcnQgZGVzY3JpcHRvcidzIGl0ZW1zLiIpCisgIH0sCisKKyAgeyAud29yZCA9ICJsaXN0LXJlcG9ydHMiLAorICAgIC5sZXR0ZXIgPSAnTCcsCisgICAgLnNldHRpbmcuZmxhZyA9ICZvcHRfbGlzdFJlcG9ydHMsCisgICAgLmRlc2NyaXB0aW9uID0gc3RydGV4dCgiTGlzdCBlYWNoIHJlcG9ydCdzIGlkZW50aWZpZXIgYW5kIHNpemVzLiIpCisgIH0sCisKKyAgeyAud29yZCA9ICJyZWFkLXJlcG9ydCIsCisgICAgLmxldHRlciA9ICdyJywKKyAgICAuYXJndW1lbnQgPSBzdHJ0ZXh0KCJpZGVudGlmaWVyIiksCisgICAgLnNldHRpbmcuc3RyaW5nID0gJm9wdF9yZWFkUmVwb3J0LAorICAgIC5kZXNjcmlwdGlvbiA9IHN0cnRleHQoIlJlYWQgKGdldCkgYW4gaW5wdXQgcmVwb3J0ICh0d28gaGV4YWRlY2ltYWwgZGlnaXRzKS4iKQorICB9LAorCisgIHsgLndvcmQgPSAicmVhZC1mZWF0dXJlIiwKKyAgICAubGV0dGVyID0gJ1InLAorICAgIC5hcmd1bWVudCA9IHN0cnRleHQoImlkZW50aWZpZXIiKSwKKyAgICAuc2V0dGluZy5zdHJpbmcgPSAmb3B0X3JlYWRGZWF0dXJlLAorICAgIC5kZXNjcmlwdGlvbiA9IHN0cnRleHQoIlJlYWQgKGdldCkgYSBmZWF0dXJlIHJlcG9ydCAodHdvIGhleGFkZWNpbWFsIGRpZ2l0cykuIikKKyAgfSwKKworICB7IC53b3JkID0gIndyaXRlLXJlcG9ydCIsCisgICAgLmxldHRlciA9ICd3JywKKyAgICAuYXJndW1lbnQgPSBzdHJ0ZXh0KCJieXRlcyIpLAorICAgIC5zZXR0aW5nLnN0cmluZyA9ICZvcHRfd3JpdGVSZXBvcnQsCisgICAgLmRlc2NyaXB0aW9uID0gc3RydGV4dCgiV3JpdGUgKHNldCkgYW4gb3V0cHV0IHJlcG9ydCAoc2VlIGJlbG93KS4iKSwKKyAgfSwKKworICB7IC53b3JkID0gIndyaXRlLWZlYXR1cmUiLAorICAgIC5sZXR0ZXIgPSAnVycsCisgICAgLmFyZ3VtZW50ID0gc3RydGV4dCgiYnl0ZXMiKSwKKyAgICAuc2V0dGluZy5zdHJpbmcgPSAmb3B0X3dyaXRlRmVhdHVyZSwKKyAgICAuZGVzY3JpcHRpb24gPSBzdHJ0ZXh0KCJXcml0ZSAoc2V0KSBhIGZlYXR1cmUgcmVwb3J0IChzZWUgYmVsb3cpLiIpLAorICB9LAorCisgIHsgLndvcmQgPSAiZWNoby1pbnB1dCIsCisgICAgLmxldHRlciA9ICdlJywKKyAgICAuc2V0dGluZy5mbGFnID0gJm9wdF9lY2hvSW5wdXQsCisgICAgLmRlc2NyaXB0aW9uID0gc3RydGV4dCgiRWNobyAoaW4gaGV4YWRlY2ltYWwpIGlucHV0IHJlY2VpdmVkIGZyb20gdGhlIGRldmljZS4iKQorICB9LAorCisgIHsgLndvcmQgPSAiaW5wdXQtdGltZW91dCIsCisgICAgLmxldHRlciA9ICd0JywKKyAgICAuYXJndW1lbnQgPSBzdHJ0ZXh0KCJpbnRlZ2VyIiksCisgICAgLnNldHRpbmcuc3RyaW5nID0gJm9wdF9pbnB1dFRpbWVvdXQsCisgICAgLmRlc2NyaXB0aW9uID0gc3RydGV4dCgiVGhlIGlucHV0IHRpbWVvdXQgKGluIHNlY29uZHMpLiIpCisgIH0sCitFTkRfT1BUSU9OX1RBQkxFKHByb2dyYW1PcHRpb25zKQorCitzdGF0aWMKK0JFR0lOX1VTQUdFX05PVEVTKHVzYWdlTm90ZXMpCisgICJXaGVuIHdyaXRpbmcgYSByZXBvcnQgb3IgZmVhdHVyZSwgdGhlIGJ5dGVzIGRvbid0IG5lZWQgdG8gYmUsIGJ1dCBjYW4gYmUsIHNlcGFyYXRlZCBmcm9tIG9uZSBhbm90aGVyIGJ5IHdoaXRlc3BhY2UuIiwKKyAgIkVhY2ggYnl0ZSBpcyBlaXRoZXIgdHdvIGhleGFkZWNpbWFsIGRpZ2l0cyBvciB6ZXJvIG9yIG1vcmUgYnJhaWxsZSBkb3QgbnVtYmVycyB3aXRoaW4gW3NxdWFyZSBicmFja2V0c10uIiwKKyAgIkEgYnl0ZSBtYXkgb3B0aW9uYWxseSBiZSBmb2xsb3dlZCBieSBhbiBhc3RlcmlzayBbKl0gYW5kIGEgZGVjaW1hbCBjb3VudCAtIGlmIG5vdCBzcGVjaWZpZWQsIDEgaXMgYXNzdW1lZC4iLAorICAiVGhlIGZpcnN0IGJ5dGUgaXMgdGhlIHJlcG9ydCBudW1iZXIgLSBzcGVjaWZ5IDAwIGZvciBubyByZXBvcnQgbnVtYmVyLiIsCitFTkRfVVNBR0VfTk9URVMKKworc3RhdGljIEZJTEUgKm91dHB1dFN0cmVhbTsKK3N0YXRpYyBpbnQgb3V0cHV0RXJyb3I7CisKK3N0YXRpYyBpbnQKK2NhbldyaXRlT3V0cHV0ICh2b2lkKSB7CisgIGlmIChvdXRwdXRFcnJvcikgcmV0dXJuIDA7CisgIGlmICghZmVycm9yKG91dHB1dFN0cmVhbSkpIHJldHVybiAxOworCisgIG91dHB1dEVycm9yID0gZXJybm87CisgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50IHdyaXRlQnl0ZXNMaW5lICgKKyAgY29uc3QgY2hhciAqZm9ybWF0LAorICBjb25zdCB1bnNpZ25lZCBjaGFyICpmcm9tLCBzaXplX3QgY291bnQsCisgIC4uLgorKSBQUklOVEYoMSwgNCk7CisKK3N0YXRpYyBpbnQKK3dyaXRlQnl0ZXNMaW5lIChjb25zdCBjaGFyICpmb3JtYXQsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmZyb20sIHNpemVfdCBjb3VudCwgLi4uKSB7CisgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnRvID0gZnJvbSArIGNvdW50OworCisgIGNoYXIgYnl0ZXNbKGNvdW50ICogMykgKyAxXTsKKyAgU1RSX0JFR0lOKGJ5dGVzLCBzaXplb2YoYnl0ZXMpKTsKKworICB3aGlsZSAoZnJvbSA8IHRvKSB7CisgICAgU1RSX1BSSU5URigiICUwMlgiLCAqZnJvbSsrKTsKKyAgfQorICBTVFJfRU5EOworCisgIGNoYXIgbGFiZWxbMFgxMDBdOworICB7CisgICAgdmFfbGlzdCBhcmd1bWVudHM7CisgICAgdmFfc3RhcnQoYXJndW1lbnRzLCBjb3VudCk7CisgICAgdnNucHJpbnRmKGxhYmVsLCBzaXplb2YobGFiZWwpLCBmb3JtYXQsIGFyZ3VtZW50cyk7CisgICAgdmFfZW5kKGFyZ3VtZW50cyk7CisgIH0KKworICBmcHJpbnRmKG91dHB1dFN0cmVhbSwgIiVzOiVzXG4iLCBsYWJlbCwgYnl0ZXMpOworICBpZiAoIWNhbldyaXRlT3V0cHV0KCkpIHJldHVybiAwOworCisgIGZmbHVzaChvdXRwdXRTdHJlYW0pOworICByZXR1cm4gY2FuV3JpdGVPdXRwdXQoKTsKK30KKworc3RhdGljIGludAorb3BlbkRldmljZSAoSGlkRGV2aWNlICoqZGV2aWNlKSB7CisgIEhpZEZpbHRlciBmaWx0ZXIgPSB7CisgICAgLnVzYiA9IHsKKyAgICAgIC5tYW51ZmFjdHVyZXJOYW1lID0gb3B0X21hdGNoTWFudWZhY3R1cmVyTmFtZSwKKyAgICAgIC5wcm9kdWN0RGVzY3JpcHRpb24gPSBvcHRfbWF0Y2hQcm9kdWN0RGVzY3JpcHRpb24sCisgICAgICAuc2VyaWFsTnVtYmVyID0gb3B0X21hdGNoU2VyaWFsTnVtYmVyLAorICAgIH0sCisKKyAgICAuYmx1ZXRvb3RoID0geworICAgICAgLm1hY0FkZHJlc3MgPSBvcHRfbWF0Y2hEZXZpY2VBZGRyZXNzLAorICAgICAgLmRldmljZU5hbWUgPSBvcHRfbWF0Y2hEZXZpY2VOYW1lLAorICAgIH0sCisKKyAgICAuZmxhZ3MgPSB7CisgICAgICAud2FudFVTQiA9IG9wdF9tYXRjaFVTQkRldmljZXMsCisgICAgICAud2FudEJsdWV0b290aCA9IG9wdF9tYXRjaEJsdWV0b290aERldmljZXMsCisgICAgfSwKKyAgfTsKKworICBpbnQgb2sgPSBoaWRTZXRGaWx0ZXJJZGVudGlmaWVycygKKyAgICAmZmlsdGVyLCBvcHRfbWF0Y2hWZW5kb3JJZGVudGlmaWVyLCBvcHRfbWF0Y2hQcm9kdWN0SWRlbnRpZmllcgorICApOworCisgIGlmICghb2spIHJldHVybiAwOworICByZXR1cm4gaGlkT3BlbkRldmljZVdpdGhGaWx0ZXIoZGV2aWNlLCAmZmlsdGVyKTsKK30KKworc3RhdGljIGNvbnN0IEhpZEl0ZW1zRGVzY3JpcHRvciAqCitnZXRJdGVtcyAoSGlkRGV2aWNlICpkZXZpY2UpIHsKKyAgY29uc3QgSGlkSXRlbXNEZXNjcmlwdG9yICppdGVtcyA9IGhpZEdldEl0ZW1zKGRldmljZSk7CisgIGlmICghaXRlbXMpIGxvZ01lc3NhZ2UoTE9HX0VSUiwgIkhJRCBpdGVtcyBub3QgYXZhaWxhYmxlIik7CisgIHJldHVybiBpdGVtczsKK30KKworc3RhdGljIGludAorZ2V0UmVwb3J0U2l6ZSAoSGlkRGV2aWNlICpkZXZpY2UsIEhpZFJlcG9ydElkZW50aWZpZXIgaWRlbnRpZmllciwgSGlkUmVwb3J0U2l6ZSAqc2l6ZSkgeworICBjb25zdCBIaWRJdGVtc0Rlc2NyaXB0b3IgKml0ZW1zID0gZ2V0SXRlbXMoZGV2aWNlKTsKKyAgaWYgKCFpdGVtcykgcmV0dXJuIDA7CisgIHJldHVybiBoaWRSZXBvcnRTaXplKGl0ZW1zLCBpZGVudGlmaWVyLCBzaXplKTsKK30KKworc3RhdGljIHZvaWQKK2xvZ1VuZXhwZWN0ZWRMZW5ndGggKAorICBjb25zdCBjaGFyICp3aGF0LCBIaWRSZXBvcnRJZGVudGlmaWVyIGlkZW50aWZpZXIsCisgIHNpemVfdCBleHBlY3RlZCwgc2l6ZV90IGFjdHVhbAorKSB7CisgIGxvZ01lc3NhZ2UoTE9HX1dBUk5JTkcsCisgICAgInVuZXhwZWN0ZWQgJXMgbGVuZ3RoOiAlMDJYOiIKKyAgICAiIEV4cGVjdGVkOiUiUFJJc2l6ZSAiIEFjdHVhbDolIlBSSXNpemUsCisgICAgd2hhdCwgaWRlbnRpZmllciwgZXhwZWN0ZWQsIGFjdHVhbAorICApOworfQorCitzdGF0aWMgaW50CitwZXJmb3JtU2hvd0RldmljZUlkZW50aWZpZXJzIChIaWREZXZpY2UgKmRldmljZSkgeworICBIaWREZXZpY2VJZGVudGlmaWVyIHZlbmRvcjsKKyAgSGlkRGV2aWNlSWRlbnRpZmllciBwcm9kdWN0OworCisgIGlmICghaGlkR2V0RGV2aWNlSWRlbnRpZmllcnMoZGV2aWNlLCAmdmVuZG9yLCAmcHJvZHVjdCkpIHsKKyAgICBsb2dNZXNzYWdlKExPR19XQVJOSU5HLCAidmVuZG9yL3Byb2R1Y3QgaWRlbnRpZmllcnMgbm90IGF2YWlsYWJsZSIpOworICAgIHJldHVybiAwOworICB9CisKKyAgZnByaW50ZihvdXRwdXRTdHJlYW0sCisgICAgIkRldmljZSBJZGVudGlmaWVyczogJTA0WDolMDRYXG4iLAorICAgIHZlbmRvciwgcHJvZHVjdAorICApOworCisgIHJldHVybiAxOworfQorCitzdGF0aWMgaW50CitwZXJmb3JtU2hvd0RldmljZUFkZHJlc3MgKEhpZERldmljZSAqZGV2aWNlKSB7CisgIGNvbnN0IGNoYXIgKmFkZHJlc3MgPSBoaWRHZXREZXZpY2VBZGRyZXNzKGRldmljZSk7CisKKyAgaWYgKCFhZGRyZXNzKSB7CisgICAgbG9nTWVzc2FnZShMT0dfV0FSTklORywgImRldmljZSBhZGRyZXNzIG5vdCBhdmFpbGFibGUiKTsKKyAgICByZXR1cm4gMDsKKyAgfQorCisgIGZwcmludGYob3V0cHV0U3RyZWFtLCAiRGV2aWNlIEFkZHJlc3M6ICVzXG4iLCBhZGRyZXNzKTsKKyAgcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQKK3BlcmZvcm1TaG93RGV2aWNlTmFtZSAoSGlkRGV2aWNlICpkZXZpY2UpIHsKKyAgY29uc3QgY2hhciAqbmFtZSA9IGhpZEdldERldmljZU5hbWUoZGV2aWNlKTsKKworICBpZiAoIW5hbWUpIHsKKyAgICBsb2dNZXNzYWdlKExPR19XQVJOSU5HLCAiZGV2aWNlIG5hbWUgbm90IGF2YWlsYWJsZSIpOworICAgIHJldHVybiAwOworICB9CisKKyAgZnByaW50ZihvdXRwdXRTdHJlYW0sICJEZXZpY2UgTmFtZTogJXNcbiIsIG5hbWUpOworICByZXR1cm4gMTsKK30KKworc3RhdGljIGludAorcGVyZm9ybVNob3dIb3N0UGF0aCAoSGlkRGV2aWNlICpkZXZpY2UpIHsKKyAgY29uc3QgY2hhciAqcGF0aCA9IGhpZEdldEhvc3RQYXRoKGRldmljZSk7CisKKyAgaWYgKCFwYXRoKSB7CisgICAgbG9nTWVzc2FnZShMT0dfV0FSTklORywgImhvc3QgcGF0aCBub3QgYXZhaWxhYmxlIik7CisgICAgcmV0dXJuIDA7CisgIH0KKworICBmcHJpbnRmKG91dHB1dFN0cmVhbSwgIkhvc3QgUGF0aDogJXNcbiIsIHBhdGgpOworICByZXR1cm4gMTsKK30KKworc3RhdGljIGludAorcGVyZm9ybVNob3dIb3N0RGV2aWNlIChIaWREZXZpY2UgKmRldmljZSkgeworICBjb25zdCBjaGFyICpob3N0RGV2aWNlID0gaGlkR2V0SG9zdERldmljZShkZXZpY2UpOworCisgIGlmICghaG9zdERldmljZSkgeworICAgIGxvZ01lc3NhZ2UoTE9HX1dBUk5JTkcsICJob3N0IGRldmljZSBub3QgYXZhaWxhYmxlIik7CisgICAgcmV0dXJuIDA7CisgIH0KKworICBmcHJpbnRmKG91dHB1dFN0cmVhbSwgIkhvc3QgRGV2aWNlOiAlc1xuIiwgaG9zdERldmljZSk7CisgIHJldHVybiAxOworfQorCitzdGF0aWMgaW50CitsaXN0SXRlbSAoY29uc3QgY2hhciAqbGluZSwgdm9pZCAqZGF0YSkgeworICBmcHJpbnRmKG91dHB1dFN0cmVhbSwgIiVzXG4iLCBsaW5lKTsKKyAgcmV0dXJuIGNhbldyaXRlT3V0cHV0KCk7Cit9CisKK3N0YXRpYyBpbnQKK3BlcmZvcm1MaXN0SXRlbXMgKEhpZERldmljZSAqZGV2aWNlKSB7CisgIGNvbnN0IEhpZEl0ZW1zRGVzY3JpcHRvciAqaXRlbXMgPSBnZXRJdGVtcyhkZXZpY2UpOworICBpZiAoIWl0ZW1zKSByZXR1cm4gMDsKKworICBoaWRMaXN0SXRlbXMoaXRlbXMsIGxpc3RJdGVtLCBOVUxMKTsKKyAgcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQKK3BlcmZvcm1MaXN0UmVwb3J0cyAoSGlkRGV2aWNlICpkZXZpY2UpIHsKKyAgY29uc3QgSGlkSXRlbXNEZXNjcmlwdG9yICppdGVtcyA9IGdldEl0ZW1zKGRldmljZSk7CisgIGlmICghaXRlbXMpIHJldHVybiAwOworCisgIEhpZFJlcG9ydHMgKnJlcG9ydHMgPSBoaWRHZXRSZXBvcnRzKGl0ZW1zKTsKKyAgaWYgKCFyZXBvcnRzKSByZXR1cm4gMDsKKworICBmb3IgKHVuc2lnbmVkIGludCBpbmRleD0wOyBpbmRleDxyZXBvcnRzLT5jb3VudDsgaW5kZXgrPTEpIHsKKyAgICB1bnNpZ25lZCBjaGFyIGlkZW50aWZpZXIgPSByZXBvcnRzLT5pZGVudGlmaWVyc1tpbmRleF07CisgICAgSGlkUmVwb3J0U2l6ZSBzaXplOworCisgICAgY2hhciBsaW5lWzBYNDBdOworICAgIFNUUl9CRUdJTihsaW5lLCBzaXplb2YobGluZSkpOworICAgIFNUUl9QUklOVEYoIlJlcG9ydCAlMDJYOiIsIGlkZW50aWZpZXIpOworCisgICAgaWYgKGhpZFJlcG9ydFNpemUoaXRlbXMsIGlkZW50aWZpZXIsICZzaXplKSkgeworICAgICAgdHlwZWRlZiBzdHJ1Y3QgeworICAgICAgICBjb25zdCBjaGFyICpsYWJlbDsKKyAgICAgICAgY29uc3Qgc2l6ZV90IHZhbHVlOworICAgICAgfSBTaXplRW50cnk7CisKKyAgICAgIGNvbnN0IFNpemVFbnRyeSBzaXplVGFibGVbXSA9IHsKKyAgICAgICAgeyAudmFsdWUgPSBzaXplLmlucHV0LAorICAgICAgICAgIC5sYWJlbCA9ICJJbiIsCisgICAgICAgIH0sCisKKyAgICAgICAgeyAudmFsdWUgPSBzaXplLm91dHB1dCwKKyAgICAgICAgICAubGFiZWwgPSAiT3V0IiwKKyAgICAgICAgfSwKKworICAgICAgICB7IC52YWx1ZSA9IHNpemUuZmVhdHVyZSwKKyAgICAgICAgICAubGFiZWwgPSAiRnRyIiwKKyAgICAgICAgfSwKKyAgICAgIH07CisKKyAgICAgIGNvbnN0IFNpemVFbnRyeSAqc2l6ZSA9IHNpemVUYWJsZTsKKyAgICAgIGNvbnN0IFNpemVFbnRyeSAqZW5kID0gc2l6ZSArIEFSUkFZX0NPVU5UKHNpemVUYWJsZSk7CisKKyAgICAgIHdoaWxlIChzaXplIDwgZW5kKSB7CisgICAgICAgIGlmIChzaXplLT52YWx1ZSkgeworICAgICAgICAgIFNUUl9QUklOVEYoIiAlczolIlBSSXNpemUsIHNpemUtPmxhYmVsLCBzaXplLT52YWx1ZSk7CisgICAgICAgIH0KKworICAgICAgICBzaXplICs9IDE7CisgICAgICB9CisgICAgfQorCisgICAgU1RSX0VORDsKKyAgICBmcHJpbnRmKG91dHB1dFN0cmVhbSwgIiVzXG4iLCBsaW5lKTsKKyAgICBpZiAoIWNhbldyaXRlT3V0cHV0KCkpIHJldHVybiAwOworICB9CisKKyAgZnJlZShyZXBvcnRzKTsKKyAgcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQKK2lzUmVwb3J0SWRlbnRpZmllciAoSGlkUmVwb3J0SWRlbnRpZmllciAqaWRlbnRpZmllciwgY29uc3QgY2hhciAqc3RyaW5nLCB1bnNpZ25lZCBjaGFyIG1pbmltdW0pIHsKKyAgaWYgKHN0cmxlbihzdHJpbmcpICE9IDIpIHJldHVybiAwOworCisgIGNoYXIgKmVuZDsKKyAgdW5zaWduZWQgbG9uZyBpbnQgdmFsdWUgPSBzdHJ0b3VsKHN0cmluZywgJmVuZCwgMFgxMCk7CisgIGlmICgqZW5kKSByZXR1cm4gMDsKKworICBpZiAodmFsdWUgPiBVSU5UOF9NQVgpIHJldHVybiAwOworICAqaWRlbnRpZmllciA9IHZhbHVlOworICByZXR1cm4gMTsKK30KKworc3RhdGljIGludAoraXNSZXBvcnREZWZpbmVkICgKKyAgSGlkRGV2aWNlICpkZXZpY2UsIGNvbnN0IGNoYXIgKndoYXQsIEhpZFJlcG9ydElkZW50aWZpZXIgaWRlbnRpZmllciwKKyAgSGlkUmVwb3J0U2l6ZSAqcmVwb3J0U2l6ZSwgc2l6ZV90ICpzaXplCispIHsKKyAgaWYgKGdldFJlcG9ydFNpemUoZGV2aWNlLCBpZGVudGlmaWVyLCByZXBvcnRTaXplKSkgeworICAgIGlmICgqc2l6ZSkgeworICAgICAgcmV0dXJuIDE7CisgICAgfQorICB9CisKKyAgbG9nTWVzc2FnZShMT0dfRVJSLCAiJXMgcmVwb3J0IG5vdCBkZWZpbmVkOiAlMDJYIiwgd2hhdCwgaWRlbnRpZmllcik7CisgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50Cit2ZXJpZnlSZWFkICgKKyAgSGlkRGV2aWNlICpkZXZpY2UsIGNvbnN0IGNoYXIgKndoYXQsIEhpZFJlcG9ydElkZW50aWZpZXIgaWRlbnRpZmllciwKKyAgSGlkUmVwb3J0U2l6ZSAqcmVwb3J0U2l6ZSwgc2l6ZV90ICpzaXplCispIHsKKyAgaW50IGlzRGVmaW5lZCA9IGlzUmVwb3J0RGVmaW5lZCgKKyAgICBkZXZpY2UsIHdoYXQsIGlkZW50aWZpZXIsCisgICAgcmVwb3J0U2l6ZSwgc2l6ZQorICApOworCisgIHJldHVybiBpc0RlZmluZWQ7Cit9CisKK3N0YXRpYyBIaWRSZXBvcnRJZGVudGlmaWVyIHJlYWRSZXBvcnRJZGVudGlmaWVyOworCitzdGF0aWMgaW50CitwYXJzZVJlYWRSZXBvcnQgKHZvaWQpIHsKKyAgY29uc3QgY2hhciAqb3BlcmFuZCA9IG9wdF9yZWFkUmVwb3J0OworICBpZiAoISpvcGVyYW5kKSByZXR1cm4gMTsKKyAgaWYgKGlzUmVwb3J0SWRlbnRpZmllcigmcmVhZFJlcG9ydElkZW50aWZpZXIsIG9wZXJhbmQsIDApKSByZXR1cm4gMTsKKworICBsb2dNZXNzYWdlKExPR19FUlIsICJpbnZhbGlkIGlucHV0IHJlcG9ydCBpZGVudGlmaWVyOiAlcyIsIG9wZXJhbmQpOworICByZXR1cm4gMDsKK30KKworc3RhdGljIGludAorcGVyZm9ybVJlYWRSZXBvcnQgKEhpZERldmljZSAqZGV2aWNlKSB7CisgIEhpZFJlcG9ydElkZW50aWZpZXIgaWRlbnRpZmllciA9IHJlYWRSZXBvcnRJZGVudGlmaWVyOworCisgIEhpZFJlcG9ydFNpemUgcmVwb3J0U2l6ZTsKKyAgc2l6ZV90ICpzaXplID0gJnJlcG9ydFNpemUuaW5wdXQ7CisKKyAgaW50IHZlcmlmaWVkID0gdmVyaWZ5UmVhZCgKKyAgICBkZXZpY2UsICJpbnB1dCIsIGlkZW50aWZpZXIsCisgICAgJnJlcG9ydFNpemUsIHNpemUKKyAgKTsKKworICBpZiAodmVyaWZpZWQpIHsKKyAgICBzaXplX3QgbGVuZ3RoID0gKnNpemU7CisgICAgdW5zaWduZWQgY2hhciByZXBvcnRbbGVuZ3RoXTsKKworICAgIHJlcG9ydFswXSA9IGlkZW50aWZpZXI7CisgICAgc3NpemVfdCByZXN1bHQgPSBoaWRHZXRSZXBvcnQoZGV2aWNlLCByZXBvcnQsIGxlbmd0aCk7CisKKyAgICBpZiAocmVzdWx0ID09IC0xKSB7CisgICAgICBsb2dTeXN0ZW1FcnJvcigiaGlkR2V0UmVwb3J0Iik7CisgICAgfSBlbHNlIHsKKyAgICAgIHdyaXRlQnl0ZXNMaW5lKCJJbnB1dCBSZXBvcnQ6ICUwMlgiLCByZXBvcnQsIHJlc3VsdCwgaWRlbnRpZmllcik7CisgICAgICBpZiAocmVzdWx0ID09IGxlbmd0aCkgcmV0dXJuIDE7CisgICAgICBsb2dVbmV4cGVjdGVkTGVuZ3RoKCJyZXBvcnQgcmVhZCIsIGlkZW50aWZpZXIsIGxlbmd0aCwgcmVzdWx0KTsKKyAgICB9CisgIH0KKworICByZXR1cm4gMDsKK30KKworc3RhdGljIEhpZFJlcG9ydElkZW50aWZpZXIgcmVhZEZlYXR1cmVJZGVudGlmaWVyOworCitzdGF0aWMgaW50CitwYXJzZVJlYWRGZWF0dXJlICh2b2lkKSB7CisgIGNvbnN0IGNoYXIgKm9wZXJhbmQgPSBvcHRfcmVhZEZlYXR1cmU7CisgIGlmICghKm9wZXJhbmQpIHJldHVybiAxOworICBpZiAoaXNSZXBvcnRJZGVudGlmaWVyKCZyZWFkRmVhdHVyZUlkZW50aWZpZXIsIG9wZXJhbmQsIDEpKSByZXR1cm4gMTsKKworICBsb2dNZXNzYWdlKExPR19FUlIsICJpbnZhbGlkIGZlYXR1cmUgcmVwb3J0IGlkZW50aWZpZXI6ICVzIiwgb3BlcmFuZCk7CisgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50CitwZXJmb3JtUmVhZEZlYXR1cmUgKEhpZERldmljZSAqZGV2aWNlKSB7CisgIEhpZFJlcG9ydElkZW50aWZpZXIgaWRlbnRpZmllciA9IHJlYWRGZWF0dXJlSWRlbnRpZmllcjsKKworICBIaWRSZXBvcnRTaXplIHJlcG9ydFNpemU7CisgIHNpemVfdCAqc2l6ZSA9ICZyZXBvcnRTaXplLmZlYXR1cmU7CisKKyAgaW50IHZlcmlmaWVkID0gdmVyaWZ5UmVhZCgKKyAgICBkZXZpY2UsICJmZWF0dXJlIiwgaWRlbnRpZmllciwKKyAgICAmcmVwb3J0U2l6ZSwgc2l6ZQorICApOworCisgIGlmICh2ZXJpZmllZCkgeworICAgIHNpemVfdCBsZW5ndGggPSAqc2l6ZTsKKyAgICB1bnNpZ25lZCBjaGFyIGZlYXR1cmVbbGVuZ3RoXTsKKworICAgIGZlYXR1cmVbMF0gPSBpZGVudGlmaWVyOworICAgIHNzaXplX3QgcmVzdWx0ID0gaGlkR2V0RmVhdHVyZShkZXZpY2UsIGZlYXR1cmUsIGxlbmd0aCk7CisKKyAgICBpZiAocmVzdWx0ID09IC0xKSB7CisgICAgICBsb2dTeXN0ZW1FcnJvcigiaGlkR2V0RmVhdHVyZSIpOworICAgIH0gZWxzZSB7CisgICAgICB3cml0ZUJ5dGVzTGluZSgiRmVhdHVyZSBSZXBvcnQ6ICUwMlgiLCBmZWF0dXJlLCByZXN1bHQsIGlkZW50aWZpZXIpOworICAgICAgaWYgKHJlc3VsdCA9PSBsZW5ndGgpIHJldHVybiAxOworICAgICAgbG9nVW5leHBlY3RlZExlbmd0aCgiZmVhdHVyZSByZWFkIiwgaWRlbnRpZmllciwgbGVuZ3RoLCByZXN1bHQpOworICAgIH0KKyAgfQorCisgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50Citpc0hleGFkZWNpbWFsICh1bnNpZ25lZCBjaGFyICpkaWdpdCwgY2hhciBjaGFyYWN0ZXIpIHsKKyAgY29uc3QgY2hhciBzdHJpbmdbXSA9IHtjaGFyYWN0ZXIsIDB9OworICBjaGFyICplbmQ7CisgIGxvbmcgaW50IHZhbHVlID0gc3RydG9sKHN0cmluZywgJmVuZCwgMFgxMCk7CisKKyAgaWYgKCplbmQpIHsKKyAgICBsb2dNZXNzYWdlKExPR19FUlIsICJpbnZhbGlkIGhleGFkZWNpbWFsIGRpZ2l0OiAlYyIsIGNoYXJhY3Rlcik7CisgICAgcmV0dXJuIDA7CisgIH0KKworICAqZGlnaXQgPSB2YWx1ZTsKKyAgcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQKK3BhcnNlQnl0ZXMgKAorICBjb25zdCBjaGFyICpieXRlcywgY29uc3QgY2hhciAqd2hhdCwgdW5zaWduZWQgY2hhciAqYnVmZmVyLAorICBzaXplX3QgYnVmZmVyU2l6ZSwgc2l6ZV90ICpidWZmZXJVc2VkCispIHsKKyAgdW5zaWduZWQgY2hhciAqb3V0ID0gYnVmZmVyOworICBjb25zdCB1bnNpZ25lZCBjaGFyICplbmQgPSBvdXQgKyBidWZmZXJTaXplOworCisgIGlmICgqYnl0ZXMpIHsKKyAgICBjb25zdCBjaGFyICppbiA9IGJ5dGVzOworICAgIHVuc2lnbmVkIGNoYXIgYnl0ZSA9IDA7CisgICAgdW5zaWduZWQgaW50IGNvdW50ID0gMTsKKworICAgIGVudW0ge05FWFQsIEhFWCwgRE9UUywgQ09VTlR9OworICAgIHVuc2lnbmVkIGludCBzdGF0ZSA9IE5FWFQ7CisKKyAgICB3aGlsZSAoKmluKSB7CisgICAgICBjaGFyIGNoYXJhY3RlciA9ICppbisrOworCisgICAgICBzd2l0Y2ggKHN0YXRlKSB7CisgICAgICAgIGNhc2UgTkVYVDogeworICAgICAgICAgIGlmIChpc3dzcGFjZShjaGFyYWN0ZXIpKSBjb250aW51ZTsKKworICAgICAgICAgIGlmIChjaGFyYWN0ZXIgPT0gJ1snKSB7CisgICAgICAgICAgICBzdGF0ZSA9IERPVFM7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICB9CisKKyAgICAgICAgICB1bnNpZ25lZCBjaGFyIGRpZ2l0OworICAgICAgICAgIGlmICghaXNIZXhhZGVjaW1hbCgmZGlnaXQsIGNoYXJhY3RlcikpIHJldHVybiAwOworCisgICAgICAgICAgYnl0ZSA9IGRpZ2l0IDw8IDQ7CisgICAgICAgICAgc3RhdGUgPSBIRVg7CisgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKworICAgICAgICBjYXNlIEhFWDogeworICAgICAgICAgIHVuc2lnbmVkIGNoYXIgZGlnaXQ7CisgICAgICAgICAgaWYgKCFpc0hleGFkZWNpbWFsKCZkaWdpdCwgY2hhcmFjdGVyKSkgcmV0dXJuIDA7CisKKyAgICAgICAgICBieXRlIHw9IGRpZ2l0OworICAgICAgICAgIHN0YXRlID0gTkVYVDsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGNhc2UgRE9UUzogeworICAgICAgICAgIGlmIChjaGFyYWN0ZXIgPT0gJ10nKSB7CisgICAgICAgICAgICBzdGF0ZSA9IE5FWFQ7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICB9CisKKyAgICAgICAgICBpZiAoKGNoYXJhY3RlciA8ICcxJykgfHwgKGNoYXJhY3RlciA+ICc4JykpIHsKKyAgICAgICAgICAgIGxvZ01lc3NhZ2UoTE9HX0VSUiwgImludmFsaWQgZG90IG51bWJlcjogJWMiLCBjaGFyYWN0ZXIpOworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgfQorICAgICAgICAgIHVuc2lnbmVkIGNoYXIgYml0ID0gMSA8PCAoY2hhcmFjdGVyIC0gJzEnKTsKKworICAgICAgICAgIGlmIChieXRlICYgYml0KSB7CisgICAgICAgICAgICBsb2dNZXNzYWdlKExPR19FUlIsICJkdXBsaWNhdGUgZG90IG51bWJlcjogJWMiLCBjaGFyYWN0ZXIpOworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgfQorCisgICAgICAgICAgYnl0ZSB8PSBiaXQ7CisgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKworICAgICAgICBjYXNlIENPVU5UOiB7CisgICAgICAgICAgaWYgKGlzd3NwYWNlKGNoYXJhY3RlcikpIGJyZWFrOworICAgICAgICAgIGludCBkaWdpdCA9IGNoYXJhY3RlciAtICcwJzsKKworICAgICAgICAgIGlmICgoZGlnaXQgPCAwKSB8fCAoZGlnaXQgPiA5KSkgeworICAgICAgICAgICAgbG9nTWVzc2FnZShMT0dfRVJSLCAiaW52YWxpZCBjb3VudCBkaWdpdDogJWMiLCBjaGFyYWN0ZXIpOworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgfQorCisgICAgICAgICAgaWYgKCFkaWdpdCkgeworICAgICAgICAgICAgaWYgKCFjb3VudCkgeworICAgICAgICAgICAgICBsb2dNZXNzYWdlKExPR19FUlIsICJmaXJzdCBkaWdpdCBvZiBjb3VudCBjYW4ndCBiZSAwIik7CisgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgfQorICAgICAgICAgIH0KKworICAgICAgICAgIGNvdW50ICo9IDEwOworICAgICAgICAgIGNvdW50ICs9IGRpZ2l0OworCisgICAgICAgICAgaWYgKCEqaW4pIGJyZWFrOworICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICBsb2dNZXNzYWdlKExPR19FUlIsICJ1bmV4cGVjdGVkIGJ5dGVzIHBhcnNlciBzdGF0ZTogJXUiLCBzdGF0ZSk7CisgICAgICAgICAgcmV0dXJuIDA7CisgICAgICB9CisKKyAgICAgIGlmIChzdGF0ZSA9PSBDT1VOVCkgeworICAgICAgICBpZiAoIWNvdW50KSB7CisgICAgICAgICAgbG9nTWVzc2FnZShMT0dfRVJSLCAibWlzc2luZyBjb3VudCIpOworICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CisKKyAgICAgICAgc3RhdGUgPSBORVhUOworICAgICAgfSBlbHNlIGlmICgqaW4gPT0gJyonKSB7CisgICAgICAgIGluICs9IDE7CisgICAgICAgIHN0YXRlID0gQ09VTlQ7CisgICAgICAgIGNvdW50ID0gMDsKKyAgICAgICAgY29udGludWU7CisgICAgICB9CisKKyAgICAgIHdoaWxlIChjb3VudC0tKSB7CisgICAgICAgIGlmIChvdXQgPT0gZW5kKSB7CisgICAgICAgICAgbG9nTWVzc2FnZShMT0dfRVJSLCAiJXMgYnVmZmVyIHRvbyBzbWFsbCIsIHdoYXQpOworICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CisKKyAgICAgICAgKm91dCsrID0gYnl0ZTsKKyAgICAgIH0KKworICAgICAgYnl0ZSA9IDA7CisgICAgICBjb3VudCA9IDE7CisgICAgfQorCisgICAgaWYgKHN0YXRlICE9IE5FWFQpIHsKKyAgICAgIGxvZ01lc3NhZ2UoTE9HX0VSUiwgImluY29tcGxldGUgJXMgc3BlY2lmaWNhdGlvbiIsIHdoYXQpOworICAgICAgcmV0dXJuIDA7CisgICAgfQorICB9CisKKyAgKmJ1ZmZlclVzZWQgPSBvdXQgLSBidWZmZXI7CisgIHJldHVybiAxOworfQorCitzdGF0aWMgaW50Cit2ZXJpZnlXcml0ZSAoCisgIEhpZERldmljZSAqZGV2aWNlLCBjb25zdCBjaGFyICp3aGF0LCB1bnNpZ25lZCBjaGFyICppZGVudGlmaWVyLAorICBIaWRSZXBvcnRTaXplICpyZXBvcnRTaXplLCBzaXplX3QgKmV4cGVjdGVkU2l6ZSwKKyAgY29uc3QgdW5zaWduZWQgY2hhciAqYnVmZmVyLCBzaXplX3QgYWN0dWFsU2l6ZQorKSB7CisgICppZGVudGlmaWVyID0gYnVmZmVyWzBdOworCisgIGludCBpc0RlZmluZWQgPSBpc1JlcG9ydERlZmluZWQoCisgICAgZGV2aWNlLCB3aGF0LCAqaWRlbnRpZmllciwKKyAgICByZXBvcnRTaXplLCBleHBlY3RlZFNpemUKKyAgKTsKKworICBpZiAoIWlzRGVmaW5lZCkgcmV0dXJuIDA7CisgIGlmICghKmlkZW50aWZpZXIpICpleHBlY3RlZFNpemUgKz0gMTsKKworICBpZiAoYWN0dWFsU2l6ZSAhPSAqZXhwZWN0ZWRTaXplKSB7CisgICAgbG9nTWVzc2FnZShMT0dfRVJSLAorICAgICAgImluY29ycmVjdCAlcyByZXBvcnQgc2l6ZTogJTAyWDoiCisgICAgICAiIEV4cGVjdGVkOiUiUFJJc2l6ZSAiIEFjdHVhbDolIlBSSXNpemUsCisgICAgICB3aGF0LCAqaWRlbnRpZmllciwgKmV4cGVjdGVkU2l6ZSwgYWN0dWFsU2l6ZQorICAgICk7CisKKyAgICByZXR1cm4gMDsKKyAgfQorCisgIHJldHVybiAxOworfQorCitzdGF0aWMgdW5zaWduZWQgY2hhciB3cml0ZVJlcG9ydEJ1ZmZlclswWDEwMDBdOworc3RhdGljIHNpemVfdCB3cml0ZVJlcG9ydExlbmd0aDsKKworc3RhdGljIGludAorcGFyc2VXcml0ZVJlcG9ydCAodm9pZCkgeworICByZXR1cm4gcGFyc2VCeXRlcygKKyAgICBvcHRfd3JpdGVSZXBvcnQsICJvdXRwdXQgcmVwb3J0Iiwgd3JpdGVSZXBvcnRCdWZmZXIsCisgICAgQVJSQVlfQ09VTlQod3JpdGVSZXBvcnRCdWZmZXIpLCAmd3JpdGVSZXBvcnRMZW5ndGgKKyAgKTsKK30KKworc3RhdGljIGludAorcGVyZm9ybVdyaXRlUmVwb3J0IChIaWREZXZpY2UgKmRldmljZSkgeworICBjb25zdCB1bnNpZ25lZCBjaGFyICpyZXBvcnQgPSB3cml0ZVJlcG9ydEJ1ZmZlcjsKKyAgc2l6ZV90IGxlbmd0aCA9IHdyaXRlUmVwb3J0TGVuZ3RoOworCisgIHVuc2lnbmVkIGNoYXIgaWRlbnRpZmllcjsKKyAgSGlkUmVwb3J0U2l6ZSByZXBvcnRTaXplOworCisgIGludCB2ZXJpZmllZCA9IHZlcmlmeVdyaXRlKAorICAgIGRldmljZSwgIm91dHB1dCIsICZpZGVudGlmaWVyLAorICAgICZyZXBvcnRTaXplLCAmcmVwb3J0U2l6ZS5vdXRwdXQsCisgICAgcmVwb3J0LCBsZW5ndGgKKyAgKTsKKworICBpZiAodmVyaWZpZWQpIHsKKyAgICB3cml0ZUJ5dGVzTGluZSgiV3JpdGluZyBSZXBvcnQ6ICUwMlgiLCByZXBvcnQsIGxlbmd0aCwgaWRlbnRpZmllcik7CisgICAgc3NpemVfdCByZXN1bHQgPSBoaWRTZXRSZXBvcnQoZGV2aWNlLCByZXBvcnQsIGxlbmd0aCk7CisKKyAgICBpZiAocmVzdWx0ID09IC0xKSB7CisgICAgICBsb2dTeXN0ZW1FcnJvcigiaGlkU2V0UmVwb3J0Iik7CisgICAgfSBlbHNlIGlmIChyZXN1bHQgPT0gbGVuZ3RoKSB7CisgICAgICByZXR1cm4gMTsKKyAgICB9IGVsc2UgeworICAgICAgbG9nVW5leHBlY3RlZExlbmd0aCgicmVwb3J0IHdyaXRlIiwgaWRlbnRpZmllciwgbGVuZ3RoLCByZXN1bHQpOworICAgIH0KKyAgfQorCisgIHJldHVybiAwOworfQorCitzdGF0aWMgdW5zaWduZWQgY2hhciB3cml0ZUZlYXR1cmVCdWZmZXJbMFgxMDAwXTsKK3N0YXRpYyBzaXplX3Qgd3JpdGVGZWF0dXJlTGVuZ3RoOworCitzdGF0aWMgaW50CitwYXJzZVdyaXRlRmVhdHVyZSAodm9pZCkgeworICByZXR1cm4gcGFyc2VCeXRlcygKKyAgICBvcHRfd3JpdGVGZWF0dXJlLCAiZmVhdHVyZSByZXBvcnQiLCB3cml0ZUZlYXR1cmVCdWZmZXIsCisgICAgQVJSQVlfQ09VTlQod3JpdGVGZWF0dXJlQnVmZmVyKSwgJndyaXRlRmVhdHVyZUxlbmd0aAorICApOworfQorCitzdGF0aWMgaW50CitwZXJmb3JtV3JpdGVGZWF0dXJlIChIaWREZXZpY2UgKmRldmljZSkgeworICBjb25zdCB1bnNpZ25lZCBjaGFyICpmZWF0dXJlID0gd3JpdGVGZWF0dXJlQnVmZmVyOworICBzaXplX3QgbGVuZ3RoID0gd3JpdGVGZWF0dXJlTGVuZ3RoOworCisgIHVuc2lnbmVkIGNoYXIgaWRlbnRpZmllcjsKKyAgSGlkUmVwb3J0U2l6ZSByZXBvcnRTaXplOworCisgIGludCB2ZXJpZmllZCA9IHZlcmlmeVdyaXRlKAorICAgIGRldmljZSwgImZlYXR1cmUiLCAmaWRlbnRpZmllciwKKyAgICAmcmVwb3J0U2l6ZSwgJnJlcG9ydFNpemUuZmVhdHVyZSwKKyAgICBmZWF0dXJlLCBsZW5ndGgKKyAgKTsKKworICBpZiAodmVyaWZpZWQpIHsKKyAgICB3cml0ZUJ5dGVzTGluZSgiV3JpdGluZyBGZWF0dXJlOiAlMDJYIiwgZmVhdHVyZSwgbGVuZ3RoLCBpZGVudGlmaWVyKTsKKyAgICBzc2l6ZV90IHJlc3VsdCA9IGhpZFNldEZlYXR1cmUoZGV2aWNlLCBmZWF0dXJlLCBsZW5ndGgpOworCisgICAgaWYgKHJlc3VsdCA9PSAtMSkgeworICAgICAgbG9nU3lzdGVtRXJyb3IoImhpZFNldEZlYXR1cmUiKTsKKyAgICB9IGVsc2UgaWYgKHJlc3VsdCA9PSBsZW5ndGgpIHsKKyAgICAgIHJldHVybiAxOworICAgIH0gZWxzZSB7CisgICAgICBsb2dVbmV4cGVjdGVkTGVuZ3RoKCJmZWF0dXJlIHdyaXRlIiwgaWRlbnRpZmllciwgbGVuZ3RoLCByZXN1bHQpOworICAgIH0KKyAgfQorCisgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50IGlucHV0VGltZW91dDsKKworc3RhdGljIGludAorcGFyc2VJbnB1dFRpbWVvdXQgKHZvaWQpIHsKKyAgaW5wdXRUaW1lb3V0ID0gMTA7CisKKyAgc3RhdGljIGNvbnN0IGludCBtaW5pbXVtID0gMTsKKyAgc3RhdGljIGNvbnN0IGludCBtYXhpbXVtID0gOTk7CisKKyAgaWYgKCF2YWxpZGF0ZUludGVnZXIoJmlucHV0VGltZW91dCwgb3B0X2lucHV0VGltZW91dCwgJm1pbmltdW0sICZtYXhpbXVtKSkgeworICAgIGxvZ01lc3NhZ2UoTE9HX0VSUiwgImludmFsaWQgaW5wdXQgdGltZW91dDogJXMiLCBvcHRfaW5wdXRUaW1lb3V0KTsKKyAgICByZXR1cm4gMDsKKyAgfQorCisgIGlucHV0VGltZW91dCAqPSAxMDAwOworICByZXR1cm4gMTsKK30KKworc3RhdGljIGludAorcGVyZm9ybUVjaG9JbnB1dCAoSGlkRGV2aWNlICpkZXZpY2UpIHsKKyAgSGlkUmVwb3J0U2l6ZSByZXBvcnRTaXplOworICBjb25zdCBzaXplX3QgKmlucHV0U2l6ZSA9ICZyZXBvcnRTaXplLmlucHV0OworCisgIHVuc2lnbmVkIGNoYXIgcmVwb3J0SWRlbnRpZmllciA9IDA7CisgIGludCBoYXNSZXBvcnRJZGVudGlmaWVycyA9ICFnZXRSZXBvcnRTaXplKGRldmljZSwgcmVwb3J0SWRlbnRpZmllciwgJnJlcG9ydFNpemUpOworCisgIHVuc2lnbmVkIGNoYXIgYnVmZmVyWzBYMTAwMF07CisgIHNpemVfdCBidWZmZXJTaXplID0gc2l6ZW9mKGJ1ZmZlcik7CisKKyAgdW5zaWduZWQgY2hhciAqZnJvbSA9IGJ1ZmZlcjsKKyAgdW5zaWduZWQgY2hhciAqdG8gPSBmcm9tOworICBjb25zdCB1bnNpZ25lZCBjaGFyICplbmQgPSBmcm9tICsgYnVmZmVyU2l6ZTsKKworICB3aGlsZSAoaGlkQXdhaXRJbnB1dChkZXZpY2UsIGlucHV0VGltZW91dCkpIHsKKyAgICBzc2l6ZV90IHJlc3VsdCA9IGhpZFJlYWREYXRhKGRldmljZSwgdG8sIChlbmQgLSB0byksIDEwMDAsIDEwMCk7CisKKyAgICBpZiAocmVzdWx0ID09IC0xKSB7CisgICAgICBsb2dNZXNzYWdlKExPR19FUlIsICJpbnB1dCBlcnJvcjogJXMiLCBzdHJlcnJvcihlcnJubykpOworICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgdG8gKz0gcmVzdWx0OworCisgICAgd2hpbGUgKGZyb20gPCB0bykgeworICAgICAgaWYgKGhhc1JlcG9ydElkZW50aWZpZXJzKSB7CisgICAgICAgIHJlcG9ydElkZW50aWZpZXIgPSAqZnJvbTsKKworICAgICAgICBpZiAoIWdldFJlcG9ydFNpemUoZGV2aWNlLCByZXBvcnRJZGVudGlmaWVyLCAmcmVwb3J0U2l6ZSkpIHsKKyAgICAgICAgICBsb2dNZXNzYWdlKExPR19FUlIsICJpbnB1dCByZXBvcnQgbm90IGRlZmluZWQ6ICUwMlgiLCByZXBvcnRJZGVudGlmaWVyKTsKKyAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQorICAgICAgfQorCisgICAgICBpZiAoISppbnB1dFNpemUpIHsKKyAgICAgICAgbG9nTWVzc2FnZShMT0dfRVJSLCAiaW5wdXQgcmVwb3J0IHNpemUgaXMgemVybzogJTAyWCIsIHJlcG9ydElkZW50aWZpZXIpOworICAgICAgICByZXR1cm4gMDsKKyAgICAgIH0KKworICAgICAgc2l6ZV90IGNvdW50ID0gdG8gLSBmcm9tOworCisgICAgICBpZiAoKmlucHV0U2l6ZSA+IGNvdW50KSB7CisgICAgICAgIGlmIChmcm9tID09IGJ1ZmZlcikgeworICAgICAgICAgIGxvZ01lc3NhZ2UoTE9HX0VSUiwKKyAgICAgICAgICAgICJpbnB1dCByZXBvcnQgdG9vIGxhcmdlOiAlMDJYOiAlIlBSSXNpemUgIiA+ICUiUFJJc2l6ZSwKKyAgICAgICAgICAgIHJlcG9ydElkZW50aWZpZXIsICppbnB1dFNpemUsIGNvdW50CisgICAgICAgICAgKTsKKworICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CisKKyAgICAgICAgbWVtbW92ZShidWZmZXIsIGZyb20sIGNvdW50KTsKKyAgICAgICAgZnJvbSA9IGJ1ZmZlcjsKKyAgICAgICAgdG8gPSBmcm9tICsgY291bnQ7CisKKyAgICAgICAgYnJlYWs7CisgICAgICB9CisKKyAgICAgIGlmICghd3JpdGVCeXRlc0xpbmUoIklucHV0IFJlcG9ydCIsIGZyb20sICppbnB1dFNpemUpKSByZXR1cm4gMDsKKyAgICAgIGZyb20gKz0gKmlucHV0U2l6ZTsKKyAgICB9CisgIH0KKworICByZXR1cm4gMTsKK30KKworc3RhdGljIGludAorcGFyc2VPcGVyYW5kcyAodm9pZCkgeworICB0eXBlZGVmIHN0cnVjdCB7CisgICAgaW50ICgqcGFyc2UpICh2b2lkKTsKKyAgfSBPcGVyYW5kRW50cnk7CisKKyAgc3RhdGljIGNvbnN0IE9wZXJhbmRFbnRyeSBvcGVyYW5kVGFibGVbXSA9IHsKKyAgICB7IC5wYXJzZSA9IHBhcnNlUmVhZFJlcG9ydCwKKyAgICB9LAorCisgICAgeyAucGFyc2UgPSBwYXJzZVJlYWRGZWF0dXJlLAorICAgIH0sCisKKyAgICB7IC5wYXJzZSA9IHBhcnNlV3JpdGVSZXBvcnQsCisgICAgfSwKKworICAgIHsgLnBhcnNlID0gcGFyc2VXcml0ZUZlYXR1cmUsCisgICAgfSwKKworICAgIHsgLnBhcnNlID0gcGFyc2VJbnB1dFRpbWVvdXQsCisgICAgfSwKKyAgfTsKKworICBjb25zdCBPcGVyYW5kRW50cnkgKm9wZXJhbmQgPSBvcGVyYW5kVGFibGU7CisgIGNvbnN0IE9wZXJhbmRFbnRyeSAqZW5kID0gb3BlcmFuZCArIEFSUkFZX0NPVU5UKG9wZXJhbmRUYWJsZSk7CisKKyAgd2hpbGUgKG9wZXJhbmQgPCBlbmQpIHsKKyAgICBpZiAoIW9wZXJhbmQtPnBhcnNlKCkpIHJldHVybiAwOworICAgIG9wZXJhbmQgKz0gMTsKKyAgfQorCisgIHJldHVybiAxOworfQorCitzdGF0aWMgaW50CitwZXJmb3JtQWN0aW9ucyAoSGlkRGV2aWNlICpkZXZpY2UpIHsKKyAgdHlwZWRlZiBzdHJ1Y3QgeworICAgIGludCAoKnBlcmZvcm0pIChIaWREZXZpY2UgKmRldmljZSk7CisgICAgdW5zaWduZWQgY2hhciBpc0ZsYWc6MTsKKworICAgIHVuaW9uIHsKKyAgICAgIGNoYXIgKipzdHJpbmc7CisgICAgICBpbnQgKmZsYWc7CisgICAgfSBvcHRpb247CisgIH0gQWN0aW9uRW50cnk7CisKKyAgc3RhdGljIGNvbnN0IEFjdGlvbkVudHJ5IGFjdGlvblRhYmxlW10gPSB7CisgICAgeyAucGVyZm9ybSA9IHBlcmZvcm1TaG93RGV2aWNlSWRlbnRpZmllcnMsCisgICAgICAuaXNGbGFnID0gMSwKKyAgICAgIC5vcHRpb24uZmxhZyA9ICZvcHRfc2hvd0RldmljZUlkZW50aWZpZXJzLAorICAgIH0sCisKKyAgICB7IC5wZXJmb3JtID0gcGVyZm9ybVNob3dEZXZpY2VBZGRyZXNzLAorICAgICAgLmlzRmxhZyA9IDEsCisgICAgICAub3B0aW9uLmZsYWcgPSAmb3B0X3Nob3dEZXZpY2VBZGRyZXNzLAorICAgIH0sCisKKyAgICB7IC5wZXJmb3JtID0gcGVyZm9ybVNob3dEZXZpY2VOYW1lLAorICAgICAgLmlzRmxhZyA9IDEsCisgICAgICAub3B0aW9uLmZsYWcgPSAmb3B0X3Nob3dEZXZpY2VOYW1lLAorICAgIH0sCisKKyAgICB7IC5wZXJmb3JtID0gcGVyZm9ybVNob3dIb3N0UGF0aCwKKyAgICAgIC5pc0ZsYWcgPSAxLAorICAgICAgLm9wdGlvbi5mbGFnID0gJm9wdF9zaG93SG9zdFBhdGgsCisgICAgfSwKKworICAgIHsgLnBlcmZvcm0gPSBwZXJmb3JtU2hvd0hvc3REZXZpY2UsCisgICAgICAuaXNGbGFnID0gMSwKKyAgICAgIC5vcHRpb24uZmxhZyA9ICZvcHRfc2hvd0hvc3REZXZpY2UsCisgICAgfSwKKworICAgIHsgLnBlcmZvcm0gPSBwZXJmb3JtTGlzdEl0ZW1zLAorICAgICAgLmlzRmxhZyA9IDEsCisgICAgICAub3B0aW9uLmZsYWcgPSAmb3B0X2xpc3RJdGVtcywKKyAgICB9LAorCisgICAgeyAucGVyZm9ybSA9IHBlcmZvcm1MaXN0UmVwb3J0cywKKyAgICAgIC5pc0ZsYWcgPSAxLAorICAgICAgLm9wdGlvbi5mbGFnID0gJm9wdF9saXN0UmVwb3J0cywKKyAgICB9LAorCisgICAgeyAucGVyZm9ybSA9IHBlcmZvcm1SZWFkUmVwb3J0LAorICAgICAgLm9wdGlvbi5zdHJpbmcgPSAmb3B0X3JlYWRSZXBvcnQsCisgICAgfSwKKworICAgIHsgLnBlcmZvcm0gPSBwZXJmb3JtUmVhZEZlYXR1cmUsCisgICAgICAub3B0aW9uLnN0cmluZyA9ICZvcHRfcmVhZEZlYXR1cmUsCisgICAgfSwKKworICAgIHsgLnBlcmZvcm0gPSBwZXJmb3JtV3JpdGVSZXBvcnQsCisgICAgICAub3B0aW9uLnN0cmluZyA9ICZvcHRfd3JpdGVSZXBvcnQsCisgICAgfSwKKworICAgIHsgLnBlcmZvcm0gPSBwZXJmb3JtV3JpdGVGZWF0dXJlLAorICAgICAgLm9wdGlvbi5zdHJpbmcgPSAmb3B0X3dyaXRlRmVhdHVyZSwKKyAgICB9LAorCisgICAgeyAucGVyZm9ybSA9IHBlcmZvcm1FY2hvSW5wdXQsCisgICAgICAuaXNGbGFnID0gMSwKKyAgICAgIC5vcHRpb24uZmxhZyA9ICZvcHRfZWNob0lucHV0LAorICAgIH0sCisgIH07CisKKyAgY29uc3QgQWN0aW9uRW50cnkgKmFjdGlvbiA9IGFjdGlvblRhYmxlOworICBjb25zdCBBY3Rpb25FbnRyeSAqZW5kID0gYWN0aW9uICsgQVJSQVlfQ09VTlQoYWN0aW9uVGFibGUpOworCisgIHdoaWxlIChhY3Rpb24gPCBlbmQpIHsKKyAgICBpbnQgcGVyZm9ybSA9IDA7CisKKyAgICBpZiAoYWN0aW9uLT5pc0ZsYWcpIHsKKyAgICAgIGlmICgqYWN0aW9uLT5vcHRpb24uZmxhZykgcGVyZm9ybSA9IDE7CisgICAgfSBlbHNlIHsKKyAgICAgIGlmICgqKmFjdGlvbi0+b3B0aW9uLnN0cmluZykgcGVyZm9ybSA9IDE7CisgICAgfQorCisgICAgaWYgKHBlcmZvcm0pIHsKKyAgICAgIGlmICghYWN0aW9uLT5wZXJmb3JtKGRldmljZSkpIHJldHVybiAwOworICAgICAgaWYgKCFjYW5Xcml0ZU91dHB1dCgpKSByZXR1cm4gMDsKKyAgICB9CisKKyAgICBhY3Rpb24gKz0gMTsKKyAgfQorCisgIHJldHVybiAxOworfQorCitpbnQKK21haW4gKGludCBhcmdjLCBjaGFyICphcmd2W10pIHsKKyAgeworICAgIGNvbnN0IENvbW1hbmRMaW5lRGVzY3JpcHRvciBkZXNjcmlwdG9yID0geworICAgICAgLm9wdGlvbnMgPSAmcHJvZ3JhbU9wdGlvbnMsCisgICAgICAuYXBwbGljYXRpb25OYW1lID0gImJybHR0eS1oaWQiLAorCisgICAgICAudXNhZ2UgPSB7CisgICAgICAgIC5wdXJwb3NlID0gc3RydGV4dCgiRmluZCBISUQgZGV2aWNlcywgbGlzdCByZXBvcnQgZGVzY3JpcHRvcnMsIHJlYWQvd3JpdGUgcmVwb3J0cy9mZWF0dXJlcywgb3IgbW9uaXRvciBpbnB1dCBmcm9tIGEgSElEIGRldmljZS4iKSwKKyAgICAgICAgLm5vdGVzID0gVVNBR0VfTk9URVModXNhZ2VOb3RlcyksCisgICAgICB9CisgICAgfTsKKworICAgIFBST0NFU1NfT1BUSU9OUyhkZXNjcmlwdG9yLCBhcmdjLCBhcmd2KTsKKyAgfQorCisgIG91dHB1dFN0cmVhbSA9IHN0ZG91dDsKKyAgb3V0cHV0RXJyb3IgPSAwOworCisgIGlmIChhcmdjKSB7CisgICAgbG9nTWVzc2FnZShMT0dfRVJSLCAidG9vIG1hbnkgcGFyYW1ldGVycyIpOworICAgIHJldHVybiBQUk9HX0VYSVRfU1lOVEFYOworICB9CisKKyAgaWYgKCFwYXJzZU9wZXJhbmRzKCkpIHJldHVybiBQUk9HX0VYSVRfU1lOVEFYOworICBQcm9ncmFtRXhpdFN0YXR1cyBleGl0U3RhdHVzID0gUFJPR19FWElUX1NVQ0NFU1M7CisgIEhpZERldmljZSAqZGV2aWNlID0gTlVMTDsKKworICBpZiAoIW9wZW5EZXZpY2UoJmRldmljZSkpIHsKKyAgICBleGl0U3RhdHVzID0gUFJPR19FWElUX1NZTlRBWDsKKyAgfSBlbHNlIGlmICghZGV2aWNlKSB7CisgICAgbG9nTWVzc2FnZShMT0dfRVJSLCAiZGV2aWNlIG5vdCBmb3VuZCIpOworICAgIGV4aXRTdGF0dXMgPSBQUk9HX0VYSVRfU0VNQU5USUM7CisgIH0gZWxzZSB7CisgICAgaWYgKCFwZXJmb3JtQWN0aW9ucyhkZXZpY2UpKSBleGl0U3RhdHVzID0gUFJPR19FWElUX0ZBVEFMOworICAgIGhpZENsb3NlRGV2aWNlKGRldmljZSk7CisgIH0KKworICBpZiAob3V0cHV0RXJyb3IpIHsKKyAgICBsb2dNZXNzYWdlKExPR19FUlIsICJvdXRwdXQgZXJyb3I6ICVzIiwgc3RyZXJyb3Iob3V0cHV0RXJyb3IpKTsKKyAgICBleGl0U3RhdHVzID0gUFJPR19FWElUX0ZBVEFMOworICB9CisKKyAgcmV0dXJuIGV4aXRTdGF0dXM7Cit9CmRpZmYgLS1naXQgYS9Qcm9ncmFtcy9icmx0dHkta3RiLmMgYi9Qcm9ncmFtcy9icmx0dHkta3RiLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzQ1MDYyOAotLS0gL2Rldi9udWxsCisrKyBiL1Byb2dyYW1zL2JybHR0eS1rdGIuYwpAQCAtMCwwICsxLDQwMyBAQAorLyoKKyAqIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisgKiAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisgKgorICogQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKKyNpbmNsdWRlICJwcm9sb2d1ZS5oIgorCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworI2luY2x1ZGUgInByb2dyYW0uaCIKKyNpbmNsdWRlICJjbWRsaW5lLmgiCisjaW5jbHVkZSAibG9nLmgiCisjaW5jbHVkZSAiZmlsZS5oIgorI2luY2x1ZGUgInBhcnNlLmgiCisjaW5jbHVkZSAiZHlubGQuaCIKKyNpbmNsdWRlICJrdGIuaCIKKyNpbmNsdWRlICJrdGJfa2V5Ym9hcmQuaCIKKyNpbmNsdWRlICJicmwuaCIKKworc3RhdGljIGNoYXIgKm9wdF9icmFpbGxlRHJpdmVyOworc3RhdGljIGludCBvcHRfYXVkaXQ7CitzdGF0aWMgaW50IG9wdF9saXN0S2V5TmFtZXM7CitzdGF0aWMgaW50IG9wdF9saXN0SGVscFNjcmVlbjsKK3N0YXRpYyBpbnQgb3B0X2xpc3RSZXN0cnVjdHVyZWRUZXh0Oworc3RhdGljIGNoYXIgKm9wdF90YWJsZXNEaXJlY3Rvcnk7CitjaGFyICpvcHRfZHJpdmVyc0RpcmVjdG9yeTsKKworQkVHSU5fT1BUSU9OX1RBQkxFKHByb2dyYW1PcHRpb25zKQorICB7IC53b3JkID0gImJyYWlsbGUtZHJpdmVyIiwKKyAgICAubGV0dGVyID0gJ2InLAorICAgIC5hcmd1bWVudCA9IHN0cnRleHQoImRyaXZlciIpLAorICAgIC5zZXR0aW5nLnN0cmluZyA9ICZvcHRfYnJhaWxsZURyaXZlciwKKyAgICAuZGVzY3JpcHRpb24gPSBzdHJ0ZXh0KCJCcmFpbGxlIGRyaXZlciBjb2RlLiIpLAorICB9LAorCisgIHsgLndvcmQgPSAiYXVkaXQiLAorICAgIC5sZXR0ZXIgPSAnYScsCisgICAgLnNldHRpbmcuZmxhZyA9ICZvcHRfYXVkaXQsCisgICAgLmRlc2NyaXB0aW9uID0gc3RydGV4dCgiUmVwb3J0IHByb2JsZW1zIHdpdGggdGhlIGtleSB0YWJsZS4iKQorICB9LAorCisgIHsgLndvcmQgPSAia2V5cyIsCisgICAgLmxldHRlciA9ICdrJywKKyAgICAuc2V0dGluZy5mbGFnID0gJm9wdF9saXN0S2V5TmFtZXMsCisgICAgLmRlc2NyaXB0aW9uID0gc3RydGV4dCgiTGlzdCBrZXkgbmFtZXMuIikKKyAgfSwKKworICB7IC53b3JkID0gImxpc3QiLAorICAgIC5sZXR0ZXIgPSAnbCcsCisgICAgLnNldHRpbmcuZmxhZyA9ICZvcHRfbGlzdEhlbHBTY3JlZW4sCisgICAgLmRlc2NyaXB0aW9uID0gc3RydGV4dCgiTGlzdCBrZXkgdGFibGUgaW4gaGVscCBzY3JlZW4gZm9ybWF0LiIpCisgIH0sCisKKyAgeyAud29yZCA9ICJyZVN0cnVjdHVyZWRUZXh0IiwKKyAgICAubGV0dGVyID0gJ3InLAorICAgIC5zZXR0aW5nLmZsYWcgPSAmb3B0X2xpc3RSZXN0cnVjdHVyZWRUZXh0LAorICAgIC5kZXNjcmlwdGlvbiA9IHN0cnRleHQoIkxpc3Qga2V5IHRhYmxlIGluIHJlU3RydWN0dXJlZFRleHQgZm9ybWF0LiIpCisgIH0sCisKKyAgeyAud29yZCA9ICJ0YWJsZXMtZGlyZWN0b3J5IiwKKyAgICAubGV0dGVyID0gJ1QnLAorICAgIC5hcmd1bWVudCA9IHN0cnRleHQoImRpcmVjdG9yeSIpLAorICAgIC5zZXR0aW5nLnN0cmluZyA9ICZvcHRfdGFibGVzRGlyZWN0b3J5LAorICAgIC5pbnRlcm5hbC5zZXR0aW5nID0gVEFCTEVTX0RJUkVDVE9SWSwKKyAgICAuaW50ZXJuYWwuYWRqdXN0ID0gZml4SW5zdGFsbFBhdGgsCisgICAgLmRlc2NyaXB0aW9uID0gc3RydGV4dCgiUGF0aCB0byBkaXJlY3RvcnkgY29udGFpbmluZyB0YWJsZXMuIikKKyAgfSwKKworICB7IC53b3JkID0gImRyaXZlcnMtZGlyZWN0b3J5IiwKKyAgICAubGV0dGVyID0gJ0QnLAorICAgIC5hcmd1bWVudCA9IHN0cnRleHQoImRpcmVjdG9yeSIpLAorICAgIC5zZXR0aW5nLnN0cmluZyA9ICZvcHRfZHJpdmVyc0RpcmVjdG9yeSwKKyAgICAuaW50ZXJuYWwuc2V0dGluZyA9IERSSVZFUlNfRElSRUNUT1JZLAorICAgIC5pbnRlcm5hbC5hZGp1c3QgPSBmaXhJbnN0YWxsUGF0aCwKKyAgICAuZGVzY3JpcHRpb24gPSBzdHJ0ZXh0KCJQYXRoIHRvIGRpcmVjdG9yeSBmb3IgbG9hZGluZyBkcml2ZXJzLiIpCisgIH0sCitFTkRfT1BUSU9OX1RBQkxFKHByb2dyYW1PcHRpb25zKQorCitzdGF0aWMgdm9pZCAqZHJpdmVyT2JqZWN0OworCit0eXBlZGVmIHN0cnVjdCB7CisgIEtFWV9OQU1FX1RBQkxFU19SRUZFUkVOQ0UgbmFtZXM7CisgIGNoYXIgKnBhdGg7Cit9IEtleVRhYmxlRGVzY3JpcHRvcjsKKworc3RhdGljIGludAorZ2V0S2V5VGFibGVEZXNjcmlwdG9yIChLZXlUYWJsZURlc2NyaXB0b3IgKmt0ZCwgY29uc3QgY2hhciAqdGFibGVOYW1lKSB7CisgIGludCBvayA9IDA7CisKKyAgbWVtc2V0KGt0ZCwgMCwgc2l6ZW9mKCprdGQpKTsKKyAga3RkLT5uYW1lcyA9IE5VTEw7CisgIGt0ZC0+cGF0aCA9IE5VTEw7CisKKyAgaWYgKCpvcHRfYnJhaWxsZURyaXZlcikgeworICAgIGlmIChsb2FkQnJhaWxsZURyaXZlcihvcHRfYnJhaWxsZURyaXZlciwgJmRyaXZlck9iamVjdCwgb3B0X2RyaXZlcnNEaXJlY3RvcnkpKSB7CisgICAgICBjaGFyICprZXlUYWJsZXNTeW1ib2w7CisKKyAgICAgIHsKKyAgICAgICAgY29uc3QgY2hhciAqc3RyaW5nc1tdID0geyJicmxfa3RiXyIsIG9wdF9icmFpbGxlRHJpdmVyfTsKKyAgICAgICAga2V5VGFibGVzU3ltYm9sID0gam9pblN0cmluZ3Moc3RyaW5ncywgQVJSQVlfQ09VTlQoc3RyaW5ncykpOworICAgICAgfQorCisgICAgICBpZiAoa2V5VGFibGVzU3ltYm9sKSB7CisgICAgICAgIGNvbnN0IEtleVRhYmxlRGVmaW5pdGlvbiAqY29uc3QgKmtleVRhYmxlRGVmaW5pdGlvbnM7CisKKyAgICAgICAgaWYgKGZpbmRTaGFyZWRTeW1ib2woZHJpdmVyT2JqZWN0LCBrZXlUYWJsZXNTeW1ib2wsICZrZXlUYWJsZURlZmluaXRpb25zKSkgeworICAgICAgICAgIGNvbnN0IEtleVRhYmxlRGVmaW5pdGlvbiAqY29uc3QgKmN1cnJlbnREZWZpbml0aW9uID0ga2V5VGFibGVEZWZpbml0aW9uczsKKworICAgICAgICAgIHdoaWxlICgqY3VycmVudERlZmluaXRpb24pIHsKKyAgICAgICAgICAgIGlmIChzdHJjbXAodGFibGVOYW1lLCAoKmN1cnJlbnREZWZpbml0aW9uKS0+YmluZGluZ3MpID09IDApIHsKKyAgICAgICAgICAgICAga3RkLT5uYW1lcyA9ICgqY3VycmVudERlZmluaXRpb24pLT5uYW1lczsKKyAgICAgICAgICAgICAgaWYgKChrdGQtPnBhdGggPSBtYWtlSW5wdXRUYWJsZVBhdGgob3B0X3RhYmxlc0RpcmVjdG9yeSwgb3B0X2JyYWlsbGVEcml2ZXIsIHRhYmxlTmFtZSkpKSBvayA9IDE7CisgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBjdXJyZW50RGVmaW5pdGlvbiArPSAxOworICAgICAgICAgIH0KKworICAgICAgICAgIGlmICgha3RkLT5uYW1lcykgeworICAgICAgICAgICAgbG9nTWVzc2FnZShMT0dfRVJSLAorICAgICAgICAgICAgICAidW5rbm93biBicmFpbGxlIGRldmljZSBtb2RlbDogJXMtJXMiLAorICAgICAgICAgICAgICBvcHRfYnJhaWxsZURyaXZlciwgdGFibGVOYW1lCisgICAgICAgICAgICApOworICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGZyZWUoa2V5VGFibGVzU3ltYm9sKTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIGxvZ01hbGxvY0Vycm9yKCk7CisgICAgICB9CisgICAgfQorICB9IGVsc2UgeworICAgIGt0ZC0+bmFtZXMgPSBLRVlfTkFNRV9UQUJMRVMoa2V5Ym9hcmQpOworICAgIGlmICgoa3RkLT5wYXRoID0gbWFrZUtleWJvYXJkVGFibGVQYXRoKG9wdF90YWJsZXNEaXJlY3RvcnksIHRhYmxlTmFtZSkpKSBvayA9IDE7CisgIH0KKworICBpZiAoIW9rKSB7CisgICAgaWYgKGt0ZC0+cGF0aCkgZnJlZShrdGQtPnBhdGgpOworICAgIG1lbXNldChrdGQsIDAsIHNpemVvZigqa3RkKSk7CisgIH0KKworICByZXR1cm4gb2s7Cit9CisKK3N0YXRpYyBpbnQKK3dyaXRlTGluZSAoY29uc3Qgd2NoYXJfdCAqbGluZSkgeworICBGSUxFICpzdHJlYW0gPSBzdGRvdXQ7CisKKyAgZnByaW50ZihzdHJlYW0sICIlIiBQUkl3cyAiXG4iLCBsaW5lKTsKKyAgcmV0dXJuICFmZXJyb3Ioc3RyZWFtKTsKK30KKworc3RhdGljIGludAoraGxwV3JpdGVMaW5lIChjb25zdCB3Y2hhcl90ICpsaW5lLCB2b2lkICpkYXRhKSB7CisgIHJldHVybiB3cml0ZUxpbmUobGluZSk7Cit9CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgdW5zaWduZWQgaW50IGhlYWRlckxldmVsOworICB1bnNpZ25lZCBpbnQgZWxlbWVudExldmVsOworICB3Y2hhcl90IGVsZW1lbnRCdWxsZXQ7CisgIHVuc2lnbmVkIGJsYW5rTGluZToxOworfSBSZXN0cnVjdHVyZWRUZXh0RGF0YTsKKworc3RhdGljIGludAorcnN0QWRkTGluZSAoY29uc3Qgd2NoYXJfdCAqbGluZSwgUmVzdHJ1Y3R1cmVkVGV4dERhdGEgKnJzdCkgeworICBpZiAoKmxpbmUpIHsKKyAgICByc3QtPmJsYW5rTGluZSA9IDA7CisgIH0gZWxzZSBpZiAocnN0LT5ibGFua0xpbmUpIHsKKyAgICByZXR1cm4gMTsKKyAgfSBlbHNlIHsKKyAgICByc3QtPmJsYW5rTGluZSA9IDE7CisgIH0KKworICByZXR1cm4gd3JpdGVMaW5lKGxpbmUpOworfQorCitzdGF0aWMgaW50Cityc3RBZGRCbGFua0xpbmUgKFJlc3RydWN0dXJlZFRleHREYXRhICpyc3QpIHsKKyAgcmV0dXJuIHJzdEFkZExpbmUoV1NfQygiIiksIHJzdCk7Cit9CisKK3N0YXRpYyBpbnQKK3JzdFdyaXRlTGluZSAoY29uc3Qgd2NoYXJfdCAqbGluZSwgdm9pZCAqZGF0YSkgeworICBSZXN0cnVjdHVyZWRUZXh0RGF0YSAqcnN0ID0gZGF0YTsKKworICBjb25zdCB1bnNpZ25lZCBpbnQgaW5kZW50ID0gMjsKKyAgY29uc3QgdW5zaWduZWQgaW50IGNvdW50ID0gaW5kZW50ICogcnN0LT5lbGVtZW50TGV2ZWw7CisgIHNpemVfdCBsZW5ndGggPSB3Y3NsZW4obGluZSk7CisgIHdjaGFyX3QgYnVmZmVyW2NvdW50ICsgbGVuZ3RoICsgMV07CisKKyAgaWYgKHJzdC0+ZWxlbWVudExldmVsID4gMCkgeworICAgIHdtZW1zZXQoYnVmZmVyLCBXQ19DKCcgJyksIGNvdW50KTsKKyAgICBidWZmZXJbY291bnQgLSBpbmRlbnRdID0gcnN0LT5lbGVtZW50QnVsbGV0OworICAgIHJzdC0+ZWxlbWVudEJ1bGxldCA9IFdDX0MoJyAnKTsKKworICAgIHdtZW1jcHkoJmJ1ZmZlcltjb3VudF0sIGxpbmUsIChsZW5ndGggKyAxKSk7CisgICAgbGluZSA9IGJ1ZmZlcjsKKyAgfQorCisgIHJldHVybiByc3RBZGRMaW5lKGxpbmUsIHJzdCk7Cit9CisKK3N0YXRpYyBpbnQKK3JzdFdyaXRlSGVhZGVyIChjb25zdCB3Y2hhcl90ICp0ZXh0LCB1bnNpZ25lZCBpbnQgbGV2ZWwsIHZvaWQgKmRhdGEpIHsKKyAgUmVzdHJ1Y3R1cmVkVGV4dERhdGEgKnJzdCA9IGRhdGE7CisKKyAgaWYgKGxldmVsID4gKHJzdC0+aGVhZGVyTGV2ZWwgKyAxKSkgeworICAgIGxldmVsID0gcnN0LT5oZWFkZXJMZXZlbCArIDE7CisgIH0gZWxzZSB7CisgICAgcnN0LT5oZWFkZXJMZXZlbCA9IGxldmVsOworICB9CisKKyAgc3RhdGljIGNvbnN0IHdjaGFyX3QgY2hhcmFjdGVyc1tdID0geworICAgIFdDX0MoJz0nKSwgV0NfQygnLScpLCBXQ19DKCd+JykKKyAgfTsKKworICBzaXplX3QgbGVuZ3RoID0gd2NzbGVuKHRleHQpOworICB3Y2hhcl90IHVuZGVybGluZVtsZW5ndGggKyAxXTsKKworICB3bWVtc2V0KHVuZGVybGluZSwgY2hhcmFjdGVyc1tsZXZlbF0sIGxlbmd0aCk7CisgIHVuZGVybGluZVtsZW5ndGhdID0gMDsKKworICBpZiAoIXJzdEFkZExpbmUodGV4dCwgcnN0KSkgcmV0dXJuIDA7CisgIGlmICghcnN0QWRkTGluZSh1bmRlcmxpbmUsIHJzdCkpIHJldHVybiAwOworICBpZiAoIXJzdEFkZEJsYW5rTGluZShyc3QpKSByZXR1cm4gMDsKKworICBpZiAobGV2ZWwgPT0gMCkgeworICAgIGlmICghcnN0QWRkTGluZShXU19DKCIuLiBjb250ZW50czo6IiksIHJzdCkpIHJldHVybiAwOworICAgIGlmICghcnN0QWRkQmxhbmtMaW5lKHJzdCkpIHJldHVybiAwOworICB9CisKKyAgcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQKK3JzdEJlZ2luRWxlbWVudCAodW5zaWduZWQgaW50IGxldmVsLCB2b2lkICpkYXRhKSB7CisgIFJlc3RydWN0dXJlZFRleHREYXRhICpyc3QgPSBkYXRhOworCisgIHN0YXRpYyBjb25zdCB3Y2hhcl90IGJ1bGxldHNbXSA9IHsKKyAgICBXQ19DKCcqJyksIFdDX0MoJysnKSwgV0NfQygnbycpCisgIH07CisKKyAgcnN0LT5lbGVtZW50TGV2ZWwgPSBsZXZlbDsKKyAgcnN0LT5lbGVtZW50QnVsbGV0ID0gYnVsbGV0c1tsZXZlbCAtIDFdOworCisgIGlmICghcnN0QWRkQmxhbmtMaW5lKHJzdCkpIHJldHVybiAwOworICByZXR1cm4gMTsKK30KKworc3RhdGljIGludAorcnN0RW5kTGlzdCAodm9pZCAqZGF0YSkgeworICBSZXN0cnVjdHVyZWRUZXh0RGF0YSAqcnN0ID0gZGF0YTsKKworICByc3QtPmVsZW1lbnRMZXZlbCA9IDA7CisgIGlmICghcnN0QWRkQmxhbmtMaW5lKHJzdCkpIHJldHVybiAwOworICByZXR1cm4gMTsKK30KKworc3RhdGljIGNvbnN0IEtleVRhYmxlTGlzdE1ldGhvZHMgcnN0TWV0aG9kcyA9IHsKKyAgLndyaXRlSGVhZGVyID0gcnN0V3JpdGVIZWFkZXIsCisgIC5iZWdpbkVsZW1lbnQgPSByc3RCZWdpbkVsZW1lbnQsCisgIC5lbmRMaXN0ID0gcnN0RW5kTGlzdAorfTsKKworaW50CittYWluIChpbnQgYXJnYywgY2hhciAqYXJndltdKSB7CisgIFByb2dyYW1FeGl0U3RhdHVzIGV4aXRTdGF0dXMgPSBQUk9HX0VYSVRfU1VDQ0VTUzsKKworICB7CisgICAgY29uc3QgQ29tbWFuZExpbmVEZXNjcmlwdG9yIGRlc2NyaXB0b3IgPSB7CisgICAgICAub3B0aW9ucyA9ICZwcm9ncmFtT3B0aW9ucywKKyAgICAgIC5hcHBsaWNhdGlvbk5hbWUgPSAiYnJsdHR5LWt0YiIsCisKKyAgICAgIC51c2FnZSA9IHsKKyAgICAgICAgLnB1cnBvc2UgPSBzdHJ0ZXh0KCJjaGVjayBhIGtleSB0YWJsZSwgbGlzdCB0aGUga2V5IG5hZW1zIGl0IGNhbiB1c2UsIG9yIHdyaXRlIHRoZSBrZXkgYmluZGluZ3MgaXQgZGVmaW5lcyBpbiB1c2VmdWwgZm9ybWF0cy4iKSwKKyAgICAgICAgLnBhcmFtZXRlcnMgPSAidGFibGUtbmFtZSIsCisgICAgICB9CisgICAgfTsKKworICAgIFBST0NFU1NfT1BUSU9OUyhkZXNjcmlwdG9yLCBhcmdjLCBhcmd2KTsKKyAgfQorCisgIGRyaXZlck9iamVjdCA9IE5VTEw7CisKKyAgaWYgKGFyZ2MpIHsKKyAgICBjb25zdCBjaGFyICp0YWJsZU5hbWUgPSAoYXJnYy0tLCAqYXJndisrKTsKKyAgICBLZXlUYWJsZURlc2NyaXB0b3Iga3RkOworICAgIGludCBnb3RLZXlUYWJsZURlc2NyaXB0b3I7CisKKyAgICB7CisgICAgICBjb25zdCBjaGFyICpmaWxlID0gbG9jYXRlUGF0aE5hbWUodGFibGVOYW1lKTsKKyAgICAgIGNvbnN0IGNoYXIgKmRlbGltaXRlciA9IHN0cnJjaHIoZmlsZSwgJy4nKTsKKyAgICAgIHNpemVfdCBsZW5ndGggPSBkZWxpbWl0ZXI/IChkZWxpbWl0ZXIgLSBmaWxlKTogc3RybGVuKGZpbGUpOworICAgICAgY2hhciBuYW1lW2xlbmd0aCArIDFdOworCisgICAgICBtZW1jcHkobmFtZSwgZmlsZSwgbGVuZ3RoKTsKKyAgICAgIG5hbWVbbGVuZ3RoXSA9IDA7CisKKyAgICAgIGdvdEtleVRhYmxlRGVzY3JpcHRvciA9IGdldEtleVRhYmxlRGVzY3JpcHRvcigma3RkLCBuYW1lKTsKKyAgICB9CisKKyAgICBpZiAoZ290S2V5VGFibGVEZXNjcmlwdG9yKSB7CisgICAgICBpZiAob3B0X2xpc3RLZXlOYW1lcykgeworICAgICAgICBpZiAoIWxpc3RLZXlOYW1lcyhrdGQubmFtZXMsIGhscFdyaXRlTGluZSwgTlVMTCkpIHsKKyAgICAgICAgICBleGl0U3RhdHVzID0gUFJPR19FWElUX0ZBVEFMOworICAgICAgICB9CisgICAgICB9CisKKyAgICAgIGlmIChleGl0U3RhdHVzID09IFBST0dfRVhJVF9TVUNDRVNTKSB7CisgICAgICAgIEtleVRhYmxlICprZXlUYWJsZSA9IGNvbXBpbGVLZXlUYWJsZShrdGQucGF0aCwga3RkLm5hbWVzKTsKKworICAgICAgICBpZiAoa2V5VGFibGUpIHsKKyAgICAgICAgICBpZiAob3B0X2F1ZGl0KSB7CisgICAgICAgICAgICBpZiAoIWF1ZGl0S2V5VGFibGUoa2V5VGFibGUsIGt0ZC5wYXRoKSkgeworICAgICAgICAgICAgICBleGl0U3RhdHVzID0gUFJPR19FWElUX0ZBVEFMOworICAgICAgICAgICAgfQorICAgICAgICAgIH0KKworICAgICAgICAgIGlmIChvcHRfbGlzdEhlbHBTY3JlZW4pIHsKKyAgICAgICAgICAgIGlmICghbGlzdEtleVRhYmxlKGtleVRhYmxlLCBOVUxMLCBobHBXcml0ZUxpbmUsIE5VTEwpKSB7CisgICAgICAgICAgICAgIGV4aXRTdGF0dXMgPSBQUk9HX0VYSVRfRkFUQUw7CisgICAgICAgICAgICB9CisgICAgICAgICAgfQorCisgICAgICAgICAgaWYgKG9wdF9saXN0UmVzdHJ1Y3R1cmVkVGV4dCkgeworICAgICAgICAgICAgUmVzdHJ1Y3R1cmVkVGV4dERhdGEgcnN0ID0geworICAgICAgICAgICAgICAuaGVhZGVyTGV2ZWwgPSAwLAorICAgICAgICAgICAgICAuZWxlbWVudExldmVsID0gMCwKKyAgICAgICAgICAgICAgLmVsZW1lbnRCdWxsZXQgPSBXQ19DKCcgJyksCisgICAgICAgICAgICAgIC5ibGFua0xpbmUgPSAwCisgICAgICAgICAgICB9OworCisgICAgICAgICAgICBpZiAoIWxpc3RLZXlUYWJsZShrZXlUYWJsZSwgJnJzdE1ldGhvZHMsIHJzdFdyaXRlTGluZSwgJnJzdCkpIHsKKyAgICAgICAgICAgICAgZXhpdFN0YXR1cyA9IFBST0dfRVhJVF9GQVRBTDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9CisKKyAgICAgICAgICBkZXN0cm95S2V5VGFibGUoa2V5VGFibGUpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgIGV4aXRTdGF0dXMgPSBQUk9HX0VYSVRfRkFUQUw7CisgICAgICAgIH0KKyAgICAgIH0KKworICAgICAgZnJlZShrdGQucGF0aCk7CisgICAgfSBlbHNlIHsKKyAgICAgIGV4aXRTdGF0dXMgPSBQUk9HX0VYSVRfRkFUQUw7CisgICAgfQorICB9IGVsc2UgeworICAgIGxvZ01lc3NhZ2UoTE9HX0VSUiwgIm1pc3Npbmcga2V5IHRhYmxlIG5hbWUiKTsKKyAgICBleGl0U3RhdHVzID0gUFJPR19FWElUX1NZTlRBWDsKKyAgfQorCisgIGlmIChkcml2ZXJPYmplY3QpIHVubG9hZFNoYXJlZE9iamVjdChkcml2ZXJPYmplY3QpOworICByZXR1cm4gZXhpdFN0YXR1czsKK30KKworI2luY2x1ZGUgInNjci5oIgorCitLZXlUYWJsZUNvbW1hbmRDb250ZXh0CitnZXRTY3JlZW5Db21tYW5kQ29udGV4dCAodm9pZCkgeworICByZXR1cm4gS1RCX0NUWF9ERUZBVUxUOworfQorCitpbnQKK2N1cnJlbnRWaXJ0dWFsVGVybWluYWwgKHZvaWQpIHsKKyAgcmV0dXJuIDA7Cit9CisKKyNpbmNsdWRlICJhbGVydC5oIgorCit2b2lkCithbGVydCAoQWxlcnRJZGVudGlmaWVyIGlkZW50aWZpZXIpIHsKK30KKwordm9pZAorc3BlYWtBbGVydFRleHQgKGNvbnN0IHdjaGFyX3QgKnRleHQpIHsKK30KKworI2luY2x1ZGUgImFwaV9jb250cm9sLmgiCisKK2NvbnN0IEFwaU1ldGhvZHMgYXBpOworCisjaW5jbHVkZSAibWVzc2FnZS5oIgorCitpbnQKK21lc3NhZ2UgKGNvbnN0IGNoYXIgKm1vZGUsIGNvbnN0IGNoYXIgKnRleHQsIE1lc3NhZ2VPcHRpb25zIG9wdGlvbnMpIHsKKyAgcmV0dXJuIDE7Cit9CmRpZmYgLS1naXQgYS9Qcm9ncmFtcy9icmx0dHktbHNjbWRzLmMgYi9Qcm9ncmFtcy9icmx0dHktbHNjbWRzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjFhMzcyMwotLS0gL2Rldi9udWxsCisrKyBiL1Byb2dyYW1zL2JybHR0eS1sc2NtZHMuYwpAQCAtMCwwICsxLDI2NyBAQAorLyoKKyAqIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisgKiAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisgKgorICogQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKKyNpbmNsdWRlICJwcm9sb2d1ZS5oIgorCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxjdHlwZS5oPgorCisjaW5jbHVkZSAicHJvZ3JhbS5oIgorI2luY2x1ZGUgImNtZGxpbmUuaCIKKyNpbmNsdWRlICJrdGJfY21kcy5oIgorI2luY2x1ZGUgImNtZC5oIgorCitCRUdJTl9PUFRJT05fVEFCTEUocHJvZ3JhbU9wdGlvbnMpCitFTkRfT1BUSU9OX1RBQkxFKHByb2dyYW1PcHRpb25zKQorCitzdGF0aWMgdm9pZAord3JpdGVDaGFyYWN0ZXIgKGNoYXIgY2hhcmFjdGVyKSB7CisgIHB1dGMoY2hhcmFjdGVyLCBzdGRvdXQpOworfQorCitzdGF0aWMgdm9pZAord3JpdGVDaGFyYWN0ZXJzIChjaGFyIGNoYXJhY3Rlciwgc2l6ZV90IGNvdW50KSB7CisgIHdoaWxlIChjb3VudCA+IDApIHsKKyAgICB3cml0ZUNoYXJhY3RlcihjaGFyYWN0ZXIpOworICAgIGNvdW50IC09IDE7CisgIH0KK30KKworc3RhdGljIHZvaWQKK2VuZExpbmUgKHZvaWQpIHsKKyAgd3JpdGVDaGFyYWN0ZXIoJ1xuJyk7Cit9CisKK3N0YXRpYyB2b2lkCit3cml0ZVN0cmluZyAoY29uc3QgY2hhciAqc3RyaW5nKSB7CisgIHdoaWxlICgqc3RyaW5nKSB3cml0ZUNoYXJhY3Rlcigqc3RyaW5nKyspOworfQorCitzdGF0aWMgY29uc3QgY2hhciBoZWFkZXJDaGFyYWN0ZXJzW10gPSB7J34nLCAnPScsICctJ307CitzdGF0aWMgdW5zaWduZWQgY2hhciBoZWFkZXJMZXZlbCA9IDA7CisKK3N0YXRpYyB2b2lkCitpbmNyZW1lbnRIZWFkZXJMZXZlbCAodm9pZCkgeworICBoZWFkZXJMZXZlbCArPSAxOworfQorCitzdGF0aWMgdm9pZAorZGVjcmVtZW50SGVhZGVyTGV2ZWwgKHZvaWQpIHsKKyAgaGVhZGVyTGV2ZWwgLT0gMTsKK30KKworc3RhdGljIHZvaWQKK3dyaXRlSGVhZGVyIChjb25zdCBjaGFyICpoZWFkZXIpIHsKKyAgY2hhciBoZWFkZXJDaGFyYWN0ZXIgPSBoZWFkZXJDaGFyYWN0ZXJzW2hlYWRlckxldmVsXTsKKyAgc2l6ZV90IGhlYWRlckxlbmd0aCA9IHN0cmxlbihoZWFkZXIpOworCisgIGlmIChoZWFkZXJMZXZlbCA9PSAwKSB7CisgICAgd3JpdGVDaGFyYWN0ZXJzKGhlYWRlckNoYXJhY3RlciwgaGVhZGVyTGVuZ3RoKTsKKyAgICBlbmRMaW5lKCk7CisgIH0KKworICB3cml0ZVN0cmluZyhoZWFkZXIpOworICBlbmRMaW5lKCk7CisKKyAgd3JpdGVDaGFyYWN0ZXJzKGhlYWRlckNoYXJhY3RlciwgaGVhZGVyTGVuZ3RoKTsKKyAgZW5kTGluZSgpOworICBlbmRMaW5lKCk7Cit9CisKK3ZvaWQKK2NvbW1hbmRHcm91cEhvb2tfaG90a2V5cyAoQ29tbWFuZEdyb3VwSG9va0RhdGEgKmRhdGEpIHsKK30KKwordm9pZAorY29tbWFuZEdyb3VwSG9va19rZXlib2FyZEZ1bmN0aW9ucyAoQ29tbWFuZEdyb3VwSG9va0RhdGEgKmRhdGEpIHsKK30KKworc3RhdGljIHZvaWQKK2xpc3RNb2RpZmllcnMgKGludCBpbmNsdWRlLCBjb25zdCBjaGFyICp0eXBlLCBpbnQgKnN0YXJ0ZWQsIGNvbnN0IENvbW1hbmRNb2RpZmllckVudHJ5ICptb2RpZmllcnMpIHsKKyAgaWYgKGluY2x1ZGUpIHsKKyAgICBpZiAoISpzdGFydGVkKSB7CisgICAgICAqc3RhcnRlZCA9IDE7CisgICAgICBwcmludGYoIlRoZSBmb2xsb3dpbmcgbW9kaWZpZXJzIG1heSBiZSBzcGVjaWZpZWQ6XG5cbiIpOworICAgIH0KKworICAgIHByaW50ZigiKiAlcyIsIHR5cGUpOworCisgICAgaWYgKG1vZGlmaWVycykgeworICAgICAgY29uc3QgQ29tbWFuZE1vZGlmaWVyRW50cnkgKm1vZGlmaWVyID0gbW9kaWZpZXJzOworICAgICAgY2hhciBwdW5jdHVhdGlvbiA9ICc6JzsKKworICAgICAgd2hpbGUgKG1vZGlmaWVyLT5uYW1lKSB7CisgICAgICAgIHByaW50ZigiJWMgJXMiLCBwdW5jdHVhdGlvbiwgbW9kaWZpZXItPm5hbWUpOworICAgICAgICBwdW5jdHVhdGlvbiA9ICcsJzsKKyAgICAgICAgbW9kaWZpZXIgKz0gMTsKKyAgICAgIH0KKyAgICB9CisKKyAgICBlbmRMaW5lKCk7CisgIH0KK30KKworc3RhdGljIHZvaWQKK3B1dENvbW1hbmQgKGNvbnN0IENvbW1hbmRFbnRyeSAqY29tbWFuZCkgeworICB7CisgICAgY29uc3QgY2hhciAqZGVzY3JpcHRpb24gPSBjb21tYW5kLT5kZXNjcmlwdGlvbjsKKworICAgIHByaW50ZigiLi4gXyVzOlxuXG4iLCBjb21tYW5kLT5uYW1lKTsKKyAgICBwcmludGYoIioqJXMqKiAtICIsIGNvbW1hbmQtPm5hbWUpOworCisgICAgd3JpdGVDaGFyYWN0ZXIodG91cHBlcigqZGVzY3JpcHRpb24rKykpOworICAgIHByaW50ZigiJXMuXG5cbiIsIGRlc2NyaXB0aW9uKTsKKyAgfQorCisgIHsKKyAgICBpbnQgc3RhcnRlZCA9IDA7CisKKyAgICBsaXN0TW9kaWZpZXJzKGNvbW1hbmQtPmlzT2Zmc2V0LCAiYW4gb2Zmc2V0IiwgJnN0YXJ0ZWQsIE5VTEwpOworICAgIGxpc3RNb2RpZmllcnMoY29tbWFuZC0+aXNDb2x1bW4sICJhIGNvbHVtbiBudW1iZXIiLCAmc3RhcnRlZCwgTlVMTCk7CisgICAgbGlzdE1vZGlmaWVycyhjb21tYW5kLT5pc0NoYXJhY3RlciwgImEgc2luZ2xlIGNoYXJhY3RlciIsICZzdGFydGVkLCBOVUxMKTsKKworICAgIGxpc3RNb2RpZmllcnMoCisgICAgICBjb21tYW5kLT5pc1RvZ2dsZSwgIlRvZ2dsZSIsICZzdGFydGVkLAorICAgICAgY29tbWFuZE1vZGlmaWVyVGFibGVfdG9nZ2xlCisgICAgKTsKKworICAgIGxpc3RNb2RpZmllcnMoCisgICAgICBjb21tYW5kLT5pc01vdGlvbiwgIk1vdGlvbiIsICZzdGFydGVkLAorICAgICAgY29tbWFuZE1vZGlmaWVyVGFibGVfbW90aW9uCisgICAgKTsKKworICAgIGxpc3RNb2RpZmllcnMoCisgICAgICBjb21tYW5kLT5pc1JvdywgIlJvdyIsICZzdGFydGVkLAorICAgICAgY29tbWFuZE1vZGlmaWVyVGFibGVfcm93CisgICAgKTsKKworICAgIGxpc3RNb2RpZmllcnMoCisgICAgICBjb21tYW5kLT5pc1ZlcnRpY2FsLCAiVmVydGljYWwiLCAmc3RhcnRlZCwKKyAgICAgIGNvbW1hbmRNb2RpZmllclRhYmxlX3ZlcnRpY2FsCisgICAgKTsKKworICAgIGxpc3RNb2RpZmllcnMoCisgICAgICBjb21tYW5kLT5pc0lucHV0LCAiSW5wdXQiLCAmc3RhcnRlZCwKKyAgICAgIGNvbW1hbmRNb2RpZmllclRhYmxlX2lucHV0CisgICAgKTsKKworICAgIGxpc3RNb2RpZmllcnMoCisgICAgICAoY29tbWFuZC0+aXNDaGFyYWN0ZXIgfHwgY29tbWFuZC0+aXNCcmFpbGxlKSwgIkNoYXJhY3RlciIsICZzdGFydGVkLAorICAgICAgY29tbWFuZE1vZGlmaWVyVGFibGVfY2hhcmFjdGVyCisgICAgKTsKKworICAgIGxpc3RNb2RpZmllcnMoCisgICAgICBjb21tYW5kLT5pc0JyYWlsbGUsICJCcmFpbGxlIiwgJnN0YXJ0ZWQsCisgICAgICBjb21tYW5kTW9kaWZpZXJUYWJsZV9icmFpbGxlCisgICAgKTsKKworICAgIGxpc3RNb2RpZmllcnMoCisgICAgICBjb21tYW5kLT5pc0tleWJvYXJkLCAiS2V5Ym9hcmQiLCAmc3RhcnRlZCwKKyAgICAgIGNvbW1hbmRNb2RpZmllclRhYmxlX2tleWJvYXJkCisgICAgKTsKKworICAgIGlmIChzdGFydGVkKSBlbmRMaW5lKCk7CisgIH0KK30KKworc3RhdGljIHZvaWQKK3B1dEdyb3VwIChjb25zdCBDb21tYW5kR3JvdXBFbnRyeSAqZ3JvdXApIHsKKyAgaW5jcmVtZW50SGVhZGVyTGV2ZWwoKTsKKyAgd3JpdGVIZWFkZXIoZ3JvdXAtPm5hbWUpOworCisgIHNpemVfdCBjb3VudCA9IGdyb3VwLT5jb21tYW5kcy5jb3VudDsKKyAgY29uc3QgQ29tbWFuZEVudHJ5ICpjb21tYW5kc1tjb3VudF07CisKKyAgZm9yICh1bnNpZ25lZCBpbnQgaW5kZXg9MDsgaW5kZXg8Y291bnQ7IGluZGV4Kz0xKSB7CisgICAgY29tbWFuZHNbaW5kZXhdID0gZmluZENvbW1hbmRFbnRyeShncm91cC0+Y29tbWFuZHMudGFibGVbaW5kZXhdLmNvZGUpOworICB9CisKKyAgZm9yICh1bnNpZ25lZCBpbnQgaW5kZXg9MDsgaW5kZXg8Y291bnQ7IGluZGV4Kz0xKSB7CisgICAgcHJpbnRmKCIqIGAlc2BfXG4iLCBjb21tYW5kc1tpbmRleF0tPm5hbWUpOworICB9CisgIHByaW50ZigiXG4iKTsKKworICBmb3IgKHVuc2lnbmVkIGludCBpbmRleD0wOyBpbmRleDxjb3VudDsgaW5kZXgrPTEpIHsKKyAgICBwdXRDb21tYW5kKGNvbW1hbmRzW2luZGV4XSk7CisgIH0KKworICBkZWNyZW1lbnRIZWFkZXJMZXZlbCgpOworfQorCitzdGF0aWMgdm9pZAorcHV0R3JvdXBzICh2b2lkKSB7CisgIGNvbnN0IENvbW1hbmRHcm91cEVudHJ5ICpncm91cCA9IGNvbW1hbmRHcm91cFRhYmxlOworICBjb25zdCBDb21tYW5kR3JvdXBFbnRyeSAqZW5kID0gZ3JvdXAgKyBjb21tYW5kR3JvdXBDb3VudDsKKworICB3aGlsZSAoZ3JvdXAgPCBlbmQpIHsKKyAgICBwdXRHcm91cChncm91cCk7CisgICAgZ3JvdXAgKz0gMTsKKyAgfQorfQorCitzdGF0aWMgaW50Citjb21wYXJlQ29tbWFuZHMgKGNvbnN0IHZvaWQgKmVsZW1lbnQxLCBjb25zdCB2b2lkICplbGVtZW50MikgeworICBjb25zdCBDb21tYW5kRW50cnkgKmNvbnN0ICpjb21tYW5kMSA9IGVsZW1lbnQxOworICBjb25zdCBDb21tYW5kRW50cnkgKmNvbnN0ICpjb21tYW5kMiA9IGVsZW1lbnQyOworICByZXR1cm4gc3RyY21wKCgqY29tbWFuZDEpLT5uYW1lLCAoKmNvbW1hbmQyKS0+bmFtZSk7Cit9CisKK3N0YXRpYyB2b2lkCitwdXRDb21tYW5kSW5kZXggKHZvaWQpIHsKKyAgaW5jcmVtZW50SGVhZGVyTGV2ZWwoKTsKKyAgd3JpdGVIZWFkZXIoIkFscGhhYmV0aWNhbCBDb21tYW5kIEluZGV4Iik7CisKKyAgaW50IGNvdW50ID0gZ2V0Q29tbWFuZENvdW50KCk7CisgIGNvbnN0IENvbW1hbmRFbnRyeSAqY29tbWFuZHNbY291bnRdOworCisgIGZvciAoaW50IGluZGV4PTA7IGluZGV4PGNvdW50OyBpbmRleCs9MSkgeworICAgIGNvbW1hbmRzW2luZGV4XSA9ICZjb21tYW5kVGFibGVbaW5kZXhdOworICB9CisgIHFzb3J0KGNvbW1hbmRzLCBjb3VudCwgc2l6ZW9mKGNvbW1hbmRzWzBdKSwgY29tcGFyZUNvbW1hbmRzKTsKKworICBmb3IgKGludCBpbmRleD0wOyBpbmRleDxjb3VudDsgaW5kZXgrPTEpIHsKKyAgICBwcmludGYoIiogYCVzYF9cbiIsIGNvbW1hbmRzW2luZGV4XS0+bmFtZSk7CisgIH0KKworICBwcmludGYoIlxuIik7CisgIGRlY3JlbWVudEhlYWRlckxldmVsKCk7Cit9CisKK2ludAorbWFpbiAoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkgeworICB7CisgICAgY29uc3QgQ29tbWFuZExpbmVEZXNjcmlwdG9yIGRlc2NyaXB0b3IgPSB7CisgICAgICAub3B0aW9ucyA9ICZwcm9ncmFtT3B0aW9ucywKKyAgICAgIC5hcHBsaWNhdGlvbk5hbWUgPSAiYnJsdHR5LWxzY21kcyIsCisKKyAgICAgIC51c2FnZSA9IHsKKyAgICAgICAgLnB1cnBvc2UgPSBzdHJ0ZXh0KCJXcml0ZSBhIGJybHR0eSBjb21tYW5kIHJlZmVyZW5jZSBpbiByZVN0cnVjdHVyZWRUZXh0LiIpLAorICAgICAgfQorICAgIH07CisKKyAgICBQUk9DRVNTX09QVElPTlMoZGVzY3JpcHRvciwgYXJnYywgYXJndik7CisgIH0KKworICB3cml0ZUhlYWRlcigiVGhlIEJSTFRUWSBDb21tYW5kIFJlZmVyZW5jZSIpOworICB3cml0ZVN0cmluZygiLi4gY29udGVudHM6OlxuXG4iKTsKKworICBwdXRDb21tYW5kSW5kZXgoKTsKKyAgcHV0R3JvdXBzKCk7CisgIHJldHVybiBQUk9HX0VYSVRfU1VDQ0VTUzsKK30KZGlmZiAtLWdpdCBhL1Byb2dyYW1zL2JybHR0eS1sc2luYy5jIGIvUHJvZ3JhbXMvYnJsdHR5LWxzaW5jLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmNmMGQ2YwotLS0gL2Rldi9udWxsCisrKyBiL1Byb2dyYW1zL2JybHR0eS1sc2luYy5jCkBAIC0wLDAgKzEsMTI3IEBACisvKgorICogQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyAqICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyAqCisgKiBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorICoKKyAqIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyAqCisgKiBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisgKi8KKworI2luY2x1ZGUgInByb2xvZ3VlLmgiCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHNlYXJjaC5oPgorCisjaW5jbHVkZSAibG9nLmgiCisjaW5jbHVkZSAicHJvZ3JhbS5oIgorI2luY2x1ZGUgImNtZGxpbmUuaCIKKyNpbmNsdWRlICJmaWxlLmgiCisKK0JFR0lOX09QVElPTl9UQUJMRShwcm9ncmFtT3B0aW9ucykKK0VORF9PUFRJT05fVEFCTEUocHJvZ3JhbU9wdGlvbnMpCisKK3N0YXRpYyB2b2lkCitub01lbW9yeSAodm9pZCkgeworICBmcHJpbnRmKHN0ZGVyciwgIiVzOiBpbnN1ZmZpY2llbnQgbWVtb3J5XG4iLCBwcm9ncmFtTmFtZSk7CisgIGV4aXQoUFJPR19FWElUX0ZBVEFMKTsKK30KKworc3RhdGljIGludAorY29tcGFyZVN0cmluZ3MgKGNvbnN0IHZvaWQgKnN0cmluZzEsIGNvbnN0IHZvaWQgKnN0cmluZzIpIHsKKyAgcmV0dXJuIHN0cmNtcChzdHJpbmcxLCBzdHJpbmcyKTsKK30KKworc3RhdGljIHZvaWQKK2xvZ0ZpbGVOYW1lIChjb25zdCBjaGFyICpuYW1lLCB2b2lkICpkYXRhKSB7CisgIHN0YXRpYyB2b2lkICpuYW1lc1RyZWUgPSBOVUxMOworCisgIGlmICghdGZpbmQobmFtZSwgJm5hbWVzVHJlZSwgY29tcGFyZVN0cmluZ3MpKSB7CisgICAgbmFtZSA9IHN0cmR1cChuYW1lKTsKKyAgICBpZiAoIW5hbWUpIG5vTWVtb3J5KCk7CisgICAgaWYgKCF0c2VhcmNoKG5hbWUsICZuYW1lc1RyZWUsIGNvbXBhcmVTdHJpbmdzKSkgbm9NZW1vcnkoKTsKKyAgICBwcmludGYoIiVzXG4iLCBuYW1lKTsKKyAgfQorfQorCitzdGF0aWMgREFUQV9DT05ESVRJT05fVEVTVEVSKHRlc3RDb25kaXRpb25PcGVyYW5kKSB7CisgIHJldHVybiAxOworfQorCitzdGF0aWMgREFUQV9PUEVSQU5EU19QUk9DRVNTT1IocHJvY2Vzc1Vua25vd25EaXJlY3RpdmUpIHsKKyAgRGF0YU9wZXJhbmQgZGlyZWN0aXZlOworCisgIGlmIChnZXREYXRhT3BlcmFuZChmaWxlLCAmZGlyZWN0aXZlLCBOVUxMKSkgeworICAgIGlmIChkaXJlY3RpdmUubGVuZ3RoID49IDIpIHsKKyAgICAgIGlmIChpc0tleXdvcmQoV1NfQygiaWYiKSwgZGlyZWN0aXZlLmNoYXJhY3RlcnMsIDIpKSB7CisgICAgICAgIHJldHVybiBwcm9jZXNzQ29uZGl0aW9uT3BlcmFuZHMoZmlsZSwgdGVzdENvbmRpdGlvbk9wZXJhbmQsIDAsIE5VTEwsIGRhdGEpOworICAgICAgfQorICAgIH0KKyAgfQorCisgIHJldHVybiAxOworfQorCitzdGF0aWMgREFUQV9PUEVSQU5EU19QUk9DRVNTT1IocHJvY2Vzc09wZXJhbmRzKSB7CisgIEJFR0lOX0RBVEFfRElSRUNUSVZFX1RBQkxFCisgICAgREFUQV9ORVNUSU5HX0RJUkVDVElWRVMsCisgICAgREFUQV9DT05ESVRJT05fRElSRUNUSVZFUywKKyAgICBEQVRBX1ZBUklBQkxFX0RJUkVDVElWRVMsCisgICAge05VTEwsIHByb2Nlc3NVbmtub3duRGlyZWN0aXZlfSwKKyAgRU5EX0RBVEFfRElSRUNUSVZFX1RBQkxFCisKKyAgcmV0dXJuIHByb2Nlc3NEaXJlY3RpdmVPcGVyYW5kKGZpbGUsICZkaXJlY3RpdmVzLCAiYXR0cmlidXRlcyB0YWJsZSBkaXJlY3RpdmUiLCBkYXRhKTsKK30KKworaW50CittYWluIChpbnQgYXJnYywgY2hhciAqYXJndltdKSB7CisgIFByb2dyYW1FeGl0U3RhdHVzIGV4aXRTdGF0dXM7CisKKyAgeworICAgIGNvbnN0IENvbW1hbmRMaW5lRGVzY3JpcHRvciBkZXNjcmlwdG9yID0geworICAgICAgLm9wdGlvbnMgPSAmcHJvZ3JhbU9wdGlvbnMsCisgICAgICAuYXBwbGljYXRpb25OYW1lID0gImJybHR0eS1sc2luYyIsCisKKyAgICAgIC51c2FnZSA9IHsKKyAgICAgICAgLnB1cnBvc2UgPSBzdHJ0ZXh0KCJMaXN0IHRoZSBwYXRocyB0byBhIGRhdGEgZmlsZSBhbmQgdGhvc2Ugd2hpY2ggaXQgcmVjdXJzaXZlbHkgaW5jbHVkZXMuIiksCisgICAgICAgIC5wYXJhbWV0ZXJzID0gImZpbGUgLi4uIiwKKyAgICAgIH0KKyAgICB9OworCisgICAgUFJPQ0VTU19PUFRJT05TKGRlc2NyaXB0b3IsIGFyZ2MsIGFyZ3YpOworICB9CisKKyAgaWYgKGFyZ2MgPT0gMCkgeworICAgIGxvZ01lc3NhZ2UoTE9HX0VSUiwgIm1pc3NpbmcgZmlsZSIpOworICAgIGV4aXRTdGF0dXMgPSBQUk9HX0VYSVRfU1lOVEFYOworICB9IGVsc2UgeworICAgIGV4aXRTdGF0dXMgPSBQUk9HX0VYSVRfU1VDQ0VTUzsKKworICAgIGRvIHsKKyAgICAgIGNvbnN0IGNoYXIgKnBhdGggPSAqYXJndisrOworICAgICAgYXJnYyAtPSAxOworCisgICAgICBjb25zdCBEYXRhRmlsZVBhcmFtZXRlcnMgcGFyYW1ldGVycyA9IHsKKyAgICAgICAgLnByb2Nlc3NPcGVyYW5kcyA9IHByb2Nlc3NPcGVyYW5kcywKKyAgICAgICAgLmxvZ0ZpbGVOYW1lID0gbG9nRmlsZU5hbWUKKyAgICAgIH07CisKKyAgICAgIGlmICh0ZXN0UHJvZ3JhbVBhdGgocGF0aCkpIHsKKyAgICAgICAgbG9nRmlsZU5hbWUocGF0aCwgcGFyYW1ldGVycy5kYXRhKTsKKyAgICAgIH0gZWxzZSBpZiAoIXByb2Nlc3NEYXRhRmlsZShwYXRoLCAmcGFyYW1ldGVycykpIHsKKyAgICAgICAgZXhpdFN0YXR1cyA9IFBST0dfRVhJVF9TRU1BTlRJQzsKKyAgICAgIH0KKyAgICB9IHdoaWxlIChhcmdjKTsKKyAgfQorCisgIHJldHVybiBleGl0U3RhdHVzOworfQpkaWZmIC0tZ2l0IGEvUHJvZ3JhbXMvYnJsdHR5LW1vcnNlLmMgYi9Qcm9ncmFtcy9icmx0dHktbW9yc2UuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MjFkMDk2Ci0tLSAvZGV2L251bGwKKysrIGIvUHJvZ3JhbXMvYnJsdHR5LW1vcnNlLmMKQEAgLTAsMCArMSwyNTEgQEAKKy8qCisgKiBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorICogICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorICoKKyAqIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorICoKKyAqIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyAqLworCisjaW5jbHVkZSAicHJvbG9ndWUuaCIKKworI2luY2x1ZGUgPHN0ZGlvLmg+CisKKyNpbmNsdWRlICJsb2cuaCIKKyNpbmNsdWRlICJjbWRsaW5lLmgiCisjaW5jbHVkZSAicHJlZnMuaCIKKyNpbmNsdWRlICJwYXJzZS5oIgorI2luY2x1ZGUgInR1bmVfdXRpbHMuaCIKKyNpbmNsdWRlICJub3Rlcy5oIgorI2luY2x1ZGUgImRhdGFmaWxlLmgiCisjaW5jbHVkZSAibW9yc2UuaCIKKworc3RhdGljIGludCBvcHRfZnJvbUZpbGVzOworc3RhdGljIGNoYXIgKm9wdF9tb3JzZVBpdGNoOworc3RhdGljIGNoYXIgKm9wdF9tb3JzZVNwZWVkOworc3RhdGljIGludCBvcHRfbW9yc2VHcm91cHM7CitzdGF0aWMgY2hhciAqb3B0X291dHB1dFZvbHVtZTsKK3N0YXRpYyBjaGFyICpvcHRfdHVuZURldmljZTsKKworI2lmZGVmIEhBVkVfTUlESV9TVVBQT1JUCitzdGF0aWMgY2hhciAqb3B0X21pZGlJbnN0cnVtZW50OworI2VuZGlmIC8qIEhBVkVfTUlESV9TVVBQT1JUICovCisKK0JFR0lOX09QVElPTl9UQUJMRShwcm9ncmFtT3B0aW9ucykKKyAgeyAud29yZCA9ICJmaWxlcyIsCisgICAgLmxldHRlciA9ICdmJywKKyAgICAuc2V0dGluZy5mbGFnID0gJm9wdF9mcm9tRmlsZXMsCisgICAgLmRlc2NyaXB0aW9uID0gIlVzZSBmaWxlcyByYXRoZXIgdGhhbiBjb21tYW5kIGxpbmUgYXJndW1lbnRzLiIKKyAgfSwKKworICB7IC53b3JkID0gInRvbmUiLAorICAgIC5sZXR0ZXIgPSAndCcsCisgICAgLmFyZ3VtZW50ID0gImZyZXF1ZW5jeSIsCisgICAgLnNldHRpbmcuc3RyaW5nID0gJm9wdF9tb3JzZVBpdGNoLAorICAgIC5kZXNjcmlwdGlvbiA9ICJUaGUgcGl0Y2ggb2YgdGhlIHRvbmUuIgorICB9LAorCisgIHsgLndvcmQgPSAic3BlZWQiLAorICAgIC5sZXR0ZXIgPSAncycsCisgICAgLmFyZ3VtZW50ID0gIndvcmRzUGVyTWludXRlIiwKKyAgICAuc2V0dGluZy5zdHJpbmcgPSAmb3B0X21vcnNlU3BlZWQsCisgICAgLmRlc2NyaXB0aW9uID0gIk1vcnNlIHNwZWVkICh3b3JkcyBwZXIgbWludXRlKS4iCisgIH0sCisKKyAgeyAud29yZCA9ICJncm91cHMiLAorICAgIC5sZXR0ZXIgPSAnZycsCisgICAgLnNldHRpbmcuZmxhZyA9ICZvcHRfbW9yc2VHcm91cHMsCisgICAgLmRlc2NyaXB0aW9uID0gIlNwZWVkIGlzIGluIGdyb3VwcyAocmF0aGVyIHRoYW4gd29yZHMpIHBlciBtaW51dGUuIgorICB9LAorCisgIHsgLndvcmQgPSAidm9sdW1lIiwKKyAgICAubGV0dGVyID0gJ3YnLAorICAgIC5hcmd1bWVudCA9ICJsb3VkbmVzcyIsCisgICAgLnNldHRpbmcuc3RyaW5nID0gJm9wdF9vdXRwdXRWb2x1bWUsCisgICAgLmRlc2NyaXB0aW9uID0gIk91dHB1dCB2b2x1bWUgKHBlcmNlbnRhZ2UpLiIKKyAgfSwKKworICB7IC53b3JkID0gImRldmljZSIsCisgICAgLmxldHRlciA9ICdkJywKKyAgICAuYXJndW1lbnQgPSAiZGV2aWNlIiwKKyAgICAuc2V0dGluZy5zdHJpbmcgPSAmb3B0X3R1bmVEZXZpY2UsCisgICAgLmRlc2NyaXB0aW9uID0gIk5hbWUgb2YgdHVuZSBkZXZpY2UuIgorICB9LAorCisjaWZkZWYgSEFWRV9QQ01fU1VQUE9SVAorICB7IC53b3JkID0gInBjbS1kZXZpY2UiLAorICAgIC5sZXR0ZXIgPSAncCcsCisgICAgLmFyZ3VtZW50ID0gImRldmljZSIsCisgICAgLnNldHRpbmcuc3RyaW5nID0gJm9wdF9wY21EZXZpY2UsCisgICAgLmRlc2NyaXB0aW9uID0gIkRldmljZSBzcGVjaWZpZXIgZm9yIHNvdW5kY2FyZCBkaWdpdGFsIGF1ZGlvLiIKKyAgfSwKKyNlbmRpZiAvKiBIQVZFX1BDTV9TVVBQT1JUICovCisKKyNpZmRlZiBIQVZFX01JRElfU1VQUE9SVAorICB7IC53b3JkID0gIm1pZGktZGV2aWNlIiwKKyAgICAubGV0dGVyID0gJ20nLAorICAgIC5hcmd1bWVudCA9ICJkZXZpY2UiLAorICAgIC5zZXR0aW5nLnN0cmluZyA9ICZvcHRfbWlkaURldmljZSwKKyAgICAuZGVzY3JpcHRpb24gPSAiRGV2aWNlIHNwZWNpZmllciBmb3IgdGhlIE11c2ljYWwgSW5zdHJ1bWVudCBEaWdpdGFsIEludGVyZmFjZS4iCisgIH0sCisKKyAgeyAud29yZCA9ICJpbnN0cnVtZW50IiwKKyAgICAubGV0dGVyID0gJ2knLAorICAgIC5hcmd1bWVudCA9ICJpbnN0cnVtZW50IiwKKyAgICAuc2V0dGluZy5zdHJpbmcgPSAmb3B0X21pZGlJbnN0cnVtZW50LAorICAgIC5kZXNjcmlwdGlvbiA9ICJOYW1lIG9mIE1JREkgaW5zdHJ1bWVudC4iCisgIH0sCisjZW5kaWYgLyogSEFWRV9NSURJX1NVUFBPUlQgKi8KK0VORF9PUFRJT05fVEFCTEUocHJvZ3JhbU9wdGlvbnMpCisKK3N0YXRpYworREFUQV9PUEVSQU5EU19QUk9DRVNTT1IocHJvY2Vzc01vcnNlTGluZSkgeworICBNb3JzZU9iamVjdCAqbW9yc2UgPSBkYXRhOworCisgIERhdGFPcGVyYW5kIHRleHQ7CisgIGdldFRleHRSZW1haW5pbmcoZmlsZSwgJnRleHQpOworCisgIGlmICghYWRkTW9yc2VDaGFyYWN0ZXJzKG1vcnNlLCB0ZXh0LmNoYXJhY3RlcnMsIHRleHQubGVuZ3RoKSkgcmV0dXJuIDA7CisgIGlmICghYWRkTW9yc2VTcGFjZShtb3JzZSkpIHJldHVybiAwOworICByZXR1cm4gMTsKK30KKworc3RhdGljIHZvaWQKK2V4aXRNb3JzZU9iamVjdCAodm9pZCAqZGF0YSkgeworICBNb3JzZU9iamVjdCAqbW9yc2UgPSBkYXRhOworICBkZXN0cm95TW9yc2VPYmplY3QobW9yc2UpOworfQorCitpbnQKK21haW4gKGludCBhcmdjLCBjaGFyICphcmd2W10pIHsKKyAgeworICAgIGNvbnN0IENvbW1hbmRMaW5lRGVzY3JpcHRvciBkZXNjcmlwdG9yID0geworICAgICAgLm9wdGlvbnMgPSAmcHJvZ3JhbU9wdGlvbnMsCisgICAgICAuYXBwbGljYXRpb25OYW1lID0gImJybHR0eS1tb3JzZSIsCisKKyAgICAgIC51c2FnZSA9IHsKKyAgICAgICAgLnB1cnBvc2UgPSBzdHJ0ZXh0KCJUcmFuc2xhdGUgdGV4dCBpbnRvIE1vcnNlIENvZGUgdG9uZXMuIiksCisgICAgICAgIC5wYXJhbWV0ZXJzID0gInRleHQgLi4uIHwgLWYgW3tmaWxlIHwgLX0gLi4uXSIsCisgICAgICB9CisgICAgfTsKKworICAgIFBST0NFU1NfT1BUSU9OUyhkZXNjcmlwdG9yLCBhcmdjLCBhcmd2KTsKKyAgfQorCisgIHJlc2V0UHJlZmVyZW5jZXMoKTsKKyAgaWYgKCFwYXJzZVR1bmVEZXZpY2Uob3B0X3R1bmVEZXZpY2UpKSByZXR1cm4gUFJPR19FWElUX1NZTlRBWDsKKyAgaWYgKCFwYXJzZVR1bmVWb2x1bWUob3B0X291dHB1dFZvbHVtZSkpIHJldHVybiBQUk9HX0VYSVRfU1lOVEFYOworCisjaWZkZWYgSEFWRV9NSURJX1NVUFBPUlQKKyAgaWYgKCFwYXJzZVR1bmVJbnN0cnVtZW50KG9wdF9taWRpSW5zdHJ1bWVudCkpIHJldHVybiBQUk9HX0VYSVRfU1lOVEFYOworI2VuZGlmIC8qIEhBVkVfTUlESV9TVVBQT1JUICovCisKKyAgTW9yc2VPYmplY3QgKm1vcnNlID0gbmV3TW9yc2VPYmplY3QoKTsKKyAgaWYgKCFtb3JzZSkgcmV0dXJuIFBST0dfRVhJVF9GQVRBTDsKKyAgb25Qcm9ncmFtRXhpdCgibW9yc2Utb2JqZWN0IiwgZXhpdE1vcnNlT2JqZWN0LCBtb3JzZSk7CisKKyAgeworICAgIGludCBvayA9IDA7CisKKyAgICB7CisgICAgICBpbnQgcGl0Y2ggPSBnZXRNb3JzZVBpdGNoKG1vcnNlKTsKKyAgICAgIHN0YXRpYyBpbnQgbWluaW11bSA9IDE7CisgICAgICBzdGF0aWMgaW50IG1heGltdW0gPSAwWEZGRkY7CisKKyAgICAgIGlmICh2YWxpZGF0ZUludGVnZXIoJnBpdGNoLCBvcHRfbW9yc2VQaXRjaCwgJm1pbmltdW0sICZtYXhpbXVtKSkgeworICAgICAgICBpZiAoc2V0TW9yc2VQaXRjaChtb3JzZSwgcGl0Y2gpKSB7CisgICAgICAgICAgb2sgPSAxOworICAgICAgICB9CisgICAgICB9CisgICAgfQorCisgICAgaWYgKCFvaykgeworICAgICAgbG9nTWVzc2FnZShMT0dfV0FSTklORywgInVuc3VwcG9ydGVkIE1vcnNlIHBpdGNoOiAlcyAoSHopIiwgb3B0X21vcnNlUGl0Y2gpOworICAgICAgcmV0dXJuIFBST0dfRVhJVF9TWU5UQVg7CisgICAgfQorICB9CisKKyAgeworICAgIGludCBvayA9IDA7CisKKyAgICBpbnQgc3BlZWQ7CisgICAgY29uc3QgY2hhciAqdW5pdDsKKworICAgIGlmIChvcHRfbW9yc2VHcm91cHMpIHsKKyAgICAgIHNwZWVkID0gZ2V0TW9yc2VHcm91cHNQZXJNaW51dGUobW9yc2UpOworICAgICAgdW5pdCA9ICJncm91cHMiOworICAgIH0gZWxzZSB7CisgICAgICBzcGVlZCA9IGdldE1vcnNlV29yZHNQZXJNaW51dGUobW9yc2UpOworICAgICAgdW5pdCA9ICJ3b3JkcyI7CisgICAgfQorCisgICAgeworICAgICAgc3RhdGljIGludCBtaW5pbXVtID0gMTsKKyAgICAgIHN0YXRpYyBpbnQgbWF4aW11bSA9IDEwMDsKKworICAgICAgaWYgKHZhbGlkYXRlSW50ZWdlcigmc3BlZWQsIG9wdF9tb3JzZVNwZWVkLCAmbWluaW11bSwgJm1heGltdW0pKSB7CisgICAgICAgIGlmIChvcHRfbW9yc2VHcm91cHMpIHsKKyAgICAgICAgICBpZiAoc2V0TW9yc2VHcm91cHNQZXJNaW51dGUobW9yc2UsIHNwZWVkKSkgb2sgPSAxOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgIGlmIChzZXRNb3JzZVdvcmRzUGVyTWludXRlKG1vcnNlLCBzcGVlZCkpIG9rID0gMTsKKyAgICAgICAgfQorICAgICAgfQorICAgIH0KKworICAgIGlmICghb2spIHsKKyAgICAgIGxvZ01lc3NhZ2UoTE9HX1dBUk5JTkcsICJ1bnN1cHBvcnRlZCBNb3JzZSBzcGVlZDogJXMgKCVzIHBlciBtaW51dGUpIiwgb3B0X21vcnNlU3BlZWQsIHVuaXQpOworICAgICAgcmV0dXJuIFBST0dfRVhJVF9TWU5UQVg7CisgICAgfQorICB9CisKKyAgaWYgKCFzZXRUdW5lRGV2aWNlKCkpIHJldHVybiBQUk9HX0VYSVRfU0VNQU5USUM7CisgIFByb2dyYW1FeGl0U3RhdHVzIGV4aXRTdGF0dXMgPSBQUk9HX0VYSVRfRkFUQUw7CisKKyAgaWYgKG9wdF9mcm9tRmlsZXMpIHsKKyAgICBjb25zdCBJbnB1dEZpbGVzUHJvY2Vzc2luZ1BhcmFtZXRlcnMgcGFyYW1ldGVycyA9IHsKKyAgICAgIC5kYXRhRmlsZVBhcmFtZXRlcnMgPSB7CisgICAgICAgIC5wcm9jZXNzT3BlcmFuZHMgPSBwcm9jZXNzTW9yc2VMaW5lLAorICAgICAgICAuZGF0YSA9ICZtb3JzZQorICAgICAgfQorICAgIH07CisKKyAgICBleGl0U3RhdHVzID0gcHJvY2Vzc0lucHV0RmlsZXMoYXJndiwgYXJnYywgJnBhcmFtZXRlcnMpOworICB9IGVsc2UgaWYgKGFyZ2MpIHsKKyAgICBleGl0U3RhdHVzID0gUFJPR19FWElUX1NVQ0NFU1M7CisKKyAgICBkbyB7CisgICAgICBpZiAoIShhZGRNb3JzZVN0cmluZyhtb3JzZSwgKmFyZ3YpICYmIGFkZE1vcnNlU3BhY2UobW9yc2UpKSkgeworICAgICAgICBleGl0U3RhdHVzID0gUFJPR19FWElUX0ZBVEFMOworICAgICAgICBicmVhazsKKyAgICAgIH0KKworICAgICAgYXJndiArPSAxOworICAgIH0gd2hpbGUgKGFyZ2MgLT0gMSk7CisgIH0gZWxzZSB7CisgICAgbG9nTWVzc2FnZShMT0dfRVJSLCAibWlzc2luZyB0ZXh0Iik7CisgICAgZXhpdFN0YXR1cyA9IFBST0dfRVhJVF9TWU5UQVg7CisgIH0KKworICBpZiAoZXhpdFN0YXR1cyA9PSBQUk9HX0VYSVRfU1VDQ0VTUykgeworICAgIGlmICghcGxheU1vcnNlU2VxdWVuY2UobW9yc2UpKSB7CisgICAgICBleGl0U3RhdHVzID0gUFJPR19FWElUX0ZBVEFMOworICAgIH0KKyAgfQorCisgIHJldHVybiBleGl0U3RhdHVzOworfQorCisjaW5jbHVkZSAiYWxlcnQuaCIKKwordm9pZAorYWxlcnQgKEFsZXJ0SWRlbnRpZmllciBpZGVudGlmaWVyKSB7Cit9CmRpZmYgLS1naXQgYS9Qcm9ncmFtcy9icmx0dHktcHR5LmMgYi9Qcm9ncmFtcy9icmx0dHktcHR5LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjEyNmVmNwotLS0gL2Rldi9udWxsCisrKyBiL1Byb2dyYW1zL2JybHR0eS1wdHkuYwpAQCAtMCwwICsxLDQ4NiBAQAorLyoKKyAqIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisgKiAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisgKgorICogQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKKy8qIG5vdCBkb25lIHlldDoKKyAqIHBhcmVudDogdGVybWluYWwgdHlwZSBsaXN0CisgKiBzY3JlZW46IHJlc2l6ZQorICovCisKKyNpbmNsdWRlICJwcm9sb2d1ZS5oIgorCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRhcmcuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPGxpbWl0cy5oPgorI2luY2x1ZGUgPHN5cy93YWl0Lmg+CisKKyNpbmNsdWRlICJsb2cuaCIKKyNpbmNsdWRlICJjbWRsaW5lLmgiCisjaW5jbHVkZSAicHR5X29iamVjdC5oIgorI2luY2x1ZGUgInB0eV90ZXJtaW5hbC5oIgorI2luY2x1ZGUgInBhcnNlLmgiCisjaW5jbHVkZSAiZmlsZS5oIgorI2luY2x1ZGUgImFzeW5jX2hhbmRsZS5oIgorI2luY2x1ZGUgImFzeW5jX3dhaXQuaCIKKyNpbmNsdWRlICJhc3luY19pby5oIgorI2luY2x1ZGUgImFzeW5jX3NpZ25hbC5oIgorCitzdGF0aWMgaW50IG9wdF9kcml2ZXJEaXJlY3RpdmVzOworc3RhdGljIGludCBvcHRfc2hvd1BhdGg7CitzdGF0aWMgY2hhciAqb3B0X2FzVXNlcjsKK3N0YXRpYyBjaGFyICpvcHRfYXNHcm91cDsKK3N0YXRpYyBjaGFyICpvcHRfd29ya2luZ0RpcmVjdG9yeTsKK3N0YXRpYyBjaGFyICpvcHRfaG9tZURpcmVjdG9yeTsKKworc3RhdGljIGludCBvcHRfbG9nSW5wdXQ7CitzdGF0aWMgaW50IG9wdF9sb2dPdXRwdXQ7CitzdGF0aWMgaW50IG9wdF9sb2dTZXF1ZW5jZXM7CitzdGF0aWMgaW50IG9wdF9sb2dVbmV4cGVjdGVkOworCitCRUdJTl9PUFRJT05fVEFCTEUocHJvZ3JhbU9wdGlvbnMpCisgIHsgLndvcmQgPSAiZHJpdmVyLWRpcmVjdGl2ZXMiLAorICAgIC5sZXR0ZXIgPSAneCcsCisgICAgLnNldHRpbmcuZmxhZyA9ICZvcHRfZHJpdmVyRGlyZWN0aXZlcywKKyAgICAuZGVzY3JpcHRpb24gPSBzdHJ0ZXh0KCJ3cml0ZSBkcml2ZXIgZGlyZWN0aXZlcyB0byBzdGFuZGFyZCBlcnJvciIpCisgIH0sCisKKyAgeyAud29yZCA9ICJzaG93LXBhdGgiLAorICAgIC5sZXR0ZXIgPSAncCcsCisgICAgLnNldHRpbmcuZmxhZyA9ICZvcHRfc2hvd1BhdGgsCisgICAgLmRlc2NyaXB0aW9uID0gc3RydGV4dCgic2hvdyB0aGUgYWJzb2x1dGUgcGF0aCB0byB0aGUgcHR5IHNsYXZlIikKKyAgfSwKKworICB7IC53b3JkID0gInVzZXIiLAorICAgIC5sZXR0ZXIgPSAndScsCisgICAgLmFyZ3VtZW50ID0gInVzZXIiLAorICAgIC5zZXR0aW5nLnN0cmluZyA9ICZvcHRfYXNVc2VyLAorICAgIC5kZXNjcmlwdGlvbiA9IHN0cnRleHQoInRoZSBuYW1lIG9yIG51bWJlciBvZiB0aGUgdXNlciB0byBydW4gYXMiKQorICB9LAorCisgIHsgLndvcmQgPSAiZ3JvdXAiLAorICAgIC5sZXR0ZXIgPSAnZycsCisgICAgLmFyZ3VtZW50ID0gImdyb3VwIiwKKyAgICAuc2V0dGluZy5zdHJpbmcgPSAmb3B0X2FzR3JvdXAsCisgICAgLmRlc2NyaXB0aW9uID0gc3RydGV4dCgidGhlIG5hbWUgb3IgbnVtYmVyIG9mIHRoZSBncm91cCB0byBydW4gYXMiKQorICB9LAorCisgIHsgLndvcmQgPSAid29ya2luZy1kaXJlY3RvcnkiLAorICAgIC5sZXR0ZXIgPSAnZCcsCisgICAgLmFyZ3VtZW50ID0gInBhdGgiLAorICAgIC5zZXR0aW5nLnN0cmluZyA9ICZvcHRfd29ya2luZ0RpcmVjdG9yeSwKKyAgICAuZGVzY3JpcHRpb24gPSBzdHJ0ZXh0KCJ0aGUgZGlyZWN0b3J5IHRvIGNoYW5nZSB0byIpCisgIH0sCisKKyAgeyAud29yZCA9ICJob21lLWRpcmVjdG9yeSIsCisgICAgLmxldHRlciA9ICdEJywKKyAgICAuYXJndW1lbnQgPSAicGF0aCIsCisgICAgLnNldHRpbmcuc3RyaW5nID0gJm9wdF9ob21lRGlyZWN0b3J5LAorICAgIC5kZXNjcmlwdGlvbiA9IHN0cnRleHQoInRoZSBob21lIGRpcmVjdG9yeSB0byB1c2UiKQorICB9LAorCisgIHsgLndvcmQgPSAibG9nLWlucHV0IiwKKyAgICAubGV0dGVyID0gJ0knLAorICAgIC5zZXR0aW5nLmZsYWcgPSAmb3B0X2xvZ0lucHV0LAorICAgIC5kZXNjcmlwdGlvbiA9IHN0cnRleHQoImxvZyBpbnB1dCB3cml0dGVuIHRvIHRoZSBwdHkgc2xhdmUiKQorICB9LAorCisgIHsgLndvcmQgPSAibG9nLW91dHB1dCIsCisgICAgLmxldHRlciA9ICdPJywKKyAgICAuc2V0dGluZy5mbGFnID0gJm9wdF9sb2dPdXRwdXQsCisgICAgLmRlc2NyaXB0aW9uID0gc3RydGV4dCgibG9nIG91dHB1dCByZWNlaXZlZCBmcm9tIHRoZSBwdHkgc2xhdmUgdGhhdCBpc24ndCBhbiBlc2NhcGUgc2VxdWVuY2Ugb3IgYSBzcGVjaWFsIGNoYXJhY3RlciIpCisgIH0sCisKKyAgeyAud29yZCA9ICJsb2ctc2VxdWVuY2VzIiwKKyAgICAubGV0dGVyID0gJ1MnLAorICAgIC5zZXR0aW5nLmZsYWcgPSAmb3B0X2xvZ1NlcXVlbmNlcywKKyAgICAuZGVzY3JpcHRpb24gPSBzdHJ0ZXh0KCJsb2cgZXNjYXBlIHNlcXVlbmNlcyBhbmQgc3BlY2lhbCBjaGFyYWN0ZXJzIHJlY2VpdmVkIGZyb20gdGhlIHB0eSBzbGF2ZSIpCisgIH0sCisKKyAgeyAud29yZCA9ICJsb2ctdW5leHBlY3RlZCIsCisgICAgLmxldHRlciA9ICdVJywKKyAgICAuc2V0dGluZy5mbGFnID0gJm9wdF9sb2dVbmV4cGVjdGVkLAorICAgIC5kZXNjcmlwdGlvbiA9IHN0cnRleHQoImxvZyB1bmV4cGVjdGVkIGlucHV0L291dHB1dCIpCisgIH0sCitFTkRfT1BUSU9OX1RBQkxFKHByb2dyYW1PcHRpb25zKQorCitzdGF0aWMgdm9pZCB3cml0ZURyaXZlckRpcmVjdGl2ZSAoY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pIFBSSU5URigxLCAyKTsKKworc3RhdGljIHZvaWQKK3dyaXRlRHJpdmVyRGlyZWN0aXZlIChjb25zdCBjaGFyICpmb3JtYXQsIC4uLikgeworICBpZiAob3B0X2RyaXZlckRpcmVjdGl2ZXMpIHsKKyAgICB2YV9saXN0IGFyZ3M7CisgICAgdmFfc3RhcnQoYXJncywgZm9ybWF0KTsKKworICAgIHsKKyAgICAgIEZJTEUgKnN0cmVhbSA9IHN0ZGVycjsKKyAgICAgIHZmcHJpbnRmKHN0cmVhbSwgZm9ybWF0LCBhcmdzKTsKKyAgICAgIGZwdXRjKCdcbicsIHN0cmVhbSk7CisgICAgICBmZmx1c2goc3RyZWFtKTsKKyAgICB9CisKKyAgICB2YV9lbmQoYXJncyk7CisgIH0KK30KKworc3RhdGljIGludAorc2V0RW52aXJvbm1lbnRTdHJpbmcgKGNvbnN0IGNoYXIgKnZhcmlhYmxlLCBjb25zdCBjaGFyICpzdHJpbmcpIHsKKyAgaW50IHJlc3VsdCA9IHNldGVudih2YXJpYWJsZSwgc3RyaW5nLCAxKTsKKyAgaWYgKHJlc3VsdCAhPSAtMSkgcmV0dXJuIDE7CisKKyAgbG9nU3lzdGVtRXJyb3IoInNldGVudiIpOworICByZXR1cm4gMDsKK30KKworc3RhdGljIGludAorc2V0RW52aXJvbm1lbnRJbnRlZ2VyIChjb25zdCBjaGFyICp2YXJpYWJsZSwgaW50IGludGVnZXIpIHsKKyAgY2hhciBzdHJpbmdbMFgxMF07CisgIHNucHJpbnRmKHN0cmluZywgc2l6ZW9mKHN0cmluZyksICIlZCIsIGludGVnZXIpOworICByZXR1cm4gc2V0RW52aXJvbm1lbnRTdHJpbmcodmFyaWFibGUsIHN0cmluZyk7Cit9CisKK3N0YXRpYyBpbnQKK3NldEVudmlyb25tZW50VmFyaWFibGVzICh2b2lkKSB7CisgIGlmICghc2V0RW52aXJvbm1lbnRTdHJpbmcoIlRFUk1fUFJPR1JBTSIsIHByb2dyYW1OYW1lKSkgcmV0dXJuIDA7CisgIGlmICghc2V0RW52aXJvbm1lbnRTdHJpbmcoIlRFUk1fUFJPR1JBTV9WRVJTSU9OIiwgUEFDS0FHRV9WRVJTSU9OKSkgcmV0dXJuIDA7CisKKyAgeworICAgIHN0YXRpYyBjb25zdCBjaGFyICpjb25zdCB2YXJpYWJsZXNbXSA9IHsKKyAgICAgIC8qIHNjcmVlbiAqLyAiU1RZIiwgIldJTkRPVyIsCisgICAgICAvKiB0bXV4ICAgKi8gIlRNVVgiLAorICAgIH07CisKKyAgICBjb25zdCBjaGFyICpjb25zdCAqdmFyaWFibGUgPSB2YXJpYWJsZXM7CisgICAgY29uc3QgY2hhciAqY29uc3QgKmVuZCA9IHZhcmlhYmxlICsgQVJSQVlfQ09VTlQodmFyaWFibGVzKTsKKworICAgIHdoaWxlICh2YXJpYWJsZSA8IGVuZCkgeworICAgICAgaWYgKHVuc2V0ZW52KCp2YXJpYWJsZSkgPT0gLTEpIHsKKyAgICAgICAgbG9nU3lzdGVtRXJyb3IoInVuc2V0ZW52Iik7CisgICAgICB9CisKKyAgICAgIHZhcmlhYmxlICs9IDE7CisgICAgfQorICB9CisKKyAgeworICAgIHNpemVfdCB3aWR0aCwgaGVpZ2h0OworCisgICAgaWYgKGdldENvbnNvbGVTaXplKCZ3aWR0aCwgJmhlaWdodCkpIHsKKyAgICAgIGlmICghc2V0RW52aXJvbm1lbnRJbnRlZ2VyKCJDT0xVTU5TIiwgd2lkdGgpKSByZXR1cm4gMDsKKyAgICAgIGlmICghc2V0RW52aXJvbm1lbnRJbnRlZ2VyKCJMSU5FUyIsIGhlaWdodCkpIHJldHVybiAwOworICAgIH0KKyAgfQorCisgIHJldHVybiBzZXRFbnZpcm9ubWVudFN0cmluZygiVEVSTSIsIHB0eUdldFRlcm1pbmFsVHlwZSgpKTsKK30KKworc3RhdGljIGludAorcHJlcGFyZUNoaWxkIChQdHlPYmplY3QgKnB0eSkgeworICBzZXRzaWQoKTsKKyAgcHR5Q2xvc2VNYXN0ZXIocHR5KTsKKworICBpZiAoc2V0RW52aXJvbm1lbnRWYXJpYWJsZXMoKSkgeworICAgIGludCB0dHk7CisgICAgaWYgKCFwdHlPcGVuU2xhdmUocHR5LCAmdHR5KSkgcmV0dXJuIDA7CisgICAgaW50IGtlZXAgPSAwOworCisgICAgZm9yIChpbnQgZmQ9MDsgZmQ8PTI7IGZkKz0xKSB7CisgICAgICBpZiAoZmQgPT0gdHR5KSB7CisgICAgICAgIGtlZXAgPSAxOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgaW50IHJlc3VsdCA9IGR1cDIodHR5LCBmZCk7CisKKyAgICAgICAgaWYgKHJlc3VsdCA9PSAtMSkgeworICAgICAgICAgIGxvZ1N5c3RlbUVycm9yKCJkdXAyIik7CisgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoIWtlZXApIGNsb3NlKHR0eSk7CisgIH0KKworICByZXR1cm4gMTsKK30KKworc3RhdGljIGludAorcnVuQ2hpbGQgKFB0eU9iamVjdCAqcHR5LCBjaGFyICoqY29tbWFuZCkgeworICBjaGFyICpkZWZhdWx0Q29tbWFuZFsyXTsKKworICBpZiAoIShjb21tYW5kICYmICpjb21tYW5kKSkgeworICAgIGNoYXIgKnNoZWxsID0gZ2V0ZW52KCJTSEVMTCIpOworICAgIGlmICghKHNoZWxsICYmICpzaGVsbCkpIHNoZWxsID0gIi9iaW4vc2giOworCisgICAgZGVmYXVsdENvbW1hbmRbMF0gPSBzaGVsbDsKKyAgICBkZWZhdWx0Q29tbWFuZFsxXSA9IE5VTEw7CisgICAgY29tbWFuZCA9IGRlZmF1bHRDb21tYW5kOworICB9CisKKyAgaWYgKHByZXBhcmVDaGlsZChwdHkpKSB7CisgICAgaW50IHJlc3VsdCA9IGV4ZWN2cCgqY29tbWFuZCwgY29tbWFuZCk7CisKKyAgICBpZiAocmVzdWx0ID09IC0xKSB7CisgICAgICBzd2l0Y2ggKGVycm5vKSB7CisgICAgICAgIGNhc2UgRU5PRU5UOgorICAgICAgICAgIGxvZ01lc3NhZ2UoTE9HX0VSUiwgIiVzOiAlcyIsIGdldHRleHQoImNvbW1hbmQgbm90IGZvdW5kIiksICpjb21tYW5kKTsKKyAgICAgICAgICByZXR1cm4gUFJPR19FWElUX1NFTUFOVElDOworCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgbG9nU3lzdGVtRXJyb3IoImV4ZWN2cCIpOworICAgICAgICAgIGJyZWFrOworICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICBsb2dNZXNzYWdlKExPR19FUlIsICJ1bmV4cGVjdGVkIHJldHVybiBmcm9tIGV4ZWN2cCIpOworICAgIH0KKyAgfQorCisgIHJldHVybiBQUk9HX0VYSVRfRkFUQUw7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBjaGFyIHBhcmVudElzUXVpdHRpbmc7CitzdGF0aWMgdW5zaWduZWQgY2hhciBjaGlsZEhhc1Rlcm1pbmF0ZWQ7CitzdGF0aWMgdW5zaWduZWQgY2hhciBzbGF2ZUhhc0JlZW5DbG9zZWQ7CisKK3N0YXRpYworQVNZTkNfQ09ORElUSU9OX1RFU1RFUihwYXJlbnRUZXJtaW5hdGlvblRlc3RlcikgeworICBpZiAocGFyZW50SXNRdWl0dGluZykgcmV0dXJuIDE7CisgIHJldHVybiBjaGlsZEhhc1Rlcm1pbmF0ZWQgJiYgc2xhdmVIYXNCZWVuQ2xvc2VkOworfQorCitzdGF0aWMgdm9pZAorcGFyZW50UXVpdE1vbml0b3IgKGludCBzaWduYWxOdW1iZXIpIHsKKyAgcGFyZW50SXNRdWl0dGluZyA9IDE7Cit9CisKK3N0YXRpYyB2b2lkCitjaGlsZFRlcm1pbmF0aW9uTW9uaXRvciAoaW50IHNpZ25hbE51bWJlcikgeworICBjaGlsZEhhc1Rlcm1pbmF0ZWQgPSAxOworfQorCitzdGF0aWMgaW50CitpbnN0YWxsU2lnbmFsSGFuZGxlcnMgKHZvaWQpIHsKKyAgaWYgKCFhc3luY0hhbmRsZVNpZ25hbChTSUdURVJNLCBwYXJlbnRRdWl0TW9uaXRvciwgTlVMTCkpIHJldHVybiAwOworICBpZiAoIWFzeW5jSGFuZGxlU2lnbmFsKFNJR0lOVCwgcGFyZW50UXVpdE1vbml0b3IsIE5VTEwpKSByZXR1cm4gMDsKKyAgaWYgKCFhc3luY0hhbmRsZVNpZ25hbChTSUdRVUlULCBwYXJlbnRRdWl0TW9uaXRvciwgTlVMTCkpIHJldHVybiAwOworICByZXR1cm4gYXN5bmNIYW5kbGVTaWduYWwoU0lHQ0hMRCwgY2hpbGRUZXJtaW5hdGlvbk1vbml0b3IsIE5VTEwpOworfQorCitzdGF0aWMKK0FTWU5DX01PTklUT1JfQ0FMTEJBQ0soc3RhbmRhcmRJbnB1dE1vbml0b3IpIHsKKyAgUHR5T2JqZWN0ICpwdHkgPSBwYXJhbWV0ZXJzLT5kYXRhOworICBpZiAocHR5UHJvY2Vzc1Rlcm1pbmFsSW5wdXQocHR5KSkgcmV0dXJuIDE7CisKKyAgcGFyZW50SXNRdWl0dGluZyA9IDE7CisgIHJldHVybiAwOworfQorCitzdGF0aWMKK0FTWU5DX0lOUFVUX0NBTExCQUNLKHB0eUlucHV0SGFuZGxlcikgeworICBpZiAoIShwYXJhbWV0ZXJzLT5lcnJvciB8fCBwYXJhbWV0ZXJzLT5lbmQpKSB7CisgICAgc2l6ZV90IGxlbmd0aCA9IHBhcmFtZXRlcnMtPmxlbmd0aDsKKworICAgIGlmICghcHR5UHJvY2Vzc1Rlcm1pbmFsT3V0cHV0KHBhcmFtZXRlcnMtPmJ1ZmZlciwgbGVuZ3RoKSkgeworICAgICAgcGFyZW50SXNRdWl0dGluZyA9IDE7CisgICAgfQorCisgICAgcmV0dXJuIGxlbmd0aDsKKyAgfQorCisgIHNsYXZlSGFzQmVlbkNsb3NlZCA9IDE7CisgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50CityZWFwRXhpdFN0YXR1cyAocGlkX3QgcGlkKSB7CisgIHdoaWxlICgxKSB7CisgICAgaW50IHN0YXR1czsKKyAgICBwaWRfdCByZXN1bHQgPSB3YWl0cGlkKHBpZCwgJnN0YXR1cywgMCk7CisKKyAgICBpZiAocmVzdWx0ID09IC0xKSB7CisgICAgICBpZiAoZXJybm8gPT0gRUlOVFIpIGNvbnRpbnVlOworICAgICAgbG9nU3lzdGVtRXJyb3IoIndhaXRwaWQiKTsKKyAgICAgIGJyZWFrOworICAgIH0KKworICAgIGlmIChXSUZFWElURUQoc3RhdHVzKSkgcmV0dXJuIFdFWElUU1RBVFVTKHN0YXR1cyk7CisgICAgaWYgKFdJRlNJR05BTEVEKHN0YXR1cykpIHJldHVybiAwWDgwIHwgV1RFUk1TSUcoc3RhdHVzKTsKKworICAgICNpZmRlZiBXQ09SRURVTVAKKyAgICBpZiAoV0NPUkVEVU1QKHN0YXR1cykpIHJldHVybiAwWDgwIHwgV1RFUk1TSUcoc3RhdHVzKTsKKyAgICAjZW5kaWYgLyogV0NPUkVEVU1QICovCisKKyAgICAjaWZkZWYgV0lGU1RPUFBFRAorICAgIGlmIChXSUZTVE9QUEVEKHN0YXR1cykpIGNvbnRpbnVlOworICAgICNlbmRpZiAvKiBXSUZTVE9QUEVEICovCisKKyAgICAjaWZkZWYgV0lGQ09OVElOVUVECisgICAgaWYgKFdJRkNPTlRJTlVFRChzdGF0dXMpKSBjb250aW51ZTsKKyAgICAjZW5kaWYgLyogV0lGQ09OVElOVUVEICovCisgIH0KKworICByZXR1cm4gUFJPR19FWElUX0ZBVEFMOworfQorCitzdGF0aWMgaW50CitydW5QYXJlbnQgKFB0eU9iamVjdCAqcHR5LCBwaWRfdCBjaGlsZCkgeworICBpbnQgZXhpdFN0YXR1cyA9IFBST0dfRVhJVF9GQVRBTDsKKyAgQXN5bmNIYW5kbGUgcHR5SW5wdXRIYW5kbGU7CisKKyAgcGFyZW50SXNRdWl0dGluZyA9IDA7CisgIGNoaWxkSGFzVGVybWluYXRlZCA9IDA7CisgIHNsYXZlSGFzQmVlbkNsb3NlZCA9IDA7CisKKyAgaWYgKGFzeW5jUmVhZEZpbGUoJnB0eUlucHV0SGFuZGxlLCBwdHlHZXRNYXN0ZXIocHR5KSwgMSwgcHR5SW5wdXRIYW5kbGVyLCBOVUxMKSkgeworICAgIEFzeW5jSGFuZGxlIHN0YW5kYXJkSW5wdXRIYW5kbGU7CisKKyAgICBpZiAoYXN5bmNNb25pdG9yRmlsZUlucHV0KCZzdGFuZGFyZElucHV0SGFuZGxlLCBTVERJTl9GSUxFTk8sIHN0YW5kYXJkSW5wdXRNb25pdG9yLCBwdHkpKSB7CisgICAgICBpZiAoaW5zdGFsbFNpZ25hbEhhbmRsZXJzKCkpIHsKKyAgICAgICAgaWYgKCFpc2F0dHkoMikpIHsKKyAgICAgICAgICB1bnNpZ25lZCBjaGFyIGxldmVsID0gTE9HX05PVElDRTsKKyAgICAgICAgICBwdHlTZXRUZXJtaW5hbExvZ0xldmVsKGxldmVsKTsKKyAgICAgICAgICBwdHlTZXRMb2dMZXZlbChwdHksIGxldmVsKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChwdHlCZWdpblRlcm1pbmFsKHB0eSwgb3B0X2RyaXZlckRpcmVjdGl2ZXMpKSB7CisgICAgICAgICAgd3JpdGVEcml2ZXJEaXJlY3RpdmUoInBhdGggJXMiLCBwdHlHZXRQYXRoKHB0eSkpOworCisgICAgICAgICAgYXN5bmNBd2FpdENvbmRpdGlvbihJTlRfTUFYLCBwYXJlbnRUZXJtaW5hdGlvblRlc3RlciwgTlVMTCk7CisgICAgICAgICAgaWYgKCFwYXJlbnRJc1F1aXR0aW5nKSBleGl0U3RhdHVzID0gcmVhcEV4aXRTdGF0dXMoY2hpbGQpOworCisgICAgICAgICAgcHR5RW5kVGVybWluYWwoKTsKKyAgICAgICAgfQorICAgICAgfQorCisgICAgICBhc3luY0NhbmNlbFJlcXVlc3Qoc3RhbmRhcmRJbnB1dEhhbmRsZSk7CisgICAgfQorCisgICAgYXN5bmNDYW5jZWxSZXF1ZXN0KHB0eUlucHV0SGFuZGxlKTsKKyAgfQorCisgIHJldHVybiBleGl0U3RhdHVzOworfQorCitpbnQKK21haW4gKGludCBhcmdjLCBjaGFyICphcmd2W10pIHsKKyAgaW50IGV4aXRTdGF0dXMgPSBQUk9HX0VYSVRfRkFUQUw7CisgIFB0eU9iamVjdCAqcHR5OworCisgIHsKKyAgICBjb25zdCBDb21tYW5kTGluZURlc2NyaXB0b3IgZGVzY3JpcHRvciA9IHsKKyAgICAgIC5vcHRpb25zID0gJnByb2dyYW1PcHRpb25zLAorICAgICAgLmFwcGxpY2F0aW9uTmFtZSA9ICJicmx0dHktcHR5IiwKKworICAgICAgLnVzYWdlID0geworICAgICAgICAucHVycG9zZSA9IHN0cnRleHQoIlJ1biBhIHNoZWxsIG9yIHRlcm1pbmFsIG1hbmFnZXIgd2l0aGluIGEgcHR5ICh2aXJ0dWFsIHRlcm1pbmFsKSBhbmQgZXhwb3J0IGl0cyBzY3JlZW4gdmlhIGEgc2hhcmVkIG1lbW9yeSBzZWdtZW50IHNvIHRoYXQgYnJsdHR5IGNhbiByZWFkIGl0IHZpYSBpdHMgVGVybWluYWwgRW11bGF0b3Igc2NyZWVuIGRyaXZlci4iKSwKKyAgICAgICAgLnBhcmFtZXRlcnMgPSAiW2NvbW1hbmQgW2FyZyAuLi5dXSIsCisgICAgICB9CisgICAgfTsKKworICAgIFBST0NFU1NfT1BUSU9OUyhkZXNjcmlwdG9yLCBhcmdjLCBhcmd2KTsKKyAgfQorCisgIHB0eVNldExvZ1Rlcm1pbmFsSW5wdXQob3B0X2xvZ0lucHV0KTsKKyAgcHR5U2V0TG9nVGVybWluYWxPdXRwdXQob3B0X2xvZ091dHB1dCk7CisgIHB0eVNldExvZ1Rlcm1pbmFsU2VxdWVuY2VzKG9wdF9sb2dTZXF1ZW5jZXMpOworICBwdHlTZXRMb2dVbmV4cGVjdGVkVGVybWluYWxJTyhvcHRfbG9nVW5leHBlY3RlZCk7CisKKyAgaWYgKCFpc2F0dHkoU1RESU5fRklMRU5PKSkgeworICAgIGxvZ01lc3NhZ2UoTE9HX0VSUiwgIiVzIiwgZ2V0dGV4dCgic3RhbmRhcmQgaW5wdXQgaXNuJ3QgYSB0ZXJtaW5hbCIpKTsKKyAgICByZXR1cm4gUFJPR19FWElUX1NFTUFOVElDOworICB9CisKKyAgaWYgKCFpc2F0dHkoU1RET1VUX0ZJTEVOTykpIHsKKyAgICBsb2dNZXNzYWdlKExPR19FUlIsICIlcyIsIGdldHRleHQoInN0YW5kYXJkIG91dHB1dCBpc24ndCBhIHRlcm1pbmFsIikpOworICAgIHJldHVybiBQUk9HX0VYSVRfU0VNQU5USUM7CisgIH0KKworICB7CisgICAgdWlkX3QgdXNlciA9IDA7CisgICAgZ2lkX3QgZ3JvdXAgPSAwOworCisgICAgaWYgKCpvcHRfYXNVc2VyKSB7CisgICAgICBpZiAoIXZhbGlkYXRlVXNlcigmdXNlciwgb3B0X2FzVXNlciwgJmdyb3VwKSkgeworICAgICAgICBsb2dNZXNzYWdlKExPR19FUlIsICJ1bmtub3duIHVzZXI6ICVzIiwgb3B0X2FzVXNlcik7CisgICAgICAgIHJldHVybiBQUk9HX0VYSVRfU0VNQU5USUM7CisgICAgICB9CisgICAgfQorCisgICAgaWYgKCpvcHRfYXNHcm91cCkgeworICAgICAgaWYgKCF2YWxpZGF0ZUdyb3VwKCZncm91cCwgb3B0X2FzR3JvdXApKSB7CisgICAgICAgIGxvZ01lc3NhZ2UoTE9HX0VSUiwgInVua25vd24gZ3JvdXA6ICVzIiwgb3B0X2FzR3JvdXApOworICAgICAgICByZXR1cm4gUFJPR19FWElUX1NFTUFOVElDOworICAgICAgfQorICAgIH0KKworICAgIGlmIChncm91cCkgeworICAgICAgaWYgKHNldHJlZ2lkKGdyb3VwLCBncm91cCkgPT0gLTEpIHsKKyAgICAgICAgbG9nU3lzdGVtRXJyb3IoInNldHJlZ2lkIik7CisgICAgICAgIHJldHVybiBQUk9HX0VYSVRfRkFUQUw7CisgICAgICB9CisgICAgfQorCisgICAgaWYgKHVzZXIpIHsKKyAgICAgIGlmIChzZXRyZXVpZCh1c2VyLCB1c2VyKSA9PSAtMSkgeworICAgICAgICBsb2dTeXN0ZW1FcnJvcigic2V0cmV1aWQiKTsKKyAgICAgICAgcmV0dXJuIFBST0dfRVhJVF9GQVRBTDsKKyAgICAgIH0KKyAgICB9CisgIH0KKworICBpZiAoKm9wdF93b3JraW5nRGlyZWN0b3J5KSB7CisgICAgaWYgKGNoZGlyKG9wdF93b3JraW5nRGlyZWN0b3J5KSA9PSAtMSkgeworICAgICAgbG9nTWVzc2FnZShMT0dfRVJSLCAiY2FuJ3QgY2hhbmdlIHRvIGRpcmVjdG9yeTogJXM6ICVzIiwgb3B0X3dvcmtpbmdEaXJlY3RvcnksIHN0cmVycm9yKGVycm5vKSk7CisgICAgICByZXR1cm4gUFJPR19FWElUX0ZBVEFMOworICAgIH0KKyAgfQorCisgIGlmICgqb3B0X2hvbWVEaXJlY3RvcnkpIHsKKyAgICBpZiAoIXNldEVudmlyb25tZW50U3RyaW5nKCJIT01FIiwgb3B0X2hvbWVEaXJlY3RvcnkpKSB7CisgICAgICByZXR1cm4gUFJPR19FWElUX0ZBVEFMOworICAgIH0KKyAgfQorCisgIGlmICgocHR5ID0gcHR5TmV3T2JqZWN0KCkpKSB7CisgICAgcHR5U2V0TG9nSW5wdXQocHR5LCBvcHRfbG9nSW5wdXQpOworICAgIGNvbnN0IGNoYXIgKnR0eVBhdGggPSBwdHlHZXRQYXRoKHB0eSk7CisKKyAgICBpZiAob3B0X3Nob3dQYXRoKSB7CisgICAgICBGSUxFICpzdHJlYW0gPSBzdGRlcnI7CisgICAgICBmcHJpbnRmKHN0cmVhbSwgIiVzXG4iLCB0dHlQYXRoKTsKKyAgICAgIGZmbHVzaChzdHJlYW0pOworICAgIH0KKworICAgIHBpZF90IGNoaWxkID0gZm9yaygpOworICAgIHN3aXRjaCAoY2hpbGQpIHsKKyAgICAgIGNhc2UgLTE6CisgICAgICAgIGxvZ1N5c3RlbUVycm9yKCJmb3JrIik7CisgICAgICAgIGJyZWFrOworCisgICAgICBjYXNlIDA6CisgICAgICAgIF9leGl0KHJ1bkNoaWxkKHB0eSwgYXJndikpOworCisgICAgICBkZWZhdWx0OgorICAgICAgICBleGl0U3RhdHVzID0gcnVuUGFyZW50KHB0eSwgY2hpbGQpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBwdHlEZXN0cm95T2JqZWN0KHB0eSk7CisgIH0KKworICByZXR1cm4gZXhpdFN0YXR1czsKK30KZGlmZiAtLWdpdCBhL1Byb2dyYW1zL2JybHR0eS10cnR4dC5jIGIvUHJvZ3JhbXMvYnJsdHR5LXRydHh0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDdkNzJlZQotLS0gL2Rldi9udWxsCisrKyBiL1Byb2dyYW1zL2JybHR0eS10cnR4dC5jCkBAIC0wLDAgKzEsMjg3IEBACisvKgorICogQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyAqICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyAqCisgKiBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorICoKKyAqIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyAqCisgKiBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisgKi8KKworI2luY2x1ZGUgInByb2xvZ3VlLmgiCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisKKyNpbmNsdWRlICJwcm9ncmFtLmgiCisjaW5jbHVkZSAiY21kbGluZS5oIgorI2luY2x1ZGUgImxvZy5oIgorI2luY2x1ZGUgImZpbGUuaCIKKyNpbmNsdWRlICJ1bmljb2RlLmgiCisjaW5jbHVkZSAidXRmOC5oIgorI2luY2x1ZGUgImJybF9kb3RzLmgiCisjaW5jbHVkZSAidHRiLmgiCisKK3N0YXRpYyBjaGFyICpvcHRfdGFibGVzRGlyZWN0b3J5Oworc3RhdGljIGNoYXIgKm9wdF9pbnB1dFRhYmxlOworc3RhdGljIGNoYXIgKm9wdF9vdXRwdXRUYWJsZTsKKworc3RhdGljIGludCBvcHRfc2l4RG90czsKK3N0YXRpYyBpbnQgb3B0X25vQmFzZUNoYXJhY3RlcnM7CisKK3N0YXRpYyBjb25zdCBjaGFyIHRhYmxlTmFtZV9hdXRvc2VsZWN0W10gPSAiYXV0byI7CitzdGF0aWMgY29uc3QgY2hhciB0YWJsZU5hbWVfdW5pY29kZVtdID0gInVuaWNvZGUiOworCitCRUdJTl9PUFRJT05fVEFCTEUocHJvZ3JhbU9wdGlvbnMpCisgIHsgLndvcmQgPSAiaW5wdXQtdGFibGUiLAorICAgIC5sZXR0ZXIgPSAnaScsCisgICAgLmFyZ3VtZW50ID0gc3RydGV4dCgiZmlsZSIpLAorICAgIC5zZXR0aW5nLnN0cmluZyA9ICZvcHRfaW5wdXRUYWJsZSwKKyAgICAuaW50ZXJuYWwuc2V0dGluZyA9IHRhYmxlTmFtZV9hdXRvc2VsZWN0LAorICAgIC5kZXNjcmlwdGlvbiA9IHN0cnRleHQoIlBhdGggdG8gaW5wdXQgdGV4dCB0YWJsZS4iKQorICB9LAorCisgIHsgLndvcmQgPSAib3V0cHV0LXRhYmxlIiwKKyAgICAubGV0dGVyID0gJ28nLAorICAgIC5hcmd1bWVudCA9IHN0cnRleHQoImZpbGUiKSwKKyAgICAuc2V0dGluZy5zdHJpbmcgPSAmb3B0X291dHB1dFRhYmxlLAorICAgIC5pbnRlcm5hbC5zZXR0aW5nID0gdGFibGVOYW1lX3VuaWNvZGUsCisgICAgLmRlc2NyaXB0aW9uID0gc3RydGV4dCgiUGF0aCB0byBvdXRwdXQgdGV4dCB0YWJsZS4iKQorICB9LAorCisgIHsgLndvcmQgPSAic2l4LWRvdHMiLAorICAgIC5sZXR0ZXIgPSAnNicsCisgICAgLnNldHRpbmcuZmxhZyA9ICZvcHRfc2l4RG90cywKKyAgICAuZGVzY3JpcHRpb24gPSBzdHJ0ZXh0KCJSZW1vdmUgZG90cyBzZXZlbiBhbmQgZWlnaHQuIikKKyAgfSwKKworICB7IC53b3JkID0gIm5vLWJhc2UtY2hhcmFjdGVycyIsCisgICAgLmxldHRlciA9ICdiJywKKyAgICAuc2V0dGluZy5mbGFnID0gJm9wdF9ub0Jhc2VDaGFyYWN0ZXJzLAorICAgIC5kZXNjcmlwdGlvbiA9IHN0cnRleHQoIkRvbid0IGZhbGwgYmFjayB0byB0aGUgVW5pY29kZSBiYXNlIGNoYXJhY3Rlci4iKQorICB9LAorCisgIHsgLndvcmQgPSAidGFibGVzLWRpcmVjdG9yeSIsCisgICAgLmxldHRlciA9ICdUJywKKyAgICAuYXJndW1lbnQgPSBzdHJ0ZXh0KCJkaXJlY3RvcnkiKSwKKyAgICAuc2V0dGluZy5zdHJpbmcgPSAmb3B0X3RhYmxlc0RpcmVjdG9yeSwKKyAgICAuaW50ZXJuYWwuc2V0dGluZyA9IFRBQkxFU19ESVJFQ1RPUlksCisgICAgLmludGVybmFsLmFkanVzdCA9IGZpeEluc3RhbGxQYXRoLAorICAgIC5kZXNjcmlwdGlvbiA9IHN0cnRleHQoIlBhdGggdG8gZGlyZWN0b3J5IGZvciB0ZXh0IHRhYmxlcy4iKQorICB9LAorRU5EX09QVElPTl9UQUJMRShwcm9ncmFtT3B0aW9ucykKKworc3RhdGljIFRleHRUYWJsZSAqaW5wdXRUYWJsZTsKK3N0YXRpYyBUZXh0VGFibGUgKm91dHB1dFRhYmxlOworCitzdGF0aWMgRklMRSAqb3V0cHV0U3RyZWFtOworc3RhdGljIGNvbnN0IGNoYXIgKm91dHB1dE5hbWU7CisKK3N0YXRpYyB1bnNpZ25lZCBjaGFyICgqdG9Eb3RzKSAod2NoYXJfdCBjaGFyYWN0ZXIpOworc3RhdGljIHdjaGFyX3QgKCp0b0NoYXJhY3RlcikgKHVuc2lnbmVkIGNoYXIgZG90cyk7CisKK3N0YXRpYyB1bnNpZ25lZCBjaGFyCit0b0RvdHNfbWFwcGVkICh3Y2hhcl90IGNoYXJhY3RlcikgeworICByZXR1cm4gY29udmVydENoYXJhY3RlclRvRG90cyhpbnB1dFRhYmxlLCBjaGFyYWN0ZXIpOworfQorCitzdGF0aWMgdW5zaWduZWQgY2hhcgordG9Eb3RzX3VuaWNvZGUgKHdjaGFyX3QgY2hhcmFjdGVyKSB7CisgIHJldHVybiAoKGNoYXJhY3RlciAmIFVOSUNPREVfUk9XX01BU0spID09IFVOSUNPREVfQlJBSUxMRV9ST1cpPworICAgICAgICAgY2hhcmFjdGVyICYgVU5JQ09ERV9DRUxMX01BU0s6CisgICAgICAgICAoQlJMX0RPVF8xIHwgQlJMX0RPVF8yIHwgQlJMX0RPVF8zIHwgQlJMX0RPVF80IHwgQlJMX0RPVF81IHwgQlJMX0RPVF82IHwgQlJMX0RPVF83IHwgQlJMX0RPVF84KTsKK30KKworc3RhdGljIHdjaGFyX3QKK3RvQ2hhcmFjdGVyX21hcHBlZCAodW5zaWduZWQgY2hhciBkb3RzKSB7CisgIHJldHVybiBjb252ZXJ0RG90c1RvQ2hhcmFjdGVyKG91dHB1dFRhYmxlLCBkb3RzKTsKK30KKworc3RhdGljIHdjaGFyX3QKK3RvQ2hhcmFjdGVyX3VuaWNvZGUgKHVuc2lnbmVkIGNoYXIgZG90cykgeworICByZXR1cm4gVU5JQ09ERV9CUkFJTExFX1JPVyB8IGRvdHM7Cit9CisKK3N0YXRpYyBpbnQKK3dyaXRlQ2hhcmFjdGVyIChjb25zdCB3Y2hhcl90ICpjaGFyYWN0ZXIsIG1ic3RhdGVfdCAqc3RhdGUpIHsKKyAgY2hhciBieXRlc1swWDEwMDBdOworICBzaXplX3QgcmVzdWx0ID0gd2NydG9tYihieXRlcywgKGNoYXJhY3Rlcj8gKmNoYXJhY3RlcjogV0NfQygnXDAnKSksIHN0YXRlKTsKKworICBpZiAocmVzdWx0ID09IChzaXplX3QpLTEpIHJldHVybiAwOworICBpZiAoIWNoYXJhY3RlcikgcmVzdWx0IC09IDE7CisKKyAgZndyaXRlKGJ5dGVzLCAxLCByZXN1bHQsIG91dHB1dFN0cmVhbSk7CisgIHJldHVybiAhZmVycm9yKG91dHB1dFN0cmVhbSk7Cit9CisKK3N0YXRpYyBpbnQKK3Byb2Nlc3NTdHJlYW0gKEZJTEUgKmlucHV0U3RyZWFtLCBjb25zdCBjaGFyICppbnB1dE5hbWUpIHsKKyAgbWJzdGF0ZV90IGlucHV0U3RhdGU7CisgIG1lbXNldCgmaW5wdXRTdGF0ZSwgMCwgc2l6ZW9mKGlucHV0U3RhdGUpKTsKKworICBtYnN0YXRlX3Qgb3V0cHV0U3RhdGU7CisgIG1lbXNldCgmb3V0cHV0U3RhdGUsIDAsIHNpemVvZihvdXRwdXRTdGF0ZSkpOworCisgIHdoaWxlICghZmVvZihpbnB1dFN0cmVhbSkpIHsKKyAgICBjaGFyIGlucHV0QnVmZmVyWzBYMTAwMF07CisgICAgc2l6ZV90IGlucHV0Q291bnQgPSBmcmVhZChpbnB1dEJ1ZmZlciwgMSwgc2l6ZW9mKGlucHV0QnVmZmVyKS0xLCBpbnB1dFN0cmVhbSk7CisKKyAgICBpZiAoZmVycm9yKGlucHV0U3RyZWFtKSkgZ290byBpbnB1dEVycm9yOworICAgIGlmICghaW5wdXRDb3VudCkgYnJlYWs7CisgICAgaW5wdXRCdWZmZXJbaW5wdXRDb3VudF0gPSAwOworCisgICAgeworICAgICAgY2hhciAqYnl0ZSA9IGlucHV0QnVmZmVyOworCisgICAgICB3aGlsZSAoaW5wdXRDb3VudCkgeworICAgICAgICB3Y2hhcl90IGNoYXJhY3RlcjsKKworICAgICAgICB7CisgICAgICAgICAgc2l6ZV90IHJlc3VsdCA9IG1icnRvd2MoJmNoYXJhY3RlciwgYnl0ZSwgaW5wdXRDb3VudCwgJmlucHV0U3RhdGUpOworCisgICAgICAgICAgaWYgKHJlc3VsdCA9PSAoc2l6ZV90KS0yKSBicmVhazsKKyAgICAgICAgICBpZiAocmVzdWx0ID09IChzaXplX3QpLTEpIGdvdG8gaW5wdXRFcnJvcjsKKyAgICAgICAgICBpZiAoIXJlc3VsdCkgcmVzdWx0ID0gMTsKKworICAgICAgICAgIGJ5dGUgKz0gcmVzdWx0OworICAgICAgICAgIGlucHV0Q291bnQgLT0gcmVzdWx0OworICAgICAgICB9CisKKyAgICAgICAgaWYgKCFpc3djbnRybChjaGFyYWN0ZXIpKSB7CisgICAgICAgICAgdW5zaWduZWQgY2hhciBkb3RzID0gdG9Eb3RzKGNoYXJhY3Rlcik7CisKKyAgICAgICAgICBpZiAoZG90cyB8fCAhaXN3c3BhY2UoY2hhcmFjdGVyKSkgeworICAgICAgICAgICAgaWYgKG9wdF9zaXhEb3RzKSBkb3RzICY9IH4oQlJMX0RPVF83IHwgQlJMX0RPVF84KTsKKyAgICAgICAgICAgIGNoYXJhY3RlciA9IHRvQ2hhcmFjdGVyKGRvdHMpOworICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmICghd3JpdGVDaGFyYWN0ZXIoJmNoYXJhY3RlciwgJm91dHB1dFN0YXRlKSkgZ290byBvdXRwdXRFcnJvcjsKKyAgICAgIH0KKyAgICB9CisgIH0KKworICBpZiAoIXdyaXRlQ2hhcmFjdGVyKE5VTEwsICZvdXRwdXRTdGF0ZSkpIGdvdG8gb3V0cHV0RXJyb3I7CisgIGZmbHVzaChvdXRwdXRTdHJlYW0pOworICBpZiAoZmVycm9yKG91dHB1dFN0cmVhbSkpIGdvdG8gb3V0cHV0RXJyb3I7CisKKyAgaWYgKCFtYnNpbml0KCZpbnB1dFN0YXRlKSkgeworI2lmZGVmIEVJTFNFUQorICAgIGVycm5vID0gRUlMU0VROworI2Vsc2UgLyogRUlMU0VRICovCisgICAgZXJybm8gPSBFSU5WQUw7CisjZW5kaWYgLyogRUlMU0VRICovCisgICAgZ290byBpbnB1dEVycm9yOworICB9CisKKyAgcmV0dXJuIDE7CisKK2lucHV0RXJyb3I6CisgIGxvZ01lc3NhZ2UoTE9HX0VSUiwgImlucHV0IGVycm9yOiAlczogJXMiLCBpbnB1dE5hbWUsIHN0cmVycm9yKGVycm5vKSk7CisgIHJldHVybiAwOworCitvdXRwdXRFcnJvcjoKKyAgbG9nTWVzc2FnZShMT0dfRVJSLCAib3V0cHV0IGVycm9yOiAlczogJXMiLCBvdXRwdXROYW1lLCBzdHJlcnJvcihlcnJubykpOworICByZXR1cm4gMDsKK30KKworc3RhdGljIGludAorZ2V0VGFibGUgKFRleHRUYWJsZSAqKnRhYmxlLCBjb25zdCBjaGFyICpuYW1lKSB7CisgIGNvbnN0IGNoYXIgKmRpcmVjdG9yeSA9IG9wdF90YWJsZXNEaXJlY3Rvcnk7CisKKyAgKnRhYmxlID0gTlVMTDsKKworICBpZiAoc3RyY21wKG5hbWUsIHRhYmxlTmFtZV91bmljb2RlKSAhPSAwKSB7CisgICAgY2hhciAqYWxsb2NhdGVkID0gTlVMTDsKKworICAgIGlmIChzdHJjbXAobmFtZSwgdGFibGVOYW1lX2F1dG9zZWxlY3QpID09IDApIHsKKyAgICAgIGlmICghKG5hbWUgPSBhbGxvY2F0ZWQgPSBnZXRUZXh0VGFibGVGb3JMb2NhbGUoZGlyZWN0b3J5KSkpIHsKKyAgICAgICAgbG9nTWVzc2FnZShMT0dfRVJSLCAiY2Fubm90IGZpbmQgdGV4dCB0YWJsZSBmb3IgY3VycmVudCBsb2NhbGUiKTsKKyAgICAgIH0KKyAgICB9CisKKyAgICBpZiAobmFtZSkgeworICAgICAgY2hhciAqcGF0aCA9IG1ha2VUZXh0VGFibGVQYXRoKGRpcmVjdG9yeSwgbmFtZSk7CisKKyAgICAgIGlmIChwYXRoKSB7CisgICAgICAgICp0YWJsZSA9IGNvbXBpbGVUZXh0VGFibGUocGF0aCk7CisgICAgICAgIGZyZWUocGF0aCk7CisgICAgICB9CisgICAgfQorCisgICAgaWYgKGFsbG9jYXRlZCkgZnJlZShhbGxvY2F0ZWQpOworICAgICBpZiAob3B0X25vQmFzZUNoYXJhY3RlcnMpIHNldFRyeUJhc2VDaGFyYWN0ZXIoKnRhYmxlLCAwKTsKKyAgICBpZiAoISp0YWJsZSkgcmV0dXJuIDA7CisgIH0KKworICByZXR1cm4gMTsKK30KKworaW50CittYWluIChpbnQgYXJnYywgY2hhciAqYXJndltdKSB7CisgIFByb2dyYW1FeGl0U3RhdHVzIGV4aXRTdGF0dXMgPSBQUk9HX0VYSVRfRkFUQUw7CisKKyAgeworICAgIGNvbnN0IENvbW1hbmRMaW5lRGVzY3JpcHRvciBkZXNjcmlwdG9yID0geworICAgICAgLm9wdGlvbnMgPSAmcHJvZ3JhbU9wdGlvbnMsCisgICAgICAuYXBwbGljYXRpb25OYW1lID0gImJybHR0eS10cnR4dCIsCisKKyAgICAgIC51c2FnZSA9IHsKKyAgICAgICAgLnB1cnBvc2UgPSBzdHJ0ZXh0KCJUcmFuc2xhdGUgb25lIGJpbmFyeSBicmFpbGxlIHJlcHJlc2VudGF0aW9uIHRvIGFub3RoZXIuIiksCisgICAgICAgIC5wYXJhbWV0ZXJzID0gIlt7aW5wdXQtZmlsZSB8IC19IC4uLl0iLAorICAgICAgfQorICAgIH07CisKKyAgICBQUk9DRVNTX09QVElPTlMoZGVzY3JpcHRvciwgYXJnYywgYXJndik7CisgIH0KKworICBpZiAoZ2V0VGFibGUoJmlucHV0VGFibGUsIG9wdF9pbnB1dFRhYmxlKSkgeworICAgIGlmIChnZXRUYWJsZSgmb3V0cHV0VGFibGUsIG9wdF9vdXRwdXRUYWJsZSkpIHsKKyAgICAgIG91dHB1dFN0cmVhbSA9IHN0ZG91dDsKKyAgICAgIG91dHB1dE5hbWUgPSBzdGFuZGFyZE91dHB1dE5hbWU7CisKKyAgICAgIHRvRG90cyA9IGlucHV0VGFibGU/IHRvRG90c19tYXBwZWQ6IHRvRG90c191bmljb2RlOworICAgICAgdG9DaGFyYWN0ZXIgPSBvdXRwdXRUYWJsZT8gdG9DaGFyYWN0ZXJfbWFwcGVkOiB0b0NoYXJhY3Rlcl91bmljb2RlOworCisgICAgICBpZiAoYXJnYykgeworICAgICAgICBkbyB7CisgICAgICAgICAgY29uc3QgY2hhciAqZmlsZSA9IGFyZ3ZbMF07CisgICAgICAgICAgRklMRSAqc3RyZWFtOworCisgICAgICAgICAgaWYgKHN0cmNtcChmaWxlLCBzdGFuZGFyZFN0cmVhbUFyZ3VtZW50KSA9PSAwKSB7CisgICAgICAgICAgICBpZiAoIXByb2Nlc3NTdHJlYW0oc3RkaW4sIHN0YW5kYXJkSW5wdXROYW1lKSkgYnJlYWs7CisgICAgICAgICAgfSBlbHNlIGlmICgoc3RyZWFtID0gZm9wZW4oZmlsZSwgInIiKSkpIHsKKyAgICAgICAgICAgIGludCBvayA9IHByb2Nlc3NTdHJlYW0oc3RyZWFtLCBmaWxlKTsKKyAgICAgICAgICAgIGZjbG9zZShzdHJlYW0pOworICAgICAgICAgICAgaWYgKCFvaykgYnJlYWs7CisgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGxvZ01lc3NhZ2UoTE9HX0VSUiwgImNhbm5vdCBvcGVuIGZpbGU6ICVzOiAlcyIsIGZpbGUsIHN0cmVycm9yKGVycm5vKSk7CisgICAgICAgICAgICBleGl0U3RhdHVzID0gUFJPR19FWElUX1NFTUFOVElDOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgfQorCisgICAgICAgICAgYXJndiArPSAxLCBhcmdjIC09IDE7CisgICAgICAgIH0gd2hpbGUgKGFyZ2MpOworCisgICAgICAgIGlmICghYXJnYykgZXhpdFN0YXR1cyA9IFBST0dfRVhJVF9TVUNDRVNTOworICAgICAgfSBlbHNlIGlmIChwcm9jZXNzU3RyZWFtKHN0ZGluLCBzdGFuZGFyZElucHV0TmFtZSkpIHsKKyAgICAgICAgZXhpdFN0YXR1cyA9IFBST0dfRVhJVF9TVUNDRVNTOworICAgICAgfQorCisgICAgICBpZiAob3V0cHV0VGFibGUpIGRlc3Ryb3lUZXh0VGFibGUob3V0cHV0VGFibGUpOworICAgIH0KKworICAgIGlmIChpbnB1dFRhYmxlKSBkZXN0cm95VGV4dFRhYmxlKGlucHV0VGFibGUpOworICB9CisKKyAgcmV0dXJuIGV4aXRTdGF0dXM7Cit9CmRpZmYgLS1naXQgYS9Qcm9ncmFtcy9icmx0dHktdHRiLmMgYi9Qcm9ncmFtcy9icmx0dHktdHRiLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODBkNTkzMwotLS0gL2Rldi9udWxsCisrKyBiL1Byb2dyYW1zL2JybHR0eS10dGIuYwpAQCAtMCwwICsxLDI1NjkgQEAKKy8qCisgKiBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorICogICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorICoKKyAqIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorICoKKyAqIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyAqLworCisjaW5jbHVkZSAicHJvbG9ndWUuaCIKKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8Y3R5cGUuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorCisjaW5jbHVkZSAibG9nLmgiCisjaW5jbHVkZSAic3RyZm10LmgiCisjaW5jbHVkZSAicHJvZ3JhbS5oIgorI2luY2x1ZGUgImNtZGxpbmUuaCIKKyNpbmNsdWRlICJmaWxlLmgiCisjaW5jbHVkZSAiZ2V0X3NlbGVjdC5oIgorI2luY2x1ZGUgImJybF9kb3RzLmgiCisjaW5jbHVkZSAiY2hhcnNldC5oIgorI2luY2x1ZGUgInR0Yi5oIgorI2luY2x1ZGUgInR0Yl9pbnRlcm5hbC5oIgorI2luY2x1ZGUgInR0Yl9jb21waWxlLmgiCisKKyN1bmRlZiBIQVZFX1VOREVGSU5FRF9DSEFSQUNURVJTX1NVUFBPUlQKKyNpZiBkZWZpbmVkKF9fbGludXhfXykKKyNkZWZpbmUgSEFWRV9VTkRFRklORURfQ0hBUkFDVEVSU19TVVBQT1JUCisKKyNpbmNsdWRlIDxmY250bC5oPgorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisjaW5jbHVkZSA8c3lzL2lvY3RsLmg+CisjaW5jbHVkZSA8bGludXgva2QuaD4KKworc3RhdGljIHZvaWQKK3Nob3dVbmRlZmluZWRDaGFyYWN0ZXJzIChUZXh0VGFibGVEYXRhICp0dGQpIHsKKyAgY2hhciBwYXRoWzBYNDBdOworICBpbnQgY29uc29sZTsKKworICB7CisgICAgY29uc3QgY2hhciAqdnQgPSBnZXRlbnYoIlhER19WVE5SIik7CisKKyAgICBpZiAoISh2dCAmJiAqdnQpKSB2dCA9ICIwIjsKKyAgICBzbnByaW50ZihwYXRoLCBzaXplb2YocGF0aCksICIvZGV2L3R0eSVzIiwgdnQpOworICB9CisKKyAgaWYgKChjb25zb2xlID0gb3BlbihwYXRoLCBPX1JET05MWSkpICE9IC0xKSB7CisgICAgc3RydWN0IHVuaW1hcGRlc2Mgc2ZtOworICAgIHVuc2lnbmVkIHNob3J0IHNpemUgPSAwWDEwMDsKKworICAgIHdoaWxlICgxKSB7CisgICAgICBzZm0uZW50cnlfY3QgPSBzaXplOworCisgICAgICBpZiAoIShzZm0uZW50cmllcyA9IG1hbGxvYyhBUlJBWV9TSVpFKHNmbS5lbnRyaWVzLCBzZm0uZW50cnlfY3QpKSkpIHsKKyAgICAgICAgbG9nTWFsbG9jRXJyb3IoKTsKKyAgICAgICAgYnJlYWs7CisgICAgICB9CisKKyAgICAgIGlmIChpb2N0bChjb25zb2xlLCBHSU9fVU5JTUFQLCAmc2ZtKSAhPSAtMSkgYnJlYWs7CisgICAgICBmcmVlKHNmbS5lbnRyaWVzKTsKKyAgICAgIHNmbS5lbnRyaWVzID0gTlVMTDsKKworICAgICAgaWYgKGVycm5vICE9IEVOT01FTSkgeworICAgICAgICBsb2dTeXN0ZW1FcnJvcigiaW9jdGxbR0lPX1VOSU1BUF0iKTsKKyAgICAgICAgYnJlYWs7CisgICAgICB9CisKKyAgICAgIGlmICghKHNpemUgPDw9IDEpKSB7CisgICAgICAgIGxvZ01lc3NhZ2UoTE9HX0VSUiwgInNjcmVlbiBmb250IG1hcCB0b28gYmlnIik7CisgICAgICAgIGJyZWFrOworICAgICAgfQorICAgIH0KKworICAgIGlmIChzZm0uZW50cmllcykgeworICAgICAgY29uc3Qgc3RydWN0IHVuaXBhaXIgKmVudHJ5ID0gc2ZtLmVudHJpZXM7CisgICAgICBjb25zdCBzdHJ1Y3QgdW5pcGFpciAqZW5kID0gZW50cnkgKyBzZm0uZW50cnlfY3Q7CisKKyAgICAgIHdoaWxlIChlbnRyeSA8IGVuZCkgeworICAgICAgICB3Y2hhcl90IGNoYXJhY3RlciA9IGVudHJ5KystPnVuaWNvZGU7CisKKyAgICAgICAgaWYgKGNoYXJhY3RlciA9PSBVTklDT0RFX1JFUExBQ0VNRU5UX0NIQVJBQ1RFUikgY29udGludWU7CisgICAgICAgIGlmICgoY2hhcmFjdGVyICYgflVOSUNPREVfQ0VMTF9NQVNLKSA9PSBVTklDT0RFX0JSQUlMTEVfUk9XKSBjb250aW51ZTsKKworICAgICAgICBpZiAoIWdldFVuaWNvZGVDZWxsKHR0ZCwgY2hhcmFjdGVyKSkgeworICAgICAgICAgIGNvbnN0IFRleHRUYWJsZUhlYWRlciAqaGVhZGVyID0gZ2V0VGV4dFRhYmxlSGVhZGVyKHR0ZCk7CisKKyAgICAgICAgICBjb25zdCBUZXh0VGFibGVBbGlhc0VudHJ5ICphbGlhcyA9IGxvY2F0ZVRleHRUYWJsZUFsaWFzKAorICAgICAgICAgICAgY2hhcmFjdGVyLCBnZXRUZXh0VGFibGVJdGVtKHR0ZCwgaGVhZGVyLT5hbGlhc0FycmF5KSwgaGVhZGVyLT5hbGlhc0NvdW50CisgICAgICAgICAgKTsKKworICAgICAgICAgIGlmICghYWxpYXMpIHsKKyAgICAgICAgICAgIGNoYXIgYnVmZmVyWzBYODBdOworCisgICAgICAgICAgICBTVFJfQkVHSU4oYnVmZmVyLCBzaXplb2YoYnVmZmVyKSk7CisgICAgICAgICAgICBTVFJfUFJJTlRGKCJ1bmRlZmluZWQgY2hhcmFjdGVyOiBVKyUwNCJQUklYMzIsICh1aW50MzJfdCljaGFyYWN0ZXIpOworCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGNoYXIgbmFtZVswWDQwXTsKKworICAgICAgICAgICAgICBpZiAoZ2V0Q2hhcmFjdGVyTmFtZShjaGFyYWN0ZXIsIG5hbWUsIHNpemVvZihuYW1lKSkpIHsKKyAgICAgICAgICAgICAgICBTVFJfUFJJTlRGKCIgWyVzXSIsIG5hbWUpOworICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIFNUUl9FTkQ7CisgICAgICAgICAgICBsb2dNZXNzYWdlKExPR19XQVJOSU5HLCAiJXMiLCBidWZmZXIpOworICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgfQorCisgICAgICBmcmVlKHNmbS5lbnRyaWVzKTsKKyAgICB9CisKKyAgICBjbG9zZShjb25zb2xlKTsKKyAgfSBlbHNlIHsKKyAgICBsb2dNZXNzYWdlKExPR19FUlIsICJjYW5ub3Qgb3BlbiBjb25zb2xlOiAlczogJXMiLCBwYXRoLCBzdHJlcnJvcihlcnJubykpOworICB9Cit9CisKKyNlbmRpZiAvKiB1bmRlZmluZWQgY2hhcmFjdGVycyBzdXBwb3J0ICovCisKK3N0YXRpYyBjaGFyICpvcHRfY2hhcnNldDsKK3N0YXRpYyBjaGFyICpvcHRfaW5wdXRGb3JtYXQ7CitzdGF0aWMgY2hhciAqb3B0X291dHB1dEZvcm1hdDsKK3N0YXRpYyBjaGFyICpvcHRfdGFibGVzRGlyZWN0b3J5Oworc3RhdGljIGludCBvcHRfZWRpdDsKKworI2lmZGVmIEhBVkVfVU5ERUZJTkVEX0NIQVJBQ1RFUlNfU1VQUE9SVAorc3RhdGljIGludCBvcHRfdW5kZWZpbmVkOworI2VuZGlmIC8qIEhBVkVfVU5ERUZJTkVEX0NIQVJBQ1RFUlNfU1VQUE9SVCAqLworCitCRUdJTl9PUFRJT05fVEFCTEUocHJvZ3JhbU9wdGlvbnMpCisgIHsgLndvcmQgPSAiZWRpdCIsCisgICAgLmxldHRlciA9ICdlJywKKyAgICAuc2V0dGluZy5mbGFnID0gJm9wdF9lZGl0LAorICAgIC5kZXNjcmlwdGlvbiA9IHN0cnRleHQoIkVkaXQgdGFibGUuIikKKyAgfSwKKworICB7IC53b3JkID0gImlucHV0LWZvcm1hdCIsCisgICAgLmxldHRlciA9ICdpJywKKyAgICAuYXJndW1lbnQgPSAiZm9ybWF0IiwKKyAgICAuc2V0dGluZy5zdHJpbmcgPSAmb3B0X2lucHV0Rm9ybWF0LAorICAgIC5kZXNjcmlwdGlvbiA9IHN0cnRleHQoIkZvcm1hdCBvZiBpbnB1dCBmaWxlLiIpCisgIH0sCisKKyAgeyAud29yZCA9ICJvdXRwdXQtZm9ybWF0IiwKKyAgICAubGV0dGVyID0gJ28nLAorICAgIC5hcmd1bWVudCA9ICJmb3JtYXQiLAorICAgIC5zZXR0aW5nLnN0cmluZyA9ICZvcHRfb3V0cHV0Rm9ybWF0LAorICAgIC5kZXNjcmlwdGlvbiA9IHN0cnRleHQoIkZvcm1hdCBvZiBvdXRwdXQgZmlsZS4iKQorICB9LAorCisgIHsgLndvcmQgPSAiY2hhcnNldCIsCisgICAgLmxldHRlciA9ICdjJywKKyAgICAuYXJndW1lbnQgPSAiY2hhcnNldCIsCisgICAgLnNldHRpbmcuc3RyaW5nID0gJm9wdF9jaGFyc2V0LAorICAgIC5kZXNjcmlwdGlvbiA9IHN0cnRleHQoIjgtYml0IGNoYXJhY3RlciBzZXQgdG8gdXNlLiIpCisgIH0sCisKKyNpZmRlZiBIQVZFX1VOREVGSU5FRF9DSEFSQUNURVJTX1NVUFBPUlQKKyAgeyAud29yZCA9ICJ1bmRlZmluZWQiLAorICAgIC5sZXR0ZXIgPSAndScsCisgICAgLnNldHRpbmcuZmxhZyA9ICZvcHRfdW5kZWZpbmVkLAorICAgIC5kZXNjcmlwdGlvbiA9IHN0cnRleHQoIlJlcG9ydCB0aGUgY2hhcmFjdGVycyB3aXRoaW4gdGhlIGN1cnJlbnQgc2NyZWVuIGZvbnQgdGhhdCBhcmVuJ3QgZGVmaW5lZCB3aXRoaW4gdGhlIHRleHQgdGFibGUuIikKKyAgfSwKKyNlbmRpZiAvKiBIQVZFX1VOREVGSU5FRF9DSEFSQUNURVJTX1NVUFBPUlQgKi8KKworICB7IC53b3JkID0gInRhYmxlcy1kaXJlY3RvcnkiLAorICAgIC5sZXR0ZXIgPSAnVCcsCisgICAgLmFyZ3VtZW50ID0gImRpcmVjdG9yeSIsCisgICAgLnNldHRpbmcuc3RyaW5nID0gJm9wdF90YWJsZXNEaXJlY3RvcnksCisgICAgLmludGVybmFsLnNldHRpbmcgPSBUQUJMRVNfRElSRUNUT1JZLAorICAgIC5pbnRlcm5hbC5hZGp1c3QgPSBmaXhJbnN0YWxsUGF0aCwKKyAgICAuZGVzY3JpcHRpb24gPSBzdHJ0ZXh0KCJQYXRoIHRvIGRpcmVjdG9yeSBjb250YWluaW5nIHRleHQgdGFibGVzLiIpCisgIH0sCitFTkRfT1BUSU9OX1RBQkxFKHByb2dyYW1PcHRpb25zKQorCitzdGF0aWMgY29uc3QgQnJsRG90VGFibGUgZG90c0ludGVybmFsID0geworICBCUkxfRE9UXzEsIEJSTF9ET1RfMiwgQlJMX0RPVF8zLCBCUkxfRE9UXzQsCisgIEJSTF9ET1RfNSwgQlJMX0RPVF82LCBCUkxfRE9UXzcsIEJSTF9ET1RfOAorfTsKKworc3RhdGljIGNvbnN0IEJybERvdFRhYmxlIGRvdHMxMjM0NTY3OCA9IHsKKyAgMFgwMSwgMFgwMiwgMFgwNCwgMFgwOCwgMFgxMCwgMFgyMCwgMFg0MCwgMFg4MAorfTsKKworc3RhdGljIGNvbnN0IEJybERvdFRhYmxlIGRvdHMxNDI1MzY3OCA9IHsKKyAgMFgwMSwgMFgwNCwgMFgxMCwgMFgwMiwgMFgwOCwgMFgyMCwgMFg0MCwgMFg4MAorfTsKKworc3RhdGljIHVuc2lnbmVkIGNoYXIKK21hcERvdHMgKHVuc2lnbmVkIGNoYXIgaW5wdXQsIGNvbnN0IEJybERvdFRhYmxlIGZyb20sIGNvbnN0IEJybERvdFRhYmxlIHRvKSB7CisgIHVuc2lnbmVkIGNoYXIgb3V0cHV0ID0gMDsKKyAgeworICAgIGZvciAoaW50IGRvdD0wOyBkb3Q8QlJMX0RPVF9DT1VOVDsgZG90Kz0xKSB7CisgICAgICBpZiAoaW5wdXQgJiBmcm9tW2RvdF0pIG91dHB1dCB8PSB0b1tkb3RdOworICAgIH0KKyAgfQorICByZXR1cm4gb3V0cHV0OworfQorCit0eXBlZGVmIFRleHRUYWJsZURhdGEgKlRhYmxlUmVhZGVyIChjb25zdCBjaGFyICpwYXRoLCBGSUxFICpmaWxlLCBjb25zdCB2b2lkICpkYXRhKTsKK3R5cGVkZWYgaW50IFRhYmxlV3JpdGVyIChjb25zdCBjaGFyICpwYXRoLCBGSUxFICpmaWxlLCBUZXh0VGFibGVEYXRhICp0dGQsIGNvbnN0IHZvaWQgKmRhdGEpOwordHlwZWRlZiBpbnQgQ2hhcmFjdGVyV3JpdGVyIChGSUxFICpmaWxlLCBjb25zdCBjaGFyICpkaXJlY3RpdmUsIHdjaGFyX3QgY2hhcmFjdGVyLCB1bnNpZ25lZCBjaGFyIGRvdHMpOwordHlwZWRlZiBpbnQgQWxpYXNXcml0ZXIgKEZJTEUgKmZpbGUsIGNvbnN0IFRleHRUYWJsZUFsaWFzRW50cnkgKmFsaWFzLCBjb25zdCB2b2lkICpkYXRhKTsKKworc3RhdGljIGludAorZ2V0RG90cyAoVGV4dFRhYmxlRGF0YSAqdHRkLCB3Y2hhcl90IGNoYXJhY3RlciwgdW5zaWduZWQgY2hhciAqZG90cykgeworICBjb25zdCB1bnNpZ25lZCBjaGFyICpjZWxsID0gZ2V0VW5pY29kZUNlbGwodHRkLCBjaGFyYWN0ZXIpOworICBpZiAoIWNlbGwpIHJldHVybiAwOworICAqZG90cyA9ICpjZWxsOworICByZXR1cm4gMTsKK30KKworc3RhdGljIGludAord3JpdGVTdHJpbmcgKEZJTEUgKmZpbGUsIGNvbnN0IGNoYXIgKnN0cmluZykgeworICBpZiAoZnB1dHMoc3RyaW5nLCBmaWxlKSAhPSBFT0YpIHJldHVybiAxOworICBsb2dTeXN0ZW1FcnJvcigib3V0cHV0Iik7CisgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50CitlbmRMaW5lIChGSUxFICpmaWxlKSB7CisgIHJldHVybiB3cml0ZVN0cmluZyhmaWxlLCAiXG4iKTsKK30KKwordHlwZWRlZiBpbnQgQ29tbWVudFdyaXRlciAoRklMRSAqZmlsZSwgY29uc3QgY2hhciAqdGV4dCk7CisKK3N0YXRpYyBpbnQKK3dyaXRlSGFzaENvbW1lbnQgKEZJTEUgKmZpbGUsIGNvbnN0IGNoYXIgKnRleHQpIHsKKyAgaWYgKCF3cml0ZVN0cmluZyhmaWxlLCAiIyAiKSkgcmV0dXJuIDA7CisgIGlmICghd3JpdGVTdHJpbmcoZmlsZSwgdGV4dCkpIHJldHVybiAwOworICBpZiAoIWVuZExpbmUoZmlsZSkpIHJldHVybiAwOworICByZXR1cm4gMTsKK30KKworc3RhdGljIGludAord3JpdGVTZW1pY29sb25Db21tZW50IChGSUxFICpmaWxlLCBjb25zdCBjaGFyICp0ZXh0KSB7CisgIGlmICghd3JpdGVTdHJpbmcoZmlsZSwgIjsgIikpIHJldHVybiAwOworICBpZiAoIXdyaXRlU3RyaW5nKGZpbGUsIHRleHQpKSByZXR1cm4gMDsKKyAgaWYgKCFlbmRMaW5lKGZpbGUpKSByZXR1cm4gMDsKKyAgcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQKK3dyaXRlQ0NvbW1lbnQgKEZJTEUgKmZpbGUsIGNvbnN0IGNoYXIgKnRleHQpIHsKKyAgaWYgKCF3cml0ZVN0cmluZyhmaWxlLCAiLyogIikpIHJldHVybiAwOworICBpZiAoIXdyaXRlU3RyaW5nKGZpbGUsIHRleHQpKSByZXR1cm4gMDsKKyAgaWYgKCF3cml0ZVN0cmluZyhmaWxlLCAiICovIikpIHJldHVybiAwOworICBpZiAoIWVuZExpbmUoZmlsZSkpIHJldHVybiAwOworICByZXR1cm4gMTsKK30KKworc3RhdGljIGludAorZGVmaW5lQ01hY3JvIChGSUxFICpmaWxlLCBjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICphcmdzKSB7CisgIGlmICghd3JpdGVTdHJpbmcoZmlsZSwgIiNpZm5kZWYgIikpIHJldHVybiAwOworICBpZiAoIXdyaXRlU3RyaW5nKGZpbGUsIG5hbWUpKSByZXR1cm4gMDsKKyAgaWYgKCFlbmRMaW5lKGZpbGUpKSByZXR1cm4gMDsKKworICBpZiAoIXdyaXRlU3RyaW5nKGZpbGUsICIjZGVmaW5lICIpKSByZXR1cm4gMDsKKyAgaWYgKCF3cml0ZVN0cmluZyhmaWxlLCBuYW1lKSkgcmV0dXJuIDA7CisgIGlmICghd3JpdGVTdHJpbmcoZmlsZSwgYXJncykpIHJldHVybiAwOworICBpZiAoIWVuZExpbmUoZmlsZSkpIHJldHVybiAwOworCisgIGlmICghd3JpdGVTdHJpbmcoZmlsZSwgIiNlbmRpZiIpKSByZXR1cm4gMDsKKyAgaWYgKCFlbmRMaW5lKGZpbGUpKSByZXR1cm4gMDsKKworICBpZiAoIWVuZExpbmUoZmlsZSkpIHJldHVybiAwOworICByZXR1cm4gMTsKK30KKworc3RhdGljIGludAorYmVnaW5DTWFjcm8gKEZJTEUgKmZpbGUsIGNvbnN0IGNoYXIgKm5hbWUpIHsKKyAgaWYgKCF3cml0ZVN0cmluZyhmaWxlLCBuYW1lKSkgcmV0dXJuIDA7CisgIGlmICghd3JpdGVTdHJpbmcoZmlsZSwgIigiKSkgcmV0dXJuIDA7CisgIHJldHVybiAxOworfQorCitzdGF0aWMgaW50CitlbmRDTWFjcm8gKEZJTEUgKmZpbGUpIHsKKyAgaWYgKCF3cml0ZVN0cmluZyhmaWxlLCAiKSIpKSByZXR1cm4gMDsKKyAgcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQKK25leHRDQXJndW1lbnQgKEZJTEUgKmZpbGUpIHsKKyAgcmV0dXJuIGZwcmludGYoZmlsZSwgIiwgIikgIT0gRU9GOworfQorCitzdGF0aWMgaW50Cit3cml0ZUhlYWRlckNvbW1lbnQgKEZJTEUgKmZpbGUsIENvbW1lbnRXcml0ZXIgKndyaXRlQ29tbWVudCkgeworICBjaGFyIGJ1ZmZlclswWDgwXTsKKworICBTVFJfQkVHSU4oYnVmZmVyLCBzaXplb2YoYnVmZmVyKSk7CisgIFNUUl9QUklOVEYoImdlbmVyYXRlZCBieSAlcyIsIHByb2dyYW1OYW1lKTsKKyAgaWYgKCpvcHRfY2hhcnNldCkgU1RSX1BSSU5URigiOiBjaGFyc2V0PSVzIiwgb3B0X2NoYXJzZXQpOworICBTVFJfRU5EOworCisgIHJldHVybiB3cml0ZUNvbW1lbnQoZmlsZSwgYnVmZmVyKTsKK30KKworc3RhdGljIGludAord3JpdGVDaGFyYWN0ZXJEZXNjcmlwdGlvbiAoRklMRSAqZmlsZSwgd2NoYXJfdCBjaGFyYWN0ZXIpIHsKKyAgaWYgKCF3cml0ZVN0cmluZyhmaWxlLCAiICIpKSByZXR1cm4gMDsKKyAgaWYgKCF3cml0ZVV0ZjhDaGFyYWN0ZXIoZmlsZSwgKChpc3dwcmludChjaGFyYWN0ZXIpICYmICFpc3dzcGFjZShjaGFyYWN0ZXIpKT8gY2hhcmFjdGVyOiBXQ19DKCcgJykpKSkgcmV0dXJuIDA7CisKKyAgeworICAgIGNoYXIgbmFtZVswWDQwXTsKKworICAgIGlmIChnZXRDaGFyYWN0ZXJOYW1lKGNoYXJhY3RlciwgbmFtZSwgc2l6ZW9mKG5hbWUpKSkgeworICAgICAgaWYgKCF3cml0ZVN0cmluZyhmaWxlLCAiIFsiKSkgcmV0dXJuIDA7CisgICAgICBpZiAoIXdyaXRlU3RyaW5nKGZpbGUsIG5hbWUpKSByZXR1cm4gMDsKKyAgICAgIGlmICghd3JpdGVTdHJpbmcoZmlsZSwgIl0iKSkgcmV0dXJuIDA7CisgICAgfQorICB9CisKKyAgcmV0dXJuIDE7Cit9CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgd2NoYXJfdCBjaGFyYWN0ZXI7CisgIHVuc2lnbmVkIGNoYXIgZG90czsKK30gSW5wdXRDaGFyYWN0ZXJFbnRyeTsKKworc3RhdGljIGludAorc29ydElucHV0Q2hhcmFjdGVyRW50cmllcyAoY29uc3Qgdm9pZCAqZWxlbWVudDEsIGNvbnN0IHZvaWQgKmVsZW1lbnQyKSB7CisgIGNvbnN0IElucHV0Q2hhcmFjdGVyRW50cnkgKmVudHJ5MSA9IGVsZW1lbnQxOworICBjb25zdCBJbnB1dENoYXJhY3RlckVudHJ5ICplbnRyeTIgPSBlbGVtZW50MjsKKworICBpZiAoZW50cnkxLT5jaGFyYWN0ZXIgPCBlbnRyeTItPmNoYXJhY3RlcikgcmV0dXJuIC0xOworICBpZiAoZW50cnkxLT5jaGFyYWN0ZXIgPiBlbnRyeTItPmNoYXJhY3RlcikgcmV0dXJuIDE7CisgIHJldHVybiAwOworfQorCit0eXBlZGVmIHN0cnVjdCB7CisgIGNvbnN0IGNoYXIgKmluOworICBjb25zdCBjaGFyICpvdXQ7CisgIGNvbnN0IGNoYXIgKmluT3V0OworfSBXcml0ZUNoYXJhY3RlckRpcmVjdGl2ZXM7CisKKyNkZWZpbmUgV1JJVEVfQ0hBUkFDVEVSX0RJUkVDVElWRVMoLi4uKSAmKGNvbnN0IFdyaXRlQ2hhcmFjdGVyRGlyZWN0aXZlcyl7X19WQV9BUkdTX199CisjZGVmaW5lIFdSSVRFX0NIQVJBQ1RFUlNfSU5fT05MWSBXUklURV9DSEFSQUNURVJfRElSRUNUSVZFUyguaW49IiIpCisjZGVmaW5lIFdSSVRFX0NIQVJBQ1RFUlNfT1VUX09OTFkgV1JJVEVfQ0hBUkFDVEVSX0RJUkVDVElWRVMoLm91dD0iIikKKyNkZWZpbmUgV1JJVEVfQ0hBUkFDVEVSU19OQVRJVkUgV1JJVEVfQ0hBUkFDVEVSX0RJUkVDVElWRVMoLmluPSJpbnB1dCIsIC5vdXQ9ImdseXBoIiwgLmluT3V0PSJjaGFyIikKKyNkZWZpbmUgV1JJVEVfQ0hBUkFDVEVSU19MSUJMT1VJUyBXUklURV9DSEFSQUNURVJfRElSRUNUSVZFUyguaW49Im5vZm9yIiwgLm91dD0ibm9iYWNrIiwgLmluT3V0PSIiKQorCitzdGF0aWMgaW50Cit3cml0ZUlucHV0Q2hhcmFjdGVycyAoCisgIEZJTEUgKmZpbGUsIGNvbnN0IHdjaGFyX3QgKmNoYXJhY3RlciwKKyAgY29uc3QgSW5wdXRDaGFyYWN0ZXJFbnRyeSAqKmVudHJ5LAorICBjb25zdCBJbnB1dENoYXJhY3RlckVudHJ5ICpjb25zdCAqZW5kLAorICBDaGFyYWN0ZXJXcml0ZXIgKndyaXRlciwgY29uc3QgY2hhciAqZGlyZWN0aXZlCispIHsKKyAgd2hpbGUgKCplbnRyeSA8ICplbmQpIHsKKyAgICBpZiAoY2hhcmFjdGVyKSB7CisgICAgICBpZiAoKCplbnRyeSktPmNoYXJhY3RlciA+PSAqY2hhcmFjdGVyKSB7CisgICAgICAgIGJyZWFrOworICAgICAgfQorICAgIH0KKworICAgIGlmIChkaXJlY3RpdmUpIHsKKyAgICAgIGlmICghd3JpdGVyKGZpbGUsIGRpcmVjdGl2ZSwgKCplbnRyeSktPmNoYXJhY3RlciwgKCplbnRyeSktPmRvdHMpKSB7CisgICAgICAgIHJldHVybiAwOworICAgICAgfQorICAgIH0KKworICAgICplbnRyeSArPSAxOworICB9CisKKyAgcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQKK3dyaXRlQ2hhcmFjdGVycyAoRklMRSAqZmlsZSwgVGV4dFRhYmxlRGF0YSAqdHRkLCBDaGFyYWN0ZXJXcml0ZXIgd3JpdGVyLCBjb25zdCB2b2lkICpkYXRhKSB7CisgIGNvbnN0IFdyaXRlQ2hhcmFjdGVyRGlyZWN0aXZlcyAqZGlyZWN0aXZlcyA9IGRhdGE7CisgIGNvbnN0IFRleHRUYWJsZUhlYWRlciAqaGVhZGVyID0gZ2V0VGV4dFRhYmxlSGVhZGVyKHR0ZCk7CisKKyAgSW5wdXRDaGFyYWN0ZXJFbnRyeSBpbnB1dENoYXJhY3RlcnNCdWZmZXJbMFgxMDBdOworICB1bnNpZ25lZCBpbnQgaW5wdXRDaGFyYWN0ZXJDb3VudCA9IDA7CisKKyAgZm9yICh1bnNpZ25lZCBpbnQgZG90cz0wOyBkb3RzPDBYMTAwOyBkb3RzKz0xKSB7CisgICAgaWYgKEJJVE1BU0tfVEVTVChoZWFkZXItPmlucHV0Q2hhcmFjdGVyRGVmaW5lZCwgZG90cykpIHsKKyAgICAgIElucHV0Q2hhcmFjdGVyRW50cnkgKmVudHJ5ID0gJmlucHV0Q2hhcmFjdGVyc0J1ZmZlcltpbnB1dENoYXJhY3RlckNvdW50KytdOworICAgICAgZW50cnktPmNoYXJhY3RlciA9IGhlYWRlci0+aW5wdXRDaGFyYWN0ZXJzW2RvdHNdOworICAgICAgZW50cnktPmRvdHMgPSBkb3RzOworICAgIH0KKyAgfQorCisgIHFzb3J0KAorICAgIGlucHV0Q2hhcmFjdGVyc0J1ZmZlciwgaW5wdXRDaGFyYWN0ZXJDb3VudCwKKyAgICBzaXplb2YoaW5wdXRDaGFyYWN0ZXJzQnVmZmVyWzBdKSwKKyAgICBzb3J0SW5wdXRDaGFyYWN0ZXJFbnRyaWVzCisgICk7CisKKyAgY29uc3QgSW5wdXRDaGFyYWN0ZXJFbnRyeSAqaW5wdXRDaGFyYWN0ZXJFbnRyeSA9IGlucHV0Q2hhcmFjdGVyc0J1ZmZlcjsKKyAgY29uc3QgSW5wdXRDaGFyYWN0ZXJFbnRyeSAqY29uc3QgaW5wdXRDaGFyYWN0ZXJFbmQgPSBpbnB1dENoYXJhY3RlckVudHJ5ICsgaW5wdXRDaGFyYWN0ZXJDb3VudDsKKworICBmb3IgKHVuc2lnbmVkIGludCBncm91cE51bWJlcj0wOyBncm91cE51bWJlcjxVTklDT0RFX0dST1VQX0NPVU5UOyBncm91cE51bWJlcis9MSkgeworICAgIFRleHRUYWJsZU9mZnNldCBncm91cE9mZnNldCA9IGhlYWRlci0+dW5pY29kZUdyb3Vwc1tncm91cE51bWJlcl07CisKKyAgICBpZiAoZ3JvdXBPZmZzZXQpIHsKKyAgICAgIGNvbnN0IFVuaWNvZGVHcm91cEVudHJ5ICpncm91cCA9IGdldFRleHRUYWJsZUl0ZW0odHRkLCBncm91cE9mZnNldCk7CisKKyAgICAgIGZvciAodW5zaWduZWQgaW50IHBsYW5lTnVtYmVyPTA7IHBsYW5lTnVtYmVyPFVOSUNPREVfUExBTkVTX1BFUl9HUk9VUDsgcGxhbmVOdW1iZXIrPTEpIHsKKyAgICAgICAgVGV4dFRhYmxlT2Zmc2V0IHBsYW5lT2Zmc2V0ID0gZ3JvdXAtPnBsYW5lc1twbGFuZU51bWJlcl07CisKKyAgICAgICAgaWYgKHBsYW5lT2Zmc2V0KSB7CisgICAgICAgICAgY29uc3QgVW5pY29kZVBsYW5lRW50cnkgKnBsYW5lID0gZ2V0VGV4dFRhYmxlSXRlbSh0dGQsIHBsYW5lT2Zmc2V0KTsKKworICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IHJvd051bWJlcj0wOyByb3dOdW1iZXI8VU5JQ09ERV9ST1dTX1BFUl9QTEFORTsgcm93TnVtYmVyKz0xKSB7CisgICAgICAgICAgICBUZXh0VGFibGVPZmZzZXQgcm93T2Zmc2V0ID0gcGxhbmUtPnJvd3Nbcm93TnVtYmVyXTsKKworICAgICAgICAgICAgaWYgKHJvd09mZnNldCkgeworICAgICAgICAgICAgICBjb25zdCBVbmljb2RlUm93RW50cnkgKnJvdyA9IGdldFRleHRUYWJsZUl0ZW0odHRkLCByb3dPZmZzZXQpOworCisgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IGNlbGxOdW1iZXI9MDsgY2VsbE51bWJlcjxVTklDT0RFX0NFTExTX1BFUl9ST1c7IGNlbGxOdW1iZXIrPTEpIHsKKyAgICAgICAgICAgICAgICBpZiAoQklUTUFTS19URVNUKHJvdy0+Y2VsbERlZmluZWQsIGNlbGxOdW1iZXIpKSB7CisgICAgICAgICAgICAgICAgICB3Y2hhcl90IGNoYXJhY3RlciA9IFVOSUNPREVfQ0hBUkFDVEVSKGdyb3VwTnVtYmVyLCBwbGFuZU51bWJlciwgcm93TnVtYmVyLCBjZWxsTnVtYmVyKTsKKyAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgZG90cyA9IHJvdy0+Y2VsbHNbY2VsbE51bWJlcl07CisKKyAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgaW50IG9rID0gd3JpdGVJbnB1dENoYXJhY3RlcnMoCisgICAgICAgICAgICAgICAgICAgICAgZmlsZSwgJmNoYXJhY3RlciwKKyAgICAgICAgICAgICAgICAgICAgICAmaW5wdXRDaGFyYWN0ZXJFbnRyeSwgJmlucHV0Q2hhcmFjdGVyRW5kLAorICAgICAgICAgICAgICAgICAgICAgIHdyaXRlciwgZGlyZWN0aXZlcy0+aW4KKyAgICAgICAgICAgICAgICAgICAgKTsKKworICAgICAgICAgICAgICAgICAgICBpZiAoIW9rKSByZXR1cm4gMDsKKyAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgaWYgKGlucHV0Q2hhcmFjdGVyRW50cnkgPCBpbnB1dENoYXJhY3RlckVuZCkgeworICAgICAgICAgICAgICAgICAgICBpZiAoY2hhcmFjdGVyID09IGlucHV0Q2hhcmFjdGVyRW50cnktPmNoYXJhY3RlcikgeworICAgICAgICAgICAgICAgICAgICAgIGlmIChkb3RzID09IGlucHV0Q2hhcmFjdGVyRW50cnktPmRvdHMpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmRpcmVjdGl2ZSA9IGRpcmVjdGl2ZXMtPmluT3V0OworCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGlyZWN0aXZlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghd3JpdGVyKGZpbGUsIGRpcmVjdGl2ZSwgY2hhcmFjdGVyLCBkb3RzKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRDaGFyYWN0ZXJFbnRyeSArPSAxOworICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpkaXJlY3RpdmUgPSBkaXJlY3RpdmVzLT5vdXQ7CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKGRpcmVjdGl2ZSkgeworICAgICAgICAgICAgICAgICAgICAgIGlmICghd3JpdGVyKGZpbGUsIGRpcmVjdGl2ZSwgY2hhcmFjdGVyLCBkb3RzKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICB9CisgICAgfQorICB9CisKKyAgcmV0dXJuIHdyaXRlSW5wdXRDaGFyYWN0ZXJzKAorICAgIGZpbGUsIE5VTEwsCisgICAgJmlucHV0Q2hhcmFjdGVyRW50cnksICZpbnB1dENoYXJhY3RlckVuZCwKKyAgICB3cml0ZXIsIGRpcmVjdGl2ZXMtPmluCisgICk7Cit9CisKK3N0YXRpYyBpbnQKK3dyaXRlQWxpYXNlcyAoRklMRSAqZmlsZSwgVGV4dFRhYmxlRGF0YSAqdHRkLCBBbGlhc1dyaXRlciB3cml0ZXIsIGNvbnN0IHZvaWQgKmRhdGEpIHsKKyAgY29uc3QgVGV4dFRhYmxlSGVhZGVyICpoZWFkZXIgPSBnZXRUZXh0VGFibGVIZWFkZXIodHRkKTsKKyAgY29uc3QgVGV4dFRhYmxlQWxpYXNFbnRyeSAqYWxpYXMgPSBnZXRUZXh0VGFibGVJdGVtKHR0ZCwgaGVhZGVyLT5hbGlhc0FycmF5KTsKKyAgY29uc3QgVGV4dFRhYmxlQWxpYXNFbnRyeSAqZW5kID0gYWxpYXMgKyBoZWFkZXItPmFsaWFzQ291bnQ7CisKKyAgd2hpbGUgKGFsaWFzIDwgZW5kKSB7CisgICAgaWYgKCF3cml0ZXIoZmlsZSwgYWxpYXMsIGRhdGEpKSByZXR1cm4gMDsKKyAgICBhbGlhcyArPSAxOworICB9CisKKyAgcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBUZXh0VGFibGVEYXRhICoKK3JlYWRUYWJsZV9uYXRpdmUgKGNvbnN0IGNoYXIgKnBhdGgsIEZJTEUgKmZpbGUsIGNvbnN0IHZvaWQgKmRhdGEpIHsKKyAgcmV0dXJuIHByb2Nlc3NUZXh0VGFibGVTdHJlYW0oZmlsZSwgcGF0aCk7Cit9CisKK3N0YXRpYyBpbnQKK3dyaXRlRG90c19uYXRpdmUgKEZJTEUgKmZpbGUsIHVuc2lnbmVkIGNoYXIgZG90cykgeworICBpZiAoZnByaW50ZihmaWxlLCAiKCIpID09IEVPRikgcmV0dXJuIDA7CisKKyAgZm9yICh1bnNpZ25lZCBjaGFyIGRvdD0wWDAxOyBkb3Q7IGRvdDw8PTEpIHsKKyAgICBjaGFyIG51bWJlciA9IChkb3RzICYgZG90KT8gYnJsRG90VG9OdW1iZXIoZG90KTogJyAnOworICAgIGlmIChmcHJpbnRmKGZpbGUsICIlYyIsIG51bWJlcikgPT0gRU9GKSByZXR1cm4gMDsKKyAgfQorCisgIGlmIChmcHJpbnRmKGZpbGUsICIpIikgPT0gRU9GKSByZXR1cm4gMDsKKyAgcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQKK3dyaXRlQ2hhcmFjdGVyX25hdGl2ZSAoCisgIEZJTEUgKmZpbGUsIGNvbnN0IGNoYXIgKmRpcmVjdGl2ZSwKKyAgd2NoYXJfdCBjaGFyYWN0ZXIsIHVuc2lnbmVkIGNoYXIgZG90cworKSB7CisgIGlmIChmcHJpbnRmKGZpbGUsICIlc1x0IiwgZGlyZWN0aXZlKSA9PSBFT0YpIHJldHVybiAwOworICBpZiAoIXdyaXRlSGV4YWRlY2ltYWxDaGFyYWN0ZXIoZmlsZSwgY2hhcmFjdGVyKSkgcmV0dXJuIDA7CisgIGlmIChmcHJpbnRmKGZpbGUsICJcdCIpID09IEVPRikgcmV0dXJuIDA7CisgIGlmICghd3JpdGVEb3RzX25hdGl2ZShmaWxlLCBkb3RzKSkgcmV0dXJuIDA7CisgIGlmIChmcHJpbnRmKGZpbGUsICJcdCMiKSA9PSBFT0YpIHJldHVybiAwOworCisgIGlmIChmcHJpbnRmKGZpbGUsICIgIikgPT0gRU9GKSByZXR1cm4gMDsKKyAgaWYgKCF3cml0ZVV0ZjhDZWxsKGZpbGUsIGRvdHMpKSByZXR1cm4gMDsKKworICBpZiAoIXdyaXRlQ2hhcmFjdGVyRGVzY3JpcHRpb24oZmlsZSwgY2hhcmFjdGVyKSkgcmV0dXJuIDA7CisgIHJldHVybiBlbmRMaW5lKGZpbGUpOworfQorCitzdGF0aWMgaW50Cit3cml0ZUFsaWFzX25hdGl2ZSAoRklMRSAqZmlsZSwgY29uc3QgVGV4dFRhYmxlQWxpYXNFbnRyeSAqYWxpYXMsIGNvbnN0IHZvaWQgKmRhdGEpIHsKKyAgaWYgKGZwcmludGYoZmlsZSwgImFsaWFzXHQiKSA9PSBFT0YpIHJldHVybiAwOworICBpZiAoIXdyaXRlSGV4YWRlY2ltYWxDaGFyYWN0ZXIoZmlsZSwgYWxpYXMtPmZyb20pKSByZXR1cm4gMDsKKyAgaWYgKGZwcmludGYoZmlsZSwgIlx0IikgPT0gRU9GKSByZXR1cm4gMDsKKyAgaWYgKCF3cml0ZUhleGFkZWNpbWFsQ2hhcmFjdGVyKGZpbGUsIGFsaWFzLT50bykpIHJldHVybiAwOworICBpZiAoZnByaW50ZihmaWxlLCAiXHQjIikgPT0gRU9GKSByZXR1cm4gMDsKKyAgaWYgKCF3cml0ZUNoYXJhY3RlckRlc2NyaXB0aW9uKGZpbGUsIGFsaWFzLT5mcm9tKSkgcmV0dXJuIDA7CisgIHJldHVybiBlbmRMaW5lKGZpbGUpOworfQorCitzdGF0aWMgaW50Cit3cml0ZVRhYmxlX25hdGl2ZSAoCisgIGNvbnN0IGNoYXIgKnBhdGgsIEZJTEUgKmZpbGUsIFRleHRUYWJsZURhdGEgKnR0ZCwgY29uc3Qgdm9pZCAqZGF0YQorKSB7CisgIGlmICghd3JpdGVIZWFkZXJDb21tZW50KGZpbGUsIHdyaXRlSGFzaENvbW1lbnQpKSByZXR1cm4gMDsKKyAgaWYgKCF3cml0ZUNoYXJhY3RlcnMoZmlsZSwgdHRkLCB3cml0ZUNoYXJhY3Rlcl9uYXRpdmUsIGRhdGEpKSByZXR1cm4gMDsKKyAgaWYgKCF3cml0ZUFsaWFzZXMoZmlsZSwgdHRkLCB3cml0ZUFsaWFzX25hdGl2ZSwgZGF0YSkpIHJldHVybiAwOworICByZXR1cm4gMTsKK30KKworc3RhdGljIFRleHRUYWJsZURhdGEgKgorcmVhZFRhYmxlX2JpbmFyeSAoY29uc3QgY2hhciAqcGF0aCwgRklMRSAqZmlsZSwgY29uc3Qgdm9pZCAqZGF0YSkgeworICBUZXh0VGFibGVEYXRhICp0dGQ7CisKKyAgaWYgKCh0dGQgPSBuZXdUZXh0VGFibGVEYXRhKCkpKSB7CisgICAgaW50IGNvdW50ID0gMFgxMDA7CisgICAgaW50IGJ5dGU7CisKKyAgICBmb3IgKGJ5dGU9MDsgYnl0ZTxjb3VudDsgYnl0ZSs9MSkgeworICAgICAgaW50IGRvdHMgPSBmZ2V0YyhmaWxlKTsKKworICAgICAgaWYgKGRvdHMgPT0gRU9GKSB7CisgICAgICAgIGlmIChmZXJyb3IoZmlsZSkpIHsKKyAgICAgICAgICBsb2dNZXNzYWdlKExPR19FUlIsICJpbnB1dCBlcnJvcjogJXM6ICVzIiwgcGF0aCwgc3RyZXJyb3IoZXJybm8pKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICBsb2dNZXNzYWdlKExPR19FUlIsICJ0YWJsZSB0b28gc2hvcnQ6ICVzIiwgcGF0aCk7CisgICAgICAgIH0KKworICAgICAgICBicmVhazsKKyAgICAgIH0KKworICAgICAgaWYgKGRhdGEpIGRvdHMgPSBtYXBEb3RzKGRvdHMsIGRhdGEsIGRvdHNJbnRlcm5hbCk7CisgICAgICBpZiAoIXNldFRleHRUYWJsZUJ5dGUodHRkLCBieXRlLCBkb3RzKSkgYnJlYWs7CisgICAgfQorCisgICAgaWYgKGJ5dGUgPT0gY291bnQpIHJldHVybiB0dGQ7CisgICAgZGVzdHJveVRleHRUYWJsZURhdGEodHRkKTsKKyAgfQorCisgIHJldHVybiBOVUxMOworfQorCitzdGF0aWMgaW50Cit3cml0ZVRhYmxlX2JpbmFyeSAoCisgIGNvbnN0IGNoYXIgKnBhdGgsIEZJTEUgKmZpbGUsIFRleHRUYWJsZURhdGEgKnR0ZCwgY29uc3Qgdm9pZCAqZGF0YQorKSB7CisgIGZvciAodW5zaWduZWQgaW50IGJ5dGU9MDsgYnl0ZTwwWDEwMDsgYnl0ZSs9MSkgeworICAgIHVuc2lnbmVkIGNoYXIgZG90czsKKworICAgIHsKKyAgICAgIHdpbnRfdCBjaGFyYWN0ZXIgPSBjb252ZXJ0Q2hhclRvV2NoYXIoYnl0ZSk7CisgICAgICBpZiAoY2hhcmFjdGVyID09IFdFT0YpIGNoYXJhY3RlciA9IFVOSUNPREVfUkVQTEFDRU1FTlRfQ0hBUkFDVEVSOworCisgICAgICBpZiAoIWdldERvdHModHRkLCBjaGFyYWN0ZXIsICZkb3RzKSkgeworICAgICAgICBkb3RzID0gMDsKKyAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoZGF0YSkgZG90cyA9IG1hcERvdHMoZG90cywgZG90c0ludGVybmFsLCBkYXRhKTsKKyAgICBpZiAoZnB1dGMoZG90cywgZmlsZSkgPT0gRU9GKSB7CisgICAgICBsb2dNZXNzYWdlKExPR19FUlIsICJvdXRwdXQgZXJyb3I6ICVzOiAlcyIsIHBhdGgsIHN0cmVycm9yKGVycm5vKSk7CisgICAgICByZXR1cm4gMDsKKyAgICB9CisgIH0KKworICByZXR1cm4gMTsKK30KKworc3RhdGljIFRleHRUYWJsZURhdGEgKgorcmVhZFRhYmxlX0xpYkxvdWlzIChjb25zdCBjaGFyICpwYXRoLCBGSUxFICpmaWxlLCBjb25zdCB2b2lkICpkYXRhKSB7CisgIHJldHVybiBwcm9jZXNzTGliTG91aXNTdHJlYW0oZmlsZSwgcGF0aCk7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICoKK2dldENoYXJhY3RlclR5cGVfTGliTG91aXMgKHdjaGFyX3QgY2hhcmFjdGVyKSB7CisgIGlmIChpc3dzcGFjZShjaGFyYWN0ZXIpKSByZXR1cm4gInNwYWNlIjsKKworICBpZiAoaXN3bG93ZXIoY2hhcmFjdGVyKSkgcmV0dXJuICJsb3dlcmNhc2UiOworICBpZiAoaXN3dXBwZXIoY2hhcmFjdGVyKSkgcmV0dXJuICJ1cHBlcmNhc2UiOworICBpZiAoaXN3YWxwaGEoY2hhcmFjdGVyKSkgcmV0dXJuICJsZXR0ZXIiOworCisgIGlmIChpc3dkaWdpdChjaGFyYWN0ZXIpKSByZXR1cm4gImRpZ2l0IjsKKyAgaWYgKGlzd3hkaWdpdChjaGFyYWN0ZXIpKSByZXR1cm4gImRpZ2l0IjsKKworICBpZiAoaXN3cHVuY3QoY2hhcmFjdGVyKSkgcmV0dXJuICJwdW5jdHVhdGlvbiI7CisgIHJldHVybiBOVUxMOworfQorCitzdGF0aWMgaW50Cit3cml0ZUNoYXJhY3Rlcl9MaWJMb3VpcyAoCisgIEZJTEUgKmZpbGUsIGNvbnN0IGNoYXIgKmRpcmVjdGl2ZSwKKyAgd2NoYXJfdCBjaGFyYWN0ZXIsIHVuc2lnbmVkIGNoYXIgZG90cworKSB7CisgIGNvbnN0IGNoYXIgKnR5cGUgPSBnZXRDaGFyYWN0ZXJUeXBlX0xpYkxvdWlzKGNoYXJhY3Rlcik7CisgIGlmICghdHlwZSkgcmV0dXJuIDE7CisKKyAgaWYgKCpkaXJlY3RpdmUpIHsKKyAgICBpZiAoZnByaW50ZihmaWxlLCAiJXMgIiwgZGlyZWN0aXZlKSA9PSBFT0YpIHsKKyAgICAgIHJldHVybiAwOworICAgIH0KKyAgfQorCisgIGlmIChmcHJpbnRmKGZpbGUsICIlc1x0IiwgdHlwZSkgPT0gRU9GKSByZXR1cm4gMDsKKworICBpZiAoY2hhcmFjdGVyID09IFdDX0MoJ1xcJykpIHsKKyAgICBpZiAoIXdyaXRlU3RyaW5nKGZpbGUsICJcXFxcIikpIHJldHVybiAwOworICB9IGVsc2UgaWYgKGNoYXJhY3RlciA9PSBXQ19DKCdcZicpKSB7CisgICAgaWYgKCF3cml0ZVN0cmluZyhmaWxlLCAiXFxmIikpIHJldHVybiAwOworICB9IGVsc2UgaWYgKGNoYXJhY3RlciA9PSBXQ19DKCdcbicpKSB7CisgICAgaWYgKCF3cml0ZVN0cmluZyhmaWxlLCAiXFxuIikpIHJldHVybiAwOworICB9IGVsc2UgaWYgKGNoYXJhY3RlciA9PSBXQ19DKCdccicpKSB7CisgICAgaWYgKCF3cml0ZVN0cmluZyhmaWxlLCAiXFxyIikpIHJldHVybiAwOworICB9IGVsc2UgaWYgKGNoYXJhY3RlciA9PSBXQ19DKCcgJykpIHsKKyAgICBpZiAoIXdyaXRlU3RyaW5nKGZpbGUsICJcXHMiKSkgcmV0dXJuIDA7CisgIH0gZWxzZSBpZiAoY2hhcmFjdGVyID09IFdDX0MoJ1x0JykpIHsKKyAgICBpZiAoIXdyaXRlU3RyaW5nKGZpbGUsICJcXHQiKSkgcmV0dXJuIDA7CisgIH0gZWxzZSBpZiAoY2hhcmFjdGVyID09IFdDX0MoJ1x2JykpIHsKKyAgICBpZiAoIXdyaXRlU3RyaW5nKGZpbGUsICJcXHYiKSkgcmV0dXJuIDA7CisgIH0gZWxzZSBpZiAoKGNoYXJhY3RlciA+IDBYMjApICYmIChjaGFyYWN0ZXIgPCAwWDdGKSAmJiAoY2hhcmFjdGVyICE9ICcjJykpIHsKKyAgICB3aW50X3QgdmFsdWUgPSBjaGFyYWN0ZXI7CisgICAgaWYgKGZwcmludGYoZmlsZSwgIiUiIFBSSXdjLCB2YWx1ZSkgPT0gRU9GKSByZXR1cm4gMDsKKyAgfSBlbHNlIHsKKyAgICB1bnNpZ25lZCBsb25nIGludCB2YWx1ZSA9IGNoYXJhY3RlcjsKKyAgICBpbnQgZGlnaXRzOworICAgIGNoYXIgZm9ybWF0OworCisgICAgaWYgKHZhbHVlIDwgKDEgPDwgMTYpKSB7CisgICAgICBkaWdpdHMgPSA0OworICAgICAgZm9ybWF0ID0gJ3gnOworICAgIH0gZWxzZSBpZiAodmFsdWUgPCAoMSA8PCAyMCkpIHsKKyAgICAgIGRpZ2l0cyA9IDU7CisgICAgICBmb3JtYXQgPSAneSc7CisgICAgfSBlbHNlIHsKKyAgICAgIGRpZ2l0cyA9IDg7CisgICAgICBmb3JtYXQgPSAneic7CisgICAgfQorCisgICAgaWYgKGZwcmludGYoZmlsZSwgIlxcJWMlMCpsWCIsIGZvcm1hdCwgZGlnaXRzLCB2YWx1ZSkgPT0gRU9GKSByZXR1cm4gMDsKKyAgfQorCisgIGlmIChmcHJpbnRmKGZpbGUsICJcdCIpID09IEVPRikgcmV0dXJuIDA7CisgIGlmICghZG90cykgeworICAgIGlmIChmcHJpbnRmKGZpbGUsICIwIikgPT0gRU9GKSByZXR1cm4gMDsKKyAgfSBlbHNlIHsKKyAgICBpZiAoIXdyaXRlRG90cyhmaWxlLCBkb3RzKSkgcmV0dXJuIDA7CisgIH0KKworICB7CisgICAgY2hhciBuYW1lWzBYNDBdOworCisgICAgaWYgKGdldENoYXJhY3Rlck5hbWUoY2hhcmFjdGVyLCBuYW1lLCBzaXplb2YobmFtZSkpKSB7CisgICAgICBpZiAoZnByaW50ZihmaWxlLCAiXHQjICVzIiwgbmFtZSkgPT0gRU9GKSByZXR1cm4gMDsKKyAgICB9CisgIH0KKworICByZXR1cm4gZW5kTGluZShmaWxlKTsKK30KKworc3RhdGljIGludAord3JpdGVUYWJsZV9MaWJMb3VpcyAoCisgIGNvbnN0IGNoYXIgKnBhdGgsIEZJTEUgKmZpbGUsIFRleHRUYWJsZURhdGEgKnR0ZCwgY29uc3Qgdm9pZCAqZGF0YQorKSB7CisgIGlmICghd3JpdGVIZWFkZXJDb21tZW50KGZpbGUsIHdyaXRlSGFzaENvbW1lbnQpKSByZXR1cm4gMDsKKyAgaWYgKCF3cml0ZUNoYXJhY3RlcnMoZmlsZSwgdHRkLCB3cml0ZUNoYXJhY3Rlcl9MaWJMb3VpcywgZGF0YSkpIHJldHVybiAwOworICByZXR1cm4gMTsKK30KKworI2lmZGVmIEhBVkVfSUNPTlZfSAorc3RhdGljIFRleHRUYWJsZURhdGEgKgorcmVhZFRhYmxlX2dub21lIChjb25zdCBjaGFyICpwYXRoLCBGSUxFICpmaWxlLCBjb25zdCB2b2lkICpkYXRhKSB7CisgIHJldHVybiBwcm9jZXNzR25vbWVCcmFpbGxlU3RyZWFtKGZpbGUsIHBhdGgpOworfQorCitzdGF0aWMgaW50Cit3cml0ZUNoYXJhY3Rlcl9nbm9tZSAoCisgIEZJTEUgKmZpbGUsIGNvbnN0IGNoYXIgKmRpcmVjdGl2ZSwKKyAgd2NoYXJfdCBjaGFyYWN0ZXIsIHVuc2lnbmVkIGNoYXIgZG90cworKSB7CisgIHdjaGFyX3QgcGF0dGVybiA9IFVOSUNPREVfQlJBSUxMRV9ST1cgfCBkb3RzOworCisgIGlmIChpc3dwcmludChjaGFyYWN0ZXIpICYmICFpc3dzcGFjZShjaGFyYWN0ZXIpKSB7CisgICAgVXRmOEJ1ZmZlciB1dGY4Q2hhcmFjdGVyOworICAgIGlmICghY29udmVydFdjaGFyVG9VdGY4KGNoYXJhY3RlciwgdXRmOENoYXJhY3RlcikpIHJldHVybiAwOworCisgICAgVXRmOEJ1ZmZlciB1dGY4UGF0dGVybjsKKyAgICBpZiAoIWNvbnZlcnRXY2hhclRvVXRmOChwYXR0ZXJuLCB1dGY4UGF0dGVybikpIHJldHVybiAwOworCisgICAgaWYgKGZwcmludGYoZmlsZSwgIlVDUy1DSEFSICVzICVzIiwgdXRmOENoYXJhY3RlciwgdXRmOFBhdHRlcm4pID09IEVPRikgcmV0dXJuIDA7CisgIH0gZWxzZSB7CisgICAgdWludDMyX3QgYyA9IGNoYXJhY3RlcjsKKyAgICB1aW50MzJfdCBwID0gcGF0dGVybjsKKyAgICBpZiAoZnByaW50ZihmaWxlLCAiVU5JQ09ERS1DSEFSIFUrJTAyIiBQUkl4MzIgIiBVKyUwNCIgUFJJeDMyLCBjLCBwKSA9PSBFT0YpIHJldHVybiAwOworICB9CisKKyAgeworICAgIGNoYXIgbmFtZVswWDQwXTsKKworICAgIGlmIChnZXRDaGFyYWN0ZXJOYW1lKGNoYXJhY3RlciwgbmFtZSwgc2l6ZW9mKG5hbWUpKSkgeworICAgICAgaWYgKGZwcmludGYoZmlsZSwgIiAgIyAlcyIsIG5hbWUpID09IEVPRikgcmV0dXJuIDA7CisgICAgfQorICB9CisKKyAgcmV0dXJuIGVuZExpbmUoZmlsZSk7Cit9CisKK3N0YXRpYyBpbnQKK3dyaXRlVGFibGVfZ25vbWUgKAorICBjb25zdCBjaGFyICpwYXRoLCBGSUxFICpmaWxlLCBUZXh0VGFibGVEYXRhICp0dGQsIGNvbnN0IHZvaWQgKmRhdGEKKykgeworICAvKiBUT0RPIFVOS05PV04tQ0hBUiAld2MgYWxsICovCisgIGlmIChmcHJpbnRmKGZpbGUsICJFTkNPRElORyBVVEYtOFxuIikgPT0gRU9GKSByZXR1cm4gMDsKKyAgaWYgKCF3cml0ZUhlYWRlckNvbW1lbnQoZmlsZSwgd3JpdGVIYXNoQ29tbWVudCkpIHJldHVybiAwOworICBpZiAoIXdyaXRlQ2hhcmFjdGVycyhmaWxlLCB0dGQsIHdyaXRlQ2hhcmFjdGVyX2dub21lLCBkYXRhKSkgcmV0dXJuIDA7CisgIHJldHVybiAxOworfQorI2VuZGlmIC8qIEhBVkVfSUNPTlZfSCAqLworCitzdGF0aWMgaW50Cit3cml0ZUNoYXJhY3RlckRvdHNfWENvbXBvc2UgKEZJTEUgKmZpbGUsIHVuc2lnbmVkIGNoYXIgZG90cykgeworICBpZiAoZnByaW50ZihmaWxlLCAiPGJyYWlsbGVfIikgPT0gRU9GKSByZXR1cm4gMDsKKworICBpZiAoIWRvdHMpIHsKKyAgICBpZiAoZnByaW50ZihmaWxlLCAiYmxhbmsiKSA9PSBFT0YpIHJldHVybiAwOworICB9IGVsc2UgeworICAgIGlmIChmcHJpbnRmKGZpbGUsICJkb3RzXyIpID09IEVPRikgcmV0dXJuIDA7CisgICAgaWYgKCF3cml0ZURvdHMoZmlsZSwgZG90cykpIHJldHVybiAwOworICB9CisKKyAgaWYgKGZwcmludGYoZmlsZSwgIj4iKSA9PSBFT0YpIHJldHVybiAwOworCisgIHJldHVybiAxOworfQorCitzdGF0aWMgaW50Cit3cml0ZUNoYXJhY3Rlck91dHB1dF9YQ29tcG9zZSAoRklMRSAqZmlsZSwgd2NoYXJfdCBjaGFyYWN0ZXIpIHsKKyAgaWYgKGZwcmludGYoZmlsZSwgIiA6IFwiIikgPT0gRU9GKSByZXR1cm4gMDsKKworICBzd2l0Y2ggKGNoYXJhY3RlcikgeworICAgIGNhc2UgV0NfQygnXG4nKToKKyAgICAgIGlmIChmcHJpbnRmKGZpbGUsICJcXG4iKSA9PSBFT0YpIHJldHVybiAwOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFdDX0MoJ1xyJyk6CisgICAgICBpZiAoZnByaW50ZihmaWxlLCAiXFxyIikgPT0gRU9GKSByZXR1cm4gMDsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBXQ19DKCciJyk6CisgICAgICBpZiAoZnByaW50ZihmaWxlLCAiXFxcIiIpID09IEVPRikgcmV0dXJuIDA7CisgICAgICBicmVhazsKKworICAgIGNhc2UgV0NfQygnXFwnKToKKyAgICAgIGlmIChmcHJpbnRmKGZpbGUsICJcXFxcIikgPT0gRU9GKSByZXR1cm4gMDsKKyAgICAgIGJyZWFrOworCisgICAgZGVmYXVsdDoKKyAgICAgIGlmIChmcHJpbnRmKGZpbGUsICIlbGMiLCAod2ludF90KWNoYXJhY3RlcikgPT0gRU9GKSByZXR1cm4gMDsKKyAgICAgIGJyZWFrOworICB9CisKKyAgaWYgKGZwcmludGYoZmlsZSwgIlwiIikgPT0gRU9GKSByZXR1cm4gMDsKKworICB7CisgICAgY2hhciBuYW1lWzBYNDBdOworCisgICAgaWYgKGdldENoYXJhY3Rlck5hbWUoY2hhcmFjdGVyLCBuYW1lLCBzaXplb2YobmFtZSkpKSB7CisgICAgICBpZiAoZnByaW50ZihmaWxlLCAiICAjICVzIiwgbmFtZSkgPT0gRU9GKSByZXR1cm4gMDsKKyAgICB9CisgIH0KKworICByZXR1cm4gZW5kTGluZShmaWxlKTsKK30KKworc3RhdGljIGludAord3JpdGVDaGFyYWN0ZXJfWENvbXBvc2UgKAorICBGSUxFICpmaWxlLCBjb25zdCBjaGFyICpkaXJlY3RpdmUsCisgIHdjaGFyX3QgY2hhcmFjdGVyLCB1bnNpZ25lZCBjaGFyIGRvdHMKKykgeworICBpZiAoIXdyaXRlQ2hhcmFjdGVyRG90c19YQ29tcG9zZSAoZmlsZSwgZG90cykpIHJldHVybiAwOworICByZXR1cm4gd3JpdGVDaGFyYWN0ZXJPdXRwdXRfWENvbXBvc2UoZmlsZSwgY2hhcmFjdGVyKTsKK30KKworc3RhdGljIGludAord3JpdGVUYWJsZV9YQ29tcG9zZSAoCisgIGNvbnN0IGNoYXIgKnBhdGgsIEZJTEUgKmZpbGUsIFRleHRUYWJsZURhdGEgKnR0ZCwgY29uc3Qgdm9pZCAqZGF0YQorKSB7CisgIGlmICghd3JpdGVIZWFkZXJDb21tZW50KGZpbGUsIHdyaXRlSGFzaENvbW1lbnQpKSByZXR1cm4gMDsKKyAgaWYgKCF3cml0ZUNoYXJhY3RlcnMoZmlsZSwgdHRkLCB3cml0ZUNoYXJhY3Rlcl9YQ29tcG9zZSwgZGF0YSkpIHJldHVybiAwOworICByZXR1cm4gMTsKK30KKworc3RhdGljIGludAord3JpdGVDaGFyYWN0ZXJfaGFsZl9YQ29tcG9zZSAoCisgIEZJTEUgKmZpbGUsIHdjaGFyX3QgY2hhcmFjdGVyLAorICB1bnNpZ25lZCBjaGFyIGxlZnREb3RzLCB1bnNpZ25lZCBjaGFyIHJpZ2h0RG90cworKSB7CisgIGlmICghd3JpdGVDaGFyYWN0ZXJEb3RzX1hDb21wb3NlIChmaWxlLCBsZWZ0RG90cykpIHJldHVybiAwOworICBpZiAoZnByaW50ZihmaWxlLCAiICIpID09IEVPRikgcmV0dXJuIDA7CisgIGlmICghd3JpdGVDaGFyYWN0ZXJEb3RzX1hDb21wb3NlIChmaWxlLCByaWdodERvdHMpKSByZXR1cm4gMDsKKyAgcmV0dXJuIHdyaXRlQ2hhcmFjdGVyT3V0cHV0X1hDb21wb3NlKGZpbGUsIGNoYXJhY3Rlcik7Cit9CisKK3N0YXRpYyBpbnQKK3dyaXRlQ2hhcmFjdGVyX2xlZnRyaWdodGhhbGZfWENvbXBvc2UgKAorICBGSUxFICpmaWxlLCBjb25zdCBjaGFyICpkaXJlY3RpdmUsCisgIHdjaGFyX3QgY2hhcmFjdGVyLCB1bnNpZ25lZCBjaGFyIGRvdHMKKykgeworICB1bnNpZ25lZCBjaGFyIGxlZnREb3RzID0gYnJsR2V0TGVmdERvdHMoZG90cyk7CisgIHVuc2lnbmVkIGNoYXIgcmlnaHREb3RzID0gYnJsR2V0UmlnaHREb3RzKGRvdHMpOworCisgIGlmICghd3JpdGVDaGFyYWN0ZXJfaGFsZl9YQ29tcG9zZShmaWxlLCBjaGFyYWN0ZXIsIGxlZnREb3RzLCByaWdodERvdHMpKSB7CisgICAgcmV0dXJuIDA7CisgIH0KKworICBpZiAoIWxlZnREb3RzICYmIHJpZ2h0RG90cykgeworICAgIC8qIEFsc28gYWRkIHNob3J0Y3V0IHdpdGhvdXQgYmxhbmsgcGF0dGVybiBmb3IgbGVmdCBwYXJ0LiAgKi8KKyAgICBpZiAoIXdyaXRlQ2hhcmFjdGVyRG90c19YQ29tcG9zZSAoZmlsZSwgcmlnaHREb3RzKSkgcmV0dXJuIDA7CisgICAgaWYgKCF3cml0ZUNoYXJhY3Rlck91dHB1dF9YQ29tcG9zZShmaWxlLCBjaGFyYWN0ZXIpKSByZXR1cm4gMDsKKyAgfQorCisgIHJldHVybiAxOworfQorCitzdGF0aWMgaW50Cit3cml0ZVRhYmxlX2xlZnRyaWdodGhhbGZfWENvbXBvc2UgKAorICBjb25zdCBjaGFyICpwYXRoLCBGSUxFICpmaWxlLCBUZXh0VGFibGVEYXRhICp0dGQsIGNvbnN0IHZvaWQgKmRhdGEKKykgeworICBpZiAoIXdyaXRlSGVhZGVyQ29tbWVudChmaWxlLCB3cml0ZUhhc2hDb21tZW50KSkgcmV0dXJuIDA7CisgIGlmICghd3JpdGVDaGFyYWN0ZXJzKGZpbGUsIHR0ZCwgd3JpdGVDaGFyYWN0ZXJfbGVmdHJpZ2h0aGFsZl9YQ29tcG9zZSwgZGF0YSkpIHJldHVybiAwOworICByZXR1cm4gMTsKK30KKworc3RhdGljIGludAord3JpdGVDaGFyYWN0ZXJfbGVmdGhhbGZfWENvbXBvc2UgKAorICBGSUxFICpmaWxlLCBjb25zdCBjaGFyICpkaXJlY3RpdmUsCisgIHdjaGFyX3QgY2hhcmFjdGVyLCB1bnNpZ25lZCBjaGFyIGRvdHMKKykgeworICByZXR1cm4gd3JpdGVDaGFyYWN0ZXJfaGFsZl9YQ29tcG9zZSgKKyAgICBmaWxlLCBjaGFyYWN0ZXIsCisgICAgYnJsR2V0TGVmdERvdHMoZG90cyksCisgICAgYnJsR2V0UmlnaHREb3RzVG9MZWZ0RG90cyhkb3RzKQorICApOworfQorCitzdGF0aWMgaW50Cit3cml0ZVRhYmxlX2xlZnRoYWxmX1hDb21wb3NlICgKKyAgY29uc3QgY2hhciAqcGF0aCwgRklMRSAqZmlsZSwgVGV4dFRhYmxlRGF0YSAqdHRkLCBjb25zdCB2b2lkICpkYXRhCispIHsKKyAgaWYgKCF3cml0ZUhlYWRlckNvbW1lbnQoZmlsZSwgd3JpdGVIYXNoQ29tbWVudCkpIHJldHVybiAwOworICBpZiAoIXdyaXRlQ2hhcmFjdGVycyhmaWxlLCB0dGQsIHdyaXRlQ2hhcmFjdGVyX2xlZnRoYWxmX1hDb21wb3NlLCBkYXRhKSkgcmV0dXJuIDA7CisgIHJldHVybiAxOworfQorCitzdGF0aWMgaW50Cit3cml0ZUNoYXJhY3Rlcl9sZWZ0aGFsZmFsdF9YQ29tcG9zZSAoCisgIEZJTEUgKmZpbGUsIGNvbnN0IGNoYXIgKmRpcmVjdGl2ZSwKKyAgd2NoYXJfdCBjaGFyYWN0ZXIsIHVuc2lnbmVkIGNoYXIgZG90cworKSB7CisgIHJldHVybiB3cml0ZUNoYXJhY3Rlcl9oYWxmX1hDb21wb3NlKAorICAgIGZpbGUsIGNoYXJhY3RlciwKKyAgICBicmxHZXRMZWZ0RG90cyhkb3RzKSwKKyAgICBicmxHZXRSaWdodERvdHNUb0xlZnREb3RzQWx0KGRvdHMpCisgICk7Cit9CisKK3N0YXRpYyBpbnQKK3dyaXRlVGFibGVfbGVmdGhhbGZhbHRfWENvbXBvc2UgKAorICBjb25zdCBjaGFyICpwYXRoLCBGSUxFICpmaWxlLCBUZXh0VGFibGVEYXRhICp0dGQsIGNvbnN0IHZvaWQgKmRhdGEKKykgeworICBpZiAoIXdyaXRlSGVhZGVyQ29tbWVudChmaWxlLCB3cml0ZUhhc2hDb21tZW50KSkgcmV0dXJuIDA7CisgIGlmICghd3JpdGVDaGFyYWN0ZXJzKGZpbGUsIHR0ZCwgd3JpdGVDaGFyYWN0ZXJfbGVmdGhhbGZhbHRfWENvbXBvc2UsIGRhdGEpKSByZXR1cm4gMDsKKyAgcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQKK3dyaXRlQ2hhcmFjdGVyX3JpZ2h0aGFsZl9YQ29tcG9zZSAoCisgIEZJTEUgKmZpbGUsIGNvbnN0IGNoYXIgKmRpcmVjdGl2ZSwKKyAgd2NoYXJfdCBjaGFyYWN0ZXIsIHVuc2lnbmVkIGNoYXIgZG90cworKSB7CisgIHJldHVybiB3cml0ZUNoYXJhY3Rlcl9oYWxmX1hDb21wb3NlKAorICAgIGZpbGUsIGNoYXJhY3RlciwKKyAgICBicmxHZXRMZWZ0RG90c1RvUmlnaHREb3RzKGRvdHMpLAorICAgIGJybEdldFJpZ2h0RG90cyhkb3RzKQorICApOworfQorCitzdGF0aWMgaW50Cit3cml0ZVRhYmxlX3JpZ2h0aGFsZl9YQ29tcG9zZSAoCisgIGNvbnN0IGNoYXIgKnBhdGgsIEZJTEUgKmZpbGUsIFRleHRUYWJsZURhdGEgKnR0ZCwgY29uc3Qgdm9pZCAqZGF0YQorKSB7CisgIGlmICghd3JpdGVIZWFkZXJDb21tZW50KGZpbGUsIHdyaXRlSGFzaENvbW1lbnQpKSByZXR1cm4gMDsKKyAgaWYgKCF3cml0ZUNoYXJhY3RlcnMoZmlsZSwgdHRkLCB3cml0ZUNoYXJhY3Rlcl9yaWdodGhhbGZfWENvbXBvc2UsIGRhdGEpKSByZXR1cm4gMDsKKyAgcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQKK3dyaXRlQ2hhcmFjdGVyX3JpZ2h0aGFsZmFsdF9YQ29tcG9zZSAoCisgIEZJTEUgKmZpbGUsIGNvbnN0IGNoYXIgKmRpcmVjdGl2ZSwKKyAgd2NoYXJfdCBjaGFyYWN0ZXIsIHVuc2lnbmVkIGNoYXIgZG90cworKSB7CisgIHJldHVybiB3cml0ZUNoYXJhY3Rlcl9oYWxmX1hDb21wb3NlKAorICAgIGZpbGUsIGNoYXJhY3RlciwKKyAgICBicmxHZXRMZWZ0RG90c1RvUmlnaHREb3RzQWx0KGRvdHMpLAorICAgIGJybEdldFJpZ2h0RG90cyhkb3RzKQorICApOworfQorCitzdGF0aWMgaW50Cit3cml0ZVRhYmxlX3JpZ2h0aGFsZmFsdF9YQ29tcG9zZSAoCisgIGNvbnN0IGNoYXIgKnBhdGgsIEZJTEUgKmZpbGUsIFRleHRUYWJsZURhdGEgKnR0ZCwgY29uc3Qgdm9pZCAqZGF0YQorKSB7CisgIGlmICghd3JpdGVIZWFkZXJDb21tZW50KGZpbGUsIHdyaXRlSGFzaENvbW1lbnQpKSByZXR1cm4gMDsKKyAgaWYgKCF3cml0ZUNoYXJhY3RlcnMoZmlsZSwgdHRkLCB3cml0ZUNoYXJhY3Rlcl9yaWdodGhhbGZhbHRfWENvbXBvc2UsIGRhdGEpKSByZXR1cm4gMDsKKyAgcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQKK3dyaXRlQ2hhcmFjdGVyX0pBV1MgKAorICBGSUxFICpmaWxlLCBjb25zdCBjaGFyICpkaXJlY3RpdmUsCisgIHdjaGFyX3QgY2hhcmFjdGVyLCB1bnNpZ25lZCBjaGFyIGRvdHMKKykgeworICB1aW50MzJfdCB2YWx1ZSA9IGNoYXJhY3RlcjsKKworICBpZiAoZnByaW50ZihmaWxlLCAiVSslMDQiIFBSSVgzMiAiPSIsIHZhbHVlKSA9PSBFT0YpIHJldHVybiAwOworICBpZiAoIXdyaXRlRG90cyhmaWxlLCBkb3RzKSkgcmV0dXJuIDA7CisgIHJldHVybiBlbmRMaW5lKGZpbGUpOworfQorCitzdGF0aWMgaW50Cit3cml0ZVRhYmxlX0pBV1MgKAorICBjb25zdCBjaGFyICpwYXRoLCBGSUxFICpmaWxlLCBUZXh0VGFibGVEYXRhICp0dGQsIGNvbnN0IHZvaWQgKmRhdGEKKykgeworICBpZiAoIXdyaXRlSGVhZGVyQ29tbWVudChmaWxlLCB3cml0ZVNlbWljb2xvbkNvbW1lbnQpKSByZXR1cm4gMDsKKyAgaWYgKCF3cml0ZUNoYXJhY3RlcnMoZmlsZSwgdHRkLCB3cml0ZUNoYXJhY3Rlcl9KQVdTLCBkYXRhKSkgcmV0dXJuIDA7CisgIHJldHVybiAxOworfQorCitzdGF0aWMgaW50Cit3cml0ZUNoYXJhY3RlclZhbHVlX0NQcmVwcm9jZXNzb3IgKEZJTEUgKmZpbGUsIHdjaGFyX3QgY2hhcmFjdGVyKSB7CisgIHJldHVybiBmcHJpbnRmKGZpbGUsICIwWCUwOCIgUFJJWDMyLCAodWludDMyX3QpY2hhcmFjdGVyKSAhPSBFT0Y7Cit9CisKK3N0YXRpYyBpbnQKK3dyaXRlQ2hhcmFjdGVyTmFtZV9DUHJlcHJvY2Vzc29yIChGSUxFICpmaWxlLCB3Y2hhcl90IGNoYXJhY3RlcikgeworICBjaGFyIG5hbWVbMFg0MF07CisKKyAgaWYgKGdldENoYXJhY3Rlck5hbWUoY2hhcmFjdGVyLCBuYW1lLCBzaXplb2YobmFtZSkpKSB7CisgICAgaWYgKCF3cml0ZVN0cmluZyhmaWxlLCAiXCIiKSkgcmV0dXJuIDA7CisgICAgaWYgKCF3cml0ZVN0cmluZyhmaWxlLCBuYW1lKSkgcmV0dXJuIDA7CisgICAgaWYgKCF3cml0ZVN0cmluZyhmaWxlLCAiXCIiKSkgcmV0dXJuIDA7CisgIH0gZWxzZSB7CisgICAgaWYgKCFiZWdpbkNNYWNybyhmaWxlLCAiQlJMVFRZX1RFWFRfVEFCTEVfTk9fTkFNRSIpKSByZXR1cm4gMDsKKyAgICBpZiAoIXdyaXRlQ2hhcmFjdGVyVmFsdWVfQ1ByZXByb2Nlc3NvcihmaWxlLCBjaGFyYWN0ZXIpKSByZXR1cm4gMDsKKyAgICBpZiAoIWVuZENNYWNybyhmaWxlKSkgcmV0dXJuIDA7CisgIH0KKworICByZXR1cm4gMTsKK30KKworc3RhdGljIGludAord3JpdGVDaGFyYWN0ZXJfQ1ByZXByb2Nlc3NvciAoCisgIEZJTEUgKmZpbGUsIGNvbnN0IGNoYXIgKmRpcmVjdGl2ZSwKKyAgd2NoYXJfdCBjaGFyYWN0ZXIsIHVuc2lnbmVkIGNoYXIgZG90cworKSB7CisgIGlmICghYmVnaW5DTWFjcm8oZmlsZSwgIkJSTFRUWV9URVhUX1RBQkxFX0NIQVJBQ1RFUiIpKSByZXR1cm4gMDsKKyAgaWYgKCF3cml0ZUNoYXJhY3RlclZhbHVlX0NQcmVwcm9jZXNzb3IoZmlsZSwgY2hhcmFjdGVyKSkgcmV0dXJuIDA7CisKKyAgaWYgKCFuZXh0Q0FyZ3VtZW50KGZpbGUpKSByZXR1cm4gMDsKKyAgaWYgKGZwcmludGYoZmlsZSwgIjBYJTAyIiBQUklYOCwgZG90cykgPT0gRU9GKSByZXR1cm4gMDsKKworICBpZiAoIW5leHRDQXJndW1lbnQoZmlsZSkpIHJldHVybiAwOworICBpZiAoZnByaW50ZihmaWxlLCAiJXMiLCBkaXJlY3RpdmUpID09IEVPRikgcmV0dXJuIDA7CisKKyAgaWYgKCFuZXh0Q0FyZ3VtZW50KGZpbGUpKSByZXR1cm4gMDsKKyAgaWYgKCF3cml0ZUNoYXJhY3Rlck5hbWVfQ1ByZXByb2Nlc3NvcihmaWxlLCBjaGFyYWN0ZXIpKSByZXR1cm4gMDsKKworICBpZiAoIWVuZENNYWNybyhmaWxlKSkgcmV0dXJuIDA7CisgIHJldHVybiBlbmRMaW5lKGZpbGUpOworfQorCitzdGF0aWMgaW50Cit3cml0ZUFsaWFzX0NQcmVwcm9jZXNzb3IgKEZJTEUgKmZpbGUsIGNvbnN0IFRleHRUYWJsZUFsaWFzRW50cnkgKmFsaWFzLCBjb25zdCB2b2lkICpkYXRhKSB7CisgIGlmICghYmVnaW5DTWFjcm8oZmlsZSwgIkJSTFRUWV9URVhUX1RBQkxFX0FMSUFTIikpIHJldHVybiAwOworICBpZiAoIXdyaXRlQ2hhcmFjdGVyVmFsdWVfQ1ByZXByb2Nlc3NvcihmaWxlLCBhbGlhcy0+ZnJvbSkpIHJldHVybiAwOworCisgIGlmICghbmV4dENBcmd1bWVudChmaWxlKSkgcmV0dXJuIDA7CisgIGlmICghd3JpdGVDaGFyYWN0ZXJWYWx1ZV9DUHJlcHJvY2Vzc29yKGZpbGUsIGFsaWFzLT50bykpIHJldHVybiAwOworCisgIGlmICghbmV4dENBcmd1bWVudChmaWxlKSkgcmV0dXJuIDA7CisgIGlmICghd3JpdGVDaGFyYWN0ZXJOYW1lX0NQcmVwcm9jZXNzb3IoZmlsZSwgYWxpYXMtPmZyb20pKSByZXR1cm4gMDsKKworICBpZiAoIWVuZENNYWNybyhmaWxlKSkgcmV0dXJuIDA7CisgIGlmICghZW5kTGluZShmaWxlKSkgcmV0dXJuIDA7CisgIHJldHVybiAxOworfQorCitzdGF0aWMgaW50Cit3cml0ZVRhYmxlX0NQcmVwcm9jZXNzb3IgKAorICBjb25zdCBjaGFyICpwYXRoLCBGSUxFICpmaWxlLCBUZXh0VGFibGVEYXRhICp0dGQsIGNvbnN0IHZvaWQgKmRhdGEKKykgeworICBpZiAoIXdyaXRlSGVhZGVyQ29tbWVudChmaWxlLCB3cml0ZUNDb21tZW50KSkgcmV0dXJuIDA7CisgIGlmICghZW5kTGluZShmaWxlKSkgcmV0dXJuIDA7CisKKyAgaWYgKCFkZWZpbmVDTWFjcm8oZmlsZSwgIkJSTFRUWV9URVhUX1RBQkxFX0JFR0lOX0NIQVJBQ1RFUlMiLCAiIikpIHJldHVybiAwOworICBpZiAoIWRlZmluZUNNYWNybyhmaWxlLCAiQlJMVFRZX1RFWFRfVEFCTEVfQ0hBUkFDVEVSIiwgIih1bmljb2RlLCBicmFpbGxlLCBwcm9wZXJ0aWVzLCBuYW1lKSIpKSByZXR1cm4gMDsKKyAgaWYgKCFkZWZpbmVDTWFjcm8oZmlsZSwgIkJSTFRUWV9URVhUX1RBQkxFX0VORF9DSEFSQUNURVJTIiwgIiIpKSByZXR1cm4gMDsKKworICBpZiAoIWRlZmluZUNNYWNybyhmaWxlLCAiQlJMVFRZX1RFWFRfVEFCTEVfQkVHSU5fQUxJQVNFUyIsICIiKSkgcmV0dXJuIDA7CisgIGlmICghZGVmaW5lQ01hY3JvKGZpbGUsICJCUkxUVFlfVEVYVF9UQUJMRV9BTElBUyIsICIoZnJvbSwgdG8sIG5hbWUpIikpIHJldHVybiAwOworICBpZiAoIWRlZmluZUNNYWNybyhmaWxlLCAiQlJMVFRZX1RFWFRfVEFCTEVfRU5EX0FMSUFTRVMiLCAiIikpIHJldHVybiAwOworCisgIGlmICghZGVmaW5lQ01hY3JvKGZpbGUsICJCUkxUVFlfVEVYVF9UQUJMRV9OT19OQU1FIiwgIihjaGFyYWN0ZXIpIikpIHJldHVybiAwOworCisgIGlmIChmcHJpbnRmKGZpbGUsICJCUkxUVFlfVEVYVF9UQUJMRV9CRUdJTl9DSEFSQUNURVJTXG4iKSA9PSBFT0YpIHJldHVybiAwOworICBpZiAoIXdyaXRlQ2hhcmFjdGVycyhmaWxlLCB0dGQsIHdyaXRlQ2hhcmFjdGVyX0NQcmVwcm9jZXNzb3IsIGRhdGEpKSByZXR1cm4gMDsKKyAgaWYgKGZwcmludGYoZmlsZSwgIkJSTFRUWV9URVhUX1RBQkxFX0VORF9DSEFSQUNURVJTXG4iKSA9PSBFT0YpIHJldHVybiAwOworICBpZiAoIWVuZExpbmUoZmlsZSkpIHJldHVybiAwOworCisgIGlmIChmcHJpbnRmKGZpbGUsICJCUkxUVFlfVEVYVF9UQUJMRV9CRUdJTl9BTElBU0VTXG4iKSA9PSBFT0YpIHJldHVybiAwOworICBpZiAoIXdyaXRlQWxpYXNlcyhmaWxlLCB0dGQsIHdyaXRlQWxpYXNfQ1ByZXByb2Nlc3NvciwgZGF0YSkpIHJldHVybiAwOworICBpZiAoZnByaW50ZihmaWxlLCAiQlJMVFRZX1RFWFRfVEFCTEVfRU5EX0FMSUFTRVNcbiIpID09IEVPRikgcmV0dXJuIDA7CisgIGlmICghZW5kTGluZShmaWxlKSkgcmV0dXJuIDA7CisKKyAgcmV0dXJuIDE7Cit9CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgY29uc3QgY2hhciAqbmFtZTsKKyAgVGFibGVSZWFkZXIgKnJlYWQ7CisgIFRhYmxlV3JpdGVyICp3cml0ZTsKKyAgY29uc3Qgdm9pZCAqZGF0YTsKK30gRm9ybWF0RW50cnk7CisKK3N0YXRpYyBjb25zdCBGb3JtYXRFbnRyeSBmb3JtYXRFbnRyaWVzW10gPSB7CisgIHsgLm5hbWUgPSAidHRiIiwKKyAgICAucmVhZCA9IHJlYWRUYWJsZV9uYXRpdmUsCisgICAgLndyaXRlID0gd3JpdGVUYWJsZV9uYXRpdmUsCisgICAgLmRhdGEgPSBXUklURV9DSEFSQUNURVJTX05BVElWRSwKKyAgfSwKKworICB7IC5uYW1lID0gImEyYiIsCisgICAgLnJlYWQgPSByZWFkVGFibGVfYmluYXJ5LAorICAgIC53cml0ZSA9IHdyaXRlVGFibGVfYmluYXJ5LAorICAgIC5kYXRhID0gJmRvdHMxMjM0NTY3OCwKKyAgfSwKKworICB7IC5uYW1lID0gInNibCIsCisgICAgLnJlYWQgPSByZWFkVGFibGVfYmluYXJ5LAorICAgIC53cml0ZSA9IHdyaXRlVGFibGVfYmluYXJ5LAorICAgIC5kYXRhID0gJmRvdHMxNDI1MzY3OCwKKyAgfSwKKworICB7IC5uYW1lID0gImN0YiIsCisgICAgLnJlYWQgPSByZWFkVGFibGVfTGliTG91aXMsCisgICAgLndyaXRlID0gd3JpdGVUYWJsZV9MaWJMb3VpcywKKyAgICAuZGF0YSA9IFdSSVRFX0NIQVJBQ1RFUlNfTElCTE9VSVMsCisgIH0sCisKKyAgeyAubmFtZSA9ICJ1dGIiLAorICAgIC5yZWFkID0gcmVhZFRhYmxlX0xpYkxvdWlzLAorICAgIC53cml0ZSA9IHdyaXRlVGFibGVfTGliTG91aXMsCisgICAgLmRhdGEgPSBXUklURV9DSEFSQUNURVJTX0xJQkxPVUlTLAorICB9LAorCisjaWZkZWYgSEFWRV9JQ09OVl9ICisgIHsgLm5hbWUgPSAiZ25iIiwKKyAgICAucmVhZCA9IHJlYWRUYWJsZV9nbm9tZSwKKyAgICAud3JpdGUgPSB3cml0ZVRhYmxlX2dub21lLAorICAgIC5kYXRhID0gV1JJVEVfQ0hBUkFDVEVSU19JTl9PTkxZLAorICB9LAorI2VuZGlmIC8qIEhBVkVfSUNPTlZfSCAqLworCisgIHsgLm5hbWUgPSAiWENvbXBvc2UiLAorICAgIC53cml0ZSA9IHdyaXRlVGFibGVfWENvbXBvc2UsCisgICAgLmRhdGEgPSBXUklURV9DSEFSQUNURVJTX0lOX09OTFksCisgIH0sCisKKyAgeyAubmFtZSA9ICJoYWxmLVhDb21wb3NlIiwKKyAgICAud3JpdGUgPSB3cml0ZVRhYmxlX2xlZnRyaWdodGhhbGZfWENvbXBvc2UsCisgICAgLmRhdGEgPSBXUklURV9DSEFSQUNURVJTX0lOX09OTFksCisgIH0sCisKKyAgeyAubmFtZSA9ICJsZWZ0aGFsZi1YQ29tcG9zZSIsCisgICAgLndyaXRlID0gd3JpdGVUYWJsZV9sZWZ0aGFsZl9YQ29tcG9zZSwKKyAgICAuZGF0YSA9IFdSSVRFX0NIQVJBQ1RFUlNfSU5fT05MWSwKKyAgfSwKKworICB7IC5uYW1lID0gImxlZnRoYWxmYWx0LVhDb21wb3NlIiwKKyAgICAud3JpdGUgPSB3cml0ZVRhYmxlX2xlZnRoYWxmYWx0X1hDb21wb3NlLAorICAgIC5kYXRhID0gV1JJVEVfQ0hBUkFDVEVSU19JTl9PTkxZLAorICB9LAorCisgIHsgLm5hbWUgPSAicmlnaHRoYWxmLVhDb21wb3NlIiwKKyAgICAud3JpdGUgPSB3cml0ZVRhYmxlX3JpZ2h0aGFsZl9YQ29tcG9zZSwKKyAgICAuZGF0YSA9IFdSSVRFX0NIQVJBQ1RFUlNfSU5fT05MWSwKKyAgfSwKKworICB7IC5uYW1lID0gInJpZ2h0aGFsZmFsdC1YQ29tcG9zZSIsCisgICAgLndyaXRlID0gd3JpdGVUYWJsZV9yaWdodGhhbGZhbHRfWENvbXBvc2UsCisgICAgLmRhdGEgPSBXUklURV9DSEFSQUNURVJTX0lOX09OTFksCisgIH0sCisKKyAgeyAubmFtZSA9ICJqYnQiLAorICAgIC53cml0ZSA9IHdyaXRlVGFibGVfSkFXUywKKyAgICAuZGF0YSA9IFdSSVRFX0NIQVJBQ1RFUlNfT1VUX09OTFksCisgIH0sCisKKyAgeyAubmFtZSA9ICJjcHAiLAorICAgIC53cml0ZSA9IHdyaXRlVGFibGVfQ1ByZXByb2Nlc3NvciwKKyAgICAuZGF0YSA9IFdSSVRFX0NIQVJBQ1RFUl9ESVJFQ1RJVkVTKC5pbj0iMSIsIC5vdXQ9IjIiLCAuaW5PdXQ9IjMiKSwKKyAgfSwKKworICB7IC5uYW1lID0gTlVMTCB9Cit9OworCitzdGF0aWMgY29uc3QgRm9ybWF0RW50cnkgKgorZmluZEZvcm1hdEVudHJ5IChjb25zdCBjaGFyICpuYW1lKSB7CisgIGNvbnN0IEZvcm1hdEVudHJ5ICpmb3JtYXQgPSBmb3JtYXRFbnRyaWVzOworICB3aGlsZSAoZm9ybWF0LT5uYW1lKSB7CisgICAgaWYgKHN0cmNtcChuYW1lLCBmb3JtYXQtPm5hbWUpID09IDApIHJldHVybiBmb3JtYXQ7CisgICAgZm9ybWF0ICs9IDE7CisgIH0KKyAgcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBjb25zdCBGb3JtYXRFbnRyeSAqCitnZXRGb3JtYXRFbnRyeSAoY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqcGF0aCwgY29uc3QgY2hhciAqZGVzY3JpcHRpb24pIHsKKyAgaWYgKCEobmFtZSAmJiAqbmFtZSkpIHsKKyAgICBuYW1lID0gbG9jYXRlUGF0aEV4dGVuc2lvbihwYXRoKTsKKworICAgIGlmICghKG5hbWUgJiYgKisrbmFtZSkpIHsKKyAgICAgIGxvZ01lc3NhZ2UoTE9HX0VSUiwgInVuc3BlY2lmaWVkICVzIGZvcm1hdC4iLCBkZXNjcmlwdGlvbik7CisgICAgICBleGl0KFBST0dfRVhJVF9TWU5UQVgpOworICAgIH0KKyAgfQorCisgIHsKKyAgICBjb25zdCBGb3JtYXRFbnRyeSAqZm9ybWF0ID0gZmluZEZvcm1hdEVudHJ5KG5hbWUpOworICAgIGlmIChmb3JtYXQpIHJldHVybiBmb3JtYXQ7CisgIH0KKworICBsb2dNZXNzYWdlKExPR19FUlIsICJ1bmtub3duICVzIGZvcm1hdDogJXMiLCBkZXNjcmlwdGlvbiwgbmFtZSk7CisgIGV4aXQoUFJPR19FWElUX1NZTlRBWCk7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICppbnB1dFBhdGg7CitzdGF0aWMgY29uc3QgY2hhciAqb3V0cHV0UGF0aDsKK3N0YXRpYyBjb25zdCBGb3JtYXRFbnRyeSAqaW5wdXRGb3JtYXQ7CitzdGF0aWMgY29uc3QgRm9ybWF0RW50cnkgKm91dHB1dEZvcm1hdDsKKworc3RhdGljIEZJTEUgKgorb3BlblRhYmxlIChjb25zdCBjaGFyICoqZmlsZSwgY29uc3QgY2hhciAqbW9kZSwgY29uc3QgY2hhciAqZGlyZWN0b3J5LCBGSUxFICpzdGRTdHJlYW0sIGNvbnN0IGNoYXIgKnN0ZE5hbWUpIHsKKyAgaWYgKHN0ZFN0cmVhbSkgeworICAgIGlmIChzdHJjbXAoKmZpbGUsIHN0YW5kYXJkU3RyZWFtQXJndW1lbnQpID09IDApIHsKKyAgICAgICpmaWxlID0gc3RkTmFtZTsKKyAgICAgIHJldHVybiBzdGRTdHJlYW07CisgICAgfQorICB9CisKKyAgaWYgKGRpcmVjdG9yeSkgeworICAgIGNvbnN0IGNoYXIgKnBhdGggPSBtYWtlVGV4dFRhYmxlUGF0aChkaXJlY3RvcnksICpmaWxlKTsKKworICAgIGlmICghcGF0aCkgcmV0dXJuIE5VTEw7CisgICAgKmZpbGUgPSBwYXRoOworICB9CisKKyAgeworICAgIEZJTEUgKnN0cmVhbSA9IGZvcGVuKCpmaWxlLCBtb2RlKTsKKworICAgIGlmICghc3RyZWFtKSBsb2dNZXNzYWdlKExPR19FUlIsICJ0YWJsZSBvcGVuIGVycm9yOiAlczogJXMiLCAqZmlsZSwgc3RyZXJyb3IoZXJybm8pKTsKKyAgICByZXR1cm4gc3RyZWFtOworICB9Cit9CisKK3N0YXRpYyBGSUxFICoKK29wZW5JbnB1dFRhYmxlIChjb25zdCBjaGFyICoqcGF0aCwgaW50IGFsbG93U3RhbmRhcmRJbnB1dCkgeworICBGSUxFICpzdGRTdHJlYW07CisgIGNvbnN0IGNoYXIgKnN0ZE5hbWU7CisKKyAgaWYgKGFsbG93U3RhbmRhcmRJbnB1dCkgeworICAgIHN0ZFN0cmVhbSA9IHN0ZGluOworICAgIHN0ZE5hbWUgPSBzdGFuZGFyZElucHV0TmFtZTsKKyAgfSBlbHNlIHsKKyAgICBzdGRTdHJlYW0gPSBOVUxMOworICAgIHN0ZE5hbWUgPSBOVUxMOworICB9CisKKyAgcmV0dXJuIG9wZW5UYWJsZShwYXRoLCAiciIsIG9wdF90YWJsZXNEaXJlY3RvcnksIHN0ZFN0cmVhbSwgc3RkTmFtZSk7Cit9CisKK3N0YXRpYyBGSUxFICoKK29wZW5PdXRwdXRUYWJsZSAoY29uc3QgY2hhciAqKnBhdGgpIHsKKyAgcmV0dXJuIG9wZW5UYWJsZShwYXRoLCAidyIsIE5VTEwsIHN0ZG91dCwgc3RhbmRhcmRPdXRwdXROYW1lKTsKK30KKworc3RhdGljIFRleHRUYWJsZURhdGEgKgorcmVhZFRhYmxlIChjb25zdCBjaGFyICpwYXRoLCBGSUxFICpmaWxlLCBjb25zdCBGb3JtYXRFbnRyeSAqZm10KSB7CisgIGlmIChmbXQtPnJlYWQpIHJldHVybiBmbXQtPnJlYWQocGF0aCwgZmlsZSwgZm10LT5kYXRhKTsKKyAgbG9nTWVzc2FnZShMT0dfRVJSLCAicmVhZGluZyBub3Qgc3VwcG9ydGVkOiAlcyIsIGZtdC0+bmFtZSk7CisgIHJldHVybiBOVUxMOworfQorCitzdGF0aWMgUHJvZ3JhbUV4aXRTdGF0dXMKK2NvbnZlcnRUYWJsZSAodm9pZCkgeworICBQcm9ncmFtRXhpdFN0YXR1cyBleGl0U3RhdHVzOworICBGSUxFICppbnB1dEZpbGUgPSBvcGVuSW5wdXRUYWJsZSgmaW5wdXRQYXRoLCAxKTsKKworICBpZiAoaW5wdXRGaWxlKSB7CisgICAgVGV4dFRhYmxlRGF0YSAqdHRkOworCisgICAgaWYgKCh0dGQgPSByZWFkVGFibGUoaW5wdXRQYXRoLCBpbnB1dEZpbGUsIGlucHV0Rm9ybWF0KSkpIHsKKyNpZmRlZiBIQVZFX1VOREVGSU5FRF9DSEFSQUNURVJTX1NVUFBPUlQKKyAgICAgIGlmIChvcHRfdW5kZWZpbmVkKSB7CisgICAgICAgIHNob3dVbmRlZmluZWRDaGFyYWN0ZXJzKHR0ZCk7CisgICAgICB9CisjZW5kaWYgLyogSEFWRV9VTkRFRklORURfQ0hBUkFDVEVSU19TVVBQT1JUICovCisKKyAgICAgIGlmIChvdXRwdXRQYXRoKSB7CisgICAgICAgIEZJTEUgKm91dHB1dEZpbGUgPSBvcGVuT3V0cHV0VGFibGUoJm91dHB1dFBhdGgpOworCisgICAgICAgIGlmIChvdXRwdXRGaWxlKSB7CisgICAgICAgICAgaWYgKG91dHB1dEZvcm1hdC0+d3JpdGUob3V0cHV0UGF0aCwgb3V0cHV0RmlsZSwgdHRkLCBvdXRwdXRGb3JtYXQtPmRhdGEpKSB7CisgICAgICAgICAgICBleGl0U3RhdHVzID0gUFJPR19FWElUX1NVQ0NFU1M7CisgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGV4aXRTdGF0dXMgPSBQUk9HX0VYSVRfRkFUQUw7CisgICAgICAgICAgfQorCisgICAgICAgICAgZmNsb3NlKG91dHB1dEZpbGUpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgIGV4aXRTdGF0dXMgPSBQUk9HX0VYSVRfRkFUQUw7CisgICAgICAgIH0KKyAgICAgIH0gZWxzZSB7CisgICAgICAgIGV4aXRTdGF0dXMgPSBQUk9HX0VYSVRfU1VDQ0VTUzsKKyAgICAgIH0KKworICAgICAgZGVzdHJveVRleHRUYWJsZURhdGEodHRkKTsKKyAgICB9IGVsc2UgeworICAgICAgZXhpdFN0YXR1cyA9IFBST0dfRVhJVF9GQVRBTDsKKyAgICB9CisKKyAgICBmY2xvc2UoaW5wdXRGaWxlKTsKKyAgfSBlbHNlIHsKKyAgICBleGl0U3RhdHVzID0gUFJPR19FWElUX0ZBVEFMOworICB9CisKKyAgcmV0dXJuIGV4aXRTdGF0dXM7Cit9CisKKyNpbmNsdWRlICJnZXRfY3Vyc2VzLmgiCisjaWZuZGVmIEdPVF9DVVJTRVMKKyNkZWZpbmUgcmVmcmVzaCgpIGZmbHVzaChzdGRvdXQpCisjZGVmaW5lIHByaW50dyBwcmludGYKKyNkZWZpbmUgZXJhc2UoKSBwcmludGYoIlxyXG5cdiIpCisjZGVmaW5lIGJlZXAoKSBwcmludGYoIlxhIikKKworc3RhdGljIGludCBpbnB1dEF0dHJpYnV0ZXNDaGFuZ2VkOworCisjaWYgZGVmaW5lZChfX01JTkdXMzJfXykKKyNkZWZpbmUgU1RESU5fSEFORExFICgoSEFORExFKV9nZXRfb3NmaGFuZGxlKFNURElOX0ZJTEVOTykpCitzdGF0aWMgRFdPUkQgaW5wdXRDb25zb2xlTW9kZTsKKworI3VuZGVmIGJlZXAKKyNkZWZpbmUgYmVlcCgpIE1lc3NhZ2VCZWVwKE1CX0lDT05XQVJOSU5HKQorCisjZWxzZSAvKiB0ZXJtaW9zICovCisjaW5jbHVkZSA8dGVybWlvcy5oPgorc3RhdGljIHN0cnVjdCB0ZXJtaW9zIGlucHV0VGVybWluYWxBdHRyaWJ1dGVzOworCisjaWZuZGVmIF9QT1NJWF9WRElTQUJMRQorI2RlZmluZSBfUE9TSVhfVkRJU0FCTEUgMAorI2VuZGlmIC8qIF9QT1NJWF9WRElTQUJMRSAqLworI2VuZGlmIC8qIGlucHV0IHRlcm1pbmFsIGRlZmluaXRpb25zICovCisjZW5kaWYgLyogR09UX0NVUlNFUyAqLworCisjaWZkZWYgRU5BQkxFX0FQSQorI2RlZmluZSBCUkxBUElfTk9fREVQUkVDQVRFRAorI2luY2x1ZGUgImJybGFwaS5oIgorI2VuZGlmIC8qIEVOQUJMRV9BUEkgKi8KKwordHlwZWRlZiBzdHJ1Y3QgeworICBUZXh0VGFibGVEYXRhICp0dGQ7CisgIHVuc2lnbmVkIHVwZGF0ZWQ6MTsKKworICBjb25zdCBjaGFyICpjaGFyc2V0OworICB1bmlvbiB7CisgICAgd2NoYXJfdCB1bmljb2RlOworICAgIHVuc2lnbmVkIGNoYXIgYnl0ZTsKKyAgfSBjaGFyYWN0ZXI7CisKKyNpZmRlZiBFTkFCTEVfQVBJCisgIGJybGFwaV9maWxlRGVzY3JpcHRvciBicmxhcGlGaWxlRGVzY3JpcHRvcjsKKyAgY29uc3QgY2hhciAqYnJsYXBpRXJyb3JGdW5jdGlvbjsKKyAgY29uc3QgY2hhciAqYnJsYXBpRXJyb3JNZXNzYWdlOworI2VuZGlmIC8qIEVOQUJMRV9BUEkgKi8KKworICB1bnNpZ25lZCBpbnQgZGlzcGxheVdpZHRoOworICB1bnNpZ25lZCBpbnQgZGlzcGxheUhlaWdodDsKK30gRWRpdFRhYmxlRGF0YTsKKworI2lmZGVmIEVOQUJMRV9BUEkKK3N0YXRpYyBpbnQKK2hhdmVCcmFpbGxlRGlzcGxheSAoRWRpdFRhYmxlRGF0YSAqZXRkKSB7CisgIHJldHVybiBldGQtPmJybGFwaUZpbGVEZXNjcmlwdG9yICE9IChicmxhcGlfZmlsZURlc2NyaXB0b3IpLTE7Cit9CisKK3N0YXRpYyB2b2lkCitzZXRCcmxhcGlFcnJvciAoRWRpdFRhYmxlRGF0YSAqZXRkLCBjb25zdCBjaGFyICpmdW5jdGlvbikgeworICBpZiAoKGV0ZC0+YnJsYXBpRXJyb3JGdW5jdGlvbiA9IGZ1bmN0aW9uKSkgeworICAgIGV0ZC0+YnJsYXBpRXJyb3JNZXNzYWdlID0gYnJsYXBpX3N0cmVycm9yKCZicmxhcGlfZXJyb3IpOworICB9IGVsc2UgeworICAgIGV0ZC0+YnJsYXBpRXJyb3JNZXNzYWdlID0gTlVMTDsKKyAgfQorfQorCitzdGF0aWMgdm9pZAorcmVsZWFzZUJyYWlsbGVEaXNwbGF5IChFZGl0VGFibGVEYXRhICpldGQpIHsKKyAgYnJsYXBpX2Nsb3NlQ29ubmVjdGlvbigpOworICBldGQtPmJybGFwaUZpbGVEZXNjcmlwdG9yID0gKGJybGFwaV9maWxlRGVzY3JpcHRvciktMTsKK30KKworc3RhdGljIGludAorY2xhaW1CcmFpbGxlRGlzcGxheSAoRWRpdFRhYmxlRGF0YSAqZXRkKSB7CisgIGV0ZC0+YnJsYXBpRmlsZURlc2NyaXB0b3IgPSBicmxhcGlfb3BlbkNvbm5lY3Rpb24oTlVMTCwgTlVMTCk7CisgIGlmIChoYXZlQnJhaWxsZURpc3BsYXkoZXRkKSkgeworICAgIGlmIChicmxhcGlfZ2V0RGlzcGxheVNpemUoJmV0ZC0+ZGlzcGxheVdpZHRoLCAmZXRkLT5kaXNwbGF5SGVpZ2h0KSAhPSAtMSkgeworICAgICAgaWYgKGJybGFwaV9lbnRlclR0eU1vZGUoQlJMQVBJX1RUWV9ERUZBVUxULCBOVUxMKSAhPSAtMSkgeworICAgICAgICBzZXRCcmxhcGlFcnJvcihldGQsIE5VTEwpOworICAgICAgICByZXR1cm4gMTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIHNldEJybGFwaUVycm9yKGV0ZCwgImJybGFwaV9lbnRlclR0eU1vZGUiKTsKKyAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgc2V0QnJsYXBpRXJyb3IoZXRkLCAiYnJsYXBpX2dldERpc3BsYXlTaXplIik7CisgICAgfQorCisgICAgcmVsZWFzZUJyYWlsbGVEaXNwbGF5KGV0ZCk7CisgIH0gZWxzZSB7CisgICAgc2V0QnJsYXBpRXJyb3IoZXRkLCAiYnJsYXBpX29wZW5Db25uZWN0aW9uIik7CisgIH0KKworICByZXR1cm4gMDsKK30KKyNlbmRpZiAvKiBFTkFCTEVfQVBJICovCisKK3N0YXRpYyBpbnQKK2dldENoYXJhY3RlciAoRWRpdFRhYmxlRGF0YSAqZXRkLCB3Y2hhcl90ICpjaGFyYWN0ZXIpIHsKKyAgaWYgKGV0ZC0+Y2hhcnNldCkgeworICAgIHdpbnRfdCB3YyA9IGNvbnZlcnRDaGFyVG9XY2hhcihldGQtPmNoYXJhY3Rlci5ieXRlKTsKKyAgICBpZiAod2MgPT0gV0VPRikgcmV0dXJuIDA7CisgICAgKmNoYXJhY3RlciA9IHdjOworICB9IGVsc2UgeworICAgICpjaGFyYWN0ZXIgPSBldGQtPmNoYXJhY3Rlci51bmljb2RlOworICB9CisKKyAgcmV0dXJuIDE7Cit9CisKK3N0YXRpYyB3Y2hhcl90ICoKK21ha2VDaGFyYWN0ZXJEZXNjcmlwdGlvbiAoVGV4dFRhYmxlRGF0YSAqdHRkLCB3Y2hhcl90IGNoYXJhY3Rlciwgc2l6ZV90ICpsZW5ndGgsIGludCAqZGVmaW5lZCwgdW5zaWduZWQgY2hhciAqYnJhaWxsZSkgeworICBjaGFyIGJ1ZmZlclswWDEwMF07CisgIHNpemVfdCBjaGFyYWN0ZXJJbmRleDsKKyAgc2l6ZV90IGJyYWlsbGVJbmRleDsKKyAgc2l6ZV90IGRlc2NyaXB0aW9uTGVuZ3RoOworCisgIHVuc2lnbmVkIGNoYXIgZG90cyA9IDA7CisgIGludCBnb3REb3RzID0gZ2V0RG90cyh0dGQsIGNoYXJhY3RlciwgJmRvdHMpOworCisgIHdjaGFyX3QgcHJpbnRhYmxlQ2hhcmFjdGVyOworICBjaGFyIHByaW50YWJsZVByZWZpeDsKKworICBwcmludGFibGVDaGFyYWN0ZXIgPSBjaGFyYWN0ZXI7CisgIGlmIChpc3dMYXRpbjEocHJpbnRhYmxlQ2hhcmFjdGVyKSkgeworICAgIHByaW50YWJsZVByZWZpeCA9ICdeJzsKKyAgICBpZiAoIShwcmludGFibGVDaGFyYWN0ZXIgJiAwWDYwKSkgeworICAgICAgcHJpbnRhYmxlQ2hhcmFjdGVyIHw9IDBYNDA7CisgICAgICBpZiAocHJpbnRhYmxlQ2hhcmFjdGVyICYgMFg4MCkgcHJpbnRhYmxlUHJlZml4ID0gJ34nOworICAgIH0gZWxzZSBpZiAocHJpbnRhYmxlQ2hhcmFjdGVyID09IDBYN0YpIHsKKyAgICAgIHByaW50YWJsZUNoYXJhY3RlciBePSAwWDQwOyAgICAgICAKKyAgICB9IGVsc2UgaWYgKHByaW50YWJsZUNoYXJhY3RlciAhPSBwcmludGFibGVQcmVmaXgpIHsKKyAgICAgIHByaW50YWJsZVByZWZpeCA9ICcgJzsKKyAgICB9CisgIH0gZWxzZSB7CisgICAgcHJpbnRhYmxlUHJlZml4ID0gJyAnOworICB9CisgIGlmICghZ290RG90cykgZG90cyA9IDA7CisKKyNkZWZpbmUgRE9UKG4pICgoZG90cyAmIEJSTF9ET1RfIyNuKT8gKChuKSArICcwJyk6ICcgJykKKyAgeworICAgIHVpbnQzMl90IHZhbHVlID0gY2hhcmFjdGVyOworCisgICAgU1RSX0JFR0lOKGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlcikpOworICAgIFNUUl9QUklOVEYoIiUwNCIgUFJJWDMyICIgJWMiLCB2YWx1ZSwgcHJpbnRhYmxlUHJlZml4KTsKKyAgICBjaGFyYWN0ZXJJbmRleCA9IFNUUl9MRU5HVEg7CisgICAgU1RSX1BSSU5URigieCAiKTsKKyAgICBicmFpbGxlSW5kZXggPSBTVFJfTEVOR1RIOworICAgIFNUUl9QUklOVEYoInggJWMlYyVjJWMlYyVjJWMlYyVjJWMiLAorICAgICAgICAgICAgIChnb3REb3RzPyAnWyc6ICcgJyksCisgICAgICAgICAgICAgRE9UKDEpLCBET1QoMiksIERPVCgzKSwgRE9UKDQpLCBET1QoNSksIERPVCg2KSwgRE9UKDcpLCBET1QoOCksCisgICAgICAgICAgICAgKGdvdERvdHM/ICddJzogJyAnKSk7CisgICAgZGVzY3JpcHRpb25MZW5ndGggPSBTVFJfTEVOR1RIOworICAgIFNUUl9FTkQ7CisgIH0KKyN1bmRlZiBET1QKKworICB7CisgICAgY2hhciAqbmFtZSA9IGJ1ZmZlciArIGRlc2NyaXB0aW9uTGVuZ3RoICsgMTsKKyAgICBpbnQgc2l6ZSA9IGJ1ZmZlciArIHNpemVvZihidWZmZXIpIC0gbmFtZTsKKworICAgIGlmIChnZXRDaGFyYWN0ZXJOYW1lKGNoYXJhY3RlciwgbmFtZSwgc2l6ZSkpIHsKKyAgICAgIGRlc2NyaXB0aW9uTGVuZ3RoICs9IHN0cmxlbihuYW1lKSArIDE7CisgICAgICAqLS1uYW1lID0gJyAnOworICAgIH0KKyAgfQorCisgIHsKKyAgICB3Y2hhcl90ICpkZXNjcmlwdGlvbiA9IGNhbGxvYyhkZXNjcmlwdGlvbkxlbmd0aCsxLCBzaXplb2YoKmRlc2NyaXB0aW9uKSk7CisgICAgaWYgKGRlc2NyaXB0aW9uKSB7CisgICAgICBmb3IgKHVuc2lnbmVkIGludCBpPTA7IGk8ZGVzY3JpcHRpb25MZW5ndGg7IGkrPTEpIHsKKyAgICAgICAgd2ludF90IHdjID0gY29udmVydENoYXJUb1djaGFyKGJ1ZmZlcltpXSk7CisgICAgICAgIGlmICh3YyA9PSBXRU9GKSB3YyA9IFdDX0MoJyAnKTsKKyAgICAgICAgZGVzY3JpcHRpb25baV0gPSB3YzsKKyAgICAgIH0KKworICAgICAgZGVzY3JpcHRpb25bY2hhcmFjdGVySW5kZXhdID0gcHJpbnRhYmxlQ2hhcmFjdGVyOworICAgICAgZGVzY3JpcHRpb25bYnJhaWxsZUluZGV4XSA9IGdvdERvdHM/IChVTklDT0RFX0JSQUlMTEVfUk9XIHwgZG90cyk6IFdDX0MoJyAnKTsKKyAgICAgIGRlc2NyaXB0aW9uW2Rlc2NyaXB0aW9uTGVuZ3RoXSA9IDA7CisKKyAgICAgIGlmIChsZW5ndGgpICpsZW5ndGggPSBkZXNjcmlwdGlvbkxlbmd0aDsKKyAgICAgIGlmIChkZWZpbmVkKSAqZGVmaW5lZCA9IGdvdERvdHM7CisgICAgICBpZiAoYnJhaWxsZSkgKmJyYWlsbGUgPSBkb3RzOworICAgICAgcmV0dXJuIGRlc2NyaXB0aW9uOworICAgIH0KKyAgfQorCisgIHJldHVybiBOVUxMOworfQorCitzdGF0aWMgdm9pZAorcHJpbnRDaGFyYWN0ZXJTdHJpbmcgKGNvbnN0IHdjaGFyX3QgKndjcykgeworICB3aGlsZSAoKndjcykgeworICAgIHdpbnRfdCB3YyA9ICp3Y3MrKzsKKyAgICBwcmludHcoIiUiIFBSSXdjLCB3Yyk7CisgIH0KK30KKworc3RhdGljIHZvaWQKK3ByaW50TmF2aWdhdGlvblBhaXIgKAorICBjb25zdCBjaGFyICprZXkxLCBjb25zdCBjaGFyICpwcmVwb3NpdGlvbjEsCisgIGNvbnN0IGNoYXIgKmtleTIsIGNvbnN0IGNoYXIgKnByZXBvc2l0aW9uMiwKKyAgY29uc3QgY2hhciAqYWRqZWN0aXZlLCBjb25zdCBjaGFyICpub3VuLAorICBpbnQgd2lkdGgKKykgeworICBpbnQgbGVuZ3RoID0gMDsKKworICBpZiAoKmtleTEgfHwgKmtleTIpIHsKKyAgICBjb25zdCBjaGFyICpzZXBhcmF0b3IgPSAoKmtleTEgJiYgKmtleTIpPyAiLyI6ICIiOworCisgICAgcHJpbnR3KCIlcyVzJXM6ICVzJXMlcyAlcyAlcyVuIiwKKyAgICAgICAgICAga2V5MSwgc2VwYXJhdG9yLCBrZXkyLAorICAgICAgICAgICAoKmtleTE/IHByZXBvc2l0aW9uMTogIiIpLCBzZXBhcmF0b3IsICgqa2V5Mj8gcHJlcG9zaXRpb24yOiAiIiksCisgICAgICAgICAgIGFkamVjdGl2ZSwgbm91biwgJmxlbmd0aCk7CisgIH0KKworICBpZiAod2lkdGggPiBsZW5ndGgpIHByaW50dygiJSpzIiwgd2lkdGgtbGVuZ3RoLCAiIik7Cit9CisKK3N0YXRpYyBpbnQKK3VwZGF0ZUNoYXJhY3RlckRlc2NyaXB0aW9uIChFZGl0VGFibGVEYXRhICpldGQpIHsKKyAgaW50IG9rID0gMDsKKworICB3Y2hhcl90IGNoYXJhY3RlciA9IFVOSUNPREVfUkVQTEFDRU1FTlRfQ0hBUkFDVEVSOworICBpbnQgZ290Q2hhcmFjdGVyID0gZ2V0Q2hhcmFjdGVyKGV0ZCwgJmNoYXJhY3Rlcik7CisKKyAgc2l6ZV90IGxlbmd0aDsKKyAgaW50IGdvdERvdHM7CisgIHVuc2lnbmVkIGNoYXIgZG90czsKKyAgd2NoYXJfdCAqZGVzY3JpcHRpb24gPSBtYWtlQ2hhcmFjdGVyRGVzY3JpcHRpb24oZXRkLT50dGQsIGNoYXJhY3RlciwgJmxlbmd0aCwgJmdvdERvdHMsICZkb3RzKTsKKworICBpZiAoZGVzY3JpcHRpb24pIHsKKyAgICBvayA9IDE7CisgICAgZXJhc2UoKTsKKworI2lmIGRlZmluZWQoR09UX0NVUlNFUykKKyNkZWZpbmUgS0VZX0ZJUlNUX0FDVFVBTF9DSEFSQUNURVIgIiIKKyNkZWZpbmUgS0VZX0xBU1RfQUNUVUFMX0NIQVJBQ1RFUiAiIgorI2RlZmluZSBLRVlfUFJFVklPVVNfQUNUVUFMX0NIQVJBQ1RFUiAiTGVmdCIKKyNkZWZpbmUgS0VZX05FWFRfQUNUVUFMX0NIQVJBQ1RFUiAiUmlnaHQiCisjZGVmaW5lIEtFWV9GSVJTVF9ERUZJTkVEX0NIQVJBQ1RFUiAiSG9tZSIKKyNkZWZpbmUgS0VZX0xBU1RfREVGSU5FRF9DSEFSQUNURVIgIkVuZCIKKyNkZWZpbmUgS0VZX1BSRVZJT1VTX0RFRklORURfQ0hBUkFDVEVSICJVcCIKKyNkZWZpbmUgS0VZX05FWFRfREVGSU5FRF9DSEFSQUNURVIgIkRvd24iCisjZGVmaW5lIEtFWV9UT0dHTEVfRE9UMSAiRjQiCisjZGVmaW5lIEtFWV9UT0dHTEVfRE9UMiAiRjMiCisjZGVmaW5lIEtFWV9UT0dHTEVfRE9UMyAiRjIiCisjZGVmaW5lIEtFWV9UT0dHTEVfRE9UNCAiRjUiCisjZGVmaW5lIEtFWV9UT0dHTEVfRE9UNSAiRjYiCisjZGVmaW5lIEtFWV9UT0dHTEVfRE9UNiAiRjciCisjZGVmaW5lIEtFWV9UT0dHTEVfRE9UNyAiRjEiCisjZGVmaW5lIEtFWV9UT0dHTEVfRE9UOCAiRjgiCisjZGVmaW5lIEtFWV9UT0dHTEVfQ0hBUkFDVEVSICJGOSIKKyNkZWZpbmUgS0VZX0FMVEVSTkFURV9DSEFSQUNURVIgIkYxMCIKKyNkZWZpbmUgS0VZX1NBVkVfVEFCTEUgIkYxMSIKKyNkZWZpbmUgS0VZX0VYSVRfRURJVE9SICJGMTIiCisjZWxzZSAvKiBzdGFuZGFyZCBpbnB1dC9vdXRwdXQgKi8KKyNkZWZpbmUgS0VZX0ZJUlNUX0FDVFVBTF9DSEFSQUNURVIgIl5TIgorI2RlZmluZSBLRVlfTEFTVF9BQ1RVQUxfQ0hBUkFDVEVSICJeRyIKKyNkZWZpbmUgS0VZX1BSRVZJT1VTX0FDVFVBTF9DSEFSQUNURVIgIl5EIgorI2RlZmluZSBLRVlfTkVYVF9BQ1RVQUxfQ0hBUkFDVEVSICJeRiIKKyNkZWZpbmUgS0VZX0ZJUlNUX0RFRklORURfQ0hBUkFDVEVSICJeSCIKKyNkZWZpbmUgS0VZX0xBU1RfREVGSU5FRF9DSEFSQUNURVIgIl5MIgorI2RlZmluZSBLRVlfUFJFVklPVVNfREVGSU5FRF9DSEFSQUNURVIgIl5KIgorI2RlZmluZSBLRVlfTkVYVF9ERUZJTkVEX0NIQVJBQ1RFUiAiXksiCisjZGVmaW5lIEtFWV9UT0dHTEVfRE9UMSAiXlIiCisjZGVmaW5lIEtFWV9UT0dHTEVfRE9UMiAiXkUiCisjZGVmaW5lIEtFWV9UT0dHTEVfRE9UMyAiXlciCisjZGVmaW5lIEtFWV9UT0dHTEVfRE9UNCAiXlUiCisjZGVmaW5lIEtFWV9UT0dHTEVfRE9UNSAiXkkiCisjZGVmaW5lIEtFWV9UT0dHTEVfRE9UNiAiXk8iCisjZGVmaW5lIEtFWV9UT0dHTEVfRE9UNyAiXlEiCisjZGVmaW5lIEtFWV9UT0dHTEVfRE9UOCAiXlAiCisjZGVmaW5lIEtFWV9UT0dHTEVfQ0hBUkFDVEVSICJeVCIKKyNkZWZpbmUgS0VZX0FMVEVSTkFURV9DSEFSQUNURVIgIl5ZIgorI2RlZmluZSBLRVlfU0FWRV9UQUJMRSAiXkEiCisjZGVmaW5lIEtFWV9FWElUX0VESVRPUiAiXloiCisjZW5kaWYgLyoga2V5IGRlZmluaXRpb25zICovCisKKyAgICB7CisgICAgICBjb25zdCBjaGFyICpmaXJzdCA9ICJmaXJzdCI7CisgICAgICBjb25zdCBjaGFyICpsYXN0ID0gImxhc3QiOworICAgICAgY29uc3QgY2hhciAqcHJldmlvdXMgPSAicHJldiI7CisgICAgICBjb25zdCBjaGFyICpuZXh0ID0gIm5leHQiOworCisgICAgICBjb25zdCBjaGFyICphY3R1YWwgPSBldGQtPmNoYXJzZXQ/IGV0ZC0+Y2hhcnNldDogInVuaWNvZGUiOworICAgICAgY29uc3QgY2hhciAqZGVmaW5lZCA9ICJkZWZpbmVkIjsKKworICAgICAgY29uc3QgY2hhciAqY2hhcmFjdGVyID0gImNoYXIiOworICAgICAgY29uc3QgaW50IHdpZHRoID0gMzg7CisKKyAgICAgIHByaW50TmF2aWdhdGlvblBhaXIoS0VZX1BSRVZJT1VTX0FDVFVBTF9DSEFSQUNURVIsIHByZXZpb3VzLAorICAgICAgICAgICAgICAgICAgICAgICAgICBLRVlfTkVYVF9BQ1RVQUxfQ0hBUkFDVEVSLCBuZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICBhY3R1YWwsIGNoYXJhY3Rlciwgd2lkdGgpOworICAgICAgcHJpbnROYXZpZ2F0aW9uUGFpcihLRVlfUFJFVklPVVNfREVGSU5FRF9DSEFSQUNURVIsIHByZXZpb3VzLAorICAgICAgICAgICAgICAgICAgICAgICAgICBLRVlfTkVYVF9ERUZJTkVEX0NIQVJBQ1RFUiwgbmV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmaW5lZCwgY2hhcmFjdGVyLCAwKTsKKyAgICAgIHByaW50dygiXG4iKTsKKworICAgICAgcHJpbnROYXZpZ2F0aW9uUGFpcihLRVlfRklSU1RfQUNUVUFMX0NIQVJBQ1RFUiwgZmlyc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgIEtFWV9MQVNUX0FDVFVBTF9DSEFSQUNURVIsIGxhc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdHVhbCwgY2hhcmFjdGVyLCB3aWR0aCk7CisgICAgICBwcmludE5hdmlnYXRpb25QYWlyKEtFWV9GSVJTVF9ERUZJTkVEX0NIQVJBQ1RFUiwgZmlyc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgIEtFWV9MQVNUX0RFRklORURfQ0hBUkFDVEVSLCBsYXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZpbmVkLCBjaGFyYWN0ZXIsIDApOworICAgICAgcHJpbnR3KCJcbiIpOworICAgIH0KKyAgICBwcmludHcoIlxuIik7CisKKyNkZWZpbmUgRE9UKG4pIHByaW50dygiJXM6ICVzIGRvdCAldSAgICAiLCBLRVlfVE9HR0xFX0RPVCMjbiwgKChkb3RzICYgQlJMX0RPVF8jI24pPyAibG93ZXIiOiAicmFpc2UiKSwgbikKKyAgICBET1QoMSk7CisgICAgRE9UKDQpOworICAgIHByaW50dygiJXM6ICVzIiwgS0VZX1RPR0dMRV9DSEFSQUNURVIsCisgICAgICAgICAgICFnb3RDaGFyYWN0ZXI/ICIiOgorICAgICAgICAgICAhZ290RG90cz8gImRlZmluZSBjaGFyYWN0ZXIgKGVtcHR5IGNlbGwpIjoKKyAgICAgICAgICAgZG90cz8gImNsZWFyIGFsbCBkb3RzIjoKKyAgICAgICAgICAgInVuZGVmaW5lIGNoYXJhY3RlciIpOworICAgIHByaW50dygiXG4iKTsKKworICAgIERPVCgyKTsKKyAgICBET1QoNSk7CisgICAgcHJpbnR3KCIlczoiLCBLRVlfQUxURVJOQVRFX0NIQVJBQ1RFUik7CisgICAgeworICAgICAgY29uc3QgY2hhciAqbG93ZXIgPSAibG93ZXJjYXNlIjsKKyAgICAgIGNvbnN0IGNoYXIgKnVwcGVyID0gInVwcGVyY2FzZSI7CisgICAgICBjb25zdCBjaGFyICphbHRlcm5hdGUgPSBOVUxMOworCisgICAgICBpZiAoZXRkLT5jaGFyc2V0KSB7CisgICAgICAgIGlmIChpc3VwcGVyKGV0ZC0+Y2hhcmFjdGVyLmJ5dGUpKSB7CisgICAgICAgICAgYWx0ZXJuYXRlID0gbG93ZXI7CisgICAgICAgIH0gZWxzZSBpZiAoaXNsb3dlcihldGQtPmNoYXJhY3Rlci5ieXRlKSkgeworICAgICAgICAgIGFsdGVybmF0ZSA9IHVwcGVyOworICAgICAgICB9CisgICAgICB9IGVsc2UgeworICAgICAgICBpZiAoaXN3dXBwZXIoZXRkLT5jaGFyYWN0ZXIudW5pY29kZSkpIHsKKyAgICAgICAgICBhbHRlcm5hdGUgPSBsb3dlcjsKKyAgICAgICAgfSBlbHNlIGlmIChpc3dsb3dlcihldGQtPmNoYXJhY3Rlci51bmljb2RlKSkgeworICAgICAgICAgIGFsdGVybmF0ZSA9IHVwcGVyOworICAgICAgICB9CisgICAgICB9CisKKyAgICAgIGlmIChhbHRlcm5hdGUpIHByaW50dygiIHN3aXRjaCB0byAlcyBlcXVpdmFsZW50IiwgYWx0ZXJuYXRlKTsKKyAgICB9CisgICAgcHJpbnR3KCJcbiIpOworCisgICAgRE9UKDMpOworICAgIERPVCg2KTsKKyAgICBwcmludHcoIiVzOiAlcyIsIEtFWV9TQVZFX1RBQkxFLAorICAgICAgICAgICBldGQtPnVwZGF0ZWQ/ICJzYXZlIHRhYmxlIjogIiIpOworICAgIHByaW50dygiXG4iKTsKKworICAgIERPVCg3KTsKKyAgICBET1QoOCk7CisgICAgcHJpbnR3KCIlczogZXhpdCB0YWJsZSBlZGl0b3IiLCBLRVlfRVhJVF9FRElUT1IpOworICAgIGlmIChldGQtPnVwZGF0ZWQpIHByaW50dygiICh1bnNhdmVkIGNoYW5nZXMpIik7CisgICAgcHJpbnR3KCJcbiIpOworI3VuZGVmIERPVAorCisgICAgcHJpbnR3KCJcbiIpOworCisgICAgaWYgKGV0ZC0+Y2hhcnNldCkgeworICAgICAgcHJpbnR3KCIlMDJYOiAlc1xuIiwgZXRkLT5jaGFyYWN0ZXIuYnl0ZSwgZXRkLT5jaGFyc2V0KTsKKyAgICB9CisKKyAgICBwcmludENoYXJhY3RlclN0cmluZyhkZXNjcmlwdGlvbik7CisgICAgcHJpbnR3KCJcbiIpOworCisjZGVmaW5lIERPVChuKSAoKGRvdHMgJiBCUkxfRE9UXyMjbik/ICcjJzogJyAnKQorICAgIHByaW50dygiICstLS0rIFxuIik7CisgICAgcHJpbnR3KCIxfCVjICVjfDRcbiIsIERPVCgxKSwgRE9UKDQpKTsKKyAgICBwcmludHcoIjJ8JWMgJWN8NVxuIiwgRE9UKDIpLCBET1QoNSkpOworICAgIHByaW50dygiM3wlYyAlY3w2XG4iLCBET1QoMyksIERPVCg2KSk7CisgICAgcHJpbnR3KCI3fCVjICVjfDhcbiIsIERPVCg3KSwgRE9UKDgpKTsKKyAgICBwcmludHcoIiArLS0tKyBcbiIpOworI3VuZGVmIERPVAorCisjaWZkZWYgRU5BQkxFX0FQSQorICAgIGlmIChldGQtPmJybGFwaUVycm9yRnVuY3Rpb24pIHsKKyAgICAgIHByaW50dygiQnJsQVBJIGVycm9yOiAlczogJXNcbiIsCisgICAgICAgICAgICAgZXRkLT5icmxhcGlFcnJvckZ1bmN0aW9uLCBldGQtPmJybGFwaUVycm9yTWVzc2FnZSk7CisgICAgICBzZXRCcmxhcGlFcnJvcihldGQsIE5VTEwpOworICAgIH0KKyNlbmRpZiAvKiBFTkFCTEVfQVBJICovCisKKyAgICByZWZyZXNoKCk7CisKKyNpZmRlZiBFTkFCTEVfQVBJCisgICAgaWYgKGhhdmVCcmFpbGxlRGlzcGxheShldGQpKSB7CisgICAgICBicmxhcGlfd3JpdGVBcmd1bWVudHNfdCBhcmdzID0gQlJMQVBJX1dSSVRFQVJHVU1FTlRTX0lOSVRJQUxJWkVSOworICAgICAgd2NoYXJfdCB0ZXh0W2V0ZC0+ZGlzcGxheVdpZHRoXTsKKworICAgICAgeworICAgICAgICBzaXplX3QgY291bnQgPSBNSU4oZXRkLT5kaXNwbGF5V2lkdGgsIGxlbmd0aCk7CisgICAgICAgIHdtZW1jcHkodGV4dCwgZGVzY3JpcHRpb24sIGNvdW50KTsKKyAgICAgICAgd21lbXNldCgmdGV4dFtjb3VudF0sIFdDX0MoJyAnKSwgZXRkLT5kaXNwbGF5V2lkdGgtY291bnQpOworICAgICAgfQorCisgICAgICBhcmdzLnJlZ2lvbkJlZ2luID0gMTsKKyAgICAgIGFyZ3MucmVnaW9uU2l6ZSA9IGV0ZC0+ZGlzcGxheVdpZHRoOworICAgICAgYXJncy50ZXh0ID0gKGNoYXIgKil0ZXh0OworICAgICAgYXJncy50ZXh0U2l6ZSA9IGV0ZC0+ZGlzcGxheVdpZHRoICogc2l6ZW9mKHRleHRbMF0pOworICAgICAgYXJncy5jaGFyc2V0ID0gIldDSEFSX1QiOworCisgICAgICBpZiAoYnJsYXBpX3dyaXRlKCZhcmdzKSA9PSAtMSkgeworICAgICAgICBzZXRCcmxhcGlFcnJvcihldGQsICJicmxhcGlfd3JpdGUiKTsKKyAgICAgICAgcmVsZWFzZUJyYWlsbGVEaXNwbGF5KGV0ZCk7CisgICAgICB9CisgICAgfQorI2VuZGlmIC8qIEVOQUJMRV9BUEkgKi8KKworICAgIGZyZWUoZGVzY3JpcHRpb24pOworICB9CisKKyAgcmV0dXJuIG9rOworfQorCitzdGF0aWMgdm9pZAorc2V0UHJldmlvdXNBY3R1YWxDaGFyYWN0ZXIgKEVkaXRUYWJsZURhdGEgKmV0ZCkgeworICBpZiAoZXRkLT5jaGFyc2V0KSB7CisgICAgZXRkLT5jaGFyYWN0ZXIuYnl0ZSA9IChldGQtPmNoYXJhY3Rlci5ieXRlIC0gMSkgJiBDSEFSU0VUX0JZVEVfTUFYSU1VTTsKKyAgfSBlbHNlIHsKKyAgICBldGQtPmNoYXJhY3Rlci51bmljb2RlID0gKGV0ZC0+Y2hhcmFjdGVyLnVuaWNvZGUgLSAxKSAmIFdDSEFSX01BWDsKKyAgfQorfQorCitzdGF0aWMgdm9pZAorc2V0TmV4dEFjdHVhbENoYXJhY3RlciAoRWRpdFRhYmxlRGF0YSAqZXRkKSB7CisgIGlmIChldGQtPmNoYXJzZXQpIHsKKyAgICBldGQtPmNoYXJhY3Rlci5ieXRlID0gKGV0ZC0+Y2hhcmFjdGVyLmJ5dGUgKyAxKSAmIENIQVJTRVRfQllURV9NQVhJTVVNOworICB9IGVsc2UgeworICAgIGV0ZC0+Y2hhcmFjdGVyLnVuaWNvZGUgPSAoZXRkLT5jaGFyYWN0ZXIudW5pY29kZSArIDEpICYgV0NIQVJfTUFYOworICB9Cit9CisKK3N0YXRpYyB2b2lkCitzZXRGaXJzdEFjdHVhbENoYXJhY3RlciAoRWRpdFRhYmxlRGF0YSAqZXRkKSB7CisgIGlmIChldGQtPmNoYXJzZXQpIHsKKyAgICBldGQtPmNoYXJhY3Rlci5ieXRlID0gMDsKKyAgfSBlbHNlIHsKKyAgICBldGQtPmNoYXJhY3Rlci51bmljb2RlID0gMDsKKyAgfQorfQorCitzdGF0aWMgdm9pZAorc2V0TGFzdEFjdHVhbENoYXJhY3RlciAoRWRpdFRhYmxlRGF0YSAqZXRkKSB7CisgIGlmIChldGQtPmNoYXJzZXQpIHsKKyAgICBldGQtPmNoYXJhY3Rlci5ieXRlID0gQ0hBUlNFVF9CWVRFX01BWElNVU07CisgIH0gZWxzZSB7CisgICAgZXRkLT5jaGFyYWN0ZXIudW5pY29kZSA9IFdDSEFSX01BWDsKKyAgfQorfQorCitzdGF0aWMgaW50CitmaW5kQ2hhcmFjdGVyIChFZGl0VGFibGVEYXRhICpldGQsIGludCBiYWNrd2FyZCkgeworICBjb25zdCBpbnQgaW5jcmVtZW50ID0gYmFja3dhcmQ/IC0xOiAxOworCisgIGlmIChldGQtPmNoYXJzZXQpIHsKKyAgICBjb25zdCBpbnQgYnl0ZUxpbWl0ID0gYmFja3dhcmQ/IDA6IENIQVJTRVRfQllURV9NQVhJTVVNOworICAgIGNvbnN0IGludCBieXRlUmVzZXQgPSBDSEFSU0VUX0JZVEVfTUFYSU1VTSAtIGJ5dGVMaW1pdCAtIGluY3JlbWVudDsKKworICAgIHVuc2lnbmVkIGNoYXIgYnl0ZSA9IGV0ZC0+Y2hhcmFjdGVyLmJ5dGU7CisgICAgaW50IGNvdW50ZXIgPSBDSEFSU0VUX0JZVEVfQ09VTlQ7CisKKyAgICBkbyB7CisgICAgICBpZiAoYnl0ZSA9PSBieXRlTGltaXQpIGJ5dGUgPSBieXRlUmVzZXQ7CisgICAgICBieXRlICs9IGluY3JlbWVudDsKKworICAgICAgeworICAgICAgICB3aW50X3Qgd2MgPSBjb252ZXJ0Q2hhclRvV2NoYXIoYnl0ZSk7CisKKyAgICAgICAgaWYgKHdjICE9IFdFT0YpIHsKKyAgICAgICAgICBpZiAoZ2V0VW5pY29kZUNlbGwoZXRkLT50dGQsIHdjKSkgeworICAgICAgICAgICAgZXRkLT5jaGFyYWN0ZXIuYnl0ZSA9IGJ5dGU7CisgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgICB9CisgICAgICAgIH0gICAgICAgCisgICAgICB9CisgICAgfSB3aGlsZSAoKGNvdW50ZXIgLT0gMSkgPj0gMCk7CisgIH0gZWxzZSB7CisgICAgY29uc3QgaW50IGdyb3VwTGltaXQgPSBiYWNrd2FyZD8gMDogVU5JQ09ERV9HUk9VUF9NQVhJTVVNOworICAgIGNvbnN0IGludCBwbGFuZUxpbWl0ID0gYmFja3dhcmQ/IDA6IFVOSUNPREVfUExBTkVfTUFYSU1VTTsKKyAgICBjb25zdCBpbnQgcm93TGltaXQgPSBiYWNrd2FyZD8gMDogVU5JQ09ERV9ST1dfTUFYSU1VTTsKKyAgICBjb25zdCBpbnQgY2VsbExpbWl0ID0gYmFja3dhcmQ/IDA6IFVOSUNPREVfQ0VMTF9NQVhJTVVNOworCisgICAgY29uc3QgaW50IGdyb3VwUmVzZXQgPSBVTklDT0RFX0dST1VQX01BWElNVU0gLSBncm91cExpbWl0OworICAgIGNvbnN0IGludCBwbGFuZVJlc2V0ID0gVU5JQ09ERV9QTEFORV9NQVhJTVVNIC0gcGxhbmVMaW1pdDsKKyAgICBjb25zdCBpbnQgcm93UmVzZXQgPSBVTklDT0RFX1JPV19NQVhJTVVNIC0gcm93TGltaXQ7CisgICAgY29uc3QgaW50IGNlbGxSZXNldCA9IFVOSUNPREVfQ0VMTF9NQVhJTVVNIC0gY2VsbExpbWl0IC0gaW5jcmVtZW50OworCisgICAgaW50IGdyb3VwTnVtYmVyID0gVU5JQ09ERV9HUk9VUF9OVU1CRVIoZXRkLT5jaGFyYWN0ZXIudW5pY29kZSk7CisgICAgaW50IHBsYW5lTnVtYmVyID0gVU5JQ09ERV9QTEFORV9OVU1CRVIoZXRkLT5jaGFyYWN0ZXIudW5pY29kZSk7CisgICAgaW50IHJvd051bWJlciA9IFVOSUNPREVfUk9XX05VTUJFUihldGQtPmNoYXJhY3Rlci51bmljb2RlKTsKKyAgICBpbnQgY2VsbE51bWJlciA9IFVOSUNPREVfQ0VMTF9OVU1CRVIoZXRkLT5jaGFyYWN0ZXIudW5pY29kZSk7CisKKyAgICBjb25zdCBUZXh0VGFibGVIZWFkZXIgKmhlYWRlciA9IGdldFRleHRUYWJsZUhlYWRlcihldGQtPnR0ZCk7CisgICAgaW50IGdyb3VwQ291bnRlciA9IFVOSUNPREVfR1JPVVBfQ09VTlQ7CisKKyAgICBkbyB7CisgICAgICBUZXh0VGFibGVPZmZzZXQgZ3JvdXBPZmZzZXQgPSBoZWFkZXItPnVuaWNvZGVHcm91cHNbZ3JvdXBOdW1iZXJdOworCisgICAgICBpZiAoZ3JvdXBPZmZzZXQpIHsKKyAgICAgICAgY29uc3QgVW5pY29kZUdyb3VwRW50cnkgKmdyb3VwID0gZ2V0VGV4dFRhYmxlSXRlbShldGQtPnR0ZCwgZ3JvdXBPZmZzZXQpOworCisgICAgICAgIHdoaWxlICgxKSB7CisgICAgICAgICAgVGV4dFRhYmxlT2Zmc2V0IHBsYW5lT2Zmc2V0ID0gZ3JvdXAtPnBsYW5lc1twbGFuZU51bWJlcl07CisKKyAgICAgICAgICBpZiAocGxhbmVPZmZzZXQpIHsKKyAgICAgICAgICAgIGNvbnN0IFVuaWNvZGVQbGFuZUVudHJ5ICpwbGFuZSA9IGdldFRleHRUYWJsZUl0ZW0oZXRkLT50dGQsIHBsYW5lT2Zmc2V0KTsKKworICAgICAgICAgICAgd2hpbGUgKDEpIHsKKyAgICAgICAgICAgICAgVGV4dFRhYmxlT2Zmc2V0IHJvd09mZnNldCA9IHBsYW5lLT5yb3dzW3Jvd051bWJlcl07CisKKyAgICAgICAgICAgICAgaWYgKHJvd09mZnNldCkgeworICAgICAgICAgICAgICAgIGNvbnN0IFVuaWNvZGVSb3dFbnRyeSAqcm93ID0gZ2V0VGV4dFRhYmxlSXRlbShldGQtPnR0ZCwgcm93T2Zmc2V0KTsKKworICAgICAgICAgICAgICAgIHdoaWxlIChjZWxsTnVtYmVyICE9IGNlbGxMaW1pdCkgeworICAgICAgICAgICAgICAgICAgY2VsbE51bWJlciArPSBpbmNyZW1lbnQ7CisKKyAgICAgICAgICAgICAgICAgIGlmIChCSVRNQVNLX1RFU1Qocm93LT5jZWxsRGVmaW5lZCwgY2VsbE51bWJlcikpIHsKKyAgICAgICAgICAgICAgICAgICAgZXRkLT5jaGFyYWN0ZXIudW5pY29kZSA9IFVOSUNPREVfQ0hBUkFDVEVSKGdyb3VwTnVtYmVyLCBwbGFuZU51bWJlciwgcm93TnVtYmVyLCBjZWxsTnVtYmVyKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgY2VsbE51bWJlciA9IGNlbGxSZXNldDsKKworICAgICAgICAgICAgICBpZiAocm93TnVtYmVyID09IHJvd0xpbWl0KSBicmVhazsKKyAgICAgICAgICAgICAgcm93TnVtYmVyICs9IGluY3JlbWVudDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9CisKKyAgICAgICAgICByb3dOdW1iZXIgPSByb3dSZXNldDsKKyAgICAgICAgICBjZWxsTnVtYmVyID0gY2VsbFJlc2V0OworCisgICAgICAgICAgaWYgKHBsYW5lTnVtYmVyID09IHBsYW5lTGltaXQpIGJyZWFrOworICAgICAgICAgIHBsYW5lTnVtYmVyICs9IGluY3JlbWVudDsKKyAgICAgICAgfQorICAgICAgfQorCisgICAgICBwbGFuZU51bWJlciA9IHBsYW5lUmVzZXQ7CisgICAgICByb3dOdW1iZXIgPSByb3dSZXNldDsKKyAgICAgIGNlbGxOdW1iZXIgPSBjZWxsUmVzZXQ7CisKKyAgICAgIGlmIChncm91cE51bWJlciA9PSBncm91cExpbWl0KSB7CisgICAgICAgIGdyb3VwTnVtYmVyID0gZ3JvdXBSZXNldDsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIGdyb3VwTnVtYmVyICs9IGluY3JlbWVudDsKKyAgICAgIH0KKyAgICB9IHdoaWxlICgoZ3JvdXBDb3VudGVyIC09IDEpID49IDApOworICB9CisKKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK3NldFByZXZpb3VzRGVmaW5lZENoYXJhY3RlciAoRWRpdFRhYmxlRGF0YSAqZXRkKSB7CisgIHJldHVybiBmaW5kQ2hhcmFjdGVyKGV0ZCwgMSk7Cit9CisKK3N0YXRpYyBpbnQKK3NldE5leHREZWZpbmVkQ2hhcmFjdGVyIChFZGl0VGFibGVEYXRhICpldGQpIHsKKyAgcmV0dXJuIGZpbmRDaGFyYWN0ZXIoZXRkLCAwKTsKK30KKworc3RhdGljIGludAorc2V0Rmlyc3REZWZpbmVkQ2hhcmFjdGVyIChFZGl0VGFibGVEYXRhICpldGQpIHsKKyAgc2V0TGFzdEFjdHVhbENoYXJhY3RlcihldGQpOworICBpZiAoc2V0TmV4dERlZmluZWRDaGFyYWN0ZXIoZXRkKSkgcmV0dXJuIDE7CisKKyAgc2V0Rmlyc3RBY3R1YWxDaGFyYWN0ZXIoZXRkKTsKKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK3NldExhc3REZWZpbmVkQ2hhcmFjdGVyIChFZGl0VGFibGVEYXRhICpldGQpIHsKKyAgc2V0Rmlyc3RBY3R1YWxDaGFyYWN0ZXIoZXRkKTsKKyAgaWYgKHNldFByZXZpb3VzRGVmaW5lZENoYXJhY3RlcihldGQpKSByZXR1cm4gMTsKKworICBzZXRMYXN0QWN0dWFsQ2hhcmFjdGVyKGV0ZCk7CisgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50CitzZXRBbHRlcm5hdGVDaGFyYWN0ZXIgKEVkaXRUYWJsZURhdGEgKmV0ZCkgeworICBpZiAoZXRkLT5jaGFyc2V0KSB7CisgICAgaWYgKGlzYWxwaGEoZXRkLT5jaGFyYWN0ZXIuYnl0ZSkpIHsKKyAgICAgIGlmIChpc2xvd2VyKGV0ZC0+Y2hhcmFjdGVyLmJ5dGUpKSB7CisgICAgICAgIGV0ZC0+Y2hhcmFjdGVyLmJ5dGUgPSB0b3VwcGVyKGV0ZC0+Y2hhcmFjdGVyLmJ5dGUpOworICAgICAgICByZXR1cm4gMTsKKyAgICAgIH0KKworICAgICAgaWYgKGlzdXBwZXIoZXRkLT5jaGFyYWN0ZXIuYnl0ZSkpIHsKKyAgICAgICAgZXRkLT5jaGFyYWN0ZXIuYnl0ZSA9IHRvbG93ZXIoZXRkLT5jaGFyYWN0ZXIuYnl0ZSk7CisgICAgICAgIHJldHVybiAxOworICAgICAgfQorICAgIH0KKyAgfSBlbHNlIHsKKyAgICBpZiAoaXN3YWxwaGEoZXRkLT5jaGFyYWN0ZXIudW5pY29kZSkpIHsKKyAgICAgIGlmIChpc3dsb3dlcihldGQtPmNoYXJhY3Rlci51bmljb2RlKSkgeworICAgICAgICBldGQtPmNoYXJhY3Rlci51bmljb2RlID0gdG93dXBwZXIoZXRkLT5jaGFyYWN0ZXIudW5pY29kZSk7CisgICAgICAgIHJldHVybiAxOworICAgICAgfQorCisgICAgICBpZiAoaXN3dXBwZXIoZXRkLT5jaGFyYWN0ZXIudW5pY29kZSkpIHsKKyAgICAgICAgZXRkLT5jaGFyYWN0ZXIudW5pY29kZSA9IHRvd2xvd2VyKGV0ZC0+Y2hhcmFjdGVyLnVuaWNvZGUpOworICAgICAgICByZXR1cm4gMTsKKyAgICAgIH0KKyAgICB9CisgIH0KKworICByZXR1cm4gMDsKK30KKworc3RhdGljIGludAordG9nZ2xlQ2hhcmFjdGVyIChFZGl0VGFibGVEYXRhICpldGQpIHsKKyAgd2NoYXJfdCBjaGFyYWN0ZXI7CisgIGlmICghZ2V0Q2hhcmFjdGVyKGV0ZCwgJmNoYXJhY3RlcikpIHJldHVybiAwOworCisgIHsKKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpjZWxsID0gZ2V0VW5pY29kZUNlbGwoZXRkLT50dGQsIGNoYXJhY3Rlcik7CisgICAgaWYgKGNlbGwgJiYgISpjZWxsKSB7CisgICAgICB1bnNldFRleHRUYWJsZUNoYXJhY3RlcihldGQtPnR0ZCwgY2hhcmFjdGVyKTsKKyAgICB9IGVsc2UgaWYgKCFzZXRUZXh0VGFibGVDaGFyYWN0ZXIoZXRkLT50dGQsIGNoYXJhY3RlciwgMCkpIHsKKyAgICAgIHJldHVybiAwOworICAgIH0KKyAgfQorCisgIGV0ZC0+dXBkYXRlZCA9IDE7CisgIHJldHVybiAxOworfQorCitzdGF0aWMgaW50Cit0b2dnbGVEb3QgKEVkaXRUYWJsZURhdGEgKmV0ZCwgdW5zaWduZWQgY2hhciBkb3QpIHsKKyAgd2NoYXJfdCBjaGFyYWN0ZXI7CisKKyAgaWYgKGdldENoYXJhY3RlcihldGQsICZjaGFyYWN0ZXIpKSB7CisgICAgY29uc3QgdW5zaWduZWQgY2hhciAqY2VsbCA9IGdldFVuaWNvZGVDZWxsKGV0ZC0+dHRkLCBjaGFyYWN0ZXIpOworICAgIHVuc2lnbmVkIGNoYXIgZG90cyA9IGNlbGw/ICpjZWxsOiAwOworCisgICAgaWYgKHNldFRleHRUYWJsZUNoYXJhY3RlcihldGQtPnR0ZCwgY2hhcmFjdGVyLCBkb3RzXmRvdCkpIHsKKyAgICAgIGV0ZC0+dXBkYXRlZCA9IDE7CisgICAgICByZXR1cm4gMTsKKyAgICB9CisgIH0KKworICByZXR1cm4gMDsKK30KKworc3RhdGljIGludAorc2V0RG90cyAoRWRpdFRhYmxlRGF0YSAqZXRkLCB1bnNpZ25lZCBjaGFyIGRvdHMpIHsKKyAgd2NoYXJfdCBjaGFyYWN0ZXI7CisKKyAgaWYgKGdldENoYXJhY3RlcihldGQsICZjaGFyYWN0ZXIpKSB7CisgICAgaWYgKHNldFRleHRUYWJsZUNoYXJhY3RlcihldGQtPnR0ZCwgY2hhcmFjdGVyLCBkb3RzKSkgeworICAgICAgZXRkLT51cGRhdGVkID0gMTsKKyAgICAgIHJldHVybiAxOworICAgIH0KKyAgfQorCisgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50CitzYXZlVGFibGUgKEVkaXRUYWJsZURhdGEgKmV0ZCkgeworICBpbnQgb2sgPSAwOworICBGSUxFICpvdXRwdXRGaWxlOworCisgIGlmICghb3V0cHV0UGF0aCkgb3V0cHV0UGF0aCA9IGlucHV0UGF0aDsKKyAgaWYgKCFvdXRwdXRGb3JtYXQpIG91dHB1dEZvcm1hdCA9IGlucHV0Rm9ybWF0OworCisgIGlmICgob3V0cHV0RmlsZSA9IG9wZW5PdXRwdXRUYWJsZSgmb3V0cHV0UGF0aCkpKSB7CisgICAgaWYgKG91dHB1dEZvcm1hdC0+d3JpdGUob3V0cHV0UGF0aCwgb3V0cHV0RmlsZSwgZXRkLT50dGQsIG91dHB1dEZvcm1hdC0+ZGF0YSkpIHsKKyAgICAgIG9rID0gMTsKKyAgICAgIGV0ZC0+dXBkYXRlZCA9IDA7CisgICAgfQorCisgICAgZmNsb3NlKG91dHB1dEZpbGUpOworICB9CisKKyAgcmV0dXJuIG9rOworfQorCitzdGF0aWMgaW50Citkb0tleWJvYXJkQ29tbWFuZCAoRWRpdFRhYmxlRGF0YSAqZXRkKSB7CisjdW5kZWYgSVNfVU5JQ09ERV9DSEFSQUNURVIKKyNpZiBkZWZpbmVkKEdPVF9DVVJTRVMpCisjaWZkZWYgR09UX0NVUlNFU19XQ0gKKyNkZWZpbmUgSVNfVU5JQ09ERV9DSEFSQUNURVIKKyAgd2ludF90IGNoOworICBpbnQgcmV0ID0gZ2V0X3djaCgmY2gpOworCisgIGlmIChyZXQgPT0gS0VZX0NPREVfWUVTKQorI2Vsc2UgLyogR09UX0NVUlNFU19XQ0ggKi8KKyAgaW50IGNoID0gZ2V0Y2goKTsKKworICBpZiAoY2ggPj0gMFgxMDApCisjZW5kaWYgLyogR09UX0NVUlNFU19XQ0ggKi8KKyAgeworICAgIHN3aXRjaCAoY2gpIHsKKyAgICAgIGNhc2UgS0VZX0xFRlQ6CisgICAgICAgIHNldFByZXZpb3VzQWN0dWFsQ2hhcmFjdGVyKGV0ZCk7CisgICAgICAgIGJyZWFrOworCisgICAgICBjYXNlIEtFWV9SSUdIVDoKKyAgICAgICAgc2V0TmV4dEFjdHVhbENoYXJhY3RlcihldGQpOworICAgICAgICBicmVhazsKKworICAgICAgY2FzZSBLRVlfVVA6CisgICAgICAgIGlmICghc2V0UHJldmlvdXNEZWZpbmVkQ2hhcmFjdGVyKGV0ZCkpIGJlZXAoKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGNhc2UgS0VZX0RPV046CisgICAgICAgIGlmICghc2V0TmV4dERlZmluZWRDaGFyYWN0ZXIoZXRkKSkgYmVlcCgpOworICAgICAgICBicmVhazsKKworICAgICAgY2FzZSBLRVlfSE9NRToKKyAgICAgICAgaWYgKCFzZXRGaXJzdERlZmluZWRDaGFyYWN0ZXIoZXRkKSkgYmVlcCgpOworICAgICAgICBicmVhazsKKworICAgICAgY2FzZSBLRVlfRU5EOgorICAgICAgICBpZiAoIXNldExhc3REZWZpbmVkQ2hhcmFjdGVyKGV0ZCkpIGJlZXAoKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGNhc2UgS0VZX0YoMSk6CisgICAgICAgIGlmICghdG9nZ2xlRG90KGV0ZCwgQlJMX0RPVF83KSkgYmVlcCgpOworICAgICAgICBicmVhazsKKworICAgICAgY2FzZSBLRVlfRigyKToKKyAgICAgICAgaWYgKCF0b2dnbGVEb3QoZXRkLCBCUkxfRE9UXzMpKSBiZWVwKCk7CisgICAgICAgIGJyZWFrOworCisgICAgICBjYXNlIEtFWV9GKDMpOgorICAgICAgICBpZiAoIXRvZ2dsZURvdChldGQsIEJSTF9ET1RfMikpIGJlZXAoKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGNhc2UgS0VZX0YoNCk6CisgICAgICAgIGlmICghdG9nZ2xlRG90KGV0ZCwgQlJMX0RPVF8xKSkgYmVlcCgpOworICAgICAgICBicmVhazsKKworICAgICAgY2FzZSBLRVlfRig1KToKKyAgICAgICAgaWYgKCF0b2dnbGVEb3QoZXRkLCBCUkxfRE9UXzQpKSBiZWVwKCk7CisgICAgICAgIGJyZWFrOworCisgICAgICBjYXNlIEtFWV9GKDYpOgorICAgICAgICBpZiAoIXRvZ2dsZURvdChldGQsIEJSTF9ET1RfNSkpIGJlZXAoKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGNhc2UgS0VZX0YoNyk6CisgICAgICAgIGlmICghdG9nZ2xlRG90KGV0ZCwgQlJMX0RPVF82KSkgYmVlcCgpOworICAgICAgICBicmVhazsKKworICAgICAgY2FzZSBLRVlfRig4KToKKyAgICAgICAgaWYgKCF0b2dnbGVEb3QoZXRkLCBCUkxfRE9UXzgpKSBiZWVwKCk7CisgICAgICAgIGJyZWFrOworCisgICAgICBjYXNlIEtFWV9GKDkpOgorICAgICAgICBpZiAoIXRvZ2dsZUNoYXJhY3RlcihldGQpKSBiZWVwKCk7CisgICAgICAgIGJyZWFrOworCisgICAgICBjYXNlIEtFWV9GKDEwKToKKyAgICAgICAgaWYgKCFzZXRBbHRlcm5hdGVDaGFyYWN0ZXIoZXRkKSkgYmVlcCgpOworICAgICAgICBicmVhazsKKworICAgICAgY2FzZSBLRVlfRigxMSk6CisgICAgICAgIGlmICghKGV0ZC0+dXBkYXRlZCAmJiBzYXZlVGFibGUoZXRkKSkpIGJlZXAoKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGNhc2UgS0VZX0YoMTIpOgorICAgICAgICByZXR1cm4gMDsKKworICAgICAgZGVmYXVsdDoKKyAgICAgICAgYmVlcCgpOworICAgICAgICBicmVhazsKKyAgICB9CisgIH0gZWxzZQorCisjaWZkZWYgR09UX0NVUlNFU19XQ0gKKyAgaWYgKHJldCA9PSBPSykKKyNlbmRpZiAvKiBHT1RfQ1VSU0VTX1dDSCAqLworI2Vsc2UgLyogc3RhbmRhcmQgaW5wdXQvb3V0cHV0ICovCisgIGludCBoYW5kbGVkID0gMTsKKworI2lmZGVmIF9fTVNET1NfXworICBpbnQgY2ggPSBmZ2V0YyhzdGRpbik7CisgIGlmIChjaCA9PSBFT0YpIHJldHVybiAwOworI2Vsc2UgLyogX19NU0RPU19fICovCisjZGVmaW5lIElTX1VOSUNPREVfQ0hBUkFDVEVSCisgIHdpbnRfdCBjaCA9IGZnZXR3YyhzdGRpbik7CisgIGlmIChjaCA9PSBXRU9GKSByZXR1cm4gMDsKKyNlbmRpZiAvKiBfX01TRE9TX18gKi8KKworICBzd2l0Y2ggKGNoKSB7CisgICAgY2FzZSAwWDFCOiAvKiBlc2NhcGUgKi8KKyAgICAgIHJldHVybiAwOworCisgICAgY2FzZSAwWDExOiAvKiBDVFJMLVEgKi8KKyAgICAgIGlmICghdG9nZ2xlRG90KGV0ZCwgQlJMX0RPVF83KSkgYmVlcCgpOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIDBYMTc6IC8qIENUUkwtVyAqLworICAgICAgaWYgKCF0b2dnbGVEb3QoZXRkLCBCUkxfRE9UXzMpKSBiZWVwKCk7CisgICAgICBicmVhazsKKworICAgIGNhc2UgMFgwNTogLyogQ1RSTC1FICovCisgICAgICBpZiAoIXRvZ2dsZURvdChldGQsIEJSTF9ET1RfMikpIGJlZXAoKTsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSAwWDEyOiAvKiBDVFJMLVIgKi8KKyAgICAgIGlmICghdG9nZ2xlRG90KGV0ZCwgQlJMX0RPVF8xKSkgYmVlcCgpOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIDBYMTQ6IC8qIENUUkwtVCAqLworICAgICAgaWYgKCF0b2dnbGVDaGFyYWN0ZXIoZXRkKSkgYmVlcCgpOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIDBYMTk6IC8qIENUUkwtWSAqLworICAgICAgaWYgKCFzZXRBbHRlcm5hdGVDaGFyYWN0ZXIoZXRkKSkgYmVlcCgpOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIDBYMTU6IC8qIENUUkwtVSAqLworICAgICAgaWYgKCF0b2dnbGVEb3QoZXRkLCBCUkxfRE9UXzQpKSBiZWVwKCk7CisgICAgICBicmVhazsKKworICAgIGNhc2UgMFgwOTogLyogQ1RSTC1JICovCisgICAgICBpZiAoIXRvZ2dsZURvdChldGQsIEJSTF9ET1RfNSkpIGJlZXAoKTsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSAwWDBGOiAvKiBDVFJMLU8gKi8KKyAgICAgIGlmICghdG9nZ2xlRG90KGV0ZCwgQlJMX0RPVF82KSkgYmVlcCgpOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIDBYMTA6IC8qIENUUkwtUCAqLworICAgICAgaWYgKCF0b2dnbGVEb3QoZXRkLCBCUkxfRE9UXzgpKSBiZWVwKCk7CisgICAgICBicmVhazsKKworICAgIGNhc2UgMFgwMTogLyogQ1RSTC1BICovCisgICAgICBpZiAoIShldGQtPnVwZGF0ZWQgJiYgc2F2ZVRhYmxlKGV0ZCkpKSBiZWVwKCk7CisgICAgICBicmVhazsKKworICAgIGNhc2UgMFgxMzogLyogQ1RSTC1TICovCisgICAgICBzZXRGaXJzdEFjdHVhbENoYXJhY3RlcihldGQpOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIDBYMDQ6IC8qIENUUkwtRCAqLworICAgICAgc2V0UHJldmlvdXNBY3R1YWxDaGFyYWN0ZXIoZXRkKTsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSAwWDA2OiAvKiBDVFJMLUYgKi8KKyAgICAgIHNldE5leHRBY3R1YWxDaGFyYWN0ZXIoZXRkKTsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSAwWDA3OiAvKiBDVFJMLUcgKi8KKyAgICAgIHNldExhc3RBY3R1YWxDaGFyYWN0ZXIoZXRkKTsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSAwWDA4OiAvKiBDVFJMLUggKi8KKyAgICAgIGlmICghc2V0Rmlyc3REZWZpbmVkQ2hhcmFjdGVyKGV0ZCkpIGJlZXAoKTsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSAwWDBBOiAvKiBDVFJMLUogKi8KKyAgICAgIGlmICghc2V0UHJldmlvdXNEZWZpbmVkQ2hhcmFjdGVyKGV0ZCkpIGJlZXAoKTsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSAwWDBCOiAvKiBDVFJMLUsgKi8KKyAgICAgIGlmICghc2V0TmV4dERlZmluZWRDaGFyYWN0ZXIoZXRkKSkgYmVlcCgpOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIDBYMEM6IC8qIENUUkwtTCAqLworICAgICAgaWYgKCFzZXRMYXN0RGVmaW5lZENoYXJhY3RlcihldGQpKSBiZWVwKCk7CisgICAgICBicmVhazsKKworICAgIGNhc2UgMFgxQTogLyogQ1RSTC1aICovCisgICAgICByZXR1cm4gMDsKKworICAgIGNhc2UgMFgxODogLyogQ1RSTC1YICovCisgICAgICBiZWVwKCk7CisgICAgICBicmVhazsKKworICAgIGNhc2UgMFgwMzogLyogQ1RSTC1DICovCisgICAgICBiZWVwKCk7CisgICAgICBicmVhazsKKworICAgIGNhc2UgMFgxNjogLyogQ1RSTC1WICovCisgICAgICBiZWVwKCk7CisgICAgICBicmVhazsKKworICAgIGNhc2UgMFgwMjogLyogQ1RSTC1CICovCisgICAgICBiZWVwKCk7CisgICAgICBicmVhazsKKworICAgIGNhc2UgMFgwRTogLyogQ1RSTC1OICovCisgICAgICBiZWVwKCk7CisgICAgICBicmVhazsKKworICAgIGNhc2UgMFgwRDogLyogQ1RSTC1NICovCisgICAgICBiZWVwKCk7CisgICAgICBicmVhazsKKworICAgIGRlZmF1bHQ6CisgICAgICBoYW5kbGVkID0gMDsKKyAgICAgIGJyZWFrOworICB9CisKKyAgaWYgKCFoYW5kbGVkKQorI2VuZGlmIC8qIHJlYWQgY2hhcmFjdGVyICovCisKKyAgeworICAgIHdpbnRfdCBjaGFyYWN0ZXI7CisKKyNpZmRlZiBJU19VTklDT0RFX0NIQVJBQ1RFUgorICAgIGNoYXJhY3RlciA9IGNoOworI2Vsc2UgLyogSVNfVU5JQ09ERV9DSEFSQUNURVIgKi8KKyAgICBjaGFyYWN0ZXIgPSBjb252ZXJ0Q2hhclRvV2NoYXIoY2gpOworI2VuZGlmIC8qIElTX1VOSUNPREVfQ0hBUkFDVEVSICovCisKKyAgICBpZiAoKGNoYXJhY3RlciA+PSBVTklDT0RFX0JSQUlMTEVfUk9XKSAmJgorICAgICAgICAoY2hhcmFjdGVyIDw9IChVTklDT0RFX0JSQUlMTEVfUk9XIHwgVU5JQ09ERV9DRUxMX01BU0spKSkgeworICAgICAgaWYgKCFzZXREb3RzKGV0ZCwgY2hhcmFjdGVyICYgVU5JQ09ERV9DRUxMX01BU0spKSBiZWVwKCk7CisgICAgfSBlbHNlIHsKKyAgICAgIGlmIChldGQtPmNoYXJzZXQpIHsKKyAgICAgICAgaW50IGM7CisKKyNpZmRlZiBJU19VTklDT0RFX0NIQVJBQ1RFUgorICAgICAgICBjID0gY29udmVydFdjaGFyVG9DaGFyKGNoKTsKKyNlbHNlIC8qIElTX1VOSUNPREVfQ0hBUkFDVEVSICovCisgICAgICAgIGMgPSBjaDsKKyNlbmRpZiAvKiBJU19VTklDT0RFX0NIQVJBQ1RFUiAqLworCisgICAgICAgIGlmIChjICE9IEVPRikgeworICAgICAgICAgIGV0ZC0+Y2hhcmFjdGVyLmJ5dGUgPSBjOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgIGJlZXAoKTsKKyAgICAgICAgfQorICAgICAgfSBlbHNlIGlmIChjaGFyYWN0ZXIgIT0gV0VPRikgeworICAgICAgICBldGQtPmNoYXJhY3Rlci51bmljb2RlID0gY2hhcmFjdGVyOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgYmVlcCgpOworICAgICAgfQorICAgIH0KKyAgfQorCisgIHJldHVybiAxOworfQorCisjaWZuZGVmIF9fTUlOR1czMl9fCisjaWZkZWYgRU5BQkxFX0FQSQorc3RhdGljIGludAorZG9CcmFpbGxlQ29tbWFuZCAoRWRpdFRhYmxlRGF0YSAqZXRkKSB7CisgIGlmIChoYXZlQnJhaWxsZURpc3BsYXkoZXRkKSkgeworICAgIGJybGFwaV9rZXlDb2RlX3Qga2V5OworICAgIGludCByZXQgPSBicmxhcGlfcmVhZEtleSgwLCAma2V5KTsKKworICAgIGlmIChyZXQgPT0gMSkgeworICAgICAgdW5zaWduZWQgbG9uZyBjb2RlID0ga2V5ICYgQlJMQVBJX0tFWV9DT0RFX01BU0s7CisKKyAgICAgIHN3aXRjaCAoa2V5ICYgQlJMQVBJX0tFWV9UWVBFX01BU0spIHsKKyAgICAgICAgY2FzZSBCUkxBUElfS0VZX1RZUEVfQ01EOgorICAgICAgICAgIHN3aXRjaCAoY29kZSAmIEJSTEFQSV9LRVlfQ01EX0JMS19NQVNLKSB7CisgICAgICAgICAgICBjYXNlIDA6CisgICAgICAgICAgICAgIHN3aXRjaCAoY29kZSkgeworICAgICAgICAgICAgICAgIGNhc2UgQlJMQVBJX0tFWV9DTURfRldJTkxUOgorICAgICAgICAgICAgICAgICAgc2V0UHJldmlvdXNBY3R1YWxDaGFyYWN0ZXIoZXRkKTsKKyAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgY2FzZSBCUkxBUElfS0VZX0NNRF9GV0lOUlQ6CisgICAgICAgICAgICAgICAgICBzZXROZXh0QWN0dWFsQ2hhcmFjdGVyKGV0ZCk7CisgICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgIGNhc2UgQlJMQVBJX0tFWV9DTURfTE5VUDoKKyAgICAgICAgICAgICAgICAgIGlmICghc2V0UHJldmlvdXNEZWZpbmVkQ2hhcmFjdGVyKGV0ZCkpIGJlZXAoKTsKKyAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgY2FzZSBCUkxBUElfS0VZX0NNRF9MTkROOgorICAgICAgICAgICAgICAgICAgaWYgKCFzZXROZXh0RGVmaW5lZENoYXJhY3RlcihldGQpKSBiZWVwKCk7CisgICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgIGNhc2UgQlJMQVBJX0tFWV9DTURfVE9QX0xFRlQ6CisgICAgICAgICAgICAgICAgY2FzZSBCUkxBUElfS0VZX0NNRF9UT1A6CisgICAgICAgICAgICAgICAgICBpZiAoIXNldEZpcnN0RGVmaW5lZENoYXJhY3RlcihldGQpKSBiZWVwKCk7CisgICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgIGNhc2UgQlJMQVBJX0tFWV9DTURfQk9UX0xFRlQ6CisgICAgICAgICAgICAgICAgY2FzZSBCUkxBUElfS0VZX0NNRF9CT1Q6CisgICAgICAgICAgICAgICAgICBpZiAoIXNldExhc3REZWZpbmVkQ2hhcmFjdGVyKGV0ZCkpIGJlZXAoKTsKKyAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgIGJlZXAoKTsKKyAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBjYXNlIEJSTEFQSV9LRVlfQ01EX1BBU1NET1RTOgorICAgICAgICAgICAgICBpZiAoIXNldERvdHMoZXRkLCBjb2RlICYgQlJMQVBJX0tFWV9DTURfQVJHX01BU0spKSBiZWVwKCk7CisgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICBiZWVwKCk7CisgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIH0KKyAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIEJSTEFQSV9LRVlfVFlQRV9TWU06IHsKKyAgICAgICAgICAvKiBsYXRpbjEgKi8KKyAgICAgICAgICBpZiAoY29kZSA8IDBYMTAwKSBjb2RlIHw9IEJSTEFQSV9LRVlfU1lNX1VOSUNPREU7CisKKyAgICAgICAgICBpZiAoKGNvZGUgJiAwWDFmMDAwMDAwKSA9PSBCUkxBUElfS0VZX1NZTV9VTklDT0RFKSB7CisgICAgICAgICAgICAvKiB1bmljb2RlICovCisgICAgICAgICAgICBpZiAoKGNvZGUgJiAwWGZmZmYwMCkgPT0gVU5JQ09ERV9CUkFJTExFX1JPVykgeworICAgICAgICAgICAgICAvKiBTZXQgYnJhaWxsZSBwYXR0ZXJuICovCisgICAgICAgICAgICAgIGlmICghc2V0RG90cyhldGQsIGNvZGUgJiBVTklDT0RFX0NFTExfTUFTSykpIGJlZXAoKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgIHdjaGFyX3QgY2hhcmFjdGVyID0gY29kZSAmIDBYRkZGRkZGOworCisgICAgICAgICAgICAgIGlmIChldGQtPmNoYXJzZXQpIHsKKyAgICAgICAgICAgICAgICBpbnQgYyA9IGNvbnZlcnRXY2hhclRvQ2hhcihjaGFyYWN0ZXIpOworCisgICAgICAgICAgICAgICAgaWYgKGMgIT0gRU9GKSB7CisgICAgICAgICAgICAgICAgICBldGQtPmNoYXJhY3Rlci5ieXRlID0gYzsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgYmVlcCgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBldGQtPmNoYXJhY3Rlci51bmljb2RlID0gY2hhcmFjdGVyOworICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHN3aXRjaCAoY29kZSkgeworICAgICAgICAgICAgICBjYXNlIEJSTEFQSV9LRVlfU1lNX0xFRlQ6CisgICAgICAgICAgICAgICAgc2V0UHJldmlvdXNBY3R1YWxDaGFyYWN0ZXIoZXRkKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICBjYXNlIEJSTEFQSV9LRVlfU1lNX1JJR0hUOgorICAgICAgICAgICAgICAgIHNldE5leHRBY3R1YWxDaGFyYWN0ZXIoZXRkKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICBjYXNlIEJSTEFQSV9LRVlfU1lNX1VQOgorICAgICAgICAgICAgICAgIGlmICghc2V0UHJldmlvdXNEZWZpbmVkQ2hhcmFjdGVyKGV0ZCkpIGJlZXAoKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICBjYXNlIEJSTEFQSV9LRVlfU1lNX0RPV046CisgICAgICAgICAgICAgICAgaWYgKCFzZXROZXh0RGVmaW5lZENoYXJhY3RlcihldGQpKSBiZWVwKCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgY2FzZSBCUkxBUElfS0VZX1NZTV9IT01FOgorICAgICAgICAgICAgICAgIGlmICghc2V0Rmlyc3REZWZpbmVkQ2hhcmFjdGVyKGV0ZCkpIGJlZXAoKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICBjYXNlIEJSTEFQSV9LRVlfU1lNX0VORDoKKyAgICAgICAgICAgICAgICBpZiAoIXNldExhc3REZWZpbmVkQ2hhcmFjdGVyKGV0ZCkpIGJlZXAoKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIGJlZXAoKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgIGJlZXAoKTsKKyAgICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICB9IGVsc2UgaWYgKHJldCA9PSAtMSkgeworICAgICAgc2V0QnJsYXBpRXJyb3IoZXRkLCAiYnJsYXBpX3JlYWRLZXkiKTsKKyAgICAgIHJlbGVhc2VCcmFpbGxlRGlzcGxheShldGQpOworICAgIH0KKyAgfQorCisgIHJldHVybiAxOworfQorI2VuZGlmIC8qIEVOQUJMRV9BUEkgKi8KKyNlbmRpZiAvKiBfX01JTkdXMzJfXyAqLworCitzdGF0aWMgUHJvZ3JhbUV4aXRTdGF0dXMKK2VkaXRUYWJsZSAodm9pZCkgeworICBQcm9ncmFtRXhpdFN0YXR1cyBleGl0U3RhdHVzOworICBFZGl0VGFibGVEYXRhIGV0ZDsKKworICBldGQudHRkID0gTlVMTDsKKyAgZXRkLnVwZGF0ZWQgPSAwOworCisgIHsKKyAgICBGSUxFICppbnB1dEZpbGUgPSBvcGVuSW5wdXRUYWJsZSgmaW5wdXRQYXRoLCAwKTsKKworICAgIGlmIChpbnB1dEZpbGUpIHsKKyAgICAgIGlmICgoZXRkLnR0ZCA9IHJlYWRUYWJsZShpbnB1dFBhdGgsIGlucHV0RmlsZSwgaW5wdXRGb3JtYXQpKSkgeworICAgICAgICBleGl0U3RhdHVzID0gUFJPR19FWElUX1NVQ0NFU1M7CisgICAgICB9IGVsc2UgeworICAgICAgICBleGl0U3RhdHVzID0gUFJPR19FWElUX0ZBVEFMOworICAgICAgfQorCisgICAgICBmY2xvc2UoaW5wdXRGaWxlKTsKKyAgICB9IGVsc2UgeworICAgICAgZXhpdFN0YXR1cyA9IFBST0dfRVhJVF9GQVRBTDsKKyAgICB9CisgIH0KKworICBpZiAoZXhpdFN0YXR1cyA9PSBQUk9HX0VYSVRfU1VDQ0VTUykgeworI2lmZGVmIEVOQUJMRV9BUEkKKyAgICBjbGFpbUJyYWlsbGVEaXNwbGF5KCZldGQpOworI2VuZGlmIC8qIEVOQUJMRV9BUEkgKi8KKworI2lmIGRlZmluZWQoR09UX0NVUlNFUykKKyAgICBpbml0c2NyKCk7CisgICAgY2JyZWFrKCk7CisgICAga2V5cGFkKHN0ZHNjciwgVFJVRSk7CisgICAgbm9lY2hvKCk7CisgICAgbm9ubCgpOworICAgIGludHJmbHVzaChzdGRzY3IsIEZBTFNFKTsKKyNlbHNlIC8qIHN0YW5kYXJkIGlucHV0L291dHB1dCAqLworICAgIHNldHZidWYoc3RkaW4sIE5VTEwsIF9JT05CRiwgMCk7CisgICAgaW5wdXRBdHRyaWJ1dGVzQ2hhbmdlZCA9IDA7CisKKyNpZiBkZWZpbmVkKF9fTUlOR1czMl9fKQorICAgIGlmIChHZXRDb25zb2xlTW9kZShTVERJTl9IQU5ETEUsICZpbnB1dENvbnNvbGVNb2RlKSkgeworICAgICAgRFdPUkQgbmV3Q29uc29sZU1vZGUgPSBpbnB1dENvbnNvbGVNb2RlOworICAgICAgbmV3Q29uc29sZU1vZGUgJj0gfihFTkFCTEVfTElORV9JTlBVVCB8IEVOQUJMRV9FQ0hPX0lOUFVUIHwgRU5BQkxFX1BST0NFU1NFRF9JTlBVVCk7CisKKyAgICAgIGlmIChTZXRDb25zb2xlTW9kZShTVERJTl9IQU5ETEUsIG5ld0NvbnNvbGVNb2RlKSkgeworICAgICAgICBpbnB1dEF0dHJpYnV0ZXNDaGFuZ2VkID0gMTsKKyAgICAgIH0KKyAgICB9CisjZWxzZSAvKiB0ZXJtaW9zICovCisgICAgaWYgKHRjZ2V0YXR0cihTVERJTl9GSUxFTk8sICZpbnB1dFRlcm1pbmFsQXR0cmlidXRlcykgIT0gLTEpIHsKKyAgICAgIHN0cnVjdCB0ZXJtaW9zIG5ld0F0dHJpYnV0ZXMgPSBpbnB1dFRlcm1pbmFsQXR0cmlidXRlczsKKworICAgICAgbmV3QXR0cmlidXRlcy5jX2lmbGFnICY9IH4oSUdOQlJLIHwgQlJLSU5UIHwgUEFSTVJLIHwgSVNUUklQIHwgSU5MQ1IgfCBJR05DUiB8IElDUk5MIHwgSVhPTik7CisgICAgICBuZXdBdHRyaWJ1dGVzLmNfbGZsYWcgJj0gfihFQ0hPIHwgRUNIT05MIHwgSUNBTk9OIHwgSVNJRyB8IElFWFRFTik7CisgICAgICBuZXdBdHRyaWJ1dGVzLmNfY2ZsYWcgJj0gfihDU0laRSB8IFBBUkVOQik7CisgICAgICBuZXdBdHRyaWJ1dGVzLmNfY2ZsYWcgfD0gQ1M4OworCisgICAgICB7CisgICAgICAgIGZvciAoaW50IGk9MDsgaTxOQ0NTOyBpKz0xKSBuZXdBdHRyaWJ1dGVzLmNfY2NbaV0gPSBfUE9TSVhfVkRJU0FCTEU7CisgICAgICB9CisKKyAgICAgIG5ld0F0dHJpYnV0ZXMuY19jY1tWVElNRV0gPSAwOworICAgICAgbmV3QXR0cmlidXRlcy5jX2NjW1ZNSU5dID0gMTsKKworICAgICAgaWYgKHRjc2V0YXR0cihTVERJTl9GSUxFTk8sIFRDU0FGTFVTSCwgJm5ld0F0dHJpYnV0ZXMpICE9IC0xKSB7CisgICAgICAgIGlucHV0QXR0cmlidXRlc0NoYW5nZWQgPSAxOworICAgICAgfTsKKyAgICB9CisjZW5kaWYgLyogaW5wdXQgdGVybWluYWwgaW5pdGlhbGl6YXRpb24gKi8KKyNlbmRpZiAvKiBpbml0aWFsaXplIGtleWJvYXJkIGFuZCBzY3JlZW4gKi8KKworICAgIGV0ZC5jaGFyc2V0ID0gKm9wdF9jaGFyc2V0PyBvcHRfY2hhcnNldDogTlVMTDsKKyAgICBzZXRGaXJzdERlZmluZWRDaGFyYWN0ZXIoJmV0ZCk7CisKKyAgICB3aGlsZSAodXBkYXRlQ2hhcmFjdGVyRGVzY3JpcHRpb24oJmV0ZCkpIHsKKyAgICAgIGZkX3NldCBzZXQ7CisgICAgICBGRF9aRVJPKCZzZXQpOworCisjaWZuZGVmIF9fTUlOR1czMl9fCisgICAgICB7CisgICAgICAgIGludCBtYXhpbXVtRmlsZURlc2NyaXB0b3IgPSBTVERJTl9GSUxFTk87CisgICAgICAgIEZEX1NFVChTVERJTl9GSUxFTk8sICZzZXQpOworCisjaWZkZWYgRU5BQkxFX0FQSQorICAgICAgICBpZiAoaGF2ZUJyYWlsbGVEaXNwbGF5KCZldGQpKSB7CisgICAgICAgICAgRkRfU0VUKGV0ZC5icmxhcGlGaWxlRGVzY3JpcHRvciwgJnNldCk7CisKKyAgICAgICAgICBpZiAoZXRkLmJybGFwaUZpbGVEZXNjcmlwdG9yID4gbWF4aW11bUZpbGVEZXNjcmlwdG9yKSB7CisgICAgICAgICAgICBtYXhpbXVtRmlsZURlc2NyaXB0b3IgPSBldGQuYnJsYXBpRmlsZURlc2NyaXB0b3I7CisgICAgICAgICAgfQorICAgICAgICB9CisjZW5kaWYgLyogRU5BQkxFX0FQSSAqLworCisgICAgICAgIHNlbGVjdChtYXhpbXVtRmlsZURlc2NyaXB0b3IrMSwgJnNldCwgTlVMTCwgTlVMTCwgTlVMTCk7CisgICAgICB9CisKKyNpZmRlZiBFTkFCTEVfQVBJCisgICAgICBpZiAoaGF2ZUJyYWlsbGVEaXNwbGF5KCZldGQpICYmIEZEX0lTU0VUKGV0ZC5icmxhcGlGaWxlRGVzY3JpcHRvciwgJnNldCkpIHsKKyAgICAgICAgaWYgKCFkb0JyYWlsbGVDb21tYW5kKCZldGQpKSBicmVhazsKKyAgICAgIH0KKyNlbmRpZiAvKiBFTkFCTEVfQVBJICovCisKKyAgICAgIGlmIChGRF9JU1NFVChTVERJTl9GSUxFTk8sICZzZXQpKQorI2VuZGlmIC8qIF9fTUlOR1czMl9fICovCisgICAgICB7CisgICAgICAgIGlmICghZG9LZXlib2FyZENvbW1hbmQoJmV0ZCkpIGJyZWFrOworICAgICAgfQorICAgIH0KKworICAgIGVyYXNlKCk7CisgICAgcmVmcmVzaCgpOworCisjaWYgZGVmaW5lZChHT1RfQ1VSU0VTKQorICAgIGVuZHdpbigpOworI2Vsc2UgLyogc3RhbmRhcmQgaW5wdXQvb3V0cHV0ICovCisgICAgaWYgKGlucHV0QXR0cmlidXRlc0NoYW5nZWQpIHsKKyNpZiBkZWZpbmVkKF9fTUlOR1czMl9fKQorICAgICAgU2V0Q29uc29sZU1vZGUoU1RESU5fSEFORExFLCBpbnB1dENvbnNvbGVNb2RlKTsKKyNlbHNlIC8qIHRlcm1pb3MgKi8KKyAgICAgIHRjc2V0YXR0cihTVERJTl9GSUxFTk8sIFRDU0FGTFVTSCwgJmlucHV0VGVybWluYWxBdHRyaWJ1dGVzKTsKKyNlbmRpZiAvKiBpbnB1dCB0ZXJtaW5hbCByZXN0b3JhdGlvbiAqLworICAgIH0KKyNlbmRpZiAvKiByZXN0b3JlIGtleWJvYXJkIGFuZCBzY3JlZW4gKi8KKworI2lmZGVmIEVOQUJMRV9BUEkKKyAgICBpZiAoaGF2ZUJyYWlsbGVEaXNwbGF5KCZldGQpKSByZWxlYXNlQnJhaWxsZURpc3BsYXkoJmV0ZCk7CisjZW5kaWYgLyogRU5BQkxFX0FQSSAqLworCisgICAgaWYgKGV0ZC50dGQpIGRlc3Ryb3lUZXh0VGFibGVEYXRhKGV0ZC50dGQpOworICB9CisKKyAgcmV0dXJuIGV4aXRTdGF0dXM7Cit9CisKK2ludAorbWFpbiAoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkgeworICBQcm9ncmFtRXhpdFN0YXR1cyBleGl0U3RhdHVzOworCisgIHsKKyAgICBjb25zdCBDb21tYW5kTGluZURlc2NyaXB0b3IgZGVzY3JpcHRvciA9IHsKKyAgICAgIC5vcHRpb25zID0gJnByb2dyYW1PcHRpb25zLAorICAgICAgLmFwcGxpY2F0aW9uTmFtZSA9ICJicmx0dHktdHRiIiwKKworICAgICAgLnVzYWdlID0geworICAgICAgICAucHVycG9zZSA9IHN0cnRleHQoIkNoZWNrL2VkaXQgYSB0ZXh0IChjb21wdXRlciBicmFpbGxlKSB0YWJsZSwgb3IgY29udmVydCBpdCBmcm9tIG9uZSBmb3JtYXQgdG8gYW5vdGhlci4iKSwKKyAgICAgICAgLnBhcmFtZXRlcnMgPSAiaW5wdXQtdGFibGUgW291dHB1dC10YWJsZV0iLAorICAgICAgfQorICAgIH07CisKKyAgICBQUk9DRVNTX09QVElPTlMoZGVzY3JpcHRvciwgYXJnYywgYXJndik7CisgIH0KKworICBpZiAoYXJnYyA9PSAwKSB7CisgICAgbG9nTWVzc2FnZShMT0dfRVJSLCAibWlzc2luZyBpbnB1dCB0YWJsZSIpOworICAgIHJldHVybiBQUk9HX0VYSVRfU1lOVEFYOworICB9CisgIGlucHV0UGF0aCA9ICphcmd2KyssIGFyZ2MtLTsKKworICBpZiAoYXJnYyA+IDApIHsKKyAgICBvdXRwdXRQYXRoID0gKmFyZ3YrKywgYXJnYy0tOworICB9IGVsc2UgaWYgKG9wdF9vdXRwdXRGb3JtYXQgJiYgKm9wdF9vdXRwdXRGb3JtYXQpIHsKKyAgICBjb25zdCBjaGFyICpleHRlbnNpb24gPSBsb2NhdGVQYXRoRXh0ZW5zaW9uKGlucHV0UGF0aCk7CisgICAgaW50IHByZWZpeCA9IGV4dGVuc2lvbj8gKGV4dGVuc2lvbiAtIGlucHV0UGF0aCk6IHN0cmxlbihpbnB1dFBhdGgpOworICAgIGNoYXIgYnVmZmVyW3ByZWZpeCArIDEgKyBzdHJsZW4ob3B0X291dHB1dEZvcm1hdCkgKyAxXTsKKworICAgIHNucHJpbnRmKGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlciksICIlLipzLiVzIiwgcHJlZml4LCBpbnB1dFBhdGgsIG9wdF9vdXRwdXRGb3JtYXQpOworCisgICAgaWYgKCEob3V0cHV0UGF0aCA9IHN0cmR1cChidWZmZXIpKSkgeworICAgICAgbG9nTWFsbG9jRXJyb3IoKTsKKyAgICAgIHJldHVybiBQUk9HX0VYSVRfRkFUQUw7CisgICAgfQorICB9IGVsc2UgeworICAgIG91dHB1dFBhdGggPSBOVUxMOworICB9CisKKyAgaWYgKGFyZ2MgPiAwKSB7CisgICAgbG9nTWVzc2FnZShMT0dfRVJSLCAidG9vIG1hbnkgcGFyYW1ldGVycyIpOworICAgIHJldHVybiBQUk9HX0VYSVRfU1lOVEFYOworICB9CisKKyAgaW5wdXRGb3JtYXQgPSBnZXRGb3JtYXRFbnRyeShvcHRfaW5wdXRGb3JtYXQsIGlucHV0UGF0aCwgImlucHV0Iik7CisKKyAgaWYgKG91dHB1dFBhdGgpIHsKKyAgICBvdXRwdXRGb3JtYXQgPSBnZXRGb3JtYXRFbnRyeShvcHRfb3V0cHV0Rm9ybWF0LCBvdXRwdXRQYXRoLCAib3V0cHV0Iik7CisgIH0gZWxzZSB7CisgICAgb3V0cHV0Rm9ybWF0ID0gTlVMTDsKKyAgfQorCisgIGlmICgqb3B0X2NoYXJzZXQgJiYgIXNldENoYXJzZXQob3B0X2NoYXJzZXQpKSB7CisgICAgbG9nTWVzc2FnZShMT0dfRVJSLCAiY2Fubm90IGVzdGFibGlzaCBjaGFyYWN0ZXIgc2V0OiAlcyIsIG9wdF9jaGFyc2V0KTsKKyAgICByZXR1cm4gUFJPR19FWElUX1NFTUFOVElDOworICB9CisKKyAgaWYgKG9wdF9lZGl0KSB7CisgICAgZXhpdFN0YXR1cyA9IGVkaXRUYWJsZSgpOworICB9IGVsc2UgeworICAgIGV4aXRTdGF0dXMgPSBjb252ZXJ0VGFibGUoKTsKKyAgfQorCisgIHJldHVybiBleGl0U3RhdHVzOworfQpkaWZmIC0tZ2l0IGEvUHJvZ3JhbXMvYnJsdHR5LXR1bmUuYyBiL1Byb2dyYW1zL2JybHR0eS10dW5lLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWZiYzk3MQotLS0gL2Rldi9udWxsCisrKyBiL1Byb2dyYW1zL2JybHR0eS10dW5lLmMKQEAgLTAsMCArMSwyMzYgQEAKKy8qCisgKiBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorICogICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorICoKKyAqIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorICoKKyAqIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyAqLworCisjaW5jbHVkZSAicHJvbG9ndWUuaCIKKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKyNpbmNsdWRlICJsb2cuaCIKKyNpbmNsdWRlICJjbWRsaW5lLmgiCisjaW5jbHVkZSAicHJlZnMuaCIKKyNpbmNsdWRlICJ0dW5lX3V0aWxzLmgiCisjaW5jbHVkZSAidHVuZV9idWlsZGVyLmgiCisjaW5jbHVkZSAibm90ZXMuaCIKKyNpbmNsdWRlICJkYXRhZmlsZS5oIgorCitzdGF0aWMgaW50IG9wdF9mcm9tRmlsZXM7CitzdGF0aWMgY2hhciAqb3B0X291dHB1dFZvbHVtZTsKK3N0YXRpYyBjaGFyICpvcHRfdHVuZURldmljZTsKKworI2lmZGVmIEhBVkVfTUlESV9TVVBQT1JUCitzdGF0aWMgY2hhciAqb3B0X21pZGlJbnN0cnVtZW50OworI2VuZGlmIC8qIEhBVkVfTUlESV9TVVBQT1JUICovCisKK0JFR0lOX09QVElPTl9UQUJMRShwcm9ncmFtT3B0aW9ucykKKyAgeyAud29yZCA9ICJmaWxlcyIsCisgICAgLmxldHRlciA9ICdmJywKKyAgICAuc2V0dGluZy5mbGFnID0gJm9wdF9mcm9tRmlsZXMsCisgICAgLmRlc2NyaXB0aW9uID0gIlVzZSBmaWxlcyByYXRoZXIgdGhhbiBjb21tYW5kIGxpbmUgYXJndW1lbnRzLiIKKyAgfSwKKworICB7IC53b3JkID0gInZvbHVtZSIsCisgICAgLmxldHRlciA9ICd2JywKKyAgICAuYXJndW1lbnQgPSAibG91ZG5lc3MiLAorICAgIC5zZXR0aW5nLnN0cmluZyA9ICZvcHRfb3V0cHV0Vm9sdW1lLAorICAgIC5kZXNjcmlwdGlvbiA9ICJPdXRwdXQgdm9sdW1lIChwZXJjZW50YWdlKS4iCisgIH0sCisKKyAgeyAud29yZCA9ICJkZXZpY2UiLAorICAgIC5sZXR0ZXIgPSAnZCcsCisgICAgLmFyZ3VtZW50ID0gImRldmljZSIsCisgICAgLnNldHRpbmcuc3RyaW5nID0gJm9wdF90dW5lRGV2aWNlLAorICAgIC5kZXNjcmlwdGlvbiA9ICJOYW1lIG9mIHR1bmUgZGV2aWNlLiIKKyAgfSwKKworI2lmZGVmIEhBVkVfUENNX1NVUFBPUlQKKyAgeyAud29yZCA9ICJwY20tZGV2aWNlIiwKKyAgICAubGV0dGVyID0gJ3AnLAorICAgIC5hcmd1bWVudCA9ICJkZXZpY2UiLAorICAgIC5zZXR0aW5nLnN0cmluZyA9ICZvcHRfcGNtRGV2aWNlLAorICAgIC5kZXNjcmlwdGlvbiA9ICJEZXZpY2Ugc3BlY2lmaWVyIGZvciBzb3VuZGNhcmQgZGlnaXRhbCBhdWRpby4iCisgIH0sCisjZW5kaWYgLyogSEFWRV9QQ01fU1VQUE9SVCAqLworCisjaWZkZWYgSEFWRV9NSURJX1NVUFBPUlQKKyAgeyAud29yZCA9ICJtaWRpLWRldmljZSIsCisgICAgLmxldHRlciA9ICdtJywKKyAgICAuYXJndW1lbnQgPSAiZGV2aWNlIiwKKyAgICAuc2V0dGluZy5zdHJpbmcgPSAmb3B0X21pZGlEZXZpY2UsCisgICAgLmRlc2NyaXB0aW9uID0gIkRldmljZSBzcGVjaWZpZXIgZm9yIHRoZSBNdXNpY2FsIEluc3RydW1lbnQgRGlnaXRhbCBJbnRlcmZhY2UuIgorICB9LAorCisgIHsgLndvcmQgPSAiaW5zdHJ1bWVudCIsCisgICAgLmxldHRlciA9ICdpJywKKyAgICAuYXJndW1lbnQgPSAiaW5zdHJ1bWVudCIsCisgICAgLnNldHRpbmcuc3RyaW5nID0gJm9wdF9taWRpSW5zdHJ1bWVudCwKKyAgICAuZGVzY3JpcHRpb24gPSAiTmFtZSBvZiBNSURJIGluc3RydW1lbnQuIgorICB9LAorI2VuZGlmIC8qIEhBVkVfTUlESV9TVVBQT1JUICovCitFTkRfT1BUSU9OX1RBQkxFKHByb2dyYW1PcHRpb25zKQorCitzdGF0aWMKK0JFR0lOX1VTQUdFX05PVEVTKHVzYWdlTm90ZXMpCisgICJJZiB0aGUgdHVuZSBpcyBzcGVjaWZpZWQgb24gdGhlIGNvbW1hbmQgbGluZSB0aGVuIGVhY2ggYXJndW1lbnQgY29udGFpbnMgYSBjb21tYW5kIGdyb3VwLiIsCisgICJJZiBpdCdzIHJlYWQgZnJvbSBhIGZpbGUgdGhlbiBlYWNoIGxpbmUgY29udGFpbnMgYSBjb21tYW5kIGdyb3VwLiIsCisgICJFYWNoIHNwZWNpZmllZCBmaWxlIGNvbnRhaW5zIGEgZGlmZmVyZW50IHR1bmUuIiwKK0VORF9VU0FHRV9OT1RFUworCitzdGF0aWMgdm9pZAorYmVnaW5UdW5lU3RyZWFtIChjb25zdCBjaGFyICpuYW1lLCB2b2lkICpkYXRhKSB7CisgIFR1bmVCdWlsZGVyICp0YiA9IGRhdGE7CisgIHJlc2V0VHVuZUJ1aWxkZXIodGIpOworICBzZXRUdW5lU291cmNlTmFtZSh0YiwgbmFtZSk7Cit9CisKK3N0YXRpYyB2b2lkCitwbGF5VHVuZSAoVHVuZUJ1aWxkZXIgKnRiKSB7CisgIFRvbmVFbGVtZW50ICp0dW5lID0gZ2V0VHVuZSh0Yik7CisKKyAgaWYgKHR1bmUpIHsKKyAgICB0dW5lUGxheVRvbmVzKHR1bmUpOworICAgIHR1bmVTeW5jaHJvbml6ZSgpOworICAgIGZyZWUodHVuZSk7CisgIH0KK30KKworc3RhdGljIHZvaWQKK2VuZFR1bmVTdHJlYW0gKGludCBpbmNvbXBsZXRlLCB2b2lkICpkYXRhKSB7CisgIGlmICghaW5jb21wbGV0ZSkgeworICAgIFR1bmVCdWlsZGVyICp0YiA9IGRhdGE7CisgICAgcGxheVR1bmUodGIpOworICB9Cit9CisKK3N0YXRpYworREFUQV9PUEVSQU5EU19QUk9DRVNTT1IocHJvY2Vzc1R1bmVPcGVyYW5kcykgeworICBEYXRhT3BlcmFuZCBsaW5lOworCisgIGlmIChnZXRUZXh0T3BlcmFuZChmaWxlLCAmbGluZSwgTlVMTCkpIHsKKyAgICBEYXRhU3RyaW5nIHRleHQ7CisKKyAgICBpZiAocGFyc2VEYXRhU3RyaW5nKGZpbGUsICZ0ZXh0LCBsaW5lLmNoYXJhY3RlcnMsIGxpbmUubGVuZ3RoLCAwKSkgeworICAgICAgcmV0dXJuIHBhcnNlVHVuZVRleHQoZGF0YSwgdGV4dC5jaGFyYWN0ZXJzKTsKKyAgICB9CisgIH0KKworICByZXR1cm4gMTsKK30KKworc3RhdGljCitEQVRBX09QRVJBTkRTX1BST0NFU1NPUihwcm9jZXNzVHVuZUxpbmUpIHsKKyAgVHVuZUJ1aWxkZXIgKnRiID0gZGF0YTsKKyAgaW5jcmVtZW50VHVuZVNvdXJjZUluZGV4KHRiKTsKKworICBCRUdJTl9EQVRBX0RJUkVDVElWRV9UQUJMRQorICAgIERBVEFfTkVTVElOR19ESVJFQ1RJVkVTLAorICAgIERBVEFfVkFSSUFCTEVfRElSRUNUSVZFUywKKyAgICBEQVRBX0NPTkRJVElPTl9ESVJFQ1RJVkVTLAorICAgIHsubmFtZT1OVUxMLCAucHJvY2Vzc29yPXByb2Nlc3NUdW5lT3BlcmFuZHN9LAorICBFTkRfREFUQV9ESVJFQ1RJVkVfVEFCTEUKKworICByZXR1cm4gcHJvY2Vzc0RpcmVjdGl2ZU9wZXJhbmQoZmlsZSwgJmRpcmVjdGl2ZXMsICJ0dW5lIGZpbGUgZGlyZWN0aXZlIiwgdGIpOworfQorCitpbnQKK21haW4gKGludCBhcmdjLCBjaGFyICphcmd2W10pIHsKKyAgeworICAgIGNvbnN0IENvbW1hbmRMaW5lRGVzY3JpcHRvciBkZXNjcmlwdG9yID0geworICAgICAgLm9wdGlvbnMgPSAmcHJvZ3JhbU9wdGlvbnMsCisgICAgICAuYXBwbGljYXRpb25OYW1lID0gImJybHR0eS10dW5lIiwKKworICAgICAgLnVzYWdlID0geworICAgICAgICAucHVycG9zZSA9IHN0cnRleHQoIkNvbXBvc2UgYSB0dW5lIHdpdGggdGhlIHR1bmUgYnVpbGRlciBhbmQgcGxheSBpdCB3aXRoIHRoZSB0b25lIGdlbmVyYXRvci4iKSwKKyAgICAgICAgLnBhcmFtZXRlcnMgPSAiY29tbWFuZHMgLi4uIHwgLWYgW3tmaWxlIHwgLX0gLi4uXSIsCisgICAgICAgIC5ub3RlcyA9IFVTQUdFX05PVEVTKHVzYWdlTm90ZXMsIHR1bmVCdWlsZGVyVXNhZ2VOb3RlcyksCisgICAgICB9CisgICAgfTsKKworICAgIFBST0NFU1NfT1BUSU9OUyhkZXNjcmlwdG9yLCBhcmdjLCBhcmd2KTsKKyAgfQorCisgIHJlc2V0UHJlZmVyZW5jZXMoKTsKKyAgaWYgKCFwYXJzZVR1bmVEZXZpY2Uob3B0X3R1bmVEZXZpY2UpKSByZXR1cm4gUFJPR19FWElUX1NZTlRBWDsKKyAgaWYgKCFwYXJzZVR1bmVWb2x1bWUob3B0X291dHB1dFZvbHVtZSkpIHJldHVybiBQUk9HX0VYSVRfU1lOVEFYOworCisjaWZkZWYgSEFWRV9NSURJX1NVUFBPUlQKKyAgaWYgKCFwYXJzZVR1bmVJbnN0cnVtZW50KG9wdF9taWRpSW5zdHJ1bWVudCkpIHJldHVybiBQUk9HX0VYSVRfU1lOVEFYOworI2VuZGlmIC8qIEhBVkVfTUlESV9TVVBQT1JUICovCisKKyAgaWYgKCFzZXRUdW5lRGV2aWNlKCkpIHJldHVybiBQUk9HX0VYSVRfU0VNQU5USUM7CisgIFByb2dyYW1FeGl0U3RhdHVzIGV4aXRTdGF0dXMgPSBQUk9HX0VYSVRfRkFUQUw7CisgIFR1bmVCdWlsZGVyICp0YiA9IG5ld1R1bmVCdWlsZGVyKCk7CisKKyAgaWYgKHRiKSB7CisgICAgaWYgKG9wdF9mcm9tRmlsZXMpIHsKKyAgICAgIGNvbnN0IElucHV0RmlsZXNQcm9jZXNzaW5nUGFyYW1ldGVycyBwYXJhbWV0ZXJzID0geworICAgICAgICAuYmVnaW5TdHJlYW0gPSBiZWdpblR1bmVTdHJlYW0sCisgICAgICAgIC5lbmRTdHJlYW0gPSBlbmRUdW5lU3RyZWFtLAorCisgICAgICAgIC5kYXRhRmlsZVBhcmFtZXRlcnMgPSB7CisgICAgICAgICAgLnByb2Nlc3NPcGVyYW5kcyA9IHByb2Nlc3NUdW5lTGluZSwKKyAgICAgICAgICAuZGF0YSA9IHRiCisgICAgICAgIH0KKyAgICAgIH07CisKKyAgICAgIGV4aXRTdGF0dXMgPSBwcm9jZXNzSW5wdXRGaWxlcyhhcmd2LCBhcmdjLCAmcGFyYW1ldGVycyk7CisgICAgfSBlbHNlIGlmIChhcmdjKSB7CisgICAgICBleGl0U3RhdHVzID0gUFJPR19FWElUX1NVQ0NFU1M7CisgICAgICBzZXRUdW5lU291cmNlTmFtZSh0YiwgIjxjb21tYW5kLWxpbmU+Iik7CisKKyAgICAgIGRvIHsKKyAgICAgICAgaW5jcmVtZW50VHVuZVNvdXJjZUluZGV4KHRiKTsKKyAgICAgICAgaWYgKCFwYXJzZVR1bmVTdHJpbmcodGIsICphcmd2KSkgYnJlYWs7CisgICAgICAgIGFyZ3YgKz0gMTsKKyAgICAgIH0gd2hpbGUgKGFyZ2MgLT0gMSk7CisKKyAgICAgIHBsYXlUdW5lKHRiKTsKKyAgICB9IGVsc2UgeworICAgICAgbG9nTWVzc2FnZShMT0dfRVJSLCAibWlzc2luZyB0dW5lIik7CisgICAgICBleGl0U3RhdHVzID0gUFJPR19FWElUX1NZTlRBWDsKKyAgICB9CisKKyAgICBpZiAoZXhpdFN0YXR1cyA9PSBQUk9HX0VYSVRfU1VDQ0VTUykgeworICAgICAgc3dpdGNoIChnZXRUdW5lU3RhdHVzKHRiKSkgeworICAgICAgICBjYXNlIFRVTkVfU1RBVFVTX09LOgorICAgICAgICAgIGV4aXRTdGF0dXMgPSBQUk9HX0VYSVRfU1VDQ0VTUzsKKyAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIFRVTkVfU1RBVFVTX1NZTlRBWDoKKyAgICAgICAgICBleGl0U3RhdHVzID0gUFJPR19FWElUX1NZTlRBWDsKKyAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIFRVTkVfU1RBVFVTX0ZBVEFMOgorICAgICAgICAgIGV4aXRTdGF0dXMgPSBQUk9HX0VYSVRfRkFUQUw7CisgICAgICAgICAgYnJlYWs7CisgICAgICB9CisgICAgfSBlbHNlIGlmIChleGl0U3RhdHVzID09IFBST0dfRVhJVF9GT1JDRSkgeworICAgICAgZXhpdFN0YXR1cyA9IFBST0dfRVhJVF9TVUNDRVNTOworICAgIH0KKworICAgIGRlc3Ryb3lUdW5lQnVpbGRlcih0Yik7CisgIH0KKworICByZXR1cm4gZXhpdFN0YXR1czsKK30KKworI2luY2x1ZGUgImFsZXJ0LmgiCisKK3ZvaWQKK2FsZXJ0IChBbGVydElkZW50aWZpZXIgaWRlbnRpZmllcikgeworfQpkaWZmIC0tZ2l0IGEvUHJvZ3JhbXMvYnJsdHR5LmMgYi9Qcm9ncmFtcy9icmx0dHkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNmI4ZTcxCi0tLSAvZGV2L251bGwKKysrIGIvUHJvZ3JhbXMvYnJsdHR5LmMKQEAgLTAsMCArMSwyNjMgQEAKKy8qCisgKiBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorICogICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorICoKKyAqIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorICoKKyAqIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyAqLworCisjaW5jbHVkZSAicHJvbG9ndWUuaCIKKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxsaW1pdHMuaD4KKyNpbmNsdWRlIDxzaWduYWwuaD4KKworI2luY2x1ZGUgImVtYmVkLmgiCisjaW5jbHVkZSAibG9nLmgiCisjaW5jbHVkZSAiYXBpX2NvbnRyb2wuaCIKKyNpbmNsdWRlICJjb3JlLmgiCisKK3N0YXRpYyBQcm9ncmFtRXhpdFN0YXR1cworYnJsdHR5UnVuICh2b2lkKSB7CisgIHdoaWxlIChicmx0dHlXYWl0KElOVF9NQVgpKTsKKyAgcmV0dXJuIFBST0dfRVhJVF9TVUNDRVNTOworfQorCisjaWZkZWYgX19NSU5HVzMyX18KKyNpbmNsdWRlICJ1dGY4LmgiCisKK3N0YXRpYyBTRVJWSUNFX1NUQVRVU19IQU5ETEUgc2VydmljZVN0YXR1c0hhbmRsZTsKK3N0YXRpYyBEV09SRCBzZXJ2aWNlU3RhdGU7CitzdGF0aWMgUHJvZ3JhbUV4aXRTdGF0dXMgc2VydmljZUV4aXRTdGF0dXM7CisKK3N0YXRpYyBCT09MCitzZXRTZXJ2aWNlU3RhdGUgKERXT1JEIHN0YXRlLCBEV09SRCBleGl0U3RhdHVzLCBjb25zdCBjaGFyICpuYW1lKSB7CisgIFNFUlZJQ0VfU1RBVFVTIHN0YXR1cyA9IHsKKyAgICAuZHdTZXJ2aWNlVHlwZSA9IFNFUlZJQ0VfV0lOMzJfT1dOX1BST0NFU1MgfCBTRVJWSUNFX0lOVEVSQUNUSVZFX1BST0NFU1MsCisgICAgLmR3Q3VycmVudFN0YXRlID0gc3RhdGUsCisKKyAgICAuZHdXaW4zMkV4aXRDb2RlID0gKGV4aXRTdGF0dXMgIT0gUFJPR19FWElUX1NVQ0NFU1MpPyBFUlJPUl9TRVJWSUNFX1NQRUNJRklDX0VSUk9SOiBOT19FUlJPUiwKKyAgICAuZHdTZXJ2aWNlU3BlY2lmaWNFeGl0Q29kZSA9IGV4aXRTdGF0dXMKKyAgfTsKKworICBzd2l0Y2ggKHN0YXR1cy5kd0N1cnJlbnRTdGF0ZSkgeworICAgIGRlZmF1bHQ6CisgICAgICBzdGF0dXMuZHdDb250cm9sc0FjY2VwdGVkID0gU0VSVklDRV9BQ0NFUFRfU1RPUCB8IFNFUlZJQ0VfQUNDRVBUX1BBVVNFX0NPTlRJTlVFOworCisgICAgY2FzZSBTRVJWSUNFX1NUQVJUX1BFTkRJTkc6CisgICAgY2FzZSBTRVJWSUNFX1NUT1BfUEVORElORzoKKyAgICBjYXNlIFNFUlZJQ0VfU1RPUFBFRDoKKyAgICAgIGJyZWFrOworICB9CisKKyAgc3dpdGNoIChzdGF0dXMuZHdDdXJyZW50U3RhdGUpIHsKKyAgICBjYXNlIFNFUlZJQ0VfU1RBUlRfUEVORElORzoKKyAgICBjYXNlIFNFUlZJQ0VfUEFVU0VfUEVORElORzoKKyAgICBjYXNlIFNFUlZJQ0VfQ09OVElOVUVfUEVORElORzoKKyAgICBjYXNlIFNFUlZJQ0VfU1RPUF9QRU5ESU5HOgorICAgICAgc3RhdHVzLmR3V2FpdEhpbnQgPSAxMDAwMDsKKyAgICAgIHN0YXR1cy5kd0NoZWNrUG9pbnQgPSAwOworCisgICAgZGVmYXVsdDoKKyAgICAgIGJyZWFrOworICB9CisKKyAgc2VydmljZVN0YXRlID0gc3RhdGU7CisgIGlmIChTZXRTZXJ2aWNlU3RhdHVzKHNlcnZpY2VTdGF0dXNIYW5kbGUsICZzdGF0dXMpKSByZXR1cm4gMTsKKworICBsb2dXaW5kb3dzU3lzdGVtRXJyb3IobmFtZSk7CisgIHJldHVybiAwOworfQorI2RlZmluZSBTRVRfU0VSVklDRV9TVEFURShzdGF0ZSxjb2RlKSBzZXRTZXJ2aWNlU3RhdGUoc3RhdGUsIGNvZGUsICNzdGF0ZSkKKworc3RhdGljIHZvaWQgV0lOQVBJCitzZXJ2aWNlQ29udHJvbEhhbmRsZXIgKERXT1JEIGNvZGUpIHsKKyAgc3dpdGNoIChjb2RlKSB7CisgICAgY2FzZSBTRVJWSUNFX0NPTlRST0xfU1RPUDoKKyAgICAgIFNFVF9TRVJWSUNFX1NUQVRFKFNFUlZJQ0VfU1RPUF9QRU5ESU5HLCBQUk9HX0VYSVRfU1VDQ0VTUyk7CisgICAgICByYWlzZShTSUdURVJNKTsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBTRVJWSUNFX0NPTlRST0xfUEFVU0U6CisgICAgICBTRVRfU0VSVklDRV9TVEFURShTRVJWSUNFX1BBVVNFX1BFTkRJTkcsIFBST0dfRVhJVF9TVUNDRVNTKTsKKyAgICAgIGFwaS5zdXNwZW5kRHJpdmVyKCk7CisgICAgICBTRVRfU0VSVklDRV9TVEFURShTRVJWSUNFX1BBVVNFRCwgUFJPR19FWElUX1NVQ0NFU1MpOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNFUlZJQ0VfQ09OVFJPTF9DT05USU5VRToKKyAgICAgIFNFVF9TRVJWSUNFX1NUQVRFKFNFUlZJQ0VfQ09OVElOVUVfUEVORElORywgUFJPR19FWElUX1NVQ0NFU1MpOworICAgICAgaWYgKGFwaS5yZXN1bWVEcml2ZXIoKSkgeworICAgICAgICBTRVRfU0VSVklDRV9TVEFURShTRVJWSUNFX1JVTk5JTkcsIFBST0dfRVhJVF9TVUNDRVNTKTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIFNFVF9TRVJWSUNFX1NUQVRFKFNFUlZJQ0VfUEFVU0VELCBQUk9HX0VYSVRfU1VDQ0VTUyk7CisgICAgICB9CisgICAgICBicmVhazsKKworICAgIGRlZmF1bHQ6CisgICAgICBsb2dNZXNzYWdlKExPR19XQVJOSU5HLCAidW5leHBlY3RlZCBzZXJ2aWNlIGNvbnRyb2wgY29kZTogJWx1IiwgY29kZSk7CisgICAgICBicmVhazsKKyAgfQorfQorCitzdGF0aWMgdm9pZAorZXhpdFNlcnZpY2UgKHZvaWQpIHsKKyAgU0VUX1NFUlZJQ0VfU1RBVEUoU0VSVklDRV9TVE9QUEVELCBQUk9HX0VYSVRfU1VDQ0VTUyk7Cit9CisKK3N0YXRpYyBjaGFyICoqCitnZXRDb21tYW5kTGluZUFyZ3VtZW50cyAoRFdPUkQgKmFyZ2MpIHsKKyAgaW50IGNvdW50OworICBMUFdTVFIgKmFyZ3VtZW50cyA9IENvbW1hbmRMaW5lVG9Bcmd2VyhHZXRDb21tYW5kTGluZVcoKSwgJmNvdW50KTsKKyAgY2hhciAqKmFyZ3Y7CisKKyAgaWYgKChhcmd2ID0gbWFsbG9jKEFSUkFZX1NJWkUoYXJndiwgY291bnQrMSkpKSkgeworICAgIHVuc2lnbmVkIGludCBpbmRleCA9IDA7CisKKyAgICB3aGlsZSAoaW5kZXggPCBjb3VudCkgeworICAgICAgY29uc3Qgd2NoYXJfdCAqYXJndW1lbnQgPSBhcmd1bWVudHNbaW5kZXhdOworCisgICAgICBpZiAoIShhcmd2W2luZGV4XSA9IGdldFV0ZjhGcm9tV2NoYXJzKGFyZ3VtZW50LCB3Y3NsZW4oYXJndW1lbnQpLCBOVUxMKSkpIHsKKyAgICAgICAgbG9nTWFsbG9jRXJyb3IoKTsKKyAgICAgICAgYnJlYWs7CisgICAgICB9CisKKyAgICAgIGluZGV4ICs9IDE7CisgICAgfQorCisgICAgTG9jYWxGcmVlKGFyZ3VtZW50cyk7CisgICAgYXJndW1lbnRzID0gTlVMTDsKKworICAgIGlmIChpbmRleCA9PSBjb3VudCkgeworICAgICAgYXJndltjb3VudF0gPSBOVUxMOworICAgICAgKmFyZ2MgPSBjb3VudDsKKyAgICAgIHJldHVybiBhcmd2OworICAgIH0KKworICAgIHdoaWxlIChpbmRleCA+IDApIGZyZWUoYXJndltpbmRleC09MV0pOworICAgIGZyZWUoYXJndik7CisgIH0gZWxzZSB7CisgICAgbG9nTWFsbG9jRXJyb3IoKTsKKyAgfQorCisgIHJldHVybiBOVUxMOworfQorCitzdGF0aWMgdm9pZCBXSU5BUEkKK3NlcnZpY2VNYWluIChEV09SRCBhcmdjLCBMUFNUUiAqYXJndikgeworICBhdGV4aXQoZXhpdFNlcnZpY2UpOworCisgIGlmICgoYXJndiA9IGdldENvbW1hbmRMaW5lQXJndW1lbnRzKCZhcmdjKSkpIHsKKyAgICBpZiAoKHNlcnZpY2VTdGF0dXNIYW5kbGUgPSBSZWdpc3RlclNlcnZpY2VDdHJsSGFuZGxlcigiIiwgc2VydmljZUNvbnRyb2xIYW5kbGVyKSkpIHsKKyAgICAgIGlmICgoU0VUX1NFUlZJQ0VfU1RBVEUoU0VSVklDRV9TVEFSVF9QRU5ESU5HLCBQUk9HX0VYSVRfU1VDQ0VTUykpKSB7CisgICAgICAgIGlmICgoc2VydmljZUV4aXRTdGF0dXMgPSBicmx0dHlDb25zdHJ1Y3QoYXJnYywgYXJndikpID09IFBST0dfRVhJVF9TVUNDRVNTKSB7CisgICAgICAgICAgaWYgKChTRVRfU0VSVklDRV9TVEFURShTRVJWSUNFX1JVTk5JTkcsIFBST0dfRVhJVF9TVUNDRVNTKSkpIHsKKyAgICAgICAgICAgIHNlcnZpY2VFeGl0U3RhdHVzID0gYnJsdHR5UnVuKCk7CisgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHNlcnZpY2VFeGl0U3RhdHVzID0gUFJPR19FWElUX0ZBVEFMOworICAgICAgICAgIH0KKworICAgICAgICAgIGJybHR0eURlc3RydWN0KCk7CisgICAgICAgIH0gZWxzZSBpZiAoc2VydmljZUV4aXRTdGF0dXMgPT0gUFJPR19FWElUX0ZPUkNFKSB7CisgICAgICAgICAgc2VydmljZUV4aXRTdGF0dXMgPSBQUk9HX0VYSVRfU1VDQ0VTUzsKKyAgICAgICAgfQorCisgICAgICAgIFNFVF9TRVJWSUNFX1NUQVRFKFNFUlZJQ0VfU1RPUFBFRCwgc2VydmljZUV4aXRTdGF0dXMpOworICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICBsb2dXaW5kb3dzU3lzdGVtRXJyb3IoIlJlZ2lzdGVyU2VydmljZUN0cmxIYW5kbGVyIik7CisgICAgfQorICB9Cit9CisjZW5kaWYgLyogX19NSU5HVzMyX18gKi8KKworaW50CittYWluIChpbnQgYXJnYywgY2hhciAqYXJndltdKSB7CisjaWZkZWYgX19NSU5HVzMyX18KKyAgeworICAgIHN0YXRpYyBTRVJWSUNFX1RBQkxFX0VOVFJZIHNlcnZpY2VUYWJsZVtdID0geworICAgICAgeyAubHBTZXJ2aWNlTmFtZT0iIiwgLmxwU2VydmljZVByb2M9c2VydmljZU1haW4gfSwKKyAgICAgIHt9CisgICAgfTsKKworICAgIGlzV2luZG93c1NlcnZpY2UgPSAxOworICAgIGlmIChTdGFydFNlcnZpY2VDdHJsRGlzcGF0Y2hlcihzZXJ2aWNlVGFibGUpKSByZXR1cm4gc2VydmljZUV4aXRTdGF0dXM7CisgICAgaXNXaW5kb3dzU2VydmljZSA9IDA7CisKKyAgICBpZiAoR2V0TGFzdEVycm9yKCkgIT0gRVJST1JfRkFJTEVEX1NFUlZJQ0VfQ09OVFJPTExFUl9DT05ORUNUKSB7CisgICAgICBsb2dXaW5kb3dzU3lzdGVtRXJyb3IoIlN0YXJ0U2VydmljZUN0cmxEaXNwYXRjaGVyIik7CisgICAgICByZXR1cm4gUFJPR19FWElUX0ZBVEFMOworICAgIH0KKyAgfQorI2VuZGlmIC8qIF9fTUlOR1czMl9fICovCisKKyNpZmRlZiBJTklUX1BBVEgKKyNkZWZpbmUgSU5JVF9OQU1FICJpbml0IgorCisgIGlmICgoZ2V0cGlkKCkgPT0gMSkgfHwgc3Ryc3RyKGFyZ3ZbMF0sICJsaW51eHJjIikpIHsKKyAgICBmcHJpbnRmKHN0ZGVyciwgZ2V0dGV4dCgiXCIlc1wiIHN0YXJ0ZWQgYXMgXCIlc1wiXG4iKSwgUEFDS0FHRV9OQU1FLCBhcmd2WzBdKTsKKyAgICBmZmx1c2goc3RkZXJyKTsKKworICAgIHN3aXRjaCAoZm9yaygpKSB7CisgICAgICBjYXNlIC0xOiAvKiBmYWlsZWQgKi8KKyAgICAgICAgZnByaW50ZihzdGRlcnIsIGdldHRleHQoImZvcmsgb2YgXCIlc1wiIGZhaWxlZDogJXNcbiIpLAorICAgICAgICAgICAgICAgIFBBQ0tBR0VfTkFNRSwgc3RyZXJyb3IoZXJybm8pKTsKKyAgICAgICAgZmZsdXNoKHN0ZGVycik7CisKKyAgICAgIGRlZmF1bHQ6IC8qIHBhcmVudCAqLworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgZ2V0dGV4dCgiZXhlY3V0aW5nIFwiJXNcIiAoZnJvbSBcIiVzXCIpXG4iKSwgSU5JVF9OQU1FLCBJTklUX1BBVEgpOworICAgICAgICBmZmx1c2goc3RkZXJyKTsKKworICAgICAgZXhlY3V0ZUluaXQ6CisgICAgICAgIGV4ZWN2KElOSVRfUEFUSCwgYXJndik7CisgICAgICAgIC8qIGV4ZWN2KCkgc2hvdWxkbid0IHJldHVybiAqLworCisgICAgICAgIGZwcmludGYoc3RkZXJyLCBnZXR0ZXh0KCJleGVjdXRpb24gb2YgXCIlc1wiIGZhaWxlZDogJXNcbiIpLCBJTklUX05BTUUsIHN0cmVycm9yKGVycm5vKSk7CisgICAgICAgIGZmbHVzaChzdGRlcnIpOworICAgICAgICBleGl0KDEpOworCisgICAgICBjYXNlIDA6IHsgLyogY2hpbGQgKi8KKyAgICAgICAgc3RhdGljIGNoYXIgKmFyZ3VtZW50c1tdID0geyJicmx0dHkiLCAiLUUiLCAiLW4iLCAiLWUiLCAiLWxpbmZvIiwgTlVMTH07CisgICAgICAgIGFyZ3YgPSBhcmd1bWVudHM7CisgICAgICAgIGFyZ2MgPSBBUlJBWV9DT1VOVChhcmd1bWVudHMpIC0gMTsKKyAgICAgICAgYnJlYWs7CisgICAgICB9CisgICAgfQorICB9IGVsc2UgaWYgKCFzdHJzdHIoYXJndlswXSwgImJybHR0eSIpKSB7CisgICAgLyogCisgICAgICogSWYgd2UgYXJlIHN1YnN0aXR1dGluZyB0aGUgcmVhbCBpbml0IGJpbmFyeSwgdGhlbiB3ZSBtYXkgY29uc2lkZXIKKyAgICAgKiB3aGVuIHNvbWVvbmUgbWlnaHQgd2FudCB0byBjYWxsIHRoYXQgYmluYXJ5IGV2ZW4gd2hlbiBwaWQgIT0gMS4KKyAgICAgKiBPbmUgZXhhbXBsZSBpcyAvc2Jpbi90ZWxpbml0IHdoaWNoIGlzIGEgc3ltbGluayB0byAvc2Jpbi9pbml0LgorICAgICAqLworICAgIGdvdG8gZXhlY3V0ZUluaXQ7CisgIH0KKyNlbmRpZiAvKiBJTklUX1BBVEggKi8KKworI2lmZGVmIFNUREVSUl9QQVRICisgIGZyZW9wZW4oU1RERVJSX1BBVEgsICJhIiwgc3RkZXJyKTsKKyNlbmRpZiAvKiBTVERFUlJfUEFUSCAqLworCisgIHsKKyAgICBQcm9ncmFtRXhpdFN0YXR1cyBleGl0U3RhdHVzID0gYnJsdHR5Q29uc3RydWN0KGFyZ2MsIGFyZ3YpOworCisgICAgaWYgKGV4aXRTdGF0dXMgPT0gUFJPR19FWElUX1NVQ0NFU1MpIHsKKyAgICAgIGV4aXRTdGF0dXMgPSBicmx0dHlSdW4oKTsKKyAgICAgIGJybHR0eURlc3RydWN0KCk7CisgICAgfSBlbHNlIGlmIChleGl0U3RhdHVzID09IFBST0dfRVhJVF9GT1JDRSkgeworICAgICAgZXhpdFN0YXR1cyA9IFBST0dfRVhJVF9TVUNDRVNTOworICAgIH0KKworICAgIHJldHVybiBleGl0U3RhdHVzOworICB9Cit9CmRpZmYgLS1naXQgYS9Qcm9ncmFtcy9icmx0dHkuamF2YSBiL1Byb2dyYW1zL2JybHR0eS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM3OTU4NzIKLS0tIC9kZXYvbnVsbAorKysgYi9Qcm9ncmFtcy9icmx0dHkuamF2YQpAQCAtMCwwICsxLDU3IEBACisvKgorICogQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyAqICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyAqCisgKiBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorICoKKyAqIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyAqCisgKiBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisgKi8KKworLy8gcGFja2FnZSBvcmcuYTExeS5CUkxUVFk7CisKK3B1YmxpYyBjbGFzcyBicmx0dHkgeworICBwdWJsaWMgZW51bSBQcm9ncmFtRXhpdFN0YXR1cyB7CisgICAgU1VDQ0VTUyAgKDApLAorICAgIEZPUkNFICAgICgxKSwKKyAgICBTWU5UQVggICAoMiksCisgICAgU0VNQU5USUMgKDMpLAorICAgIEZBVEFMICAgICg0KTsKKworICAgIHB1YmxpYyBmaW5hbCBpbnQgdmFsdWU7CisKKyAgICBQcm9ncmFtRXhpdFN0YXR1cyAoaW50IHZhbHVlKSB7CisgICAgICB0aGlzLnZhbHVlID0gdmFsdWU7CisgICAgfQorICB9CisKKyAgcHVibGljIHN0YXRpYyBuYXRpdmUgaW50IGNvbnN0cnVjdCAoU3RyaW5nW10gYXJndW1lbnRzKTsKKyAgcHVibGljIHN0YXRpYyBuYXRpdmUgYm9vbGVhbiB1cGRhdGUgKCk7CisgIHB1YmxpYyBzdGF0aWMgbmF0aXZlIHZvaWQgZGVzdHJ1Y3QgKCk7CisKKyAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4gKFN0cmluZ1tdIGFyZ3VtZW50cykgeworICAgIGludCBleGl0U3RhdHVzID0gY29uc3RydWN0KGFyZ3VtZW50cyk7CisKKyAgICBpZiAoZXhpdFN0YXR1cyA9PSBQcm9ncmFtRXhpdFN0YXR1cy5TVUNDRVNTLnZhbHVlKSB7CisgICAgICB3aGlsZSAodXBkYXRlKCkpIHsKKyAgICAgIH0KKyAgICB9IGVsc2UgaWYgKGV4aXRTdGF0dXMgPT0gUHJvZ3JhbUV4aXRTdGF0dXMuRk9SQ0UudmFsdWUpIHsKKyAgICAgIGV4aXRTdGF0dXMgPSBQcm9ncmFtRXhpdFN0YXR1cy5TVUNDRVNTLnZhbHVlOworICAgIH0KKworICAgIGRlc3RydWN0KCk7CisgICAgU3lzdGVtLmV4aXQoZXhpdFN0YXR1cyk7CisgIH0KKworICBzdGF0aWMgeworICAgIFN5c3RlbS5sb2FkTGlicmFyeSgiYnJsdHR5X2puaSIpOworICB9Cit9CmRpZmYgLS1naXQgYS9Qcm9ncmFtcy9icmx0dHlfam5pLmMgYi9Qcm9ncmFtcy9icmx0dHlfam5pLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjEwNTQxMgotLS0gL2Rldi9udWxsCisrKyBiL1Byb2dyYW1zL2JybHR0eV9qbmkuYwpAQCAtMCwwICsxLDUwMyBAQAorLyoKKyAqIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisgKiAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisgKgorICogQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKKyNpbmNsdWRlICJwcm9sb2d1ZS5oIgorCisjaW5jbHVkZSA8am5pLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRhcmcuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPGRsZmNuLmg+CisKKyNpbmNsdWRlICJlbWJlZC5oIgorI2luY2x1ZGUgInN5c3RlbV9qYXZhLmgiCisKKyNpZiBkZWZpbmVkKF9fQU5EUk9JRF9fKQorI2luY2x1ZGUgPGFuZHJvaWQvbG9nLmg+CisjZGVmaW5lIExPRyguLi4pIF9fYW5kcm9pZF9sb2dfcHJpbnQoQU5EUk9JRF9MT0dfREVCVUcsIFBBQ0tBR0VfVEFSTkFNRSwgX19WQV9BUkdTX18pCisKKyNlbHNlIC8qIExPRygpICovCisjd2FybmluZyBsb2dnaW5nIG5vdCBzdXBwb3J0ZWQKKyNkZWZpbmUgTE9HKC4uLikKKyNlbmRpZiAvKiBMT0coKSAqLworCitTWU1CT0xfUE9JTlRFUihicmx0dHlDb25zdHJ1Y3QpOworU1lNQk9MX1BPSU5URVIoc2V0SmF2YUNsYXNzTG9hZGVyKTsKK1NZTUJPTF9QT0lOVEVSKGJybHR0eURlc3RydWN0KTsKKworU1lNQk9MX1BPSU5URVIoYnJsdHR5RW5hYmxlSW50ZXJydXB0KTsKK1NZTUJPTF9QT0lOVEVSKGJybHR0eURpc2FibGVJbnRlcnJ1cHQpOworCitTWU1CT0xfUE9JTlRFUihicmx0dHlJbnRlcnJ1cHQpOworU1lNQk9MX1BPSU5URVIoYnJsdHR5V2FpdCk7CisKK1NZTUJPTF9QT0lOVEVSKGNoYW5nZUxvZ0xldmVsKTsKK1NZTUJPTF9QT0lOVEVSKGNoYW5nZUxvZ0NhdGVnb3JpZXMpOworCitTWU1CT0xfUE9JTlRFUihjaGFuZ2VUZXh0VGFibGUpOworU1lNQk9MX1BPSU5URVIoY2hhbmdlQXR0cmlidXRlc1RhYmxlKTsKK1NZTUJPTF9QT0lOVEVSKGNoYW5nZUNvbnRyYWN0aW9uVGFibGUpOworU1lNQk9MX1BPSU5URVIoY2hhbmdlS2V5Ym9hcmRUYWJsZSk7CisKK1NZTUJPTF9QT0lOVEVSKHJlc3RhcnRCcmFpbGxlRHJpdmVyKTsKK1NZTUJPTF9QT0lOVEVSKGNoYW5nZUJyYWlsbGVEcml2ZXIpOworU1lNQk9MX1BPSU5URVIoY2hhbmdlQnJhaWxsZVBhcmFtZXRlcnMpOworU1lNQk9MX1BPSU5URVIoY2hhbmdlQnJhaWxsZURldmljZSk7CisKK1NZTUJPTF9QT0lOVEVSKHJlc3RhcnRTcGVlY2hEcml2ZXIpOworU1lNQk9MX1BPSU5URVIoY2hhbmdlU3BlZWNoRHJpdmVyKTsKK1NZTUJPTF9QT0lOVEVSKGNoYW5nZVNwZWVjaFBhcmFtZXRlcnMpOworCitTWU1CT0xfUE9JTlRFUihyZXN0YXJ0U2NyZWVuRHJpdmVyKTsKK1NZTUJPTF9QT0lOVEVSKGNoYW5nZVNjcmVlbkRyaXZlcik7CitTWU1CT0xfUE9JTlRFUihjaGFuZ2VTY3JlZW5QYXJhbWV0ZXJzKTsKKworU1lNQk9MX1BPSU5URVIoY2hhbmdlTWVzc2FnZUxvY2FsZSk7CitTWU1CT0xfUE9JTlRFUihzaG93TWVzc2FnZSk7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgY29uc3QgY2hhciAqbmFtZTsKKyAgdm9pZCAqcG9pbnRlcjsKK30gU3ltYm9sRW50cnk7CisKKyNkZWZpbmUgQkVHSU5fU1lNQk9MX1RBQkxFIHN0YXRpYyBjb25zdCBTeW1ib2xFbnRyeSBzeW1ib2xUYWJsZVtdID0geworI2RlZmluZSBFTkRfU1lNQk9MX1RBQkxFIHsubmFtZT1OVUxMfSB9OworI2RlZmluZSBTWU1CT0xfRU5UUlkoc3ltYm9sKSB7Lm5hbWU9I3N5bWJvbCwgLnBvaW50ZXI9JnN5bWJvbCMjX3B9CisKK0JFR0lOX1NZTUJPTF9UQUJMRQorICBTWU1CT0xfRU5UUlkoYnJsdHR5Q29uc3RydWN0KSwKKyAgU1lNQk9MX0VOVFJZKHNldEphdmFDbGFzc0xvYWRlciksCisgIFNZTUJPTF9FTlRSWShicmx0dHlEZXN0cnVjdCksCisKKyAgU1lNQk9MX0VOVFJZKGJybHR0eUVuYWJsZUludGVycnVwdCksCisgIFNZTUJPTF9FTlRSWShicmx0dHlEaXNhYmxlSW50ZXJydXB0KSwKKworICBTWU1CT0xfRU5UUlkoYnJsdHR5SW50ZXJydXB0KSwKKyAgU1lNQk9MX0VOVFJZKGJybHR0eVdhaXQpLAorCisgIFNZTUJPTF9FTlRSWShjaGFuZ2VMb2dMZXZlbCksCisgIFNZTUJPTF9FTlRSWShjaGFuZ2VMb2dDYXRlZ29yaWVzKSwKKworICBTWU1CT0xfRU5UUlkoY2hhbmdlVGV4dFRhYmxlKSwKKyAgU1lNQk9MX0VOVFJZKGNoYW5nZUF0dHJpYnV0ZXNUYWJsZSksCisgIFNZTUJPTF9FTlRSWShjaGFuZ2VDb250cmFjdGlvblRhYmxlKSwKKyAgU1lNQk9MX0VOVFJZKGNoYW5nZUtleWJvYXJkVGFibGUpLAorCisgIFNZTUJPTF9FTlRSWShyZXN0YXJ0QnJhaWxsZURyaXZlciksCisgIFNZTUJPTF9FTlRSWShjaGFuZ2VCcmFpbGxlRHJpdmVyKSwKKyAgU1lNQk9MX0VOVFJZKGNoYW5nZUJyYWlsbGVQYXJhbWV0ZXJzKSwKKyAgU1lNQk9MX0VOVFJZKGNoYW5nZUJyYWlsbGVEZXZpY2UpLAorCisgIFNZTUJPTF9FTlRSWShyZXN0YXJ0U3BlZWNoRHJpdmVyKSwKKyAgU1lNQk9MX0VOVFJZKGNoYW5nZVNwZWVjaERyaXZlciksCisgIFNZTUJPTF9FTlRSWShjaGFuZ2VTcGVlY2hQYXJhbWV0ZXJzKSwKKworICBTWU1CT0xfRU5UUlkocmVzdGFydFNjcmVlbkRyaXZlciksCisgIFNZTUJPTF9FTlRSWShjaGFuZ2VTY3JlZW5Ecml2ZXIpLAorICBTWU1CT0xfRU5UUlkoY2hhbmdlU2NyZWVuUGFyYW1ldGVycyksCisKKyAgU1lNQk9MX0VOVFJZKGNoYW5nZU1lc3NhZ2VMb2NhbGUpLAorICBTWU1CT0xfRU5UUlkoc2hvd01lc3NhZ2UpLAorRU5EX1NZTUJPTF9UQUJMRQorCitzdGF0aWMgdm9pZCAqY29yZUhhbmRsZSA9IE5VTEw7CisKK3N0YXRpYyBqb2JqZWN0IGpBcmd1bWVudEFycmF5ID0gTlVMTDsKK3N0YXRpYyBjb25zdCBjaGFyICoqY0FyZ3VtZW50QXJyYXkgPSBOVUxMOworc3RhdGljIGludCBjQXJndW1lbnRDb3VudDsKKworc3RhdGljIHZvaWQgcmVwb3J0UHJvYmxlbSAoCisgIEpOSUVudiAqZW52LCBjb25zdCBjaGFyICp0aHJvd2FibGUsCisgIGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uCispIFBSSU5URigzLCA0KTsKKworc3RhdGljIHZvaWQKK3JlcG9ydFByb2JsZW0gKAorICBKTklFbnYgKmVudiwgY29uc3QgY2hhciAqdGhyb3dhYmxlLAorICBjb25zdCBjaGFyICpmb3JtYXQsIC4uLgorKSB7CisgIGNoYXIgbWVzc2FnZVswWDEwMF07CisKKyAgeworICAgIHZhX2xpc3QgYXJndW1lbnRzOworCisgICAgdmFfc3RhcnQoYXJndW1lbnRzLCBmb3JtYXQpOworICAgIHZzbnByaW50ZihtZXNzYWdlLCBzaXplb2YobWVzc2FnZSksIGZvcm1hdCwgYXJndW1lbnRzKTsKKyAgICB2YV9lbmQoYXJndW1lbnRzKTsKKyAgfQorCisgIGlmICgwKSB7CisgICAgRklMRSAqc3RyZWFtID0gc3RkZXJyOworCisgICAgZnByaW50ZihzdHJlYW0sICIlc1xuIiwgbWVzc2FnZSk7CisgICAgZmZsdXNoKHN0cmVhbSk7CisgIH0KKworICB7CisgICAgamNsYXNzIG9iamVjdCA9ICgqZW52KS0+RmluZENsYXNzKGVudiwgdGhyb3dhYmxlKTsKKworICAgIGlmIChvYmplY3QpIHsKKyAgICAgICgqZW52KS0+VGhyb3dOZXcoZW52LCBvYmplY3QsIG1lc3NhZ2UpOworICAgICAgKCplbnYpLT5EZWxldGVMb2NhbFJlZihlbnYsIG9iamVjdCk7CisgICAgfQorICB9Cit9CisKK3N0YXRpYyB2b2lkCityZXBvcnRPdXRPZk1lbW9yeSAoSk5JRW52ICplbnYsIGNvbnN0IGNoYXIgKmRlc2NyaXB0aW9uKSB7CisgIHJlcG9ydFByb2JsZW0oZW52LCBKQVZBX09CSl9PVVRfT0ZfTUVNT1JZX0VSUk9SLCAiY2Fubm90IGFsbG9jYXRlICVzIiwgZGVzY3JpcHRpb24pOworfQorCitzdGF0aWMgaW50CitwcmVwYXJlUHJvZ3JhbUFyZ3VtZW50cyAoSk5JRW52ICplbnYsIGpzdHJpbmcgYXJndW1lbnRzKSB7CisgIGpzaXplIGNvdW50ID0gKCplbnYpLT5HZXRBcnJheUxlbmd0aChlbnYsIGFyZ3VtZW50cyk7CisKKyAgaWYgKChqQXJndW1lbnRBcnJheSA9ICgqZW52KS0+TmV3R2xvYmFsUmVmKGVudiwgYXJndW1lbnRzKSkpIHsKKyAgICBpZiAoKGNBcmd1bWVudEFycmF5ID0gbWFsbG9jKChjb3VudCArIDIpICogc2l6ZW9mKCpjQXJndW1lbnRBcnJheSkpKSkgeworICAgICAgY0FyZ3VtZW50QXJyYXlbMF0gPSBQQUNLQUdFX1RBUk5BTUU7CisgICAgICBjQXJndW1lbnRBcnJheVtjb3VudCsxXSA9IE5VTEw7CisKKyAgICAgIHsKKyAgICAgICAgdW5zaWduZWQgaW50IGk7CisKKyAgICAgICAgZm9yIChpPTE7IGk8PWNvdW50OyBpKz0xKSBjQXJndW1lbnRBcnJheVtpXSA9IE5VTEw7CisKKyAgICAgICAgZm9yIChpPTE7IGk8PWNvdW50OyBpKz0xKSB7CisgICAgICAgICAganN0cmluZyBqQXJndW1lbnQgPSAoKmVudiktPkdldE9iamVjdEFycmF5RWxlbWVudChlbnYsIGFyZ3VtZW50cywgaS0xKTsKKyAgICAgICAgICBqYm9vbGVhbiBpc0NvcHk7CisgICAgICAgICAgY29uc3QgY2hhciAqY0FyZ3VtZW50ID0gKCplbnYpLT5HZXRTdHJpbmdVVEZDaGFycyhlbnYsIGpBcmd1bWVudCwgJmlzQ29weSk7CisKKyAgICAgICAgICAoKmVudiktPkRlbGV0ZUxvY2FsUmVmKGVudiwgakFyZ3VtZW50KTsKKyAgICAgICAgICBqQXJndW1lbnQgPSBOVUxMOworCisgICAgICAgICAgaWYgKCFjQXJndW1lbnQpIHsKKyAgICAgICAgICAgIHJlcG9ydE91dE9mTWVtb3J5KGVudiwgIkMgYXJndW1lbnQgc3RyaW5nIik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICB9CisKKyAgICAgICAgICBjQXJndW1lbnRBcnJheVtpXSA9IGNBcmd1bWVudDsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChpID4gY291bnQpIHsKKyAgICAgICAgICBjQXJndW1lbnRDb3VudCA9IGNvdW50ICsgMTsKKyAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgfQorICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICByZXBvcnRPdXRPZk1lbW9yeShlbnYsICJDIGFyZ3VtZW50IGFycmF5Iik7CisgICAgfQorICB9IGVsc2UgeworICAgIHJlcG9ydE91dE9mTWVtb3J5KGVudiwgIkphdmEgYXJndW1lbnRzIGFycmF5IGdsb2JhbCByZWZlcmVuY2UiKTsKKyAgfQorCisgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50Citsb2FkQ29yZUxpYnJhcnkgKEpOSUVudiAqZW52KSB7CisgIGlmIChjb3JlSGFuZGxlKSByZXR1cm4gMTsKKworICBpZiAoKGNvcmVIYW5kbGUgPSBkbG9wZW4oImxpYmJybHR0eV9jb3JlLnNvIiwgUlRMRF9OT1cgfCBSVExEX0dMT0JBTCkpKSB7CisgICAgaW50IGFsbEZvdW5kID0gMTsKKyAgICBjb25zdCBTeW1ib2xFbnRyeSAqc3ltYm9sID0gc3ltYm9sVGFibGU7CisKKyAgICB3aGlsZSAoc3ltYm9sLT5uYW1lKSB7CisgICAgICBjb25zdCB2b2lkICoqcG9pbnRlciA9IHN5bWJvbC0+cG9pbnRlcjsKKworICAgICAgaWYgKCgqcG9pbnRlciA9IGRsc3ltKGNvcmVIYW5kbGUsIHN5bWJvbC0+bmFtZSkpKSB7CisgICAgICAgIExPRygiY29yZSBzeW1ib2w6ICVzIC0+ICVwIiwgc3ltYm9sLT5uYW1lLCAqcG9pbnRlcik7CisgICAgICB9IGVsc2UgeworICAgICAgICBMT0coImNvcmUgc3ltYm9sIG5vdCBmb3VuZDogJXMiLCBzeW1ib2wtPm5hbWUpOworICAgICAgICBhbGxGb3VuZCA9IDA7CisgICAgICB9CisKKyAgICAgIHN5bWJvbCArPSAxOworICAgIH0KKworICAgIGlmIChhbGxGb3VuZCkgcmV0dXJuIDE7CisgIH0KKworICByZXBvcnRQcm9ibGVtKGVudiwgSkFWQV9PQkpfVU5TQVRJU0ZJRURfTElOS19FUlJPUiwgIiVzIiwgZGxlcnJvcigpKTsKKyAgcmV0dXJuIDA7Cit9CisKK0pBVkFfU1RBVElDX01FVEhPRCAoCisgIG9yZ19hMTF5X2JybHR0eV9jb3JlX0NvcmVXcmFwcGVyLCBjb3JlQ29uc3RydWN0LCBqaW50LAorICBqb2JqZWN0QXJyYXkgYXJndW1lbnRzLCBqb2JqZWN0IGNsYXNzTG9hZGVyCispIHsKKyAgaWYgKHByZXBhcmVQcm9ncmFtQXJndW1lbnRzKGVudiwgYXJndW1lbnRzKSkgeworICAgIGlmIChsb2FkQ29yZUxpYnJhcnkoZW52KSkgeworICAgICAgc2V0SmF2YUNsYXNzTG9hZGVyX3AoZW52LCBjbGFzc0xvYWRlcik7CisgICAgICByZXR1cm4gYnJsdHR5Q29uc3RydWN0X3AoY0FyZ3VtZW50Q291bnQsIChjaGFyICoqKWNBcmd1bWVudEFycmF5KTsKKyAgICB9CisgIH0KKworICByZXR1cm4gUFJPR19FWElUX0ZBVEFMOworfQorCitKQVZBX1NUQVRJQ19NRVRIT0QgKAorICBvcmdfYTExeV9icmx0dHlfY29yZV9Db3JlV3JhcHBlciwgY29yZURlc3RydWN0LCBqYm9vbGVhbgorKSB7CisgIGpib29sZWFuIHJlc3VsdCA9IGJybHR0eURlc3RydWN0X3AoKT8gSk5JX1RSVUU6IEpOSV9GQUxTRTsKKworLyoKKyAgeworICAgIGNvbnN0IFN5bWJvbEVudHJ5ICpzeW1ib2wgPSBzeW1ib2xUYWJsZTsKKworICAgIHdoaWxlIChzeW1ib2wtPm5hbWUpIHsKKyAgICAgIGNvbnN0IHZvaWQgKipwb2ludGVyID0gc3ltYm9sLT5wb2ludGVyOworICAgICAgKnBvaW50ZXIgPSBOVUxMOworICAgICAgc3ltYm9sICs9IDE7CisgICAgfQorICB9CisKKyAgaWYgKGNvcmVIYW5kbGUpIHsKKyAgICBkbGNsb3NlKGNvcmVIYW5kbGUpOworICAgIGNvcmVIYW5kbGUgPSBOVUxMOworICB9CisqLworCisgIGlmIChqQXJndW1lbnRBcnJheSkgeworICAgIGlmIChjQXJndW1lbnRBcnJheSkgeworICAgICAgdW5zaWduZWQgaW50IGkgPSAwOworCisgICAgICB3aGlsZSAoY0FyZ3VtZW50QXJyYXlbKytpXSkgeworICAgICAgICBqc3RyaW5nIGpBcmd1bWVudCA9ICgqZW52KS0+R2V0T2JqZWN0QXJyYXlFbGVtZW50KGVudiwgakFyZ3VtZW50QXJyYXksIGktMSk7CisgICAgICAgICgqZW52KS0+UmVsZWFzZVN0cmluZ1VURkNoYXJzKGVudiwgakFyZ3VtZW50LCBjQXJndW1lbnRBcnJheVtpXSk7CisgICAgICAgICgqZW52KS0+RGVsZXRlTG9jYWxSZWYoZW52LCBqQXJndW1lbnQpOworICAgICAgICBqQXJndW1lbnQgPSBOVUxMOworICAgICAgfQorCisgICAgICBmcmVlKGNBcmd1bWVudEFycmF5KTsKKyAgICAgIGNBcmd1bWVudEFycmF5ID0gTlVMTDsKKyAgICB9CisKKyAgICAoKmVudiktPkRlbGV0ZUdsb2JhbFJlZihlbnYsIGpBcmd1bWVudEFycmF5KTsKKyAgICBqQXJndW1lbnRBcnJheSA9IE5VTEw7CisgIH0KKworICByZXR1cm4gcmVzdWx0OworfQorCitKQVZBX1NUQVRJQ19NRVRIT0QgKAorICBvcmdfYTExeV9icmx0dHlfY29yZV9Db3JlV3JhcHBlciwgY29yZUVuYWJsZUludGVycnVwdCwgamJvb2xlYW4KKykgeworICByZXR1cm4gYnJsdHR5RW5hYmxlSW50ZXJydXB0X3AoKT8gSk5JX1RSVUU6IEpOSV9GQUxTRTsKK30KKworSkFWQV9TVEFUSUNfTUVUSE9EICgKKyAgb3JnX2ExMXlfYnJsdHR5X2NvcmVfQ29yZVdyYXBwZXIsIGNvcmVEaXNhYmxlSW50ZXJydXB0LCBqYm9vbGVhbgorKSB7CisgIHJldHVybiBicmx0dHlEaXNhYmxlSW50ZXJydXB0X3AoKT8gSk5JX1RSVUU6IEpOSV9GQUxTRTsKK30KKworSkFWQV9TVEFUSUNfTUVUSE9EICgKKyAgb3JnX2ExMXlfYnJsdHR5X2NvcmVfQ29yZVdyYXBwZXIsIGNvcmVJbnRlcnJ1cHQsIGpib29sZWFuLAorICBqYm9vbGVhbiBzdG9wCispIHsKKyAgcmV0dXJuIGJybHR0eUludGVycnVwdF9wKChzdG9wICE9IEpOSV9GQUxTRSk/IFdBSVRfU1RPUDogV0FJVF9DT05USU5VRSk/IEpOSV9UUlVFOiBKTklfRkFMU0U7Cit9CisKK0pBVkFfU1RBVElDX01FVEhPRCAoCisgIG9yZ19hMTF5X2JybHR0eV9jb3JlX0NvcmVXcmFwcGVyLCBjb3JlV2FpdCwgamJvb2xlYW4sCisgIGppbnQgZHVyYXRpb24KKykgeworICByZXR1cm4gKGJybHR0eVdhaXRfcChkdXJhdGlvbikgIT0gV0FJVF9TVE9QKT8gSk5JX1RSVUU6IEpOSV9GQUxTRTsKK30KKworc3RhdGljIGpib29sZWFuCitjaGFuZ2VTdHJpbmdWYWx1ZSAoSk5JRW52ICplbnYsIGludCAoKmNoYW5nZSkgKGNvbnN0IGNoYXIgKmNWYWx1ZSksIGpzdHJpbmcgalZhbHVlKSB7CisgIGpib29sZWFuIHJlc3VsdCA9IEpOSV9GQUxTRTsKKyAgY29uc3QgY2hhciAqY1ZhbHVlID0gKCplbnYpLT5HZXRTdHJpbmdVVEZDaGFycyhlbnYsIGpWYWx1ZSwgTlVMTCk7CisKKyAgaWYgKGNWYWx1ZSkgeworICAgIGlmIChjaGFuZ2UoY1ZhbHVlKSkgcmVzdWx0ID0gSk5JX1RSVUU7CisgICAgKCplbnYpLT5SZWxlYXNlU3RyaW5nVVRGQ2hhcnMoZW52LCBqVmFsdWUsIGNWYWx1ZSk7CisgIH0gZWxzZSB7CisgICAgcmVwb3J0T3V0T2ZNZW1vcnkoZW52LCAiQyBuZXcgdmFsdWUgc3RyaW5nIik7CisgIH0KKworICByZXR1cm4gcmVzdWx0OworfQorCitKQVZBX1NUQVRJQ19NRVRIT0QgKAorICBvcmdfYTExeV9icmx0dHlfY29yZV9Db3JlV3JhcHBlciwgY2hhbmdlTG9nTGV2ZWwsIGpib29sZWFuLAorICBqc3RyaW5nIGxldmVsCispIHsKKyAgcmV0dXJuIGNoYW5nZVN0cmluZ1ZhbHVlKGVudiwgY2hhbmdlTG9nTGV2ZWxfcCwgbGV2ZWwpOworfQorCitKQVZBX1NUQVRJQ19NRVRIT0QgKAorICBvcmdfYTExeV9icmx0dHlfY29yZV9Db3JlV3JhcHBlciwgY2hhbmdlTG9nQ2F0ZWdvcmllcywgamJvb2xlYW4sCisgIGpzdHJpbmcgY2F0ZWdvcmllcworKSB7CisgIHJldHVybiBjaGFuZ2VTdHJpbmdWYWx1ZShlbnYsIGNoYW5nZUxvZ0NhdGVnb3JpZXNfcCwgY2F0ZWdvcmllcyk7Cit9CisKK0pBVkFfU1RBVElDX01FVEhPRCAoCisgIG9yZ19hMTF5X2JybHR0eV9jb3JlX0NvcmVXcmFwcGVyLCBjaGFuZ2VUZXh0VGFibGUsIGpib29sZWFuLAorICBqc3RyaW5nIG5hbWUKKykgeworICByZXR1cm4gY2hhbmdlU3RyaW5nVmFsdWUoZW52LCBjaGFuZ2VUZXh0VGFibGVfcCwgbmFtZSk7Cit9CisKK0pBVkFfU1RBVElDX01FVEhPRCAoCisgIG9yZ19hMTF5X2JybHR0eV9jb3JlX0NvcmVXcmFwcGVyLCBjaGFuZ2VBdHRyaWJ1dGVzVGFibGUsIGpib29sZWFuLAorICBqc3RyaW5nIG5hbWUKKykgeworICByZXR1cm4gY2hhbmdlU3RyaW5nVmFsdWUoZW52LCBjaGFuZ2VBdHRyaWJ1dGVzVGFibGVfcCwgbmFtZSk7Cit9CisKK0pBVkFfU1RBVElDX01FVEhPRCAoCisgIG9yZ19hMTF5X2JybHR0eV9jb3JlX0NvcmVXcmFwcGVyLCBjaGFuZ2VDb250cmFjdGlvblRhYmxlLCBqYm9vbGVhbiwKKyAganN0cmluZyBuYW1lCispIHsKKyAgcmV0dXJuIGNoYW5nZVN0cmluZ1ZhbHVlKGVudiwgY2hhbmdlQ29udHJhY3Rpb25UYWJsZV9wLCBuYW1lKTsKK30KKworSkFWQV9TVEFUSUNfTUVUSE9EICgKKyAgb3JnX2ExMXlfYnJsdHR5X2NvcmVfQ29yZVdyYXBwZXIsIGNoYW5nZUtleWJvYXJkVGFibGUsIGpib29sZWFuLAorICBqc3RyaW5nIG5hbWUKKykgeworICByZXR1cm4gY2hhbmdlU3RyaW5nVmFsdWUoZW52LCBjaGFuZ2VLZXlib2FyZFRhYmxlX3AsIG5hbWUpOworfQorCitKQVZBX1NUQVRJQ19NRVRIT0QgKAorICBvcmdfYTExeV9icmx0dHlfY29yZV9Db3JlV3JhcHBlciwgcmVzdGFydEJyYWlsbGVEcml2ZXIsIGpib29sZWFuCispIHsKKyAgcmVzdGFydEJyYWlsbGVEcml2ZXJfcCgpOworICByZXR1cm4gSk5JX1RSVUU7Cit9CisKK0pBVkFfU1RBVElDX01FVEhPRCAoCisgIG9yZ19hMTF5X2JybHR0eV9jb3JlX0NvcmVXcmFwcGVyLCBjaGFuZ2VCcmFpbGxlRHJpdmVyLCBqYm9vbGVhbiwKKyAganN0cmluZyBkcml2ZXIKKykgeworICByZXR1cm4gY2hhbmdlU3RyaW5nVmFsdWUoZW52LCBjaGFuZ2VCcmFpbGxlRHJpdmVyX3AsIGRyaXZlcik7Cit9CisKK0pBVkFfU1RBVElDX01FVEhPRCAoCisgIG9yZ19hMTF5X2JybHR0eV9jb3JlX0NvcmVXcmFwcGVyLCBjaGFuZ2VCcmFpbGxlUGFyYW1ldGVycywgamJvb2xlYW4sCisgIGpzdHJpbmcgcGFyYW1ldGVycworKSB7CisgIHJldHVybiBjaGFuZ2VTdHJpbmdWYWx1ZShlbnYsIGNoYW5nZUJyYWlsbGVQYXJhbWV0ZXJzX3AsIHBhcmFtZXRlcnMpOworfQorCitKQVZBX1NUQVRJQ19NRVRIT0QgKAorICBvcmdfYTExeV9icmx0dHlfY29yZV9Db3JlV3JhcHBlciwgY2hhbmdlQnJhaWxsZURldmljZSwgamJvb2xlYW4sCisgIGpzdHJpbmcgZGV2aWNlCispIHsKKyAgcmV0dXJuIGNoYW5nZVN0cmluZ1ZhbHVlKGVudiwgY2hhbmdlQnJhaWxsZURldmljZV9wLCBkZXZpY2UpOworfQorCitKQVZBX1NUQVRJQ19NRVRIT0QgKAorICBvcmdfYTExeV9icmx0dHlfY29yZV9Db3JlV3JhcHBlciwgcmVzdGFydFNwZWVjaERyaXZlciwgamJvb2xlYW4KKykgeworICByZXN0YXJ0U3BlZWNoRHJpdmVyX3AoKTsKKyAgcmV0dXJuIEpOSV9UUlVFOworfQorCitKQVZBX1NUQVRJQ19NRVRIT0QgKAorICBvcmdfYTExeV9icmx0dHlfY29yZV9Db3JlV3JhcHBlciwgY2hhbmdlU3BlZWNoRHJpdmVyLCBqYm9vbGVhbiwKKyAganN0cmluZyBkcml2ZXIKKykgeworICByZXR1cm4gY2hhbmdlU3RyaW5nVmFsdWUoZW52LCBjaGFuZ2VTcGVlY2hEcml2ZXJfcCwgZHJpdmVyKTsKK30KKworSkFWQV9TVEFUSUNfTUVUSE9EICgKKyAgb3JnX2ExMXlfYnJsdHR5X2NvcmVfQ29yZVdyYXBwZXIsIGNoYW5nZVNwZWVjaFBhcmFtZXRlcnMsIGpib29sZWFuLAorICBqc3RyaW5nIHBhcmFtZXRlcnMKKykgeworICByZXR1cm4gY2hhbmdlU3RyaW5nVmFsdWUoZW52LCBjaGFuZ2VTcGVlY2hQYXJhbWV0ZXJzX3AsIHBhcmFtZXRlcnMpOworfQorCitKQVZBX1NUQVRJQ19NRVRIT0QgKAorICBvcmdfYTExeV9icmx0dHlfY29yZV9Db3JlV3JhcHBlciwgcmVzdGFydFNjcmVlbkRyaXZlciwgamJvb2xlYW4KKykgeworICByZXN0YXJ0U2NyZWVuRHJpdmVyX3AoKTsKKyAgcmV0dXJuIEpOSV9UUlVFOworfQorCitKQVZBX1NUQVRJQ19NRVRIT0QgKAorICBvcmdfYTExeV9icmx0dHlfY29yZV9Db3JlV3JhcHBlciwgY2hhbmdlU2NyZWVuRHJpdmVyLCBqYm9vbGVhbiwKKyAganN0cmluZyBkcml2ZXIKKykgeworICByZXR1cm4gY2hhbmdlU3RyaW5nVmFsdWUoZW52LCBjaGFuZ2VTY3JlZW5Ecml2ZXJfcCwgZHJpdmVyKTsKK30KKworSkFWQV9TVEFUSUNfTUVUSE9EICgKKyAgb3JnX2ExMXlfYnJsdHR5X2NvcmVfQ29yZVdyYXBwZXIsIGNoYW5nZVNjcmVlblBhcmFtZXRlcnMsIGpib29sZWFuLAorICBqc3RyaW5nIHBhcmFtZXRlcnMKKykgeworICByZXR1cm4gY2hhbmdlU3RyaW5nVmFsdWUoZW52LCBjaGFuZ2VTY3JlZW5QYXJhbWV0ZXJzX3AsIHBhcmFtZXRlcnMpOworfQorCitKQVZBX1NUQVRJQ19NRVRIT0QgKAorICBvcmdfYTExeV9icmx0dHlfY29yZV9Db3JlV3JhcHBlciwgY2hhbmdlTWVzc2FnZUxvY2FsZSwgamJvb2xlYW4sCisgIGpzdHJpbmcgbG9jYWxlCispIHsKKyAgcmV0dXJuIGNoYW5nZVN0cmluZ1ZhbHVlKGVudiwgY2hhbmdlTWVzc2FnZUxvY2FsZV9wLCBsb2NhbGUpOworfQorCitKQVZBX1NUQVRJQ19NRVRIT0QgKAorICBvcmdfYTExeV9icmx0dHlfY29yZV9Db3JlV3JhcHBlciwgc2hvd01lc3NhZ2UsIHZvaWQsCisgIGpzdHJpbmcgak1lc3NhZ2UKKykgeworICBjb25zdCBjaGFyICpjTWVzc2FnZSA9ICgqZW52KS0+R2V0U3RyaW5nVVRGQ2hhcnMoZW52LCBqTWVzc2FnZSwgTlVMTCk7CisKKyAgaWYgKGNNZXNzYWdlKSB7CisgICAgc2hvd01lc3NhZ2VfcChjTWVzc2FnZSk7CisgICAgKCplbnYpLT5SZWxlYXNlU3RyaW5nVVRGQ2hhcnMoZW52LCBqTWVzc2FnZSwgY01lc3NhZ2UpOworICB9IGVsc2UgeworICAgIHJlcG9ydE91dE9mTWVtb3J5KGVudiwgIkMgbmV3IHZhbHVlIHN0cmluZyIpOworICB9Cit9CisKK0pBVkFfU1RBVElDX01FVEhPRCAoCisgIG9yZ19hMTF5X2JybHR0eV9jb3JlX0NvcmVXcmFwcGVyLCBzZXRFbnZpcm9ubWVudFZhcmlhYmxlLCBqYm9vbGVhbiwKKyAganN0cmluZyBqTmFtZSwganN0cmluZyBqVmFsdWUKKykgeworICBqYm9vbGVhbiBpc0NvcHk7CisgIGNvbnN0IGNoYXIgKmNOYW1lID0gKCplbnYpLT5HZXRTdHJpbmdVVEZDaGFycyhlbnYsIGpOYW1lLCAmaXNDb3B5KTsKKyAgY29uc3QgY2hhciAqY1ZhbHVlID0gKCplbnYpLT5HZXRTdHJpbmdVVEZDaGFycyhlbnYsIGpWYWx1ZSwgJmlzQ29weSk7CisKKyAgaW50IGNSZXN1bHQgPSBzZXRlbnYoY05hbWUsIGNWYWx1ZSwgMSkgIT0gLTE7CisgIGpib29sZWFuIGpSZXN1bHQgPSBjUmVzdWx0PyBKTklfVFJVRTogSk5JX0ZBTFNFOworCisgIGlmIChjUmVzdWx0KSB7CisgICAgTE9HKCJlbnZpcm9ubWVudCB2YXJpYWJsZSBzZXQ6ICVzOiAlcyIsIGNOYW1lLCBjVmFsdWUpOworICB9IGVsc2UgeworICAgIExPRygiZW52aXJvbm1lbnQgdmFyaWFibGUgbm90IHNldDogJXM6ICVzIiwgY05hbWUsIHN0cmVycm9yKGVycm5vKSk7CisgIH0KKworICAoKmVudiktPlJlbGVhc2VTdHJpbmdVVEZDaGFycyhlbnYsIGpOYW1lLCBjTmFtZSk7CisgICgqZW52KS0+UmVsZWFzZVN0cmluZ1VURkNoYXJzKGVudiwgalZhbHVlLCBjVmFsdWUpOworICByZXR1cm4galJlc3VsdDsKK30KKworSk5JRVhQT1JUIGppbnQKK0pOSV9PbkxvYWQgKEphdmFWTSAqdm0sIHZvaWQgKnJlc2VydmVkKSB7CisgIEpOSUVudiAqZW52OworCisgIGlmICgoKnZtKS0+R2V0RW52KHZtLCAodm9pZCAqKikmZW52LCBKQVZBX0pOSV9WRVJTSU9OKSA9PSBKTklfT0spIHsKKyAgICBsb2FkQ29yZUxpYnJhcnkoZW52KTsKKyAgfQorCisgIHJldHVybiBKQVZBX0pOSV9WRVJTSU9OOworfQpkaWZmIC0tZ2l0IGEvUHJvZ3JhbXMvY2hhcnNldC5jIGIvUHJvZ3JhbXMvY2hhcnNldC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNlNzU1NjQKLS0tIC9kZXYvbnVsbAorKysgYi9Qcm9ncmFtcy9jaGFyc2V0LmMKQEAgLTAsMCArMSwyMzYgQEAKKy8qCisgKiBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorICogICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorICoKKyAqIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorICoKKyAqIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyAqLworCisjaW5jbHVkZSAicHJvbG9ndWUuaCIKKworI2luY2x1ZGUgPHN0cmluZy5oPgorCisjaW5jbHVkZSAibG9nLmgiCisjaW5jbHVkZSAiY2hhcnNldF9pbnRlcm5hbC5oIgorI2luY2x1ZGUgImxvY2suaCIKKyNpbmNsdWRlICJmaWxlLmgiCisjaW5jbHVkZSAicHJvZ3JhbS5oIgorCitpbnQKK2lzQ2hhcnNldExhdGluMSAoY29uc3QgY2hhciAqbmFtZSkgeworICB7CisgICAgY29uc3QgY2hhciAqc3Vic3RyaW5nID0gImlzbyI7CisgICAgc2l6ZV90IGxlbmd0aCA9IHN0cmxlbihzdWJzdHJpbmcpOworICAgIGlmIChzdHJuY2FzZWNtcChuYW1lLCBzdWJzdHJpbmcsIGxlbmd0aCkgIT0gMCkgcmV0dXJuIDA7CisgICAgbmFtZSArPSBsZW5ndGg7CisgICAgaWYgKCgqbmFtZSA9PSAnLScpIHx8ICgqbmFtZSA9PSAnXycpKSBuYW1lICs9IDE7CisgIH0KKworICB7CisgICAgY29uc3QgY2hhciAqc3Vic3RyaW5nID0gIjg4NTkiOworICAgIHNpemVfdCBsZW5ndGggPSBzdHJsZW4oc3Vic3RyaW5nKTsKKyAgICBpZiAoc3RybmNtcChuYW1lLCBzdWJzdHJpbmcsIGxlbmd0aCkgIT0gMCkgcmV0dXJuIDA7CisgICAgbmFtZSArPSBsZW5ndGg7CisgICAgaWYgKCpuYW1lID09ICctJykgbmFtZSArPSAxOworICB9CisKKyAgcmV0dXJuIHN0cmNtcChuYW1lLCAiMSIpID09IDA7Cit9CisKKyNpZiBkZWZpbmVkKF9fTUlOR1czMl9fKQorI2luY2x1ZGUgInN5c3RlbV93aW5kb3dzLmgiCisKKyNlbGlmIGRlZmluZWQoX19BTkRST0lEX18pCisjaW5jbHVkZSAic3lzdGVtX2phdmEuaCIKKworI2Vsc2UgLyogdW5peCAqLworI2luY2x1ZGUgPGxvY2FsZS5oPgorI2VuZGlmIC8qIGxvY2FsZSBkZWZpbml0aW9ucyAqLworCitjb25zdCBjaGFyIGRlZmF1bHRDaGFyc2V0W10gPSAiSVNPLTg4NTktMSI7CisKK3N0YXRpYyBjaGFyICpjdXJyZW50Q2hhcnNldCA9IE5VTEw7CisKK2NoYXIgKgorZ2V0TG9jYWxlTmFtZSAodm9pZCkgeworI2lmIGRlZmluZWQoX19NSU5HVzMyX18pCisgIHJldHVybiBnZXRXaW5kb3dzTG9jYWxlTmFtZSgpOworCisjZWxpZiBkZWZpbmVkKF9fQU5EUk9JRF9fKQorICByZXR1cm4gZ2V0SmF2YUxvY2FsZU5hbWUoKTsKKworI2Vsc2UgLyogdW5peCAqLworICBjaGFyICpuYW1lID0gc2V0bG9jYWxlKExDX0NUWVBFLCBOVUxMKTsKKworICBpZiAobmFtZSkgeworICAgIGlmICghKG5hbWUgPSBzdHJkdXAobmFtZSkpKSB7CisgICAgICBsb2dNYWxsb2NFcnJvcigpOworICAgIH0KKyAgfQorCisgIHJldHVybiBuYW1lOworI2VuZGlmIC8qIHRleHQgdGFibGUgbG9jYWxlICovCit9CisKK2ludAoraXNQb3NpeExvY2FsZSAoY29uc3QgY2hhciAqbG9jYWxlKSB7CisgIGlmIChzdHJjbXAobG9jYWxlLCAiQyIpID09IDApIHJldHVybiAxOworICBpZiAoc3RyY21wKGxvY2FsZSwgIlBPU0lYIikgPT0gMCkgcmV0dXJuIDE7CisgIHJldHVybiAwOworfQorCitzaXplX3QKK2NvbnZlcnRDaGFyVG9VdGY4IChjaGFyIGMsIFV0ZjhCdWZmZXIgdXRmOCkgeworICB3aW50X3Qgd2MgPSBjb252ZXJ0Q2hhclRvV2NoYXIoYyk7CisgIGlmICh3YyA9PSBXRU9GKSByZXR1cm4gMDsKKyAgcmV0dXJuIGNvbnZlcnRXY2hhclRvVXRmOCh3YywgdXRmOCk7Cit9CisKK2ludAorY29udmVydFV0ZjhUb0NoYXIgKGNvbnN0IGNoYXIgKip1dGY4LCBzaXplX3QgKnV0ZnMpIHsKKyAgd2ludF90IHdjID0gY29udmVydFV0ZjhUb1djaGFyKHV0ZjgsIHV0ZnMpOworICBpZiAod2MgPT0gV0VPRikgcmV0dXJuIEVPRjsKKyAgcmV0dXJuIGNvbnZlcnRXY2hhclRvQ2hhcih3Yyk7Cit9CisKK2NvbnN0IGNoYXIgKgorZ2V0V2NoYXJDaGFyc2V0ICh2b2lkKSB7CisgIHN0YXRpYyBjb25zdCBjaGFyICp3Y2hhckNoYXJzZXQgPSBOVUxMOworCisgIGlmICghd2NoYXJDaGFyc2V0KSB7CisgICAgY2hhciBjaGFyc2V0WzBYMTBdOworCisgICAgc25wcmludGYoY2hhcnNldCwgc2l6ZW9mKGNoYXJzZXQpLCAiVUNTLSVsdSVjRSIsCisgICAgICAgICAgICAgKHVuc2lnbmVkIGxvbmcpc2l6ZW9mKHdjaGFyX3QpLAorI2lmZGVmIFdPUkRTX0JJR0VORElBTgorICAgICAgICAgICAgICdCJworI2Vsc2UgLyogV09SRFNfQklHRU5ESUFOICovCisgICAgICAgICAgICAgJ0wnCisjZW5kaWYgLyogV09SRFNfQklHRU5ESUFOICovCisgICAgICAgICAgICApOworCisgICAgaWYgKCh3Y2hhckNoYXJzZXQgPSBzdHJkdXAoY2hhcnNldCkpKSB7CisgICAgICByZWdpc3RlclByb2dyYW1NZW1vcnkoIndjaGFyLWNoYXJzZXQiLCAmd2NoYXJDaGFyc2V0KTsKKyAgICB9IGVsc2UgeworICAgICAgbG9nTWFsbG9jRXJyb3IoKTsKKyAgICB9CisgIH0KKworICByZXR1cm4gd2NoYXJDaGFyc2V0OworfQorCitjb25zdCBjaGFyICoKK3NldENoYXJzZXQgKGNvbnN0IGNoYXIgKm5hbWUpIHsKKyAgY2hhciAqY2hhcnNldDsKKworICBpZiAobmFtZSkgeworICAgIGlmIChjdXJyZW50Q2hhcnNldCAmJiAoc3RyY21wKGN1cnJlbnRDaGFyc2V0LCBuYW1lKSA9PSAwKSkgcmV0dXJuIGN1cnJlbnRDaGFyc2V0OworICB9IGVsc2UgaWYgKGN1cnJlbnRDaGFyc2V0KSB7CisgICAgcmV0dXJuIGN1cnJlbnRDaGFyc2V0OworICB9IGVsc2UgeworICAgIG5hbWUgPSBnZXRMb2NhbGVDaGFyc2V0KCk7CisgIH0KKworICBpZiAoIShjaGFyc2V0ID0gc3RyZHVwKG5hbWUpKSkgeworICAgIGxvZ01hbGxvY0Vycm9yKCk7CisgICAgcmV0dXJuIE5VTEw7CisgIH0KKworICBpZiAoIXJlZ2lzdGVyQ2hhcmFjdGVyU2V0KGNoYXJzZXQpKSB7CisgICAgZnJlZShjaGFyc2V0KTsKKyAgICByZXR1cm4gTlVMTDsKKyAgfQorCisgIGlmIChjdXJyZW50Q2hhcnNldCkgeworICAgIGZyZWUoY3VycmVudENoYXJzZXQpOworICB9IGVsc2UgeworICAgIHJlZ2lzdGVyUHJvZ3JhbU1lbW9yeSgiY3VycmVudC1jaGFyc2V0IiwgJmN1cnJlbnRDaGFyc2V0KTsKKyAgfQorCisgIHJldHVybiBjdXJyZW50Q2hhcnNldCA9IGNoYXJzZXQ7Cit9CisKK2NvbnN0IGNoYXIgKgorZ2V0Q2hhcnNldCAodm9pZCkgeworICByZXR1cm4gc2V0Q2hhcnNldChOVUxMKTsKK30KKworc3RhdGljIExvY2tEZXNjcmlwdG9yICoKK2dldENoYXJzZXRMb2NrICh2b2lkKSB7CisgIHN0YXRpYyBMb2NrRGVzY3JpcHRvciAqbG9jayA9IE5VTEw7CisKKyAgcmV0dXJuIGdldExvY2tEZXNjcmlwdG9yKCZsb2NrLCAiY2hhcnNldCIpOworfQorCitpbnQKK2xvY2tDaGFyc2V0IChMb2NrT3B0aW9ucyBvcHRpb25zKSB7CisgIExvY2tEZXNjcmlwdG9yICpsb2NrID0gZ2V0Q2hhcnNldExvY2soKTsKKyAgaWYgKCFsb2NrKSByZXR1cm4gMDsKKyAgcmV0dXJuIG9idGFpbkxvY2sobG9jaywgb3B0aW9ucyk7Cit9CisKK3ZvaWQKK3VubG9ja0NoYXJzZXQgKHZvaWQpIHsKKyAgTG9ja0Rlc2NyaXB0b3IgKmxvY2sgPSBnZXRDaGFyc2V0TG9jaygpOworICBpZiAobG9jaykgcmVsZWFzZUxvY2sobG9jayk7Cit9CisKK3N0YXRpYyBpbnQKK3Rlc3RGaWxlRXhpc3RzIChjb25zdCBjaGFyICpkaXJlY3RvcnksIGNoYXIgKm5hbWUsIFBhdGhNYWtlciAqcGF0aE1ha2VyKSB7CisgIGludCBleGlzdHMgPSAwOworICBjaGFyICpwYXRoOworCisgIGlmICgocGF0aCA9IHBhdGhNYWtlcihkaXJlY3RvcnksIG5hbWUpKSkgeworICAgIGlmICh0ZXN0RmlsZVBhdGgocGF0aCkpIGV4aXN0cyA9IDE7CisgICAgZnJlZShwYXRoKTsKKyAgfQorCisgIHJldHVybiBleGlzdHM7Cit9CisKK2NoYXIgKgorZ2V0RmlsZUZvckxvY2FsZSAoY29uc3QgY2hhciAqZGlyZWN0b3J5LCBQYXRoTWFrZXIgKnBhdGhNYWtlcikgeworICBjaGFyICpsb2NhbGUgPSBnZXRMb2NhbGVOYW1lKCk7CisKKyAgaWYgKGxvY2FsZSkgeworICAgIGNoYXIgbmFtZVtzdHJsZW4obG9jYWxlKSArIDFdOworCisgICAgeworICAgICAgc2l6ZV90IGxlbmd0aCA9IHN0cmNzcG4obG9jYWxlLCAiLkAiKTsKKyAgICAgIHN0cm5jcHkobmFtZSwgbG9jYWxlLCBsZW5ndGgpOworICAgICAgbmFtZVtsZW5ndGhdID0gMDsKKyAgICB9CisKKyAgICBmcmVlKGxvY2FsZSk7CisgICAgbG9jYWxlID0gTlVMTDsKKworICAgIGlmIChpc1Bvc2l4TG9jYWxlKG5hbWUpKSB7CisgICAgICBuYW1lWzBdID0gMDsKKyAgICB9IGVsc2UgaWYgKCF0ZXN0RmlsZUV4aXN0cyhkaXJlY3RvcnksIG5hbWUsIHBhdGhNYWtlcikpIHsKKyAgICAgIGNoYXIgKmRlbGltaXRlciA9IHN0cmNocihuYW1lLCAnXycpOworCisgICAgICBpZiAoZGVsaW1pdGVyKSB7CisgICAgICAgICpkZWxpbWl0ZXIgPSAwOworICAgICAgICBpZiAoIXRlc3RGaWxlRXhpc3RzKGRpcmVjdG9yeSwgbmFtZSwgcGF0aE1ha2VyKSkgbmFtZVswXSA9IDA7CisgICAgICB9CisgICAgfQorCisgICAgaWYgKG5hbWVbMF0pIHsKKyAgICAgIGNoYXIgKmZpbGUgPSBzdHJkdXAobmFtZSk7CisgICAgICBpZiAoZmlsZSkgcmV0dXJuIGZpbGU7CisgICAgICBsb2dNYWxsb2NFcnJvcigpOworICAgIH0KKyAgfQorCisgIHJldHVybiBOVUxMOworfQpkaWZmIC0tZ2l0IGEvUHJvZ3JhbXMvY2hhcnNldF9ncnViLmMgYi9Qcm9ncmFtcy9jaGFyc2V0X2dydWIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMDVkNjllCi0tLSAvZGV2L251bGwKKysrIGIvUHJvZ3JhbXMvY2hhcnNldF9ncnViLmMKQEAgLTAsMCArMSw0NCBAQAorLyoKKyAqIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisgKiAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisgKgorICogQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKKyNpbmNsdWRlICJwcm9sb2d1ZS5oIgorCisjaW5jbHVkZSA8bG9jYWxlLmg+CisjaW5jbHVkZSA8d2NoYXIuaD4KKworI2luY2x1ZGUgImNoYXJzZXRfaW50ZXJuYWwuaCIKKword2ludF90Citjb252ZXJ0Q2hhclRvV2NoYXIgKGNoYXIgYykgeworICByZXR1cm4gKHVuc2lnbmVkIGNoYXIpYzsKK30KKworaW50Citjb252ZXJ0V2NoYXJUb0NoYXIgKHdjaGFyX3Qgd2MpIHsKKyAgcmV0dXJuIHdjICYgMFhGRjsKK30KKworY29uc3QgY2hhciAqCitnZXRMb2NhbGVDaGFyc2V0ICh2b2lkKSB7CisgIHJldHVybiBubF9sYW5naW5mbyhDT0RFU0VUKTsKK30KKworaW50CityZWdpc3RlckNoYXJhY3RlclNldCAoY29uc3QgY2hhciAqY2hhcnNldCkgeworICByZXR1cm4gZ3J1Yl9zdHJjYXNlY21wKGNoYXJzZXQsICJVVEYtOCIpID09IDA7Cit9CmRpZmYgLS1naXQgYS9Qcm9ncmFtcy9jaGFyc2V0X2ljb252LmMgYi9Qcm9ncmFtcy9jaGFyc2V0X2ljb252LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzc0NTJiYwotLS0gL2Rldi9udWxsCisrKyBiL1Byb2dyYW1zL2NoYXJzZXRfaWNvbnYuYwpAQCAtMCwwICsxLDE0OSBAQAorLyoKKyAqIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisgKiAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisgKgorICogQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKKyNpbmNsdWRlICJwcm9sb2d1ZS5oIgorCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPGljb252Lmg+CisjaW5jbHVkZSA8bG9jYWxlLmg+CisKKyNpZmRlZiBIQVZFX0xBTkdJTkZPX0gKKyNpbmNsdWRlIDxsYW5naW5mby5oPgorI2VuZGlmIC8qIEhBVkVfTEFOR0lORk9fSCAqLworCisjaW5jbHVkZSAibG9nLmgiCisjaW5jbHVkZSAiY2hhcnNldF9pbnRlcm5hbC5oIgorI2luY2x1ZGUgInByb2dyYW0uaCIKKworI2RlZmluZSBDSEFSU0VUX0lDT05WX05VTEwgKChpY29udl90KS0xKQorI2RlZmluZSBDSEFSU0VUX0lDT05WX0hBTkRMRShuYW1lKSBpY29udl90IGljb252IyNuYW1lID0gQ0hBUlNFVF9JQ09OVl9OVUxMCisKK3N0YXRpYyBDSEFSU0VUX0lDT05WX0hBTkRMRShDaGFyVG9XY2hhcik7CitzdGF0aWMgQ0hBUlNFVF9JQ09OVl9IQU5ETEUoV2NoYXJUb0NoYXIpOworCisjZGVmaW5lIENIQVJTRVRfQ09OVkVSVF9UWVBFX1RPX1RZUEUobmFtZSwgZnJvbSwgdG8sIHJldCwgZW9mKSBcCityZXQgY29udmVydCMjbmFtZSAoZnJvbSBmKSB7IFwKKyAgaWYgKGdldENoYXJzZXQoKSkgeyBcCisgICAgZnJvbSAqZnAgPSAmZjsgXAorICAgIHNpemVfdCBmcyA9IHNpemVvZihmKTsgXAorICAgIHRvIHQ7IFwKKyAgICB0byAqdHAgPSAmdDsgXAorICAgIHNpemVfdCB0cyA9IHNpemVvZih0KTsgXAorICAgIGlmIChpY29udihpY29udiMjbmFtZSwgKHZvaWQgKikmZnAsICZmcywgKHZvaWQgKikmdHAsICZ0cykgIT0gKHNpemVfdCktMSkgcmV0dXJuIHQ7IFwKKyAgICBsb2dNZXNzYWdlKExPR19ERUJVRywgImljb252ICgiICNmcm9tICIgLT4gIiAjdG8gIikgZXJyb3I6ICVzIiwgc3RyZXJyb3IoZXJybm8pKTsgXAorICB9IFwKKyAgcmV0dXJuIGVvZjsgXAorfQorQ0hBUlNFVF9DT05WRVJUX1RZUEVfVE9fVFlQRShDaGFyVG9XY2hhciwgY2hhciwgd2NoYXJfdCwgd2ludF90LCBXRU9GKQorQ0hBUlNFVF9DT05WRVJUX1RZUEVfVE9fVFlQRShXY2hhclRvQ2hhciwgd2NoYXJfdCwgdW5zaWduZWQgY2hhciwgaW50LCBFT0YpCisjdW5kZWYgQ0hBUlNFVF9DT05WRVJUX1RZUEVfVE9fVFlQRQorCitjb25zdCBjaGFyICoKK2dldExvY2FsZUNoYXJzZXQgKHZvaWQpIHsKKyAgY29uc3QgY2hhciAqbG9jYWxlID0gc2V0bG9jYWxlKExDX0FMTCwgIiIpOworCisgIGlmIChsb2NhbGUgJiYgIWlzUG9zaXhMb2NhbGUobG9jYWxlKSkgeworI2lmZGVmIEhBVkVfTkxfTEFOR0lORk8KKyAgICAvKiBzb21lIDgtYml0IGxvY2FsZSBpcyBzZXQsIGFzc3VtZSBpdHMgY2hhcnNldCBpcyBjb3JyZWN0ICovCisgICAgcmV0dXJuIG5sX2xhbmdpbmZvKENPREVTRVQpOworI2VuZGlmIC8qIEhBVkVfTkxfTEFOR0lORk8gKi8KKyAgfQorCisgIHJldHVybiBkZWZhdWx0Q2hhcnNldDsKK30KKworc3RhdGljIHZvaWQKK2V4aXRDaGFyc2V0SWNvbnYgKHZvaWQgKmRhdGEpIHsKKyAgc3RhdGljIGljb252X3QgKmNvbnN0IGhhbmRsZXNbXSA9IHsKKyAgICAmaWNvbnZDaGFyVG9XY2hhciwKKyAgICAmaWNvbnZXY2hhclRvQ2hhcgorICB9OworCisgIGljb252X3QgKmNvbnN0ICpoYW5kbGUgPSBoYW5kbGVzOworICBpY29udl90ICpjb25zdCAqY29uc3QgZW5kID0gaGFuZGxlICsgQVJSQVlfQ09VTlQoaGFuZGxlcyk7CisKKyAgd2hpbGUgKGhhbmRsZSA8IGVuZCkgeworICAgIGlmICgqKmhhbmRsZSAhPSBDSEFSU0VUX0lDT05WX05VTEwpIHsKKyAgICAgIGljb252X2Nsb3NlKCoqaGFuZGxlKTsKKyAgICAgICoqaGFuZGxlID0gQ0hBUlNFVF9JQ09OVl9OVUxMOworICAgIH0KKworICAgIGhhbmRsZSArPSAxOworICB9Cit9CisKK2ludAorcmVnaXN0ZXJDaGFyYWN0ZXJTZXQgKGNvbnN0IGNoYXIgKmNoYXJzZXQpIHsKKyAgaW50IGZpcnN0VGltZSA9IDA7CisgIGNvbnN0IGNoYXIgKmNvbnN0IHdjaGFyQ2hhcnNldCA9IGdldFdjaGFyQ2hhcnNldCgpOworCisgIHR5cGVkZWYgc3RydWN0IHsKKyAgICBpY29udl90ICpjb25zdCBoYW5kbGU7CisgICAgY29uc3QgY2hhciAqY29uc3QgZnJvbUNoYXJzZXQ7CisgICAgY29uc3QgY2hhciAqY29uc3QgdG9DaGFyc2V0OworCisgICAgaWNvbnZfdCBuZXdIYW5kbGU7CisgIH0gQ29udkVudHJ5OworCisgIENvbnZFbnRyeSBjb252VGFibGVbXSA9IHsKKyAgICB7IC5oYW5kbGUgPSAmaWNvbnZDaGFyVG9XY2hhciwKKyAgICAgIC5mcm9tQ2hhcnNldCA9IGNoYXJzZXQsCisgICAgICAudG9DaGFyc2V0ID0gd2NoYXJDaGFyc2V0CisgICAgfSwKKworICAgIHsgLmhhbmRsZSA9ICZpY29udldjaGFyVG9DaGFyLAorICAgICAgLmZyb21DaGFyc2V0ID0gd2NoYXJDaGFyc2V0LAorICAgICAgLnRvQ2hhcnNldCA9IGNoYXJzZXQKKyAgICB9LAorICB9OworCisgIENvbnZFbnRyeSAqY29udiA9IGNvbnZUYWJsZTsKKyAgY29uc3QgQ29udkVudHJ5ICpjb252RW5kID0gY29udiArIEFSUkFZX0NPVU5UKGNvbnZUYWJsZSk7CisKKyAgd2hpbGUgKGNvbnYgPCBjb252RW5kKSB7CisgICAgaWYgKChjb252LT5uZXdIYW5kbGUgPSBpY29udl9vcGVuKGNvbnYtPnRvQ2hhcnNldCwgY29udi0+ZnJvbUNoYXJzZXQpKSA9PSBDSEFSU0VUX0lDT05WX05VTEwpIHsKKyAgICAgIGxvZ1N5c3RlbUVycm9yKCJpY29udl9vcGVuIik7CisKKyAgICAgIHdoaWxlIChjb252ID4gY29udlRhYmxlKSB7CisgICAgICAgIGNvbnYgLT0gMTsKKyAgICAgICAgaWNvbnZfY2xvc2UoY29udi0+bmV3SGFuZGxlKTsKKyAgICAgIH0KKworICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgY29udiArPSAxOworICB9CisKKyAgd2hpbGUgKGNvbnYgPiBjb252VGFibGUpIHsKKyAgICBjb252IC09IDE7CisKKyAgICBpZiAoKmNvbnYtPmhhbmRsZSA9PSBDSEFSU0VUX0lDT05WX05VTEwpIHsKKyAgICAgIGZpcnN0VGltZSA9IDE7CisgICAgfSBlbHNlIHsKKyAgICAgIGljb252X2Nsb3NlKCpjb252LT5oYW5kbGUpOworICAgIH0KKworICAgICpjb252LT5oYW5kbGUgPSBjb252LT5uZXdIYW5kbGU7CisgIH0KKworICBpZiAoZmlyc3RUaW1lKSBvblByb2dyYW1FeGl0KCJjaGFyc2V0LWljb252IiwgZXhpdENoYXJzZXRJY29udiwgTlVMTCk7CisgIHJldHVybiAxOworfQpkaWZmIC0tZ2l0IGEvUHJvZ3JhbXMvY2hhcnNldF9pbnRlcm5hbC5oIGIvUHJvZ3JhbXMvY2hhcnNldF9pbnRlcm5hbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBjNmMwY2MKLS0tIC9kZXYvbnVsbAorKysgYi9Qcm9ncmFtcy9jaGFyc2V0X2ludGVybmFsLmgKQEAgLTAsMCArMSwzNiBAQAorLyoKKyAqIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisgKiAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisgKgorICogQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKKyNpZm5kZWYgQlJMVFRZX0lOQ0xVREVEX0NIQVJTRVRfSU5URVJOQUwKKyNkZWZpbmUgQlJMVFRZX0lOQ0xVREVEX0NIQVJTRVRfSU5URVJOQUwKKworI2luY2x1ZGUgImNoYXJzZXQuaCIKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZiAvKiBfX2NwbHVzcGx1cyAqLworCitleHRlcm4gY29uc3QgY2hhciBkZWZhdWx0Q2hhcnNldFtdOworCitleHRlcm4gaW50IHJlZ2lzdGVyQ2hhcmFjdGVyU2V0IChjb25zdCBjaGFyICpjaGFyc2V0KTsKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYgLyogX19jcGx1c3BsdXMgKi8KKworI2VuZGlmIC8qIEJSTFRUWV9JTkNMVURFRF9DSEFSU0VUX0lOVEVSTkFMICovCmRpZmYgLS1naXQgYS9Qcm9ncmFtcy9jaGFyc2V0X21zZG9zLmMgYi9Qcm9ncmFtcy9jaGFyc2V0X21zZG9zLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzNiYjZiNgotLS0gL2Rldi9udWxsCisrKyBiL1Byb2dyYW1zL2NoYXJzZXRfbXNkb3MuYwpAQCAtMCwwICsxLDI0NCBAQAorLyoKKyAqIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisgKiAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisgKgorICogQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKKyNpbmNsdWRlICJwcm9sb2d1ZS5oIgorCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworI2luY2x1ZGUgImNoYXJzZXRfaW50ZXJuYWwuaCIKKyNpbmNsdWRlICJ1bmljb2RlLmgiCisjaW5jbHVkZSAic3lzdGVtX21zZG9zLmgiCisKKyNkZWZpbmUgQ0hBUkFDVEVSX1NFVF9TSVpFIDBYMTAwCisKK3N0YXRpYyBjb25zdCB1aW50MTZfdCB0b1VuaWNvZGVfTGF0aW4xW0NIQVJBQ1RFUl9TRVRfU0laRV0gPSB7CisgIC8qIDAwICovIDBYMDAwMCwgMFgwMDAxLCAwWDAwMDIsIDBYMDAwMywgMFgwMDA0LCAwWDAwMDUsIDBYMDAwNiwgMFgwMDA3LAorICAvKiAwOCAqLyAwWDAwMDgsIDBYMDAwOSwgMFgwMDBBLCAwWDAwMEIsIDBYMDAwQywgMFgwMDBELCAwWDAwMEUsIDBYMDAwRiwKKyAgLyogMTAgKi8gMFgwMDEwLCAwWDAwMTEsIDBYMDAxMiwgMFgwMDEzLCAwWDAwMTQsIDBYMDAxNSwgMFgwMDE2LCAwWDAwMTcsCisgIC8qIDE4ICovIDBYMDAxOCwgMFgwMDE5LCAwWDAwMUEsIDBYMDAxQiwgMFgwMDFDLCAwWDAwMUQsIDBYMDAxRSwgMFgwMDFGLAorICAvKiAyMCAqLyAwWDAwMjAsIDBYMDAyMSwgMFgwMDIyLCAwWDAwMjMsIDBYMDAyNCwgMFgwMDI1LCAwWDAwMjYsIDBYMDAyNywKKyAgLyogMjggKi8gMFgwMDI4LCAwWDAwMjksIDBYMDAyQSwgMFgwMDJCLCAwWDAwMkMsIDBYMDAyRCwgMFgwMDJFLCAwWDAwMkYsCisgIC8qIDMwICovIDBYMDAzMCwgMFgwMDMxLCAwWDAwMzIsIDBYMDAzMywgMFgwMDM0LCAwWDAwMzUsIDBYMDAzNiwgMFgwMDM3LAorICAvKiAzOCAqLyAwWDAwMzgsIDBYMDAzOSwgMFgwMDNBLCAwWDAwM0IsIDBYMDAzQywgMFgwMDNELCAwWDAwM0UsIDBYMDAzRiwKKyAgLyogNDAgKi8gMFgwMDQwLCAwWDAwNDEsIDBYMDA0MiwgMFgwMDQzLCAwWDAwNDQsIDBYMDA0NSwgMFgwMDQ2LCAwWDAwNDcsCisgIC8qIDQ4ICovIDBYMDA0OCwgMFgwMDQ5LCAwWDAwNEEsIDBYMDA0QiwgMFgwMDRDLCAwWDAwNEQsIDBYMDA0RSwgMFgwMDRGLAorICAvKiA1MCAqLyAwWDAwNTAsIDBYMDA1MSwgMFgwMDUyLCAwWDAwNTMsIDBYMDA1NCwgMFgwMDU1LCAwWDAwNTYsIDBYMDA1NywKKyAgLyogNTggKi8gMFgwMDU4LCAwWDAwNTksIDBYMDA1QSwgMFgwMDVCLCAwWDAwNUMsIDBYMDA1RCwgMFgwMDVFLCAwWDAwNUYsCisgIC8qIDYwICovIDBYMDA2MCwgMFgwMDYxLCAwWDAwNjIsIDBYMDA2MywgMFgwMDY0LCAwWDAwNjUsIDBYMDA2NiwgMFgwMDY3LAorICAvKiA2OCAqLyAwWDAwNjgsIDBYMDA2OSwgMFgwMDZBLCAwWDAwNkIsIDBYMDA2QywgMFgwMDZELCAwWDAwNkUsIDBYMDA2RiwKKyAgLyogNzAgKi8gMFgwMDcwLCAwWDAwNzEsIDBYMDA3MiwgMFgwMDczLCAwWDAwNzQsIDBYMDA3NSwgMFgwMDc2LCAwWDAwNzcsCisgIC8qIDc4ICovIDBYMDA3OCwgMFgwMDc5LCAwWDAwN0EsIDBYMDA3QiwgMFgwMDdDLCAwWDAwN0QsIDBYMDA3RSwgMFgwMDdGLAorICAvKiA4MCAqLyAwWDAwODAsIDBYMDA4MSwgMFgwMDgyLCAwWDAwODMsIDBYMDA4NCwgMFgwMDg1LCAwWDAwODYsIDBYMDA4NywKKyAgLyogODggKi8gMFgwMDg4LCAwWDAwODksIDBYMDA4QSwgMFgwMDhCLCAwWDAwOEMsIDBYMDA4RCwgMFgwMDhFLCAwWDAwOEYsCisgIC8qIDkwICovIDBYMDA5MCwgMFgwMDkxLCAwWDAwOTIsIDBYMDA5MywgMFgwMDk0LCAwWDAwOTUsIDBYMDA5NiwgMFgwMDk3LAorICAvKiA5OCAqLyAwWDAwOTgsIDBYMDA5OSwgMFgwMDlBLCAwWDAwOUIsIDBYMDA5QywgMFgwMDlELCAwWDAwOUUsIDBYMDA5RiwKKyAgLyogQTAgKi8gMFgwMEEwLCAwWDAwQTEsIDBYMDBBMiwgMFgwMEEzLCAwWDAwQTQsIDBYMDBBNSwgMFgwMEE2LCAwWDAwQTcsCisgIC8qIEE4ICovIDBYMDBBOCwgMFgwMEE5LCAwWDAwQUEsIDBYMDBBQiwgMFgwMEFDLCAwWDAwQUQsIDBYMDBBRSwgMFgwMEFGLAorICAvKiBCMCAqLyAwWDAwQjAsIDBYMDBCMSwgMFgwMEIyLCAwWDAwQjMsIDBYMDBCNCwgMFgwMEI1LCAwWDAwQjYsIDBYMDBCNywKKyAgLyogQjggKi8gMFgwMEI4LCAwWDAwQjksIDBYMDBCQSwgMFgwMEJCLCAwWDAwQkMsIDBYMDBCRCwgMFgwMEJFLCAwWDAwQkYsCisgIC8qIEMwICovIDBYMDBDMCwgMFgwMEMxLCAwWDAwQzIsIDBYMDBDMywgMFgwMEM0LCAwWDAwQzUsIDBYMDBDNiwgMFgwMEM3LAorICAvKiBDOCAqLyAwWDAwQzgsIDBYMDBDOSwgMFgwMENBLCAwWDAwQ0IsIDBYMDBDQywgMFgwMENELCAwWDAwQ0UsIDBYMDBDRiwKKyAgLyogRDAgKi8gMFgwMEQwLCAwWDAwRDEsIDBYMDBEMiwgMFgwMEQzLCAwWDAwRDQsIDBYMDBENSwgMFgwMEQ2LCAwWDAwRDcsCisgIC8qIEQ4ICovIDBYMDBEOCwgMFgwMEQ5LCAwWDAwREEsIDBYMDBEQiwgMFgwMERDLCAwWDAwREQsIDBYMDBERSwgMFgwMERGLAorICAvKiBFMCAqLyAwWDAwRTAsIDBYMDBFMSwgMFgwMEUyLCAwWDAwRTMsIDBYMDBFNCwgMFgwMEU1LCAwWDAwRTYsIDBYMDBFNywKKyAgLyogRTggKi8gMFgwMEU4LCAwWDAwRTksIDBYMDBFQSwgMFgwMEVCLCAwWDAwRUMsIDBYMDBFRCwgMFgwMEVFLCAwWDAwRUYsCisgIC8qIEYwICovIDBYMDBGMCwgMFgwMEYxLCAwWDAwRjIsIDBYMDBGMywgMFgwMEY0LCAwWDAwRjUsIDBYMDBGNiwgMFgwMEY3LAorICAvKiBGOCAqLyAwWDAwRjgsIDBYMDBGOSwgMFgwMEZBLCAwWDAwRkIsIDBYMDBGQywgMFgwMEZELCAwWDAwRkUsIDBYMDBGRiwKK307CisKK3N0YXRpYyBjb25zdCB1aW50MTZfdCB0b1VuaWNvZGVfQ1A0MzdbQ0hBUkFDVEVSX1NFVF9TSVpFXSA9IHsKKyAgLyogMDAgKi8gMFgwMDAwLCAwWDAwMDEsIDBYMDAwMiwgMFgwMDAzLCAwWDAwMDQsIDBYMDAwNSwgMFgwMDA2LCAwWDAwMDcsCisgIC8qIDA4ICovIDBYMDAwOCwgMFgwMDA5LCAwWDAwMEEsIDBYMDAwQiwgMFgwMDBDLCAwWDAwMEQsIDBYMDAwRSwgMFgwMDBGLAorICAvKiAxMCAqLyAwWDAwMTAsIDBYMDAxMSwgMFgwMDEyLCAwWDAwMTMsIDBYMDAxNCwgMFgwMDE1LCAwWDAwMTYsIDBYMDAxNywKKyAgLyogMTggKi8gMFgwMDE4LCAwWDAwMTksIDBYMDAxQSwgMFgwMDFCLCAwWDAwMUMsIDBYMDAxRCwgMFgwMDFFLCAwWDAwMUYsCisgIC8qIDIwICovIDBYMDAyMCwgMFgwMDIxLCAwWDAwMjIsIDBYMDAyMywgMFgwMDI0LCAwWDAwMjUsIDBYMDAyNiwgMFgwMDI3LAorICAvKiAyOCAqLyAwWDAwMjgsIDBYMDAyOSwgMFgwMDJBLCAwWDAwMkIsIDBYMDAyQywgMFgwMDJELCAwWDAwMkUsIDBYMDAyRiwKKyAgLyogMzAgKi8gMFgwMDMwLCAwWDAwMzEsIDBYMDAzMiwgMFgwMDMzLCAwWDAwMzQsIDBYMDAzNSwgMFgwMDM2LCAwWDAwMzcsCisgIC8qIDM4ICovIDBYMDAzOCwgMFgwMDM5LCAwWDAwM0EsIDBYMDAzQiwgMFgwMDNDLCAwWDAwM0QsIDBYMDAzRSwgMFgwMDNGLAorICAvKiA0MCAqLyAwWDAwNDAsIDBYMDA0MSwgMFgwMDQyLCAwWDAwNDMsIDBYMDA0NCwgMFgwMDQ1LCAwWDAwNDYsIDBYMDA0NywKKyAgLyogNDggKi8gMFgwMDQ4LCAwWDAwNDksIDBYMDA0QSwgMFgwMDRCLCAwWDAwNEMsIDBYMDA0RCwgMFgwMDRFLCAwWDAwNEYsCisgIC8qIDUwICovIDBYMDA1MCwgMFgwMDUxLCAwWDAwNTIsIDBYMDA1MywgMFgwMDU0LCAwWDAwNTUsIDBYMDA1NiwgMFgwMDU3LAorICAvKiA1OCAqLyAwWDAwNTgsIDBYMDA1OSwgMFgwMDVBLCAwWDAwNUIsIDBYMDA1QywgMFgwMDVELCAwWDAwNUUsIDBYMDA1RiwKKyAgLyogNjAgKi8gMFgwMDYwLCAwWDAwNjEsIDBYMDA2MiwgMFgwMDYzLCAwWDAwNjQsIDBYMDA2NSwgMFgwMDY2LCAwWDAwNjcsCisgIC8qIDY4ICovIDBYMDA2OCwgMFgwMDY5LCAwWDAwNkEsIDBYMDA2QiwgMFgwMDZDLCAwWDAwNkQsIDBYMDA2RSwgMFgwMDZGLAorICAvKiA3MCAqLyAwWDAwNzAsIDBYMDA3MSwgMFgwMDcyLCAwWDAwNzMsIDBYMDA3NCwgMFgwMDc1LCAwWDAwNzYsIDBYMDA3NywKKyAgLyogNzggKi8gMFgwMDc4LCAwWDAwNzksIDBYMDA3QSwgMFgwMDdCLCAwWDAwN0MsIDBYMDA3RCwgMFgwMDdFLCAwWDAwN0YsCisgIC8qIDgwICovIDBYMDBDNywgMFgwMEZDLCAwWDAwRTksIDBYMDBFMiwgMFgwMEU0LCAwWDAwRTAsIDBYMDBFNSwgMFgwMEU3LAorICAvKiA4OCAqLyAwWDAwRUEsIDBYMDBFQiwgMFgwMEU4LCAwWDAwRUYsIDBYMDBFRSwgMFgwMEVDLCAwWDAwQzQsIDBYMDBDNSwKKyAgLyogOTAgKi8gMFgwMEM5LCAwWDAwRTYsIDBYMDBDNiwgMFgwMEY0LCAwWDAwRjYsIDBYMDBGMiwgMFgwMEZCLCAwWDAwRjksCisgIC8qIDk4ICovIDBYMDBGRiwgMFgwMEQ2LCAwWDAwREMsIDBYMDBBMiwgMFgwMEEzLCAwWDAwQTUsIDBYMjBBNywgMFgwMTkyLAorICAvKiBBMCAqLyAwWDAwRTEsIDBYMDBFRCwgMFgwMEYzLCAwWDAwRkEsIDBYMDBGMSwgMFgwMEQxLCAwWDAwQUEsIDBYMDBCQSwKKyAgLyogQTggKi8gMFgwMEJGLCAwWDIzMTAsIDBYMDBBQywgMFgwMEJELCAwWDAwQkMsIDBYMDBBMSwgMFgwMEFCLCAwWDAwQkIsCisgIC8qIEIwICovIDBYMjU5MSwgMFgyNTkyLCAwWDI1OTMsIDBYMjUwMiwgMFgyNTI0LCAwWDI1NjEsIDBYMjU2MiwgMFgyNTU2LAorICAvKiBCOCAqLyAwWDI1NTUsIDBYMjU2MywgMFgyNTUxLCAwWDI1NTcsIDBYMjU1RCwgMFgyNTVDLCAwWDI1NUIsIDBYMjUxMCwKKyAgLyogQzAgKi8gMFgyNTE0LCAwWDI1MzQsIDBYMjUyQywgMFgyNTFDLCAwWDI1MDAsIDBYMjUzQywgMFgyNTVFLCAwWDI1NUYsCisgIC8qIEM4ICovIDBYMjU1QSwgMFgyNTU0LCAwWDI1NjksIDBYMjU2NiwgMFgyNTYwLCAwWDI1NTAsIDBYMjU2QywgMFgyNTY3LAorICAvKiBEMCAqLyAwWDI1NjgsIDBYMjU2NCwgMFgyNTY1LCAwWDI1NTksIDBYMjU1OCwgMFgyNTUyLCAwWDI1NTMsIDBYMjU2QiwKKyAgLyogRDggKi8gMFgyNTZBLCAwWDI1MTgsIDBYMjUwQywgMFgyNTg4LCAwWDI1ODQsIDBYMjU4QywgMFgyNTkwLCAwWDI1ODAsCisgIC8qIEUwICovIDBYMDNCMSwgMFgwMERGLCAwWDAzOTMsIDBYMDNDMCwgMFgwM0EzLCAwWDAzQzMsIDBYMDBCNSwgMFgwM0M0LAorICAvKiBFOCAqLyAwWDAzQTYsIDBYMDM5OCwgMFgwM0E5LCAwWDAzQjQsIDBYMjIxRSwgMFgwM0M2LCAwWDAzQjUsIDBYMjIyOSwKKyAgLyogRjAgKi8gMFgyMjYxLCAwWDAwQjEsIDBYMjI2NSwgMFgyMjY0LCAwWDIzMjAsIDBYMjMyMSwgMFgwMEY3LCAwWDIyNDgsCisgIC8qIEY4ICovIDBYMDBCMCwgMFgyMjE5LCAwWDAwQjcsIDBYMjIxQSwgMFgyMDdGLCAwWDAwQjIsIDBYMjVBMCwgMFgwMEEwCit9OworCitzdGF0aWMgY29uc3QgdWludDE2X3QgdG9Vbmljb2RlX0NQODUwW0NIQVJBQ1RFUl9TRVRfU0laRV0gPSB7CisgIC8qIDAwICovIDBYMDAwMCwgMFgwMDAxLCAwWDAwMDIsIDBYMDAwMywgMFgwMDA0LCAwWDAwMDUsIDBYMDAwNiwgMFgwMDA3LAorICAvKiAwOCAqLyAwWDAwMDgsIDBYMDAwOSwgMFgwMDBBLCAwWDAwMEIsIDBYMDAwQywgMFgwMDBELCAwWDAwMEUsIDBYMDAwRiwKKyAgLyogMTAgKi8gMFgwMDEwLCAwWDAwMTEsIDBYMDAxMiwgMFgwMDEzLCAwWDAwMTQsIDBYMDAxNSwgMFgwMDE2LCAwWDAwMTcsCisgIC8qIDE4ICovIDBYMDAxOCwgMFgwMDE5LCAwWDAwMUEsIDBYMDAxQiwgMFgwMDFDLCAwWDAwMUQsIDBYMDAxRSwgMFgwMDFGLAorICAvKiAyMCAqLyAwWDAwMjAsIDBYMDAyMSwgMFgwMDIyLCAwWDAwMjMsIDBYMDAyNCwgMFgwMDI1LCAwWDAwMjYsIDBYMDAyNywKKyAgLyogMjggKi8gMFgwMDI4LCAwWDAwMjksIDBYMDAyQSwgMFgwMDJCLCAwWDAwMkMsIDBYMDAyRCwgMFgwMDJFLCAwWDAwMkYsCisgIC8qIDMwICovIDBYMDAzMCwgMFgwMDMxLCAwWDAwMzIsIDBYMDAzMywgMFgwMDM0LCAwWDAwMzUsIDBYMDAzNiwgMFgwMDM3LAorICAvKiAzOCAqLyAwWDAwMzgsIDBYMDAzOSwgMFgwMDNBLCAwWDAwM0IsIDBYMDAzQywgMFgwMDNELCAwWDAwM0UsIDBYMDAzRiwKKyAgLyogNDAgKi8gMFgwMDQwLCAwWDAwNDEsIDBYMDA0MiwgMFgwMDQzLCAwWDAwNDQsIDBYMDA0NSwgMFgwMDQ2LCAwWDAwNDcsCisgIC8qIDQ4ICovIDBYMDA0OCwgMFgwMDQ5LCAwWDAwNEEsIDBYMDA0QiwgMFgwMDRDLCAwWDAwNEQsIDBYMDA0RSwgMFgwMDRGLAorICAvKiA1MCAqLyAwWDAwNTAsIDBYMDA1MSwgMFgwMDUyLCAwWDAwNTMsIDBYMDA1NCwgMFgwMDU1LCAwWDAwNTYsIDBYMDA1NywKKyAgLyogNTggKi8gMFgwMDU4LCAwWDAwNTksIDBYMDA1QSwgMFgwMDVCLCAwWDAwNUMsIDBYMDA1RCwgMFgwMDVFLCAwWDAwNUYsCisgIC8qIDYwICovIDBYMDA2MCwgMFgwMDYxLCAwWDAwNjIsIDBYMDA2MywgMFgwMDY0LCAwWDAwNjUsIDBYMDA2NiwgMFgwMDY3LAorICAvKiA2OCAqLyAwWDAwNjgsIDBYMDA2OSwgMFgwMDZBLCAwWDAwNkIsIDBYMDA2QywgMFgwMDZELCAwWDAwNkUsIDBYMDA2RiwKKyAgLyogNzAgKi8gMFgwMDcwLCAwWDAwNzEsIDBYMDA3MiwgMFgwMDczLCAwWDAwNzQsIDBYMDA3NSwgMFgwMDc2LCAwWDAwNzcsCisgIC8qIDc4ICovIDBYMDA3OCwgMFgwMDc5LCAwWDAwN0EsIDBYMDA3QiwgMFgwMDdDLCAwWDAwN0QsIDBYMDA3RSwgMFgwMDdGLAorICAvKiA4MCAqLyAwWDAwQzcsIDBYMDBGQywgMFgwMEU5LCAwWDAwRTIsIDBYMDBFNCwgMFgwMEUwLCAwWDAwRTUsIDBYMDBFNywKKyAgLyogODggKi8gMFgwMEVBLCAwWDAwRUIsIDBYMDBFOCwgMFgwMEVGLCAwWDAwRUUsIDBYMDBFQywgMFgwMEM0LCAwWDAwQzUsCisgIC8qIDkwICovIDBYMDBDOSwgMFgwMEU2LCAwWDAwQzYsIDBYMDBGNCwgMFgwMEY2LCAwWDAwRjIsIDBYMDBGQiwgMFgwMEY5LAorICAvKiA5OCAqLyAwWDAwRkYsIDBYMDBENiwgMFgwMERDLCAwWDAwRjgsIDBYMDBBMywgMFgwMEQ4LCAwWDAwRDcsIDBYMDE5MiwKKyAgLyogQTAgKi8gMFgwMEUxLCAwWDAwRUQsIDBYMDBGMywgMFgwMEZBLCAwWDAwRjEsIDBYMDBEMSwgMFgwMEFBLCAwWDAwQkEsCisgIC8qIEE4ICovIDBYMDBCRiwgMFgwMEFFLCAwWDAwQUMsIDBYMDBCRCwgMFgwMEJDLCAwWDAwQTEsIDBYMDBBQiwgMFgwMEJCLAorICAvKiBCMCAqLyAwWDI1OTEsIDBYMjU5MiwgMFgyNTkzLCAwWDI1MDIsIDBYMjUyNCwgMFgwMEMxLCAwWDAwQzIsIDBYMDBDMCwKKyAgLyogQjggKi8gMFgwMEE5LCAwWDI1NjMsIDBYMjU1MSwgMFgyNTU3LCAwWDI1NUQsIDBYMDBBMiwgMFgwMEE1LCAwWDI1MTAsCisgIC8qIEMwICovIDBYMjUxNCwgMFgyNTM0LCAwWDI1MkMsIDBYMjUxQywgMFgyNTAwLCAwWDI1M0MsIDBYMDBFMywgMFgwMEMzLAorICAvKiBDOCAqLyAwWDI1NUEsIDBYMjU1NCwgMFgyNTY5LCAwWDI1NjYsIDBYMjU2MCwgMFgyNTUwLCAwWDI1NkMsIDBYMDBBNCwKKyAgLyogRDAgKi8gMFgwMEYwLCAwWDAwRDAsIDBYMDBDQSwgMFgwMENCLCAwWDAwQzgsIDBYMDEzMSwgMFgwMENELCAwWDAwQ0UsCisgIC8qIEQ4ICovIDBYMDBDRiwgMFgyNTE4LCAwWDI1MEMsIDBYMjU4OCwgMFgyNTg0LCAwWDAwQTYsIDBYMDBDQywgMFgyNTgwLAorICAvKiBFMCAqLyAwWDAwRDMsIDBYMDBERiwgMFgwMEQ0LCAwWDAwRDIsIDBYMDBGNSwgMFgwMEQ1LCAwWDAwQjUsIDBYMDBGRSwKKyAgLyogRTggKi8gMFgwMERFLCAwWDAwREEsIDBYMDBEQiwgMFgwMEQ5LCAwWDAwRkQsIDBYMDBERCwgMFgwMEFGLCAwWDAwQjQsCisgIC8qIEYwICovIDBYMDBBRCwgMFgwMEIxLCAwWDIwMTcsIDBYMDBCRSwgMFgwMEI2LCAwWDAwQTcsIDBYMDBGNywgMFgwMEI4LAorICAvKiBGOCAqLyAwWDAwQjAsIDBYMDBBOCwgMFgwMEI3LCAwWDAwQjksIDBYMDBCMywgMFgwMEIyLCAwWDI1QTAsIDBYMDBBMAorfTsKKwordHlwZWRlZiBzdHJ1Y3QgeworICBjb25zdCBjaGFyICpuYW1lOworICBjb25zdCB1aW50MTZfdCAqdG9Vbmljb2RlOworfSBDaGFyYWN0ZXJTZXQ7CisKK3N0YXRpYyBjb25zdCBDaGFyYWN0ZXJTZXQgY2hhcmFjdGVyU2V0c1tdID0geworICB7Lm5hbWU9Imlzby04ODU5LTEiLCAudG9Vbmljb2RlPXRvVW5pY29kZV9MYXRpbjF9LAorICB7Lm5hbWU9ImNwNDM3IiwgLnRvVW5pY29kZT10b1VuaWNvZGVfQ1A0Mzd9LAorICB7Lm5hbWU9ImNwODUwIiwgLnRvVW5pY29kZT10b1VuaWNvZGVfQ1A4NTB9LAorICB7fQorfTsKK3N0YXRpYyBjb25zdCBDaGFyYWN0ZXJTZXQgKmNoYXJhY3RlclNldDsKKworc3RhdGljIGNoYXIgKnVuaWNvZGVSb3dzW1VOSUNPREVfUk9XU19QRVJfUExBTkVdOworCitzdGF0aWMgdm9pZAorY2xlYXJVbmljb2RlUm93IChjaGFyICpyb3cpIHsKKyAgbWVtc2V0KHJvdywgMCwgVU5JQ09ERV9DRUxMU19QRVJfUk9XKTsKK30KKworc3RhdGljIHZvaWQKK2NsZWFyVW5pY29kZVJvd3MgKHZvaWQpIHsKKyAgaW50IHJvd051bWJlcjsKKyAgZm9yIChyb3dOdW1iZXI9MDsgcm93TnVtYmVyPFVOSUNPREVfUk9XU19QRVJfUExBTkU7ICsrcm93TnVtYmVyKSB7CisgICAgY2hhciAqcm93ID0gdW5pY29kZVJvd3Nbcm93TnVtYmVyXTsKKyAgICBpZiAocm93KSBjbGVhclVuaWNvZGVSb3cocm93KTsKKyAgfQorfQorCitzdGF0aWMgY2hhciAqCitnZXRVbmljb2RlQ2VsbCAodWludDE2X3QgdW5pY29kZSwgaW50IGFsbG9jYXRlKSB7CisgIHVuc2lnbmVkIGNoYXIgY2VsbE51bWJlciA9IHVuaWNvZGUgJiAwWEZGOworICB1bnNpZ25lZCBjaGFyIHJvd051bWJlciA9IHVuaWNvZGUgPj4gODsKKyAgY2hhciAqKnJvd0FkZHJlc3MgPSAmdW5pY29kZVJvd3Nbcm93TnVtYmVyXTsKKworICBpZiAoISpyb3dBZGRyZXNzKSB7CisgICAgaWYgKCFhbGxvY2F0ZSkgcmV0dXJuIE5VTEw7CisKKyAgICB7CisgICAgICBjaGFyICpyb3cgPSBtYWxsb2MoVU5JQ09ERV9DRUxMU19QRVJfUk9XKTsKKyAgICAgIGlmICghcm93KSByZXR1cm4gTlVMTDsKKyAgICAgIGNsZWFyVW5pY29kZVJvdyhyb3cpOworICAgICAgKnJvd0FkZHJlc3MgPSByb3c7CisgICAgfQorICB9CisKKyAgcmV0dXJuICYoKnJvd0FkZHJlc3MpW2NlbGxOdW1iZXJdOworfQorCitzdGF0aWMgaW50CitzZXRDaGFyYWN0ZXJTZXQgKGNvbnN0IGNoYXIgKm5hbWUpIHsKKyAgY29uc3QgQ2hhcmFjdGVyU2V0ICpzZXQgPSBjaGFyYWN0ZXJTZXRzOworCisgIHdoaWxlIChzZXQtPm5hbWUpIHsKKyAgICBpZiAoc3RyY2FzZWNtcChuYW1lLCBzZXQtPm5hbWUpID09IDApIHsKKyAgICAgIGNsZWFyVW5pY29kZVJvd3MoKTsKKyAgICAgIGNoYXJhY3RlclNldCA9IE5VTEw7CisKKyAgICAgIHsKKyAgICAgICAgaW50IGNoYXJhY3RlcjsKKyAgICAgICAgZm9yIChjaGFyYWN0ZXI9Q0hBUkFDVEVSX1NFVF9TSVpFLTE7IGNoYXJhY3Rlcj49MDsgLS1jaGFyYWN0ZXIpIHsKKyAgICAgICAgICBjaGFyICpjZWxsID0gZ2V0VW5pY29kZUNlbGwoc2V0LT50b1VuaWNvZGVbY2hhcmFjdGVyXSwgMSk7CisgICAgICAgICAgaWYgKCFjZWxsKSByZXR1cm4gMDsKKyAgICAgICAgICAqY2VsbCA9IGNoYXJhY3RlcjsKKyAgICAgICAgfQorICAgICAgfQorCisgICAgICBjaGFyYWN0ZXJTZXQgPSBzZXQ7CisgICAgICByZXR1cm4gMTsKKyAgICB9CisKKyAgICArK3NldDsKKyAgfQorCisgIHJldHVybiAwOworfQorCit3aW50X3QKK2NvbnZlcnRDaGFyVG9XY2hhciAoY2hhciBjKSB7CisgIGlmIChnZXRDaGFyc2V0KCkpIHsKKyAgICB1aW50MTZfdCB3YyA9IGNoYXJhY3RlclNldC0+dG9Vbmljb2RlWyh1bnNpZ25lZCBjaGFyKWMgJiAwWEZGXTsKKyAgICBpZiAod2MgfHwgIWMpCisgICAgICBpZiAoKHNpemVvZih3Y2hhcl90KSA+IDEpIHx8IGlzd0xhdGluMSh3YykpCisgICAgICAgIHJldHVybiB3YzsKKyAgfQorICByZXR1cm4gV0VPRjsKK30KKworaW50Citjb252ZXJ0V2NoYXJUb0NoYXIgKHdjaGFyX3Qgd2MpIHsKKyAgaWYgKGdldENoYXJzZXQoKSkgeworICAgIGNoYXIgKmNlbGwgPSBnZXRVbmljb2RlQ2VsbCh3YywgMCk7CisgICAgaWYgKGNlbGwpCisgICAgICBpZiAoKmNlbGwgfHwgIXdjKQorICAgICAgICByZXR1cm4gKmNlbGwgJiAwWEZGOworICB9CisgIHJldHVybiBFT0Y7Cit9CisKK2NvbnN0IGNoYXIgKgorZ2V0TG9jYWxlQ2hhcnNldCAodm9pZCkgeworICBzdGF0aWMgY2hhciBjb2RlcGFnZVs4XTsKKyAgc25wcmludGYoY29kZXBhZ2UsIHNpemVvZihjb2RlcGFnZSksICJDUCUwM3UiLCBtc2Rvc0dldENvZGVQYWdlKCkpOworICByZXR1cm4gY29kZXBhZ2U7Cit9CisKK2ludAorcmVnaXN0ZXJDaGFyYWN0ZXJTZXQgKGNvbnN0IGNoYXIgKmNoYXJzZXQpIHsKKyAgcmV0dXJuIHNldENoYXJhY3RlclNldChjaGFyc2V0KTsKK30KZGlmZiAtLWdpdCBhL1Byb2dyYW1zL2NoYXJzZXRfbm9uZS5jIGIvUHJvZ3JhbXMvY2hhcnNldF9ub25lLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmU5YmY5OAotLS0gL2Rldi9udWxsCisrKyBiL1Byb2dyYW1zL2NoYXJzZXRfbm9uZS5jCkBAIC0wLDAgKzEsNDEgQEAKKy8qCisgKiBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorICogICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorICoKKyAqIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorICoKKyAqIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyAqLworCisjaW5jbHVkZSAicHJvbG9ndWUuaCIKKworI2luY2x1ZGUgImNoYXJzZXRfaW50ZXJuYWwuaCIKKword2ludF90Citjb252ZXJ0Q2hhclRvV2NoYXIgKGNoYXIgYykgeworICByZXR1cm4gYyAmIDBYRkY7Cit9CisKK2ludAorY29udmVydFdjaGFyVG9DaGFyICh3Y2hhcl90IHdjKSB7CisgIHJldHVybiB3YyAmIDBYRkY7Cit9CisKK2NvbnN0IGNoYXIgKgorZ2V0TG9jYWxlQ2hhcnNldCAodm9pZCkgeworICByZXR1cm4gZGVmYXVsdENoYXJzZXQ7Cit9CisKK2ludAorcmVnaXN0ZXJDaGFyYWN0ZXJTZXQgKGNvbnN0IGNoYXIgKmNoYXJzZXQpIHsKKyAgcmV0dXJuIDE7Cit9CmRpZmYgLS1naXQgYS9Qcm9ncmFtcy9jaGFyc2V0X3dpbmRvd3MuYyBiL1Byb2dyYW1zL2NoYXJzZXRfd2luZG93cy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM4MTAyYzcKLS0tIC9kZXYvbnVsbAorKysgYi9Qcm9ncmFtcy9jaGFyc2V0X3dpbmRvd3MuYwpAQCAtMCwwICsxLDczIEBACisvKgorICogQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyAqICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyAqCisgKiBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorICoKKyAqIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyAqCisgKiBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisgKi8KKworI2luY2x1ZGUgInByb2xvZ3VlLmgiCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPGxvY2FsZS5oPgorCisjaW5jbHVkZSAibG9nLmgiCisjaW5jbHVkZSAiY2hhcnNldF9pbnRlcm5hbC5oIgorCisjaWYgZGVmaW5lZChDUF9USFJFQURfQUNQKQorI2RlZmluZSBDSEFSU0VUX1dJTkRPV1NfQ09ERVBBR0UgQ1BfVEhSRUFEX0FDUAorI2Vsc2UgLyogV2luZG93cyBjb2RlcGFnZSAqLworI2RlZmluZSBDSEFSU0VUX1dJTkRPV1NfQ09ERVBBR0UgQ1BfQUNQCisjZW5kaWYgLyogV2luZG93cyBjb2RlcGFnZSAqLworCit3aW50X3QKK2NvbnZlcnRDaGFyVG9XY2hhciAoY2hhciBjKSB7CisgIHdjaGFyX3Qgd2M7CisgIGludCByZXN1bHQgPSBNdWx0aUJ5dGVUb1dpZGVDaGFyKENIQVJTRVRfV0lORE9XU19DT0RFUEFHRSwgTUJfRVJSX0lOVkFMSURfQ0hBUlMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZjLCAxLCAgJndjLCAxKTsKKyAgaWYgKHJlc3VsdCkgcmV0dXJuIHdjOworICBsb2dXaW5kb3dzU3lzdGVtRXJyb3IoIk11bHRpQnl0ZVRvV2lkZUNoYXJbIiBTVFJJTkdJRlkoQ0hBUlNFVF9XSU5ET1dTX0NPREVQQUdFKSAiXSIpOworICByZXR1cm4gV0VPRjsKK30KKworaW50Citjb252ZXJ0V2NoYXJUb0NoYXIgKHdjaGFyX3Qgd2MpIHsKKyAgY2hhciBjOworICBpbnQgcmVzdWx0ID0gV2lkZUNoYXJUb011bHRpQnl0ZShDSEFSU0VUX1dJTkRPV1NfQ09ERVBBR0UsIFdDX05PX0JFU1RfRklUX0NIQVJTIC8qIFdDX0VSUl9JTlZBTElEX0NIQVJTICovLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmd2MsIDEsICZjLCAxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCBOVUxMKTsKKyAgaWYgKHJlc3VsdCkgcmV0dXJuIGMgJiAwWEZGOworICBsb2dXaW5kb3dzU3lzdGVtRXJyb3IoIldpZGVDaGFyVG9NdWx0aUJ5dGVbIiBTVFJJTkdJRlkoQ0hBUlNFVF9XSU5ET1dTX0NPREVQQUdFKSAiXSIpOworICByZXR1cm4gRU9GOworfQorCitjb25zdCBjaGFyICoKK2dldExvY2FsZUNoYXJzZXQgKHZvaWQpIHsKKyAgY29uc3QgY2hhciAqbG9jYWxlID0gc2V0bG9jYWxlKExDX0FMTCwgIiIpOworCisgIGlmIChsb2NhbGUgJiYgIWlzUG9zaXhMb2NhbGUobG9jYWxlKSkgeworICAgIC8qIHNvbWUgOC1iaXQgbG9jYWxlIGlzIHNldCwgYXNzdW1lIGl0cyBjaGFyc2V0IGlzIGNvcnJlY3QgKi8KKyAgICBzdGF0aWMgY2hhciBjb2RlcGFnZVs4XSA9IHsnQycsICdQJ307CisKKyAgICBHZXRMb2NhbGVJbmZvKEdldFRocmVhZExvY2FsZSgpLCBMT0NBTEVfSURFRkFVTFRBTlNJQ09ERVBBR0UsIGNvZGVwYWdlKzIsIHNpemVvZihjb2RlcGFnZSktMik7CisgICAgcmV0dXJuIGNvZGVwYWdlOworICB9CisKKyAgcmV0dXJuIGRlZmF1bHRDaGFyc2V0OworfQorCitpbnQKK3JlZ2lzdGVyQ2hhcmFjdGVyU2V0IChjb25zdCBjaGFyICpjaGFyc2V0KSB7CisgIHJldHVybiAxOworfQpkaWZmIC0tZ2l0IGEvUHJvZ3JhbXMvY2xkci5jIGIvUHJvZ3JhbXMvY2xkci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgyMjVkZjEKLS0tIC9kZXYvbnVsbAorKysgYi9Qcm9ncmFtcy9jbGRyLmMKQEAgLTAsMCArMSwzMjEgQEAKKy8qCisgKiBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorICogICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorICoKKyAqIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorICoKKyAqIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyAqLworCisjaW5jbHVkZSAicHJvbG9ndWUuaCIKKworI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8ZmNudGwuaD4KKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorCisjaW5jbHVkZSAibG9nLmgiCisjaW5jbHVkZSAiY2xkci5oIgorI2luY2x1ZGUgImZpbGUuaCIKKworI3VuZGVmIEhBVkVfWE1MX1BST0NFU1NPUgorCisjaWYgZGVmaW5lZChIQVZFX0VYUEFUKQorI2RlZmluZSBIQVZFX1hNTF9QUk9DRVNTT1IKKyNpbmNsdWRlIDxleHBhdC5oPgorCisjZWxzZSAvKiBYTUwgcHJvY2Vzc29yICovCisjZW5kaWYgLyogWE1MIHByb2Nlc3NvciAqLworCisjaWZkZWYgSEFWRV9YTUxfUFJPQ0VTU09SCitzdHJ1Y3QgQ0xEUl9Eb2N1bWVudFBhcnNlck9iamVjdFN0cnVjdCB7CisgIHN0cnVjdCB7CisgICAgQ0xEUl9Bbm5vdGF0aW9uSGFuZGxlciAqaGFuZGxlcjsKKyAgICB2b2lkICpkYXRhOworICB9IGNhbGxlcjsKKworICBzdHJ1Y3QgeworICAgIFhNTF9QYXJzZXIgcGFyc2VyOworICAgIHVuc2lnbmVkIGludCBkZXB0aDsKKyAgfSBkb2N1bWVudDsKKworICBzdHJ1Y3QgeworICAgIGNoYXIgKnNlcXVlbmNlOworICAgIGNoYXIgKm5hbWU7CisgICAgdW5zaWduZWQgaW50IGRlcHRoOworICB9IGFubm90YXRpb247Cit9OworCitzdGF0aWMgdm9pZAorYWJvcnRQYXJzZXIgKENMRFJfRG9jdW1lbnRQYXJzZXJPYmplY3QgKmRwbykgeworICBYTUxfU3RvcFBhcnNlcihkcG8tPmRvY3VtZW50LnBhcnNlciwgMCk7Cit9CisKK3N0YXRpYyB2b2lkCithcHBlbmRBbm5vdGF0aW9uVGV4dCAodm9pZCAqdXNlckRhdGEsIGNvbnN0IGNoYXIgKmNoYXJhY3RlcnMsIGludCBjb3VudCkgeworICBDTERSX0RvY3VtZW50UGFyc2VyT2JqZWN0ICpkcG8gPSB1c2VyRGF0YTsKKworICBpZiAoZHBvLT5kb2N1bWVudC5kZXB0aCA9PSBkcG8tPmFubm90YXRpb24uZGVwdGgpIHsKKyAgICBpZiAoY291bnQgPiAwKSB7CisgICAgICBjaGFyICpuYW1lID0gZHBvLT5hbm5vdGF0aW9uLm5hbWU7CisKKyAgICAgIGlmIChuYW1lKSB7CisgICAgICAgIHNpemVfdCBvbGRMZW5ndGggPSBzdHJsZW4obmFtZSk7CisgICAgICAgIHNpemVfdCBuZXdMZW5ndGggPSBvbGRMZW5ndGggKyBjb3VudDsKKyAgICAgICAgY2hhciAqbmV3TmFtZSA9IHJlYWxsb2MobmFtZSwgbmV3TGVuZ3RoKzEpOworCisgICAgICAgIGlmICghbmV3TmFtZSkgeworICAgICAgICAgIGxvZ01hbGxvY0Vycm9yKCk7CisgICAgICAgICAgYWJvcnRQYXJzZXIoZHBvKTsKKyAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBtZW1jcHkoJm5ld05hbWVbb2xkTGVuZ3RoXSwgY2hhcmFjdGVycywgY291bnQpOworICAgICAgICBuZXdOYW1lW25ld0xlbmd0aF0gPSAwOworICAgICAgICBuYW1lID0gbmV3TmFtZTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIGlmICghKG5hbWUgPSBtYWxsb2MoY291bnQrMSkpKSB7CisgICAgICAgICAgbG9nTWFsbG9jRXJyb3IoKTsKKyAgICAgICAgICBhYm9ydFBhcnNlcihkcG8pOworICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIG1lbWNweShuYW1lLCBjaGFyYWN0ZXJzLCBjb3VudCk7CisgICAgICAgIG5hbWVbY291bnRdID0gMDsKKyAgICAgIH0KKworICAgICAgZHBvLT5hbm5vdGF0aW9uLm5hbWUgPSBuYW1lOworICAgIH0KKyAgfQorfQorCitzdGF0aWMgdm9pZAoraGFuZGxlRWxlbWVudFN0YXJ0ICh2b2lkICp1c2VyRGF0YSwgY29uc3QgY2hhciAqZWxlbWVudCwgY29uc3QgY2hhciAqKmF0dHJpYnV0ZXMpIHsKKyAgQ0xEUl9Eb2N1bWVudFBhcnNlck9iamVjdCAqZHBvID0gdXNlckRhdGE7CisgIGRwby0+ZG9jdW1lbnQuZGVwdGggKz0gMTsKKworICBpZiAoZHBvLT5hbm5vdGF0aW9uLmRlcHRoKSB7CisgICAgbG9nTWVzc2FnZShMT0dfV0FSTklORywgIm5lc3RlZCBhbm5vdGF0aW9uIik7CisgICAgYWJvcnRQYXJzZXIoZHBvKTsKKyAgICByZXR1cm47CisgIH0KKworICBpZiAoc3RyY21wKGVsZW1lbnQsICJhbm5vdGF0aW9uIikgPT0gMCkgeworICAgIGNvbnN0IGNoYXIgKnNlcXVlbmNlID0gTlVMTDsKKyAgICBpbnQgdHRzID0gMDsKKworICAgIHdoaWxlICgqYXR0cmlidXRlcykgeworICAgICAgY29uc3QgY2hhciAqbmFtZSA9ICphdHRyaWJ1dGVzKys7CisgICAgICBjb25zdCBjaGFyICp2YWx1ZSA9ICphdHRyaWJ1dGVzKys7CisKKyAgICAgIGlmIChzdHJjbXAobmFtZSwgInR5cGUiKSA9PSAwKSB7CisgICAgICAgIGlmIChzdHJjbXAodmFsdWUsICJ0dHMiKSA9PSAwKSB0dHMgPSAxOworICAgICAgfSBlbHNlIGlmIChzdHJjbXAobmFtZSwgImNwIikgPT0gMCkgeworICAgICAgICBzZXF1ZW5jZSA9IHZhbHVlOworICAgICAgfQorICAgIH0KKworICAgIGlmICh0dHMpIHsKKyAgICAgIGlmIChzZXF1ZW5jZSkgeworICAgICAgICBpZiAoKGRwby0+YW5ub3RhdGlvbi5zZXF1ZW5jZSA9IHN0cmR1cChzZXF1ZW5jZSkpKSB7CisgICAgICAgICAgZHBvLT5hbm5vdGF0aW9uLmRlcHRoID0gZHBvLT5kb2N1bWVudC5kZXB0aDsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICBsb2dNYWxsb2NFcnJvcigpOworICAgICAgICAgIGFib3J0UGFyc2VyKGRwbyk7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9CisgIH0KK30KKworc3RhdGljIHZvaWQKK2hhbmRsZUVsZW1lbnRFbmQgKHZvaWQgKnVzZXJEYXRhLCBjb25zdCBjaGFyICpuYW1lKSB7CisgIENMRFJfRG9jdW1lbnRQYXJzZXJPYmplY3QgKmRwbyA9IHVzZXJEYXRhOworCisgIGlmIChkcG8tPmRvY3VtZW50LmRlcHRoID09IGRwby0+YW5ub3RhdGlvbi5kZXB0aCkgeworICAgIGlmIChkcG8tPmFubm90YXRpb24ubmFtZSkgeworICAgICAgQ0xEUl9Bbm5vdGF0aW9uSGFuZGxlclBhcmFtZXRlcnMgcGFyYW1ldGVycyA9IHsKKyAgICAgICAgLnNlcXVlbmNlID0gZHBvLT5hbm5vdGF0aW9uLnNlcXVlbmNlLAorICAgICAgICAubmFtZSA9IGRwby0+YW5ub3RhdGlvbi5uYW1lLAorICAgICAgICAuZGF0YSA9IGRwby0+Y2FsbGVyLmRhdGEKKyAgICAgIH07CisKKyAgICAgIGlmICghZHBvLT5jYWxsZXIuaGFuZGxlcigmcGFyYW1ldGVycykpIHsKKyAgICAgICAgYWJvcnRQYXJzZXIoZHBvKTsKKyAgICAgICAgcmV0dXJuOworICAgICAgfQorCisgICAgICBmcmVlKGRwby0+YW5ub3RhdGlvbi5uYW1lKTsKKyAgICAgIGRwby0+YW5ub3RhdGlvbi5uYW1lID0gTlVMTDsKKyAgICB9CisKKyAgICBmcmVlKGRwby0+YW5ub3RhdGlvbi5zZXF1ZW5jZSk7CisgICAgZHBvLT5hbm5vdGF0aW9uLnNlcXVlbmNlID0gTlVMTDsKKworICAgIGRwby0+YW5ub3RhdGlvbi5kZXB0aCA9IDA7CisgIH0KKworICBkcG8tPmRvY3VtZW50LmRlcHRoIC09IDE7Cit9CisKK0NMRFJfRG9jdW1lbnRQYXJzZXJPYmplY3QgKgorY2xkck5ld0RvY3VtZW50UGFyc2VyIChDTERSX0Fubm90YXRpb25IYW5kbGVyICpoYW5kbGVyLCB2b2lkICpkYXRhKSB7CisgIENMRFJfRG9jdW1lbnRQYXJzZXJPYmplY3QgKmRwbzsKKworICBpZiAoKGRwbyA9IG1hbGxvYyhzaXplb2YoKmRwbykpKSkgeworICAgIG1lbXNldChkcG8sIDAsIHNpemVvZigqZHBvKSk7CisKKyAgICBkcG8tPmNhbGxlci5oYW5kbGVyID0gaGFuZGxlcjsKKyAgICBkcG8tPmNhbGxlci5kYXRhID0gZGF0YTsKKworICAgIGRwby0+ZG9jdW1lbnQuZGVwdGggPSAwOworCisgICAgZHBvLT5hbm5vdGF0aW9uLnNlcXVlbmNlID0gTlVMTDsKKyAgICBkcG8tPmFubm90YXRpb24ubmFtZSA9IE5VTEw7CisgICAgZHBvLT5hbm5vdGF0aW9uLmRlcHRoID0gMDsKKworICAgIGlmICgoZHBvLT5kb2N1bWVudC5wYXJzZXIgPSBYTUxfUGFyc2VyQ3JlYXRlKE5VTEwpKSkgeworICAgICAgWE1MX1NldFVzZXJEYXRhKGRwby0+ZG9jdW1lbnQucGFyc2VyLCBkcG8pOworICAgICAgWE1MX1NldEVsZW1lbnRIYW5kbGVyKGRwby0+ZG9jdW1lbnQucGFyc2VyLCBoYW5kbGVFbGVtZW50U3RhcnQsIGhhbmRsZUVsZW1lbnRFbmQpOworICAgICAgWE1MX1NldENoYXJhY3RlckRhdGFIYW5kbGVyKGRwby0+ZG9jdW1lbnQucGFyc2VyLCBhcHBlbmRBbm5vdGF0aW9uVGV4dCk7CisgICAgICByZXR1cm4gZHBvOworICAgIH0gZWxzZSB7CisgICAgICBsb2dNYWxsb2NFcnJvcigpOworICAgIH0KKworICAgIGZyZWUoZHBvKTsKKyAgfSBlbHNlIHsKKyAgICBsb2dNYWxsb2NFcnJvcigpOworICB9CisKKyAgcmV0dXJuIE5VTEw7Cit9CisKK3ZvaWQKK2NsZHJEZXN0cm95RG9jdW1lbnRQYXJzZXIgKENMRFJfRG9jdW1lbnRQYXJzZXJPYmplY3QgKmRwbykgeworICBpZiAoZHBvLT5hbm5vdGF0aW9uLnNlcXVlbmNlKSB7CisgICAgZnJlZShkcG8tPmFubm90YXRpb24uc2VxdWVuY2UpOworICAgIGRwby0+YW5ub3RhdGlvbi5zZXF1ZW5jZSA9IE5VTEw7CisgIH0KKworICBpZiAoZHBvLT5hbm5vdGF0aW9uLm5hbWUpIHsKKyAgICBmcmVlKGRwby0+YW5ub3RhdGlvbi5uYW1lKTsKKyAgICBkcG8tPmFubm90YXRpb24ubmFtZSA9IE5VTEw7CisgIH0KKworICBYTUxfUGFyc2VyRnJlZShkcG8tPmRvY3VtZW50LnBhcnNlcik7CisgIGZyZWUoZHBvKTsKK30KKworaW50CitjbGRyUGFyc2VUZXh0IChDTERSX0RvY3VtZW50UGFyc2VyT2JqZWN0ICpkcG8sIGNvbnN0IGNoYXIgKnRleHQsIHNpemVfdCBzaXplLCBpbnQgZmluYWwpIHsKKyAgZW51bSBYTUxfU3RhdHVzIHN0YXR1cyA9IFhNTF9QYXJzZShkcG8tPmRvY3VtZW50LnBhcnNlciwgdGV4dCwgc2l6ZSwgZmluYWwpOworCisgIHN3aXRjaCAoc3RhdHVzKSB7CisgICAgY2FzZSBYTUxfU1RBVFVTX09LOgorICAgICAgcmV0dXJuIDE7CisKKyAgICBjYXNlIFhNTF9TVEFUVVNfRVJST1I6CisgICAgICBsb2dNZXNzYWdlKExPR19XQVJOSU5HLCAiQ0xEUiBwYXJzZSBlcnJvcjogJXMiLCBYTUxfRXJyb3JTdHJpbmcoWE1MX0dldEVycm9yQ29kZShkcG8tPmRvY3VtZW50LnBhcnNlcikpKTsKKyAgICAgIGJyZWFrOworCisgICAgZGVmYXVsdDoKKyAgICAgIGxvZ01lc3NhZ2UoTE9HX1dBUk5JTkcsICJ1bnJlY29nbml6ZWQgQ0xEUiBwYXJzZSBzdGF0dXM6ICVkIiwgc3RhdHVzKTsKKyAgICAgIGJyZWFrOworICB9CisKKyAgcmV0dXJuIDA7Cit9CisKK2ludAorY2xkclBhcnNlRG9jdW1lbnQgKAorICBjb25zdCBjaGFyICpkb2N1bWVudCwgc2l6ZV90IHNpemUsCisgIENMRFJfQW5ub3RhdGlvbkhhbmRsZXIgKmhhbmRsZXIsIHZvaWQgKmRhdGEKKykgeworICBpbnQgb2sgPSAwOworICBDTERSX0RvY3VtZW50UGFyc2VyT2JqZWN0ICpkcG8gPSBjbGRyTmV3RG9jdW1lbnRQYXJzZXIoaGFuZGxlciwgZGF0YSk7CisKKyAgaWYgKGRwbykgeworICAgIGlmIChjbGRyUGFyc2VUZXh0KGRwbywgZG9jdW1lbnQsIHNpemUsIDEpKSBvayA9IDE7CisgICAgY2xkckRlc3Ryb3lEb2N1bWVudFBhcnNlcihkcG8pOworICB9CisKKyAgcmV0dXJuIG9rOworfQorI2VuZGlmIC8qIEhBVkVfWE1MX1BST0NFU1NPUiAqLworCitjb25zdCBjaGFyIGNsZHJBbm5vdGF0aW9uc0RpcmVjdG9yeVtdID0gIi91c3Ivc2hhcmUvdW5pY29kZS9jbGRyL2NvbW1vbi9hbm5vdGF0aW9ucyI7Citjb25zdCBjaGFyIGNsZHJBbm5vdGF0aW9uc0V4dGVuc2lvbltdID0gIi54bWwiOworCitpbnQKK2NsZHJQYXJzZUZpbGUgKAorICBjb25zdCBjaGFyICpuYW1lLAorICBDTERSX0Fubm90YXRpb25IYW5kbGVyICpoYW5kbGVyLCB2b2lkICpkYXRhCispIHsKKyAgaW50IG9rID0gMDsKKworI2lmZGVmIEhBVkVfWE1MX1BST0NFU1NPUgorICBjaGFyICpwYXRoID0gbWFrZUZpbGVQYXRoKGNsZHJBbm5vdGF0aW9uc0RpcmVjdG9yeSwgbmFtZSwgY2xkckFubm90YXRpb25zRXh0ZW5zaW9uKTsKKworICBpZiAocGF0aCkgeworICAgIGxvZ01lc3NhZ2UoTE9HX0RFQlVHLCAicHJvY2Vzc2luZyBDTERSIGFubm90YXRpb25zIGZpbGU6ICVzIiwgcGF0aCk7CisgICAgaW50IGZkID0gb3BlbihwYXRoLCBPX1JET05MWSk7CisKKyAgICBpZiAoZmQgIT0gLTEpIHsKKyAgICAgIENMRFJfRG9jdW1lbnRQYXJzZXJPYmplY3QgKmRwbyA9IGNsZHJOZXdEb2N1bWVudFBhcnNlcihoYW5kbGVyLCBkYXRhKTsKKworICAgICAgaWYgKGRwbykgeworICAgICAgICB3aGlsZSAoMSkgeworICAgICAgICAgIGNoYXIgYnVmZmVyWzBYMjAwMF07CisgICAgICAgICAgc2l6ZV90IHNpemUgPSBzaXplb2YoYnVmZmVyKTsKKyAgICAgICAgICBzc2l6ZV90IGNvdW50ID0gcmVhZChmZCwgYnVmZmVyLCBzaXplKTsKKworICAgICAgICAgIGlmIChjb3VudCA9PSAtMSkgeworICAgICAgICAgICAgaWYgKGVycm5vID09IEVJTlRSKSBjb250aW51ZTsKKyAgICAgICAgICAgIGxvZ01lc3NhZ2UoTE9HX1dBUk5JTkcsICJDTERSIHJlYWQgZXJyb3I6ICVzOiAlcyIsIHN0cmVycm9yKGVycm5vKSwgcGF0aCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICB9CisKKyAgICAgICAgICBpbnQgZmluYWwgPSBjb3VudCA9PSAwOworICAgICAgICAgIGlmICghY2xkclBhcnNlVGV4dChkcG8sIGJ1ZmZlciwgY291bnQsIGZpbmFsKSkgYnJlYWs7CisKKyAgICAgICAgICBpZiAoZmluYWwpIHsKKyAgICAgICAgICAgIG9rID0gMTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGNsZHJEZXN0cm95RG9jdW1lbnRQYXJzZXIoZHBvKTsKKyAgICAgIH0KKworICAgICAgY2xvc2UoZmQpOworICAgICAgZmQgPSAtMTsKKyAgICB9IGVsc2UgeworICAgICAgbG9nTWVzc2FnZShMT0dfV0FSTklORywgIkNMRFIgb3BlbiBlcnJvcjogJXM6ICVzIiwgc3RyZXJyb3IoZXJybm8pLCBwYXRoKTsKKworICAgICAgaWYgKGVycm5vID09IEVOT0VOVCkgeworICAgICAgICBpZiAoIWlzQWJzb2x1dGVQYXRoKG5hbWUpKSB7CisgICAgICAgICAgaWYgKCF0ZXN0RGlyZWN0b3J5UGF0aChjbGRyQW5ub3RhdGlvbnNEaXJlY3RvcnkpKSB7CisgICAgICAgICAgICBsb2dQb3NzaWJsZUNhdXNlKCJ0aGUgcGFja2FnZSB0aGF0IGRlZmluZXMgdGhlIENMRFIgYW5ub3RhdGlvbnMgZGlyZWN0b3J5IGlzIG5vdCBpbnN0YWxsZWQiKTsKKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9CisKKyAgICBmcmVlKHBhdGgpOworICB9CisjZWxzZSAvKiBIQVZFX1hNTF9QUk9DRVNTT1IgKi8KKyAgbG9nTWVzc2FnZShMT0dfV0FSTklORywgIkNMRFIgZGF0YSBjYW4ndCBiZSBsb2FkZWQgLSBubyBzdXBwb3J0ZWQgWE1MIHBhcnNlciIpOworI2VuZGlmIC8qIEhBVkVfWE1MX1BST0NFU1NPUiAqLworCisgIHJldHVybiBvazsKK30KZGlmZiAtLWdpdCBhL1Byb2dyYW1zL2NsaXBib2FyZC5jIGIvUHJvZ3JhbXMvY2xpcGJvYXJkLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzhiOTE4MwotLS0gL2Rldi9udWxsCisrKyBiL1Byb2dyYW1zL2NsaXBib2FyZC5jCkBAIC0wLDAgKzEsMjg3IEBACisvKgorICogQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyAqICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyAqCisgKiBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorICoKKyAqIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyAqCisgKiBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisgKi8KKworI2luY2x1ZGUgInByb2xvZ3VlLmgiCisKKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxjdHlwZS5oPgorCisjaW5jbHVkZSAibG9nLmgiCisjaW5jbHVkZSAiY2xpcGJvYXJkLmgiCisjaW5jbHVkZSAidXRmOC5oIgorI2luY2x1ZGUgInF1ZXVlLmgiCisjaW5jbHVkZSAibG9jay5oIgorI2luY2x1ZGUgInByb2dyYW0uaCIKKyNpbmNsdWRlICJhcGlfY29udHJvbC5oIgorCit0eXBlZGVmIHN0cnVjdCB7CisgIHdjaGFyX3QgKmNoYXJhY3RlcnM7CisgIHNpemVfdCBsZW5ndGg7Cit9IEhpc3RvcnlFbnRyeTsKKworc3RydWN0IENsaXBib2FyZE9iamVjdFN0cnVjdCB7CisgIHN0cnVjdCB7CisgICAgd2NoYXJfdCAqY2hhcmFjdGVyczsKKyAgICBzaXplX3Qgc2l6ZTsKKyAgICBzaXplX3QgbGVuZ3RoOworICB9IGJ1ZmZlcjsKKworICBzdHJ1Y3QgeworICAgIFF1ZXVlICpxdWV1ZTsKKyAgfSBoaXN0b3J5OworfTsKKworY29uc3Qgd2NoYXJfdCAqCitnZXRDbGlwYm9hcmRIaXN0b3J5IChDbGlwYm9hcmRPYmplY3QgKmNwYiwgdW5zaWduZWQgaW50IGluZGV4LCBzaXplX3QgKmxlbmd0aCkgeworICBFbGVtZW50ICplbGVtZW50ID0gZ2V0U3RhY2tFbGVtZW50KGNwYi0+aGlzdG9yeS5xdWV1ZSwgaW5kZXgpOworICBpZiAoIWVsZW1lbnQpIHJldHVybiBOVUxMOworCisgIGNvbnN0IEhpc3RvcnlFbnRyeSAqZW50cnkgPSBnZXRFbGVtZW50SXRlbShlbGVtZW50KTsKKyAgKmxlbmd0aCA9IGVudHJ5LT5sZW5ndGg7CisgIHJldHVybiBlbnRyeS0+Y2hhcmFjdGVyczsKK30KKworaW50CithZGRDbGlwYm9hcmRIaXN0b3J5IChDbGlwYm9hcmRPYmplY3QgKmNwYiwgY29uc3Qgd2NoYXJfdCAqY2hhcmFjdGVycywgc2l6ZV90IGxlbmd0aCkgeworICBpZiAoIWxlbmd0aCkgcmV0dXJuIDE7CisKKyAgUXVldWUgKnF1ZXVlID0gY3BiLT5oaXN0b3J5LnF1ZXVlOworICBFbGVtZW50ICplbGVtZW50ID0gZ2V0U3RhY2tIZWFkKHF1ZXVlKTsKKworICBpZiAoZWxlbWVudCkgeworICAgIGNvbnN0IEhpc3RvcnlFbnRyeSAqZW50cnkgPSBnZXRFbGVtZW50SXRlbShlbGVtZW50KTsKKworICAgIGlmIChsZW5ndGggPT0gZW50cnktPmxlbmd0aCkgeworICAgICAgaWYgKHdtZW1jbXAoY2hhcmFjdGVycywgZW50cnktPmNoYXJhY3RlcnMsIGxlbmd0aCkgPT0gMCkgeworICAgICAgICByZXR1cm4gMTsKKyAgICAgIH0KKyAgICB9CisgIH0KKworICB7CisgICAgSGlzdG9yeUVudHJ5ICplbnRyeTsKKworICAgIGlmICgoZW50cnkgPSBtYWxsb2Moc2l6ZW9mKCplbnRyeSkpKSkgeworICAgICAgaWYgKChlbnRyeS0+Y2hhcmFjdGVycyA9IGFsbG9jYXRlQ2hhcmFjdGVycyhsZW5ndGgpKSkgeworICAgICAgICB3bWVtY3B5KGVudHJ5LT5jaGFyYWN0ZXJzLCBjaGFyYWN0ZXJzLCBsZW5ndGgpOworICAgICAgICBlbnRyeS0+bGVuZ3RoID0gbGVuZ3RoOworCisgICAgICAgIGlmIChlbnF1ZXVlSXRlbShxdWV1ZSwgZW50cnkpKSB7CisgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgIH0KKworICAgICAgICBmcmVlKGVudHJ5LT5jaGFyYWN0ZXJzKTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIGxvZ01hbGxvY0Vycm9yKCk7CisgICAgICB9CisKKyAgICAgIGZyZWUoZW50cnkpOworICAgIH0gZWxzZSB7CisgICAgICBsb2dNYWxsb2NFcnJvcigpOworICAgIH0KKyAgfQorCisgIHJldHVybiAwOworfQorCitjb25zdCB3Y2hhcl90ICoKK2dldENsaXBib2FyZENvbnRlbnQgKENsaXBib2FyZE9iamVjdCAqY3BiLCBzaXplX3QgKmxlbmd0aCkgeworICAqbGVuZ3RoID0gY3BiLT5idWZmZXIubGVuZ3RoOworICByZXR1cm4gY3BiLT5idWZmZXIuY2hhcmFjdGVyczsKK30KKworY2hhciAqCitnZXRDbGlwYm9hcmRDb250ZW50VVRGOCAoQ2xpcGJvYXJkT2JqZWN0ICpjcGIpIHsKKyAgc2l6ZV90IGxlbmd0aDsKKyAgY29uc3Qgd2NoYXJfdCAqY2hhcmFjdGVycyA9IGdldENsaXBib2FyZENvbnRlbnQoY3BiLCAmbGVuZ3RoKTsKKyAgcmV0dXJuIGdldFV0ZjhGcm9tV2NoYXJzKGNoYXJhY3RlcnMsIGxlbmd0aCwgTlVMTCk7Cit9CisKK3NpemVfdAorZ2V0Q2xpcGJvYXJkQ29udGVudExlbmd0aCAoQ2xpcGJvYXJkT2JqZWN0ICpjcGIpIHsKKyAgcmV0dXJuIGNwYi0+YnVmZmVyLmxlbmd0aDsKK30KKworaW50Cit0cnVuY2F0ZUNsaXBib2FyZENvbnRlbnQgKENsaXBib2FyZE9iamVjdCAqY3BiLCBzaXplX3QgbGVuZ3RoKSB7CisgIGlmIChsZW5ndGggPj0gY3BiLT5idWZmZXIubGVuZ3RoKSByZXR1cm4gMDsKKyAgY3BiLT5idWZmZXIubGVuZ3RoID0gbGVuZ3RoOworICByZXR1cm4gMTsKK30KKworaW50CitjbGVhckNsaXBib2FyZENvbnRlbnQgKENsaXBib2FyZE9iamVjdCAqY3BiKSB7CisgIHNpemVfdCBsZW5ndGg7CisgIGNvbnN0IHdjaGFyX3QgKmNoYXJhY3RlcnMgPSBnZXRDbGlwYm9hcmRDb250ZW50KGNwYiwgJmxlbmd0aCk7CisKKyAgaWYgKCFhZGRDbGlwYm9hcmRIaXN0b3J5KGNwYiwgY2hhcmFjdGVycywgbGVuZ3RoKSkgcmV0dXJuIDA7CisgIHRydW5jYXRlQ2xpcGJvYXJkQ29udGVudChjcGIsIDApOworICByZXR1cm4gMTsKK30KKworaW50CithcHBlbmRDbGlwYm9hcmRDb250ZW50IChDbGlwYm9hcmRPYmplY3QgKmNwYiwgY29uc3Qgd2NoYXJfdCAqY2hhcmFjdGVycywgc2l6ZV90IGxlbmd0aCkgeworICBzaXplX3QgbmV3TGVuZ3RoID0gY3BiLT5idWZmZXIubGVuZ3RoICsgbGVuZ3RoOworCisgIGlmIChuZXdMZW5ndGggPiBjcGItPmJ1ZmZlci5zaXplKSB7CisgICAgc2l6ZV90IG5ld1NpemUgPSBuZXdMZW5ndGggfCAwWEZGOworICAgIHdjaGFyX3QgKm5ld0NoYXJhY3RlcnMgPSBhbGxvY2F0ZUNoYXJhY3RlcnMobmV3U2l6ZSk7CisKKyAgICBpZiAoIW5ld0NoYXJhY3RlcnMpIHsKKyAgICAgIGxvZ01hbGxvY0Vycm9yKCk7CisgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICB3bWVtY3B5KG5ld0NoYXJhY3RlcnMsIGNwYi0+YnVmZmVyLmNoYXJhY3RlcnMsIGNwYi0+YnVmZmVyLmxlbmd0aCk7CisgICAgaWYgKGNwYi0+YnVmZmVyLmNoYXJhY3RlcnMpIGZyZWUoY3BiLT5idWZmZXIuY2hhcmFjdGVycyk7CisgICAgY3BiLT5idWZmZXIuY2hhcmFjdGVycyA9IG5ld0NoYXJhY3RlcnM7CisgICAgY3BiLT5idWZmZXIuc2l6ZSA9IG5ld1NpemU7CisgIH0KKworICB3bWVtY3B5KCZjcGItPmJ1ZmZlci5jaGFyYWN0ZXJzW2NwYi0+YnVmZmVyLmxlbmd0aF0sIGNoYXJhY3RlcnMsIGxlbmd0aCk7CisgIGNwYi0+YnVmZmVyLmxlbmd0aCArPSBsZW5ndGg7CisgIHJldHVybiAxOworfQorCitpbnQKK3NldENsaXBib2FyZENvbnRlbnQgKENsaXBib2FyZE9iamVjdCAqY3BiLCBjb25zdCB3Y2hhcl90ICpjaGFyYWN0ZXJzLCBzaXplX3QgbGVuZ3RoKSB7CisgIGludCB0cnVuY2F0ZWQgPSB0cnVuY2F0ZUNsaXBib2FyZENvbnRlbnQoY3BiLCAwKTsKKyAgaW50IGFwcGVuZGVkID0gYXBwZW5kQ2xpcGJvYXJkQ29udGVudChjcGIsIGNoYXJhY3RlcnMsIGxlbmd0aCk7CisgIHJldHVybiB0cnVuY2F0ZWQgfHwgYXBwZW5kZWQ7Cit9CisKK2ludAorYXBwZW5kQ2xpcGJvYXJkQ29udGVudFVURjggKENsaXBib2FyZE9iamVjdCAqY3BiLCBjb25zdCBjaGFyICp0ZXh0KSB7CisgIHNpemVfdCBsZW5ndGggPSBzdHJsZW4odGV4dCk7CisgIHdjaGFyX3QgY2hhcmFjdGVyc1tsZW5ndGggKyAxXTsKKyAgc2l6ZV90IGNvdW50ID0gbWFrZVdjaGFyc0Zyb21VdGY4KHRleHQsIGNoYXJhY3RlcnMsIEFSUkFZX0NPVU5UKGNoYXJhY3RlcnMpKTsKKyAgcmV0dXJuIGFwcGVuZENsaXBib2FyZENvbnRlbnQoY3BiLCBjaGFyYWN0ZXJzLCBjb3VudCk7Cit9CisKK2ludAorc2V0Q2xpcGJvYXJkQ29udGVudFVURjggKENsaXBib2FyZE9iamVjdCAqY3BiLCBjb25zdCBjaGFyICp0ZXh0KSB7CisgIGludCB0cnVuY2F0ZWQgPSB0cnVuY2F0ZUNsaXBib2FyZENvbnRlbnQoY3BiLCAwKTsKKyAgaW50IGFwcGVuZGVkID0gYXBwZW5kQ2xpcGJvYXJkQ29udGVudFVURjgoY3BiLCB0ZXh0KTsKKyAgcmV0dXJuIHRydW5jYXRlZCB8fCBhcHBlbmRlZDsKK30KKworc3RhdGljIHZvaWQKK2RlYWxsb2NhdGVDbGlwYm9hcmRIaXN0b3J5RW50cnkgKHZvaWQgKml0ZW0sIHZvaWQgKmRhdGEpIHsKKyAgSGlzdG9yeUVudHJ5ICplbnRyeSA9IGl0ZW07CisgIGlmIChlbnRyeS0+Y2hhcmFjdGVycykgZnJlZShlbnRyeS0+Y2hhcmFjdGVycyk7CisgIGZyZWUoZW50cnkpOworfQorCitDbGlwYm9hcmRPYmplY3QgKgorbmV3Q2xpcGJvYXJkICh2b2lkKSB7CisgIENsaXBib2FyZE9iamVjdCAqY3BiOworCisgIGlmICgoY3BiID0gbWFsbG9jKHNpemVvZigqY3BiKSkpKSB7CisgICAgbWVtc2V0KGNwYiwgMCwgc2l6ZW9mKCpjcGIpKTsKKworICAgIGNwYi0+YnVmZmVyLmNoYXJhY3RlcnMgPSBOVUxMOworICAgIGNwYi0+YnVmZmVyLnNpemUgPSAwOworICAgIGNwYi0+YnVmZmVyLmxlbmd0aCA9IDA7CisKKyAgICBpZiAoKGNwYi0+aGlzdG9yeS5xdWV1ZSA9IG5ld1F1ZXVlKGRlYWxsb2NhdGVDbGlwYm9hcmRIaXN0b3J5RW50cnksIE5VTEwpKSkgeworICAgICAgcmV0dXJuIGNwYjsKKyAgICB9CisgIH0gZWxzZSB7CisgICAgbG9nTWFsbG9jRXJyb3IoKTsKKyAgfQorCisgIHJldHVybiBOVUxMOworfQorCit2b2lkCitkZXN0cm95Q2xpcGJvYXJkIChDbGlwYm9hcmRPYmplY3QgKmNwYikgeworICBpZiAoY3BiLT5idWZmZXIuY2hhcmFjdGVycykgZnJlZShjcGItPmJ1ZmZlci5jaGFyYWN0ZXJzKTsKKyAgZGVhbGxvY2F0ZVF1ZXVlKGNwYi0+aGlzdG9yeS5xdWV1ZSk7CisgIGZyZWUoY3BiKTsKK30KKworc3RhdGljIExvY2tEZXNjcmlwdG9yICoKK2dldE1haW5DbGlwYm9hcmRMb2NrICh2b2lkKSB7CisgIHN0YXRpYyBMb2NrRGVzY3JpcHRvciAqbG9jayA9IE5VTEw7CisgIHJldHVybiBnZXRMb2NrRGVzY3JpcHRvcigmbG9jaywgIm1haW4tY2xpcGJvYXJkIik7Cit9CisKK3ZvaWQKK2xvY2tNYWluQ2xpcGJvYXJkICh2b2lkKSB7CisgIG9idGFpbkV4Y2x1c2l2ZUxvY2soZ2V0TWFpbkNsaXBib2FyZExvY2soKSk7Cit9CisKK3ZvaWQKK3VubG9ja01haW5DbGlwYm9hcmQgKHZvaWQpIHsKKyAgcmVsZWFzZUxvY2soZ2V0TWFpbkNsaXBib2FyZExvY2soKSk7Cit9CisKK3N0YXRpYyB2b2lkCitleGl0TWFpbkNsaXBib2FyZCAodm9pZCAqZGF0YSkgeworICBDbGlwYm9hcmRPYmplY3QgKipjbGlwYm9hcmQgPSBkYXRhOworCisgIGxvY2tNYWluQ2xpcGJvYXJkKCk7CisgICAgZGVzdHJveUNsaXBib2FyZCgqY2xpcGJvYXJkKTsKKyAgICAqY2xpcGJvYXJkID0gTlVMTDsKKyAgdW5sb2NrTWFpbkNsaXBib2FyZCgpOworfQorCitDbGlwYm9hcmRPYmplY3QgKgorZ2V0TWFpbkNsaXBib2FyZCAodm9pZCkgeworICBzdGF0aWMgQ2xpcGJvYXJkT2JqZWN0ICpjbGlwYm9hcmQgPSBOVUxMOworCisgIGxvY2tNYWluQ2xpcGJvYXJkKCk7CisgICAgaWYgKCFjbGlwYm9hcmQpIHsKKyAgICAgIGlmICgoY2xpcGJvYXJkID0gbmV3Q2xpcGJvYXJkKCkpKSB7CisgICAgICAgIG9uUHJvZ3JhbUV4aXQoIm1haW4tY2xpcGJvYXJkIiwgZXhpdE1haW5DbGlwYm9hcmQsICZjbGlwYm9hcmQpOworICAgICAgfQorICAgIH0KKyAgdW5sb2NrTWFpbkNsaXBib2FyZCgpOworCisgIHJldHVybiBjbGlwYm9hcmQ7Cit9CisKK3ZvaWQKK29uTWFpbkNsaXBib2FyZFVwZGF0ZWQgKHZvaWQpIHsKKyAgYXBpLnVwZGF0ZVBhcmFtZXRlcihCUkxBUElfUEFSQU1fQ0xJUEJPQVJEX0NPTlRFTlQsIDApOworfQorCitpbnQKK3NldE1haW5DbGlwYm9hcmRDb250ZW50IChjb25zdCBjaGFyICpjb250ZW50KSB7CisgIENsaXBib2FyZE9iamVjdCAqY3BiID0gZ2V0TWFpbkNsaXBib2FyZCgpOworICBpbnQgdXBkYXRlZDsKKworICBsb2NrTWFpbkNsaXBib2FyZCgpOworICAgIHVwZGF0ZWQgPSBzZXRDbGlwYm9hcmRDb250ZW50VVRGOChjcGIsIGNvbnRlbnQpOworICB1bmxvY2tNYWluQ2xpcGJvYXJkKCk7CisKKyAgaWYgKHVwZGF0ZWQpIG9uTWFpbkNsaXBib2FyZFVwZGF0ZWQoKTsKKyAgcmV0dXJuIHVwZGF0ZWQ7Cit9CisKK2NoYXIgKgorZ2V0TWFpbkNsaXBib2FyZENvbnRlbnQgKHZvaWQpIHsKKyAgQ2xpcGJvYXJkT2JqZWN0ICpjcGIgPSBnZXRNYWluQ2xpcGJvYXJkKCk7CisgIGNoYXIgKmNvbnRlbnQ7CisKKyAgbG9ja01haW5DbGlwYm9hcmQoKTsKKyAgICBjb250ZW50ID0gZ2V0Q2xpcGJvYXJkQ29udGVudFVURjgoY3BiKTsKKyAgdW5sb2NrTWFpbkNsaXBib2FyZCgpOworCisgIHJldHVybiBjb250ZW50OworfQpkaWZmIC0tZ2l0IGEvUHJvZ3JhbXMvY21kLmMgYi9Qcm9ncmFtcy9jbWQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZDExYWUyCi0tLSAvZGV2L251bGwKKysrIGIvUHJvZ3JhbXMvY21kLmMKQEAgLTAsMCArMSwzNzcgQEAKKy8qCisgKiBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorICogICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorICoKKyAqIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorICoKKyAqIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyAqLworCisjaW5jbHVkZSAicHJvbG9ndWUuaCIKKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKyNpbmNsdWRlICJsb2cuaCIKKyNpbmNsdWRlICJzdHJmbXQuaCIKKyNpbmNsdWRlICJicmxfY21kcy5oIgorI2luY2x1ZGUgImJybF9jdXN0b20uaCIKKyNpbmNsdWRlICJjbWQuaCIKKyNpbmNsdWRlICJwcm9ncmFtLmgiCisKK2NvbnN0IENvbW1hbmRFbnRyeSBjb21tYW5kVGFibGVbXSA9IHsKKyAgI2luY2x1ZGUgImNtZHMuYXV0by5oIgorICB7Lm5hbWU9TlVMTCwgLmNvZGU9RU9GLCAuZGVzY3JpcHRpb249TlVMTH0KK307CisKK2NvbnN0IENvbW1hbmRNb2RpZmllckVudHJ5IGNvbW1hbmRNb2RpZmllclRhYmxlX3RvZ2dsZVtdID0geworICB7Lm5hbWU9Im9uIiAsIC5iaXQ9QlJMX0ZMR19UT0dHTEVfT04gfSwKKyAgey5uYW1lPSJvZmYiLCAuYml0PUJSTF9GTEdfVE9HR0xFX09GRn0sCisgIHsubmFtZT1OVUxMICwgLmJpdD0wICAgICAgICAgICAgICAgICB9Cit9OworCitjb25zdCBDb21tYW5kTW9kaWZpZXJFbnRyeSBjb21tYW5kTW9kaWZpZXJUYWJsZV9tb3Rpb25bXSA9IHsKKyAgey5uYW1lPSJyb3V0ZSIsIC5iaXQ9QlJMX0ZMR19NT1RJT05fUk9VVEV9LAorICB7Lm5hbWU9TlVMTCAgICwgLmJpdD0wICAgICAgICAgICAgICAgICAgIH0KK307CisKK2NvbnN0IENvbW1hbmRNb2RpZmllckVudHJ5IGNvbW1hbmRNb2RpZmllclRhYmxlX3Jvd1tdID0geworICB7Lm5hbWU9InNjYWxlZCIsIC5iaXQ9QlJMX0ZMR19NT1RJT05fU0NBTEVEfSwKKyAgey5uYW1lPU5VTEwgICAgLCAuYml0PTAgICAgICAgICAgICAgICAgICAgIH0KK307CisKK2NvbnN0IENvbW1hbmRNb2RpZmllckVudHJ5IGNvbW1hbmRNb2RpZmllclRhYmxlX3ZlcnRpY2FsW10gPSB7CisgIHsubmFtZT0idG9sZWZ0IiwgLmJpdD1CUkxfRkxHX01PVElPTl9UT0xFRlR9LAorICB7Lm5hbWU9TlVMTCAgICAsIC5iaXQ9MCAgICAgICAgICAgICAgICAgICAgfQorfTsKKworY29uc3QgQ29tbWFuZE1vZGlmaWVyRW50cnkgY29tbWFuZE1vZGlmaWVyVGFibGVfaW5wdXRbXSA9IHsKKyAgey5uYW1lPSJzaGlmdCIgICwgLmJpdD1CUkxfRkxHX0lOUFVUX1NISUZUICB9LAorICB7Lm5hbWU9ImNvbnRyb2wiLCAuYml0PUJSTF9GTEdfSU5QVVRfQ09OVFJPTH0sCisgIHsubmFtZT0ibWV0YSIgICAsIC5iaXQ9QlJMX0ZMR19JTlBVVF9NRVRBICAgfSwKKyAgey5uYW1lPSJhbHRnciIgICwgLmJpdD1CUkxfRkxHX0lOUFVUX0FMVEdSICB9LAorICB7Lm5hbWU9Imd1aSIgICAgLCAuYml0PUJSTF9GTEdfSU5QVVRfR1VJICAgIH0sCisgIHsubmFtZT1OVUxMICAgICAsIC5iaXQ9MCAgICAgICAgICAgICAgICAgICAgfQorfTsKKworY29uc3QgQ29tbWFuZE1vZGlmaWVyRW50cnkgY29tbWFuZE1vZGlmaWVyVGFibGVfY2hhcmFjdGVyW10gPSB7CisgIHsubmFtZT0idXBwZXIiICAsIC5iaXQ9QlJMX0ZMR19JTlBVVF9VUFBFUiAgfSwKKyAgey5uYW1lPSJlc2NhcGVkIiwgLmJpdD1CUkxfRkxHX0lOUFVUX0VTQ0FQRUR9LAorICB7Lm5hbWU9TlVMTCAgICAgLCAuYml0PTAgICAgICAgICAgICAgICAgICAgIH0KK307CisKK2NvbnN0IENvbW1hbmRNb2RpZmllckVudHJ5IGNvbW1hbmRNb2RpZmllclRhYmxlX2JyYWlsbGVbXSA9IHsKKyAgey5uYW1lPSJkb3QxIiAsIC5iaXQ9QlJMX0RPVDF9LAorICB7Lm5hbWU9ImRvdDIiICwgLmJpdD1CUkxfRE9UMn0sCisgIHsubmFtZT0iZG90MyIgLCAuYml0PUJSTF9ET1QzfSwKKyAgey5uYW1lPSJkb3Q0IiAsIC5iaXQ9QlJMX0RPVDR9LAorICB7Lm5hbWU9ImRvdDUiICwgLmJpdD1CUkxfRE9UNX0sCisgIHsubmFtZT0iZG90NiIgLCAuYml0PUJSTF9ET1Q2fSwKKyAgey5uYW1lPSJkb3Q3IiAsIC5iaXQ9QlJMX0RPVDd9LAorICB7Lm5hbWU9ImRvdDgiICwgLmJpdD1CUkxfRE9UOH0sCisgIHsubmFtZT0ic3BhY2UiLCAuYml0PUJSTF9ET1RDfSwKKyAgey5uYW1lPU5VTEwgICAsIC5iaXQ9MCAgICAgICB9Cit9OworCitjb25zdCBDb21tYW5kTW9kaWZpZXJFbnRyeSBjb21tYW5kTW9kaWZpZXJUYWJsZV9rZXlib2FyZFtdID0geworICB7Lm5hbWU9InJlbGVhc2UiLCAuYml0PUJSTF9GTEdfS0JEX1JFTEVBU0V9LAorICB7Lm5hbWU9ImVtdWwwIiAgLCAuYml0PUJSTF9GTEdfS0JEX0VNVUwwICB9LAorICB7Lm5hbWU9ImVtdWwxIiAgLCAuYml0PUJSTF9GTEdfS0JEX0VNVUwxICB9LAorICB7Lm5hbWU9TlVMTCAgICAgLCAuYml0PTAgICAgICAgICAgICAgICAgICB9Cit9OworCitzdGF0aWMgaW50Citjb21wYXJlQ29tbWFuZENvZGVzIChjb25zdCB2b2lkICplbGVtZW50MSwgY29uc3Qgdm9pZCAqZWxlbWVudDIpIHsKKyAgY29uc3QgQ29tbWFuZEVudHJ5ICpjb25zdCAqY21kMSA9IGVsZW1lbnQxOworICBjb25zdCBDb21tYW5kRW50cnkgKmNvbnN0ICpjbWQyID0gZWxlbWVudDI7CisKKyAgaWYgKCgqY21kMSktPmNvZGUgPCAoKmNtZDIpLT5jb2RlKSByZXR1cm4gLTE7CisgIGlmICgoKmNtZDEpLT5jb2RlID4gKCpjbWQyKS0+Y29kZSkgcmV0dXJuIDE7CisgIHJldHVybiAwOworfQorCitpbnQKK2dldENvbW1hbmRDb3VudCAodm9pZCkgeworICBzdGF0aWMgaW50IGNvbW1hbmRDb3VudCA9IC0xOworCisgIGlmIChjb21tYW5kQ291bnQgPCAwKSB7CisgICAgY29uc3QgQ29tbWFuZEVudHJ5ICpjbWQgPSBjb21tYW5kVGFibGU7CisgICAgd2hpbGUgKGNtZC0+bmFtZSkgY21kICs9IDE7CisgICAgY29tbWFuZENvdW50ID0gY21kIC0gY29tbWFuZFRhYmxlOworICB9CisKKyAgcmV0dXJuIGNvbW1hbmRDb3VudDsKK30KKworY29uc3QgQ29tbWFuZEVudHJ5ICoKK2ZpbmRDb21tYW5kRW50cnkgKGludCBjb2RlKSB7CisgIHN0YXRpYyBjb25zdCBDb21tYW5kRW50cnkgKipjb21tYW5kRW50cmllcyA9IE5VTEw7CisgIGludCBjb3VudCA9IGdldENvbW1hbmRDb3VudCgpOworICBjb2RlICY9IEJSTF9NU0tfQ01EOworCisgIGlmICghY29tbWFuZEVudHJpZXMpIHsKKyAgICBjb25zdCBDb21tYW5kRW50cnkgKiplbnRyaWVzID0gbWFsbG9jKEFSUkFZX1NJWkUoZW50cmllcywgY291bnQpKTsKKworICAgIGlmICghZW50cmllcykgeworICAgICAgbG9nTWFsbG9jRXJyb3IoKTsKKyAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIHsKKyAgICAgIGNvbnN0IENvbW1hbmRFbnRyeSAqY21kID0gY29tbWFuZFRhYmxlOworICAgICAgY29uc3QgQ29tbWFuZEVudHJ5ICoqZW50cnkgPSBlbnRyaWVzOworICAgICAgd2hpbGUgKGNtZC0+bmFtZSkgKmVudHJ5KysgPSBjbWQrKzsKKyAgICB9CisKKyAgICBxc29ydChlbnRyaWVzLCBjb3VudCwgc2l6ZW9mKCplbnRyaWVzKSwgY29tcGFyZUNvbW1hbmRDb2Rlcyk7CisgICAgY29tbWFuZEVudHJpZXMgPSBlbnRyaWVzOworICAgIHJlZ2lzdGVyUHJvZ3JhbU1lbW9yeSgic29ydGVkLWNvbW1hbmQtdGFibGUiLCAmY29tbWFuZEVudHJpZXMpOworICB9CisKKyAgeworICAgIGludCBmaXJzdCA9IDA7CisgICAgaW50IGxhc3QgPSBjb3VudCAtIDE7CisKKyAgICB3aGlsZSAoZmlyc3QgPD0gbGFzdCkgeworICAgICAgaW50IGN1cnJlbnQgPSAoZmlyc3QgKyBsYXN0KSAvIDI7CisgICAgICBjb25zdCBDb21tYW5kRW50cnkgKmNtZCA9IGNvbW1hbmRFbnRyaWVzW2N1cnJlbnRdOworCisgICAgICBpZiAoY29kZSA8IGNtZC0+Y29kZSkgeworICAgICAgICBsYXN0ID0gY3VycmVudCAtIDE7CisgICAgICB9IGVsc2UgeworICAgICAgICBmaXJzdCA9IGN1cnJlbnQgKyAxOworICAgICAgfQorICAgIH0KKworICAgIGlmIChsYXN0ID49IDApIHsKKyAgICAgIGNvbnN0IENvbW1hbmRFbnRyeSAqY21kID0gY29tbWFuZEVudHJpZXNbbGFzdF07CisgICAgICBpbnQgYmxrID0gY21kLT5jb2RlICYgQlJMX01TS19CTEs7CisgICAgICBpbnQgYXJnID0gY21kLT5jb2RlICYgQlJMX01TS19BUkc7CisKKyAgICAgIGlmIChibGsgPT0gKGNvZGUgJiBCUkxfTVNLX0JMSykpIHsKKyAgICAgICAgaWYgKGFyZyA9PSAoY29kZSAmIEJSTF9NU0tfQVJHKSkgcmV0dXJuIGNtZDsKKworICAgICAgICBpZiAoYmxrKSB7CisgICAgICAgICAgaW50IG5leHQgPSBsYXN0ICsgMTsKKyAgICAgICAgICBpZiAobmV4dCA9PSBjb3VudCkgcmV0dXJuIGNtZDsKKworICAgICAgICAgIGlmIChibGsgIT0gKGNvbW1hbmRFbnRyaWVzW25leHRdLT5jb2RlICYgQlJMX01TS19CTEspKSB7CisgICAgICAgICAgICByZXR1cm4gY21kOworICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgfQorICAgIH0KKyAgfQorCisgIHJldHVybiBOVUxMOworfQorCitzdGF0aWMKK1NUUl9CRUdJTl9GT1JNQVRURVIoZm9ybWF0Q29tbWFuZE1vZGlmaWVycywgaW50IGNvbW1hbmQsIGNvbnN0IENvbW1hbmRNb2RpZmllckVudHJ5ICptb2RpZmllcnMpCisgIGNvbnN0IENvbW1hbmRNb2RpZmllckVudHJ5ICptb2RpZmllciA9IG1vZGlmaWVyczsKKworICB3aGlsZSAobW9kaWZpZXItPm5hbWUpIHsKKyAgICBpZiAoY29tbWFuZCAmIG1vZGlmaWVyLT5iaXQpIHsKKyAgICAgIFNUUl9QUklOVEYoIiArICVzIiwgbW9kaWZpZXItPm5hbWUpOworICAgIH0KKworICAgIG1vZGlmaWVyICs9IDE7CisgIH0KK1NUUl9FTkRfRk9STUFUVEVSCisKK1NUUl9CRUdJTl9GT1JNQVRURVIoZGVzY3JpYmVDb21tYW5kLCBpbnQgY29tbWFuZCwgQ29tbWFuZERlc2NyaXB0aW9uT3B0aW9uIG9wdGlvbnMpCisgIHVuc2lnbmVkIGludCBhcmcgPSBCUkxfQVJHX0dFVChjb21tYW5kKTsKKyAgdW5zaWduZWQgaW50IGFyZzEgPSBCUkxfQ09ERV9HRVQoQVJHLCBjb21tYW5kKTsKKyAgdW5zaWduZWQgaW50IGFyZzIgPSBCUkxfQ09ERV9HRVQoRVhULCBjb21tYW5kKTsKKyAgY29uc3QgQ29tbWFuZEVudHJ5ICpjbWQgPSBmaW5kQ29tbWFuZEVudHJ5KGNvbW1hbmQpOworCisgIGlmICghY21kKSB7CisgICAgU1RSX1BSSU5URigiJXM6ICUwNlgiLCBnZXR0ZXh0KCJ1bmtub3duIGNvbW1hbmQiKSwgY29tbWFuZCk7CisgIH0gZWxzZSB7CisgICAgaWYgKG9wdGlvbnMgJiBDRE9fSW5jbHVkZU5hbWUpIHsKKyAgICAgIFNUUl9QUklOVEYoIiVzOiAiLCBjbWQtPm5hbWUpOworICAgIH0KKworICAgIGlmIChjbWQtPmlzVG9nZ2xlICYmIChjb21tYW5kICYgQlJMX0ZMR19UT0dHTEVfTUFTSykpIHsKKyAgICAgIGNvbnN0IGNoYXIgKnRleHQgPSBnZXR0ZXh0KGNtZC0+ZGVzY3JpcHRpb24pOworICAgICAgc2l6ZV90IGxlbmd0aCA9IHN0cmxlbih0ZXh0KTsKKyAgICAgIGNoYXIgYnVmZmVyW2xlbmd0aCArIDFdOworICAgICAgY2hhciAqZGVsaW1pdGVyOworCisgICAgICBzdHJjcHkoYnVmZmVyLCB0ZXh0KTsKKyAgICAgIGRlbGltaXRlciA9IHN0cmNocihidWZmZXIsICcvJyk7CisKKyAgICAgIGlmIChkZWxpbWl0ZXIpIHsKKyAgICAgICAgY2hhciAqc291cmNlOworICAgICAgICBjaGFyICp0YXJnZXQ7CisKKyAgICAgICAgaWYgKGNvbW1hbmQgJiBCUkxfRkxHX1RPR0dMRV9PTikgeworICAgICAgICAgIHRhcmdldCA9IGRlbGltaXRlcjsKKyAgICAgICAgICBpZiAoIShzb3VyY2UgPSBzdHJjaHIodGFyZ2V0LCAnICcpKSkgc291cmNlID0gdGFyZ2V0ICsgc3RybGVuKHRhcmdldCk7CisgICAgICAgIH0gZWxzZSBpZiAoY29tbWFuZCAmIEJSTF9GTEdfVE9HR0xFX09GRikgeworICAgICAgICAgIHsKKyAgICAgICAgICAgIGNoYXIgb2xkRGVsaW1pdGVyID0gKmRlbGltaXRlcjsKKyAgICAgICAgICAgICpkZWxpbWl0ZXIgPSAwOworICAgICAgICAgICAgdGFyZ2V0ID0gc3RycmNocihidWZmZXIsICcgJyk7CisgICAgICAgICAgICAqZGVsaW1pdGVyID0gb2xkRGVsaW1pdGVyOworICAgICAgICAgIH0KKworICAgICAgICAgIHRhcmdldCA9IHRhcmdldD8gKHRhcmdldCArIDEpOiBidWZmZXI7CisgICAgICAgICAgc291cmNlID0gZGVsaW1pdGVyICsgMTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICBnb3RvIHRvZ2dsZVJlYWR5OworICAgICAgICB9CisKKyAgICAgICAgbWVtbW92ZSh0YXJnZXQsIHNvdXJjZSwgKHN0cmxlbihzb3VyY2UpICsgMSkpOworICAgICAgfQorCisgICAgdG9nZ2xlUmVhZHk6CisgICAgICBTVFJfUFJJTlRGKCIlcyIsIGJ1ZmZlcik7CisgICAgfSBlbHNlIHsKKyAgICAgIFNUUl9QUklOVEYoIiVzIiwgZ2V0dGV4dChjbWQtPmRlc2NyaXB0aW9uKSk7CisgICAgfQorCisgICAgaWYgKG9wdGlvbnMgJiBDRE9fSW5jbHVkZU9wZXJhbmQpIHsKKyAgICAgIGlmIChjbWQtPmlzQ2hhcmFjdGVyKSB7CisgICAgICAgIFNUUl9QUklOVEYoIiBbVSslMDRYXSIsIGFyZyk7CisgICAgICB9CisKKyAgICAgIGlmIChjbWQtPmlzQnJhaWxsZSkgeworICAgICAgICBpbnQgbm9uZSA9IDE7CisgICAgICAgIFNUUl9QUklOVEYoIiBbIik7CisKKyAgICAgICAgeworICAgICAgICAgIHN0YXRpYyBjb25zdCBpbnQgZG90c1tdID0geworICAgICAgICAgICAgQlJMX0RPVEMsCisgICAgICAgICAgICBCUkxfRE9UMSwgQlJMX0RPVDIsIEJSTF9ET1QzLCBCUkxfRE9UNCwKKyAgICAgICAgICAgIEJSTF9ET1Q1LCBCUkxfRE9UNiwgQlJMX0RPVDcsIEJSTF9ET1Q4LAorICAgICAgICAgICAgMAorICAgICAgICAgIH07CisgICAgICAgICAgY29uc3QgaW50ICpkb3QgPSBkb3RzOworCisgICAgICAgICAgd2hpbGUgKCpkb3QpIHsKKyAgICAgICAgICAgIGlmIChjb21tYW5kICYgKmRvdCkgeworICAgICAgICAgICAgICBub25lID0gMDsKKworICAgICAgICAgICAgICBpZiAoZG90ID09IGRvdHMpIHsKKyAgICAgICAgICAgICAgICBTVFJfUFJJTlRGKCJDIik7CisgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IG51bWJlciA9IGRvdCAtIGRvdHM7CisgICAgICAgICAgICAgICAgU1RSX1BSSU5URigiJXUiLCBudW1iZXIpOworICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGRvdCArPSAxOworICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmIChub25lKSBTVFJfUFJJTlRGKCIlcyIsIGdldHRleHQoInNwYWNlIikpOworICAgICAgICBTVFJfUFJJTlRGKCJdIik7CisgICAgICB9CisKKyAgICAgIGlmIChjbWQtPmlzS2V5Ym9hcmQpIHsKKyAgICAgICAgU1RSX1BSSU5URigiIFtcXFglMDJYXSIsIGFyZzEpOworICAgICAgfQorCisgICAgICBpZiAoY21kLT5pc0NvbHVtbiAmJiAhY21kLT5pc1JvdXRpbmcgJiYgKAorICAgICAgICAgICAoYXJnID09IEJSTF9NU0tfQVJHKSAvKiBrZXkgZXZlbnQgcHJvY2Vzc2luZyAqLworICAgICAgICAgfHwKKyAgICAgICAgICAgKChvcHRpb25zICYgQ0RPX0RlZmF1bHRPcGVyYW5kKSAmJiAhYXJnKSAvKiBrZXkgdGFibGUgbGlzdGluZyAqLworICAgICAgICAgKSkgeworICAgICAgICBTVFJfUFJJTlRGKCIgJXMiLCBnZXR0ZXh0KCJhdCBjdXJzb3IiKSk7CisgICAgICB9IGVsc2UgaWYgKGNtZC0+aXNDb2x1bW4gfHwgY21kLT5pc1JvdyB8fCBjbWQtPmlzT2Zmc2V0KSB7CisgICAgICAgIGludCBvZmZzZXQgPSBhcmcgLSAoY21kLT5jb2RlICYgQlJMX01TS19BUkcpOworICAgICAgICBTVFJfUFJJTlRGKCIgIyV1Iiwgb2Zmc2V0KzEpOworICAgICAgfSBlbHNlIGlmIChjbWQtPmlzUmFuZ2UpIHsKKyAgICAgICAgU1RSX1BSSU5URigiICMldS0ldSIsIGFyZzEsIGFyZzIpOworICAgICAgfQorCisgICAgICBpZiAoY21kLT5pc0lucHV0KSB7CisgICAgICAgIFNUUl9GT1JNQVQoZm9ybWF0Q29tbWFuZE1vZGlmaWVycywgY29tbWFuZCwgY29tbWFuZE1vZGlmaWVyVGFibGVfaW5wdXQpOworICAgICAgfQorCisgICAgICBpZiAoY21kLT5pc0NoYXJhY3RlcikgeworICAgICAgICBTVFJfRk9STUFUKGZvcm1hdENvbW1hbmRNb2RpZmllcnMsIGNvbW1hbmQsIGNvbW1hbmRNb2RpZmllclRhYmxlX2NoYXJhY3Rlcik7CisgICAgICB9CisKKyAgICAgIGlmIChjbWQtPmlzS2V5Ym9hcmQpIHsKKyAgICAgICAgU1RSX0ZPUk1BVChmb3JtYXRDb21tYW5kTW9kaWZpZXJzLCBjb21tYW5kLCBjb21tYW5kTW9kaWZpZXJUYWJsZV9rZXlib2FyZCk7CisgICAgICB9CisgICAgfQorCisgICAgaWYgKGNtZC0+aXNNb3Rpb24pIHsKKyAgICAgIFNUUl9GT1JNQVQoZm9ybWF0Q29tbWFuZE1vZGlmaWVycywgY29tbWFuZCwgY29tbWFuZE1vZGlmaWVyVGFibGVfbW90aW9uKTsKKyAgICB9CisKKyAgICBpZiAoY21kLT5pc1JvdykgeworICAgICAgU1RSX0ZPUk1BVChmb3JtYXRDb21tYW5kTW9kaWZpZXJzLCBjb21tYW5kLCBjb21tYW5kTW9kaWZpZXJUYWJsZV9yb3cpOworICAgIH0KKworICAgIGlmIChjbWQtPmlzVmVydGljYWwpIHsKKyAgICAgIFNUUl9GT1JNQVQoZm9ybWF0Q29tbWFuZE1vZGlmaWVycywgY29tbWFuZCwgY29tbWFuZE1vZGlmaWVyVGFibGVfdmVydGljYWwpOworICAgIH0KKyAgfQorU1RSX0VORF9GT1JNQVRURVIKKworc3RhdGljCitTVFJfQkVHSU5fRk9STUFUVEVSKGZvcm1hdENvbW1hbmQsIGludCBjb21tYW5kKQorICBTVFJfUFJJTlRGKCIlMDZYICgiLCBjb21tYW5kKTsKKyAgU1RSX0ZPUk1BVChkZXNjcmliZUNvbW1hbmQsIGNvbW1hbmQsIENET19JbmNsdWRlTmFtZSB8IENET19JbmNsdWRlT3BlcmFuZCk7CisgIFNUUl9QUklOVEYoIikiKTsKK1NUUl9FTkRfRk9STUFUVEVSCisKK3R5cGVkZWYgc3RydWN0IHsKKyAgaW50IGNvbW1hbmQ7Cit9IExvZ0NvbW1hbmREYXRhOworCitzdGF0aWMKK1NUUl9CRUdJTl9GT1JNQVRURVIoZm9ybWF0TG9nQ29tbWFuZERhdGEsIGNvbnN0IHZvaWQgKmRhdGEpCisgIGNvbnN0IExvZ0NvbW1hbmREYXRhICpjbWQgPSBkYXRhOworCisgIFNUUl9QUklOVEYoImNvbW1hbmQ6ICIpOworICBTVFJfRk9STUFUKGZvcm1hdENvbW1hbmQsIGNtZC0+Y29tbWFuZCk7CitTVFJfRU5EX0ZPUk1BVFRFUgorCit2b2lkCitsb2dDb21tYW5kIChpbnQgY29tbWFuZCkgeworICBjb25zdCBMb2dDb21tYW5kRGF0YSBjbWQgPSB7CisgICAgLmNvbW1hbmQgPSBjb21tYW5kCisgIH07CisKKyAgbG9nRGF0YShMT0dfREVCVUcsIGZvcm1hdExvZ0NvbW1hbmREYXRhLCAmY21kKTsKK30KKwordHlwZWRlZiBzdHJ1Y3QgeworICBpbnQgb2xkQ29tbWFuZDsKKyAgaW50IG5ld0NvbW1hbmQ7Cit9IExvZ1RyYW5zZm9ybWVkQ29tbWFuZERhdGE7CisKK3N0YXRpYworU1RSX0JFR0lOX0ZPUk1BVFRFUihmb3JtYXRMb2dUcmFuc2Zvcm1lZENvbW1hbmREYXRhLCBjb25zdCB2b2lkICpkYXRhKQorICBjb25zdCBMb2dUcmFuc2Zvcm1lZENvbW1hbmREYXRhICpjbWQgPSBkYXRhOworCisgIFNUUl9QUklOVEYoImNvbW1hbmQ6ICIpOworICBTVFJfRk9STUFUKGZvcm1hdENvbW1hbmQsIGNtZC0+b2xkQ29tbWFuZCk7CisKKyAgU1RSX1BSSU5URigiIC0+ICIpOworICBTVFJfRk9STUFUKGZvcm1hdENvbW1hbmQsIGNtZC0+bmV3Q29tbWFuZCk7CitTVFJfRU5EX0ZPUk1BVFRFUgorCit2b2lkCitsb2dUcmFuc2Zvcm1lZENvbW1hbmQgKGludCBvbGRDb21tYW5kLCBpbnQgbmV3Q29tbWFuZCkgeworICBjb25zdCBMb2dUcmFuc2Zvcm1lZENvbW1hbmREYXRhIGNtZCA9IHsKKyAgICAub2xkQ29tbWFuZCA9IG9sZENvbW1hbmQsCisgICAgLm5ld0NvbW1hbmQgPSBuZXdDb21tYW5kCisgIH07CisKKyAgbG9nRGF0YShMT0dfREVCVUcsIGZvcm1hdExvZ1RyYW5zZm9ybWVkQ29tbWFuZERhdGEsICZjbWQpOworfQpkaWZmIC0tZ2l0IGEvUHJvZ3JhbXMvY21kX2JybGFwaS5jIGIvUHJvZ3JhbXMvY21kX2JybGFwaS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFkMjIxMzMKLS0tIC9kZXYvbnVsbAorKysgYi9Qcm9ncmFtcy9jbWRfYnJsYXBpLmMKQEAgLTAsMCArMSwyMTAgQEAKKy8qCisgKiBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorICogICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorICoKKyAqIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorICoKKyAqIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyAqLworCisjaW5jbHVkZSAicHJvbG9ndWUuaCIKKworI2luY2x1ZGUgPHN0ZGlvLmg+CisKKyNpbmNsdWRlICJjbWRfYnJsYXBpLmgiCisjaW5jbHVkZSAiYnJsX2NtZHMuaCIKKyNpbmNsdWRlICJ0dGIuaCIKKworI2lmZGVmIEVOQUJMRV9BUEkKK3N0YXRpYyBicmxhcGlfa2V5Q29kZV90CitjbWRXQ2hhclRvQnJsYXBpICh3Y2hhcl90IHdjKSB7CisgIGlmIChpc3dMYXRpbjEod2MpKSByZXR1cm4gQlJMQVBJX0tFWV9UWVBFX1NZTSB8IHdjOworICByZXR1cm4gQlJMQVBJX0tFWV9UWVBFX1NZTSB8IEJSTEFQSV9LRVlfU1lNX1VOSUNPREUgfCB3YzsKK30KKworaW50CitjbWRCcmx0dHlUb0JybGFwaSAoYnJsYXBpX2tleUNvZGVfdCAqY29kZSwgaW50IGNvbW1hbmQsIGludCByZXRhaW5Eb3RzKSB7CisgIGludCBibGsgPSBjb21tYW5kICYgQlJMX01TS19CTEs7CisgIGludCBhcmcgPSBCUkxfQVJHX0dFVChjb21tYW5kKTsKKworICBzd2l0Y2ggKGJsaykgeworICAgIGNhc2UgQlJMX0NNRF9CTEsoUEFTU0NIQVIpOgorICAgICAgKmNvZGUgPSBjbWRXQ2hhclRvQnJsYXBpKGFyZyk7CisgICAgICBicmVhazsKKworICAgIGNhc2UgQlJMX0NNRF9CTEsoUEFTU0RPVFMpOgorICAgICAgaWYgKHJldGFpbkRvdHMpIGdvdG8gZG9EZWZhdWx0OworICAgICAgKmNvZGUgPSBjbWRXQ2hhclRvQnJsYXBpKGNvbnZlcnRJbnB1dFRvQ2hhcmFjdGVyKGFyZykpOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIEJSTF9DTURfQkxLKFBBU1NLRVkpOgorICAgICAgc3dpdGNoIChhcmcpIHsKKyAgICAgICAgY2FzZSBCUkxfS0VZX0VOVEVSOiAgICAgICAgKmNvZGUgPSBCUkxBUElfS0VZX1NZTV9MSU5FRkVFRDsgIGJyZWFrOworICAgICAgICBjYXNlIEJSTF9LRVlfVEFCOiAgICAgICAgICAqY29kZSA9IEJSTEFQSV9LRVlfU1lNX1RBQjsgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQlJMX0tFWV9CQUNLU1BBQ0U6ICAgICpjb2RlID0gQlJMQVBJX0tFWV9TWU1fQkFDS1NQQUNFOyBicmVhazsKKyAgICAgICAgY2FzZSBCUkxfS0VZX0VTQ0FQRTogICAgICAgKmNvZGUgPSBCUkxBUElfS0VZX1NZTV9FU0NBUEU7ICAgIGJyZWFrOworICAgICAgICBjYXNlIEJSTF9LRVlfQ1VSU09SX0xFRlQ6ICAqY29kZSA9IEJSTEFQSV9LRVlfU1lNX0xFRlQ7ICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQlJMX0tFWV9DVVJTT1JfUklHSFQ6ICpjb2RlID0gQlJMQVBJX0tFWV9TWU1fUklHSFQ7ICAgICBicmVhazsKKyAgICAgICAgY2FzZSBCUkxfS0VZX0NVUlNPUl9VUDogICAgKmNvZGUgPSBCUkxBUElfS0VZX1NZTV9VUDsgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEJSTF9LRVlfQ1VSU09SX0RPV046ICAqY29kZSA9IEJSTEFQSV9LRVlfU1lNX0RPV047ICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQlJMX0tFWV9QQUdFX1VQOiAgICAgICpjb2RlID0gQlJMQVBJX0tFWV9TWU1fUEFHRV9VUDsgICBicmVhazsKKyAgICAgICAgY2FzZSBCUkxfS0VZX1BBR0VfRE9XTjogICAgKmNvZGUgPSBCUkxBUElfS0VZX1NZTV9QQUdFX0RPV047IGJyZWFrOworICAgICAgICBjYXNlIEJSTF9LRVlfSE9NRTogICAgICAgICAqY29kZSA9IEJSTEFQSV9LRVlfU1lNX0hPTUU7ICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQlJMX0tFWV9FTkQ6ICAgICAgICAgICpjb2RlID0gQlJMQVBJX0tFWV9TWU1fRU5EOyAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBCUkxfS0VZX0lOU0VSVDogICAgICAgKmNvZGUgPSBCUkxBUElfS0VZX1NZTV9JTlNFUlQ7ICAgIGJyZWFrOworICAgICAgICBjYXNlIEJSTF9LRVlfREVMRVRFOiAgICAgICAqY29kZSA9IEJSTEFQSV9LRVlfU1lNX0RFTEVURTsgICAgYnJlYWs7CisKKyAgICAgICAgZGVmYXVsdDogeworICAgICAgICAgIGludCBrZXkgPSBhcmcgLSBCUkxfS0VZX0ZVTkNUSU9OOworICAgICAgICAgIGlmIChrZXkgPCAwKSByZXR1cm4gMDsKKyAgICAgICAgICBpZiAoa2V5ID4gMzQpIHJldHVybiAwOworICAgICAgICAgICpjb2RlID0gQlJMQVBJX0tFWV9TWU1fRlVOQ1RJT04gKyBrZXk7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICAgIGJyZWFrOworCisgICAgZGVmYXVsdDoKKyAgICBkb0RlZmF1bHQ6CisgICAgICAqY29kZSA9IEJSTEFQSV9LRVlfVFlQRV9DTUQKKyAgICAgICAgICAgIHwgKGJsayA+PiBCUkxfU0hJRlRfQkxLIDw8IEJSTEFQSV9LRVlfQ01EX0JMS19TSElGVCkKKyAgICAgICAgICAgIHwgKGFyZyAgICAgICAgICAgICAgICAgIDw8IEJSTEFQSV9LRVlfQ01EX0FSR19TSElGVCkKKyAgICAgICAgICAgIDsKKyAgICAgIGJyZWFrOworICB9CisKKyAgc3dpdGNoIChibGspIHsKKyAgICBjYXNlIEJSTF9DTURfQkxLKFBBU1NDSEFSKToKKyAgICBjYXNlIEJSTF9DTURfQkxLKFBBU1NET1RTKToKKyAgICBjYXNlIEJSTF9DTURfQkxLKFBBU1NLRVkpOgorICAgICAgKmNvZGUgPSAqY29kZQorICAgICAgICAgICAgfCAoY29tbWFuZCAmIEJSTF9GTEdfSU5QVVRfU0hJRlQgICA/IEJSTEFQSV9LRVlfRkxHX1NISUZUICAgOiAwKQorICAgICAgICAgICAgfCAoY29tbWFuZCAmIEJSTF9GTEdfSU5QVVRfVVBQRVIgICA/IEJSTEFQSV9LRVlfRkxHX1VQUEVSICAgOiAwKQorICAgICAgICAgICAgfCAoY29tbWFuZCAmIEJSTF9GTEdfSU5QVVRfQ09OVFJPTCA/IEJSTEFQSV9LRVlfRkxHX0NPTlRST0wgOiAwKQorICAgICAgICAgICAgfCAoY29tbWFuZCAmIEJSTF9GTEdfSU5QVVRfTUVUQSAgICA/IEJSTEFQSV9LRVlfRkxHX01FVEEgICAgOiAwKQorICAgICAgICAgICAgfCAoY29tbWFuZCAmIEJSTF9GTEdfSU5QVVRfQUxUR1IgICA/IEJSTEFQSV9LRVlfRkxHX0FMVEdSICAgOiAwKQorICAgICAgICAgICAgfCAoY29tbWFuZCAmIEJSTF9GTEdfSU5QVVRfR1VJICAgICA/IEJSTEFQSV9LRVlfRkxHX0dVSSAgICAgOiAwKQorICAgICAgICAgICAgOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIEJSTF9DTURfQkxLKFBBU1NYVCk6CisgICAgY2FzZSBCUkxfQ01EX0JMSyhQQVNTQVQpOgorICAgIGNhc2UgQlJMX0NNRF9CTEsoUEFTU1BTMik6CisgICAgICAqY29kZSA9ICpjb2RlCisgICAgICAgICAgICB8IChjb21tYW5kICYgQlJMX0ZMR19LQkRfUkVMRUFTRSA/IEJSTEFQSV9LRVlfRkxHX0tCRF9SRUxFQVNFIDogMCkKKyAgICAgICAgICAgIHwgKGNvbW1hbmQgJiBCUkxfRkxHX0tCRF9FTVVMMCAgID8gQlJMQVBJX0tFWV9GTEdfS0JEX0VNVUwwICAgOiAwKQorICAgICAgICAgICAgfCAoY29tbWFuZCAmIEJSTF9GTEdfS0JEX0VNVUwxICAgPyBCUkxBUElfS0VZX0ZMR19LQkRfRU1VTDEgICA6IDApCisgICAgICAgICAgICA7CisgICAgICBicmVhazsKKworICAgIGRlZmF1bHQ6CisgICAgICAqY29kZSA9ICpjb2RlCisgICAgICAgICAgICB8IChjb21tYW5kICYgQlJMX0ZMR19UT0dHTEVfT04gICAgID8gQlJMQVBJX0tFWV9GTEdfVE9HR0xFX09OICAgICA6IDApCisgICAgICAgICAgICB8IChjb21tYW5kICYgQlJMX0ZMR19UT0dHTEVfT0ZGICAgID8gQlJMQVBJX0tFWV9GTEdfVE9HR0xFX09GRiAgICA6IDApCisgICAgICAgICAgICB8IChjb21tYW5kICYgQlJMX0ZMR19NT1RJT05fUk9VVEUgID8gQlJMQVBJX0tFWV9GTEdfTU9USU9OX1JPVVRFICA6IDApCisgICAgICAgICAgICB8IChjb21tYW5kICYgQlJMX0ZMR19NT1RJT05fU0NBTEVEID8gQlJMQVBJX0tFWV9GTEdfTU9USU9OX1NDQUxFRCA6IDApCisgICAgICAgICAgICB8IChjb21tYW5kICYgQlJMX0ZMR19NT1RJT05fVE9MRUZUID8gQlJMQVBJX0tFWV9GTEdfTU9USU9OX1RPTEVGVCA6IDApCisgICAgICAgICAgICA7CisgICAgICBicmVhazsKKyAgfQorCisgIHJldHVybiAxOworfQorCitpbnQKK2NtZEJybGFwaVRvQnJsdHR5IChicmxhcGlfa2V5Q29kZV90IGNvZGUpIHsKKyAgaW50IGNtZDsKKworICBzd2l0Y2ggKGNvZGUgJiBCUkxBUElfS0VZX1RZUEVfTUFTSykgeworICAgIGNhc2UgQlJMQVBJX0tFWV9UWVBFX0NNRDoKKyAgICAgIGNtZCA9IEJSTF9CTEtfUFVUKChjb2RlICYgQlJMQVBJX0tFWV9DTURfQkxLX01BU0spID4+IEJSTEFQSV9LRVlfQ01EX0JMS19TSElGVCk7CisgICAgICBjbWQgfD0gQlJMX0FSR19TRVQoKGNvZGUgJiBCUkxBUElfS0VZX0NNRF9BUkdfTUFTSykgPj4gQlJMQVBJX0tFWV9DTURfQVJHX1NISUZUKTsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBCUkxBUElfS0VZX1RZUEVfU1lNOiB7CisgICAgICB1bnNpZ25lZCBsb25nIGtleXN5bSA9IGNvZGUgJiBCUkxBUElfS0VZX0NPREVfTUFTSzsKKworICAgICAgc3dpdGNoIChrZXlzeW0pIHsKKyAgICAgICAgY2FzZSBCUkxBUElfS0VZX1NZTV9CQUNLU1BBQ0U6IGNtZCA9IEJSTF9DTURfQkxLKFBBU1NLRVkpfEJSTF9LRVlfQkFDS1NQQUNFOyAgICBicmVhazsKKyAgICAgICAgY2FzZSBCUkxBUElfS0VZX1NZTV9UQUI6ICAgICAgIGNtZCA9IEJSTF9DTURfQkxLKFBBU1NLRVkpfEJSTF9LRVlfVEFCOyAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBCUkxBUElfS0VZX1NZTV9MSU5FRkVFRDogIGNtZCA9IEJSTF9DTURfQkxLKFBBU1NLRVkpfEJSTF9LRVlfRU5URVI7ICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBCUkxBUElfS0VZX1NZTV9FU0NBUEU6ICAgIGNtZCA9IEJSTF9DTURfQkxLKFBBU1NLRVkpfEJSTF9LRVlfRVNDQVBFOyAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBCUkxBUElfS0VZX1NZTV9IT01FOiAgICAgIGNtZCA9IEJSTF9DTURfQkxLKFBBU1NLRVkpfEJSTF9LRVlfSE9NRTsgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBCUkxBUElfS0VZX1NZTV9MRUZUOiAgICAgIGNtZCA9IEJSTF9DTURfQkxLKFBBU1NLRVkpfEJSTF9LRVlfQ1VSU09SX0xFRlQ7ICBicmVhazsKKyAgICAgICAgY2FzZSBCUkxBUElfS0VZX1NZTV9VUDogICAgICAgIGNtZCA9IEJSTF9DTURfQkxLKFBBU1NLRVkpfEJSTF9LRVlfQ1VSU09SX1VQOyAgICBicmVhazsKKyAgICAgICAgY2FzZSBCUkxBUElfS0VZX1NZTV9SSUdIVDogICAgIGNtZCA9IEJSTF9DTURfQkxLKFBBU1NLRVkpfEJSTF9LRVlfQ1VSU09SX1JJR0hUOyBicmVhazsKKyAgICAgICAgY2FzZSBCUkxBUElfS0VZX1NZTV9ET1dOOiAgICAgIGNtZCA9IEJSTF9DTURfQkxLKFBBU1NLRVkpfEJSTF9LRVlfQ1VSU09SX0RPV047ICBicmVhazsKKyAgICAgICAgY2FzZSBCUkxBUElfS0VZX1NZTV9QQUdFX1VQOiAgIGNtZCA9IEJSTF9DTURfQkxLKFBBU1NLRVkpfEJSTF9LRVlfUEFHRV9VUDsgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBCUkxBUElfS0VZX1NZTV9QQUdFX0RPV046IGNtZCA9IEJSTF9DTURfQkxLKFBBU1NLRVkpfEJSTF9LRVlfUEFHRV9ET1dOOyAgICBicmVhazsKKyAgICAgICAgY2FzZSBCUkxBUElfS0VZX1NZTV9FTkQ6ICAgICAgIGNtZCA9IEJSTF9DTURfQkxLKFBBU1NLRVkpfEJSTF9LRVlfRU5EOyAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBCUkxBUElfS0VZX1NZTV9JTlNFUlQ6ICAgIGNtZCA9IEJSTF9DTURfQkxLKFBBU1NLRVkpfEJSTF9LRVlfSU5TRVJUOyAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBCUkxBUElfS0VZX1NZTV9ERUxFVEU6ICAgIGNtZCA9IEJSTF9DTURfQkxLKFBBU1NLRVkpfEJSTF9LRVlfREVMRVRFOyAgICAgICBicmVhazsKKworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgIGlmICgoa2V5c3ltID49IEJSTEFQSV9LRVlfU1lNX0ZVTkNUSU9OKSAmJgorICAgICAgICAgICAgICAoa2V5c3ltIDw9IChCUkxBUElfS0VZX1NZTV9GVU5DVElPTiArIDM0KSkpIHsKKyAgICAgICAgICAgIGNtZCA9IEJSTF9DTURfS0ZOKGtleXN5bSAtIEJSTEFQSV9LRVlfU1lNX0ZVTkNUSU9OKTsKKyAgICAgICAgICB9IGVsc2UgaWYgKChrZXlzeW0gPCAwWDEwMCkgfHwKKyAgICAgICAgICAgICAgICAgICAgICgoa2V5c3ltICYgMHgxRjAwMDAwMCkgPT0gQlJMQVBJX0tFWV9TWU1fVU5JQ09ERSkpIHsKKyAgICAgICAgICAgIHdjaGFyX3QgYyA9IGtleXN5bSAmIDB4RkZGRkZGOworICAgICAgICAgICAgY21kID0gQlJMX0NNRF9CTEsoUEFTU0NIQVIpIHwgQlJMX0FSR19TRVQoYyk7CisgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHJldHVybiBFT0Y7CisgICAgICAgICAgfQorICAgICAgICAgIGJyZWFrOworICAgICAgfQorCisgICAgICBicmVhazsKKyAgICB9CisKKyAgICBkZWZhdWx0OgorICAgICAgcmV0dXJuIEVPRjsKKyAgfQorCisgIHN3aXRjaCAoY21kICYgQlJMX01TS19CTEspIHsKKyAgICBjYXNlIEJSTF9DTURfQkxLKFBBU1NDSEFSKToKKyAgICBjYXNlIEJSTF9DTURfQkxLKFBBU1NET1RTKToKKyAgICBjYXNlIEJSTF9DTURfQkxLKFBBU1NLRVkpOgorICAgICAgY21kID0gY21kCisgICAgICAgICAgfCAoY29kZSAmIEJSTEFQSV9LRVlfRkxHX1NISUZUICAgPyBCUkxfRkxHX0lOUFVUX1NISUZUICAgOiAwKQorICAgICAgICAgIHwgKGNvZGUgJiBCUkxBUElfS0VZX0ZMR19VUFBFUiAgID8gQlJMX0ZMR19JTlBVVF9VUFBFUiAgIDogMCkKKyAgICAgICAgICB8IChjb2RlICYgQlJMQVBJX0tFWV9GTEdfQ09OVFJPTCA/IEJSTF9GTEdfSU5QVVRfQ09OVFJPTCA6IDApCisgICAgICAgICAgfCAoY29kZSAmIEJSTEFQSV9LRVlfRkxHX01FVEEgICAgPyBCUkxfRkxHX0lOUFVUX01FVEEgICAgOiAwKQorICAgICAgICAgIHwgKGNvZGUgJiBCUkxBUElfS0VZX0ZMR19BTFRHUiAgID8gQlJMX0ZMR19JTlBVVF9BTFRHUiAgIDogMCkKKyAgICAgICAgICB8IChjb2RlICYgQlJMQVBJX0tFWV9GTEdfR1VJICAgICA/IEJSTF9GTEdfSU5QVVRfR1VJICAgICA6IDApCisgICAgICAgICAgOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIEJSTF9DTURfQkxLKFBBU1NYVCk6CisgICAgY2FzZSBCUkxfQ01EX0JMSyhQQVNTQVQpOgorICAgIGNhc2UgQlJMX0NNRF9CTEsoUEFTU1BTMik6CisgICAgICBjbWQgPSBjbWQKKyAgICAgICAgICB8IChjb2RlICYgQlJMQVBJX0tFWV9GTEdfS0JEX1JFTEVBU0UgPyBCUkxfRkxHX0tCRF9SRUxFQVNFIDogMCkKKyAgICAgICAgICB8IChjb2RlICYgQlJMQVBJX0tFWV9GTEdfS0JEX0VNVUwwICAgPyBCUkxfRkxHX0tCRF9FTVVMMCAgIDogMCkKKyAgICAgICAgICB8IChjb2RlICYgQlJMQVBJX0tFWV9GTEdfS0JEX0VNVUwxICAgPyBCUkxfRkxHX0tCRF9FTVVMMSAgIDogMCkKKyAgICAgICAgICA7CisgICAgICBicmVhazsKKworICAgIGRlZmF1bHQ6CisgICAgICBjbWQgPSBjbWQKKyAgICAgICAgICB8IChjb2RlICYgQlJMQVBJX0tFWV9GTEdfVE9HR0xFX09OICAgICA/IEJSTF9GTEdfVE9HR0xFX09OICAgICA6IDApCisgICAgICAgICAgfCAoY29kZSAmIEJSTEFQSV9LRVlfRkxHX1RPR0dMRV9PRkYgICAgPyBCUkxfRkxHX1RPR0dMRV9PRkYgICAgOiAwKQorICAgICAgICAgIHwgKGNvZGUgJiBCUkxBUElfS0VZX0ZMR19NT1RJT05fUk9VVEUgID8gQlJMX0ZMR19NT1RJT05fUk9VVEUgIDogMCkKKyAgICAgICAgICB8IChjb2RlICYgQlJMQVBJX0tFWV9GTEdfTU9USU9OX1NDQUxFRCA/IEJSTF9GTEdfTU9USU9OX1NDQUxFRCA6IDApCisgICAgICAgICAgfCAoY29kZSAmIEJSTEFQSV9LRVlfRkxHX01PVElPTl9UT0xFRlQgPyBCUkxfRkxHX01PVElPTl9UT0xFRlQgOiAwKQorICAgICAgICAgIDsKKyAgICAgIGJyZWFrOworICB9CisKKyAgcmV0dXJuIGNtZDsKK30KKyNlbmRpZiAvKiBFTkFCTEVfQVBJICovCmRpZmYgLS1naXQgYS9Qcm9ncmFtcy9jbWRfYnJsYXBpLmggYi9Qcm9ncmFtcy9jbWRfYnJsYXBpLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWY2OGI0YwotLS0gL2Rldi9udWxsCisrKyBiL1Byb2dyYW1zL2NtZF9icmxhcGkuaApAQCAtMCwwICsxLDQxIEBACisvKgorICogQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyAqICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyAqCisgKiBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorICoKKyAqIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyAqCisgKiBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisgKi8KKworI2lmbmRlZiBCUkxUVFlfSU5DTFVERURfQ01EX0JSTEFQSQorI2RlZmluZSBCUkxUVFlfSU5DTFVERURfQ01EX0JSTEFQSQorCisjaW5jbHVkZSAicHJvbG9ndWUuaCIKKworI2lmZGVmIEVOQUJMRV9BUEkKKyNpbmNsdWRlICJicmxhcGlfa2V5Y29kZXMuaCIKKyNlbmRpZiAvKiBFTkFCTEVfQVBJICovCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYgLyogX19jcGx1c3BsdXMgKi8KKworI2lmZGVmIEVOQUJMRV9BUEkKK2V4dGVybiBpbnQgY21kQnJsdHR5VG9CcmxhcGkgKGJybGFwaV9rZXlDb2RlX3QgKmNvZGUsIGludCBjb21tYW5kLCBpbnQgcmV0YWluRG90cyk7CitleHRlcm4gaW50IGNtZEJybGFwaVRvQnJsdHR5IChicmxhcGlfa2V5Q29kZV90IGNvZGUpOworI2VuZGlmIC8qIEVOQUJMRV9BUEkgKi8KKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYgLyogX19jcGx1c3BsdXMgKi8KKworI2VuZGlmIC8qIEJSTFRUWV9JTkNMVURFRF9DTURfQlJMQVBJICovCmRpZmYgLS1naXQgYS9Qcm9ncmFtcy9jbWRfY2xpcGJvYXJkLmMgYi9Qcm9ncmFtcy9jbWRfY2xpcGJvYXJkLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWMxYWU4ZgotLS0gL2Rldi9udWxsCisrKyBiL1Byb2dyYW1zL2NtZF9jbGlwYm9hcmQuYwpAQCAtMCwwICsxLDY3MiBAQAorLyoKKyAqIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisgKiAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisgKgorICogQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKKyNpbmNsdWRlICJwcm9sb2d1ZS5oIgorCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxjdHlwZS5oPgorCisjaW5jbHVkZSAibG9nLmgiCisjaW5jbHVkZSAiYWxlcnQuaCIKKyNpbmNsdWRlICJjbWRfcXVldWUuaCIKKyNpbmNsdWRlICJjbWRfdXRpbHMuaCIKKyNpbmNsdWRlICJjbWRfY2xpcGJvYXJkLmgiCisjaW5jbHVkZSAiY2xpcGJvYXJkLmgiCisjaW5jbHVkZSAiYnJsX2NtZHMuaCIKKyNpbmNsdWRlICJzY3IuaCIKKyNpbmNsdWRlICJyb3V0aW5nLmgiCisjaW5jbHVkZSAiZmlsZS5oIgorI2luY2x1ZGUgImRhdGFmaWxlLmgiCisjaW5jbHVkZSAidXRmOC5oIgorI2luY2x1ZGUgImNvcmUuaCIKKwordHlwZWRlZiBzdHJ1Y3QgeworICBDbGlwYm9hcmRPYmplY3QgKmNsaXBib2FyZDsKKworICBzdHJ1Y3QgeworICAgIGludCBjb2x1bW47CisgICAgaW50IHJvdzsKKyAgICBpbnQgb2Zmc2V0OworICB9IGJlZ2luOworfSBDbGlwYm9hcmRDb21tYW5kRGF0YTsKKworc3RhdGljIHdjaGFyX3QgKgorY3BiUmVhZFNjcmVlbiAoQ2xpcGJvYXJkQ29tbWFuZERhdGEgKmNjZCwgc2l6ZV90ICpsZW5ndGgsIGludCBmcm9tQ29sdW1uLCBpbnQgZnJvbVJvdywgaW50IHRvQ29sdW1uLCBpbnQgdG9Sb3cpIHsKKyAgd2NoYXJfdCAqbmV3QnVmZmVyID0gTlVMTDsKKyAgaW50IGNvbHVtbnMgPSB0b0NvbHVtbiAtIGZyb21Db2x1bW4gKyAxOworICBpbnQgcm93cyA9IHRvUm93IC0gZnJvbVJvdyArIDE7CisKKyAgaWYgKChjb2x1bW5zID49IDEpICYmIChyb3dzID49IDEpICYmIChjY2QtPmJlZ2luLm9mZnNldCA+PSAwKSkgeworICAgIHdjaGFyX3QgZnJvbUJ1ZmZlcltyb3dzICogY29sdW1uc107CisKKyAgICBpZiAocmVhZFNjcmVlblRleHQoZnJvbUNvbHVtbiwgZnJvbVJvdywgY29sdW1ucywgcm93cywgZnJvbUJ1ZmZlcikpIHsKKyAgICAgIHdjaGFyX3QgdG9CdWZmZXJbcm93cyAqIChjb2x1bW5zICsgMSldOworICAgICAgd2NoYXJfdCAqdG9BZGRyZXNzID0gdG9CdWZmZXI7CisKKyAgICAgIGNvbnN0IHdjaGFyX3QgKmZyb21BZGRyZXNzID0gZnJvbUJ1ZmZlcjsKKyAgICAgIGludCByb3c7CisKKyAgICAgIGZvciAocm93PWZyb21Sb3c7IHJvdzw9dG9Sb3c7IHJvdys9MSkgeworICAgICAgICBpbnQgY29sdW1uOworCisgICAgICAgIGZvciAoY29sdW1uPWZyb21Db2x1bW47IGNvbHVtbjw9dG9Db2x1bW47IGNvbHVtbis9MSkgeworICAgICAgICAgIHdjaGFyX3QgY2hhcmFjdGVyID0gKmZyb21BZGRyZXNzKys7CisgICAgICAgICAgaWYgKGlzd2NudHJsKGNoYXJhY3RlcikgfHwgaXN3c3BhY2UoY2hhcmFjdGVyKSkgY2hhcmFjdGVyID0gV0NfQygnICcpOworICAgICAgICAgICp0b0FkZHJlc3MrKyA9IGNoYXJhY3RlcjsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChyb3cgIT0gdG9Sb3cpICp0b0FkZHJlc3MrKyA9IFdDX0MoJ1xyJyk7CisgICAgICB9CisKKyAgICAgIC8qIG1ha2UgYSBuZXcgcGVybWFuZW50IGJ1ZmZlciBvZiBqdXN0IHRoZSByaWdodCBzaXplICovCisgICAgICB7CisgICAgICAgIHNpemVfdCBuZXdMZW5ndGggPSB0b0FkZHJlc3MgLSB0b0J1ZmZlcjsKKworICAgICAgICBpZiAoKG5ld0J1ZmZlciA9IGFsbG9jYXRlQ2hhcmFjdGVycyhuZXdMZW5ndGgpKSkgeworICAgICAgICAgIHdtZW1jcHkobmV3QnVmZmVyLCB0b0J1ZmZlciwgKCpsZW5ndGggPSBuZXdMZW5ndGgpKTsKKyAgICAgICAgfQorICAgICAgfQorICAgIH0KKyAgfQorCisgIHJldHVybiBuZXdCdWZmZXI7Cit9CisKK3N0YXRpYyBpbnQKK2NwYkVuZE9wZXJhdGlvbiAoQ2xpcGJvYXJkQ29tbWFuZERhdGEgKmNjZCwgY29uc3Qgd2NoYXJfdCAqY2hhcmFjdGVycywgc2l6ZV90IGxlbmd0aCwKKyAgICAgICAgICAgICAgICAgaW50IGluc2VydENSKSB7CisgIGxvY2tNYWluQ2xpcGJvYXJkKCk7CisgICAgaWYgKGluc2VydENSICYmIGNjZC0+YmVnaW4ub2Zmc2V0ID49IDEpIHsKKyAgICAgIHNpemVfdCBsZW5ndGg7CisgICAgICBjb25zdCB3Y2hhcl90ICpjaGFyYWN0ZXJzID0gZ2V0Q2xpcGJvYXJkQ29udGVudChjY2QtPmNsaXBib2FyZCwgJmxlbmd0aCk7CisgICAgICBpZiAobGVuZ3RoID4gY2NkLT5iZWdpbi5vZmZzZXQpIGxlbmd0aCA9IGNjZC0+YmVnaW4ub2Zmc2V0OworICAgICAgd2hpbGUgKGxlbmd0aCA+IDApIHsKKyAgICAgICAgc2l6ZV90IGxhc3QgPSBsZW5ndGggLSAxOworICAgICAgICBpZiAoY2hhcmFjdGVyc1tsYXN0XSA9PSBXQ19DKCdccicpKSBpbnNlcnRDUiA9IDA7CisgICAgICAgIGlmIChjaGFyYWN0ZXJzW2xhc3RdICE9IFdDX0MoJyAnKSkgYnJlYWs7CisgICAgICAgIGxlbmd0aCA9IGxhc3Q7CisgICAgICB9CisgICAgICBjY2QtPmJlZ2luLm9mZnNldCA9IGxlbmd0aDsKKyAgICB9CisgICAgaWYgKGNjZC0+YmVnaW4ub2Zmc2V0IDw9IDApIGluc2VydENSID0gMDsKKworICAgIGludCB0cnVuY2F0ZWQgPSB0cnVuY2F0ZUNsaXBib2FyZENvbnRlbnQoY2NkLT5jbGlwYm9hcmQsIGNjZC0+YmVnaW4ub2Zmc2V0KTsKKyAgICBpZiAoaW5zZXJ0Q1IpIGFwcGVuZENsaXBib2FyZENvbnRlbnQoY2NkLT5jbGlwYm9hcmQsICYod2NoYXJfdCl7V0NfQygnXHInKX0sIDEpOworICAgIGludCBhcHBlbmRlZCA9IGFwcGVuZENsaXBib2FyZENvbnRlbnQoY2NkLT5jbGlwYm9hcmQsIGNoYXJhY3RlcnMsIGxlbmd0aCk7CisgIHVubG9ja01haW5DbGlwYm9hcmQoKTsKKworICBpZiAodHJ1bmNhdGVkIHx8IGFwcGVuZGVkKSBvbk1haW5DbGlwYm9hcmRVcGRhdGVkKCk7CisgIGlmICghYXBwZW5kZWQpIHJldHVybiAwOworICBhbGVydChBTEVSVF9DTElQQk9BUkRfRU5EKTsKKyAgcmV0dXJuIDE7Cit9CisKK3N0YXRpYyB2b2lkCitjcGJCZWdpbk9wZXJhdGlvbiAoQ2xpcGJvYXJkQ29tbWFuZERhdGEgKmNjZCwgaW50IGNvbHVtbiwgaW50IHJvdykgeworICBjY2QtPmJlZ2luLmNvbHVtbiA9IGNvbHVtbjsKKyAgY2NkLT5iZWdpbi5yb3cgPSByb3c7CisKKyAgbG9ja01haW5DbGlwYm9hcmQoKTsKKyAgICBjY2QtPmJlZ2luLm9mZnNldCA9IGdldENsaXBib2FyZENvbnRlbnRMZW5ndGgoY2NkLT5jbGlwYm9hcmQpOworICB1bmxvY2tNYWluQ2xpcGJvYXJkKCk7CisKKyAgYWxlcnQoQUxFUlRfQ0xJUEJPQVJEX0JFR0lOKTsKK30KKworc3RhdGljIGludAorY3BiUmVjdGFuZ3VsYXJDb3B5IChDbGlwYm9hcmRDb21tYW5kRGF0YSAqY2NkLCBpbnQgY29sdW1uLCBpbnQgcm93KSB7CisgIGludCBjb3BpZWQgPSAwOworICBzaXplX3QgbGVuZ3RoOworICB3Y2hhcl90ICpidWZmZXIgPSBjcGJSZWFkU2NyZWVuKGNjZCwgJmxlbmd0aCwgY2NkLT5iZWdpbi5jb2x1bW4sIGNjZC0+YmVnaW4ucm93LCBjb2x1bW4sIHJvdyk7CisKKyAgaWYgKGJ1ZmZlcikgeworICAgIHsKKyAgICAgIGNvbnN0IHdjaGFyX3QgKmZyb20gPSBidWZmZXI7CisgICAgICBjb25zdCB3Y2hhcl90ICplbmQgPSBmcm9tICsgbGVuZ3RoOworICAgICAgd2NoYXJfdCAqdG8gPSBidWZmZXI7CisgICAgICBpbnQgc3BhY2VzID0gMDsKKworICAgICAgd2hpbGUgKGZyb20gIT0gZW5kKSB7CisgICAgICAgIHdjaGFyX3QgY2hhcmFjdGVyID0gKmZyb20rKzsKKworICAgICAgICBzd2l0Y2ggKGNoYXJhY3RlcikgeworICAgICAgICAgIGNhc2UgV0NfQygnICcpOgorICAgICAgICAgICAgc3BhY2VzICs9IDE7CisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAgIGNhc2UgV0NfQygnXHInKToKKyAgICAgICAgICAgIHNwYWNlcyA9IDA7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIHdoaWxlIChzcGFjZXMpIHsKKyAgICAgICAgICAqdG8rKyA9IFdDX0MoJyAnKTsKKyAgICAgICAgICBzcGFjZXMgLT0gMTsKKyAgICAgICAgfQorCisgICAgICAgICp0bysrID0gY2hhcmFjdGVyOworICAgICAgfQorCisgICAgICBsZW5ndGggPSB0byAtIGJ1ZmZlcjsKKyAgICB9CisKKyAgICBpZiAoY3BiRW5kT3BlcmF0aW9uKGNjZCwgYnVmZmVyLCBsZW5ndGgsIDEpKSBjb3BpZWQgPSAxOworICAgIGZyZWUoYnVmZmVyKTsKKyAgfQorCisgIHJldHVybiBjb3BpZWQ7Cit9CisKK3N0YXRpYyBpbnQKK2NwYkxpbmVhckNvcHkgKENsaXBib2FyZENvbW1hbmREYXRhICpjY2QsIGludCBjb2x1bW4sIGludCByb3cpIHsKKyAgaW50IGNvcGllZCA9IDA7CisgIFNjcmVlbkRlc2NyaXB0aW9uIHNjcmVlbjsKKyAgZGVzY3JpYmVTY3JlZW4oJnNjcmVlbik7CisKKyAgeworICAgIGludCByaWdodENvbHVtbiA9IHNjcmVlbi5jb2xzIC0gMTsKKyAgICBzaXplX3QgbGVuZ3RoOworICAgIHdjaGFyX3QgKmJ1ZmZlciA9IGNwYlJlYWRTY3JlZW4oY2NkLCAmbGVuZ3RoLCAwLCBjY2QtPmJlZ2luLnJvdywgcmlnaHRDb2x1bW4sIHJvdyk7CisKKyAgICBpZiAoYnVmZmVyKSB7CisgICAgICBpZiAoY29sdW1uIDwgcmlnaHRDb2x1bW4pIHsKKyAgICAgICAgd2NoYXJfdCAqc3RhcnQgPSBidWZmZXIgKyBsZW5ndGg7CisKKyAgICAgICAgd2hpbGUgKHN0YXJ0ICE9IGJ1ZmZlcikgeworICAgICAgICAgIGlmICgqLS1zdGFydCA9PSBXQ19DKCdccicpKSB7CisgICAgICAgICAgICBzdGFydCArPSAxOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgeworICAgICAgICAgIGludCBhZGp1c3RtZW50ID0gKGNvbHVtbiArIDEpIC0gKGJ1ZmZlciArIGxlbmd0aCAtIHN0YXJ0KTsKKyAgICAgICAgICBpZiAoYWRqdXN0bWVudCA8IDApIGxlbmd0aCArPSBhZGp1c3RtZW50OworICAgICAgICB9CisgICAgICB9CisKKyAgICAgIGlmIChjY2QtPmJlZ2luLmNvbHVtbikgeworICAgICAgICB3Y2hhcl90ICpzdGFydCA9IHdtZW1jaHIoYnVmZmVyLCBXQ19DKCdccicpLCBsZW5ndGgpOworICAgICAgICBpZiAoIXN0YXJ0KSBzdGFydCA9IGJ1ZmZlciArIGxlbmd0aDsKKyAgICAgICAgaWYgKChzdGFydCAtIGJ1ZmZlcikgPiBjY2QtPmJlZ2luLmNvbHVtbikgc3RhcnQgPSBidWZmZXIgKyBjY2QtPmJlZ2luLmNvbHVtbjsKKyAgICAgICAgaWYgKHN0YXJ0ICE9IGJ1ZmZlcikgd21lbW1vdmUoYnVmZmVyLCBzdGFydCwgKGxlbmd0aCAtPSBzdGFydCAtIGJ1ZmZlcikpOworICAgICAgfQorCisgICAgICB7CisgICAgICAgIGNvbnN0IHdjaGFyX3QgKmZyb20gPSBidWZmZXI7CisgICAgICAgIGNvbnN0IHdjaGFyX3QgKmVuZCA9IGZyb20gKyBsZW5ndGg7CisgICAgICAgIHdjaGFyX3QgKnRvID0gYnVmZmVyOworICAgICAgICBpbnQgc3BhY2VzID0gMDsKKyAgICAgICAgaW50IG5ld2xpbmVzID0gMDsKKworICAgICAgICB3aGlsZSAoZnJvbSAhPSBlbmQpIHsKKyAgICAgICAgICB3Y2hhcl90IGNoYXJhY3RlciA9ICpmcm9tKys7CisKKyAgICAgICAgICBzd2l0Y2ggKGNoYXJhY3RlcikgeworICAgICAgICAgICAgY2FzZSBXQ19DKCcgJyk6CisgICAgICAgICAgICAgIHNwYWNlcyArPSAxOworICAgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAgICAgY2FzZSBXQ19DKCdccicpOgorICAgICAgICAgICAgICBuZXdsaW5lcyArPSAxOworICAgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgfQorCisgICAgICAgICAgaWYgKG5ld2xpbmVzKSB7CisgICAgICAgICAgICBpZiAoKG5ld2xpbmVzID4gMSkgfHwgKHNwYWNlcyA+IDApKSBzcGFjZXMgPSAxOworICAgICAgICAgICAgbmV3bGluZXMgPSAwOworICAgICAgICAgIH0KKworICAgICAgICAgIHdoaWxlIChzcGFjZXMpIHsKKyAgICAgICAgICAgICp0bysrID0gV0NfQygnICcpOworICAgICAgICAgICAgc3BhY2VzIC09IDE7CisgICAgICAgICAgfQorCisgICAgICAgICAgKnRvKysgPSBjaGFyYWN0ZXI7CisgICAgICAgIH0KKworICAgICAgICBpZiAoc3BhY2VzIHx8IG5ld2xpbmVzKSAqdG8rKyA9IFdDX0MoJyAnKTsKKyAgICAgICAgbGVuZ3RoID0gdG8gLSBidWZmZXI7CisgICAgICB9CisKKyAgICAgIGlmIChjcGJFbmRPcGVyYXRpb24oY2NkLCBidWZmZXIsIGxlbmd0aCwgMCkpIGNvcGllZCA9IDE7CisgICAgICBmcmVlKGJ1ZmZlcik7CisgICAgfQorICB9CisKKyAgcmV0dXJuIGNvcGllZDsKK30KKworc3RhdGljIGludAorcGFzdGVDaGFyYWN0ZXJzIChjb25zdCB3Y2hhcl90ICpjaGFyYWN0ZXJzLCBzaXplX3QgY291bnQpIHsKKyAgaWYgKCFjaGFyYWN0ZXJzKSByZXR1cm4gMDsKKyAgaWYgKCFjb3VudCkgcmV0dXJuIDA7CisKKyAgaWYgKCFpc01haW5TY3JlZW4oKSkgcmV0dXJuIDA7CisgIGlmIChpc1JvdXRpbmcoKSkgcmV0dXJuIDA7CisKKyAgeworICAgIHVuc2lnbmVkIGludCBpOworCisgICAgZm9yIChpPTA7IGk8Y291bnQ7IGkrPTEpIHsKKyAgICAgIGlmICghaW5zZXJ0U2NyZWVuS2V5KGNoYXJhY3RlcnNbaV0pKSByZXR1cm4gMDsKKyAgICB9CisgIH0KKworICByZXR1cm4gMTsKK30KKworc3RhdGljIGludAorY3BiUGFzdGUgKENsaXBib2FyZENvbW1hbmREYXRhICpjY2QsIHVuc2lnbmVkIGludCBpbmRleCkgeworICBpbnQgcGFzdGVkOworCisgIGxvY2tNYWluQ2xpcGJvYXJkKCk7CisgICAgY29uc3Qgd2NoYXJfdCAqY2hhcmFjdGVyczsKKyAgICBzaXplX3QgbGVuZ3RoOworCisgICAgaWYgKGluZGV4KSB7CisgICAgICBjaGFyYWN0ZXJzID0gZ2V0Q2xpcGJvYXJkSGlzdG9yeShjY2QtPmNsaXBib2FyZCwgaW5kZXgtMSwgJmxlbmd0aCk7CisgICAgfSBlbHNlIHsKKyAgICAgIGNoYXJhY3RlcnMgPSBnZXRDbGlwYm9hcmRDb250ZW50KGNjZC0+Y2xpcGJvYXJkLCAmbGVuZ3RoKTsKKyAgICB9CisKKyAgICB3aGlsZSAobGVuZ3RoID4gMCkgeworICAgICAgc2l6ZV90IGxhc3QgPSBsZW5ndGggLSAxOworICAgICAgaWYgKGNoYXJhY3RlcnNbbGFzdF0gIT0gV0NfQygnICcpKSBicmVhazsKKyAgICAgIGxlbmd0aCA9IGxhc3Q7CisgICAgfQorCisgICAgcGFzdGVkID0gcGFzdGVDaGFyYWN0ZXJzKGNoYXJhY3RlcnMsIGxlbmd0aCk7CisgIHVubG9ja01haW5DbGlwYm9hcmQoKTsKKworICByZXR1cm4gcGFzdGVkOworfQorCitzdGF0aWMgRklMRSAqCitjcGJPcGVuRmlsZSAoY29uc3QgY2hhciAqbW9kZSkgeworICBjb25zdCBjaGFyICpmaWxlID0gImNsaXBib2FyZCI7CisgIGNoYXIgKnBhdGggPSBtYWtlVXBkYXRhYmxlUGF0aChmaWxlKTsKKworICBpZiAocGF0aCkgeworICAgIEZJTEUgKnN0cmVhbSA9IG9wZW5EYXRhRmlsZShwYXRoLCBtb2RlLCAwKTsKKworICAgIGZyZWUocGF0aCk7CisgICAgcGF0aCA9IE5VTEw7CisKKyAgICBpZiAoc3RyZWFtKSByZXR1cm4gc3RyZWFtOworICB9CisKKyAgcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBpbnQKK2NwYlNhdmUgKENsaXBib2FyZENvbW1hbmREYXRhICpjY2QpIHsKKyAgaW50IG9rID0gMDsKKworICBsb2NrTWFpbkNsaXBib2FyZCgpOworICAgIHNpemVfdCBsZW5ndGg7CisgICAgY29uc3Qgd2NoYXJfdCAqY2hhcmFjdGVycyA9IGdldENsaXBib2FyZENvbnRlbnQoY2NkLT5jbGlwYm9hcmQsICZsZW5ndGgpOworCisgICAgaWYgKGxlbmd0aCA+IDApIHsKKyAgICAgIEZJTEUgKnN0cmVhbSA9IGNwYk9wZW5GaWxlKCJ3Iik7CisKKyAgICAgIGlmIChzdHJlYW0pIHsKKyAgICAgICAgaWYgKHdyaXRlVXRmOENoYXJhY3RlcnMoc3RyZWFtLCBjaGFyYWN0ZXJzLCBsZW5ndGgpKSB7CisgICAgICAgICAgb2sgPSAxOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGZjbG9zZShzdHJlYW0pID09IEVPRikgeworICAgICAgICAgIGxvZ1N5c3RlbUVycm9yKCJmY2xvc2UiKTsKKyAgICAgICAgICBvayA9IDA7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9CisgIHVubG9ja01haW5DbGlwYm9hcmQoKTsKKworICByZXR1cm4gb2s7Cit9CisKK3N0YXRpYyBpbnQKK2NwYlJlc3RvcmUgKENsaXBib2FyZENvbW1hbmREYXRhICpjY2QpIHsKKyAgaW50IG9rID0gMDsKKyAgRklMRSAqc3RyZWFtID0gY3BiT3BlbkZpbGUoInIiKTsKKworICBpZiAoc3RyZWFtKSB7CisgICAgaW50IHdhc1VwZGF0ZWQgPSAwOworCisgICAgbG9ja01haW5DbGlwYm9hcmQoKTsKKyAgICB7CisgICAgICBpbnQgaXNDbGVhciA9IDA7CisKKyAgICAgIGlmIChpc0NsaXBib2FyZEVtcHR5KGNjZC0+Y2xpcGJvYXJkKSkgeworICAgICAgICBpc0NsZWFyID0gMTsKKyAgICAgIH0gZWxzZSBpZiAoY2xlYXJDbGlwYm9hcmRDb250ZW50KGNjZC0+Y2xpcGJvYXJkKSkgeworICAgICAgICBpc0NsZWFyID0gMTsKKyAgICAgICAgd2FzVXBkYXRlZCA9IDE7CisgICAgICB9CisKKyAgICAgIGlmIChpc0NsZWFyKSB7CisgICAgICAgIG9rID0gMTsKKworICAgICAgICBzaXplX3Qgc2l6ZSA9IDBYMTAwMDsKKyAgICAgICAgY2hhciBidWZmZXJbc2l6ZV07CisgICAgICAgIHNpemVfdCBsZW5ndGggPSAwOworCisgICAgICAgIGRvIHsKKyAgICAgICAgICBzaXplX3QgY291bnQgPSBmcmVhZCgmYnVmZmVyW2xlbmd0aF0sIDEsIChzaXplIC0gbGVuZ3RoKSwgc3RyZWFtKTsKKyAgICAgICAgICBpbnQgZG9uZSA9IChsZW5ndGggKz0gY291bnQpIDwgc2l6ZTsKKworICAgICAgICAgIGlmIChmZXJyb3Ioc3RyZWFtKSkgeworICAgICAgICAgICAgbG9nU3lzdGVtRXJyb3IoImZyZWFkIik7CisgICAgICAgICAgICBvayA9IDA7CisgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGNvbnN0IGNoYXIgKm5leHQgPSBidWZmZXI7CisgICAgICAgICAgICBzaXplX3QgbGVmdCA9IGxlbmd0aDsKKworICAgICAgICAgICAgd2hpbGUgKGxlZnQgPiAwKSB7CisgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnN0YXJ0ID0gbmV4dDsKKyAgICAgICAgICAgICAgd2ludF90IHdpID0gY29udmVydFV0ZjhUb1djaGFyKCZuZXh0LCAmbGVmdCk7CisKKyAgICAgICAgICAgICAgaWYgKHdpID09IFdFT0YpIHsKKyAgICAgICAgICAgICAgICBsZW5ndGggPSBuZXh0IC0gc3RhcnQ7CisKKyAgICAgICAgICAgICAgICBpZiAobGVmdCA+IDApIHsKKyAgICAgICAgICAgICAgICAgIGxvZ0J5dGVzKExPR19FUlIsICJpbnZhbGlkIFVURi04IGNoYXJhY3RlciIsIHN0YXJ0LCBsZW5ndGgpOworICAgICAgICAgICAgICAgICAgb2sgPSAwOworICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgbWVtbW92ZShidWZmZXIsIHN0YXJ0LCBsZW5ndGgpOworICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHdjaGFyX3Qgd2MgPSB3aTsKKworICAgICAgICAgICAgICAgIGlmIChhcHBlbmRDbGlwYm9hcmRDb250ZW50KGNjZC0+Y2xpcGJvYXJkLCAmd2MsIDEpKSB7CisgICAgICAgICAgICAgICAgICB3YXNVcGRhdGVkID0gMTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgb2sgPSAwOworICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgfQorCisgICAgICAgICAgaWYgKGRvbmUpIGJyZWFrOworICAgICAgICB9IHdoaWxlIChvayk7CisgICAgICB9CisgICAgfQorICAgIHVubG9ja01haW5DbGlwYm9hcmQoKTsKKworICAgIGlmIChmY2xvc2Uoc3RyZWFtKSA9PSBFT0YpIHsKKyAgICAgIGxvZ1N5c3RlbUVycm9yKCJmY2xvc2UiKTsKKyAgICAgIG9rID0gMDsKKyAgICB9CisKKyAgICBpZiAod2FzVXBkYXRlZCkgb25NYWluQ2xpcGJvYXJkVXBkYXRlZCgpOworICB9CisKKyAgcmV0dXJuIG9rOworfQorCitzdGF0aWMgaW50CitmaW5kQ2hhcmFjdGVycyAoY29uc3Qgd2NoYXJfdCAqKmFkZHJlc3MsIHNpemVfdCAqbGVuZ3RoLCBjb25zdCB3Y2hhcl90ICpjaGFyYWN0ZXJzLCBzaXplX3QgY291bnQpIHsKKyAgY29uc3Qgd2NoYXJfdCAqcHRyID0gKmFkZHJlc3M7CisgIHNpemVfdCBsZW4gPSAqbGVuZ3RoOworCisgIHdoaWxlIChjb3VudCA8PSBsZW4pIHsKKyAgICBjb25zdCB3Y2hhcl90ICpuZXh0ID0gd21lbWNocihwdHIsICpjaGFyYWN0ZXJzLCBsZW4pOworICAgIGlmICghbmV4dCkgYnJlYWs7CisKKyAgICBsZW4gLT0gbmV4dCAtIHB0cjsKKyAgICBpZiAod21lbWNtcCgocHRyID0gbmV4dCksIGNoYXJhY3RlcnMsIGNvdW50KSA9PSAwKSB7CisgICAgICAqYWRkcmVzcyA9IHB0cjsKKyAgICAgICpsZW5ndGggPSBsZW47CisgICAgICByZXR1cm4gMTsKKyAgICB9CisKKyAgICArK3B0ciwgLS1sZW47CisgIH0KKworICByZXR1cm4gMDsKK30KKworc3RhdGljIGludAoraGFuZGxlQ2xpcGJvYXJkQ29tbWFuZHMgKGludCBjb21tYW5kLCB2b2lkICpkYXRhKSB7CisgIENsaXBib2FyZENvbW1hbmREYXRhICpjY2QgPSBkYXRhOworCisgIHN3aXRjaCAoY29tbWFuZCAmIEJSTF9NU0tfQ01EKSB7CisgICAgY2FzZSBCUkxfQ01EX1BBU1RFOgorICAgICAgaWYgKCFjcGJQYXN0ZShjY2QsIDApKSBhbGVydChBTEVSVF9DT01NQU5EX1JFSkVDVEVEKTsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBCUkxfQ01EX0NMSVBfU0FWRToKKyAgICAgIGFsZXJ0KGNwYlNhdmUoY2NkKT8gQUxFUlRfQ09NTUFORF9ET05FOiBBTEVSVF9DT01NQU5EX1JFSkVDVEVEKTsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBCUkxfQ01EX0NMSVBfUkVTVE9SRToKKyAgICAgIGFsZXJ0KGNwYlJlc3RvcmUoY2NkKT8gQUxFUlRfQ09NTUFORF9ET05FOiBBTEVSVF9DT01NQU5EX1JFSkVDVEVEKTsKKyAgICAgIGJyZWFrOworCisgICAgeworICAgICAgaW50IGluY3JlbWVudDsKKworICAgICAgY29uc3Qgd2NoYXJfdCAqY3BiQnVmZmVyOworICAgICAgc2l6ZV90IGNwYkxlbmd0aDsKKworICAgIGNhc2UgQlJMX0NNRF9QUlNFQVJDSDoKKyAgICAgIGluY3JlbWVudCA9IC0xOworICAgICAgZ290byBkb1NlYXJjaDsKKworICAgIGNhc2UgQlJMX0NNRF9OWFNFQVJDSDoKKyAgICAgIGluY3JlbWVudCA9IDE7CisgICAgICBnb3RvIGRvU2VhcmNoOworCisgICAgZG9TZWFyY2g6CisgICAgICBsb2NrTWFpbkNsaXBib2FyZCgpOworICAgICAgICBpZiAoKGNwYkJ1ZmZlciA9IGdldENsaXBib2FyZENvbnRlbnQoY2NkLT5jbGlwYm9hcmQsICZjcGJMZW5ndGgpKSkgeworICAgICAgICAgIGludCBmb3VuZCA9IDA7CisgICAgICAgICAgc2l6ZV90IGNvdW50ID0gY3BiTGVuZ3RoOworCisgICAgICAgICAgaWYgKGNvdW50IDw9IHNjci5jb2xzKSB7CisgICAgICAgICAgICBpbnQgbGluZSA9IHNlcy0+d2lueTsKKyAgICAgICAgICAgIHdjaGFyX3QgYnVmZmVyW3Njci5jb2xzXTsKKyAgICAgICAgICAgIHdjaGFyX3QgY2hhcmFjdGVyc1tjb3VudF07CisKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGk7CisgICAgICAgICAgICAgIGZvciAoaT0wOyBpPGNvdW50OyBpKz0xKSBjaGFyYWN0ZXJzW2ldID0gdG93bG93ZXIoY3BiQnVmZmVyW2ldKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgd2hpbGUgKChsaW5lID49IDApICYmIChsaW5lIDw9IChpbnQpKHNjci5yb3dzIC0gYnJsLnRleHRSb3dzKSkpIHsKKyAgICAgICAgICAgICAgY29uc3Qgd2NoYXJfdCAqYWRkcmVzcyA9IGJ1ZmZlcjsKKyAgICAgICAgICAgICAgc2l6ZV90IGxlbmd0aCA9IHNjci5jb2xzOworICAgICAgICAgICAgICByZWFkU2NyZWVuVGV4dCgwLCBsaW5lLCBsZW5ndGgsIDEsIGJ1ZmZlcik7CisKKyAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGk9MDsgaTxsZW5ndGg7IGkrPTEpIGJ1ZmZlcltpXSA9IHRvd2xvd2VyKGJ1ZmZlcltpXSk7CisgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICBpZiAobGluZSA9PSBzZXMtPndpbnkpIHsKKyAgICAgICAgICAgICAgICBpZiAoaW5jcmVtZW50IDwgMCkgeworICAgICAgICAgICAgICAgICAgaW50IGVuZCA9IHNlcy0+d2lueCArIGNvdW50IC0gMTsKKyAgICAgICAgICAgICAgICAgIGlmIChlbmQgPCBsZW5ndGgpIGxlbmd0aCA9IGVuZDsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgaW50IHN0YXJ0ID0gc2VzLT53aW54ICsgdGV4dENvdW50OworICAgICAgICAgICAgICAgICAgaWYgKHN0YXJ0ID4gbGVuZ3RoKSBzdGFydCA9IGxlbmd0aDsKKyAgICAgICAgICAgICAgICAgIGFkZHJlc3MgKz0gc3RhcnQ7CisgICAgICAgICAgICAgICAgICBsZW5ndGggLT0gc3RhcnQ7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgaWYgKGZpbmRDaGFyYWN0ZXJzKCZhZGRyZXNzLCAmbGVuZ3RoLCBjaGFyYWN0ZXJzLCBjb3VudCkpIHsKKyAgICAgICAgICAgICAgICBpZiAoaW5jcmVtZW50IDwgMCkgeworICAgICAgICAgICAgICAgICAgd2hpbGUgKGZpbmRDaGFyYWN0ZXJzKCZhZGRyZXNzLCAmbGVuZ3RoLCBjaGFyYWN0ZXJzLCBjb3VudCkpIHsKKyAgICAgICAgICAgICAgICAgICAgKythZGRyZXNzLCAtLWxlbmd0aDsKKyAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBzZXMtPndpbnkgPSBsaW5lOworICAgICAgICAgICAgICAgIHNlcy0+d2lueCA9IChhZGRyZXNzIC0gYnVmZmVyKSAvIHRleHRDb3VudCAqIHRleHRDb3VudDsKKyAgICAgICAgICAgICAgICBmb3VuZCA9IDE7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICBsaW5lICs9IGluY3JlbWVudDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9CisKKyAgICAgICAgICBpZiAoIWZvdW5kKSBhbGVydChBTEVSVF9CT1VOQ0UpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgIGFsZXJ0KEFMRVJUX0NPTU1BTkRfUkVKRUNURUQpOworICAgICAgICB9CisgICAgICB1bmxvY2tNYWluQ2xpcGJvYXJkKCk7CisKKyAgICAgIGJyZWFrOworICAgIH0KKworICAgIGRlZmF1bHQ6IHsKKyAgICAgIGludCBhcmcgPSBjb21tYW5kICYgQlJMX01TS19BUkc7CisgICAgICBpbnQgZXh0ID0gQlJMX0NPREVfR0VUKEVYVCwgY29tbWFuZCk7CisKKyAgICAgIHN3aXRjaCAoY29tbWFuZCAmIEJSTF9NU0tfQkxLKSB7CisgICAgICAgIHsKKyAgICAgICAgICBpbnQgY2xlYXI7CisgICAgICAgICAgaW50IGNvbHVtbiwgcm93OworCisgICAgICAgIGNhc2UgQlJMX0NNRF9CTEsoQ0xJUF9ORVcpOgorICAgICAgICAgIGNsZWFyID0gMTsKKyAgICAgICAgICBnb3RvIGRvQ2xpcEJlZ2luOworCisgICAgICAgIGNhc2UgQlJMX0NNRF9CTEsoQ0xJUF9BREQpOgorICAgICAgICAgIGNsZWFyID0gMDsKKyAgICAgICAgICBnb3RvIGRvQ2xpcEJlZ2luOworCisgICAgICAgIGRvQ2xpcEJlZ2luOgorICAgICAgICAgIGlmIChnZXRDaGFyYWN0ZXJDb29yZGluYXRlcyhhcmcsICZyb3csICZjb2x1bW4sIE5VTEwsIDApKSB7CisgICAgICAgICAgICBpZiAoY2xlYXIpIGNsZWFyQ2xpcGJvYXJkQ29udGVudChjY2QtPmNsaXBib2FyZCk7CisgICAgICAgICAgICBjcGJCZWdpbk9wZXJhdGlvbihjY2QsIGNvbHVtbiwgcm93KTsKKyAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgYWxlcnQoQUxFUlRfQ09NTUFORF9SRUpFQ1RFRCk7CisgICAgICAgICAgfQorCisgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBjYXNlIEJSTF9DTURfQkxLKENPUFlfUkVDVCk6IHsKKyAgICAgICAgICBpbnQgY29sdW1uLCByb3c7CisKKyAgICAgICAgICBpZiAoZ2V0Q2hhcmFjdGVyQ29vcmRpbmF0ZXMoYXJnLCAmcm93LCBOVUxMLCAmY29sdW1uLCAxKSkKKyAgICAgICAgICAgIGlmIChjcGJSZWN0YW5ndWxhckNvcHkoY2NkLCBjb2x1bW4sIHJvdykpCisgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgYWxlcnQoQUxFUlRfQ09NTUFORF9SRUpFQ1RFRCk7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBjYXNlIEJSTF9DTURfQkxLKENPUFlfTElORSk6IHsKKyAgICAgICAgICBpbnQgY29sdW1uLCByb3c7CisKKyAgICAgICAgICBpZiAoZ2V0Q2hhcmFjdGVyQ29vcmRpbmF0ZXMoYXJnLCAmcm93LCBOVUxMLCAmY29sdW1uLCAxKSkKKyAgICAgICAgICAgIGlmIChjcGJMaW5lYXJDb3B5KGNjZCwgY29sdW1uLCByb3cpKQorICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgIGFsZXJ0KEFMRVJUX0NPTU1BTkRfUkVKRUNURUQpOworICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgeworICAgICAgICAgIGludCBjbGVhcjsKKworICAgICAgICBjYXNlIEJSTF9DTURfQkxLKENMSVBfQ09QWSk6CisgICAgICAgICAgY2xlYXIgPSAxOworICAgICAgICAgIGdvdG8gZG9Db3B5OworCisgICAgICAgIGNhc2UgQlJMX0NNRF9CTEsoQ0xJUF9BUFBFTkQpOgorICAgICAgICAgIGNsZWFyID0gMDsKKyAgICAgICAgICBnb3RvIGRvQ29weTsKKworICAgICAgICBkb0NvcHk6CisgICAgICAgICAgaWYgKGV4dCA+IGFyZykgeworICAgICAgICAgICAgaW50IGNvbHVtbjEsIHJvdzE7CisKKyAgICAgICAgICAgIGlmIChnZXRDaGFyYWN0ZXJDb29yZGluYXRlcyhhcmcsICZyb3cxLCAmY29sdW1uMSwgTlVMTCwgMCkpIHsKKyAgICAgICAgICAgICAgaW50IGNvbHVtbjIsIHJvdzI7CisKKyAgICAgICAgICAgICAgaWYgKGdldENoYXJhY3RlckNvb3JkaW5hdGVzKGV4dCwgJnJvdzIsIE5VTEwsICZjb2x1bW4yLCAxKSkgeworICAgICAgICAgICAgICAgIGlmIChjbGVhcikgY2xlYXJDbGlwYm9hcmRDb250ZW50KGNjZC0+Y2xpcGJvYXJkKTsKKyAgICAgICAgICAgICAgICBjcGJCZWdpbk9wZXJhdGlvbihjY2QsIGNvbHVtbjEsIHJvdzEpOworICAgICAgICAgICAgICAgIGlmIChjcGJMaW5lYXJDb3B5KGNjZCwgY29sdW1uMiwgcm93MikpIGJyZWFrOworICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgfQorCisgICAgICAgICAgYWxlcnQoQUxFUlRfQ09NTUFORF9SRUpFQ1RFRCk7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBjYXNlIEJSTF9DTURfQkxLKFBBU1RFX0hJU1RPUlkpOgorICAgICAgICAgIGlmICghY3BiUGFzdGUoY2NkLCBhcmcpKSBhbGVydChBTEVSVF9DT01NQU5EX1JFSkVDVEVEKTsKKyAgICAgICAgICBicmVhazsKKworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgIHJldHVybiAwOworICAgICAgfQorCisgICAgICBicmVhazsKKyAgICB9CisgIH0KKworICByZXR1cm4gMTsKK30KKworc3RhdGljIHZvaWQKK2Rlc3Ryb3lDbGlwYm9hcmRDb21tYW5kRGF0YSAodm9pZCAqZGF0YSkgeworICBDbGlwYm9hcmRDb21tYW5kRGF0YSAqY2NkID0gZGF0YTsKKyAgZnJlZShjY2QpOworfQorCitpbnQKK2FkZENsaXBib2FyZENvbW1hbmRzICh2b2lkKSB7CisgIENsaXBib2FyZENvbW1hbmREYXRhICpjY2Q7CisKKyAgaWYgKChjY2QgPSBtYWxsb2Moc2l6ZW9mKCpjY2QpKSkpIHsKKyAgICBtZW1zZXQoY2NkLCAwLCBzaXplb2YoKmNjZCkpOworICAgIGNjZC0+Y2xpcGJvYXJkID0gZ2V0TWFpbkNsaXBib2FyZCgpOworCisgICAgY2NkLT5iZWdpbi5jb2x1bW4gPSAwOworICAgIGNjZC0+YmVnaW4ucm93ID0gMDsKKyAgICBjY2QtPmJlZ2luLm9mZnNldCA9IC0xOworCisgICAgaWYgKHB1c2hDb21tYW5kSGFuZGxlcigiY2xpcGJvYXJkIiwgS1RCX0NUWF9ERUZBVUxULAorICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlQ2xpcGJvYXJkQ29tbWFuZHMsIGRlc3Ryb3lDbGlwYm9hcmRDb21tYW5kRGF0YSwgY2NkKSkgeworICAgICAgcmV0dXJuIDE7CisgICAgfQorCisgICAgZnJlZShjY2QpOworICB9IGVsc2UgeworICAgIGxvZ01hbGxvY0Vycm9yKCk7CisgIH0KKworICByZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL1Byb2dyYW1zL2NtZF9jbGlwYm9hcmQuaCBiL1Byb2dyYW1zL2NtZF9jbGlwYm9hcmQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNWVjZTlmCi0tLSAvZGV2L251bGwKKysrIGIvUHJvZ3JhbXMvY21kX2NsaXBib2FyZC5oCkBAIC0wLDAgKzEsMzIgQEAKKy8qCisgKiBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorICogICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorICoKKyAqIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorICoKKyAqIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyAqLworCisjaWZuZGVmIEJSTFRUWV9JTkNMVURFRF9DTURfQ0xJUEJPQVJECisjZGVmaW5lIEJSTFRUWV9JTkNMVURFRF9DTURfQ0xJUEJPQVJECisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYgLyogX19jcGx1c3BsdXMgKi8KKworZXh0ZXJuIGludCBhZGRDbGlwYm9hcmRDb21tYW5kcyAodm9pZCk7CisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmIC8qIF9fY3BsdXNwbHVzICovCisKKyNlbmRpZiAvKiBCUkxUVFlfSU5DTFVERURfQ01EX0NMSVBCT0FSRCAqLwpkaWZmIC0tZ2l0IGEvUHJvZ3JhbXMvY21kX2N1c3RvbS5jIGIvUHJvZ3JhbXMvY21kX2N1c3RvbS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUzYTY0NWQKLS0tIC9kZXYvbnVsbAorKysgYi9Qcm9ncmFtcy9jbWRfY3VzdG9tLmMKQEAgLTAsMCArMSw0NiBAQAorLyoKKyAqIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisgKiAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisgKgorICogQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKKyNpbmNsdWRlICJwcm9sb2d1ZS5oIgorCisjaW5jbHVkZSAiY21kX3F1ZXVlLmgiCisjaW5jbHVkZSAiY21kX2N1c3RvbS5oIgorI2luY2x1ZGUgImJybF9jbWRzLmgiCisjaW5jbHVkZSAiYnJsX2N1c3RvbS5oIgorCitzdGF0aWMgaW50CitoYW5kbGVDdXN0b21Db21tYW5kcyAoaW50IGNvbW1hbmQsIHZvaWQgKmRhdGEpIHsKKyAgc3dpdGNoIChjb21tYW5kICYgQlJMX01TS19DTUQpIHsKKyAgICBkZWZhdWx0OiB7CisgICAgICBzd2l0Y2ggKGNvbW1hbmQgJiBCUkxfTVNLX0JMSykgeworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgIHJldHVybiAwOworICAgICAgfQorCisgICAgICBicmVhazsKKyAgICB9CisgIH0KKworICByZXR1cm4gMTsKK30KKworaW50CithZGRDdXN0b21Db21tYW5kcyAodm9pZCkgeworICByZXR1cm4gcHVzaENvbW1hbmRIYW5kbGVyKCJjdXN0b20iLCBLVEJfQ1RYX0RFRkFVTFQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlQ3VzdG9tQ29tbWFuZHMsIE5VTEwsIE5VTEwpOworfQpkaWZmIC0tZ2l0IGEvUHJvZ3JhbXMvY21kX2N1c3RvbS5oIGIvUHJvZ3JhbXMvY21kX2N1c3RvbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlkN2E0ZjcKLS0tIC9kZXYvbnVsbAorKysgYi9Qcm9ncmFtcy9jbWRfY3VzdG9tLmgKQEAgLTAsMCArMSwzMiBAQAorLyoKKyAqIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisgKiAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisgKgorICogQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKKyNpZm5kZWYgQlJMVFRZX0lOQ0xVREVEX0NNRF9DVVNUT00KKyNkZWZpbmUgQlJMVFRZX0lOQ0xVREVEX0NNRF9DVVNUT00KKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZiAvKiBfX2NwbHVzcGx1cyAqLworCitleHRlcm4gaW50IGFkZEN1c3RvbUNvbW1hbmRzICh2b2lkKTsKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYgLyogX19jcGx1c3BsdXMgKi8KKworI2VuZGlmIC8qIEJSTFRUWV9JTkNMVURFRF9DTURfQ1VTVE9NICovCmRpZmYgLS1naXQgYS9Qcm9ncmFtcy9jbWRfaW5wdXQuYyBiL1Byb2dyYW1zL2NtZF9pbnB1dC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg3ODNhOGUKLS0tIC9kZXYvbnVsbAorKysgYi9Qcm9ncmFtcy9jbWRfaW5wdXQuYwpAQCAtMCwwICsxLDQ0MiBAQAorLyoKKyAqIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisgKiAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisgKgorICogQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKKyNpbmNsdWRlICJwcm9sb2d1ZS5oIgorCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworI2luY2x1ZGUgImxvZy5oIgorI2luY2x1ZGUgInJlcG9ydC5oIgorI2luY2x1ZGUgImFsZXJ0LmgiCisjaW5jbHVkZSAicGFyYW1ldGVycy5oIgorI2luY2x1ZGUgImNtZF9xdWV1ZS5oIgorI2luY2x1ZGUgImNtZF9pbnB1dC5oIgorI2luY2x1ZGUgImNtZF91dGlscy5oIgorI2luY2x1ZGUgImJybF9jbWRzLmgiCisjaW5jbHVkZSAidW5pY29kZS5oIgorI2luY2x1ZGUgInR0Yi5oIgorI2luY2x1ZGUgInNjci5oIgorI2luY2x1ZGUgImFzeW5jX2hhbmRsZS5oIgorI2luY2x1ZGUgImFzeW5jX2FsYXJtLmgiCisjaW5jbHVkZSAicHJlZnMuaCIKKyNpbmNsdWRlICJjb3JlLmgiCisKK3R5cGVkZWYgc3RydWN0IHsKKyAgUmVwb3J0TGlzdGVuZXJJbnN0YW5jZSAqcmVzZXRMaXN0ZW5lcjsKKworICBzdHJ1Y3QgeworICAgIEFzeW5jSGFuZGxlIHRpbWVvdXQ7CisgICAgaW50IG9uY2U7CisgICAgaW50IGxvY2s7CisgIH0gbW9kaWZpZXJzOworfSBJbnB1dENvbW1hbmREYXRhOworCitzdGF0aWMgdm9pZAoraW5pdGlhbGl6ZU1vZGlmaWVyVGltZW91dCAoSW5wdXRDb21tYW5kRGF0YSAqaWNkKSB7CisgIGljZC0+bW9kaWZpZXJzLnRpbWVvdXQgPSBOVUxMOworfQorCitzdGF0aWMgdm9pZAorY2FuY2VsTW9kaWZpZXJUaW1lb3V0IChJbnB1dENvbW1hbmREYXRhICppY2QpIHsKKyAgaWYgKGljZC0+bW9kaWZpZXJzLnRpbWVvdXQpIHsKKyAgICBhc3luY0NhbmNlbFJlcXVlc3QoaWNkLT5tb2RpZmllcnMudGltZW91dCk7CisgICAgaW5pdGlhbGl6ZU1vZGlmaWVyVGltZW91dChpY2QpOworICB9Cit9CisKK3N0YXRpYyB2b2lkCitpbml0aWFsaXplTW9kaWZpZXJGbGFncyAoSW5wdXRDb21tYW5kRGF0YSAqaWNkKSB7CisgIGljZC0+bW9kaWZpZXJzLm9uY2UgPSAwOworICBpY2QtPm1vZGlmaWVycy5sb2NrID0gMDsKK30KKworc3RhdGljIHZvaWQKK2NsZWFyTW9kaWZpZXJGbGFncyAoSW5wdXRDb21tYW5kRGF0YSAqaWNkKSB7CisgIGluaXRpYWxpemVNb2RpZmllckZsYWdzKGljZCk7CisKKyAgaWYgKHByZWZzLnNwZWFrTW9kaWZpZXJLZXkpIHsKKyAgICBzcGVha0FsZXJ0TWVzc2FnZSgibW9kaWZpZXJzIHJlc2V0Iik7CisgIH0gZWxzZSB7CisgICAgYWxlcnQoQUxFUlRfTU9ESUZJRVJfT0ZGKTsKKyAgfQorfQorCitBU1lOQ19BTEFSTV9DQUxMQkFDSyhoYW5kbGVTdGlja3lNb2RpZmllcnNUaW1lb3V0KSB7CisgIElucHV0Q29tbWFuZERhdGEgKmljZCA9IHBhcmFtZXRlcnMtPmRhdGE7CisKKyAgYXN5bmNEaXNjYXJkSGFuZGxlKGljZC0+bW9kaWZpZXJzLnRpbWVvdXQpOworICBpbml0aWFsaXplTW9kaWZpZXJUaW1lb3V0KGljZCk7CisKKyAgY2xlYXJNb2RpZmllckZsYWdzKGljZCk7Cit9CisKK3N0YXRpYyBpbnQKK2hhdmVNb2RpZmllckZsYWdzIChJbnB1dENvbW1hbmREYXRhICppY2QpIHsKKyAgcmV0dXJuIGljZC0+bW9kaWZpZXJzLm9uY2UgfHwgaWNkLT5tb2RpZmllcnMubG9jazsKK30KKworc3RhdGljIGludAorc2V0TW9kaWZpZXJUaW1lb3V0IChJbnB1dENvbW1hbmREYXRhICppY2QpIHsKKyAgaWYgKCFoYXZlTW9kaWZpZXJGbGFncyhpY2QpKSB7CisgICAgY2FuY2VsTW9kaWZpZXJUaW1lb3V0KGljZCk7CisgICAgcmV0dXJuIDE7CisgIH0KKworICByZXR1cm4gaWNkLT5tb2RpZmllcnMudGltZW91dD8KKyAgICAgICAgIGFzeW5jUmVzZXRBbGFybUluKGljZC0+bW9kaWZpZXJzLnRpbWVvdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBJTlBVVF9TVElDS1lfTU9ESUZJRVJTX1RJTUVPVVQpOgorICAgICAgICAgYXN5bmNOZXdSZWxhdGl2ZUFsYXJtKCZpY2QtPm1vZGlmaWVycy50aW1lb3V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElOUFVUX1NUSUNLWV9NT0RJRklFUlNfVElNRU9VVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVTdGlja3lNb2RpZmllcnNUaW1lb3V0LCBpY2QpOworfQorCitzdGF0aWMgdm9pZAorYXBwbHlNb2RpZmllckZsYWdzIChJbnB1dENvbW1hbmREYXRhICppY2QsIGludCAqZmxhZ3MpIHsKKyAgKmZsYWdzIHw9IGljZC0+bW9kaWZpZXJzLmxvY2s7CisgICpmbGFncyB8PSBpY2QtPm1vZGlmaWVycy5vbmNlOworICBpY2QtPm1vZGlmaWVycy5vbmNlID0gMDsKKworICBzZXRNb2RpZmllclRpbWVvdXQoaWNkKTsKK30KKworc3RhdGljIGludAoraW5zZXJ0S2V5IChTY3JlZW5LZXkga2V5LCBpbnQgZmxhZ3MpIHsKKyAgaWYgKGZsYWdzICYgQlJMX0ZMR19JTlBVVF9TSElGVCkga2V5IHw9IFNDUl9LRVlfU0hJRlQ7CisgIGlmIChmbGFncyAmIEJSTF9GTEdfSU5QVVRfVVBQRVIpIGtleSB8PSBTQ1JfS0VZX1VQUEVSOworICBpZiAoZmxhZ3MgJiBCUkxfRkxHX0lOUFVUX0NPTlRST0wpIGtleSB8PSBTQ1JfS0VZX0NPTlRST0w7CisgIGlmIChmbGFncyAmIEJSTF9GTEdfSU5QVVRfTUVUQSkga2V5IHw9IFNDUl9LRVlfQUxUX0xFRlQ7CisgIGlmIChmbGFncyAmIEJSTF9GTEdfSU5QVVRfQUxUR1IpIGtleSB8PSBTQ1JfS0VZX0FMVF9SSUdIVDsKKyAgaWYgKGZsYWdzICYgQlJMX0ZMR19JTlBVVF9HVUkpIGtleSB8PSBTQ1JfS0VZX0dVSTsKKworICBpZiAoZmxhZ3MgJiBCUkxfRkxHX0lOUFVUX0VTQ0FQRUQpIHsKKyAgICBpZiAoIWluc2VydFNjcmVlbktleShTQ1JfS0VZX0VTQ0FQRSkpIHsKKyAgICAgIHJldHVybiAwOworICAgIH0KKyAgfQorCisgIHJldHVybiBpbnNlcnRTY3JlZW5LZXkoa2V5KTsKK30KKworc3RhdGljIHZvaWQKK2hhbmRsZVZpcnR1YWxUZXJtaW5hbFN3aXRjaGVkIChpbnQgc3dpdGNoZWQpIHsKKyAgaWYgKHN3aXRjaGVkKSB7CisgICAgdXBkYXRlU2Vzc2lvbkF0dHJpYnV0ZXMoKTsKKyAgfSBlbHNlIHsKKyAgICBhbGVydChBTEVSVF9DT01NQU5EX1JFSkVDVEVEKTsKKyAgfQorfQorCitzdGF0aWMgaW50CitzZWxlY3RWaXJ0dWFsVGVybWluYWwgKGludCB2dCkgeworICBpbnQgc2VsZWN0ZWQgPSBzZWxlY3RTY3JlZW5WaXJ0dWFsVGVybWluYWwodnQpOworCisgIGlmIChzZWxlY3RlZCkgeworICAgIHVwZGF0ZVNlc3Npb25BdHRyaWJ1dGVzKCk7CisgIH0gZWxzZSB7CisgICAgYWxlcnQoQUxFUlRfQ09NTUFORF9SRUpFQ1RFRCk7CisgIH0KKworICByZXR1cm4gc2VsZWN0ZWQ7Cit9CisKK3N0YXRpYyBpbnQKK2hhbmRsZUlucHV0Q29tbWFuZHMgKGludCBjb21tYW5kLCB2b2lkICpkYXRhKSB7CisgIElucHV0Q29tbWFuZERhdGEgKmljZCA9IGRhdGE7CisKKyAgc3dpdGNoIChjb21tYW5kICYgQlJMX01TS19DTUQpIHsKKyAgICBjYXNlIEJSTF9DTURfVU5TVElDSzogeworICAgICAgY2FuY2VsTW9kaWZpZXJUaW1lb3V0KGljZCk7CisKKyAgICAgIGlmIChoYXZlTW9kaWZpZXJGbGFncyhpY2QpKSB7CisgICAgICAgIGNsZWFyTW9kaWZpZXJGbGFncyhpY2QpOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgYWxlcnQoQUxFUlRfQ09NTUFORF9SRUpFQ1RFRCk7CisgICAgICB9CisKKyAgICAgIGJyZWFrOworICAgIH0KKworICAgIHsKKyAgICAgIGludCBtb2RpZmllckZsYWc7CisgICAgICBjb25zdCBjaGFyICptb2RpZmllck5hbWU7CisKKyAgICBjYXNlIEJSTF9DTURfU0hJRlQ6CisgICAgICBtb2RpZmllckZsYWcgPSBCUkxfRkxHX0lOUFVUX1NISUZUOworICAgICAgbW9kaWZpZXJOYW1lID0gInNoaWZ0IjsKKyAgICAgIGdvdG8gZG9Nb2RpZmllcjsKKworICAgIGNhc2UgQlJMX0NNRF9VUFBFUjoKKyAgICAgIG1vZGlmaWVyRmxhZyA9IEJSTF9GTEdfSU5QVVRfVVBQRVI7CisgICAgICBtb2RpZmllck5hbWUgPSAidXBwZXJjYXNlIjsKKyAgICAgIGdvdG8gZG9Nb2RpZmllcjsKKworICAgIGNhc2UgQlJMX0NNRF9DT05UUk9MOgorICAgICAgbW9kaWZpZXJGbGFnID0gQlJMX0ZMR19JTlBVVF9DT05UUk9MOworICAgICAgbW9kaWZpZXJOYW1lID0gImNvbnRyb2wiOworICAgICAgZ290byBkb01vZGlmaWVyOworCisgICAgY2FzZSBCUkxfQ01EX01FVEE6CisgICAgICBtb2RpZmllckZsYWcgPSBCUkxfRkxHX0lOUFVUX01FVEE7CisgICAgICBtb2RpZmllck5hbWUgPSAibGVmdCBhbHQiOworICAgICAgZ290byBkb01vZGlmaWVyOworCisgICAgY2FzZSBCUkxfQ01EX0FMVEdSOgorICAgICAgbW9kaWZpZXJGbGFnID0gQlJMX0ZMR19JTlBVVF9BTFRHUjsKKyAgICAgIG1vZGlmaWVyTmFtZSA9ICJyaWdodCBhbHQiOworICAgICAgZ290byBkb01vZGlmaWVyOworCisgICAgY2FzZSBCUkxfQ01EX0dVSToKKyAgICAgIG1vZGlmaWVyRmxhZyA9IEJSTF9GTEdfSU5QVVRfR1VJOworICAgICAgbW9kaWZpZXJOYW1lID0gImdyYXBoaWMiOworICAgICAgZ290byBkb01vZGlmaWVyOworCisgICAgZG9Nb2RpZmllcjoKKyAgICAgIGNhbmNlbE1vZGlmaWVyVGltZW91dChpY2QpOworCisgICAgICBBbGVydElkZW50aWZpZXIgbW9kaWZpZXJBbGVydDsKKyAgICAgIGNvbnN0IGNoYXIgKm1vZGlmaWVyU3RhdGU7CisKKyAgICAgIGlmIChpY2QtPm1vZGlmaWVycy5sb2NrICYgbW9kaWZpZXJGbGFnKSB7CisgICAgICAgIGljZC0+bW9kaWZpZXJzLm9uY2UgJj0gfm1vZGlmaWVyRmxhZzsKKyAgICAgICAgaWNkLT5tb2RpZmllcnMubG9jayAmPSB+bW9kaWZpZXJGbGFnOworICAgICAgICBtb2RpZmllckFsZXJ0ID0gQUxFUlRfTU9ESUZJRVJfT0ZGOworICAgICAgICBtb2RpZmllclN0YXRlID0gIm9mZiI7CisgICAgICB9IGVsc2UgaWYgKGljZC0+bW9kaWZpZXJzLm9uY2UgJiBtb2RpZmllckZsYWcpIHsKKyAgICAgICAgaWNkLT5tb2RpZmllcnMub25jZSAmPSB+bW9kaWZpZXJGbGFnOworICAgICAgICBpY2QtPm1vZGlmaWVycy5sb2NrIHw9IG1vZGlmaWVyRmxhZzsKKyAgICAgICAgbW9kaWZpZXJBbGVydCA9IEFMRVJUX01PRElGSUVSX0xPQ0s7CisgICAgICAgIG1vZGlmaWVyU3RhdGUgPSAibG9jayI7CisgICAgICB9IGVsc2UgeworICAgICAgICBpY2QtPm1vZGlmaWVycy5vbmNlIHw9IG1vZGlmaWVyRmxhZzsKKyAgICAgICAgbW9kaWZpZXJBbGVydCA9IEFMRVJUX01PRElGSUVSX09OQ0U7CisgICAgICAgIG1vZGlmaWVyU3RhdGUgPSAib25jZSI7CisgICAgICB9CisKKyAgICAgIGlmIChwcmVmcy5zcGVha01vZGlmaWVyS2V5KSB7CisgICAgICAgIGNoYXIgbWVzc2FnZVtzdHJsZW4obW9kaWZpZXJOYW1lKSArIDIgKyBzdHJsZW4obW9kaWZpZXJTdGF0ZSkgKyAxXTsKKworICAgICAgICBzbnByaW50ZigKKyAgICAgICAgICBtZXNzYWdlLCBzaXplb2YobWVzc2FnZSksCisgICAgICAgICAgIiVzOiAlcyIsIG1vZGlmaWVyTmFtZSwgbW9kaWZpZXJTdGF0ZQorICAgICAgICApOworCisgICAgICAgIHNwZWFrQWxlcnRNZXNzYWdlKG1lc3NhZ2UpOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgYWxlcnQobW9kaWZpZXJBbGVydCk7CisgICAgICB9CisKKyAgICAgIHNldE1vZGlmaWVyVGltZW91dChpY2QpOworICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBCUkxfQ01EX1NXSVRDSFZUX1BSRVY6CisgICAgICBoYW5kbGVWaXJ0dWFsVGVybWluYWxTd2l0Y2hlZChwcmV2aW91c1NjcmVlblZpcnR1YWxUZXJtaW5hbCgpKTsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBCUkxfQ01EX1NXSVRDSFZUX05FWFQ6CisgICAgICBoYW5kbGVWaXJ0dWFsVGVybWluYWxTd2l0Y2hlZChuZXh0U2NyZWVuVmlydHVhbFRlcm1pbmFsKCkpOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIEJSTF9DTURfU0VMRUNUVlRfUFJFVjoKKyAgICAgIHNlbGVjdFZpcnR1YWxUZXJtaW5hbChzY3IubnVtYmVyLTEpOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIEJSTF9DTURfU0VMRUNUVlRfTkVYVDoKKyAgICAgIHNlbGVjdFZpcnR1YWxUZXJtaW5hbChzY3IubnVtYmVyKzEpOworICAgICAgYnJlYWs7CisKKyAgICBkZWZhdWx0OiB7CisgICAgICBpbnQgYXJnID0gY29tbWFuZCAmIEJSTF9NU0tfQVJHOworICAgICAgaW50IGZsYWdzID0gY29tbWFuZCAmIEJSTF9NU0tfRkxHOworCisgICAgICBzd2l0Y2ggKGNvbW1hbmQgJiBCUkxfTVNLX0JMSykgeworICAgICAgICBjYXNlIEJSTF9DTURfQkxLKFBBU1NLRVkpOiB7CisgICAgICAgICAgU2NyZWVuS2V5IGtleTsKKyAgICAgICAgICBpbnQgbWlnaHRTY3JvbGwgPSAwOworCisgICAgICAgICAgc3dpdGNoIChhcmcpIHsKKyAgICAgICAgICAgIGNhc2UgQlJMX0tFWV9FTlRFUjoKKyAgICAgICAgICAgICAga2V5ID0gU0NSX0tFWV9FTlRFUjsKKyAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGNhc2UgQlJMX0tFWV9UQUI6CisgICAgICAgICAgICAgIGtleSA9IFNDUl9LRVlfVEFCOworICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgY2FzZSBCUkxfS0VZX0JBQ0tTUEFDRToKKyAgICAgICAgICAgICAga2V5ID0gU0NSX0tFWV9CQUNLU1BBQ0U7CisgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBjYXNlIEJSTF9LRVlfRVNDQVBFOgorICAgICAgICAgICAgICBrZXkgPSBTQ1JfS0VZX0VTQ0FQRTsKKyAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGNhc2UgQlJMX0tFWV9DVVJTT1JfTEVGVDoKKyAgICAgICAgICAgICAga2V5ID0gU0NSX0tFWV9DVVJTT1JfTEVGVDsKKyAgICAgICAgICAgICAgbWlnaHRTY3JvbGwgPSAxOworICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgY2FzZSBCUkxfS0VZX0NVUlNPUl9SSUdIVDoKKyAgICAgICAgICAgICAga2V5ID0gU0NSX0tFWV9DVVJTT1JfUklHSFQ7CisgICAgICAgICAgICAgIG1pZ2h0U2Nyb2xsID0gMTsKKyAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGNhc2UgQlJMX0tFWV9DVVJTT1JfVVA6CisgICAgICAgICAgICAgIGtleSA9IFNDUl9LRVlfQ1VSU09SX1VQOworICAgICAgICAgICAgICBtaWdodFNjcm9sbCA9IDE7CisgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBjYXNlIEJSTF9LRVlfQ1VSU09SX0RPV046CisgICAgICAgICAgICAgIGtleSA9IFNDUl9LRVlfQ1VSU09SX0RPV047CisgICAgICAgICAgICAgIG1pZ2h0U2Nyb2xsID0gMTsKKyAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGNhc2UgQlJMX0tFWV9QQUdFX1VQOgorICAgICAgICAgICAgICBrZXkgPSBTQ1JfS0VZX1BBR0VfVVA7CisgICAgICAgICAgICAgIG1pZ2h0U2Nyb2xsID0gMTsKKyAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGNhc2UgQlJMX0tFWV9QQUdFX0RPV046CisgICAgICAgICAgICAgIGtleSA9IFNDUl9LRVlfUEFHRV9ET1dOOworICAgICAgICAgICAgICBtaWdodFNjcm9sbCA9IDE7CisgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBjYXNlIEJSTF9LRVlfSE9NRToKKyAgICAgICAgICAgICAga2V5ID0gU0NSX0tFWV9IT01FOworICAgICAgICAgICAgICBtaWdodFNjcm9sbCA9IDE7CisgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBjYXNlIEJSTF9LRVlfRU5EOgorICAgICAgICAgICAgICBrZXkgPSBTQ1JfS0VZX0VORDsKKyAgICAgICAgICAgICAgbWlnaHRTY3JvbGwgPSAxOworICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgY2FzZSBCUkxfS0VZX0lOU0VSVDoKKyAgICAgICAgICAgICAga2V5ID0gU0NSX0tFWV9JTlNFUlQ7CisgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBjYXNlIEJSTF9LRVlfREVMRVRFOgorICAgICAgICAgICAgICBrZXkgPSBTQ1JfS0VZX0RFTEVURTsKKyAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgIGlmIChhcmcgPCBCUkxfS0VZX0ZVTkNUSU9OKSBnb3RvIFJFSkVDVF9LRVk7CisgICAgICAgICAgICAgIGtleSA9IFNDUl9LRVlfRlVOQ1RJT04gKyAoYXJnIC0gQlJMX0tFWV9GVU5DVElPTik7CisgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIH0KKworICAgICAgICAgIGlmIChtaWdodFNjcm9sbCAmJiBwcmVmcy5zY3JvbGxBd2FyZUN1cnNvck5hdmlnYXRpb24gJiYgc2VzLT50cmFja1NjcmVlbkN1cnNvcikgeworICAgICAgICAgICAgaWYgKCF0cmFja1NjcmVlbkN1cnNvcigxKSkgeworICAgICAgICAgICAgICBnb3RvIFJFSkVDVF9LRVk7CisgICAgICAgICAgICB9CisgICAgICAgICAgfQorCisgICAgICAgICAgYXBwbHlNb2RpZmllckZsYWdzKGljZCwgJmZsYWdzKTsKKyAgICAgICAgICBpZiAoIWluc2VydEtleShrZXksIGZsYWdzKSkgZ290byBSRUpFQ1RfS0VZOworICAgICAgICAgIGJyZWFrOworCisgICAgICAgIFJFSkVDVF9LRVk6CisgICAgICAgICAgYWxlcnQoQUxFUlRfQ09NTUFORF9SRUpFQ1RFRCk7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBjYXNlIEJSTF9DTURfQkxLKFBBU1NDSEFSKTogeworICAgICAgICAgIGFwcGx5TW9kaWZpZXJGbGFncyhpY2QsICZmbGFncyk7CisgICAgICAgICAgaWYgKCFpbnNlcnRLZXkoQlJMX0FSR19HRVQoY29tbWFuZCksIGZsYWdzKSkgYWxlcnQoQUxFUlRfQ09NTUFORF9SRUpFQ1RFRCk7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBjYXNlIEJSTF9DTURfQkxLKFBBU1NET1RTKTogeworICAgICAgICAgIGFwcGx5TW9kaWZpZXJGbGFncyhpY2QsICZmbGFncyk7CisgICAgICAgICAgd2NoYXJfdCBjaGFyYWN0ZXIgPSBjb252ZXJ0SW5wdXRUb0NoYXJhY3RlcihhcmcpOworCisgICAgICAgICAgaWYgKCFpbnNlcnRLZXkoY2hhcmFjdGVyLCBmbGFncykpIHsKKyAgICAgICAgICAgIGFsZXJ0KEFMRVJUX0NPTU1BTkRfUkVKRUNURUQpOworICAgICAgICAgIH0gZWxzZSBpZiAoKGNvbW1hbmQgJiBCUkxfRE9UQykgJiYgYXJnKSB7CisgICAgICAgICAgICBpZiAoIWluc2VydEtleShXQ19DKCcgJyksIGZsYWdzKSkgYWxlcnQoQUxFUlRfQ09NTUFORF9SRUpFQ1RFRCk7CisgICAgICAgICAgfQorCisgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBjYXNlIEJSTF9DTURfQkxLKFNXSVRDSFZUKToKKyAgICAgICAgICBoYW5kbGVWaXJ0dWFsVGVybWluYWxTd2l0Y2hlZChzd2l0Y2hTY3JlZW5WaXJ0dWFsVGVybWluYWwoYXJnKzEpKTsKKyAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIEJSTF9DTURfQkxLKFNFTEVDVFZUKToKKyAgICAgICAgICBzZWxlY3RWaXJ0dWFsVGVybWluYWwoYXJnKzEpOworICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgcmV0dXJuIDA7CisgICAgICB9CisKKyAgICAgIGJyZWFrOworICAgIH0KKyAgfQorCisgIHJldHVybiAxOworfQorCitzdGF0aWMgdm9pZAorcmVzZXRJbnB1dENvbW1hbmREYXRhIChJbnB1dENvbW1hbmREYXRhICppY2QpIHsKKyAgY2FuY2VsTW9kaWZpZXJUaW1lb3V0KGljZCk7CisgIGluaXRpYWxpemVNb2RpZmllckZsYWdzKGljZCk7Cit9CisKK1JFUE9SVF9MSVNURU5FUihpbnB1dENvbW1hbmREYXRhUmVzZXRMaXN0ZW5lcikgeworICBJbnB1dENvbW1hbmREYXRhICppY2QgPSBwYXJhbWV0ZXJzLT5saXN0ZW5lckRhdGE7CisKKyAgcmVzZXRJbnB1dENvbW1hbmREYXRhKGljZCk7Cit9CisKK3N0YXRpYyB2b2lkCitkZXN0cm95SW5wdXRDb21tYW5kRGF0YSAodm9pZCAqZGF0YSkgeworICBJbnB1dENvbW1hbmREYXRhICppY2QgPSBkYXRhOworCisgIHVucmVnaXN0ZXJSZXBvcnRMaXN0ZW5lcihpY2QtPnJlc2V0TGlzdGVuZXIpOworICBjYW5jZWxNb2RpZmllclRpbWVvdXQoaWNkKTsKKyAgZnJlZShpY2QpOworfQorCitpbnQKK2FkZElucHV0Q29tbWFuZHMgKHZvaWQpIHsKKyAgSW5wdXRDb21tYW5kRGF0YSAqaWNkOworCisgIGlmICgoaWNkID0gbWFsbG9jKHNpemVvZigqaWNkKSkpKSB7CisgICAgbWVtc2V0KGljZCwgMCwgc2l6ZW9mKCppY2QpKTsKKyAgICBpbml0aWFsaXplTW9kaWZpZXJUaW1lb3V0KGljZCk7CisgICAgaW5pdGlhbGl6ZU1vZGlmaWVyRmxhZ3MoaWNkKTsKKworICAgIGlmICgoaWNkLT5yZXNldExpc3RlbmVyID0gcmVnaXN0ZXJSZXBvcnRMaXN0ZW5lcihSRVBPUlRfQlJBSUxMRV9ERVZJQ0VfT05MSU5FLCBpbnB1dENvbW1hbmREYXRhUmVzZXRMaXN0ZW5lciwgaWNkKSkpIHsKKyAgICAgIGlmIChwdXNoQ29tbWFuZEhhbmRsZXIoImlucHV0IiwgS1RCX0NUWF9ERUZBVUxULAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVJbnB1dENvbW1hbmRzLCBkZXN0cm95SW5wdXRDb21tYW5kRGF0YSwgaWNkKSkgeworICAgICAgICByZXR1cm4gMTsKKyAgICAgIH0KKworICAgICAgdW5yZWdpc3RlclJlcG9ydExpc3RlbmVyKGljZC0+cmVzZXRMaXN0ZW5lcik7CisgICAgfQorCisgICAgZnJlZShpY2QpOworICB9IGVsc2UgeworICAgIGxvZ01hbGxvY0Vycm9yKCk7CisgIH0KKworICByZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL1Byb2dyYW1zL2NtZF9pbnB1dC5oIGIvUHJvZ3JhbXMvY21kX2lucHV0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjZlYTVlYQotLS0gL2Rldi9udWxsCisrKyBiL1Byb2dyYW1zL2NtZF9pbnB1dC5oCkBAIC0wLDAgKzEsMzIgQEAKKy8qCisgKiBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorICogICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorICoKKyAqIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorICoKKyAqIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyAqLworCisjaWZuZGVmIEJSTFRUWV9JTkNMVURFRF9DTURfSU5QVVQKKyNkZWZpbmUgQlJMVFRZX0lOQ0xVREVEX0NNRF9JTlBVVAorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmIC8qIF9fY3BsdXNwbHVzICovCisKK2V4dGVybiBpbnQgYWRkSW5wdXRDb21tYW5kcyAodm9pZCk7CisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmIC8qIF9fY3BsdXNwbHVzICovCisKKyNlbmRpZiAvKiBCUkxUVFlfSU5DTFVERURfQ01EX0lOUFVUICovCmRpZmYgLS1naXQgYS9Qcm9ncmFtcy9jbWRfa2V5Y29kZXMuYyBiL1Byb2dyYW1zL2NtZF9rZXljb2Rlcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYyOTUyNTMKLS0tIC9kZXYvbnVsbAorKysgYi9Qcm9ncmFtcy9jbWRfa2V5Y29kZXMuYwpAQCAtMCwwICsxLDgxNCBAQAorLyoKKyAqIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisgKiAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisgKgorICogQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKKyNpbmNsdWRlICJwcm9sb2d1ZS5oIgorCisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKyNpbmNsdWRlICJsb2cuaCIKKyNpbmNsdWRlICJyZXBvcnQuaCIKKyNpbmNsdWRlICJjbWRfcXVldWUuaCIKKyNpbmNsdWRlICJjbWRfa2V5Y29kZXMuaCIKKyNpbmNsdWRlICJrYmRfa2V5Y29kZXMuaCIKKyNpbmNsdWRlICJicmxfY21kcy5oIgorI2luY2x1ZGUgImFsZXJ0LmgiCisKK3R5cGVkZWYgZW51bSB7CisgIE1PRF9SRUxFQVNFID0gMCwgLyogbXVzdCBiZSBmaXJzdCAqLworCisgIE1PRF9HVUlfTEVGVCwKKyAgTU9EX0dVSV9SSUdIVCwKKyAgTU9EX0NPTlRFWFQsCisKKyAgTU9EX0xPQ0tfQ0FQUywKKyAgTU9EX0xPQ0tfU0NST0xMLAorICBNT0RfTE9DS19OVU1CRVIsCisKKyAgTU9EX1NISUZUX0xFRlQsCisgIE1PRF9TSElGVF9SSUdIVCwKKworICBNT0RfQ09OVFJPTF9MRUZULAorICBNT0RfQ09OVFJPTF9SSUdIVCwKKworICBNT0RfQUxUX0xFRlQsCisgIE1PRF9BTFRfUklHSFQKK30gTW9kaWZpZXI7CisKKyNkZWZpbmUgTU9EX0JJVChudW1iZXIpICgxIDw8IChudW1iZXIpKQorI2RlZmluZSBNT0RfU0VUKG51bWJlciwgYml0cykgKChiaXRzKSB8PSBNT0RfQklUKChudW1iZXIpKSkKKyNkZWZpbmUgTU9EX0NMUihudW1iZXIsIGJpdHMpICgoYml0cykgJj0gfk1PRF9CSVQoKG51bWJlcikpKQorI2RlZmluZSBNT0RfVFNUKG51bWJlciwgYml0cykgKChiaXRzKSAmIE1PRF9CSVQoKG51bWJlcikpKQorCit0eXBlZGVmIHN0cnVjdCB7CisgIGludCBjb21tYW5kOworICBpbnQgYWx0ZXJuYXRlOworfSBLZXlFbnRyeTsKKworc3RhdGljIGNvbnN0IEtleUVudHJ5IGtleUVudHJ5X0VzY2FwZSA9IHtCUkxfQ01EX0tFWShFU0NBUEUpfTsKK3N0YXRpYyBjb25zdCBLZXlFbnRyeSBrZXlFbnRyeV9GMSA9IHtCUkxfQ01EX0tGTigxKX07CitzdGF0aWMgY29uc3QgS2V5RW50cnkga2V5RW50cnlfRjIgPSB7QlJMX0NNRF9LRk4oMil9Oworc3RhdGljIGNvbnN0IEtleUVudHJ5IGtleUVudHJ5X0YzID0ge0JSTF9DTURfS0ZOKDMpfTsKK3N0YXRpYyBjb25zdCBLZXlFbnRyeSBrZXlFbnRyeV9GNCA9IHtCUkxfQ01EX0tGTig0KX07CitzdGF0aWMgY29uc3QgS2V5RW50cnkga2V5RW50cnlfRjUgPSB7QlJMX0NNRF9LRk4oNSl9Oworc3RhdGljIGNvbnN0IEtleUVudHJ5IGtleUVudHJ5X0Y2ID0ge0JSTF9DTURfS0ZOKDYpfTsKK3N0YXRpYyBjb25zdCBLZXlFbnRyeSBrZXlFbnRyeV9GNyA9IHtCUkxfQ01EX0tGTig3KX07CitzdGF0aWMgY29uc3QgS2V5RW50cnkga2V5RW50cnlfRjggPSB7QlJMX0NNRF9LRk4oOCl9Oworc3RhdGljIGNvbnN0IEtleUVudHJ5IGtleUVudHJ5X0Y5ID0ge0JSTF9DTURfS0ZOKDkpfTsKK3N0YXRpYyBjb25zdCBLZXlFbnRyeSBrZXlFbnRyeV9GMTAgPSB7QlJMX0NNRF9LRk4oMTApfTsKK3N0YXRpYyBjb25zdCBLZXlFbnRyeSBrZXlFbnRyeV9GMTEgPSB7QlJMX0NNRF9LRk4oMTEpfTsKK3N0YXRpYyBjb25zdCBLZXlFbnRyeSBrZXlFbnRyeV9GMTIgPSB7QlJMX0NNRF9LRk4oMTIpfTsKK3N0YXRpYyBjb25zdCBLZXlFbnRyeSBrZXlFbnRyeV9TY3JvbGxMb2NrID0ge01PRF9MT0NLX1NDUk9MTH07CisKK3N0YXRpYyBjb25zdCBLZXlFbnRyeSBrZXlFbnRyeV9GMTMgPSB7QlJMX0NNRF9LRk4oMTMpfTsKK3N0YXRpYyBjb25zdCBLZXlFbnRyeSBrZXlFbnRyeV9GMTQgPSB7QlJMX0NNRF9LRk4oMTQpfTsKK3N0YXRpYyBjb25zdCBLZXlFbnRyeSBrZXlFbnRyeV9GMTUgPSB7QlJMX0NNRF9LRk4oMTUpfTsKK3N0YXRpYyBjb25zdCBLZXlFbnRyeSBrZXlFbnRyeV9GMTYgPSB7QlJMX0NNRF9LRk4oMTYpfTsKK3N0YXRpYyBjb25zdCBLZXlFbnRyeSBrZXlFbnRyeV9GMTcgPSB7QlJMX0NNRF9LRk4oMTcpfTsKK3N0YXRpYyBjb25zdCBLZXlFbnRyeSBrZXlFbnRyeV9GMTggPSB7QlJMX0NNRF9LRk4oMTgpfTsKK3N0YXRpYyBjb25zdCBLZXlFbnRyeSBrZXlFbnRyeV9GMTkgPSB7QlJMX0NNRF9LRk4oMTkpfTsKK3N0YXRpYyBjb25zdCBLZXlFbnRyeSBrZXlFbnRyeV9GMjAgPSB7QlJMX0NNRF9LRk4oMjApfTsKK3N0YXRpYyBjb25zdCBLZXlFbnRyeSBrZXlFbnRyeV9GMjEgPSB7QlJMX0NNRF9LRk4oMjEpfTsKK3N0YXRpYyBjb25zdCBLZXlFbnRyeSBrZXlFbnRyeV9GMjIgPSB7QlJMX0NNRF9LRk4oMjIpfTsKK3N0YXRpYyBjb25zdCBLZXlFbnRyeSBrZXlFbnRyeV9GMjMgPSB7QlJMX0NNRF9LRk4oMjMpfTsKK3N0YXRpYyBjb25zdCBLZXlFbnRyeSBrZXlFbnRyeV9GMjQgPSB7QlJMX0NNRF9LRk4oMjQpfTsKKworc3RhdGljIGNvbnN0IEtleUVudHJ5IGtleUVudHJ5X0dyYXZlID0ge0JSTF9DTURfQ0hBUihXQ19DKCdgJykpLCBCUkxfQ01EX0NIQVIoV0NfQygnficpKX07CitzdGF0aWMgY29uc3QgS2V5RW50cnkga2V5RW50cnlfMSA9IHtCUkxfQ01EX0NIQVIoV0NfQygnMScpKSwgQlJMX0NNRF9DSEFSKFdDX0MoJyEnKSl9Oworc3RhdGljIGNvbnN0IEtleUVudHJ5IGtleUVudHJ5XzIgPSB7QlJMX0NNRF9DSEFSKFdDX0MoJzInKSksIEJSTF9DTURfQ0hBUihXQ19DKCdAJykpfTsKK3N0YXRpYyBjb25zdCBLZXlFbnRyeSBrZXlFbnRyeV8zID0ge0JSTF9DTURfQ0hBUihXQ19DKCczJykpLCBCUkxfQ01EX0NIQVIoV0NfQygnIycpKX07CitzdGF0aWMgY29uc3QgS2V5RW50cnkga2V5RW50cnlfNCA9IHtCUkxfQ01EX0NIQVIoV0NfQygnNCcpKSwgQlJMX0NNRF9DSEFSKFdDX0MoJyQnKSl9Oworc3RhdGljIGNvbnN0IEtleUVudHJ5IGtleUVudHJ5XzUgPSB7QlJMX0NNRF9DSEFSKFdDX0MoJzUnKSksIEJSTF9DTURfQ0hBUihXQ19DKCclJykpfTsKK3N0YXRpYyBjb25zdCBLZXlFbnRyeSBrZXlFbnRyeV82ID0ge0JSTF9DTURfQ0hBUihXQ19DKCc2JykpLCBCUkxfQ01EX0NIQVIoV0NfQygnXicpKX07CitzdGF0aWMgY29uc3QgS2V5RW50cnkga2V5RW50cnlfNyA9IHtCUkxfQ01EX0NIQVIoV0NfQygnNycpKSwgQlJMX0NNRF9DSEFSKFdDX0MoJyYnKSl9Oworc3RhdGljIGNvbnN0IEtleUVudHJ5IGtleUVudHJ5XzggPSB7QlJMX0NNRF9DSEFSKFdDX0MoJzgnKSksIEJSTF9DTURfQ0hBUihXQ19DKCcqJykpfTsKK3N0YXRpYyBjb25zdCBLZXlFbnRyeSBrZXlFbnRyeV85ID0ge0JSTF9DTURfQ0hBUihXQ19DKCc5JykpLCBCUkxfQ01EX0NIQVIoV0NfQygnKCcpKX07CitzdGF0aWMgY29uc3QgS2V5RW50cnkga2V5RW50cnlfMCA9IHtCUkxfQ01EX0NIQVIoV0NfQygnMCcpKSwgQlJMX0NNRF9DSEFSKFdDX0MoJyknKSl9Oworc3RhdGljIGNvbnN0IEtleUVudHJ5IGtleUVudHJ5X01pbnVzID0ge0JSTF9DTURfQ0hBUihXQ19DKCctJykpLCBCUkxfQ01EX0NIQVIoV0NfQygnXycpKX07CitzdGF0aWMgY29uc3QgS2V5RW50cnkga2V5RW50cnlfRXF1YWwgPSB7QlJMX0NNRF9DSEFSKFdDX0MoJz0nKSksIEJSTF9DTURfQ0hBUihXQ19DKCcrJykpfTsKK3N0YXRpYyBjb25zdCBLZXlFbnRyeSBrZXlFbnRyeV9CYWNrc3BhY2UgPSB7QlJMX0NNRF9LRVkoQkFDS1NQQUNFKX07CisKK3N0YXRpYyBjb25zdCBLZXlFbnRyeSBrZXlFbnRyeV9UYWIgPSB7QlJMX0NNRF9LRVkoVEFCKX07CitzdGF0aWMgY29uc3QgS2V5RW50cnkga2V5RW50cnlfUSA9IHtCUkxfQ01EX0NIQVIoV0NfQygncScpKSwgQlJMX0NNRF9DSEFSKFdDX0MoJ1EnKSl9Oworc3RhdGljIGNvbnN0IEtleUVudHJ5IGtleUVudHJ5X1cgPSB7QlJMX0NNRF9DSEFSKFdDX0MoJ3cnKSksIEJSTF9DTURfQ0hBUihXQ19DKCdXJykpfTsKK3N0YXRpYyBjb25zdCBLZXlFbnRyeSBrZXlFbnRyeV9FID0ge0JSTF9DTURfQ0hBUihXQ19DKCdlJykpLCBCUkxfQ01EX0NIQVIoV0NfQygnRScpKX07CitzdGF0aWMgY29uc3QgS2V5RW50cnkga2V5RW50cnlfUiA9IHtCUkxfQ01EX0NIQVIoV0NfQygncicpKSwgQlJMX0NNRF9DSEFSKFdDX0MoJ1InKSl9Oworc3RhdGljIGNvbnN0IEtleUVudHJ5IGtleUVudHJ5X1QgPSB7QlJMX0NNRF9DSEFSKFdDX0MoJ3QnKSksIEJSTF9DTURfQ0hBUihXQ19DKCdUJykpfTsKK3N0YXRpYyBjb25zdCBLZXlFbnRyeSBrZXlFbnRyeV9ZID0ge0JSTF9DTURfQ0hBUihXQ19DKCd5JykpLCBCUkxfQ01EX0NIQVIoV0NfQygnWScpKX07CitzdGF0aWMgY29uc3QgS2V5RW50cnkga2V5RW50cnlfVSA9IHtCUkxfQ01EX0NIQVIoV0NfQygndScpKSwgQlJMX0NNRF9DSEFSKFdDX0MoJ1UnKSl9Oworc3RhdGljIGNvbnN0IEtleUVudHJ5IGtleUVudHJ5X0kgPSB7QlJMX0NNRF9DSEFSKFdDX0MoJ2knKSksIEJSTF9DTURfQ0hBUihXQ19DKCdJJykpfTsKK3N0YXRpYyBjb25zdCBLZXlFbnRyeSBrZXlFbnRyeV9PID0ge0JSTF9DTURfQ0hBUihXQ19DKCdvJykpLCBCUkxfQ01EX0NIQVIoV0NfQygnTycpKX07CitzdGF0aWMgY29uc3QgS2V5RW50cnkga2V5RW50cnlfUCA9IHtCUkxfQ01EX0NIQVIoV0NfQygncCcpKSwgQlJMX0NNRF9DSEFSKFdDX0MoJ1AnKSl9Oworc3RhdGljIGNvbnN0IEtleUVudHJ5IGtleUVudHJ5X0xlZnRCcmFja2V0ID0ge0JSTF9DTURfQ0hBUihXQ19DKCdbJykpLCBCUkxfQ01EX0NIQVIoV0NfQygneycpKX07CitzdGF0aWMgY29uc3QgS2V5RW50cnkga2V5RW50cnlfUmlnaHRCcmFja2V0ID0ge0JSTF9DTURfQ0hBUihXQ19DKCddJykpLCBCUkxfQ01EX0NIQVIoV0NfQygnfScpKX07CitzdGF0aWMgY29uc3QgS2V5RW50cnkga2V5RW50cnlfQmFja3NsYXNoID0ge0JSTF9DTURfQ0hBUignXFwnKSwgQlJMX0NNRF9DSEFSKFdDX0MoJ3wnKSl9OworCitzdGF0aWMgY29uc3QgS2V5RW50cnkga2V5RW50cnlfQ2Fwc0xvY2sgPSB7TU9EX0xPQ0tfQ0FQU307CitzdGF0aWMgY29uc3QgS2V5RW50cnkga2V5RW50cnlfQSA9IHtCUkxfQ01EX0NIQVIoV0NfQygnYScpKSwgQlJMX0NNRF9DSEFSKFdDX0MoJ0EnKSl9Oworc3RhdGljIGNvbnN0IEtleUVudHJ5IGtleUVudHJ5X1MgPSB7QlJMX0NNRF9DSEFSKFdDX0MoJ3MnKSksIEJSTF9DTURfQ0hBUihXQ19DKCdTJykpfTsKK3N0YXRpYyBjb25zdCBLZXlFbnRyeSBrZXlFbnRyeV9EID0ge0JSTF9DTURfQ0hBUihXQ19DKCdkJykpLCBCUkxfQ01EX0NIQVIoV0NfQygnRCcpKX07CitzdGF0aWMgY29uc3QgS2V5RW50cnkga2V5RW50cnlfRiA9IHtCUkxfQ01EX0NIQVIoV0NfQygnZicpKSwgQlJMX0NNRF9DSEFSKFdDX0MoJ0YnKSl9Oworc3RhdGljIGNvbnN0IEtleUVudHJ5IGtleUVudHJ5X0cgPSB7QlJMX0NNRF9DSEFSKFdDX0MoJ2cnKSksIEJSTF9DTURfQ0hBUihXQ19DKCdHJykpfTsKK3N0YXRpYyBjb25zdCBLZXlFbnRyeSBrZXlFbnRyeV9IID0ge0JSTF9DTURfQ0hBUihXQ19DKCdoJykpLCBCUkxfQ01EX0NIQVIoV0NfQygnSCcpKX07CitzdGF0aWMgY29uc3QgS2V5RW50cnkga2V5RW50cnlfSiA9IHtCUkxfQ01EX0NIQVIoV0NfQygnaicpKSwgQlJMX0NNRF9DSEFSKFdDX0MoJ0onKSl9Oworc3RhdGljIGNvbnN0IEtleUVudHJ5IGtleUVudHJ5X0sgPSB7QlJMX0NNRF9DSEFSKFdDX0MoJ2snKSksIEJSTF9DTURfQ0hBUihXQ19DKCdLJykpfTsKK3N0YXRpYyBjb25zdCBLZXlFbnRyeSBrZXlFbnRyeV9MID0ge0JSTF9DTURfQ0hBUihXQ19DKCdsJykpLCBCUkxfQ01EX0NIQVIoV0NfQygnTCcpKX07CitzdGF0aWMgY29uc3QgS2V5RW50cnkga2V5RW50cnlfU2VtaWNvbG9uID0ge0JSTF9DTURfQ0hBUihXQ19DKCc7JykpLCBCUkxfQ01EX0NIQVIoV0NfQygnOicpKX07CitzdGF0aWMgY29uc3QgS2V5RW50cnkga2V5RW50cnlfQXBvc3Ryb3BoZSA9IHtCUkxfQ01EX0NIQVIoV0NfQygnXCcnKSksIEJSTF9DTURfQ0hBUihXQ19DKCciJykpfTsKK3N0YXRpYyBjb25zdCBLZXlFbnRyeSBrZXlFbnRyeV9FbnRlciA9IHtCUkxfQ01EX0tFWShFTlRFUil9OworCitzdGF0aWMgY29uc3QgS2V5RW50cnkga2V5RW50cnlfTGVmdFNoaWZ0ID0ge01PRF9TSElGVF9MRUZUfTsKK3N0YXRpYyBjb25zdCBLZXlFbnRyeSBrZXlFbnRyeV9FdXJvcGUyID0ge0JSTF9DTURfQ0hBUihXQ19DKCc8JykpLCBCUkxfQ01EX0NIQVIoV0NfQygnPicpKX07CitzdGF0aWMgY29uc3QgS2V5RW50cnkga2V5RW50cnlfWiA9IHtCUkxfQ01EX0NIQVIoV0NfQygneicpKSwgQlJMX0NNRF9DSEFSKFdDX0MoJ1onKSl9Oworc3RhdGljIGNvbnN0IEtleUVudHJ5IGtleUVudHJ5X1ggPSB7QlJMX0NNRF9DSEFSKFdDX0MoJ3gnKSksIEJSTF9DTURfQ0hBUihXQ19DKCdYJykpfTsKK3N0YXRpYyBjb25zdCBLZXlFbnRyeSBrZXlFbnRyeV9DID0ge0JSTF9DTURfQ0hBUihXQ19DKCdjJykpLCBCUkxfQ01EX0NIQVIoV0NfQygnQycpKX07CitzdGF0aWMgY29uc3QgS2V5RW50cnkga2V5RW50cnlfViA9IHtCUkxfQ01EX0NIQVIoV0NfQygndicpKSwgQlJMX0NNRF9DSEFSKFdDX0MoJ1YnKSl9Oworc3RhdGljIGNvbnN0IEtleUVudHJ5IGtleUVudHJ5X0IgPSB7QlJMX0NNRF9DSEFSKFdDX0MoJ2InKSksIEJSTF9DTURfQ0hBUihXQ19DKCdCJykpfTsKK3N0YXRpYyBjb25zdCBLZXlFbnRyeSBrZXlFbnRyeV9OID0ge0JSTF9DTURfQ0hBUihXQ19DKCduJykpLCBCUkxfQ01EX0NIQVIoV0NfQygnTicpKX07CitzdGF0aWMgY29uc3QgS2V5RW50cnkga2V5RW50cnlfTSA9IHtCUkxfQ01EX0NIQVIoV0NfQygnbScpKSwgQlJMX0NNRF9DSEFSKFdDX0MoJ00nKSl9Oworc3RhdGljIGNvbnN0IEtleUVudHJ5IGtleUVudHJ5X0NvbW1hID0ge0JSTF9DTURfQ0hBUihXQ19DKCcsJykpLCBCUkxfQ01EX0NIQVIoV0NfQygnPCcpKX07CitzdGF0aWMgY29uc3QgS2V5RW50cnkga2V5RW50cnlfUGVyaW9kID0ge0JSTF9DTURfQ0hBUihXQ19DKCcuJykpLCBCUkxfQ01EX0NIQVIoV0NfQygnPicpKX07CitzdGF0aWMgY29uc3QgS2V5RW50cnkga2V5RW50cnlfU2xhc2ggPSB7QlJMX0NNRF9DSEFSKFdDX0MoJy8nKSksIEJSTF9DTURfQ0hBUihXQ19DKCc/JykpfTsKK3N0YXRpYyBjb25zdCBLZXlFbnRyeSBrZXlFbnRyeV9SaWdodFNoaWZ0ID0ge01PRF9TSElGVF9SSUdIVH07CisKK3N0YXRpYyBjb25zdCBLZXlFbnRyeSBrZXlFbnRyeV9MZWZ0Q29udHJvbCA9IHtNT0RfQ09OVFJPTF9MRUZUfTsKK3N0YXRpYyBjb25zdCBLZXlFbnRyeSBrZXlFbnRyeV9MZWZ0R1VJID0ge01PRF9HVUlfTEVGVH07CitzdGF0aWMgY29uc3QgS2V5RW50cnkga2V5RW50cnlfTGVmdEFsdCA9IHtNT0RfQUxUX0xFRlR9Oworc3RhdGljIGNvbnN0IEtleUVudHJ5IGtleUVudHJ5X1NwYWNlID0ge0JSTF9DTURfQ0hBUihXQ19DKCcgJykpfTsKK3N0YXRpYyBjb25zdCBLZXlFbnRyeSBrZXlFbnRyeV9SaWdodEFsdCA9IHtNT0RfQUxUX1JJR0hUfTsKK3N0YXRpYyBjb25zdCBLZXlFbnRyeSBrZXlFbnRyeV9SaWdodEdVSSA9IHtNT0RfR1VJX1JJR0hUfTsKK3N0YXRpYyBjb25zdCBLZXlFbnRyeSBrZXlFbnRyeV9Db250ZXh0ID0ge01PRF9DT05URVhUfTsKK3N0YXRpYyBjb25zdCBLZXlFbnRyeSBrZXlFbnRyeV9SaWdodENvbnRyb2wgPSB7TU9EX0NPTlRST0xfUklHSFR9OworCitzdGF0aWMgY29uc3QgS2V5RW50cnkga2V5RW50cnlfSW5zZXJ0ID0ge0JSTF9DTURfS0VZKElOU0VSVCl9Oworc3RhdGljIGNvbnN0IEtleUVudHJ5IGtleUVudHJ5X0RlbGV0ZSA9IHtCUkxfQ01EX0tFWShERUxFVEUpfTsKK3N0YXRpYyBjb25zdCBLZXlFbnRyeSBrZXlFbnRyeV9Ib21lID0ge0JSTF9DTURfS0VZKEhPTUUpfTsKK3N0YXRpYyBjb25zdCBLZXlFbnRyeSBrZXlFbnRyeV9FbmQgPSB7QlJMX0NNRF9LRVkoRU5EKX07CitzdGF0aWMgY29uc3QgS2V5RW50cnkga2V5RW50cnlfUGFnZVVwID0ge0JSTF9DTURfS0VZKFBBR0VfVVApfTsKK3N0YXRpYyBjb25zdCBLZXlFbnRyeSBrZXlFbnRyeV9QYWdlRG93biA9IHtCUkxfQ01EX0tFWShQQUdFX0RPV04pfTsKKworc3RhdGljIGNvbnN0IEtleUVudHJ5IGtleUVudHJ5X0Fycm93VXAgPSB7QlJMX0NNRF9LRVkoQ1VSU09SX1VQKX07CitzdGF0aWMgY29uc3QgS2V5RW50cnkga2V5RW50cnlfQXJyb3dMZWZ0ID0ge0JSTF9DTURfS0VZKENVUlNPUl9MRUZUKX07CitzdGF0aWMgY29uc3QgS2V5RW50cnkga2V5RW50cnlfQXJyb3dEb3duID0ge0JSTF9DTURfS0VZKENVUlNPUl9ET1dOKX07CitzdGF0aWMgY29uc3QgS2V5RW50cnkga2V5RW50cnlfQXJyb3dSaWdodCA9IHtCUkxfQ01EX0tFWShDVVJTT1JfUklHSFQpfTsKKworc3RhdGljIGNvbnN0IEtleUVudHJ5IGtleUVudHJ5X051bUxvY2sgPSB7TU9EX0xPQ0tfTlVNQkVSfTsKK3N0YXRpYyBjb25zdCBLZXlFbnRyeSBrZXlFbnRyeV9LUFNsYXNoID0ge0JSTF9DTURfQ0hBUihXQ19DKCcvJykpfTsKK3N0YXRpYyBjb25zdCBLZXlFbnRyeSBrZXlFbnRyeV9LUEFzdGVyaXNrID0ge0JSTF9DTURfQ0hBUihXQ19DKCcqJykpfTsKK3N0YXRpYyBjb25zdCBLZXlFbnRyeSBrZXlFbnRyeV9LUE1pbnVzID0ge0JSTF9DTURfQ0hBUihXQ19DKCctJykpfTsKK3N0YXRpYyBjb25zdCBLZXlFbnRyeSBrZXlFbnRyeV9LUFBsdXMgPSB7QlJMX0NNRF9DSEFSKFdDX0MoJysnKSl9Oworc3RhdGljIGNvbnN0IEtleUVudHJ5IGtleUVudHJ5X0tQRW50ZXIgPSB7QlJMX0NNRF9LRVkoRU5URVIpfTsKK3N0YXRpYyBjb25zdCBLZXlFbnRyeSBrZXlFbnRyeV9LUFBlcmlvZCA9IHtCUkxfQ01EX0tFWShERUxFVEUpLCBCUkxfQ01EX0NIQVIoV0NfQygnLicpKX07CitzdGF0aWMgY29uc3QgS2V5RW50cnkga2V5RW50cnlfS1AwID0ge0JSTF9DTURfS0VZKElOU0VSVCksIEJSTF9DTURfQ0hBUihXQ19DKCcwJykpfTsKK3N0YXRpYyBjb25zdCBLZXlFbnRyeSBrZXlFbnRyeV9LUDEgPSB7QlJMX0NNRF9LRVkoRU5EKSwgQlJMX0NNRF9DSEFSKFdDX0MoJzEnKSl9Oworc3RhdGljIGNvbnN0IEtleUVudHJ5IGtleUVudHJ5X0tQMiA9IHtCUkxfQ01EX0tFWShDVVJTT1JfRE9XTiksIEJSTF9DTURfQ0hBUihXQ19DKCcyJykpfTsKK3N0YXRpYyBjb25zdCBLZXlFbnRyeSBrZXlFbnRyeV9LUDMgPSB7QlJMX0NNRF9LRVkoUEFHRV9ET1dOKSwgQlJMX0NNRF9DSEFSKFdDX0MoJzMnKSl9Oworc3RhdGljIGNvbnN0IEtleUVudHJ5IGtleUVudHJ5X0tQNCA9IHtCUkxfQ01EX0tFWShDVVJTT1JfTEVGVCksIEJSTF9DTURfQ0hBUihXQ19DKCc0JykpfTsKK3N0YXRpYyBjb25zdCBLZXlFbnRyeSBrZXlFbnRyeV9LUDUgPSB7QlJMX0NNRF9DSEFSKFdDX0MoJzUnKSl9Oworc3RhdGljIGNvbnN0IEtleUVudHJ5IGtleUVudHJ5X0tQNiA9IHtCUkxfQ01EX0tFWShDVVJTT1JfUklHSFQpLCBCUkxfQ01EX0NIQVIoV0NfQygnNicpKX07CitzdGF0aWMgY29uc3QgS2V5RW50cnkga2V5RW50cnlfS1A3ID0ge0JSTF9DTURfS0VZKEhPTUUpLCBCUkxfQ01EX0NIQVIoV0NfQygnNycpKX07CitzdGF0aWMgY29uc3QgS2V5RW50cnkga2V5RW50cnlfS1A4ID0ge0JSTF9DTURfS0VZKENVUlNPUl9VUCksIEJSTF9DTURfQ0hBUihXQ19DKCc4JykpfTsKK3N0YXRpYyBjb25zdCBLZXlFbnRyeSBrZXlFbnRyeV9LUDkgPSB7QlJMX0NNRF9LRVkoUEFHRV9VUCksIEJSTF9DTURfQ0hBUihXQ19DKCc5JykpfTsKK3N0YXRpYyBjb25zdCBLZXlFbnRyeSBrZXlFbnRyeV9LUENvbW1hID0ge0JSTF9DTURfQ0hBUihXQ19DKCcsJykpfTsKKwordHlwZWRlZiBzdHJ1Y3QgeworICBSZXBvcnRMaXN0ZW5lckluc3RhbmNlICpyZXNldExpc3RlbmVyOworCisgIHN0cnVjdCB7CisgICAgY29uc3QgS2V5RW50cnkgKmNvbnN0ICprZXlNYXA7CisgICAgc2l6ZV90IGtleUNvdW50OworICAgIHVuc2lnbmVkIGludCBtb2RpZmllcnM7CisgIH0geHQ7CisKKyAgc3RydWN0IHsKKyAgICBjb25zdCBLZXlFbnRyeSAqY29uc3QgKmtleU1hcDsKKyAgICBzaXplX3Qga2V5Q291bnQ7CisgICAgdW5zaWduZWQgaW50IG1vZGlmaWVyczsKKyAgfSBhdDsKKworICBzdHJ1Y3QgeworICAgIHVuc2lnbmVkIGludCBtb2RpZmllcnM7CisgIH0gcHMyOworfSBLZXljb2RlQ29tbWFuZERhdGE7CisKKyNkZWZpbmUgVVNFX0tFWV9NQVAoc2V0LGVzY2FwZSkgXAorICAoa2NkLT5zZXQua2V5Q291bnQgPSAoa2NkLT5zZXQua2V5TWFwID0gc2V0IyNLZXlNYXAjI2VzY2FwZSk/IFwKKyAgKHNpemVvZihzZXQjI0tleU1hcCMjZXNjYXBlKSAvIHNpemVvZigqa2NkLT5zZXQua2V5TWFwKSk6IDApCisKK3N0YXRpYyB2b2lkCitoYW5kbGVLZXkgKGNvbnN0IEtleUVudHJ5ICprZXksIGludCByZWxlYXNlLCB1bnNpZ25lZCBpbnQgKm1vZGlmaWVycykgeworICBpZiAoa2V5KSB7CisgICAgaW50IGNtZCA9IGtleS0+Y29tbWFuZDsKKyAgICBpbnQgYmxrID0gY21kICYgQlJMX01TS19CTEs7CisKKyAgICBpZiAoa2V5LT5hbHRlcm5hdGUpIHsKKyAgICAgIGludCBhbHRlcm5hdGUgPSAwOworCisgICAgICBpZiAoYmxrID09IEJSTF9DTURfQkxLKFBBU1NDSEFSKSkgeworICAgICAgICBpZiAoTU9EX1RTVChNT0RfU0hJRlRfTEVGVCwgKm1vZGlmaWVycykgfHwgTU9EX1RTVChNT0RfU0hJRlRfUklHSFQsICptb2RpZmllcnMpKSBhbHRlcm5hdGUgPSAxOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKE1PRF9UU1QoTU9EX0xPQ0tfTlVNQkVSLCAqbW9kaWZpZXJzKSkgYWx0ZXJuYXRlID0gMTsKKyAgICAgIH0KKworICAgICAgaWYgKGFsdGVybmF0ZSkgeworICAgICAgICBjbWQgPSBrZXktPmFsdGVybmF0ZTsKKyAgICAgICAgYmxrID0gY21kICYgQlJMX01TS19CTEs7CisgICAgICB9CisgICAgfQorCisgICAgaWYgKGNtZCkgeworICAgICAgaWYgKGJsaykgeworICAgICAgICBpZiAoIXJlbGVhc2UpIHsKKyAgICAgICAgICBpZiAoYmxrID09IEJSTF9DTURfQkxLKFBBU1NDSEFSKSkgeworICAgICAgICAgICAgaWYgKE1PRF9UU1QoTU9EX0xPQ0tfQ0FQUywgKm1vZGlmaWVycykpIGNtZCB8PSBCUkxfRkxHX0lOUFVUX1VQUEVSOworICAgICAgICAgICAgaWYgKE1PRF9UU1QoTU9EX0FMVF9MRUZULCAqbW9kaWZpZXJzKSkgY21kIHw9IEJSTF9GTEdfSU5QVVRfTUVUQTsKKyAgICAgICAgICAgIGlmIChNT0RfVFNUKE1PRF9BTFRfUklHSFQsICptb2RpZmllcnMpKSBjbWQgfD0gQlJMX0ZMR19JTlBVVF9BTFRHUjsKKyAgICAgICAgICAgIGlmIChNT0RfVFNUKE1PRF9HVUlfTEVGVCwgKm1vZGlmaWVycykgfHwgTU9EX1RTVChNT0RfR1VJX1JJR0hULCAqbW9kaWZpZXJzKSkgY21kIHw9IEJSTF9GTEdfSU5QVVRfR1VJOworICAgICAgICAgICAgaWYgKE1PRF9UU1QoTU9EX0NPTlRST0xfTEVGVCwgKm1vZGlmaWVycykgfHwgTU9EX1RTVChNT0RfQ09OVFJPTF9SSUdIVCwgKm1vZGlmaWVycykpIGNtZCB8PSBCUkxfRkxHX0lOUFVUX0NPTlRST0w7CisgICAgICAgICAgfSBlbHNlIGlmICgoYmxrID09IEJSTF9DTURfQkxLKFBBU1NLRVkpKSAmJiBNT0RfVFNUKE1PRF9BTFRfTEVGVCwgKm1vZGlmaWVycykpIHsKKyAgICAgICAgICAgIGludCBhcmcgPSBjbWQgJiBCUkxfTVNLX0FSRzsKKworICAgICAgICAgICAgc3dpdGNoIChhcmcpIHsKKyAgICAgICAgICAgICAgY2FzZSBCUkxfS0VZX0NVUlNPUl9MRUZUOgorICAgICAgICAgICAgICAgIGNtZCA9IEJSTF9DTURfU1dJVENIVlRfUFJFVjsKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICBjYXNlIEJSTF9LRVlfQ1VSU09SX1JJR0hUOgorICAgICAgICAgICAgICAgIGNtZCA9IEJSTF9DTURfU1dJVENIVlRfTkVYVDsKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIGlmIChhcmcgPj0gQlJMX0tFWV9GVU5DVElPTikgeworICAgICAgICAgICAgICAgICAgY21kID0gQlJMX0NNRF9CTEsoU1dJVENIVlQpICsgKGFyZyAtIEJSTF9LRVlfRlVOQ1RJT04pOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgIH0KKworICAgICAgICAgIGhhbmRsZUNvbW1hbmQoY21kKTsKKyAgICAgICAgfQorICAgICAgfSBlbHNlIHsKKyAgICAgICAgc3dpdGNoIChjbWQpIHsKKyAgICAgICAgICBjYXNlIE1PRF9MT0NLX1NDUk9MTDoKKyAgICAgICAgICBjYXNlIE1PRF9MT0NLX05VTUJFUjoKKyAgICAgICAgICBjYXNlIE1PRF9MT0NLX0NBUFM6CisgICAgICAgICAgICBpZiAoIXJlbGVhc2UpIHsKKyAgICAgICAgICAgICAgaWYgKE1PRF9UU1QoY21kLCAqbW9kaWZpZXJzKSkgeworICAgICAgICAgICAgICAgIE1PRF9DTFIoY21kLCAqbW9kaWZpZXJzKTsKKyAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBNT0RfU0VUKGNtZCwgKm1vZGlmaWVycyk7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICBjYXNlIE1PRF9TSElGVF9MRUZUOgorICAgICAgICAgIGNhc2UgTU9EX1NISUZUX1JJR0hUOgorICAgICAgICAgIGNhc2UgTU9EX0NPTlRST0xfTEVGVDoKKyAgICAgICAgICBjYXNlIE1PRF9DT05UUk9MX1JJR0hUOgorICAgICAgICAgIGNhc2UgTU9EX0FMVF9MRUZUOgorICAgICAgICAgIGNhc2UgTU9EX0FMVF9SSUdIVDoKKyAgICAgICAgICAgIGlmIChyZWxlYXNlKSB7CisgICAgICAgICAgICAgIE1PRF9DTFIoY21kLCAqbW9kaWZpZXJzKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgIE1PRF9TRVQoY21kLCAqbW9kaWZpZXJzKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9CisgIH0KK30KKworc3RhdGljIGNvbnN0IEtleUVudHJ5ICpjb25zdCB4dEtleU1hcDAwW10gPSB7CisgIFtYVF9LRVlfMDBfRXNjYXBlXSA9ICZrZXlFbnRyeV9Fc2NhcGUsCisgIFtYVF9LRVlfMDBfRjFdID0gJmtleUVudHJ5X0YxLAorICBbWFRfS0VZXzAwX0YyXSA9ICZrZXlFbnRyeV9GMiwKKyAgW1hUX0tFWV8wMF9GM10gPSAma2V5RW50cnlfRjMsCisgIFtYVF9LRVlfMDBfRjRdID0gJmtleUVudHJ5X0Y0LAorICBbWFRfS0VZXzAwX0Y1XSA9ICZrZXlFbnRyeV9GNSwKKyAgW1hUX0tFWV8wMF9GNl0gPSAma2V5RW50cnlfRjYsCisgIFtYVF9LRVlfMDBfRjddID0gJmtleUVudHJ5X0Y3LAorICBbWFRfS0VZXzAwX0Y4XSA9ICZrZXlFbnRyeV9GOCwKKyAgW1hUX0tFWV8wMF9GOV0gPSAma2V5RW50cnlfRjksCisgIFtYVF9LRVlfMDBfRjEwXSA9ICZrZXlFbnRyeV9GMTAsCisgIFtYVF9LRVlfMDBfRjExXSA9ICZrZXlFbnRyeV9GMTEsCisgIFtYVF9LRVlfMDBfRjEyXSA9ICZrZXlFbnRyeV9GMTIsCisgIFtYVF9LRVlfMDBfU2Nyb2xsTG9ja10gPSAma2V5RW50cnlfU2Nyb2xsTG9jaywKKworICBbWFRfS0VZXzAwX0YxM10gPSAma2V5RW50cnlfRjEzLAorICBbWFRfS0VZXzAwX0YxNF0gPSAma2V5RW50cnlfRjE0LAorICBbWFRfS0VZXzAwX0YxNV0gPSAma2V5RW50cnlfRjE1LAorICBbWFRfS0VZXzAwX0YxNl0gPSAma2V5RW50cnlfRjE2LAorICBbWFRfS0VZXzAwX0YxN10gPSAma2V5RW50cnlfRjE3LAorICBbWFRfS0VZXzAwX0YxOF0gPSAma2V5RW50cnlfRjE4LAorICBbWFRfS0VZXzAwX0YxOV0gPSAma2V5RW50cnlfRjE5LAorICBbWFRfS0VZXzAwX0YyMF0gPSAma2V5RW50cnlfRjIwLAorICBbWFRfS0VZXzAwX0YyMV0gPSAma2V5RW50cnlfRjIxLAorICBbWFRfS0VZXzAwX0YyMl0gPSAma2V5RW50cnlfRjIyLAorICBbWFRfS0VZXzAwX0YyM10gPSAma2V5RW50cnlfRjIzLAorICBbWFRfS0VZXzAwX0YyNF0gPSAma2V5RW50cnlfRjI0LAorCisgIFtYVF9LRVlfMDBfR3JhdmVdID0gJmtleUVudHJ5X0dyYXZlLAorICBbWFRfS0VZXzAwXzFdID0gJmtleUVudHJ5XzEsCisgIFtYVF9LRVlfMDBfMl0gPSAma2V5RW50cnlfMiwKKyAgW1hUX0tFWV8wMF8zXSA9ICZrZXlFbnRyeV8zLAorICBbWFRfS0VZXzAwXzRdID0gJmtleUVudHJ5XzQsCisgIFtYVF9LRVlfMDBfNV0gPSAma2V5RW50cnlfNSwKKyAgW1hUX0tFWV8wMF82XSA9ICZrZXlFbnRyeV82LAorICBbWFRfS0VZXzAwXzddID0gJmtleUVudHJ5XzcsCisgIFtYVF9LRVlfMDBfOF0gPSAma2V5RW50cnlfOCwKKyAgW1hUX0tFWV8wMF85XSA9ICZrZXlFbnRyeV85LAorICBbWFRfS0VZXzAwXzBdID0gJmtleUVudHJ5XzAsCisgIFtYVF9LRVlfMDBfTWludXNdID0gJmtleUVudHJ5X01pbnVzLAorICBbWFRfS0VZXzAwX0VxdWFsXSA9ICZrZXlFbnRyeV9FcXVhbCwKKyAgW1hUX0tFWV8wMF9CYWNrc3BhY2VdID0gJmtleUVudHJ5X0JhY2tzcGFjZSwKKworICBbWFRfS0VZXzAwX1RhYl0gPSAma2V5RW50cnlfVGFiLAorICBbWFRfS0VZXzAwX1FdID0gJmtleUVudHJ5X1EsCisgIFtYVF9LRVlfMDBfV10gPSAma2V5RW50cnlfVywKKyAgW1hUX0tFWV8wMF9FXSA9ICZrZXlFbnRyeV9FLAorICBbWFRfS0VZXzAwX1JdID0gJmtleUVudHJ5X1IsCisgIFtYVF9LRVlfMDBfVF0gPSAma2V5RW50cnlfVCwKKyAgW1hUX0tFWV8wMF9ZXSA9ICZrZXlFbnRyeV9ZLAorICBbWFRfS0VZXzAwX1VdID0gJmtleUVudHJ5X1UsCisgIFtYVF9LRVlfMDBfSV0gPSAma2V5RW50cnlfSSwKKyAgW1hUX0tFWV8wMF9PXSA9ICZrZXlFbnRyeV9PLAorICBbWFRfS0VZXzAwX1BdID0gJmtleUVudHJ5X1AsCisgIFtYVF9LRVlfMDBfTGVmdEJyYWNrZXRdID0gJmtleUVudHJ5X0xlZnRCcmFja2V0LAorICBbWFRfS0VZXzAwX1JpZ2h0QnJhY2tldF0gPSAma2V5RW50cnlfUmlnaHRCcmFja2V0LAorICBbWFRfS0VZXzAwX0JhY2tzbGFzaF0gPSAma2V5RW50cnlfQmFja3NsYXNoLAorCisgIFtYVF9LRVlfMDBfQ2Fwc0xvY2tdID0gJmtleUVudHJ5X0NhcHNMb2NrLAorICBbWFRfS0VZXzAwX0FdID0gJmtleUVudHJ5X0EsCisgIFtYVF9LRVlfMDBfU10gPSAma2V5RW50cnlfUywKKyAgW1hUX0tFWV8wMF9EXSA9ICZrZXlFbnRyeV9ELAorICBbWFRfS0VZXzAwX0ZdID0gJmtleUVudHJ5X0YsCisgIFtYVF9LRVlfMDBfR10gPSAma2V5RW50cnlfRywKKyAgW1hUX0tFWV8wMF9IXSA9ICZrZXlFbnRyeV9ILAorICBbWFRfS0VZXzAwX0pdID0gJmtleUVudHJ5X0osCisgIFtYVF9LRVlfMDBfS10gPSAma2V5RW50cnlfSywKKyAgW1hUX0tFWV8wMF9MXSA9ICZrZXlFbnRyeV9MLAorICBbWFRfS0VZXzAwX1NlbWljb2xvbl0gPSAma2V5RW50cnlfU2VtaWNvbG9uLAorICBbWFRfS0VZXzAwX0Fwb3N0cm9waGVdID0gJmtleUVudHJ5X0Fwb3N0cm9waGUsCisgIFtYVF9LRVlfMDBfRW50ZXJdID0gJmtleUVudHJ5X0VudGVyLAorCisgIFtYVF9LRVlfMDBfTGVmdFNoaWZ0XSA9ICZrZXlFbnRyeV9MZWZ0U2hpZnQsCisgIFtYVF9LRVlfMDBfRXVyb3BlMl0gPSAma2V5RW50cnlfRXVyb3BlMiwKKyAgW1hUX0tFWV8wMF9aXSA9ICZrZXlFbnRyeV9aLAorICBbWFRfS0VZXzAwX1hdID0gJmtleUVudHJ5X1gsCisgIFtYVF9LRVlfMDBfQ10gPSAma2V5RW50cnlfQywKKyAgW1hUX0tFWV8wMF9WXSA9ICZrZXlFbnRyeV9WLAorICBbWFRfS0VZXzAwX0JdID0gJmtleUVudHJ5X0IsCisgIFtYVF9LRVlfMDBfTl0gPSAma2V5RW50cnlfTiwKKyAgW1hUX0tFWV8wMF9NXSA9ICZrZXlFbnRyeV9NLAorICBbWFRfS0VZXzAwX0NvbW1hXSA9ICZrZXlFbnRyeV9Db21tYSwKKyAgW1hUX0tFWV8wMF9QZXJpb2RdID0gJmtleUVudHJ5X1BlcmlvZCwKKyAgW1hUX0tFWV8wMF9TbGFzaF0gPSAma2V5RW50cnlfU2xhc2gsCisgIFtYVF9LRVlfMDBfUmlnaHRTaGlmdF0gPSAma2V5RW50cnlfUmlnaHRTaGlmdCwKKworICBbWFRfS0VZXzAwX0xlZnRDb250cm9sXSA9ICZrZXlFbnRyeV9MZWZ0Q29udHJvbCwKKyAgW1hUX0tFWV8wMF9MZWZ0QWx0XSA9ICZrZXlFbnRyeV9MZWZ0QWx0LAorICBbWFRfS0VZXzAwX1NwYWNlXSA9ICZrZXlFbnRyeV9TcGFjZSwKKworICBbWFRfS0VZXzAwX051bUxvY2tdID0gJmtleUVudHJ5X051bUxvY2ssCisgIFtYVF9LRVlfMDBfS1BBc3Rlcmlza10gPSAma2V5RW50cnlfS1BBc3RlcmlzaywKKyAgW1hUX0tFWV8wMF9LUE1pbnVzXSA9ICZrZXlFbnRyeV9LUE1pbnVzLAorICBbWFRfS0VZXzAwX0tQUGx1c10gPSAma2V5RW50cnlfS1BQbHVzLAorICBbWFRfS0VZXzAwX0tQUGVyaW9kXSA9ICZrZXlFbnRyeV9LUFBlcmlvZCwKKyAgW1hUX0tFWV8wMF9LUDBdID0gJmtleUVudHJ5X0tQMCwKKyAgW1hUX0tFWV8wMF9LUDFdID0gJmtleUVudHJ5X0tQMSwKKyAgW1hUX0tFWV8wMF9LUDJdID0gJmtleUVudHJ5X0tQMiwKKyAgW1hUX0tFWV8wMF9LUDNdID0gJmtleUVudHJ5X0tQMywKKyAgW1hUX0tFWV8wMF9LUDRdID0gJmtleUVudHJ5X0tQNCwKKyAgW1hUX0tFWV8wMF9LUDVdID0gJmtleUVudHJ5X0tQNSwKKyAgW1hUX0tFWV8wMF9LUDZdID0gJmtleUVudHJ5X0tQNiwKKyAgW1hUX0tFWV8wMF9LUDddID0gJmtleUVudHJ5X0tQNywKKyAgW1hUX0tFWV8wMF9LUDhdID0gJmtleUVudHJ5X0tQOCwKKyAgW1hUX0tFWV8wMF9LUDldID0gJmtleUVudHJ5X0tQOSwKK307CisKK3N0YXRpYyBjb25zdCBLZXlFbnRyeSAqY29uc3QgeHRLZXlNYXBFMFtdID0geworICBbWFRfS0VZX0UwX0xlZnRHVUldID0gJmtleUVudHJ5X0xlZnRHVUksCisgIFtYVF9LRVlfRTBfUmlnaHRBbHRdID0gJmtleUVudHJ5X1JpZ2h0QWx0LAorICBbWFRfS0VZX0UwX1JpZ2h0R1VJXSA9ICZrZXlFbnRyeV9SaWdodEdVSSwKKyAgW1hUX0tFWV9FMF9Db250ZXh0XSA9ICZrZXlFbnRyeV9Db250ZXh0LAorICBbWFRfS0VZX0UwX1JpZ2h0Q29udHJvbF0gPSAma2V5RW50cnlfUmlnaHRDb250cm9sLAorCisgIFtYVF9LRVlfRTBfSW5zZXJ0XSA9ICZrZXlFbnRyeV9JbnNlcnQsCisgIFtYVF9LRVlfRTBfRGVsZXRlXSA9ICZrZXlFbnRyeV9EZWxldGUsCisgIFtYVF9LRVlfRTBfSG9tZV0gPSAma2V5RW50cnlfSG9tZSwKKyAgW1hUX0tFWV9FMF9FbmRdID0gJmtleUVudHJ5X0VuZCwKKyAgW1hUX0tFWV9FMF9QYWdlVXBdID0gJmtleUVudHJ5X1BhZ2VVcCwKKyAgW1hUX0tFWV9FMF9QYWdlRG93bl0gPSAma2V5RW50cnlfUGFnZURvd24sCisKKyAgW1hUX0tFWV9FMF9BcnJvd1VwXSA9ICZrZXlFbnRyeV9BcnJvd1VwLAorICBbWFRfS0VZX0UwX0Fycm93TGVmdF0gPSAma2V5RW50cnlfQXJyb3dMZWZ0LAorICBbWFRfS0VZX0UwX0Fycm93RG93bl0gPSAma2V5RW50cnlfQXJyb3dEb3duLAorICBbWFRfS0VZX0UwX0Fycm93UmlnaHRdID0gJmtleUVudHJ5X0Fycm93UmlnaHQsCisKKyAgW1hUX0tFWV9FMF9LUFNsYXNoXSA9ICZrZXlFbnRyeV9LUFNsYXNoLAorICBbWFRfS0VZX0UwX0tQRW50ZXJdID0gJmtleUVudHJ5X0tQRW50ZXIsCit9OworCisjZGVmaW5lIHh0S2V5TWFwRTEgTlVMTAorCitzdGF0aWMgdm9pZAoreHRIYW5kbGVTY2FuQ29kZSAoS2V5Y29kZUNvbW1hbmREYXRhICprY2QsIHVuc2lnbmVkIGNoYXIgY29kZSkgeworICBpZiAoY29kZSA9PSBYVF9NT0RfRTApIHsKKyAgICBVU0VfS0VZX01BUCh4dCwgRTApOworICB9IGVsc2UgaWYgKGNvZGUgPT0gWFRfTU9EX0UxKSB7CisgICAgVVNFX0tFWV9NQVAoeHQsIEUxKTsKKyAgfSBlbHNlIHsKKyAgICBpbnQgcmVsZWFzZSA9IChjb2RlICYgWFRfQklUX1JFTEVBU0UpICE9IDA7CisgICAgY29kZSAmPSB+WFRfQklUX1JFTEVBU0U7CisKKyAgICBpZiAoY29kZSA8IGtjZC0+eHQua2V5Q291bnQpIHsKKyAgICAgIGNvbnN0IEtleUVudHJ5ICprZXkgPSBrY2QtPnh0LmtleU1hcFtjb2RlXTsKKworICAgICAgVVNFX0tFWV9NQVAoeHQsIDAwKTsKKyAgICAgIGhhbmRsZUtleShrZXksIHJlbGVhc2UsICZrY2QtPnh0Lm1vZGlmaWVycyk7CisgICAgfQorICB9Cit9CisKK3N0YXRpYyBjb25zdCBLZXlFbnRyeSAqY29uc3QgYXRLZXlNYXAwMFtdID0geworICBbQVRfS0VZXzAwX0VzY2FwZV0gPSAma2V5RW50cnlfRXNjYXBlLAorICBbQVRfS0VZXzAwX0YxXSA9ICZrZXlFbnRyeV9GMSwKKyAgW0FUX0tFWV8wMF9GMl0gPSAma2V5RW50cnlfRjIsCisgIFtBVF9LRVlfMDBfRjNdID0gJmtleUVudHJ5X0YzLAorICBbQVRfS0VZXzAwX0Y0XSA9ICZrZXlFbnRyeV9GNCwKKyAgW0FUX0tFWV8wMF9GNV0gPSAma2V5RW50cnlfRjUsCisgIFtBVF9LRVlfMDBfRjZdID0gJmtleUVudHJ5X0Y2LAorICBbQVRfS0VZXzAwX0Y3XSA9ICZrZXlFbnRyeV9GNywKKyAgW0FUX0tFWV8wMF9GOF0gPSAma2V5RW50cnlfRjgsCisgIFtBVF9LRVlfMDBfRjldID0gJmtleUVudHJ5X0Y5LAorICBbQVRfS0VZXzAwX0YxMF0gPSAma2V5RW50cnlfRjEwLAorICBbQVRfS0VZXzAwX0YxMV0gPSAma2V5RW50cnlfRjExLAorICBbQVRfS0VZXzAwX0YxMl0gPSAma2V5RW50cnlfRjEyLAorICBbQVRfS0VZXzAwX1Njcm9sbExvY2tdID0gJmtleUVudHJ5X1Njcm9sbExvY2ssCisKKyAgW0FUX0tFWV8wMF9GMTNdID0gJmtleUVudHJ5X0YxMywKKyAgW0FUX0tFWV8wMF9GMTRdID0gJmtleUVudHJ5X0YxNCwKKyAgW0FUX0tFWV8wMF9GMTVdID0gJmtleUVudHJ5X0YxNSwKKyAgW0FUX0tFWV8wMF9GMTZdID0gJmtleUVudHJ5X0YxNiwKKyAgW0FUX0tFWV8wMF9GMTddID0gJmtleUVudHJ5X0YxNywKKyAgW0FUX0tFWV8wMF9GMThdID0gJmtleUVudHJ5X0YxOCwKKyAgW0FUX0tFWV8wMF9GMTldID0gJmtleUVudHJ5X0YxOSwKKyAgW0FUX0tFWV8wMF9GMjBdID0gJmtleUVudHJ5X0YyMCwKKyAgW0FUX0tFWV8wMF9GMjFdID0gJmtleUVudHJ5X0YyMSwKKyAgW0FUX0tFWV8wMF9GMjJdID0gJmtleUVudHJ5X0YyMiwKKyAgW0FUX0tFWV8wMF9GMjNdID0gJmtleUVudHJ5X0YyMywKKyAgW0FUX0tFWV8wMF9GMjRdID0gJmtleUVudHJ5X0YyNCwKKworICBbQVRfS0VZXzAwX0dyYXZlXSA9ICZrZXlFbnRyeV9HcmF2ZSwKKyAgW0FUX0tFWV8wMF8xXSA9ICZrZXlFbnRyeV8xLAorICBbQVRfS0VZXzAwXzJdID0gJmtleUVudHJ5XzIsCisgIFtBVF9LRVlfMDBfM10gPSAma2V5RW50cnlfMywKKyAgW0FUX0tFWV8wMF80XSA9ICZrZXlFbnRyeV80LAorICBbQVRfS0VZXzAwXzVdID0gJmtleUVudHJ5XzUsCisgIFtBVF9LRVlfMDBfNl0gPSAma2V5RW50cnlfNiwKKyAgW0FUX0tFWV8wMF83XSA9ICZrZXlFbnRyeV83LAorICBbQVRfS0VZXzAwXzhdID0gJmtleUVudHJ5XzgsCisgIFtBVF9LRVlfMDBfOV0gPSAma2V5RW50cnlfOSwKKyAgW0FUX0tFWV8wMF8wXSA9ICZrZXlFbnRyeV8wLAorICBbQVRfS0VZXzAwX01pbnVzXSA9ICZrZXlFbnRyeV9NaW51cywKKyAgW0FUX0tFWV8wMF9FcXVhbF0gPSAma2V5RW50cnlfRXF1YWwsCisgIFtBVF9LRVlfMDBfQmFja3NwYWNlXSA9ICZrZXlFbnRyeV9CYWNrc3BhY2UsCisKKyAgW0FUX0tFWV8wMF9UYWJdID0gJmtleUVudHJ5X1RhYiwKKyAgW0FUX0tFWV8wMF9RXSA9ICZrZXlFbnRyeV9RLAorICBbQVRfS0VZXzAwX1ddID0gJmtleUVudHJ5X1csCisgIFtBVF9LRVlfMDBfRV0gPSAma2V5RW50cnlfRSwKKyAgW0FUX0tFWV8wMF9SXSA9ICZrZXlFbnRyeV9SLAorICBbQVRfS0VZXzAwX1RdID0gJmtleUVudHJ5X1QsCisgIFtBVF9LRVlfMDBfWV0gPSAma2V5RW50cnlfWSwKKyAgW0FUX0tFWV8wMF9VXSA9ICZrZXlFbnRyeV9VLAorICBbQVRfS0VZXzAwX0ldID0gJmtleUVudHJ5X0ksCisgIFtBVF9LRVlfMDBfT10gPSAma2V5RW50cnlfTywKKyAgW0FUX0tFWV8wMF9QXSA9ICZrZXlFbnRyeV9QLAorICBbQVRfS0VZXzAwX0xlZnRCcmFja2V0XSA9ICZrZXlFbnRyeV9MZWZ0QnJhY2tldCwKKyAgW0FUX0tFWV8wMF9SaWdodEJyYWNrZXRdID0gJmtleUVudHJ5X1JpZ2h0QnJhY2tldCwKKyAgW0FUX0tFWV8wMF9CYWNrc2xhc2hdID0gJmtleUVudHJ5X0JhY2tzbGFzaCwKKworICBbQVRfS0VZXzAwX0NhcHNMb2NrXSA9ICZrZXlFbnRyeV9DYXBzTG9jaywKKyAgW0FUX0tFWV8wMF9BXSA9ICZrZXlFbnRyeV9BLAorICBbQVRfS0VZXzAwX1NdID0gJmtleUVudHJ5X1MsCisgIFtBVF9LRVlfMDBfRF0gPSAma2V5RW50cnlfRCwKKyAgW0FUX0tFWV8wMF9GXSA9ICZrZXlFbnRyeV9GLAorICBbQVRfS0VZXzAwX0ddID0gJmtleUVudHJ5X0csCisgIFtBVF9LRVlfMDBfSF0gPSAma2V5RW50cnlfSCwKKyAgW0FUX0tFWV8wMF9KXSA9ICZrZXlFbnRyeV9KLAorICBbQVRfS0VZXzAwX0tdID0gJmtleUVudHJ5X0ssCisgIFtBVF9LRVlfMDBfTF0gPSAma2V5RW50cnlfTCwKKyAgW0FUX0tFWV8wMF9TZW1pY29sb25dID0gJmtleUVudHJ5X1NlbWljb2xvbiwKKyAgW0FUX0tFWV8wMF9BcG9zdHJvcGhlXSA9ICZrZXlFbnRyeV9BcG9zdHJvcGhlLAorICBbQVRfS0VZXzAwX0VudGVyXSA9ICZrZXlFbnRyeV9FbnRlciwKKworICBbQVRfS0VZXzAwX0xlZnRTaGlmdF0gPSAma2V5RW50cnlfTGVmdFNoaWZ0LAorICBbQVRfS0VZXzAwX0V1cm9wZTJdID0gJmtleUVudHJ5X0V1cm9wZTIsCisgIFtBVF9LRVlfMDBfWl0gPSAma2V5RW50cnlfWiwKKyAgW0FUX0tFWV8wMF9YXSA9ICZrZXlFbnRyeV9YLAorICBbQVRfS0VZXzAwX0NdID0gJmtleUVudHJ5X0MsCisgIFtBVF9LRVlfMDBfVl0gPSAma2V5RW50cnlfViwKKyAgW0FUX0tFWV8wMF9CXSA9ICZrZXlFbnRyeV9CLAorICBbQVRfS0VZXzAwX05dID0gJmtleUVudHJ5X04sCisgIFtBVF9LRVlfMDBfTV0gPSAma2V5RW50cnlfTSwKKyAgW0FUX0tFWV8wMF9Db21tYV0gPSAma2V5RW50cnlfQ29tbWEsCisgIFtBVF9LRVlfMDBfUGVyaW9kXSA9ICZrZXlFbnRyeV9QZXJpb2QsCisgIFtBVF9LRVlfMDBfU2xhc2hdID0gJmtleUVudHJ5X1NsYXNoLAorICBbQVRfS0VZXzAwX1JpZ2h0U2hpZnRdID0gJmtleUVudHJ5X1JpZ2h0U2hpZnQsCisKKyAgW0FUX0tFWV8wMF9MZWZ0Q29udHJvbF0gPSAma2V5RW50cnlfTGVmdENvbnRyb2wsCisgIFtBVF9LRVlfMDBfTGVmdEFsdF0gPSAma2V5RW50cnlfTGVmdEFsdCwKKyAgW0FUX0tFWV8wMF9TcGFjZV0gPSAma2V5RW50cnlfU3BhY2UsCisKKyAgW0FUX0tFWV8wMF9OdW1Mb2NrXSA9ICZrZXlFbnRyeV9OdW1Mb2NrLAorICBbQVRfS0VZXzAwX0tQQXN0ZXJpc2tdID0gJmtleUVudHJ5X0tQQXN0ZXJpc2ssCisgIFtBVF9LRVlfMDBfS1BNaW51c10gPSAma2V5RW50cnlfS1BNaW51cywKKyAgW0FUX0tFWV8wMF9LUFBsdXNdID0gJmtleUVudHJ5X0tQUGx1cywKKyAgW0FUX0tFWV8wMF9LUFBlcmlvZF0gPSAma2V5RW50cnlfS1BQZXJpb2QsCisgIFtBVF9LRVlfMDBfS1AwXSA9ICZrZXlFbnRyeV9LUDAsCisgIFtBVF9LRVlfMDBfS1AxXSA9ICZrZXlFbnRyeV9LUDEsCisgIFtBVF9LRVlfMDBfS1AyXSA9ICZrZXlFbnRyeV9LUDIsCisgIFtBVF9LRVlfMDBfS1AzXSA9ICZrZXlFbnRyeV9LUDMsCisgIFtBVF9LRVlfMDBfS1A0XSA9ICZrZXlFbnRyeV9LUDQsCisgIFtBVF9LRVlfMDBfS1A1XSA9ICZrZXlFbnRyeV9LUDUsCisgIFtBVF9LRVlfMDBfS1A2XSA9ICZrZXlFbnRyeV9LUDYsCisgIFtBVF9LRVlfMDBfS1A3XSA9ICZrZXlFbnRyeV9LUDcsCisgIFtBVF9LRVlfMDBfS1A4XSA9ICZrZXlFbnRyeV9LUDgsCisgIFtBVF9LRVlfMDBfS1A5XSA9ICZrZXlFbnRyeV9LUDksCit9OworCitzdGF0aWMgY29uc3QgS2V5RW50cnkgKmNvbnN0IGF0S2V5TWFwRTBbXSA9IHsKKyAgW0FUX0tFWV9FMF9MZWZ0R1VJXSA9ICZrZXlFbnRyeV9MZWZ0R1VJLAorICBbQVRfS0VZX0UwX1JpZ2h0QWx0XSA9ICZrZXlFbnRyeV9SaWdodEFsdCwKKyAgW0FUX0tFWV9FMF9SaWdodEdVSV0gPSAma2V5RW50cnlfUmlnaHRHVUksCisgIFtBVF9LRVlfRTBfQ29udGV4dF0gPSAma2V5RW50cnlfQ29udGV4dCwKKyAgW0FUX0tFWV9FMF9SaWdodENvbnRyb2xdID0gJmtleUVudHJ5X1JpZ2h0Q29udHJvbCwKKworICBbQVRfS0VZX0UwX0luc2VydF0gPSAma2V5RW50cnlfSW5zZXJ0LAorICBbQVRfS0VZX0UwX0RlbGV0ZV0gPSAma2V5RW50cnlfRGVsZXRlLAorICBbQVRfS0VZX0UwX0hvbWVdID0gJmtleUVudHJ5X0hvbWUsCisgIFtBVF9LRVlfRTBfRW5kXSA9ICZrZXlFbnRyeV9FbmQsCisgIFtBVF9LRVlfRTBfUGFnZVVwXSA9ICZrZXlFbnRyeV9QYWdlVXAsCisgIFtBVF9LRVlfRTBfUGFnZURvd25dID0gJmtleUVudHJ5X1BhZ2VEb3duLAorCisgIFtBVF9LRVlfRTBfQXJyb3dVcF0gPSAma2V5RW50cnlfQXJyb3dVcCwKKyAgW0FUX0tFWV9FMF9BcnJvd0xlZnRdID0gJmtleUVudHJ5X0Fycm93TGVmdCwKKyAgW0FUX0tFWV9FMF9BcnJvd0Rvd25dID0gJmtleUVudHJ5X0Fycm93RG93biwKKyAgW0FUX0tFWV9FMF9BcnJvd1JpZ2h0XSA9ICZrZXlFbnRyeV9BcnJvd1JpZ2h0LAorCisgIFtBVF9LRVlfRTBfS1BTbGFzaF0gPSAma2V5RW50cnlfS1BTbGFzaCwKKyAgW0FUX0tFWV9FMF9LUEVudGVyXSA9ICZrZXlFbnRyeV9LUEVudGVyLAorfTsKKworI2RlZmluZSBhdEtleU1hcEUxIE5VTEwKKworc3RhdGljIHZvaWQKK2F0SGFuZGxlU2NhbkNvZGUgKEtleWNvZGVDb21tYW5kRGF0YSAqa2NkLCB1bnNpZ25lZCBjaGFyIGNvZGUpIHsKKyAgaWYgKGNvZGUgPT0gQVRfTU9EX1JFTEVBU0UpIHsKKyAgICBNT0RfU0VUKE1PRF9SRUxFQVNFLCBrY2QtPmF0Lm1vZGlmaWVycyk7CisgIH0gZWxzZSBpZiAoY29kZSA9PSBBVF9NT0RfRTApIHsKKyAgICBVU0VfS0VZX01BUChhdCwgRTApOworICB9IGVsc2UgaWYgKGNvZGUgPT0gQVRfTU9EX0UxKSB7CisgICAgVVNFX0tFWV9NQVAoYXQsIEUxKTsKKyAgfSBlbHNlIGlmIChjb2RlIDwga2NkLT5hdC5rZXlDb3VudCkgeworICAgIGNvbnN0IEtleUVudHJ5ICprZXkgPSBrY2QtPmF0LmtleU1hcFtjb2RlXTsKKyAgICBpbnQgcmVsZWFzZSA9IE1PRF9UU1QoTU9EX1JFTEVBU0UsIGtjZC0+YXQubW9kaWZpZXJzKTsKKworICAgIE1PRF9DTFIoTU9EX1JFTEVBU0UsIGtjZC0+YXQubW9kaWZpZXJzKTsKKyAgICBVU0VfS0VZX01BUChhdCwgMDApOworCisgICAgaGFuZGxlS2V5KGtleSwgcmVsZWFzZSwgJmtjZC0+YXQubW9kaWZpZXJzKTsKKyAgfQorfQorCitzdGF0aWMgY29uc3QgS2V5RW50cnkgKmNvbnN0IHBzMktleU1hcFtdID0geworICBbUFMyX0tFWV9Fc2NhcGVdID0gJmtleUVudHJ5X0VzY2FwZSwKKyAgW1BTMl9LRVlfRjFdID0gJmtleUVudHJ5X0YxLAorICBbUFMyX0tFWV9GMl0gPSAma2V5RW50cnlfRjIsCisgIFtQUzJfS0VZX0YzXSA9ICZrZXlFbnRyeV9GMywKKyAgW1BTMl9LRVlfRjRdID0gJmtleUVudHJ5X0Y0LAorICBbUFMyX0tFWV9GNV0gPSAma2V5RW50cnlfRjUsCisgIFtQUzJfS0VZX0Y2XSA9ICZrZXlFbnRyeV9GNiwKKyAgW1BTMl9LRVlfRjddID0gJmtleUVudHJ5X0Y3LAorICBbUFMyX0tFWV9GOF0gPSAma2V5RW50cnlfRjgsCisgIFtQUzJfS0VZX0Y5XSA9ICZrZXlFbnRyeV9GOSwKKyAgW1BTMl9LRVlfRjEwXSA9ICZrZXlFbnRyeV9GMTAsCisgIFtQUzJfS0VZX0YxMV0gPSAma2V5RW50cnlfRjExLAorICBbUFMyX0tFWV9GMTJdID0gJmtleUVudHJ5X0YxMiwKKyAgW1BTMl9LRVlfU2Nyb2xsTG9ja10gPSAma2V5RW50cnlfU2Nyb2xsTG9jaywKKworICBbUFMyX0tFWV9HcmF2ZV0gPSAma2V5RW50cnlfR3JhdmUsCisgIFtQUzJfS0VZXzFdID0gJmtleUVudHJ5XzEsCisgIFtQUzJfS0VZXzJdID0gJmtleUVudHJ5XzIsCisgIFtQUzJfS0VZXzNdID0gJmtleUVudHJ5XzMsCisgIFtQUzJfS0VZXzRdID0gJmtleUVudHJ5XzQsCisgIFtQUzJfS0VZXzVdID0gJmtleUVudHJ5XzUsCisgIFtQUzJfS0VZXzZdID0gJmtleUVudHJ5XzYsCisgIFtQUzJfS0VZXzddID0gJmtleUVudHJ5XzcsCisgIFtQUzJfS0VZXzhdID0gJmtleUVudHJ5XzgsCisgIFtQUzJfS0VZXzldID0gJmtleUVudHJ5XzksCisgIFtQUzJfS0VZXzBdID0gJmtleUVudHJ5XzAsCisgIFtQUzJfS0VZX01pbnVzXSA9ICZrZXlFbnRyeV9NaW51cywKKyAgW1BTMl9LRVlfRXF1YWxdID0gJmtleUVudHJ5X0VxdWFsLAorICBbUFMyX0tFWV9CYWNrc3BhY2VdID0gJmtleUVudHJ5X0JhY2tzcGFjZSwKKworICBbUFMyX0tFWV9UYWJdID0gJmtleUVudHJ5X1RhYiwKKyAgW1BTMl9LRVlfUV0gPSAma2V5RW50cnlfUSwKKyAgW1BTMl9LRVlfV10gPSAma2V5RW50cnlfVywKKyAgW1BTMl9LRVlfRV0gPSAma2V5RW50cnlfRSwKKyAgW1BTMl9LRVlfUl0gPSAma2V5RW50cnlfUiwKKyAgW1BTMl9LRVlfVF0gPSAma2V5RW50cnlfVCwKKyAgW1BTMl9LRVlfWV0gPSAma2V5RW50cnlfWSwKKyAgW1BTMl9LRVlfVV0gPSAma2V5RW50cnlfVSwKKyAgW1BTMl9LRVlfSV0gPSAma2V5RW50cnlfSSwKKyAgW1BTMl9LRVlfT10gPSAma2V5RW50cnlfTywKKyAgW1BTMl9LRVlfUF0gPSAma2V5RW50cnlfUCwKKyAgW1BTMl9LRVlfTGVmdEJyYWNrZXRdID0gJmtleUVudHJ5X0xlZnRCcmFja2V0LAorICBbUFMyX0tFWV9SaWdodEJyYWNrZXRdID0gJmtleUVudHJ5X1JpZ2h0QnJhY2tldCwKKyAgW1BTMl9LRVlfQmFja3NsYXNoXSA9ICZrZXlFbnRyeV9CYWNrc2xhc2gsCisKKyAgW1BTMl9LRVlfQ2Fwc0xvY2tdID0gJmtleUVudHJ5X0NhcHNMb2NrLAorICBbUFMyX0tFWV9BXSA9ICZrZXlFbnRyeV9BLAorICBbUFMyX0tFWV9TXSA9ICZrZXlFbnRyeV9TLAorICBbUFMyX0tFWV9EXSA9ICZrZXlFbnRyeV9ELAorICBbUFMyX0tFWV9GXSA9ICZrZXlFbnRyeV9GLAorICBbUFMyX0tFWV9HXSA9ICZrZXlFbnRyeV9HLAorICBbUFMyX0tFWV9IXSA9ICZrZXlFbnRyeV9ILAorICBbUFMyX0tFWV9KXSA9ICZrZXlFbnRyeV9KLAorICBbUFMyX0tFWV9LXSA9ICZrZXlFbnRyeV9LLAorICBbUFMyX0tFWV9MXSA9ICZrZXlFbnRyeV9MLAorICBbUFMyX0tFWV9TZW1pY29sb25dID0gJmtleUVudHJ5X1NlbWljb2xvbiwKKyAgW1BTMl9LRVlfQXBvc3Ryb3BoZV0gPSAma2V5RW50cnlfQXBvc3Ryb3BoZSwKKyAgW1BTMl9LRVlfRW50ZXJdID0gJmtleUVudHJ5X0VudGVyLAorCisgIFtQUzJfS0VZX0xlZnRTaGlmdF0gPSAma2V5RW50cnlfTGVmdFNoaWZ0LAorICBbUFMyX0tFWV9FdXJvcGUyXSA9ICZrZXlFbnRyeV9FdXJvcGUyLAorICBbUFMyX0tFWV9aXSA9ICZrZXlFbnRyeV9aLAorICBbUFMyX0tFWV9YXSA9ICZrZXlFbnRyeV9YLAorICBbUFMyX0tFWV9DXSA9ICZrZXlFbnRyeV9DLAorICBbUFMyX0tFWV9WXSA9ICZrZXlFbnRyeV9WLAorICBbUFMyX0tFWV9CXSA9ICZrZXlFbnRyeV9CLAorICBbUFMyX0tFWV9OXSA9ICZrZXlFbnRyeV9OLAorICBbUFMyX0tFWV9NXSA9ICZrZXlFbnRyeV9NLAorICBbUFMyX0tFWV9Db21tYV0gPSAma2V5RW50cnlfQ29tbWEsCisgIFtQUzJfS0VZX1BlcmlvZF0gPSAma2V5RW50cnlfUGVyaW9kLAorICBbUFMyX0tFWV9TbGFzaF0gPSAma2V5RW50cnlfU2xhc2gsCisgIFtQUzJfS0VZX1JpZ2h0U2hpZnRdID0gJmtleUVudHJ5X1JpZ2h0U2hpZnQsCisKKyAgW1BTMl9LRVlfTGVmdENvbnRyb2xdID0gJmtleUVudHJ5X0xlZnRDb250cm9sLAorICBbUFMyX0tFWV9MZWZ0R1VJXSA9ICZrZXlFbnRyeV9MZWZ0R1VJLAorICBbUFMyX0tFWV9MZWZ0QWx0XSA9ICZrZXlFbnRyeV9MZWZ0QWx0LAorICBbUFMyX0tFWV9TcGFjZV0gPSAma2V5RW50cnlfU3BhY2UsCisgIFtQUzJfS0VZX1JpZ2h0QWx0XSA9ICZrZXlFbnRyeV9SaWdodEFsdCwKKyAgW1BTMl9LRVlfUmlnaHRHVUldID0gJmtleUVudHJ5X1JpZ2h0R1VJLAorICBbUFMyX0tFWV9Db250ZXh0XSA9ICZrZXlFbnRyeV9Db250ZXh0LAorICBbUFMyX0tFWV9SaWdodENvbnRyb2xdID0gJmtleUVudHJ5X1JpZ2h0Q29udHJvbCwKKworICBbUFMyX0tFWV9JbnNlcnRdID0gJmtleUVudHJ5X0luc2VydCwKKyAgW1BTMl9LRVlfRGVsZXRlXSA9ICZrZXlFbnRyeV9EZWxldGUsCisgIFtQUzJfS0VZX0hvbWVdID0gJmtleUVudHJ5X0hvbWUsCisgIFtQUzJfS0VZX0VuZF0gPSAma2V5RW50cnlfRW5kLAorICBbUFMyX0tFWV9QYWdlVXBdID0gJmtleUVudHJ5X1BhZ2VVcCwKKyAgW1BTMl9LRVlfUGFnZURvd25dID0gJmtleUVudHJ5X1BhZ2VEb3duLAorCisgIFtQUzJfS0VZX0Fycm93VXBdID0gJmtleUVudHJ5X0Fycm93VXAsCisgIFtQUzJfS0VZX0Fycm93TGVmdF0gPSAma2V5RW50cnlfQXJyb3dMZWZ0LAorICBbUFMyX0tFWV9BcnJvd0Rvd25dID0gJmtleUVudHJ5X0Fycm93RG93biwKKyAgW1BTMl9LRVlfQXJyb3dSaWdodF0gPSAma2V5RW50cnlfQXJyb3dSaWdodCwKKworICBbUFMyX0tFWV9OdW1Mb2NrXSA9ICZrZXlFbnRyeV9OdW1Mb2NrLAorICBbUFMyX0tFWV9LUFNsYXNoXSA9ICZrZXlFbnRyeV9LUFNsYXNoLAorICBbUFMyX0tFWV9LUEFzdGVyaXNrXSA9ICZrZXlFbnRyeV9LUEFzdGVyaXNrLAorICBbUFMyX0tFWV9LUE1pbnVzXSA9ICZrZXlFbnRyeV9LUE1pbnVzLAorICBbUFMyX0tFWV9LUFBsdXNdID0gJmtleUVudHJ5X0tQUGx1cywKKyAgW1BTMl9LRVlfS1BFbnRlcl0gPSAma2V5RW50cnlfS1BFbnRlciwKKyAgW1BTMl9LRVlfS1BQZXJpb2RdID0gJmtleUVudHJ5X0tQUGVyaW9kLAorICBbUFMyX0tFWV9LUDBdID0gJmtleUVudHJ5X0tQMCwKKyAgW1BTMl9LRVlfS1AxXSA9ICZrZXlFbnRyeV9LUDEsCisgIFtQUzJfS0VZX0tQMl0gPSAma2V5RW50cnlfS1AyLAorICBbUFMyX0tFWV9LUDNdID0gJmtleUVudHJ5X0tQMywKKyAgW1BTMl9LRVlfS1A0XSA9ICZrZXlFbnRyeV9LUDQsCisgIFtQUzJfS0VZX0tQNV0gPSAma2V5RW50cnlfS1A1LAorICBbUFMyX0tFWV9LUDZdID0gJmtleUVudHJ5X0tQNiwKKyAgW1BTMl9LRVlfS1A3XSA9ICZrZXlFbnRyeV9LUDcsCisgIFtQUzJfS0VZX0tQOF0gPSAma2V5RW50cnlfS1A4LAorICBbUFMyX0tFWV9LUDldID0gJmtleUVudHJ5X0tQOSwKKyAgW1BTMl9LRVlfS1BDb21tYV0gPSAma2V5RW50cnlfS1BDb21tYSwKK307CisKK3N0YXRpYyB2b2lkCitwczJIYW5kbGVTY2FuQ29kZSAoS2V5Y29kZUNvbW1hbmREYXRhICprY2QsIHVuc2lnbmVkIGNoYXIgY29kZSkgeworICBpZiAoY29kZSA9PSBQUzJfTU9EX1JFTEVBU0UpIHsKKyAgICBNT0RfU0VUKE1PRF9SRUxFQVNFLCBrY2QtPnBzMi5tb2RpZmllcnMpOworICB9IGVsc2UgaWYgKGNvZGUgPCBBUlJBWV9DT1VOVChwczJLZXlNYXApKSB7CisgICAgY29uc3QgS2V5RW50cnkgKmtleSA9IHBzMktleU1hcFtjb2RlXTsKKyAgICBpbnQgcmVsZWFzZSA9IE1PRF9UU1QoTU9EX1JFTEVBU0UsIGtjZC0+cHMyLm1vZGlmaWVycyk7CisKKyAgICBNT0RfQ0xSKE1PRF9SRUxFQVNFLCBrY2QtPnBzMi5tb2RpZmllcnMpOworCisgICAgaGFuZGxlS2V5KGtleSwgcmVsZWFzZSwgJmtjZC0+cHMyLm1vZGlmaWVycyk7CisgIH0KK30KKworc3RhdGljIGludAoraGFuZGxlS2V5Y29kZUNvbW1hbmRzIChpbnQgY29tbWFuZCwgdm9pZCAqZGF0YSkgeworICBLZXljb2RlQ29tbWFuZERhdGEgKmtjZCA9IGRhdGE7CisgIGludCBhcmcgPSBjb21tYW5kICYgQlJMX01TS19BUkc7CisKKyAgc3dpdGNoIChjb21tYW5kICYgQlJMX01TS19CTEspIHsKKyAgICBjYXNlIEJSTF9DTURfQkxLKFBBU1NYVCk6CisgICAgICBpZiAoY29tbWFuZCAmIEJSTF9GTEdfS0JEX1JFTEVBU0UpIGFyZyB8PSBYVF9CSVRfUkVMRUFTRTsKKyAgICAgIGlmIChjb21tYW5kICYgQlJMX0ZMR19LQkRfRU1VTDApIHh0SGFuZGxlU2NhbkNvZGUoa2NkLCBYVF9NT0RfRTApOworICAgICAgaWYgKGNvbW1hbmQgJiBCUkxfRkxHX0tCRF9FTVVMMSkgeHRIYW5kbGVTY2FuQ29kZShrY2QsIFhUX01PRF9FMSk7CisgICAgICB4dEhhbmRsZVNjYW5Db2RlKGtjZCwgYXJnKTsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBCUkxfQ01EX0JMSyhQQVNTQVQpOgorICAgICAgaWYgKGNvbW1hbmQgJiBCUkxfRkxHX0tCRF9SRUxFQVNFKSBhdEhhbmRsZVNjYW5Db2RlKGtjZCwgQVRfTU9EX1JFTEVBU0UpOworICAgICAgaWYgKGNvbW1hbmQgJiBCUkxfRkxHX0tCRF9FTVVMMCkgYXRIYW5kbGVTY2FuQ29kZShrY2QsIEFUX01PRF9FMCk7CisgICAgICBpZiAoY29tbWFuZCAmIEJSTF9GTEdfS0JEX0VNVUwxKSBhdEhhbmRsZVNjYW5Db2RlKGtjZCwgQVRfTU9EX0UxKTsKKyAgICAgIGF0SGFuZGxlU2NhbkNvZGUoa2NkLCBhcmcpOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIEJSTF9DTURfQkxLKFBBU1NQUzIpOgorICAgICAgaWYgKGNvbW1hbmQgJiBCUkxfRkxHX0tCRF9SRUxFQVNFKSBwczJIYW5kbGVTY2FuQ29kZShrY2QsIFBTMl9NT0RfUkVMRUFTRSk7CisgICAgICBwczJIYW5kbGVTY2FuQ29kZShrY2QsIGFyZyk7CisgICAgICBicmVhazsKKworICAgIGRlZmF1bHQ6CisgICAgICByZXR1cm4gMDsKKyAgfQorCisgIHJldHVybiAxOworfQorCitzdGF0aWMgdm9pZAorcmVzZXRLZXljb2RlQ29tbWFuZERhdGEgKHZvaWQgKmRhdGEpIHsKKyAgS2V5Y29kZUNvbW1hbmREYXRhICprY2QgPSBkYXRhOworCisgIFVTRV9LRVlfTUFQKHh0LCAwMCk7CisgIGtjZC0+eHQubW9kaWZpZXJzID0gMDsKKworICBVU0VfS0VZX01BUChhdCwgMDApOworICBrY2QtPmF0Lm1vZGlmaWVycyA9IDA7CisKKyAga2NkLT5wczIubW9kaWZpZXJzID0gMDsKK30KKworUkVQT1JUX0xJU1RFTkVSKGtleWNvZGVDb21tYW5kRGF0YVJlc2V0TGlzdGVuZXIpIHsKKyAgS2V5Y29kZUNvbW1hbmREYXRhICprY2QgPSBwYXJhbWV0ZXJzLT5saXN0ZW5lckRhdGE7CisKKyAgcmVzZXRLZXljb2RlQ29tbWFuZERhdGEoa2NkKTsKK30KKworc3RhdGljIHZvaWQKK2Rlc3Ryb3lLZXljb2RlQ29tbWFuZERhdGEgKHZvaWQgKmRhdGEpIHsKKyAgS2V5Y29kZUNvbW1hbmREYXRhICprY2QgPSBkYXRhOworCisgIHVucmVnaXN0ZXJSZXBvcnRMaXN0ZW5lcihrY2QtPnJlc2V0TGlzdGVuZXIpOworICBmcmVlKGtjZCk7Cit9CisKK2ludAorYWRkS2V5Y29kZUNvbW1hbmRzICh2b2lkKSB7CisgIEtleWNvZGVDb21tYW5kRGF0YSAqa2NkOworCisgIGlmICgoa2NkID0gbWFsbG9jKHNpemVvZigqa2NkKSkpKSB7CisgICAgbWVtc2V0KGtjZCwgMCwgc2l6ZW9mKCprY2QpKTsKKyAgICByZXNldEtleWNvZGVDb21tYW5kRGF0YShrY2QpOworCisgICAgaWYgKChrY2QtPnJlc2V0TGlzdGVuZXIgPSByZWdpc3RlclJlcG9ydExpc3RlbmVyKFJFUE9SVF9CUkFJTExFX0RFVklDRV9PTkxJTkUsIGtleWNvZGVDb21tYW5kRGF0YVJlc2V0TGlzdGVuZXIsIGtjZCkpKSB7CisgICAgICBpZiAocHVzaENvbW1hbmRIYW5kbGVyKCJrZXljb2RlcyIsIEtUQl9DVFhfREVGQVVMVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlS2V5Y29kZUNvbW1hbmRzLCBkZXN0cm95S2V5Y29kZUNvbW1hbmREYXRhLCBrY2QpKSB7CisgICAgICAgIHJldHVybiAxOworICAgICAgfQorCisgICAgICB1bnJlZ2lzdGVyUmVwb3J0TGlzdGVuZXIoa2NkLT5yZXNldExpc3RlbmVyKTsKKyAgICB9CisKKyAgICBmcmVlKGtjZCk7CisgIH0gZWxzZSB7CisgICAgbG9nTWFsbG9jRXJyb3IoKTsKKyAgfQorCisgIHJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvUHJvZ3JhbXMvY21kX2tleWNvZGVzLmggYi9Qcm9ncmFtcy9jbWRfa2V5Y29kZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NjZkMDU2Ci0tLSAvZGV2L251bGwKKysrIGIvUHJvZ3JhbXMvY21kX2tleWNvZGVzLmgKQEAgLTAsMCArMSwzMiBAQAorLyoKKyAqIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisgKiAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisgKgorICogQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKKyNpZm5kZWYgQlJMVFRZX0lOQ0xVREVEX0NNRF9LRVlDT0RFUworI2RlZmluZSBCUkxUVFlfSU5DTFVERURfQ01EX0tFWUNPREVTCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYgLyogX19jcGx1c3BsdXMgKi8KKworZXh0ZXJuIGludCBhZGRLZXljb2RlQ29tbWFuZHMgKHZvaWQpOworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZiAvKiBfX2NwbHVzcGx1cyAqLworCisjZW5kaWYgLyogQlJMVFRZX0lOQ0xVREVEX0NNRF9LRVlDT0RFUyAqLwpkaWZmIC0tZ2l0IGEvUHJvZ3JhbXMvY21kX2xlYXJuLmMgYi9Qcm9ncmFtcy9jbWRfbGVhcm4uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NjBlYTczCi0tLSAvZGV2L251bGwKKysrIGIvUHJvZ3JhbXMvY21kX2xlYXJuLmMKQEAgLTAsMCArMSw3OSBAQAorLyoKKyAqIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisgKiAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisgKgorICogQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKKyNpbmNsdWRlICJwcm9sb2d1ZS5oIgorCisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKyNpbmNsdWRlICJsb2cuaCIKKyNpbmNsdWRlICJwYXJhbWV0ZXJzLmgiCisjaW5jbHVkZSAiYnJsX2NtZHMuaCIKKyNpbmNsdWRlICJrdGJfdHlwZXMuaCIKKyNpbmNsdWRlICJjbWRfcXVldWUuaCIKKyNpbmNsdWRlICJjbWRfbGVhcm4uaCIKKyNpbmNsdWRlICJsZWFybi5oIgorI2luY2x1ZGUgImFzeW5jX3Rhc2suaCIKKyNpbmNsdWRlICJ1cGRhdGUuaCIKKyNpbmNsdWRlICJtZXNzYWdlLmgiCisjaW5jbHVkZSAiY29yZS5oIgorCit0eXBlZGVmIHN0cnVjdCB7CisgIGludCB0aW1lb3V0OworfSBMZWFybk1vZGVQYXJhbWV0ZXJzOworCitBU1lOQ19UQVNLX0NBTExCQUNLKHByZXNlbnRMZWFybk1vZGUpIHsKKyAgTGVhcm5Nb2RlUGFyYW1ldGVycyAqbG1wID0gZGF0YTsKKworICBzdXNwZW5kVXBkYXRlcygpOworICBsZWFybk1vZGUobG1wLT50aW1lb3V0KTsKKyAgcmVzdW1lVXBkYXRlcygxKTsKKyAgZnJlZShsbXApOworfQorCitzdGF0aWMgaW50CitoYW5kbGVMZWFybkNvbW1hbmRzIChpbnQgY29tbWFuZCwgdm9pZCAqZGF0YSkgeworICBzd2l0Y2ggKGNvbW1hbmQgJiBCUkxfTVNLX0NNRCkgeworICAgIGNhc2UgQlJMX0NNRF9MRUFSTjogeworICAgICAgTGVhcm5Nb2RlUGFyYW1ldGVycyAqbG1wOworCisgICAgICBpZiAoKGxtcCA9IG1hbGxvYyhzaXplb2YoKmxtcCkpKSkgeworICAgICAgICBtZW1zZXQobG1wLCAwLCBzaXplb2YoKmxtcCkpOworICAgICAgICBsbXAtPnRpbWVvdXQgPSBMRUFSTl9NT0RFX1RJTUVPVVQ7CisKKyAgICAgICAgaWYgKGFzeW5jQWRkVGFzayhOVUxMLCBwcmVzZW50TGVhcm5Nb2RlLCBsbXApKSBicmVhazsKKyAgICAgICAgZnJlZShsbXApOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgbG9nTWFsbG9jRXJyb3IoKTsKKyAgICAgIH0KKworICAgICAgYnJsLmhhc0ZhaWxlZCA9IDE7CisgICAgICBicmVhazsKKyAgICB9CisKKyAgICBkZWZhdWx0OgorICAgICAgcmV0dXJuIDA7CisgIH0KKworICByZXR1cm4gMTsKK30KKworaW50CithZGRMZWFybkNvbW1hbmRzICh2b2lkKSB7CisgIHJldHVybiBwdXNoQ29tbWFuZEhhbmRsZXIoImxlYXJuIiwgS1RCX0NUWF9ERUZBVUxULAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZUxlYXJuQ29tbWFuZHMsIE5VTEwsIE5VTEwpOworfQpkaWZmIC0tZ2l0IGEvUHJvZ3JhbXMvY21kX2xlYXJuLmggYi9Qcm9ncmFtcy9jbWRfbGVhcm4uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZDliZDJlCi0tLSAvZGV2L251bGwKKysrIGIvUHJvZ3JhbXMvY21kX2xlYXJuLmgKQEAgLTAsMCArMSwzMiBAQAorLyoKKyAqIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisgKiAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisgKgorICogQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKKyNpZm5kZWYgQlJMVFRZX0lOQ0xVREVEX0NNRF9MRUFSTgorI2RlZmluZSBCUkxUVFlfSU5DTFVERURfQ01EX0xFQVJOCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYgLyogX19jcGx1c3BsdXMgKi8KKworZXh0ZXJuIGludCBhZGRMZWFybkNvbW1hbmRzICh2b2lkKTsKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYgLyogX19jcGx1c3BsdXMgKi8KKworI2VuZGlmIC8qIEJSTFRUWV9JTkNMVURFRF9DTURfTEVBUk4gKi8KZGlmZiAtLWdpdCBhL1Byb2dyYW1zL2NtZF9taXNjZWxsYW5lb3VzLmMgYi9Qcm9ncmFtcy9jbWRfbWlzY2VsbGFuZW91cy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA4NjEyODgKLS0tIC9kZXYvbnVsbAorKysgYi9Qcm9ncmFtcy9jbWRfbWlzY2VsbGFuZW91cy5jCkBAIC0wLDAgKzEsMjkyIEBACisvKgorICogQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyAqICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyAqCisgKiBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorICoKKyAqIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyAqCisgKiBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisgKi8KKworI2luY2x1ZGUgInByb2xvZ3VlLmgiCisKKyNpbmNsdWRlIDxzdGRpby5oPgorCisjaW5jbHVkZSAic3RyZm10LmgiCisjaW5jbHVkZSAiY21kX3F1ZXVlLmgiCisjaW5jbHVkZSAiY21kX21pc2NlbGxhbmVvdXMuaCIKKyNpbmNsdWRlICJjbWRfdXRpbHMuaCIKKyNpbmNsdWRlICJicmxfY21kcy5oIgorI2luY2x1ZGUgInByZWZzLmgiCisjaW5jbHVkZSAic2NyX3NwZWNpYWwuaCIKKyNpbmNsdWRlICJtZXNzYWdlLmgiCisjaW5jbHVkZSAiYWxlcnQuaCIKKyNpbmNsdWRlICJjb3JlLmgiCisKKyNpZmRlZiBFTkFCTEVfU1BFRUNIX1NVUFBPUlQKK3N0YXRpYworU1RSX0JFR0lOX0ZPUk1BVFRFUihmb3JtYXRTcGVlY2hEYXRlLCBjb25zdCBUaW1lRm9ybWF0dGluZ0RhdGEgKmZtdCkKKyAgY29uc3QgY2hhciAqeWVhckZvcm1hdCA9ICIldSI7CisgIGNvbnN0IGNoYXIgKm1vbnRoRm9ybWF0ID0gIiVzIjsKKyAgY29uc3QgY2hhciAqZGF5Rm9ybWF0ID0gIiV1IjsKKworICB1aW50MTZfdCB5ZWFyID0gZm10LT5jb21wb25lbnRzLnllYXI7CisgIHVpbnQ4X3QgZGF5ID0gZm10LT5jb21wb25lbnRzLmRheSArIDE7CisKKyAgY2hhciBtb250aFswWDIwXTsKKyAgc2l6ZV90IGxlbmd0aCA9IHN0cmZ0aW1lKG1vbnRoLCBzaXplb2YobW9udGgpLCAiJUIiLCAmZm10LT5jb21wb25lbnRzLnRpbWUpOworICBtb250aFtsZW5ndGhdID0gMDsKKworICBzd2l0Y2ggKHByZWZzLmRhdGVGb3JtYXQpIHsKKyAgICBkZWZhdWx0OgorICAgIGNhc2UgZGZZZWFyTW9udGhEYXk6CisgICAgICBTVFJfUFJJTlRGKHllYXJGb3JtYXQsIHllYXIpOworICAgICAgU1RSX1BSSU5URigiICIpOworICAgICAgU1RSX1BSSU5URihtb250aEZvcm1hdCwgbW9udGgpOworICAgICAgU1RSX1BSSU5URigiICIpOworICAgICAgU1RSX1BSSU5URihkYXlGb3JtYXQsIGRheSk7CisgICAgICBicmVhazsKKworICAgIGNhc2UgZGZNb250aERheVllYXI6CisgICAgICBTVFJfUFJJTlRGKG1vbnRoRm9ybWF0LCBtb250aCk7CisgICAgICBTVFJfUFJJTlRGKCIgIik7CisgICAgICBTVFJfUFJJTlRGKGRheUZvcm1hdCwgZGF5KTsKKyAgICAgIFNUUl9QUklOVEYoIiwgIik7CisgICAgICBTVFJfUFJJTlRGKHllYXJGb3JtYXQsIHllYXIpOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIGRmRGF5TW9udGhZZWFyOgorICAgICAgU1RSX1BSSU5URihkYXlGb3JtYXQsIGRheSk7CisgICAgICBTVFJfUFJJTlRGKCIgIik7CisgICAgICBTVFJfUFJJTlRGKG1vbnRoRm9ybWF0LCBtb250aCk7CisgICAgICBTVFJfUFJJTlRGKCIsICIpOworICAgICAgU1RSX1BSSU5URih5ZWFyRm9ybWF0LCB5ZWFyKTsKKyAgICAgIGJyZWFrOworICB9CitTVFJfRU5EX0ZPUk1BVFRFUgorCitzdGF0aWMKK1NUUl9CRUdJTl9GT1JNQVRURVIoZm9ybWF0U3BlZWNoVGltZSwgY29uc3QgVGltZUZvcm1hdHRpbmdEYXRhICpmbXQpCisgIHVuc2lnbmVkIGludCBob3VycyA9IGZtdC0+Y29tcG9uZW50cy5ob3VyOworICB1bnNpZ25lZCBpbnQgbWludXRlcyA9IGZtdC0+Y29tcG9uZW50cy5taW51dGU7CisgIHVuc2lnbmVkIGludCBzZWNvbmRzID0gZm10LT5jb21wb25lbnRzLnNlY29uZDsKKworICBpZiAobWludXRlcyA+IDApIHsKKyAgICBTVFJfUFJJTlRGKCIldSIsIGhvdXJzKTsKKyAgICBpZiAobWludXRlcyA8IDEwKSBTVFJfUFJJTlRGKCIgMCIpOworICAgIFNUUl9QUklOVEYoIiAldSIsIG1pbnV0ZXMpOworICB9IGVsc2UgaWYgKCFmbXQtPm1lcmlkaWFuKSB7CisgICAgLy8geGdldHRleHQ6IFRoaXMgaXMgaG93IHRvIHNheSB3aGVuIHRoZSB0aW1lIGlzIGV4YWN0bHkgb24gKGkuZS4gemVybyBtaW51dGVzIGFmdGVyKSBhbiBob3VyLgorICAgIC8vIHhnZXR0ZXh0OiAoJXUgcmVwcmVzZW50cyB0aGUgbnVtYmVyIG9mIGhvdXJzKQorICAgIFNUUl9QUklOVEYobmdldHRleHQoIiV1IG8nY2xvY2siLCAiJXUgbydjbG9jayIsIGhvdXJzKSwgaG91cnMpOworICB9CisKKyAgaWYgKGZtdC0+bWVyaWRpYW4pIHsKKyAgICBjb25zdCBjaGFyICpjaGFyYWN0ZXIgPSBmbXQtPm1lcmlkaWFuOworICAgIHdoaWxlICgqY2hhcmFjdGVyKSBTVFJfUFJJTlRGKCIgJWMiLCAqY2hhcmFjdGVyKyspOworICB9CisKKyAgaWYgKHByZWZzLnNob3dTZWNvbmRzKSB7CisgICAgU1RSX1BSSU5URigiLCAiKTsKKworICAgIGlmIChzZWNvbmRzID09IDApIHsKKyAgICAgIC8vIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSB0ZXJtIHVzZWQgd2hlbiB0aGUgdGltZSBpcyBleGFjdGx5IG9uIChpLmUuIHplcm8gc2Vjb25kcyBhZnRlcikgYSBtaW51dGUuCisgICAgICBTVFJfUFJJTlRGKCIlcyIsIGdldHRleHQoImV4YWN0bHkiKSk7CisgICAgfSBlbHNlIHsKKyAgICAgIFNUUl9QUklOVEYoIiVzIiwgZ2V0dGV4dCgiYW5kIikpOworCisgICAgICAvLyB4Z2V0dGV4dDogVGhpcyBpcyBhIG51bWJlciAoJXUpIG9mIHNlY29uZHMgKHRpbWUgdW5pdHMpLgorICAgICAgU1RSX1BSSU5URihuZ2V0dGV4dCgiJXUgc2Vjb25kIiwgIiV1IHNlY29uZHMiLCBzZWNvbmRzKSwgc2Vjb25kcyk7CisgICAgfQorICB9CitTVFJfRU5EX0ZPUk1BVFRFUgorCitzdGF0aWMgdm9pZAorc3BlYWtUaW1lIChjb25zdCBUaW1lRm9ybWF0dGluZ0RhdGEgKmZtdCkgeworICBjaGFyIGFubm91bmNlbWVudFswWDEwMF07CisgIGNoYXIgdGltZVswWDgwXTsKKworICBTVFJfQkVHSU4oYW5ub3VuY2VtZW50LCBzaXplb2YoYW5ub3VuY2VtZW50KSk7CisgIGZvcm1hdFNwZWVjaFRpbWUodGltZSwgc2l6ZW9mKHRpbWUpLCBmbXQpOworCisgIGlmIChwcmVmcy5kYXRlUG9zaXRpb24gPT0gZHBOb25lKSB7CisgICAgU1RSX1BSSU5URigiJXMiLCB0aW1lKTsKKyAgfSBlbHNlIHsKKyAgICBjaGFyIGRhdGVbMFg0MF07CisgICAgZm9ybWF0U3BlZWNoRGF0ZShkYXRlLCBzaXplb2YoZGF0ZSksIGZtdCk7CisKKyAgICBzd2l0Y2ggKHByZWZzLmRhdGVQb3NpdGlvbikgeworICAgICAgY2FzZSBkcEJlZm9yZVRpbWU6CisgICAgICAgIFNUUl9QUklOVEYoIiVzLCAlcyIsIGRhdGUsIHRpbWUpOworICAgICAgICBicmVhazsKKworICAgICAgY2FzZSBkcEFmdGVyVGltZToKKyAgICAgICAgU1RSX1BSSU5URigiJXMsICVzIiwgdGltZSwgZGF0ZSk7CisgICAgICAgIGJyZWFrOworCisgICAgICBkZWZhdWx0OgorICAgICAgICBTVFJfUFJJTlRGKCIlcyIsIGRhdGUpOworICAgICAgICBicmVhazsKKyAgICB9CisgIH0KKworICBTVFJfUFJJTlRGKCIuIik7CisgIFNUUl9FTkQ7CisgIHNheVN0cmluZygmc3BrLCBhbm5vdW5jZW1lbnQsIFNBWV9PUFRfTVVURV9GSVJTVCk7Cit9CisjZW5kaWYgLyogRU5BQkxFX1NQRUVDSF9TVVBQT1JUICovCisKK3N0YXRpYyB2b2lkCitzaG93VGltZSAoY29uc3QgVGltZUZvcm1hdHRpbmdEYXRhICpmbXQpIHsKKyAgY2hhciBidWZmZXJbMFg4MF07CisKKyAgZm9ybWF0QnJhaWxsZVRpbWUoYnVmZmVyLCBzaXplb2YoYnVmZmVyKSwgZm10KTsKKyAgbWVzc2FnZShOVUxMLCBidWZmZXIsIE1TR19TSUxFTlQpOworfQorCitzdGF0aWMgaW50CitoYW5kbGVNaXNjZWxsYW5lb3VzQ29tbWFuZHMgKGludCBjb21tYW5kLCB2b2lkICpkYXRhKSB7CisgIHN3aXRjaCAoY29tbWFuZCAmIEJSTF9NU0tfQ01EKSB7CisgICAgY2FzZSBCUkxfQ01EX1JFU1RBUlRCUkw6CisgICAgICBicmwuaGFzRmFpbGVkID0gMTsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBCUkxfQ01EX0JSTF9TVE9QOgorICAgICAgZGlzYWJsZUJyYWlsbGVEcml2ZXIoZ2V0dGV4dCgiYnJhaWxsZSBkcml2ZXIgc3RvcHBlZCIpKTsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBCUkxfQ01EX0JSTF9TVEFSVDoKKyAgICAgIGVuYWJsZUJyYWlsbGVEcml2ZXIoKTsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBCUkxfQ01EX1NDUl9TVE9QOgorICAgICAgZGlzYWJsZVNjcmVlbkRyaXZlcihnZXR0ZXh0KCJzY3JlZW4gZHJpdmVyIHN0b3BwZWQiKSk7CisgICAgICBicmVhazsKKworICAgIGNhc2UgQlJMX0NNRF9TQ1JfU1RBUlQ6CisgICAgICBlbmFibGVTY3JlZW5Ecml2ZXIoKTsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBCUkxfQ01EX0hFTFA6IHsKKyAgICAgIGludCBvayA9IDA7CisgICAgICB1bnNpZ25lZCBpbnQgcGFnZU51bWJlcjsKKworICAgICAgaWYgKGlzU3BlY2lhbFNjcmVlbihTQ1JfSEVMUCkpIHsKKyAgICAgICAgcGFnZU51bWJlciA9IGdldEhlbHBQYWdlTnVtYmVyKCkgKyAxOworICAgICAgICBvayA9IDE7CisgICAgICB9IGVsc2UgeworICAgICAgICBwYWdlTnVtYmVyID0gaGF2ZVNwZWNpYWxTY3JlZW4oU0NSX0hFTFApPyBnZXRIZWxwUGFnZU51bWJlcigpOiAxOworICAgICAgICBpZiAoIWFjdGl2YXRlU3BlY2lhbFNjcmVlbihTQ1JfSEVMUCkpIHBhZ2VOdW1iZXIgPSAwOworICAgICAgfQorCisgICAgICBpZiAocGFnZU51bWJlcikgeworICAgICAgICB1bnNpZ25lZCBpbnQgcGFnZUNvdW50ID0gZ2V0SGVscFBhZ2VDb3VudCgpOworCisgICAgICAgIHdoaWxlIChwYWdlTnVtYmVyIDw9IHBhZ2VDb3VudCkgeworICAgICAgICAgIGlmIChzZXRIZWxwUGFnZU51bWJlcihwYWdlTnVtYmVyKSkKKyAgICAgICAgICAgIGlmIChnZXRIZWxwTGluZUNvdW50KCkpCisgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgcGFnZU51bWJlciArPSAxOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHBhZ2VOdW1iZXIgPiBwYWdlQ291bnQpIHsKKyAgICAgICAgICBkZWFjdGl2YXRlU3BlY2lhbFNjcmVlbihTQ1JfSEVMUCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgb2sgPSAxOworICAgICAgICB9CisKKyAgICAgICAgdXBkYXRlU2Vzc2lvbkF0dHJpYnV0ZXMoKTsKKyAgICAgIH0KKworICAgICAgaWYgKG9rKSB7CisgICAgICAgIGluZm9Nb2RlID0gMDsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIG1lc3NhZ2UoTlVMTCwgZ2V0dGV4dCgiaGVscCBub3QgYXZhaWxhYmxlIiksIDApOworICAgICAgfQorCisgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIEJSTF9DTURfVElNRTogeworICAgICAgVGltZUZvcm1hdHRpbmdEYXRhIGZtdDsKKyAgICAgIGdldFRpbWVGb3JtYXR0aW5nRGF0YSgmZm10KTsKKworI2lmZGVmIEVOQUJMRV9TUEVFQ0hfU1VQUE9SVAorICAgICAgaWYgKGlzQXV0b3NwZWFrQWN0aXZlKCkpIHNwZWFrVGltZSgmZm10KTsKKyNlbmRpZiAvKiBFTkFCTEVfU1BFRUNIX1NVUFBPUlQgKi8KKworICAgICAgc2hvd1RpbWUoJmZtdCk7CisgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIEJSTF9DTURfUkVGUkVTSDogeworICAgICAgaWYgKGNhblJlZnJlc2hCcmFpbGxlRGlzcGxheSgmYnJsKSkgeworICAgICAgICBpZiAocmVmcmVzaEJyYWlsbGVEaXNwbGF5KCZicmwpKSB7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgIH0KKworICAgICAgYWxlcnQoQUxFUlRfQ09NTUFORF9SRUpFQ1RFRCk7CisgICAgICBicmVhazsKKyAgICB9CisKKyAgICBkZWZhdWx0OiB7CisgICAgICBpbnQgYXJnID0gY29tbWFuZCAmIEJSTF9NU0tfQVJHOworCisgICAgICBzd2l0Y2ggKGNvbW1hbmQgJiBCUkxfTVNLX0JMSykgeworICAgICAgICBjYXNlIEJSTF9DTURfQkxLKERFU0NDSEFSKTogeworICAgICAgICAgIGludCBjb2x1bW4sIHJvdzsKKworICAgICAgICAgIGlmIChnZXRDaGFyYWN0ZXJDb29yZGluYXRlcyhhcmcsICZyb3csICZjb2x1bW4sIE5VTEwsIDApKSB7CisgICAgICAgICAgICBjaGFyIGRlc2NyaXB0aW9uWzBYODBdOworICAgICAgICAgICAgU1RSX0JFR0lOKGRlc2NyaXB0aW9uLCBzaXplb2YoZGVzY3JpcHRpb24pKTsKKyAgICAgICAgICAgIFNUUl9GT1JNQVQoZm9ybWF0Q2hhcmFjdGVyRGVzY3JpcHRpb24sIGNvbHVtbiwgcm93KTsKKyAgICAgICAgICAgIFNUUl9FTkQ7CisgICAgICAgICAgICBtZXNzYWdlKE5VTEwsIGRlc2NyaXB0aW9uLCAwKTsKKyAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgYWxlcnQoQUxFUlRfQ09NTUFORF9SRUpFQ1RFRCk7CisgICAgICAgICAgfQorCisgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBjYXNlIEJSTF9DTURfQkxLKFJFRlJFU0hfTElORSk6IHsKKyAgICAgICAgICBpZiAoY2FuUmVmcmVzaEJyYWlsbGVSb3coJmJybCkpIHsKKyAgICAgICAgICAgIGlmIChyZWZyZXNoQnJhaWxsZVJvdygmYnJsLCBhcmcpKSB7CisgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgIH0KKworICAgICAgICAgIGFsZXJ0KEFMRVJUX0NPTU1BTkRfUkVKRUNURUQpOworICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgY2FzZSBCUkxfQ01EX0JMSyhBTEVSVCk6CisgICAgICAgICAgYWxlcnQoYXJnKTsKKyAgICAgICAgICBicmVhazsKKworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgIHJldHVybiAwOworICAgICAgfQorCisgICAgICBicmVhazsKKyAgICB9CisgIH0KKworICByZXR1cm4gMTsKK30KKworaW50CithZGRNaXNjZWxsYW5lb3VzQ29tbWFuZHMgKHZvaWQpIHsKKyAgcmV0dXJuIHB1c2hDb21tYW5kSGFuZGxlcigibWlzY2VsbGFuZW91cyIsIEtUQl9DVFhfREVGQVVMVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVNaXNjZWxsYW5lb3VzQ29tbWFuZHMsIE5VTEwsIE5VTEwpOworfQpkaWZmIC0tZ2l0IGEvUHJvZ3JhbXMvY21kX21pc2NlbGxhbmVvdXMuaCBiL1Byb2dyYW1zL2NtZF9taXNjZWxsYW5lb3VzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTgzMmUyMwotLS0gL2Rldi9udWxsCisrKyBiL1Byb2dyYW1zL2NtZF9taXNjZWxsYW5lb3VzLmgKQEAgLTAsMCArMSwzMiBAQAorLyoKKyAqIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisgKiAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisgKgorICogQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKKyNpZm5kZWYgQlJMVFRZX0lOQ0xVREVEX0NNRF9NSVNDRUxMQU5FT1VTCisjZGVmaW5lIEJSTFRUWV9JTkNMVURFRF9DTURfTUlTQ0VMTEFORU9VUworCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmIC8qIF9fY3BsdXNwbHVzICovCisKK2V4dGVybiBpbnQgYWRkTWlzY2VsbGFuZW91c0NvbW1hbmRzICh2b2lkKTsKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYgLyogX19jcGx1c3BsdXMgKi8KKworI2VuZGlmIC8qIEJSTFRUWV9JTkNMVURFRF9DTURfTUlTQ0VMTEFORU9VUyAqLwpkaWZmIC0tZ2l0IGEvUHJvZ3JhbXMvY21kX25hdmlnYXRpb24uYyBiL1Byb2dyYW1zL2NtZF9uYXZpZ2F0aW9uLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTIxNmNlYQotLS0gL2Rldi9udWxsCisrKyBiL1Byb2dyYW1zL2NtZF9uYXZpZ2F0aW9uLmMKQEAgLTAsMCArMSw4MzQgQEAKKy8qCisgKiBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorICogICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorICoKKyAqIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorICoKKyAqIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyAqLworCisjaW5jbHVkZSAicHJvbG9ndWUuaCIKKworI2luY2x1ZGUgPHN0ZGlvLmg+CisKKyNpbmNsdWRlICJsb2cuaCIKKyNpbmNsdWRlICJhbGVydC5oIgorI2luY2x1ZGUgInBhcmFtZXRlcnMuaCIKKyNpbmNsdWRlICJwcm9ncmFtLmgiCisjaW5jbHVkZSAiY21kX3F1ZXVlLmgiCisjaW5jbHVkZSAiY21kX25hdmlnYXRpb24uaCIKKyNpbmNsdWRlICJjbWRfdXRpbHMuaCIKKyNpbmNsdWRlICJicmxfY21kcy5oIgorI2luY2x1ZGUgInBhcnNlLmgiCisjaW5jbHVkZSAicmd4LmgiCisjaW5jbHVkZSAicHJlZnMuaCIKKyNpbmNsdWRlICJyb3V0aW5nLmgiCisjaW5jbHVkZSAic2NyLmgiCisjaW5jbHVkZSAiY29yZS5oIgorCitzdGF0aWMgaW50CitnZXRXaW5kb3dMZW5ndGggKHZvaWQpIHsKKyAgaWYgKGlzQ29udHJhY3RpbmcoKSkgcmV0dXJuIGdldENvbnRyYWN0ZWRMZW5ndGgodGV4dENvdW50KTsKKyAgcmV0dXJuIHRleHRDb3VudDsKK30KKwordHlwZWRlZiBpbnQgKCpDYW5Nb3ZlV2luZG93KSAodm9pZCk7CisKK3N0YXRpYyBpbnQKK2Nhbk1vdmVVcCAodm9pZCkgeworICByZXR1cm4gc2VzLT53aW55ID4gMDsKK30KKworc3RhdGljIGludAorY2FuTW92ZURvd24gKHZvaWQpIHsKKyAgcmV0dXJuIChzZXMtPndpbnkgKyBicmwudGV4dFJvd3MpIDwgc2NyLnJvd3M7Cit9CisKK3N0YXRpYyBpbnQKK3RvRGlmZmVyZW50TGluZSAoCisgIElzU2FtZUNoYXJhY3RlciBpc1NhbWVDaGFyYWN0ZXIsCisgIENhbk1vdmVXaW5kb3cgY2FuTW92ZVdpbmRvdywKKyAgaW50IGFtb3VudCwgaW50IGZyb20sIGludCB3aWR0aAorKSB7CisgIGlmIChjYW5Nb3ZlV2luZG93KCkpIHsKKyAgICBTY3JlZW5DaGFyYWN0ZXIgY2hhcmFjdGVyczFbd2lkdGhdOworICAgIHVuc2lnbmVkIGludCBza2lwcGVkID0gMDsKKworICAgIGlmICgoaXNTYW1lQ2hhcmFjdGVyID09IGlzU2FtZVRleHQpICYmIHNlcy0+ZGlzcGxheU1vZGUpIGlzU2FtZUNoYXJhY3RlciA9IGlzU2FtZUF0dHJpYnV0ZXM7CisgICAgcmVhZFNjcmVlbihmcm9tLCBzZXMtPndpbnksIHdpZHRoLCAxLCBjaGFyYWN0ZXJzMSk7CisKKyAgICBkbyB7CisgICAgICBTY3JlZW5DaGFyYWN0ZXIgY2hhcmFjdGVyczJbd2lkdGhdOworICAgICAgcmVhZFNjcmVlbihmcm9tLCBzZXMtPndpbnkrPWFtb3VudCwgd2lkdGgsIDEsIGNoYXJhY3RlcnMyKTsKKworICAgICAgaWYgKCFpc1NhbWVSb3coY2hhcmFjdGVyczEsIGNoYXJhY3RlcnMyLCB3aWR0aCwgaXNTYW1lQ2hhcmFjdGVyKSB8fAorICAgICAgICAgIChzaG93U2NyZWVuQ3Vyc29yKCkgJiYgKHNjci5wb3N5ID09IHNlcy0+d2lueSkgJiYKKyAgICAgICAgICAgKHNjci5wb3N4ID49IGZyb20pICYmIChzY3IucG9zeCA8IChmcm9tICsgd2lkdGgpKSkpIHsKKyAgICAgICAgcmV0dXJuIDE7CisgICAgICB9CisKKyAgICAgIC8qIGxpbmVzIGFyZSBpZGVudGljYWwgKi8KKyAgICAgIGFsZXJ0TGluZVNraXBwZWQoJnNraXBwZWQpOworICAgIH0gd2hpbGUgKGNhbk1vdmVXaW5kb3coKSk7CisgIH0KKworICBhbGVydChBTEVSVF9CT1VOQ0UpOworICByZXR1cm4gMDsKK30KKworc3RhdGljIGludAordXBEaWZmZXJlbnRMaW5lIChJc1NhbWVDaGFyYWN0ZXIgaXNTYW1lQ2hhcmFjdGVyKSB7CisgIHJldHVybiB0b0RpZmZlcmVudExpbmUoaXNTYW1lQ2hhcmFjdGVyLCBjYW5Nb3ZlVXAsIC0xLCAwLCBzY3IuY29scyk7Cit9CisKK3N0YXRpYyBpbnQKK2Rvd25EaWZmZXJlbnRMaW5lIChJc1NhbWVDaGFyYWN0ZXIgaXNTYW1lQ2hhcmFjdGVyKSB7CisgIHJldHVybiB0b0RpZmZlcmVudExpbmUoaXNTYW1lQ2hhcmFjdGVyLCBjYW5Nb3ZlRG93biwgMSwgMCwgc2NyLmNvbHMpOworfQorCitzdGF0aWMgaW50Cit1cERpZmZlcmVudENoYXJhY3RlciAoSXNTYW1lQ2hhcmFjdGVyIGlzU2FtZUNoYXJhY3RlciwgaW50IGNvbHVtbikgeworICByZXR1cm4gdG9EaWZmZXJlbnRMaW5lKGlzU2FtZUNoYXJhY3RlciwgY2FuTW92ZVVwLCAtMSwgY29sdW1uLCAxKTsKK30KKworc3RhdGljIGludAorZG93bkRpZmZlcmVudENoYXJhY3RlciAoSXNTYW1lQ2hhcmFjdGVyIGlzU2FtZUNoYXJhY3RlciwgaW50IGNvbHVtbikgeworICByZXR1cm4gdG9EaWZmZXJlbnRMaW5lKGlzU2FtZUNoYXJhY3RlciwgY2FuTW92ZURvd24sIDEsIGNvbHVtbiwgMSk7Cit9CisKK3N0YXRpYyB2b2lkCit1cE9uZUxpbmUgKHZvaWQpIHsKKyAgaWYgKGNhbk1vdmVVcCgpKSB7CisgICAgc2VzLT53aW55LS07CisgIH0gZWxzZSB7CisgICAgYWxlcnQoQUxFUlRfQk9VTkNFKTsKKyAgfQorfQorCitzdGF0aWMgdm9pZAorZG93bk9uZUxpbmUgKHZvaWQpIHsKKyAgaWYgKGNhbk1vdmVEb3duKCkpIHsKKyAgICBzZXMtPndpbnkrKzsKKyAgfSBlbHNlIHsKKyAgICBhbGVydChBTEVSVF9CT1VOQ0UpOworICB9Cit9CisKK3N0YXRpYyB2b2lkCit1cExpbmUgKElzU2FtZUNoYXJhY3RlciBpc1NhbWVDaGFyYWN0ZXIpIHsKKyAgaWYgKHByZWZzLnNraXBJZGVudGljYWxMaW5lcykgeworICAgIHVwRGlmZmVyZW50TGluZShpc1NhbWVDaGFyYWN0ZXIpOworICB9IGVsc2UgeworICAgIHVwT25lTGluZSgpOworICB9Cit9CisKK3N0YXRpYyB2b2lkCitkb3duTGluZSAoSXNTYW1lQ2hhcmFjdGVyIGlzU2FtZUNoYXJhY3RlcikgeworICBpZiAocHJlZnMuc2tpcElkZW50aWNhbExpbmVzKSB7CisgICAgZG93bkRpZmZlcmVudExpbmUoaXNTYW1lQ2hhcmFjdGVyKTsKKyAgfSBlbHNlIHsKKyAgICBkb3duT25lTGluZSgpOworICB9Cit9CisKK3R5cGVkZWYgaW50ICgqUm93VGVzdGVyKSAoaW50IGNvbHVtbiwgaW50IHJvdywgdm9pZCAqZGF0YSk7CisKK3N0YXRpYyB2b2lkCitmaW5kUm93IChpbnQgY29sdW1uLCBpbnQgaW5jcmVtZW50LCBSb3dUZXN0ZXIgdGVzdCwgdm9pZCAqZGF0YSkgeworICBpbnQgcm93ID0gc2VzLT53aW55OworCisgIHdoaWxlICgxKSB7CisgICAgcm93ICs9IGluY3JlbWVudDsKKyAgICBpZiAocm93IDwgMCkgYnJlYWs7CisgICAgaWYgKChyb3cgKyBicmwudGV4dFJvd3MpID4gc2NyLnJvd3MpIGJyZWFrOworCisgICAgaWYgKHRlc3QoY29sdW1uLCByb3csIGRhdGEpKSB7CisgICAgICBzZXMtPndpbnkgPSByb3c7CisgICAgICByZXR1cm47CisgICAgfQorICB9CisKKyAgYWxlcnQoQUxFUlRfQk9VTkNFKTsKK30KKworc3RhdGljIGludAordGVzdEluZGVudCAoaW50IGNvbHVtbiwgaW50IHJvdywgdm9pZCAqZGF0YSBVTlVTRUQpIHsKKyAgaW50IGNvdW50ID0gY29sdW1uKzE7CisgIFNjcmVlbkNoYXJhY3RlciBjaGFyYWN0ZXJzW2NvdW50XTsKKyAgcmVhZFNjcmVlblJvdyhyb3csIGNvdW50LCBjaGFyYWN0ZXJzKTsKKworICB3aGlsZSAoY29sdW1uID49IDApIHsKKyAgICB3Y2hhcl90IHRleHQgPSBjaGFyYWN0ZXJzW2NvbHVtbl0udGV4dDsKKyAgICBpZiAodGV4dCAhPSBXQ19DKCcgJykpIHJldHVybiAxOworICAgIGNvbHVtbiAtPSAxOworICB9CisKKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBSR1hfT2JqZWN0ICpwcm9tcHRQYXR0ZXJucyA9IE5VTEw7CisKK3N0YXRpYyB2b2lkCitleGl0UHJvbXB0UGF0dGVybnMgKHZvaWQgKmRhdGEpIHsKKyAgaWYgKHByb21wdFBhdHRlcm5zKSB7CisgICAgcmd4RGVzdHJveU9iamVjdChwcm9tcHRQYXR0ZXJucyk7CisgICAgcHJvbXB0UGF0dGVybnMgPSBOVUxMOworICB9Cit9CisKK2ludAorYWRkUHJvbXB0UGF0dGVybiAoY29uc3QgY2hhciAqc3RyaW5nKSB7CisgIGlmICghcHJvbXB0UGF0dGVybnMpIHsKKyAgICBpZiAoIShwcm9tcHRQYXR0ZXJucyA9IHJneE5ld09iamVjdChOVUxMKSkpIHJldHVybiAwOworICAgIG9uUHJvZ3JhbUV4aXQoInByb21wdC1wYXR0ZXJucyIsIGV4aXRQcm9tcHRQYXR0ZXJucywgTlVMTCk7CisgICAgcmd4Q29tcGlsZU9wdGlvbihwcm9tcHRQYXR0ZXJucywgUkdYX09QVElPTl9TRVQsIFJHWF9DT01QSUxFX0FOQ0hPUl9TVEFSVCk7CisgIH0KKworICBSR1hfTWF0Y2hlciAqbWF0Y2hlciA9IHJneEFkZFBhdHRlcm5VVEY4KAorICAgIHByb21wdFBhdHRlcm5zLCBzdHJpbmcsIE5VTEwsIE5VTEwKKyAgKTsKKworICBpZiAoIW1hdGNoZXIpIHJldHVybiAwOworICByZXR1cm4gMTsKK30KKworc3RhdGljIGludAordGVzdFByb21wdE9yaWdpbmFsIChpbnQgY29sdW1uLCBpbnQgcm93LCB2b2lkICpkYXRhKSB7CisgIGlmICghY29sdW1uKSByZXR1cm4gMDsKKworICBpbnQgbGVuZ3RoID0gY29sdW1uICsgMTsKKyAgU2NyZWVuQ2hhcmFjdGVyIGNoYXJhY3RlcnNbbGVuZ3RoXTsKKyAgcmVhZFNjcmVlblJvdyhyb3csIGxlbmd0aCwgY2hhcmFjdGVycyk7CisKKyAgY29uc3QgU2NyZWVuQ2hhcmFjdGVyICpwcm9tcHQgPSBkYXRhOworICByZXR1cm4gaXNTYW1lUm93KGNoYXJhY3RlcnMsIHByb21wdCwgbGVuZ3RoLCBpc1NhbWVUZXh0KTsKK30KKworc3RhdGljIGludAordGVzdFByb21wdFBhdHRlcm5zIChpbnQgY29sdW1uLCBpbnQgcm93LCB2b2lkICpkYXRhKSB7CisgIGludCBsZW5ndGggPSBzY3IuY29sczsKKyAgd2NoYXJfdCB0ZXh0W2xlbmd0aF07CisKKyAgeworICAgIFNjcmVlbkNoYXJhY3RlciBjaGFyYWN0ZXJzW2xlbmd0aF07CisgICAgcmVhZFNjcmVlblJvdyhyb3csIGxlbmd0aCwgY2hhcmFjdGVycyk7CisKKyAgICBjb25zdCBTY3JlZW5DaGFyYWN0ZXIgKmZyb20gPSBjaGFyYWN0ZXJzOworICAgIGNvbnN0IFNjcmVlbkNoYXJhY3RlciAqZW5kID0gZnJvbSArIGxlbmd0aDsKKworICAgIHdjaGFyX3QgKnRvID0gdGV4dDsKKyAgICB3aGlsZSAoZnJvbSA8IGVuZCkgKnRvKysgPSBmcm9tKystPnRleHQ7CisgIH0KKworICByZXR1cm4gISFyZ3hNYXRjaFRleHRDaGFyYWN0ZXJzKHByb21wdFBhdHRlcm5zLCB0ZXh0LCBsZW5ndGgsIE5VTEwsIE5VTEwpOworfQorCitzdGF0aWMgdm9pZAordG9QcmV2aW91c05vbmJsYW5rV2luZG93ICh2b2lkKSB7CisgIGludCBvbGRYID0gc2VzLT53aW54OworICBpbnQgb2xkWSA9IHNlcy0+d2lueTsKKyAgaW50IHR1bmVMaW1pdCA9IDM7CisgIFNjcmVlbkNoYXJhY3RlciBjaGFyYWN0ZXJzW3Njci5jb2xzXTsKKworICB3aGlsZSAoMSkgeworICAgIGludCBjaGFyQ291bnQ7CisgICAgaW50IGNoYXJJbmRleDsKKworICAgIGlmICghc2hpZnRCcmFpbGxlV2luZG93TGVmdChmdWxsV2luZG93U2hpZnQpKSB7CisgICAgICBpZiAoc2VzLT53aW55ID09IDApIHsKKyAgICAgICAgc2VzLT53aW54ID0gb2xkWDsKKyAgICAgICAgc2VzLT53aW55ID0gb2xkWTsKKworICAgICAgICBhbGVydChBTEVSVF9CT1VOQ0UpOworICAgICAgICBicmVhazsKKyAgICAgIH0KKworICAgICAgaWYgKHR1bmVMaW1pdC0tID4gMCkgYWxlcnQoQUxFUlRfV1JBUF9VUCk7CisgICAgICB1cExpbmUoaXNTYW1lVGV4dCk7CisgICAgICBwbGFjZUJyYWlsbGVXaW5kb3dSaWdodCgpOworICAgIH0KKworICAgIGNoYXJDb3VudCA9IGdldFdpbmRvd0xlbmd0aCgpOworICAgIGNoYXJDb3VudCA9IE1JTihjaGFyQ291bnQsIHNjci5jb2xzLXNlcy0+d2lueCk7CisgICAgcmVhZFNjcmVlbihzZXMtPndpbngsIHNlcy0+d2lueSwgY2hhckNvdW50LCAxLCBjaGFyYWN0ZXJzKTsKKworICAgIGZvciAoY2hhckluZGV4PWNoYXJDb3VudC0xOyBjaGFySW5kZXg+PTA7IGNoYXJJbmRleC09MSkgeworICAgICAgd2NoYXJfdCB0ZXh0ID0gY2hhcmFjdGVyc1tjaGFySW5kZXhdLnRleHQ7CisKKyAgICAgIGlmICh0ZXh0ICE9IFdDX0MoJyAnKSkgYnJlYWs7CisgICAgfQorCisgICAgaWYgKHNob3dTY3JlZW5DdXJzb3IoKSAmJgorICAgICAgICAoc2NyLnBvc3kgPT0gc2VzLT53aW55KSAmJgorICAgICAgICAoc2NyLnBvc3ggPj0gMCkgJiYKKyAgICAgICAgKHNjci5wb3N4IDwgKHNlcy0+d2lueCArIGNoYXJDb3VudCkpKSB7CisgICAgICBjaGFySW5kZXggPSBNQVgoY2hhckluZGV4LCBzY3IucG9zeC1zZXMtPndpbngpOworICAgIH0KKworICAgIGlmIChjaGFySW5kZXggPj0gMCkgYnJlYWs7CisgIH0KK30KKworc3RhdGljIHZvaWQKK3RvTmV4dE5vbmJsYW5rV2luZG93ICh2b2lkKSB7CisgIGludCBvbGRYID0gc2VzLT53aW54OworICBpbnQgb2xkWSA9IHNlcy0+d2lueTsKKyAgaW50IHR1bmVMaW1pdCA9IDM7CisgIFNjcmVlbkNoYXJhY3RlciBjaGFyYWN0ZXJzW3Njci5jb2xzXTsKKworICB3aGlsZSAoMSkgeworICAgIGludCBjaGFyQ291bnQ7CisgICAgaW50IGNoYXJJbmRleDsKKworICAgIGlmICghc2hpZnRCcmFpbGxlV2luZG93UmlnaHQoZnVsbFdpbmRvd1NoaWZ0KSkgeworICAgICAgaWYgKHNlcy0+d2lueSA+PSAoc2NyLnJvd3MgLSBicmwudGV4dFJvd3MpKSB7CisgICAgICAgIHNlcy0+d2lueCA9IG9sZFg7CisgICAgICAgIHNlcy0+d2lueSA9IG9sZFk7CisKKyAgICAgICAgYWxlcnQoQUxFUlRfQk9VTkNFKTsKKyAgICAgICAgYnJlYWs7CisgICAgICB9CisKKyAgICAgIGlmICh0dW5lTGltaXQtLSA+IDApIGFsZXJ0KEFMRVJUX1dSQVBfRE9XTik7CisgICAgICBkb3duTGluZShpc1NhbWVUZXh0KTsKKyAgICAgIHNlcy0+d2lueCA9IDA7CisgICAgfQorCisgICAgY2hhckNvdW50ID0gZ2V0V2luZG93TGVuZ3RoKCk7CisgICAgY2hhckNvdW50ID0gTUlOKGNoYXJDb3VudCwgc2NyLmNvbHMtc2VzLT53aW54KTsKKyAgICByZWFkU2NyZWVuKHNlcy0+d2lueCwgc2VzLT53aW55LCBjaGFyQ291bnQsIDEsIGNoYXJhY3RlcnMpOworCisgICAgZm9yIChjaGFySW5kZXg9MDsgY2hhckluZGV4PGNoYXJDb3VudDsgY2hhckluZGV4Kz0xKSB7CisgICAgICB3Y2hhcl90IHRleHQgPSBjaGFyYWN0ZXJzW2NoYXJJbmRleF0udGV4dDsKKworICAgICAgaWYgKHRleHQgIT0gV0NfQygnICcpKSBicmVhazsKKyAgICB9CisKKyAgICBpZiAoc2hvd1NjcmVlbkN1cnNvcigpICYmCisgICAgICAgIChzY3IucG9zeSA9PSBzZXMtPndpbnkpICYmCisgICAgICAgIChzY3IucG9zeCA8IHNjci5jb2xzKSAmJgorICAgICAgICAoc2NyLnBvc3ggPj0gc2VzLT53aW54KSkgeworICAgICAgY2hhckluZGV4ID0gTUlOKGNoYXJJbmRleCwgc2NyLnBvc3gtc2VzLT53aW54KTsKKyAgICB9CisKKyAgICBpZiAoY2hhckluZGV4IDwgY2hhckNvdW50KSBicmVhazsKKyAgfQorfQorCitzdGF0aWMgaW50CitoYW5kbGVOYXZpZ2F0aW9uQ29tbWFuZHMgKGludCBjb21tYW5kLCB2b2lkICpkYXRhKSB7CisgIGludCBvbGR3aW55ID0gc2VzLT53aW55OworCisgIHN3aXRjaCAoY29tbWFuZCAmIEJSTF9NU0tfQ01EKSB7CisgICAgY2FzZSBCUkxfQ01EX1RPUF9MRUZUOgorICAgICAgc2VzLT53aW54ID0gMDsKKyAgICAgIC8qIGZhbGwgdGhyb3VnaCAqLworICAgIGNhc2UgQlJMX0NNRF9UT1A6CisgICAgICBzZXMtPndpbnkgPSAwOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIEJSTF9DTURfQk9UX0xFRlQ6CisgICAgICBzZXMtPndpbnggPSAwOworICAgICAgLyogZmFsbCB0aHJvdWdoICovCisgICAgY2FzZSBCUkxfQ01EX0JPVDoKKyAgICAgIHNlcy0+d2lueSA9IE1BWChzY3Iucm93cywgYnJsLnRleHRSb3dzKSAtIGJybC50ZXh0Um93czsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBCUkxfQ01EX1dJTlVQOgorICAgICAgaWYgKGNhbk1vdmVVcCgpKSB7CisgICAgICAgIHNlcy0+d2lueSAtPSBNSU4odmVydGljYWxXaW5kb3dTaGlmdCwgc2VzLT53aW55KTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIGFsZXJ0KEFMRVJUX0JPVU5DRSk7CisgICAgICB9CisgICAgICBicmVhazsKKyAgICBjYXNlIEJSTF9DTURfV0lORE46CisgICAgICBpZiAoY2FuTW92ZURvd24oKSkgeworICAgICAgICBzZXMtPndpbnkgKz0gTUlOKHZlcnRpY2FsV2luZG93U2hpZnQsIChzY3Iucm93cyAtIGJybC50ZXh0Um93cyAtIHNlcy0+d2lueSkpOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgYWxlcnQoQUxFUlRfQk9VTkNFKTsKKyAgICAgIH0KKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBCUkxfQ01EX0xOVVA6CisgICAgICB1cE9uZUxpbmUoKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgQlJMX0NNRF9MTkROOgorICAgICAgZG93bk9uZUxpbmUoKTsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBCUkxfQ01EX1BSRElGTE46CisgICAgICB1cERpZmZlcmVudExpbmUoaXNTYW1lVGV4dCk7CisgICAgICBicmVhazsKKyAgICBjYXNlIEJSTF9DTURfTlhESUZMTjoKKyAgICAgIGRvd25EaWZmZXJlbnRMaW5lKGlzU2FtZVRleHQpOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIEJSTF9DTURfQVRUUlVQOgorICAgICAgdXBEaWZmZXJlbnRMaW5lKGlzU2FtZUF0dHJpYnV0ZXMpOworICAgICAgYnJlYWs7CisgICAgY2FzZSBCUkxfQ01EX0FUVFJETjoKKyAgICAgIGRvd25EaWZmZXJlbnRMaW5lKGlzU2FtZUF0dHJpYnV0ZXMpOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIEJSTF9DTURfUFJQR1JQSDogeworICAgICAgdHlwZWRlZiBlbnVtIHsKKyAgICAgICAgU1RBUlRJTkcsCisgICAgICAgIFNUQVJUX0xJTkVfTk9UX0JMQU5LLAorICAgICAgICBGSU5ESU5HX0xBU1RfTElORSwKKyAgICAgICAgRklORElOR19GSVJTVF9MSU5FCisgICAgICB9IFN0YXRlOworCisgICAgICBTdGF0ZSBzdGF0ZSA9IFNUQVJUSU5HOworICAgICAgU2NyZWVuQ2hhcmFjdGVyIGNoYXJhY3RlcnNbc2NyLmNvbHNdOworICAgICAgaW50IGxpbmUgPSBzZXMtPndpbnk7CisKKyAgICAgIHdoaWxlICgxKSB7CisgICAgICAgIGludCBpc0JsYW5rTGluZTsKKworICAgICAgICByZWFkU2NyZWVuUm93KGxpbmUsIHNjci5jb2xzLCBjaGFyYWN0ZXJzKTsKKyAgICAgICAgaXNCbGFua0xpbmUgPSBpc0FsbFNwYWNlQ2hhcmFjdGVycyhjaGFyYWN0ZXJzLCBzY3IuY29scyk7CisKKyAgICAgICAgc3dpdGNoIChzdGF0ZSkgeworICAgICAgICAgIGNhc2UgU1RBUlRJTkc6CisgICAgICAgICAgICBzdGF0ZSA9IGlzQmxhbmtMaW5lPyBGSU5ESU5HX0xBU1RfTElORTogU1RBUlRfTElORV9OT1RfQkxBTks7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgIGNhc2UgU1RBUlRfTElORV9OT1RfQkxBTks6CisgICAgICAgICAgICBzdGF0ZSA9IGlzQmxhbmtMaW5lPyBGSU5ESU5HX0xBU1RfTElORTogRklORElOR19GSVJTVF9MSU5FOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICBjYXNlIEZJTkRJTkdfTEFTVF9MSU5FOgorICAgICAgICAgICAgaWYgKCFpc0JsYW5rTGluZSkgc3RhdGUgPSBGSU5ESU5HX0ZJUlNUX0xJTkU7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgIGNhc2UgRklORElOR19GSVJTVF9MSU5FOgorICAgICAgICAgICAgaWYgKCFpc0JsYW5rTGluZSkgYnJlYWs7CisgICAgICAgICAgICBsaW5lICs9IDE7CisgICAgICAgICAgICBnb3RvIGZvdW5kRmlyc3RMaW5lOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCFsaW5lKSBicmVhazsKKyAgICAgICAgbGluZSAtPSAxOworICAgICAgfQorCisgICAgICBpZiAoc3RhdGUgPT0gRklORElOR19GSVJTVF9MSU5FKSB7CisgICAgICBmb3VuZEZpcnN0TGluZToKKyAgICAgICAgc2VzLT53aW55ID0gbGluZTsKKyAgICAgICAgc2VzLT53aW54ID0gMDsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIGFsZXJ0KEFMRVJUX0JPVU5DRSk7CisgICAgICB9CisKKyAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2UgQlJMX0NNRF9OWFBHUlBIOiB7CisgICAgICBpbnQgd2lkdGggPSBzY3IuY29sczsKKyAgICAgIFNjcmVlbkNoYXJhY3RlciBjaGFyYWN0ZXJzW3dpZHRoXTsKKworICAgICAgaW50IGZvdW5kID0gMDsKKyAgICAgIGludCBmaW5kQmxhbmtMaW5lID0gMTsKKyAgICAgIGludCBsaW5lID0gc2VzLT53aW55OworCisgICAgICB3aGlsZSAobGluZSA8IHNjci5yb3dzKSB7CisgICAgICAgIHJlYWRTY3JlZW5Sb3cobGluZSwgd2lkdGgsIGNoYXJhY3RlcnMpOworCisgICAgICAgIGlmIChpc0FsbFNwYWNlQ2hhcmFjdGVycyhjaGFyYWN0ZXJzLCB3aWR0aCkgPT0gZmluZEJsYW5rTGluZSkgeworICAgICAgICAgIGlmICghZmluZEJsYW5rTGluZSkgeworICAgICAgICAgICAgc2VzLT53aW55ID0gbGluZTsKKyAgICAgICAgICAgIHNlcy0+d2lueCA9IDA7CisgICAgICAgICAgICBmb3VuZCA9IDE7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICB9CisKKyAgICAgICAgICBmaW5kQmxhbmtMaW5lID0gMDsKKyAgICAgICAgfQorCisgICAgICAgIGxpbmUgKz0gMTsKKyAgICAgIH0KKworICAgICAgaWYgKCFmb3VuZCkgYWxlcnQoQUxFUlRfQk9VTkNFKTsKKyAgICAgIGJyZWFrOworICAgIH0KKworICAgIHsKKyAgICAgIGludCBpbmNyZW1lbnQ7CisKKyAgICBjYXNlIEJSTF9DTURfUFJQUk9NUFQ6CisgICAgICBpbmNyZW1lbnQgPSAtMTsKKyAgICAgIGdvdG8gZmluZFByb21wdDsKKworICAgIGNhc2UgQlJMX0NNRF9OWFBST01QVDoKKyAgICAgIGluY3JlbWVudCA9IDE7CisgICAgICBnb3RvIGZpbmRQcm9tcHQ7CisKKyAgICBmaW5kUHJvbXB0OgorICAgICAgeworICAgICAgICBzaXplX3QgbGVuZ3RoID0gc2NyLmNvbHM7CisgICAgICAgIFNjcmVlbkNoYXJhY3RlciBjaGFyYWN0ZXJzW2xlbmd0aF07CisgICAgICAgIHJlYWRTY3JlZW5Sb3coc2VzLT53aW55LCBsZW5ndGgsIGNoYXJhY3RlcnMpOworCisgICAgICAgIGlmIChwcm9tcHRQYXR0ZXJucykgeworICAgICAgICAgIGZpbmRSb3cobGVuZ3RoLCBpbmNyZW1lbnQsIHRlc3RQcm9tcHRQYXR0ZXJucywgY2hhcmFjdGVycyk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgaW50IGNvbHVtbiA9IDA7CisKKyAgICAgICAgICB3aGlsZSAoY29sdW1uIDwgbGVuZ3RoKSB7CisgICAgICAgICAgICBpZiAoY2hhcmFjdGVyc1tjb2x1bW5dLnRleHQgPT0gV0NfQygnICcpKSBicmVhazsKKyAgICAgICAgICAgIGNvbHVtbiArPSAxOworICAgICAgICAgIH0KKworICAgICAgICAgIGlmIChjb2x1bW4gPCBsZW5ndGgpIHsKKyAgICAgICAgICAgIGZpbmRSb3coY29sdW1uLCBpbmNyZW1lbnQsIHRlc3RQcm9tcHRPcmlnaW5hbCwgY2hhcmFjdGVycyk7CisgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGFsZXJ0KEFMRVJUX0JPVU5DRSk7CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICB9CisKKyAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2UgQlJMX0NNRF9MTkJFRzoKKyAgICAgIGlmIChzZXMtPndpbngpIHsKKyAgICAgICAgc2VzLT53aW54ID0gMDsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIGFsZXJ0KEFMRVJUX0JPVU5DRSk7CisgICAgICB9CisgICAgICBicmVhazsKKworICAgIGNhc2UgQlJMX0NNRF9MTkVORDogeworICAgICAgaW50IGVuZCA9IE1BWChzY3IuY29scywgdGV4dENvdW50KSAtIHRleHRDb3VudDsKKworICAgICAgaWYgKHNlcy0+d2lueCA8IGVuZCkgeworICAgICAgICBzZXMtPndpbnggPSBlbmQ7CisgICAgICB9IGVsc2UgeworICAgICAgICBhbGVydChBTEVSVF9CT1VOQ0UpOworICAgICAgfQorICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBCUkxfQ01EX0NIUkxUOgorICAgICAgaWYgKCFtb3ZlQnJhaWxsZVdpbmRvd0xlZnQoMSkpIGFsZXJ0KEFMRVJUX0JPVU5DRSk7CisgICAgICBicmVhazsKKyAgICBjYXNlIEJSTF9DTURfQ0hSUlQ6CisgICAgICBpZiAoIW1vdmVCcmFpbGxlV2luZG93UmlnaHQoMSkpIGFsZXJ0KEFMRVJUX0JPVU5DRSk7CisgICAgICBicmVhazsKKworICAgIGNhc2UgQlJMX0NNRF9IV0lOTFQ6CisgICAgICBpZiAoIXNoaWZ0QnJhaWxsZVdpbmRvd0xlZnQoaGFsZldpbmRvd1NoaWZ0KSkgYWxlcnQoQUxFUlRfQk9VTkNFKTsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBCUkxfQ01EX0hXSU5SVDoKKyAgICAgIGlmICghc2hpZnRCcmFpbGxlV2luZG93UmlnaHQoaGFsZldpbmRvd1NoaWZ0KSkgYWxlcnQoQUxFUlRfQk9VTkNFKTsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBCUkxfQ01EX1BSTkJXSU46CisgICAgICB0b1ByZXZpb3VzTm9uYmxhbmtXaW5kb3coKTsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBCUkxfQ01EX05YTkJXSU46CisgICAgICB0b05leHROb25ibGFua1dpbmRvdygpOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIEJSTF9DTURfRldJTkxUU0tJUDoKKyAgICAgIGlmIChwcmVmcy5za2lwQmxhbmtCcmFpbGxlV2luZG93c01vZGUgPT0gc2J3QWxsKSB7CisgICAgICAgIHRvUHJldmlvdXNOb25ibGFua1dpbmRvdygpOworICAgICAgICBicmVhazsKKyAgICAgIH0KKworICAgIHsKKyAgICAgIGludCBza2lwQmxhbmtCcmFpbGxlV2luZG93czsKKworICAgICAgc2tpcEJsYW5rQnJhaWxsZVdpbmRvd3MgPSAxOworICAgICAgZ290byBtb3ZlTGVmdDsKKworICAgIGNhc2UgQlJMX0NNRF9GV0lOTFQ6CisgICAgICBza2lwQmxhbmtCcmFpbGxlV2luZG93cyA9IDA7CisgICAgICBnb3RvIG1vdmVMZWZ0OworCisgICAgbW92ZUxlZnQ6CisgICAgICB7CisgICAgICAgIGludCBvbGRYID0gc2VzLT53aW54OworCisgICAgICAgIGlmIChzaGlmdEJyYWlsbGVXaW5kb3dMZWZ0KGZ1bGxXaW5kb3dTaGlmdCkpIHsKKyAgICAgICAgICBpZiAoc2tpcEJsYW5rQnJhaWxsZVdpbmRvd3MpIHsKKyAgICAgICAgICAgIGlmIChwcmVmcy5za2lwQmxhbmtCcmFpbGxlV2luZG93c01vZGUgPT0gc2J3RW5kT2ZMaW5lKSBnb3RvIHNraXBFbmRPZkxpbmU7CisgICAgICAgICAgICBpbnQgY2hhckNvdW50ID0gTUlOKHNjci5jb2xzLCBzZXMtPndpbngrdGV4dENvdW50KTsKKworICAgICAgICAgICAgaWYgKCFzaG93U2NyZWVuQ3Vyc29yKCkgfHwKKyAgICAgICAgICAgICAgICAoc2NyLnBvc3kgIT0gc2VzLT53aW55KSB8fAorICAgICAgICAgICAgICAgIChzY3IucG9zeCA8IDApIHx8CisgICAgICAgICAgICAgICAgKHNjci5wb3N4ID49IGNoYXJDb3VudCkpIHsKKyAgICAgICAgICAgICAgaW50IGNoYXJJbmRleDsKKyAgICAgICAgICAgICAgU2NyZWVuQ2hhcmFjdGVyIGNoYXJhY3RlcnNbY2hhckNvdW50XTsKKworICAgICAgICAgICAgICByZWFkU2NyZWVuUm93KHNlcy0+d2lueSwgY2hhckNvdW50LCBjaGFyYWN0ZXJzKTsKKworICAgICAgICAgICAgICBmb3IgKGNoYXJJbmRleD0wOyBjaGFySW5kZXg8Y2hhckNvdW50OyBjaGFySW5kZXgrPTEpIHsKKyAgICAgICAgICAgICAgICB3Y2hhcl90IHRleHQgPSBjaGFyYWN0ZXJzW2NoYXJJbmRleF0udGV4dDsKKworICAgICAgICAgICAgICAgIGlmICh0ZXh0ICE9IFdDX0MoJyAnKSkgYnJlYWs7CisgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICBpZiAoY2hhckluZGV4ID09IGNoYXJDb3VudCkgZ290byB3cmFwVXA7CisgICAgICAgICAgICB9CisgICAgICAgICAgfQorCisgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgd3JhcFVwOgorICAgICAgICBpZiAoc2VzLT53aW55ID09IDApIHsKKyAgICAgICAgICBzZXMtPndpbnggPSBvbGRYOworICAgICAgICAgIGFsZXJ0KEFMRVJUX0JPVU5DRSk7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBhbGVydChBTEVSVF9XUkFQX1VQKTsKKyAgICAgICAgdXBMaW5lKGlzU2FtZVRleHQpOworICAgICAgICBwbGFjZUJyYWlsbGVXaW5kb3dSaWdodCgpOworCisgICAgICBza2lwRW5kT2ZMaW5lOgorICAgICAgICBpZiAoc2tpcEJsYW5rQnJhaWxsZVdpbmRvd3MgJiYgKHByZWZzLnNraXBCbGFua0JyYWlsbGVXaW5kb3dzTW9kZSA9PSBzYndFbmRPZkxpbmUpKSB7CisgICAgICAgICAgU2NyZWVuQ2hhcmFjdGVyIGNoYXJhY3RlcnNbc2NyLmNvbHNdOworICAgICAgICAgIHJlYWRTY3JlZW5Sb3coc2VzLT53aW55LCBzY3IuY29scywgY2hhcmFjdGVycyk7CisgICAgICAgICAgaW50IGxhc3QgPSBzY3IuY29sczsKKworICAgICAgICAgIHdoaWxlIChsYXN0ID4gMCkgeworICAgICAgICAgICAgaWYgKCFpc1dvcmRCcmVhayhjaGFyYWN0ZXJzLCAtLWxhc3QpKSBicmVhazsKKyAgICAgICAgICB9CisKKyAgICAgICAgICBpZiAoc2VzLT53aW54ID4gbGFzdCkgcGxhY2VSaWdodEVkZ2UobGFzdCk7CisgICAgICAgIH0KKworICAgICAgICBpZiAocHJlZnMud29yZFdyYXApIHNldFdvcmRXcmFwU3RhcnQoc2VzLT53aW54KTsKKyAgICAgIH0KKworICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBCUkxfQ01EX0ZXSU5SVFNLSVA6CisgICAgICBpZiAocHJlZnMuc2tpcEJsYW5rQnJhaWxsZVdpbmRvd3NNb2RlID09IHNid0FsbCkgeworICAgICAgICB0b05leHROb25ibGFua1dpbmRvdygpOworICAgICAgICBicmVhazsKKyAgICAgIH0KKworICAgIHsKKyAgICAgIGludCBza2lwQmxhbmtCcmFpbGxlV2luZG93czsKKworICAgICAgc2tpcEJsYW5rQnJhaWxsZVdpbmRvd3MgPSAxOworICAgICAgZ290byBtb3ZlUmlnaHQ7CisKKyAgICBjYXNlIEJSTF9DTURfRldJTlJUOgorICAgICAgc2tpcEJsYW5rQnJhaWxsZVdpbmRvd3MgPSAwOworICAgICAgZ290byBtb3ZlUmlnaHQ7CisKKyAgICBtb3ZlUmlnaHQ6CisgICAgICB7CisgICAgICAgIGludCBvbGRYID0gc2VzLT53aW54OworCisgICAgICAgIGlmIChzaGlmdEJyYWlsbGVXaW5kb3dSaWdodChmdWxsV2luZG93U2hpZnQpKSB7CisgICAgICAgICAgaWYgKHNraXBCbGFua0JyYWlsbGVXaW5kb3dzKSB7CisgICAgICAgICAgICBpZiAoIXNob3dTY3JlZW5DdXJzb3IoKSB8fAorICAgICAgICAgICAgICAgIChzY3IucG9zeSAhPSBzZXMtPndpbnkpIHx8CisgICAgICAgICAgICAgICAgKHNjci5wb3N4IDwgc2VzLT53aW54KSkgeworICAgICAgICAgICAgICBpbnQgY2hhckNvdW50ID0gc2NyLmNvbHMgLSBzZXMtPndpbng7CisgICAgICAgICAgICAgIGludCBjaGFySW5kZXg7CisgICAgICAgICAgICAgIFNjcmVlbkNoYXJhY3RlciBjaGFyYWN0ZXJzW2NoYXJDb3VudF07CisKKyAgICAgICAgICAgICAgcmVhZFNjcmVlbihzZXMtPndpbngsIHNlcy0+d2lueSwgY2hhckNvdW50LCAxLCBjaGFyYWN0ZXJzKTsKKworICAgICAgICAgICAgICBmb3IgKGNoYXJJbmRleD0wOyBjaGFySW5kZXg8Y2hhckNvdW50OyBjaGFySW5kZXgrPTEpIHsKKyAgICAgICAgICAgICAgICB3Y2hhcl90IHRleHQgPSBjaGFyYWN0ZXJzW2NoYXJJbmRleF0udGV4dDsKKworICAgICAgICAgICAgICAgIGlmICh0ZXh0ICE9IFdDX0MoJyAnKSkgYnJlYWs7CisgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICBpZiAoY2hhckluZGV4ID09IGNoYXJDb3VudCkgZ290byB3cmFwRG93bjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9CisKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICB3cmFwRG93bjoKKyAgICAgICAgaWYgKHNlcy0+d2lueSA+PSAoc2NyLnJvd3MgLSBicmwudGV4dFJvd3MpKSB7CisgICAgICAgICAgc2VzLT53aW54ID0gb2xkWDsKKworICAgICAgICAgIGFsZXJ0KEFMRVJUX0JPVU5DRSk7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBhbGVydChBTEVSVF9XUkFQX0RPV04pOworICAgICAgICBkb3duTGluZShpc1NhbWVUZXh0KTsKKyAgICAgICAgc2VzLT53aW54ID0gMDsKKyAgICAgIH0KKworICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBCUkxfQ01EX1JFVFVSTjoKKyAgICAgIGlmICgoc2VzLT53aW54ICE9IHNlcy0+bW90eCkgfHwgKHNlcy0+d2lueSAhPSBzZXMtPm1vdHkpKSBnb3RvIGRvQmFjazsKKyAgICAgIC8qIGZhbGwgdGhyb3VnaCAqLworICAgIGNhc2UgQlJMX0NNRF9IT01FOgorICAgICAgaWYgKCF0cmFja1NjcmVlbkN1cnNvcigxKSkgYWxlcnQoQUxFUlRfQ09NTUFORF9SRUpFQ1RFRCk7CisgICAgICBicmVhazsKKworICAgIGRvQmFjazoKKyAgICBjYXNlIEJSTF9DTURfQkFDSzoKKyAgICAgIHNlcy0+d2lueCA9IHNlcy0+bW90eDsKKyAgICAgIHNlcy0+d2lueSA9IHNlcy0+bW90eTsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBCUkxfQ01EX0NTUkpNUF9WRVJUOiB7CisgICAgICBpZiAoIXN0YXJ0U2NyZWVuQ3Vyc29yUm91dGluZygtMSwgc2VzLT53aW55KSkgeworICAgICAgICBhbGVydChBTEVSVF9DT01NQU5EX1JFSkVDVEVEKTsKKyAgICAgIH0KKworICAgICAgYnJlYWs7CisgICAgfQorCisgICAgZGVmYXVsdDogeworICAgICAgaW50IGJsayA9IGNvbW1hbmQgJiBCUkxfTVNLX0JMSzsKKyAgICAgIGludCBhcmcgPSBjb21tYW5kICYgQlJMX01TS19BUkc7CisgICAgICBpbnQgZmxhZ3MgPSBjb21tYW5kICYgQlJMX01TS19GTEc7CisKKyAgICAgIHN3aXRjaCAoYmxrKSB7CisgICAgICAgIGNhc2UgQlJMX0NNRF9CTEsoUk9VVEUpOiB7CisgICAgICAgICAgaW50IGNvbHVtbiwgcm93OworCisgICAgICAgICAgaWYgKGdldENoYXJhY3RlckNvb3JkaW5hdGVzKGFyZywgJnJvdywgJmNvbHVtbiwgTlVMTCwgMSkpIHsKKyAgICAgICAgICAgIGlmIChzdGFydFNjcmVlbkN1cnNvclJvdXRpbmcoY29sdW1uLCByb3cpKSB7CisgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgIH0KKworICAgICAgICAgIGFsZXJ0KEFMRVJUX0NPTU1BTkRfUkVKRUNURUQpOworICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgY2FzZSBCUkxfQ01EX0JMSyhST1VURV9MSU5FKTogeworICAgICAgICAgIGlmICghc3RhcnRTY3JlZW5DdXJzb3JSb3V0aW5nKC0xLCBhcmcpKSB7CisgICAgICAgICAgICBhbGVydChBTEVSVF9DT01NQU5EX1JFSkVDVEVEKTsKKyAgICAgICAgICB9CisKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGNhc2UgQlJMX0NNRF9CTEsoU0VUTEVGVCk6IHsKKyAgICAgICAgICBpbnQgY29sdW1uLCByb3c7CisKKyAgICAgICAgICBpZiAoZ2V0Q2hhcmFjdGVyQ29vcmRpbmF0ZXMoYXJnLCAmcm93LCAmY29sdW1uLCBOVUxMLCAwKSkgeworICAgICAgICAgICAgc2VzLT53aW54ID0gY29sdW1uOworICAgICAgICAgICAgc2VzLT53aW55ID0gcm93OworICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBhbGVydChBTEVSVF9DT01NQU5EX1JFSkVDVEVEKTsKKyAgICAgICAgICB9CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBjYXNlIEJSTF9DTURfQkxLKEdPVE9MSU5FKToKKyAgICAgICAgICBpZiAoZmxhZ3MgJiBCUkxfRkxHX01PVElPTl9TQ0FMRUQpIHsKKyAgICAgICAgICAgIGFyZyA9IHJlc2NhbGVJbnRlZ2VyKGFyZywgQlJMX01TS19BUkcsIHNjci5yb3dzLTEpOworICAgICAgICAgIH0KKyAgICAgICAgICBpZiAoYXJnIDwgc2NyLnJvd3MpIHsKKyAgICAgICAgICAgIHNsaWRlQnJhaWxsZVdpbmRvd1ZlcnRpY2FsbHkoYXJnKTsKKyAgICAgICAgICAgIG9sZHdpbnkgPSAtMTsKKyAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgYWxlcnQoQUxFUlRfQ09NTUFORF9SRUpFQ1RFRCk7CisgICAgICAgICAgfQorICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgQlJMX0NNRF9CTEsoU0VUTUFSSyk6IHsKKyAgICAgICAgICBTY3JlZW5Mb2NhdGlvbiAqbWFyayA9ICZzZXMtPm1hcmtzW2FyZ107CisgICAgICAgICAgbWFyay0+Y29sdW1uID0gc2VzLT53aW54OworICAgICAgICAgIG1hcmstPnJvdyA9IHNlcy0+d2lueTsKKyAgICAgICAgICBhbGVydChBTEVSVF9NQVJLX1NFVCk7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBCUkxfQ01EX0JMSyhHT1RPTUFSSyk6IHsKKyAgICAgICAgICBTY3JlZW5Mb2NhdGlvbiAqbWFyayA9ICZzZXMtPm1hcmtzW2FyZ107CisgICAgICAgICAgc2VzLT53aW54ID0gbWFyay0+Y29sdW1uOworICAgICAgICAgIHNlcy0+d2lueSA9IG1hcmstPnJvdzsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIHsKKyAgICAgICAgICBpbnQgY29sdW1uLCByb3c7CisgICAgICAgICAgaW50IGluY3JlbWVudDsKKworICAgICAgICBjYXNlIEJSTF9DTURfQkxLKFBSSU5ERU5UKToKKyAgICAgICAgICBpbmNyZW1lbnQgPSAtMTsKKyAgICAgICAgICBnb3RvIGZpbmRJbmRlbnQ7CisKKyAgICAgICAgY2FzZSBCUkxfQ01EX0JMSyhOWElOREVOVCk6CisgICAgICAgICAgaW5jcmVtZW50ID0gMTsKKworICAgICAgICBmaW5kSW5kZW50OgorICAgICAgICAgIGlmIChnZXRDaGFyYWN0ZXJDb29yZGluYXRlcyhhcmcsICZyb3csICZjb2x1bW4sIE5VTEwsIDApKSB7CisgICAgICAgICAgICBzZXMtPndpbnkgPSByb3c7CisgICAgICAgICAgICBmaW5kUm93KGNvbHVtbiwgaW5jcmVtZW50LCB0ZXN0SW5kZW50LCBOVUxMKTsKKyAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgYWxlcnQoQUxFUlRfQ09NTUFORF9SRUpFQ1RFRCk7CisgICAgICAgICAgfQorICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgY2FzZSBCUkxfQ01EX0JMSyhQUkRJRkNIQVIpOiB7CisgICAgICAgICAgaW50IGNvbHVtbiwgcm93OworCisgICAgICAgICAgaWYgKGdldENoYXJhY3RlckNvb3JkaW5hdGVzKGFyZywgJnJvdywgJmNvbHVtbiwgTlVMTCwgMCkpIHsKKyAgICAgICAgICAgIHNlcy0+d2lueSA9IHJvdzsKKyAgICAgICAgICAgIHVwRGlmZmVyZW50Q2hhcmFjdGVyKGlzU2FtZVRleHQsIGNvbHVtbik7CisgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGFsZXJ0KEFMRVJUX0NPTU1BTkRfUkVKRUNURUQpOworICAgICAgICAgIH0KKyAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGNhc2UgQlJMX0NNRF9CTEsoTlhESUZDSEFSKTogeworICAgICAgICAgIGludCBjb2x1bW4sIHJvdzsKKworICAgICAgICAgIGlmIChnZXRDaGFyYWN0ZXJDb29yZGluYXRlcyhhcmcsICZyb3csICZjb2x1bW4sIE5VTEwsIDApKSB7CisgICAgICAgICAgICBzZXMtPndpbnkgPSByb3c7CisgICAgICAgICAgICBkb3duRGlmZmVyZW50Q2hhcmFjdGVyKGlzU2FtZVRleHQsIGNvbHVtbik7CisgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGFsZXJ0KEFMRVJUX0NPTU1BTkRfUkVKRUNURUQpOworICAgICAgICAgIH0KKyAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgcmV0dXJuIDA7CisgICAgICB9CisKKyAgICAgIGJyZWFrOworICAgIH0KKyAgfQorCisgIGlmIChzZXMtPndpbnkgIT0gb2xkd2lueSkgeworICAgIGlmIChjb21tYW5kICYgQlJMX0ZMR19NT1RJT05fVE9MRUZUKSB7CisgICAgICBzZXMtPndpbnggPSAwOworICAgIH0KKyAgfQorCisgIGNhbmNlbERlbGF5ZWRDdXJzb3JUcmFja2luZ0FsYXJtKCk7CisgIHJldHVybiAxOworfQorCitpbnQKK2FkZE5hdmlnYXRpb25Db21tYW5kcyAodm9pZCkgeworICByZXR1cm4gcHVzaENvbW1hbmRIYW5kbGVyKCJuYXZpZ2F0aW9uIiwgS1RCX0NUWF9ERUZBVUxULAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZU5hdmlnYXRpb25Db21tYW5kcywgTlVMTCwgTlVMTCk7Cit9CmRpZmYgLS1naXQgYS9Qcm9ncmFtcy9jbWRfbmF2aWdhdGlvbi5oIGIvUHJvZ3JhbXMvY21kX25hdmlnYXRpb24uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NzZjZTI5Ci0tLSAvZGV2L251bGwKKysrIGIvUHJvZ3JhbXMvY21kX25hdmlnYXRpb24uaApAQCAtMCwwICsxLDM0IEBACisvKgorICogQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyAqICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyAqCisgKiBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorICoKKyAqIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyAqCisgKiBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisgKi8KKworI2lmbmRlZiBCUkxUVFlfSU5DTFVERURfQ01EX05BVklHQVRJT04KKyNkZWZpbmUgQlJMVFRZX0lOQ0xVREVEX0NNRF9OQVZJR0FUSU9OCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYgLyogX19jcGx1c3BsdXMgKi8KKworZXh0ZXJuIGludCBhZGROYXZpZ2F0aW9uQ29tbWFuZHMgKHZvaWQpOworCitleHRlcm4gaW50IGFkZFByb21wdFBhdHRlcm4gKGNvbnN0IGNoYXIgKnN0cmluZyk7CisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmIC8qIF9fY3BsdXNwbHVzICovCisKKyNlbmRpZiAvKiBCUkxUVFlfSU5DTFVERURfQ01EX05BVklHQVRJT04gKi8KZGlmZiAtLWdpdCBhL1Byb2dyYW1zL2NtZF9vdmVycmlkZS5jIGIvUHJvZ3JhbXMvY21kX292ZXJyaWRlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGYyMzgwNQotLS0gL2Rldi9udWxsCisrKyBiL1Byb2dyYW1zL2NtZF9vdmVycmlkZS5jCkBAIC0wLDAgKzEsMjA1IEBACisvKgorICogQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyAqICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyAqCisgKiBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorICoKKyAqIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyAqCisgKiBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisgKi8KKworI2luY2x1ZGUgInByb2xvZ3VlLmgiCisKKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworI2luY2x1ZGUgImxvZy5oIgorI2luY2x1ZGUgImFsZXJ0LmgiCisjaW5jbHVkZSAiY21kX3F1ZXVlLmgiCisjaW5jbHVkZSAiY21kX292ZXJyaWRlLmgiCisjaW5jbHVkZSAiY21kX3V0aWxzLmgiCisjaW5jbHVkZSAiYnJsX2NtZHMuaCIKKyNpbmNsdWRlICJzY3IuaCIKKyNpbmNsdWRlICJwcmVmcy5oIgorI2luY2x1ZGUgImNvcmUuaCIKKwordHlwZWRlZiBzdHJ1Y3QgeworICBpbnQgcm93OworCisgIHN0cnVjdCB7CisgICAgaW50IGZpcnN0OworICAgIGludCBsYXN0OworICB9IGNvbHVtbjsKK30gU2VsZWN0aW9uRW5kcG9pbnQ7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgc3RydWN0IHsKKyAgICBTZWxlY3Rpb25FbmRwb2ludCBzdGFydDsKKyAgICBTZWxlY3Rpb25FbmRwb2ludCBlbmQ7CisgICAgdW5zaWduZWQgY2hhciBzdGFydGVkOjE7CisgIH0gc2VsZWN0aW9uOworfSBPdmVycmlkZUNvbW1hbmREYXRhOworCitzdGF0aWMgaW50CitnZXRTZWxlY3Rpb25FbmRwb2ludCAoaW50IGFyZywgU2VsZWN0aW9uRW5kcG9pbnQgKmVuZHBvaW50KSB7CisgIHJldHVybiBnZXRDaGFyYWN0ZXJDb29yZGluYXRlcyhhcmcsICZlbmRwb2ludC0+cm93LCAmZW5kcG9pbnQtPmNvbHVtbi5maXJzdCwgJmVuZHBvaW50LT5jb2x1bW4ubGFzdCwgMCk7Cit9CisKK3N0YXRpYyBpbnQKK2NvbXBhcmVTZWxlY3Rpb25FbmRwb2ludHMgKGNvbnN0IFNlbGVjdGlvbkVuZHBvaW50ICplbmRwb2ludDEsIGNvbnN0IFNlbGVjdGlvbkVuZHBvaW50ICplbmRwb2ludDIpIHsKKyAgaWYgKGVuZHBvaW50MS0+cm93IDwgZW5kcG9pbnQyLT5yb3cpIHJldHVybiAtMTsKKyAgaWYgKGVuZHBvaW50MS0+cm93ID4gZW5kcG9pbnQyLT5yb3cpIHJldHVybiAxOworCisgIGlmIChlbmRwb2ludDEtPmNvbHVtbi5maXJzdCA8IGVuZHBvaW50Mi0+Y29sdW1uLmZpcnN0KSByZXR1cm4gLTE7CisgIGlmIChlbmRwb2ludDEtPmNvbHVtbi5maXJzdCA+IGVuZHBvaW50Mi0+Y29sdW1uLmZpcnN0KSByZXR1cm4gMTsKKworICByZXR1cm4gMDsKK30KKworc3RhdGljIGludAorc2V0U2VsZWN0aW9uIChjb25zdCBTZWxlY3Rpb25FbmRwb2ludCAqc3RhcnQsIGNvbnN0IFNlbGVjdGlvbkVuZHBvaW50ICplbmQsIE92ZXJyaWRlQ29tbWFuZERhdGEgKm9jZCkgeworICB7CisgICAgY29uc3QgU2VsZWN0aW9uRW5kcG9pbnQgKmZyb20gPSBzdGFydDsKKyAgICBjb25zdCBTZWxlY3Rpb25FbmRwb2ludCAqdG8gPSBlbmQ7CisKKyAgICBpZiAoY29tcGFyZVNlbGVjdGlvbkVuZHBvaW50cyhmcm9tLCB0bykgPiAwKSB7CisgICAgICBjb25zdCBTZWxlY3Rpb25FbmRwb2ludCAqdGVtcCA9IGZyb207CisgICAgICBmcm9tID0gdG87CisgICAgICB0byA9IHRlbXA7CisgICAgfQorCisgICAgaWYgKCFzZXRTY3JlZW5UZXh0U2VsZWN0aW9uKGZyb20tPmNvbHVtbi5maXJzdCwgZnJvbS0+cm93LCB0by0+Y29sdW1uLmxhc3QsIHRvLT5yb3cpKSB7CisgICAgICByZXR1cm4gMDsKKyAgICB9CisgIH0KKworICBvY2QtPnNlbGVjdGlvbi5zdGFydCA9ICpzdGFydDsKKyAgb2NkLT5zZWxlY3Rpb24uZW5kID0gKmVuZDsKKyAgcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQKK3N0YXJ0U2VsZWN0aW9uIChjb25zdCBTZWxlY3Rpb25FbmRwb2ludCAqc3RhcnQsIE92ZXJyaWRlQ29tbWFuZERhdGEgKm9jZCkgeworICByZXR1cm4gc2V0U2VsZWN0aW9uKHN0YXJ0LCBzdGFydCwgb2NkKTsKK30KKworc3RhdGljIGludAoraGFuZGxlT3ZlcnJpZGVDb21tYW5kcyAoaW50IGNvbW1hbmQsIHZvaWQgKmRhdGEpIHsKKyAgT3ZlcnJpZGVDb21tYW5kRGF0YSAqb2NkID0gZGF0YTsKKyAgaWYgKCFzY3IuaGFzU2VsZWN0aW9uKSBvY2QtPnNlbGVjdGlvbi5zdGFydGVkID0gMDsKKworICBzd2l0Y2ggKGNvbW1hbmQgJiBCUkxfTVNLX0NNRCkgeworICAgIGNhc2UgQlJMX0NNRF9UWFRTRUxfQ0xFQVI6IHsKKyAgICAgIGlmIChjbGVhclNjcmVlblRleHRTZWxlY3Rpb24oKSkgeworICAgICAgICBvY2QtPnNlbGVjdGlvbi5zdGFydGVkID0gMDsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIGFsZXJ0KEFMRVJUX0NPTU1BTkRfUkVKRUNURUQpOworICAgICAgfQorCisgICAgICBicmVhazsKKyAgICB9CisKKyAgICBkZWZhdWx0OiB7CisgICAgICBpbnQgYmxrID0gY29tbWFuZCAmIEJSTF9NU0tfQkxLOworICAgICAgaW50IGFyZyA9IGNvbW1hbmQgJiBCUkxfTVNLX0FSRzsKKyAgICAgIGludCBleHQgPSBCUkxfQ09ERV9HRVQoRVhULCBjb21tYW5kKTsKKworICAgICAgc3dpdGNoIChibGspIHsKKyAgICAgICAgY2FzZSBCUkxfQ01EX0JMSyhUWFRTRUxfU0VUKTogeworICAgICAgICAgIGlmIChleHQgPiBhcmcpIHsKKyAgICAgICAgICAgIFNlbGVjdGlvbkVuZHBvaW50IHN0YXJ0OworCisgICAgICAgICAgICBpZiAoZ2V0U2VsZWN0aW9uRW5kcG9pbnQoYXJnLCAmc3RhcnQpKSB7CisgICAgICAgICAgICAgIFNlbGVjdGlvbkVuZHBvaW50IGVuZDsKKworICAgICAgICAgICAgICBpZiAoZ2V0U2VsZWN0aW9uRW5kcG9pbnQoZXh0LCAmZW5kKSkgeworICAgICAgICAgICAgICAgIGlmIChzZXRTZWxlY3Rpb24oJnN0YXJ0LCAmZW5kLCBvY2QpKSB7CisgICAgICAgICAgICAgICAgICBvY2QtPnNlbGVjdGlvbi5zdGFydGVkID0gMDsKKyAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgIH0KKworICAgICAgICAgIGFsZXJ0KEFMRVJUX0NPTU1BTkRfUkVKRUNURUQpOworICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgY2FzZSBCUkxfQ01EX0JMSyhUWFRTRUxfU1RBUlQpOiB7CisgICAgICAgICAgU2VsZWN0aW9uRW5kcG9pbnQgc3RhcnQ7CisKKyAgICAgICAgICBpZiAoZ2V0U2VsZWN0aW9uRW5kcG9pbnQoYXJnLCAmc3RhcnQpKSB7CisgICAgICAgICAgICBpZiAoc3RhcnRTZWxlY3Rpb24oJnN0YXJ0LCBvY2QpKSB7CisgICAgICAgICAgICAgIG9jZC0+c2VsZWN0aW9uLnN0YXJ0ZWQgPSAxOworICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9CisKKyAgICAgICAgICBhbGVydChBTEVSVF9DT01NQU5EX1JFSkVDVEVEKTsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGNhc2UgQlJMX0NNRF9CTEsoUk9VVEUpOiB7CisgICAgICAgICAgaWYgKCFvY2QtPnNlbGVjdGlvbi5zdGFydGVkICYmICFwcmVmcy5zdGFydFNlbGVjdGlvbldpdGhSb3V0aW5nS2V5KSByZXR1cm4gMDsKKyAgICAgICAgICBTZWxlY3Rpb25FbmRwb2ludCBlbmRwb2ludDsKKworICAgICAgICAgIGlmIChnZXRTZWxlY3Rpb25FbmRwb2ludChhcmcsICZlbmRwb2ludCkpIHsKKyAgICAgICAgICAgIGlmIChvY2QtPnNlbGVjdGlvbi5zdGFydGVkKSB7OworICAgICAgICAgICAgICBpZiAoc2V0U2VsZWN0aW9uKCZvY2QtPnNlbGVjdGlvbi5zdGFydCwgJmVuZHBvaW50LCBvY2QpKSBicmVhazsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoKGVuZHBvaW50LnJvdyAhPSBzY3IucG9zeSkgfHwgISgoZW5kcG9pbnQuY29sdW1uLmZpcnN0IDw9IHNjci5wb3N4KSAmJiAoc2NyLnBvc3ggPD0gZW5kcG9pbnQuY29sdW1uLmxhc3QpKSkgeworICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoc3RhcnRTZWxlY3Rpb24oJmVuZHBvaW50LCBvY2QpKSB7CisgICAgICAgICAgICAgIG9jZC0+c2VsZWN0aW9uLnN0YXJ0ZWQgPSAxOworICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9CisKKyAgICAgICAgICBhbGVydChBTEVSVF9DT01NQU5EX1JFSkVDVEVEKTsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgcmV0dXJuIDA7CisgICAgICB9CisKKyAgICAgIGJyZWFrOworICAgIH0KKyAgfQorCisgIHJldHVybiAxOworfQorCitzdGF0aWMgdm9pZAorZGVzdHJveU92ZXJyaWRlQ29tbWFuZERhdGEgKHZvaWQgKmRhdGEpIHsKKyAgT3ZlcnJpZGVDb21tYW5kRGF0YSAqb2NkID0gZGF0YTsKKyAgZnJlZShvY2QpOworfQorCitpbnQKK2FkZE92ZXJyaWRlQ29tbWFuZHMgKHZvaWQpIHsKKyAgT3ZlcnJpZGVDb21tYW5kRGF0YSAqb2NkOworCisgIGlmICgob2NkID0gbWFsbG9jKHNpemVvZigqb2NkKSkpKSB7CisgICAgbWVtc2V0KG9jZCwgMCwgc2l6ZW9mKCpvY2QpKTsKKworICAgIG9jZC0+c2VsZWN0aW9uLnN0YXJ0ZWQgPSAwOworCisgICAgaWYgKHB1c2hDb21tYW5kSGFuZGxlcigib3ZlcnJpZGUiLCBLVEJfQ1RYX0RFRkFVTFQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVPdmVycmlkZUNvbW1hbmRzLCBkZXN0cm95T3ZlcnJpZGVDb21tYW5kRGF0YSwgb2NkKSkgeworICAgICAgcmV0dXJuIDE7CisgICAgfQorCisgICAgZnJlZShvY2QpOworICB9IGVsc2UgeworICAgIGxvZ01hbGxvY0Vycm9yKCk7CisgIH0KKworICByZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL1Byb2dyYW1zL2NtZF9vdmVycmlkZS5oIGIvUHJvZ3JhbXMvY21kX292ZXJyaWRlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGI4ODc0ZgotLS0gL2Rldi9udWxsCisrKyBiL1Byb2dyYW1zL2NtZF9vdmVycmlkZS5oCkBAIC0wLDAgKzEsMzIgQEAKKy8qCisgKiBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorICogICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorICoKKyAqIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorICoKKyAqIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyAqLworCisjaWZuZGVmIEJSTFRUWV9JTkNMVURFRF9DTURfT1ZFUlJJREUKKyNkZWZpbmUgQlJMVFRZX0lOQ0xVREVEX0NNRF9PVkVSUklERQorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmIC8qIF9fY3BsdXNwbHVzICovCisKK2V4dGVybiBpbnQgYWRkT3ZlcnJpZGVDb21tYW5kcyAodm9pZCk7CisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmIC8qIF9fY3BsdXNwbHVzICovCisKKyNlbmRpZiAvKiBCUkxUVFlfSU5DTFVERURfQ01EX09WRVJSSURFICovCmRpZmYgLS1naXQgYS9Qcm9ncmFtcy9jbWRfcHJlZmVyZW5jZXMuYyBiL1Byb2dyYW1zL2NtZF9wcmVmZXJlbmNlcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRhMWI2YmUKLS0tIC9kZXYvbnVsbAorKysgYi9Qcm9ncmFtcy9jbWRfcHJlZmVyZW5jZXMuYwpAQCAtMCwwICsxLDE5MSBAQAorLyoKKyAqIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisgKiAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisgKgorICogQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKKyNpbmNsdWRlICJwcm9sb2d1ZS5oIgorCisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKyNpbmNsdWRlICJsb2cuaCIKKyNpbmNsdWRlICJjbWRfcXVldWUuaCIKKyNpbmNsdWRlICJjbWRfcHJlZmVyZW5jZXMuaCIKKyNpbmNsdWRlICJicmxfY21kcy5oIgorI2luY2x1ZGUgInByZWZzLmgiCisjaW5jbHVkZSAibWVudS5oIgorI2luY2x1ZGUgIm1lbnVfcHJlZnMuaCIKKyNpbmNsdWRlICJzY3Jfc3BlY2lhbC5oIgorI2luY2x1ZGUgInNjcl9tZW51LmgiCisjaW5jbHVkZSAibWVzc2FnZS5oIgorI2luY2x1ZGUgImFsZXJ0LmgiCisjaW5jbHVkZSAiY29yZS5oIgorCit0eXBlZGVmIHN0cnVjdCB7CisgIFByZWZlcmVuY2VTZXR0aW5ncyBzYXZlZFByZWZlcmVuY2VzOworfSBQcmVmZXJlbmNlc0NvbW1hbmREYXRhOworCitzdGF0aWMgaW50CitzYXZlICh2b2lkKSB7CisgIGludCBzYXZlZCA9IHNhdmVQcmVmZXJlbmNlcygpOworCisgIGlmIChzYXZlZCkgeworICAgIGFsZXJ0KEFMRVJUX0NPTU1BTkRfRE9ORSk7CisgIH0gZWxzZSB7CisgICAgbWVzc2FnZShOVUxMLCBnZXR0ZXh0KCJub3Qgc2F2ZWQiKSwgMCk7CisgIH0KKworICByZXR1cm4gc2F2ZWQ7Cit9CisKK3N0YXRpYyBpbnQKK2hhbmRsZVByZWZlcmVuY2VzQ29tbWFuZHMgKGludCBjb21tYW5kLCB2b2lkICpkYXRhKSB7CisgIHN0YXRpYyBjb25zdCBjaGFyIG1vZGVTdHJpbmdfcHJlZmVyZW5jZXNbXSA9ICJwcmYiOworICBQcmVmZXJlbmNlc0NvbW1hbmREYXRhICpwY2QgPSBkYXRhOworCisgIHN3aXRjaCAoY29tbWFuZCAmIEJSTF9NU0tfQ01EKSB7CisgICAgY2FzZSBCUkxfQ01EX1BSRUZNRU5VOiB7CisgICAgICBpbnQgb2sgPSAwOworCisgICAgICBpZiAoaXNTcGVjaWFsU2NyZWVuKFNDUl9NRU5VKSkgeworICAgICAgICBpZiAocHJlZnMuc2F2ZU9uRXhpdCkgc2F2ZSgpOworICAgICAgICBkZWFjdGl2YXRlU3BlY2lhbFNjcmVlbihTQ1JfTUVOVSk7CisgICAgICAgIG9rID0gMTsKKyAgICAgIH0gZWxzZSBpZiAoYWN0aXZhdGVTcGVjaWFsU2NyZWVuKFNDUl9NRU5VKSkgeworICAgICAgICB1cGRhdGVMb2dNZXNzYWdlc1N1Ym1lbnUoKTsKKyAgICAgICAgdXBkYXRlU2Vzc2lvbkF0dHJpYnV0ZXMoKTsKKyAgICAgICAgcGNkLT5zYXZlZFByZWZlcmVuY2VzID0gcHJlZnM7CisgICAgICAgIG9rID0gMTsKKyAgICAgIH0KKworICAgICAgaWYgKG9rKSB7CisgICAgICAgIGluZm9Nb2RlID0gMDsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIGFsZXJ0KEFMRVJUX0NPTU1BTkRfUkVKRUNURUQpOworICAgICAgfQorCisgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIEJSTF9DTURfUFJFRlNBVkU6CisgICAgICBpZiAoaXNTcGVjaWFsU2NyZWVuKFNDUl9NRU5VKSkgeworICAgICAgICBzYXZlKCk7CisgICAgICAgIGRlYWN0aXZhdGVTcGVjaWFsU2NyZWVuKFNDUl9NRU5VKTsKKyAgICAgIH0gZWxzZSBpZiAoIXNhdmUoKSkgeworICAgICAgICBhbGVydChBTEVSVF9DT01NQU5EX1JFSkVDVEVEKTsKKyAgICAgIH0KKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBCUkxfQ01EX1BSRUZMT0FEOgorICAgICAgaWYgKGlzU3BlY2lhbFNjcmVlbihTQ1JfTUVOVSkpIHsKKyAgICAgICAgc2V0UHJlZmVyZW5jZXMoJnBjZC0+c2F2ZWRQcmVmZXJlbmNlcyk7CisgICAgICAgIG1lbnVTY3JlZW5VcGRhdGVkKCk7CisgICAgICAgIG1lc3NhZ2UobW9kZVN0cmluZ19wcmVmZXJlbmNlcywgZ2V0dGV4dCgiY2hhbmdlcyBkaXNjYXJkZWQiKSwgMCk7CisgICAgICB9IGVsc2UgaWYgKGxvYWRQcmVmZXJlbmNlcygwKSkgeworICAgICAgICBtZW51U2NyZWVuVXBkYXRlZCgpOworICAgICAgICBhbGVydChBTEVSVF9DT01NQU5EX0RPTkUpOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgYWxlcnQoQUxFUlRfQ09NTUFORF9SRUpFQ1RFRCk7CisgICAgICB9CisgICAgICBicmVhazsKKworICAgIGNhc2UgQlJMX0NNRF9QUkVGUkVTRVQ6CisgICAgICBpZiAobG9hZFByZWZlcmVuY2VzKDEpKSB7CisgICAgICAgIG1lbnVTY3JlZW5VcGRhdGVkKCk7CisgICAgICAgIGFsZXJ0KEFMRVJUX0NPTU1BTkRfRE9ORSk7CisgICAgICB9IGVsc2UgeworICAgICAgICBhbGVydChBTEVSVF9DT01NQU5EX1JFSkVDVEVEKTsKKyAgICAgIH0KKyAgICAgIGJyZWFrOworCisgICAgZGVmYXVsdDogeworICAgICAgaW50IGFyZyA9IGNvbW1hbmQgJiBCUkxfTVNLX0FSRzsKKworICAgICAgc3dpdGNoIChjb21tYW5kICYgQlJMX01TS19CTEspIHsKKyAgICAgICAgeworICAgICAgICAgIE1lbnVJdGVtICppdGVtOworCisgICAgICAgIGNhc2UgQlJMX0NNRF9CTEsoU0VUX1RFWFRfVEFCTEUpOgorICAgICAgICAgIGl0ZW0gPSBnZXRQcmVmZXJlbmNlc01lbnVJdGVtX3RleHRUYWJsZSgpOworICAgICAgICAgIGdvdG8gZG9TZXRNZW51SXRlbTsKKworICAgICAgICBjYXNlIEJSTF9DTURfQkxLKFNFVF9BVFRSSUJVVEVTX1RBQkxFKToKKyAgICAgICAgICBpdGVtID0gZ2V0UHJlZmVyZW5jZXNNZW51SXRlbV9hdHRyaWJ1dGVzVGFibGUoKTsKKyAgICAgICAgICBnb3RvIGRvU2V0TWVudUl0ZW07CisKKyAgICAgICAgY2FzZSBCUkxfQ01EX0JMSyhTRVRfQ09OVFJBQ1RJT05fVEFCTEUpOgorICAgICAgICAgIGl0ZW0gPSBnZXRQcmVmZXJlbmNlc01lbnVJdGVtX2NvbnRyYWN0aW9uVGFibGUoKTsKKyAgICAgICAgICBnb3RvIGRvU2V0TWVudUl0ZW07CisKKyAgICAgICAgY2FzZSBCUkxfQ01EX0JMSyhTRVRfS0VZQk9BUkRfVEFCTEUpOgorICAgICAgICAgIGl0ZW0gPSBnZXRQcmVmZXJlbmNlc01lbnVJdGVtX2tleWJvYXJkVGFibGUoKTsKKyAgICAgICAgICBnb3RvIGRvU2V0TWVudUl0ZW07CisKKyAgICAgICAgY2FzZSBCUkxfQ01EX0JMSyhTRVRfTEFOR1VBR0VfUFJPRklMRSk6CisgICAgICAgICAgaXRlbSA9IGdldFByZWZlcmVuY2VzTWVudUl0ZW1fbGFuZ3VhZ2VQcm9maWxlKCk7CisgICAgICAgICAgZ290byBkb1NldE1lbnVJdGVtOworCisgICAgICAgIGRvU2V0TWVudUl0ZW06CisgICAgICAgICAgaWYgKGl0ZW0pIHsKKyAgICAgICAgICAgIHVuc2lnbmVkIGludCBjb3VudCA9IGJybC50ZXh0Q29sdW1uczsKKworICAgICAgICAgICAgaWYgKGNvdW50IDw9IGFyZykgY291bnQgPSBhcmcgKyAxOworICAgICAgICAgICAgY2hhbmdlTWVudUl0ZW0oaXRlbSk7CisKKyAgICAgICAgICAgIGlmIChjaGFuZ2VNZW51U2V0dGluZ1NjYWxlZChnZXRNZW51SXRlbU1lbnUoaXRlbSksIGFyZywgY291bnQpKSB7CisgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgIH0KKworICAgICAgICAgIGFsZXJ0KEFMRVJUX0NPTU1BTkRfUkVKRUNURUQpOworICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICByZXR1cm4gMDsKKyAgICAgIH0KKworICAgICAgYnJlYWs7CisgICAgfQorICB9CisKKyAgcmV0dXJuIDE7Cit9CisKK3N0YXRpYyB2b2lkCitkZXN0cm95UHJlZmVyZW5jZXNDb21tYW5kRGF0YSAodm9pZCAqZGF0YSkgeworICBQcmVmZXJlbmNlc0NvbW1hbmREYXRhICpwY2QgPSBkYXRhOworICBmcmVlKHBjZCk7Cit9CisKK2ludAorYWRkUHJlZmVyZW5jZXNDb21tYW5kcyAodm9pZCkgeworICBQcmVmZXJlbmNlc0NvbW1hbmREYXRhICpwY2Q7CisKKyAgaWYgKChwY2QgPSBtYWxsb2Moc2l6ZW9mKCpwY2QpKSkpIHsKKyAgICBtZW1zZXQocGNkLCAwLCBzaXplb2YoKnBjZCkpOworCisgICAgaWYgKHB1c2hDb21tYW5kSGFuZGxlcigicHJlZmVyZW5jZXMiLCBLVEJfQ1RYX0RFRkFVTFQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVQcmVmZXJlbmNlc0NvbW1hbmRzLCBkZXN0cm95UHJlZmVyZW5jZXNDb21tYW5kRGF0YSwgcGNkKSkgeworICAgICAgcmV0dXJuIDE7CisgICAgfQorCisgICAgZnJlZShwY2QpOworICB9IGVsc2UgeworICAgIGxvZ01hbGxvY0Vycm9yKCk7CisgIH0KKworICByZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL1Byb2dyYW1zL2NtZF9wcmVmZXJlbmNlcy5oIGIvUHJvZ3JhbXMvY21kX3ByZWZlcmVuY2VzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjJiMjEyMAotLS0gL2Rldi9udWxsCisrKyBiL1Byb2dyYW1zL2NtZF9wcmVmZXJlbmNlcy5oCkBAIC0wLDAgKzEsMzIgQEAKKy8qCisgKiBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorICogICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorICoKKyAqIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorICoKKyAqIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyAqLworCisjaWZuZGVmIEJSTFRUWV9JTkNMVURFRF9DTURfUFJFRkVSRU5DRVMKKyNkZWZpbmUgQlJMVFRZX0lOQ0xVREVEX0NNRF9QUkVGRVJFTkNFUworCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmIC8qIF9fY3BsdXNwbHVzICovCisKK2V4dGVybiBpbnQgYWRkUHJlZmVyZW5jZXNDb21tYW5kcyAodm9pZCk7CisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmIC8qIF9fY3BsdXNwbHVzICovCisKKyNlbmRpZiAvKiBCUkxUVFlfSU5DTFVERURfQ01EX1BSRUZFUkVOQ0VTICovCmRpZmYgLS1naXQgYS9Qcm9ncmFtcy9jbWRfcXVldWUuYyBiL1Byb2dyYW1zL2NtZF9xdWV1ZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgzMmJkNDAKLS0tIC9kZXYvbnVsbAorKysgYi9Qcm9ncmFtcy9jbWRfcXVldWUuYwpAQCAtMCwwICsxLDQwNSBAQAorLyoKKyAqIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisgKiAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisgKgorICogQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKKyNpbmNsdWRlICJwcm9sb2d1ZS5oIgorCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworI2luY2x1ZGUgImxvZy5oIgorI2luY2x1ZGUgImNtZF9xdWV1ZS5oIgorI2luY2x1ZGUgImNtZF9lbnF1ZXVlLmgiCisjaW5jbHVkZSAiY21kX3V0aWxzLmgiCisjaW5jbHVkZSAiYnJsX2NtZHMuaCIKKyNpbmNsdWRlICJjbWQuaCIKKyNpbmNsdWRlICJxdWV1ZS5oIgorI2luY2x1ZGUgImFzeW5jX2hhbmRsZS5oIgorI2luY2x1ZGUgImFzeW5jX2FsYXJtLmgiCisjaW5jbHVkZSAicHJlZnMuaCIKKyNpbmNsdWRlICJrdGJfdHlwZXMuaCIKKyNpbmNsdWRlICJzY3IuaCIKKyNpbmNsdWRlICJjb3JlLmgiCisKKyNkZWZpbmUgTE9HX0xFVkVMIExPR19ERUJVRworCit0eXBlZGVmIHN0cnVjdCBDb21tYW5kRW52aXJvbm1lbnRTdHJ1Y3QgQ29tbWFuZEVudmlyb25tZW50OwordHlwZWRlZiBzdHJ1Y3QgQ29tbWFuZEhhbmRsZXJMZXZlbFN0cnVjdCBDb21tYW5kSGFuZGxlckxldmVsOworCitzdHJ1Y3QgQ29tbWFuZEhhbmRsZXJMZXZlbFN0cnVjdCB7CisgIENvbW1hbmRIYW5kbGVyTGV2ZWwgKnByZXZpb3VzTGV2ZWw7CisgIGNvbnN0IGNoYXIgKmxldmVsTmFtZTsKKworICBDb21tYW5kSGFuZGxlciAqaGFuZGxlQ29tbWFuZDsKKyAgQ29tbWFuZERhdGFEZXN0cnVjdG9yICpkZXN0cm95RGF0YTsKKyAgdm9pZCAqaGFuZGxlckRhdGE7CisgIEtleVRhYmxlQ29tbWFuZENvbnRleHQgY29tbWFuZENvbnRleHQ7Cit9OworCitzdHJ1Y3QgQ29tbWFuZEVudmlyb25tZW50U3RydWN0IHsKKyAgQ29tbWFuZEVudmlyb25tZW50ICpwcmV2aW91c0Vudmlyb25tZW50OworICBjb25zdCBjaGFyICplbnZpcm9ubWVudE5hbWU7CisKKyAgQ29tbWFuZEhhbmRsZXJMZXZlbCAqaGFuZGxlclN0YWNrOworICBDb21tYW5kUHJlcHJvY2Vzc29yICpwcmVwcm9jZXNzQ29tbWFuZDsKKyAgQ29tbWFuZFBvc3Rwcm9jZXNzb3IgKnBvc3Rwcm9jZXNzQ29tbWFuZDsKKyAgdW5zaWduZWQgaGFuZGxpbmdDb21tYW5kOjE7Cit9OworCitzdGF0aWMgQ29tbWFuZEVudmlyb25tZW50ICpjb21tYW5kRW52aXJvbm1lbnRTdGFjayA9IE5VTEw7CitzdGF0aWMgdW5zaWduZWQgaW50IGNvbW1hbmRRdWV1ZVN1c3BlbmRDb3VudCA9IDA7CisKK3N0YXRpYyBDb21tYW5kSGFuZGxlckxldmVsICoqCitnZXRDb21tYW5kSGFuZGxlclRvcCAodm9pZCkgeworICBpZiAoIWNvbW1hbmRFbnZpcm9ubWVudFN0YWNrKSByZXR1cm4gTlVMTDsKKyAgcmV0dXJuICZjb21tYW5kRW52aXJvbm1lbnRTdGFjay0+aGFuZGxlclN0YWNrOworfQorCitLZXlUYWJsZUNvbW1hbmRDb250ZXh0CitnZXRDdXJyZW50Q29tbWFuZENvbnRleHQgKHZvaWQpIHsKKyAgQ29tbWFuZEhhbmRsZXJMZXZlbCAqKnRvcCA9IGdldENvbW1hbmRIYW5kbGVyVG9wKCk7CisgIEtleVRhYmxlQ29tbWFuZENvbnRleHQgY29udGV4dCA9IHRvcCAmJiAqdG9wPyAoKnRvcCktPmNvbW1hbmRDb250ZXh0OiBLVEJfQ1RYX0RFRkFVTFQ7CisKKyAgaWYgKGNvbnRleHQgPT0gS1RCX0NUWF9ERUZBVUxUKSBjb250ZXh0ID0gZ2V0U2NyZWVuQ29tbWFuZENvbnRleHQoKTsKKyAgcmV0dXJuIGNvbnRleHQ7Cit9CisKK3N0YXRpYyBpbnQKK3RvUHJlZmVycmVkQ29tbWFuZCAoaW50IGNvbW1hbmQpIHsKKyAgaW50IHByZWZlcnJlZCA9IGNvbW1hbmQ7CisKKyAgaW50IGNtZCA9IGNvbW1hbmQgJiBCUkxfTVNLX0NNRDsKKyAgaW50IGJsayA9IGNvbW1hbmQgJiBCUkxfTVNLX0JMSzsKKworICBpZiAoYmxrKSB7CisgIH0gZWxzZSB7CisgICAgaWYgKHByZWZzLnNraXBJZGVudGljYWxMaW5lcykgeworICAgICAgc3dpdGNoIChjbWQpIHsKKyAgICAgICAgY2FzZSBCUkxfQ01EX0xOVVA6CisgICAgICAgICAgcHJlZmVycmVkID0gQlJMX0NNRF9QUkRJRkxOOworICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgQlJMX0NNRF9MTkROOgorICAgICAgICAgIHByZWZlcnJlZCA9IEJSTF9DTURfTlhESUZMTjsKKyAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIEJSTF9DTURfUFJESUZMTjoKKyAgICAgICAgICBwcmVmZXJyZWQgPSBCUkxfQ01EX0xOVVA7CisgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBCUkxfQ01EX05YRElGTE46CisgICAgICAgICAgcHJlZmVycmVkID0gQlJMX0NNRF9MTkROOworICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgYnJlYWs7CisgICAgICB9CisgICAgfQorCisgICAgaWYgKHByZWZzLnNraXBCbGFua0JyYWlsbGVXaW5kb3dzKSB7CisgICAgICBzd2l0Y2ggKGNtZCkgeworICAgICAgICBjYXNlIEJSTF9DTURfRldJTkxUOgorICAgICAgICAgIHByZWZlcnJlZCA9IEJSTF9DTURfRldJTkxUU0tJUDsKKyAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIEJSTF9DTURfRldJTlJUOgorICAgICAgICAgIHByZWZlcnJlZCA9IEJSTF9DTURfRldJTlJUU0tJUDsKKyAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIEJSTF9DTURfRldJTkxUU0tJUDoKKyAgICAgICAgICBwcmVmZXJyZWQgPSBCUkxfQ01EX0ZXSU5MVDsKKyAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIEJSTF9DTURfRldJTlJUU0tJUDoKKyAgICAgICAgICBwcmVmZXJyZWQgPSBCUkxfQ01EX0ZXSU5SVDsKKyAgICAgICAgICBicmVhazsKKworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgIGJyZWFrOworICAgICAgfQorICAgIH0KKyAgfQorCisgIGlmIChwcmVmZXJyZWQgPT0gY29tbWFuZCkgeworICAgIGxvZ0NvbW1hbmQoY29tbWFuZCk7CisgIH0gZWxzZSB7CisgICAgcHJlZmVycmVkIHw9IChjb21tYW5kICYgfkJSTF9NU0tfQ01EKTsKKyAgICBsb2dUcmFuc2Zvcm1lZENvbW1hbmQoY29tbWFuZCwgcHJlZmVycmVkKTsKKyAgICBjb21tYW5kID0gcHJlZmVycmVkOworICB9CisKKyAgcmV0dXJuIGNvbW1hbmQ7Cit9CisKK2ludAoraGFuZGxlQ29tbWFuZCAoaW50IGNvbW1hbmQpIHsKKyAgY29uc3QgQ29tbWFuZEVudmlyb25tZW50ICplbnYgPSBjb21tYW5kRW52aXJvbm1lbnRTdGFjazsKKyAgY29uc3QgQ29tbWFuZEhhbmRsZXJMZXZlbCAqY2hsID0gZW52LT5oYW5kbGVyU3RhY2s7CisKKyAgd2hpbGUgKGNobCkgeworICAgIGlmIChjaGwtPmhhbmRsZUNvbW1hbmQoY29tbWFuZCwgY2hsLT5oYW5kbGVyRGF0YSkpIHJldHVybiAxOworICAgIGNobCA9IGNobC0+cHJldmlvdXNMZXZlbDsKKyAgfQorCisgIGxvZ01lc3NhZ2UoTE9HX1dBUk5JTkcsICIlczogJTA0WCIsIGdldHRleHQoInVuaGFuZGxlZCBjb21tYW5kIiksIGNvbW1hbmQpOworICByZXR1cm4gMDsKK30KKwordHlwZWRlZiBzdHJ1Y3QgeworICBpbnQgY29tbWFuZDsKK30gQ29tbWFuZFF1ZXVlSXRlbTsKKworc3RhdGljIHZvaWQKK2RlYWxsb2NhdGVDb21tYW5kUXVldWVJdGVtICh2b2lkICppdGVtLCB2b2lkICpkYXRhKSB7CisgIENvbW1hbmRRdWV1ZUl0ZW0gKmNtZCA9IGl0ZW07CisKKyAgZnJlZShjbWQpOworfQorCitzdGF0aWMgUXVldWUgKgorY3JlYXRlQ29tbWFuZFF1ZXVlICh2b2lkICpkYXRhKSB7CisgIHJldHVybiBuZXdRdWV1ZShkZWFsbG9jYXRlQ29tbWFuZFF1ZXVlSXRlbSwgTlVMTCk7Cit9CisKK3N0YXRpYyBRdWV1ZSAqCitnZXRDb21tYW5kUXVldWUgKGludCBjcmVhdGUpIHsKKyAgc3RhdGljIFF1ZXVlICpjb21tYW5kcyA9IE5VTEw7CisKKyAgcmV0dXJuIGdldFByb2dyYW1RdWV1ZSgmY29tbWFuZHMsICJjb21tYW5kLXF1ZXVlIiwgY3JlYXRlLAorICAgICAgICAgICAgICAgICAgICAgICAgIGNyZWF0ZUNvbW1hbmRRdWV1ZSwgTlVMTCk7Cit9CisKK3N0YXRpYyBpbnQKK2RlcXVldWVDb21tYW5kIChRdWV1ZSAqcXVldWUpIHsKKyAgQ29tbWFuZFF1ZXVlSXRlbSAqaXRlbTsKKworICBpZiAoKGl0ZW0gPSBkZXF1ZXVlSXRlbShxdWV1ZSkpKSB7CisgICAgaW50IGNvbW1hbmQgPSBpdGVtLT5jb21tYW5kOworCisgICAgZnJlZShpdGVtKTsKKyAgICBpdGVtID0gTlVMTDsKKworICAgIHJldHVybiBjb21tYW5kOworICB9CisKKyAgcmV0dXJuIEVPRjsKK30KKworc3RhdGljIHZvaWQgc2V0Q29tbWFuZEFsYXJtICh2b2lkICpkYXRhKTsKK3N0YXRpYyBBc3luY0hhbmRsZSBjb21tYW5kQWxhcm0gPSBOVUxMOworCitBU1lOQ19BTEFSTV9DQUxMQkFDSyhoYW5kbGVDb21tYW5kQWxhcm0pIHsKKyAgUXVldWUgKnF1ZXVlID0gZ2V0Q29tbWFuZFF1ZXVlKDApOworCisgIGFzeW5jRGlzY2FyZEhhbmRsZShjb21tYW5kQWxhcm0pOworICBjb21tYW5kQWxhcm0gPSBOVUxMOworCisgIGlmIChxdWV1ZSkgeworICAgIGludCBjb21tYW5kID0gZGVxdWV1ZUNvbW1hbmQocXVldWUpOworCisgICAgaWYgKGNvbW1hbmQgIT0gRU9GKSB7CisgICAgICBjb21tYW5kID0gdG9QcmVmZXJyZWRDb21tYW5kKGNvbW1hbmQpOworICAgICAgY29uc3QgQ29tbWFuZEVudHJ5ICpjbWQgPSBmaW5kQ29tbWFuZEVudHJ5KGNvbW1hbmQpOworCisgICAgICBDb21tYW5kRW52aXJvbm1lbnQgKmVudiA9IGNvbW1hbmRFbnZpcm9ubWVudFN0YWNrOworICAgICAgZW52LT5oYW5kbGluZ0NvbW1hbmQgPSAxOworCisgICAgICB2b2lkICpwcmUgPSBlbnYtPnByZXByb2Nlc3NDb21tYW5kPyBlbnYtPnByZXByb2Nlc3NDb21tYW5kKCk6IE5VTEw7CisgICAgICBpbnQgaGFuZGxlZCA9IGhhbmRsZUNvbW1hbmQoY29tbWFuZCk7CisKKyAgICAgIGlmIChlbnYtPnBvc3Rwcm9jZXNzQ29tbWFuZCkgeworICAgICAgICBlbnYtPnBvc3Rwcm9jZXNzQ29tbWFuZChwcmUsIGNvbW1hbmQsIGNtZCwgaGFuZGxlZCk7CisgICAgICB9CisKKyAgICAgIGVudi0+aGFuZGxpbmdDb21tYW5kID0gMDsKKyAgICB9CisgIH0KKworICBzZXRDb21tYW5kQWxhcm0ocGFyYW1ldGVycy0+ZGF0YSk7Cit9CisKK3N0YXRpYyB2b2lkCitzZXRDb21tYW5kQWxhcm0gKHZvaWQgKmRhdGEpIHsKKyAgaWYgKCFjb21tYW5kQWxhcm0gJiYgIWNvbW1hbmRRdWV1ZVN1c3BlbmRDb3VudCkgeworICAgIGNvbnN0IENvbW1hbmRFbnZpcm9ubWVudCAqZW52ID0gY29tbWFuZEVudmlyb25tZW50U3RhY2s7CisKKyAgICBpZiAoZW52ICYmICFlbnYtPmhhbmRsaW5nQ29tbWFuZCkgeworICAgICAgUXVldWUgKnF1ZXVlID0gZ2V0Q29tbWFuZFF1ZXVlKDApOworCisgICAgICBpZiAocXVldWUgJiYgKGdldFF1ZXVlU2l6ZShxdWV1ZSkgPiAwKSkgeworICAgICAgICBhc3luY05ld1JlbGF0aXZlQWxhcm0oJmNvbW1hbmRBbGFybSwgMCwgaGFuZGxlQ29tbWFuZEFsYXJtLCBkYXRhKTsKKyAgICAgIH0KKyAgICB9CisgIH0KK30KKworc3RhdGljIHZvaWQKK2NhbmNlbENvbW1hbmRBbGFybSAodm9pZCkgeworICBpZiAoY29tbWFuZEFsYXJtKSB7CisgICAgYXN5bmNDYW5jZWxSZXF1ZXN0KGNvbW1hbmRBbGFybSk7CisgICAgY29tbWFuZEFsYXJtID0gTlVMTDsKKyAgfQorfQorCitpbnQKK2VucXVldWVDb21tYW5kIChpbnQgY29tbWFuZCkgeworICBpZiAoY29tbWFuZCA9PSBFT0YpIHJldHVybiAxOworCisgIHsKKyAgICBRdWV1ZSAqcXVldWUgPSBnZXRDb21tYW5kUXVldWUoMSk7CisKKyAgICBpZiAocXVldWUpIHsKKyAgICAgIENvbW1hbmRRdWV1ZUl0ZW0gKml0ZW0gPSBtYWxsb2Moc2l6ZW9mKENvbW1hbmRRdWV1ZUl0ZW0pKTsKKworICAgICAgaWYgKGl0ZW0pIHsKKyAgICAgICAgaXRlbS0+Y29tbWFuZCA9IGNvbW1hbmQ7CisKKyAgICAgICAgaWYgKGVucXVldWVJdGVtKHF1ZXVlLCBpdGVtKSkgeworICAgICAgICAgIHNldENvbW1hbmRBbGFybShOVUxMKTsKKyAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgfQorCisgICAgICAgIGZyZWUoaXRlbSk7CisgICAgICB9IGVsc2UgeworICAgICAgICBsb2dNYWxsb2NFcnJvcigpOworICAgICAgfQorICAgIH0KKyAgfQorCisgIHJldHVybiAwOworfQorCitpbnQKK3B1c2hDb21tYW5kSGFuZGxlciAoCisgIGNvbnN0IGNoYXIgKm5hbWUsCisgIEtleVRhYmxlQ29tbWFuZENvbnRleHQgY29udGV4dCwKKyAgQ29tbWFuZEhhbmRsZXIgKmhhbmRsZXIsCisgIENvbW1hbmREYXRhRGVzdHJ1Y3RvciAqZGVzdHJ1Y3RvciwKKyAgdm9pZCAqZGF0YQorKSB7CisgIENvbW1hbmRIYW5kbGVyTGV2ZWwgKmNobDsKKworICBpZiAoKGNobCA9IG1hbGxvYyhzaXplb2YoKmNobCkpKSkgeworICAgIG1lbXNldChjaGwsIDAsIHNpemVvZigqY2hsKSk7CisgICAgY2hsLT5sZXZlbE5hbWUgPSBuYW1lOworICAgIGNobC0+aGFuZGxlQ29tbWFuZCA9IGhhbmRsZXI7CisgICAgY2hsLT5kZXN0cm95RGF0YSA9IGRlc3RydWN0b3I7CisgICAgY2hsLT5oYW5kbGVyRGF0YSA9IGRhdGE7CisgICAgY2hsLT5jb21tYW5kQ29udGV4dCA9IGNvbnRleHQ7CisKKyAgICB7CisgICAgICBDb21tYW5kSGFuZGxlckxldmVsICoqdG9wID0gZ2V0Q29tbWFuZEhhbmRsZXJUb3AoKTsKKworICAgICAgY2hsLT5wcmV2aW91c0xldmVsID0gKnRvcDsKKyAgICAgICp0b3AgPSBjaGw7CisgICAgfQorCisgICAgbG9nTWVzc2FnZShMT0dfTEVWRUwsICJwdXNoZWQgY29tbWFuZCBoYW5kbGVyOiAlcyIsIGNobC0+bGV2ZWxOYW1lKTsKKyAgICByZXR1cm4gMTsKKyAgfSBlbHNlIHsKKyAgICBsb2dNYWxsb2NFcnJvcigpOworICB9CisKKyAgcmV0dXJuIDA7Cit9CisKK2ludAorcG9wQ29tbWFuZEhhbmRsZXIgKHZvaWQpIHsKKyAgQ29tbWFuZEhhbmRsZXJMZXZlbCAqKnRvcCA9IGdldENvbW1hbmRIYW5kbGVyVG9wKCk7CisgIENvbW1hbmRIYW5kbGVyTGV2ZWwgKmNobCA9ICp0b3A7CisKKyAgaWYgKCFjaGwpIHJldHVybiAwOworICAqdG9wID0gY2hsLT5wcmV2aW91c0xldmVsOworCisgIGxvZ01lc3NhZ2UoTE9HX0xFVkVMLCAicG9wcGVkIGNvbW1hbmQgaGFuZGxlcjogJXMiLCBjaGwtPmxldmVsTmFtZSk7CisgIGlmIChjaGwtPmRlc3Ryb3lEYXRhKSBjaGwtPmRlc3Ryb3lEYXRhKGNobC0+aGFuZGxlckRhdGEpOworICBmcmVlKGNobCk7CisgIHJldHVybiAxOworfQorCitpbnQKK3B1c2hDb21tYW5kRW52aXJvbm1lbnQgKAorICBjb25zdCBjaGFyICpuYW1lLAorICBDb21tYW5kUHJlcHJvY2Vzc29yICpwcmVwcm9jZXNzQ29tbWFuZCwKKyAgQ29tbWFuZFBvc3Rwcm9jZXNzb3IgKnBvc3Rwcm9jZXNzQ29tbWFuZAorKSB7CisgIENvbW1hbmRFbnZpcm9ubWVudCAqZW52OworCisgIGlmICgoZW52ID0gbWFsbG9jKHNpemVvZigqZW52KSkpKSB7CisgICAgbWVtc2V0KGVudiwgMCwgc2l6ZW9mKCplbnYpKTsKKyAgICBlbnYtPmVudmlyb25tZW50TmFtZSA9IG5hbWU7CisgICAgZW52LT5oYW5kbGVyU3RhY2sgPSBOVUxMOworICAgIGVudi0+cHJlcHJvY2Vzc0NvbW1hbmQgPSBwcmVwcm9jZXNzQ29tbWFuZDsKKyAgICBlbnYtPnBvc3Rwcm9jZXNzQ29tbWFuZCA9IHBvc3Rwcm9jZXNzQ29tbWFuZDsKKyAgICBlbnYtPmhhbmRsaW5nQ29tbWFuZCA9IDA7CisKKyAgICBlbnYtPnByZXZpb3VzRW52aXJvbm1lbnQgPSBjb21tYW5kRW52aXJvbm1lbnRTdGFjazsKKyAgICBjb21tYW5kRW52aXJvbm1lbnRTdGFjayA9IGVudjsKKyAgICBzZXRDb21tYW5kQWxhcm0oTlVMTCk7CisKKyAgICBsb2dNZXNzYWdlKExPR19MRVZFTCwgInB1c2hlZCBjb21tYW5kIGVudmlyb25tZW50OiAlcyIsIGVudi0+ZW52aXJvbm1lbnROYW1lKTsKKyAgICByZXR1cm4gMTsKKyAgfSBlbHNlIHsKKyAgICBsb2dNYWxsb2NFcnJvcigpOworICB9CisKKyAgcmV0dXJuIDA7Cit9CisKK2ludAorcG9wQ29tbWFuZEVudmlyb25tZW50ICh2b2lkKSB7CisgIENvbW1hbmRFbnZpcm9ubWVudCAqZW52ID0gY29tbWFuZEVudmlyb25tZW50U3RhY2s7CisKKyAgaWYgKCFlbnYpIHJldHVybiAwOworICB3aGlsZSAocG9wQ29tbWFuZEhhbmRsZXIoKSk7CisgIGNvbW1hbmRFbnZpcm9ubWVudFN0YWNrID0gZW52LT5wcmV2aW91c0Vudmlyb25tZW50OworCisgIHsKKyAgICBjb25zdCBDb21tYW5kRW52aXJvbm1lbnQgKmVudiA9IGNvbW1hbmRFbnZpcm9ubWVudFN0YWNrOworCisgICAgaWYgKCFlbnYgfHwgZW52LT5oYW5kbGluZ0NvbW1hbmQpIHsKKyAgICAgIGNhbmNlbENvbW1hbmRBbGFybSgpOworICAgIH0KKyAgfQorCisgIGxvZ01lc3NhZ2UoTE9HX0xFVkVMLCAicG9wcGVkIGNvbW1hbmQgZW52aXJvbm1lbnQ6ICVzIiwgZW52LT5lbnZpcm9ubWVudE5hbWUpOworICBmcmVlKGVudik7CisgIHJldHVybiAxOworfQorCitpbnQKK2JlZ2luQ29tbWFuZFF1ZXVlICh2b2lkKSB7CisgIGNvbW1hbmRFbnZpcm9ubWVudFN0YWNrID0gTlVMTDsKKyAgY29tbWFuZFF1ZXVlU3VzcGVuZENvdW50ID0gMDsKKworICByZXR1cm4gcHVzaENvbW1hbmRFbnZpcm9ubWVudCgiaW5pdGlhbCIsIE5VTEwsIE5VTEwpOworfQorCit2b2lkCitlbmRDb21tYW5kUXVldWUgKHZvaWQpIHsKKyAgd2hpbGUgKHBvcENvbW1hbmRFbnZpcm9ubWVudCgpKTsKK30KKwordm9pZAorc3VzcGVuZENvbW1hbmRRdWV1ZSAodm9pZCkgeworICBpZiAoIWNvbW1hbmRRdWV1ZVN1c3BlbmRDb3VudCsrKSBjYW5jZWxDb21tYW5kQWxhcm0oKTsKK30KKwordm9pZAorcmVzdW1lQ29tbWFuZFF1ZXVlICh2b2lkKSB7CisgIGlmICghLS1jb21tYW5kUXVldWVTdXNwZW5kQ291bnQpIHNldENvbW1hbmRBbGFybShOVUxMKTsKK30KZGlmZiAtLWdpdCBhL1Byb2dyYW1zL2NtZF9xdWV1ZS5oIGIvUHJvZ3JhbXMvY21kX3F1ZXVlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTE4Y2YwMAotLS0gL2Rldi9udWxsCisrKyBiL1Byb2dyYW1zL2NtZF9xdWV1ZS5oCkBAIC0wLDAgKzEsNjYgQEAKKy8qCisgKiBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorICogICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorICoKKyAqIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorICoKKyAqIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyAqLworCisjaWZuZGVmIEJSTFRUWV9JTkNMVURFRF9DTURfUVVFVUUKKyNkZWZpbmUgQlJMVFRZX0lOQ0xVREVEX0NNRF9RVUVVRQorCisjaW5jbHVkZSAiY21kX3R5cGVzLmgiCisjaW5jbHVkZSAia3RiX3R5cGVzLmgiCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYgLyogX19jcGx1c3BsdXMgKi8KKworZXh0ZXJuIGludCBiZWdpbkNvbW1hbmRRdWV1ZSAodm9pZCk7CitleHRlcm4gdm9pZCBlbmRDb21tYW5kUXVldWUgKHZvaWQpOworCitleHRlcm4gdm9pZCBzdXNwZW5kQ29tbWFuZFF1ZXVlICh2b2lkKTsKK2V4dGVybiB2b2lkIHJlc3VtZUNvbW1hbmRRdWV1ZSAodm9pZCk7CisKK3R5cGVkZWYgdm9pZCAqQ29tbWFuZFByZXByb2Nlc3NvciAodm9pZCk7Cit0eXBlZGVmIHZvaWQgQ29tbWFuZFBvc3Rwcm9jZXNzb3IgKHZvaWQgKnN0YXRlLCBpbnQgY29tbWFuZCwgY29uc3QgQ29tbWFuZEVudHJ5ICpjbWQsIGludCBoYW5kbGVkKTsKKworZXh0ZXJuIGludCBwdXNoQ29tbWFuZEVudmlyb25tZW50ICgKKyAgY29uc3QgY2hhciAqbmFtZSwKKyAgQ29tbWFuZFByZXByb2Nlc3NvciAqcHJlcHJvY2Vzc0NvbW1hbmQsCisgIENvbW1hbmRQb3N0cHJvY2Vzc29yICpwb3N0cHJvY2Vzc0NvbW1hbmQKKyk7CisKK2V4dGVybiBpbnQgcG9wQ29tbWFuZEVudmlyb25tZW50ICh2b2lkKTsKKwordHlwZWRlZiBpbnQgQ29tbWFuZEhhbmRsZXIgKGludCBjb21tYW5kLCB2b2lkICpkYXRhKTsKK3R5cGVkZWYgdm9pZCBDb21tYW5kRGF0YURlc3RydWN0b3IgKHZvaWQgKmRhdGEpOworCitleHRlcm4gaW50IHB1c2hDb21tYW5kSGFuZGxlciAoCisgIGNvbnN0IGNoYXIgKm5hbWUsCisgIEtleVRhYmxlQ29tbWFuZENvbnRleHQgY29udGV4dCwKKyAgQ29tbWFuZEhhbmRsZXIgKmhhbmRsZXIsCisgIENvbW1hbmREYXRhRGVzdHJ1Y3RvciAqZGVzdHJ1Y3RvciwKKyAgdm9pZCAqZGF0YQorKTsKKworZXh0ZXJuIGludCBwb3BDb21tYW5kSGFuZGxlciAodm9pZCk7CisKK2V4dGVybiBpbnQgaGFuZGxlQ29tbWFuZCAoaW50IGNvbW1hbmQpOworZXh0ZXJuIEtleVRhYmxlQ29tbWFuZENvbnRleHQgZ2V0Q3VycmVudENvbW1hbmRDb250ZXh0ICh2b2lkKTsKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYgLyogX19jcGx1c3BsdXMgKi8KKworI2VuZGlmIC8qIEJSTFRUWV9JTkNMVURFRF9DTURfUVVFVUUgKi8KZGlmZiAtLWdpdCBhL1Byb2dyYW1zL2NtZF9zcGVlY2guYyBiL1Byb2dyYW1zL2NtZF9zcGVlY2guYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yY2ZiNDY2Ci0tLSAvZGV2L251bGwKKysrIGIvUHJvZ3JhbXMvY21kX3NwZWVjaC5jCkBAIC0wLDAgKzEsNTQ1IEBACisvKgorICogQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyAqICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyAqCisgKiBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorICoKKyAqIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyAqCisgKiBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisgKi8KKworI2luY2x1ZGUgInByb2xvZ3VlLmgiCisKKyNpbmNsdWRlIDxzdGRpby5oPgorCisjaW5jbHVkZSAiZW1iZWQuaCIKKyNpbmNsdWRlICJzdHJmbXQuaCIKKyNpbmNsdWRlICJjbWRfcXVldWUuaCIKKyNpbmNsdWRlICJjbWRfc3BlZWNoLmgiCisjaW5jbHVkZSAiY21kX3V0aWxzLmgiCisjaW5jbHVkZSAiYnJsX2NtZHMuaCIKKyNpbmNsdWRlICJwcmVmcy5oIgorI2luY2x1ZGUgImFsZXJ0LmgiCisjaW5jbHVkZSAic3BrLmgiCisjaW5jbHVkZSAic2NyLmgiCisjaW5jbHVkZSAidXBkYXRlLmgiCisjaW5jbHVkZSAiY29yZS5oIgorCisjaWZkZWYgRU5BQkxFX1NQRUVDSF9TVVBQT1JUCitzdGF0aWMgdm9pZAorc2F5U2NyZWVuUmVnaW9uIChpbnQgbGVmdCwgaW50IHRvcCwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBpbnQgdHJhY2ssIFNheU1vZGUgbW9kZSkgeworICBpZiAobW9kZSA9PSBzYXlJbW1lZGlhdGUpIG11dGVTcGVlY2goJnNwaywgX19mdW5jX18pOworCisgIHNpemVfdCBjb3VudCA9IHdpZHRoICogaGVpZ2h0OworICBTY3JlZW5DaGFyYWN0ZXIgY2hhcmFjdGVyc1tjb3VudF07CisgIHJlYWRTY3JlZW4obGVmdCwgdG9wLCB3aWR0aCwgaGVpZ2h0LCBjaGFyYWN0ZXJzKTsKKworICB7CisgICAgU2NyZWVuQ2hhcmFjdGVyICpjaGFyYWN0ZXIgPSBjaGFyYWN0ZXJzOworICAgIFNjcmVlbkNoYXJhY3RlciAqZW5kID0gY2hhcmFjdGVyICsgY291bnQ7CisgICAgY2hhcmFjdGVyICs9IHdpZHRoIC0gMTsKKworICAgIHdoaWxlIChjaGFyYWN0ZXIgPCBlbmQpIHsKKyAgICAgIGlmIChpc3dzcGFjZShjaGFyYWN0ZXItPnRleHQpKSBjaGFyYWN0ZXItPnRleHQgPSBXQ19DKCdcbicpOworICAgICAgY2hhcmFjdGVyICs9IHdpZHRoOworICAgIH0KKyAgfQorCisgIHNway50cmFjay5pc0FjdGl2ZSA9IHRyYWNrOworICBzcGsudHJhY2suc2NyZWVuTnVtYmVyID0gc2NyLm51bWJlcjsKKyAgc3BrLnRyYWNrLmZpcnN0TGluZSA9IHRvcDsKKyAgc3BrLnRyYWNrLnNwZWVjaExvY2F0aW9uID0gU1BLX0xPQ19OT05FOworCisgIHNheVNjcmVlbkNoYXJhY3RlcnMoY2hhcmFjdGVycywgY291bnQsIDApOworfQorCitzdGF0aWMgdm9pZAorc2F5U2NyZWVuTGluZXMgKGludCBsaW5lLCBpbnQgY291bnQsIGludCB0cmFjaywgU2F5TW9kZSBtb2RlKSB7CisgIHNheVNjcmVlblJlZ2lvbigwLCBsaW5lLCBzY3IuY29scywgY291bnQsIHRyYWNrLCBtb2RlKTsKK30KKworc3RhdGljIHZvaWQKK3NwZWFrRG9uZSAoY29uc3QgU2NyZWVuQ2hhcmFjdGVyICpsaW5lLCBpbnQgY29sdW1uLCBpbnQgY291bnQsIGludCBzcGVsbCkgeworICBTY3JlZW5DaGFyYWN0ZXIgaW50ZXJuYWxCdWZmZXJbY291bnRdOworCisgIGlmIChsaW5lKSB7CisgICAgbGluZSA9ICZsaW5lW2NvbHVtbl07CisgIH0gZWxzZSB7CisgICAgcmVhZFNjcmVlbihjb2x1bW4sIHNlcy0+c3BreSwgY291bnQsIDEsIGludGVybmFsQnVmZmVyKTsKKyAgICBsaW5lID0gaW50ZXJuYWxCdWZmZXI7CisgIH0KKworICBzcGVha0NoYXJhY3RlcnMobGluZSwgY291bnQsIHNwZWxsLCAxKTsKKyAgcGxhY2VCcmFpbGxlV2luZG93SG9yaXpvbnRhbGx5KHNlcy0+c3BreCk7CisgIHNsaWRlQnJhaWxsZVdpbmRvd1ZlcnRpY2FsbHkoc2VzLT5zcGt5KTsKKyAgc3VwcHJlc3NBdXRvc3BlYWsoKTsKK30KKworc3RhdGljIHZvaWQKK3NwZWFrQ3VycmVudENoYXJhY3RlciAodm9pZCkgeworICBzcGVha0RvbmUoTlVMTCwgc2VzLT5zcGt4LCAxLCAwKTsKK30KKworc3RhdGljIHZvaWQKK3NwZWFrQ3VycmVudExpbmUgKHZvaWQpIHsKKyAgc3BlYWtEb25lKE5VTEwsIDAsIHNjci5jb2xzLCAwKTsKK30KKworc3RhdGljIGludAoraGFuZGxlU3BlZWNoQ29tbWFuZHMgKGludCBjb21tYW5kLCB2b2lkICpkYXRhKSB7CisgIHN3aXRjaCAoY29tbWFuZCAmIEJSTF9NU0tfQ01EKSB7CisgICAgY2FzZSBCUkxfQ01EX1JFU1RBUlRTUEVFQ0g6CisgICAgICByZXN0YXJ0U3BlZWNoRHJpdmVyKCk7CisgICAgICBicmVhazsKKworICAgIGNhc2UgQlJMX0NNRF9TUEtfU1RPUDoKKyAgICAgIGRpc2FibGVTcGVlY2hEcml2ZXIoZ2V0dGV4dCgic3BlZWNoIGRyaXZlciBzdG9wcGVkIikpOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIEJSTF9DTURfU1BLX1NUQVJUOgorICAgICAgZW5hYmxlU3BlZWNoRHJpdmVyKDEpOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIEJSTF9DTURfU1BLSE9NRTogeworICAgICAgaWYgKHNjci5udW1iZXIgPT0gc3BrLnRyYWNrLnNjcmVlbk51bWJlcikgeworICAgICAgICBpZiAoc3RhcnRTY3JlZW5DdXJzb3JSb3V0aW5nKHNlcy0+c3BreCwgc2VzLT5zcGt5KSkgeworICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICB9CisKKyAgICAgIGFsZXJ0KEFMRVJUX0NPTU1BTkRfUkVKRUNURUQpOworICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBCUkxfQ01EX01VVEU6CisgICAgICBtdXRlU3BlZWNoKCZzcGssICJjb21tYW5kIik7CisgICAgICBicmVhazsKKworICAgIGNhc2UgQlJMX0NNRF9TQVlfTElORToKKyAgICAgIHNheVNjcmVlbkxpbmVzKHNlcy0+d2lueSwgMSwgMCwgcHJlZnMuc2F5TGluZU1vZGUpOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIEJSTF9DTURfU0FZX0FMTDoKKyAgICAgIHNheVNjcmVlbkxpbmVzKDAsIHNjci5yb3dzLCAxLCBzYXlJbW1lZGlhdGUpOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIEJSTF9DTURfU0FZX0FCT1ZFOgorICAgICAgc2F5U2NyZWVuTGluZXMoMCwgc2VzLT53aW55KzEsIDEsIHNheUltbWVkaWF0ZSk7CisgICAgICBicmVhazsKKworICAgIGNhc2UgQlJMX0NNRF9TQVlfQkVMT1c6CisgICAgICBzYXlTY3JlZW5MaW5lcyhzZXMtPndpbnksIHNjci5yb3dzLXNlcy0+d2lueSwgMSwgc2F5SW1tZWRpYXRlKTsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBCUkxfQ01EX1NBWV9TT0ZURVI6CisgICAgICBpZiAoIWNhblNldFNwZWVjaFZvbHVtZSgmc3BrKSkgeworICAgICAgICBhbGVydChBTEVSVF9DT01NQU5EX1JFSkVDVEVEKTsKKyAgICAgIH0gZWxzZSBpZiAocHJlZnMuc3BlZWNoVm9sdW1lID4gMCkgeworICAgICAgICBzZXRTcGVlY2hWb2x1bWUoJnNwaywgLS1wcmVmcy5zcGVlY2hWb2x1bWUsIDEpOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgYWxlcnQoQUxFUlRfTk9fQ0hBTkdFKTsKKyAgICAgIH0KKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBCUkxfQ01EX1NBWV9MT1VERVI6CisgICAgICBpZiAoIWNhblNldFNwZWVjaFZvbHVtZSgmc3BrKSkgeworICAgICAgICBhbGVydChBTEVSVF9DT01NQU5EX1JFSkVDVEVEKTsKKyAgICAgIH0gZWxzZSBpZiAocHJlZnMuc3BlZWNoVm9sdW1lIDwgU1BLX1ZPTFVNRV9NQVhJTVVNKSB7CisgICAgICAgIHNldFNwZWVjaFZvbHVtZSgmc3BrLCArK3ByZWZzLnNwZWVjaFZvbHVtZSwgMSk7CisgICAgICB9IGVsc2UgeworICAgICAgICBhbGVydChBTEVSVF9OT19DSEFOR0UpOworICAgICAgfQorICAgICAgYnJlYWs7CisKKyAgICBjYXNlIEJSTF9DTURfU0FZX1NMT1dFUjoKKyAgICAgIGlmICghY2FuU2V0U3BlZWNoUmF0ZSgmc3BrKSkgeworICAgICAgICBhbGVydChBTEVSVF9DT01NQU5EX1JFSkVDVEVEKTsKKyAgICAgIH0gZWxzZSBpZiAocHJlZnMuc3BlZWNoUmF0ZSA+IDApIHsKKyAgICAgICAgc2V0U3BlZWNoUmF0ZSgmc3BrLCAtLXByZWZzLnNwZWVjaFJhdGUsIDEpOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgYWxlcnQoQUxFUlRfTk9fQ0hBTkdFKTsKKyAgICAgIH0KKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBCUkxfQ01EX1NBWV9GQVNURVI6CisgICAgICBpZiAoIWNhblNldFNwZWVjaFJhdGUoJnNwaykpIHsKKyAgICAgICAgYWxlcnQoQUxFUlRfQ09NTUFORF9SRUpFQ1RFRCk7CisgICAgICB9IGVsc2UgaWYgKHByZWZzLnNwZWVjaFJhdGUgPCBTUEtfUkFURV9NQVhJTVVNKSB7CisgICAgICAgIHNldFNwZWVjaFJhdGUoJnNwaywgKytwcmVmcy5zcGVlY2hSYXRlLCAxKTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIGFsZXJ0KEFMRVJUX05PX0NIQU5HRSk7CisgICAgICB9CisgICAgICBicmVhazsKKworICAgIGNhc2UgQlJMX0NNRF9TQVlfTE9XRVI6CisgICAgICBpZiAoIWNhblNldFNwZWVjaFBpdGNoKCZzcGspKSB7CisgICAgICAgIGFsZXJ0KEFMRVJUX0NPTU1BTkRfUkVKRUNURUQpOworICAgICAgfSBlbHNlIGlmIChwcmVmcy5zcGVlY2hQaXRjaCA+IDApIHsKKyAgICAgICAgc2V0U3BlZWNoUGl0Y2goJnNwaywgLS1wcmVmcy5zcGVlY2hQaXRjaCwgMSk7CisgICAgICB9IGVsc2UgeworICAgICAgICBhbGVydChBTEVSVF9OT19DSEFOR0UpOworICAgICAgfQorICAgICAgYnJlYWs7CisKKyAgICBjYXNlIEJSTF9DTURfU0FZX0hJR0hFUjoKKyAgICAgIGlmICghY2FuU2V0U3BlZWNoUGl0Y2goJnNwaykpIHsKKyAgICAgICAgYWxlcnQoQUxFUlRfQ09NTUFORF9SRUpFQ1RFRCk7CisgICAgICB9IGVsc2UgaWYgKHByZWZzLnNwZWVjaFBpdGNoIDwgU1BLX1BJVENIX01BWElNVU0pIHsKKyAgICAgICAgc2V0U3BlZWNoUGl0Y2goJnNwaywgKytwcmVmcy5zcGVlY2hQaXRjaCwgMSk7CisgICAgICB9IGVsc2UgeworICAgICAgICBhbGVydChBTEVSVF9OT19DSEFOR0UpOworICAgICAgfQorICAgICAgYnJlYWs7CisKKyAgICBjYXNlIEJSTF9DTURfU1BFQUtfQ1VSUl9DSEFSOgorICAgICAgc3BlYWtDdXJyZW50Q2hhcmFjdGVyKCk7CisgICAgICBicmVhazsKKworICAgIGNhc2UgQlJMX0NNRF9TUEVBS19QUkVWX0NIQVI6CisgICAgICBpZiAoc2VzLT5zcGt4ID4gMCkgeworICAgICAgICBzZXMtPnNwa3ggLT0gMTsKKyAgICAgICAgc3BlYWtDdXJyZW50Q2hhcmFjdGVyKCk7CisgICAgICB9IGVsc2UgaWYgKHNlcy0+c3BreSA+IDApIHsKKyAgICAgICAgc2VzLT5zcGt5IC09IDE7CisgICAgICAgIHNlcy0+c3BreCA9IHNjci5jb2xzIC0gMTsKKyAgICAgICAgYWxlcnQoQUxFUlRfV1JBUF9VUCk7CisgICAgICAgIHNwZWFrQ3VycmVudENoYXJhY3RlcigpOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgYWxlcnQoQUxFUlRfQk9VTkNFKTsKKyAgICAgIH0KKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBCUkxfQ01EX1NQRUFLX05FWFRfQ0hBUjoKKyAgICAgIGlmIChzZXMtPnNwa3ggPCAoc2NyLmNvbHMgLSAxKSkgeworICAgICAgICBzZXMtPnNwa3ggKz0gMTsKKyAgICAgICAgc3BlYWtDdXJyZW50Q2hhcmFjdGVyKCk7CisgICAgICB9IGVsc2UgaWYgKHNlcy0+c3BreSA8IChzY3Iucm93cyAtIDEpKSB7CisgICAgICAgIHNlcy0+c3BreSArPSAxOworICAgICAgICBzZXMtPnNwa3ggPSAwOworICAgICAgICBhbGVydChBTEVSVF9XUkFQX0RPV04pOworICAgICAgICBzcGVha0N1cnJlbnRDaGFyYWN0ZXIoKTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIGFsZXJ0KEFMRVJUX0JPVU5DRSk7CisgICAgICB9CisgICAgICBicmVhazsKKworICAgIGNhc2UgQlJMX0NNRF9TUEVBS19GUlNUX0NIQVI6IHsKKyAgICAgIFNjcmVlbkNoYXJhY3RlciBjaGFyYWN0ZXJzW3Njci5jb2xzXTsKKyAgICAgIGludCBjb2x1bW47CisKKyAgICAgIHJlYWRTY3JlZW5Sb3coc2VzLT5zcGt5LCBzY3IuY29scywgY2hhcmFjdGVycyk7CisgICAgICBpZiAoKGNvbHVtbiA9IGZpbmRGaXJzdE5vblNwYWNlQ2hhcmFjdGVyKGNoYXJhY3RlcnMsIHNjci5jb2xzKSkgPj0gMCkgeworICAgICAgICBzZXMtPnNwa3ggPSBjb2x1bW47CisgICAgICAgIHNwZWFrRG9uZShjaGFyYWN0ZXJzLCBjb2x1bW4sIDEsIDApOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgYWxlcnQoQUxFUlRfQ09NTUFORF9SRUpFQ1RFRCk7CisgICAgICB9CisKKyAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2UgQlJMX0NNRF9TUEVBS19MQVNUX0NIQVI6IHsKKyAgICAgIFNjcmVlbkNoYXJhY3RlciBjaGFyYWN0ZXJzW3Njci5jb2xzXTsKKyAgICAgIGludCBjb2x1bW47CisKKyAgICAgIHJlYWRTY3JlZW5Sb3coc2VzLT5zcGt5LCBzY3IuY29scywgY2hhcmFjdGVycyk7CisgICAgICBpZiAoKGNvbHVtbiA9IGZpbmRMYXN0Tm9uU3BhY2VDaGFyYWN0ZXIoY2hhcmFjdGVycywgc2NyLmNvbHMpKSA+PSAwKSB7CisgICAgICAgIHNlcy0+c3BreCA9IGNvbHVtbjsKKyAgICAgICAgc3BlYWtEb25lKGNoYXJhY3RlcnMsIGNvbHVtbiwgMSwgMCk7CisgICAgICB9IGVsc2UgeworICAgICAgICBhbGVydChBTEVSVF9DT01NQU5EX1JFSkVDVEVEKTsKKyAgICAgIH0KKworICAgICAgYnJlYWs7CisgICAgfQorCisgICAgeworICAgICAgaW50IGRpcmVjdGlvbjsKKyAgICAgIGludCBzcGVsbDsKKworICAgIGNhc2UgQlJMX0NNRF9TUEVBS19QUkVWX1dPUkQ6CisgICAgICBkaXJlY3Rpb24gPSAtMTsKKyAgICAgIHNwZWxsID0gMDsKKyAgICAgIGdvdG8gc3BlYWtXb3JkOworCisgICAgY2FzZSBCUkxfQ01EX1NQRUFLX05FWFRfV09SRDoKKyAgICAgIGRpcmVjdGlvbiA9IDE7CisgICAgICBzcGVsbCA9IDA7CisgICAgICBnb3RvIHNwZWFrV29yZDsKKworICAgIGNhc2UgQlJMX0NNRF9TUEVBS19DVVJSX1dPUkQ6CisgICAgICBkaXJlY3Rpb24gPSAwOworICAgICAgc3BlbGwgPSAwOworICAgICAgZ290byBzcGVha1dvcmQ7CisKKyAgICBjYXNlIEJSTF9DTURfU1BFTExfQ1VSUl9XT1JEOgorICAgICAgZGlyZWN0aW9uID0gMDsKKyAgICAgIHNwZWxsID0gMTsKKyAgICAgIGdvdG8gc3BlYWtXb3JkOworCisgICAgc3BlYWtXb3JkOgorICAgICAgeworICAgICAgICBpbnQgcm93ID0gc2VzLT5zcGt5OworICAgICAgICBpbnQgY29sdW1uID0gc2VzLT5zcGt4OworCisgICAgICAgIFNjcmVlbkNoYXJhY3RlciBjaGFyYWN0ZXJzW3Njci5jb2xzXTsKKyAgICAgICAgaW50IG9uQ3VycmVudFdvcmQ7CisgICAgICAgIGludCBvblNwYWNlOworCisgICAgICAgIGludCBmcm9tID0gY29sdW1uOworICAgICAgICBpbnQgdG8gPSBmcm9tICsgMTsKKworICAgICAgZmluZFdvcmQ6CisgICAgICAgIHJlYWRTY3JlZW5Sb3cocm93LCBzY3IuY29scywgY2hhcmFjdGVycyk7CisgICAgICAgIG9uQ3VycmVudFdvcmQgPSAocm93ID09IHNlcy0+c3BreSkgJiYgIWlzd3NwYWNlKGNoYXJhY3RlcnNbY29sdW1uXS50ZXh0KTsKKyAgICAgICAgb25TcGFjZSA9ICFvbkN1cnJlbnRXb3JkOworCisgICAgICAgIGlmIChkaXJlY3Rpb24gPCAwKSB7CisgICAgICAgICAgd2hpbGUgKDEpIHsKKyAgICAgICAgICAgIGlmIChjb2x1bW4gPT0gMCkgeworICAgICAgICAgICAgICBpZiAoIW9uU3BhY2UgJiYgIW9uQ3VycmVudFdvcmQpIHsKKyAgICAgICAgICAgICAgICBzZXMtPnNwa3ggPSBmcm9tID0gY29sdW1uOworICAgICAgICAgICAgICAgIHNlcy0+c3BreSA9IHJvdzsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgIGlmIChyb3cgPT0gMCkgZ290byBub1dvcmQ7CisgICAgICAgICAgICAgIGlmIChyb3ctLSA9PSBzZXMtPnNwa3kpIGFsZXJ0KEFMRVJUX1dSQVBfVVApOworICAgICAgICAgICAgICBjb2x1bW4gPSBzY3IuY29sczsKKyAgICAgICAgICAgICAgZ290byBmaW5kV29yZDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgeworICAgICAgICAgICAgICBpbnQgaXNTcGFjZSA9IGlzd3NwYWNlKGNoYXJhY3RlcnNbLS1jb2x1bW5dLnRleHQpOworCisgICAgICAgICAgICAgIGlmIChpc1NwYWNlICE9IG9uU3BhY2UpIHsKKyAgICAgICAgICAgICAgICBpZiAob25DdXJyZW50V29yZCkgeworICAgICAgICAgICAgICAgICAgb25DdXJyZW50V29yZCA9IDA7CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmICghb25TcGFjZSkgeworICAgICAgICAgICAgICAgICAgc2VzLT5zcGt4ID0gZnJvbSA9IGNvbHVtbiArIDE7CisgICAgICAgICAgICAgICAgICBzZXMtPnNwa3kgPSByb3c7CisgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBpZiAoIWlzU3BhY2UpIHRvID0gY29sdW1uICsgMTsKKyAgICAgICAgICAgICAgICBvblNwYWNlID0gaXNTcGFjZTsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmIChkaXJlY3Rpb24gPiAwKSB7CisgICAgICAgICAgd2hpbGUgKDEpIHsKKyAgICAgICAgICAgIGlmICgrK2NvbHVtbiA9PSBzY3IuY29scykgeworICAgICAgICAgICAgICBpZiAoIW9uU3BhY2UgJiYgIW9uQ3VycmVudFdvcmQpIHsKKyAgICAgICAgICAgICAgICB0byA9IGNvbHVtbjsKKyAgICAgICAgICAgICAgICBzZXMtPnNwa3ggPSBmcm9tOworICAgICAgICAgICAgICAgIHNlcy0+c3BreSA9IHJvdzsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgIGlmIChyb3cgPT0gKHNjci5yb3dzIC0gMSkpIGdvdG8gbm9Xb3JkOworICAgICAgICAgICAgICBpZiAocm93KysgPT0gc2VzLT5zcGt5KSBhbGVydChBTEVSVF9XUkFQX0RPV04pOworICAgICAgICAgICAgICBjb2x1bW4gPSAtMTsKKyAgICAgICAgICAgICAgZ290byBmaW5kV29yZDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgeworICAgICAgICAgICAgICBpbnQgaXNTcGFjZSA9IGlzd3NwYWNlKGNoYXJhY3RlcnNbY29sdW1uXS50ZXh0KTsKKworICAgICAgICAgICAgICBpZiAoaXNTcGFjZSAhPSBvblNwYWNlKSB7CisgICAgICAgICAgICAgICAgaWYgKG9uQ3VycmVudFdvcmQpIHsKKyAgICAgICAgICAgICAgICAgIG9uQ3VycmVudFdvcmQgPSAwOworICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIW9uU3BhY2UpIHsKKyAgICAgICAgICAgICAgICAgIHRvID0gY29sdW1uOworICAgICAgICAgICAgICAgICAgc2VzLT5zcGt4ID0gZnJvbTsKKyAgICAgICAgICAgICAgICAgIHNlcy0+c3BreSA9IHJvdzsKKyAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGlmICghaXNTcGFjZSkgZnJvbSA9IGNvbHVtbjsKKyAgICAgICAgICAgICAgICBvblNwYWNlID0gaXNTcGFjZTsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmICghb25TcGFjZSkgeworICAgICAgICAgIHdoaWxlIChmcm9tID4gMCkgeworICAgICAgICAgICAgaWYgKGlzd3NwYWNlKGNoYXJhY3RlcnNbLS1mcm9tXS50ZXh0KSkgeworICAgICAgICAgICAgICBmcm9tICs9IDE7CisgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgIH0KKworICAgICAgICAgIHdoaWxlICh0byA8IHNjci5jb2xzKSB7CisgICAgICAgICAgICBpZiAoaXN3c3BhY2UoY2hhcmFjdGVyc1t0b10udGV4dCkpIGJyZWFrOworICAgICAgICAgICAgdG8gKz0gMTsKKyAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBzcGVha0RvbmUoY2hhcmFjdGVycywgZnJvbSwgdG8tZnJvbSwgc3BlbGwpOworICAgICAgICBicmVhazsKKyAgICAgIH0KKworICAgIG5vV29yZDoKKyAgICAgIGFsZXJ0KEFMRVJUX0JPVU5DRSk7CisgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIEJSTF9DTURfU1BFQUtfQ1VSUl9MSU5FOgorICAgICAgc3BlYWtDdXJyZW50TGluZSgpOworICAgICAgYnJlYWs7CisKKyAgICB7CisgICAgICBpbnQgaW5jcmVtZW50OworICAgICAgaW50IGxpbWl0OworCisgICAgY2FzZSBCUkxfQ01EX1NQRUFLX1BSRVZfTElORToKKyAgICAgIGluY3JlbWVudCA9IC0xOworICAgICAgbGltaXQgPSAwOworICAgICAgZ290byBzcGVha0xpbmU7CisKKyAgICBjYXNlIEJSTF9DTURfU1BFQUtfTkVYVF9MSU5FOgorICAgICAgaW5jcmVtZW50ID0gMTsKKyAgICAgIGxpbWl0ID0gc2NyLnJvd3MgLSAxOworICAgICAgZ290byBzcGVha0xpbmU7CisKKyAgICBzcGVha0xpbmU6CisgICAgICBpZiAoc2VzLT5zcGt5ID09IGxpbWl0KSB7CisgICAgICAgIGFsZXJ0KEFMRVJUX0JPVU5DRSk7CisgICAgICB9IGVsc2UgeworICAgICAgICBpZiAocHJlZnMuc2tpcElkZW50aWNhbExpbmVzKSB7CisgICAgICAgICAgU2NyZWVuQ2hhcmFjdGVyIG9yaWdpbmFsW3Njci5jb2xzXTsKKyAgICAgICAgICBTY3JlZW5DaGFyYWN0ZXIgY3VycmVudFtzY3IuY29sc107CisgICAgICAgICAgdW5zaWduZWQgaW50IGNvdW50ID0gMDsKKworICAgICAgICAgIHJlYWRTY3JlZW5Sb3coc2VzLT5zcGt5LCBzY3IuY29scywgb3JpZ2luYWwpOworCisgICAgICAgICAgZG8geworICAgICAgICAgICAgcmVhZFNjcmVlblJvdyhzZXMtPnNwa3krPWluY3JlbWVudCwgc2NyLmNvbHMsIGN1cnJlbnQpOworICAgICAgICAgICAgaWYgKCFpc1NhbWVSb3cob3JpZ2luYWwsIGN1cnJlbnQsIHNjci5jb2xzLCBpc1NhbWVUZXh0KSkgYnJlYWs7CisgICAgICAgICAgICBhbGVydExpbmVTa2lwcGVkKCZjb3VudCk7CisgICAgICAgICAgfSB3aGlsZSAoc2VzLT5zcGt5ICE9IGxpbWl0KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICBzZXMtPnNwa3kgKz0gaW5jcmVtZW50OworICAgICAgICB9CisKKyAgICAgICAgc3BlYWtDdXJyZW50TGluZSgpOworICAgICAgfQorCisgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIEJSTF9DTURfU1BFQUtfRlJTVF9MSU5FOiB7CisgICAgICBTY3JlZW5DaGFyYWN0ZXIgY2hhcmFjdGVyc1tzY3IuY29sc107CisgICAgICBpbnQgcm93ID0gMDsKKworICAgICAgd2hpbGUgKHJvdyA8IHNjci5yb3dzKSB7CisgICAgICAgIHJlYWRTY3JlZW5Sb3cocm93LCBzY3IuY29scywgY2hhcmFjdGVycyk7CisgICAgICAgIGlmICghaXNBbGxTcGFjZUNoYXJhY3RlcnMoY2hhcmFjdGVycywgc2NyLmNvbHMpKSBicmVhazsKKyAgICAgICAgcm93ICs9IDE7CisgICAgICB9CisKKyAgICAgIGlmIChyb3cgPCBzY3Iucm93cykgeworICAgICAgICBzZXMtPnNwa3kgPSByb3c7CisgICAgICAgIHNlcy0+c3BreCA9IDA7CisgICAgICAgIHNwZWFrQ3VycmVudExpbmUoKTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIGFsZXJ0KEFMRVJUX0NPTU1BTkRfUkVKRUNURUQpOworICAgICAgfQorCisgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIEJSTF9DTURfU1BFQUtfTEFTVF9MSU5FOiB7CisgICAgICBTY3JlZW5DaGFyYWN0ZXIgY2hhcmFjdGVyc1tzY3IuY29sc107CisgICAgICBpbnQgcm93ID0gc2NyLnJvd3MgLSAxOworCisgICAgICB3aGlsZSAocm93ID49IDApIHsKKyAgICAgICAgcmVhZFNjcmVlblJvdyhyb3csIHNjci5jb2xzLCBjaGFyYWN0ZXJzKTsKKyAgICAgICAgaWYgKCFpc0FsbFNwYWNlQ2hhcmFjdGVycyhjaGFyYWN0ZXJzLCBzY3IuY29scykpIGJyZWFrOworICAgICAgICByb3cgLT0gMTsKKyAgICAgIH0KKworICAgICAgaWYgKHJvdyA+PSAwKSB7CisgICAgICAgIHNlcy0+c3BreSA9IHJvdzsKKyAgICAgICAgc2VzLT5zcGt4ID0gMDsKKyAgICAgICAgc3BlYWtDdXJyZW50TGluZSgpOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgYWxlcnQoQUxFUlRfQ09NTUFORF9SRUpFQ1RFRCk7CisgICAgICB9CisKKyAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2UgQlJMX0NNRF9ERVNDX0NVUlJfQ0hBUjogeworICAgICAgY2hhciBkZXNjcmlwdGlvblswWDUwXTsKKyAgICAgIFNUUl9CRUdJTihkZXNjcmlwdGlvbiwgc2l6ZW9mKGRlc2NyaXB0aW9uKSk7CisgICAgICBTVFJfRk9STUFUKGZvcm1hdFBob25ldGljUGhyYXNlLCBzZXMtPnNwa3gsIHNlcy0+c3BreSk7CisgICAgICBTVFJfRU5EOworICAgICAgc2F5U3RyaW5nKCZzcGssIGRlc2NyaXB0aW9uLCBTQVlfT1BUX01VVEVfRklSU1QpOworICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBCUkxfQ01EX1JPVVRFX0NVUlJfTE9DTjogeworICAgICAgaWYgKCFzdGFydFNjcmVlbkN1cnNvclJvdXRpbmcoc2VzLT5zcGt4LCBzZXMtPnNwa3kpKSB7CisgICAgICAgIGFsZXJ0KEFMRVJUX0NPTU1BTkRfUkVKRUNURUQpOworICAgICAgfQorCisgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIEJSTF9DTURfU1BFQUtfQ1VSUl9MT0NOOiB7CisgICAgICBjaGFyIGJ1ZmZlclswWDUwXTsKKyAgICAgIHNucHJpbnRmKGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlciksICIlcyAlZCwgJXMgJWQiLAorICAgICAgICAgICAgICAgZ2V0dGV4dCgibGluZSIpLCBzZXMtPnNwa3krMSwKKyAgICAgICAgICAgICAgIGdldHRleHQoImNvbHVtbiIpLCBzZXMtPnNwa3grMSk7CisgICAgICBzYXlTdHJpbmcoJnNwaywgYnVmZmVyLCBTQVlfT1BUX01VVEVfRklSU1QpOworICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBCUkxfQ01EX1NQRUFLX0lOREVOVDoKKyAgICAgIHNwZWFrSW5kZW50KE5VTEwsIDAsIDEpOworICAgICAgYnJlYWs7CisKKyAgICBkZWZhdWx0OiB7CisgICAgICBpbnQgYXJnID0gY29tbWFuZCAmIEJSTF9NU0tfQVJHOworCisgICAgICBzd2l0Y2ggKGNvbW1hbmQgJiBCUkxfTVNLX0JMSykgeworICAgICAgICBjYXNlIEJSTF9DTURfQkxLKFJPVVRFX1NQRUVDSCk6IHsKKyAgICAgICAgICBpbnQgY29sdW1uLCByb3c7CisKKyAgICAgICAgICBpZiAoZ2V0Q2hhcmFjdGVyQ29vcmRpbmF0ZXMoYXJnLCAmcm93LCAmY29sdW1uLCBOVUxMLCAwKSkgeworICAgICAgICAgICAgc2VzLT5zcGt4ID0gY29sdW1uOworICAgICAgICAgICAgc2VzLT5zcGt5ID0gcm93OworICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBhbGVydChBTEVSVF9DT01NQU5EX1JFSkVDVEVEKTsKKyAgICAgICAgICB9CisKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgcmV0dXJuIDA7CisgICAgICB9CisgICAgfQorICB9CisKKyAgcmV0dXJuIDE7Cit9CisjZW5kaWYgLyogRU5BQkxFX1NQRUVDSF9TVVBQT1JUICovCisKK2ludAorYWRkU3BlZWNoQ29tbWFuZHMgKHZvaWQpIHsKKyNpZmRlZiBFTkFCTEVfU1BFRUNIX1NVUFBPUlQKKyAgcmV0dXJuIHB1c2hDb21tYW5kSGFuZGxlcigic3BlZWNoIiwgS1RCX0NUWF9ERUZBVUxULAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZVNwZWVjaENvbW1hbmRzLCBOVUxMLCBOVUxMKTsKKyNlbHNlIC8qIEVOQUJMRV9TUEVFQ0hfU1VQUE9SVCAqLworICByZXR1cm4gMDsKKyNlbmRpZiAvKiBFTkFCTEVfU1BFRUNIX1NVUFBPUlQgKi8KK30KZGlmZiAtLWdpdCBhL1Byb2dyYW1zL2NtZF9zcGVlY2guaCBiL1Byb2dyYW1zL2NtZF9zcGVlY2guaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNjZiZDJiCi0tLSAvZGV2L251bGwKKysrIGIvUHJvZ3JhbXMvY21kX3NwZWVjaC5oCkBAIC0wLDAgKzEsMzIgQEAKKy8qCisgKiBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorICogICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorICoKKyAqIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorICoKKyAqIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyAqLworCisjaWZuZGVmIEJSTFRUWV9JTkNMVURFRF9DTURfU1BFRUNICisjZGVmaW5lIEJSTFRUWV9JTkNMVURFRF9DTURfU1BFRUNICisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYgLyogX19jcGx1c3BsdXMgKi8KKworZXh0ZXJuIGludCBhZGRTcGVlY2hDb21tYW5kcyAodm9pZCk7CisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmIC8qIF9fY3BsdXNwbHVzICovCisKKyNlbmRpZiAvKiBCUkxUVFlfSU5DTFVERURfQ01EX1NQRUVDSCAqLwpkaWZmIC0tZ2l0IGEvUHJvZ3JhbXMvY21kX3RvZ2dsZS5jIGIvUHJvZ3JhbXMvY21kX3RvZ2dsZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU4YzUxYTgKLS0tIC9kZXYvbnVsbAorKysgYi9Qcm9ncmFtcy9jbWRfdG9nZ2xlLmMKQEAgLTAsMCArMSwzMDYgQEAKKy8qCisgKiBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorICogICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorICoKKyAqIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorICoKKyAqIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyAqLworCisjaW5jbHVkZSAicHJvbG9ndWUuaCIKKworI2luY2x1ZGUgInBhcmFtZXRlcnMuaCIKKyNpbmNsdWRlICJhcGlfY29udHJvbC5oIgorI2luY2x1ZGUgImNtZF9xdWV1ZS5oIgorI2luY2x1ZGUgImNtZF90b2dnbGUuaCIKKyNpbmNsdWRlICJicmxfY21kcy5oIgorI2luY2x1ZGUgInByZWZzLmgiCisjaW5jbHVkZSAic2NyLmgiCisjaW5jbHVkZSAic2NyX3NwZWNpYWwuaCIKKyNpbmNsdWRlICJzY3JfbWVudS5oIgorI2luY2x1ZGUgImFsZXJ0LmgiCisjaW5jbHVkZSAidHVuZS5oIgorI2luY2x1ZGUgImNvcmUuaCIKKwordHlwZWRlZiBlbnVtIHsKKyAgVE9HR0xFX0VSUk9SLAorICBUT0dHTEVfU0FNRSwKKyAgVE9HR0xFX09GRiwKKyAgVE9HR0xFX09OCit9IFRvZ2dsZVJlc3VsdDsKKworc3RhdGljIFRvZ2dsZVJlc3VsdAordG9nZ2xlQml0ICgKKyAgaW50ICpiaXRzLCBpbnQgYml0LCBpbnQgY29tbWFuZCwKKyAgQWxlcnRJZGVudGlmaWVyIG9mZkFsZXJ0LAorICBBbGVydElkZW50aWZpZXIgb25BbGVydAorKSB7CisgIGludCBvbGRCaXRzID0gKmJpdHM7CisKKyAgc3dpdGNoIChjb21tYW5kICYgQlJMX0ZMR19UT0dHTEVfTUFTSykgeworICAgIGNhc2UgMDoKKyAgICAgICpiaXRzIF49IGJpdDsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBCUkxfRkxHX1RPR0dMRV9PTjoKKyAgICAgICpiaXRzIHw9IGJpdDsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBCUkxfRkxHX1RPR0dMRV9PRkY6CisgICAgICAqYml0cyAmPSB+Yml0OworICAgICAgYnJlYWs7CisKKyAgICBkZWZhdWx0OgorICAgICAgYWxlcnQoQUxFUlRfQ09NTUFORF9SRUpFQ1RFRCk7CisgICAgICByZXR1cm4gVE9HR0xFX0VSUk9SOworICB9CisKKyAgeworICAgIGludCBpc09uID0gKCpiaXRzICYgYml0KSAhPSAwOworICAgIEFsZXJ0SWRlbnRpZmllciBpZGVudGlmaWVyID0gaXNPbj8gb25BbGVydDogb2ZmQWxlcnQ7CisKKyAgICBhbGVydChpZGVudGlmaWVyKTsKKyAgICBpZiAoKmJpdHMgIT0gb2xkQml0cykgcmV0dXJuIGlzT24/IFRPR0dMRV9PTjogVE9HR0xFX09GRjsKKworICAgIHR1bmVXYWl0KFRVTkVfVE9HR0xFX1JFUEVBVF9ERUxBWSk7CisgICAgYWxlcnQoaWRlbnRpZmllcik7CisgICAgcmV0dXJuIFRPR0dMRV9TQU1FOworICB9Cit9CisKK3N0YXRpYyBUb2dnbGVSZXN1bHQKK3RvZ2dsZVNldHRpbmcgKAorICB1bnNpZ25lZCBjaGFyICpzZXR0aW5nLCBpbnQgY29tbWFuZCwKKyAgQWxlcnRJZGVudGlmaWVyIG9mZkFsZXJ0LAorICBBbGVydElkZW50aWZpZXIgb25BbGVydAorKSB7CisgIGNvbnN0IGludCBiaXQgPSAxOworICBpbnQgYml0cyA9ICpzZXR0aW5nPyBiaXQ6IDA7CisgIFRvZ2dsZVJlc3VsdCByZXN1bHQgPSB0b2dnbGVCaXQoJmJpdHMsIGJpdCwgY29tbWFuZCwgb2ZmQWxlcnQsIG9uQWxlcnQpOworCisgICpzZXR0aW5nID0gKGJpdHMgJiBiaXQpPyBiaXQ6IDA7CisgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBUb2dnbGVSZXN1bHQKK3RvZ2dsZVByZWZlcmVuY2VTZXR0aW5nICh1bnNpZ25lZCBjaGFyICpzZXR0aW5nLCBpbnQgY29tbWFuZCkgeworICBUb2dnbGVSZXN1bHQgcmVzdWx0ID0gdG9nZ2xlU2V0dGluZyhzZXR0aW5nLCBjb21tYW5kLCBBTEVSVF9UT0dHTEVfT0ZGLCBBTEVSVF9UT0dHTEVfT04pOworICBpZiAocmVzdWx0ID4gVE9HR0xFX1NBTUUpIG1lbnVTY3JlZW5VcGRhdGVkKCk7CisgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBUb2dnbGVSZXN1bHQKK3RvZ2dsZU1vZGVTZXR0aW5nICh1bnNpZ25lZCBjaGFyICpzZXR0aW5nLCBpbnQgY29tbWFuZCkgeworICByZXR1cm4gdG9nZ2xlU2V0dGluZyhzZXR0aW5nLCBjb21tYW5kLCBBTEVSVF9OT05FLCBBTEVSVF9OT05FKTsKK30KKworc3RhdGljIFRvZ2dsZVJlc3VsdAordG9nZ2xlRnVuY3Rpb25hbFNldHRpbmcgKAorICBpbnQgY29tbWFuZCwKKyAgaW50ICgqZ2V0KSAodm9pZCksCisgIHZvaWQgKCpzZXQpIChpbnQgdmFsdWUpCispIHsKKyAgY29uc3QgaW50IGJpdCA9IDE7CisgIGludCBiaXRzID0gZ2V0KCk/IGJpdDogMDsKKworICBUb2dnbGVSZXN1bHQgcmVzdWx0ID0gdG9nZ2xlQml0KAorICAgICZiaXRzLCBiaXQsIGNvbW1hbmQsCisgICAgQUxFUlRfVE9HR0xFX09GRiwgQUxFUlRfVE9HR0xFX09OCisgICk7CisKKyAgc2V0KCEhKGJpdHMgJiBiaXQpKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIGludAoraGFuZGxlVG9nZ2xlQ29tbWFuZHMgKGludCBjb21tYW5kLCB2b2lkICpkYXRhKSB7CisgIHN3aXRjaCAoY29tbWFuZCAmIEJSTF9NU0tfQ01EKSB7CisgICAgY2FzZSBCUkxfQ01EX1NLUElETE5TOgorICAgICAgdG9nZ2xlUHJlZmVyZW5jZVNldHRpbmcoJnByZWZzLnNraXBJZGVudGljYWxMaW5lcywgY29tbWFuZCk7CisgICAgICBhcGkudXBkYXRlUGFyYW1ldGVyKEJSTEFQSV9QQVJBTV9TS0lQX0lERU5USUNBTF9MSU5FUywgMCk7CisgICAgICBicmVhazsKKworICAgIGNhc2UgQlJMX0NNRF9TS1BCTE5LV0lOUzoKKyAgICAgIHRvZ2dsZVByZWZlcmVuY2VTZXR0aW5nKCZwcmVmcy5za2lwQmxhbmtCcmFpbGxlV2luZG93cywgY29tbWFuZCk7CisgICAgICBicmVhazsKKworICAgIGNhc2UgQlJMX0NNRF9TTElERVdJTjoKKyAgICAgIHRvZ2dsZVByZWZlcmVuY2VTZXR0aW5nKCZwcmVmcy5zbGlkaW5nQnJhaWxsZVdpbmRvdywgY29tbWFuZCk7CisgICAgICBicmVhazsKKworICAgIGNhc2UgQlJMX0NNRF9TSVhET1RTOgorICAgICAgdG9nZ2xlUHJlZmVyZW5jZVNldHRpbmcoJnByZWZzLmJyYWlsbGVWYXJpYW50LCBjb21tYW5kKTsKKyAgICAgIG9uQnJhaWxsZVZhcmlhbnRVcGRhdGVkKCk7CisgICAgICBicmVhazsKKworICAgIGNhc2UgQlJMX0NNRF9DT05UUkFDVEVEOgorICAgICAgdG9nZ2xlRnVuY3Rpb25hbFNldHRpbmcoY29tbWFuZCwgaXNDb250cmFjdGVkQnJhaWxsZSwgc2V0Q29udHJhY3RlZEJyYWlsbGUpOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIEJSTF9DTURfQ09NUEJSTDY6CisgICAgICB0b2dnbGVGdW5jdGlvbmFsU2V0dGluZyhjb21tYW5kLCBpc1NpeERvdENvbXB1dGVyQnJhaWxsZSwgc2V0U2l4RG90Q29tcHV0ZXJCcmFpbGxlKTsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBCUkxfQ01EX0NTUlRSSzoKKyAgICAgIHRvZ2dsZVNldHRpbmcoJnNlcy0+dHJhY2tTY3JlZW5DdXJzb3IsIGNvbW1hbmQsIEFMRVJUX0NVUlNPUl9VTkxJTktFRCwgQUxFUlRfQ1VSU09SX0xJTktFRCk7CisKKyAgICAgIGlmIChzZXMtPnRyYWNrU2NyZWVuQ3Vyc29yKSB7CisjaWZkZWYgRU5BQkxFX1NQRUVDSF9TVVBQT1JUCisgICAgICAgIGlmIChzcGsudHJhY2suaXNBY3RpdmUgJiYgKHNjci5udW1iZXIgPT0gc3BrLnRyYWNrLnNjcmVlbk51bWJlcikpIHsKKyAgICAgICAgICBzcGsudHJhY2suc3BlZWNoTG9jYXRpb24gPSBTUEtfTE9DX05PTkU7CisgICAgICAgIH0gZWxzZQorI2VuZGlmIC8qIEVOQUJMRV9TUEVFQ0hfU1VQUE9SVCAqLworCisgICAgICAgIHsKKyAgICAgICAgICB0cmFja1NjcmVlbkN1cnNvcigxKTsKKyAgICAgICAgfQorICAgICAgfQorICAgICAgYnJlYWs7CisKKyAgICBjYXNlIEJSTF9DTURfQ1NSU0laRToKKyAgICAgIHRvZ2dsZVByZWZlcmVuY2VTZXR0aW5nKCZwcmVmcy5zY3JlZW5DdXJzb3JTdHlsZSwgY29tbWFuZCk7CisgICAgICBicmVhazsKKworICAgIGNhc2UgQlJMX0NNRF9DU1JWSVM6CisgICAgICB0b2dnbGVQcmVmZXJlbmNlU2V0dGluZygmcHJlZnMuc2hvd1NjcmVlbkN1cnNvciwgY29tbWFuZCk7CisgICAgICBicmVhazsKKworICAgIGNhc2UgQlJMX0NNRF9DU1JISURFOgorICAgICAgdG9nZ2xlTW9kZVNldHRpbmcoJnNlcy0+aGlkZVNjcmVlbkN1cnNvciwgY29tbWFuZCk7CisgICAgICBicmVhazsKKworICAgIGNhc2UgQlJMX0NNRF9DU1JCTElOSzoKKyAgICAgIHRvZ2dsZVByZWZlcmVuY2VTZXR0aW5nKCZwcmVmcy5ibGlua2luZ1NjcmVlbkN1cnNvciwgY29tbWFuZCk7CisgICAgICBicmVhazsKKworICAgIGNhc2UgQlJMX0NNRF9BVFRSVklTOgorICAgICAgdG9nZ2xlUHJlZmVyZW5jZVNldHRpbmcoJnByZWZzLnNob3dBdHRyaWJ1dGVzLCBjb21tYW5kKTsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBCUkxfQ01EX0FUVFJCTElOSzoKKyAgICAgIHRvZ2dsZVByZWZlcmVuY2VTZXR0aW5nKCZwcmVmcy5ibGlua2luZ0F0dHJpYnV0ZXMsIGNvbW1hbmQpOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIEJSTF9DTURfQ0FQQkxJTks6CisgICAgICB0b2dnbGVQcmVmZXJlbmNlU2V0dGluZygmcHJlZnMuYmxpbmtpbmdDYXBpdGFscywgY29tbWFuZCk7CisgICAgICBicmVhazsKKworICAgIGNhc2UgQlJMX0NNRF9BVVRPUkVQRUFUOgorICAgICAgdG9nZ2xlUHJlZmVyZW5jZVNldHRpbmcoJnByZWZzLmF1dG9yZXBlYXRFbmFibGVkLCBjb21tYW5kKTsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBCUkxfQ01EX0JSTEtCRDoKKyAgICAgIHRvZ2dsZVByZWZlcmVuY2VTZXR0aW5nKCZwcmVmcy5icmFpbGxlS2V5Ym9hcmRFbmFibGVkLCBjb21tYW5kKTsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBCUkxfQ01EX0JSTFVDRE9UUzoKKyAgICAgIHRvZ2dsZVByZWZlcmVuY2VTZXR0aW5nKCZwcmVmcy5icmFpbGxlVHlwaW5nTW9kZSwgY29tbWFuZCk7CisgICAgICBicmVhazsKKworICAgIGNhc2UgQlJMX0NNRF9UT1VDSF9OQVY6CisgICAgICB0b2dnbGVQcmVmZXJlbmNlU2V0dGluZygmcHJlZnMudG91Y2hOYXZpZ2F0aW9uLCBjb21tYW5kKTsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBCUkxfQ01EX1RVTkVTOgorICAgICAgdG9nZ2xlUHJlZmVyZW5jZVNldHRpbmcoJnByZWZzLmFsZXJ0VHVuZXMsIGNvbW1hbmQpOyAgICAgICAgLyogdG9nZ2xlIHNvdW5kIG9uL29mZiAqLworICAgICAgYXBpLnVwZGF0ZVBhcmFtZXRlcihCUkxBUElfUEFSQU1fQVVESUJMRV9BTEVSVFMsIDApOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIEJSTF9DTURfQVVUT1NQRUFLOgorICAgICAgdG9nZ2xlUHJlZmVyZW5jZVNldHRpbmcoJnByZWZzLmF1dG9zcGVhaywgY29tbWFuZCk7CisgICAgICBicmVhazsKKworICAgIGNhc2UgQlJMX0NNRF9BU1BLX1NFTF9MSU5FOgorICAgICAgdG9nZ2xlUHJlZmVyZW5jZVNldHRpbmcoJnByZWZzLmF1dG9zcGVha1NlbGVjdGVkTGluZSwgY29tbWFuZCk7CisgICAgICBicmVhazsKKworICAgIGNhc2UgQlJMX0NNRF9BU1BLX1NFTF9DSEFSOgorICAgICAgdG9nZ2xlUHJlZmVyZW5jZVNldHRpbmcoJnByZWZzLmF1dG9zcGVha1NlbGVjdGVkQ2hhcmFjdGVyLCBjb21tYW5kKTsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBCUkxfQ01EX0FTUEtfSU5TX0NIQVJTOgorICAgICAgdG9nZ2xlUHJlZmVyZW5jZVNldHRpbmcoJnByZWZzLmF1dG9zcGVha0luc2VydGVkQ2hhcmFjdGVycywgY29tbWFuZCk7CisgICAgICBicmVhazsKKworICAgIGNhc2UgQlJMX0NNRF9BU1BLX0RFTF9DSEFSUzoKKyAgICAgIHRvZ2dsZVByZWZlcmVuY2VTZXR0aW5nKCZwcmVmcy5hdXRvc3BlYWtEZWxldGVkQ2hhcmFjdGVycywgY29tbWFuZCk7CisgICAgICBicmVhazsKKworICAgIGNhc2UgQlJMX0NNRF9BU1BLX1JFUF9DSEFSUzoKKyAgICAgIHRvZ2dsZVByZWZlcmVuY2VTZXR0aW5nKCZwcmVmcy5hdXRvc3BlYWtSZXBsYWNlZENoYXJhY3RlcnMsIGNvbW1hbmQpOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIEJSTF9DTURfQVNQS19DTVBfV09SRFM6CisgICAgICB0b2dnbGVQcmVmZXJlbmNlU2V0dGluZygmcHJlZnMuYXV0b3NwZWFrQ29tcGxldGVkV29yZHMsIGNvbW1hbmQpOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIEJSTF9DTURfQVNQS19JTkRFTlQ6CisgICAgICB0b2dnbGVQcmVmZXJlbmNlU2V0dGluZygmcHJlZnMuYXV0b3NwZWFrTGluZUluZGVudCwgY29tbWFuZCk7CisgICAgICBicmVhazsKKworICAgIGNhc2UgQlJMX0NNRF9TSE9XX0NVUlJfTE9DTjoKKyAgICAgIHRvZ2dsZVByZWZlcmVuY2VTZXR0aW5nKCZwcmVmcy5zaG93U3BlZWNoQ3Vyc29yLCBjb21tYW5kKTsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBCUkxfQ01EX0lORk86CisgICAgICBpZiAoaGF2ZVN0YXR1c0NlbGxzKCkgfHwgISh0ZXh0TWF4aW1pemVkIHx8IHN0YXR1c0NvdW50KSkgeworICAgICAgICB0b2dnbGVNb2RlU2V0dGluZygmaW5mb01vZGUsIGNvbW1hbmQpOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgVG9nZ2xlUmVzdWx0IHJlc3VsdCA9IHRvZ2dsZU1vZGVTZXR0aW5nKCZ0ZXh0TWF4aW1pemVkLCBjb21tYW5kKTsKKyAgICAgICAgaWYgKHJlc3VsdCA+IFRPR0dMRV9TQU1FKSByZWNvbmZpZ3VyZUJyYWlsbGVXaW5kb3coKTsKKyAgICAgIH0KKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBCUkxfQ01EX0RJU1BNRDoKKyAgICAgIHRvZ2dsZU1vZGVTZXR0aW5nKCZzZXMtPmRpc3BsYXlNb2RlLCBjb21tYW5kKTsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBCUkxfQ01EX0ZSRUVaRTogeworICAgICAgdW5zaWduZWQgY2hhciBzZXR0aW5nOworCisgICAgICBpZiAoaXNNYWluU2NyZWVuKCkpIHsKKyAgICAgICAgc2V0dGluZyA9IDA7CisgICAgICB9IGVsc2UgaWYgKGlzU3BlY2lhbFNjcmVlbihTQ1JfRlJPWkVOKSkgeworICAgICAgICBzZXR0aW5nID0gMTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIGFsZXJ0KEFMRVJUX0NPTU1BTkRfUkVKRUNURUQpOworICAgICAgICBicmVhazsKKyAgICAgIH0KKworICAgICAgc3dpdGNoICh0b2dnbGVTZXR0aW5nKCZzZXR0aW5nLCBjb21tYW5kLCBBTEVSVF9TQ1JFRU5fVU5GUk9aRU4sIEFMRVJUX1NDUkVFTl9GUk9aRU4pKSB7CisgICAgICAgIGNhc2UgVE9HR0xFX09GRjoKKyAgICAgICAgICBkZWFjdGl2YXRlU3BlY2lhbFNjcmVlbihTQ1JfRlJPWkVOKTsKKyAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIFRPR0dMRV9PTjoKKyAgICAgICAgICBpZiAoIWFjdGl2YXRlU3BlY2lhbFNjcmVlbihTQ1JfRlJPWkVOKSkgYWxlcnQoQUxFUlRfQ09NTUFORF9SRUpFQ1RFRCk7CisgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICBicmVhazsKKyAgICAgIH0KKworICAgICAgYnJlYWs7CisgICAgfQorCisgICAgZGVmYXVsdDoKKyAgICAgIHJldHVybiAwOworICB9CisKKyAgcmV0dXJuIDE7Cit9CisKK2ludAorYWRkVG9nZ2xlQ29tbWFuZHMgKHZvaWQpIHsKKyAgcmV0dXJuIHB1c2hDb21tYW5kSGFuZGxlcigidG9nZ2xlIiwgS1RCX0NUWF9ERUZBVUxULAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZVRvZ2dsZUNvbW1hbmRzLCBOVUxMLCBOVUxMKTsKK30KZGlmZiAtLWdpdCBhL1Byb2dyYW1zL2NtZF90b2dnbGUuaCBiL1Byb2dyYW1zL2NtZF90b2dnbGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NmNhNTJiCi0tLSAvZGV2L251bGwKKysrIGIvUHJvZ3JhbXMvY21kX3RvZ2dsZS5oCkBAIC0wLDAgKzEsMzIgQEAKKy8qCisgKiBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorICogICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorICoKKyAqIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorICoKKyAqIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyAqLworCisjaWZuZGVmIEJSTFRUWV9JTkNMVURFRF9DTURfVE9HR0xFCisjZGVmaW5lIEJSTFRUWV9JTkNMVURFRF9DTURfVE9HR0xFCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYgLyogX19jcGx1c3BsdXMgKi8KKworZXh0ZXJuIGludCBhZGRUb2dnbGVDb21tYW5kcyAodm9pZCk7CisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmIC8qIF9fY3BsdXNwbHVzICovCisKKyNlbmRpZiAvKiBCUkxUVFlfSU5DTFVERURfQ01EX1RPR0dMRSAqLwpkaWZmIC0tZ2l0IGEvUHJvZ3JhbXMvY21kX3RvdWNoLmMgYi9Qcm9ncmFtcy9jbWRfdG91Y2guYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NGNmYjRmCi0tLSAvZGV2L251bGwKKysrIGIvUHJvZ3JhbXMvY21kX3RvdWNoLmMKQEAgLTAsMCArMSwxNzggQEAKKy8qCisgKiBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorICogICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorICoKKyAqIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorICoKKyAqIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyAqLworCisjaW5jbHVkZSAicHJvbG9ndWUuaCIKKworI2luY2x1ZGUgPHN0cmluZy5oPgorCisjaW5jbHVkZSAibG9nLmgiCisjaW5jbHVkZSAiY21kX3V0aWxzLmgiCisjaW5jbHVkZSAiY21kX3F1ZXVlLmgiCisjaW5jbHVkZSAiY21kX3RvdWNoLmgiCisjaW5jbHVkZSAiYnJsX2NtZHMuaCIKKyNpbmNsdWRlICJicmxfdXRpbHMuaCIKKyNpbmNsdWRlICJyZXBvcnQuaCIKKyNpbmNsdWRlICJiaXRtYXNrLmgiCisjaW5jbHVkZSAicHJlZnMuaCIKKwordHlwZWRlZiBzdHJ1Y3QgeworICBzdHJ1Y3QgeworICAgIFJlcG9ydExpc3RlbmVySW5zdGFuY2UgKmJyYWlsbGVXaW5kb3dVcGRhdGVkOworICB9IHJlcG9ydExpc3RlbmVyczsKKworICBCSVRNQVNLKHRvdWNoZWQsIDg4LCBpbnQpOworICB1bnNpZ25lZCBjaGFyIGNlbGxzWzg4XTsKKyAgdW5zaWduZWQgaW50IGNvdW50OworICB1bnNpZ25lZCBpbnQgYWN0aXZlQ2VsbHM7CisgIHVuc2lnbmVkIGludCBsYXN0QWN0aXZlOworICBpbnQgbGFzdFRvdWNoZWQ7Cit9IFRvdWNoQ29tbWFuZERhdGE7CisKK3N0YXRpYyB2b2lkCityZXNldFRvdWNoZWQgKFRvdWNoQ29tbWFuZERhdGEgKnRjZCkgeworICB0Y2QtPmFjdGl2ZUNlbGxzID0gMDsKKyAgdGNkLT5sYXN0VG91Y2hlZCA9IC0xOworICBCSVRNQVNLX1pFUk8odGNkLT50b3VjaGVkKTsKKworICBmb3IgKGludCBpID0gMDsgaSA8IHRjZC0+Y291bnQ7ICsraSkgeworICAgIGlmICh0Y2QtPmNlbGxzW2ldKSB7CisgICAgICBCSVRNQVNLX1NFVCh0Y2QtPnRvdWNoZWQsIGkpOworICAgICAgdGNkLT5sYXN0QWN0aXZlID0gaTsKKyAgICAgIHRjZC0+YWN0aXZlQ2VsbHMgKz0gMTsKKyAgICB9CisgIH0KK30KKworc3RhdGljIHZvaWQKK2hhbmRsZVRvdWNoQXQgKGludCBvZmZzZXQsIFRvdWNoQ29tbWFuZERhdGEgKnRjZCkgeworICB0Y2QtPmxhc3RUb3VjaGVkID0gb2Zmc2V0OworICBCSVRNQVNLX0NMRUFSKHRjZC0+dG91Y2hlZCwgb2Zmc2V0KTsKK30KKworc3RhdGljIHZvaWQKK2hhbmRsZVRvdWNoT2ZmIChUb3VjaENvbW1hbmREYXRhICp0Y2QpIHsKKyAgaW50IG9rID0gMDsKKworICBpZiAocHJlZnMudG91Y2hOYXZpZ2F0aW9uICYmICh0Y2QtPmxhc3RUb3VjaGVkID4gKChpbnQpdGNkLT5sYXN0QWN0aXZlIC0gMikpKSB7CisgICAgQklUTUFTS19DT1VOVCh0Y2QtPnRvdWNoZWQsIHVucmVhZCk7CisKKyAgICBpZiAodGNkLT5hY3RpdmVDZWxscyAmJiB1bnJlYWQgPT0gMCkgeworICAgICAgb2sgPSAxOworICAgIH0KKworICAgIGlmICghb2sgJiYgdGNkLT5hY3RpdmVDZWxscyAmJiB1bnJlYWQpIHsKKyAgICAgIGZsb2F0IGZhY3RvciA9IChmbG9hdCl0Y2QtPmFjdGl2ZUNlbGxzIC8gdW5yZWFkOworCisgICAgICBpZiAoZmFjdG9yID4gNikgb2sgPSAxOworICAgIH0KKyAgfQorCisgIGlmIChvaykgeworICAgIHJlc2V0VG91Y2hlZCh0Y2QpOworICAgIGhhbmRsZUNvbW1hbmQoQlJMX0NNRF9OWE5CV0lOKTsKKyAgfQorfQorCitzdGF0aWMgdm9pZAoraGFuZGxlQnJhaWxsZVdpbmRvd1VwZGF0ZWQgKAorICBjb25zdCBCcmFpbGxlV2luZG93VXBkYXRlZFJlcG9ydCAqcmVwb3J0LCBUb3VjaENvbW1hbmREYXRhICp0Y2QKKykgeworICBpZiAoY2VsbHNIYXZlQ2hhbmdlZCgmdGNkLT5jZWxsc1swXSwgcmVwb3J0LT5jZWxscywgcmVwb3J0LT5jb3VudCwgTlVMTCwgTlVMTCwgTlVMTCkpIHsKKyAgICB0Y2QtPmNvdW50ID0gcmVwb3J0LT5jb3VudDsKKworICAgIHJlc2V0VG91Y2hlZCh0Y2QpOworICB9Cit9CisKK1JFUE9SVF9MSVNURU5FUihicmFpbGxlV2luZG93VXBkYXRlZExpc3RlbmVyKSB7CisgIFRvdWNoQ29tbWFuZERhdGEgKnRjZCA9IHBhcmFtZXRlcnMtPmxpc3RlbmVyRGF0YTsKKyAgY29uc3QgQnJhaWxsZVdpbmRvd1VwZGF0ZWRSZXBvcnQgKnJlcG9ydCA9IHBhcmFtZXRlcnMtPnJlcG9ydERhdGE7CisKKyAgaGFuZGxlQnJhaWxsZVdpbmRvd1VwZGF0ZWQocmVwb3J0LCB0Y2QpOworfQorCitzdGF0aWMgVG91Y2hDb21tYW5kRGF0YSAqCituZXdUb3VjaENvbW1hbmREYXRhICh2b2lkKSB7CisgIFRvdWNoQ29tbWFuZERhdGEgKnRjZDsKKworICBpZiAoKHRjZCA9IG1hbGxvYyhzaXplb2YoKnRjZCkpKSkgeworICAgIG1lbXNldCh0Y2QsIDAsIHNpemVvZigqdGNkKSk7CisKKyAgICBpZiAoKHRjZC0+cmVwb3J0TGlzdGVuZXJzLmJyYWlsbGVXaW5kb3dVcGRhdGVkID0gcmVnaXN0ZXJSZXBvcnRMaXN0ZW5lcihSRVBPUlRfQlJBSUxMRV9XSU5ET1dfVVBEQVRFRCwgYnJhaWxsZVdpbmRvd1VwZGF0ZWRMaXN0ZW5lciwgdGNkKSkpIHsKKyAgICAgIHJldHVybiB0Y2Q7CisgICAgfQorCisgICAgZnJlZSh0Y2QpOworICB9IGVsc2UgeworICAgIGxvZ01hbGxvY0Vycm9yKCk7CisgIH0KKworICByZXR1cm4gTlVMTDsKK30KKworc3RhdGljIHZvaWQKK2Rlc3Ryb3lUb3VjaENvbW1hbmREYXRhIChUb3VjaENvbW1hbmREYXRhICp0Y2QpIHsKKyAgdW5yZWdpc3RlclJlcG9ydExpc3RlbmVyKHRjZC0+cmVwb3J0TGlzdGVuZXJzLmJyYWlsbGVXaW5kb3dVcGRhdGVkKTsKKyAgZnJlZSh0Y2QpOworfQorCitzdGF0aWMgaW50CitoYW5kbGVUb3VjaENvbW1hbmRzIChpbnQgY29tbWFuZCwgdm9pZCAqZGF0YSkgeworICBzd2l0Y2ggKGNvbW1hbmQgJiBCUkxfTVNLX0JMSykgeworICAgIGNhc2UgQlJMX0NNRF9CTEsoVE9VQ0hfQVQpOiB7CisgICAgICBpbnQgYXJnID0gY29tbWFuZCAmIEJSTF9NU0tfQVJHOworCisgICAgICBpZiAoYXJnID09IEJSTF9NU0tfQVJHKSB7CisgICAgICAgIGhhbmRsZVRvdWNoT2ZmKGRhdGEpOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgaW50IGF0OworICAgICAgICBpZiAoaXNUZXh0T2Zmc2V0KGFyZywgJmF0LCBOVUxMLCAwKSkgaGFuZGxlVG91Y2hBdChhdCwgZGF0YSk7CisgICAgICB9CisKKyAgICAgIGJyZWFrOworICAgIH0KKworICAgIGRlZmF1bHQ6CisgICAgICByZXR1cm4gMDsKKyAgfQorCisgIHJldHVybiAxOworfQorCitzdGF0aWMgdm9pZAorZGVzdHJ1Y3RUb3VjaENvbW1hbmREYXRhICh2b2lkICpkYXRhKSB7CisgIFRvdWNoQ29tbWFuZERhdGEgKnRjZCA9IGRhdGE7CisKKyAgZGVzdHJveVRvdWNoQ29tbWFuZERhdGEodGNkKTsKK30KKworaW50CithZGRUb3VjaENvbW1hbmRzICh2b2lkKSB7CisgIFRvdWNoQ29tbWFuZERhdGEgKnRjZDsKKworICBpZiAoKHRjZCA9IG5ld1RvdWNoQ29tbWFuZERhdGEoKSkpIHsKKyAgICBpZiAocHVzaENvbW1hbmRIYW5kbGVyKCJ0b3VjaCIsIEtUQl9DVFhfREVGQVVMVCwgaGFuZGxlVG91Y2hDb21tYW5kcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RydWN0VG91Y2hDb21tYW5kRGF0YSwgdGNkKSkgeworICAgICAgcmV0dXJuIDE7CisgICAgfQorCisgICAgZGVzdHJveVRvdWNoQ29tbWFuZERhdGEodGNkKTsKKyAgfQorCisgIHJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvUHJvZ3JhbXMvY21kX3RvdWNoLmggYi9Qcm9ncmFtcy9jbWRfdG91Y2guaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MDkzZDg4Ci0tLSAvZGV2L251bGwKKysrIGIvUHJvZ3JhbXMvY21kX3RvdWNoLmgKQEAgLTAsMCArMSwzMiBAQAorLyoKKyAqIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisgKiAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisgKgorICogQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKKyNpZm5kZWYgQlJMVFRZX0lOQ0xVREVEX0NNRF9UT1VDSAorI2RlZmluZSBCUkxUVFlfSU5DTFVERURfQ01EX1RPVUNICisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYgLyogX19jcGx1c3BsdXMgKi8KKworZXh0ZXJuIGludCBhZGRUb3VjaENvbW1hbmRzICh2b2lkKTsKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYgLyogX19jcGx1c3BsdXMgKi8KKworI2VuZGlmIC8qIEJSTFRUWV9JTkNMVURFRF9DTURfVE9VQ0ggKi8KZGlmZiAtLWdpdCBhL1Byb2dyYW1zL2NtZF91dGlscy5jIGIvUHJvZ3JhbXMvY21kX3V0aWxzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjBjNTk3ZgotLS0gL2Rldi9udWxsCisrKyBiL1Byb2dyYW1zL2NtZF91dGlscy5jCkBAIC0wLDAgKzEsMzczIEBACisvKgorICogQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyAqICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyAqCisgKiBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorICoKKyAqIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyAqCisgKiBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisgKi8KKworI2luY2x1ZGUgInByb2xvZ3VlLmgiCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPGN0eXBlLmg+CisKKyNpbmNsdWRlICJsb2cuaCIKKyNpbmNsdWRlICJzdHJmbXQuaCIKKyNpbmNsdWRlICJhbGVydC5oIgorI2luY2x1ZGUgImJybF9jbWRzLmgiCisjaW5jbHVkZSAidW5pY29kZS5oIgorI2luY2x1ZGUgImFzY2lpLmgiCisjaW5jbHVkZSAic2NyLmgiCisjaW5jbHVkZSAiY29yZS5oIgorCit2b2lkCithbGVydExpbmVTa2lwcGVkICh1bnNpZ25lZCBpbnQgKmNvdW50KSB7CisgIGNvbnN0IHVuc2lnbmVkIGludCBpbnRlcnZhbCA9IDQ7CisKKyAgaWYgKCEqY291bnQpIHsKKyAgICBhbGVydChBTEVSVF9TS0lQX0ZJUlNUKTsKKyAgfSBlbHNlIGlmICgqY291bnQgPD0gaW50ZXJ2YWwpIHsKKyAgICBhbGVydChBTEVSVF9TS0lQX09ORSk7CisgIH0gZWxzZSBpZiAoISgqY291bnQgJSBpbnRlcnZhbCkpIHsKKyAgICBhbGVydChBTEVSVF9TS0lQX1NFVkVSQUwpOworICB9CisKKyAgKmNvdW50ICs9IDE7Cit9CisKK2ludAoraXNUZXh0T2Zmc2V0IChpbnQgYXJnLCBpbnQgKmZpcnN0LCBpbnQgKmxhc3QsIGludCByZWxheGVkKSB7CisgIGludCB5ID0gYXJnIC8gYnJsLnRleHRDb2x1bW5zOworICBpZiAoeSA+PSBicmwudGV4dFJvd3MpIHJldHVybiAwOworICBpZiAoKHNlcy0+d2lueSArIHkpID49IHNjci5yb3dzKSByZXR1cm4gMDsKKworICBpbnQgeCA9IGFyZyAlIGJybC50ZXh0Q29sdW1uczsKKyAgaWYgKHggPCB0ZXh0U3RhcnQpIHJldHVybiAwOworICBpZiAoKHggLT0gdGV4dFN0YXJ0KSA+PSB0ZXh0Q291bnQpIHJldHVybiAwOworCisgIGlmIChpc0NvbnRyYWN0ZWQpIHsKKyAgICBCcmFpbGxlUm93RGVzY3JpcHRvciAqYnJkID0gZ2V0QnJhaWxsZVJvd0Rlc2NyaXB0b3IoeSk7CisgICAgaWYgKCFicmQpIHJldHVybiAwOworCisgICAgaW50ICpvZmZzZXRzID0gYnJkLT5jb250cmFjdGVkLm9mZnNldHMuYXJyYXk7CisgICAgaWYgKCFvZmZzZXRzKSByZXR1cm4gMDsKKworICAgIGludCBzdGFydCA9IDA7CisgICAgaW50IGVuZCA9IDA7CisKKyAgICB7CisgICAgICBpbnQgdGV4dEluZGV4ID0gMDsKKworICAgICAgd2hpbGUgKHRleHRJbmRleCA8IGJyZC0+Y29udHJhY3RlZC5sZW5ndGgpIHsKKyAgICAgICAgaW50IGNlbGxJbmRleCA9IG9mZnNldHNbdGV4dEluZGV4XTsKKworICAgICAgICBpZiAoY2VsbEluZGV4ICE9IENUQl9OT19PRkZTRVQpIHsKKyAgICAgICAgICBpZiAoY2VsbEluZGV4ID4geCkgeworICAgICAgICAgICAgZW5kID0gdGV4dEluZGV4IC0gMTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIH0KKworICAgICAgICAgIHN0YXJ0ID0gdGV4dEluZGV4OworICAgICAgICB9CisKKyAgICAgICAgdGV4dEluZGV4ICs9IDE7CisgICAgICB9CisKKyAgICAgIGlmICh0ZXh0SW5kZXggPT0gYnJkLT5jb250cmFjdGVkLmxlbmd0aCkgZW5kID0gdGV4dEluZGV4IC0gMTsKKyAgICB9CisKKyAgICBpZiAoZmlyc3QpICpmaXJzdCA9IHN0YXJ0OworICAgIGlmIChsYXN0KSAqbGFzdCA9IGVuZDsKKyAgfSBlbHNlIHsKKyAgICBpZiAoKHNlcy0+d2lueCArIHgpID49IHNjci5jb2xzKSB7CisgICAgICBpZiAoIXJlbGF4ZWQpIHJldHVybiAwOworICAgICAgeCA9IHNjci5jb2xzIC0gc2VzLT53aW54IC0gMTsKKyAgICB9CisKKyAgICBpZiAocHJlZnMud29yZFdyYXApIHsKKyAgICAgIGludCBsZW5ndGggPSBnZXRXb3JkV3JhcExlbmd0aChzZXMtPndpbnksIHNlcy0+d2lueCwgdGV4dENvdW50KTsKKyAgICAgIGlmIChsZW5ndGggPiB0ZXh0Q291bnQpIGxlbmd0aCA9IHRleHRDb3VudDsKKyAgICAgIGlmICh4ID49IGxlbmd0aCkgeCA9IGxlbmd0aCAtIDE7CisgICAgfQorCisgICAgaWYgKGZpcnN0KSAqZmlyc3QgPSB4OworICAgIGlmIChsYXN0KSAqbGFzdCA9IHg7CisgIH0KKworICByZXR1cm4gMTsKK30KKworaW50CitnZXRDaGFyYWN0ZXJDb29yZGluYXRlcyAoaW50IGFyZywgaW50ICpyb3csIGludCAqZmlyc3QsIGludCAqbGFzdCwgaW50IHJlbGF4ZWQpIHsKKyAgaWYgKGFyZyA9PSBCUkxfTVNLX0FSRykgeworICAgIGlmICghU0NSX0NVUlNPUl9PSygpKSByZXR1cm4gMDsKKyAgICAqcm93ID0gc2NyLnBvc3k7CisgICAgaWYgKGZpcnN0KSAqZmlyc3QgPSBzY3IucG9zeDsKKyAgICBpZiAobGFzdCkgKmxhc3QgPSBzY3IucG9zeDsKKyAgfSBlbHNlIHsKKyAgICBpZiAoIWlzVGV4dE9mZnNldChhcmcsIGZpcnN0LCBsYXN0LCByZWxheGVkKSkgcmV0dXJuIDA7CisgICAgaWYgKHJvdykgKnJvdyA9IHNlcy0+d2lueTsKKyAgICBpZiAoZmlyc3QpICpmaXJzdCArPSBzZXMtPndpbng7CisgICAgaWYgKGxhc3QpICpsYXN0ICs9IHNlcy0+d2lueDsKKyAgfQorCisgIHJldHVybiAxOworfQorCitzdGF0aWMgU2NyZWVuQ2hhcmFjdGVyCitnZXRTY3JlZW5DaGFyYWN0ZXIgKGludCBjb2x1bW4sIGludCByb3cpIHsKKyAgU2NyZWVuQ2hhcmFjdGVyIGNoYXJhY3RlcjsKKyAgcmVhZFNjcmVlbihjb2x1bW4sIHJvdywgMSwgMSwgJmNoYXJhY3Rlcik7CisgIHJldHVybiBjaGFyYWN0ZXI7Cit9CisKK1NUUl9CRUdJTl9GT1JNQVRURVIoZm9ybWF0Q2hhcmFjdGVyRGVzY3JpcHRpb24sIGludCBjb2x1bW4sIGludCByb3cpCisgIFNjcmVlbkNoYXJhY3RlciBjaGFyYWN0ZXIgPSBnZXRTY3JlZW5DaGFyYWN0ZXIoY29sdW1uLCByb3cpOworCisgIHsKKyAgICBjaGFyIG5hbWVbMFg0MF07CisKKyAgICBpZiAoZ2V0Q2hhcmFjdGVyTmFtZShjaGFyYWN0ZXIudGV4dCwgbmFtZSwgc2l6ZW9mKG5hbWUpKSkgeworICAgICAgeworICAgICAgICBzaXplX3QgbGVuZ3RoID0gc3RybGVuKG5hbWUpOworICAgICAgICBmb3IgKGludCBpPTA7IGk8bGVuZ3RoOyBpKz0xKSBuYW1lW2ldID0gdG9sb3dlcihuYW1lW2ldKTsKKyAgICAgIH0KKworICAgICAgU1RSX1BSSU5URigiICVzOiAiLCBuYW1lKTsKKyAgICB9CisgIH0KKworICB7CisgICAgdWludDMyX3QgdGV4dCA9IGNoYXJhY3Rlci50ZXh0OworICAgIFNUUl9QUklOVEYoIlUrJTA0IiBQUklYMzIgIiAoJSIgUFJJdTMyICIpOiIsIHRleHQsIHRleHQpOworICB9CisKKyAgeworICAgIFNUUl9QUklOVEYoIiAiKTsKKworICAgIHN0YXRpYyBjb25zdCBjaGFyICpjb25zdCBjb2xvdXJzW10gPSB7CisgICAgICAvKiAgICAgICovIHN0cnRleHQoImJsYWNrIiksCisgICAgICAvKiAgICBCICovIHN0cnRleHQoImJsdWUiKSwKKyAgICAgIC8qICAgRyAgKi8gc3RydGV4dCgiZ3JlZW4iKSwKKyAgICAgIC8qICAgR0IgKi8gc3RydGV4dCgiY3lhbiIpLAorICAgICAgLyogIFIgICAqLyBzdHJ0ZXh0KCJyZWQiKSwKKyAgICAgIC8qICBSIEIgKi8gc3RydGV4dCgibWFnZW50YSIpLAorICAgICAgLyogIFJHICAqLyBzdHJ0ZXh0KCJicm93biIpLAorICAgICAgLyogIFJHQiAqLyBzdHJ0ZXh0KCJsaWdodCBncmV5IiksCisgICAgICAvKiBMICAgICovIHN0cnRleHQoImRhcmsgZ3JleSIpLAorICAgICAgLyogTCAgQiAqLyBzdHJ0ZXh0KCJsaWdodCBibHVlIiksCisgICAgICAvKiBMIEcgICovIHN0cnRleHQoImxpZ2h0IGdyZWVuIiksCisgICAgICAvKiBMIEdCICovIHN0cnRleHQoImxpZ2h0IGN5YW4iKSwKKyAgICAgIC8qIExSICAgKi8gc3RydGV4dCgibGlnaHQgcmVkIiksCisgICAgICAvKiBMUiBCICovIHN0cnRleHQoImxpZ2h0IG1hZ2VudGEiKSwKKyAgICAgIC8qIExSRyAgKi8gc3RydGV4dCgieWVsbG93IiksCisgICAgICAvKiBMUkdCICovIHN0cnRleHQoIndoaXRlIikKKyAgICB9OworCisgICAgdW5zaWduZWQgY2hhciBhdHRyaWJ1dGVzID0gY2hhcmFjdGVyLmF0dHJpYnV0ZXM7CisgICAgY29uc3QgY2hhciAqZm9yZWdyb3VuZCA9IGdldHRleHQoY29sb3Vyc1thdHRyaWJ1dGVzICYgU0NSX01BU0tfRkddKTsKKyAgICBjb25zdCBjaGFyICpiYWNrZ3JvdW5kID0gZ2V0dGV4dChjb2xvdXJzWyhhdHRyaWJ1dGVzICYgU0NSX01BU0tfQkcpID4+IDRdKTsKKworICAgIC8vIHhnZXR0ZXh0OiBUaGlzIHBocmFzZSBkZXNjcmliZXMgdGhlIGNvbG91ciBvZiBhIGNoYXJhY3RlciBvbiB0aGUgc2NyZWVuLgorICAgIC8vIHhnZXR0ZXh0OiAlMSRzIGlzIHRoZSAoYWxyZWFkeSB0cmFuc2xhdGVkKSBmb3JlZ3JvdW5kIGNvbG91ci4KKyAgICAvLyB4Z2V0dGV4dDogJTIkcyBpcyB0aGUgKGFscmVhZHkgdHJhbnNsYXRlZCkgYmFja2dyb3VuZCBjb2xvdXIuCisgICAgU1RSX1BSSU5URihnZXR0ZXh0KCIlMSRzIG9uICUyJHMiKSwgZm9yZWdyb3VuZCwgYmFja2dyb3VuZCk7CisgIH0KKworICBpZiAoY2hhcmFjdGVyLmF0dHJpYnV0ZXMgJiBTQ1JfQVRUUl9CTElOSykgeworICAgIFNUUl9QUklOVEYoIiAlcyIsIGdldHRleHQoImJsaW5raW5nIikpOworICB9CitTVFJfRU5EX0ZPUk1BVFRFUgorCitzdGF0aWMgY29uc3QgY2hhciAqY29uc3QgcGhvbmV0aWNXb3Jkc1tdID0geworICBbJyAnXSA9ICJzcGFjZSIsCisKKyAgWydhJ10gPSAiYWxwaGEiLAorICBbJ2InXSA9ICJicmF2byIsCisgIFsnYyddID0gImNoYXJsaWUiLAorICBbJ2QnXSA9ICJkZWx0YSIsCisgIFsnZSddID0gImVjaG8iLAorICBbJ2YnXSA9ICJmb3h0cm90IiwKKyAgWydnJ10gPSAiZ29sZiIsCisgIFsnaCddID0gImhvdGVsIiwKKyAgWydpJ10gPSAiaW5kaWEiLAorICBbJ2onXSA9ICJqdWxpZXQiLAorICBbJ2snXSA9ICJraWxvIiwKKyAgWydsJ10gPSAibGltYSIsCisgIFsnbSddID0gIm1pa2UiLAorICBbJ24nXSA9ICJub3ZlbWJlciIsCisgIFsnbyddID0gIm9zY2FyIiwKKyAgWydwJ10gPSAicGFwYSIsCisgIFsncSddID0gInF1ZWJlYyIsCisgIFsnciddID0gInJvbWVvIiwKKyAgWydzJ10gPSAic2llcnJhIiwKKyAgWyd0J10gPSAidGFuZ28iLAorICBbJ3UnXSA9ICJ1bmlmb3JtIiwKKyAgWyd2J10gPSAidmljdG9yIiwKKyAgWyd3J10gPSAid2hpc2tleSIsCisgIFsneCddID0gIngtcmF5IiwKKyAgWyd5J10gPSAieWFua2VlIiwKKyAgWyd6J10gPSAienVsdSIsCisKKyAgWycwJ10gPSAiemVybyIsCisgIFsnMSddID0gIm9uZSIsCisgIFsnMiddID0gInR3byIsCisgIFsnMyddID0gInRocmVlIiwKKyAgWyc0J10gPSAiZm91ciIsCisgIFsnNSddID0gImZpdmUiLAorICBbJzYnXSA9ICJzaXgiLAorICBbJzcnXSA9ICJzZXZlbiIsCisgIFsnOCddID0gImVpZ2h0IiwKKyAgWyc5J10gPSAibmluZSIsCisKKyAgWycrJ10gPSAicGx1cyIsCisgIFsnPSddID0gImVxdWFscyIsCisgIFsnPCddID0gImxlc3MgdGhhbiIsCisgIFsnPiddID0gImdyZWF0ZXIgdGhhbiIsCisKKyAgWycoJ10gPSAibGVmdCBwYXJlbnRoZXNpcyIsCisgIFsnKSddID0gInJpZ2h0IHBhcmVudGhlc2lzIiwKKyAgWydbJ10gPSAibGVmdCBicmFja2V0IiwKKyAgWyddJ10gPSAicmlnaHQgYnJhY2tldCIsCisgIFsneyddID0gImxlZnQgYnJhY2UiLAorICBbJ30nXSA9ICJyaWdodCBicmFjZSIsCisKKyAgWyciJ10gPSAicXVvdGUiLAorICBbJ1wnJ10gPSAiYXBvc3Ryb3BoZSIsCisgIFsnLCddID0gImNvbW1hIiwKKyAgWyc7J10gPSAic2VtaWNvbG9uIiwKKyAgWyc6J10gPSAiY29sb24iLAorICBbJy4nXSA9ICJwZXJpb2QiLAorICBbJyEnXSA9ICJleGNsYW1hdGlvbiIsCisgIFsnPyddID0gInF1ZXN0aW9uIiwKKworICBbJ2AnXSA9ICJncmF2ZSIsCisgIFsnfiddID0gInRpbGRlIiwKKyAgWydAJ10gPSAiYXQiLAorICBbJyMnXSA9ICJudW1iZXIiLAorICBbJyQnXSA9ICJkb2xsYXIiLAorICBbJyUnXSA9ICJwZXJjZW50IiwKKyAgWydeJ10gPSAiY2lyY3VtZmxleCIsCisgIFsnJiddID0gImFtcGVyc2FuZCIsCisgIFsnKiddID0gImFzdGVyaXNrIiwKKyAgWyctJ10gPSAiZGFzaCIsCisgIFsnXyddID0gInVuZGVyc2NvcmUiLAorCisgIFsnLyddID0gInNsYXNoIiwKKyAgWydcXCddID0gImJhY2tzbGFzaCIsCisgIFsnfCddID0gInZlcnRpY2FsIGJhciIsCisKKyAgW0FTQ0lJX05VTF0gPSAibnVsbCIsCisgIFtBU0NJSV9TT0hdID0gInN0YXJ0IG9mIGhlYWRlciIsCisgIFtBU0NJSV9TVFhdID0gInN0YXJ0IG9mIHRleHQiLAorICBbQVNDSUlfRVRYXSA9ICJlbmQgb2YgdGV4dCIsCisgIFtBU0NJSV9FT1RdID0gImVuZCBvZiB0cmFuc21pc3Npb24iLAorICBbQVNDSUlfRU5RXSA9ICJlbnF1aXJ5IiwKKyAgW0FTQ0lJX0FDS10gPSAiYWNrbm93bGVkZ2VtZW50IiwKKyAgW0FTQ0lJX0JFTF0gPSAiYmVsbCIsCisgIFtBU0NJSV9CU10gPSAiYmFja3NwYWNlIiwKKyAgW0FTQ0lJX0hUXSA9ICJob3Jpem9udGFsIHRhYiIsCisgIFtBU0NJSV9MRl0gPSAibGluZSBmZWVkIiwKKyAgW0FTQ0lJX1ZUXSA9ICJ2ZXJ0aWNhbCB0YWIiLAorICBbQVNDSUlfRkZdID0gImZvcm0gZmVlZCIsCisgIFtBU0NJSV9DUl0gPSAiY2FycmlhZ2UgcmV0dXJuIiwKKyAgW0FTQ0lJX1NPXSA9ICJzaGlmdCBvdXQiLAorICBbQVNDSUlfU0ldID0gInNoaWZ0IGluIiwKKyAgW0FTQ0lJX0RMRV0gPSAiZGF0YSBsaW5rIGVzY2FwZSIsCisgIFtBU0NJSV9EQzFdID0gImRldmljZSBjb250cm9sIG9uZSIsCisgIFtBU0NJSV9EQzJdID0gImRldmljZSBjb250cm9sIHR3byIsCisgIFtBU0NJSV9EQzNdID0gImRldmljZSBjb250cm9sIHRocmVlIiwKKyAgW0FTQ0lJX0RDNF0gPSAiZGV2aWNlIGNvbnRyb2wgZm91ciIsCisgIFtBU0NJSV9OQUtdID0gIm5lZ2F0aXZlIGFja25vd2xlZGdlbWVudCIsCisgIFtBU0NJSV9TWU5dID0gInN5bmNocm9ub3VzIGlkbGUiLAorICBbQVNDSUlfRVRCXSA9ICJlbmQgb2YgdHJhbnNtaXNzaW9uIGJsb2NrIiwKKyAgW0FTQ0lJX0NBTl0gPSAiY2FuY2VsIiwKKyAgW0FTQ0lJX0VNXSA9ICJlbmQgb2YgbWVkaXVtIiwKKyAgW0FTQ0lJX1NVQl0gPSAic3Vic3RpdHV0ZSIsCisgIFtBU0NJSV9FU0NdID0gImVzY2FwZSIsCisgIFtBU0NJSV9GU10gPSAiZmlsZSBzZXBhcmF0b3IiLAorICBbQVNDSUlfR1NdID0gImdyb3VwIHNlcGFyYXRvciIsCisgIFtBU0NJSV9SU10gPSAicmVjb3JkIHNlcGFyYXRvciIsCisgIFtBU0NJSV9VU10gPSAidW5pdCBzZXBhcmF0b3IiLAorICBbQVNDSUlfREVMXSA9ICJkZWxldGUiLAorfTsKKworc3RhdGljIGNvbnN0IGNoYXIgKgorZ2V0UGhvbmV0aWNXb3JkICh3Y2hhcl90IGNoYXJhY3RlcikgeworICBpZiAoY2hhcmFjdGVyID49IEFSUkFZX0NPVU5UKHBob25ldGljV29yZHMpKSByZXR1cm4gTlVMTDsKKyAgcmV0dXJuIHBob25ldGljV29yZHNbY2hhcmFjdGVyXTsKK30KKworU1RSX0JFR0lOX0ZPUk1BVFRFUihmb3JtYXRQaG9uZXRpY1BocmFzZSwgaW50IGNvbHVtbiwgaW50IHJvdykKKyAgd2NoYXJfdCBjaGFyYWN0ZXIgPSBnZXRTY3JlZW5DaGFyYWN0ZXIoY29sdW1uLCByb3cpLnRleHQ7CisKKyAgd2NoYXJfdCBjaGFyYWN0ZXJzWzBYMTBdOworICBzaXplX3QgY2hhcmFjdGVyQ291bnQgPSBkZWNvbXBvc2VDaGFyYWN0ZXIoY2hhcmFjdGVyLCBjaGFyYWN0ZXJzLCBBUlJBWV9DT1VOVChjaGFyYWN0ZXJzKSk7CisKKyAgaWYgKCFjaGFyYWN0ZXJDb3VudCkgeworICAgIGNoYXJhY3RlcnNbMF0gPSBjaGFyYWN0ZXI7CisgICAgY2hhcmFjdGVyQ291bnQgPSAxOworICB9CisKKyAgZm9yICh1bnNpZ25lZCBpbnQgY2hhcmFjdGVySW5kZXg9MDsgY2hhcmFjdGVySW5kZXg8Y2hhcmFjdGVyQ291bnQ7IGNoYXJhY3RlckluZGV4Kz0xKSB7CisgICAgaWYgKGNoYXJhY3RlckluZGV4ID4gMCkgeworICAgICAgU1RSX1BSSU5URigiJXMgIiwgKChjaGFyYWN0ZXJJbmRleCA9PSAxKT8gIiB3aXRoIjogIiwiKSk7CisgICAgfQorCisgICAgY2hhcmFjdGVyID0gY2hhcmFjdGVyc1tjaGFyYWN0ZXJJbmRleF07CisgICAgY29uc3QgY2hhciAqd29yZCA9IGdldFBob25ldGljV29yZChjaGFyYWN0ZXIpOworICAgIGNoYXIgbmFtZUJ1ZmZlclswWDQwXTsKKworICAgIGlmICghd29yZCkgeworICAgICAgaWYgKGlzd3VwcGVyKGNoYXJhY3RlcikpIHsKKyAgICAgICAgd2NoYXJfdCBsb3dlcmNhc2UgPSB0b3dsb3dlcihjaGFyYWN0ZXIpOworICAgICAgICB3b3JkID0gZ2V0UGhvbmV0aWNXb3JkKGxvd2VyY2FzZSk7CisKKyAgICAgICAgaWYgKHdvcmQpIHsKKyAgICAgICAgICBTVFJfUFJJTlRGKCJjYXAgIik7CisgICAgICAgICAgY2hhcmFjdGVyID0gbG93ZXJjYXNlOworICAgICAgICB9CisgICAgICB9CisgICAgfQorCisgICAgaWYgKCF3b3JkKSB7CisgICAgICBpZiAoZ2V0Q2hhcmFjdGVyTmFtZShjaGFyYWN0ZXIsIG5hbWVCdWZmZXIsIHNpemVvZihuYW1lQnVmZmVyKSkpIHsKKyAgICAgICAgd29yZCA9IG5hbWVCdWZmZXI7CisKKyAgICAgICAgeworICAgICAgICAgIGNoYXIgKmJ5dGUgPSBuYW1lQnVmZmVyOworCisgICAgICAgICAgd2hpbGUgKCpieXRlKSB7CisgICAgICAgICAgICAqYnl0ZSA9IHRvbG93ZXIoKHVuc2lnbmVkIGNoYXIpKmJ5dGUpOworICAgICAgICAgICAgYnl0ZSArPSAxOworICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHsKKyAgICAgICAgICBjb25zdCBjaGFyICpzcGFjZSA9IHN0cmNocih3b3JkLCAnICcpOworCisgICAgICAgICAgaWYgKHNwYWNlKSB7CisgICAgICAgICAgICBzaXplX3QgbGVuZ3RoID0gc3BhY2UgLSB3b3JkICsgMTsKKyAgICAgICAgICAgIGlmIChtZW1jbXAod29yZCwgICJjb21iaW5pbmcgIiwgbGVuZ3RoKSA9PSAwKSB3b3JkICs9IGxlbmd0aDsKKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9CisKKyAgICBpZiAod29yZCkgeworICAgICAgaWYgKFNUUl9MRU5HVEggPiAwKSBTVFJfUFJJTlRGKCIgIik7CisgICAgICBTVFJfUFJJTlRGKCIlcyIsIHdvcmQpOworICAgIH0KKyAgfQorU1RSX0VORF9GT1JNQVRURVIKZGlmZiAtLWdpdCBhL1Byb2dyYW1zL2NtZF91dGlscy5oIGIvUHJvZ3JhbXMvY21kX3V0aWxzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDdiZWFhOQotLS0gL2Rldi9udWxsCisrKyBiL1Byb2dyYW1zL2NtZF91dGlscy5oCkBAIC0wLDAgKzEsNDEgQEAKKy8qCisgKiBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorICogICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorICoKKyAqIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorICoKKyAqIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyAqLworCisjaWZuZGVmIEJSTFRUWV9JTkNMVURFRF9DTURfVVRJTFMKKyNkZWZpbmUgQlJMVFRZX0lOQ0xVREVEX0NNRF9VVElMUworCisjaW5jbHVkZSAic3RyZm10aC5oIgorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmIC8qIF9fY3BsdXNwbHVzICovCisKK2V4dGVybiB2b2lkIGFsZXJ0TGluZVNraXBwZWQgKHVuc2lnbmVkIGludCAqY291bnQpOworCitleHRlcm4gaW50IGlzVGV4dE9mZnNldCAoaW50IGFyZywgaW50ICpmaXJzdCwgaW50ICpsYXN0LCBpbnQgcmVsYXhlZCk7CisKK2V4dGVybiBpbnQgZ2V0Q2hhcmFjdGVyQ29vcmRpbmF0ZXMgKGludCBhcmcsIGludCAqcm93LCBpbnQgKmZpcnN0LCBpbnQgKmxhc3QsIGludCByZWxheGVkKTsKKworZXh0ZXJuIFNUUl9ERUNMQVJFX0ZPUk1BVFRFUihmb3JtYXRDaGFyYWN0ZXJEZXNjcmlwdGlvbiwgaW50IGNvbHVtbiwgaW50IHJvdyk7CitleHRlcm4gU1RSX0RFQ0xBUkVfRk9STUFUVEVSKGZvcm1hdFBob25ldGljUGhyYXNlLCBpbnQgY29sdW1uLCBpbnQgcm93KTsKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYgLyogX19jcGx1c3BsdXMgKi8KKworI2VuZGlmIC8qIEJSTFRUWV9JTkNMVURFRF9DTURfVVRJTFMgKi8KZGlmZiAtLWdpdCBhL1Byb2dyYW1zL2NtZGxpbmUuYyBiL1Byb2dyYW1zL2NtZGxpbmUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMTgzM2ExCi0tLSAvZGV2L251bGwKKysrIGIvUHJvZ3JhbXMvY21kbGluZS5jCkBAIC0wLDAgKzEsMTI2OCBAQAorLyoKKyAqIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisgKiAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisgKgorICogQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKKyNpbmNsdWRlICJwcm9sb2d1ZS5oIgorCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxzdHJpbmdzLmg+CisjaW5jbHVkZSA8Y3R5cGUuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorCisjaW5jbHVkZSAicHJvZ3JhbS5oIgorI2luY2x1ZGUgImNtZGxpbmUuaCIKKyNpbmNsdWRlICJwYXJhbXMuaCIKKyNpbmNsdWRlICJsb2cuaCIKKyNpbmNsdWRlICJzdHJmbXQuaCIKKyNpbmNsdWRlICJmaWxlLmgiCisjaW5jbHVkZSAiZGF0YWZpbGUuaCIKKyNpbmNsdWRlICJ1dGY4LmgiCisjaW5jbHVkZSAicGFyc2UuaCIKKworI3VuZGVmIEFMTE9XX0RPU19PUFRJT05fU1lOVEFYCisjaWYgZGVmaW5lZChfX01JTkdXMzJfXykgfHwgZGVmaW5lZChfX01TRE9TX18pCisjZGVmaW5lIEFMTE9XX0RPU19PUFRJT05fU1lOVEFYCisjZW5kaWYgLyogYWxsb3cgRE9TIHN5bnRheCAqLworCisjaWZkZWYgSEFWRV9HRVRPUFRfSAorI2luY2x1ZGUgPGdldG9wdC5oPgorI2VuZGlmIC8qIEhBVkVfR0VUT1BUX0ggKi8KKwordHlwZWRlZiBzdHJ1Y3QgeworICBjb25zdCBDb21tYW5kTGluZU9wdGlvbnMgKmNvbnN0IG9wdGlvbnM7CisgIHVpbnQ4X3QgKmNvbnN0IGVuc3VyZWRTZXR0aW5nczsKKworICB1aW50OF90IGV4aXRJbW1lZGlhdGVseToxOworICB1aW50OF90IHdhcm5pbmc6MTsKKyAgdWludDhfdCBzeW50YXhFcnJvcjoxOworfSBPcHRpb25Qcm9jZXNzaW5nSW5mb3JtYXRpb247CisKK3N0YXRpYyBpbnQKK2hhc0V4dGVuZGFibGVBcmd1bWVudCAoY29uc3QgQ29tbWFuZExpbmVPcHRpb24gKm9wdGlvbikgeworICByZXR1cm4gb3B0aW9uLT5hcmd1bWVudCAmJiAob3B0aW9uLT5mbGFncyAmIE9QVF9FeHRlbmQpOworfQorCitzdGF0aWMgdWludDhfdCAqCitnZXRFbnN1cmVkU2V0dGluZyAoCisgIGNvbnN0IE9wdGlvblByb2Nlc3NpbmdJbmZvcm1hdGlvbiAqaW5mbywKKyAgY29uc3QgQ29tbWFuZExpbmVPcHRpb24gKm9wdGlvbgorKSB7CisgIHJldHVybiAmaW5mby0+ZW5zdXJlZFNldHRpbmdzW29wdGlvbiAtIGluZm8tPm9wdGlvbnMtPnRhYmxlXTsKK30KKworc3RhdGljIHZvaWQKK3NldEVuc3VyZWRTZXR0aW5nICgKKyAgY29uc3QgT3B0aW9uUHJvY2Vzc2luZ0luZm9ybWF0aW9uICppbmZvLAorICBjb25zdCBDb21tYW5kTGluZU9wdGlvbiAqb3B0aW9uLAorICB1aW50OF90IHllcworKSB7CisgICpnZXRFbnN1cmVkU2V0dGluZyhpbmZvLCBvcHRpb24pID0geWVzOworfQorCitzdGF0aWMgaW50CitlbnN1cmVTZXR0aW5nICgKKyAgT3B0aW9uUHJvY2Vzc2luZ0luZm9ybWF0aW9uICppbmZvLAorICBjb25zdCBDb21tYW5kTGluZU9wdGlvbiAqb3B0aW9uLAorICBjb25zdCBjaGFyICp2YWx1ZQorKSB7CisgIHVpbnQ4X3QgKmVuc3VyZWQgPSBnZXRFbnN1cmVkU2V0dGluZyhpbmZvLCBvcHRpb24pOworCisgIGlmICghKmVuc3VyZWQgfHwgaGFzRXh0ZW5kYWJsZUFyZ3VtZW50KG9wdGlvbikpIHsKKyAgICAqZW5zdXJlZCA9IDE7CisKKyAgICBpZiAob3B0aW9uLT5hcmd1bWVudCkgeworICAgICAgaWYgKG9wdGlvbi0+c2V0dGluZy5zdHJpbmcpIHsKKyAgICAgICAgaWYgKG9wdGlvbi0+ZmxhZ3MgJiBPUFRfRXh0ZW5kKSB7CisgICAgICAgICAgaWYgKCFleHRlbmRTdHJpbmdTZXR0aW5nKG9wdGlvbi0+c2V0dGluZy5zdHJpbmcsIHZhbHVlLCAxKSkgcmV0dXJuIDA7CisgICAgICAgIH0gZWxzZSBpZiAoIWNoYW5nZVN0cmluZ1NldHRpbmcob3B0aW9uLT5zZXR0aW5nLnN0cmluZywgdmFsdWUpKSB7CisgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgaWYgKG9wdGlvbi0+c2V0dGluZy5mbGFnKSB7CisgICAgICAgIGlmIChvcHRpb24tPmZsYWdzICYgT1BUX0V4dGVuZCkgeworICAgICAgICAgIGludCBjb3VudDsKKworICAgICAgICAgIGlmIChpc0ludGVnZXIoJmNvdW50LCB2YWx1ZSkgJiYgKGNvdW50ID49IDApKSB7CisgICAgICAgICAgICAqb3B0aW9uLT5zZXR0aW5nLmZsYWcgPSBjb3VudDsKKyAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgbG9nTWVzc2FnZShMT0dfRVJSLCAiJXM6ICVzIiwgZ2V0dGV4dCgiaW52YWxpZCBjb3VudGVyIHNldHRpbmciKSwgdmFsdWUpOworICAgICAgICAgICAgaW5mby0+d2FybmluZyA9IDE7CisgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgIHVuc2lnbmVkIGludCBvbjsKKworICAgICAgICAgIGlmICh2YWxpZGF0ZUZsYWdLZXl3b3JkKCZvbiwgdmFsdWUpKSB7CisgICAgICAgICAgICAqb3B0aW9uLT5zZXR0aW5nLmZsYWcgPSBvbjsKKyAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgbG9nTWVzc2FnZShMT0dfRVJSLCAiJXM6ICVzIiwgZ2V0dGV4dCgiaW52YWxpZCBmbGFnIHNldHRpbmciKSwgdmFsdWUpOworICAgICAgICAgICAgaW5mby0+d2FybmluZyA9IDE7CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICB9CisgICAgfQorICB9CisKKyAgcmV0dXJuIDE7Cit9CisKK3N0YXRpYyB2b2lkCitzaG93V3JhcHBlZFRleHQgKAorICBGSUxFICpzdHJlYW0sIGNvbnN0IGNoYXIgKnRleHQsIGNoYXIgKmxpbmUsCisgIHVuc2lnbmVkIGludCBvZmZzZXQsIHVuc2lnbmVkIGludCB3aWR0aAorKSB7CisgIHVuc2lnbmVkIGludCBsaW1pdCA9IHdpZHRoIC0gb2Zmc2V0OworICB1bnNpZ25lZCBpbnQgY2hhcnNMZWZ0ID0gc3RybGVuKHRleHQpOworCisgIHdoaWxlICgxKSB7CisgICAgdW5zaWduZWQgaW50IGNoYXJDb3VudCA9IGNoYXJzTGVmdDsKKworICAgIGlmIChjaGFyQ291bnQgPiBsaW1pdCkgeworICAgICAgY2hhckNvdW50ID0gbGltaXQ7CisKKyAgICAgIHdoaWxlIChjaGFyQ291bnQgPiAwKSB7CisgICAgICAgIGlmIChpc3NwYWNlKHRleHRbY2hhckNvdW50XSkpIGJyZWFrOworICAgICAgICBjaGFyQ291bnQgLT0gMTsKKyAgICAgIH0KKworICAgICAgd2hpbGUgKGNoYXJDb3VudCA+IDApIHsKKyAgICAgICAgaWYgKCFpc3NwYWNlKHRleHRbLS1jaGFyQ291bnRdKSkgeworICAgICAgICAgIGNoYXJDb3VudCArPSAxOworICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICB9CisgICAgfQorCisgICAgaWYgKGNoYXJDb3VudCA+IDApIHsKKyAgICAgIG1lbWNweShsaW5lK29mZnNldCwgdGV4dCwgY2hhckNvdW50KTsKKyAgICAgIHVuc2lnbmVkIGludCBsZW5ndGggPSBvZmZzZXQgKyBjaGFyQ291bnQ7CisKKyAgICAgIHdyaXRlV2l0aENvbnNvbGVFbmNvZGluZyhzdHJlYW0sIGxpbmUsIGxlbmd0aCk7CisgICAgICBmcHV0YygnXG4nLCBzdHJlYW0pOworICAgIH0KKworICAgIHdoaWxlIChjaGFyQ291bnQgPCBjaGFyc0xlZnQpIHsKKyAgICAgIGlmICghaXNzcGFjZSh0ZXh0W2NoYXJDb3VudF0pKSBicmVhazsKKyAgICAgIGNoYXJDb3VudCArPSAxOworICAgIH0KKworICAgIGlmICghKGNoYXJzTGVmdCAtPSBjaGFyQ291bnQpKSBicmVhazsKKyAgICB0ZXh0ICs9IGNoYXJDb3VudDsKKyAgICBtZW1zZXQobGluZSwgJyAnLCBvZmZzZXQpOworICB9Cit9CisKK3N0YXRpYyB2b2lkCitzaG93Rm9ybWF0dGVkTGluZXMgKAorICBGSUxFICpzdHJlYW0sIGNvbnN0IGNoYXIgKmNvbnN0ICpjb25zdCAqYmxvY2tzLAorICBjaGFyICpsaW5lLCBpbnQgd2lkdGgKKykgeworICBjb25zdCBjaGFyICpjb25zdCAqY29uc3QgKmJsb2NrID0gYmxvY2tzOworCisgIGNoYXIgKnBhcmFncmFwaFRleHQgPSBOVUxMOworICBzaXplX3QgcGFyYWdyYXBoU2l6ZSA9IDA7CisgIHNpemVfdCBwYXJhZ3JhcGhMZW5ndGggPSAwOworCisgIHdoaWxlICgqYmxvY2spIHsKKyAgICBjb25zdCBjaGFyICpjb25zdCAqY2h1bmsgPSAqYmxvY2srKzsKKyAgICBpZiAoISpjaHVuaykgY29udGludWU7CisKKyAgICB3aGlsZSAoMSkgeworICAgICAgY29uc3QgY2hhciAqdGV4dCA9ICpjaHVuazsKKyAgICAgIGlmICghdGV4dCkgYnJlYWs7CisgICAgICB0ZXh0ID0gZ2V0dGV4dCh0ZXh0KTsKKworICAgICAgaWYgKCp0ZXh0ICYmICFpc3dzcGFjZSgqdGV4dCkpIHsKKyAgICAgICAgc2l6ZV90IHRleHRMZW5ndGggPSBzdHJsZW4odGV4dCk7CisKKyAgICAgICAgc2l6ZV90IG5ld0xlbmd0aCA9IHBhcmFncmFwaExlbmd0aCArIHRleHRMZW5ndGggKyAxOworICAgICAgICBpbnQgZXh0ZW5kaW5nID0gISFwYXJhZ3JhcGhMZW5ndGg7CisgICAgICAgIGlmIChleHRlbmRpbmcpIG5ld0xlbmd0aCArPSAxOworCisgICAgICAgIGlmIChuZXdMZW5ndGggPiBwYXJhZ3JhcGhTaXplKSB7CisgICAgICAgICAgc2l6ZV90IG5ld1NpemUgPSAobmV3TGVuZ3RoIHwgMFhGRikgKyAxOworICAgICAgICAgIGNoYXIgKm5ld1RleHQgPSByZWFsbG9jKHBhcmFncmFwaFRleHQsIG5ld1NpemUpOworCisgICAgICAgICAgaWYgKCFuZXdUZXh0KSB7CisgICAgICAgICAgICBsb2dNYWxsb2NFcnJvcigpOworICAgICAgICAgICAgZ290byBkb25lOworICAgICAgICAgIH0KKworICAgICAgICAgIHBhcmFncmFwaFRleHQgPSBuZXdUZXh0OworICAgICAgICAgIHBhcmFncmFwaFNpemUgPSBuZXdTaXplOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGV4dGVuZGluZykgcGFyYWdyYXBoVGV4dFtwYXJhZ3JhcGhMZW5ndGgrK10gPSAnICc7CisgICAgICAgIG1lbWNweSgmcGFyYWdyYXBoVGV4dFtwYXJhZ3JhcGhMZW5ndGhdLCB0ZXh0LCB0ZXh0TGVuZ3RoKTsKKyAgICAgICAgcGFyYWdyYXBoVGV4dFtwYXJhZ3JhcGhMZW5ndGggKz0gdGV4dExlbmd0aF0gPSAwOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKHBhcmFncmFwaExlbmd0aCkgeworICAgICAgICAgIHNob3dXcmFwcGVkVGV4dChzdHJlYW0sIHBhcmFncmFwaFRleHQsIGxpbmUsIDAsIHdpZHRoKTsKKyAgICAgICAgICBwYXJhZ3JhcGhMZW5ndGggPSAwOworICAgICAgICB9CisKKyAgICAgICAgZnByaW50ZihzdHJlYW0sICIlc1xuIiwgdGV4dCk7CisgICAgICB9CisKKyAgICAgIGNodW5rICs9IDE7CisgICAgfQorCisgICAgaWYgKHBhcmFncmFwaExlbmd0aCkgeworICAgICAgc2hvd1dyYXBwZWRUZXh0KHN0cmVhbSwgcGFyYWdyYXBoVGV4dCwgbGluZSwgMCwgd2lkdGgpOworICAgICAgcGFyYWdyYXBoTGVuZ3RoID0gMDsKKyAgICB9CisKKyAgICBpZiAoKmJsb2NrKSBmcHV0YygnXG4nLCBzdHJlYW0pOworICB9CisKK2RvbmU6CisgIGlmIChwYXJhZ3JhcGhUZXh0KSBmcmVlKHBhcmFncmFwaFRleHQpOworfQorCitzdGF0aWMgdm9pZAorc2hvd1N5bnRheCAoCisgIEZJTEUgKnN0cmVhbSwKKyAgaW50IGhhdmVPcHRpb25zLAorICBjb25zdCBjaGFyICpwYXJhbWV0ZXJzCispIHsKKyAgZnByaW50ZihzdHJlYW0sICIlczogJXMiLCBnZXR0ZXh0KCJTeW50YXgiKSwgcHJvZ3JhbU5hbWUpOworCisgIGlmIChoYXZlT3B0aW9ucykgeworICAgIGZwcmludGYoc3RyZWFtLCAiIFstJXMgLi4uXSIsIGdldHRleHQoIm9wdGlvbiIpKTsKKyAgfQorCisgIGlmIChwYXJhbWV0ZXJzICYmICpwYXJhbWV0ZXJzKSB7CisgICAgZnByaW50ZihzdHJlYW0sICIgJXMiLCBwYXJhbWV0ZXJzKTsKKyAgfQorCisgIGZwcmludGYoc3RyZWFtLCAiXG4iKTsKK30KKworc3RhdGljIHZvaWQKK3Nob3dPcHRpb25zICgKKyAgRklMRSAqc3RyZWFtLCBjaGFyICpsaW5lLCB1bnNpZ25lZCBpbnQgbGluZVdpZHRoLAorICBPcHRpb25Qcm9jZXNzaW5nSW5mb3JtYXRpb24gKmluZm8KKykgeworICBzaXplX3Qgb3B0aW9uQ291bnQgPSBpbmZvLT5vcHRpb25zLT5jb3VudDsKKworICBpZiAoaW5mby0+b3B0aW9ucy0+Y291bnQgPiAwKSB7CisgICAgdW5zaWduZWQgaW50IGxldHRlcldpZHRoID0gMDsKKyAgICB1bnNpZ25lZCBpbnQgd29yZFdpZHRoID0gMDsKKyAgICB1bnNpZ25lZCBpbnQgYXJndW1lbnRXaWR0aCA9IDA7CisKKyAgICBmb3IgKHVuc2lnbmVkIGludCBvcHRpb25JbmRleD0wOyBvcHRpb25JbmRleDxvcHRpb25Db3VudDsgb3B0aW9uSW5kZXgrPTEpIHsKKyAgICAgIGNvbnN0IENvbW1hbmRMaW5lT3B0aW9uICpvcHRpb24gPSAmaW5mby0+b3B0aW9ucy0+dGFibGVbb3B0aW9uSW5kZXhdOworCisgICAgICBpZiAob3B0aW9uLT53b3JkKSB7CisgICAgICAgIHVuc2lnbmVkIGludCBsZW5ndGggPSBzdHJsZW4ob3B0aW9uLT53b3JkKTsKKyAgICAgICAgaWYgKG9wdGlvbi0+YXJndW1lbnQpIGxlbmd0aCArPSAxOworICAgICAgICB3b3JkV2lkdGggPSBNQVgod29yZFdpZHRoLCBsZW5ndGgpOworICAgICAgfQorCisgICAgICBpZiAob3B0aW9uLT5sZXR0ZXIpIGxldHRlcldpZHRoID0gMjsKKyAgICAgIGlmIChvcHRpb24tPmFyZ3VtZW50KSBhcmd1bWVudFdpZHRoID0gTUFYKGFyZ3VtZW50V2lkdGgsIHN0cmxlbihnZXR0ZXh0KG9wdGlvbi0+YXJndW1lbnQpKSk7CisgICAgfQorCisgICAgZnByaW50ZihzdHJlYW0sICJcbiVzOlxuIiwgZ2V0dGV4dCgiT3B0aW9ucyIpKTsKKworICAgIGZvciAodW5zaWduZWQgaW50IG9wdGlvbkluZGV4PTA7IG9wdGlvbkluZGV4PG9wdGlvbkNvdW50OyBvcHRpb25JbmRleCs9MSkgeworICAgICAgY29uc3QgQ29tbWFuZExpbmVPcHRpb24gKm9wdGlvbiA9ICZpbmZvLT5vcHRpb25zLT50YWJsZVtvcHRpb25JbmRleF07CisKKyAgICAgIHVuc2lnbmVkIGludCBsaW5lTGVuZ3RoID0gMDsKKyAgICAgIHdoaWxlIChsaW5lTGVuZ3RoIDwgMikgbGluZVtsaW5lTGVuZ3RoKytdID0gJyAnOworCisgICAgICB7CisgICAgICAgIHVuc2lnbmVkIGludCBlbmQgPSBsaW5lTGVuZ3RoICsgbGV0dGVyV2lkdGg7CisKKyAgICAgICAgaWYgKG9wdGlvbi0+bGV0dGVyKSB7CisgICAgICAgICAgbGluZVtsaW5lTGVuZ3RoKytdID0gJy0nOworICAgICAgICAgIGxpbmVbbGluZUxlbmd0aCsrXSA9IG9wdGlvbi0+bGV0dGVyOworICAgICAgICB9CisKKyAgICAgICAgd2hpbGUgKGxpbmVMZW5ndGggPCBsZXR0ZXJXaWR0aCkgeworICAgICAgICAgIGxpbmVbbGluZUxlbmd0aCsrXSA9ICcgJzsKKyAgICAgICAgfQorCisgICAgICAgIHdoaWxlIChsaW5lTGVuZ3RoIDwgZW5kKSBsaW5lW2xpbmVMZW5ndGgrK10gPSAnICc7CisgICAgICB9CisgICAgICBsaW5lW2xpbmVMZW5ndGgrK10gPSAnICc7CisKKyAgICAgIHsKKyAgICAgICAgdW5zaWduZWQgaW50IGVuZCA9IGxpbmVMZW5ndGggKyAyICsgd29yZFdpZHRoOworCisgICAgICAgIGlmIChvcHRpb24tPndvcmQpIHsKKyAgICAgICAgICBzaXplX3Qgd29yZExlbmd0aCA9IHN0cmxlbihvcHRpb24tPndvcmQpOworCisgICAgICAgICAgbGluZVtsaW5lTGVuZ3RoKytdID0gJy0nOworICAgICAgICAgIGxpbmVbbGluZUxlbmd0aCsrXSA9ICctJzsKKyAgICAgICAgICBtZW1jcHkobGluZStsaW5lTGVuZ3RoLCBvcHRpb24tPndvcmQsIHdvcmRMZW5ndGgpOworICAgICAgICAgIGxpbmVMZW5ndGggKz0gd29yZExlbmd0aDsKKyAgICAgICAgICBpZiAob3B0aW9uLT5hcmd1bWVudCkgbGluZVtsaW5lTGVuZ3RoKytdID0gJz0nOworICAgICAgICB9CisKKyAgICAgICAgd2hpbGUgKGxpbmVMZW5ndGggPCBlbmQpIGxpbmVbbGluZUxlbmd0aCsrXSA9ICcgJzsKKyAgICAgIH0KKyAgICAgIGxpbmVbbGluZUxlbmd0aCsrXSA9ICcgJzsKKworICAgICAgeworICAgICAgICB1bnNpZ25lZCBpbnQgZW5kID0gbGluZUxlbmd0aCArIGFyZ3VtZW50V2lkdGg7CisKKyAgICAgICAgaWYgKG9wdGlvbi0+YXJndW1lbnQpIHsKKyAgICAgICAgICBjb25zdCBjaGFyICphcmd1bWVudCA9IGdldHRleHQob3B0aW9uLT5hcmd1bWVudCk7CisgICAgICAgICAgc2l6ZV90IGFyZ3VtZW50TGVuZ3RoID0gc3RybGVuKGFyZ3VtZW50KTsKKworICAgICAgICAgIG1lbWNweShsaW5lK2xpbmVMZW5ndGgsIGFyZ3VtZW50LCBhcmd1bWVudExlbmd0aCk7CisgICAgICAgICAgbGluZUxlbmd0aCArPSBhcmd1bWVudExlbmd0aDsKKyAgICAgICAgfQorCisgICAgICAgIHdoaWxlIChsaW5lTGVuZ3RoIDwgZW5kKSBsaW5lW2xpbmVMZW5ndGgrK10gPSAnICc7CisgICAgICB9CisgICAgICBsaW5lW2xpbmVMZW5ndGgrK10gPSAnICc7CisKKyAgICAgIGxpbmVbbGluZUxlbmd0aCsrXSA9ICcgJzsKKyAgICAgIHsKKyAgICAgICAgY29uc3QgaW50IGZvcm1hdFN0cmluZ3MgPSAhIShvcHRpb24tPmZsYWdzICYgT1BUX0Zvcm1hdCk7CisgICAgICAgIGNvbnN0IGNoYXIgKmRlc2NyaXB0aW9uID0gb3B0aW9uLT5kZXNjcmlwdGlvbj8gZ2V0dGV4dChvcHRpb24tPmRlc2NyaXB0aW9uKTogIiI7CisKKyAgICAgICAgY2hhciBidWZmZXJbMFg0MDBdOworICAgICAgICBjaGFyICpmcm9tID0gYnVmZmVyOworICAgICAgICBjb25zdCBjaGFyICpjb25zdCB0byA9IGZyb20gKyBzaXplb2YoYnVmZmVyKTsKKworICAgICAgICBpZiAoZm9ybWF0U3RyaW5ncz8gISFvcHRpb24tPnN0cmluZ3MuZm9ybWF0OiAhIW9wdGlvbi0+c3RyaW5ncy5hcnJheSkgeworICAgICAgICAgIHVuc2lnbmVkIGludCBpbmRleCA9IDA7CisgICAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IGxpbWl0ID0gNDsKKyAgICAgICAgICBjb25zdCBjaGFyICpzdHJpbmdzW2xpbWl0XTsKKworICAgICAgICAgIHdoaWxlIChpbmRleCA8IGxpbWl0KSB7CisgICAgICAgICAgICBjb25zdCBjaGFyICpzdHJpbmc7CisKKyAgICAgICAgICAgIGlmIChmb3JtYXRTdHJpbmdzKSB7CisgICAgICAgICAgICAgIHNpemVfdCBsZW5ndGggPSBvcHRpb24tPnN0cmluZ3MuZm9ybWF0KGZyb20sICh0byAtIGZyb20pLCBpbmRleCk7CisKKyAgICAgICAgICAgICAgaWYgKGxlbmd0aCkgeworICAgICAgICAgICAgICAgIHN0cmluZyA9IGZyb207CisgICAgICAgICAgICAgICAgZnJvbSArPSBsZW5ndGggKyAxOworICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHN0cmluZyA9IE5VTEw7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgIHN0cmluZyA9IG9wdGlvbi0+c3RyaW5ncy5hcnJheVtpbmRleF07CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICghc3RyaW5nKSBicmVhazsKKyAgICAgICAgICAgIHN0cmluZ3NbaW5kZXgrK10gPSBzdHJpbmc7CisgICAgICAgICAgfQorCisgICAgICAgICAgd2hpbGUgKGluZGV4IDwgbGltaXQpIHN0cmluZ3NbaW5kZXgrK10gPSAiIjsKKyAgICAgICAgICBzbnByaW50Zihmcm9tLCAodG8gLSBmcm9tKSwKKyAgICAgICAgICAgIGRlc2NyaXB0aW9uLCBzdHJpbmdzWzBdLCBzdHJpbmdzWzFdLCBzdHJpbmdzWzJdLCBzdHJpbmdzWzNdCisgICAgICAgICAgKTsKKyAgICAgICAgICBkZXNjcmlwdGlvbiA9IGZyb207CisgICAgICAgIH0KKworICAgICAgICBzaG93V3JhcHBlZFRleHQoc3RyZWFtLCBkZXNjcmlwdGlvbiwgbGluZSwgbGluZUxlbmd0aCwgbGluZVdpZHRoKTsKKyAgICAgIH0KKyAgICB9CisgIH0KK30KKworc3RhdGljIHZvaWQKK3Byb2Nlc3NDb21tYW5kTGluZSAoCisgIE9wdGlvblByb2Nlc3NpbmdJbmZvcm1hdGlvbiAqaW5mbywKKyAgaW50ICphcmd1bWVudENvdW50LAorICBjaGFyICoqKmFyZ3VtZW50VmVjdG9yLAorICBjb25zdCBDb21tYW5kTGluZVVzYWdlICp1c2FnZQorKSB7CisgIGNvbnN0IGNoYXIgKnJlc2V0ID0gTlVMTDsKKyAgY29uc3QgY2hhciByZXNldFByZWZpeCA9ICcrJzsKKyAgaW50IHJlc2V0TGV0dGVyOworCisgIGludCBkb3NTeW50YXggPSAwOworICBjb25zdCBpbnQgZmlyc3ROb25MZXR0ZXIgPSAwWDgwOworICBjb25zdCBDb21tYW5kTGluZU9wdGlvbiAqbGV0dGVyVG9PcHRpb25bZmlyc3ROb25MZXR0ZXIgKyBpbmZvLT5vcHRpb25zLT5jb3VudF07CisKKyAgZm9yICh1bnNpZ25lZCBpbnQgaW5kZXg9MDsgaW5kZXg8QVJSQVlfQ09VTlQobGV0dGVyVG9PcHRpb24pOyBpbmRleCs9MSkgeworICAgIGxldHRlclRvT3B0aW9uW2luZGV4XSA9IE5VTEw7CisgIH0KKworICBpbnQgaW5kZXhUb0xldHRlcltpbmZvLT5vcHRpb25zLT5jb3VudF07CisgIGNoYXIgc2hvcnRPcHRpb25zWzIgKyAoaW5mby0+b3B0aW9ucy0+Y291bnQgKiAyKSArIDFdOworCisgIHsKKyAgICBpbnQgbmV4dE5vbkxldHRlciA9IGZpcnN0Tm9uTGV0dGVyOworCisgICAgY2hhciAqb3B0ID0gc2hvcnRPcHRpb25zOworICAgICpvcHQrKyA9ICcrJzsgLy8gc3RvcCBwYXJzaW5nIG9wdGlvbnMgYXMgc29vbiBhcyBhIG5vbi1vcHRpb24gYXJndW1lbnQgaXMgZW5jb3VudGVyZWQKKyAgICAqb3B0KysgPSAnOic7IC8vIERvbid0IHdyaXRlIGFueSBlcnJvciBtZXNzYWdlcworCisgICAgZm9yICh1bnNpZ25lZCBpbnQgaW5kZXg9MDsgaW5kZXg8aW5mby0+b3B0aW9ucy0+Y291bnQ7IGluZGV4Kz0xKSB7CisgICAgICBjb25zdCBDb21tYW5kTGluZU9wdGlvbiAqb3B0aW9uID0gJmluZm8tPm9wdGlvbnMtPnRhYmxlW2luZGV4XTsKKyAgICAgIGludCBsZXR0ZXIgPSBvcHRpb24tPmxldHRlcjsKKworICAgICAgaWYgKGxldHRlcikgeworICAgICAgICBpZiAobGV0dGVyVG9PcHRpb25bbGV0dGVyXSkgeworICAgICAgICAgIGxvZ01lc3NhZ2UoTE9HX1dBUk5JTkcsICJkdXBsaWNhdGUgc2hvcnQgb3B0aW9uOiAtJWMiLCBsZXR0ZXIpOworICAgICAgICAgIGxldHRlciA9IDA7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgKm9wdCsrID0gbGV0dGVyOworICAgICAgICAgIGlmIChvcHRpb24tPmFyZ3VtZW50KSAqb3B0KysgPSAnOic7CisgICAgICAgIH0KKyAgICAgIH0KKworICAgICAgaWYgKCFsZXR0ZXIpIGxldHRlciA9IG5leHROb25MZXR0ZXIrKzsKKyAgICAgIGluZGV4VG9MZXR0ZXJbaW5kZXhdID0gbGV0dGVyOworICAgICAgbGV0dGVyVG9PcHRpb25bbGV0dGVyXSA9IG9wdGlvbjsKKworICAgICAgaWYgKG9wdGlvbi0+YXJndW1lbnQpIHsKKyAgICAgICAgaWYgKG9wdGlvbi0+c2V0dGluZy5zdHJpbmcpICpvcHRpb24tPnNldHRpbmcuc3RyaW5nID0gTlVMTDsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIGlmIChvcHRpb24tPnNldHRpbmcuZmxhZykgKm9wdGlvbi0+c2V0dGluZy5mbGFnID0gMDsKKyAgICAgIH0KKyAgICB9CisKKyAgICAqb3B0ID0gMDsKKyAgfQorCisjaWZkZWYgSEFWRV9HRVRPUFRfTE9ORworICBzdHJ1Y3Qgb3B0aW9uIGxvbmdPcHRpb25zWyhpbmZvLT5vcHRpb25zLT5jb3VudCAqIDIpICsgMV07CisKKyAgeworICAgIHN0cnVjdCBvcHRpb24gKm9wdCA9IGxvbmdPcHRpb25zOworCisgICAgZm9yICh1bnNpZ25lZCBpbnQgaW5kZXg9MDsgaW5kZXg8aW5mby0+b3B0aW9ucy0+Y291bnQ7IGluZGV4Kz0xKSB7CisgICAgICBjb25zdCBDb21tYW5kTGluZU9wdGlvbiAqb3B0aW9uID0gJmluZm8tPm9wdGlvbnMtPnRhYmxlW2luZGV4XTsKKyAgICAgIGNvbnN0IGNoYXIgKndvcmQgPSBvcHRpb24tPndvcmQ7CisgICAgICBpZiAoIXdvcmQpIGNvbnRpbnVlOworICAgICAgaW50IGxldHRlciA9IGluZGV4VG9MZXR0ZXJbaW5kZXhdOworCisgICAgICBvcHQtPm5hbWUgPSB3b3JkOworICAgICAgb3B0LT5oYXNfYXJnID0gb3B0aW9uLT5hcmd1bWVudD8gcmVxdWlyZWRfYXJndW1lbnQ6IG5vX2FyZ3VtZW50OworICAgICAgb3B0LT5mbGFnID0gTlVMTDsKKyAgICAgIG9wdC0+dmFsID0gbGV0dGVyOworICAgICAgb3B0ICs9IDE7CisKKyAgICAgIGlmICghb3B0aW9uLT5hcmd1bWVudCAmJiBvcHRpb24tPnNldHRpbmcuZmxhZykgeworICAgICAgICBjaGFyICpuYW1lOworCisgICAgICAgIGNvbnN0IGNoYXIgKm5vUHJlZml4ID0gIm5vLSI7CisgICAgICAgIHNpemVfdCBub0xlbmd0aCA9IHN0cmxlbihub1ByZWZpeCk7CisKKyAgICAgICAgaWYgKHN0cm5jYXNlY21wKG5vUHJlZml4LCB3b3JkLCBub0xlbmd0aCkgPT0gMCkgeworICAgICAgICAgIG5hbWUgPSBzdHJkdXAoJndvcmRbbm9MZW5ndGhdKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICBzaXplX3Qgc2l6ZSA9IG5vTGVuZ3RoICsgc3RybGVuKHdvcmQpICsgMTsKKworICAgICAgICAgIGlmICgobmFtZSA9IG1hbGxvYyhzaXplKSkpIHsKKyAgICAgICAgICAgIHNucHJpbnRmKG5hbWUsIHNpemUsICIlcyVzIiwgbm9QcmVmaXgsIHdvcmQpOworICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmIChuYW1lKSB7CisgICAgICAgICAgb3B0LT5uYW1lID0gbmFtZTsKKyAgICAgICAgICBvcHQtPmhhc19hcmcgPSBub19hcmd1bWVudDsKKyAgICAgICAgICBvcHQtPmZsYWcgPSAmcmVzZXRMZXR0ZXI7CisgICAgICAgICAgb3B0LT52YWwgPSBsZXR0ZXI7CisgICAgICAgICAgb3B0ICs9IDE7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgbG9nTWFsbG9jRXJyb3IoKTsKKyAgICAgICAgfQorICAgICAgfQorICAgIH0KKworICAgIG1lbXNldChvcHQsIDAsIHNpemVvZigqb3B0KSk7CisgIH0KKyNlbmRpZiAvKiBIQVZFX0dFVE9QVF9MT05HICovCisKKyNpZmRlZiBBTExPV19ET1NfT1BUSU9OX1NZTlRBWAorICBjb25zdCBjaGFyIGRvc1ByZWZpeCA9ICcvJzsKKworICBpZiAoKmFyZ3VtZW50Q291bnQgPiAxKSB7CisgICAgaWYgKCooKmFyZ3VtZW50VmVjdG9yKVsxXSA9PSBkb3NQcmVmaXgpIHsKKyAgICAgIGRvc1N5bnRheCA9IDE7CisgICAgfQorICB9CisjZW5kaWYgLyogQUxMT1dfRE9TX09QVElPTl9TWU5UQVggKi8KKworICBvcHRlcnIgPSAwOworICBvcHRpbmQgPSAxOworICBpbnQgbGFzdE9wdEluZCA9IC0xOworICBpbnQgb3B0SGVscCA9IDA7CisKKyAgd2hpbGUgKDEpIHsKKyAgICBpbnQgbGV0dGVyOworICAgIGNoYXIgcHJlZml4ID0gJy0nOworICAgIHJlc2V0TGV0dGVyID0gMDsKKworICAgIGlmIChvcHRpbmQgPT0gKmFyZ3VtZW50Q291bnQpIHsKKyAgICAgIGxldHRlciA9IC0xOworICAgIH0gZWxzZSB7CisgICAgICBjaGFyICphcmd1bWVudCA9ICgqYXJndW1lbnRWZWN0b3IpW29wdGluZF07CisKKyNpZmRlZiBBTExPV19ET1NfT1BUSU9OX1NZTlRBWAorICAgICAgaWYgKGRvc1N5bnRheCkgeworICAgICAgICBwcmVmaXggPSBkb3NQcmVmaXg7CisgICAgICAgIG9wdGluZCArPSAxOworCisgICAgICAgIGlmICgqYXJndW1lbnQgIT0gZG9zUHJlZml4KSB7CisgICAgICAgICAgbGV0dGVyID0gLTE7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgY2hhciAqbmFtZSA9IGFyZ3VtZW50ICsgMTsKKyAgICAgICAgICBzaXplX3QgbmFtZUxlbmd0aCA9IHN0cmNzcG4obmFtZSwgIjoiKTsKKyAgICAgICAgICBjaGFyICp2YWx1ZSA9IG5hbWVbbmFtZUxlbmd0aF0/IChuYW1lICsgbmFtZUxlbmd0aCArIDEpOiBOVUxMOworICAgICAgICAgIGNvbnN0IENvbW1hbmRMaW5lT3B0aW9uICpvcHRpb247CisKKyAgICAgICAgICBpZiAobmFtZUxlbmd0aCA9PSAxKSB7CisgICAgICAgICAgICBvcHRpb24gPSBsZXR0ZXJUb09wdGlvbltsZXR0ZXIgPSAqbmFtZV07CisgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGxldHRlciA9IC0xOworCisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpbmRleD0wOyBpbmRleDxpbmZvLT5vcHRpb25zLT5jb3VudDsgaW5kZXgrPTEpIHsKKyAgICAgICAgICAgICAgb3B0aW9uID0gJmluZm8tPm9wdGlvbnMtPnRhYmxlW2luZGV4XTsKKyAgICAgICAgICAgICAgY29uc3QgY2hhciAqd29yZCA9IG9wdGlvbi0+d29yZDsKKworICAgICAgICAgICAgICBpZiAod29yZCkgeworICAgICAgICAgICAgICAgIGlmICgobmFtZUxlbmd0aCA9PSBzdHJsZW4od29yZCkpICYmCisgICAgICAgICAgICAgICAgICAgIChzdHJuY2FzZWNtcCh3b3JkLCBuYW1lLCBuYW1lTGVuZ3RoKSA9PSAwKSkgeworICAgICAgICAgICAgICAgICAgbGV0dGVyID0gaW5kZXhUb0xldHRlcltpbmRleF07CisgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGxldHRlciA8IDApIHsKKyAgICAgICAgICAgICAgb3B0aW9uID0gTlVMTDsKKyAgICAgICAgICAgICAgbGV0dGVyID0gMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9CisKKyAgICAgICAgICBvcHRvcHQgPSBsZXR0ZXI7CisgICAgICAgICAgb3B0YXJnID0gdmFsdWU7CisKKyAgICAgICAgICBpZiAoIW9wdGlvbikgeworICAgICAgICAgICAgbGV0dGVyID0gJz8nOworICAgICAgICAgIH0gZWxzZSBpZiAob3B0aW9uLT5hcmd1bWVudCkgeworICAgICAgICAgICAgaWYgKCFvcHRhcmcpIGxldHRlciA9ICc6JzsKKyAgICAgICAgICB9IGVsc2UgaWYgKHZhbHVlKSB7CisgICAgICAgICAgICB1bnNpZ25lZCBpbnQgb247CisKKyAgICAgICAgICAgIGlmICghdmFsaWRhdGVGbGFnS2V5d29yZCgmb24sIHZhbHVlKSkgeworICAgICAgICAgICAgICBsZXR0ZXIgPSAnLSc7CisgICAgICAgICAgICB9IGVsc2UgaWYgKCFvbikgeworICAgICAgICAgICAgICByZXNldExldHRlciA9IGxldHRlcjsKKyAgICAgICAgICAgICAgbGV0dGVyID0gMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgIH0gZWxzZQorI2VuZGlmIC8qIEFMTE9XX0RPU19PUFRJT05fU1lOVEFYICovCisKKyAgICAgIGlmIChyZXNldCkgeworICAgICAgICBwcmVmaXggPSByZXNldFByZWZpeDsKKworICAgICAgICBpZiAoIShsZXR0ZXIgPSAqcmVzZXQrKykpIHsKKyAgICAgICAgICByZXNldCA9IE5VTEw7CisgICAgICAgICAgb3B0aW5kICs9IDE7CisgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKworICAgICAgICB7CisgICAgICAgICAgY29uc3QgQ29tbWFuZExpbmVPcHRpb24gKm9wdGlvbiA9IGxldHRlclRvT3B0aW9uW2xldHRlcl07CisKKyAgICAgICAgICBpZiAob3B0aW9uICYmICFvcHRpb24tPmFyZ3VtZW50ICYmIG9wdGlvbi0+c2V0dGluZy5mbGFnKSB7CisgICAgICAgICAgICByZXNldExldHRlciA9IGxldHRlcjsKKyAgICAgICAgICAgIGxldHRlciA9IDA7CisgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIG9wdG9wdCA9IGxldHRlcjsKKyAgICAgICAgICAgIGxldHRlciA9ICc/JzsKKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgIH0gZWxzZSB7CisgICAgICAgIGlmIChvcHRpbmQgIT0gbGFzdE9wdEluZCkgeworICAgICAgICAgIGxhc3RPcHRJbmQgPSBvcHRpbmQ7CisgICAgICAgICAgaWYgKChyZXNldCA9ICgqYXJndW1lbnQgPT0gcmVzZXRQcmVmaXgpPyBhcmd1bWVudCsxOiBOVUxMKSkgY29udGludWU7CisgICAgICAgIH0KKworI2lmZGVmIEhBVkVfR0VUT1BUX0xPTkcKKyAgICAgICAgbGV0dGVyID0gZ2V0b3B0X2xvbmcoKmFyZ3VtZW50Q291bnQsICphcmd1bWVudFZlY3Rvciwgc2hvcnRPcHRpb25zLCBsb25nT3B0aW9ucywgTlVMTCk7CisjZWxzZSAvKiBIQVZFX0dFVE9QVF9MT05HICovCisgICAgICAgIGxldHRlciA9IGdldG9wdCgqYXJndW1lbnRDb3VudCwgKmFyZ3VtZW50VmVjdG9yLCBzaG9ydE9wdGlvbnMpOworI2VuZGlmIC8qIEhBVkVfR0VUT1BUX0xPTkcgKi8KKyAgICAgIH0KKyAgICB9CisKKyAgICBpZiAobGV0dGVyID09IC0xKSBicmVhazsKKyAgICAvKiBjb250aW51ZSBvbiBlcnJvciBhcyBtdWNoIGFzIHBvc3NpYmxlLCBhcyBvZnRlbiB3ZSBhcmUgdHlwaW5nIGJsaW5kCisgICAgICogYW5kIHdvbid0IGV2ZW4gc2VlIHRoZSBlcnJvciBtZXNzYWdlIHVubGVzcyB0aGUgZGlzcGxheSBjb21lcyB1cC4KKyAgICAgKi8KKworICAgIHN3aXRjaCAobGV0dGVyKSB7CisgICAgICBkZWZhdWx0OiB7CisgICAgICAgIGNvbnN0IENvbW1hbmRMaW5lT3B0aW9uICpvcHRpb24gPSBsZXR0ZXJUb09wdGlvbltsZXR0ZXJdOworCisgICAgICAgIGlmIChvcHRpb24tPmFyZ3VtZW50KSB7CisgICAgICAgICAgaWYgKCEqb3B0YXJnKSB7CisgICAgICAgICAgICBzZXRFbnN1cmVkU2V0dGluZyhpbmZvLCBvcHRpb24sIDApOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgfQorCisgICAgICAgICAgaWYgKG9wdGlvbi0+c2V0dGluZy5zdHJpbmcpIHsKKyAgICAgICAgICAgIGlmIChvcHRpb24tPmZsYWdzICYgT1BUX0V4dGVuZCkgeworICAgICAgICAgICAgICBleHRlbmRTdHJpbmdTZXR0aW5nKG9wdGlvbi0+c2V0dGluZy5zdHJpbmcsIG9wdGFyZywgMCk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICBjaGFuZ2VTdHJpbmdTZXR0aW5nKG9wdGlvbi0+c2V0dGluZy5zdHJpbmcsIG9wdGFyZyk7CisgICAgICAgICAgICB9CisgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgIGlmIChvcHRpb24tPnNldHRpbmcuZmxhZykgeworICAgICAgICAgICAgaWYgKG9wdGlvbi0+ZmxhZ3MgJiBPUFRfRXh0ZW5kKSB7CisgICAgICAgICAgICAgICpvcHRpb24tPnNldHRpbmcuZmxhZyArPSAxOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgKm9wdGlvbi0+c2V0dGluZy5mbGFnID0gMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBzZXRFbnN1cmVkU2V0dGluZyhpbmZvLCBvcHRpb24sIDEpOworICAgICAgICBicmVhazsKKyAgICAgIH0KKworICAgICAgY2FzZSAwOiB7IC8vIHJlc2V0IGEgZmxhZworICAgICAgICBjb25zdCBDb21tYW5kTGluZU9wdGlvbiAqb3B0aW9uID0gbGV0dGVyVG9PcHRpb25bcmVzZXRMZXR0ZXJdOworICAgICAgICAqb3B0aW9uLT5zZXR0aW5nLmZsYWcgPSAwOworICAgICAgICBzZXRFbnN1cmVkU2V0dGluZyhpbmZvLCBvcHRpb24sIDEpOworICAgICAgICBicmVhazsKKyAgICAgIH0KKworICAgIHsKKyAgICAgIGNvbnN0IGNoYXIgKnByb2JsZW07CisgICAgICBjaGFyIG1lc3NhZ2VbMFgxMDBdOworCisgICAgICBjYXNlICc/JzogLy8gYW4gdW5rbm93biBvcHRpb24gaGFzIGJlZW4gc3BlY2lmaWVkCisgICAgICAgIGluZm8tPnN5bnRheEVycm9yID0gMTsKKyAgICAgICAgcHJvYmxlbSA9IGdldHRleHQoInVua25vd24gb3B0aW9uIik7CisgICAgICAgIGdvdG8gbG9nT3B0aW9uUHJvYmxlbTsKKworICAgICAgY2FzZSAnOic6IC8vIHRoZSBvcGVyYW5kIGZvciBhIHN0cmluZyBvcHRpb24gaGFzbid0IGJlZW4gc3BlY2lmaWVkCisgICAgICAgIGluZm8tPnN5bnRheEVycm9yID0gMTsKKyAgICAgICAgcHJvYmxlbSA9IGdldHRleHQoIm1pc3Npbmcgb3BlcmFuZCIpOworICAgICAgICBnb3RvIGxvZ09wdGlvblByb2JsZW07CisKKyAgICAgIGNhc2UgJy0nOiAvLyB0aGUgb3BlcmFuZCBmb3IgYW4gb3B0aW9uIGlzIGludmFsaWQKKyAgICAgICAgaW5mby0+d2FybmluZyA9IDE7CisgICAgICAgIHByb2JsZW0gPSBnZXR0ZXh0KCJpbnZhbGlkIG9wZXJhbmQiKTsKKyAgICAgICAgZ290byBsb2dPcHRpb25Qcm9ibGVtOworCisgICAgICBsb2dPcHRpb25Qcm9ibGVtOgorICAgICAgICBTVFJfQkVHSU4obWVzc2FnZSwgc2l6ZW9mKG1lc3NhZ2UpKTsKKworICAgICAgICBTVFJfUFJJTlRGKCIlczogIiwgcHJvYmxlbSk7CisgICAgICAgIHNpemVfdCBvcHRpb25TdGFydCA9IFNUUl9MRU5HVEg7CisKKyAgICAgICAgaWYgKG9wdG9wdCkgeworICAgICAgICAgIGNvbnN0IENvbW1hbmRMaW5lT3B0aW9uICpvcHRpb24gPSBsZXR0ZXJUb09wdGlvbltvcHRvcHRdOworCisgICAgICAgICAgaWYgKG9wdGlvbikgeworICAgICAgICAgICAgY29uc3QgY2hhciAqYmVmb3JlTGV0dGVyID0gIiI7CisgICAgICAgICAgICBjb25zdCBjaGFyICphZnRlckxldHRlciA9ICIiOworCisgICAgICAgICAgICBpZiAob3B0aW9uLT53b3JkKSB7CisgICAgICAgICAgICAgIGlmICghZG9zU3ludGF4KSBTVFJfUFJJTlRGKCIlYyIsIHByZWZpeCk7CisgICAgICAgICAgICAgIFNUUl9QUklOVEYoIiVjJXMiLCBwcmVmaXgsIG9wdGlvbi0+d29yZCk7CisKKyAgICAgICAgICAgICAgYmVmb3JlTGV0dGVyID0gIiAoIjsKKyAgICAgICAgICAgICAgYWZ0ZXJMZXR0ZXIgPSAiKSI7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChvcHRpb24tPmxldHRlcikgeworICAgICAgICAgICAgICBTVFJfUFJJTlRGKCIlcyVjJWMlcyIsIGJlZm9yZUxldHRlciwgcHJlZml4LCBvcHRpb24tPmxldHRlciwgYWZ0ZXJMZXR0ZXIpOworICAgICAgICAgICAgfQorICAgICAgICAgIH0gZWxzZSBpZiAob3B0b3B0IDwgZmlyc3ROb25MZXR0ZXIpIHsKKyAgICAgICAgICAgIFNUUl9QUklOVEYoIiVjJWMiLCBwcmVmaXgsIG9wdG9wdCk7CisgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYgKFNUUl9MRU5HVEggPT0gb3B0aW9uU3RhcnQpIHsKKyAgICAgICAgICBTVFJfUFJJTlRGKCIlcyIsICgqYXJndW1lbnRWZWN0b3IpW29wdGluZC0xXSk7CisgICAgICAgIH0KKworICAgICAgICBTVFJfRU5EOworICAgICAgICBsb2dNZXNzYWdlKExPR19XQVJOSU5HLCAiJXMiLCBtZXNzYWdlKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgICBjYXNlICdoJzogLy8gaGVscCAtIHNob3cgdXNhZ2Ugc3VtbWFyeSBhbmQgdGhlbiBleGl0CisgICAgICAgIG9wdEhlbHAgPSAxOworICAgICAgICBicmVhazsKKyAgICB9CisgIH0KKworICAqYXJndW1lbnRWZWN0b3IgKz0gb3B0aW5kOworICAqYXJndW1lbnRDb3VudCAtPSBvcHRpbmQ7CisKKyAgaWYgKG9wdEhlbHApIHsKKyAgICBGSUxFICp1c2FnZVN0cmVhbSA9IHN0ZG91dDsKKworICAgIHNpemVfdCB3aWR0aCA9IFVJTlQxNl9NQVg7CisgICAgZ2V0Q29uc29sZVNpemUoJndpZHRoLCBOVUxMKTsKKyAgICBjaGFyIGxpbmVbd2lkdGgrMV07CisKKyAgICB7CisgICAgICBjb25zdCBjaGFyICpwdXJwb3NlID0gZ2V0dGV4dCh1c2FnZS0+cHVycG9zZSk7CisKKyAgICAgIGlmIChwdXJwb3NlICYmICpwdXJwb3NlKSB7CisgICAgICAgIHNob3dXcmFwcGVkVGV4dCh1c2FnZVN0cmVhbSwgcHVycG9zZSwgbGluZSwgMCwgd2lkdGgpOworICAgICAgICBmcHV0YygnXG4nLCB1c2FnZVN0cmVhbSk7CisgICAgICB9CisgICAgfQorCisgICAgc2hvd1N5bnRheCh1c2FnZVN0cmVhbSwgISFpbmZvLT5vcHRpb25zLT5jb3VudCwgdXNhZ2UtPnBhcmFtZXRlcnMpOworICAgIHNob3dPcHRpb25zKHVzYWdlU3RyZWFtLCBsaW5lLCB3aWR0aCwgaW5mbyk7CisKKyAgICB7CisgICAgICBjb25zdCBjaGFyICpjb25zdCAqY29uc3QgKm5vdGVzID0gdXNhZ2UtPm5vdGVzOworCisgICAgICBpZiAobm90ZXMgJiYgKm5vdGVzKSB7CisgICAgICAgIGZwdXRjKCdcbicsIHVzYWdlU3RyZWFtKTsKKyAgICAgICAgc2hvd0Zvcm1hdHRlZExpbmVzKHVzYWdlU3RyZWFtLCBub3RlcywgbGluZSwgd2lkdGgpOworICAgICAgfQorICAgIH0KKworICAgIGluZm8tPmV4aXRJbW1lZGlhdGVseSA9IDE7CisgIH0KKworI2lmZGVmIEhBVkVfR0VUT1BUX0xPTkcKKyAgeworICAgIHN0cnVjdCBvcHRpb24gKm9wdCA9IGxvbmdPcHRpb25zOworCisgICAgd2hpbGUgKG9wdC0+bmFtZSkgeworICAgICAgaWYgKG9wdC0+ZmxhZykgZnJlZSgoY2hhciAqKW9wdC0+bmFtZSk7CisgICAgICBvcHQgKz0gMTsKKyAgICB9CisgIH0KKyNlbmRpZiAvKiBIQVZFX0dFVE9QVF9MT05HICovCit9CisKK3N0YXRpYyB2b2lkCitwcm9jZXNzQm9vdFBhcmFtZXRlcnMgKAorICBPcHRpb25Qcm9jZXNzaW5nSW5mb3JtYXRpb24gKmluZm8sCisgIGNvbnN0IGNoYXIgKnBhcmFtZXRlcgorKSB7CisgIGNvbnN0IGNoYXIgKnZhbHVlOworICBjaGFyICphbGxvY2F0ZWQgPSBOVUxMOworCisgIGlmICghKHZhbHVlID0gYWxsb2NhdGVkID0gZ2V0Qm9vdFBhcmFtZXRlcnMocGFyYW1ldGVyKSkpIHsKKyAgICBpZiAoISh2YWx1ZSA9IGdldGVudihwYXJhbWV0ZXIpKSkgeworICAgICAgcmV0dXJuOworICAgIH0KKyAgfQorCisgIHsKKyAgICBpbnQgcGFyYW1ldGVyQ291bnQgPSAwOworICAgIGNoYXIgKipwYXJhbWV0ZXJzID0gc3BsaXRTdHJpbmcodmFsdWUsICcsJywgJnBhcmFtZXRlckNvdW50KTsKKworICAgIGZvciAodW5zaWduZWQgaW50IG9wdGlvbkluZGV4PTA7IG9wdGlvbkluZGV4PGluZm8tPm9wdGlvbnMtPmNvdW50OyBvcHRpb25JbmRleCs9MSkgeworICAgICAgY29uc3QgQ29tbWFuZExpbmVPcHRpb24gKm9wdGlvbiA9ICZpbmZvLT5vcHRpb25zLT50YWJsZVtvcHRpb25JbmRleF07CisKKyAgICAgIGlmICgob3B0aW9uLT5ib290UGFyYW1ldGVyKSAmJiAob3B0aW9uLT5ib290UGFyYW1ldGVyIDw9IHBhcmFtZXRlckNvdW50KSkgeworICAgICAgICBjaGFyICpwYXJhbWV0ZXIgPSBwYXJhbWV0ZXJzW29wdGlvbi0+Ym9vdFBhcmFtZXRlci0xXTsKKworICAgICAgICBpZiAoKnBhcmFtZXRlcikgeworICAgICAgICAgIHsKKyAgICAgICAgICAgIGNoYXIgKmJ5dGUgPSBwYXJhbWV0ZXI7CisKKyAgICAgICAgICAgIGRvIHsKKyAgICAgICAgICAgICAgaWYgKCpieXRlID09ICcrJykgKmJ5dGUgPSAnLCc7CisgICAgICAgICAgICB9IHdoaWxlICgqKytieXRlKTsKKyAgICAgICAgICB9CisKKyAgICAgICAgICBlbnN1cmVTZXR0aW5nKGluZm8sIG9wdGlvbiwgcGFyYW1ldGVyKTsKKyAgICAgICAgfQorICAgICAgfQorICAgIH0KKworICAgIGRlYWxsb2NhdGVTdHJpbmdzKHBhcmFtZXRlcnMpOworICB9CisKKyAgaWYgKGFsbG9jYXRlZCkgZnJlZShhbGxvY2F0ZWQpOworfQorCitzdGF0aWMgaW50Citwcm9jZXNzRW52aXJvbm1lbnRWYXJpYWJsZSAoCisgIE9wdGlvblByb2Nlc3NpbmdJbmZvcm1hdGlvbiAqaW5mbywKKyAgY29uc3QgQ29tbWFuZExpbmVPcHRpb24gKm9wdGlvbiwKKyAgY29uc3QgY2hhciAqcHJlZml4CispIHsKKyAgc2l6ZV90IHByZWZpeExlbmd0aCA9IHN0cmxlbihwcmVmaXgpOworCisgIGlmICgob3B0aW9uLT5mbGFncyAmIE9QVF9FbnZWYXIpICYmIG9wdGlvbi0+d29yZCkgeworICAgIHNpemVfdCBuYW1lU2l6ZSA9IHByZWZpeExlbmd0aCArIDEgKyBzdHJsZW4ob3B0aW9uLT53b3JkKSArIDE7CisgICAgY2hhciBuYW1lW25hbWVTaXplXTsKKworICAgIHNucHJpbnRmKG5hbWUsIG5hbWVTaXplLCAiJXNfJXMiLCBwcmVmaXgsIG9wdGlvbi0+d29yZCk7CisKKyAgICB7CisgICAgICBjaGFyICpjaGFyYWN0ZXIgPSBuYW1lOworCisgICAgICB3aGlsZSAoKmNoYXJhY3RlcikgeworICAgICAgICBpZiAoKmNoYXJhY3RlciA9PSAnLScpIHsKKyAgICAgICAgICAqY2hhcmFjdGVyID0gJ18nOworICAgICAgICB9IGVsc2UgaWYgKGlzbG93ZXIoKHVuc2lnbmVkIGNoYXIpKmNoYXJhY3RlcikpIHsKKyAgICAgICAgICAqY2hhcmFjdGVyID0gdG91cHBlcigodW5zaWduZWQgY2hhcikqY2hhcmFjdGVyKTsKKyAgICAgICAgfQorCisgICAgICAgIGNoYXJhY3RlciArPSAxOworICAgICAgfQorICAgIH0KKworICAgIHsKKyAgICAgIGNvbnN0IGNoYXIgKnNldHRpbmcgPSBnZXRlbnYobmFtZSk7CisKKyAgICAgIGlmIChzZXR0aW5nICYmICpzZXR0aW5nKSB7CisgICAgICAgIGlmICghZW5zdXJlU2V0dGluZyhpbmZvLCBvcHRpb24sIHNldHRpbmcpKSB7CisgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9CisgIH0KKworICByZXR1cm4gMTsKK30KKworc3RhdGljIGludAorcHJvY2Vzc0Vudmlyb25tZW50VmFyaWFibGVzICgKKyAgT3B0aW9uUHJvY2Vzc2luZ0luZm9ybWF0aW9uICppbmZvLAorICBjb25zdCBjaGFyICpwcmVmaXgKKykgeworICBmb3IgKHVuc2lnbmVkIGludCBvcHRpb25JbmRleD0wOyBvcHRpb25JbmRleDxpbmZvLT5vcHRpb25zLT5jb3VudDsgb3B0aW9uSW5kZXgrPTEpIHsKKyAgICBjb25zdCBDb21tYW5kTGluZU9wdGlvbiAqb3B0aW9uID0gJmluZm8tPm9wdGlvbnMtPnRhYmxlW29wdGlvbkluZGV4XTsKKworICAgIGlmICghcHJvY2Vzc0Vudmlyb25tZW50VmFyaWFibGUoaW5mbywgb3B0aW9uLCBwcmVmaXgpKSByZXR1cm4gMDsKKyAgfQorCisgIHJldHVybiAxOworfQorCitzdGF0aWMgdm9pZAorcHJvY2Vzc0ludGVybmFsU2V0dGluZ3MgKAorICBPcHRpb25Qcm9jZXNzaW5nSW5mb3JtYXRpb24gKmluZm8sCisgIGludCBjb25maWcKKykgeworICBmb3IgKHVuc2lnbmVkIGludCBvcHRpb25JbmRleD0wOyBvcHRpb25JbmRleDxpbmZvLT5vcHRpb25zLT5jb3VudDsgb3B0aW9uSW5kZXgrPTEpIHsKKyAgICBjb25zdCBDb21tYW5kTGluZU9wdGlvbiAqb3B0aW9uID0gJmluZm8tPm9wdGlvbnMtPnRhYmxlW29wdGlvbkluZGV4XTsKKworICAgIGlmICghKG9wdGlvbi0+ZmxhZ3MgJiBPUFRfQ29uZmlnKSA9PSAhY29uZmlnKSB7CisgICAgICBjb25zdCBjaGFyICpzZXR0aW5nID0gb3B0aW9uLT5pbnRlcm5hbC5zZXR0aW5nOworICAgICAgY2hhciAqbmV3U2V0dGluZyA9IE5VTEw7CisKKyAgICAgIGlmICghc2V0dGluZykgc2V0dGluZyA9IG9wdGlvbi0+YXJndW1lbnQ/ICIiOiBPUFRfV09SRF9GQUxTRTsKKworICAgICAgaWYgKG9wdGlvbi0+aW50ZXJuYWwuYWRqdXN0KSB7CisgICAgICAgIGlmICgqc2V0dGluZykgeworICAgICAgICAgIGlmICgobmV3U2V0dGluZyA9IHN0cmR1cChzZXR0aW5nKSkpIHsKKyAgICAgICAgICAgIGlmIChvcHRpb24tPmludGVybmFsLmFkanVzdCgmbmV3U2V0dGluZykpIHsKKyAgICAgICAgICAgICAgc2V0dGluZyA9IG5ld1NldHRpbmc7CisgICAgICAgICAgICB9CisgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGxvZ01hbGxvY0Vycm9yKCk7CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICB9CisKKyAgICAgIGVuc3VyZVNldHRpbmcoaW5mbywgb3B0aW9uLCBzZXR0aW5nKTsKKyAgICAgIGlmIChuZXdTZXR0aW5nKSBmcmVlKG5ld1NldHRpbmcpOworICAgIH0KKyAgfQorfQorCit0eXBlZGVmIHN0cnVjdCB7CisgIHVuc2lnbmVkIGludCBvcHRpb247CisgIHdjaGFyX3Qga2V5d29yZFswXTsKK30gQ29uZmlndXJhdGlvbkRpcmVjdGl2ZTsKKworc3RhdGljIGludAorc29ydENvbmZpZ3VyYXRpb25EaXJlY3RpdmVzIChjb25zdCB2b2lkICplbGVtZW50MSwgY29uc3Qgdm9pZCAqZWxlbWVudDIpIHsKKyAgY29uc3QgQ29uZmlndXJhdGlvbkRpcmVjdGl2ZSAqY29uc3QgKmRpcmVjdGl2ZTEgPSBlbGVtZW50MTsKKyAgY29uc3QgQ29uZmlndXJhdGlvbkRpcmVjdGl2ZSAqY29uc3QgKmRpcmVjdGl2ZTIgPSBlbGVtZW50MjsKKworICByZXR1cm4gY29tcGFyZUtleXdvcmRzKCgqZGlyZWN0aXZlMSktPmtleXdvcmQsICgqZGlyZWN0aXZlMiktPmtleXdvcmQpOworfQorCitzdGF0aWMgaW50CitzZWFyY2hDb25maWd1cmF0aW9uRGlyZWN0aXZlIChjb25zdCB2b2lkICp0YXJnZXQsIGNvbnN0IHZvaWQgKmVsZW1lbnQpIHsKKyAgY29uc3Qgd2NoYXJfdCAqa2V5d29yZCA9IHRhcmdldDsKKyAgY29uc3QgQ29uZmlndXJhdGlvbkRpcmVjdGl2ZSAqY29uc3QgKmRpcmVjdGl2ZSA9IGVsZW1lbnQ7CisKKyAgcmV0dXJuIGNvbXBhcmVLZXl3b3JkcyhrZXl3b3JkLCAoKmRpcmVjdGl2ZSktPmtleXdvcmQpOworfQorCit0eXBlZGVmIHN0cnVjdCB7CisgIE9wdGlvblByb2Nlc3NpbmdJbmZvcm1hdGlvbiAqaW5mbzsKKyAgY2hhciAqKnNldHRpbmdzOworCisgIHN0cnVjdCB7CisgICAgQ29uZmlndXJhdGlvbkRpcmVjdGl2ZSAqKnRhYmxlOworICAgIHVuc2lnbmVkIGludCBjb3VudDsKKyAgfSBkaXJlY3RpdmU7Cit9IENvbmZpZ3VyYXRpb25GaWxlUHJvY2Vzc2luZ0RhdGE7CisKK3N0YXRpYyBjb25zdCBDb25maWd1cmF0aW9uRGlyZWN0aXZlICoKK2ZpbmRDb25maWd1cmF0aW9uRGlyZWN0aXZlIChjb25zdCB3Y2hhcl90ICprZXl3b3JkLCBjb25zdCBDb25maWd1cmF0aW9uRmlsZVByb2Nlc3NpbmdEYXRhICpjb25mKSB7CisgIGNvbnN0IENvbmZpZ3VyYXRpb25EaXJlY3RpdmUgKmNvbnN0ICpkaXJlY3RpdmUgPSBic2VhcmNoKGtleXdvcmQsIGNvbmYtPmRpcmVjdGl2ZS50YWJsZSwgY29uZi0+ZGlyZWN0aXZlLmNvdW50LCBzaXplb2YoKmNvbmYtPmRpcmVjdGl2ZS50YWJsZSksIHNlYXJjaENvbmZpZ3VyYXRpb25EaXJlY3RpdmUpOworCisgIGlmIChkaXJlY3RpdmUpIHJldHVybiAqZGlyZWN0aXZlOworICByZXR1cm4gTlVMTDsKK30KKworc3RhdGljIGludAorcHJvY2Vzc0NvbmZpZ3VyYXRpb25EaXJlY3RpdmUgKAorICBjb25zdCB3Y2hhcl90ICprZXl3b3JkLAorICBjb25zdCBjaGFyICp2YWx1ZSwKKyAgY29uc3QgQ29uZmlndXJhdGlvbkZpbGVQcm9jZXNzaW5nRGF0YSAqY29uZgorKSB7CisgIGNvbnN0IENvbmZpZ3VyYXRpb25EaXJlY3RpdmUgKmRpcmVjdGl2ZSA9IGZpbmRDb25maWd1cmF0aW9uRGlyZWN0aXZlKGtleXdvcmQsIGNvbmYpOworCisgIGlmIChkaXJlY3RpdmUpIHsKKyAgICBjb25zdCBDb21tYW5kTGluZU9wdGlvbiAqb3B0aW9uID0gJmNvbmYtPmluZm8tPm9wdGlvbnMtPnRhYmxlW2RpcmVjdGl2ZS0+b3B0aW9uXTsKKyAgICBjaGFyICoqc2V0dGluZyA9ICZjb25mLT5zZXR0aW5nc1tkaXJlY3RpdmUtPm9wdGlvbl07CisKKyAgICBpZiAoKnNldHRpbmcgJiYgIWhhc0V4dGVuZGFibGVBcmd1bWVudChvcHRpb24pKSB7CisgICAgICBsb2dNZXNzYWdlKExPR19FUlIsICIlczogJSIgUFJJd3MsIGdldHRleHQoImNvbmZpZ3VyYXRpb24gZGlyZWN0aXZlIHNwZWNpZmllZCBtb3JlIHRoYW4gb25jZSIpLCBrZXl3b3JkKTsKKyAgICAgIGNvbmYtPmluZm8tPndhcm5pbmcgPSAxOworCisgICAgICBmcmVlKCpzZXR0aW5nKTsKKyAgICAgICpzZXR0aW5nID0gTlVMTDsKKyAgICB9CisKKyAgICBpZiAoKnNldHRpbmcpIHsKKyAgICAgIGlmICghZXh0ZW5kU3RyaW5nU2V0dGluZyhzZXR0aW5nLCB2YWx1ZSwgMCkpIHJldHVybiAwOworICAgIH0gZWxzZSB7CisgICAgICBpZiAoISgqc2V0dGluZyA9IHN0cmR1cCh2YWx1ZSkpKSB7CisgICAgICAgIGxvZ01hbGxvY0Vycm9yKCk7CisgICAgICAgIHJldHVybiAwOworICAgICAgfQorICAgIH0KKyAgfSBlbHNlIHsKKyAgICBsb2dNZXNzYWdlKExPR19FUlIsICIlczogJSIgUFJJd3MsIGdldHRleHQoInVua25vd24gY29uZmlndXJhdGlvbiBkaXJlY3RpdmUiKSwga2V5d29yZCk7CisgICAgY29uZi0+aW5mby0+d2FybmluZyA9IDE7CisgIH0KKworICByZXR1cm4gMTsKK30KKworc3RhdGljIERBVEFfT1BFUkFORFNfUFJPQ0VTU09SKHByb2Nlc3NDb25maWd1cmF0aW9uT3BlcmFuZHMpIHsKKyAgY29uc3QgQ29uZmlndXJhdGlvbkZpbGVQcm9jZXNzaW5nRGF0YSAqY29uZiA9IGRhdGE7CisgIGludCBvayA9IDE7CisgIERhdGFTdHJpbmcga2V5d29yZDsKKworICBpZiAoZ2V0RGF0YVN0cmluZyhmaWxlLCAma2V5d29yZCwgMCwgImNvbmZpZ3VyYXRpb24gZGlyZWN0aXZlIikpIHsKKyAgICBEYXRhU3RyaW5nIHZhbHVlOworCisgICAgaWYgKGdldERhdGFTdHJpbmcoZmlsZSwgJnZhbHVlLCAwLCAiY29uZmlndXJhdGlvbiB2YWx1ZSIpKSB7CisgICAgICBjaGFyICp2ID0gZ2V0VXRmOEZyb21XY2hhcnModmFsdWUuY2hhcmFjdGVycywgdmFsdWUubGVuZ3RoLCBOVUxMKTsKKworICAgICAgaWYgKHYpIHsKKyAgICAgICAgaWYgKCFwcm9jZXNzQ29uZmlndXJhdGlvbkRpcmVjdGl2ZShrZXl3b3JkLmNoYXJhY3RlcnMsIHYsIGNvbmYpKSBvayA9IDA7CisKKyAgICAgICAgZnJlZSh2KTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIG9rID0gMDsKKyAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgY29uZi0+aW5mby0+d2FybmluZyA9IDE7CisgICAgfQorICB9IGVsc2UgeworICAgIGNvbmYtPmluZm8tPndhcm5pbmcgPSAxOworICB9CisKKyAgcmV0dXJuIG9rOworfQorCitzdGF0aWMgREFUQV9DT05ESVRJT05fVEVTVEVSKHRlc3RDb25maWd1cmF0aW9uRGlyZWN0aXZlU2V0KSB7CisgIGNvbnN0IENvbmZpZ3VyYXRpb25GaWxlUHJvY2Vzc2luZ0RhdGEgKmNvbmYgPSBkYXRhOworICB3Y2hhcl90IGtleXdvcmRbaWRlbnRpZmllci0+bGVuZ3RoICsgMV07CisKKyAgd21lbWNweShrZXl3b3JkLCBpZGVudGlmaWVyLT5jaGFyYWN0ZXJzLCBpZGVudGlmaWVyLT5sZW5ndGgpOworICBrZXl3b3JkW2lkZW50aWZpZXItPmxlbmd0aF0gPSAwOworCisgIHsKKyAgICBjb25zdCBDb25maWd1cmF0aW9uRGlyZWN0aXZlICpkaXJlY3RpdmUgPSBmaW5kQ29uZmlndXJhdGlvbkRpcmVjdGl2ZShrZXl3b3JkLCBjb25mKTsKKworICAgIGlmIChkaXJlY3RpdmUpIHsKKyAgICAgIGlmIChjb25mLT5zZXR0aW5nc1tkaXJlY3RpdmUtPm9wdGlvbl0pIHsKKyAgICAgICAgcmV0dXJuIDE7CisgICAgICB9CisgICAgfQorICB9CisKKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK3Byb2Nlc3NDb25maWd1cmF0aW9uRGlyZWN0aXZlVGVzdE9wZXJhbmRzIChEYXRhRmlsZSAqZmlsZSwgaW50IG5vdCwgdm9pZCAqZGF0YSkgeworICByZXR1cm4gcHJvY2Vzc0NvbmRpdGlvbk9wZXJhbmRzKGZpbGUsIHRlc3RDb25maWd1cmF0aW9uRGlyZWN0aXZlU2V0LCBub3QsICJjb25maWd1cmF0aW9uIGRpcmVjdGl2ZSIsIGRhdGEpOworfQorCitzdGF0aWMgREFUQV9PUEVSQU5EU19QUk9DRVNTT1IocHJvY2Vzc0lmU2V0T3BlcmFuZHMpIHsKKyAgcmV0dXJuIHByb2Nlc3NDb25maWd1cmF0aW9uRGlyZWN0aXZlVGVzdE9wZXJhbmRzKGZpbGUsMDAsIGRhdGEpOworfQorCitzdGF0aWMgREFUQV9PUEVSQU5EU19QUk9DRVNTT1IocHJvY2Vzc0lmTm90U2V0T3BlcmFuZHMpIHsKKyAgcmV0dXJuIHByb2Nlc3NDb25maWd1cmF0aW9uRGlyZWN0aXZlVGVzdE9wZXJhbmRzKGZpbGUsIDEsIGRhdGEpOworfQorCitzdGF0aWMgREFUQV9PUEVSQU5EU19QUk9DRVNTT1IocHJvY2Vzc0NvbmZpZ3VyYXRpb25MaW5lKSB7CisgIEJFR0lOX0RBVEFfRElSRUNUSVZFX1RBQkxFCisgICAgREFUQV9ORVNUSU5HX0RJUkVDVElWRVMsCisgICAgREFUQV9WQVJJQUJMRV9ESVJFQ1RJVkVTLAorICAgIERBVEFfQ09ORElUSU9OX0RJUkVDVElWRVMsCisgICAgey5uYW1lPVdTX0MoImlmc2V0IiksIC5wcm9jZXNzb3I9cHJvY2Vzc0lmU2V0T3BlcmFuZHMsIC51bmNvbmRpdGlvbmFsPTF9LAorICAgIHsubmFtZT1XU19DKCJpZm5vdHNldCIpLCAucHJvY2Vzc29yPXByb2Nlc3NJZk5vdFNldE9wZXJhbmRzLCAudW5jb25kaXRpb25hbD0xfSwKKyAgICB7Lm5hbWU9TlVMTCwgLnByb2Nlc3Nvcj1wcm9jZXNzQ29uZmlndXJhdGlvbk9wZXJhbmRzfSwKKyAgRU5EX0RBVEFfRElSRUNUSVZFX1RBQkxFCisKKyAgcmV0dXJuIHByb2Nlc3NEaXJlY3RpdmVPcGVyYW5kKGZpbGUsICZkaXJlY3RpdmVzLCAiY29uZmlndXJhdGlvbiBmaWxlIGRpcmVjdGl2ZSIsIGRhdGEpOworfQorCitzdGF0aWMgdm9pZAorZnJlZUNvbmZpZ3VyYXRpb25EaXJlY3RpdmVzIChDb25maWd1cmF0aW9uRmlsZVByb2Nlc3NpbmdEYXRhICpjb25mKSB7CisgIHdoaWxlIChjb25mLT5kaXJlY3RpdmUuY291bnQgPiAwKSBmcmVlKGNvbmYtPmRpcmVjdGl2ZS50YWJsZVstLWNvbmYtPmRpcmVjdGl2ZS5jb3VudF0pOworfQorCitzdGF0aWMgaW50CithZGRDb25maWd1cmF0aW9uRGlyZWN0aXZlcyAoQ29uZmlndXJhdGlvbkZpbGVQcm9jZXNzaW5nRGF0YSAqY29uZikgeworICBmb3IgKHVuc2lnbmVkIGludCBvcHRpb25JbmRleD0wOyBvcHRpb25JbmRleDxjb25mLT5pbmZvLT5vcHRpb25zLT5jb3VudDsgb3B0aW9uSW5kZXgrPTEpIHsKKyAgICBjb25zdCBDb21tYW5kTGluZU9wdGlvbiAqb3B0aW9uID0gJmNvbmYtPmluZm8tPm9wdGlvbnMtPnRhYmxlW29wdGlvbkluZGV4XTsKKworICAgIGlmICgob3B0aW9uLT5mbGFncyAmIE9QVF9Db25maWcpICYmIG9wdGlvbi0+d29yZCkgeworICAgICAgQ29uZmlndXJhdGlvbkRpcmVjdGl2ZSAqZGlyZWN0aXZlOworICAgICAgY29uc3QgY2hhciAqa2V5d29yZCA9IG9wdGlvbi0+d29yZDsKKyAgICAgIHNpemVfdCBsZW5ndGggPSBjb3VudFV0ZjhDaGFyYWN0ZXJzKGtleXdvcmQpOworICAgICAgc2l6ZV90IHNpemUgPSBzaXplb2YoKmRpcmVjdGl2ZSkgKyAoKGxlbmd0aCArIDEpICogc2l6ZW9mKHdjaGFyX3QpKTsKKworICAgICAgaWYgKCEoZGlyZWN0aXZlID0gbWFsbG9jKHNpemUpKSkgeworICAgICAgICBsb2dNYWxsb2NFcnJvcigpOworICAgICAgICBmcmVlQ29uZmlndXJhdGlvbkRpcmVjdGl2ZXMoY29uZik7CisgICAgICAgIHJldHVybiAwOworICAgICAgfQorCisgICAgICBkaXJlY3RpdmUtPm9wdGlvbiA9IG9wdGlvbkluZGV4OworCisgICAgICB7CisgICAgICAgIGNvbnN0IGNoYXIgKnV0ZjggPSBrZXl3b3JkOworICAgICAgICB3Y2hhcl90ICp3YyA9IGRpcmVjdGl2ZS0+a2V5d29yZDsKKyAgICAgICAgY29udmVydFV0ZjhUb1djaGFycygmdXRmOCwgJndjLCBsZW5ndGgrMSk7CisgICAgICB9CisKKyAgICAgIGNvbmYtPmRpcmVjdGl2ZS50YWJsZVtjb25mLT5kaXJlY3RpdmUuY291bnQrK10gPSBkaXJlY3RpdmU7CisgICAgfQorICB9CisKKyAgcXNvcnQoY29uZi0+ZGlyZWN0aXZlLnRhYmxlLCBjb25mLT5kaXJlY3RpdmUuY291bnQsCisgICAgICAgIHNpemVvZigqY29uZi0+ZGlyZWN0aXZlLnRhYmxlKSwgc29ydENvbmZpZ3VyYXRpb25EaXJlY3RpdmVzKTsKKworICByZXR1cm4gMTsKK30KKworc3RhdGljIHZvaWQKK3Byb2Nlc3NDb25maWd1cmF0aW9uRmlsZSAoCisgIE9wdGlvblByb2Nlc3NpbmdJbmZvcm1hdGlvbiAqaW5mbywKKyAgY29uc3QgY2hhciAqcGF0aCwKKyAgaW50IG9wdGlvbmFsCispIHsKKyAgaWYgKHNldEJhc2VEYXRhVmFyaWFibGVzKE5VTEwpKSB7CisgICAgRklMRSAqZmlsZSA9IG9wZW5EYXRhRmlsZShwYXRoLCAiciIsIG9wdGlvbmFsKTsKKworICAgIGlmIChmaWxlKSB7CisgICAgICBjaGFyICpzZXR0aW5nc1tpbmZvLT5vcHRpb25zLT5jb3VudF07CisgICAgICBDb25maWd1cmF0aW9uRGlyZWN0aXZlICpkaXJlY3RpdmVzW2luZm8tPm9wdGlvbnMtPmNvdW50XTsKKworICAgICAgQ29uZmlndXJhdGlvbkZpbGVQcm9jZXNzaW5nRGF0YSBjb25mID0geworICAgICAgICAuaW5mbyA9IGluZm8sCisgICAgICAgIC5zZXR0aW5ncyA9IHNldHRpbmdzLAorCisgICAgICAgIC5kaXJlY3RpdmUgPSB7CisgICAgICAgICAgLnRhYmxlID0gZGlyZWN0aXZlcywKKyAgICAgICAgICAuY291bnQgPSAwCisgICAgICAgIH0KKyAgICAgIH07CisKKyAgICAgIGlmIChhZGRDb25maWd1cmF0aW9uRGlyZWN0aXZlcygmY29uZikpIHsKKyAgICAgICAgaW50IHByb2Nlc3NlZDsKKworICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpbmRleD0wOyBpbmRleDxpbmZvLT5vcHRpb25zLT5jb3VudDsgaW5kZXgrPTEpIHsKKyAgICAgICAgICBjb25mLnNldHRpbmdzW2luZGV4XSA9IE5VTEw7CisgICAgICAgIH0KKworICAgICAgICB7CisgICAgICAgICAgY29uc3QgRGF0YUZpbGVQYXJhbWV0ZXJzIGRhdGFGaWxlUGFyYW1ldGVycyA9IHsKKyAgICAgICAgICAgIC5wcm9jZXNzT3BlcmFuZHMgPSBwcm9jZXNzQ29uZmlndXJhdGlvbkxpbmUsCisgICAgICAgICAgICAuZGF0YSA9ICZjb25mCisgICAgICAgICAgfTsKKworICAgICAgICAgIHByb2Nlc3NlZCA9IHByb2Nlc3NEYXRhU3RyZWFtKE5VTEwsIGZpbGUsIHBhdGgsICZkYXRhRmlsZVBhcmFtZXRlcnMpOworICAgICAgICB9CisKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaW5kZXg9MDsgaW5kZXg8aW5mby0+b3B0aW9ucy0+Y291bnQ7IGluZGV4Kz0xKSB7CisgICAgICAgICAgY2hhciAqc2V0dGluZyA9IGNvbmYuc2V0dGluZ3NbaW5kZXhdOworCisgICAgICAgICAgaWYgKHNldHRpbmcpIHsKKyAgICAgICAgICAgIGVuc3VyZVNldHRpbmcoaW5mbywgJmluZm8tPm9wdGlvbnMtPnRhYmxlW2luZGV4XSwgc2V0dGluZyk7CisgICAgICAgICAgICBmcmVlKHNldHRpbmcpOworICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmICghcHJvY2Vzc2VkKSB7CisgICAgICAgICAgbG9nTWVzc2FnZShMT0dfRVJSLCBnZXR0ZXh0KCJmaWxlICclcycgcHJvY2Vzc2luZyBlcnJvci4iKSwgcGF0aCk7CisgICAgICAgICAgaW5mby0+d2FybmluZyA9IDE7CisgICAgICAgIH0KKworICAgICAgICBmcmVlQ29uZmlndXJhdGlvbkRpcmVjdGl2ZXMoJmNvbmYpOworICAgICAgfQorCisgICAgICBmY2xvc2UoZmlsZSk7CisgICAgfSBlbHNlIGlmICghb3B0aW9uYWwgfHwgKGVycm5vICE9IEVOT0VOVCkpIHsKKyAgICAgIGluZm8tPndhcm5pbmcgPSAxOworICAgIH0KKyAgfQorfQorCit2b2lkCityZXNldE9wdGlvbnMgKGNvbnN0IENvbW1hbmRMaW5lT3B0aW9ucyAqb3B0aW9ucykgeworICBmb3IgKHVuc2lnbmVkIGludCBpbmRleD0wOyBpbmRleDxvcHRpb25zLT5jb3VudDsgaW5kZXgrPTEpIHsKKyAgICBjb25zdCBDb21tYW5kTGluZU9wdGlvbiAqb3B0aW9uID0gJm9wdGlvbnMtPnRhYmxlW2luZGV4XTsKKworICAgIGlmIChvcHRpb24tPmFyZ3VtZW50KSB7CisgICAgICBjaGFyICoqc3RyaW5nID0gb3B0aW9uLT5zZXR0aW5nLnN0cmluZzsKKyAgICAgIGlmIChzdHJpbmcpIGNoYW5nZVN0cmluZ1NldHRpbmcoc3RyaW5nLCBOVUxMKTsKKyAgICB9IGVsc2UgeworICAgICAgaW50ICpmbGFnID0gb3B0aW9uLT5zZXR0aW5nLmZsYWc7CisgICAgICBpZiAoZmxhZykgKmZsYWcgPSAwOworICAgIH0KKyAgfQorfQorCitzdGF0aWMgdm9pZAorZXhpdE9wdGlvbnMgKHZvaWQgKmRhdGEpIHsKKyAgY29uc3QgQ29tbWFuZExpbmVPcHRpb25zICpvcHRpb25zID0gZGF0YTsKKyAgcmVzZXRPcHRpb25zKG9wdGlvbnMpOworfQorCitQcm9ncmFtRXhpdFN0YXR1cworcHJvY2Vzc09wdGlvbnMgKGNvbnN0IENvbW1hbmRMaW5lRGVzY3JpcHRvciAqZGVzY3JpcHRvciwgaW50ICphcmd1bWVudENvdW50LCBjaGFyICoqKmFyZ3VtZW50VmVjdG9yKSB7CisgIHVpbnQ4X3QgZW5zdXJlZFNldHRpbmdzW2Rlc2NyaXB0b3ItPm9wdGlvbnMtPmNvdW50XTsKKyAgbWVtc2V0KGVuc3VyZWRTZXR0aW5ncywgMCwgc2l6ZW9mKGVuc3VyZWRTZXR0aW5ncykpOworCisgIE9wdGlvblByb2Nlc3NpbmdJbmZvcm1hdGlvbiBpbmZvID0geworICAgIC5vcHRpb25zID0gZGVzY3JpcHRvci0+b3B0aW9ucywKKyAgICAuZW5zdXJlZFNldHRpbmdzID0gZW5zdXJlZFNldHRpbmdzLAorCisgICAgLmV4aXRJbW1lZGlhdGVseSA9IDAsCisgICAgLndhcm5pbmcgPSAwLAorICAgIC5zeW50YXhFcnJvciA9IDAKKyAgfTsKKworICBvblByb2dyYW1FeGl0KCJvcHRpb25zIiwgZXhpdE9wdGlvbnMsICh2b2lkICopZGVzY3JpcHRvci0+b3B0aW9ucyk7CisgIGJlZ2luUHJvZ3JhbSgqYXJndW1lbnRDb3VudCwgKmFyZ3VtZW50VmVjdG9yKTsKKyAgcHJvY2Vzc0NvbW1hbmRMaW5lKCZpbmZvLCBhcmd1bWVudENvdW50LCBhcmd1bWVudFZlY3RvciwgJmRlc2NyaXB0b3ItPnVzYWdlKTsKKworICBpZiAoZGVzY3JpcHRvci0+ZG9Cb290UGFyYW1ldGVycyAmJiAqZGVzY3JpcHRvci0+ZG9Cb290UGFyYW1ldGVycykgeworICAgIHByb2Nlc3NCb290UGFyYW1ldGVycygmaW5mbywgZGVzY3JpcHRvci0+YXBwbGljYXRpb25OYW1lKTsKKyAgfQorCisgIGlmIChkZXNjcmlwdG9yLT5kb0Vudmlyb25tZW50VmFyaWFibGVzICYmICpkZXNjcmlwdG9yLT5kb0Vudmlyb25tZW50VmFyaWFibGVzKSB7CisgICAgcHJvY2Vzc0Vudmlyb25tZW50VmFyaWFibGVzKCZpbmZvLCBkZXNjcmlwdG9yLT5hcHBsaWNhdGlvbk5hbWUpOworICB9CisKKyAgcHJvY2Vzc0ludGVybmFsU2V0dGluZ3MoJmluZm8sIDApOworICB7CisgICAgaW50IGNvbmZpZ3VyYXRpb25GaWxlU3BlY2lmaWVkID0gZGVzY3JpcHRvci0+Y29uZmlndXJhdGlvbkZpbGUgJiYgKmRlc2NyaXB0b3ItPmNvbmZpZ3VyYXRpb25GaWxlOworCisgICAgaWYgKGNvbmZpZ3VyYXRpb25GaWxlU3BlY2lmaWVkKSB7CisgICAgICBwcm9jZXNzQ29uZmlndXJhdGlvbkZpbGUoJmluZm8sICpkZXNjcmlwdG9yLT5jb25maWd1cmF0aW9uRmlsZSwgIWNvbmZpZ3VyYXRpb25GaWxlU3BlY2lmaWVkKTsKKyAgICB9CisgIH0KKyAgcHJvY2Vzc0ludGVybmFsU2V0dGluZ3MoJmluZm8sIDEpOworCisgIGlmIChpbmZvLmV4aXRJbW1lZGlhdGVseSkgcmV0dXJuIFBST0dfRVhJVF9GT1JDRTsKKyAgaWYgKGluZm8uc3ludGF4RXJyb3IpIHJldHVybiBQUk9HX0VYSVRfU1lOVEFYOworICByZXR1cm4gUFJPR19FWElUX1NVQ0NFU1M7Cit9CisKK3N0YXRpYyBQcm9ncmFtRXhpdFN0YXR1cworcHJvY2Vzc0lucHV0U3RyZWFtICgKKyAgRklMRSAqc3RyZWFtLCBjb25zdCBjaGFyICpuYW1lLAorICBjb25zdCBJbnB1dEZpbGVzUHJvY2Vzc2luZ1BhcmFtZXRlcnMgKnBhcmFtZXRlcnMKKykgeworICBpbnQgb2sgPSAwOworCisgIGlmIChwYXJhbWV0ZXJzLT5iZWdpblN0cmVhbSkgeworICAgIHBhcmFtZXRlcnMtPmJlZ2luU3RyZWFtKG5hbWUsIHBhcmFtZXRlcnMtPmRhdGFGaWxlUGFyYW1ldGVycy5kYXRhKTsKKyAgfQorCisgIGlmIChzZXRCYXNlRGF0YVZhcmlhYmxlcyhOVUxMKSkgeworICAgIGlmIChwcm9jZXNzRGF0YVN0cmVhbShOVUxMLCBzdHJlYW0sIG5hbWUsICZwYXJhbWV0ZXJzLT5kYXRhRmlsZVBhcmFtZXRlcnMpKSB7CisgICAgICBvayA9IDE7CisgICAgfQorICB9CisKKyAgaWYgKHBhcmFtZXRlcnMtPmVuZFN0cmVhbSkgeworICAgIHBhcmFtZXRlcnMtPmVuZFN0cmVhbSghb2ssIHBhcmFtZXRlcnMtPmRhdGFGaWxlUGFyYW1ldGVycy5kYXRhKTsKKyAgfQorCisgIHJldHVybiBvaz8gUFJPR19FWElUX1NVQ0NFU1M6IFBST0dfRVhJVF9GQVRBTDsKK30KKworc3RhdGljIFByb2dyYW1FeGl0U3RhdHVzCitwcm9jZXNzU3RhbmRhcmRJbnB1dCAoY29uc3QgSW5wdXRGaWxlc1Byb2Nlc3NpbmdQYXJhbWV0ZXJzICpwYXJhbWV0ZXJzKSB7CisgIHJldHVybiBwcm9jZXNzSW5wdXRTdHJlYW0oc3RkaW4sIHN0YW5kYXJkSW5wdXROYW1lLCBwYXJhbWV0ZXJzKTsKK30KKworc3RhdGljIFByb2dyYW1FeGl0U3RhdHVzCitwcm9jZXNzSW5wdXRGaWxlIChjb25zdCBjaGFyICpwYXRoLCBjb25zdCBJbnB1dEZpbGVzUHJvY2Vzc2luZ1BhcmFtZXRlcnMgKnBhcmFtZXRlcnMpIHsKKyAgaWYgKHN0cmNtcChwYXRoLCBzdGFuZGFyZFN0cmVhbUFyZ3VtZW50KSA9PSAwKSB7CisgICAgcmV0dXJuIHByb2Nlc3NTdGFuZGFyZElucHV0KHBhcmFtZXRlcnMpOworICB9CisKKyAgeworICAgIEZJTEUgKnN0cmVhbSA9IGZvcGVuKHBhdGgsICJyIik7CisKKyAgICBpZiAoIXN0cmVhbSkgeworICAgICAgbG9nTWVzc2FnZShMT0dfRVJSLCAiaW5wdXQgZmlsZSBvcGVuIGVycm9yOiAlczogJXMiLCBwYXRoLCBzdHJlcnJvcihlcnJubykpOworICAgICAgcmV0dXJuIFBST0dfRVhJVF9GQVRBTDsKKyAgICB9CisKKyAgICBQcm9ncmFtRXhpdFN0YXR1cyBzdGF0dXMgPSBwcm9jZXNzSW5wdXRTdHJlYW0oc3RyZWFtLCBwYXRoLCBwYXJhbWV0ZXJzKTsKKyAgICBmY2xvc2Uoc3RyZWFtKTsKKyAgICByZXR1cm4gc3RhdHVzOworICB9Cit9CisKK1Byb2dyYW1FeGl0U3RhdHVzCitwcm9jZXNzSW5wdXRGaWxlcyAoCisgIGNoYXIgKipwYXRocywgaW50IGNvdW50LAorICBjb25zdCBJbnB1dEZpbGVzUHJvY2Vzc2luZ1BhcmFtZXRlcnMgKnBhcmFtZXRlcnMKKykgeworICBpZiAoIWNvdW50KSByZXR1cm4gcHJvY2Vzc1N0YW5kYXJkSW5wdXQocGFyYW1ldGVycyk7CisKKyAgZG8geworICAgIFByb2dyYW1FeGl0U3RhdHVzIHN0YXR1cyA9IHByb2Nlc3NJbnB1dEZpbGUoKnBhdGhzKyssIHBhcmFtZXRlcnMpOworICAgIGlmIChzdGF0dXMgIT0gUFJPR19FWElUX1NVQ0NFU1MpIHJldHVybiBzdGF0dXM7CisgIH0gd2hpbGUgKGNvdW50IC09IDEpOworCisgIHJldHVybiBQUk9HX0VYSVRfU1VDQ0VTUzsKK30KZGlmZiAtLWdpdCBhL1Byb2dyYW1zL2NtZHMuYXV0by5oIGIvUHJvZ3JhbXMvY21kcy5hdXRvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTNkM2JmNwotLS0gL2Rldi9udWxsCisrKyBiL1Byb2dyYW1zL2NtZHMuYXV0by5oCkBAIC0wLDAgKzEsMTg5NCBAQAoreworICAgIC8vIEJSTF9DTURfTk9PUAorICAgIC5uYW1lID0gIk5PT1AiLAorICAgIC5jb2RlID0gQlJMX0NNRF9OT09QLAorICAgIC8vIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgTk9PUCBjb21tYW5kLgorICAgIC5kZXNjcmlwdGlvbiA9IHN0cnRleHQoImRvIG5vdGhpbmciKSwKK30sCisKKyAgICB7CisgICAgICAgIC8vIEJSTF9DTURfTE5VUAorICAgICAgICAubmFtZSA9ICJMTlVQIiwKKyAgICAgICAgLmNvZGUgPSBCUkxfQ01EX0xOVVAsCisgICAgICAgIC5pc01vdGlvbiA9IDEsCisgICAgICAgIC5pc1ZlcnRpY2FsID0gMSwKKyAgICAgICAgLy8geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBMTlVQIGNvbW1hbmQuCisgICAgICAgIC5kZXNjcmlwdGlvbiA9IHN0cnRleHQoImdvIHVwIG9uZSBsaW5lIiksCisgICAgfSwKKworICAgIHsKKyAgICAgICAgLy8gQlJMX0NNRF9MTkROCisgICAgICAgIC5uYW1lID0gIkxORE4iLAorICAgICAgICAuY29kZSA9IEJSTF9DTURfTE5ETiwKKyAgICAgICAgLmlzTW90aW9uID0gMSwKKyAgICAgICAgLmlzVmVydGljYWwgPSAxLAorICAgICAgICAvLyB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIExORE4gY29tbWFuZC4KKyAgICAgICAgLmRlc2NyaXB0aW9uID0gc3RydGV4dCgiZ28gZG93biBvbmUgbGluZSIpLAorICAgIH0sCisKKyAgICB7CisgICAgICAgIC8vIEJSTF9DTURfV0lOVVAKKyAgICAgICAgLm5hbWUgPSAiV0lOVVAiLAorICAgICAgICAuY29kZSA9IEJSTF9DTURfV0lOVVAsCisgICAgICAgIC5pc01vdGlvbiA9IDEsCisgICAgICAgIC5pc1ZlcnRpY2FsID0gMSwKKyAgICAgICAgLy8geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBXSU5VUCBjb21tYW5kLgorICAgICAgICAuZGVzY3JpcHRpb24gPSBzdHJ0ZXh0KCJnbyB1cCBzZXZlcmFsIGxpbmVzIiksCisgICAgfSwKKworICAgIHsKKyAgICAgICAgLy8gQlJMX0NNRF9XSU5ETgorICAgICAgICAubmFtZSA9ICJXSU5ETiIsCisgICAgICAgIC5jb2RlID0gQlJMX0NNRF9XSU5ETiwKKyAgICAgICAgLmlzTW90aW9uID0gMSwKKyAgICAgICAgLmlzVmVydGljYWwgPSAxLAorICAgICAgICAvLyB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIFdJTkROIGNvbW1hbmQuCisgICAgICAgIC5kZXNjcmlwdGlvbiA9IHN0cnRleHQoImdvIGRvd24gc2V2ZXJhbCBsaW5lcyIpLAorICAgIH0sCisKKyAgICB7CisgICAgICAgIC8vIEJSTF9DTURfUFJESUZMTgorICAgICAgICAubmFtZSA9ICJQUkRJRkxOIiwKKyAgICAgICAgLmNvZGUgPSBCUkxfQ01EX1BSRElGTE4sCisgICAgICAgIC5pc01vdGlvbiA9IDEsCisgICAgICAgIC5pc1ZlcnRpY2FsID0gMSwKKyAgICAgICAgLy8geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBQUkRJRkxOIGNvbW1hbmQuCisgICAgICAgIC5kZXNjcmlwdGlvbiA9IHN0cnRleHQoImdvIHVwIHRvIG5lYXJlc3QgbGluZSB3aXRoIGRpZmZlcmVudCBjb250ZW50IiksCisgICAgfSwKKworICAgIHsKKyAgICAgICAgLy8gQlJMX0NNRF9OWERJRkxOCisgICAgICAgIC5uYW1lID0gIk5YRElGTE4iLAorICAgICAgICAuY29kZSA9IEJSTF9DTURfTlhESUZMTiwKKyAgICAgICAgLmlzTW90aW9uID0gMSwKKyAgICAgICAgLmlzVmVydGljYWwgPSAxLAorICAgICAgICAvLyB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIE5YRElGTE4gY29tbWFuZC4KKyAgICAgICAgLmRlc2NyaXB0aW9uID0KKyAgICAgICAgICAgIHN0cnRleHQoImdvIGRvd24gdG8gbmVhcmVzdCBsaW5lIHdpdGggZGlmZmVyZW50IGNvbnRlbnQiKSwKKyAgICB9LAorCisgICAgeworICAgICAgICAvLyBCUkxfQ01EX0FUVFJVUAorICAgICAgICAubmFtZSA9ICJBVFRSVVAiLAorICAgICAgICAuY29kZSA9IEJSTF9DTURfQVRUUlVQLAorICAgICAgICAuaXNNb3Rpb24gPSAxLAorICAgICAgICAuaXNWZXJ0aWNhbCA9IDEsCisgICAgICAgIC8vIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgQVRUUlVQIGNvbW1hbmQuCisgICAgICAgIC5kZXNjcmlwdGlvbiA9CisgICAgICAgICAgICBzdHJ0ZXh0KCJnbyB1cCB0byBuZWFyZXN0IGxpbmUgd2l0aCBkaWZmZXJlbnQgaGlnaGxpZ2h0aW5nIiksCisgICAgfSwKKworICAgIHsKKyAgICAgICAgLy8gQlJMX0NNRF9BVFRSRE4KKyAgICAgICAgLm5hbWUgPSAiQVRUUkROIiwKKyAgICAgICAgLmNvZGUgPSBCUkxfQ01EX0FUVFJETiwKKyAgICAgICAgLmlzTW90aW9uID0gMSwKKyAgICAgICAgLmlzVmVydGljYWwgPSAxLAorICAgICAgICAvLyB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIEFUVFJETiBjb21tYW5kLgorICAgICAgICAuZGVzY3JpcHRpb24gPQorICAgICAgICAgICAgc3RydGV4dCgiZ28gZG93biB0byBuZWFyZXN0IGxpbmUgd2l0aCBkaWZmZXJlbnQgaGlnaGxpZ2h0aW5nIiksCisgICAgfSwKKworICAgIHsKKyAgICAgICAgLy8gQlJMX0NNRF9UT1AKKyAgICAgICAgLm5hbWUgPSAiVE9QIiwKKyAgICAgICAgLmNvZGUgPSBCUkxfQ01EX1RPUCwKKyAgICAgICAgLmlzTW90aW9uID0gMSwKKyAgICAgICAgLmlzVmVydGljYWwgPSAxLAorICAgICAgICAvLyB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIFRPUCBjb21tYW5kLgorICAgICAgICAuZGVzY3JpcHRpb24gPSBzdHJ0ZXh0KCJnbyB0byB0b3AgbGluZSIpLAorICAgIH0sCisKKyAgICB7CisgICAgICAgIC8vIEJSTF9DTURfQk9UCisgICAgICAgIC5uYW1lID0gIkJPVCIsCisgICAgICAgIC5jb2RlID0gQlJMX0NNRF9CT1QsCisgICAgICAgIC5pc01vdGlvbiA9IDEsCisgICAgICAgIC5pc1ZlcnRpY2FsID0gMSwKKyAgICAgICAgLy8geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBCT1QgY29tbWFuZC4KKyAgICAgICAgLmRlc2NyaXB0aW9uID0gc3RydGV4dCgiZ28gdG8gYm90dG9tIGxpbmUiKSwKKyAgICB9LAorCisgICAgeworICAgICAgICAvLyBCUkxfQ01EX1RPUF9MRUZUCisgICAgICAgIC5uYW1lID0gIlRPUF9MRUZUIiwKKyAgICAgICAgLmNvZGUgPSBCUkxfQ01EX1RPUF9MRUZULAorICAgICAgICAuaXNNb3Rpb24gPSAxLAorICAgICAgICAuaXNWZXJ0aWNhbCA9IDEsCisgICAgICAgIC5pc0hvcml6b250YWwgPSAxLAorICAgICAgICAvLyB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIFRPUF9MRUZUIGNvbW1hbmQuCisgICAgICAgIC5kZXNjcmlwdGlvbiA9IHN0cnRleHQoImdvIHRvIGJlZ2lubmluZyBvZiB0b3AgbGluZSIpLAorICAgIH0sCisKKyAgICB7CisgICAgICAgIC8vIEJSTF9DTURfQk9UX0xFRlQKKyAgICAgICAgLm5hbWUgPSAiQk9UX0xFRlQiLAorICAgICAgICAuY29kZSA9IEJSTF9DTURfQk9UX0xFRlQsCisgICAgICAgIC5pc01vdGlvbiA9IDEsCisgICAgICAgIC5pc1ZlcnRpY2FsID0gMSwKKyAgICAgICAgLmlzSG9yaXpvbnRhbCA9IDEsCisgICAgICAgIC8vIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgQk9UX0xFRlQgY29tbWFuZC4KKyAgICAgICAgLmRlc2NyaXB0aW9uID0gc3RydGV4dCgiZ28gdG8gYmVnaW5uaW5nIG9mIGJvdHRvbSBsaW5lIiksCisgICAgfSwKKworICAgIHsKKyAgICAgICAgLy8gQlJMX0NNRF9QUlBHUlBICisgICAgICAgIC5uYW1lID0gIlBSUEdSUEgiLAorICAgICAgICAuY29kZSA9IEJSTF9DTURfUFJQR1JQSCwKKyAgICAgICAgLmlzTW90aW9uID0gMSwKKyAgICAgICAgLmlzVmVydGljYWwgPSAxLAorICAgICAgICAvLyB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIFBSUEdSUEggY29tbWFuZC4KKyAgICAgICAgLmRlc2NyaXB0aW9uID0gc3RydGV4dCgiZ28gdXAgdG8gZmlyc3QgbGluZSBvZiBwYXJhZ3JhcGgiKSwKKyAgICB9LAorCisgICAgeworICAgICAgICAvLyBCUkxfQ01EX05YUEdSUEgKKyAgICAgICAgLm5hbWUgPSAiTlhQR1JQSCIsCisgICAgICAgIC5jb2RlID0gQlJMX0NNRF9OWFBHUlBILAorICAgICAgICAuaXNNb3Rpb24gPSAxLAorICAgICAgICAuaXNWZXJ0aWNhbCA9IDEsCisgICAgICAgIC8vIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgTlhQR1JQSCBjb21tYW5kLgorICAgICAgICAuZGVzY3JpcHRpb24gPSBzdHJ0ZXh0KCJnbyBkb3duIHRvIGZpcnN0IGxpbmUgb2YgbmV4dCBwYXJhZ3JhcGgiKSwKKyAgICB9LAorCisgICAgeworICAgICAgICAvLyBCUkxfQ01EX1BSUFJPTVBUCisgICAgICAgIC5uYW1lID0gIlBSUFJPTVBUIiwKKyAgICAgICAgLmNvZGUgPSBCUkxfQ01EX1BSUFJPTVBULAorICAgICAgICAuaXNNb3Rpb24gPSAxLAorICAgICAgICAuaXNWZXJ0aWNhbCA9IDEsCisgICAgICAgIC8vIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgUFJQUk9NUFQgY29tbWFuZC4KKyAgICAgICAgLmRlc2NyaXB0aW9uID0gc3RydGV4dCgiZ28gdXAgdG8gcHJldmlvdXMgY29tbWFuZCBwcm9tcHQiKSwKKyAgICB9LAorCisgICAgeworICAgICAgICAvLyBCUkxfQ01EX05YUFJPTVBUCisgICAgICAgIC5uYW1lID0gIk5YUFJPTVBUIiwKKyAgICAgICAgLmNvZGUgPSBCUkxfQ01EX05YUFJPTVBULAorICAgICAgICAuaXNNb3Rpb24gPSAxLAorICAgICAgICAuaXNWZXJ0aWNhbCA9IDEsCisgICAgICAgIC8vIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgTlhQUk9NUFQgY29tbWFuZC4KKyAgICAgICAgLmRlc2NyaXB0aW9uID0gc3RydGV4dCgiZ28gZG93biB0byBuZXh0IGNvbW1hbmQgcHJvbXB0IiksCisgICAgfSwKKworICAgIHsKKyAgICAgICAgLy8gQlJMX0NNRF9QUlNFQVJDSAorICAgICAgICAubmFtZSA9ICJQUlNFQVJDSCIsCisgICAgICAgIC5jb2RlID0gQlJMX0NNRF9QUlNFQVJDSCwKKyAgICAgICAgLy8geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBQUlNFQVJDSCBjb21tYW5kLgorICAgICAgICAuZGVzY3JpcHRpb24gPSBzdHJ0ZXh0KCJzZWFyY2ggYmFja3dhcmQgZm9yIGNsaXBib2FyZCB0ZXh0IiksCisgICAgfSwKKworICAgIHsKKyAgICAgICAgLy8gQlJMX0NNRF9OWFNFQVJDSAorICAgICAgICAubmFtZSA9ICJOWFNFQVJDSCIsCisgICAgICAgIC5jb2RlID0gQlJMX0NNRF9OWFNFQVJDSCwKKyAgICAgICAgLy8geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBOWFNFQVJDSCBjb21tYW5kLgorICAgICAgICAuZGVzY3JpcHRpb24gPSBzdHJ0ZXh0KCJzZWFyY2ggZm9yd2FyZCBmb3IgY2xpcGJvYXJkIHRleHQiKSwKKyAgICB9LAorCisgICAgeworICAgICAgICAvLyBCUkxfQ01EX0NIUkxUCisgICAgICAgIC5uYW1lID0gIkNIUkxUIiwKKyAgICAgICAgLmNvZGUgPSBCUkxfQ01EX0NIUkxULAorICAgICAgICAuaXNNb3Rpb24gPSAxLAorICAgICAgICAuaXNIb3Jpem9udGFsID0gMSwKKyAgICAgICAgLy8geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBDSFJMVCBjb21tYW5kLgorICAgICAgICAuZGVzY3JpcHRpb24gPSBzdHJ0ZXh0KCJnbyBsZWZ0IG9uZSBjaGFyYWN0ZXIiKSwKKyAgICB9LAorCisgICAgeworICAgICAgICAvLyBCUkxfQ01EX0NIUlJUCisgICAgICAgIC5uYW1lID0gIkNIUlJUIiwKKyAgICAgICAgLmNvZGUgPSBCUkxfQ01EX0NIUlJULAorICAgICAgICAuaXNNb3Rpb24gPSAxLAorICAgICAgICAuaXNIb3Jpem9udGFsID0gMSwKKyAgICAgICAgLy8geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBDSFJSVCBjb21tYW5kLgorICAgICAgICAuZGVzY3JpcHRpb24gPSBzdHJ0ZXh0KCJnbyByaWdodCBvbmUgY2hhcmFjdGVyIiksCisgICAgfSwKKworICAgIHsKKyAgICAgICAgLy8gQlJMX0NNRF9IV0lOTFQKKyAgICAgICAgLm5hbWUgPSAiSFdJTkxUIiwKKyAgICAgICAgLmNvZGUgPSBCUkxfQ01EX0hXSU5MVCwKKyAgICAgICAgLmlzTW90aW9uID0gMSwKKyAgICAgICAgLmlzSG9yaXpvbnRhbCA9IDEsCisgICAgICAgIC8vIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgSFdJTkxUIGNvbW1hbmQuCisgICAgICAgIC5kZXNjcmlwdGlvbiA9IHN0cnRleHQoImdvIGxlZnQgaGFsZiBhIGJyYWlsbGUgd2luZG93IiksCisgICAgfSwKKworICAgIHsKKyAgICAgICAgLy8gQlJMX0NNRF9IV0lOUlQKKyAgICAgICAgLm5hbWUgPSAiSFdJTlJUIiwKKyAgICAgICAgLmNvZGUgPSBCUkxfQ01EX0hXSU5SVCwKKyAgICAgICAgLmlzTW90aW9uID0gMSwKKyAgICAgICAgLmlzSG9yaXpvbnRhbCA9IDEsCisgICAgICAgIC8vIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgSFdJTlJUIGNvbW1hbmQuCisgICAgICAgIC5kZXNjcmlwdGlvbiA9IHN0cnRleHQoImdvIHJpZ2h0IGhhbGYgYSBicmFpbGxlIHdpbmRvdyIpLAorICAgIH0sCisKKyAgICB7CisgICAgICAgIC8vIEJSTF9DTURfRldJTkxUCisgICAgICAgIC5uYW1lID0gIkZXSU5MVCIsCisgICAgICAgIC5jb2RlID0gQlJMX0NNRF9GV0lOTFQsCisgICAgICAgIC5pc01vdGlvbiA9IDEsCisgICAgICAgIC5pc1Bhbm5pbmcgPSAxLAorICAgICAgICAvLyB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIEZXSU5MVCBjb21tYW5kLgorICAgICAgICAuZGVzY3JpcHRpb24gPSBzdHJ0ZXh0KCJnbyBiYWNrd2FyZCBvbmUgYnJhaWxsZSB3aW5kb3ciKSwKKyAgICB9LAorCisgICAgeworICAgICAgICAvLyBCUkxfQ01EX0ZXSU5SVAorICAgICAgICAubmFtZSA9ICJGV0lOUlQiLAorICAgICAgICAuY29kZSA9IEJSTF9DTURfRldJTlJULAorICAgICAgICAuaXNNb3Rpb24gPSAxLAorICAgICAgICAuaXNQYW5uaW5nID0gMSwKKyAgICAgICAgLy8geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBGV0lOUlQgY29tbWFuZC4KKyAgICAgICAgLmRlc2NyaXB0aW9uID0gc3RydGV4dCgiZ28gZm9yd2FyZCBvbmUgYnJhaWxsZSB3aW5kb3ciKSwKKyAgICB9LAorCisgICAgeworICAgICAgICAvLyBCUkxfQ01EX0ZXSU5MVFNLSVAKKyAgICAgICAgLm5hbWUgPSAiRldJTkxUU0tJUCIsCisgICAgICAgIC5jb2RlID0gQlJMX0NNRF9GV0lOTFRTS0lQLAorICAgICAgICAuaXNNb3Rpb24gPSAxLAorICAgICAgICAuaXNQYW5uaW5nID0gMSwKKyAgICAgICAgLy8geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBGV0lOTFRTS0lQIGNvbW1hbmQuCisgICAgICAgIC5kZXNjcmlwdGlvbiA9IHN0cnRleHQoImdvIGJhY2t3YXJkIHNraXBwaW5nIGJsYW5rIGJyYWlsbGUgd2luZG93cyIpLAorICAgIH0sCisKKyAgICB7CisgICAgICAgIC8vIEJSTF9DTURfRldJTlJUU0tJUAorICAgICAgICAubmFtZSA9ICJGV0lOUlRTS0lQIiwKKyAgICAgICAgLmNvZGUgPSBCUkxfQ01EX0ZXSU5SVFNLSVAsCisgICAgICAgIC5pc01vdGlvbiA9IDEsCisgICAgICAgIC5pc1Bhbm5pbmcgPSAxLAorICAgICAgICAvLyB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIEZXSU5SVFNLSVAgY29tbWFuZC4KKyAgICAgICAgLmRlc2NyaXB0aW9uID0gc3RydGV4dCgiZ28gZm9yd2FyZCBza2lwcGluZyBibGFuayBicmFpbGxlIHdpbmRvd3MiKSwKKyAgICB9LAorCisgICAgeworICAgICAgICAvLyBCUkxfQ01EX0xOQkVHCisgICAgICAgIC5uYW1lID0gIkxOQkVHIiwKKyAgICAgICAgLmNvZGUgPSBCUkxfQ01EX0xOQkVHLAorICAgICAgICAuaXNNb3Rpb24gPSAxLAorICAgICAgICAuaXNIb3Jpem9udGFsID0gMSwKKyAgICAgICAgLy8geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBMTkJFRyBjb21tYW5kLgorICAgICAgICAuZGVzY3JpcHRpb24gPSBzdHJ0ZXh0KCJnbyB0byBiZWdpbm5pbmcgb2YgbGluZSIpLAorICAgIH0sCisKKyAgICB7CisgICAgICAgIC8vIEJSTF9DTURfTE5FTkQKKyAgICAgICAgLm5hbWUgPSAiTE5FTkQiLAorICAgICAgICAuY29kZSA9IEJSTF9DTURfTE5FTkQsCisgICAgICAgIC5pc01vdGlvbiA9IDEsCisgICAgICAgIC5pc0hvcml6b250YWwgPSAxLAorICAgICAgICAvLyB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIExORU5EIGNvbW1hbmQuCisgICAgICAgIC5kZXNjcmlwdGlvbiA9IHN0cnRleHQoImdvIHRvIGVuZCBvZiBsaW5lIiksCisgICAgfSwKKworICAgIHsKKyAgICAgICAgLy8gQlJMX0NNRF9IT01FCisgICAgICAgIC5uYW1lID0gIkhPTUUiLAorICAgICAgICAuY29kZSA9IEJSTF9DTURfSE9NRSwKKyAgICAgICAgLmlzTW90aW9uID0gMSwKKyAgICAgICAgLy8geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBIT01FIGNvbW1hbmQuCisgICAgICAgIC5kZXNjcmlwdGlvbiA9IHN0cnRleHQoImdvIHRvIHNjcmVlbiBjdXJzb3IiKSwKKyAgICB9LAorCisgICAgeworICAgICAgICAvLyBCUkxfQ01EX0JBQ0sKKyAgICAgICAgLm5hbWUgPSAiQkFDSyIsCisgICAgICAgIC5jb2RlID0gQlJMX0NNRF9CQUNLLAorICAgICAgICAuaXNNb3Rpb24gPSAxLAorICAgICAgICAvLyB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIEJBQ0sgY29tbWFuZC4KKyAgICAgICAgLmRlc2NyaXB0aW9uID0gc3RydGV4dCgiZ28gYmFjayBhZnRlciBjdXJzb3IgdHJhY2tpbmciKSwKKyAgICB9LAorCisgICAgeworICAgICAgICAvLyBCUkxfQ01EX1JFVFVSTgorICAgICAgICAubmFtZSA9ICJSRVRVUk4iLAorICAgICAgICAuY29kZSA9IEJSTF9DTURfUkVUVVJOLAorICAgICAgICAuaXNNb3Rpb24gPSAxLAorICAgICAgICAvLyB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIFJFVFVSTiBjb21tYW5kLgorICAgICAgICAuZGVzY3JpcHRpb24gPQorICAgICAgICAgICAgc3RydGV4dCgiZ28gdG8gc2NyZWVuIGN1cnNvciBvciBnbyBiYWNrIGFmdGVyIGN1cnNvciB0cmFja2luZyIpLAorICAgIH0sCisKKyAgICB7CisgICAgICAgIC8vIEJSTF9DTURfRlJFRVpFCisgICAgICAgIC5uYW1lID0gIkZSRUVaRSIsCisgICAgICAgIC5jb2RlID0gQlJMX0NNRF9GUkVFWkUsCisgICAgICAgIC5pc1RvZ2dsZSA9IDEsCisgICAgICAgIC8vIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgRlJFRVpFIGNvbW1hbmQuCisgICAgICAgIC5kZXNjcmlwdGlvbiA9IHN0cnRleHQoInNldCBzY3JlZW4gaW1hZ2UgZnJvemVuL3VuZnJvemVuIiksCisgICAgfSwKKworICAgIHsKKyAgICAgICAgLy8gQlJMX0NNRF9ESVNQTUQKKyAgICAgICAgLm5hbWUgPSAiRElTUE1EIiwKKyAgICAgICAgLmNvZGUgPSBCUkxfQ01EX0RJU1BNRCwKKyAgICAgICAgLmlzVG9nZ2xlID0gMSwKKyAgICAgICAgLy8geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBESVNQTUQgY29tbWFuZC4KKyAgICAgICAgLmRlc2NyaXB0aW9uID0gc3RydGV4dCgic2V0IGRpc3BsYXkgbW9kZSBhdHRyaWJ1dGVzL3RleHQiKSwKKyAgICB9LAorCisgICAgeworICAgICAgICAvLyBCUkxfQ01EX1NJWERPVFMKKyAgICAgICAgLm5hbWUgPSAiU0lYRE9UUyIsCisgICAgICAgIC5jb2RlID0gQlJMX0NNRF9TSVhET1RTLAorICAgICAgICAuaXNUb2dnbGUgPSAxLAorICAgICAgICAvLyB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIFNJWERPVFMgY29tbWFuZC4KKyAgICAgICAgLmRlc2NyaXB0aW9uID0gc3RydGV4dCgic2V0IHRleHQgc3R5bGUgNi1kb3QvOC1kb3QiKSwKKyAgICB9LAorCisgICAgeworICAgICAgICAvLyBCUkxfQ01EX1NMSURFV0lOCisgICAgICAgIC5uYW1lID0gIlNMSURFV0lOIiwKKyAgICAgICAgLmNvZGUgPSBCUkxfQ01EX1NMSURFV0lOLAorICAgICAgICAuaXNUb2dnbGUgPSAxLAorICAgICAgICAvLyB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIFNMSURFV0lOIGNvbW1hbmQuCisgICAgICAgIC5kZXNjcmlwdGlvbiA9IHN0cnRleHQoInNldCBzbGlkaW5nIGJyYWlsbGUgd2luZG93IG9uL29mZiIpLAorICAgIH0sCisKKyAgICB7CisgICAgICAgIC8vIEJSTF9DTURfU0tQSURMTlMKKyAgICAgICAgLm5hbWUgPSAiU0tQSURMTlMiLAorICAgICAgICAuY29kZSA9IEJSTF9DTURfU0tQSURMTlMsCisgICAgICAgIC5pc1RvZ2dsZSA9IDEsCisgICAgICAgIC8vIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgU0tQSURMTlMgY29tbWFuZC4KKyAgICAgICAgLmRlc2NyaXB0aW9uID0KKyAgICAgICAgICAgIHN0cnRleHQoInNldCBza2lwcGluZyBvZiBsaW5lcyB3aXRoIGlkZW50aWNhbCBjb250ZW50IG9uL29mZiIpLAorICAgIH0sCisKKyAgICB7CisgICAgICAgIC8vIEJSTF9DTURfU0tQQkxOS1dJTlMKKyAgICAgICAgLm5hbWUgPSAiU0tQQkxOS1dJTlMiLAorICAgICAgICAuY29kZSA9IEJSTF9DTURfU0tQQkxOS1dJTlMsCisgICAgICAgIC5pc1RvZ2dsZSA9IDEsCisgICAgICAgIC8vIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgU0tQQkxOS1dJTlMgY29tbWFuZC4KKyAgICAgICAgLmRlc2NyaXB0aW9uID0gc3RydGV4dCgic2V0IHNraXBwaW5nIG9mIGJsYW5rIGJyYWlsbGUgd2luZG93cyBvbi9vZmYiKSwKKyAgICB9LAorCisgICAgeworICAgICAgICAvLyBCUkxfQ01EX0NTUlZJUworICAgICAgICAubmFtZSA9ICJDU1JWSVMiLAorICAgICAgICAuY29kZSA9IEJSTF9DTURfQ1NSVklTLAorICAgICAgICAuaXNUb2dnbGUgPSAxLAorICAgICAgICAvLyB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIENTUlZJUyBjb21tYW5kLgorICAgICAgICAuZGVzY3JpcHRpb24gPSBzdHJ0ZXh0KCJzZXQgc2NyZWVuIGN1cnNvciB2aXNpYmlsaXR5IG9uL29mZiIpLAorICAgIH0sCisKKyAgICB7CisgICAgICAgIC8vIEJSTF9DTURfQ1NSSElERQorICAgICAgICAubmFtZSA9ICJDU1JISURFIiwKKyAgICAgICAgLmNvZGUgPSBCUkxfQ01EX0NTUkhJREUsCisgICAgICAgIC5pc1RvZ2dsZSA9IDEsCisgICAgICAgIC8vIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgQ1NSSElERSBjb21tYW5kLgorICAgICAgICAuZGVzY3JpcHRpb24gPSBzdHJ0ZXh0KCJzZXQgaGlkZGVuIHNjcmVlbiBjdXJzb3Igb24vb2ZmIiksCisgICAgfSwKKworICAgIHsKKyAgICAgICAgLy8gQlJMX0NNRF9DU1JUUksKKyAgICAgICAgLm5hbWUgPSAiQ1NSVFJLIiwKKyAgICAgICAgLmNvZGUgPSBCUkxfQ01EX0NTUlRSSywKKyAgICAgICAgLmlzVG9nZ2xlID0gMSwKKyAgICAgICAgLy8geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBDU1JUUksgY29tbWFuZC4KKyAgICAgICAgLmRlc2NyaXB0aW9uID0gc3RydGV4dCgic2V0IHRyYWNrIHNjcmVlbiBjdXJzb3Igb24vb2ZmIiksCisgICAgfSwKKworICAgIHsKKyAgICAgICAgLy8gQlJMX0NNRF9DU1JTSVpFCisgICAgICAgIC5uYW1lID0gIkNTUlNJWkUiLAorICAgICAgICAuY29kZSA9IEJSTF9DTURfQ1NSU0laRSwKKyAgICAgICAgLmlzVG9nZ2xlID0gMSwKKyAgICAgICAgLy8geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBDU1JTSVpFIGNvbW1hbmQuCisgICAgICAgIC5kZXNjcmlwdGlvbiA9IHN0cnRleHQoInNldCBzY3JlZW4gY3Vyc29yIHN0eWxlIGJsb2NrL3VuZGVybGluZSIpLAorICAgIH0sCisKKyAgICB7CisgICAgICAgIC8vIEJSTF9DTURfQ1NSQkxJTksKKyAgICAgICAgLm5hbWUgPSAiQ1NSQkxJTksiLAorICAgICAgICAuY29kZSA9IEJSTF9DTURfQ1NSQkxJTkssCisgICAgICAgIC5pc1RvZ2dsZSA9IDEsCisgICAgICAgIC8vIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgQ1NSQkxJTksgY29tbWFuZC4KKyAgICAgICAgLmRlc2NyaXB0aW9uID0gc3RydGV4dCgic2V0IHNjcmVlbiBjdXJzb3IgYmxpbmtpbmcgb24vb2ZmIiksCisgICAgfSwKKworICAgIHsKKyAgICAgICAgLy8gQlJMX0NNRF9BVFRSVklTCisgICAgICAgIC5uYW1lID0gIkFUVFJWSVMiLAorICAgICAgICAuY29kZSA9IEJSTF9DTURfQVRUUlZJUywKKyAgICAgICAgLmlzVG9nZ2xlID0gMSwKKyAgICAgICAgLy8geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBBVFRSVklTIGNvbW1hbmQuCisgICAgICAgIC5kZXNjcmlwdGlvbiA9IHN0cnRleHQoInNldCBhdHRyaWJ1dGUgdW5kZXJsaW5pbmcgb24vb2ZmIiksCisgICAgfSwKKworICAgIHsKKyAgICAgICAgLy8gQlJMX0NNRF9BVFRSQkxJTksKKyAgICAgICAgLm5hbWUgPSAiQVRUUkJMSU5LIiwKKyAgICAgICAgLmNvZGUgPSBCUkxfQ01EX0FUVFJCTElOSywKKyAgICAgICAgLmlzVG9nZ2xlID0gMSwKKyAgICAgICAgLy8geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBBVFRSQkxJTksgY29tbWFuZC4KKyAgICAgICAgLmRlc2NyaXB0aW9uID0gc3RydGV4dCgic2V0IGF0dHJpYnV0ZSBibGlua2luZyBvbi9vZmYiKSwKKyAgICB9LAorCisgICAgeworICAgICAgICAvLyBCUkxfQ01EX0NBUEJMSU5LCisgICAgICAgIC5uYW1lID0gIkNBUEJMSU5LIiwKKyAgICAgICAgLmNvZGUgPSBCUkxfQ01EX0NBUEJMSU5LLAorICAgICAgICAuaXNUb2dnbGUgPSAxLAorICAgICAgICAvLyB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIENBUEJMSU5LIGNvbW1hbmQuCisgICAgICAgIC5kZXNjcmlwdGlvbiA9IHN0cnRleHQoInNldCBjYXBpdGFsIGxldHRlciBibGlua2luZyBvbi9vZmYiKSwKKyAgICB9LAorCisgICAgeworICAgICAgICAvLyBCUkxfQ01EX1RVTkVTCisgICAgICAgIC5uYW1lID0gIlRVTkVTIiwKKyAgICAgICAgLmNvZGUgPSBCUkxfQ01EX1RVTkVTLAorICAgICAgICAuaXNUb2dnbGUgPSAxLAorICAgICAgICAvLyB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIFRVTkVTIGNvbW1hbmQuCisgICAgICAgIC5kZXNjcmlwdGlvbiA9IHN0cnRleHQoInNldCBhbGVydCB0dW5lcyBvbi9vZmYiKSwKKyAgICB9LAorCisgICAgeworICAgICAgICAvLyBCUkxfQ01EX0FVVE9SRVBFQVQKKyAgICAgICAgLm5hbWUgPSAiQVVUT1JFUEVBVCIsCisgICAgICAgIC5jb2RlID0gQlJMX0NNRF9BVVRPUkVQRUFULAorICAgICAgICAuaXNUb2dnbGUgPSAxLAorICAgICAgICAvLyB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIEFVVE9SRVBFQVQgY29tbWFuZC4KKyAgICAgICAgLmRlc2NyaXB0aW9uID0gc3RydGV4dCgic2V0IGF1dG9yZXBlYXQgb24vb2ZmIiksCisgICAgfSwKKworICAgIHsKKyAgICAgICAgLy8gQlJMX0NNRF9BVVRPU1BFQUsKKyAgICAgICAgLm5hbWUgPSAiQVVUT1NQRUFLIiwKKyAgICAgICAgLmNvZGUgPSBCUkxfQ01EX0FVVE9TUEVBSywKKyAgICAgICAgLmlzVG9nZ2xlID0gMSwKKyAgICAgICAgLy8geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBBVVRPU1BFQUsgY29tbWFuZC4KKyAgICAgICAgLmRlc2NyaXB0aW9uID0gc3RydGV4dCgic2V0IGF1dG9zcGVhayBvbi9vZmYiKSwKKyAgICB9LAorCisgICAgeworICAgICAgICAvLyBCUkxfQ01EX0hFTFAKKyAgICAgICAgLm5hbWUgPSAiSEVMUCIsCisgICAgICAgIC5jb2RlID0gQlJMX0NNRF9IRUxQLAorICAgICAgICAvLyB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIEhFTFAgY29tbWFuZC4KKyAgICAgICAgLmRlc2NyaXB0aW9uID0gc3RydGV4dCgiZW50ZXIvbGVhdmUgaGVscCBkaXNwbGF5IiksCisgICAgfSwKKworICAgIHsKKyAgICAgICAgLy8gQlJMX0NNRF9JTkZPCisgICAgICAgIC5uYW1lID0gIklORk8iLAorICAgICAgICAuY29kZSA9IEJSTF9DTURfSU5GTywKKyAgICAgICAgLy8geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBJTkZPIGNvbW1hbmQuCisgICAgICAgIC5kZXNjcmlwdGlvbiA9IHN0cnRleHQoImVudGVyL2xlYXZlIHN0YXR1cyBkaXNwbGF5IiksCisgICAgfSwKKworICAgIHsKKyAgICAgICAgLy8gQlJMX0NNRF9MRUFSTgorICAgICAgICAubmFtZSA9ICJMRUFSTiIsCisgICAgICAgIC5jb2RlID0gQlJMX0NNRF9MRUFSTiwKKyAgICAgICAgLy8geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBMRUFSTiBjb21tYW5kLgorICAgICAgICAuZGVzY3JpcHRpb24gPSBzdHJ0ZXh0KCJlbnRlci9sZWF2ZSBjb21tYW5kIGxlYXJuIG1vZGUiKSwKKyAgICB9LAorCisgICAgeworICAgICAgICAvLyBCUkxfQ01EX1BSRUZNRU5VCisgICAgICAgIC5uYW1lID0gIlBSRUZNRU5VIiwKKyAgICAgICAgLmNvZGUgPSBCUkxfQ01EX1BSRUZNRU5VLAorICAgICAgICAvLyB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIFBSRUZNRU5VIGNvbW1hbmQuCisgICAgICAgIC5kZXNjcmlwdGlvbiA9IHN0cnRleHQoImVudGVyL2xlYXZlIHByZWZlcmVuY2VzIG1lbnUiKSwKKyAgICB9LAorCisgICAgeworICAgICAgICAvLyBCUkxfQ01EX1BSRUZTQVZFCisgICAgICAgIC5uYW1lID0gIlBSRUZTQVZFIiwKKyAgICAgICAgLmNvZGUgPSBCUkxfQ01EX1BSRUZTQVZFLAorICAgICAgICAvLyB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIFBSRUZTQVZFIGNvbW1hbmQuCisgICAgICAgIC5kZXNjcmlwdGlvbiA9IHN0cnRleHQoInNhdmUgcHJlZmVyZW5jZXMgdG8gZGlzayIpLAorICAgIH0sCisKKyAgICB7CisgICAgICAgIC8vIEJSTF9DTURfUFJFRkxPQUQKKyAgICAgICAgLm5hbWUgPSAiUFJFRkxPQUQiLAorICAgICAgICAuY29kZSA9IEJSTF9DTURfUFJFRkxPQUQsCisgICAgICAgIC8vIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgUFJFRkxPQUQgY29tbWFuZC4KKyAgICAgICAgLmRlc2NyaXB0aW9uID0gc3RydGV4dCgicmVzdG9yZSBwcmVmZXJlbmNlcyBmcm9tIGRpc2siKSwKKyAgICB9LAorCisgICAgeworICAgICAgICAvLyBCUkxfQ01EX01FTlVfRklSU1RfSVRFTQorICAgICAgICAubmFtZSA9ICJNRU5VX0ZJUlNUX0lURU0iLAorICAgICAgICAuY29kZSA9IEJSTF9DTURfTUVOVV9GSVJTVF9JVEVNLAorICAgICAgICAuaXNNb3Rpb24gPSAxLAorICAgICAgICAuaXNWZXJ0aWNhbCA9IDEsCisgICAgICAgIC8vIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgTUVOVV9GSVJTVF9JVEVNIGNvbW1hbmQuCisgICAgICAgIC5kZXNjcmlwdGlvbiA9IHN0cnRleHQoImdvIHVwIHRvIGZpcnN0IGl0ZW0iKSwKKyAgICB9LAorCisgICAgeworICAgICAgICAvLyBCUkxfQ01EX01FTlVfTEFTVF9JVEVNCisgICAgICAgIC5uYW1lID0gIk1FTlVfTEFTVF9JVEVNIiwKKyAgICAgICAgLmNvZGUgPSBCUkxfQ01EX01FTlVfTEFTVF9JVEVNLAorICAgICAgICAuaXNNb3Rpb24gPSAxLAorICAgICAgICAuaXNWZXJ0aWNhbCA9IDEsCisgICAgICAgIC8vIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgTUVOVV9MQVNUX0lURU0gY29tbWFuZC4KKyAgICAgICAgLmRlc2NyaXB0aW9uID0gc3RydGV4dCgiZ28gZG93biB0byBsYXN0IGl0ZW0iKSwKKyAgICB9LAorCisgICAgeworICAgICAgICAvLyBCUkxfQ01EX01FTlVfUFJFVl9JVEVNCisgICAgICAgIC5uYW1lID0gIk1FTlVfUFJFVl9JVEVNIiwKKyAgICAgICAgLmNvZGUgPSBCUkxfQ01EX01FTlVfUFJFVl9JVEVNLAorICAgICAgICAuaXNNb3Rpb24gPSAxLAorICAgICAgICAuaXNWZXJ0aWNhbCA9IDEsCisgICAgICAgIC8vIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgTUVOVV9QUkVWX0lURU0gY29tbWFuZC4KKyAgICAgICAgLmRlc2NyaXB0aW9uID0gc3RydGV4dCgiZ28gdXAgdG8gcHJldmlvdXMgaXRlbSIpLAorICAgIH0sCisKKyAgICB7CisgICAgICAgIC8vIEJSTF9DTURfTUVOVV9ORVhUX0lURU0KKyAgICAgICAgLm5hbWUgPSAiTUVOVV9ORVhUX0lURU0iLAorICAgICAgICAuY29kZSA9IEJSTF9DTURfTUVOVV9ORVhUX0lURU0sCisgICAgICAgIC5pc01vdGlvbiA9IDEsCisgICAgICAgIC5pc1ZlcnRpY2FsID0gMSwKKyAgICAgICAgLy8geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBNRU5VX05FWFRfSVRFTSBjb21tYW5kLgorICAgICAgICAuZGVzY3JpcHRpb24gPSBzdHJ0ZXh0KCJnbyBkb3duIHRvIG5leHQgaXRlbSIpLAorICAgIH0sCisKKyAgICB7CisgICAgICAgIC8vIEJSTF9DTURfTUVOVV9QUkVWX1NFVFRJTkcKKyAgICAgICAgLm5hbWUgPSAiTUVOVV9QUkVWX1NFVFRJTkciLAorICAgICAgICAuY29kZSA9IEJSTF9DTURfTUVOVV9QUkVWX1NFVFRJTkcsCisgICAgICAgIC8vIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgTUVOVV9QUkVWX1NFVFRJTkcgY29tbWFuZC4KKyAgICAgICAgLmRlc2NyaXB0aW9uID0gc3RydGV4dCgic2VsZWN0IHByZXZpb3VzIGNob2ljZSIpLAorICAgIH0sCisKKyAgICB7CisgICAgICAgIC8vIEJSTF9DTURfTUVOVV9ORVhUX1NFVFRJTkcKKyAgICAgICAgLm5hbWUgPSAiTUVOVV9ORVhUX1NFVFRJTkciLAorICAgICAgICAuY29kZSA9IEJSTF9DTURfTUVOVV9ORVhUX1NFVFRJTkcsCisgICAgICAgIC8vIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgTUVOVV9ORVhUX1NFVFRJTkcgY29tbWFuZC4KKyAgICAgICAgLmRlc2NyaXB0aW9uID0gc3RydGV4dCgic2VsZWN0IG5leHQgY2hvaWNlIiksCisgICAgfSwKKworICAgIHsKKyAgICAgICAgLy8gQlJMX0NNRF9NVVRFCisgICAgICAgIC5uYW1lID0gIk1VVEUiLAorICAgICAgICAuY29kZSA9IEJSTF9DTURfTVVURSwKKyAgICAgICAgLy8geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBNVVRFIGNvbW1hbmQuCisgICAgICAgIC5kZXNjcmlwdGlvbiA9IHN0cnRleHQoInN0b3Agc3BlYWtpbmciKSwKKyAgICB9LAorCisgICAgeworICAgICAgICAvLyBCUkxfQ01EX1NQS0hPTUUKKyAgICAgICAgLm5hbWUgPSAiU1BLSE9NRSIsCisgICAgICAgIC5jb2RlID0gQlJMX0NNRF9TUEtIT01FLAorICAgICAgICAuaXNNb3Rpb24gPSAxLAorICAgICAgICAvLyB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIFNQS0hPTUUgY29tbWFuZC4KKyAgICAgICAgLmRlc2NyaXB0aW9uID0gc3RydGV4dCgiZ28gdG8gY3VycmVudCBzcGVha2luZyBwb3NpdGlvbiIpLAorICAgIH0sCisKKyAgICB7CisgICAgICAgIC8vIEJSTF9DTURfU0FZX0xJTkUKKyAgICAgICAgLm5hbWUgPSAiU0FZX0xJTkUiLAorICAgICAgICAuY29kZSA9IEJSTF9DTURfU0FZX0xJTkUsCisgICAgICAgIC8vIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgU0FZX0xJTkUgY29tbWFuZC4KKyAgICAgICAgLmRlc2NyaXB0aW9uID0gc3RydGV4dCgic3BlYWsgY3VycmVudCBsaW5lIiksCisgICAgfSwKKworICAgIHsKKyAgICAgICAgLy8gQlJMX0NNRF9TQVlfQUJPVkUKKyAgICAgICAgLm5hbWUgPSAiU0FZX0FCT1ZFIiwKKyAgICAgICAgLmNvZGUgPSBCUkxfQ01EX1NBWV9BQk9WRSwKKyAgICAgICAgLy8geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBTQVlfQUJPVkUgY29tbWFuZC4KKyAgICAgICAgLmRlc2NyaXB0aW9uID0gc3RydGV4dCgic3BlYWsgZnJvbSB0b3Agb2Ygc2NyZWVuIHRocm91Z2ggY3VycmVudCBsaW5lIiksCisgICAgfSwKKworICAgIHsKKyAgICAgICAgLy8gQlJMX0NNRF9TQVlfQkVMT1cKKyAgICAgICAgLm5hbWUgPSAiU0FZX0JFTE9XIiwKKyAgICAgICAgLmNvZGUgPSBCUkxfQ01EX1NBWV9CRUxPVywKKyAgICAgICAgLy8geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBTQVlfQkVMT1cgY29tbWFuZC4KKyAgICAgICAgLmRlc2NyaXB0aW9uID0KKyAgICAgICAgICAgIHN0cnRleHQoInNwZWFrIGZyb20gY3VycmVudCBsaW5lIHRocm91Z2ggYm90dG9tIG9mIHNjcmVlbiIpLAorICAgIH0sCisKKyAgICB7CisgICAgICAgIC8vIEJSTF9DTURfU0FZX1NMT1dFUgorICAgICAgICAubmFtZSA9ICJTQVlfU0xPV0VSIiwKKyAgICAgICAgLmNvZGUgPSBCUkxfQ01EX1NBWV9TTE9XRVIsCisgICAgICAgIC8vIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgU0FZX1NMT1dFUiBjb21tYW5kLgorICAgICAgICAuZGVzY3JpcHRpb24gPSBzdHJ0ZXh0KCJkZWNyZWFzZSBzcGVha2luZyByYXRlIiksCisgICAgfSwKKworICAgIHsKKyAgICAgICAgLy8gQlJMX0NNRF9TQVlfRkFTVEVSCisgICAgICAgIC5uYW1lID0gIlNBWV9GQVNURVIiLAorICAgICAgICAuY29kZSA9IEJSTF9DTURfU0FZX0ZBU1RFUiwKKyAgICAgICAgLy8geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBTQVlfRkFTVEVSIGNvbW1hbmQuCisgICAgICAgIC5kZXNjcmlwdGlvbiA9IHN0cnRleHQoImluY3JlYXNlIHNwZWFraW5nIHJhdGUiKSwKKyAgICB9LAorCisgICAgeworICAgICAgICAvLyBCUkxfQ01EX1NBWV9TT0ZURVIKKyAgICAgICAgLm5hbWUgPSAiU0FZX1NPRlRFUiIsCisgICAgICAgIC5jb2RlID0gQlJMX0NNRF9TQVlfU09GVEVSLAorICAgICAgICAvLyB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIFNBWV9TT0ZURVIgY29tbWFuZC4KKyAgICAgICAgLmRlc2NyaXB0aW9uID0gc3RydGV4dCgiZGVjcmVhc2Ugc3BlYWtpbmcgdm9sdW1lIiksCisgICAgfSwKKworICAgIHsKKyAgICAgICAgLy8gQlJMX0NNRF9TQVlfTE9VREVSCisgICAgICAgIC5uYW1lID0gIlNBWV9MT1VERVIiLAorICAgICAgICAuY29kZSA9IEJSTF9DTURfU0FZX0xPVURFUiwKKyAgICAgICAgLy8geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBTQVlfTE9VREVSIGNvbW1hbmQuCisgICAgICAgIC5kZXNjcmlwdGlvbiA9IHN0cnRleHQoImluY3JlYXNlIHNwZWFraW5nIHZvbHVtZSIpLAorICAgIH0sCisKKyAgICB7CisgICAgICAgIC8vIEJSTF9DTURfU1dJVENIVlRfUFJFVgorICAgICAgICAubmFtZSA9ICJTV0lUQ0hWVF9QUkVWIiwKKyAgICAgICAgLmNvZGUgPSBCUkxfQ01EX1NXSVRDSFZUX1BSRVYsCisgICAgICAgIC8vIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgU1dJVENIVlRfUFJFViBjb21tYW5kLgorICAgICAgICAuZGVzY3JpcHRpb24gPSBzdHJ0ZXh0KCJzd2l0Y2ggdG8gdGhlIHByZXZpb3VzIHZpcnR1YWwgdGVybWluYWwiKSwKKyAgICB9LAorCisgICAgeworICAgICAgICAvLyBCUkxfQ01EX1NXSVRDSFZUX05FWFQKKyAgICAgICAgLm5hbWUgPSAiU1dJVENIVlRfTkVYVCIsCisgICAgICAgIC5jb2RlID0gQlJMX0NNRF9TV0lUQ0hWVF9ORVhULAorICAgICAgICAvLyB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIFNXSVRDSFZUX05FWFQgY29tbWFuZC4KKyAgICAgICAgLmRlc2NyaXB0aW9uID0gc3RydGV4dCgic3dpdGNoIHRvIHRoZSBuZXh0IHZpcnR1YWwgdGVybWluYWwiKSwKKyAgICB9LAorCisgICAgeworICAgICAgICAvLyBCUkxfQ01EX0NTUkpNUF9WRVJUCisgICAgICAgIC5uYW1lID0gIkNTUkpNUF9WRVJUIiwKKyAgICAgICAgLmNvZGUgPSBCUkxfQ01EX0NTUkpNUF9WRVJULAorICAgICAgICAuaXNSb3V0aW5nID0gMSwKKyAgICAgICAgLy8geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBDU1JKTVBfVkVSVCBjb21tYW5kLgorICAgICAgICAuZGVzY3JpcHRpb24gPSBzdHJ0ZXh0KCJicmluZyBzY3JlZW4gY3Vyc29yIHRvIGN1cnJlbnQgbGluZSIpLAorICAgIH0sCisKKyAgICB7CisgICAgICAgIC8vIEJSTF9DTURfUEFTVEUKKyAgICAgICAgLm5hbWUgPSAiUEFTVEUiLAorICAgICAgICAuY29kZSA9IEJSTF9DTURfUEFTVEUsCisgICAgICAgIC8vIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgUEFTVEUgY29tbWFuZC4KKyAgICAgICAgLmRlc2NyaXB0aW9uID0gc3RydGV4dCgiaW5zZXJ0IGNsaXBib2FyZCB0ZXh0IGFmdGVyIHNjcmVlbiBjdXJzb3IiKSwKKyAgICB9LAorCisgICAgeworICAgICAgICAvLyBCUkxfQ01EX1JFU1RBUlRCUkwKKyAgICAgICAgLm5hbWUgPSAiUkVTVEFSVEJSTCIsCisgICAgICAgIC5jb2RlID0gQlJMX0NNRF9SRVNUQVJUQlJMLAorICAgICAgICAvLyB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIFJFU1RBUlRCUkwgY29tbWFuZC4KKyAgICAgICAgLmRlc2NyaXB0aW9uID0gc3RydGV4dCgicmVzdGFydCBicmFpbGxlIGRyaXZlciIpLAorICAgIH0sCisKKyAgICB7CisgICAgICAgIC8vIEJSTF9DTURfUkVTVEFSVFNQRUVDSAorICAgICAgICAubmFtZSA9ICJSRVNUQVJUU1BFRUNIIiwKKyAgICAgICAgLmNvZGUgPSBCUkxfQ01EX1JFU1RBUlRTUEVFQ0gsCisgICAgICAgIC8vIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgUkVTVEFSVFNQRUVDSCBjb21tYW5kLgorICAgICAgICAuZGVzY3JpcHRpb24gPSBzdHJ0ZXh0KCJyZXN0YXJ0IHNwZWVjaCBkcml2ZXIiKSwKKyAgICB9LAorCisgICAgeworICAgICAgICAvLyBCUkxfQ01EX09GRkxJTkUKKyAgICAgICAgLm5hbWUgPSAiT0ZGTElORSIsCisgICAgICAgIC5jb2RlID0gQlJMX0NNRF9PRkZMSU5FLAorICAgICAgICAvLyB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIE9GRkxJTkUgY29tbWFuZC4KKyAgICAgICAgLmRlc2NyaXB0aW9uID0gc3RydGV4dCgiYnJhaWxsZSBkaXNwbGF5IHRlbXBvcmFyaWx5IHVuYXZhaWxhYmxlIiksCisgICAgfSwKKworICAgIHsKKyAgICAgICAgLy8gQlJMX0NNRF9TSElGVAorICAgICAgICAubmFtZSA9ICJTSElGVCIsCisgICAgICAgIC5jb2RlID0gQlJMX0NNRF9TSElGVCwKKyAgICAgICAgLy8geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBTSElGVCBjb21tYW5kLgorICAgICAgICAuZGVzY3JpcHRpb24gPQorICAgICAgICAgICAgc3RydGV4dCgiY3ljbGUgdGhlIFNoaWZ0IHN0aWNreSBpbnB1dCBtb2RpZmllciAobmV4dCwgb24sIG9mZikiKSwKKyAgICB9LAorCisgICAgeworICAgICAgICAvLyBCUkxfQ01EX1VQUEVSCisgICAgICAgIC5uYW1lID0gIlVQUEVSIiwKKyAgICAgICAgLmNvZGUgPSBCUkxfQ01EX1VQUEVSLAorICAgICAgICAvLyB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIFVQUEVSIGNvbW1hbmQuCisgICAgICAgIC5kZXNjcmlwdGlvbiA9CisgICAgICAgICAgICBzdHJ0ZXh0KCJjeWNsZSB0aGUgVXBwZXIgc3RpY2t5IGlucHV0IG1vZGlmaWVyIChuZXh0LCBvbiwgb2ZmKSIpLAorICAgIH0sCisKKyAgICB7CisgICAgICAgIC8vIEJSTF9DTURfQ09OVFJPTAorICAgICAgICAubmFtZSA9ICJDT05UUk9MIiwKKyAgICAgICAgLmNvZGUgPSBCUkxfQ01EX0NPTlRST0wsCisgICAgICAgIC8vIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgQ09OVFJPTCBjb21tYW5kLgorICAgICAgICAuZGVzY3JpcHRpb24gPQorICAgICAgICAgICAgc3RydGV4dCgiY3ljbGUgdGhlIENvbnRyb2wgc3RpY2t5IGlucHV0IG1vZGlmaWVyIChuZXh0LCBvbiwgb2ZmKSIpLAorICAgIH0sCisKKyAgICB7CisgICAgICAgIC8vIEJSTF9DTURfTUVUQQorICAgICAgICAubmFtZSA9ICJNRVRBIiwKKyAgICAgICAgLmNvZGUgPSBCUkxfQ01EX01FVEEsCisgICAgICAgIC8vIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgTUVUQSBjb21tYW5kLgorICAgICAgICAuZGVzY3JpcHRpb24gPSBzdHJ0ZXh0KAorICAgICAgICAgICAgImN5Y2xlIHRoZSBNZXRhIChMZWZ0IEFsdCkgc3RpY2t5IGlucHV0IG1vZGlmaWVyIChuZXh0LCBvbiwgb2ZmKSIpLAorICAgIH0sCisKKyAgICB7CisgICAgICAgIC8vIEJSTF9DTURfVElNRQorICAgICAgICAubmFtZSA9ICJUSU1FIiwKKyAgICAgICAgLmNvZGUgPSBCUkxfQ01EX1RJTUUsCisgICAgICAgIC8vIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgVElNRSBjb21tYW5kLgorICAgICAgICAuZGVzY3JpcHRpb24gPSBzdHJ0ZXh0KCJzaG93IGN1cnJlbnQgZGF0ZSBhbmQgdGltZSIpLAorICAgIH0sCisKKyAgICB7CisgICAgICAgIC8vIEJSTF9DTURfTUVOVV9QUkVWX0xFVkVMCisgICAgICAgIC5uYW1lID0gIk1FTlVfUFJFVl9MRVZFTCIsCisgICAgICAgIC5jb2RlID0gQlJMX0NNRF9NRU5VX1BSRVZfTEVWRUwsCisgICAgICAgIC5pc01vdGlvbiA9IDEsCisgICAgICAgIC8vIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgTUVOVV9QUkVWX0xFVkVMIGNvbW1hbmQuCisgICAgICAgIC5kZXNjcmlwdGlvbiA9IHN0cnRleHQoImdvIHRvIHByZXZpb3VzIG1lbnUgbGV2ZWwiKSwKKyAgICB9LAorCisgICAgeworICAgICAgICAvLyBCUkxfQ01EX0FTUEtfU0VMX0xJTkUKKyAgICAgICAgLm5hbWUgPSAiQVNQS19TRUxfTElORSIsCisgICAgICAgIC5jb2RlID0gQlJMX0NNRF9BU1BLX1NFTF9MSU5FLAorICAgICAgICAuaXNUb2dnbGUgPSAxLAorICAgICAgICAvLyB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIEFTUEtfU0VMX0xJTkUgY29tbWFuZC4KKyAgICAgICAgLmRlc2NyaXB0aW9uID0gc3RydGV4dCgic2V0IGF1dG9zcGVhayBzZWxlY3RlZCBsaW5lIG9uL29mZiIpLAorICAgIH0sCisKKyAgICB7CisgICAgICAgIC8vIEJSTF9DTURfQVNQS19TRUxfQ0hBUgorICAgICAgICAubmFtZSA9ICJBU1BLX1NFTF9DSEFSIiwKKyAgICAgICAgLmNvZGUgPSBCUkxfQ01EX0FTUEtfU0VMX0NIQVIsCisgICAgICAgIC5pc1RvZ2dsZSA9IDEsCisgICAgICAgIC8vIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgQVNQS19TRUxfQ0hBUiBjb21tYW5kLgorICAgICAgICAuZGVzY3JpcHRpb24gPSBzdHJ0ZXh0KCJzZXQgYXV0b3NwZWFrIHNlbGVjdGVkIGNoYXJhY3RlciBvbi9vZmYiKSwKKyAgICB9LAorCisgICAgeworICAgICAgICAvLyBCUkxfQ01EX0FTUEtfSU5TX0NIQVJTCisgICAgICAgIC5uYW1lID0gIkFTUEtfSU5TX0NIQVJTIiwKKyAgICAgICAgLmNvZGUgPSBCUkxfQ01EX0FTUEtfSU5TX0NIQVJTLAorICAgICAgICAuaXNUb2dnbGUgPSAxLAorICAgICAgICAvLyB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIEFTUEtfSU5TX0NIQVJTIGNvbW1hbmQuCisgICAgICAgIC5kZXNjcmlwdGlvbiA9IHN0cnRleHQoInNldCBhdXRvc3BlYWsgaW5zZXJ0ZWQgY2hhcmFjdGVycyBvbi9vZmYiKSwKKyAgICB9LAorCisgICAgeworICAgICAgICAvLyBCUkxfQ01EX0FTUEtfREVMX0NIQVJTCisgICAgICAgIC5uYW1lID0gIkFTUEtfREVMX0NIQVJTIiwKKyAgICAgICAgLmNvZGUgPSBCUkxfQ01EX0FTUEtfREVMX0NIQVJTLAorICAgICAgICAuaXNUb2dnbGUgPSAxLAorICAgICAgICAvLyB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIEFTUEtfREVMX0NIQVJTIGNvbW1hbmQuCisgICAgICAgIC5kZXNjcmlwdGlvbiA9IHN0cnRleHQoInNldCBhdXRvc3BlYWsgZGVsZXRlZCBjaGFyYWN0ZXJzIG9uL29mZiIpLAorICAgIH0sCisKKyAgICB7CisgICAgICAgIC8vIEJSTF9DTURfQVNQS19SRVBfQ0hBUlMKKyAgICAgICAgLm5hbWUgPSAiQVNQS19SRVBfQ0hBUlMiLAorICAgICAgICAuY29kZSA9IEJSTF9DTURfQVNQS19SRVBfQ0hBUlMsCisgICAgICAgIC5pc1RvZ2dsZSA9IDEsCisgICAgICAgIC8vIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgQVNQS19SRVBfQ0hBUlMgY29tbWFuZC4KKyAgICAgICAgLmRlc2NyaXB0aW9uID0gc3RydGV4dCgic2V0IGF1dG9zcGVhayByZXBsYWNlZCBjaGFyYWN0ZXJzIG9uL29mZiIpLAorICAgIH0sCisKKyAgICB7CisgICAgICAgIC8vIEJSTF9DTURfQVNQS19DTVBfV09SRFMKKyAgICAgICAgLm5hbWUgPSAiQVNQS19DTVBfV09SRFMiLAorICAgICAgICAuY29kZSA9IEJSTF9DTURfQVNQS19DTVBfV09SRFMsCisgICAgICAgIC5pc1RvZ2dsZSA9IDEsCisgICAgICAgIC8vIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgQVNQS19DTVBfV09SRFMgY29tbWFuZC4KKyAgICAgICAgLmRlc2NyaXB0aW9uID0gc3RydGV4dCgic2V0IGF1dG9zcGVhayBjb21wbGV0ZWQgd29yZHMgb24vb2ZmIiksCisgICAgfSwKKworICAgIHsKKyAgICAgICAgLy8gQlJMX0NNRF9TUEVBS19DVVJSX0NIQVIKKyAgICAgICAgLm5hbWUgPSAiU1BFQUtfQ1VSUl9DSEFSIiwKKyAgICAgICAgLmNvZGUgPSBCUkxfQ01EX1NQRUFLX0NVUlJfQ0hBUiwKKyAgICAgICAgLy8geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBTUEVBS19DVVJSX0NIQVIgY29tbWFuZC4KKyAgICAgICAgLmRlc2NyaXB0aW9uID0gc3RydGV4dCgic3BlYWsgY3VycmVudCBjaGFyYWN0ZXIiKSwKKyAgICB9LAorCisgICAgeworICAgICAgICAvLyBCUkxfQ01EX1NQRUFLX1BSRVZfQ0hBUgorICAgICAgICAubmFtZSA9ICJTUEVBS19QUkVWX0NIQVIiLAorICAgICAgICAuY29kZSA9IEJSTF9DTURfU1BFQUtfUFJFVl9DSEFSLAorICAgICAgICAuaXNNb3Rpb24gPSAxLAorICAgICAgICAvLyB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIFNQRUFLX1BSRVZfQ0hBUiBjb21tYW5kLgorICAgICAgICAuZGVzY3JpcHRpb24gPSBzdHJ0ZXh0KCJnbyB0byBhbmQgc3BlYWsgcHJldmlvdXMgY2hhcmFjdGVyIiksCisgICAgfSwKKworICAgIHsKKyAgICAgICAgLy8gQlJMX0NNRF9TUEVBS19ORVhUX0NIQVIKKyAgICAgICAgLm5hbWUgPSAiU1BFQUtfTkVYVF9DSEFSIiwKKyAgICAgICAgLmNvZGUgPSBCUkxfQ01EX1NQRUFLX05FWFRfQ0hBUiwKKyAgICAgICAgLmlzTW90aW9uID0gMSwKKyAgICAgICAgLy8geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBTUEVBS19ORVhUX0NIQVIgY29tbWFuZC4KKyAgICAgICAgLmRlc2NyaXB0aW9uID0gc3RydGV4dCgiZ28gdG8gYW5kIHNwZWFrIG5leHQgY2hhcmFjdGVyIiksCisgICAgfSwKKworICAgIHsKKyAgICAgICAgLy8gQlJMX0NNRF9TUEVBS19DVVJSX1dPUkQKKyAgICAgICAgLm5hbWUgPSAiU1BFQUtfQ1VSUl9XT1JEIiwKKyAgICAgICAgLmNvZGUgPSBCUkxfQ01EX1NQRUFLX0NVUlJfV09SRCwKKyAgICAgICAgLy8geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBTUEVBS19DVVJSX1dPUkQgY29tbWFuZC4KKyAgICAgICAgLmRlc2NyaXB0aW9uID0gc3RydGV4dCgic3BlYWsgY3VycmVudCB3b3JkIiksCisgICAgfSwKKworICAgIHsKKyAgICAgICAgLy8gQlJMX0NNRF9TUEVBS19QUkVWX1dPUkQKKyAgICAgICAgLm5hbWUgPSAiU1BFQUtfUFJFVl9XT1JEIiwKKyAgICAgICAgLmNvZGUgPSBCUkxfQ01EX1NQRUFLX1BSRVZfV09SRCwKKyAgICAgICAgLmlzTW90aW9uID0gMSwKKyAgICAgICAgLy8geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBTUEVBS19QUkVWX1dPUkQgY29tbWFuZC4KKyAgICAgICAgLmRlc2NyaXB0aW9uID0gc3RydGV4dCgiZ28gdG8gYW5kIHNwZWFrIHByZXZpb3VzIHdvcmQiKSwKKyAgICB9LAorCisgICAgeworICAgICAgICAvLyBCUkxfQ01EX1NQRUFLX05FWFRfV09SRAorICAgICAgICAubmFtZSA9ICJTUEVBS19ORVhUX1dPUkQiLAorICAgICAgICAuY29kZSA9IEJSTF9DTURfU1BFQUtfTkVYVF9XT1JELAorICAgICAgICAuaXNNb3Rpb24gPSAxLAorICAgICAgICAvLyB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIFNQRUFLX05FWFRfV09SRCBjb21tYW5kLgorICAgICAgICAuZGVzY3JpcHRpb24gPSBzdHJ0ZXh0KCJnbyB0byBhbmQgc3BlYWsgbmV4dCB3b3JkIiksCisgICAgfSwKKworICAgIHsKKyAgICAgICAgLy8gQlJMX0NNRF9TUEVBS19DVVJSX0xJTkUKKyAgICAgICAgLm5hbWUgPSAiU1BFQUtfQ1VSUl9MSU5FIiwKKyAgICAgICAgLmNvZGUgPSBCUkxfQ01EX1NQRUFLX0NVUlJfTElORSwKKyAgICAgICAgLy8geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBTUEVBS19DVVJSX0xJTkUgY29tbWFuZC4KKyAgICAgICAgLmRlc2NyaXB0aW9uID0gc3RydGV4dCgic3BlYWsgY3VycmVudCBsaW5lIiksCisgICAgfSwKKworICAgIHsKKyAgICAgICAgLy8gQlJMX0NNRF9TUEVBS19QUkVWX0xJTkUKKyAgICAgICAgLm5hbWUgPSAiU1BFQUtfUFJFVl9MSU5FIiwKKyAgICAgICAgLmNvZGUgPSBCUkxfQ01EX1NQRUFLX1BSRVZfTElORSwKKyAgICAgICAgLmlzTW90aW9uID0gMSwKKyAgICAgICAgLy8geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBTUEVBS19QUkVWX0xJTkUgY29tbWFuZC4KKyAgICAgICAgLmRlc2NyaXB0aW9uID0gc3RydGV4dCgiZ28gdG8gYW5kIHNwZWFrIHByZXZpb3VzIGxpbmUiKSwKKyAgICB9LAorCisgICAgeworICAgICAgICAvLyBCUkxfQ01EX1NQRUFLX05FWFRfTElORQorICAgICAgICAubmFtZSA9ICJTUEVBS19ORVhUX0xJTkUiLAorICAgICAgICAuY29kZSA9IEJSTF9DTURfU1BFQUtfTkVYVF9MSU5FLAorICAgICAgICAuaXNNb3Rpb24gPSAxLAorICAgICAgICAvLyB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIFNQRUFLX05FWFRfTElORSBjb21tYW5kLgorICAgICAgICAuZGVzY3JpcHRpb24gPSBzdHJ0ZXh0KCJnbyB0byBhbmQgc3BlYWsgbmV4dCBsaW5lIiksCisgICAgfSwKKworICAgIHsKKyAgICAgICAgLy8gQlJMX0NNRF9TUEVBS19GUlNUX0NIQVIKKyAgICAgICAgLm5hbWUgPSAiU1BFQUtfRlJTVF9DSEFSIiwKKyAgICAgICAgLmNvZGUgPSBCUkxfQ01EX1NQRUFLX0ZSU1RfQ0hBUiwKKyAgICAgICAgLmlzTW90aW9uID0gMSwKKyAgICAgICAgLy8geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBTUEVBS19GUlNUX0NIQVIgY29tbWFuZC4KKyAgICAgICAgLmRlc2NyaXB0aW9uID0KKyAgICAgICAgICAgIHN0cnRleHQoImdvIHRvIGFuZCBzcGVhayBmaXJzdCBub24tYmxhbmsgY2hhcmFjdGVyIG9uIGxpbmUiKSwKKyAgICB9LAorCisgICAgeworICAgICAgICAvLyBCUkxfQ01EX1NQRUFLX0xBU1RfQ0hBUgorICAgICAgICAubmFtZSA9ICJTUEVBS19MQVNUX0NIQVIiLAorICAgICAgICAuY29kZSA9IEJSTF9DTURfU1BFQUtfTEFTVF9DSEFSLAorICAgICAgICAuaXNNb3Rpb24gPSAxLAorICAgICAgICAvLyB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIFNQRUFLX0xBU1RfQ0hBUiBjb21tYW5kLgorICAgICAgICAuZGVzY3JpcHRpb24gPQorICAgICAgICAgICAgc3RydGV4dCgiZ28gdG8gYW5kIHNwZWFrIGxhc3Qgbm9uLWJsYW5rIGNoYXJhY3RlciBvbiBsaW5lIiksCisgICAgfSwKKworICAgIHsKKyAgICAgICAgLy8gQlJMX0NNRF9TUEVBS19GUlNUX0xJTkUKKyAgICAgICAgLm5hbWUgPSAiU1BFQUtfRlJTVF9MSU5FIiwKKyAgICAgICAgLmNvZGUgPSBCUkxfQ01EX1NQRUFLX0ZSU1RfTElORSwKKyAgICAgICAgLmlzTW90aW9uID0gMSwKKyAgICAgICAgLy8geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBTUEVBS19GUlNUX0xJTkUgY29tbWFuZC4KKyAgICAgICAgLmRlc2NyaXB0aW9uID0KKyAgICAgICAgICAgIHN0cnRleHQoImdvIHRvIGFuZCBzcGVhayBmaXJzdCBub24tYmxhbmsgbGluZSBvbiBzY3JlZW4iKSwKKyAgICB9LAorCisgICAgeworICAgICAgICAvLyBCUkxfQ01EX1NQRUFLX0xBU1RfTElORQorICAgICAgICAubmFtZSA9ICJTUEVBS19MQVNUX0xJTkUiLAorICAgICAgICAuY29kZSA9IEJSTF9DTURfU1BFQUtfTEFTVF9MSU5FLAorICAgICAgICAuaXNNb3Rpb24gPSAxLAorICAgICAgICAvLyB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIFNQRUFLX0xBU1RfTElORSBjb21tYW5kLgorICAgICAgICAuZGVzY3JpcHRpb24gPSBzdHJ0ZXh0KCJnbyB0byBhbmQgc3BlYWsgbGFzdCBub24tYmxhbmsgbGluZSBvbiBzY3JlZW4iKSwKKyAgICB9LAorCisgICAgeworICAgICAgICAvLyBCUkxfQ01EX0RFU0NfQ1VSUl9DSEFSCisgICAgICAgIC5uYW1lID0gIkRFU0NfQ1VSUl9DSEFSIiwKKyAgICAgICAgLmNvZGUgPSBCUkxfQ01EX0RFU0NfQ1VSUl9DSEFSLAorICAgICAgICAvLyB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIERFU0NfQ1VSUl9DSEFSIGNvbW1hbmQuCisgICAgICAgIC5kZXNjcmlwdGlvbiA9IHN0cnRleHQoImRlc2NyaWJlIGN1cnJlbnQgY2hhcmFjdGVyIiksCisgICAgfSwKKworICAgIHsKKyAgICAgICAgLy8gQlJMX0NNRF9TUEVMTF9DVVJSX1dPUkQKKyAgICAgICAgLm5hbWUgPSAiU1BFTExfQ1VSUl9XT1JEIiwKKyAgICAgICAgLmNvZGUgPSBCUkxfQ01EX1NQRUxMX0NVUlJfV09SRCwKKyAgICAgICAgLy8geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBTUEVMTF9DVVJSX1dPUkQgY29tbWFuZC4KKyAgICAgICAgLmRlc2NyaXB0aW9uID0gc3RydGV4dCgic3BlbGwgY3VycmVudCB3b3JkIiksCisgICAgfSwKKworICAgIHsKKyAgICAgICAgLy8gQlJMX0NNRF9ST1VURV9DVVJSX0xPQ04KKyAgICAgICAgLm5hbWUgPSAiUk9VVEVfQ1VSUl9MT0NOIiwKKyAgICAgICAgLmNvZGUgPSBCUkxfQ01EX1JPVVRFX0NVUlJfTE9DTiwKKyAgICAgICAgLmlzUm91dGluZyA9IDEsCisgICAgICAgIC8vIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgUk9VVEVfQ1VSUl9MT0NOIGNvbW1hbmQuCisgICAgICAgIC5kZXNjcmlwdGlvbiA9IHN0cnRleHQoImJyaW5nIHNjcmVlbiBjdXJzb3IgdG8gc3BlZWNoIGN1cnNvciIpLAorICAgIH0sCisKKyAgICB7CisgICAgICAgIC8vIEJSTF9DTURfU1BFQUtfQ1VSUl9MT0NOCisgICAgICAgIC5uYW1lID0gIlNQRUFLX0NVUlJfTE9DTiIsCisgICAgICAgIC5jb2RlID0gQlJMX0NNRF9TUEVBS19DVVJSX0xPQ04sCisgICAgICAgIC8vIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgU1BFQUtfQ1VSUl9MT0NOIGNvbW1hbmQuCisgICAgICAgIC5kZXNjcmlwdGlvbiA9IHN0cnRleHQoInNwZWFrIHNwZWVjaCBjdXJzb3IgbG9jYXRpb24iKSwKKyAgICB9LAorCisgICAgeworICAgICAgICAvLyBCUkxfQ01EX1NIT1dfQ1VSUl9MT0NOCisgICAgICAgIC5uYW1lID0gIlNIT1dfQ1VSUl9MT0NOIiwKKyAgICAgICAgLmNvZGUgPSBCUkxfQ01EX1NIT1dfQ1VSUl9MT0NOLAorICAgICAgICAuaXNUb2dnbGUgPSAxLAorICAgICAgICAvLyB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIFNIT1dfQ1VSUl9MT0NOIGNvbW1hbmQuCisgICAgICAgIC5kZXNjcmlwdGlvbiA9IHN0cnRleHQoInNldCBzcGVlY2ggY3Vyc29yIHZpc2liaWxpdHkgb24vb2ZmIiksCisgICAgfSwKKworICAgIHsKKyAgICAgICAgLy8gQlJMX0NNRF9DTElQX1NBVkUKKyAgICAgICAgLm5hbWUgPSAiQ0xJUF9TQVZFIiwKKyAgICAgICAgLmNvZGUgPSBCUkxfQ01EX0NMSVBfU0FWRSwKKyAgICAgICAgLy8geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBDTElQX1NBVkUgY29tbWFuZC4KKyAgICAgICAgLmRlc2NyaXB0aW9uID0gc3RydGV4dCgic2F2ZSBjbGlwYm9hcmQgdG8gZGlzayIpLAorICAgIH0sCisKKyAgICB7CisgICAgICAgIC8vIEJSTF9DTURfQ0xJUF9SRVNUT1JFCisgICAgICAgIC5uYW1lID0gIkNMSVBfUkVTVE9SRSIsCisgICAgICAgIC5jb2RlID0gQlJMX0NNRF9DTElQX1JFU1RPUkUsCisgICAgICAgIC8vIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgQ0xJUF9SRVNUT1JFIGNvbW1hbmQuCisgICAgICAgIC5kZXNjcmlwdGlvbiA9IHN0cnRleHQoInJlc3RvcmUgY2xpcGJvYXJkIGZyb20gZGlzayIpLAorICAgIH0sCisKKyAgICB7CisgICAgICAgIC8vIEJSTF9DTURfQlJMVUNET1RTCisgICAgICAgIC5uYW1lID0gIkJSTFVDRE9UUyIsCisgICAgICAgIC5jb2RlID0gQlJMX0NNRF9CUkxVQ0RPVFMsCisgICAgICAgIC5pc1RvZ2dsZSA9IDEsCisgICAgICAgIC8vIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgQlJMVUNET1RTIGNvbW1hbmQuCisgICAgICAgIC5kZXNjcmlwdGlvbiA9IHN0cnRleHQoInNldCBicmFpbGxlIHR5cGluZyBtb2RlIGRvdHMvdGV4dCIpLAorICAgIH0sCisKKyAgICB7CisgICAgICAgIC8vIEJSTF9DTURfQlJMS0JECisgICAgICAgIC5uYW1lID0gIkJSTEtCRCIsCisgICAgICAgIC5jb2RlID0gQlJMX0NNRF9CUkxLQkQsCisgICAgICAgIC5pc1RvZ2dsZSA9IDEsCisgICAgICAgIC8vIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgQlJMS0JEIGNvbW1hbmQuCisgICAgICAgIC5kZXNjcmlwdGlvbiA9IHN0cnRleHQoInNldCBicmFpbGxlIGtleWJvYXJkIGVuYWJsZWQvZGlzYWJsZWQiKSwKKyAgICB9LAorCisgICAgeworICAgICAgICAvLyBCUkxfQ01EX1VOU1RJQ0sKKyAgICAgICAgLm5hbWUgPSAiVU5TVElDSyIsCisgICAgICAgIC5jb2RlID0gQlJMX0NNRF9VTlNUSUNLLAorICAgICAgICAvLyB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIFVOU1RJQ0sgY29tbWFuZC4KKyAgICAgICAgLmRlc2NyaXB0aW9uID0gc3RydGV4dCgiY2xlYXIgYWxsIHN0aWNreSBpbnB1dCBtb2RpZmllcnMiKSwKKyAgICB9LAorCisgICAgeworICAgICAgICAvLyBCUkxfQ01EX0FMVEdSCisgICAgICAgIC5uYW1lID0gIkFMVEdSIiwKKyAgICAgICAgLmNvZGUgPSBCUkxfQ01EX0FMVEdSLAorICAgICAgICAvLyB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIEFMVEdSIGNvbW1hbmQuCisgICAgICAgIC5kZXNjcmlwdGlvbiA9IHN0cnRleHQoImN5Y2xlIHRoZSBBbHRHciAoUmlnaHQgQWx0KSBzdGlja3kgaW5wdXQgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtb2RpZmllciAobmV4dCwgb24sIG9mZikiKSwKKyAgICB9LAorCisgICAgeworICAgICAgICAvLyBCUkxfQ01EX0dVSQorICAgICAgICAubmFtZSA9ICJHVUkiLAorICAgICAgICAuY29kZSA9IEJSTF9DTURfR1VJLAorICAgICAgICAvLyB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIEdVSSBjb21tYW5kLgorICAgICAgICAuZGVzY3JpcHRpb24gPSBzdHJ0ZXh0KAorICAgICAgICAgICAgImN5Y2xlIHRoZSBHVUkgKFdpbmRvd3MpIHN0aWNreSBpbnB1dCBtb2RpZmllciAobmV4dCwgb24sIG9mZikiKSwKKyAgICB9LAorCisgICAgeworICAgICAgICAvLyBCUkxfQ01EX0JSTF9TVE9QCisgICAgICAgIC5uYW1lID0gIkJSTF9TVE9QIiwKKyAgICAgICAgLmNvZGUgPSBCUkxfQ01EX0JSTF9TVE9QLAorICAgICAgICAvLyB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIEJSTF9TVE9QIGNvbW1hbmQuCisgICAgICAgIC5kZXNjcmlwdGlvbiA9IHN0cnRleHQoInN0b3AgdGhlIGJyYWlsbGUgZHJpdmVyIiksCisgICAgfSwKKworICAgIHsKKyAgICAgICAgLy8gQlJMX0NNRF9CUkxfU1RBUlQKKyAgICAgICAgLm5hbWUgPSAiQlJMX1NUQVJUIiwKKyAgICAgICAgLmNvZGUgPSBCUkxfQ01EX0JSTF9TVEFSVCwKKyAgICAgICAgLy8geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBCUkxfU1RBUlQgY29tbWFuZC4KKyAgICAgICAgLmRlc2NyaXB0aW9uID0gc3RydGV4dCgic3RhcnQgdGhlIGJyYWlsbGUgZHJpdmVyIiksCisgICAgfSwKKworICAgIHsKKyAgICAgICAgLy8gQlJMX0NNRF9TUEtfU1RPUAorICAgICAgICAubmFtZSA9ICJTUEtfU1RPUCIsCisgICAgICAgIC5jb2RlID0gQlJMX0NNRF9TUEtfU1RPUCwKKyAgICAgICAgLy8geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBTUEtfU1RPUCBjb21tYW5kLgorICAgICAgICAuZGVzY3JpcHRpb24gPSBzdHJ0ZXh0KCJzdG9wIHRoZSBzcGVlY2ggZHJpdmVyIiksCisgICAgfSwKKworICAgIHsKKyAgICAgICAgLy8gQlJMX0NNRF9TUEtfU1RBUlQKKyAgICAgICAgLm5hbWUgPSAiU1BLX1NUQVJUIiwKKyAgICAgICAgLmNvZGUgPSBCUkxfQ01EX1NQS19TVEFSVCwKKyAgICAgICAgLy8geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBTUEtfU1RBUlQgY29tbWFuZC4KKyAgICAgICAgLmRlc2NyaXB0aW9uID0gc3RydGV4dCgic3RhcnQgdGhlIHNwZWVjaCBkcml2ZXIiKSwKKyAgICB9LAorCisgICAgeworICAgICAgICAvLyBCUkxfQ01EX1NDUl9TVE9QCisgICAgICAgIC5uYW1lID0gIlNDUl9TVE9QIiwKKyAgICAgICAgLmNvZGUgPSBCUkxfQ01EX1NDUl9TVE9QLAorICAgICAgICAvLyB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIFNDUl9TVE9QIGNvbW1hbmQuCisgICAgICAgIC5kZXNjcmlwdGlvbiA9IHN0cnRleHQoInN0b3AgdGhlIHNjcmVlbiBkcml2ZXIiKSwKKyAgICB9LAorCisgICAgeworICAgICAgICAvLyBCUkxfQ01EX1NDUl9TVEFSVAorICAgICAgICAubmFtZSA9ICJTQ1JfU1RBUlQiLAorICAgICAgICAuY29kZSA9IEJSTF9DTURfU0NSX1NUQVJULAorICAgICAgICAvLyB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIFNDUl9TVEFSVCBjb21tYW5kLgorICAgICAgICAuZGVzY3JpcHRpb24gPSBzdHJ0ZXh0KCJzdGFydCB0aGUgc2NyZWVuIGRyaXZlciIpLAorICAgIH0sCisKKyAgICB7CisgICAgICAgIC8vIEJSTF9DTURfU0VMRUNUVlRfUFJFVgorICAgICAgICAubmFtZSA9ICJTRUxFQ1RWVF9QUkVWIiwKKyAgICAgICAgLmNvZGUgPSBCUkxfQ01EX1NFTEVDVFZUX1BSRVYsCisgICAgICAgIC8vIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgU0VMRUNUVlRfUFJFViBjb21tYW5kLgorICAgICAgICAuZGVzY3JpcHRpb24gPSBzdHJ0ZXh0KCJiaW5kIHRvIHRoZSBwcmV2aW91cyB2aXJ0dWFsIHRlcm1pbmFsIiksCisgICAgfSwKKworICAgIHsKKyAgICAgICAgLy8gQlJMX0NNRF9TRUxFQ1RWVF9ORVhUCisgICAgICAgIC5uYW1lID0gIlNFTEVDVFZUX05FWFQiLAorICAgICAgICAuY29kZSA9IEJSTF9DTURfU0VMRUNUVlRfTkVYVCwKKyAgICAgICAgLy8geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBTRUxFQ1RWVF9ORVhUIGNvbW1hbmQuCisgICAgICAgIC5kZXNjcmlwdGlvbiA9IHN0cnRleHQoImJpbmQgdG8gdGhlIG5leHQgdmlydHVhbCB0ZXJtaW5hbCIpLAorICAgIH0sCisKKyAgICB7CisgICAgICAgIC8vIEJSTF9DTURfUFJOQldJTgorICAgICAgICAubmFtZSA9ICJQUk5CV0lOIiwKKyAgICAgICAgLmNvZGUgPSBCUkxfQ01EX1BSTkJXSU4sCisgICAgICAgIC5pc01vdGlvbiA9IDEsCisgICAgICAgIC5pc1Bhbm5pbmcgPSAxLAorICAgICAgICAvLyB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIFBSTkJXSU4gY29tbWFuZC4KKyAgICAgICAgLmRlc2NyaXB0aW9uID0KKyAgICAgICAgICAgIHN0cnRleHQoImdvIGJhY2t3YXJkIHRvIG5lYXJlc3Qgbm9uLWJsYW5rIGJyYWlsbGUgd2luZG93IiksCisgICAgfSwKKworICAgIHsKKyAgICAgICAgLy8gQlJMX0NNRF9OWE5CV0lOCisgICAgICAgIC5uYW1lID0gIk5YTkJXSU4iLAorICAgICAgICAuY29kZSA9IEJSTF9DTURfTlhOQldJTiwKKyAgICAgICAgLmlzTW90aW9uID0gMSwKKyAgICAgICAgLmlzUGFubmluZyA9IDEsCisgICAgICAgIC8vIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgTlhOQldJTiBjb21tYW5kLgorICAgICAgICAuZGVzY3JpcHRpb24gPQorICAgICAgICAgICAgc3RydGV4dCgiZ28gZm9yd2FyZCB0byBuZWFyZXN0IG5vbi1ibGFuayBicmFpbGxlIHdpbmRvdyIpLAorICAgIH0sCisKKyAgICB7CisgICAgICAgIC8vIEJSTF9DTURfVE9VQ0hfTkFWCisgICAgICAgIC5uYW1lID0gIlRPVUNIX05BViIsCisgICAgICAgIC5jb2RlID0gQlJMX0NNRF9UT1VDSF9OQVYsCisgICAgICAgIC5pc1RvZ2dsZSA9IDEsCisgICAgICAgIC8vIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgVE9VQ0hfTkFWIGNvbW1hbmQuCisgICAgICAgIC5kZXNjcmlwdGlvbiA9IHN0cnRleHQoInNldCB0b3VjaCBuYXZpZ2F0aW9uIG9uL29mZiIpLAorICAgIH0sCisKKyAgICB7CisgICAgICAgIC8vIEJSTF9DTURfU1BFQUtfSU5ERU5UCisgICAgICAgIC5uYW1lID0gIlNQRUFLX0lOREVOVCIsCisgICAgICAgIC5jb2RlID0gQlJMX0NNRF9TUEVBS19JTkRFTlQsCisgICAgICAgIC8vIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgU1BFQUtfSU5ERU5UIGNvbW1hbmQuCisgICAgICAgIC5kZXNjcmlwdGlvbiA9IHN0cnRleHQoInNwZWFrIGluZGVudCBvZiBjdXJyZW50IGxpbmUiKSwKKyAgICB9LAorCisgICAgeworICAgICAgICAvLyBCUkxfQ01EX0FTUEtfSU5ERU5UCisgICAgICAgIC5uYW1lID0gIkFTUEtfSU5ERU5UIiwKKyAgICAgICAgLmNvZGUgPSBCUkxfQ01EX0FTUEtfSU5ERU5ULAorICAgICAgICAuaXNUb2dnbGUgPSAxLAorICAgICAgICAvLyB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIEFTUEtfSU5ERU5UIGNvbW1hbmQuCisgICAgICAgIC5kZXNjcmlwdGlvbiA9IHN0cnRleHQoInNldCBhdXRvc3BlYWsgaW5kZW50IG9mIGN1cnJlbnQgbGluZSBvbi9vZmYiKSwKKyAgICB9LAorCisgICAgeworICAgICAgICAvLyBCUkxfQ01EX1JFRlJFU0gKKyAgICAgICAgLm5hbWUgPSAiUkVGUkVTSCIsCisgICAgICAgIC5jb2RlID0gQlJMX0NNRF9SRUZSRVNILAorICAgICAgICAvLyB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIFJFRlJFU0ggY29tbWFuZC4KKyAgICAgICAgLmRlc2NyaXB0aW9uID0gc3RydGV4dCgicmVmcmVzaCBicmFpbGxlIGRpc3BsYXkiKSwKKyAgICB9LAorCisgICAgeworICAgICAgICAvLyBCUkxfQ01EX0lORElDQVRPUlMKKyAgICAgICAgLm5hbWUgPSAiSU5ESUNBVE9SUyIsCisgICAgICAgIC5jb2RlID0gQlJMX0NNRF9JTkRJQ0FUT1JTLAorICAgICAgICAvLyB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIElORElDQVRPUlMgY29tbWFuZC4KKyAgICAgICAgLmRlc2NyaXB0aW9uID0gc3RydGV4dCgic2hvdyB2YXJpb3VzIGRldmljZSBzdGF0dXMgaW5kaWNhdG9ycyIpLAorICAgIH0sCisKKyAgICB7CisgICAgICAgIC8vIEJSTF9DTURfVFhUU0VMX0NMRUFSCisgICAgICAgIC5uYW1lID0gIlRYVFNFTF9DTEVBUiIsCisgICAgICAgIC5jb2RlID0gQlJMX0NNRF9UWFRTRUxfQ0xFQVIsCisgICAgICAgIC8vIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgVFhUU0VMX0NMRUFSIGNvbW1hbmQuCisgICAgICAgIC5kZXNjcmlwdGlvbiA9IHN0cnRleHQoImNsZWFyIHRoZSB0ZXh0IHNlbGVjdGlvbiIpLAorICAgIH0sCisKKyAgICB7CisgICAgICAgIC8vIEJSTF9DTURfVFhUU0VMX0FMTAorICAgICAgICAubmFtZSA9ICJUWFRTRUxfQUxMIiwKKyAgICAgICAgLmNvZGUgPSBCUkxfQ01EX1RYVFNFTF9BTEwsCisgICAgICAgIC8vIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgVFhUU0VMX0FMTCBjb21tYW5kLgorICAgICAgICAuZGVzY3JpcHRpb24gPSBzdHJ0ZXh0KCJzZWxlY3QgYWxsIG9mIHRoZSB0ZXh0IiksCisgICAgfSwKKworICAgIHsKKyAgICAgICAgLy8gQlJMX0NNRF9IT1NUX0NPUFkKKyAgICAgICAgLm5hbWUgPSAiSE9TVF9DT1BZIiwKKyAgICAgICAgLmNvZGUgPSBCUkxfQ01EX0hPU1RfQ09QWSwKKyAgICAgICAgLy8geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBIT1NUX0NPUFkgY29tbWFuZC4KKyAgICAgICAgLmRlc2NyaXB0aW9uID0gc3RydGV4dCgiY29weSBzZWxlY3RlZCB0ZXh0IHRvIGhvc3QgY2xpcGJvYXJkIiksCisgICAgfSwKKworICAgIHsKKyAgICAgICAgLy8gQlJMX0NNRF9IT1NUX0NVVAorICAgICAgICAubmFtZSA9ICJIT1NUX0NVVCIsCisgICAgICAgIC5jb2RlID0gQlJMX0NNRF9IT1NUX0NVVCwKKyAgICAgICAgLy8geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBIT1NUX0NVVCBjb21tYW5kLgorICAgICAgICAuZGVzY3JpcHRpb24gPSBzdHJ0ZXh0KCJjdXQgc2VsZWN0ZWQgdGV4dCB0byBob3N0IGNsaXBib2FyZCIpLAorICAgIH0sCisKKyAgICB7CisgICAgICAgIC8vIEJSTF9DTURfSE9TVF9QQVNURQorICAgICAgICAubmFtZSA9ICJIT1NUX1BBU1RFIiwKKyAgICAgICAgLmNvZGUgPSBCUkxfQ01EX0hPU1RfUEFTVEUsCisgICAgICAgIC8vIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgSE9TVF9QQVNURSBjb21tYW5kLgorICAgICAgICAuZGVzY3JpcHRpb24gPQorICAgICAgICAgICAgc3RydGV4dCgiaW5zZXJ0IGhvc3QgY2xpcGJvYXJkIHRleHQgYWZ0ZXIgc2NyZWVuIGN1cnNvciIpLAorICAgIH0sCisKKyAgICB7CisgICAgICAgIC8vIEJSTF9DTURfR1VJX1RJVExFCisgICAgICAgIC5uYW1lID0gIkdVSV9USVRMRSIsCisgICAgICAgIC5jb2RlID0gQlJMX0NNRF9HVUlfVElUTEUsCisgICAgICAgIC8vIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgR1VJX1RJVExFIGNvbW1hbmQuCisgICAgICAgIC5kZXNjcmlwdGlvbiA9IHN0cnRleHQoInNob3cgdGhlIHdpbmRvdyB0aXRsZSIpLAorICAgIH0sCisKKyAgICB7CisgICAgICAgIC8vIEJSTF9DTURfR1VJX0JSTF9BQ1RJT05TCisgICAgICAgIC5uYW1lID0gIkdVSV9CUkxfQUNUSU9OUyIsCisgICAgICAgIC5jb2RlID0gQlJMX0NNRF9HVUlfQlJMX0FDVElPTlMsCisgICAgICAgIC8vIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgR1VJX0JSTF9BQ1RJT05TIGNvbW1hbmQuCisgICAgICAgIC5kZXNjcmlwdGlvbiA9IHN0cnRleHQoIm9wZW4gdGhlIGJyYWlsbGUgYWN0aW9ucyB3aW5kb3ciKSwKKyAgICB9LAorCisgICAgeworICAgICAgICAvLyBCUkxfQ01EX0dVSV9IT01FCisgICAgICAgIC5uYW1lID0gIkdVSV9IT01FIiwKKyAgICAgICAgLmNvZGUgPSBCUkxfQ01EX0dVSV9IT01FLAorICAgICAgICAuaXNNb3Rpb24gPSAxLAorICAgICAgICAvLyB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIEdVSV9IT01FIGNvbW1hbmQuCisgICAgICAgIC5kZXNjcmlwdGlvbiA9IHN0cnRleHQoImdvIHRvIHRoZSBob21lIHNjcmVlbiIpLAorICAgIH0sCisKKyAgICB7CisgICAgICAgIC8vIEJSTF9DTURfR1VJX0JBQ0sKKyAgICAgICAgLm5hbWUgPSAiR1VJX0JBQ0siLAorICAgICAgICAuY29kZSA9IEJSTF9DTURfR1VJX0JBQ0ssCisgICAgICAgIC5pc01vdGlvbiA9IDEsCisgICAgICAgIC8vIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgR1VJX0JBQ0sgY29tbWFuZC4KKyAgICAgICAgLmRlc2NyaXB0aW9uID0gc3RydGV4dCgiZ28gYmFjayB0byB0aGUgcHJldmlvdXMgc2NyZWVuIiksCisgICAgfSwKKworICAgIHsKKyAgICAgICAgLy8gQlJMX0NNRF9HVUlfREVWX1NFVFRJTkdTCisgICAgICAgIC5uYW1lID0gIkdVSV9ERVZfU0VUVElOR1MiLAorICAgICAgICAuY29kZSA9IEJSTF9DTURfR1VJX0RFVl9TRVRUSU5HUywKKyAgICAgICAgLy8geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBHVUlfREVWX1NFVFRJTkdTIGNvbW1hbmQuCisgICAgICAgIC5kZXNjcmlwdGlvbiA9IHN0cnRleHQoIm9wZW4gdGhlIGRldmljZSBzZXR0aW5ncyB3aW5kb3ciKSwKKyAgICB9LAorCisgICAgeworICAgICAgICAvLyBCUkxfQ01EX0dVSV9ERVZfT1BUSU9OUworICAgICAgICAubmFtZSA9ICJHVUlfREVWX09QVElPTlMiLAorICAgICAgICAuY29kZSA9IEJSTF9DTURfR1VJX0RFVl9PUFRJT05TLAorICAgICAgICAvLyB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIEdVSV9ERVZfT1BUSU9OUyBjb21tYW5kLgorICAgICAgICAuZGVzY3JpcHRpb24gPSBzdHJ0ZXh0KCJvcGVuIHRoZSBkZXZpY2Ugb3B0aW9ucyB3aW5kb3ciKSwKKyAgICB9LAorCisgICAgeworICAgICAgICAvLyBCUkxfQ01EX0dVSV9BUFBfTElTVAorICAgICAgICAubmFtZSA9ICJHVUlfQVBQX0xJU1QiLAorICAgICAgICAuY29kZSA9IEJSTF9DTURfR1VJX0FQUF9MSVNULAorICAgICAgICAvLyB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIEdVSV9BUFBfTElTVCBjb21tYW5kLgorICAgICAgICAuZGVzY3JpcHRpb24gPSBzdHJ0ZXh0KCJvcGVuIHRoZSBhcHBsaWNhdGlvbiBsaXN0IHdpbmRvdyIpLAorICAgIH0sCisKKyAgICB7CisgICAgICAgIC8vIEJSTF9DTURfR1VJX0FQUF9NRU5VCisgICAgICAgIC5uYW1lID0gIkdVSV9BUFBfTUVOVSIsCisgICAgICAgIC5jb2RlID0gQlJMX0NNRF9HVUlfQVBQX01FTlUsCisgICAgICAgIC8vIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgR1VJX0FQUF9NRU5VIGNvbW1hbmQuCisgICAgICAgIC5kZXNjcmlwdGlvbiA9IHN0cnRleHQoIm9wZW4gdGhlIGFwcGxpY2F0aW9uLXNwZWNpZmljIG1lbnUiKSwKKyAgICB9LAorCisgICAgeworICAgICAgICAvLyBCUkxfQ01EX0dVSV9BUFBfQUxFUlRTCisgICAgICAgIC5uYW1lID0gIkdVSV9BUFBfQUxFUlRTIiwKKyAgICAgICAgLmNvZGUgPSBCUkxfQ01EX0dVSV9BUFBfQUxFUlRTLAorICAgICAgICAvLyB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIEdVSV9BUFBfQUxFUlRTIGNvbW1hbmQuCisgICAgICAgIC5kZXNjcmlwdGlvbiA9IHN0cnRleHQoIm9wZW4gdGhlIGFwcGxpY2F0aW9uIGFsZXJ0cyB3aW5kb3ciKSwKKyAgICB9LAorCisgICAgeworICAgICAgICAvLyBCUkxfQ01EX0dVSV9BUkVBX0FDVFYKKyAgICAgICAgLm5hbWUgPSAiR1VJX0FSRUFfQUNUViIsCisgICAgICAgIC5jb2RlID0gQlJMX0NNRF9HVUlfQVJFQV9BQ1RWLAorICAgICAgICAvLyB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIEdVSV9BUkVBX0FDVFYgY29tbWFuZC4KKyAgICAgICAgLmRlc2NyaXB0aW9uID0gc3RydGV4dCgicmV0dXJuIHRvIHRoZSBhY3RpdmUgc2NyZWVuIGFyZWEiKSwKKyAgICB9LAorCisgICAgeworICAgICAgICAvLyBCUkxfQ01EX0dVSV9BUkVBX1BSRVYKKyAgICAgICAgLm5hbWUgPSAiR1VJX0FSRUFfUFJFViIsCisgICAgICAgIC5jb2RlID0gQlJMX0NNRF9HVUlfQVJFQV9QUkVWLAorICAgICAgICAvLyB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIEdVSV9BUkVBX1BSRVYgY29tbWFuZC4KKyAgICAgICAgLmRlc2NyaXB0aW9uID0gc3RydGV4dCgic3dpdGNoIHRvIHRoZSBwcmV2aW91cyBzY3JlZW4gYXJlYSIpLAorICAgIH0sCisKKyAgICB7CisgICAgICAgIC8vIEJSTF9DTURfR1VJX0FSRUFfTkVYVAorICAgICAgICAubmFtZSA9ICJHVUlfQVJFQV9ORVhUIiwKKyAgICAgICAgLmNvZGUgPSBCUkxfQ01EX0dVSV9BUkVBX05FWFQsCisgICAgICAgIC8vIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgR1VJX0FSRUFfTkVYVCBjb21tYW5kLgorICAgICAgICAuZGVzY3JpcHRpb24gPSBzdHJ0ZXh0KCJzd2l0Y2ggdG8gdGhlIG5leHQgc2NyZWVuIGFyZWEiKSwKKyAgICB9LAorCisgICAgeworICAgICAgICAvLyBCUkxfQ01EX0dVSV9JVEVNX0ZSU1QKKyAgICAgICAgLm5hbWUgPSAiR1VJX0lURU1fRlJTVCIsCisgICAgICAgIC5jb2RlID0gQlJMX0NNRF9HVUlfSVRFTV9GUlNULAorICAgICAgICAvLyB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIEdVSV9JVEVNX0ZSU1QgY29tbWFuZC4KKyAgICAgICAgLmRlc2NyaXB0aW9uID0gc3RydGV4dCgibW92ZSB0byB0aGUgZmlyc3QgaXRlbSBpbiB0aGUgc2NyZWVuIGFyZWEiKSwKKyAgICB9LAorCisgICAgeworICAgICAgICAvLyBCUkxfQ01EX0dVSV9JVEVNX1BSRVYKKyAgICAgICAgLm5hbWUgPSAiR1VJX0lURU1fUFJFViIsCisgICAgICAgIC5jb2RlID0gQlJMX0NNRF9HVUlfSVRFTV9QUkVWLAorICAgICAgICAvLyB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIEdVSV9JVEVNX1BSRVYgY29tbWFuZC4KKyAgICAgICAgLmRlc2NyaXB0aW9uID0gc3RydGV4dCgibW92ZSB0byB0aGUgcHJldmlvdXMgaXRlbSBpbiB0aGUgc2NyZWVuIGFyZWEiKSwKKyAgICB9LAorCisgICAgeworICAgICAgICAvLyBCUkxfQ01EX0dVSV9JVEVNX05FWFQKKyAgICAgICAgLm5hbWUgPSAiR1VJX0lURU1fTkVYVCIsCisgICAgICAgIC5jb2RlID0gQlJMX0NNRF9HVUlfSVRFTV9ORVhULAorICAgICAgICAvLyB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIEdVSV9JVEVNX05FWFQgY29tbWFuZC4KKyAgICAgICAgLmRlc2NyaXB0aW9uID0gc3RydGV4dCgibW92ZSB0byB0aGUgbmV4dCBpdGVtIGluIHRoZSBzY3JlZW4gYXJlYSIpLAorICAgIH0sCisKKyAgICB7CisgICAgICAgIC8vIEJSTF9DTURfR1VJX0lURU1fTEFTVAorICAgICAgICAubmFtZSA9ICJHVUlfSVRFTV9MQVNUIiwKKyAgICAgICAgLmNvZGUgPSBCUkxfQ01EX0dVSV9JVEVNX0xBU1QsCisgICAgICAgIC8vIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgR1VJX0lURU1fTEFTVCBjb21tYW5kLgorICAgICAgICAuZGVzY3JpcHRpb24gPSBzdHJ0ZXh0KCJtb3ZlIHRvIHRoZSBsYXN0IGl0ZW0gaW4gdGhlIHNjcmVlbiBhcmVhIiksCisgICAgfSwKKworICAgIHsKKyAgICAgICAgLy8gQlJMX0NNRF9TQVlfTE9XRVIKKyAgICAgICAgLm5hbWUgPSAiU0FZX0xPV0VSIiwKKyAgICAgICAgLmNvZGUgPSBCUkxfQ01EX1NBWV9MT1dFUiwKKyAgICAgICAgLy8geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBTQVlfTE9XRVIgY29tbWFuZC4KKyAgICAgICAgLmRlc2NyaXB0aW9uID0gc3RydGV4dCgiZGVjcmVhc2Ugc3BlYWtpbmcgcGl0Y2giKSwKKyAgICB9LAorCisgICAgeworICAgICAgICAvLyBCUkxfQ01EX1NBWV9ISUdIRVIKKyAgICAgICAgLm5hbWUgPSAiU0FZX0hJR0hFUiIsCisgICAgICAgIC5jb2RlID0gQlJMX0NNRF9TQVlfSElHSEVSLAorICAgICAgICAvLyB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIFNBWV9ISUdIRVIgY29tbWFuZC4KKyAgICAgICAgLmRlc2NyaXB0aW9uID0gc3RydGV4dCgiaW5jcmVhc2Ugc3BlYWtpbmcgcGl0Y2giKSwKKyAgICB9LAorCisgICAgeworICAgICAgICAvLyBCUkxfQ01EX1NBWV9BTEwKKyAgICAgICAgLm5hbWUgPSAiU0FZX0FMTCIsCisgICAgICAgIC5jb2RlID0gQlJMX0NNRF9TQVlfQUxMLAorICAgICAgICAvLyB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIFNBWV9BTEwgY29tbWFuZC4KKyAgICAgICAgLmRlc2NyaXB0aW9uID0KKyAgICAgICAgICAgIHN0cnRleHQoInNwZWFrIGZyb20gdG9wIG9mIHNjcmVlbiB0aHJvdWdoIGJvdHRvbSBvZiBzY3JlZW4iKSwKKyAgICB9LAorCisgICAgeworICAgICAgICAvLyBCUkxfQ01EX0NPTlRSQUNURUQKKyAgICAgICAgLm5hbWUgPSAiQ09OVFJBQ1RFRCIsCisgICAgICAgIC5jb2RlID0gQlJMX0NNRF9DT05UUkFDVEVELAorICAgICAgICAuaXNUb2dnbGUgPSAxLAorICAgICAgICAvLyB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIENPTlRSQUNURUQgY29tbWFuZC4KKyAgICAgICAgLmRlc2NyaXB0aW9uID0gc3RydGV4dCgic2V0IGNvbnRyYWN0ZWQvY29tcHV0ZXIgYnJhaWxsZSIpLAorICAgIH0sCisKKyAgICB7CisgICAgICAgIC8vIEJSTF9DTURfQ09NUEJSTDYKKyAgICAgICAgLm5hbWUgPSAiQ09NUEJSTDYiLAorICAgICAgICAuY29kZSA9IEJSTF9DTURfQ09NUEJSTDYsCisgICAgICAgIC5pc1RvZ2dsZSA9IDEsCisgICAgICAgIC8vIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgQ09NUEJSTDYgY29tbWFuZC4KKyAgICAgICAgLmRlc2NyaXB0aW9uID0gc3RydGV4dCgic2V0IHNpeC9laWdodCBkb3QgY29tcHV0ZXIgYnJhaWxsZSIpLAorICAgIH0sCisKKyAgICB7CisgICAgICAgIC8vIEJSTF9DTURfUFJFRlJFU0VUCisgICAgICAgIC5uYW1lID0gIlBSRUZSRVNFVCIsCisgICAgICAgIC5jb2RlID0gQlJMX0NNRF9QUkVGUkVTRVQsCisgICAgICAgIC8vIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgUFJFRlJFU0VUIGNvbW1hbmQuCisgICAgICAgIC5kZXNjcmlwdGlvbiA9IHN0cnRleHQoInJlc2V0IHByZWZlcmVuY2VzIHRvIGRlZmF1bHRzIiksCisgICAgfSwKKworICAgIHsKKyAgICAgICAgLy8gQlJMX0JMS19ST1VURQorICAgICAgICAubmFtZSA9ICJST1VURSIsCisgICAgICAgIC5jb2RlID0gQlJMX0NNRF9CTEsoUk9VVEUpLAorICAgICAgICAuaXNSb3V0aW5nID0gMSwKKyAgICAgICAgLmlzQ29sdW1uID0gMSwKKyAgICAgICAgLy8geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBST1VURSBjb21tYW5kLgorICAgICAgICAuZGVzY3JpcHRpb24gPSBzdHJ0ZXh0KCJicmluZyBzY3JlZW4gY3Vyc29yIHRvIGNoYXJhY3RlciIpLAorICAgIH0sCisKKyAgICB7CisgICAgICAgIC8vIEJSTF9CTEtfQ0xJUF9ORVcKKyAgICAgICAgLm5hbWUgPSAiQ0xJUF9ORVciLAorICAgICAgICAuY29kZSA9IEJSTF9DTURfQkxLKENMSVBfTkVXKSwKKyAgICAgICAgLmlzQ29sdW1uID0gMSwKKyAgICAgICAgLy8geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBDTElQX05FVyBjb21tYW5kLgorICAgICAgICAuZGVzY3JpcHRpb24gPSBzdHJ0ZXh0KCJzdGFydCBuZXcgY2xpcGJvYXJkIGF0IGNoYXJhY3RlciIpLAorICAgIH0sCisKKyAgICB7CisgICAgICAgIC8vIEJSTF9CTEtfQ0xJUF9BREQKKyAgICAgICAgLm5hbWUgPSAiQ0xJUF9BREQiLAorICAgICAgICAuY29kZSA9IEJSTF9DTURfQkxLKENMSVBfQUREKSwKKyAgICAgICAgLmlzQ29sdW1uID0gMSwKKyAgICAgICAgLy8geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBDTElQX0FERCBjb21tYW5kLgorICAgICAgICAuZGVzY3JpcHRpb24gPSBzdHJ0ZXh0KCJhcHBlbmQgdG8gY2xpcGJvYXJkIGZyb20gY2hhcmFjdGVyIiksCisgICAgfSwKKworICAgIHsKKyAgICAgICAgLy8gQlJMX0JMS19DT1BZX1JFQ1QKKyAgICAgICAgLm5hbWUgPSAiQ09QWV9SRUNUIiwKKyAgICAgICAgLmNvZGUgPSBCUkxfQ01EX0JMSyhDT1BZX1JFQ1QpLAorICAgICAgICAuaXNDb2x1bW4gPSAxLAorICAgICAgICAvLyB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIENPUFlfUkVDVCBjb21tYW5kLgorICAgICAgICAuZGVzY3JpcHRpb24gPSBzdHJ0ZXh0KCJyZWN0YW5ndWxhciBjb3B5IHRvIGNoYXJhY3RlciIpLAorICAgIH0sCisKKyAgICB7CisgICAgICAgIC8vIEJSTF9CTEtfQ09QWV9MSU5FCisgICAgICAgIC5uYW1lID0gIkNPUFlfTElORSIsCisgICAgICAgIC5jb2RlID0gQlJMX0NNRF9CTEsoQ09QWV9MSU5FKSwKKyAgICAgICAgLmlzQ29sdW1uID0gMSwKKyAgICAgICAgLy8geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBDT1BZX0xJTkUgY29tbWFuZC4KKyAgICAgICAgLmRlc2NyaXB0aW9uID0gc3RydGV4dCgibGluZWFyIGNvcHkgdG8gY2hhcmFjdGVyIiksCisgICAgfSwKKworICAgIHsKKyAgICAgICAgLy8gQlJMX0JMS19TV0lUQ0hWVAorICAgICAgICAubmFtZSA9ICJTV0lUQ0hWVCIsCisgICAgICAgIC5jb2RlID0gQlJMX0NNRF9CTEsoU1dJVENIVlQpLAorICAgICAgICAuaXNPZmZzZXQgPSAxLAorICAgICAgICAvLyB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIFNXSVRDSFZUIGNvbW1hbmQuCisgICAgICAgIC5kZXNjcmlwdGlvbiA9IHN0cnRleHQoInN3aXRjaCB0byBzcGVjaWZpYyB2aXJ0dWFsIHRlcm1pbmFsIiksCisgICAgfSwKKworICAgIHsKKyAgICAgICAgLy8gQlJMX0JMS19QUklOREVOVAorICAgICAgICAubmFtZSA9ICJQUklOREVOVCIsCisgICAgICAgIC5jb2RlID0gQlJMX0NNRF9CTEsoUFJJTkRFTlQpLAorICAgICAgICAuaXNNb3Rpb24gPSAxLAorICAgICAgICAuaXNWZXJ0aWNhbCA9IDEsCisgICAgICAgIC5pc0NvbHVtbiA9IDEsCisgICAgICAgIC8vIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgUFJJTkRFTlQgY29tbWFuZC4KKyAgICAgICAgLmRlc2NyaXB0aW9uID0KKyAgICAgICAgICAgIHN0cnRleHQoImdvIHVwIHRvIG5lYXJlc3QgbGluZSB3aXRoIGxlc3MgaW5kZW50IHRoYW4gY2hhcmFjdGVyIiksCisgICAgfSwKKworICAgIHsKKyAgICAgICAgLy8gQlJMX0JMS19OWElOREVOVAorICAgICAgICAubmFtZSA9ICJOWElOREVOVCIsCisgICAgICAgIC5jb2RlID0gQlJMX0NNRF9CTEsoTlhJTkRFTlQpLAorICAgICAgICAuaXNNb3Rpb24gPSAxLAorICAgICAgICAuaXNWZXJ0aWNhbCA9IDEsCisgICAgICAgIC5pc0NvbHVtbiA9IDEsCisgICAgICAgIC8vIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgTlhJTkRFTlQgY29tbWFuZC4KKyAgICAgICAgLmRlc2NyaXB0aW9uID0KKyAgICAgICAgICAgIHN0cnRleHQoImdvIGRvd24gdG8gbmVhcmVzdCBsaW5lIHdpdGggbGVzcyBpbmRlbnQgdGhhbiBjaGFyYWN0ZXIiKSwKKyAgICB9LAorCisgICAgeworICAgICAgICAvLyBCUkxfQkxLX0RFU0NDSEFSCisgICAgICAgIC5uYW1lID0gIkRFU0NDSEFSIiwKKyAgICAgICAgLmNvZGUgPSBCUkxfQ01EX0JMSyhERVNDQ0hBUiksCisgICAgICAgIC5pc0NvbHVtbiA9IDEsCisgICAgICAgIC8vIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgREVTQ0NIQVIgY29tbWFuZC4KKyAgICAgICAgLmRlc2NyaXB0aW9uID0gc3RydGV4dCgiZGVzY3JpYmUgY2hhcmFjdGVyIiksCisgICAgfSwKKworICAgIHsKKyAgICAgICAgLy8gQlJMX0JMS19TRVRMRUZUCisgICAgICAgIC5uYW1lID0gIlNFVExFRlQiLAorICAgICAgICAuY29kZSA9IEJSTF9DTURfQkxLKFNFVExFRlQpLAorICAgICAgICAuaXNDb2x1bW4gPSAxLAorICAgICAgICAvLyB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIFNFVExFRlQgY29tbWFuZC4KKyAgICAgICAgLmRlc2NyaXB0aW9uID0gc3RydGV4dCgicGxhY2UgbGVmdCBlbmQgb2YgYnJhaWxsZSB3aW5kb3cgYXQgY2hhcmFjdGVyIiksCisgICAgfSwKKworICAgIHsKKyAgICAgICAgLy8gQlJMX0JMS19TRVRNQVJLCisgICAgICAgIC5uYW1lID0gIlNFVE1BUksiLAorICAgICAgICAuY29kZSA9IEJSTF9DTURfQkxLKFNFVE1BUkspLAorICAgICAgICAuaXNPZmZzZXQgPSAxLAorICAgICAgICAvLyB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIFNFVE1BUksgY29tbWFuZC4KKyAgICAgICAgLmRlc2NyaXB0aW9uID0gc3RydGV4dCgicmVtZW1iZXIgY3VycmVudCBicmFpbGxlIHdpbmRvdyBwb3NpdGlvbiIpLAorICAgIH0sCisKKyAgICB7CisgICAgICAgIC8vIEJSTF9CTEtfR09UT01BUksKKyAgICAgICAgLm5hbWUgPSAiR09UT01BUksiLAorICAgICAgICAuY29kZSA9IEJSTF9DTURfQkxLKEdPVE9NQVJLKSwKKyAgICAgICAgLmlzTW90aW9uID0gMSwKKyAgICAgICAgLmlzT2Zmc2V0ID0gMSwKKyAgICAgICAgLy8geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBHT1RPTUFSSyBjb21tYW5kLgorICAgICAgICAuZGVzY3JpcHRpb24gPSBzdHJ0ZXh0KCJnbyB0byByZW1lbWJlcmVkIGJyYWlsbGUgd2luZG93IHBvc2l0aW9uIiksCisgICAgfSwKKworICAgIHsKKyAgICAgICAgLy8gQlJMX0JMS19HT1RPTElORQorICAgICAgICAubmFtZSA9ICJHT1RPTElORSIsCisgICAgICAgIC5jb2RlID0gQlJMX0NNRF9CTEsoR09UT0xJTkUpLAorICAgICAgICAuaXNNb3Rpb24gPSAxLAorICAgICAgICAuaXNSb3cgPSAxLAorICAgICAgICAuaXNWZXJ0aWNhbCA9IDEsCisgICAgICAgIC8vIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgR09UT0xJTkUgY29tbWFuZC4KKyAgICAgICAgLmRlc2NyaXB0aW9uID0gc3RydGV4dCgiZ28gdG8gc2VsZWN0ZWQgbGluZSIpLAorICAgIH0sCisKKyAgICB7CisgICAgICAgIC8vIEJSTF9CTEtfUFJESUZDSEFSCisgICAgICAgIC5uYW1lID0gIlBSRElGQ0hBUiIsCisgICAgICAgIC5jb2RlID0gQlJMX0NNRF9CTEsoUFJESUZDSEFSKSwKKyAgICAgICAgLmlzTW90aW9uID0gMSwKKyAgICAgICAgLmlzVmVydGljYWwgPSAxLAorICAgICAgICAuaXNDb2x1bW4gPSAxLAorICAgICAgICAvLyB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIFBSRElGQ0hBUiBjb21tYW5kLgorICAgICAgICAuZGVzY3JpcHRpb24gPQorICAgICAgICAgICAgc3RydGV4dCgiZ28gdXAgdG8gbmVhcmVzdCBsaW5lIHdpdGggZGlmZmVyZW50IGNoYXJhY3RlciIpLAorICAgIH0sCisKKyAgICB7CisgICAgICAgIC8vIEJSTF9CTEtfTlhESUZDSEFSCisgICAgICAgIC5uYW1lID0gIk5YRElGQ0hBUiIsCisgICAgICAgIC5jb2RlID0gQlJMX0NNRF9CTEsoTlhESUZDSEFSKSwKKyAgICAgICAgLmlzTW90aW9uID0gMSwKKyAgICAgICAgLmlzVmVydGljYWwgPSAxLAorICAgICAgICAuaXNDb2x1bW4gPSAxLAorICAgICAgICAvLyB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIE5YRElGQ0hBUiBjb21tYW5kLgorICAgICAgICAuZGVzY3JpcHRpb24gPQorICAgICAgICAgICAgc3RydGV4dCgiZ28gZG93biB0byBuZWFyZXN0IGxpbmUgd2l0aCBkaWZmZXJlbnQgY2hhcmFjdGVyIiksCisgICAgfSwKKworICAgIHsKKyAgICAgICAgLy8gQlJMX0JMS19DTElQX0NPUFkKKyAgICAgICAgLm5hbWUgPSAiQ0xJUF9DT1BZIiwKKyAgICAgICAgLmNvZGUgPSBCUkxfQ01EX0JMSyhDTElQX0NPUFkpLAorICAgICAgICAuaXNSYW5nZSA9IDEsCisgICAgICAgIC8vIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgQ0xJUF9DT1BZIGNvbW1hbmQuCisgICAgICAgIC5kZXNjcmlwdGlvbiA9IHN0cnRleHQoImNvcHkgY2hhcmFjdGVycyB0byBjbGlwYm9hcmQiKSwKKyAgICB9LAorCisgICAgeworICAgICAgICAvLyBCUkxfQkxLX0NMSVBfQVBQRU5ECisgICAgICAgIC5uYW1lID0gIkNMSVBfQVBQRU5EIiwKKyAgICAgICAgLmNvZGUgPSBCUkxfQ01EX0JMSyhDTElQX0FQUEVORCksCisgICAgICAgIC5pc1JhbmdlID0gMSwKKyAgICAgICAgLy8geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBDTElQX0FQUEVORCBjb21tYW5kLgorICAgICAgICAuZGVzY3JpcHRpb24gPSBzdHJ0ZXh0KCJhcHBlbmQgY2hhcmFjdGVycyB0byBjbGlwYm9hcmQiKSwKKyAgICB9LAorCisgICAgeworICAgICAgICAvLyBCUkxfQkxLX1BBU1RFX0hJU1RPUlkKKyAgICAgICAgLm5hbWUgPSAiUEFTVEVfSElTVE9SWSIsCisgICAgICAgIC5jb2RlID0gQlJMX0NNRF9CTEsoUEFTVEVfSElTVE9SWSksCisgICAgICAgIC5pc09mZnNldCA9IDEsCisgICAgICAgIC8vIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgUEFTVEVfSElTVE9SWSBjb21tYW5kLgorICAgICAgICAuZGVzY3JpcHRpb24gPQorICAgICAgICAgICAgc3RydGV4dCgiaW5zZXJ0IGNsaXBib2FyZCBoaXN0b3J5IGVudHJ5IGFmdGVyIHNjcmVlbiBjdXJzb3IiKSwKKyAgICB9LAorCisgICAgeworICAgICAgICAvLyBCUkxfQkxLX1NFVF9URVhUX1RBQkxFCisgICAgICAgIC5uYW1lID0gIlNFVF9URVhUX1RBQkxFIiwKKyAgICAgICAgLmNvZGUgPSBCUkxfQ01EX0JMSyhTRVRfVEVYVF9UQUJMRSksCisgICAgICAgIC5pc09mZnNldCA9IDEsCisgICAgICAgIC8vIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgU0VUX1RFWFRfVEFCTEUgY29tbWFuZC4KKyAgICAgICAgLmRlc2NyaXB0aW9uID0gc3RydGV4dCgic2V0IHRleHQgdGFibGUiKSwKKyAgICB9LAorCisgICAgeworICAgICAgICAvLyBCUkxfQkxLX1NFVF9BVFRSSUJVVEVTX1RBQkxFCisgICAgICAgIC5uYW1lID0gIlNFVF9BVFRSSUJVVEVTX1RBQkxFIiwKKyAgICAgICAgLmNvZGUgPSBCUkxfQ01EX0JMSyhTRVRfQVRUUklCVVRFU19UQUJMRSksCisgICAgICAgIC5pc09mZnNldCA9IDEsCisgICAgICAgIC8vIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgU0VUX0FUVFJJQlVURVNfVEFCTEUKKyAgICAgICAgLy8gY29tbWFuZC4KKyAgICAgICAgLmRlc2NyaXB0aW9uID0gc3RydGV4dCgic2V0IGF0dHJpYnV0ZXMgdGFibGUiKSwKKyAgICB9LAorCisgICAgeworICAgICAgICAvLyBCUkxfQkxLX1NFVF9DT05UUkFDVElPTl9UQUJMRQorICAgICAgICAubmFtZSA9ICJTRVRfQ09OVFJBQ1RJT05fVEFCTEUiLAorICAgICAgICAuY29kZSA9IEJSTF9DTURfQkxLKFNFVF9DT05UUkFDVElPTl9UQUJMRSksCisgICAgICAgIC5pc09mZnNldCA9IDEsCisgICAgICAgIC8vIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgU0VUX0NPTlRSQUNUSU9OX1RBQkxFCisgICAgICAgIC8vIGNvbW1hbmQuCisgICAgICAgIC5kZXNjcmlwdGlvbiA9IHN0cnRleHQoInNldCBjb250cmFjdGlvbiB0YWJsZSIpLAorICAgIH0sCisKKyAgICB7CisgICAgICAgIC8vIEJSTF9CTEtfU0VUX0tFWUJPQVJEX1RBQkxFCisgICAgICAgIC5uYW1lID0gIlNFVF9LRVlCT0FSRF9UQUJMRSIsCisgICAgICAgIC5jb2RlID0gQlJMX0NNRF9CTEsoU0VUX0tFWUJPQVJEX1RBQkxFKSwKKyAgICAgICAgLmlzT2Zmc2V0ID0gMSwKKyAgICAgICAgLy8geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBTRVRfS0VZQk9BUkRfVEFCTEUgY29tbWFuZC4KKyAgICAgICAgLmRlc2NyaXB0aW9uID0gc3RydGV4dCgic2V0IGtleWJvYXJkIHRhYmxlIiksCisgICAgfSwKKworICAgIHsKKyAgICAgICAgLy8gQlJMX0JMS19TRVRfTEFOR1VBR0VfUFJPRklMRQorICAgICAgICAubmFtZSA9ICJTRVRfTEFOR1VBR0VfUFJPRklMRSIsCisgICAgICAgIC5jb2RlID0gQlJMX0NNRF9CTEsoU0VUX0xBTkdVQUdFX1BST0ZJTEUpLAorICAgICAgICAuaXNPZmZzZXQgPSAxLAorICAgICAgICAvLyB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIFNFVF9MQU5HVUFHRV9QUk9GSUxFCisgICAgICAgIC8vIGNvbW1hbmQuCisgICAgICAgIC5kZXNjcmlwdGlvbiA9IHN0cnRleHQoInNldCBsYW5ndWFnZSBwcm9maWxlIiksCisgICAgfSwKKworICAgIHsKKyAgICAgICAgLy8gQlJMX0JMS19ST1VURV9MSU5FCisgICAgICAgIC5uYW1lID0gIlJPVVRFX0xJTkUiLAorICAgICAgICAuY29kZSA9IEJSTF9DTURfQkxLKFJPVVRFX0xJTkUpLAorICAgICAgICAuaXNSb3V0aW5nID0gMSwKKyAgICAgICAgLmlzUm93ID0gMSwKKyAgICAgICAgLmlzVmVydGljYWwgPSAxLAorICAgICAgICAvLyB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIFJPVVRFX0xJTkUgY29tbWFuZC4KKyAgICAgICAgLmRlc2NyaXB0aW9uID0gc3RydGV4dCgiYnJpbmcgc2NyZWVuIGN1cnNvciB0byBsaW5lIiksCisgICAgfSwKKworICAgIHsKKyAgICAgICAgLy8gQlJMX0JMS19SRUZSRVNIX0xJTkUKKyAgICAgICAgLm5hbWUgPSAiUkVGUkVTSF9MSU5FIiwKKyAgICAgICAgLmNvZGUgPSBCUkxfQ01EX0JMSyhSRUZSRVNIX0xJTkUpLAorICAgICAgICAuaXNSb3cgPSAxLAorICAgICAgICAuaXNWZXJ0aWNhbCA9IDEsCisgICAgICAgIC8vIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgUkVGUkVTSF9MSU5FIGNvbW1hbmQuCisgICAgICAgIC5kZXNjcmlwdGlvbiA9IHN0cnRleHQoInJlZnJlc2ggYnJhaWxsZSBsaW5lIiksCisgICAgfSwKKworICAgIHsKKyAgICAgICAgLy8gQlJMX0JMS19UWFRTRUxfU1RBUlQKKyAgICAgICAgLm5hbWUgPSAiVFhUU0VMX1NUQVJUIiwKKyAgICAgICAgLmNvZGUgPSBCUkxfQ01EX0JMSyhUWFRTRUxfU1RBUlQpLAorICAgICAgICAuaXNPZmZzZXQgPSAxLAorICAgICAgICAvLyB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIFRYVFNFTF9TVEFSVCBjb21tYW5kLgorICAgICAgICAuZGVzY3JpcHRpb24gPSBzdHJ0ZXh0KCJzdGFydCB0ZXh0IHNlbGVjdGlvbiIpLAorICAgIH0sCisKKyAgICB7CisgICAgICAgIC8vIEJSTF9CTEtfVFhUU0VMX1NFVAorICAgICAgICAubmFtZSA9ICJUWFRTRUxfU0VUIiwKKyAgICAgICAgLmNvZGUgPSBCUkxfQ01EX0JMSyhUWFRTRUxfU0VUKSwKKyAgICAgICAgLmlzT2Zmc2V0ID0gMSwKKyAgICAgICAgLy8geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBUWFRTRUxfU0VUIGNvbW1hbmQuCisgICAgICAgIC5kZXNjcmlwdGlvbiA9IHN0cnRleHQoInNldCB0ZXh0IHNlbGVjdGlvbiIpLAorICAgIH0sCisKKyAgICB7CisgICAgICAgIC8vIEJSTF9CTEtfUk9VVEVfU1BFRUNICisgICAgICAgIC5uYW1lID0gIlJPVVRFX1NQRUVDSCIsCisgICAgICAgIC5jb2RlID0gQlJMX0NNRF9CTEsoUk9VVEVfU1BFRUNIKSwKKyAgICAgICAgLmlzUm91dGluZyA9IDEsCisgICAgICAgIC5pc0NvbHVtbiA9IDEsCisgICAgICAgIC8vIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgUk9VVEVfU1BFRUNIIGNvbW1hbmQuCisgICAgICAgIC5kZXNjcmlwdGlvbiA9IHN0cnRleHQoImJyaW5nIHNwZWVjaCBjdXJzb3IgdG8gY2hhcmFjdGVyIiksCisgICAgfSwKKworICAgIHsKKyAgICAgICAgLy8gQlJMX0JMS19TRUxFQ1RWVAorICAgICAgICAubmFtZSA9ICJTRUxFQ1RWVCIsCisgICAgICAgIC5jb2RlID0gQlJMX0NNRF9CTEsoU0VMRUNUVlQpLAorICAgICAgICAuaXNPZmZzZXQgPSAxLAorICAgICAgICAvLyB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIFNFTEVDVFZUIGNvbW1hbmQuCisgICAgICAgIC5kZXNjcmlwdGlvbiA9IHN0cnRleHQoImJpbmQgdG8gc3BlY2lmaWMgdmlydHVhbCB0ZXJtaW5hbCIpLAorICAgIH0sCisKKyAgICB7CisgICAgICAgIC8vIEJSTF9CTEtfQUxFUlQKKyAgICAgICAgLm5hbWUgPSAiQUxFUlQiLAorICAgICAgICAuY29kZSA9IEJSTF9DTURfQkxLKEFMRVJUKSwKKyAgICAgICAgLmlzT2Zmc2V0ID0gMSwKKyAgICAgICAgLy8geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBBTEVSVCBjb21tYW5kLgorICAgICAgICAuZGVzY3JpcHRpb24gPSBzdHJ0ZXh0KCJyZW5kZXIgYW4gYWxlcnQiKSwKKyAgICB9LAorCisgICAgeworICAgICAgICAvLyBCUkxfQkxLX1BBU1NDSEFSCisgICAgICAgIC5uYW1lID0gIlBBU1NDSEFSIiwKKyAgICAgICAgLmNvZGUgPSBCUkxfQ01EX0JMSyhQQVNTQ0hBUiksCisgICAgICAgIC5pc0lucHV0ID0gMSwKKyAgICAgICAgLmlzQ2hhcmFjdGVyID0gMSwKKyAgICAgICAgLy8geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBQQVNTQ0hBUiBjb21tYW5kLgorICAgICAgICAuZGVzY3JpcHRpb24gPSBzdHJ0ZXh0KCJ0eXBlIHVuaWNvZGUgY2hhcmFjdGVyIiksCisgICAgfSwKKworICAgIHsKKyAgICAgICAgLy8gQlJMX0JMS19QQVNTRE9UUworICAgICAgICAubmFtZSA9ICJQQVNTRE9UUyIsCisgICAgICAgIC5jb2RlID0gQlJMX0NNRF9CTEsoUEFTU0RPVFMpLAorICAgICAgICAuaXNJbnB1dCA9IDEsCisgICAgICAgIC5pc0JyYWlsbGUgPSAxLAorICAgICAgICAvLyB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIFBBU1NET1RTIGNvbW1hbmQuCisgICAgICAgIC5kZXNjcmlwdGlvbiA9IHN0cnRleHQoInR5cGUgYnJhaWxsZSBkb3RzIiksCisgICAgfSwKKworICAgIHsKKyAgICAgICAgLy8gQlJMX0JMS19QQVNTQVQKKyAgICAgICAgLm5hbWUgPSAiUEFTU0FUIiwKKyAgICAgICAgLmNvZGUgPSBCUkxfQ01EX0JMSyhQQVNTQVQpLAorICAgICAgICAuaXNLZXlib2FyZCA9IDEsCisgICAgICAgIC8vIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgUEFTU0FUIGNvbW1hbmQuCisgICAgICAgIC5kZXNjcmlwdGlvbiA9IHN0cnRleHQoIkFUIChzZXQgMikga2V5Ym9hcmQgc2NhbiBjb2RlIiksCisgICAgfSwKKworICAgIHsKKyAgICAgICAgLy8gQlJMX0JMS19QQVNTWFQKKyAgICAgICAgLm5hbWUgPSAiUEFTU1hUIiwKKyAgICAgICAgLmNvZGUgPSBCUkxfQ01EX0JMSyhQQVNTWFQpLAorICAgICAgICAuaXNLZXlib2FyZCA9IDEsCisgICAgICAgIC8vIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgUEFTU1hUIGNvbW1hbmQuCisgICAgICAgIC5kZXNjcmlwdGlvbiA9IHN0cnRleHQoIlhUIChzZXQgMSkga2V5Ym9hcmQgc2NhbiBjb2RlIiksCisgICAgfSwKKworICAgIHsKKyAgICAgICAgLy8gQlJMX0JMS19QQVNTUFMyCisgICAgICAgIC5uYW1lID0gIlBBU1NQUzIiLAorICAgICAgICAuY29kZSA9IEJSTF9DTURfQkxLKFBBU1NQUzIpLAorICAgICAgICAuaXNLZXlib2FyZCA9IDEsCisgICAgICAgIC8vIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgUEFTU1BTMiBjb21tYW5kLgorICAgICAgICAuZGVzY3JpcHRpb24gPSBzdHJ0ZXh0KCJQUy8yIChzZXQgMykga2V5Ym9hcmQgc2NhbiBjb2RlIiksCisgICAgfSwKKworICAgIHsKKyAgICAgICAgLy8gQlJMX0JMS19DT05URVhUCisgICAgICAgIC5uYW1lID0gIkNPTlRFWFQiLAorICAgICAgICAuY29kZSA9IEJSTF9DTURfQkxLKENPTlRFWFQpLAorICAgICAgICAuaXNPZmZzZXQgPSAxLAorICAgICAgICAvLyB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIENPTlRFWFQgY29tbWFuZC4KKyAgICAgICAgLmRlc2NyaXB0aW9uID0gc3RydGV4dCgic3dpdGNoIHRvIGNvbW1hbmQgY29udGV4dCIpLAorICAgIH0sCisKKyAgICB7CisgICAgICAgIC8vIEJSTF9CTEtfVE9VQ0hfQVQKKyAgICAgICAgLm5hbWUgPSAiVE9VQ0hfQVQiLAorICAgICAgICAuY29kZSA9IEJSTF9DTURfQkxLKFRPVUNIX0FUKSwKKyAgICAgICAgLmlzT2Zmc2V0ID0gMSwKKyAgICAgICAgLy8geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBUT1VDSF9BVCBjb21tYW5kLgorICAgICAgICAuZGVzY3JpcHRpb24gPSBzdHJ0ZXh0KCJjdXJyZW50IHJlYWRpbmcgbG9jYXRpb24iKSwKKyAgICB9LAorCisgICAgeworICAgICAgICAvLyBCUkxfQkxLX01BQ1JPCisgICAgICAgIC5uYW1lID0gIk1BQ1JPIiwKKyAgICAgICAgLmNvZGUgPSBCUkxfQ01EX0JMSyhNQUNSTyksCisgICAgICAgIC5pc09mZnNldCA9IDEsCisgICAgICAgIC8vIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgTUFDUk8gY29tbWFuZC4KKyAgICAgICAgLmRlc2NyaXB0aW9uID0gc3RydGV4dCgiZXhlY3V0ZSBjb21tYW5kIG1hY3JvIiksCisgICAgfSwKKworICAgIHsKKyAgICAgICAgLy8gQlJMX0JMS19IT1NUQ01ECisgICAgICAgIC5uYW1lID0gIkhPU1RDTUQiLAorICAgICAgICAuY29kZSA9IEJSTF9DTURfQkxLKEhPU1RDTUQpLAorICAgICAgICAuaXNPZmZzZXQgPSAxLAorICAgICAgICAvLyB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIEhPU1RDTUQgY29tbWFuZC4KKyAgICAgICAgLmRlc2NyaXB0aW9uID0gc3RydGV4dCgicnVuIGhvc3QgY29tbWFuZCIpLAorICAgIH0sCisKKyAgICB7CisgICAgICAgIC8vIEJSTF9LRVlfRU5URVIKKyAgICAgICAgLm5hbWUgPSAiS0VZX0VOVEVSIiwKKyAgICAgICAgLmNvZGUgPSBCUkxfQ01EX0tFWShFTlRFUiksCisgICAgICAgIC5pc0lucHV0ID0gMSwKKyAgICAgICAgLy8geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBLRVlfRU5URVIgY29tbWFuZC4KKyAgICAgICAgLmRlc2NyaXB0aW9uID0gc3RydGV4dCgiZW50ZXIga2V5IiksCisgICAgfSwKKworICAgIHsKKyAgICAgICAgLy8gQlJMX0tFWV9UQUIKKyAgICAgICAgLm5hbWUgPSAiS0VZX1RBQiIsCisgICAgICAgIC5jb2RlID0gQlJMX0NNRF9LRVkoVEFCKSwKKyAgICAgICAgLmlzSW5wdXQgPSAxLAorICAgICAgICAvLyB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIEtFWV9UQUIgY29tbWFuZC4KKyAgICAgICAgLmRlc2NyaXB0aW9uID0gc3RydGV4dCgidGFiIGtleSIpLAorICAgIH0sCisKKyAgICB7CisgICAgICAgIC8vIEJSTF9LRVlfQkFDS1NQQUNFCisgICAgICAgIC5uYW1lID0gIktFWV9CQUNLU1BBQ0UiLAorICAgICAgICAuY29kZSA9IEJSTF9DTURfS0VZKEJBQ0tTUEFDRSksCisgICAgICAgIC5pc0lucHV0ID0gMSwKKyAgICAgICAgLy8geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBLRVlfQkFDS1NQQUNFIGNvbW1hbmQuCisgICAgICAgIC5kZXNjcmlwdGlvbiA9IHN0cnRleHQoImJhY2tzcGFjZSBrZXkiKSwKKyAgICB9LAorCisgICAgeworICAgICAgICAvLyBCUkxfS0VZX0VTQ0FQRQorICAgICAgICAubmFtZSA9ICJLRVlfRVNDQVBFIiwKKyAgICAgICAgLmNvZGUgPSBCUkxfQ01EX0tFWShFU0NBUEUpLAorICAgICAgICAuaXNJbnB1dCA9IDEsCisgICAgICAgIC8vIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgS0VZX0VTQ0FQRSBjb21tYW5kLgorICAgICAgICAuZGVzY3JpcHRpb24gPSBzdHJ0ZXh0KCJlc2NhcGUga2V5IiksCisgICAgfSwKKworICAgIHsKKyAgICAgICAgLy8gQlJMX0tFWV9DVVJTT1JfTEVGVAorICAgICAgICAubmFtZSA9ICJLRVlfQ1VSU09SX0xFRlQiLAorICAgICAgICAuY29kZSA9IEJSTF9DTURfS0VZKENVUlNPUl9MRUZUKSwKKyAgICAgICAgLmlzSW5wdXQgPSAxLAorICAgICAgICAvLyB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIEtFWV9DVVJTT1JfTEVGVCBjb21tYW5kLgorICAgICAgICAuZGVzY3JpcHRpb24gPSBzdHJ0ZXh0KCJjdXJzb3ItbGVmdCBrZXkiKSwKKyAgICB9LAorCisgICAgeworICAgICAgICAvLyBCUkxfS0VZX0NVUlNPUl9SSUdIVAorICAgICAgICAubmFtZSA9ICJLRVlfQ1VSU09SX1JJR0hUIiwKKyAgICAgICAgLmNvZGUgPSBCUkxfQ01EX0tFWShDVVJTT1JfUklHSFQpLAorICAgICAgICAuaXNJbnB1dCA9IDEsCisgICAgICAgIC8vIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgS0VZX0NVUlNPUl9SSUdIVCBjb21tYW5kLgorICAgICAgICAuZGVzY3JpcHRpb24gPSBzdHJ0ZXh0KCJjdXJzb3ItcmlnaHQga2V5IiksCisgICAgfSwKKworICAgIHsKKyAgICAgICAgLy8gQlJMX0tFWV9DVVJTT1JfVVAKKyAgICAgICAgLm5hbWUgPSAiS0VZX0NVUlNPUl9VUCIsCisgICAgICAgIC5jb2RlID0gQlJMX0NNRF9LRVkoQ1VSU09SX1VQKSwKKyAgICAgICAgLmlzSW5wdXQgPSAxLAorICAgICAgICAvLyB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIEtFWV9DVVJTT1JfVVAgY29tbWFuZC4KKyAgICAgICAgLmRlc2NyaXB0aW9uID0gc3RydGV4dCgiY3Vyc29yLXVwIGtleSIpLAorICAgIH0sCisKKyAgICB7CisgICAgICAgIC8vIEJSTF9LRVlfQ1VSU09SX0RPV04KKyAgICAgICAgLm5hbWUgPSAiS0VZX0NVUlNPUl9ET1dOIiwKKyAgICAgICAgLmNvZGUgPSBCUkxfQ01EX0tFWShDVVJTT1JfRE9XTiksCisgICAgICAgIC5pc0lucHV0ID0gMSwKKyAgICAgICAgLy8geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBLRVlfQ1VSU09SX0RPV04gY29tbWFuZC4KKyAgICAgICAgLmRlc2NyaXB0aW9uID0gc3RydGV4dCgiY3Vyc29yLWRvd24ga2V5IiksCisgICAgfSwKKworICAgIHsKKyAgICAgICAgLy8gQlJMX0tFWV9QQUdFX1VQCisgICAgICAgIC5uYW1lID0gIktFWV9QQUdFX1VQIiwKKyAgICAgICAgLmNvZGUgPSBCUkxfQ01EX0tFWShQQUdFX1VQKSwKKyAgICAgICAgLmlzSW5wdXQgPSAxLAorICAgICAgICAvLyB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIEtFWV9QQUdFX1VQIGNvbW1hbmQuCisgICAgICAgIC5kZXNjcmlwdGlvbiA9IHN0cnRleHQoInBhZ2UtdXAga2V5IiksCisgICAgfSwKKworICAgIHsKKyAgICAgICAgLy8gQlJMX0tFWV9QQUdFX0RPV04KKyAgICAgICAgLm5hbWUgPSAiS0VZX1BBR0VfRE9XTiIsCisgICAgICAgIC5jb2RlID0gQlJMX0NNRF9LRVkoUEFHRV9ET1dOKSwKKyAgICAgICAgLmlzSW5wdXQgPSAxLAorICAgICAgICAvLyB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIEtFWV9QQUdFX0RPV04gY29tbWFuZC4KKyAgICAgICAgLmRlc2NyaXB0aW9uID0gc3RydGV4dCgicGFnZS1kb3duIGtleSIpLAorICAgIH0sCisKKyAgICB7CisgICAgICAgIC8vIEJSTF9LRVlfSE9NRQorICAgICAgICAubmFtZSA9ICJLRVlfSE9NRSIsCisgICAgICAgIC5jb2RlID0gQlJMX0NNRF9LRVkoSE9NRSksCisgICAgICAgIC5pc0lucHV0ID0gMSwKKyAgICAgICAgLy8geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBLRVlfSE9NRSBjb21tYW5kLgorICAgICAgICAuZGVzY3JpcHRpb24gPSBzdHJ0ZXh0KCJob21lIGtleSIpLAorICAgIH0sCisKKyAgICB7CisgICAgICAgIC8vIEJSTF9LRVlfRU5ECisgICAgICAgIC5uYW1lID0gIktFWV9FTkQiLAorICAgICAgICAuY29kZSA9IEJSTF9DTURfS0VZKEVORCksCisgICAgICAgIC5pc0lucHV0ID0gMSwKKyAgICAgICAgLy8geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBLRVlfRU5EIGNvbW1hbmQuCisgICAgICAgIC5kZXNjcmlwdGlvbiA9IHN0cnRleHQoImVuZCBrZXkiKSwKKyAgICB9LAorCisgICAgeworICAgICAgICAvLyBCUkxfS0VZX0lOU0VSVAorICAgICAgICAubmFtZSA9ICJLRVlfSU5TRVJUIiwKKyAgICAgICAgLmNvZGUgPSBCUkxfQ01EX0tFWShJTlNFUlQpLAorICAgICAgICAuaXNJbnB1dCA9IDEsCisgICAgICAgIC8vIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgS0VZX0lOU0VSVCBjb21tYW5kLgorICAgICAgICAuZGVzY3JpcHRpb24gPSBzdHJ0ZXh0KCJpbnNlcnQga2V5IiksCisgICAgfSwKKworICAgIHsKKyAgICAgICAgLy8gQlJMX0tFWV9ERUxFVEUKKyAgICAgICAgLm5hbWUgPSAiS0VZX0RFTEVURSIsCisgICAgICAgIC5jb2RlID0gQlJMX0NNRF9LRVkoREVMRVRFKSwKKyAgICAgICAgLmlzSW5wdXQgPSAxLAorICAgICAgICAvLyB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIEtFWV9ERUxFVEUgY29tbWFuZC4KKyAgICAgICAgLmRlc2NyaXB0aW9uID0gc3RydGV4dCgiZGVsZXRlIGtleSIpLAorICAgIH0sCisKKyAgICB7CisgICAgICAgIC8vIEJSTF9LRVlfRlVOQ1RJT04KKyAgICAgICAgLm5hbWUgPSAiS0VZX0ZVTkNUSU9OIiwKKyAgICAgICAgLmNvZGUgPSBCUkxfQ01EX0tFWShGVU5DVElPTiksCisgICAgICAgIC5pc0lucHV0ID0gMSwKKyAgICAgICAgLmlzT2Zmc2V0ID0gMSwKKyAgICAgICAgLy8geGdldHRleHQ6IFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBLRVlfRlVOQ1RJT04gY29tbWFuZC4KKyAgICAgICAgLmRlc2NyaXB0aW9uID0gc3RydGV4dCgiZnVuY3Rpb24ga2V5IiksCisgICAgfSwKZGlmZiAtLWdpdCBhL1Byb2dyYW1zL2NtZHMuYXdrIGIvUHJvZ3JhbXMvY21kcy5hd2sKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmU5ZDFiOAotLS0gL2Rldi9udWxsCisrKyBiL1Byb2dyYW1zL2NtZHMuYXdrCkBAIC0wLDAgKzEsMTAxIEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisjICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorIworIyBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisjCisjIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisjCisjIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyMgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorIyBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyMKKyMgV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworIworIyBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworZnVuY3Rpb24gd3JpdGVDb21tYW5kRmllbGQobmFtZSwgdmFsdWUpIHsKKyAgcHJpbnQgIiAgLiIgbmFtZSAiID0gIiB2YWx1ZSAiLCIKK30KKworZnVuY3Rpb24gd3JpdGVDb21tYW5kQXR0cmlidXRlKGF0dHJpYnV0ZSkgeworICB3cml0ZUNvbW1hbmRGaWVsZCgiaXMiIGF0dHJpYnV0ZSwgIjEiKQorfQorCitmdW5jdGlvbiB3cml0ZUNvbW1hbmRFbnRyeShuYW1lLCBzeW1ib2wsIHZhbHVlLCBoZWxwKSB7CisgIGlmIChoZWxwIH4gL15kZXByZWNhdGVkIC8pIHJldHVybgorCisgIHByaW50ICJ7IC8vICIgc3ltYm9sCisgIHdyaXRlQ29tbWFuZEZpZWxkKCJuYW1lIiwgIlwiIiBuYW1lICJcIiIpCisgIHdyaXRlQ29tbWFuZEZpZWxkKCJjb2RlIiwgdmFsdWUpCisKKyAgaWYgKGhlbHAgfiAvXnNldCAuKlwvLykgd3JpdGVDb21tYW5kQXR0cmlidXRlKCJUb2dnbGUiKQorICBpZiAoaGVscCB+IC9eYnJpbmcgLykgd3JpdGVDb21tYW5kQXR0cmlidXRlKCJSb3V0aW5nIikKKworICBpZiAoaGVscCB+IC9eZ28gLykgeworICAgIHdyaXRlQ29tbWFuZEF0dHJpYnV0ZSgiTW90aW9uIikKKyAgICBpZiAoaGVscCB+IC8gKHVwfGRvd258dG9wfGJvdHRvbSkgLykgd3JpdGVDb21tYW5kQXR0cmlidXRlKCJWZXJ0aWNhbCIpCisgICAgaWYgKGhlbHAgfiAvIChsZWZ0fHJpZ2h0fGJlZ2lubmluZ3xlbmQpIC8pIHdyaXRlQ29tbWFuZEF0dHJpYnV0ZSgiSG9yaXpvbnRhbCIpCisgICAgaWYgKGhlbHAgfiAvIChiYWNrd2FyZHxmb3J3YXJkKSAvKSB3cml0ZUNvbW1hbmRBdHRyaWJ1dGUoIlBhbm5pbmciKQorICB9CisKKyAgaWYgKHN5bWJvbCB+IC9eQlJMX0JMS18vKSB7CisgICAgaWYgKHN5bWJvbCB+IC9eQlJMX0JMS19QQVNTLykgeworICAgICAgaWYgKHN5bWJvbCB+IC9QQVNTKENIQVJ8RE9UU3xLRVkpLykgeworICAgICAgICB3cml0ZUNvbW1hbmRBdHRyaWJ1dGUoIklucHV0IikKKyAgICAgIH0KKworICAgICAgaWYgKHN5bWJvbCB+IC9QQVNTQ0hBUi8pIHsKKyAgICAgICAgd3JpdGVDb21tYW5kQXR0cmlidXRlKCJDaGFyYWN0ZXIiKQorICAgICAgfQorCisgICAgICBpZiAoc3ltYm9sIH4gL1BBU1NET1RTLykgeworICAgICAgICB3cml0ZUNvbW1hbmRBdHRyaWJ1dGUoIkJyYWlsbGUiKQorICAgICAgfQorCisgICAgICBpZiAoc3ltYm9sIH4gL1BBU1MoWFR8QVR8UFMyKS8pIHsKKyAgICAgICAgd3JpdGVDb21tYW5kQXR0cmlidXRlKCJLZXlib2FyZCIpCisgICAgICB9CisgICAgfSBlbHNlIGlmIChoZWxwIH4gLyBjaGFyYWN0ZXIkLykgeworICAgICAgd3JpdGVDb21tYW5kQXR0cmlidXRlKCJDb2x1bW4iKQorICAgIH0gZWxzZSBpZiAoaGVscCB+IC8gY2hhcmFjdGVycyAvKSB7CisgICAgICB3cml0ZUNvbW1hbmRBdHRyaWJ1dGUoIlJhbmdlIikKKyAgICB9IGVsc2UgaWYgKGhlbHAgfiAvIGxpbmUkLykgeworICAgICAgd3JpdGVDb21tYW5kQXR0cmlidXRlKCJSb3ciKQorICAgICAgd3JpdGVDb21tYW5kQXR0cmlidXRlKCJWZXJ0aWNhbCIpCisgICAgfSBlbHNlIHsKKyAgICAgIHdyaXRlQ29tbWFuZEF0dHJpYnV0ZSgiT2Zmc2V0IikKKyAgICB9CisgIH0gZWxzZSBpZiAoc3ltYm9sIH4gL15CUkxfS0VZXy8pIHsKKyAgICB3cml0ZUNvbW1hbmRBdHRyaWJ1dGUoIklucHV0IikKKworICAgIGlmIChzeW1ib2wgfiAvX0ZVTkNUSU9OLykgeworICAgICAgd3JpdGVDb21tYW5kQXR0cmlidXRlKCJPZmZzZXQiKQorICAgIH0KKyAgfQorCisgIHByaW50ICIgICIgbWFrZVRyYW5zbGF0b3JOb3RlKCJUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgIiBuYW1lICIgY29tbWFuZC4iKQorICB3cml0ZUNvbW1hbmRGaWVsZCgiZGVzY3JpcHRpb24iLCAic3RydGV4dChcIiIgaGVscCAiXCIpIikKKyAgcHJpbnQgIn0sIgorICBwcmludCAiIgorfQorCitmdW5jdGlvbiBicmxDb21tYW5kKG5hbWUsIHN5bWJvbCwgdmFsdWUsIGhlbHApIHsKKyAgd3JpdGVDb21tYW5kRW50cnkobmFtZSwgc3ltYm9sLCBzeW1ib2wsIGhlbHApCit9CisKK2Z1bmN0aW9uIGJybEJsb2NrKG5hbWUsIHN5bWJvbCwgdmFsdWUsIGhlbHApIHsKKyAgd3JpdGVDb21tYW5kRW50cnkobmFtZSwgc3ltYm9sLCAiQlJMX0NNRF9CTEsoIiBuYW1lICIpIiwgaGVscCkKK30KKworZnVuY3Rpb24gYnJsS2V5KG5hbWUsIHN5bWJvbCwgdmFsdWUsIGhlbHApIHsKKyAgd3JpdGVDb21tYW5kRW50cnkoIktFWV8iIG5hbWUsIHN5bWJvbCwgIkJSTF9DTURfS0VZKCIgbmFtZSAiKSIsIGhlbHApCit9CisKK2Z1bmN0aW9uIGJybEZsYWcobmFtZSwgc3ltYm9sLCB2YWx1ZSwgaGVscCkgeworfQorCitmdW5jdGlvbiBicmxEb3QobnVtYmVyLCBzeW1ib2wsIHZhbHVlLCBoZWxwKSB7Cit9CmRpZmYgLS1naXQgYS9Qcm9ncmFtcy9jb25maWcuYyBiL1Byb2dyYW1zL2NvbmZpZy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkyZWRkMjEKLS0tIC9kZXYvbnVsbAorKysgYi9Qcm9ncmFtcy9jb25maWcuYwpAQCAtMCwwICsxLDMxNDggQEAKKy8qCisgKiBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorICogICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorICoKKyAqIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorICoKKyAqIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyAqLworCisjaW5jbHVkZSAicHJvbG9ndWUuaCIKKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8c3RyaW5ncy5oPgorI2luY2x1ZGUgPGN0eXBlLmg+CisjaW5jbHVkZSA8bG9jYWxlLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxmY250bC5oPgorCisjaW5jbHVkZSAicGFyYW1ldGVycy5oIgorI2luY2x1ZGUgImVtYmVkLmgiCisjaW5jbHVkZSAibG9nLmgiCisjaW5jbHVkZSAicmVwb3J0LmgiCisjaW5jbHVkZSAic3RyZm10LmgiCisjaW5jbHVkZSAicGdtcHJpdnMuaCIKKyNpbmNsdWRlICJsb2NrLmgiCisjaW5jbHVkZSAiYWN0aXZpdHkuaCIKKyNpbmNsdWRlICJ1cGRhdGUuaCIKKyNpbmNsdWRlICJjbWQuaCIKKyNpbmNsdWRlICJjbWRfbmF2aWdhdGlvbi5oIgorI2luY2x1ZGUgImJybC5oIgorI2luY2x1ZGUgImJybF91dGlscy5oIgorI2luY2x1ZGUgInNway5oIgorI2luY2x1ZGUgInNwa19pbnB1dC5oIgorI2luY2x1ZGUgInNjci5oIgorI2luY2x1ZGUgInNjcl9zcGVjaWFsLmgiCisjaW5jbHVkZSAic3RhdHVzLmgiCisjaW5jbHVkZSAiYmxpbmsuaCIKKyNpbmNsdWRlICJ2YXJpYWJsZXMuaCIKKyNpbmNsdWRlICJkYXRhZmlsZS5oIgorI2luY2x1ZGUgInR0Yi5oIgorI2luY2x1ZGUgImF0Yi5oIgorI2luY2x1ZGUgImN0Yi5oIgorI2luY2x1ZGUgImt0Yi5oIgorI2luY2x1ZGUgImt0Yl9rZXlib2FyZC5oIgorI2luY2x1ZGUgImtiZC5oIgorI2luY2x1ZGUgImFsZXJ0LmgiCisjaW5jbHVkZSAiYmVsbC5oIgorI2luY2x1ZGUgImxlZHMuaCIKKyNpbmNsdWRlICJ0dW5lLmgiCisjaW5jbHVkZSAibm90ZXMuaCIKKyNpbmNsdWRlICJtZXNzYWdlLmgiCisjaW5jbHVkZSAiZmlsZS5oIgorI2luY2x1ZGUgInBhcnNlLmgiCisjaW5jbHVkZSAiZHlubGQuaCIKKyNpbmNsdWRlICJhc3luY19oYW5kbGUuaCIKKyNpbmNsdWRlICJhc3luY19hbGFybS5oIgorI2luY2x1ZGUgInByb2dyYW0uaCIKKyNpbmNsdWRlICJtZXNzYWdlcy5oIgorI2luY2x1ZGUgInJldmlzaW9uLmgiCisjaW5jbHVkZSAic2VydmljZS5oIgorI2luY2x1ZGUgImNtZGxpbmUuaCIKKyNpbmNsdWRlICJwcm9maWxlX3R5cGVzLmgiCisjaW5jbHVkZSAiYnJsX2lucHV0LmgiCisjaW5jbHVkZSAiY21kX3F1ZXVlLmgiCisjaW5jbHVkZSAiY29yZS5oIgorI2luY2x1ZGUgImFwaV9jb250cm9sLmgiCisjaW5jbHVkZSAicHJlZnMuaCIKKyNpbmNsdWRlICJ1dGY4LmgiCisKKyNpbmNsdWRlICJpb19nZW5lcmljLmgiCisjaW5jbHVkZSAiaW9fdXNiLmgiCisjaW5jbHVkZSAiaW9fYmx1ZXRvb3RoLmgiCisKKyNpZmRlZiBfX01JTkdXMzJfXworaW50IGlzV2luZG93c1NlcnZpY2UgPSAwOworI2VuZGlmIC8qIF9fTUlOR1czMl9fICovCisKKyNpZmRlZiBfX01TRE9TX18KKyNpbmNsdWRlICJzeXN0ZW1fbXNkb3MuaCIKKyNlbmRpZiAvKiBfX01TRE9TX18gKi8KKworc3RhdGljIHZvaWQKK21ha2VQcm9ncmFtQmFubmVyIChjaGFyICpidWZmZXIsIHNpemVfdCBzaXplLCBpbnQgaW5jbHVkZVJldmlzaW9uKSB7CisgIGNvbnN0IGNoYXIgKnJldmlzaW9uID0gaW5jbHVkZVJldmlzaW9uPyBnZXRSZXZpc2lvbklkZW50aWZpZXIoKTogIiI7CisgIHNucHJpbnRmKGJ1ZmZlciwgc2l6ZSwgIiVzICVzJXMlcyIsCisgICAgICAgICAgIFBBQ0tBR0VfTkFNRSwgUEFDS0FHRV9WRVJTSU9OLAorICAgICAgICAgICAoKnJldmlzaW9uPyAiIHJldiAiOiAiIiksIHJldmlzaW9uKTsKK30KKworc3RhdGljIHZvaWQKK2xvZ1Byb2dyYW1CYW5uZXIgKHZvaWQpIHsKKyAgY2hhciBiYW5uZXJbMFgxMDBdOworICBtYWtlUHJvZ3JhbUJhbm5lcihiYW5uZXIsIHNpemVvZihiYW5uZXIpLCAxKTsKKworICB7CisgICAgaW50IHB1c2hlZCA9IHB1c2hMb2dQcmVmaXgoIiIpOworICAgIGxvZ01lc3NhZ2UoTE9HX05PVElDRSwgIiVzIFslc10iLCBiYW5uZXIsIFBBQ0tBR0VfVVJMKTsKKyAgICBpZiAocHVzaGVkKSBwb3BMb2dQcmVmaXgoKTsKKyAgfQorfQorCitzdGF0aWMgdm9pZAorbG9nUHJvcGVydHkgKGNvbnN0IGNoYXIgKnZhbHVlLCBjb25zdCBjaGFyICp2YXJpYWJsZSwgY29uc3QgY2hhciAqbGFiZWwpIHsKKyAgaWYgKHZhbHVlICYmICp2YWx1ZSkgeworICAgIGlmICh2YXJpYWJsZSkgc2V0R2xvYmFsVmFyaWFibGUodmFyaWFibGUsIHZhbHVlKTsKKyAgfSBlbHNlIHsKKyAgICB2YWx1ZSA9ICJub25lIjsKKyAgfQorCisgIGxvZ01lc3NhZ2UoTE9HX0lORk8sICIlczogJXMiLCBsYWJlbCwgdmFsdWUpOworfQorCitzdGF0aWMgY29uc3QgY2hhciBvcHRpb25PcGVyYW5kX25vbmVbXSA9ICJubyI7CitzdGF0aWMgY29uc3QgY2hhciBvcHRpb25PcGVyYW5kX2F1dG9kZXRlY3RbXSA9ICJhdXRvIjsKK3N0YXRpYyBjb25zdCBjaGFyIG9wdGlvbk9wZXJhbmRfb2ZmW10gPSAib2ZmIjsKKworc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0ICpjb25zdCBmYWxsYmFja0JyYWlsbGVEcml2ZXJzID0KKyAgTlVMTF9URVJNSU5BVEVEX1NUUklOR19BUlJBWSgKKyAgICBvcHRpb25PcGVyYW5kX25vbmUKKyAgKTsKKworc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0ICpjb25zdCBhdXRvZGV0ZWN0YWJsZUJyYWlsbGVEcml2ZXJzX3NlcmlhbCA9CisgIE5VTExfVEVSTUlOQVRFRF9TVFJJTkdfQVJSQVkoCisgICAgIm1kIiwgInBtIiwgInRzIiwgImh0IiwgImJuIiwgImFsIiwgImJtIiwgInBnIiwgInNrIgorICApOworCitzdGF0aWMgY29uc3QgY2hhciAqY29uc3QgKmNvbnN0IGF1dG9kZXRlY3RhYmxlQnJhaWxsZURyaXZlcnNfVVNCID0KKyAgTlVMTF9URVJNSU5BVEVEX1NUUklOR19BUlJBWSgKKyAgICAiYWwiLCAiYm0iLCAiYm4iLCAiY24iLCAiZHAiLCAiZXUiLCAiZnMiLCAiaGQiLCAiaG0iLCAiaHQiLCAiaHciLCAiaWMiLCAibXQiLCAicGciLCAicG0iLCAic2siLCAidm8iCisgICk7CisKK3N0YXRpYyBjb25zdCBjaGFyICpjb25zdCAqY29uc3QgYXV0b2RldGVjdGFibGVCcmFpbGxlRHJpdmVyc19CbHVldG9vdGggPQorICBOVUxMX1RFUk1JTkFURURfU1RSSU5HX0FSUkFZKAorICAgICJucCIsICJodCIsICJhbCIsICJibSIKKyAgKTsKKworI2RlZmluZSBTRVJWSUNFX05BTUUgIkJybEFQSSIKKyNkZWZpbmUgU0VSVklDRV9ERVNDUklQVElPTiAiQnJhaWxsZSBEZXZpY2VzIEFQSSIKKworc3RhdGljCitTVFJfQkVHSU5fRk9STUFUVEVSKGZvcm1hdExvZ0xldmVsU3RyaW5nLCB1bnNpZ25lZCBpbnQgaW5kZXgpCisgIHN3aXRjaCAoaW5kZXgpIHsKKyAgICBjYXNlIDA6CisgICAgICBTVFJfUFJJTlRGKCIwLSV1IiwgbG9nTGV2ZWxDb3VudC0xKTsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSAxOiB7CisgICAgICBmb3IgKHVuc2lnbmVkIGludCBsZXZlbD0wOyBsZXZlbDxsb2dMZXZlbENvdW50OyBsZXZlbCs9MSkgeworICAgICAgICBpZiAobGV2ZWwpIFNUUl9QUklOVEYoIiAiKTsKKyAgICAgICAgU1RSX1BSSU5URigiJXMiLCBsb2dMZXZlbE5hbWVzW2xldmVsXSk7CisgICAgICB9CisKKyAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2UgMjogeworICAgICAgTG9nQ2F0ZWdvcnlJbmRleCBjYXRlZ29yeTsKKworICAgICAgU1RSX1BSSU5URigiJXMiLCBsb2dDYXRlZ29yeU5hbWVfYWxsKTsKKworICAgICAgZm9yIChjYXRlZ29yeT0wOyBjYXRlZ29yeTxMT0dfQ0FURUdPUllfQ09VTlQ7IGNhdGVnb3J5Kz0xKSB7CisgICAgICAgIGNvbnN0IGNoYXIgKm5hbWUgPSBnZXRMb2dDYXRlZ29yeU5hbWUoY2F0ZWdvcnkpOworCisgICAgICAgIGlmIChuYW1lICYmICpuYW1lKSB7CisgICAgICAgICAgU1RSX1BSSU5URigiICVzIiwgbmFtZSk7CisgICAgICAgIH0KKyAgICAgIH0KKworICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSAzOgorICAgICAgU1RSX1BSSU5URigiJWMiLCBsb2dDYXRlZ29yeVByZWZpeF9kaXNhYmxlKTsKKyAgICAgIGJyZWFrOworCisgICAgZGVmYXVsdDoKKyAgICAgIGJyZWFrOworICB9CitTVFJfRU5EX0ZPUk1BVFRFUgorCitzdGF0aWMgY29uc3QgY2hhciAqY29uc3QgKmNvbnN0IHNjcmVlbkNvbnRlbnRRdWFsaXR5Q2hvaWNlcyA9CisgIE5VTExfVEVSTUlOQVRFRF9TVFJJTkdfQVJSQVkoCisgICAgIm5vbmUiLCAibG93IiwgInBvb3IiLCAiZmFpciIsICJnb29kIiwgImhpZ2giCisgICk7CisKK1NUUl9CRUdJTl9GT1JNQVRURVIoZm9ybWF0U2NyZWVuQ29udGVudFF1YWxpdHlDaG9pY2VzLCB1bnNpZ25lZCBpbnQgaW5kZXgpCisgIHN3aXRjaCAoaW5kZXgpIHsKKyAgICBjYXNlIDA6IHsKKyAgICAgIGNvbnN0IGNoYXIgKmNvbnN0ICpjaG9pY2VzID0gc2NyZWVuQ29udGVudFF1YWxpdHlDaG9pY2VzOworICAgICAgY29uc3QgY2hhciAqY29uc3QgKmNob2ljZSA9IGNob2ljZXM7CisKKyAgICAgIHdoaWxlICgqY2hvaWNlKSB7CisgICAgICAgIGlmIChjaG9pY2UgIT0gY2hvaWNlcykgU1RSX1BSSU5URigiICIpOworICAgICAgICBTVFJfUFJJTlRGKCIlcyIsICpjaG9pY2UpOworICAgICAgICBjaG9pY2UgKz0gMTsKKyAgICAgIH0KKworICAgICAgYnJlYWs7CisgICAgfQorCisgICAgZGVmYXVsdDoKKyAgICAgIGJyZWFrOworICB9CitTVFJfRU5EX0ZPUk1BVFRFUgorCitzdGF0aWMgaW50IG9wdF9pbnN0YWxsU2VydmljZTsKK3N0YXRpYyBjb25zdCBjaGFyICpjb25zdCBvcHRpb25TdHJpbmdzX0luc3RhbGxTZXJ2aWNlW10gPSB7CisgIFNFUlZJQ0VfTkFNRSwKKyAgTlVMTAorfTsKKworc3RhdGljIGludCBvcHRfcmVtb3ZlU2VydmljZTsKK3N0YXRpYyBjb25zdCBjaGFyICpjb25zdCBvcHRpb25TdHJpbmdzX1JlbW92ZVNlcnZpY2VbXSA9IHsKKyAgU0VSVklDRV9OQU1FLAorICBOVUxMCit9OworCitzdGF0aWMgY2hhciAqb3B0X3N0YXJ0TWVzc2FnZTsKK3N0YXRpYyBjaGFyICpvcHRfc3RvcE1lc3NhZ2U7CitzdGF0aWMgY2hhciAqb3B0X2xvY2FsZURpcmVjdG9yeTsKKworc3RhdGljIGludCBvcHRfdmVyc2lvbjsKK3N0YXRpYyBpbnQgb3B0X3ZlcmlmeTsKK3N0YXRpYyBpbnQgb3B0X3F1aWV0Oworc3RhdGljIGludCBvcHRfbm9EYWVtb247CitzdGF0aWMgaW50IG9wdF9zdGFuZGFyZEVycm9yOworc3RhdGljIGNoYXIgKm9wdF9sb2dMZXZlbDsKK3N0YXRpYyBjaGFyICpvcHRfbG9nRmlsZTsKK3N0YXRpYyBpbnQgb3B0X2Jvb3RQYXJhbWV0ZXJzID0gMTsKK3N0YXRpYyBpbnQgb3B0X2Vudmlyb25tZW50VmFyaWFibGVzOworc3RhdGljIGNoYXIgKm9wdF9tZXNzYWdlVGltZTsKKworc3RhdGljIGludCBvcHRfY2FuY2VsRXhlY3V0aW9uOworc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IG9wdGlvblN0cmluZ3NfQ2FuY2VsRXhlY3V0aW9uW10gPSB7CisgIFBBQ0tBR0VfVEFSTkFNRSwKKyAgTlVMTAorfTsKKworc3RhdGljIGNoYXIgKm9wdF9wcm9tcHRQYXR0ZXJuczsKKworc3RhdGljIGludCBvcHRfc3RheVByaXZpbGVnZWQ7CitzdGF0aWMgY2hhciAqb3B0X3ByaXZpbGVnZVBhcmFtZXRlcnM7CisKK3N0YXRpYyBjaGFyICpvcHRfcGlkRmlsZTsKK3N0YXRpYyBjaGFyICpvcHRfY29uZmlndXJhdGlvbkZpbGU7CisKK3N0YXRpYyBjaGFyICpvcHRfdXBkYXRhYmxlRGlyZWN0b3J5Oworc3RhdGljIGNoYXIgKm9wdF93cml0YWJsZURpcmVjdG9yeTsKK2NoYXIgKm9wdF9kcml2ZXJzRGlyZWN0b3J5OworCitjaGFyICpvcHRfYnJhaWxsZURldmljZTsKK3N0YXRpYyBjaGFyICoqYnJhaWxsZURldmljZXMgPSBOVUxMOworc3RhdGljIGNvbnN0IGNoYXIgKmJyYWlsbGVEZXZpY2UgPSBOVUxMOworaW50IG9wdF9yZWxlYXNlRGV2aWNlOworCitzdGF0aWMgY2hhciAqb3B0X2JyYWlsbGVEcml2ZXI7CitzdGF0aWMgY2hhciAqKmJyYWlsbGVEcml2ZXJzID0gTlVMTDsKK3N0YXRpYyBjb25zdCBCcmFpbGxlRHJpdmVyICpicmFpbGxlRHJpdmVyID0gTlVMTDsKK3N0YXRpYyB2b2lkICpicmFpbGxlT2JqZWN0ID0gTlVMTDsKK3N0YXRpYyBpbnQgYnJhaWxsZURyaXZlckNvbnN0cnVjdGVkOworCitzdGF0aWMgY2hhciAqb3B0X2JyYWlsbGVQYXJhbWV0ZXJzOworc3RhdGljIGNoYXIgKmJyYWlsbGVQYXJhbWV0ZXJzID0gTlVMTDsKK3N0YXRpYyBjaGFyICoqYnJhaWxsZURyaXZlclBhcmFtZXRlcnMgPSBOVUxMOworCitzdGF0aWMgY2hhciAqb3B0X3ByZWZlcmVuY2VzRmlsZTsKK3N0YXRpYyBjaGFyICpvcHRfb3ZlcnJpZGVQcmVmZXJlbmNlczsKKworc3RhdGljIGNoYXIgKm9sZFByZWZlcmVuY2VzRmlsZSA9IE5VTEw7CitzdGF0aWMgaW50IG9sZFByZWZlcmVuY2VzRW5hYmxlZCA9IDE7CisKK2NoYXIgKm9wdF90YWJsZXNEaXJlY3Rvcnk7CitjaGFyICpvcHRfdGV4dFRhYmxlOworY2hhciAqb3B0X2NvbnRyYWN0aW9uVGFibGU7CitjaGFyICpvcHRfYXR0cmlidXRlc1RhYmxlOworCitjaGFyICpvcHRfa2V5Ym9hcmRUYWJsZTsKK0tleVRhYmxlICprZXlib2FyZFRhYmxlID0gTlVMTDsKK3N0YXRpYyBLZXlib2FyZE1vbml0b3JPYmplY3QgKmtleWJvYXJkTW9uaXRvciA9IE5VTEw7CisKK3N0YXRpYyBjaGFyICpvcHRfa2V5Ym9hcmRQcm9wZXJ0aWVzOworc3RhdGljIEtleWJvYXJkUHJvcGVydGllcyBrZXlib2FyZFByb3BlcnRpZXM7CisKKyNpZmRlZiBFTkFCTEVfQVBJCitzdGF0aWMgaW50IG9wdF9ub0FwaTsKK3N0YXRpYyBjaGFyICpvcHRfYXBpUGFyYW1ldGVycyA9IE5VTEw7CitzdGF0aWMgY2hhciAqKmFwaVBhcmFtZXRlcnMgPSBOVUxMOworI2VuZGlmIC8qIEVOQUJMRV9BUEkgKi8KKworI2lmZGVmIEVOQUJMRV9TUEVFQ0hfU1VQUE9SVAorc3RhdGljIGNoYXIgKm9wdF9zcGVlY2hEcml2ZXI7CitzdGF0aWMgY2hhciAqKnNwZWVjaERyaXZlcnMgPSBOVUxMOworc3RhdGljIGNvbnN0IFNwZWVjaERyaXZlciAqc3BlZWNoRHJpdmVyID0gTlVMTDsKK3N0YXRpYyB2b2lkICpzcGVlY2hPYmplY3QgPSBOVUxMOworCitzdGF0aWMgY2hhciAqb3B0X3NwZWVjaFBhcmFtZXRlcnM7CitzdGF0aWMgY2hhciAqc3BlZWNoUGFyYW1ldGVycyA9IE5VTEw7CitzdGF0aWMgY2hhciAqKnNwZWVjaERyaXZlclBhcmFtZXRlcnMgPSBOVUxMOworCitzdGF0aWMgY2hhciAqb3B0X3NwZWVjaElucHV0Oworc3RhdGljIFNwZWVjaElucHV0T2JqZWN0ICpzcGVlY2hJbnB1dE9iamVjdDsKKworaW50IG9wdF9xdWlldElmTm9CcmFpbGxlOworc3RhdGljIGNoYXIgKm9wdF9hdXRvc3BlYWtUaHJlc2hvbGQ7Cit1bnNpZ25lZCBpbnQgYXV0b3NwZWFrTWluaW11bVNjcmVlbkNvbnRlbnRRdWFsaXR5OworCitzdGF0aWMgdm9pZAorc2V0QXV0b3NwZWFrVGhyZXNob2xkICh2b2lkKSB7CisgIGNvbnN0IGNoYXIgKmNob2ljZSA9IG9wdF9hdXRvc3BlYWtUaHJlc2hvbGQ7CisKKyAgaW50IG9rID0gdmFsaWRhdGVDaG9pY2UoCisgICAgJmF1dG9zcGVha01pbmltdW1TY3JlZW5Db250ZW50UXVhbGl0eSwKKyAgICBjaG9pY2UsIHNjcmVlbkNvbnRlbnRRdWFsaXR5Q2hvaWNlcworICApOworCisgIGlmICghb2spIHsKKyAgICBsb2dNZXNzYWdlKExPR19FUlIsICIlczogJXMiLAorICAgICAgZ2V0dGV4dCgidW5rbm93biBzY3JlZW4gY29udGVudCBxdWFsaXR5IiksCisgICAgICBjaG9pY2UKKyAgICApOworICB9CisKKyAgbG9nUHJvcGVydHkoCisgICAgc2NyZWVuQ29udGVudFF1YWxpdHlDaG9pY2VzW2F1dG9zcGVha01pbmltdW1TY3JlZW5Db250ZW50UXVhbGl0eV0sCisgICAgImF1dG9zcGVha1RocmVzaG9sZCIsICJBdXRvc3BlYWsgVGhyZXNob2xkIgorICApOworfQorI2VuZGlmIC8qIEVOQUJMRV9TUEVFQ0hfU1VQUE9SVCAqLworCitzdGF0aWMgY2hhciAqb3B0X3NjcmVlbkRyaXZlcjsKK3N0YXRpYyBjaGFyICoqc2NyZWVuRHJpdmVycyA9IE5VTEw7CitzdGF0aWMgY29uc3QgU2NyZWVuRHJpdmVyICpzY3JlZW5Ecml2ZXIgPSBOVUxMOworc3RhdGljIHZvaWQgKnNjcmVlbk9iamVjdCA9IE5VTEw7CitzdGF0aWMgY2hhciAqb3B0X3NjcmVlblBhcmFtZXRlcnM7CitzdGF0aWMgY2hhciAqc2NyZWVuUGFyYW1ldGVycyA9IE5VTEw7CitzdGF0aWMgY2hhciAqKnNjcmVlbkRyaXZlclBhcmFtZXRlcnMgPSBOVUxMOworCitzdGF0aWMgY29uc3QgY2hhciAqY29uc3Qgb3B0aW9uU3RyaW5nc19UZXh0VGFibGVbXSA9IHsKKyAgb3B0aW9uT3BlcmFuZF9hdXRvZGV0ZWN0LAorICBOVUxMCit9OworCitzdGF0aWMgY29uc3QgY2hhciAqY29uc3Qgb3B0aW9uU3RyaW5nc19CcmFpbGxlRHJpdmVyW10gPSB7CisgIG9wdGlvbk9wZXJhbmRfYXV0b2RldGVjdCwKKyAgb3B0aW9uT3BlcmFuZF9ub25lLAorICBCUkFJTExFX0RSSVZFUl9DT0RFUywKKyAgTlVMTAorfTsKKworc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IG9wdGlvblN0cmluZ3NfU2NyZWVuRHJpdmVyW10gPSB7CisgIG9wdGlvbk9wZXJhbmRfYXV0b2RldGVjdCwKKyAgb3B0aW9uT3BlcmFuZF9ub25lLAorICBTQ1JFRU5fRFJJVkVSX0NPREVTLAorICBOVUxMCit9OworCisjaWZkZWYgRU5BQkxFX1NQRUVDSF9TVVBQT1JUCitzdGF0aWMgY29uc3QgY2hhciAqY29uc3Qgb3B0aW9uU3RyaW5nc19TcGVlY2hEcml2ZXJbXSA9IHsKKyAgb3B0aW9uT3BlcmFuZF9hdXRvZGV0ZWN0LAorICBvcHRpb25PcGVyYW5kX25vbmUsCisgIFNQRUVDSF9EUklWRVJfQ09ERVMsCisgIE5VTEwKK307CisjZW5kaWYgLyogRU5BQkxFX1NQRUVDSF9TVVBQT1JUICovCisKK0JFR0lOX09QVElPTl9UQUJMRShwcm9ncmFtT3B0aW9ucykKKyAgeyAud29yZCA9ICJ2ZXJzaW9uIiwKKyAgICAubGV0dGVyID0gJ1YnLAorICAgIC5zZXR0aW5nLmZsYWcgPSAmb3B0X3ZlcnNpb24sCisgICAgLmRlc2NyaXB0aW9uID0gc3RydGV4dCgiTG9nIHRoZSB2ZXJzaW9ucyBvZiB0aGUgY29yZSwgQVBJLCBhbmQgYnVpbHQtaW4gZHJpdmVycywgYW5kIHRoZW4gZXhpdC4iKQorICB9LAorCisgIHsgLndvcmQgPSAiZW52aXJvbm1lbnQtdmFyaWFibGVzIiwKKyAgICAubGV0dGVyID0gJ0UnLAorICAgIC5zZXR0aW5nLmZsYWcgPSAmb3B0X2Vudmlyb25tZW50VmFyaWFibGVzLAorICAgIC5kZXNjcmlwdGlvbiA9IHN0cnRleHQoIlJlY29nbml6ZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMuIikKKyAgfSwKKworICB7IC53b3JkID0gImNvbmZpZ3VyYXRpb24tZmlsZSIsCisgICAgLmxldHRlciA9ICdmJywKKyAgICAuZmxhZ3MgPSBPUFRfRW52VmFyLAorICAgIC5hcmd1bWVudCA9IHN0cnRleHQoImZpbGUiKSwKKyAgICAuc2V0dGluZy5zdHJpbmcgPSAmb3B0X2NvbmZpZ3VyYXRpb25GaWxlLAorICAgIC5pbnRlcm5hbC5zZXR0aW5nID0gQ09ORklHVVJBVElPTl9ESVJFQ1RPUlkgIi8iIENPTkZJR1VSQVRJT05fRklMRSwKKyAgICAuaW50ZXJuYWwuYWRqdXN0ID0gZml4SW5zdGFsbFBhdGgsCisgICAgLmRlc2NyaXB0aW9uID0gc3RydGV4dCgiUGF0aCB0byBkZWZhdWx0IHNldHRpbmdzIGZpbGUuIikKKyAgfSwKKworICB7IC53b3JkID0gImJyYWlsbGUtZHJpdmVyIiwKKyAgICAubGV0dGVyID0gJ2InLAorICAgIC5ib290UGFyYW1ldGVyID0gMSwKKyAgICAuZmxhZ3MgPSBPUFRfQ29uZmlnIHwgT1BUX0VudlZhciwKKyAgICAuYXJndW1lbnQgPSBzdHJ0ZXh0KCJkcml2ZXIsLi4uIiksCisgICAgLnNldHRpbmcuc3RyaW5nID0gJm9wdF9icmFpbGxlRHJpdmVyLAorICAgIC5pbnRlcm5hbC5zZXR0aW5nID0gb3B0aW9uT3BlcmFuZF9hdXRvZGV0ZWN0LAorICAgIC5kZXNjcmlwdGlvbiA9IHN0cnRleHQoIkJyYWlsbGUgZHJpdmVyIGNvZGUgKCVzLCAlcywgb3Igb25lIG9mIHslc30pLiIpLAorICAgIC5zdHJpbmdzLmFycmF5ID0gb3B0aW9uU3RyaW5nc19CcmFpbGxlRHJpdmVyCisgIH0sCisKKyAgeyAud29yZCA9ICJicmFpbGxlLXBhcmFtZXRlcnMiLAorICAgIC5sZXR0ZXIgPSAnQicsCisgICAgLmJvb3RQYXJhbWV0ZXIgPSA0LAorICAgIC5mbGFncyA9IE9QVF9FeHRlbmQgfCBPUFRfQ29uZmlnIHwgT1BUX0VudlZhciwKKyAgICAuYXJndW1lbnQgPSBzdHJ0ZXh0KCJuYW1lPXZhbHVlLC4uLiIpLAorICAgIC5zZXR0aW5nLnN0cmluZyA9ICZvcHRfYnJhaWxsZVBhcmFtZXRlcnMsCisgICAgLmludGVybmFsLnNldHRpbmcgPSBCUkFJTExFX1BBUkFNRVRFUlMsCisgICAgLmRlc2NyaXB0aW9uID0gc3RydGV4dCgiUGFyYW1ldGVycyBmb3IgdGhlIGJyYWlsbGUgZHJpdmVyLiIpCisgIH0sCisKKyAgeyAud29yZCA9ICJicmFpbGxlLWRldmljZSIsCisgICAgLmxldHRlciA9ICdkJywKKyAgICAuYm9vdFBhcmFtZXRlciA9IDIsCisgICAgLmZsYWdzID0gT1BUX0NvbmZpZyB8IE9QVF9FbnZWYXIsCisgICAgLmFyZ3VtZW50ID0gc3RydGV4dCgiaWRlbnRpZmllciwuLi4iKSwKKyAgICAuc2V0dGluZy5zdHJpbmcgPSAmb3B0X2JyYWlsbGVEZXZpY2UsCisgICAgLmludGVybmFsLnNldHRpbmcgPSBCUkFJTExFX0RFVklDRSwKKyAgICAuZGVzY3JpcHRpb24gPSBzdHJ0ZXh0KCJEZXZpY2UgZm9yIGFjY2Vzc2luZyBicmFpbGxlIGRpc3BsYXkuIikKKyAgfSwKKworICB7IC53b3JkID0gInJlbGVhc2UtZGV2aWNlIiwKKyAgICAubGV0dGVyID0gJ3InLAorICAgIC5mbGFncyA9IE9QVF9Db25maWcgfCBPUFRfRW52VmFyLAorICAgIC5zZXR0aW5nLmZsYWcgPSAmb3B0X3JlbGVhc2VEZXZpY2UsCisjaWZkZWYgV0lORE9XUworICAgIC5pbnRlcm5hbC5zZXR0aW5nID0gT1BUX1dPUkRfVFJVRSwKKyNlbHNlIC8qIFdJTkRPV1MgKi8KKyAgICAuaW50ZXJuYWwuc2V0dGluZyA9IE9QVF9XT1JEX0ZBTFNFLAorI2VuZGlmIC8qIFdJTkRPV1MgKi8KKyAgICAuZGVzY3JpcHRpb24gPSBzdHJ0ZXh0KCJSZWxlYXNlIGJyYWlsbGUgZGV2aWNlIHdoZW4gc2NyZWVuIG9yIHdpbmRvdyBpcyB1bnJlYWRhYmxlLiIpCisgIH0sCisKKyAgeyAud29yZCA9ICJ0ZXh0LXRhYmxlIiwKKyAgICAubGV0dGVyID0gJ3QnLAorICAgIC5ib290UGFyYW1ldGVyID0gMywKKyAgICAuZmxhZ3MgPSBPUFRfQ29uZmlnIHwgT1BUX0VudlZhciwKKyAgICAuYXJndW1lbnQgPSBzdHJ0ZXh0KCJmaWxlIiksCisgICAgLnNldHRpbmcuc3RyaW5nID0gJm9wdF90ZXh0VGFibGUsCisgICAgLmludGVybmFsLnNldHRpbmcgPSBvcHRpb25PcGVyYW5kX2F1dG9kZXRlY3QsCisgICAgLmRlc2NyaXB0aW9uID0gc3RydGV4dCgiTmFtZSBvZiBvciBwYXRoIHRvIHRleHQgdGFibGUgKG9yICVzKS4iKSwKKyAgICAuc3RyaW5ncy5hcnJheSA9IG9wdGlvblN0cmluZ3NfVGV4dFRhYmxlCisgIH0sCisKKyAgeyAud29yZCA9ICJjb250cmFjdGlvbi10YWJsZSIsCisgICAgLmxldHRlciA9ICdjJywKKyAgICAuZmxhZ3MgPSBPUFRfQ29uZmlnIHwgT1BUX0VudlZhciwKKyAgICAuYXJndW1lbnQgPSBzdHJ0ZXh0KCJmaWxlIiksCisgICAgLnNldHRpbmcuc3RyaW5nID0gJm9wdF9jb250cmFjdGlvblRhYmxlLAorICAgIC5pbnRlcm5hbC5zZXR0aW5nID0gb3B0aW9uT3BlcmFuZF9hdXRvZGV0ZWN0LAorICAgIC5kZXNjcmlwdGlvbiA9IHN0cnRleHQoIk5hbWUgb2Ygb3IgcGF0aCB0byBjb250cmFjdGlvbiB0YWJsZS4iKQorICB9LAorCisgIHsgLndvcmQgPSAiYXR0cmlidXRlcy10YWJsZSIsCisgICAgLmxldHRlciA9ICdhJywKKyAgICAuZmxhZ3MgPSBPUFRfQ29uZmlnIHwgT1BUX0VudlZhciwKKyAgICAuYXJndW1lbnQgPSBzdHJ0ZXh0KCJmaWxlIiksCisgICAgLnNldHRpbmcuc3RyaW5nID0gJm9wdF9hdHRyaWJ1dGVzVGFibGUsCisgICAgLmRlc2NyaXB0aW9uID0gc3RydGV4dCgiTmFtZSBvZiBvciBwYXRoIHRvIGF0dHJpYnV0ZXMgdGFibGUuIikKKyAgfSwKKworI2lmZGVmIEVOQUJMRV9TUEVFQ0hfU1VQUE9SVAorICB7IC53b3JkID0gInNwZWVjaC1kcml2ZXIiLAorICAgIC5sZXR0ZXIgPSAncycsCisgICAgLmZsYWdzID0gT1BUX0NvbmZpZyB8IE9QVF9FbnZWYXIsCisgICAgLmFyZ3VtZW50ID0gc3RydGV4dCgiZHJpdmVyLC4uLiIpLAorICAgIC5zZXR0aW5nLnN0cmluZyA9ICZvcHRfc3BlZWNoRHJpdmVyLAorICAgIC5pbnRlcm5hbC5zZXR0aW5nID0gb3B0aW9uT3BlcmFuZF9hdXRvZGV0ZWN0LAorICAgIC5kZXNjcmlwdGlvbiA9IHN0cnRleHQoIlNwZWVjaCBkcml2ZXIgY29kZSAoJXMsICVzLCBvciBvbmUgb2YgeyVzfSkuIiksCisgICAgLnN0cmluZ3MuYXJyYXkgPSBvcHRpb25TdHJpbmdzX1NwZWVjaERyaXZlcgorICB9LAorCisgIHsgLndvcmQgPSAic3BlZWNoLXBhcmFtZXRlcnMiLAorICAgIC5sZXR0ZXIgPSAnUycsCisgICAgLmZsYWdzID0gT1BUX0V4dGVuZCB8IE9QVF9Db25maWcgfCBPUFRfRW52VmFyLAorICAgIC5hcmd1bWVudCA9IHN0cnRleHQoIm5hbWU9dmFsdWUsLi4uIiksCisgICAgLnNldHRpbmcuc3RyaW5nID0gJm9wdF9zcGVlY2hQYXJhbWV0ZXJzLAorICAgIC5pbnRlcm5hbC5zZXR0aW5nID0gU1BFRUNIX1BBUkFNRVRFUlMsCisgICAgLmRlc2NyaXB0aW9uID0gc3RydGV4dCgiUGFyYW1ldGVycyBmb3IgdGhlIHNwZWVjaCBkcml2ZXIuIikKKyAgfSwKKworICB7IC53b3JkID0gInNwZWVjaC1pbnB1dCIsCisgICAgLmxldHRlciA9ICdpJywKKyAgICAuZmxhZ3MgPSBPUFRfQ29uZmlnIHwgT1BUX0VudlZhciwKKyAgICAuYXJndW1lbnQgPSBzdHJ0ZXh0KCJmaWxlIiksCisgICAgLnNldHRpbmcuc3RyaW5nID0gJm9wdF9zcGVlY2hJbnB1dCwKKyAgICAuZGVzY3JpcHRpb24gPSBzdHJ0ZXh0KCJOYW1lIG9mIG9yIHBhdGggdG8gc3BlZWNoIGlucHV0IG9iamVjdC4iKQorICB9LAorCisgIHsgLndvcmQgPSAicXVpZXQtaWYtbm8tYnJhaWxsZSIsCisgICAgLmxldHRlciA9ICdRJywKKyAgICAuZmxhZ3MgPSBPUFRfQ29uZmlnIHwgT1BUX0VudlZhciwKKyAgICAuc2V0dGluZy5mbGFnID0gJm9wdF9xdWlldElmTm9CcmFpbGxlLAorICAgIC5kZXNjcmlwdGlvbiA9IHN0cnRleHQoIkRvIG5vdCBhdXRvc3BlYWsgd2hlbiBicmFpbGxlIGlzIG5vdCBiZWluZyB1c2VkLiIpCisgIH0sCisKKyAgeyAud29yZCA9ICJhdXRvc3BlYWstdGhyZXNob2xkIiwKKyAgICAuZmxhZ3MgPSBPUFRfQ29uZmlnIHwgT1BUX0VudlZhciB8IE9QVF9Gb3JtYXQsCisgICAgLmFyZ3VtZW50ID0gc3RydGV4dCgicXVhbGl0eSIpLAorICAgIC5zZXR0aW5nLnN0cmluZyA9ICZvcHRfYXV0b3NwZWFrVGhyZXNob2xkLAorICAgIC5kZXNjcmlwdGlvbiA9IHN0cnRleHQoIk1pbmltdW0gc2NyZWVuIGNvbnRlbnQgcXVhbGl0eSB0byBhdXRvc3BlYWsgKG9uZSBvZiB7JXN9KS4iKSwKKyAgICAuc3RyaW5ncy5mb3JtYXQgPSBmb3JtYXRTY3JlZW5Db250ZW50UXVhbGl0eUNob2ljZXMKKyAgfSwKKyNlbmRpZiAvKiBFTkFCTEVfU1BFRUNIX1NVUFBPUlQgKi8KKworICB7IC53b3JkID0gInNjcmVlbi1kcml2ZXIiLAorICAgIC5sZXR0ZXIgPSAneCcsCisgICAgLmZsYWdzID0gT1BUX0NvbmZpZyB8IE9QVF9FbnZWYXIsCisgICAgLmFyZ3VtZW50ID0gc3RydGV4dCgiZHJpdmVyLC4uLiIpLAorICAgIC5zZXR0aW5nLnN0cmluZyA9ICZvcHRfc2NyZWVuRHJpdmVyLAorICAgIC5pbnRlcm5hbC5zZXR0aW5nID0gREVGQVVMVF9TQ1JFRU5fRFJJVkVSLAorICAgIC5kZXNjcmlwdGlvbiA9IHN0cnRleHQoIlNjcmVlbiBkcml2ZXIgY29kZSAoJXMsICVzLCBvciBvbmUgb2YgeyVzfSkuIiksCisgICAgLnN0cmluZ3MuYXJyYXkgPSBvcHRpb25TdHJpbmdzX1NjcmVlbkRyaXZlcgorICB9LAorCisgIHsgLndvcmQgPSAic2NyZWVuLXBhcmFtZXRlcnMiLAorICAgIC5sZXR0ZXIgPSAnWCcsCisgICAgLmZsYWdzID0gT1BUX0V4dGVuZCB8IE9QVF9Db25maWcgfCBPUFRfRW52VmFyLAorICAgIC5hcmd1bWVudCA9IHN0cnRleHQoIm5hbWU9dmFsdWUsLi4uIiksCisgICAgLnNldHRpbmcuc3RyaW5nID0gJm9wdF9zY3JlZW5QYXJhbWV0ZXJzLAorICAgIC5pbnRlcm5hbC5zZXR0aW5nID0gU0NSRUVOX1BBUkFNRVRFUlMsCisgICAgLmRlc2NyaXB0aW9uID0gc3RydGV4dCgiUGFyYW1ldGVycyBmb3IgdGhlIHNjcmVlbiBkcml2ZXIuIikKKyAgfSwKKworICB7IC53b3JkID0gImtleWJvYXJkLXRhYmxlIiwKKyAgICAubGV0dGVyID0gJ2snLAorICAgIC5mbGFncyA9IE9QVF9Db25maWcgfCBPUFRfRW52VmFyLAorICAgIC5hcmd1bWVudCA9IHN0cnRleHQoImZpbGUiKSwKKyAgICAuc2V0dGluZy5zdHJpbmcgPSAmb3B0X2tleWJvYXJkVGFibGUsCisgICAgLmludGVybmFsLnNldHRpbmcgPSBvcHRpb25PcGVyYW5kX29mZiwKKyAgICAuZGVzY3JpcHRpb24gPSBzdHJ0ZXh0KCJOYW1lIG9mIG9yIHBhdGggdG8ga2V5Ym9hcmQgdGFibGUuIikKKyAgfSwKKworICB7IC53b3JkID0gImtleWJvYXJkLXByb3BlcnRpZXMiLAorICAgIC5sZXR0ZXIgPSAnSycsCisgICAgLmZsYWdzID0gT1BUX0V4dGVuZCB8IE9QVF9Db25maWcgfCBPUFRfRW52VmFyLAorICAgIC5hcmd1bWVudCA9IHN0cnRleHQoIm5hbWU9dmFsdWUsLi4uIiksCisgICAgLnNldHRpbmcuc3RyaW5nID0gJm9wdF9rZXlib2FyZFByb3BlcnRpZXMsCisgICAgLmRlc2NyaXB0aW9uID0gc3RydGV4dCgiUHJvcGVydGllcyBvZiBlbGlnaWJsZSBrZXlib2FyZHMuIikKKyAgfSwKKworICB7IC53b3JkID0gInByZWZlcmVuY2VzLWZpbGUiLAorICAgIC5sZXR0ZXIgPSAnRicsCisgICAgLmZsYWdzID0gT1BUX0NvbmZpZyB8IE9QVF9FbnZWYXIsCisgICAgLmFyZ3VtZW50ID0gc3RydGV4dCgiZmlsZSIpLAorICAgIC5zZXR0aW5nLnN0cmluZyA9ICZvcHRfcHJlZmVyZW5jZXNGaWxlLAorICAgIC5pbnRlcm5hbC5zZXR0aW5nID0gUFJFRkVSRU5DRVNfRklMRSwKKyAgICAuZGVzY3JpcHRpb24gPSBzdHJ0ZXh0KCJOYW1lIG9mIG9yIHBhdGggdG8gZGVmYXVsdCBwcmVmZXJlbmNlcyBmaWxlLiIpCisgIH0sCisKKyAgeyAud29yZCA9ICJvdmVycmlkZS1wcmVmZXJlbmNlcyIsCisgICAgLmxldHRlciA9ICdvJywKKyAgICAuZmxhZ3MgPSBPUFRfRXh0ZW5kIHwgT1BUX0NvbmZpZyB8IE9QVF9FbnZWYXIsCisgICAgLmFyZ3VtZW50ID0gc3RydGV4dCgibmFtZT12YWx1ZSwuLi4iKSwKKyAgICAuc2V0dGluZy5zdHJpbmcgPSAmb3B0X292ZXJyaWRlUHJlZmVyZW5jZXMsCisgICAgLmRlc2NyaXB0aW9uID0gc3RydGV4dCgiRXhwbGljaXQgcHJlZmVyZW5jZSBzZXR0aW5ncy4iKQorICB9LAorCisjaWZkZWYgRU5BQkxFX0FQSQorICB7IC53b3JkID0gIm5vLWFwaSIsCisgICAgLmxldHRlciA9ICdOJywKKyAgICAuZmxhZ3MgPSBPUFRfQ29uZmlnIHwgT1BUX0VudlZhciwKKyAgICAuc2V0dGluZy5mbGFnID0gJm9wdF9ub0FwaSwKKyAgICAuZGVzY3JpcHRpb24gPSBzdHJ0ZXh0KCJEaXNhYmxlIHRoZSBhcHBsaWNhdGlvbiBwcm9ncmFtbWluZyBpbnRlcmZhY2UuIikKKyAgfSwKKworICB7IC53b3JkID0gImFwaS1wYXJhbWV0ZXJzIiwKKyAgICAubGV0dGVyID0gJ0EnLAorICAgIC5mbGFncyA9IE9QVF9FeHRlbmQgfCBPUFRfQ29uZmlnIHwgT1BUX0VudlZhciwKKyAgICAuYXJndW1lbnQgPSBzdHJ0ZXh0KCJuYW1lPXZhbHVlLC4uLiIpLAorICAgIC5zZXR0aW5nLnN0cmluZyA9ICZvcHRfYXBpUGFyYW1ldGVycywKKyAgICAuaW50ZXJuYWwuc2V0dGluZyA9IEFQSV9QQVJBTUVURVJTLAorICAgIC5kZXNjcmlwdGlvbiA9IHN0cnRleHQoIlBhcmFtZXRlcnMgZm9yIHRoZSBhcHBsaWNhdGlvbiBwcm9ncmFtbWluZyBpbnRlcmZhY2UuIikKKyAgfSwKKyNlbmRpZiAvKiBFTkFCTEVfQVBJICovCisKKyAgeyAud29yZCA9ICJxdWlldCIsCisgICAgLmxldHRlciA9ICdxJywKKyAgICAuZmxhZ3MgPSBPUFRfQ29uZmlnIHwgT1BUX0VudlZhciwKKyAgICAuc2V0dGluZy5mbGFnID0gJm9wdF9xdWlldCwKKyAgICAuZGVzY3JpcHRpb24gPSBzdHJ0ZXh0KCJTdXBwcmVzcyBzdGFydC11cCBtZXNzYWdlcy4iKQorICB9LAorCisgIHsgLndvcmQgPSAibG9nLWxldmVsIiwKKyAgICAubGV0dGVyID0gJ2wnLAorICAgIC5mbGFncyA9IE9QVF9FeHRlbmQgfCBPUFRfQ29uZmlnIHwgT1BUX0VudlZhciB8IE9QVF9Gb3JtYXQsCisgICAgLmFyZ3VtZW50ID0gc3RydGV4dCgibHZsfGNhdCwuLi4iKSwKKyAgICAuc2V0dGluZy5zdHJpbmcgPSAmb3B0X2xvZ0xldmVsLAorICAgIC5kZXNjcmlwdGlvbiA9IHN0cnRleHQoIkxvZ2dpbmcgbGV2ZWwgKCVzIG9yIG9uZSBvZiB7JXN9KSBhbmQvb3IgbG9nIGNhdGVnb3JpZXMgdG8gZW5hYmxlIChhbnkgY29tYmluYXRpb24gb2YgeyVzfSwgZWFjaCBvcHRpb25hbGx5IHByZWZpeGVkIGJ5ICVzIHRvIGRpc2FibGUpLiIpLAorICAgIC5zdHJpbmdzLmZvcm1hdCA9IGZvcm1hdExvZ0xldmVsU3RyaW5nCisgIH0sCisKKyAgeyAud29yZCA9ICJsb2ctZmlsZSIsCisgICAgLmxldHRlciA9ICdMJywKKyAgICAuZmxhZ3MgPSBPUFRfQ29uZmlnIHwgT1BUX0VudlZhciwKKyAgICAuYXJndW1lbnQgPSBzdHJ0ZXh0KCJmaWxlIiksCisgICAgLnNldHRpbmcuc3RyaW5nID0gJm9wdF9sb2dGaWxlLAorICAgIC5kZXNjcmlwdGlvbiA9IHN0cnRleHQoIlBhdGggdG8gbG9nIGZpbGUuIikKKyAgfSwKKworICB7IC53b3JkID0gInN0YW5kYXJkLWVycm9yIiwKKyAgICAubGV0dGVyID0gJ2UnLAorICAgIC5zZXR0aW5nLmZsYWcgPSAmb3B0X3N0YW5kYXJkRXJyb3IsCisgICAgLmRlc2NyaXB0aW9uID0gc3RydGV4dCgiTG9nIHRvIHN0YW5kYXJkIGVycm9yIHJhdGhlciB0aGFuIHRvIHRoZSBzeXN0ZW0gbG9nLiIpCisgIH0sCisKKyAgeyAud29yZCA9ICJuby1kYWVtb24iLAorICAgIC5sZXR0ZXIgPSAnbicsCisgICAgLnNldHRpbmcuZmxhZyA9ICZvcHRfbm9EYWVtb24sCisgICAgLmRlc2NyaXB0aW9uID0gc3RydGV4dCgiUmVtYWluIGEgZm9yZWdyb3VuZCBwcm9jZXNzLiIpCisgIH0sCisKKyAgeyAud29yZCA9ICJzdGF5LXByaXZpbGVnZWQiLAorICAgIC5sZXR0ZXIgPSAneicsCisgICAgLmZsYWdzID0gT1BUX0NvbmZpZyB8IE9QVF9FbnZWYXIsCisgICAgLnNldHRpbmcuZmxhZyA9ICZvcHRfc3RheVByaXZpbGVnZWQsCisgICAgLmRlc2NyaXB0aW9uID0gc3RydGV4dCgiRG9uJ3Qgc3dpdGNoIHRvIGFuIHVucHJpdmlsZWdlZCB1c2VyIG9yIHJlbGlucXVpc2ggYW55IHByaXZpbGVnZXMgKGdyb3VwIG1lbWJlcnNoaXBzLCBjYXBhYmlsaXRpZXMsIGV0YykuIikKKyAgfSwKKworICB7IC53b3JkID0gInByaXZpbGVnZS1wYXJhbWV0ZXJzIiwKKyAgICAubGV0dGVyID0gJ1onLAorICAgIC5mbGFncyA9IE9QVF9FeHRlbmQgfCBPUFRfQ29uZmlnIHwgT1BUX0VudlZhciwKKyAgICAuYXJndW1lbnQgPSBzdHJ0ZXh0KCJuYW1lPXZhbHVlLC4uLiIpLAorICAgIC5zZXR0aW5nLnN0cmluZyA9ICZvcHRfcHJpdmlsZWdlUGFyYW1ldGVycywKKyAgICAuaW50ZXJuYWwuc2V0dGluZyA9IFBSSVZJTEVHRV9QQVJBTUVURVJTLAorICAgIC5kZXNjcmlwdGlvbiA9IHN0cnRleHQoIlBhcmFtZXRlcnMgZm9yIHRoZSBwcml2aWxlZ2UgZXN0YWJsaXNobWVudCBzdGFnZS4iKQorICB9LAorCisgIHsgLndvcmQgPSAibWVzc2FnZS10aW1lIiwKKyAgICAubGV0dGVyID0gJ00nLAorICAgIC5mbGFncyA9IE9QVF9Db25maWcgfCBPUFRfRW52VmFyLAorICAgIC5hcmd1bWVudCA9IHN0cnRleHQoImNzZWNzIiksCisgICAgLnNldHRpbmcuc3RyaW5nID0gJm9wdF9tZXNzYWdlVGltZSwKKyAgICAuZGVzY3JpcHRpb24gPSBzdHJ0ZXh0KCJNZXNzYWdlIGhvbGQgdGltZW91dCAoaW4gMTBtcyB1bml0cykuIikKKyAgfSwKKworICB7IC53b3JkID0gInN0YXJ0LW1lc3NhZ2UiLAorICAgIC5mbGFncyA9IE9QVF9Db25maWcgfCBPUFRfRW52VmFyLAorICAgIC5hcmd1bWVudCA9IHN0cnRleHQoInRleHQiKSwKKyAgICAuc2V0dGluZy5zdHJpbmcgPSAmb3B0X3N0YXJ0TWVzc2FnZSwKKyAgICAuZGVzY3JpcHRpb24gPSBzdHJ0ZXh0KCJUaGUgdGV4dCB0byBiZSBzaG93biB3aGVuIHRoZSBicmFpbGxlIGRyaXZlciBzdGFydHMgYW5kIHRvIGJlIHNwb2tlbiB3aGVuIHRoZSBzcGVlY2ggZHJpdmVyIHN0YXJ0cy4iKQorICB9LAorCisgIHsgLndvcmQgPSAic3RvcC1tZXNzYWdlIiwKKyAgICAuZmxhZ3MgPSBPUFRfQ29uZmlnIHwgT1BUX0VudlZhciwKKyAgICAuYXJndW1lbnQgPSBzdHJ0ZXh0KCJ0ZXh0IiksCisgICAgLnNldHRpbmcuc3RyaW5nID0gJm9wdF9zdG9wTWVzc2FnZSwKKyAgICAuZGVzY3JpcHRpb24gPSBzdHJ0ZXh0KCJUaGUgdGV4dCB0byBiZSBzaG93biB3aGVuIHRoZSBicmFpbGxlIGRyaXZlciBzdG9wcy4iKQorICB9LAorCisgIHsgLndvcmQgPSAicHJvbXB0LXBhdHRlcm5zIiwKKyAgICAuZmxhZ3MgPSBPUFRfRXh0ZW5kIHwgT1BUX0NvbmZpZyB8IE9QVF9FbnZWYXIsCisgICAgLmFyZ3VtZW50ID0gc3RydGV4dCgicmVnZXhwLC4uLiIpLAorICAgIC5zZXR0aW5nLnN0cmluZyA9ICZvcHRfcHJvbXB0UGF0dGVybnMsCisgICAgLmRlc2NyaXB0aW9uID0gc3RydGV4dCgiUGF0dGVybnMgdGhhdCBtYXRjaCBjb21tYW5kIHByb21wdHMuIikKKyAgfSwKKworI2lmZGVmIEhBVkVfUENNX1NVUFBPUlQKKyAgeyAud29yZCA9ICJwY20tZGV2aWNlIiwKKyAgICAubGV0dGVyID0gJ3AnLAorICAgIC5mbGFncyA9IE9QVF9Db25maWcgfCBPUFRfRW52VmFyLAorICAgIC5hcmd1bWVudCA9IHN0cnRleHQoImRldmljZSIpLAorICAgIC5zZXR0aW5nLnN0cmluZyA9ICZvcHRfcGNtRGV2aWNlLAorICAgIC5kZXNjcmlwdGlvbiA9IHN0cnRleHQoIlBDTSAoc291bmRjYXJkIGRpZ2l0YWwgYXVkaW8pIGRldmljZSBzcGVjaWZpZXIuIikKKyAgfSwKKyNlbmRpZiAvKiBIQVZFX1BDTV9TVVBQT1JUICovCisKKyNpZmRlZiBIQVZFX01JRElfU1VQUE9SVAorICB7IC53b3JkID0gIm1pZGktZGV2aWNlIiwKKyAgICAubGV0dGVyID0gJ20nLAorICAgIC5mbGFncyA9IE9QVF9Db25maWcgfCBPUFRfRW52VmFyLAorICAgIC5hcmd1bWVudCA9IHN0cnRleHQoImRldmljZSIpLAorICAgIC5zZXR0aW5nLnN0cmluZyA9ICZvcHRfbWlkaURldmljZSwKKyAgICAuZGVzY3JpcHRpb24gPSBzdHJ0ZXh0KCJNSURJIChNdXNpY2FsIEluc3RydW1lbnQgRGlnaXRhbCBJbnRlcmZhY2UpIGRldmljZSBzcGVjaWZpZXIuIikKKyAgfSwKKyNlbmRpZiAvKiBIQVZFX01JRElfU1VQUE9SVCAqLworCisgIHsgLndvcmQgPSAidGFibGVzLWRpcmVjdG9yeSIsCisgICAgLmxldHRlciA9ICdUJywKKyAgICAuZmxhZ3MgPSBPUFRfQ29uZmlnIHwgT1BUX0VudlZhciwKKyAgICAuYXJndW1lbnQgPSBzdHJ0ZXh0KCJkaXJlY3RvcnkiKSwKKyAgICAuc2V0dGluZy5zdHJpbmcgPSAmb3B0X3RhYmxlc0RpcmVjdG9yeSwKKyAgICAuaW50ZXJuYWwuc2V0dGluZyA9IFRBQkxFU19ESVJFQ1RPUlksCisgICAgLmludGVybmFsLmFkanVzdCA9IGZpeEluc3RhbGxQYXRoLAorICAgIC5kZXNjcmlwdGlvbiA9IHN0cnRleHQoIlBhdGggdG8gZGlyZWN0b3J5IGNvbnRhaW5pbmcgdGFibGVzLiIpCisgIH0sCisKKyAgeyAud29yZCA9ICJkcml2ZXJzLWRpcmVjdG9yeSIsCisgICAgLmxldHRlciA9ICdEJywKKyAgICAuZmxhZ3MgPSBPUFRfQ29uZmlnIHwgT1BUX0VudlZhciwKKyAgICAuYXJndW1lbnQgPSBzdHJ0ZXh0KCJkaXJlY3RvcnkiKSwKKyAgICAuc2V0dGluZy5zdHJpbmcgPSAmb3B0X2RyaXZlcnNEaXJlY3RvcnksCisgICAgLmludGVybmFsLnNldHRpbmcgPSBEUklWRVJTX0RJUkVDVE9SWSwKKyAgICAuaW50ZXJuYWwuYWRqdXN0ID0gZml4SW5zdGFsbFBhdGgsCisgICAgLmRlc2NyaXB0aW9uID0gc3RydGV4dCgiUGF0aCB0byBkaXJlY3RvcnkgY29udGFpbmluZyBkcml2ZXJzLiIpCisgIH0sCisKKyAgeyAud29yZCA9ICJ1cGRhdGFibGUtZGlyZWN0b3J5IiwKKyAgICAubGV0dGVyID0gJ1UnLAorICAgIC5mbGFncyA9IE9QVF9Db25maWcgfCBPUFRfRW52VmFyLAorICAgIC5hcmd1bWVudCA9IHN0cnRleHQoImRpcmVjdG9yeSIpLAorICAgIC5zZXR0aW5nLnN0cmluZyA9ICZvcHRfdXBkYXRhYmxlRGlyZWN0b3J5LAorICAgIC5pbnRlcm5hbC5zZXR0aW5nID0gVVBEQVRBQkxFX0RJUkVDVE9SWSwKKyAgICAuaW50ZXJuYWwuYWRqdXN0ID0gZml4SW5zdGFsbFBhdGgsCisgICAgLmRlc2NyaXB0aW9uID0gc3RydGV4dCgiUGF0aCB0byBkaXJlY3Rvcnkgd2hpY2ggY29udGFpbnMgZmlsZXMgdGhhdCBjYW4gYmUgdXBkYXRlZC4iKQorICB9LAorCisgIHsgLndvcmQgPSAid3JpdGFibGUtZGlyZWN0b3J5IiwKKyAgICAubGV0dGVyID0gJ1cnLAorICAgIC5mbGFncyA9IE9QVF9Db25maWcgfCBPUFRfRW52VmFyLAorICAgIC5hcmd1bWVudCA9IHN0cnRleHQoImRpcmVjdG9yeSIpLAorICAgIC5zZXR0aW5nLnN0cmluZyA9ICZvcHRfd3JpdGFibGVEaXJlY3RvcnksCisgICAgLmludGVybmFsLnNldHRpbmcgPSBXUklUQUJMRV9ESVJFQ1RPUlksCisgICAgLmludGVybmFsLmFkanVzdCA9IGZpeEluc3RhbGxQYXRoLAorICAgIC5kZXNjcmlwdGlvbiA9IHN0cnRleHQoIlBhdGggdG8gZGlyZWN0b3J5IHdoaWNoIGNhbiBiZSB3cml0dGVuIHRvLiIpCisgIH0sCisKKyAgeyAud29yZCA9ICJsb2NhbGUtZGlyZWN0b3J5IiwKKyAgICAuZmxhZ3MgPSBPUFRfQ29uZmlnIHwgT1BUX0VudlZhciwKKyAgICAuYXJndW1lbnQgPSBzdHJ0ZXh0KCJkaXJlY3RvcnkiKSwKKyAgICAuc2V0dGluZy5zdHJpbmcgPSAmb3B0X2xvY2FsZURpcmVjdG9yeSwKKyAgICAuaW50ZXJuYWwuc2V0dGluZyA9IExPQ0FMRV9ESVJFQ1RPUlksCisgICAgLmludGVybmFsLmFkanVzdCA9IGZpeEluc3RhbGxQYXRoLAorICAgIC5kZXNjcmlwdGlvbiA9IHN0cnRleHQoIlBhdGggdG8gZGlyZWN0b3J5IHdoaWNoIGNvbnRhaW5zIG1lc3NhZ2UgbG9jYWxpemF0aW9ucy4iKQorICB9LAorCisgIHsgLndvcmQgPSAicGlkLWZpbGUiLAorICAgIC5sZXR0ZXIgPSAnUCcsCisgICAgLmZsYWdzID0gT1BUX0NvbmZpZyB8IE9QVF9FbnZWYXIsCisgICAgLmFyZ3VtZW50ID0gc3RydGV4dCgiZmlsZSIpLAorICAgIC5zZXR0aW5nLnN0cmluZyA9ICZvcHRfcGlkRmlsZSwKKyAgICAuaW50ZXJuYWwuYWRqdXN0ID0gZml4SW5zdGFsbFBhdGgsCisgICAgLmRlc2NyaXB0aW9uID0gc3RydGV4dCgiUGF0aCB0byBwcm9jZXNzIGlkZW50aWZpZXIgZmlsZS4iKQorICB9LAorCisgIHsgLndvcmQgPSAiY2FuY2VsLWV4ZWN1dGlvbiIsCisgICAgLmxldHRlciA9ICdDJywKKyAgICAuc2V0dGluZy5mbGFnID0gJm9wdF9jYW5jZWxFeGVjdXRpb24sCisgICAgLmRlc2NyaXB0aW9uID0gc3RydGV4dCgiU3RvcCBhbiBleGlzdGluZyBpbnN0YW5jZSBvZiAlcywgYW5kIHRoZW4gZXhpdC4iKSwKKyAgICAuc3RyaW5ncy5hcnJheSA9IG9wdGlvblN0cmluZ3NfQ2FuY2VsRXhlY3V0aW9uCisgIH0sCisKKyAgeyAud29yZCA9ICJpbnN0YWxsLXNlcnZpY2UiLAorICAgIC5sZXR0ZXIgPSAnSScsCisgICAgLnNldHRpbmcuZmxhZyA9ICZvcHRfaW5zdGFsbFNlcnZpY2UsCisgICAgLmRlc2NyaXB0aW9uID0gc3RydGV4dCgiSW5zdGFsbCB0aGUgJXMgc2VydmljZSwgYW5kIHRoZW4gZXhpdC4iKSwKKyAgICAuc3RyaW5ncy5hcnJheSA9IG9wdGlvblN0cmluZ3NfSW5zdGFsbFNlcnZpY2UKKyAgfSwKKworICB7IC53b3JkID0gInJlbW92ZS1zZXJ2aWNlIiwKKyAgICAubGV0dGVyID0gJ1InLAorICAgIC5zZXR0aW5nLmZsYWcgPSAmb3B0X3JlbW92ZVNlcnZpY2UsCisgICAgLmRlc2NyaXB0aW9uID0gc3RydGV4dCgiUmVtb3ZlIHRoZSAlcyBzZXJ2aWNlLCBhbmQgdGhlbiBleGl0LiIpLAorICAgIC5zdHJpbmdzLmFycmF5ID0gb3B0aW9uU3RyaW5nc19SZW1vdmVTZXJ2aWNlCisgIH0sCisKKyAgeyAud29yZCA9ICJ2ZXJpZnkiLAorICAgIC5sZXR0ZXIgPSAndicsCisgICAgLnNldHRpbmcuZmxhZyA9ICZvcHRfdmVyaWZ5LAorICAgIC5kZXNjcmlwdGlvbiA9IHN0cnRleHQoIldyaXRlIHRoZSBzdGFydC11cCBsb2dzLCBhbmQgdGhlbiBleGl0LiIpCisgIH0sCitFTkRfT1BUSU9OX1RBQkxFKHByb2dyYW1PcHRpb25zKQorCitpbnQKK2NoYW5nZUxvZ0xldmVsIChjb25zdCBjaGFyICpvcGVyYW5kKSB7CisgIGludCBvayA9IDE7CisgIGNoYXIgKipzdHJpbmdzID0gc3BsaXRTdHJpbmcob3BlcmFuZCwgJywnLCBOVUxMKTsKKworICBpZiAoc3RyaW5ncykgeworICAgIGNoYXIgKipzdHJpbmcgPSBzdHJpbmdzOworCisgICAgd2hpbGUgKCpzdHJpbmcpIHsKKyAgICAgIHVuc2lnbmVkIGludCBsZXZlbDsKKworICAgICAgaWYgKGlzTG9nTGV2ZWwoJmxldmVsLCAqc3RyaW5nKSkgeworICAgICAgICBzeXN0ZW1Mb2dMZXZlbCA9IGxldmVsOworICAgICAgfSBlbHNlIGlmICghc2V0TG9nQ2F0ZWdvcnkoKnN0cmluZykpIHsKKyAgICAgICAgbG9nTWVzc2FnZShMT0dfRVJSLCAiJXM6ICVzIiwgZ2V0dGV4dCgidW5rbm93biBsb2cgbGV2ZWwgb3IgY2F0ZWdvcnkiKSwgKnN0cmluZyk7CisgICAgICAgIG9rID0gMDsKKyAgICAgIH0KKworICAgICAgc3RyaW5nICs9IDE7CisgICAgfQorCisgICAgZGVhbGxvY2F0ZVN0cmluZ3Moc3RyaW5ncyk7CisgIH0KKworICByZXR1cm4gb2s7Cit9CisKK2ludAorY2hhbmdlTG9nQ2F0ZWdvcmllcyAoY29uc3QgY2hhciAqb3BlcmFuZCkgeworICBkaXNhYmxlQWxsTG9nQ2F0ZWdvcmllcygpOworICByZXR1cm4gY2hhbmdlTG9nTGV2ZWwob3BlcmFuZCk7Cit9CisKK3N0YXRpYyB2b2lkCitleGl0TG9nICh2b2lkICpkYXRhKSB7CisgIGNsb3NlU3lzdGVtTG9nKCk7CisgIGNsb3NlTG9nRmlsZSgpOworfQorCitzdGF0aWMgdm9pZAorc2V0TG9nTGV2ZWxzICh2b2lkKSB7CisgIHN5c3RlbUxvZ0xldmVsID0gTE9HX05PVElDRTsKKyAgZGlzYWJsZUFsbExvZ0NhdGVnb3JpZXMoKTsKKyAgY2hhbmdlTG9nTGV2ZWwob3B0X2xvZ0xldmVsKTsKKworICB7CisgICAgdW5zaWduZWQgY2hhciBsZXZlbDsKKworICAgIGlmIChvcHRfc3RhbmRhcmRFcnJvcikgeworICAgICAgbGV2ZWwgPSBzeXN0ZW1Mb2dMZXZlbDsKKyAgICB9IGVsc2UgeworICAgICAgbGV2ZWwgPSBMT0dfTk9USUNFOworICAgICAgaWYgKG9wdF92ZXJzaW9uIHx8IG9wdF92ZXJpZnkpIGxldmVsICs9IDE7CisgICAgICBpZiAob3B0X3F1aWV0KSBsZXZlbCAtPSAxOworICAgIH0KKworICAgIHN0ZGVyckxvZ0xldmVsID0gbGV2ZWw7CisgIH0KK30KKworc3RhdGljIHZvaWQKK2VzdGFibGlzaFByaXZpbGVnZXMgKHZvaWQpIHsKKyAgY29uc3QgY2hhciAqcGxhdGZvcm0gPSBnZXRQcml2aWxlZ2VQYXJhbWV0ZXJzUGxhdGZvcm0oKTsKKyAgY29uc3QgY2hhciAqY29uc3QgKm5hbWVzID0gZ2V0UHJpdmlsZWdlUGFyYW1ldGVyTmFtZXMoKTsKKyAgY2hhciAqKnBhcmFtZXRlcnMgPSBnZXRQYXJhbWV0ZXJzKG5hbWVzLCBwbGF0Zm9ybSwgb3B0X3ByaXZpbGVnZVBhcmFtZXRlcnMpOworCisgIGlmIChwYXJhbWV0ZXJzKSB7CisgICAgbG9nUGFyYW1ldGVycyhuYW1lcywgcGFyYW1ldGVycywgIlByaXZpbGVnZSBQYXJhbWV0ZXIiKTsKKyAgICBlc3RhYmxpc2hQcm9ncmFtUHJpdmlsZWdlcyhwYXJhbWV0ZXJzLCBvcHRfc3RheVByaXZpbGVnZWQpOworICAgIGRlYWxsb2NhdGVTdHJpbmdzKHBhcmFtZXRlcnMpOworICB9Cit9CisKK1Byb2dyYW1FeGl0U3RhdHVzCiticmx0dHlQcmVwYXJlIChpbnQgYXJnYywgY2hhciAqYXJndltdKSB7CisgIHsKKyAgICBjb25zdCBDb21tYW5kTGluZURlc2NyaXB0b3IgZGVzY3JpcHRvciA9IHsKKyAgICAgIC5vcHRpb25zID0gJnByb2dyYW1PcHRpb25zLAorCisgICAgICAuYXBwbGljYXRpb25OYW1lID0gImJybHR0eSIsCisgICAgICAuY29uZmlndXJhdGlvbkZpbGUgPSAmb3B0X2NvbmZpZ3VyYXRpb25GaWxlLAorICAgICAgLmRvRW52aXJvbm1lbnRWYXJpYWJsZXMgPSAmb3B0X2Vudmlyb25tZW50VmFyaWFibGVzLAorICAgICAgLmRvQm9vdFBhcmFtZXRlcnMgPSAmb3B0X2Jvb3RQYXJhbWV0ZXJzLAorCisgICAgICAudXNhZ2UgPSB7CisgICAgICAgIC5wdXJwb3NlID0gc3RydGV4dCgiU2NyZWVuIHJlYWRlciBmb3IgdGhvc2Ugd2hvIHVzZSBhIGJyYWlsbGUgZGV2aWNlLiIpLAorICAgICAgfQorICAgIH07CisKKyAgICBQcm9ncmFtRXhpdFN0YXR1cyBleGl0U3RhdHVzID0gcHJvY2Vzc09wdGlvbnMoJmRlc2NyaXB0b3IsICZhcmdjLCAmYXJndik7CisKKyAgICBzd2l0Y2ggKGV4aXRTdGF0dXMpIHsKKyAgICAgIGNhc2UgUFJPR19FWElUX1NZTlRBWDoKKyAgICAgIGNhc2UgUFJPR19FWElUX1NVQ0NFU1M6CisgICAgICAgIGJyZWFrOworCisgICAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gZXhpdFN0YXR1czsKKyAgICB9CisgIH0KKworICBpZiAoYXJnYykgeworICAgIGxvZ01lc3NhZ2UoTE9HX0VSUiwgIiVzOiAlcyIsIGdldHRleHQoImV4Y2VzcyBhcmd1bWVudCIpLCBhcmd2WzBdKTsKKyAgfQorCisgIHNldE1lc3NhZ2VzRGlyZWN0b3J5KG9wdF9sb2NhbGVEaXJlY3RvcnkpOworICBzZXRVcGRhdGFibGVEaXJlY3Rvcnkob3B0X3VwZGF0YWJsZURpcmVjdG9yeSk7CisgIHNldFdyaXRhYmxlRGlyZWN0b3J5KG9wdF93cml0YWJsZURpcmVjdG9yeSk7CisKKyAgc2V0TG9nTGV2ZWxzKCk7CisgIG9uUHJvZ3JhbUV4aXQoImxvZyIsIGV4aXRMb2csIE5VTEwpOworCisgIHsKKyAgICBjb25zdCBjaGFyICpsb2dGaWxlOworCisgICAgaWYgKCpvcHRfbG9nRmlsZSkgeworICAgICAgbG9nRmlsZSA9IG9wdF9sb2dGaWxlOworICAgICAgb3BlbkxvZ0ZpbGUobG9nRmlsZSk7CisgICAgfSBlbHNlIHsKKyAgICAgIGxvZ0ZpbGUgPSAiPHN5c3RlbT4iOworICAgICAgb3BlblN5c3RlbUxvZygpOworICAgIH0KKworICAgIGxvZ1Byb2dyYW1CYW5uZXIoKTsKKyAgICBsb2dQcm9wZXJ0eShsb2dGaWxlLCAibG9nRmlsZSIsICJMb2cgRmlsZSIpOworICAgIGxvZ1Byb3BlcnR5KG9wdF9sb2dMZXZlbCwgImxvZ0xldmVsIiwgIkxvZyBMZXZlbCIpOworICB9CisKKyAgbG9nUHJvcGVydHkoZ2V0TWVzc2FnZXNMb2NhbGUoKSwgIm1lc3NhZ2VzTG9jYWxlIiwgIk1lc3NhZ2VzIExvY2FsZSIpOworICBsb2dQcm9wZXJ0eShnZXRNZXNzYWdlc0RvbWFpbigpLCAibWVzc2FnZXNEb21haW4iLCAiTWVzc2FnZXMgRG9tYWluIik7CisgIGxvZ1Byb3BlcnR5KGdldE1lc3NhZ2VzRGlyZWN0b3J5KCksICJtZXNzYWdlc0RpcmVjdG9yeSIsICJNZXNzYWdlcyBEaXJlY3RvcnkiKTsKKworI2lmZGVmIEVOQUJMRV9TUEVFQ0hfU1VQUE9SVAorICBzZXRBdXRvc3BlYWtUaHJlc2hvbGQoKTsKKyNlbmRpZiAvKiBFTkFCTEVfU1BFRUNIX1NVUFBPUlQgKi8KKworICBlc3RhYmxpc2hQcml2aWxlZ2VzKCk7CisgIHJldHVybiBQUk9HX0VYSVRfU1VDQ0VTUzsKK30KKworc3RhdGljIGludAorc2V0VGV4dFRhYmxlIChjb25zdCBjaGFyICpuYW1lKSB7CisgIGlmICghbmFtZSkgbmFtZSA9ICIiOworICBpZiAoIXJlcGxhY2VUZXh0VGFibGUob3B0X3RhYmxlc0RpcmVjdG9yeSwgbmFtZSkpIHJldHVybiAwOworCisgIGlmICghKm5hbWUpIG5hbWUgPSBURVhUX1RBQkxFOworICBjaGFuZ2VTdHJpbmdTZXR0aW5nKCZvcHRfdGV4dFRhYmxlLCBuYW1lKTsKKworICBhcGkudXBkYXRlUGFyYW1ldGVyKEJSTEFQSV9QQVJBTV9DT01QVVRFUl9CUkFJTExFX1RBQkxFLCAwKTsKKyAgcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQKK3NldFRleHRUYWJsZUZvckxvY2FsZSAodm9pZCkgeworICBjaGFuZ2VTdHJpbmdTZXR0aW5nKCZvcHRfdGV4dFRhYmxlLCAiIik7CisgIGNoYXIgKm5hbWUgPSBnZXRUZXh0VGFibGVGb3JMb2NhbGUob3B0X3RhYmxlc0RpcmVjdG9yeSk7CisKKyAgaWYgKG5hbWUpIHsKKyAgICBsb2dNZXNzYWdlKExPR19ERUJVRywgInVzaW5nIGF1dG9zZWxlY3RlZCB0ZXh0IHRhYmxlOiAlcyIsIG5hbWUpOworICAgIGludCBvayA9IHNldFRleHRUYWJsZShuYW1lKTsKKyAgICBmcmVlKG5hbWUpOworICAgIGlmIChvaykgcmV0dXJuIDE7CisgIH0KKworICByZXR1cm4gMDsKK30KKworaW50CitjaGFuZ2VUZXh0VGFibGUgKGNvbnN0IGNoYXIgKm5hbWUpIHsKKyAgaWYgKHN0cmNtcChuYW1lLCBvcHRpb25PcGVyYW5kX2F1dG9kZXRlY3QpID09IDApIHsKKyAgICByZXR1cm4gc2V0VGV4dFRhYmxlRm9yTG9jYWxlKCk7CisgIH0KKworICByZXR1cm4gc2V0VGV4dFRhYmxlKG5hbWUpOworfQorCitzdGF0aWMgdm9pZAorZXhpdFRleHRUYWJsZSAodm9pZCAqZGF0YSkgeworICBzZXRUZXh0VGFibGUoTlVMTCk7Cit9CisKK3N0YXRpYyBpbnQKK3NldENvbnRyYWN0aW9uVGFibGUgKGNvbnN0IGNoYXIgKm5hbWUpIHsKKyAgaWYgKCFuYW1lKSBuYW1lID0gIiI7CisgIGlmICghcmVwbGFjZUNvbnRyYWN0aW9uVGFibGUob3B0X3RhYmxlc0RpcmVjdG9yeSwgbmFtZSkpIHJldHVybiAwOworCisgIGlmICghKm5hbWUpIG5hbWUgPSBDT05UUkFDVElPTl9UQUJMRTsKKyAgY2hhbmdlU3RyaW5nU2V0dGluZygmb3B0X2NvbnRyYWN0aW9uVGFibGUsIG5hbWUpOworCisgIGFwaS51cGRhdGVQYXJhbWV0ZXIoQlJMQVBJX1BBUkFNX0xJVEVSQVJZX0JSQUlMTEVfVEFCTEUsIDApOworICByZXR1cm4gMTsKK30KKworc3RhdGljIGludAorc2V0Q29udHJhY3Rpb25UYWJsZUZvckxvY2FsZSAodm9pZCkgeworICBjaGFuZ2VTdHJpbmdTZXR0aW5nKCZvcHRfY29udHJhY3Rpb25UYWJsZSwgIiIpOworICBjaGFyICpuYW1lID0gZ2V0Q29udHJhY3Rpb25UYWJsZUZvckxvY2FsZShvcHRfdGFibGVzRGlyZWN0b3J5KTsKKworICBpZiAobmFtZSkgeworICAgIGxvZ01lc3NhZ2UoTE9HX0RFQlVHLCAidXNpbmcgYXV0b3NlbGVjdGVkIGNvbnRyYWN0aW9uIHRhYmxlOiAlcyIsIG5hbWUpOworICAgIGludCBvayA9IHNldENvbnRyYWN0aW9uVGFibGUobmFtZSk7CisgICAgZnJlZShuYW1lKTsKKyAgICBpZiAob2spIHJldHVybiAxOworICB9CisKKyAgcmV0dXJuIDA7Cit9CisKK2ludAorY2hhbmdlQ29udHJhY3Rpb25UYWJsZSAoY29uc3QgY2hhciAqbmFtZSkgeworICBpZiAoc3RyY21wKG5hbWUsIG9wdGlvbk9wZXJhbmRfYXV0b2RldGVjdCkgPT0gMCkgeworICAgIHJldHVybiBzZXRDb250cmFjdGlvblRhYmxlRm9yTG9jYWxlKCk7CisgIH0KKworICByZXR1cm4gc2V0Q29udHJhY3Rpb25UYWJsZShuYW1lKTsKK30KKworc3RhdGljIHZvaWQKK2V4aXRDb250cmFjdGlvblRhYmxlICh2b2lkICpkYXRhKSB7CisgIHNldENvbnRyYWN0aW9uVGFibGUoTlVMTCk7Cit9CisKK3N0YXRpYyB2b2lkCitzZXRUZXh0QW5kQ29udHJhY3Rpb25UYWJsZXMgKHZvaWQpIHsKKyAgaW50IHVzaW5nSW50ZXJuYWxUZXh0VGFibGUgPSAwOworCisgIGlmICgqb3B0X3RleHRUYWJsZSkgeworICAgIGlmIChzdHJjbXAob3B0X3RleHRUYWJsZSwgb3B0aW9uT3BlcmFuZF9hdXRvZGV0ZWN0KSA9PSAwKSB7CisgICAgICBzZXRUZXh0VGFibGVGb3JMb2NhbGUoKTsKKyAgICB9IGVsc2UgaWYgKCFzZXRUZXh0VGFibGUob3B0X3RleHRUYWJsZSkpIHsKKyAgICAgIGNoYW5nZVN0cmluZ1NldHRpbmcoJm9wdF90ZXh0VGFibGUsICIiKTsKKyAgICB9CisgIH0KKworICBpZiAoISpvcHRfdGV4dFRhYmxlKSB7CisgICAgbG9nTWVzc2FnZShMT0dfREVCVUcsICJ1c2luZyBpbnRlcm5hbCB0ZXh0IHRhYmxlOiAlcyIsIFRFWFRfVEFCTEUpOworICAgIGNoYW5nZVN0cmluZ1NldHRpbmcoJm9wdF90ZXh0VGFibGUsIFRFWFRfVEFCTEUpOworICAgIHVzaW5nSW50ZXJuYWxUZXh0VGFibGUgPSAxOworICB9CisKKyAgbG9nUHJvcGVydHkob3B0X3RleHRUYWJsZSwgInRleHRUYWJsZSIsICJUZXh0IFRhYmxlIik7CisgIG9uUHJvZ3JhbUV4aXQoInRleHQtdGFibGUiLCBleGl0VGV4dFRhYmxlLCBOVUxMKTsKKworICBpZiAoKm9wdF9jb250cmFjdGlvblRhYmxlKSB7CisgICAgaWYgKHN0cmNtcChvcHRfY29udHJhY3Rpb25UYWJsZSwgb3B0aW9uT3BlcmFuZF9hdXRvZGV0ZWN0KSA9PSAwKSB7CisgICAgICBpZiAoc2V0Q29udHJhY3Rpb25UYWJsZUZvckxvY2FsZSgpKSB7CisgICAgICAgIGlmICh1c2luZ0ludGVybmFsVGV4dFRhYmxlKSB7CisgICAgICAgICAgaWYgKCFpc0NvbnRyYWN0ZWRCcmFpbGxlKCkpIHsKKyAgICAgICAgICAgIHNldENvbnRyYWN0ZWRCcmFpbGxlKDEpOworICAgICAgICAgICAgbG9nTWVzc2FnZShMT0dfREVCVUcsICJjb250cmFjdGVkIGJyYWlsbGUgaGFzIGJlZW4gZW5hYmxlZCIpOworICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgfQorICAgIH0gZWxzZSBpZiAoIXNldENvbnRyYWN0aW9uVGFibGUob3B0X2NvbnRyYWN0aW9uVGFibGUpKSB7CisgICAgICBjaGFuZ2VTdHJpbmdTZXR0aW5nKCZvcHRfY29udHJhY3Rpb25UYWJsZSwgIiIpOworICAgIH0KKyAgfQorCisgIGlmICghKm9wdF9jb250cmFjdGlvblRhYmxlKSB7CisgICAgaWYgKHNldENvbnRyYWN0aW9uVGFibGUoTlVMTCkpIHsKKyAgICAgIGxvZ01lc3NhZ2UoTE9HX0RFQlVHLCAidXNpbmcgaW50ZXJuYWwgY29udHJhY3Rpb24gdGFibGU6ICVzIiwgQ09OVFJBQ1RJT05fVEFCTEUpOworICAgIH0KKyAgfQorCisgIGxvZ1Byb3BlcnR5KG9wdF9jb250cmFjdGlvblRhYmxlLCAiY29udHJhY3Rpb25UYWJsZSIsICJDb250cmFjdGlvbiBUYWJsZSIpOworICBvblByb2dyYW1FeGl0KCJjb250cmFjdGlvbi10YWJsZSIsIGV4aXRDb250cmFjdGlvblRhYmxlLCBOVUxMKTsKK30KKworaW50CitjaGFuZ2VBdHRyaWJ1dGVzVGFibGUgKGNvbnN0IGNoYXIgKm5hbWUpIHsKKyAgaWYgKCFuYW1lKSBuYW1lID0gIiI7CisgIGlmICghcmVwbGFjZUF0dHJpYnV0ZXNUYWJsZShvcHRfdGFibGVzRGlyZWN0b3J5LCBuYW1lKSkgcmV0dXJuIDA7CisKKyAgaWYgKCEqbmFtZSkgbmFtZSA9IEFUVFJJQlVURVNfVEFCTEU7CisgIGNoYW5nZVN0cmluZ1NldHRpbmcoJm9wdF9hdHRyaWJ1dGVzVGFibGUsIG5hbWUpOworCisgIHJldHVybiAxOworfQorCitzdGF0aWMgdm9pZAorZXhpdEF0dHJpYnV0ZXNUYWJsZSAodm9pZCAqZGF0YSkgeworICBjaGFuZ2VBdHRyaWJ1dGVzVGFibGUoTlVMTCk7Cit9CisKK3N0YXRpYyB2b2lkCitzZXRBdHRyaWJ1dGVzVGFibGUgKHZvaWQpIHsKKyAgaWYgKCpvcHRfYXR0cmlidXRlc1RhYmxlKSB7CisgICAgaWYgKCFjaGFuZ2VBdHRyaWJ1dGVzVGFibGUob3B0X2F0dHJpYnV0ZXNUYWJsZSkpIHsKKyAgICAgIGNoYW5nZVN0cmluZ1NldHRpbmcoJm9wdF9hdHRyaWJ1dGVzVGFibGUsICIiKTsKKyAgICB9CisgIH0KKworICBpZiAoISpvcHRfYXR0cmlidXRlc1RhYmxlKSB7CisgICAgY2hhbmdlU3RyaW5nU2V0dGluZygmb3B0X2F0dHJpYnV0ZXNUYWJsZSwgQVRUUklCVVRFU19UQUJMRSk7CisgIH0KKworICBsb2dQcm9wZXJ0eShvcHRfYXR0cmlidXRlc1RhYmxlLCAiYXR0cmlidXRlc1RhYmxlIiwgIkF0dHJpYnV0ZXMgVGFibGUiKTsKKyAgb25Qcm9ncmFtRXhpdCgiYXR0cmlidXRlcy10YWJsZSIsIGV4aXRBdHRyaWJ1dGVzVGFibGUsIE5VTEwpOworfQorCitzdGF0aWMgS2V5VGFibGVTdGF0ZQoraGFuZGxlS2V5Ym9hcmRFdmVudCAoS2V5R3JvdXAgZ3JvdXAsIEtleU51bWJlciBudW1iZXIsIGludCBwcmVzcykgeworICBpZiAoa2V5Ym9hcmRUYWJsZSkgeworICAgIGlmICghc2NyLnVucmVhZGFibGUpIHsKKyAgICAgIHJldHVybiBwcm9jZXNzS2V5RXZlbnQoa2V5Ym9hcmRUYWJsZSwgZ2V0Q3VycmVudENvbW1hbmRDb250ZXh0KCksIGdyb3VwLCBudW1iZXIsIHByZXNzKTsKKyAgICB9CisKKyAgICByZXNldEtleVRhYmxlKGtleWJvYXJkVGFibGUpOworICB9CisKKyAgcmV0dXJuIEtUU19VTkJPVU5EOworfQorCitzdGF0aWMgaW50CitzdGFydEtleWJvYXJkTW9uaXRvciAodm9pZCkgeworICByZXR1cm4gISEoa2V5Ym9hcmRNb25pdG9yID0gbmV3S2V5Ym9hcmRNb25pdG9yT2JqZWN0KCZrZXlib2FyZFByb3BlcnRpZXMsIGhhbmRsZUtleWJvYXJkRXZlbnQpKTsKK30KKworc3RhdGljIHZvaWQKK3N0b3BLZXlib2FyZE1vbml0b3IgKHZvaWQpIHsKKyAgaWYgKGtleWJvYXJkTW9uaXRvcikgeworICAgIGRlc3Ryb3lLZXlib2FyZE1vbml0b3JPYmplY3Qoa2V5Ym9hcmRNb25pdG9yKTsKKyAgICBrZXlib2FyZE1vbml0b3IgPSBOVUxMOworICB9Cit9CisKK3N0YXRpYyBpbnQKK3ByZXBhcmVLZXlib2FyZE1vbml0b3JBY3Rpdml0eSAodm9pZCAqZGF0YSkgeworICByZXR1cm4gMTsKK30KKworc3RhdGljIGludAorc3RhcnRLZXlib2FyZE1vbml0b3JBY3Rpdml0eSAodm9pZCAqZGF0YSkgeworICByZXR1cm4gc3RhcnRLZXlib2FyZE1vbml0b3IoKTsKK30KKworc3RhdGljIHZvaWQKK3N0b3BLZXlib2FyZE1vbml0b3JBY3Rpdml0eSAodm9pZCAqZGF0YSkgeworICBzdG9wS2V5Ym9hcmRNb25pdG9yKCk7Cit9CisKK3N0YXRpYyBjb25zdCBBY3Rpdml0eU1ldGhvZHMga2V5Ym9hcmRNb25pdG9yQWN0aXZpdHlNZXRob2RzID0geworICAuYWN0aXZpdHlOYW1lID0gImtleWJvYXJkLW1vbml0b3IiLAorICAucmV0cnlJbnRlcnZhbCA9IEtFWUJPQVJEX01PTklUT1JfU1RBUlRfUkVUUllfSU5URVJWQUwsCisKKyAgLnByZXBhcmUgPSBwcmVwYXJlS2V5Ym9hcmRNb25pdG9yQWN0aXZpdHksCisgIC5zdGFydCA9IHN0YXJ0S2V5Ym9hcmRNb25pdG9yQWN0aXZpdHksCisgIC5zdG9wID0gc3RvcEtleWJvYXJkTW9uaXRvckFjdGl2aXR5Cit9OworCitzdGF0aWMgQWN0aXZpdHlPYmplY3QgKmtleWJvYXJkTW9uaXRvckFjdGl2aXR5ID0gTlVMTDsKKworc3RhdGljIHZvaWQKK2V4aXRLZXlib2FyZE1vbml0b3IgKHZvaWQgKmRhdGEpIHsKKyAgaWYgKGtleWJvYXJkTW9uaXRvckFjdGl2aXR5KSB7CisgICAgZGVzdHJveUFjdGl2aXR5KGtleWJvYXJkTW9uaXRvckFjdGl2aXR5KTsKKyAgICBrZXlib2FyZE1vbml0b3JBY3Rpdml0eSA9IE5VTEw7CisgIH0KK30KKworc3RhdGljIEFjdGl2aXR5T2JqZWN0ICoKK2dldEtleWJvYXJkTW9uaXRvckFjdGl2aXR5IChpbnQgYWxsb2NhdGUpIHsKKyAgaWYgKCFrZXlib2FyZE1vbml0b3JBY3Rpdml0eSkgeworICAgIGlmIChhbGxvY2F0ZSkgeworICAgICAgaWYgKCEoa2V5Ym9hcmRNb25pdG9yQWN0aXZpdHkgPSBuZXdBY3Rpdml0eSgma2V5Ym9hcmRNb25pdG9yQWN0aXZpdHlNZXRob2RzLCBOVUxMKSkpIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICB9CisKKyAgICAgIG9uUHJvZ3JhbUV4aXQoImtleWJvYXJkLW1vbml0b3IiLCBleGl0S2V5Ym9hcmRNb25pdG9yLCBOVUxMKTsKKyAgICB9CisgIH0KKworICByZXR1cm4ga2V5Ym9hcmRNb25pdG9yQWN0aXZpdHk7Cit9CisKK3N0YXRpYyB2b2lkCitlbmFibGVLZXlib2FyZE1vbml0b3IgKHZvaWQpIHsKKyAgQWN0aXZpdHlPYmplY3QgKmFjdGl2aXR5ID0gZ2V0S2V5Ym9hcmRNb25pdG9yQWN0aXZpdHkoMSk7CisgIGlmIChhY3Rpdml0eSkgc3RhcnRBY3Rpdml0eShhY3Rpdml0eSk7Cit9CisKK3N0YXRpYyB2b2lkCitkaXNhYmxlS2V5Ym9hcmRNb25pdG9yICh2b2lkKSB7CisgIEFjdGl2aXR5T2JqZWN0ICphY3Rpdml0eSA9IGdldEtleWJvYXJkTW9uaXRvckFjdGl2aXR5KDApOworICBpZiAoYWN0aXZpdHkpIHN0b3BBY3Rpdml0eShhY3Rpdml0eSk7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgYnJhaWxsZUhlbHBQYWdlTnVtYmVyID0gMDsKK3N0YXRpYyB1bnNpZ25lZCBpbnQga2V5Ym9hcmRIZWxwUGFnZU51bWJlciA9IDA7CisKK3N0YXRpYyBpbnQKK2VuYWJsZUhlbHBQYWdlICh1bnNpZ25lZCBpbnQgKnBhZ2VOdW1iZXIpIHsKKyAgaWYgKCEqcGFnZU51bWJlcikgeworICAgIGlmICghY29uc3RydWN0SGVscFNjcmVlbigpKSByZXR1cm4gMDsKKyAgICBpZiAoISgqcGFnZU51bWJlciA9IGFkZEhlbHBQYWdlKCkpKSByZXR1cm4gMDsKKyAgfQorCisgIHJldHVybiBzZXRIZWxwUGFnZU51bWJlcigqcGFnZU51bWJlcik7Cit9CisKK3N0YXRpYyBpbnQKK2VuYWJsZUJyYWlsbGVIZWxwUGFnZSAodm9pZCkgeworICByZXR1cm4gZW5hYmxlSGVscFBhZ2UoJmJyYWlsbGVIZWxwUGFnZU51bWJlcik7Cit9CisKK3N0YXRpYyBpbnQKK2VuYWJsZUtleWJvYXJkSGVscFBhZ2UgKHZvaWQpIHsKKyAgcmV0dXJuIGVuYWJsZUhlbHBQYWdlKCZrZXlib2FyZEhlbHBQYWdlTnVtYmVyKTsKK30KKworc3RhdGljIHZvaWQKK2Rpc2FibGVIZWxwUGFnZSAodW5zaWduZWQgaW50IHBhZ2VOdW1iZXIpIHsKKyAgaWYgKHBhZ2VOdW1iZXIpIHsKKyAgICBpZiAoc2V0SGVscFBhZ2VOdW1iZXIocGFnZU51bWJlcikpIHsKKyAgICAgIGNsZWFySGVscFBhZ2UoKTsKKyAgICB9CisgIH0KK30KKworc3RhdGljIHZvaWQKK2Rpc2FibGVCcmFpbGxlSGVscFBhZ2UgKHZvaWQpIHsKKyAgZGlzYWJsZUhlbHBQYWdlKGJyYWlsbGVIZWxwUGFnZU51bWJlcik7Cit9CisKK3N0YXRpYyB2b2lkCitkaXNhYmxlS2V5Ym9hcmRIZWxwUGFnZSAodm9pZCkgeworICBkaXNhYmxlSGVscFBhZ2Uoa2V5Ym9hcmRIZWxwUGFnZU51bWJlcik7Cit9CisKK3N0YXRpYyBpbnQKK2hhbmRsZVdjaGFySGVscExpbmUgKGNvbnN0IHdjaGFyX3QgKmxpbmUsIHZvaWQgKmRhdGEgVU5VU0VEKSB7CisgIHJldHVybiBhZGRIZWxwTGluZShsaW5lKTsKK30KKworc3RhdGljIGludAoraGFuZGxlVXRmOEhlbHBMaW5lIChjb25zdCBMaW5lSGFuZGxlclBhcmFtZXRlcnMgKnBhcmFtZXRlcnMpIHsKKyAgY29uc3QgY2hhciAqdXRmOCA9IHBhcmFtZXRlcnMtPmxpbmUudGV4dDsKKyAgc2l6ZV90IHNpemUgPSBwYXJhbWV0ZXJzLT5saW5lLmxlbmd0aCArIDE7CisgIHdjaGFyX3QgY2hhcmFjdGVyc1tzaXplXTsKKyAgd2NoYXJfdCAqY2hhcmFjdGVyID0gY2hhcmFjdGVyczsKKworICBjb252ZXJ0VXRmOFRvV2NoYXJzKCZ1dGY4LCAmY2hhcmFjdGVyLCBzaXplKTsKKyAgcmV0dXJuIGhhbmRsZVdjaGFySGVscExpbmUoY2hhcmFjdGVycywgcGFyYW1ldGVycy0+ZGF0YSk7Cit9CisKK3N0YXRpYyBpbnQKK2xvYWRIZWxwRmlsZSAoY29uc3QgY2hhciAqZmlsZSkgeworICBpbnQgbG9hZGVkID0gMDsKKyAgRklMRSAqc3RyZWFtOworCisgIGlmICgoc3RyZWFtID0gb3BlbkRhdGFGaWxlKGZpbGUsICJyIiwgMCkpKSB7CisgICAgaWYgKHByb2Nlc3NMaW5lcyhzdHJlYW0sIGhhbmRsZVV0ZjhIZWxwTGluZSwgTlVMTCkpIGxvYWRlZCA9IDE7CisKKyAgICBmY2xvc2Uoc3RyZWFtKTsKKyAgfQorCisgIHJldHVybiBsb2FkZWQ7Cit9CisKK3N0YXRpYyBjaGFyICoKK21ha2VCcmFpbGxlS2V5VGFibGVQYXRoICh2b2lkKSB7CisgIHJldHVybiBtYWtlSW5wdXRUYWJsZVBhdGgob3B0X3RhYmxlc0RpcmVjdG9yeSwgYnJhaWxsZS0+ZGVmaW5pdGlvbi5jb2RlLCBicmwua2V5QmluZGluZ3MpOworfQorCitzdGF0aWMgdm9pZAorbWFrZUJyYWlsbGVIZWxwUGFnZSAoY29uc3QgY2hhciAqa2V5VGFibGVQYXRoKSB7CisgIGlmIChlbmFibGVCcmFpbGxlSGVscFBhZ2UoKSkgeworICAgIGlmIChicmwua2V5VGFibGUpIHsKKyAgICAgIGxpc3RLZXlUYWJsZShicmwua2V5VGFibGUsIE5VTEwsIGhhbmRsZVdjaGFySGVscExpbmUsIE5VTEwpOworICAgIH0gZWxzZSB7CisgICAgICBjaGFyICprZXlIZWxwUGF0aCA9IHJlcGxhY2VGaWxlRXh0ZW5zaW9uKGtleVRhYmxlUGF0aCwgS0VZX0hFTFBfRVhURU5TSU9OKTsKKworICAgICAgaWYgKGtleUhlbHBQYXRoKSB7CisgICAgICAgIGlmIChsb2FkSGVscEZpbGUoa2V5SGVscFBhdGgpKSB7CisgICAgICAgICAgbG9nTWVzc2FnZShMT0dfSU5GTywgIiVzOiAlcyIsIGdldHRleHQoIktleSBIZWxwIiksIGtleUhlbHBQYXRoKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICBsb2dNZXNzYWdlKExPR19XQVJOSU5HLCAiJXM6ICVzIiwgZ2V0dGV4dCgiY2Fubm90IG9wZW4ga2V5IGhlbHAiKSwga2V5SGVscFBhdGgpOworICAgICAgICB9CisKKyAgICAgICAgZnJlZShrZXlIZWxwUGF0aCk7CisgICAgICB9CisgICAgfQorCisgICAgaWYgKCFnZXRIZWxwTGluZUNvdW50KCkpIHsKKyAgICAgIGFkZEhlbHBMaW5lKFdTX0MoImhlbHAgbm90IGF2YWlsYWJsZSIpKTsKKyAgICAgIG1lc3NhZ2UoTlVMTCwgZ2V0dGV4dCgibm8ga2V5IGJpbmRpbmdzIiksIDApOworICAgIH0KKyAgfQorfQorCitzdGF0aWMgdm9pZAorbWFrZUtleWJvYXJkSGVscFBhZ2UgKHZvaWQpIHsKKyAgaWYgKGVuYWJsZUtleWJvYXJkSGVscFBhZ2UoKSkgeworICAgIGxpc3RLZXlUYWJsZShrZXlib2FyZFRhYmxlLCBOVUxMLCBoYW5kbGVXY2hhckhlbHBMaW5lLCBOVUxMKTsKKyAgfQorfQorCitzdGF0aWMgdm9pZAorZXhpdEtleWJvYXJkVGFibGUgKHZvaWQgKmRhdGEpIHsKKyAgaWYgKGtleWJvYXJkVGFibGUpIHsKKyAgICBkZXN0cm95S2V5VGFibGUoa2V5Ym9hcmRUYWJsZSk7CisgICAga2V5Ym9hcmRUYWJsZSA9IE5VTEw7CisgIH0KKworICBkaXNhYmxlS2V5Ym9hcmRIZWxwUGFnZSgpOworfQorCitpbnQKK2NoYW5nZUtleWJvYXJkVGFibGUgKGNvbnN0IGNoYXIgKm5hbWUpIHsKKyAgS2V5VGFibGUgKnRhYmxlID0gTlVMTDsKKworICBpZiAoISpuYW1lKSBuYW1lID0gIiI7CisgIGlmIChzdHJjbXAobmFtZSwgb3B0aW9uT3BlcmFuZF9vZmYpID09IDApIG5hbWUgPSAiIjsKKworICBpZiAoKm5hbWUpIHsKKyAgICBjaGFyICpwYXRoID0gbWFrZUtleWJvYXJkVGFibGVQYXRoKG9wdF90YWJsZXNEaXJlY3RvcnksIG5hbWUpOworCisgICAgaWYgKHBhdGgpIHsKKyAgICAgIGxvZ01lc3NhZ2UoTE9HX0RFQlVHLCAiY29tcGlsaW5nIGtleWJvYXJkIHRhYmxlOiAlcyIsIHBhdGgpOworCisgICAgICBpZiAoISh0YWJsZSA9IGNvbXBpbGVLZXlUYWJsZShwYXRoLCBLRVlfTkFNRV9UQUJMRVMoa2V5Ym9hcmQpKSkpIHsKKyAgICAgICAgbG9nTWVzc2FnZShMT0dfRVJSLCAiJXM6ICVzIiwgZ2V0dGV4dCgiY2Fubm90IGNvbXBpbGUga2V5Ym9hcmQgdGFibGUiKSwgcGF0aCk7CisgICAgICB9CisKKyAgICAgIGZyZWUocGF0aCk7CisgICAgfQorCisgICAgaWYgKCF0YWJsZSkgcmV0dXJuIDA7CisgIH0KKworICBpZiAoa2V5Ym9hcmRUYWJsZSkgeworICAgIGRpc2FibGVLZXlib2FyZEhlbHBQYWdlKCk7CisgICAgZGlzYWJsZUtleWJvYXJkTW9uaXRvcigpOworCisgICAgZGVzdHJveUtleVRhYmxlKGtleWJvYXJkVGFibGUpOworICAgIGtleWJvYXJkVGFibGUgPSBOVUxMOworICB9CisKKyAgaWYgKHRhYmxlKSB7CisgICAgc2V0S2V5VGFibGVMb2dMYWJlbCh0YWJsZSwgImtiZCIpOworICAgIHNldExvZ0tleUV2ZW50c0ZsYWcodGFibGUsICZMT0dfQ0FURUdPUllfRkxBRyhLRVlCT0FSRF9LRVlTKSk7CisKKyAgICBrZXlib2FyZFRhYmxlID0gdGFibGU7CisgICAgZW5hYmxlS2V5Ym9hcmRNb25pdG9yKCk7CisgICAgbWFrZUtleWJvYXJkSGVscFBhZ2UoKTsKKyAgfQorCisgIGlmICghKm5hbWUpIG5hbWUgPSBvcHRpb25PcGVyYW5kX29mZjsKKyAgbG9nTWVzc2FnZShMT0dfREVCVUcsICJrZXlib2FyZCB0YWJsZSBjaGFuZ2VkOiAlcyAtPiAlcyIsIG9wdF9rZXlib2FyZFRhYmxlLCBuYW1lKTsKKworICBjaGFuZ2VTdHJpbmdTZXR0aW5nKCZvcHRfa2V5Ym9hcmRUYWJsZSwgbmFtZSk7CisgIHJldHVybiAxOworfQorCitzdGF0aWMgdm9pZAorc2V0S2V5Ym9hcmRUYWJsZSAodm9pZCkgeworICBwYXJzZUtleWJvYXJkUHJvcGVydGllcygma2V5Ym9hcmRQcm9wZXJ0aWVzLCBvcHRfa2V5Ym9hcmRQcm9wZXJ0aWVzKTsKKyAgb25Qcm9ncmFtRXhpdCgia2V5Ym9hcmQtdGFibGUiLCBleGl0S2V5Ym9hcmRUYWJsZSwgTlVMTCk7CisgIGNoYW5nZUtleWJvYXJkVGFibGUob3B0X2tleWJvYXJkVGFibGUpOworICBsb2dQcm9wZXJ0eShvcHRfa2V5Ym9hcmRUYWJsZSwgImtleWJvYXJkVGFibGUiLCAiS2V5Ym9hcmQgVGFibGUiKTsKK30KKworaW50CitoYXZlU3RhdHVzQ2VsbHMgKHZvaWQpIHsKKyAgcmV0dXJuIGJybC5zdGF0dXNDb2x1bW5zID4gMDsKK30KKworc3RhdGljIHZvaWQKK2JyYWlsbGVXaW5kb3dSZWNvbmZpZ3VyZWQgKHVuc2lnbmVkIGludCByb3dzLCB1bnNpZ25lZCBpbnQgY29sdW1ucykgeworICB0ZXh0U3RhcnQgPSAwOworICB0ZXh0Q291bnQgPSBjb2x1bW5zOworICBzdGF0dXNTdGFydCA9IDA7CisgIHN0YXR1c0NvdW50ID0gMDsKKworICBpZiAoISh0ZXh0TWF4aW1pemVkIHx8IGhhdmVTdGF0dXNDZWxscygpKSkgeworICAgIHVuc2lnbmVkIGludCBzZXBhcmF0b3JXaWR0aCA9IChwcmVmcy5zdGF0dXNTZXBhcmF0b3IgPT0gc3NOb25lKT8gMDogMTsKKyAgICB1bnNpZ25lZCBpbnQgcmVzZXJ2ZWQgPSAxICsgc2VwYXJhdG9yV2lkdGg7CisKKyAgICBpZiAoYnJsLnRleHRDb2x1bW5zID4gcmVzZXJ2ZWQpIHsKKyAgICAgIHVuc2lnbmVkIGludCBzdGF0dXNXaWR0aCA9IHByZWZzLnN0YXR1c0NvdW50OworCisgICAgICBpZiAoIXN0YXR1c1dpZHRoKSBzdGF0dXNXaWR0aCA9IGdldFN0YXR1c0ZpZWxkc0xlbmd0aChwcmVmcy5zdGF0dXNGaWVsZHMpOworICAgICAgc3RhdHVzV2lkdGggPSBNSU4oc3RhdHVzV2lkdGgsIGJybC50ZXh0Q29sdW1ucy1yZXNlcnZlZCk7CisKKyAgICAgIGlmIChzdGF0dXNXaWR0aCA+IDApIHsKKyAgICAgICAgc3dpdGNoIChwcmVmcy5zdGF0dXNQb3NpdGlvbikgeworICAgICAgICAgIGNhc2Ugc3BMZWZ0OgorICAgICAgICAgICAgc3RhdHVzU3RhcnQgPSAwOworICAgICAgICAgICAgc3RhdHVzQ291bnQgPSBzdGF0dXNXaWR0aDsKKyAgICAgICAgICAgIHRleHRTdGFydCA9IHN0YXR1c0NvdW50ICsgc2VwYXJhdG9yV2lkdGg7CisgICAgICAgICAgICB0ZXh0Q291bnQgPSBjb2x1bW5zIC0gdGV4dFN0YXJ0OworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICBjYXNlIHNwUmlnaHQ6CisgICAgICAgICAgICBzdGF0dXNDb3VudCA9IHN0YXR1c1dpZHRoOworICAgICAgICAgICAgc3RhdHVzU3RhcnQgPSBjb2x1bW5zIC0gc3RhdHVzQ291bnQ7CisgICAgICAgICAgICB0ZXh0Q291bnQgPSBzdGF0dXNTdGFydCAtIHNlcGFyYXRvcldpZHRoOworICAgICAgICAgICAgdGV4dFN0YXJ0ID0gMDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICB9CisgICAgfQorICB9CisKKyAgbG9nTWVzc2FnZShMT0dfREVCVUcsCisgICAgInJlZ2lvbnM6IHRleHQ9JXUuJXUgc3RhdHVzPSV1LiV1IiwKKyAgICB0ZXh0U3RhcnQsIHRleHRDb3VudCwKKyAgICBzdGF0dXNTdGFydCwgc3RhdHVzQ291bnQKKyAgKTsKKworICBmdWxsV2luZG93U2hpZnQgPSBNQVgodGV4dENvdW50LXByZWZzLmJyYWlsbGVXaW5kb3dPdmVybGFwLCAxKTsKKyAgaGFsZldpbmRvd1NoaWZ0ID0gdGV4dENvdW50IC8gMjsKKyAgdmVydGljYWxXaW5kb3dTaGlmdCA9IChyb3dzID4gMSk/IHJvd3M6IDU7CisKKyAgbG9nTWVzc2FnZShMT0dfREVCVUcsCisgICAgInNoaWZ0czogZnVsbD0ldSBoYWxmPSV1IHZlcnRpY2FsPSV1IiwKKyAgICBmdWxsV2luZG93U2hpZnQsIGhhbGZXaW5kb3dTaGlmdCwgdmVydGljYWxXaW5kb3dTaGlmdAorICApOworfQorCit2b2lkCityZWNvbmZpZ3VyZUJyYWlsbGVXaW5kb3cgKHZvaWQpIHsKKyAgYnJhaWxsZVdpbmRvd1JlY29uZmlndXJlZChicmwudGV4dFJvd3MsIGJybC50ZXh0Q29sdW1ucyk7Cit9CisKK3N0YXRpYyB2b2lkCithcHBseUJyYWlsbGVQcmVmZXJlbmNlcyAodm9pZCkgeworICByZWNvbmZpZ3VyZUJyYWlsbGVXaW5kb3coKTsKKworICBzZXRCcmFpbGxlRmlybW5lc3MoJmJybCwgcHJlZnMuYnJhaWxsZUZpcm1uZXNzKTsKKyAgc2V0VG91Y2hTZW5zaXRpdml0eSgmYnJsLCBwcmVmcy50b3VjaFNlbnNpdGl2aXR5KTsKKworICBzZXRBdXRvcmVwZWF0UHJvcGVydGllcygmYnJsLCBwcmVmcy5hdXRvcmVwZWF0RW5hYmxlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgUFJFRlMyTVNFQ1MocHJlZnMubG9uZ1ByZXNzVGltZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgIFBSRUZTMk1TRUNTKHByZWZzLmF1dG9yZXBlYXRJbnRlcnZhbCkpOworCisgIGlmIChicmwua2V5VGFibGUpIHsKKyAgICBzZXRLZXlBdXRvcmVsZWFzZVRpbWUoYnJsLmtleVRhYmxlLCBwcmVmcy5hdXRvcmVsZWFzZVRpbWUpOworICB9Cit9CisKKyNpZmRlZiBFTkFCTEVfU1BFRUNIX1NVUFBPUlQKK3N0YXRpYyB2b2lkCithcHBseVNwZWVjaFByZWZlcmVuY2VzICh2b2lkKSB7CisgIHNldFNwZWVjaFZvbHVtZSgmc3BrLCBwcmVmcy5zcGVlY2hWb2x1bWUsIDApOworICBzZXRTcGVlY2hSYXRlKCZzcGssIHByZWZzLnNwZWVjaFJhdGUsIDApOworICBzZXRTcGVlY2hQaXRjaCgmc3BrLCBwcmVmcy5zcGVlY2hQaXRjaCwgMCk7CisgIHNldFNwZWVjaFB1bmN0dWF0aW9uKCZzcGssIHByZWZzLnNwZWVjaFB1bmN0dWF0aW9uLCAwKTsKK30KKyNlbmRpZiAvKiBFTkFCTEVfU1BFRUNIX1NVUFBPUlQgKi8KKworc3RhdGljIHZvaWQKK2FwcGx5QWxsUHJlZmVyZW5jZXMgKHZvaWQpIHsKKyAgc2V0Q29uc29sZUJlbGxNb25pdG9yaW5nKHByZWZzLmNvbnNvbGVCZWxsQWxlcnQpOworICBzZXRMZWRNb25pdG9yaW5nKHByZWZzLmtleWJvYXJkTGVkQWxlcnRzKTsKKyAgdHVuZVNldERldmljZShwcmVmcy50dW5lRGV2aWNlKTsKKyAgYXBwbHlCcmFpbGxlUHJlZmVyZW5jZXMoKTsKKworI2lmZGVmIEVOQUJMRV9TUEVFQ0hfU1VQUE9SVAorICBhcHBseVNwZWVjaFByZWZlcmVuY2VzKCk7CisjZW5kaWYgLyogRU5BQkxFX1NQRUVDSF9TVVBQT1JUICovCit9CisKK3ZvaWQKK3NldFByZWZlcmVuY2VzIChjb25zdCBQcmVmZXJlbmNlU2V0dGluZ3MgKm5ld1ByZWZlcmVuY2VzKSB7CisgIHByZWZzID0gKm5ld1ByZWZlcmVuY2VzOworICBhcHBseUFsbFByZWZlcmVuY2VzKCk7Cit9CisKK3N0YXRpYyB2b2lkCitlbnN1cmVTdGF0dXNGaWVsZHMgKHZvaWQpIHsKKyAgY29uc3QgdW5zaWduZWQgY2hhciAqZmllbGRzID0gYnJhaWxsZS0+c3RhdHVzRmllbGRzOworICB1bnNpZ25lZCBpbnQgY291bnQgPSBicmwuc3RhdHVzQ29sdW1ucyAqIGJybC5zdGF0dXNSb3dzOworCisgIGlmICghZmllbGRzICYmIGNvdW50KSB7CisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgZmllbGRzMVtdID0geworICAgICAgc2ZXaW5kb3dSb3csIHNmRW5kCisgICAgfTsKKworICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGZpZWxkczJbXSA9IHsKKyAgICAgIHNmV2luZG93Um93LCBzZkN1cnNvclJvdywgc2ZFbmQKKyAgICB9OworCisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgZmllbGRzM1tdID0geworICAgICAgc2ZXaW5kb3dSb3csIHNmQ3Vyc29yUm93LCBzZkN1cnNvckNvbHVtbiwgc2ZFbmQKKyAgICB9OworCisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgZmllbGRzNFtdID0geworICAgICAgc2ZXaW5kb3dDb29yZGluYXRlczIsIHNmQ3Vyc29yQ29vcmRpbmF0ZXMyLCBzZkVuZAorICAgIH07CisKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBmaWVsZHM1W10gPSB7CisgICAgICBzZldpbmRvd0Nvb3JkaW5hdGVzMiwgc2ZDdXJzb3JDb29yZGluYXRlczIsIHNmU3RhdGVEb3RzLCBzZkVuZAorICAgIH07CisKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBmaWVsZHM2W10gPSB7CisgICAgICBzZldpbmRvd0Nvb3JkaW5hdGVzMiwgc2ZDdXJzb3JDb29yZGluYXRlczIsIHNmU3RhdGVEb3RzLCBzZlNjcmVlbk51bWJlciwKKyAgICAgIHNmRW5kCisgICAgfTsKKworICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGZpZWxkczdbXSA9IHsKKyAgICAgIHNmV2luZG93Q29vcmRpbmF0ZXMyLCBzZkN1cnNvckNvb3JkaW5hdGVzMiwgc2ZTdGF0ZURvdHMsIHNmVGltZSwKKyAgICAgIHNmRW5kCisgICAgfTsKKworICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyICpjb25zdCBmaWVsZHNUYWJsZVtdID0geworICAgICAgZmllbGRzMSwgZmllbGRzMiwgZmllbGRzMywgZmllbGRzNCwgZmllbGRzNSwgZmllbGRzNiwgZmllbGRzNworICAgIH07CisKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBmaWVsZHNDb3VudCA9IEFSUkFZX0NPVU5UKGZpZWxkc1RhYmxlKTsKKyAgICBpZiAoY291bnQgPiBmaWVsZHNDb3VudCkgY291bnQgPSBmaWVsZHNDb3VudDsKKyAgICBmaWVsZHMgPSBmaWVsZHNUYWJsZVtjb3VudCAtIDFdOworICB9CisKKyAgc2V0U3RhdHVzRmllbGRzKGZpZWxkcyk7Cit9CisKK3N0YXRpYyB2b2lkCitzZXRQcmVmZXJlbmNlT3ZlcnJpZGVzICh2b2lkKSB7CisgIGludCBjb3VudDsKKyAgY2hhciAqKnNldHRpbmdzID0gc3BsaXRTdHJpbmcob3B0X292ZXJyaWRlUHJlZmVyZW5jZXMsIFBBUkFNRVRFUl9TRVBBUkFUT1JfQ0hBUkFDVEVSLCAmY291bnQpOworCisgIGlmIChzZXR0aW5ncykgeworICAgIGNoYXIgKipzZXR0aW5nID0gc2V0dGluZ3M7CisgICAgY2hhciAqKmVuZCA9IHNldHRpbmcgKyBjb3VudDsKKworICAgIHdoaWxlIChzZXR0aW5nIDwgZW5kKSB7CisgICAgICBzZXRQcmVmZXJlbmNlKCpzZXR0aW5nKTsKKyAgICAgIHNldHRpbmcgKz0gMTsKKyAgICB9CisKKyAgICBkZWFsbG9jYXRlU3RyaW5ncyhzZXR0aW5ncyk7CisgIH0KK30KKworc3RhdGljIHZvaWQKK2ZpbmlzaFByZWZlcmVuY2VzTG9hZCAodm9pZCkgeworICBzZXRQcmVmZXJlbmNlT3ZlcnJpZGVzKCk7CisgIGFwcGx5QWxsUHJlZmVyZW5jZXMoKTsKK30KKworaW50Citsb2FkUHJlZmVyZW5jZXMgKGludCByZXNldCkgeworICBpbnQgb2sgPSAwOworICBpbnQgZm91bmQgPSAwOworCisgIGlmIChyZXNldCkgeworICAgIHJlc2V0UHJlZmVyZW5jZXMoKTsKKyAgfSBlbHNlIHsKKyAgICB7CisgICAgICBjaGFyICpwYXRoID0gbWFrZVByZWZlcmVuY2VzRmlsZVBhdGgob3B0X3ByZWZlcmVuY2VzRmlsZSk7CisKKyAgICAgIGlmIChwYXRoKSB7CisgICAgICAgIGlmICh0ZXN0RmlsZVBhdGgocGF0aCkpIHsKKyAgICAgICAgICBmb3VuZCA9IDE7CisgICAgICAgICAgaWYgKGxvYWRQcmVmZXJlbmNlc0ZpbGUocGF0aCkpIG9rID0gMTsKKyAgICAgICAgICBvbGRQcmVmZXJlbmNlc0VuYWJsZWQgPSAwOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgIGxvZ01lc3NhZ2UoTE9HX0RFQlVHLCAicHJlZmVyZW5jZXMgZmlsZSBub3QgZm91bmQ6ICVzIiwgcGF0aCk7CisgICAgICAgIH0KKworICAgICAgICBmcmVlKHBhdGgpOworICAgICAgfQorICAgIH0KKworICAgIGlmIChvbGRQcmVmZXJlbmNlc0VuYWJsZWQpIHsKKyAgICAgIGNvbnN0IGNoYXIgKnBhdGggPSBvbGRQcmVmZXJlbmNlc0ZpbGU7CisKKyAgICAgIGlmIChwYXRoKSB7CisgICAgICAgIGlmICh0ZXN0RmlsZVBhdGgocGF0aCkpIHsKKyAgICAgICAgICBmb3VuZCA9IDE7CisgICAgICAgICAgaWYgKGxvYWRQcmVmZXJlbmNlc0ZpbGUocGF0aCkpIG9rID0gMTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICBsb2dNZXNzYWdlKExPR19ERUJVRywgIm9sZCBwcmVmZXJlbmNlcyBmaWxlIG5vdCBmb3VuZDogJXMiLCBwYXRoKTsKKyAgICAgICAgfQorICAgICAgfQorICAgIH0KKyAgfQorCisgIGlmICghZm91bmQpIHsKKyAgICBjaGFyICpwYXRoID0gbWFrZVBhdGgob3B0X3RhYmxlc0RpcmVjdG9yeSwgImRlZmF1bHQucHJlZnMiKTsKKworICAgIGlmIChwYXRoKSB7CisgICAgICBpZiAobG9hZFByZWZlcmVuY2VzRmlsZShwYXRoKSkgb2sgPSAxOworICAgICAgZnJlZShwYXRoKTsKKyAgICB9CisgIH0KKworICBmaW5pc2hQcmVmZXJlbmNlc0xvYWQoKTsKKyAgcmV0dXJuIG9rOworfQorCitpbnQgCitzYXZlUHJlZmVyZW5jZXMgKHZvaWQpIHsKKyAgaW50IG9rID0gMDsKKyAgY2hhciAqcGF0aCA9IG1ha2VQcmVmZXJlbmNlc0ZpbGVQYXRoKG9wdF9wcmVmZXJlbmNlc0ZpbGUpOworCisgIGlmIChwYXRoKSB7CisgICAgaWYgKHNhdmVQcmVmZXJlbmNlc0ZpbGUocGF0aCkpIHsKKyAgICAgIG9rID0gMTsKKyAgICAgIG9sZFByZWZlcmVuY2VzRW5hYmxlZCA9IDA7CisgICAgfQorCisgICAgZnJlZShwYXRoKTsKKyAgfQorCisgIHJldHVybiBvazsKK30KKworI2lmZGVmIEVOQUJMRV9BUEkKK3N0YXRpYyB2b2lkCitleGl0QXBpU2VydmVyICh2b2lkICpkYXRhKSB7CisgIGlmIChhcGkuaXNTZXJ2ZXJMaW5rZWQoKSkgYXBpLnVubGlua1NlcnZlcigpOworICBpZiAoYXBpLmlzU2VydmVyUnVubmluZygpKSBhcGkuc3RvcFNlcnZlcigpOworCisgIGlmIChhcGlQYXJhbWV0ZXJzKSB7CisgICAgZGVhbGxvY2F0ZVN0cmluZ3MoYXBpUGFyYW1ldGVycyk7CisgICAgYXBpUGFyYW1ldGVycyA9IE5VTEw7CisgIH0KK30KKyNlbmRpZiAvKiBFTkFCTEVfQVBJICovCisKK3N0YXRpYyB2b2lkCitzdGFydEFwaVNlcnZlciAodm9pZCkgeworI2lmZGVmIEVOQUJMRV9BUEkKKyAgaWYgKCEob3B0X25vQXBpIHx8IGFwaS5pc1NlcnZlclJ1bm5pbmcoKSkpIHsKKyAgICBjb25zdCBjaGFyICpjb25zdCAqcGFyYW1ldGVycyA9IGFwaS5nZXRTZXJ2ZXJQYXJhbWV0ZXJzKCk7CisKKyAgICBhcGlQYXJhbWV0ZXJzID0gZ2V0UGFyYW1ldGVycyhwYXJhbWV0ZXJzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0X2FwaVBhcmFtZXRlcnMpOworCisgICAgaWYgKGFwaVBhcmFtZXRlcnMpIHsKKyAgICAgIGFwaS5sb2dTZXJ2ZXJJZGVudGl0eSgwKTsKKyAgICAgIGxvZ1BhcmFtZXRlcnMocGFyYW1ldGVycywgYXBpUGFyYW1ldGVycywgIkFQSSBQYXJhbWV0ZXIiKTsKKworICAgICAgaWYgKCFvcHRfdmVyaWZ5KSB7CisgICAgICAgIGlmIChhcGkuc3RhcnRTZXJ2ZXIoYXBpUGFyYW1ldGVycykpIHsKKyAgICAgICAgICBvblByb2dyYW1FeGl0KCJhcGktc2VydmVyIiwgZXhpdEFwaVNlcnZlciwgTlVMTCk7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9CisgIH0KKyNlbmRpZiAvKiBFTkFCTEVfQVBJICovCit9CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgY29uc3QgY2hhciAqZHJpdmVyVHlwZTsKKyAgY29uc3QgY2hhciAqY29uc3QgKnJlcXVlc3RlZERyaXZlcnM7CisgIGNvbnN0IGNoYXIgKmNvbnN0ICphdXRvZGV0ZWN0YWJsZURyaXZlcnM7CisgIGNvbnN0IGNoYXIgKiAoKmdldERlZmF1bHREcml2ZXIpICh2b2lkKTsKKyAgaW50ICgqaGF2ZURyaXZlcikgKGNvbnN0IGNoYXIgKmNvZGUpOworICBpbnQgKCppbml0aWFsaXplRHJpdmVyKSAoY29uc3QgY2hhciAqY29kZSwgaW50IHZlcmlmeSk7Cit9IERyaXZlckFjdGl2YXRpb25EYXRhOworCitzdGF0aWMgaW50CithY3RpdmF0ZURyaXZlciAoY29uc3QgRHJpdmVyQWN0aXZhdGlvbkRhdGEgKmRhdGEsIGludCB2ZXJpZnkpIHsKKyAgaW50IG9uZURyaXZlciA9IGRhdGEtPnJlcXVlc3RlZERyaXZlcnNbMF0gJiYgIWRhdGEtPnJlcXVlc3RlZERyaXZlcnNbMV07CisgIGludCBhdXRvZGV0ZWN0ID0gb25lRHJpdmVyICYmIChzdHJjbXAoZGF0YS0+cmVxdWVzdGVkRHJpdmVyc1swXSwgb3B0aW9uT3BlcmFuZF9hdXRvZGV0ZWN0KSA9PSAwKTsKKyAgY29uc3QgY2hhciAqY29uc3QgZGVmYXVsdERyaXZlcnNbXSA9IHtkYXRhLT5nZXREZWZhdWx0RHJpdmVyKCksIE5VTEx9OworICBjb25zdCBjaGFyICpjb25zdCAqZHJpdmVyOworCisgIGlmICghb25lRHJpdmVyIHx8IGF1dG9kZXRlY3QpIHZlcmlmeSA9IDA7CisKKyAgaWYgKCFhdXRvZGV0ZWN0KSB7CisgICAgZHJpdmVyID0gZGF0YS0+cmVxdWVzdGVkRHJpdmVyczsKKyAgfSBlbHNlIGlmIChkZWZhdWx0RHJpdmVyc1swXSkgeworICAgIGRyaXZlciA9IGRlZmF1bHREcml2ZXJzOworICB9IGVsc2UgaWYgKCooZHJpdmVyID0gZGF0YS0+YXV0b2RldGVjdGFibGVEcml2ZXJzKSkgeworICAgIGxvZ01lc3NhZ2UoTE9HX0RFQlVHLCAicGVyZm9ybWluZyAlcyBkcml2ZXIgYXV0b2RldGVjdGlvbiIsIGRhdGEtPmRyaXZlclR5cGUpOworICB9IGVsc2UgeworICAgIGxvZ01lc3NhZ2UoTE9HX0RFQlVHLCAibm8gYXV0b2RldGVjdGFibGUgJXMgZHJpdmVycyIsIGRhdGEtPmRyaXZlclR5cGUpOworICB9CisKKyAgaWYgKCEqZHJpdmVyKSB7CisgICAgZHJpdmVyID0gZmFsbGJhY2tCcmFpbGxlRHJpdmVyczsKKyAgICBhdXRvZGV0ZWN0ID0gMDsKKyAgfQorCisgIHdoaWxlICgqZHJpdmVyKSB7CisgICAgaWYgKCFhdXRvZGV0ZWN0IHx8IGRhdGEtPmhhdmVEcml2ZXIoKmRyaXZlcikpIHsKKyAgICAgIGxvZ01lc3NhZ2UoTE9HX0RFQlVHLCAiY2hlY2tpbmcgZm9yICVzIGRyaXZlcjogJXMiLCBkYXRhLT5kcml2ZXJUeXBlLCAqZHJpdmVyKTsKKyAgICAgIGlmIChkYXRhLT5pbml0aWFsaXplRHJpdmVyKCpkcml2ZXIsIHZlcmlmeSkpIHJldHVybiAxOworICAgIH0KKworICAgICsrZHJpdmVyOworICB9CisKKyAgbG9nTWVzc2FnZShMT0dfREVCVUcsICIlcyBkcml2ZXIgbm90IGZvdW5kIiwgZGF0YS0+ZHJpdmVyVHlwZSk7CisgIHJldHVybiAwOworfQorCitzdGF0aWMgdm9pZAordW5sb2FkRHJpdmVyT2JqZWN0ICh2b2lkICoqb2JqZWN0KSB7CisjaWZkZWYgRU5BQkxFX1NIQVJFRF9PQkpFQ1RTCisgIGlmICgqb2JqZWN0KSB7CisgICAgdW5sb2FkU2hhcmVkT2JqZWN0KCpvYmplY3QpOworICAgICpvYmplY3QgPSBOVUxMOworICB9CisjZW5kaWYgLyogRU5BQkxFX1NIQVJFRF9PQkpFQ1RTICovCit9CisKK3ZvaWQKK2ZvcmdldERldmljZXMgKHZvaWQpIHsKKyAgdXNiRm9yZ2V0RGV2aWNlcygpOworICBidGhGb3JnZXREZXZpY2VzKCk7Cit9CisKK3N0YXRpYyB2b2lkCitpbml0aWFsaXplQnJhaWxsZURpc3BsYXkgKHZvaWQpIHsKKyAgY29uc3RydWN0QnJhaWxsZURpc3BsYXkoJmJybCk7CisgIGJybC5idWZmZXJSZXNpemVkID0gJmJyYWlsbGVXaW5kb3dSZWNvbmZpZ3VyZWQ7Cit9CisKK3N0YXRpYyBMb2NrRGVzY3JpcHRvciAqCitnZXRCcmFpbGxlRHJpdmVyTG9jayAodm9pZCkgeworICBzdGF0aWMgTG9ja0Rlc2NyaXB0b3IgKmxvY2sgPSBOVUxMOworICByZXR1cm4gZ2V0TG9ja0Rlc2NyaXB0b3IoJmxvY2ssICJicmFpbGxlLWRyaXZlciIpOworfQorCit2b2lkCitsb2NrQnJhaWxsZURyaXZlciAodm9pZCkgeworICBvYnRhaW5FeGNsdXNpdmVMb2NrKGdldEJyYWlsbGVEcml2ZXJMb2NrKCkpOworfQorCit2b2lkCit1bmxvY2tCcmFpbGxlRHJpdmVyICh2b2lkKSB7CisgIHJlbGVhc2VMb2NrKGdldEJyYWlsbGVEcml2ZXJMb2NrKCkpOworfQorCitpbnQKK2lzQnJhaWxsZURyaXZlckNvbnN0cnVjdGVkICh2b2lkKSB7CisgIHJldHVybiBicmFpbGxlRHJpdmVyQ29uc3RydWN0ZWQ7Cit9CisKK3N0YXRpYyB2b2lkCitzZXRCcmFpbGxlRHJpdmVyQ29uc3RydWN0ZWQgKGludCB5ZXMpIHsKKyAgbG9ja0JyYWlsbGVEcml2ZXIoKTsKKyAgYnJhaWxsZURyaXZlckNvbnN0cnVjdGVkID0geWVzOworICB1bmxvY2tCcmFpbGxlRHJpdmVyKCk7CisKKyAgaWYgKGJyYWlsbGVEcml2ZXJDb25zdHJ1Y3RlZCkgeworICAgIGFubm91bmNlQnJhaWxsZU9ubGluZSgpOworICB9IGVsc2UgeworICAgIGFubm91bmNlQnJhaWxsZU9mZmxpbmUoKTsKKyAgfQorCisgIHN0YXRpYyBjb25zdCBicmxhcGlfcGFyYW1fdCBwYXJhbWV0ZXJzW10gPSB7CisgICAgQlJMQVBJX1BBUkFNX0RSSVZFUl9DT0RFLAorICAgIEJSTEFQSV9QQVJBTV9EUklWRVJfTkFNRSwKKyAgICBCUkxBUElfUEFSQU1fRFJJVkVSX1ZFUlNJT04sCisgICAgQlJMQVBJX1BBUkFNX0RFVklDRV9NT0RFTCwKKyAgICBCUkxBUElfUEFSQU1fREVWSUNFX0NFTExfU0laRSwKKyAgICBCUkxBUElfUEFSQU1fRElTUExBWV9TSVpFLAorICAgIEJSTEFQSV9QQVJBTV9ERVZJQ0VfSURFTlRJRklFUiwKKyAgICBCUkxBUElfUEFSQU1fREVWSUNFX1NQRUVELAorICAgIEJSTEFQSV9QQVJBTV9ERVZJQ0VfS0VZX0NPREVTLAorICAgIEJSTEFQSV9QQVJBTV9CT1VORF9DT01NQU5EX0NPREVTLAorICB9OworCisgIGNvbnN0IGJybGFwaV9wYXJhbV90ICpwYXJhbWV0ZXIgPSBwYXJhbWV0ZXJzOworICBjb25zdCBicmxhcGlfcGFyYW1fdCAqZW5kID0gcGFyYW1ldGVyICsgQVJSQVlfQ09VTlQocGFyYW1ldGVycyk7CisKKyAgd2hpbGUgKHBhcmFtZXRlciA8IGVuZCkgeworICAgIGFwaS51cGRhdGVQYXJhbWV0ZXIoKnBhcmFtZXRlcisrLCAwKTsKKyAgfQorfQorCitpbnQKK2NvbnN0cnVjdEJyYWlsbGVEcml2ZXIgKHZvaWQpIHsKKyAgaW5pdGlhbGl6ZUJyYWlsbGVEaXNwbGF5KCk7CisKKyAgaWYgKGJyYWlsbGUtPmNvbnN0cnVjdCgmYnJsLCBicmFpbGxlRHJpdmVyUGFyYW1ldGVycywgYnJhaWxsZURldmljZSkpIHsKKyAgICBpZiAoZW5zdXJlQnJhaWxsZUJ1ZmZlcigmYnJsLCBMT0dfSU5GTykpIHsKKyAgICAgIGlmIChicmwua2V5QmluZGluZ3MpIHsKKyAgICAgICAgY2hhciAqa2V5VGFibGVQYXRoID0gbWFrZUJyYWlsbGVLZXlUYWJsZVBhdGgoKTsKKworICAgICAgICBsb2dNZXNzYWdlKExPR19JTkZPLCAiJXM6ICVzIiwgZ2V0dGV4dCgiS2V5IEJpbmRpbmdzIiksIGJybC5rZXlCaW5kaW5ncyk7CisKKyAgICAgICAgaWYgKGtleVRhYmxlUGF0aCkgeworICAgICAgICAgIGlmIChicmwua2V5TmFtZXMpIHsKKyAgICAgICAgICAgIGlmICgoYnJsLmtleVRhYmxlID0gY29tcGlsZUtleVRhYmxlKGtleVRhYmxlUGF0aCwgYnJsLmtleU5hbWVzKSkpIHsKKyAgICAgICAgICAgICAgbG9nTWVzc2FnZShMT0dfSU5GTywgIiVzOiAlcyIsIGdldHRleHQoIktleSBUYWJsZSIpLCBrZXlUYWJsZVBhdGgpOworCisgICAgICAgICAgICAgIHNldEtleVRhYmxlTG9nTGFiZWwoYnJsLmtleVRhYmxlLCAiYnJsIik7CisgICAgICAgICAgICAgIHNldExvZ0tleUV2ZW50c0ZsYWcoYnJsLmtleVRhYmxlLCAmTE9HX0NBVEVHT1JZX0ZMQUcoQlJBSUxMRV9LRVlTKSk7CisgICAgICAgICAgICAgIHNldEtleWJvYXJkRW5hYmxlZEZsYWcoYnJsLmtleVRhYmxlLCAmcHJlZnMuYnJhaWxsZUtleWJvYXJkRW5hYmxlZCk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICBsb2dNZXNzYWdlKExPR19XQVJOSU5HLCAiJXM6ICVzIiwgZ2V0dGV4dCgiY2Fubm90IGNvbXBpbGUga2V5IHRhYmxlIiksIGtleVRhYmxlUGF0aCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgfQorCisgICAgICAgICAgaWYgKGhhdmVCcmFpbGxlRGlzcGxheSgpKSBtYWtlQnJhaWxsZUhlbHBQYWdlKGtleVRhYmxlUGF0aCk7CisgICAgICAgICAgZnJlZShrZXlUYWJsZVBhdGgpOworICAgICAgICB9CisgICAgICB9CisKKyAgICAgIHNldEJyYWlsbGVEcml2ZXJDb25zdHJ1Y3RlZCgxKTsKKyAgICAgIHN0YXJ0QnJhaWxsZUlucHV0KCk7CisgICAgICByZXR1cm4gMTsKKyAgICB9CisKKyAgICBicmFpbGxlLT5kZXN0cnVjdCgmYnJsKTsKKyAgfSBlbHNlIHsKKyAgICBsb2dNZXNzYWdlKExPR19ERUJVRywgIiVzOiAlcyAtPiAlcyIsCisgICAgICAgICAgICAgICAiYnJhaWxsZSBkcml2ZXIgaW5pdGlhbGl6YXRpb24gZmFpbGVkIiwKKyAgICAgICAgICAgICAgIGJyYWlsbGUtPmRlZmluaXRpb24uY29kZSwgYnJhaWxsZURldmljZSk7CisgIH0KKworICByZXR1cm4gMDsKK30KKwordm9pZAorZGVzdHJ1Y3RCcmFpbGxlRHJpdmVyICh2b2lkKSB7CisgIHN0b3BCcmFpbGxlSW5wdXQoKTsKKyAgZHJhaW5CcmFpbGxlT3V0cHV0KCZicmwsIDApOworCisgIHNldEJyYWlsbGVEcml2ZXJDb25zdHJ1Y3RlZCgwKTsKKyAgYnJhaWxsZS0+ZGVzdHJ1Y3QoJmJybCk7CisKKyAgZGlzYWJsZUJyYWlsbGVIZWxwUGFnZSgpOworICBkZXN0cnVjdEJyYWlsbGVEaXNwbGF5KCZicmwpOworfQorCitpbnQKK2lzQnJhaWxsZU9ubGluZSAodm9pZCkgeworICByZXR1cm4gaXNCcmFpbGxlRHJpdmVyQ29uc3RydWN0ZWQoKSAmJiAhYnJsLmlzT2ZmbGluZTsKK30KKworc3RhdGljIGludAoraW5pdGlhbGl6ZUJyYWlsbGVEcml2ZXIgKGNvbnN0IGNoYXIgKmNvZGUsIGludCB2ZXJpZnkpIHsKKyAgaWYgKChicmFpbGxlID0gbG9hZEJyYWlsbGVEcml2ZXIoY29kZSwgJmJyYWlsbGVPYmplY3QsIG9wdF9kcml2ZXJzRGlyZWN0b3J5KSkpIHsKKyAgICBicmFpbGxlRHJpdmVyUGFyYW1ldGVycyA9IGdldFBhcmFtZXRlcnMoYnJhaWxsZS0+cGFyYW1ldGVycywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJhaWxsZS0+ZGVmaW5pdGlvbi5jb2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmFpbGxlUGFyYW1ldGVycyk7CisKKyAgICBpZiAoYnJhaWxsZURyaXZlclBhcmFtZXRlcnMpIHsKKyAgICAgIGludCBjb25zdHJ1Y3RlZCA9IHZlcmlmeTsKKworICAgICAgaWYgKCFjb25zdHJ1Y3RlZCkgeworICAgICAgICBsb2dNZXNzYWdlKExPR19ERUJVRywgImluaXRpYWxpemluZyBicmFpbGxlIGRyaXZlcjogJXMgLT4gJXMiLAorICAgICAgICAgICAgICAgICAgIGJyYWlsbGUtPmRlZmluaXRpb24uY29kZSwgYnJhaWxsZURldmljZSk7CisKKyAgICAgICAgaWYgKGNvbnN0cnVjdEJyYWlsbGVEcml2ZXIoKSkgeworICAgICAgICAgIGJyYWlsbGVEcml2ZXIgPSBicmFpbGxlOworICAgICAgICAgIGNvbnN0cnVjdGVkID0gMTsKKyAgICAgICAgfQorICAgICAgfQorCisgICAgICBpZiAoY29uc3RydWN0ZWQpIHsKKyAgICAgICAgaWRlbnRpZnlCcmFpbGxlRHJpdmVyKGJyYWlsbGUsIDApOworICAgICAgICBsb2dNZXNzYWdlKExPR19JTkZPLCAiJXM6ICVzIiwgZ2V0dGV4dCgiQnJhaWxsZSBEZXZpY2UiKSwgYnJhaWxsZURldmljZSk7CisKKyAgICAgICAgbG9nUGFyYW1ldGVycygKKyAgICAgICAgICBicmFpbGxlLT5wYXJhbWV0ZXJzLAorICAgICAgICAgIGJyYWlsbGVEcml2ZXJQYXJhbWV0ZXJzLAorICAgICAgICAgICJCcmFpbGxlIFBhcmFtZXRlciIKKyAgICAgICAgKTsKKworICAgICAgICB7CisgICAgICAgICAgY29uc3QgY2hhciAqc3RyaW5nc1tdID0geworICAgICAgICAgICAgQ09ORklHVVJBVElPTl9ESVJFQ1RPUlksICIvIiwKKyAgICAgICAgICAgIFBBQ0tBR0VfVEFSTkFNRSwgIi0iLAorICAgICAgICAgICAgYnJhaWxsZS0+ZGVmaW5pdGlvbi5jb2RlLCAiLnByZWZzIgorICAgICAgICAgIH07CisKKyAgICAgICAgICBvbGRQcmVmZXJlbmNlc0ZpbGUgPSBqb2luU3RyaW5ncyhzdHJpbmdzLCBBUlJBWV9DT1VOVChzdHJpbmdzKSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAob2xkUHJlZmVyZW5jZXNGaWxlKSB7CisgICAgICAgICAgbG9nTWVzc2FnZShMT0dfSU5GTywgIiVzOiAlcyIsIGdldHRleHQoIk9sZCBQcmVmZXJlbmNlcyBGaWxlIiksIG9sZFByZWZlcmVuY2VzRmlsZSk7CisKKyAgICAgICAgICBhcGkubGlua1NlcnZlcigpOworCisgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgbG9nTWFsbG9jRXJyb3IoKTsKKyAgICAgICAgfQorICAgICAgfQorCisgICAgICBkZWFsbG9jYXRlU3RyaW5ncyhicmFpbGxlRHJpdmVyUGFyYW1ldGVycyk7CisgICAgICBicmFpbGxlRHJpdmVyUGFyYW1ldGVycyA9IE5VTEw7CisgICAgfQorCisgICAgdW5sb2FkRHJpdmVyT2JqZWN0KCZicmFpbGxlT2JqZWN0KTsKKyAgfSBlbHNlIHsKKyAgICBsb2dNZXNzYWdlKExPR19FUlIsICIlczogJXMiLCBnZXR0ZXh0KCJicmFpbGxlIGRyaXZlciBub3QgbG9hZGFibGUiKSwgY29kZSk7CisgIH0KKworICBicmFpbGxlID0gJm5vQnJhaWxsZTsKKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK2FjdGl2YXRlQnJhaWxsZURyaXZlciAoaW50IHZlcmlmeSkgeworICBpbnQgb25lRGV2aWNlID0gYnJhaWxsZURldmljZXNbMF0gJiYgIWJyYWlsbGVEZXZpY2VzWzFdOworICBjb25zdCBjaGFyICpjb25zdCAqZGV2aWNlID0gKGNvbnN0IGNoYXIgKmNvbnN0ICopYnJhaWxsZURldmljZXM7CisKKyAgaWYgKCFvbmVEZXZpY2UpIHZlcmlmeSA9IDA7CisKKyAgd2hpbGUgKCpkZXZpY2UpIHsKKyAgICBjb25zdCBjaGFyICpjb25zdCAqYXV0b2RldGVjdGFibGVEcml2ZXJzID0gTlVMTDsKKworICAgIGJyYWlsbGVEZXZpY2UgPSAqZGV2aWNlOworICAgIGxvZ01lc3NhZ2UoTE9HX0RFQlVHLCAiY2hlY2tpbmcgYnJhaWxsZSBkZXZpY2U6ICVzIiwgYnJhaWxsZURldmljZSk7CisKKyAgICB7CisgICAgICBjb25zdCBjaGFyICpkZXYgPSBicmFpbGxlRGV2aWNlOworICAgICAgY29uc3QgR2lvUHVibGljUHJvcGVydGllcyAqcHJvcGVydGllcyA9IGdpb0dldFB1YmxpY1Byb3BlcnRpZXMoJmRldik7CisKKyAgICAgIGlmIChwcm9wZXJ0aWVzKSB7CisgICAgICAgIGxvZ01lc3NhZ2UoTE9HX0RFQlVHLCAiYnJhaWxsZSBkZXZpY2UgdHlwZTogJXMiLCBwcm9wZXJ0aWVzLT50eXBlLm5hbWUpOworCisgICAgICAgIHN3aXRjaCAocHJvcGVydGllcy0+dHlwZS5pZGVudGlmaWVyKSB7CisgICAgICAgICAgY2FzZSBHSU9fVFlQRV9TRVJJQUw6IHsKKyAgICAgICAgICAgIGF1dG9kZXRlY3RhYmxlRHJpdmVycyA9IGF1dG9kZXRlY3RhYmxlQnJhaWxsZURyaXZlcnNfc2VyaWFsOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgfQorCisgICAgICAgICAgY2FzZSBHSU9fVFlQRV9VU0I6IHsKKyAgICAgICAgICAgIGF1dG9kZXRlY3RhYmxlRHJpdmVycyA9IGF1dG9kZXRlY3RhYmxlQnJhaWxsZURyaXZlcnNfVVNCOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgfQorCisgICAgICAgICAgY2FzZSBHSU9fVFlQRV9CTFVFVE9PVEg6IHsKKyAgICAgICAgICAgIGlmICghKGF1dG9kZXRlY3RhYmxlRHJpdmVycyA9IGJ0aEdldERyaXZlckNvZGVzKGRldiwgQkxVRVRPT1RIX0RFVklDRV9OQU1FX09CVEFJTl9USU1FT1VUKSkpIHsKKyAgICAgICAgICAgICAgYXV0b2RldGVjdGFibGVEcml2ZXJzID0gYXV0b2RldGVjdGFibGVCcmFpbGxlRHJpdmVyc19CbHVldG9vdGg7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIH0KKworICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgfSBlbHNlIHsKKyAgICAgICAgbG9nTWVzc2FnZShMT0dfREVCVUcsICJ1bnJlY29nbml6ZWQgYnJhaWxsZSBkZXZpY2UgdHlwZSIpOworICAgICAgfQorICAgIH0KKworICAgIGlmICghYXV0b2RldGVjdGFibGVEcml2ZXJzKSB7CisgICAgICBzdGF0aWMgY29uc3QgY2hhciAqbm9Ecml2ZXJzW10gPSB7TlVMTH07CisgICAgICBhdXRvZGV0ZWN0YWJsZURyaXZlcnMgPSBub0RyaXZlcnM7CisgICAgfQorCisgICAgeworICAgICAgY29uc3QgRHJpdmVyQWN0aXZhdGlvbkRhdGEgZGF0YSA9IHsKKyAgICAgICAgLmRyaXZlclR5cGUgPSAiYnJhaWxsZSIsCisgICAgICAgIC5yZXF1ZXN0ZWREcml2ZXJzID0gKGNvbnN0IGNoYXIgKmNvbnN0ICopYnJhaWxsZURyaXZlcnMsCisgICAgICAgIC5hdXRvZGV0ZWN0YWJsZURyaXZlcnMgPSBhdXRvZGV0ZWN0YWJsZURyaXZlcnMsCisgICAgICAgIC5nZXREZWZhdWx0RHJpdmVyID0gZ2V0RGVmYXVsdEJyYWlsbGVEcml2ZXIsCisgICAgICAgIC5oYXZlRHJpdmVyID0gaGF2ZUJyYWlsbGVEcml2ZXIsCisgICAgICAgIC5pbml0aWFsaXplRHJpdmVyID0gaW5pdGlhbGl6ZUJyYWlsbGVEcml2ZXIKKyAgICAgIH07CisgICAgICBpZiAoYWN0aXZhdGVEcml2ZXIoJmRhdGEsIHZlcmlmeSkpIHJldHVybiAxOworICAgIH0KKworICAgIGRldmljZSArPSAxOworICB9CisKKyAgYnJhaWxsZURldmljZSA9IE5VTEw7CisgIHJldHVybiAwOworfQorCitzdGF0aWMgdm9pZAorZGVhY3RpdmF0ZUJyYWlsbGVEcml2ZXIgKHZvaWQpIHsKKyAgaWYgKGJyYWlsbGVEcml2ZXIpIHsKKyAgICBhcGkudW5saW5rU2VydmVyKCk7CisgICAgaWYgKGJyYWlsbGVEcml2ZXJDb25zdHJ1Y3RlZCkgZGVzdHJ1Y3RCcmFpbGxlRHJpdmVyKCk7CisgICAgYnJhaWxsZSA9ICZub0JyYWlsbGU7CisgICAgYnJhaWxsZURldmljZSA9IE5VTEw7CisgICAgYnJhaWxsZURyaXZlciA9IE5VTEw7CisgIH0KKworICB1bmxvYWREcml2ZXJPYmplY3QoJmJyYWlsbGVPYmplY3QpOworICBzdG9wQWxsQmxpbmtEZXNjcmlwdG9ycygpOworCisgIGlmIChicmFpbGxlRHJpdmVyUGFyYW1ldGVycykgeworICAgIGRlYWxsb2NhdGVTdHJpbmdzKGJyYWlsbGVEcml2ZXJQYXJhbWV0ZXJzKTsKKyAgICBicmFpbGxlRHJpdmVyUGFyYW1ldGVycyA9IE5VTEw7CisgIH0KKworICBpZiAob2xkUHJlZmVyZW5jZXNGaWxlKSB7CisgICAgZnJlZShvbGRQcmVmZXJlbmNlc0ZpbGUpOworICAgIG9sZFByZWZlcmVuY2VzRmlsZSA9IE5VTEw7CisgIH0KK30KKworc3RhdGljIGludAorc3RhcnRCcmFpbGxlRHJpdmVyICh2b2lkKSB7CisgIGZvcmdldERldmljZXMoKTsKKworICBpZiAoYWN0aXZhdGVCcmFpbGxlRHJpdmVyKDApKSB7CisgICAgaWYgKG9sZFByZWZlcmVuY2VzRW5hYmxlZCkgeworICAgICAgbG9hZFByZWZlcmVuY2VzRmlsZShvbGRQcmVmZXJlbmNlc0ZpbGUpOworICAgICAgZmluaXNoUHJlZmVyZW5jZXNMb2FkKCk7CisgICAgfSBlbHNlIHsKKyAgICAgIGFwcGx5QnJhaWxsZVByZWZlcmVuY2VzKCk7CisgICAgfQorCisgICAgZW5zdXJlU3RhdHVzRmllbGRzKCk7CisgICAgYWxlcnQoQUxFUlRfQlJBSUxMRV9PTik7CisKKyAgICBzZXMtPndpbnggPSAwOworICAgIHRyYWNrU2NyZWVuQ3Vyc29yKDEpOworCisgICAgaWYgKGNsZWFyU3RhdHVzQ2VsbHMoJmJybCkpIHsKKyAgICAgIGlmIChvcHRfcXVpZXQpIHsKKyAgICAgICAgc2NoZWR1bGVVcGRhdGUoImJyYWlsbGUgZHJpdmVyIHN0YXJ0Iik7CisgICAgICAgIHJldHVybiAxOworICAgICAgfQorCisgICAgICB7CisgICAgICAgIGNoYXIgYmFubmVyWzBYMTAwXTsKKyAgICAgICAgY29uc3QgY2hhciAqdGV4dCA9IG9wdF9zdGFydE1lc3NhZ2U7CisKKyAgICAgICAgaWYgKCp0ZXh0KSB7CisgICAgICAgICAgdGV4dCA9IGdldHRleHQodGV4dCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgbWFrZVByb2dyYW1CYW5uZXIoYmFubmVyLCBzaXplb2YoYmFubmVyKSwgMCk7CisgICAgICAgICAgdGV4dCA9IGJhbm5lcjsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChtZXNzYWdlKE5VTEwsIHRleHQsIE1TR19TSUxFTlQpKSByZXR1cm4gMTsKKyAgICAgIH0KKyAgICB9CisKKyAgICBkZWFjdGl2YXRlQnJhaWxsZURyaXZlcigpOworICB9CisKKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkCitzdG9wQnJhaWxsZURyaXZlciAodm9pZCkgeworICBkZWFjdGl2YXRlQnJhaWxsZURyaXZlcigpOworICBhbGVydChBTEVSVF9CUkFJTExFX09GRik7Cit9CisKK3N0YXRpYyBpbnQKK3ByZXBhcmVCcmFpbGxlRHJpdmVyQWN0aXZpdHkgKHZvaWQgKmRhdGEpIHsKKyAgaW5pdGlhbGl6ZUJyYWlsbGVEaXNwbGF5KCk7CisgIGVuc3VyZUJyYWlsbGVCdWZmZXIoJmJybCwgTE9HX0RFQlVHKTsKKyAgcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQKK3N0YXJ0QnJhaWxsZURyaXZlckFjdGl2aXR5ICh2b2lkICpkYXRhKSB7CisgIHJldHVybiBzdGFydEJyYWlsbGVEcml2ZXIoKTsKK30KKworc3RhdGljIHZvaWQKK3N0b3BCcmFpbGxlRHJpdmVyQWN0aXZpdHkgKHZvaWQgKmRhdGEpIHsKKyAgc3RvcEJyYWlsbGVEcml2ZXIoKTsKK30KKworc3RhdGljIGNvbnN0IEFjdGl2aXR5TWV0aG9kcyBicmFpbGxlRHJpdmVyQWN0aXZpdHlNZXRob2RzID0geworICAuYWN0aXZpdHlOYW1lID0gImJyYWlsbGUtZHJpdmVyIiwKKyAgLnJldHJ5SW50ZXJ2YWwgPSBCUkFJTExFX0RSSVZFUl9TVEFSVF9SRVRSWV9JTlRFUlZBTCwKKworICAucHJlcGFyZSA9IHByZXBhcmVCcmFpbGxlRHJpdmVyQWN0aXZpdHksCisgIC5zdGFydCA9IHN0YXJ0QnJhaWxsZURyaXZlckFjdGl2aXR5LAorICAuc3RvcCA9IHN0b3BCcmFpbGxlRHJpdmVyQWN0aXZpdHkKK307CisKK3N0YXRpYyBBY3Rpdml0eU9iamVjdCAqYnJhaWxsZURyaXZlckFjdGl2aXR5ID0gTlVMTDsKKworc3RhdGljIHZvaWQKK3dyaXRlQnJhaWxsZU1lc3NhZ2UgKGNvbnN0IGNoYXIgKnRleHQpIHsKKyAgY2xlYXJTdGF0dXNDZWxscygmYnJsKTsKKyAgbWVzc2FnZShOVUxMLCB0ZXh0LCAoTVNHX05PREVMQVkgfCBNU0dfU0lMRU5UIHwgTVNHX1NZTkMpKTsKKyAgYnJsLm5vRGlzcGxheSA9IDE7Cit9CisKK3N0YXRpYyB2b2lkCitleGl0QnJhaWxsZURyaXZlciAodm9pZCAqZGF0YSkgeworICBpZiAoYnJhaWxsZURyaXZlckNvbnN0cnVjdGVkKSB7CisgICAgY29uc3QgY2hhciAqdGV4dCA9IG9wdF9zdG9wTWVzc2FnZTsKKworICAgIGlmICgqdGV4dCkgeworICAgICAgdGV4dCA9IGdldHRleHQodGV4dCk7CisgICAgfSBlbHNlIHsKKyAgICAgIHRleHQgPSBnZXR0ZXh0KCJCUkxUVFkgc3RvcHBlZCIpOworICAgIH0KKworICAgIHdyaXRlQnJhaWxsZU1lc3NhZ2UodGV4dCk7CisgIH0KKworICBpZiAoYnJhaWxsZURyaXZlckFjdGl2aXR5KSB7CisgICAgZGVzdHJveUFjdGl2aXR5KGJyYWlsbGVEcml2ZXJBY3Rpdml0eSk7CisgICAgYnJhaWxsZURyaXZlckFjdGl2aXR5ID0gTlVMTDsKKyAgfQorCisgIGZvcmdldERldmljZXMoKTsKK30KKworc3RhdGljIEFjdGl2aXR5T2JqZWN0ICoKK2dldEJyYWlsbGVEcml2ZXJBY3Rpdml0eSAoaW50IGFsbG9jYXRlKSB7CisgIGlmICghYnJhaWxsZURyaXZlckFjdGl2aXR5KSB7CisgICAgaWYgKGFsbG9jYXRlKSB7CisgICAgICBpZiAoIShicmFpbGxlRHJpdmVyQWN0aXZpdHkgPSBuZXdBY3Rpdml0eSgmYnJhaWxsZURyaXZlckFjdGl2aXR5TWV0aG9kcywgTlVMTCkpKSB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgICAgfQorCisgICAgICBvblByb2dyYW1FeGl0KCJicmFpbGxlLWRyaXZlciIsIGV4aXRCcmFpbGxlRHJpdmVyLCBOVUxMKTsKKyAgICB9CisgIH0KKworICByZXR1cm4gYnJhaWxsZURyaXZlckFjdGl2aXR5OworfQorCitzdGF0aWMgaW50IGNhbkVuYWJsZUJyYWlsbGVEcml2ZXIgPSAxOworCit2b2lkCitlbmFibGVCcmFpbGxlRHJpdmVyICh2b2lkKSB7CisgIGlmIChjYW5FbmFibGVCcmFpbGxlRHJpdmVyKSB7CisgICAgQWN0aXZpdHlPYmplY3QgKmFjdGl2aXR5ID0gZ2V0QnJhaWxsZURyaXZlckFjdGl2aXR5KDEpOworICAgIGlmIChhY3Rpdml0eSkgc3RhcnRBY3Rpdml0eShhY3Rpdml0eSk7CisgIH0KK30KKwordm9pZAorZGlzYWJsZUJyYWlsbGVEcml2ZXIgKGNvbnN0IGNoYXIgKnJlYXNvbikgeworICBBY3Rpdml0eU9iamVjdCAqYWN0aXZpdHkgPSBnZXRCcmFpbGxlRHJpdmVyQWN0aXZpdHkoMCk7CisKKyAgaWYgKGFjdGl2aXR5KSB7CisgICAgaWYgKHJlYXNvbikgd3JpdGVCcmFpbGxlTWVzc2FnZShyZWFzb24pOworICAgIHN0b3BBY3Rpdml0eShhY3Rpdml0eSk7CisgIH0KK30KKwordm9pZAorc2V0QnJhaWxsZU9uICh2b2lkKSB7CisgIGlmICghY2FuRW5hYmxlQnJhaWxsZURyaXZlcikgeworICAgIGNhbkVuYWJsZUJyYWlsbGVEcml2ZXIgPSAxOworICAgIGVuYWJsZUJyYWlsbGVEcml2ZXIoKTsKKyAgfQorfQorCit2b2lkCitzZXRCcmFpbGxlT2ZmIChjb25zdCBjaGFyICptZXNzYWdlKSB7CisgIGNhbkVuYWJsZUJyYWlsbGVEcml2ZXIgPSAwOworICBkaXNhYmxlQnJhaWxsZURyaXZlcihtZXNzYWdlKTsKK30KKwordm9pZAorcmVzdGFydEJyYWlsbGVEcml2ZXIgKHZvaWQpIHsKKyAgZGlzYWJsZUJyYWlsbGVEcml2ZXIoZ2V0dGV4dCgiYnJhaWxsZSBkcml2ZXIgcmVzdGFydGluZyIpKTsKKyAgYXdhaXRBY3Rpdml0eVN0b3BwZWQoYnJhaWxsZURyaXZlckFjdGl2aXR5KTsKKyAgYnJsLmhhc0ZhaWxlZCA9IDA7CisKKyAgbG9nTWVzc2FnZShMT0dfSU5GTywgZ2V0dGV4dCgicmVpbml0aWFsaXppbmcgYnJhaWxsZSBkcml2ZXIiKSk7CisgIGVuYWJsZUJyYWlsbGVEcml2ZXIoKTsKK30KKworc3RhdGljIHZvaWQKK2V4aXRCcmFpbGxlRGF0YSAodm9pZCAqZGF0YSkgeworICBpZiAoYnJhaWxsZURyaXZlcnMpIHsKKyAgICBkZWFsbG9jYXRlU3RyaW5ncyhicmFpbGxlRHJpdmVycyk7CisgICAgYnJhaWxsZURyaXZlcnMgPSBOVUxMOworICB9CisKKyAgaWYgKGJyYWlsbGVQYXJhbWV0ZXJzKSB7CisgICAgZnJlZShicmFpbGxlUGFyYW1ldGVycyk7CisgICAgYnJhaWxsZVBhcmFtZXRlcnMgPSBOVUxMOworICB9CisKKyAgaWYgKGJyYWlsbGVEZXZpY2VzKSB7CisgICAgZGVhbGxvY2F0ZVN0cmluZ3MoYnJhaWxsZURldmljZXMpOworICAgIGJyYWlsbGVEZXZpY2VzID0gTlVMTDsKKyAgfQorfQorCitpbnQKK2NoYW5nZUJyYWlsbGVEcml2ZXIgKGNvbnN0IGNoYXIgKmRyaXZlcikgeworICByZXR1cm4gY2hhbmdlTGlzdFNldHRpbmcoJmJyYWlsbGVEcml2ZXJzLCAmb3B0X2JyYWlsbGVEcml2ZXIsIGRyaXZlcik7Cit9CisKK2ludAorY2hhbmdlQnJhaWxsZVBhcmFtZXRlcnMgKGNvbnN0IGNoYXIgKnBhcmFtZXRlcnMpIHsKKyAgaWYgKCFwYXJhbWV0ZXJzKSBwYXJhbWV0ZXJzID0gIiI7CisgIHJldHVybiBjaGFuZ2VTdHJpbmdTZXR0aW5nKCZicmFpbGxlUGFyYW1ldGVycywgcGFyYW1ldGVycyk7Cit9CisKK2ludAorY2hhbmdlQnJhaWxsZURldmljZSAoY29uc3QgY2hhciAqZGV2aWNlKSB7CisgIHJldHVybiBjaGFuZ2VMaXN0U2V0dGluZygmYnJhaWxsZURldmljZXMsICZvcHRfYnJhaWxsZURldmljZSwgZGV2aWNlKTsKK30KKworI2lmZGVmIEVOQUJMRV9TUEVFQ0hfU1VQUE9SVAorc3RhdGljIEFzeW5jSGFuZGxlIGF1dG9zcGVha0RlbGF5QWxhcm0gPSBOVUxMOworCitzdGF0aWMgdm9pZAorY2FuY2VsQXV0b3NwZWFrRGVsYXlBbGFybSAodm9pZCkgeworICBpZiAoYXV0b3NwZWFrRGVsYXlBbGFybSkgeworICAgIGFzeW5jQ2FuY2VsUmVxdWVzdChhdXRvc3BlYWtEZWxheUFsYXJtKTsKKyAgICBhdXRvc3BlYWtEZWxheUFsYXJtID0gTlVMTDsKKyAgfQorfQorCitzdGF0aWMgdm9pZAorZW5kQXV0b3NwZWFrRGVsYXkgKFNwZWVjaFN5bnRoZXNpemVyICpzcGspIHsKKyAgY2FuY2VsQXV0b3NwZWFrRGVsYXlBbGFybSgpOworCisgIGlmICghc3BrLT5jYW5BdXRvc3BlYWspIHsKKyAgICBzcGstPmNhbkF1dG9zcGVhayA9IDE7CisgICAgc2NoZWR1bGVVcGRhdGUoImJhbm5lciBzcG9rZW4iKTsKKyAgfQorfQorCitBU1lOQ19BTEFSTV9DQUxMQkFDSyhoYW5kbGVBdXRvc3BlYWtEZWxheUFsYXJtKSB7CisgIGFzeW5jRGlzY2FyZEhhbmRsZShhdXRvc3BlYWtEZWxheUFsYXJtKTsKKyAgYXV0b3NwZWFrRGVsYXlBbGFybSA9IE5VTEw7CisKKyAgZW5kQXV0b3NwZWFrRGVsYXkoJnNwayk7Cit9CisKK3N0YXRpYyB2b2lkCitiZWdpbkF1dG9zcGVha0RlbGF5IChpbnQgZHVyYXRpb24pIHsKKyAgaWYgKGFzeW5jTmV3UmVsYXRpdmVBbGFybSgmYXV0b3NwZWFrRGVsYXlBbGFybSwgZHVyYXRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlQXV0b3NwZWFrRGVsYXlBbGFybSwgTlVMTCkpIHsKKyAgICBzcGsuY2FuQXV0b3NwZWFrID0gMDsKKyAgfQorfQorCitzdGF0aWMgdm9pZAorc2V0U3BlZWNoRmluaXNoZWQgKFNwZWVjaFN5bnRoZXNpemVyICpzcGspIHsKKyAgc3BrLT50cmFjay5pc0FjdGl2ZSA9IDA7CisgIHNway0+dHJhY2suc3BlZWNoTG9jYXRpb24gPSBTUEtfTE9DX05PTkU7CisKKyAgZW5kQXV0b3NwZWFrRGVsYXkoc3BrKTsKK30KKworc3RhdGljIHZvaWQKK3NldFNwZWVjaExvY2F0aW9uIChTcGVlY2hTeW50aGVzaXplciAqc3BrLCBpbnQgbG9jYXRpb24pIHsKKyAgaWYgKHNway0+dHJhY2suaXNBY3RpdmUpIHsKKyAgICBpZiAoc2NyLm51bWJlciA9PSBzcGstPnRyYWNrLnNjcmVlbk51bWJlcikgeworICAgICAgaWYgKGxvY2F0aW9uICE9IHNway0+dHJhY2suc3BlZWNoTG9jYXRpb24pIHsKKyAgICAgICAgc3BrLT50cmFjay5zcGVlY2hMb2NhdGlvbiA9IGxvY2F0aW9uOworICAgICAgICBpZiAoc2VzLT50cmFja1NjcmVlbkN1cnNvcikgdHJhY2tTcGVlY2goKTsKKyAgICAgIH0KKworICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHNldFNwZWVjaEZpbmlzaGVkKHNwayk7CisgIH0KK30KKworc3RhdGljIHZvaWQKK2luaXRpYWxpemVTcGVlY2hTeW50aGVzaXplciAodm9pZCkgeworICBjb25zdHJ1Y3RTcGVlY2hTeW50aGVzaXplcigmc3BrKTsKKyAgc3BrLnNldEZpbmlzaGVkID0gc2V0U3BlZWNoRmluaXNoZWQ7CisgIHNway5zZXRMb2NhdGlvbiA9IHNldFNwZWVjaExvY2F0aW9uOworfQorCitpbnQKK2NvbnN0cnVjdFNwZWVjaERyaXZlciAodm9pZCkgeworICBpbml0aWFsaXplU3BlZWNoU3ludGhlc2l6ZXIoKTsKKworICBpZiAoc3RhcnRTcGVlY2hEcml2ZXJUaHJlYWQoJnNwaywgc3BlZWNoRHJpdmVyUGFyYW1ldGVycykpIHsKKyAgICByZXR1cm4gMTsKKyAgfSBlbHNlIHsKKyAgICBsb2dNZXNzYWdlKExPR19ERUJVRywgInNwZWVjaCBkcml2ZXIgaW5pdGlhbGl6YXRpb24gZmFpbGVkOiAlcyIsCisgICAgICAgICAgICAgICBzcGVlY2gtPmRlZmluaXRpb24uY29kZSk7CisgIH0KKworICByZXR1cm4gMDsKK30KKwordm9pZAorZGVzdHJ1Y3RTcGVlY2hEcml2ZXIgKHZvaWQpIHsKKyAgc3RvcFNwZWVjaERyaXZlclRocmVhZCgmc3BrKTsKKyAgZGVzdHJ1Y3RTcGVlY2hTeW50aGVzaXplcigmc3BrKTsKK30KKworc3RhdGljIGludAoraW5pdGlhbGl6ZVNwZWVjaERyaXZlciAoY29uc3QgY2hhciAqY29kZSwgaW50IHZlcmlmeSkgeworICBpZiAoKHNwZWVjaCA9IGxvYWRTcGVlY2hEcml2ZXIoY29kZSwgJnNwZWVjaE9iamVjdCwgb3B0X2RyaXZlcnNEaXJlY3RvcnkpKSkgeworICAgIHNwZWVjaERyaXZlclBhcmFtZXRlcnMgPSBnZXRQYXJhbWV0ZXJzKHNwZWVjaC0+cGFyYW1ldGVycywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcGVlY2gtPmRlZmluaXRpb24uY29kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcGVlY2hQYXJhbWV0ZXJzKTsKKworICAgIGlmIChzcGVlY2hEcml2ZXJQYXJhbWV0ZXJzKSB7CisgICAgICBpbnQgY29uc3RydWN0ZWQgPSB2ZXJpZnk7CisKKyAgICAgIGlmICghY29uc3RydWN0ZWQpIHsKKyAgICAgICAgbG9nTWVzc2FnZShMT0dfREVCVUcsICJpbml0aWFsaXppbmcgc3BlZWNoIGRyaXZlcjogJXMiLAorICAgICAgICAgICAgICAgICAgIHNwZWVjaC0+ZGVmaW5pdGlvbi5jb2RlKTsKKworICAgICAgICBpZiAoY29uc3RydWN0U3BlZWNoRHJpdmVyKCkpIHsKKyAgICAgICAgICBjb25zdHJ1Y3RlZCA9IDE7CisgICAgICAgICAgc3BlZWNoRHJpdmVyID0gc3BlZWNoOworICAgICAgICB9CisgICAgICB9CisKKyAgICAgIGlmIChjb25zdHJ1Y3RlZCkgeworICAgICAgICBpZGVudGlmeVNwZWVjaERyaXZlcihzcGVlY2gsIDApOworCisgICAgICAgIGxvZ1BhcmFtZXRlcnMoCisgICAgICAgICAgc3BlZWNoLT5wYXJhbWV0ZXJzLAorICAgICAgICAgIHNwZWVjaERyaXZlclBhcmFtZXRlcnMsCisgICAgICAgICAgIlNwZWVjaCBQYXJhbWV0ZXIiCisgICAgICAgICk7CisKKyAgICAgICAgcmV0dXJuIDE7CisgICAgICB9CisKKyAgICAgIGRlYWxsb2NhdGVTdHJpbmdzKHNwZWVjaERyaXZlclBhcmFtZXRlcnMpOworICAgICAgc3BlZWNoRHJpdmVyUGFyYW1ldGVycyA9IE5VTEw7CisgICAgfQorCisgICAgdW5sb2FkRHJpdmVyT2JqZWN0KCZzcGVlY2hPYmplY3QpOworICB9IGVsc2UgeworICAgIGxvZ01lc3NhZ2UoTE9HX0VSUiwgIiVzOiAlcyIsIGdldHRleHQoInNwZWVjaCBkcml2ZXIgbm90IGxvYWRhYmxlIiksIGNvZGUpOworICB9CisKKyAgc3BlZWNoID0gJm5vU3BlZWNoOworICByZXR1cm4gMDsKK30KKworc3RhdGljIGludAorYWN0aXZhdGVTcGVlY2hEcml2ZXIgKGludCB2ZXJpZnkpIHsKKyAgc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IGF1dG9kZXRlY3RhYmxlRHJpdmVyc1tdID0geworICAgIE5VTEwKKyAgfTsKKworICBjb25zdCBEcml2ZXJBY3RpdmF0aW9uRGF0YSBkYXRhID0geworICAgIC5kcml2ZXJUeXBlID0gInNwZWVjaCIsCisgICAgLnJlcXVlc3RlZERyaXZlcnMgPSAoY29uc3QgY2hhciAqY29uc3QgKilzcGVlY2hEcml2ZXJzLAorICAgIC5hdXRvZGV0ZWN0YWJsZURyaXZlcnMgPSBhdXRvZGV0ZWN0YWJsZURyaXZlcnMsCisgICAgLmdldERlZmF1bHREcml2ZXIgPSBnZXREZWZhdWx0U3BlZWNoRHJpdmVyLAorICAgIC5oYXZlRHJpdmVyID0gaGF2ZVNwZWVjaERyaXZlciwKKyAgICAuaW5pdGlhbGl6ZURyaXZlciA9IGluaXRpYWxpemVTcGVlY2hEcml2ZXIKKyAgfTsKKworICByZXR1cm4gYWN0aXZhdGVEcml2ZXIoJmRhdGEsIHZlcmlmeSk7Cit9CisKK3N0YXRpYyB2b2lkCitkZWFjdGl2YXRlU3BlZWNoRHJpdmVyICh2b2lkKSB7CisgIGlmIChzcGVlY2hEcml2ZXIpIHsKKyAgICBkZXN0cnVjdFNwZWVjaERyaXZlcigpOworCisgICAgc3BlZWNoID0gJm5vU3BlZWNoOworICAgIHNwZWVjaERyaXZlciA9IE5VTEw7CisgIH0KKworICB1bmxvYWREcml2ZXJPYmplY3QoJnNwZWVjaE9iamVjdCk7CisKKyAgaWYgKHNwZWVjaERyaXZlclBhcmFtZXRlcnMpIHsKKyAgICBkZWFsbG9jYXRlU3RyaW5ncyhzcGVlY2hEcml2ZXJQYXJhbWV0ZXJzKTsKKyAgICBzcGVlY2hEcml2ZXJQYXJhbWV0ZXJzID0gTlVMTDsKKyAgfQorfQorCitzdGF0aWMgaW50CitzdGFydFNwZWVjaERyaXZlciAodm9pZCkgeworICBpZiAoIWFjdGl2YXRlU3BlZWNoRHJpdmVyKDApKSByZXR1cm4gMDsKKyAgYXBwbHlTcGVlY2hQcmVmZXJlbmNlcygpOworCisgIGlmICghb3B0X3F1aWV0ICYmIHNway5zYXlCYW5uZXIpIHsKKyAgICBjaGFyIGJhbm5lclswWDEwMF07CisgICAgY29uc3QgY2hhciAqdGV4dCA9IG9wdF9zdGFydE1lc3NhZ2U7CisKKyAgICBpZiAoKnRleHQpIHsKKyAgICAgIHRleHQgPSBnZXR0ZXh0KHRleHQpOworICAgIH0gZWxzZSB7CisgICAgICBtYWtlUHJvZ3JhbUJhbm5lcihiYW5uZXIsIHNpemVvZihiYW5uZXIpLCAwKTsKKyAgICAgIHRleHQgPSBiYW5uZXI7CisgICAgfQorCisgICAgc2F5U3RyaW5nKCZzcGssIHRleHQsIFNBWV9PUFRfTVVURV9GSVJTVCk7CisgICAgYmVnaW5BdXRvc3BlYWtEZWxheShTUEVFQ0hfRFJJVkVSX1NUQVJUX0FVVE9TUEVBS19ERUxBWSk7CisgIH0gZWxzZSBpZiAoaXNBdXRvc3BlYWtBY3RpdmUoKSkgeworICAgIGF1dG9zcGVhayhBVVRPU1BFQUtfRk9SQ0UpOworICB9CisKKyAgcmV0dXJuIDE7Cit9CisKK3N0YXRpYyB2b2lkCitzdG9wU3BlZWNoRHJpdmVyICh2b2lkKSB7CisgIGNhbmNlbEF1dG9zcGVha0RlbGF5QWxhcm0oKTsKKworICBtdXRlU3BlZWNoKCZzcGssICJkcml2ZXIgc3RvcCIpOworICBkZWFjdGl2YXRlU3BlZWNoRHJpdmVyKCk7Cit9CisKK3N0YXRpYyBpbnQKK3ByZXBhcmVTcGVlY2hEcml2ZXJBY3Rpdml0eSAodm9pZCAqZGF0YSkgeworICBpbml0aWFsaXplU3BlZWNoU3ludGhlc2l6ZXIoKTsKKyAgcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQKK3N0YXJ0U3BlZWNoRHJpdmVyQWN0aXZpdHkgKHZvaWQgKmRhdGEpIHsKKyAgcmV0dXJuIHN0YXJ0U3BlZWNoRHJpdmVyKCk7Cit9CisKK3N0YXRpYyB2b2lkCitzdG9wU3BlZWNoRHJpdmVyQWN0aXZpdHkgKHZvaWQgKmRhdGEpIHsKKyAgc3RvcFNwZWVjaERyaXZlcigpOworfQorCitzdGF0aWMgY29uc3QgQWN0aXZpdHlNZXRob2RzIHNwZWVjaERyaXZlckFjdGl2aXR5TWV0aG9kcyA9IHsKKyAgLmFjdGl2aXR5TmFtZSA9ICJzcGVlY2gtZHJpdmVyIiwKKyAgLnJldHJ5SW50ZXJ2YWwgPSBTUEVFQ0hfRFJJVkVSX1NUQVJUX1JFVFJZX0lOVEVSVkFMLAorCisgIC5wcmVwYXJlID0gcHJlcGFyZVNwZWVjaERyaXZlckFjdGl2aXR5LAorICAuc3RhcnQgPSBzdGFydFNwZWVjaERyaXZlckFjdGl2aXR5LAorICAuc3RvcCA9IHN0b3BTcGVlY2hEcml2ZXJBY3Rpdml0eQorfTsKKworc3RhdGljIEFjdGl2aXR5T2JqZWN0ICpzcGVlY2hEcml2ZXJBY3Rpdml0eSA9IE5VTEw7CisKK3N0YXRpYyB2b2lkCitleGl0U3BlZWNoRHJpdmVyICh2b2lkICpkYXRhKSB7CisgIGlmIChzcGVlY2hEcml2ZXJBY3Rpdml0eSkgeworICAgIGRlc3Ryb3lBY3Rpdml0eShzcGVlY2hEcml2ZXJBY3Rpdml0eSk7CisgICAgc3BlZWNoRHJpdmVyQWN0aXZpdHkgPSBOVUxMOworICB9Cit9CisKK3N0YXRpYyBBY3Rpdml0eU9iamVjdCAqCitnZXRTcGVlY2hEcml2ZXJBY3Rpdml0eSAoaW50IGFsbG9jYXRlKSB7CisgIGlmICghc3BlZWNoRHJpdmVyQWN0aXZpdHkpIHsKKyAgICBpZiAoYWxsb2NhdGUpIHsKKyAgICAgIGlmICghKHNwZWVjaERyaXZlckFjdGl2aXR5ID0gbmV3QWN0aXZpdHkoJnNwZWVjaERyaXZlckFjdGl2aXR5TWV0aG9kcywgTlVMTCkpKSB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgICAgfQorCisgICAgICBvblByb2dyYW1FeGl0KCJzcGVlY2gtZHJpdmVyIiwgZXhpdFNwZWVjaERyaXZlciwgTlVMTCk7CisgICAgfQorICB9CisKKyAgcmV0dXJuIHNwZWVjaERyaXZlckFjdGl2aXR5OworfQorCit2b2lkCitlbmFibGVTcGVlY2hEcml2ZXIgKGludCBzYXlCYW5uZXIpIHsKKyAgQWN0aXZpdHlPYmplY3QgKmFjdGl2aXR5ID0gZ2V0U3BlZWNoRHJpdmVyQWN0aXZpdHkoMSk7CisKKyAgc3BrLnNheUJhbm5lciA9IHNheUJhbm5lcjsKKyAgaWYgKGFjdGl2aXR5KSBzdGFydEFjdGl2aXR5KGFjdGl2aXR5KTsKK30KKwordm9pZAorZGlzYWJsZVNwZWVjaERyaXZlciAoY29uc3QgY2hhciAqcmVhc29uKSB7CisgIEFjdGl2aXR5T2JqZWN0ICphY3Rpdml0eSA9IGdldFNwZWVjaERyaXZlckFjdGl2aXR5KDApOworCisgIGlmIChhY3Rpdml0eSkgeworICAgIGlmIChyZWFzb24pIHsKKyAgICAgIHNheVN0cmluZygmc3BrLCByZWFzb24sIFNBWV9PUFRfTVVURV9GSVJTVCk7CisgICAgICBkcmFpblNwZWVjaCgmc3BrKTsKKyAgICB9CisKKyAgICBzdG9wQWN0aXZpdHkoYWN0aXZpdHkpOworICB9Cit9CisKK3ZvaWQKK3Jlc3RhcnRTcGVlY2hEcml2ZXIgKHZvaWQpIHsKKyAgZGlzYWJsZVNwZWVjaERyaXZlcihnZXR0ZXh0KCJzcGVlY2ggZHJpdmVyIHJlc3RhcnRpbmciKSk7CisgIGF3YWl0QWN0aXZpdHlTdG9wcGVkKHNwZWVjaERyaXZlckFjdGl2aXR5KTsKKworICBsb2dNZXNzYWdlKExPR19JTkZPLCBnZXR0ZXh0KCJyZWluaXRpYWxpemluZyBzcGVlY2ggZHJpdmVyIikpOworICBlbmFibGVTcGVlY2hEcml2ZXIoMSk7Cit9CisKK3N0YXRpYyB2b2lkCitleGl0U3BlZWNoRGF0YSAodm9pZCAqZGF0YSkgeworICBpZiAoc3BlZWNoRHJpdmVycykgeworICAgIGRlYWxsb2NhdGVTdHJpbmdzKHNwZWVjaERyaXZlcnMpOworICAgIHNwZWVjaERyaXZlcnMgPSBOVUxMOworICB9CisKKyAgaWYgKHNwZWVjaFBhcmFtZXRlcnMpIHsKKyAgICBmcmVlKHNwZWVjaFBhcmFtZXRlcnMpOworICAgIHNwZWVjaFBhcmFtZXRlcnMgPSBOVUxMOworICB9Cit9CisKK3N0YXRpYyB2b2lkCitleGl0U3BlZWNoSW5wdXQgKHZvaWQgKmRhdGEpIHsKKyAgaWYgKHNwZWVjaElucHV0T2JqZWN0KSB7CisgICAgZGVzdHJveVNwZWVjaElucHV0T2JqZWN0KHNwZWVjaElucHV0T2JqZWN0KTsKKyAgICBzcGVlY2hJbnB1dE9iamVjdCA9IE5VTEw7CisgIH0KK30KKworaW50CitjaGFuZ2VTcGVlY2hEcml2ZXIgKGNvbnN0IGNoYXIgKmRyaXZlcikgeworICByZXR1cm4gY2hhbmdlTGlzdFNldHRpbmcoJnNwZWVjaERyaXZlcnMsICZvcHRfc3BlZWNoRHJpdmVyLCBkcml2ZXIpOworfQorCitpbnQKK2NoYW5nZVNwZWVjaFBhcmFtZXRlcnMgKGNvbnN0IGNoYXIgKnBhcmFtZXRlcnMpIHsKKyAgaWYgKCFwYXJhbWV0ZXJzKSBwYXJhbWV0ZXJzID0gIiI7CisgIHJldHVybiBjaGFuZ2VTdHJpbmdTZXR0aW5nKCZzcGVlY2hQYXJhbWV0ZXJzLCBwYXJhbWV0ZXJzKTsKK30KKyNlbmRpZiAvKiBFTkFCTEVfU1BFRUNIX1NVUFBPUlQgKi8KKworc3RhdGljIGludAoraW5pdGlhbGl6ZVNjcmVlbkRyaXZlciAoY29uc3QgY2hhciAqY29kZSwgaW50IHZlcmlmeSkgeworICBpZiAoKHNjcmVlbiA9IGxvYWRTY3JlZW5Ecml2ZXIoY29kZSwgJnNjcmVlbk9iamVjdCwgb3B0X2RyaXZlcnNEaXJlY3RvcnkpKSkgeworICAgIHNjcmVlbkRyaXZlclBhcmFtZXRlcnMgPSBnZXRQYXJhbWV0ZXJzKAorICAgICAgZ2V0U2NyZWVuUGFyYW1ldGVycyhzY3JlZW4pLAorICAgICAgc2NyZWVuLT5kZWZpbml0aW9uLmNvZGUsCisgICAgICBzY3JlZW5QYXJhbWV0ZXJzCisgICAgKTsKKworICAgIGlmIChzY3JlZW5Ecml2ZXJQYXJhbWV0ZXJzKSB7CisgICAgICBpbnQgY29uc3RydWN0ZWQgPSB2ZXJpZnk7CisKKyAgICAgIGlmICghY29uc3RydWN0ZWQpIHsKKyAgICAgICAgbG9nTWVzc2FnZShMT0dfREVCVUcsCisgICAgICAgICAgImluaXRpYWxpemluZyBzY3JlZW4gZHJpdmVyOiAlcyIsCisgICAgICAgICAgc2NyZWVuLT5kZWZpbml0aW9uLmNvZGUKKyAgICAgICAgKTsKKworICAgICAgICBpZiAoY29uc3RydWN0U2NyZWVuRHJpdmVyKHNjcmVlbkRyaXZlclBhcmFtZXRlcnMpKSB7CisgICAgICAgICAgY29uc3RydWN0ZWQgPSAxOworICAgICAgICAgIHNjcmVlbkRyaXZlciA9IHNjcmVlbjsKKyAgICAgICAgfQorICAgICAgfQorCisgICAgICBpZiAoY29uc3RydWN0ZWQpIHsKKyAgICAgICAgaWRlbnRpZnlTY3JlZW5Ecml2ZXIoc2NyZWVuLCAwKTsKKworICAgICAgICBsb2dQYXJhbWV0ZXJzKAorICAgICAgICAgIGdldFNjcmVlblBhcmFtZXRlcnMoc2NyZWVuKSwKKyAgICAgICAgICBzY3JlZW5Ecml2ZXJQYXJhbWV0ZXJzLAorICAgICAgICAgICJTY3JlZW4gUGFyYW1ldGVyIgorICAgICAgICApOworCisgICAgICAgIHJldHVybiAxOworICAgICAgfQorCisgICAgICBkZWFsbG9jYXRlU3RyaW5ncyhzY3JlZW5Ecml2ZXJQYXJhbWV0ZXJzKTsKKyAgICAgIHNjcmVlbkRyaXZlclBhcmFtZXRlcnMgPSBOVUxMOworICAgIH0KKworICAgIHVubG9hZERyaXZlck9iamVjdCgmc2NyZWVuT2JqZWN0KTsKKyAgfSBlbHNlIHsKKyAgICBsb2dNZXNzYWdlKExPR19FUlIsICIlczogJXMiLCBnZXR0ZXh0KCJzY3JlZW4gZHJpdmVyIG5vdCBsb2FkYWJsZSIpLCBjb2RlKTsKKyAgfQorCisgIHNldE5vU2NyZWVuKCk7CisgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50CithY3RpdmF0ZVNjcmVlbkRyaXZlciAoaW50IHZlcmlmeSkgeworICBzdGF0aWMgY29uc3QgY2hhciAqY29uc3QgYXV0b2RldGVjdGFibGVEcml2ZXJzW10gPSB7CisgICAgTlVMTAorICB9OworCisgIGNvbnN0IERyaXZlckFjdGl2YXRpb25EYXRhIGRhdGEgPSB7CisgICAgLmRyaXZlclR5cGUgPSAic2NyZWVuIiwKKyAgICAucmVxdWVzdGVkRHJpdmVycyA9IChjb25zdCBjaGFyICpjb25zdCAqKXNjcmVlbkRyaXZlcnMsCisgICAgLmF1dG9kZXRlY3RhYmxlRHJpdmVycyA9IGF1dG9kZXRlY3RhYmxlRHJpdmVycywKKyAgICAuZ2V0RGVmYXVsdERyaXZlciA9IGdldERlZmF1bHRTY3JlZW5Ecml2ZXIsCisgICAgLmhhdmVEcml2ZXIgPSBoYXZlU2NyZWVuRHJpdmVyLAorICAgIC5pbml0aWFsaXplRHJpdmVyID0gaW5pdGlhbGl6ZVNjcmVlbkRyaXZlcgorICB9OworCisgIHJldHVybiBhY3RpdmF0ZURyaXZlcigmZGF0YSwgdmVyaWZ5KTsKK30KKworc3RhdGljIHZvaWQKK2RlYWN0aXZhdGVTY3JlZW5Ecml2ZXIgKHZvaWQpIHsKKyAgaWYgKHNjcmVlbkRyaXZlcikgeworICAgIGRlc3RydWN0U2NyZWVuRHJpdmVyKCk7CisKKyAgICBzZXROb1NjcmVlbigpOworICAgIHNjcmVlbkRyaXZlciA9IE5VTEw7CisgIH0KKworICB1bmxvYWREcml2ZXJPYmplY3QoJnNjcmVlbk9iamVjdCk7CisKKyAgaWYgKHNjcmVlbkRyaXZlclBhcmFtZXRlcnMpIHsKKyAgICBkZWFsbG9jYXRlU3RyaW5ncyhzY3JlZW5Ecml2ZXJQYXJhbWV0ZXJzKTsKKyAgICBzY3JlZW5Ecml2ZXJQYXJhbWV0ZXJzID0gTlVMTDsKKyAgfQorfQorCitzdGF0aWMgaW50CitzdGFydFNjcmVlbkRyaXZlciAodm9pZCkgeworICBpZiAoIWFjdGl2YXRlU2NyZWVuRHJpdmVyKDApKSByZXR1cm4gMDsKKyAgaWYgKGlzTWFpblNjcmVlbigpKSBzY2hlZHVsZVVwZGF0ZSgibWFpbiBzY3JlZW4gc3RhcnRlZCIpOworICByZXR1cm4gMTsKK30KKworc3RhdGljIHZvaWQKK3N0b3BTY3JlZW5Ecml2ZXIgKHZvaWQpIHsKKyAgZGVhY3RpdmF0ZVNjcmVlbkRyaXZlcigpOworfQorCitzdGF0aWMgaW50CitwcmVwYXJlU2NyZWVuRHJpdmVyQWN0aXZpdHkgKHZvaWQgKmRhdGEpIHsKKyAgcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQKK3N0YXJ0U2NyZWVuRHJpdmVyQWN0aXZpdHkgKHZvaWQgKmRhdGEpIHsKKyAgcmV0dXJuIHN0YXJ0U2NyZWVuRHJpdmVyKCk7Cit9CisKK3N0YXRpYyB2b2lkCitzdG9wU2NyZWVuRHJpdmVyQWN0aXZpdHkgKHZvaWQgKmRhdGEpIHsKKyAgc3RvcFNjcmVlbkRyaXZlcigpOworfQorCitzdGF0aWMgY29uc3QgQWN0aXZpdHlNZXRob2RzIHNjcmVlbkRyaXZlckFjdGl2aXR5TWV0aG9kcyA9IHsKKyAgLmFjdGl2aXR5TmFtZSA9ICJzY3JlZW4tZHJpdmVyIiwKKyAgLnJldHJ5SW50ZXJ2YWwgPSBTQ1JFRU5fRFJJVkVSX1NUQVJUX1JFVFJZX0lOVEVSVkFMLAorCisgIC5wcmVwYXJlID0gcHJlcGFyZVNjcmVlbkRyaXZlckFjdGl2aXR5LAorICAuc3RhcnQgPSBzdGFydFNjcmVlbkRyaXZlckFjdGl2aXR5LAorICAuc3RvcCA9IHN0b3BTY3JlZW5Ecml2ZXJBY3Rpdml0eQorfTsKKworc3RhdGljIEFjdGl2aXR5T2JqZWN0ICpzY3JlZW5Ecml2ZXJBY3Rpdml0eSA9IE5VTEw7CisKK3N0YXRpYyB2b2lkCitleGl0U2NyZWVuRHJpdmVyICh2b2lkICpkYXRhKSB7CisgIGlmIChzY3JlZW5Ecml2ZXJBY3Rpdml0eSkgeworICAgIGRlc3Ryb3lBY3Rpdml0eShzY3JlZW5Ecml2ZXJBY3Rpdml0eSk7CisgICAgc2NyZWVuRHJpdmVyQWN0aXZpdHkgPSBOVUxMOworICB9Cit9CisKK3N0YXRpYyBBY3Rpdml0eU9iamVjdCAqCitnZXRTY3JlZW5Ecml2ZXJBY3Rpdml0eSAoaW50IGFsbG9jYXRlKSB7CisgIGlmICghc2NyZWVuRHJpdmVyQWN0aXZpdHkpIHsKKyAgICBpZiAoYWxsb2NhdGUpIHsKKyAgICAgIGlmICghKHNjcmVlbkRyaXZlckFjdGl2aXR5ID0gbmV3QWN0aXZpdHkoJnNjcmVlbkRyaXZlckFjdGl2aXR5TWV0aG9kcywgTlVMTCkpKSB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgICAgfQorCisgICAgICBvblByb2dyYW1FeGl0KCJzY3JlZW4tZHJpdmVyIiwgZXhpdFNjcmVlbkRyaXZlciwgTlVMTCk7CisgICAgfQorICB9CisKKyAgcmV0dXJuIHNjcmVlbkRyaXZlckFjdGl2aXR5OworfQorCit2b2lkCitlbmFibGVTY3JlZW5Ecml2ZXIgKHZvaWQpIHsKKyAgQWN0aXZpdHlPYmplY3QgKmFjdGl2aXR5ID0gZ2V0U2NyZWVuRHJpdmVyQWN0aXZpdHkoMSk7CisKKyAgc2V0Tm9TY3JlZW5Ecml2ZXJSZWFzb24oTlVMTCk7CisgIGlmIChhY3Rpdml0eSkgc3RhcnRBY3Rpdml0eShhY3Rpdml0eSk7Cit9CisKK3ZvaWQKK2Rpc2FibGVTY3JlZW5Ecml2ZXIgKGNvbnN0IGNoYXIgKnJlYXNvbikgeworICBBY3Rpdml0eU9iamVjdCAqYWN0aXZpdHkgPSBnZXRTY3JlZW5Ecml2ZXJBY3Rpdml0eSgwKTsKKworICBzZXROb1NjcmVlbkRyaXZlclJlYXNvbihyZWFzb24pOworICBpZiAoYWN0aXZpdHkpIHN0b3BBY3Rpdml0eShhY3Rpdml0eSk7Cit9CisKK3ZvaWQKK3Jlc3RhcnRTY3JlZW5Ecml2ZXIgKHZvaWQpIHsKKyAgZGlzYWJsZVNjcmVlbkRyaXZlcihnZXR0ZXh0KCJzY3JlZW4gZHJpdmVyIHJlc3RhcnRpbmciKSk7CisgIGF3YWl0QWN0aXZpdHlTdG9wcGVkKHNjcmVlbkRyaXZlckFjdGl2aXR5KTsKKworICBsb2dNZXNzYWdlKExPR19JTkZPLCBnZXR0ZXh0KCJyZWluaXRpYWxpemluZyBzY3JlZW4gZHJpdmVyIikpOworICBlbmFibGVTY3JlZW5Ecml2ZXIoKTsKK30KKworc3RhdGljIHZvaWQKK2V4aXRTY3JlZW5EYXRhICh2b2lkICpkYXRhKSB7CisgIGVuZFNwZWNpYWxTY3JlZW5zKCk7CisKKyAgaWYgKHNjcmVlbkRyaXZlcnMpIHsKKyAgICBkZWFsbG9jYXRlU3RyaW5ncyhzY3JlZW5Ecml2ZXJzKTsKKyAgICBzY3JlZW5Ecml2ZXJzID0gTlVMTDsKKyAgfQorCisgIGlmIChzY3JlZW5QYXJhbWV0ZXJzKSB7CisgICAgZnJlZShzY3JlZW5QYXJhbWV0ZXJzKTsKKyAgICBzY3JlZW5QYXJhbWV0ZXJzID0gTlVMTDsKKyAgfQorfQorCitpbnQKK2NoYW5nZVNjcmVlbkRyaXZlciAoY29uc3QgY2hhciAqZHJpdmVyKSB7CisgIHJldHVybiBjaGFuZ2VMaXN0U2V0dGluZygmc2NyZWVuRHJpdmVycywgJm9wdF9zY3JlZW5Ecml2ZXIsIGRyaXZlcik7Cit9CisKK2ludAorY2hhbmdlU2NyZWVuUGFyYW1ldGVycyAoY29uc3QgY2hhciAqcGFyYW1ldGVycykgeworICBpZiAoIXBhcmFtZXRlcnMpIHBhcmFtZXRlcnMgPSAiIjsKKyAgcmV0dXJuIGNoYW5nZVN0cmluZ1NldHRpbmcoJnNjcmVlblBhcmFtZXRlcnMsIHBhcmFtZXRlcnMpOworfQorCitpbnQKK2NoYW5nZU1lc3NhZ2VMb2NhbGUgKGNvbnN0IGNoYXIgKmxvY2FsZSkgeworICBpbnQgY2hhbmdlZCA9ICEhc2V0bG9jYWxlKExDX0FMTCwgbG9jYWxlKTsKKworICBpZiAoY2hhbmdlZCkgeworICAgIGFwaS51cGRhdGVQYXJhbWV0ZXIoQlJMQVBJX1BBUkFNX01FU1NBR0VfTE9DQUxFLCAwKTsKKyAgfSBlbHNlIHsKKyAgICBsb2dNZXNzYWdlKExPR19XQVJOSU5HLCAibWVzc2FnZSBsb2NhbGUgY2hhbmdlIGZhaWxlZDogJXMiLCBsb2NhbGUpOworICB9CisKKyAgcmV0dXJuIGNoYW5nZWQ7Cit9CisKK3N0YXRpYyB2b2lkCitleGl0UGlkRmlsZSAodm9pZCAqZGF0YSkgeworI2lmIGRlZmluZWQoR1JVQl9SVU5USU1FKQorCisjZWxzZSAvKiByZW1vdmUgcGlkIGZpbGUgKi8KKyAgdW5saW5rKG9wdF9waWRGaWxlKTsKKyNlbmRpZiAvKiByZW1vdmUgcGlkIGZpbGUgKi8KK30KKworc3RhdGljIGludAorbWFrZVBpZEZpbGUgKFByb2Nlc3NJZGVudGlmaWVyIHBpZCkgeworICByZXR1cm4gY3JlYXRlUGlkRmlsZShvcHRfcGlkRmlsZSwgcGlkKTsKK30KKworc3RhdGljIGludCB0cnlQaWRGaWxlICh2b2lkKTsKKworQVNZTkNfQUxBUk1fQ0FMTEJBQ0socmV0cnlQaWRGaWxlKSB7CisgIHRyeVBpZEZpbGUoKTsKK30KKworc3RhdGljIGludAordHJ5UGlkRmlsZSAodm9pZCkgeworICBpZiAobWFrZVBpZEZpbGUoMCkpIHsKKyAgICBvblByb2dyYW1FeGl0KCJwaWQtZmlsZSIsIGV4aXRQaWRGaWxlLCBOVUxMKTsKKyAgfSBlbHNlIGlmIChlcnJubyA9PSBFRVhJU1QpIHsKKyAgICByZXR1cm4gMDsKKyAgfSBlbHNlIHsKKyAgICBhc3luY05ld1JlbGF0aXZlQWxhcm0oTlVMTCwgUElEX0ZJTEVfQ1JFQVRFX1JFVFJZX0lOVEVSVkFMLCByZXRyeVBpZEZpbGUsIE5VTEwpOworICB9CisKKyAgcmV0dXJuIDE7Cit9CisKKyNpZiBkZWZpbmVkKF9fTUlOR1czMl9fKQorc3RhdGljIHZvaWQKK2JhY2tncm91bmQgKHZvaWQpIHsKKyAgY2hhciAqdmFyaWFibGVOYW1lOworCisgIHsKKyAgICBjb25zdCBjaGFyICpzdHJpbmdzW10gPSB7cHJvZ3JhbU5hbWUsICJfREFFTU9OIn07CisgICAgdmFyaWFibGVOYW1lID0gam9pblN0cmluZ3Moc3RyaW5ncywgQVJSQVlfQ09VTlQoc3RyaW5ncykpOworICB9CisKKyAgeworICAgIGludCBpOworICAgIGZvciAoaT0wOyB2YXJpYWJsZU5hbWVbaV07IGkrPTEpIHsKKyAgICAgIGNoYXIgYyA9IHZhcmlhYmxlTmFtZVtpXTsKKworICAgICAgaWYgKGMgPT0gJ18nKSBjb250aW51ZTsKKyAgICAgIGlmIChpc2RpZ2l0KCh1bnNpZ25lZCBjaGFyKWMpICYmIChpID4gMCkpIGNvbnRpbnVlOworCisgICAgICBpZiAoaXNhbHBoYSgodW5zaWduZWQgY2hhciljKSkgeworICAgICAgICBpZiAoaXNsb3dlcigodW5zaWduZWQgY2hhciljKSkgdmFyaWFibGVOYW1lW2ldID0gdG91cHBlcigodW5zaWduZWQgY2hhciljKTsKKyAgICAgICAgY29udGludWU7CisgICAgICB9CisKKyAgICAgIHZhcmlhYmxlTmFtZVtpXSA9ICdfJzsKKyAgICB9CisgIH0KKworICBpZiAoIWdldGVudih2YXJpYWJsZU5hbWUpKSB7CisgICAgTFBUU1RSIGNvbW1hbmRMaW5lID0gR2V0Q29tbWFuZExpbmUoKTsKKyAgICBTVEFSVFVQSU5GTyBzdGFydHVwSW5mbzsKKyAgICBQUk9DRVNTX0lORk9STUFUSU9OIHByb2Nlc3NJbmZvOworICAgIAorICAgIG1lbXNldCgmc3RhcnR1cEluZm8sIDAsIHNpemVvZihzdGFydHVwSW5mbykpOworICAgIHN0YXJ0dXBJbmZvLmNiID0gc2l6ZW9mKHN0YXJ0dXBJbmZvKTsKKworICAgIGlmICghU2V0RW52aXJvbm1lbnRWYXJpYWJsZSh2YXJpYWJsZU5hbWUsICJCQUNLR1JPVU5EIikpIHsKKyAgICAgIGxvZ1dpbmRvd3NTeXN0ZW1FcnJvcigiU2V0RW52aXJvbm1lbnRWYXJpYWJsZSIpOworICAgICAgZXhpdChQUk9HX0VYSVRfRkFUQUwpOworICAgIH0KKworICAgIGlmICghQ3JlYXRlUHJvY2VzcyhOVUxMLCBjb21tYW5kTGluZSwgTlVMTCwgTlVMTCwgVFJVRSwKKyAgICAgICAgICAgICAgICAgICAgICAgQ1JFQVRFX05FV19QUk9DRVNTX0dST1VQIHwgQ1JFQVRFX1NVU1BFTkRFRCwKKyAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgTlVMTCwgJnN0YXJ0dXBJbmZvLCAmcHJvY2Vzc0luZm8pKSB7CisgICAgICBsb2dXaW5kb3dzU3lzdGVtRXJyb3IoIkNyZWF0ZVByb2Nlc3MiKTsKKyAgICAgIGV4aXQoUFJPR19FWElUX0ZBVEFMKTsKKyAgICB9CisKKyAgICB7CisgICAgICBpbnQgY3JlYXRlZCA9IG1ha2VQaWRGaWxlKHByb2Nlc3NJbmZvLmR3UHJvY2Vzc0lkKTsKKyAgICAgIGludCByZXN1bWVkID0gUmVzdW1lVGhyZWFkKHByb2Nlc3NJbmZvLmhUaHJlYWQpICE9IC0xOworCisgICAgICBpZiAoIWNyZWF0ZWQpIHsKKyAgICAgICAgaWYgKGVycm5vID09IEVFWElTVCkgeworICAgICAgICAgIEV4aXRQcm9jZXNzKFBST0dfRVhJVF9GQVRBTCk7CisgICAgICAgIH0KKyAgICAgIH0KKworICAgICAgaWYgKCFyZXN1bWVkKSB7CisgICAgICAgIGxvZ1dpbmRvd3NTeXN0ZW1FcnJvcigiUmVzdW1lVGhyZWFkIik7CisgICAgICAgIEV4aXRQcm9jZXNzKFBST0dfRVhJVF9GQVRBTCk7CisgICAgICB9CisgICAgfQorCisgICAgRXhpdFByb2Nlc3MoUFJPR19FWElUX1NVQ0NFU1MpOworICB9CisKKyAgZnJlZSh2YXJpYWJsZU5hbWUpOworfQorCisjZWxpZiBkZWZpbmVkKF9fTVNET1NfXykKK3N0YXRpYyB2b2lkCitiYWNrZ3JvdW5kICh2b2lkKSB7CisgIG1zZG9zQmFja2dyb3VuZCgpOworfQorCisjZWxpZiBkZWZpbmVkKEdSVUJfUlVOVElNRSkKK3N0YXRpYyB2b2lkCitiYWNrZ3JvdW5kICh2b2lkKSB7Cit9CisKKyNlbHNlIC8qIFVuaXggKi8KK3N0YXRpYyB2b2lkCitiYWNrZ3JvdW5kICh2b2lkKSB7CisgIGludCBmZHNbMl07CisKKyAgaWYgKHBpcGUoZmRzKSA9PSAtMSkgeworICAgIGxvZ1N5c3RlbUVycm9yKCJwaXBlIik7CisgICAgZXhpdChQUk9HX0VYSVRfRkFUQUwpOworICB9CisKKyAgZmZsdXNoKHN0ZG91dCk7CisgIGZmbHVzaChzdGRlcnIpOworCisgIHsKKyAgICBwaWRfdCBjaGlsZCA9IGZvcmsoKTsKKworICAgIGlmIChjaGlsZCA9PSAtMSkgeworICAgICAgbG9nU3lzdGVtRXJyb3IoImZvcmsiKTsKKyAgICAgIGV4aXQoUFJPR19FWElUX0ZBVEFMKTsKKyAgICB9CisKKyAgICBpZiAoY2hpbGQpIHsKKyAgICAgIFByb2dyYW1FeGl0U3RhdHVzIGV4aXRTdGF0dXMgPSBQUk9HX0VYSVRfU1VDQ0VTUzsKKworICAgICAgaWYgKGNsb3NlKGZkc1swXSkgPT0gLTEpIGxvZ1N5c3RlbUVycm9yKCJjbG9zZSIpOworCisgICAgICBpZiAoIW1ha2VQaWRGaWxlKGNoaWxkKSkgeworICAgICAgICBpZiAoZXJybm8gPT0gRUVYSVNUKSB7CisgICAgICAgICAgZXhpdFN0YXR1cyA9IFBST0dfRVhJVF9TRU1BTlRJQzsKKyAgICAgICAgfQorICAgICAgfQorCisgICAgICBpZiAoY2xvc2UoZmRzWzFdKSA9PSAtMSkgbG9nU3lzdGVtRXJyb3IoImNsb3NlIik7CisgICAgICBfZXhpdChleGl0U3RhdHVzKTsKKyAgICB9CisgIH0KKworICBpZiAoY2xvc2UoZmRzWzFdKSA9PSAtMSkgbG9nU3lzdGVtRXJyb3IoImNsb3NlIik7CisKKyAgeworICAgIHVuc2lnbmVkIGNoYXIgYnVmZmVyWzFdOworCisgICAgaWYgKHJlYWQoZmRzWzBdLCBidWZmZXIsIHNpemVvZihidWZmZXIpKSA9PSAtMSkgbG9nU3lzdGVtRXJyb3IoInJlYWQiKTsKKyAgICBpZiAoY2xvc2UoZmRzWzBdKSA9PSAtMSkgbG9nU3lzdGVtRXJyb3IoImNsb3NlIik7CisgIH0KKworICBpZiAoc2V0c2lkKCkgPT0gLTEpIHsgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICBsb2dTeXN0ZW1FcnJvcigic2V0c2lkIik7CisgICAgZXhpdChQUk9HX0VYSVRfRkFUQUwpOworICB9Cit9CisjZW5kaWYgLyogYmFja2dyb3VuZCgpICovCisKK3N0YXRpYyBpbnQKK3ZhbGlkYXRlSW50ZXJ2YWwgKGludCAqdmFsdWUsIGNvbnN0IGNoYXIgKnN0cmluZykgeworICBpZiAoISpzdHJpbmcpIHJldHVybiAxOworCisgIHsKKyAgICBzdGF0aWMgY29uc3QgaW50IG1pbmltdW0gPSAxOworICAgIGludCBvayA9IHZhbGlkYXRlSW50ZWdlcih2YWx1ZSwgc3RyaW5nLCAmbWluaW11bSwgTlVMTCk7CisgICAgaWYgKG9rKSAqdmFsdWUgKj0gMTA7CisgICAgcmV0dXJuIG9rOworICB9Cit9CisKK1Byb2dyYW1FeGl0U3RhdHVzCiticmx0dHlTdGFydCAodm9pZCkgeworICBpZiAob3B0X2NhbmNlbEV4ZWN1dGlvbikgeworICAgIFByb2dyYW1FeGl0U3RhdHVzIGV4aXRTdGF0dXM7CisKKyAgICBpZiAoISpvcHRfcGlkRmlsZSkgeworICAgICAgZXhpdFN0YXR1cyA9IFBST0dfRVhJVF9TRU1BTlRJQzsKKyAgICAgIGxvZ01lc3NhZ2UoTE9HX0VSUiwgIiVzIiwgZ2V0dGV4dCgicGlkIGZpbGUgbm90IHNwZWNpZmllZCIpKTsKKyAgICB9IGVsc2UgaWYgKGNhbmNlbFByb2dyYW0ob3B0X3BpZEZpbGUpKSB7CisgICAgICBleGl0U3RhdHVzID0gUFJPR19FWElUX0ZPUkNFOworICAgIH0gZWxzZSB7CisgICAgICBleGl0U3RhdHVzID0gUFJPR19FWElUX0ZBVEFMOworICAgIH0KKworICAgIHJldHVybiBleGl0U3RhdHVzOworICB9CisKKyAgeworICAgIGludCBzdG9wID0gMDsKKworICAgIGlmIChvcHRfcmVtb3ZlU2VydmljZSkgeworICAgICAgcmVtb3ZlU2VydmljZShTRVJWSUNFX05BTUUpOworICAgICAgc3RvcCA9IDE7CisgICAgfQorCisgICAgaWYgKG9wdF9pbnN0YWxsU2VydmljZSkgeworICAgICAgaW5zdGFsbFNlcnZpY2UoU0VSVklDRV9OQU1FLCBTRVJWSUNFX0RFU0NSSVBUSU9OLCBvcHRfY29uZmlndXJhdGlvbkZpbGUpOworICAgICAgc3RvcCA9IDE7CisgICAgfQorCisgICAgaWYgKHN0b3ApIHJldHVybiBQUk9HX0VYSVRfRk9SQ0U7CisgIH0KKworICBpZiAoIXZhbGlkYXRlSW50ZXJ2YWwoJm1lc3NhZ2VIb2xkVGltZW91dCwgb3B0X21lc3NhZ2VUaW1lKSkgeworICAgIGxvZ01lc3NhZ2UoTE9HX0VSUiwgIiVzOiAlcyIsIGdldHRleHQoImludmFsaWQgbWVzc2FnZSBob2xkIHRpbWVvdXQiKSwgb3B0X21lc3NhZ2VUaW1lKTsKKyAgfQorCisgIGlmIChvcHRfdmVyc2lvbikgeworICAgIGxvZ01lc3NhZ2UoTE9HX0lORk8sICJDb3B5cmlnaHQgJXMiLCBQQUNLQUdFX0NPUFlSSUdIVCk7CisgICAgaWRlbnRpZnlTY3JlZW5Ecml2ZXJzKDEpOworCisjaWZkZWYgRU5BQkxFX0FQSQorICAgIGFwaS5sb2dTZXJ2ZXJJZGVudGl0eSgxKTsKKyNlbmRpZiAvKiBFTkFCTEVfQVBJICovCisKKyAgICBpZGVudGlmeUJyYWlsbGVEcml2ZXJzKDEpOworCisjaWZkZWYgRU5BQkxFX1NQRUVDSF9TVVBQT1JUCisgICAgaWRlbnRpZnlTcGVlY2hEcml2ZXJzKDEpOworI2VuZGlmIC8qIEVOQUJMRV9TUEVFQ0hfU1VQUE9SVCAqLworCisgICAgcmV0dXJuIFBST0dfRVhJVF9GT1JDRTsKKyAgfQorCisgIGlmIChvcHRfdmVyaWZ5KSBvcHRfbm9EYWVtb24gPSAxOworICBpZiAoIW9wdF9ub0RhZW1vbgorI2lmZGVmIF9fTUlOR1czMl9fCisgICAgICAmJiAhaXNXaW5kb3dzU2VydmljZQorI2VuZGlmCisgICAgICkgeworICAgIGJhY2tncm91bmQoKTsKKyAgfQorCisgIGlmICgqb3B0X3BpZEZpbGUpIHsKKyAgICBpZiAoIXRyeVBpZEZpbGUoKSkgeworICAgICAgcmV0dXJuIFBST0dfRVhJVF9TRU1BTlRJQzsKKyAgICB9CisgIH0KKworICBpZiAoIW9wdF9ub0RhZW1vbikgeworICAgIHN0ZGVyckxvZ0xldmVsID0gMDsKKworICAgIGRldGFjaFN0YW5kYXJkSW5wdXQoKTsKKyAgICBkZXRhY2hTdGFuZGFyZE91dHB1dCgpOworICAgIGlmICghb3B0X3N0YW5kYXJkRXJyb3IpIGRldGFjaFN0YW5kYXJkRXJyb3IoKTsKKworI2lmZGVmIF9fTUlOR1czMl9fCisgICAgeworICAgICAgSEFORExFIGggPSBDcmVhdGVGaWxlKCJOVUwiLCBHRU5FUklDX1JFQUR8R0VORVJJQ19XUklURSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBGSUxFX1NIQVJFX1JFQUR8RklMRV9TSEFSRV9XUklURSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCBPUEVOX0VYSVNUSU5HLCAwLCBOVUxMKTsKKworICAgICAgaWYgKCFoKSB7CisgICAgICAgIGxvZ1dpbmRvd3NTeXN0ZW1FcnJvcigiQ3JlYXRlRmlsZVtOVUxdIik7CisgICAgICB9IGVsc2UgeworICAgICAgICBTZXRTdGRIYW5kbGUoU1REX0lOUFVUX0hBTkRMRSwgaCk7CisgICAgICAgIFNldFN0ZEhhbmRsZShTVERfT1VUUFVUX0hBTkRMRSwgaCk7CisKKyAgICAgICAgaWYgKCFvcHRfc3RhbmRhcmRFcnJvcikgeworICAgICAgICAgIFNldFN0ZEhhbmRsZShTVERfRVJST1JfSEFORExFLCBoKTsKKyAgICAgICAgfQorICAgICAgfQorICAgIH0KKyNlbmRpZiAvKiBfX01JTkdXMzJfXyAqLworICB9CisKKyAgLyoKKyAgICogRnJvbSB0aGlzIHBvaW50LCBhbGwgSU8gZnVuY3Rpb25zIGFzIHByaW50ZiwgcHV0cywgcGVycm9yLCBldGMuIGNhbid0IGJlCisgICAqIHVzZWQgYW55bW9yZSBzaW5jZSB3ZSBhcmUgYSBkYWVtb24uICBUaGUgbG9nTWVzc2FnZSgpIGZhY2lsaXR5IHNob3VsZCAKKyAgICogYmUgdXNlZCBpbnN0ZWFkLgorICAgKi8KKworICBjaGFuZ2VTY3JlZW5Ecml2ZXIob3B0X3NjcmVlbkRyaXZlcik7CisgIGNoYW5nZVNjcmVlblBhcmFtZXRlcnMob3B0X3NjcmVlblBhcmFtZXRlcnMpOworICBiZWdpblNwZWNpYWxTY3JlZW5zKCk7CisgIG9uUHJvZ3JhbUV4aXQoInNjcmVlbi1kYXRhIiwgZXhpdFNjcmVlbkRhdGEsIE5VTEwpOworCisgIHN1cHByZXNzVHVuZURldmljZU9wZW5FcnJvcnMoKTsKKworICB7CisgICAgY2hhciAqZGlyZWN0b3J5OworCisgICAgaWYgKChkaXJlY3RvcnkgPSBnZXRXb3JraW5nRGlyZWN0b3J5KCkpKSB7CisgICAgICBsb2dQcm9wZXJ0eShkaXJlY3RvcnksICJ3b3JraW5nRGlyZWN0b3J5IiwgIldvcmtpbmcgRGlyZWN0b3J5Iik7CisgICAgICBmcmVlKGRpcmVjdG9yeSk7CisgICAgfSBlbHNlIHsKKyAgICAgIGxvZ01lc3NhZ2UoTE9HX1dBUk5JTkcsICIlczogJXMiLCBnZXR0ZXh0KCJjYW5ub3QgZGV0ZXJtaW5lIHdvcmtpbmcgZGlyZWN0b3J5IiksIHN0cmVycm9yKGVycm5vKSk7CisgICAgfQorICB9CisKKyAgbG9nUHJvcGVydHkob3B0X2NvbmZpZ3VyYXRpb25GaWxlLCAiY29uZmlndXJhdGlvbkZpbGUiLCAiQ29uZmlndXJhdGlvbiBGaWxlIik7CisgIGxvZ1Byb3BlcnR5KG9wdF90YWJsZXNEaXJlY3RvcnksICJ0YWJsZXNEaXJlY3RvcnkiLCAiVGFibGVzIERpcmVjdG9yeSIpOworICBsb2dQcm9wZXJ0eShvcHRfZHJpdmVyc0RpcmVjdG9yeSwgImRyaXZlcnNEaXJlY3RvcnkiLCAiRHJpdmVycyBEaXJlY3RvcnkiKTsKKyAgbG9nUHJvcGVydHkob3B0X3dyaXRhYmxlRGlyZWN0b3J5LCAid3JpdGFibGVEaXJlY3RvcnkiLCAiV3JpdGFibGUgRGlyZWN0b3J5Iik7CisgIGxvZ1Byb3BlcnR5KG9wdF91cGRhdGFibGVEaXJlY3RvcnksICJ1cGRhdGFibGVEaXJlY3RvcnkiLCAiVXBkYXRhYmxlIERpcmVjdG9yeSIpOworICBsb2dQcm9wZXJ0eShvcHRfcHJlZmVyZW5jZXNGaWxlLCAicHJlZmVyZW5jZXNGaWxlIiwgIlByZWZlcmVuY2VzIEZpbGUiKTsKKworICByZXNldFByZWZlcmVuY2VzKCk7CisgIGxvYWRQcmVmZXJlbmNlcygwKTsKKworICBpZiAob3B0X3Byb21wdFBhdHRlcm5zICYmICpvcHRfcHJvbXB0UGF0dGVybnMpIHsKKyAgICBpbnQgY291bnQ7CisgICAgY2hhciAqKnBhdHRlcm5zID0gc3BsaXRTdHJpbmcob3B0X3Byb21wdFBhdHRlcm5zLCBQQVJBTUVURVJfU0VQQVJBVE9SX0NIQVJBQ1RFUiwgJmNvdW50KTsKKworICAgIGlmIChwYXR0ZXJucykgeworICAgICAgZm9yIChpbnQgaW5kZXg9MDsgaW5kZXg8Y291bnQ7IGluZGV4Kz0xKSB7CisgICAgICAgIGlmICghYWRkUHJvbXB0UGF0dGVybihwYXR0ZXJuc1tpbmRleF0pKSBicmVhazsKKyAgICAgIH0KKworICAgICAgZGVhbGxvY2F0ZVN0cmluZ3MocGF0dGVybnMpOworICAgIH0KKyAgfQorCisgIHNldFRleHRBbmRDb250cmFjdGlvblRhYmxlcygpOworICBzZXRBdHRyaWJ1dGVzVGFibGUoKTsKKyAgc2V0S2V5Ym9hcmRUYWJsZSgpOworCisgIC8qIGluaXRpYWxpemUgc2NyZWVuIGRyaXZlciAqLworICBpZiAob3B0X3ZlcmlmeSkgeworICAgIGlmIChhY3RpdmF0ZVNjcmVlbkRyaXZlcigxKSkgZGVhY3RpdmF0ZVNjcmVlbkRyaXZlcigpOworICB9IGVsc2UgeworICAgIHNldE5vU2NyZWVuKCk7CisgICAgZW5hYmxlU2NyZWVuRHJpdmVyKCk7CisgIH0KKyAgCisgIC8qIFRoZSBkZXZpY2UocykgdGhlIGJyYWlsbGUgZGlzcGxheSBtaWdodCBiZSBjb25uZWN0ZWQgdG8uICovCisgIGlmICghKm9wdF9icmFpbGxlRGV2aWNlKSB7CisgICAgbG9nTWVzc2FnZShMT0dfRVJSLCBnZXR0ZXh0KCJicmFpbGxlIGRldmljZSBub3Qgc3BlY2lmaWVkIikpOworICAgIHJldHVybiBQUk9HX0VYSVRfU1lOVEFYOworICB9CisKKyAgY29uc3RydWN0QnJhaWxsZURpc3BsYXkoJmJybCk7CisgIGNoYW5nZUJyYWlsbGVEcml2ZXIob3B0X2JyYWlsbGVEcml2ZXIpOworICBjaGFuZ2VCcmFpbGxlUGFyYW1ldGVycyhvcHRfYnJhaWxsZVBhcmFtZXRlcnMpOworICBjaGFuZ2VCcmFpbGxlRGV2aWNlKG9wdF9icmFpbGxlRGV2aWNlKTsKKyAgYnJhaWxsZURyaXZlckNvbnN0cnVjdGVkID0gMDsKKyAgb25Qcm9ncmFtRXhpdCgiYnJhaWxsZS1kYXRhIiwgZXhpdEJyYWlsbGVEYXRhLCBOVUxMKTsKKworICBpZiAob3B0X3ZlcmlmeSkgeworICAgIGlmIChhY3RpdmF0ZUJyYWlsbGVEcml2ZXIoMSkpIGRlYWN0aXZhdGVCcmFpbGxlRHJpdmVyKCk7CisgIH0gZWxzZSB7CisgICAgZW5hYmxlQnJhaWxsZURyaXZlcigpOworICB9CisKKyNpZmRlZiBFTkFCTEVfU1BFRUNIX1NVUFBPUlQKKyAgY29uc3RydWN0U3BlZWNoU3ludGhlc2l6ZXIoJnNwayk7CisgIGNoYW5nZVNwZWVjaERyaXZlcihvcHRfc3BlZWNoRHJpdmVyKTsKKyAgY2hhbmdlU3BlZWNoUGFyYW1ldGVycyhvcHRfc3BlZWNoUGFyYW1ldGVycyk7CisgIG9uUHJvZ3JhbUV4aXQoInNwZWVjaC1kYXRhIiwgZXhpdFNwZWVjaERhdGEsIE5VTEwpOworCisgIGlmIChvcHRfdmVyaWZ5KSB7CisgICAgaWYgKGFjdGl2YXRlU3BlZWNoRHJpdmVyKDEpKSBkZWFjdGl2YXRlU3BlZWNoRHJpdmVyKCk7CisgIH0gZWxzZSB7CisgICAgZW5hYmxlU3BlZWNoRHJpdmVyKDEpOworICB9CisKKyAgLyogQ3JlYXRlIHRoZSBmaWxlIHN5c3RlbSBvYmplY3QgZm9yIHNwZWVjaCBpbnB1dC4gKi8KKyAgbG9nUHJvcGVydHkob3B0X3NwZWVjaElucHV0LCAic3BlZWNoSW5wdXQiLCAiU3BlZWNoIElucHV0Iik7CisgIGlmICghb3B0X3ZlcmlmeSkgeworICAgIGlmICgqb3B0X3NwZWVjaElucHV0KSB7CisgICAgICBzcGVlY2hJbnB1dE9iamVjdCA9IG5ld1NwZWVjaElucHV0T2JqZWN0KG9wdF9zcGVlY2hJbnB1dCk7CisgICAgICBvblByb2dyYW1FeGl0KCJzcGVlY2gtaW5wdXQiLCBleGl0U3BlZWNoSW5wdXQsIE5VTEwpOworICAgIH0KKyAgfQorI2VuZGlmIC8qIEVOQUJMRV9TUEVFQ0hfU1VQUE9SVCAqLworCisgIHN0YXJ0QXBpU2VydmVyKCk7CisKKyAgaWYgKCFvcHRfdmVyaWZ5KSBub3RpZnlTZXJ2aWNlUmVhZHkoKTsKKworICByZXR1cm4gb3B0X3ZlcmlmeT8gUFJPR19FWElUX0ZPUkNFOiBQUk9HX0VYSVRfU1VDQ0VTUzsKK30KKworc3RhdGljIGNoYXIgKmNvbmZpZ3VyZWRMb2NhbGUgPSAiIjsKKworc3RhdGljIGludAorY2hhbmdlTG9jYWxlIChjb25zdCBjaGFyICpsb2NhbGUpIHsKKyAgaWYgKGNoYW5nZU1lc3NhZ2VMb2NhbGUobG9jYWxlKSkgcmV0dXJuIDE7CisgIHNldGxvY2FsZShMQ19BTEwsIGNvbmZpZ3VyZWRMb2NhbGUpOworICByZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IFByb2ZpbGVQcm9wZXJ0eSBsYW5ndWFnZVByb2ZpbGVQcm9wZXJ0aWVzW10gPSB7CisgIHsgLm5hbWUgPSBXU19DKCJsb2NhbGUiKSwKKyAgICAuZGVmYXVsdFZhbHVlID0gJmNvbmZpZ3VyZWRMb2NhbGUsCisgICAgLmNoYW5nZSA9IGNoYW5nZUxvY2FsZQorICB9LAorCisjaWZkZWYgRU5BQkxFX1NQRUVDSF9TVVBQT1JUCisgIHsgLm5hbWUgPSBXU19DKCJzcGVlY2gtZHJpdmVyIiksCisgICAgLmRlZmF1bHRWYWx1ZSA9ICZvcHRfc3BlZWNoRHJpdmVyLAorICAgIC5jaGFuZ2UgPSBjaGFuZ2VTcGVlY2hEcml2ZXIKKyAgfSwKKworICB7IC5uYW1lID0gV1NfQygic3BlZWNoLXBhcmFtZXRlcnMiKSwKKyAgICAuZGVmYXVsdFZhbHVlID0gJm9wdF9zcGVlY2hQYXJhbWV0ZXJzLAorICAgIC5jaGFuZ2UgPSBjaGFuZ2VTcGVlY2hQYXJhbWV0ZXJzCisgIH0sCisjZW5kaWYgLyogRU5BQkxFX1NQRUVDSF9TVVBQT1JUICovCisKKyAgeyAubmFtZSA9IFdTX0MoInRleHQtdGFibGUiKSwKKyAgICAuZGVmYXVsdFZhbHVlID0gJm9wdF90ZXh0VGFibGUsCisgICAgLmNoYW5nZSA9IGNoYW5nZVRleHRUYWJsZQorICB9LAorCisgIHsgLm5hbWUgPSBXU19DKCJjb250cmFjdGlvbi10YWJsZSIpLAorICAgIC5kZWZhdWx0VmFsdWUgPSAmb3B0X2NvbnRyYWN0aW9uVGFibGUsCisgICAgLmNoYW5nZSA9IGNoYW5nZUNvbnRyYWN0aW9uVGFibGUKKyAgfSwKK307CisKK3N0YXRpYyBpbnQKK2JlZ2luTGFuZ3VhZ2VQcm9maWxlICh2b2lkKSB7CisjaWZkZWYgRU5BQkxFX1NQRUVDSF9TVVBQT1JUCisgIGRpc2FibGVTcGVlY2hEcml2ZXIoTlVMTCk7CisgIGF3YWl0QWN0aXZpdHlTdG9wcGVkKHNwZWVjaERyaXZlckFjdGl2aXR5KTsKKyNlbmRpZiAvKiBFTkFCTEVfU1BFRUNIX1NVUFBPUlQgKi8KKworICByZXR1cm4gMTsKK30KKworc3RhdGljIGludAorZW5kTGFuZ3VhZ2VQcm9maWxlICh2b2lkKSB7CisjaWZkZWYgRU5BQkxFX1NQRUVDSF9TVVBQT1JUCisgIGVuYWJsZVNwZWVjaERyaXZlcigwKTsKKyNlbmRpZiAvKiBFTkFCTEVfU1BFRUNIX1NVUFBPUlQgKi8KKworICBpZiAoYnJsLmtleVRhYmxlKSB7CisgICAgY2hhciAqcGF0aCA9IG1ha2VCcmFpbGxlS2V5VGFibGVQYXRoKCk7CisKKyAgICBpZiAocGF0aCkgeworICAgICAgZGlzYWJsZUJyYWlsbGVIZWxwUGFnZSgpOworICAgICAgbWFrZUJyYWlsbGVIZWxwUGFnZShwYXRoKTsKKyAgICAgIGZyZWUocGF0aCk7CisgICAgfQorICB9CisKKyAgaWYgKGtleWJvYXJkVGFibGUpIHsKKyAgICBkaXNhYmxlS2V5Ym9hcmRIZWxwUGFnZSgpOworICAgIG1ha2VLZXlib2FyZEhlbHBQYWdlKCk7CisgIH0KKworICByZXR1cm4gMTsKK30KKworY29uc3QgUHJvZmlsZURlc2NyaXB0b3IgbGFuZ3VhZ2VQcm9maWxlID0geworICAuY2F0ZWdvcnkgPSBzdHJ0ZXh0KCJMYW5ndWFnZSIpLAorICAuZXh0ZW5zaW9uID0gTEFOR1VBR0VfUFJPRklMRV9FWFRFTlNJT04sCisKKyAgLmJlZ2luID0gYmVnaW5MYW5ndWFnZVByb2ZpbGUsCisgIC5lbmQgPSBlbmRMYW5ndWFnZVByb2ZpbGUsCisKKyAgLnByb3BlcnRpZXMgPSB7CisgICAgLmFycmF5ID0gbGFuZ3VhZ2VQcm9maWxlUHJvcGVydGllcywKKyAgICAuY291bnQgPSBBUlJBWV9DT1VOVChsYW5ndWFnZVByb2ZpbGVQcm9wZXJ0aWVzKQorICB9Cit9OwpkaWZmIC0tZ2l0IGEvUHJvZ3JhbXMvY29yZS5jIGIvUHJvZ3JhbXMvY29yZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhmZDA4YTcKLS0tIC9kZXYvbnVsbAorKysgYi9Qcm9ncmFtcy9jb3JlLmMKQEAgLTAsMCArMSwxNjQ1IEBACisvKgorICogQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyAqICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyAqCisgKiBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorICoKKyAqIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyAqCisgKiBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisgKi8KKworI2luY2x1ZGUgInByb2xvZ3VlLmgiCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPGN0eXBlLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDx0aW1lLmg+CisKKyNpZmRlZiBIQVZFX0xBTkdJTkZPX0gKKyNpbmNsdWRlIDxsYW5naW5mby5oPgorI2VuZGlmIC8qIEhBVkVfTEFOR0lORk9fSCAqLworCisjaWZkZWYgSEFWRV9TWVNfV0FJVF9ICisjaW5jbHVkZSA8c3lzL3dhaXQuaD4KKyNlbmRpZiAvKiBIQVZFX1NZU19XQUlUX0ggKi8KKworI2luY2x1ZGUgInBhcmFtZXRlcnMuaCIKKyNpbmNsdWRlICJlbWJlZC5oIgorI2luY2x1ZGUgImxvZy5oIgorI2luY2x1ZGUgImFsZXJ0LmgiCisjaW5jbHVkZSAic3RyZm10LmgiCisKKyNpbmNsdWRlICJjbWRfcXVldWUuaCIKKyNpbmNsdWRlICJjbWRfY2xpcGJvYXJkLmgiCisjaW5jbHVkZSAiY21kX2N1c3RvbS5oIgorI2luY2x1ZGUgImNtZF9pbnB1dC5oIgorI2luY2x1ZGUgImNtZF9rZXljb2Rlcy5oIgorI2luY2x1ZGUgImNtZF9sZWFybi5oIgorI2luY2x1ZGUgImNtZF9taXNjZWxsYW5lb3VzLmgiCisjaW5jbHVkZSAiY21kX25hdmlnYXRpb24uaCIKKyNpbmNsdWRlICJjbWRfb3ZlcnJpZGUuaCIKKyNpbmNsdWRlICJjbWRfcHJlZmVyZW5jZXMuaCIKKyNpbmNsdWRlICJjbWRfc3BlZWNoLmgiCisjaW5jbHVkZSAiY21kX3RvZ2dsZS5oIgorI2luY2x1ZGUgImNtZF90b3VjaC5oIgorCisjaW5jbHVkZSAiYXN5bmNfaGFuZGxlLmgiCisjaW5jbHVkZSAiYXN5bmNfd2FpdC5oIgorI2luY2x1ZGUgImFzeW5jX2FsYXJtLmgiCisjaW5jbHVkZSAiYXN5bmNfZXZlbnQuaCIKKyNpbmNsdWRlICJhc3luY19zaWduYWwuaCIKKyNpbmNsdWRlICJhc3luY190YXNrLmgiCisKKyNpbmNsdWRlICJicmxfY21kcy5oIgorI2luY2x1ZGUgInRpbWluZy5oIgorI2luY2x1ZGUgImN0Yi5oIgorI2luY2x1ZGUgInJvdXRpbmcuaCIKKyNpbmNsdWRlICJ1dGY4LmgiCisjaW5jbHVkZSAidW5pY29kZS5oIgorI2luY2x1ZGUgInNjci5oIgorI2luY2x1ZGUgInVwZGF0ZS5oIgorI2luY2x1ZGUgInNlcy5oIgorI2luY2x1ZGUgImJybC5oIgorI2luY2x1ZGUgImJybF91dGlscy5oIgorI2luY2x1ZGUgInByZWZzLmgiCisjaW5jbHVkZSAiYXBpX2NvbnRyb2wuaCIKKyNpbmNsdWRlICJjb3JlLmgiCisKKyNpZmRlZiBFTkFCTEVfU1BFRUNIX1NVUFBPUlQKKyNpbmNsdWRlICJzcGsuaCIKKyNlbmRpZiAvKiBFTkFCTEVfU1BFRUNIX1NVUFBPUlQgKi8KKworQnJhaWxsZURpc3BsYXkgYnJsOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIEZvciB0aGUgQnJhaWxsZSByb3V0aW5lcyAqLworCitpbnQKK2hhdmVCcmFpbGxlRGlzcGxheSAodm9pZCkgeworICByZXR1cm4gYnJhaWxsZS0+ZGVmaW5pdGlvbi5jb2RlICE9IG5vQnJhaWxsZS5kZWZpbml0aW9uLmNvZGU7Cit9CisKK1NjcmVlbkRlc2NyaXB0aW9uIHNjcjsKK1Nlc3Npb25FbnRyeSAqc2VzID0gTlVMTDsKKwordW5zaWduZWQgY2hhciBpbmZvTW9kZSA9IDA7CisKK3Vuc2lnbmVkIGludCB0ZXh0U3RhcnQ7Cit1bnNpZ25lZCBpbnQgdGV4dENvdW50OwordW5zaWduZWQgY2hhciB0ZXh0TWF4aW1pemVkID0gMDsKKwordW5zaWduZWQgaW50IHN0YXR1c1N0YXJ0OwordW5zaWduZWQgaW50IHN0YXR1c0NvdW50OworCit1bnNpZ25lZCBpbnQgZnVsbFdpbmRvd1NoaWZ0OyAgICAgICAgICAgICAgICAvKiBGdWxsIHdpbmRvdyBob3Jpem9udGFsIGRpc3RhbmNlICovCit1bnNpZ25lZCBpbnQgaGFsZldpbmRvd1NoaWZ0OyAgICAgICAgICAgICAgICAvKiBIYWxmIHdpbmRvdyBob3Jpem9udGFsIGRpc3RhbmNlICovCit1bnNpZ25lZCBpbnQgdmVydGljYWxXaW5kb3dTaGlmdDsgICAgICAgICAgICAgICAgLyogV2luZG93IHZlcnRpY2FsIGRpc3RhbmNlICovCisKK2ludAoraXNDb250cmFjdGVkQnJhaWxsZSAodm9pZCkgeworICByZXR1cm4gKHByZWZzLmJyYWlsbGVWYXJpYW50ID09IGJ2Q29udHJhY3RlZDYpCisgICAgICB8fCAocHJlZnMuYnJhaWxsZVZhcmlhbnQgPT0gYnZDb250cmFjdGVkOCkKKyAgICAgIDsKK30KKworaW50Citpc1NpeERvdENvbXB1dGVyQnJhaWxsZSAodm9pZCkgeworICByZXR1cm4gKHByZWZzLmJyYWlsbGVWYXJpYW50ID09IGJ2Q29tcHV0ZXI2KQorICAgICAgfHwgKHByZWZzLmJyYWlsbGVWYXJpYW50ID09IGJ2Q29udHJhY3RlZDYpCisgICAgICA7Cit9CisKK3N0YXRpYyB2b2lkCitzZXRCcmFpbGxlVmFyaWFudCAoaW50IGNvbnRyYWN0ZWQsIGludCBzaXhEb3QpIHsKKyAgcHJlZnMuYnJhaWxsZVZhcmlhbnQgPSBjb250cmFjdGVkPworICAgICAgICAgICAgICAgICAgICAgICAgIChzaXhEb3Q/IGJ2Q29udHJhY3RlZDY6IGJ2Q29udHJhY3RlZDgpOgorICAgICAgICAgICAgICAgICAgICAgICAgIChzaXhEb3Q/IGJ2Q29tcHV0ZXI2OiBidkNvbXB1dGVyOCk7Cit9CisKK3ZvaWQKK3NldENvbnRyYWN0ZWRCcmFpbGxlIChpbnQgY29udHJhY3RlZCkgeworICBzZXRCcmFpbGxlVmFyaWFudChjb250cmFjdGVkLCBpc1NpeERvdENvbXB1dGVyQnJhaWxsZSgpKTsKKyAgYXBpLnVwZGF0ZVBhcmFtZXRlcihCUkxBUElfUEFSQU1fTElURVJBUllfQlJBSUxMRSwgMCk7Cit9CisKK3ZvaWQKK3NldFNpeERvdENvbXB1dGVyQnJhaWxsZSAoaW50IHNpeERvdCkgeworICBzZXRCcmFpbGxlVmFyaWFudChpc0NvbnRyYWN0ZWRCcmFpbGxlKCksIHNpeERvdCk7CisgIGFwaS51cGRhdGVQYXJhbWV0ZXIoQlJMQVBJX1BBUkFNX0NPTVBVVEVSX0JSQUlMTEVfQ0VMTF9TSVpFLCAwKTsKK30KKwordm9pZAorb25CcmFpbGxlVmFyaWFudFVwZGF0ZWQgKHZvaWQpIHsKKyAgYXBpLnVwZGF0ZVBhcmFtZXRlcihCUkxBUElfUEFSQU1fQ09NUFVURVJfQlJBSUxMRV9DRUxMX1NJWkUsIDApOworICBhcGkudXBkYXRlUGFyYW1ldGVyKEJSTEFQSV9QQVJBTV9MSVRFUkFSWV9CUkFJTExFLCAwKTsKK30KKworaW50CitzdGFydFNjcmVlbkN1cnNvclJvdXRpbmcgKGludCBjb2x1bW4sIGludCByb3cpIHsKKyAgaWYgKCFyb3V0ZVNjcmVlbkN1cnNvcihjb2x1bW4sIHJvdywgc2NyLm51bWJlcikpIHJldHVybiAwOworICBpZiAoaXNSb3V0aW5nKCkpIGFsZXJ0KEFMRVJUX1JPVVRJTkdfU1RBUlRFRCk7CisgIHJldHVybiAxOworfQorCitpbnQKK2JyaW5nU2NyZWVuQ3Vyc29yIChpbnQgY29sdW1uLCBpbnQgcm93KSB7CisgIGlmICghc3RhcnRTY3JlZW5DdXJzb3JSb3V0aW5nKGNvbHVtbiwgcm93KSkgcmV0dXJuIDA7CisgIFJvdXRpbmdTdGF0dXMgc3RhdHVzID0gZ2V0Um91dGluZ1N0YXR1cygxKTsKKworICBpZiAoc3RhdHVzICE9IFJPVVRJTkdfU1RBVFVTX05PTkUpIHsKKyAgICBhbGVydCgKKyAgICAgIChzdGF0dXMgPiBST1VUSU5HX1NUQVRVU19DT0xVTU4pPyBBTEVSVF9ST1VUSU5HX0ZBSUxFRDoKKyAgICAgIEFMRVJUX1JPVVRJTkdfU1VDQ0VFREVECisgICAgKTsKKworICAgIHNlcy0+c3BreCA9IHNjci5wb3N4OworICAgIHNlcy0+c3BreSA9IHNjci5wb3N5OworICB9CisKKyAgcmV0dXJuIDE7Cit9CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgaW50IG1vdGlvbkNvbHVtbjsKKyAgaW50IG1vdGlvblJvdzsKKworICBpbnQgc3BlZWNoQ29sdW1uOworICBpbnQgc3BlZWNoUm93OworfSBQcmVjb21tYW5kU3RhdGU7CisKK3N0YXRpYyB2b2lkICoKK3ByZXByb2Nlc3NDb21tYW5kICh2b2lkKSB7CisgIFByZWNvbW1hbmRTdGF0ZSAqcHJlOworCisgIGlmICgocHJlID0gbWFsbG9jKHNpemVvZigqcHJlKSkpKSB7CisgICAgbWVtc2V0KHByZSwgMCwgc2l6ZW9mKCpwcmUpKTsKKworICAgIHByZS0+bW90aW9uQ29sdW1uID0gc2VzLT53aW54OworICAgIHByZS0+bW90aW9uUm93ID0gc2VzLT53aW55OworCisgICAgcHJlLT5zcGVlY2hDb2x1bW4gPSBzZXMtPnNwa3g7CisgICAgcHJlLT5zcGVlY2hSb3cgPSBzZXMtPnNwa3k7CisKKyAgICBzdXNwZW5kVXBkYXRlcygpOworICAgIHJldHVybiBwcmU7CisgIH0gZWxzZSB7CisgICAgbG9nTWFsbG9jRXJyb3IoKTsKKyAgfQorCisgIHJldHVybiBOVUxMOworfQorCitzdGF0aWMgdm9pZAorcG9zdHByb2Nlc3NDb21tYW5kICh2b2lkICpzdGF0ZSwgaW50IGNvbW1hbmQsIGNvbnN0IENvbW1hbmRFbnRyeSAqY21kLCBpbnQgaGFuZGxlZCkgeworICBQcmVjb21tYW5kU3RhdGUgKnByZSA9IHN0YXRlOworCisgIGlmIChwcmUpIHsKKyAgICByZXN1bWVVcGRhdGVzKDApOworICAgIGlmIChoYW5kbGVkKSBzY2hlZHVsZVVwZGF0ZSgiY29tbWFuZCBleGVjdXRlZCIpOworCisgICAgaWYgKChzZXMtPndpbnggIT0gcHJlLT5tb3Rpb25Db2x1bW4pIHx8IChzZXMtPndpbnkgIT0gcHJlLT5tb3Rpb25Sb3cpKSB7CisgICAgICAvKiBUaGUgYnJhaWxsZSB3aW5kb3cgaGFzIGJlZW4gbWFudWFsbHkgbW92ZWQuICovCisgICAgICByZXBvcnRCcmFpbGxlV2luZG93TW92ZWQoKTsKKworICAgICAgc2VzLT5tb3R4ID0gc2VzLT53aW54OworICAgICAgc2VzLT5tb3R5ID0gc2VzLT53aW55OworCisgICAgICBpc0NvbnRyYWN0ZWQgPSAwOworICAgIH0KKworICAgIGlmIChjbWQpIHsKKyAgICAgIGlmIChjbWQtPmlzTW90aW9uKSB7CisgICAgICAgIGlmIChjb21tYW5kICYgQlJMX0ZMR19NT1RJT05fUk9VVEUpIHsKKyAgICAgICAgICBpZiAoKHNlcy0+c3BreCAhPSBwcmUtPnNwZWVjaENvbHVtbikgfHwgKHNlcy0+c3BreSAhPSBwcmUtPnNwZWVjaFJvdykpIHsKKyAgICAgICAgICAgIC8qIFRoZSBzcGVlY2ggY3Vyc29yIGhhcyBtb3ZlZC4gKi8KKyAgICAgICAgICAgIGJyaW5nU2NyZWVuQ3Vyc29yKHNlcy0+c3BreCwgc2VzLT5zcGt5KTsKKyAgICAgICAgICB9IGVsc2UgaWYgKGNvbW1hbmQgJiBCUkxfTVNLX0JMSykgeworICAgICAgICAgICAgYnJpbmdTY3JlZW5DdXJzb3IoKGNvbW1hbmQgJiBCUkxfTVNLX0FSRyksIHNlcy0+d2lueSk7CisgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGludCBsZWZ0ID0gc2VzLT53aW54OworICAgICAgICAgICAgaW50IHJpZ2h0ID0gTUlOKGxlZnQrdGV4dENvdW50LCBzY3IuY29scykgLSAxOworCisgICAgICAgICAgICBpbnQgdG9wID0gc2VzLT53aW55OworICAgICAgICAgICAgaW50IGJvdHRvbSA9IE1JTih0b3ArYnJsLnRleHRSb3dzLCBzY3Iucm93cykgLSAxOworCisgICAgICAgICAgICBpZiAoKHNjci5wb3N4IDwgbGVmdCkgfHwgKHNjci5wb3N4ID4gcmlnaHQpIHx8CisgICAgICAgICAgICAgICAgKHNjci5wb3N5IDwgdG9wKSB8fCAoc2NyLnBvc3kgPiBib3R0b20pKSB7CisgICAgICAgICAgICAgIGJyaW5nU2NyZWVuQ3Vyc29yKGxlZnQsIHRvcCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICB9CisgICAgfQorCisgICAgZnJlZShwcmUpOworICB9Cit9CisKK3N0YXRpYyBpbnQKK2hhbmRsZVVuaGFuZGxlZENvbW1hbmRzIChpbnQgY29tbWFuZCwgdm9pZCAqZGF0YSkgeworICBzd2l0Y2ggKGNvbW1hbmQgJiBCUkxfTVNLX0NNRCkgeworICAgIGNhc2UgQlJMX0NNRF9OT09QOiAgICAgICAgLyogZG8gbm90aGluZyBidXQgbG9vcCAqLworICAgICAgYnJlYWs7CisKKyAgICBkZWZhdWx0OgorICAgICAgYWxlcnQoQUxFUlRfQ09NTUFORF9SRUpFQ1RFRCk7CisgICAgICByZXR1cm4gMDsKKyAgfQorCisgIHJldHVybiAxOworfQorCitzdGF0aWMgaW50CitoYW5kbGVBcGlDb21tYW5kcyAoaW50IGNvbW1hbmQsIHZvaWQgKmRhdGEpIHsKKyAgcmV0dXJuIGFwaS5oYW5kbGVDb21tYW5kKGNvbW1hbmQpOworfQorCitzdGF0aWMgaW50CithZGRTY3JlZW5Db21tYW5kcyAodm9pZCkgeworICByZXR1cm4gcHVzaENvbW1hbmRIYW5kbGVyKCJzY3JlZW4iLCBLVEJfQ1RYX0RFRkFVTFQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlU2NyZWVuQ29tbWFuZHMsIE5VTEwsIE5VTEwpOworfQorCitzdGF0aWMgaW50CithZGRDb21tYW5kcyAodm9pZCkgeworICBpZiAoIXB1c2hDb21tYW5kRW52aXJvbm1lbnQoIm1haW4iLCBwcmVwcm9jZXNzQ29tbWFuZCwgcG9zdHByb2Nlc3NDb21tYW5kKSkgcmV0dXJuIDA7CisKKyAgcHVzaENvbW1hbmRIYW5kbGVyKCJ1bmhhbmRsZWQiLCBLVEJfQ1RYX0RFRkFVTFQsCisgICAgICAgICAgICAgICAgICAgICBoYW5kbGVVbmhhbmRsZWRDb21tYW5kcywgTlVMTCwgTlVMTCk7CisKKyAgYWRkTWlzY2VsbGFuZW91c0NvbW1hbmRzKCk7CisgIGFkZExlYXJuQ29tbWFuZHMoKTsKKyAgYWRkU3BlZWNoQ29tbWFuZHMoKTsKKyAgYWRkQ2xpcGJvYXJkQ29tbWFuZHMoKTsKKyAgYWRkUHJlZmVyZW5jZXNDb21tYW5kcygpOworICBhZGRUb2dnbGVDb21tYW5kcygpOworICBhZGRUb3VjaENvbW1hbmRzKCk7CisgIGFkZEtleWNvZGVDb21tYW5kcygpOworICBhZGRJbnB1dENvbW1hbmRzKCk7CisgIGFkZE5hdmlnYXRpb25Db21tYW5kcygpOworCisgIGFkZE92ZXJyaWRlQ29tbWFuZHMoKTsKKyAgYWRkU2NyZWVuQ29tbWFuZHMoKTsKKyAgYWRkQ3VzdG9tQ29tbWFuZHMoKTsKKworICBwdXNoQ29tbWFuZEhhbmRsZXIoIkFQSSIsIEtUQl9DVFhfREVGQVVMVCwKKyAgICAgICAgICAgICAgICAgICAgIGhhbmRsZUFwaUNvbW1hbmRzLCBOVUxMLCBOVUxMKTsKKworICByZXR1cm4gMTsKK30KKworc3RhdGljIEFzeW5jSGFuZGxlIGRlbGF5ZWRDdXJzb3JUcmFja2luZ0FsYXJtOworCitBU1lOQ19BTEFSTV9DQUxMQkFDSyhoYW5kbGVEZWxheWVkQ3Vyc29yVHJhY2tpbmdBbGFybSkgeworICBhc3luY0Rpc2NhcmRIYW5kbGUoZGVsYXllZEN1cnNvclRyYWNraW5nQWxhcm0pOworICBkZWxheWVkQ3Vyc29yVHJhY2tpbmdBbGFybSA9IE5VTEw7CisKKyAgc2VzLT50cmt4ID0gc2VzLT5kY3R4OworICBzZXMtPnRya3kgPSBzZXMtPmRjdHk7CisKKyAgc2VzLT5kY3R4ID0gLTE7CisgIHNlcy0+ZGN0eSA9IC0xOworCisgIHNjaGVkdWxlVXBkYXRlKCJkZWxheWVkIGN1cnNvciB0cmFja2luZyIpOworfQorCit2b2lkCitjYW5jZWxEZWxheWVkQ3Vyc29yVHJhY2tpbmdBbGFybSAodm9pZCkgeworICBpZiAoZGVsYXllZEN1cnNvclRyYWNraW5nQWxhcm0pIHsKKyAgICBhc3luY0NhbmNlbFJlcXVlc3QoZGVsYXllZEN1cnNvclRyYWNraW5nQWxhcm0pOworICAgIGRlbGF5ZWRDdXJzb3JUcmFja2luZ0FsYXJtID0gTlVMTDsKKyAgfQorfQorCitzdGF0aWMgdm9pZAorc2V0U2Vzc2lvbkVudHJ5ICh2b2lkKSB7CisgIGRlc2NyaWJlU2NyZWVuKCZzY3IpOworICBpZiAoc2NyLm51bWJlciA9PSAtMSkgc2NyLm51bWJlciA9IHVzZXJWaXJ0dWFsVGVybWluYWwoMCk7CisKKyAgeworICAgIHR5cGVkZWYgZW51bSB7U0FNRSwgRElGRkVSRU5ULCBGSVJTVH0gU3RhdGU7CisgICAgU3RhdGUgc3RhdGUgPSAoIXNlcyk/IEZJUlNUOgorICAgICAgICAgICAgICAgICAgKHNjci5udW1iZXIgPT0gc2VzLT5udW1iZXIpPyBTQU1FOgorICAgICAgICAgICAgICAgICAgRElGRkVSRU5UOworCisgICAgaWYgKHN0YXRlICE9IFNBTUUpIHsKKyAgICAgIGNhbmNlbERlbGF5ZWRDdXJzb3JUcmFja2luZ0FsYXJtKCk7CisgICAgICBzZXMgPSBnZXRTZXNzaW9uRW50cnkoc2NyLm51bWJlcik7CisKKyAgICAgIGlmIChzdGF0ZSA9PSBGSVJTVCkgeworICAgICAgICBhZGRDb21tYW5kcygpOworICAgICAgfQorICAgIH0KKyAgfQorfQorCit2b2lkCit1cGRhdGVTZXNzaW9uQXR0cmlidXRlcyAodm9pZCkgeworICBzZXRTZXNzaW9uRW50cnkoKTsKKworICB7CisgICAgaW50IG1heGltdW0gPSBNQVgoc2NyLnJvd3MtMSwgMCk7CisgICAgaW50ICp0YWJsZVtdID0geyZzZXMtPndpbnksICZzZXMtPm1vdHksIE5VTEx9OworICAgIGludCAqKnZhbHVlID0gdGFibGU7CisKKyAgICB3aGlsZSAoKnZhbHVlKSB7CisgICAgICBpZiAoKip2YWx1ZSA+IG1heGltdW0pICoqdmFsdWUgPSBtYXhpbXVtOworICAgICAgdmFsdWUgKz0gMTsKKyAgICB9CisgIH0KKworICB7CisgICAgaW50IG1heGltdW0gPSBNQVgoc2NyLmNvbHMtMSwgMCk7CisgICAgaW50ICp0YWJsZVtdID0geyZzZXMtPndpbngsICZzZXMtPm1vdHgsIE5VTEx9OworICAgIGludCAqKnZhbHVlID0gdGFibGU7CisKKyAgICB3aGlsZSAoKnZhbHVlKSB7CisgICAgICBpZiAoKip2YWx1ZSA+IG1heGltdW0pICoqdmFsdWUgPSBtYXhpbXVtOworICAgICAgdmFsdWUgKz0gMTsKKyAgICB9CisgIH0KK30KKwordm9pZAorZmlsbFN0YXR1c1NlcGFyYXRvciAod2NoYXJfdCAqdGV4dCwgdW5zaWduZWQgY2hhciAqZG90cykgeworICBpZiAoKHByZWZzLnN0YXR1c1NlcGFyYXRvciAhPSBzc05vbmUpICYmIChzdGF0dXNDb3VudCA+IDApKSB7CisgICAgaW50IG9uUmlnaHQgPSBzdGF0dXNTdGFydCA+IDA7CisgICAgdW5zaWduZWQgaW50IGNvbHVtbiA9IChvblJpZ2h0PyBzdGF0dXNTdGFydDogdGV4dFN0YXJ0KSAtIDE7CisKKyAgICB3Y2hhcl90IHRleHRTZXBhcmF0b3I7CisjaWZkZWYgSEFWRV9XQ0hBUl9IIAorICAgIGNvbnN0IHdjaGFyX3QgdGV4dFNlcGFyYXRvcl9sZWZ0ICA9IDBYMjNCODsgLyogTEVGVCBWRVJUSUNBTCBCT1ggTElORSAqLworICAgIGNvbnN0IHdjaGFyX3QgdGV4dFNlcGFyYXRvcl9yaWdodCA9IDBYMjNCOTsgLyogUklHSFQgVkVSVElDQUwgQk9YIExJTkUgKi8KKyAgICBjb25zdCB3Y2hhcl90IHRleHRTZXBhcmF0b3JfYmxvY2sgPSAwWDI1MDM7IC8qIEJPWCBEUkFXSU5HUyBIRUFWWSBWRVJUSUNBTCAqLworI2Vsc2UgLyogSEFWRV9XQ0hBUl9IICovCisgICAgY29uc3Qgd2NoYXJfdCB0ZXh0U2VwYXJhdG9yX2xlZnQgID0gMFg1QjsgLyogTEVGVCBTUVVBUkUgQlJBQ0tFVCAqLworICAgIGNvbnN0IHdjaGFyX3QgdGV4dFNlcGFyYXRvcl9yaWdodCA9IDBYNUQ7IC8qIFJJR0hUIFNRVUFSRSBCUkFDS0VUICovCisgICAgY29uc3Qgd2NoYXJfdCB0ZXh0U2VwYXJhdG9yX2Jsb2NrID0gMFg3QzsgLyogVkVSVElDQUwgTElORSAqLworI2VuZGlmIC8qIEhBVkVfV0NIQVJfSCAqLworCisgICAgdW5zaWduZWQgY2hhciBkb3RzU2VwYXJhdG9yOworICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgZG90c1NlcGFyYXRvcl9sZWZ0ID0gQlJMX0RPVDEgfCBCUkxfRE9UMiB8IEJSTF9ET1QzIHwgQlJMX0RPVDc7CisgICAgY29uc3QgdW5zaWduZWQgY2hhciBkb3RzU2VwYXJhdG9yX3JpZ2h0ID0gQlJMX0RPVDQgfCBCUkxfRE9UNSB8IEJSTF9ET1Q2IHwgQlJMX0RPVDg7CisgICAgY29uc3QgdW5zaWduZWQgY2hhciBkb3RzU2VwYXJhdG9yX2Jsb2NrID0gZG90c1NlcGFyYXRvcl9sZWZ0IHwgZG90c1NlcGFyYXRvcl9yaWdodDsKKworICAgIHRleHQgKz0gY29sdW1uOworICAgIGRvdHMgKz0gY29sdW1uOworCisgICAgc3dpdGNoIChwcmVmcy5zdGF0dXNTZXBhcmF0b3IpIHsKKyAgICAgIGNhc2Ugc3NCbG9jazoKKyAgICAgICAgdGV4dFNlcGFyYXRvciA9IHRleHRTZXBhcmF0b3JfYmxvY2s7CisgICAgICAgIGRvdHNTZXBhcmF0b3IgPSBkb3RzU2VwYXJhdG9yX2Jsb2NrOworICAgICAgICBicmVhazsKKworICAgICAgY2FzZSBzc1N0YXR1c1NpZGU6CisgICAgICAgIHRleHRTZXBhcmF0b3IgPSBvblJpZ2h0PyB0ZXh0U2VwYXJhdG9yX3JpZ2h0OiB0ZXh0U2VwYXJhdG9yX2xlZnQ7CisgICAgICAgIGRvdHNTZXBhcmF0b3IgPSBvblJpZ2h0PyBkb3RzU2VwYXJhdG9yX3JpZ2h0OiBkb3RzU2VwYXJhdG9yX2xlZnQ7CisgICAgICAgIGJyZWFrOworCisgICAgICBjYXNlIHNzVGV4dFNpZGU6CisgICAgICAgIHRleHRTZXBhcmF0b3IgPSBvblJpZ2h0PyB0ZXh0U2VwYXJhdG9yX2xlZnQ6IHRleHRTZXBhcmF0b3JfcmlnaHQ7CisgICAgICAgIGRvdHNTZXBhcmF0b3IgPSBvblJpZ2h0PyBkb3RzU2VwYXJhdG9yX2xlZnQ6IGRvdHNTZXBhcmF0b3JfcmlnaHQ7CisgICAgICAgIGJyZWFrOworCisgICAgICBkZWZhdWx0OgorICAgICAgICB0ZXh0U2VwYXJhdG9yID0gV0NfQygnICcpOworICAgICAgICBkb3RzU2VwYXJhdG9yID0gMDsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgeworICAgICAgdW5zaWduZWQgaW50IHJvdzsKKyAgICAgIGZvciAocm93PTA7IHJvdzxicmwudGV4dFJvd3M7IHJvdys9MSkgeworICAgICAgICAqdGV4dCA9IHRleHRTZXBhcmF0b3I7CisgICAgICAgIHRleHQgKz0gYnJsLnRleHRDb2x1bW5zOworCisgICAgICAgICpkb3RzID0gZG90c1NlcGFyYXRvcjsKKyAgICAgICAgZG90cyArPSBicmwudGV4dENvbHVtbnM7CisgICAgICB9CisgICAgfQorICB9Cit9CisKK2ludAord3JpdGVCcmFpbGxlQ2hhcmFjdGVycyAoY29uc3QgY2hhciAqbW9kZSwgY29uc3Qgd2NoYXJfdCAqY2hhcmFjdGVycywgc2l6ZV90IGxlbmd0aCkgeworICB3Y2hhcl90IHRleHRCdWZmZXJbYnJsLnRleHRDb2x1bW5zICogYnJsLnRleHRSb3dzXTsKKworICBmaWxsVGV4dFJlZ2lvbih0ZXh0QnVmZmVyLCBicmwuYnVmZmVyLAorICAgICAgICAgICAgICAgICB0ZXh0U3RhcnQsIHRleHRDb3VudCwgYnJsLnRleHRDb2x1bW5zLCBicmwudGV4dFJvd3MsCisgICAgICAgICAgICAgICAgIGNoYXJhY3RlcnMsIGxlbmd0aCk7CisKKyAgeworICAgIHNpemVfdCBtb2RlTGVuZ3RoID0gbW9kZT8gY291bnRVdGY4Q2hhcmFjdGVycyhtb2RlKTogMDsKKyAgICB3Y2hhcl90IG1vZGVDaGFyYWN0ZXJzW21vZGVMZW5ndGggKyAxXTsKKyAgICBtYWtlV2NoYXJzRnJvbVV0ZjgobW9kZSwgbW9kZUNoYXJhY3RlcnMsIEFSUkFZX0NPVU5UKG1vZGVDaGFyYWN0ZXJzKSk7CisgICAgZmlsbFRleHRSZWdpb24odGV4dEJ1ZmZlciwgYnJsLmJ1ZmZlciwKKyAgICAgICAgICAgICAgICAgICBzdGF0dXNTdGFydCwgc3RhdHVzQ291bnQsIGJybC50ZXh0Q29sdW1ucywgYnJsLnRleHRSb3dzLAorICAgICAgICAgICAgICAgICAgIG1vZGVDaGFyYWN0ZXJzLCBtb2RlTGVuZ3RoKTsKKyAgfQorCisgIGZpbGxTdGF0dXNTZXBhcmF0b3IodGV4dEJ1ZmZlciwgYnJsLmJ1ZmZlcik7CisKKyAgcmV0dXJuIHdyaXRlQnJhaWxsZVdpbmRvdygmYnJsLCB0ZXh0QnVmZmVyLCAwKTsKK30KKworaW50Cit3cml0ZUJyYWlsbGVUZXh0IChjb25zdCBjaGFyICptb2RlLCBjb25zdCBjaGFyICp0ZXh0KSB7CisgIHNpemVfdCBjb3VudCA9IGNvdW50VXRmOENoYXJhY3RlcnModGV4dCkgKyAxOworICB3Y2hhcl90IGNoYXJhY3RlcnNbY291bnRdOworICBzaXplX3QgbGVuZ3RoID0gbWFrZVdjaGFyc0Zyb21VdGY4KHRleHQsIGNoYXJhY3RlcnMsIGNvdW50KTsKKyAgcmV0dXJuIHdyaXRlQnJhaWxsZUNoYXJhY3RlcnMobW9kZSwgY2hhcmFjdGVycywgbGVuZ3RoKTsKK30KKworaW50CitzaG93QnJhaWxsZVRleHQgKGNvbnN0IGNoYXIgKm1vZGUsIGNvbnN0IGNoYXIgKnRleHQsIGludCBtaW5pbXVtRGVsYXkpIHsKKyAgaW50IG9rID0gd3JpdGVCcmFpbGxlVGV4dChtb2RlLCB0ZXh0KTsKKyAgZHJhaW5CcmFpbGxlT3V0cHV0KCZicmwsIG1pbmltdW1EZWxheSk7CisgIHJldHVybiBvazsKK30KKworc3RhdGljIGlubGluZSBjb25zdCBjaGFyICoKK2dldE1lcmlkaWFuU3RyaW5nX2FtICh2b2lkKSB7CisjaWZkZWYgSEFWRV9OTF9MQU5HSU5GTworICByZXR1cm4gbmxfbGFuZ2luZm8oQU1fU1RSKTsKKyNlbHNlIC8qIEhBVkVfTkxfTEFOR0lORk8gKi8KKyAgcmV0dXJuICJhbSI7CisjZW5kaWYgLyogSEFWRV9OTF9MQU5HSU5GTyAqLworfQorCitzdGF0aWMgaW5saW5lIGNvbnN0IGNoYXIgKgorZ2V0TWVyaWRpYW5TdHJpbmdfcG0gKHZvaWQpIHsKKyNpZmRlZiBIQVZFX05MX0xBTkdJTkZPCisgIHJldHVybiBubF9sYW5naW5mbyhQTV9TVFIpOworI2Vsc2UgLyogSEFWRV9OTF9MQU5HSU5GTyAqLworICByZXR1cm4gInBtIjsKKyNlbmRpZiAvKiBIQVZFX05MX0xBTkdJTkZPICovCit9CisKK3N0YXRpYyBjb25zdCBjaGFyICoKK2dldE1lcmlkaWFuU3RyaW5nICh1aW50OF90ICpob3VyKSB7CisgIGNvbnN0IGNoYXIgKnN0cmluZyA9IE5VTEw7CisKKyAgc3dpdGNoIChwcmVmcy50aW1lRm9ybWF0KSB7CisgICAgY2FzZSB0ZjEySG91cjogeworICAgICAgY29uc3QgdWludDhfdCB0d2VsdmUgPSAxMjsKKworICAgICAgc3RyaW5nID0gKCpob3VyIDwgdHdlbHZlKT8gZ2V0TWVyaWRpYW5TdHJpbmdfYW0oKTogZ2V0TWVyaWRpYW5TdHJpbmdfcG0oKTsKKyAgICAgICpob3VyICU9IHR3ZWx2ZTsKKyAgICAgIGlmICghKmhvdXIpICpob3VyID0gdHdlbHZlOworICAgICAgYnJlYWs7CisgICAgfQorCisgICAgZGVmYXVsdDoKKyAgICAgIGJyZWFrOworICB9CisKKyAgcmV0dXJuIHN0cmluZzsKK30KKworU1RSX0JFR0lOX0ZPUk1BVFRFUihmb3JtYXRCcmFpbGxlVGltZSwgY29uc3QgVGltZUZvcm1hdHRpbmdEYXRhICpmbXQpCisgIGNoYXIgdGltZVswWDQwXTsKKworICB7CisgICAgY29uc3QgY2hhciAqaG91ckZvcm1hdCA9ICIlMDIiIFBSSXU4OworICAgIGNvbnN0IGNoYXIgKm1pbnV0ZUZvcm1hdCA9ICIlMDIiIFBSSXU4OworICAgIGNvbnN0IGNoYXIgKnNlY29uZEZvcm1hdCA9ICIlMDIiIFBSSXU4OworICAgIGNoYXIgc2VwYXJhdG9yOworCisgICAgc3dpdGNoIChwcmVmcy50aW1lU2VwYXJhdG9yKSB7CisgICAgICBkZWZhdWx0OgorICAgICAgY2FzZSB0c0NvbG9uOgorICAgICAgICBzZXBhcmF0b3IgPSAnOic7CisgICAgICAgIGJyZWFrOworCisgICAgICBjYXNlIHRzRG90OgorICAgICAgICBzZXBhcmF0b3IgPSAnLic7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIHN3aXRjaCAocHJlZnMudGltZUZvcm1hdCkgeworICAgICAgZGVmYXVsdDoKKyAgICAgIGNhc2UgdGYyNEhvdXI6CisgICAgICAgIGJyZWFrOworCisgICAgICBjYXNlIHRmMTJIb3VyOgorICAgICAgICBob3VyRm9ybWF0ID0gIiUiIFBSSXU4OworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBTVFJfQkVHSU4odGltZSwgc2l6ZW9mKHRpbWUpKTsKKyAgICBTVFJfUFJJTlRGKGhvdXJGb3JtYXQsIGZtdC0+Y29tcG9uZW50cy5ob3VyKTsKKyAgICBTVFJfUFJJTlRGKCIlYyIsIHNlcGFyYXRvcik7CisgICAgU1RSX1BSSU5URihtaW51dGVGb3JtYXQsIGZtdC0+Y29tcG9uZW50cy5taW51dGUpOworCisgICAgaWYgKHByZWZzLnNob3dTZWNvbmRzKSB7CisgICAgICBTVFJfUFJJTlRGKCIlYyIsIHNlcGFyYXRvcik7CisgICAgICBTVFJfUFJJTlRGKHNlY29uZEZvcm1hdCwgZm10LT5jb21wb25lbnRzLnNlY29uZCk7CisgICAgfQorCisgICAgaWYgKGZtdC0+bWVyaWRpYW4pIFNUUl9QUklOVEYoIiVzIiwgZm10LT5tZXJpZGlhbik7CisgICAgU1RSX0VORDsKKyAgfQorCisgIGlmIChwcmVmcy5kYXRlUG9zaXRpb24gPT0gZHBOb25lKSB7CisgICAgU1RSX1BSSU5URigiJXMiLCB0aW1lKTsKKyAgfSBlbHNlIHsKKyAgICBjaGFyIGRhdGVbMFg0MF07CisKKyAgICB7CisgICAgICBjb25zdCBjaGFyICp5ZWFyRm9ybWF0ID0gIiUwNCIgUFJJdTE2OworICAgICAgY29uc3QgY2hhciAqbW9udGhGb3JtYXQgPSAiJTAyIiBQUkl1ODsKKyAgICAgIGNvbnN0IGNoYXIgKmRheUZvcm1hdCA9ICIlMDIiIFBSSXU4OworCisgICAgICB1aW50MTZfdCB5ZWFyID0gZm10LT5jb21wb25lbnRzLnllYXI7CisgICAgICB1aW50OF90IG1vbnRoID0gZm10LT5jb21wb25lbnRzLm1vbnRoICsgMTsKKyAgICAgIHVpbnQ4X3QgZGF5ID0gZm10LT5jb21wb25lbnRzLmRheSArIDE7CisKKyAgICAgIGNoYXIgc2VwYXJhdG9yOworCisgICAgICBzd2l0Y2ggKHByZWZzLmRhdGVTZXBhcmF0b3IpIHsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgY2FzZSBkc0Rhc2g6CisgICAgICAgICAgc2VwYXJhdG9yID0gJy0nOworICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgZHNTbGFzaDoKKyAgICAgICAgICBzZXBhcmF0b3IgPSAnLyc7CisgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBkc0RvdDoKKyAgICAgICAgICBzZXBhcmF0b3IgPSAnLic7CisgICAgICAgICAgYnJlYWs7CisgICAgICB9CisKKyAgICAgIFNUUl9CRUdJTihkYXRlLCBzaXplb2YoZGF0ZSkpOworICAgICAgc3dpdGNoIChwcmVmcy5kYXRlRm9ybWF0KSB7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgIGNhc2UgZGZZZWFyTW9udGhEYXk6CisgICAgICAgICAgU1RSX1BSSU5URih5ZWFyRm9ybWF0LCB5ZWFyKTsKKyAgICAgICAgICBTVFJfUFJJTlRGKCIlYyIsIHNlcGFyYXRvcik7CisgICAgICAgICAgU1RSX1BSSU5URihtb250aEZvcm1hdCwgbW9udGgpOworICAgICAgICAgIFNUUl9QUklOVEYoIiVjIiwgc2VwYXJhdG9yKTsKKyAgICAgICAgICBTVFJfUFJJTlRGKGRheUZvcm1hdCwgZGF5KTsKKyAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIGRmTW9udGhEYXlZZWFyOgorICAgICAgICAgIFNUUl9QUklOVEYobW9udGhGb3JtYXQsIG1vbnRoKTsKKyAgICAgICAgICBTVFJfUFJJTlRGKCIlYyIsIHNlcGFyYXRvcik7CisgICAgICAgICAgU1RSX1BSSU5URihkYXlGb3JtYXQsIGRheSk7CisgICAgICAgICAgU1RSX1BSSU5URigiJWMiLCBzZXBhcmF0b3IpOworICAgICAgICAgIFNUUl9QUklOVEYoeWVhckZvcm1hdCwgeWVhcik7CisgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBkZkRheU1vbnRoWWVhcjoKKyAgICAgICAgICBTVFJfUFJJTlRGKGRheUZvcm1hdCwgZGF5KTsKKyAgICAgICAgICBTVFJfUFJJTlRGKCIlYyIsIHNlcGFyYXRvcik7CisgICAgICAgICAgU1RSX1BSSU5URihtb250aEZvcm1hdCwgbW9udGgpOworICAgICAgICAgIFNUUl9QUklOVEYoIiVjIiwgc2VwYXJhdG9yKTsKKyAgICAgICAgICBTVFJfUFJJTlRGKHllYXJGb3JtYXQsIHllYXIpOworICAgICAgICAgIGJyZWFrOworICAgICAgfQorICAgICAgU1RSX0VORDsKKworICAgICAgc3dpdGNoIChwcmVmcy5kYXRlUG9zaXRpb24pIHsKKyAgICAgICAgY2FzZSBkcEJlZm9yZVRpbWU6CisgICAgICAgICAgU1RSX1BSSU5URigiJXMgJXMiLCBkYXRlLCB0aW1lKTsKKyAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIGRwQWZ0ZXJUaW1lOgorICAgICAgICAgIFNUUl9QUklOVEYoIiVzICVzIiwgdGltZSwgZGF0ZSk7CisgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICBTVFJfUFJJTlRGKCIlcyIsIGRhdGUpOworICAgICAgICAgIGJyZWFrOworICAgICAgfQorICAgIH0KKyAgfQorU1RSX0VORF9GT1JNQVRURVIKKwordm9pZAorZ2V0VGltZUZvcm1hdHRpbmdEYXRhIChUaW1lRm9ybWF0dGluZ0RhdGEgKmZtdCkgeworICBnZXRDdXJyZW50VGltZSgmZm10LT52YWx1ZSk7CisgIGV4cGFuZFRpbWVWYWx1ZSgmZm10LT52YWx1ZSwgJmZtdC0+Y29tcG9uZW50cyk7CisgIGZtdC0+bWVyaWRpYW4gPSBnZXRNZXJpZGlhblN0cmluZygmZm10LT5jb21wb25lbnRzLmhvdXIpOworfQorCitpbnQKK2lzQ3Vyc29yUG9zaXRpb24gKGludCB4KSB7CisgIHJldHVybiAoeCA9PSBzY3IucG9zeCkgJiYgKHNlcy0+d2lueSA9PSBzY3IucG9zeSkgJiYgc2hvd1NjcmVlbkN1cnNvcigpOworfQorCitpbnQKK2lzV29yZEJyZWFrIChjb25zdCBTY3JlZW5DaGFyYWN0ZXIgKmNoYXJhY3RlcnMsIGludCB4KSB7CisgIGlmICghaXN3c3BhY2UoY2hhcmFjdGVyc1t4XS50ZXh0KSkgcmV0dXJuIDA7CisgIHJldHVybiAhaXNDdXJzb3JQb3NpdGlvbih4KTsKK30KKworaW50CitnZXRXb3JkV3JhcExlbmd0aCAoaW50IHJvdywgaW50IGZyb20sIGludCBjb3VudCkgeworICBpbnQgd2lkdGggPSBzY3IuY29sczsKKyAgaWYgKGZyb20gPj0gd2lkdGgpIHJldHVybiAwOworCisgIGludCBlbmQgPSBmcm9tICsgY291bnQ7CisgIGlmIChlbmQgPj0gd2lkdGgpIHJldHVybiB3aWR0aCAtIGZyb207CisKKyAgU2NyZWVuQ2hhcmFjdGVyIGNoYXJhY3RlcnNbd2lkdGhdOworICByZWFkU2NyZWVuUm93KHJvdywgd2lkdGgsIGNoYXJhY3RlcnMpOworCisgIGludCB0byA9IGVuZDsKKyAgaW50IG9uV29yZEJyZWFrID0gaXN3c3BhY2UoY2hhcmFjdGVyc1t0b10udGV4dCk7CisKKyAgaWYgKCFvbldvcmRCcmVhaykgeworICAgIGludCBpbmRleCA9IHRvOworCisgICAgd2hpbGUgKGluZGV4ID4gZnJvbSkgeworICAgICAgaWYgKGlzd3NwYWNlKGNoYXJhY3RlcnNbLS1pbmRleF0udGV4dCkpIHsKKyAgICAgICAgdG8gPSBpbmRleDsKKyAgICAgICAgb25Xb3JkQnJlYWsgPSAxOworICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICB9CisgIH0KKworICBpZiAob25Xb3JkQnJlYWspIHsKKyAgICB3aGlsZSAodG8gPCB3aWR0aCkgeworICAgICAgaWYgKCFpc3dzcGFjZShjaGFyYWN0ZXJzW3RvXS50ZXh0KSkgYnJlYWs7CisgICAgICBpZiAoKHRvID49IGVuZCkgJiYgaXNDdXJzb3JQb3NpdGlvbih0bykpIGJyZWFrOworICAgICAgdG8gKz0gMTsKKyAgICB9CisgIH0KKworICByZXR1cm4gdG8gLSBmcm9tOworfQorCit2b2lkCitzZXRXb3JkV3JhcFN0YXJ0IChpbnQgc3RhcnQpIHsKKyAgaWYgKHN0YXJ0IDwgMCkgc3RhcnQgPSAwOworICBzZXMtPndpbnggPSBzdGFydDsKKworICBpZiAoc3RhcnQgPiAwKSB7CisgICAgaW50IGVuZCA9IHN0YXJ0ICsgdGV4dENvdW50OworICAgIGlmIChlbmQgPiBzY3IuY29scykgZW5kID0gc2NyLmNvbHM7CisKKyAgICBTY3JlZW5DaGFyYWN0ZXIgY2hhcmFjdGVyc1tlbmRdOworICAgIHJlYWRTY3JlZW5Sb3coc2VzLT53aW55LCBlbmQsIGNoYXJhY3RlcnMpOworCisgICAgd2hpbGUgKGVuZCA+IDApIHsKKyAgICAgIGlmICghaXNXb3JkQnJlYWsoY2hhcmFjdGVycywgLS1lbmQpKSB7CisgICAgICAgIGVuZCArPSAxOworICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICB9CisKKyAgICBzdGFydCA9IGVuZCAtIHRleHRDb3VudDsKKyAgICBpZiAoc3RhcnQgPCAwKSBzdGFydCA9IDA7CisKKyAgICBpZiAoc3RhcnQgPiAwKSB7CisgICAgICBpZiAoIWlzV29yZEJyZWFrKGNoYXJhY3RlcnMsIHN0YXJ0LTEpKSB7CisgICAgICAgIHdoaWxlIChzdGFydCA8IGVuZCkgeworICAgICAgICAgIGlmIChpc1dvcmRCcmVhayhjaGFyYWN0ZXJzLCBzdGFydCkpIGJyZWFrOworICAgICAgICAgIHN0YXJ0ICs9IDE7CisgICAgICAgIH0KKyAgICAgIH0KKworICAgICAgd2hpbGUgKHN0YXJ0IDwgZW5kKSB7CisgICAgICAgIGlmICghaXNXb3JkQnJlYWsoY2hhcmFjdGVycywgc3RhcnQpKSBicmVhazsKKyAgICAgICAgc3RhcnQgKz0gMTsKKyAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoc3RhcnQgPCBlbmQpIHNlcy0+d2lueCA9IHN0YXJ0OworICB9Cit9CisKK3ZvaWQgCitwbGFjZUJyYWlsbGVXaW5kb3dIb3Jpem9udGFsbHkgKGludCB4KSB7CisgIGlmIChwcmVmcy5zbGlkaW5nQnJhaWxsZVdpbmRvdykgeworICAgIHNlcy0+d2lueCA9IE1BWCgwLCAoeCAtIChpbnQpKHRleHRDb3VudCAvIDIpKSk7CisgIH0gZWxzZSB7CisgICAgc2VzLT53aW54ID0geCAvIHRleHRDb3VudCAqIHRleHRDb3VudDsKKyAgfQorfQorCit2b2lkCitwbGFjZVJpZ2h0RWRnZSAoaW50IGNvbHVtbikgeworICBpZiAoaXNDb250cmFjdGluZygpKSB7CisgICAgc2VzLT53aW54ID0gMDsKKworICAgIHdoaWxlICgxKSB7CisgICAgICBpbnQgbGVuZ3RoID0gZ2V0Q29udHJhY3RlZExlbmd0aCh0ZXh0Q291bnQpOworICAgICAgaW50IGVuZCA9IHNlcy0+d2lueCArIGxlbmd0aDsKKworICAgICAgaWYgKGVuZCA+IGNvbHVtbikgYnJlYWs7CisgICAgICBpZiAoZW5kID09IHNlcy0+d2lueCkgYnJlYWs7CisgICAgICBzZXMtPndpbnggPSBlbmQ7CisgICAgfQorICB9IGVsc2UgeworICAgIHNlcy0+d2lueCA9IGNvbHVtbiAvIHRleHRDb3VudCAqIHRleHRDb3VudDsKKyAgfQorfQorCit2b2lkCitwbGFjZUJyYWlsbGVXaW5kb3dSaWdodCAodm9pZCkgeworICBwbGFjZVJpZ2h0RWRnZShzY3IuY29scy0xKTsKK30KKworaW50Cittb3ZlQnJhaWxsZVdpbmRvd0xlZnQgKHVuc2lnbmVkIGludCBhbW91bnQpIHsKKyAgaWYgKHNlcy0+d2lueCA8IDEpIHJldHVybiAwOworICBpZiAoYW1vdW50IDwgMSkgcmV0dXJuIDA7CisKKyAgc2VzLT53aW54IC09IE1JTihzZXMtPndpbngsIGFtb3VudCk7CisgIHJldHVybiAxOworfQorCitpbnQKK21vdmVCcmFpbGxlV2luZG93UmlnaHQgKHVuc2lnbmVkIGludCBhbW91bnQpIHsKKyAgaWYgKGFtb3VudCA8IDEpIHJldHVybiAwOworICBpbnQgbmV3eCA9IHNlcy0+d2lueCArIGFtb3VudDsKKyAgaWYgKG5ld3ggPj0gc2NyLmNvbHMpIHJldHVybiAwOworCisgIHNlcy0+d2lueCA9IG5ld3g7CisgIHJldHVybiAxOworfQorCitpbnQKK3NoaWZ0QnJhaWxsZVdpbmRvd0xlZnQgKHVuc2lnbmVkIGludCBhbW91bnQpIHsKKyAgaWYgKGlzQ29udHJhY3RpbmcoKSkgeworICAgIGludCByZWZlcmVuY2UgPSBzZXMtPndpbng7CisgICAgaWYgKCFyZWZlcmVuY2UpIHJldHVybiAwOworCisgICAgeworICAgICAgaW50IGZyb20gPSAwOworICAgICAgaW50IHRvID0gc2VzLT53aW54OworCisgICAgICB3aGlsZSAoZnJvbSA8IHRvKSB7CisgICAgICAgIGludCBlbmQgPSAoc2VzLT53aW54ID0gKChmcm9tICsgdG8pIC8gMikpICsgZ2V0Q29udHJhY3RlZExlbmd0aChhbW91bnQpOworCisgICAgICAgIGlmIChlbmQgPCByZWZlcmVuY2UpIHsKKyAgICAgICAgICBmcm9tID0gc2VzLT53aW54ICsgMTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICB0byA9IHNlcy0+d2lueDsKKyAgICAgICAgfQorICAgICAgfQorCisgICAgICBpZiAoIShzZXMtPndpbnggPSBmcm9tKSkgcmV0dXJuIDE7CisgICAgfQorCisgICAgU2NyZWVuQ2hhcmFjdGVyIGNoYXJhY3RlcnNbcmVmZXJlbmNlXTsKKyAgICByZWFkU2NyZWVuUm93KHNlcy0+d2lueSwgcmVmZXJlbmNlLCBjaGFyYWN0ZXJzKTsKKyAgICBpbnQgeCA9IHNlcy0+d2lueDsKKworICAgIGlmICghaXNXb3JkQnJlYWsoY2hhcmFjdGVycywgeC0xKSkgeworICAgICAgaW50IHdhc0lkZW9ncmFwaGljID0gaXNJZGVvZ3JhcGhpY0NoYXJhY3RlcihjaGFyYWN0ZXJzW3gtMV0udGV4dCk7CisKKyAgICAgIGZvciAoaW50IGk9eDsgaTxyZWZlcmVuY2U7IGkrPTEpIHsKKyAgICAgICAgaW50IGlzSWRlb2dyYXBoaWMgPSBpc0lkZW9ncmFwaGljQ2hhcmFjdGVyKGNoYXJhY3RlcnNbaV0udGV4dCk7CisKKyAgICAgICAgaWYgKCEoaXNJZGVvZ3JhcGhpYyAmJiB3YXNJZGVvZ3JhcGhpYykpIHsKKyAgICAgICAgICBpZiAoIWlzV29yZEJyZWFrKGNoYXJhY3RlcnMsIGkpKSB7CisgICAgICAgICAgICB3YXNJZGVvZ3JhcGhpYyA9IGlzSWRlb2dyYXBoaWM7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICB4ID0gaTsKKyAgICAgICAgYnJlYWs7CisgICAgICB9CisgICAgfQorCisgICAgd2hpbGUgKHggPCByZWZlcmVuY2UpIHsKKyAgICAgIGlmICghaXNXb3JkQnJlYWsoY2hhcmFjdGVycywgeCkpIGJyZWFrOworICAgICAgeCArPSAxOworICAgIH0KKworICAgIGlmICh4IDwgcmVmZXJlbmNlKSBzZXMtPndpbnggPSB4OworICAgIHJldHVybiAxOworICB9CisKKyAgaWYgKHByZWZzLndvcmRXcmFwKSB7CisgICAgaWYgKHNlcy0+d2lueCA8IDEpIHJldHVybiAwOworICAgIHNldFdvcmRXcmFwU3RhcnQoc2VzLT53aW54IC0gYW1vdW50KTsKKyAgICByZXR1cm4gMTsKKyAgfQorCisgIHJldHVybiBtb3ZlQnJhaWxsZVdpbmRvd0xlZnQoYW1vdW50KTsKK30KKworaW50CitzaGlmdEJyYWlsbGVXaW5kb3dSaWdodCAodW5zaWduZWQgaW50IGFtb3VudCkgeworICBpZiAoaXNDb250cmFjdGluZygpKSB7CisgICAgYW1vdW50ID0gZ2V0Q29udHJhY3RlZExlbmd0aChhbW91bnQpOworICB9IGVsc2UgaWYgKHByZWZzLndvcmRXcmFwKSB7CisgICAgYW1vdW50ID0gZ2V0V29yZFdyYXBMZW5ndGgoc2VzLT53aW55LCBzZXMtPndpbngsIGFtb3VudCk7CisgIH0KKworICByZXR1cm4gbW92ZUJyYWlsbGVXaW5kb3dSaWdodChhbW91bnQpOworfQorCit2b2lkCitzbGlkZUJyYWlsbGVXaW5kb3dWZXJ0aWNhbGx5IChpbnQgeSkgeworICBpZiAoKHkgPCBzZXMtPndpbnkpIHx8ICh5ID49IChpbnQpKHNlcy0+d2lueSArIGJybC50ZXh0Um93cykpKSB7CisgICAgeSAtPSBicmwudGV4dFJvd3MgLyAyOworCisgICAgeworICAgICAgaW50IG1heHkgPSBzY3Iucm93cyAtIGJybC50ZXh0Um93czsKKyAgICAgIGlmICh5ID4gbWF4eSkgeSA9IG1heHk7CisgICAgfQorCisgICAgaWYgKHkgPCAwKSB5ID0gMDsKKyAgICBzZXMtPndpbnkgPSB5OworICB9Cit9CisKK3N0YXRpYyBpbnQKK2lzV2l0aGluQnJhaWxsZVdpbmRvdyAoaW50IHgsIGludCB5KSB7CisgIHJldHVybiAoeCA+PSBzZXMtPndpbngpCisgICAgICAmJiAoeCA8IChpbnQpKHNlcy0+d2lueCArIHRleHRDb3VudCkpCisgICAgICAmJiAoeSA+PSBzZXMtPndpbnkpCisgICAgICAmJiAoeSA8IChpbnQpKHNlcy0+d2lueSArIGJybC50ZXh0Um93cykpCisgICAgICA7Cit9CisKK2ludAordHJhY2tTY3JlZW5DdXJzb3IgKGludCBwbGFjZSkgeworICBpZiAoIVNDUl9DVVJTT1JfT0soKSkgcmV0dXJuIDA7CisKKyAgaWYgKHBsYWNlKSB7CisgICAgY2FuY2VsRGVsYXllZEN1cnNvclRyYWNraW5nQWxhcm0oKTsKKyAgfSBlbHNlIGlmIChkZWxheWVkQ3Vyc29yVHJhY2tpbmdBbGFybSkgeworICAgIC8qIEEgY3Vyc29yIHRyYWNraW5nIG1vdGlvbiBoYXMgYmVlbiBkZWxheWVkLiBJZiB0aGUgY3Vyc29yIHJldHVybmVkCisgICAgICogdG8gaXRzIGluaXRpYWwgbG9jYXRpb24gaW4gdGhlIG1lYW4gdGltZSB0aGVuIHdlIGRpc2NhcmQgYW5kIGlnbm9yZQorICAgICAqIHRoZSBwcmV2aW91cyBtb3Rpb24uIE90aGVyd2lzZSB3ZSB3YWl0IGZvciB0aGUgdGltZXIgdG8gZXhwaXJlLgorICAgICAqLworICAgIGlmICgoc2VzLT5kY3R4ID09IHNjci5wb3N4KSAmJiAoc2VzLT5kY3R5ID09IHNjci5wb3N5KSkgeworICAgICAgY2FuY2VsRGVsYXllZEN1cnNvclRyYWNraW5nQWxhcm0oKTsKKyAgICB9CisKKyAgICByZXR1cm4gMTsKKyAgfSBlbHNlIGlmICgocHJlZnMuY3Vyc29yVHJhY2tpbmdEZWxheSA+IDApICYmIChzZXMtPmRjdHggIT0gLTEpICYmCisgICAgICAgICAgICAgIWlzV2l0aGluQnJhaWxsZVdpbmRvdyhzZXMtPnRya3gsIHNlcy0+dHJreSkpIHsKKyAgICAvKiBUaGUgY3Vyc29yIG1heSBtb3ZlIHNwdXJpb3VzbHkgd2hpbGUgYSBwcm9ncmFtIHVwZGF0ZXMgaW5mb3JtYXRpb24KKyAgICAgKiBvbiBhIHN0YXR1cyBiYXIuIElmIGN1cnNvciB0cmFja2luZyBpcyBvbiBhbmQgdGhlIGN1cnNvciB3YXMKKyAgICAgKiBvdXRzaWRlIHRoZSBicmFpbGxlIHdpbmRvdyBiZWZvcmUgaXQgbW92ZWQsIHdlIGRlbGF5IHRoZSB0cmFja2luZworICAgICAqIG1vdGlvbiBmb3IgYSB3aGlsZSBzbyBhcyBub3QgdG8gb2Jub3hpb3VzbHkgbW92ZSB0aGUgYnJhaWxsZSB3aW5kb3cKKyAgICAgKiBpbiBjYXNlIHRoZSBjdXJzb3Igd2lsbCBldmVudHVhbGx5IHJldHVybiB0byBpdHMgaW5pdGlhbCBsb2NhdGlvbgorICAgICAqIHdpdGhpbiBhIHNob3J0IHRpbWUuCisgICAgICovCisgICAgc2VzLT5kY3R4ID0gc2VzLT50cmt4OworICAgIHNlcy0+ZGN0eSA9IHNlcy0+dHJreTsKKworICAgIGludCBkZWxheSA9IDI1MCA8PCAocHJlZnMuY3Vyc29yVHJhY2tpbmdEZWxheSAtIDEpOworICAgIGFzeW5jTmV3UmVsYXRpdmVBbGFybSgmZGVsYXllZEN1cnNvclRyYWNraW5nQWxhcm0sIGRlbGF5LAorICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVEZWxheWVkQ3Vyc29yVHJhY2tpbmdBbGFybSwgTlVMTCk7CisKKyAgICByZXR1cm4gMTsKKyAgfQorCisgIC8qIGFueXRoaW5nIGJ1dCAtMSAqLworICBzZXMtPmRjdHggPSAwOworICBzZXMtPmRjdHkgPSAwOworCisgIGlmIChpc0NvbnRyYWN0ZWQpIHsKKyAgICBzbGlkZUJyYWlsbGVXaW5kb3dWZXJ0aWNhbGx5KHNjci5wb3N5KTsKKyAgICBjb250cmFjdGVkVHJhY2sgPSAxOworCisgICAgaWYgKHNjci5wb3N4ID4gc2VzLT53aW54KSB7CisgICAgICBpZiAoc2NyLnBvc3ggPCAoc2VzLT53aW54ICsgZ2V0Q29udHJhY3RlZExlbmd0aCh0ZXh0Q291bnQpKSkgeworICAgICAgICByZXR1cm4gMTsKKyAgICAgIH0KKyAgICB9CisKKyAgICBzZXMtPndpbnggPSBzY3IucG9zeDsKKyAgICBzaGlmdEJyYWlsbGVXaW5kb3dMZWZ0KGhhbGZXaW5kb3dTaGlmdCk7CisgICAgcmV0dXJuIDE7CisgIH0KKworICBpZiAocGxhY2UgJiYgIWlzV2l0aGluQnJhaWxsZVdpbmRvdyhzY3IucG9zeCwgc2NyLnBvc3kpKSB7CisgICAgcGxhY2VCcmFpbGxlV2luZG93SG9yaXpvbnRhbGx5KHNjci5wb3N4KTsKKyAgfQorCisgIGlmIChwcmVmcy5zbGlkaW5nQnJhaWxsZVdpbmRvdykgeworICAgIHsKKyAgICAgIGludCB3aWR0aCA9IHNjci5jb2xzOworICAgICAgU2NyZWVuQ2hhcmFjdGVyIGNoYXJhY3RlcnNbd2lkdGhdOworICAgICAgcmVhZFNjcmVlblJvdyhzY3IucG9zeSwgd2lkdGgsIGNoYXJhY3RlcnMpOworCisgICAgICBpbnQgY29sdW1uID0gZmluZExhc3ROb25TcGFjZUNoYXJhY3RlcihjaGFyYWN0ZXJzLCB3aWR0aCk7CisgICAgICBpZiAoY29sdW1uIDwgMCkgY29sdW1uID0gMDsKKyAgICAgIGlmIChjb2x1bW4gPCB0ZXh0Q291bnQpIHNlcy0+d2lueCA9IDA7CisgICAgfQorCisgICAgaW50IHJlc2V0ID0gdGV4dENvdW50ICogMyAvIDEwOworICAgIGludCB0cmlnZ2VyID0gcHJlZnMuZWFnZXJTbGlkaW5nQnJhaWxsZVdpbmRvdz8gdGV4dENvdW50KjMvMjA6IDA7CisgICAgaWYgKHNjci5wb3N4ID09IHNlcy0+d2lueCkgdHJpZ2dlciA9IDE7CisKKyAgICBpZiAoc2NyLnBvc3ggPCAoc2VzLT53aW54ICsgdHJpZ2dlcikpIHsKKyAgICAgIHNlcy0+d2lueCA9IE1BWChzY3IucG9zeC1yZXNldCwgMCk7CisgICAgfSBlbHNlIGlmIChzY3IucG9zeCA+PSAoaW50KShzZXMtPndpbnggKyB0ZXh0Q291bnQgLSB0cmlnZ2VyKSkgeworICAgICAgc2VzLT53aW54ID0gTUFYKE1JTihzY3IucG9zeCtyZXNldCsxLCBzY3IuY29scyktKGludCl0ZXh0Q291bnQsIDApOworICAgIH0KKyAgfSBlbHNlIGlmIChzY3IucG9zeCA8IHNlcy0+d2lueCkgeworICAgIHNlcy0+d2lueCAtPSAoKHNlcy0+d2lueCAtIHNjci5wb3N4IC0gMSkgLyB0ZXh0Q291bnQgKyAxKSAqIHRleHRDb3VudDsKKyAgICBpZiAoc2VzLT53aW54IDwgMCkgc2VzLT53aW54ID0gMDsKKyAgfSBlbHNlIHsKKyAgICBzZXMtPndpbnggKz0gKHNjci5wb3N4IC0gc2VzLT53aW54KSAvIHRleHRDb3VudCAqIHRleHRDb3VudDsKKyAgfQorCisgIGlmIChwcmVmcy53b3JkV3JhcCkgeworICAgIGludCBsZW5ndGggPSBnZXRXb3JkV3JhcExlbmd0aChzZXMtPndpbnksIHNlcy0+d2lueCwgdGV4dENvdW50KTsKKyAgICBpbnQgbmV4dCA9IHNlcy0+d2lueCArIGxlbmd0aDsKKyAgICBpZiAoc2NyLnBvc3ggPj0gbmV4dCkgc2VzLT53aW54ID0gbmV4dDsKKyAgfQorCisgIHNsaWRlQnJhaWxsZVdpbmRvd1ZlcnRpY2FsbHkoc2NyLnBvc3kpOworICByZXR1cm4gMTsKK30KKworaW50CitmaW5kRmlyc3ROb25TcGFjZUNoYXJhY3RlciAoY29uc3QgU2NyZWVuQ2hhcmFjdGVyICpjaGFyYWN0ZXJzLCBpbnQgY291bnQpIHsKKyAgaW50IGluZGV4ID0gMDsKKworICB3aGlsZSAoaW5kZXggPCBjb3VudCkgeworICAgIGlmICghaXN3c3BhY2UoY2hhcmFjdGVyc1tpbmRleF0udGV4dCkpIHJldHVybiBpbmRleDsKKyAgICBpbmRleCArPSAxOworICB9CisKKyAgcmV0dXJuIC0xOworfQorCitpbnQKK2ZpbmRMYXN0Tm9uU3BhY2VDaGFyYWN0ZXIgKGNvbnN0IFNjcmVlbkNoYXJhY3RlciAqY2hhcmFjdGVycywgaW50IGNvdW50KSB7CisgIGludCBpbmRleCA9IGNvdW50OworCisgIHdoaWxlIChpbmRleCA+IDApCisgICAgaWYgKCFpc3dzcGFjZShjaGFyYWN0ZXJzWy0taW5kZXhdLnRleHQpKQorICAgICAgcmV0dXJuIGluZGV4OworCisgIHJldHVybiAtMTsKK30KKworaW50Citpc0FsbFNwYWNlQ2hhcmFjdGVycyAoY29uc3QgU2NyZWVuQ2hhcmFjdGVyICpjaGFyYWN0ZXJzLCBpbnQgY291bnQpIHsKKyAgcmV0dXJuIGZpbmRGaXJzdE5vblNwYWNlQ2hhcmFjdGVyKGNoYXJhY3RlcnMsIGNvdW50KSA8IDA7Cit9CisKKyNpZmRlZiBFTkFCTEVfU1BFRUNIX1NVUFBPUlQKK1NwZWVjaFN5bnRoZXNpemVyIHNwazsKKworaW50CitoYXZlU3BlZWNoU3ludGhlc2l6ZXIgKHZvaWQpIHsKKyAgcmV0dXJuIHNwZWVjaC0+ZGVmaW5pdGlvbi5jb2RlICE9IG5vU3BlZWNoLmRlZmluaXRpb24uY29kZTsKK30KKwordm9pZAordHJhY2tTcGVlY2ggKHZvaWQpIHsKKyAgaW50IGxvY2F0aW9uID0gc3BrLnRyYWNrLnNwZWVjaExvY2F0aW9uOworCisgIGlmIChsb2NhdGlvbiAhPSBTUEtfTE9DX05PTkUpIHsKKyAgICBwbGFjZUJyYWlsbGVXaW5kb3dIb3Jpem9udGFsbHkobG9jYXRpb24gJSBzY3IuY29scyk7CisgICAgc2xpZGVCcmFpbGxlV2luZG93VmVydGljYWxseShzcGsudHJhY2suZmlyc3RMaW5lICsgKGxvY2F0aW9uIC8gc2NyLmNvbHMpKTsKKyAgICBzY2hlZHVsZVVwZGF0ZSgic3BlZWNoIHRyYWNrZWQiKTsKKyAgfQorfQorCitpbnQKK2lzQXV0b3NwZWFrQWN0aXZlICh2b2lkKSB7CisgIGlmICghaGF2ZVNwZWVjaFN5bnRoZXNpemVyKCkpIHJldHVybiAwOworICBpZiAocHJlZnMuYXV0b3NwZWFrKSByZXR1cm4gMTsKKyAgaWYgKGhhdmVCcmFpbGxlRGlzcGxheSgpKSByZXR1cm4gMDsKKyAgcmV0dXJuICFvcHRfcXVpZXRJZk5vQnJhaWxsZTsKK30KKwordm9pZAorc2F5U2NyZWVuQ2hhcmFjdGVycyAoY29uc3QgU2NyZWVuQ2hhcmFjdGVyICpjaGFyYWN0ZXJzLCBzaXplX3QgY291bnQsIFNheU9wdGlvbnMgb3B0aW9ucykgeworICB3Y2hhcl90IHRleHRbY291bnRdOworICB3Y2hhcl90ICp0ID0gdGV4dDsKKworICB1bnNpZ25lZCBjaGFyIGF0dHJpYnV0ZXNbY291bnRdOworICB1bnNpZ25lZCBjaGFyICphID0gYXR0cmlidXRlczsKKworICBmb3IgKHVuc2lnbmVkIGludCBpPTA7IGk8Y291bnQ7IGkrPTEpIHsKKyAgICBjb25zdCBTY3JlZW5DaGFyYWN0ZXIgKmNoYXJhY3RlciA9ICZjaGFyYWN0ZXJzW2ldOworICAgICp0KysgPSBjaGFyYWN0ZXItPnRleHQ7CisgICAgKmErKyA9IGNoYXJhY3Rlci0+YXR0cmlidXRlczsKKyAgfQorCisgIHNheVdpZGVDaGFyYWN0ZXJzKCZzcGssIHRleHQsIGF0dHJpYnV0ZXMsIGNvdW50LCBvcHRpb25zKTsKK30KKwordm9pZAorc3BlYWtDaGFyYWN0ZXJzIChjb25zdCBTY3JlZW5DaGFyYWN0ZXIgKmNoYXJhY3RlcnMsIHNpemVfdCBjb3VudCwgaW50IHNwZWxsLCBpbnQgaW50ZXJydXB0KSB7CisgIFNheU9wdGlvbnMgc2F5T3B0aW9ucyA9IDA7CisgIGlmIChpbnRlcnJ1cHQpIHNheU9wdGlvbnMgfD0gU0FZX09QVF9NVVRFX0ZJUlNUOworCisgIGlmIChpc0FsbFNwYWNlQ2hhcmFjdGVycyhjaGFyYWN0ZXJzLCBjb3VudCkpIHsKKyAgICBzd2l0Y2ggKHByZWZzLnNwZWVjaFdoaXRlc3BhY2VJbmRpY2F0b3IpIHsKKyAgICAgIGRlZmF1bHQ6CisgICAgICBjYXNlIHN3c05vbmU6CisgICAgICAgIGJyZWFrOworCisgICAgICBjYXNlIHN3c1NheVNwYWNlOiB7CisgICAgICAgIHdjaGFyX3QgYnVmZmVyWzBYMTAwXTsKKyAgICAgICAgc2l6ZV90IGxlbmd0aCA9IG1ha2VXY2hhcnNGcm9tVXRmOChnZXR0ZXh0KCJzcGFjZSIpLCBidWZmZXIsIEFSUkFZX0NPVU5UKGJ1ZmZlcikpOworCisgICAgICAgIHNheVdpZGVDaGFyYWN0ZXJzKCZzcGssIGJ1ZmZlciwgTlVMTCwgbGVuZ3RoLCBzYXlPcHRpb25zKTsKKyAgICAgICAgYnJlYWs7CisgICAgICB9CisgICAgfQorICB9IGVsc2UgaWYgKGNvdW50ID09IDEpIHsKKyAgICB3Y2hhcl90IGNoYXJhY3RlciA9IGNoYXJhY3RlcnNbMF0udGV4dDsKKyAgICB1bnNpZ25lZCBjaGFyIGF0dHJpYnV0ZXMgPSBjaGFyYWN0ZXJzWzBdLmF0dHJpYnV0ZXM7CisgICAgY29uc3QgY2hhciAqcHJlZml4ID0gTlVMTDsKKworICAgIGlmIChpc3d1cHBlcihjaGFyYWN0ZXIpKSB7CisgICAgICBzd2l0Y2ggKHByZWZzLnNwZWVjaFVwcGVyY2FzZUluZGljYXRvcikgeworICAgICAgICBkZWZhdWx0OgorICAgICAgICBjYXNlIHN1Y05vbmU6CisgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBzdWNTYXlDYXA6CisgICAgICAgICAgLy8gImNhcCIgaGVyZSwgdXNlZCBkdXJpbmcgc3BlZWNoIG91dHB1dCwgaXMgc2hvcnQgZm9yICJjYXBpdGFsIi4KKyAgICAgICAgICAvLyBJdCBpcyBzcG9rZW4ganVzdCBiZWZvcmUgYW4gdXBwZXJjYXNlIGxldHRlciwgZS5nLiAiY2FwIEEiLgorICAgICAgICAgIHByZWZpeCA9IGdldHRleHQoImNhcCIpOworICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2Ugc3VjUmFpc2VQaXRjaDoKKyAgICAgICAgICBzYXlPcHRpb25zIHw9IFNBWV9PUFRfSElHSEVSX1BJVENIOworICAgICAgICAgIGJyZWFrOworICAgICAgfQorICAgIH0gZWxzZSBpZiAoaXN3cHVuY3QoY2hhcmFjdGVyKSkgeworICAgICAgc2F5T3B0aW9ucyB8PSBTQVlfT1BUX0FMTF9QVU5DVFVBVElPTjsKKyAgICB9CisKKyAgICBpZiAocHJlZml4KSB7CisgICAgICB3Y2hhcl90IHRleHRCdWZmZXJbMFgxMDBdOworICAgICAgc2l6ZV90IGxlbmd0aCA9IG1ha2VXY2hhcnNGcm9tVXRmOChwcmVmaXgsIHRleHRCdWZmZXIsIEFSUkFZX0NPVU5UKHRleHRCdWZmZXIpKTsKKworICAgICAgdGV4dEJ1ZmZlcltsZW5ndGgrK10gPSBXQ19DKCcgJyk7CisgICAgICB0ZXh0QnVmZmVyW2xlbmd0aCsrXSA9IGNoYXJhY3RlcjsKKworICAgICAgdW5zaWduZWQgY2hhciBhdHRyaWJ1dGVzQnVmZmVyW2xlbmd0aF07CisgICAgICBtZW1zZXQoYXR0cmlidXRlc0J1ZmZlciwgU0NSX0NPTE9VUl9ERUZBVUxULCBsZW5ndGgpOworICAgICAgYXR0cmlidXRlc0J1ZmZlcltsZW5ndGgtMV0gPSBhdHRyaWJ1dGVzOworCisgICAgICBzYXlXaWRlQ2hhcmFjdGVycygmc3BrLCB0ZXh0QnVmZmVyLCBhdHRyaWJ1dGVzQnVmZmVyLCBsZW5ndGgsIHNheU9wdGlvbnMpOworICAgIH0gZWxzZSB7CisgICAgICBzYXlXaWRlQ2hhcmFjdGVycygmc3BrLCAmY2hhcmFjdGVyLCAmYXR0cmlidXRlcywgMSwgc2F5T3B0aW9ucyk7CisgICAgfQorICB9IGVsc2UgaWYgKHNwZWxsKSB7CisgICAgc2l6ZV90IGxlbmd0aCA9IGNvdW50ICogMjsKKyAgICB3Y2hhcl90IHRleHRCdWZmZXJbbGVuZ3RoXTsKKyAgICB1bnNpZ25lZCBjaGFyIGF0dHJpYnV0ZXNCdWZmZXJbbGVuZ3RoXTsKKworICAgIHdjaGFyX3QgKnRleHQgPSB0ZXh0QnVmZmVyOworICAgIHVuc2lnbmVkIGNoYXIgKmF0dHJpYnV0ZXMgPSBhdHRyaWJ1dGVzQnVmZmVyOworCisgICAgY29uc3QgU2NyZWVuQ2hhcmFjdGVyICpjaGFyYWN0ZXIgPSBjaGFyYWN0ZXJzOworICAgIGNvbnN0IFNjcmVlbkNoYXJhY3RlciAqZW5kID0gY2hhcmFjdGVyICsgY291bnQ7CisKKyAgICB3aGlsZSAoY2hhcmFjdGVyIDwgZW5kKSB7CisgICAgICAqdGV4dCsrID0gY2hhcmFjdGVyLT50ZXh0OworICAgICAgKmF0dHJpYnV0ZXMrKyA9IGNoYXJhY3Rlci0+YXR0cmlidXRlczsKKworICAgICAgKnRleHQrKyA9IFdDX0MoJyAnKTsKKyAgICAgICphdHRyaWJ1dGVzKysgPSBTQ1JfQ09MT1VSX0RFRkFVTFQ7CisKKyAgICAgIGNoYXJhY3RlciArPSAxOworICAgIH0KKworICAgIHNheVdpZGVDaGFyYWN0ZXJzKCZzcGssIHRleHRCdWZmZXIsIGF0dHJpYnV0ZXNCdWZmZXIsIGxlbmd0aC0xLCBzYXlPcHRpb25zKTsKKyAgfSBlbHNlIHsKKyAgICBzYXlTY3JlZW5DaGFyYWN0ZXJzKGNoYXJhY3RlcnMsIGNvdW50LCBzYXlPcHRpb25zKTsKKyAgfQorfQorCitpbnQKK3NwZWFrSW5kZW50IChjb25zdCBTY3JlZW5DaGFyYWN0ZXIgKmNoYXJhY3RlcnMsIGludCBjb3VudCwgaW50IGV2ZW5JZk5vSW5kZW50KSB7CisgIGludCBsZW5ndGggPSBzY3IuY29sczsKKyAgU2NyZWVuQ2hhcmFjdGVyIGJ1ZmZlcltsZW5ndGhdOworCisgIGlmICghY2hhcmFjdGVycykgeworICAgIHJlYWRTY3JlZW5Sb3coc2VzLT5zcGt5LCBsZW5ndGgsIGJ1ZmZlcik7CisgICAgY2hhcmFjdGVycyA9IGJ1ZmZlcjsKKyAgICBjb3VudCA9IGxlbmd0aDsKKyAgfQorCisgIGludCBpbmRlbnQgPSBmaW5kRmlyc3ROb25TcGFjZUNoYXJhY3RlcihjaGFyYWN0ZXJzLCBjb3VudCk7CisgIGlmICgoaW5kZW50IDwgMSkgJiYgIWV2ZW5JZk5vSW5kZW50KSByZXR1cm4gMDsKKworICBjaGFyIG1lc3NhZ2VbNTBdOworICBjb25zdCBjaGFyICp0ZXh0ID0gbWVzc2FnZTsKKworICBpZiAoaW5kZW50IDwgMCkgeworICAgIHRleHQgPSBnZXR0ZXh0KCJibGFuayBsaW5lIik7CisgIH0gZWxzZSB7CisgICAgc25wcmludGYobWVzc2FnZSwgc2l6ZW9mKG1lc3NhZ2UpLAorICAgICAgICAgICAgICIlcyAlZCIsIGdldHRleHQoImluZGVudCIpLCBpbmRlbnQpOworICB9CisKKyAgbG9nTWVzc2FnZShMT0dfQ0FURUdPUlkoU1BFRUNIX0VWRU5UUyksCisgICAgICAgICAgICAgImxpbmUgaW5kZW50OiAlZCIsIGluZGVudCk7CisKKyAgc2F5U3RyaW5nKCZzcGssIHRleHQsIFNBWV9PUFRfTVVURV9GSVJTVCk7CisgIHJldHVybiAxOworfQorI2VuZGlmIC8qIEVOQUJMRV9TUEVFQ0hfU1VQUE9SVCAqLworCitpbnQKK2lzQ29udHJhY3RpbmcgKHZvaWQpIHsKKyAgcmV0dXJuIGlzQ29udHJhY3RlZEJyYWlsbGUoKSAmJiBjb250cmFjdGlvblRhYmxlOworfQorCitpbnQKK2dldENvbnRyYWN0ZWRMZW5ndGggKHVuc2lnbmVkIGludCBvdXRwdXRMaW1pdCkgeworICBpbnQgaW5wdXRMZW5ndGggPSBzY3IuY29scyAtIHNlcy0+d2lueDsKKyAgd2NoYXJfdCBpbnB1dEJ1ZmZlcltpbnB1dExlbmd0aF07CisgIHJlYWRTY3JlZW5UZXh0KHNlcy0+d2lueCwgc2VzLT53aW55LCBpbnB1dExlbmd0aCwgMSwgaW5wdXRCdWZmZXIpOworCisgIGludCBvdXRwdXRMZW5ndGggPSBvdXRwdXRMaW1pdDsKKyAgdW5zaWduZWQgY2hhciBvdXRwdXRCdWZmZXJbb3V0cHV0TGVuZ3RoXTsKKworICBpbnQgb2Zmc2V0Q291bnQgPSBpbnB1dExlbmd0aDsKKyAgaW50IG91dHB1dE9mZnNldHNbb2Zmc2V0Q291bnQgKyAxXTsKKworICBjb250cmFjdFRleHQoCisgICAgY29udHJhY3Rpb25UYWJsZSwgTlVMTCwKKyAgICBpbnB1dEJ1ZmZlciwgJmlucHV0TGVuZ3RoLAorICAgIG91dHB1dEJ1ZmZlciwgJm91dHB1dExlbmd0aCwKKyAgICBvdXRwdXRPZmZzZXRzLCBnZXRDdXJzb3JPZmZzZXRGb3JDb250cmFjdGluZygpCisgICk7CisKKyAgZm9yIChpbnQgbGVuZ3RoPTA7IGxlbmd0aDxpbnB1dExlbmd0aDsgbGVuZ3RoKz0xKSB7CisgICAgaW50IG9mZnNldCA9IG91dHB1dE9mZnNldHNbbGVuZ3RoXTsKKworICAgIGlmIChvZmZzZXQgIT0gQ1RCX05PX09GRlNFVCkgeworICAgICAgaWYgKG9mZnNldCA+PSBvdXRwdXRMaW1pdCkgeworICAgICAgICByZXR1cm4gbGVuZ3RoOworICAgICAgfQorICAgIH0KKyAgfQorCisgIHJldHVybiBpbnB1dExlbmd0aDsKK30KKworaW50CitzaG93U2NyZWVuQ3Vyc29yICh2b2lkKSB7CisgIHJldHVybiBzY3IuaGFzQ3Vyc29yCisgICAgICAmJiBwcmVmcy5zaG93U2NyZWVuQ3Vyc29yCisgICAgICAmJiAhKHNlcy0+aGlkZVNjcmVlbkN1cnNvciB8fCBicmwuaGlkZUN1cnNvcikKKyAgICAgIDsKK30KKworaW50Citpc1NhbWVUZXh0ICgKKyAgY29uc3QgU2NyZWVuQ2hhcmFjdGVyICpjaGFyYWN0ZXIxLAorICBjb25zdCBTY3JlZW5DaGFyYWN0ZXIgKmNoYXJhY3RlcjIKKykgeworICByZXR1cm4gY2hhcmFjdGVyMS0+dGV4dCA9PSBjaGFyYWN0ZXIyLT50ZXh0OworfQorCitpbnQKK2lzU2FtZUF0dHJpYnV0ZXMgKAorICBjb25zdCBTY3JlZW5DaGFyYWN0ZXIgKmNoYXJhY3RlcjEsCisgIGNvbnN0IFNjcmVlbkNoYXJhY3RlciAqY2hhcmFjdGVyMgorKSB7CisgIHJldHVybiBjaGFyYWN0ZXIxLT5hdHRyaWJ1dGVzID09IGNoYXJhY3RlcjItPmF0dHJpYnV0ZXM7Cit9CisKK2ludAoraXNTYW1lQ2hhcmFjdGVyICgKKyAgY29uc3QgU2NyZWVuQ2hhcmFjdGVyICpjaGFyYWN0ZXIxLAorICBjb25zdCBTY3JlZW5DaGFyYWN0ZXIgKmNoYXJhY3RlcjIKKykgeworICByZXR1cm4gaXNTYW1lVGV4dChjaGFyYWN0ZXIxLCBjaGFyYWN0ZXIyKSAmJiBpc1NhbWVBdHRyaWJ1dGVzKGNoYXJhY3RlcjEsIGNoYXJhY3RlcjIpOworfQorCitpbnQKK2lzU2FtZVJvdyAoCisgIGNvbnN0IFNjcmVlbkNoYXJhY3RlciAqY2hhcmFjdGVyczEsCisgIGNvbnN0IFNjcmVlbkNoYXJhY3RlciAqY2hhcmFjdGVyczIsCisgIGludCBjb3VudCwKKyAgSXNTYW1lQ2hhcmFjdGVyIGlzU2FtZUNoYXJhY3RlcgorKSB7CisgIGludCBpOworICBmb3IgKGk9MDsgaTxjb3VudDsgKytpKQorICAgIGlmICghaXNTYW1lQ2hhcmFjdGVyKCZjaGFyYWN0ZXJzMVtpXSwgJmNoYXJhY3RlcnMyW2ldKSkKKyAgICAgIHJldHVybiAwOworCisgIHJldHVybiAxOworfQorCitpbnQKK2NhbkJyYWlsbGUgKHZvaWQpIHsKKyAgcmV0dXJuIGJyYWlsbGUgJiYgYnJsLmJ1ZmZlciAmJiAhYnJsLm5vRGlzcGxheSAmJiAhYnJsLmlzU3VzcGVuZGVkOworfQorCitzdGF0aWMgdW5zaWduZWQgaW50IGludGVycnVwdEVuYWJsZWRDb3VudDsKK3N0YXRpYyBBc3luY0V2ZW50ICppbnRlcnJ1cHRFdmVudDsKK3N0YXRpYyBpbnQgaW50ZXJydXB0UGVuZGluZzsKK3N0YXRpYyBXYWl0UmVzdWx0IHdhaXRSZXN1bHQ7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgV2FpdFJlc3VsdCB3YWl0UmVzdWx0OworfSBJbnRlcnJ1cHRFdmVudFBhcmFtZXRlcnM7CisKK2ludAorYnJsdHR5SW50ZXJydXB0IChXYWl0UmVzdWx0IHdhaXRSZXN1bHQpIHsKKyAgaWYgKGludGVycnVwdEV2ZW50KSB7CisgICAgSW50ZXJydXB0RXZlbnRQYXJhbWV0ZXJzICppZXA7CisKKyAgICBpZiAoKGllcCA9IG1hbGxvYyhzaXplb2YoKmllcCkpKSkgeworICAgICAgbWVtc2V0KGllcCwgMCwgc2l6ZW9mKCppZXApKTsKKyAgICAgIGllcC0+d2FpdFJlc3VsdCA9IHdhaXRSZXN1bHQ7CisKKyAgICAgIGlmIChhc3luY1NpZ25hbEV2ZW50KGludGVycnVwdEV2ZW50LCBpZXApKSB7CisgICAgICAgIHJldHVybiAxOworICAgICAgfQorCisgICAgICBmcmVlKGllcCk7CisgICAgfSBlbHNlIHsKKyAgICAgIGxvZ01hbGxvY0Vycm9yKCk7CisgICAgfQorICB9CisKKyAgcmV0dXJuIDA7Cit9CisKK0FTWU5DX0VWRU5UX0NBTExCQUNLKGhhbmRsZUNvcmVJbnRlcnJ1cHQpIHsKKyAgSW50ZXJydXB0RXZlbnRQYXJhbWV0ZXJzICppZXAgPSBwYXJhbWV0ZXJzLT5zaWduYWxEYXRhOworCisgIGlmIChpZXApIHsKKyAgICBpbnRlcnJ1cHRQZW5kaW5nID0gMTsKKyAgICB3YWl0UmVzdWx0ID0gaWVwLT53YWl0UmVzdWx0OworICAgIGZyZWUoaWVwKTsKKyAgfQorfQorCitpbnQKK2JybHR0eUVuYWJsZUludGVycnVwdCAodm9pZCkgeworICBpZiAoIWludGVycnVwdEVuYWJsZWRDb3VudCkgeworICAgIGlmICghKGludGVycnVwdEV2ZW50ID0gYXN5bmNOZXdFdmVudChoYW5kbGVDb3JlSW50ZXJydXB0LCBOVUxMKSkpIHsKKyAgICAgIHJldHVybiAwOworICAgIH0KKyAgfQorCisgIGludGVycnVwdEVuYWJsZWRDb3VudCArPSAxOworICByZXR1cm4gMTsKK30KKworaW50Citicmx0dHlEaXNhYmxlSW50ZXJydXB0ICh2b2lkKSB7CisgIGlmICghaW50ZXJydXB0RW5hYmxlZENvdW50KSByZXR1cm4gMDsKKworICBpZiAoIS0taW50ZXJydXB0RW5hYmxlZENvdW50KSB7CisgICAgYXN5bmNEaXNjYXJkRXZlbnQoaW50ZXJydXB0RXZlbnQpOworICAgIGludGVycnVwdEV2ZW50ID0gTlVMTDsKKyAgfQorCisgIHJldHVybiAxOworfQorCit0eXBlZGVmIHZvaWQgVW5tb25pdG9yZWRDb25kaXRpb25IYW5kbGVyIChjb25zdCB2b2lkICpkYXRhKTsKKworc3RhdGljIHZvaWQKK2hhbmRsZVJvdXRpbmdEb25lIChjb25zdCB2b2lkICpkYXRhKSB7CisgIGNvbnN0IFJvdXRpbmdTdGF0dXMgKnN0YXR1cyA9IGRhdGE7CisKKyAgYWxlcnQoCisgICAgKCpzdGF0dXMgPiBST1VUSU5HX1NUQVRVU19TVUNDRUVTUyk/IEFMRVJUX1JPVVRJTkdfRkFJTEVEOgorICAgIEFMRVJUX1JPVVRJTkdfU1VDQ0VFREVECisgICk7CisKKyAgc2VzLT5zcGt4ID0gc2NyLnBvc3g7CisgIHNlcy0+c3BreSA9IHNjci5wb3N5OworfQorCitzdGF0aWMgdm9pZAoraGFuZGxlQnJhaWxsZURyaXZlckZhaWxlZCAoY29uc3Qgdm9pZCAqZGF0YSkgeworICByZXN0YXJ0QnJhaWxsZURyaXZlcigpOworfQorCitzdGF0aWMgdGltZV90IHByb2dyYW1UZXJtaW5hdGlvblJlcXVlc3RUaW1lOworc3RhdGljIGludCBwcm9ncmFtVGVybWluYXRpb25SZXF1ZXN0U2lnbmFsOworc3RhdGljIHZvbGF0aWxlIHNpZ19hdG9taWNfdCBwcm9ncmFtVGVybWluYXRpb25SZXF1ZXN0Q291bnQ7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgVW5tb25pdG9yZWRDb25kaXRpb25IYW5kbGVyICpoYW5kbGVyOworICBjb25zdCB2b2lkICpkYXRhOworfSBVbm1vbml0b3JlZENvbmRpdGlvbkRlc2NyaXB0b3I7CisKK0FTWU5DX0NPTkRJVElPTl9URVNURVIoY2hlY2tVbm1vbml0b3JlZENvbmRpdGlvbnMpIHsKKyAgVW5tb25pdG9yZWRDb25kaXRpb25EZXNjcmlwdG9yICp1Y2QgPSBkYXRhOworCisgIGlmIChpbnRlcnJ1cHRQZW5kaW5nKSB7CisgICAgbG9nTWVzc2FnZShMT0dfQ0FURUdPUlkoQVNZTkNfRVZFTlRTKSwgImludGVycnVwdCBwZW5kaW5nIik7CisgICAgdWNkLT5kYXRhID0gJndhaXRSZXN1bHQ7CisgICAgaW50ZXJydXB0UGVuZGluZyA9IDA7CisgICAgcmV0dXJuIDE7CisgIH0KKworICBpZiAocHJvZ3JhbVRlcm1pbmF0aW9uUmVxdWVzdENvdW50KSB7CisgICAgLy8gVGhpcyBpcyBhIG1lbW9yeSByZWFkIGJhcnJpZXIgdG8gZW5zdXJlIHRoYXQgdGhlIG1vc3QgcmVjZW50CisgICAgLy8gdGltZSBhbmQgbnVtYmVyIGZvciB0aGUgcHJvZ3JhbSB0ZXJtaW5hdGlvbiBzaWduYWwgYXJlIHNlZW4uCisgICAgX19zeW5jX3N5bmNocm9uaXplKCk7CisKKyAgICBsb2dNZXNzYWdlKExPR19DQVRFR09SWShBU1lOQ19FVkVOVFMpLAorICAgICAgInByb2dyYW0gdGVybWluYXRpb24gcmVxdWVzdGVkOiBDb3VudD0lbGQgU2lnbmFsPSVkIiwKKyAgICAgIChsb25nKXByb2dyYW1UZXJtaW5hdGlvblJlcXVlc3RDb3VudCwgcHJvZ3JhbVRlcm1pbmF0aW9uUmVxdWVzdFNpZ25hbAorICAgICk7CisKKyAgICBzdGF0aWMgY29uc3QgV2FpdFJlc3VsdCByZXN1bHQgPSBXQUlUX1NUT1A7CisgICAgdWNkLT5kYXRhID0gJnJlc3VsdDsKKyAgICByZXR1cm4gMTsKKyAgfQorCisgIHsKKyAgICBzdGF0aWMgUm91dGluZ1N0YXR1cyBzdGF0dXM7CisKKyAgICBpZiAoKHN0YXR1cyA9IGdldFJvdXRpbmdTdGF0dXMoMCkpICE9IFJPVVRJTkdfU1RBVFVTX05PTkUpIHsKKyAgICAgIGxvZ01lc3NhZ2UoTE9HX0NBVEVHT1JZKEFTWU5DX0VWRU5UUyksICJyb3V0aW5nIHN0YXR1czogJXUiLCBzdGF0dXMpOworICAgICAgdWNkLT5oYW5kbGVyID0gaGFuZGxlUm91dGluZ0RvbmU7CisgICAgICB1Y2QtPmRhdGEgPSAmc3RhdHVzOworICAgICAgcmV0dXJuIDE7CisgICAgfQorICB9CisKKyAgaWYgKGJybC5oYXNGYWlsZWQpIHsKKyAgICBsb2dNZXNzYWdlKExPR19DQVRFR09SWShBU1lOQ19FVkVOVFMpLCAiYnJhaWxsZSBkcml2ZXIgZmFpbGVkIik7CisgICAgdWNkLT5oYW5kbGVyID0gaGFuZGxlQnJhaWxsZURyaXZlckZhaWxlZDsKKyAgICByZXR1cm4gMTsKKyAgfQorCisgIHJldHVybiAwOworfQorCitXYWl0UmVzdWx0Citicmx0dHlXYWl0IChpbnQgZHVyYXRpb24pIHsKKyAgVW5tb25pdG9yZWRDb25kaXRpb25EZXNjcmlwdG9yIHVjZCA9IHsKKyAgICAuaGFuZGxlciA9IE5VTEwsCisgICAgLmRhdGEgPSBOVUxMCisgIH07CisKKyAgaWYgKGFzeW5jQXdhaXRDb25kaXRpb24oZHVyYXRpb24sIGNoZWNrVW5tb25pdG9yZWRDb25kaXRpb25zLCAmdWNkKSkgeworICAgIGlmICghdWNkLmhhbmRsZXIpIHsKKyAgICAgIGNvbnN0IFdhaXRSZXN1bHQgKnJlc3VsdCA9IHVjZC5kYXRhOworICAgICAgcmV0dXJuICpyZXN1bHQ7CisgICAgfQorCisgICAgdWNkLmhhbmRsZXIodWNkLmRhdGEpOworICB9CisKKyAgcmV0dXJuIDE7Cit9CisKK2ludAorc2hvd0RvdFBhdHRlcm4gKHVuc2lnbmVkIGNoYXIgZG90cywgdW5zaWduZWQgY2hhciBkdXJhdGlvbikgeworICBpZiAoYnJhaWxsZS0+d3JpdGVTdGF0dXMgJiYgKGJybC5zdGF0dXNDb2x1bW5zID4gMCkpIHsKKyAgICB1bnNpZ25lZCBpbnQgbGVuZ3RoID0gYnJsLnN0YXR1c0NvbHVtbnMgKiBicmwuc3RhdHVzUm93czsKKyAgICB1bnNpZ25lZCBjaGFyIGNlbGxzW2xlbmd0aF07ICAgICAgICAvKiBzdGF0dXMgY2VsbCBidWZmZXIgKi8KKyAgICBtZW1zZXQoY2VsbHMsIGRvdHMsIGxlbmd0aCk7CisgICAgaWYgKCFicmFpbGxlLT53cml0ZVN0YXR1cygmYnJsLCBjZWxscykpIHJldHVybiAwOworICB9CisKKyAgbWVtc2V0KGJybC5idWZmZXIsIGRvdHMsIGJybC50ZXh0Q29sdW1ucypicmwudGV4dFJvd3MpOworICBpZiAoIXdyaXRlQnJhaWxsZVdpbmRvdygmYnJsLCBOVUxMLCAwKSkgcmV0dXJuIDA7CisKKyAgZHJhaW5CcmFpbGxlT3V0cHV0KCZicmwsIGR1cmF0aW9uKTsKKyAgcmV0dXJuIDE7Cit9CisKK3N0YXRpYyB2b2lkCitleGl0U2Vzc2lvbnMgKHZvaWQgKmRhdGEpIHsKKyAgY2FuY2VsRGVsYXllZEN1cnNvclRyYWNraW5nQWxhcm0oKTsKKworICBpZiAoc2VzKSB7CisgICAgcG9wQ29tbWFuZEVudmlyb25tZW50KCk7CisgICAgc2VzID0gTlVMTDsKKyAgfQorCisgIGRlYWxsb2NhdGVTZXNzaW9uRW50cmllcygpOworfQorCitzdGF0aWMgQXN5bmNFdmVudCAqYWRkQ29yZVRhc2tFdmVudCA9IE5VTEw7CisKK3N0YXRpYyBpbnQKK3N0YXJ0Q29yZVRhc2tzICh2b2lkKSB7CisgIGlmICghYWRkQ29yZVRhc2tFdmVudCkgeworICAgIGlmICghKGFkZENvcmVUYXNrRXZlbnQgPSBhc3luY05ld0FkZFRhc2tFdmVudCgpKSkgeworICAgICAgcmV0dXJuIDA7CisgICAgfQorICB9CisKKyAgcmV0dXJuIDE7Cit9CisKK3N0YXRpYyB2b2lkCitzdG9wQ29yZVRhc2tzICh2b2lkKSB7CisgIGlmIChhZGRDb3JlVGFza0V2ZW50KSB7CisgICAgYXN5bmNEaXNjYXJkRXZlbnQoYWRkQ29yZVRhc2tFdmVudCk7CisgICAgYWRkQ29yZVRhc2tFdmVudCA9IE5VTEw7CisgIH0KK30KKworc3RhdGljIHZvaWQKK2xvZ0NvcmVUYXNrQWN0aW9uIChDb3JlVGFza0NhbGxiYWNrICpjYWxsYmFjaywgY29uc3QgY2hhciAqYWN0aW9uKSB7CisgIGxvZ1N5bWJvbChMT0dfREVCVUcsIGNhbGxiYWNrLCAiJXMgY29yZSB0YXNrIiwgYWN0aW9uKTsKK30KKwordHlwZWRlZiBzdHJ1Y3QgeworICBzdHJ1Y3QgeworICAgIENvcmVUYXNrQ2FsbGJhY2sgKmNhbGxiYWNrOworICAgIHZvaWQgKmRhdGE7CisgIH0gcnVuOworCisgIHN0cnVjdCB7CisgICAgQXN5bmNFdmVudCAqZXZlbnQ7CisgICAgdW5zaWduZWQgZmluaXNoZWQ6MTsKKyAgfSB3YWl0OworfSBDb3JlVGFza0RhdGE7CisKK0FTWU5DX1RBU0tfQ0FMTEJBQ0soaGFuZGxlQ29yZVRhc2spIHsKKyAgQ29yZVRhc2tEYXRhICpjdGQgPSBkYXRhOworCisgIHsKKyAgICBDb3JlVGFza0NhbGxiYWNrICpjYWxsYmFjayA9IGN0ZC0+cnVuLmNhbGxiYWNrOworICAgIGxvZ0NvcmVUYXNrQWN0aW9uKGNhbGxiYWNrLCAic3RhcnRpbmciKTsKKyAgICBjYWxsYmFjayhjdGQtPnJ1bi5kYXRhKTsKKyAgICBsb2dDb3JlVGFza0FjdGlvbihjYWxsYmFjaywgImZpbmlzaGVkIik7CisgIH0KKworICB7CisgICAgQXN5bmNFdmVudCAqZXZlbnQgPSBjdGQtPndhaXQuZXZlbnQ7CisgICAgaWYgKGV2ZW50KSBhc3luY1NpZ25hbEV2ZW50KGV2ZW50LCBjdGQpOworICB9Cit9CisKK0FTWU5DX0NPTkRJVElPTl9URVNURVIodGVzdENvcmVUYXNrRmluaXNoZWQpIHsKKyAgQ29yZVRhc2tEYXRhICpjdGQgPSBkYXRhOworICByZXR1cm4gY3RkLT53YWl0LmZpbmlzaGVkOworfQorCitBU1lOQ19FVkVOVF9DQUxMQkFDSyhzZXRDb3JlVGFza0ZpbmlzaGVkKSB7CisgIENvcmVUYXNrRGF0YSAqY3RkID0gcGFyYW1ldGVycy0+c2lnbmFsRGF0YTsKKyAgY3RkLT53YWl0LmZpbmlzaGVkID0gMTsKK30KKworaW50CitydW5Db3JlVGFzayAoQ29yZVRhc2tDYWxsYmFjayAqY2FsbGJhY2ssIHZvaWQgKmRhdGEsIGludCB3YWl0KSB7CisgIGludCB3YXNTY2hlZHVsZWQgPSAwOworCisgIGlmIChhZGRDb3JlVGFza0V2ZW50KSB7CisgICAgQ29yZVRhc2tEYXRhICpjdGQ7CisKKyAgICBpZiAoKGN0ZCA9IG1hbGxvYyhzaXplb2YoKmN0ZCkpKSkgeworICAgICAgbWVtc2V0KGN0ZCwgMCwgc2l6ZW9mKCpjdGQpKTsKKworICAgICAgY3RkLT5ydW4uY2FsbGJhY2sgPSBjYWxsYmFjazsKKyAgICAgIGN0ZC0+cnVuLmRhdGEgPSBkYXRhOworCisgICAgICBjdGQtPndhaXQuZXZlbnQgPSBOVUxMOworICAgICAgY3RkLT53YWl0LmZpbmlzaGVkID0gMDsKKworICAgICAgaWYgKCF3YWl0IHx8IChjdGQtPndhaXQuZXZlbnQgPSBhc3luY05ld0V2ZW50KHNldENvcmVUYXNrRmluaXNoZWQsIE5VTEwpKSkgeworICAgICAgICBsb2dDb3JlVGFza0FjdGlvbihjYWxsYmFjaywgInNjaGVkdWxpbmciKTsKKworICAgICAgICBpZiAoYXN5bmNBZGRUYXNrKGFkZENvcmVUYXNrRXZlbnQsIGhhbmRsZUNvcmVUYXNrLCBjdGQpKSB7CisgICAgICAgICAgd2FzU2NoZWR1bGVkID0gMTsKKworICAgICAgICAgIGlmICh3YWl0KSB7CisgICAgICAgICAgICBsb2dDb3JlVGFza0FjdGlvbihjYWxsYmFjaywgImF3YWl0aW5nIik7CisgICAgICAgICAgICBhc3luY1dhaXRGb3IodGVzdENvcmVUYXNrRmluaXNoZWQsIGN0ZCk7CisgICAgICAgICAgICBsb2dDb3JlVGFza0FjdGlvbihjYWxsYmFjaywgImNvbXBsZXRlZCIpOworICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHsKKyAgICAgICAgICBBc3luY0V2ZW50ICpldmVudCA9IGN0ZC0+d2FpdC5ldmVudDsKKyAgICAgICAgICBpZiAoZXZlbnQpIGFzeW5jRGlzY2FyZEV2ZW50KGV2ZW50KTsKKyAgICAgICAgfQorICAgICAgfQorCisgICAgICBmcmVlKGN0ZCk7CisgICAgfSBlbHNlIHsKKyAgICAgIGxvZ01hbGxvY0Vycm9yKCk7CisgICAgfQorICB9IGVsc2UgeworICAgIGxvZ01lc3NhZ2UoTE9HX0VSUiwgImNvcmUgdGFza3Mgbm90IHN0YXJ0ZWQiKTsKKyAgfQorCisgIHJldHVybiB3YXNTY2hlZHVsZWQ7Cit9CisKKyNpZmRlZiBBU1lOQ19DQU5fSEFORExFX1NJR05BTFMKK0FTWU5DX1NJR05BTF9IQU5ETEVSKGhhbmRsZVByb2dyYW1UZXJtaW5hdGlvblJlcXVlc3QpIHsKKyAgdGltZV90IG5vdyA9IHRpbWUoTlVMTCk7CisKKyAgaW50IHJlc2V0ID0gZGlmZnRpbWUobm93LCBwcm9ncmFtVGVybWluYXRpb25SZXF1ZXN0VGltZSkKKyAgICAgICAgICAgID4gUFJPR1JBTV9URVJNSU5BVElPTl9SRVFVRVNUX1JFU0VUX1NFQ09ORFM7CisKKyAgaW50IGNvdW50ID0gcmVzZXQ/IDA6IHByb2dyYW1UZXJtaW5hdGlvblJlcXVlc3RDb3VudDsKKyAgaWYgKCsrY291bnQgPiBQUk9HUkFNX1RFUk1JTkFUSU9OX1JFUVVFU1RfQ09VTlRfVEhSRVNIT0xEKSBleGl0KDEpOworCisgIHByb2dyYW1UZXJtaW5hdGlvblJlcXVlc3RUaW1lID0gbm93OworICBwcm9ncmFtVGVybWluYXRpb25SZXF1ZXN0U2lnbmFsID0gc2lnbmFsTnVtYmVyOworCisgIC8vIFRoaXMgaXMgYSBtZW1vcnkgd3JpdGUgYmFycmllciB0byBlbnN1cmUgdGhhdCB0aGUgdGltZSBhbmQgbnVtYmVyCisgIC8vIGZvciB0aGlzIHNpZ25hbCB3aWxsIGJlIHZpc2libGUgYmVmb3JlIGl0cyBjb3VudCBpcyBhZGp1c3RlZC4KKyAgX19zeW5jX3N5bmNocm9uaXplKCk7CisKKyAgcHJvZ3JhbVRlcm1pbmF0aW9uUmVxdWVzdENvdW50ID0gY291bnQ7Cit9CisKKyNpZmRlZiBTSUdDSExECitBU1lOQ19TSUdOQUxfSEFORExFUihoYW5kbGVDaGlsZERlYXRoKSB7Cit9CisjZW5kaWYgLyogU0lHQ0hMRCAqLworI2VuZGlmIC8qIEFTWU5DX0NBTl9IQU5ETEVfU0lHTkFMUyAqLworCitQcm9ncmFtRXhpdFN0YXR1cworYnJsdHR5Q29uc3RydWN0IChpbnQgYXJnYywgY2hhciAqYXJndltdKSB7CisgIHsKKyAgICBUaW1lVmFsdWUgbm93OworICAgIGdldE1vbm90b25pY1RpbWUoJm5vdyk7CisgICAgc3JhbmQobm93LnNlY29uZHMgXiBub3cubmFub3NlY29uZHMpOworICB9CisKKyAgeworICAgIFByb2dyYW1FeGl0U3RhdHVzIGV4aXRTdGF0dXMgPSBicmx0dHlQcmVwYXJlKGFyZ2MsIGFyZ3YpOworICAgIGlmIChleGl0U3RhdHVzICE9IFBST0dfRVhJVF9TVUNDRVNTKSByZXR1cm4gZXhpdFN0YXR1czsKKyAgfQorCisgIHByb2dyYW1UZXJtaW5hdGlvblJlcXVlc3RUaW1lID0gdGltZShOVUxMKTsKKyAgcHJvZ3JhbVRlcm1pbmF0aW9uUmVxdWVzdFNpZ25hbCA9IDA7CisgIHByb2dyYW1UZXJtaW5hdGlvblJlcXVlc3RDb3VudCA9IDA7CisKKyNpZmRlZiBBU1lOQ19DQU5fQkxPQ0tfU0lHTkFMUworICBhc3luY0Jsb2NrT2J0YWluYWJsZVNpZ25hbHMoKTsKKyNlbmRpZiAvKiBBU1lOQ19DQU5fQkxPQ0tfU0lHTkFMUyAqLworCisjaWZkZWYgQVNZTkNfQ0FOX0hBTkRMRV9TSUdOQUxTCisjaWZkZWYgU0lHUElQRQorICAvKiBXZSBpZ25vcmUgU0lHUElQRSBiZWZvcmUgY2FsbGluZyBicmx0dHlTdGFydCgpIHNvIHRoYXQgYSBkcml2ZXIKKyAgICogd2hpY2ggdXNlcyBhIGJyb2tlbiBwaXBlIHdvbid0IGFib3J0IHByb2dyYW0gZXhlY3V0aW9uLgorICAgKi8KKyAgYXN5bmNJZ25vcmVTaWduYWwoU0lHUElQRSwgTlVMTCk7CisjZW5kaWYgLyogU0lHUElQRSAqLworCisjaWZkZWYgU0lHVEVSTQorICBhc3luY0hhbmRsZVNpZ25hbChTSUdURVJNLCBoYW5kbGVQcm9ncmFtVGVybWluYXRpb25SZXF1ZXN0LCBOVUxMKTsKKyNlbmRpZiAvKiBTSUdURVJNICovCisKKyNpZmRlZiBTSUdJTlQKKyAgYXN5bmNIYW5kbGVTaWduYWwoU0lHSU5ULCBoYW5kbGVQcm9ncmFtVGVybWluYXRpb25SZXF1ZXN0LCBOVUxMKTsKKyNlbmRpZiAvKiBTSUdJTlQgKi8KKworI2lmZGVmIFNJR0NITEQKKyAgYXN5bmNIYW5kbGVTaWduYWwoU0lHQ0hMRCwgaGFuZGxlQ2hpbGREZWF0aCwgTlVMTCk7CisjZW5kaWYgLyogU0lHQ0hMRCAqLworI2VuZGlmIC8qIEFTWU5DX0NBTl9IQU5ETEVfU0lHTkFMUyAqLworCisgIGludGVycnVwdEVuYWJsZWRDb3VudCA9IDA7CisgIGludGVycnVwdEV2ZW50ID0gTlVMTDsKKyAgaW50ZXJydXB0UGVuZGluZyA9IDA7CisKKyAgZGVsYXllZEN1cnNvclRyYWNraW5nQWxhcm0gPSBOVUxMOworCisgIHN0YXJ0Q29yZVRhc2tzKCk7CisgIGJlZ2luQ29tbWFuZFF1ZXVlKCk7CisgIGJlZ2luVXBkYXRlcygpOworICBzdXNwZW5kVXBkYXRlcygpOworCisgIHsKKyAgICBQcm9ncmFtRXhpdFN0YXR1cyBleGl0U3RhdHVzID0gYnJsdHR5U3RhcnQoKTsKKyAgICBpZiAoZXhpdFN0YXR1cyAhPSBQUk9HX0VYSVRfU1VDQ0VTUykgcmV0dXJuIGV4aXRTdGF0dXM7CisgIH0KKworICBvblByb2dyYW1FeGl0KCJzZXNzaW9ucyIsIGV4aXRTZXNzaW9ucywgTlVMTCk7CisgIHNldFNlc3Npb25FbnRyeSgpOworICBzZXMtPnRya3ggPSBzY3IucG9zeDsgc2VzLT50cmt5ID0gc2NyLnBvc3k7CisgIGlmICghdHJhY2tTY3JlZW5DdXJzb3IoMSkpIHNlcy0+d2lueCA9IHNlcy0+d2lueSA9IDA7CisgIHNlcy0+bW90eCA9IHNlcy0+d2lueDsgc2VzLT5tb3R5ID0gc2VzLT53aW55OworICBzZXMtPnNwa3ggPSBzZXMtPndpbng7IHNlcy0+c3BreSA9IHNlcy0+d2lueTsKKworICByZXN1bWVVcGRhdGVzKDEpOworICByZXR1cm4gUFJPR19FWElUX1NVQ0NFU1M7Cit9CisKK2ludAorYnJsdHR5RGVzdHJ1Y3QgKHZvaWQpIHsKKyAgaWYgKHByZWZzLnNhdmVPbkV4aXQpIHNhdmVQcmVmZXJlbmNlcygpOworCisgIHN1c3BlbmRVcGRhdGVzKCk7CisgIHN0b3BDb3JlVGFza3MoKTsKKworICBlbmRQcm9ncmFtKCk7CisgIGVuZENvbW1hbmRRdWV1ZSgpOworICByZXR1cm4gMTsKK30KZGlmZiAtLWdpdCBhL1Byb2dyYW1zL2NvcmUuaCBiL1Byb2dyYW1zL2NvcmUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMzc5MDQ1Ci0tLSAvZGV2L251bGwKKysrIGIvUHJvZ3JhbXMvY29yZS5oCkBAIC0wLDAgKzEsMjM1IEBACisvKgorICogQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyAqICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyAqCisgKiBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorICoKKyAqIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyAqCisgKiBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisgKi8KKworI2lmbmRlZiBCUkxUVFlfSU5DTFVERURfQ09SRQorI2RlZmluZSBCUkxUVFlfSU5DTFVERURfQ09SRQorCisjaW5jbHVkZSAicHJvbG9ndWUuaCIKKworI2luY2x1ZGUgInN0cmZtdGguaCIKKyNpbmNsdWRlICJwcm9ncmFtLmgiCisjaW5jbHVkZSAidGltaW5nLmgiCisjaW5jbHVkZSAiY21kLmgiCisjaW5jbHVkZSAiYnJsLmgiCisjaW5jbHVkZSAic3BrLmgiCisjaW5jbHVkZSAic2NyX3R5cGVzLmgiCisjaW5jbHVkZSAic2VzLmgiCisjaW5jbHVkZSAiY3RiLmgiCisjaW5jbHVkZSAia3RiLmgiCisjaW5jbHVkZSAicHJlZnMuaCIKKyNpbmNsdWRlICJwcm9maWxlX3R5cGVzLmgiCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYgLyogX19jcGx1c3BsdXMgKi8KKworZXh0ZXJuIGludCBpc0NvbnRyYWN0ZWRCcmFpbGxlICh2b2lkKTsKK2V4dGVybiBpbnQgaXNTaXhEb3RDb21wdXRlckJyYWlsbGUgKHZvaWQpOworZXh0ZXJuIHZvaWQgc2V0Q29udHJhY3RlZEJyYWlsbGUgKGludCBjb250cmFjdGVkKTsKK2V4dGVybiB2b2lkIHNldFNpeERvdENvbXB1dGVyQnJhaWxsZSAoaW50IHNpeERvdCk7CitleHRlcm4gdm9pZCBvbkJyYWlsbGVWYXJpYW50VXBkYXRlZCAodm9pZCk7CisKK2V4dGVybiBTY3JlZW5EZXNjcmlwdGlvbiBzY3I7CisjZGVmaW5lIFNDUl9DT0xVTU5fT0soY29sdW1uKSBJU19XSVRISU5fQk9VTkRTKChjb2x1bW4pLCBzY3IuY29scykKKyNkZWZpbmUgU0NSX1JPV19PSyhyb3cpIElTX1dJVEhJTl9CT1VORFMoKHJvdyksIHNjci5yb3dzKQorI2RlZmluZSBTQ1JfQ09PUkRJTkFURVNfT0soY29sdW1uLHJvdykgKFNDUl9DT0xVTU5fT0soKGNvbHVtbikpICYmIFNDUl9ST1dfT0soKHJvdykpKQorI2RlZmluZSBTQ1JfQ1VSU09SX09LKCkgU0NSX0NPT1JESU5BVEVTX09LKHNjci5wb3N4LCBzY3IucG9zeSkKKyNkZWZpbmUgU0NSX0NPTFVNTl9OVU1CRVIoY29sdW1uKSAoU0NSX0NPTFVNTl9PSygoY29sdW1uKSk/IChjb2x1bW4pKzE6IDApCisjZGVmaW5lIFNDUl9ST1dfTlVNQkVSKHJvdykgKFNDUl9ST1dfT0soKHJvdykpPyAocm93KSsxOiAwKQorCitleHRlcm4gdm9pZCB1cGRhdGVTZXNzaW9uQXR0cmlidXRlcyAodm9pZCk7CitleHRlcm4gU2Vzc2lvbkVudHJ5ICpzZXM7CisKK3R5cGVkZWYgaW50ICgqSXNTYW1lQ2hhcmFjdGVyKSAoCisgIGNvbnN0IFNjcmVlbkNoYXJhY3RlciAqY2hhcmFjdGVyMSwKKyAgY29uc3QgU2NyZWVuQ2hhcmFjdGVyICpjaGFyYWN0ZXIyCispOworCitleHRlcm4gaW50IGlzU2FtZVRleHQgKAorICBjb25zdCBTY3JlZW5DaGFyYWN0ZXIgKmNoYXJhY3RlcjEsCisgIGNvbnN0IFNjcmVlbkNoYXJhY3RlciAqY2hhcmFjdGVyMgorKTsKKworZXh0ZXJuIGludCBpc1NhbWVBdHRyaWJ1dGVzICgKKyAgY29uc3QgU2NyZWVuQ2hhcmFjdGVyICpjaGFyYWN0ZXIxLAorICBjb25zdCBTY3JlZW5DaGFyYWN0ZXIgKmNoYXJhY3RlcjIKKyk7CisKK2V4dGVybiBpbnQKK2lzU2FtZUNoYXJhY3RlciAoCisgIGNvbnN0IFNjcmVlbkNoYXJhY3RlciAqY2hhcmFjdGVyMSwKKyAgY29uc3QgU2NyZWVuQ2hhcmFjdGVyICpjaGFyYWN0ZXIyCispOworCitleHRlcm4gaW50IGlzU2FtZVJvdyAoCisgIGNvbnN0IFNjcmVlbkNoYXJhY3RlciAqY2hhcmFjdGVyczEsCisgIGNvbnN0IFNjcmVlbkNoYXJhY3RlciAqY2hhcmFjdGVyczIsCisgIGludCBjb3VudCwKKyAgSXNTYW1lQ2hhcmFjdGVyIGlzU2FtZUNoYXJhY3RlcgorKTsKKworZXh0ZXJuIHVuc2lnbmVkIGNoYXIgaW5mb01vZGU7CisKK2V4dGVybiBpbnQgY2FuQnJhaWxsZSAodm9pZCk7CitleHRlcm4gaW50IHdyaXRlQnJhaWxsZUNoYXJhY3RlcnMgKGNvbnN0IGNoYXIgKm1vZGUsIGNvbnN0IHdjaGFyX3QgKmNoYXJhY3RlcnMsIHNpemVfdCBsZW5ndGgpOworZXh0ZXJuIHZvaWQgZmlsbFN0YXR1c1NlcGFyYXRvciAod2NoYXJfdCAqdGV4dCwgdW5zaWduZWQgY2hhciAqZG90cyk7CisKK2V4dGVybiBpbnQgd3JpdGVCcmFpbGxlVGV4dCAoY29uc3QgY2hhciAqbW9kZSwgY29uc3QgY2hhciAqdGV4dCk7CitleHRlcm4gaW50IHNob3dCcmFpbGxlVGV4dCAoY29uc3QgY2hhciAqbW9kZSwgY29uc3QgY2hhciAqdGV4dCwgaW50IG1pbmltdW1EZWxheSk7CisKK2V4dGVybiBjaGFyICpvcHRfZHJpdmVyc0RpcmVjdG9yeTsKK2V4dGVybiBjaGFyICpvcHRfdGFibGVzRGlyZWN0b3J5OworZXh0ZXJuIGNoYXIgKm9wdF90ZXh0VGFibGU7CitleHRlcm4gY2hhciAqb3B0X2NvbnRyYWN0aW9uVGFibGU7CitleHRlcm4gY2hhciAqb3B0X2F0dHJpYnV0ZXNUYWJsZTsKK2V4dGVybiBjaGFyICpvcHRfa2V5Ym9hcmRUYWJsZTsKKworZXh0ZXJuIGNoYXIgKm9wdF9icmFpbGxlRGV2aWNlOworZXh0ZXJuIGludCBvcHRfcmVsZWFzZURldmljZTsKKworZXh0ZXJuIGludCBpc1dvcmRCcmVhayAoY29uc3QgU2NyZWVuQ2hhcmFjdGVyICpjaGFyYWN0ZXJzLCBpbnQgeCk7CitleHRlcm4gaW50IGdldFdvcmRXcmFwTGVuZ3RoIChpbnQgcm93LCBpbnQgZnJvbSwgaW50IGNvdW50KTsKK2V4dGVybiB2b2lkIHNldFdvcmRXcmFwU3RhcnQgKGludCBzdGFydCk7CisKK2V4dGVybiB2b2lkIHBsYWNlUmlnaHRFZGdlIChpbnQgY29sdW1uKTsKK2V4dGVybiB2b2lkIHBsYWNlQnJhaWxsZVdpbmRvd1JpZ2h0ICh2b2lkKTsKK2V4dGVybiB2b2lkIHBsYWNlQnJhaWxsZVdpbmRvd0hvcml6b250YWxseSAoaW50IHgpOworCitleHRlcm4gaW50IG1vdmVCcmFpbGxlV2luZG93TGVmdCAodW5zaWduZWQgaW50IGFtb3VudCk7CitleHRlcm4gaW50IG1vdmVCcmFpbGxlV2luZG93UmlnaHQgKHVuc2lnbmVkIGludCBhbW91bnQpOworCitleHRlcm4gaW50IHNoaWZ0QnJhaWxsZVdpbmRvd0xlZnQgKHVuc2lnbmVkIGludCBhbW91bnQpOworZXh0ZXJuIGludCBzaGlmdEJyYWlsbGVXaW5kb3dSaWdodCAodW5zaWduZWQgaW50IGFtb3VudCk7CisKK2V4dGVybiB2b2lkIHNsaWRlQnJhaWxsZVdpbmRvd1ZlcnRpY2FsbHkgKGludCB5KTsKKworZXh0ZXJuIGludCBzaG93U2NyZWVuQ3Vyc29yICh2b2lkKTsKK2V4dGVybiBpbnQgdHJhY2tTY3JlZW5DdXJzb3IgKGludCBwbGFjZSk7CitleHRlcm4gdm9pZCBjYW5jZWxEZWxheWVkQ3Vyc29yVHJhY2tpbmdBbGFybSAodm9pZCk7CisKK2V4dGVybiBpbnQgc3RhcnRTY3JlZW5DdXJzb3JSb3V0aW5nIChpbnQgY29sdW1uLCBpbnQgcm93KTsKK2V4dGVybiBpbnQgYnJpbmdTY3JlZW5DdXJzb3IgKGludCBjb2x1bW4sIGludCByb3cpOworCit0eXBlZGVmIHN0cnVjdCB7CisgIFRpbWVWYWx1ZSB2YWx1ZTsKKyAgVGltZUNvbXBvbmVudHMgY29tcG9uZW50czsKKyAgY29uc3QgY2hhciAqbWVyaWRpYW47Cit9IFRpbWVGb3JtYXR0aW5nRGF0YTsKKworZXh0ZXJuIHZvaWQgZ2V0VGltZUZvcm1hdHRpbmdEYXRhIChUaW1lRm9ybWF0dGluZ0RhdGEgKmZtdCk7CitleHRlcm4gU1RSX0RFQ0xBUkVfRk9STUFUVEVSKGZvcm1hdEJyYWlsbGVUaW1lLCBjb25zdCBUaW1lRm9ybWF0dGluZ0RhdGEgKmZtdCk7CisKK2V4dGVybiBpbnQgaXNDb250cmFjdGVkOworZXh0ZXJuIGludCBjb250cmFjdGVkVHJhY2s7CitleHRlcm4gQnJhaWxsZVJvd0Rlc2NyaXB0b3IgKmdldEJyYWlsbGVSb3dEZXNjcmlwdG9yKHVuc2lnbmVkIGludCByb3cpOworZXh0ZXJuIGludCBnZXRDdXJzb3JPZmZzZXRGb3JDb250cmFjdGluZyh2b2lkKTsKKworZXh0ZXJuIGludCBpc0NvbnRyYWN0aW5nICh2b2lkKTsKK2V4dGVybiBpbnQgZ2V0Q29udHJhY3RlZExlbmd0aCAodW5zaWduZWQgaW50IG91dHB1dExpbWl0KTsKKworZXh0ZXJuIENvbnRyYWN0aW9uVGFibGUgKmNvbnRyYWN0aW9uVGFibGU7CisKK2V4dGVybiBLZXlUYWJsZSAqa2V5Ym9hcmRUYWJsZTsKKworZXh0ZXJuIFByb2dyYW1FeGl0U3RhdHVzIGJybHR0eVByZXBhcmUgKGludCBhcmdjLCBjaGFyICphcmd2W10pOworZXh0ZXJuIFByb2dyYW1FeGl0U3RhdHVzIGJybHR0eVN0YXJ0ICh2b2lkKTsKKworZXh0ZXJuIHZvaWQgc2V0UHJlZmVyZW5jZXMgKGNvbnN0IFByZWZlcmVuY2VTZXR0aW5ncyAqbmV3UHJlZmVyZW5jZXMpOworZXh0ZXJuIGludCBsb2FkUHJlZmVyZW5jZXMoaW50IHJlc2V0KTsKK2V4dGVybiBpbnQgc2F2ZVByZWZlcmVuY2VzICh2b2lkKTsKKworZXh0ZXJuIHVuc2lnbmVkIGNoYXIgZ2V0Q3Vyc29yRG90cyAoY29uc3QgdW5zaWduZWQgY2hhciAqc2V0dGluZyk7CitleHRlcm4gaW50IHNldEN1cnNvckRvdHMgKHVuc2lnbmVkIGNoYXIgKnNldHRpbmcsIHVuc2lnbmVkIGNoYXIgZG90cyk7CitleHRlcm4gdW5zaWduZWQgY2hhciBtYXBDdXJzb3JEb3RzICh1bnNpZ25lZCBjaGFyIGRvdHMpOworCitleHRlcm4gdW5zaWduZWQgY2hhciBnZXRTY3JlZW5DdXJzb3JEb3RzICh2b2lkKTsKK2V4dGVybiBpbnQgc2V0U2NyZWVuQ3Vyc29yRG90cyAodW5zaWduZWQgY2hhciBkb3RzKTsKKworZXh0ZXJuIHVuc2lnbmVkIGNoYXIgZ2V0U3BlZWNoQ3Vyc29yRG90cyAodm9pZCk7CitleHRlcm4gaW50IHNldFNwZWVjaEN1cnNvckRvdHMgKHVuc2lnbmVkIGNoYXIgZG90cyk7CisKK2V4dGVybiBCcmFpbGxlRGlzcGxheSBicmw7CQkJLyogYnJhaWxsZSBkcml2ZXIgcmVmZXJlbmNlICovCitleHRlcm4gaW50IGhhdmVCcmFpbGxlRGlzcGxheSh2b2lkKTsKKworZXh0ZXJuIHVuc2lnbmVkIGludCB0ZXh0U3RhcnQ7CitleHRlcm4gdW5zaWduZWQgaW50IHRleHRDb3VudDsKK2V4dGVybiB1bnNpZ25lZCBjaGFyIHRleHRNYXhpbWl6ZWQ7CisKK2V4dGVybiB1bnNpZ25lZCBpbnQgc3RhdHVzU3RhcnQ7CitleHRlcm4gdW5zaWduZWQgaW50IHN0YXR1c0NvdW50OworCitleHRlcm4gdW5zaWduZWQgaW50IGZ1bGxXaW5kb3dTaGlmdDsJCQkvKiBGdWxsIHdpbmRvdyBob3Jpem9udGFsIGRpc3RhbmNlICovCitleHRlcm4gdW5zaWduZWQgaW50IGhhbGZXaW5kb3dTaGlmdDsJCQkvKiBIYWxmIHdpbmRvdyBob3Jpem9udGFsIGRpc3RhbmNlICovCitleHRlcm4gdW5zaWduZWQgaW50IHZlcnRpY2FsV2luZG93U2hpZnQ7CQkJLyogV2luZG93IHZlcnRpY2FsIGRpc3RhbmNlICovCisKK2V4dGVybiB2b2lkIHNldEJyYWlsbGVPbiAodm9pZCk7CitleHRlcm4gdm9pZCBzZXRCcmFpbGxlT2ZmIChjb25zdCBjaGFyICptZXNzYWdlKTsKK2V4dGVybiB2b2lkIGxvY2tCcmFpbGxlRHJpdmVyICh2b2lkKTsKK2V4dGVybiB2b2lkIHVubG9ja0JyYWlsbGVEcml2ZXIgKHZvaWQpOworZXh0ZXJuIHZvaWQgZW5hYmxlQnJhaWxsZURyaXZlciAodm9pZCk7CitleHRlcm4gdm9pZCBkaXNhYmxlQnJhaWxsZURyaXZlciAoY29uc3QgY2hhciAqcmVhc29uKTsKK2V4dGVybiBpbnQgY29uc3RydWN0QnJhaWxsZURyaXZlciAodm9pZCk7CitleHRlcm4gdm9pZCBkZXN0cnVjdEJyYWlsbGVEcml2ZXIgKHZvaWQpOworZXh0ZXJuIGludCBpc0JyYWlsbGVEcml2ZXJDb25zdHJ1Y3RlZCAodm9pZCk7CitleHRlcm4gaW50IGlzQnJhaWxsZU9ubGluZSAodm9pZCk7CitleHRlcm4gdm9pZCBmb3JnZXREZXZpY2VzICh2b2lkKTsKKworZXh0ZXJuIHZvaWQgcmVjb25maWd1cmVCcmFpbGxlV2luZG93ICh2b2lkKTsKK2V4dGVybiBpbnQgaGF2ZVN0YXR1c0NlbGxzICh2b2lkKTsKKworZXh0ZXJuIGludCBmaW5kRmlyc3ROb25TcGFjZUNoYXJhY3RlciAoY29uc3QgU2NyZWVuQ2hhcmFjdGVyICpjaGFyYWN0ZXJzLCBpbnQgY291bnQpOworZXh0ZXJuIGludCBmaW5kTGFzdE5vblNwYWNlQ2hhcmFjdGVyIChjb25zdCBTY3JlZW5DaGFyYWN0ZXIgKmNoYXJhY3RlcnMsIGludCBjb3VudCk7CitleHRlcm4gaW50IGlzQWxsU3BhY2VDaGFyYWN0ZXJzIChjb25zdCBTY3JlZW5DaGFyYWN0ZXIgKmNoYXJhY3RlcnMsIGludCBjb3VudCk7CisKKyNpZmRlZiBFTkFCTEVfU1BFRUNIX1NVUFBPUlQKK2V4dGVybiBTcGVlY2hTeW50aGVzaXplciBzcGs7CitleHRlcm4gaW50IGhhdmVTcGVlY2hTeW50aGVzaXplcih2b2lkKTsKK2V4dGVybiBpbnQgb3B0X3F1aWV0SWZOb0JyYWlsbGU7CisKK2V4dGVybiBpbnQgaXNBdXRvc3BlYWtBY3RpdmUgKHZvaWQpOworZXh0ZXJuIHVuc2lnbmVkIGludCBhdXRvc3BlYWtNaW5pbXVtU2NyZWVuQ29udGVudFF1YWxpdHk7CisKK2V4dGVybiB2b2lkIHNheVNjcmVlbkNoYXJhY3RlcnMgKGNvbnN0IFNjcmVlbkNoYXJhY3RlciAqY2hhcmFjdGVycywgc2l6ZV90IGNvdW50LCBTYXlPcHRpb25zIG9wdGlvbnMpOworZXh0ZXJuIHZvaWQgc3BlYWtDaGFyYWN0ZXJzIChjb25zdCBTY3JlZW5DaGFyYWN0ZXIgKmNoYXJhY3RlcnMsIHNpemVfdCBjb3VudCwgaW50IHNwZWxsLCBpbnQgaW50ZXJydXB0KTsKK2V4dGVybiBpbnQgc3BlYWtJbmRlbnQgKGNvbnN0IFNjcmVlbkNoYXJhY3RlciAqY2hhcmFjdGVycywgaW50IGNvdW50LCBpbnQgZXZlbklmTm9JbmRlbnQpOworZXh0ZXJuIHZvaWQgdHJhY2tTcGVlY2ggKHZvaWQpOworCitleHRlcm4gdm9pZCBlbmFibGVTcGVlY2hEcml2ZXIgKGludCBzYXlCYW5uZXIpOworZXh0ZXJuIHZvaWQgZGlzYWJsZVNwZWVjaERyaXZlciAoY29uc3QgY2hhciAqcmVhc29uKTsKK2V4dGVybiBpbnQgY29uc3RydWN0U3BlZWNoRHJpdmVyICh2b2lkKTsKK2V4dGVybiB2b2lkIGRlc3RydWN0U3BlZWNoRHJpdmVyICh2b2lkKTsKKyNlbmRpZiAvKiBFTkFCTEVfU1BFRUNIX1NVUFBPUlQgKi8KKworZXh0ZXJuIHZvaWQgZW5hYmxlU2NyZWVuRHJpdmVyICh2b2lkKTsKK2V4dGVybiB2b2lkIGRpc2FibGVTY3JlZW5Ecml2ZXIgKGNvbnN0IGNoYXIgKnJlYXNvbik7CisKKyNpZmRlZiBfX01JTkdXMzJfXworZXh0ZXJuIGludCBpc1dpbmRvd3NTZXJ2aWNlOworI2VuZGlmIC8qIF9fTUlOR1czMl9fICovCisKK2V4dGVybiBjb25zdCBQcm9maWxlRGVzY3JpcHRvciBsYW5ndWFnZVByb2ZpbGU7CisKKyNkZWZpbmUgQ09SRV9UQVNLX0NBTExCQUNLKG5hbWUpIHZvaWQgbmFtZSAodm9pZCAqZGF0YSkKK3R5cGVkZWYgQ09SRV9UQVNLX0NBTExCQUNLKENvcmVUYXNrQ2FsbGJhY2spOworZXh0ZXJuIGludCBydW5Db3JlVGFzayAoQ29yZVRhc2tDYWxsYmFjayAqY2FsbGJhY2ssIHZvaWQgKmRhdGEsIGludCB3YWl0KTsKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYgLyogX19jcGx1c3BsdXMgKi8KKworI2VuZGlmIC8qIEJSTFRUWV9JTkNMVURFRF9DT1JFICovCmRpZmYgLS1naXQgYS9Qcm9ncmFtcy9jcmNfYWxnb3JpdGhtcy5jIGIvUHJvZ3JhbXMvY3JjX2FsZ29yaXRobXMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZjA2ZDdlCi0tLSAvZGV2L251bGwKKysrIGIvUHJvZ3JhbXMvY3JjX2FsZ29yaXRobXMuYwpAQCAtMCwwICsxLDk2NCBAQAorLyoKKyAqIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisgKiAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisgKgorICogQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKKyNpbmNsdWRlICJwcm9sb2d1ZS5oIgorCisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKyNpbmNsdWRlICJjcmNfYWxnb3JpdGhtcy5oIgorCisjZGVmaW5lIENSQ19BTEdPUklUSE1fU1lNQk9MKG5hbWUpIGNyY0FsZ29yaXRobV8gIyMgbmFtZQorI2RlZmluZSBDUkNfQUxHT1JJVEhNX0RFRklOSVRJT04obmFtZSkgc3RhdGljIGNvbnN0IENSQ0FsZ29yaXRobSBDUkNfQUxHT1JJVEhNX1NZTUJPTChuYW1lKQorI2RlZmluZSBDUkNfU0VDT05EQVJZX05BTUVTKC4uLikgLnNlY29uZGFyeU5hbWVzID0gKGNvbnN0IGNoYXIgKmNvbnN0IFtdKXtfX1ZBX0FSR1NfXywgTlVMTH0KKworLyoKKyAqIFRoZXNlIENSQyBhbGdvcml0aG1zIGhhdmUgYmVlbiBjb3BpZWQgZnJvbToKKyAqIGh0dHA6Ly9yZXZlbmcuc291cmNlZm9yZ2UubmV0L2NyYy1jYXRhbG9ndWUvOiAxLTE1Lmh0bSwgMTYuaHRtLCAxN3BsdXMuaHRtCisgKi8KKworQ1JDX0FMR09SSVRITV9ERUZJTklUSU9OKENSQzhfQVVUT1NBUikgPSB7CisgIC5wcmltYXJ5TmFtZSA9ICJDUkMtOC9BVVRPU0FSIiwKKyAgLmFsZ29yaXRobUNsYXNzID0gQ1JDX0FMR09SSVRITV9DTEFTU19BVFRFU1RFRCwKKworICAuY2hlY2tzdW1XaWR0aCA9IDgsCisgIC5nZW5lcmF0b3JQb2x5bm9taWFsID0gVUlOVDhfQygwWDJGKSwKKyAgLmluaXRpYWxWYWx1ZSA9IFVJTlQ4X01BWCwKKyAgLnhvck1hc2sgPSBVSU5UOF9NQVgsCisKKyAgLmNoZWNrVmFsdWUgPSBVSU5UOF9DKDBYREYpLAorICAucmVzaWR1ZSA9IFVJTlQ4X0MoMFg0MiksCit9OworCitDUkNfQUxHT1JJVEhNX0RFRklOSVRJT04oQ1JDOF9CTFVFVE9PVEgpID0geworICAucHJpbWFyeU5hbWUgPSAiQ1JDLTgvQkxVRVRPT1RIIiwKKyAgLmFsZ29yaXRobUNsYXNzID0gQ1JDX0FMR09SSVRITV9DTEFTU19BVFRFU1RFRCwKKworICAuY2hlY2tzdW1XaWR0aCA9IDgsCisgIC5yZWZsZWN0RGF0YSA9IDEsCisgIC5yZWZsZWN0UmVzdWx0ID0gMSwKKyAgLmdlbmVyYXRvclBvbHlub21pYWwgPSBVSU5UOF9DKDBYQTcpLAorCisgIC5jaGVja1ZhbHVlID0gVUlOVDhfQygwWDI2KSwKK307CisKK0NSQ19BTEdPUklUSE1fREVGSU5JVElPTihDUkM4X0NETUEyMDAwKSA9IHsKKyAgLnByaW1hcnlOYW1lID0gIkNSQy04L0NETUEyMDAwIiwKKyAgLmFsZ29yaXRobUNsYXNzID0gQ1JDX0FMR09SSVRITV9DTEFTU19BQ0FERU1JQywKKworICAuY2hlY2tzdW1XaWR0aCA9IDgsCisgIC5nZW5lcmF0b3JQb2x5bm9taWFsID0gVUlOVDhfQygwWDlCKSwKKyAgLmluaXRpYWxWYWx1ZSA9IFVJTlQ4X01BWCwKKworICAuY2hlY2tWYWx1ZSA9IFVJTlQ4X0MoMFhEQSksCit9OworCitDUkNfQUxHT1JJVEhNX0RFRklOSVRJT04oQ1JDOF9EQVJDKSA9IHsKKyAgLnByaW1hcnlOYW1lID0gIkNSQy04L0RBUkMiLAorICAuYWxnb3JpdGhtQ2xhc3MgPSBDUkNfQUxHT1JJVEhNX0NMQVNTX0FUVEVTVEVELAorCisgIC5jaGVja3N1bVdpZHRoID0gOCwKKyAgLnJlZmxlY3REYXRhID0gMSwKKyAgLnJlZmxlY3RSZXN1bHQgPSAxLAorICAuZ2VuZXJhdG9yUG9seW5vbWlhbCA9IFVJTlQ4X0MoMFgzOSksCisKKyAgLmNoZWNrVmFsdWUgPSBVSU5UOF9DKDBYMTUpLAorfTsKKworQ1JDX0FMR09SSVRITV9ERUZJTklUSU9OKENSQzhfRFZCX1MyKSA9IHsKKyAgLnByaW1hcnlOYW1lID0gIkNSQy04L0RWQi1TMiIsCisgIC5hbGdvcml0aG1DbGFzcyA9IENSQ19BTEdPUklUSE1fQ0xBU1NfQUNBREVNSUMsCisKKyAgLmNoZWNrc3VtV2lkdGggPSA4LAorICAuZ2VuZXJhdG9yUG9seW5vbWlhbCA9IFVJTlQ4X0MoMFhENSksCisKKyAgLmNoZWNrVmFsdWUgPSBVSU5UOF9DKDBYQkMpLAorfTsKKworQ1JDX0FMR09SSVRITV9ERUZJTklUSU9OKENSQzhfR1NNX0EpID0geworICAucHJpbWFyeU5hbWUgPSAiQ1JDLTgvR1NNLUEiLAorICAuYWxnb3JpdGhtQ2xhc3MgPSBDUkNfQUxHT1JJVEhNX0NMQVNTX0FDQURFTUlDLAorCisgIC5jaGVja3N1bVdpZHRoID0gOCwKKyAgLmdlbmVyYXRvclBvbHlub21pYWwgPSBVSU5UOF9DKDBYMUQpLAorCisgIC5jaGVja1ZhbHVlID0gVUlOVDhfQygwWDM3KSwKK307CisKK0NSQ19BTEdPUklUSE1fREVGSU5JVElPTihDUkM4X0dTTV9CKSA9IHsKKyAgLnByaW1hcnlOYW1lID0gIkNSQy04L0dTTS1CIiwKKyAgLmFsZ29yaXRobUNsYXNzID0gQ1JDX0FMR09SSVRITV9DTEFTU19BQ0FERU1JQywKKworICAuY2hlY2tzdW1XaWR0aCA9IDgsCisgIC5nZW5lcmF0b3JQb2x5bm9taWFsID0gVUlOVDhfQygwWDQ5KSwKKyAgLnhvck1hc2sgPSBVSU5UOF9NQVgsCisKKyAgLmNoZWNrVmFsdWUgPSBVSU5UOF9DKDBYOTQpLAorICAucmVzaWR1ZSA9IFVJTlQ4X0MoMFg1MyksCit9OworCitDUkNfQUxHT1JJVEhNX0RFRklOSVRJT04oQ1JDOF9JXzQzMl8xKSA9IHsKKyAgLnByaW1hcnlOYW1lID0gIkNSQy04L0ktNDMyLTEiLAorICAuYWxnb3JpdGhtQ2xhc3MgPSBDUkNfQUxHT1JJVEhNX0NMQVNTX0FDQURFTUlDLAorICBDUkNfU0VDT05EQVJZX05BTUVTKCJDUkMtOC9JVFUiKSwKKworICAuY2hlY2tzdW1XaWR0aCA9IDgsCisgIC5nZW5lcmF0b3JQb2x5bm9taWFsID0gVUlOVDhfQygwWDA3KSwKKyAgLnhvck1hc2sgPSBVSU5UOF9DKDBYNTUpLAorCisgIC5jaGVja1ZhbHVlID0gVUlOVDhfQygwWEExKSwKKyAgLnJlc2lkdWUgPSBVSU5UOF9DKDBYQUMpLAorfTsKKworQ1JDX0FMR09SSVRITV9ERUZJTklUSU9OKENSQzhfSV9DT0RFKSA9IHsKKyAgLnByaW1hcnlOYW1lID0gIkNSQy04L0ktQ09ERSIsCisgIC5hbGdvcml0aG1DbGFzcyA9IENSQ19BTEdPUklUSE1fQ0xBU1NfQVRURVNURUQsCisKKyAgLmNoZWNrc3VtV2lkdGggPSA4LAorICAuZ2VuZXJhdG9yUG9seW5vbWlhbCA9IFVJTlQ4X0MoMFgxRCksCisgIC5pbml0aWFsVmFsdWUgPSBVSU5UOF9DKDBYRkQpLAorCisgIC5jaGVja1ZhbHVlID0gVUlOVDhfQygwWDdFKSwKK307CisKK0NSQ19BTEdPUklUSE1fREVGSU5JVElPTihDUkM4X0xURSkgPSB7CisgIC5wcmltYXJ5TmFtZSA9ICJDUkMtOC9MVEUiLAorICAuYWxnb3JpdGhtQ2xhc3MgPSBDUkNfQUxHT1JJVEhNX0NMQVNTX0FDQURFTUlDLAorCisgIC5jaGVja3N1bVdpZHRoID0gOCwKKyAgLmdlbmVyYXRvclBvbHlub21pYWwgPSBVSU5UOF9DKDBYOUIpLAorCisgIC5jaGVja1ZhbHVlID0gVUlOVDhfQygwWEVBKSwKK307CisKK0NSQ19BTEdPUklUSE1fREVGSU5JVElPTihDUkM4X01BWElNX0RPVykgPSB7CisgIC5wcmltYXJ5TmFtZSA9ICJDUkMtOC9NQVhJTS1ET1ciLAorICAuYWxnb3JpdGhtQ2xhc3MgPSBDUkNfQUxHT1JJVEhNX0NMQVNTX0FUVEVTVEVELAorICBDUkNfU0VDT05EQVJZX05BTUVTKCJDUkMtOC9NQVhJTSIsICJET1ctQ1JDIiksCisKKyAgLmNoZWNrc3VtV2lkdGggPSA4LAorICAucmVmbGVjdERhdGEgPSAxLAorICAucmVmbGVjdFJlc3VsdCA9IDEsCisgIC5nZW5lcmF0b3JQb2x5bm9taWFsID0gVUlOVDhfQygwWDMxKSwKKworICAuY2hlY2tWYWx1ZSA9IFVJTlQ4X0MoMFhBMSksCit9OworCitDUkNfQUxHT1JJVEhNX0RFRklOSVRJT04oQ1JDOF9NSUZBUkVfTUFEKSA9IHsKKyAgLnByaW1hcnlOYW1lID0gIkNSQy04L01JRkFSRS1NQUQiLAorICAuYWxnb3JpdGhtQ2xhc3MgPSBDUkNfQUxHT1JJVEhNX0NMQVNTX0FUVEVTVEVELAorCisgIC5jaGVja3N1bVdpZHRoID0gOCwKKyAgLmdlbmVyYXRvclBvbHlub21pYWwgPSBVSU5UOF9DKDBYMUQpLAorICAuaW5pdGlhbFZhbHVlID0gVUlOVDhfQygwWEM3KSwKKworICAuY2hlY2tWYWx1ZSA9IFVJTlQ4X0MoMFg5OSksCit9OworCitDUkNfQUxHT1JJVEhNX0RFRklOSVRJT04oQ1JDOF9OUlNDXzUpID0geworICAucHJpbWFyeU5hbWUgPSAiQ1JDLTgvTlJTQy01IiwKKyAgLmFsZ29yaXRobUNsYXNzID0gQ1JDX0FMR09SSVRITV9DTEFTU19BVFRFU1RFRCwKKworICAuY2hlY2tzdW1XaWR0aCA9IDgsCisgIC5nZW5lcmF0b3JQb2x5bm9taWFsID0gVUlOVDhfQygwWDMxKSwKKyAgLmluaXRpYWxWYWx1ZSA9IFVJTlQ4X01BWCwKKworICAuY2hlY2tWYWx1ZSA9IFVJTlQ4X0MoMFhGNyksCit9OworCitDUkNfQUxHT1JJVEhNX0RFRklOSVRJT04oQ1JDOF9PUEVOU0FGRVRZKSA9IHsKKyAgLnByaW1hcnlOYW1lID0gIkNSQy04L09QRU5TQUZFVFkiLAorICAuYWxnb3JpdGhtQ2xhc3MgPSBDUkNfQUxHT1JJVEhNX0NMQVNTX0FUVEVTVEVELAorCisgIC5jaGVja3N1bVdpZHRoID0gOCwKKyAgLmdlbmVyYXRvclBvbHlub21pYWwgPSBVSU5UOF9DKDBYMkYpLAorCisgIC5jaGVja1ZhbHVlID0gVUlOVDhfQygwWDNFKSwKK307CisKK0NSQ19BTEdPUklUSE1fREVGSU5JVElPTihDUkM4X1JPSEMpID0geworICAucHJpbWFyeU5hbWUgPSAiQ1JDLTgvUk9IQyIsCisgIC5hbGdvcml0aG1DbGFzcyA9IENSQ19BTEdPUklUSE1fQ0xBU1NfQUNBREVNSUMsCisKKyAgLmNoZWNrc3VtV2lkdGggPSA4LAorICAucmVmbGVjdERhdGEgPSAxLAorICAucmVmbGVjdFJlc3VsdCA9IDEsCisgIC5nZW5lcmF0b3JQb2x5bm9taWFsID0gVUlOVDhfQygwWDA3KSwKKyAgLmluaXRpYWxWYWx1ZSA9IFVJTlQ4X01BWCwKKworICAuY2hlY2tWYWx1ZSA9IFVJTlQ4X0MoMFhEMCksCit9OworCitDUkNfQUxHT1JJVEhNX0RFRklOSVRJT04oQ1JDOF9TQUVfSjE4NTApID0geworICAucHJpbWFyeU5hbWUgPSAiQ1JDLTgvU0FFLUoxODUwIiwKKyAgLmFsZ29yaXRobUNsYXNzID0gQ1JDX0FMR09SSVRITV9DTEFTU19BVFRFU1RFRCwKKworICAuY2hlY2tzdW1XaWR0aCA9IDgsCisgIC5nZW5lcmF0b3JQb2x5bm9taWFsID0gVUlOVDhfQygwWDFEKSwKKyAgLmluaXRpYWxWYWx1ZSA9IFVJTlQ4X01BWCwKKyAgLnhvck1hc2sgPSBVSU5UOF9NQVgsCisKKyAgLmNoZWNrVmFsdWUgPSBVSU5UOF9DKDBYNEIpLAorICAucmVzaWR1ZSA9IFVJTlQ4X0MoMFhDNCksCit9OworCitDUkNfQUxHT1JJVEhNX0RFRklOSVRJT04oQ1JDOF9TTUJVUykgPSB7CisgIC5wcmltYXJ5TmFtZSA9ICJDUkMtOC9TTUJVUyIsCisgIC5hbGdvcml0aG1DbGFzcyA9IENSQ19BTEdPUklUSE1fQ0xBU1NfQVRURVNURUQsCisgIENSQ19TRUNPTkRBUllfTkFNRVMoIkNSQy04IiksCisKKyAgLmNoZWNrc3VtV2lkdGggPSA4LAorICAuZ2VuZXJhdG9yUG9seW5vbWlhbCA9IFVJTlQ4X0MoMFgwNyksCisKKyAgLmNoZWNrVmFsdWUgPSBVSU5UOF9DKDBYRjQpLAorfTsKKworQ1JDX0FMR09SSVRITV9ERUZJTklUSU9OKENSQzhfVEVDSF8zMjUwKSA9IHsKKyAgLnByaW1hcnlOYW1lID0gIkNSQy04L1RFQ0gtMzI1MCIsCisgIC5hbGdvcml0aG1DbGFzcyA9IENSQ19BTEdPUklUSE1fQ0xBU1NfQVRURVNURUQsCisgIENSQ19TRUNPTkRBUllfTkFNRVMoIkNSQy04L0FFUyIsICJDUkMtOC9FQlUiKSwKKworICAuY2hlY2tzdW1XaWR0aCA9IDgsCisgIC5yZWZsZWN0RGF0YSA9IDEsCisgIC5yZWZsZWN0UmVzdWx0ID0gMSwKKyAgLmdlbmVyYXRvclBvbHlub21pYWwgPSBVSU5UOF9DKDBYMUQpLAorICAuaW5pdGlhbFZhbHVlID0gVUlOVDhfTUFYLAorCisgIC5jaGVja1ZhbHVlID0gVUlOVDhfQygwWDk3KSwKK307CisKK0NSQ19BTEdPUklUSE1fREVGSU5JVElPTihDUkM4X1dDRE1BKSA9IHsKKyAgLnByaW1hcnlOYW1lID0gIkNSQy04L1dDRE1BIiwKKyAgLmFsZ29yaXRobUNsYXNzID0gQ1JDX0FMR09SSVRITV9DTEFTU19USElSRF9QQVJUWSwKKworICAuY2hlY2tzdW1XaWR0aCA9IDgsCisgIC5yZWZsZWN0RGF0YSA9IDEsCisgIC5yZWZsZWN0UmVzdWx0ID0gMSwKKyAgLmdlbmVyYXRvclBvbHlub21pYWwgPSBVSU5UOF9DKDBYOUIpLAorCisgIC5jaGVja1ZhbHVlID0gVUlOVDhfQygwWDI1KSwKK307CisKK0NSQ19BTEdPUklUSE1fREVGSU5JVElPTihDUkMxNl9BUkMpID0geworICAucHJpbWFyeU5hbWUgPSAiQ1JDLTE2L0FSQyIsCisgIC5hbGdvcml0aG1DbGFzcyA9IENSQ19BTEdPUklUSE1fQ0xBU1NfQVRURVNURUQsCisgIENSQ19TRUNPTkRBUllfTkFNRVMoIkFSQyIsICJDUkMtMTYiLCAiQ1JDLTE2L0xIQSIsICJDUkMtSUJNIiksCisKKyAgLmNoZWNrc3VtV2lkdGggPSAxNiwKKyAgLnJlZmxlY3REYXRhID0gMSwKKyAgLnJlZmxlY3RSZXN1bHQgPSAxLAorICAuZ2VuZXJhdG9yUG9seW5vbWlhbCA9IFVJTlQxNl9DKDBYODAwNSksCisKKyAgLmNoZWNrVmFsdWUgPSBVSU5UMTZfQygwWEJCM0QpLAorfTsKKworQ1JDX0FMR09SSVRITV9ERUZJTklUSU9OKENSQzE2X0NETUEyMDAwKSA9IHsKKyAgLnByaW1hcnlOYW1lID0gIkNSQy0xNi9DRE1BMjAwMCIsCisgIC5hbGdvcml0aG1DbGFzcyA9IENSQ19BTEdPUklUSE1fQ0xBU1NfQUNBREVNSUMsCisKKyAgLmNoZWNrc3VtV2lkdGggPSAxNiwKKyAgLmdlbmVyYXRvclBvbHlub21pYWwgPSBVSU5UMTZfQygwWEM4NjcpLAorICAuaW5pdGlhbFZhbHVlID0gVUlOVDE2X01BWCwKKworICAuY2hlY2tWYWx1ZSA9IFVJTlQxNl9DKDBYNEMwNiksCit9OworCitDUkNfQUxHT1JJVEhNX0RFRklOSVRJT04oQ1JDMTZfQ01TKSA9IHsKKyAgLnByaW1hcnlOYW1lID0gIkNSQy0xNi9DTVMiLAorICAuYWxnb3JpdGhtQ2xhc3MgPSBDUkNfQUxHT1JJVEhNX0NMQVNTX1RISVJEX1BBUlRZLAorCisgIC5jaGVja3N1bVdpZHRoID0gMTYsCisgIC5nZW5lcmF0b3JQb2x5bm9taWFsID0gVUlOVDE2X0MoMFg4MDA1KSwKKyAgLmluaXRpYWxWYWx1ZSA9IFVJTlQxNl9NQVgsCisKKyAgLmNoZWNrVmFsdWUgPSBVSU5UMTZfQygwWEFFRTcpLAorfTsKKworQ1JDX0FMR09SSVRITV9ERUZJTklUSU9OKENSQzE2X0REU18xMTApID0geworICAucHJpbWFyeU5hbWUgPSAiQ1JDLTE2L0REUy0xMTAiLAorICAuYWxnb3JpdGhtQ2xhc3MgPSBDUkNfQUxHT1JJVEhNX0NMQVNTX0FUVEVTVEVELAorCisgIC5jaGVja3N1bVdpZHRoID0gMTYsCisgIC5nZW5lcmF0b3JQb2x5bm9taWFsID0gVUlOVDE2X0MoMFg4MDA1KSwKKyAgLmluaXRpYWxWYWx1ZSA9IFVJTlQxNl9DKDBYODAwRCksCisKKyAgLmNoZWNrVmFsdWUgPSBVSU5UMTZfQygwWDlFQ0YpLAorfTsKKworQ1JDX0FMR09SSVRITV9ERUZJTklUSU9OKENSQzE2X0RFQ1RfUikgPSB7CisgIC5wcmltYXJ5TmFtZSA9ICJDUkMtMTYvREVDVC1SIiwKKyAgLmFsZ29yaXRobUNsYXNzID0gQ1JDX0FMR09SSVRITV9DTEFTU19BVFRFU1RFRCwKKyAgQ1JDX1NFQ09OREFSWV9OQU1FUygiUi1DUkMtMTYiKSwKKworICAuY2hlY2tzdW1XaWR0aCA9IDE2LAorICAuZ2VuZXJhdG9yUG9seW5vbWlhbCA9IFVJTlQxNl9DKDBYMDU4OSksCisgIC54b3JNYXNrID0gVUlOVDE2X0MoMFgwMDAxKSwKKworICAuY2hlY2tWYWx1ZSA9IFVJTlQxNl9DKDBYMDA3RSksCisgIC5yZXNpZHVlID0gVUlOVDE2X0MoMFgwNTg5KSwKK307CisKK0NSQ19BTEdPUklUSE1fREVGSU5JVElPTihDUkMxNl9ERUNUX1gpID0geworICAucHJpbWFyeU5hbWUgPSAiQ1JDLTE2L0RFQ1QtWCIsCisgIC5hbGdvcml0aG1DbGFzcyA9IENSQ19BTEdPUklUSE1fQ0xBU1NfQVRURVNURUQsCisgIENSQ19TRUNPTkRBUllfTkFNRVMoIlgtQ1JDLTE2IiksCisKKyAgLmNoZWNrc3VtV2lkdGggPSAxNiwKKyAgLmdlbmVyYXRvclBvbHlub21pYWwgPSBVSU5UMTZfQygwWDA1ODkpLAorCisgIC5jaGVja1ZhbHVlID0gVUlOVDE2X0MoMFgwMDdGKSwKK307CisKK0NSQ19BTEdPUklUSE1fREVGSU5JVElPTihDUkMxNl9ETlApID0geworICAucHJpbWFyeU5hbWUgPSAiQ1JDLTE2L0ROUCIsCisgIC5hbGdvcml0aG1DbGFzcyA9IENSQ19BTEdPUklUSE1fQ0xBU1NfQ09ORklSTUVELAorCisgIC5jaGVja3N1bVdpZHRoID0gMTYsCisgIC5yZWZsZWN0RGF0YSA9IDEsCisgIC5yZWZsZWN0UmVzdWx0ID0gMSwKKyAgLmdlbmVyYXRvclBvbHlub21pYWwgPSBVSU5UMTZfQygwWDNENjUpLAorICAueG9yTWFzayA9IFVJTlQxNl9NQVgsCisKKyAgLmNoZWNrVmFsdWUgPSBVSU5UMTZfQygwWEVBODIpLAorICAucmVzaWR1ZSA9IFVJTlQxNl9DKDBYNjZDNSksCit9OworCitDUkNfQUxHT1JJVEhNX0RFRklOSVRJT04oQ1JDMTZfRU5fMTM3NTcpID0geworICAucHJpbWFyeU5hbWUgPSAiQ1JDLTE2L0VOLTEzNzU3IiwKKyAgLmFsZ29yaXRobUNsYXNzID0gQ1JDX0FMR09SSVRITV9DTEFTU19DT05GSVJNRUQsCisKKyAgLmNoZWNrc3VtV2lkdGggPSAxNiwKKyAgLmdlbmVyYXRvclBvbHlub21pYWwgPSBVSU5UMTZfQygwWDNENjUpLAorICAueG9yTWFzayA9IFVJTlQxNl9NQVgsCisKKyAgLmNoZWNrVmFsdWUgPSBVSU5UMTZfQygwWEMyQjcpLAorICAucmVzaWR1ZSA9IFVJTlQxNl9DKDBYQTM2NiksCit9OworCitDUkNfQUxHT1JJVEhNX0RFRklOSVRJT04oQ1JDMTZfR0VOSUJVUykgPSB7CisgIC5wcmltYXJ5TmFtZSA9ICJDUkMtMTYvR0VOSUJVUyIsCisgIC5hbGdvcml0aG1DbGFzcyA9IENSQ19BTEdPUklUSE1fQ0xBU1NfQVRURVNURUQsCisgIENSQ19TRUNPTkRBUllfTkFNRVMoIkNSQy0xNi9EQVJDIiwgIkNSQy0xNi9FUEMiLCAiQ1JDLTE2L0VQQy1DMUcyIiwgIkNSQy0xNi9JLUNPREUiKSwKKworICAuY2hlY2tzdW1XaWR0aCA9IDE2LAorICAuZ2VuZXJhdG9yUG9seW5vbWlhbCA9IFVJTlQxNl9DKDBYMTAyMSksCisgIC5pbml0aWFsVmFsdWUgPSBVSU5UMTZfTUFYLAorICAueG9yTWFzayA9IFVJTlQxNl9NQVgsCisKKyAgLmNoZWNrVmFsdWUgPSBVSU5UMTZfQygwWEQ2NEUpLAorICAucmVzaWR1ZSA9IFVJTlQxNl9DKDBYMUQwRiksCit9OworCitDUkNfQUxHT1JJVEhNX0RFRklOSVRJT04oQ1JDMTZfR1NNKSA9IHsKKyAgLnByaW1hcnlOYW1lID0gIkNSQy0xNi9HU00iLAorICAuYWxnb3JpdGhtQ2xhc3MgPSBDUkNfQUxHT1JJVEhNX0NMQVNTX0FUVEVTVEVELAorCisgIC5jaGVja3N1bVdpZHRoID0gMTYsCisgIC5nZW5lcmF0b3JQb2x5bm9taWFsID0gVUlOVDE2X0MoMFgxMDIxKSwKKyAgLnhvck1hc2sgPSBVSU5UMTZfTUFYLAorCisgIC5jaGVja1ZhbHVlID0gVUlOVDE2X0MoMFhDRTNDKSwKKyAgLnJlc2lkdWUgPSBVSU5UMTZfQygwWDFEMEYpLAorfTsKKworQ1JDX0FMR09SSVRITV9ERUZJTklUSU9OKENSQzE2X0lCTV8zNzQwKSA9IHsKKyAgLnByaW1hcnlOYW1lID0gIkNSQy0xNi9JQk0tMzc0MCIsCisgIC5hbGdvcml0aG1DbGFzcyA9IENSQ19BTEdPUklUSE1fQ0xBU1NfQVRURVNURUQsCisgIENSQ19TRUNPTkRBUllfTkFNRVMoIkNSQy0xNi9BVVRPU0FSIiwgIkNSQy0xNi9DQ0lUVC1GQUxTRSIpLAorCisgIC5jaGVja3N1bVdpZHRoID0gMTYsCisgIC5nZW5lcmF0b3JQb2x5bm9taWFsID0gVUlOVDE2X0MoMFgxMDIxKSwKKyAgLmluaXRpYWxWYWx1ZSA9IFVJTlQxNl9NQVgsCisKKyAgLmNoZWNrVmFsdWUgPSBVSU5UMTZfQygwWDI5QjEpLAorfTsKKworQ1JDX0FMR09SSVRITV9ERUZJTklUSU9OKENSQzE2X0lCTV9TRExDKSA9IHsKKyAgLnByaW1hcnlOYW1lID0gIkNSQy0xNi9JQk0tU0RMQyIsCisgIC5hbGdvcml0aG1DbGFzcyA9IENSQ19BTEdPUklUSE1fQ0xBU1NfQVRURVNURUQsCisgIENSQ19TRUNPTkRBUllfTkFNRVMoIkNSQy0xNi9JU08tSERMQyIsICJDUkMtMTYvSVNPLUlFQy0xNDQ0My0zLUIiLCAiQ1JDLTE2L1gtMjUiLCAiQ1JDLUIiLCAiWC0yNSIpLAorCisgIC5jaGVja3N1bVdpZHRoID0gMTYsCisgIC5yZWZsZWN0RGF0YSA9IDEsCisgIC5yZWZsZWN0UmVzdWx0ID0gMSwKKyAgLmdlbmVyYXRvclBvbHlub21pYWwgPSBVSU5UMTZfQygwWDEwMjEpLAorICAuaW5pdGlhbFZhbHVlID0gVUlOVDE2X01BWCwKKyAgLnhvck1hc2sgPSBVSU5UMTZfTUFYLAorCisgIC5jaGVja1ZhbHVlID0gVUlOVDE2X0MoMFg5MDZFKSwKKyAgLnJlc2lkdWUgPSBVSU5UMTZfQygwWEYwQjgpLAorfTsKKworQ1JDX0FMR09SSVRITV9ERUZJTklUSU9OKENSQzE2X0lTT19JRUNfMTQ0NDNfM19BKSA9IHsKKyAgLnByaW1hcnlOYW1lID0gIkNSQy0xNi9JU08tSUVDLTE0NDQzLTMtQSIsCisgIC5hbGdvcml0aG1DbGFzcyA9IENSQ19BTEdPUklUSE1fQ0xBU1NfQVRURVNURUQsCisgIENSQ19TRUNPTkRBUllfTkFNRVMoIkNSQy1BIiksCisKKyAgLmNoZWNrc3VtV2lkdGggPSAxNiwKKyAgLnJlZmxlY3REYXRhID0gMSwKKyAgLnJlZmxlY3RSZXN1bHQgPSAxLAorICAuZ2VuZXJhdG9yUG9seW5vbWlhbCA9IFVJTlQxNl9DKDBYMTAyMSksCisgIC5pbml0aWFsVmFsdWUgPSBVSU5UMTZfQygwWEM2QzYpLAorCisgIC5jaGVja1ZhbHVlID0gVUlOVDE2X0MoMFhCRjA1KSwKK307CisKK0NSQ19BTEdPUklUSE1fREVGSU5JVElPTihDUkMxNl9LRVJNSVQpID0geworICAucHJpbWFyeU5hbWUgPSAiQ1JDLTE2L0tFUk1JVCIsCisgIC5hbGdvcml0aG1DbGFzcyA9IENSQ19BTEdPUklUSE1fQ0xBU1NfQVRURVNURUQsCisgIENSQ19TRUNPTkRBUllfTkFNRVMoIkNSQy0xNi9DQ0lUVCIsICJDUkMtMTYvQ0NJVFQtVFJVRSIsICJDUkMtMTYvVi00MS1MU0IiLCAiQ1JDLUNDSVRUIiwgIktFUk1JVCIpLAorCisgIC5jaGVja3N1bVdpZHRoID0gMTYsCisgIC5yZWZsZWN0RGF0YSA9IDEsCisgIC5yZWZsZWN0UmVzdWx0ID0gMSwKKyAgLmdlbmVyYXRvclBvbHlub21pYWwgPSBVSU5UMTZfQygwWDEwMjEpLAorCisgIC5jaGVja1ZhbHVlID0gVUlOVDE2X0MoMFgyMTg5KSwKK307CisKK0NSQ19BTEdPUklUSE1fREVGSU5JVElPTihDUkMxNl9MSjEyMDApID0geworICAucHJpbWFyeU5hbWUgPSAiQ1JDLTE2L0xKMTIwMCIsCisgIC5hbGdvcml0aG1DbGFzcyA9IENSQ19BTEdPUklUSE1fQ0xBU1NfVEhJUkRfUEFSVFksCisKKyAgLmNoZWNrc3VtV2lkdGggPSAxNiwKKyAgLmdlbmVyYXRvclBvbHlub21pYWwgPSBVSU5UMTZfQygwWDZGNjMpLAorCisgIC5jaGVja1ZhbHVlID0gVUlOVDE2X0MoMFhCREY0KSwKK307CisKK0NSQ19BTEdPUklUSE1fREVGSU5JVElPTihDUkMxNl9NQVhJTV9ET1cpID0geworICAucHJpbWFyeU5hbWUgPSAiQ1JDLTE2L01BWElNLURPVyIsCisgIC5hbGdvcml0aG1DbGFzcyA9IENSQ19BTEdPUklUSE1fQ0xBU1NfQVRURVNURUQsCisgIENSQ19TRUNPTkRBUllfTkFNRVMoIkNSQy0xNi9NQVhJTSIpLAorCisgIC5jaGVja3N1bVdpZHRoID0gMTYsCisgIC5yZWZsZWN0RGF0YSA9IDEsCisgIC5yZWZsZWN0UmVzdWx0ID0gMSwKKyAgLmdlbmVyYXRvclBvbHlub21pYWwgPSBVSU5UMTZfQygwWDgwMDUpLAorICAueG9yTWFzayA9IFVJTlQxNl9NQVgsCisKKyAgLmNoZWNrVmFsdWUgPSBVSU5UMTZfQygwWDQ0QzIpLAorICAucmVzaWR1ZSA9IFVJTlQxNl9DKDBYQjAwMSksCit9OworCitDUkNfQUxHT1JJVEhNX0RFRklOSVRJT04oQ1JDMTZfTUNSRjRYWCkgPSB7CisgIC5wcmltYXJ5TmFtZSA9ICJDUkMtMTYvTUNSRjRYWCIsCisgIC5hbGdvcml0aG1DbGFzcyA9IENSQ19BTEdPUklUSE1fQ0xBU1NfQVRURVNURUQsCisKKyAgLmNoZWNrc3VtV2lkdGggPSAxNiwKKyAgLnJlZmxlY3REYXRhID0gMSwKKyAgLnJlZmxlY3RSZXN1bHQgPSAxLAorICAuZ2VuZXJhdG9yUG9seW5vbWlhbCA9IFVJTlQxNl9DKDBYMTAyMSksCisgIC5pbml0aWFsVmFsdWUgPSBVSU5UMTZfTUFYLAorCisgIC5jaGVja1ZhbHVlID0gVUlOVDE2X0MoMFg2RjkxKSwKK307CisKK0NSQ19BTEdPUklUSE1fREVGSU5JVElPTihDUkMxNl9NT0RCVVMpID0geworICAucHJpbWFyeU5hbWUgPSAiQ1JDLTE2L01PREJVUyIsCisgIC5hbGdvcml0aG1DbGFzcyA9IENSQ19BTEdPUklUSE1fQ0xBU1NfQVRURVNURUQsCisgIENSQ19TRUNPTkRBUllfTkFNRVMoIk1PREJVUyIpLAorCisgIC5jaGVja3N1bVdpZHRoID0gMTYsCisgIC5yZWZsZWN0RGF0YSA9IDEsCisgIC5yZWZsZWN0UmVzdWx0ID0gMSwKKyAgLmdlbmVyYXRvclBvbHlub21pYWwgPSBVSU5UMTZfQygwWDgwMDUpLAorICAuaW5pdGlhbFZhbHVlID0gVUlOVDE2X01BWCwKKworICAuY2hlY2tWYWx1ZSA9IFVJTlQxNl9DKDBYNEIzNyksCit9OworCitDUkNfQUxHT1JJVEhNX0RFRklOSVRJT04oQ1JDMTZfTlJTQ181KSA9IHsKKyAgLnByaW1hcnlOYW1lID0gIkNSQy0xNi9OUlNDLTUiLAorICAuYWxnb3JpdGhtQ2xhc3MgPSBDUkNfQUxHT1JJVEhNX0NMQVNTX0FUVEVTVEVELAorCisgIC5jaGVja3N1bVdpZHRoID0gMTYsCisgIC5yZWZsZWN0RGF0YSA9IDEsCisgIC5yZWZsZWN0UmVzdWx0ID0gMSwKKyAgLmdlbmVyYXRvclBvbHlub21pYWwgPSBVSU5UMTZfQygwWDA4MEIpLAorICAuaW5pdGlhbFZhbHVlID0gVUlOVDE2X01BWCwKKworICAuY2hlY2tWYWx1ZSA9IFVJTlQxNl9DKDBYQTA2NiksCit9OworCitDUkNfQUxHT1JJVEhNX0RFRklOSVRJT04oQ1JDMTZfT1BFTlNBRkVUWV9BKSA9IHsKKyAgLnByaW1hcnlOYW1lID0gIkNSQy0xNi9PUEVOU0FGRVRZLUEiLAorICAuYWxnb3JpdGhtQ2xhc3MgPSBDUkNfQUxHT1JJVEhNX0NMQVNTX0FUVEVTVEVELAorCisgIC5jaGVja3N1bVdpZHRoID0gMTYsCisgIC5nZW5lcmF0b3JQb2x5bm9taWFsID0gVUlOVDE2X0MoMFg1OTM1KSwKKworICAuY2hlY2tWYWx1ZSA9IFVJTlQxNl9DKDBYNUQzOCksCit9OworCitDUkNfQUxHT1JJVEhNX0RFRklOSVRJT04oQ1JDMTZfT1BFTlNBRkVUWV9CKSA9IHsKKyAgLnByaW1hcnlOYW1lID0gIkNSQy0xNi9PUEVOU0FGRVRZLUIiLAorICAuYWxnb3JpdGhtQ2xhc3MgPSBDUkNfQUxHT1JJVEhNX0NMQVNTX0FUVEVTVEVELAorCisgIC5jaGVja3N1bVdpZHRoID0gMTYsCisgIC5nZW5lcmF0b3JQb2x5bm9taWFsID0gVUlOVDE2X0MoMFg3NTVCKSwKKworICAuY2hlY2tWYWx1ZSA9IFVJTlQxNl9DKDBYMjBGRSksCit9OworCitDUkNfQUxHT1JJVEhNX0RFRklOSVRJT04oQ1JDMTZfUFJPRklCVVMpID0geworICAucHJpbWFyeU5hbWUgPSAiQ1JDLTE2L1BST0ZJQlVTIiwKKyAgLmFsZ29yaXRobUNsYXNzID0gQ1JDX0FMR09SSVRITV9DTEFTU19BVFRFU1RFRCwKKyAgQ1JDX1NFQ09OREFSWV9OQU1FUygiQ1JDLTE2L0lFQy02MTE1OC0yIiksCisKKyAgLmNoZWNrc3VtV2lkdGggPSAxNiwKKyAgLmdlbmVyYXRvclBvbHlub21pYWwgPSBVSU5UMTZfQygwWDFEQ0YpLAorICAuaW5pdGlhbFZhbHVlID0gVUlOVDE2X01BWCwKKyAgLnhvck1hc2sgPSBVSU5UMTZfTUFYLAorCisgIC5jaGVja1ZhbHVlID0gVUlOVDE2X0MoMFhBODE5KSwKKyAgLnJlc2lkdWUgPSBVSU5UMTZfQygwWEUzOTQpLAorfTsKKworQ1JDX0FMR09SSVRITV9ERUZJTklUSU9OKENSQzE2X1JJRUxMTykgPSB7CisgIC5wcmltYXJ5TmFtZSA9ICJDUkMtMTYvUklFTExPIiwKKyAgLmFsZ29yaXRobUNsYXNzID0gQ1JDX0FMR09SSVRITV9DTEFTU19USElSRF9QQVJUWSwKKworICAuY2hlY2tzdW1XaWR0aCA9IDE2LAorICAucmVmbGVjdERhdGEgPSAxLAorICAucmVmbGVjdFJlc3VsdCA9IDEsCisgIC5nZW5lcmF0b3JQb2x5bm9taWFsID0gVUlOVDE2X0MoMFgxMDIxKSwKKyAgLmluaXRpYWxWYWx1ZSA9IFVJTlQxNl9DKDBYQjJBQSksCisKKyAgLmNoZWNrVmFsdWUgPSBVSU5UMTZfQygwWDYzRDApLAorfTsKKworQ1JDX0FMR09SSVRITV9ERUZJTklUSU9OKENSQzE2X1NQSV9GVUpJVFNVKSA9IHsKKyAgLnByaW1hcnlOYW1lID0gIkNSQy0xNi9TUEktRlVKSVRTVSIsCisgIC5hbGdvcml0aG1DbGFzcyA9IENSQ19BTEdPUklUSE1fQ0xBU1NfQVRURVNURUQsCisgIENSQ19TRUNPTkRBUllfTkFNRVMoIkNSQy0xNi9BVUctQ0NJVFQiKSwKKworICAuY2hlY2tzdW1XaWR0aCA9IDE2LAorICAuZ2VuZXJhdG9yUG9seW5vbWlhbCA9IFVJTlQxNl9DKDBYMTAyMSksCisgIC5pbml0aWFsVmFsdWUgPSBVSU5UMTZfQygwWDFEMEYpLAorCisgIC5jaGVja1ZhbHVlID0gVUlOVDE2X0MoMFhFNUNDKSwKK307CisKK0NSQ19BTEdPUklUSE1fREVGSU5JVElPTihDUkMxNl9UMTBfRElGKSA9IHsKKyAgLnByaW1hcnlOYW1lID0gIkNSQy0xNi9UMTAtRElGIiwKKyAgLmFsZ29yaXRobUNsYXNzID0gQ1JDX0FMR09SSVRITV9DTEFTU19BVFRFU1RFRCwKKworICAuY2hlY2tzdW1XaWR0aCA9IDE2LAorICAuZ2VuZXJhdG9yUG9seW5vbWlhbCA9IFVJTlQxNl9DKDBYOEJCNyksCisKKyAgLmNoZWNrVmFsdWUgPSBVSU5UMTZfQygwWEQwREIpLAorfTsKKworQ1JDX0FMR09SSVRITV9ERUZJTklUSU9OKENSQzE2X1RFTEVESVNLKSA9IHsKKyAgLnByaW1hcnlOYW1lID0gIkNSQy0xNi9URUxFRElTSyIsCisgIC5hbGdvcml0aG1DbGFzcyA9IENSQ19BTEdPUklUSE1fQ0xBU1NfQ09ORklSTUVELAorCisgIC5jaGVja3N1bVdpZHRoID0gMTYsCisgIC5nZW5lcmF0b3JQb2x5bm9taWFsID0gVUlOVDE2X0MoMFhBMDk3KSwKKworICAuY2hlY2tWYWx1ZSA9IFVJTlQxNl9DKDBYMEZCMyksCit9OworCitDUkNfQUxHT1JJVEhNX0RFRklOSVRJT04oQ1JDMTZfVE1TMzcxNTcpID0geworICAucHJpbWFyeU5hbWUgPSAiQ1JDLTE2L1RNUzM3MTU3IiwKKyAgLmFsZ29yaXRobUNsYXNzID0gQ1JDX0FMR09SSVRITV9DTEFTU19BVFRFU1RFRCwKKworICAuY2hlY2tzdW1XaWR0aCA9IDE2LAorICAucmVmbGVjdERhdGEgPSAxLAorICAucmVmbGVjdFJlc3VsdCA9IDEsCisgIC5nZW5lcmF0b3JQb2x5bm9taWFsID0gVUlOVDE2X0MoMFgxMDIxKSwKKyAgLmluaXRpYWxWYWx1ZSA9IFVJTlQxNl9DKDBYODlFQyksCisKKyAgLmNoZWNrVmFsdWUgPSBVSU5UMTZfQygwWDI2QjEpLAorfTsKKworQ1JDX0FMR09SSVRITV9ERUZJTklUSU9OKENSQzE2X1VNVFMpID0geworICAucHJpbWFyeU5hbWUgPSAiQ1JDLTE2L1VNVFMiLAorICAuYWxnb3JpdGhtQ2xhc3MgPSBDUkNfQUxHT1JJVEhNX0NMQVNTX0FUVEVTVEVELAorICBDUkNfU0VDT05EQVJZX05BTUVTKCJDUkMtMTYvQlVZUEFTUyIsICJDUkMtMTYvVkVSSUZPTkUiKSwKKworICAuY2hlY2tzdW1XaWR0aCA9IDE2LAorICAuZ2VuZXJhdG9yUG9seW5vbWlhbCA9IFVJTlQxNl9DKDBYODAwNSksCisKKyAgLmNoZWNrVmFsdWUgPSBVSU5UMTZfQygwWEZFRTgpLAorfTsKKworQ1JDX0FMR09SSVRITV9ERUZJTklUSU9OKENSQzE2X1VTQikgPSB7CisgIC5wcmltYXJ5TmFtZSA9ICJDUkMtMTYvVVNCIiwKKyAgLmFsZ29yaXRobUNsYXNzID0gQ1JDX0FMR09SSVRITV9DTEFTU19USElSRF9QQVJUWSwKKworICAuY2hlY2tzdW1XaWR0aCA9IDE2LAorICAucmVmbGVjdERhdGEgPSAxLAorICAucmVmbGVjdFJlc3VsdCA9IDEsCisgIC5nZW5lcmF0b3JQb2x5bm9taWFsID0gVUlOVDE2X0MoMFg4MDA1KSwKKyAgLmluaXRpYWxWYWx1ZSA9IFVJTlQxNl9NQVgsCisgIC54b3JNYXNrID0gVUlOVDE2X01BWCwKKworICAuY2hlY2tWYWx1ZSA9IFVJTlQxNl9DKDBYQjRDOCksCisgIC5yZXNpZHVlID0gVUlOVDE2X0MoMFhCMDAxKSwKK307CisKK0NSQ19BTEdPUklUSE1fREVGSU5JVElPTihDUkMxNl9YTU9ERU0pID0geworICAucHJpbWFyeU5hbWUgPSAiQ1JDLTE2L1hNT0RFTSIsCisgIC5hbGdvcml0aG1DbGFzcyA9IENSQ19BTEdPUklUSE1fQ0xBU1NfQVRURVNURUQsCisgIENSQ19TRUNPTkRBUllfTkFNRVMoIkNSQy0xNi9BQ09STiIsICJDUkMtMTYvTFRFIiwgIkNSQy0xNi9WLTQxLU1TQiIsICJYTU9ERU0iLCAiWk1PREVNIiksCisKKyAgLmNoZWNrc3VtV2lkdGggPSAxNiwKKyAgLmdlbmVyYXRvclBvbHlub21pYWwgPSBVSU5UMTZfQygwWDEwMjEpLAorCisgIC5jaGVja1ZhbHVlID0gVUlOVDE2X0MoMFgzMUMzKSwKK307CisKK0NSQ19BTEdPUklUSE1fREVGSU5JVElPTihDUkMyNF9CTEUpID0geworICAucHJpbWFyeU5hbWUgPSAiQ1JDLTI0L0JMRSIsCisgIC5hbGdvcml0aG1DbGFzcyA9IENSQ19BTEdPUklUSE1fQ0xBU1NfQVRURVNURUQsCisKKyAgLmNoZWNrc3VtV2lkdGggPSAyNCwKKyAgLnJlZmxlY3REYXRhID0gMSwKKyAgLnJlZmxlY3RSZXN1bHQgPSAxLAorICAuZ2VuZXJhdG9yUG9seW5vbWlhbCA9IFVJTlQyNF9DKDBYMDAwNjVCKSwKKyAgLmluaXRpYWxWYWx1ZSA9IFVJTlQyNF9DKDBYNTU1NTU1KSwKKworICAuY2hlY2tWYWx1ZSA9IFVJTlQyNF9DKDBYQzI1QTU2KSwKK307CisKK0NSQ19BTEdPUklUSE1fREVGSU5JVElPTihDUkMyNF9GTEVYUkFZX0EpID0geworICAucHJpbWFyeU5hbWUgPSAiQ1JDLTI0L0ZMRVhSQVktQSIsCisgIC5hbGdvcml0aG1DbGFzcyA9IENSQ19BTEdPUklUSE1fQ0xBU1NfQVRURVNURUQsCisKKyAgLmNoZWNrc3VtV2lkdGggPSAyNCwKKyAgLmdlbmVyYXRvclBvbHlub21pYWwgPSBVSU5UMjRfQygwWDVENkRDQiksCisgIC5pbml0aWFsVmFsdWUgPSBVSU5UMjRfQygwWEZFRENCQSksCisKKyAgLmNoZWNrVmFsdWUgPSBVSU5UMjRfQygwWDc5NzlCRCksCit9OworCitDUkNfQUxHT1JJVEhNX0RFRklOSVRJT04oQ1JDMjRfRkxFWFJBWV9CKSA9IHsKKyAgLnByaW1hcnlOYW1lID0gIkNSQy0yNC9GTEVYUkFZLUIiLAorICAuYWxnb3JpdGhtQ2xhc3MgPSBDUkNfQUxHT1JJVEhNX0NMQVNTX0FUVEVTVEVELAorCisgIC5jaGVja3N1bVdpZHRoID0gMjQsCisgIC5nZW5lcmF0b3JQb2x5bm9taWFsID0gVUlOVDI0X0MoMFg1RDZEQ0IpLAorICAuaW5pdGlhbFZhbHVlID0gVUlOVDI0X0MoMFhBQkNERUYpLAorCisgIC5jaGVja1ZhbHVlID0gVUlOVDI0X0MoMFgxRjIzQjgpLAorfTsKKworQ1JDX0FMR09SSVRITV9ERUZJTklUSU9OKENSQzI0X0lOVEVSTEFLRU4pID0geworICAucHJpbWFyeU5hbWUgPSAiQ1JDLTI0L0lOVEVSTEFLRU4iLAorICAuYWxnb3JpdGhtQ2xhc3MgPSBDUkNfQUxHT1JJVEhNX0NMQVNTX0FDQURFTUlDLAorCisgIC5jaGVja3N1bVdpZHRoID0gMjQsCisgIC5nZW5lcmF0b3JQb2x5bm9taWFsID0gVUlOVDI0X0MoMFgzMjhCNjMpLAorICAuaW5pdGlhbFZhbHVlID0gVUlOVDI0X01BWCwKKyAgLnhvck1hc2sgPSBVSU5UMjRfTUFYLAorCisgIC5jaGVja1ZhbHVlID0gVUlOVDI0X0MoMFhCNEYzRTYpLAorICAucmVzaWR1ZSA9IFVJTlQyNF9DKDBYMTQ0RTYzKSwKK307CisKK0NSQ19BTEdPUklUSE1fREVGSU5JVElPTihDUkMyNF9MVEVfQSkgPSB7CisgIC5wcmltYXJ5TmFtZSA9ICJDUkMtMjQvTFRFLUEiLAorICAuYWxnb3JpdGhtQ2xhc3MgPSBDUkNfQUxHT1JJVEhNX0NMQVNTX0FDQURFTUlDLAorCisgIC5jaGVja3N1bVdpZHRoID0gMjQsCisgIC5nZW5lcmF0b3JQb2x5bm9taWFsID0gVUlOVDI0X0MoMFg4NjRDRkIpLAorCisgIC5jaGVja1ZhbHVlID0gVUlOVDI0X0MoMFhDREU3MDMpLAorfTsKKworQ1JDX0FMR09SSVRITV9ERUZJTklUSU9OKENSQzI0X0xURV9CKSA9IHsKKyAgLnByaW1hcnlOYW1lID0gIkNSQy0yNC9MVEUtQiIsCisgIC5hbGdvcml0aG1DbGFzcyA9IENSQ19BTEdPUklUSE1fQ0xBU1NfQUNBREVNSUMsCisKKyAgLmNoZWNrc3VtV2lkdGggPSAyNCwKKyAgLmdlbmVyYXRvclBvbHlub21pYWwgPSBVSU5UMjRfQygwWDgwMDA2MyksCisKKyAgLmNoZWNrVmFsdWUgPSBVSU5UMjRfQygwWDIzRUY1MiksCit9OworCitDUkNfQUxHT1JJVEhNX0RFRklOSVRJT04oQ1JDMjRfT1BFTlBHUCkgPSB7CisgIC5wcmltYXJ5TmFtZSA9ICJDUkMtMjQvT1BFTlBHUCIsCisgIC5hbGdvcml0aG1DbGFzcyA9IENSQ19BTEdPUklUSE1fQ0xBU1NfQVRURVNURUQsCisgIENSQ19TRUNPTkRBUllfTkFNRVMoIkNSQy0yNCIpLAorCisgIC5jaGVja3N1bVdpZHRoID0gMjQsCisgIC5nZW5lcmF0b3JQb2x5bm9taWFsID0gVUlOVDI0X0MoMFg4NjRDRkIpLAorICAuaW5pdGlhbFZhbHVlID0gVUlOVDI0X0MoMFhCNzA0Q0UpLAorCisgIC5jaGVja1ZhbHVlID0gVUlOVDI0X0MoMFgyMUNGMDIpLAorfTsKKworQ1JDX0FMR09SSVRITV9ERUZJTklUSU9OKENSQzI0X09TXzkpID0geworICAucHJpbWFyeU5hbWUgPSAiQ1JDLTI0L09TLTkiLAorICAuYWxnb3JpdGhtQ2xhc3MgPSBDUkNfQUxHT1JJVEhNX0NMQVNTX0FUVEVTVEVELAorCisgIC5jaGVja3N1bVdpZHRoID0gMjQsCisgIC5nZW5lcmF0b3JQb2x5bm9taWFsID0gVUlOVDI0X0MoMFg4MDAwNjMpLAorICAuaW5pdGlhbFZhbHVlID0gVUlOVDI0X01BWCwKKyAgLnhvck1hc2sgPSBVSU5UMjRfTUFYLAorCisgIC5jaGVja1ZhbHVlID0gVUlOVDI0X0MoMFgyMDBGQTUpLAorICAucmVzaWR1ZSA9IFVJTlQyNF9DKDBYODAwRkUzKSwKK307CisKK0NSQ19BTEdPUklUSE1fREVGSU5JVElPTihDUkMzMl9BSVhNKSA9IHsKKyAgLnByaW1hcnlOYW1lID0gIkNSQy0zMi9BSVhNIiwKKyAgLmFsZ29yaXRobUNsYXNzID0gQ1JDX0FMR09SSVRITV9DTEFTU19BVFRFU1RFRCwKKyAgQ1JDX1NFQ09OREFSWV9OQU1FUygiQ1JDLTMyUSIpLAorCisgIC5jaGVja3N1bVdpZHRoID0gMzIsCisgIC5nZW5lcmF0b3JQb2x5bm9taWFsID0gVUlOVDMyX0MoMFg4MTQxNDFBQiksCisKKyAgLmNoZWNrVmFsdWUgPSBVSU5UMzJfQygwWDMwMTBCRjdGKSwKK307CisKK0NSQ19BTEdPUklUSE1fREVGSU5JVElPTihDUkMzMl9BVVRPU0FSKSA9IHsKKyAgLnByaW1hcnlOYW1lID0gIkNSQy0zMi9BVVRPU0FSIiwKKyAgLmFsZ29yaXRobUNsYXNzID0gQ1JDX0FMR09SSVRITV9DTEFTU19BVFRFU1RFRCwKKworICAuY2hlY2tzdW1XaWR0aCA9IDMyLAorICAucmVmbGVjdERhdGEgPSAxLAorICAucmVmbGVjdFJlc3VsdCA9IDEsCisgIC5nZW5lcmF0b3JQb2x5bm9taWFsID0gVUlOVDMyX0MoMFhGNEFDRkIxMyksCisgIC5pbml0aWFsVmFsdWUgPSBVSU5UMzJfTUFYLAorICAueG9yTWFzayA9IFVJTlQzMl9NQVgsCisKKyAgLmNoZWNrVmFsdWUgPSBVSU5UMzJfQygwWDE2OTdEMDZBKSwKKyAgLnJlc2lkdWUgPSBVSU5UMzJfQygwWDkwNENEREJGKSwKK307CisKK0NSQ19BTEdPUklUSE1fREVGSU5JVElPTihDUkMzMl9CQVNFOTFfRCkgPSB7CisgIC5wcmltYXJ5TmFtZSA9ICJDUkMtMzIvQkFTRTkxLUQiLAorICAuYWxnb3JpdGhtQ2xhc3MgPSBDUkNfQUxHT1JJVEhNX0NMQVNTX0NPTkZJUk1FRCwKKyAgQ1JDX1NFQ09OREFSWV9OQU1FUygiQ1JDLTMyRCIpLAorCisgIC5jaGVja3N1bVdpZHRoID0gMzIsCisgIC5yZWZsZWN0RGF0YSA9IDEsCisgIC5yZWZsZWN0UmVzdWx0ID0gMSwKKyAgLmdlbmVyYXRvclBvbHlub21pYWwgPSBVSU5UMzJfQygwWEE4MzM5ODJCKSwKKyAgLmluaXRpYWxWYWx1ZSA9IFVJTlQzMl9NQVgsCisgIC54b3JNYXNrID0gVUlOVDMyX01BWCwKKworICAuY2hlY2tWYWx1ZSA9IFVJTlQzMl9DKDBYODczMTU1NzYpLAorICAucmVzaWR1ZSA9IFVJTlQzMl9DKDBYNDUyNzA1NTEpLAorfTsKKworQ1JDX0FMR09SSVRITV9ERUZJTklUSU9OKENSQzMyX0JaSVAyKSA9IHsKKyAgLnByaW1hcnlOYW1lID0gIkNSQy0zMi9CWklQMiIsCisgIC5hbGdvcml0aG1DbGFzcyA9IENSQ19BTEdPUklUSE1fQ0xBU1NfQVRURVNURUQsCisgIENSQ19TRUNPTkRBUllfTkFNRVMoIkNSQy0zMi9BQUw1IiwgIkNSQy0zMi9ERUNULUIiLCAiQi1DUkMtMzIiKSwKKworICAuY2hlY2tzdW1XaWR0aCA9IDMyLAorICAuZ2VuZXJhdG9yUG9seW5vbWlhbCA9IFVJTlQzMl9DKDBYMDRDMTFEQjcpLAorICAuaW5pdGlhbFZhbHVlID0gVUlOVDMyX01BWCwKKyAgLnhvck1hc2sgPSBVSU5UMzJfTUFYLAorCisgIC5jaGVja1ZhbHVlID0gVUlOVDMyX0MoMFhGQzg5MTkxOCksCisgIC5yZXNpZHVlID0gVUlOVDMyX0MoMFhDNzA0REQ3QiksCit9OworCitDUkNfQUxHT1JJVEhNX0RFRklOSVRJT04oQ1JDMzJfQ0RfUk9NX0VEQykgPSB7CisgIC5wcmltYXJ5TmFtZSA9ICJDUkMtMzIvQ0QtUk9NLUVEQyIsCisgIC5hbGdvcml0aG1DbGFzcyA9IENSQ19BTEdPUklUSE1fQ0xBU1NfQUNBREVNSUMsCisKKyAgLmNoZWNrc3VtV2lkdGggPSAzMiwKKyAgLnJlZmxlY3REYXRhID0gMSwKKyAgLnJlZmxlY3RSZXN1bHQgPSAxLAorICAuZ2VuZXJhdG9yUG9seW5vbWlhbCA9IFVJTlQzMl9DKDBYODAwMTgwMUIpLAorCisgIC5jaGVja1ZhbHVlID0gVUlOVDMyX0MoMFg2RUMyRURDNCksCit9OworCitDUkNfQUxHT1JJVEhNX0RFRklOSVRJT04oQ1JDMzJfQ0tTVU0pID0geworICAucHJpbWFyeU5hbWUgPSAiQ1JDLTMyL0NLU1VNIiwKKyAgLmFsZ29yaXRobUNsYXNzID0gQ1JDX0FMR09SSVRITV9DTEFTU19BVFRFU1RFRCwKKyAgQ1JDX1NFQ09OREFSWV9OQU1FUygiQ0tTVU0iLCAiQ1JDLTMyL1BPU0lYIiksCisKKyAgLmNoZWNrc3VtV2lkdGggPSAzMiwKKyAgLmdlbmVyYXRvclBvbHlub21pYWwgPSBVSU5UMzJfQygwWDA0QzExREI3KSwKKyAgLnhvck1hc2sgPSBVSU5UMzJfTUFYLAorCisgIC5jaGVja1ZhbHVlID0gVUlOVDMyX0MoMFg3NjVFNzY4MCksCisgIC5yZXNpZHVlID0gVUlOVDMyX0MoMFhDNzA0REQ3QiksCit9OworCitDUkNfQUxHT1JJVEhNX0RFRklOSVRJT04oQ1JDMzJfSVNDU0kpID0geworICAucHJpbWFyeU5hbWUgPSAiQ1JDLTMyL0lTQ1NJIiwKKyAgLmFsZ29yaXRobUNsYXNzID0gQ1JDX0FMR09SSVRITV9DTEFTU19BVFRFU1RFRCwKKyAgQ1JDX1NFQ09OREFSWV9OQU1FUygiQ1JDLTMyL0JBU0U5MS1DIiwgIkNSQy0zMi9DQVNUQUdOT0xJIiwgIkNSQy0zMi9JTlRFUkxBS0VOIiwgIkNSQy0zMkMiKSwKKworICAuY2hlY2tzdW1XaWR0aCA9IDMyLAorICAucmVmbGVjdERhdGEgPSAxLAorICAucmVmbGVjdFJlc3VsdCA9IDEsCisgIC5nZW5lcmF0b3JQb2x5bm9taWFsID0gVUlOVDMyX0MoMFgxRURDNkY0MSksCisgIC5pbml0aWFsVmFsdWUgPSBVSU5UMzJfTUFYLAorICAueG9yTWFzayA9IFVJTlQzMl9NQVgsCisKKyAgLmNoZWNrVmFsdWUgPSBVSU5UMzJfQygwWEUzMDY5MjgzKSwKKyAgLnJlc2lkdWUgPSBVSU5UMzJfQygwWEI3OThCNDM4KSwKK307CisKK0NSQ19BTEdPUklUSE1fREVGSU5JVElPTihDUkMzMl9JU09fSERMQykgPSB7CisgIC5wcmltYXJ5TmFtZSA9ICJDUkMtMzIvSVNPLUhETEMiLAorICAuYWxnb3JpdGhtQ2xhc3MgPSBDUkNfQUxHT1JJVEhNX0NMQVNTX0FUVEVTVEVELAorICBDUkNfU0VDT05EQVJZX05BTUVTKCJDUkMtMzIiLCAiQ1JDLTMyL0FEQ0NQIiwgIkNSQy0zMi9WLTQyIiwgIkNSQy0zMi9YWiIsICJQS1pJUCIpLAorCisgIC5jaGVja3N1bVdpZHRoID0gMzIsCisgIC5yZWZsZWN0RGF0YSA9IDEsCisgIC5yZWZsZWN0UmVzdWx0ID0gMSwKKyAgLmdlbmVyYXRvclBvbHlub21pYWwgPSBVSU5UMzJfQygwWDA0QzExREI3KSwKKyAgLmluaXRpYWxWYWx1ZSA9IFVJTlQzMl9NQVgsCisgIC54b3JNYXNrID0gVUlOVDMyX01BWCwKKworICAuY2hlY2tWYWx1ZSA9IFVJTlQzMl9DKDBYQ0JGNDM5MjYpLAorICAucmVzaWR1ZSA9IFVJTlQzMl9DKDBYREVCQjIwRTMpLAorfTsKKworQ1JDX0FMR09SSVRITV9ERUZJTklUSU9OKENSQzMyX0pBTUNSQykgPSB7CisgIC5wcmltYXJ5TmFtZSA9ICJDUkMtMzIvSkFNQ1JDIiwKKyAgLmFsZ29yaXRobUNsYXNzID0gQ1JDX0FMR09SSVRITV9DTEFTU19DT05GSVJNRUQsCisgIENSQ19TRUNPTkRBUllfTkFNRVMoIkpBTUNSQyIpLAorCisgIC5jaGVja3N1bVdpZHRoID0gMzIsCisgIC5yZWZsZWN0RGF0YSA9IDEsCisgIC5yZWZsZWN0UmVzdWx0ID0gMSwKKyAgLmdlbmVyYXRvclBvbHlub21pYWwgPSBVSU5UMzJfQygwWDA0QzExREI3KSwKKyAgLmluaXRpYWxWYWx1ZSA9IFVJTlQzMl9NQVgsCisKKyAgLmNoZWNrVmFsdWUgPSBVSU5UMzJfQygwWDM0MEJDNkQ5KSwKK307CisKK0NSQ19BTEdPUklUSE1fREVGSU5JVElPTihDUkMzMl9NUEVHXzIpID0geworICAucHJpbWFyeU5hbWUgPSAiQ1JDLTMyL01QRUctMiIsCisgIC5hbGdvcml0aG1DbGFzcyA9IENSQ19BTEdPUklUSE1fQ0xBU1NfQVRURVNURUQsCisKKyAgLmNoZWNrc3VtV2lkdGggPSAzMiwKKyAgLmdlbmVyYXRvclBvbHlub21pYWwgPSBVSU5UMzJfQygwWDA0QzExREI3KSwKKyAgLmluaXRpYWxWYWx1ZSA9IFVJTlQzMl9NQVgsCisKKyAgLmNoZWNrVmFsdWUgPSBVSU5UMzJfQygwWDAzNzZFNkU3KSwKK307CisKK0NSQ19BTEdPUklUSE1fREVGSU5JVElPTihDUkMzMl9YRkVSKSA9IHsKKyAgLnByaW1hcnlOYW1lID0gIkNSQy0zMi9YRkVSIiwKKyAgLmFsZ29yaXRobUNsYXNzID0gQ1JDX0FMR09SSVRITV9DTEFTU19DT05GSVJNRUQsCisgIENSQ19TRUNPTkRBUllfTkFNRVMoIlhGRVIiKSwKKworICAuY2hlY2tzdW1XaWR0aCA9IDMyLAorICAuZ2VuZXJhdG9yUG9seW5vbWlhbCA9IFVJTlQzMl9DKDBYMDAwMDAwQUYpLAorCisgIC5jaGVja1ZhbHVlID0gVUlOVDMyX0MoMFhCRDBCRTMzOCksCit9OworCitjb25zdCBDUkNBbGdvcml0aG0gKmNyY1Byb3ZpZGVkQWxnb3JpdGhtc1tdID0geworICAmQ1JDX0FMR09SSVRITV9TWU1CT0woQ1JDOF9BVVRPU0FSKSwKKyAgJkNSQ19BTEdPUklUSE1fU1lNQk9MKENSQzhfQkxVRVRPT1RIKSwKKyAgJkNSQ19BTEdPUklUSE1fU1lNQk9MKENSQzhfQ0RNQTIwMDApLAorICAmQ1JDX0FMR09SSVRITV9TWU1CT0woQ1JDOF9EQVJDKSwKKyAgJkNSQ19BTEdPUklUSE1fU1lNQk9MKENSQzhfRFZCX1MyKSwKKyAgJkNSQ19BTEdPUklUSE1fU1lNQk9MKENSQzhfR1NNX0EpLAorICAmQ1JDX0FMR09SSVRITV9TWU1CT0woQ1JDOF9HU01fQiksCisgICZDUkNfQUxHT1JJVEhNX1NZTUJPTChDUkM4X0lfNDMyXzEpLAorICAmQ1JDX0FMR09SSVRITV9TWU1CT0woQ1JDOF9JX0NPREUpLAorICAmQ1JDX0FMR09SSVRITV9TWU1CT0woQ1JDOF9MVEUpLAorICAmQ1JDX0FMR09SSVRITV9TWU1CT0woQ1JDOF9NQVhJTV9ET1cpLAorICAmQ1JDX0FMR09SSVRITV9TWU1CT0woQ1JDOF9NSUZBUkVfTUFEKSwKKyAgJkNSQ19BTEdPUklUSE1fU1lNQk9MKENSQzhfTlJTQ181KSwKKyAgJkNSQ19BTEdPUklUSE1fU1lNQk9MKENSQzhfT1BFTlNBRkVUWSksCisgICZDUkNfQUxHT1JJVEhNX1NZTUJPTChDUkM4X1JPSEMpLAorICAmQ1JDX0FMR09SSVRITV9TWU1CT0woQ1JDOF9TQUVfSjE4NTApLAorICAmQ1JDX0FMR09SSVRITV9TWU1CT0woQ1JDOF9TTUJVUyksCisgICZDUkNfQUxHT1JJVEhNX1NZTUJPTChDUkM4X1RFQ0hfMzI1MCksCisgICZDUkNfQUxHT1JJVEhNX1NZTUJPTChDUkM4X1dDRE1BKSwKKworICAmQ1JDX0FMR09SSVRITV9TWU1CT0woQ1JDMTZfQVJDKSwKKyAgJkNSQ19BTEdPUklUSE1fU1lNQk9MKENSQzE2X0NETUEyMDAwKSwKKyAgJkNSQ19BTEdPUklUSE1fU1lNQk9MKENSQzE2X0NNUyksCisgICZDUkNfQUxHT1JJVEhNX1NZTUJPTChDUkMxNl9ERFNfMTEwKSwKKyAgJkNSQ19BTEdPUklUSE1fU1lNQk9MKENSQzE2X0RFQ1RfUiksCisgICZDUkNfQUxHT1JJVEhNX1NZTUJPTChDUkMxNl9ERUNUX1gpLAorICAmQ1JDX0FMR09SSVRITV9TWU1CT0woQ1JDMTZfRE5QKSwKKyAgJkNSQ19BTEdPUklUSE1fU1lNQk9MKENSQzE2X0VOXzEzNzU3KSwKKyAgJkNSQ19BTEdPUklUSE1fU1lNQk9MKENSQzE2X0dFTklCVVMpLAorICAmQ1JDX0FMR09SSVRITV9TWU1CT0woQ1JDMTZfR1NNKSwKKyAgJkNSQ19BTEdPUklUSE1fU1lNQk9MKENSQzE2X0lCTV8zNzQwKSwKKyAgJkNSQ19BTEdPUklUSE1fU1lNQk9MKENSQzE2X0lCTV9TRExDKSwKKyAgJkNSQ19BTEdPUklUSE1fU1lNQk9MKENSQzE2X0lTT19JRUNfMTQ0NDNfM19BKSwKKyAgJkNSQ19BTEdPUklUSE1fU1lNQk9MKENSQzE2X0tFUk1JVCksCisgICZDUkNfQUxHT1JJVEhNX1NZTUJPTChDUkMxNl9MSjEyMDApLAorICAmQ1JDX0FMR09SSVRITV9TWU1CT0woQ1JDMTZfTUFYSU1fRE9XKSwKKyAgJkNSQ19BTEdPUklUSE1fU1lNQk9MKENSQzE2X01DUkY0WFgpLAorICAmQ1JDX0FMR09SSVRITV9TWU1CT0woQ1JDMTZfTU9EQlVTKSwKKyAgJkNSQ19BTEdPUklUSE1fU1lNQk9MKENSQzE2X05SU0NfNSksCisgICZDUkNfQUxHT1JJVEhNX1NZTUJPTChDUkMxNl9PUEVOU0FGRVRZX0EpLAorICAmQ1JDX0FMR09SSVRITV9TWU1CT0woQ1JDMTZfT1BFTlNBRkVUWV9CKSwKKyAgJkNSQ19BTEdPUklUSE1fU1lNQk9MKENSQzE2X1BST0ZJQlVTKSwKKyAgJkNSQ19BTEdPUklUSE1fU1lNQk9MKENSQzE2X1JJRUxMTyksCisgICZDUkNfQUxHT1JJVEhNX1NZTUJPTChDUkMxNl9TUElfRlVKSVRTVSksCisgICZDUkNfQUxHT1JJVEhNX1NZTUJPTChDUkMxNl9UMTBfRElGKSwKKyAgJkNSQ19BTEdPUklUSE1fU1lNQk9MKENSQzE2X1RFTEVESVNLKSwKKyAgJkNSQ19BTEdPUklUSE1fU1lNQk9MKENSQzE2X1RNUzM3MTU3KSwKKyAgJkNSQ19BTEdPUklUSE1fU1lNQk9MKENSQzE2X1VNVFMpLAorICAmQ1JDX0FMR09SSVRITV9TWU1CT0woQ1JDMTZfVVNCKSwKKyAgJkNSQ19BTEdPUklUSE1fU1lNQk9MKENSQzE2X1hNT0RFTSksCisKKyAgJkNSQ19BTEdPUklUSE1fU1lNQk9MKENSQzI0X0JMRSksCisgICZDUkNfQUxHT1JJVEhNX1NZTUJPTChDUkMyNF9GTEVYUkFZX0EpLAorICAmQ1JDX0FMR09SSVRITV9TWU1CT0woQ1JDMjRfRkxFWFJBWV9CKSwKKyAgJkNSQ19BTEdPUklUSE1fU1lNQk9MKENSQzI0X0lOVEVSTEFLRU4pLAorICAmQ1JDX0FMR09SSVRITV9TWU1CT0woQ1JDMjRfTFRFX0EpLAorICAmQ1JDX0FMR09SSVRITV9TWU1CT0woQ1JDMjRfTFRFX0IpLAorICAmQ1JDX0FMR09SSVRITV9TWU1CT0woQ1JDMjRfT1BFTlBHUCksCisgICZDUkNfQUxHT1JJVEhNX1NZTUJPTChDUkMyNF9PU185KSwKKworICAmQ1JDX0FMR09SSVRITV9TWU1CT0woQ1JDMzJfQUlYTSksCisgICZDUkNfQUxHT1JJVEhNX1NZTUJPTChDUkMzMl9BVVRPU0FSKSwKKyAgJkNSQ19BTEdPUklUSE1fU1lNQk9MKENSQzMyX0JBU0U5MV9EKSwKKyAgJkNSQ19BTEdPUklUSE1fU1lNQk9MKENSQzMyX0JaSVAyKSwKKyAgJkNSQ19BTEdPUklUSE1fU1lNQk9MKENSQzMyX0NEX1JPTV9FREMpLAorICAmQ1JDX0FMR09SSVRITV9TWU1CT0woQ1JDMzJfQ0tTVU0pLAorICAmQ1JDX0FMR09SSVRITV9TWU1CT0woQ1JDMzJfSVNDU0kpLAorICAmQ1JDX0FMR09SSVRITV9TWU1CT0woQ1JDMzJfSVNPX0hETEMpLAorICAmQ1JDX0FMR09SSVRITV9TWU1CT0woQ1JDMzJfSkFNQ1JDKSwKKyAgJkNSQ19BTEdPUklUSE1fU1lNQk9MKENSQzMyX01QRUdfMiksCisgICZDUkNfQUxHT1JJVEhNX1NZTUJPTChDUkMzMl9YRkVSKSwKKworICBOVUxMCit9OworCitjb25zdCBDUkNBbGdvcml0aG0gKgorY3JjR2V0UHJvdmlkZWRBbGdvcml0aG0gKGNvbnN0IGNoYXIgKm5hbWUpIHsKKyAgY29uc3QgQ1JDQWxnb3JpdGhtICoqYWxnb3JpdGhtID0gY3JjUHJvdmlkZWRBbGdvcml0aG1zOworCisgIHdoaWxlICgqYWxnb3JpdGhtKSB7CisgICAgaWYgKHN0cmNtcChuYW1lLCAoKmFsZ29yaXRobSktPnByaW1hcnlOYW1lKSA9PSAwKSByZXR1cm4gKmFsZ29yaXRobTsKKyAgICBjb25zdCBjaGFyICpjb25zdCAqYWxpYXMgPSAoKmFsZ29yaXRobSktPnNlY29uZGFyeU5hbWVzOworCisgICAgaWYgKGFsaWFzKSB7CisgICAgICB3aGlsZSAoKmFsaWFzKSB7CisgICAgICAgIGlmIChzdHJjbXAobmFtZSwgKmFsaWFzKSA9PSAwKSByZXR1cm4gKmFsZ29yaXRobTsKKyAgICAgICAgYWxpYXMgKz0gMTsKKyAgICAgIH0KKyAgICB9CisKKyAgICBhbGdvcml0aG0gKz0gMTsKKyAgfQorCisgIHJldHVybiBOVUxMOworfQpkaWZmIC0tZ2l0IGEvUHJvZ3JhbXMvY3JjX2dlbmVyYXRlLmMgYi9Qcm9ncmFtcy9jcmNfZ2VuZXJhdGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41N2MxYWFhCi0tLSAvZGV2L251bGwKKysrIGIvUHJvZ3JhbXMvY3JjX2dlbmVyYXRlLmMKQEAgLTAsMCArMSwyMjMgQEAKKy8qCisgKiBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorICogICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorICoKKyAqIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorICoKKyAqIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyAqLworCisjaW5jbHVkZSAicHJvbG9ndWUuaCIKKworI2luY2x1ZGUgPHN0cmluZy5oPgorCisjaW5jbHVkZSAiY3JjX2dlbmVyYXRlLmgiCisjaW5jbHVkZSAiY3JjX2ludGVybmFsLmgiCisjaW5jbHVkZSAibG9nLmgiCisKK2NyY190CitjcmNNb3N0U2lnbmlmaWNhbnRCaXQgKHVuc2lnbmVkIGludCB3aWR0aCkgeworICByZXR1cm4gQ1JDX0MoMSkgPDwgKHdpZHRoIC0gMSk7Cit9CisKK2NyY190CitjcmNSZWZsZWN0Qml0cyAoY3JjX3QgZnJvbVZhbHVlLCB1bnNpZ25lZCBpbnQgd2lkdGgpIHsKKyAgY3JjX3QgZnJvbUJpdCA9IGNyY01vc3RTaWduaWZpY2FudEJpdCh3aWR0aCk7CisgIGNyY190IHRvQml0ID0gMTsKKyAgY3JjX3QgdG9WYWx1ZSA9IDA7CisKKyAgd2hpbGUgKGZyb21CaXQpIHsKKyAgICBpZiAoZnJvbVZhbHVlICYgZnJvbUJpdCkgdG9WYWx1ZSB8PSB0b0JpdDsKKyAgICBmcm9tQml0ID4+PSAxOworICAgIHRvQml0IDw8PSAxOworICB9CisKKyAgcmV0dXJuIHRvVmFsdWU7Cit9CisKK3ZvaWQKK2NyY1JlZmxlY3RWYWx1ZSAoY3JjX3QgKnZhbHVlLCBjb25zdCBDUkNBbGdvcml0aG0gKmFsZ29yaXRobSkgeworICAqdmFsdWUgPSBjcmNSZWZsZWN0Qml0cygqdmFsdWUsIGFsZ29yaXRobS0+Y2hlY2tzdW1XaWR0aCk7Cit9CisKK3ZvaWQKK2NyY1JlZmxlY3RCeXRlICh1aW50OF90ICpieXRlKSB7CisgICpieXRlID0gY3JjUmVmbGVjdEJpdHMoKmJ5dGUsIENSQ19CWVRFX1dJRFRIKTsKK30KKworc3RhdGljIHVpbnQ4X3QgY3JjRGlyZWN0RGF0YVRyYW5zbGF0aW9uVGFibGVbQ1JDX0JZVEVfSU5ERVhFRF9UQUJMRV9TSVpFXSA9IHsxfTsKK3N0YXRpYyB1aW50OF90IGNyY1JlZmxlY3RlZERhdGFUcmFuc2xhdGlvblRhYmxlW0NSQ19CWVRFX0lOREVYRURfVEFCTEVfU0laRV0gPSB7MX07CisKK3N0YXRpYyB2b2lkCitjcmNNYWtlRGF0YVRyYW5zbGF0aW9uVGFibGUgKENSQ1Byb3BlcnRpZXMgKnByb3BlcnRpZXMsIGNvbnN0IENSQ0FsZ29yaXRobSAqYWxnb3JpdGhtKSB7CisgIGlmIChhbGdvcml0aG0tPnJlZmxlY3REYXRhKSB7CisgICAgdWludDhfdCAqdGFibGUgPSBjcmNSZWZsZWN0ZWREYXRhVHJhbnNsYXRpb25UYWJsZTsKKyAgICBwcm9wZXJ0aWVzLT5kYXRhVHJhbnNsYXRpb25UYWJsZSA9IHRhYmxlOworCisgICAgaWYgKCp0YWJsZSkgeworICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaW5kZXg9MDsgaW5kZXg8PVVJTlQ4X01BWDsgaW5kZXgrPTEpIHsKKyAgICAgICAgdWludDhfdCAqYnl0ZSA9ICZ0YWJsZVtpbmRleF07CisgICAgICAgICpieXRlID0gaW5kZXg7CisgICAgICAgIGNyY1JlZmxlY3RCeXRlKGJ5dGUpOworICAgICAgfQorICAgIH0KKyAgfSBlbHNlIHsKKyAgICB1aW50OF90ICp0YWJsZSA9IGNyY0RpcmVjdERhdGFUcmFuc2xhdGlvblRhYmxlOworICAgIHByb3BlcnRpZXMtPmRhdGFUcmFuc2xhdGlvblRhYmxlID0gdGFibGU7CisKKyAgICBpZiAoKnRhYmxlKSB7CisgICAgICBmb3IgKHVuc2lnbmVkIGludCBpbmRleD0wOyBpbmRleDw9VUlOVDhfTUFYOyBpbmRleCs9MSkgeworICAgICAgICB0YWJsZVtpbmRleF0gPSBpbmRleDsKKyAgICAgIH0KKyAgICB9CisgIH0KK30KKworc3RhdGljIHZvaWQKK2NyY01ha2VSZW1haW5kZXJDYWNoZSAoQ1JDUHJvcGVydGllcyAqcHJvcGVydGllcywgY29uc3QgQ1JDQWxnb3JpdGhtICphbGdvcml0aG0pIHsKKyAgLy8gQ29tcHV0ZSB0aGUgcmVtYWluZGVyIGZvciBlYWNoIHBvc3NpYmxlIGRpdmlkZW5kLgorICBmb3IgKHVuc2lnbmVkIGludCBkaXZpZGVuZD0wOyBkaXZpZGVuZDw9VUlOVDhfTUFYOyBkaXZpZGVuZCs9MSkgeworICAgIC8vIFN0YXJ0IHdpdGggdGhlIGRpdmlkZW5kIGZvbGxvd2VkIGJ5IHplcm9zLgorICAgIGNyY190IHJlbWFpbmRlciA9IGRpdmlkZW5kIDw8IHByb3BlcnRpZXMtPmJ5dGVTaGlmdDsKKworICAgIC8vIFBlcmZvcm0gbW9kdWxvLTIgZGl2aXNpb24sIGEgYml0IGF0IGEgdGltZS4KKyAgICBmb3IgKHVuc2lnbmVkIGludCBiaXQ9Q1JDX0JZVEVfV0lEVEg7IGJpdD4wOyBiaXQtPTEpIHsKKyAgICAgIC8vIFRyeSB0byBkaXZpZGUgdGhlIGN1cnJlbnQgZGF0YSBiaXQuCisgICAgICBpZiAocmVtYWluZGVyICYgcHJvcGVydGllcy0+bW9zdFNpZ25pZmljYW50Qml0KSB7CisgICAgICAgIHJlbWFpbmRlciA8PD0gMTsKKyAgICAgICAgcmVtYWluZGVyIF49IGFsZ29yaXRobS0+Z2VuZXJhdG9yUG9seW5vbWlhbDsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIHJlbWFpbmRlciA8PD0gMTsKKyAgICAgIH0KKyAgICB9CisKKyAgICAvLyBTdG9yZSB0aGUgcmVzdWx0IGludG8gdGhlIHRhYmxlLgorICAgIHByb3BlcnRpZXMtPnJlbWFpbmRlckNhY2hlW2RpdmlkZW5kXSA9IHJlbWFpbmRlciAmIHByb3BlcnRpZXMtPnZhbHVlTWFzazsKKyAgfQorfQorCit2b2lkCitjcmNNYWtlUHJvcGVydGllcyAoQ1JDUHJvcGVydGllcyAqcHJvcGVydGllcywgY29uc3QgQ1JDQWxnb3JpdGhtICphbGdvcml0aG0pIHsKKyAgcHJvcGVydGllcy0+Ynl0ZVNoaWZ0ID0gYWxnb3JpdGhtLT5jaGVja3N1bVdpZHRoIC0gQ1JDX0JZVEVfV0lEVEg7CisgIHByb3BlcnRpZXMtPm1vc3RTaWduaWZpY2FudEJpdCA9IGNyY01vc3RTaWduaWZpY2FudEJpdChhbGdvcml0aG0tPmNoZWNrc3VtV2lkdGgpOworICBwcm9wZXJ0aWVzLT52YWx1ZU1hc2sgPSAocHJvcGVydGllcy0+bW9zdFNpZ25pZmljYW50Qml0IC0gMSkgfCBwcm9wZXJ0aWVzLT5tb3N0U2lnbmlmaWNhbnRCaXQ7CisKKyAgY3JjTWFrZURhdGFUcmFuc2xhdGlvblRhYmxlKHByb3BlcnRpZXMsIGFsZ29yaXRobSk7CisgIGNyY01ha2VSZW1haW5kZXJDYWNoZShwcm9wZXJ0aWVzLCBhbGdvcml0aG0pOworfQorCit2b2lkCitjcmNSZXNldEdlbmVyYXRvciAoQ1JDR2VuZXJhdG9yICpjcmMpIHsKKyAgY3JjLT5jdXJyZW50VmFsdWUgPSBjcmMtPmFsZ29yaXRobS5pbml0aWFsVmFsdWU7Cit9CisKK0NSQ0dlbmVyYXRvciAqCitjcmNOZXdHZW5lcmF0b3IgKGNvbnN0IENSQ0FsZ29yaXRobSAqYWxnb3JpdGhtKSB7CisgIENSQ0dlbmVyYXRvciAqY3JjOworICBjb25zdCBjaGFyICpuYW1lID0gYWxnb3JpdGhtLT5wcmltYXJ5TmFtZTsKKyAgc2l6ZV90IHNpemUgPSBzaXplb2YoKmNyYykgKyBzdHJsZW4obmFtZSkgKyAxOworCisgIGlmICgoY3JjID0gbWFsbG9jKHNpemUpKSkgeworICAgIG1lbXNldChjcmMsIDAsIHNpemUpOworCisgICAgY3JjLT5hbGdvcml0aG0gPSAqYWxnb3JpdGhtOworICAgIHN0cmNweShjcmMtPmFsZ29yaXRobU5hbWUsIG5hbWUpOworICAgIGNyYy0+YWxnb3JpdGhtLnByaW1hcnlOYW1lID0gY3JjLT5hbGdvcml0aG1OYW1lOworCisgICAgY3JjTWFrZVByb3BlcnRpZXMoJmNyYy0+cHJvcGVydGllcywgJmNyYy0+YWxnb3JpdGhtKTsKKyAgICBjcmNSZXNldEdlbmVyYXRvcihjcmMpOworICAgIHJldHVybiBjcmM7CisgIH0gZWxzZSB7CisgICAgbG9nTWFsbG9jRXJyb3IoKTsKKyAgfQorCisgIHJldHVybiBOVUxMOworfQorCit2b2lkCitjcmNEZXN0cm95R2VuZXJhdG9yIChDUkNHZW5lcmF0b3IgKmNyYykgeworICBmcmVlKGNyYyk7Cit9CisKK3ZvaWQKK2NyY0FkZEJ5dGUgKENSQ0dlbmVyYXRvciAqY3JjLCB1aW50OF90IGJ5dGUpIHsKKyAgYnl0ZSA9IGNyYy0+cHJvcGVydGllcy5kYXRhVHJhbnNsYXRpb25UYWJsZVtieXRlXTsKKyAgYnl0ZSBePSBjcmMtPmN1cnJlbnRWYWx1ZSA+PiBjcmMtPnByb3BlcnRpZXMuYnl0ZVNoaWZ0OworICBjcmMtPmN1cnJlbnRWYWx1ZSA9IGNyYy0+cHJvcGVydGllcy5yZW1haW5kZXJDYWNoZVtieXRlXSBeIChjcmMtPmN1cnJlbnRWYWx1ZSA8PCBDUkNfQllURV9XSURUSCk7CisgIGNyYy0+Y3VycmVudFZhbHVlICY9IGNyYy0+cHJvcGVydGllcy52YWx1ZU1hc2s7Cit9CisKK3ZvaWQKK2NyY0FkZERhdGEgKENSQ0dlbmVyYXRvciAqY3JjLCBjb25zdCB2b2lkICpkYXRhLCBzaXplX3Qgc2l6ZSkgeworICBjb25zdCB1aW50OF90ICpieXRlID0gZGF0YTsKKyAgY29uc3QgdWludDhfdCAqZW5kID0gYnl0ZSArIHNpemU7CisgIHdoaWxlIChieXRlIDwgZW5kKSBjcmNBZGRCeXRlKGNyYywgKmJ5dGUrKyk7Cit9CisKK2NyY190CitjcmNHZXRWYWx1ZSAoY29uc3QgQ1JDR2VuZXJhdG9yICpjcmMpIHsKKyAgcmV0dXJuIGNyYy0+Y3VycmVudFZhbHVlOworfQorCitjcmNfdAorY3JjR2V0Q2hlY2tzdW0gKGNvbnN0IENSQ0dlbmVyYXRvciAqY3JjKSB7CisgIGNvbnN0IENSQ0FsZ29yaXRobSAqYWxnb3JpdGhtID0gJmNyYy0+YWxnb3JpdGhtOworICBjcmNfdCBjaGVja3N1bSA9IGNyYy0+Y3VycmVudFZhbHVlOworICBpZiAoY3JjLT5hbGdvcml0aG0ucmVmbGVjdFJlc3VsdCkgY3JjUmVmbGVjdFZhbHVlKCZjaGVja3N1bSwgYWxnb3JpdGhtKTsKKyAgY2hlY2tzdW0gXj0gYWxnb3JpdGhtLT54b3JNYXNrOworICByZXR1cm4gY2hlY2tzdW07Cit9CisKK2NyY190CitjcmNHZXRSZXNpZHVlIChDUkNHZW5lcmF0b3IgKmNyYykgeworICBjb25zdCBDUkNBbGdvcml0aG0gKmFsZ29yaXRobSA9ICZjcmMtPmFsZ29yaXRobTsKKworICBjcmNfdCBvcmlnaW5hbFZhbHVlID0gY3JjLT5jdXJyZW50VmFsdWU7CisgIGNyY190IGNoZWNrc3VtID0gY3JjR2V0Q2hlY2tzdW0oY3JjKTsKKworICB1bnNpZ25lZCBpbnQgc2l6ZSA9IGFsZ29yaXRobS0+Y2hlY2tzdW1XaWR0aCAvIENSQ19CWVRFX1dJRFRIOworICB1aW50OF90IGRhdGFbc2l6ZV07CisKKyAgaWYgKGFsZ29yaXRobS0+cmVmbGVjdFJlc3VsdCkgeworICAgIHVpbnQ4X3QgKmJ5dGUgPSBkYXRhOworICAgIGNvbnN0IHVpbnQ4X3QgKmVuZCA9IGJ5dGUgKyBzaXplOworCisgICAgd2hpbGUgKGJ5dGUgPCBlbmQpIHsKKyAgICAgICpieXRlKysgPSBjaGVja3N1bTsKKyAgICAgIGNoZWNrc3VtID4+PSBDUkNfQllURV9XSURUSDsKKyAgICB9CisgIH0gZWxzZSB7CisgICAgdWludDhfdCAqYnl0ZSA9IGRhdGEgKyBzaXplOworCisgICAgd2hpbGUgKGJ5dGUtLSA+IGRhdGEpIHsKKyAgICAgICpieXRlID0gY2hlY2tzdW07CisgICAgICBjaGVja3N1bSA+Pj0gQ1JDX0JZVEVfV0lEVEg7CisgICAgfQorICB9CisKKyAgY3JjQWRkRGF0YShjcmMsIGRhdGEsIHNpemUpOworICBjcmNfdCByZXNpZHVlID0gY3JjLT5jdXJyZW50VmFsdWU7CisgIGlmIChhbGdvcml0aG0tPnJlZmxlY3RSZXN1bHQpIGNyY1JlZmxlY3RWYWx1ZSgmcmVzaWR1ZSwgYWxnb3JpdGhtKTsKKworICBjcmMtPmN1cnJlbnRWYWx1ZSA9IG9yaWdpbmFsVmFsdWU7CisgIHJldHVybiByZXNpZHVlOworfQorCitjb25zdCBDUkNBbGdvcml0aG0gKgorY3JjR2V0QWxnb3JpdGhtIChjb25zdCBDUkNHZW5lcmF0b3IgKmNyYykgeworICByZXR1cm4gJmNyYy0+YWxnb3JpdGhtOworfQorCitjb25zdCBDUkNQcm9wZXJ0aWVzICoKK2NyY0dldFByb3BlcnRpZXMgKGNvbnN0IENSQ0dlbmVyYXRvciAqY3JjKSB7CisgIHJldHVybiAmY3JjLT5wcm9wZXJ0aWVzOworfQpkaWZmIC0tZ2l0IGEvUHJvZ3JhbXMvY3JjX2ludGVybmFsLmggYi9Qcm9ncmFtcy9jcmNfaW50ZXJuYWwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MDZiOTFjCi0tLSAvZGV2L251bGwKKysrIGIvUHJvZ3JhbXMvY3JjX2ludGVybmFsLmgKQEAgLTAsMCArMSwzOSBAQAorLyoKKyAqIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisgKiAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisgKgorICogQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKKyNpZm5kZWYgQlJMVFRZX0lOQ0xVREVEX0NSQ19JTlRFUk5BTAorI2RlZmluZSBCUkxUVFlfSU5DTFVERURfQ1JDX0lOVEVSTkFMCisKKyNpbmNsdWRlICJjcmNfZ2VuZXJhdGUuaCIKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZiAvKiBfX2NwbHVzcGx1cyAqLworCitzdHJ1Y3QgQ1JDR2VuZXJhdG9yU3RydWN0IHsKKyAgQ1JDQWxnb3JpdGhtIGFsZ29yaXRobTsKKyAgQ1JDUHJvcGVydGllcyBwcm9wZXJ0aWVzOworICBjcmNfdCBjdXJyZW50VmFsdWU7CisgIGNoYXIgYWxnb3JpdGhtTmFtZVtdOworfTsKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYgLyogX19jcGx1c3BsdXMgKi8KKworI2VuZGlmIC8qIEJSTFRUWV9JTkNMVURFRF9DUkNfSU5URVJOQUwgKi8KZGlmZiAtLWdpdCBhL1Byb2dyYW1zL2NyY192ZXJpZnkuYyBiL1Byb2dyYW1zL2NyY192ZXJpZnkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMDdmMDkyCi0tLSAvZGV2L251bGwKKysrIGIvUHJvZ3JhbXMvY3JjX3ZlcmlmeS5jCkBAIC0wLDAgKzEsOTkgQEAKKy8qCisgKiBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorICogICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorICoKKyAqIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorICoKKyAqIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyAqLworCisjaW5jbHVkZSAicHJvbG9ndWUuaCIKKworI2luY2x1ZGUgPHN0cmluZy5oPgorCisjaW5jbHVkZSAiY3JjX3ZlcmlmeS5oIgorI2luY2x1ZGUgImNyY19pbnRlcm5hbC5oIgorI2luY2x1ZGUgImxvZy5oIgorCitjb25zdCB1aW50OF90IGNyY0NoZWNrRGF0YVtdID0geworICAwWDMxLCAwWDMyLCAwWDMzLCAwWDM0LCAwWDM1LCAwWDM2LCAwWDM3LCAwWDM4LCAwWDM5Cit9OworCitjb25zdCB1aW50OF90IGNyY0NoZWNrU2l6ZSA9IHNpemVvZihjcmNDaGVja0RhdGEpOworCitzdGF0aWMgdm9pZAorY3JjTG9nTWlzbWF0Y2ggKGNvbnN0IENSQ0dlbmVyYXRvciAqY3JjLGNvbnN0IGNoYXIgKndoYXQsIGNyY190IGFjdHVhbCwgY3JjX3QgZXhwZWN0ZWQpIHsKKyAgbG9nTWVzc2FnZShMT0dfV0FSTklORywKKyAgICAiQ1JDICVzIG1pc21hdGNoOiAlczogQWN0dWFsOiUiUFJJY3JjICIgRXhwZWN0ZWQ6JSJQUkljcmMsCisgICAgd2hhdCwgY3JjLT5hbGdvcml0aG1OYW1lLCBhY3R1YWwsIGV4cGVjdGVkCisgICk7Cit9CisKK2ludAorY3JjVmVyaWZ5Q2hlY2tzdW0gKGNvbnN0IENSQ0dlbmVyYXRvciAqY3JjLCBjcmNfdCBleHBlY3RlZCkgeworICBjcmNfdCBhY3R1YWwgPSBjcmNHZXRDaGVja3N1bShjcmMpOworICBpbnQgb2sgPSBhY3R1YWwgPT0gZXhwZWN0ZWQ7CisgIGlmICghb2spIGNyY0xvZ01pc21hdGNoKGNyYywgImNoZWNrc3VtIiwgYWN0dWFsLCBleHBlY3RlZCk7CisgIHJldHVybiBvazsKK30KKworaW50CitjcmNWZXJpZnlSZXNpZHVlIChDUkNHZW5lcmF0b3IgKmNyYykgeworICBjcmNfdCBhY3R1YWwgPSBjcmNHZXRSZXNpZHVlKGNyYyk7CisgIGNyY190IGV4cGVjdGVkID0gY3JjLT5hbGdvcml0aG0ucmVzaWR1ZTsKKyAgaW50IG9rID0gYWN0dWFsID09IGV4cGVjdGVkOworICBpZiAoIW9rKSBjcmNMb2dNaXNtYXRjaChjcmMsICJyZXNpZHVlIiwgYWN0dWFsLCBleHBlY3RlZCk7CisgIHJldHVybiBvazsKK30KKworaW50CitjcmNWZXJpZnlBbGdvcml0aG1XaXRoRGF0YSAoCisgIGNvbnN0IENSQ0FsZ29yaXRobSAqYWxnb3JpdGhtLAorICBjb25zdCB2b2lkICpkYXRhLCBzaXplX3Qgc2l6ZSwgY3JjX3QgZXhwZWN0ZWQKKykgeworICBDUkNHZW5lcmF0b3IgKmNyYyA9IGNyY05ld0dlbmVyYXRvcihhbGdvcml0aG0pOworICBjcmNBZGREYXRhKGNyYywgZGF0YSwgc2l6ZSk7CisKKyAgaW50IG9rID0gY3JjVmVyaWZ5Q2hlY2tzdW0oY3JjLCBleHBlY3RlZCk7CisgIGlmIChvaykgb2sgPSBjcmNWZXJpZnlSZXNpZHVlKGNyYyk7CisKKyAgY3JjRGVzdHJveUdlbmVyYXRvcihjcmMpOworICByZXR1cm4gb2s7Cit9CisKK2ludAorY3JjVmVyaWZ5QWxnb3JpdGhtV2l0aFN0cmluZyAoCisgIGNvbnN0IENSQ0FsZ29yaXRobSAqYWxnb3JpdGhtLAorICBjb25zdCBjaGFyICpzdHJpbmcsIGNyY190IGV4cGVjdGVkCispIHsKKyAgcmV0dXJuIGNyY1ZlcmlmeUFsZ29yaXRobVdpdGhEYXRhKGFsZ29yaXRobSwgc3RyaW5nLCBzdHJsZW4oc3RyaW5nKSwgZXhwZWN0ZWQpOworfQorCitpbnQKK2NyY1ZlcmlmeUFsZ29yaXRobSAoY29uc3QgQ1JDQWxnb3JpdGhtICphbGdvcml0aG0pIHsKKyAgcmV0dXJuIGNyY1ZlcmlmeUFsZ29yaXRobVdpdGhEYXRhKAorICAgIGFsZ29yaXRobSwgY3JjQ2hlY2tEYXRhLCBjcmNDaGVja1NpemUsIGFsZ29yaXRobS0+Y2hlY2tWYWx1ZQorICApOworfQorCitpbnQKK2NyY1ZlcmlmeVByb3ZpZGVkQWxnb3JpdGhtcyAodm9pZCkgeworICBpbnQgb2sgPSAxOworICBjb25zdCBDUkNBbGdvcml0aG0gKiphbGdvcml0aG0gPSBjcmNQcm92aWRlZEFsZ29yaXRobXM7CisKKyAgd2hpbGUgKCphbGdvcml0aG0pIHsKKyAgICBpZiAoIWNyY1ZlcmlmeUFsZ29yaXRobSgqYWxnb3JpdGhtKSkgb2sgPSAwOworICAgIGFsZ29yaXRobSArPSAxOworICB9CisKKyAgcmV0dXJuIG9rOworfQpkaWZmIC0tZ2l0IGEvUHJvZ3JhbXMvY3JjdGVzdC5jIGIvUHJvZ3JhbXMvY3JjdGVzdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUwOTg4OTIKLS0tIC9kZXYvbnVsbAorKysgYi9Qcm9ncmFtcy9jcmN0ZXN0LmMKQEAgLTAsMCArMSwxMzIgQEAKKy8qCisgKiBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorICogICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorICoKKyAqIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorICoKKyAqIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyAqLworCisjaW5jbHVkZSAicHJvbG9ndWUuaCIKKworI2luY2x1ZGUgInByb2dyYW0uaCIKKyNpbmNsdWRlICJjbWRsaW5lLmgiCisjaW5jbHVkZSAiY3JjLmgiCisKK3N0YXRpYyBjaGFyICpvcHRfYWxnb3JpdGhtTmFtZTsKK3N0YXRpYyBjaGFyICpvcHRfYWxnb3JpdGhtQ2xhc3M7CitzdGF0aWMgY2hhciAqb3B0X2NoZWNrc3VtV2lkdGg7CitzdGF0aWMgY2hhciAqb3B0X3JlZmxlY3REYXRhOworc3RhdGljIGNoYXIgKm9wdF9yZWZsZWN0UmVzdWx0Oworc3RhdGljIGNoYXIgKm9wdF9nZW5lcmF0b3JQb2x5bm9taWFsOworc3RhdGljIGNoYXIgKm9wdF9pbml0aWFsVmFsdWU7CitzdGF0aWMgY2hhciAqb3B0X3hvck1hc2s7CitzdGF0aWMgY2hhciAqb3B0X2NoZWNrVmFsdWU7CitzdGF0aWMgY2hhciAqb3B0X3Jlc2lkdWU7CisKK0JFR0lOX09QVElPTl9UQUJMRShwcm9ncmFtT3B0aW9ucykKKyAgeyAud29yZCA9ICJuYW1lIiwKKyAgICAubGV0dGVyID0gJ24nLAorICAgIC5hcmd1bWVudCA9ICJzdHJpbmciLAorICAgIC5zZXR0aW5nLnN0cmluZyA9ICZvcHRfYWxnb3JpdGhtTmFtZSwKKyAgICAuZGVzY3JpcHRpb24gPSAidGhlIGFsZ29yaXRobSBuYW1lIgorICB9LAorCisgIHsgLndvcmQgPSAiY2xhc3MiLAorICAgIC5sZXR0ZXIgPSAnYycsCisgICAgLmFyZ3VtZW50ID0gInN0cmluZyIsCisgICAgLnNldHRpbmcuc3RyaW5nID0gJm9wdF9hbGdvcml0aG1DbGFzcywKKyAgICAuZGVzY3JpcHRpb24gPSAidGhlIGFsZ29yaXRobSBjbGFzcyIKKyAgfSwKKworICB7IC53b3JkID0gIndpZHRoIiwKKyAgICAubGV0dGVyID0gJ3cnLAorICAgIC5hcmd1bWVudCA9ICJpbnRlZ2VyIiwKKyAgICAuc2V0dGluZy5zdHJpbmcgPSAmb3B0X2NoZWNrc3VtV2lkdGgsCisgICAgLmRlc2NyaXB0aW9uID0gInRoZSBjaGVja3N1bSB3aWR0aCIKKyAgfSwKKworICB7IC53b3JkID0gInJlZmxlY3QtZGF0YSIsCisgICAgLmxldHRlciA9ICdkJywKKyAgICAuYXJndW1lbnQgPSAiYm9vbGVhbiIsCisgICAgLnNldHRpbmcuc3RyaW5nID0gJm9wdF9yZWZsZWN0RGF0YSwKKyAgICAuZGVzY3JpcHRpb24gPSAicmVmbGVjdCB0aGUgZGF0YSIKKyAgfSwKKworICB7IC53b3JkID0gInJlZmxlY3QtcmVzdWx0IiwKKyAgICAubGV0dGVyID0gJ3InLAorICAgIC5hcmd1bWVudCA9ICJib29sZWFuIiwKKyAgICAuc2V0dGluZy5zdHJpbmcgPSAmb3B0X3JlZmxlY3RSZXN1bHQsCisgICAgLmRlc2NyaXB0aW9uID0gInJlZmxlY3QgdGhlIHJlc3VsdCIKKyAgfSwKKworICB7IC53b3JkID0gInBvbHlub21pYWwiLAorICAgIC5sZXR0ZXIgPSAncCcsCisgICAgLmFyZ3VtZW50ID0gImludGVnZXIiLAorICAgIC5zZXR0aW5nLnN0cmluZyA9ICZvcHRfZ2VuZXJhdG9yUG9seW5vbWlhbCwKKyAgICAuZGVzY3JpcHRpb24gPSAidGhlIGdlbmVyYXRvciBwb2x5bm9taWFsIgorICB9LAorCisgIHsgLndvcmQgPSAiaW5pdGlhbC12YWx1ZSIsCisgICAgLmxldHRlciA9ICdpJywKKyAgICAuYXJndW1lbnQgPSAiaW50ZWdlciIsCisgICAgLnNldHRpbmcuc3RyaW5nID0gJm9wdF9pbml0aWFsVmFsdWUsCisgICAgLmRlc2NyaXB0aW9uID0gInRoZSBpbml0aWFsIHZhbHVlIgorICB9LAorCisgIHsgLndvcmQgPSAieG9yLW1hc2siLAorICAgIC5sZXR0ZXIgPSAneCcsCisgICAgLmFyZ3VtZW50ID0gImludGVnZXIiLAorICAgIC5zZXR0aW5nLnN0cmluZyA9ICZvcHRfeG9yTWFzaywKKyAgICAuZGVzY3JpcHRpb24gPSAidGhlIGZpbmFsIHhvciBtYXNrIgorICB9LAorCisgIHsgLndvcmQgPSAiY2hlY2stdmFsdWUiLAorICAgIC5sZXR0ZXIgPSAnQycsCisgICAgLmFyZ3VtZW50ID0gImludGVnZXIiLAorICAgIC5zZXR0aW5nLnN0cmluZyA9ICZvcHRfY2hlY2tWYWx1ZSwKKyAgICAuZGVzY3JpcHRpb24gPSAidGhlIGNoZWNrIHZhbHVlIgorICB9LAorCisgIHsgLndvcmQgPSAicmVzaWR1ZSIsCisgICAgLmxldHRlciA9ICdSJywKKyAgICAuYXJndW1lbnQgPSAiaW50ZWdlciIsCisgICAgLnNldHRpbmcuc3RyaW5nID0gJm9wdF9yZXNpZHVlLAorICAgIC5kZXNjcmlwdGlvbiA9ICJ0aGUgcmVzaWR1ZSIKKyAgfSwKK0VORF9PUFRJT05fVEFCTEUocHJvZ3JhbU9wdGlvbnMpCisKK3N0YXRpYyBpbnQKK3ZhbGlkYXRlT3B0aW9ucyAodm9pZCkgeworICByZXR1cm4gMTsKK30KKworaW50CittYWluIChpbnQgYXJnYywgY2hhciAqYXJndltdKSB7CisgIHsKKyAgICBjb25zdCBDb21tYW5kTGluZURlc2NyaXB0b3IgZGVzY3JpcHRvciA9IHsKKyAgICAgIC5vcHRpb25zID0gJnByb2dyYW1PcHRpb25zLAorICAgICAgLmFwcGxpY2F0aW9uTmFtZSA9ICJjcmN0ZXN0IiwKKworICAgICAgLnVzYWdlID0geworICAgICAgICAucHVycG9zZSA9IHN0cnRleHQoIlRlc3Qgc3VwcG9ydGVkIENSQyAoQ3ljbGljIFJlZHVuZGFuY3kgQ2hlY2spIGNoZWNrc3VtIGFsZ29yaXRobXMuIiksCisgICAgICB9CisgICAgfTsKKworICAgIFBST0NFU1NfT1BUSU9OUyhkZXNjcmlwdG9yLCBhcmdjLCBhcmd2KTsKKyAgfQorCisgIGlmICghdmFsaWRhdGVPcHRpb25zKCkpIHJldHVybiBQUk9HX0VYSVRfU1lOVEFYOworCisgIGlmICghY3JjVmVyaWZ5UHJvdmlkZWRBbGdvcml0aG1zKCkpIHJldHVybiBQUk9HX0VYSVRfRkFUQUw7CisgIHJldHVybiBQUk9HX0VYSVRfU1VDQ0VTUzsKK30KZGlmZiAtLWdpdCBhL1Byb2dyYW1zL2N0Yi5hdXRvLmggYi9Qcm9ncmFtcy9jdGIuYXV0by5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI3YzA0ZTEKLS0tIC9kZXYvbnVsbAorKysgYi9Qcm9ncmFtcy9jdGIuYXV0by5oCkBAIC0wLDAgKzEgQEAKK1swWDExMTddID0gMFgwMApkaWZmIC0tZ2l0IGEvUHJvZ3JhbXMvY3RiX2NvbXBpbGUuYyBiL1Byb2dyYW1zL2N0Yl9jb21waWxlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWQ5NzUxNgotLS0gL2Rldi9udWxsCisrKyBiL1Byb2dyYW1zL2N0Yl9jb21waWxlLmMKQEAgLTAsMCArMSwxMDQ1IEBACisvKgorICogQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyAqICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyAqCisgKiBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorICoKKyAqIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyAqCisgKiBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisgKi8KKworI2luY2x1ZGUgInByb2xvZ3VlLmgiCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisgCisjaW5jbHVkZSAibG9nLmgiCisjaW5jbHVkZSAicGFyc2UuaCIKKyNpbmNsdWRlICJmaWxlLmgiCisjaW5jbHVkZSAiZGF0YWZpbGUuaCIKKyNpbmNsdWRlICJkYXRhYXJlYS5oIgorI2luY2x1ZGUgInVuaWNvZGUuaCIKKyNpbmNsdWRlICJ1dGY4LmgiCisjaW5jbHVkZSAiY2hhcnNldC5oIgorI2luY2x1ZGUgImN0Yi5oIgorI2luY2x1ZGUgImN0Yl9pbnRlcm5hbC5oIgorI2luY2x1ZGUgImJybF9kb3RzLmgiCisjaW5jbHVkZSAiY2xkci5oIgorI2luY2x1ZGUgImhvc3RjbWQuaCIKKworc3RhdGljIGNvbnN0IHdjaGFyX3QgKmNvbnN0IGNoYXJhY3RlckNsYXNzTmFtZXNbXSA9IHsKKyAgV1NfQygic3BhY2UiKSwKKyAgV1NfQygibGV0dGVyIiksCisgIFdTX0MoImRpZ2l0IiksCisgIFdTX0MoInB1bmN0dWF0aW9uIiksCisgIFdTX0MoInVwcGVyY2FzZSIpLAorICBXU19DKCJsb3dlcmNhc2UiKSwKKyAgTlVMTAorfTsKKworc3RydWN0IENoYXJhY3RlckNsYXNzIHsKKyAgc3RydWN0IENoYXJhY3RlckNsYXNzICpuZXh0OworICBDb250cmFjdGlvblRhYmxlQ2hhcmFjdGVyQXR0cmlidXRlcyBhdHRyaWJ1dGU7CisgIEJZVEUgbGVuZ3RoOworICB3Y2hhcl90IG5hbWVbMV07Cit9OworCitzdGF0aWMgY29uc3Qgd2NoYXJfdCAqY29uc3Qgb3Bjb2RlTmFtZXNbQ1RPX05vbmVdID0geworICBbQ1RPX0NhcGl0YWxTaWduXSA9IFdTX0MoImNhcHNpZ24iKSwKKyAgW0NUT19CZWdpbkNhcGl0YWxTaWduXSA9IFdTX0MoImJlZ2NhcHMiKSwKKyAgW0NUT19FbmRDYXBpdGFsU2lnbl0gPSBXU19DKCJlbmRjYXBzIiksCisKKyAgW0NUT19MZXR0ZXJTaWduXSA9IFdTX0MoImxldHNpZ24iKSwKKyAgW0NUT19OdW1iZXJTaWduXSA9IFdTX0MoIm51bXNpZ24iKSwKKworICBbQ1RPX0xpdGVyYWxdID0gV1NfQygibGl0ZXJhbCIpLAorICBbQ1RPX0Fsd2F5c10gPSBXU19DKCJhbHdheXMiKSwKKyAgW0NUT19SZXBlYXRhYmxlXSA9IFdTX0MoInJlcGVhdGFibGUiKSwKKworICBbQ1RPX0xhcmdlU2lnbl0gPSBXU19DKCJsYXJnZXNpZ24iKSwKKyAgW0NUT19MYXN0TGFyZ2VTaWduXSA9IFdTX0MoImxhc3RsYXJnZXNpZ24iKSwKKyAgW0NUT19XaG9sZVdvcmRdID0gV1NfQygid29yZCIpLAorICBbQ1RPX0pvaW5lZFdvcmRdID0gV1NfQygiam9pbndvcmQiKSwKKyAgW0NUT19Mb3dXb3JkXSA9IFdTX0MoImxvd3dvcmQiKSwKKyAgW0NUT19Db250cmFjdGlvbl0gPSBXU19DKCJjb250cmFjdGlvbiIpLAorCisgIFtDVE9fU3VmZml4YWJsZVdvcmRdID0gV1NfQygic3Vmd29yZCIpLAorICBbQ1RPX1ByZWZpeGFibGVXb3JkXSA9IFdTX0MoInByZndvcmQiKSwKKyAgW0NUT19CZWdXb3JkXSA9IFdTX0MoImJlZ3dvcmQiKSwKKyAgW0NUT19CZWdNaWRXb3JkXSA9IFdTX0MoImJlZ21pZHdvcmQiKSwKKyAgW0NUT19NaWRXb3JkXSA9IFdTX0MoIm1pZHdvcmQiKSwKKyAgW0NUT19NaWRFbmRXb3JkXSA9IFdTX0MoIm1pZGVuZHdvcmQiKSwKKyAgW0NUT19FbmRXb3JkXSA9IFdTX0MoImVuZHdvcmQiKSwKKworICBbQ1RPX1ByZVB1bmNdID0gV1NfQygicHJlcHVuYyIpLAorICBbQ1RPX1Bvc3RQdW5jXSA9IFdTX0MoInBvc3RwdW5jIiksCisKKyAgW0NUT19CZWdOdW1dID0gV1NfQygiYmVnbnVtIiksCisgIFtDVE9fTWlkTnVtXSA9IFdTX0MoIm1pZG51bSIpLAorICBbQ1RPX0VuZE51bV0gPSBXU19DKCJlbmRudW0iKSwKKworICBbQ1RPX0NsYXNzXSA9IFdTX0MoImNsYXNzIiksCisgIFtDVE9fQWZ0ZXJdID0gV1NfQygiYWZ0ZXIiKSwKKyAgW0NUT19CZWZvcmVdID0gV1NfQygiYmVmb3JlIiksCisKKyAgW0NUT19SZXBsYWNlXSA9IFdTX0MoInJlcGxhY2UiKQorfTsKKwordHlwZWRlZiBzdHJ1Y3QgeworICBEYXRhQXJlYSAqYXJlYTsKKworICBDb250cmFjdGlvblRhYmxlQ2hhcmFjdGVyICpjaGFyYWN0ZXJUYWJsZTsKKyAgaW50IGNoYXJhY3RlclRhYmxlU2l6ZTsKKyAgaW50IGNoYXJhY3RlckVudHJ5Q291bnQ7CisKKyAgc3RydWN0IENoYXJhY3RlckNsYXNzICpjaGFyYWN0ZXJDbGFzc2VzOworICBDb250cmFjdGlvblRhYmxlQ2hhcmFjdGVyQXR0cmlidXRlcyBjaGFyYWN0ZXJDbGFzc0F0dHJpYnV0ZTsKKworICB1bnNpZ25lZCBjaGFyIG9wY29kZU5hbWVMZW5ndGhzW0NUT19Ob25lXTsKK30gQ29udHJhY3Rpb25UYWJsZURhdGE7CisKK3N0YXRpYyBpbmxpbmUgQ29udHJhY3Rpb25UYWJsZUhlYWRlciAqCitnZXRDb250cmFjdGlvblRhYmxlSGVhZGVyIChDb250cmFjdGlvblRhYmxlRGF0YSAqY3RkKSB7CisgIHJldHVybiBnZXREYXRhSXRlbShjdGQtPmFyZWEsIDApOworfQorCitzdGF0aWMgQ29udHJhY3Rpb25UYWJsZUNoYXJhY3RlciAqCitnZXRDaGFyYWN0ZXJFbnRyeSAod2NoYXJfdCBjaGFyYWN0ZXIsIENvbnRyYWN0aW9uVGFibGVEYXRhICpjdGQpIHsKKyAgaW50IGZpcnN0ID0gMDsKKyAgaW50IGxhc3QgPSBjdGQtPmNoYXJhY3RlckVudHJ5Q291bnQgLSAxOworCisgIHdoaWxlIChmaXJzdCA8PSBsYXN0KSB7CisgICAgaW50IGN1cnJlbnQgPSAoZmlyc3QgKyBsYXN0KSAvIDI7CisgICAgQ29udHJhY3Rpb25UYWJsZUNoYXJhY3RlciAqZW50cnkgPSAmY3RkLT5jaGFyYWN0ZXJUYWJsZVtjdXJyZW50XTsKKworICAgIGlmIChlbnRyeS0+dmFsdWUgPCBjaGFyYWN0ZXIpIHsKKyAgICAgIGZpcnN0ID0gY3VycmVudCArIDE7CisgICAgfSBlbHNlIGlmIChlbnRyeS0+dmFsdWUgPiBjaGFyYWN0ZXIpIHsKKyAgICAgIGxhc3QgPSBjdXJyZW50IC0gMTsKKyAgICB9IGVsc2UgeworICAgICAgcmV0dXJuIGVudHJ5OworICAgIH0KKyAgfQorCisgIGlmIChjdGQtPmNoYXJhY3RlckVudHJ5Q291bnQgPT0gY3RkLT5jaGFyYWN0ZXJUYWJsZVNpemUpIHsKKyAgICBpbnQgbmV3U2l6ZSA9IGN0ZC0+Y2hhcmFjdGVyVGFibGVTaXplOworICAgIG5ld1NpemUgPSBuZXdTaXplPyBuZXdTaXplPDwxOiAwWDgwOworCisgICAgeworICAgICAgQ29udHJhY3Rpb25UYWJsZUNoYXJhY3RlciAqbmV3VGFibGUgPSByZWFsbG9jKGN0ZC0+Y2hhcmFjdGVyVGFibGUsIChuZXdTaXplICogc2l6ZW9mKCpuZXdUYWJsZSkpKTsKKworICAgICAgaWYgKCFuZXdUYWJsZSkgeworICAgICAgICBsb2dNYWxsb2NFcnJvcigpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgIH0KKworICAgICAgY3RkLT5jaGFyYWN0ZXJUYWJsZSA9IG5ld1RhYmxlOworICAgICAgY3RkLT5jaGFyYWN0ZXJUYWJsZVNpemUgPSBuZXdTaXplOworICAgIH0KKyAgfQorCisgIG1lbW1vdmUoJmN0ZC0+Y2hhcmFjdGVyVGFibGVbZmlyc3QrMV0sCisgICAgICAgICAgJmN0ZC0+Y2hhcmFjdGVyVGFibGVbZmlyc3RdLAorICAgICAgICAgIChjdGQtPmNoYXJhY3RlckVudHJ5Q291bnQgLSBmaXJzdCkgKiBzaXplb2YoKmN0ZC0+Y2hhcmFjdGVyVGFibGUpKTsKKyAgY3RkLT5jaGFyYWN0ZXJFbnRyeUNvdW50ICs9IDE7CisKKyAgeworICAgIENvbnRyYWN0aW9uVGFibGVDaGFyYWN0ZXIgKmVudHJ5ID0gJmN0ZC0+Y2hhcmFjdGVyVGFibGVbZmlyc3RdOworICAgIG1lbXNldChlbnRyeSwgMCwgc2l6ZW9mKCplbnRyeSkpOworICAgIGVudHJ5LT52YWx1ZSA9IGNoYXJhY3RlcjsKKyAgICByZXR1cm4gZW50cnk7CisgIH0KK30KKworc3RhdGljIGludAorc2F2ZUNoYXJhY3RlclRhYmxlIChDb250cmFjdGlvblRhYmxlRGF0YSAqY3RkKSB7CisgIERhdGFPZmZzZXQgb2Zmc2V0OworICBpZiAoIWN0ZC0+Y2hhcmFjdGVyRW50cnlDb3VudCkgcmV0dXJuIDE7CisgIGlmICghc2F2ZURhdGFJdGVtKGN0ZC0+YXJlYSwgJm9mZnNldCwgY3RkLT5jaGFyYWN0ZXJUYWJsZSwKKyAgICAgICAgICAgICAgICAgICAgY3RkLT5jaGFyYWN0ZXJFbnRyeUNvdW50ICogc2l6ZW9mKGN0ZC0+Y2hhcmFjdGVyVGFibGVbMF0pLAorICAgICAgICAgICAgICAgICAgICBfX2FsaWdub2ZfXyhjdGQtPmNoYXJhY3RlclRhYmxlWzBdKSkpCisgICAgcmV0dXJuIDA7CisKKyAgeworICAgIENvbnRyYWN0aW9uVGFibGVIZWFkZXIgKmhlYWRlciA9IGdldENvbnRyYWN0aW9uVGFibGVIZWFkZXIoY3RkKTsKKyAgICBoZWFkZXItPmNoYXJhY3RlcnMgPSBvZmZzZXQ7CisgICAgaGVhZGVyLT5jaGFyYWN0ZXJDb3VudCA9IGN0ZC0+Y2hhcmFjdGVyRW50cnlDb3VudDsKKyAgfQorCisgIHJldHVybiAxOworfQorCitzdGF0aWMgQ29udHJhY3Rpb25UYWJsZVJ1bGUgKgorYWRkQnl0ZVJ1bGUgKAorICBEYXRhRmlsZSAqZmlsZSwKKyAgQ29udHJhY3Rpb25UYWJsZU9wY29kZSBvcGNvZGUsCisgIGNvbnN0IERhdGFTdHJpbmcgKmZpbmQsCisgIGNvbnN0IEJ5dGVPcGVyYW5kICpyZXBsYWNlLAorICBDb250cmFjdGlvblRhYmxlQ2hhcmFjdGVyQXR0cmlidXRlcyBhZnRlciwKKyAgQ29udHJhY3Rpb25UYWJsZUNoYXJhY3RlckF0dHJpYnV0ZXMgYmVmb3JlLAorICBDb250cmFjdGlvblRhYmxlRGF0YSAqY3RkCispIHsKKyAgRGF0YU9mZnNldCBydWxlT2Zmc2V0OworICBzaXplX3QgcnVsZVNpemUgPSBzaXplb2YoQ29udHJhY3Rpb25UYWJsZVJ1bGUpOworICBpZiAoZmluZCkgcnVsZVNpemUgKz0gZmluZC0+bGVuZ3RoICogc2l6ZW9mKGZpbmQtPmNoYXJhY3RlcnNbMF0pOworICBpZiAocmVwbGFjZSkgcnVsZVNpemUgKz0gcmVwbGFjZS0+bGVuZ3RoOworCisgIGlmIChhbGxvY2F0ZURhdGFJdGVtKGN0ZC0+YXJlYSwgJnJ1bGVPZmZzZXQsIHJ1bGVTaXplLCBfX2FsaWdub2ZfXyhDb250cmFjdGlvblRhYmxlUnVsZSkpKSB7CisgICAgQ29udHJhY3Rpb25UYWJsZVJ1bGUgKm5ld1J1bGUgPSBnZXREYXRhSXRlbShjdGQtPmFyZWEsIHJ1bGVPZmZzZXQpOworCisgICAgbmV3UnVsZS0+b3Bjb2RlID0gb3Bjb2RlOworICAgIG5ld1J1bGUtPmFmdGVyID0gYWZ0ZXI7CisgICAgbmV3UnVsZS0+YmVmb3JlID0gYmVmb3JlOworCisgICAgaWYgKGZpbmQpIHsKKyAgICAgIHdtZW1jcHkoJm5ld1J1bGUtPmZpbmRyZXBbMF0sICZmaW5kLT5jaGFyYWN0ZXJzWzBdLAorICAgICAgICAgICAgICAobmV3UnVsZS0+ZmluZGxlbiA9IGZpbmQtPmxlbmd0aCkpOworICAgIH0gZWxzZSB7CisgICAgICBuZXdSdWxlLT5maW5kbGVuID0gMDsKKyAgICB9CisKKyAgICBpZiAocmVwbGFjZSkgeworICAgICAgbWVtY3B5KCZuZXdSdWxlLT5maW5kcmVwW25ld1J1bGUtPmZpbmRsZW5dLCAmcmVwbGFjZS0+Ynl0ZXNbMF0sCisgICAgICAgICAgICAgKG5ld1J1bGUtPnJlcGxlbiA9IHJlcGxhY2UtPmxlbmd0aCkpOworICAgIH0gZWxzZSB7CisgICAgICBuZXdSdWxlLT5yZXBsZW4gPSAwOworICAgIH0KKworICAgIC8qbGluayBuZXcgcnVsZSBpbnRvIHRhYmxlLiovCisgICAgeworICAgICAgQ29udHJhY3Rpb25UYWJsZU9mZnNldCAqb2Zmc2V0QWRkcmVzczsKKworICAgICAgaWYgKG5ld1J1bGUtPmZpbmRsZW4gPT0gMSkgeworICAgICAgICBDb250cmFjdGlvblRhYmxlQ2hhcmFjdGVyICpjdGMgPSBnZXRDaGFyYWN0ZXJFbnRyeShuZXdSdWxlLT5maW5kcmVwWzBdLCBjdGQpOworICAgICAgICBpZiAoIWN0YykgcmV0dXJuIE5VTEw7CisKKyAgICAgICAgc3dpdGNoIChuZXdSdWxlLT5vcGNvZGUpIHsKKyAgICAgICAgICBjYXNlIENUT19SZXBlYXRhYmxlOgorICAgICAgICAgICAgaWYgKGN0Yy0+YWx3YXlzKSBicmVhazsKKyAgICAgICAgICAgIC8qIGZhbGwgdGhyb3VnaCAqLworICAgICAgICAgIGNhc2UgQ1RPX0Fsd2F5czoKKyAgICAgICAgICAgIGN0Yy0+YWx3YXlzID0gcnVsZU9mZnNldDsKKyAgICAgICAgICAgIC8qIGZhbGwgdGhyb3VnaCAqLworICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChpc3d1cHBlcihjdGMtPnZhbHVlKSkgeworICAgICAgICAgIGN0YyA9IGdldENoYXJhY3RlckVudHJ5KHRvd2xvd2VyKGN0Yy0+dmFsdWUpLCBjdGQpOworICAgICAgICAgIGlmICghY3RjKSByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorCisgICAgICAgIG9mZnNldEFkZHJlc3MgPSAmY3RjLT5ydWxlczsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIG9mZnNldEFkZHJlc3MgPSAmZ2V0Q29udHJhY3Rpb25UYWJsZUhlYWRlcihjdGQpLT5ydWxlc1tDVEgobmV3UnVsZS0+ZmluZHJlcCldOworICAgICAgfQorCisgICAgICB3aGlsZSAoKm9mZnNldEFkZHJlc3MpIHsKKyAgICAgICAgQ29udHJhY3Rpb25UYWJsZVJ1bGUgKmN1cnJlbnRSdWxlID0gZ2V0RGF0YUl0ZW0oY3RkLT5hcmVhLCAqb2Zmc2V0QWRkcmVzcyk7CisKKyAgICAgICAgaWYgKG5ld1J1bGUtPmZpbmRsZW4gPiBjdXJyZW50UnVsZS0+ZmluZGxlbikgYnJlYWs7CisKKyAgICAgICAgaWYgKG5ld1J1bGUtPmZpbmRsZW4gPT0gY3VycmVudFJ1bGUtPmZpbmRsZW4pIHsKKyAgICAgICAgICBpZiAoKG5ld1J1bGUtPm9wY29kZSA9PSBjdXJyZW50UnVsZS0+b3Bjb2RlKSAmJgorICAgICAgICAgICAgICAobmV3UnVsZS0+YWZ0ZXIgPT0gY3VycmVudFJ1bGUtPmFmdGVyKSAmJgorICAgICAgICAgICAgICAobmV3UnVsZS0+YmVmb3JlID09IGN1cnJlbnRSdWxlLT5iZWZvcmUpICYmCisgICAgICAgICAgICAgICh3bWVtY21wKG5ld1J1bGUtPmZpbmRyZXAsIGN1cnJlbnRSdWxlLT5maW5kcmVwLCBuZXdSdWxlLT5maW5kbGVuKSA9PSAwKSkKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgaWYgKChjdXJyZW50UnVsZS0+b3Bjb2RlID09IENUT19BbHdheXMpICYmIChuZXdSdWxlLT5vcGNvZGUgIT0gQ1RPX0Fsd2F5cykpCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIG9mZnNldEFkZHJlc3MgPSAmY3VycmVudFJ1bGUtPm5leHQ7CisgICAgICB9CisKKyAgICAgIG5ld1J1bGUtPm5leHQgPSAqb2Zmc2V0QWRkcmVzczsKKyAgICAgICpvZmZzZXRBZGRyZXNzID0gcnVsZU9mZnNldDsKKyAgICB9CisKKyAgICByZXR1cm4gbmV3UnVsZTsKKyAgfQorCisgIHJldHVybiBOVUxMOworfQorCitzdGF0aWMgQ29udHJhY3Rpb25UYWJsZVJ1bGUgKgorYWRkVGV4dFJ1bGUgKAorICBEYXRhRmlsZSAqZmlsZSwKKyAgQ29udHJhY3Rpb25UYWJsZU9wY29kZSBvcGNvZGUsCisgIGNvbnN0IERhdGFTdHJpbmcgKmZpbmQsCisgIGNvbnN0IERhdGFTdHJpbmcgKnJlcGxhY2UsCisgIENvbnRyYWN0aW9uVGFibGVDaGFyYWN0ZXJBdHRyaWJ1dGVzIGFmdGVyLAorICBDb250cmFjdGlvblRhYmxlQ2hhcmFjdGVyQXR0cmlidXRlcyBiZWZvcmUsCisgIENvbnRyYWN0aW9uVGFibGVEYXRhICpjdGQKKykgeworICBCeXRlT3BlcmFuZCB0ZXh0OworICB1bnNpZ25lZCBjaGFyICp0byA9IHRleHQuYnl0ZXM7CisgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnRvRW5kID0gdG8gKyBBUlJBWV9DT1VOVCh0ZXh0LmJ5dGVzKTsKKworICBjb25zdCB3Y2hhcl90ICpmcm9tID0gcmVwbGFjZS0+Y2hhcmFjdGVyczsKKyAgY29uc3Qgd2NoYXJfdCAqZnJvbUVuZCA9IGZyb20gKyByZXBsYWNlLT5sZW5ndGg7CisKKyAgd2hpbGUgKGZyb20gPCBmcm9tRW5kKSB7CisgICAgVXRmOEJ1ZmZlciBidWZmZXI7CisgICAgc2l6ZV90IGxlbmd0aCA9IGNvbnZlcnRXY2hhclRvVXRmOCgqZnJvbSsrLCBidWZmZXIpOworCisgICAgaWYgKGxlbmd0aCA+ICh0b0VuZCAtIHRvKSkgeworICAgICAgcmVwb3J0RGF0YUVycm9yKGZpbGUsICJyZXBsYWNlIHRleHQgdG9vIGxvbmciKTsKKyAgICAgIGJyZWFrOworICAgIH0KKworICAgIHRvID0gbWVtcGNweSh0bywgYnVmZmVyLCBsZW5ndGgpOworICB9CisKKyAgdGV4dC5sZW5ndGggPSB0byAtIHRleHQuYnl0ZXM7CisgIHJldHVybiBhZGRCeXRlUnVsZShmaWxlLCBvcGNvZGUsIGZpbmQsICZ0ZXh0LCBhZnRlciwgYmVmb3JlLCBjdGQpOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IENoYXJhY3RlckNsYXNzICoKK2ZpbmRDaGFyYWN0ZXJDbGFzcyAoY29uc3Qgd2NoYXJfdCAqbmFtZSwgaW50IGxlbmd0aCwgQ29udHJhY3Rpb25UYWJsZURhdGEgKmN0ZCkgeworICBjb25zdCBzdHJ1Y3QgQ2hhcmFjdGVyQ2xhc3MgKmNsYXNzID0gY3RkLT5jaGFyYWN0ZXJDbGFzc2VzOworCisgIHdoaWxlIChjbGFzcykgeworICAgIGlmIChsZW5ndGggPT0gY2xhc3MtPmxlbmd0aCkKKyAgICAgIGlmICh3bWVtY21wKG5hbWUsIGNsYXNzLT5uYW1lLCBsZW5ndGgpID09IDApCisgICAgICAgIHJldHVybiBjbGFzczsKKworICAgIGNsYXNzID0gY2xhc3MtPm5leHQ7CisgIH0KKworICByZXR1cm4gTlVMTDsKK30KKworc3RhdGljIHN0cnVjdCBDaGFyYWN0ZXJDbGFzcyAqCithZGRDaGFyYWN0ZXJDbGFzcyAoRGF0YUZpbGUgKmZpbGUsIGNvbnN0IHdjaGFyX3QgKm5hbWUsIGludCBsZW5ndGgsIENvbnRyYWN0aW9uVGFibGVEYXRhICpjdGQpIHsKKyAgc3RydWN0IENoYXJhY3RlckNsYXNzICpjbGFzczsKKworICBpZiAoY3RkLT5jaGFyYWN0ZXJDbGFzc0F0dHJpYnV0ZSkgeworICAgIGlmICgoY2xhc3MgPSBtYWxsb2Moc2l6ZW9mKCpjbGFzcykgKyAoKGxlbmd0aCAtIDEpICogc2l6ZW9mKGNsYXNzLT5uYW1lWzBdKSkpKSkgeworICAgICAgbWVtc2V0KGNsYXNzLCAwLCBzaXplb2YoKmNsYXNzKSk7CisgICAgICB3bWVtY3B5KGNsYXNzLT5uYW1lLCBuYW1lLCAoY2xhc3MtPmxlbmd0aCA9IGxlbmd0aCkpOworCisgICAgICBjbGFzcy0+YXR0cmlidXRlID0gY3RkLT5jaGFyYWN0ZXJDbGFzc0F0dHJpYnV0ZTsKKyAgICAgIGN0ZC0+Y2hhcmFjdGVyQ2xhc3NBdHRyaWJ1dGUgPDw9IDE7CisKKyAgICAgIGNsYXNzLT5uZXh0ID0gY3RkLT5jaGFyYWN0ZXJDbGFzc2VzOworICAgICAgY3RkLT5jaGFyYWN0ZXJDbGFzc2VzID0gY2xhc3M7CisgICAgICByZXR1cm4gY2xhc3M7CisgICAgfSBlbHNlIHsKKyAgICAgIGxvZ01hbGxvY0Vycm9yKCk7CisgICAgfQorICB9IGVsc2UgeworICAgIHJlcG9ydERhdGFFcnJvcihmaWxlLCAiY2hhcmFjdGVyIGNsYXNzIHRhYmxlIG92ZXJmbG93OiAlLioiIFBSSXdzLCBsZW5ndGgsIG5hbWUpOworICB9CisKKyAgcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBpbnQKK2dldENoYXJhY3RlckNsYXNzIChEYXRhRmlsZSAqZmlsZSwgY29uc3Qgc3RydWN0IENoYXJhY3RlckNsYXNzICoqY2xhc3MsIENvbnRyYWN0aW9uVGFibGVEYXRhICpjdGQpIHsKKyAgRGF0YU9wZXJhbmQgb3BlcmFuZDsKKworICBpZiAoZ2V0RGF0YU9wZXJhbmQoZmlsZSwgJm9wZXJhbmQsICJjaGFyYWN0ZXIgY2xhc3MgbmFtZSIpKSB7CisgICAgaWYgKCgqY2xhc3MgPSBmaW5kQ2hhcmFjdGVyQ2xhc3Mob3BlcmFuZC5jaGFyYWN0ZXJzLCBvcGVyYW5kLmxlbmd0aCwgY3RkKSkpIHJldHVybiAxOworICAgIHJlcG9ydERhdGFFcnJvcihmaWxlLCAiY2hhcmFjdGVyIGNsYXNzIG5vdCBkZWZpbmVkOiAlLioiIFBSSXdzLCBvcGVyYW5kLmxlbmd0aCwgb3BlcmFuZC5jaGFyYWN0ZXJzKTsKKyAgfQorCisgIHJldHVybiAwOworfQorCitzdGF0aWMgdm9pZAorZGVhbGxvY2F0ZUNoYXJhY3RlckNsYXNzZXMgKENvbnRyYWN0aW9uVGFibGVEYXRhICpjdGQpIHsKKyAgd2hpbGUgKGN0ZC0+Y2hhcmFjdGVyQ2xhc3NlcykgeworICAgIHN0cnVjdCBDaGFyYWN0ZXJDbGFzcyAqY2xhc3MgPSBjdGQtPmNoYXJhY3RlckNsYXNzZXM7CisgICAgY3RkLT5jaGFyYWN0ZXJDbGFzc2VzID0gY3RkLT5jaGFyYWN0ZXJDbGFzc2VzLT5uZXh0OworICAgIGZyZWUoY2xhc3MpOworICB9Cit9CisKK3N0YXRpYyBpbnQKK2FsbG9jYXRlQ2hhcmFjdGVyQ2xhc3NlcyAoQ29udHJhY3Rpb25UYWJsZURhdGEgKmN0ZCkgeworICBjb25zdCB3Y2hhcl90ICpjb25zdCAqbmFtZSA9IGNoYXJhY3RlckNsYXNzTmFtZXM7CisKKyAgd2hpbGUgKCpuYW1lKSB7CisgICAgaWYgKCFhZGRDaGFyYWN0ZXJDbGFzcyhOVUxMLCAqbmFtZSwgd2NzbGVuKCpuYW1lKSwgY3RkKSkgeworICAgICAgZGVhbGxvY2F0ZUNoYXJhY3RlckNsYXNzZXMoY3RkKTsKKyAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIG5hbWUgKz0gMTsKKyAgfQorCisgIHJldHVybiAxOworfQorCitjb25zdCB3Y2hhcl90ICoKK2dldENvbnRyYWN0aW9uVGFibGVPcGNvZGVOYW1lIChDb250cmFjdGlvblRhYmxlT3Bjb2RlIG9wY29kZSkgeworICBjb25zdCB3Y2hhcl90ICpuYW1lID0gTlVMTDsKKworICBpZiAob3Bjb2RlID49IDApIHsKKyAgICBpZiAob3Bjb2RlIDwgQVJSQVlfQ09VTlQob3Bjb2RlTmFtZXMpKSB7CisgICAgICBuYW1lID0gb3Bjb2RlTmFtZXNbb3Bjb2RlXTsKKyAgICB9CisgIH0KKworICBpZiAoIW5hbWUpIG5hbWUgPSBXU19DKCI8dW5rbm93bj4iKTsKKyAgcmV0dXJuIG5hbWU7Cit9CisKK3N0YXRpYyBDb250cmFjdGlvblRhYmxlT3Bjb2RlCitnZXRPcGNvZGUgKERhdGFGaWxlICpmaWxlLCBDb250cmFjdGlvblRhYmxlRGF0YSAqY3RkKSB7CisgIERhdGFPcGVyYW5kIG9wZXJhbmQ7CisKKyAgaWYgKGdldERhdGFPcGVyYW5kKGZpbGUsICZvcGVyYW5kLCAib3Bjb2RlIikpIHsKKyAgICBDb250cmFjdGlvblRhYmxlT3Bjb2RlIG9wY29kZTsKKworICAgIGZvciAob3Bjb2RlPTA7IG9wY29kZTxDVE9fTm9uZTsgb3Bjb2RlKz0xKQorICAgICAgaWYgKG9wZXJhbmQubGVuZ3RoID09IGN0ZC0+b3Bjb2RlTmFtZUxlbmd0aHNbb3Bjb2RlXSkKKyAgICAgICAgaWYgKHdtZW1jbXAob3BlcmFuZC5jaGFyYWN0ZXJzLCBvcGNvZGVOYW1lc1tvcGNvZGVdLCBvcGVyYW5kLmxlbmd0aCkgPT0gMCkKKyAgICAgICAgICByZXR1cm4gb3Bjb2RlOworCisgICAgcmVwb3J0RGF0YUVycm9yKGZpbGUsICJvcGNvZGUgbm90IGRlZmluZWQ6ICUuKiIgUFJJd3MsIG9wZXJhbmQubGVuZ3RoLCBvcGVyYW5kLmNoYXJhY3RlcnMpOworICB9CisKKyAgcmV0dXJuIENUT19Ob25lOworfQorCitzdGF0aWMgaW50CitzYXZlQ2VsbHNPcGVyYW5kIChEYXRhRmlsZSAqZmlsZSwgRGF0YU9mZnNldCAqb2Zmc2V0LCBjb25zdCBCeXRlT3BlcmFuZCAqc2VxdWVuY2UsIENvbnRyYWN0aW9uVGFibGVEYXRhICpjdGQpIHsKKyAgaWYgKGFsbG9jYXRlRGF0YUl0ZW0oY3RkLT5hcmVhLCBvZmZzZXQsIHNlcXVlbmNlLT5sZW5ndGgrMSwgX19hbGlnbm9mX18oQllURSkpKSB7CisgICAgQllURSAqYWRkcmVzcyA9IGdldERhdGFJdGVtKGN0ZC0+YXJlYSwgKm9mZnNldCk7CisgICAgbWVtY3B5KGFkZHJlc3MrMSwgc2VxdWVuY2UtPmJ5dGVzLCAoKmFkZHJlc3MgPSBzZXF1ZW5jZS0+bGVuZ3RoKSk7CisgICAgcmV0dXJuIDE7CisgIH0KKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK2dldFJlcGxhY2VQYXR0ZXJuIChEYXRhRmlsZSAqZmlsZSwgQnl0ZU9wZXJhbmQgKnJlcGxhY2UpIHsKKyAgRGF0YU9wZXJhbmQgb3BlcmFuZDsKKworICBpZiAoZ2V0RGF0YU9wZXJhbmQoZmlsZSwgJm9wZXJhbmQsICJyZXBsYWNlbWVudCBwYXR0ZXJuIikpIHsKKyAgICBpZiAoKG9wZXJhbmQubGVuZ3RoID09IDEpICYmIChvcGVyYW5kLmNoYXJhY3RlcnNbMF0gPT0gV0NfQygnPScpKSkgeworICAgICAgcmVwbGFjZS0+bGVuZ3RoID0gMDsKKyAgICAgIHJldHVybiAxOworICAgIH0KKworICAgIGlmIChwYXJzZUNlbGxzT3BlcmFuZChmaWxlLCByZXBsYWNlLCBvcGVyYW5kLmNoYXJhY3RlcnMsIG9wZXJhbmQubGVuZ3RoKSkgcmV0dXJuIDE7CisgIH0KKworICByZXR1cm4gMDsKK30KKworc3RhdGljIGludAorZ2V0RmluZFRleHQgKERhdGFGaWxlICpmaWxlLCBEYXRhU3RyaW5nICpmaW5kKSB7CisgIHJldHVybiBnZXREYXRhU3RyaW5nKGZpbGUsIGZpbmQsIDAsICJmaW5kIHRleHQiKTsKK30KKworc3RhdGljIGludAorZ2V0UmVwbGFjZVRleHQgKERhdGFGaWxlICpmaWxlLCBEYXRhU3RyaW5nICpyZXBsYWNlKSB7CisgIHJldHVybiBnZXREYXRhU3RyaW5nKGZpbGUsIHJlcGxhY2UsIDAsICJyZXBsYWNlIHRleHQiKTsKK30KKworc3RhdGljIERBVEFfT1BFUkFORFNfUFJPQ0VTU09SKHByb2Nlc3NDb250cmFjdGlvblRhYmxlRGlyZWN0aXZlKSB7CisgIENvbnRyYWN0aW9uVGFibGVEYXRhICpjdGQgPSBkYXRhOworCisgIENvbnRyYWN0aW9uVGFibGVDaGFyYWN0ZXJBdHRyaWJ1dGVzIGFmdGVyID0gMDsKKyAgQ29udHJhY3Rpb25UYWJsZUNoYXJhY3RlckF0dHJpYnV0ZXMgYmVmb3JlID0gMDsKKworICB3aGlsZSAoMSkgeworICAgIENvbnRyYWN0aW9uVGFibGVPcGNvZGUgb3Bjb2RlOworCisgICAgc3dpdGNoICgob3Bjb2RlID0gZ2V0T3Bjb2RlKGZpbGUsIGN0ZCkpKSB7CisgICAgICBjYXNlIENUT19Ob25lOgorICAgICAgICBicmVhazsKKworICAgICAgY2FzZSBDVE9fQWx3YXlzOgorICAgICAgY2FzZSBDVE9fTGFyZ2VTaWduOgorICAgICAgY2FzZSBDVE9fTGFzdExhcmdlU2lnbjoKKyAgICAgIGNhc2UgQ1RPX1dob2xlV29yZDoKKyAgICAgIGNhc2UgQ1RPX0pvaW5lZFdvcmQ6CisgICAgICBjYXNlIENUT19Mb3dXb3JkOgorICAgICAgY2FzZSBDVE9fU3VmZml4YWJsZVdvcmQ6CisgICAgICBjYXNlIENUT19QcmVmaXhhYmxlV29yZDoKKyAgICAgIGNhc2UgQ1RPX0JlZ1dvcmQ6CisgICAgICBjYXNlIENUT19CZWdNaWRXb3JkOgorICAgICAgY2FzZSBDVE9fTWlkV29yZDoKKyAgICAgIGNhc2UgQ1RPX01pZEVuZFdvcmQ6CisgICAgICBjYXNlIENUT19FbmRXb3JkOgorICAgICAgY2FzZSBDVE9fUHJlUHVuYzoKKyAgICAgIGNhc2UgQ1RPX1Bvc3RQdW5jOgorICAgICAgY2FzZSBDVE9fQmVnTnVtOgorICAgICAgY2FzZSBDVE9fTWlkTnVtOgorICAgICAgY2FzZSBDVE9fRW5kTnVtOgorICAgICAgY2FzZSBDVE9fUmVwZWF0YWJsZTogeworICAgICAgICBEYXRhU3RyaW5nIGZpbmQ7CisgICAgICAgIEJ5dGVPcGVyYW5kIHJlcGxhY2U7CisKKyAgICAgICAgaWYgKGdldEZpbmRUZXh0KGZpbGUsICZmaW5kKSkKKyAgICAgICAgICBpZiAoZ2V0UmVwbGFjZVBhdHRlcm4oZmlsZSwgJnJlcGxhY2UpKQorICAgICAgICAgICAgaWYgKCFhZGRCeXRlUnVsZShmaWxlLCBvcGNvZGUsICZmaW5kLCAmcmVwbGFjZSwgYWZ0ZXIsIGJlZm9yZSwgY3RkKSkKKyAgICAgICAgICAgICAgcmV0dXJuIDA7CisKKyAgICAgICAgYnJlYWs7CisgICAgICB9CisKKyAgICAgIGNhc2UgQ1RPX0NvbnRyYWN0aW9uOgorICAgICAgY2FzZSBDVE9fTGl0ZXJhbDogeworICAgICAgICBEYXRhU3RyaW5nIGZpbmQ7CisgICAgICAgIGlmIChnZXRGaW5kVGV4dChmaWxlLCAmZmluZCkpCisgICAgICAgICAgaWYgKCFhZGRCeXRlUnVsZShmaWxlLCBvcGNvZGUsICZmaW5kLCBOVUxMLCBhZnRlciwgYmVmb3JlLCBjdGQpKQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIGJyZWFrOworICAgICAgfQorCisgICAgICBjYXNlIENUT19DYXBpdGFsU2lnbjogeworICAgICAgICBCeXRlT3BlcmFuZCBjZWxsczsKKyAgICAgICAgaWYgKGdldENlbGxzT3BlcmFuZChmaWxlLCAmY2VsbHMsICJjYXBpdGFsIHNpZ24iKSkgeworICAgICAgICAgIERhdGFPZmZzZXQgb2Zmc2V0OworICAgICAgICAgIGlmICghc2F2ZUNlbGxzT3BlcmFuZChmaWxlLCAmb2Zmc2V0LCAmY2VsbHMsIGN0ZCkpIHJldHVybiAwOworICAgICAgICAgIGdldENvbnRyYWN0aW9uVGFibGVIZWFkZXIoY3RkKS0+Y2FwaXRhbFNpZ24gPSBvZmZzZXQ7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgICB9CisKKyAgICAgIGNhc2UgQ1RPX0JlZ2luQ2FwaXRhbFNpZ246IHsKKyAgICAgICAgQnl0ZU9wZXJhbmQgY2VsbHM7CisgICAgICAgIGlmIChnZXRDZWxsc09wZXJhbmQoZmlsZSwgJmNlbGxzLCAiYmVnaW4gY2FwaXRhbCBzaWduIikpIHsKKyAgICAgICAgICBEYXRhT2Zmc2V0IG9mZnNldDsKKyAgICAgICAgICBpZiAoIXNhdmVDZWxsc09wZXJhbmQoZmlsZSwgJm9mZnNldCwgJmNlbGxzLCBjdGQpKSByZXR1cm4gMDsKKyAgICAgICAgICBnZXRDb250cmFjdGlvblRhYmxlSGVhZGVyKGN0ZCktPmJlZ2luQ2FwaXRhbFNpZ24gPSBvZmZzZXQ7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgICB9CisKKyAgICAgIGNhc2UgQ1RPX0VuZENhcGl0YWxTaWduOiB7CisgICAgICAgIEJ5dGVPcGVyYW5kIGNlbGxzOworICAgICAgICBpZiAoZ2V0Q2VsbHNPcGVyYW5kKGZpbGUsICZjZWxscywgImVuZCBjYXBpdGFsIHNpZ24iKSkgeworICAgICAgICAgIERhdGFPZmZzZXQgb2Zmc2V0OworICAgICAgICAgIGlmICghc2F2ZUNlbGxzT3BlcmFuZChmaWxlLCAmb2Zmc2V0LCAmY2VsbHMsIGN0ZCkpIHJldHVybiAwOworICAgICAgICAgIGdldENvbnRyYWN0aW9uVGFibGVIZWFkZXIoY3RkKS0+ZW5kQ2FwaXRhbFNpZ24gPSBvZmZzZXQ7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgICB9CisKKyAgICAgIGNhc2UgQ1RPX0xldHRlclNpZ246IHsKKyAgICAgICAgQnl0ZU9wZXJhbmQgY2VsbHM7CisgICAgICAgIGlmIChnZXRDZWxsc09wZXJhbmQoZmlsZSwgJmNlbGxzLCAibGV0dGVyIHNpZ24iKSkgeworICAgICAgICAgIERhdGFPZmZzZXQgb2Zmc2V0OworICAgICAgICAgIGlmICghc2F2ZUNlbGxzT3BlcmFuZChmaWxlLCAmb2Zmc2V0LCAmY2VsbHMsIGN0ZCkpIHJldHVybiAwOworICAgICAgICAgIGdldENvbnRyYWN0aW9uVGFibGVIZWFkZXIoY3RkKS0+bGV0dGVyU2lnbiA9IG9mZnNldDsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICAgIH0KKworICAgICAgY2FzZSBDVE9fTnVtYmVyU2lnbjogeworICAgICAgICBCeXRlT3BlcmFuZCBjZWxsczsKKyAgICAgICAgaWYgKGdldENlbGxzT3BlcmFuZChmaWxlLCAmY2VsbHMsICJudW1iZXIgc2lnbiIpKSB7CisgICAgICAgICAgRGF0YU9mZnNldCBvZmZzZXQ7CisgICAgICAgICAgaWYgKCFzYXZlQ2VsbHNPcGVyYW5kKGZpbGUsICZvZmZzZXQsICZjZWxscywgY3RkKSkgcmV0dXJuIDA7CisgICAgICAgICAgZ2V0Q29udHJhY3Rpb25UYWJsZUhlYWRlcihjdGQpLT5udW1iZXJTaWduID0gb2Zmc2V0OworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgICAgfQorCisgICAgICBjYXNlIENUT19DbGFzczogeworICAgICAgICBEYXRhT3BlcmFuZCBuYW1lOworCisgICAgICAgIGlmIChnZXREYXRhT3BlcmFuZChmaWxlLCAmbmFtZSwgImNoYXJhY3RlciBjbGFzcyBuYW1lIikpIHsKKyAgICAgICAgICBjb25zdCBzdHJ1Y3QgQ2hhcmFjdGVyQ2xhc3MgKmNsYXNzOworCisgICAgICAgICAgaWYgKChjbGFzcyA9IGZpbmRDaGFyYWN0ZXJDbGFzcyhuYW1lLmNoYXJhY3RlcnMsIG5hbWUubGVuZ3RoLCBjdGQpKSkgeworICAgICAgICAgICAgcmVwb3J0RGF0YUVycm9yKGZpbGUsICJjaGFyYWN0ZXIgY2xhc3MgYWxyZWFkeSBkZWZpbmVkOiAlLioiIFBSSXdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUubGVuZ3RoLCBuYW1lLmNoYXJhY3RlcnMpOworICAgICAgICAgIH0gZWxzZSBpZiAoKGNsYXNzID0gYWRkQ2hhcmFjdGVyQ2xhc3MoZmlsZSwgbmFtZS5jaGFyYWN0ZXJzLCBuYW1lLmxlbmd0aCwgY3RkKSkpIHsKKyAgICAgICAgICAgIERhdGFTdHJpbmcgY2hhcmFjdGVyczsKKworICAgICAgICAgICAgaWYgKGdldERhdGFTdHJpbmcoZmlsZSwgJmNoYXJhY3RlcnMsIDAsICJjaGFyYWN0ZXJzIikpIHsKKyAgICAgICAgICAgICAgZm9yIChpbnQgaW5kZXg9MDsgaW5kZXg8Y2hhcmFjdGVycy5sZW5ndGg7IGluZGV4Kz0xKSB7CisgICAgICAgICAgICAgICAgd2NoYXJfdCBjaGFyYWN0ZXIgPSBjaGFyYWN0ZXJzLmNoYXJhY3RlcnNbaW5kZXhdOworICAgICAgICAgICAgICAgIENvbnRyYWN0aW9uVGFibGVDaGFyYWN0ZXIgKmVudHJ5ID0gZ2V0Q2hhcmFjdGVyRW50cnkoY2hhcmFjdGVyLCBjdGQpOworICAgICAgICAgICAgICAgIGlmICghZW50cnkpIHJldHVybiAwOworICAgICAgICAgICAgICAgIGVudHJ5LT5hdHRyaWJ1dGVzIHw9IGNsYXNzLT5hdHRyaWJ1dGU7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBicmVhazsKKyAgICAgIH0KKworICAgICAgeworICAgICAgICBDb250cmFjdGlvblRhYmxlQ2hhcmFjdGVyQXR0cmlidXRlcyAqYXR0cmlidXRlczsKKyAgICAgICAgY29uc3Qgc3RydWN0IENoYXJhY3RlckNsYXNzICpjbGFzczsKKworICAgICAgY2FzZSBDVE9fQWZ0ZXI6CisgICAgICAgIGF0dHJpYnV0ZXMgPSAmYWZ0ZXI7CisgICAgICAgIGdvdG8gZG9DbGFzczsKKyAgICAgIGNhc2UgQ1RPX0JlZm9yZToKKyAgICAgICAgYXR0cmlidXRlcyA9ICZiZWZvcmU7CisgICAgICBkb0NsYXNzOgorCisgICAgICAgIGlmIChnZXRDaGFyYWN0ZXJDbGFzcyhmaWxlLCAmY2xhc3MsIGN0ZCkpIHsKKyAgICAgICAgICAqYXR0cmlidXRlcyB8PSBjbGFzcy0+YXR0cmlidXRlOworICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgICAgfQorCisgICAgICBjYXNlIENUT19SZXBsYWNlOiB7CisgICAgICAgIERhdGFTdHJpbmcgZmluZDsKKyAgICAgICAgRGF0YVN0cmluZyByZXBsYWNlOworCisgICAgICAgIGlmIChnZXRGaW5kVGV4dChmaWxlLCAmZmluZCkpCisgICAgICAgICAgaWYgKGdldFJlcGxhY2VUZXh0KGZpbGUsICZyZXBsYWNlKSkKKyAgICAgICAgICAgIGlmICghYWRkVGV4dFJ1bGUoZmlsZSwgb3Bjb2RlLCAmZmluZCwgJnJlcGxhY2UsIGFmdGVyLCBiZWZvcmUsIGN0ZCkpCisgICAgICAgICAgICAgIHJldHVybiAwOworCisgICAgICAgIGJyZWFrOworICAgICAgfQorCisgICAgICBkZWZhdWx0OgorICAgICAgICByZXBvcnREYXRhRXJyb3IoZmlsZSwgInVuaW1wbGVtZW50ZWQgb3Bjb2RlOiAlIiBQUkl3cywgZ2V0Q29udHJhY3Rpb25UYWJsZU9wY29kZU5hbWUob3Bjb2RlKSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIHJldHVybiAxOworICB9Cit9CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgRGF0YUZpbGUgKmZpbGU7CisgIENvbnRyYWN0aW9uVGFibGVEYXRhICpjdGQ7Cit9IEFubm90YXRpb25IYW5kbGVyRGF0YTsKKworc3RhdGljIENMRFJfQU5OT1RBVElPTl9IQU5ETEVSKGhhbmRsZUFubm90YXRpb24pIHsKKyAgY29uc3QgQW5ub3RhdGlvbkhhbmRsZXJEYXRhICphaGQgPSBwYXJhbWV0ZXJzLT5kYXRhOworICBEYXRhRmlsZSAqZmlsZSA9IGFoZC0+ZmlsZTsKKyAgQ29udHJhY3Rpb25UYWJsZURhdGEgKmN0ZCA9IGFoZC0+Y3RkOworCisgIERhdGFTdHJpbmcgZmluZDsKKyAgY29uc3QgY2hhciAqZmluZFVURjggPSBwYXJhbWV0ZXJzLT5zZXF1ZW5jZTsKKyAgc2l6ZV90IGZpbmRTaXplID0gc3RybGVuKGZpbmRVVEY4KSArIDE7CisgIHdjaGFyX3QgZmluZENoYXJhY3RlcnNbZmluZFNpemVdOworICB7CisgICAgY29uc3QgY2hhciAqYnl0ZSA9IGZpbmRVVEY4OworICAgIHdjaGFyX3QgKmNoYXJhY3RlciA9IGZpbmRDaGFyYWN0ZXJzOworICAgIGNvbnZlcnRVdGY4VG9XY2hhcnMoJmJ5dGUsICZjaGFyYWN0ZXIsIGZpbmRTaXplKTsKKyAgICBzaXplX3QgbGVuZ3RoID0gY2hhcmFjdGVyIC0gZmluZENoYXJhY3RlcnM7CisgICAgaWYgKCFpc0Vtb2ppU2VxdWVuY2UoZmluZENoYXJhY3RlcnMsIGxlbmd0aCkpIHJldHVybiAxOworCisgICAgaWYgKGxlbmd0aCA+IEFSUkFZX0NPVU5UKGZpbmQuY2hhcmFjdGVycykpIHsKKyAgICAgIHJlcG9ydERhdGFFcnJvcihmaWxlLCAiQ0xEUiBzZXF1ZW5jZSB0b28gbG9uZyIpOworICAgICAgcmV0dXJuIDE7CisgICAgfQorCisgICAgd21lbWNweShmaW5kLmNoYXJhY3RlcnMsIGZpbmRDaGFyYWN0ZXJzLCAoZmluZC5sZW5ndGggPSBsZW5ndGgpKTsKKyAgfQorCisgIEJ5dGVPcGVyYW5kIHJlcGxhY2U7CisgIHsKKyAgICBjb25zdCBjaGFyICpzdHJpbmcgPSBwYXJhbWV0ZXJzLT5uYW1lOworICAgIHNpemVfdCBsZW5ndGggPSBzdHJsZW4oc3RyaW5nKTsKKyAgICBzaXplX3Qgc2l6ZSA9IHNpemVvZihyZXBsYWNlLmJ5dGVzKTsKKworICAgIGlmIChsZW5ndGggPiBzaXplKSB7CisgICAgICByZXBvcnREYXRhRXJyb3IoZmlsZSwgIkNMRFIgbmFtZSB0b28gbG9uZyIpOworICAgICAgcmV0dXJuIDE7CisgICAgfQorCisgICAgbWVtY3B5KHJlcGxhY2UuYnl0ZXMsIHN0cmluZywgKHJlcGxhY2UubGVuZ3RoID0gbGVuZ3RoKSk7CisgIH0KKworICByZXR1cm4gISFhZGRCeXRlUnVsZShmaWxlLCBDVE9fUmVwbGFjZSwgJmZpbmQsICZyZXBsYWNlLCAwLCAwLCBjdGQpOworfQorCitzdGF0aWMgREFUQV9PUEVSQU5EU19QUk9DRVNTT1IocHJvY2Vzc0Vtb2ppT3BlcmFuZHMpIHsKKyAgQ29udHJhY3Rpb25UYWJsZURhdGEgKmN0ZCA9IGRhdGE7CisgIERhdGFPcGVyYW5kIG9wZXJhbmQ7CisKKyAgaWYgKGdldERhdGFPcGVyYW5kKGZpbGUsICZvcGVyYW5kLCAiQ0xEUiBhbm5vdGF0aW9ucyBmaWxlIG5hbWUvcGF0aCIpKSB7CisgICAgY2hhciAqbmFtZSA9IGdldFV0ZjhGcm9tV2NoYXJzKG9wZXJhbmQuY2hhcmFjdGVycywgb3BlcmFuZC5sZW5ndGgsIE5VTEwpOworCisgICAgaWYgKG5hbWUpIHsKKyAgICAgIEFubm90YXRpb25IYW5kbGVyRGF0YSBhaGQgPSB7CisgICAgICAgIC5maWxlID0gZmlsZSwKKyAgICAgICAgLmN0ZCA9IGN0ZAorICAgICAgfTsKKworICAgICAgaWYgKCFjbGRyUGFyc2VGaWxlKG5hbWUsIGhhbmRsZUFubm90YXRpb24sICZhaGQpKSB7CisgICAgICAgIGxvZ01lc3NhZ2UoTE9HX1dBUk5JTkcsICJlbW9qaSBzdWJzdGl0dXRpaW9uIHdvbid0IGJlIHBlcmZvcm1lZCIpOworICAgICAgfQorCisgICAgICBmcmVlKG5hbWUpOworICAgIH0KKyAgfQorCisgIHJldHVybiAxOworfQorCitzdGF0aWMgREFUQV9PUEVSQU5EU19QUk9DRVNTT1IocHJvY2Vzc0NvbnRyYWN0aW9uVGFibGVPcGVyYW5kcykgeworICBCRUdJTl9EQVRBX0RJUkVDVElWRV9UQUJMRQorICAgIERBVEFfTkVTVElOR19ESVJFQ1RJVkVTLAorICAgIHsubmFtZT1XU19DKCJlbW9qaSIpLCAucHJvY2Vzc29yPXByb2Nlc3NFbW9qaU9wZXJhbmRzfSwKKyAgICB7Lm5hbWU9TlVMTCwgLnByb2Nlc3Nvcj1wcm9jZXNzQ29udHJhY3Rpb25UYWJsZURpcmVjdGl2ZX0sCisgIEVORF9EQVRBX0RJUkVDVElWRV9UQUJMRQorCisgIHJldHVybiBwcm9jZXNzRGlyZWN0aXZlT3BlcmFuZChmaWxlLCAmZGlyZWN0aXZlcywgImNvbnRyYWN0aW9uIHRhYmxlIGRpcmVjdGl2ZSIsIGRhdGEpOworfQorCitzdGF0aWMgdm9pZAoraW5pdGlhbGl6ZUNvbW1vbkZpZWxkcyAoQ29udHJhY3Rpb25UYWJsZSAqdGFibGUpIHsKKyAgdGFibGUtPmNoYXJhY3RlcnMuYXJyYXkgPSBOVUxMOworICB0YWJsZS0+Y2hhcmFjdGVycy5zaXplID0gMDsKKyAgdGFibGUtPmNoYXJhY3RlcnMuY291bnQgPSAwOworCisgIHRhYmxlLT5ydWxlcy5hcnJheSA9IE5VTEw7CisgIHRhYmxlLT5ydWxlcy5zaXplID0gMDsKKyAgdGFibGUtPnJ1bGVzLmNvdW50ID0gMDsKK30KKworc3RhdGljIHZvaWQKK2Rlc3Ryb3lDb21tb25GaWVsZHMgKENvbnRyYWN0aW9uVGFibGUgKnRhYmxlKSB7CisgIGlmICh0YWJsZS0+Y2hhcmFjdGVycy5hcnJheSkgeworICAgIGZyZWUodGFibGUtPmNoYXJhY3RlcnMuYXJyYXkpOworICAgIHRhYmxlLT5jaGFyYWN0ZXJzLmFycmF5ID0gTlVMTDsKKyAgfQorCisgIGlmICh0YWJsZS0+cnVsZXMuYXJyYXkpIHsKKyAgICB7CisgICAgICBDb250cmFjdGlvblRhYmxlUnVsZSAqKnJ1bGUgPSB0YWJsZS0+cnVsZXMuYXJyYXk7CisgICAgICBDb250cmFjdGlvblRhYmxlUnVsZSAqKmVuZCA9IHJ1bGUgKyB0YWJsZS0+cnVsZXMuY291bnQ7CisgICAgICB3aGlsZSAocnVsZSA8IGVuZCkgZnJlZSgqcnVsZSsrKTsKKyAgICB9CisKKyAgICBmcmVlKHRhYmxlLT5ydWxlcy5hcnJheSk7CisgICAgdGFibGUtPnJ1bGVzLmFycmF5ID0gTlVMTDsKKyAgfQorfQorCitzdGF0aWMgdm9pZAorZGVzdHJveUNvbnRyYWN0aW9uVGFibGVfbmF0aXZlIChDb250cmFjdGlvblRhYmxlICp0YWJsZSkgeworICBkZXN0cm95Q29tbW9uRmllbGRzKHRhYmxlKTsKKworICBpZiAodGFibGUtPmRhdGEuaW50ZXJuYWwuc2l6ZSkgeworICAgIGZyZWUodGFibGUtPmRhdGEuaW50ZXJuYWwuaGVhZGVyLmZpZWxkcyk7CisgICAgZnJlZSh0YWJsZSk7CisgIH0KK30KKworc3RhdGljIGNvbnN0IENvbnRyYWN0aW9uVGFibGVNYW5hZ2VtZW50TWV0aG9kcyBuYXRpdmVNYW5hZ2VtZW50TWV0aG9kcyA9IHsKKyAgLmRlc3Ryb3kgPSBkZXN0cm95Q29udHJhY3Rpb25UYWJsZV9uYXRpdmUKK307CisKK3N0YXRpYyBDb250cmFjdGlvblRhYmxlICoKK25ld0NvbnRyYWN0aW9uVGFibGUgKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ5dGVzLCBzaXplX3Qgc2l6ZSkgeworICBDb250cmFjdGlvblRhYmxlICp0YWJsZTsKKworICBpZiAoKHRhYmxlID0gbWFsbG9jKHNpemVvZigqdGFibGUpKSkpIHsKKyAgICB0YWJsZS0+bWFuYWdlbWVudE1ldGhvZHMgPSAmbmF0aXZlTWFuYWdlbWVudE1ldGhvZHM7CisgICAgdGFibGUtPnRyYW5zbGF0aW9uTWV0aG9kcyA9IGdldENvbnRyYWN0aW9uVGFibGVUcmFuc2xhdGlvbk1ldGhvZHNfbmF0aXZlKCk7CisgICAgaW5pdGlhbGl6ZUNvbW1vbkZpZWxkcyh0YWJsZSk7CisKKyAgICB0YWJsZS0+ZGF0YS5pbnRlcm5hbC5oZWFkZXIuYnl0ZXMgPSBieXRlczsKKyAgICB0YWJsZS0+ZGF0YS5pbnRlcm5hbC5zaXplID0gc2l6ZTsKKyAgfSBlbHNlIHsKKyAgICBsb2dNYWxsb2NFcnJvcigpOworICB9CisKKyAgcmV0dXJuIHRhYmxlOworfQorCitzdGF0aWMgQ29udHJhY3Rpb25UYWJsZSAqCitjb21waWxlQ29udHJhY3Rpb25UYWJsZV9uYXRpdmUgKGNvbnN0IGNoYXIgKm5hbWUpIHsKKyAgQ29udHJhY3Rpb25UYWJsZSAqdGFibGUgPSBOVUxMOworCisgIGlmIChzZXRUYWJsZURhdGFWYXJpYWJsZXMoQ09OVFJBQ1RJT05fVEFCTEVfRVhURU5TSU9OLCBDT05UUkFDVElPTl9TVUJUQUJMRV9FWFRFTlNJT04pKSB7CisgICAgQ29udHJhY3Rpb25UYWJsZURhdGEgY3RkOworICAgIG1lbXNldCgmY3RkLCAwLCBzaXplb2YoY3RkKSk7CisKKyAgICBjdGQuY2hhcmFjdGVyVGFibGUgPSBOVUxMOworICAgIGN0ZC5jaGFyYWN0ZXJUYWJsZVNpemUgPSAwOworICAgIGN0ZC5jaGFyYWN0ZXJFbnRyeUNvdW50ID0gMDsKKworICAgIGN0ZC5jaGFyYWN0ZXJDbGFzc2VzID0gTlVMTDsKKyAgICBjdGQuY2hhcmFjdGVyQ2xhc3NBdHRyaWJ1dGUgPSAxOworCisgICAgeworICAgICAgQ29udHJhY3Rpb25UYWJsZU9wY29kZSBvcGNvZGU7CisKKyAgICAgIGZvciAob3Bjb2RlPTA7IG9wY29kZTxDVE9fTm9uZTsgb3Bjb2RlKz0xKQorICAgICAgICBjdGQub3Bjb2RlTmFtZUxlbmd0aHNbb3Bjb2RlXSA9IHdjc2xlbihvcGNvZGVOYW1lc1tvcGNvZGVdKTsKKyAgICB9CisKKyAgICBpZiAoYWxsb2NhdGVDaGFyYWN0ZXJDbGFzc2VzKCZjdGQpKSB7CisgICAgICBpZiAoKm5hbWUpIHsKKyAgICAgICAgaWYgKChjdGQuYXJlYSA9IG5ld0RhdGFBcmVhKCkpKSB7CisgICAgICAgICAgaWYgKGFsbG9jYXRlRGF0YUl0ZW0oY3RkLmFyZWEsIE5VTEwsIHNpemVvZihDb250cmFjdGlvblRhYmxlSGVhZGVyKSwgX19hbGlnbm9mX18oQ29udHJhY3Rpb25UYWJsZUhlYWRlcikpKSB7CisgICAgICAgICAgICBjb25zdCBEYXRhRmlsZVBhcmFtZXRlcnMgcGFyYW1ldGVycyA9IHsKKyAgICAgICAgICAgICAgLnByb2Nlc3NPcGVyYW5kcyA9IHByb2Nlc3NDb250cmFjdGlvblRhYmxlT3BlcmFuZHMsCisgICAgICAgICAgICAgIC5kYXRhID0gJmN0ZAorICAgICAgICAgICAgfTsKKworICAgICAgICAgICAgaWYgKHByb2Nlc3NEYXRhRmlsZShuYW1lLCAmcGFyYW1ldGVycykpIHsKKyAgICAgICAgICAgICAgaWYgKHNhdmVDaGFyYWN0ZXJUYWJsZSgmY3RkKSkgeworICAgICAgICAgICAgICAgIHRhYmxlID0gbmV3Q29udHJhY3Rpb25UYWJsZShnZXREYXRhSXRlbShjdGQuYXJlYSwgMCksIGdldERhdGFTaXplKGN0ZC5hcmVhKSk7CisgICAgICAgICAgICAgICAgcmVzZXREYXRhQXJlYShjdGQuYXJlYSk7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9CisKKyAgICAgICAgICBkZXN0cm95RGF0YUFyZWEoY3RkLmFyZWEpOworICAgICAgICB9CisgICAgICB9IGVsc2UgeworICAgICAgICB0YWJsZSA9IG5ld0NvbnRyYWN0aW9uVGFibGUoZ2V0SW50ZXJuYWxDb250cmFjdGlvblRhYmxlQnl0ZXMoKSwgMCk7CisgICAgICB9CisKKyAgICAgIGRlYWxsb2NhdGVDaGFyYWN0ZXJDbGFzc2VzKCZjdGQpOworICAgIH0KKworICAgIGlmIChjdGQuY2hhcmFjdGVyVGFibGUpIGZyZWUoY3RkLmNoYXJhY3RlclRhYmxlKTsKKyAgfQorCisgIHJldHVybiB0YWJsZTsKK30KKworaW50CitzdGFydENvbnRyYWN0aW9uQ29tbWFuZCAoQ29udHJhY3Rpb25UYWJsZSAqdGFibGUpIHsKKyAgaWYgKCF0YWJsZS0+ZGF0YS5leHRlcm5hbC5jb21tYW5kU3RhcnRlZCkgeworICAgIGNvbnN0IGNoYXIgKmNvbW1hbmRbXSA9IHt0YWJsZS0+ZGF0YS5leHRlcm5hbC5jb21tYW5kLCBOVUxMfTsKKyAgICBIb3N0Q29tbWFuZE9wdGlvbnMgb3B0aW9uczsKKworICAgIGluaXRpYWxpemVIb3N0Q29tbWFuZE9wdGlvbnMoJm9wdGlvbnMpOworICAgIG9wdGlvbnMuYXN5bmNocm9ub3VzID0gMTsKKyAgICBvcHRpb25zLnN0YW5kYXJkSW5wdXQgPSAmdGFibGUtPmRhdGEuZXh0ZXJuYWwuc3RhbmRhcmRJbnB1dDsKKyAgICBvcHRpb25zLnN0YW5kYXJkT3V0cHV0ID0gJnRhYmxlLT5kYXRhLmV4dGVybmFsLnN0YW5kYXJkT3V0cHV0OworCisgICAgbG9nTWVzc2FnZShMT0dfREVCVUcsICJzdGFydGluZyBleHRlcm5hbCBjb250cmFjdGlvbiB0YWJsZTogJXMiLCB0YWJsZS0+ZGF0YS5leHRlcm5hbC5jb21tYW5kKTsKKyAgICBpZiAocnVuSG9zdENvbW1hbmQoY29tbWFuZCwgJm9wdGlvbnMpICE9IDApIHJldHVybiAwOworICAgIGxvZ01lc3NhZ2UoTE9HX0RFQlVHLCAiZXh0ZXJuYWwgY29udHJhY3Rpb24gdGFibGUgc3RhcnRlZDogJXMiLCB0YWJsZS0+ZGF0YS5leHRlcm5hbC5jb21tYW5kKTsKKworICAgIHRhYmxlLT5kYXRhLmV4dGVybmFsLmNvbW1hbmRTdGFydGVkID0gMTsKKyAgfQorCisgIHJldHVybiAxOworfQorCit2b2lkCitzdG9wQ29udHJhY3Rpb25Db21tYW5kIChDb250cmFjdGlvblRhYmxlICp0YWJsZSkgeworICBpZiAodGFibGUtPmRhdGEuZXh0ZXJuYWwuY29tbWFuZFN0YXJ0ZWQpIHsKKyAgICBmY2xvc2UodGFibGUtPmRhdGEuZXh0ZXJuYWwuc3RhbmRhcmRJbnB1dCk7CisgICAgZmNsb3NlKHRhYmxlLT5kYXRhLmV4dGVybmFsLnN0YW5kYXJkT3V0cHV0KTsKKworICAgIGxvZ01lc3NhZ2UoTE9HX0RFQlVHLCAiZXh0ZXJuYWwgY29udHJhY3Rpb24gdGFibGUgc3RvcHBlZDogJXMiLCB0YWJsZS0+ZGF0YS5leHRlcm5hbC5jb21tYW5kKTsKKyAgICB0YWJsZS0+ZGF0YS5leHRlcm5hbC5jb21tYW5kU3RhcnRlZCA9IDA7CisgIH0KK30KKworc3RhdGljIHZvaWQKK2Rlc3Ryb3lDb250cmFjdGlvblRhYmxlX2V4dGVybmFsIChDb250cmFjdGlvblRhYmxlICp0YWJsZSkgeworICBzdG9wQ29udHJhY3Rpb25Db21tYW5kKHRhYmxlKTsKKyAgaWYgKHRhYmxlLT5kYXRhLmV4dGVybmFsLmlucHV0LmJ1ZmZlcikgZnJlZSh0YWJsZS0+ZGF0YS5leHRlcm5hbC5pbnB1dC5idWZmZXIpOworICBmcmVlKHRhYmxlLT5kYXRhLmV4dGVybmFsLmNvbW1hbmQpOworCisgIGRlc3Ryb3lDb21tb25GaWVsZHModGFibGUpOworICBmcmVlKHRhYmxlKTsKK30KKworc3RhdGljIGNvbnN0IENvbnRyYWN0aW9uVGFibGVNYW5hZ2VtZW50TWV0aG9kcyBleHRlcm5hbE1hbmFnZW1lbnRNZXRob2RzID0geworICAuZGVzdHJveSA9IGRlc3Ryb3lDb250cmFjdGlvblRhYmxlX2V4dGVybmFsCit9OworCitzdGF0aWMgQ29udHJhY3Rpb25UYWJsZSAqCitjb21waWxlQ29udHJhY3Rpb25UYWJsZV9leHRlcm5hbCAoY29uc3QgY2hhciAqbmFtZSkgeworICBDb250cmFjdGlvblRhYmxlICp0YWJsZTsKKworICBpZiAoKHRhYmxlID0gbWFsbG9jKHNpemVvZigqdGFibGUpKSkpIHsKKyAgICBtZW1zZXQodGFibGUsIDAsIHNpemVvZigqdGFibGUpKTsKKworICAgIGlmICgodGFibGUtPmRhdGEuZXh0ZXJuYWwuY29tbWFuZCA9IHN0cmR1cChuYW1lKSkpIHsKKyAgICAgIHRhYmxlLT5tYW5hZ2VtZW50TWV0aG9kcyA9ICZleHRlcm5hbE1hbmFnZW1lbnRNZXRob2RzOworICAgICAgdGFibGUtPnRyYW5zbGF0aW9uTWV0aG9kcyA9IGdldENvbnRyYWN0aW9uVGFibGVUcmFuc2xhdGlvbk1ldGhvZHNfZXh0ZXJuYWwoKTsKKyAgICAgIGluaXRpYWxpemVDb21tb25GaWVsZHModGFibGUpOworCisgICAgICB0YWJsZS0+ZGF0YS5leHRlcm5hbC5jb21tYW5kU3RhcnRlZCA9IDA7CisKKyAgICAgIHRhYmxlLT5kYXRhLmV4dGVybmFsLmlucHV0LmJ1ZmZlciA9IE5VTEw7CisgICAgICB0YWJsZS0+ZGF0YS5leHRlcm5hbC5pbnB1dC5zaXplID0gMDsKKworICAgICAgaWYgKHN0YXJ0Q29udHJhY3Rpb25Db21tYW5kKHRhYmxlKSkgeworICAgICAgICByZXR1cm4gdGFibGU7CisgICAgICB9CisKKyAgICAgIGZyZWUodGFibGUtPmRhdGEuZXh0ZXJuYWwuY29tbWFuZCk7CisgICAgfSBlbHNlIHsKKyAgICAgIGxvZ01hbGxvY0Vycm9yKCk7CisgICAgfQorCisgICAgZnJlZSh0YWJsZSk7CisgIH0gZWxzZSB7CisgICAgbG9nTWFsbG9jRXJyb3IoKTsKKyAgfQorCisgIHJldHVybiBOVUxMOworfQorCisjaWZkZWYgTE9VSVNfVEFCTEVTX0RJUkVDVE9SWQorc3RhdGljIHZvaWQKK2Rlc3Ryb3lDb250cmFjdGlvblRhYmxlX2xvdWlzIChDb250cmFjdGlvblRhYmxlICp0YWJsZSkgeworICBmcmVlKHRhYmxlLT5kYXRhLmxvdWlzLnRhYmxlTGlzdCk7CisKKyAgZGVzdHJveUNvbW1vbkZpZWxkcyh0YWJsZSk7CisgIGZyZWUodGFibGUpOworfQorCitzdGF0aWMgY29uc3QgQ29udHJhY3Rpb25UYWJsZU1hbmFnZW1lbnRNZXRob2RzIGxvdWlzTWFuYWdlbWVudE1ldGhvZHMgPSB7CisgIC5kZXN0cm95ID0gZGVzdHJveUNvbnRyYWN0aW9uVGFibGVfbG91aXMKK307CisKK3N0YXRpYyBDb250cmFjdGlvblRhYmxlICoKK2NvbXBpbGVDb250cmFjdGlvblRhYmxlX2xvdWlzIChjb25zdCBjaGFyICpmaWxlTmFtZSkgeworICBDb250cmFjdGlvblRhYmxlICp0YWJsZTsKKworICBpZiAoKHRhYmxlID0gbWFsbG9jKHNpemVvZigqdGFibGUpKSkpIHsKKyAgICBtZW1zZXQodGFibGUsIDAsIHNpemVvZigqdGFibGUpKTsKKworICAgIGlmICgodGFibGUtPmRhdGEubG91aXMudGFibGVMaXN0ID0gc3RyZHVwKGZpbGVOYW1lKSkpIHsKKyAgICAgIHRhYmxlLT5tYW5hZ2VtZW50TWV0aG9kcyA9ICZsb3Vpc01hbmFnZW1lbnRNZXRob2RzOworICAgICAgdGFibGUtPnRyYW5zbGF0aW9uTWV0aG9kcyA9IGdldENvbnRyYWN0aW9uVGFibGVUcmFuc2xhdGlvbk1ldGhvZHNfbG91aXMoKTsKKyAgICAgIGluaXRpYWxpemVDb21tb25GaWVsZHModGFibGUpOworCisgICAgICByZXR1cm4gdGFibGU7CisgICAgfSBlbHNlIHsKKyAgICAgIGxvZ01hbGxvY0Vycm9yKCk7CisgICAgfQorCisgICAgZnJlZSh0YWJsZSk7CisgIH0gZWxzZSB7CisgICAgbG9nTWFsbG9jRXJyb3IoKTsKKyAgfQorCisgIHJldHVybiBOVUxMOworfQorI2VuZGlmIC8qIExPVUlTX1RBQkxFU19ESVJFQ1RPUlkgKi8KKwordHlwZWRlZiBDb250cmFjdGlvblRhYmxlICpDb250cmFjdGlvblRhYmxlQ29tcGlsZUZ1bmN0aW9uIChjb25zdCBjaGFyICpmaWxlTmFtZSk7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgY29uc3QgY2hhciAqcXVhbGlmaWVyOworICBDb250cmFjdGlvblRhYmxlQ29tcGlsZUZ1bmN0aW9uICpjb21waWxlOworICBjb25zdCBjaGFyICpkaXJlY3Rvcnk7Cit9IENvbnRyYWN0aW9uVGFibGVRdWFsaWZpZXJFbnRyeTsKKworc3RhdGljIGNvbnN0IENvbnRyYWN0aW9uVGFibGVRdWFsaWZpZXJFbnRyeSBjb250cmFjdGlvblRhYmxlUXVhbGlmaWVyVGFibGVbXSA9IHsKKyNpZmRlZiBMT1VJU19UQUJMRVNfRElSRUNUT1JZCisgIHsgLnF1YWxpZmllciA9ICJsb3VpcyIsCisgICAgLmNvbXBpbGUgPSAmY29tcGlsZUNvbnRyYWN0aW9uVGFibGVfbG91aXMsCisgICAgLmRpcmVjdG9yeSA9IExPVUlTX1RBQkxFU19ESVJFQ1RPUlkKKyAgfSwKKyNlbmRpZiAvKiBMT1VJU19UQUJMRVNfRElSRUNUT1JZICovCisKKyAgeyAucXVhbGlmaWVyID0gTlVMTCB9Cit9OworCitjb25zdCBDb250cmFjdGlvblRhYmxlUXVhbGlmaWVyRW50cnkgKgorZ2V0Q29udHJhY3Rpb25UYWJsZVF1YWxpZmllckVudHJ5IChjb25zdCBjaGFyICoqZmlsZU5hbWUpIHsKKyAgY29uc3QgQ29udHJhY3Rpb25UYWJsZVF1YWxpZmllckVudHJ5ICplbnRyeSA9IGNvbnRyYWN0aW9uVGFibGVRdWFsaWZpZXJUYWJsZTsKKworICB3aGlsZSAoZW50cnktPnF1YWxpZmllcikgeworICAgIGlmIChoYXNRdWFsaWZpZXIoZmlsZU5hbWUsIGVudHJ5LT5xdWFsaWZpZXIpKSByZXR1cm4gZW50cnk7CisgICAgZW50cnkgKz0gMTsKKyAgfQorCisgIHJldHVybiBOVUxMOworfQorCitDb250cmFjdGlvblRhYmxlICoKK2NvbXBpbGVDb250cmFjdGlvblRhYmxlIChjb25zdCBjaGFyICpuYW1lKSB7CisgIENvbnRyYWN0aW9uVGFibGVDb21waWxlRnVuY3Rpb24gKmNvbXBpbGUgPSBOVUxMOworICBjb25zdCBDb250cmFjdGlvblRhYmxlUXVhbGlmaWVyRW50cnkgKmN0cSA9IGdldENvbnRyYWN0aW9uVGFibGVRdWFsaWZpZXJFbnRyeSgmbmFtZSk7CisKKyAgaWYgKGN0cSkgeworICAgIGNvbXBpbGUgPSBjdHEtPmNvbXBpbGU7CisgIH0gZWxzZSB7CisgICAgaWYgKCFpc0Fic29sdXRlUGF0aChuYW1lKSkgeworICAgICAgaWYgKCFoYXNOb1F1YWxpZmllcihuYW1lKSkgeworICAgICAgICBsb2dNZXNzYWdlKExPR19FUlIsICJ1bnN1cHBvcnRlZCBjb250cmFjdGlvbiB0YWJsZTogJXMiLCBuYW1lKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICB9CisgICAgfQorCisgICAgaWYgKHRlc3RQcm9ncmFtUGF0aChuYW1lKSkgeworICAgICAgY29tcGlsZSA9ICZjb21waWxlQ29udHJhY3Rpb25UYWJsZV9leHRlcm5hbDsKKyAgICB9IGVsc2UgeworICAgICAgY29tcGlsZSA9ICZjb21waWxlQ29udHJhY3Rpb25UYWJsZV9uYXRpdmU7CisgICAgfQorICB9CisKKyAgcmV0dXJuIGNvbXBpbGUobmFtZSk7Cit9CisKK3ZvaWQKK2Rlc3Ryb3lDb250cmFjdGlvblRhYmxlIChDb250cmFjdGlvblRhYmxlICp0YWJsZSkgeworICB0YWJsZS0+bWFuYWdlbWVudE1ldGhvZHMtPmRlc3Ryb3kodGFibGUpOworfQorCitjaGFyICoKK2Vuc3VyZUNvbnRyYWN0aW9uVGFibGVFeHRlbnNpb24gKGNvbnN0IGNoYXIgKnBhdGgpIHsKKyAgcmV0dXJuIGVuc3VyZUZpbGVFeHRlbnNpb24ocGF0aCwgQ09OVFJBQ1RJT05fVEFCTEVfRVhURU5TSU9OKTsKK30KKworY2hhciAqCittYWtlQ29udHJhY3Rpb25UYWJsZVBhdGggKGNvbnN0IGNoYXIgKmRpcmVjdG9yeSwgY29uc3QgY2hhciAqbmFtZSkgeworICBjb25zdCBjaGFyICpxdWFsaWZpZXIgPSBuYW1lOworICBjb25zdCBDb250cmFjdGlvblRhYmxlUXVhbGlmaWVyRW50cnkgKmN0cSA9IGdldENvbnRyYWN0aW9uVGFibGVRdWFsaWZpZXJFbnRyeSgmbmFtZSk7CisgIGlmICghY3RxKSBoYXNRdWFsaWZpZXIoJm5hbWUsIE5VTEwpOworICBpbnQgcXVhbGlmaWVyTGVuZ3RoID0gbmFtZSAtIHF1YWxpZmllcjsKKworICBjaGFyICpwYXRoOworICBjb25zdCBjaGFyICpleHRlbnNpb247CisKKyAgaWYgKGN0cSAmJiBjdHEtPmRpcmVjdG9yeSkgeworICAgIGlmICghKHBhdGggPSBzdHJkdXAoY3RxLT5kaXJlY3RvcnkpKSkgbG9nTWFsbG9jRXJyb3IoKTsKKyAgICBleHRlbnNpb24gPSBOVUxMOworICB9IGVsc2UgeworICAgIHBhdGggPSBtYWtlUGF0aChkaXJlY3RvcnksIENPTlRSQUNUSU9OX1RBQkxFU19TVUJESVJFQ1RPUlkpOworICAgIGV4dGVuc2lvbiA9IENPTlRSQUNUSU9OX1RBQkxFX0VYVEVOU0lPTjsKKyAgfQorCisgIGlmIChwYXRoKSB7CisgICAgY2hhciAqZmlsZSA9IG1ha2VGaWxlUGF0aChwYXRoLCBuYW1lLCBleHRlbnNpb24pOworCisgICAgZnJlZShwYXRoKTsKKyAgICBwYXRoID0gTlVMTDsKKworICAgIGlmIChmaWxlKSB7CisgICAgICBpZiAocXVhbGlmaWVyTGVuZ3RoKSB7CisgICAgICAgIGNoYXIgYnVmZmVyW3F1YWxpZmllckxlbmd0aCArIHN0cmxlbihmaWxlKSArIDFdOworICAgICAgICBzbnByaW50ZihidWZmZXIsIHNpemVvZihidWZmZXIpLCAiJS4qcyVzIiwKKyAgICAgICAgICAgICAgICAgcXVhbGlmaWVyTGVuZ3RoLCBxdWFsaWZpZXIsIGZpbGUpOworCisgICAgICAgIGZyZWUoZmlsZSk7CisgICAgICAgIGlmICghKGZpbGUgPSBzdHJkdXAoYnVmZmVyKSkpIGxvZ01hbGxvY0Vycm9yKCk7CisgICAgICB9CisKKyAgICAgIGlmIChmaWxlKSByZXR1cm4gZmlsZTsKKyAgICB9CisgIH0KKworICByZXR1cm4gTlVMTDsKK30KKworY2hhciAqCitnZXRDb250cmFjdGlvblRhYmxlRm9yTG9jYWxlIChjb25zdCBjaGFyICpkaXJlY3RvcnkpIHsKKyAgcmV0dXJuIGdldEZpbGVGb3JMb2NhbGUoZGlyZWN0b3J5LCBtYWtlQ29udHJhY3Rpb25UYWJsZVBhdGgpOworfQpkaWZmIC0tZ2l0IGEvUHJvZ3JhbXMvY3RiX2V4dGVybmFsLmMgYi9Qcm9ncmFtcy9jdGJfZXh0ZXJuYWwuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YzZhOWJmCi0tLSAvZGV2L251bGwKKysrIGIvUHJvZ3JhbXMvY3RiX2V4dGVybmFsLmMKQEAgLTAsMCArMSwzNjEgQEAKKy8qCisgKiBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorICogICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorICoKKyAqIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorICoKKyAqIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyAqLworCisjaW5jbHVkZSAicHJvbG9ndWUuaCIKKworI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisKKyNpbmNsdWRlICJsb2cuaCIKKyNpbmNsdWRlICJjdGJfdHJhbnNsYXRlLmgiCisjaW5jbHVkZSAiYnJsX2RvdHMuaCIKKyNpbmNsdWRlICJmaWxlLmgiCisjaW5jbHVkZSAicGFyc2UuaCIKKyNpbmNsdWRlICJ1dGY4LmgiCisKK3N0YXRpYyBpbnQKK3B1dEV4dGVybmFsUmVxdWVzdHMgKEJyYWlsbGVDb250cmFjdGlvbkRhdGEgKmJjZCkgeworICB0eXBlZGVmIGVudW0geworICAgIFJFUV9URVhULAorICAgIFJFUV9OVU1CRVIKKyAgfSBFeHRlcm5hbFJlcXVlc3RUeXBlOworCisgIHR5cGVkZWYgc3RydWN0IHsKKyAgICBjb25zdCBjaGFyICpuYW1lOworICAgIEV4dGVybmFsUmVxdWVzdFR5cGUgdHlwZTsKKworICAgIHVuaW9uIHsKKyAgICAgIHN0cnVjdCB7CisgICAgICAgIGNvbnN0IHdjaGFyX3QgKnN0YXJ0OworICAgICAgICBzaXplX3QgY291bnQ7CisgICAgICB9IHRleHQ7CisKKyAgICAgIHVuc2lnbmVkIGludCBudW1iZXI7CisgICAgfSB2YWx1ZTsKKyAgfSBFeHRlcm5hbFJlcXVlc3RFbnRyeTsKKworICBjb25zdCBFeHRlcm5hbFJlcXVlc3RFbnRyeSBleHRlcm5hbFJlcXVlc3RUYWJsZVtdID0geworICAgIHsgLm5hbWUgPSAiY3Vyc29yLXBvc2l0aW9uIiwKKyAgICAgIC50eXBlID0gUkVRX05VTUJFUiwKKyAgICAgIC52YWx1ZS5udW1iZXIgPSBiY2QtPmlucHV0LmN1cnNvcj8gYmNkLT5pbnB1dC5jdXJzb3ItYmNkLT5pbnB1dC5iZWdpbisxOiAwCisgICAgfSwKKworICAgIHsgLm5hbWUgPSAiZXhwYW5kLWN1cnJlbnQtd29yZCIsCisgICAgICAudHlwZSA9IFJFUV9OVU1CRVIsCisgICAgICAudmFsdWUubnVtYmVyID0gcHJlZnMuZXhwYW5kQ3VycmVudFdvcmQKKyAgICB9LAorCisgICAgeyAubmFtZSA9ICJjYXBpdGFsaXphdGlvbi1tb2RlIiwKKyAgICAgIC50eXBlID0gUkVRX05VTUJFUiwKKyAgICAgIC52YWx1ZS5udW1iZXIgPSBwcmVmcy5jYXBpdGFsaXphdGlvbk1vZGUKKyAgICB9LAorCisgICAgeyAubmFtZSA9ICJtYXhpbXVtLWxlbmd0aCIsCisgICAgICAudHlwZSA9IFJFUV9OVU1CRVIsCisgICAgICAudmFsdWUubnVtYmVyID0gZ2V0T3V0cHV0Q291bnQoYmNkKQorICAgIH0sCisKKyAgICB7IC5uYW1lID0gInRleHQiLAorICAgICAgLnR5cGUgPSBSRVFfVEVYVCwKKyAgICAgIC52YWx1ZS50ZXh0ID0geworICAgICAgICAuc3RhcnQgPSBiY2QtPmlucHV0LmJlZ2luLAorICAgICAgICAuY291bnQgPSBnZXRJbnB1dENvdW50KGJjZCkKKyAgICAgIH0KKyAgICB9LAorCisgICAgeyAubmFtZSA9IE5VTEwgfQorICB9OworCisgIEZJTEUgKnN0cmVhbSA9IGJjZC0+dGFibGUtPmRhdGEuZXh0ZXJuYWwuc3RhbmRhcmRJbnB1dDsKKyAgY29uc3QgRXh0ZXJuYWxSZXF1ZXN0RW50cnkgKnJlcSA9IGV4dGVybmFsUmVxdWVzdFRhYmxlOworCisgIHdoaWxlIChyZXEtPm5hbWUpIHsKKyAgICBpZiAoZnB1dHMocmVxLT5uYW1lLCBzdHJlYW0pID09IEVPRikgZ290byBvdXRwdXRFcnJvcjsKKyAgICBpZiAoZnB1dGMoJz0nLCBzdHJlYW0pID09IEVPRikgZ290byBvdXRwdXRFcnJvcjsKKworICAgIHN3aXRjaCAocmVxLT50eXBlKSB7CisgICAgICBjYXNlIFJFUV9URVhUOiB7CisgICAgICAgIGNvbnN0IHdjaGFyX3QgKmNoYXJhY3RlciA9IHJlcS0+dmFsdWUudGV4dC5zdGFydDsKKyAgICAgICAgY29uc3Qgd2NoYXJfdCAqZW5kID0gY2hhcmFjdGVyICsgcmVxLT52YWx1ZS50ZXh0LmNvdW50OworCisgICAgICAgIHdoaWxlIChjaGFyYWN0ZXIgPCBlbmQpIHsKKyAgICAgICAgICBVdGY4QnVmZmVyIHV0Zjg7CisgICAgICAgICAgc2l6ZV90IHV0ZnMgPSBjb252ZXJ0V2NoYXJUb1V0ZjgoKmNoYXJhY3RlcisrLCB1dGY4KTsKKworICAgICAgICAgIGlmICghdXRmcykgcmV0dXJuIDA7CisgICAgICAgICAgaWYgKGZwdXRzKHV0ZjgsIHN0cmVhbSkgPT0gRU9GKSBnb3RvIG91dHB1dEVycm9yOworICAgICAgICB9CisKKyAgICAgICAgYnJlYWs7CisgICAgICB9CisKKyAgICAgIGNhc2UgUkVRX05VTUJFUjoKKyAgICAgICAgaWYgKGZwcmludGYoc3RyZWFtLCAiJXUiLCByZXEtPnZhbHVlLm51bWJlcikgPT0gRU9GKSBnb3RvIG91dHB1dEVycm9yOworICAgICAgICBicmVhazsKKworICAgICAgZGVmYXVsdDoKKyAgICAgICAgbG9nTWVzc2FnZShMT0dfV0FSTklORywgInVuaW1wbGVtZW50ZWQgZXh0ZXJuYWwgY29udHJhY3Rpb24gcmVxdWVzdCBwcm9wZXJ0eSB0eXBlOiAlczogJXUgKCVzKSIsIGJjZC0+dGFibGUtPmRhdGEuZXh0ZXJuYWwuY29tbWFuZCwgcmVxLT50eXBlLCByZXEtPm5hbWUpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBpZiAoZnB1dGMoJ1xuJywgc3RyZWFtKSA9PSBFT0YpIGdvdG8gb3V0cHV0RXJyb3I7CisgICAgcmVxICs9IDE7CisgIH0KKworICBpZiAoZmZsdXNoKHN0cmVhbSkgPT0gRU9GKSBnb3RvIG91dHB1dEVycm9yOworICByZXR1cm4gMTsKKworb3V0cHV0RXJyb3I6CisgIGxvZ01lc3NhZ2UoTE9HX1dBUk5JTkcsICJleHRlcm5hbCBjb250cmFjdGlvbiBvdXRwdXQgZXJyb3I6ICVzOiAlcyIsIGJjZC0+dGFibGUtPmRhdGEuZXh0ZXJuYWwuY29tbWFuZCwgc3RyZXJyb3IoZXJybm8pKTsKKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGJyZlRhYmxlWzBYNDBdID0geworICAvKiAwWDIwICAgKi8gMCwKKyAgLyogMFgyMSAhICovIEJSTF9ET1RfMiB8IEJSTF9ET1RfMyB8IEJSTF9ET1RfNCB8IEJSTF9ET1RfNiwKKyAgLyogMFgyMiAiICovIEJSTF9ET1RfNSwKKyAgLyogMFgyMyAjICovIEJSTF9ET1RfMyB8IEJSTF9ET1RfNCB8IEJSTF9ET1RfNSB8IEJSTF9ET1RfNiwKKyAgLyogMFgyNCAkICovIEJSTF9ET1RfMSB8IEJSTF9ET1RfMiB8IEJSTF9ET1RfNCB8IEJSTF9ET1RfNiwKKyAgLyogMFgyNSAlICovIEJSTF9ET1RfMSB8IEJSTF9ET1RfNCB8IEJSTF9ET1RfNiwKKyAgLyogMFgyNiAmICovIEJSTF9ET1RfMSB8IEJSTF9ET1RfMiB8IEJSTF9ET1RfMyB8IEJSTF9ET1RfNCB8IEJSTF9ET1RfNiwKKyAgLyogMFgyNyAnICovIEJSTF9ET1RfMywKKyAgLyogMFgyOCAoICovIEJSTF9ET1RfMSB8IEJSTF9ET1RfMiB8IEJSTF9ET1RfMyB8IEJSTF9ET1RfNSB8IEJSTF9ET1RfNiwKKyAgLyogMFgyOSApICovIEJSTF9ET1RfMiB8IEJSTF9ET1RfMyB8IEJSTF9ET1RfNCB8IEJSTF9ET1RfNSB8IEJSTF9ET1RfNiwKKyAgLyogMFgyQSAqICovIEJSTF9ET1RfMSB8IEJSTF9ET1RfNiwKKyAgLyogMFgyQiArICovIEJSTF9ET1RfMyB8IEJSTF9ET1RfNCB8IEJSTF9ET1RfNiwKKyAgLyogMFgyQyAsICovIEJSTF9ET1RfNiwKKyAgLyogMFgyRCAtICovIEJSTF9ET1RfMyB8IEJSTF9ET1RfNiwKKyAgLyogMFgyRSAuICovIEJSTF9ET1RfNCB8IEJSTF9ET1RfNiwKKyAgLyogMFgyRiAvICovIEJSTF9ET1RfMyB8IEJSTF9ET1RfNCwKKyAgLyogMFgzMCAwICovIEJSTF9ET1RfMyB8IEJSTF9ET1RfNSB8IEJSTF9ET1RfNiwKKyAgLyogMFgzMSAxICovIEJSTF9ET1RfMiwKKyAgLyogMFgzMiAyICovIEJSTF9ET1RfMiB8IEJSTF9ET1RfMywKKyAgLyogMFgzMyAzICovIEJSTF9ET1RfMiB8IEJSTF9ET1RfNSwKKyAgLyogMFgzNCA0ICovIEJSTF9ET1RfMiB8IEJSTF9ET1RfNSB8IEJSTF9ET1RfNiwKKyAgLyogMFgzNSA1ICovIEJSTF9ET1RfMiB8IEJSTF9ET1RfNiwKKyAgLyogMFgzNiA2ICovIEJSTF9ET1RfMiB8IEJSTF9ET1RfMyB8IEJSTF9ET1RfNSwKKyAgLyogMFgzNyA3ICovIEJSTF9ET1RfMiB8IEJSTF9ET1RfMyB8IEJSTF9ET1RfNSB8IEJSTF9ET1RfNiwKKyAgLyogMFgzOCA4ICovIEJSTF9ET1RfMiB8IEJSTF9ET1RfMyB8IEJSTF9ET1RfNiwKKyAgLyogMFgzOSA5ICovIEJSTF9ET1RfMyB8IEJSTF9ET1RfNSwKKyAgLyogMFgzQSA6ICovIEJSTF9ET1RfMSB8IEJSTF9ET1RfNSB8IEJSTF9ET1RfNiwKKyAgLyogMFgzQiA7ICovIEJSTF9ET1RfNSB8IEJSTF9ET1RfNiwKKyAgLyogMFgzQyA8ICovIEJSTF9ET1RfMSB8IEJSTF9ET1RfMiB8IEJSTF9ET1RfNiwKKyAgLyogMFgzRCA9ICovIEJSTF9ET1RfMSB8IEJSTF9ET1RfMiB8IEJSTF9ET1RfMyB8IEJSTF9ET1RfNCB8IEJSTF9ET1RfNSB8IEJSTF9ET1RfNiwKKyAgLyogMFgzRSA+ICovIEJSTF9ET1RfMyB8IEJSTF9ET1RfNCB8IEJSTF9ET1RfNSwKKyAgLyogMFgzRiA/ICovIEJSTF9ET1RfMSB8IEJSTF9ET1RfNCB8IEJSTF9ET1RfNSB8IEJSTF9ET1RfNiwKKyAgLyogMFg0MCBAICovIEJSTF9ET1RfNCwKKyAgLyogMFg0MSBBICovIEJSTF9ET1RfMSwKKyAgLyogMFg0MiBCICovIEJSTF9ET1RfMSB8IEJSTF9ET1RfMiwKKyAgLyogMFg0MyBDICovIEJSTF9ET1RfMSB8IEJSTF9ET1RfNCwKKyAgLyogMFg0NCBEICovIEJSTF9ET1RfMSB8IEJSTF9ET1RfNCB8IEJSTF9ET1RfNSwKKyAgLyogMFg0NSBFICovIEJSTF9ET1RfMSB8IEJSTF9ET1RfNSwKKyAgLyogMFg0NiBGICovIEJSTF9ET1RfMSB8IEJSTF9ET1RfMiB8IEJSTF9ET1RfNCwKKyAgLyogMFg0NyBHICovIEJSTF9ET1RfMSB8IEJSTF9ET1RfMiB8IEJSTF9ET1RfNCB8IEJSTF9ET1RfNSwKKyAgLyogMFg0OCBIICovIEJSTF9ET1RfMSB8IEJSTF9ET1RfMiB8IEJSTF9ET1RfNSwKKyAgLyogMFg0OSBJICovIEJSTF9ET1RfMiB8IEJSTF9ET1RfNCwKKyAgLyogMFg0QSBKICovIEJSTF9ET1RfMiB8IEJSTF9ET1RfNCB8IEJSTF9ET1RfNSwKKyAgLyogMFg0QiBLICovICBCUkxfRE9UXzEgfCBCUkxfRE9UXzMsCisgIC8qIDBYNEMgTCAqLyBCUkxfRE9UXzEgfCBCUkxfRE9UXzIgfCBCUkxfRE9UXzMsCisgIC8qIDBYNEQgTSAqLyBCUkxfRE9UXzEgfCBCUkxfRE9UXzMgfCBCUkxfRE9UXzQsCisgIC8qIDBYNEUgTiAqLyBCUkxfRE9UXzEgfCBCUkxfRE9UXzMgfCBCUkxfRE9UXzQgfCBCUkxfRE9UXzUsCisgIC8qIDBYNEYgTyAqLyBCUkxfRE9UXzEgfCBCUkxfRE9UXzMgfCBCUkxfRE9UXzUsCisgIC8qIDBYNTAgUCAqLyBCUkxfRE9UXzEgfCBCUkxfRE9UXzIgfCBCUkxfRE9UXzMgfCBCUkxfRE9UXzQsCisgIC8qIDBYNTEgUSAqLyBCUkxfRE9UXzEgfCBCUkxfRE9UXzIgfCBCUkxfRE9UXzMgfCBCUkxfRE9UXzQgfCBCUkxfRE9UXzUsCisgIC8qIDBYNTIgUiAqLyBCUkxfRE9UXzEgfCBCUkxfRE9UXzIgfCBCUkxfRE9UXzMgfCBCUkxfRE9UXzUsCisgIC8qIDBYNTMgUyAqLyBCUkxfRE9UXzIgfCBCUkxfRE9UXzMgfCBCUkxfRE9UXzQsCisgIC8qIDBYNTQgVCAqLyBCUkxfRE9UXzIgfCBCUkxfRE9UXzMgfCBCUkxfRE9UXzQgfCBCUkxfRE9UXzUsCisgIC8qIDBYNTUgVSAqLyBCUkxfRE9UXzEgfCBCUkxfRE9UXzMgfCBCUkxfRE9UXzYsCisgIC8qIDBYNTYgViAqLyBCUkxfRE9UXzEgfCBCUkxfRE9UXzIgfCBCUkxfRE9UXzMgfCBCUkxfRE9UXzYsCisgIC8qIDBYNTcgVyAqLyBCUkxfRE9UXzIgfCBCUkxfRE9UXzQgfCBCUkxfRE9UXzUgfCBCUkxfRE9UXzYsCisgIC8qIDBYNTggWCAqLyBCUkxfRE9UXzEgfCBCUkxfRE9UXzMgfCBCUkxfRE9UXzQgfCBCUkxfRE9UXzYsCisgIC8qIDBYNTkgWSAqLyBCUkxfRE9UXzEgfCBCUkxfRE9UXzMgfCBCUkxfRE9UXzQgfCBCUkxfRE9UXzUgfCBCUkxfRE9UXzYsCisgIC8qIDBYNUEgWiAqLyBCUkxfRE9UXzEgfCBCUkxfRE9UXzMgfCBCUkxfRE9UXzUgfCBCUkxfRE9UXzYsCisgIC8qIDBYNUIgWyAqLyBCUkxfRE9UXzIgfCBCUkxfRE9UXzQgfCBCUkxfRE9UXzYsCisgIC8qIDBYNUMgXCAqLyBCUkxfRE9UXzEgfCBCUkxfRE9UXzIgfCBCUkxfRE9UXzUgfCBCUkxfRE9UXzYsCisgIC8qIDBYNUQgXSAqLyBCUkxfRE9UXzEgfCBCUkxfRE9UXzIgfCBCUkxfRE9UXzQgfCBCUkxfRE9UXzUgfCBCUkxfRE9UXzYsCisgIC8qIDBYNUUgXiAqLyBCUkxfRE9UXzQgfCBCUkxfRE9UXzUsCisgIC8qIDBYNUYgXyAqLyBCUkxfRE9UXzQgfCBCUkxfRE9UXzUgfCBCUkxfRE9UXzYKK307CisKK3N0YXRpYyBpbnQKK2hhbmRsZUV4dGVybmFsUmVzcG9uc2VfYnJmIChCcmFpbGxlQ29udHJhY3Rpb25EYXRhICpiY2QsIGNvbnN0IGNoYXIgKnZhbHVlKSB7CisgIGludCB1c2VEb3Q3ID0gcHJlZnMuY2FwaXRhbGl6YXRpb25Nb2RlID09IENUQl9DQVBfRE9UNzsKKworICB3aGlsZSAoKnZhbHVlICYmIChiY2QtPm91dHB1dC5jdXJyZW50IDwgYmNkLT5vdXRwdXQuZW5kKSkgeworICAgIHVuc2lnbmVkIGNoYXIgYnJmID0gKnZhbHVlKysgJiAwWEZGOworICAgIHVuc2lnbmVkIGNoYXIgZG90cyA9IDA7CisgICAgdW5zaWduZWQgY2hhciBzdXBlcmltcG9zZSA9IDA7CisKKyAgICBpZiAoKGJyZiA+PSAwWDYwKSAmJiAoYnJmIDw9IDBYN0YpKSB7CisgICAgICBicmYgLT0gMFgyMDsKKyAgICB9IGVsc2UgaWYgKChicmYgPj0gMFg0MSkgJiYgKGJyZiA8PSAwWDVBKSkgeworICAgICAgaWYgKHVzZURvdDcpIHN1cGVyaW1wb3NlIHw9IEJSTF9ET1RfNzsKKyAgICB9CisKKyAgICBpZiAoKGJyZiA+PSAwWDIwKSAmJiAoYnJmIDw9IDBYNUYpKSBkb3RzID0gYnJmVGFibGVbYnJmIC0gMFgyMF0gfCBzdXBlcmltcG9zZTsKKyAgICAqYmNkLT5vdXRwdXQuY3VycmVudCsrID0gZG90czsKKyAgfQorCisgIHJldHVybiAxOworfQorCitzdGF0aWMgaW50CitoYW5kbGVFeHRlcm5hbFJlc3BvbnNlX2NvbnN1bWVkTGVuZ3RoIChCcmFpbGxlQ29udHJhY3Rpb25EYXRhICpiY2QsIGNvbnN0IGNoYXIgKnZhbHVlKSB7CisgIGludCBsZW5ndGg7CisKKyAgaWYgKCFpc0ludGVnZXIoJmxlbmd0aCwgdmFsdWUpKSByZXR1cm4gMDsKKyAgaWYgKGxlbmd0aCA8IDEpIHJldHVybiAwOworICBpZiAobGVuZ3RoID4gZ2V0SW5wdXRDb3VudChiY2QpKSByZXR1cm4gMDsKKworICBiY2QtPmlucHV0LmN1cnJlbnQgPSBiY2QtPmlucHV0LmJlZ2luICsgbGVuZ3RoOworICByZXR1cm4gMTsKK30KKworc3RhdGljIGludAoraGFuZGxlRXh0ZXJuYWxSZXNwb25zZV9vdXRwdXRPZmZzZXRzIChCcmFpbGxlQ29udHJhY3Rpb25EYXRhICpiY2QsIGNvbnN0IGNoYXIgKnZhbHVlKSB7CisgIGlmIChiY2QtPmlucHV0Lm9mZnNldHMpIHsKKyAgICBpbnQgcHJldmlvdXMgPSBDVEJfTk9fT0ZGU0VUOworICAgIHVuc2lnbmVkIGludCBjb3VudCA9IGdldElucHV0Q291bnQoYmNkKTsKKyAgICB1bnNpZ25lZCBpbnQgaW5kZXggPSAwOworCisgICAgd2hpbGUgKCp2YWx1ZSAmJiAoaW5kZXggPCBjb3VudCkpIHsKKyAgICAgIGludCBvZmZzZXQ7CisKKyAgICAgIHsKKyAgICAgICAgY2hhciAqZGVsaW1pdGVyID0gc3RyY2hyKHZhbHVlLCAnLCcpOworCisgICAgICAgIGlmIChkZWxpbWl0ZXIpIHsKKyAgICAgICAgICBpbnQgb2s7CisKKyAgICAgICAgICB7CisgICAgICAgICAgICBjaGFyIG9sZERlbGltaXRlciA9ICpkZWxpbWl0ZXI7CisgICAgICAgICAgICAqZGVsaW1pdGVyID0gMDsKKyAgICAgICAgICAgIG9rID0gaXNJbnRlZ2VyKCZvZmZzZXQsIHZhbHVlKTsKKyAgICAgICAgICAgICpkZWxpbWl0ZXIgPSBvbGREZWxpbWl0ZXI7CisgICAgICAgICAgfQorCisgICAgICAgICAgaWYgKCFvaykgcmV0dXJuIDA7CisgICAgICAgICAgdmFsdWUgPSBkZWxpbWl0ZXIgKyAxOworICAgICAgICB9IGVsc2UgaWYgKGlzSW50ZWdlcigmb2Zmc2V0LCB2YWx1ZSkpIHsKKyAgICAgICAgICB2YWx1ZSArPSBzdHJsZW4odmFsdWUpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CisgICAgICB9CisKKyAgICAgIGlmIChvZmZzZXQgPCAoKGluZGV4ID09IDApPyAwOiBwcmV2aW91cykpIHJldHVybiAwOworICAgICAgaWYgKG9mZnNldCA+PSBnZXRPdXRwdXRDb3VudChiY2QpKSByZXR1cm4gMDsKKworICAgICAgYmNkLT5pbnB1dC5vZmZzZXRzW2luZGV4KytdID0gKG9mZnNldCA9PSBwcmV2aW91cyk/IENUQl9OT19PRkZTRVQ6IG9mZnNldDsKKyAgICAgIHByZXZpb3VzID0gb2Zmc2V0OworICAgIH0KKyAgfQorCisgIHJldHVybiAxOworfQorCit0eXBlZGVmIHN0cnVjdCB7CisgIGNvbnN0IGNoYXIgKm5hbWU7CisgIGludCAoKmhhbmRsZXIpIChCcmFpbGxlQ29udHJhY3Rpb25EYXRhICpiY2QsIGNvbnN0IGNoYXIgKnZhbHVlKTsKKyAgdW5zaWduZWQgc3RvcDoxOworfSBFeHRlcm5hbFJlc3BvbnNlRW50cnk7CisKK3N0YXRpYyBjb25zdCBFeHRlcm5hbFJlc3BvbnNlRW50cnkgZXh0ZXJuYWxSZXNwb25zZVRhYmxlW10gPSB7CisgIHsgLm5hbWUgPSAiYnJmIiwKKyAgICAuc3RvcCA9IDEsCisgICAgLmhhbmRsZXIgPSBoYW5kbGVFeHRlcm5hbFJlc3BvbnNlX2JyZgorICB9LAorCisgIHsgLm5hbWUgPSAiY29uc3VtZWQtbGVuZ3RoIiwKKyAgICAuaGFuZGxlciA9IGhhbmRsZUV4dGVybmFsUmVzcG9uc2VfY29uc3VtZWRMZW5ndGgKKyAgfSwKKworICB7IC5uYW1lID0gIm91dHB1dC1vZmZzZXRzIiwKKyAgICAuaGFuZGxlciA9IGhhbmRsZUV4dGVybmFsUmVzcG9uc2Vfb3V0cHV0T2Zmc2V0cworICB9LAorCisgIHsgLm5hbWUgPSBOVUxMIH0KK307CisKK3N0YXRpYyBpbnQKK2dldEV4dGVybmFsUmVzcG9uc2VzIChCcmFpbGxlQ29udHJhY3Rpb25EYXRhICpiY2QpIHsKKyAgRklMRSAqc3RyZWFtID0gYmNkLT50YWJsZS0+ZGF0YS5leHRlcm5hbC5zdGFuZGFyZE91dHB1dDsKKworICB3aGlsZSAocmVhZExpbmUoc3RyZWFtLCAmYmNkLT50YWJsZS0+ZGF0YS5leHRlcm5hbC5pbnB1dC5idWZmZXIsICZiY2QtPnRhYmxlLT5kYXRhLmV4dGVybmFsLmlucHV0LnNpemUsIE5VTEwpKSB7CisgICAgaW50IG9rID0gMDsKKyAgICBpbnQgc3RvcCA9IDA7CisgICAgY2hhciAqZGVsaW1pdGVyID0gc3RyY2hyKGJjZC0+dGFibGUtPmRhdGEuZXh0ZXJuYWwuaW5wdXQuYnVmZmVyLCAnPScpOworCisgICAgaWYgKGRlbGltaXRlcikgeworICAgICAgY29uc3QgY2hhciAqdmFsdWUgPSBkZWxpbWl0ZXIgKyAxOworICAgICAgY29uc3QgRXh0ZXJuYWxSZXNwb25zZUVudHJ5ICpyc3AgPSBleHRlcm5hbFJlc3BvbnNlVGFibGU7CisKKyAgICAgIGNoYXIgb2xkRGVsaW1pdGVyID0gKmRlbGltaXRlcjsKKyAgICAgICpkZWxpbWl0ZXIgPSAwOworCisgICAgICB3aGlsZSAocnNwLT5uYW1lKSB7CisgICAgICAgIGlmIChzdHJjbXAoYmNkLT50YWJsZS0+ZGF0YS5leHRlcm5hbC5pbnB1dC5idWZmZXIsIHJzcC0+bmFtZSkgPT0gMCkgeworICAgICAgICAgIGlmIChyc3AtPmhhbmRsZXIoYmNkLCB2YWx1ZSkpIG9rID0gMTsKKyAgICAgICAgICBpZiAocnNwLT5zdG9wKSBzdG9wID0gMTsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIHJzcCArPSAxOworICAgICAgfQorCisgICAgICAqZGVsaW1pdGVyID0gb2xkRGVsaW1pdGVyOworICAgIH0KKworICAgIGlmICghb2spIGxvZ01lc3NhZ2UoTE9HX1dBUk5JTkcsICJ1bmV4cGVjdGVkIGV4dGVybmFsIGNvbnRyYWN0aW9uIHJlc3BvbnNlOiAlczogJXMiLCBiY2QtPnRhYmxlLT5kYXRhLmV4dGVybmFsLmNvbW1hbmQsIGJjZC0+dGFibGUtPmRhdGEuZXh0ZXJuYWwuaW5wdXQuYnVmZmVyKTsKKyAgICBpZiAoc3RvcCkgcmV0dXJuIDE7CisgIH0KKworICBsb2dNZXNzYWdlKExPR19XQVJOSU5HLCAiaW5jb21wbGV0ZSBleHRlcm5hbCBjb250cmFjdGlvbiByZXNwb25zZTogJXMiLCBiY2QtPnRhYmxlLT5kYXRhLmV4dGVybmFsLmNvbW1hbmQpOworICByZXR1cm4gMDsKK30KKworc3RhdGljIGludAorY29udHJhY3RUZXh0X2V4dGVybmFsIChCcmFpbGxlQ29udHJhY3Rpb25EYXRhICpiY2QpIHsKKyAgc2V0T2Zmc2V0KGJjZCk7CisgIHdoaWxlICgrK2JjZC0+aW5wdXQuY3VycmVudCA8IGJjZC0+aW5wdXQuZW5kKSBjbGVhck9mZnNldChiY2QpOworCisgIGlmIChzdGFydENvbnRyYWN0aW9uQ29tbWFuZChiY2QtPnRhYmxlKSkgeworICAgIGlmIChwdXRFeHRlcm5hbFJlcXVlc3RzKGJjZCkpIHsKKyAgICAgIGlmIChnZXRFeHRlcm5hbFJlc3BvbnNlcyhiY2QpKSB7CisgICAgICAgIHJldHVybiAxOworICAgICAgfQorICAgIH0KKyAgfQorCisgIHN0b3BDb250cmFjdGlvbkNvbW1hbmQoYmNkLT50YWJsZSk7CisgIHJldHVybiAwOworfQorCitzdGF0aWMgdm9pZAorZmluaXNoQ2hhcmFjdGVyRW50cnlfZXh0ZXJuYWwgKEJyYWlsbGVDb250cmFjdGlvbkRhdGEgKmJjZCwgQ2hhcmFjdGVyRW50cnkgKmVudHJ5KSB7Cit9CisKK3N0YXRpYyBjb25zdCBDb250cmFjdGlvblRhYmxlVHJhbnNsYXRpb25NZXRob2RzIGV4dGVybmFsVHJhbnNsYXRpb25NZXRob2RzID0geworICAuY29udHJhY3RUZXh0ID0gY29udHJhY3RUZXh0X2V4dGVybmFsLAorICAuZmluaXNoQ2hhcmFjdGVyRW50cnkgPSBmaW5pc2hDaGFyYWN0ZXJFbnRyeV9leHRlcm5hbAorfTsKKworY29uc3QgQ29udHJhY3Rpb25UYWJsZVRyYW5zbGF0aW9uTWV0aG9kcyAqCitnZXRDb250cmFjdGlvblRhYmxlVHJhbnNsYXRpb25NZXRob2RzX2V4dGVybmFsICh2b2lkKSB7CisgIHJldHVybiAmZXh0ZXJuYWxUcmFuc2xhdGlvbk1ldGhvZHM7Cit9CmRpZmYgLS1naXQgYS9Qcm9ncmFtcy9jdGJfaW50ZXJuYWwuaCBiL1Byb2dyYW1zL2N0Yl9pbnRlcm5hbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNmZmRjNmQKLS0tIC9kZXYvbnVsbAorKysgYi9Qcm9ncmFtcy9jdGJfaW50ZXJuYWwuaApAQCAtMCwwICsxLDE5NCBAQAorLyoKKyAqIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisgKiAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisgKgorICogQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKKyNpZm5kZWYgQlJMVFRZX0lOQ0xVREVEX0NUQl9JTlRFUk5BTAorI2RlZmluZSBCUkxUVFlfSU5DTFVERURfQ1RCX0lOVEVSTkFMCisKKyNpbmNsdWRlIDxzdGRpby5oPgorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmIC8qIF9fY3BsdXNwbHVzICovCisKKyNkZWZpbmUgQllURSB1bnNpZ25lZCBjaGFyCisKKyNkZWZpbmUgSEFTSE5VTSAxMDg3CisjZGVmaW5lIENUSCh4KSAoKCh4WzBdPDw4KSt4WzFdKSVIQVNITlVNKQorCit0eXBlZGVmIHVpbnQzMl90IENvbnRyYWN0aW9uVGFibGVPZmZzZXQ7CisKK3R5cGVkZWYgZW51bSB7CisgIENUQ19TcGFjZSAgICAgICA9IDBYMDEsCisgIENUQ19MZXR0ZXIgICAgICA9IDBYMDIsCisgIENUQ19EaWdpdCAgICAgICA9IDBYMDQsCisgIENUQ19QdW5jdHVhdGlvbiA9IDBYMDgsCisgIENUQ19VcHBlckNhc2UgICA9IDBYMTAsCisgIENUQ19Mb3dlckNhc2UgICA9IDBYMjAKK30gQ29udHJhY3Rpb25UYWJsZUNoYXJhY3RlckF0dHJpYnV0ZTsKK3R5cGVkZWYgdWludDMyX3QgQ29udHJhY3Rpb25UYWJsZUNoYXJhY3RlckF0dHJpYnV0ZXM7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgd2NoYXJfdCB2YWx1ZTsKKyAgQ29udHJhY3Rpb25UYWJsZU9mZnNldCBydWxlczsKKyAgQ29udHJhY3Rpb25UYWJsZU9mZnNldCBhbHdheXM7CisgIENvbnRyYWN0aW9uVGFibGVDaGFyYWN0ZXJBdHRyaWJ1dGVzIGF0dHJpYnV0ZXM7Cit9IENvbnRyYWN0aW9uVGFibGVDaGFyYWN0ZXI7CisKK3R5cGVkZWYgZW51bSB7CisgIENUT19DYXBpdGFsU2lnbiwgLypkb3QgcGF0dGVybiBmb3IgY2FwaXRhbCBzaWduKi8KKyAgQ1RPX0JlZ2luQ2FwaXRhbFNpZ24sIC8qZG90IHBhdHRlcm4gZm9yIGJlZ2lubmluZyBjYXBpdGFsIGJsb2NrKi8KKyAgQ1RPX0VuZENhcGl0YWxTaWduLCAvKmRvdCBwYXR0ZXJuIGZvciBlbmRpbmcgY2FwaXRhbCBibG9jayovCisKKyAgQ1RPX0xldHRlclNpZ24sIC8qZG90IHBhdHRlcm4gZm9yIGxldHRlciBzaWduKi8KKyAgQ1RPX051bWJlclNpZ24sIC8qbnVtYmVyIHNpZ24qLworCisgIENUT19MaXRlcmFsLCAvKmRvbid0IHRyYW5zbGF0ZSB0aGlzIHN0cmluZyovCisgIENUT19BbHdheXMsIC8qYWx3YXlzIHVzZSB0aGlzIGNvbnRyYWN0aW9uKi8KKyAgQ1RPX1JlcGVhdGFibGUsIC8qdGFrZSBqdXN0IHRoZSBmaXJzdCwgaS5lLiBtdWx0aXBsZSBibGFua3MqLworCisgIENUT19MYXJnZVNpZ24sIC8qYW5kLCBmb3IsIG9mLCB0aGUsIHdpdGgqLworICBDVE9fTGFzdExhcmdlU2lnbiwgLyphKi8KKyAgQ1RPX1dob2xlV29yZCwgLyp3aG9sZSB3b3JkIGNvbnRyYWN0aW9uKi8KKyAgQ1RPX0pvaW5lZFdvcmQsIC8qdG8sIGJ5LCBpbnRvKi8KKyAgQ1RPX0xvd1dvcmQsIC8qZW5vdWdoLCB3ZXJlLCB3YXMsIGV0Yy4qLworICBDVE9fQ29udHJhY3Rpb24sIC8qbXVsdGlsZXR0ZXIgd29yZCBzaWduIHRoYXQgbmVlZHMgbGV0c2lnbiovCisKKyAgQ1RPX1N1ZmZpeGFibGVXb3JkLCAvKndob2xlIHdvcmQgb3IgYmVnaW5uaW5nIG9mIHdvcmQqLworICBDVE9fUHJlZml4YWJsZVdvcmQsIC8qd2hvbGUgd29yZCBvciBlbmQgb2Ygd29yZCovCisgIENUT19CZWdXb3JkLCAvKmJlZ2lubmluZyBvZiB3b3JkIG9ubHkqLworICBDVE9fQmVnTWlkV29yZCwgLypiZWdpbm5pbmcgb3IgbWlkZGxlIG9mIHdvcmQqLworICBDVE9fTWlkV29yZCwgLyptaWRkbGUgb2Ygd29yZCBvbmx5Ki8KKyAgQ1RPX01pZEVuZFdvcmQsIC8qbWlkZGxlIG9yIGVuZCBvZiB3b3JkKi8KKyAgQ1RPX0VuZFdvcmQsIC8qZW5kIG9mIHdvcmQgb25seSovCisKKyAgQ1RPX1ByZVB1bmMsIC8qcHVuY3R1YXRpb24gaW4gc3RyaW5nIGF0IGJlZ2lubmluZyBvZiB3b3JkKi8KKyAgQ1RPX1Bvc3RQdW5jLCAvKnB1bmN0dWF0aW9uIGluIHN0cmluZyBhdCBlbmQgb2Ygd29yZCovCisKKyAgQ1RPX0JlZ051bSwgLypiZWdpbm5pbmcgb2YgbnVtYmVyKi8KKyAgQ1RPX01pZE51bSwgLyptaWRkbGUgb2YgbnVtYmVyLCBlLmcuLCBkZWNpbWFsIHBvaW50Ki8KKyAgQ1RPX0VuZE51bSwgLyplbmQgb2YgbnVtYmVyKi8KKworICBDVE9fQ2xhc3MsIC8qZGVmaW5lIGEgY2hhcmFjdGVyIGNsYXNzKi8KKyAgQ1RPX0FmdGVyLCAvKm9ubHkgbWF0Y2ggaWYgYWZ0ZXIgY2hhcmFjdGVyIGluIGNsYXNzKi8KKyAgQ1RPX0JlZm9yZSwgLypvbmx5IG1hdGNoIGlmIGJlZm9yZSBjaGFyYWN0ZXIgaW4gY2xhc3MqLworCisgIENUT19SZXBsYWNlLCAvKnJlcGxhY2UgdGV4dCovCisKKyAgQ1RPX05vbmUgLypmb3IgaW50ZXJuYWwgdXNlIG9ubHkqLworfSBDb250cmFjdGlvblRhYmxlT3Bjb2RlOworCitleHRlcm4gY29uc3Qgd2NoYXJfdCAqZ2V0Q29udHJhY3Rpb25UYWJsZU9wY29kZU5hbWUgKENvbnRyYWN0aW9uVGFibGVPcGNvZGUgb3Bjb2RlKTsKKwordHlwZWRlZiBzdHJ1Y3QgeworICBDb250cmFjdGlvblRhYmxlT2Zmc2V0IG5leHQ7IC8qbmV4dCBlbnRyeSovCisgIENvbnRyYWN0aW9uVGFibGVPcGNvZGUgb3Bjb2RlOyAvKnJ1bGUgZm9yIHRlc3RpbmcgdmFsaWRpdHkgb2YgcmVwbGFjZW1lbnQqLworICBDb250cmFjdGlvblRhYmxlQ2hhcmFjdGVyQXR0cmlidXRlcyBhZnRlcjsgLypjaGFyYWN0ZXIgdHlwZXMgd2hpY2ggbXVzdCBmb29sbG93Ki8KKyAgQ29udHJhY3Rpb25UYWJsZUNoYXJhY3RlckF0dHJpYnV0ZXMgYmVmb3JlOyAvKmNoYXJhY3RlciB0eXBlcyB3aGljaCBtdXN0IHByZWNlZGUqLworICBCWVRFIGZpbmRsZW47IC8qbGVuZ3RoIG9mIHN0cmluZyB0byBiZSByZXBsYWNlZCovCisgIEJZVEUgcmVwbGVuOyAvKmxlbmd0aCBvZiByZXBsYWNlbWVudCBzdHJpbmcqLworICB3Y2hhcl90IGZpbmRyZXBbXTsgLypmaW5kIGFuZCByZXBsYWNlbWVudCBzdHJpbmdzKi8KK30gQ29udHJhY3Rpb25UYWJsZVJ1bGU7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgQ29udHJhY3Rpb25UYWJsZU9mZnNldCBjYXBpdGFsU2lnbjsgLypjYXBpdGFsaXphdGlvbiBzaWduKi8KKyAgQ29udHJhY3Rpb25UYWJsZU9mZnNldCBiZWdpbkNhcGl0YWxTaWduOyAvKmJlZ2luIGNhcGl0YWxzIHNpZ24qLworICBDb250cmFjdGlvblRhYmxlT2Zmc2V0IGVuZENhcGl0YWxTaWduOyAvKmVuZCBjYXBpdGFscyBzaWduKi8KKyAgQ29udHJhY3Rpb25UYWJsZU9mZnNldCBsZXR0ZXJTaWduOyAvKmxldHRlciBzaWduKi8KKyAgQ29udHJhY3Rpb25UYWJsZU9mZnNldCBudW1iZXJTaWduOyAvKm51bWJlciBzaWduKi8KKyAgQ29udHJhY3Rpb25UYWJsZU9mZnNldCBjaGFyYWN0ZXJzOworICB1aW50MzJfdCBjaGFyYWN0ZXJDb3VudDsKKyAgQ29udHJhY3Rpb25UYWJsZU9mZnNldCBydWxlc1tIQVNITlVNXTsgLypsb2NhdGlvbnMgb2YgbXVsdGktY2hhcmFjdGVyIHJ1bGVzIGluIHRhYmxlKi8KK30gQ29udHJhY3Rpb25UYWJsZUhlYWRlcjsKKwordHlwZWRlZiBzdHJ1Y3QgeworICBjb25zdCBDb250cmFjdGlvblRhYmxlUnVsZSAqYWx3YXlzOworICBDb250cmFjdGlvblRhYmxlQ2hhcmFjdGVyQXR0cmlidXRlcyBhdHRyaWJ1dGVzOworCisgIHdjaGFyX3QgdmFsdWU7CisgIHdjaGFyX3QgdXBwZXJjYXNlOworICB3Y2hhcl90IGxvd2VyY2FzZTsKK30gQ2hhcmFjdGVyRW50cnk7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgdm9pZCAoKmRlc3Ryb3kpIChDb250cmFjdGlvblRhYmxlICp0YWJsZSk7Cit9IENvbnRyYWN0aW9uVGFibGVNYW5hZ2VtZW50TWV0aG9kczsKKwordHlwZWRlZiBzdHJ1Y3QgQ29udHJhY3Rpb25UYWJsZVRyYW5zbGF0aW9uTWV0aG9kc1N0cnVjdCBDb250cmFjdGlvblRhYmxlVHJhbnNsYXRpb25NZXRob2RzOwordHlwZWRlZiBjb25zdCBDb250cmFjdGlvblRhYmxlVHJhbnNsYXRpb25NZXRob2RzICpHZXRDb250cmFjdGlvblRhYmxlVHJhbnNsYXRpb25NZXRob2RzRnVuY3Rpb24gKHZvaWQpOworZXh0ZXJuIEdldENvbnRyYWN0aW9uVGFibGVUcmFuc2xhdGlvbk1ldGhvZHNGdW5jdGlvbiBnZXRDb250cmFjdGlvblRhYmxlVHJhbnNsYXRpb25NZXRob2RzX25hdGl2ZTsKK2V4dGVybiBHZXRDb250cmFjdGlvblRhYmxlVHJhbnNsYXRpb25NZXRob2RzRnVuY3Rpb24gZ2V0Q29udHJhY3Rpb25UYWJsZVRyYW5zbGF0aW9uTWV0aG9kc19leHRlcm5hbDsKK2V4dGVybiBHZXRDb250cmFjdGlvblRhYmxlVHJhbnNsYXRpb25NZXRob2RzRnVuY3Rpb24gZ2V0Q29udHJhY3Rpb25UYWJsZVRyYW5zbGF0aW9uTWV0aG9kc19sb3VpczsKKwordHlwZWRlZiBzdHJ1Y3QgeworICB1bmlvbiB7CisgICAgQ29udHJhY3Rpb25UYWJsZUhlYWRlciAqZmllbGRzOworICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ5dGVzOworICB9IGhlYWRlcjsKKworICBzaXplX3Qgc2l6ZTsKK30gSW50ZXJuYWxDb250cmFjdGlvblRhYmxlOworCitzdHJ1Y3QgQ29udHJhY3Rpb25UYWJsZVN0cnVjdCB7CisgIGNvbnN0IENvbnRyYWN0aW9uVGFibGVNYW5hZ2VtZW50TWV0aG9kcyAqbWFuYWdlbWVudE1ldGhvZHM7CisgIGNvbnN0IENvbnRyYWN0aW9uVGFibGVUcmFuc2xhdGlvbk1ldGhvZHMgKnRyYW5zbGF0aW9uTWV0aG9kczsKKworICBzdHJ1Y3QgeworICAgIENoYXJhY3RlckVudHJ5ICphcnJheTsKKyAgICB1bnNpZ25lZCBpbnQgc2l6ZTsKKyAgICB1bnNpZ25lZCBpbnQgY291bnQ7CisgIH0gY2hhcmFjdGVyczsKKworICBzdHJ1Y3QgeworICAgIENvbnRyYWN0aW9uVGFibGVSdWxlICoqYXJyYXk7CisgICAgdW5zaWduZWQgaW50IHNpemU7CisgICAgdW5zaWduZWQgaW50IGNvdW50OworICB9IHJ1bGVzOworCisgIHVuaW9uIHsKKyAgICBJbnRlcm5hbENvbnRyYWN0aW9uVGFibGUgaW50ZXJuYWw7CisKKyAgICBzdHJ1Y3QgeworICAgICAgY2hhciAqY29tbWFuZDsKKyAgICAgIEZJTEUgKnN0YW5kYXJkSW5wdXQ7CisgICAgICBGSUxFICpzdGFuZGFyZE91dHB1dDsKKyAgICAgIHVuc2lnbmVkIGNvbW1hbmRTdGFydGVkOjE7CisKKyAgICAgIHN0cnVjdCB7CisgICAgICAgIGNoYXIgKmJ1ZmZlcjsKKyAgICAgICAgc2l6ZV90IHNpemU7CisgICAgICB9IGlucHV0OworICAgIH0gZXh0ZXJuYWw7CisKKyNpZmRlZiBMT1VJU19UQUJMRVNfRElSRUNUT1JZCisgICAgc3RydWN0IHsKKyAgICAgIGNoYXIgKnRhYmxlTGlzdDsKKyAgICB9IGxvdWlzOworI2VuZGlmIC8qIExPVUlTX1RBQkxFU19ESVJFQ1RPUlkgKi8KKyAgfSBkYXRhOworfTsKKworZXh0ZXJuIGludCBzdGFydENvbnRyYWN0aW9uQ29tbWFuZCAoQ29udHJhY3Rpb25UYWJsZSAqdGFibGUpOworZXh0ZXJuIHZvaWQgc3RvcENvbnRyYWN0aW9uQ29tbWFuZCAoQ29udHJhY3Rpb25UYWJsZSAqdGFibGUpOworCitleHRlcm4gY29uc3QgdW5zaWduZWQgY2hhciAqZ2V0SW50ZXJuYWxDb250cmFjdGlvblRhYmxlQnl0ZXMgKHZvaWQpOworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZiAvKiBfX2NwbHVzcGx1cyAqLworCisjZW5kaWYgLyogQlJMVFRZX0lOQ0xVREVEX0NUQl9JTlRFUk5BTCAqLwpkaWZmIC0tZ2l0IGEvUHJvZ3JhbXMvY3RiX2xvdWlzLmMgYi9Qcm9ncmFtcy9jdGJfbG91aXMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MmJhYzgyCi0tLSAvZGV2L251bGwKKysrIGIvUHJvZ3JhbXMvY3RiX2xvdWlzLmMKQEAgLTAsMCArMSwxMjggQEAKKy8qCisgKiBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorICogICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorICoKKyAqIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorICoKKyAqIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyAqLworCisjaW5jbHVkZSAicHJvbG9ndWUuaCIKKworI2luY2x1ZGUgPGxpYmxvdWlzLmg+CisKKyNpbmNsdWRlICJsb2cuaCIKKyNpbmNsdWRlICJjdGJfdHJhbnNsYXRlLmgiCisjaW5jbHVkZSAicHJlZnMuaCIKKworc3RhdGljIHZvaWQKK2luaXRpYWxpemUgKHZvaWQpIHsKKyAgc3RhdGljIHVuc2lnbmVkIGNoYXIgaW5pdGlhbGl6ZWQgPSAwOworCisgIGlmICghaW5pdGlhbGl6ZWQpIHsKKyAgICBpbnQgbG9nTGV2ZWwgPSBMT0dfSU5GTzsKKworICAgIGxvZ01lc3NhZ2UobG9nTGV2ZWwsICJMaWJMb3VpcyB2ZXJzaW9uOiAlcyIsIGxvdV92ZXJzaW9uKCkpOworICAgIGxvZ01lc3NhZ2UobG9nTGV2ZWwsICJMaWJMb3VpcyBEYXRhIERpcmVjdG9yeTogJXMiLCBsb3VfZ2V0RGF0YVBhdGgoKSk7CisgICAgbG9nTWVzc2FnZShsb2dMZXZlbCwgIkxpYkxvdWlzIENoYXJhY3RlciBTaXplOiAlZCIsIGxvdV9jaGFyU2l6ZSgpKTsKKworICAgIGluaXRpYWxpemVkID0gMTsKKyAgfQorfQorCitzdGF0aWMgaW50Citjb250cmFjdFRleHRfbG91aXMgKEJyYWlsbGVDb250cmFjdGlvbkRhdGEgKmJjZCkgeworICBpbml0aWFsaXplKCk7CisKKyAgaW50IGlucHV0TGVuZ3RoID0gZ2V0SW5wdXRDb3VudChiY2QpOworICB3aWRlY2hhciBpbnB1dEJ1ZmZlcltpbnB1dExlbmd0aF07CisgIGludCBvdXRwdXRPZmZzZXRzW2lucHV0TGVuZ3RoXTsKKworICB7CisgICAgY29uc3Qgd2NoYXJfdCAqc291cmNlID0gYmNkLT5pbnB1dC5iZWdpbjsKKyAgICB3aWRlY2hhciAqdGFyZ2V0ID0gaW5wdXRCdWZmZXI7CisKKyAgICB3aGlsZSAoc291cmNlIDwgYmNkLT5pbnB1dC5lbmQpIHsKKyAgICAgICp0YXJnZXQrKyA9ICpzb3VyY2UrKzsKKyAgICB9CisgIH0KKworICBpbnQgb3V0cHV0TGVuZ3RoID0gZ2V0T3V0cHV0Q291bnQoYmNkKTsKKyAgd2lkZWNoYXIgb3V0cHV0QnVmZmVyW291dHB1dExlbmd0aF07CisgIGludCBpbnB1dE9mZnNldHNbb3V0cHV0TGVuZ3RoXTsKKworICBpbnQgKmN1cnNvciA9IE5VTEw7CisgIGludCBwb3NpdGlvbjsKKworICBpZiAoYmNkLT5pbnB1dC5jdXJzb3IpIHsKKyAgICBwb3NpdGlvbiA9IGJjZC0+aW5wdXQuY3Vyc29yIC0gYmNkLT5pbnB1dC5iZWdpbjsKKyAgICBpZiAoKHBvc2l0aW9uID49IDApICYmIChwb3NpdGlvbiA8IGlucHV0TGVuZ3RoKSkgY3Vyc29yID0gJnBvc2l0aW9uOworICB9CisKKyAgaW50IHRyYW5zbGF0aW9uTW9kZSA9IGRvdHNJTyB8IHVjQnJsOworICBpZiAocHJlZnMuZXhwYW5kQ3VycmVudFdvcmQpIHRyYW5zbGF0aW9uTW9kZSB8PSBjb21wYnJsQXRDdXJzb3I7CisKKyAgaW50IHRyYW5zbGF0ZWQgPSBsb3VfdHJhbnNsYXRlKAorICAgIGJjZC0+dGFibGUtPmRhdGEubG91aXMudGFibGVMaXN0LAorICAgIGlucHV0QnVmZmVyLCAmaW5wdXRMZW5ndGgsIG91dHB1dEJ1ZmZlciwgJm91dHB1dExlbmd0aCwKKyAgICBOVUxMIC8qIHR5cGVGb3JtICovLCBOVUxMIC8qIHNwYWNpbmcgKi8sCisgICAgb3V0cHV0T2Zmc2V0cywgaW5wdXRPZmZzZXRzLCBjdXJzb3IsIHRyYW5zbGF0aW9uTW9kZQorICApOworCisgIGlmICh0cmFuc2xhdGVkKSB7CisgICAgYmNkLT5pbnB1dC5jdXJyZW50ID0gYmNkLT5pbnB1dC5iZWdpbiArIGlucHV0TGVuZ3RoOworICAgIGJjZC0+b3V0cHV0LmN1cnJlbnQgPSBiY2QtPm91dHB1dC5iZWdpbiArIG91dHB1dExlbmd0aDsKKworICAgIHsKKyAgICAgIGNvbnN0IHdpZGVjaGFyICpzb3VyY2UgPSBvdXRwdXRCdWZmZXI7CisgICAgICBCWVRFICp0YXJnZXQgPSBiY2QtPm91dHB1dC5iZWdpbjsKKworICAgICAgd2hpbGUgKHRhcmdldCA8IGJjZC0+b3V0cHV0LmN1cnJlbnQpIHsKKyAgICAgICAgKnRhcmdldCsrID0gKnNvdXJjZSsrICYgMFhGRjsKKyAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoYmNkLT5pbnB1dC5vZmZzZXRzKSB7CisgICAgICBjb25zdCBpbnQgKnNvdXJjZSA9IG91dHB1dE9mZnNldHM7CisgICAgICBpbnQgKnRhcmdldCA9IGJjZC0+aW5wdXQub2Zmc2V0czsKKyAgICAgIGNvbnN0IGludCAqZW5kID0gdGFyZ2V0ICsgaW5wdXRMZW5ndGg7CisgICAgICBpbnQgcHJldmlvdXNPZmZzZXQgPSAtMTsKKworICAgICAgd2hpbGUgKHRhcmdldCA8IGVuZCkgeworICAgICAgICBpbnQgb2Zmc2V0ID0gKnNvdXJjZSsrOworICAgICAgICBpbnQgc2FtZSA9IG9mZnNldCA9PSBwcmV2aW91c09mZnNldDsKKworICAgICAgICAqdGFyZ2V0KysgPSBzYW1lPyBDVEJfTk9fT0ZGU0VUOiBvZmZzZXQ7CisgICAgICAgIHByZXZpb3VzT2Zmc2V0ID0gb2Zmc2V0OworICAgICAgfQorCisgICAgICBlbmQgKz0gYmNkLT5pbnB1dC5lbmQgLSBiY2QtPmlucHV0LmN1cnJlbnQ7CisgICAgICB3aGlsZSAodGFyZ2V0IDwgZW5kKSAqdGFyZ2V0KysgPSBDVEJfTk9fT0ZGU0VUOworICAgIH0KKyAgfQorCisgIHJldHVybiB0cmFuc2xhdGVkOworfQorCitzdGF0aWMgdm9pZAorZmluaXNoQ2hhcmFjdGVyRW50cnlfbG91aXMgKEJyYWlsbGVDb250cmFjdGlvbkRhdGEgKmJjZCwgQ2hhcmFjdGVyRW50cnkgKmVudHJ5KSB7Cit9CisKK3N0YXRpYyBjb25zdCBDb250cmFjdGlvblRhYmxlVHJhbnNsYXRpb25NZXRob2RzIGxvdWlzVHJhbnNsYXRpb25NZXRob2RzID0geworICAuY29udHJhY3RUZXh0ID0gY29udHJhY3RUZXh0X2xvdWlzLAorICAuZmluaXNoQ2hhcmFjdGVyRW50cnkgPSBmaW5pc2hDaGFyYWN0ZXJFbnRyeV9sb3VpcworfTsKKworY29uc3QgQ29udHJhY3Rpb25UYWJsZVRyYW5zbGF0aW9uTWV0aG9kcyAqCitnZXRDb250cmFjdGlvblRhYmxlVHJhbnNsYXRpb25NZXRob2RzX2xvdWlzICh2b2lkKSB7CisgIHJldHVybiAmbG91aXNUcmFuc2xhdGlvbk1ldGhvZHM7Cit9CmRpZmYgLS1naXQgYS9Qcm9ncmFtcy9jdGJfbmF0aXZlLmMgYi9Qcm9ncmFtcy9jdGJfbmF0aXZlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjI0YjZlNgotLS0gL2Rldi9udWxsCisrKyBiL1Byb2dyYW1zL2N0Yl9uYXRpdmUuYwpAQCAtMCwwICsxLDEyNTEgQEAKKy8qCisgKiBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorICogICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorICoKKyAqIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorICoKKyAqIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyAqLworCisjaW5jbHVkZSAicHJvbG9ndWUuaCIKKworI2luY2x1ZGUgPHN0cmluZy5oPgorCisjaW5jbHVkZSAibG9nLmgiCisjaW5jbHVkZSAiY3RiX3RyYW5zbGF0ZS5oIgorI2luY2x1ZGUgInR0Yi5oIgorI2luY2x1ZGUgImJybF9kb3RzLmgiCisjaW5jbHVkZSAidW5pY29kZS5oIgorI2luY2x1ZGUgInV0ZjguaCIKKworI2lmZGVmIEhBVkVfSUNVCisjaW5jbHVkZSA8dW5pY29kZS91Y2hhci5oPgorCit0eXBlZGVmIHN0cnVjdCB7CisgIHVuc2lnbmVkIGludCBpbmRleDsKKyAgVUxpbmVCcmVhayBhZnRlcjsKKyAgVUxpbmVCcmVhayBiZWZvcmU7CisgIFVMaW5lQnJlYWsgcHJldmlvdXM7CisgIFVMaW5lQnJlYWsgaW5kaXJlY3Q7Cit9IExpbmVCcmVha09wcG9ydHVuaXRpZXNTdGF0ZTsKKworc3RhdGljIHZvaWQKK3ByZXBhcmVMaW5lQnJlYWtPcHBvcnR1bml0aWVzU3RhdGUgKExpbmVCcmVha09wcG9ydHVuaXRpZXNTdGF0ZSAqbGJvKSB7CisgIGxiby0+aW5kZXggPSAwOworICBsYm8tPmFmdGVyID0gVV9MQl9TUEFDRTsKKyAgbGJvLT5iZWZvcmUgPSBsYm8tPmFmdGVyOworICBsYm8tPnByZXZpb3VzID0gbGJvLT5iZWZvcmU7CisgIGxiby0+aW5kaXJlY3QgPSBVX0xCX1NQQUNFOworfQorCitzdGF0aWMgdm9pZAorZmluZExpbmVCcmVha09wcG9ydHVuaXRpZXMgKAorICBCcmFpbGxlQ29udHJhY3Rpb25EYXRhICpiY2QsCisgIExpbmVCcmVha09wcG9ydHVuaXRpZXNTdGF0ZSAqbGJvLAorICB1bnNpZ25lZCBjaGFyICpvcHBvcnR1bml0aWVzLAorICBjb25zdCB3Y2hhcl90ICpjaGFyYWN0ZXJzLCB1bnNpZ25lZCBpbnQgZW5kCispIHsKKyAgLyogVUFYICMxNDogTGluZSBCcmVha2luZyBQcm9wZXJ0aWVzCisgICAqIGh0dHA6Ly91bmljb2RlLm9yZy9yZXBvcnRzL3RyMTQvCisgICAqIFNlY3Rpb24gNjogTGluZSBCcmVha2luZyBBbGdvcml0aG0KKyAgICoKKyAgICogISAgTWFuZGF0b3J5IGJyZWFrIGF0IHRoZSBpbmRpY2F0ZWQgcG9zaXRpb24KKyAgICogXiAgTm8gYnJlYWsgYWxsb3dlZCBhdCB0aGUgaW5kaWNhdGVkIHBvc2l0aW9uCisgICAqIF8gIEJyZWFrIGFsbG93ZWQgYXQgdGhlIGluZGljYXRlZCBwb3NpdGlvbgorICAgKgorICAgKiBIICBpZGVvZ3JhcGhzCisgICAqIGggIHNtYWxsIGthbmEKKyAgICogOSAgZGlnaXRzCisgICAqLworCisgIHdoaWxlIChsYm8tPmluZGV4IDw9IGVuZCkgeworICAgIHVuc2lnbmVkIGNoYXIgKm9wcG9ydHVuaXR5ID0gJm9wcG9ydHVuaXRpZXNbbGJvLT5pbmRleF07CisKKyAgICBsYm8tPnByZXZpb3VzID0gbGJvLT5iZWZvcmU7CisgICAgbGJvLT5iZWZvcmUgPSBsYm8tPmFmdGVyOworICAgIGxiby0+YWZ0ZXIgPSB1X2dldEludFByb3BlcnR5VmFsdWUoY2hhcmFjdGVyc1tsYm8tPmluZGV4XSwgVUNIQVJfTElORV9CUkVBSyk7CisgICAgbGJvLT5pbmRleCArPSAxOworCisgICAgLyogTEI5ICBEbyBub3QgYnJlYWsgYSBjb21iaW5pbmcgY2hhcmFjdGVyIHNlcXVlbmNlLgorICAgICAqLworICAgIGlmIChsYm8tPmFmdGVyID09IFVfTEJfQ09NQklOSU5HX01BUkspIHsKKyAgICAgIC8qIExCMTA6IFRyZWF0IGFueSByZW1haW5pbmcgY29tYmluaW5nIG1hcmsgYXMgQUwuCisgICAgICAgKi8KKyAgICAgIGlmICgobGJvLT5iZWZvcmUgPT0gVV9MQl9NQU5EQVRPUllfQlJFQUspIHx8CisgICAgICAgICAgKGxiby0+YmVmb3JlID09IFVfTEJfQ0FSUklBR0VfUkVUVVJOKSB8fAorICAgICAgICAgIChsYm8tPmJlZm9yZSA9PSBVX0xCX0xJTkVfRkVFRCkgfHwKKyAgICAgICAgICAobGJvLT5iZWZvcmUgPT0gVV9MQl9ORVhUX0xJTkUpIHx8CisgICAgICAgICAgKGxiby0+YmVmb3JlID09IFVfTEJfU1BBQ0UpIHx8CisgICAgICAgICAgKGxiby0+YmVmb3JlID09IFVfTEJfWldTUEFDRSkpIHsKKyAgICAgICAgbGJvLT5iZWZvcmUgPSBVX0xCX0FMUEhBQkVUSUM7CisgICAgICB9CisKKyAgICAgIC8qIHRyZWF0IGl0IGFzIGlmIGl0IGhhcyB0aGUgbGluZSBicmVha2luZyBjbGFzcyBvZiB0aGUgYmFzZSBjaGFyYWN0ZXIKKyAgICAgICAqLworICAgICAgbGJvLT5hZnRlciA9IGxiby0+YmVmb3JlOworICAgICAgKm9wcG9ydHVuaXR5ID0gMDsKKyAgICAgIGNvbnRpbnVlOworICAgIH0KKworICAgIGlmIChsYm8tPmJlZm9yZSAhPSBVX0xCX1NQQUNFKSBsYm8tPmluZGlyZWN0ID0gbGJvLT5iZWZvcmU7CisKKyAgICAvKiBMQjI6IE5ldmVyIGJyZWFrIGF0IHRoZSBzdGFydCBvZiB0ZXh0LgorICAgICAqIHNvdCDDlworICAgICAqLworICAgIGlmIChvcHBvcnR1bml0eSA9PSBvcHBvcnR1bml0aWVzKSB7CisgICAgICAqb3Bwb3J0dW5pdHkgPSAwOworICAgICAgY29udGludWU7CisgICAgfQorCisgICAgLyogTEI0OiBBbHdheXMgYnJlYWsgYWZ0ZXIgaGFyZCBsaW5lIGJyZWFrcworICAgICAqIEJLICEKKyAgICAgKi8KKyAgICBpZiAobGJvLT5iZWZvcmUgPT0gVV9MQl9NQU5EQVRPUllfQlJFQUspIHsKKyAgICAgICpvcHBvcnR1bml0eSA9IDE7CisgICAgICBjb250aW51ZTsKKyAgICB9CisKKyAgICAvKiBMQjU6IFRyZWF0IENSIGZvbGxvd2VkIGJ5IExGLCBhcyB3ZWxsIGFzIENSLCBMRiwgYW5kIE5MIGFzIGhhcmQgbGluZSBicmVha3MuCisgICAgICogQ1IgXiBMRgorICAgICAqIENSICEKKyAgICAgKiBMRiAhCisgICAgICogTkwgIQorICAgICAqLworICAgIGlmICgobGJvLT5iZWZvcmUgPT0gVV9MQl9DQVJSSUFHRV9SRVRVUk4pICYmIChsYm8tPmFmdGVyID09IFVfTEJfTElORV9GRUVEKSkgeworICAgICAgKm9wcG9ydHVuaXR5ID0gMDsKKyAgICAgIGNvbnRpbnVlOworICAgIH0KKyAgICBpZiAoKGxiby0+YmVmb3JlID09IFVfTEJfQ0FSUklBR0VfUkVUVVJOKSB8fAorICAgICAgICAobGJvLT5iZWZvcmUgPT0gVV9MQl9MSU5FX0ZFRUQpIHx8CisgICAgICAgIChsYm8tPmJlZm9yZSA9PSBVX0xCX05FWFRfTElORSkpIHsKKyAgICAgICpvcHBvcnR1bml0eSA9IDE7CisgICAgICBjb250aW51ZTsKKyAgICB9CisKKyAgICAvKiBMQjY6IERvIG5vdCBicmVhayBiZWZvcmUgaGFyZCBsaW5lIGJyZWFrcy4KKyAgICAgKiBeICggQksgfCBDUiB8IExGIHwgTkwgKQorICAgICAqLworICAgIGlmICgobGJvLT5hZnRlciA9PSBVX0xCX01BTkRBVE9SWV9CUkVBSykgfHwKKyAgICAgICAgKGxiby0+YWZ0ZXIgPT0gVV9MQl9DQVJSSUFHRV9SRVRVUk4pIHx8CisgICAgICAgIChsYm8tPmFmdGVyID09IFVfTEJfTElORV9GRUVEKSB8fAorICAgICAgICAobGJvLT5hZnRlciA9PSBVX0xCX05FWFRfTElORSkpIHsKKyAgICAgICpvcHBvcnR1bml0eSA9IDA7CisgICAgICBjb250aW51ZTsKKyAgICB9CisKKyAgICAvKiBMQjc6IERvIG5vdCBicmVhayBiZWZvcmUgc3BhY2VzIG9yIHplcm8gd2lkdGggc3BhY2UuCisgICAgICogXiBTUAorICAgICAqIF4gWlcKKyAgICAgKi8KKyAgICBpZiAoKGxiby0+YWZ0ZXIgPT0gVV9MQl9TUEFDRSkgfHwgKGxiby0+YWZ0ZXIgPT0gVV9MQl9aV1NQQUNFKSkgeworICAgICAgKm9wcG9ydHVuaXR5ID0gMDsKKyAgICAgIGNvbnRpbnVlOworICAgIH0KKworICAgIC8qIExCODogQnJlYWsgYWZ0ZXIgemVybyB3aWR0aCBzcGFjZS4KKyAgICAgKiBaVyBfCisgICAgICovCisgICAgaWYgKGxiby0+YmVmb3JlID09IFVfTEJfWldTUEFDRSkgeworICAgICAgKm9wcG9ydHVuaXR5ID0gMTsKKyAgICAgIGNvbnRpbnVlOworICAgIH0KKworICAgIC8qIExCMTE6IERvIG5vdCBicmVhayBiZWZvcmUgb3IgYWZ0ZXIgV29yZCBqb2luZXIgYW5kIHJlbGF0ZWQgY2hhcmFjdGVycy4KKyAgICAgKiBeIFdKCisgICAgICogV0ogXgorICAgICAqLworICAgIGlmICgobGJvLT5iZWZvcmUgPT0gVV9MQl9XT1JEX0pPSU5FUikgfHwgKGxiby0+YWZ0ZXIgPT0gVV9MQl9XT1JEX0pPSU5FUikpIHsKKyAgICAgICpvcHBvcnR1bml0eSA9IDA7CisgICAgICBjb250aW51ZTsKKyAgICB9CisKKyAgICAvKiBMQjEyOiBEbyBub3QgYnJlYWsgYmVmb3JlIG9yIGFmdGVyIE5CU1AgYW5kIHJlbGF0ZWQgY2hhcmFjdGVycy4KKyAgICAgKiBbXlNQXSBeIEdMCisgICAgICogR0wgXgorICAgICAqLworICAgIGlmICgobGJvLT5iZWZvcmUgIT0gVV9MQl9TUEFDRSkgJiYgKGxiby0+YWZ0ZXIgPT0gVV9MQl9HTFVFKSkgeworICAgICAgKm9wcG9ydHVuaXR5ID0gMDsKKyAgICAgIGNvbnRpbnVlOworICAgIH0KKyAgICBpZiAobGJvLT5iZWZvcmUgPT0gVV9MQl9HTFVFKSB7CisgICAgICAqb3Bwb3J0dW5pdHkgPSAwOworICAgICAgY29udGludWU7CisgICAgfQorCisgICAgLyogTEIxMzogRG8gbm90IGJyZWFrIGJlZm9yZSDigJhdJyBvciDigJghJyBvciDigJg7JyBvciDigJgvJywgZXZlbiBhZnRlciBzcGFjZXMuCisgICAgICogXiBDTAorICAgICAqIF4gRVgKKyAgICAgKiBeIElTCisgICAgICogXiBTWQorICAgICAqLworICAgIGlmICgobGJvLT5hZnRlciA9PSBVX0xCX0NMT1NFX1BVTkNUVUFUSU9OKSB8fAorICAgICAgICAobGJvLT5hZnRlciA9PSBVX0xCX0VYQ0xBTUFUSU9OKSB8fAorICAgICAgICAobGJvLT5hZnRlciA9PSBVX0xCX0lORklYX05VTUVSSUMpIHx8CisgICAgICAgIChsYm8tPmFmdGVyID09IFVfTEJfQlJFQUtfU1lNQk9MUykpIHsKKyAgICAgICpvcHBvcnR1bml0eSA9IDA7CisgICAgICBjb250aW51ZTsKKyAgICB9CisKKyAgICAvKiBMQjE0OiBEbyBub3QgYnJlYWsgYWZ0ZXIg4oCYWycsIGV2ZW4gYWZ0ZXIgc3BhY2VzLgorICAgICAqIE9QIFNQKiBeCisgICAgICovCisgICAgaWYgKGxiby0+aW5kaXJlY3QgPT0gVV9MQl9PUEVOX1BVTkNUVUFUSU9OKSB7CisgICAgICAqb3Bwb3J0dW5pdHkgPSAwOworICAgICAgY29udGludWU7CisgICAgfQorCisgICAgLyogTEIxNTogRG8gbm90IGJyZWFrIHdpdGhpbiDigJgiWycsIGV2ZW4gd2l0aCBpbnRlcnZlbmluZyBzcGFjZXMuCisgICAgICogUVUgU1AqIF4gT1AKKyAgICAgKi8KKyAgICBpZiAoKGxiby0+aW5kaXJlY3QgPT0gVV9MQl9RVU9UQVRJT04pICYmIChsYm8tPmFmdGVyID09IFVfTEJfT1BFTl9QVU5DVFVBVElPTikpIHsKKyAgICAgICpvcHBvcnR1bml0eSA9IDA7CisgICAgICBjb250aW51ZTsKKyAgICB9CisKKyAgICAvKiBMQjE2OiBEbyBub3QgYnJlYWsgd2l0aGluIOKAmF1oJywgZXZlbiB3aXRoIGludGVydmVuaW5nIHNwYWNlcy4KKyAgICAgKiBDTCBTUCogXiBOUworICAgICAqLworICAgIGlmICgobGJvLT5pbmRpcmVjdCA9PSBVX0xCX0NMT1NFX1BVTkNUVUFUSU9OKSAmJiAobGJvLT5hZnRlciA9PSBVX0xCX05PTlNUQVJURVIpKSB7CisgICAgICAqb3Bwb3J0dW5pdHkgPSAwOworICAgICAgY29udGludWU7CisgICAgfQorCisgICAgLyogTEIxNzogRG8gbm90IGJyZWFrIHdpdGhpbiDigJjZgNmAJywgZXZlbiB3aXRoIGludGVydmVuaW5nIHNwYWNlcy4KKyAgICAgKiBCMiBTUCogXiBCMgorICAgICAqLworICAgIGlmICgobGJvLT5pbmRpcmVjdCA9PSBVX0xCX0JSRUFLX0JPVEgpICYmIChsYm8tPmFmdGVyID09IFVfTEJfQlJFQUtfQk9USCkpIHsKKyAgICAgICpvcHBvcnR1bml0eSA9IDA7CisgICAgICBjb250aW51ZTsKKyAgICB9CisKKyAgICAvKiBMQjE4OiBCcmVhayBhZnRlciBzcGFjZXMuCisgICAgICogU1AgXworICAgICAqLworICAgIGlmIChsYm8tPmJlZm9yZSA9PSBVX0xCX1NQQUNFKSB7CisgICAgICAqb3Bwb3J0dW5pdHkgPSAxOworICAgICAgY29udGludWU7CisgICAgfQorCisgICAgLyogTEIxOTogRG8gbm90IGJyZWFrIGJlZm9yZSBvciBhZnRlciAgcXVvdGF0aW9uIG1hcmtzLgorICAgICAqIF4gUVUKKyAgICAgKiBRVSBeCisgICAgICovCisgICAgaWYgKChsYm8tPmJlZm9yZSA9PSBVX0xCX1FVT1RBVElPTikgfHwgKGxiby0+YWZ0ZXIgPT0gVV9MQl9RVU9UQVRJT04pKSB7CisgICAgICAqb3Bwb3J0dW5pdHkgPSAwOworICAgICAgY29udGludWU7CisgICAgfQorCisgICAgLyogTEIyMDogQnJlYWsgYmVmb3JlIGFuZCBhZnRlciB1bnJlc29sdmVkLgorICAgICAqIF8gQ0IKKyAgICAgKiBDQiBfCisgICAgICovCisgICAgaWYgKChsYm8tPmFmdGVyID09IFVfTEJfQ09OVElOR0VOVF9CUkVBSykgfHwgKGxiby0+YmVmb3JlID09IFVfTEJfQ09OVElOR0VOVF9CUkVBSykpIHsKKyAgICAgICpvcHBvcnR1bml0eSA9IDE7CisgICAgICBjb250aW51ZTsKKyAgICB9CisKKyAgICAvKiBMQjIxOiBEbyBub3QgYnJlYWsgYmVmb3JlIGh5cGhlbi1taW51cywgb3RoZXIgaHlwaGVucywKKyAgICAgKiAgICAgICBmaXhlZC13aWR0aCBzcGFjZXMsIHNtYWxsIGthbmEsIGFuZCBvdGhlciBub24tc3RhcnRlcnMsCisgICAgICogICAgICAgb3IgbGJvLT5hZnRlciBhY3V0ZSBhY2NlbnRzLgorICAgICAqIF4gQkEKKyAgICAgKiBeIEhZCisgICAgICogXiBOUworICAgICAqIEJCIF4KKyAgICAgKi8KKyAgICBpZiAoKGxiby0+YWZ0ZXIgPT0gVV9MQl9CUkVBS19BRlRFUikgfHwKKyAgICAgICAgKGxiby0+YWZ0ZXIgPT0gVV9MQl9IWVBIRU4pIHx8CisgICAgICAgIChsYm8tPmFmdGVyID09IFVfTEJfTk9OU1RBUlRFUikgfHwKKyAgICAgICAgKGxiby0+YmVmb3JlID09IFVfTEJfQlJFQUtfQkVGT1JFKSkgeworICAgICAgKm9wcG9ydHVuaXR5ID0gMDsKKyAgICAgIGNvbnRpbnVlOworICAgIH0KKworICAgIC8qIExCMjI6IERvIG5vdCBicmVhayBiZXR3ZWVuIHR3byBlbGxpcHNlcywKKyAgICAgKiAgICAgICBvciBiZXR3ZWVuIGxldHRlcnMgb3IgbnVtYmVycyBhbmQgZWxsaXBzaXMuCisgICAgICogQUwgXiBJTgorICAgICAqIElEIF4gSU4KKyAgICAgKiBJTiBeIElOCisgICAgICogTlUgXiBJTgorICAgICAqLworICAgIGlmICgobGJvLT5hZnRlciA9PSBVX0xCX0lOU0VQQVJBQkxFKSAmJgorICAgICAgICAoKGxiby0+YmVmb3JlID09IFVfTEJfQUxQSEFCRVRJQykgfHwKKyAgICAgICAgIChsYm8tPmJlZm9yZSA9PSBVX0xCX0lERU9HUkFQSElDKSB8fAorICAgICAgICAgKGxiby0+YmVmb3JlID09IFVfTEJfSU5TRVBBUkFCTEUpIHx8CisgICAgICAgICAobGJvLT5iZWZvcmUgPT0gVV9MQl9OVU1FUklDKSkpIHsKKyAgICAgICpvcHBvcnR1bml0eSA9IDA7CisgICAgICBjb250aW51ZTsKKyAgICB9CisKKyAgICAvKiBMQjIzOiBEbyBub3QgYnJlYWsgd2l0aGluIOKAmGE5Jywg4oCYM2EnLCBvciDigJhIJScuCisgICAgICogSUQgXiBQTworICAgICAqIEFMIF4gTlUKKyAgICAgKiBOVSBeIEFMCisgICAgICovCisgICAgaWYgKCgobGJvLT5iZWZvcmUgPT0gVV9MQl9JREVPR1JBUEhJQykgJiYgKGxiby0+YWZ0ZXIgPT0gVV9MQl9QT1NURklYX05VTUVSSUMpKSB8fAorICAgICAgICAoKGxiby0+YmVmb3JlID09IFVfTEJfQUxQSEFCRVRJQykgJiYgKGxiby0+YWZ0ZXIgPT0gVV9MQl9OVU1FUklDKSkgfHwKKyAgICAgICAgKChsYm8tPmJlZm9yZSA9PSBVX0xCX05VTUVSSUMpICYmIChsYm8tPmFmdGVyID09IFVfTEJfQUxQSEFCRVRJQykpKSB7CisgICAgICAqb3Bwb3J0dW5pdHkgPSAwOworICAgICAgY29udGludWU7CisgICAgfQorCisgICAgLyogTEIyNDogRG8gbm90IGJyZWFrIGJldHdlZW4gcHJlZml4IGFuZCBsZXR0ZXJzIG9yIGlkZW9ncmFwaHMuCisgICAgICogUFIgXiBJRAorICAgICAqIFBSIF4gQUwKKyAgICAgKiBQTyBeIEFMCisgICAgICovCisgICAgaWYgKCgobGJvLT5iZWZvcmUgPT0gVV9MQl9QUkVGSVhfTlVNRVJJQykgJiYgKGxiby0+YWZ0ZXIgPT0gVV9MQl9JREVPR1JBUEhJQykpIHx8CisgICAgICAgICgobGJvLT5iZWZvcmUgPT0gVV9MQl9QUkVGSVhfTlVNRVJJQykgJiYgKGxiby0+YWZ0ZXIgPT0gVV9MQl9BTFBIQUJFVElDKSkgfHwKKyAgICAgICAgKChsYm8tPmJlZm9yZSA9PSBVX0xCX1BPU1RGSVhfTlVNRVJJQykgJiYgKGxiby0+YWZ0ZXIgPT0gVV9MQl9BTFBIQUJFVElDKSkpIHsKKyAgICAgICpvcHBvcnR1bml0eSA9IDA7CisgICAgICBjb250aW51ZTsKKyAgICB9CisKKyAgICAvKiBMQjI1OiAgRG8gbm90IGJyZWFrIGJldHdlZW4gdGhlIGZvbGxvd2luZyBwYWlycyBvZiBjbGFzc2VzIHJlbGV2YW50IHRvIG51bWJlcnM6CisgICAgICogQ0wgXiBQTworICAgICAqIENMIF4gUFIKKyAgICAgKiBOVSBeIFBPCisgICAgICogTlUgXiBQUgorICAgICAqIFBPIF4gT1AKKyAgICAgKiBQTyBeIE5VCisgICAgICogUFIgXiBPUAorICAgICAqIFBSIF4gTlUKKyAgICAgKiBIWSBeIE5VCisgICAgICogSVMgXiBOVQorICAgICAqIE5VIF4gTlUKKyAgICAgKiBTWSBeIE5VCisgICAgICovCisgICAgaWYgKCgobGJvLT5iZWZvcmUgPT0gVV9MQl9DTE9TRV9QVU5DVFVBVElPTikgJiYgKGxiby0+YWZ0ZXIgPT0gVV9MQl9QT1NURklYX05VTUVSSUMpKSB8fAorICAgICAgICAoKGxiby0+YmVmb3JlID09IFVfTEJfQ0xPU0VfUFVOQ1RVQVRJT04pICYmIChsYm8tPmFmdGVyID09IFVfTEJfUFJFRklYX05VTUVSSUMpKSB8fAorICAgICAgICAoKGxiby0+YmVmb3JlID09IFVfTEJfTlVNRVJJQykgJiYgKGxiby0+YWZ0ZXIgPT0gVV9MQl9QT1NURklYX05VTUVSSUMpKSB8fAorICAgICAgICAoKGxiby0+YmVmb3JlID09IFVfTEJfTlVNRVJJQykgJiYgKGxiby0+YWZ0ZXIgPT0gVV9MQl9QUkVGSVhfTlVNRVJJQykpIHx8CisgICAgICAgICgobGJvLT5iZWZvcmUgPT0gVV9MQl9QT1NURklYX05VTUVSSUMpICYmIChsYm8tPmFmdGVyID09IFVfTEJfT1BFTl9QVU5DVFVBVElPTikpIHx8CisgICAgICAgICgobGJvLT5iZWZvcmUgPT0gVV9MQl9QT1NURklYX05VTUVSSUMpICYmIChsYm8tPmFmdGVyID09IFVfTEJfTlVNRVJJQykpIHx8CisgICAgICAgICgobGJvLT5iZWZvcmUgPT0gVV9MQl9QUkVGSVhfTlVNRVJJQykgJiYgKGxiby0+YWZ0ZXIgPT0gVV9MQl9PUEVOX1BVTkNUVUFUSU9OKSkgfHwKKyAgICAgICAgKChsYm8tPmJlZm9yZSA9PSBVX0xCX1BSRUZJWF9OVU1FUklDKSAmJiAobGJvLT5hZnRlciA9PSBVX0xCX05VTUVSSUMpKSB8fAorICAgICAgICAoKGxiby0+YmVmb3JlID09IFVfTEJfSFlQSEVOKSAmJiAobGJvLT5hZnRlciA9PSBVX0xCX05VTUVSSUMpKSB8fAorICAgICAgICAoKGxiby0+YmVmb3JlID09IFVfTEJfSU5GSVhfTlVNRVJJQykgJiYgKGxiby0+YWZ0ZXIgPT0gVV9MQl9OVU1FUklDKSkgfHwKKyAgICAgICAgKChsYm8tPmJlZm9yZSA9PSBVX0xCX05VTUVSSUMpICYmIChsYm8tPmFmdGVyID09IFVfTEJfTlVNRVJJQykpIHx8CisgICAgICAgICgobGJvLT5iZWZvcmUgPT0gVV9MQl9CUkVBS19TWU1CT0xTKSAmJiAobGJvLT5hZnRlciA9PSBVX0xCX05VTUVSSUMpKSkgeworICAgICAgKm9wcG9ydHVuaXR5ID0gMDsKKyAgICAgIGNvbnRpbnVlOworICAgIH0KKworICAgIC8qIExCMjY6IERvIG5vdCBicmVhayBhIEtvcmVhbiBzeWxsYWJsZS4KKyAgICAgKiBKTCBeIChKTCB8IEpWIHwgSDIgfCBIMykKKyAgICAgKiAoSlYgfCBIMikgXiAoSlYgfCBKVCkKKyAgICAgKiAoSlQgfCBIMykgXiBKVAorICAgICAqLworICAgIGlmICgobGJvLT5iZWZvcmUgPT0gVV9MQl9KTCkgJiYKKyAgICAgICAgKChsYm8tPmFmdGVyID09IFVfTEJfSkwpIHx8CisgICAgICAgICAobGJvLT5hZnRlciA9PSBVX0xCX0pWKSB8fAorICAgICAgICAgKGxiby0+YWZ0ZXIgPT0gVV9MQl9IMikgfHwKKyAgICAgICAgIChsYm8tPmFmdGVyID09IFVfTEJfSDMpKSkgeworICAgICAgKm9wcG9ydHVuaXR5ID0gMDsKKyAgICAgIGNvbnRpbnVlOworICAgIH0KKyAgICBpZiAoKChsYm8tPmJlZm9yZSA9PSBVX0xCX0pWKSB8fCAobGJvLT5iZWZvcmUgPT0gVV9MQl9IMikpICYmCisgICAgICAgICgobGJvLT5hZnRlciA9PSBVX0xCX0pWKSB8fCAobGJvLT5hZnRlciA9PSBVX0xCX0pUKSkpIHsKKyAgICAgICpvcHBvcnR1bml0eSA9IDA7CisgICAgICBjb250aW51ZTsKKyAgICB9CisgICAgaWYgKCgobGJvLT5iZWZvcmUgPT0gVV9MQl9KVCkgfHwgKGxiby0+YmVmb3JlID09IFVfTEJfSDMpKSAmJgorICAgICAgICAobGJvLT5hZnRlciA9PSBVX0xCX0pUKSkgeworICAgICAgKm9wcG9ydHVuaXR5ID0gMDsKKyAgICAgIGNvbnRpbnVlOworICAgIH0KKworICAgIC8qIExCMjc6IFRyZWF0IGEgS29yZWFuIFN5bGxhYmxlIEJsb2NrIHRoZSBzYW1lIGFzIElELgorICAgICAqIChKTCB8IEpWIHwgSlQgfCBIMiB8IEgzKSBeIElOCisgICAgICogKEpMIHwgSlYgfCBKVCB8IEgyIHwgSDMpIF4gUE8KKyAgICAgKiBQUiBeIChKTCB8IEpWIHwgSlQgfCBIMiB8IEgzKQorICAgICAqLworICAgIGlmICgoKGxiby0+YmVmb3JlID09IFVfTEJfSkwpIHx8IChsYm8tPmJlZm9yZSA9PSBVX0xCX0pWKSB8fCAobGJvLT5iZWZvcmUgPT0gVV9MQl9KVCkgfHwKKyAgICAgICAgIChsYm8tPmJlZm9yZSA9PSBVX0xCX0gyKSB8fCAobGJvLT5iZWZvcmUgPT0gVV9MQl9IMykpICYmCisgICAgICAgIChsYm8tPmFmdGVyID09IFVfTEJfSU5TRVBBUkFCTEUpKSB7CisgICAgICAqb3Bwb3J0dW5pdHkgPSAwOworICAgICAgY29udGludWU7CisgICAgfQorICAgIGlmICgoKGxiby0+YmVmb3JlID09IFVfTEJfSkwpIHx8IChsYm8tPmJlZm9yZSA9PSBVX0xCX0pWKSB8fCAobGJvLT5iZWZvcmUgPT0gVV9MQl9KVCkgfHwKKyAgICAgICAgIChsYm8tPmJlZm9yZSA9PSBVX0xCX0gyKSB8fCAobGJvLT5iZWZvcmUgPT0gVV9MQl9IMykpICYmCisgICAgICAgIChsYm8tPmFmdGVyID09IFVfTEJfUE9TVEZJWF9OVU1FUklDKSkgeworICAgICAgKm9wcG9ydHVuaXR5ID0gMDsKKyAgICAgIGNvbnRpbnVlOworICAgIH0KKyAgICBpZiAoKGxiby0+YmVmb3JlID09IFVfTEJfUFJFRklYX05VTUVSSUMpICYmCisgICAgICAgICgobGJvLT5hZnRlciA9PSBVX0xCX0pMKSB8fCAobGJvLT5hZnRlciA9PSBVX0xCX0pWKSB8fCAobGJvLT5hZnRlciA9PSBVX0xCX0pUKSB8fAorICAgICAgICAgKGxiby0+YWZ0ZXIgPT0gVV9MQl9IMikgfHwgKGxiby0+YWZ0ZXIgPT0gVV9MQl9IMykpKSB7CisgICAgICAqb3Bwb3J0dW5pdHkgPSAwOworICAgICAgY29udGludWU7CisgICAgfQorCisgICAgLyogTEIyODogRG8gbm90IGJyZWFrIGJldHdlZW4gYWxwaGFiZXRpY3MuCisgICAgICogQUwgXiBBTAorICAgICAqLworICAgIGlmICgobGJvLT5iZWZvcmUgPT0gVV9MQl9BTFBIQUJFVElDKSAmJiAobGJvLT5hZnRlciA9PSBVX0xCX0FMUEhBQkVUSUMpKSB7CisgICAgICAqb3Bwb3J0dW5pdHkgPSAwOworICAgICAgY29udGludWU7CisgICAgfQorCisgICAgLyogTEIyOTogRG8gbm90IGJyZWFrIGJldHdlZW4gbnVtZXJpYyBwdW5jdHVhdGlvbiBhbmQgYWxwaGFiZXRpY3MuCisgICAgICogSVMgXiBBTAorICAgICAqLworICAgIGlmICgobGJvLT5iZWZvcmUgPT0gVV9MQl9JTkZJWF9OVU1FUklDKSAmJiAobGJvLT5hZnRlciA9PSBVX0xCX0FMUEhBQkVUSUMpKSB7CisgICAgICAqb3Bwb3J0dW5pdHkgPSAwOworICAgICAgY29udGludWU7CisgICAgfQorCisgICAgLyogTEIzMDogRG8gbm90IGJyZWFrIGJldHdlZW4gbGV0dGVycywgbnVtYmVycywgb3Igb3JkaW5hcnkgc3ltYm9scworICAgICAqICAgICAgIGFuZCBvcGVuaW5nIG9yIGNsb3NpbmcgcHVuY3R1YXRpb24uCisgICAgICogKEFMIHwgTlUpIF4gT1AKKyAgICAgKiBDTCBeIChBTCB8IE5VKQorICAgICAqLworICAgIGlmICgoKGxiby0+YmVmb3JlID09IFVfTEJfQUxQSEFCRVRJQykgfHwgKGxiby0+YmVmb3JlID09IFVfTEJfTlVNRVJJQykpICYmCisgICAgICAgIChsYm8tPmFmdGVyID09IFVfTEJfT1BFTl9QVU5DVFVBVElPTikpIHsKKyAgICAgICpvcHBvcnR1bml0eSA9IDA7CisgICAgICBjb250aW51ZTsKKyAgICB9CisgICAgaWYgKChsYm8tPmJlZm9yZSA9PSBVX0xCX0NMT1NFX1BVTkNUVUFUSU9OKSAmJgorICAgICAgICAoKGxiby0+YWZ0ZXIgPT0gVV9MQl9BTFBIQUJFVElDKSB8fCAobGJvLT5hZnRlciA9PSBVX0xCX05VTUVSSUMpKSkgeworICAgICAgKm9wcG9ydHVuaXR5ID0gMDsKKyAgICAgIGNvbnRpbnVlOworICAgIH0KKworICAgIC8qIFVuaXggb3B0aW9ucyBiZWdpbiB3aXRoIGEgbWludXMgc2lnbi4gKi8KKyAgICBpZiAoKGxiby0+YmVmb3JlID09IFVfTEJfSFlQSEVOKSAmJgorICAgICAgICAobGJvLT5hZnRlciAhPSBVX0xCX1NQQUNFKSAmJgorICAgICAgICAobGJvLT5wcmV2aW91cyA9PSBVX0xCX1NQQUNFKSkgeworICAgICAgKm9wcG9ydHVuaXR5ID0gMDsKKyAgICAgIGNvbnRpbnVlOworICAgIH0KKworICAgIC8qIExCMzE6IEJyZWFrIGV2ZXJ5d2hlcmUgZWxzZS4KKyAgICAgKiBBTEwgXworICAgICAqIF8gQUxMCisgICAgICovCisgICAgKm9wcG9ydHVuaXR5ID0gMTsKKyAgfQorfQorCisjZWxzZSAvKiBIQVZFX0lDVSAqLwordHlwZWRlZiBzdHJ1Y3QgeworICB1bnNpZ25lZCBpbnQgaW5kZXg7CisgIGludCB3YXNTcGFjZTsKK30gTGluZUJyZWFrT3Bwb3J0dW5pdGllc1N0YXRlOworCitzdGF0aWMgdm9pZAorcHJlcGFyZUxpbmVCcmVha09wcG9ydHVuaXRpZXNTdGF0ZSAoTGluZUJyZWFrT3Bwb3J0dW5pdGllc1N0YXRlICpsYm8pIHsKKyAgbGJvLT5pbmRleCA9IDA7CisgIGxiby0+d2FzU3BhY2UgPSAwOworfQorCitzdGF0aWMgdm9pZAorZmluZExpbmVCcmVha09wcG9ydHVuaXRpZXMgKAorICBCcmFpbGxlQ29udHJhY3Rpb25EYXRhICpiY2QsCisgIExpbmVCcmVha09wcG9ydHVuaXRpZXNTdGF0ZSAqbGJvLAorICB1bnNpZ25lZCBjaGFyICpvcHBvcnR1bml0aWVzLAorICBjb25zdCB3Y2hhcl90ICpjaGFyYWN0ZXJzLCB1bnNpZ25lZCBpbnQgZW5kCispIHsKKyAgd2hpbGUgKGxiby0+aW5kZXggPD0gZW5kKSB7CisgICAgaW50IGlzU3BhY2UgPSB0ZXN0Q2hhcmFjdGVyKGJjZCwgY2hhcmFjdGVyc1tsYm8tPmluZGV4XSwgQ1RDX1NwYWNlKTsKKyAgICBvcHBvcnR1bml0aWVzW2xiby0+aW5kZXhdID0gbGJvLT53YXNTcGFjZSAmJiAhaXNTcGFjZTsKKworICAgIGxiby0+d2FzU3BhY2UgPSBpc1NwYWNlOworICAgIGxiby0+aW5kZXggKz0gMTsKKyAgfQorfQorI2VuZGlmIC8qIEhBVkVfSUNVICovCisKK3N0YXRpYyBpbnQKK2lzTGluZUJyZWFrT3Bwb3J0dW5pdHkgKAorICBCcmFpbGxlQ29udHJhY3Rpb25EYXRhICpiY2QsCisgIExpbmVCcmVha09wcG9ydHVuaXRpZXNTdGF0ZSAqbGJvLAorICB1bnNpZ25lZCBjaGFyICpvcHBvcnR1bml0aWVzCispIHsKKyAgdW5zaWduZWQgaW50IGluZGV4ID0gZ2V0SW5wdXRDb25zdW1lZChiY2QpOworICBpZiAoaW5kZXggPT0gZ2V0SW5wdXRDb3VudChiY2QpKSByZXR1cm4gMTsKKworICBmaW5kTGluZUJyZWFrT3Bwb3J0dW5pdGllcyhiY2QsIGxibywgb3Bwb3J0dW5pdGllcywgYmNkLT5pbnB1dC5iZWdpbiwgaW5kZXgpOworICByZXR1cm4gb3Bwb3J0dW5pdGllc1tpbmRleF07Cit9CisKK3N0YXRpYyBpbmxpbmUgQ29udHJhY3Rpb25UYWJsZUhlYWRlciAqCitnZXRDb250cmFjdGlvblRhYmxlSGVhZGVyIChCcmFpbGxlQ29udHJhY3Rpb25EYXRhICpiY2QpIHsKKyAgcmV0dXJuIGJjZC0+dGFibGUtPmRhdGEuaW50ZXJuYWwuaGVhZGVyLmZpZWxkczsKK30KKworc3RhdGljIGlubGluZSBjb25zdCB2b2lkICoKK2dldENvbnRyYWN0aW9uVGFibGVJdGVtIChCcmFpbGxlQ29udHJhY3Rpb25EYXRhICpiY2QsIENvbnRyYWN0aW9uVGFibGVPZmZzZXQgb2Zmc2V0KSB7CisgIHJldHVybiAmYmNkLT50YWJsZS0+ZGF0YS5pbnRlcm5hbC5oZWFkZXIuYnl0ZXNbb2Zmc2V0XTsKK30KKworc3RhdGljIGNvbnN0IENvbnRyYWN0aW9uVGFibGVDaGFyYWN0ZXIgKgorZ2V0Q29udHJhY3Rpb25UYWJsZUNoYXJhY3RlciAoQnJhaWxsZUNvbnRyYWN0aW9uRGF0YSAqYmNkLCB3Y2hhcl90IGNoYXJhY3RlcikgeworICBjb25zdCBDb250cmFjdGlvblRhYmxlQ2hhcmFjdGVyICpjaGFyYWN0ZXJzID0gZ2V0Q29udHJhY3Rpb25UYWJsZUl0ZW0oYmNkLCBnZXRDb250cmFjdGlvblRhYmxlSGVhZGVyKGJjZCktPmNoYXJhY3RlcnMpOworICBpbnQgZmlyc3QgPSAwOworICBpbnQgbGFzdCA9IGdldENvbnRyYWN0aW9uVGFibGVIZWFkZXIoYmNkKS0+Y2hhcmFjdGVyQ291bnQgLSAxOworCisgIHdoaWxlIChmaXJzdCA8PSBsYXN0KSB7CisgICAgaW50IGN1cnJlbnQgPSAoZmlyc3QgKyBsYXN0KSAvIDI7CisgICAgY29uc3QgQ29udHJhY3Rpb25UYWJsZUNoYXJhY3RlciAqY3RjID0gJmNoYXJhY3RlcnNbY3VycmVudF07CisKKyAgICBpZiAoY3RjLT52YWx1ZSA8IGNoYXJhY3RlcikgeworICAgICAgZmlyc3QgPSBjdXJyZW50ICsgMTsKKyAgICB9IGVsc2UgaWYgKGN0Yy0+dmFsdWUgPiBjaGFyYWN0ZXIpIHsKKyAgICAgIGxhc3QgPSBjdXJyZW50IC0gMTsKKyAgICB9IGVsc2UgeworICAgICAgcmV0dXJuIGN0YzsKKyAgICB9CisgIH0KKworICByZXR1cm4gTlVMTDsKK30KKworc3RhdGljIGludAorYWRkUnVsZSAoQnJhaWxsZUNvbnRyYWN0aW9uRGF0YSAqYmNkLCBDb250cmFjdGlvblRhYmxlUnVsZSAqcnVsZSkgeworICBDb250cmFjdGlvblRhYmxlICp0YWJsZSA9IGJjZC0+dGFibGU7CisKKyAgaWYgKHRhYmxlLT5ydWxlcy5jb3VudCA9PSB0YWJsZS0+cnVsZXMuc2l6ZSkgeworICAgIHNpemVfdCBuZXdTaXplID0gdGFibGUtPnJ1bGVzLnNpemUgKyAxMDsKKyAgICBDb250cmFjdGlvblRhYmxlUnVsZSAqKm5ld0FycmF5ID0gcmVhbGxvYyh0YWJsZS0+cnVsZXMuYXJyYXksIEFSUkFZX1NJWkUobmV3QXJyYXksIG5ld1NpemUpKTsKKworICAgIGlmICghbmV3QXJyYXkpIHsKKyAgICAgIGxvZ01hbGxvY0Vycm9yKCk7CisgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICB0YWJsZS0+cnVsZXMuYXJyYXkgPSBuZXdBcnJheTsKKyAgICB0YWJsZS0+cnVsZXMuc2l6ZSA9IG5ld1NpemU7CisgIH0KKworICB0YWJsZS0+cnVsZXMuYXJyYXlbdGFibGUtPnJ1bGVzLmNvdW50KytdID0gcnVsZTsKKyAgcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBzaXplX3QKK21ha2VEZWNvbXBvc2VkQnJhaWxsZSAoQnJhaWxsZUNvbnRyYWN0aW9uRGF0YSAqYmNkLCB3Y2hhcl90IGNoYXJhY3RlciwgQllURSAqY2VsbHMsIHNpemVfdCBzaXplKSB7CisgIHdjaGFyX3QgY2hhcmFjdGVyc1swWDEwXTsKKyAgc2l6ZV90IGNoYXJhY3RlckNvdW50ID0gZGVjb21wb3NlQ2hhcmFjdGVyKGNoYXJhY3RlciwgY2hhcmFjdGVycywgQVJSQVlfQ09VTlQoY2hhcmFjdGVycykpOworCisgIGlmIChjaGFyYWN0ZXJDb3VudCA+IDEpIHsKKyAgICBCWVRFICpmcm9tID0gY2VsbHM7CisgICAgY29uc3QgQllURSAqZW5kID0gZnJvbSArIHNpemU7CisgICAgdW5zaWduZWQgaW50IGNoYXJhY3RlckluZGV4ID0gMTsKKworICAgIHdoaWxlICgxKSB7CisgICAgICB3Y2hhcl90IGNoYXJhY3RlciA9IGNoYXJhY3RlcnNbY2hhcmFjdGVySW5kZXhdOworICAgICAgY29uc3QgQ2hhcmFjdGVyRW50cnkgKmVudHJ5ID0gZ2V0Q2hhcmFjdGVyRW50cnkoYmNkLCBjaGFyYWN0ZXIpOworICAgICAgaWYgKCFlbnRyeSkgYnJlYWs7CisgICAgICBpZiAoY2hhcmFjdGVyICE9IGVudHJ5LT52YWx1ZSkgYnJlYWs7CisKKyAgICAgIGNvbnN0IENvbnRyYWN0aW9uVGFibGVSdWxlICpydWxlID0gZW50cnktPmFsd2F5czsKKyAgICAgIGlmICghcnVsZSkgYnJlYWs7CisKKyAgICAgIHVuc2lnbmVkIGludCBjZWxsQ291bnQgPSBydWxlLT5yZXBsZW47CisgICAgICBpZiAoIWNlbGxDb3VudCkgYnJlYWs7CisgICAgICBpZiAoKGVuZCAtIGZyb20pIDwgY2VsbENvdW50KSBicmVhazsKKyAgICAgIGZyb20gPSBtZW1wY3B5KGZyb20sICZydWxlLT5maW5kcmVwW3J1bGUtPmZpbmRsZW5dLCBjZWxsQ291bnQpOworCisgICAgICBpZiAoIWNoYXJhY3RlckluZGV4KSByZXR1cm4gZnJvbSAtIGNlbGxzOworICAgICAgaWYgKCsrY2hhcmFjdGVySW5kZXggPT0gY2hhcmFjdGVyQ291bnQpIGNoYXJhY3RlckluZGV4ID0gMDsKKyAgICB9CisgIH0KKworICByZXR1cm4gMDsKK30KKwordHlwZWRlZiBzdHJ1Y3QgeworICBCcmFpbGxlQ29udHJhY3Rpb25EYXRhICpiY2Q7CisgIENoYXJhY3RlckVudHJ5ICpjaGFyYWN0ZXI7Cit9IFNldEFsd2F5c1J1bGVEYXRhOworCitzdGF0aWMgaW50CitzZXRBbHdheXNSdWxlICh3Y2hhcl90IGNoYXJhY3Rlciwgdm9pZCAqZGF0YSkgeworICBTZXRBbHdheXNSdWxlRGF0YSAqc2FyID0gZGF0YTsKKyAgQnJhaWxsZUNvbnRyYWN0aW9uRGF0YSAqYmNkID0gc2FyLT5iY2Q7CisKKyAgQ2hhcmFjdGVyRW50cnkgKmVudHJ5ID0gc2FyLT5jaGFyYWN0ZXI7CisgIGNvbnN0IENvbnRyYWN0aW9uVGFibGVDaGFyYWN0ZXIgKmN0YyA9IGdldENvbnRyYWN0aW9uVGFibGVDaGFyYWN0ZXIoYmNkLCBjaGFyYWN0ZXIpOworCisgIGlmIChjdGMpIHsKKyAgICBDb250cmFjdGlvblRhYmxlT2Zmc2V0IG9mZnNldCA9IGN0Yy0+YWx3YXlzOworCisgICAgaWYgKG9mZnNldCkgeworICAgICAgY29uc3QgQ29udHJhY3Rpb25UYWJsZVJ1bGUgKnJ1bGUgPSBnZXRDb250cmFjdGlvblRhYmxlSXRlbShiY2QsIG9mZnNldCk7CisKKyAgICAgIGlmIChydWxlLT5yZXBsZW4pIHsKKyAgICAgICAgZW50cnktPmFsd2F5cyA9IHJ1bGU7CisgICAgICAgIHJldHVybiAxOworICAgICAgfQorICAgIH0KKyAgfQorCisgIGlmIChjaGFyYWN0ZXIgPT0gZW50cnktPnZhbHVlKSB7CisgICAgQllURSBjZWxsc1swWDEwMF07CisgICAgc2l6ZV90IGNvdW50ID0gbWFrZURlY29tcG9zZWRCcmFpbGxlKGJjZCwgY2hhcmFjdGVyLCBjZWxscywgc2l6ZW9mKGNlbGxzKSk7CisKKyAgICB7CisgICAgICB1bnNpZ25lZCBpbnQgcG9zaXRpb247CisgICAgICBmaW5kQ2hhcmFjdGVyRW50cnkoYmNkLCBjaGFyYWN0ZXIsICZwb3NpdGlvbik7CisKKyAgICAgIGVudHJ5ID0gJmJjZC0+dGFibGUtPmNoYXJhY3RlcnMuYXJyYXlbcG9zaXRpb25dOworICAgICAgc2FyLT5jaGFyYWN0ZXIgPSBlbnRyeTsKKyAgICB9CisKKyAgICBpZiAoY291bnQpIHsKKyAgICAgIENvbnRyYWN0aW9uVGFibGVSdWxlICpydWxlOworICAgICAgc2l6ZV90IHNpemUgPSBzaXplb2YoKnJ1bGUpICsgc2l6ZW9mKGNoYXJhY3RlcikgKyBjb3VudDsKKworICAgICAgaWYgKChydWxlID0gbWFsbG9jKHNpemUpKSkgeworICAgICAgICBtZW1zZXQocnVsZSwgMCwgc2l6ZW9mKCpydWxlKSk7CisgICAgICAgIHJ1bGUtPm9wY29kZSA9IENUT19BbHdheXM7CisKKyAgICAgICAgcnVsZS0+ZmluZHJlcFswXSA9IGNoYXJhY3RlcjsKKyAgICAgICAgbWVtY3B5KCZydWxlLT5maW5kcmVwW3J1bGUtPmZpbmRsZW4gPSAxXSwgY2VsbHMsIChydWxlLT5yZXBsZW4gPSBjb3VudCkpOworCisgICAgICAgIGlmIChhZGRSdWxlKGJjZCwgcnVsZSkpIHsKKyAgICAgICAgICBlbnRyeS0+YWx3YXlzID0gcnVsZTsKKyAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgfQorCisgICAgICAgIGZyZWUocnVsZSk7CisgICAgICB9CisgICAgfQorICB9CisKKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB3Y2hhcl90Cit0b0xvd2VyQ2FzZSAoQnJhaWxsZUNvbnRyYWN0aW9uRGF0YSAqYmNkLCB3Y2hhcl90IGNoYXJhY3RlcikgeworICBjb25zdCBDaGFyYWN0ZXJFbnRyeSAqZW50cnkgPSBnZXRDaGFyYWN0ZXJFbnRyeShiY2QsIGNoYXJhY3Rlcik7CisgIHJldHVybiBlbnRyeT8gZW50cnktPmxvd2VyY2FzZTogY2hhcmFjdGVyOworfQorCitzdGF0aWMgY29uc3QgQ29udHJhY3Rpb25UYWJsZVJ1bGUgKgorZ2V0QWx3YXlzUnVsZSAoQnJhaWxsZUNvbnRyYWN0aW9uRGF0YSAqYmNkLCB3Y2hhcl90IGNoYXJhY3RlcikgeworICBjb25zdCBDaGFyYWN0ZXJFbnRyeSAqZW50cnkgPSBnZXRDaGFyYWN0ZXJFbnRyeShiY2QsIHRvTG93ZXJDYXNlKGJjZCwgY2hhcmFjdGVyKSk7CisgIHJldHVybiBlbnRyeT8gZW50cnktPmFsd2F5czogTlVMTDsKK30KKworc3RhdGljIHdjaGFyX3QKK2dldEJlc3RDaGFyYWN0ZXIgKEJyYWlsbGVDb250cmFjdGlvbkRhdGEgKmJjZCwgd2NoYXJfdCBjaGFyYWN0ZXIpIHsKKyAgY29uc3QgQ29udHJhY3Rpb25UYWJsZVJ1bGUgKnJ1bGUgPSBnZXRBbHdheXNSdWxlKGJjZCwgY2hhcmFjdGVyKTsKKyAgcmV0dXJuIHJ1bGU/IHJ1bGUtPmZpbmRyZXBbMF06IDA7Cit9CisKK3N0YXRpYyBpbnQKK3NhbWVDaGFyYWN0ZXJzIChCcmFpbGxlQ29udHJhY3Rpb25EYXRhICpiY2QsIHdjaGFyX3QgY2hhcmFjdGVyMSwgd2NoYXJfdCBjaGFyYWN0ZXIyKSB7CisgIHdjaGFyX3QgYmVzdDEgPSBnZXRCZXN0Q2hhcmFjdGVyKGJjZCwgY2hhcmFjdGVyMSk7CisgIHJldHVybiBiZXN0MSAmJiAoYmVzdDEgPT0gZ2V0QmVzdENoYXJhY3RlcihiY2QsIGNoYXJhY3RlcjIpKTsKK30KKworc3RhdGljIGludAorbWF0Y2hDdXJyZW50UnVsZSAoQnJhaWxsZUNvbnRyYWN0aW9uRGF0YSAqYmNkKSB7CisgIGNvbnN0IHdjaGFyX3QgKmlucHV0ID0gYmNkLT5pbnB1dC5jdXJyZW50OworICBjb25zdCB3Y2hhcl90ICpmaW5kID0gYmNkLT5jdXJyZW50LnJ1bGUtPmZpbmRyZXA7CisgIGNvbnN0IHdjaGFyX3QgKmZpbmRFbmQgPSBmaW5kICsgYmNkLT5jdXJyZW50Lmxlbmd0aDsKKworICB3aGlsZSAoZmluZCA8IGZpbmRFbmQpIHsKKyAgICBpZiAodG9Mb3dlckNhc2UoYmNkLCAqaW5wdXQrKykgIT0gdG9Mb3dlckNhc2UoYmNkLCAqZmluZCsrKSkgeworICAgICAgcmV0dXJuIDA7CisgICAgfQorICB9CisKKyAgcmV0dXJuIDE7Cit9CisKK3N0YXRpYyB2b2lkCitzZXRCZWZvcmUgKEJyYWlsbGVDb250cmFjdGlvbkRhdGEgKmJjZCkgeworICBiY2QtPmN1cnJlbnQuYmVmb3JlID0gKGJjZC0+aW5wdXQuY3VycmVudCA9PSBiY2QtPmlucHV0LmJlZ2luKT8gV0NfQygnICcpOiBiY2QtPmlucHV0LmN1cnJlbnRbLTFdOworfQorCitzdGF0aWMgdm9pZAorc2V0QWZ0ZXIgKEJyYWlsbGVDb250cmFjdGlvbkRhdGEgKmJjZCwgaW50IGxlbmd0aCkgeworICBiY2QtPmN1cnJlbnQuYWZ0ZXIgPSAoYmNkLT5pbnB1dC5jdXJyZW50ICsgbGVuZ3RoIDwgYmNkLT5pbnB1dC5lbmQpPyBiY2QtPmlucHV0LmN1cnJlbnRbbGVuZ3RoXTogV0NfQygnICcpOworfQorCitzdGF0aWMgaW50Citpc0JlZ2lubmluZyAoQnJhaWxsZUNvbnRyYWN0aW9uRGF0YSAqYmNkKSB7CisgIGNvbnN0IHdjaGFyX3QgKnB0ciA9IGJjZC0+aW5wdXQuY3VycmVudDsKKworICB3aGlsZSAocHRyID4gYmNkLT5pbnB1dC5iZWdpbikgeworICAgIGlmICghdGVzdENoYXJhY3RlcihiY2QsICotLXB0ciwgQ1RDX1B1bmN0dWF0aW9uKSkgeworICAgICAgaWYgKCF0ZXN0Q2hhcmFjdGVyKGJjZCwgKnB0ciwgQ1RDX1NwYWNlKSkgcmV0dXJuIDA7CisgICAgICBicmVhazsKKyAgICB9CisgIH0KKworICByZXR1cm4gMTsKK30KKworc3RhdGljIGludAoraXNFbmRpbmcgKEJyYWlsbGVDb250cmFjdGlvbkRhdGEgKmJjZCkgeworICBjb25zdCB3Y2hhcl90ICpwdHIgPSBiY2QtPmlucHV0LmN1cnJlbnQgKyBiY2QtPmN1cnJlbnQubGVuZ3RoOworCisgIHdoaWxlIChwdHIgPCBiY2QtPmlucHV0LmVuZCkgeworICAgIGlmICghdGVzdENoYXJhY3RlcihiY2QsICpwdHIsIENUQ19QdW5jdHVhdGlvbikpIHsKKyAgICAgIGlmICghdGVzdENoYXJhY3RlcihiY2QsICpwdHIsIENUQ19TcGFjZSkpIHJldHVybiAwOworICAgICAgYnJlYWs7CisgICAgfQorCisgICAgcHRyICs9IDE7CisgIH0KKworICByZXR1cm4gMTsKK30KKworc3RhdGljIHZvaWQKK3NldEN1cnJlbnRSdWxlIChCcmFpbGxlQ29udHJhY3Rpb25EYXRhICpiY2QsIGNvbnN0IENvbnRyYWN0aW9uVGFibGVSdWxlICpydWxlKSB7CisgIGJjZC0+Y3VycmVudC5ydWxlID0gcnVsZTsKKyAgYmNkLT5jdXJyZW50Lm9wY29kZSA9IGJjZC0+Y3VycmVudC5ydWxlLT5vcGNvZGU7CisgIGJjZC0+Y3VycmVudC5sZW5ndGggPSBiY2QtPmN1cnJlbnQucnVsZS0+ZmluZGxlbjsKKyAgc2V0QWZ0ZXIoYmNkLCBiY2QtPmN1cnJlbnQubGVuZ3RoKTsKK30KKworc3RhdGljIGludAorc2VsZWN0UnVsZSAoQnJhaWxsZUNvbnRyYWN0aW9uRGF0YSAqYmNkLCBpbnQgbGVuZ3RoKSB7CisgIGlmIChsZW5ndGggPCAxKSByZXR1cm4gMDsKKworICBpbnQgcnVsZU9mZnNldDsKKyAgaW50IG1heGltdW1MZW5ndGg7CisKKyAgaWYgKGxlbmd0aCA9PSAxKSB7CisgICAgd2NoYXJfdCBjaGFyYWN0ZXIgPSB0b0xvd2VyQ2FzZShiY2QsICpiY2QtPmlucHV0LmN1cnJlbnQpOworICAgIGNvbnN0IENvbnRyYWN0aW9uVGFibGVDaGFyYWN0ZXIgKmN0YyA9IGdldENvbnRyYWN0aW9uVGFibGVDaGFyYWN0ZXIoYmNkLCBjaGFyYWN0ZXIpOworCisgICAgaWYgKCFjdGMpIHsKKyAgICAgIGNvbnN0IENoYXJhY3RlckVudHJ5ICplbnRyeSA9IGdldENoYXJhY3RlckVudHJ5KGJjZCwgY2hhcmFjdGVyKTsKKyAgICAgIGlmICghZW50cnkpIHJldHVybiAwOworCisgICAgICBjb25zdCBDb250cmFjdGlvblRhYmxlUnVsZSAqcnVsZSA9IGVudHJ5LT5hbHdheXM7CisgICAgICBpZiAoIXJ1bGUpIHJldHVybiAwOworCisgICAgICBzZXRDdXJyZW50UnVsZShiY2QsIHJ1bGUpOworICAgICAgcmV0dXJuIDE7CisgICAgfQorCisgICAgcnVsZU9mZnNldCA9IGN0Yy0+cnVsZXM7CisgICAgbWF4aW11bUxlbmd0aCA9IDE7CisgIH0gZWxzZSB7CisgICAgY29uc3Qgd2NoYXJfdCBjaGFyYWN0ZXJzW10gPSB7CisgICAgICB0b0xvd2VyQ2FzZShiY2QsIGJjZC0+aW5wdXQuY3VycmVudFswXSksCisgICAgICB0b0xvd2VyQ2FzZShiY2QsIGJjZC0+aW5wdXQuY3VycmVudFsxXSksCisgICAgfTsKKworICAgIHJ1bGVPZmZzZXQgPSBnZXRDb250cmFjdGlvblRhYmxlSGVhZGVyKGJjZCktPnJ1bGVzW0NUSChjaGFyYWN0ZXJzKV07CisgICAgbWF4aW11bUxlbmd0aCA9IDA7CisgIH0KKworICB3aGlsZSAocnVsZU9mZnNldCkgeworICAgIHNldEN1cnJlbnRSdWxlKGJjZCwgZ2V0Q29udHJhY3Rpb25UYWJsZUl0ZW0oYmNkLCBydWxlT2Zmc2V0KSk7CisKKyAgICBpZiAoKGxlbmd0aCA9PSAxKSB8fAorICAgICAgICAoKGJjZC0+Y3VycmVudC5sZW5ndGggPD0gbGVuZ3RoKSAmJgorICAgICAgICAgbWF0Y2hDdXJyZW50UnVsZShiY2QpKSkgeworICAgICAgaWYgKCFtYXhpbXVtTGVuZ3RoKSB7CisgICAgICAgIG1heGltdW1MZW5ndGggPSBiY2QtPmN1cnJlbnQubGVuZ3RoOworCisgICAgICAgIGlmIChwcmVmcy5jYXBpdGFsaXphdGlvbk1vZGUgIT0gQ1RCX0NBUF9OT05FKSB7CisgICAgICAgICAgdHlwZWRlZiBlbnVtIHtDU19BbnksIENTX0xvd2VyLCBDU19VcHBlclNpbmdsZSwgQ1NfVXBwZXJNdWx0aXBsZX0gQ2FwaXRhbGl6YXRpb25TdGF0ZTsKKyNkZWZpbmUgU1RBVEUoYykgKHRlc3RDaGFyYWN0ZXIoYmNkLCAoYyksIENUQ19VcHBlckNhc2UpPyBDU19VcHBlclNpbmdsZTogdGVzdENoYXJhY3RlcihiY2QsIChjKSwgQ1RDX0xvd2VyQ2FzZSk/IENTX0xvd2VyOiBDU19BbnkpCisKKyAgICAgICAgICBDYXBpdGFsaXphdGlvblN0YXRlIGN1cnJlbnQgPSBTVEFURShiY2QtPmN1cnJlbnQuYmVmb3JlKTsKKworICAgICAgICAgIGZvciAoaW50IGk9MDsgaTxiY2QtPmN1cnJlbnQubGVuZ3RoOyBpKz0xKSB7CisgICAgICAgICAgICB3Y2hhcl90IGNoYXJhY3RlciA9IGJjZC0+aW5wdXQuY3VycmVudFtpXTsKKyAgICAgICAgICAgIENhcGl0YWxpemF0aW9uU3RhdGUgbmV4dCA9IFNUQVRFKGNoYXJhY3Rlcik7CisKKyAgICAgICAgICAgIGlmIChpID4gMCkgeworICAgICAgICAgICAgICBpZiAoKChjdXJyZW50ID09IENTX0xvd2VyKSAmJiAobmV4dCA9PSBDU19VcHBlclNpbmdsZSkpIHx8CisgICAgICAgICAgICAgICAgICAoKGN1cnJlbnQgPT0gQ1NfVXBwZXJNdWx0aXBsZSkgJiYgKG5leHQgPT0gQ1NfTG93ZXIpKSkgeworICAgICAgICAgICAgICAgIG1heGltdW1MZW5ndGggPSBpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgaWYgKChwcmVmcy5jYXBpdGFsaXphdGlvbk1vZGUgIT0gQ1RCX0NBUF9TSUdOKSAmJgorICAgICAgICAgICAgICAgICAgKG5leHQgPT0gQ1NfVXBwZXJTaW5nbGUpKSB7CisgICAgICAgICAgICAgICAgbWF4aW11bUxlbmd0aCA9IGk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKChwcmVmcy5jYXBpdGFsaXphdGlvbk1vZGUgPT0gQ1RCX0NBUF9TSUdOKSAmJiAoY3VycmVudCA+IENTX0xvd2VyKSAmJiAobmV4dCA9PSBDU19VcHBlclNpbmdsZSkpIHsKKyAgICAgICAgICAgICAgY3VycmVudCA9IENTX1VwcGVyTXVsdGlwbGU7CisgICAgICAgICAgICB9IGVsc2UgaWYgKG5leHQgIT0gQ1NfQW55KSB7CisgICAgICAgICAgICAgIGN1cnJlbnQgPSBuZXh0OworICAgICAgICAgICAgfSBlbHNlIGlmIChjdXJyZW50ID09IENTX0FueSkgeworICAgICAgICAgICAgICBjdXJyZW50ID0gQ1NfTG93ZXI7CisgICAgICAgICAgICB9CisgICAgICAgICAgfQorCisjdW5kZWYgU1RBVEUKKyAgICAgICAgfQorICAgICAgfQorCisgICAgICBpZiAoKGJjZC0+Y3VycmVudC5sZW5ndGggPD0gbWF4aW11bUxlbmd0aCkgJiYKKyAgICAgICAgICAoIWJjZC0+Y3VycmVudC5ydWxlLT5hZnRlciB8fCB0ZXN0QmVmb3JlKGJjZCwgYmNkLT5jdXJyZW50LnJ1bGUtPmFmdGVyKSkgJiYKKyAgICAgICAgICAoIWJjZC0+Y3VycmVudC5ydWxlLT5iZWZvcmUgfHwgdGVzdEFmdGVyKGJjZCwgYmNkLT5jdXJyZW50LnJ1bGUtPmJlZm9yZSkpKSB7CisgICAgICAgIHN3aXRjaCAoYmNkLT5jdXJyZW50Lm9wY29kZSkgeworICAgICAgICAgIGNhc2UgQ1RPX0Fsd2F5czoKKyAgICAgICAgICBjYXNlIENUT19SZXBlYXRhYmxlOgorICAgICAgICAgIGNhc2UgQ1RPX0xpdGVyYWw6CisgICAgICAgICAgY2FzZSBDVE9fUmVwbGFjZToKKyAgICAgICAgICAgIHJldHVybiAxOworCisgICAgICAgICAgY2FzZSBDVE9fTGFyZ2VTaWduOgorICAgICAgICAgIGNhc2UgQ1RPX0xhc3RMYXJnZVNpZ246CisgICAgICAgICAgICBpZiAoIWlzQmVnaW5uaW5nKGJjZCkgfHwgIWlzRW5kaW5nKGJjZCkpIGJjZC0+Y3VycmVudC5vcGNvZGUgPSBDVE9fQWx3YXlzOworICAgICAgICAgICAgcmV0dXJuIDE7CisKKyAgICAgICAgICBjYXNlIENUT19XaG9sZVdvcmQ6CisgICAgICAgICAgICBpZiAodGVzdEJlZm9yZShiY2QsIENUQ19TcGFjZXxDVENfUHVuY3R1YXRpb24pICYmCisgICAgICAgICAgICAgICAgdGVzdEFmdGVyKGJjZCwgQ1RDX1NwYWNlfENUQ19QdW5jdHVhdGlvbikpCisgICAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICBjYXNlIENUT19Db250cmFjdGlvbjoKKyAgICAgICAgICAgIGlmICgoYmNkLT5pbnB1dC5jdXJyZW50ID4gYmNkLT5pbnB1dC5iZWdpbikgJiYgc2FtZUNoYXJhY3RlcnMoYmNkLCBiY2QtPmlucHV0LmN1cnJlbnRbLTFdLCBXQ19DKCdcJycpKSkgYnJlYWs7CisgICAgICAgICAgICBpZiAoaXNCZWdpbm5pbmcoYmNkKSAmJiBpc0VuZGluZyhiY2QpKSByZXR1cm4gMTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgY2FzZSBDVE9fTG93V29yZDoKKyAgICAgICAgICAgIGlmICh0ZXN0QmVmb3JlKGJjZCwgQ1RDX1NwYWNlKSAmJiB0ZXN0QWZ0ZXIoYmNkLCBDVENfU3BhY2UpICYmCisgICAgICAgICAgICAgICAgKGJjZC0+cHJldmlvdXMub3Bjb2RlICE9IENUT19Kb2luZWRXb3JkKSAmJgorICAgICAgICAgICAgICAgICgoYmNkLT5vdXRwdXQuY3VycmVudCA9PSBiY2QtPm91dHB1dC5iZWdpbikgfHwgIWJjZC0+b3V0cHV0LmN1cnJlbnRbLTFdKSkKKyAgICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgIGNhc2UgQ1RPX0pvaW5lZFdvcmQ6CisgICAgICAgICAgICBpZiAodGVzdEJlZm9yZShiY2QsIENUQ19TcGFjZXxDVENfUHVuY3R1YXRpb24pICYmCisgICAgICAgICAgICAgICAgIXNhbWVDaGFyYWN0ZXJzKGJjZCwgYmNkLT5jdXJyZW50LmJlZm9yZSwgV0NfQygnLScpKSAmJgorICAgICAgICAgICAgICAgIChiY2QtPm91dHB1dC5jdXJyZW50ICsgYmNkLT5jdXJyZW50LnJ1bGUtPnJlcGxlbiA8IGJjZC0+b3V0cHV0LmVuZCkpIHsKKyAgICAgICAgICAgICAgY29uc3Qgd2NoYXJfdCAqZW5kID0gYmNkLT5pbnB1dC5jdXJyZW50ICsgYmNkLT5jdXJyZW50Lmxlbmd0aDsKKyAgICAgICAgICAgICAgY29uc3Qgd2NoYXJfdCAqcHRyID0gZW5kOworCisgICAgICAgICAgICAgIHdoaWxlIChwdHIgPCBiY2QtPmlucHV0LmVuZCkgeworICAgICAgICAgICAgICAgIGlmICghdGVzdENoYXJhY3RlcihiY2QsICpwdHIsIENUQ19TcGFjZSkpIHsKKyAgICAgICAgICAgICAgICAgIGlmICghdGVzdENoYXJhY3RlcihiY2QsICpwdHIsIENUQ19MZXR0ZXIpKSBicmVhazsKKyAgICAgICAgICAgICAgICAgIGlmIChwdHIgPT0gZW5kKSBicmVhazsKKyAgICAgICAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGlmIChwdHIrKyA9PSBiY2QtPmlucHV0LmN1cnNvcikgYnJlYWs7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgY2FzZSBDVE9fU3VmZml4YWJsZVdvcmQ6CisgICAgICAgICAgICBpZiAodGVzdEJlZm9yZShiY2QsIENUQ19TcGFjZXxDVENfUHVuY3R1YXRpb24pICYmCisgICAgICAgICAgICAgICAgdGVzdEFmdGVyKGJjZCwgQ1RDX1NwYWNlfENUQ19MZXR0ZXJ8Q1RDX1B1bmN0dWF0aW9uKSkKKyAgICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgIGNhc2UgQ1RPX1ByZWZpeGFibGVXb3JkOgorICAgICAgICAgICAgaWYgKHRlc3RCZWZvcmUoYmNkLCBDVENfU3BhY2V8Q1RDX0xldHRlcnxDVENfUHVuY3R1YXRpb24pICYmCisgICAgICAgICAgICAgICAgdGVzdEFmdGVyKGJjZCwgQ1RDX1NwYWNlfENUQ19QdW5jdHVhdGlvbikpCisgICAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICBjYXNlIENUT19CZWdXb3JkOgorICAgICAgICAgICAgaWYgKHRlc3RCZWZvcmUoYmNkLCBDVENfU3BhY2V8Q1RDX1B1bmN0dWF0aW9uKSAmJgorICAgICAgICAgICAgICAgIHRlc3RBZnRlcihiY2QsIENUQ19MZXR0ZXIpKQorICAgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgY2FzZSBDVE9fQmVnTWlkV29yZDoKKyAgICAgICAgICAgIGlmICh0ZXN0QmVmb3JlKGJjZCwgQ1RDX0xldHRlcnxDVENfU3BhY2V8Q1RDX1B1bmN0dWF0aW9uKSAmJgorICAgICAgICAgICAgICAgIHRlc3RBZnRlcihiY2QsIENUQ19MZXR0ZXIpKQorICAgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgY2FzZSBDVE9fTWlkV29yZDoKKyAgICAgICAgICAgIGlmICh0ZXN0QmVmb3JlKGJjZCwgQ1RDX0xldHRlcikgJiYgdGVzdEFmdGVyKGJjZCwgQ1RDX0xldHRlcikpCisgICAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICBjYXNlIENUT19NaWRFbmRXb3JkOgorICAgICAgICAgICAgaWYgKHRlc3RCZWZvcmUoYmNkLCBDVENfTGV0dGVyKSAmJgorICAgICAgICAgICAgICAgIHRlc3RBZnRlcihiY2QsIENUQ19MZXR0ZXJ8Q1RDX1NwYWNlfENUQ19QdW5jdHVhdGlvbikpCisgICAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICBjYXNlIENUT19FbmRXb3JkOgorICAgICAgICAgICAgaWYgKHRlc3RCZWZvcmUoYmNkLCBDVENfTGV0dGVyKSAmJgorICAgICAgICAgICAgICAgIHRlc3RBZnRlcihiY2QsIENUQ19TcGFjZXxDVENfUHVuY3R1YXRpb24pKQorICAgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgY2FzZSBDVE9fQmVnTnVtOgorICAgICAgICAgICAgaWYgKHRlc3RCZWZvcmUoYmNkLCBDVENfU3BhY2V8Q1RDX1B1bmN0dWF0aW9uKSAmJgorICAgICAgICAgICAgICAgIHRlc3RBZnRlcihiY2QsIENUQ19EaWdpdCkpCisgICAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICBjYXNlIENUT19NaWROdW06CisgICAgICAgICAgICBpZiAodGVzdEJlZm9yZShiY2QsIENUQ19EaWdpdCkgJiYgdGVzdEFmdGVyKGJjZCwgQ1RDX0RpZ2l0KSkKKyAgICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgIGNhc2UgQ1RPX0VuZE51bToKKyAgICAgICAgICAgIGlmICh0ZXN0QmVmb3JlKGJjZCwgQ1RDX0RpZ2l0KSAmJgorICAgICAgICAgICAgICAgIHRlc3RBZnRlcihiY2QsIENUQ19TcGFjZXxDVENfUHVuY3R1YXRpb24pKQorICAgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgY2FzZSBDVE9fUHJlUHVuYzoKKyAgICAgICAgICAgIGlmICh0ZXN0Q3VycmVudChiY2QsIENUQ19QdW5jdHVhdGlvbikgJiYgaXNCZWdpbm5pbmcoYmNkKSAmJiAhaXNFbmRpbmcoYmNkKSkgcmV0dXJuIDE7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgIGNhc2UgQ1RPX1Bvc3RQdW5jOgorICAgICAgICAgICAgaWYgKHRlc3RDdXJyZW50KGJjZCwgQ1RDX1B1bmN0dWF0aW9uKSAmJiAhaXNCZWdpbm5pbmcoYmNkKSAmJiBpc0VuZGluZyhiY2QpKSByZXR1cm4gMTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICB9CisgICAgfQorCisgICAgcnVsZU9mZnNldCA9IGJjZC0+Y3VycmVudC5ydWxlLT5uZXh0OworICB9CisKKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK3B1dENlbGxzIChCcmFpbGxlQ29udHJhY3Rpb25EYXRhICpiY2QsIGNvbnN0IEJZVEUgKmNlbGxzLCBpbnQgY291bnQpIHsKKyAgaWYgKGJjZC0+b3V0cHV0LmN1cnJlbnQgKyBjb3VudCA+IGJjZC0+b3V0cHV0LmVuZCkgcmV0dXJuIDA7CisgIGJjZC0+b3V0cHV0LmN1cnJlbnQgPSBtZW1wY3B5KGJjZC0+b3V0cHV0LmN1cnJlbnQsIGNlbGxzLCBjb3VudCk7CisgIHJldHVybiAxOworfQorCitzdGF0aWMgaW50CitwdXRDZWxsIChCcmFpbGxlQ29udHJhY3Rpb25EYXRhICpiY2QsIEJZVEUgYnl0ZSkgeworICByZXR1cm4gcHV0Q2VsbHMoYmNkLCAmYnl0ZSwgMSk7Cit9CisKK3N0YXRpYyBpbnQKK3B1dFJlcGxhY2UgKEJyYWlsbGVDb250cmFjdGlvbkRhdGEgKmJjZCwgY29uc3QgQ29udHJhY3Rpb25UYWJsZVJ1bGUgKnJ1bGUsIHdjaGFyX3QgY2hhcmFjdGVyKSB7CisgIGNvbnN0IEJZVEUgKmNlbGxzID0gKEJZVEUgKikmcnVsZS0+ZmluZHJlcFtydWxlLT5maW5kbGVuXTsKKyAgaW50IGNvdW50ID0gcnVsZS0+cmVwbGVuOworCisgIGlmICgocHJlZnMuY2FwaXRhbGl6YXRpb25Nb2RlID09IENUQl9DQVBfRE9UNykgJiYKKyAgICAgIHRlc3RDaGFyYWN0ZXIoYmNkLCBjaGFyYWN0ZXIsIENUQ19VcHBlckNhc2UpKSB7CisgICAgaWYgKCFwdXRDZWxsKGJjZCwgKmNlbGxzKysgfCBCUkxfRE9UXzcpKSByZXR1cm4gMDsKKyAgICBpZiAoIShjb3VudCAtPSAxKSkgcmV0dXJuIDE7CisgIH0KKworICByZXR1cm4gcHV0Q2VsbHMoYmNkLCBjZWxscywgY291bnQpOworfQorCitzdGF0aWMgaW50CitwdXRDaGFyYWN0ZXIgKEJyYWlsbGVDb250cmFjdGlvbkRhdGEgKmJjZCwgd2NoYXJfdCBjaGFyYWN0ZXIpIHsKKyAgeworICAgIGNvbnN0IENvbnRyYWN0aW9uVGFibGVSdWxlICpydWxlID0gZ2V0QWx3YXlzUnVsZShiY2QsIGNoYXJhY3Rlcik7CisgICAgaWYgKHJ1bGUpIHJldHVybiBwdXRSZXBsYWNlKGJjZCwgcnVsZSwgY2hhcmFjdGVyKTsKKyAgfQorCisgIGlmIChpc0JyYWlsbGVDaGFyYWN0ZXIoY2hhcmFjdGVyKSkgeworICAgIHJldHVybiBwdXRDZWxsKGJjZCwgKGNoYXJhY3RlciAmIFVOSUNPREVfQ0VMTF9NQVNLKSk7CisgIH0KKworICBpZiAodGV4dFRhYmxlKSB7CisgICAgdW5zaWduZWQgY2hhciBkb3RzID0gY29udmVydENoYXJhY3RlclRvRG90cyh0ZXh0VGFibGUsIGNoYXJhY3Rlcik7CisgICAgcmV0dXJuIHB1dENlbGwoYmNkLCBkb3RzKTsKKyAgfQorCisgIHsKKyAgICBjb25zdCB3Y2hhcl90IHJlcGxhY2VtZW50Q2hhcmFjdGVyID0gZ2V0UmVwbGFjZW1lbnRDaGFyYWN0ZXIoKTsKKworICAgIGlmIChyZXBsYWNlbWVudENoYXJhY3RlciAhPSBjaGFyYWN0ZXIpIHsKKyAgICAgIGNvbnN0IENvbnRyYWN0aW9uVGFibGVSdWxlICpydWxlID0gZ2V0QWx3YXlzUnVsZShiY2QsIHJlcGxhY2VtZW50Q2hhcmFjdGVyKTsKKyAgICAgIGlmIChydWxlKSByZXR1cm4gcHV0UmVwbGFjZShiY2QsIHJ1bGUsIHJlcGxhY2VtZW50Q2hhcmFjdGVyKTsKKyAgICB9CisgIH0KKworICByZXR1cm4gcHV0Q2VsbChiY2QsIChCUkxfRE9UXzEgfCBCUkxfRE9UXzIgfCBCUkxfRE9UXzMgfCBCUkxfRE9UXzQgfCBCUkxfRE9UXzUgfCBCUkxfRE9UXzYgfCBCUkxfRE9UXzcgfCBCUkxfRE9UXzgpKTsKK30KKworc3RhdGljIGludAorcHV0U2VxdWVuY2UgKEJyYWlsbGVDb250cmFjdGlvbkRhdGEgKmJjZCwgQ29udHJhY3Rpb25UYWJsZU9mZnNldCBvZmZzZXQpIHsKKyAgY29uc3QgQllURSAqc2VxdWVuY2UgPSBnZXRDb250cmFjdGlvblRhYmxlSXRlbShiY2QsIG9mZnNldCk7CisgIHJldHVybiBwdXRDZWxscyhiY2QsIHNlcXVlbmNlKzEsICpzZXF1ZW5jZSk7Cit9CisKK3N0YXRpYyB2b2lkCitjbGVhclJlbWFpbmluZ09mZnNldHMgKEJyYWlsbGVDb250cmFjdGlvbkRhdGEgKmJjZCkgeworICBjb25zdCB3Y2hhcl90ICpuZXh0ID0gYmNkLT5pbnB1dC5jdXJyZW50ICsgYmNkLT5jdXJyZW50Lmxlbmd0aDsKKyAgd2hpbGUgKCsrYmNkLT5pbnB1dC5jdXJyZW50IDwgbmV4dCkgY2xlYXJPZmZzZXQoYmNkKTsKK30KKworc3RhdGljIGludAorY29udHJhY3RUZXh0X25hdGl2ZSAoQnJhaWxsZUNvbnRyYWN0aW9uRGF0YSAqYmNkKSB7CisgIGJjZC0+cHJldmlvdXMub3Bjb2RlID0gQ1RPX05vbmU7CisKKyAgY29uc3Qgd2NoYXJfdCAqc3Jjd29yZCA9IE5VTEw7CisgIGNvbnN0IHdjaGFyX3QgKnNyY2pvaW4gPSBOVUxMOworICBjb25zdCB3Y2hhcl90ICpsaXRlcmFsID0gTlVMTDsKKworICBCWVRFICpkZXN0d29yZCA9IE5VTEw7CisgIEJZVEUgKmRlc3Rqb2luID0gTlVMTDsKKyAgQllURSAqZGVzdGxhc3QgPSBOVUxMOworCisgIHVuc2lnbmVkIGNoYXIgbGluZUJyZWFrT3Bwb3J0dW5pdGllc1tnZXRJbnB1dENvdW50KGJjZCkgKyAxXTsKKyAgTGluZUJyZWFrT3Bwb3J0dW5pdGllc1N0YXRlIGxibzsKKyAgcHJlcGFyZUxpbmVCcmVha09wcG9ydHVuaXRpZXNTdGF0ZSgmbGJvKTsKKworICB3aGlsZSAoYmNkLT5pbnB1dC5jdXJyZW50IDwgYmNkLT5pbnB1dC5lbmQpIHsKKyAgICBpbnQgd2FzTGl0ZXJhbCA9IGJjZC0+aW5wdXQuY3VycmVudCA9PSBsaXRlcmFsOworCisgICAgZGVzdGxhc3QgPSBiY2QtPm91dHB1dC5jdXJyZW50OworICAgIHNldE9mZnNldChiY2QpOworICAgIHNldEJlZm9yZShiY2QpOworCisgICAgaWYgKGxpdGVyYWwpCisgICAgICBpZiAoYmNkLT5pbnB1dC5jdXJyZW50ID49IGxpdGVyYWwpCisgICAgICAgIGlmICh0ZXN0Q3VycmVudChiY2QsIENUQ19TcGFjZSkgfHwgdGVzdFByZXZpb3VzKGJjZCwgQ1RDX1NwYWNlKSkKKyAgICAgICAgICBsaXRlcmFsID0gTlVMTDsKKworICAgIGlmICgoIWxpdGVyYWwgJiYgc2VsZWN0UnVsZShiY2QsIGdldElucHV0VW5jb25zdW1lZChiY2QpKSkgfHwgc2VsZWN0UnVsZShiY2QsIDEpKSB7CisgICAgICBpZiAoIWxpdGVyYWwgJiYKKyAgICAgICAgICAoKGJjZC0+Y3VycmVudC5vcGNvZGUgPT0gQ1RPX0xpdGVyYWwpIHx8CisgICAgICAgICAgIChwcmVmcy5leHBhbmRDdXJyZW50V29yZCAmJgorICAgICAgICAgICAgKGJjZC0+aW5wdXQuY3Vyc29yID49IGJjZC0+aW5wdXQuY3VycmVudCkgJiYKKyAgICAgICAgICAgIChiY2QtPmlucHV0LmN1cnNvciA8IChiY2QtPmlucHV0LmN1cnJlbnQgKyBiY2QtPmN1cnJlbnQubGVuZ3RoKSkpKSkgeworICAgICAgICBsaXRlcmFsID0gYmNkLT5pbnB1dC5jdXJyZW50ICsgYmNkLT5jdXJyZW50Lmxlbmd0aDsKKworICAgICAgICBpZiAoIXRlc3RDdXJyZW50KGJjZCwgQ1RDX1NwYWNlKSkgeworICAgICAgICAgIGlmIChkZXN0am9pbikgeworICAgICAgICAgICAgYmNkLT5pbnB1dC5jdXJyZW50ID0gc3Jjam9pbjsKKyAgICAgICAgICAgIGJjZC0+b3V0cHV0LmN1cnJlbnQgPSBkZXN0am9pbjsKKyAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgYmNkLT5pbnB1dC5jdXJyZW50ID0gYmNkLT5pbnB1dC5iZWdpbjsKKyAgICAgICAgICAgIGJjZC0+b3V0cHV0LmN1cnJlbnQgPSBiY2QtPm91dHB1dC5iZWdpbjsKKyAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBjb250aW51ZTsKKyAgICAgIH0KKworICAgICAgaWYgKGJjZC0+Y3VycmVudC5vcGNvZGUgPT0gQ1RPX1JlcGxhY2UpIHsKKyAgICAgICAgY29uc3QgQ29udHJhY3Rpb25UYWJsZVJ1bGUgKnJ1bGUgPSBiY2QtPmN1cnJlbnQucnVsZTsKKworICAgICAgICBzaXplX3Qgc2l6ZSA9IHJ1bGUtPnJlcGxlbiArIDE7CisgICAgICAgIHdjaGFyX3QgY2hhcmFjdGVyc1tzaXplXTsKKyAgICAgICAgd2NoYXJfdCAqdG8gPSBjaGFyYWN0ZXJzOworICAgICAgICBjb25zdCBjaGFyICpmcm9tID0gKGNvbnN0IGNoYXIgKikmcnVsZS0+ZmluZHJlcFtydWxlLT5maW5kbGVuXTsKKyAgICAgICAgY29udmVydFV0ZjhUb1djaGFycygmZnJvbSwgJnRvLCBzaXplKTsKKworICAgICAgICBjb25zdCB3Y2hhcl90ICppbnB1dEJ1ZmZlciA9IGNoYXJhY3RlcnM7CisgICAgICAgIGludCBpbnB1dExlbmd0aCA9IHRvIC0gY2hhcmFjdGVyczsKKyAgICAgICAgaW50IG91dHB1dExlbmd0aCA9IGJjZC0+b3V0cHV0LmVuZCAtIGJjZC0+b3V0cHV0LmN1cnJlbnQ7CisKKyAgICAgICAgY29udHJhY3RUZXh0KAorICAgICAgICAgIGJjZC0+dGFibGUsIE5VTEwsCisgICAgICAgICAgaW5wdXRCdWZmZXIsICZpbnB1dExlbmd0aCwKKyAgICAgICAgICBiY2QtPm91dHB1dC5jdXJyZW50LCAmb3V0cHV0TGVuZ3RoLAorICAgICAgICAgIE5VTEwsIENUQl9OT19DVVJTT1IKKyAgICAgICAgKTsKKworICAgICAgICBiY2QtPm91dHB1dC5jdXJyZW50ICs9IG91dHB1dExlbmd0aDsKKyAgICAgICAgY2xlYXJSZW1haW5pbmdPZmZzZXRzKGJjZCk7CisgICAgICAgIGNvbnRpbnVlOworICAgICAgfQorCisgICAgICBpZiAoZ2V0Q29udHJhY3Rpb25UYWJsZUhlYWRlcihiY2QpLT5udW1iZXJTaWduICYmIChiY2QtPnByZXZpb3VzLm9wY29kZSAhPSBDVE9fTWlkTnVtKSAmJgorICAgICAgICAgICF0ZXN0QmVmb3JlKGJjZCwgQ1RDX0RpZ2l0KSAmJiB0ZXN0Q3VycmVudChiY2QsIENUQ19EaWdpdCkpIHsKKyAgICAgICAgaWYgKCFwdXRTZXF1ZW5jZShiY2QsIGdldENvbnRyYWN0aW9uVGFibGVIZWFkZXIoYmNkKS0+bnVtYmVyU2lnbikpIGJyZWFrOworICAgICAgfSBlbHNlIGlmIChnZXRDb250cmFjdGlvblRhYmxlSGVhZGVyKGJjZCktPmxldHRlclNpZ24gJiYgdGVzdEN1cnJlbnQoYmNkLCBDVENfTGV0dGVyKSkgeworICAgICAgICBpZiAoKGJjZC0+Y3VycmVudC5vcGNvZGUgPT0gQ1RPX0NvbnRyYWN0aW9uKSB8fAorICAgICAgICAgICAgKChiY2QtPmN1cnJlbnQub3Bjb2RlICE9IENUT19FbmROdW0pICYmIHRlc3RCZWZvcmUoYmNkLCBDVENfRGlnaXQpKSB8fAorICAgICAgICAgICAgKHRlc3RDdXJyZW50KGJjZCwgQ1RDX0xldHRlcikgJiYKKyAgICAgICAgICAgICAoYmNkLT5jdXJyZW50Lm9wY29kZSA9PSBDVE9fQWx3YXlzKSAmJgorICAgICAgICAgICAgIChiY2QtPmN1cnJlbnQubGVuZ3RoID09IDEpICYmCisgICAgICAgICAgICAgdGVzdEJlZm9yZShiY2QsIENUQ19TcGFjZSkgJiYKKyAgICAgICAgICAgICAoKChiY2QtPmlucHV0LmN1cnJlbnQgKyAxKSA9PSBiY2QtPmlucHV0LmVuZCkgfHwKKyAgICAgICAgICAgICAgdGVzdE5leHQoYmNkLCBDVENfU3BhY2UpIHx8CisgICAgICAgICAgICAgICh0ZXN0TmV4dChiY2QsIENUQ19QdW5jdHVhdGlvbikgJiYKKyAgICAgICAgICAgICAgICFzYW1lQ2hhcmFjdGVycyhiY2QsIGJjZC0+aW5wdXQuY3VycmVudFsxXSwgV0NfQygnLicpKSAmJgorICAgICAgICAgICAgICAgIXNhbWVDaGFyYWN0ZXJzKGJjZCwgYmNkLT5pbnB1dC5jdXJyZW50WzFdLCBXQ19DKCdcJycpKSkpKSkgeworICAgICAgICAgIGlmICghcHV0U2VxdWVuY2UoYmNkLCBnZXRDb250cmFjdGlvblRhYmxlSGVhZGVyKGJjZCktPmxldHRlclNpZ24pKSBicmVhazsKKyAgICAgICAgfQorICAgICAgfQorCisgICAgICBpZiAocHJlZnMuY2FwaXRhbGl6YXRpb25Nb2RlID09IENUQl9DQVBfU0lHTikgeworICAgICAgICBpZiAodGVzdEN1cnJlbnQoYmNkLCBDVENfVXBwZXJDYXNlKSkgeworICAgICAgICAgIGlmICghdGVzdEJlZm9yZShiY2QsIENUQ19VcHBlckNhc2UpKSB7CisgICAgICAgICAgICBpZiAoZ2V0Q29udHJhY3Rpb25UYWJsZUhlYWRlcihiY2QpLT5iZWdpbkNhcGl0YWxTaWduICYmCisgICAgICAgICAgICAgICAgKGJjZC0+aW5wdXQuY3VycmVudCArIDEgPCBiY2QtPmlucHV0LmVuZCkgJiYgdGVzdE5leHQoYmNkLCBDVENfVXBwZXJDYXNlKSkgeworICAgICAgICAgICAgICBpZiAoIXB1dFNlcXVlbmNlKGJjZCwgZ2V0Q29udHJhY3Rpb25UYWJsZUhlYWRlcihiY2QpLT5iZWdpbkNhcGl0YWxTaWduKSkgYnJlYWs7CisgICAgICAgICAgICB9IGVsc2UgaWYgKGdldENvbnRyYWN0aW9uVGFibGVIZWFkZXIoYmNkKS0+Y2FwaXRhbFNpZ24pIHsKKyAgICAgICAgICAgICAgaWYgKCFwdXRTZXF1ZW5jZShiY2QsIGdldENvbnRyYWN0aW9uVGFibGVIZWFkZXIoYmNkKS0+Y2FwaXRhbFNpZ24pKSBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSBpZiAodGVzdEN1cnJlbnQoYmNkLCBDVENfTG93ZXJDYXNlKSkgeworICAgICAgICAgIGlmIChnZXRDb250cmFjdGlvblRhYmxlSGVhZGVyKGJjZCktPmVuZENhcGl0YWxTaWduICYmIChiY2QtPmlucHV0LmN1cnJlbnQgLSAyID49IGJjZC0+aW5wdXQuYmVnaW4pICYmCisgICAgICAgICAgICAgIHRlc3RQcmV2aW91cyhiY2QsIENUQ19VcHBlckNhc2UpICYmIHRlc3RSZWxhdGl2ZShiY2QsIC0yLCBDVENfVXBwZXJDYXNlKSkgeworICAgICAgICAgICAgaWYgKCFwdXRTZXF1ZW5jZShiY2QsIGdldENvbnRyYWN0aW9uVGFibGVIZWFkZXIoYmNkKS0+ZW5kQ2FwaXRhbFNpZ24pKSBicmVhazsKKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgIH0KKworICAgICAgc3dpdGNoIChiY2QtPmN1cnJlbnQub3Bjb2RlKSB7CisgICAgICAgIGNhc2UgQ1RPX0xhcmdlU2lnbjoKKyAgICAgICAgY2FzZSBDVE9fTGFzdExhcmdlU2lnbjoKKyAgICAgICAgICBpZiAoKGJjZC0+cHJldmlvdXMub3Bjb2RlID09IENUT19MYXJnZVNpZ24pICYmICF3YXNMaXRlcmFsKSB7CisgICAgICAgICAgICB3aGlsZSAoKGJjZC0+b3V0cHV0LmN1cnJlbnQgPiBiY2QtPm91dHB1dC5iZWdpbikgJiYgIWJjZC0+b3V0cHV0LmN1cnJlbnRbLTFdKSBiY2QtPm91dHB1dC5jdXJyZW50IC09IDE7CisgICAgICAgICAgICBzZXRPZmZzZXQoYmNkKTsKKworICAgICAgICAgICAgeworICAgICAgICAgICAgICBCWVRFICoqZGVzdHB0cnNbXSA9IHsmZGVzdHdvcmQsICZkZXN0am9pbiwgJmRlc3RsYXN0LCBOVUxMfTsKKyAgICAgICAgICAgICAgQllURSAqKipkZXN0cHRyID0gZGVzdHB0cnM7CisKKyAgICAgICAgICAgICAgd2hpbGUgKCpkZXN0cHRyKSB7CisgICAgICAgICAgICAgICAgaWYgKCoqZGVzdHB0ciAmJiAoKipkZXN0cHRyID4gYmNkLT5vdXRwdXQuY3VycmVudCkpICoqZGVzdHB0ciA9IGJjZC0+b3V0cHV0LmN1cnJlbnQ7CisgICAgICAgICAgICAgICAgZGVzdHB0ciArPSAxOworICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgfQorICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgYnJlYWs7CisgICAgICB9CisKKyAgICAgIGlmIChiY2QtPmN1cnJlbnQucnVsZS0+cmVwbGVuICYmCisgICAgICAgICAgISgoYmNkLT5jdXJyZW50Lm9wY29kZSA9PSBDVE9fQWx3YXlzKSAmJiAoYmNkLT5jdXJyZW50Lmxlbmd0aCA9PSAxKSkpIHsKKyAgICAgICAgaWYgKCFwdXRSZXBsYWNlKGJjZCwgYmNkLT5jdXJyZW50LnJ1bGUsICpiY2QtPmlucHV0LmN1cnJlbnQpKSBnb3RvIGRvbmU7CisgICAgICAgIGNsZWFyUmVtYWluaW5nT2Zmc2V0cyhiY2QpOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgY29uc3Qgd2NoYXJfdCAqc3JjbGltID0gYmNkLT5pbnB1dC5jdXJyZW50ICsgYmNkLT5jdXJyZW50Lmxlbmd0aDsKKyAgICAgICAgd2hpbGUgKDEpIHsKKyAgICAgICAgICBpZiAoIXB1dENoYXJhY3RlcihiY2QsICpiY2QtPmlucHV0LmN1cnJlbnQpKSBnb3RvIGRvbmU7CisgICAgICAgICAgaWYgKCsrYmNkLT5pbnB1dC5jdXJyZW50ID09IHNyY2xpbSkgYnJlYWs7CisgICAgICAgICAgc2V0T2Zmc2V0KGJjZCk7CisgICAgICAgIH0KKyAgICAgIH0KKworICAgICAgeworICAgICAgICBjb25zdCB3Y2hhcl90ICpzcmNvcmlnID0gYmNkLT5pbnB1dC5jdXJyZW50OworICAgICAgICBjb25zdCB3Y2hhcl90ICpzcmNiZWcgPSBOVUxMOworICAgICAgICBCWVRFICpkZXN0YmVnID0gTlVMTDsKKworICAgICAgICBzd2l0Y2ggKGJjZC0+Y3VycmVudC5vcGNvZGUpIHsKKyAgICAgICAgICBjYXNlIENUT19SZXBlYXRhYmxlOiB7CisgICAgICAgICAgICBjb25zdCB3Y2hhcl90ICpzcmNsaW0gPSBiY2QtPmlucHV0LmVuZCAtIGJjZC0+Y3VycmVudC5sZW5ndGg7CisKKyAgICAgICAgICAgIHNyY2JlZyA9IGJjZC0+aW5wdXQuY3VycmVudCAtIGJjZC0+Y3VycmVudC5sZW5ndGg7CisgICAgICAgICAgICBkZXN0YmVnID0gZGVzdGxhc3Q7CisKKyAgICAgICAgICAgIHdoaWxlICgoYmNkLT5pbnB1dC5jdXJyZW50IDw9IHNyY2xpbSkgJiYgbWF0Y2hDdXJyZW50UnVsZShiY2QpKSB7CisgICAgICAgICAgICAgIGNsZWFyT2Zmc2V0KGJjZCk7CisgICAgICAgICAgICAgIGNsZWFyUmVtYWluaW5nT2Zmc2V0cyhiY2QpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICB9CisKKyAgICAgICAgICBjYXNlIENUT19Kb2luZWRXb3JkOgorICAgICAgICAgICAgc3JjYmVnID0gYmNkLT5pbnB1dC5jdXJyZW50OworICAgICAgICAgICAgZGVzdGJlZyA9IGJjZC0+b3V0cHV0LmN1cnJlbnQ7CisKKyAgICAgICAgICAgIHdoaWxlICgoYmNkLT5pbnB1dC5jdXJyZW50IDwgYmNkLT5pbnB1dC5lbmQpICYmIHRlc3RDdXJyZW50KGJjZCwgQ1RDX1NwYWNlKSkgeworICAgICAgICAgICAgICBjbGVhck9mZnNldChiY2QpOworICAgICAgICAgICAgICBiY2QtPmlucHV0LmN1cnJlbnQgKz0gMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHNyY2JlZyAmJiAoYmNkLT5pbnB1dC5jdXJzb3IgPj0gc3JjYmVnKSAmJiAoYmNkLT5pbnB1dC5jdXJzb3IgPCBiY2QtPmlucHV0LmN1cnJlbnQpKSB7CisgICAgICAgICAgaW50IHJlcGVhdCA9ICFsaXRlcmFsOworICAgICAgICAgIGxpdGVyYWwgPSBiY2QtPmlucHV0LmN1cnJlbnQ7CisKKyAgICAgICAgICBpZiAocmVwZWF0KSB7CisgICAgICAgICAgICBiY2QtPmlucHV0LmN1cnJlbnQgPSBzcmNiZWc7CisgICAgICAgICAgICBiY2QtPm91dHB1dC5jdXJyZW50ID0gZGVzdGJlZzsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgIH0KKworICAgICAgICAgIGJjZC0+aW5wdXQuY3VycmVudCA9IHNyY29yaWc7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgYmNkLT5jdXJyZW50Lm9wY29kZSA9IENUT19BbHdheXM7CisgICAgICBpZiAoIXB1dENoYXJhY3RlcihiY2QsICpiY2QtPmlucHV0LmN1cnJlbnQpKSBicmVhazsKKyAgICAgIGJjZC0+aW5wdXQuY3VycmVudCArPSAxOworICAgIH0KKworICAgIGlmIChpc0xpbmVCcmVha09wcG9ydHVuaXR5KGJjZCwgJmxibywgbGluZUJyZWFrT3Bwb3J0dW5pdGllcykpIHsKKyAgICAgIHNyY2pvaW4gPSBiY2QtPmlucHV0LmN1cnJlbnQ7CisgICAgICBkZXN0am9pbiA9IGJjZC0+b3V0cHV0LmN1cnJlbnQ7CisKKyAgICAgIGlmIChiY2QtPmN1cnJlbnQub3Bjb2RlICE9IENUT19Kb2luZWRXb3JkKSB7CisgICAgICAgIHNyY3dvcmQgPSBiY2QtPmlucHV0LmN1cnJlbnQ7CisgICAgICAgIGRlc3R3b3JkID0gYmNkLT5vdXRwdXQuY3VycmVudDsKKyAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoKGJjZC0+b3V0cHV0LmN1cnJlbnQgPT0gYmNkLT5vdXRwdXQuYmVnaW4pIHx8IGJjZC0+b3V0cHV0LmN1cnJlbnRbLTFdKSB7CisgICAgICBiY2QtPnByZXZpb3VzLm9wY29kZSA9IGJjZC0+Y3VycmVudC5vcGNvZGU7CisgICAgfQorICB9CisKK2RvbmU6CisgIGlmIChiY2QtPmlucHV0LmN1cnJlbnQgPCBiY2QtPmlucHV0LmVuZCkgeworICAgIGlmIChkZXN0d29yZCAmJiAoZGVzdHdvcmQgPiBiY2QtPm91dHB1dC5iZWdpbikgJiYKKyAgICAgICAgKCEodGVzdFByZXZpb3VzKGJjZCwgQ1RDX1NwYWNlKSB8fCB0ZXN0Q3VycmVudChiY2QsIENUQ19TcGFjZSkpIHx8CisgICAgICAgICAoYmNkLT5wcmV2aW91cy5vcGNvZGUgPT0gQ1RPX0pvaW5lZFdvcmQpKSkgeworICAgICAgYmNkLT5pbnB1dC5jdXJyZW50ID0gc3Jjd29yZDsKKyAgICAgIGJjZC0+b3V0cHV0LmN1cnJlbnQgPSBkZXN0d29yZDsKKyAgICB9IGVsc2UgaWYgKGRlc3RsYXN0KSB7CisgICAgICBiY2QtPm91dHB1dC5jdXJyZW50ID0gZGVzdGxhc3Q7CisgICAgfQorICB9CisKKyAgcmV0dXJuIDE7Cit9CisKK3N0YXRpYyB2b2lkCitmaW5pc2hDaGFyYWN0ZXJFbnRyeV9uYXRpdmUgKEJyYWlsbGVDb250cmFjdGlvbkRhdGEgKmJjZCwgQ2hhcmFjdGVyRW50cnkgKmVudHJ5KSB7CisgIHdjaGFyX3QgY2hhcmFjdGVyID0gZW50cnktPnZhbHVlOworCisgIHsKKyAgICBjb25zdCBDb250cmFjdGlvblRhYmxlQ2hhcmFjdGVyICpjdGMgPSBnZXRDb250cmFjdGlvblRhYmxlQ2hhcmFjdGVyKGJjZCwgY2hhcmFjdGVyKTsKKyAgICBpZiAoY3RjKSBlbnRyeS0+YXR0cmlidXRlcyB8PSBjdGMtPmF0dHJpYnV0ZXM7CisgIH0KKworICB7CisgICAgU2V0QWx3YXlzUnVsZURhdGEgc2FyID0geworICAgICAgLmJjZCA9IGJjZCwKKyAgICAgIC5jaGFyYWN0ZXIgPSBlbnRyeQorICAgIH07CisKKyAgICBpbnQgb2sgPSAoY2hhcmFjdGVyID09IGdldFJlcGxhY2VtZW50Q2hhcmFjdGVyKCkpPworICAgICAgICAgICAgIHNldEFsd2F5c1J1bGUoY2hhcmFjdGVyLCAmc2FyKToKKyAgICAgICAgICAgICBoYW5kbGVCZXN0Q2hhcmFjdGVyKGNoYXJhY3Rlciwgc2V0QWx3YXlzUnVsZSwgJnNhcik7CisKKyAgICBpZiAoIW9rKSBlbnRyeS0+YWx3YXlzID0gTlVMTDsKKyAgfQorfQorCitzdGF0aWMgY29uc3QgQ29udHJhY3Rpb25UYWJsZVRyYW5zbGF0aW9uTWV0aG9kcyBuYXRpdmVUcmFuc2xhdGlvbk1ldGhvZHMgPSB7CisgIC5jb250cmFjdFRleHQgPSBjb250cmFjdFRleHRfbmF0aXZlLAorICAuZmluaXNoQ2hhcmFjdGVyRW50cnkgPSBmaW5pc2hDaGFyYWN0ZXJFbnRyeV9uYXRpdmUKK307CisKK2NvbnN0IENvbnRyYWN0aW9uVGFibGVUcmFuc2xhdGlvbk1ldGhvZHMgKgorZ2V0Q29udHJhY3Rpb25UYWJsZVRyYW5zbGF0aW9uTWV0aG9kc19uYXRpdmUgKHZvaWQpIHsKKyAgcmV0dXJuICZuYXRpdmVUcmFuc2xhdGlvbk1ldGhvZHM7Cit9CmRpZmYgLS1naXQgYS9Qcm9ncmFtcy9jdGJfdHJhbnNsYXRlLmMgYi9Qcm9ncmFtcy9jdGJfdHJhbnNsYXRlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzI4OTJiMAotLS0gL2Rldi9udWxsCisrKyBiL1Byb2dyYW1zL2N0Yl90cmFuc2xhdGUuYwpAQCAtMCwwICsxLDQyMiBAQAorLyoKKyAqIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisgKiAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisgKgorICogQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKKyNpbmNsdWRlICJwcm9sb2d1ZS5oIgorCisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKyNpbmNsdWRlICJsb2cuaCIKKyNpbmNsdWRlICJsb2NrLmgiCisjaW5jbHVkZSAiY3RiX3RyYW5zbGF0ZS5oIgorI2luY2x1ZGUgInR0Yi5oIgorI2luY2x1ZGUgInVuaWNvZGUuaCIKKyNpbmNsdWRlICJwcmVmcy5oIgorCitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBpbnRlcm5hbENvbnRyYWN0aW9uVGFibGVCeXRlc1tdID0geworI2luY2x1ZGUgImN0Yi5hdXRvLmgiCit9OworCitjb25zdCB1bnNpZ25lZCBjaGFyICoKK2dldEludGVybmFsQ29udHJhY3Rpb25UYWJsZUJ5dGVzICh2b2lkKSB7CisgIHJldHVybiBpbnRlcm5hbENvbnRyYWN0aW9uVGFibGVCeXRlczsKK30KKworQ29udHJhY3Rpb25UYWJsZSAqY29udHJhY3Rpb25UYWJsZSA9IE5VTEw7CisKK3N0YXRpYyBMb2NrRGVzY3JpcHRvciAqCitnZXRDb250cmFjdGlvblRhYmxlTG9jayAodm9pZCkgeworICBzdGF0aWMgTG9ja0Rlc2NyaXB0b3IgKmxvY2sgPSBOVUxMOworICByZXR1cm4gZ2V0TG9ja0Rlc2NyaXB0b3IoJmxvY2ssICJjb250cmFjdGlvbi10YWJsZSIpOworfQorCit2b2lkCitsb2NrQ29udHJhY3Rpb25UYWJsZSAodm9pZCkgeworICBvYnRhaW5FeGNsdXNpdmVMb2NrKGdldENvbnRyYWN0aW9uVGFibGVMb2NrKCkpOworfQorCit2b2lkCit1bmxvY2tDb250cmFjdGlvblRhYmxlICh2b2lkKSB7CisgIHJlbGVhc2VMb2NrKGdldENvbnRyYWN0aW9uVGFibGVMb2NrKCkpOworfQorCitjb25zdCBDaGFyYWN0ZXJFbnRyeSAqCitmaW5kQ2hhcmFjdGVyRW50cnkgKEJyYWlsbGVDb250cmFjdGlvbkRhdGEgKmJjZCwgd2NoYXJfdCBjaGFyYWN0ZXIsIHVuc2lnbmVkIGludCAqcG9zaXRpb24pIHsKKyAgdW5zaWduZWQgaW50IGZyb20gPSAwOworICB1bnNpZ25lZCBpbnQgdG8gPSBiY2QtPnRhYmxlLT5jaGFyYWN0ZXJzLmNvdW50OworCisgIHdoaWxlIChmcm9tIDwgdG8pIHsKKyAgICB1bnNpZ25lZCBpbnQgY3VycmVudCA9IChmcm9tICsgdG8pIC8gMjsKKyAgICBjb25zdCBDaGFyYWN0ZXJFbnRyeSAqZW50cnkgPSAmYmNkLT50YWJsZS0+Y2hhcmFjdGVycy5hcnJheVtjdXJyZW50XTsKKworICAgIGlmIChlbnRyeS0+dmFsdWUgPCBjaGFyYWN0ZXIpIHsKKyAgICAgIGZyb20gPSBjdXJyZW50ICsgMTsKKyAgICB9IGVsc2UgaWYgKGVudHJ5LT52YWx1ZSA+IGNoYXJhY3RlcikgeworICAgICAgdG8gPSBjdXJyZW50OworICAgIH0gZWxzZSB7CisgICAgICBpZiAocG9zaXRpb24pICpwb3NpdGlvbiA9IGN1cnJlbnQ7CisgICAgICByZXR1cm4gZW50cnk7CisgICAgfQorICB9CisKKyAgaWYgKHBvc2l0aW9uKSAqcG9zaXRpb24gPSBmcm9tOworICByZXR1cm4gTlVMTDsKK30KKworc3RhdGljIGNvbnN0IENoYXJhY3RlckVudHJ5ICoKK2FkZENoYXJhY3RlckVudHJ5IChCcmFpbGxlQ29udHJhY3Rpb25EYXRhICpiY2QsIHdjaGFyX3QgY2hhcmFjdGVyLCB1bnNpZ25lZCBpbnQgcG9zaXRpb24pIHsKKyAgQ29udHJhY3Rpb25UYWJsZSAqdGFibGUgPSBiY2QtPnRhYmxlOworCisgIGlmICh0YWJsZS0+Y2hhcmFjdGVycy5jb3VudCA9PSB0YWJsZS0+Y2hhcmFjdGVycy5zaXplKSB7CisgICAgaW50IG5ld1NpemUgPSB0YWJsZS0+Y2hhcmFjdGVycy5zaXplOworICAgIG5ld1NpemUgPSBuZXdTaXplPyBuZXdTaXplPDwxOiAwWDgwOworICAgIENoYXJhY3RlckVudHJ5ICpuZXdBcnJheSA9IHJlYWxsb2ModGFibGUtPmNoYXJhY3RlcnMuYXJyYXksIEFSUkFZX1NJWkUobmV3QXJyYXksIG5ld1NpemUpKTsKKworICAgIGlmICghbmV3QXJyYXkpIHsKKyAgICAgIGxvZ01hbGxvY0Vycm9yKCk7CisgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICB0YWJsZS0+Y2hhcmFjdGVycy5hcnJheSA9IG5ld0FycmF5OworICAgIHRhYmxlLT5jaGFyYWN0ZXJzLnNpemUgPSBuZXdTaXplOworICB9CisKKyAgbWVtbW92ZSgKKyAgICAmdGFibGUtPmNoYXJhY3RlcnMuYXJyYXlbcG9zaXRpb24rMV0sCisgICAgJnRhYmxlLT5jaGFyYWN0ZXJzLmFycmF5W3Bvc2l0aW9uXSwKKyAgICAoKHRhYmxlLT5jaGFyYWN0ZXJzLmNvdW50KysgLSBwb3NpdGlvbikgKiBzaXplb2YoKnRhYmxlLT5jaGFyYWN0ZXJzLmFycmF5KSkKKyAgKTsKKworICBDaGFyYWN0ZXJFbnRyeSAqZW50cnkgPSAmYmNkLT50YWJsZS0+Y2hhcmFjdGVycy5hcnJheVtwb3NpdGlvbl07CisgIG1lbXNldChlbnRyeSwgMCwgc2l6ZW9mKCplbnRyeSkpOworICBlbnRyeS0+dmFsdWUgPSBlbnRyeS0+dXBwZXJjYXNlID0gZW50cnktPmxvd2VyY2FzZSA9IGNoYXJhY3RlcjsKKworICBpZiAoaXN3c3BhY2UoY2hhcmFjdGVyKSkgeworICAgIGVudHJ5LT5hdHRyaWJ1dGVzIHw9IENUQ19TcGFjZTsKKyAgfSBlbHNlIGlmIChpc3dhbHBoYShjaGFyYWN0ZXIpKSB7CisgICAgZW50cnktPmF0dHJpYnV0ZXMgfD0gQ1RDX0xldHRlcjsKKworICAgIGlmIChpc3d1cHBlcihjaGFyYWN0ZXIpKSB7CisgICAgICBlbnRyeS0+YXR0cmlidXRlcyB8PSBDVENfVXBwZXJDYXNlOworICAgICAgZW50cnktPmxvd2VyY2FzZSA9IHRvd2xvd2VyKGNoYXJhY3Rlcik7CisgICAgfQorCisgICAgaWYgKGlzd2xvd2VyKGNoYXJhY3RlcikpIHsKKyAgICAgIGVudHJ5LT5hdHRyaWJ1dGVzIHw9IENUQ19Mb3dlckNhc2U7CisgICAgICBlbnRyeS0+dXBwZXJjYXNlID0gdG93dXBwZXIoY2hhcmFjdGVyKTsKKyAgICB9CisgIH0gZWxzZSBpZiAoaXN3ZGlnaXQoY2hhcmFjdGVyKSkgeworICAgIGVudHJ5LT5hdHRyaWJ1dGVzIHw9IENUQ19EaWdpdDsKKyAgfSBlbHNlIGlmIChpc3dwdW5jdChjaGFyYWN0ZXIpKSB7CisgICAgZW50cnktPmF0dHJpYnV0ZXMgfD0gQ1RDX1B1bmN0dWF0aW9uOworICB9CisKKyAgYmNkLT50YWJsZS0+dHJhbnNsYXRpb25NZXRob2RzLT5maW5pc2hDaGFyYWN0ZXJFbnRyeShiY2QsIGVudHJ5KTsKKyAgcmV0dXJuIGVudHJ5OworfQorCitjb25zdCBDaGFyYWN0ZXJFbnRyeSAqCitnZXRDaGFyYWN0ZXJFbnRyeSAoQnJhaWxsZUNvbnRyYWN0aW9uRGF0YSAqYmNkLCB3Y2hhcl90IGNoYXJhY3RlcikgeworICB1bnNpZ25lZCBpbnQgcG9zaXRpb247CisgIGNvbnN0IENoYXJhY3RlckVudHJ5ICplbnRyeSA9IGZpbmRDaGFyYWN0ZXJFbnRyeShiY2QsIGNoYXJhY3RlciwgJnBvc2l0aW9uKTsKKyAgaWYgKGVudHJ5KSByZXR1cm4gZW50cnk7CisgIHJldHVybiBhZGRDaGFyYWN0ZXJFbnRyeShiY2QsIGNoYXJhY3RlciwgcG9zaXRpb24pOworfQorCitzdGF0aWMgaW5saW5lIGludAorbWFrZUNhY2hlZEN1cnNvck9mZnNldCAoQnJhaWxsZUNvbnRyYWN0aW9uRGF0YSAqYmNkKSB7CisgIHJldHVybiBiY2QtPmlucHV0LmN1cnNvcj8gKGJjZC0+aW5wdXQuY3Vyc29yIC0gYmNkLT5pbnB1dC5iZWdpbik6IENUQl9OT19DVVJTT1I7Cit9CisKK3N0YXRpYyBpbnQKK2NoZWNrQ29udHJhY3Rpb25DYWNoZSAoQnJhaWxsZUNvbnRyYWN0aW9uRGF0YSAqYmNkLCBDb250cmFjdGlvbkNhY2hlICpjYWNoZSkgeworICBpZiAoIWNhY2hlKSByZXR1cm4gMDsKKyAgaWYgKCFjYWNoZS0+aW5wdXQuY2hhcmFjdGVycykgcmV0dXJuIDA7CisgIGlmICghY2FjaGUtPm91dHB1dC5jZWxscykgcmV0dXJuIDA7CisgIGlmIChiY2QtPmlucHV0Lm9mZnNldHMgJiYgIWNhY2hlLT5vZmZzZXRzLmNvdW50KSByZXR1cm4gMDsKKyAgaWYgKGNhY2hlLT5vdXRwdXQubWF4aW11bSAhPSBnZXRPdXRwdXRDb3VudChiY2QpKSByZXR1cm4gMDsKKyAgaWYgKGNhY2hlLT5jdXJzb3JPZmZzZXQgIT0gbWFrZUNhY2hlZEN1cnNvck9mZnNldChiY2QpKSByZXR1cm4gMDsKKyAgaWYgKGNhY2hlLT5leHBhbmRDdXJyZW50V29yZCAhPSBwcmVmcy5leHBhbmRDdXJyZW50V29yZCkgcmV0dXJuIDA7CisgIGlmIChjYWNoZS0+Y2FwaXRhbGl6YXRpb25Nb2RlICE9IHByZWZzLmNhcGl0YWxpemF0aW9uTW9kZSkgcmV0dXJuIDA7CisKKyAgeworICAgIHVuc2lnbmVkIGludCBjb3VudCA9IGdldElucHV0Q291bnQoYmNkKTsKKyAgICBpZiAoY2FjaGUtPmlucHV0LmNvdW50ICE9IGNvdW50KSByZXR1cm4gMDsKKyAgICBpZiAod21lbWNtcChiY2QtPmlucHV0LmJlZ2luLCBjYWNoZS0+aW5wdXQuY2hhcmFjdGVycywgY291bnQpICE9IDApIHJldHVybiAwOworICB9CisKKyAgcmV0dXJuIDE7Cit9CisKK3N0YXRpYyB2b2lkCit1c2VDb250cmFjdGlvbkNhY2hlIChCcmFpbGxlQ29udHJhY3Rpb25EYXRhICpiY2QsIENvbnRyYWN0aW9uQ2FjaGUgKmNhY2hlKSB7CisgIGJjZC0+aW5wdXQuY3VycmVudCA9IGJjZC0+aW5wdXQuYmVnaW4gKyBjYWNoZS0+aW5wdXQuY29uc3VtZWQ7CisgIGJjZC0+b3V0cHV0LmN1cnJlbnQgPSBiY2QtPm91dHB1dC5iZWdpbiArIGNhY2hlLT5vdXRwdXQuY291bnQ7CisKKyAgbWVtY3B5KAorICAgIGJjZC0+b3V0cHV0LmJlZ2luLCBjYWNoZS0+b3V0cHV0LmNlbGxzLAorICAgIEFSUkFZX1NJWkUoYmNkLT5vdXRwdXQuYmVnaW4sIGNhY2hlLT5vdXRwdXQuY291bnQpCisgICk7CisKKyAgaWYgKGJjZC0+aW5wdXQub2Zmc2V0cykgeworICAgIG1lbWNweSgKKyAgICAgIGJjZC0+aW5wdXQub2Zmc2V0cywgY2FjaGUtPm9mZnNldHMuYXJyYXksCisgICAgICBBUlJBWV9TSVpFKGJjZC0+aW5wdXQub2Zmc2V0cywgY2FjaGUtPm9mZnNldHMuY291bnQpCisgICAgKTsKKyAgfQorfQorCitzdGF0aWMgdm9pZAordXBkYXRlQ29udHJhY3Rpb25DYWNoZSAoQnJhaWxsZUNvbnRyYWN0aW9uRGF0YSAqYmNkLCBDb250cmFjdGlvbkNhY2hlICpjYWNoZSkgeworICBpZiAoY2FjaGUpIHsKKyAgICB7CisgICAgICB1bnNpZ25lZCBpbnQgY291bnQgPSBnZXRJbnB1dENvdW50KGJjZCk7CisKKyAgICAgIGlmIChjb3VudCA+IGNhY2hlLT5pbnB1dC5zaXplKSB7CisgICAgICAgIHVuc2lnbmVkIGludCBuZXdTaXplID0gY291bnQgfCAwWDdGOworICAgICAgICB3Y2hhcl90ICpuZXdDaGFyYWN0ZXJzID0gbWFsbG9jKEFSUkFZX1NJWkUobmV3Q2hhcmFjdGVycywgbmV3U2l6ZSkpOworCisgICAgICAgIGlmICghbmV3Q2hhcmFjdGVycykgeworICAgICAgICAgIGxvZ01hbGxvY0Vycm9yKCk7CisgICAgICAgICAgY2FjaGUtPmlucHV0LmNvdW50ID0gMDsKKyAgICAgICAgICBnb3RvIGlucHV0RG9uZTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChjYWNoZS0+aW5wdXQuY2hhcmFjdGVycykgZnJlZShjYWNoZS0+aW5wdXQuY2hhcmFjdGVycyk7CisgICAgICAgIGNhY2hlLT5pbnB1dC5jaGFyYWN0ZXJzID0gbmV3Q2hhcmFjdGVyczsKKyAgICAgICAgY2FjaGUtPmlucHV0LnNpemUgPSBuZXdTaXplOworICAgICAgfQorCisgICAgICB3bWVtY3B5KGNhY2hlLT5pbnB1dC5jaGFyYWN0ZXJzLCBiY2QtPmlucHV0LmJlZ2luLCBjb3VudCk7CisgICAgICBjYWNoZS0+aW5wdXQuY291bnQgPSBjb3VudDsKKyAgICAgIGNhY2hlLT5pbnB1dC5jb25zdW1lZCA9IGdldElucHV0Q29uc3VtZWQoYmNkKTsKKyAgICB9CisgIGlucHV0RG9uZToKKworICAgIHsKKyAgICAgIHVuc2lnbmVkIGludCBjb3VudCA9IGdldE91dHB1dENvbnN1bWVkKGJjZCk7CisKKyAgICAgIGlmIChjb3VudCA+IGNhY2hlLT5vdXRwdXQuc2l6ZSkgeworICAgICAgICB1bnNpZ25lZCBpbnQgbmV3U2l6ZSA9IGNvdW50IHwgMFg3RjsKKyAgICAgICAgdW5zaWduZWQgY2hhciAqbmV3Q2VsbHMgPSBtYWxsb2MoQVJSQVlfU0laRShuZXdDZWxscywgbmV3U2l6ZSkpOworCisgICAgICAgIGlmICghbmV3Q2VsbHMpIHsKKyAgICAgICAgICBsb2dNYWxsb2NFcnJvcigpOworICAgICAgICAgIGNhY2hlLT5vdXRwdXQuY291bnQgPSAwOworICAgICAgICAgIGdvdG8gb3V0cHV0RG9uZTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChjYWNoZS0+b3V0cHV0LmNlbGxzKSBmcmVlKGNhY2hlLT5vdXRwdXQuY2VsbHMpOworICAgICAgICBjYWNoZS0+b3V0cHV0LmNlbGxzID0gbmV3Q2VsbHM7CisgICAgICAgIGNhY2hlLT5vdXRwdXQuc2l6ZSA9IG5ld1NpemU7CisgICAgICB9CisKKyAgICAgIG1lbWNweShjYWNoZS0+b3V0cHV0LmNlbGxzLCBiY2QtPm91dHB1dC5iZWdpbiwgY291bnQpOworICAgICAgY2FjaGUtPm91dHB1dC5jb3VudCA9IGNvdW50OworICAgICAgY2FjaGUtPm91dHB1dC5tYXhpbXVtID0gZ2V0T3V0cHV0Q291bnQoYmNkKTsKKyAgICB9CisgIG91dHB1dERvbmU6CisKKyAgICBpZiAoYmNkLT5pbnB1dC5vZmZzZXRzKSB7CisgICAgICB1bnNpZ25lZCBpbnQgY291bnQgPSBnZXRJbnB1dENvdW50KGJjZCk7CisKKyAgICAgIGlmIChjb3VudCA+IGNhY2hlLT5vZmZzZXRzLnNpemUpIHsKKyAgICAgICAgdW5zaWduZWQgaW50IG5ld1NpemUgPSBjb3VudCB8IDBYN0Y7CisgICAgICAgIGludCAqbmV3QXJyYXkgPSBtYWxsb2MoQVJSQVlfU0laRShuZXdBcnJheSwgbmV3U2l6ZSkpOworCisgICAgICAgIGlmICghbmV3QXJyYXkpIHsKKyAgICAgICAgICBsb2dNYWxsb2NFcnJvcigpOworICAgICAgICAgIGNhY2hlLT5vZmZzZXRzLmNvdW50ID0gMDsKKyAgICAgICAgICBnb3RvIG9mZnNldHNEb25lOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGNhY2hlLT5vZmZzZXRzLmFycmF5KSBmcmVlKGNhY2hlLT5vZmZzZXRzLmFycmF5KTsKKyAgICAgICAgY2FjaGUtPm9mZnNldHMuYXJyYXkgPSBuZXdBcnJheTsKKyAgICAgICAgY2FjaGUtPm9mZnNldHMuc2l6ZSA9IG5ld1NpemU7CisgICAgICB9CisKKyAgICAgIG1lbWNweShjYWNoZS0+b2Zmc2V0cy5hcnJheSwgYmNkLT5pbnB1dC5vZmZzZXRzLCBBUlJBWV9TSVpFKGJjZC0+aW5wdXQub2Zmc2V0cywgY291bnQpKTsKKyAgICAgIGNhY2hlLT5vZmZzZXRzLmNvdW50ID0gY291bnQ7CisgICAgfSBlbHNlIHsKKyAgICAgIGNhY2hlLT5vZmZzZXRzLmNvdW50ID0gMDsKKyAgICB9CisgIG9mZnNldHNEb25lOgorCisgICAgY2FjaGUtPmN1cnNvck9mZnNldCA9IG1ha2VDYWNoZWRDdXJzb3JPZmZzZXQoYmNkKTsKKyAgICBjYWNoZS0+ZXhwYW5kQ3VycmVudFdvcmQgPSBwcmVmcy5leHBhbmRDdXJyZW50V29yZDsKKyAgICBjYWNoZS0+Y2FwaXRhbGl6YXRpb25Nb2RlID0gcHJlZnMuY2FwaXRhbGl6YXRpb25Nb2RlOworICB9Cit9CisKK3ZvaWQKK2NvbnRyYWN0VGV4dCAoCisgIENvbnRyYWN0aW9uVGFibGUgKmNvbnRyYWN0aW9uVGFibGUsCisgIENvbnRyYWN0aW9uQ2FjaGUgKmNvbnRyYWN0aW9uQ2FjaGUsCisgIGNvbnN0IHdjaGFyX3QgKmlucHV0QnVmZmVyLCBpbnQgKmlucHV0TGVuZ3RoLAorICBCWVRFICpvdXRwdXRCdWZmZXIsIGludCAqb3V0cHV0TGVuZ3RoLAorICBpbnQgKm9mZnNldHNNYXAsIGNvbnN0IGludCBjdXJzb3JPZmZzZXQKKykgeworICBCcmFpbGxlQ29udHJhY3Rpb25EYXRhIGJjZCA9IHsKKyAgICAudGFibGUgPSBjb250cmFjdGlvblRhYmxlLAorCisgICAgLmlucHV0ID0geworICAgICAgLmJlZ2luID0gaW5wdXRCdWZmZXIsCisgICAgICAuY3VycmVudCA9IGlucHV0QnVmZmVyLAorICAgICAgLmVuZCA9IGlucHV0QnVmZmVyICsgKmlucHV0TGVuZ3RoLAorICAgICAgLmN1cnNvciA9IChjdXJzb3JPZmZzZXQgPT0gQ1RCX05PX0NVUlNPUik/IE5VTEw6ICZpbnB1dEJ1ZmZlcltjdXJzb3JPZmZzZXRdLAorICAgICAgLm9mZnNldHMgPSBvZmZzZXRzTWFwCisgICAgfSwKKworICAgIC5vdXRwdXQgPSB7CisgICAgICAuYmVnaW4gPSBvdXRwdXRCdWZmZXIsCisgICAgICAuZW5kID0gb3V0cHV0QnVmZmVyICsgKm91dHB1dExlbmd0aCwKKyAgICAgIC5jdXJyZW50ID0gb3V0cHV0QnVmZmVyCisgICAgfQorICB9OworCisgIGlmIChjaGVja0NvbnRyYWN0aW9uQ2FjaGUoJmJjZCwgY29udHJhY3Rpb25DYWNoZSkpIHsKKyAgICB1c2VDb250cmFjdGlvbkNhY2hlKCZiY2QsIGNvbnRyYWN0aW9uQ2FjaGUpOworICB9IGVsc2UgeworICAgIGludCBjb250cmFjdGVkOworCisgICAgeworICAgICAgc2l6ZV90IGxlbmd0aCA9IGdldElucHV0Q291bnQoJmJjZCk7CisgICAgICB3Y2hhcl90IGJ1ZmZlcltsZW5ndGhdOworICAgICAgdW5zaWduZWQgaW50IG1hcFtsZW5ndGggKyAxXTsKKworICAgICAgaWYgKGNvbXBvc2VDaGFyYWN0ZXJzKCZsZW5ndGgsIGJjZC5pbnB1dC5iZWdpbiwgYnVmZmVyLCBtYXApKSB7CisgICAgICAgIGNvbnN0IHdjaGFyX3QgKm9sZEJlZ2luID0gYmNkLmlucHV0LmJlZ2luOworICAgICAgICBjb25zdCB3Y2hhcl90ICpvbGRFbmQgPSBiY2QuaW5wdXQuZW5kOworCisgICAgICAgIGJjZC5pbnB1dC5iZWdpbiA9IGJ1ZmZlcjsKKyAgICAgICAgYmNkLmlucHV0LmN1cnJlbnQgPSBiY2QuaW5wdXQuYmVnaW4gKyAoYmNkLmlucHV0LmN1cnJlbnQgLSBvbGRCZWdpbik7CisgICAgICAgIGJjZC5pbnB1dC5lbmQgPSBiY2QuaW5wdXQuYmVnaW4gKyBsZW5ndGg7CisKKyAgICAgICAgaWYgKGJjZC5pbnB1dC5jdXJzb3IpIHsKKyAgICAgICAgICBwdHJkaWZmX3Qgb2Zmc2V0ID0gYmNkLmlucHV0LmN1cnNvciAtIG9sZEJlZ2luOworICAgICAgICAgIHVuc2lnbmVkIGludCBtYXBJbmRleDsKKworICAgICAgICAgIGJjZC5pbnB1dC5jdXJzb3IgPSBOVUxMOworCisgICAgICAgICAgZm9yIChtYXBJbmRleD0wOyBtYXBJbmRleDw9bGVuZ3RoOyBtYXBJbmRleCs9MSkgeworICAgICAgICAgICAgdW5zaWduZWQgaW50IG1hcHBlZEluZGV4ID0gbWFwW21hcEluZGV4XTsKKworICAgICAgICAgICAgaWYgKG1hcHBlZEluZGV4ID4gb2Zmc2V0KSBicmVhazsKKyAgICAgICAgICAgIGJjZC5pbnB1dC5jdXJzb3IgPSAmYmNkLmlucHV0LmJlZ2luW21hcHBlZEluZGV4XTsKKyAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBjb250cmFjdGVkID0gY29udHJhY3Rpb25UYWJsZS0+dHJhbnNsYXRpb25NZXRob2RzLT5jb250cmFjdFRleHQoJmJjZCk7CisKKyAgICAgICAgaWYgKGJjZC5pbnB1dC5vZmZzZXRzKSB7CisgICAgICAgICAgc2l6ZV90IG1hcEluZGV4ID0gbGVuZ3RoOworICAgICAgICAgIHNpemVfdCBvZmZzZXRzSW5kZXggPSBvbGRFbmQgLSBvbGRCZWdpbjsKKworICAgICAgICAgIHdoaWxlIChtYXBJbmRleCA+IDApIHsKKyAgICAgICAgICAgIHVuc2lnbmVkIGludCBtYXBwZWRJbmRleCA9IG1hcFstLW1hcEluZGV4XTsKKyAgICAgICAgICAgIGludCBvZmZzZXQgPSBiY2QuaW5wdXQub2Zmc2V0c1ttYXBJbmRleF07CisKKyAgICAgICAgICAgIGlmIChvZmZzZXQgIT0gQ1RCX05PX09GRlNFVCkgeworICAgICAgICAgICAgICB3aGlsZSAoLS1vZmZzZXRzSW5kZXggPiBtYXBwZWRJbmRleCkgYmNkLmlucHV0Lm9mZnNldHNbb2Zmc2V0c0luZGV4XSA9IENUQl9OT19PRkZTRVQ7CisgICAgICAgICAgICAgIGJjZC5pbnB1dC5vZmZzZXRzW29mZnNldHNJbmRleF0gPSBvZmZzZXQ7CisgICAgICAgICAgICB9CisgICAgICAgICAgfQorCisgICAgICAgICAgd2hpbGUgKG9mZnNldHNJbmRleCA+IDApIGJjZC5pbnB1dC5vZmZzZXRzWy0tb2Zmc2V0c0luZGV4XSA9IENUQl9OT19PRkZTRVQ7CisgICAgICAgIH0KKworICAgICAgICBiY2QuaW5wdXQuYmVnaW4gPSBvbGRCZWdpbjsKKyAgICAgICAgYmNkLmlucHV0LmN1cnJlbnQgPSBiY2QuaW5wdXQuYmVnaW4gKyBtYXBbYmNkLmlucHV0LmN1cnJlbnQgLSBidWZmZXJdOworICAgICAgICBiY2QuaW5wdXQuZW5kID0gb2xkRW5kOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgY29udHJhY3RlZCA9IGNvbnRyYWN0aW9uVGFibGUtPnRyYW5zbGF0aW9uTWV0aG9kcy0+Y29udHJhY3RUZXh0KCZiY2QpOworICAgICAgfQorICAgIH0KKworICAgIGlmICghY29udHJhY3RlZCkgeworICAgICAgYmNkLmlucHV0LmN1cnJlbnQgPSBiY2QuaW5wdXQuYmVnaW47CisgICAgICBiY2Qub3V0cHV0LmN1cnJlbnQgPSBiY2Qub3V0cHV0LmJlZ2luOworCisgICAgICB3aGlsZSAoKGJjZC5pbnB1dC5jdXJyZW50IDwgYmNkLmlucHV0LmVuZCkgJiYgKGJjZC5vdXRwdXQuY3VycmVudCA8IGJjZC5vdXRwdXQuZW5kKSkgeworICAgICAgICBzZXRPZmZzZXQoJmJjZCk7CisgICAgICAgICpiY2Qub3V0cHV0LmN1cnJlbnQrKyA9IGNvbnZlcnRDaGFyYWN0ZXJUb0RvdHModGV4dFRhYmxlLCAqYmNkLmlucHV0LmN1cnJlbnQrKyk7CisgICAgICB9CisgICAgfQorCisgICAgaWYgKGJjZC5pbnB1dC5jdXJyZW50IDwgYmNkLmlucHV0LmVuZCkgeworICAgICAgY29uc3Qgd2NoYXJfdCAqc3Jjb3JpZyA9IGJjZC5pbnB1dC5jdXJyZW50OworICAgICAgaW50IGRvbmUgPSAxOworCisgICAgICBzZXRPZmZzZXQoJmJjZCk7CisgICAgICB3aGlsZSAoMSkgeworICAgICAgICBpZiAoZG9uZSAmJiAhdGVzdEN1cnJlbnQoJmJjZCwgQ1RDX1NwYWNlKSkgeworICAgICAgICAgIGRvbmUgPSAwOworCisgICAgICAgICAgaWYgKCFiY2QuaW5wdXQuY3Vyc29yIHx8IChiY2QuaW5wdXQuY3Vyc29yIDwgc3Jjb3JpZykgfHwgKGJjZC5pbnB1dC5jdXJzb3IgPj0gYmNkLmlucHV0LmN1cnJlbnQpKSB7CisgICAgICAgICAgICBzZXRPZmZzZXQoJmJjZCk7CisgICAgICAgICAgICBzcmNvcmlnID0gYmNkLmlucHV0LmN1cnJlbnQ7CisgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYgKCsrYmNkLmlucHV0LmN1cnJlbnQgPT0gYmNkLmlucHV0LmVuZCkgYnJlYWs7CisgICAgICAgIGNsZWFyT2Zmc2V0KCZiY2QpOworICAgICAgfQorCisgICAgICBpZiAoIWRvbmUpIGJjZC5pbnB1dC5jdXJyZW50ID0gc3Jjb3JpZzsKKyAgICB9CisKKyAgICB1cGRhdGVDb250cmFjdGlvbkNhY2hlKCZiY2QsIGNvbnRyYWN0aW9uQ2FjaGUpOworICB9CisKKyAgKmlucHV0TGVuZ3RoID0gZ2V0SW5wdXRDb25zdW1lZCgmYmNkKTsKKyAgKm91dHB1dExlbmd0aCA9IGdldE91dHB1dENvbnN1bWVkKCZiY2QpOworfQorCitpbnQKK3JlcGxhY2VDb250cmFjdGlvblRhYmxlIChjb25zdCBjaGFyICpkaXJlY3RvcnksIGNvbnN0IGNoYXIgKm5hbWUpIHsKKyAgQ29udHJhY3Rpb25UYWJsZSAqbmV3VGFibGUgPSBOVUxMOworCisgIGlmICgqbmFtZSkgeworICAgIGNoYXIgKnBhdGggPSBtYWtlQ29udHJhY3Rpb25UYWJsZVBhdGgoZGlyZWN0b3J5LCBuYW1lKTsKKworICAgIGlmIChwYXRoKSB7CisgICAgICBsb2dNZXNzYWdlKExPR19ERUJVRywgImNvbXBpbGluZyBjb250cmFjdGlvbiB0YWJsZTogJXMiLCBwYXRoKTsKKworICAgICAgaWYgKCEobmV3VGFibGUgPSBjb21waWxlQ29udHJhY3Rpb25UYWJsZShwYXRoKSkpIHsKKyAgICAgICAgbG9nTWVzc2FnZShMT0dfRVJSLCAiJXM6ICVzIiwgZ2V0dGV4dCgiY2Fubm90IGNvbXBpbGUgY29udHJhY3Rpb24gdGFibGUiKSwgcGF0aCk7CisgICAgICB9CisKKyAgICAgIGZyZWUocGF0aCk7CisgICAgfQorICB9IGVsc2UgaWYgKCEobmV3VGFibGUgPSBjb21waWxlQ29udHJhY3Rpb25UYWJsZShuYW1lKSkpIHsKKyAgICBsb2dNZXNzYWdlKExPR19FUlIsICIlczogJXMiLCBnZXR0ZXh0KCJjYW5ub3QgYWNjZXNzIGludGVybmFsIGNvbnRyYWN0aW9uIHRhYmxlIiksIENPTlRSQUNUSU9OX1RBQkxFKTsKKyAgfQorCisgIGlmIChuZXdUYWJsZSkgeworICAgIENvbnRyYWN0aW9uVGFibGUgKm9sZFRhYmxlID0gY29udHJhY3Rpb25UYWJsZTsKKworICAgIGxvY2tDb250cmFjdGlvblRhYmxlKCk7CisgICAgICBjb250cmFjdGlvblRhYmxlID0gbmV3VGFibGU7CisgICAgdW5sb2NrQ29udHJhY3Rpb25UYWJsZSgpOworCisgICAgaWYgKG9sZFRhYmxlKSBkZXN0cm95Q29udHJhY3Rpb25UYWJsZShvbGRUYWJsZSk7CisgICAgcmV0dXJuIDE7CisgIH0KKworICBsb2dNZXNzYWdlKExPR19FUlIsICIlczogJXMiLCBnZXR0ZXh0KCJjYW5ub3QgbG9hZCBjb250cmFjdGlvbiB0YWJsZSIpLCBuYW1lKTsKKyAgcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9Qcm9ncmFtcy9jdGJfdHJhbnNsYXRlLmggYi9Qcm9ncmFtcy9jdGJfdHJhbnNsYXRlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTcwMDZlMwotLS0gL2Rldi9udWxsCisrKyBiL1Byb2dyYW1zL2N0Yl90cmFuc2xhdGUuaApAQCAtMCwwICsxLDE1MSBAQAorLyoKKyAqIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisgKiAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisgKgorICogQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKKyNpZm5kZWYgQlJMVFRZX0lOQ0xVREVEX0NUQl9UUkFOU0xBVEUKKyNkZWZpbmUgQlJMVFRZX0lOQ0xVREVEX0NUQl9UUkFOU0xBVEUKKworI2luY2x1ZGUgImN0Yi5oIgorI2luY2x1ZGUgImN0Yl9pbnRlcm5hbC5oIgorI2luY2x1ZGUgInByZWZzLmgiCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYgLyogX19jcGx1c3BsdXMgKi8KKwordHlwZWRlZiBzdHJ1Y3QgeworICBDb250cmFjdGlvblRhYmxlICpjb25zdCB0YWJsZTsKKworICBzdHJ1Y3QgeworICAgIGNvbnN0IHdjaGFyX3QgKmJlZ2luOworICAgIGNvbnN0IHdjaGFyX3QgKmVuZDsKKyAgICBjb25zdCB3Y2hhcl90ICpjdXJyZW50OworICAgIGNvbnN0IHdjaGFyX3QgKmN1cnNvcjsKKyAgICBpbnQgKm9mZnNldHM7CisgIH0gaW5wdXQ7CisKKyAgc3RydWN0IHsKKyAgICBCWVRFICpiZWdpbjsKKyAgICBCWVRFICplbmQ7CisgICAgQllURSAqY3VycmVudDsKKyAgfSBvdXRwdXQ7CisKKyAgc3RydWN0IHsKKyAgICBjb25zdCBDb250cmFjdGlvblRhYmxlUnVsZSAqcnVsZTsKKyAgICBDb250cmFjdGlvblRhYmxlT3Bjb2RlIG9wY29kZTsKKyAgICBpbnQgbGVuZ3RoOworCisgICAgd2NoYXJfdCBiZWZvcmU7CisgICAgd2NoYXJfdCBhZnRlcjsKKyAgfSBjdXJyZW50OworCisgIHN0cnVjdCB7CisgICAgQ29udHJhY3Rpb25UYWJsZU9wY29kZSBvcGNvZGU7CisgIH0gcHJldmlvdXM7Cit9IEJyYWlsbGVDb250cmFjdGlvbkRhdGE7CisKK3N0cnVjdCBDb250cmFjdGlvblRhYmxlVHJhbnNsYXRpb25NZXRob2RzU3RydWN0IHsKKyAgaW50ICgqY29udHJhY3RUZXh0KSAoQnJhaWxsZUNvbnRyYWN0aW9uRGF0YSAqYmNkKTsKKyAgdm9pZCAoKmZpbmlzaENoYXJhY3RlckVudHJ5KSAoQnJhaWxsZUNvbnRyYWN0aW9uRGF0YSAqYmNkLCBDaGFyYWN0ZXJFbnRyeSAqZW50cnkpOworfTsKKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQKK2dldElucHV0Q291bnQgKEJyYWlsbGVDb250cmFjdGlvbkRhdGEgKmJjZCkgeworICByZXR1cm4gYmNkLT5pbnB1dC5lbmQgLSBiY2QtPmlucHV0LmJlZ2luOworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludAorZ2V0SW5wdXRDb25zdW1lZCAoQnJhaWxsZUNvbnRyYWN0aW9uRGF0YSAqYmNkKSB7CisgIHJldHVybiBiY2QtPmlucHV0LmN1cnJlbnQgLSBiY2QtPmlucHV0LmJlZ2luOworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludAorZ2V0SW5wdXRVbmNvbnN1bWVkIChCcmFpbGxlQ29udHJhY3Rpb25EYXRhICpiY2QpIHsKKyAgcmV0dXJuIGJjZC0+aW5wdXQuZW5kIC0gYmNkLT5pbnB1dC5jdXJyZW50OworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludAorZ2V0T3V0cHV0Q291bnQgKEJyYWlsbGVDb250cmFjdGlvbkRhdGEgKmJjZCkgeworICByZXR1cm4gYmNkLT5vdXRwdXQuZW5kIC0gYmNkLT5vdXRwdXQuYmVnaW47Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50CitnZXRPdXRwdXRDb25zdW1lZCAoQnJhaWxsZUNvbnRyYWN0aW9uRGF0YSAqYmNkKSB7CisgIHJldHVybiBiY2QtPm91dHB1dC5jdXJyZW50IC0gYmNkLT5vdXRwdXQuYmVnaW47Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorYXNzaWduT2Zmc2V0IChCcmFpbGxlQ29udHJhY3Rpb25EYXRhICpiY2QsIGludCB2YWx1ZSkgeworICBpZiAoYmNkLT5pbnB1dC5vZmZzZXRzKSB7CisgICAgYmNkLT5pbnB1dC5vZmZzZXRzW2dldElucHV0Q29uc3VtZWQoYmNkKV0gPSB2YWx1ZTsKKyAgfQorfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK3NldE9mZnNldCAoQnJhaWxsZUNvbnRyYWN0aW9uRGF0YSAqYmNkKSB7CisgIGFzc2lnbk9mZnNldChiY2QsIGdldE91dHB1dENvbnN1bWVkKGJjZCkpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK2NsZWFyT2Zmc2V0IChCcmFpbGxlQ29udHJhY3Rpb25EYXRhICpiY2QpIHsKKyAgYXNzaWduT2Zmc2V0KGJjZCwgQ1RCX05PX09GRlNFVCk7Cit9CisKK2V4dGVybiBjb25zdCBDaGFyYWN0ZXJFbnRyeSAqZ2V0Q2hhcmFjdGVyRW50cnkgKEJyYWlsbGVDb250cmFjdGlvbkRhdGEgKmJjZCwgd2NoYXJfdCBjaGFyYWN0ZXIpOworZXh0ZXJuIGNvbnN0IENoYXJhY3RlckVudHJ5ICpmaW5kQ2hhcmFjdGVyRW50cnkgKEJyYWlsbGVDb250cmFjdGlvbkRhdGEgKmJjZCwgd2NoYXJfdCBjaGFyYWN0ZXIsIHVuc2lnbmVkIGludCAqcG9zaXRpb24pOworCitzdGF0aWMgaW5saW5lIGludAordGVzdENoYXJhY3RlciAoQnJhaWxsZUNvbnRyYWN0aW9uRGF0YSAqYmNkLCB3Y2hhcl90IGNoYXJhY3RlciwgQ29udHJhY3Rpb25UYWJsZUNoYXJhY3RlckF0dHJpYnV0ZXMgYXR0cmlidXRlcykgeworICBjb25zdCBDaGFyYWN0ZXJFbnRyeSAqZW50cnkgPSBnZXRDaGFyYWN0ZXJFbnRyeShiY2QsIGNoYXJhY3Rlcik7CisgIHJldHVybiBlbnRyeSAmJiAoYXR0cmlidXRlcyAmIGVudHJ5LT5hdHRyaWJ1dGVzKTsKK30KKworc3RhdGljIGlubGluZSBpbnQKK3Rlc3RSZWxhdGl2ZSAoQnJhaWxsZUNvbnRyYWN0aW9uRGF0YSAqYmNkLCBpbnQgb2Zmc2V0LCBDb250cmFjdGlvblRhYmxlQ2hhcmFjdGVyQXR0cmlidXRlcyBhdHRyaWJ1dGVzKSB7CisgIHJldHVybiB0ZXN0Q2hhcmFjdGVyKGJjZCwgYmNkLT5pbnB1dC5jdXJyZW50W29mZnNldF0sIGF0dHJpYnV0ZXMpOworfQorCitzdGF0aWMgaW5saW5lIGludAordGVzdEN1cnJlbnQgKEJyYWlsbGVDb250cmFjdGlvbkRhdGEgKmJjZCwgQ29udHJhY3Rpb25UYWJsZUNoYXJhY3RlckF0dHJpYnV0ZXMgYXR0cmlidXRlcykgeworICByZXR1cm4gdGVzdFJlbGF0aXZlKGJjZCwgMCwgYXR0cmlidXRlcyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50Cit0ZXN0UHJldmlvdXMgKEJyYWlsbGVDb250cmFjdGlvbkRhdGEgKmJjZCwgQ29udHJhY3Rpb25UYWJsZUNoYXJhY3RlckF0dHJpYnV0ZXMgYXR0cmlidXRlcykgeworICByZXR1cm4gdGVzdFJlbGF0aXZlKGJjZCwgLTEsIGF0dHJpYnV0ZXMpOworfQorCitzdGF0aWMgaW5saW5lIGludAordGVzdE5leHQgKEJyYWlsbGVDb250cmFjdGlvbkRhdGEgKmJjZCwgQ29udHJhY3Rpb25UYWJsZUNoYXJhY3RlckF0dHJpYnV0ZXMgYXR0cmlidXRlcykgeworICByZXR1cm4gdGVzdFJlbGF0aXZlKGJjZCwgMSwgYXR0cmlidXRlcyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50Cit0ZXN0QmVmb3JlIChCcmFpbGxlQ29udHJhY3Rpb25EYXRhICpiY2QsIENvbnRyYWN0aW9uVGFibGVDaGFyYWN0ZXJBdHRyaWJ1dGVzIGF0dHJpYnV0ZXMpIHsKKyAgcmV0dXJuIHRlc3RDaGFyYWN0ZXIoYmNkLCBiY2QtPmN1cnJlbnQuYmVmb3JlLCBhdHRyaWJ1dGVzKTsKK30KKworc3RhdGljIGlubGluZSBpbnQKK3Rlc3RBZnRlciAoQnJhaWxsZUNvbnRyYWN0aW9uRGF0YSAqYmNkLCBDb250cmFjdGlvblRhYmxlQ2hhcmFjdGVyQXR0cmlidXRlcyBhdHRyaWJ1dGVzKSB7CisgIHJldHVybiB0ZXN0Q2hhcmFjdGVyKGJjZCwgYmNkLT5jdXJyZW50LmFmdGVyLCBhdHRyaWJ1dGVzKTsKK30KKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYgLyogX19jcGx1c3BsdXMgKi8KKworI2VuZGlmIC8qIEJSTFRUWV9JTkNMVURFRF9DVEJfVFJBTlNMQVRFICovCmRpZmYgLS1naXQgYS9Qcm9ncmFtcy9kYXRhYXJlYS5jIGIvUHJvZ3JhbXMvZGF0YWFyZWEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZDI0YmRmCi0tLSAvZGV2L251bGwKKysrIGIvUHJvZ3JhbXMvZGF0YWFyZWEuYwpAQCAtMCwwICsxLDkxIEBACisvKgorICogQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyAqICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyAqCisgKiBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorICoKKyAqIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyAqCisgKiBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisgKi8KKworI2luY2x1ZGUgInByb2xvZ3VlLmgiCisKKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworI2luY2x1ZGUgImxvZy5oIgorI2luY2x1ZGUgImRhdGFhcmVhLmgiCisKK3N0cnVjdCBEYXRhQXJlYVN0cnVjdCB7CisgIHVuc2lnbmVkIGNoYXIgKmFkZHJlc3M7CisgIHNpemVfdCBzaXplOworICBzaXplX3QgdXNlZDsKK307CisKK3ZvaWQKK3Jlc2V0RGF0YUFyZWEgKERhdGFBcmVhICphcmVhKSB7CisgIGFyZWEtPmFkZHJlc3MgPSBOVUxMOworICBhcmVhLT5zaXplID0gMDsKKyAgYXJlYS0+dXNlZCA9IDA7Cit9CisKK0RhdGFBcmVhICoKK25ld0RhdGFBcmVhICh2b2lkKSB7CisgIERhdGFBcmVhICphcmVhOworICBpZiAoKGFyZWEgPSBtYWxsb2Moc2l6ZW9mKCphcmVhKSkpKSByZXNldERhdGFBcmVhKGFyZWEpOworICByZXR1cm4gYXJlYTsKK30KKwordm9pZAorZGVzdHJveURhdGFBcmVhIChEYXRhQXJlYSAqYXJlYSkgeworICBpZiAoYXJlYS0+YWRkcmVzcykgZnJlZShhcmVhLT5hZGRyZXNzKTsKKyAgZnJlZShhcmVhKTsKK30KKworaW50CithbGxvY2F0ZURhdGFJdGVtIChEYXRhQXJlYSAqYXJlYSwgRGF0YU9mZnNldCAqb2Zmc2V0LCBzaXplX3Qgc2l6ZSwgc2l6ZV90IGFsaWdubWVudCkgeworICBzaXplX3QgbmV3T2Zmc2V0ID0gKGFyZWEtPnVzZWQgKyAoYWxpZ25tZW50IC0gMSkpIC8gYWxpZ25tZW50ICogYWxpZ25tZW50OworICBzaXplX3QgbmV3VXNlZCA9IG5ld09mZnNldCArIHNpemU7CisKKyAgaWYgKG5ld1VzZWQgPiBhcmVhLT5zaXplKSB7CisgICAgc2l6ZV90IG5ld1NpemUgPSAobmV3VXNlZCB8IDBYRkZGKSArIDE7CisgICAgdW5zaWduZWQgY2hhciAqbmV3QWRkcmVzczsKKworICAgIGlmICghKG5ld0FkZHJlc3MgPSByZWFsbG9jKGFyZWEtPmFkZHJlc3MsIG5ld1NpemUpKSkgeworICAgICAgbG9nTWFsbG9jRXJyb3IoKTsKKyAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIG1lbXNldChuZXdBZGRyZXNzK2FyZWEtPnNpemUsIDAsIChuZXdTaXplIC0gYXJlYS0+c2l6ZSkpOworICAgIGFyZWEtPmFkZHJlc3MgPSBuZXdBZGRyZXNzOworICAgIGFyZWEtPnNpemUgPSBuZXdTaXplOworICB9CisKKyAgYXJlYS0+dXNlZCA9IG5ld1VzZWQ7CisgIGlmIChvZmZzZXQpICpvZmZzZXQgPSBuZXdPZmZzZXQ7CisgIHJldHVybiAxOworfQorCit2b2lkICoKK2dldERhdGFJdGVtIChEYXRhQXJlYSAqYXJlYSwgRGF0YU9mZnNldCBvZmZzZXQpIHsKKyAgcmV0dXJuIGFyZWEtPmFkZHJlc3MgKyBvZmZzZXQ7Cit9CisKK3NpemVfdAorZ2V0RGF0YVNpemUgKERhdGFBcmVhICphcmVhKSB7CisgIHJldHVybiBhcmVhLT51c2VkOworfQorCitpbnQKK3NhdmVEYXRhSXRlbSAoRGF0YUFyZWEgKmFyZWEsIERhdGFPZmZzZXQgKm9mZnNldCwgY29uc3Qgdm9pZCAqaXRlbSwgc2l6ZV90IHNpemUsIHNpemVfdCBhbGlnbm1lbnQpIHsKKyAgaWYgKCFhbGxvY2F0ZURhdGFJdGVtKGFyZWEsIG9mZnNldCwgc2l6ZSwgYWxpZ25tZW50KSkgcmV0dXJuIDA7CisgIG1lbWNweShnZXREYXRhSXRlbShhcmVhLCAqb2Zmc2V0KSwgaXRlbSwgc2l6ZSk7CisgIHJldHVybiAxOworfQpkaWZmIC0tZ2l0IGEvUHJvZ3JhbXMvZGF0YWZpbGUuYyBiL1Byb2dyYW1zL2RhdGFmaWxlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2I4ZjI3ZgotLS0gL2Rldi9udWxsCisrKyBiL1Byb2dyYW1zL2RhdGFmaWxlLmMKQEAgLTAsMCArMSwxMzM1IEBACisvKgorICogQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyAqICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyAqCisgKiBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorICoKKyAqIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyAqCisgKiBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisgKi8KKworI2luY2x1ZGUgInByb2xvZ3VlLmgiCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGFyZy5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKworI2luY2x1ZGUgImxvZy5oIgorI2luY2x1ZGUgInN0cmZtdC5oIgorI2luY2x1ZGUgImZpbGUuaCIKKyNpbmNsdWRlICJxdWV1ZS5oIgorI2luY2x1ZGUgImRhdGFmaWxlLmgiCisjaW5jbHVkZSAidmFyaWFibGVzLmgiCisjaW5jbHVkZSAidXRmOC5oIgorI2luY2x1ZGUgInVuaWNvZGUuaCIKKyNpbmNsdWRlICJicmxfZG90cy5oIgorCitzdHJ1Y3QgRGF0YUZpbGVTdHJ1Y3QgeworICBjb25zdCBjaGFyICpjb25zdCBuYW1lOworICBjb25zdCBEYXRhRmlsZVBhcmFtZXRlcnMgKmNvbnN0IHBhcmFtZXRlcnM7CisgIERhdGFGaWxlICpjb25zdCBpbmNsdWRlcjsKKyAgaW50IGxpbmU7CisKKyAgc3RydWN0IHsKKyAgICBkZXZfdCBkZXZpY2U7CisgICAgaW5vX3QgZmlsZTsKKyAgfSBpZGVudGl0eTsKKworICBRdWV1ZSAqY29uZGl0aW9uczsKKyAgVmFyaWFibGVOZXN0aW5nTGV2ZWwgKnZhcmlhYmxlczsKKworICBjb25zdCB3Y2hhcl90ICpzdGFydDsKKyAgY29uc3Qgd2NoYXJfdCAqZW5kOworfTsKKworY29uc3Qgd2NoYXJfdCBicmxEb3ROdW1iZXJzW0JSTF9ET1RfQ09VTlRdID0geworICBXQ19DKCcxJyksIFdDX0MoJzInKSwgV0NfQygnMycpLCBXQ19DKCc0JyksCisgIFdDX0MoJzUnKSwgV0NfQygnNicpLCBXQ19DKCc3JyksIFdDX0MoJzgnKQorfTsKK2NvbnN0IHVuc2lnbmVkIGNoYXIgYnJsRG90Qml0c1tCUkxfRE9UX0NPVU5UXSA9IHsKKyAgQlJMX0RPVF8xLCBCUkxfRE9UXzIsIEJSTF9ET1RfMywgQlJMX0RPVF80LAorICBCUkxfRE9UXzUsIEJSTF9ET1RfNiwgQlJMX0RPVF83LCBCUkxfRE9UXzgKK307CisKK2ludAorYnJsRG90TnVtYmVyVG9JbmRleCAod2NoYXJfdCBudW1iZXIsIGludCAqaW5kZXgpIHsKKyAgY29uc3Qgd2NoYXJfdCAqY2hhcmFjdGVyID0gd21lbWNocihicmxEb3ROdW1iZXJzLCBudW1iZXIsIEFSUkFZX0NPVU5UKGJybERvdE51bWJlcnMpKTsKKyAgaWYgKCFjaGFyYWN0ZXIpIHJldHVybiAwOworICAqaW5kZXggPSBjaGFyYWN0ZXIgLSBicmxEb3ROdW1iZXJzOworICByZXR1cm4gMTsKK30KKworaW50CiticmxEb3RCaXRUb0luZGV4ICh1bnNpZ25lZCBjaGFyIGJpdCwgaW50ICppbmRleCkgeworICBjb25zdCB1bnNpZ25lZCBjaGFyICpjZWxsID0gbWVtY2hyKGJybERvdEJpdHMsIGJpdCwgQVJSQVlfQ09VTlQoYnJsRG90Qml0cykpOworICBpZiAoIWNlbGwpIHJldHVybiAwOworICAqaW5kZXggPSBjZWxsIC0gYnJsRG90Qml0czsKKyAgcmV0dXJuIDE7Cit9CisKK3ZvaWQKK3JlcG9ydERhdGFFcnJvciAoRGF0YUZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKSB7CisgIGNoYXIgbWVzc2FnZVswWDIwMF07CisKKyAgeworICAgIGNvbnN0IGNoYXIgKm5hbWUgPSBOVUxMOworICAgIGNvbnN0IGludCAqbGluZSA9IE5VTEw7CisgICAgdmFfbGlzdCBhcmdzOworCisgICAgaWYgKGZpbGUpIHsKKyAgICAgIG5hbWUgPSBmaWxlLT5uYW1lOworICAgICAgaWYgKGZpbGUtPmxpbmUpIGxpbmUgPSAmZmlsZS0+bGluZTsKKyAgICB9CisKKyAgICB2YV9zdGFydChhcmdzLCBmb3JtYXQpOworICAgIGZvcm1hdElucHV0RXJyb3IobWVzc2FnZSwgc2l6ZW9mKG1lc3NhZ2UpLCBuYW1lLCBsaW5lLCBmb3JtYXQsIGFyZ3MpOworICAgIHZhX2VuZChhcmdzKTsKKyAgfQorCisgIGxvZ01lc3NhZ2UoTE9HX1dBUk5JTkcsICIlcyIsIG1lc3NhZ2UpOworfQorCitpbnQKK2NvbXBhcmVLZXl3b3JkIChjb25zdCB3Y2hhcl90ICprZXl3b3JkLCBjb25zdCB3Y2hhcl90ICpjaGFyYWN0ZXJzLCBzaXplX3QgY291bnQpIHsKKyAgd2hpbGUgKGNvdW50ID4gMCkgeworICAgIHdjaGFyX3QgY2hhcmFjdGVyMTsKKyAgICB3Y2hhcl90IGNoYXJhY3RlcjI7CisKKyAgICBpZiAoIShjaGFyYWN0ZXIxID0gKmtleXdvcmQpKSByZXR1cm4gLTE7CisgICAga2V5d29yZCArPSAxOworCisgICAgY2hhcmFjdGVyMSA9IHRvd2xvd2VyKGNoYXJhY3RlcjEpOworICAgIGNoYXJhY3RlcjIgPSB0b3dsb3dlcigqY2hhcmFjdGVycysrKTsKKworICAgIGlmIChjaGFyYWN0ZXIxIDwgY2hhcmFjdGVyMikgcmV0dXJuIC0xOworICAgIGlmIChjaGFyYWN0ZXIxID4gY2hhcmFjdGVyMikgcmV0dXJuIDE7CisKKyAgICBjb3VudCAtPSAxOworICB9CisKKyAgcmV0dXJuICprZXl3b3JkPyAxOiAwOworfQorCitpbnQKK2NvbXBhcmVLZXl3b3JkcyAoY29uc3Qgd2NoYXJfdCAqa2V5d29yZDEsIGNvbnN0IHdjaGFyX3QgKmtleXdvcmQyKSB7CisgIHJldHVybiBjb21wYXJlS2V5d29yZChrZXl3b3JkMSwga2V5d29yZDIsIHdjc2xlbihrZXl3b3JkMikpOworfQorCitpbnQKK2lzS2V5d29yZCAoY29uc3Qgd2NoYXJfdCAqa2V5d29yZCwgY29uc3Qgd2NoYXJfdCAqY2hhcmFjdGVycywgc2l6ZV90IGNvdW50KSB7CisgIHJldHVybiBjb21wYXJlS2V5d29yZChrZXl3b3JkLCBjaGFyYWN0ZXJzLCBjb3VudCkgPT0gMDsKK30KKworaW50Citpc0hleGFkZWNpbWFsRGlnaXQgKHdjaGFyX3QgY2hhcmFjdGVyLCBpbnQgKnZhbHVlLCBpbnQgKnNoaWZ0KSB7CisgIGlmICgoY2hhcmFjdGVyID49IFdDX0MoJzAnKSkgJiYgKGNoYXJhY3RlciA8PSBXQ19DKCc5JykpKSB7CisgICAgKnZhbHVlID0gY2hhcmFjdGVyIC0gV0NfQygnMCcpOworICB9IGVsc2UgaWYgKChjaGFyYWN0ZXIgPj0gV0NfQygnYScpKSAmJiAoY2hhcmFjdGVyIDw9IFdDX0MoJ2YnKSkpIHsKKyAgICAqdmFsdWUgPSBjaGFyYWN0ZXIgLSBXQ19DKCdhJykgKyAxMDsKKyAgfSBlbHNlIGlmICgoY2hhcmFjdGVyID49IFdDX0MoJ0EnKSkgJiYgKGNoYXJhY3RlciA8PSBXQ19DKCdGJykpKSB7CisgICAgKnZhbHVlID0gY2hhcmFjdGVyIC0gV0NfQygnQScpICsgMTA7CisgIH0gZWxzZSB7CisgICAgcmV0dXJuIDA7CisgIH0KKworICAqc2hpZnQgPSA0OworICByZXR1cm4gMTsKK30KKworaW50Citpc09jdGFsRGlnaXQgKHdjaGFyX3QgY2hhcmFjdGVyLCBpbnQgKnZhbHVlLCBpbnQgKnNoaWZ0KSB7CisgIGlmICgoY2hhcmFjdGVyIDwgV0NfQygnMCcpKSB8fCAoY2hhcmFjdGVyID4gV0NfQygnNycpKSkgcmV0dXJuIDA7CisgICp2YWx1ZSA9IGNoYXJhY3RlciAtIFdDX0MoJzAnKTsKKyAgKnNoaWZ0ID0gMzsKKyAgcmV0dXJuIDE7Cit9CisKK2ludAoraXNOdW1iZXIgKGludCAqbnVtYmVyLCBjb25zdCB3Y2hhcl90ICpjaGFyYWN0ZXJzLCBpbnQgbGVuZ3RoKSB7CisgIGlmIChsZW5ndGggPiAwKSB7CisgICAgY2hhciBzdHJpbmdbbGVuZ3RoICsgMV07CisgICAgc3RyaW5nW2xlbmd0aF0gPSAwOworCisgICAgeworICAgICAgaW50IGluZGV4OworCisgICAgICBmb3IgKGluZGV4PTA7IGluZGV4PGxlbmd0aDsgaW5kZXgrPTEpIHsKKyAgICAgICAgd2NoYXJfdCB3YyA9IGNoYXJhY3RlcnNbaW5kZXhdOworICAgICAgICBpZiAoIWlzd0xhdGluMSh3YykpIHJldHVybiAwOworICAgICAgICBzdHJpbmdbaW5kZXhdID0gd2M7CisgICAgICB9CisgICAgfQorCisgICAgeworICAgICAgY2hhciAqZW5kOworICAgICAgbG9uZyB2YWx1ZSA9IHN0cnRvbChzdHJpbmcsICZlbmQsIDApOworCisgICAgICBpZiAoISplbmQpIHsKKyAgICAgICAgKm51bWJlciA9IHZhbHVlOworICAgICAgICByZXR1cm4gMTsKKyAgICAgIH0KKyAgICB9CisgIH0KKworICByZXR1cm4gMDsKK30KKworc3RhdGljIFZhcmlhYmxlTmVzdGluZ0xldmVsICpiYXNlRGF0YVZhcmlhYmxlcyA9IE5VTEw7CitzdGF0aWMgVmFyaWFibGVOZXN0aW5nTGV2ZWwgKmN1cnJlbnREYXRhVmFyaWFibGVzID0gTlVMTDsKKworc3RhdGljIFZhcmlhYmxlTmVzdGluZ0xldmVsICoKK2dldEJhc2VEYXRhVmFyaWFibGVzICh2b2lkKSB7CisgIGlmIChiYXNlRGF0YVZhcmlhYmxlcykgeworICAgIHJlbGVhc2VWYXJpYWJsZU5lc3RpbmdMZXZlbChjdXJyZW50RGF0YVZhcmlhYmxlcyk7CisgICAgZGVsZXRlVmFyaWFibGVzKGJhc2VEYXRhVmFyaWFibGVzKTsKKyAgfSBlbHNlIHsKKyAgICBWYXJpYWJsZU5lc3RpbmdMZXZlbCAqZ2xvYmFsVmFyaWFibGVzID0gZ2V0R2xvYmFsVmFyaWFibGVzKDEpOworICAgIGlmICghZ2xvYmFsVmFyaWFibGVzKSByZXR1cm4gTlVMTDsKKworICAgIFZhcmlhYmxlTmVzdGluZ0xldmVsICpiYXNlVmFyaWFibGVzID0gbmV3VmFyaWFibGVOZXN0aW5nTGV2ZWwoZ2xvYmFsVmFyaWFibGVzLCAiYmFzZSIpOworICAgIGlmICghYmFzZVZhcmlhYmxlcykgcmV0dXJuIE5VTEw7CisKKyAgICBiYXNlRGF0YVZhcmlhYmxlcyA9IGNsYWltVmFyaWFibGVOZXN0aW5nTGV2ZWwoYmFzZVZhcmlhYmxlcyk7CisgIH0KKworICBjdXJyZW50RGF0YVZhcmlhYmxlcyA9IGNsYWltVmFyaWFibGVOZXN0aW5nTGV2ZWwoYmFzZURhdGFWYXJpYWJsZXMpOworICByZXR1cm4gYmFzZURhdGFWYXJpYWJsZXM7Cit9CisKK2ludAorc2V0QmFzZURhdGFWYXJpYWJsZXMgKGNvbnN0IFZhcmlhYmxlSW5pdGlhbGl6ZXIgKmluaXRpYWxpemVycykgeworICBWYXJpYWJsZU5lc3RpbmdMZXZlbCAqdmFyaWFibGVzID0gZ2V0QmFzZURhdGFWYXJpYWJsZXMoKTsKKyAgaWYgKCF2YXJpYWJsZXMpIHJldHVybiAwOworICByZXR1cm4gc2V0U3RyaW5nVmFyaWFibGVzKHZhcmlhYmxlcywgaW5pdGlhbGl6ZXJzKTsKK30KKworaW50CitzZXRUYWJsZURhdGFWYXJpYWJsZXMgKGNvbnN0IGNoYXIgKnRhYmxlRXh0ZW5zaW9uLCBjb25zdCBjaGFyICpzdWJ0YWJsZUV4dGVuc2lvbikgeworICBjb25zdCBWYXJpYWJsZUluaXRpYWxpemVyIGluaXRpYWxpemVyc1tdID0geworICAgIHsgLm5hbWUgPSAidGFibGVFeHRlbnNpb24iLCAudmFsdWUgPSB0YWJsZUV4dGVuc2lvbiB9LAorICAgIHsgLm5hbWUgPSAic3VidGFibGVFeHRlbnNpb24iLCAudmFsdWUgPSBzdWJ0YWJsZUV4dGVuc2lvbiB9LAorICAgIHsgLm5hbWUgPSBOVUxMIH0KKyAgfTsKKworICByZXR1cm4gc2V0QmFzZURhdGFWYXJpYWJsZXMoaW5pdGlhbGl6ZXJzKTsKK30KKworc3RhdGljIGludAorcHVzaERhdGFWYXJpYWJsZU5lc3RpbmdMZXZlbCAodm9pZCkgeworICBWYXJpYWJsZU5lc3RpbmdMZXZlbCAqdmFyaWFibGVzID0gbmV3VmFyaWFibGVOZXN0aW5nTGV2ZWwoY3VycmVudERhdGFWYXJpYWJsZXMsIE5VTEwpOworICBpZiAoIXZhcmlhYmxlcykgcmV0dXJuIDA7CisKKyAgcmVsZWFzZVZhcmlhYmxlTmVzdGluZ0xldmVsKGN1cnJlbnREYXRhVmFyaWFibGVzKTsKKyAgY3VycmVudERhdGFWYXJpYWJsZXMgPSBjbGFpbVZhcmlhYmxlTmVzdGluZ0xldmVsKHZhcmlhYmxlcyk7CisKKyAgcmV0dXJuIDE7Cit9CisKK2ludAorZmluZERhdGFPcGVyYW5kIChEYXRhRmlsZSAqZmlsZSwgY29uc3QgY2hhciAqZGVzY3JpcHRpb24pIHsKKyAgZmlsZS0+c3RhcnQgPSBmaWxlLT5lbmQ7CisKKyAgd2hpbGUgKGlzd3NwYWNlKGZpbGUtPnN0YXJ0WzBdKSkgZmlsZS0+c3RhcnQgKz0gMTsKKyAgaWYgKCooZmlsZS0+ZW5kID0gZmlsZS0+c3RhcnQpKSByZXR1cm4gMTsKKyAgaWYgKGRlc2NyaXB0aW9uKSByZXBvcnREYXRhRXJyb3IoZmlsZSwgIiVzIG5vdCBzcGVjaWZpZWQiLCBkZXNjcmlwdGlvbik7CisgIHJldHVybiAwOworfQorCitpbnQKK2dldERhdGFDaGFyYWN0ZXIgKERhdGFGaWxlICpmaWxlLCB3Y2hhcl90ICpjaGFyYWN0ZXIpIHsKKyAgaWYgKCEqZmlsZS0+ZW5kKSByZXR1cm4gMDsKKyAgKmNoYXJhY3RlciA9ICpmaWxlLT5lbmQrKzsKKyAgcmV0dXJuIDE7Cit9CisKK2ludAordW5nZXREYXRhQ2hhcmFjdGVycyAoRGF0YUZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjb3VudCkgeworICB1bnNpZ25lZCBpbnQgbWF4aW11bSA9IGZpbGUtPmVuZCAtIGZpbGUtPnN0YXJ0OworCisgIGlmIChjb3VudCA+IG1heGltdW0pIHsKKyAgICByZXBvcnREYXRhRXJyb3IoZmlsZSwgInVuZ2V0IGNoYXJhY3RlciBjb3VudCBvdXQgb2YgcmFuZ2U6ICV1ID4gJXUiLAorICAgICAgICAgICAgICAgICAgICBjb3VudCwgbWF4aW11bSk7CisgICAgcmV0dXJuIDA7CisgIH0KKworICBmaWxlLT5lbmQgLT0gY291bnQ7CisgIHJldHVybiAxOworfQorCit2b2lkCitnZXRUZXh0UmVtYWluaW5nIChEYXRhRmlsZSAqZmlsZSwgRGF0YU9wZXJhbmQgKnRleHQpIHsKKyAgZmlsZS0+ZW5kID0gZmlsZS0+c3RhcnQgKyB3Y3NsZW4oZmlsZS0+c3RhcnQpOworICB0ZXh0LT5jaGFyYWN0ZXJzID0gZmlsZS0+c3RhcnQ7CisgIHRleHQtPmxlbmd0aCA9IGZpbGUtPmVuZCAtIGZpbGUtPnN0YXJ0OworfQorCitpbnQKK2dldFRleHRPcGVyYW5kIChEYXRhRmlsZSAqZmlsZSwgRGF0YU9wZXJhbmQgKnRleHQsIGNvbnN0IGNoYXIgKmRlc2NyaXB0aW9uKSB7CisgIGlmICghZmluZERhdGFPcGVyYW5kKGZpbGUsIGRlc2NyaXB0aW9uKSkgcmV0dXJuIDA7CisgIGdldFRleHRSZW1haW5pbmcoZmlsZSwgdGV4dCk7CisKKyAgd2hpbGUgKHRleHQtPmxlbmd0aCkgeworICAgIHVuc2lnbmVkIGludCBuZXdMZW5ndGggPSB0ZXh0LT5sZW5ndGggLSAxOworICAgIGlmICghaXN3c3BhY2UodGV4dC0+Y2hhcmFjdGVyc1tuZXdMZW5ndGhdKSkgYnJlYWs7CisgICAgdGV4dC0+bGVuZ3RoID0gbmV3TGVuZ3RoOworICB9CisKKyAgcmV0dXJuIDE7Cit9CisKK2ludAorZ2V0RGF0YU9wZXJhbmQgKERhdGFGaWxlICpmaWxlLCBEYXRhT3BlcmFuZCAqb3BlcmFuZCwgY29uc3QgY2hhciAqZGVzY3JpcHRpb24pIHsKKyAgaWYgKCFmaW5kRGF0YU9wZXJhbmQoZmlsZSwgZGVzY3JpcHRpb24pKSByZXR1cm4gMDsKKworICBkbyB7CisgICAgZmlsZS0+ZW5kICs9IDE7CisgIH0gd2hpbGUgKGZpbGUtPmVuZFswXSAmJiAhaXN3c3BhY2UoZmlsZS0+ZW5kWzBdKSk7CisKKyAgb3BlcmFuZC0+Y2hhcmFjdGVycyA9IGZpbGUtPnN0YXJ0OworICBvcGVyYW5kLT5sZW5ndGggPSBmaWxlLT5lbmQgLSBmaWxlLT5zdGFydDsKKyAgcmV0dXJuIDE7Cit9CisKK2ludAorcGFyc2VEYXRhU3RyaW5nIChEYXRhRmlsZSAqZmlsZSwgRGF0YVN0cmluZyAqc3RyaW5nLCBjb25zdCB3Y2hhcl90ICpjaGFyYWN0ZXJzLCBpbnQgbGVuZ3RoLCBpbnQgbm9Vbmljb2RlKSB7CisgIGludCBpbmRleCA9IDA7CisKKyAgc3RyaW5nLT5sZW5ndGggPSAwOworCisgIHdoaWxlIChpbmRleCA8IGxlbmd0aCkgeworICAgIHdjaGFyX3QgY2hhcmFjdGVyID0gY2hhcmFjdGVyc1tpbmRleF07CisgICAgRGF0YU9wZXJhbmQgc3Vic3RpdHV0aW9uID0geworICAgICAgLmNoYXJhY3RlcnMgPSAmY2hhcmFjdGVyLAorICAgICAgLmxlbmd0aCA9IDEKKyAgICB9OworCisgICAgaWYgKGNoYXJhY3RlciA9PSBXQ19DKCdcXCcpKSB7CisgICAgICBpbnQgc3RhcnQgPSBpbmRleDsKKyAgICAgIGNvbnN0IGNoYXIgKnByb2JsZW0gPSBzdHJ0ZXh0KCJpbnZhbGlkIGVzY2FwZSBzZXF1ZW5jZSIpOworICAgICAgaW50IG9rID0gMDsKKworICAgICAgaWYgKCsraW5kZXggPCBsZW5ndGgpIHsKKyAgICAgICAgc3dpdGNoICgoY2hhcmFjdGVyID0gY2hhcmFjdGVyc1tpbmRleF0pKSB7CisgICAgICAgICAgY2FzZSBXQ19DKCcjJyk6CisgICAgICAgICAgY2FzZSBXQ19DKCdcXCcpOgorICAgICAgICAgICAgb2sgPSAxOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICBjYXNlIFdDX0MoJ2InKToKKyAgICAgICAgICAgIGNoYXJhY3RlciA9IFdDX0MoJ1xiJyk7CisgICAgICAgICAgICBvayA9IDE7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgIGNhc2UgV0NfQygnZicpOgorICAgICAgICAgICAgY2hhcmFjdGVyID0gV0NfQygnXGYnKTsKKyAgICAgICAgICAgIG9rID0gMTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgY2FzZSBXQ19DKCduJyk6CisgICAgICAgICAgICBjaGFyYWN0ZXIgPSBXQ19DKCdcbicpOworICAgICAgICAgICAgb2sgPSAxOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICBjYXNlIFdDX0MoJ3InKToKKyAgICAgICAgICAgIGNoYXJhY3RlciA9IFdDX0MoJ1xyJyk7CisgICAgICAgICAgICBvayA9IDE7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgIGNhc2UgV0NfQygnUicpOgorICAgICAgICAgICAgY2hhcmFjdGVyID0gVU5JQ09ERV9SRVBMQUNFTUVOVF9DSEFSQUNURVI7CisgICAgICAgICAgICBvayA9IDE7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgIGNhc2UgV0NfQygncycpOgorICAgICAgICAgICAgY2hhcmFjdGVyID0gV0NfQygnICcpOworICAgICAgICAgICAgb2sgPSAxOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICBjYXNlIFdDX0MoJ3QnKToKKyAgICAgICAgICAgIGNoYXJhY3RlciA9IFdDX0MoJ1x0Jyk7CisgICAgICAgICAgICBvayA9IDE7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgIGNhc2UgV0NfQygndicpOgorICAgICAgICAgICAgY2hhcmFjdGVyID0gV0NfQygnXHYnKTsKKyAgICAgICAgICAgIG9rID0gMTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgeworICAgICAgICAgICAgdWludDMyX3QgcmVzdWx0OworICAgICAgICAgICAgaW50IGNvdW50OworICAgICAgICAgICAgaW50ICgqaXNEaWdpdCkgKHdjaGFyX3QgY2hhcmFjdGVyLCBpbnQgKnZhbHVlLCBpbnQgKnNoaWZ0KTsKKworICAgICAgICAgIGNhc2UgV0NfQygnbycpOgorICAgICAgICAgICAgY291bnQgPSAzOworICAgICAgICAgICAgaXNEaWdpdCA9IGlzT2N0YWxEaWdpdDsKKyAgICAgICAgICAgIGdvdG8gZG9OdW1iZXI7CisKKyAgICAgICAgICBjYXNlIFdDX0MoJ1UnKToKKyAgICAgICAgICAgIGlmIChub1VuaWNvZGUpIGJyZWFrOworICAgICAgICAgICAgY291bnQgPSA4OworICAgICAgICAgICAgZ290byBkb0hleGFkZWNpbWFsOworCisgICAgICAgICAgY2FzZSBXQ19DKCd1Jyk6CisgICAgICAgICAgICBpZiAobm9Vbmljb2RlKSBicmVhazsKKyAgICAgICAgICAgIGNvdW50ID0gNDsKKyAgICAgICAgICAgIGdvdG8gZG9IZXhhZGVjaW1hbDsKKworICAgICAgICAgIGNhc2UgV0NfQygnWCcpOgorICAgICAgICAgIGNhc2UgV0NfQygneCcpOgorICAgICAgICAgICAgY291bnQgPSAyOworICAgICAgICAgICAgZ290byBkb0hleGFkZWNpbWFsOworCisgICAgICAgICAgZG9IZXhhZGVjaW1hbDoKKyAgICAgICAgICAgIGlzRGlnaXQgPSBpc0hleGFkZWNpbWFsRGlnaXQ7CisgICAgICAgICAgICBnb3RvIGRvTnVtYmVyOworCisgICAgICAgICAgZG9OdW1iZXI6CisgICAgICAgICAgICByZXN1bHQgPSAwOworCisgICAgICAgICAgICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkgeworICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaW50IHZhbHVlOworICAgICAgICAgICAgICAgIGludCBzaGlmdDsKKworICAgICAgICAgICAgICAgIGlmICghaXNEaWdpdChjaGFyYWN0ZXJzW2luZGV4XSwgJnZhbHVlLCAmc2hpZnQpKSBicmVhazsKKyAgICAgICAgICAgICAgICByZXN1bHQgPSAocmVzdWx0IDw8IHNoaWZ0KSB8IHZhbHVlOworICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgaWYgKCEtLWNvdW50KSB7CisgICAgICAgICAgICAgICAgaWYgKHJlc3VsdCA+IFdDSEFSX01BWCkgeworICAgICAgICAgICAgICAgICAgcHJvYmxlbSA9IE5VTEw7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgIGNoYXJhY3RlciA9IHJlc3VsdDsKKyAgICAgICAgICAgICAgICAgIG9rID0gMTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICB9CisKKyAgICAgICAgICBjYXNlIFdDX0MoJ3snKTogeworICAgICAgICAgICAgY29uc3Qgd2NoYXJfdCAqZmlyc3QgPSAmY2hhcmFjdGVyc1srK2luZGV4XTsKKyAgICAgICAgICAgIGNvbnN0IHdjaGFyX3QgKmVuZCA9IHdtZW1jaHIoZmlyc3QsIFdDX0MoJ30nKSwgbGVuZ3RoLWluZGV4KTsKKworICAgICAgICAgICAgaWYgKGVuZCkgeworICAgICAgICAgICAgICBpbnQgY291bnQgPSBlbmQgLSBmaXJzdDsKKyAgICAgICAgICAgICAgaW5kZXggKz0gY291bnQ7CisKKyAgICAgICAgICAgICAgY29uc3QgVmFyaWFibGUgKnZhcmlhYmxlID0gZmluZFJlYWRhYmxlVmFyaWFibGUoY3VycmVudERhdGFWYXJpYWJsZXMsIGZpcnN0LCBjb3VudCk7CisKKyAgICAgICAgICAgICAgaWYgKHZhcmlhYmxlKSB7CisgICAgICAgICAgICAgICAgZ2V0VmFyaWFibGVWYWx1ZSh2YXJpYWJsZSwgJnN1YnN0aXR1dGlvbi5jaGFyYWN0ZXJzLCAmc3Vic3RpdHV0aW9uLmxlbmd0aCk7CisgICAgICAgICAgICAgICAgb2sgPSAxOworICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICBpbmRleCA9IGxlbmd0aCAtIDE7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIH0KKworICAgICAgICAgIGNhc2UgV0NfQygnPCcpOiB7CisgICAgICAgICAgICBjb25zdCB3Y2hhcl90ICpmaXJzdCA9ICZjaGFyYWN0ZXJzWysraW5kZXhdOworICAgICAgICAgICAgY29uc3Qgd2NoYXJfdCAqZW5kID0gd21lbWNocihmaXJzdCwgV0NfQygnPicpLCBsZW5ndGgtaW5kZXgpOworCisgICAgICAgICAgICBpZiAobm9Vbmljb2RlKSBicmVhazsKKworICAgICAgICAgICAgaWYgKGVuZCkgeworICAgICAgICAgICAgICBpbnQgY291bnQgPSBlbmQgLSBmaXJzdDsKKyAgICAgICAgICAgICAgaW5kZXggKz0gY291bnQ7CisKKyAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGNoYXIgbmFtZVtjb3VudCsxXTsKKworICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBpOworCisgICAgICAgICAgICAgICAgICBmb3IgKGk9MDsgaTxjb3VudDsgaSs9MSkgeworICAgICAgICAgICAgICAgICAgICB3Y2hhcl90IHdjID0gZmlyc3RbaV07CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKHdjID09IFdDX0MoJ18nKSkgd2MgPSBXQ19DKCcgJyk7CisgICAgICAgICAgICAgICAgICAgIGlmICghaXN3TGF0aW4xKHdjKSkgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIG5hbWVbaV0gPSB3YzsKKyAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgaWYgKGkgPCBjb3VudCkgYnJlYWs7CisgICAgICAgICAgICAgICAgICBuYW1lW2ldID0gMDsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBpZiAoZ2V0Q2hhcmFjdGVyQnlOYW1lKCZjaGFyYWN0ZXIsIG5hbWUpKSBvayA9IDE7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgIGluZGV4ID0gbGVuZ3RoIC0gMTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICB9CisKKyAgICAgIGlmICghb2spIHsKKyAgICAgICAgaWYgKGluZGV4IDwgbGVuZ3RoKSBpbmRleCArPSAxOworCisgICAgICAgIGlmIChwcm9ibGVtKSB7CisgICAgICAgICAgcmVwb3J0RGF0YUVycm9yKGZpbGUsICIlczogJS4qIiBQUkl3cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0dGV4dChwcm9ibGVtKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXgtc3RhcnQsICZjaGFyYWN0ZXJzW3N0YXJ0XSk7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gMDsKKyAgICAgIH0KKyAgICB9CisgICAgaW5kZXggKz0gMTsKKworICAgIHsKKyAgICAgIHVuc2lnbmVkIGludCBuZXdMZW5ndGggPSBzdHJpbmctPmxlbmd0aCArIHN1YnN0aXR1dGlvbi5sZW5ndGg7CisKKyAgICAgIC8qIHRoZXJlIG5lZWRzIHRvIGJlIHJvb20gZm9yIGEgdHJhaWxpbmcgTlVMICovCisgICAgICBpZiAobmV3TGVuZ3RoID49IEFSUkFZX0NPVU5UKHN0cmluZy0+Y2hhcmFjdGVycykpIHsKKyAgICAgICAgcmVwb3J0RGF0YUVycm9yKGZpbGUsICJzdHJpbmcgb3BlcmFuZCB0b28gbG9uZyIpOworICAgICAgICByZXR1cm4gMDsKKyAgICAgIH0KKworICAgICAgd21lbWNweSgmc3RyaW5nLT5jaGFyYWN0ZXJzW3N0cmluZy0+bGVuZ3RoXSwgc3Vic3RpdHV0aW9uLmNoYXJhY3RlcnMsIHN1YnN0aXR1dGlvbi5sZW5ndGgpOworICAgICAgc3RyaW5nLT5sZW5ndGggPSBuZXdMZW5ndGg7CisgICAgfQorICB9CisgIHN0cmluZy0+Y2hhcmFjdGVyc1tzdHJpbmctPmxlbmd0aF0gPSAwOworCisgIHJldHVybiAxOworfQorCitpbnQKK2dldERhdGFTdHJpbmcgKERhdGFGaWxlICpmaWxlLCBEYXRhU3RyaW5nICpzdHJpbmcsIGludCBub1VuaWNvZGUsIGNvbnN0IGNoYXIgKmRlc2NyaXB0aW9uKSB7CisgIERhdGFPcGVyYW5kIG9wZXJhbmQ7CisKKyAgaWYgKGdldERhdGFPcGVyYW5kKGZpbGUsICZvcGVyYW5kLCBkZXNjcmlwdGlvbikpCisgICAgaWYgKHBhcnNlRGF0YVN0cmluZyhmaWxlLCBzdHJpbmcsIG9wZXJhbmQuY2hhcmFjdGVycywgb3BlcmFuZC5sZW5ndGgsIG5vVW5pY29kZSkpCisgICAgICByZXR1cm4gMTsKKworICByZXR1cm4gMDsKK30KKworaW50Cit3cml0ZUhleGFkZWNpbWFsQ2hhcmFjdGVyIChGSUxFICpzdHJlYW0sIHdjaGFyX3QgY2hhcmFjdGVyKSB7CisgIHVpbnQzMl90IHZhbHVlID0gY2hhcmFjdGVyOworCisgIGlmICh2YWx1ZSA8IDBYMTAwKSB7CisgICAgcmV0dXJuIGZwcmludGYoc3RyZWFtLCAiXFx4JTAyIiBQUklYMzIsIHZhbHVlKSAhPSBFT0Y7CisgIH0gZWxzZSBpZiAodmFsdWUgPCAwWDEwMDAwKSB7CisgICAgcmV0dXJuIGZwcmludGYoc3RyZWFtLCAiXFx1JTA0IiBQUklYMzIsIHZhbHVlKSAhPSBFT0Y7CisgIH0gZWxzZSB7CisgICAgcmV0dXJuIGZwcmludGYoc3RyZWFtLCAiXFxVJTA4IiBQUklYMzIsIHZhbHVlKSAhPSBFT0Y7CisgIH0KK30KKworaW50Cit3cml0ZUVzY2FwZWRDaGFyYWN0ZXIgKEZJTEUgKnN0cmVhbSwgd2NoYXJfdCBjaGFyYWN0ZXIpIHsKKyAgeworICAgIHN0YXRpYyBjb25zdCBjaGFyIGVzY2FwZXNbXSA9IHsKKyAgICAgIFsnICddICA9ICdzJywKKyAgICAgIFsnXFwnXSA9ICdcXCcKKyAgICB9OworCisgICAgaWYgKGNoYXJhY3RlciA8IEFSUkFZX0NPVU5UKGVzY2FwZXMpKSB7CisgICAgICBjaGFyIGVzY2FwZSA9IGVzY2FwZXNbY2hhcmFjdGVyXTsKKworICAgICAgaWYgKGVzY2FwZSkgeworICAgICAgICByZXR1cm4gZnByaW50ZihzdHJlYW0sICJcXCVjIiwgZXNjYXBlKSAhPSBFT0Y7CisgICAgICB9CisgICAgfQorICB9CisKKyAgaWYgKGlzd3NwYWNlKGNoYXJhY3RlcikgfHwgaXN3Y250cmwoY2hhcmFjdGVyKSkgcmV0dXJuIHdyaXRlSGV4YWRlY2ltYWxDaGFyYWN0ZXIoc3RyZWFtLCBjaGFyYWN0ZXIpOworICByZXR1cm4gd3JpdGVVdGY4Q2hhcmFjdGVyKHN0cmVhbSwgY2hhcmFjdGVyKTsKK30KKworaW50Cit3cml0ZUVzY2FwZWRDaGFyYWN0ZXJzIChGSUxFICpzdHJlYW0sIGNvbnN0IHdjaGFyX3QgKmNoYXJhY3RlcnMsIHNpemVfdCBjb3VudCkgeworICBjb25zdCB3Y2hhcl90ICplbmQgPSBjaGFyYWN0ZXJzICsgY291bnQ7CisKKyAgd2hpbGUgKGNoYXJhY3RlcnMgPCBlbmQpCisgICAgaWYgKCF3cml0ZUVzY2FwZWRDaGFyYWN0ZXIoc3RyZWFtLCAqY2hhcmFjdGVycysrKSkKKyAgICAgIHJldHVybiAwOworCisgIHJldHVybiAxOworfQorCitzdGF0aWMgaW50CitwYXJzZURvdE9wZXJhbmQgKERhdGFGaWxlICpmaWxlLCBpbnQgKmluZGV4LCBjb25zdCB3Y2hhcl90ICpjaGFyYWN0ZXJzLCBpbnQgbGVuZ3RoKSB7CisgIGlmIChsZW5ndGggPT0gMSkKKyAgICBpZiAoYnJsRG90TnVtYmVyVG9JbmRleChjaGFyYWN0ZXJzWzBdLCBpbmRleCkpCisgICAgICByZXR1cm4gMTsKKworICByZXBvcnREYXRhRXJyb3IoZmlsZSwgImludmFsaWQgYnJhaWxsZSBkb3QgbnVtYmVyOiAlLioiIFBSSXdzLCBsZW5ndGgsIGNoYXJhY3RlcnMpOworICByZXR1cm4gMDsKK30KKworaW50CitnZXREb3RPcGVyYW5kIChEYXRhRmlsZSAqZmlsZSwgaW50ICppbmRleCkgeworICBEYXRhT3BlcmFuZCBudW1iZXI7CisKKyAgaWYgKGdldERhdGFPcGVyYW5kKGZpbGUsICZudW1iZXIsICJkb3QgbnVtYmVyIikpCisgICAgaWYgKHBhcnNlRG90T3BlcmFuZChmaWxlLCBpbmRleCwgbnVtYmVyLmNoYXJhY3RlcnMsIG51bWJlci5sZW5ndGgpKQorICAgICAgcmV0dXJuIDE7CisKKyAgcmV0dXJuIDA7Cit9CisKK2ludAorcGFyc2VDZWxsc09wZXJhbmQgKERhdGFGaWxlICpmaWxlLCBCeXRlT3BlcmFuZCAqY2VsbHMsIGNvbnN0IHdjaGFyX3QgKmNoYXJhY3RlcnMsIGludCBsZW5ndGgpIHsKKyAgdW5zaWduZWQgY2hhciBjZWxsID0gMDsKKyAgaW50IHN0YXJ0ID0gMDsKKyAgaW50IGluZGV4OworCisgIGNlbGxzLT5sZW5ndGggPSAwOworCisgIGZvciAoaW5kZXg9MDsgaW5kZXg8bGVuZ3RoOyBpbmRleCs9MSkgeworICAgIGludCBzdGFydGVkID0gaW5kZXggIT0gc3RhcnQ7CisgICAgd2NoYXJfdCBjaGFyYWN0ZXIgPSBjaGFyYWN0ZXJzW2luZGV4XTsKKworICAgIHN3aXRjaCAoY2hhcmFjdGVyKSB7CisgICAgICB7CisgICAgICAgIGludCBkb3Q7CisKKyAgICAgIGNhc2UgV0NfQygnMScpOgorICAgICAgICBkb3QgPSBCUkxfRE9UXzE7CisgICAgICAgIGdvdG8gZG9Eb3Q7CisKKyAgICAgIGNhc2UgV0NfQygnMicpOgorICAgICAgICBkb3QgPSBCUkxfRE9UXzI7CisgICAgICAgIGdvdG8gZG9Eb3Q7CisKKyAgICAgIGNhc2UgV0NfQygnMycpOgorICAgICAgICBkb3QgPSBCUkxfRE9UXzM7CisgICAgICAgIGdvdG8gZG9Eb3Q7CisKKyAgICAgIGNhc2UgV0NfQygnNCcpOgorICAgICAgICBkb3QgPSBCUkxfRE9UXzQ7CisgICAgICAgIGdvdG8gZG9Eb3Q7CisKKyAgICAgIGNhc2UgV0NfQygnNScpOgorICAgICAgICBkb3QgPSBCUkxfRE9UXzU7CisgICAgICAgIGdvdG8gZG9Eb3Q7CisKKyAgICAgIGNhc2UgV0NfQygnNicpOgorICAgICAgICBkb3QgPSBCUkxfRE9UXzY7CisgICAgICAgIGdvdG8gZG9Eb3Q7CisKKyAgICAgIGNhc2UgV0NfQygnNycpOgorICAgICAgICBkb3QgPSBCUkxfRE9UXzc7CisgICAgICAgIGdvdG8gZG9Eb3Q7CisKKyAgICAgIGNhc2UgV0NfQygnOCcpOgorICAgICAgICBkb3QgPSBCUkxfRE9UXzg7CisgICAgICAgIGdvdG8gZG9Eb3Q7CisKKyAgICAgIGRvRG90OgorICAgICAgICBpZiAoc3RhcnRlZCAmJiAhY2VsbCkgZ290byBpbnZhbGlkOworCisgICAgICAgIGlmIChjZWxsICYgZG90KSB7CisgICAgICAgICAgcmVwb3J0RGF0YUVycm9yKGZpbGUsICJkb3Qgc3BlY2lmaWVkIG1vcmUgdGhhbiBvbmNlOiAlLjEiIFBSSXdzLCAmY2hhcmFjdGVyKTsKKyAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQorCisgICAgICAgIGNlbGwgfD0gZG90OworICAgICAgICBicmVhazsKKyAgICAgIH0KKworICAgICAgY2FzZSBDRUxMU19PUEVSQU5EX1NQQUNFOgorICAgICAgICBpZiAoc3RhcnRlZCkgZ290byBpbnZhbGlkOworICAgICAgICBicmVhazsKKworICAgICAgY2FzZSBDRUxMU19PUEVSQU5EX0RFTElNSVRFUjoKKyAgICAgICAgaWYgKCFzdGFydGVkKSB7CisgICAgICAgICAgcmVwb3J0RGF0YUVycm9yKGZpbGUsICJtaXNzaW5nIGNlbGwgc3BlY2lmaWNhdGlvbjogJS4qIiBQUkl3cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgbGVuZ3RoLWluZGV4LCAmY2hhcmFjdGVyc1tpbmRleF0pOworICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CisKKyAgICAgICAgY2VsbHMtPmJ5dGVzW2NlbGxzLT5sZW5ndGgrK10gPSBjZWxsOworCisgICAgICAgIGlmIChjZWxscy0+bGVuZ3RoID09IEFSUkFZX0NPVU5UKGNlbGxzLT5ieXRlcykpIHsKKyAgICAgICAgICByZXBvcnREYXRhRXJyb3IoZmlsZSwgImNlbGxzIG9wZXJhbmQgdG9vIGxvbmciKTsKKyAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQorCisgICAgICAgIGNlbGwgPSAwOworICAgICAgICBzdGFydCA9IGluZGV4ICsgMTsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGRlZmF1bHQ6CisgICAgICBpbnZhbGlkOgorICAgICAgICByZXBvcnREYXRhRXJyb3IoZmlsZSwgImludmFsaWQgZG90IG51bWJlcjogJS4xIiBQUkl3cywgJmNoYXJhY3Rlcik7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgfQorCisgIGlmIChpbmRleCA9PSBzdGFydCkgeworICAgIHJlcG9ydERhdGFFcnJvcihmaWxlLCAibWlzc2luZyBjZWxsIHNwZWNpZmljYXRpb24iKTsKKyAgICByZXR1cm4gMDsKKyAgfQorCisgIGNlbGxzLT5ieXRlc1tjZWxscy0+bGVuZ3RoKytdID0gY2VsbDsJCS8qbGFzdCBjZWxsICovCisgIHJldHVybiAxOworfQorCitpbnQKK2dldENlbGxzT3BlcmFuZCAoRGF0YUZpbGUgKmZpbGUsIEJ5dGVPcGVyYW5kICpjZWxscywgY29uc3QgY2hhciAqZGVzY3JpcHRpb24pIHsKKyAgRGF0YU9wZXJhbmQgb3BlcmFuZDsKKworICBpZiAoZ2V0RGF0YU9wZXJhbmQoZmlsZSwgJm9wZXJhbmQsIGRlc2NyaXB0aW9uKSkKKyAgICBpZiAocGFyc2VDZWxsc09wZXJhbmQoZmlsZSwgY2VsbHMsIG9wZXJhbmQuY2hhcmFjdGVycywgb3BlcmFuZC5sZW5ndGgpKQorICAgICAgcmV0dXJuIDE7CisKKyAgcmV0dXJuIDA7Cit9CisKK2ludAord3JpdGVEb3RzIChGSUxFICpzdHJlYW0sIHVuc2lnbmVkIGNoYXIgY2VsbCkgeworICB1bnNpZ25lZCBpbnQgZG90OworCisgIGZvciAoZG90PTE7IGRvdDw9QlJMX0RPVF9DT1VOVDsgZG90Kz0xKSB7CisgICAgaWYgKGNlbGwgJiBCUkxfRE9UKGRvdCkpIHsKKyAgICAgIGlmIChmcHJpbnRmKHN0cmVhbSwgIiV1IiwgZG90KSA9PSBFT0YpIHJldHVybiAwOworICAgIH0KKyAgfQorCisgIHJldHVybiAxOworfQorCitpbnQKK3dyaXRlRG90c0NlbGwgKEZJTEUgKnN0cmVhbSwgdW5zaWduZWQgY2hhciBjZWxsKSB7CisgIGlmICghY2VsbCkgcmV0dXJuIGZwdXRjKCcwJywgc3RyZWFtKSAhPSBFT0Y7CisgIHJldHVybiB3cml0ZURvdHMoc3RyZWFtLCBjZWxsKTsKK30KKworaW50Cit3cml0ZURvdHNDZWxscyAoRklMRSAqc3RyZWFtLCBjb25zdCB1bnNpZ25lZCBjaGFyICpjZWxscywgc2l6ZV90IGNvdW50KSB7CisgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmNlbGwgPSBjZWxsczsKKyAgY29uc3QgdW5zaWduZWQgY2hhciAqZW5kID0gY2VsbHMgKyBjb3VudDsKKworICB3aGlsZSAoY2VsbCA8IGVuZCkgeworICAgIGlmIChjZWxsICE9IGNlbGxzKQorICAgICAgaWYgKGZwdXRjKCctJywgc3RyZWFtKSA9PSBFT0YpCisgICAgICAgIHJldHVybiAwOworCisgICAgaWYgKCF3cml0ZURvdHNDZWxsKHN0cmVhbSwgKmNlbGwrKykpIHJldHVybiAwOworICB9CisKKyAgcmV0dXJuIDE7Cit9CisKK2ludAord3JpdGVVdGY4Q2VsbCAoRklMRSAqc3RyZWFtLCB1bnNpZ25lZCBjaGFyIGNlbGwpIHsKKyAgcmV0dXJuIHdyaXRlVXRmOENoYXJhY3RlcihzdHJlYW0sIChVTklDT0RFX0JSQUlMTEVfUk9XIHwgY2VsbCkpOworfQorCitpbnQKK3dyaXRlVXRmOENlbGxzIChGSUxFICpzdHJlYW0sIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmNlbGxzLCBzaXplX3QgY291bnQpIHsKKyAgY29uc3QgdW5zaWduZWQgY2hhciAqZW5kID0gY2VsbHMgKyBjb3VudDsKKworICB3aGlsZSAoY2VsbHMgPCBlbmQpCisgICAgaWYgKCF3cml0ZVV0ZjhDZWxsKHN0cmVhbSwgKmNlbGxzKyspKQorICAgICAgcmV0dXJuIDA7CisKKyAgcmV0dXJuIDE7Cit9CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgdW5zaWduZWQgY2FuSW5jbHVkZToxOworICB1bnNpZ25lZCBpc0luY2x1ZGluZzoxOworICB1bnNpZ25lZCBpbkVsc2U6MTsKK30gRGF0YUNvbmRpdGlvbjsKKworc3RhdGljIGlubGluZSBpbnQKK3NoYWxsSW5jbHVkZSAoY29uc3QgRGF0YUNvbmRpdGlvbiAqY29uZGl0aW9uKSB7CisgIHJldHVybiBjb25kaXRpb24tPmNhbkluY2x1ZGUgJiYgY29uZGl0aW9uLT5pc0luY2x1ZGluZzsKK30KKworc3RhdGljIHZvaWQKK2RlYWxsb2NhdGVEYXRhQ29uZGl0aW9uICh2b2lkICppdGVtLCB2b2lkICpkYXRhIFVOVVNFRCkgeworICBEYXRhQ29uZGl0aW9uICpjb25kaXRpb24gPSBpdGVtOworCisgIGZyZWUoY29uZGl0aW9uKTsKK30KKworc3RhdGljIEVsZW1lbnQgKgorZ2V0SW5uZXJtb3N0RGF0YUNvbmRpdGlvbiAoRGF0YUZpbGUgKmZpbGUpIHsKKyAgcmV0dXJuIGdldFN0YWNrSGVhZChmaWxlLT5jb25kaXRpb25zKTsKK30KKworc3RhdGljIEVsZW1lbnQgKgorZ2V0Q3VycmVudERhdGFDb25kaXRpb24gKERhdGFGaWxlICpmaWxlKSB7CisgIHsKKyAgICBFbGVtZW50ICplbGVtZW50ID0gZ2V0SW5uZXJtb3N0RGF0YUNvbmRpdGlvbihmaWxlKTsKKworICAgIGlmIChlbGVtZW50KSByZXR1cm4gZWxlbWVudDsKKyAgfQorCisgIHJlcG9ydERhdGFFcnJvcihmaWxlLCAibm8gb3V0c3RhbmRpbmcgY29uZGl0aW9uIik7CisgIHJldHVybiBOVUxMOworfQorCitzdGF0aWMgaW50CityZW1vdmVEYXRhQ29uZGl0aW9uIChEYXRhRmlsZSAqZmlsZSwgRWxlbWVudCAqZWxlbWVudCwgaW50IGlkZW50aWZpZXIpIHsKKyAgaWYgKCEoZWxlbWVudCAmJiAoaWRlbnRpZmllciA9PSBnZXRFbGVtZW50SWRlbnRpZmllcihlbGVtZW50KSkpKSByZXR1cm4gMDsKKyAgZGVsZXRlRWxlbWVudChlbGVtZW50KTsKKyAgcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBFbGVtZW50ICoKK3B1c2hEYXRhQ29uZGl0aW9uICgKKyAgRGF0YUZpbGUgKmZpbGUsIGNvbnN0IERhdGFTdHJpbmcgKm5hbWUsCisgIERhdGFDb25kaXRpb25UZXN0ZXIgKnRlc3RDb25kaXRpb24sIGludCBuZWdhdGVDb25kaXRpb24KKykgeworICBEYXRhQ29uZGl0aW9uICpjb25kaXRpb247CisKKyAgaWYgKChjb25kaXRpb24gPSBtYWxsb2Moc2l6ZW9mKCpjb25kaXRpb24pKSkpIHsKKyAgICBtZW1zZXQoY29uZGl0aW9uLCAwLCBzaXplb2YoKmNvbmRpdGlvbikpOworICAgIGNvbmRpdGlvbi0+aW5FbHNlID0gMDsKKworICAgIHsKKyAgICAgIGNvbnN0IERhdGFPcGVyYW5kIGlkZW50aWZpZXIgPSB7CisgICAgICAgIC5jaGFyYWN0ZXJzID0gbmFtZS0+Y2hhcmFjdGVycywKKyAgICAgICAgLmxlbmd0aCA9IG5hbWUtPmxlbmd0aAorICAgICAgfTsKKworICAgICAgY29uZGl0aW9uLT5pc0luY2x1ZGluZyA9IHRlc3RDb25kaXRpb24oZmlsZSwgJmlkZW50aWZpZXIsIGZpbGUtPnBhcmFtZXRlcnMtPmRhdGEpOworICAgICAgaWYgKG5lZ2F0ZUNvbmRpdGlvbikgY29uZGl0aW9uLT5pc0luY2x1ZGluZyA9ICFjb25kaXRpb24tPmlzSW5jbHVkaW5nOworICAgIH0KKworICAgIHsKKyAgICAgIEVsZW1lbnQgKmVsZW1lbnQgPSBnZXRJbm5lcm1vc3REYXRhQ29uZGl0aW9uKGZpbGUpOworCisgICAgICBpZiAoZWxlbWVudCkgeworICAgICAgICBjb25zdCBEYXRhQ29uZGl0aW9uICpwYXJlbnQgPSBnZXRFbGVtZW50SXRlbShlbGVtZW50KTsKKworICAgICAgICBjb25kaXRpb24tPmNhbkluY2x1ZGUgPSBzaGFsbEluY2x1ZGUocGFyZW50KTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIGNvbmRpdGlvbi0+Y2FuSW5jbHVkZSA9IDE7CisgICAgICB9CisgICAgfQorCisgICAgeworICAgICAgRWxlbWVudCAqZWxlbWVudCA9IGVucXVldWVJdGVtKGZpbGUtPmNvbmRpdGlvbnMsIGNvbmRpdGlvbik7CisKKyAgICAgIGlmIChlbGVtZW50KSByZXR1cm4gZWxlbWVudDsKKyAgICB9CisKKyAgICBmcmVlKGNvbmRpdGlvbik7CisgIH0gZWxzZSB7CisgICAgbG9nTWFsbG9jRXJyb3IoKTsKKyAgfQorCisgIHJldHVybiBOVUxMOworfQorCitzdGF0aWMgaW50Cit0ZXN0RGF0YUNvbmRpdGlvbiAoRGF0YUZpbGUgKmZpbGUpIHsKKyAgRWxlbWVudCAqZWxlbWVudCA9IGdldElubmVybW9zdERhdGFDb25kaXRpb24oZmlsZSk7CisKKyAgaWYgKGVsZW1lbnQpIHsKKyAgICBjb25zdCBEYXRhQ29uZGl0aW9uICpjb25kaXRpb24gPSBnZXRFbGVtZW50SXRlbShlbGVtZW50KTsKKworICAgIGlmICghc2hhbGxJbmNsdWRlKGNvbmRpdGlvbikpIHJldHVybiAwOworICB9CisKKyAgcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQKK2NvbXBhcmVEYXRhRGlyZWN0aXZlTmFtZXMgKGNvbnN0IHdjaGFyX3QgKm5hbWUxLCBjb25zdCB3Y2hhcl90ICpuYW1lMikgeworICByZXR1cm4gY29tcGFyZUtleXdvcmRzKG5hbWUxLCBuYW1lMik7Cit9CisKK3N0YXRpYyBpbnQKK3NvcnREYXRhRGlyZWN0aXZlc0J5TmFtZSAoY29uc3Qgdm9pZCAqZWxlbWVudDEsIGNvbnN0IHZvaWQgKmVsZW1lbnQyKSB7CisgIGNvbnN0IERhdGFEaXJlY3RpdmUgKmNvbnN0ICpkaXJlY3RpdmUxID0gZWxlbWVudDE7CisgIGNvbnN0IERhdGFEaXJlY3RpdmUgKmNvbnN0ICpkaXJlY3RpdmUyID0gZWxlbWVudDI7CisKKyAgcmV0dXJuIGNvbXBhcmVEYXRhRGlyZWN0aXZlTmFtZXMoKCpkaXJlY3RpdmUxKS0+bmFtZSwgKCpkaXJlY3RpdmUyKS0+bmFtZSk7Cit9CisKK3N0YXRpYyBpbnQKK3NlYXJjaERhdGFEaXJlY3RpdmVCeU5hbWUgKGNvbnN0IHZvaWQgKnRhcmdldCwgY29uc3Qgdm9pZCAqZWxlbWVudCkgeworICBjb25zdCB3Y2hhcl90ICpuYW1lID0gdGFyZ2V0OworICBjb25zdCBEYXRhRGlyZWN0aXZlICpjb25zdCAqZGlyZWN0aXZlID0gZWxlbWVudDsKKworICByZXR1cm4gY29tcGFyZURhdGFEaXJlY3RpdmVOYW1lcyhuYW1lLCAoKmRpcmVjdGl2ZSktPm5hbWUpOworfQorCitzdGF0aWMgY29uc3QgRGF0YURpcmVjdGl2ZSAqCitmaW5kRGF0YURpcmVjdGl2ZUJ5TmFtZSAoY29uc3QgRGF0YURpcmVjdGl2ZXMgKmRpcmVjdGl2ZXMsIGNvbnN0IHdjaGFyX3QgKm5hbWUpIHsKKyAgRGF0YURpcmVjdGl2ZSAqKmRpcmVjdGl2ZSA9IGJzZWFyY2goCisgICAgbmFtZSwgZGlyZWN0aXZlcy0+c29ydGVkLnRhYmxlLCBkaXJlY3RpdmVzLT5zb3J0ZWQuY291bnQsCisgICAgc2l6ZW9mKCpkaXJlY3RpdmVzLT5zb3J0ZWQudGFibGUpLCBzZWFyY2hEYXRhRGlyZWN0aXZlQnlOYW1lCisgICk7CisKKyAgcmV0dXJuIGRpcmVjdGl2ZT8gKmRpcmVjdGl2ZTogTlVMTDsKK30KKworc3RhdGljIGludAorcHJlcGFyZURhdGFEaXJlY3RpdmVzIChEYXRhRGlyZWN0aXZlcyAqZGlyZWN0aXZlcykgeworICBpZiAoIWRpcmVjdGl2ZXMtPnNvcnRlZC50YWJsZSkgeworICAgIHN0YXRpYyBjb25zdCBEYXRhRGlyZWN0aXZlIHVubmFtZWQgPSB7CisgICAgICAubmFtZSA9IE5VTEwsCisgICAgICAucHJvY2Vzc29yID0gTlVMTAorICAgIH07CisKKyAgICBkaXJlY3RpdmVzLT51bm5hbWVkID0gJnVubmFtZWQ7CisgICAgZGlyZWN0aXZlcy0+c29ydGVkLmNvdW50ID0gMDsKKworICAgIGlmICghKGRpcmVjdGl2ZXMtPnNvcnRlZC50YWJsZSA9IG1hbGxvYyhBUlJBWV9TSVpFKGRpcmVjdGl2ZXMtPnNvcnRlZC50YWJsZSwgZGlyZWN0aXZlcy0+dW5zb3J0ZWQuY291bnQpKSkpIHsKKyAgICAgIGxvZ01hbGxvY0Vycm9yKCk7CisgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICB7CisgICAgICBjb25zdCBEYXRhRGlyZWN0aXZlICpkaXJlY3RpdmUgPSBkaXJlY3RpdmVzLT51bnNvcnRlZC50YWJsZTsKKyAgICAgIGNvbnN0IERhdGFEaXJlY3RpdmUgKmVuZCA9IGRpcmVjdGl2ZSArIGRpcmVjdGl2ZXMtPnVuc29ydGVkLmNvdW50OworCisgICAgICB3aGlsZSAoZGlyZWN0aXZlIDwgZW5kKSB7CisgICAgICAgIGlmIChkaXJlY3RpdmUtPm5hbWUpIHsKKyAgICAgICAgICBkaXJlY3RpdmVzLT5zb3J0ZWQudGFibGVbZGlyZWN0aXZlcy0+c29ydGVkLmNvdW50KytdID0gZGlyZWN0aXZlOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgIGRpcmVjdGl2ZXMtPnVubmFtZWQgPSBkaXJlY3RpdmU7CisgICAgICAgIH0KKworICAgICAgICBkaXJlY3RpdmUgKz0gMTsKKyAgICAgIH0KKyAgICB9CisKKyAgICBxc29ydChkaXJlY3RpdmVzLT5zb3J0ZWQudGFibGUsIGRpcmVjdGl2ZXMtPnNvcnRlZC5jb3VudCwKKyAgICAgICAgICBzaXplb2YoKmRpcmVjdGl2ZXMtPnNvcnRlZC50YWJsZSksIHNvcnREYXRhRGlyZWN0aXZlc0J5TmFtZSk7CisgIH0KKworICByZXR1cm4gMTsKK30KKworaW50Citwcm9jZXNzRGlyZWN0aXZlT3BlcmFuZCAoRGF0YUZpbGUgKmZpbGUsIERhdGFEaXJlY3RpdmVzICpkaXJlY3RpdmVzLCBjb25zdCBjaGFyICpkZXNjcmlwdGlvbiwgdm9pZCAqZGF0YSkgeworICBEYXRhT3BlcmFuZCBuYW1lOworCisgIGlmIChnZXREYXRhT3BlcmFuZChmaWxlLCAmbmFtZSwgZGVzY3JpcHRpb24pKSB7CisgICAgY29uc3QgRGF0YURpcmVjdGl2ZSAqZGlyZWN0aXZlOworCisgICAgaWYgKCFwcmVwYXJlRGF0YURpcmVjdGl2ZXMoZGlyZWN0aXZlcykpIHJldHVybiAwOworCisgICAgeworICAgICAgd2NoYXJfdCBzdHJpbmdbbmFtZS5sZW5ndGggKyAxXTsKKworICAgICAgd21lbWNweShzdHJpbmcsIG5hbWUuY2hhcmFjdGVycywgbmFtZS5sZW5ndGgpOworICAgICAgc3RyaW5nW25hbWUubGVuZ3RoXSA9IDA7CisKKyAgICAgIGlmICghKGRpcmVjdGl2ZSA9IGZpbmREYXRhRGlyZWN0aXZlQnlOYW1lKGRpcmVjdGl2ZXMsIHN0cmluZykpKSB7CisgICAgICAgIGRpcmVjdGl2ZSA9IGRpcmVjdGl2ZXMtPnVubmFtZWQ7CisgICAgICAgIHVuZ2V0RGF0YUNoYXJhY3RlcnMoZmlsZSwgbmFtZS5sZW5ndGgpOworICAgICAgfQorICAgIH0KKworICAgIGlmICghKGRpcmVjdGl2ZS0+dW5jb25kaXRpb25hbCB8fCB0ZXN0RGF0YUNvbmRpdGlvbihmaWxlKSkpIHJldHVybiAxOworICAgIGlmIChkaXJlY3RpdmUtPnByb2Nlc3NvcikgcmV0dXJuIGRpcmVjdGl2ZS0+cHJvY2Vzc29yKGZpbGUsIGRhdGEpOworCisgICAgcmVwb3J0RGF0YUVycm9yKGZpbGUsICJ1bmtub3duICVzOiAlLioiIFBSSXdzLAorICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbiwgbmFtZS5sZW5ndGgsIG5hbWUuY2hhcmFjdGVycyk7CisgIH0KKworICByZXR1cm4gMTsKK30KKworc3RhdGljIGludAorcHJvY2Vzc0RhdGFPcGVyYW5kcyAoRGF0YUZpbGUgKmZpbGUpIHsKKyAgcmV0dXJuIGZpbGUtPnBhcmFtZXRlcnMtPnByb2Nlc3NPcGVyYW5kcyhmaWxlLCBmaWxlLT5wYXJhbWV0ZXJzLT5kYXRhKTsKK30KKworc3RhdGljIGludAorcHJvY2Vzc0RhdGFDaGFyYWN0ZXJzIChEYXRhRmlsZSAqZmlsZSwgY29uc3Qgd2NoYXJfdCAqbGluZSkgeworICBmaWxlLT5lbmQgPSBmaWxlLT5zdGFydCA9IGxpbmU7CisKKyAgaWYgKCEoZmlsZS0+cGFyYW1ldGVycy0+b3B0aW9ucyAmIERGT19OT19DT01NRU5UUykpIHsKKyAgICBpZiAoIWZpbmREYXRhT3BlcmFuZChmaWxlLCBOVUxMKSkgcmV0dXJuIDE7CisgICAgaWYgKGZpbGUtPnN0YXJ0WzBdID09IFdDX0MoJyMnKSkgcmV0dXJuIDE7CisgIH0KKworICByZXR1cm4gcHJvY2Vzc0RhdGFPcGVyYW5kcyhmaWxlKTsKK30KKworc3RhdGljIGludAorcHJvY2Vzc0NvbmRpdGlvblN1YmRpcmVjdGl2ZSAoRGF0YUZpbGUgKmZpbGUsIEVsZW1lbnQgKmVsZW1lbnQpIHsKKyAgaW50IGlkZW50aWZpZXIgPSBnZXRFbGVtZW50SWRlbnRpZmllcihlbGVtZW50KTsKKworICBpZiAoZmluZERhdGFPcGVyYW5kKGZpbGUsIE5VTEwpKSB7CisgICAgaW50IHJlc3VsdCA9IHByb2Nlc3NEYXRhT3BlcmFuZHMoZmlsZSk7CisgICAgcmVtb3ZlRGF0YUNvbmRpdGlvbihmaWxlLCBlbGVtZW50LCBpZGVudGlmaWVyKTsKKyAgICByZXR1cm4gcmVzdWx0OworICB9CisKKyAgcmV0dXJuIDE7Cit9CisKK2ludAorcHJvY2Vzc0NvbmRpdGlvbk9wZXJhbmRzICgKKyAgRGF0YUZpbGUgKmZpbGUsCisgIERhdGFDb25kaXRpb25UZXN0ZXIgKnRlc3RDb25kaXRpb24sIGludCBuZWdhdGVDb25kaXRpb24sCisgIGNvbnN0IGNoYXIgKmRlc2NyaXB0aW9uLCB2b2lkICpkYXRhCispIHsKKyAgRGF0YVN0cmluZyBuYW1lOworCisgIGlmIChnZXREYXRhU3RyaW5nKGZpbGUsICZuYW1lLCAxLCBkZXNjcmlwdGlvbikpIHsKKyAgICBFbGVtZW50ICplbGVtZW50ID0gcHVzaERhdGFDb25kaXRpb24oZmlsZSwgJm5hbWUsIHRlc3RDb25kaXRpb24sIG5lZ2F0ZUNvbmRpdGlvbik7CisKKyAgICBpZiAoIWVsZW1lbnQpIHJldHVybiAwOworICAgIGlmICghcHJvY2Vzc0NvbmRpdGlvblN1YmRpcmVjdGl2ZShmaWxlLCBlbGVtZW50KSkgcmV0dXJuIDA7CisgIH0KKworICByZXR1cm4gMTsKK30KKworc3RhdGljIERBVEFfQ09ORElUSU9OX1RFU1RFUih0ZXN0VmFyaWFibGVEZWZpbmVkKSB7CisgIHJldHVybiAhIWZpbmRSZWFkYWJsZVZhcmlhYmxlKGN1cnJlbnREYXRhVmFyaWFibGVzLCBpZGVudGlmaWVyLT5jaGFyYWN0ZXJzLCBpZGVudGlmaWVyLT5sZW5ndGgpOworfQorCitzdGF0aWMgaW50Citwcm9jZXNzVmFyaWFibGVUZXN0T3BlcmFuZHMgKERhdGFGaWxlICpmaWxlLCBpbnQgbm90LCB2b2lkICpkYXRhKSB7CisgIHJldHVybiBwcm9jZXNzQ29uZGl0aW9uT3BlcmFuZHMoZmlsZSwgdGVzdFZhcmlhYmxlRGVmaW5lZCwgbm90LCAidmFyaWFibGUgbmFtZSIsIGRhdGEpOworfQorCitEQVRBX09QRVJBTkRTX1BST0NFU1NPUihwcm9jZXNzSWZWYXJPcGVyYW5kcykgeworICByZXR1cm4gcHJvY2Vzc1ZhcmlhYmxlVGVzdE9wZXJhbmRzKGZpbGUsIDAsIGRhdGEpOworfQorCitEQVRBX09QRVJBTkRTX1BST0NFU1NPUihwcm9jZXNzSWZOb3RWYXJPcGVyYW5kcykgeworICByZXR1cm4gcHJvY2Vzc1ZhcmlhYmxlVGVzdE9wZXJhbmRzKGZpbGUsIDEsIGRhdGEpOworfQorCitEQVRBX09QRVJBTkRTX1BST0NFU1NPUihwcm9jZXNzQmVnaW5WYXJpYWJsZXNPcGVyYW5kcykgeworICByZXR1cm4gcHVzaERhdGFWYXJpYWJsZU5lc3RpbmdMZXZlbCgpOworfQorCitEQVRBX09QRVJBTkRTX1BST0NFU1NPUihwcm9jZXNzRW5kVmFyaWFibGVzT3BlcmFuZHMpIHsKKyAgaWYgKGN1cnJlbnREYXRhVmFyaWFibGVzID09IGZpbGUtPnZhcmlhYmxlcykgeworICAgIHJlcG9ydERhdGFFcnJvcihmaWxlLCAibm8gbmVzdGVkIHZhcmlhYmxlcyIpOworICB9IGVsc2UgeworICAgIGN1cnJlbnREYXRhVmFyaWFibGVzID0gcmVtb3ZlVmFyaWFibGVOZXN0aW5nTGV2ZWwoY3VycmVudERhdGFWYXJpYWJsZXMpOworICB9CisKKyAgcmV0dXJuIDE7Cit9CisKK0RBVEFfT1BFUkFORFNfUFJPQ0VTU09SKHByb2Nlc3NMaXN0VmFyaWFibGVzT3BlcmFuZHMpIHsKKyAgbGlzdFZhcmlhYmxlcyhjdXJyZW50RGF0YVZhcmlhYmxlcyk7CisgIHJldHVybiAxOworfQorCitzdGF0aWMgaW50Citwcm9jZXNzVmFyaWFibGVBc3NpZ25tZW50T3BlcmFuZHMgKERhdGFGaWxlICpmaWxlLCBpbnQgaWZOb3RTZXQsIHZvaWQgKmRhdGEpIHsKKyAgRGF0YU9wZXJhbmQgbmFtZTsKKworICBpZiAoZ2V0RGF0YU9wZXJhbmQoZmlsZSwgJm5hbWUsICJ2YXJpYWJsZSBuYW1lIikpIHsKKyAgICBEYXRhU3RyaW5nIHZhbHVlOworCisgICAgaWYgKCFnZXREYXRhU3RyaW5nKGZpbGUsICZ2YWx1ZSwgMCwgTlVMTCkpIHsKKyAgICAgIHZhbHVlLmxlbmd0aCA9IDA7CisgICAgfQorCisgICAgaWYgKGlmTm90U2V0KSB7CisgICAgICBjb25zdCBWYXJpYWJsZSAqdmFyaWFibGUgPSBmaW5kUmVhZGFibGVWYXJpYWJsZShjdXJyZW50RGF0YVZhcmlhYmxlcywgbmFtZS5jaGFyYWN0ZXJzLCBuYW1lLmxlbmd0aCk7CisKKyAgICAgIGlmICh2YXJpYWJsZSkgcmV0dXJuIDE7CisgICAgfQorCisgICAgeworICAgICAgVmFyaWFibGUgKnZhcmlhYmxlID0gZmluZFdyaXRhYmxlVmFyaWFibGUoY3VycmVudERhdGFWYXJpYWJsZXMsIG5hbWUuY2hhcmFjdGVycywgbmFtZS5sZW5ndGgpOworCisgICAgICBpZiAodmFyaWFibGUpIHsKKyAgICAgICAgaWYgKHNldFZhcmlhYmxlKHZhcmlhYmxlLCB2YWx1ZS5jaGFyYWN0ZXJzLCB2YWx1ZS5sZW5ndGgpKSByZXR1cm4gMTsKKyAgICAgIH0KKyAgICB9CisgIH0KKworICByZXR1cm4gMTsKK30KKworREFUQV9PUEVSQU5EU19QUk9DRVNTT1IocHJvY2Vzc0Fzc2lnbkRlZmF1bHRPcGVyYW5kcykgeworICByZXR1cm4gcHJvY2Vzc1ZhcmlhYmxlQXNzaWdubWVudE9wZXJhbmRzKGZpbGUsIDEsIGRhdGEpOworfQorCitEQVRBX09QRVJBTkRTX1BST0NFU1NPUihwcm9jZXNzQXNzaWduT3BlcmFuZHMpIHsKKyAgcmV0dXJuIHByb2Nlc3NWYXJpYWJsZUFzc2lnbm1lbnRPcGVyYW5kcyhmaWxlLCAwLCBkYXRhKTsKK30KKworREFUQV9PUEVSQU5EU19QUk9DRVNTT1IocHJvY2Vzc0Vsc2VPcGVyYW5kcykgeworICBFbGVtZW50ICplbGVtZW50ID0gZ2V0Q3VycmVudERhdGFDb25kaXRpb24oZmlsZSk7CisKKyAgaWYgKGVsZW1lbnQpIHsKKyAgICBEYXRhQ29uZGl0aW9uICpjb25kaXRpb24gPSBnZXRFbGVtZW50SXRlbShlbGVtZW50KTsKKworICAgIGlmIChjb25kaXRpb24tPmluRWxzZSkgeworICAgICAgcmVwb3J0RGF0YUVycm9yKGZpbGUsICJhbHJlYWR5IGluIGVsc2UiKTsKKyAgICB9IGVsc2UgeworICAgICAgY29uZGl0aW9uLT5pbkVsc2UgPSAxOworICAgICAgY29uZGl0aW9uLT5pc0luY2x1ZGluZyA9ICFjb25kaXRpb24tPmlzSW5jbHVkaW5nOworICAgICAgaWYgKCFwcm9jZXNzQ29uZGl0aW9uU3ViZGlyZWN0aXZlKGZpbGUsIGVsZW1lbnQpKSByZXR1cm4gMDsKKyAgICB9CisgIH0KKworICByZXR1cm4gMTsKK30KKworREFUQV9PUEVSQU5EU19QUk9DRVNTT1IocHJvY2Vzc0VuZElmT3BlcmFuZHMpIHsKKyAgRWxlbWVudCAqZWxlbWVudCA9IGdldEN1cnJlbnREYXRhQ29uZGl0aW9uKGZpbGUpOworCisgIGlmIChlbGVtZW50KSB7CisgICAgcmVtb3ZlRGF0YUNvbmRpdGlvbihmaWxlLCBlbGVtZW50LCBnZXRFbGVtZW50SWRlbnRpZmllcihlbGVtZW50KSk7CisgIH0KKworICByZXR1cm4gMTsKK30KKworc3RhdGljIGludAoraXNEYXRhRmlsZUluY2x1ZGVkIChEYXRhRmlsZSAqZmlsZSwgY29uc3QgY2hhciAqcGF0aCkgeworICBzdHJ1Y3Qgc3RhdCBpbmZvOworCisgIGlmIChzdGF0KHBhdGgsICZpbmZvKSAhPSAtMSkgeworICAgIHdoaWxlIChmaWxlKSB7CisgICAgICBpZiAoKGZpbGUtPmlkZW50aXR5LmRldmljZSA9PSBpbmZvLnN0X2RldikgJiYgKGZpbGUtPmlkZW50aXR5LmZpbGUgPT0gaW5mby5zdF9pbm8pKSByZXR1cm4gMTsKKyAgICAgIGZpbGUgPSBmaWxlLT5pbmNsdWRlcjsKKyAgICB9CisgIH0KKworICByZXR1cm4gMDsKK30KKworc3RhdGljIEZJTEUgKgorb3BlbkluY2x1ZGVkRGF0YUZpbGUgKERhdGFGaWxlICppbmNsdWRlciwgY29uc3QgY2hhciAqcGF0aCwgY29uc3QgY2hhciAqbW9kZSwgaW50IG9wdGlvbmFsKSB7CisgIGNvbnN0IGNoYXIgKmNvbnN0ICpvdmVycmlkZURpcmVjdG9yaWVzID0gZ2V0QWxsT3ZlcnJpZGVEaXJlY3RvcmllcygpOworICBjb25zdCBjaGFyICpvdmVycmlkZURpcmVjdG9yeSA9IE5VTEw7CisgIGNoYXIgKm92ZXJyaWRlUGF0aCA9IE5VTEw7CisKKyAgaW50IHdyaXRhYmxlID0gKCptb2RlID09ICd3JykgfHwgKCptb2RlID09ICdhJyk7CisgIGNvbnN0IGNoYXIgKm5hbWUgPSBsb2NhdGVQYXRoTmFtZShwYXRoKTsKKyAgRklMRSAqZmlsZTsKKworICBpZiAob3ZlcnJpZGVEaXJlY3RvcmllcykgeworICAgIGNvbnN0IGNoYXIgKmNvbnN0ICpkaXJlY3RvcnkgPSBvdmVycmlkZURpcmVjdG9yaWVzOworCisgICAgd2hpbGUgKCpkaXJlY3RvcnkpIHsKKyAgICAgIGlmICgqKmRpcmVjdG9yeSkgeworICAgICAgICBjaGFyICpwYXRoID0gbWFrZVBhdGgoKmRpcmVjdG9yeSwgbmFtZSk7CisKKyAgICAgICAgaWYgKHBhdGgpIHsKKyAgICAgICAgICBpZiAoIWlzRGF0YUZpbGVJbmNsdWRlZChpbmNsdWRlciwgcGF0aCkpIHsKKyAgICAgICAgICAgIGlmICh0ZXN0RmlsZVBhdGgocGF0aCkpIHsKKyAgICAgICAgICAgICAgZmlsZSA9IG9wZW5GaWxlKHBhdGgsIG1vZGUsIG9wdGlvbmFsKTsKKyAgICAgICAgICAgICAgb3ZlcnJpZGVEaXJlY3RvcnkgPSAqZGlyZWN0b3J5OworICAgICAgICAgICAgICBvdmVycmlkZVBhdGggPSBwYXRoOworICAgICAgICAgICAgICBnb3RvIGRvbmU7CisgICAgICAgICAgICB9CisgICAgICAgICAgfQorCisgICAgICAgICAgZnJlZShwYXRoKTsKKyAgICAgICAgfQorICAgICAgfQorCisgICAgICBkaXJlY3RvcnkgKz0gMTsKKyAgICB9CisgIH0KKworICBpZiAoaXNEYXRhRmlsZUluY2x1ZGVkKGluY2x1ZGVyLCBwYXRoKSkgeworICAgIGxvZ01lc3NhZ2UoTE9HX1dBUk5JTkcsICJkYXRhIGZpbGUgaW5jbHVkZSBsb29wOiAlcyIsIHBhdGgpOworICAgIGZpbGUgPSBOVUxMOworICAgIGVycm5vID0gRU5PRU5UOworICB9IGVsc2UgaWYgKCEoZmlsZSA9IG9wZW5GaWxlKHBhdGgsIG1vZGUsIG9wdGlvbmFsKSkpIHsKKyAgICBpZiAod3JpdGFibGUpIHsKKyAgICAgIGlmIChlcnJubyA9PSBFTk9FTlQpIHsKKyAgICAgICAgY2hhciAqZGlyZWN0b3J5ID0gZ2V0UGF0aERpcmVjdG9yeShwYXRoKTsKKworICAgICAgICBpZiAoZGlyZWN0b3J5KSB7CisgICAgICAgICAgaW50IGV4aXN0cyA9IGVuc3VyZURpcmVjdG9yeShkaXJlY3RvcnksIDApOworICAgICAgICAgIGZyZWUoZGlyZWN0b3J5KTsKKworICAgICAgICAgIGlmIChleGlzdHMpIHsKKyAgICAgICAgICAgIGZpbGUgPSBvcGVuRmlsZShwYXRoLCBtb2RlLCBvcHRpb25hbCk7CisgICAgICAgICAgICBnb3RvIGRvbmU7CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICB9CisKKyAgICAgIGlmICgoZXJybm8gPT0gRUFDQ0VTKSB8fCAoZXJybm8gPT0gRVJPRlMpKSB7CisgICAgICAgIGlmICgob3ZlcnJpZGVEaXJlY3RvcnkgPSBnZXRQcmltYXJ5T3ZlcnJpZGVEaXJlY3RvcnkoKSkpIHsKKyAgICAgICAgICBpZiAoKG92ZXJyaWRlUGF0aCA9IG1ha2VQYXRoKG92ZXJyaWRlRGlyZWN0b3J5LCBuYW1lKSkpIHsKKyAgICAgICAgICAgIGlmIChlbnN1cmVEaXJlY3Rvcnkob3ZlcnJpZGVEaXJlY3RvcnksIDApKSB7CisgICAgICAgICAgICAgIGZpbGUgPSBvcGVuRmlsZShvdmVycmlkZVBhdGgsIG1vZGUsIG9wdGlvbmFsKTsKKyAgICAgICAgICAgICAgZ290byBkb25lOworICAgICAgICAgICAgfQorICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgfQorICAgIH0KKyAgfQorCitkb25lOgorICBpZiAob3ZlcnJpZGVQYXRoKSBmcmVlKG92ZXJyaWRlUGF0aCk7CisgIHJldHVybiBmaWxlOworfQorCitGSUxFICoKK29wZW5EYXRhRmlsZSAoY29uc3QgY2hhciAqcGF0aCwgY29uc3QgY2hhciAqbW9kZSwgaW50IG9wdGlvbmFsKSB7CisgIHJldHVybiBvcGVuSW5jbHVkZWREYXRhRmlsZShOVUxMLCBwYXRoLCBtb2RlLCBvcHRpb25hbCk7Cit9CisKK2ludAoraW5jbHVkZURhdGFGaWxlIChEYXRhRmlsZSAqZmlsZSwgY29uc3Qgd2NoYXJfdCAqbmFtZSwgaW50IGxlbmd0aCkgeworICBpbnQgb2sgPSAwOworCisgIGNvbnN0IGNoYXIgKnByZWZpeEFkZHJlc3MgPSBmaWxlLT5uYW1lOworICBzaXplX3QgcHJlZml4TGVuZ3RoID0gMDsKKworICBzaXplX3Qgc3VmZml4TGVuZ3RoOworICBjaGFyICpzdWZmaXhBZGRyZXNzID0gZ2V0VXRmOEZyb21XY2hhcnMobmFtZSwgbGVuZ3RoLCAmc3VmZml4TGVuZ3RoKTsKKworICBpZiAoc3VmZml4QWRkcmVzcykgeworICAgIGlmICghaXNBYnNvbHV0ZVBhdGgoc3VmZml4QWRkcmVzcykpIHsKKyAgICAgIGNvbnN0IGNoYXIgKnByZWZpeEVuZCA9IHN0cnJjaHIocHJlZml4QWRkcmVzcywgJy8nKTsKKyAgICAgIGlmIChwcmVmaXhFbmQpIHByZWZpeExlbmd0aCA9IHByZWZpeEVuZCAtIHByZWZpeEFkZHJlc3MgKyAxOworICAgIH0KKworICAgIHsKKyAgICAgIGNoYXIgcGF0aFtwcmVmaXhMZW5ndGggKyBzdWZmaXhMZW5ndGggKyAxXTsKKyAgICAgIEZJTEUgKnN0cmVhbTsKKworICAgICAgc25wcmludGYocGF0aCwgc2l6ZW9mKHBhdGgpLCAiJS4qcyUuKnMiLAorICAgICAgICAgICAgICAgKGludClwcmVmaXhMZW5ndGgsIHByZWZpeEFkZHJlc3MsCisgICAgICAgICAgICAgICAoaW50KXN1ZmZpeExlbmd0aCwgc3VmZml4QWRkcmVzcyk7CisKKyAgICAgIGlmICgoc3RyZWFtID0gb3BlbkluY2x1ZGVkRGF0YUZpbGUoZmlsZSwgcGF0aCwgInIiLCAwKSkpIHsKKyAgICAgICAgaWYgKHByb2Nlc3NEYXRhU3RyZWFtKGZpbGUsIHN0cmVhbSwgcGF0aCwgZmlsZS0+cGFyYW1ldGVycykpIG9rID0gMTsKKyAgICAgICAgZmNsb3NlKHN0cmVhbSk7CisgICAgICB9CisgICAgfQorCisgICAgZnJlZShzdWZmaXhBZGRyZXNzKTsKKyAgfSBlbHNlIHsKKyAgICBsb2dNYWxsb2NFcnJvcigpOworICB9CisKKyAgcmV0dXJuIG9rOworfQorCitEQVRBX09QRVJBTkRTX1BST0NFU1NPUihwcm9jZXNzSW5jbHVkZU9wZXJhbmRzKSB7CisgIERhdGFTdHJpbmcgcGF0aDsKKworICBpZiAoZ2V0RGF0YVN0cmluZyhmaWxlLCAmcGF0aCwgMCwgImluY2x1ZGUgZmlsZSBwYXRoIikpCisgICAgaWYgKCFpbmNsdWRlRGF0YUZpbGUoZmlsZSwgcGF0aC5jaGFyYWN0ZXJzLCBwYXRoLmxlbmd0aCkpCisgICAgICByZXR1cm4gMDsKKworICByZXR1cm4gMTsKK30KKworc3RhdGljIGludAorcHJvY2Vzc0RhdGFMaW5lIChjb25zdCBMaW5lSGFuZGxlclBhcmFtZXRlcnMgKnBhcmFtZXRlcnMpIHsKKyAgRGF0YUZpbGUgKmZpbGUgPSBwYXJhbWV0ZXJzLT5kYXRhOworICBmaWxlLT5saW5lICs9IDE7CisKKyAgY29uc3QgY2hhciAqYnl0ZSA9IHBhcmFtZXRlcnMtPmxpbmUudGV4dDsKKyAgc2l6ZV90IHNpemUgPSBwYXJhbWV0ZXJzLT5saW5lLmxlbmd0aCArIDE7CisgIHdjaGFyX3QgY2hhcmFjdGVyc1tzaXplXTsKKyAgd2NoYXJfdCAqY2hhcmFjdGVyID0gY2hhcmFjdGVyczsKKworICBjb252ZXJ0VXRmOFRvV2NoYXJzKCZieXRlLCAmY2hhcmFjdGVyLCBzaXplKTsKKyAgY2hhcmFjdGVyID0gY2hhcmFjdGVyczsKKworICBpZiAoKmJ5dGUpIHsKKyAgICB1bnNpZ25lZCBpbnQgb2Zmc2V0ID0gYnl0ZSAtIHBhcmFtZXRlcnMtPmxpbmUudGV4dDsKKyAgICByZXBvcnREYXRhRXJyb3IoZmlsZSwgImlsbGVnYWwgVVRGLTggY2hhcmFjdGVyIGF0IG9mZnNldCAldSIsIG9mZnNldCk7CisgICAgcmV0dXJuIDE7CisgIH0KKworICBpZiAoZmlsZS0+bGluZSA9PSAxKSB7CisgICAgaWYgKCpjaGFyYWN0ZXIgPT0gVU5JQ09ERV9CWVRFX09SREVSX01BUkspIHsKKyAgICAgIGNoYXJhY3RlciArPSAxOworICAgIH0KKyAgfQorCisgIHJldHVybiBwcm9jZXNzRGF0YUNoYXJhY3RlcnMoZmlsZSwgY2hhcmFjdGVyKTsKK30KKworaW50Citwcm9jZXNzRGF0YVN0cmVhbSAoCisgIERhdGFGaWxlICppbmNsdWRlciwKKyAgRklMRSAqc3RyZWFtLCBjb25zdCBjaGFyICpuYW1lLAorICBjb25zdCBEYXRhRmlsZVBhcmFtZXRlcnMgKnBhcmFtZXRlcnMKKykgeworICBpbnQgb2sgPSAwOworCisgIGlmIChwYXJhbWV0ZXJzLT5sb2dGaWxlTmFtZSkgeworICAgIHBhcmFtZXRlcnMtPmxvZ0ZpbGVOYW1lKG5hbWUsIHBhcmFtZXRlcnMtPmRhdGEpOworICB9IGVsc2UgeworICAgIGxvZ01lc3NhZ2UoTE9HX0RFQlVHLCAiaW5jbHVkaW5nIGRhdGEgZmlsZTogJXMiLCBuYW1lKTsKKyAgfQorCisgIERhdGFGaWxlIGZpbGUgPSB7CisgICAgLm5hbWUgPSBuYW1lLAorICAgIC5wYXJhbWV0ZXJzID0gcGFyYW1ldGVycywKKyAgICAuaW5jbHVkZXIgPSBpbmNsdWRlciwKKyAgICAubGluZSA9IDAsCisgIH07CisKKyAgeworICAgIHN0cnVjdCBzdGF0IGluZm87CisKKyAgICBpZiAoZnN0YXQoZmlsZW5vKHN0cmVhbSksICZpbmZvKSAhPSAtMSkgeworICAgICAgZmlsZS5pZGVudGl0eS5kZXZpY2UgPSBpbmZvLnN0X2RldjsKKyAgICAgIGZpbGUuaWRlbnRpdHkuZmlsZSA9IGluZm8uc3RfaW5vOworICAgIH0KKyAgfQorCisgIFZhcmlhYmxlTmVzdGluZ0xldmVsICpvbGRWYXJpYWJsZXMgPSBjdXJyZW50RGF0YVZhcmlhYmxlczsKKworICBpZiAoKGZpbGUudmFyaWFibGVzID0gbmV3VmFyaWFibGVOZXN0aW5nTGV2ZWwob2xkVmFyaWFibGVzLCBuYW1lKSkpIHsKKyAgICBjdXJyZW50RGF0YVZhcmlhYmxlcyA9IGNsYWltVmFyaWFibGVOZXN0aW5nTGV2ZWwoZmlsZS52YXJpYWJsZXMpOworCisgICAgaWYgKChmaWxlLmNvbmRpdGlvbnMgPSBuZXdRdWV1ZShkZWFsbG9jYXRlRGF0YUNvbmRpdGlvbiwgTlVMTCkpKSB7CisgICAgICBpZiAocHJvY2Vzc0xpbmVzKHN0cmVhbSwgcHJvY2Vzc0RhdGFMaW5lLCAmZmlsZSkpIG9rID0gMTsKKworICAgICAgaWYgKGdldElubmVybW9zdERhdGFDb25kaXRpb24oJmZpbGUpKSB7CisgICAgICAgIHJlcG9ydERhdGFFcnJvcigmZmlsZSwgIm91dHN0YW5kaW5nIGNvbmRpdGlvbiBhdCBlbmQgb2YgZmlsZSIpOworICAgICAgfQorCisgICAgICBkZWFsbG9jYXRlUXVldWUoZmlsZS5jb25kaXRpb25zKTsKKyAgICB9CisKKyAgICByZWxlYXNlVmFyaWFibGVOZXN0aW5nTGV2ZWwoY3VycmVudERhdGFWYXJpYWJsZXMpOworICAgIGN1cnJlbnREYXRhVmFyaWFibGVzID0gb2xkVmFyaWFibGVzOworICB9CisKKyAgcmV0dXJuIG9rOworfQorCitpbnQKK3Byb2Nlc3NEYXRhRmlsZSAoY29uc3QgY2hhciAqbmFtZSwgY29uc3QgRGF0YUZpbGVQYXJhbWV0ZXJzICpwYXJhbWV0ZXJzKSB7CisgIGludCBvayA9IDA7CisgIEZJTEUgKnN0cmVhbTsKKworICBpZiAoKHN0cmVhbSA9IG9wZW5EYXRhRmlsZShuYW1lLCAiciIsIDApKSkgeworICAgIGlmIChwcm9jZXNzRGF0YVN0cmVhbShOVUxMLCBzdHJlYW0sIG5hbWUsIHBhcmFtZXRlcnMpKSBvayA9IDE7CisgICAgZmNsb3NlKHN0cmVhbSk7CisgIH0KKworICByZXR1cm4gb2s7Cit9CmRpZmYgLS1naXQgYS9Qcm9ncmFtcy9kZWZhdWx0cy5oIGIvUHJvZ3JhbXMvZGVmYXVsdHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYzJmODdlCi0tLSAvZGV2L251bGwKKysrIGIvUHJvZ3JhbXMvZGVmYXVsdHMuaApAQCAtMCwwICsxLDE2MiBAQAorLyoKKyAqIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisgKiAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisgKgorICogQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKKyNpZm5kZWYgQlJMVFRZX0lOQ0xVREVEX0RFRkFVTFRTCisjZGVmaW5lIEJSTFRUWV9JTkNMVURFRF9ERUZBVUxUUworCisjaW5jbHVkZSAicGFyYW1ldGVycy5oIgorI2luY2x1ZGUgImN0Yl90eXBlcy5oIgorI2luY2x1ZGUgImJybF90eXBlcy5oIgorI2luY2x1ZGUgInNwa190eXBlcy5oIgorI2luY2x1ZGUgInR1bmVfdHlwZXMuaCIKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZiAvKiBfX2NwbHVzcGx1cyAqLworCisvKiBFZGl0IGFzIG5lY2Vzc2FyeSBmb3IgeW91ciBzeXN0ZW0uICovCisKKyNkZWZpbmUgREVGQVVMVF9NRVNTQUdFX0hPTERfVElNRU9VVCBNRVNTQUdFX0hPTERfVElNRU9VVAorLyogVW5kZXIgNSBzZWNvbmRzIChpbml0J3MgU0lHVEVSTS1TSUdLSUxMIGRlbGF5IGR1cmluZyBzaHV0ZG93bikKKyAqIGlzIGdvb2QgYXMgdGhhdCBhbGxvd3MgImV4aXRpbmciIHRvIGJlIHJlcGxhY2VkIGJ5ICJ0ZXJtaW5hdGVkIgorICogb24gdGhlIGRpc3BsYXkuCisgKi8KKworI2RlZmluZSBERUZBVUxUX1RSQUNLX1NDUkVFTl9DVVJTT1IgMQkJLyogMSBmb3Igb24sIDAgZm9yIG9mZiAqLworI2RlZmluZSBERUZBVUxUX0hJREVfU0NSRUVOX0NVUlNPUiAwCQkvKiAxIGZvciB5ZXMsIDAgZm9yIG5vICovCisKKyNkZWZpbmUgREVGQVVMVF9TQVZFX09OX0VYSVQgMAorI2RlZmluZSBERUZBVUxUX1NIT1dfU1VCTUVOVV9TSVpFUyAwCisjZGVmaW5lIERFRkFVTFRfU0hPV19BRFZBTkNFRF9TVUJNRU5VUyAwCisjZGVmaW5lIERFRkFVTFRfU0hPV19BTExfSVRFTVMgMAorCisjZGVmaW5lIERFRkFVTFRfQlJBSUxMRV9WQVJJQU5UIGJ2Q29tcHV0ZXI4CisjZGVmaW5lIERFRkFVTFRfRVhQQU5EX0NVUlJFTlRfV09SRCAxCisjZGVmaW5lIERFRkFVTFRfQ0FQSVRBTElaQVRJT05fTU9ERSBDVEJfQ0FQX1NJR04KKyNkZWZpbmUgREVGQVVMVF9CUkFJTExFX0ZJUk1ORVNTIEJSTF9GSVJNTkVTU19NRURJVU0KKworI2RlZmluZSBERUZBVUxUX1NIT1dfU0NSRUVOX0NVUlNPUiAxCQkvKiAxIGZvciB5ZXMsIDAgZm9yIG5vICovCisjZGVmaW5lIERFRkFVTFRfU0NSRUVOX0NVUlNPUl9TVFlMRSBjc0JvdHRvbURvdHMKKyNkZWZpbmUgREVGQVVMVF9CTElOS0lOR19TQ1JFRU5fQ1VSU09SIDAJCS8qIDEgZm9yIG9uLCAwIGZvciBvZmYgKi8KKyNkZWZpbmUgREVGQVVMVF9TQ1JFRU5fQ1VSU09SX1ZJU0lCTEVfVElNRSA0MAorI2RlZmluZSBERUZBVUxUX1NDUkVFTl9DVVJTT1JfSU5WSVNJQkxFX1RJTUUgNDAKKworI2RlZmluZSBERUZBVUxUX1NIT1dfQVRUUklCVVRFUyAwICAgICAgICAgIC8qIDEgZm9yIG9uLCAwIGZvciBvZmYgKi8KKyNkZWZpbmUgREVGQVVMVF9CTElOS0lOR19BVFRSSUJVVEVTIDEgICAgICAgIC8qIDEgZm9yIG9uLCAwIGZvciBvZmYgKi8KKyNkZWZpbmUgREVGQVVMVF9BVFRSSUJVVEVTX1ZJU0lCTEVfVElNRSAyMCAgICAgIC8qIGZvciBhdHRyaWJ1dGUgdW5kZXJsaW5pbmcgKi8KKyNkZWZpbmUgREVGQVVMVF9BVFRSSUJVVEVTX0lOVklTSUJMRV9USU1FIDYwCisKKyNkZWZpbmUgREVGQVVMVF9CTElOS0lOR19DQVBJVEFMUyAwCQkvKiAxIGZvciBvbiwgMCBmb3Igb2ZmICovCisjZGVmaW5lIERFRkFVTFRfQ0FQSVRBTFNfVklTSUJMRV9USU1FIDYwCS8qIGZvciBibGlua2luZyBjYXBzICovCisjZGVmaW5lIERFRkFVTFRfQ0FQSVRBTFNfSU5WSVNJQkxFX1RJTUUgMjAKKworI2RlZmluZSBERUZBVUxUX1dPUkRfV1JBUCAwCisjZGVmaW5lIERFRkFVTFRfU0tJUF9JREVOVElDQUxfTElORVMgMAorI2RlZmluZSBERUZBVUxUX1NLSVBfQkxBTktfQlJBSUxMRV9XSU5ET1dTIDAKKyNkZWZpbmUgREVGQVVMVF9TS0lQX0JMQU5LX0JSQUlMTEVfV0lORE9XU19NT0RFIHNid0VuZE9mTGluZQorI2RlZmluZSBERUZBVUxUX1NMSURJTkdfQlJBSUxMRV9XSU5ET1cgMAorI2RlZmluZSBERUZBVUxUX0VBR0VSX1NMSURJTkdfQlJBSUxMRV9XSU5ET1cgMAorI2RlZmluZSBERUZBVUxUX0JSQUlMTEVfV0lORE9XX09WRVJMQVAgMAorCisjZGVmaW5lIERFRkFVTFRfU0NST0xMX0FXQVJFX0NVUlNPUl9OQVZJR0FUSU9OIDAKKyNkZWZpbmUgREVGQVVMVF9DVVJTT1JfVFJBQ0tJTkdfREVMQVkgY3RkMjUwbXMKKyNkZWZpbmUgREVGQVVMVF9UUkFDS19TQ1JFRU5fU0NST0xMIDAJCS8qIDEgZm9yIG9uLCAwIGZvciBvZmYgKi8KKyNkZWZpbmUgREVGQVVMVF9UUkFDS19TQ1JFRU5fUE9JTlRFUiAwCQkvKiAxIGZvciBvbiwgMCBmb3Igb2ZmICovCisjZGVmaW5lIERFRkFVTFRfSElHSExJR0hUX0JSQUlMTEVfV0lORE9XX0xPQ0FUSU9OIDAJCS8qIDEgZm9yIG9uLCAwIGZvciBvZmYgKi8KKyNkZWZpbmUgREVGQVVMVF9TVEFSVF9TRUxFQ1RJT05fV0lUSF9ST1VUSU5HX0tFWSAwCQkvKiAxIGZvciBvbiwgMCBmb3Igb2ZmICovCisKKyNkZWZpbmUgREVGQVVMVF9CUkFJTExFX0tFWUJPQVJEX0VOQUJMRUQgMQorI2RlZmluZSBERUZBVUxUX0JSQUlMTEVfVFlQSU5HX01PREUgQlJMX1RZUElOR19URVhUCisjZGVmaW5lIERFRkFVTFRfQlJBSUxMRV9RVUlDS19TUEFDRSAwCisKKyNkZWZpbmUgREVGQVVMVF9BVVRPUkVMRUFTRV9USU1FIGF0MjBzCisjZGVmaW5lIERFRkFVTFRfT05fRklSU1RfUkVMRUFTRSAxCisjZGVmaW5lIERFRkFVTFRfTE9OR19QUkVTU19USU1FIDUwCS8qIGh1bmRyZWR0aHMgb2YgYSBzZWNvbmQgKi8KKyNkZWZpbmUgREVGQVVMVF9BVVRPUkVQRUFUX0VOQUJMRUQgMQkJLyogMSBmb3Igb24sIDAgZm9yIG9mZiAqLworI2RlZmluZSBERUZBVUxUX0FVVE9SRVBFQVRfSU5URVJWQUwgMTAJLyogaHVuZHJlZHRocyBvZiBhIHNlY29uZCAqLworI2RlZmluZSBERUZBVUxUX0FVVE9SRVBFQVRfUEFOTklORyAwCS8qIDEgZm9yIG9uLCAwIGZvciBvZmYgKi8KKyNkZWZpbmUgREVGQVVMVF9UT1VDSF9OQVZJR0FUSU9OIDAKKyNkZWZpbmUgREVGQVVMVF9UT1VDSF9TRU5TSVRJVklUWSBCUkxfU0VOU0lUSVZJVFlfTUVESVVNCisKKyNkZWZpbmUgREVGQVVMVF9DT05TT0xFX0JFTExfQUxFUlQgMCAvKiAxIGZvciBvbiwgMCBmb3Igb2ZmICovCisjZGVmaW5lIERFRkFVTFRfS0VZQk9BUkRfTEVEX0FMRVJUUyAwIC8qIDEgZm9yIG9uLCAwIGZvciBvZmYgKi8KKworI2RlZmluZSBERUZBVUxUX1NQRUFLX0tFWV9DT05URVhUIDAgIC8qIDEgZm9yIG9uLCAwIGZvciBvZmYgKi8KKyNkZWZpbmUgREVGQVVMVF9TUEVBS19NT0RJRklFUl9LRVkgMCAvKiAxIGZvciBvbiwgMCBmb3Igb2ZmICovCisKKyNkZWZpbmUgREVGQVVMVF9BTEVSVF9UVU5FUyAxCQkvKiAxIGZvciBvbiwgMCBmb3Igb2ZmICovCisjZGVmaW5lIERFRkFVTFRfQUxFUlRfRE9UUyAwCQkvKiAxIGZvciBvbiwgMCBmb3Igb2ZmICovCisjZGVmaW5lIERFRkFVTFRfQUxFUlRfTUVTU0FHRVMgMAkJLyogMSBmb3Igb24sIDAgZm9yIG9mZiAqLworCisjaWYgZGVmaW5lZChIQVZFX0JFRVBfU1VQUE9SVCkKKyNkZWZpbmUgREVGQVVMVF9UVU5FX0RFVklDRSB0ZEJlZXBlcgorI2VsaWYgZGVmaW5lZChIQVZFX1BDTV9TVVBQT1JUKQorI2RlZmluZSBERUZBVUxUX1RVTkVfREVWSUNFIHRkUGNtCisjZWxpZiBkZWZpbmVkKEhBVkVfTUlESV9TVVBQT1JUKQorI2RlZmluZSBERUZBVUxUX1RVTkVfREVWSUNFIHRkTWlkaQorI2VsaWYgZGVmaW5lZChIQVZFX0ZNX1NVUFBPUlQpCisjZGVmaW5lIERFRkFVTFRfVFVORV9ERVZJQ0UgdGRGbQorI2Vsc2UgLyogbm8gdHVuZSBkZXZpY2VzIGFyZSBzdXBwb3J0ZWQgKi8KKyNkZWZpbmUgREVGQVVMVF9UVU5FX0RFVklDRSAwCisjZW5kaWYgLyogZGVmYXVsdCB0dW5lIGRldmljZSAqLworCisjZGVmaW5lIERFRkFVTFRfUENNX1ZPTFVNRSA3MAkJLyogMCB0byAxMDAgKHBlcmNlbnQpICovCisjZGVmaW5lIERFRkFVTFRfTUlESV9WT0xVTUUgNzAJCS8qIDAgdG8gMTAwIChwZXJjZW50KSAqLworI2RlZmluZSBERUZBVUxUX01JRElfSU5TVFJVTUVOVCAwCS8qIDAgdG8gMTI3ICovCisjZGVmaW5lIERFRkFVTFRfRk1fVk9MVU1FIDcwCQkvKiAwIHRvIDEwMCAocGVyY2VudCkgKi8KKworI2RlZmluZSBERUZBVUxUX1NQRUVDSF9WT0xVTUUgU1BLX1ZPTFVNRV9ERUZBVUxUCisjZGVmaW5lIERFRkFVTFRfU1BFRUNIX1JBVEUgU1BLX1JBVEVfREVGQVVMVAorI2RlZmluZSBERUZBVUxUX1NQRUVDSF9QSVRDSCBTUEtfUElUQ0hfREVGQVVMVAorI2RlZmluZSBERUZBVUxUX1NQRUVDSF9QVU5DVFVBVElPTiBTUEtfUFVOQ1RVQVRJT05fU09NRQorCisjZGVmaW5lIERFRkFVTFRfU1BFRUNIX1VQUEVSQ0FTRV9JTkRJQ0FUT1Igc3VjTm9uZQorI2RlZmluZSBERUZBVUxUX1NQRUVDSF9XSElURVNQQUNFX0lORElDQVRPUiBzd3NOb25lCisjZGVmaW5lIERFRkFVTFRfU0FZX0xJTkVfTU9ERSBzYXlJbW1lZGlhdGUKKworI2RlZmluZSBERUZBVUxUX0FVVE9TUEVBSyAwCQkvKiAxIGZvciBvbiwgMCBmb3Igb2ZmICovCisjZGVmaW5lIERFRkFVTFRfQVVUT1NQRUFLX1NFTEVDVEVEX0xJTkUgMQorI2RlZmluZSBERUZBVUxUX0FVVE9TUEVBS19TRUxFQ1RFRF9DSEFSQUNURVIgMQorI2RlZmluZSBERUZBVUxUX0FVVE9TUEVBS19JTlNFUlRFRF9DSEFSQUNURVJTIDEKKyNkZWZpbmUgREVGQVVMVF9BVVRPU1BFQUtfREVMRVRFRF9DSEFSQUNURVJTIDEKKyNkZWZpbmUgREVGQVVMVF9BVVRPU1BFQUtfUkVQTEFDRURfQ0hBUkFDVEVSUyAxCisjZGVmaW5lIERFRkFVTFRfQVVUT1NQRUFLX0NPTVBMRVRFRF9XT1JEUyAxCisjZGVmaW5lIERFRkFVTFRfQVVUT1NQRUFLX0xJTkVfSU5ERU5UIDAKKworI2RlZmluZSBERUZBVUxUX1NIT1dfU1BFRUNIX0NVUlNPUiAwCisjZGVmaW5lIERFRkFVTFRfU1BFRUNIX0NVUlNPUl9TVFlMRSBjc0xvd2VyUmlnaHREb3QKKyNkZWZpbmUgREVGQVVMVF9CTElOS0lOR19TUEVFQ0hfQ1VSU09SIDAKKyNkZWZpbmUgREVGQVVMVF9TUEVFQ0hfQ1VSU09SX1ZJU0lCTEVfVElNRSA1MAorI2RlZmluZSBERUZBVUxUX1NQRUVDSF9DVVJTT1JfSU5WSVNJQkxFX1RJTUUgMzAKKworI2RlZmluZSBERUZBVUxUX1RJTUVfRk9STUFUIHRmMjRIb3VyCisjZGVmaW5lIERFRkFVTFRfVElNRV9TRVBBUkFUT1IgdHNDb2xvbgorI2RlZmluZSBERUZBVUxUX1NIT1dfU0VDT05EUyAxCisjZGVmaW5lIERFRkFVTFRfREFURV9QT1NJVElPTiBkcE5vbmUKKyNkZWZpbmUgREVGQVVMVF9EQVRFX0ZPUk1BVCBkZlllYXJNb250aERheQorI2RlZmluZSBERUZBVUxUX0RBVEVfU0VQQVJBVE9SIGRzRGFzaAorCisjZGVmaW5lIERFRkFVTFRfU1RBVFVTX1BPU0lUSU9OIHNwTm9uZQorI2RlZmluZSBERUZBVUxUX1NUQVRVU19DT1VOVCAwCisjZGVmaW5lIERFRkFVTFRfU1RBVFVTX1NFUEFSQVRPUiBzc05vbmUKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYgLyogX19jcGx1c3BsdXMgKi8KKworI2VuZGlmIC8qIEJSTFRUWV9JTkNMVURFRF9ERUZBVUxUUyAqLwpkaWZmIC0tZ2l0IGEvUHJvZ3JhbXMvZGV2aWNlLmMgYi9Qcm9ncmFtcy9kZXZpY2UuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ODA4M2VkCi0tLSAvZGV2L251bGwKKysrIGIvUHJvZ3JhbXMvZGV2aWNlLmMKQEAgLTAsMCArMSwyMzAgQEAKKy8qCisgKiBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorICogICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorICoKKyAqIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorICoKKyAqIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyAqLworCisjaW5jbHVkZSAicHJvbG9ndWUuaCIKKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8c3RyaW5ncy5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8ZmNudGwuaD4KKworI2luY2x1ZGUgImxvZy5oIgorI2luY2x1ZGUgInN0cmZtdC5oIgorI2luY2x1ZGUgImRldmljZS5oIgorI2luY2x1ZGUgImZpbGUuaCIKKyNpbmNsdWRlICJwYXJzZS5oIgorCitGSUxFICoKK2dldENvbnNvbGUgKHZvaWQpIHsKKyNpZiBkZWZpbmVkKEdSVUJfUlVOVElNRSkKKyAgcmV0dXJuIHN0ZG91dDsKKyNlbHNlIC8qIGdldCBjb25zb2xlICovCisgIHN0YXRpYyBGSUxFICpjb25zb2xlID0gTlVMTDsKKworICBpZiAoIWNvbnNvbGUpIHsKKyAgICBpZiAoKGNvbnNvbGUgPSBmb3BlbigiL2Rldi9jb25zb2xlIiwgIndiIikpKSB7CisgICAgICBsb2dNZXNzYWdlKExPR19ERUJVRywgImNvbnNvbGUgb3BlbmVkOiBmZD0lZCIsIGZpbGVubyhjb25zb2xlKSk7CisgICAgICByZWdpc3RlclByb2dyYW1TdHJlYW0oImNvbnNvbGUtc3RyZWFtIiwgJmNvbnNvbGUpOworICAgIH0gZWxzZSB7CisgICAgICBsb2dTeXN0ZW1FcnJvcigiY29uc29sZSBvcGVuIik7CisgICAgfQorICB9CisKKyAgcmV0dXJuIGNvbnNvbGU7CisjZW5kaWYgLyogZ2V0IGNvbnNvbGUgKi8KK30KKworaW50Cit3cml0ZVRvQ29uc29sZSAoY29uc3QgdW5zaWduZWQgY2hhciAqYnl0ZXMsIHNpemVfdCBjb3VudCkgeworICBGSUxFICpjb25zb2xlID0gZ2V0Q29uc29sZSgpOworICBpZiAoIWNvbnNvbGUpIHJldHVybiAwOworCisgIHdoaWxlIChjb3VudCkgeworICAgIHNpemVfdCByZXN1bHQgPSBmd3JpdGUoYnl0ZXMsIDEsIGNvdW50LCBjb25zb2xlKTsKKyAgICBpZiAoIWZlcnJvcihjb25zb2xlKSkgZmZsdXNoKGNvbnNvbGUpOworCisgICAgaWYgKGZlcnJvcihjb25zb2xlKSkgeworICAgICAgbG9nU3lzdGVtRXJyb3IoImNvbnNvbGUgd3JpdGUiKTsKKyAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIGJ5dGVzICs9IHJlc3VsdDsKKyAgICBjb3VudCAtPSByZXN1bHQ7CisgIH0KKworICByZXR1cm4gMTsKK30KKworaW50CityaW5nQ29uc29sZUJlbGwgKHZvaWQpIHsKKyAgc3RhdGljIHVuc2lnbmVkIGNoYXIgYmVsbFNlcXVlbmNlW10gPSB7MFgwN307CisgIHJldHVybiB3cml0ZVRvQ29uc29sZShiZWxsU2VxdWVuY2UsIHNpemVvZihiZWxsU2VxdWVuY2UpKTsKK30KKworY29uc3QgY2hhciAqCitnZXREZXZpY2VEaXJlY3RvcnkgKHZvaWQpIHsKKyAgc3RhdGljIGNvbnN0IGNoYXIgKmRldmljZURpcmVjdG9yeSA9IE5VTEw7CisKKyAgaWYgKCFkZXZpY2VEaXJlY3RvcnkpIHsKKyAgICBjb25zdCBjaGFyICpkaXJlY3RvcnkgPSBERVZJQ0VfRElSRUNUT1JZOworICAgIGNvbnN0IHNpemVfdCBkaXJlY3RvcnlMZW5ndGggPSBzdHJsZW4oZGlyZWN0b3J5KTsKKworICAgIHN0YXRpYyBjb25zdCBjaGFyICpjb25zdCB2YXJpYWJsZXNbXSA9IHsiRFRERVZST09UIiwgIlVUREVWUk9PVCIsIE5VTEx9OworICAgIGNvbnN0IGNoYXIgKmNvbnN0ICp2YXJpYWJsZSA9IHZhcmlhYmxlczsKKworICAgIHdoaWxlICgqdmFyaWFibGUpIHsKKyAgICAgIGNvbnN0IGNoYXIgKnJvb3QgPSBnZXRlbnYoKnZhcmlhYmxlKTsKKworICAgICAgaWYgKHJvb3QgJiYgKnJvb3QpIHsKKyAgICAgICAgY29uc3Qgc2l6ZV90IHJvb3RMZW5ndGggPSBzdHJsZW4ocm9vdCk7CisgICAgICAgIGNoYXIgcGF0aFtyb290TGVuZ3RoICsgZGlyZWN0b3J5TGVuZ3RoICsgMV07CisgICAgICAgIHNucHJpbnRmKHBhdGgsIHNpemVvZihwYXRoKSwgIiVzJXMiLCByb290LCBkaXJlY3RvcnkpOworCisgICAgICAgIGlmICh0ZXN0RGlyZWN0b3J5UGF0aChwYXRoKSkgeworICAgICAgICAgIGlmICgoZGV2aWNlRGlyZWN0b3J5ID0gc3RyZHVwKHBhdGgpKSkgZ290byBmb3VuZDsKKyAgICAgICAgICBsb2dNYWxsb2NFcnJvcigpOworICAgICAgICB9IGVsc2UgaWYgKGVycm5vICE9IEVOT0VOVCkgeworICAgICAgICAgIGxvZ01lc3NhZ2UoTE9HX0VSUiwgImRldmljZSBkaXJlY3RvcnkgZXJyb3I6ICVzICglcyk6ICVzIiwKKyAgICAgICAgICAgICAgICAgICAgIHBhdGgsICp2YXJpYWJsZSwgc3RyZXJyb3IoZXJybm8pKTsKKyAgICAgICAgfQorICAgICAgfQorCisgICAgICB2YXJpYWJsZSArPSAxOworICAgIH0KKworICAgIGRldmljZURpcmVjdG9yeSA9IGRpcmVjdG9yeTsKKyAgZm91bmQ6CisgICAgbG9nTWVzc2FnZShMT0dfREVCVUcsICJkZXZpY2UgZGlyZWN0b3J5OiAlcyIsIGRldmljZURpcmVjdG9yeSk7CisgIH0KKworICByZXR1cm4gZGV2aWNlRGlyZWN0b3J5OworfQorCitjaGFyICoKK2dldERldmljZVBhdGggKGNvbnN0IGNoYXIgKmRldmljZSkgeworICBjb25zdCBjaGFyICpkaXJlY3RvcnkgPSBnZXREZXZpY2VEaXJlY3RvcnkoKTsKKworI2lmZGVmIEFMTE9XX0RPU19ERVZJQ0VfTkFNRVMKKyAgaWYgKGlzRG9zRGV2aWNlKGRldmljZSwgTlVMTCkpIHsKKyAgLy9kaXJlY3RvcnkgPSBOVUxMOworICB9CisjZW5kaWYgLyogQUxMT1dfRE9TX0RFVklDRV9OQU1FUyAqLworCisgIHJldHVybiBtYWtlUGF0aChkaXJlY3RvcnksIGRldmljZSk7Cit9CisKK2NvbnN0IGNoYXIgKgorcmVzb2x2ZURldmljZU5hbWUgKGNvbnN0IGNoYXIgKmNvbnN0ICpuYW1lcywgaW50IHN0cmljdCwgY29uc3QgY2hhciAqZGVzY3JpcHRpb24pIHsKKyAgY29uc3QgY2hhciAqZmlyc3QgPSAqbmFtZXM7CisgIGNvbnN0IGNoYXIgKmRldmljZSA9IE5VTEw7CisgIGNvbnN0IGNoYXIgKm5hbWU7CisKKyAgd2hpbGUgKChuYW1lID0gKm5hbWVzKyspKSB7CisgICAgY2hhciAqcGF0aCA9IGdldERldmljZVBhdGgobmFtZSk7CisgICAgaWYgKCFwYXRoKSBicmVhazsKKyAgICBsb2dNZXNzYWdlKExPR19ERUJVRywgImNoZWNraW5nICVzIGRldmljZTogJXMiLCBkZXNjcmlwdGlvbiwgcGF0aCk7CisKKyAgICBpZiAodGVzdFBhdGgocGF0aCkpIHsKKyAgICAgIGRldmljZSA9IG5hbWU7CisgICAgICBmcmVlKHBhdGgpOworICAgICAgYnJlYWs7CisgICAgfQorCisgICAgbG9nTWVzc2FnZShMT0dfREVCVUcsICIlcyBkZXZpY2UgYWNjZXNzIGVycm9yOiAlczogJXMiLAorICAgICAgICAgICAgICAgZGVzY3JpcHRpb24sIHBhdGgsIHN0cmVycm9yKGVycm5vKSk7CisKKyAgICBpZiAoZXJybm8gIT0gRU5PRU5UKSB7CisgICAgICBpZiAoIWRldmljZSkgeworICAgICAgICBkZXZpY2UgPSBuYW1lOworICAgICAgfQorICAgIH0KKworICAgIGZyZWUocGF0aCk7CisgIH0KKworICBpZiAoIWRldmljZSkgeworICAgIGlmICghZmlyc3QpIHsKKyAgICAgIGxvZ01lc3NhZ2UoTE9HX0VSUiwgIiVzIGRldmljZSBuYW1lcyBub3QgZGVmaW5lZCIsIGRlc2NyaXB0aW9uKTsKKyAgICB9IGVsc2UgaWYgKHN0cmljdCkgeworICAgICAgbG9nTWVzc2FnZShMT0dfRVJSLCAiJXMgZGV2aWNlIG5vdCBmb3VuZCIsIGRlc2NyaXB0aW9uKTsKKyAgICB9IGVsc2UgeworICAgICAgZGV2aWNlID0gZmlyc3Q7CisgICAgfQorICB9CisKKyAgaWYgKGRldmljZSkgbG9nTWVzc2FnZShMT0dfSU5GTywgIiVzIGRldmljZTogJXMiLCBkZXNjcmlwdGlvbiwgZGV2aWNlKTsKKyAgcmV0dXJuIGRldmljZTsKK30KKworY2hhciAqKgorZ2V0RGV2aWNlUGFyYW1ldGVycyAoY29uc3QgY2hhciAqY29uc3QgKm5hbWVzLCBjb25zdCBjaGFyICppZGVudGlmaWVyKSB7CisgIGNoYXIgcGFyYW1ldGVyc1tzdHJsZW4obmFtZXNbMF0pICsgMSArIHN0cmxlbihpZGVudGlmaWVyKSArIDFdOworICBTVFJfQkVHSU4ocGFyYW1ldGVycywgc2l6ZW9mKHBhcmFtZXRlcnMpKQorCisgIHsKKyAgICBzdGF0aWMgY29uc3QgY2hhciBjaGFyYWN0ZXJzW10gPSB7CisgICAgICBERVZJQ0VfUEFSQU1FVEVSX1NFUEFSQVRPUiwKKyAgICAgIFBBUkFNRVRFUl9BU1NJR05NRU5UX0NIQVJBQ1RFUiwKKyAgICAgIDAKKyAgICB9OworICAgIGNvbnN0IGNoYXIgKmNoYXJhY3RlciA9IHN0cnBicmsoaWRlbnRpZmllciwgY2hhcmFjdGVycyk7CisKKyAgICBpZiAoIShjaGFyYWN0ZXIgJiYgKCpjaGFyYWN0ZXIgPT0gUEFSQU1FVEVSX0FTU0lHTk1FTlRfQ0hBUkFDVEVSKSkpIHsKKyAgICAgICBTVFJfUFJJTlRGKCIlcyVjIiwgbmFtZXNbMF0sIFBBUkFNRVRFUl9BU1NJR05NRU5UX0NIQVJBQ1RFUik7CisgICAgfQorICB9CisKKyAgeworICAgIGNoYXIgKmNoYXJhY3RlciA9IFNUUl9ORVhUOworICAgIFNUUl9QUklOVEYoIiVzIiwgaWRlbnRpZmllcik7CisKKyAgICB3aGlsZSAoY2hhcmFjdGVyIDwgU1RSX05FWFQpIHsKKyAgICAgIGlmICgqY2hhcmFjdGVyID09IERFVklDRV9QQVJBTUVURVJfU0VQQVJBVE9SKSAqY2hhcmFjdGVyID0gUEFSQU1FVEVSX1NFUEFSQVRPUl9DSEFSQUNURVI7CisgICAgICBjaGFyYWN0ZXIgKz0gMTsKKyAgICB9CisgIH0KKworICBTVFJfRU5EOworICByZXR1cm4gZ2V0UGFyYW1ldGVycyhuYW1lcywgTlVMTCwgcGFyYW1ldGVycyk7Cit9CisKKyNpZmRlZiBBTExPV19ET1NfREVWSUNFX05BTUVTCitpbnQKK2lzRG9zRGV2aWNlIChjb25zdCBjaGFyICppZGVudGlmaWVyLCBjb25zdCBjaGFyICpwcmVmaXgpIHsKKyAgc2l6ZV90IGNvdW50ID0gc3RyY3NwbihpZGVudGlmaWVyLCAiOiIpOworICBzaXplX3QgbGVuZ3RoOworCisgIGlmICghY291bnQpIHJldHVybiAwOworCisgIGlmIChwcmVmaXgpIHsKKyAgICBpZiAoIShsZW5ndGggPSBzdHJsZW4ocHJlZml4KSkpIHJldHVybiAwOworICAgIGlmIChsZW5ndGggPiBjb3VudCkgcmV0dXJuIDA7CisgICAgaWYgKHN0cm5jYXNlY21wKGlkZW50aWZpZXIsIHByZWZpeCwgbGVuZ3RoKSAhPSAwKSByZXR1cm4gMDsKKyAgfSBlbHNlIHsKKyAgICBsZW5ndGggPSBzdHJzcG4oaWRlbnRpZmllciwgIkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoiKTsKKyAgICBpZiAoIWxlbmd0aCkgcmV0dXJuIDA7CisgIH0KKworICBpZGVudGlmaWVyICs9IGxlbmd0aDsKKyAgY291bnQgLT0gbGVuZ3RoOworCisgIGlmIChzdHJzcG4oaWRlbnRpZmllciwgIjAxMjM0NTY3ODkiKSAhPSBjb3VudCkgcmV0dXJuIDA7CisgIHJldHVybiAxOworfQorI2VuZGlmIC8qIEFMTE9XX0RPU19ERVZJQ0VfTkFNRVMgKi8KZGlmZiAtLWdpdCBhL1Byb2dyYW1zL2RyaXZlci5jIGIvUHJvZ3JhbXMvZHJpdmVyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTc2YThhNgotLS0gL2Rldi9udWxsCisrKyBiL1Byb2dyYW1zL2RyaXZlci5jCkBAIC0wLDAgKzEsODcgQEAKKy8qCisgKiBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorICogICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorICoKKyAqIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorICoKKyAqIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyAqLworCisjaW5jbHVkZSAicHJvbG9ndWUuaCIKKworI2luY2x1ZGUgImxvZy5oIgorI2luY2x1ZGUgImRyaXZlci5oIgorCit2b2lkCit1bnN1cHBvcnRlZERldmljZUlkZW50aWZpZXIgKGNvbnN0IGNoYXIgKmlkZW50aWZpZXIpIHsKKyAgbG9nTWVzc2FnZShMT0dfV0FSTklORywgInVuc3VwcG9ydGVkIGRldmljZSBpZGVudGlmaWVyOiAlcyIsIGlkZW50aWZpZXIpOworfQorCit2b2lkCitsb2dPdXRwdXRQYWNrZXQgKGNvbnN0IHZvaWQgKnBhY2tldCwgc2l6ZV90IHNpemUpIHsKKyAgbG9nQnl0ZXMoTE9HX0NBVEVHT1JZKE9VVFBVVF9QQUNLRVRTKSwgInNlbnQiLCBwYWNrZXQsIHNpemUpOworfQorCit2b2lkCitsb2dJbnB1dFBhY2tldCAoY29uc3Qgdm9pZCAqcGFja2V0LCBzaXplX3Qgc2l6ZSkgeworICBsb2dCeXRlcyhMT0dfQ0FURUdPUlkoSU5QVVRfUEFDS0VUUyksIE5VTEwsIHBhY2tldCwgc2l6ZSk7Cit9CisKK3ZvaWQKK2xvZ0lucHV0UHJvYmxlbSAoY29uc3QgY2hhciAqcHJvYmxlbSwgY29uc3QgdW5zaWduZWQgY2hhciAqYnl0ZXMsIHNpemVfdCBjb3VudCkgeworICBsb2dCeXRlcyhMT0dfV0FSTklORywgIiVzIiwgYnl0ZXMsIGNvdW50LCBwcm9ibGVtKTsKK30KKwordm9pZAorbG9nSWdub3JlZEJ5dGUgKHVuc2lnbmVkIGNoYXIgYnl0ZSkgeworICBsb2dJbnB1dFByb2JsZW0oIklnbm9yZWQgQnl0ZSIsICZieXRlLCAxKTsKK30KKwordm9pZAorbG9nRGlzY2FyZGVkQnl0ZSAodW5zaWduZWQgY2hhciBieXRlKSB7CisgIGxvZ0lucHV0UHJvYmxlbSgiRGlzY2FyZGVkIEJ5dGUiLCAmYnl0ZSwgMSk7Cit9CisKK3ZvaWQKK2xvZ1Vua25vd25QYWNrZXQgKHVuc2lnbmVkIGNoYXIgYnl0ZSkgeworICBsb2dJbnB1dFByb2JsZW0oIlVua25vd24gUGFja2V0IiwgJmJ5dGUsIDEpOworfQorCit2b2lkCitsb2dQYXJ0aWFsUGFja2V0IChjb25zdCB2b2lkICpwYWNrZXQsIHNpemVfdCBzaXplKSB7CisgIGxvZ0lucHV0UHJvYmxlbSgiUGFydGlhbCBQYWNrZXQiLCBwYWNrZXQsIHNpemUpOworfQorCit2b2lkCitsb2dUcnVuY2F0ZWRQYWNrZXQgKGNvbnN0IHZvaWQgKnBhY2tldCwgc2l6ZV90IHNpemUpIHsKKyAgbG9nSW5wdXRQcm9ibGVtKCJUcnVuY2F0ZWQgUGFja2V0IiwgcGFja2V0LCBzaXplKTsKK30KKwordm9pZAorbG9nU2hvcnRQYWNrZXQgKGNvbnN0IHZvaWQgKnBhY2tldCwgc2l6ZV90IHNpemUpIHsKKyAgbG9nSW5wdXRQcm9ibGVtKCJTaG9ydCBQYWNrZXQiLCBwYWNrZXQsIHNpemUpOworfQorCit2b2lkCitsb2dVbmV4cGVjdGVkUGFja2V0IChjb25zdCB2b2lkICpwYWNrZXQsIHNpemVfdCBzaXplKSB7CisgIGxvZ0lucHV0UHJvYmxlbSgiVW5leHBlY3RlZCBQYWNrZXQiLCBwYWNrZXQsIHNpemUpOworfQorCit2b2lkCitsb2dDb3JydXB0UGFja2V0IChjb25zdCB2b2lkICpwYWNrZXQsIHNpemVfdCBzaXplKSB7CisgIGxvZ0lucHV0UHJvYmxlbSgiQ29ycnVwdCBQYWNrZXQiLCBwYWNrZXQsIHNpemUpOworfQorCit2b2lkCitsb2dEaXNjYXJkZWRCeXRlcyAoY29uc3QgdW5zaWduZWQgY2hhciAqYnl0ZXMsIHNpemVfdCBjb3VudCkgeworICBsb2dJbnB1dFByb2JsZW0oIkRpc2NhcmRlZCBCeXRlcyIsIGJ5dGVzLCBjb3VudCk7Cit9CmRpZmYgLS1naXQgYS9Qcm9ncmFtcy9kcml2ZXJzLmMgYi9Qcm9ncmFtcy9kcml2ZXJzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY0MjM3YwotLS0gL2Rldi9udWxsCisrKyBiL1Byb2dyYW1zL2RyaXZlcnMuYwpAQCAtMCwwICsxLDIwMSBAQAorLyoKKyAqIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisgKiAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisgKgorICogQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKKyNpbmNsdWRlICJwcm9sb2d1ZS5oIgorCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworI2luY2x1ZGUgImxvZy5oIgorI2luY2x1ZGUgInN0cmZtdC5oIgorI2luY2x1ZGUgImZpbGUuaCIKKyNpbmNsdWRlICJkeW5sZC5oIgorI2luY2x1ZGUgImRyaXZlcnMuaCIKKworaW50Citpc0RyaXZlckF2YWlsYWJsZSAoY29uc3QgY2hhciAqY29kZSwgY29uc3QgY2hhciAqY29kZXMpIHsKKyAgaW50IGxlbmd0aCA9IHN0cmxlbihjb2RlKTsKKyAgY29uc3QgY2hhciAqc3RyaW5nID0gY29kZXM7CisKKyAgd2hpbGUgKChzdHJpbmcgPSBzdHJzdHIoc3RyaW5nLCBjb2RlKSkpIHsKKyAgICBpZiAoKChzdHJpbmcgPT0gY29kZXMpIHx8IChzdHJpbmdbLTFdID09ICcgJykpICYmCisgICAgICAgICghc3RyaW5nW2xlbmd0aF0gfHwgKHN0cmluZ1tsZW5ndGhdID09ICcgJykpKSB7CisgICAgICByZXR1cm4gMTsKKyAgICB9CisKKyAgICBzdHJpbmcgKz0gbGVuZ3RoOworICB9CisKKyAgcmV0dXJuIDA7Cit9CisKK2ludAoraXNEcml2ZXJJbmNsdWRlZCAoY29uc3QgY2hhciAqY29kZSwgY29uc3QgRHJpdmVyRW50cnkgKnRhYmxlKSB7CisgIHdoaWxlICh0YWJsZS0+YWRkcmVzcykgeworICAgIGlmIChzdHJjbXAoY29kZSwgdGFibGUtPmRlZmluaXRpb24tPmNvZGUpID09IDApIHJldHVybiAxOworICAgICsrdGFibGU7CisgIH0KKyAgcmV0dXJuIDA7Cit9CisKK2ludAoraGF2ZURyaXZlciAoY29uc3QgY2hhciAqY29kZSwgY29uc3QgY2hhciAqY29kZXMsIGNvbnN0IERyaXZlckVudHJ5ICp0YWJsZSkgeworICByZXR1cm4gKHRhYmxlICYmIHRhYmxlLT5hZGRyZXNzKT8gaXNEcml2ZXJJbmNsdWRlZChjb2RlLCB0YWJsZSk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc0RyaXZlckF2YWlsYWJsZShjb2RlLCBjb2Rlcyk7Cit9CisKK2NvbnN0IGNoYXIgKgorZ2V0RGVmYXVsdERyaXZlciAoY29uc3QgRHJpdmVyRW50cnkgKnRhYmxlKSB7CisgIHJldHVybiAodGFibGUgJiYgdGFibGVbMF0uYWRkcmVzcyAmJiAhdGFibGVbMV0uYWRkcmVzcyk/IHRhYmxlWzBdLmRlZmluaXRpb24tPmNvZGU6IE5VTEw7Cit9CisKK3N0YXRpYyBpbnQKK2lzRHJpdmVyQ29kZSAoY29uc3QgY2hhciAqY29kZSwgY29uc3QgRHJpdmVyRGVmaW5pdGlvbiAqZGVmaW5pdGlvbikgeworICBpZiAoc3RyY21wKGNvZGUsIGRlZmluaXRpb24tPmNvZGUpID09IDApIHJldHVybiAxOworICByZXR1cm4gMDsKK30KKworY29uc3Qgdm9pZCAqCitsb2FkRHJpdmVyICgKKyAgY29uc3QgY2hhciAqZHJpdmVyQ29kZSwgdm9pZCAqKmRyaXZlck9iamVjdCwKKyAgY29uc3QgY2hhciAqZHJpdmVyRGlyZWN0b3J5LCBjb25zdCBEcml2ZXJFbnRyeSAqZHJpdmVyVGFibGUsCisgIGNvbnN0IGNoYXIgKnR5cGVOYW1lLCBjaGFyIHR5cGVMZXR0ZXIsIGNvbnN0IGNoYXIgKnN5bWJvbFByZWZpeCwKKyAgY29uc3Qgdm9pZCAqbnVsbEFkZHJlc3MsIGNvbnN0IERyaXZlckRlZmluaXRpb24gKm51bGxEZWZpbml0aW9uCispIHsKKyAgY29uc3Qgdm9pZCAqZHJpdmVyQWRkcmVzcyA9IE5VTEw7CisgICpkcml2ZXJPYmplY3QgPSBOVUxMOworCisgIGlmICghZHJpdmVyQ29kZSB8fCAhKmRyaXZlckNvZGUpIHsKKyAgICBpZiAoZHJpdmVyVGFibGUpCisgICAgICBpZiAoZHJpdmVyVGFibGUtPmFkZHJlc3MpCisgICAgICAgIHJldHVybiBkcml2ZXJUYWJsZS0+YWRkcmVzczsKKyAgICByZXR1cm4gbnVsbEFkZHJlc3M7CisgIH0KKworICBpZiAoaXNEcml2ZXJDb2RlKGRyaXZlckNvZGUsIG51bGxEZWZpbml0aW9uKSkgcmV0dXJuIG51bGxBZGRyZXNzOworCisgIGlmIChkcml2ZXJUYWJsZSkgeworICAgIGNvbnN0IERyaXZlckVudHJ5ICpkcml2ZXJFbnRyeSA9IGRyaXZlclRhYmxlOworICAgIHdoaWxlIChkcml2ZXJFbnRyeS0+YWRkcmVzcykgeworICAgICAgaWYgKGlzRHJpdmVyQ29kZShkcml2ZXJDb2RlLCBkcml2ZXJFbnRyeS0+ZGVmaW5pdGlvbikpIHJldHVybiBkcml2ZXJFbnRyeS0+YWRkcmVzczsKKyAgICAgICsrZHJpdmVyRW50cnk7CisgICAgfQorICB9CisKKyNpZmRlZiBFTkFCTEVfU0hBUkVEX09CSkVDVFMKKyAgeworICAgIGNoYXIgKmxpYnJhcnlQYXRoOworICAgIGNvbnN0IGludCBsaWJyYXJ5TmFtZUxlbmd0aCA9IHN0cmxlbihNT0RVTEVfTkFNRSkgKyBzdHJsZW4oZHJpdmVyQ29kZSkgKyBzdHJsZW4oTU9EVUxFX0VYVEVOU0lPTikgKyAzOworICAgIGNoYXIgbGlicmFyeU5hbWVbbGlicmFyeU5hbWVMZW5ndGhdOworICAgIHNucHJpbnRmKGxpYnJhcnlOYW1lLCBsaWJyYXJ5TmFtZUxlbmd0aCwgIiVzJWMlcy4lcyIsCisgICAgICAgICAgICAgTU9EVUxFX05BTUUsIHR5cGVMZXR0ZXIsIGRyaXZlckNvZGUsIE1PRFVMRV9FWFRFTlNJT04pOworCisgICAgaWYgKChsaWJyYXJ5UGF0aCA9IG1ha2VQYXRoKGRyaXZlckRpcmVjdG9yeSwgbGlicmFyeU5hbWUpKSkgeworICAgICAgdm9pZCAqbGlicmFyeUhhbmRsZSA9IGxvYWRTaGFyZWRPYmplY3QobGlicmFyeVBhdGgpOworCisgICAgICBpZiAobGlicmFyeUhhbmRsZSkgeworICAgICAgICBjb25zdCBpbnQgZHJpdmVyU3ltYm9sTGVuZ3RoID0gc3RybGVuKHN5bWJvbFByZWZpeCkgKyA4ICsgc3RybGVuKGRyaXZlckNvZGUpICsgMTsKKyAgICAgICAgY2hhciBkcml2ZXJTeW1ib2xbZHJpdmVyU3ltYm9sTGVuZ3RoXTsKKyAgICAgICAgc25wcmludGYoZHJpdmVyU3ltYm9sLCBkcml2ZXJTeW1ib2xMZW5ndGgsICIlc19kcml2ZXJfJXMiLAorICAgICAgICAgICAgICAgICBzeW1ib2xQcmVmaXgsIGRyaXZlckNvZGUpOworCisgICAgICAgIGlmIChmaW5kU2hhcmVkU3ltYm9sKGxpYnJhcnlIYW5kbGUsIGRyaXZlclN5bWJvbCwgJmRyaXZlckFkZHJlc3MpKSB7CisgICAgICAgICAgKmRyaXZlck9iamVjdCA9IGxpYnJhcnlIYW5kbGU7CisKKyAgICAgICAgICB7CisgICAgICAgICAgICBjb25zdCB2b2lkICp2ZXJzaW9uQWRkcmVzcyA9IE5VTEw7CisgICAgICAgICAgICBjb25zdCBpbnQgdmVyc2lvblN5bWJvbExlbmd0aCA9IHN0cmxlbihzeW1ib2xQcmVmaXgpICsgOSArIHN0cmxlbihkcml2ZXJDb2RlKSArIDE7CisgICAgICAgICAgICBjaGFyIHZlcnNpb25TeW1ib2xbdmVyc2lvblN5bWJvbExlbmd0aF07CisgICAgICAgICAgICBzbnByaW50Zih2ZXJzaW9uU3ltYm9sLCB2ZXJzaW9uU3ltYm9sTGVuZ3RoLCAiJXNfdmVyc2lvbl8lcyIsCisgICAgICAgICAgICAgICAgICAgICBzeW1ib2xQcmVmaXgsIGRyaXZlckNvZGUpOworCisgICAgICAgICAgICBpZiAoZmluZFNoYXJlZFN5bWJvbChsaWJyYXJ5SGFuZGxlLCB2ZXJzaW9uU3ltYm9sLCAmdmVyc2lvbkFkZHJlc3MpKSB7CisgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmFjdHVhbFZlcnNpb24gPSB2ZXJzaW9uQWRkcmVzczsKKyAgICAgICAgICAgICAgc3RhdGljIGNvbnN0IGNoYXIgKmV4cGVjdGVkVmVyc2lvbiA9IERSSVZFUl9WRVJTSU9OX1NUUklORzsKKworICAgICAgICAgICAgICBpZiAoc3RyY21wKGFjdHVhbFZlcnNpb24sIGV4cGVjdGVkVmVyc2lvbikgIT0gMCkgeworICAgICAgICAgICAgICAgIGxvZ01lc3NhZ2UoTE9HX1dBUk5JTkcsCisgICAgICAgICAgICAgICAgICAiJXMgZHJpdmVyIHZlcnNpb24gbWlzbWF0Y2g6ICVzOiBFeHBlY3RlZDolcyBBY3R1YWwlcyIsCisgICAgICAgICAgICAgICAgICB0eXBlTmFtZSwgZHJpdmVyQ29kZSwKKyAgICAgICAgICAgICAgICAgIGV4cGVjdGVkVmVyc2lvbiwgYWN0dWFsVmVyc2lvbgorICAgICAgICAgICAgICAgICk7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgIGxvZ01lc3NhZ2UoTE9HX1dBUk5JTkcsCisgICAgICAgICAgICAgICAgImNhbm5vdCBmaW5kICVzIGRyaXZlciB2ZXJzaW9uIHN5bWJvbDogJXM6ICVzIiwKKyAgICAgICAgICAgICAgICB0eXBlTmFtZSwgZHJpdmVyQ29kZSwgdmVyc2lvblN5bWJvbAorICAgICAgICAgICAgICApOworICAgICAgICAgICAgfQorICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICBsb2dNZXNzYWdlKExPR19FUlIsCisgICAgICAgICAgICAiY2Fubm90IGZpbmQgJXMgZHJpdmVyIHN5bWJvbDogJXMiLAorICAgICAgICAgICAgdHlwZU5hbWUsIGRyaXZlclN5bWJvbAorICAgICAgICAgICk7CisKKyAgICAgICAgICB1bmxvYWRTaGFyZWRPYmplY3QobGlicmFyeUhhbmRsZSk7CisgICAgICAgICAgZHJpdmVyQWRkcmVzcyA9IE5VTEw7CisgICAgICAgIH0KKyAgICAgIH0gZWxzZSB7CisgICAgICAgIGxvZ01lc3NhZ2UoTE9HX0VSUiwKKyAgICAgICAgICAiY2Fubm90IGxvYWQgJXMgZHJpdmVyOiAlcyIsCisgICAgICAgICAgdHlwZU5hbWUsIGxpYnJhcnlQYXRoCisgICAgICAgICk7CisgICAgICB9CisKKyAgICAgIGZyZWUobGlicmFyeVBhdGgpOworICAgIH0KKyAgfQorI2VuZGlmIC8qIEVOQUJMRV9TSEFSRURfT0JKRUNUUyAqLworCisgIHJldHVybiBkcml2ZXJBZGRyZXNzOworfQorCit2b2lkCitpZGVudGlmeURyaXZlciAoCisgIGNvbnN0IGNoYXIgKnR5cGUsCisgIGNvbnN0IERyaXZlckRlZmluaXRpb24gKmRlZmluaXRpb24sCisgIGludCBmdWxsCispIHsKKyAgeworICAgIGNoYXIgYnVmZmVyWzBYMTAwXTsKKyAgICBTVFJfQkVHSU4oYnVmZmVyLCBzaXplb2YoYnVmZmVyKSk7CisKKyAgICBTVFJfUFJJTlRGKAorICAgICAgIiVzIERyaXZlcjogJXMgWyVzXSIsCisgICAgICB0eXBlLCBkZWZpbml0aW9uLT5jb2RlLCBkZWZpbml0aW9uLT5uYW1lCisgICAgKTsKKworICAgIGlmIChkZWZpbml0aW9uLT52ZXJzaW9uICYmICpkZWZpbml0aW9uLT52ZXJzaW9uKSB7CisgICAgICBTVFJfUFJJTlRGKCIgVmVyc2lvbjolcyIsIGRlZmluaXRpb24tPnZlcnNpb24pOworICAgIH0KKworICAgIGlmIChmdWxsKSB7CisgICAgICBTVFJfUFJJTlRGKCIgKGNvbXBpbGVkIG9uICVzIGF0ICVzKSIsIGRlZmluaXRpb24tPmRhdGUsIGRlZmluaXRpb24tPnRpbWUpOworICAgIH0KKworICAgIFNUUl9FTkQ7CisgICAgbG9nTWVzc2FnZShMT0dfTk9USUNFLCAiJXMiLCBidWZmZXIpOworICB9CisKKyAgaWYgKGZ1bGwpIHsKKyAgICBpZiAoZGVmaW5pdGlvbi0+ZGV2ZWxvcGVycyAmJiAqZGVmaW5pdGlvbi0+ZGV2ZWxvcGVycykgeworICAgICAgbG9nTWVzc2FnZShMT0dfSU5GTywgIiAgIERldmVsb3BlZCBieSAlcyIsIGRlZmluaXRpb24tPmRldmVsb3BlcnMpOworICAgIH0KKyAgfQorfQpkaWZmIC0tZ2l0IGEvUHJvZ3JhbXMvZHlubGRfZGxmY24uYyBiL1Byb2dyYW1zL2R5bmxkX2RsZmNuLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDhjZGEzOQotLS0gL2Rldi9udWxsCisrKyBiL1Byb2dyYW1zL2R5bmxkX2RsZmNuLmMKQEAgLTAsMCArMSwxMTYgQEAKKy8qCisgKiBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorICogICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorICoKKyAqIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorICoKKyAqIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyAqLworCisjaW5jbHVkZSAicHJvbG9ndWUuaCIKKworI2luY2x1ZGUgPGRsZmNuLmg+CisKKyNpZmRlZiBfX01TRE9TX18KKyNpbmNsdWRlIDxkZWJ1Zy9zeW1zLmg+CisjaW5jbHVkZSAicHJvZ3JhbS5oIgorI2VuZGlmIC8qIF9fTVNET1NfXyAqLworCisjaW5jbHVkZSAibG9nLmgiCisjaW5jbHVkZSAiZHlubGQuaCIKKworc3RhdGljIHZvaWQKK2NsZWFyRXJyb3IgKHZvaWQpIHsKKyAgZGxlcnJvcigpOworfQorCitzdGF0aWMgaW50Citsb2dFcnJvciAodm9pZCkgeworICBjb25zdCBjaGFyICplcnJvciA9IGRsZXJyb3IoKTsKKyAgaWYgKCFlcnJvcikgcmV0dXJuIDE7CisKKyAgbG9nTWVzc2FnZShMT0dfRVJSLCAiJXMiLCBlcnJvcik7CisgIHJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIGludAorZ2V0U2hhcmVkT2JqZWN0TG9hZEZsYWdzICh2b2lkKSB7CisgIGludCBmbGFncyA9IDA7CisKKyNpZmRlZiBETF9MQVpZCisgIGZsYWdzIHw9IERMX0xBWlk7CisjZWxzZSAvKiBETF9MQVpZICovCisgIGZsYWdzIHw9IFJUTERfTEFaWSB8IFJUTERfR0xPQkFMOworI2VuZGlmIC8qIERMX0xBWlkgKi8KKworICByZXR1cm4gZmxhZ3M7Cit9CisKK3ZvaWQgKgorbG9hZFNoYXJlZE9iamVjdCAoY29uc3QgY2hhciAqcGF0aCkgeworICB2b2lkICpvYmplY3Q7CisKKyAgY2xlYXJFcnJvcigpOworICBvYmplY3QgPSBkbG9wZW4ocGF0aCwgZ2V0U2hhcmVkT2JqZWN0TG9hZEZsYWdzKCkpOworICBpZiAoIW9iamVjdCkgbG9nRXJyb3IoKTsKKyAgcmV0dXJuIG9iamVjdDsKK30KKwordm9pZCAKK3VubG9hZFNoYXJlZE9iamVjdCAodm9pZCAqb2JqZWN0KSB7CisgIGNsZWFyRXJyb3IoKTsKKyAgaWYgKGRsY2xvc2Uob2JqZWN0KSkgbG9nRXJyb3IoKTsKK30KKworaW50IAorZmluZFNoYXJlZFN5bWJvbCAodm9pZCAqb2JqZWN0LCBjb25zdCBjaGFyICpzeW1ib2wsIHZvaWQgKnBvaW50ZXJBZGRyZXNzKSB7CisgIHZvaWQgKiphZGRyZXNzID0gcG9pbnRlckFkZHJlc3M7CisKKyAgY2xlYXJFcnJvcigpOyAvKiBjbGVhciBhbnkgcHJldmlvdXMgZXJyb3IgY29uZGl0aW9uICovCisgICphZGRyZXNzID0gZGxzeW0ob2JqZWN0LCBzeW1ib2wpOworICByZXR1cm4gbG9nRXJyb3IoKTsKK30KKworY29uc3QgY2hhciAqCitnZXRTaGFyZWRTeW1ib2xOYW1lICh2b2lkICphZGRyZXNzLCBwdHJkaWZmX3QgKm9mZnNldCkgeworI2lmIGRlZmluZWQoX19NU0RPU19fKQorICB7CisgICAgc3RhdGljIGludCBzeW1zSW5pdGlhbGl6ZWQgPSAwOworCisgICAgaWYgKCFzeW1zSW5pdGlhbGl6ZWQpIHsKKyAgICAgIHN5bXNfaW5pdCgoY2hhciAqKXByb2dyYW1QYXRoKTsKKyAgICAgIHN5bXNJbml0aWFsaXplZCA9IDE7CisgICAgfQorICB9CisKKyAgeworICAgIHVuc2lnbmVkIGxvbmcgZGVsdGE7CisgICAgY2hhciAqbmFtZSA9IHN5bXNfdmFsMm5hbWUoKHVuc2lnbmVkIGxvbmcpYWRkcmVzcywgJmRlbHRhKTsKKworICAgIGlmIChuYW1lKSB7CisgICAgICBpZiAob2Zmc2V0KSAqb2Zmc2V0ID0gZGVsdGE7CisgICAgICByZXR1cm4gbmFtZTsKKyAgICB9CisgIH0KKworI2VsaWYgZGVmaW5lZChfX2xpbnV4X18pIHx8IGRlZmluZWQoX19BTkRST0lEX18pCisgIERsX2luZm8gaW5mbzsKKworICBpZiAoZGxhZGRyKGFkZHJlc3MsICZpbmZvKSkgeworICAgIGlmIChvZmZzZXQpICpvZmZzZXQgPSBhZGRyZXNzIC0gaW5mby5kbGlfc2FkZHI7CisgICAgcmV0dXJuIGluZm8uZGxpX3NuYW1lOworICB9CisKKyNlbmRpZiAvKiBnZXQgc3ltYm9sIG5hbWUgKi8KKworICByZXR1cm4gTlVMTDsKK30KZGlmZiAtLWdpdCBhL1Byb2dyYW1zL2R5bmxkX2R5bGQuYyBiL1Byb2dyYW1zL2R5bmxkX2R5bGQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MmRkMjZhCi0tLSAvZGV2L251bGwKKysrIGIvUHJvZ3JhbXMvZHlubGRfZHlsZC5jCkBAIC0wLDAgKzEsOTkgQEAKKy8qCisgKiBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorICogICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorICoKKyAqIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorICoKKyAqIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyAqLworCisjaW5jbHVkZSAicHJvbG9ndWUuaCIKKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8bWFjaC1vL2R5bGQuaD4KKworI2luY2x1ZGUgImxvZy5oIgorI2luY2x1ZGUgImR5bmxkLmgiCisKK3N0YXRpYyB2b2lkCitsb2dEeWxkRXJyb3IgKGNvbnN0IGNoYXIgKmFjdGlvbikgeworICBOU0xpbmtFZGl0RXJyb3JzIGVycm9yczsKKyAgaW50IG51bWJlcjsKKyAgY29uc3QgY2hhciAqZmlsZTsKKyAgY29uc3QgY2hhciAqbWVzc2FnZTsKKyAgTlNMaW5rRWRpdEVycm9yKCZlcnJvcnMsICZudW1iZXIsICZmaWxlLCAmbWVzc2FnZSk7CisgIGxvZ01lc3NhZ2UoTE9HX0VSUiwgIiUuKnMiLCAoaW50KShzdHJsZW4obWVzc2FnZSktMSksIG1lc3NhZ2UpOworfQorCit2b2lkICoKK2xvYWRTaGFyZWRPYmplY3QgKGNvbnN0IGNoYXIgKnBhdGgpIHsKKyAgTlNPYmplY3RGaWxlSW1hZ2UgaW1hZ2U7CisgIHN3aXRjaCAoTlNDcmVhdGVPYmplY3RGaWxlSW1hZ2VGcm9tRmlsZShwYXRoLCAmaW1hZ2UpKSB7CisgICAgY2FzZSBOU09iamVjdEZpbGVJbWFnZVN1Y2Nlc3M6IHsKKyAgICAgIE5TTW9kdWxlIG1vZHVsZSA9IE5TTGlua01vZHVsZShpbWFnZSwgcGF0aCwgTlNMSU5LTU9EVUxFX09QVElPTl9SRVRVUk5fT05fRVJST1IpOworICAgICAgaWYgKG1vZHVsZSkgcmV0dXJuIG1vZHVsZTsKKyAgICAgIGxvZ0R5bGRFcnJvcigibGluayBtb2R1bGUiKTsKKyAgICAgIGxvZ01lc3NhZ2UoTE9HX0VSUiwgInNoYXJlZCBvYmplY3Qgbm90IGxpbmtlZDogJXMiLCBwYXRoKTsKKyAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2UgTlNPYmplY3RGaWxlSW1hZ2VJbmFwcHJvcHJpYXRlRmlsZToKKyAgICAgIGxvZ01lc3NhZ2UoTE9HX0VSUiwgImluYXBwcm9wcmlhdGUgb2JqZWN0IHR5cGU6ICVzIiwgcGF0aCk7CisgICAgICBicmVhazsKKworICAgIGNhc2UgTlNPYmplY3RGaWxlSW1hZ2VBcmNoOgorICAgICAgbG9nTWVzc2FnZShMT0dfRVJSLCAiaW5jb3JyZWN0IG9iamVjdCBhcmNoaXRlY3R1cmU6ICVzIiwgcGF0aCk7CisgICAgICBicmVhazsKKworICAgIGNhc2UgTlNPYmplY3RGaWxlSW1hZ2VGb3JtYXQ6CisgICAgICBsb2dNZXNzYWdlKExPR19FUlIsICJpbnZhbGlkIG9iamVjdCBmb3JtYXQ6ICVzIiwgcGF0aCk7CisgICAgICBicmVhazsKKworICAgIGNhc2UgTlNPYmplY3RGaWxlSW1hZ2VBY2Nlc3M6CisgICAgICBsb2dNZXNzYWdlKExPR19FUlIsICJpbmFjY2Vzc2libGUgb2JqZWN0OiAlcyIsIHBhdGgpOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIE5TT2JqZWN0RmlsZUltYWdlRmFpbHVyZToKKyAgICBkZWZhdWx0OgorICAgICAgbG9nTWVzc2FnZShMT0dfRVJSLCAic2hhcmVkIG9iamVjdCBub3QgbG9hZGVkOiAlcyIsIHBhdGgpOworICAgICAgYnJlYWs7CisgIH0KKyAgcmV0dXJuIE5VTEw7Cit9CisKK3ZvaWQgCit1bmxvYWRTaGFyZWRPYmplY3QgKHZvaWQgKm9iamVjdCkgeworICBOU01vZHVsZSBtb2R1bGUgPSBvYmplY3Q7CisgIE5TVW5MaW5rTW9kdWxlKG1vZHVsZSwgTlNVTkxJTktNT0RVTEVfT1BUSU9OX05PTkUpOworfQorCitpbnQgCitmaW5kU2hhcmVkU3ltYm9sICh2b2lkICpvYmplY3QsIGNvbnN0IGNoYXIgKnN5bWJvbCwgdm9pZCAqcG9pbnRlckFkZHJlc3MpIHsKKyAgTlNNb2R1bGUgbW9kdWxlID0gb2JqZWN0OworICBjaGFyIG5hbWVbc3RybGVuKHN5bWJvbCkgKyAyXTsKKyAgc25wcmludGYobmFtZSwgc2l6ZW9mKG5hbWUpLCAiXyVzIiwgc3ltYm9sKTsKKyAgeworICAgIE5TU3ltYm9sIHN5bSA9IE5TTG9va3VwU3ltYm9sSW5Nb2R1bGUobW9kdWxlLCBuYW1lKTsKKyAgICBpZiAoc3ltKSB7CisgICAgICB2b2lkICoqYWRkcmVzcyA9IHBvaW50ZXJBZGRyZXNzOworICAgICAgKmFkZHJlc3MgPSBOU0FkZHJlc3NPZlN5bWJvbChzeW0pOworICAgICAgcmV0dXJuIDE7CisgICAgfQorICB9CisgIHJldHVybiAwOworfQorCitjb25zdCBjaGFyICoKK2dldFNoYXJlZFN5bWJvbE5hbWUgKHZvaWQgKmFkZHJlc3MsIHB0cmRpZmZfdCAqb2Zmc2V0KSB7CisgIHJldHVybiBOVUxMOworfQpkaWZmIC0tZ2l0IGEvUHJvZ3JhbXMvZHlubGRfZ3J1Yi5jIGIvUHJvZ3JhbXMvZHlubGRfZ3J1Yi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhmMTNhMjMKLS0tIC9kZXYvbnVsbAorKysgYi9Qcm9ncmFtcy9keW5sZF9ncnViLmMKQEAgLTAsMCArMSw0OCBAQAorLyoKKyAqIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisgKiAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisgKgorICogQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKKyNpbmNsdWRlICJwcm9sb2d1ZS5oIgorCisjaW5jbHVkZSA8Z3J1Yi9kbC5oPgorCisjaW5jbHVkZSAiZHlubGQuaCIKKwordm9pZCAqCitsb2FkU2hhcmVkT2JqZWN0IChjb25zdCBjaGFyICpuYW1lKSB7CisgIHJldHVybiBncnViX2RsX2xvYWQobmFtZSk7Cit9CisKK3ZvaWQgCit1bmxvYWRTaGFyZWRPYmplY3QgKHZvaWQgKm9iamVjdCkgeworICBncnViX2RsX3VubG9hZChvYmplY3QpOworfQorCitpbnQgCitmaW5kU2hhcmVkU3ltYm9sICh2b2lkICpvYmplY3QsIGNvbnN0IGNoYXIgKnN5bWJvbCwgdm9pZCAqcG9pbnRlckFkZHJlc3MpIHsKKyAgdm9pZCAqKmFkZHJlc3MgPSBwb2ludGVyQWRkcmVzczsKKyAgZ3J1Yl9zeW1ib2xfdCBzeW0gPSBncnViX2dldF9zeW1ib2woc3ltYm9sLCBvYmplY3QpOworCisgIGlmICghc3ltKSByZXR1cm4gMDsKKyAgKmFkZHJlc3MgPSBzeW0tPmFkZHI7CisgIHJldHVybiAxOworfQorCitjb25zdCBjaGFyICoKK2dldFNoYXJlZFN5bWJvbE5hbWUgKHZvaWQgKmFkZHJlc3MsIHB0cmRpZmZfdCAqb2Zmc2V0KSB7CisgIHJldHVybiBOVUxMOworfQpkaWZmIC0tZ2l0IGEvUHJvZ3JhbXMvZHlubGRfbm9uZS5jIGIvUHJvZ3JhbXMvZHlubGRfbm9uZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE4NGE0YTQKLS0tIC9kZXYvbnVsbAorKysgYi9Qcm9ncmFtcy9keW5sZF9ub25lLmMKQEAgLTAsMCArMSw0MCBAQAorLyoKKyAqIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisgKiAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisgKgorICogQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKKyNpbmNsdWRlICJwcm9sb2d1ZS5oIgorCisjaW5jbHVkZSAiZHlubGQuaCIKKwordm9pZCAqCitsb2FkU2hhcmVkT2JqZWN0IChjb25zdCBjaGFyICpwYXRoKSB7CisgIHJldHVybiBOVUxMOworfQorCit2b2lkIAordW5sb2FkU2hhcmVkT2JqZWN0ICh2b2lkICpvYmplY3QpIHsKK30KKworaW50IAorZmluZFNoYXJlZFN5bWJvbCAodm9pZCAqb2JqZWN0LCBjb25zdCBjaGFyICpzeW1ib2wsIHZvaWQgKnBvaW50ZXJBZGRyZXNzKSB7CisgIHJldHVybiAwOworfQorCitjb25zdCBjaGFyICoKK2dldFNoYXJlZFN5bWJvbE5hbWUgKHZvaWQgKmFkZHJlc3MsIHB0cmRpZmZfdCAqb2Zmc2V0KSB7CisgIHJldHVybiBOVUxMOworfQpkaWZmIC0tZ2l0IGEvUHJvZ3JhbXMvZHlubGRfc2hsLmMgYi9Qcm9ncmFtcy9keW5sZF9zaGwuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYWZhZWM0Ci0tLSAvZGV2L251bGwKKysrIGIvUHJvZ3JhbXMvZHlubGRfc2hsLmMKQEAgLTAsMCArMSw2NCBAQAorLyoKKyAqIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisgKiAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisgKgorICogQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKKyNpbmNsdWRlICJwcm9sb2d1ZS5oIgorCisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKyNpZmRlZiBIQVZFX1NITF9MT0FECisjaW5jbHVkZSA8ZGwuaD4KKyNlbmRpZiAvKiBIQVZFX1NITF9MT0FEICovCisKKyNpbmNsdWRlICJsb2cuaCIKKyNpbmNsdWRlICJkeW5sZC5oIgorCit2b2lkICoKK2xvYWRTaGFyZWRPYmplY3QgKGNvbnN0IGNoYXIgKnBhdGgpIHsKKyNpZmRlZiBIQVZFX1NITF9MT0FECisgIHNobF90IG9iamVjdCA9IHNobF9sb2FkKHBhdGgsIEJJTkRfSU1NRURJQVRFfEJJTkRfVkVSQk9TRXxEWU5BTUlDX1BBVEgsIDBMKTsKKyAgaWYgKG9iamVjdCkgcmV0dXJuIG9iamVjdDsKKyAgbG9nTWVzc2FnZShMT0dfRVJSLCAiU2hhcmVkIGxpYnJhcnkgJyVzJyBub3QgbG9hZGVkOiAlcyIsCisgICAgICAgICAgICAgcGF0aCwgc3RyZXJyb3IoZXJybm8pKTsKKyNlbmRpZiAvKiBIQVZFX1NITF9MT0FEICovCisgIHJldHVybiBOVUxMOworfQorCit2b2lkIAordW5sb2FkU2hhcmVkT2JqZWN0ICh2b2lkICpvYmplY3QpIHsKKyNpZmRlZiBIQVZFX1NITF9MT0FECisgIGlmIChzaGxfdW5sb2FkKG9iamVjdCkgPT0gLTEpCisgICAgbG9nTWVzc2FnZShMT0dfRVJSLCAiU2hhcmVkIGxpYnJhcnkgdW5sb2FkIGVycm9yOiAlcyIsCisgICAgICAgICAgICAgICBzdHJlcnJvcihlcnJubykpOworI2VuZGlmIC8qIEhBVkVfU0hMX0xPQUQgKi8KK30KKworaW50IAorZmluZFNoYXJlZFN5bWJvbCAodm9pZCAqb2JqZWN0LCBjb25zdCBjaGFyICpzeW1ib2wsIGNvbnN0IHZvaWQgKiphZGRyZXNzKSB7CisjaWZkZWYgSEFWRV9TSExfTE9BRAorICBzaGxfdCBoYW5kbGUgPSBvYmplY3Q7CisgIGlmIChzaGxfZmluZHN5bSgmaGFuZGxlLCBzeW1ib2wsIFRZUEVfVU5ERUZJTkVELCBhZGRyZXNzKSAhPSAtMSkgcmV0dXJuIDE7CisgIGxvZ01lc3NhZ2UoTE9HX0VSUiwgIlNoYXJlZCBzeW1ib2wgJyVzJyBub3QgZm91bmQ6ICVzIiwKKyAgICAgICAgICAgICBzeW1ib2wsIHN0cmVycm9yKGVycm5vKSk7CisjZW5kaWYgLyogSEFWRV9TSExfTE9BRCAqLworICByZXR1cm4gMDsKK30KKworY29uc3QgY2hhciAqCitnZXRTaGFyZWRTeW1ib2xOYW1lICh2b2lkICphZGRyZXNzLCBwdHJkaWZmX3QgKm9mZnNldCkgeworICByZXR1cm4gTlVMTDsKK30KZGlmZiAtLWdpdCBhL1Byb2dyYW1zL2R5bmxkX3dpbmRvd3MuYyBiL1Byb2dyYW1zL2R5bmxkX3dpbmRvd3MuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zY2YzZTk4Ci0tLSAvZGV2L251bGwKKysrIGIvUHJvZ3JhbXMvZHlubGRfd2luZG93cy5jCkBAIC0wLDAgKzEsNTAgQEAKKy8qCisgKiBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorICogICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorICoKKyAqIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorICoKKyAqIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyAqLworCisjaW5jbHVkZSAicHJvbG9ndWUuaCIKKworI2luY2x1ZGUgImxvZy5oIgorI2luY2x1ZGUgImR5bmxkLmgiCisKK3ZvaWQgKgorbG9hZFNoYXJlZE9iamVjdCAoY29uc3QgY2hhciAqcGF0aCkgeworICBITU9EVUxFIGxpYnJhcnk7CisgIGlmICghKGxpYnJhcnkgPSBMb2FkTGlicmFyeShwYXRoKSkpCisgICAgbG9nV2luZG93c1N5c3RlbUVycm9yKCJsb2FkaW5nIGxpYnJhcnkiKTsKKyAgcmV0dXJuIGxpYnJhcnk7Cit9CisKK3ZvaWQgCit1bmxvYWRTaGFyZWRPYmplY3QgKHZvaWQgKm9iamVjdCkgeworICBpZiAoIShGcmVlTGlicmFyeSgoSE1PRFVMRSkgb2JqZWN0KSkpCisgICAgbG9nV2luZG93c1N5c3RlbUVycm9yKCJ1bmxvYWRpbmcgbGlicmFyeSIpOworfQorCitpbnQgCitmaW5kU2hhcmVkU3ltYm9sICh2b2lkICpvYmplY3QsIGNvbnN0IGNoYXIgKnN5bWJvbCwgdm9pZCAqcG9pbnRlckFkZHJlc3MpIHsKKyAgdm9pZCAqKmFkZHJlc3MgPSBwb2ludGVyQWRkcmVzczsKKyAgaWYgKCgqYWRkcmVzcyA9IEdldFByb2NBZGRyZXNzKChITU9EVUxFKSBvYmplY3QsIHN5bWJvbCkpKQorICAgIHJldHVybiAxOworICBsb2dXaW5kb3dzU3lzdGVtRXJyb3IoImxvb2tpbmcgdXAgc3ltYm9sIGluIGxpYnJhcnkiKTsKKyAgcmV0dXJuIDA7Cit9CisKK2NvbnN0IGNoYXIgKgorZ2V0U2hhcmVkU3ltYm9sTmFtZSAodm9pZCAqYWRkcmVzcywgcHRyZGlmZl90ICpvZmZzZXQpIHsKKyAgcmV0dXJuIE5VTEw7Cit9CmRpZmYgLS1naXQgYS9Qcm9ncmFtcy9lenVzYi5jIGIvUHJvZ3JhbXMvZXp1c2IuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NDk2ODI3Ci0tLSAvZGV2L251bGwKKysrIGIvUHJvZ3JhbXMvZXp1c2IuYwpAQCAtMCwwICsxLDE3NCBAQAorLyoKKyAqIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisgKiAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisgKgorICogQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKKyNpbmNsdWRlICJwcm9sb2d1ZS5oIgorCisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKyNpbmNsdWRlICJsb2cuaCIKKyNpbmNsdWRlICJlenVzYi5oIgorI2luY2x1ZGUgImloZXguaCIKKyNpbmNsdWRlICJ0aW1pbmcuaCIKKyNpbmNsdWRlICJjb3JlLmgiCisKKyNkZWZpbmUgRVpVU0JfUkVRVUVTVF9USU1FT1VUIDEwMDAKKyNkZWZpbmUgRVpVU0JfQ1BVQ1NfREVMQVkgMTAKKworaW50CitlenVzYldyaXRlRGF0YSAoVXNiRGV2aWNlICpkZXZpY2UsIEV6dXNiQWN0aW9uIGFjdGlvbiwgSWhleEFkZHJlc3MgYWRkcmVzcywgY29uc3QgdW5zaWduZWQgY2hhciAqZGF0YSwgc2l6ZV90IGxlbmd0aCkgeworICBzc2l6ZV90IHJlc3VsdCA9IHVzYkNvbnRyb2xXcml0ZSgKKyAgICBkZXZpY2UsIEVaVVNCX1JFUVVFU1RfUkVDSVBJRU5ULCBFWlVTQl9SRVFVRVNUX1RZUEUsCisgICAgYWN0aW9uLCBhZGRyZXNzLCBFWlVTQl9SRVFVRVNUX0lOREVYLAorICAgIGRhdGEsIGxlbmd0aCwgRVpVU0JfUkVRVUVTVF9USU1FT1VUCisgICk7CisKKyAgaWYgKHJlc3VsdCAhPSAtMSkgeworICAgIHNpemVfdCBjb3VudCA9IHJlc3VsdDsKKyAgICBpZiAoY291bnQgPT0gbGVuZ3RoKSByZXR1cm4gMTsKKworICAgIGxvZ01lc3NhZ2UoTE9HX0VSUiwKKyAgICAgICJmaXJtd2FyZSB3cml0ZSBsZW5ndGggbWlzbWF0Y2g6IgorICAgICAgIiBBZGRyZXNzOiUwNCJQUklYMTYKKyAgICAgICIgRXhwZWN0OiUiUFJJc2l6ZQorICAgICAgIiBBY3R1YWw6JSJQUklzaXplLAorICAgICAgYWRkcmVzcywgbGVuZ3RoLCBjb3VudAorICAgICk7CisgIH0KKworICByZXR1cm4gMDsKK30KKworaW50CitlenVzYlJlYWREYXRhIChVc2JEZXZpY2UgKmRldmljZSwgRXp1c2JBY3Rpb24gYWN0aW9uLCBJaGV4QWRkcmVzcyBhZGRyZXNzLCB1bnNpZ25lZCBjaGFyICpidWZmZXIsIHNpemVfdCBzaXplKSB7CisgIHNzaXplX3QgcmVzdWx0ID0gdXNiQ29udHJvbFJlYWQoCisgICAgZGV2aWNlLCBFWlVTQl9SRVFVRVNUX1JFQ0lQSUVOVCwgRVpVU0JfUkVRVUVTVF9UWVBFLAorICAgIGFjdGlvbiwgYWRkcmVzcywgRVpVU0JfUkVRVUVTVF9JTkRFWCwKKyAgICBidWZmZXIsIHNpemUsIEVaVVNCX1JFUVVFU1RfVElNRU9VVAorICApOworCisgIGlmIChyZXN1bHQgIT0gLTEpIHsKKyAgICBzaXplX3QgY291bnQgPSByZXN1bHQ7CisgICAgaWYgKGNvdW50ID09IHNpemUpIHJldHVybiAxOworCisgICAgbG9nTWVzc2FnZShMT0dfRVJSLAorICAgICAgImZpcm13YXJlIHJlYWQgbGVuZ3RoIG1pc21hdGNoOiIKKyAgICAgICIgQWRkcmVzczolMDQiUFJJWDE2CisgICAgICAiIEV4cGVjdDolIlBSSXNpemUKKyAgICAgICIgQWN0dWFsOiUiUFJJc2l6ZSwKKyAgICAgIGFkZHJlc3MsIHNpemUsIGNvdW50CisgICAgKTsKKyAgfQorCisgIHJldHVybiAwOworfQorCitpbnQKK2V6dXNiVmVyaWZ5RGF0YSAoVXNiRGV2aWNlICpkZXZpY2UsIEV6dXNiQWN0aW9uIGFjdGlvbiwgSWhleEFkZHJlc3MgYWRkcmVzcywgY29uc3QgdW5zaWduZWQgY2hhciAqZGF0YSwgc2l6ZV90IGxlbmd0aCkgeworICB1bnNpZ25lZCBjaGFyIGJ1ZmZlcltsZW5ndGhdOworCisgIHsKKyAgICBpbnQgb2sgPSBlenVzYlJlYWREYXRhKAorICAgICAgZGV2aWNlLCBhY3Rpb24sIGFkZHJlc3MsIGJ1ZmZlciwgbGVuZ3RoCisgICAgKTsKKworICAgIGlmICghb2spIHJldHVybiAwOworICB9CisKKyAgaWYgKG1lbWNtcChidWZmZXIsIGRhdGEsIGxlbmd0aCkgIT0gMCkgeworICAgIGxvZ01lc3NhZ2UoTE9HX0VSUiwKKyAgICAgICJmaXJtd2FyZSBkYXRhIHZlcmlmaWNhdGlvbiBtaXNtYXRjaDoiCisgICAgICAiIEFkZHJlc3M6JTA0IlBSSVgxNiwKKyAgICAgIGFkZHJlc3MKKyAgICApOworCisgICAgbG9nQnl0ZXMoTE9HX0RFQlVHLCAiZXhwZWN0IiwgZGF0YSwgbGVuZ3RoKTsKKyAgICBsb2dCeXRlcyhMT0dfREVCVUcsICJhY3R1YWwiLCBidWZmZXIsIGxlbmd0aCk7CisgICAgcmV0dXJuIDA7CisgIH0KKworICByZXR1cm4gMTsKK30KKworaW50CitlenVzYldyaXRlQ1BVQ1MgKFVzYkRldmljZSAqZGV2aWNlLCB1aW50OF90IHN0YXRlKSB7CisgIGludCBvayA9IGV6dXNiV3JpdGVEYXRhKAorICAgIGRldmljZSwgRVpVU0JfQUNUSU9OX1JXX0lOVEVSTkFMLAorICAgIEVaVVNCX0NQVUNTX0FERFJFU1MsICZzdGF0ZSwgc2l6ZW9mKHN0YXRlKQorICApOworCisgIGlmIChvaykgYXBwcm94aW1hdGVEZWxheShFWlVTQl9DUFVDU19ERUxBWSk7CisgIHJldHVybiBvazsKK30KKworaW50CitlenVzYlN0b3BDUFUgKFVzYkRldmljZSAqZGV2aWNlKSB7CisgIHJldHVybiBlenVzYldyaXRlQ1BVQ1MoZGV2aWNlLCBFWlVTQl9DUFVDU19TVE9QKTsKK30KKworaW50CitlenVzYlJlc2V0Q1BVIChVc2JEZXZpY2UgKmRldmljZSkgeworICByZXR1cm4gZXp1c2JXcml0ZUNQVUNTKGRldmljZSwgRVpVU0JfQ1BVQ1NfUkVTRVQpOworfQorCitpbnQKK2V6dXNiUHJvY2Vzc0Jsb2IgKGNvbnN0IGNoYXIgKm5hbWUsIEloZXhSZWNvcmRIYW5kbGVyICpoYW5kbGVyLCB2b2lkICpkYXRhKSB7CisgIGludCBvayA9IDA7CisgIGNoYXIgKnBhdGggPSBpaGV4TWFrZVBhdGgob3B0X2RyaXZlcnNEaXJlY3RvcnksIG5hbWUpOworCisgIGlmIChwYXRoKSB7CisgICAgaWYgKGloZXhQcm9jZXNzRmlsZShwYXRoLCBoYW5kbGVyLCBkYXRhKSkgeworICAgICAgb2sgPSAxOworICAgIH0KKworICAgIGZyZWUocGF0aCk7CisgIH0KKworICByZXR1cm4gb2s7Cit9CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgVXNiRGV2aWNlICpkZXZpY2U7CisgIEV6dXNiQWN0aW9uIGFjdGlvbjsKK30gRXp1c2JSZWNvcmRQcm9jZXNzaW5nRGF0YTsKKworc3RhdGljIGludAorZXp1c2JJbnN0YWxsRGF0YSAoY29uc3QgSWhleFBhcnNlZFJlY29yZCAqcmVjb3JkLCB2b2lkICpkYXRhKSB7CisgIGNvbnN0IEV6dXNiUmVjb3JkUHJvY2Vzc2luZ0RhdGEgKnJwZCA9IGRhdGE7CisKKyAgVXNiRGV2aWNlICpjb25zdCBkZXZpY2UgPSBycGQtPmRldmljZTsKKyAgY29uc3QgRXp1c2JBY3Rpb24gYWN0aW9uID0gcnBkLT5hY3Rpb247CisKKyAgY29uc3QgSWhleEFkZHJlc3MgYWRkcmVzcyA9IHJlY29yZC0+YWRkcmVzczsKKyAgY29uc3QgSWhleEJ5dGUgKmNvbnN0IGJ5dGVzID0gcmVjb3JkLT5kYXRhOworICBjb25zdCBJaGV4Q291bnQgY291bnQgPSByZWNvcmQtPmNvdW50OworCisgIGlmICghZXp1c2JXcml0ZURhdGEoZGV2aWNlLCBhY3Rpb24sIGFkZHJlc3MsIGJ5dGVzLCBjb3VudCkpIHJldHVybiAwOworICBpZiAoIWV6dXNiVmVyaWZ5RGF0YShkZXZpY2UsIGFjdGlvbiwgYWRkcmVzcywgYnl0ZXMsIGNvdW50KSkgcmV0dXJuIDA7CisKKyAgcmV0dXJuIDE7Cit9CisKK2ludAorZXp1c2JJbnN0YWxsQmxvYiAoVXNiRGV2aWNlICpkZXZpY2UsIGNvbnN0IGNoYXIgKm5hbWUsIEV6dXNiQWN0aW9uIGFjdGlvbikgeworICBFenVzYlJlY29yZFByb2Nlc3NpbmdEYXRhIHJwZCA9IHsKKyAgICAuZGV2aWNlID0gZGV2aWNlLAorICAgIC5hY3Rpb24gPSBhY3Rpb24KKyAgfTsKKworICByZXR1cm4gZXp1c2JQcm9jZXNzQmxvYihuYW1lLCBlenVzYkluc3RhbGxEYXRhLCAmcnBkKTsKK30KZGlmZiAtLWdpdCBhL1Byb2dyYW1zL2ZpbGUuYyBiL1Byb2dyYW1zL2ZpbGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MjZmYjE4Ci0tLSAvZGV2L251bGwKKysrIGIvUHJvZ3JhbXMvZmlsZS5jCkBAIC0wLDAgKzEsMTM5MyBAQAorLyoKKyAqIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisgKiAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisgKgorICogQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKKyNpbmNsdWRlICJwcm9sb2d1ZS5oIgorCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRhcmcuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPGN0eXBlLmg+CisjaW5jbHVkZSA8ZmNudGwuaD4KKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorI2luY2x1ZGUgPGxpbWl0cy5oPgorI2luY2x1ZGUgPGxvY2FsZS5oPgorCisjaWZkZWYgSEFWRV9MQU5HSU5GT19ICisjaW5jbHVkZSA8bGFuZ2luZm8uaD4KKyNlbmRpZiAvKiBIQVZFX0xBTkdJTkZPX0ggKi8KKworI2lmZGVmIEhBVkVfSUNPTlZfSAorI2luY2x1ZGUgPGljb252Lmg+CisjZW5kaWYgLyogSEFWRV9JQ09OVl9IICovCisKKyNpZmRlZiBIQVZFX1NZU19GSUxFX0gKKyNpbmNsdWRlIDxzeXMvZmlsZS5oPgorI2VuZGlmIC8qIEhBVkVfU1lTX0ZJTEVfSCAqLworCisjaW5jbHVkZSAicGFyYW1ldGVycy5oIgorI2luY2x1ZGUgImxvZy5oIgorI2luY2x1ZGUgInN0cmZtdC5oIgorI2luY2x1ZGUgImZpbGUuaCIKKyNpbmNsdWRlICJsb2NrLmgiCisjaW5jbHVkZSAicGFyc2UuaCIKKyNpbmNsdWRlICJhc3luY193YWl0LmgiCisjaW5jbHVkZSAidXRmOC5oIgorI2luY2x1ZGUgInByb2dyYW0uaCIKKworCitzdGF0aWMgaW5saW5lIGludAorYWxsb3dCYWNrc2xhc2hBc1BhdGhTZXBhcmF0b3IgKHZvaWQpIHsKKyNpZiBkZWZpbmVkKF9fTUlOR1czMl9fKSB8fCBkZWZpbmVkKF9fTVNET1NfXykKKyAgcmV0dXJuIDE7CisjZWxzZSAvKiBhbGxvdyBiYWNrc2xhc2ggKi8KKyAgcmV0dXJuIDA7CisjZW5kaWYgLyogYWxsb3cgYmFja3NsYXNoICovCit9CisKK3N0YXRpYyBpbnQKK2lzRHJpdmVMZXR0ZXIgKGNoYXIgY2hhcmFjdGVyKSB7CisgIHJldHVybiAhIXN0cmNocigiQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoiLCB0b3VwcGVyKGNoYXJhY3RlcikpOworfQorCitpbnQKK2lzUGF0aFNlcGFyYXRvciAoY29uc3QgY2hhciBjaGFyYWN0ZXIpIHsKKyAgaWYgKGNoYXJhY3RlciA9PSBQQVRIX1NFUEFSQVRPUl9DSEFSQUNURVIpIHJldHVybiAxOworCisgIGlmIChhbGxvd0JhY2tzbGFzaEFzUGF0aFNlcGFyYXRvcigpKSB7CisgICAgaWYgKGNoYXJhY3RlciA9PSAnXFwnKSB7CisgICAgICByZXR1cm4gMTsKKyAgICB9CisgIH0KKworICByZXR1cm4gMDsKK30KKworaW50Citpc0Fic29sdXRlUGF0aCAoY29uc3QgY2hhciAqcGF0aCkgeworICBpZiAoaXNQYXRoU2VwYXJhdG9yKHBhdGhbMF0pKSByZXR1cm4gMTsKKworICBpZiAoYWxsb3dCYWNrc2xhc2hBc1BhdGhTZXBhcmF0b3IoKSkgeworICAgIGlmIChpc0RyaXZlTGV0dGVyKHBhdGhbMF0pKSB7CisgICAgICBpZiAocGF0aFsxXSA9PSAnOicpIHsKKyAgICAgICAgaWYgKGlzUGF0aFNlcGFyYXRvcihwYXRoWzJdKSkgeworICAgICAgICAgIHJldHVybiAxOworICAgICAgICB9CisgICAgICB9CisgICAgfQorICB9CisKKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzaXplX3QKK3N0cmlwUGF0aFNlcGFyYXRvciAoY29uc3QgY2hhciAqcGF0aCwgc2l6ZV90IGxlbmd0aCkgeworICB3aGlsZSAobGVuZ3RoKSB7CisgICAgaWYgKCFpc1BhdGhTZXBhcmF0b3IocGF0aFtsZW5ndGgtMV0pKSBicmVhazsKKyAgICBsZW5ndGggLT0gMTsKKyAgfQorCisgIHJldHVybiBsZW5ndGg7Cit9CisKK2NoYXIgKgorZ2V0UGF0aERpcmVjdG9yeSAoY29uc3QgY2hhciAqcGF0aCkgeworICBzaXplX3QgbGVuZ3RoID0gc3RybGVuKHBhdGgpOworICBzaXplX3QgZW5kID0gc3RyaXBQYXRoU2VwYXJhdG9yKHBhdGgsIGxlbmd0aCk7CisKKyAgaWYgKGVuZCkgeworICAgIHdoaWxlICgtLWVuZCkgeworICAgICAgaWYgKGlzUGF0aFNlcGFyYXRvcihwYXRoW2VuZC0xXSkpIHsKKyAgICAgICAgYnJlYWs7CisgICAgICB9CisgICAgfQorCisgICAgaWYgKChsZW5ndGggPSBlbmQpKSB7CisgICAgICBpZiAoKGVuZCA9IHN0cmlwUGF0aFNlcGFyYXRvcihwYXRoLCBsZW5ndGgpKSkgeworICAgICAgICBsZW5ndGggPSBlbmQ7CisgICAgICB9CisgICAgfQorICB9CisKKyAgaWYgKCFsZW5ndGgpIGxlbmd0aCA9IHN0cmxlbigocGF0aCA9IENVUlJFTlRfRElSRUNUT1JZX05BTUUpKTsKKyAgeworICAgIGNoYXIgKmRpcmVjdG9yeSA9IG1hbGxvYyhsZW5ndGggKyAxKTsKKworICAgIGlmIChkaXJlY3RvcnkpIHsKKyAgICAgIG1lbWNweShkaXJlY3RvcnksIHBhdGgsIGxlbmd0aCk7CisgICAgICBkaXJlY3RvcnlbbGVuZ3RoXSA9IDA7CisgICAgfSBlbHNlIHsKKyAgICAgIGxvZ01hbGxvY0Vycm9yKCk7CisgICAgfQorCisgICAgcmV0dXJuIGRpcmVjdG9yeTsKKyAgfQorfQorCitjb25zdCBjaGFyICoKK2xvY2F0ZVBhdGhOYW1lIChjb25zdCBjaGFyICpwYXRoKSB7CisgIGNvbnN0IGNoYXIgKm5hbWUgPSBwYXRoICsgc3RybGVuKHBhdGgpOworCisgIHdoaWxlIChuYW1lICE9IHBhdGgpIHsKKyAgICBpZiAoaXNQYXRoU2VwYXJhdG9yKCotLW5hbWUpKSB7CisgICAgICArK25hbWU7CisgICAgICBicmVhazsKKyAgICB9CisgIH0KKworICByZXR1cm4gbmFtZTsKK30KKworY29uc3QgY2hhciAqCitsb2NhdGVQYXRoRXh0ZW5zaW9uIChjb25zdCBjaGFyICpwYXRoKSB7CisgIGNvbnN0IGNoYXIgKm5hbWUgPSBsb2NhdGVQYXRoTmFtZShwYXRoKTsKKyAgY29uc3QgY2hhciAqZXh0ZW5zaW9uID0gc3RycmNocihuYW1lLCAnLicpOworCisgIGlmIChleHRlbnNpb24gJiYgZXh0ZW5zaW9uWzFdKSB7CisgICAgY29uc3QgY2hhciAqYyA9IGV4dGVuc2lvbjsKKworICAgIHdoaWxlIChjID4gbmFtZSkgeworICAgICAgaWYgKCotLWMgIT0gJy4nKSB7CisgICAgICAgIHJldHVybiBleHRlbnNpb247CisgICAgICB9CisgICAgfQorICB9CisKKyAgcmV0dXJuIE5VTEw7Cit9CisKK2ludAoraXNFeHBsaWNpdFBhdGggKGNvbnN0IGNoYXIgKnBhdGgpIHsKKyAgcmV0dXJuIGxvY2F0ZVBhdGhOYW1lKHBhdGgpICE9IHBhdGg7Cit9CisKK2NoYXIgKgoram9pblBhdGggKGNvbnN0IGNoYXIgKmNvbnN0ICpjb21wb25lbnRzLCB1bnNpZ25lZCBpbnQgY291bnQpIHsKKyAgY29uc3QgY2hhciAqY29uc3QgKmNvbXBvbmVudCA9IGNvbXBvbmVudHMgKyBjb3VudDsKKyAgdW5zaWduZWQgaW50IHNpemUgPSAoY291bnQgKiAyKSAtIDE7CisgIGNvbnN0IGNoYXIgKnN0cmluZ3Nbc2l6ZV07CisgIHVuc2lnbmVkIGludCBmaXJzdCA9IHNpemU7CisKKyAgd2hpbGUgKGNvbXBvbmVudCAhPSBjb21wb25lbnRzKSB7CisgICAgY29uc3QgY2hhciAqbmV4dCA9ICotLWNvbXBvbmVudDsKKworICAgIGlmIChuZXh0ICYmICpuZXh0KSB7CisgICAgICBpZiAoKGZpcnN0ICE9IHNpemUpICYmICFpc1BhdGhTZXBhcmF0b3IobmV4dFtzdHJsZW4obmV4dCktMV0pKSB7CisgICAgICAgIHN0cmluZ3NbLS1maXJzdF0gPSAiLyI7CisgICAgICB9CisKKyAgICAgIHN0cmluZ3NbLS1maXJzdF0gPSBuZXh0OworICAgICAgaWYgKGlzQWJzb2x1dGVQYXRoKG5leHQpKSBicmVhazsKKyAgICB9CisgIH0KKworICByZXR1cm4gam9pblN0cmluZ3MoJnN0cmluZ3NbZmlyc3RdLCBzaXplLWZpcnN0KTsKK30KKworY2hhciAqCittYWtlUGF0aCAoY29uc3QgY2hhciAqZGlyZWN0b3J5LCBjb25zdCBjaGFyICpmaWxlKSB7CisgIGNvbnN0IGNoYXIgKmNvbnN0IGNvbXBvbmVudHNbXSA9IHtkaXJlY3RvcnksIGZpbGV9OworCisgIHJldHVybiBqb2luUGF0aChjb21wb25lbnRzLCBBUlJBWV9DT1VOVChjb21wb25lbnRzKSk7Cit9CisKK2ludAoraGFzRmlsZUV4dGVuc2lvbiAoY29uc3QgY2hhciAqcGF0aCwgY29uc3QgY2hhciAqZXh0ZW5zaW9uKSB7CisgIGNvbnN0IGNoYXIgKnRhaWwgPSBsb2NhdGVQYXRoRXh0ZW5zaW9uKHBhdGgpOworCisgIGlmICghdGFpbCkgcmV0dXJuIDA7CisgIHJldHVybiBzdHJjbXAodGFpbCwgZXh0ZW5zaW9uKSA9PSAwOworfQorCitjaGFyICoKK3JlcGxhY2VGaWxlRXh0ZW5zaW9uIChjb25zdCBjaGFyICpwYXRoLCBjb25zdCBjaGFyICpleHRlbnNpb24pIHsKKyAgY29uc3QgY2hhciAqb2xkRXh0ZW5zaW9uID0gbG9jYXRlUGF0aEV4dGVuc2lvbihwYXRoKTsKKworICBpZiAob2xkRXh0ZW5zaW9uKSB7CisgICAgc2l6ZV90IGhlYWRMZW5ndGggPSBvbGRFeHRlbnNpb24gLSBwYXRoOworICAgIHNpemVfdCBleHRlbnNpb25MZW5ndGggPSBzdHJsZW4oZXh0ZW5zaW9uKTsKKyAgICBjaGFyICpuZXdQYXRoID0gbWFsbG9jKGhlYWRMZW5ndGggKyBleHRlbnNpb25MZW5ndGggKyAxKTsKKworICAgIGlmIChuZXdQYXRoKSB7CisgICAgICBjaGFyICpieXRlID0gbmV3UGF0aDsKKworICAgICAgYnl0ZSA9IG1lbXBjcHkoYnl0ZSwgcGF0aCwgaGVhZExlbmd0aCk7CisgICAgICBieXRlID0gbWVtcGNweShieXRlLCBleHRlbnNpb24sIGV4dGVuc2lvbkxlbmd0aCk7CisgICAgICAqYnl0ZSA9IDA7CisKKyAgICAgIHJldHVybiBuZXdQYXRoOworICAgIH0gZWxzZSB7CisgICAgICBsb2dNYWxsb2NFcnJvcigpOworICAgIH0KKyAgfSBlbHNlIHsKKyAgICBsb2dNZXNzYWdlKExPR19XQVJOSU5HLCAicGF0aCBoYXMgbm8gZXh0ZW5zaW9uOiAlcyIsIHBhdGgpOworICB9CisKKyAgcmV0dXJuIE5VTEw7Cit9CisKK2NoYXIgKgorZW5zdXJlRmlsZUV4dGVuc2lvbiAoY29uc3QgY2hhciAqcGF0aCwgY29uc3QgY2hhciAqZXh0ZW5zaW9uKSB7CisgIGNvbnN0IGNoYXIgKnN0cmluZ3NbMl07CisgIGludCBjb3VudCA9IDA7CisKKyAgc3RyaW5nc1tjb3VudCsrXSA9IHBhdGg7CisgIGlmIChleHRlbnNpb24gJiYgIWxvY2F0ZVBhdGhFeHRlbnNpb24ocGF0aCkpIHN0cmluZ3NbY291bnQrK10gPSBleHRlbnNpb247CisgIHJldHVybiBqb2luU3RyaW5ncyhzdHJpbmdzLCBjb3VudCk7Cit9CisKK2NoYXIgKgorbWFrZUZpbGVQYXRoIChjb25zdCBjaGFyICpkaXJlY3RvcnksIGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKmV4dGVuc2lvbikgeworICBjaGFyICpwYXRoID0gTlVMTDsKKyAgY2hhciAqZmlsZSA9IGVuc3VyZUZpbGVFeHRlbnNpb24obmFtZSwgZXh0ZW5zaW9uKTsKKworICBpZiAoZmlsZSkgeworICAgIGlmIChpc0V4cGxpY2l0UGF0aChmaWxlKSkgcmV0dXJuIGZpbGU7CisgICAgcGF0aCA9IG1ha2VQYXRoKGRpcmVjdG9yeSwgZmlsZSk7CisgICAgZnJlZShmaWxlKTsKKyAgfQorCisgIHJldHVybiBwYXRoOworfQorCitpbnQKK3Rlc3RQYXRoIChjb25zdCBjaGFyICpwYXRoKSB7CisjaWZkZWYgRl9PSworICByZXR1cm4gYWNjZXNzKHBhdGgsIEZfT0spICE9IC0xOworI2Vsc2UgLyogRl9PSyAqLworICBlcnJubyA9IEVOT1NZUzsKKyAgcmV0dXJuIDA7CisjZW5kaWYgLyogRl9PSyAqLworfQorCitpbnQKK3Rlc3RGaWxlUGF0aCAoY29uc3QgY2hhciAqcGF0aCkgeworI2lmZGVmIFNfSVNSRUcKKyAgc3RydWN0IHN0YXQgc3RhdHVzOworCisgIGlmIChzdGF0KHBhdGgsICZzdGF0dXMpICE9IC0xKSB7CisgICAgaWYgKFNfSVNSRUcoc3RhdHVzLnN0X21vZGUpKSByZXR1cm4gMTsKKyAgICBlcnJubyA9IEVFWElTVDsKKyAgfQorI2Vsc2UgLyogU19JU1JFRyAqLworICBpbnQgcmVzdWx0ID0gb3BlbihwYXRoLCBPX1JET05MWSk7CisKKyAgaWYgKHJlc3VsdCAhPSAtMSkgeworICAgIGNsb3NlKHJlc3VsdCk7CisgICAgcmV0dXJuIDE7CisgIH0KKyNlbmRpZiAvKiBTX0lTUkVHICovCisKKyAgcmV0dXJuIDA7Cit9CisKK2ludAordGVzdFByb2dyYW1QYXRoIChjb25zdCBjaGFyICpwYXRoKSB7CisgIGlmICghdGVzdEZpbGVQYXRoKHBhdGgpKSByZXR1cm4gMDsKKworI2lmIGRlZmluZWQoX19NSU5HVzMyX18pCisgIHsKKyAgICBjb25zdCBjaGFyICpleHRlbnNpb24gPSBsb2NhdGVQYXRoRXh0ZW5zaW9uKHBhdGgpOworCisgICAgaWYgKGV4dGVuc2lvbikgeworICAgICAgc3RhdGljIGNoYXIgKipleHRlbnNpb25zID0gTlVMTDsKKworICAgICAgaWYgKCFleHRlbnNpb25zKSB7CisgICAgICAgIGNvbnN0IGNoYXIgKnN0cmluZyA9IGdldGVudigiUEFUSEVYVCIpOworCisgICAgICAgIHsKKyAgICAgICAgICBzdGF0aWMgY2hhciAqbm9FeHRlbnNpb25zW10gPSB7TlVMTH07CisKKyAgICAgICAgICBleHRlbnNpb25zID0gbm9FeHRlbnNpb25zOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHN0cmluZykgeworICAgICAgICAgIGNoYXIgKipzdHJpbmdzID0gc3BsaXRTdHJpbmcoc3RyaW5nLCAnOycsIE5VTEwpOworCisgICAgICAgICAgaWYgKHN0cmluZ3MpIGV4dGVuc2lvbnMgPSBzdHJpbmdzOworICAgICAgICB9CisgICAgICB9CisKKyAgICAgIHsKKyAgICAgICAgY2hhciAqKnggPSBleHRlbnNpb25zOworCisgICAgICAgIHdoaWxlICgqeCkgeworICAgICAgICAgIGlmIChzdHJjYXNlY21wKCp4LCBleHRlbnNpb24pID09IDApIHJldHVybiAxOworICAgICAgICAgIHggKz0gMTsKKyAgICAgICAgfQorICAgICAgfQorICAgIH0KKyAgfQorCisgIHJldHVybiAwOworCisjZWxpZiBkZWZpbmVkKFhfT0spCisgIHJldHVybiBhY2Nlc3MocGF0aCwgWF9PSykgIT0gLTE7CisKKyNlbHNlIC8qIFhfT0sgKi8KKyAgZXJybm8gPSBFTk9TWVM7CisgIHJldHVybiAwOworI2VuZGlmIC8qIFhfT0sgKi8KK30KKworaW50Cit0ZXN0RGlyZWN0b3J5UGF0aCAoY29uc3QgY2hhciAqcGF0aCkgeworI2lmZGVmIFNfSVNESVIKKyAgc3RydWN0IHN0YXQgc3RhdHVzOworCisgIGlmIChzdGF0KHBhdGgsICZzdGF0dXMpICE9IC0xKSB7CisgICAgaWYgKFNfSVNESVIoc3RhdHVzLnN0X21vZGUpKSByZXR1cm4gMTsKKyAgICBlcnJubyA9IEVFWElTVDsKKyAgfQorI2Vsc2UgLyogU19JU0RJUiAqLworICBlcnJubyA9IEVOT1NZUzsKKyNlbmRpZiAvKiBTX0lTRElSICovCisKKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBMb2NrRGVzY3JpcHRvciAqCitnZXRVbWFza0xvY2sgKHZvaWQpIHsKKyAgc3RhdGljIExvY2tEZXNjcmlwdG9yICpsb2NrID0gTlVMTDsKKyAgcmV0dXJuIGdldExvY2tEZXNjcmlwdG9yKCZsb2NrLCAidW1hc2siKTsKK30KKwordm9pZAorbG9ja1VtYXNrICh2b2lkKSB7CisgIG9idGFpbkV4Y2x1c2l2ZUxvY2soZ2V0VW1hc2tMb2NrKCkpOworfQorCit2b2lkCit1bmxvY2tVbWFzayAodm9pZCkgeworICByZWxlYXNlTG9jayhnZXRVbWFza0xvY2soKSk7Cit9CisKK2ludAorY3JlYXRlRGlyZWN0b3J5IChjb25zdCBjaGFyICpwYXRoLCBpbnQgd29ybGRXcml0YWJsZSkgeworI2lmIGRlZmluZWQoR1JVQl9SVU5USU1FKQorICBlcnJubyA9IEVST0ZTOworCisjZWxzZSAvKiBtYWtlIGRpcmVjdG9yeSAqLworI2lmZGVmIF9fTUlOR1czMl9fCisgIGlmIChta2RpcihwYXRoKSAhPSAtMSkgcmV0dXJuIDE7CisjZWxzZSAvKiBfX01JTkdXMzJfXyAqLworICBsb2NrVW1hc2soKTsKKyAgaW50IGNyZWF0ZWQgPSBta2RpcihwYXRoLCAoU19JUldYVSB8IFNfSVJXWEcgfCBTX0lST1RIIHwgU19JWE9USCkpICE9IC0xOworICB1bmxvY2tVbWFzaygpOworCisgIGlmIChjcmVhdGVkKSB7CisgICAgaWYgKCF3b3JsZFdyaXRhYmxlKSByZXR1cm4gMTsKKyAgICBtb2RlX3QgbW9kZSA9IDA7CisKKyAgICAjaWZkZWYgU19JUldYVQorICAgIG1vZGUgfD0gU19JUldYVTsKKyAgICAjZW5kaWYgLyogU19JUldYVSAqLworCisgICAgI2lmZGVmIFNfSVJXWEcKKyAgICBtb2RlIHw9IFNfSVJXWEc7CisgICAgI2VuZGlmIC8qIFNfSVJXWEcgKi8KKworICAgICNpZmRlZiBTX0lSV1hPCisgICAgbW9kZSB8PSBTX0lSV1hPOworICAgICNlbmRpZiAvKiBTX0lSV1hPICovCisKKyAgICAjaWZkZWYgU19JU1ZUWAorICAgIG1vZGUgfD0gU19JU1ZUWDsKKyAgICAjZW5kaWYgLyogU19JU1ZUWCAqLworCisgICAgeworICAgICAgbG9ja1VtYXNrKCk7CisgICAgICBpbnQgY2hhbmdlZCA9IGNobW9kKHBhdGgsIG1vZGUpICE9IC0xOworICAgICAgdW5sb2NrVW1hc2soKTsKKyAgICAgIGlmIChjaGFuZ2VkKSByZXR1cm4gMTsKKyAgICB9CisKKyAgICBsb2dNZXNzYWdlKExPR19XQVJOSU5HLAorICAgICAgIiVzOiAlczogJXMiLAorICAgICAgZ2V0dGV4dCgiY2Fubm90IG1ha2Ugd29ybGQgd3JpdGFibGUiKSwKKyAgICAgIHBhdGgsIHN0cmVycm9yKGVycm5vKQorICAgICk7CisKKyAgICByZXR1cm4gMDsKKyAgfQorI2VuZGlmIC8qIF9fTUlOR1czMl9fICovCisjZW5kaWYgLyogbWFrZSBkaXJlY3RvcnkgKi8KKworICBsb2dNZXNzYWdlKExPR19XQVJOSU5HLAorICAgICIlczogJXM6ICVzIiwKKyAgICBnZXR0ZXh0KCJjYW5ub3QgY3JlYXRlIGRpcmVjdG9yeSIpLAorICAgIHBhdGgsIHN0cmVycm9yKGVycm5vKQorICApOworCisgIHJldHVybiAwOworfQorCitpbnQKK2Vuc3VyZURpcmVjdG9yeSAoY29uc3QgY2hhciAqcGF0aCwgaW50IHdvcmxkV3JpdGFibGUpIHsKKyAgaWYgKHRlc3REaXJlY3RvcnlQYXRoKHBhdGgpKSByZXR1cm4gMTsKKworICBpZiAoZXJybm8gPT0gRUVYSVNUKSB7CisgICAgbG9nTWVzc2FnZShMT0dfRVJSLCAibm90IGEgZGlyZWN0b3J5OiAlcyIsIHBhdGgpOworICB9IGVsc2UgaWYgKGVycm5vICE9IEVOT0VOVCkgeworICAgIGxvZ01lc3NhZ2UoTE9HX0VSUiwgImNhbm5vdCBhY2Nlc3MgZGlyZWN0b3J5OiAlczogJXMiLCBwYXRoLCBzdHJlcnJvcihlcnJubykpOworICB9IGVsc2UgeworICAgIHsKKyAgICAgIGNoYXIgKnBhcmVudCA9IGdldFBhdGhEaXJlY3RvcnkocGF0aCk7CisgICAgICBpZiAoIXBhcmVudCkgcmV0dXJuIDA7CisgICAgICBpbnQgZXhpc3RzID0gMDsKKworICAgICAgaWYgKHN0cmNtcChwYXJlbnQsIHBhdGgpICE9IDApIHsKKyAgICAgICAgZXhpc3RzID0gZW5zdXJlRGlyZWN0b3J5KHBhcmVudCwgMCk7CisgICAgICB9CisKKyAgICAgIGZyZWUocGFyZW50KTsKKyAgICAgIGlmICghZXhpc3RzKSByZXR1cm4gMDsKKyAgICB9CisKKyAgICBpZiAoY3JlYXRlRGlyZWN0b3J5KHBhdGgsIHdvcmxkV3JpdGFibGUpKSB7CisgICAgICBsb2dNZXNzYWdlKExPR19OT1RJQ0UsICJkaXJlY3RvcnkgY3JlYXRlZDogJXMiLCBwYXRoKTsKKyAgICAgIHJldHVybiAxOworICAgIH0KKyAgfQorCisgIHJldHVybiAwOworfQorCitpbnQKK2Vuc3VyZVBhdGhEaXJlY3RvcnkgKGNvbnN0IGNoYXIgKnBhdGgpIHsKKyAgY2hhciAqZGlyZWN0b3J5ID0gZ2V0UGF0aERpcmVjdG9yeShwYXRoKTsKKyAgaWYgKCFkaXJlY3RvcnkpIHJldHVybiAwOworCisgIHsKKyAgICBpbnQgZXhpc3RzID0gZW5zdXJlRGlyZWN0b3J5KGRpcmVjdG9yeSwgMCk7CisgICAgZnJlZShkaXJlY3RvcnkpOworICAgIHJldHVybiBleGlzdHM7CisgIH0KK30KKworc3RhdGljIHZvaWQKK3NldERpcmVjdG9yeSAoY29uc3QgY2hhciAqKnZhcmlhYmxlLCBjb25zdCBjaGFyICpkaXJlY3RvcnkpIHsKKyAgKnZhcmlhYmxlID0gZGlyZWN0b3J5OworfQorCitzdGF0aWMgY29uc3QgY2hhciAqCitnZXREaXJlY3RvcnkgKGNvbnN0IGNoYXIgKmNvbnN0ICp2YXJpYWJsZSkgeworICBpZiAoKnZhcmlhYmxlICYmICoqdmFyaWFibGUpIHsKKyAgICBpZiAoZW5zdXJlRGlyZWN0b3J5KCp2YXJpYWJsZSwgMCkpIHsKKyAgICAgIHJldHVybiAqdmFyaWFibGU7CisgICAgfQorICB9CisKKyAgcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBjaGFyICoKK21ha2VEaXJlY3RvcnlQYXRoIChjb25zdCBjaGFyICpjb25zdCAqdmFyaWFibGUsIGNvbnN0IGNoYXIgKmZpbGUpIHsKKyAgY29uc3QgY2hhciAqZGlyZWN0b3J5ID0gZ2V0RGlyZWN0b3J5KHZhcmlhYmxlKTsKKyAgaWYgKGRpcmVjdG9yeSkgcmV0dXJuIG1ha2VQYXRoKGRpcmVjdG9yeSwgZmlsZSk7CisgIHJldHVybiBOVUxMOworfQorCitzdGF0aWMgY29uc3QgY2hhciAqdXBkYXRhYmxlRGlyZWN0b3J5ID0gTlVMTDsKKwordm9pZAorc2V0VXBkYXRhYmxlRGlyZWN0b3J5IChjb25zdCBjaGFyICpkaXJlY3RvcnkpIHsKKyAgc2V0RGlyZWN0b3J5KCZ1cGRhdGFibGVEaXJlY3RvcnksIGRpcmVjdG9yeSk7Cit9CisKK2NvbnN0IGNoYXIgKgorZ2V0VXBkYXRhYmxlRGlyZWN0b3J5ICh2b2lkKSB7CisgIHJldHVybiBnZXREaXJlY3RvcnkoJnVwZGF0YWJsZURpcmVjdG9yeSk7Cit9CisKK2NoYXIgKgorbWFrZVVwZGF0YWJsZVBhdGggKGNvbnN0IGNoYXIgKmZpbGUpIHsKKyAgcmV0dXJuIG1ha2VEaXJlY3RvcnlQYXRoKCZ1cGRhdGFibGVEaXJlY3RvcnksIGZpbGUpOworfQorCitzdGF0aWMgY29uc3QgY2hhciAqd3JpdGFibGVEaXJlY3RvcnkgPSBOVUxMOworCit2b2lkCitzZXRXcml0YWJsZURpcmVjdG9yeSAoY29uc3QgY2hhciAqZGlyZWN0b3J5KSB7CisgIHNldERpcmVjdG9yeSgmd3JpdGFibGVEaXJlY3RvcnksIGRpcmVjdG9yeSk7Cit9CisKK2NvbnN0IGNoYXIgKgorZ2V0V3JpdGFibGVEaXJlY3RvcnkgKHZvaWQpIHsKKyAgcmV0dXJuIGdldERpcmVjdG9yeSgmd3JpdGFibGVEaXJlY3RvcnkpOworfQorCitjaGFyICoKK21ha2VXcml0YWJsZVBhdGggKGNvbnN0IGNoYXIgKmZpbGUpIHsKKyAgcmV0dXJuIG1ha2VEaXJlY3RvcnlQYXRoKCZ3cml0YWJsZURpcmVjdG9yeSwgZmlsZSk7Cit9CisKK2NoYXIgKgorZ2V0V29ya2luZ0RpcmVjdG9yeSAodm9pZCkgeworI2lmIGRlZmluZWQoR1JVQl9SVU5USU1FKQorICBlcnJubyA9IEVOT1NZUzsKKyNlbHNlIC8qIGdldCB3b3JraW5nIGRpcmVjdG9yeSAqLworICBzaXplX3Qgc2l6ZSA9IDBYODA7CisgIGNoYXIgKmJ1ZmZlciA9IE5VTEw7CisKKyAgd2hpbGUgKDEpIHsKKyAgICB7CisgICAgICBjaGFyICpuZXdCdWZmZXIgPSByZWFsbG9jKGJ1ZmZlciwgc2l6ZTw8PTEpOworCisgICAgICBpZiAoIW5ld0J1ZmZlcikgeworICAgICAgICBsb2dNYWxsb2NFcnJvcigpOworICAgICAgICBicmVhazsKKyAgICAgIH0KKworICAgICAgYnVmZmVyID0gbmV3QnVmZmVyOworICAgIH0KKworICAgIGlmIChnZXRjd2QoYnVmZmVyLCBzaXplKSkgcmV0dXJuIGJ1ZmZlcjsKKworICAgIGlmIChlcnJubyAhPSBFUkFOR0UpIHsKKyAgICAgIGxvZ1N5c3RlbUVycm9yKCJnZXRjd2QiKTsKKyAgICAgIGJyZWFrOworICAgIH0KKyAgfQorCisgIGlmIChidWZmZXIpIGZyZWUoYnVmZmVyKTsKKyNlbmRpZiAvKiBnZXQgd29ya2luZyBkaXJlY3RvcnkgKi8KKworICBsb2dNZXNzYWdlKExPR19XQVJOSU5HLCAiJXM6ICVzIiwKKyAgICAgICAgICAgICBnZXR0ZXh0KCJjYW5ub3QgZ2V0IHdvcmtpbmcgZGlyZWN0b3J5IiksCisgICAgICAgICAgICAgc3RyZXJyb3IoZXJybm8pKTsKKyAgcmV0dXJuIE5VTEw7Cit9CisKK2ludAorc2V0V29ya2luZ0RpcmVjdG9yeSAoY29uc3QgY2hhciAqcGF0aCkgeworI2lmIGRlZmluZWQoR1JVQl9SVU5USU1FKQorICBlcnJubyA9IEVOT1NZUzsKKyNlbHNlIC8qIHNldCB3b3JraW5nIGRpcmVjdG9yeSAqLworICBpZiAoY2hkaXIocGF0aCkgIT0gLTEpIHJldHVybiAxOworI2VuZGlmIC8qIHNldCB3b3JraW5nIGRpcmVjdG9yeSAqLworCisgIGxvZ01lc3NhZ2UoTE9HX1dBUk5JTkcsICIlczogJXM6ICVzIiwKKyAgICAgICAgICAgICBnZXR0ZXh0KCJjYW5ub3Qgc2V0IHdvcmtpbmcgZGlyZWN0b3J5IiksCisgICAgICAgICAgICAgcGF0aCwgc3RyZXJyb3IoZXJybm8pKTsKKyAgcmV0dXJuIDA7Cit9CisKK2NoYXIgKgorZ2V0SG9tZURpcmVjdG9yeSAodm9pZCkgeworI2lmIGRlZmluZWQoR1JVQl9SVU5USU1FKQorI2Vsc2UgLyogZ2V0IGhvbWUgZGlyZWN0b3J5ICovCisgIGNoYXIgKnBhdGggPSBnZXRlbnYoIkhPTUUiKTsKKworICBpZiAocGF0aCAmJiAqcGF0aCkgeworICAgIGlmICgocGF0aCA9IHN0cmR1cChwYXRoKSkpIHJldHVybiBwYXRoOworICAgIGxvZ01hbGxvY0Vycm9yKCk7CisgIH0KKyNlbmRpZiAvKiBnZXQgaG9tZSBkaXJlY3RvcnkgKi8KKworICByZXR1cm4gTlVMTDsKK30KKworc3RhdGljIGNoYXIgKgorbWFrZU92ZXJyaWRlUGF0aCAoY29uc3QgY2hhciAqYmFzZSwgaW50IHhkZykgeworICByZXR1cm4gbWFrZVBhdGgoYmFzZSwgKHhkZz8gUEFDS0FHRV9UQVJOQU1FOiAoQ1VSUkVOVF9ESVJFQ1RPUllfTkFNRSBQQUNLQUdFX1RBUk5BTUUpKSk7Cit9CisKK3N0YXRpYyBpbnQKK2FkZE92ZXJyaWRlUGF0aCAoY2hhciAqKnBhdGhzLCBzaXplX3QgKmluZGV4LCBjb25zdCBjaGFyICpiYXNlLCBpbnQgeGRnKSB7CisgIGNoYXIgKnBhdGggPSBtYWtlT3ZlcnJpZGVQYXRoKGJhc2UsIHhkZyk7CisgIGlmICghcGF0aCkgcmV0dXJuIDA7CisKKyAgbG9nTWVzc2FnZShMT0dfREVCVUcsICJvdmVycmlkZSBkaXJlY3Rvcnk6ICVzIiwgcGF0aCk7CisgIHBhdGhzWygqaW5kZXgpKytdID0gcGF0aDsKKyAgcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBjaGFyICoqb3ZlcnJpZGVEaXJlY3RvcmllcyA9IE5VTEw7CisKK2NvbnN0IGNoYXIgKmNvbnN0ICoKK2dldEFsbE92ZXJyaWRlRGlyZWN0b3JpZXMgKHZvaWQpIHsKKyAgaWYgKCFvdmVycmlkZURpcmVjdG9yaWVzKSB7CisgICAgbG9nTWVzc2FnZShMT0dfREVCVUcsICJkZXRlcm1pbmluZyBvdmVycmlkZSBkaXJlY3RvcmllcyIpOworCisgICAgY29uc3QgY2hhciAqc2Vjb25kYXJ5TGlzdCA9IGdldGVudigiWERHX0NPTkZJR19ESVJTIik7CisgICAgaW50IHNlY29uZGFyeUNvdW50OworICAgIGNoYXIgKipzZWNvbmRhcnlCYXNlcyA9IHNwbGl0U3RyaW5nKCgoc2Vjb25kYXJ5TGlzdCAmJiAqc2Vjb25kYXJ5TGlzdCk/IHNlY29uZGFyeUxpc3Q6ICIvZXRjL3hkZyIpLCAnOicsICZzZWNvbmRhcnlDb3VudCk7CisKKyAgICBpZiAoc2Vjb25kYXJ5QmFzZXMpIHsKKyAgICAgIHNpemVfdCBjb3VudCA9IDEgKyBzZWNvbmRhcnlDb3VudCArIDE7CisgICAgICBjaGFyICoqcGF0aHM7CisKKyAgICAgIGlmICgocGF0aHMgPSBtYWxsb2Moc2l6ZW9mKCpwYXRocykgKiAoY291bnQgKyAxKSkpKSB7CisgICAgICAgIHNpemVfdCBpbmRleCA9IDA7CisKKyAgICAgICAgeworICAgICAgICAgIGNvbnN0IGNoYXIgKnByaW1hcnkgPSBnZXRlbnYoIlhER19DT05GSUdfSE9NRSIpOworCisgICAgICAgICAgaWYgKHByaW1hcnkgJiYgKnByaW1hcnkpIHsKKyAgICAgICAgICAgIGlmICghYWRkT3ZlcnJpZGVQYXRoKHBhdGhzLCAmaW5kZXgsIHByaW1hcnksIDEpKSBnb3RvIGRvbmU7CisgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGNoYXIgKmhvbWUgPSBnZXRIb21lRGlyZWN0b3J5KCk7CisKKyAgICAgICAgICAgIGlmIChob21lKSB7CisgICAgICAgICAgICAgIGNoYXIgKmJhc2UgPSAqaG9tZT8gbWFrZVBhdGgoaG9tZSwgIi5jb25maWciKTogTlVMTDsKKworICAgICAgICAgICAgICBmcmVlKGhvbWUpOworICAgICAgICAgICAgICBob21lID0gTlVMTDsKKworICAgICAgICAgICAgICBpZiAoYmFzZSkgeworICAgICAgICAgICAgICAgIGludCBhZGRlZCA9IGFkZE92ZXJyaWRlUGF0aChwYXRocywgJmluZGV4LCBiYXNlLCAxKTsKKworICAgICAgICAgICAgICAgIGZyZWUoYmFzZSk7CisgICAgICAgICAgICAgICAgYmFzZSA9IE5VTEw7CisKKyAgICAgICAgICAgICAgICBpZiAoIWFkZGVkKSBnb3RvIGRvbmU7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZiAoIWluZGV4KSB7CisgICAgICAgICAgY2hhciAqcHJpbWFyeSA9IHN0cmR1cCgiIik7CisKKyAgICAgICAgICBpZiAoIXByaW1hcnkpIHsKKyAgICAgICAgICAgIGxvZ01hbGxvY0Vycm9yKCk7CisgICAgICAgICAgICBnb3RvIGRvbmU7CisgICAgICAgICAgfQorCisgICAgICAgICAgcGF0aHNbaW5kZXgrK10gPSBwcmltYXJ5OworICAgICAgICB9CisKKyAgICAgICAgeworICAgICAgICAgIGNoYXIgKipiYXNlID0gc2Vjb25kYXJ5QmFzZXM7CisKKyAgICAgICAgICB3aGlsZSAoKmJhc2UpIHsKKyAgICAgICAgICAgIGlmICgqKmJhc2UpIHsKKyAgICAgICAgICAgICAgaWYgKCFhZGRPdmVycmlkZVBhdGgocGF0aHMsICZpbmRleCwgKmJhc2UsIDEpKSB7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgIGNvdW50IC09IDE7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGJhc2UgKz0gMTsKKyAgICAgICAgICB9CisKKyAgICAgICAgICBpZiAoKmJhc2UpIGdvdG8gZG9uZTsKKyAgICAgICAgfQorCisgICAgICAgIHsKKyAgICAgICAgICBpbnQgYWRkZWQgPSAwOworICAgICAgICAgIGNoYXIgKmhvbWUgPSBnZXRIb21lRGlyZWN0b3J5KCk7CisKKyAgICAgICAgICBpZiAoaG9tZSAmJiAqaG9tZSkgeworICAgICAgICAgICAgaWYgKGFkZE92ZXJyaWRlUGF0aChwYXRocywgJmluZGV4LCBob21lLCAwKSkgYWRkZWQgPSAxOworICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBjaGFyICpjdXJyZW50ID0gZ2V0V29ya2luZ0RpcmVjdG9yeSgpOworCisgICAgICAgICAgICBpZiAoY3VycmVudCkgeworICAgICAgICAgICAgICBpZiAoYWRkT3ZlcnJpZGVQYXRoKHBhdGhzLCAmaW5kZXgsIGN1cnJlbnQsIDApKSBhZGRlZCA9IDE7CisgICAgICAgICAgICAgIGZyZWUoY3VycmVudCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgfQorCisgICAgICAgICAgaWYgKGhvbWUpIGZyZWUoaG9tZSk7CisgICAgICAgICAgaWYgKCFhZGRlZCkgZ290byBkb25lOworICAgICAgICB9CisKK2RvbmU6CisgICAgICAgIHBhdGhzW2luZGV4XSA9IE5VTEw7CisKKyAgICAgICAgaWYgKGluZGV4ID09IGNvdW50KSB7CisgICAgICAgICAgb3ZlcnJpZGVEaXJlY3RvcmllcyA9IHBhdGhzOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgIGRlYWxsb2NhdGVTdHJpbmdzKHBhdGhzKTsKKyAgICAgICAgfQorICAgICAgfSBlbHNlIHsKKyAgICAgICAgbG9nTWFsbG9jRXJyb3IoKTsKKyAgICAgIH0KKworICAgICAgZGVhbGxvY2F0ZVN0cmluZ3Moc2Vjb25kYXJ5QmFzZXMpOworICAgIH0KKworICAgIGlmICghb3ZlcnJpZGVEaXJlY3RvcmllcykgbG9nTWVzc2FnZShMT0dfV0FSTklORywgIm5vIG92ZXJyaWRlIGRpcmVjdG9yaWVzIik7CisgIH0KKworICByZXR1cm4gKGNvbnN0IGNoYXIgKmNvbnN0ICopb3ZlcnJpZGVEaXJlY3RvcmllczsKK30KKworY29uc3QgY2hhciAqCitnZXRQcmltYXJ5T3ZlcnJpZGVEaXJlY3RvcnkgKHZvaWQpIHsKKyAgY29uc3QgY2hhciAqY29uc3QgKmRpcmVjdG9yaWVzID0gZ2V0QWxsT3ZlcnJpZGVEaXJlY3RvcmllcygpOworCisgIGlmIChkaXJlY3RvcmllcykgeworICAgIGNvbnN0IGNoYXIgKmRpcmVjdG9yeSA9IGRpcmVjdG9yaWVzWzBdOworCisgICAgaWYgKGRpcmVjdG9yeSAmJiAqZGlyZWN0b3J5KSByZXR1cm4gZGlyZWN0b3J5OworICB9CisKKyAgbG9nTWVzc2FnZShMT0dfV0FSTklORywgIm5vIHByaW1hcnkgb3ZlcnJpZGUgZGlyZWN0b3J5Iik7CisgIHJldHVybiBOVUxMOworfQorCit2b2lkCitmb3JnZXRPdmVycmlkZURpcmVjdG9yaWVzICh2b2lkKSB7CisgIGlmIChvdmVycmlkZURpcmVjdG9yaWVzKSB7CisgICAgbG9nTWVzc2FnZShMT0dfREVCVUcsICJmb3JnZXR0aW5nIG92ZXJyaWRlIGRpcmVjdG9yaWVzIik7CisgICAgZGVhbGxvY2F0ZVN0cmluZ3Mob3ZlcnJpZGVEaXJlY3Rvcmllcyk7CisgICAgb3ZlcnJpZGVEaXJlY3RvcmllcyA9IE5VTEw7CisgIH0KK30KKworI2lmIGRlZmluZWQoRl9TRVRMSykKK3N0YXRpYyBpbnQKK21vZGlmeUZpbGVMb2NrIChpbnQgZmlsZSwgaW50IGFjdGlvbiwgc2hvcnQgdHlwZSkgeworICBzdHJ1Y3QgZmxvY2sgbG9jazsKKworICBtZW1zZXQoJmxvY2ssIDAsIHNpemVvZihsb2NrKSk7CisgIGxvY2subF90eXBlID0gdHlwZTsKKyAgbG9jay5sX3doZW5jZSA9IFNFRUtfU0VUOworICBsb2NrLmxfc3RhcnQgPSAwOworICBsb2NrLmxfbGVuID0gMDsKKworICBkbyB7CisgICAgaWYgKGZjbnRsKGZpbGUsIGFjdGlvbiwgJmxvY2spICE9IC0xKSByZXR1cm4gMTsKKyAgfSB3aGlsZSAoZXJybm8gPT0gRUlOVFIpOworCisgIGlmIChlcnJubyA9PSBFQUNDRVMpIGVycm5vID0gRUFHQUlOOworICBpZiAoZXJybm8gIT0gRUFHQUlOKSBsb2dTeXN0ZW1FcnJvcigiZmNudGxbc3RydWN0IGZsb2NrICpdIik7CisgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50Citsb2NrRmlsZSAoaW50IGZpbGUsIGludCBleGNsdXNpdmUsIGludCB3YWl0KSB7CisgIHJldHVybiBtb2RpZnlGaWxlTG9jayhmaWxlLCAod2FpdD8gRl9TRVRMS1c6IEZfU0VUTEspLCAoZXhjbHVzaXZlPyBGX1dSTENLOiBGX1JETENLKSk7Cit9CisKK2ludAorYWNxdWlyZUZpbGVMb2NrIChpbnQgZmlsZSwgaW50IGV4Y2x1c2l2ZSkgeworICByZXR1cm4gbG9ja0ZpbGUoZmlsZSwgZXhjbHVzaXZlLCAxKTsKK30KKworaW50CithdHRlbXB0RmlsZUxvY2sgKGludCBmaWxlLCBpbnQgZXhjbHVzaXZlKSB7CisgIHJldHVybiBsb2NrRmlsZShmaWxlLCBleGNsdXNpdmUsIDApOworfQorCitpbnQKK3JlbGVhc2VGaWxlTG9jayAoaW50IGZpbGUpIHsKKyAgcmV0dXJuIG1vZGlmeUZpbGVMb2NrKGZpbGUsIEZfU0VUTEssIEZfVU5MQ0spOworfQorCisjZWxpZiBkZWZpbmVkKExPQ0tfRVgpCitzdGF0aWMgaW50Cittb2RpZnlGaWxlTG9jayAoaW50IGZpbGUsIGludCBvcGVyYXRpb24pIHsKKyAgZG8geworICAgIGlmIChmbG9jayhmaWxlLCBvcGVyYXRpb24pICE9IC0xKSByZXR1cm4gMTsKKyAgfSB3aGlsZSAoZXJybm8gPT0gRUlOVFIpOworCisjaWZkZWYgRVdPVUxEQkxPQ0sKKyAgaWYgKGVycm5vID09IEVXT1VMREJMT0NLKSBlcnJubyA9IEVBR0FJTjsKKyNlbmRpZiAvKiBFV09VTERCTE9DSyAqLworCisgIGlmIChlcnJubyA9PSBFQUNDRVMpIGVycm5vID0gRUFHQUlOOworICBpZiAoZXJybm8gIT0gRUFHQUlOKSBsb2dTeXN0ZW1FcnJvcigiZmxvY2siKTsKKyAgcmV0dXJuIDA7Cit9CisKK2ludAorYWNxdWlyZUZpbGVMb2NrIChpbnQgZmlsZSwgaW50IGV4Y2x1c2l2ZSkgeworICByZXR1cm4gbW9kaWZ5RmlsZUxvY2soZmlsZSwgKGV4Y2x1c2l2ZT8gTE9DS19FWDogTE9DS19TSCkpOworfQorCitpbnQKK2F0dGVtcHRGaWxlTG9jayAoaW50IGZpbGUsIGludCBleGNsdXNpdmUpIHsKKyAgcmV0dXJuIG1vZGlmeUZpbGVMb2NrKGZpbGUsICgoZXhjbHVzaXZlPyBMT0NLX0VYOiBMT0NLX1NIKSB8IExPQ0tfTkIpKTsKK30KKworaW50CityZWxlYXNlRmlsZUxvY2sgKGludCBmaWxlKSB7CisgIHJldHVybiBtb2RpZnlGaWxlTG9jayhmaWxlLCBMT0NLX1VOKTsKK30KKworI2VsaWYgZGVmaW5lZChGX0xPQ0spCitzdGF0aWMgaW50Cittb2RpZnlSZWdpb25Mb2NrIChpbnQgZmlsZSwgaW50IGNvbW1hbmQsIG9mZl90IGxlbmd0aCkgeworICBkbyB7CisgICAgaWYgKGxvY2tmKGZpbGUsIGNvbW1hbmQsIGxlbmd0aCkgIT0gLTEpIHJldHVybiAxOworICB9IHdoaWxlIChlcnJubyA9PSBFSU5UUik7CisKKyAgaWYgKGVycm5vID09IEVBQ0NFUykgZXJybm8gPSBFQUdBSU47CisgIGlmIChlcnJubyAhPSBFQUdBSU4pIGxvZ1N5c3RlbUVycm9yKCJsb2NrZiIpOworICByZXR1cm4gMDsKK30KKworc3RhdGljIGludAorbW9kaWZ5RmlsZUxvY2sgKGludCBmaWxlLCBpbnQgY29tbWFuZCkgeworICBvZmZfdCBvZmZzZXQ7CisKKyAgaWYgKChvZmZzZXQgPSBsc2VlayhmaWxlLCAwLCBTRUVLX0NVUikpID09IC0xKSB7CisgICAgbG9nU3lzdGVtRXJyb3IoImxzZWVrIik7CisgIH0gZWxzZSBpZiAobW9kaWZ5UmVnaW9uTG9jayhmaWxlLCBjb21tYW5kLCAwKSkgeworICAgIGlmICghb2Zmc2V0KSByZXR1cm4gMTsKKyAgICBpZiAobW9kaWZ5UmVnaW9uTG9jayhmaWxlLCBjb21tYW5kLCAtb2Zmc2V0KSkgcmV0dXJuIDE7CisgIH0KKworICByZXR1cm4gMDsKK30KKworaW50CithY3F1aXJlRmlsZUxvY2sgKGludCBmaWxlLCBpbnQgZXhjbHVzaXZlKSB7CisgIHJldHVybiBtb2RpZnlGaWxlTG9jayhmaWxlLCBGX0xPQ0spOworfQorCitpbnQKK2F0dGVtcHRGaWxlTG9jayAoaW50IGZpbGUsIGludCBleGNsdXNpdmUpIHsKKyAgcmV0dXJuIG1vZGlmeUZpbGVMb2NrKGZpbGUsIEZfVExPQ0spOworfQorCitpbnQKK3JlbGVhc2VGaWxlTG9jayAoaW50IGZpbGUpIHsKKyAgcmV0dXJuIG1vZGlmeUZpbGVMb2NrKGZpbGUsIEZfVUxPQ0spOworfQorCisjZWxpZiBkZWZpbmVkKF9fTUlOR1czMl9fKQorI2luY2x1ZGUgPGlvLmg+CisjaW5jbHVkZSA8c3lzL2xvY2tpbmcuaD4KKyNpbmNsdWRlIDxsaW1pdHMuaD4KKworc3RhdGljIGludAorbW9kaWZ5RmlsZUxvY2sgKGludCBmaWxlLCBpbnQgbW9kZSkgeworICBpbnQgb2sgPSAwOworICBvZmZfdCBvZmZzZXQ7CisKKyAgaWYgKChvZmZzZXQgPSBsc2VlayhmaWxlLCAwLCBTRUVLX0NVUikpICE9IC0xKSB7CisgICAgaWYgKGxzZWVrKGZpbGUsIDAsIFNFRUtfU0VUKSAhPSAtMSkgeworICAgICAgaW50IHdhaXQ7CisKKyAgICAgIGlmIChtb2RlID09IF9MS19MT0NLKSB7CisgICAgICAgIG1vZGUgPSBfTEtfTkJMQ0s7CisgICAgICAgIHdhaXQgPSAxOworICAgICAgfSBlbHNlIGlmIChtb2RlID09IF9MS19STENLKSB7CisgICAgICAgIG1vZGUgPSBfTEtfTkJSTENLOworICAgICAgICB3YWl0ID0gMTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIHdhaXQgPSAwOworICAgICAgfQorCisgICAgICB3aGlsZSAoMSkgeworICAgICAgICBpZiAoX2xvY2tpbmcoZmlsZSwgbW9kZSwgTE9OR19NQVgpICE9IC0xKSB7CisgICAgICAgICAgb2sgPSAxOworICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGVycm5vICE9IEVBQ0NFUykgeworICAgICAgICAgIGxvZ1N5c3RlbUVycm9yKCJfbG9ja2luZyIpOworICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCF3YWl0KSBicmVhazsKKyAgICAgICAgYXN5bmNXYWl0KFdJTkRPV1NfRklMRV9MT0NLX1JFVFJZX0lOVEVSVkFMKTsKKyAgICAgIH0KKworICAgICAgaWYgKGxzZWVrKGZpbGUsIG9mZnNldCwgU0VFS19TRVQpID09IC0xKSB7CisgICAgICAgIGxvZ1N5c3RlbUVycm9yKCJsc2VlayIpOworICAgICAgICBvayA9IDA7CisgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgIGxvZ1N5c3RlbUVycm9yKCJsc2VlayIpOworICAgIH0KKyAgfSBlbHNlIHsKKyAgICBsb2dTeXN0ZW1FcnJvcigibHNlZWsiKTsKKyAgfQorCisgIHJldHVybiBvazsKK30KKworaW50CithY3F1aXJlRmlsZUxvY2sgKGludCBmaWxlLCBpbnQgZXhjbHVzaXZlKSB7CisgIHJldHVybiBtb2RpZnlGaWxlTG9jayhmaWxlLCAoZXhjbHVzaXZlPyBfTEtfTE9DSzogX0xLX1JMQ0spKTsKK30KKworaW50CithdHRlbXB0RmlsZUxvY2sgKGludCBmaWxlLCBpbnQgZXhjbHVzaXZlKSB7CisgIHJldHVybiBtb2RpZnlGaWxlTG9jayhmaWxlLCAoZXhjbHVzaXZlPyBfTEtfTkJMQ0s6IF9MS19OQlJMQ0spKTsKK30KKworaW50CityZWxlYXNlRmlsZUxvY2sgKGludCBmaWxlKSB7CisgIHJldHVybiBtb2RpZnlGaWxlTG9jayhmaWxlLCBfTEtfVU5MQ0spOworfQorCisjZWxzZSAvKiBmaWxlIGxvY2tpbmcgKi8KKyN3YXJuaW5nIGZpbGUgbG9jayBzdXBwb3J0IG5vdCBhdmFpbGFibGUgb24gdGhpcyBwbGF0Zm9ybQorCitpbnQKK2FjcXVpcmVGaWxlTG9jayAoaW50IGZpbGUsIGludCBleGNsdXNpdmUpIHsKKyAgbG9nVW5zdXBwb3J0ZWRGdW5jdGlvbigpOworICByZXR1cm4gMDsKK30KKworaW50CithdHRlbXB0RmlsZUxvY2sgKGludCBmaWxlLCBpbnQgZXhjbHVzaXZlKSB7CisgIGxvZ1Vuc3VwcG9ydGVkRnVuY3Rpb24oKTsKKyAgcmV0dXJuIDA7Cit9CisKK2ludAorcmVsZWFzZUZpbGVMb2NrIChpbnQgZmlsZSkgeworICBsb2dVbnN1cHBvcnRlZEZ1bmN0aW9uKCk7CisgIHJldHVybiAwOworfQorI2VuZGlmIC8qIGZpbGUgbG9ja2luZyAqLworCitzdGF0aWMgdm9pZAorZXhpdFByb2dyYW1TdHJlYW0gKHZvaWQgKmRhdGEpIHsKKyAgRklMRSAqKnN0cmVhbSA9IGRhdGE7CisKKyAgaWYgKCpzdHJlYW0pIHsKKyAgICBmY2xvc2UoKnN0cmVhbSk7CisgICAgKnN0cmVhbSA9IE5VTEw7CisgIH0KK30KKwordm9pZAorcmVnaXN0ZXJQcm9ncmFtU3RyZWFtIChjb25zdCBjaGFyICpuYW1lLCBGSUxFICoqc3RyZWFtKSB7CisgIG9uUHJvZ3JhbUV4aXQobmFtZSwgZXhpdFByb2dyYW1TdHJlYW0sIHN0cmVhbSk7Cit9CisKK0ZJTEUgKgorb3BlbkZpbGUgKGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IGNoYXIgKm1vZGUsIGludCBvcHRpb25hbCkgeworICBGSUxFICpmaWxlID0gZm9wZW4ocGF0aCwgbW9kZSk7CisKKyAgaWYgKGZpbGUpIHsKKyAgICBsb2dNZXNzYWdlKExPR19ERUJVRywgImZpbGUgb3BlbmVkOiAlcyBmZD0lZCIsIHBhdGgsIGZpbGVubyhmaWxlKSk7CisgIH0gZWxzZSB7CisgICAgbG9nTWVzc2FnZSgob3B0aW9uYWwgJiYgKGVycm5vID09IEVOT0VOVCkpPyBMT0dfREVCVUc6IExPR19FUlIsCisgICAgICAgICAgICAgICAiY2Fubm90IG9wZW4gZmlsZTogJXM6ICVzIiwgcGF0aCwgc3RyZXJyb3IoZXJybm8pKTsKKyAgfQorCisgIHJldHVybiBmaWxlOworfQorCitpbnQKK3JlYWRMaW5lIChGSUxFICpmaWxlLCBjaGFyICoqYnVmZmVyLCBzaXplX3QgKnNpemUsIHNpemVfdCAqbGVuZ3RoKSB7CisgIGNoYXIgKmxpbmU7CisKKyAgaWYgKGZlcnJvcihmaWxlKSkgcmV0dXJuIDA7CisgIGlmIChmZW9mKGZpbGUpKSByZXR1cm4gMDsKKworICBpZiAoISpzaXplKSB7CisgICAgaWYgKCEoKmJ1ZmZlciA9IG1hbGxvYygoKnNpemUgPSAwWDgwKSkpKSB7CisgICAgICBsb2dNYWxsb2NFcnJvcigpOworICAgICAgcmV0dXJuIDA7CisgICAgfQorICB9CisKKyAgaWYgKChsaW5lID0gZmdldHMoKmJ1ZmZlciwgKnNpemUsIGZpbGUpKSkgeworICAgIHNpemVfdCBjb3VudCA9IHN0cmxlbihsaW5lKTsgLyogTGluZSBsZW5ndGggaW5jbHVkaW5nIG5ldy1saW5lLiAqLworCisgICAgLyogTm8gdHJhaWxpbmcgbmV3LWxpbmUgbWVhbnMgdGhhdCB0aGUgYnVmZmVyIGlzbid0IGJpZyBlbm91Z2guICovCisgICAgd2hpbGUgKGxpbmVbY291bnQtMV0gIT0gJ1xuJykgeworICAgICAgLyogSWYgbmVjZXNzYXJ5LCBleHRlbmQgdGhlIGJ1ZmZlci4gKi8KKyAgICAgIGlmICgoKnNpemUgLSAoY291bnQgKyAxKSkgPT0gMCkgeworICAgICAgICBzaXplX3QgbmV3U2l6ZSA9ICpzaXplIDw8IDE7CisgICAgICAgIGNoYXIgKm5ld0J1ZmZlciA9IHJlYWxsb2MoKmJ1ZmZlciwgbmV3U2l6ZSk7CisKKyAgICAgICAgaWYgKCFuZXdCdWZmZXIpIHsKKyAgICAgICAgICBsb2dNYWxsb2NFcnJvcigpOworICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CisKKyAgICAgICAgKmJ1ZmZlciA9IG5ld0J1ZmZlcjsKKyAgICAgICAgKnNpemUgPSBuZXdTaXplOworICAgICAgfQorCisgICAgICAvKiBSZWFkIHRoZSByZXN0IG9mIHRoZSBsaW5lIGludG8gdGhlIGVuZCBvZiB0aGUgYnVmZmVyLiAqLworICAgICAgaWYgKCEobGluZSA9IGZnZXRzKCYoKmJ1ZmZlcilbY291bnRdLCAoKnNpemUgLWNvdW50KSwgZmlsZSkpKSB7CisgICAgICAgIGlmICghZmVycm9yKGZpbGUpKSBnb3RvIGRvbmU7CisgICAgICAgIGxvZ1N5c3RlbUVycm9yKCJmZ2V0cyIpOworICAgICAgICByZXR1cm4gMDsKKyAgICAgIH0KKworICAgICAgY291bnQgKz0gc3RybGVuKGxpbmUpOyAvKiBOZXcgdG90YWwgbGluZSBsZW5ndGguICovCisgICAgICBsaW5lID0gKmJ1ZmZlcjsgLyogUG9pbnQgdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgbGluZS4gKi8KKyAgICB9CisKKyAgICBpZiAoLS1jb3VudCA+IDApIHsKKyAgICAgIGlmIChsaW5lW2NvdW50LTFdID09ICdccicpIHsKKyAgICAgICAgY291bnQgLT0gMTsKKyAgICAgIH0KKyAgICB9CisKKyAgICBsaW5lW2NvdW50XSA9IDA7IC8qIFJlbW92ZSB0cmFpbGluZyBuZXctbGluZS4gKi8KKyAgZG9uZToKKyAgICBpZiAobGVuZ3RoKSAqbGVuZ3RoID0gY291bnQ7CisgICAgcmV0dXJuIDE7CisgIH0gZWxzZSBpZiAoZmVycm9yKGZpbGUpKSB7CisgICAgbG9nU3lzdGVtRXJyb3IoImZnZXRzIik7CisgIH0KKworICByZXR1cm4gMDsKK30KKworLyogUHJvY2VzcyBlYWNoIGxpbmUgb2YgYW4gaW5wdXQgdGV4dCBmaWxlIHNhZmVseS4KKyAqIFRoaXMgcm91dGluZSBoYW5kbGVzIHRoZSBhY3R1YWwgcmVhZGluZyBvZiB0aGUgZmlsZSwKKyAqIGluc3VyaW5nIHRoYXQgdGhlIGlucHV0IGJ1ZmZlciBpcyBhbHdheXMgYmlnIGVub3VnaCwKKyAqIGFuZCBjYWxscyBhIGNhbGxlci1zdXBwbGllZCBoYW5kbGVyIG9uY2UgZm9yIGVhY2ggbGluZSBpbiB0aGUgZmlsZS4KKyAqIFRoZSBjYWxsZXItc3VwcGxpZWQgZGF0YSBwb2ludGVyIGlzIHBhc3NlZCBzdHJhaWdodCB0aHJvdWdoIHRvIHRoZSBoYW5kbGVyLgorICovCitpbnQKK3Byb2Nlc3NMaW5lcyAoRklMRSAqZmlsZSwgTGluZUhhbmRsZXIgaGFuZGxlTGluZSwgdm9pZCAqZGF0YSkgeworICBjaGFyICpidWZmZXIgPSBOVUxMOworICBzaXplX3QgYnVmZmVyU2l6ZSA9IDA7CisKKyAgTGluZUhhbmRsZXJQYXJhbWV0ZXJzIHBhcmFtZXRlcnMgPSB7CisgICAgLmRhdGEgPSBkYXRhLAorCisgICAgLmxpbmUgPSB7CisgICAgICAubnVtYmVyID0gMCwKKyAgICB9LAorICB9OworCisgIHdoaWxlICgxKSB7CisgICAgcGFyYW1ldGVycy5saW5lLm51bWJlciArPSAxOworICAgIGlmICghcmVhZExpbmUoZmlsZSwgJmJ1ZmZlciwgJmJ1ZmZlclNpemUsICZwYXJhbWV0ZXJzLmxpbmUubGVuZ3RoKSkgYnJlYWs7CisgICAgcGFyYW1ldGVycy5saW5lLnRleHQgPSBidWZmZXI7CisgICAgaWYgKCFoYW5kbGVMaW5lKCZwYXJhbWV0ZXJzKSkgYnJlYWs7CisgIH0KKworICBpZiAoYnVmZmVyKSBmcmVlKGJ1ZmZlcik7CisgIHJldHVybiAhZmVycm9yKGZpbGUpOworfQorCitTVFJfQkVHSU5fRk9STUFUVEVSKGZvcm1hdElucHV0RXJyb3IsIGNvbnN0IGNoYXIgKmZpbGUsIGNvbnN0IGludCAqbGluZSwgY29uc3QgY2hhciAqZm9ybWF0LCB2YV9saXN0IGFyZ3VtZW50cykKKyAgaWYgKGZpbGUpIFNUUl9QUklOVEYoIiVzIiwgZmlsZSk7CisgIGlmIChsaW5lKSBTVFJfUFJJTlRGKCJbJWRdIiwgKmxpbmUpOworICBpZiAoU1RSX0xFTkdUSCkgU1RSX1BSSU5URigiOiAiKTsKKyAgU1RSX1ZQUklOVEYoZm9ybWF0LCBhcmd1bWVudHMpOworU1RSX0VORF9GT1JNQVRURVIKKworc3RhdGljIHZvaWQKK2RldGFjaFN0YW5kYXJkU3RyZWFtIChGSUxFICpzdHJlYW0sIGNvbnN0IGNoYXIgKm5hbWUsIGludCBvdXRwdXQpIHsKKyAgY29uc3QgY2hhciAqbnVsbERldmljZSA9ICIvZGV2L251bGwiOworCisgIGlmIChvdXRwdXQpIHsKKyAgICBmZmx1c2goc3RyZWFtKTsKKyAgfQorCisgIGlmICghZnJlb3BlbihudWxsRGV2aWNlLCAob3V0cHV0PyAiYSI6ICJyIiksIHN0cmVhbSkpIHsKKyAgICBpZiAoZXJybm8gIT0gRU5PRU5UKSB7CisgICAgICBjaGFyIGFjdGlvblswWDQwXTsKKyAgICAgIHNucHJpbnRmKGFjdGlvbiwgc2l6ZW9mKGFjdGlvbiksICJmcmVvcGVuWyVzXSIsIG5hbWUpOworICAgICAgbG9nU3lzdGVtRXJyb3IoYWN0aW9uKTsKKyAgICB9CisgIH0KK30KKwordm9pZAorZGV0YWNoU3RhbmRhcmRJbnB1dCAodm9pZCkgeworICBkZXRhY2hTdGFuZGFyZFN0cmVhbShzdGRpbiwgInN0ZGluIiwgMCk7Cit9CisKK3ZvaWQKK2RldGFjaFN0YW5kYXJkT3V0cHV0ICh2b2lkKSB7CisgIGRldGFjaFN0YW5kYXJkU3RyZWFtKHN0ZG91dCwgInN0ZG91dCIsIDEpOworfQorCit2b2lkCitkZXRhY2hTdGFuZGFyZEVycm9yICh2b2lkKSB7CisgIGRldGFjaFN0YW5kYXJkU3RyZWFtKHN0ZGVyciwgInN0ZGVyciIsIDEpOworfQorCit2b2lkCitkZXRhY2hTdGFuZGFyZFN0cmVhbXMgKHZvaWQpIHsKKyAgZGV0YWNoU3RhbmRhcmRJbnB1dCgpOworICBkZXRhY2hTdGFuZGFyZE91dHB1dCgpOworICBkZXRhY2hTdGFuZGFyZEVycm9yKCk7Cit9CisKKyNpZmRlZiBfX01JTkdXMzJfXworaW50CitnZXRDb25zb2xlU2l6ZSAoc2l6ZV90ICp3aWR0aCwgc2l6ZV90ICpoZWlnaHQpIHsKKyAgSEFORExFIGhhbmRsZSA9IEdldFN0ZEhhbmRsZShTVERfT1VUUFVUX0hBTkRMRSk7CisKKyAgaWYgKGhhbmRsZSkgeworICAgIGlmIChoYW5kbGUgIT0gSU5WQUxJRF9IQU5ETEVfVkFMVUUpIHsKKyAgICAgIGlmIChHZXRGaWxlVHlwZShoYW5kbGUpID09IEZJTEVfVFlQRV9DSEFSKSB7CisgICAgICAgIENPTlNPTEVfU0NSRUVOX0JVRkZFUl9JTkZPIGluZm87CisKKyAgICAgICAgaWYgKEdldENvbnNvbGVTY3JlZW5CdWZmZXJJbmZvKGhhbmRsZSwgJmluZm8pKSB7CisgICAgICAgICAgQ09PUkQgc2l6ZSA9IGluZm8uZHdTaXplOworICAgICAgICAgIGlmICh3aWR0aCkgKndpZHRoID0gc2l6ZS5YOworICAgICAgICAgIGlmIChoZWlnaHQpICpoZWlnaHQgPSBzaXplLlk7CisgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9CisgIH0KKworICByZXR1cm4gMDsKK30KKworY29uc3QgY2hhciAqCitnZXRDb25zb2xlRW5jb2RpbmcgKHZvaWQpIHsKKyAgc3RhdGljIGNoYXIgZW5jb2RpbmdbMFgxMF07CisKKyAgaWYgKCFlbmNvZGluZ1swXSkgeworICAgIHVuc2lnbmVkIGNwID0gR2V0Q29uc29sZU91dHB1dENQKCk7CisKKyAgICBpZiAoY3AgPT0gQ1BfVVRGOCkgeworICAgICAgc3RyY3B5KGVuY29kaW5nLCAiVVRGLTgiKTsKKyAgICB9IGVsc2UgeworICAgICAgc25wcmludGYoZW5jb2RpbmcsIHNpemVvZihlbmNvZGluZyksICJDUCV1IiwgY3ApOworICAgIH0KKworICAgIGxvZ01lc3NhZ2UoTE9HX0RFQlVHLCAiQ29uc29sZSBFbmNvZGluZzogJXMiLCBlbmNvZGluZyk7CisgIH0KKworICByZXR1cm4gZW5jb2Rpbmc7Cit9CisKK3NzaXplX3QKK3JlYWRGaWxlRGVzY3JpcHRvciAoRmlsZURlc2NyaXB0b3IgZmlsZURlc2NyaXB0b3IsIHZvaWQgKmJ1ZmZlciwgc2l6ZV90IHNpemUpIHsKKyAgeworICAgIERXT1JEIGNvdW50OworCisgICAgaWYgKFJlYWRGaWxlKGZpbGVEZXNjcmlwdG9yLCBidWZmZXIsIHNpemUsICZjb3VudCwgTlVMTCkpIHJldHVybiBjb3VudDsKKyAgfQorCisgIHNldFN5c3RlbUVycm5vKCk7CisgIHJldHVybiAtMTsKK30KKworc3NpemVfdAord3JpdGVGaWxlRGVzY3JpcHRvciAoRmlsZURlc2NyaXB0b3IgZmlsZURlc2NyaXB0b3IsIGNvbnN0IHZvaWQgKmJ1ZmZlciwgc2l6ZV90IHNpemUpIHsKKyAgeworICAgIERXT1JEIGNvdW50OworCisgICAgaWYgKFdyaXRlRmlsZShmaWxlRGVzY3JpcHRvciwgYnVmZmVyLCBzaXplLCAmY291bnQsIE5VTEwpKSByZXR1cm4gY291bnQ7CisgIH0KKworICBzZXRTeXN0ZW1FcnJubygpOworICByZXR1cm4gLTE7Cit9CisKK2NvbnN0IGNoYXIgKgorZ2V0TmFtZWRQaXBlRGlyZWN0b3J5ICh2b2lkKSB7CisgIHJldHVybiAiLy8uL3BpcGUiOworfQorCitpbnQKK2NyZWF0ZUFub255bW91c1BpcGUgKEZpbGVEZXNjcmlwdG9yICpwaXBlSW5wdXQsIEZpbGVEZXNjcmlwdG9yICpwaXBlT3V0cHV0KSB7CisgIFNFQ1VSSVRZX0FUVFJJQlVURVMgYXR0cmlidXRlczsKKworICBaZXJvTWVtb3J5KCZhdHRyaWJ1dGVzLCBzaXplb2YoYXR0cmlidXRlcykpOworICBhdHRyaWJ1dGVzLm5MZW5ndGggPSBzaXplb2YoYXR0cmlidXRlcyk7CisgIGF0dHJpYnV0ZXMuYkluaGVyaXRIYW5kbGUgPSBUUlVFOworICBhdHRyaWJ1dGVzLmxwU2VjdXJpdHlEZXNjcmlwdG9yID0gTlVMTDsKKworICBpZiAoQ3JlYXRlUGlwZShwaXBlT3V0cHV0LCBwaXBlSW5wdXQsICZhdHRyaWJ1dGVzLCAwKSkgeworICAgIHJldHVybiAxOworICB9IGVsc2UgeworICAgIGxvZ1dpbmRvd3NTeXN0ZW1FcnJvcigiQ3JlYXRlUGlwZSIpOworICB9CisKKyAgcmV0dXJuIDA7Cit9CisKKyNlbHNlIC8qIHVuaXggZmlsZS9zb2NrZXQgZGVzY3JpcHRvciBvcGVyYXRpb25zICovCisjaW5jbHVkZSA8c3lzL2lvY3RsLmg+CisKK2ludAorZ2V0Q29uc29sZVNpemUgKHNpemVfdCAqd2lkdGgsIHNpemVfdCAqaGVpZ2h0KSB7CisgIHN0cnVjdCB3aW5zaXplIHNpemU7CisgIGlmIChpb2N0bChTVERPVVRfRklMRU5PLCBUSU9DR1dJTlNaLCAmc2l6ZSkgPT0gLTEpIHJldHVybiAwOworCisgIGlmICh3aWR0aCkgKndpZHRoID0gc2l6ZS53c19jb2w7CisgIGlmIChoZWlnaHQpICpoZWlnaHQgPSBzaXplLndzX3JvdzsKKyAgcmV0dXJuIDE7Cit9CisKK2NvbnN0IGNoYXIgKgorZ2V0Q29uc29sZUVuY29kaW5nICh2b2lkKSB7CisgIHN0YXRpYyBjb25zdCBjaGFyICplbmNvZGluZyA9IE5VTEw7CisKKyAgaWYgKCFlbmNvZGluZykgeworICAgIHNldGxvY2FsZShMQ19BTEwsICIiKTsKKworI2lmZGVmIEhBVkVfTkxfTEFOR0lORk8KKyAgICBlbmNvZGluZyA9IG5sX2xhbmdpbmZvKENPREVTRVQpOworI2VuZGlmIC8qIEhBVkVfTkxfTEFOR0lORk8gKi8KKworICAgIGlmIChlbmNvZGluZykgeworICAgICAgaWYgKCEoZW5jb2RpbmcgPSBzdHJkdXAoZW5jb2RpbmcpKSkgeworICAgICAgICBsb2dNYWxsb2NFcnJvcigpOworICAgICAgfQorICAgIH0KKworICAgIGlmICghZW5jb2RpbmcpIGVuY29kaW5nID0gIiI7CisgICAgbG9nTWVzc2FnZShMT0dfREVCVUcsICJDb25zb2xlIEVuY29kaW5nOiAlcyIsIGVuY29kaW5nKTsKKyAgfQorCisgIHJldHVybiBlbmNvZGluZzsKK30KKworc3NpemVfdAorcmVhZEZpbGVEZXNjcmlwdG9yIChGaWxlRGVzY3JpcHRvciBmaWxlRGVzY3JpcHRvciwgdm9pZCAqYnVmZmVyLCBzaXplX3Qgc2l6ZSkgeworICByZXR1cm4gcmVhZChmaWxlRGVzY3JpcHRvciwgYnVmZmVyLCBzaXplKTsKK30KKworc3NpemVfdAord3JpdGVGaWxlRGVzY3JpcHRvciAoRmlsZURlc2NyaXB0b3IgZmlsZURlc2NyaXB0b3IsIGNvbnN0IHZvaWQgKmJ1ZmZlciwgc2l6ZV90IHNpemUpIHsKKyAgcmV0dXJuIHdyaXRlKGZpbGVEZXNjcmlwdG9yLCBidWZmZXIsIHNpemUpOworfQorCitjb25zdCBjaGFyICoKK2dldE5hbWVkUGlwZURpcmVjdG9yeSAodm9pZCkgeworICByZXR1cm4gZ2V0V3JpdGFibGVEaXJlY3RvcnkoKTsKK30KKworaW50CitjcmVhdGVBbm9ueW1vdXNQaXBlIChGaWxlRGVzY3JpcHRvciAqcGlwZUlucHV0LCBGaWxlRGVzY3JpcHRvciAqcGlwZU91dHB1dCkgeworICBpbnQgZmlsZURlc2NyaXB0b3JzWzJdOworCisgIGlmIChwaXBlKGZpbGVEZXNjcmlwdG9ycykgIT0gLTEpIHsKKyAgICAqcGlwZUlucHV0ID0gZmlsZURlc2NyaXB0b3JzWzFdOworICAgICpwaXBlT3V0cHV0ID0gZmlsZURlc2NyaXB0b3JzWzBdOworICAgIHJldHVybiAxOworICB9IGVsc2UgeworICAgIGxvZ1N5c3RlbUVycm9yKCJwaXBlIik7CisgIH0KKworICByZXR1cm4gMDsKK30KKyNlbmRpZiAvKiBiYXNpYyBmaWxlL3NvY2tldCBkZXNjcmlwdG9yIG9wZXJhdGlvbnMgKi8KKwordm9pZAord3JpdGVXaXRoQ29uc29sZUVuY29kaW5nIChGSUxFICpzdHJlYW0sIGNvbnN0IGNoYXIgKmJ5dGVzLCBzaXplX3QgY291bnQpIHsKKyAgc3RhdGljIGNvbnN0IGNoYXIgKmNvbnNvbGVFbmNvZGluZyA9IE5VTEw7CisgIGlmICghY29uc29sZUVuY29kaW5nKSBjb25zb2xlRW5jb2RpbmcgPSBnZXRDb25zb2xlRW5jb2RpbmcoKTsKKworICBpZiAoIWNvbnNvbGVFbmNvZGluZyB8fCBpc0NoYXJzZXRVVEY4KGNvbnNvbGVFbmNvZGluZykpIHsKKyAgICBjb25zb2xlRW5jb2RpbmcgPSAiIjsKKyAgfQorCisjaWZkZWYgSEFWRV9JQ09OVl9ICisgIGlmICgqY29uc29sZUVuY29kaW5nKSB7CisgICAgc3RhdGljIGljb252X3QgaWNvbnZIYW5kbGUgPSAoaWNvbnZfdCktMTsKKworICAgIGlmIChpY29udkhhbmRsZSA9PSAoaWNvbnZfdCktMSkgeworICAgICAgc3RhdGljIGNvbnN0IGNoYXIgaW50ZXJuYWxFbmNvZGluZ1tdID0gIlVURi04IjsKKyAgICAgIGNvbnN0IGNoYXIgKmV4dGVybmFsRW5jb2RpbmcgPSBjb25zb2xlRW5jb2Rpbmc7CisKKyAgICAgIGlmICgoaWNvbnZIYW5kbGUgPSBpY29udl9vcGVuKGV4dGVybmFsRW5jb2RpbmcsIGludGVybmFsRW5jb2RpbmcpKSA9PSAoaWNvbnZfdCktMSkgeworICAgICAgICBjb25zb2xlRW5jb2RpbmcgPSAiIjsKKworICAgICAgICBsb2dNZXNzYWdlKExPR19XQVJOSU5HLAorICAgICAgICAgICJpY29udiBvcGVuIGVycm9yOiAlcyAtPiAlczogJXMiLAorICAgICAgICAgIGludGVybmFsRW5jb2RpbmcsIGV4dGVybmFsRW5jb2RpbmcsIHN0cmVycm9yKGVycm5vKQorICAgICAgICApOworCisgICAgICAgIGdvdG8gRU5DT0RJTkdfTk9UX1NVUFBPUlRFRDsKKyAgICAgIH0KKyAgICB9CisKKyAgICBjb25zdCBjaGFyICppbnB1dE5leHQgPSBieXRlczsKKyAgICBzaXplX3QgaW5wdXRMZWZ0ID0gY291bnQ7CisKKyAgICBjaGFyIG91dHB1dEJ1ZmZlcltpbnB1dExlZnQgKiBNQl9MRU5fTUFYXTsKKyAgICBjaGFyICpvdXRwdXROZXh0ID0gb3V0cHV0QnVmZmVyOworICAgIHNpemVfdCBvdXRwdXRMZWZ0ID0gc2l6ZW9mKG91dHB1dEJ1ZmZlcik7CisKKyAgICBzc2l6ZV90IHJlc3VsdCA9IGljb252KAorICAgICAgaWNvbnZIYW5kbGUsCisgICAgICAoY2hhciAqKikmaW5wdXROZXh0LCAmaW5wdXRMZWZ0LAorICAgICAgJm91dHB1dE5leHQsICZvdXRwdXRMZWZ0CisgICAgKTsKKworICAgIGlmIChyZXN1bHQgIT0gLTEpIHsKKyAgICAgIHNpemVfdCBsZW5ndGggPSBvdXRwdXROZXh0IC0gb3V0cHV0QnVmZmVyOworICAgICAgb3V0cHV0QnVmZmVyW2xlbmd0aF0gPSAwOworICAgICAgZnB1dHMob3V0cHV0QnVmZmVyLCBzdHJlYW0pOworICAgIH0KKworICAgIHJldHVybjsKKyAgfQorRU5DT0RJTkdfTk9UX1NVUFBPUlRFRDoKKyNlbmRpZiAvKiBIQVZFX0lDT05WX0ggKi8KKworICBmd3JpdGUoYnl0ZXMsIDEsIGNvdW50LCBzdHJlYW0pOworfQorCisjaWZkZWYgR09UX1NPQ0tFVFMKK3NzaXplX3QKK3JlYWRTb2NrZXREZXNjcmlwdG9yIChTb2NrZXREZXNjcmlwdG9yIHNvY2tldERlc2NyaXB0b3IsIHZvaWQgKmJ1ZmZlciwgc2l6ZV90IHNpemUpIHsKKyAgcmV0dXJuIHJlY3Yoc29ja2V0RGVzY3JpcHRvciwgYnVmZmVyLCBzaXplLCAwKTsKK30KKworc3NpemVfdAord3JpdGVTb2NrZXREZXNjcmlwdG9yIChTb2NrZXREZXNjcmlwdG9yIHNvY2tldERlc2NyaXB0b3IsIGNvbnN0IHZvaWQgKmJ1ZmZlciwgc2l6ZV90IHNpemUpIHsKKyAgcmV0dXJuIHNlbmQoc29ja2V0RGVzY3JpcHRvciwgYnVmZmVyLCBzaXplLCAwKTsKK30KKyNlbmRpZiAvKiBHT1RfU09DS0VUUyAqLworCitjaGFyICoKK3JlYWRTeW1ib2xpY0xpbmsgKGNvbnN0IGNoYXIgKnBhdGgpIHsKKyAgY2hhciAqY29udGVudCA9IE5VTEw7CisgIHNpemVfdCBzaXplID0gMFg4MDsKKyAgY2hhciAqYnVmZmVyID0gTlVMTDsKKworICB3aGlsZSAoMSkgeworICAgIHsKKyAgICAgIGNoYXIgKm5ld0J1ZmZlciA9IHJlYWxsb2MoYnVmZmVyLCBzaXplPDw9MSk7CisKKyAgICAgIGlmICghbmV3QnVmZmVyKSB7CisgICAgICAgIGxvZ01hbGxvY0Vycm9yKCk7CisgICAgICAgIGJyZWFrOworICAgICAgfQorCisgICAgICBidWZmZXIgPSBuZXdCdWZmZXI7CisgICAgfQorCisgICAgeworICAgICAgaW50IGxlbmd0aDsKKworICAgICAgI2lmZGVmIEhBVkVfUkVBRExJTksKKyAgICAgIGxlbmd0aCA9IHJlYWRsaW5rKHBhdGgsIGJ1ZmZlciwgc2l6ZSk7CisgICAgICAjZWxzZSAvKiBIQVZFX1JFQURMSU5LICovCisgICAgICBsZW5ndGggPSAtMTsKKyAgICAgIGVycm5vID0gRU5PU1lTOworICAgICAgI2VuZGlmIC8qIEhBVkVfUkVBRExJTksgKi8KKworICAgICAgaWYgKGxlbmd0aCA9PSAtMSkgeworICAgICAgICBpZiAoZXJybm8gIT0gRU5PRU5UKSBsb2dTeXN0ZW1FcnJvcigicmVhZGxpbmsiKTsKKyAgICAgICAgYnJlYWs7CisgICAgICB9CisKKyAgICAgIGlmIChsZW5ndGggPCBzaXplKSB7CisgICAgICAgIGJ1ZmZlcltsZW5ndGhdID0gMDsKKyAgICAgICAgaWYgKCEoY29udGVudCA9IHN0cmR1cChidWZmZXIpKSkgbG9nTWFsbG9jRXJyb3IoKTsKKyAgICAgICAgYnJlYWs7CisgICAgICB9CisgICAgfQorICB9CisKKyAgaWYgKGJ1ZmZlcikgZnJlZShidWZmZXIpOworICByZXR1cm4gY29udGVudDsKK30KZGlmZiAtLWdpdCBhL1Byb2dyYW1zL2ZtX2FkbGliLmMgYi9Qcm9ncmFtcy9mbV9hZGxpYi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIwYzQyOGIKLS0tIC9kZXYvbnVsbAorKysgYi9Qcm9ncmFtcy9mbV9hZGxpYi5jCkBAIC0wLDAgKzEsMTk0IEBACisvKgorICogQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyAqICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyAqCisgKiBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorICoKKyAqIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyAqCisgKiBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisgKi8KKworLyoKKyAqIE1pc2NlbGxhbmVvdXMgRk0gY2hpcCBzb3VuZGNhcmQgcm91dGluZXMgZm9yIEJSTFRUWS4KKyAqIEltcGxlbWVudGVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisgKiBNZXRob2QgZ2xlYW5lZCBmcm9tIHNjY3csIGEgbW9yc2UgY29kZSBwcm9ncmFtIHdyaXR0ZW4KKyAqIGJ5IFN0ZXZlbiBKLiBNZXJyaWZpZWxkIDxzam1AZWUubGF0cm9iZS5lZHUuYXU+IChWSzNFU00pLgorICogTXVzdCBjb21waWxlIHdpdGggLU8yLgorICogTXVzdCBsaW5rIHdpdGggLWxtLgorICogTWF5IGNvbXBpbGUgd2l0aCAtRERFQlVHX0FETElCLgorICovCisKKyNpbmNsdWRlICJwcm9sb2d1ZS5oIgorCisjaW5jbHVkZSAibG9nLmgiCisjaW5jbHVkZSAiYXN5bmNfd2FpdC5oIgorI2luY2x1ZGUgInRpbWluZy5oIgorI2luY2x1ZGUgInBvcnRzLmgiCisjaW5jbHVkZSAiZm0uaCIKKyNpbmNsdWRlICJmbV9hZGxpYi5oIgorCitjb25zdCB1bnNpZ25lZCBjaGFyIEFMX2NoYW5uZWxPZmZzZXRzW10gPSB7CisgIC8qIDEgICAgIDIgICAgIDMgICAgIDQgICAgIDUgICAgIDYgICAgIDcgICAgIDggICAgIDkgKi8KKyAgMFgwMCwgMFgwMSwgMFgwMiwgMFgwOCwgMFgwOSwgMFgwQSwgMFgxMCwgMFgxMSwgMFgxMgorfTsKK2NvbnN0IHVuc2lnbmVkIGNoYXIgQUxfY2hhbm5lbENvdW50ID0gQVJSQVlfQ09VTlQoQUxfY2hhbm5lbE9mZnNldHMpOworCitzdGF0aWMgdW5zaWduZWQgaW50IHBvcnRzRW5hYmxlZENvdW50ID0gMDsKKworaW50CitmbUVuYWJsZVBvcnRzIChpbnQgZXJyb3JMZXZlbCkgeworICBpZiAocG9ydHNFbmFibGVkQ291bnQpIHJldHVybiAxOworCisgIGlmIChlbmFibGVQb3J0cyhlcnJvckxldmVsLCBBTFBfUkVHSVNURVIsIDEpKSB7CisgICAgaWYgKGVuYWJsZVBvcnRzKGVycm9yTGV2ZWwsIEFMUF9EQVRBLCAxKSkgeworICAgICAgcG9ydHNFbmFibGVkQ291bnQrKzsKKyAgICAgIHJldHVybiAxOworICAgIH0KKworICAgIGRpc2FibGVQb3J0cyhBTFBfUkVHSVNURVIsIDEpOworICB9CisKKyAgcmV0dXJuIDA7Cit9CisKK3ZvaWQKK2ZtRGlzYWJsZVBvcnRzICh2b2lkKSB7CisgIGlmICghLS1wb3J0c0VuYWJsZWRDb3VudCkgeworICAgIGRpc2FibGVQb3J0cyhBTFBfUkVHSVNURVIsIDEpOworICAgIGRpc2FibGVQb3J0cyhBTFBfREFUQSwgMSk7CisgIH0KK30KKwordW5zaWduZWQgY2hhcgorQUxfcmVhZFN0YXR1cyAodm9pZCkgeworICByZXR1cm4gcmVhZFBvcnQxKEFMUF9TVEFUVVMpOworfQorCitzdGF0aWMgdm9pZAorQUxfd3JpdGVEZWxheSAoaW50IGRlbGF5KSB7CisgIHdoaWxlIChkZWxheS0tID4gMCkgeworICAgIEFMX3JlYWRTdGF0dXMoKTsKKyAgfQorfQorCit2b2lkCitBTF93cml0ZVJlZ2lzdGVyIChpbnQgbnVtYmVyLCB1bnNpZ25lZCBjaGFyIGRhdGEpIHsKKyAgLyogbG9nTWVzc2FnZShMT0dfREVCVUcsICJBTF93cml0ZVJlZ2lzdGVyOiAlMi4yWD0lMi4yWCIsIG51bWJlciwgZGF0YSk7ICovCisgIHdyaXRlUG9ydDEoQUxQX1JFR0lTVEVSLCBudW1iZXIpOworICBBTF93cml0ZURlbGF5KDYpOworICB3cml0ZVBvcnQxKEFMUF9EQVRBLCBkYXRhKTsKKyAgQUxfd3JpdGVEZWxheSgzNSk7Cit9CisKK3ZvaWQKK2ZtUmVzZXRDYXJkICh2b2lkKSB7CisgIGludCBudW1iZXI7CisgIGZvciAobnVtYmVyPUFMUl9GSVJTVDsgbnVtYmVyPD1BTFJfTEFTVDsgKytudW1iZXIpIHsKKyAgICBBTF93cml0ZVJlZ2lzdGVyKG51bWJlciwgMCk7CisgIH0KK30KKworc3RhdGljIHZvaWQKK0FMX3Jlc2V0VGltZXJzICh2b2lkKSB7CisgIEFMX3dyaXRlUmVnaXN0ZXIoQUxSX1RDVEwsIEFMX1RDVExfVDFNQVNLfEFMX1RDVExfVDJNQVNLKTsKKyAgQUxfd3JpdGVSZWdpc3RlcihBTFJfVENUTCwgQUxfVENUTF9SRVNFVCk7Cit9CisKK2ludAorZm1UZXN0Q2FyZCAoaW50IGVycm9yTGV2ZWwpIHsKKyAgY29uc3QgdW5zaWduZWQgY2hhciBtYXNrID0gQUxfU1RBVF9FWFAgfCBBTF9TVEFUX0VYUDEgfCBBTF9TVEFUX0VYUDI7CisKKyAgQUxfcmVzZXRUaW1lcnMoKTsKKyAgaWYgKCEoQUxfcmVhZFN0YXR1cygpICYgbWFzaykpIHsKKyAgICB1bnNpZ25lZCBjaGFyIHN0YXR1czsKKworICAgIEFMX3dyaXRlUmVnaXN0ZXIoQUxSX1QxREFUQSwgMHhGRik7CisgICAgQUxfd3JpdGVSZWdpc3RlcihBTFJfVENUTCwgQUxfVENUTF9UMVNUQVJUfEFMX1RDVExfVDJNQVNLKTsKKworICAgIHsKKyAgICAgIGNvbnN0IFRpbWVWYWx1ZSBkdXJhdGlvbiA9IHsKKyAgICAgICAgLnNlY29uZHMgPSAwLAorICAgICAgICAubmFub3NlY29uZHMgPSA4MCAqIE5TRUNTX1BFUl9VU0VDCisgICAgICB9OworCisgICAgICBhY2N1cmF0ZURlbGF5KCZkdXJhdGlvbik7CisgICAgfQorCisgICAgc3RhdHVzID0gQUxfcmVhZFN0YXR1cygpOworICAgIEFMX3Jlc2V0VGltZXJzKCk7IAorCisgICAgaWYgKChzdGF0dXMgJiBtYXNrKSA9PSAoQUxfU1RBVF9FWFAgfCBBTF9TVEFUX0VYUDEpKSByZXR1cm4gMTsgCisgIH0KKworICBsb2dNZXNzYWdlKGVycm9yTGV2ZWwsICJGTSBzeW50aGVzaXplciBpbml0aWFsaXphdGlvbiBmYWlsdXJlIik7CisgIHJldHVybiAwOworfQorCitzdGF0aWMgdm9pZAorQUxfZXZhbHVhdGVQaXRjaCAoaW50IHBpdGNoLCBpbnQgKmV4cG9uZW50LCBpbnQgKm1hbnRpc3NhKSB7CisgIGludCBzaGlmdCA9IDIxOworICB3aGlsZSAoKCptYW50aXNzYSA9IChpbnQpKChmbG9hdClwaXRjaCAqICgxIDw8IC0tc2hpZnQpIC8gNTAwMDAuMCkpID4gMFgzRkYpOworICAqZXhwb25lbnQgPSAyMCAtIHNoaWZ0OworfQorCitzdGF0aWMgdm9pZAorQUxfaW5pdGlhdGVUb25lIChpbnQgY2hhbm5lbCwgaW50IGV4cG9uZW50LCBpbnQgbWFudGlzc2EpIHsKKyAgLyogbG9nTWVzc2FnZShMT0dfREVCVUcsICJBTF9pbml0aWF0ZVRvbmU6ICUxLjFYWyUzLjNYXSIsIGV4cG9uZW50LCBtYW50aXNzYSk7ICovCisgIEFMX3dyaXRlUmVnaXN0ZXIoQUxSX0ZSRVFVRU5DWV9MU0IoY2hhbm5lbCksCisgICAgICAgICAgICAgICAgICAgKG1hbnRpc3NhICYgMFhGRikpOworICBBTF93cml0ZVJlZ2lzdGVyKEFMUl9GUkVRVUVOQ1lfTVNCKGNoYW5uZWwpLAorICAgICAgICAgICAgICAgICAgICgoKG1hbnRpc3NhID4+IDgpICYgMFgzKSB8CisgICAgICAgICAgICAgICAgICAgICgoZXhwb25lbnQgJiAwWDcpIDw8IEFMX09DVEFWRV9TSElGVCkgfAorICAgICAgICAgICAgICAgICAgICBBTF9GUkVRX09OKSk7Cit9CisKK3ZvaWQKK2ZtU3RhcnRUb25lIChpbnQgY2hhbm5lbCwgaW50IHBpdGNoKSB7CisgIGludCBleHBvbmVudDsKKyAgaW50IG1hbnRpc3NhOworICBBTF9ldmFsdWF0ZVBpdGNoKHBpdGNoLCAmZXhwb25lbnQsICZtYW50aXNzYSk7CisgIC8qIGxvZ01lc3NhZ2UoTE9HX0RFQlVHLCAiZm1TdGFydFRvbmU6ICVkIiwgcGl0Y2gpOyAqLworICBBTF9pbml0aWF0ZVRvbmUoY2hhbm5lbCwgZXhwb25lbnQsIG1hbnRpc3NhKTsKK30KKwordm9pZAorZm1TdG9wVG9uZSAoaW50IGNoYW5uZWwpIHsKKyAgQUxfd3JpdGVSZWdpc3RlcihBTFJfRlJFUVVFTkNZX01TQihjaGFubmVsKSwgMCk7Cit9CisKK3ZvaWQKK2ZtUGxheVRvbmUgKGludCBjaGFubmVsLCB1bnNpZ25lZCBpbnQgcGl0Y2gsIHVuc2lnbmVkIGxvbmcgaW50IGR1cmF0aW9uLCB1bnNpZ25lZCBpbnQgdm9sdW1lKSB7CisgIC8qIFBsYXkgdG9uZSBhdCBmdW5kYW1lbnRhbCBmcmVxdWVuY3kuICovCisgIEFMX3dyaXRlUmVnaXN0ZXIoQUxSX01PRFVMQVRPUihBTEdfRUZGRUNULCBjaGFubmVsKSwKKyAgICAgICAgICAgICAgICAgICAoQUxfSEFSTU9OSUNfMSA8PCBBTF9IQVJNT05JQ19TSElGVCkpOworCisgIC8qIFNldCB0aGUgY2FycmllciB0byB0aGUgZnVuZGFtZW50YWwgZnJlcXVlbmN5LiAqLworICBBTF93cml0ZVJlZ2lzdGVyKEFMUl9DQVJSSUVSKEFMR19FRkZFQ1QsIGNoYW5uZWwpLAorICAgICAgICAgICAgICAgICAgIChBTF9IQVJNT05JQ18xIDw8IEFMX0hBUk1PTklDX1NISUZUKSk7CisKKyAgLyogU2V0IHRoZSB2b2x1bWUgKHBhc3NlZCBpbiBhcyAwLTEwMCkgKi8KKyAgQUxfd3JpdGVSZWdpc3RlcihBTFJfQ0FSUklFUihBTEdfTEVWRUwsIGNoYW5uZWwpLAorICAgICAgICAgICAgICAgICAgICgoQUxfVk9MVU1FX1NPRlQgLSAoKEFMX1ZPTFVNRV9TT0ZUICogdm9sdW1lKSAvIDEwMCkpIDw8IEFMX1ZPTFVNRV9TSElGVCkpOworCisgIC8qIFNldCBmYXN0IGF0dGFjayBhbmQgc2xvdyBkZWNheS4gKi8KKyAgQUxfd3JpdGVSZWdpc3RlcihBTFJfQ0FSUklFUihBTEdfQVRUREVDLCBjaGFubmVsKSwKKyAgICAgICAgICAgICAgICAgICAoKEFMX0FUVEFDS19GQVNUIDw8IEFMX0FUVEFDS19TSElGVCkgfAorICAgICAgICAgICAgICAgICAgICAoQUxfREVDQVlfU0xPVyA8PCBBTF9ERUNBWV9TSElGVCkpKTsKKworICAvKiBTZXQgc29mdCBzdXN0YWluIGFuZCBmYXN0IHJlbGVhc2UuICovCisgIEFMX3dyaXRlUmVnaXN0ZXIoQUxSX0NBUlJJRVIoQUxHX1NVU1JFTCwgY2hhbm5lbCksCisgICAgICAgICAgICAgICAgICAgKChBTF9TVVNUQUlOX1NPRlQgPDwgQUxfU1VTVEFJTl9TSElGVCkgfAorICAgICAgICAgICAgICAgICAgICAoQUxfUkVMRUFTRV9GQVNUIDw8IEFMX1JFTEVBU0VfU0hJRlQpKSk7CisgICAgICAKKyAgZm1TdGFydFRvbmUoY2hhbm5lbCwgcGl0Y2gpOworICBhc3luY1dhaXQoZHVyYXRpb24pOworICBmbVN0b3BUb25lKGNoYW5uZWwpOworfQpkaWZmIC0tZ2l0IGEvUHJvZ3JhbXMvZm1fbm9uZS5jIGIvUHJvZ3JhbXMvZm1fbm9uZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM0MmYwOGYKLS0tIC9kZXYvbnVsbAorKysgYi9Qcm9ncmFtcy9mbV9ub25lLmMKQEAgLTAsMCArMSw1MSBAQAorLyoKKyAqIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisgKiAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisgKgorICogQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKKyNpbmNsdWRlICJwcm9sb2d1ZS5oIgorCisjaW5jbHVkZSAiZm0uaCIKKworaW50CitmbUVuYWJsZVBvcnRzIChpbnQgZXJyb3JMZXZlbCkgeworICByZXR1cm4gMDsKK30KKwordm9pZAorZm1EaXNhYmxlUG9ydHMgKHZvaWQpIHsKK30KKwordm9pZAorZm1SZXNldENhcmQgKHZvaWQpIHsKK30KKworaW50CitmbVRlc3RDYXJkIChpbnQgZXJyb3JMZXZlbCkgeworICByZXR1cm4gMDsKK30KKwordm9pZAorZm1TdGFydFRvbmUgKGludCBjaGFubmVsLCBpbnQgcGl0Y2gpIHsKK30KKwordm9pZAorZm1TdG9wVG9uZSAoaW50IGNoYW5uZWwpIHsKK30KKwordm9pZAorZm1QbGF5VG9uZSAoaW50IGNoYW5uZWwsIHVuc2lnbmVkIGludCBwaXRjaCwgdW5zaWduZWQgbG9uZyBpbnQgZHVyYXRpb24sIHVuc2lnbmVkIGludCB2b2x1bWUpIHsKK30KZGlmZiAtLWdpdCBhL1Byb2dyYW1zL2dpby5jIGIvUHJvZ3JhbXMvZ2lvLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWQ1NDc0MQotLS0gL2Rldi9udWxsCisrKyBiL1Byb2dyYW1zL2dpby5jCkBAIC0wLDAgKzEsNzQ3IEBACisvKgorICogQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyAqICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyAqCisgKiBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorICoKKyAqIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyAqCisgKiBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisgKi8KKworI2luY2x1ZGUgInByb2xvZ3VlLmgiCisKKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorCisjaW5jbHVkZSAibG9nLmgiCisjaW5jbHVkZSAiYXN5bmNfaGFuZGxlLmgiCisjaW5jbHVkZSAiYXN5bmNfd2FpdC5oIgorI2luY2x1ZGUgImFzeW5jX2FsYXJtLmgiCisjaW5jbHVkZSAiaW9fZ2VuZXJpYy5oIgorI2luY2x1ZGUgImdpb19pbnRlcm5hbC5oIgorI2luY2x1ZGUgImlvX3NlcmlhbC5oIgorI2luY2x1ZGUgImhpZF90eXBlcy5oIgorCitjb25zdCBHaW9Qcm9wZXJ0aWVzICpjb25zdCBnaW9Qcm9wZXJ0aWVzW10gPSB7CisgICZnaW9Qcm9wZXJ0aWVzX3NlcmlhbCwKKyAgJmdpb1Byb3BlcnRpZXNfdXNiLAorICAmZ2lvUHJvcGVydGllc19ibHVldG9vdGgsCisgICZnaW9Qcm9wZXJ0aWVzX2hpZCwKKyAgJmdpb1Byb3BlcnRpZXNfbnVsbCwKKyAgTlVMTAorfTsKKworc3RhdGljIHZvaWQKK2dpb0luaXRpYWxpemVPcHRpb25zIChHaW9PcHRpb25zICpvcHRpb25zKSB7CisgIG9wdGlvbnMtPmFwcGxpY2F0aW9uRGF0YSA9IE5VTEw7CisgIG9wdGlvbnMtPnJlYWR5RGVsYXkgPSAwOworICBvcHRpb25zLT5pbnB1dFRpbWVvdXQgPSAwOworICBvcHRpb25zLT5vdXRwdXRUaW1lb3V0ID0gMDsKKyAgb3B0aW9ucy0+cmVxdWVzdFRpbWVvdXQgPSAwOworfQorCit2b2lkCitnaW9Jbml0aWFsaXplRGVzY3JpcHRvciAoR2lvRGVzY3JpcHRvciAqZGVzY3JpcHRvcikgeworICBkZXNjcmlwdG9yLT5zZXJpYWwucGFyYW1ldGVycyA9IE5VTEw7CisgIGdpb0luaXRpYWxpemVPcHRpb25zKCZkZXNjcmlwdG9yLT5zZXJpYWwub3B0aW9ucyk7CisgIGRlc2NyaXB0b3ItPnNlcmlhbC5vcHRpb25zLmlucHV0VGltZW91dCA9IDEwMDsKKworICBkZXNjcmlwdG9yLT51c2IuY2hhbm5lbERlZmluaXRpb25zID0gTlVMTDsKKyAgZGVzY3JpcHRvci0+dXNiLnNldENvbm5lY3Rpb25Qcm9wZXJ0aWVzID0gTlVMTDsKKyAgZ2lvSW5pdGlhbGl6ZU9wdGlvbnMoJmRlc2NyaXB0b3ItPnVzYi5vcHRpb25zKTsKKyAgZGVzY3JpcHRvci0+dXNiLm9wdGlvbnMuaW5wdXRUaW1lb3V0ID0gMTAwMDsKKyAgZGVzY3JpcHRvci0+dXNiLm9wdGlvbnMub3V0cHV0VGltZW91dCA9IDEwMDA7CisgIGRlc2NyaXB0b3ItPnVzYi5vcHRpb25zLnJlcXVlc3RUaW1lb3V0ID0gMTAwMDsKKworICBkZXNjcmlwdG9yLT5ibHVldG9vdGguY2hhbm5lbE51bWJlciA9IDA7CisgIGRlc2NyaXB0b3ItPmJsdWV0b290aC5kaXNjb3ZlckNoYW5uZWwgPSAwOworICBnaW9Jbml0aWFsaXplT3B0aW9ucygmZGVzY3JpcHRvci0+Ymx1ZXRvb3RoLm9wdGlvbnMpOworICBkZXNjcmlwdG9yLT5ibHVldG9vdGgub3B0aW9ucy5pbnB1dFRpbWVvdXQgPSAxMDAwOworICBkZXNjcmlwdG9yLT5ibHVldG9vdGgub3B0aW9ucy5yZXF1ZXN0VGltZW91dCA9IDUwMDA7CisKKyAgZGVzY3JpcHRvci0+aGlkLm1vZGVsVGFibGUgPSBOVUxMOworICBnaW9Jbml0aWFsaXplT3B0aW9ucygmZGVzY3JpcHRvci0+aGlkLm9wdGlvbnMpOworCisgIGdpb0luaXRpYWxpemVPcHRpb25zKCZkZXNjcmlwdG9yLT5udWxsLm9wdGlvbnMpOworfQorCit2b2lkCitnaW9Jbml0aWFsaXplU2VyaWFsUGFyYW1ldGVycyAoU2VyaWFsUGFyYW1ldGVycyAqcGFyYW1ldGVycykgeworICBwYXJhbWV0ZXJzLT5iYXVkID0gU0VSSUFMX0RFRkFVTFRfQkFVRDsKKyAgcGFyYW1ldGVycy0+ZGF0YUJpdHMgPSBTRVJJQUxfREVGQVVMVF9EQVRBX0JJVFM7CisgIHBhcmFtZXRlcnMtPnN0b3BCaXRzID0gU0VSSUFMX0RFRkFVTFRfU1RPUF9CSVRTOworICBwYXJhbWV0ZXJzLT5wYXJpdHkgPSBTRVJJQUxfREVGQVVMVF9QQVJJVFk7CisgIHBhcmFtZXRlcnMtPmZsb3dDb250cm9sID0gU0VSSUFMX0RFRkFVTFRfRkxPV19DT05UUk9MOworfQorCit2b2lkCitnaW9TZXRCeXRlc1BlclNlY29uZCAoR2lvRW5kcG9pbnQgKmVuZHBvaW50LCBjb25zdCBTZXJpYWxQYXJhbWV0ZXJzICpwYXJhbWV0ZXJzKSB7CisgIGVuZHBvaW50LT5ieXRlc1BlclNlY29uZCA9IHBhcmFtZXRlcnMtPmJhdWQgLyBzZXJpYWxHZXRDaGFyYWN0ZXJTaXplKHBhcmFtZXRlcnMpOworfQorCit2b2lkCitnaW9TZXRBcHBsaWNhdGlvbkRhdGEgKEdpb0VuZHBvaW50ICplbmRwb2ludCwgY29uc3Qgdm9pZCAqZGF0YSkgeworICBlbmRwb2ludC0+b3B0aW9ucy5hcHBsaWNhdGlvbkRhdGEgPSBkYXRhOworfQorCitzdGF0aWMgaW50CitnaW9TdGFydEVuZHBvaW50IChHaW9FbmRwb2ludCAqZW5kcG9pbnQpIHsKKyAgeworICAgIGludCBkZWxheSA9IGVuZHBvaW50LT5vcHRpb25zLnJlYWR5RGVsYXk7CisgICAgaWYgKGRlbGF5KSBhc3luY1dhaXQoZGVsYXkpOworICB9CisKKyAgcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBjb25zdCBHaW9Qcm9wZXJ0aWVzICoKK2dpb0dldFByb3BlcnRpZXMgKAorICBjb25zdCBjaGFyICoqaWRlbnRpZmllciwKKyAgY29uc3QgR2lvRGVzY3JpcHRvciAqZGVzY3JpcHRvcgorKSB7CisgIGZvciAoY29uc3QgR2lvUHJvcGVydGllcyAqY29uc3QgKnByb3BlcnRpZXMgPSBnaW9Qcm9wZXJ0aWVzOworICAgICAgICpwcm9wZXJ0aWVzOyBwcm9wZXJ0aWVzKz0xKSB7CisgICAgaWYgKGRlc2NyaXB0b3IpIHsKKyAgICAgIEdpb0lzU3VwcG9ydGVkTWV0aG9kICppc1N1cHBvcnRlZCA9ICgqcHJvcGVydGllcyktPnByaXZhdGUtPmlzU3VwcG9ydGVkOworICAgICAgaWYgKCFpc1N1cHBvcnRlZCkgY29udGludWU7CisgICAgICBpZiAoIWlzU3VwcG9ydGVkKGRlc2NyaXB0b3IpKSBjb250aW51ZTsKKyAgICB9CisKKyAgICB7CisgICAgICBHaW9UZXN0SWRlbnRpZmllck1ldGhvZCAqdGVzdElkZW50aWZpZXIgPSAoKnByb3BlcnRpZXMpLT5wdWJsaWMtPnRlc3RJZGVudGlmaWVyOworICAgICAgaWYgKCF0ZXN0SWRlbnRpZmllcikgY29udGludWU7CisgICAgICBpZiAodGVzdElkZW50aWZpZXIoaWRlbnRpZmllcikpIHJldHVybiAqcHJvcGVydGllczsKKyAgICB9CisgIH0KKworICBlcnJubyA9IEVOT1NZUzsKKyAgbG9nTWVzc2FnZShMT0dfV0FSTklORywgInVuc3VwcG9ydGVkIGdlbmVyaWMgcmVzb3VyY2UgaWRlbnRpZmllcjogJXMiLCAqaWRlbnRpZmllcik7CisgIHJldHVybiBOVUxMOworfQorCitjb25zdCBHaW9QdWJsaWNQcm9wZXJ0aWVzICoKK2dpb0dldFB1YmxpY1Byb3BlcnRpZXMgKGNvbnN0IGNoYXIgKippZGVudGlmaWVyKSB7CisgIGNvbnN0IEdpb1Byb3BlcnRpZXMgKnByb3BlcnRpZXMgPSBnaW9HZXRQcm9wZXJ0aWVzKGlkZW50aWZpZXIsIE5VTEwpOworICBpZiAocHJvcGVydGllcyA9PSBOVUxMKSByZXR1cm4gTlVMTDsKKyAgcmV0dXJuIHByb3BlcnRpZXMtPnB1YmxpYzsKK30KKworR2lvRW5kcG9pbnQgKgorZ2lvQ29ubmVjdFJlc291cmNlICgKKyAgY29uc3QgY2hhciAqaWRlbnRpZmllciwKKyAgY29uc3QgR2lvRGVzY3JpcHRvciAqZGVzY3JpcHRvcgorKSB7CisgIGNvbnN0IEdpb1Byb3BlcnRpZXMgKnByb3BlcnRpZXMgPSBnaW9HZXRQcm9wZXJ0aWVzKCZpZGVudGlmaWVyLCBkZXNjcmlwdG9yKTsKKworICBpZiAocHJvcGVydGllcykgeworICAgIEdpb0VuZHBvaW50ICplbmRwb2ludDsKKworICAgIGlmICgoZW5kcG9pbnQgPSBtYWxsb2Moc2l6ZW9mKCplbmRwb2ludCkpKSkgeworICAgICAgbWVtc2V0KGVuZHBvaW50LCAwLCBzaXplb2YoKmVuZHBvaW50KSk7CisgICAgICBlbmRwb2ludC0+cmVmZXJlbmNlQ291bnQgPSAxOworCisgICAgICBlbmRwb2ludC0+cmVzb3VyY2VUeXBlID0gcHJvcGVydGllcy0+cHVibGljLT50eXBlLmlkZW50aWZpZXI7CisgICAgICBlbmRwb2ludC0+Ynl0ZXNQZXJTZWNvbmQgPSAwOworCisgICAgICBlbmRwb2ludC0+aW5wdXQuZXJyb3IgPSAwOworICAgICAgZW5kcG9pbnQtPmlucHV0LmZyb20gPSAwOworICAgICAgZW5kcG9pbnQtPmlucHV0LnRvID0gMDsKKworICAgICAgaWYgKGRlc2NyaXB0b3IgJiYgcHJvcGVydGllcy0+cHJpdmF0ZS0+Z2V0T3B0aW9ucykgeworICAgICAgICBlbmRwb2ludC0+b3B0aW9ucyA9ICpwcm9wZXJ0aWVzLT5wcml2YXRlLT5nZXRPcHRpb25zKGRlc2NyaXB0b3IpOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgZ2lvSW5pdGlhbGl6ZU9wdGlvbnMoJmVuZHBvaW50LT5vcHRpb25zKTsKKyAgICAgIH0KKworICAgICAgaWYgKHByb3BlcnRpZXMtPnByaXZhdGUtPmdldEhhbmRsZU1ldGhvZHMpIHsKKyAgICAgICAgZW5kcG9pbnQtPmhhbmRsZU1ldGhvZHMgPSBwcm9wZXJ0aWVzLT5wcml2YXRlLT5nZXRIYW5kbGVNZXRob2RzKCk7CisgICAgICB9IGVsc2UgeworICAgICAgICBlbmRwb2ludC0+aGFuZGxlTWV0aG9kcyA9IE5VTEw7CisgICAgICB9CisKKyAgICAgIGlmIChwcm9wZXJ0aWVzLT5wcml2YXRlLT5jb25uZWN0UmVzb3VyY2UpIHsKKyAgICAgICAgaWYgKChlbmRwb2ludC0+aGFuZGxlID0gcHJvcGVydGllcy0+cHJpdmF0ZS0+Y29ubmVjdFJlc291cmNlKGlkZW50aWZpZXIsIGRlc2NyaXB0b3IpKSkgeworICAgICAgICAgIHsKKyAgICAgICAgICAgIEdpb0dldENoYWluZWRFbmRwb2ludE1ldGhvZCAqZ2V0Q2hhaW5lZEVuZHBvaW50ID0gZW5kcG9pbnQtPmhhbmRsZU1ldGhvZHMtPmdldENoYWluZWRFbmRwb2ludDsKKworICAgICAgICAgICAgaWYgKGdldENoYWluZWRFbmRwb2ludCkgeworICAgICAgICAgICAgICBHaW9FbmRwb2ludCAqY2hhaW5lZEVuZHBvaW50ID0gZ2V0Q2hhaW5lZEVuZHBvaW50KGVuZHBvaW50LT5oYW5kbGUpOworCisgICAgICAgICAgICAgIGlmIChjaGFpbmVkRW5kcG9pbnQpIHsKKyAgICAgICAgICAgICAgICBjaGFpbmVkRW5kcG9pbnQtPnJlZmVyZW5jZUNvdW50ICs9IDE7CisgICAgICAgICAgICAgICAgZ2lvRGlzY29ubmVjdFJlc291cmNlKGVuZHBvaW50KTsKKyAgICAgICAgICAgICAgICByZXR1cm4gY2hhaW5lZEVuZHBvaW50OworICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgfQorCisgICAgICAgICAgaWYgKCFwcm9wZXJ0aWVzLT5wcml2YXRlLT5wcmVwYXJlRW5kcG9pbnQgfHwgcHJvcGVydGllcy0+cHJpdmF0ZS0+cHJlcGFyZUVuZHBvaW50KGVuZHBvaW50KSkgeworICAgICAgICAgICAgaWYgKGdpb1N0YXJ0RW5kcG9pbnQoZW5kcG9pbnQpKSB7CisgICAgICAgICAgICAgIHJldHVybiBlbmRwb2ludDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9CisKKyAgICAgICAgICB7CisgICAgICAgICAgICBpbnQgb3JpZ2luYWxFcnJubyA9IGVycm5vOworICAgICAgICAgICAgZ2lvRGlzY29ubmVjdFJlc291cmNlKGVuZHBvaW50KTsKKyAgICAgICAgICAgIGVycm5vID0gb3JpZ2luYWxFcnJubzsKKyAgICAgICAgICB9CisKKyAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorICAgICAgfSBlbHNlIHsKKyAgICAgICAgbG9nVW5zdXBwb3J0ZWRPcGVyYXRpb24oImNvbm5lY3RSZXNvdXJjZSIpOworICAgICAgfQorCisgICAgICBmcmVlKGVuZHBvaW50KTsKKyAgICB9IGVsc2UgeworICAgICAgbG9nTWFsbG9jRXJyb3IoKTsKKyAgICB9CisgIH0KKworICByZXR1cm4gTlVMTDsKK30KKworY29uc3Qgdm9pZCAqCitnaW9HZXRBcHBsaWNhdGlvbkRhdGEgKEdpb0VuZHBvaW50ICplbmRwb2ludCkgeworICByZXR1cm4gZW5kcG9pbnQtPm9wdGlvbnMuYXBwbGljYXRpb25EYXRhOworfQorCitpbnQKK2dpb0Rpc2Nvbm5lY3RSZXNvdXJjZSAoR2lvRW5kcG9pbnQgKmVuZHBvaW50KSB7CisgIGlmICgtLWVuZHBvaW50LT5yZWZlcmVuY2VDb3VudCA+IDApIHJldHVybiAxOworCisgIGludCBvayA9IDA7CisgIEdpb0Rpc2Nvbm5lY3RSZXNvdXJjZU1ldGhvZCAqbWV0aG9kID0gZW5kcG9pbnQtPmhhbmRsZU1ldGhvZHMtPmRpc2Nvbm5lY3RSZXNvdXJjZTsKKworICBpZiAoIW1ldGhvZCkgeworICAgIGxvZ1Vuc3VwcG9ydGVkT3BlcmF0aW9uKCJkaXNjb25uZWN0UmVzb3VyY2UiKTsKKyAgICBlcnJubyA9IEVOT1NZUzsKKyAgfSBlbHNlIGlmIChtZXRob2QoZW5kcG9pbnQtPmhhbmRsZSkpIHsKKyAgICBvayA9IDE7CisgIH0KKworICBmcmVlKGVuZHBvaW50KTsKKyAgcmV0dXJuIG9rOworfQorCitjb25zdCBjaGFyICoKK2dpb01ha2VSZXNvdXJjZUlkZW50aWZpZXIgKEdpb0VuZHBvaW50ICplbmRwb2ludCwgY2hhciAqYnVmZmVyLCBzaXplX3Qgc2l6ZSkgeworICBjb25zdCBjaGFyICppZGVudGlmaWVyID0gTlVMTDsKKyAgTWFrZVJlc291cmNlSWRlbnRpZmllck1ldGhvZCAqbWV0aG9kID0gZW5kcG9pbnQtPmhhbmRsZU1ldGhvZHMtPm1ha2VSZXNvdXJjZUlkZW50aWZpZXI7CisKKyAgaWYgKCFtZXRob2QpIHsKKyAgICBsb2dVbnN1cHBvcnRlZE9wZXJhdGlvbigibWFrZVJlc291cmNlSWRlbnRpZmllciIpOworICAgIGVycm5vID0gRU5PU1lTOworICB9IGVsc2UgeworICAgIGlkZW50aWZpZXIgPSBtZXRob2QoZW5kcG9pbnQtPmhhbmRsZSwgYnVmZmVyLCBzaXplKTsKKyAgfQorCisgIHJldHVybiBpZGVudGlmaWVyOworfQorCitjaGFyICoKK2dpb0dldFJlc291cmNlSWRlbnRpZmllciAoR2lvRW5kcG9pbnQgKmVuZHBvaW50KSB7CisgIGNoYXIgYnVmZmVyWzBYMTAwXTsKKyAgY29uc3QgY2hhciAqaWRlbnRpZmllciA9IGdpb01ha2VSZXNvdXJjZUlkZW50aWZpZXIoZW5kcG9pbnQsIGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlcikpOworICBpZiAoIWlkZW50aWZpZXIpIHJldHVybiBOVUxMOworCisgIGNoYXIgKmNvcHkgPSBzdHJkdXAoaWRlbnRpZmllcik7CisgIGlmICghY29weSkgbG9nTWFsbG9jRXJyb3IoKTsKKyAgcmV0dXJuIGNvcHk7Cit9CisKK2NoYXIgKgorZ2lvR2V0UmVzb3VyY2VOYW1lIChHaW9FbmRwb2ludCAqZW5kcG9pbnQpIHsKKyAgY2hhciAqbmFtZSA9IE5VTEw7CisgIEdpb0dldFJlc291cmNlTmFtZU1ldGhvZCAqbWV0aG9kID0gZW5kcG9pbnQtPmhhbmRsZU1ldGhvZHMtPmdldFJlc291cmNlTmFtZTsKKworICBpZiAoIW1ldGhvZCkgeworICAgIGxvZ1Vuc3VwcG9ydGVkT3BlcmF0aW9uKCJnZXRSZXNvdXJjZU5hbWUiKTsKKyAgICBlcnJubyA9IEVOT1NZUzsKKyAgfSBlbHNlIHsKKyAgICBuYW1lID0gbWV0aG9kKGVuZHBvaW50LT5oYW5kbGUsIGVuZHBvaW50LT5vcHRpb25zLnJlcXVlc3RUaW1lb3V0KTsKKyAgfQorCisgIHJldHVybiBuYW1lOworfQorCitHaW9UeXBlSWRlbnRpZmllcgorZ2lvR2V0UmVzb3VyY2VUeXBlIChHaW9FbmRwb2ludCAqZW5kcG9pbnQpIHsKKyAgcmV0dXJuIGVuZHBvaW50LT5yZXNvdXJjZVR5cGU7Cit9CisKK3ZvaWQgKgorZ2lvR2V0UmVzb3VyY2VPYmplY3QgKEdpb0VuZHBvaW50ICplbmRwb2ludCkgeworICBHaW9HZXRSZXNvdXJjZU9iamVjdE1ldGhvZCAqbWV0aG9kID0gZW5kcG9pbnQtPmhhbmRsZU1ldGhvZHMtPmdldFJlc291cmNlT2JqZWN0OworCisgIGlmIChtZXRob2QpIHJldHVybiBtZXRob2QoZW5kcG9pbnQtPmhhbmRsZSk7CisgIGxvZ1Vuc3VwcG9ydGVkT3BlcmF0aW9uKCJnZXRSZXNvdXJjZU9iamVjdCIpOworICByZXR1cm4gTlVMTDsKK30KKworc3NpemVfdAorZ2lvV3JpdGVEYXRhIChHaW9FbmRwb2ludCAqZW5kcG9pbnQsIGNvbnN0IHZvaWQgKmRhdGEsIHNpemVfdCBzaXplKSB7CisgIEdpb1dyaXRlRGF0YU1ldGhvZCAqbWV0aG9kID0gZW5kcG9pbnQtPmhhbmRsZU1ldGhvZHMtPndyaXRlRGF0YTsKKworICBpZiAoIW1ldGhvZCkgeworICAgIGxvZ1Vuc3VwcG9ydGVkT3BlcmF0aW9uKCJ3cml0ZURhdGEiKTsKKyAgICBlcnJubyA9IEVOT1NZUzsKKyAgICByZXR1cm4gLTE7CisgIH0KKworICBsb2dCeXRlcyhMT0dfQ0FURUdPUlkoR0VORVJJQ19JTyksICJvdXRwdXQiLCBkYXRhLCBzaXplKTsKKworICBzc2l6ZV90IHJlc3VsdCA9IG1ldGhvZChlbmRwb2ludC0+aGFuZGxlLCBkYXRhLCBzaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICBlbmRwb2ludC0+b3B0aW9ucy5vdXRwdXRUaW1lb3V0KTsKKworICBpZiAoZW5kcG9pbnQtPm9wdGlvbnMuaWdub3JlV3JpdGVUaW1lb3V0cykgeworICAgIGlmIChyZXN1bHQgPT0gLTEpIHsKKyAgICAgIGlmICgoZXJybm8gPT0gRUFHQUlOKQorI2lmZGVmIEVUSU1FRE9VVAorICAgICAgIHx8IChlcnJubyA9PSBFVElNRURPVVQpCisjZW5kaWYgLyogRVRJTUVET1VUICovCisgICAgICApIHJlc3VsdCA9IHNpemU7CisgICAgfQorICB9CisKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworaW50CitnaW9Bd2FpdElucHV0IChHaW9FbmRwb2ludCAqZW5kcG9pbnQsIGludCB0aW1lb3V0KSB7CisgIEdpb0F3YWl0SW5wdXRNZXRob2QgKm1ldGhvZCA9IGVuZHBvaW50LT5oYW5kbGVNZXRob2RzLT5hd2FpdElucHV0OworCisgIGlmICghbWV0aG9kKSB7CisgICAgbG9nVW5zdXBwb3J0ZWRPcGVyYXRpb24oImF3YWl0SW5wdXQiKTsKKyAgICBlcnJubyA9IEVOT1NZUzsKKyAgICByZXR1cm4gMDsKKyAgfQorCisgIGlmIChlbmRwb2ludC0+aW5wdXQudG8gLSBlbmRwb2ludC0+aW5wdXQuZnJvbSkgcmV0dXJuIDE7CisKKyAgcmV0dXJuIG1ldGhvZChlbmRwb2ludC0+aGFuZGxlLCB0aW1lb3V0KTsKK30KKworc3NpemVfdAorZ2lvUmVhZERhdGEgKEdpb0VuZHBvaW50ICplbmRwb2ludCwgdm9pZCAqYnVmZmVyLCBzaXplX3Qgc2l6ZSwgaW50IHdhaXQpIHsKKyAgR2lvUmVhZERhdGFNZXRob2QgKm1ldGhvZCA9IGVuZHBvaW50LT5oYW5kbGVNZXRob2RzLT5yZWFkRGF0YTsKKworICBpZiAoIW1ldGhvZCkgeworICAgIGxvZ1Vuc3VwcG9ydGVkT3BlcmF0aW9uKCJyZWFkRGF0YSIpOworICAgIGVycm5vID0gRU5PU1lTOworICAgIHJldHVybiAtMTsKKyAgfQorCisgIHsKKyAgICB1bnNpZ25lZCBjaGFyICpzdGFydCA9IGJ1ZmZlcjsKKyAgICB1bnNpZ25lZCBjaGFyICpuZXh0ID0gc3RhcnQ7CisKKyAgICB3aGlsZSAoc2l6ZSkgeworICAgICAgeworICAgICAgICB1bnNpZ25lZCBpbnQgY291bnQgPSBlbmRwb2ludC0+aW5wdXQudG8gLSBlbmRwb2ludC0+aW5wdXQuZnJvbTsKKworICAgICAgICBpZiAoY291bnQpIHsKKyAgICAgICAgICBpZiAoY291bnQgPiBzaXplKSBjb3VudCA9IHNpemU7CisgICAgICAgICAgbWVtY3B5KG5leHQsICZlbmRwb2ludC0+aW5wdXQuYnVmZmVyW2VuZHBvaW50LT5pbnB1dC5mcm9tXSwgY291bnQpOworCisgICAgICAgICAgZW5kcG9pbnQtPmlucHV0LmZyb20gKz0gY291bnQ7CisgICAgICAgICAgbmV4dCArPSBjb3VudDsKKyAgICAgICAgICBzaXplIC09IGNvdW50OworICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgZW5kcG9pbnQtPmlucHV0LmZyb20gPSBlbmRwb2ludC0+aW5wdXQudG8gPSAwOworICAgICAgfQorCisgICAgICBpZiAoZW5kcG9pbnQtPmlucHV0LmVycm9yKSB7CisgICAgICAgIGlmIChuZXh0ICE9IHN0YXJ0KSBicmVhazsKKyAgICAgICAgZXJybm8gPSBlbmRwb2ludC0+aW5wdXQuZXJyb3I7CisgICAgICAgIGVuZHBvaW50LT5pbnB1dC5lcnJvciA9IDA7CisgICAgICAgIHJldHVybiAtMTsKKyAgICAgIH0KKworICAgICAgeworICAgICAgICBzc2l6ZV90IHJlc3VsdCA9IG1ldGhvZChlbmRwb2ludC0+aGFuZGxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZW5kcG9pbnQtPmlucHV0LmJ1ZmZlcltlbmRwb2ludC0+aW5wdXQudG9dLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YoZW5kcG9pbnQtPmlucHV0LmJ1ZmZlcikgLSBlbmRwb2ludC0+aW5wdXQudG8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh3YWl0PyBlbmRwb2ludC0+b3B0aW9ucy5pbnB1dFRpbWVvdXQ6IDApLCAwKTsKKworICAgICAgICBpZiAocmVzdWx0ID4gMCkgeworICAgICAgICAgIGxvZ0J5dGVzKExPR19DQVRFR09SWShHRU5FUklDX0lPKSwgImlucHV0IiwgJmVuZHBvaW50LT5pbnB1dC5idWZmZXJbZW5kcG9pbnQtPmlucHV0LnRvXSwgcmVzdWx0KTsKKyAgICAgICAgICBlbmRwb2ludC0+aW5wdXQudG8gKz0gcmVzdWx0OworICAgICAgICAgIHdhaXQgPSAxOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgIGlmICghcmVzdWx0KSBicmVhazsKKyAgICAgICAgICBpZiAoZXJybm8gPT0gRUFHQUlOKSBicmVhazsKKyAgICAgICAgICBlbmRwb2ludC0+aW5wdXQuZXJyb3IgPSBlcnJubzsKKyAgICAgICAgfQorICAgICAgfQorICAgIH0KKworICAgIGlmIChuZXh0ID09IHN0YXJ0KSBlcnJubyA9IEVBR0FJTjsKKyAgICByZXR1cm4gbmV4dCAtIHN0YXJ0OworICB9Cit9CisKK2ludAorZ2lvUmVhZEJ5dGUgKEdpb0VuZHBvaW50ICplbmRwb2ludCwgdW5zaWduZWQgY2hhciAqYnl0ZSwgaW50IHdhaXQpIHsKKyAgc3NpemVfdCByZXN1bHQgPSBnaW9SZWFkRGF0YShlbmRwb2ludCwgYnl0ZSwgMSwgd2FpdCk7CisgIGlmIChyZXN1bHQgPiAwKSByZXR1cm4gMTsKKyAgaWYgKHJlc3VsdCA9PSAwKSBlcnJubyA9IEVBR0FJTjsKKyAgcmV0dXJuIDA7Cit9CisKK2ludAorZ2lvRGlzY2FyZElucHV0IChHaW9FbmRwb2ludCAqZW5kcG9pbnQpIHsKKyAgdW5zaWduZWQgY2hhciBieXRlOworICB3aGlsZSAoZ2lvUmVhZEJ5dGUoZW5kcG9pbnQsICZieXRlLCAwKSk7CisgIHJldHVybiBlcnJubyA9PSBFQUdBSU47Cit9CisKK2ludAorZ2lvTW9uaXRvcklucHV0IChHaW9FbmRwb2ludCAqZW5kcG9pbnQsIEFzeW5jTW9uaXRvckNhbGxiYWNrICpjYWxsYmFjaywgdm9pZCAqZGF0YSkgeworICBHaW9Nb25pdG9ySW5wdXRNZXRob2QgKm1ldGhvZCA9IGVuZHBvaW50LT5oYW5kbGVNZXRob2RzLT5tb25pdG9ySW5wdXQ7CisKKyAgaWYgKG1ldGhvZCkgeworICAgIGlmIChtZXRob2QoZW5kcG9pbnQtPmhhbmRsZSwgY2FsbGJhY2ssIGRhdGEpKSB7CisgICAgICByZXR1cm4gMTsKKyAgICB9CisgIH0KKworICByZXR1cm4gMDsKK30KKworaW50CitnaW9SZWNvbmZpZ3VyZVJlc291cmNlICgKKyAgR2lvRW5kcG9pbnQgKmVuZHBvaW50LAorICBjb25zdCBTZXJpYWxQYXJhbWV0ZXJzICpwYXJhbWV0ZXJzCispIHsKKyAgaW50IG9rID0gMTsKKyAgR2lvUmVjb25maWd1cmVSZXNvdXJjZU1ldGhvZCAqbWV0aG9kID0gZW5kcG9pbnQtPmhhbmRsZU1ldGhvZHMtPnJlY29uZmlndXJlUmVzb3VyY2U7CisKKyAgaWYgKCFtZXRob2QpIHsKKyAgICBsb2dVbnN1cHBvcnRlZE9wZXJhdGlvbigicmVjb25maWd1cmVSZXNvdXJjZSIpOworICB9IGVsc2UgaWYgKG1ldGhvZChlbmRwb2ludC0+aGFuZGxlLCBwYXJhbWV0ZXJzKSkgeworICAgIGdpb1NldEJ5dGVzUGVyU2Vjb25kKGVuZHBvaW50LCBwYXJhbWV0ZXJzKTsKKyAgfSBlbHNlIHsKKyAgICBvayA9IDA7CisgIH0KKworICByZXR1cm4gb2s7Cit9CisKK3Vuc2lnbmVkIGludAorZ2lvR2V0Qnl0ZXNQZXJTZWNvbmQgKEdpb0VuZHBvaW50ICplbmRwb2ludCkgeworICByZXR1cm4gZW5kcG9pbnQtPmJ5dGVzUGVyU2Vjb25kOworfQorCit1bnNpZ25lZCBpbnQKK2dpb0dldE1pbGxpc2Vjb25kc1RvVHJhbnNmZXIgKEdpb0VuZHBvaW50ICplbmRwb2ludCwgc2l6ZV90IGJ5dGVzKSB7CisgIHJldHVybiBlbmRwb2ludC0+Ynl0ZXNQZXJTZWNvbmQ/ICgoKGJ5dGVzICogMTAwMCkgLyBlbmRwb2ludC0+Ynl0ZXNQZXJTZWNvbmQpICsgMSk6IDA7Cit9CisKK3NzaXplX3QKK2dpb1RlbGxSZXNvdXJjZSAoCisgIEdpb0VuZHBvaW50ICplbmRwb2ludCwKKyAgdWludDhfdCByZWNpcGllbnQsIHVpbnQ4X3QgdHlwZSwKKyAgdWludDhfdCByZXF1ZXN0LCB1aW50MTZfdCB2YWx1ZSwgdWludDE2X3QgaW5kZXgsCisgIGNvbnN0IHZvaWQgKmRhdGEsIHVpbnQxNl90IHNpemUKKykgeworICBHaW9UZWxsUmVzb3VyY2VNZXRob2QgKm1ldGhvZCA9IGVuZHBvaW50LT5oYW5kbGVNZXRob2RzLT50ZWxsUmVzb3VyY2U7CisKKyAgaWYgKCFtZXRob2QpIHsKKyAgICBsb2dVbnN1cHBvcnRlZE9wZXJhdGlvbigidGVsbFJlc291cmNlIik7CisgICAgZXJybm8gPSBFTk9TWVM7CisgICAgcmV0dXJuIC0xOworICB9CisKKyAgcmV0dXJuIG1ldGhvZChlbmRwb2ludC0+aGFuZGxlLCByZWNpcGllbnQsIHR5cGUsCisgICAgICAgICAgICAgICAgcmVxdWVzdCwgdmFsdWUsIGluZGV4LCBkYXRhLCBzaXplLAorICAgICAgICAgICAgICAgIGVuZHBvaW50LT5vcHRpb25zLnJlcXVlc3RUaW1lb3V0KTsKK30KKworc3NpemVfdAorZ2lvQXNrUmVzb3VyY2UgKAorICBHaW9FbmRwb2ludCAqZW5kcG9pbnQsCisgIHVpbnQ4X3QgcmVjaXBpZW50LCB1aW50OF90IHR5cGUsCisgIHVpbnQ4X3QgcmVxdWVzdCwgdWludDE2X3QgdmFsdWUsIHVpbnQxNl90IGluZGV4LAorICB2b2lkICpidWZmZXIsIHVpbnQxNl90IHNpemUKKykgeworICBHaW9Bc2tSZXNvdXJjZU1ldGhvZCAqbWV0aG9kID0gZW5kcG9pbnQtPmhhbmRsZU1ldGhvZHMtPmFza1Jlc291cmNlOworCisgIGlmICghbWV0aG9kKSB7CisgICAgbG9nVW5zdXBwb3J0ZWRPcGVyYXRpb24oImFza1Jlc291cmNlIik7CisgICAgZXJybm8gPSBFTk9TWVM7CisgICAgcmV0dXJuIC0xOworICB9CisKKyAgcmV0dXJuIG1ldGhvZChlbmRwb2ludC0+aGFuZGxlLCByZWNpcGllbnQsIHR5cGUsCisgICAgICAgICAgICAgICAgcmVxdWVzdCwgdmFsdWUsIGluZGV4LCBidWZmZXIsIHNpemUsCisgICAgICAgICAgICAgICAgZW5kcG9pbnQtPm9wdGlvbnMucmVxdWVzdFRpbWVvdXQpOworfQorCitIaWRJdGVtc0Rlc2NyaXB0b3IgKgorZ2lvR2V0SGlkRGVzY3JpcHRvck1ldGhvZCAoCisgIEdpb0VuZHBvaW50ICplbmRwb2ludCkgeworICBHaW9HZXRIaWREZXNjcmlwdG9yTWV0aG9kICptZXRob2QgPSBlbmRwb2ludC0+aGFuZGxlTWV0aG9kcy0+Z2V0SGlkRGVzY3JpcHRvcjsKKworICBpZiAoIW1ldGhvZCkgeworICAgIGxvZ1Vuc3VwcG9ydGVkT3BlcmF0aW9uKCJnZXRIaWREZXNjcmlwdG9yIik7CisgICAgZXJybm8gPSBFTk9TWVM7CisgICAgcmV0dXJuIE5VTEw7CisgIH0KKworICByZXR1cm4gbWV0aG9kKAorICAgIGVuZHBvaW50LT5oYW5kbGUKKyAgKTsKK30KKworaW50CitnaW9HZXRIaWRSZXBvcnRTaXplICgKKyAgR2lvRW5kcG9pbnQgKmVuZHBvaW50LAorICBIaWRSZXBvcnRJZGVudGlmaWVyIGlkZW50aWZpZXIsCisgIEhpZFJlcG9ydFNpemUgKnNpemUKKykgeworICBHaW9HZXRIaWRSZXBvcnRTaXplTWV0aG9kICptZXRob2QgPSBlbmRwb2ludC0+aGFuZGxlTWV0aG9kcy0+Z2V0SGlkUmVwb3J0U2l6ZTsKKworICBpZiAoIW1ldGhvZCkgeworICAgIGxvZ1Vuc3VwcG9ydGVkT3BlcmF0aW9uKCJnZXRIaWRSZXBvcnRTaXplIik7CisgICAgZXJybm8gPSBFTk9TWVM7CisgICAgcmV0dXJuIDA7CisgIH0KKworICBpbnQgb2sgPSBtZXRob2QoCisgICAgZW5kcG9pbnQtPmhhbmRsZSwgaWRlbnRpZmllciwgc2l6ZSwKKyAgICBlbmRwb2ludC0+b3B0aW9ucy5yZXF1ZXN0VGltZW91dAorICApOworCisgIGlmIChvaykgcmV0dXJuIDE7CisgIGxvZ01lc3NhZ2UoTE9HX1dBUk5JTkcsICJISUQgcmVwb3J0IG5vdCBmb3VuZDogJTAyWCIsIGlkZW50aWZpZXIpOworICByZXR1cm4gMDsKK30KKworc2l6ZV90CitnaW9HZXRIaWRJbnB1dFNpemUgKAorICBHaW9FbmRwb2ludCAqZW5kcG9pbnQsCisgIEhpZFJlcG9ydElkZW50aWZpZXIgaWRlbnRpZmllcgorKSB7CisgIEhpZFJlcG9ydFNpemUgc2l6ZTsKKyAgaWYgKCFnaW9HZXRIaWRSZXBvcnRTaXplKGVuZHBvaW50LCBpZGVudGlmaWVyLCAmc2l6ZSkpIHJldHVybiAwOworICByZXR1cm4gc2l6ZS5pbnB1dDsKK30KKworc2l6ZV90CitnaW9HZXRIaWRPdXRwdXRTaXplICgKKyAgR2lvRW5kcG9pbnQgKmVuZHBvaW50LAorICBIaWRSZXBvcnRJZGVudGlmaWVyIGlkZW50aWZpZXIKKykgeworICBIaWRSZXBvcnRTaXplIHNpemU7CisgIGlmICghZ2lvR2V0SGlkUmVwb3J0U2l6ZShlbmRwb2ludCwgaWRlbnRpZmllciwgJnNpemUpKSByZXR1cm4gMDsKKyAgcmV0dXJuIHNpemUub3V0cHV0OworfQorCitzaXplX3QKK2dpb0dldEhpZEZlYXR1cmVTaXplICgKKyAgR2lvRW5kcG9pbnQgKmVuZHBvaW50LAorICBIaWRSZXBvcnRJZGVudGlmaWVyIGlkZW50aWZpZXIKKykgeworICBIaWRSZXBvcnRTaXplIHNpemU7CisgIGlmICghZ2lvR2V0SGlkUmVwb3J0U2l6ZShlbmRwb2ludCwgaWRlbnRpZmllciwgJnNpemUpKSByZXR1cm4gMDsKKyAgcmV0dXJuIHNpemUuZmVhdHVyZTsKK30KKworc3NpemVfdAorZ2lvR2V0SGlkUmVwb3J0ICgKKyAgR2lvRW5kcG9pbnQgKmVuZHBvaW50LCBIaWRSZXBvcnRJZGVudGlmaWVyIGlkZW50aWZpZXIsCisgIHVuc2lnbmVkIGNoYXIgKmJ1ZmZlciwgc2l6ZV90IHNpemUKKykgeworICBHaW9HZXRIaWRSZXBvcnRNZXRob2QgKm1ldGhvZCA9IGVuZHBvaW50LT5oYW5kbGVNZXRob2RzLT5nZXRIaWRSZXBvcnQ7CisKKyAgaWYgKCFtZXRob2QpIHsKKyAgICBsb2dVbnN1cHBvcnRlZE9wZXJhdGlvbigiZ2V0SGlkUmVwb3J0Iik7CisgICAgZXJybm8gPSBFTk9TWVM7CisgICAgcmV0dXJuIC0xOworICB9CisKKyAgYnVmZmVyWzBdID0gaWRlbnRpZmllcjsKKyAgcmV0dXJuIG1ldGhvZChlbmRwb2ludC0+aGFuZGxlLCBpZGVudGlmaWVyLAorICAgICAgICAgICAgICAgIGJ1ZmZlciwgc2l6ZSwgZW5kcG9pbnQtPm9wdGlvbnMucmVxdWVzdFRpbWVvdXQpOworfQorCitzc2l6ZV90CitnaW9SZWFkSGlkUmVwb3J0ICgKKyAgR2lvRW5kcG9pbnQgKmVuZHBvaW50LAorICB1bnNpZ25lZCBjaGFyICpidWZmZXIsIHNpemVfdCBzaXplCispIHsKKyAgcmV0dXJuIGdpb0dldEhpZFJlcG9ydChlbmRwb2ludCwgYnVmZmVyWzBdLCBidWZmZXIsIHNpemUpOworfQorCitzc2l6ZV90CitnaW9TZXRIaWRSZXBvcnQgKAorICBHaW9FbmRwb2ludCAqZW5kcG9pbnQsIEhpZFJlcG9ydElkZW50aWZpZXIgaWRlbnRpZmllciwKKyAgY29uc3QgdW5zaWduZWQgY2hhciAqZGF0YSwgc2l6ZV90IHNpemUKKykgeworICBHaW9TZXRIaWRSZXBvcnRNZXRob2QgKm1ldGhvZCA9IGVuZHBvaW50LT5oYW5kbGVNZXRob2RzLT5zZXRIaWRSZXBvcnQ7CisKKyAgaWYgKCFtZXRob2QpIHsKKyAgICBsb2dVbnN1cHBvcnRlZE9wZXJhdGlvbigic2V0SGlkUmVwb3J0Iik7CisgICAgZXJybm8gPSBFTk9TWVM7CisgICAgcmV0dXJuIC0xOworICB9CisKKyAgcmV0dXJuIG1ldGhvZChlbmRwb2ludC0+aGFuZGxlLCBpZGVudGlmaWVyLAorICAgICAgICAgICAgICAgIGRhdGEsIHNpemUsIGVuZHBvaW50LT5vcHRpb25zLnJlcXVlc3RUaW1lb3V0KTsKK30KKworc3NpemVfdAorZ2lvV3JpdGVIaWRSZXBvcnQgKAorICBHaW9FbmRwb2ludCAqZW5kcG9pbnQsCisgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGEsIHNpemVfdCBzaXplCispIHsKKyAgSGlkUmVwb3J0SWRlbnRpZmllciBpZGVudGlmaWVyID0gZGF0YVswXTsKKyAgaWYgKCFpZGVudGlmaWVyKSBkYXRhICs9IDEsIHNpemUgLT0gMTsKKyAgcmV0dXJuIGdpb1NldEhpZFJlcG9ydChlbmRwb2ludCwgaWRlbnRpZmllciwgZGF0YSwgc2l6ZSk7Cit9CisKK3NzaXplX3QKK2dpb0dldEhpZEZlYXR1cmUgKAorICBHaW9FbmRwb2ludCAqZW5kcG9pbnQsIEhpZFJlcG9ydElkZW50aWZpZXIgaWRlbnRpZmllciwKKyAgdW5zaWduZWQgY2hhciAqYnVmZmVyLCBzaXplX3Qgc2l6ZQorKSB7CisgIEdpb0dldEhpZEZlYXR1cmVNZXRob2QgKm1ldGhvZCA9IGVuZHBvaW50LT5oYW5kbGVNZXRob2RzLT5nZXRIaWRGZWF0dXJlOworCisgIGlmICghbWV0aG9kKSB7CisgICAgbG9nVW5zdXBwb3J0ZWRPcGVyYXRpb24oImdldEhpZEZlYXR1cmUiKTsKKyAgICBlcnJubyA9IEVOT1NZUzsKKyAgICByZXR1cm4gLTE7CisgIH0KKworICBidWZmZXJbMF0gPSBpZGVudGlmaWVyOworICByZXR1cm4gbWV0aG9kKGVuZHBvaW50LT5oYW5kbGUsIGlkZW50aWZpZXIsCisgICAgICAgICAgICAgICAgYnVmZmVyLCBzaXplLCBlbmRwb2ludC0+b3B0aW9ucy5yZXF1ZXN0VGltZW91dCk7Cit9CisKK3NzaXplX3QKK2dpb1JlYWRIaWRGZWF0dXJlICgKKyAgR2lvRW5kcG9pbnQgKmVuZHBvaW50LAorICB1bnNpZ25lZCBjaGFyICpidWZmZXIsIHNpemVfdCBzaXplCispIHsKKyAgcmV0dXJuIGdpb0dldEhpZEZlYXR1cmUoZW5kcG9pbnQsIGJ1ZmZlclswXSwgYnVmZmVyLCBzaXplKTsKK30KKworc3NpemVfdAorZ2lvU2V0SGlkRmVhdHVyZSAoCisgIEdpb0VuZHBvaW50ICplbmRwb2ludCwgSGlkUmVwb3J0SWRlbnRpZmllciBpZGVudGlmaWVyLAorICBjb25zdCB1bnNpZ25lZCBjaGFyICpkYXRhLCBzaXplX3Qgc2l6ZQorKSB7CisgIEdpb1NldEhpZEZlYXR1cmVNZXRob2QgKm1ldGhvZCA9IGVuZHBvaW50LT5oYW5kbGVNZXRob2RzLT5zZXRIaWRGZWF0dXJlOworCisgIGlmICghbWV0aG9kKSB7CisgICAgbG9nVW5zdXBwb3J0ZWRPcGVyYXRpb24oInNldEhpZEZlYXR1cmUiKTsKKyAgICBlcnJubyA9IEVOT1NZUzsKKyAgICByZXR1cm4gLTE7CisgIH0KKworICByZXR1cm4gbWV0aG9kKGVuZHBvaW50LT5oYW5kbGUsIGlkZW50aWZpZXIsCisgICAgICAgICAgICAgICAgZGF0YSwgc2l6ZSwgZW5kcG9pbnQtPm9wdGlvbnMucmVxdWVzdFRpbWVvdXQpOworfQorCitzc2l6ZV90CitnaW9Xcml0ZUhpZEZlYXR1cmUgKAorICBHaW9FbmRwb2ludCAqZW5kcG9pbnQsCisgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGEsIHNpemVfdCBzaXplCispIHsKKyAgSGlkUmVwb3J0SWRlbnRpZmllciBpZGVudGlmaWVyID0gZGF0YVswXTsKKyAgaWYgKCFpZGVudGlmaWVyKSBkYXRhICs9IDEsIHNpemUgLT0gMTsKKyAgcmV0dXJuIGdpb1NldEhpZEZlYXR1cmUoZW5kcG9pbnQsIGlkZW50aWZpZXIsIGRhdGEsIHNpemUpOworfQorCitzdHJ1Y3QgR2lvSGFuZGxlSW5wdXRPYmplY3RTdHJ1Y3QgeworICBHaW9FbmRwb2ludCAqZW5kcG9pbnQ7CisgIEFzeW5jSGFuZGxlIHBvbGxBbGFybTsKKworICBHaW9JbnB1dEhhbmRsZXIgKmhhbmRsZXI7CisgIHZvaWQgKmRhdGE7Cit9OworCitzdGF0aWMgaW50CitoYW5kbGVJbnB1dCAoR2lvSGFuZGxlSW5wdXRPYmplY3QgKmhpbywgaW50IGVycm9yKSB7CisgIEdpb0hhbmRsZUlucHV0UGFyYW1ldGVycyBwYXJhbWV0ZXJzID0geworICAgIC5lcnJvciA9IGVycm9yLAorICAgIC5kYXRhID0gaGlvLT5kYXRhCisgIH07CisKKyAgcmV0dXJuIGhpby0+aGFuZGxlcigmcGFyYW1ldGVycyk7Cit9CisKK0FTWU5DX01PTklUT1JfQ0FMTEJBQ0soZ2lvSW5wdXRNb25pdG9yKSB7CisgIEdpb0hhbmRsZUlucHV0T2JqZWN0ICpoaW8gPSBwYXJhbWV0ZXJzLT5kYXRhOworCisgIGhhbmRsZUlucHV0KGhpbywgcGFyYW1ldGVycy0+ZXJyb3IpOworICByZXR1cm4gMTsKK30KKworQVNZTkNfQUxBUk1fQ0FMTEJBQ0soaGFuZGxlSW5wdXRBbGFybSkgeworICBHaW9IYW5kbGVJbnB1dE9iamVjdCAqaGlvID0gcGFyYW1ldGVycy0+ZGF0YTsKKworICBpZiAoaGFuZGxlSW5wdXQoaGlvLCAwKSkgYXN5bmNSZXNldEFsYXJtSW4oaGlvLT5wb2xsQWxhcm0sIDApOworfQorCitHaW9IYW5kbGVJbnB1dE9iamVjdCAqCitnaW9OZXdIYW5kbGVJbnB1dE9iamVjdCAoCisgIEdpb0VuZHBvaW50ICplbmRwb2ludCwgaW50IHBvbGxJbnRlcnZhbCwKKyAgR2lvSW5wdXRIYW5kbGVyICpoYW5kbGVyLCB2b2lkICpkYXRhCispIHsKKyAgR2lvSGFuZGxlSW5wdXRPYmplY3QgKmhpbzsKKworICBpZiAoKGhpbyA9IG1hbGxvYyhzaXplb2YoKmhpbykpKSkgeworICAgIG1lbXNldChoaW8sIDAsIHNpemVvZigqaGlvKSk7CisKKyAgICBoaW8tPmVuZHBvaW50ID0gZW5kcG9pbnQ7CisgICAgaGlvLT5wb2xsQWxhcm0gPSBOVUxMOworCisgICAgaGlvLT5oYW5kbGVyID0gaGFuZGxlcjsKKyAgICBoaW8tPmRhdGEgPSBkYXRhOworCisgICAgaWYgKGVuZHBvaW50KSB7CisgICAgICBpZiAoZ2lvTW9uaXRvcklucHV0KGVuZHBvaW50LCBnaW9JbnB1dE1vbml0b3IsIGhpbykpIHsKKyAgICAgICAgaGFuZGxlSW5wdXQoaGlvLCAwKTsKKyAgICAgICAgcmV0dXJuIGhpbzsKKyAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoYXN5bmNOZXdSZWxhdGl2ZUFsYXJtKCZoaW8tPnBvbGxBbGFybSwgMCwgaGFuZGxlSW5wdXRBbGFybSwgaGlvKSkgeworICAgICAgaWYgKGFzeW5jUmVzZXRBbGFybUludGVydmFsKGhpby0+cG9sbEFsYXJtLCBwb2xsSW50ZXJ2YWwpKSB7CisgICAgICAgIHJldHVybiBoaW87CisgICAgICB9CisKKyAgICAgIGFzeW5jQ2FuY2VsUmVxdWVzdChoaW8tPnBvbGxBbGFybSk7CisgICAgfQorCisgICAgZnJlZShoaW8pOworICB9IGVsc2UgeworICAgIGxvZ01hbGxvY0Vycm9yKCk7CisgIH0KKworICByZXR1cm4gTlVMTDsKK30KKwordm9pZAorZ2lvRGVzdHJveUhhbmRsZUlucHV0T2JqZWN0IChHaW9IYW5kbGVJbnB1dE9iamVjdCAqaGlvKSB7CisgIGlmIChoaW8tPnBvbGxBbGFybSkgeworICAgIGFzeW5jQ2FuY2VsUmVxdWVzdChoaW8tPnBvbGxBbGFybSk7CisgIH0gZWxzZSB7CisgICAgZ2lvTW9uaXRvcklucHV0KGhpby0+ZW5kcG9pbnQsIE5VTEwsIE5VTEwpOworICB9CisKKyAgZnJlZShoaW8pOworfQpkaWZmIC0tZ2l0IGEvUHJvZ3JhbXMvZ2lvX2JsdWV0b290aC5jIGIvUHJvZ3JhbXMvZ2lvX2JsdWV0b290aC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI2ZWE1YjUKLS0tIC9kZXYvbnVsbAorKysgYi9Qcm9ncmFtcy9naW9fYmx1ZXRvb3RoLmMKQEAgLTAsMCArMSwyMDEgQEAKKy8qCisgKiBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorICogICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorICoKKyAqIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorICoKKyAqIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyAqLworCisjaW5jbHVkZSAicHJvbG9ndWUuaCIKKworI2luY2x1ZGUgPHN0cmluZy5oPgorCisjaW5jbHVkZSAibG9nLmgiCisjaW5jbHVkZSAic3RyZm10LmgiCisjaW5jbHVkZSAiaW9fZ2VuZXJpYy5oIgorI2luY2x1ZGUgImdpb19pbnRlcm5hbC5oIgorI2luY2x1ZGUgImlvX2JsdWV0b290aC5oIgorI2luY2x1ZGUgImJybC5oIgorCitzdHJ1Y3QgR2lvSGFuZGxlU3RydWN0IHsKKyAgQmx1ZXRvb3RoQ29ubmVjdGlvbiAqY29ubmVjdGlvbjsKKyAgR2lvRW5kcG9pbnQgKmhpZEVuZHBvaW50OworfTsKKworc3RhdGljIGludAorZGlzY29ubmVjdEJsdWV0b290aFJlc291cmNlIChHaW9IYW5kbGUgKmhhbmRsZSkgeworICBpZiAoaGFuZGxlLT5jb25uZWN0aW9uKSBidGhDbG9zZUNvbm5lY3Rpb24oaGFuZGxlLT5jb25uZWN0aW9uKTsKKyAgaWYgKGhhbmRsZS0+aGlkRW5kcG9pbnQpIGdpb0Rpc2Nvbm5lY3RSZXNvdXJjZShoYW5kbGUtPmhpZEVuZHBvaW50KTsKKyAgZnJlZShoYW5kbGUpOworICByZXR1cm4gMTsKK30KKworc3RhdGljIEdpb0VuZHBvaW50ICoKK2dldEJsdWV0b290aENoYWluZWRFbmRwb2ludCAoR2lvSGFuZGxlICpoYW5kbGUpIHsKKyAgcmV0dXJuIGhhbmRsZS0+aGlkRW5kcG9pbnQ7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICoKK21ha2VCbHVldG9vdGhSZXNvdXJjZUlkZW50aWZpZXIgKEdpb0hhbmRsZSAqaGFuZGxlLCBjaGFyICpidWZmZXIsIHNpemVfdCBzaXplKSB7CisgIHJldHVybiBidGhNYWtlQ29ubmVjdGlvbklkZW50aWZpZXIoaGFuZGxlLT5jb25uZWN0aW9uLCBidWZmZXIsIHNpemUpOworfQorCitzdGF0aWMgY2hhciAqCitnZXRCbHVldG9vdGhSZXNvdXJjZU5hbWUgKEdpb0hhbmRsZSAqaGFuZGxlLCBpbnQgdGltZW91dCkgeworICBjb25zdCBjaGFyICpuYW1lID0gYnRoR2V0TmFtZU9mRGV2aWNlKGhhbmRsZS0+Y29ubmVjdGlvbiwgdGltZW91dCk7CisKKyAgaWYgKG5hbWUpIHsKKyAgICBjaGFyICpjb3B5ID0gc3RyZHVwKG5hbWUpOworICAgIGlmIChjb3B5KSByZXR1cm4gY29weTsKKyAgICBsb2dNYWxsb2NFcnJvcigpOworICB9CisKKyAgcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyB2b2lkICoKK2dldEJsdWV0b290aFJlc291cmNlT2JqZWN0IChHaW9IYW5kbGUgKmhhbmRsZSkgeworICByZXR1cm4gaGFuZGxlLT5jb25uZWN0aW9uOworfQorCitzdGF0aWMgc3NpemVfdAord3JpdGVCbHVldG9vdGhEYXRhIChHaW9IYW5kbGUgKmhhbmRsZSwgY29uc3Qgdm9pZCAqZGF0YSwgc2l6ZV90IHNpemUsIGludCB0aW1lb3V0KSB7CisgIHJldHVybiBidGhXcml0ZURhdGEoaGFuZGxlLT5jb25uZWN0aW9uLCBkYXRhLCBzaXplKTsKK30KKworc3RhdGljIGludAorYXdhaXRCbHVldG9vdGhJbnB1dCAoR2lvSGFuZGxlICpoYW5kbGUsIGludCB0aW1lb3V0KSB7CisgIHJldHVybiBidGhBd2FpdElucHV0KGhhbmRsZS0+Y29ubmVjdGlvbiwgdGltZW91dCk7Cit9CisKK3N0YXRpYyBzc2l6ZV90CityZWFkQmx1ZXRvb3RoRGF0YSAoCisgIEdpb0hhbmRsZSAqaGFuZGxlLCB2b2lkICpidWZmZXIsIHNpemVfdCBzaXplLAorICBpbnQgaW5pdGlhbFRpbWVvdXQsIGludCBzdWJzZXF1ZW50VGltZW91dAorKSB7CisgIHJldHVybiBidGhSZWFkRGF0YShoYW5kbGUtPmNvbm5lY3Rpb24sIGJ1ZmZlciwgc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgIGluaXRpYWxUaW1lb3V0LCBzdWJzZXF1ZW50VGltZW91dCk7Cit9CisKK3N0YXRpYyBpbnQKK21vbml0b3JCbHVldG9vdGhJbnB1dCAoR2lvSGFuZGxlICpoYW5kbGUsIEFzeW5jTW9uaXRvckNhbGxiYWNrICpjYWxsYmFjaywgdm9pZCAqZGF0YSkgeworICByZXR1cm4gYnRoTW9uaXRvcklucHV0KGhhbmRsZS0+Y29ubmVjdGlvbiwgY2FsbGJhY2ssIGRhdGEpOworfQorCitzdGF0aWMgY29uc3QgR2lvSGFuZGxlTWV0aG9kcyBnaW9CbHVldG9vdGhNZXRob2RzID0geworICAuZGlzY29ubmVjdFJlc291cmNlID0gZGlzY29ubmVjdEJsdWV0b290aFJlc291cmNlLAorICAuZ2V0Q2hhaW5lZEVuZHBvaW50ID0gZ2V0Qmx1ZXRvb3RoQ2hhaW5lZEVuZHBvaW50LAorCisgIC5tYWtlUmVzb3VyY2VJZGVudGlmaWVyID0gbWFrZUJsdWV0b290aFJlc291cmNlSWRlbnRpZmllciwKKyAgLmdldFJlc291cmNlTmFtZSA9IGdldEJsdWV0b290aFJlc291cmNlTmFtZSwKKyAgLmdldFJlc291cmNlT2JqZWN0ID0gZ2V0Qmx1ZXRvb3RoUmVzb3VyY2VPYmplY3QsCisKKyAgLndyaXRlRGF0YSA9IHdyaXRlQmx1ZXRvb3RoRGF0YSwKKyAgLmF3YWl0SW5wdXQgPSBhd2FpdEJsdWV0b290aElucHV0LAorICAucmVhZERhdGEgPSByZWFkQmx1ZXRvb3RoRGF0YSwKKyAgLm1vbml0b3JJbnB1dCA9IG1vbml0b3JCbHVldG9vdGhJbnB1dCwKK307CisKK3N0YXRpYyBpbnQKK3Rlc3RCbHVldG9vdGhJZGVudGlmaWVyIChjb25zdCBjaGFyICoqaWRlbnRpZmllcikgeworICByZXR1cm4gaXNCbHVldG9vdGhEZXZpY2VJZGVudGlmaWVyKGlkZW50aWZpZXIpOworfQorCitzdGF0aWMgY29uc3QgR2lvUHVibGljUHJvcGVydGllcyBnaW9QdWJsaWNQcm9wZXJ0aWVzX2JsdWV0b290aCA9IHsKKyAgLnRlc3RJZGVudGlmaWVyID0gdGVzdEJsdWV0b290aElkZW50aWZpZXIsCisKKyAgLnR5cGUgPSB7CisgICAgLm5hbWUgPSAiQmx1ZXRvb3RoIiwKKyAgICAuaWRlbnRpZmllciA9IEdJT19UWVBFX0JMVUVUT09USAorICB9Cit9OworCitzdGF0aWMgaW50Citpc0JsdWV0b290aFN1cHBvcnRlZCAoY29uc3QgR2lvRGVzY3JpcHRvciAqZGVzY3JpcHRvcikgeworICByZXR1cm4gZGVzY3JpcHRvci0+Ymx1ZXRvb3RoLmNoYW5uZWxOdW1iZXIgfHwgZGVzY3JpcHRvci0+Ymx1ZXRvb3RoLmRpc2NvdmVyQ2hhbm5lbDsKK30KKworc3RhdGljIGNvbnN0IEdpb09wdGlvbnMgKgorZ2V0Qmx1ZXRvb3RoT3B0aW9ucyAoY29uc3QgR2lvRGVzY3JpcHRvciAqZGVzY3JpcHRvcikgeworICByZXR1cm4gJmRlc2NyaXB0b3ItPmJsdWV0b290aC5vcHRpb25zOworfQorCitzdGF0aWMgY29uc3QgR2lvSGFuZGxlTWV0aG9kcyAqCitnZXRCbHVldG9vdGhNZXRob2RzICh2b2lkKSB7CisgIHJldHVybiAmZ2lvQmx1ZXRvb3RoTWV0aG9kczsKK30KKworc3RhdGljIEdpb0VuZHBvaW50ICoKK2dldEhpZEVuZHBvaW50ICh1aW50NjRfdCBhZGRyZXNzLCBjb25zdCBHaW9EZXNjcmlwdG9yICpkZXNjcmlwdG9yKSB7CisgIGNoYXIgaWRlbnRpZmllclswWDQwXTsKKyAgU1RSX0JFR0lOKGlkZW50aWZpZXIsIHNpemVvZihpZGVudGlmaWVyKSk7CisgIFNUUl9QUklOVEYoImhpZDphZGRyZXNzPSIpOworICBTVFJfRk9STUFUKGJ0aEZvcm1hdEFkZHJlc3MsIGFkZHJlc3MpOworICBTVFJfRU5EOworCisgIHJldHVybiBnaW9Db25uZWN0UmVzb3VyY2UoaWRlbnRpZmllciwgZGVzY3JpcHRvcik7Cit9CisKK3N0YXRpYyBHaW9IYW5kbGUgKgorY29ubmVjdEJsdWV0b290aFJlc291cmNlICgKKyAgY29uc3QgY2hhciAqaWRlbnRpZmllciwKKyAgY29uc3QgR2lvRGVzY3JpcHRvciAqZGVzY3JpcHRvcgorKSB7CisgIEdpb0hhbmRsZSAqaGFuZGxlID0gbWFsbG9jKHNpemVvZigqaGFuZGxlKSk7CisKKyAgaWYgKGhhbmRsZSkgeworICAgIG1lbXNldChoYW5kbGUsIDAsIHNpemVvZigqaGFuZGxlKSk7CisKKyAgICBCbHVldG9vdGhDb25uZWN0aW9uUmVxdWVzdCByZXF1ZXN0OworICAgIGJ0aEluaXRpYWxpemVDb25uZWN0aW9uUmVxdWVzdCgmcmVxdWVzdCk7CisKKyAgICByZXF1ZXN0LmRyaXZlciA9IGJyYWlsbGUtPmRlZmluaXRpb24uY29kZTsKKyAgICByZXF1ZXN0LmNoYW5uZWwgPSBkZXNjcmlwdG9yLT5ibHVldG9vdGguY2hhbm5lbE51bWJlcjsKKyAgICByZXF1ZXN0LmRpc2NvdmVyID0gZGVzY3JpcHRvci0+Ymx1ZXRvb3RoLmRpc2NvdmVyQ2hhbm5lbDsKKworICAgIGlmIChidGhBcHBseVBhcmFtZXRlcnMoJnJlcXVlc3QsIGlkZW50aWZpZXIpKSB7CisgICAgICBpZiAoZ2lvSXNIaWRTdXBwb3J0ZWQoZGVzY3JpcHRvcikpIHsKKyAgICAgICAgR2lvRW5kcG9pbnQgKmhpZEVuZHBvaW50ID0gZ2V0SGlkRW5kcG9pbnQocmVxdWVzdC5hZGRyZXNzLCBkZXNjcmlwdG9yKTsKKworICAgICAgICBpZiAoaGlkRW5kcG9pbnQpIHsKKyAgICAgICAgICBoYW5kbGUtPmhpZEVuZHBvaW50ID0gaGlkRW5kcG9pbnQ7CisgICAgICAgICAgcmV0dXJuIGhhbmRsZTsKKyAgICAgICAgfQorICAgICAgfQorCisgICAgICBpZiAoKGhhbmRsZS0+Y29ubmVjdGlvbiA9IGJ0aE9wZW5Db25uZWN0aW9uKCZyZXF1ZXN0KSkpIHsKKyAgICAgICAgcmV0dXJuIGhhbmRsZTsKKyAgICAgIH0KKyAgICB9CisKKyAgICBmcmVlKGhhbmRsZSk7CisgIH0gZWxzZSB7CisgICAgbG9nTWFsbG9jRXJyb3IoKTsKKyAgfQorCisgIHJldHVybiBOVUxMOworfQorCitzdGF0aWMgY29uc3QgR2lvUHJpdmF0ZVByb3BlcnRpZXMgZ2lvUHJpdmF0ZVByb3BlcnRpZXNfYmx1ZXRvb3RoID0geworICAuaXNTdXBwb3J0ZWQgPSBpc0JsdWV0b290aFN1cHBvcnRlZCwKKworICAuZ2V0T3B0aW9ucyA9IGdldEJsdWV0b290aE9wdGlvbnMsCisgIC5nZXRIYW5kbGVNZXRob2RzID0gZ2V0Qmx1ZXRvb3RoTWV0aG9kcywKKworICAuY29ubmVjdFJlc291cmNlID0gY29ubmVjdEJsdWV0b290aFJlc291cmNlCit9OworCitjb25zdCBHaW9Qcm9wZXJ0aWVzIGdpb1Byb3BlcnRpZXNfYmx1ZXRvb3RoID0geworICAucHVibGljID0gJmdpb1B1YmxpY1Byb3BlcnRpZXNfYmx1ZXRvb3RoLAorICAucHJpdmF0ZSA9ICZnaW9Qcml2YXRlUHJvcGVydGllc19ibHVldG9vdGgKK307CmRpZmYgLS1naXQgYS9Qcm9ncmFtcy9naW9faGlkLmMgYi9Qcm9ncmFtcy9naW9faGlkLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmVlY2Q2NAotLS0gL2Rldi9udWxsCisrKyBiL1Byb2dyYW1zL2dpb19oaWQuYwpAQCAtMCwwICsxLDI5MCBAQAorLyoKKyAqIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisgKiAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisgKgorICogQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKKyNpbmNsdWRlICJwcm9sb2d1ZS5oIgorCisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKyNpbmNsdWRlICJsb2cuaCIKKyNpbmNsdWRlICJpb19nZW5lcmljLmgiCisjaW5jbHVkZSAiZ2lvX2ludGVybmFsLmgiCisjaW5jbHVkZSAiaW9faGlkLmgiCisKK3N0cnVjdCBHaW9IYW5kbGVTdHJ1Y3QgeworICBIaWREZXZpY2UgKmRldmljZTsKKyAgY29uc3QgSGlkTW9kZWxFbnRyeSAqbW9kZWw7Cit9OworCitzdGF0aWMgaW50CitkaXNjb25uZWN0SGlkUmVzb3VyY2UgKEdpb0hhbmRsZSAqaGFuZGxlKSB7CisgIGhpZENsb3NlRGV2aWNlKGhhbmRsZS0+ZGV2aWNlKTsKKyAgZnJlZShoYW5kbGUpOworICByZXR1cm4gMTsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgKgorbWFrZUhpZFJlc291cmNlSWRlbnRpZmllciAoR2lvSGFuZGxlICpoYW5kbGUsIGNoYXIgKmJ1ZmZlciwgc2l6ZV90IHNpemUpIHsKKyAgcmV0dXJuIGhpZE1ha2VEZXZpY2VJZGVudGlmaWVyKGhhbmRsZS0+ZGV2aWNlLCBidWZmZXIsIHNpemUpOworfQorCitzdGF0aWMgY2hhciAqCitnZXRIaWRSZXNvdXJjZU5hbWUgKEdpb0hhbmRsZSAqaGFuZGxlLCBpbnQgdGltZW91dCkgeworICBjb25zdCBjaGFyICpuYW1lID0gaGlkR2V0RGV2aWNlTmFtZShoYW5kbGUtPmRldmljZSk7CisKKyAgaWYgKG5hbWUpIHsKKyAgICBjaGFyICpjb3B5ID0gc3RyZHVwKG5hbWUpOworICAgIGlmIChjb3B5KSByZXR1cm4gY29weTsKKyAgICBsb2dNYWxsb2NFcnJvcigpOworICB9CisKKyAgcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyB2b2lkICoKK2dldEhpZFJlc291cmNlT2JqZWN0IChHaW9IYW5kbGUgKmhhbmRsZSkgeworICByZXR1cm4gaGFuZGxlLT5kZXZpY2U7Cit9CisKK3N0YXRpYyBzc2l6ZV90Cit3cml0ZUhpZERhdGEgKEdpb0hhbmRsZSAqaGFuZGxlLCBjb25zdCB2b2lkICpkYXRhLCBzaXplX3Qgc2l6ZSwgaW50IHRpbWVvdXQpIHsKKyAgcmV0dXJuIGhpZFdyaXRlRGF0YShoYW5kbGUtPmRldmljZSwgZGF0YSwgc2l6ZSk7Cit9CisKK3N0YXRpYyBpbnQKK2F3YWl0SGlkSW5wdXQgKEdpb0hhbmRsZSAqaGFuZGxlLCBpbnQgdGltZW91dCkgeworICByZXR1cm4gaGlkQXdhaXRJbnB1dChoYW5kbGUtPmRldmljZSwgdGltZW91dCk7Cit9CisKK3N0YXRpYyBzc2l6ZV90CityZWFkSGlkRGF0YSAoCisgIEdpb0hhbmRsZSAqaGFuZGxlLCB2b2lkICpidWZmZXIsIHNpemVfdCBzaXplLAorICBpbnQgaW5pdGlhbFRpbWVvdXQsIGludCBzdWJzZXF1ZW50VGltZW91dAorKSB7CisgIHJldHVybiBoaWRSZWFkRGF0YShoYW5kbGUtPmRldmljZSwgYnVmZmVyLCBzaXplLAorICAgICAgICAgICAgICAgICAgICAgaW5pdGlhbFRpbWVvdXQsIHN1YnNlcXVlbnRUaW1lb3V0KTsKK30KKworc3RhdGljIGludAorbW9uaXRvckhpZElucHV0IChHaW9IYW5kbGUgKmhhbmRsZSwgQXN5bmNNb25pdG9yQ2FsbGJhY2sgKmNhbGxiYWNrLCB2b2lkICpkYXRhKSB7CisgIHJldHVybiBoaWRNb25pdG9ySW5wdXQoaGFuZGxlLT5kZXZpY2UsIGNhbGxiYWNrLCBkYXRhKTsKK30KKworaW50CitnZXRIaWRSZXBvcnRTaXplICgKKyAgR2lvSGFuZGxlICpoYW5kbGUsIEhpZFJlcG9ydElkZW50aWZpZXIgaWRlbnRpZmllciwKKyAgSGlkUmVwb3J0U2l6ZSAqc2l6ZSwgaW50IHRpbWVvdXQKKykgeworICByZXR1cm4gaGlkR2V0UmVwb3J0U2l6ZShoYW5kbGUtPmRldmljZSwgaWRlbnRpZmllciwgc2l6ZSk7Cit9CisKK3N0YXRpYyBIaWRJdGVtc0Rlc2NyaXB0b3IgKgorZ2V0SGlkRGVzY3JpcHRvciAoR2lvSGFuZGxlICpoYW5kbGUKKykgeworICByZXR1cm4gaGlkR2V0SXRlbXMoaGFuZGxlLT5kZXZpY2UpOworfQorCitzdGF0aWMgc3NpemVfdAorZ2V0SGlkUmVwb3J0ICgKKyAgR2lvSGFuZGxlICpoYW5kbGUsIEhpZFJlcG9ydElkZW50aWZpZXIgaWRlbnRpZmllciwKKyAgdW5zaWduZWQgY2hhciAqYnVmZmVyLCBzaXplX3Qgc2l6ZSwgaW50IHRpbWVvdXQKKykgeworICBidWZmZXJbMF0gPSBpZGVudGlmaWVyOworICByZXR1cm4gaGlkR2V0UmVwb3J0KGhhbmRsZS0+ZGV2aWNlLCBidWZmZXIsIHNpemUpOworfQorCitzdGF0aWMgc3NpemVfdAorc2V0SGlkUmVwb3J0ICgKKyAgR2lvSGFuZGxlICpoYW5kbGUsIEhpZFJlcG9ydElkZW50aWZpZXIgaWRlbnRpZmllciwKKyAgY29uc3QgdW5zaWduZWQgY2hhciAqZGF0YSwgc2l6ZV90IHNpemUsIGludCB0aW1lb3V0CispIHsKKyAgdW5zaWduZWQgY2hhciBidWZmZXJbMSArIHNpemVdOworCisgIGlmICghaWRlbnRpZmllcikgeworICAgIGJ1ZmZlclswXSA9IGlkZW50aWZpZXI7CisgICAgbWVtY3B5KCZidWZmZXJbMV0sIGRhdGEsIHNpemUpOworCisgICAgZGF0YSA9IGJ1ZmZlcjsKKyAgICBzaXplICs9IDE7CisgIH0KKworICByZXR1cm4gaGlkU2V0UmVwb3J0KGhhbmRsZS0+ZGV2aWNlLCBkYXRhLCBzaXplKTsKK30KKworc3RhdGljIHNzaXplX3QKK2dldEhpZEZlYXR1cmUgKAorICBHaW9IYW5kbGUgKmhhbmRsZSwgSGlkUmVwb3J0SWRlbnRpZmllciBpZGVudGlmaWVyLAorICB1bnNpZ25lZCBjaGFyICpidWZmZXIsIHNpemVfdCBzaXplLCBpbnQgdGltZW91dAorKSB7CisgIGJ1ZmZlclswXSA9IGlkZW50aWZpZXI7CisgIHJldHVybiBoaWRHZXRGZWF0dXJlKGhhbmRsZS0+ZGV2aWNlLCBidWZmZXIsIHNpemUpOworfQorCitzdGF0aWMgc3NpemVfdAorc2V0SGlkRmVhdHVyZSAoCisgIEdpb0hhbmRsZSAqaGFuZGxlLCBIaWRSZXBvcnRJZGVudGlmaWVyIGlkZW50aWZpZXIsCisgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGEsIHNpemVfdCBzaXplLCBpbnQgdGltZW91dAorKSB7CisgIHVuc2lnbmVkIGNoYXIgYnVmZmVyWzEgKyBzaXplXTsKKworICBpZiAoIWlkZW50aWZpZXIpIHsKKyAgICBidWZmZXJbMF0gPSBpZGVudGlmaWVyOworICAgIG1lbWNweSgmYnVmZmVyWzFdLCBkYXRhLCBzaXplKTsKKworICAgIGRhdGEgPSBidWZmZXI7CisgICAgc2l6ZSArPSAxOworICB9CisKKyAgcmV0dXJuIGhpZFNldEZlYXR1cmUoaGFuZGxlLT5kZXZpY2UsIGRhdGEsIHNpemUpOworfQorCitzdGF0aWMgY29uc3QgR2lvSGFuZGxlTWV0aG9kcyBnaW9IaWRNZXRob2RzID0geworICAuZGlzY29ubmVjdFJlc291cmNlID0gZGlzY29ubmVjdEhpZFJlc291cmNlLAorCisgIC5tYWtlUmVzb3VyY2VJZGVudGlmaWVyID0gbWFrZUhpZFJlc291cmNlSWRlbnRpZmllciwKKyAgLmdldFJlc291cmNlTmFtZSA9IGdldEhpZFJlc291cmNlTmFtZSwKKyAgLmdldFJlc291cmNlT2JqZWN0ID0gZ2V0SGlkUmVzb3VyY2VPYmplY3QsCisKKyAgLndyaXRlRGF0YSA9IHdyaXRlSGlkRGF0YSwKKyAgLmF3YWl0SW5wdXQgPSBhd2FpdEhpZElucHV0LAorICAucmVhZERhdGEgPSByZWFkSGlkRGF0YSwKKyAgLm1vbml0b3JJbnB1dCA9IG1vbml0b3JIaWRJbnB1dCwKKworICAuZ2V0SGlkUmVwb3J0U2l6ZSA9IGdldEhpZFJlcG9ydFNpemUsCisgIC5nZXRIaWREZXNjcmlwdG9yID0gZ2V0SGlkRGVzY3JpcHRvciwKKyAgLmdldEhpZFJlcG9ydCA9IGdldEhpZFJlcG9ydCwKKyAgLnNldEhpZFJlcG9ydCA9IHNldEhpZFJlcG9ydCwKKyAgLmdldEhpZEZlYXR1cmUgPSBnZXRIaWRGZWF0dXJlLAorICAuc2V0SGlkRmVhdHVyZSA9IHNldEhpZEZlYXR1cmUsCit9OworCitzdGF0aWMgaW50Cit0ZXN0SGlkSWRlbnRpZmllciAoY29uc3QgY2hhciAqKmlkZW50aWZpZXIpIHsKKyAgcmV0dXJuIGlzSGlkRGV2aWNlSWRlbnRpZmllcihpZGVudGlmaWVyKTsKK30KKworc3RhdGljIGNvbnN0IEdpb1B1YmxpY1Byb3BlcnRpZXMgZ2lvUHVibGljUHJvcGVydGllc19oaWQgPSB7CisgIC50ZXN0SWRlbnRpZmllciA9IHRlc3RIaWRJZGVudGlmaWVyLAorCisgIC50eXBlID0geworICAgIC5uYW1lID0gIkhJRCIsCisgICAgLmlkZW50aWZpZXIgPSBHSU9fVFlQRV9ISUQKKyAgfQorfTsKKworc3RhdGljIGludAoraXNIaWRTdXBwb3J0ZWQgKGNvbnN0IEdpb0Rlc2NyaXB0b3IgKmRlc2NyaXB0b3IpIHsKKyAgcmV0dXJuICEhZGVzY3JpcHRvci0+aGlkLm1vZGVsVGFibGU7Cit9CisKK3N0YXRpYyBjb25zdCBHaW9PcHRpb25zICoKK2dldEhpZE9wdGlvbnMgKGNvbnN0IEdpb0Rlc2NyaXB0b3IgKmRlc2NyaXB0b3IpIHsKKyAgcmV0dXJuICZkZXNjcmlwdG9yLT5oaWQub3B0aW9uczsKK30KKworc3RhdGljIGNvbnN0IEdpb0hhbmRsZU1ldGhvZHMgKgorZ2V0SGlkTWV0aG9kcyAodm9pZCkgeworICByZXR1cm4gJmdpb0hpZE1ldGhvZHM7Cit9CisKK3N0YXRpYyBjb25zdCBIaWRNb2RlbEVudHJ5ICoKK2dldEhpZE1vZGVsRW50cnkgKEhpZERldmljZSAqZGV2aWNlLCBjb25zdCBIaWRNb2RlbEVudHJ5ICptb2RlbCkgeworICBpZiAobW9kZWwpIHsKKyAgICBIaWREZXZpY2VJZGVudGlmaWVyIHZlbmRvcjsKKyAgICBIaWREZXZpY2VJZGVudGlmaWVyIHByb2R1Y3Q7CisKKyAgICBpZiAoaGlkR2V0RGV2aWNlSWRlbnRpZmllcnMoZGV2aWNlLCAmdmVuZG9yLCAmcHJvZHVjdCkpIHsKKyAgICAgIGZvciAoOyAobW9kZWwtPnZlbmRvciB8fCBtb2RlbC0+cHJvZHVjdCB8fCBtb2RlbC0+bmFtZSk7IG1vZGVsKz0xKSB7CisgICAgICAgIGlmIChtb2RlbC0+dmVuZG9yKSB7CisgICAgICAgICAgaWYgKG1vZGVsLT52ZW5kb3IgIT0gdmVuZG9yKSB7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZiAobW9kZWwtPnByb2R1Y3QpIHsKKyAgICAgICAgICBpZiAobW9kZWwtPnByb2R1Y3QgIT0gcHJvZHVjdCkgeworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYgKG1vZGVsLT5uYW1lKSB7CisgICAgICAgICAgY29uc3QgY2hhciAqbmFtZSA9IGhpZEdldERldmljZU5hbWUoZGV2aWNlKTsKKyAgICAgICAgICBpZiAoIW5hbWUpIGNvbnRpbnVlOworCisgICAgICAgICAgc2l6ZV90IGxlbmd0aCA9IHN0cmxlbihtb2RlbC0+bmFtZSk7CisgICAgICAgICAgaWYgKGxlbmd0aCA+IHN0cmxlbihuYW1lKSkgY29udGludWU7CisgICAgICAgICAgaWYgKHN0cm5jYXNlY21wKG5hbWUsIG1vZGVsLT5uYW1lLCBsZW5ndGgpICE9IDApIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgbG9nTWVzc2FnZShMT0dfQ0FURUdPUlkoSElEX0lPKSwgIm1vZGVsIGZvdW5kOiAlcyIsIG1vZGVsLT5uYW1lKTsKKyAgICAgICAgcmV0dXJuIG1vZGVsOworICAgICAgfQorICAgIH0KKyAgfQorCisgIHJldHVybiBOVUxMOworfQorCitzdGF0aWMgR2lvSGFuZGxlICoKK2Nvbm5lY3RIaWRSZXNvdXJjZSAoCisgIGNvbnN0IGNoYXIgKmlkZW50aWZpZXIsCisgIGNvbnN0IEdpb0Rlc2NyaXB0b3IgKmRlc2NyaXB0b3IKKykgeworICBHaW9IYW5kbGUgKmhhbmRsZSA9IG1hbGxvYyhzaXplb2YoKmhhbmRsZSkpOworCisgIGlmIChoYW5kbGUpIHsKKyAgICBtZW1zZXQoaGFuZGxlLCAwLCBzaXplb2YoKmhhbmRsZSkpOworCisgICAgaWYgKGhpZE9wZW5EZXZpY2VXaXRoUGFyYW1ldGVycygmaGFuZGxlLT5kZXZpY2UsIGlkZW50aWZpZXIpKSB7CisgICAgICBpZiAoaGFuZGxlLT5kZXZpY2UpIHsKKyAgICAgICAgaGFuZGxlLT5tb2RlbCA9IGdldEhpZE1vZGVsRW50cnkoCisgICAgICAgICAgaGFuZGxlLT5kZXZpY2UsCisgICAgICAgICAgZGVzY3JpcHRvci0+aGlkLm1vZGVsVGFibGUKKyAgICAgICAgKTsKKworICAgICAgICBpZiAoaGFuZGxlLT5tb2RlbCkgcmV0dXJuIGhhbmRsZTsKKyAgICAgIH0KKyAgICB9CisKKyAgICBmcmVlKGhhbmRsZSk7CisgIH0gZWxzZSB7CisgICAgbG9nTWFsbG9jRXJyb3IoKTsKKyAgfQorCisgIHJldHVybiBOVUxMOworfQorCitzdGF0aWMgaW50CitwcmVwYXJlSGlkRW5kcG9pbnQgKEdpb0VuZHBvaW50ICplbmRwb2ludCkgeworICBnaW9TZXRBcHBsaWNhdGlvbkRhdGEoZW5kcG9pbnQsIGVuZHBvaW50LT5oYW5kbGUtPm1vZGVsLT5kYXRhKTsKKyAgcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBjb25zdCBHaW9Qcml2YXRlUHJvcGVydGllcyBnaW9Qcml2YXRlUHJvcGVydGllc19oaWQgPSB7CisgIC5pc1N1cHBvcnRlZCA9IGlzSGlkU3VwcG9ydGVkLAorCisgIC5nZXRPcHRpb25zID0gZ2V0SGlkT3B0aW9ucywKKyAgLmdldEhhbmRsZU1ldGhvZHMgPSBnZXRIaWRNZXRob2RzLAorCisgIC5jb25uZWN0UmVzb3VyY2UgPSBjb25uZWN0SGlkUmVzb3VyY2UsCisgIC5wcmVwYXJlRW5kcG9pbnQgPSBwcmVwYXJlSGlkRW5kcG9pbnQsCit9OworCitjb25zdCBHaW9Qcm9wZXJ0aWVzIGdpb1Byb3BlcnRpZXNfaGlkID0geworICAucHVibGljID0gJmdpb1B1YmxpY1Byb3BlcnRpZXNfaGlkLAorICAucHJpdmF0ZSA9ICZnaW9Qcml2YXRlUHJvcGVydGllc19oaWQKK307CmRpZmYgLS1naXQgYS9Qcm9ncmFtcy9naW9faW50ZXJuYWwuaCBiL1Byb2dyYW1zL2dpb19pbnRlcm5hbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZkMGI1ZGYKLS0tIC9kZXYvbnVsbAorKysgYi9Qcm9ncmFtcy9naW9faW50ZXJuYWwuaApAQCAtMCwwICsxLDE3OCBAQAorLyoKKyAqIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisgKiAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisgKgorICogQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKKyNpZm5kZWYgQlJMVFRZX0lOQ0xVREVEX0dJT19JTlRFUk5BTAorI2RlZmluZSBCUkxUVFlfSU5DTFVERURfR0lPX0lOVEVSTkFMCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYgLyogX19jcGx1c3BsdXMgKi8KKwordHlwZWRlZiBzdHJ1Y3QgR2lvSGFuZGxlU3RydWN0IEdpb0hhbmRsZTsKKwordHlwZWRlZiBpbnQgR2lvRGlzY29ubmVjdFJlc291cmNlTWV0aG9kIChHaW9IYW5kbGUgKmhhbmRsZSk7CisKK3R5cGVkZWYgR2lvRW5kcG9pbnQgKkdpb0dldENoYWluZWRFbmRwb2ludE1ldGhvZCAoR2lvSGFuZGxlICpoYW5kbGUpOworCit0eXBlZGVmIGNvbnN0IGNoYXIgKk1ha2VSZXNvdXJjZUlkZW50aWZpZXJNZXRob2QgKEdpb0hhbmRsZSAqaGFuZGxlLCBjaGFyICpidWZmZXIsIHNpemVfdCBzaXplKTsKKwordHlwZWRlZiBjaGFyICpHaW9HZXRSZXNvdXJjZU5hbWVNZXRob2QgKEdpb0hhbmRsZSAqaGFuZGxlLCBpbnQgdGltZW91dCk7CisKK3R5cGVkZWYgdm9pZCAqR2lvR2V0UmVzb3VyY2VPYmplY3RNZXRob2QgKEdpb0hhbmRsZSAqaGFuZGxlKTsKKwordHlwZWRlZiBzc2l6ZV90IEdpb1dyaXRlRGF0YU1ldGhvZCAoR2lvSGFuZGxlICpoYW5kbGUsIGNvbnN0IHZvaWQgKmRhdGEsIHNpemVfdCBzaXplLCBpbnQgdGltZW91dCk7CisKK3R5cGVkZWYgaW50IEdpb0F3YWl0SW5wdXRNZXRob2QgKEdpb0hhbmRsZSAqaGFuZGxlLCBpbnQgdGltZW91dCk7CisKK3R5cGVkZWYgc3NpemVfdCBHaW9SZWFkRGF0YU1ldGhvZCAoCisgIEdpb0hhbmRsZSAqaGFuZGxlLCB2b2lkICpidWZmZXIsIHNpemVfdCBzaXplLAorICBpbnQgaW5pdGlhbFRpbWVvdXQsIGludCBzdWJzZXF1ZW50VGltZW91dAorKTsKKwordHlwZWRlZiBpbnQgR2lvTW9uaXRvcklucHV0TWV0aG9kIChHaW9IYW5kbGUgKmhhbmRsZSwgQXN5bmNNb25pdG9yQ2FsbGJhY2sgKmNhbGxiYWNrLCB2b2lkICpkYXRhKTsKKwordHlwZWRlZiBpbnQgR2lvUmVjb25maWd1cmVSZXNvdXJjZU1ldGhvZCAoR2lvSGFuZGxlICpoYW5kbGUsIGNvbnN0IFNlcmlhbFBhcmFtZXRlcnMgKnBhcmFtZXRlcnMpOworCit0eXBlZGVmIHNzaXplX3QgR2lvVGVsbFJlc291cmNlTWV0aG9kICgKKyAgR2lvSGFuZGxlICpoYW5kbGUsIHVpbnQ4X3QgcmVjaXBpZW50LCB1aW50OF90IHR5cGUsCisgIHVpbnQ4X3QgcmVxdWVzdCwgdWludDE2X3QgdmFsdWUsIHVpbnQxNl90IGluZGV4LAorICBjb25zdCB2b2lkICpkYXRhLCB1aW50MTZfdCBzaXplLCBpbnQgdGltZW91dAorKTsKKwordHlwZWRlZiBzc2l6ZV90IEdpb0Fza1Jlc291cmNlTWV0aG9kICgKKyAgR2lvSGFuZGxlICpoYW5kbGUsIHVpbnQ4X3QgcmVjaXBpZW50LCB1aW50OF90IHR5cGUsCisgIHVpbnQ4X3QgcmVxdWVzdCwgdWludDE2X3QgdmFsdWUsIHVpbnQxNl90IGluZGV4LAorICB2b2lkICpidWZmZXIsIHVpbnQxNl90IHNpemUsIGludCB0aW1lb3V0CispOworCit0eXBlZGVmIEhpZEl0ZW1zRGVzY3JpcHRvciAqR2lvR2V0SGlkRGVzY3JpcHRvck1ldGhvZChHaW9IYW5kbGUgKmhhbmRsZSk7CisKK3R5cGVkZWYgaW50IEdpb0dldEhpZFJlcG9ydFNpemVNZXRob2QgKAorICBHaW9IYW5kbGUgKmhhbmRsZSwgSGlkUmVwb3J0SWRlbnRpZmllciBpZGVudGlmaWVyLAorICBIaWRSZXBvcnRTaXplICpzaXplLCBpbnQgdGltZW91dAorKTsKKwordHlwZWRlZiBzc2l6ZV90IEdpb0dldEhpZFJlcG9ydE1ldGhvZCAoCisgIEdpb0hhbmRsZSAqaGFuZGxlLCBIaWRSZXBvcnRJZGVudGlmaWVyIGlkZW50aWZpZXIsCisgIHVuc2lnbmVkIGNoYXIgKmJ1ZmZlciwgc2l6ZV90IHNpemUsIGludCB0aW1lb3V0CispOworCit0eXBlZGVmIHNzaXplX3QgR2lvU2V0SGlkUmVwb3J0TWV0aG9kICgKKyAgR2lvSGFuZGxlICpoYW5kbGUsIEhpZFJlcG9ydElkZW50aWZpZXIgaWRlbnRpZmllciwKKyAgY29uc3QgdW5zaWduZWQgY2hhciAqZGF0YSwgc2l6ZV90IHNpemUsIGludCB0aW1lb3V0CispOworCit0eXBlZGVmIHNzaXplX3QgR2lvR2V0SGlkRmVhdHVyZU1ldGhvZCAoCisgIEdpb0hhbmRsZSAqaGFuZGxlLCBIaWRSZXBvcnRJZGVudGlmaWVyIGlkZW50aWZpZXIsCisgIHVuc2lnbmVkIGNoYXIgKmJ1ZmZlciwgc2l6ZV90IHNpemUsIGludCB0aW1lb3V0CispOworCit0eXBlZGVmIHNzaXplX3QgR2lvU2V0SGlkRmVhdHVyZU1ldGhvZCAoCisgIEdpb0hhbmRsZSAqaGFuZGxlLCBIaWRSZXBvcnRJZGVudGlmaWVyIGlkZW50aWZpZXIsCisgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGEsIHNpemVfdCBzaXplLCBpbnQgdGltZW91dAorKTsKKwordHlwZWRlZiBzdHJ1Y3QgeworICBHaW9EaXNjb25uZWN0UmVzb3VyY2VNZXRob2QgKmRpc2Nvbm5lY3RSZXNvdXJjZTsKKyAgR2lvR2V0Q2hhaW5lZEVuZHBvaW50TWV0aG9kICpnZXRDaGFpbmVkRW5kcG9pbnQ7CisKKyAgTWFrZVJlc291cmNlSWRlbnRpZmllck1ldGhvZCAqbWFrZVJlc291cmNlSWRlbnRpZmllcjsKKyAgR2lvR2V0UmVzb3VyY2VOYW1lTWV0aG9kICpnZXRSZXNvdXJjZU5hbWU7CisgIEdpb0dldFJlc291cmNlT2JqZWN0TWV0aG9kICpnZXRSZXNvdXJjZU9iamVjdDsKKworICBHaW9Xcml0ZURhdGFNZXRob2QgKndyaXRlRGF0YTsKKyAgR2lvQXdhaXRJbnB1dE1ldGhvZCAqYXdhaXRJbnB1dDsKKyAgR2lvUmVhZERhdGFNZXRob2QgKnJlYWREYXRhOworICBHaW9Nb25pdG9ySW5wdXRNZXRob2QgKm1vbml0b3JJbnB1dDsKKyAgR2lvUmVjb25maWd1cmVSZXNvdXJjZU1ldGhvZCAqcmVjb25maWd1cmVSZXNvdXJjZTsKKworICBHaW9UZWxsUmVzb3VyY2VNZXRob2QgKnRlbGxSZXNvdXJjZTsKKyAgR2lvQXNrUmVzb3VyY2VNZXRob2QgKmFza1Jlc291cmNlOworCisgIEdpb0dldEhpZFJlcG9ydFNpemVNZXRob2QgKmdldEhpZFJlcG9ydFNpemU7CisgIEdpb0dldEhpZERlc2NyaXB0b3JNZXRob2QgKmdldEhpZERlc2NyaXB0b3I7CisgIEdpb0dldEhpZFJlcG9ydE1ldGhvZCAqZ2V0SGlkUmVwb3J0OworICBHaW9TZXRIaWRSZXBvcnRNZXRob2QgKnNldEhpZFJlcG9ydDsKKyAgR2lvR2V0SGlkRmVhdHVyZU1ldGhvZCAqZ2V0SGlkRmVhdHVyZTsKKyAgR2lvU2V0SGlkRmVhdHVyZU1ldGhvZCAqc2V0SGlkRmVhdHVyZTsKK30gR2lvSGFuZGxlTWV0aG9kczsKKworc3RydWN0IEdpb0VuZHBvaW50U3RydWN0IHsKKyAgR2lvSGFuZGxlICpoYW5kbGU7CisgIGNvbnN0IEdpb0hhbmRsZU1ldGhvZHMgKmhhbmRsZU1ldGhvZHM7CisgIEdpb09wdGlvbnMgb3B0aW9uczsKKyAgR2lvVHlwZUlkZW50aWZpZXIgcmVzb3VyY2VUeXBlOworICB1bnNpZ25lZCBpbnQgYnl0ZXNQZXJTZWNvbmQ7CisgIHVuc2lnbmVkIGNoYXIgcmVmZXJlbmNlQ291bnQ7CisKKyAgc3RydWN0IHsKKyAgICBpbnQgZXJyb3I7CisgICAgdW5zaWduZWQgaW50IGZyb207CisgICAgdW5zaWduZWQgaW50IHRvOworICAgIHVuc2lnbmVkIGNoYXIgYnVmZmVyWzBYNDBdOworICB9IGlucHV0OworfTsKKwordHlwZWRlZiBpbnQgR2lvSXNTdXBwb3J0ZWRNZXRob2QgKGNvbnN0IEdpb0Rlc2NyaXB0b3IgKmRlc2NyaXB0b3IpOworCit0eXBlZGVmIGNvbnN0IEdpb09wdGlvbnMgKkdpb0dldE9wdGlvbnNNZXRob2QgKGNvbnN0IEdpb0Rlc2NyaXB0b3IgKmRlc2NyaXB0b3IpOworCit0eXBlZGVmIGNvbnN0IEdpb0hhbmRsZU1ldGhvZHMgKkdpb0dldEhhbmRsZU1ldGhvZHNNZXRob2QgKHZvaWQpOworCit0eXBlZGVmIEdpb0hhbmRsZSAqR2lvQ29ubmVjdFJlc291cmNlTWV0aG9kICgKKyAgY29uc3QgY2hhciAqaWRlbnRpZmllciwKKyAgY29uc3QgR2lvRGVzY3JpcHRvciAqZGVzY3JpcHRvcgorKTsKKwordHlwZWRlZiBpbnQgR2lvUHJlcGFyZUVuZHBvaW50TWV0aG9kIChHaW9FbmRwb2ludCAqZW5kcG9pbnQpOworCit0eXBlZGVmIHN0cnVjdCB7CisgIEdpb0lzU3VwcG9ydGVkTWV0aG9kICppc1N1cHBvcnRlZDsKKworICBHaW9HZXRPcHRpb25zTWV0aG9kICpnZXRPcHRpb25zOworICBHaW9HZXRIYW5kbGVNZXRob2RzTWV0aG9kICpnZXRIYW5kbGVNZXRob2RzOworCisgIEdpb0Nvbm5lY3RSZXNvdXJjZU1ldGhvZCAqY29ubmVjdFJlc291cmNlOworICBHaW9QcmVwYXJlRW5kcG9pbnRNZXRob2QgKnByZXBhcmVFbmRwb2ludDsKK30gR2lvUHJpdmF0ZVByb3BlcnRpZXM7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgY29uc3QgR2lvUHVibGljUHJvcGVydGllcyAqcHVibGljOworICBjb25zdCBHaW9Qcml2YXRlUHJvcGVydGllcyAqcHJpdmF0ZTsKK30gR2lvUHJvcGVydGllczsKKworZXh0ZXJuIGNvbnN0IEdpb1Byb3BlcnRpZXMgKmNvbnN0IGdpb1Byb3BlcnRpZXNbXTsKK2V4dGVybiBjb25zdCBHaW9Qcm9wZXJ0aWVzIGdpb1Byb3BlcnRpZXNfc2VyaWFsOworZXh0ZXJuIGNvbnN0IEdpb1Byb3BlcnRpZXMgZ2lvUHJvcGVydGllc191c2I7CitleHRlcm4gY29uc3QgR2lvUHJvcGVydGllcyBnaW9Qcm9wZXJ0aWVzX2JsdWV0b290aDsKK2V4dGVybiBjb25zdCBHaW9Qcm9wZXJ0aWVzIGdpb1Byb3BlcnRpZXNfaGlkOworZXh0ZXJuIGNvbnN0IEdpb1Byb3BlcnRpZXMgZ2lvUHJvcGVydGllc19udWxsOworCitleHRlcm4gdm9pZCBnaW9TZXRCeXRlc1BlclNlY29uZCAoR2lvRW5kcG9pbnQgKmVuZHBvaW50LCBjb25zdCBTZXJpYWxQYXJhbWV0ZXJzICpwYXJhbWV0ZXJzKTsKK2V4dGVybiB2b2lkIGdpb1NldEFwcGxpY2F0aW9uRGF0YSAoR2lvRW5kcG9pbnQgKmVuZHBvaW50LCBjb25zdCB2b2lkICpkYXRhKTsKKworc3RhdGljIGlubGluZSBpbnQKK2dpb0lzSGlkU3VwcG9ydGVkIChjb25zdCBHaW9EZXNjcmlwdG9yICpkZXNjcmlwdG9yKSB7CisgIHJldHVybiBnaW9Qcm9wZXJ0aWVzX2hpZC5wcml2YXRlLT5pc1N1cHBvcnRlZChkZXNjcmlwdG9yKTsKK30KKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYgLyogX19jcGx1c3BsdXMgKi8KKworI2VuZGlmIC8qIEJSTFRUWV9JTkNMVURFRF9HSU9fSU5URVJOQUwgKi8KZGlmZiAtLWdpdCBhL1Byb2dyYW1zL2dpb19udWxsLmMgYi9Qcm9ncmFtcy9naW9fbnVsbC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIyZDJjNjMKLS0tIC9kZXYvbnVsbAorKysgYi9Qcm9ncmFtcy9naW9fbnVsbC5jCkBAIC0wLDAgKzEsMTQwIEBACisvKgorICogQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyAqICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyAqCisgKiBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorICoKKyAqIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyAqCisgKiBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisgKi8KKworI2luY2x1ZGUgInByb2xvZ3VlLmgiCisKKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworI2luY2x1ZGUgImxvZy5oIgorI2luY2x1ZGUgInN0cmZtdC5oIgorI2luY2x1ZGUgImlvX2dlbmVyaWMuaCIKKyNpbmNsdWRlICJnaW9faW50ZXJuYWwuaCIKKyNpbmNsdWRlICJwYXJzZS5oIgorCitzdHJ1Y3QgR2lvSGFuZGxlU3RydWN0IHsKKyAgaW50IHBsYWNlX2hvbGRlcjsKK307CisKK3N0YXRpYyBpbnQKK2Rpc2Nvbm5lY3ROdWxsUmVzb3VyY2UgKEdpb0hhbmRsZSAqaGFuZGxlKSB7CisgIGZyZWUoaGFuZGxlKTsKKyAgcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICoKK21ha2VOdWxsUmVzb3VyY2VJZGVudGlmaWVyIChHaW9IYW5kbGUgKmhhbmRsZSwgY2hhciAqYnVmZmVyLCBzaXplX3Qgc2l6ZSkgeworICBTVFJfQkVHSU4oYnVmZmVyLCBzaXplKTsKKyAgU1RSX1BSSU5URigiJXMlYyIsICJudWxsIiwgUEFSQU1FVEVSX1FVQUxJRklFUl9DSEFSQUNURVIpOworICBTVFJfRU5EOworICByZXR1cm4gYnVmZmVyOworfQorCitzdGF0aWMgc3NpemVfdAord3JpdGVOdWxsRGF0YSAoR2lvSGFuZGxlICpoYW5kbGUsIGNvbnN0IHZvaWQgKmRhdGEsIHNpemVfdCBzaXplLCBpbnQgdGltZW91dCkgeworICByZXR1cm4gc2l6ZTsKK30KKworc3RhdGljIGludAorYXdhaXROdWxsSW5wdXQgKEdpb0hhbmRsZSAqaGFuZGxlLCBpbnQgdGltZW91dCkgeworICByZXR1cm4gMTsKK30KKworc3RhdGljIHNzaXplX3QKK3JlYWROdWxsRGF0YSAoCisgIEdpb0hhbmRsZSAqaGFuZGxlLCB2b2lkICpidWZmZXIsIHNpemVfdCBzaXplLAorICBpbnQgaW5pdGlhbFRpbWVvdXQsIGludCBzdWJzZXF1ZW50VGltZW91dAorKSB7CisgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50Cittb25pdG9yTnVsbElucHV0IChHaW9IYW5kbGUgKmhhbmRsZSwgQXN5bmNNb25pdG9yQ2FsbGJhY2sgKmNhbGxiYWNrLCB2b2lkICpkYXRhKSB7CisgIHJldHVybiAxOworfQorCitzdGF0aWMgY29uc3QgR2lvSGFuZGxlTWV0aG9kcyBnaW9OdWxsTWV0aG9kcyA9IHsKKyAgLmRpc2Nvbm5lY3RSZXNvdXJjZSA9IGRpc2Nvbm5lY3ROdWxsUmVzb3VyY2UsCisKKyAgLm1ha2VSZXNvdXJjZUlkZW50aWZpZXIgPSBtYWtlTnVsbFJlc291cmNlSWRlbnRpZmllciwKKworICAud3JpdGVEYXRhID0gd3JpdGVOdWxsRGF0YSwKKyAgLmF3YWl0SW5wdXQgPSBhd2FpdE51bGxJbnB1dCwKKyAgLnJlYWREYXRhID0gcmVhZE51bGxEYXRhLAorICAubW9uaXRvcklucHV0ID0gbW9uaXRvck51bGxJbnB1dAorfTsKKworc3RhdGljIGludAordGVzdE51bGxJZGVudGlmaWVyIChjb25zdCBjaGFyICoqaWRlbnRpZmllcikgeworICByZXR1cm4gaGFzUXVhbGlmaWVyKGlkZW50aWZpZXIsICJudWxsIik7Cit9CisKK3N0YXRpYyBjb25zdCBHaW9QdWJsaWNQcm9wZXJ0aWVzIGdpb1B1YmxpY1Byb3BlcnRpZXNfbnVsbCA9IHsKKyAgLnRlc3RJZGVudGlmaWVyID0gdGVzdE51bGxJZGVudGlmaWVyLAorCisgIC50eXBlID0geworICAgIC5uYW1lID0gIm51bGwiLAorICAgIC5pZGVudGlmaWVyID0gR0lPX1RZUEVfTlVMTAorICB9Cit9OworCitzdGF0aWMgaW50Citpc051bGxTdXBwb3J0ZWQgKGNvbnN0IEdpb0Rlc2NyaXB0b3IgKmRlc2NyaXB0b3IpIHsKKyAgcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBjb25zdCBHaW9PcHRpb25zICoKK2dldE51bGxPcHRpb25zIChjb25zdCBHaW9EZXNjcmlwdG9yICpkZXNjcmlwdG9yKSB7CisgIHJldHVybiAmZGVzY3JpcHRvci0+bnVsbC5vcHRpb25zOworfQorCitzdGF0aWMgY29uc3QgR2lvSGFuZGxlTWV0aG9kcyAqCitnZXROdWxsTWV0aG9kcyAodm9pZCkgeworICByZXR1cm4gJmdpb051bGxNZXRob2RzOworfQorCitzdGF0aWMgR2lvSGFuZGxlICoKK2Nvbm5lY3ROdWxsUmVzb3VyY2UgKAorICBjb25zdCBjaGFyICppZGVudGlmaWVyLAorICBjb25zdCBHaW9EZXNjcmlwdG9yICpkZXNjcmlwdG9yCispIHsKKyAgR2lvSGFuZGxlICpoYW5kbGUgPSBtYWxsb2Moc2l6ZW9mKCpoYW5kbGUpKTsKKworICBpZiAoaGFuZGxlKSB7CisgICAgbWVtc2V0KGhhbmRsZSwgMCwgc2l6ZW9mKCpoYW5kbGUpKTsKKworICAgIHJldHVybiBoYW5kbGU7CisgIH0gZWxzZSB7CisgICAgbG9nTWFsbG9jRXJyb3IoKTsKKyAgfQorCisgIHJldHVybiBOVUxMOworfQorCitzdGF0aWMgY29uc3QgR2lvUHJpdmF0ZVByb3BlcnRpZXMgZ2lvUHJpdmF0ZVByb3BlcnRpZXNfbnVsbCA9IHsKKyAgLmlzU3VwcG9ydGVkID0gaXNOdWxsU3VwcG9ydGVkLAorCisgIC5nZXRPcHRpb25zID0gZ2V0TnVsbE9wdGlvbnMsCisgIC5nZXRIYW5kbGVNZXRob2RzID0gZ2V0TnVsbE1ldGhvZHMsCisKKyAgLmNvbm5lY3RSZXNvdXJjZSA9IGNvbm5lY3ROdWxsUmVzb3VyY2UKK307CisKK2NvbnN0IEdpb1Byb3BlcnRpZXMgZ2lvUHJvcGVydGllc19udWxsID0geworICAucHVibGljID0gJmdpb1B1YmxpY1Byb3BlcnRpZXNfbnVsbCwKKyAgLnByaXZhdGUgPSAmZ2lvUHJpdmF0ZVByb3BlcnRpZXNfbnVsbAorfTsKZGlmZiAtLWdpdCBhL1Byb2dyYW1zL2dpb19zZXJpYWwuYyBiL1Byb2dyYW1zL2dpb19zZXJpYWwuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMzZmOTA4Ci0tLSAvZGV2L251bGwKKysrIGIvUHJvZ3JhbXMvZ2lvX3NlcmlhbC5jCkBAIC0wLDAgKzEsMTcwIEBACisvKgorICogQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyAqICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyAqCisgKiBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorICoKKyAqIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyAqCisgKiBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisgKi8KKworI2luY2x1ZGUgInByb2xvZ3VlLmgiCisKKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworI2luY2x1ZGUgImxvZy5oIgorI2luY2x1ZGUgImlvX2dlbmVyaWMuaCIKKyNpbmNsdWRlICJnaW9faW50ZXJuYWwuaCIKKyNpbmNsdWRlICJpb19zZXJpYWwuaCIKKworc3RydWN0IEdpb0hhbmRsZVN0cnVjdCB7CisgIFNlcmlhbERldmljZSAqZGV2aWNlOworICBTZXJpYWxQYXJhbWV0ZXJzIHBhcmFtZXRlcnM7Cit9OworCitzdGF0aWMgaW50CitkaXNjb25uZWN0U2VyaWFsUmVzb3VyY2UgKEdpb0hhbmRsZSAqaGFuZGxlKSB7CisgIHNlcmlhbENsb3NlRGV2aWNlKGhhbmRsZS0+ZGV2aWNlKTsKKyAgZnJlZShoYW5kbGUpOworICByZXR1cm4gMTsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgKgorbWFrZVNlcmlhbFJlc291cmNlSWRlbnRpZmllciAoR2lvSGFuZGxlICpoYW5kbGUsIGNoYXIgKmJ1ZmZlciwgc2l6ZV90IHNpemUpIHsKKyAgcmV0dXJuIHNlcmlhbE1ha2VEZXZpY2VJZGVudGlmaWVyKGhhbmRsZS0+ZGV2aWNlLCBidWZmZXIsIHNpemUpOworfQorCitzdGF0aWMgdm9pZCAqCitnZXRTZXJpYWxSZXNvdXJjZU9iamVjdCAoR2lvSGFuZGxlICpoYW5kbGUpIHsKKyAgcmV0dXJuIGhhbmRsZS0+ZGV2aWNlOworfQorCitzdGF0aWMgc3NpemVfdAord3JpdGVTZXJpYWxEYXRhIChHaW9IYW5kbGUgKmhhbmRsZSwgY29uc3Qgdm9pZCAqZGF0YSwgc2l6ZV90IHNpemUsIGludCB0aW1lb3V0KSB7CisgIHJldHVybiBzZXJpYWxXcml0ZURhdGEoaGFuZGxlLT5kZXZpY2UsIGRhdGEsIHNpemUpOworfQorCitzdGF0aWMgaW50Cithd2FpdFNlcmlhbElucHV0IChHaW9IYW5kbGUgKmhhbmRsZSwgaW50IHRpbWVvdXQpIHsKKyAgcmV0dXJuIHNlcmlhbEF3YWl0SW5wdXQoaGFuZGxlLT5kZXZpY2UsIHRpbWVvdXQpOworfQorCitzdGF0aWMgc3NpemVfdAorcmVhZFNlcmlhbERhdGEgKAorICBHaW9IYW5kbGUgKmhhbmRsZSwgdm9pZCAqYnVmZmVyLCBzaXplX3Qgc2l6ZSwKKyAgaW50IGluaXRpYWxUaW1lb3V0LCBpbnQgc3Vic2VxdWVudFRpbWVvdXQKKykgeworICByZXR1cm4gc2VyaWFsUmVhZERhdGEoaGFuZGxlLT5kZXZpY2UsIGJ1ZmZlciwgc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGluaXRpYWxUaW1lb3V0LCBzdWJzZXF1ZW50VGltZW91dCk7Cit9CisKK3N0YXRpYyBpbnQKK21vbml0b3JTZXJpYWxJbnB1dCAoR2lvSGFuZGxlICpoYW5kbGUsIEFzeW5jTW9uaXRvckNhbGxiYWNrICpjYWxsYmFjaywgdm9pZCAqZGF0YSkgeworICByZXR1cm4gc2VyaWFsTW9uaXRvcklucHV0KGhhbmRsZS0+ZGV2aWNlLCBjYWxsYmFjaywgZGF0YSk7Cit9CisKK3N0YXRpYyBpbnQKK3JlY29uZmlndXJlU2VyaWFsUmVzb3VyY2UgKEdpb0hhbmRsZSAqaGFuZGxlLCBjb25zdCBTZXJpYWxQYXJhbWV0ZXJzICpwYXJhbWV0ZXJzKSB7CisgIGludCBvayA9IHNlcmlhbFNldFBhcmFtZXRlcnMoaGFuZGxlLT5kZXZpY2UsIHBhcmFtZXRlcnMpOworCisgIGlmIChvaykgaGFuZGxlLT5wYXJhbWV0ZXJzID0gKnBhcmFtZXRlcnM7CisgIHJldHVybiBvazsKK30KKworc3RhdGljIGNvbnN0IEdpb0hhbmRsZU1ldGhvZHMgZ2lvU2VyaWFsTWV0aG9kcyA9IHsKKyAgLmRpc2Nvbm5lY3RSZXNvdXJjZSA9IGRpc2Nvbm5lY3RTZXJpYWxSZXNvdXJjZSwKKworICAubWFrZVJlc291cmNlSWRlbnRpZmllciA9IG1ha2VTZXJpYWxSZXNvdXJjZUlkZW50aWZpZXIsCisgIC5nZXRSZXNvdXJjZU9iamVjdCA9IGdldFNlcmlhbFJlc291cmNlT2JqZWN0LAorCisgIC53cml0ZURhdGEgPSB3cml0ZVNlcmlhbERhdGEsCisgIC5hd2FpdElucHV0ID0gYXdhaXRTZXJpYWxJbnB1dCwKKyAgLnJlYWREYXRhID0gcmVhZFNlcmlhbERhdGEsCisgIC5tb25pdG9ySW5wdXQgPSBtb25pdG9yU2VyaWFsSW5wdXQsCisgIC5yZWNvbmZpZ3VyZVJlc291cmNlID0gcmVjb25maWd1cmVTZXJpYWxSZXNvdXJjZSwKK307CisKK3N0YXRpYyBpbnQKK3Rlc3RTZXJpYWxJZGVudGlmaWVyIChjb25zdCBjaGFyICoqaWRlbnRpZmllcikgeworICByZXR1cm4gaXNTZXJpYWxEZXZpY2VJZGVudGlmaWVyKGlkZW50aWZpZXIpOworfQorCitzdGF0aWMgY29uc3QgR2lvUHVibGljUHJvcGVydGllcyBnaW9QdWJsaWNQcm9wZXJ0aWVzX3NlcmlhbCA9IHsKKyAgLnRlc3RJZGVudGlmaWVyID0gdGVzdFNlcmlhbElkZW50aWZpZXIsCisKKyAgLnR5cGUgPSB7CisgICAgLm5hbWUgPSAic2VyaWFsIiwKKyAgICAuaWRlbnRpZmllciA9IEdJT19UWVBFX1NFUklBTAorICB9Cit9OworCitzdGF0aWMgaW50Citpc1NlcmlhbFN1cHBvcnRlZCAoY29uc3QgR2lvRGVzY3JpcHRvciAqZGVzY3JpcHRvcikgeworICByZXR1cm4gZGVzY3JpcHRvci0+c2VyaWFsLnBhcmFtZXRlcnMgIT0gTlVMTDsKK30KKworc3RhdGljIGNvbnN0IEdpb09wdGlvbnMgKgorZ2V0U2VyaWFsT3B0aW9ucyAoY29uc3QgR2lvRGVzY3JpcHRvciAqZGVzY3JpcHRvcikgeworICByZXR1cm4gJmRlc2NyaXB0b3ItPnNlcmlhbC5vcHRpb25zOworfQorCitzdGF0aWMgY29uc3QgR2lvSGFuZGxlTWV0aG9kcyAqCitnZXRTZXJpYWxNZXRob2RzICh2b2lkKSB7CisgIHJldHVybiAmZ2lvU2VyaWFsTWV0aG9kczsKK30KKworc3RhdGljIEdpb0hhbmRsZSAqCitjb25uZWN0U2VyaWFsUmVzb3VyY2UgKAorICBjb25zdCBjaGFyICppZGVudGlmaWVyLAorICBjb25zdCBHaW9EZXNjcmlwdG9yICpkZXNjcmlwdG9yCispIHsKKyAgR2lvSGFuZGxlICpoYW5kbGUgPSBtYWxsb2Moc2l6ZW9mKCpoYW5kbGUpKTsKKworICBpZiAoaGFuZGxlKSB7CisgICAgbWVtc2V0KGhhbmRsZSwgMCwgc2l6ZW9mKCpoYW5kbGUpKTsKKworICAgIGlmICgoaGFuZGxlLT5kZXZpY2UgPSBzZXJpYWxPcGVuRGV2aWNlKGlkZW50aWZpZXIpKSkgeworICAgICAgaWYgKHNlcmlhbFNldFBhcmFtZXRlcnMoaGFuZGxlLT5kZXZpY2UsIGRlc2NyaXB0b3ItPnNlcmlhbC5wYXJhbWV0ZXJzKSkgeworICAgICAgICBoYW5kbGUtPnBhcmFtZXRlcnMgPSAqZGVzY3JpcHRvci0+c2VyaWFsLnBhcmFtZXRlcnM7CisgICAgICAgIHJldHVybiBoYW5kbGU7CisgICAgICB9CisKKyAgICAgIHNlcmlhbENsb3NlRGV2aWNlKGhhbmRsZS0+ZGV2aWNlKTsKKyAgICB9CisKKyAgICBmcmVlKGhhbmRsZSk7CisgIH0gZWxzZSB7CisgICAgbG9nTWFsbG9jRXJyb3IoKTsKKyAgfQorCisgIHJldHVybiBOVUxMOworfQorCitzdGF0aWMgaW50CitwcmVwYXJlU2VyaWFsRW5kcG9pbnQgKEdpb0VuZHBvaW50ICplbmRwb2ludCkgeworICBnaW9TZXRCeXRlc1BlclNlY29uZChlbmRwb2ludCwgJmVuZHBvaW50LT5oYW5kbGUtPnBhcmFtZXRlcnMpOworICByZXR1cm4gMTsKK30KKworc3RhdGljIGNvbnN0IEdpb1ByaXZhdGVQcm9wZXJ0aWVzIGdpb1ByaXZhdGVQcm9wZXJ0aWVzX3NlcmlhbCA9IHsKKyAgLmlzU3VwcG9ydGVkID0gaXNTZXJpYWxTdXBwb3J0ZWQsCisKKyAgLmdldE9wdGlvbnMgPSBnZXRTZXJpYWxPcHRpb25zLAorICAuZ2V0SGFuZGxlTWV0aG9kcyA9IGdldFNlcmlhbE1ldGhvZHMsCisKKyAgLmNvbm5lY3RSZXNvdXJjZSA9IGNvbm5lY3RTZXJpYWxSZXNvdXJjZSwKKyAgLnByZXBhcmVFbmRwb2ludCA9IHByZXBhcmVTZXJpYWxFbmRwb2ludAorfTsKKworY29uc3QgR2lvUHJvcGVydGllcyBnaW9Qcm9wZXJ0aWVzX3NlcmlhbCA9IHsKKyAgLnB1YmxpYyA9ICZnaW9QdWJsaWNQcm9wZXJ0aWVzX3NlcmlhbCwKKyAgLnByaXZhdGUgPSAmZ2lvUHJpdmF0ZVByb3BlcnRpZXNfc2VyaWFsCit9OwpkaWZmIC0tZ2l0IGEvUHJvZ3JhbXMvZ2lvX3VzYi5jIGIvUHJvZ3JhbXMvZ2lvX3VzYi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVhNjdmYTEKLS0tIC9kZXYvbnVsbAorKysgYi9Qcm9ncmFtcy9naW9fdXNiLmMKQEAgLTAsMCArMSwzOTcgQEAKKy8qCisgKiBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorICogICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorICoKKyAqIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorICoKKyAqIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyAqLworCisjaW5jbHVkZSAicHJvbG9ndWUuaCIKKworI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisKKyNpZmRlZiBIQVZFX1BPU0lYX1RIUkVBRFMKKyNpZmRlZiBfX01JTkdXMzJfXworI2luY2x1ZGUgIndpbl9wdGhyZWFkLmgiCisjZWxzZSAvKiBfX01JTkdXMzJfXyAqLworI2luY2x1ZGUgPHB0aHJlYWQuaD4KKyNlbmRpZiAvKiBfX01JTkdXMzJfXyAqLworI2VuZGlmIC8qIEhBVkVfUE9TSVhfVEhSRUFEUyAqLworCisjaW5jbHVkZSAibG9nLmgiCisjaW5jbHVkZSAicGFyYW1ldGVycy5oIgorI2luY2x1ZGUgImFzeW5jX3dhaXQuaCIKKyNpbmNsdWRlICJpb19nZW5lcmljLmgiCisjaW5jbHVkZSAiZ2lvX2ludGVybmFsLmgiCisjaW5jbHVkZSAiaW9fdXNiLmgiCisjaW5jbHVkZSAidXNiX2hpZC5oIgorI2luY2x1ZGUgImhpZF9pdGVtcy5oIgorCitzdHJ1Y3QgR2lvSGFuZGxlU3RydWN0IHsKKyAgVXNiQ2hhbm5lbCAqY2hhbm5lbDsKKyAgR2lvVXNiQ29ubmVjdGlvblByb3BlcnRpZXMgcHJvcGVydGllczsKKyAgSGlkSXRlbXNEZXNjcmlwdG9yICpoaWRJdGVtczsKK307CisKK3N0YXRpYyBpbnQKK2Rpc2Nvbm5lY3RVc2JSZXNvdXJjZSAoR2lvSGFuZGxlICpoYW5kbGUpIHsKKyAgdXNiQ2xvc2VDaGFubmVsKGhhbmRsZS0+Y2hhbm5lbCk7CisgIGlmIChoYW5kbGUtPmhpZEl0ZW1zKSBmcmVlKGhhbmRsZS0+aGlkSXRlbXMpOworICBmcmVlKGhhbmRsZSk7CisgIHJldHVybiAxOworfQorCitzdGF0aWMgY29uc3QgY2hhciAqCittYWtlVXNiUmVzb3VyY2VJZGVudGlmaWVyIChHaW9IYW5kbGUgKmhhbmRsZSwgY2hhciAqYnVmZmVyLCBzaXplX3Qgc2l6ZSkgeworICByZXR1cm4gdXNiTWFrZUNoYW5uZWxJZGVudGlmaWVyKGhhbmRsZS0+Y2hhbm5lbCwgYnVmZmVyLCBzaXplKTsKK30KKworc3RhdGljIGNoYXIgKgorZ2V0VXNiUmVzb3VyY2VOYW1lIChHaW9IYW5kbGUgKmhhbmRsZSwgaW50IHRpbWVvdXQpIHsKKyAgVXNiQ2hhbm5lbCAqY2hhbm5lbCA9IGhhbmRsZS0+Y2hhbm5lbDsKKworICByZXR1cm4gdXNiR2V0UHJvZHVjdChjaGFubmVsLT5kZXZpY2UsIHRpbWVvdXQpOworfQorCitzdGF0aWMgdm9pZCAqCitnZXRVc2JSZXNvdXJjZU9iamVjdCAoR2lvSGFuZGxlICpoYW5kbGUpIHsKKyAgcmV0dXJuIGhhbmRsZS0+Y2hhbm5lbDsKK30KKworc3RhdGljIHNzaXplX3QKK3dyaXRlVXNiRGF0YSAoR2lvSGFuZGxlICpoYW5kbGUsIGNvbnN0IHZvaWQgKmRhdGEsIHNpemVfdCBzaXplLCBpbnQgdGltZW91dCkgeworICBVc2JDaGFubmVsICpjaGFubmVsID0gaGFuZGxlLT5jaGFubmVsOworCisgIHsKKyAgICBHaW9Vc2JXcml0ZURhdGFNZXRob2QgKm1ldGhvZCA9IGhhbmRsZS0+cHJvcGVydGllcy53cml0ZURhdGE7CisKKyAgICBpZiAobWV0aG9kKSB7CisgICAgICByZXR1cm4gbWV0aG9kKGNoYW5uZWwtPmRldmljZSwgY2hhbm5lbC0+ZGVmaW5pdGlvbiwgZGF0YSwgc2l6ZSwgdGltZW91dCk7CisgICAgfQorICB9CisKKyAgaWYgKGNoYW5uZWwtPmRlZmluaXRpb24tPm91dHB1dEVuZHBvaW50KSB7CisgICAgcmV0dXJuIHVzYldyaXRlRGF0YShjaGFubmVsLT5kZXZpY2UsCisgICAgICAgICAgICAgICAgICAgICAgICBjaGFubmVsLT5kZWZpbml0aW9uLT5vdXRwdXRFbmRwb2ludCwKKyAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEsIHNpemUsIHRpbWVvdXQpOworICB9CisKKyAgeworICAgIGNvbnN0IFVzYlNlcmlhbE9wZXJhdGlvbnMgKnNlcmlhbCA9IHVzYkdldFNlcmlhbE9wZXJhdGlvbnMoY2hhbm5lbC0+ZGV2aWNlKTsKKworICAgIGlmIChzZXJpYWwpIHsKKyAgICAgIGlmIChzZXJpYWwtPndyaXRlRGF0YSkgeworICAgICAgICByZXR1cm4gc2VyaWFsLT53cml0ZURhdGEoY2hhbm5lbC0+ZGV2aWNlLCBkYXRhLCBzaXplKTsKKyAgICAgIH0KKyAgICB9CisgIH0KKworICBlcnJubyA9IEVOT1NZUzsKKyAgcmV0dXJuIC0xOworfQorCitzdGF0aWMgaW50Cithd2FpdFVzYklucHV0IChHaW9IYW5kbGUgKmhhbmRsZSwgaW50IHRpbWVvdXQpIHsKKyAgVXNiQ2hhbm5lbCAqY2hhbm5lbCA9IGhhbmRsZS0+Y2hhbm5lbDsKKworICB7CisgICAgR2lvVXNiQXdhaXRJbnB1dE1ldGhvZCAqbWV0aG9kID0gaGFuZGxlLT5wcm9wZXJ0aWVzLmF3YWl0SW5wdXQ7CisKKyAgICBpZiAobWV0aG9kKSB7CisgICAgICByZXR1cm4gbWV0aG9kKGNoYW5uZWwtPmRldmljZSwgY2hhbm5lbC0+ZGVmaW5pdGlvbiwgdGltZW91dCk7CisgICAgfQorICB9CisKKyAgeworICAgIHVuc2lnbmVkIGNoYXIgZW5kcG9pbnQgPSBjaGFubmVsLT5kZWZpbml0aW9uLT5pbnB1dEVuZHBvaW50OworCisgICAgaWYgKCFlbmRwb2ludCkgeworICAgICAgYXN5bmNXYWl0KHRpbWVvdXQpOworICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgcmV0dXJuIHVzYkF3YWl0SW5wdXQoY2hhbm5lbC0+ZGV2aWNlLCBlbmRwb2ludCwgdGltZW91dCk7CisgIH0KK30KKworc3RhdGljIHNzaXplX3QKK3JlYWRVc2JEYXRhICgKKyAgR2lvSGFuZGxlICpoYW5kbGUsIHZvaWQgKmJ1ZmZlciwgc2l6ZV90IHNpemUsCisgIGludCBpbml0aWFsVGltZW91dCwgaW50IHN1YnNlcXVlbnRUaW1lb3V0CispIHsKKyAgVXNiQ2hhbm5lbCAqY2hhbm5lbCA9IGhhbmRsZS0+Y2hhbm5lbDsKKworICB7CisgICAgR2lvVXNiUmVhZERhdGFNZXRob2QgKm1ldGhvZCA9IGhhbmRsZS0+cHJvcGVydGllcy5yZWFkRGF0YTsKKworICAgIGlmIChtZXRob2QpIHsKKyAgICAgIHJldHVybiBtZXRob2QoY2hhbm5lbC0+ZGV2aWNlLCBjaGFubmVsLT5kZWZpbml0aW9uLCBidWZmZXIsIHNpemUsIGluaXRpYWxUaW1lb3V0LCBzdWJzZXF1ZW50VGltZW91dCk7CisgICAgfQorICB9CisKKyAgeworICAgIHVuc2lnbmVkIGNoYXIgZW5kcG9pbnQgPSBjaGFubmVsLT5kZWZpbml0aW9uLT5pbnB1dEVuZHBvaW50OworCisgICAgaWYgKCFlbmRwb2ludCkgeworICAgICAgZXJybm8gPSBFQUdBSU47CisgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgcmV0dXJuIHVzYlJlYWREYXRhKGNoYW5uZWwtPmRldmljZSwgZW5kcG9pbnQsCisgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlciwgc2l6ZSwgaW5pdGlhbFRpbWVvdXQsIHN1YnNlcXVlbnRUaW1lb3V0KTsKKyAgfQorfQorCitzdGF0aWMgaW50Cittb25pdG9yVXNiSW5wdXQgKEdpb0hhbmRsZSAqaGFuZGxlLCBBc3luY01vbml0b3JDYWxsYmFjayAqY2FsbGJhY2ssIHZvaWQgKmRhdGEpIHsKKyAgaWYgKCFHSU9fVVNCX0lOUFVUX01PTklUT1JfRElTQUJMRSkgeworICAgIFVzYkNoYW5uZWwgKmNoYW5uZWwgPSBoYW5kbGUtPmNoYW5uZWw7CisgICAgdW5zaWduZWQgY2hhciBlbmRwb2ludCA9IGNoYW5uZWwtPmRlZmluaXRpb24tPmlucHV0RW5kcG9pbnQ7CisKKyAgICBpZiAoIWVuZHBvaW50KSByZXR1cm4gMDsKKyAgICByZXR1cm4gdXNiTW9uaXRvcklucHV0RW5kcG9pbnQoY2hhbm5lbC0+ZGV2aWNlLCBlbmRwb2ludCwgY2FsbGJhY2ssIGRhdGEpOworICB9CisKKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK3JlY29uZmlndXJlVXNiUmVzb3VyY2UgKEdpb0hhbmRsZSAqaGFuZGxlLCBjb25zdCBTZXJpYWxQYXJhbWV0ZXJzICpwYXJhbWV0ZXJzKSB7CisgIFVzYkNoYW5uZWwgKmNoYW5uZWwgPSBoYW5kbGUtPmNoYW5uZWw7CisKKyAgcmV0dXJuIHVzYlNldFNlcmlhbFBhcmFtZXRlcnMoY2hhbm5lbC0+ZGV2aWNlLCBwYXJhbWV0ZXJzKTsKK30KKworc3RhdGljIHNzaXplX3QKK3RlbGxVc2JSZXNvdXJjZSAoCisgIEdpb0hhbmRsZSAqaGFuZGxlLCB1aW50OF90IHJlY2lwaWVudCwgdWludDhfdCB0eXBlLAorICB1aW50OF90IHJlcXVlc3QsIHVpbnQxNl90IHZhbHVlLCB1aW50MTZfdCBpbmRleCwKKyAgY29uc3Qgdm9pZCAqZGF0YSwgdWludDE2X3Qgc2l6ZSwgaW50IHRpbWVvdXQKKykgeworICBVc2JDaGFubmVsICpjaGFubmVsID0gaGFuZGxlLT5jaGFubmVsOworCisgIHJldHVybiB1c2JDb250cm9sV3JpdGUoY2hhbm5lbC0+ZGV2aWNlLCByZWNpcGllbnQsIHR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdCwgdmFsdWUsIGluZGV4LCBkYXRhLCBzaXplLCB0aW1lb3V0KTsKK30KKworc3RhdGljIHNzaXplX3QKK2Fza1VzYlJlc291cmNlICgKKyAgR2lvSGFuZGxlICpoYW5kbGUsIHVpbnQ4X3QgcmVjaXBpZW50LCB1aW50OF90IHR5cGUsCisgIHVpbnQ4X3QgcmVxdWVzdCwgdWludDE2X3QgdmFsdWUsIHVpbnQxNl90IGluZGV4LAorICB2b2lkICpidWZmZXIsIHVpbnQxNl90IHNpemUsIGludCB0aW1lb3V0CispIHsKKyAgVXNiQ2hhbm5lbCAqY2hhbm5lbCA9IGhhbmRsZS0+Y2hhbm5lbDsKKworICByZXR1cm4gdXNiQ29udHJvbFJlYWQoY2hhbm5lbC0+ZGV2aWNlLCByZWNpcGllbnQsIHR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0LCB2YWx1ZSwgaW5kZXgsIGJ1ZmZlciwgc2l6ZSwgdGltZW91dCk7Cit9CisKK3N0YXRpYyBjb25zdCBIaWRJdGVtc0Rlc2NyaXB0b3IgKgorZ2V0VXNiSGlkSXRlbXMgKEdpb0hhbmRsZSAqaGFuZGxlLCBpbnQgdGltZW91dCkgeworICBpZiAoIWhhbmRsZS0+aGlkSXRlbXMpIHsKKyAgICBVc2JDaGFubmVsICpjaGFubmVsID0gaGFuZGxlLT5jaGFubmVsOworCisgICAgaGFuZGxlLT5oaWRJdGVtcyA9IHVzYkhpZEdldEl0ZW1zKAorICAgICAgY2hhbm5lbC0+ZGV2aWNlLCBjaGFubmVsLT5kZWZpbml0aW9uLT5pbnRlcmZhY2UsCisgICAgICAwLCB0aW1lb3V0CisgICAgKTsKKyAgfQorCisgIHJldHVybiBoYW5kbGUtPmhpZEl0ZW1zOworfQorCitzdGF0aWMgaW50CitnZXRVc2JIaWRSZXBvcnRTaXplICgKKyAgR2lvSGFuZGxlICpoYW5kbGUsIEhpZFJlcG9ydElkZW50aWZpZXIgaWRlbnRpZmllciwKKyAgSGlkUmVwb3J0U2l6ZSAqc2l6ZSwgaW50IHRpbWVvdXQKKykgeworICBjb25zdCBIaWRJdGVtc0Rlc2NyaXB0b3IgKml0ZW1zID0gZ2V0VXNiSGlkSXRlbXMoaGFuZGxlLCB0aW1lb3V0KTsKKyAgaWYgKCFpdGVtcykgcmV0dXJuIDA7CisgIHJldHVybiBoaWRSZXBvcnRTaXplKGl0ZW1zLCBpZGVudGlmaWVyLCBzaXplKTsKK30KKworc3RhdGljIHNzaXplX3QKK2dldFVzYkhpZFJlcG9ydCAoCisgIEdpb0hhbmRsZSAqaGFuZGxlLCBIaWRSZXBvcnRJZGVudGlmaWVyIGlkZW50aWZpZXIsCisgIHVuc2lnbmVkIGNoYXIgKmJ1ZmZlciwgc2l6ZV90IHNpemUsIGludCB0aW1lb3V0CispIHsKKyAgVXNiQ2hhbm5lbCAqY2hhbm5lbCA9IGhhbmRsZS0+Y2hhbm5lbDsKKworICByZXR1cm4gdXNiSGlkR2V0UmVwb3J0KGNoYW5uZWwtPmRldmljZSwgY2hhbm5lbC0+ZGVmaW5pdGlvbi0+aW50ZXJmYWNlLAorICAgICAgICAgICAgICAgICAgICAgICAgIGlkZW50aWZpZXIsIGJ1ZmZlciwgc2l6ZSwgdGltZW91dCk7Cit9CisKK3N0YXRpYyBzc2l6ZV90CitzZXRVc2JIaWRSZXBvcnQgKAorICBHaW9IYW5kbGUgKmhhbmRsZSwgSGlkUmVwb3J0SWRlbnRpZmllciBpZGVudGlmaWVyLAorICBjb25zdCB1bnNpZ25lZCBjaGFyICpkYXRhLCBzaXplX3Qgc2l6ZSwgaW50IHRpbWVvdXQKKykgeworICBVc2JDaGFubmVsICpjaGFubmVsID0gaGFuZGxlLT5jaGFubmVsOworCisgIHJldHVybiB1c2JIaWRTZXRSZXBvcnQoY2hhbm5lbC0+ZGV2aWNlLCBjaGFubmVsLT5kZWZpbml0aW9uLT5pbnRlcmZhY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgaWRlbnRpZmllciwgZGF0YSwgc2l6ZSwgdGltZW91dCk7Cit9CisKK3N0YXRpYyBzc2l6ZV90CitnZXRVc2JIaWRGZWF0dXJlICgKKyAgR2lvSGFuZGxlICpoYW5kbGUsIEhpZFJlcG9ydElkZW50aWZpZXIgaWRlbnRpZmllciwKKyAgdW5zaWduZWQgY2hhciAqYnVmZmVyLCBzaXplX3Qgc2l6ZSwgaW50IHRpbWVvdXQKKykgeworICBVc2JDaGFubmVsICpjaGFubmVsID0gaGFuZGxlLT5jaGFubmVsOworCisgIHJldHVybiB1c2JIaWRHZXRGZWF0dXJlKGNoYW5uZWwtPmRldmljZSwgY2hhbm5lbC0+ZGVmaW5pdGlvbi0+aW50ZXJmYWNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICBpZGVudGlmaWVyLCBidWZmZXIsIHNpemUsIHRpbWVvdXQpOworfQorCitzdGF0aWMgc3NpemVfdAorc2V0VXNiSGlkRmVhdHVyZSAoCisgIEdpb0hhbmRsZSAqaGFuZGxlLCBIaWRSZXBvcnRJZGVudGlmaWVyIGlkZW50aWZpZXIsCisgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGEsIHNpemVfdCBzaXplLCBpbnQgdGltZW91dAorKSB7CisgIFVzYkNoYW5uZWwgKmNoYW5uZWwgPSBoYW5kbGUtPmNoYW5uZWw7CisKKyAgcmV0dXJuIHVzYkhpZFNldEZlYXR1cmUoY2hhbm5lbC0+ZGV2aWNlLCBjaGFubmVsLT5kZWZpbml0aW9uLT5pbnRlcmZhY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGlkZW50aWZpZXIsIGRhdGEsIHNpemUsIHRpbWVvdXQpOworfQorCitzdGF0aWMgY29uc3QgR2lvSGFuZGxlTWV0aG9kcyBnaW9Vc2JNZXRob2RzID0geworICAuZGlzY29ubmVjdFJlc291cmNlID0gZGlzY29ubmVjdFVzYlJlc291cmNlLAorCisgIC5tYWtlUmVzb3VyY2VJZGVudGlmaWVyID0gbWFrZVVzYlJlc291cmNlSWRlbnRpZmllciwKKyAgLmdldFJlc291cmNlTmFtZSA9IGdldFVzYlJlc291cmNlTmFtZSwKKyAgLmdldFJlc291cmNlT2JqZWN0ID0gZ2V0VXNiUmVzb3VyY2VPYmplY3QsCisKKyAgLndyaXRlRGF0YSA9IHdyaXRlVXNiRGF0YSwKKyAgLmF3YWl0SW5wdXQgPSBhd2FpdFVzYklucHV0LAorICAucmVhZERhdGEgPSByZWFkVXNiRGF0YSwKKyAgLm1vbml0b3JJbnB1dCA9IG1vbml0b3JVc2JJbnB1dCwKKyAgLnJlY29uZmlndXJlUmVzb3VyY2UgPSByZWNvbmZpZ3VyZVVzYlJlc291cmNlLAorCisgIC50ZWxsUmVzb3VyY2UgPSB0ZWxsVXNiUmVzb3VyY2UsCisgIC5hc2tSZXNvdXJjZSA9IGFza1VzYlJlc291cmNlLAorCisgIC5nZXRIaWRSZXBvcnRTaXplID0gZ2V0VXNiSGlkUmVwb3J0U2l6ZSwKKyAgLmdldEhpZFJlcG9ydCA9IGdldFVzYkhpZFJlcG9ydCwKKyAgLnNldEhpZFJlcG9ydCA9IHNldFVzYkhpZFJlcG9ydCwKKyAgLmdldEhpZEZlYXR1cmUgPSBnZXRVc2JIaWRGZWF0dXJlLAorICAuc2V0SGlkRmVhdHVyZSA9IHNldFVzYkhpZEZlYXR1cmUsCit9OworCitzdGF0aWMgaW50Cit0ZXN0VXNiSWRlbnRpZmllciAoY29uc3QgY2hhciAqKmlkZW50aWZpZXIpIHsKKyAgcmV0dXJuIGlzVXNiRGV2aWNlSWRlbnRpZmllcihpZGVudGlmaWVyKTsKK30KKworc3RhdGljIGNvbnN0IEdpb1B1YmxpY1Byb3BlcnRpZXMgZ2lvUHVibGljUHJvcGVydGllc191c2IgPSB7CisgIC50ZXN0SWRlbnRpZmllciA9IHRlc3RVc2JJZGVudGlmaWVyLAorCisgIC50eXBlID0geworICAgIC5uYW1lID0gIlVTQiIsCisgICAgLmlkZW50aWZpZXIgPSBHSU9fVFlQRV9VU0IKKyAgfQorfTsKKworc3RhdGljIGludAoraXNVc2JTdXBwb3J0ZWQgKGNvbnN0IEdpb0Rlc2NyaXB0b3IgKmRlc2NyaXB0b3IpIHsKKyAgcmV0dXJuIGRlc2NyaXB0b3ItPnVzYi5jaGFubmVsRGVmaW5pdGlvbnMgIT0gTlVMTDsKK30KKworc3RhdGljIGNvbnN0IEdpb09wdGlvbnMgKgorZ2V0VXNiT3B0aW9ucyAoY29uc3QgR2lvRGVzY3JpcHRvciAqZGVzY3JpcHRvcikgeworICByZXR1cm4gJmRlc2NyaXB0b3ItPnVzYi5vcHRpb25zOworfQorCitzdGF0aWMgY29uc3QgR2lvSGFuZGxlTWV0aG9kcyAqCitnZXRVc2JNZXRob2RzICh2b2lkKSB7CisgIHJldHVybiAmZ2lvVXNiTWV0aG9kczsKK30KKworc3RhdGljIEdpb0hhbmRsZSAqCitjb25uZWN0VXNiUmVzb3VyY2UgKAorICBjb25zdCBjaGFyICppZGVudGlmaWVyLAorICBjb25zdCBHaW9EZXNjcmlwdG9yICpkZXNjcmlwdG9yCispIHsKKyAgR2lvSGFuZGxlICpoYW5kbGUgPSBtYWxsb2Moc2l6ZW9mKCpoYW5kbGUpKTsKKworICBpZiAoaGFuZGxlKSB7CisgICAgbWVtc2V0KGhhbmRsZSwgMCwgc2l6ZW9mKCpoYW5kbGUpKTsKKworICAgIGlmICgoaGFuZGxlLT5jaGFubmVsID0gdXNiT3BlbkNoYW5uZWwoZGVzY3JpcHRvci0+dXNiLmNoYW5uZWxEZWZpbml0aW9ucywgaWRlbnRpZmllcikpKSB7CisgICAgICBjb25zdCBVc2JDaGFubmVsICpjaGFubmVsID0gaGFuZGxlLT5jaGFubmVsOworICAgICAgY29uc3QgVXNiQ2hhbm5lbERlZmluaXRpb24gKmRlZmluaXRpb24gPSBjaGFubmVsLT5kZWZpbml0aW9uOworICAgICAgR2lvVXNiQ29ubmVjdGlvblByb3BlcnRpZXMgKnByb3BlcnRpZXMgPSAmaGFuZGxlLT5wcm9wZXJ0aWVzOworCisgICAgICBtZW1zZXQocHJvcGVydGllcywgMCwgc2l6ZW9mKCpwcm9wZXJ0aWVzKSk7CisgICAgICBwcm9wZXJ0aWVzLT5hcHBsaWNhdGlvbkRhdGEgPSBkZWZpbml0aW9uLT5kYXRhOworICAgICAgcHJvcGVydGllcy0+d3JpdGVEYXRhID0gTlVMTDsKKyAgICAgIHByb3BlcnRpZXMtPmF3YWl0SW5wdXQgPSBOVUxMOworICAgICAgcHJvcGVydGllcy0+cmVhZERhdGEgPSBOVUxMOworICAgICAgcHJvcGVydGllcy0+aW5wdXRGaWx0ZXIgPSBOVUxMOworCisgICAgICB7CisgICAgICAgIEdpb1VzYlNldENvbm5lY3Rpb25Qcm9wZXJ0aWVzTWV0aG9kICptZXRob2QgPSBkZXNjcmlwdG9yLT51c2Iuc2V0Q29ubmVjdGlvblByb3BlcnRpZXM7CisKKyAgICAgICAgaWYgKG1ldGhvZCkgbWV0aG9kKHByb3BlcnRpZXMsIGRlZmluaXRpb24pOworICAgICAgfQorCisgICAgICBpZiAoIXByb3BlcnRpZXMtPmlucHV0RmlsdGVyIHx8CisgICAgICAgICAgdXNiQWRkSW5wdXRGaWx0ZXIoY2hhbm5lbC0+ZGV2aWNlLCBwcm9wZXJ0aWVzLT5pbnB1dEZpbHRlcikpIHsKKyAgICAgICAgcmV0dXJuIGhhbmRsZTsKKyAgICAgIH0KKworICAgICAgdXNiQ2xvc2VDaGFubmVsKGhhbmRsZS0+Y2hhbm5lbCk7CisgICAgfQorCisgICAgZnJlZShoYW5kbGUpOworICB9IGVsc2UgeworICAgIGxvZ01hbGxvY0Vycm9yKCk7CisgIH0KKworICByZXR1cm4gTlVMTDsKK30KKworc3RhdGljIGludAorcHJlcGFyZVVzYkVuZHBvaW50IChHaW9FbmRwb2ludCAqZW5kcG9pbnQpIHsKKyAgR2lvSGFuZGxlICpoYW5kbGUgPSBlbmRwb2ludC0+aGFuZGxlOworICBVc2JDaGFubmVsICpjaGFubmVsID0gaGFuZGxlLT5jaGFubmVsOworCisgIGlmICghZW5kcG9pbnQtPm9wdGlvbnMuYXBwbGljYXRpb25EYXRhKSB7CisgICAgZW5kcG9pbnQtPm9wdGlvbnMuYXBwbGljYXRpb25EYXRhID0gaGFuZGxlLT5wcm9wZXJ0aWVzLmFwcGxpY2F0aW9uRGF0YTsKKyAgfQorCisgIHsKKyAgICBjb25zdCBTZXJpYWxQYXJhbWV0ZXJzICpwYXJhbWV0ZXJzID0gY2hhbm5lbC0+ZGVmaW5pdGlvbi0+c2VyaWFsOworCisgICAgaWYgKHBhcmFtZXRlcnMpIHsKKyAgICAgIGdpb1NldEJ5dGVzUGVyU2Vjb25kKGVuZHBvaW50LCBwYXJhbWV0ZXJzKTsKKyAgICB9CisgIH0KKworICByZXR1cm4gMTsKK30KKworc3RhdGljIGNvbnN0IEdpb1ByaXZhdGVQcm9wZXJ0aWVzIGdpb1ByaXZhdGVQcm9wZXJ0aWVzX3VzYiA9IHsKKyAgLmlzU3VwcG9ydGVkID0gaXNVc2JTdXBwb3J0ZWQsCisKKyAgLmdldE9wdGlvbnMgPSBnZXRVc2JPcHRpb25zLAorICAuZ2V0SGFuZGxlTWV0aG9kcyA9IGdldFVzYk1ldGhvZHMsCisKKyAgLmNvbm5lY3RSZXNvdXJjZSA9IGNvbm5lY3RVc2JSZXNvdXJjZSwKKyAgLnByZXBhcmVFbmRwb2ludCA9IHByZXBhcmVVc2JFbmRwb2ludAorfTsKKworY29uc3QgR2lvUHJvcGVydGllcyBnaW9Qcm9wZXJ0aWVzX3VzYiA9IHsKKyAgLnB1YmxpYyA9ICZnaW9QdWJsaWNQcm9wZXJ0aWVzX3VzYiwKKyAgLnByaXZhdGUgPSAmZ2lvUHJpdmF0ZVByb3BlcnRpZXNfdXNiCit9OwpkaWZmIC0tZ2l0IGEvUHJvZ3JhbXMvaGlkLmMgYi9Qcm9ncmFtcy9oaWQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ODMxZGMxCi0tLSAvZGV2L251bGwKKysrIGIvUHJvZ3JhbXMvaGlkLmMKQEAgLTAsMCArMSw3NTQgQEAKKy8qCisgKiBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorICogICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorICoKKyAqIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorICoKKyAqIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyAqLworCisjaW5jbHVkZSAicHJvbG9ndWUuaCIKKworI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisKKyNpbmNsdWRlICJsb2cuaCIKKyNpbmNsdWRlICJzdHJmbXQuaCIKKyNpbmNsdWRlICJpb19oaWQuaCIKKyNpbmNsdWRlICJoaWRfaW50ZXJuYWwuaCIKKyNpbmNsdWRlICJwYXJzZS5oIgorI2luY2x1ZGUgImRldmljZS5oIgorCit0eXBlZGVmIGVudW0geworICBISURfUEFSTV9BRERSRVNTLAorICBISURfUEFSTV9OQU1FLAorCisgIEhJRF9QQVJNX01BTlVGQUNUVVJFUiwKKyAgSElEX1BBUk1fREVTQ1JJUFRJT04sCisgIEhJRF9QQVJNX1NFUklBTF9OVU1CRVIsCisKKyAgSElEX1BBUk1fVkVORE9SLAorICBISURfUEFSTV9QUk9EVUNULAorfSBIaWREZXZpY2VQYXJhbWV0ZXI7CisKK3N0YXRpYyBjb25zdCBjaGFyICpjb25zdCBoaWREZXZpY2VQYXJhbWV0ZXJOYW1lc1tdID0geworICAiYWRkcmVzcyIsCisgICJuYW1lIiwKKworICAibWFudWZhY3R1cmVyIiwKKyAgImRlc2NyaXB0aW9uIiwKKyAgInNlcmlhbE51bWJlciIsCisKKyAgInZlbmRvciIsCisgICJwcm9kdWN0IiwKKworICBOVUxMCit9OworCitzdGF0aWMgY2hhciAqKgoraGlkR2V0RGV2aWNlUGFyYW1ldGVycyAoY29uc3QgY2hhciAqc3RyaW5nKSB7CisgIGlmICghc3RyaW5nKSBzdHJpbmcgPSAiIjsKKyAgcmV0dXJuIGdldERldmljZVBhcmFtZXRlcnMoaGlkRGV2aWNlUGFyYW1ldGVyTmFtZXMsIHN0cmluZyk7Cit9CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgU1RSX0RFQ0xBUkVfRk9STUFUVEVSKCgqZXh0ZW5kRGV2aWNlSWRlbnRpZmllciksIEhpZERldmljZSAqZGV2aWNlKTsKK30gSGlkQnVzTWV0aG9kczsKKworc3RhdGljCitTVFJfQkVHSU5fRk9STUFUVEVSKGhpZEV4dGVuZFVTQkRldmljZUlkZW50aWZpZXIsIEhpZERldmljZSAqZGV2aWNlKQorICB7CisgICAgY29uc3QgY2hhciAqc2VyaWFsTnVtYmVyID0gaGlkR2V0RGV2aWNlQWRkcmVzcyhkZXZpY2UpOworCisgICAgaWYgKHNlcmlhbE51bWJlciAmJiAqc2VyaWFsTnVtYmVyKSB7CisgICAgICBTVFJfUFJJTlRGKAorICAgICAgICAiJXMlYyVzJWMiLAorICAgICAgICBoaWREZXZpY2VQYXJhbWV0ZXJOYW1lc1tISURfUEFSTV9TRVJJQUxfTlVNQkVSXSwKKyAgICAgICAgUEFSQU1FVEVSX0FTU0lHTk1FTlRfQ0hBUkFDVEVSLAorICAgICAgICBzZXJpYWxOdW1iZXIsIERFVklDRV9QQVJBTUVURVJfU0VQQVJBVE9SCisgICAgICApOworICAgIH0KKyAgfQorU1RSX0VORF9GT1JNQVRURVIKKworc3RhdGljIGNvbnN0IEhpZEJ1c01ldGhvZHMgaGlkVVNCQnVzTWV0aG9kcyA9IHsKKyAgLmV4dGVuZERldmljZUlkZW50aWZpZXIgPSBoaWRFeHRlbmRVU0JEZXZpY2VJZGVudGlmaWVyLAorfTsKKworc3RhdGljCitTVFJfQkVHSU5fRk9STUFUVEVSKGhpZEV4dGVuZEJsdWV0b290aERldmljZUlkZW50aWZpZXIsIEhpZERldmljZSAqZGV2aWNlKQorICB7CisgICAgY29uc3QgY2hhciAqbWFjQWRkcmVzcyA9IGhpZEdldERldmljZUFkZHJlc3MoZGV2aWNlKTsKKworICAgIGlmIChtYWNBZGRyZXNzICYmICptYWNBZGRyZXNzKSB7CisgICAgICBTVFJfUFJJTlRGKAorICAgICAgICAiJXMlYyVzJWMiLAorICAgICAgICBoaWREZXZpY2VQYXJhbWV0ZXJOYW1lc1tISURfUEFSTV9BRERSRVNTXSwKKyAgICAgICAgUEFSQU1FVEVSX0FTU0lHTk1FTlRfQ0hBUkFDVEVSLAorICAgICAgICBtYWNBZGRyZXNzLCBERVZJQ0VfUEFSQU1FVEVSX1NFUEFSQVRPUgorICAgICAgKTsKKyAgICB9CisgIH0KK1NUUl9FTkRfRk9STUFUVEVSCisKK3N0YXRpYyBjb25zdCBIaWRCdXNNZXRob2RzIGhpZEJsdWV0b290aEJ1c01ldGhvZHM9IHsKKyAgLmV4dGVuZERldmljZUlkZW50aWZpZXIgPSBoaWRFeHRlbmRCbHVldG9vdGhEZXZpY2VJZGVudGlmaWVyLAorfTsKKwordm9pZAoraGlkSW5pdGlhbGl6ZVVTQkZpbHRlciAoSGlkVVNCRmlsdGVyICpmaWx0ZXIpIHsKKyAgbWVtc2V0KGZpbHRlciwgMCwgc2l6ZW9mKCpmaWx0ZXIpKTsKK30KKwordm9pZAoraGlkSW5pdGlhbGl6ZUJsdWV0b290aEZpbHRlciAoSGlkQmx1ZXRvb3RoRmlsdGVyICpmaWx0ZXIpIHsKKyAgbWVtc2V0KGZpbHRlciwgMCwgc2l6ZW9mKCpmaWx0ZXIpKTsKK30KKworaW50CitoaWRQYXJzZURldmljZUlkZW50aWZpZXIgKEhpZERldmljZUlkZW50aWZpZXIgKmlkZW50aWZpZXIsIGNvbnN0IGNoYXIgKnN0cmluZykgeworICBpZiAoIXN0cmluZykgcmV0dXJuIDA7CisgIGlmICghKnN0cmluZykgcmV0dXJuIDA7CisgIGlmIChzdHJsZW4oc3RyaW5nKSA+IDQpIHJldHVybiAwOworCisgIGNoYXIgKmVuZDsKKyAgbG9uZyB1bnNpZ25lZCBpbnQgdmFsdWUgPSBzdHJ0b3VsKHN0cmluZywgJmVuZCwgMFgxMCk7CisgIGlmICgqZW5kKSByZXR1cm4gMDsKKyAgaWYgKHZhbHVlID4gVUlOVDE2X01BWCkgcmV0dXJuIDA7CisKKyAgKmlkZW50aWZpZXIgPSB2YWx1ZTsKKyAgcmV0dXJuIDE7Cit9CisKK2ludAoraGlkTWF0Y2hTdHJpbmcgKGNvbnN0IGNoYXIgKmFjdHVhbFN0cmluZywgY29uc3QgY2hhciAqdGVzdFN0cmluZykgeworICBzaXplX3QgdGVzdExlbmd0aCA9IHN0cmxlbih0ZXN0U3RyaW5nKTsKKyAgaWYgKHRlc3RMZW5ndGggPiBzdHJsZW4oYWN0dWFsU3RyaW5nKSkgcmV0dXJuIDA7CisgIHJldHVybiBzdHJuY2FzZWNtcChhY3R1YWxTdHJpbmcsIHRlc3RTdHJpbmcsIHRlc3RMZW5ndGgpID09IDA7Cit9CisKK3N0cnVjdCBIaWREZXZpY2VTdHJ1Y3QgeworICBIaWRIYW5kbGUgKmhhbmRsZTsKKworICBjb25zdCBIaWRCdXNNZXRob2RzICpidXNNZXRob2RzOworICBjb25zdCBIaWRIYW5kbGVNZXRob2RzICpoYW5kbGVNZXRob2RzOworfTsKKworc3RhdGljIHZvaWQKK2hpZERlc3Ryb3lIYW5kbGUgKEhpZEhhbmRsZSAqaGFuZGxlKSB7CisgIEhpZERlc3Ryb3lIYW5kbGVNZXRob2QgKm1ldGhvZCA9IGhpZFBhY2thZ2VEZXNjcmlwdG9yLmhhbmRsZU1ldGhvZHMtPmRlc3Ryb3lIYW5kbGU7CisKKyAgaWYgKG1ldGhvZCkgeworICAgIG1ldGhvZChoYW5kbGUpOworICB9IGVsc2UgeworICAgIGxvZ1Vuc3VwcG9ydGVkT3BlcmF0aW9uKCJoaWRDbG9zZURldmljZSIpOworICAgIGVycm5vID0gRU5PU1lTOworICB9Cit9CisKK3N0YXRpYyBIaWREZXZpY2UgKgoraGlkTmV3RGV2aWNlIChIaWRIYW5kbGUgKmhhbmRsZSwgY29uc3QgSGlkQnVzTWV0aG9kcyAqYnVzTWV0aG9kcykgeworICBpZiAoaGFuZGxlKSB7CisgICAgSGlkRGV2aWNlICpkZXZpY2U7CisKKyAgICBpZiAoKGRldmljZSA9IG1hbGxvYyhzaXplb2YoKmRldmljZSkpKSkgeworICAgICAgbWVtc2V0KGRldmljZSwgMCwgc2l6ZW9mKCpkZXZpY2UpKTsKKyAgICAgIGRldmljZS0+aGFuZGxlID0gaGFuZGxlOworICAgICAgZGV2aWNlLT5oYW5kbGVNZXRob2RzID0gaGlkUGFja2FnZURlc2NyaXB0b3IuaGFuZGxlTWV0aG9kczsKKyAgICAgIGRldmljZS0+YnVzTWV0aG9kcyA9IGJ1c01ldGhvZHM7CisgICAgICByZXR1cm4gZGV2aWNlOworICAgIH0gZWxzZSB7CisgICAgICBsb2dNYWxsb2NFcnJvcigpOworICAgIH0KKworICAgIGhpZERlc3Ryb3lIYW5kbGUoaGFuZGxlKTsKKyAgfQorCisgIHJldHVybiBOVUxMOworfQorCitIaWREZXZpY2UgKgoraGlkT3BlblVTQkRldmljZSAoY29uc3QgSGlkVVNCRmlsdGVyICpmaWx0ZXIpIHsKKyAgSGlkTmV3VVNCSGFuZGxlTWV0aG9kICptZXRob2QgPSBoaWRQYWNrYWdlRGVzY3JpcHRvci5uZXdVU0JIYW5kbGU7CisKKyAgaWYgKCFtZXRob2QpIHsKKyAgICBsb2dVbnN1cHBvcnRlZE9wZXJhdGlvbigiaGlkT3BlblVTQkRldmljZSIpOworICAgIGVycm5vID0gRU5PU1lTOworICAgIHJldHVybiBOVUxMOworICB9CisKKyAgcmV0dXJuIGhpZE5ld0RldmljZShtZXRob2QoZmlsdGVyKSwgJmhpZFVTQkJ1c01ldGhvZHMpOworfQorCitIaWREZXZpY2UgKgoraGlkT3BlbkJsdWV0b290aERldmljZSAoY29uc3QgSGlkQmx1ZXRvb3RoRmlsdGVyICpmaWx0ZXIpIHsKKyAgSGlkTmV3Qmx1ZXRvb3RoSGFuZGxlTWV0aG9kICptZXRob2QgPSBoaWRQYWNrYWdlRGVzY3JpcHRvci5uZXdCbHVldG9vdGhIYW5kbGU7CisKKyAgaWYgKCFtZXRob2QpIHsKKyAgICBsb2dVbnN1cHBvcnRlZE9wZXJhdGlvbigiaGlkT3BlbkJsdWV0b290aERldmljZSIpOworICAgIGVycm5vID0gRU5PU1lTOworICAgIHJldHVybiBOVUxMOworICB9CisKKyAgcmV0dXJuIGhpZE5ld0RldmljZShtZXRob2QoZmlsdGVyKSwgJmhpZEJsdWV0b290aEJ1c01ldGhvZHMpOworfQorCit2b2lkCitoaWRJbml0aWFsaXplRmlsdGVyIChIaWRGaWx0ZXIgKmZpbHRlcikgeworICBtZW1zZXQoZmlsdGVyLCAwLCBzaXplb2YoKmZpbHRlcikpOworfQorCitpbnQKK2hpZFNldEZpbHRlcklkZW50aWZpZXJzICgKKyAgSGlkRmlsdGVyICpmaWx0ZXIsIGNvbnN0IGNoYXIgKnZlbmRvciwgY29uc3QgY2hhciAqcHJvZHVjdAorKSB7CisgIHR5cGVkZWYgc3RydWN0IHsKKyAgICBjb25zdCBjaGFyICpuYW1lOworICAgIGNvbnN0IGNoYXIgKm9wZXJhbmQ7CisgICAgSGlkRGV2aWNlSWRlbnRpZmllciAqaWRlbnRpZmllcjsKKyAgfSBJZGVudGlmaWVyRW50cnk7CisKKyAgY29uc3QgSWRlbnRpZmllckVudHJ5IGlkZW50aWZpZXJUYWJsZVtdID0geworICAgIHsgLm5hbWUgPSAidmVuZG9yIiwKKyAgICAgIC5vcGVyYW5kID0gdmVuZG9yLAorICAgICAgLmlkZW50aWZpZXIgPSAmZmlsdGVyLT5jb21tb24udmVuZG9ySWRlbnRpZmllciwKKyAgICB9LAorCisgICAgeyAubmFtZSA9ICJwcm9kdWN0IiwKKyAgICAgIC5vcGVyYW5kID0gcHJvZHVjdCwKKyAgICAgIC5pZGVudGlmaWVyID0gJmZpbHRlci0+Y29tbW9uLnByb2R1Y3RJZGVudGlmaWVyLAorICAgIH0sCisgIH07CisKKyAgY29uc3QgSWRlbnRpZmllckVudHJ5ICpjdXIgPSBpZGVudGlmaWVyVGFibGU7CisgIGNvbnN0IElkZW50aWZpZXJFbnRyeSAqZW5kID0gY3VyICsgQVJSQVlfQ09VTlQoaWRlbnRpZmllclRhYmxlKTsKKworICB3aGlsZSAoY3VyIDwgZW5kKSB7CisgICAgaWYgKGN1ci0+b3BlcmFuZCAmJiAqY3VyLT5vcGVyYW5kKSB7CisgICAgICBpZiAoIWhpZFBhcnNlRGV2aWNlSWRlbnRpZmllcihjdXItPmlkZW50aWZpZXIsIGN1ci0+b3BlcmFuZCkpIHsKKyAgICAgICAgbG9nTWVzc2FnZShMT0dfRVJSLCAiaW52YWxpZCAlcyBpZGVudGlmaWVyOiAlcyIsIGN1ci0+bmFtZSwgY3VyLT5vcGVyYW5kKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgICB9CisgICAgfQorCisgICAgY3VyICs9IDE7CisgIH0KKworICByZXR1cm4gMTsKK30KKworc3RhdGljIGludAoraGlkQ29weVN0cmluZ0ZpbHRlciAoY29uc3Qgdm9pZCAqZnJvbSwgdm9pZCAqdG8pIHsKKyAgY29uc3QgY2hhciAqZnJvbVN0cmluZyA9IGZyb207CisgIGlmICghZnJvbVN0cmluZykgcmV0dXJuIDA7CisgIGlmICghKmZyb21TdHJpbmcpIHJldHVybiAwOworCisgIGNvbnN0IGNoYXIgKip0b1N0cmluZyA9IHRvOworICAqdG9TdHJpbmcgPSBmcm9tU3RyaW5nOworICByZXR1cm4gMTsKK30KKworc3RhdGljIGludAoraGlkQ29weUlkZW50aWZpZXJGaWx0ZXIgKGNvbnN0IHZvaWQgKmZyb20sIHZvaWQgKnRvKSB7CisgIGNvbnN0IEhpZERldmljZUlkZW50aWZpZXIgKmZyb21JZGVudGlmaWVyID0gZnJvbTsKKyAgaWYgKCEqZnJvbUlkZW50aWZpZXIpIHJldHVybiAwOworCisgIEhpZERldmljZUlkZW50aWZpZXIgKnRvSWRlbnRpZmllciA9IHRvOworICAqdG9JZGVudGlmaWVyID0gKmZyb21JZGVudGlmaWVyOworICByZXR1cm4gMTsKK30KKworc3RhdGljIGludAoraGlkVGVzdE1hY0FkZHJlc3MgKGNvbnN0IHZvaWQgKmZyb20pIHsKKyAgY29uc3QgY2hhciAqYWRkcmVzcyA9IGZyb207CisgIGNvbnN0IGNoYXIgKmJ5dGUgPSBhZGRyZXNzOworCisgIHVuc2lnbmVkIGludCBzdGF0ZSA9IDA7CisgIHVuc2lnbmVkIGludCBvY3RldHMgPSAwOworICBjb25zdCBjaGFyICpkaWdpdHMgPSAiMDEyMzQ1Njc4OUFCQ0RFRmFiY2RlZiI7CisKKyAgd2hpbGUgKCpieXRlKSB7CisgICAgaWYgKCFzdGF0ZSkgb2N0ZXRzICs9IDE7CisKKyAgICBpZiAoKytzdGF0ZSA8IDMpIHsKKyAgICAgIGlmICghc3RyY2hyKGRpZ2l0cywgKmJ5dGUpKSByZXR1cm4gMDsKKyAgICB9IGVsc2UgeworICAgICAgaWYgKCpieXRlICE9ICc6JykgcmV0dXJuIDA7CisgICAgICBzdGF0ZSA9IDA7CisgICAgfQorCisgICAgYnl0ZSArPSAxOworICB9CisKKyAgcmV0dXJuIChvY3RldHMgPT0gNikgJiYgKHN0YXRlID09IDIpOworfQorCitpbnQKK2hpZE9wZW5EZXZpY2VXaXRoRmlsdGVyIChIaWREZXZpY2UgKipkZXZpY2UsIGNvbnN0IEhpZEZpbHRlciAqZmlsdGVyKSB7CisgIHVuc2lnbmVkIGNoYXIgd2FudFVTQiA9IGZpbHRlci0+ZmxhZ3Mud2FudFVTQjsKKyAgdW5zaWduZWQgY2hhciB3YW50Qmx1ZXRvb3RoID0gZmlsdGVyLT5mbGFncy53YW50Qmx1ZXRvb3RoOworCisgIEhpZENvbW1vblByb3BlcnRpZXMgY29tbW9uOworICBtZW1zZXQoJmNvbW1vbiwgMCwgc2l6ZW9mKGNvbW1vbikpOworCisgIEhpZFVTQlByb3BlcnRpZXMgdXNiOworICBtZW1zZXQoJnVzYiwgMCwgc2l6ZW9mKHVzYikpOworCisgIEhpZEJsdWV0b290aFByb3BlcnRpZXMgYmx1ZXRvb3RoOworICBtZW1zZXQoJmJsdWV0b290aCwgMCwgc2l6ZW9mKGJsdWV0b290aCkpOworCisgIHR5cGVkZWYgc3RydWN0IHsKKyAgICBjb25zdCBjaGFyICpuYW1lOworICAgIHVuc2lnbmVkIGNoYXIgKmZsYWc7CisgICAgaW50ICgqY29weSkgKGNvbnN0IHZvaWQgKmZyb20sIHZvaWQgKnRvKTsKKyAgICBpbnQgKCp0ZXN0KSAoY29uc3Qgdm9pZCAqZnJvbSk7CisgICAgY29uc3Qgdm9pZCAqZnJvbTsKKyAgICB2b2lkICp0bzsKKyAgfSBGaWx0ZXJFbnRyeTsKKworICBjb25zdCBGaWx0ZXJFbnRyeSBmaWx0ZXJUYWJsZVtdID0geworICAgIHsgLm5hbWUgPSAidmVuZG9yIGlkZW50aWZpZXIiLAorICAgICAgLmNvcHkgPSBoaWRDb3B5SWRlbnRpZmllckZpbHRlciwKKyAgICAgIC5mcm9tID0gJmZpbHRlci0+Y29tbW9uLnZlbmRvcklkZW50aWZpZXIsCisgICAgICAudG8gPSAmY29tbW9uLnZlbmRvcklkZW50aWZpZXIsCisgICAgfSwKKworICAgIHsgLm5hbWUgPSAicHJvZHVjdCBpZGVudGlmaWVyIiwKKyAgICAgIC5jb3B5ID0gaGlkQ29weUlkZW50aWZpZXJGaWx0ZXIsCisgICAgICAuZnJvbSA9ICZmaWx0ZXItPmNvbW1vbi5wcm9kdWN0SWRlbnRpZmllciwKKyAgICAgIC50byA9ICZjb21tb24ucHJvZHVjdElkZW50aWZpZXIsCisgICAgfSwKKworICAgIHsgLm5hbWUgPSAibWFudWZhY3R1cmVyIG5hbWUiLAorICAgICAgLmNvcHkgPSBoaWRDb3B5U3RyaW5nRmlsdGVyLAorICAgICAgLmZyb20gPSBmaWx0ZXItPnVzYi5tYW51ZmFjdHVyZXJOYW1lLAorICAgICAgLnRvID0gJnVzYi5tYW51ZmFjdHVyZXJOYW1lLAorICAgICAgLmZsYWcgPSAmd2FudFVTQiwKKyAgICB9LAorCisgICAgeyAubmFtZSA9ICJwcm9kdWN0IGRlc2NyaXB0aW9uIiwKKyAgICAgIC5jb3B5ID0gaGlkQ29weVN0cmluZ0ZpbHRlciwKKyAgICAgIC5mcm9tID0gZmlsdGVyLT51c2IucHJvZHVjdERlc2NyaXB0aW9uLAorICAgICAgLnRvID0gJnVzYi5wcm9kdWN0RGVzY3JpcHRpb24sCisgICAgICAuZmxhZyA9ICZ3YW50VVNCLAorICAgIH0sCisKKyAgICB7IC5uYW1lID0gInNlcmlhbCBudW1iZXIiLAorICAgICAgLmNvcHkgPSBoaWRDb3B5U3RyaW5nRmlsdGVyLAorICAgICAgLmZyb20gPSBmaWx0ZXItPnVzYi5zZXJpYWxOdW1iZXIsCisgICAgICAudG8gPSAmdXNiLnNlcmlhbE51bWJlciwKKyAgICAgIC5mbGFnID0gJndhbnRVU0IsCisgICAgfSwKKworICAgIHsgLm5hbWUgPSAiTUFDIGFkZHJlc3MiLAorICAgICAgLmNvcHkgPSBoaWRDb3B5U3RyaW5nRmlsdGVyLAorICAgICAgLnRlc3QgPSBoaWRUZXN0TWFjQWRkcmVzcywKKyAgICAgIC5mcm9tID0gZmlsdGVyLT5ibHVldG9vdGgubWFjQWRkcmVzcywKKyAgICAgIC50byA9ICZibHVldG9vdGgubWFjQWRkcmVzcywKKyAgICAgIC5mbGFnID0gJndhbnRCbHVldG9vdGgsCisgICAgfSwKKworICAgIHsgLm5hbWUgPSAiZGV2aWNlIG5hbWUiLAorICAgICAgLmNvcHkgPSBoaWRDb3B5U3RyaW5nRmlsdGVyLAorICAgICAgLmZyb20gPSBmaWx0ZXItPmJsdWV0b290aC5kZXZpY2VOYW1lLAorICAgICAgLnRvID0gJmJsdWV0b290aC5kZXZpY2VOYW1lLAorICAgICAgLmZsYWcgPSAmd2FudEJsdWV0b290aCwKKyAgICB9LAorICB9OworCisgIGNvbnN0IEZpbHRlckVudHJ5ICpjdXIgPSBmaWx0ZXJUYWJsZTsKKyAgY29uc3QgRmlsdGVyRW50cnkgKmVuZCA9IGN1ciArIEFSUkFZX0NPVU5UKGZpbHRlclRhYmxlKTsKKworICB3aGlsZSAoY3VyIDwgZW5kKSB7CisgICAgaWYgKGN1ci0+Y29weShjdXItPmZyb20sIGN1ci0+dG8pKSB7CisgICAgICBpZiAoY3VyLT5mbGFnKSAqY3VyLT5mbGFnID0gMTsKKworICAgICAgaWYgKGN1ci0+dGVzdCkgeworICAgICAgICBpZiAoIWN1ci0+dGVzdChjdXItPmZyb20pKSB7CisgICAgICAgICAgY29uc3QgY2hhciAqb3BlcmFuZCA9IGN1ci0+ZnJvbTsKKyAgICAgICAgICBsb2dNZXNzYWdlKExPR19FUlIsICJpbnZhbGlkICVzOiAlcyIsIGN1ci0+bmFtZSwgb3BlcmFuZCk7CisgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9CisKKyAgICBjdXIgKz0gMTsKKyAgfQorCisgIGlmICh3YW50VVNCICYmIHdhbnRCbHVldG9vdGgpIHsKKyAgICBsb2dNZXNzYWdlKExPR19FUlIsICJjb25mbGljdGluZyBmaWx0ZXIgb3B0aW9ucyIpOworICAgIHJldHVybiAwOworICB9CisKKyAgaWYgKHdhbnRCbHVldG9vdGgpIHsKKyAgICBIaWRCbHVldG9vdGhGaWx0ZXIgaGJmID0geworICAgICAgLmNvbW1vbiA9IGNvbW1vbiwKKyAgICAgIC5ibHVldG9vdGggPSBibHVldG9vdGgsCisgICAgfTsKKyAgICAqZGV2aWNlID0gaGlkT3BlbkJsdWV0b290aERldmljZSgmaGJmKTsKKyAgfSBlbHNlIHsKKyAgICBIaWRVU0JGaWx0ZXIgaHVmID0geworICAgICAgLmNvbW1vbiA9IGNvbW1vbiwKKyAgICAgIC51c2IgPSB1c2IsCisgICAgfTsKKworICAgICpkZXZpY2UgPSBoaWRPcGVuVVNCRGV2aWNlKCZodWYpOworICB9CisKKyAgcmV0dXJuIDE7Cit9CisKK2ludAoraGlkT3BlbkRldmljZVdpdGhQYXJhbWV0ZXJzIChIaWREZXZpY2UgKipkZXZpY2UsIGNvbnN0IGNoYXIgKnN0cmluZykgeworICBjaGFyICoqcGFyYW1ldGVycyA9IGhpZEdldERldmljZVBhcmFtZXRlcnMoc3RyaW5nKTsKKworICBpZiAocGFyYW1ldGVycykgeworICAgIEhpZEZpbHRlciBmaWx0ZXIgPSB7CisgICAgICAudXNiID0geworICAgICAgICAubWFudWZhY3R1cmVyTmFtZSA9IHBhcmFtZXRlcnNbSElEX1BBUk1fTUFOVUZBQ1RVUkVSXSwKKyAgICAgICAgLnByb2R1Y3REZXNjcmlwdGlvbiA9IHBhcmFtZXRlcnNbSElEX1BBUk1fREVTQ1JJUFRJT05dLAorICAgICAgICAuc2VyaWFsTnVtYmVyID0gcGFyYW1ldGVyc1tISURfUEFSTV9TRVJJQUxfTlVNQkVSXSwKKyAgICAgIH0sCisKKyAgICAgIC5ibHVldG9vdGggPSB7CisgICAgICAgIC5tYWNBZGRyZXNzID0gcGFyYW1ldGVyc1tISURfUEFSTV9BRERSRVNTXSwKKyAgICAgICAgLmRldmljZU5hbWUgPSBwYXJhbWV0ZXJzW0hJRF9QQVJNX05BTUVdLAorICAgICAgfSwKKyAgICB9OworCisgICAgaW50IG9rID0gaGlkU2V0RmlsdGVySWRlbnRpZmllcnMoCisgICAgICAmZmlsdGVyLAorICAgICAgcGFyYW1ldGVyc1tISURfUEFSTV9WRU5ET1JdLAorICAgICAgcGFyYW1ldGVyc1tISURfUEFSTV9QUk9EVUNUXQorICAgICk7CisKKyAgICBpZiAob2spIG9rID0gaGlkT3BlbkRldmljZVdpdGhGaWx0ZXIoZGV2aWNlLCAmZmlsdGVyKTsKKyAgICBkZWFsbG9jYXRlU3RyaW5ncyhwYXJhbWV0ZXJzKTsKKyAgICBpZiAob2spIHJldHVybiAxOworICB9CisKKyAgcmV0dXJuIDA7Cit9CisKK3ZvaWQKK2hpZENsb3NlRGV2aWNlIChIaWREZXZpY2UgKmRldmljZSkgeworICBoaWREZXN0cm95SGFuZGxlKGRldmljZS0+aGFuZGxlKTsKKyAgZnJlZShkZXZpY2UpOworfQorCitjb25zdCBIaWRJdGVtc0Rlc2NyaXB0b3IgKgoraGlkR2V0SXRlbXMgKEhpZERldmljZSAqZGV2aWNlKSB7CisgIEhpZEdldEl0ZW1zTWV0aG9kICptZXRob2QgPSBkZXZpY2UtPmhhbmRsZU1ldGhvZHMtPmdldEl0ZW1zOworCisgIGlmICghbWV0aG9kKSB7CisgICAgbG9nVW5zdXBwb3J0ZWRPcGVyYXRpb24oImhpZEdldEl0ZW1zIik7CisgICAgZXJybm8gPSBFTk9TWVM7CisgICAgcmV0dXJuIDA7CisgIH0KKworICByZXR1cm4gbWV0aG9kKGRldmljZS0+aGFuZGxlKTsKK30KKworaW50CitoaWRHZXRSZXBvcnRTaXplICgKKyAgSGlkRGV2aWNlICpkZXZpY2UsCisgIEhpZFJlcG9ydElkZW50aWZpZXIgaWRlbnRpZmllciwKKyAgSGlkUmVwb3J0U2l6ZSAqc2l6ZQorKSB7CisgIEhpZEdldFJlcG9ydFNpemVNZXRob2QgKm1ldGhvZCA9IGRldmljZS0+aGFuZGxlTWV0aG9kcy0+Z2V0UmVwb3J0U2l6ZTsKKworICBpZiAoIW1ldGhvZCkgeworICAgIGxvZ1Vuc3VwcG9ydGVkT3BlcmF0aW9uKCJoaWRHZXRSZXBvcnRTaXplIik7CisgICAgZXJybm8gPSBFTk9TWVM7CisgICAgcmV0dXJuIDA7CisgIH0KKworICByZXR1cm4gbWV0aG9kKGRldmljZS0+aGFuZGxlLCBpZGVudGlmaWVyLCBzaXplKTsKK30KKworc3RhdGljIHZvaWQKK2hpZExvZ0RhdGFUcmFuc2ZlciAoY29uc3QgY2hhciAqYWN0aW9uLCBjb25zdCB1bnNpZ25lZCBjaGFyICpkYXRhLCBzaXplX3Qgc2l6ZSwgSGlkUmVwb3J0SWRlbnRpZmllciBpZGVudGlmaWVyKSB7CisgIGxvZ0J5dGVzKExPR19DQVRFR09SWShISURfSU8pLAorICAgICIlczogJTAyWCIsIGRhdGEsIHNpemUsIGFjdGlvbiwgaWRlbnRpZmllcgorICApOworfQorCitzc2l6ZV90CitoaWRHZXRSZXBvcnQgKEhpZERldmljZSAqZGV2aWNlLCB1bnNpZ25lZCBjaGFyICpidWZmZXIsIHNpemVfdCBzaXplKSB7CisgIEhpZEdldFJlcG9ydE1ldGhvZCAqbWV0aG9kID0gZGV2aWNlLT5oYW5kbGVNZXRob2RzLT5nZXRSZXBvcnQ7CisKKyAgaWYgKCFtZXRob2QpIHsKKyAgICBsb2dVbnN1cHBvcnRlZE9wZXJhdGlvbigiaGlkR2V0UmVwb3J0Iik7CisgICAgZXJybm8gPSBFTk9TWVM7CisgICAgcmV0dXJuIDA7CisgIH0KKworICBIaWRSZXBvcnRJZGVudGlmaWVyIGlkZW50aWZpZXIgPSAqYnVmZmVyOworICBzc2l6ZV90IHJlc3VsdCA9IG1ldGhvZChkZXZpY2UtPmhhbmRsZSwgYnVmZmVyLCBzaXplKTsKKworICBpZiAocmVzdWx0ICE9IC0xKSB7CisgICAgaGlkTG9nRGF0YVRyYW5zZmVyKCJnZXQgcmVwb3J0IiwgYnVmZmVyLCByZXN1bHQsIGlkZW50aWZpZXIpOworICB9CisKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworc3NpemVfdAoraGlkU2V0UmVwb3J0IChIaWREZXZpY2UgKmRldmljZSwgY29uc3QgdW5zaWduZWQgY2hhciAqcmVwb3J0LCBzaXplX3Qgc2l6ZSkgeworICBIaWRTZXRSZXBvcnRNZXRob2QgKm1ldGhvZCA9IGRldmljZS0+aGFuZGxlTWV0aG9kcy0+c2V0UmVwb3J0OworCisgIGlmICghbWV0aG9kKSB7CisgICAgbG9nVW5zdXBwb3J0ZWRPcGVyYXRpb24oImhpZFNldFJlcG9ydCIpOworICAgIGVycm5vID0gRU5PU1lTOworICAgIHJldHVybiAwOworICB9CisKKyAgaGlkTG9nRGF0YVRyYW5zZmVyKCJzZXQgcmVwb3J0IiwgcmVwb3J0KzEsIHNpemUtMSwgKnJlcG9ydCk7CisgIHJldHVybiBtZXRob2QoZGV2aWNlLT5oYW5kbGUsIHJlcG9ydCwgc2l6ZSk7Cit9CisKK3NzaXplX3QKK2hpZEdldEZlYXR1cmUgKEhpZERldmljZSAqZGV2aWNlLCB1bnNpZ25lZCBjaGFyICpidWZmZXIsIHNpemVfdCBzaXplKSB7CisgIEhpZEdldEZlYXR1cmVNZXRob2QgKm1ldGhvZCA9IGRldmljZS0+aGFuZGxlTWV0aG9kcy0+Z2V0RmVhdHVyZTsKKworICBpZiAoIW1ldGhvZCkgeworICAgIGxvZ1Vuc3VwcG9ydGVkT3BlcmF0aW9uKCJoaWRHZXRGZWF0dXJlIik7CisgICAgZXJybm8gPSBFTk9TWVM7CisgICAgcmV0dXJuIDA7CisgIH0KKworICBIaWRSZXBvcnRJZGVudGlmaWVyIGlkZW50aWZpZXIgPSAqYnVmZmVyOworICBzc2l6ZV90IHJlc3VsdCA9IG1ldGhvZChkZXZpY2UtPmhhbmRsZSwgYnVmZmVyLCBzaXplKTsKKworICBpZiAocmVzdWx0ICE9IC0xKSB7CisgICAgaGlkTG9nRGF0YVRyYW5zZmVyKCJnZXQgZmVhdHVyZSIsIGJ1ZmZlciwgcmVzdWx0LCBpZGVudGlmaWVyKTsKKyAgfQorCisgIHJldHVybiByZXN1bHQ7Cit9CisKK3NzaXplX3QKK2hpZFNldEZlYXR1cmUgKEhpZERldmljZSAqZGV2aWNlLCBjb25zdCB1bnNpZ25lZCBjaGFyICpmZWF0dXJlLCBzaXplX3Qgc2l6ZSkgeworICBIaWRTZXRGZWF0dXJlTWV0aG9kICptZXRob2QgPSBkZXZpY2UtPmhhbmRsZU1ldGhvZHMtPnNldEZlYXR1cmU7CisKKyAgaWYgKCFtZXRob2QpIHsKKyAgICBsb2dVbnN1cHBvcnRlZE9wZXJhdGlvbigiaGlkU2V0RmVhdHVyZSIpOworICAgIGVycm5vID0gRU5PU1lTOworICAgIHJldHVybiAwOworICB9CisKKyAgaGlkTG9nRGF0YVRyYW5zZmVyKCJzZXQgZmVhdHVyZSIsIGZlYXR1cmUrMSwgc2l6ZS0xLCAqZmVhdHVyZSk7CisgIHJldHVybiBtZXRob2QoZGV2aWNlLT5oYW5kbGUsIGZlYXR1cmUsIHNpemUpOworfQorCitpbnQKK2hpZFdyaXRlRGF0YSAoSGlkRGV2aWNlICpkZXZpY2UsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGEsIHNpemVfdCBzaXplKSB7CisgIEhpZFdyaXRlRGF0YU1ldGhvZCAqbWV0aG9kID0gZGV2aWNlLT5oYW5kbGVNZXRob2RzLT53cml0ZURhdGE7CisKKyAgaWYgKCFtZXRob2QpIHsKKyAgICBsb2dVbnN1cHBvcnRlZE9wZXJhdGlvbigiaGlkV3JpdGVEYXRhIik7CisgICAgZXJybm8gPSBFTk9TWVM7CisgICAgcmV0dXJuIDA7CisgIH0KKworICBsb2dCeXRlcyhMT0dfQ0FURUdPUlkoSElEX0lPKSwKKyAgICAib3V0cHV0IiwgZGF0YSwgc2l6ZQorICApOworCisgIHJldHVybiBtZXRob2QoZGV2aWNlLT5oYW5kbGUsIGRhdGEsIHNpemUpOworfQorCitpbnQKK2hpZE1vbml0b3JJbnB1dCAoSGlkRGV2aWNlICpkZXZpY2UsIEFzeW5jTW9uaXRvckNhbGxiYWNrICpjYWxsYmFjaywgdm9pZCAqZGF0YSkgeworICBIaWRNb25pdG9ySW5wdXRNZXRob2QgKm1ldGhvZCA9IGRldmljZS0+aGFuZGxlTWV0aG9kcy0+bW9uaXRvcklucHV0OworCisgIGlmICghbWV0aG9kKSB7CisgICAgbG9nVW5zdXBwb3J0ZWRPcGVyYXRpb24oImhpZE1vbml0b3JJbnB1dCIpOworICAgIGVycm5vID0gRU5PU1lTOworICAgIHJldHVybiAwOworICB9CisKKyAgcmV0dXJuIG1ldGhvZChkZXZpY2UtPmhhbmRsZSwgY2FsbGJhY2ssIGRhdGEpOworfQorCitpbnQKK2hpZEF3YWl0SW5wdXQgKEhpZERldmljZSAqZGV2aWNlLCBpbnQgdGltZW91dCkgeworICBIaWRBd2FpdElucHV0TWV0aG9kICptZXRob2QgPSBkZXZpY2UtPmhhbmRsZU1ldGhvZHMtPmF3YWl0SW5wdXQ7CisKKyAgaWYgKCFtZXRob2QpIHsKKyAgICBsb2dVbnN1cHBvcnRlZE9wZXJhdGlvbigiaGlkQXdhaXRJbnB1dCIpOworICAgIGVycm5vID0gRU5PU1lTOworICAgIHJldHVybiAwOworICB9CisKKyAgcmV0dXJuIG1ldGhvZChkZXZpY2UtPmhhbmRsZSwgdGltZW91dCk7Cit9CisKK3NzaXplX3QKK2hpZFJlYWREYXRhICgKKyAgSGlkRGV2aWNlICpkZXZpY2UsIHVuc2lnbmVkIGNoYXIgKmJ1ZmZlciwgc2l6ZV90IHNpemUsCisgIGludCBpbml0aWFsVGltZW91dCwgaW50IHN1YnNlcXVlbnRUaW1lb3V0CispIHsKKyAgSGlkUmVhZERhdGFNZXRob2QgKm1ldGhvZCA9IGRldmljZS0+aGFuZGxlTWV0aG9kcy0+cmVhZERhdGE7CisKKyAgaWYgKCFtZXRob2QpIHsKKyAgICBsb2dVbnN1cHBvcnRlZE9wZXJhdGlvbigiaGlkUmVhZERhdGEiKTsKKyAgICBlcnJubyA9IEVOT1NZUzsKKyAgICByZXR1cm4gLTE7CisgIH0KKworICBzc2l6ZV90IHJlc3VsdCA9IG1ldGhvZChkZXZpY2UtPmhhbmRsZSwgYnVmZmVyLCBzaXplLCBpbml0aWFsVGltZW91dCwgc3Vic2VxdWVudFRpbWVvdXQpOworCisgIGlmIChyZXN1bHQgIT0gLTEpIHsKKyAgICBpZiAocmVzdWx0ID4gMCkgeworICAgICAgbG9nQnl0ZXMoTE9HX0NBVEVHT1JZKEhJRF9JTyksCisgICAgICAgICJpbnB1dCIsIGJ1ZmZlciwgcmVzdWx0CisgICAgICApOworICAgIH0KKyAgfQorCisgIHJldHVybiByZXN1bHQ7Cit9CisKK2ludAoraGlkR2V0RGV2aWNlSWRlbnRpZmllcnMgKEhpZERldmljZSAqZGV2aWNlLCBIaWREZXZpY2VJZGVudGlmaWVyICp2ZW5kb3IsIEhpZERldmljZUlkZW50aWZpZXIgKnByb2R1Y3QpIHsKKyAgSGlkR2V0RGV2aWNlSWRlbnRpZmllcnNNZXRob2QgKm1ldGhvZCA9IGRldmljZS0+aGFuZGxlTWV0aG9kcy0+Z2V0RGV2aWNlSWRlbnRpZmllcnM7CisKKyAgaWYgKCFtZXRob2QpIHsKKyAgICBsb2dVbnN1cHBvcnRlZE9wZXJhdGlvbigiaGlkR2V0RGV2aWNlSWRlbnRpZmllcnMiKTsKKyAgICBlcnJubyA9IEVOT1NZUzsKKyAgICByZXR1cm4gMDsKKyAgfQorCisgIHJldHVybiBtZXRob2QoZGV2aWNlLT5oYW5kbGUsIHZlbmRvciwgcHJvZHVjdCk7Cit9CisKK2NvbnN0IGNoYXIgKgoraGlkR2V0RGV2aWNlQWRkcmVzcyAoSGlkRGV2aWNlICpkZXZpY2UpIHsKKyAgSGlkR2V0RGV2aWNlQWRkcmVzc01ldGhvZCAqbWV0aG9kID0gZGV2aWNlLT5oYW5kbGVNZXRob2RzLT5nZXREZXZpY2VBZGRyZXNzOworCisgIGlmICghbWV0aG9kKSB7CisgICAgbG9nVW5zdXBwb3J0ZWRPcGVyYXRpb24oImhpZEdldERldmljZUFkZHJlc3MiKTsKKyAgICBlcnJubyA9IEVOT1NZUzsKKyAgICByZXR1cm4gTlVMTDsKKyAgfQorCisgIHJldHVybiBtZXRob2QoZGV2aWNlLT5oYW5kbGUpOworfQorCitjb25zdCBjaGFyICoKK2hpZEdldERldmljZU5hbWUgKEhpZERldmljZSAqZGV2aWNlKSB7CisgIEhpZEdldERldmljZU5hbWVNZXRob2QgKm1ldGhvZCA9IGRldmljZS0+aGFuZGxlTWV0aG9kcy0+Z2V0RGV2aWNlTmFtZTsKKworICBpZiAoIW1ldGhvZCkgeworICAgIGxvZ1Vuc3VwcG9ydGVkT3BlcmF0aW9uKCJoaWRHZXREZXZpY2VOYW1lIik7CisgICAgZXJybm8gPSBFTk9TWVM7CisgICAgcmV0dXJuIE5VTEw7CisgIH0KKworICByZXR1cm4gbWV0aG9kKGRldmljZS0+aGFuZGxlKTsKK30KKworY29uc3QgY2hhciAqCitoaWRHZXRIb3N0UGF0aCAoSGlkRGV2aWNlICpkZXZpY2UpIHsKKyAgSGlkR2V0SG9zdFBhdGhNZXRob2QgKm1ldGhvZCA9IGRldmljZS0+aGFuZGxlTWV0aG9kcy0+Z2V0SG9zdFBhdGg7CisKKyAgaWYgKCFtZXRob2QpIHsKKyAgICBsb2dVbnN1cHBvcnRlZE9wZXJhdGlvbigiaGlkR2V0SG9zdFBhdGgiKTsKKyAgICBlcnJubyA9IEVOT1NZUzsKKyAgICByZXR1cm4gTlVMTDsKKyAgfQorCisgIHJldHVybiBtZXRob2QoZGV2aWNlLT5oYW5kbGUpOworfQorCitjb25zdCBjaGFyICoKK2hpZEdldEhvc3REZXZpY2UgKEhpZERldmljZSAqZGV2aWNlKSB7CisgIEhpZEdldEhvc3REZXZpY2VNZXRob2QgKm1ldGhvZCA9IGRldmljZS0+aGFuZGxlTWV0aG9kcy0+Z2V0SG9zdERldmljZTsKKworICBpZiAoIW1ldGhvZCkgeworICAgIGxvZ1Vuc3VwcG9ydGVkT3BlcmF0aW9uKCJoaWRHZXRIb3N0RGV2aWNlIik7CisgICAgZXJybm8gPSBFTk9TWVM7CisgICAgcmV0dXJuIE5VTEw7CisgIH0KKworICByZXR1cm4gbWV0aG9kKGRldmljZS0+aGFuZGxlKTsKK30KKworY29uc3QgY2hhciAqCitoaWRDYWNoZVN0cmluZyAoCisgIEhpZEhhbmRsZSAqaGFuZGxlLCBjaGFyICoqY2FjaGVkVmFsdWUsCisgIGNoYXIgKmJ1ZmZlciwgc2l6ZV90IHNpemUsCisgIEhpZEdldFN0cmluZ01ldGhvZCAqZ2V0U3RyaW5nLCB2b2lkICpkYXRhCispIHsKKyAgaWYgKCEqY2FjaGVkVmFsdWUpIHsKKyAgICBpZiAoIWdldFN0cmluZyhoYW5kbGUsIGJ1ZmZlciwgc2l6ZSwgZGF0YSkpIHJldHVybiBOVUxMOworICAgIGNoYXIgKnZhbHVlID0gc3RyZHVwKGJ1ZmZlcik7CisKKyAgICBpZiAoIXZhbHVlKSB7CisgICAgICBsb2dNYWxsb2NFcnJvcigpOworICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgKmNhY2hlZFZhbHVlID0gdmFsdWU7CisgIH0KKworICByZXR1cm4gKmNhY2hlZFZhbHVlOworfQorCitjb25zdCBjaGFyICoKK2hpZE1ha2VEZXZpY2VJZGVudGlmaWVyIChIaWREZXZpY2UgKmRldmljZSwgY2hhciAqYnVmZmVyLCBzaXplX3Qgc2l6ZSkgeworICBzaXplX3QgbGVuZ3RoOworICBTVFJfQkVHSU4oYnVmZmVyLCBzaXplKTsKKyAgU1RSX1BSSU5URigiJXMlYyIsIEhJRF9ERVZJQ0VfUVVBTElGSUVSLCBQQVJBTUVURVJfUVVBTElGSUVSX0NIQVJBQ1RFUik7CisKKyAgeworICAgIEhpZERldmljZUlkZW50aWZpZXIgdmVuZG9yOworICAgIEhpZERldmljZUlkZW50aWZpZXIgcHJvZHVjdDsKKworICAgIGlmIChoaWRHZXREZXZpY2VJZGVudGlmaWVycyhkZXZpY2UsICZ2ZW5kb3IsICZwcm9kdWN0KSkgeworICAgICAgaWYgKHZlbmRvcikgeworICAgICAgICBTVFJfUFJJTlRGKAorICAgICAgICAgICIlcyVjJTA0WCVjIiwKKyAgICAgICAgICBoaWREZXZpY2VQYXJhbWV0ZXJOYW1lc1tISURfUEFSTV9WRU5ET1JdLAorICAgICAgICAgIFBBUkFNRVRFUl9BU1NJR05NRU5UX0NIQVJBQ1RFUiwKKyAgICAgICAgICB2ZW5kb3IsIERFVklDRV9QQVJBTUVURVJfU0VQQVJBVE9SCisgICAgICAgICk7CisgICAgICB9CisKKyAgICAgIGlmIChwcm9kdWN0KSB7CisgICAgICAgIFNUUl9QUklOVEYoCisgICAgICAgICAgIiVzJWMlMDRYJWMiLAorICAgICAgICAgIGhpZERldmljZVBhcmFtZXRlck5hbWVzW0hJRF9QQVJNX1BST0RVQ1RdLAorICAgICAgICAgIFBBUkFNRVRFUl9BU1NJR05NRU5UX0NIQVJBQ1RFUiwKKyAgICAgICAgICBwcm9kdWN0LCBERVZJQ0VfUEFSQU1FVEVSX1NFUEFSQVRPUgorICAgICAgICApOworICAgICAgfQorICAgIH0KKyAgfQorCisgIFNUUl9GT1JNQVQoZGV2aWNlLT5idXNNZXRob2RzLT5leHRlbmREZXZpY2VJZGVudGlmaWVyLCBkZXZpY2UpOworICBsZW5ndGggPSBTVFJfTEVOR1RIOworICBTVFJfRU5EOworCisgIHsKKyAgICBjaGFyICpsYXN0ID0gJmJ1ZmZlcltsZW5ndGhdIC0gMTsKKyAgICBpZiAoKmxhc3QgPT0gREVWSUNFX1BBUkFNRVRFUl9TRVBBUkFUT1IpICpsYXN0ID0gMDsKKyAgfQorCisgIHJldHVybiBidWZmZXI7Cit9CisKK2ludAoraXNIaWREZXZpY2VJZGVudGlmaWVyIChjb25zdCBjaGFyICoqaWRlbnRpZmllcikgeworICByZXR1cm4gaGFzUXVhbGlmaWVyKGlkZW50aWZpZXIsIEhJRF9ERVZJQ0VfUVVBTElGSUVSKTsKK30KZGlmZiAtLWdpdCBhL1Byb2dyYW1zL2hpZF9icmFpbGxlLmMgYi9Qcm9ncmFtcy9oaWRfYnJhaWxsZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMwZDI2OTAKLS0tIC9kZXYvbnVsbAorKysgYi9Qcm9ncmFtcy9oaWRfYnJhaWxsZS5jCkBAIC0wLDAgKzEsMjMgQEAKKy8qCisgKiBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorICogICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorICoKKyAqIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorICoKKyAqIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyAqLworCisjaW5jbHVkZSAicHJvbG9ndWUuaCIKKworI2luY2x1ZGUgImxvZy5oIgorI2luY2x1ZGUgImhpZF9pdGVtcy5oIgorI2luY2x1ZGUgImhpZF9icmFpbGxlLmgiCmRpZmYgLS1naXQgYS9Qcm9ncmFtcy9oaWRfaW5zcGVjdC5jIGIvUHJvZ3JhbXMvaGlkX2luc3BlY3QuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MGJiNmI2Ci0tLSAvZGV2L251bGwKKysrIGIvUHJvZ3JhbXMvaGlkX2luc3BlY3QuYwpAQCAtMCwwICsxLDM5NyBAQAorLyoKKyAqIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisgKiAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisgKgorICogQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKKyNpbmNsdWRlICJwcm9sb2d1ZS5oIgorCisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKyNpbmNsdWRlICJsb2cuaCIKKyNpbmNsdWRlICJzdHJmbXQuaCIKKyNpbmNsdWRlICJiaXRtYXNrLmgiCisjaW5jbHVkZSAiaGlkX2RlZnMuaCIKKyNpbmNsdWRlICJoaWRfaXRlbXMuaCIKKyNpbmNsdWRlICJoaWRfdGFibGVzLmgiCisjaW5jbHVkZSAiaGlkX2luc3BlY3QuaCIKKworc3RhdGljIGludAoraGlkQ29tcGFyZVRhYmxlRW50cmllc0J5VmFsdWUgKGNvbnN0IHZvaWQgKmVsZW1lbnQxLCBjb25zdCB2b2lkICplbGVtZW50MikgeworICBjb25zdCBIaWRUYWJsZUVudHJ5SGVhZGVyICpjb25zdCAqaGVhZGVyMSA9IGVsZW1lbnQxOworICBjb25zdCBIaWRUYWJsZUVudHJ5SGVhZGVyICpjb25zdCAqaGVhZGVyMiA9IGVsZW1lbnQyOworCisgIEhpZFVuc2lnbmVkVmFsdWUgdmFsdWUxID0gKCpoZWFkZXIxKS0+dmFsdWU7CisgIEhpZFVuc2lnbmVkVmFsdWUgdmFsdWUyID0gKCpoZWFkZXIyKS0+dmFsdWU7CisKKyAgaWYgKHZhbHVlMSA8IHZhbHVlMikgcmV0dXJuIC0xOworICBpZiAodmFsdWUxID4gdmFsdWUyKSByZXR1cm4gMTsKKyAgcmV0dXJuIDA7Cit9CisKK2NvbnN0IHZvaWQgKgoraGlkVGFibGVFbnRyeSAoSGlkVGFibGUgKnRhYmxlLCBIaWRVbnNpZ25lZFZhbHVlIHZhbHVlKSB7CisgIGlmICghdGFibGUtPnNvcnRlZCkgeworICAgIGlmICghKHRhYmxlLT5zb3J0ZWQgPSBtYWxsb2MoQVJSQVlfU0laRSh0YWJsZS0+c29ydGVkLCB0YWJsZS0+Y291bnQpKSkpIHsKKyAgICAgIGxvZ01hbGxvY0Vycm9yKCk7CisgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICB7CisgICAgICBjb25zdCB2b2lkICplbnRyeSA9IHRhYmxlLT5lbnRyaWVzOworICAgICAgY29uc3QgSGlkVGFibGVFbnRyeUhlYWRlciAqKmhlYWRlciA9IHRhYmxlLT5zb3J0ZWQ7CisKKyAgICAgIGZvciAodW5zaWduZWQgaW50IGluZGV4PTA7IGluZGV4PHRhYmxlLT5jb3VudDsgaW5kZXgrPTEpIHsKKyAgICAgICAgKmhlYWRlcisrID0gZW50cnk7CisgICAgICAgIGVudHJ5ICs9IHRhYmxlLT5zaXplOworICAgICAgfQorICAgIH0KKworICAgIHFzb3J0KAorICAgICAgdGFibGUtPnNvcnRlZCwgdGFibGUtPmNvdW50LCBzaXplb2YoKnRhYmxlLT5zb3J0ZWQpLAorICAgICAgaGlkQ29tcGFyZVRhYmxlRW50cmllc0J5VmFsdWUKKyAgICApOworICB9CisKKyAgdW5zaWduZWQgaW50IGZyb20gPSAwOworICB1bnNpZ25lZCBpbnQgdG8gPSB0YWJsZS0+Y291bnQ7CisKKyAgd2hpbGUgKGZyb20gPCB0bykgeworICAgIHVuc2lnbmVkIGludCBjdXJyZW50ID0gKGZyb20gKyB0bykgLyAyOworICAgIGNvbnN0IEhpZFRhYmxlRW50cnlIZWFkZXIgKmhlYWRlciA9IHRhYmxlLT5zb3J0ZWRbY3VycmVudF07CisgICAgaWYgKHZhbHVlID09IGhlYWRlci0+dmFsdWUpIHJldHVybiBoZWFkZXI7CisKKyAgICBpZiAodmFsdWUgPCBoZWFkZXItPnZhbHVlKSB7CisgICAgICB0byA9IGN1cnJlbnQ7CisgICAgfSBlbHNlIHsKKyAgICAgIGZyb20gPSBjdXJyZW50ICsgMTsKKyAgICB9CisgIH0KKworICByZXR1cm4gTlVMTDsKK30KKworc3RhdGljIGludAoraGlkQ29tcGFyZVJlcG9ydElkZW50aWZpZXJzIChjb25zdCB2b2lkICplbGVtZW50MSwgY29uc3Qgdm9pZCAqZWxlbWVudDIpIHsKKyAgY29uc3QgSGlkUmVwb3J0SWRlbnRpZmllciAqaWRlbnRpZmllcjEgPSBlbGVtZW50MTsKKyAgY29uc3QgSGlkUmVwb3J0SWRlbnRpZmllciAqaWRlbnRpZmllcjIgPSBlbGVtZW50MjsKKworICBpZiAoKmlkZW50aWZpZXIxIDwgKmlkZW50aWZpZXIyKSByZXR1cm4gLTE7CisgIGlmICgqaWRlbnRpZmllcjEgPiAqaWRlbnRpZmllcjIpIHJldHVybiAxOworICByZXR1cm4gMDsKK30KKworSGlkUmVwb3J0cyAqCitoaWRHZXRSZXBvcnRzIChjb25zdCBIaWRJdGVtc0Rlc2NyaXB0b3IgKml0ZW1zKSB7CisgIEhpZFJlcG9ydElkZW50aWZpZXIgaWRlbnRpZmllcnNbVUlOVDhfTUFYXTsKKyAgdW5zaWduZWQgY2hhciBjb3VudCA9IDA7CisKKyAgQklUTUFTSyhoYXZlSWRlbnRpZmllciwgVUlOVDhfTUFYKzEsIGNoYXIpOworICBCSVRNQVNLX1pFUk8oaGF2ZUlkZW50aWZpZXIpOworCisgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKm5leHRCeXRlID0gaXRlbXMtPmJ5dGVzOworICBzaXplX3QgYnl0ZXNMZWZ0ID0gaXRlbXMtPmNvdW50OworCisgIHdoaWxlICgxKSB7CisgICAgSGlkSXRlbSBpdGVtOworICAgIGlmICghaGlkTmV4dEl0ZW0oJml0ZW0sICZuZXh0Qnl0ZSwgJmJ5dGVzTGVmdCkpIGJyZWFrOworCisgICAgc3dpdGNoIChpdGVtLnRhZykgeworICAgICAgY2FzZSBISURfSVRNX1JlcG9ydElEOiB7CisgICAgICAgIEhpZFVuc2lnbmVkVmFsdWUgaWRlbnRpZmllciA9IGl0ZW0udmFsdWUudTsKKworICAgICAgICBpZiAoIWlkZW50aWZpZXIpIGNvbnRpbnVlOworICAgICAgICBpZiAoaWRlbnRpZmllciA+IFVJTlQ4X01BWCkgY29udGludWU7CisgICAgICAgIGlmIChCSVRNQVNLX1RFU1QoaGF2ZUlkZW50aWZpZXIsIGlkZW50aWZpZXIpKSBjb250aW51ZTsKKworICAgICAgICBCSVRNQVNLX1NFVChoYXZlSWRlbnRpZmllciwgaWRlbnRpZmllcik7CisgICAgICAgIGlkZW50aWZpZXJzW2NvdW50KytdID0gaWRlbnRpZmllcjsKKyAgICAgICAgYnJlYWs7CisgICAgICB9CisKKyAgICAgIGNhc2UgSElEX0lUTV9JbnB1dDoKKyAgICAgIGNhc2UgSElEX0lUTV9PdXRwdXQ6CisgICAgICBjYXNlIEhJRF9JVE1fRmVhdHVyZToKKyAgICAgICAgaWYgKCFjb3VudCkgaWRlbnRpZmllcnNbY291bnQrK10gPSAwOworICAgICAgICBicmVhazsKKyAgICB9CisgIH0KKworICBpZiAoY291bnQgPiAxKSB7CisgICAgcXNvcnQoCisgICAgICBpZGVudGlmaWVycywgY291bnQsIHNpemVvZihpZGVudGlmaWVyc1swXSksCisgICAgICBoaWRDb21wYXJlUmVwb3J0SWRlbnRpZmllcnMKKyAgICApOworICB9CisKKyAgSGlkUmVwb3J0cyAqcmVwb3J0czsKKyAgc2l6ZV90IHNpemUgPSBzaXplb2YoKnJlcG9ydHMpOworICBzaXplICs9IGNvdW50OworCisgIGlmICgocmVwb3J0cyA9IG1hbGxvYyhzaXplKSkpIHsKKyAgICBtZW1zZXQocmVwb3J0cywgMCwgc2l6ZW9mKCpyZXBvcnRzKSk7CisKKyAgICByZXBvcnRzLT5jb3VudCA9IGNvdW50OworICAgIG1lbWNweShyZXBvcnRzLT5pZGVudGlmaWVycywgaWRlbnRpZmllcnMsIGNvdW50KTsKKworICAgIHJldHVybiByZXBvcnRzOworICB9IGVsc2UgeworICAgIGxvZ01hbGxvY0Vycm9yKCk7CisgIH0KKworICByZXR1cm4gTlVMTDsKK30KKworU1RSX0JFR0lOX0ZPUk1BVFRFUihoaWRGb3JtYXRVc2FnZUZsYWdzLCBIaWRVbnNpZ25lZFZhbHVlIGZsYWdzKQorICB0eXBlZGVmIHN0cnVjdCB7CisgICAgY29uc3QgY2hhciAqb247CisgICAgY29uc3QgY2hhciAqb2ZmOworICAgIEhpZFVuc2lnbmVkVmFsdWUgYml0OworICB9IEZsYWdFbnRyeTsKKworICBzdGF0aWMgY29uc3QgRmxhZ0VudHJ5IGZsYWdUYWJsZVtdID0geworICAgIHsgLmJpdCA9IEhJRF9VU0dfRkxHX0NPTlNUQU5ULAorICAgICAgLm9uID0gImNvbnN0IiwKKyAgICAgIC5vZmYgPSAiZGF0YSIKKyAgICB9LAorCisgICAgeyAuYml0ID0gSElEX1VTR19GTEdfVkFSSUFCTEUsCisgICAgICAub24gPSAidmFyIiwKKyAgICAgIC5vZmYgPSAiYXJyYXkiCisgICAgfSwKKworICAgIHsgLmJpdCA9IEhJRF9VU0dfRkxHX1JFTEFUSVZFLAorICAgICAgLm9uID0gInJlbCIsCisgICAgICAub2ZmID0gImFicyIKKyAgICB9LAorCisgICAgeyAuYml0ID0gSElEX1VTR19GTEdfV1JBUCwKKyAgICAgIC5vbiA9ICJ3cmFwIiwKKyAgICB9LAorCisgICAgeyAuYml0ID0gSElEX1VTR19GTEdfTk9OX0xJTkVBUiwKKyAgICAgIC5vbiA9ICJub25saW4iLAorICAgIH0sCisKKyAgICB7IC5iaXQgPSBISURfVVNHX0ZMR19OT19QUkVGRVJSRUQsCisgICAgICAub24gPSAibm9wcmVmIiwKKyAgICB9LAorCisgICAgeyAuYml0ID0gSElEX1VTR19GTEdfTlVMTF9TVEFURSwKKyAgICAgIC5vbiA9ICJudWxsIiwKKyAgICB9LAorCisgICAgeyAuYml0ID0gSElEX1VTR19GTEdfVk9MQVRJTEUsCisgICAgICAub24gPSAidm9sYXRpbGUiLAorICAgIH0sCisKKyAgICB7IC5iaXQgPSBISURfVVNHX0ZMR19CVUZGRVJFRF9CWVRFLAorICAgICAgLm9uID0gImJ1ZmZieXRlIiwKKyAgICB9LAorICB9OworCisgIGNvbnN0IEZsYWdFbnRyeSAqZmxhZyA9IGZsYWdUYWJsZTsKKyAgY29uc3QgRmxhZ0VudHJ5ICplbmQgPSBmbGFnICsgQVJSQVlfQ09VTlQoZmxhZ1RhYmxlKTsKKworICB3aGlsZSAoZmxhZyA8IGVuZCkgeworICAgIGNvbnN0IGNoYXIgKm5hbWUgPSAoZmxhZ3MgJiBmbGFnLT5iaXQpPyBmbGFnLT5vbjogZmxhZy0+b2ZmOworCisgICAgaWYgKG5hbWUpIHsKKyAgICAgIGlmIChTVFJfTEVOR1RIID4gMCkgU1RSX1BSSU5URigiICIpOworICAgICAgU1RSX1BSSU5URigiJXMiLCBuYW1lKTsKKyAgICB9CisKKyAgICBmbGFnICs9IDE7CisgIH0KK1NUUl9FTkRfRk9STUFUVEVSCisKK3N0YXRpYyBpbnQKK2hpZExpc3RJdGVtIChjb25zdCBjaGFyICpsaW5lLCB2b2lkICpkYXRhKSB7CisgIHJldHVybiBsb2dNZXNzYWdlKChMT0dfQ0FURUdPUlkoSElEX0lPKSB8IExPR19ERUJVRyksICIlcyIsIGxpbmUpOworfQorCitpbnQKK2hpZExpc3RJdGVtcyAoY29uc3QgSGlkSXRlbXNEZXNjcmlwdG9yICppdGVtcywgSGlkSXRlbUxpc3RlciAqbGlzdEl0ZW0sIHZvaWQgKmRhdGEpIHsKKyAgaWYgKCFsaXN0SXRlbSkgbGlzdEl0ZW0gPSBoaWRMaXN0SXRlbTsKKyAgY29uc3QgY2hhciAqbGFiZWwgPSAiSXRlbXMgTGlzdCI7CisKKyAgeworICAgIGNoYXIgbGluZVswWDQwXTsKKyAgICBTVFJfQkVHSU4obGluZSwgc2l6ZW9mKGxpbmUpKTsKKyAgICBTVFJfUFJJTlRGKCJCZWdpbiAlczogQnl0ZXM6JSJQUklzaXplLCBsYWJlbCwgaXRlbXMtPmNvdW50KTsKKyAgICBTVFJfRU5EOworICAgIGlmICghbGlzdEl0ZW0obGluZSwgZGF0YSkpIHJldHVybiAwOworICB9CisKKyAgdW5zaWduZWQgaW50IGl0ZW1Db3VudCA9IDA7CisgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKm5leHRCeXRlID0gaXRlbXMtPmJ5dGVzOworICBzaXplX3QgYnl0ZXNMZWZ0ID0gaXRlbXMtPmNvdW50OworCisgIGludCBkZWNPZmZzZXRXaWR0aDsKKyAgaW50IGhleE9mZnNldFdpZHRoOworICB7CisgICAgdW5zaWduZWQgaW50IG1heGltdW1PZmZzZXQgPSBieXRlc0xlZnQ7CisgICAgY2hhciBidWZmZXJbMFgyMF07CisKKyAgICBkZWNPZmZzZXRXaWR0aCA9IHNucHJpbnRmKGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlciksICIldSIsIG1heGltdW1PZmZzZXQpOworICAgIGhleE9mZnNldFdpZHRoID0gc25wcmludGYoYnVmZmVyLCBzaXplb2YoYnVmZmVyKSwgIiV4IiwgbWF4aW11bU9mZnNldCk7CisgIH0KKworICBIaWRVbnNpZ25lZFZhbHVlIHVzYWdlUGFnZSA9IDA7CisKKyAgd2hpbGUgKDEpIHsKKyAgICB1bnNpZ25lZCBpbnQgb2Zmc2V0ID0gbmV4dEJ5dGUgLSBpdGVtcy0+Ynl0ZXM7CisgICAgSGlkSXRlbSBpdGVtOworICAgIGludCBvayA9IGhpZE5leHRJdGVtKCZpdGVtLCAmbmV4dEJ5dGUsICZieXRlc0xlZnQpOworCisgICAgY2hhciBsaW5lWzBYMTAwXTsKKyAgICBTVFJfQkVHSU4obGluZSwgc2l6ZW9mKGxpbmUpKTsKKworICAgIFNUUl9QUklOVEYoCisgICAgICAiSXRlbTogJSp1ICgwWCUuKlgpOiIsCisgICAgICBkZWNPZmZzZXRXaWR0aCwgb2Zmc2V0LCBoZXhPZmZzZXRXaWR0aCwgb2Zmc2V0CisgICAgKTsKKworICAgIGlmIChvaykgeworICAgICAgaXRlbUNvdW50ICs9IDE7CisKKyAgICAgIHN3aXRjaCAoaXRlbS50YWcpIHsKKyAgICAgICAgY2FzZSBISURfSVRNX1VzYWdlUGFnZToKKyAgICAgICAgICB1c2FnZVBhZ2UgPSBpdGVtLnZhbHVlLnU7CisgICAgICAgICAgYnJlYWs7CisgICAgICB9CisKKyAgICAgIHsKKyAgICAgICAgY29uc3QgSGlkSXRlbVRhZ0VudHJ5ICp0YWcgPSBoaWRJdGVtVGFnRW50cnkoaXRlbS50YWcpOworCisgICAgICAgIGlmICh0YWcpIHsKKyAgICAgICAgICBTVFJfUFJJTlRGKCIgJXMiLCB0YWctPmhlYWRlci5uYW1lKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICBTVFJfUFJJTlRGKCIgdW5rbm93biBpdGVtIHRhZzogMFglMDJYIiwgaXRlbS50YWcpOworICAgICAgICB9CisgICAgICB9CisKKyAgICAgIGlmIChpdGVtLnZhbHVlU2l6ZSA+IDApIHsKKyAgICAgICAgSGlkVW5zaWduZWRWYWx1ZSBoZXhWYWx1ZSA9IGl0ZW0udmFsdWUudSAmICgoVUlOVDY0X0MoMSkgPDwgKGl0ZW0udmFsdWVTaXplICogOCkpIC0gMSk7CisgICAgICAgIGludCBoZXhQcmVjaXNpb24gPSBpdGVtLnZhbHVlU2l6ZSAqIDI7CisKKyAgICAgICAgU1RSX1BSSU5URigKKyAgICAgICAgICAiID0gJSIgUFJJZDMyICIgKDBYJS4qIiBQUklYMzIgIikiLAorICAgICAgICAgIGl0ZW0udmFsdWUucywgaGV4UHJlY2lzaW9uLCBoZXhWYWx1ZQorICAgICAgICApOworICAgICAgfQorCisgICAgICB7CisgICAgICAgIEhpZFVuc2lnbmVkVmFsdWUgdmFsdWUgPSBpdGVtLnZhbHVlLnU7CisKKyAgICAgICAgY2hhciBuYW1lWzBYMTAwXTsKKyAgICAgICAgU1RSX0JFR0lOKG5hbWUsIHNpemVvZihuYW1lKSk7CisKKyAgICAgICAgc3dpdGNoIChpdGVtLnRhZykgeworICAgICAgICAgIGNhc2UgSElEX0lUTV9Vc2FnZVBhZ2U6IHsKKyAgICAgICAgICAgIGNvbnN0IEhpZFVzYWdlUGFnZUVudHJ5ICp1cGcgPSBoaWRVc2FnZVBhZ2VFbnRyeSh2YWx1ZSk7CisgICAgICAgICAgICBpZiAodXBnKSBTVFJfUFJJTlRGKCIlcyIsIHVwZy0+aGVhZGVyLm5hbWUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgfQorCisgICAgICAgICAgY2FzZSBISURfSVRNX1VzYWdlTWluaW11bToKKyAgICAgICAgICBjYXNlIEhJRF9JVE1fVXNhZ2VNYXhpbXVtOgorICAgICAgICAgIGNhc2UgSElEX0lUTV9Vc2FnZTogeworICAgICAgICAgICAgSGlkVW5zaWduZWRWYWx1ZSB1c2FnZSA9IGl0ZW0udmFsdWUudTsKKworICAgICAgICAgICAgSGlkVW5zaWduZWRWYWx1ZSBwYWdlOworICAgICAgICAgICAgY29uc3QgSGlkVXNhZ2VQYWdlRW50cnkgKnVwZzsKKworICAgICAgICAgICAgaWYgKGl0ZW0udmFsdWVTaXplID09IDQpIHsKKyAgICAgICAgICAgICAgcGFnZSA9IHVzYWdlID4+IDBYMTA7CisgICAgICAgICAgICAgIHVzYWdlICY9IFVJTlQxNl9NQVg7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICBwYWdlID0gdXNhZ2VQYWdlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoKHVwZyA9IGhpZFVzYWdlUGFnZUVudHJ5KHBhZ2UpKSkgeworICAgICAgICAgICAgICBIaWRUYWJsZSAqdXRiID0gdXBnLT51c2FnZVRhYmxlOworCisgICAgICAgICAgICAgIGlmICh1dGIpIHsKKyAgICAgICAgICAgICAgICBjb25zdCBIaWRVc2FnZUVudHJ5SGVhZGVyICp1c2cgPSBoaWRUYWJsZUVudHJ5KHV0YiwgdXNhZ2UpOworCisgICAgICAgICAgICAgICAgaWYgKHVzZykgeworICAgICAgICAgICAgICAgICAgU1RSX1BSSU5URigiJXMiLCB1c2ctPmhlYWRlci5uYW1lKTsKKworICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBjb25zdCBIaWRVc2FnZVR5cGVFbnRyeSAqdHlwZSA9IGhpZFVzYWdlVHlwZUVudHJ5KHVzZy0+dXNhZ2VUeXBlKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGUpIFNUUl9QUklOVEYoIiAoJXMpIiwgdHlwZS0+aGVhZGVyLm5hbWUpOworICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAocGFnZSAhPSB1c2FnZVBhZ2UpIHsKKyAgICAgICAgICAgICAgaWYgKCpuYW1lKSBTVFJfUFJJTlRGKCIgIik7CisgICAgICAgICAgICAgIFNUUl9QUklOVEYoIlsiKTsKKworICAgICAgICAgICAgICBpZiAodXBnKSB7CisgICAgICAgICAgICAgICAgU1RSX1BSSU5URigiJXMiLCB1cGctPmhlYWRlci5uYW1lKTsKKyAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBTVFJfUFJJTlRGKCIwWCUwMiJQUklYMzIsIHBhZ2UpOworICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgU1RSX1BSSU5URigiXSIpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICB9CisKKyAgICAgICAgICBjYXNlIEhJRF9JVE1fQ29sbGVjdGlvbjogeworICAgICAgICAgICAgY29uc3QgSGlkQ29sbGVjdGlvblR5cGVFbnRyeSAqY29sID0gaGlkQ29sbGVjdGlvblR5cGVFbnRyeSh2YWx1ZSk7CisgICAgICAgICAgICBpZiAoY29sKSBTVFJfUFJJTlRGKCIlcyIsIGNvbC0+aGVhZGVyLm5hbWUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgfQorCisgICAgICAgICAgY2FzZSBISURfSVRNX0lucHV0OgorICAgICAgICAgIGNhc2UgSElEX0lUTV9PdXRwdXQ6CisgICAgICAgICAgY2FzZSBISURfSVRNX0ZlYXR1cmU6IHsKKyAgICAgICAgICAgIFNUUl9GT1JNQVQoaGlkRm9ybWF0VXNhZ2VGbGFncywgdmFsdWUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgU1RSX0VORDsKKyAgICAgICAgaWYgKCpuYW1lKSBTVFJfUFJJTlRGKCI6ICVzIiwgbmFtZSk7CisgICAgICB9CisgICAgfSBlbHNlIGlmIChieXRlc0xlZnQpIHsKKyAgICAgIFNUUl9QUklOVEYoIiBpbmNvbXBsZXRlOiIpOworICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqZW5kID0gbmV4dEJ5dGUgKyBieXRlc0xlZnQ7CisKKyAgICAgIHdoaWxlIChuZXh0Qnl0ZSA8IGVuZCkgeworICAgICAgICBTVFJfUFJJTlRGKCIgJTAyWCIsICpuZXh0Qnl0ZSsrKTsKKyAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgU1RSX1BSSU5URigiIGVuZCIpOworICAgIH0KKworICAgIFNUUl9FTkQ7CisgICAgaWYgKCFsaXN0SXRlbShsaW5lLCBkYXRhKSkgcmV0dXJuIDA7CisgICAgaWYgKCFvaykgYnJlYWs7CisgIH0KKworICB7CisgICAgY2hhciBsaW5lWzBYNDBdOworICAgIFNUUl9CRUdJTihsaW5lLCBzaXplb2YobGluZSkpOworICAgIFNUUl9QUklOVEYoIkVuZCAlczogSXRlbXM6JXUiLCBsYWJlbCwgaXRlbUNvdW50KTsKKyAgICBTVFJfRU5EOworICAgIHJldHVybiBsaXN0SXRlbShsaW5lLCBkYXRhKTsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvUHJvZ3JhbXMvaGlkX2ludGVybmFsLmggYi9Qcm9ncmFtcy9oaWRfaW50ZXJuYWwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNzMwMTM2Ci0tLSAvZGV2L251bGwKKysrIGIvUHJvZ3JhbXMvaGlkX2ludGVybmFsLmgKQEAgLTAsMCArMSwxMTMgQEAKKy8qCisgKiBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorICogICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorICoKKyAqIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorICoKKyAqIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyAqLworCisjaWZuZGVmIEJSTFRUWV9JTkNMVURFRF9ISURfSU5URVJOQUwKKyNkZWZpbmUgQlJMVFRZX0lOQ0xVREVEX0hJRF9JTlRFUk5BTAorCisjaW5jbHVkZSAiaGlkX3R5cGVzLmgiCisjaW5jbHVkZSAiYXN5bmNfdHlwZXNfaW8uaCIKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZiAvKiBfX2NwbHVzcGx1cyAqLworCit0eXBlZGVmIHN0cnVjdCBIaWRIYW5kbGVTdHJ1Y3QgSGlkSGFuZGxlOwordHlwZWRlZiB2b2lkIEhpZERlc3Ryb3lIYW5kbGVNZXRob2QgKEhpZEhhbmRsZSAqaGFuZGxlKTsKKwordHlwZWRlZiBjb25zdCBIaWRJdGVtc0Rlc2NyaXB0b3IgKkhpZEdldEl0ZW1zTWV0aG9kIChIaWRIYW5kbGUgKmhhbmRsZSk7CisKK3R5cGVkZWYgaW50IEhpZEdldFJlcG9ydFNpemVNZXRob2QgKAorICBIaWRIYW5kbGUgKmhhbmRsZSwKKyAgSGlkUmVwb3J0SWRlbnRpZmllciBpZGVudGlmaWVyLAorICBIaWRSZXBvcnRTaXplICpzaXplCispOworCit0eXBlZGVmIHNzaXplX3QgSGlkR2V0UmVwb3J0TWV0aG9kIChIaWRIYW5kbGUgKmhhbmRsZSwgdW5zaWduZWQgY2hhciAqYnVmZmVyLCBzaXplX3Qgc2l6ZSk7Cit0eXBlZGVmIHNzaXplX3QgSGlkU2V0UmVwb3J0TWV0aG9kIChIaWRIYW5kbGUgKmhhbmRsZSwgY29uc3QgdW5zaWduZWQgY2hhciAqcmVwb3J0LCBzaXplX3Qgc2l6ZSk7Cit0eXBlZGVmIHNzaXplX3QgSGlkR2V0RmVhdHVyZU1ldGhvZCAoSGlkSGFuZGxlICpoYW5kbGUsIHVuc2lnbmVkIGNoYXIgKmJ1ZmZlciwgc2l6ZV90IHNpemUpOwordHlwZWRlZiBzc2l6ZV90IEhpZFNldEZlYXR1cmVNZXRob2QgKEhpZEhhbmRsZSAqaGFuZGxlLCBjb25zdCB1bnNpZ25lZCBjaGFyICpmZWF0dXJlLCBzaXplX3Qgc2l6ZSk7CisKK3R5cGVkZWYgaW50IEhpZFdyaXRlRGF0YU1ldGhvZCAoSGlkSGFuZGxlICpoYW5kbGUsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGEsIHNpemVfdCBzaXplKTsKK3R5cGVkZWYgaW50IEhpZE1vbml0b3JJbnB1dE1ldGhvZCAoSGlkSGFuZGxlICpoYW5kbGUsIEFzeW5jTW9uaXRvckNhbGxiYWNrICpjYWxsYmFjaywgdm9pZCAqZGF0YSk7Cit0eXBlZGVmIGludCBIaWRBd2FpdElucHV0TWV0aG9kIChIaWRIYW5kbGUgKmhhbmRsZSwgaW50IHRpbWVvdXQpOworCit0eXBlZGVmIHNzaXplX3QgSGlkUmVhZERhdGFNZXRob2QgKAorICBIaWRIYW5kbGUgKmhhbmRsZSwgdW5zaWduZWQgY2hhciAqYnVmZmVyLCBzaXplX3Qgc2l6ZSwKKyAgaW50IGluaXRpYWxUaW1lb3V0LCBpbnQgc3Vic2VxdWVudFRpbWVvdXQKKyk7CisKK3R5cGVkZWYgaW50IEhpZEdldERldmljZUlkZW50aWZpZXJzTWV0aG9kIChIaWRIYW5kbGUgKmhhbmRsZSwgdWludDE2X3QgKnZlbmRvciwgdWludDE2X3QgKnByb2R1Y3QpOwordHlwZWRlZiBjb25zdCBjaGFyICpIaWRHZXREZXZpY2VBZGRyZXNzTWV0aG9kIChIaWRIYW5kbGUgKmhhbmRsZSk7Cit0eXBlZGVmIGNvbnN0IGNoYXIgKkhpZEdldERldmljZU5hbWVNZXRob2QgKEhpZEhhbmRsZSAqaGFuZGxlKTsKK3R5cGVkZWYgY29uc3QgY2hhciAqSGlkR2V0SG9zdFBhdGhNZXRob2QgKEhpZEhhbmRsZSAqaGFuZGxlKTsKK3R5cGVkZWYgY29uc3QgY2hhciAqSGlkR2V0SG9zdERldmljZU1ldGhvZCAoSGlkSGFuZGxlICpoYW5kbGUpOworCit0eXBlZGVmIHN0cnVjdCB7CisgIEhpZERlc3Ryb3lIYW5kbGVNZXRob2QgKmRlc3Ryb3lIYW5kbGU7CisKKyAgSGlkR2V0SXRlbXNNZXRob2QgKmdldEl0ZW1zOworCisgIEhpZEdldFJlcG9ydFNpemVNZXRob2QgKmdldFJlcG9ydFNpemU7CisgIEhpZEdldFJlcG9ydE1ldGhvZCAqZ2V0UmVwb3J0OworICBIaWRTZXRSZXBvcnRNZXRob2QgKnNldFJlcG9ydDsKKyAgSGlkR2V0RmVhdHVyZU1ldGhvZCAqZ2V0RmVhdHVyZTsKKyAgSGlkU2V0RmVhdHVyZU1ldGhvZCAqc2V0RmVhdHVyZTsKKworICBIaWRXcml0ZURhdGFNZXRob2QgKndyaXRlRGF0YTsKKyAgSGlkTW9uaXRvcklucHV0TWV0aG9kICptb25pdG9ySW5wdXQ7CisgIEhpZEF3YWl0SW5wdXRNZXRob2QgKmF3YWl0SW5wdXQ7CisgIEhpZFJlYWREYXRhTWV0aG9kICpyZWFkRGF0YTsKKworICBIaWRHZXREZXZpY2VJZGVudGlmaWVyc01ldGhvZCAqZ2V0RGV2aWNlSWRlbnRpZmllcnM7CisgIEhpZEdldERldmljZUFkZHJlc3NNZXRob2QgKmdldERldmljZUFkZHJlc3M7CisgIEhpZEdldERldmljZU5hbWVNZXRob2QgKmdldERldmljZU5hbWU7CisgIEhpZEdldEhvc3RQYXRoTWV0aG9kICpnZXRIb3N0UGF0aDsKKyAgSGlkR2V0SG9zdERldmljZU1ldGhvZCAqZ2V0SG9zdERldmljZTsKK30gSGlkSGFuZGxlTWV0aG9kczsKKwordHlwZWRlZiBIaWRIYW5kbGUgKkhpZE5ld1VTQkhhbmRsZU1ldGhvZCAoY29uc3QgSGlkVVNCRmlsdGVyICpmaWx0ZXIpOwordHlwZWRlZiBIaWRIYW5kbGUgKkhpZE5ld0JsdWV0b290aEhhbmRsZU1ldGhvZCAoY29uc3QgSGlkQmx1ZXRvb3RoRmlsdGVyICpmaWx0ZXIpOworCit0eXBlZGVmIHN0cnVjdCB7CisgIGNvbnN0IGNoYXIgKnBhY2thZ2VOYW1lOworICBjb25zdCBIaWRIYW5kbGVNZXRob2RzICpoYW5kbGVNZXRob2RzOworCisgIEhpZE5ld1VTQkhhbmRsZU1ldGhvZCAqbmV3VVNCSGFuZGxlOworICBIaWROZXdCbHVldG9vdGhIYW5kbGVNZXRob2QgKm5ld0JsdWV0b290aEhhbmRsZTsKK30gSGlkUGFja2FnZURlc2NyaXB0b3I7CisKK2V4dGVybiBjb25zdCBIaWRQYWNrYWdlRGVzY3JpcHRvciBoaWRQYWNrYWdlRGVzY3JpcHRvcjsKKworZXh0ZXJuIGludCBoaWRQYXJzZURldmljZUlkZW50aWZpZXIgKEhpZERldmljZUlkZW50aWZpZXIgKmlkZW50aWZpZXIsIGNvbnN0IGNoYXIgKnN0cmluZyk7CitleHRlcm4gaW50IGhpZE1hdGNoU3RyaW5nIChjb25zdCBjaGFyICphY3R1YWxTdHJpbmcsIGNvbnN0IGNoYXIgKnRlc3RTdHJpbmcpOworCit0eXBlZGVmIGludCBIaWRHZXRTdHJpbmdNZXRob2QgKAorICBIaWRIYW5kbGUgKmhhbmRsZSwgY2hhciAqYnVmZmVyLCBzaXplX3Qgc2l6ZSwgdm9pZCAqZGF0YQorKTsKKworZXh0ZXJuIGNvbnN0IGNoYXIgKmhpZENhY2hlU3RyaW5nICgKKyAgSGlkSGFuZGxlICpoYW5kbGUsIGNoYXIgKipjYWNoZWRWYWx1ZSwKKyAgY2hhciAqYnVmZmVyLCBzaXplX3Qgc2l6ZSwKKyAgSGlkR2V0U3RyaW5nTWV0aG9kICpnZXRTdHJpbmcsIHZvaWQgKmRhdGEKKyk7CisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmIC8qIF9fY3BsdXNwbHVzICovCisKKyNlbmRpZiAvKiBCUkxUVFlfSU5DTFVERURfSElEX0lOVEVSTkFMICovCmRpZmYgLS1naXQgYS9Qcm9ncmFtcy9oaWRfaXRlbXMuYyBiL1Byb2dyYW1zL2hpZF9pdGVtcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU0NTU4YzgKLS0tIC9kZXYvbnVsbAorKysgYi9Qcm9ncmFtcy9oaWRfaXRlbXMuYwpAQCAtMCwwICsxLDIxOSBAQAorLyoKKyAqIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisgKiAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisgKgorICogQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKKyNpbmNsdWRlICJwcm9sb2d1ZS5oIgorCisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKyNpbmNsdWRlICJsb2cuaCIKKyNpbmNsdWRlICJzdHJmbXQuaCIKKyNpbmNsdWRlICJoaWRfaXRlbXMuaCIKKyNpbmNsdWRlICJoaWRfZGVmcy5oIgorI2luY2x1ZGUgImhpZF90YWJsZXMuaCIKKwordW5zaWduZWQgY2hhcgoraGlkSXRlbVZhbHVlU2l6ZSAodW5zaWduZWQgY2hhciBpdGVtKSB7CisgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNpemVzWzRdID0gezAsIDEsIDIsIDR9OworICByZXR1cm4gc2l6ZXNbSElEX0lURU1fU0laRShpdGVtKV07Cit9CisKK2ludAoraGlkTmV4dEl0ZW0gKAorICBIaWRJdGVtICppdGVtLAorICBjb25zdCB1bnNpZ25lZCBjaGFyICoqYnl0ZXMsCisgIHNpemVfdCAqY291bnQKKykgeworICBpZiAoISpjb3VudCkgcmV0dXJuIDA7CisKKyAgY29uc3QgdW5zaWduZWQgY2hhciAqYnl0ZSA9ICpieXRlczsKKyAgY29uc3QgdW5zaWduZWQgY2hhciAqZW5kQnl0ZXMgPSBieXRlICsgKmNvdW50OworCisgIHVuc2lnbmVkIGNoYXIgaXRlbVRhZyA9IEhJRF9JVEVNX1RBRygqYnl0ZSk7CisgIHVuc2lnbmVkIGNoYXIgdmFsdWVTaXplID0gaGlkSXRlbVZhbHVlU2l6ZSgqYnl0ZSk7CisKKyAgY29uc3QgdW5zaWduZWQgY2hhciAqZW5kVmFsdWUgPSArK2J5dGUgKyB2YWx1ZVNpemU7CisgIGlmIChlbmRWYWx1ZSA+IGVuZEJ5dGVzKSByZXR1cm4gMDsKKworICBpdGVtLT50YWcgPSBpdGVtVGFnOworICBpdGVtLT52YWx1ZVNpemUgPSB2YWx1ZVNpemU7CisgIGl0ZW0tPnZhbHVlLnUgPSAwOworCisgIHsKKyAgICB1bnNpZ25lZCBjaGFyIHNoaWZ0ID0gMDsKKworICAgIHdoaWxlIChieXRlIDwgZW5kVmFsdWUpIHsKKyAgICAgIGl0ZW0tPnZhbHVlLnUgfD0gKmJ5dGUrKyA8PCBzaGlmdDsKKyAgICAgIHNoaWZ0ICs9IDg7CisgICAgfQorCisgICAgaWYgKGhpZEhhc1NpZ25lZFZhbHVlKGl0ZW0tPnRhZykpIHsKKyAgICAgIHNoaWZ0ID0gMFgyMCAtIHNoaWZ0OworICAgICAgaXRlbS0+dmFsdWUudSA8PD0gc2hpZnQ7CisgICAgICBpdGVtLT52YWx1ZS5zID4+PSBzaGlmdDsKKyAgICB9CisgIH0KKworICAqYnl0ZXMgPSBieXRlOworICAqY291bnQgPSBlbmRCeXRlcyAtIGJ5dGU7CisgIHJldHVybiAxOworfQorCitpbnQKK2hpZFJlcG9ydFNpemUgKAorICBjb25zdCBIaWRJdGVtc0Rlc2NyaXB0b3IgKml0ZW1zLAorICBIaWRSZXBvcnRJZGVudGlmaWVyIGlkZW50aWZpZXIsCisgIEhpZFJlcG9ydFNpemUgKnNpemUKKykgeworICBjb25zdCB1bnNpZ25lZCBjaGFyICpuZXh0Qnl0ZSA9IGl0ZW1zLT5ieXRlczsKKyAgc2l6ZV90IGJ5dGVzTGVmdCA9IGl0ZW1zLT5jb3VudDsKKworICBpbnQgbm9JZGVudGlmaWVyID0gIWlkZW50aWZpZXI7CisgIGludCByZXBvcnRGb3VuZCA9IG5vSWRlbnRpZmllcjsKKworICBzaXplX3QgaW5wdXRTaXplID0gMDsKKyAgc2l6ZV90IG91dHB1dFNpemUgPSAwOworICBzaXplX3QgZmVhdHVyZVNpemUgPSAwOworCisgIHVpbnQ2NF90IGl0ZW1UYWdzRW5jb3VudGVyZWQgPSAwOworICBIaWRVbnNpZ25lZFZhbHVlIHJlcG9ydElkZW50aWZpZXIgPSAwOworICBIaWRVbnNpZ25lZFZhbHVlIHJlcG9ydFNpemUgPSAwOworICBIaWRVbnNpZ25lZFZhbHVlIHJlcG9ydENvdW50ID0gMDsKKworICB3aGlsZSAoYnl0ZXNMZWZ0KSB7CisgICAgc2l6ZV90IG9mZnNldCA9IG5leHRCeXRlIC0gaXRlbXMtPmJ5dGVzOworICAgIEhpZEl0ZW0gaXRlbTsKKworICAgIGlmICghaGlkTmV4dEl0ZW0oJml0ZW0sICZuZXh0Qnl0ZSwgJmJ5dGVzTGVmdCkpIHsKKyAgICAgIGlmIChieXRlc0xlZnQpIHJldHVybiAwOworICAgICAgYnJlYWs7CisgICAgfQorCisgICAgaWYgKGl0ZW0udGFnID09IEhJRF9JVE1fUmVwb3J0SUQpIHsKKyAgICAgIGlmIChub0lkZW50aWZpZXIpIHsKKyAgICAgICAgcmVwb3J0Rm91bmQgPSAwOworICAgICAgICBicmVhazsKKyAgICAgIH0KKworICAgICAgcmVwb3J0SWRlbnRpZmllciA9IGl0ZW0udmFsdWUudTsKKyAgICAgIGlmIChyZXBvcnRJZGVudGlmaWVyID09IGlkZW50aWZpZXIpIHJlcG9ydEZvdW5kID0gMTsKKyAgICB9IGVsc2UgeworICAgICAgc3dpdGNoIChpdGVtLnRhZykgeworICAgICAgeworICAgICAgICBzaXplX3QgKnNpemU7CisKKyAgICAgICAgY2FzZSBISURfSVRNX0lucHV0OgorICAgICAgICAgIHNpemUgPSAmaW5wdXRTaXplOworICAgICAgICAgIGdvdG8gZG9TaXplOworCisgICAgICAgIGNhc2UgSElEX0lUTV9PdXRwdXQ6CisgICAgICAgICAgc2l6ZSA9ICZvdXRwdXRTaXplOworICAgICAgICAgIGdvdG8gZG9TaXplOworCisgICAgICAgIGNhc2UgSElEX0lUTV9GZWF0dXJlOgorICAgICAgICAgIHNpemUgPSAmZmVhdHVyZVNpemU7CisgICAgICAgICAgZ290byBkb1NpemU7CisKKyAgICAgICAgZG9TaXplOgorICAgICAgICAgIGlmIChyZXBvcnRJZGVudGlmaWVyID09IGlkZW50aWZpZXIpICpzaXplICs9IHJlcG9ydFNpemUgKiByZXBvcnRDb3VudDsKKyAgICAgICAgICBicmVhazsKKyAgICAgIH0KKworICAgICAgICBjYXNlIEhJRF9JVE1fUmVwb3J0Q291bnQ6CisgICAgICAgICAgcmVwb3J0Q291bnQgPSBpdGVtLnZhbHVlLnU7CisgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBISURfSVRNX1JlcG9ydFNpemU6CisgICAgICAgICAgcmVwb3J0U2l6ZSA9IGl0ZW0udmFsdWUudTsKKyAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIEhJRF9JVE1fQ29sbGVjdGlvbjoKKyAgICAgICAgY2FzZSBISURfSVRNX0VuZENvbGxlY3Rpb246CisgICAgICAgIGNhc2UgSElEX0lUTV9Vc2FnZVBhZ2U6CisgICAgICAgIGNhc2UgSElEX0lUTV9Vc2FnZU1pbmltdW06CisgICAgICAgIGNhc2UgSElEX0lUTV9Vc2FnZU1heGltdW06CisgICAgICAgIGNhc2UgSElEX0lUTV9Vc2FnZToKKyAgICAgICAgY2FzZSBISURfSVRNX0xvZ2ljYWxNaW5pbXVtOgorICAgICAgICBjYXNlIEhJRF9JVE1fTG9naWNhbE1heGltdW06CisgICAgICAgIGNhc2UgSElEX0lUTV9QaHlzaWNhbE1pbmltdW06CisgICAgICAgIGNhc2UgSElEX0lUTV9QaHlzaWNhbE1heGltdW06CisgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgZGVmYXVsdDogeworICAgICAgICAgIGlmICghKGl0ZW1UYWdzRW5jb3VudGVyZWQgJiBISURfSVRFTV9UQUdfQklUKGl0ZW0udGFnKSkpIHsKKyAgICAgICAgICAgIGxvZ01lc3NhZ2UoTE9HX0NBVEVHT1JZKEhJRF9JTyksCisgICAgICAgICAgICAgICJ1bmhhbmRsZWQgaXRlbSB0YWcgYXQgb2Zmc2V0ICUiUFJJc2l6ZSAiOiAwWCUwMlgiLAorICAgICAgICAgICAgICBvZmZzZXQsIGl0ZW0udGFnCisgICAgICAgICAgICApOworICAgICAgICAgIH0KKworICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICB9CisgICAgfQorCisgICAgaXRlbVRhZ3NFbmNvdW50ZXJlZCB8PSBISURfSVRFTV9UQUdfQklUKGl0ZW0udGFnKTsKKyAgfQorCisgIGlmIChyZXBvcnRGb3VuZCkgeworICAgIGNoYXIgbG9nWzBYMTAwXTsKKyAgICBTVFJfQkVHSU4obG9nLCBzaXplb2YobG9nKSk7CisgICAgU1RSX1BSSU5URigicmVwb3J0IHNpemU6ICUwMlgiLCBpZGVudGlmaWVyKTsKKworICAgIHsKKyAgICAgIHR5cGVkZWYgc3RydWN0IHsKKyAgICAgICAgY29uc3QgY2hhciAqbGFiZWw7CisgICAgICAgIHNpemVfdCAqYnl0ZXM7CisgICAgICAgIHNpemVfdCBiaXRzOworICAgICAgfSBTaXplRW50cnk7CisKKyAgICAgIFNpemVFbnRyeSBzaXplVGFibGVbXSA9IHsKKyAgICAgICAgeyAubGFiZWwgPSAiSW4iLAorICAgICAgICAgIC5iaXRzID0gaW5wdXRTaXplLAorICAgICAgICAgIC5ieXRlcyA9ICZzaXplLT5pbnB1dAorICAgICAgICB9LAorCisgICAgICAgIHsgLmxhYmVsID0gIk91dCIsCisgICAgICAgICAgLmJpdHMgPSBvdXRwdXRTaXplLAorICAgICAgICAgIC5ieXRlcyA9ICZzaXplLT5vdXRwdXQKKyAgICAgICAgfSwKKworICAgICAgICB7IC5sYWJlbCA9ICJGdHIiLAorICAgICAgICAgIC5iaXRzID0gZmVhdHVyZVNpemUsCisgICAgICAgICAgLmJ5dGVzID0gJnNpemUtPmZlYXR1cmUKKyAgICAgICAgfSwKKyAgICAgIH07CisKKyAgICAgIFNpemVFbnRyeSAqZW50cnkgPSBzaXplVGFibGU7CisgICAgICBjb25zdCBTaXplRW50cnkgKmVuZCA9IGVudHJ5ICsgQVJSQVlfQ09VTlQoc2l6ZVRhYmxlKTsKKworICAgICAgd2hpbGUgKGVudHJ5IDwgZW5kKSB7CisgICAgICAgIHNpemVfdCBieXRlcyA9IChlbnRyeS0+Yml0cyArIDcpIC8gODsKKyAgICAgICAgaWYgKGJ5dGVzICYmICFub0lkZW50aWZpZXIpIGJ5dGVzICs9IDE7CisgICAgICAgICplbnRyeS0+Ynl0ZXMgPSBieXRlczsKKworICAgICAgICBTVFJfUFJJTlRGKCIgJXM6JSIgUFJJc2l6ZSwgZW50cnktPmxhYmVsLCBieXRlcyk7CisgICAgICAgIGVudHJ5ICs9IDE7CisgICAgICB9CisgICAgfQorCisgICAgU1RSX0VORDsKKyAgICBsb2dNZXNzYWdlKExPR19DQVRFR09SWShISURfSU8pLCAiJXMiLCBsb2cpOworICB9CisKKyAgcmV0dXJuIHJlcG9ydEZvdW5kOworfQpkaWZmIC0tZ2l0IGEvUHJvZ3JhbXMvaGlkX2xpbnV4LmMgYi9Qcm9ncmFtcy9oaWRfbGludXguYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MTA1YzM3Ci0tLSAvZGV2L251bGwKKysrIGIvUHJvZ3JhbXMvaGlkX2xpbnV4LmMKQEAgLTAsMCArMSw1NDQgQEAKKy8qCisgKiBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorICogICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorICoKKyAqIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorICoKKyAqIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyAqLworCisjaW5jbHVkZSAicHJvbG9ndWUuaCIKKworI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8ZmNudGwuaD4KKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorI2luY2x1ZGUgPHN5cy9pb2N0bC5oPgorI2luY2x1ZGUgPGxpYnVkZXYuaD4KKyNpbmNsdWRlIDxsaW51eC9oaWRyYXcuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnB1dC5oPgorCisjaW5jbHVkZSAibG9nLmgiCisjaW5jbHVkZSAiaGlkX3R5cGVzLmgiCisjaW5jbHVkZSAiaGlkX2ludGVybmFsLmgiCisjaW5jbHVkZSAiaGlkX2l0ZW1zLmgiCisjaW5jbHVkZSAiaW9fbWlzYy5oIgorI2luY2x1ZGUgImFzeW5jX2hhbmRsZS5oIgorI2luY2x1ZGUgImFzeW5jX2lvLmgiCisKK3N0cnVjdCBIaWRIYW5kbGVTdHJ1Y3QgeworICBjaGFyICpzeXNmc1BhdGg7CisgIGNoYXIgKmRldmljZVBhdGg7CisKKyAgaW50IGZpbGVEZXNjcmlwdG9yOworICBBc3luY0hhbmRsZSBpbnB1dE1vbml0b3I7CisgIHN0cnVjdCBoaWRyYXdfZGV2aW5mbyBkZXZpY2VJbmZvcm1hdGlvbjsKKworICBIaWRJdGVtc0Rlc2NyaXB0b3IgKmhpZEl0ZW1zOworICBjaGFyICpkZXZpY2VBZGRyZXNzOworICBjaGFyICpkZXZpY2VOYW1lOworICBjaGFyICpob3N0UGF0aDsKKworICBjaGFyIHN0cmluZ3NbXTsKK307CisKK3N0YXRpYyB2b2lkCitoaWRMaW51eENhbmNlbElucHV0TW9uaXRvciAoSGlkSGFuZGxlICpoYW5kbGUpIHsKKyAgaWYgKGhhbmRsZS0+aW5wdXRNb25pdG9yKSB7CisgICAgYXN5bmNDYW5jZWxSZXF1ZXN0KGhhbmRsZS0+aW5wdXRNb25pdG9yKTsKKyAgICBoYW5kbGUtPmlucHV0TW9uaXRvciA9IE5VTEw7CisgIH0KK30KKworc3RhdGljIHZvaWQKK2hpZExpbnV4RGVzdHJveUhhbmRsZSAoSGlkSGFuZGxlICpoYW5kbGUpIHsKKyAgaGlkTGludXhDYW5jZWxJbnB1dE1vbml0b3IoaGFuZGxlKTsKKyAgY2xvc2UoaGFuZGxlLT5maWxlRGVzY3JpcHRvcik7CisKKyAgaWYgKGhhbmRsZS0+aGlkSXRlbXMpIGZyZWUoaGFuZGxlLT5oaWRJdGVtcyk7CisgIGlmIChoYW5kbGUtPmRldmljZUFkZHJlc3MpIGZyZWUoaGFuZGxlLT5kZXZpY2VBZGRyZXNzKTsKKyAgaWYgKGhhbmRsZS0+ZGV2aWNlTmFtZSkgZnJlZShoYW5kbGUtPmRldmljZU5hbWUpOworICBpZiAoaGFuZGxlLT5ob3N0UGF0aCkgZnJlZShoYW5kbGUtPmhvc3RQYXRoKTsKKworICBmcmVlKGhhbmRsZSk7Cit9CisKK3N0YXRpYyBjb25zdCBIaWRJdGVtc0Rlc2NyaXB0b3IgKgoraGlkTGludXhHZXRJdGVtcyAoSGlkSGFuZGxlICpoYW5kbGUpIHsKKyAgaWYgKGhhbmRsZS0+aGlkSXRlbXMpIHJldHVybiBoYW5kbGUtPmhpZEl0ZW1zOworICBpbnQgc2l6ZTsKKworICBpZiAoaW9jdGwoaGFuZGxlLT5maWxlRGVzY3JpcHRvciwgSElESU9DR1JERVNDU0laRSwgJnNpemUpICE9IC0xKSB7CisgICAgc3RydWN0IGhpZHJhd19yZXBvcnRfZGVzY3JpcHRvciBkZXNjcmlwdG9yID0geworICAgICAgLnNpemUgPSBzaXplCisgICAgfTsKKworICAgIGlmIChpb2N0bChoYW5kbGUtPmZpbGVEZXNjcmlwdG9yLCBISURJT0NHUkRFU0MsICZkZXNjcmlwdG9yKSAhPSAtMSkgeworICAgICAgSGlkSXRlbXNEZXNjcmlwdG9yICppdGVtczsKKworICAgICAgaWYgKChpdGVtcyA9IG1hbGxvYyhzaXplb2YoKml0ZW1zKSArIHNpemUpKSkgeworICAgICAgICBtZW1zZXQoaXRlbXMsIDAsIHNpemVvZigqaXRlbXMpKTsKKyAgICAgICAgaXRlbXMtPmNvdW50ID0gc2l6ZTsKKyAgICAgICAgbWVtY3B5KGl0ZW1zLT5ieXRlcywgZGVzY3JpcHRvci52YWx1ZSwgc2l6ZSk7CisgICAgICAgIHJldHVybiAoaGFuZGxlLT5oaWRJdGVtcyA9IGl0ZW1zKTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIGxvZ01hbGxvY0Vycm9yKCk7CisgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgIGxvZ1N5c3RlbUVycm9yKCJpb2N0bFtISURJT0NHUkRFU0NdIik7CisgICAgfQorICB9IGVsc2UgeworICAgIGxvZ1N5c3RlbUVycm9yKCJpb2N0bFtISURJT0NHUkRFU0NTSVpFXSIpOworICB9CisKKyAgcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBpbnQKK2hpZExpbnV4R2V0UmVwb3J0U2l6ZSAoCisgIEhpZEhhbmRsZSAqaGFuZGxlLAorICBIaWRSZXBvcnRJZGVudGlmaWVyIGlkZW50aWZpZXIsCisgIEhpZFJlcG9ydFNpemUgKnNpemUKKykgeworICBjb25zdCBIaWRJdGVtc0Rlc2NyaXB0b3IgKml0ZW1zID0gaGlkTGludXhHZXRJdGVtcyhoYW5kbGUpOworICBpZiAoIWl0ZW1zKSByZXR1cm4gMDsKKyAgcmV0dXJuIGhpZFJlcG9ydFNpemUoaXRlbXMsIGlkZW50aWZpZXIsIHNpemUpOworfQorCitzdGF0aWMgc3NpemVfdAoraGlkTGludXhHZXRSZXBvcnQgKEhpZEhhbmRsZSAqaGFuZGxlLCB1bnNpZ25lZCBjaGFyICpidWZmZXIsIHNpemVfdCBzaXplKSB7CisgIGludCBsZW5ndGg7CisKKyNpZmRlZiBISURJT0NHSU5QVVQKKyAgbGVuZ3RoID0gaW9jdGwoaGFuZGxlLT5maWxlRGVzY3JpcHRvciwgSElESU9DR0lOUFVUKHNpemUpLCBidWZmZXIpOworI2Vsc2UgLyogSElESU9DR0lOUFVUICovCisgIGxlbmd0aCA9IC0xOworICBlcnJubyA9IEVOT1NZUzsKKyNlbmRpZiAvKiBISURJT0NHSU5QVVQgKi8KKworICBpZiAobGVuZ3RoID09IC0xKSBsb2dTeXN0ZW1FcnJvcigiaW9jdGxbSElESU9DR0lOUFVUXSIpOworICByZXR1cm4gbGVuZ3RoOworfQorCitzdGF0aWMgc3NpemVfdAoraGlkTGludXhTZXRSZXBvcnQgKEhpZEhhbmRsZSAqaGFuZGxlLCBjb25zdCB1bnNpZ25lZCBjaGFyICpyZXBvcnQsIHNpemVfdCBzaXplKSB7CisgIGludCBjb3VudDsKKworI2lmZGVmIEhJRElPQ1NPVVRQVVQKKyAgY291bnQgPSBpb2N0bChoYW5kbGUtPmZpbGVEZXNjcmlwdG9yLCBISURJT0NTT1VUUFVUKHNpemUpLCByZXBvcnQpOworI2Vsc2UgLyogSElESU9DU09VVFBVVCAqLworICBjb3VudCA9IHdyaXRlKGhhbmRsZS0+ZmlsZURlc2NyaXB0b3IsIHJlcG9ydCwgc2l6ZSk7CisjZW5kaWYgLyogSElESU9DU09VVFBVVCAqLworCisgIGlmIChjb3VudCA9PSAtMSkgbG9nU3lzdGVtRXJyb3IoImlvY3RsW0hJRElPQ1NPVVRQVVRdIik7CisgIHJldHVybiBjb3VudDsKK30KKworc3RhdGljIHNzaXplX3QKK2hpZExpbnV4R2V0RmVhdHVyZSAoSGlkSGFuZGxlICpoYW5kbGUsIHVuc2lnbmVkIGNoYXIgKmJ1ZmZlciwgc2l6ZV90IHNpemUpIHsKKyAgaW50IHJlc3VsdCA9IGlvY3RsKGhhbmRsZS0+ZmlsZURlc2NyaXB0b3IsIEhJRElPQ0dGRUFUVVJFKHNpemUpLCBidWZmZXIpOworCisgIGlmIChyZXN1bHQgPT0gLTEpIHsKKyAgICBsb2dTeXN0ZW1FcnJvcigiaW9jdGxbSElESU9DR0ZFQVRVUkVdIik7CisgIH0KKworICByZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgc3NpemVfdAoraGlkTGludXhTZXRGZWF0dXJlIChIaWRIYW5kbGUgKmhhbmRsZSwgY29uc3QgdW5zaWduZWQgY2hhciAqZmVhdHVyZSwgc2l6ZV90IHNpemUpIHsKKyAgaW50IGNvdW50ID0gaW9jdGwoaGFuZGxlLT5maWxlRGVzY3JpcHRvciwgSElESU9DU0ZFQVRVUkUoc2l6ZSksIGZlYXR1cmUpOworICBpZiAoY291bnQgPT0gLTEpIGxvZ1N5c3RlbUVycm9yKCJpb2N0bFtISURJT0NTRkVBVFVSRV0iKTsKKyAgcmV0dXJuIGNvdW50OworfQorCitzdGF0aWMgaW50CitoaWRMaW51eFdyaXRlRGF0YSAoSGlkSGFuZGxlICpoYW5kbGUsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGEsIHNpemVfdCBzaXplKSB7CisgIHJldHVybiB3cml0ZUZpbGUoaGFuZGxlLT5maWxlRGVzY3JpcHRvciwgZGF0YSwgc2l6ZSk7Cit9CisKK3N0YXRpYyBpbnQKK2hpZExpbnV4TW9uaXRvcklucHV0IChIaWRIYW5kbGUgKmhhbmRsZSwgQXN5bmNNb25pdG9yQ2FsbGJhY2sgKmNhbGxiYWNrLCB2b2lkICpkYXRhKSB7CisgIGhpZExpbnV4Q2FuY2VsSW5wdXRNb25pdG9yKGhhbmRsZSk7CisgIGlmICghY2FsbGJhY2spIHJldHVybiAxOworICByZXR1cm4gYXN5bmNNb25pdG9yRmlsZUlucHV0KCZoYW5kbGUtPmlucHV0TW9uaXRvciwgaGFuZGxlLT5maWxlRGVzY3JpcHRvciwgY2FsbGJhY2ssIGRhdGEpOworfQorCitzdGF0aWMgaW50CitoaWRMaW51eEF3YWl0SW5wdXQgKEhpZEhhbmRsZSAqaGFuZGxlLCBpbnQgdGltZW91dCkgeworICByZXR1cm4gYXdhaXRGaWxlSW5wdXQoaGFuZGxlLT5maWxlRGVzY3JpcHRvciwgdGltZW91dCk7Cit9CisKK3N0YXRpYyBzc2l6ZV90CitoaWRMaW51eFJlYWREYXRhICgKKyAgSGlkSGFuZGxlICpoYW5kbGUsIHVuc2lnbmVkIGNoYXIgKmJ1ZmZlciwgc2l6ZV90IHNpemUsCisgIGludCBpbml0aWFsVGltZW91dCwgaW50IHN1YnNlcXVlbnRUaW1lb3V0CispIHsKKyAgcmV0dXJuIHJlYWRGaWxlKGhhbmRsZS0+ZmlsZURlc2NyaXB0b3IsIGJ1ZmZlciwgc2l6ZSwgaW5pdGlhbFRpbWVvdXQsIHN1YnNlcXVlbnRUaW1lb3V0KTsKK30KKworc3RhdGljIGludAoraGlkTGludXhHZXREZXZpY2VJZGVudGlmaWVycyAoSGlkSGFuZGxlICpoYW5kbGUsIEhpZERldmljZUlkZW50aWZpZXIgKnZlbmRvciwgSGlkRGV2aWNlSWRlbnRpZmllciAqcHJvZHVjdCkgeworICBpZiAodmVuZG9yKSAqdmVuZG9yID0gaGFuZGxlLT5kZXZpY2VJbmZvcm1hdGlvbi52ZW5kb3I7CisgIGlmIChwcm9kdWN0KSAqcHJvZHVjdCA9IGhhbmRsZS0+ZGV2aWNlSW5mb3JtYXRpb24ucHJvZHVjdDsKKyAgcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQKK2hpZExpbnV4R2V0UmF3TmFtZSAoSGlkSGFuZGxlICpoYW5kbGUsIGNoYXIgKmJ1ZmZlciwgc2l6ZV90IHNpemUsIHZvaWQgKmRhdGEpIHsKKyAgLy8gRm9yIFVTQiwgdGhpcyB3aWxsIGJlIHRoZSBtYW51ZmFjdHVyZXIgc3RyaW5nLCBhIHNwYWNlLCBhbmQgdGhlIHByb2R1Y3Qgc3RyaW5nLgorICAvLyBGb3IgQmx1ZXRvb3RoLCB0aGlzIHdpbGwgYmUgdGhlIG5hbWUgb2YgdGhlIGRldmljZS4KKyAgaW50IGxlbmd0aCA9IGlvY3RsKGhhbmRsZS0+ZmlsZURlc2NyaXB0b3IsIEhJRElPQ0dSQVdOQU1FKHNpemUpLCBidWZmZXIpOworCisgIGlmIChsZW5ndGggPT0gLTEpIHsKKyAgICBsb2dTeXN0ZW1FcnJvcigiaW9jdGxbSElESU9DR1JBV05BTUVdIik7CisgICAgbGVuZ3RoID0gMDsKKyAgfSBlbHNlIGlmIChsZW5ndGggPT0gc2l6ZSkgeworICAgIGxlbmd0aCAtPSAxOworICB9CisKKyAgYnVmZmVyW2xlbmd0aF0gPSAwOworICByZXR1cm4gISFsZW5ndGg7Cit9CisKK3N0YXRpYyBpbnQKK2hpZExpbnV4R2V0UmF3UGh5c2ljYWwgKEhpZEhhbmRsZSAqaGFuZGxlLCBjaGFyICpidWZmZXIsIHNpemVfdCBzaXplLCB2b2lkICpkYXRhKSB7CisgIC8vIEZvciBVU0IsIHRoaXMgd2lsbCBiZSB0aGUgcGh5c2ljYWwgcGF0aCAoY29udHJvbGxlciwgaHVicywgcG9ydHMsIGV0YykgdG8gdGhlIGRldmljZS4KKyAgLy8gRm9yIEJsdWV0b290aCwgdGhpcyB3aWxsIGJlIHRoZSBhZGRyZXNzIG9mIHRoZSBob3N0IGNvbnRyb2xsZXIuCisgIGludCBsZW5ndGggPSBpb2N0bChoYW5kbGUtPmZpbGVEZXNjcmlwdG9yLCBISURJT0NHUkFXUEhZUyhzaXplKSwgYnVmZmVyKTsKKworICBpZiAobGVuZ3RoID09IC0xKSB7CisgICAgbG9nU3lzdGVtRXJyb3IoImlvY3RsW0hJRElPQ0dSQVdQSFlTXSIpOworICAgIGxlbmd0aCA9IDA7CisgIH0gZWxzZSBpZiAobGVuZ3RoID09IHNpemUpIHsKKyAgICBsZW5ndGggLT0gMTsKKyAgfQorCisgIGJ1ZmZlcltsZW5ndGhdID0gMDsKKyAgcmV0dXJuICEhbGVuZ3RoOworfQorCitzdGF0aWMgaW50CitoaWRMaW51eEdldFJhd1VuaXF1ZSAoSGlkSGFuZGxlICpoYW5kbGUsIGNoYXIgKmJ1ZmZlciwgc2l6ZV90IHNpemUsIHZvaWQgKmRhdGEpIHsKKyAgLy8gRm9yIFVTQiwgdGhpcyB3aWxsIGJlIHRoZSBzZXJpYWwgbnVtYmVyIG9mIHRoZSBkZXZpY2UuCisgIC8vIEZvciBCbHVldG9vdGgsIHRoaXMgd2lsbCBiZSB0aGUgTUFDIChoYXJkd2FyZSkgYWRkcmVzcyBvZiB0aGUgZGV2aWNlLgorICBpbnQgbGVuZ3RoOworCisjaWZkZWYgSElESU9DR1JBV1VOSVEKKyAgbGVuZ3RoID0gaW9jdGwoaGFuZGxlLT5maWxlRGVzY3JpcHRvciwgSElESU9DR1JBV1VOSVEoc2l6ZSksIGJ1ZmZlcik7CisjZWxzZSAvKiBISURJT0NHUkFXVU5JUSAqLworICBsZW5ndGggPSAtMTsKKyAgZXJybm8gPSBFTk9TWVM7CisjZW5kaWYgLyogSElESU9DR1JBV1VOSVEgKi8KKworICBpZiAobGVuZ3RoID09IC0xKSB7CisgICAgbG9nU3lzdGVtRXJyb3IoImlvY3RsW0hJRElPQ0dSQVdVTklRXSIpOworICAgIGxlbmd0aCA9IDA7CisgIH0gZWxzZSBpZiAobGVuZ3RoID09IHNpemUpIHsKKyAgICBsZW5ndGggLT0gMTsKKyAgfQorCisgIGJ1ZmZlcltsZW5ndGhdID0gMDsKKyAgcmV0dXJuICEhbGVuZ3RoOworfQorCitzdGF0aWMgY29uc3QgY2hhciAqCitoaWRMaW51eEdldERldmljZUFkZHJlc3MgKEhpZEhhbmRsZSAqaGFuZGxlKSB7CisgIGNoYXIgYnVmZmVyWzBYMTAwMF07CisKKyAgcmV0dXJuIGhpZENhY2hlU3RyaW5nKAorICAgIGhhbmRsZSwgJmhhbmRsZS0+ZGV2aWNlQWRkcmVzcywKKyAgICBidWZmZXIsIHNpemVvZihidWZmZXIpLAorICAgIGhpZExpbnV4R2V0UmF3VW5pcXVlLCBOVUxMCisgICk7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICoKK2hpZExpbnV4R2V0RGV2aWNlTmFtZSAoSGlkSGFuZGxlICpoYW5kbGUpIHsKKyAgY2hhciBidWZmZXJbMFgxMDAwXTsKKworICByZXR1cm4gaGlkQ2FjaGVTdHJpbmcoCisgICAgaGFuZGxlLCAmaGFuZGxlLT5kZXZpY2VOYW1lLAorICAgIGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlciksCisgICAgaGlkTGludXhHZXRSYXdOYW1lLCBOVUxMCisgICk7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICoKK2hpZExpbnV4R2V0SG9zdFBhdGggKEhpZEhhbmRsZSAqaGFuZGxlKSB7CisgIGNoYXIgYnVmZmVyWzBYMTAwMF07CisKKyAgcmV0dXJuIGhpZENhY2hlU3RyaW5nKAorICAgIGhhbmRsZSwgJmhhbmRsZS0+aG9zdFBhdGgsCisgICAgYnVmZmVyLCBzaXplb2YoYnVmZmVyKSwKKyAgICBoaWRMaW51eEdldFJhd1BoeXNpY2FsLCBOVUxMCisgICk7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICoKK2hpZExpbnV4R2V0SG9zdERldmljZSAoSGlkSGFuZGxlICpoYW5kbGUpIHsKKyAgcmV0dXJuIGhhbmRsZS0+ZGV2aWNlUGF0aDsKK30KKworc3RhdGljIGNvbnN0IEhpZEhhbmRsZU1ldGhvZHMgaGlkTGludXhIYW5kbGVNZXRob2RzID0geworICAuZGVzdHJveUhhbmRsZSA9IGhpZExpbnV4RGVzdHJveUhhbmRsZSwKKworICAuZ2V0SXRlbXMgPSBoaWRMaW51eEdldEl0ZW1zLAorCisgIC5nZXRSZXBvcnRTaXplID0gaGlkTGludXhHZXRSZXBvcnRTaXplLAorICAuZ2V0UmVwb3J0ID0gaGlkTGludXhHZXRSZXBvcnQsCisgIC5zZXRSZXBvcnQgPSBoaWRMaW51eFNldFJlcG9ydCwKKyAgLmdldEZlYXR1cmUgPSBoaWRMaW51eEdldEZlYXR1cmUsCisgIC5zZXRGZWF0dXJlID0gaGlkTGludXhTZXRGZWF0dXJlLAorCisgIC53cml0ZURhdGEgPSBoaWRMaW51eFdyaXRlRGF0YSwKKyAgLm1vbml0b3JJbnB1dCA9IGhpZExpbnV4TW9uaXRvcklucHV0LAorICAuYXdhaXRJbnB1dCA9IGhpZExpbnV4QXdhaXRJbnB1dCwKKyAgLnJlYWREYXRhID0gaGlkTGludXhSZWFkRGF0YSwKKworICAuZ2V0RGV2aWNlSWRlbnRpZmllcnMgPSBoaWRMaW51eEdldERldmljZUlkZW50aWZpZXJzLAorICAuZ2V0RGV2aWNlQWRkcmVzcyA9IGhpZExpbnV4R2V0RGV2aWNlQWRkcmVzcywKKyAgLmdldERldmljZU5hbWUgPSBoaWRMaW51eEdldERldmljZU5hbWUsCisgIC5nZXRIb3N0UGF0aCA9IGhpZExpbnV4R2V0SG9zdFBhdGgsCisgIC5nZXRIb3N0RGV2aWNlID0gaGlkTGludXhHZXRIb3N0RGV2aWNlLAorfTsKKwordHlwZWRlZiBpbnQgSGlkTGludXhBdHRyaWJ1dGVUZXN0ZXIgKAorICBzdHJ1Y3QgdWRldl9kZXZpY2UgKmRldmljZSwKKyAgY29uc3QgY2hhciAqbmFtZSwKKyAgY29uc3Qgdm9pZCAqdmFsdWUKKyk7CisKK3N0YXRpYyBpbnQKK2hpZExpbnV4VGVzdFN0cmluZyAoCisgIHN0cnVjdCB1ZGV2X2RldmljZSAqZGV2aWNlLAorICBjb25zdCBjaGFyICpuYW1lLAorICBjb25zdCB2b2lkICp2YWx1ZQorKSB7CisgIGNvbnN0IGNoYXIgKnRlc3RTdHJpbmcgPSB2YWx1ZTsKKyAgaWYgKCF0ZXN0U3RyaW5nKSByZXR1cm4gMTsKKyAgaWYgKCEqdGVzdFN0cmluZykgcmV0dXJuIDE7CisKKyAgY29uc3QgY2hhciAqYWN0dWFsU3RyaW5nID0gdWRldl9kZXZpY2VfZ2V0X3N5c2F0dHJfdmFsdWUoZGV2aWNlLCBuYW1lKTsKKyAgaWYgKCFhY3R1YWxTdHJpbmcpIHJldHVybiAwOworICBpZiAoISphY3R1YWxTdHJpbmcpIHJldHVybiAwOworCisgIHJldHVybiBoaWRNYXRjaFN0cmluZyhhY3R1YWxTdHJpbmcsIHRlc3RTdHJpbmcpOworfQorCit0eXBlZGVmIHN0cnVjdCB7CisgIGNvbnN0IGNoYXIgKm5hbWU7CisgIGNvbnN0IHZvaWQgKnZhbHVlOworICBIaWRMaW51eEF0dHJpYnV0ZVRlc3RlciAqZnVuY3Rpb247Cit9IEhpZExpbnV4QXR0cmlidXRlVGVzdDsKKworc3RhdGljIGludAoraGlkTGludXhUZXN0QXR0cmlidXRlcyAoCisgIHN0cnVjdCB1ZGV2X2RldmljZSAqZGV2aWNlLAorICBjb25zdCBIaWRMaW51eEF0dHJpYnV0ZVRlc3QgKnRlc3RzLAorICBzaXplX3QgdGVzdENvdW50CispIHsKKyAgY29uc3QgSGlkTGludXhBdHRyaWJ1dGVUZXN0ICp0ZXN0ID0gdGVzdHM7CisgIGNvbnN0IEhpZExpbnV4QXR0cmlidXRlVGVzdCAqZW5kID0gdGVzdCArIHRlc3RDb3VudDsKKworICB3aGlsZSAodGVzdCA8IGVuZCkgeworICAgIGlmICghdGVzdC0+ZnVuY3Rpb24oZGV2aWNlLCB0ZXN0LT5uYW1lLCB0ZXN0LT52YWx1ZSkpIHJldHVybiAwOworICAgIHRlc3QgKz0gMTsKKyAgfQorCisgIHJldHVybiAxOworfQorCitzdGF0aWMgSGlkSGFuZGxlICoKK2hpZExpbnV4TmV3SGFuZGxlIChzdHJ1Y3QgdWRldl9kZXZpY2UgKmRldmljZSkgeworICBjb25zdCBjaGFyICpzeXNQYXRoID0gdWRldl9kZXZpY2VfZ2V0X3N5c3BhdGgoZGV2aWNlKTsKKyAgY29uc3QgY2hhciAqZGV2UGF0aCA9IHVkZXZfZGV2aWNlX2dldF9kZXZub2RlKGRldmljZSk7CisKKyAgc2l6ZV90IHN5c1NpemUgPSBzdHJsZW4oc3lzUGF0aCkgKyAxOworICBzaXplX3QgZGV2U2l6ZSA9IHN0cmxlbihkZXZQYXRoKSArIDE7CisgIEhpZEhhbmRsZSAqaGFuZGxlID0gbWFsbG9jKHNpemVvZigqaGFuZGxlKSArIHN5c1NpemUgKyBkZXZTaXplKTsKKworICBpZiAoaGFuZGxlKSB7CisgICAgbWVtc2V0KGhhbmRsZSwgMCwgc2l6ZW9mKCpoYW5kbGUpKTsKKworICAgIHsKKyAgICAgIGNoYXIgKnN0cmluZyA9IGhhbmRsZS0+c3RyaW5nczsKKyAgICAgIHN0cmluZyA9IG1lbXBjcHkoKGhhbmRsZS0+c3lzZnNQYXRoID0gc3RyaW5nKSwgc3lzUGF0aCwgc3lzU2l6ZSk7CisgICAgICBzdHJpbmcgPSBtZW1wY3B5KChoYW5kbGUtPmRldmljZVBhdGggPSBzdHJpbmcpLCBkZXZQYXRoLCBkZXZTaXplKTsKKyAgICB9CisKKyAgICBpZiAoKGhhbmRsZS0+ZmlsZURlc2NyaXB0b3IgPSBvcGVuKGRldlBhdGgsIChPX1JEV1IgfCBPX05PTkJMT0NLKSkpICE9IC0xKSB7CisgICAgICBpZiAoaW9jdGwoaGFuZGxlLT5maWxlRGVzY3JpcHRvciwgSElESU9DR1JBV0lORk8sICZoYW5kbGUtPmRldmljZUluZm9ybWF0aW9uKSAhPSAtMSkgeworICAgICAgICByZXR1cm4gaGFuZGxlOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgbG9nU3lzdGVtRXJyb3IoImlvY3RsW0hJRElPQ0dSQVdJTkZPXSIpOworICAgICAgfQorCisgICAgICBjbG9zZShoYW5kbGUtPmZpbGVEZXNjcmlwdG9yKTsKKyAgICB9IGVsc2UgeworICAgICAgbG9nTWVzc2FnZShMT0dfRVJSLCAiZGV2aWNlIG9wZW4gZXJyb3I6ICVzOiAlcyIsIGRldlBhdGgsIHN0cmVycm9yKGVycm5vKSk7CisgICAgfQorCisgICAgZnJlZShoYW5kbGUpOworICB9IGVsc2UgeworICAgIGxvZ01hbGxvY0Vycm9yKCk7CisgIH0KKworICByZXR1cm4gTlVMTDsKK30KKwordHlwZWRlZiBpbnQgSGlkTGludXhQcm9wZXJ0aWVzVGVzdGVyICgKKyAgSGlkSGFuZGxlICpoYW5kbGUsCisgIHN0cnVjdCB1ZGV2X2RldmljZSAqZGV2aWNlLAorICBjb25zdCB2b2lkICpmaWx0ZXIKKyk7CisKK3N0YXRpYyBIaWRIYW5kbGUgKgoraGlkTGludXhGaW5kRGV2aWNlIChIaWRMaW51eFByb3BlcnRpZXNUZXN0ZXIgKnRlc3RQcm9wZXJ0aWVzLCBjb25zdCB2b2lkICpmaWx0ZXIpIHsKKyAgSGlkSGFuZGxlICpoYW5kbGUgPSBOVUxMOworICBzdHJ1Y3QgdWRldiAqdWRldiA9IHVkZXZfbmV3KCk7CisKKyAgaWYgKHVkZXYpIHsKKyAgICBzdHJ1Y3QgdWRldl9lbnVtZXJhdGUgKmVudW1lcmF0aW9uID0gdWRldl9lbnVtZXJhdGVfbmV3KHVkZXYpOworCisgICAgaWYgKGVudW1lcmF0aW9uKSB7CisgICAgICB1ZGV2X2VudW1lcmF0ZV9hZGRfbWF0Y2hfc3Vic3lzdGVtKGVudW1lcmF0aW9uLCAiaGlkcmF3Iik7CisgICAgICB1ZGV2X2VudW1lcmF0ZV9zY2FuX2RldmljZXMoZW51bWVyYXRpb24pOworCisgICAgICBzdHJ1Y3QgdWRldl9saXN0X2VudHJ5ICpkZXZpY2VMaXN0ID0gdWRldl9lbnVtZXJhdGVfZ2V0X2xpc3RfZW50cnkoZW51bWVyYXRpb24pOworICAgICAgc3RydWN0IHVkZXZfbGlzdF9lbnRyeSAqZGV2aWNlRW50cnk7CisKKyAgICAgIHVkZXZfbGlzdF9lbnRyeV9mb3JlYWNoKGRldmljZUVudHJ5LCBkZXZpY2VMaXN0KSB7CisgICAgICAgIGNvbnN0IGNoYXIgKnN5c1BhdGggPSB1ZGV2X2xpc3RfZW50cnlfZ2V0X25hbWUoZGV2aWNlRW50cnkpOworICAgICAgICBzdHJ1Y3QgdWRldl9kZXZpY2UgKmhpZERldmljZSA9IHVkZXZfZGV2aWNlX25ld19mcm9tX3N5c3BhdGgodWRldiwgc3lzUGF0aCk7CisKKyAgICAgICAgaWYgKGhpZERldmljZSkgeworICAgICAgICAgIGlmICgoaGFuZGxlID0gaGlkTGludXhOZXdIYW5kbGUoaGlkRGV2aWNlKSkpIHsKKyAgICAgICAgICAgIGlmICghdGVzdFByb3BlcnRpZXMoaGFuZGxlLCBoaWREZXZpY2UsIGZpbHRlcikpIHsKKyAgICAgICAgICAgICAgaGlkTGludXhEZXN0cm95SGFuZGxlKGhhbmRsZSk7CisgICAgICAgICAgICAgIGhhbmRsZSA9IE5VTEw7CisgICAgICAgICAgICB9CisgICAgICAgICAgfQorCisgICAgICAgICAgdWRldl9kZXZpY2VfdW5yZWYoaGlkRGV2aWNlKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChoYW5kbGUpIGJyZWFrOworICAgICAgfQorCisgICAgICB1ZGV2X2VudW1lcmF0ZV91bnJlZihlbnVtZXJhdGlvbik7CisgICAgICBlbnVtZXJhdGlvbiA9IE5VTEw7CisgICAgfQorCisgICAgdWRldl91bnJlZih1ZGV2KTsKKyAgICB1ZGV2ID0gTlVMTDsKKyAgfQorCisgIHJldHVybiBoYW5kbGU7Cit9CisKK3N0YXRpYyBpbnQKK2hpZExpbnV4VGVzdENvbW1vblByb3BlcnRpZXMgKEhpZEhhbmRsZSAqaGFuZGxlLCBjb25zdCBIaWRDb21tb25Qcm9wZXJ0aWVzICpjb21tb24pIHsKKyAgaWYgKGNvbW1vbi0+dmVuZG9ySWRlbnRpZmllcikgeworICAgIGlmIChoYW5kbGUtPmRldmljZUluZm9ybWF0aW9uLnZlbmRvciAhPSBjb21tb24tPnZlbmRvcklkZW50aWZpZXIpIHsKKyAgICAgIHJldHVybiAwOworICAgIH0KKyAgfQorCisgIGlmIChjb21tb24tPnByb2R1Y3RJZGVudGlmaWVyKSB7CisgICAgaWYgKGhhbmRsZS0+ZGV2aWNlSW5mb3JtYXRpb24ucHJvZHVjdCAhPSBjb21tb24tPnByb2R1Y3RJZGVudGlmaWVyKSB7CisgICAgICByZXR1cm4gMDsKKyAgICB9CisgIH0KKworICByZXR1cm4gMTsKK30KKworc3RhdGljIGludAoraGlkTGludXhUZXN0VVNCUHJvcGVydGllcyAoSGlkSGFuZGxlICpoYW5kbGUsIHN0cnVjdCB1ZGV2X2RldmljZSAqaGlkRGV2aWNlLCBjb25zdCB2b2lkICpmaWx0ZXIpIHsKKyAgaWYgKGhhbmRsZS0+ZGV2aWNlSW5mb3JtYXRpb24uYnVzdHlwZSAhPSBCVVNfVVNCKSByZXR1cm4gMDsKKworICBjb25zdCBIaWRVU0JGaWx0ZXIgKmh1ZiA9IGZpbHRlcjsKKyAgaWYgKCFoaWRMaW51eFRlc3RDb21tb25Qcm9wZXJ0aWVzKGhhbmRsZSwgJmh1Zi0+Y29tbW9uKSkgcmV0dXJuIDA7CisKKyAgc3RydWN0IHVkZXZfZGV2aWNlICp1c2JEZXZpY2UgPSB1ZGV2X2RldmljZV9nZXRfcGFyZW50X3dpdGhfc3Vic3lzdGVtX2RldnR5cGUoaGlkRGV2aWNlLCAidXNiIiwgInVzYl9kZXZpY2UiKTsKKyAgaWYgKCF1c2JEZXZpY2UpIHJldHVybiAwOworICBjb25zdCBIaWRVU0JQcm9wZXJ0aWVzICp0ZXN0ID0gJmh1Zi0+dXNiOworCisgIGNvbnN0IEhpZExpbnV4QXR0cmlidXRlVGVzdCB0ZXN0c1tdID0geworICAgIHsgLm5hbWUgPSAibWFudWZhY3R1cmVyIiwKKyAgICAgIC52YWx1ZSA9IHRlc3QtPm1hbnVmYWN0dXJlck5hbWUsCisgICAgICAuZnVuY3Rpb24gPSBoaWRMaW51eFRlc3RTdHJpbmcKKyAgICB9LAorCisgICAgeyAubmFtZSA9ICJwcm9kdWN0IiwKKyAgICAgIC52YWx1ZSA9IHRlc3QtPnByb2R1Y3REZXNjcmlwdGlvbiwKKyAgICAgIC5mdW5jdGlvbiA9IGhpZExpbnV4VGVzdFN0cmluZworICAgIH0sCisKKyAgICB7IC5uYW1lID0gInNlcmlhbCIsCisgICAgICAudmFsdWUgPSB0ZXN0LT5zZXJpYWxOdW1iZXIsCisgICAgICAuZnVuY3Rpb24gPSBoaWRMaW51eFRlc3RTdHJpbmcKKyAgICB9LAorICB9OworCisgIHJldHVybiBoaWRMaW51eFRlc3RBdHRyaWJ1dGVzKHVzYkRldmljZSwgdGVzdHMsIEFSUkFZX0NPVU5UKHRlc3RzKSk7Cit9CisKK3N0YXRpYyBIaWRIYW5kbGUgKgoraGlkTGludXhOZXdVU0JIYW5kbGUgKGNvbnN0IEhpZFVTQkZpbHRlciAqZmlsdGVyKSB7CisgIHJldHVybiBoaWRMaW51eEZpbmREZXZpY2UoaGlkTGludXhUZXN0VVNCUHJvcGVydGllcywgZmlsdGVyKTsKK30KKworc3RhdGljIGludAoraGlkTGludXhUZXN0Qmx1ZXRvb3RoUHJvcGVydGllcyAoSGlkSGFuZGxlICpoYW5kbGUsIHN0cnVjdCB1ZGV2X2RldmljZSAqaGlkRGV2aWNlLCBjb25zdCB2b2lkICpmaWx0ZXIpIHsKKyAgaWYgKGhhbmRsZS0+ZGV2aWNlSW5mb3JtYXRpb24uYnVzdHlwZSAhPSBCVVNfQkxVRVRPT1RIKSByZXR1cm4gMDsKKworICBjb25zdCBIaWRCbHVldG9vdGhGaWx0ZXIgKmhiZiA9IGZpbHRlcjsKKyAgaWYgKCFoaWRMaW51eFRlc3RDb21tb25Qcm9wZXJ0aWVzKGhhbmRsZSwgJmhiZi0+Y29tbW9uKSkgcmV0dXJuIDA7CisgIGNvbnN0IEhpZEJsdWV0b290aFByb3BlcnRpZXMgKnRlc3QgPSAmaGJmLT5ibHVldG9vdGg7CisKKyAgeworICAgIGNvbnN0IGNoYXIgKnRlc3RBZGRyZXNzID0gdGVzdC0+bWFjQWRkcmVzczsKKworICAgIGlmICh0ZXN0QWRkcmVzcyAmJiAqdGVzdEFkZHJlc3MpIHsKKyAgICAgIGNvbnN0IGNoYXIgKmFjdHVhbEFkZHJlc3MgPSBoaWRMaW51eEdldERldmljZUFkZHJlc3MoaGFuZGxlKTsKKyAgICAgIGlmICghYWN0dWFsQWRkcmVzcykgcmV0dXJuIDA7CisgICAgICBpZiAoc3RyY2FzZWNtcChhY3R1YWxBZGRyZXNzLCB0ZXN0QWRkcmVzcykgIT0gMCkgcmV0dXJuIDA7CisgICAgfQorICB9CisKKyAgeworICAgIGNvbnN0IGNoYXIgKnRlc3ROYW1lID0gdGVzdC0+ZGV2aWNlTmFtZTsKKworICAgIGlmICh0ZXN0TmFtZSAmJiAqdGVzdE5hbWUpIHsKKyAgICAgIGNvbnN0IGNoYXIgKmFjdHVhbE5hbWUgPSBoaWRMaW51eEdldERldmljZU5hbWUoaGFuZGxlKTsKKyAgICAgIGlmICghYWN0dWFsTmFtZSkgcmV0dXJuIDA7CisgICAgICBpZiAoIWhpZE1hdGNoU3RyaW5nKGFjdHVhbE5hbWUsIHRlc3ROYW1lKSkgcmV0dXJuIDA7CisgICAgfQorICB9CisKKyAgcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBIaWRIYW5kbGUgKgoraGlkTGludXhOZXdCbHVldG9vdGhIYW5kbGUgKGNvbnN0IEhpZEJsdWV0b290aEZpbHRlciAqZmlsdGVyKSB7CisgIHJldHVybiBoaWRMaW51eEZpbmREZXZpY2UoaGlkTGludXhUZXN0Qmx1ZXRvb3RoUHJvcGVydGllcywgZmlsdGVyKTsKK30KKworY29uc3QgSGlkUGFja2FnZURlc2NyaXB0b3IgaGlkUGFja2FnZURlc2NyaXB0b3IgPSB7CisgIC5wYWNrYWdlTmFtZSA9ICJMaW51eCIsCisgIC5oYW5kbGVNZXRob2RzID0gJmhpZExpbnV4SGFuZGxlTWV0aG9kcywKKworICAubmV3VVNCSGFuZGxlID0gaGlkTGludXhOZXdVU0JIYW5kbGUsCisgIC5uZXdCbHVldG9vdGhIYW5kbGUgPSBoaWRMaW51eE5ld0JsdWV0b290aEhhbmRsZSwKK307CmRpZmYgLS1naXQgYS9Qcm9ncmFtcy9oaWRfbm9uZS5jIGIvUHJvZ3JhbXMvaGlkX25vbmUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YmJhZTVlCi0tLSAvZGV2L251bGwKKysrIGIvUHJvZ3JhbXMvaGlkX25vbmUuYwpAQCAtMCwwICsxLDI2IEBACisvKgorICogQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyAqICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyAqCisgKiBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorICoKKyAqIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyAqCisgKiBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisgKi8KKworI2luY2x1ZGUgInByb2xvZ3VlLmgiCisKKyNpbmNsdWRlICJpb19oaWQuaCIKKyNpbmNsdWRlICJoaWRfaW50ZXJuYWwuaCIKKworY29uc3QgSGlkUGFja2FnZURlc2NyaXB0b3IgaGlkUGFja2FnZURlc2NyaXB0b3IgPSB7CisgIC5wYWNrYWdlTmFtZSA9ICJOb25lIgorfTsKZGlmZiAtLWdpdCBhL1Byb2dyYW1zL2hpZF90YWJsZXMuYyBiL1Byb2dyYW1zL2hpZF90YWJsZXMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYzM2MzdkCi0tLSAvZGV2L251bGwKKysrIGIvUHJvZ3JhbXMvaGlkX3RhYmxlcy5jCkBAIC0wLDAgKzEsNTMyIEBACisvKgorICogQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyAqICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyAqCisgKiBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorICoKKyAqIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyAqCisgKiBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisgKi8KKworI2luY2x1ZGUgInByb2xvZ3VlLmgiCisKKyNpbmNsdWRlICJoaWRfZGVmcy5oIgorI2luY2x1ZGUgImhpZF90YWJsZXMuaCIKKworI2RlZmluZSBISURfSVRFTV9UQUdfRU5UUlkobmFtZSkgSElEX1RBQkxFX0VOVFJZKEhJRF9JVE0sIG5hbWUpCitISURfQkVHSU5fVEFCTEUoSXRlbVRhZykKKyAgSElEX0lURU1fVEFHX0VOVFJZKFVzYWdlUGFnZSksCisgIEhJRF9JVEVNX1RBR19FTlRSWShVc2FnZSksCisgIEhJRF9JVEVNX1RBR19FTlRSWShMb2dpY2FsTWluaW11bSksCisgIEhJRF9JVEVNX1RBR19FTlRSWShVc2FnZU1pbmltdW0pLAorICBISURfSVRFTV9UQUdfRU5UUlkoTG9naWNhbE1heGltdW0pLAorICBISURfSVRFTV9UQUdfRU5UUlkoVXNhZ2VNYXhpbXVtKSwKKyAgSElEX0lURU1fVEFHX0VOVFJZKFBoeXNpY2FsTWluaW11bSksCisgIEhJRF9JVEVNX1RBR19FTlRSWShEZXNpZ25hdG9ySW5kZXgpLAorICBISURfSVRFTV9UQUdfRU5UUlkoUGh5c2ljYWxNYXhpbXVtKSwKKyAgSElEX0lURU1fVEFHX0VOVFJZKERlc2lnbmF0b3JNaW5pbXVtKSwKKyAgSElEX0lURU1fVEFHX0VOVFJZKFVuaXRFeHBvbmVudCksCisgIEhJRF9JVEVNX1RBR19FTlRSWShEZXNpZ25hdG9yTWF4aW11bSksCisgIEhJRF9JVEVNX1RBR19FTlRSWShVbml0KSwKKyAgSElEX0lURU1fVEFHX0VOVFJZKFJlcG9ydFNpemUpLAorICBISURfSVRFTV9UQUdfRU5UUlkoU3RyaW5nSW5kZXgpLAorICBISURfSVRFTV9UQUdfRU5UUlkoSW5wdXQpLAorICBISURfSVRFTV9UQUdfRU5UUlkoUmVwb3J0SUQpLAorICBISURfSVRFTV9UQUdfRU5UUlkoU3RyaW5nTWluaW11bSksCisgIEhJRF9JVEVNX1RBR19FTlRSWShPdXRwdXQpLAorICBISURfSVRFTV9UQUdfRU5UUlkoUmVwb3J0Q291bnQpLAorICBISURfSVRFTV9UQUdfRU5UUlkoU3RyaW5nTWF4aW11bSksCisgIEhJRF9JVEVNX1RBR19FTlRSWShDb2xsZWN0aW9uKSwKKyAgSElEX0lURU1fVEFHX0VOVFJZKFB1c2gpLAorICBISURfSVRFTV9UQUdfRU5UUlkoRGVsaW1pdGVyKSwKKyAgSElEX0lURU1fVEFHX0VOVFJZKEZlYXR1cmUpLAorICBISURfSVRFTV9UQUdfRU5UUlkoUG9wKSwKKyAgSElEX0lURU1fVEFHX0VOVFJZKEVuZENvbGxlY3Rpb24pLAorSElEX0VORF9UQUJMRShJdGVtVGFnKQorCisjZGVmaW5lIEhJRF9DT0xMRUNUSU9OX1RZUEVfRU5UUlkobmFtZSkgSElEX1RBQkxFX0VOVFJZKEhJRF9DT0wsIG5hbWUpCitISURfQkVHSU5fVEFCTEUoQ29sbGVjdGlvblR5cGUpCisgIEhJRF9DT0xMRUNUSU9OX1RZUEVfRU5UUlkoUGh5c2ljYWwpLAorICBISURfQ09MTEVDVElPTl9UWVBFX0VOVFJZKEFwcGxpY2F0aW9uKSwKKyAgSElEX0NPTExFQ1RJT05fVFlQRV9FTlRSWShMb2dpY2FsKSwKK0hJRF9FTkRfVEFCTEUoQ29sbGVjdGlvblR5cGUpCisKKyNkZWZpbmUgSElEX1VTQUdFX1RZUEVfRU5UUlkobmFtZSkgSElEX1RBQkxFX0VOVFJZKEhJRF9VU0dfVFlQRSwgbmFtZSkKK0hJRF9CRUdJTl9UQUJMRShVc2FnZVR5cGUpCisgIEhJRF9VU0FHRV9UWVBFX0VOVFJZKExDKSwKKyAgSElEX1VTQUdFX1RZUEVfRU5UUlkoT09DKSwKKyAgSElEX1VTQUdFX1RZUEVfRU5UUlkoTUMpLAorICBISURfVVNBR0VfVFlQRV9FTlRSWShPU0MpLAorICBISURfVVNBR0VfVFlQRV9FTlRSWShSVEMpLAorICBISURfVVNBR0VfVFlQRV9FTlRSWShTRUwpLAorICBISURfVVNBR0VfVFlQRV9FTlRSWShTViksCisgIEhJRF9VU0FHRV9UWVBFX0VOVFJZKFNGKSwKKyAgSElEX1VTQUdFX1RZUEVfRU5UUlkoRFYpLAorICBISURfVVNBR0VfVFlQRV9FTlRSWShERiksCisgIEhJRF9VU0FHRV9UWVBFX0VOVFJZKE5BUlkpLAorICBISURfVVNBR0VfVFlQRV9FTlRSWShDQSksCisgIEhJRF9VU0FHRV9UWVBFX0VOVFJZKENMKSwKKyAgSElEX1VTQUdFX1RZUEVfRU5UUlkoQ1ApLAorICBISURfVVNBR0VfVFlQRV9FTlRSWShVUyksCisgIEhJRF9VU0FHRV9UWVBFX0VOVFJZKFVNKSwKK0hJRF9FTkRfVEFCTEUoVXNhZ2VUeXBlKQorCisjZGVmaW5lIEhJRF9VU0FHRV9FTlRSWShwcmVmaXgsIG5hbWUsIHR5cGUpIEhJRF9UQUJMRV9FTlRSWShwcmVmaXgsIG5hbWUsIC51c2FnZVR5cGU9SElEX1VTR19UWVBFXyMjdHlwZSkKKworI2RlZmluZSBISURfR0VORVJJQ19ERVNLVE9QX1VTQUdFX0VOVFJZKG5hbWUsIHR5cGUpIEhJRF9VU0FHRV9FTlRSWShISURfVVNHX0dEVCwgbmFtZSwgdHlwZSkKK0hJRF9CRUdJTl9UQUJMRShHZW5lcmljRGVza3RvcFVzYWdlKQorICBISURfR0VORVJJQ19ERVNLVE9QX1VTQUdFX0VOVFJZKFBvaW50ZXIsIENQKSwKKyAgSElEX0dFTkVSSUNfREVTS1RPUF9VU0FHRV9FTlRSWShNb3VzZSwgQ0EpLAorICBISURfR0VORVJJQ19ERVNLVE9QX1VTQUdFX0VOVFJZKEpveXN0aWNrLCBDQSksCisgIEhJRF9HRU5FUklDX0RFU0tUT1BfVVNBR0VfRU5UUlkoR2FtZVBhZCwgQ0EpLAorICBISURfR0VORVJJQ19ERVNLVE9QX1VTQUdFX0VOVFJZKEtleWJvYXJkLCBDQSksCisgIEhJRF9HRU5FUklDX0RFU0tUT1BfVVNBR0VfRU5UUlkoS2V5cGFkLCBDQSksCisgIEhJRF9HRU5FUklDX0RFU0tUT1BfVVNBR0VfRU5UUlkoTXVsdGlBeGlzQ29udHJvbGxlciwgQ0EpLAorICBISURfR0VORVJJQ19ERVNLVE9QX1VTQUdFX0VOVFJZKFRhYmxldFBDU3lzdGVtQ29udHJvbHMsIENBKSwKKyAgSElEX0dFTkVSSUNfREVTS1RPUF9VU0FHRV9FTlRSWShYLCBEViksCisgIEhJRF9HRU5FUklDX0RFU0tUT1BfVVNBR0VfRU5UUlkoWSwgRFYpLAorICBISURfR0VORVJJQ19ERVNLVE9QX1VTQUdFX0VOVFJZKFosIERWKSwKKyAgSElEX0dFTkVSSUNfREVTS1RPUF9VU0FHRV9FTlRSWShSeCwgRFYpLAorICBISURfR0VORVJJQ19ERVNLVE9QX1VTQUdFX0VOVFJZKFJ5LCBEViksCisgIEhJRF9HRU5FUklDX0RFU0tUT1BfVVNBR0VfRU5UUlkoUnosIERWKSwKKyAgSElEX0dFTkVSSUNfREVTS1RPUF9VU0FHRV9FTlRSWShTbGlkZXIsIERWKSwKKyAgSElEX0dFTkVSSUNfREVTS1RPUF9VU0FHRV9FTlRSWShEaWFsLCBEViksCisgIEhJRF9HRU5FUklDX0RFU0tUT1BfVVNBR0VfRU5UUlkoV2hlZWwsIERWKSwKKyAgSElEX0dFTkVSSUNfREVTS1RPUF9VU0FHRV9FTlRSWShIYXRTd2l0Y2gsIERWKSwKKyAgSElEX0dFTkVSSUNfREVTS1RPUF9VU0FHRV9FTlRSWShDb3VudGVkQnVmZmVyLCBDTCksCisgIEhJRF9HRU5FUklDX0RFU0tUT1BfVVNBR0VfRU5UUlkoQnl0ZUNvdW50LCBEViksCisgIEhJRF9HRU5FUklDX0RFU0tUT1BfVVNBR0VfRU5UUlkoTW90aW9uV2FrZXVwLCBPU0MpLAorICBISURfR0VORVJJQ19ERVNLVE9QX1VTQUdFX0VOVFJZKFN0YXJ0LCBPT0MpLAorICBISURfR0VORVJJQ19ERVNLVE9QX1VTQUdFX0VOVFJZKFNlbGVjdCwgT09DKSwKKyAgSElEX0dFTkVSSUNfREVTS1RPUF9VU0FHRV9FTlRSWShWeCwgRFYpLAorICBISURfR0VORVJJQ19ERVNLVE9QX1VTQUdFX0VOVFJZKFZ5LCBEViksCisgIEhJRF9HRU5FUklDX0RFU0tUT1BfVVNBR0VfRU5UUlkoVnosIERWKSwKKyAgSElEX0dFTkVSSUNfREVTS1RPUF9VU0FHRV9FTlRSWShWYnJ4LCBEViksCisgIEhJRF9HRU5FUklDX0RFU0tUT1BfVVNBR0VfRU5UUlkoVmJyeSwgRFYpLAorICBISURfR0VORVJJQ19ERVNLVE9QX1VTQUdFX0VOVFJZKFZicnosIERWKSwKKyAgSElEX0dFTkVSSUNfREVTS1RPUF9VU0FHRV9FTlRSWShWbm8sIERWKSwKKyAgSElEX0dFTkVSSUNfREVTS1RPUF9VU0FHRV9FTlRSWShGZWF0dXJlTm90aWZpY2F0aW9uLCBEViksCisgIEhJRF9HRU5FUklDX0RFU0tUT1BfVVNBR0VfRU5UUlkoUmVzb2x1dGlvbk11bHRpcGxpZXIsIERWKSwKKyAgSElEX0dFTkVSSUNfREVTS1RPUF9VU0FHRV9FTlRSWShTeXN0ZW1Db250cm9sLCBDQSksCisgIEhJRF9HRU5FUklDX0RFU0tUT1BfVVNBR0VfRU5UUlkoU3lzdGVtUG93ZXJEb3duLCBPU0MpLAorICBISURfR0VORVJJQ19ERVNLVE9QX1VTQUdFX0VOVFJZKFN5c3RlbVNsZWVwLCBPU0MpLAorICBISURfR0VORVJJQ19ERVNLVE9QX1VTQUdFX0VOVFJZKFN5c3RlbVdha2VVcCwgT1NDKSwKKyAgSElEX0dFTkVSSUNfREVTS1RPUF9VU0FHRV9FTlRSWShTeXN0ZW1Db250ZXh0TWVudSwgT1NDKSwKKyAgSElEX0dFTkVSSUNfREVTS1RPUF9VU0FHRV9FTlRSWShTeXN0ZW1NYWluTWVudSwgT1NDKSwKKyAgSElEX0dFTkVSSUNfREVTS1RPUF9VU0FHRV9FTlRSWShTeXN0ZW1BcHBNZW51LCBPU0MpLAorICBISURfR0VORVJJQ19ERVNLVE9QX1VTQUdFX0VOVFJZKFN5c3RlbU1lbnVIZWxwLCBPU0MpLAorICBISURfR0VORVJJQ19ERVNLVE9QX1VTQUdFX0VOVFJZKFN5c3RlbU1lbnVFeGl0LCBPU0MpLAorICBISURfR0VORVJJQ19ERVNLVE9QX1VTQUdFX0VOVFJZKFN5c3RlbU1lbnVTZWxlY3QsIE9TQyksCisgIEhJRF9HRU5FUklDX0RFU0tUT1BfVVNBR0VfRU5UUlkoU3lzdGVtTWVudVJpZ2h0LCBSVEMpLAorICBISURfR0VORVJJQ19ERVNLVE9QX1VTQUdFX0VOVFJZKFN5c3RlbU1lbnVMZWZ0LCBSVEMpLAorICBISURfR0VORVJJQ19ERVNLVE9QX1VTQUdFX0VOVFJZKFN5c3RlbU1lbnVVcCwgUlRDKSwKKyAgSElEX0dFTkVSSUNfREVTS1RPUF9VU0FHRV9FTlRSWShTeXN0ZW1NZW51RG93biwgUlRDKSwKKyAgSElEX0dFTkVSSUNfREVTS1RPUF9VU0FHRV9FTlRSWShTeXN0ZW1Db2xkUmVzdGFydCwgT1NDKSwKKyAgSElEX0dFTkVSSUNfREVTS1RPUF9VU0FHRV9FTlRSWShTeXN0ZW1XYXJtUmVzdGFydCwgT1NDKSwKKyAgSElEX0dFTkVSSUNfREVTS1RPUF9VU0FHRV9FTlRSWShEUGFkVXAsIE9PQyksCisgIEhJRF9HRU5FUklDX0RFU0tUT1BfVVNBR0VfRU5UUlkoRFBhZERvd24sIE9PQyksCisgIEhJRF9HRU5FUklDX0RFU0tUT1BfVVNBR0VfRU5UUlkoRFBhZFJpZ2h0LCBPT0MpLAorICBISURfR0VORVJJQ19ERVNLVE9QX1VTQUdFX0VOVFJZKERQYWRMZWZ0LCBPT0MpLAorICBISURfR0VORVJJQ19ERVNLVE9QX1VTQUdFX0VOVFJZKFN5c3RlbURvY2ssIE9TQyksCisgIEhJRF9HRU5FUklDX0RFU0tUT1BfVVNBR0VfRU5UUlkoU3lzdGVtVW5kb2NrLCBPU0MpLAorICBISURfR0VORVJJQ19ERVNLVE9QX1VTQUdFX0VOVFJZKFN5c3RlbVNldHVwLCBPU0MpLAorICBISURfR0VORVJJQ19ERVNLVE9QX1VTQUdFX0VOVFJZKFN5c3RlbUJyZWFrLCBPU0MpLAorICBISURfR0VORVJJQ19ERVNLVE9QX1VTQUdFX0VOVFJZKFN5c3RlbURlYnVnZ2VyQnJlYWssIE9TQyksCisgIEhJRF9HRU5FUklDX0RFU0tUT1BfVVNBR0VfRU5UUlkoQXBwbGljYXRpb25CcmVhaywgT1NDKSwKKyAgSElEX0dFTkVSSUNfREVTS1RPUF9VU0FHRV9FTlRSWShBcHBsaWNhdGlvbkRlYnVnZ2VyQnJlYWssIE9TQyksCisgIEhJRF9HRU5FUklDX0RFU0tUT1BfVVNBR0VfRU5UUlkoU3lzdGVtU3BlYWtlck11dGUsIE9TQyksCisgIEhJRF9HRU5FUklDX0RFU0tUT1BfVVNBR0VfRU5UUlkoU3lzdGVtSGliZXJuYXRlLCBPU0MpLAorICBISURfR0VORVJJQ19ERVNLVE9QX1VTQUdFX0VOVFJZKFN5c3RlbURpc3BsYXlJbnZlcnQsIE9TQyksCisgIEhJRF9HRU5FUklDX0RFU0tUT1BfVVNBR0VfRU5UUlkoU3lzdGVtRGlzcGxheUludGVybmFsLCBPU0MpLAorICBISURfR0VORVJJQ19ERVNLVE9QX1VTQUdFX0VOVFJZKFN5c3RlbURpc3BsYXlFeHRlcm5hbCwgT1NDKSwKKyAgSElEX0dFTkVSSUNfREVTS1RPUF9VU0FHRV9FTlRSWShTeXN0ZW1EaXNwbGF5Qm90aCwgT1NDKSwKKyAgSElEX0dFTkVSSUNfREVTS1RPUF9VU0FHRV9FTlRSWShTeXN0ZW1EaXNwbGF5RHVhbCwgT1NDKSwKKyAgSElEX0dFTkVSSUNfREVTS1RPUF9VU0FHRV9FTlRSWShTeXN0ZW1EaXNwbGF5VG9nZ2xlSW50RXh0LCBPU0MpLAorICBISURfR0VORVJJQ19ERVNLVE9QX1VTQUdFX0VOVFJZKFN5c3RlbURpc3BsYXlTd2FwLCBPU0MpLAorICBISURfR0VORVJJQ19ERVNLVE9QX1VTQUdFX0VOVFJZKFN5c3RlbURpc3BsYXlMQ0RBdXRvc2NhbGUsIE9TQyksCitISURfRU5EX1RBQkxFKEdlbmVyaWNEZXNrdG9wVXNhZ2UpCisKKyNkZWZpbmUgSElEX0tFWUJPQVJEX1VTQUdFX0VOVFJZKG5hbWUsIHR5cGUpIEhJRF9VU0FHRV9FTlRSWShISURfVVNHX0tCRCwgbmFtZSwgdHlwZSkKK0hJRF9CRUdJTl9UQUJMRShLZXlib2FyZFVzYWdlKQorICBISURfS0VZQk9BUkRfVVNBR0VfRU5UUlkoS2V5Ym9hcmRFcnJvclJvbGxPdmVyLCBTRUwpLAorICBISURfS0VZQk9BUkRfVVNBR0VfRU5UUlkoS2V5Ym9hcmRQb3N0RmFpbCwgU0VMKSwKKyAgSElEX0tFWUJPQVJEX1VTQUdFX0VOVFJZKEtleWJvYXJkRXJyb3JVbmRlZmluZWQsIFNFTCksCisgIEhJRF9LRVlCT0FSRF9VU0FHRV9FTlRSWShLZXlib2FyZEEsIFNFTCksCisgIEhJRF9LRVlCT0FSRF9VU0FHRV9FTlRSWShLZXlib2FyZEIsIFNFTCksCisgIEhJRF9LRVlCT0FSRF9VU0FHRV9FTlRSWShLZXlib2FyZEMsIFNFTCksCisgIEhJRF9LRVlCT0FSRF9VU0FHRV9FTlRSWShLZXlib2FyZEQsIFNFTCksCisgIEhJRF9LRVlCT0FSRF9VU0FHRV9FTlRSWShLZXlib2FyZEUsIFNFTCksCisgIEhJRF9LRVlCT0FSRF9VU0FHRV9FTlRSWShLZXlib2FyZEYsIFNFTCksCisgIEhJRF9LRVlCT0FSRF9VU0FHRV9FTlRSWShLZXlib2FyZEcsIFNFTCksCisgIEhJRF9LRVlCT0FSRF9VU0FHRV9FTlRSWShLZXlib2FyZEgsIFNFTCksCisgIEhJRF9LRVlCT0FSRF9VU0FHRV9FTlRSWShLZXlib2FyZEksIFNFTCksCisgIEhJRF9LRVlCT0FSRF9VU0FHRV9FTlRSWShLZXlib2FyZEosIFNFTCksCisgIEhJRF9LRVlCT0FSRF9VU0FHRV9FTlRSWShLZXlib2FyZEssIFNFTCksCisgIEhJRF9LRVlCT0FSRF9VU0FHRV9FTlRSWShLZXlib2FyZEwsIFNFTCksCisgIEhJRF9LRVlCT0FSRF9VU0FHRV9FTlRSWShLZXlib2FyZE0sIFNFTCksCisgIEhJRF9LRVlCT0FSRF9VU0FHRV9FTlRSWShLZXlib2FyZE4sIFNFTCksCisgIEhJRF9LRVlCT0FSRF9VU0FHRV9FTlRSWShLZXlib2FyZE8sIFNFTCksCisgIEhJRF9LRVlCT0FSRF9VU0FHRV9FTlRSWShLZXlib2FyZFAsIFNFTCksCisgIEhJRF9LRVlCT0FSRF9VU0FHRV9FTlRSWShLZXlib2FyZFEsIFNFTCksCisgIEhJRF9LRVlCT0FSRF9VU0FHRV9FTlRSWShLZXlib2FyZFIsIFNFTCksCisgIEhJRF9LRVlCT0FSRF9VU0FHRV9FTlRSWShLZXlib2FyZFMsIFNFTCksCisgIEhJRF9LRVlCT0FSRF9VU0FHRV9FTlRSWShLZXlib2FyZFQsIFNFTCksCisgIEhJRF9LRVlCT0FSRF9VU0FHRV9FTlRSWShLZXlib2FyZFUsIFNFTCksCisgIEhJRF9LRVlCT0FSRF9VU0FHRV9FTlRSWShLZXlib2FyZFYsIFNFTCksCisgIEhJRF9LRVlCT0FSRF9VU0FHRV9FTlRSWShLZXlib2FyZFcsIFNFTCksCisgIEhJRF9LRVlCT0FSRF9VU0FHRV9FTlRSWShLZXlib2FyZFgsIFNFTCksCisgIEhJRF9LRVlCT0FSRF9VU0FHRV9FTlRSWShLZXlib2FyZFksIFNFTCksCisgIEhJRF9LRVlCT0FSRF9VU0FHRV9FTlRSWShLZXlib2FyZFosIFNFTCksCisgIEhJRF9LRVlCT0FSRF9VU0FHRV9FTlRSWShLZXlib2FyZDEsIFNFTCksCisgIEhJRF9LRVlCT0FSRF9VU0FHRV9FTlRSWShLZXlib2FyZDIsIFNFTCksCisgIEhJRF9LRVlCT0FSRF9VU0FHRV9FTlRSWShLZXlib2FyZDMsIFNFTCksCisgIEhJRF9LRVlCT0FSRF9VU0FHRV9FTlRSWShLZXlib2FyZDQsIFNFTCksCisgIEhJRF9LRVlCT0FSRF9VU0FHRV9FTlRSWShLZXlib2FyZDUsIFNFTCksCisgIEhJRF9LRVlCT0FSRF9VU0FHRV9FTlRSWShLZXlib2FyZDYsIFNFTCksCisgIEhJRF9LRVlCT0FSRF9VU0FHRV9FTlRSWShLZXlib2FyZDcsIFNFTCksCisgIEhJRF9LRVlCT0FSRF9VU0FHRV9FTlRSWShLZXlib2FyZDgsIFNFTCksCisgIEhJRF9LRVlCT0FSRF9VU0FHRV9FTlRSWShLZXlib2FyZDksIFNFTCksCisgIEhJRF9LRVlCT0FSRF9VU0FHRV9FTlRSWShLZXlib2FyZDAsIFNFTCksCisgIEhJRF9LRVlCT0FSRF9VU0FHRV9FTlRSWShLZXlib2FyZEVudGVyLCBTRUwpLAorICBISURfS0VZQk9BUkRfVVNBR0VfRU5UUlkoS2V5Ym9hcmRFc2NhcGUsIFNFTCksCisgIEhJRF9LRVlCT0FSRF9VU0FHRV9FTlRSWShLZXlib2FyZEJhY2tzcGFjZSwgU0VMKSwKKyAgSElEX0tFWUJPQVJEX1VTQUdFX0VOVFJZKEtleWJvYXJkVGFiLCBTRUwpLAorICBISURfS0VZQk9BUkRfVVNBR0VfRU5UUlkoS2V5Ym9hcmRTcGFjZSwgU0VMKSwKKyAgSElEX0tFWUJPQVJEX1VTQUdFX0VOVFJZKEtleWJvYXJkTWludXMsIFNFTCksCisgIEhJRF9LRVlCT0FSRF9VU0FHRV9FTlRSWShLZXlib2FyZEVxdWFsLCBTRUwpLAorICBISURfS0VZQk9BUkRfVVNBR0VfRU5UUlkoS2V5Ym9hcmRMZWZ0QnJhY2tldCwgU0VMKSwKKyAgSElEX0tFWUJPQVJEX1VTQUdFX0VOVFJZKEtleWJvYXJkUmlnaHRCcmFja2V0LCBTRUwpLAorICBISURfS0VZQk9BUkRfVVNBR0VfRU5UUlkoS2V5Ym9hcmRCYWNrc2xhc2gsIFNFTCksCisgIEhJRF9LRVlCT0FSRF9VU0FHRV9FTlRSWShLZXlib2FyZEV1cm9wZTEsIFNFTCksCisgIEhJRF9LRVlCT0FSRF9VU0FHRV9FTlRSWShLZXlib2FyZFNlbWljb2xvbiwgU0VMKSwKKyAgSElEX0tFWUJPQVJEX1VTQUdFX0VOVFJZKEtleWJvYXJkQXBvc3Ryb3BoZSwgU0VMKSwKKyAgSElEX0tFWUJPQVJEX1VTQUdFX0VOVFJZKEtleWJvYXJkR3JhdmUsIFNFTCksCisgIEhJRF9LRVlCT0FSRF9VU0FHRV9FTlRSWShLZXlib2FyZENvbW1hLCBTRUwpLAorICBISURfS0VZQk9BUkRfVVNBR0VfRU5UUlkoS2V5Ym9hcmRQZXJpb2QsIFNFTCksCisgIEhJRF9LRVlCT0FSRF9VU0FHRV9FTlRSWShLZXlib2FyZFNsYXNoLCBTRUwpLAorICBISURfS0VZQk9BUkRfVVNBR0VfRU5UUlkoS2V5Ym9hcmRDYXBzTG9jaywgU0VMKSwKKyAgSElEX0tFWUJPQVJEX1VTQUdFX0VOVFJZKEtleWJvYXJkRjEsIFNFTCksCisgIEhJRF9LRVlCT0FSRF9VU0FHRV9FTlRSWShLZXlib2FyZEYyLCBTRUwpLAorICBISURfS0VZQk9BUkRfVVNBR0VfRU5UUlkoS2V5Ym9hcmRGMywgU0VMKSwKKyAgSElEX0tFWUJPQVJEX1VTQUdFX0VOVFJZKEtleWJvYXJkRjQsIFNFTCksCisgIEhJRF9LRVlCT0FSRF9VU0FHRV9FTlRSWShLZXlib2FyZEY1LCBTRUwpLAorICBISURfS0VZQk9BUkRfVVNBR0VfRU5UUlkoS2V5Ym9hcmRGNiwgU0VMKSwKKyAgSElEX0tFWUJPQVJEX1VTQUdFX0VOVFJZKEtleWJvYXJkRjcsIFNFTCksCisgIEhJRF9LRVlCT0FSRF9VU0FHRV9FTlRSWShLZXlib2FyZEY4LCBTRUwpLAorICBISURfS0VZQk9BUkRfVVNBR0VfRU5UUlkoS2V5Ym9hcmRGOSwgU0VMKSwKKyAgSElEX0tFWUJPQVJEX1VTQUdFX0VOVFJZKEtleWJvYXJkRjEwLCBTRUwpLAorICBISURfS0VZQk9BUkRfVVNBR0VfRU5UUlkoS2V5Ym9hcmRGMTEsIFNFTCksCisgIEhJRF9LRVlCT0FSRF9VU0FHRV9FTlRSWShLZXlib2FyZEYxMiwgU0VMKSwKKyAgSElEX0tFWUJPQVJEX1VTQUdFX0VOVFJZKEtleWJvYXJkUHJpbnRTY3JlZW4sIFNFTCksCisgIEhJRF9LRVlCT0FSRF9VU0FHRV9FTlRSWShLZXlib2FyZFNjcm9sbExvY2ssIFNFTCksCisgIEhJRF9LRVlCT0FSRF9VU0FHRV9FTlRSWShLZXlib2FyZFBhdXNlLCBTRUwpLAorICBISURfS0VZQk9BUkRfVVNBR0VfRU5UUlkoS2V5Ym9hcmRJbnNlcnQsIFNFTCksCisgIEhJRF9LRVlCT0FSRF9VU0FHRV9FTlRSWShLZXlib2FyZEhvbWUsIFNFTCksCisgIEhJRF9LRVlCT0FSRF9VU0FHRV9FTlRSWShLZXlib2FyZFBhZ2VVcCwgU0VMKSwKKyAgSElEX0tFWUJPQVJEX1VTQUdFX0VOVFJZKEtleWJvYXJkRGVsZXRlLCBTRUwpLAorICBISURfS0VZQk9BUkRfVVNBR0VfRU5UUlkoS2V5Ym9hcmRFbmQsIFNFTCksCisgIEhJRF9LRVlCT0FSRF9VU0FHRV9FTlRSWShLZXlib2FyZFBhZ2VEb3duLCBTRUwpLAorICBISURfS0VZQk9BUkRfVVNBR0VfRU5UUlkoS2V5Ym9hcmRSaWdodEFycm93LCBTRUwpLAorICBISURfS0VZQk9BUkRfVVNBR0VfRU5UUlkoS2V5Ym9hcmRMZWZ0QXJyb3csIFNFTCksCisgIEhJRF9LRVlCT0FSRF9VU0FHRV9FTlRSWShLZXlib2FyZERvd25BcnJvdywgU0VMKSwKKyAgSElEX0tFWUJPQVJEX1VTQUdFX0VOVFJZKEtleWJvYXJkVXBBcnJvdywgU0VMKSwKKyAgSElEX0tFWUJPQVJEX1VTQUdFX0VOVFJZKEtleXBhZE51bUxvY2ssIFNFTCksCisgIEhJRF9LRVlCT0FSRF9VU0FHRV9FTlRSWShLZXlwYWRTbGFzaCwgU0VMKSwKKyAgSElEX0tFWUJPQVJEX1VTQUdFX0VOVFJZKEtleXBhZEFzdGVyaXNrLCBTRUwpLAorICBISURfS0VZQk9BUkRfVVNBR0VfRU5UUlkoS2V5cGFkTWludXMsIFNFTCksCisgIEhJRF9LRVlCT0FSRF9VU0FHRV9FTlRSWShLZXlwYWRQbHVzLCBTRUwpLAorICBISURfS0VZQk9BUkRfVVNBR0VfRU5UUlkoS2V5cGFkRW50ZXIsIFNFTCksCisgIEhJRF9LRVlCT0FSRF9VU0FHRV9FTlRSWShLZXlwYWQxLCBTRUwpLAorICBISURfS0VZQk9BUkRfVVNBR0VfRU5UUlkoS2V5cGFkMiwgU0VMKSwKKyAgSElEX0tFWUJPQVJEX1VTQUdFX0VOVFJZKEtleXBhZDMsIFNFTCksCisgIEhJRF9LRVlCT0FSRF9VU0FHRV9FTlRSWShLZXlwYWQ0LCBTRUwpLAorICBISURfS0VZQk9BUkRfVVNBR0VfRU5UUlkoS2V5cGFkNSwgU0VMKSwKKyAgSElEX0tFWUJPQVJEX1VTQUdFX0VOVFJZKEtleXBhZDYsIFNFTCksCisgIEhJRF9LRVlCT0FSRF9VU0FHRV9FTlRSWShLZXlwYWQ3LCBTRUwpLAorICBISURfS0VZQk9BUkRfVVNBR0VfRU5UUlkoS2V5cGFkOCwgU0VMKSwKKyAgSElEX0tFWUJPQVJEX1VTQUdFX0VOVFJZKEtleXBhZDksIFNFTCksCisgIEhJRF9LRVlCT0FSRF9VU0FHRV9FTlRSWShLZXlwYWQwLCBTRUwpLAorICBISURfS0VZQk9BUkRfVVNBR0VfRU5UUlkoS2V5cGFkUGVyaW9kLCBTRUwpLAorICBISURfS0VZQk9BUkRfVVNBR0VfRU5UUlkoS2V5Ym9hcmRFdXJvcGUyLCBTRUwpLAorICBISURfS0VZQk9BUkRfVVNBR0VfRU5UUlkoS2V5Ym9hcmRBcHBsaWNhdGlvbiwgU0VMKSwKKyAgSElEX0tFWUJPQVJEX1VTQUdFX0VOVFJZKEtleWJvYXJkUG93ZXIsIFNFTCksCisgIEhJRF9LRVlCT0FSRF9VU0FHRV9FTlRSWShLZXlwYWRFcXVhbCwgU0VMKSwKKyAgSElEX0tFWUJPQVJEX1VTQUdFX0VOVFJZKEtleWJvYXJkRjEzLCBTRUwpLAorICBISURfS0VZQk9BUkRfVVNBR0VfRU5UUlkoS2V5Ym9hcmRGMTQsIFNFTCksCisgIEhJRF9LRVlCT0FSRF9VU0FHRV9FTlRSWShLZXlib2FyZEYxNSwgU0VMKSwKKyAgSElEX0tFWUJPQVJEX1VTQUdFX0VOVFJZKEtleWJvYXJkRjE2LCBTRUwpLAorICBISURfS0VZQk9BUkRfVVNBR0VfRU5UUlkoS2V5Ym9hcmRGMTcsIFNFTCksCisgIEhJRF9LRVlCT0FSRF9VU0FHRV9FTlRSWShLZXlib2FyZEYxOCwgU0VMKSwKKyAgSElEX0tFWUJPQVJEX1VTQUdFX0VOVFJZKEtleWJvYXJkRjE5LCBTRUwpLAorICBISURfS0VZQk9BUkRfVVNBR0VfRU5UUlkoS2V5Ym9hcmRGMjAsIFNFTCksCisgIEhJRF9LRVlCT0FSRF9VU0FHRV9FTlRSWShLZXlib2FyZEYyMSwgU0VMKSwKKyAgSElEX0tFWUJPQVJEX1VTQUdFX0VOVFJZKEtleWJvYXJkRjIyLCBTRUwpLAorICBISURfS0VZQk9BUkRfVVNBR0VfRU5UUlkoS2V5Ym9hcmRGMjMsIFNFTCksCisgIEhJRF9LRVlCT0FSRF9VU0FHRV9FTlRSWShLZXlib2FyZEYyNCwgU0VMKSwKKyAgSElEX0tFWUJPQVJEX1VTQUdFX0VOVFJZKEtleWJvYXJkRXhlY3V0ZSwgU0VMKSwKKyAgSElEX0tFWUJPQVJEX1VTQUdFX0VOVFJZKEtleWJvYXJkSGVscCwgU0VMKSwKKyAgSElEX0tFWUJPQVJEX1VTQUdFX0VOVFJZKEtleWJvYXJkTWVudSwgU0VMKSwKKyAgSElEX0tFWUJPQVJEX1VTQUdFX0VOVFJZKEtleWJvYXJkU2VsZWN0LCBTRUwpLAorICBISURfS0VZQk9BUkRfVVNBR0VfRU5UUlkoS2V5Ym9hcmRTdG9wLCBTRUwpLAorICBISURfS0VZQk9BUkRfVVNBR0VfRU5UUlkoS2V5Ym9hcmRBZ2FpbiwgU0VMKSwKKyAgSElEX0tFWUJPQVJEX1VTQUdFX0VOVFJZKEtleWJvYXJkVW5kbywgU0VMKSwKKyAgSElEX0tFWUJPQVJEX1VTQUdFX0VOVFJZKEtleWJvYXJkQ3V0LCBTRUwpLAorICBISURfS0VZQk9BUkRfVVNBR0VfRU5UUlkoS2V5Ym9hcmRDb3B5LCBTRUwpLAorICBISURfS0VZQk9BUkRfVVNBR0VfRU5UUlkoS2V5Ym9hcmRQYXN0ZSwgU0VMKSwKKyAgSElEX0tFWUJPQVJEX1VTQUdFX0VOVFJZKEtleWJvYXJkRmluZCwgU0VMKSwKKyAgSElEX0tFWUJPQVJEX1VTQUdFX0VOVFJZKEtleWJvYXJkTXV0ZSwgU0VMKSwKKyAgSElEX0tFWUJPQVJEX1VTQUdFX0VOVFJZKEtleWJvYXJkVm9sdW1lVXAsIFNFTCksCisgIEhJRF9LRVlCT0FSRF9VU0FHRV9FTlRSWShLZXlib2FyZFZvbHVtZURvd24sIFNFTCksCisgIEhJRF9LRVlCT0FSRF9VU0FHRV9FTlRSWShLZXlib2FyZExvY2tpbmdDYXBzTG9jaywgU0VMKSwKKyAgSElEX0tFWUJPQVJEX1VTQUdFX0VOVFJZKEtleWJvYXJkTG9ja2luZ051bUxvY2ssIFNFTCksCisgIEhJRF9LRVlCT0FSRF9VU0FHRV9FTlRSWShLZXlib2FyZExvY2tpbmdTY3JvbGxMb2NrLCBTRUwpLAorICBISURfS0VZQk9BUkRfVVNBR0VfRU5UUlkoS2V5cGFkQ29tbWEsIFNFTCksCisgIEhJRF9LRVlCT0FSRF9VU0FHRV9FTlRSWShLZXlwYWRFcXVhbFNpZ24sIFNFTCksCisgIEhJRF9LRVlCT0FSRF9VU0FHRV9FTlRSWShLZXlib2FyZEludGVybmF0aW9uYWwxLCBTRUwpLAorICBISURfS0VZQk9BUkRfVVNBR0VfRU5UUlkoS2V5Ym9hcmRJbnRlcm5hdGlvbmFsMiwgU0VMKSwKKyAgSElEX0tFWUJPQVJEX1VTQUdFX0VOVFJZKEtleWJvYXJkSW50ZXJuYXRpb25hbDMsIFNFTCksCisgIEhJRF9LRVlCT0FSRF9VU0FHRV9FTlRSWShLZXlib2FyZEludGVybmF0aW9uYWw0LCBTRUwpLAorICBISURfS0VZQk9BUkRfVVNBR0VfRU5UUlkoS2V5Ym9hcmRJbnRlcm5hdGlvbmFsNSwgU0VMKSwKKyAgSElEX0tFWUJPQVJEX1VTQUdFX0VOVFJZKEtleWJvYXJkSW50ZXJuYXRpb25hbDYsIFNFTCksCisgIEhJRF9LRVlCT0FSRF9VU0FHRV9FTlRSWShLZXlib2FyZEludGVybmF0aW9uYWw3LCBTRUwpLAorICBISURfS0VZQk9BUkRfVVNBR0VfRU5UUlkoS2V5Ym9hcmRJbnRlcm5hdGlvbmFsOCwgU0VMKSwKKyAgSElEX0tFWUJPQVJEX1VTQUdFX0VOVFJZKEtleWJvYXJkSW50ZXJuYXRpb25hbDksIFNFTCksCisgIEhJRF9LRVlCT0FSRF9VU0FHRV9FTlRSWShLZXlib2FyZExhbmd1YWdlMSwgU0VMKSwKKyAgSElEX0tFWUJPQVJEX1VTQUdFX0VOVFJZKEtleWJvYXJkTGFuZ3VhZ2UyLCBTRUwpLAorICBISURfS0VZQk9BUkRfVVNBR0VfRU5UUlkoS2V5Ym9hcmRMYW5ndWFnZTMsIFNFTCksCisgIEhJRF9LRVlCT0FSRF9VU0FHRV9FTlRSWShLZXlib2FyZExhbmd1YWdlNCwgU0VMKSwKKyAgSElEX0tFWUJPQVJEX1VTQUdFX0VOVFJZKEtleWJvYXJkTGFuZ3VhZ2U1LCBTRUwpLAorICBISURfS0VZQk9BUkRfVVNBR0VfRU5UUlkoS2V5Ym9hcmRMYW5ndWFnZTYsIFNFTCksCisgIEhJRF9LRVlCT0FSRF9VU0FHRV9FTlRSWShLZXlib2FyZExhbmd1YWdlNywgU0VMKSwKKyAgSElEX0tFWUJPQVJEX1VTQUdFX0VOVFJZKEtleWJvYXJkTGFuZ3VhZ2U4LCBTRUwpLAorICBISURfS0VZQk9BUkRfVVNBR0VfRU5UUlkoS2V5Ym9hcmRMYW5ndWFnZTksIFNFTCksCisgIEhJRF9LRVlCT0FSRF9VU0FHRV9FTlRSWShLZXlib2FyZEFsdGVybmF0ZUVyYXNlLCBTRUwpLAorICBISURfS0VZQk9BUkRfVVNBR0VfRU5UUlkoS2V5Ym9hcmRTeXN0ZW1SZXF1ZXN0LCBTRUwpLAorICBISURfS0VZQk9BUkRfVVNBR0VfRU5UUlkoS2V5Ym9hcmRDYW5jZWwsIFNFTCksCisgIEhJRF9LRVlCT0FSRF9VU0FHRV9FTlRSWShLZXlib2FyZENsZWFyLCBTRUwpLAorICBISURfS0VZQk9BUkRfVVNBR0VfRU5UUlkoS2V5Ym9hcmRQcmlvciwgU0VMKSwKKyAgSElEX0tFWUJPQVJEX1VTQUdFX0VOVFJZKEtleWJvYXJkUmV0dXJuLCBTRUwpLAorICBISURfS0VZQk9BUkRfVVNBR0VfRU5UUlkoS2V5Ym9hcmRTZXBhcmF0b3IsIFNFTCksCisgIEhJRF9LRVlCT0FSRF9VU0FHRV9FTlRSWShLZXlib2FyZE91dCwgU0VMKSwKKyAgSElEX0tFWUJPQVJEX1VTQUdFX0VOVFJZKEtleWJvYXJkT3BlciwgU0VMKSwKKyAgSElEX0tFWUJPQVJEX1VTQUdFX0VOVFJZKEtleWJvYXJkQ2xlYXJBZ2FpbiwgU0VMKSwKKyAgSElEX0tFWUJPQVJEX1VTQUdFX0VOVFJZKEtleWJvYXJkQ3JTZWwsIFNFTCksCisgIEhJRF9LRVlCT0FSRF9VU0FHRV9FTlRSWShLZXlib2FyZEV4U2VsLCBTRUwpLAorICBISURfS0VZQk9BUkRfVVNBR0VfRU5UUlkoS2V5cGFkMDAsIFNFTCksCisgIEhJRF9LRVlCT0FSRF9VU0FHRV9FTlRSWShLZXlwYWQwMDAsIFNFTCksCisgIEhJRF9LRVlCT0FSRF9VU0FHRV9FTlRSWShUaG91c2FuZHNTZXBhcmF0b3IsIFNFTCksCisgIEhJRF9LRVlCT0FSRF9VU0FHRV9FTlRSWShEZWNpbWFsU2VwYXJhdG9yLCBTRUwpLAorICBISURfS0VZQk9BUkRfVVNBR0VfRU5UUlkoQ3VycmVuY3lVbml0LCBTRUwpLAorICBISURfS0VZQk9BUkRfVVNBR0VfRU5UUlkoQ3VycmVuY3lTdWJ1bml0LCBTRUwpLAorICBISURfS0VZQk9BUkRfVVNBR0VfRU5UUlkoS2V5cGFkTGVmdFBhcmVudGhlc2lzLCBTRUwpLAorICBISURfS0VZQk9BUkRfVVNBR0VfRU5UUlkoS2V5cGFkUmlnaHRQYXJlbnRoZXNpcywgU0VMKSwKKyAgSElEX0tFWUJPQVJEX1VTQUdFX0VOVFJZKEtleXBhZExlZnRCcmFjZSwgU0VMKSwKKyAgSElEX0tFWUJPQVJEX1VTQUdFX0VOVFJZKEtleXBhZFJpZ2h0QnJhY2UsIFNFTCksCisgIEhJRF9LRVlCT0FSRF9VU0FHRV9FTlRSWShLZXlwYWRUYWIsIFNFTCksCisgIEhJRF9LRVlCT0FSRF9VU0FHRV9FTlRSWShLZXlwYWRCYWNrc3BhY2UsIFNFTCksCisgIEhJRF9LRVlCT0FSRF9VU0FHRV9FTlRSWShLZXlwYWRBLCBTRUwpLAorICBISURfS0VZQk9BUkRfVVNBR0VfRU5UUlkoS2V5cGFkQiwgU0VMKSwKKyAgSElEX0tFWUJPQVJEX1VTQUdFX0VOVFJZKEtleXBhZEMsIFNFTCksCisgIEhJRF9LRVlCT0FSRF9VU0FHRV9FTlRSWShLZXlwYWRELCBTRUwpLAorICBISURfS0VZQk9BUkRfVVNBR0VfRU5UUlkoS2V5cGFkRSwgU0VMKSwKKyAgSElEX0tFWUJPQVJEX1VTQUdFX0VOVFJZKEtleXBhZEYsIFNFTCksCisgIEhJRF9LRVlCT0FSRF9VU0FHRV9FTlRSWShLZXlwYWRCaXR3aXNlWE9SLCBTRUwpLAorICBISURfS0VZQk9BUkRfVVNBR0VfRU5UUlkoS2V5cGFkRXhwb25lbnRpYXRlLCBTRUwpLAorICBISURfS0VZQk9BUkRfVVNBR0VfRU5UUlkoS2V5cGFkTW9kdWxvLCBTRUwpLAorICBISURfS0VZQk9BUkRfVVNBR0VfRU5UUlkoS2V5cGFkTGVzcywgU0VMKSwKKyAgSElEX0tFWUJPQVJEX1VTQUdFX0VOVFJZKEtleXBhZEdyZWF0ZXIsIFNFTCksCisgIEhJRF9LRVlCT0FSRF9VU0FHRV9FTlRSWShLZXlwYWRCaXR3aXNlQU5ELCBTRUwpLAorICBISURfS0VZQk9BUkRfVVNBR0VfRU5UUlkoS2V5cGFkQm9vbGVhbkFORCwgU0VMKSwKKyAgSElEX0tFWUJPQVJEX1VTQUdFX0VOVFJZKEtleXBhZEJpdHdpc2VPUiwgU0VMKSwKKyAgSElEX0tFWUJPQVJEX1VTQUdFX0VOVFJZKEtleXBhZEJvb2xlYW5PUiwgU0VMKSwKKyAgSElEX0tFWUJPQVJEX1VTQUdFX0VOVFJZKEtleXBhZENvbG9uLCBTRUwpLAorICBISURfS0VZQk9BUkRfVVNBR0VfRU5UUlkoS2V5cGFkTnVtYmVyLCBTRUwpLAorICBISURfS0VZQk9BUkRfVVNBR0VfRU5UUlkoS2V5cGFkU3BhY2UsIFNFTCksCisgIEhJRF9LRVlCT0FSRF9VU0FHRV9FTlRSWShLZXlwYWRBdCwgU0VMKSwKKyAgSElEX0tFWUJPQVJEX1VTQUdFX0VOVFJZKEtleXBhZEJvbGVhbk5PVCwgU0VMKSwKKyAgSElEX0tFWUJPQVJEX1VTQUdFX0VOVFJZKEtleXBhZE1lbW9yeVN0b3JlLCBTRUwpLAorICBISURfS0VZQk9BUkRfVVNBR0VfRU5UUlkoS2V5cGFkTWVtb3J5UmVjYWxsLCBTRUwpLAorICBISURfS0VZQk9BUkRfVVNBR0VfRU5UUlkoS2V5cGFkTWVtb3J5Q2xlYXIsIFNFTCksCisgIEhJRF9LRVlCT0FSRF9VU0FHRV9FTlRSWShLZXlwYWRNZW1vcnlBZGQsIFNFTCksCisgIEhJRF9LRVlCT0FSRF9VU0FHRV9FTlRSWShLZXlwYWRNZW1vcnlTdWJ0cmFjdCwgU0VMKSwKKyAgSElEX0tFWUJPQVJEX1VTQUdFX0VOVFJZKEtleXBhZE1lbW9yeU11bHRpcGx5LCBTRUwpLAorICBISURfS0VZQk9BUkRfVVNBR0VfRU5UUlkoS2V5cGFkTWVtb3J5RGl2aWRlLCBTRUwpLAorICBISURfS0VZQk9BUkRfVVNBR0VfRU5UUlkoS2V5cGFkUGx1c01pbnVzLCBTRUwpLAorICBISURfS0VZQk9BUkRfVVNBR0VfRU5UUlkoS2V5cGFkQ2xlYXIsIFNFTCksCisgIEhJRF9LRVlCT0FSRF9VU0FHRV9FTlRSWShLZXlwYWRDbGVhckVudHJ5LCBTRUwpLAorICBISURfS0VZQk9BUkRfVVNBR0VfRU5UUlkoS2V5cGFkQmluYXJ5LCBTRUwpLAorICBISURfS0VZQk9BUkRfVVNBR0VfRU5UUlkoS2V5cGFkT2N0YWwsIFNFTCksCisgIEhJRF9LRVlCT0FSRF9VU0FHRV9FTlRSWShLZXlwYWREZWNpbWFsLCBTRUwpLAorICBISURfS0VZQk9BUkRfVVNBR0VfRU5UUlkoS2V5cGFkSGV4YWRlY2ltYWwsIFNFTCksCisgIEhJRF9LRVlCT0FSRF9VU0FHRV9FTlRSWShLZXlib2FyZExlZnRDb250cm9sLCBERiksCisgIEhJRF9LRVlCT0FSRF9VU0FHRV9FTlRSWShLZXlib2FyZExlZnRTaGlmdCwgREYpLAorICBISURfS0VZQk9BUkRfVVNBR0VfRU5UUlkoS2V5Ym9hcmRMZWZ0QWx0LCBERiksCisgIEhJRF9LRVlCT0FSRF9VU0FHRV9FTlRSWShLZXlib2FyZExlZnRHVUksIERGKSwKKyAgSElEX0tFWUJPQVJEX1VTQUdFX0VOVFJZKEtleWJvYXJkUmlnaHRDb250cm9sLCBERiksCisgIEhJRF9LRVlCT0FSRF9VU0FHRV9FTlRSWShLZXlib2FyZFJpZ2h0U2hpZnQsIERGKSwKKyAgSElEX0tFWUJPQVJEX1VTQUdFX0VOVFJZKEtleWJvYXJkUmlnaHRBbHQsIERGKSwKKyAgSElEX0tFWUJPQVJEX1VTQUdFX0VOVFJZKEtleWJvYXJkUmlnaHRHVUksIERGKSwKK0hJRF9FTkRfVEFCTEUoS2V5Ym9hcmRVc2FnZSkKKworI2RlZmluZSBISURfTEVEU19VU0FHRV9FTlRSWShuYW1lLCB0eXBlKSBISURfVVNBR0VfRU5UUlkoSElEX1VTR19MRUQsIG5hbWUsIHR5cGUpCitISURfQkVHSU5fVEFCTEUoTEVEc1VzYWdlKQorICBISURfTEVEU19VU0FHRV9FTlRSWShOdW1Mb2NrLCBPT0MpLAorICBISURfTEVEU19VU0FHRV9FTlRSWShDYXBzTG9jaywgT09DKSwKKyAgSElEX0xFRFNfVVNBR0VfRU5UUlkoU2Nyb2xsTG9jaywgT09DKSwKKyAgSElEX0xFRFNfVVNBR0VfRU5UUlkoQ29tcG9zZSwgT09DKSwKKyAgSElEX0xFRFNfVVNBR0VfRU5UUlkoS2FuYSwgT09DKSwKKyAgSElEX0xFRFNfVVNBR0VfRU5UUlkoUG93ZXIsIE9PQyksCisgIEhJRF9MRURTX1VTQUdFX0VOVFJZKFNoaWZ0LCBPT0MpLAorICBISURfTEVEU19VU0FHRV9FTlRSWShEb05vdERpc3R1cmIsIE9PQyksCisgIEhJRF9MRURTX1VTQUdFX0VOVFJZKE11dGUsIE9PQyksCisgIEhJRF9MRURTX1VTQUdFX0VOVFJZKFRvbmVFbmFibGUsIE9PQyksCisgIEhJRF9MRURTX1VTQUdFX0VOVFJZKEhpZ2hDdXRGaWx0ZXIsIE9PQyksCisgIEhJRF9MRURTX1VTQUdFX0VOVFJZKExvd0N1dEZpbHRlciwgT09DKSwKKyAgSElEX0xFRFNfVVNBR0VfRU5UUlkoRXF1YWxpemVyRW5hYmxlLCBPT0MpLAorICBISURfTEVEU19VU0FHRV9FTlRSWShTb3VuZEZpZWxkT24sIE9PQyksCisgIEhJRF9MRURTX1VTQUdFX0VOVFJZKFN1cnJvdW5kT24sIE9PQyksCisgIEhJRF9MRURTX1VTQUdFX0VOVFJZKFJlcGVhdCwgT09DKSwKKyAgSElEX0xFRFNfVVNBR0VfRU5UUlkoU3RlcmVvLCBPT0MpLAorICBISURfTEVEU19VU0FHRV9FTlRSWShTYW1wbGluZ1JhdGVEZXRlY3QsIE9PQyksCisgIEhJRF9MRURTX1VTQUdFX0VOVFJZKFNwaW5uaW5nLCBPT0MpLAorICBISURfTEVEU19VU0FHRV9FTlRSWShDQVYsIE9PQyksCisgIEhJRF9MRURTX1VTQUdFX0VOVFJZKENMViwgT09DKSwKKyAgSElEX0xFRFNfVVNBR0VfRU5UUlkoUmVjb3JkaW5nRm9ybWF0RGV0ZWN0LCBPT0MpLAorICBISURfTEVEU19VU0FHRV9FTlRSWShPZmZIb29rLCBPT0MpLAorICBISURfTEVEU19VU0FHRV9FTlRSWShSaW5nLCBPT0MpLAorICBISURfTEVEU19VU0FHRV9FTlRSWShNZXNzYWdlV2FpdGluZywgT09DKSwKKyAgSElEX0xFRFNfVVNBR0VfRU5UUlkoRGF0YU1vZGUsIE9PQyksCisgIEhJRF9MRURTX1VTQUdFX0VOVFJZKEJhdHRlcnlPcGVyYXRpb24sIE9PQyksCisgIEhJRF9MRURTX1VTQUdFX0VOVFJZKEJhdHRlcnlPSywgT09DKSwKKyAgSElEX0xFRFNfVVNBR0VfRU5UUlkoQmF0dGVyeUxvdywgT09DKSwKKyAgSElEX0xFRFNfVVNBR0VfRU5UUlkoU3BlYWtlciwgT09DKSwKKyAgSElEX0xFRFNfVVNBR0VfRU5UUlkoSGVhZFNldCwgT09DKSwKKyAgSElEX0xFRFNfVVNBR0VfRU5UUlkoSG9sZCwgT09DKSwKKyAgSElEX0xFRFNfVVNBR0VfRU5UUlkoTWljcm9waG9uZSwgT09DKSwKKyAgSElEX0xFRFNfVVNBR0VfRU5UUlkoQ292ZXJhZ2UsIE9PQyksCisgIEhJRF9MRURTX1VTQUdFX0VOVFJZKE5pZ2h0TW9kZSwgT09DKSwKKyAgSElEX0xFRFNfVVNBR0VfRU5UUlkoU2VuZENhbGxzLCBPT0MpLAorICBISURfTEVEU19VU0FHRV9FTlRSWShDYWxsUGlja3VwLCBPT0MpLAorICBISURfTEVEU19VU0FHRV9FTlRSWShDb25mZXJlbmNlLCBPT0MpLAorICBISURfTEVEU19VU0FHRV9FTlRSWShTdGFuZEJ5LCBPT0MpLAorICBISURfTEVEU19VU0FHRV9FTlRSWShDYW1lcmFPbiwgT09DKSwKKyAgSElEX0xFRFNfVVNBR0VfRU5UUlkoQ2FtZXJhT2ZmLCBPT0MpLAorICBISURfTEVEU19VU0FHRV9FTlRSWShPbkxpbmUsIE9PQyksCisgIEhJRF9MRURTX1VTQUdFX0VOVFJZKE9mZkxpbmUsIE9PQyksCisgIEhJRF9MRURTX1VTQUdFX0VOVFJZKEJ1c3ksIE9PQyksCisgIEhJRF9MRURTX1VTQUdFX0VOVFJZKFJlYWR5LCBPT0MpLAorICBISURfTEVEU19VU0FHRV9FTlRSWShQYXBlck91dCwgT09DKSwKKyAgSElEX0xFRFNfVVNBR0VfRU5UUlkoUGFwZXJKYW0sIE9PQyksCisgIEhJRF9MRURTX1VTQUdFX0VOVFJZKFJlbW90ZSwgT09DKSwKKyAgSElEX0xFRFNfVVNBR0VfRU5UUlkoRm9yd2FyZCwgT09DKSwKKyAgSElEX0xFRFNfVVNBR0VfRU5UUlkoUmV2ZXJzZSwgT09DKSwKKyAgSElEX0xFRFNfVVNBR0VfRU5UUlkoU3RvcCwgT09DKSwKKyAgSElEX0xFRFNfVVNBR0VfRU5UUlkoUmV3aW5kLCBPT0MpLAorICBISURfTEVEU19VU0FHRV9FTlRSWShGYXN0Rm9yd2FyZCwgT09DKSwKKyAgSElEX0xFRFNfVVNBR0VfRU5UUlkoUGxheSwgT09DKSwKKyAgSElEX0xFRFNfVVNBR0VfRU5UUlkoUGF1c2UsIE9PQyksCisgIEhJRF9MRURTX1VTQUdFX0VOVFJZKFJlY29yZCwgT09DKSwKKyAgSElEX0xFRFNfVVNBR0VfRU5UUlkoRXJyb3IsIE9PQyksCisgIEhJRF9MRURTX1VTQUdFX0VOVFJZKFVzYWdlU2VsZWN0ZWRJbmRpY2F0b3IsIFVTKSwKKyAgSElEX0xFRFNfVVNBR0VfRU5UUlkoVXNhZ2VJblVzZUluZGljYXRvciwgVVMpLAorICBISURfTEVEU19VU0FHRV9FTlRSWShVc2FnZU11bHRpTW9kZUluZGljYXRvciwgVU0pLAorICBISURfTEVEU19VU0FHRV9FTlRSWShJbmRpY2F0b3JPbiwgU0VMKSwKKyAgSElEX0xFRFNfVVNBR0VfRU5UUlkoSW5kaWNhdG9yRmxhc2gsIFNFTCksCisgIEhJRF9MRURTX1VTQUdFX0VOVFJZKEluZGljYXRvclNsb3dCbGluaywgU0VMKSwKKyAgSElEX0xFRFNfVVNBR0VfRU5UUlkoSW5kaWNhdG9yRmFzdEJsaW5rLCBTRUwpLAorICBISURfTEVEU19VU0FHRV9FTlRSWShJbmRpY2F0b3JPZmYsIFNFTCksCisgIEhJRF9MRURTX1VTQUdFX0VOVFJZKEZsYXNoT25UaW1lLCBEViksCisgIEhJRF9MRURTX1VTQUdFX0VOVFJZKFNsb3dCbGlua09uVGltZSwgRFYpLAorICBISURfTEVEU19VU0FHRV9FTlRSWShTbG93QmxpbmtPZmZUaW1lLCBEViksCisgIEhJRF9MRURTX1VTQUdFX0VOVFJZKEZhc3RCbGlua09uVGltZSwgRFYpLAorICBISURfTEVEU19VU0FHRV9FTlRSWShGYXN0QmxpbmtPZmZUaW1lLCBEViksCisgIEhJRF9MRURTX1VTQUdFX0VOVFJZKFVzYWdlSW5kaWNhdG9yQ29sb3IsIFVNKSwKKyAgSElEX0xFRFNfVVNBR0VfRU5UUlkoSW5kaWNhdG9yUmVkLCBTRUwpLAorICBISURfTEVEU19VU0FHRV9FTlRSWShJbmRpY2F0b3JHcmVlbiwgU0VMKSwKKyAgSElEX0xFRFNfVVNBR0VfRU5UUlkoSW5kaWNhdG9yQW1iZXIsIFNFTCksCisgIEhJRF9MRURTX1VTQUdFX0VOVFJZKEdlbmVyaWNJbmRpY2F0b3IsIE9PQyksCisgIEhJRF9MRURTX1VTQUdFX0VOVFJZKFN5c3RlbVN1c3BlbmQsIE9PQyksCisgIEhJRF9MRURTX1VTQUdFX0VOVFJZKEV4dGVybmFsUG93ZXJDb25uZWN0ZWQsIE9PQyksCitISURfRU5EX1RBQkxFKExFRHNVc2FnZSkKKworI2RlZmluZSBISURfQlJBSUxMRV9VU0FHRV9FTlRSWShuYW1lLCB0eXBlKSBISURfVVNBR0VfRU5UUlkoSElEX1VTR19CUkwsIG5hbWUsIHR5cGUpCitISURfQkVHSU5fVEFCTEUoQnJhaWxsZVVzYWdlKQorICBISURfQlJBSUxMRV9VU0FHRV9FTlRSWShCcmFpbGxlRGlzcGxheSwgQ0EpLAorICBISURfQlJBSUxMRV9VU0FHRV9FTlRSWShCcmFpbGxlUm93LCBOQVJZKSwKKyAgSElEX0JSQUlMTEVfVVNBR0VfRU5UUlkoOERvdENlbGwsIERWKSwKKyAgSElEX0JSQUlMTEVfVVNBR0VfRU5UUlkoNkRvdENlbGwsIERWKSwKKyAgSElEX0JSQUlMTEVfVVNBR0VfRU5UUlkoQ2VsbENvdW50LCBEViksCisgIEhJRF9CUkFJTExFX1VTQUdFX0VOVFJZKFNjcmVlblJlYWRlckNvbnRyb2wsIE5BUlkpLAorICBISURfQlJBSUxMRV9VU0FHRV9FTlRSWShTY3JlZW5SZWFkZXJJZGVudGlmaWVyLCBEViksCisgIEhJRF9CUkFJTExFX1VTQUdFX0VOVFJZKFJvdXRlclNldDEsIE5BUlkpLAorICBISURfQlJBSUxMRV9VU0FHRV9FTlRSWShSb3V0ZXJTZXQyLCBOQVJZKSwKKyAgSElEX0JSQUlMTEVfVVNBR0VfRU5UUlkoUm91dGVyU2V0MywgTkFSWSksCisgIEhJRF9CUkFJTExFX1VTQUdFX0VOVFJZKFJvdXRlcktleSwgU0VMKSwKKyAgSElEX0JSQUlMTEVfVVNBR0VfRU5UUlkoUm93Um91dGVyS2V5LCBTRUwpLAorICBISURfQlJBSUxMRV9VU0FHRV9FTlRSWShCcmFpbGxlQnV0dG9ucywgTkFSWSksCisgIEhJRF9CUkFJTExFX1VTQUdFX0VOVFJZKEtleWJvYXJkRG90MSwgU0VMKSwKKyAgSElEX0JSQUlMTEVfVVNBR0VfRU5UUlkoS2V5Ym9hcmREb3QyLCBTRUwpLAorICBISURfQlJBSUxMRV9VU0FHRV9FTlRSWShLZXlib2FyZERvdDMsIFNFTCksCisgIEhJRF9CUkFJTExFX1VTQUdFX0VOVFJZKEtleWJvYXJkRG90NCwgU0VMKSwKKyAgSElEX0JSQUlMTEVfVVNBR0VfRU5UUlkoS2V5Ym9hcmREb3Q1LCBTRUwpLAorICBISURfQlJBSUxMRV9VU0FHRV9FTlRSWShLZXlib2FyZERvdDYsIFNFTCksCisgIEhJRF9CUkFJTExFX1VTQUdFX0VOVFJZKEtleWJvYXJkRG90NywgU0VMKSwKKyAgSElEX0JSQUlMTEVfVVNBR0VfRU5UUlkoS2V5Ym9hcmREb3Q4LCBTRUwpLAorICBISURfQlJBSUxMRV9VU0FHRV9FTlRSWShLZXlib2FyZFNwYWNlLCBTRUwpLAorICBISURfQlJBSUxMRV9VU0FHRV9FTlRSWShLZXlib2FyZExlZnRTcGFjZSwgU0VMKSwKKyAgSElEX0JSQUlMTEVfVVNBR0VfRU5UUlkoS2V5Ym9hcmRSaWdodFNwYWNlLCBTRUwpLAorICBISURfQlJBSUxMRV9VU0FHRV9FTlRSWShGcm9udENvbnRyb2xzLCBOQVJZKSwKKyAgSElEX0JSQUlMTEVfVVNBR0VfRU5UUlkoTGVmdENvbnRyb2xzLCBOQVJZKSwKKyAgSElEX0JSQUlMTEVfVVNBR0VfRU5UUlkoUmlnaHRDb250cm9scywgTkFSWSksCisgIEhJRF9CUkFJTExFX1VTQUdFX0VOVFJZKFRvcENvbnRyb2xzLCBOQVJZKSwKKyAgSElEX0JSQUlMTEVfVVNBR0VfRU5UUlkoSm95c3RpY2tDZW50ZXIsIFNFTCksCisgIEhJRF9CUkFJTExFX1VTQUdFX0VOVFJZKEpveXN0aWNrVXAsIFNFTCksCisgIEhJRF9CUkFJTExFX1VTQUdFX0VOVFJZKEpveXN0aWNrRG93biwgU0VMKSwKKyAgSElEX0JSQUlMTEVfVVNBR0VfRU5UUlkoSm95c3RpY2tMZWZ0LCBTRUwpLAorICBISURfQlJBSUxMRV9VU0FHRV9FTlRSWShKb3lzdGlja1JpZ2h0LCBTRUwpLAorICBISURfQlJBSUxMRV9VU0FHRV9FTlRSWShEUGFkQ2VudGVyLCBTRUwpLAorICBISURfQlJBSUxMRV9VU0FHRV9FTlRSWShEUGFkVXAsIFNFTCksCisgIEhJRF9CUkFJTExFX1VTQUdFX0VOVFJZKERQYWREb3duLCBTRUwpLAorICBISURfQlJBSUxMRV9VU0FHRV9FTlRSWShEUGFkTGVmdCwgU0VMKSwKKyAgSElEX0JSQUlMTEVfVVNBR0VfRU5UUlkoRFBhZFJpZ2h0LCBTRUwpLAorICBISURfQlJBSUxMRV9VU0FHRV9FTlRSWShQYW5MZWZ0LCBTRUwpLAorICBISURfQlJBSUxMRV9VU0FHRV9FTlRSWShQYW5SaWdodCwgU0VMKSwKKyAgSElEX0JSQUlMTEVfVVNBR0VfRU5UUlkoUm9ja2VyVXAsIFNFTCksCisgIEhJRF9CUkFJTExFX1VTQUdFX0VOVFJZKFJvY2tlckRvd24sIFNFTCksCisgIEhJRF9CUkFJTExFX1VTQUdFX0VOVFJZKFJvY2tlclByZXNzLCBTRUwpLAorSElEX0VORF9UQUJMRShCcmFpbGxlVXNhZ2UpCisKKyNkZWZpbmUgSElEX1VTQUdFX1BBR0VfRU5UUlkobmFtZSwgdXNhZ2VzKSBISURfVEFCTEVfRU5UUlkoSElEX1VQRywgbmFtZSwgLnVzYWdlVGFibGU9dXNhZ2VzKQorSElEX0JFR0lOX1RBQkxFKFVzYWdlUGFnZSkKKyAgSElEX1VTQUdFX1BBR0VfRU5UUlkoR2VuZXJpY0Rlc2t0b3AsICZoaWRHZW5lcmljRGVza3RvcFVzYWdlVGFibGUpLAorICBISURfVVNBR0VfUEFHRV9FTlRSWShTaW11bGF0aW9uLCBOVUxMKSwKKyAgSElEX1VTQUdFX1BBR0VfRU5UUlkoVmlydHVhbFJlYWxpdHksIE5VTEwpLAorICBISURfVVNBR0VfUEFHRV9FTlRSWShTcG9ydCwgTlVMTCksCisgIEhJRF9VU0FHRV9QQUdFX0VOVFJZKEdhbWUsIE5VTEwpLAorICBISURfVVNBR0VfUEFHRV9FTlRSWShHZW5lcmljRGV2aWNlLCBOVUxMKSwKKyAgSElEX1VTQUdFX1BBR0VfRU5UUlkoS2V5Ym9hcmRfS2V5cGFkLCAmaGlkS2V5Ym9hcmRVc2FnZVRhYmxlKSwKKyAgSElEX1VTQUdFX1BBR0VfRU5UUlkoTEVEcywgJmhpZExFRHNVc2FnZVRhYmxlKSwKKyAgSElEX1VTQUdFX1BBR0VfRU5UUlkoQnV0dG9uLCBOVUxMKSwKKyAgSElEX1VTQUdFX1BBR0VfRU5UUlkoT3JkaW5hbCwgTlVMTCksCisgIEhJRF9VU0FHRV9QQUdFX0VOVFJZKFRlbGVwaG9ueSwgTlVMTCksCisgIEhJRF9VU0FHRV9QQUdFX0VOVFJZKENvbnN1bWVyLCBOVUxMKSwKKyAgSElEX1VTQUdFX1BBR0VfRU5UUlkoRGlnaXRpemVyLCBOVUxMKSwKKyAgSElEX1VTQUdFX1BBR0VfRU5UUlkoUGh5c2ljYWxJbnRlcmZhY2VEZXZpY2UsIE5VTEwpLAorICBISURfVVNBR0VfUEFHRV9FTlRSWShVbmljb2RlLCBOVUxMKSwKKyAgSElEX1VTQUdFX1BBR0VfRU5UUlkoQWxwaGFudW1lcmljRGlzcGxheSwgTlVMTCksCisgIEhJRF9VU0FHRV9QQUdFX0VOVFJZKE1lZGljYWxJbnN0cnVtZW50cywgTlVMTCksCisgIEhJRF9VU0FHRV9QQUdFX0VOVFJZKEJhckNvZGVTY2FubmVyLCBOVUxMKSwKKyAgSElEX1VTQUdFX1BBR0VfRU5UUlkoQnJhaWxsZSwgJmhpZEJyYWlsbGVVc2FnZVRhYmxlKSwKKyAgSElEX1VTQUdFX1BBR0VfRU5UUlkoU2NhbGUsIE5VTEwpLAorICBISURfVVNBR0VfUEFHRV9FTlRSWShNYWduZXRpY1N0cmlwZVJlYWRlciwgTlVMTCksCisgIEhJRF9VU0FHRV9QQUdFX0VOVFJZKENhbWVyYSwgTlVMTCksCisgIEhJRF9VU0FHRV9QQUdFX0VOVFJZKEFyY2FkZSwgTlVMTCksCitISURfRU5EX1RBQkxFKFVzYWdlUGFnZSkKZGlmZiAtLWdpdCBhL1Byb2dyYW1zL2hpZGtleXMuYyBiL1Byb2dyYW1zL2hpZGtleXMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOWU1NDE3Ci0tLSAvZGV2L251bGwKKysrIGIvUHJvZ3JhbXMvaGlka2V5cy5jCkBAIC0wLDAgKzEsMTY2MCBAQAorLyoKKyAqIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisgKiAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisgKgorICogQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKKyNpbmNsdWRlICJwcm9sb2d1ZS5oIgorCisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKyNpbmNsdWRlICJoaWRrZXlzLmgiCisjaW5jbHVkZSAia2JkX2tleWNvZGVzLmgiCisjaW5jbHVkZSAiYml0bWFzay5oIgorI2luY2x1ZGUgImJybF9jbWRzLmgiCisjaW5jbHVkZSAiY21kX2VucXVldWUuaCIKKwordHlwZWRlZiBzdHJ1Y3QgeworICB1aW50MTZfdCB4dENvZGU7CisgIHVpbnQxNl90IGF0Q29kZTsKKyAgdWludDhfdCBwczJDb2RlOworfSBIaWRLZXlFbnRyeTsKKworc3RhdGljIGNvbnN0IEhpZEtleUVudHJ5IGhpZEtleVRhYmxlW10gPSB7CisgIC8qIGFBICovCisgIFtISURfS0VZX0FdID0geworICAgIC54dENvZGUgPSBYVF9LRVkoMDAsIEEpLAorICAgIC5hdENvZGUgPSBBVF9LRVkoMDAsIEEpLAorICAgIC5wczJDb2RlID0gUFMyX0tFWV9BCisgIH0sCisKKyAgLyogYkIgKi8KKyAgW0hJRF9LRVlfQl0gPSB7CisgICAgLnh0Q29kZSA9IFhUX0tFWSgwMCwgQiksCisgICAgLmF0Q29kZSA9IEFUX0tFWSgwMCwgQiksCisgICAgLnBzMkNvZGUgPSBQUzJfS0VZX0IKKyAgfSwKKworICAvKiBjQyAqLworICBbSElEX0tFWV9DXSA9IHsKKyAgICAueHRDb2RlID0gWFRfS0VZKDAwLCBDKSwKKyAgICAuYXRDb2RlID0gQVRfS0VZKDAwLCBDKSwKKyAgICAucHMyQ29kZSA9IFBTMl9LRVlfQworICB9LAorCisgIC8qIGREICovCisgIFtISURfS0VZX0RdID0geworICAgIC54dENvZGUgPSBYVF9LRVkoMDAsIEQpLAorICAgIC5hdENvZGUgPSBBVF9LRVkoMDAsIEQpLAorICAgIC5wczJDb2RlID0gUFMyX0tFWV9ECisgIH0sCisKKyAgLyogZUUgKi8KKyAgW0hJRF9LRVlfRV0gPSB7CisgICAgLnh0Q29kZSA9IFhUX0tFWSgwMCwgRSksCisgICAgLmF0Q29kZSA9IEFUX0tFWSgwMCwgRSksCisgICAgLnBzMkNvZGUgPSBQUzJfS0VZX0UKKyAgfSwKKworICAvKiBmRiAqLworICBbSElEX0tFWV9GXSA9IHsKKyAgICAueHRDb2RlID0gWFRfS0VZKDAwLCBGKSwKKyAgICAuYXRDb2RlID0gQVRfS0VZKDAwLCBGKSwKKyAgICAucHMyQ29kZSA9IFBTMl9LRVlfRgorICB9LAorCisgIC8qIGdHICovCisgIFtISURfS0VZX0ddID0geworICAgIC54dENvZGUgPSBYVF9LRVkoMDAsIEcpLAorICAgIC5hdENvZGUgPSBBVF9LRVkoMDAsIEcpLAorICAgIC5wczJDb2RlID0gUFMyX0tFWV9HCisgIH0sCisKKyAgLyogaEggKi8KKyAgW0hJRF9LRVlfSF0gPSB7CisgICAgLnh0Q29kZSA9IFhUX0tFWSgwMCwgSCksCisgICAgLmF0Q29kZSA9IEFUX0tFWSgwMCwgSCksCisgICAgLnBzMkNvZGUgPSBQUzJfS0VZX0gKKyAgfSwKKworICAvKiBpSSAqLworICBbSElEX0tFWV9JXSA9IHsKKyAgICAueHRDb2RlID0gWFRfS0VZKDAwLCBJKSwKKyAgICAuYXRDb2RlID0gQVRfS0VZKDAwLCBJKSwKKyAgICAucHMyQ29kZSA9IFBTMl9LRVlfSQorICB9LAorCisgIC8qIGpKICovCisgIFtISURfS0VZX0pdID0geworICAgIC54dENvZGUgPSBYVF9LRVkoMDAsIEopLAorICAgIC5hdENvZGUgPSBBVF9LRVkoMDAsIEopLAorICAgIC5wczJDb2RlID0gUFMyX0tFWV9KCisgIH0sCisKKyAgLyoga0sgKi8KKyAgW0hJRF9LRVlfS10gPSB7CisgICAgLnh0Q29kZSA9IFhUX0tFWSgwMCwgSyksCisgICAgLmF0Q29kZSA9IEFUX0tFWSgwMCwgSyksCisgICAgLnBzMkNvZGUgPSBQUzJfS0VZX0sKKyAgfSwKKworICAvKiBsTCAqLworICBbSElEX0tFWV9MXSA9IHsKKyAgICAueHRDb2RlID0gWFRfS0VZKDAwLCBMKSwKKyAgICAuYXRDb2RlID0gQVRfS0VZKDAwLCBMKSwKKyAgICAucHMyQ29kZSA9IFBTMl9LRVlfTAorICB9LAorCisgIC8qIG1NICovCisgIFtISURfS0VZX01dID0geworICAgIC54dENvZGUgPSBYVF9LRVkoMDAsIE0pLAorICAgIC5hdENvZGUgPSBBVF9LRVkoMDAsIE0pLAorICAgIC5wczJDb2RlID0gUFMyX0tFWV9NCisgIH0sCisKKyAgLyogbk4gKi8KKyAgW0hJRF9LRVlfTl0gPSB7CisgICAgLnh0Q29kZSA9IFhUX0tFWSgwMCwgTiksCisgICAgLmF0Q29kZSA9IEFUX0tFWSgwMCwgTiksCisgICAgLnBzMkNvZGUgPSBQUzJfS0VZX04KKyAgfSwKKworICAvKiBvTyAqLworICBbSElEX0tFWV9PXSA9IHsKKyAgICAueHRDb2RlID0gWFRfS0VZKDAwLCBPKSwKKyAgICAuYXRDb2RlID0gQVRfS0VZKDAwLCBPKSwKKyAgICAucHMyQ29kZSA9IFBTMl9LRVlfTworICB9LAorCisgIC8qIHBQICovCisgIFtISURfS0VZX1BdID0geworICAgIC54dENvZGUgPSBYVF9LRVkoMDAsIFApLAorICAgIC5hdENvZGUgPSBBVF9LRVkoMDAsIFApLAorICAgIC5wczJDb2RlID0gUFMyX0tFWV9QCisgIH0sCisKKyAgLyogcVEgKi8KKyAgW0hJRF9LRVlfUV0gPSB7CisgICAgLnh0Q29kZSA9IFhUX0tFWSgwMCwgUSksCisgICAgLmF0Q29kZSA9IEFUX0tFWSgwMCwgUSksCisgICAgLnBzMkNvZGUgPSBQUzJfS0VZX1EKKyAgfSwKKworICAvKiByUiAqLworICBbSElEX0tFWV9SXSA9IHsKKyAgICAueHRDb2RlID0gWFRfS0VZKDAwLCBSKSwKKyAgICAuYXRDb2RlID0gQVRfS0VZKDAwLCBSKSwKKyAgICAucHMyQ29kZSA9IFBTMl9LRVlfUgorICB9LAorCisgIC8qIHNTICovCisgIFtISURfS0VZX1NdID0geworICAgIC54dENvZGUgPSBYVF9LRVkoMDAsIFMpLAorICAgIC5hdENvZGUgPSBBVF9LRVkoMDAsIFMpLAorICAgIC5wczJDb2RlID0gUFMyX0tFWV9TCisgIH0sCisKKyAgLyogdFQgKi8KKyAgW0hJRF9LRVlfVF0gPSB7CisgICAgLnh0Q29kZSA9IFhUX0tFWSgwMCwgVCksCisgICAgLmF0Q29kZSA9IEFUX0tFWSgwMCwgVCksCisgICAgLnBzMkNvZGUgPSBQUzJfS0VZX1QKKyAgfSwKKworICAvKiB1VSAqLworICBbSElEX0tFWV9VXSA9IHsKKyAgICAueHRDb2RlID0gWFRfS0VZKDAwLCBVKSwKKyAgICAuYXRDb2RlID0gQVRfS0VZKDAwLCBVKSwKKyAgICAucHMyQ29kZSA9IFBTMl9LRVlfVQorICB9LAorCisgIC8qIHZWICovCisgIFtISURfS0VZX1ZdID0geworICAgIC54dENvZGUgPSBYVF9LRVkoMDAsIFYpLAorICAgIC5hdENvZGUgPSBBVF9LRVkoMDAsIFYpLAorICAgIC5wczJDb2RlID0gUFMyX0tFWV9WCisgIH0sCisKKyAgLyogd1cgKi8KKyAgW0hJRF9LRVlfV10gPSB7CisgICAgLnh0Q29kZSA9IFhUX0tFWSgwMCwgVyksCisgICAgLmF0Q29kZSA9IEFUX0tFWSgwMCwgVyksCisgICAgLnBzMkNvZGUgPSBQUzJfS0VZX1cKKyAgfSwKKworICAvKiB4WCAqLworICBbSElEX0tFWV9YXSA9IHsKKyAgICAueHRDb2RlID0gWFRfS0VZKDAwLCBYKSwKKyAgICAuYXRDb2RlID0gQVRfS0VZKDAwLCBYKSwKKyAgICAucHMyQ29kZSA9IFBTMl9LRVlfWAorICB9LAorCisgIC8qIHlZICovCisgIFtISURfS0VZX1ldID0geworICAgIC54dENvZGUgPSBYVF9LRVkoMDAsIFkpLAorICAgIC5hdENvZGUgPSBBVF9LRVkoMDAsIFkpLAorICAgIC5wczJDb2RlID0gUFMyX0tFWV9ZCisgIH0sCisKKyAgLyogelogKi8KKyAgW0hJRF9LRVlfWl0gPSB7CisgICAgLnh0Q29kZSA9IFhUX0tFWSgwMCwgWiksCisgICAgLmF0Q29kZSA9IEFUX0tFWSgwMCwgWiksCisgICAgLnBzMkNvZGUgPSBQUzJfS0VZX1oKKyAgfSwKKworICAvKiAxISAqLworICBbSElEX0tFWV8xXSA9IHsKKyAgICAueHRDb2RlID0gWFRfS0VZKDAwLCAxKSwKKyAgICAuYXRDb2RlID0gQVRfS0VZKDAwLCAxKSwKKyAgICAucHMyQ29kZSA9IFBTMl9LRVlfMQorICB9LAorCisgIC8qIDJAICovCisgIFtISURfS0VZXzJdID0geworICAgIC54dENvZGUgPSBYVF9LRVkoMDAsIDIpLAorICAgIC5hdENvZGUgPSBBVF9LRVkoMDAsIDIpLAorICAgIC5wczJDb2RlID0gUFMyX0tFWV8yCisgIH0sCisKKyAgLyogMyMgKi8KKyAgW0hJRF9LRVlfM10gPSB7CisgICAgLnh0Q29kZSA9IFhUX0tFWSgwMCwgMyksCisgICAgLmF0Q29kZSA9IEFUX0tFWSgwMCwgMyksCisgICAgLnBzMkNvZGUgPSBQUzJfS0VZXzMKKyAgfSwKKworICAvKiA0JCAqLworICBbSElEX0tFWV80XSA9IHsKKyAgICAueHRDb2RlID0gWFRfS0VZKDAwLCA0KSwKKyAgICAuYXRDb2RlID0gQVRfS0VZKDAwLCA0KSwKKyAgICAucHMyQ29kZSA9IFBTMl9LRVlfNAorICB9LAorCisgIC8qIDUlICovCisgIFtISURfS0VZXzVdID0geworICAgIC54dENvZGUgPSBYVF9LRVkoMDAsIDUpLAorICAgIC5hdENvZGUgPSBBVF9LRVkoMDAsIDUpLAorICAgIC5wczJDb2RlID0gUFMyX0tFWV81CisgIH0sCisKKyAgLyogNl4gKi8KKyAgW0hJRF9LRVlfNl0gPSB7CisgICAgLnh0Q29kZSA9IFhUX0tFWSgwMCwgNiksCisgICAgLmF0Q29kZSA9IEFUX0tFWSgwMCwgNiksCisgICAgLnBzMkNvZGUgPSBQUzJfS0VZXzYKKyAgfSwKKworICAvKiA3JiAqLworICBbSElEX0tFWV83XSA9IHsKKyAgICAueHRDb2RlID0gWFRfS0VZKDAwLCA3KSwKKyAgICAuYXRDb2RlID0gQVRfS0VZKDAwLCA3KSwKKyAgICAucHMyQ29kZSA9IFBTMl9LRVlfNworICB9LAorCisgIC8qIDgqICovCisgIFtISURfS0VZXzhdID0geworICAgIC54dENvZGUgPSBYVF9LRVkoMDAsIDgpLAorICAgIC5hdENvZGUgPSBBVF9LRVkoMDAsIDgpLAorICAgIC5wczJDb2RlID0gUFMyX0tFWV84CisgIH0sCisKKyAgLyogOSggKi8KKyAgW0hJRF9LRVlfOV0gPSB7CisgICAgLnh0Q29kZSA9IFhUX0tFWSgwMCwgOSksCisgICAgLmF0Q29kZSA9IEFUX0tFWSgwMCwgOSksCisgICAgLnBzMkNvZGUgPSBQUzJfS0VZXzkKKyAgfSwKKworICAvKiAwKSAqLworICBbSElEX0tFWV8wXSA9IHsKKyAgICAueHRDb2RlID0gWFRfS0VZKDAwLCAwKSwKKyAgICAuYXRDb2RlID0gQVRfS0VZKDAwLCAwKSwKKyAgICAucHMyQ29kZSA9IFBTMl9LRVlfMAorICB9LAorCisgIC8qIFJldHVybiAqLworICBbSElEX0tFWV9FbnRlcl0gPSB7CisgICAgLnh0Q29kZSA9IFhUX0tFWSgwMCwgRW50ZXIpLAorICAgIC5hdENvZGUgPSBBVF9LRVkoMDAsIEVudGVyKSwKKyAgICAucHMyQ29kZSA9IFBTMl9LRVlfRW50ZXIKKyAgfSwKKworICAvKiBFc2NhcGUgKi8KKyAgW0hJRF9LRVlfRXNjYXBlXSA9IHsKKyAgICAueHRDb2RlID0gWFRfS0VZKDAwLCBFc2NhcGUpLAorICAgIC5hdENvZGUgPSBBVF9LRVkoMDAsIEVzY2FwZSksCisgICAgLnBzMkNvZGUgPSBQUzJfS0VZX0VzY2FwZQorICB9LAorCisgIC8qIEJhY2tzcGFjZSAqLworICBbSElEX0tFWV9CYWNrc3BhY2VdID0geworICAgIC54dENvZGUgPSBYVF9LRVkoMDAsIEJhY2tzcGFjZSksCisgICAgLmF0Q29kZSA9IEFUX0tFWSgwMCwgQmFja3NwYWNlKSwKKyAgICAucHMyQ29kZSA9IFBTMl9LRVlfQmFja3NwYWNlCisgIH0sCisKKyAgLyogVGFiICovCisgIFtISURfS0VZX1RhYl0gPSB7CisgICAgLnh0Q29kZSA9IFhUX0tFWSgwMCwgVGFiKSwKKyAgICAuYXRDb2RlID0gQVRfS0VZKDAwLCBUYWIpLAorICAgIC5wczJDb2RlID0gUFMyX0tFWV9UYWIKKyAgfSwKKworICAvKiBTcGFjZSAqLworICBbSElEX0tFWV9TcGFjZV0gPSB7CisgICAgLnh0Q29kZSA9IFhUX0tFWSgwMCwgU3BhY2UpLAorICAgIC5hdENvZGUgPSBBVF9LRVkoMDAsIFNwYWNlKSwKKyAgICAucHMyQ29kZSA9IFBTMl9LRVlfU3BhY2UKKyAgfSwKKworICAvKiAtXyAqLworICBbSElEX0tFWV9NaW51c10gPSB7CisgICAgLnh0Q29kZSA9IFhUX0tFWSgwMCwgTWludXMpLAorICAgIC5hdENvZGUgPSBBVF9LRVkoMDAsIE1pbnVzKSwKKyAgICAucHMyQ29kZSA9IFBTMl9LRVlfTWludXMKKyAgfSwKKworICAvKiA9KyAqLworICBbSElEX0tFWV9FcXVhbF0gPSB7CisgICAgLnh0Q29kZSA9IFhUX0tFWSgwMCwgRXF1YWwpLAorICAgIC5hdENvZGUgPSBBVF9LRVkoMDAsIEVxdWFsKSwKKyAgICAucHMyQ29kZSA9IFBTMl9LRVlfRXF1YWwKKyAgfSwKKworICAvKiBbeyAqLworICBbSElEX0tFWV9MZWZ0QnJhY2tldF0gPSB7CisgICAgLnh0Q29kZSA9IFhUX0tFWSgwMCwgTGVmdEJyYWNrZXQpLAorICAgIC5hdENvZGUgPSBBVF9LRVkoMDAsIExlZnRCcmFja2V0KSwKKyAgICAucHMyQ29kZSA9IFBTMl9LRVlfTGVmdEJyYWNrZXQKKyAgfSwKKworICAvKiBdfSAqLworICBbSElEX0tFWV9SaWdodEJyYWNrZXRdID0geworICAgIC54dENvZGUgPSBYVF9LRVkoMDAsIFJpZ2h0QnJhY2tldCksCisgICAgLmF0Q29kZSA9IEFUX0tFWSgwMCwgUmlnaHRCcmFja2V0KSwKKyAgICAucHMyQ29kZSA9IFBTMl9LRVlfUmlnaHRCcmFja2V0CisgIH0sCisKKyAgLyogXHwgKi8KKyAgW0hJRF9LRVlfQmFja3NsYXNoXSA9IHsKKyAgICAueHRDb2RlID0gWFRfS0VZKDAwLCBCYWNrc2xhc2gpLAorICAgIC5hdENvZGUgPSBBVF9LRVkoMDAsIEJhY2tzbGFzaCksCisgICAgLnBzMkNvZGUgPSBQUzJfS0VZX0JhY2tzbGFzaAorICB9LAorCisgIC8qIEV1cm9wZSAxIChOb3RlIDIpICovCisgIFtISURfS0VZX0V1cm9wZTFdID0geworICAgIC54dENvZGUgPSBYVF9LRVkoMDAsIEV1cm9wZTEpLAorICAgIC5hdENvZGUgPSBBVF9LRVkoMDAsIEV1cm9wZTEpLAorICAgIC5wczJDb2RlID0gUFMyX0tFWV9FdXJvcGUxCisgIH0sCisKKyAgLyogOzogKi8KKyAgW0hJRF9LRVlfU2VtaWNvbG9uXSA9IHsKKyAgICAueHRDb2RlID0gWFRfS0VZKDAwLCBTZW1pY29sb24pLAorICAgIC5hdENvZGUgPSBBVF9LRVkoMDAsIFNlbWljb2xvbiksCisgICAgLnBzMkNvZGUgPSBQUzJfS0VZX1NlbWljb2xvbgorICB9LAorCisgIC8qICciICovCisgIFtISURfS0VZX0Fwb3N0cm9waGVdID0geworICAgIC54dENvZGUgPSBYVF9LRVkoMDAsIEFwb3N0cm9waGUpLAorICAgIC5hdENvZGUgPSBBVF9LRVkoMDAsIEFwb3N0cm9waGUpLAorICAgIC5wczJDb2RlID0gUFMyX0tFWV9BcG9zdHJvcGhlCisgIH0sCisKKyAgLyogYH4gKi8KKyAgW0hJRF9LRVlfR3JhdmVdID0geworICAgIC54dENvZGUgPSBYVF9LRVkoMDAsIEdyYXZlKSwKKyAgICAuYXRDb2RlID0gQVRfS0VZKDAwLCBHcmF2ZSksCisgICAgLnBzMkNvZGUgPSBQUzJfS0VZX0dyYXZlCisgIH0sCisKKyAgLyogLDwgKi8KKyAgW0hJRF9LRVlfQ29tbWFdID0geworICAgIC54dENvZGUgPSBYVF9LRVkoMDAsIENvbW1hKSwKKyAgICAuYXRDb2RlID0gQVRfS0VZKDAwLCBDb21tYSksCisgICAgLnBzMkNvZGUgPSBQUzJfS0VZX0NvbW1hCisgIH0sCisKKyAgLyogLj4gKi8KKyAgW0hJRF9LRVlfUGVyaW9kXSA9IHsKKyAgICAueHRDb2RlID0gWFRfS0VZKDAwLCBQZXJpb2QpLAorICAgIC5hdENvZGUgPSBBVF9LRVkoMDAsIFBlcmlvZCksCisgICAgLnBzMkNvZGUgPSBQUzJfS0VZX1BlcmlvZAorICB9LAorCisgIC8qIC8/ICovCisgIFtISURfS0VZX1NsYXNoXSA9IHsKKyAgICAueHRDb2RlID0gWFRfS0VZKDAwLCBTbGFzaCksCisgICAgLmF0Q29kZSA9IEFUX0tFWSgwMCwgU2xhc2gpLAorICAgIC5wczJDb2RlID0gUFMyX0tFWV9TbGFzaAorICB9LAorCisgIC8qIENhcHMgTG9jayAqLworICBbSElEX0tFWV9DYXBzTG9ja10gPSB7CisgICAgLnh0Q29kZSA9IFhUX0tFWSgwMCwgQ2Fwc0xvY2spLAorICAgIC5hdENvZGUgPSBBVF9LRVkoMDAsIENhcHNMb2NrKSwKKyAgICAucHMyQ29kZSA9IFBTMl9LRVlfQ2Fwc0xvY2sKKyAgfSwKKworICAvKiBGMSAqLworICBbSElEX0tFWV9GMV0gPSB7CisgICAgLnh0Q29kZSA9IFhUX0tFWSgwMCwgRjEpLAorICAgIC5hdENvZGUgPSBBVF9LRVkoMDAsIEYxKSwKKyAgICAucHMyQ29kZSA9IFBTMl9LRVlfRjEKKyAgfSwKKworICAvKiBGMiAqLworICBbSElEX0tFWV9GMl0gPSB7CisgICAgLnh0Q29kZSA9IFhUX0tFWSgwMCwgRjIpLAorICAgIC5hdENvZGUgPSBBVF9LRVkoMDAsIEYyKSwKKyAgICAucHMyQ29kZSA9IFBTMl9LRVlfRjIKKyAgfSwKKworICAvKiBGMyAqLworICBbSElEX0tFWV9GM10gPSB7CisgICAgLnh0Q29kZSA9IFhUX0tFWSgwMCwgRjMpLAorICAgIC5hdENvZGUgPSBBVF9LRVkoMDAsIEYzKSwKKyAgICAucHMyQ29kZSA9IFBTMl9LRVlfRjMKKyAgfSwKKworICAvKiBGNCAqLworICBbSElEX0tFWV9GNF0gPSB7CisgICAgLnh0Q29kZSA9IFhUX0tFWSgwMCwgRjQpLAorICAgIC5hdENvZGUgPSBBVF9LRVkoMDAsIEY0KSwKKyAgICAucHMyQ29kZSA9IFBTMl9LRVlfRjQKKyAgfSwKKworICAvKiBGNSAqLworICBbSElEX0tFWV9GNV0gPSB7CisgICAgLnh0Q29kZSA9IFhUX0tFWSgwMCwgRjUpLAorICAgIC5hdENvZGUgPSBBVF9LRVkoMDAsIEY1KSwKKyAgICAucHMyQ29kZSA9IFBTMl9LRVlfRjUKKyAgfSwKKworICAvKiBGNiAqLworICBbSElEX0tFWV9GNl0gPSB7CisgICAgLnh0Q29kZSA9IFhUX0tFWSgwMCwgRjYpLAorICAgIC5hdENvZGUgPSBBVF9LRVkoMDAsIEY2KSwKKyAgICAucHMyQ29kZSA9IFBTMl9LRVlfRjYKKyAgfSwKKworICAvKiBGNyAqLworICBbSElEX0tFWV9GN10gPSB7CisgICAgLnh0Q29kZSA9IFhUX0tFWSgwMCwgRjcpLAorICAgIC5hdENvZGUgPSBBVF9LRVkoMDAsIEY3KSwKKyAgICAucHMyQ29kZSA9IFBTMl9LRVlfRjcKKyAgfSwKKworICAvKiBGOCAqLworICBbSElEX0tFWV9GOF0gPSB7CisgICAgLnh0Q29kZSA9IFhUX0tFWSgwMCwgRjgpLAorICAgIC5hdENvZGUgPSBBVF9LRVkoMDAsIEY4KSwKKyAgICAucHMyQ29kZSA9IFBTMl9LRVlfRjgKKyAgfSwKKworICAvKiBGOSAqLworICBbSElEX0tFWV9GOV0gPSB7CisgICAgLnh0Q29kZSA9IFhUX0tFWSgwMCwgRjkpLAorICAgIC5hdENvZGUgPSBBVF9LRVkoMDAsIEY5KSwKKyAgICAucHMyQ29kZSA9IFBTMl9LRVlfRjkKKyAgfSwKKworICAvKiBGMTAgKi8KKyAgW0hJRF9LRVlfRjEwXSA9IHsKKyAgICAueHRDb2RlID0gWFRfS0VZKDAwLCBGMTApLAorICAgIC5hdENvZGUgPSBBVF9LRVkoMDAsIEYxMCksCisgICAgLnBzMkNvZGUgPSBQUzJfS0VZX0YxMAorICB9LAorCisgIC8qIEYxMSAqLworICBbSElEX0tFWV9GMTFdID0geworICAgIC54dENvZGUgPSBYVF9LRVkoMDAsIEYxMSksCisgICAgLmF0Q29kZSA9IEFUX0tFWSgwMCwgRjExKSwKKyAgICAucHMyQ29kZSA9IFBTMl9LRVlfRjExCisgIH0sCisKKyAgLyogRjEyICovCisgIFtISURfS0VZX0YxMl0gPSB7CisgICAgLnh0Q29kZSA9IFhUX0tFWSgwMCwgRjEyKSwKKyAgICAuYXRDb2RlID0gQVRfS0VZKDAwLCBGMTIpLAorICAgIC5wczJDb2RlID0gUFMyX0tFWV9GMTIKKyAgfSwKKworICAvKiBQcmludCBTY3JlZW4gKE5vdGUgMSkgKi8KKyAgW0hJRF9LRVlfUHJpbnRTY3JlZW5dID0geworICAgIC54dENvZGUgPSBYVF9LRVkoRTAsIFByaW50U2NyZWVuKSwKKyAgICAuYXRDb2RlID0gQVRfS0VZKEUwLCBQcmludFNjcmVlbiksCisgICAgLnBzMkNvZGUgPSBQUzJfS0VZX1ByaW50U2NyZWVuCisgIH0sCisKKyAgLyogU2Nyb2xsIExvY2sgKi8KKyAgW0hJRF9LRVlfU2Nyb2xsTG9ja10gPSB7CisgICAgLnh0Q29kZSA9IFhUX0tFWSgwMCwgU2Nyb2xsTG9jayksCisgICAgLmF0Q29kZSA9IEFUX0tFWSgwMCwgU2Nyb2xsTG9jayksCisgICAgLnBzMkNvZGUgPSBQUzJfS0VZX1Njcm9sbExvY2sKKyAgfSwKKworICAvKiBQYXVzZSAqLworICBbSElEX0tFWV9QYXVzZV0gPSB7CisgICAgLnh0Q29kZSA9IFhUX0tFWShFMSwgUGF1c2UpLAorICAgIC5hdENvZGUgPSBBVF9LRVkoRTEsIFBhdXNlKSwKKyAgICAucHMyQ29kZSA9IFBTMl9LRVlfUGF1c2UKKyAgfSwKKworICAvKiBJbnNlcnQgKE5vdGUgMSkgKi8KKyAgW0hJRF9LRVlfSW5zZXJ0XSA9IHsKKyAgICAueHRDb2RlID0gWFRfS0VZKEUwLCBJbnNlcnQpLAorICAgIC5hdENvZGUgPSBBVF9LRVkoRTAsIEluc2VydCksCisgICAgLnBzMkNvZGUgPSBQUzJfS0VZX0luc2VydAorICB9LAorCisgIC8qIEhvbWUgKE5vdGUgMSkgKi8KKyAgW0hJRF9LRVlfSG9tZV0gPSB7CisgICAgLnh0Q29kZSA9IFhUX0tFWShFMCwgSG9tZSksCisgICAgLmF0Q29kZSA9IEFUX0tFWShFMCwgSG9tZSksCisgICAgLnBzMkNvZGUgPSBQUzJfS0VZX0hvbWUKKyAgfSwKKworICAvKiBQYWdlIFVwIChOb3RlIDEpICovCisgIFtISURfS0VZX1BhZ2VVcF0gPSB7CisgICAgLnh0Q29kZSA9IFhUX0tFWShFMCwgUGFnZVVwKSwKKyAgICAuYXRDb2RlID0gQVRfS0VZKEUwLCBQYWdlVXApLAorICAgIC5wczJDb2RlID0gUFMyX0tFWV9QYWdlVXAKKyAgfSwKKworICAvKiBEZWxldGUgKE5vdGUgMSkgKi8KKyAgW0hJRF9LRVlfRGVsZXRlXSA9IHsKKyAgICAueHRDb2RlID0gWFRfS0VZKEUwLCBEZWxldGUpLAorICAgIC5hdENvZGUgPSBBVF9LRVkoRTAsIERlbGV0ZSksCisgICAgLnBzMkNvZGUgPSBQUzJfS0VZX0RlbGV0ZQorICB9LAorCisgIC8qIEVuZCAoTm90ZSAxKSAqLworICBbSElEX0tFWV9FbmRdID0geworICAgIC54dENvZGUgPSBYVF9LRVkoRTAsIEVuZCksCisgICAgLmF0Q29kZSA9IEFUX0tFWShFMCwgRW5kKSwKKyAgICAucHMyQ29kZSA9IFBTMl9LRVlfRW5kCisgIH0sCisKKyAgLyogUGFnZSBEb3duIChOb3RlIDEpICovCisgIFtISURfS0VZX1BhZ2VEb3duXSA9IHsKKyAgICAueHRDb2RlID0gWFRfS0VZKEUwLCBQYWdlRG93biksCisgICAgLmF0Q29kZSA9IEFUX0tFWShFMCwgUGFnZURvd24pLAorICAgIC5wczJDb2RlID0gUFMyX0tFWV9QYWdlRG93bgorICB9LAorCisgIC8qIFJpZ2h0IEFycm93IChOb3RlIDEpICovCisgIFtISURfS0VZX0Fycm93UmlnaHRdID0geworICAgIC54dENvZGUgPSBYVF9LRVkoRTAsIEFycm93UmlnaHQpLAorICAgIC5hdENvZGUgPSBBVF9LRVkoRTAsIEFycm93UmlnaHQpLAorICAgIC5wczJDb2RlID0gUFMyX0tFWV9BcnJvd1JpZ2h0CisgIH0sCisKKyAgLyogTGVmdCBBcnJvdyAoTm90ZSAxKSAqLworICBbSElEX0tFWV9BcnJvd0xlZnRdID0geworICAgIC54dENvZGUgPSBYVF9LRVkoRTAsIEFycm93TGVmdCksCisgICAgLmF0Q29kZSA9IEFUX0tFWShFMCwgQXJyb3dMZWZ0KSwKKyAgICAucHMyQ29kZSA9IFBTMl9LRVlfQXJyb3dMZWZ0CisgIH0sCisKKyAgLyogRG93biBBcnJvdyAoTm90ZSAxKSAqLworICBbSElEX0tFWV9BcnJvd0Rvd25dID0geworICAgIC54dENvZGUgPSBYVF9LRVkoRTAsIEFycm93RG93biksCisgICAgLmF0Q29kZSA9IEFUX0tFWShFMCwgQXJyb3dEb3duKSwKKyAgICAucHMyQ29kZSA9IFBTMl9LRVlfQXJyb3dEb3duCisgIH0sCisKKyAgLyogVXAgQXJyb3cgKE5vdGUgMSkgKi8KKyAgW0hJRF9LRVlfQXJyb3dVcF0gPSB7CisgICAgLnh0Q29kZSA9IFhUX0tFWShFMCwgQXJyb3dVcCksCisgICAgLmF0Q29kZSA9IEFUX0tFWShFMCwgQXJyb3dVcCksCisgICAgLnBzMkNvZGUgPSBQUzJfS0VZX0Fycm93VXAKKyAgfSwKKworICAvKiBOdW0gTG9jayAqLworICBbSElEX0tFWV9OdW1Mb2NrXSA9IHsKKyAgICAueHRDb2RlID0gWFRfS0VZKDAwLCBOdW1Mb2NrKSwKKyAgICAuYXRDb2RlID0gQVRfS0VZKDAwLCBOdW1Mb2NrKSwKKyAgICAucHMyQ29kZSA9IFBTMl9LRVlfTnVtTG9jaworICB9LAorCisgIC8qIEtleXBhZCAvIChOb3RlIDEpICovCisgIFtISURfS0VZX0tQU2xhc2hdID0geworICAgIC54dENvZGUgPSBYVF9LRVkoRTAsIEtQU2xhc2gpLAorICAgIC5hdENvZGUgPSBBVF9LRVkoRTAsIEtQU2xhc2gpLAorICAgIC5wczJDb2RlID0gUFMyX0tFWV9LUFNsYXNoCisgIH0sCisKKyAgLyogS2V5cGFkICogKi8KKyAgW0hJRF9LRVlfS1BBc3Rlcmlza10gPSB7CisgICAgLnh0Q29kZSA9IFhUX0tFWSgwMCwgS1BBc3RlcmlzayksCisgICAgLmF0Q29kZSA9IEFUX0tFWSgwMCwgS1BBc3RlcmlzayksCisgICAgLnBzMkNvZGUgPSBQUzJfS0VZX0tQQXN0ZXJpc2sKKyAgfSwKKworICAvKiBLZXlwYWQgLSAqLworICBbSElEX0tFWV9LUE1pbnVzXSA9IHsKKyAgICAueHRDb2RlID0gWFRfS0VZKDAwLCBLUE1pbnVzKSwKKyAgICAuYXRDb2RlID0gQVRfS0VZKDAwLCBLUE1pbnVzKSwKKyAgICAucHMyQ29kZSA9IFBTMl9LRVlfS1BNaW51cworICB9LAorCisgIC8qIEtleXBhZCArICovCisgIFtISURfS0VZX0tQUGx1c10gPSB7CisgICAgLnh0Q29kZSA9IFhUX0tFWSgwMCwgS1BQbHVzKSwKKyAgICAuYXRDb2RlID0gQVRfS0VZKDAwLCBLUFBsdXMpLAorICAgIC5wczJDb2RlID0gUFMyX0tFWV9LUFBsdXMKKyAgfSwKKworICAvKiBLZXlwYWQgRW50ZXIgKi8KKyAgW0hJRF9LRVlfS1BFbnRlcl0gPSB7CisgICAgLnh0Q29kZSA9IFhUX0tFWShFMCwgS1BFbnRlciksCisgICAgLmF0Q29kZSA9IEFUX0tFWShFMCwgS1BFbnRlciksCisgICAgLnBzMkNvZGUgPSBQUzJfS0VZX0tQRW50ZXIKKyAgfSwKKworICAvKiBLZXlwYWQgMSBFbmQgKi8KKyAgW0hJRF9LRVlfS1AxXSA9IHsKKyAgICAueHRDb2RlID0gWFRfS0VZKDAwLCBLUDEpLAorICAgIC5hdENvZGUgPSBBVF9LRVkoMDAsIEtQMSksCisgICAgLnBzMkNvZGUgPSBQUzJfS0VZX0tQMQorICB9LAorCisgIC8qIEtleXBhZCAyIERvd24gKi8KKyAgW0hJRF9LRVlfS1AyXSA9IHsKKyAgICAueHRDb2RlID0gWFRfS0VZKDAwLCBLUDIpLAorICAgIC5hdENvZGUgPSBBVF9LRVkoMDAsIEtQMiksCisgICAgLnBzMkNvZGUgPSBQUzJfS0VZX0tQMgorICB9LAorCisgIC8qIEtleXBhZCAzIFBhZ2VEbiAqLworICBbSElEX0tFWV9LUDNdID0geworICAgIC54dENvZGUgPSBYVF9LRVkoMDAsIEtQMyksCisgICAgLmF0Q29kZSA9IEFUX0tFWSgwMCwgS1AzKSwKKyAgICAucHMyQ29kZSA9IFBTMl9LRVlfS1AzCisgIH0sCisKKyAgLyogS2V5cGFkIDQgTGVmdCAqLworICBbSElEX0tFWV9LUDRdID0geworICAgIC54dENvZGUgPSBYVF9LRVkoMDAsIEtQNCksCisgICAgLmF0Q29kZSA9IEFUX0tFWSgwMCwgS1A0KSwKKyAgICAucHMyQ29kZSA9IFBTMl9LRVlfS1A0CisgIH0sCisKKyAgLyogS2V5cGFkIDUgKi8KKyAgW0hJRF9LRVlfS1A1XSA9IHsKKyAgICAueHRDb2RlID0gWFRfS0VZKDAwLCBLUDUpLAorICAgIC5hdENvZGUgPSBBVF9LRVkoMDAsIEtQNSksCisgICAgLnBzMkNvZGUgPSBQUzJfS0VZX0tQNQorICB9LAorCisgIC8qIEtleXBhZCA2IFJpZ2h0ICovCisgIFtISURfS0VZX0tQNl0gPSB7CisgICAgLnh0Q29kZSA9IFhUX0tFWSgwMCwgS1A2KSwKKyAgICAuYXRDb2RlID0gQVRfS0VZKDAwLCBLUDYpLAorICAgIC5wczJDb2RlID0gUFMyX0tFWV9LUDYKKyAgfSwKKworICAvKiBLZXlwYWQgNyBIb21lICovCisgIFtISURfS0VZX0tQN10gPSB7CisgICAgLnh0Q29kZSA9IFhUX0tFWSgwMCwgS1A3KSwKKyAgICAuYXRDb2RlID0gQVRfS0VZKDAwLCBLUDcpLAorICAgIC5wczJDb2RlID0gUFMyX0tFWV9LUDcKKyAgfSwKKworICAvKiBLZXlwYWQgOCBVcCAqLworICBbSElEX0tFWV9LUDhdID0geworICAgIC54dENvZGUgPSBYVF9LRVkoMDAsIEtQOCksCisgICAgLmF0Q29kZSA9IEFUX0tFWSgwMCwgS1A4KSwKKyAgICAucHMyQ29kZSA9IFBTMl9LRVlfS1A4CisgIH0sCisKKyAgLyogS2V5cGFkIDkgUGFnZVVwICovCisgIFtISURfS0VZX0tQOV0gPSB7CisgICAgLnh0Q29kZSA9IFhUX0tFWSgwMCwgS1A5KSwKKyAgICAuYXRDb2RlID0gQVRfS0VZKDAwLCBLUDkpLAorICAgIC5wczJDb2RlID0gUFMyX0tFWV9LUDkKKyAgfSwKKworICAvKiBLZXlwYWQgMCBJbnNlcnQgKi8KKyAgW0hJRF9LRVlfS1AwXSA9IHsKKyAgICAueHRDb2RlID0gWFRfS0VZKDAwLCBLUDApLAorICAgIC5hdENvZGUgPSBBVF9LRVkoMDAsIEtQMCksCisgICAgLnBzMkNvZGUgPSBQUzJfS0VZX0tQMAorICB9LAorCisgIC8qIEtleXBhZCAuIERlbGV0ZSAqLworICBbSElEX0tFWV9LUFBlcmlvZF0gPSB7CisgICAgLnh0Q29kZSA9IFhUX0tFWSgwMCwgS1BQZXJpb2QpLAorICAgIC5hdENvZGUgPSBBVF9LRVkoMDAsIEtQUGVyaW9kKSwKKyAgICAucHMyQ29kZSA9IFBTMl9LRVlfS1BQZXJpb2QKKyAgfSwKKworICAvKiBFdXJvcGUgMiAoTm90ZSAyKSAqLworICBbSElEX0tFWV9FdXJvcGUyXSA9IHsKKyAgICAueHRDb2RlID0gWFRfS0VZKDAwLCBFdXJvcGUyKSwKKyAgICAuYXRDb2RlID0gQVRfS0VZKDAwLCBFdXJvcGUyKSwKKyAgICAucHMyQ29kZSA9IFBTMl9LRVlfRXVyb3BlMgorICB9LAorCisgIC8qIEFwcCAqLworICBbSElEX0tFWV9Db250ZXh0XSA9IHsKKyAgICAueHRDb2RlID0gWFRfS0VZKEUwLCBDb250ZXh0KSwKKyAgICAuYXRDb2RlID0gQVRfS0VZKEUwLCBDb250ZXh0KSwKKyAgICAucHMyQ29kZSA9IFBTMl9LRVlfQ29udGV4dAorICB9LAorCisgIC8qIEtleWJvYXJkIFBvd2VyICovCisgIFtISURfS0VZX1Bvd2VyXSA9IHsKKyAgICAueHRDb2RlID0gWFRfS0VZKEUwLCBQb3dlciksCisgICAgLmF0Q29kZSA9IEFUX0tFWShFMCwgUG93ZXIpLAorICAgIC5wczJDb2RlID0gMFgwMAorICB9LAorCisgIC8qIEtleXBhZCA9ICovCisgIFtISURfS0VZX0tQRXF1YWxdID0geworICAgIC54dENvZGUgPSBYVF9LRVkoMDAsIEtQRXF1YWwpLAorICAgIC5hdENvZGUgPSBBVF9LRVkoMDAsIEtQRXF1YWwpLAorICAgIC5wczJDb2RlID0gMFgwMAorICB9LAorCisgIC8qIEYxMyAqLworICBbSElEX0tFWV9GMTNdID0geworICAgIC54dENvZGUgPSBYVF9LRVkoMDAsIEYxMyksCisgICAgLmF0Q29kZSA9IEFUX0tFWSgwMCwgRjEzKSwKKyAgICAucHMyQ29kZSA9IDBYMDAKKyAgfSwKKworICAvKiBGMTQgKi8KKyAgW0hJRF9LRVlfRjE0XSA9IHsKKyAgICAueHRDb2RlID0gWFRfS0VZKDAwLCBGMTQpLAorICAgIC5hdENvZGUgPSBBVF9LRVkoMDAsIEYxNCksCisgICAgLnBzMkNvZGUgPSAwWDAwCisgIH0sCisKKyAgLyogRjE1ICovCisgIFtISURfS0VZX0YxNV0gPSB7CisgICAgLnh0Q29kZSA9IFhUX0tFWSgwMCwgRjE1KSwKKyAgICAuYXRDb2RlID0gQVRfS0VZKDAwLCBGMTUpLAorICAgIC5wczJDb2RlID0gMFgwMAorICB9LAorCisgIC8qIEYxNiAqLworICBbSElEX0tFWV9GMTZdID0geworICAgIC54dENvZGUgPSBYVF9LRVkoMDAsIEYxNiksCisgICAgLmF0Q29kZSA9IEFUX0tFWSgwMCwgRjE2KSwKKyAgICAucHMyQ29kZSA9IDBYMDAKKyAgfSwKKworICAvKiBGMTcgKi8KKyAgW0hJRF9LRVlfRjE3XSA9IHsKKyAgICAueHRDb2RlID0gWFRfS0VZKDAwLCBGMTcpLAorICAgIC5hdENvZGUgPSBBVF9LRVkoMDAsIEYxNyksCisgICAgLnBzMkNvZGUgPSAwWDAwCisgIH0sCisKKyAgLyogRjE4ICovCisgIFtISURfS0VZX0YxOF0gPSB7CisgICAgLnh0Q29kZSA9IFhUX0tFWSgwMCwgRjE4KSwKKyAgICAuYXRDb2RlID0gQVRfS0VZKDAwLCBGMTgpLAorICAgIC5wczJDb2RlID0gMFgwMAorICB9LAorCisgIC8qIEYxOSAqLworICBbSElEX0tFWV9GMTldID0geworICAgIC54dENvZGUgPSBYVF9LRVkoMDAsIEYxOSksCisgICAgLmF0Q29kZSA9IEFUX0tFWSgwMCwgRjE5KSwKKyAgICAucHMyQ29kZSA9IDBYMDAKKyAgfSwKKworICAvKiBGMjAgKi8KKyAgW0hJRF9LRVlfRjIwXSA9IHsKKyAgICAueHRDb2RlID0gWFRfS0VZKDAwLCBGMjApLAorICAgIC5hdENvZGUgPSBBVF9LRVkoMDAsIEYyMCksCisgICAgLnBzMkNvZGUgPSAwWDAwCisgIH0sCisKKyAgLyogRjIxICovCisgIFtISURfS0VZX0YyMV0gPSB7CisgICAgLnh0Q29kZSA9IFhUX0tFWSgwMCwgRjIxKSwKKyAgICAuYXRDb2RlID0gQVRfS0VZKDAwLCBGMjEpLAorICAgIC5wczJDb2RlID0gMFgwMAorICB9LAorCisgIC8qIEYyMiAqLworICBbSElEX0tFWV9GMjJdID0geworICAgIC54dENvZGUgPSBYVF9LRVkoMDAsIEYyMiksCisgICAgLmF0Q29kZSA9IEFUX0tFWSgwMCwgRjIyKSwKKyAgICAucHMyQ29kZSA9IDBYMDAKKyAgfSwKKworICAvKiBGMjMgKi8KKyAgW0hJRF9LRVlfRjIzXSA9IHsKKyAgICAueHRDb2RlID0gWFRfS0VZKDAwLCBGMjMpLAorICAgIC5hdENvZGUgPSBBVF9LRVkoMDAsIEYyMyksCisgICAgLnBzMkNvZGUgPSAwWDAwCisgIH0sCisKKyAgLyogRjI0ICovCisgIFtISURfS0VZX0YyNF0gPSB7CisgICAgLnh0Q29kZSA9IFhUX0tFWSgwMCwgRjI0KSwKKyAgICAuYXRDb2RlID0gQVRfS0VZKDAwLCBGMjQpLAorICAgIC5wczJDb2RlID0gMFgwMAorICB9LAorCisgIC8qIEtleWJvYXJkIEV4ZWN1dGUgKi8KKyAgW0hJRF9LRVlfRXhlY3V0ZV0gPSB7CisgICAgLnh0Q29kZSA9IDBYMDAwMCwKKyAgICAuYXRDb2RlID0gMFgwMDAwLAorICAgIC5wczJDb2RlID0gMFgwMAorICB9LAorCisgIC8qIEtleWJvYXJkIEhlbHAgKi8KKyAgW0hJRF9LRVlfSGVscF0gPSB7CisgICAgLnh0Q29kZSA9IFhUX0tFWShFMCwgSGVscCksCisgICAgLmF0Q29kZSA9IEFUX0tFWShFMCwgSGVscCksCisgICAgLnBzMkNvZGUgPSAwWDAwCisgIH0sCisKKyAgLyogS2V5Ym9hcmQgTWVudSAqLworICBbSElEX0tFWV9NZW51XSA9IHsKKyAgICAueHRDb2RlID0gMFgwMDAwLAorICAgIC5hdENvZGUgPSAwWDAwMDAsCisgICAgLnBzMkNvZGUgPSAwWDAwCisgIH0sCisKKyAgLyogS2V5Ym9hcmQgU2VsZWN0ICovCisgIFtISURfS0VZX1NlbGVjdF0gPSB7CisgICAgLnh0Q29kZSA9IDBYMDAwMCwKKyAgICAuYXRDb2RlID0gMFgwMDAwLAorICAgIC5wczJDb2RlID0gMFgwMAorICB9LAorCisgIC8qIEtleWJvYXJkIFN0b3AgKi8KKyAgW0hJRF9LRVlfU3RvcF0gPSB7CisgICAgLnh0Q29kZSA9IDBYMDAwMCwKKyAgICAuYXRDb2RlID0gMFgwMDAwLAorICAgIC5wczJDb2RlID0gMFgwMAorICB9LAorCisgIC8qIEtleWJvYXJkIEFnYWluICovCisgIFtISURfS0VZX0FnYWluXSA9IHsKKyAgICAueHRDb2RlID0gMFgwMDAwLAorICAgIC5hdENvZGUgPSAwWDAwMDAsCisgICAgLnBzMkNvZGUgPSAwWDAwCisgIH0sCisKKyAgLyogS2V5Ym9hcmQgVW5kbyAqLworICBbSElEX0tFWV9VbmRvXSA9IHsKKyAgICAueHRDb2RlID0gWFRfS0VZKEUwLCBVbmRvKSwKKyAgICAuYXRDb2RlID0gQVRfS0VZKEUwLCBVbmRvKSwKKyAgICAucHMyQ29kZSA9IDBYMDAKKyAgfSwKKworICAvKiBLZXlib2FyZCBDdXQgKi8KKyAgW0hJRF9LRVlfQ3V0XSA9IHsKKyAgICAueHRDb2RlID0gWFRfS0VZKEUwLCBDdXQpLAorICAgIC5hdENvZGUgPSBBVF9LRVkoRTAsIEN1dCksCisgICAgLnBzMkNvZGUgPSAwWDAwCisgIH0sCisKKyAgLyogS2V5Ym9hcmQgQ29weSAqLworICBbSElEX0tFWV9Db3B5XSA9IHsKKyAgICAueHRDb2RlID0gWFRfS0VZKEUwLCBDb3B5KSwKKyAgICAuYXRDb2RlID0gQVRfS0VZKEUwLCBDb3B5KSwKKyAgICAucHMyQ29kZSA9IDBYMDAKKyAgfSwKKworICAvKiBLZXlib2FyZCBQYXN0ZSAqLworICBbSElEX0tFWV9QYXN0ZV0gPSB7CisgICAgLnh0Q29kZSA9IFhUX0tFWShFMCwgUGFzdGUpLAorICAgIC5hdENvZGUgPSBBVF9LRVkoRTAsIFBhc3RlKSwKKyAgICAucHMyQ29kZSA9IDBYMDAKKyAgfSwKKworICAvKiBLZXlib2FyZCBGaW5kICovCisgIFtISURfS0VZX0ZpbmRdID0geworICAgIC54dENvZGUgPSAwWDAwMDAsCisgICAgLmF0Q29kZSA9IDBYMDAwMCwKKyAgICAucHMyQ29kZSA9IDBYMDAKKyAgfSwKKworICAvKiBLZXlib2FyZCBNdXRlICovCisgIFtISURfS0VZX011dGVdID0geworICAgIC54dENvZGUgPSBYVF9LRVkoRTAsIE11dGUpLAorICAgIC5hdENvZGUgPSBBVF9LRVkoRTAsIE11dGUpLAorICAgIC5wczJDb2RlID0gMFgwMAorICB9LAorCisgIC8qIEtleWJvYXJkIFZvbHVtZSBVcCAqLworICBbSElEX0tFWV9Wb2x1bWVVcF0gPSB7CisgICAgLnh0Q29kZSA9IFhUX0tFWShFMCwgVm9sdW1lVXApLAorICAgIC5hdENvZGUgPSBBVF9LRVkoRTAsIFZvbHVtZVVwKSwKKyAgICAucHMyQ29kZSA9IDBYMDAKKyAgfSwKKworICAvKiBLZXlib2FyZCBWb2x1bWUgRG4gKi8KKyAgW0hJRF9LRVlfVm9sdW1lRG93bl0gPSB7CisgICAgLnh0Q29kZSA9IFhUX0tFWShFMCwgVm9sdW1lRG93biksCisgICAgLmF0Q29kZSA9IEFUX0tFWShFMCwgVm9sdW1lRG93biksCisgICAgLnBzMkNvZGUgPSAwWDAwCisgIH0sCisKKyAgLyogQ2FwcyBMb2NrICovCisgIFtISURfS0VZX0NhcHNMb2NraW5nXSA9IHsKKyAgICAueHRDb2RlID0gMFgwMDAwLAorICAgIC5hdENvZGUgPSAwWDAwMDAsCisgICAgLnBzMkNvZGUgPSAwWDAwCisgIH0sCisKKyAgLyogTnVtIExvY2sgKi8KKyAgW0hJRF9LRVlfTnVtTG9ja2luZ10gPSB7CisgICAgLnh0Q29kZSA9IDBYMDAwMCwKKyAgICAuYXRDb2RlID0gMFgwMDAwLAorICAgIC5wczJDb2RlID0gMFgwMAorICB9LAorCisgIC8qIFNjcm9sbCBMb2NrICovCisgIFtISURfS0VZX1Njcm9sbExvY2tpbmddID0geworICAgIC54dENvZGUgPSAwWDAwMDAsCisgICAgLmF0Q29kZSA9IDBYMDAwMCwKKyAgICAucHMyQ29kZSA9IDBYMDAKKyAgfSwKKworICAvKiBLZXlwYWQgLCAoQnJhemlsaWFuIEtleXBhZCAuKSAqLworICBbSElEX0tFWV9LUENvbW1hXSA9IHsKKyAgICAueHRDb2RlID0gWFRfS0VZKDAwLCBLUENvbW1hKSwKKyAgICAuYXRDb2RlID0gQVRfS0VZKDAwLCBLUENvbW1hKSwKKyAgICAucHMyQ29kZSA9IFBTMl9LRVlfS1BDb21tYQorICB9LAorCisgIC8qIEtleWJvYXJkIEVxdWFsIFNpZ24gKi8KKyAgW0hJRF9LRVlfRXF1YWxfWDFdID0geworICAgIC54dENvZGUgPSBYVF9LRVkoMDAsIEVxdWFsKSwKKyAgICAuYXRDb2RlID0gQVRfS0VZKDAwLCBFcXVhbCksCisgICAgLnBzMkNvZGUgPSBQUzJfS0VZX0VxdWFsCisgIH0sCisKKyAgLyogS2V5Ym9hcmQgSW50J2wgMSAoUm8pICovCisgIFtISURfS0VZX0ludGVybmF0aW9uYWwxXSA9IHsKKyAgICAueHRDb2RlID0gWFRfS0VZKDAwLCBJbnRlcm5hdGlvbmFsMSksCisgICAgLmF0Q29kZSA9IEFUX0tFWSgwMCwgSW50ZXJuYXRpb25hbDEpLAorICAgIC5wczJDb2RlID0gUFMyX0tFWV9JbnRlcm5hdGlvbmFsMQorICB9LAorCisgIC8qIEtleWJvYXJkIEludGwnMiAoS2F0YWthbmEvSGlyYWdhbmEpICovCisgIFtISURfS0VZX0ludGVybmF0aW9uYWwyXSA9IHsKKyAgICAueHRDb2RlID0gWFRfS0VZKDAwLCBJbnRlcm5hdGlvbmFsMiksCisgICAgLmF0Q29kZSA9IEFUX0tFWSgwMCwgSW50ZXJuYXRpb25hbDIpLAorICAgIC5wczJDb2RlID0gUFMyX0tFWV9JbnRlcm5hdGlvbmFsMgorICB9LAorCisgIC8qIEtleWJvYXJkIEludCdsIDMgKFllbikgKi8KKyAgW0hJRF9LRVlfSW50ZXJuYXRpb25hbDNdID0geworICAgIC54dENvZGUgPSBYVF9LRVkoMDAsIEludGVybmF0aW9uYWwzKSwKKyAgICAuYXRDb2RlID0gQVRfS0VZKDAwLCBJbnRlcm5hdGlvbmFsMyksCisgICAgLnBzMkNvZGUgPSBQUzJfS0VZX0ludGVybmF0aW9uYWwzCisgIH0sCisKKyAgLyogS2V5Ym9hcmQgSW50J2wgNCAoSGVua2FuKSAqLworICBbSElEX0tFWV9JbnRlcm5hdGlvbmFsNF0gPSB7CisgICAgLnh0Q29kZSA9IFhUX0tFWSgwMCwgSW50ZXJuYXRpb25hbDQpLAorICAgIC5hdENvZGUgPSBBVF9LRVkoMDAsIEludGVybmF0aW9uYWw0KSwKKyAgICAucHMyQ29kZSA9IFBTMl9LRVlfSW50ZXJuYXRpb25hbDQKKyAgfSwKKworICAvKiBLZXlib2FyZCBJbnQnbCA1IChNdWhlbmthbikgKi8KKyAgW0hJRF9LRVlfSW50ZXJuYXRpb25hbDVdID0geworICAgIC54dENvZGUgPSBYVF9LRVkoMDAsIEludGVybmF0aW9uYWw1KSwKKyAgICAuYXRDb2RlID0gQVRfS0VZKDAwLCBJbnRlcm5hdGlvbmFsNSksCisgICAgLnBzMkNvZGUgPSBQUzJfS0VZX0ludGVybmF0aW9uYWw1CisgIH0sCisKKyAgLyogS2V5Ym9hcmQgSW50J2wgNiAoUEM5ODAwIEtleXBhZCAsKSAqLworICBbSElEX0tFWV9JbnRlcm5hdGlvbmFsNl0gPSB7CisgICAgLnh0Q29kZSA9IFhUX0tFWSgwMCwgSW50ZXJuYXRpb25hbDYpLAorICAgIC5hdENvZGUgPSBBVF9LRVkoMDAsIEludGVybmF0aW9uYWw2KSwKKyAgICAucHMyQ29kZSA9IDBYMDAKKyAgfSwKKworICAvKiBLZXlib2FyZCBJbnQnbCA3ICovCisgIFtISURfS0VZX0ludGVybmF0aW9uYWw3XSA9IHsKKyAgICAueHRDb2RlID0gMFgwMDAwLAorICAgIC5hdENvZGUgPSAwWDAwMDAsCisgICAgLnBzMkNvZGUgPSAwWDAwCisgIH0sCisKKyAgLyogS2V5Ym9hcmQgSW50J2wgOCAqLworICBbSElEX0tFWV9JbnRlcm5hdGlvbmFsOF0gPSB7CisgICAgLnh0Q29kZSA9IDBYMDAwMCwKKyAgICAuYXRDb2RlID0gMFgwMDAwLAorICAgIC5wczJDb2RlID0gMFgwMAorICB9LAorCisgIC8qIEtleWJvYXJkIEludCdsIDkgKi8KKyAgW0hJRF9LRVlfSW50ZXJuYXRpb25hbDldID0geworICAgIC54dENvZGUgPSAwWDAwMDAsCisgICAgLmF0Q29kZSA9IDBYMDAwMCwKKyAgICAucHMyQ29kZSA9IDBYMDAKKyAgfSwKKworICAvKiBLZXlib2FyZCBMYW5nIDEgKEhhbmd1ZWwvRW5nbGlzaCkgKi8KKyAgW0hJRF9LRVlfTGFuZ3VhZ2UxXSA9IHsKKyAgICAueHRDb2RlID0gWFRfS0VZKDAwLCBMYW5ndWFnZTEpLAorICAgIC5hdENvZGUgPSBBVF9LRVkoMDAsIExhbmd1YWdlMSksCisgICAgLnBzMkNvZGUgPSAwWDAwCisgIH0sCisKKyAgLyogS2V5Ym9hcmQgTGFuZyAyIChIYW5qYSkgKi8KKyAgW0hJRF9LRVlfTGFuZ3VhZ2UyXSA9IHsKKyAgICAueHRDb2RlID0gWFRfS0VZKDAwLCBMYW5ndWFnZTIpLAorICAgIC5hdENvZGUgPSBBVF9LRVkoMDAsIExhbmd1YWdlMiksCisgICAgLnBzMkNvZGUgPSAwWDAwCisgIH0sCisKKyAgLyogS2V5Ym9hcmQgTGFuZyAzIChLYXRha2FuYSkgKi8KKyAgW0hJRF9LRVlfTGFuZ3VhZ2UzXSA9IHsKKyAgICAueHRDb2RlID0gWFRfS0VZKDAwLCBMYW5ndWFnZTMpLAorICAgIC5hdENvZGUgPSBBVF9LRVkoMDAsIExhbmd1YWdlMyksCisgICAgLnBzMkNvZGUgPSAwWDAwCisgIH0sCisKKyAgLyogS2V5Ym9hcmQgTGFuZyA0IChIaXJhZ2FuYSkgKi8KKyAgW0hJRF9LRVlfTGFuZ3VhZ2U0XSA9IHsKKyAgICAueHRDb2RlID0gWFRfS0VZKDAwLCBMYW5ndWFnZTQpLAorICAgIC5hdENvZGUgPSBBVF9LRVkoMDAsIExhbmd1YWdlNCksCisgICAgLnBzMkNvZGUgPSAwWDAwCisgIH0sCisKKyAgLyogS2V5Ym9hcmQgTGFuZyA1IChIaXJhZ2FuYSkgKi8KKyAgW0hJRF9LRVlfTGFuZ3VhZ2U1XSA9IHsKKyAgICAueHRDb2RlID0gWFRfS0VZKDAwLCBMYW5ndWFnZTUpLAorICAgIC5hdENvZGUgPSBBVF9LRVkoMDAsIExhbmd1YWdlNSksCisgICAgLnBzMkNvZGUgPSAwWDAwCisgIH0sCisKKyAgLyogS2V5Ym9hcmQgTGFuZyA2ICovCisgIFtISURfS0VZX0xhbmd1YWdlNl0gPSB7CisgICAgLnh0Q29kZSA9IDBYMDAwMCwKKyAgICAuYXRDb2RlID0gMFgwMDAwLAorICAgIC5wczJDb2RlID0gMFgwMAorICB9LAorCisgIC8qIEtleWJvYXJkIExhbmcgNyAqLworICBbSElEX0tFWV9MYW5ndWFnZTddID0geworICAgIC54dENvZGUgPSAwWDAwMDAsCisgICAgLmF0Q29kZSA9IDBYMDAwMCwKKyAgICAucHMyQ29kZSA9IDBYMDAKKyAgfSwKKworICAvKiBLZXlib2FyZCBMYW5nIDggKi8KKyAgW0hJRF9LRVlfTGFuZ3VhZ2U4XSA9IHsKKyAgICAueHRDb2RlID0gMFgwMDAwLAorICAgIC5hdENvZGUgPSAwWDAwMDAsCisgICAgLnBzMkNvZGUgPSAwWDAwCisgIH0sCisKKyAgLyogS2V5Ym9hcmQgTGFuZyA5ICovCisgIFtISURfS0VZX0xhbmd1YWdlOV0gPSB7CisgICAgLnh0Q29kZSA9IDBYMDAwMCwKKyAgICAuYXRDb2RlID0gMFgwMDAwLAorICAgIC5wczJDb2RlID0gMFgwMAorICB9LAorCisgIC8qIEtleWJvYXJkIEFsdGVybmF0ZSBFcmFzZSAqLworICBbSElEX0tFWV9BbHRlcm5hdGVFcmFzZV0gPSB7CisgICAgLnh0Q29kZSA9IDBYMDAwMCwKKyAgICAuYXRDb2RlID0gMFgwMDAwLAorICAgIC5wczJDb2RlID0gMFgwMAorICB9LAorCisgIC8qIEtleWJvYXJkIFN5c1JlcS9BdHRlbnRpb24gKi8KKyAgW0hJRF9LRVlfU3lzdGVtUmVlcXVlc3RdID0geworICAgIC54dENvZGUgPSBYVF9LRVkoMDAsIFN5c3RlbVJlcXVlc3QpLAorICAgIC5hdENvZGUgPSBBVF9LRVkoMDAsIFN5c3RlbVJlcXVlc3QpLAorICAgIC5wczJDb2RlID0gMFgwMAorICB9LAorCisgIC8qIEtleWJvYXJkIENhbmNlbCAqLworICBbSElEX0tFWV9DYW5jZWxdID0geworICAgIC54dENvZGUgPSAwWDAwMDAsCisgICAgLmF0Q29kZSA9IDBYMDAwMCwKKyAgICAucHMyQ29kZSA9IDBYMDAKKyAgfSwKKworICAvKiBLZXlib2FyZCBDbGVhciAqLworICBbSElEX0tFWV9DbGVhcl0gPSB7CisgICAgLnh0Q29kZSA9IDBYMDAwMCwKKyAgICAuYXRDb2RlID0gMFgwMDAwLAorICAgIC5wczJDb2RlID0gMFgwMAorICB9LAorCisgIC8qIEtleWJvYXJkIFByaW9yICovCisgIFtISURfS0VZX1ByaW9yXSA9IHsKKyAgICAueHRDb2RlID0gMFgwMDAwLAorICAgIC5hdENvZGUgPSAwWDAwMDAsCisgICAgLnBzMkNvZGUgPSAwWDAwCisgIH0sCisKKyAgLyogS2V5Ym9hcmQgUmV0dXJuICovCisgIFtISURfS0VZX1JldHVybl0gPSB7CisgICAgLnh0Q29kZSA9IDBYMDAwMCwKKyAgICAuYXRDb2RlID0gMFgwMDAwLAorICAgIC5wczJDb2RlID0gMFgwMAorICB9LAorCisgIC8qIEtleWJvYXJkIFNlcGFyYXRvciAqLworICBbSElEX0tFWV9TZXBhcmF0b3JdID0geworICAgIC54dENvZGUgPSAwWDAwMDAsCisgICAgLmF0Q29kZSA9IDBYMDAwMCwKKyAgICAucHMyQ29kZSA9IDBYMDAKKyAgfSwKKworICAvKiBLZXlib2FyZCBPdXQgKi8KKyAgW0hJRF9LRVlfT3V0XSA9IHsKKyAgICAueHRDb2RlID0gMFgwMDAwLAorICAgIC5hdENvZGUgPSAwWDAwMDAsCisgICAgLnBzMkNvZGUgPSAwWDAwCisgIH0sCisKKyAgLyogS2V5Ym9hcmQgT3BlciAqLworICBbSElEX0tFWV9PcGVyXSA9IHsKKyAgICAueHRDb2RlID0gMFgwMDAwLAorICAgIC5hdENvZGUgPSAwWDAwMDAsCisgICAgLnBzMkNvZGUgPSAwWDAwCisgIH0sCisKKyAgLyogS2V5Ym9hcmQgQ2xlYXIvQWdhaW4gKi8KKyAgW0hJRF9LRVlfQ2xlYXJBZ2Fpbl0gPSB7CisgICAgLnh0Q29kZSA9IDBYMDAwMCwKKyAgICAuYXRDb2RlID0gMFgwMDAwLAorICAgIC5wczJDb2RlID0gMFgwMAorICB9LAorCisgIC8qIEtleWJvYXJkIENyU2VsL1Byb3BzICovCisgIFtISURfS0VZX0NyU2VsXSA9IHsKKyAgICAueHRDb2RlID0gWFRfS0VZKDAwLCBDclNlbCksCisgICAgLmF0Q29kZSA9IEFUX0tFWSgwMCwgQ3JTZWwpLAorICAgIC5wczJDb2RlID0gUFMyX0tFWV9DclNlbAorICB9LAorCisgIC8qIEtleWJvYXJkIEV4U2VsICovCisgIFtISURfS0VZX0V4U2VsXSA9IHsKKyAgICAueHRDb2RlID0gWFRfS0VZKDAwLCBFeFNlbCksCisgICAgLmF0Q29kZSA9IEFUX0tFWSgwMCwgRXhTZWwpLAorICAgIC5wczJDb2RlID0gUFMyX0tFWV9FeFNlbAorICB9LAorCisgIC8qIHh4eCAqLworICBbSElEX0tFWV9LUDAwXSA9IHsKKyAgICAueHRDb2RlID0gMFgwMDAwLAorICAgIC5hdENvZGUgPSAwWDAwMDAsCisgICAgLnBzMkNvZGUgPSAwWDAwCisgIH0sCisKKyAgLyogeHh4ICovCisgIFtISURfS0VZX0tQMDAwXSA9IHsKKyAgICAueHRDb2RlID0gMFgwMDAwLAorICAgIC5hdENvZGUgPSAwWDAwMDAsCisgICAgLnBzMkNvZGUgPSAwWDAwCisgIH0sCisKKyAgLyogeHh4ICovCisgIFtISURfS0VZX0tQVGhvdXNhbmRzU2VwYXJhdG9yXSA9IHsKKyAgICAueHRDb2RlID0gMFgwMDAwLAorICAgIC5hdENvZGUgPSAwWDAwMDAsCisgICAgLnBzMkNvZGUgPSAwWDAwCisgIH0sCisKKyAgLyogeHh4ICovCisgIFtISURfS0VZX0tQRGVjaW1hbFNlcGFyYXRvcl0gPSB7CisgICAgLnh0Q29kZSA9IDBYMDAwMCwKKyAgICAuYXRDb2RlID0gMFgwMDAwLAorICAgIC5wczJDb2RlID0gMFgwMAorICB9LAorCisgIC8qIHh4eCAqLworICBbSElEX0tFWV9LUEN1cnJlbmN5VW5pdF0gPSB7CisgICAgLnh0Q29kZSA9IDBYMDAwMCwKKyAgICAuYXRDb2RlID0gMFgwMDAwLAorICAgIC5wczJDb2RlID0gMFgwMAorICB9LAorCisgIC8qIHh4eCAqLworICBbSElEX0tFWV9LUEN1cnJlbmN5U3VidW5pdF0gPSB7CisgICAgLnh0Q29kZSA9IDBYMDAwMCwKKyAgICAuYXRDb2RlID0gMFgwMDAwLAorICAgIC5wczJDb2RlID0gMFgwMAorICB9LAorCisgIC8qIHh4eCAqLworICBbSElEX0tFWV9LUExlZnRQYXJlbnRoZXNpc10gPSB7CisgICAgLnh0Q29kZSA9IDBYMDAwMCwKKyAgICAuYXRDb2RlID0gMFgwMDAwLAorICAgIC5wczJDb2RlID0gMFgwMAorICB9LAorCisgIC8qIHh4eCAqLworICBbSElEX0tFWV9LUFJpZ2h0UGFyZW50aGVzaXNdID0geworICAgIC54dENvZGUgPSAwWDAwMDAsCisgICAgLmF0Q29kZSA9IDBYMDAwMCwKKyAgICAucHMyQ29kZSA9IDBYMDAKKyAgfSwKKworICAvKiB4eHggKi8KKyAgW0hJRF9LRVlfS1BMZWZ0QnJhY2VdID0geworICAgIC54dENvZGUgPSAwWDAwMDAsCisgICAgLmF0Q29kZSA9IDBYMDAwMCwKKyAgICAucHMyQ29kZSA9IDBYMDAKKyAgfSwKKworICAvKiB4eHggKi8KKyAgW0hJRF9LRVlfS1BSaWdodEJyYWNlXSA9IHsKKyAgICAueHRDb2RlID0gMFgwMDAwLAorICAgIC5hdENvZGUgPSAwWDAwMDAsCisgICAgLnBzMkNvZGUgPSAwWDAwCisgIH0sCisKKyAgLyogeHh4ICovCisgIFtISURfS0VZX0tQVGFiXSA9IHsKKyAgICAueHRDb2RlID0gMFgwMDAwLAorICAgIC5hdENvZGUgPSAwWDAwMDAsCisgICAgLnBzMkNvZGUgPSAwWDAwCisgIH0sCisKKyAgLyogeHh4ICovCisgIFtISURfS0VZX0tQQmFja3NwYWNlXSA9IHsKKyAgICAueHRDb2RlID0gMFgwMDAwLAorICAgIC5hdENvZGUgPSAwWDAwMDAsCisgICAgLnBzMkNvZGUgPSAwWDAwCisgIH0sCisKKyAgLyogeHh4ICovCisgIFtISURfS0VZX0tQQV0gPSB7CisgICAgLnh0Q29kZSA9IDBYMDAwMCwKKyAgICAuYXRDb2RlID0gMFgwMDAwLAorICAgIC5wczJDb2RlID0gMFgwMAorICB9LAorCisgIC8qIHh4eCAqLworICBbSElEX0tFWV9LUEJdID0geworICAgIC54dENvZGUgPSAwWDAwMDAsCisgICAgLmF0Q29kZSA9IDBYMDAwMCwKKyAgICAucHMyQ29kZSA9IDBYMDAKKyAgfSwKKworICAvKiB4eHggKi8KKyAgW0hJRF9LRVlfS1BDXSA9IHsKKyAgICAueHRDb2RlID0gMFgwMDAwLAorICAgIC5hdENvZGUgPSAwWDAwMDAsCisgICAgLnBzMkNvZGUgPSAwWDAwCisgIH0sCisKKyAgLyogeHh4ICovCisgIFtISURfS0VZX0tQRF0gPSB7CisgICAgLnh0Q29kZSA9IDBYMDAwMCwKKyAgICAuYXRDb2RlID0gMFgwMDAwLAorICAgIC5wczJDb2RlID0gMFgwMAorICB9LAorCisgIC8qIHh4eCAqLworICBbSElEX0tFWV9LUEVdID0geworICAgIC54dENvZGUgPSAwWDAwMDAsCisgICAgLmF0Q29kZSA9IDBYMDAwMCwKKyAgICAucHMyQ29kZSA9IDBYMDAKKyAgfSwKKworICAvKiB4eHggKi8KKyAgW0hJRF9LRVlfS1BGXSA9IHsKKyAgICAueHRDb2RlID0gMFgwMDAwLAorICAgIC5hdENvZGUgPSAwWDAwMDAsCisgICAgLnBzMkNvZGUgPSAwWDAwCisgIH0sCisKKyAgLyogeHh4ICovCisgIFtISURfS0VZX0tQQml0d2lzZVhvcl0gPSB7CisgICAgLnh0Q29kZSA9IDBYMDAwMCwKKyAgICAuYXRDb2RlID0gMFgwMDAwLAorICAgIC5wczJDb2RlID0gMFgwMAorICB9LAorCisgIC8qIHh4eCAqLworICBbSElEX0tFWV9LUEV4cG9uZW50aWF0ZV0gPSB7CisgICAgLnh0Q29kZSA9IDBYMDAwMCwKKyAgICAuYXRDb2RlID0gMFgwMDAwLAorICAgIC5wczJDb2RlID0gMFgwMAorICB9LAorCisgIC8qIHh4eCAqLworICBbSElEX0tFWV9LUG1vZHVsb10gPSB7CisgICAgLnh0Q29kZSA9IDBYMDAwMCwKKyAgICAuYXRDb2RlID0gMFgwMDAwLAorICAgIC5wczJDb2RlID0gMFgwMAorICB9LAorCisgIC8qIHh4eCAqLworICBbSElEX0tFWV9LUExlc3NdID0geworICAgIC54dENvZGUgPSAwWDAwMDAsCisgICAgLmF0Q29kZSA9IDBYMDAwMCwKKyAgICAucHMyQ29kZSA9IDBYMDAKKyAgfSwKKworICAvKiB4eHggKi8KKyAgW0hJRF9LRVlfS1BHcmVhdGVyXSA9IHsKKyAgICAueHRDb2RlID0gMFgwMDAwLAorICAgIC5hdENvZGUgPSAwWDAwMDAsCisgICAgLnBzMkNvZGUgPSAwWDAwCisgIH0sCisKKyAgLyogeHh4ICovCisgIFtISURfS0VZX0tQQml0d2lzZUFuZF0gPSB7CisgICAgLnh0Q29kZSA9IDBYMDAwMCwKKyAgICAuYXRDb2RlID0gMFgwMDAwLAorICAgIC5wczJDb2RlID0gMFgwMAorICB9LAorCisgIC8qIHh4eCAqLworICBbSElEX0tFWV9LUEJvb2xlYW5BbmRdID0geworICAgIC54dENvZGUgPSAwWDAwMDAsCisgICAgLmF0Q29kZSA9IDBYMDAwMCwKKyAgICAucHMyQ29kZSA9IDBYMDAKKyAgfSwKKworICAvKiB4eHggKi8KKyAgW0hJRF9LRVlfS1BCaXR3aXNlT3JdID0geworICAgIC54dENvZGUgPSAwWDAwMDAsCisgICAgLmF0Q29kZSA9IDBYMDAwMCwKKyAgICAucHMyQ29kZSA9IDBYMDAKKyAgfSwKKworICAvKiB4eHggKi8KKyAgW0hJRF9LRVlfS1BCb29sZWFuT3JdID0geworICAgIC54dENvZGUgPSAwWDAwMDAsCisgICAgLmF0Q29kZSA9IDBYMDAwMCwKKyAgICAucHMyQ29kZSA9IDBYMDAKKyAgfSwKKworICAvKiB4eHggKi8KKyAgW0hJRF9LRVlfS1BDb2xvbl0gPSB7CisgICAgLnh0Q29kZSA9IDBYMDAwMCwKKyAgICAuYXRDb2RlID0gMFgwMDAwLAorICAgIC5wczJDb2RlID0gMFgwMAorICB9LAorCisgIC8qIHh4eCAqLworICBbSElEX0tFWV9LUE51bWJlcl0gPSB7CisgICAgLnh0Q29kZSA9IDBYMDAwMCwKKyAgICAuYXRDb2RlID0gMFgwMDAwLAorICAgIC5wczJDb2RlID0gMFgwMAorICB9LAorCisgIC8qIHh4eCAqLworICBbSElEX0tFWV9LUFNwYWNlXSA9IHsKKyAgICAueHRDb2RlID0gMFgwMDAwLAorICAgIC5hdENvZGUgPSAwWDAwMDAsCisgICAgLnBzMkNvZGUgPSAwWDAwCisgIH0sCisKKyAgLyogeHh4ICovCisgIFtISURfS0VZX0tQQXRdID0geworICAgIC54dENvZGUgPSAwWDAwMDAsCisgICAgLmF0Q29kZSA9IDBYMDAwMCwKKyAgICAucHMyQ29kZSA9IDBYMDAKKyAgfSwKKworICAvKiB4eHggKi8KKyAgW0hJRF9LRVlfS1BCb29sZWFuTm90XSA9IHsKKyAgICAueHRDb2RlID0gMFgwMDAwLAorICAgIC5hdENvZGUgPSAwWDAwMDAsCisgICAgLnBzMkNvZGUgPSAwWDAwCisgIH0sCisKKyAgLyogeHh4ICovCisgIFtISURfS0VZX0tQTWVtb3J5U3RvcmVdID0geworICAgIC54dENvZGUgPSAwWDAwMDAsCisgICAgLmF0Q29kZSA9IDBYMDAwMCwKKyAgICAucHMyQ29kZSA9IDBYMDAKKyAgfSwKKworICAvKiB4eHggKi8KKyAgW0hJRF9LRVlfS1BNZW1vcnlSZWNhbGxdID0geworICAgIC54dENvZGUgPSAwWDAwMDAsCisgICAgLmF0Q29kZSA9IDBYMDAwMCwKKyAgICAucHMyQ29kZSA9IDBYMDAKKyAgfSwKKworICAvKiB4eHggKi8KKyAgW0hJRF9LRVlfS1BNZW1vcnlDbGVhcl0gPSB7CisgICAgLnh0Q29kZSA9IDBYMDAwMCwKKyAgICAuYXRDb2RlID0gMFgwMDAwLAorICAgIC5wczJDb2RlID0gMFgwMAorICB9LAorCisgIC8qIHh4eCAqLworICBbSElEX0tFWV9LUE1lbW9yeUFkZF0gPSB7CisgICAgLnh0Q29kZSA9IDBYMDAwMCwKKyAgICAuYXRDb2RlID0gMFgwMDAwLAorICAgIC5wczJDb2RlID0gMFgwMAorICB9LAorCisgIC8qIHh4eCAqLworICBbSElEX0tFWV9LUE1lbW9yeVN1YnRyYWN0XSA9IHsKKyAgICAueHRDb2RlID0gMFgwMDAwLAorICAgIC5hdENvZGUgPSAwWDAwMDAsCisgICAgLnBzMkNvZGUgPSAwWDAwCisgIH0sCisKKyAgLyogeHh4ICovCisgIFtISURfS0VZX0tQTWVtb3J5TXVsdGlwbHldID0geworICAgIC54dENvZGUgPSAwWDAwMDAsCisgICAgLmF0Q29kZSA9IDBYMDAwMCwKKyAgICAucHMyQ29kZSA9IDBYMDAKKyAgfSwKKworICAvKiB4eHggKi8KKyAgW0hJRF9LRVlfS1BNZW1vcnlEaXZpZGVdID0geworICAgIC54dENvZGUgPSAwWDAwMDAsCisgICAgLmF0Q29kZSA9IDBYMDAwMCwKKyAgICAucHMyQ29kZSA9IDBYMDAKKyAgfSwKKworICAvKiB4eHggKi8KKyAgW0hJRF9LRVlfS1BQbHVzTWludXNdID0geworICAgIC54dENvZGUgPSAwWDAwMDAsCisgICAgLmF0Q29kZSA9IDBYMDAwMCwKKyAgICAucHMyQ29kZSA9IDBYMDAKKyAgfSwKKworICAvKiB4eHggKi8KKyAgW0hJRF9LRVlfS1BDbGVhcl0gPSB7CisgICAgLnh0Q29kZSA9IDBYMDAwMCwKKyAgICAuYXRDb2RlID0gMFgwMDAwLAorICAgIC5wczJDb2RlID0gMFgwMAorICB9LAorCisgIC8qIHh4eCAqLworICBbSElEX0tFWV9LUENsZWFyRW50cnldID0geworICAgIC54dENvZGUgPSAwWDAwMDAsCisgICAgLmF0Q29kZSA9IDBYMDAwMCwKKyAgICAucHMyQ29kZSA9IDBYMDAKKyAgfSwKKworICAvKiB4eHggKi8KKyAgW0hJRF9LRVlfS1BCaW5hcnldID0geworICAgIC54dENvZGUgPSAwWDAwMDAsCisgICAgLmF0Q29kZSA9IDBYMDAwMCwKKyAgICAucHMyQ29kZSA9IDBYMDAKKyAgfSwKKworICAvKiB4eHggKi8KKyAgW0hJRF9LRVlfS1BPY3RhbF0gPSB7CisgICAgLnh0Q29kZSA9IDBYMDAwMCwKKyAgICAuYXRDb2RlID0gMFgwMDAwLAorICAgIC5wczJDb2RlID0gMFgwMAorICB9LAorCisgIC8qIHh4eCAqLworICBbSElEX0tFWV9LUERlY2ltYWxdID0geworICAgIC54dENvZGUgPSAwWDAwMDAsCisgICAgLmF0Q29kZSA9IDBYMDAwMCwKKyAgICAucHMyQ29kZSA9IDBYMDAKKyAgfSwKKworICAvKiB4eHggKi8KKyAgW0hJRF9LRVlfS1BIZXhhZGVjaW1hbF0gPSB7CisgICAgLnh0Q29kZSA9IDBYMDAwMCwKKyAgICAuYXRDb2RlID0gMFgwMDAwLAorICAgIC5wczJDb2RlID0gMFgwMAorICB9LAorCisgIC8qIExlZnQgQ29udHJvbCAqLworICBbSElEX0tFWV9MZWZ0Q29udHJvbF0gPSB7CisgICAgLnh0Q29kZSA9IFhUX0tFWSgwMCwgTGVmdENvbnRyb2wpLAorICAgIC5hdENvZGUgPSBBVF9LRVkoMDAsIExlZnRDb250cm9sKSwKKyAgICAucHMyQ29kZSA9IFBTMl9LRVlfTGVmdENvbnRyb2wKKyAgfSwKKworICAvKiBMZWZ0IFNoaWZ0ICovCisgIFtISURfS0VZX0xlZnRTaGlmdF0gPSB7CisgICAgLnh0Q29kZSA9IFhUX0tFWSgwMCwgTGVmdFNoaWZ0KSwKKyAgICAuYXRDb2RlID0gQVRfS0VZKDAwLCBMZWZ0U2hpZnQpLAorICAgIC5wczJDb2RlID0gUFMyX0tFWV9MZWZ0U2hpZnQKKyAgfSwKKworICAvKiBMZWZ0IEFsdCAqLworICBbSElEX0tFWV9MZWZ0QWx0XSA9IHsKKyAgICAueHRDb2RlID0gWFRfS0VZKDAwLCBMZWZ0QWx0KSwKKyAgICAuYXRDb2RlID0gQVRfS0VZKDAwLCBMZWZ0QWx0KSwKKyAgICAucHMyQ29kZSA9IFBTMl9LRVlfTGVmdEFsdAorICB9LAorCisgIC8qIExlZnQgR1VJICovCisgIFtISURfS0VZX0xlZnRHVUldID0geworICAgIC54dENvZGUgPSBYVF9LRVkoRTAsIExlZnRHVUkpLAorICAgIC5hdENvZGUgPSBBVF9LRVkoRTAsIExlZnRHVUkpLAorICAgIC5wczJDb2RlID0gUFMyX0tFWV9MZWZ0R1VJCisgIH0sCisKKyAgLyogUmlnaHQgQ29udHJvbCAqLworICBbSElEX0tFWV9SaWdodENvbnRyb2xdID0geworICAgIC54dENvZGUgPSBYVF9LRVkoRTAsIFJpZ2h0Q29udHJvbCksCisgICAgLmF0Q29kZSA9IEFUX0tFWShFMCwgUmlnaHRDb250cm9sKSwKKyAgICAucHMyQ29kZSA9IFBTMl9LRVlfUmlnaHRDb250cm9sCisgIH0sCisKKyAgLyogUmlnaHQgU2hpZnQgKi8KKyAgW0hJRF9LRVlfUmlnaHRTaGlmdF0gPSB7CisgICAgLnh0Q29kZSA9IFhUX0tFWSgwMCwgUmlnaHRTaGlmdCksCisgICAgLmF0Q29kZSA9IEFUX0tFWSgwMCwgUmlnaHRTaGlmdCksCisgICAgLnBzMkNvZGUgPSBQUzJfS0VZX1JpZ2h0U2hpZnQKKyAgfSwKKworICAvKiBSaWdodCBBbHQgKi8KKyAgW0hJRF9LRVlfUmlnaHRBbHRdID0geworICAgIC54dENvZGUgPSBYVF9LRVkoRTAsIFJpZ2h0QWx0KSwKKyAgICAuYXRDb2RlID0gQVRfS0VZKEUwLCBSaWdodEFsdCksCisgICAgLnBzMkNvZGUgPSBQUzJfS0VZX1JpZ2h0QWx0CisgIH0sCisKKyAgLyogUmlnaHQgR1VJICovCisgIFtISURfS0VZX1JpZ2h0R1VJXSA9IHsKKyAgICAueHRDb2RlID0gWFRfS0VZKEUwLCBSaWdodEdVSSksCisgICAgLmF0Q29kZSA9IEFUX0tFWShFMCwgUmlnaHRHVUkpLAorICAgIC5wczJDb2RlID0gUFMyX0tFWV9SaWdodEdVSQorICB9LAorfTsKKworc3RhdGljIGludAorZW5xdWV1ZVh0Q29kZSAodWludDhfdCBjb2RlKSB7CisgIHJldHVybiBlbnF1ZXVlQ29tbWFuZChCUkxfQ01EX0JMSyhQQVNTWFQpIHwgY29kZSk7Cit9CisKK3N0YXRpYyBpbnQKK2VucXVldWVIaWRLZXlFdmVudCAodW5zaWduZWQgY2hhciBrZXksIGludCBwcmVzcykgeworICBpZiAoa2V5IDwgQVJSQVlfQ09VTlQoaGlkS2V5VGFibGUpKSB7CisgICAgdWludDE2X3QgY29kZSA9IGhpZEtleVRhYmxlW2tleV0ueHRDb2RlOworCisgICAgaWYgKGNvZGUpIHsKKyAgICAgIHsKKyAgICAgICAgdWludDhfdCBlc2NhcGUgPSAoY29kZSA+PiA4KSAmIDBYRkY7CisKKyAgICAgICAgaWYgKGVzY2FwZSkKKyAgICAgICAgICBpZiAoIWVucXVldWVYdENvZGUoZXNjYXBlKSkKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgfQorCisgICAgICBjb2RlICY9IDBYRkY7CisKKyAgICAgIGlmICghcHJlc3MpIHsKKyAgICAgICAgaWYgKGNvZGUgJiAwWDgwKSByZXR1cm4gMTsKKyAgICAgICAgY29kZSB8PSAwWDgwOworICAgICAgfQorCisgICAgICBpZiAoIWVucXVldWVYdENvZGUoY29kZSkpIHJldHVybiAwOworICAgIH0KKyAgfQorCisgIHJldHVybiAxOworfQorCitzdGF0aWMgdW5zaWduZWQgY2hhcgorZ2V0UHJlc3NlZEtleXMgKGNvbnN0IEhpZEtleWJvYXJkUGFja2V0ICpwYWNrZXQsIHVuc2lnbmVkIGNoYXIgKmtleXMpIHsKKyAgdW5zaWduZWQgY2hhciBjb3VudCA9IDA7CisKKyAgeworICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIG1vZGlmaWVyc1tdID0geworICAgICAgSElEX0tFWV9MZWZ0Q29udHJvbCwKKyAgICAgIEhJRF9LRVlfTGVmdFNoaWZ0LAorICAgICAgSElEX0tFWV9MZWZ0QWx0LAorICAgICAgSElEX0tFWV9MZWZ0R1VJLAorICAgICAgSElEX0tFWV9SaWdodENvbnRyb2wsCisgICAgICBISURfS0VZX1JpZ2h0U2hpZnQsCisgICAgICBISURfS0VZX1JpZ2h0QWx0LAorICAgICAgSElEX0tFWV9SaWdodEdVSSwKKyAgICB9OworCisgICAgY29uc3QgdW5zaWduZWQgY2hhciAqbW9kaWZpZXIgPSBtb2RpZmllcnM7CisgICAgdWludDhfdCBiaXQgPSAwWDE7CisKKyAgICB3aGlsZSAoYml0KSB7CisgICAgICBpZiAocGFja2V0LT5tb2RpZmllcnMgJiBiaXQpIGtleXNbY291bnQrK10gPSAqbW9kaWZpZXI7CisgICAgICBtb2RpZmllciArPSAxOworICAgICAgYml0IDw8PSAxOworICAgIH0KKyAgfQorCisgIHsKKyAgICBpbnQgaW5kZXg7CisKKyAgICBmb3IgKGluZGV4PTA7IGluZGV4PDY7IGluZGV4Kz0xKSB7CisgICAgICB1bnNpZ25lZCBjaGFyIGtleSA9IHBhY2tldC0+a2V5c1tpbmRleF07CisgICAgICBpZiAoIWtleSkgYnJlYWs7CisgICAgICBrZXlzW2NvdW50KytdID0ga2V5OworICAgIH0KKyAgfQorCisgIHJldHVybiBjb3VudDsKK30KKwordm9pZAoraW5pdGlhbGl6ZUhpZEtleWJvYXJkUGFja2V0IChIaWRLZXlib2FyZFBhY2tldCAqcGFja2V0KSB7CisgIG1lbXNldChwYWNrZXQsIDAsIHNpemVvZigqcGFja2V0KSk7Cit9CisKK3ZvaWQKK3Byb2Nlc3NIaWRLZXlib2FyZFBhY2tldCAoCisgIEhpZEtleWJvYXJkUGFja2V0ICpvbGRQYWNrZXQsCisgIGNvbnN0IEhpZEtleWJvYXJkUGFja2V0ICpuZXdQYWNrZXQKKykgeworICB1bnNpZ25lZCBjaGFyIG9sZEtleXNbMTRdOworICB1bnNpZ25lZCBjaGFyIG9sZENvdW50ID0gZ2V0UHJlc3NlZEtleXMob2xkUGFja2V0LCBvbGRLZXlzKTsKKworICB1bnNpZ25lZCBjaGFyIG5ld0tleXNbMTRdOworICB1bnNpZ25lZCBjaGFyIG5ld0NvdW50ID0gZ2V0UHJlc3NlZEtleXMobmV3UGFja2V0LCBuZXdLZXlzKTsKKworICBCSVRNQVNLKHByZXNzZWRLZXlzLCAwWDEwMCwgY2hhcik7CisgIHVuc2lnbmVkIGNoYXIgaW5kZXg7CisKKyAgQklUTUFTS19aRVJPKHByZXNzZWRLZXlzKTsKKworICBmb3IgKGluZGV4PTA7IGluZGV4PG5ld0NvdW50OyBpbmRleCs9MSkgeworICAgIHVuc2lnbmVkIGNoYXIga2V5ID0gbmV3S2V5c1tpbmRleF07CisKKyAgICBCSVRNQVNLX1NFVChwcmVzc2VkS2V5cywga2V5KTsKKyAgfQorCisgIGZvciAoaW5kZXg9MDsgaW5kZXg8b2xkQ291bnQ7IGluZGV4Kz0xKSB7CisgICAgdW5zaWduZWQgY2hhciBrZXkgPSBvbGRLZXlzW2luZGV4XTsKKworICAgIGlmIChCSVRNQVNLX1RFU1QocHJlc3NlZEtleXMsIGtleSkpIHsKKyAgICAgIEJJVE1BU0tfQ0xFQVIocHJlc3NlZEtleXMsIGtleSk7CisgICAgfSBlbHNlIHsKKyAgICAgIGVucXVldWVIaWRLZXlFdmVudChrZXksIDApOworICAgIH0KKyAgfQorCisgIGZvciAoaW5kZXg9MDsgaW5kZXg8bmV3Q291bnQ7IGluZGV4Kz0xKSB7CisgICAgdW5zaWduZWQgY2hhciBrZXkgPSBuZXdLZXlzW2luZGV4XTsKKworICAgIGlmIChCSVRNQVNLX1RFU1QocHJlc3NlZEtleXMsIGtleSkpIHsKKyAgICAgIGVucXVldWVIaWRLZXlFdmVudChrZXksIDEpOworICAgIH0KKyAgfQorCisgICpvbGRQYWNrZXQgPSAqbmV3UGFja2V0OworfQpkaWZmIC0tZ2l0IGEvUHJvZ3JhbXMvaGlka2V5cy5oIGIvUHJvZ3JhbXMvaGlka2V5cy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNjM2RlODAKLS0tIC9kZXYvbnVsbAorKysgYi9Qcm9ncmFtcy9oaWRrZXlzLmgKQEAgLTAsMCArMSw0MiBAQAorLyoKKyAqIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisgKiAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisgKgorICogQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKKyNpZm5kZWYgQlJMVFRZX0lOQ0xVREVEX0hJREtFWVMKKyNkZWZpbmUgQlJMVFRZX0lOQ0xVREVEX0hJREtFWVMKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZiAvKiBfX2NwbHVzcGx1cyAqLworCit0eXBlZGVmIHN0cnVjdCB7CisgIHVpbnQ4X3QgbW9kaWZpZXJzOworICB1aW50OF90IHJlc2VydmVkOworICB1aW50OF90IGtleXNbNl07Cit9IFBBQ0tFRCBIaWRLZXlib2FyZFBhY2tldDsKKworZXh0ZXJuIHZvaWQgaW5pdGlhbGl6ZUhpZEtleWJvYXJkUGFja2V0IChIaWRLZXlib2FyZFBhY2tldCAqcGFja2V0KTsKK2V4dGVybiB2b2lkIHByb2Nlc3NIaWRLZXlib2FyZFBhY2tldCAoCisgIEhpZEtleWJvYXJkUGFja2V0ICpvbGRQYWNrZXQsCisgIGNvbnN0IEhpZEtleWJvYXJkUGFja2V0ICpuZXdQYWNrZXQKKyk7CisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmIC8qIF9fY3BsdXNwbHVzICovCisKKyNlbmRpZiAvKiBCUkxUVFlfSU5DTFVERURfSElES0VZUyAqLwpkaWZmIC0tZ2l0IGEvUHJvZ3JhbXMvaG9zdGNtZC5jIGIvUHJvZ3JhbXMvaG9zdGNtZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMxNDVhNWEKLS0tIC9kZXYvbnVsbAorKysgYi9Qcm9ncmFtcy9ob3N0Y21kLmMKQEAgLTAsMCArMSwxNjUgQEAKKy8qCisgKiBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorICogICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorICoKKyAqIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorICoKKyAqIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyAqLworCisjaW5jbHVkZSAicHJvbG9ndWUuaCIKKworI2luY2x1ZGUgPHN0cmluZy5oPgorCisjaW5jbHVkZSAibG9nLmgiCisjaW5jbHVkZSAic3RyZm10LmgiCisjaW5jbHVkZSAiaG9zdGNtZC5oIgorCisjaWYgZGVmaW5lZChVU0VfUEtHX0hPU1RDTURfTk9ORSkKKyNpbmNsdWRlICJob3N0Y21kX25vbmUuaCIKKyNlbGlmIGRlZmluZWQoVVNFX1BLR19IT1NUQ01EX1VOSVgpCisjaW5jbHVkZSAiaG9zdGNtZF91bml4LmgiCisjZWxpZiBkZWZpbmVkKFVTRV9QS0dfSE9TVENNRF9XSU5ET1dTKQorI2luY2x1ZGUgImhvc3RjbWRfd2luZG93cy5oIgorI2Vsc2UgLyogaG9zdCBjb21tYW5kIHBhY2thZ2UgKi8KKyN3YXJuaW5nIGhvc3QgY29tbWFuZCBwYWNrYWdlIG5vdCBzZWxlY3RlZAorI2luY2x1ZGUgImhvc3RjbWRfbm9uZS5oIgorI2VuZGlmIC8qIGhvc3QgY29tbWFuZCBwYWNrYWdlICovCisKKyNpbmNsdWRlICJob3N0Y21kX2ludGVybmFsLmgiCisKK2ludAorZmluaXNoSG9zdENvbW1hbmRTdHJlYW0gKEhvc3RDb21tYW5kU3RyZWFtICpoY3MsIGludCBmaWxlRGVzY3JpcHRvcikgeworICBjb25zdCBjaGFyICptb2RlID0gaGNzLT5pc0lucHV0PyAidyI6ICJyIjsKKworICBpZiAoKCoqaGNzLT5zdHJlYW1WYXJpYWJsZSA9IGZkb3BlbihmaWxlRGVzY3JpcHRvciwgbW9kZSkpKSB7CisgICAgcmV0dXJuIDE7CisgIH0gZWxzZSB7CisgICAgbG9nU3lzdGVtRXJyb3IoImZkb3BlbiIpOworICB9CisKKyAgcmV0dXJuIDA7Cit9CisKK2ludAorcHJvY2Vzc0hvc3RDb21tYW5kU3RyZWFtcyAoCisgIEhvc3RDb21tYW5kU3RyZWFtICpoY3MsCisgIEhvc3RDb21tYW5kU3RyZWFtUHJvY2Vzc29yICpwcm9jZXNzU3RyZWFtLAorICB2b2lkICpkYXRhCispIHsKKyAgd2hpbGUgKGhjcy0+c3RyZWFtVmFyaWFibGUpIHsKKyAgICBpZiAoKmhjcy0+c3RyZWFtVmFyaWFibGUpIHsKKyAgICAgIGlmICghcHJvY2Vzc1N0cmVhbShoY3MsIGRhdGEpKSB7CisgICAgICAgIHJldHVybiAwOworICAgICAgfQorICAgIH0KKworICAgIGhjcyArPSAxOworICB9CisKKyAgcmV0dXJuIDE7Cit9CisKK3ZvaWQKK2luaXRpYWxpemVIb3N0Q29tbWFuZE9wdGlvbnMgKEhvc3RDb21tYW5kT3B0aW9ucyAqb3B0aW9ucykgeworICBtZW1zZXQob3B0aW9ucywgMCwgc2l6ZW9mKCpvcHRpb25zKSk7CisgIG9wdGlvbnMtPmFzeW5jaHJvbm91cyA9IDA7CisKKyAgb3B0aW9ucy0+c3RhbmRhcmRJbnB1dCA9IE5VTEw7CisgIG9wdGlvbnMtPnN0YW5kYXJkT3V0cHV0ID0gTlVMTDsKKyAgb3B0aW9ucy0+c3RhbmRhcmRFcnJvciA9IE5VTEw7Cit9CisKK3N0YXRpYyBpbnQKK2NvbnN0cnVjdEhvc3RDb21tYW5kU3RyZWFtIChIb3N0Q29tbWFuZFN0cmVhbSAqaGNzLCB2b2lkICpkYXRhKSB7CisgICoqaGNzLT5zdHJlYW1WYXJpYWJsZSA9IE5VTEw7CisgIHJldHVybiBjb25zdHJ1Y3RIb3N0Q29tbWFuZFBhY2thZ2VEYXRhKCZoY3MtPnBhY2thZ2UpOworfQorCitzdGF0aWMgaW50CitkZXN0cnVjdEhvc3RDb21tYW5kU3RyZWFtIChIb3N0Q29tbWFuZFN0cmVhbSAqaGNzLCB2b2lkICpkYXRhKSB7CisgIGRlc3RydWN0SG9zdENvbW1hbmRQYWNrYWdlRGF0YSgmaGNzLT5wYWNrYWdlKTsKKworICBpZiAoKipoY3MtPnN0cmVhbVZhcmlhYmxlKSB7CisgICAgZmNsb3NlKCoqaGNzLT5zdHJlYW1WYXJpYWJsZSk7CisgICAgKipoY3MtPnN0cmVhbVZhcmlhYmxlID0gTlVMTDsKKyAgfQorCisgIHJldHVybiAxOworfQorCitpbnQKK3J1bkhvc3RDb21tYW5kICgKKyAgY29uc3QgY2hhciAqY29uc3QgKmNvbW1hbmQsCisgIGNvbnN0IEhvc3RDb21tYW5kT3B0aW9ucyAqb3B0aW9ucworKSB7CisgIGludCByZXN1bHQgPSAwWEZGOworICBIb3N0Q29tbWFuZE9wdGlvbnMgZGVmYXVsdHM7CisKKyAgaWYgKCFvcHRpb25zKSB7CisgICAgaW5pdGlhbGl6ZUhvc3RDb21tYW5kT3B0aW9ucygmZGVmYXVsdHMpOworICAgIG9wdGlvbnMgPSAmZGVmYXVsdHM7CisgIH0KKworICB7CisgICAgY2hhciBidWZmZXJbMFgxMDBdOworICAgIFNUUl9CRUdJTihidWZmZXIsIHNpemVvZihidWZmZXIpKTsKKworICAgIHsKKyAgICAgIGNvbnN0IGNoYXIgKmNvbnN0ICphcmd1bWVudCA9IGNvbW1hbmQ7CisgICAgICB3aGlsZSAoKmFyZ3VtZW50KSBTVFJfUFJJTlRGKCIgJXMiLCAqYXJndW1lbnQrKyk7CisgICAgfQorCisgICAgU1RSX0VORDsKKyAgICBsb2dNZXNzYWdlKExPR19ERUJVRywgInN0YXJ0aW5nIGhvc3QgY29tbWFuZDolcyIsIGJ1ZmZlcik7CisgIH0KKworICB7CisgICAgSG9zdENvbW1hbmRTdHJlYW0gc3RyZWFtc1tdID0geworICAgICAgeyAuc3RyZWFtVmFyaWFibGUgPSAmb3B0aW9ucy0+c3RhbmRhcmRJbnB1dCwKKyAgICAgICAgLmZpbGVEZXNjcmlwdG9yID0gMCwKKyAgICAgICAgLmlzSW5wdXQgPSAxCisgICAgICB9LAorCisgICAgICB7IC5zdHJlYW1WYXJpYWJsZSA9ICZvcHRpb25zLT5zdGFuZGFyZE91dHB1dCwKKyAgICAgICAgLmZpbGVEZXNjcmlwdG9yID0gMSwKKyAgICAgICAgLmlzSW5wdXQgPSAwCisgICAgICB9LAorCisgICAgICB7IC5zdHJlYW1WYXJpYWJsZSA9ICZvcHRpb25zLT5zdGFuZGFyZEVycm9yLAorICAgICAgICAuZmlsZURlc2NyaXB0b3IgPSAyLAorICAgICAgICAuaXNJbnB1dCA9IDAKKyAgICAgIH0sCisKKyAgICAgIHsgLnN0cmVhbVZhcmlhYmxlID0gTlVMTCB9CisgICAgfTsKKworICAgIGlmIChwcm9jZXNzSG9zdENvbW1hbmRTdHJlYW1zKHN0cmVhbXMsIGNvbnN0cnVjdEhvc3RDb21tYW5kU3RyZWFtLCBOVUxMKSkgeworICAgICAgaW50IG9rID0gMDsKKworICAgICAgaWYgKHByb2Nlc3NIb3N0Q29tbWFuZFN0cmVhbXMoc3RyZWFtcywgcHJlcGFyZUhvc3RDb21tYW5kU3RyZWFtLCBOVUxMKSkgeworICAgICAgICBpZiAocnVuQ29tbWFuZCgmcmVzdWx0LCBjb21tYW5kLCBzdHJlYW1zLCBvcHRpb25zLT5hc3luY2hyb25vdXMpKSB7CisgICAgICAgICAgb2sgPSAxOworICAgICAgICB9CisgICAgICB9CisKKyAgICAgIGlmICghb2spIHByb2Nlc3NIb3N0Q29tbWFuZFN0cmVhbXMoc3RyZWFtcywgZGVzdHJ1Y3RIb3N0Q29tbWFuZFN0cmVhbSwgTlVMTCk7CisgICAgfQorICB9CisKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworaW50CitleGVjdXRlSG9zdENvbW1hbmQgKGNvbnN0IGNoYXIgKmNvbnN0ICpjb21tYW5kKSB7CisgIHJldHVybiBydW5Ib3N0Q29tbWFuZChjb21tYW5kLCBOVUxMKTsKK30KZGlmZiAtLWdpdCBhL1Byb2dyYW1zL2hvc3RjbWRfaW50ZXJuYWwuaCBiL1Byb2dyYW1zL2hvc3RjbWRfaW50ZXJuYWwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YmZiNjIzCi0tLSAvZGV2L251bGwKKysrIGIvUHJvZ3JhbXMvaG9zdGNtZF9pbnRlcm5hbC5oCkBAIC0wLDAgKzEsNjEgQEAKKy8qCisgKiBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorICogICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorICoKKyAqIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorICoKKyAqIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyAqLworCisjaWZuZGVmIEJSTFRUWV9JTkNMVURFRF9IT1NUQ01EX0lOVEVSTkFMCisjZGVmaW5lIEJSTFRUWV9JTkNMVURFRF9IT1NUQ01EX0lOVEVSTkFMCisKKyNpbmNsdWRlIDxzdGRpby5oPgorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmIC8qIF9fY3BsdXNwbHVzICovCisKK3R5cGVkZWYgc3RydWN0IHsKKyAgRklMRSAqKmNvbnN0ICpjb25zdCBzdHJlYW1WYXJpYWJsZTsKKyAgY29uc3QgaW50IGZpbGVEZXNjcmlwdG9yOworICBjb25zdCB1bnNpZ25lZCBpc0lucHV0OjE7CisKKyAgSG9zdENvbW1hbmRQYWNrYWdlRGF0YSBwYWNrYWdlOworfSBIb3N0Q29tbWFuZFN0cmVhbTsKKwordHlwZWRlZiBpbnQgSG9zdENvbW1hbmRTdHJlYW1Qcm9jZXNzb3IgKEhvc3RDb21tYW5kU3RyZWFtICpoY3MsIHZvaWQgKmRhdGEpOworCitleHRlcm4gaW50IHByb2Nlc3NIb3N0Q29tbWFuZFN0cmVhbXMgKAorICBIb3N0Q29tbWFuZFN0cmVhbSAqaGNzLAorICBIb3N0Q29tbWFuZFN0cmVhbVByb2Nlc3NvciAqcHJvY2Vzc1N0cmVhbSwKKyAgdm9pZCAqZGF0YQorKTsKKworZXh0ZXJuIGludCBmaW5pc2hIb3N0Q29tbWFuZFN0cmVhbSAoSG9zdENvbW1hbmRTdHJlYW0gKmhjcywgaW50IGZpbGVEZXNjcmlwdG9yKTsKKworZXh0ZXJuIGludCBjb25zdHJ1Y3RIb3N0Q29tbWFuZFBhY2thZ2VEYXRhIChIb3N0Q29tbWFuZFBhY2thZ2VEYXRhICpwa2cpOworZXh0ZXJuIHZvaWQgZGVzdHJ1Y3RIb3N0Q29tbWFuZFBhY2thZ2VEYXRhIChIb3N0Q29tbWFuZFBhY2thZ2VEYXRhICpwa2cpOworZXh0ZXJuIGludCBwcmVwYXJlSG9zdENvbW1hbmRTdHJlYW0gKEhvc3RDb21tYW5kU3RyZWFtICpoY3MsIHZvaWQgKmRhdGEpOworCitleHRlcm4gaW50IHJ1bkNvbW1hbmQgKAorICBpbnQgKnJlc3VsdCwKKyAgY29uc3QgY2hhciAqY29uc3QgKmNvbW1hbmQsCisgIEhvc3RDb21tYW5kU3RyZWFtICpzdHJlYW1zLAorICBpbnQgYXN5bmNocm9ub3VzCispOworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZiAvKiBfX2NwbHVzcGx1cyAqLworCisjZW5kaWYgLyogQlJMVFRZX0lOQ0xVREVEX0hPU1RDTURfSU5URVJOQUwgKi8KZGlmZiAtLWdpdCBhL1Byb2dyYW1zL2hvc3RjbWRfbm9uZS5jIGIvUHJvZ3JhbXMvaG9zdGNtZF9ub25lLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzg5ZDljOQotLS0gL2Rldi9udWxsCisrKyBiL1Byb2dyYW1zL2hvc3RjbWRfbm9uZS5jCkBAIC0wLDAgKzEsNDYgQEAKKy8qCisgKiBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorICogICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorICoKKyAqIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorICoKKyAqIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyAqLworCisjaW5jbHVkZSAicHJvbG9ndWUuaCIKKworI2luY2x1ZGUgImhvc3RjbWRfbm9uZS5oIgorI2luY2x1ZGUgImhvc3RjbWRfaW50ZXJuYWwuaCIKKworaW50Citjb25zdHJ1Y3RIb3N0Q29tbWFuZFBhY2thZ2VEYXRhIChIb3N0Q29tbWFuZFBhY2thZ2VEYXRhICpwa2cpIHsKKyAgcmV0dXJuIDE7Cit9CisKK3ZvaWQKK2Rlc3RydWN0SG9zdENvbW1hbmRQYWNrYWdlRGF0YSAoSG9zdENvbW1hbmRQYWNrYWdlRGF0YSAqcGtnKSB7Cit9CisKK2ludAorcHJlcGFyZUhvc3RDb21tYW5kU3RyZWFtIChIb3N0Q29tbWFuZFN0cmVhbSAqaGNzLCB2b2lkICpkYXRhKSB7CisgIHJldHVybiAxOworfQorCitpbnQKK3J1bkNvbW1hbmQgKAorICBpbnQgKnJlc3VsdCwKKyAgY29uc3QgY2hhciAqY29uc3QgKmNvbW1hbmQsCisgIEhvc3RDb21tYW5kU3RyZWFtICpzdHJlYW1zLAorICBpbnQgYXN5bmNocm9ub3VzCispIHsKKyAgcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9Qcm9ncmFtcy9ob3N0Y21kX25vbmUuaCBiL1Byb2dyYW1zL2hvc3RjbWRfbm9uZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJkODc0NjAKLS0tIC9kZXYvbnVsbAorKysgYi9Qcm9ncmFtcy9ob3N0Y21kX25vbmUuaApAQCAtMCwwICsxLDM0IEBACisvKgorICogQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyAqICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyAqCisgKiBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorICoKKyAqIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyAqCisgKiBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisgKi8KKworI2lmbmRlZiBCUkxUVFlfSU5DTFVERURfSE9TVENNRF9OT05FCisjZGVmaW5lIEJSTFRUWV9JTkNMVURFRF9IT1NUQ01EX05PTkUKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZiAvKiBfX2NwbHVzcGx1cyAqLworCit0eXBlZGVmIHN0cnVjdCB7CisgIHVuc2lnbmVkIGNoYXIgZHVtbXk7Cit9IEhvc3RDb21tYW5kUGFja2FnZURhdGE7CisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmIC8qIF9fY3BsdXNwbHVzICovCisKKyNlbmRpZiAvKiBCUkxUVFlfSU5DTFVERURfSE9TVENNRF9OT05FICovCmRpZmYgLS1naXQgYS9Qcm9ncmFtcy9ob3N0Y21kX3VuaXguYyBiL1Byb2dyYW1zL2hvc3RjbWRfdW5peC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNhYjY1ZDIKLS0tIC9kZXYvbnVsbAorKysgYi9Qcm9ncmFtcy9ob3N0Y21kX3VuaXguYwpAQCAtMCwwICsxLDIwMyBAQAorLyoKKyAqIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisgKiAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisgKgorICogQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKKyNpbmNsdWRlICJwcm9sb2d1ZS5oIgorCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVkZSA8c2lnbmFsLmg+CisjaW5jbHVkZSA8c3lzL3dhaXQuaD4KKworI2luY2x1ZGUgImxvZy5oIgorI2luY2x1ZGUgImhvc3RjbWRfdW5peC5oIgorI2luY2x1ZGUgImhvc3RjbWRfaW50ZXJuYWwuaCIKKworc3RhdGljIGludCAqCitnZXRQaXBlRGVzY3JpcHRvciAoSG9zdENvbW1hbmRTdHJlYW0gKmhjcywgdW5zaWduZWQgaW50IGluZGV4KSB7CisgIHJldHVybiAmaGNzLT5wYWNrYWdlLnBpcGVbaW5kZXhdOworfQorCitzdGF0aWMgaW50ICoKK2dldElucHV0RGVzY3JpcHRvciAoSG9zdENvbW1hbmRTdHJlYW0gKmhjcykgeworICByZXR1cm4gZ2V0UGlwZURlc2NyaXB0b3IoaGNzLCAwKTsKK30KKworc3RhdGljIGludCAqCitnZXRPdXRwdXREZXNjcmlwdG9yIChIb3N0Q29tbWFuZFN0cmVhbSAqaGNzKSB7CisgIHJldHVybiBnZXRQaXBlRGVzY3JpcHRvcihoY3MsIDEpOworfQorCitzdGF0aWMgaW50ICoKK2dldFBhcmVudERlc2NyaXB0b3IgKEhvc3RDb21tYW5kU3RyZWFtICpoY3MpIHsKKyAgcmV0dXJuIGhjcy0+aXNJbnB1dD8gZ2V0T3V0cHV0RGVzY3JpcHRvcihoY3MpOiBnZXRJbnB1dERlc2NyaXB0b3IoaGNzKTsKK30KKworc3RhdGljIGludCAqCitnZXRDaGlsZERlc2NyaXB0b3IgKEhvc3RDb21tYW5kU3RyZWFtICpoY3MpIHsKKyAgcmV0dXJuIGhjcy0+aXNJbnB1dD8gZ2V0SW5wdXREZXNjcmlwdG9yKGhjcyk6IGdldE91dHB1dERlc2NyaXB0b3IoaGNzKTsKK30KKworaW50Citjb25zdHJ1Y3RIb3N0Q29tbWFuZFBhY2thZ2VEYXRhIChIb3N0Q29tbWFuZFBhY2thZ2VEYXRhICpwa2cpIHsKKyAgcGtnLT5waXBlWzBdID0gcGtnLT5waXBlWzFdID0gLTE7CisgIHJldHVybiAxOworfQorCit2b2lkCitkZXN0cnVjdEhvc3RDb21tYW5kUGFja2FnZURhdGEgKEhvc3RDb21tYW5kUGFja2FnZURhdGEgKnBrZykgeworICB7CisgICAgaW50ICpmaWxlRGVzY3JpcHRvciA9IHBrZy0+cGlwZTsKKyAgICBjb25zdCBpbnQgKmVuZCA9IGZpbGVEZXNjcmlwdG9yICsgMjsKKworICAgIHdoaWxlIChmaWxlRGVzY3JpcHRvciA8IGVuZCkgeworICAgICAgaWYgKCpmaWxlRGVzY3JpcHRvciAhPSAtMSkgeworICAgICAgICBjbG9zZSgqZmlsZURlc2NyaXB0b3IpOworICAgICAgICAqZmlsZURlc2NyaXB0b3IgPSAtMTsKKyAgICAgIH0KKworICAgICAgZmlsZURlc2NyaXB0b3IgKz0gMTsKKyAgICB9CisgIH0KK30KKworaW50CitwcmVwYXJlSG9zdENvbW1hbmRTdHJlYW0gKEhvc3RDb21tYW5kU3RyZWFtICpoY3MsIHZvaWQgKmRhdGEpIHsKKyAgaWYgKHBpcGUoaGNzLT5wYWNrYWdlLnBpcGUpID09IC0xKSB7CisgICAgbG9nU3lzdGVtRXJyb3IoInBpcGUiKTsKKyAgICByZXR1cm4gMDsKKyAgfQorCisgIHJldHVybiAxOworfQorCitzdGF0aWMgaW50CitmaW5pc2hQYXJlbnRIb3N0Q29tbWFuZFN0cmVhbSAoSG9zdENvbW1hbmRTdHJlYW0gKmhjcywgdm9pZCAqZGF0YSkgeworICBpbnQgKmxvY2FsID0gZ2V0UGFyZW50RGVzY3JpcHRvcihoY3MpOworICBpbnQgKnJlbW90ZSA9IGdldENoaWxkRGVzY3JpcHRvcihoY3MpOworCisgIGNsb3NlKCpyZW1vdGUpOworICAqcmVtb3RlID0gLTE7CisKKyAgaWYgKCFmaW5pc2hIb3N0Q29tbWFuZFN0cmVhbShoY3MsICpsb2NhbCkpIHJldHVybiAwOworICAqbG9jYWwgPSAtMTsKKworICByZXR1cm4gMTsKK30KKworc3RhdGljIGludAorZmluaXNoQ2hpbGRIb3N0Q29tbWFuZFN0cmVhbSAoSG9zdENvbW1hbmRTdHJlYW0gKmhjcywgdm9pZCAqZGF0YSkgeworICBpbnQgKmxvY2FsID0gZ2V0Q2hpbGREZXNjcmlwdG9yKGhjcyk7CisgIGludCAqcmVtb3RlID0gZ2V0UGFyZW50RGVzY3JpcHRvcihoY3MpOworCisgIGNsb3NlKCpyZW1vdGUpOworICAqcmVtb3RlID0gLTE7CisKKyAgaWYgKGNsb3NlKGhjcy0+ZmlsZURlc2NyaXB0b3IpID09IC0xKSB7CisgICAgbG9nU3lzdGVtRXJyb3IoImNsb3NlIik7CisgICAgcmV0dXJuIDA7CisgIH0KKworICBpZiAoZmNudGwoKmxvY2FsLCBGX0RVUEZELCBoY3MtPmZpbGVEZXNjcmlwdG9yKSA9PSAtMSkgeworICAgIGxvZ1N5c3RlbUVycm9yKCJmY250bFtGX0RVUEZEXSIpOworICAgIHJldHVybiAwOworICB9CisKKyAgY2xvc2UoKmxvY2FsKTsKKyAgKmxvY2FsID0gLTE7CisKKyAgcmV0dXJuIDE7Cit9CisKK2ludAorcnVuQ29tbWFuZCAoCisgIGludCAqcmVzdWx0LAorICBjb25zdCBjaGFyICpjb25zdCAqY29tbWFuZCwKKyAgSG9zdENvbW1hbmRTdHJlYW0gKnN0cmVhbXMsCisgIGludCBhc3luY2hyb25vdXMKKykgeworICBpbnQgb2sgPSAwOworICBzaWdzZXRfdCBuZXdNYXNrLCBvbGRNYXNrOworICBwaWRfdCBwaWQ7CisKKyAgc2lnZW1wdHlzZXQoJm5ld01hc2spOworICBzaWdhZGRzZXQoJm5ld01hc2ssIFNJR0NITEQpOworICBzaWdwcm9jbWFzayhTSUdfQkxPQ0ssICZuZXdNYXNrLCAmb2xkTWFzayk7CisKKyAgc3dpdGNoICgocGlkID0gZm9yaygpKSkgeworICAgIGNhc2UgLTE6IC8qIGVycm9yICovCisgICAgICBsb2dTeXN0ZW1FcnJvcigiZm9yayIpOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIDA6IC8qIGNoaWxkICovCisgICAgICBzaWdwcm9jbWFzayhTSUdfU0VUTUFTSywgJm9sZE1hc2ssIE5VTEwpOworCisgICAgICBpZiAocHJvY2Vzc0hvc3RDb21tYW5kU3RyZWFtcyhzdHJlYW1zLCBmaW5pc2hDaGlsZEhvc3RDb21tYW5kU3RyZWFtLCBOVUxMKSkgeworICAgICAgICBleGVjdnAoY29tbWFuZFswXSwgKGNoYXIgKmNvbnN0Kiljb21tYW5kKTsKKworICAgICAgICBzd2l0Y2ggKGVycm5vKSB7CisgICAgICAgICAgY2FzZSBFTk9FTlQ6CisgICAgICAgICAgICBsb2dNZXNzYWdlKExPR19FUlIsICJjb21tYW5kIG5vdCBmb3VuZDogJXMiLCBjb21tYW5kWzBdKTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGxvZ1N5c3RlbUVycm9yKCJleGVjdnAiKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICB9CisKKyAgICAgIF9leGl0KDEpOworCisgICAgZGVmYXVsdDogLyogcGFyZW50ICovCisgICAgICBpZiAocHJvY2Vzc0hvc3RDb21tYW5kU3RyZWFtcyhzdHJlYW1zLCBmaW5pc2hQYXJlbnRIb3N0Q29tbWFuZFN0cmVhbSwgTlVMTCkpIHsKKyAgICAgICAgb2sgPSAxOworCisgICAgICAgIGlmIChhc3luY2hyb25vdXMpIHsKKyAgICAgICAgICAqcmVzdWx0ID0gMDsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICBpbnQgc3RhdHVzOworCisgICAgICAgICAgaWYgKHdhaXRwaWQocGlkLCAmc3RhdHVzLCAwKSA9PSAtMSkgeworICAgICAgICAgICAgbG9nU3lzdGVtRXJyb3IoIndhaXRwaWQiKTsKKyAgICAgICAgICB9IGVsc2UgaWYgKFdJRkVYSVRFRChzdGF0dXMpKSB7CisgICAgICAgICAgICAqcmVzdWx0ID0gV0VYSVRTVEFUVVMoc3RhdHVzKTsKKyAgICAgICAgICAgIGxvZ01lc3NhZ2UoTE9HX0RFQlVHLCAiaG9zdCBjb21tYW5kIGV4aXQgc3RhdHVzOiAlZDogJXMiLAorICAgICAgICAgICAgICAgICAgICAgICAqcmVzdWx0LCBjb21tYW5kWzBdKTsKKyAgICAgICAgICB9IGVsc2UgaWYgKFdJRlNJR05BTEVEKHN0YXR1cykpIHsKKyAgICAgICAgICAgICpyZXN1bHQgPSBXVEVSTVNJRyhzdGF0dXMpOworICAgICAgICAgICAgbG9nTWVzc2FnZShMT0dfREVCVUcsICJob3N0IGNvbW1hbmQgdGVybWluYXRpb24gc2lnbmFsOiAlZDogJXMiLAorICAgICAgICAgICAgICAgICAgICAgICAqcmVzdWx0LCBjb21tYW5kWzBdKTsKKyAgICAgICAgICAgICpyZXN1bHQgKz0gMFg4MDsKKyAgICAgICAgICB9IGVsc2UgaWYgKFdJRlNUT1BQRUQoc3RhdHVzKSkgeworICAgICAgICAgICAgKnJlc3VsdCA9IFdTVE9QU0lHKHN0YXR1cyk7CisgICAgICAgICAgICBsb2dNZXNzYWdlKExPR19ERUJVRywgImhvc3QgY29tbWFuZCBzdG9wIHNpZ25hbDogJWQ6ICVzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgKnJlc3VsdCwgY29tbWFuZFswXSk7CisgICAgICAgICAgICAqcmVzdWx0ICs9IDBYODA7CisgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGxvZ01lc3NhZ2UoTE9HX0RFQlVHLCAidW5rbm93biBob3N0IGNvbW1hbmQgc3RhdHVzOiAwWCVYOiAlcyIsCisgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1cywgY29tbWFuZFswXSk7CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICB9CisKKyAgICAgIGJyZWFrOworICB9CisKKyAgc2lncHJvY21hc2soU0lHX1NFVE1BU0ssICZvbGRNYXNrLCBOVUxMKTsKKyAgcmV0dXJuIG9rOworfQpkaWZmIC0tZ2l0IGEvUHJvZ3JhbXMvaG9zdGNtZF91bml4LmggYi9Qcm9ncmFtcy9ob3N0Y21kX3VuaXguaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYTU1ZTg2Ci0tLSAvZGV2L251bGwKKysrIGIvUHJvZ3JhbXMvaG9zdGNtZF91bml4LmgKQEAgLTAsMCArMSwzNCBAQAorLyoKKyAqIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisgKiAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisgKgorICogQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKKyNpZm5kZWYgQlJMVFRZX0lOQ0xVREVEX0hPU1RDTURfVU5JWAorI2RlZmluZSBCUkxUVFlfSU5DTFVERURfSE9TVENNRF9VTklYCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYgLyogX19jcGx1c3BsdXMgKi8KKwordHlwZWRlZiBzdHJ1Y3QgeworICBpbnQgcGlwZVsyXTsKK30gSG9zdENvbW1hbmRQYWNrYWdlRGF0YTsKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYgLyogX19jcGx1c3BsdXMgKi8KKworI2VuZGlmIC8qIEJSTFRUWV9JTkNMVURFRF9IT1NUQ01EX1VOSVggKi8KZGlmZiAtLWdpdCBhL1Byb2dyYW1zL2hvc3RjbWRfd2luZG93cy5jIGIvUHJvZ3JhbXMvaG9zdGNtZF93aW5kb3dzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTBiMDA0MQotLS0gL2Rldi9udWxsCisrKyBiL1Byb2dyYW1zL2hvc3RjbWRfd2luZG93cy5jCkBAIC0wLDAgKzEsMjE3IEBACisvKgorICogQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyAqICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyAqCisgKiBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorICoKKyAqIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyAqCisgKiBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisgKi8KKworI2luY2x1ZGUgInByb2xvZ3VlLmgiCisKKyNpbmNsdWRlIDxpby5oPgorI2luY2x1ZGUgPGZjbnRsLmg+CisKKyNpbmNsdWRlICJsb2cuaCIKKyNpbmNsdWRlICJzeXN0ZW1fd2luZG93cy5oIgorI2luY2x1ZGUgImhvc3RjbWRfd2luZG93cy5oIgorI2luY2x1ZGUgImhvc3RjbWRfaW50ZXJuYWwuaCIKKwordHlwZWRlZiBzdHJ1Y3QgeworICBEV09SRCBpZGVudGlmaWVyOworICBIQU5ETEUgKmZpZWxkOworfSBIYW5kbGVFbnRyeTsKKworc3RhdGljIHZvaWQKK2Nsb3NlSGFuZGxlIChIQU5ETEUgKmhhbmRsZSkgeworICBpZiAoKmhhbmRsZSAhPSBJTlZBTElEX0hBTkRMRV9WQUxVRSkgeworICAgIGlmICgqaGFuZGxlKSB7CisgICAgICBDbG9zZUhhbmRsZSgqaGFuZGxlKTsKKyAgICB9CisKKyAgICAqaGFuZGxlID0gSU5WQUxJRF9IQU5ETEVfVkFMVUU7CisgIH0KK30KKworc3RhdGljIEhBTkRMRSAqCitnZXRQYXJlbnRIYW5kbGUgKEhvc3RDb21tYW5kU3RyZWFtICpoY3MpIHsKKyAgcmV0dXJuIGhjcy0+aXNJbnB1dD8gJmhjcy0+cGFja2FnZS5vdXRwdXRIYW5kbGU6ICZoY3MtPnBhY2thZ2UuaW5wdXRIYW5kbGU7Cit9CisKK3N0YXRpYyBIQU5ETEUgKgorZ2V0Q2hpbGRIYW5kbGUgKEhvc3RDb21tYW5kU3RyZWFtICpoY3MpIHsKKyAgcmV0dXJuIGhjcy0+aXNJbnB1dD8gJmhjcy0+cGFja2FnZS5pbnB1dEhhbmRsZTogJmhjcy0+cGFja2FnZS5vdXRwdXRIYW5kbGU7Cit9CisKK2ludAorY29uc3RydWN0SG9zdENvbW1hbmRQYWNrYWdlRGF0YSAoSG9zdENvbW1hbmRQYWNrYWdlRGF0YSAqcGtnKSB7CisgIHBrZy0+aW5wdXRIYW5kbGUgPSBJTlZBTElEX0hBTkRMRV9WQUxVRTsKKyAgcGtnLT5vdXRwdXRIYW5kbGUgPSBJTlZBTElEX0hBTkRMRV9WQUxVRTsKKyAgcmV0dXJuIDE7Cit9CisKK3ZvaWQKK2Rlc3RydWN0SG9zdENvbW1hbmRQYWNrYWdlRGF0YSAoSG9zdENvbW1hbmRQYWNrYWdlRGF0YSAqcGtnKSB7CisgIGNsb3NlSGFuZGxlKCZwa2ctPmlucHV0SGFuZGxlKTsKKyAgY2xvc2VIYW5kbGUoJnBrZy0+b3V0cHV0SGFuZGxlKTsKK30KKworaW50CitwcmVwYXJlSG9zdENvbW1hbmRTdHJlYW0gKEhvc3RDb21tYW5kU3RyZWFtICpoY3MsIHZvaWQgKmRhdGEpIHsKKyAgU0VDVVJJVFlfQVRUUklCVVRFUyBhdHRyaWJ1dGVzOworCisgIFplcm9NZW1vcnkoJmF0dHJpYnV0ZXMsIHNpemVvZihhdHRyaWJ1dGVzKSk7CisgIGF0dHJpYnV0ZXMubkxlbmd0aCA9IHNpemVvZihhdHRyaWJ1dGVzKTsKKyAgYXR0cmlidXRlcy5iSW5oZXJpdEhhbmRsZSA9IFRSVUU7CisgIGF0dHJpYnV0ZXMubHBTZWN1cml0eURlc2NyaXB0b3IgPSBOVUxMOworCisgIGlmIChDcmVhdGVQaXBlKCZoY3MtPnBhY2thZ2UuaW5wdXRIYW5kbGUsICZoY3MtPnBhY2thZ2Uub3V0cHV0SGFuZGxlLCAmYXR0cmlidXRlcywgMCkpIHsKKyAgICBpZiAoU2V0SGFuZGxlSW5mb3JtYXRpb24oKmdldFBhcmVudEhhbmRsZShoY3MpLCBIQU5ETEVfRkxBR19JTkhFUklULCAwKSkgeworICAgICAgcmV0dXJuIDE7CisgICAgfSBlbHNlIHsKKyAgICAgIGxvZ1dpbmRvd3NTeXN0ZW1FcnJvcigiU2V0SGFuZGxlSW5mb3JtYXRpb24iKTsKKyAgICB9CisgIH0gZWxzZSB7CisgICAgbG9nV2luZG93c1N5c3RlbUVycm9yKCJDcmVhdGVQaXBlIik7CisgIH0KKworICByZXR1cm4gMDsKK30KKwordHlwZWRlZiBzdHJ1Y3QgeworICBjb25zdCBIYW5kbGVFbnRyeSAqY29uc3QgaGFuZGxlVGFibGU7Cit9IFNldENoaWxkSGFuZGxlRGF0YTsKKworc3RhdGljIGludAorc2V0Q2hpbGRIYW5kbGUgKEhvc3RDb21tYW5kU3RyZWFtICpoY3MsIHZvaWQgKmRhdGEpIHsKKyAgU2V0Q2hpbGRIYW5kbGVEYXRhICpzY2ggPSBkYXRhOworCisgICpzY2gtPmhhbmRsZVRhYmxlW2hjcy0+ZmlsZURlc2NyaXB0b3JdLmZpZWxkID0gKmdldENoaWxkSGFuZGxlKGhjcyk7CisgIHJldHVybiAxOworfQorCitzdGF0aWMgaW50CitmaW5pc2hQYXJlbnRIb3N0Q29tbWFuZFN0cmVhbSAoSG9zdENvbW1hbmRTdHJlYW0gKmhjcywgdm9pZCAqZGF0YSkgeworICB7CisgICAgSEFORExFICpoYW5kbGUgPSBnZXRQYXJlbnRIYW5kbGUoaGNzKTsKKyAgICBpbnQgbW9kZSA9IGhjcy0+aXNJbnB1dD8gT19XUk9OTFk6IE9fUkRPTkxZOworICAgIGludCBmaWxlRGVzY3JpcHRvcjsKKworICAgIGlmICgoZmlsZURlc2NyaXB0b3IgPSBfb3Blbl9vc2ZoYW5kbGUoKGludHB0cl90KSpoYW5kbGUsIG1vZGUpKSA9PSAtMSkgeworICAgICAgbG9nU3lzdGVtRXJyb3IoIl9vcGVuX29zZmhhbmRsZSIpOworICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgICpoYW5kbGUgPSBJTlZBTElEX0hBTkRMRV9WQUxVRTsKKworICAgIGlmICghZmluaXNoSG9zdENvbW1hbmRTdHJlYW0oaGNzLCBmaWxlRGVzY3JpcHRvcikpIHsKKyAgICAgIF9jbG9zZShmaWxlRGVzY3JpcHRvcik7CisgICAgICByZXR1cm4gMDsKKyAgICB9CisgIH0KKworICBjbG9zZUhhbmRsZShnZXRDaGlsZEhhbmRsZShoY3MpKTsKKyAgcmV0dXJuIDE7Cit9CisKK2ludAorcnVuQ29tbWFuZCAoCisgIGludCAqcmVzdWx0LAorICBjb25zdCBjaGFyICpjb25zdCAqY29tbWFuZCwKKyAgSG9zdENvbW1hbmRTdHJlYW0gKnN0cmVhbXMsCisgIGludCBhc3luY2hyb25vdXMKKykgeworICBpbnQgb2sgPSAwOworICBjaGFyICpsaW5lID0gbWFrZVdpbmRvd3NDb21tYW5kTGluZShjb21tYW5kKTsKKworICBpZiAobGluZSkgeworICAgIFNUQVJUVVBJTkZPIHN0YXJ0dXA7CisKKyAgICBjb25zdCBIYW5kbGVFbnRyeSBoYW5kbGVUYWJsZVtdID0geworICAgICAgWzBdID0gey5pZGVudGlmaWVyPVNURF9JTlBVVF9IQU5ETEUgLCAuZmllbGQ9JnN0YXJ0dXAuaFN0ZElucHV0IH0sCisgICAgICBbMV0gPSB7LmlkZW50aWZpZXI9U1REX09VVFBVVF9IQU5ETEUsIC5maWVsZD0mc3RhcnR1cC5oU3RkT3V0cHV0fSwKKyAgICAgIFsyXSA9IHsuaWRlbnRpZmllcj1TVERfRVJST1JfSEFORExFICwgLmZpZWxkPSZzdGFydHVwLmhTdGRFcnJvciB9LAorICAgIH07CisKKyAgICBjb25zdCB1bnNpZ25lZCBpbnQgaGFuZGxlQ291bnQgPSBBUlJBWV9DT1VOVChoYW5kbGVUYWJsZSk7CisgICAgY29uc3QgSGFuZGxlRW50cnkgKmNvbnN0IGhhbmRsZUVuZCA9IGhhbmRsZVRhYmxlICsgaGFuZGxlQ291bnQ7CisKKyAgICBTZXRDaGlsZEhhbmRsZURhdGEgc2NoID0geworICAgICAgLmhhbmRsZVRhYmxlID0gaGFuZGxlVGFibGUKKyAgICB9OworCisgICAgbG9nTWVzc2FnZShMT0dfREVCVUcsICJob3N0IGNvbW1hbmQ6ICVzIiwgbGluZSk7CisKKyAgICBaZXJvTWVtb3J5KCZzdGFydHVwLCBzaXplb2Yoc3RhcnR1cCkpOworICAgIHN0YXJ0dXAuY2IgPSBzaXplb2Yoc3RhcnR1cCk7CisgICAgc3RhcnR1cC5kd0ZsYWdzID0gU1RBUlRGX1VTRVNUREhBTkRMRVM7CisKKyAgICB7CisgICAgICBjb25zdCBIYW5kbGVFbnRyeSAqaGRsID0gaGFuZGxlVGFibGU7CisKKyAgICAgIHdoaWxlIChoZGwgPCBoYW5kbGVFbmQpIHsKKyAgICAgICAgaWYgKCgqaGRsLT5maWVsZCA9IEdldFN0ZEhhbmRsZShoZGwtPmlkZW50aWZpZXIpKSA9PSBJTlZBTElEX0hBTkRMRV9WQUxVRSkgeworICAgICAgICAgIGxvZ1dpbmRvd3NTeXN0ZW1FcnJvcigiR2V0U3RkSGFuZGxlIik7CisgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKworICAgICAgICBoZGwgKz0gMTsKKyAgICAgIH0KKyAgICB9CisKKyAgICBpZiAocHJvY2Vzc0hvc3RDb21tYW5kU3RyZWFtcyhzdHJlYW1zLCBzZXRDaGlsZEhhbmRsZSwgJnNjaCkpIHsKKyAgICAgIFBST0NFU1NfSU5GT1JNQVRJT04gaW5mbzsKKworICAgICAgWmVyb01lbW9yeSgmaW5mbywgc2l6ZW9mKGluZm8pKTsKKworICAgICAgaWYgKENyZWF0ZVByb2Nlc3MoTlVMTCwgbGluZSwgTlVMTCwgTlVMTCwgVFJVRSwKKyAgICAgICAgICAgICAgICAgICAgICAgIENSRUFURV9ORVdfUFJPQ0VTU19HUk9VUCwKKyAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIE5VTEwsICZzdGFydHVwLCAmaW5mbykpIHsKKyAgICAgICAgaWYgKHByb2Nlc3NIb3N0Q29tbWFuZFN0cmVhbXMoc3RyZWFtcywgZmluaXNoUGFyZW50SG9zdENvbW1hbmRTdHJlYW0sIE5VTEwpKSB7CisgICAgICAgICAgb2sgPSAxOworCisgICAgICAgICAgaWYgKGFzeW5jaHJvbm91cykgeworICAgICAgICAgICAgKnJlc3VsdCA9IDA7CisgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIERXT1JEIHdhaXRSZXN1bHQ7CisKKyAgICAgICAgICAgICpyZXN1bHQgPSAwWEZGOworCisgICAgICAgICAgICB3aGlsZSAoKHdhaXRSZXN1bHQgPSBXYWl0Rm9yU2luZ2xlT2JqZWN0KGluZm8uaFByb2Nlc3MsIElORklOSVRFKSkgPT0gV0FJVF9USU1FT1VUKTsKKworICAgICAgICAgICAgaWYgKHdhaXRSZXN1bHQgPT0gV0FJVF9PQkpFQ1RfMCkgeworICAgICAgICAgICAgICBEV09SRCBleGl0Q29kZTsKKworICAgICAgICAgICAgICBpZiAoR2V0RXhpdENvZGVQcm9jZXNzKGluZm8uaFByb2Nlc3MsICZleGl0Q29kZSkpIHsKKyAgICAgICAgICAgICAgICAqcmVzdWx0ID0gZXhpdENvZGU7CisgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgbG9nV2luZG93c1N5c3RlbUVycm9yKCJHZXRFeGl0Q29kZVByb2Nlc3MiKTsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgbG9nV2luZG93c1N5c3RlbUVycm9yKCJXYWl0Rm9yU2luZ2xlT2JqZWN0Iik7CisgICAgICAgICAgICB9CisgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgQ2xvc2VIYW5kbGUoaW5mby5oUHJvY2Vzcyk7CisgICAgICAgIENsb3NlSGFuZGxlKGluZm8uaFRocmVhZCk7CisgICAgICB9IGVsc2UgeworICAgICAgICBsb2dXaW5kb3dzU3lzdGVtRXJyb3IoIkNyZWF0ZVByb2Nlc3MiKTsKKyAgICAgIH0KKyAgICB9CisKKyAgICBmcmVlKGxpbmUpOworICB9IGVsc2UgeworICAgIGxvZ01hbGxvY0Vycm9yKCk7CisgIH0KKworICByZXR1cm4gb2s7Cit9CmRpZmYgLS1naXQgYS9Qcm9ncmFtcy9ob3N0Y21kX3dpbmRvd3MuaCBiL1Byb2dyYW1zL2hvc3RjbWRfd2luZG93cy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAxZjZjMjIKLS0tIC9kZXYvbnVsbAorKysgYi9Qcm9ncmFtcy9ob3N0Y21kX3dpbmRvd3MuaApAQCAtMCwwICsxLDM1IEBACisvKgorICogQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyAqICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyAqCisgKiBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorICoKKyAqIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyAqCisgKiBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisgKi8KKworI2lmbmRlZiBCUkxUVFlfSU5DTFVERURfSE9TVENNRF9XSU5ET1dTCisjZGVmaW5lIEJSTFRUWV9JTkNMVURFRF9IT1NUQ01EX1dJTkRPV1MKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZiAvKiBfX2NwbHVzcGx1cyAqLworCit0eXBlZGVmIHN0cnVjdCB7CisgIEhBTkRMRSBpbnB1dEhhbmRsZTsKKyAgSEFORExFIG91dHB1dEhhbmRsZTsKK30gSG9zdENvbW1hbmRQYWNrYWdlRGF0YTsKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYgLyogX19jcGx1c3BsdXMgKi8KKworI2VuZGlmIC8qIEJSTFRUWV9JTkNMVURFRF9IT1NUQ01EX1dJTkRPV1MgKi8KZGlmZiAtLWdpdCBhL1Byb2dyYW1zL2loZXguYyBiL1Byb2dyYW1zL2loZXguYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MmVjYWQ2Ci0tLSAvZGV2L251bGwKKysrIGIvUHJvZ3JhbXMvaWhleC5jCkBAIC0wLDAgKzEsMzc3IEBACisvKgorICogQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyAqICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyAqCisgKiBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorICoKKyAqIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyAqCisgKiBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisgKi8KKworI2luY2x1ZGUgInByb2xvZ3VlLmgiCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisKKyNpbmNsdWRlICJsb2cuaCIKKyNpbmNsdWRlICJzdHJmbXQuaCIKKyNpbmNsdWRlICJpaGV4LmgiCisjaW5jbHVkZSAiZmlsZS5oIgorI2luY2x1ZGUgImRhdGFmaWxlLmgiCisKKyNkZWZpbmUgSUhFWF9QQVJTRV9WRVJJRlkgMAorCisjZGVmaW5lIElIRVhfUkVDT1JEX1BSRUZJWCAgJzonCisjZGVmaW5lIElIRVhfQ09NTUVOVF9QUkVGSVggJyMnCisKKyNkZWZpbmUgSUhFWF9CWVRFX1dJRFRIIDgKKyNkZWZpbmUgSUhFWF9CWVRFX01BU0sgKCgxIDw8IElIRVhfQllURV9XSURUSCkgLSAxKQorCitzdGF0aWMgc2l6ZV90CitpaGV4Qnl0ZUNvdW50IChzaXplX3QgY291bnQpIHsKKyAgcmV0dXJuIDEgLy8gdGhlIG51bWJlciBvZiBkYXRhIGJ5dGVzCisgICAgICAgKyAyIC8vIHRoZSBzdGFydGluZyBhZGRyZXNzCisgICAgICAgKyAxIC8vIHRoZSByZWNvcmQgdHlwZQorICAgICAgICsgY291bnQgLy8gdGhlIGRhdGEKKyAgICAgICArIDEgLy8gdGhlIGNoZWNrc3VtCisgICAgICAgOworfQorCitzaXplX3QKK2loZXhSZWNvcmRMZW5ndGggKHNpemVfdCBjb3VudCkgeworICByZXR1cm4gMSAvLyB0aGUgY29sb24gcHJlZml4CisgICAgICAgKyAoaWhleEJ5dGVDb3VudChjb3VudCkgKiAyKSAvLyBoZXhhZGVjaW1hbCBkaWdpdCBwYWlycworICAgICAgIDsKK30KKworaW50CitpaGV4TWFrZVJlY29yZCAoY2hhciAqYnVmZmVyLCBzaXplX3Qgc2l6ZSwgSWhleFR5cGUgdHlwZSwgSWhleEFkZHJlc3MgYWRkcmVzcywgY29uc3QgSWhleEJ5dGUgKmRhdGEsIEloZXhDb3VudCBjb3VudCkgeworICBJaGV4Qnl0ZSBieXRlc1tpaGV4Qnl0ZUNvdW50KGNvdW50KV07CisgIEloZXhCeXRlICplbmQgPSBieXRlczsKKworICAqZW5kKysgPSBjb3VudDsKKyAgKmVuZCsrID0gKGFkZHJlc3MgPj4gSUhFWF9CWVRFX1dJRFRIKSAmIElIRVhfQllURV9NQVNLOworICAqZW5kKysgPSBhZGRyZXNzICYgSUhFWF9CWVRFX01BU0s7CisgICplbmQrKyA9IHR5cGU7CisgIGlmIChjb3VudCA+IDApIGVuZCA9IG1lbXBjcHkoZW5kLCBkYXRhLCBjb3VudCk7CisKKyAgeworICAgIHVpbnQzMl90IGNoZWNrc3VtID0gMDsKKworICAgIHsKKyAgICAgIGNvbnN0IEloZXhCeXRlICpieXRlID0gYnl0ZXM7CisgICAgICB3aGlsZSAoYnl0ZSA8IGVuZCkgY2hlY2tzdW0gKz0gKmJ5dGUrKzsKKyAgICB9CisKKyAgICBjaGVja3N1bSBePSBJSEVYX0JZVEVfTUFTSzsKKyAgICBjaGVja3N1bSArPSAxOworICAgICplbmQrKyA9IGNoZWNrc3VtICYgSUhFWF9CWVRFX01BU0s7CisgIH0KKworICBpZiAoKDEgKyAoZW5kIC0gYnl0ZXMpICsgMSkgPiBzaXplKSByZXR1cm4gMDsKKyAgU1RSX0JFR0lOKGJ1ZmZlciwgc2l6ZSk7CisgIFNUUl9QUklOVEYoIiVjIiwgSUhFWF9SRUNPUkRfUFJFRklYKTsKKworICB7CisgICAgY29uc3QgSWhleEJ5dGUgKmJ5dGUgPSBieXRlczsKKyAgICB3aGlsZSAoYnl0ZSA8IGVuZCkgU1RSX1BSSU5URigiJTAyWCIsICpieXRlKyspOworICB9CisKKyAgU1RSX0VORDsKKyAgcmV0dXJuIDE7Cit9CisKK2ludAoraWhleE1ha2VEYXRhUmVjb3JkIChjaGFyICpidWZmZXIsIHNpemVfdCBzaXplLCBJaGV4QWRkcmVzcyBhZGRyZXNzLCBjb25zdCBJaGV4Qnl0ZSAqZGF0YSwgSWhleENvdW50IGNvdW50KSB7CisgIHJldHVybiBpaGV4TWFrZVJlY29yZChidWZmZXIsIHNpemUsIElIRVhfVFlQRV9EQVRBLCBhZGRyZXNzLCBkYXRhLCBjb3VudCk7Cit9CisKK2ludAoraWhleE1ha2VFbmRSZWNvcmQgKGNoYXIgKmJ1ZmZlciwgc2l6ZV90IHNpemUpIHsKKyAgcmV0dXJuIGloZXhNYWtlUmVjb3JkKGJ1ZmZlciwgc2l6ZSwgSUhFWF9UWVBFX0VORCwgMCwgTlVMTCwgMCk7Cit9CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgY29uc3QgY2hhciAqcmVjb3JkOworICBjb25zdCBjaGFyICpzb3VyY2U7CisgIHVuc2lnbmVkIGludCBsaW5lOworCisgIHVuc2lnbmVkIGNoYXIgZXJyb3I6MTsKK30gSWhleFJlY29yZFByb2Nlc3NpbmdEYXRhOworCit0eXBlZGVmIHN0cnVjdCB7CisgIEloZXhSZWNvcmRQcm9jZXNzaW5nRGF0YSBycGQ7CisgIEloZXhSZWNvcmRIYW5kbGVyICpoYW5kbGVyOworICB2b2lkICpkYXRhOworfSBJaGV4RmlsZVByb2Nlc3NpbmdEYXRhOworCitzdGF0aWMgdm9pZAoraWhleFJlcG9ydFByb2JsZW0gKEloZXhSZWNvcmRQcm9jZXNzaW5nRGF0YSAqcnBkLCBjb25zdCBjaGFyICptZXNzYWdlKSB7CisgIHJwZC0+ZXJyb3IgPSAxOworCisgIGxvZ01lc3NhZ2UoTE9HX0VSUiwKKyAgICAiaWhleCBlcnJvcjogJXM6ICVzWyV1XTogJXMiLAorICAgIG1lc3NhZ2UsIHJwZC0+c291cmNlLCBycGQtPmxpbmUsIHJwZC0+cmVjb3JkCisgICk7Cit9CisKK3N0YXRpYyBpbnQKK2loZXhDaGVja0RpZ2l0IChJaGV4UmVjb3JkUHJvY2Vzc2luZ0RhdGEgKnJwZCwgdW5zaWduZWQgY2hhciAqdmFsdWUsIGNoYXIgZGlnaXQpIHsKKyAgdHlwZWRlZiBzdHJ1Y3QgeworICAgIGNoYXIgZmlyc3Q7CisgICAgY2hhciBsYXN0OworICAgIGNoYXIgb2Zmc2V0OworICB9IFJhbmdlOworCisgIHN0YXRpYyBjb25zdCBSYW5nZSByYW5nZXNbXSA9IHsKKyAgICB7IC5maXJzdD0nMCcsIC5sYXN0PSc5JywgLm9mZnNldD0gMCB9LAorICAgIHsgLmZpcnN0PSdBJywgLmxhc3Q9J0YnLCAub2Zmc2V0PTEwIH0sCisgICAgeyAuZmlyc3Q9J2EnLCAubGFzdD0nZicsIC5vZmZzZXQ9MTAgfSwKKyAgfTsKKworICBjb25zdCBSYW5nZSAqcmFuZ2UgPSByYW5nZXM7CisgIGNvbnN0IFJhbmdlICplbmQgPSByYW5nZSArIEFSUkFZX0NPVU5UKHJhbmdlcyk7CisKKyAgd2hpbGUgKHJhbmdlIDwgZW5kKSB7CisgICAgaWYgKChkaWdpdCA+PSByYW5nZS0+Zmlyc3QpICYmIChkaWdpdCA8PSByYW5nZS0+bGFzdCkpIHsKKyAgICAgICp2YWx1ZSA9IChkaWdpdCAtIHJhbmdlLT5maXJzdCkgKyByYW5nZS0+b2Zmc2V0OworICAgICAgcmV0dXJuIDE7CisgICAgfQorCisgICAgcmFuZ2UgKz0gMTsKKyAgfQorCisgIGloZXhSZXBvcnRQcm9ibGVtKHJwZCwgImludmFsaWQgaGV4YWRlY2ltYWwgZGlnaXQiKTsKKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBJaGV4UGFyc2VkUmVjb3JkICoKK2loZXhQYXJzZVJlY29yZCAoSWhleFJlY29yZFByb2Nlc3NpbmdEYXRhICpycGQpIHsKKyAgY29uc3QgY2hhciAqY2hhcmFjdGVyID0gcnBkLT5yZWNvcmQ7CisKKyAgaWYgKCEqY2hhcmFjdGVyIHx8ICgqY2hhcmFjdGVyICE9IElIRVhfUkVDT1JEX1BSRUZJWCkpIHsKKyAgICBpaGV4UmVwb3J0UHJvYmxlbShycGQsICJub3QgYW4gaWhleCByZWNvcmQiKTsKKyAgICByZXR1cm4gTlVMTDsKKyAgfQorCisgIHNpemVfdCBsZW5ndGggPSBzdHJsZW4oKytjaGFyYWN0ZXIpOworICBJaGV4Qnl0ZSBieXRlc1tsZW5ndGggKyAxXTsgLy8gKzEgaW4gY2FzZSBsZW5ndGggaXMgMAorICBJaGV4Qnl0ZSAqZW5kID0gYnl0ZXM7CisgIGludCBmaXJzdCA9IDE7CisKKyAgd2hpbGUgKCpjaGFyYWN0ZXIpIHsKKyAgICB1bnNpZ25lZCBjaGFyIHZhbHVlOworICAgIGlmICghaWhleENoZWNrRGlnaXQocnBkLCAmdmFsdWUsICpjaGFyYWN0ZXIpKSByZXR1cm4gTlVMTDsKKworICAgIGlmIChmaXJzdCkgeworICAgICAgKmVuZCA9IHZhbHVlIDw8IDQ7CisgICAgfSBlbHNlIHsKKyAgICAgICplbmQrKyB8PSB2YWx1ZTsKKyAgICB9CisKKyAgICBmaXJzdCA9ICFmaXJzdDsKKyAgICBjaGFyYWN0ZXIgKz0gMTsKKyAgfQorCisgIGlmICghZmlyc3QpIHsKKyAgICBpaGV4UmVwb3J0UHJvYmxlbShycGQsICJtaXNzaW5nIGhleGFkZWNpbWFsIGRpZ2l0Iik7CisgICAgcmV0dXJuIE5VTEw7CisgIH0KKworICB7CisgICAgdWludDMyX3QgY2hlY2tzdW0gPSAwOworICAgIGNvbnN0IEloZXhCeXRlICpieXRlID0gYnl0ZXM7CisgICAgd2hpbGUgKGJ5dGUgPCBlbmQpIGNoZWNrc3VtICs9ICpieXRlKys7CisgICAgY2hlY2tzdW0gJj0gSUhFWF9CWVRFX01BU0s7CisKKyAgICBpZiAoY2hlY2tzdW0pIHsKKyAgICAgIGloZXhSZXBvcnRQcm9ibGVtKHJwZCwgImNoZWNrc3VtIG1pc21hdGNoIik7CisgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgIH0KKworICBjb25zdCBJaGV4Qnl0ZSAqYnl0ZSA9IGJ5dGVzOworICBzaXplX3QgYWN0dWFsQ291bnQgPSBlbmQgLSBieXRlOworCisgIHsKKyAgICBzdGF0aWMgY29uc3QgY2hhciAqY29uc3QgbWVzc2FnZXNbXSA9IHsKKyAgICAgIFswXSA9ICJtaXNzaW5nIGRhdGEgYnl0ZSBjb3VudCIsCisgICAgICBbMV0gPSAibWlzc2luZyBhZGRyZXNzIiwKKyAgICAgIFsyXSA9ICJpbmNvbXBsZXRlIGFkZHJlc3MiLAorICAgICAgWzNdID0gIm1pc3NpbmcgcmVjb3JkIHR5cGUiLAorICAgIH07CisKKyAgICBpZiAoYWN0dWFsQ291bnQgPCBBUlJBWV9DT1VOVChtZXNzYWdlcykpIHsKKyAgICAgIGNvbnN0IGNoYXIgKm1lc3NhZ2UgPSBtZXNzYWdlc1thY3R1YWxDb3VudF07CisgICAgICBpZiAoIW1lc3NhZ2UpIG1lc3NhZ2UgPSAidW5rbm93biBlcnJvciI7CisKKyAgICAgIGloZXhSZXBvcnRQcm9ibGVtKHJwZCwgbWVzc2FnZSk7CisgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgIH0KKworICBJaGV4Q291bnQgY291bnQgPSAqYnl0ZSsrOworICBzaXplX3QgZXhwZWN0Q291bnQgPSBpaGV4Qnl0ZUNvdW50KGNvdW50KTsKKworICBpZiAoYWN0dWFsQ291bnQgPCBleHBlY3RDb3VudCkgeworICAgIGloZXhSZXBvcnRQcm9ibGVtKHJwZCwgInRydW5jYXRlZCBkYXRhIik7CisgICAgcmV0dXJuIE5VTEw7CisgIH0KKworICBpZiAoYWN0dWFsQ291bnQgPiBleHBlY3RDb3VudCkgeworICAgIGloZXhSZXBvcnRQcm9ibGVtKHJwZCwgImV4Y2Vzc2l2ZSBkYXRhIik7CisgICAgcmV0dXJuIE5VTEw7CisgIH0KKworICBJaGV4UGFyc2VkUmVjb3JkICpyZWNvcmQ7CisgIHNpemVfdCBzaXplID0gc2l6ZW9mKCpyZWNvcmQpICsgY291bnQ7CisgIHJlY29yZCA9IG1hbGxvYyhzaXplKTsKKworICBpZiAoIXJlY29yZCkgeworICAgIGxvZ01hbGxvY0Vycm9yKCk7CisgICAgcmV0dXJuIE5VTEw7CisgIH0KKworICBtZW1zZXQocmVjb3JkLCAwLCBzaXplKTsKKyAgcmVjb3JkLT5jb3VudCA9IGNvdW50OworICByZWNvcmQtPmFkZHJlc3MgPSAqYnl0ZSsrIDw8IElIRVhfQllURV9XSURUSDsKKyAgcmVjb3JkLT5hZGRyZXNzIHw9ICpieXRlKys7CisgIHJlY29yZC0+dHlwZSA9ICpieXRlKys7CisgIG1lbWNweShyZWNvcmQtPmRhdGEsIGJ5dGUsIGNvdW50KTsKKworICBpZiAoSUhFWF9QQVJTRV9WRVJJRlkpIHsKKyAgICBjb25zdCBjaGFyICpleHBlY3QgPSBycGQtPnJlY29yZDsKKyAgICBjaGFyIGFjdHVhbFtpaGV4UmVjb3JkTGVuZ3RoKHJlY29yZC0+Y291bnQpICsgMV07CisKKyAgICBpaGV4TWFrZVJlY29yZCgKKyAgICAgIGFjdHVhbCwgc2l6ZW9mKGFjdHVhbCksCisgICAgICByZWNvcmQtPnR5cGUsIHJlY29yZC0+YWRkcmVzcywKKyAgICAgIHJlY29yZC0+ZGF0YSwgcmVjb3JkLT5jb3VudAorICAgICk7CisKKyAgICBpZiAoc3RyY21wKGFjdHVhbCwgZXhwZWN0KSAhPSAwKSB7CisgICAgICBpaGV4UmVwb3J0UHJvYmxlbShycGQsICJpaGV4IHBhcnNlIG1pc21hdGNoIik7CisgICAgICBsb2dNZXNzYWdlKExPR19ERUJVRywgImV4cGVjdDogJXMiLCBleHBlY3QpOworICAgICAgbG9nTWVzc2FnZShMT0dfREVCVUcsICJhY3R1YWw6ICVzIiwgYWN0dWFsKTsKKworICAgICAgZnJlZShyZWNvcmQpOworICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICB9CisKKyAgcmV0dXJuIHJlY29yZDsKK30KKworc3RhdGljIGludAoraWhleENhbGxIYW5kbGVyIChJaGV4RmlsZVByb2Nlc3NpbmdEYXRhICpmcGQsIGNvbnN0IEloZXhQYXJzZWRSZWNvcmQgKnJlY29yZCkgeworICBJaGV4UmVjb3JkUHJvY2Vzc2luZ0RhdGEgKnJwZCA9ICZmcGQtPnJwZDsKKworICBzd2l0Y2ggKHJlY29yZC0+dHlwZSkgeworICAgIGNhc2UgSUhFWF9UWVBFX0RBVEE6CisgICAgICBpZiAoIXJlY29yZC0+Y291bnQpIHJldHVybiAwOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIElIRVhfVFlQRV9FTkQ6CisgICAgICByZXR1cm4gMDsKKworICAgIGRlZmF1bHQ6CisgICAgICBpaGV4UmVwb3J0UHJvYmxlbShycGQsICJ1bnN1cHBvcnRlZCByZWNvcmQgdHlwZSIpOworICAgICAgcmV0dXJuIDA7CisgIH0KKworICBpZiAoIWZwZC0+aGFuZGxlcihyZWNvcmQsIGZwZC0+ZGF0YSkpIHsKKyAgICBpaGV4UmVwb3J0UHJvYmxlbShycGQsICJyZWNvcmQgaGFuZGxlciBmYWlsZWQiKTsKKyAgICByZXR1cm4gMDsKKyAgfQorCisgIHJldHVybiAxOworfQorCitzdGF0aWMgaW50CitpaGV4UHJvY2Vzc0xpbmUgKGNvbnN0IExpbmVIYW5kbGVyUGFyYW1ldGVycyAqcGFyYW1ldGVycykgeworICBJaGV4RmlsZVByb2Nlc3NpbmdEYXRhICpmcGQgPSBwYXJhbWV0ZXJzLT5kYXRhOworICBJaGV4UmVjb3JkUHJvY2Vzc2luZ0RhdGEgKnJwZCA9ICZmcGQtPnJwZDsKKyAgcnBkLT5saW5lICs9IDE7CisKKyAgY29uc3QgY2hhciAqbGluZSA9IHBhcmFtZXRlcnMtPmxpbmUudGV4dDsKKyAgd2hpbGUgKCpsaW5lID09ICcgJykgbGluZSArPSAxOworICBpZiAoISpsaW5lKSByZXR1cm4gMTsKKyAgaWYgKCpsaW5lID09IElIRVhfQ09NTUVOVF9QUkVGSVgpIHJldHVybiAxOworCisgIHJwZC0+cmVjb3JkID0gbGluZTsKKyAgSWhleFBhcnNlZFJlY29yZCAqcmVjb3JkID0gaWhleFBhcnNlUmVjb3JkKHJwZCk7CisgIGludCBvayA9IDA7CisKKyAgaWYgKHJlY29yZCkgeworICAgIGlmIChpaGV4Q2FsbEhhbmRsZXIoZnBkLCByZWNvcmQpKSB7CisgICAgICBvayA9IDE7CisgICAgfQorCisgICAgZnJlZShyZWNvcmQpOworICB9CisKKyAgcmV0dXJuIG9rOworfQorCitpbnQKK2loZXhQcm9jZXNzRmlsZSAoY29uc3QgY2hhciAqcGF0aCwgSWhleFJlY29yZEhhbmRsZXIgKmhhbmRsZXIsIHZvaWQgKmRhdGEpIHsKKyAgSWhleEZpbGVQcm9jZXNzaW5nRGF0YSBmcGQgPSB7CisgICAgLnJwZCA9IHsKKyAgICAgIC5zb3VyY2UgPSBwYXRoLAorICAgICAgLmxpbmUgPSAwCisgICAgfSwKKworICAgIC5oYW5kbGVyID0gaGFuZGxlciwKKyAgICAuZGF0YSA9IGRhdGEKKyAgfTsKKworICBpbnQgb2sgPSAwOworICBGSUxFICpmaWxlID0gb3BlbkRhdGFGaWxlKHBhdGgsICJyIiwgMCk7CisKKyAgaWYgKGZpbGUpIHsKKyAgICBpZiAocHJvY2Vzc0xpbmVzKGZpbGUsIGloZXhQcm9jZXNzTGluZSwgJmZwZCkpIHsKKyAgICAgIGlmICghZnBkLnJwZC5lcnJvcikgeworICAgICAgICBvayA9IDE7CisgICAgICB9CisgICAgfQorCisgICAgZmNsb3NlKGZpbGUpOworICB9IGVsc2UgaWYgKGVycm5vID09IEVOT0VOVCkgeworICAgIGNoYXIgKnVybCA9IG1ha2VQYXRoKFBBQ0tBR0VfVVJMLCBJSEVYX0ZJTEVTX1NVQkRJUkVDVE9SWSk7CisKKyAgICBpZiAodXJsKSB7CisgICAgICBsb2dNZXNzYWdlKExPR19XQVJOSU5HLCAibWlzc2luZyBmaXJtd2FyZSBibG9icyBjYW4gYmUgZG93bmxvYWRlZCBmcm9tICVzIiwgdXJsKTsKKyAgICAgIGZyZWUodXJsKTsKKyAgICB9CisgIH0KKworICByZXR1cm4gb2s7Cit9CisKK2NoYXIgKgoraWhleEVuc3VyZUV4dGVuc2lvbiAoY29uc3QgY2hhciAqcGF0aCkgeworICByZXR1cm4gZW5zdXJlRmlsZUV4dGVuc2lvbihwYXRoLCBJSEVYX0ZJTEVfRVhURU5TSU9OKTsKK30KKworY2hhciAqCitpaGV4TWFrZVBhdGggKGNvbnN0IGNoYXIgKmRpcmVjdG9yeSwgY29uc3QgY2hhciAqbmFtZSkgeworICBjaGFyICpzdWJkaXJlY3RvcnkgPSBtYWtlUGF0aChkaXJlY3RvcnksIElIRVhfRklMRVNfU1VCRElSRUNUT1JZKTsKKworICBpZiAoc3ViZGlyZWN0b3J5KSB7CisgICAgY2hhciAqZmlsZSA9IG1ha2VGaWxlUGF0aChzdWJkaXJlY3RvcnksIG5hbWUsIElIRVhfRklMRV9FWFRFTlNJT04pOworCisgICAgZnJlZShzdWJkaXJlY3RvcnkpOworICAgIGlmIChmaWxlKSByZXR1cm4gZmlsZTsKKyAgfQorCisgIHJldHVybiBOVUxMOworfQpkaWZmIC0tZ2l0IGEvUHJvZ3JhbXMvaW9fbG9nLmMgYi9Qcm9ncmFtcy9pb19sb2cuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZTQzMjU4Ci0tLSAvZGV2L251bGwKKysrIGIvUHJvZ3JhbXMvaW9fbG9nLmMKQEAgLTAsMCArMSw0NyBAQAorLyoKKyAqIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisgKiAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisgKgorICogQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKKyNpbmNsdWRlICJwcm9sb2d1ZS5oIgorCisjaW5jbHVkZSAiaW9fbG9nLmgiCisjaW5jbHVkZSAibG9nLmgiCisKK3ZvaWQKK2xvZ1Vuc3VwcG9ydGVkQmF1ZCAodW5zaWduZWQgaW50IGJhdWQpIHsKKyAgbG9nTWVzc2FnZShMT0dfV0FSTklORywgInVuc3VwcG9ydGVkIGJhdWQ6ICV1IiwgYmF1ZCk7Cit9CisKK3ZvaWQKK2xvZ1Vuc3VwcG9ydGVkRGF0YUJpdHMgKHVuc2lnbmVkIGludCBkYXRhQml0cykgeworICBsb2dNZXNzYWdlKExPR19XQVJOSU5HLCAidW5zdXBwb3J0ZWQgZGF0YSBiaXRzOiAldSIsIGRhdGFCaXRzKTsKK30KKwordm9pZAorbG9nVW5zdXBwb3J0ZWRTdG9wQml0cyAoU2VyaWFsU3RvcEJpdHMgc3RvcEJpdHMpIHsKKyAgbG9nTWVzc2FnZShMT0dfV0FSTklORywgInVuc3VwcG9ydGVkIHN0b3AgYml0czogJXUiLCBzdG9wQml0cyk7Cit9CisKK3ZvaWQKK2xvZ1Vuc3VwcG9ydGVkUGFyaXR5IChTZXJpYWxQYXJpdHkgcGFyaXR5KSB7CisgIGxvZ01lc3NhZ2UoTE9HX1dBUk5JTkcsICJ1bnN1cHBvcnRlZCBwYXJpdHk6ICV1IiwgcGFyaXR5KTsKK30KKwordm9pZAorbG9nVW5zdXBwb3J0ZWRGbG93Q29udHJvbCAoU2VyaWFsRmxvd0NvbnRyb2wgZmxvd0NvbnRyb2wpIHsKKyAgbG9nTWVzc2FnZShMT0dfV0FSTklORywgInVuc3VwcG9ydGVkIGZsb3cgY29udHJvbDogJTAyWCIsIGZsb3dDb250cm9sKTsKK30KZGlmZiAtLWdpdCBhL1Byb2dyYW1zL2lvX2xvZy5oIGIvUHJvZ3JhbXMvaW9fbG9nLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWE3YzZjOQotLS0gL2Rldi9udWxsCisrKyBiL1Byb2dyYW1zL2lvX2xvZy5oCkBAIC0wLDAgKzEsMzggQEAKKy8qCisgKiBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorICogICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorICoKKyAqIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorICoKKyAqIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyAqLworCisjaWZuZGVmIEJSTFRUWV9JTkNMVURFRF9JT19MT0cKKyNkZWZpbmUgQlJMVFRZX0lOQ0xVREVEX0lPX0xPRworCisjaW5jbHVkZSAic2VyaWFsX3R5cGVzLmgiCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYgLyogX19jcGx1c3BsdXMgKi8KKworZXh0ZXJuIHZvaWQgbG9nVW5zdXBwb3J0ZWRCYXVkICh1bnNpZ25lZCBpbnQgYmF1ZCk7CitleHRlcm4gdm9pZCBsb2dVbnN1cHBvcnRlZERhdGFCaXRzICh1bnNpZ25lZCBpbnQgZGF0YUJpdHMpOworZXh0ZXJuIHZvaWQgbG9nVW5zdXBwb3J0ZWRTdG9wQml0cyAoU2VyaWFsU3RvcEJpdHMgc3RvcEJpdHMpOworZXh0ZXJuIHZvaWQgbG9nVW5zdXBwb3J0ZWRQYXJpdHkgKFNlcmlhbFBhcml0eSBwYXJpdHkpOworZXh0ZXJuIHZvaWQgbG9nVW5zdXBwb3J0ZWRGbG93Q29udHJvbCAoU2VyaWFsRmxvd0NvbnRyb2wgZmxvd0NvbnRyb2wpOworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZiAvKiBfX2NwbHVzcGx1cyAqLworCisjZW5kaWYgLyogQlJMVFRZX0lOQ0xVREVEX0lPX0xPRyAqLwpkaWZmIC0tZ2l0IGEvUHJvZ3JhbXMvaW9fbWlzYy5jIGIvUHJvZ3JhbXMvaW9fbWlzYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZmOGJkYWIKLS0tIC9kZXYvbnVsbAorKysgYi9Qcm9ncmFtcy9pb19taXNjLmMKQEAgLTAsMCArMSw1MDcgQEAKKy8qCisgKiBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorICogICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorICoKKyAqIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorICoKKyAqIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyAqLworCisjaW5jbHVkZSAicHJvbG9ndWUuaCIKKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxmY250bC5oPgorCisjaW5jbHVkZSAiaW9fbWlzYy5oIgorI2luY2x1ZGUgImxvZy5oIgorI2luY2x1ZGUgImZpbGUuaCIKKyNpbmNsdWRlICJhc3luY19oYW5kbGUuaCIKKyNpbmNsdWRlICJhc3luY193YWl0LmgiCisjaW5jbHVkZSAiYXN5bmNfaW8uaCIKKwordHlwZWRlZiBzdHJ1Y3QgSW5wdXRPdXRwdXRNZXRob2RzU3RydWN0IElucHV0T3V0cHV0TWV0aG9kczsKKwordHlwZWRlZiBzdHJ1Y3QgeworICBjb25zdCBJbnB1dE91dHB1dE1ldGhvZHMgKm1ldGhvZHM7CisKKyAgdW5pb24geworICAgIEZpbGVEZXNjcmlwdG9yIGZpbGU7CisgICAgU29ja2V0RGVzY3JpcHRvciBzb2NrZXQ7CisgIH0gZGVzY3JpcHRvcjsKK30gSW5wdXRPdXRwdXRIYW5kbGU7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgdW5zaWduZWQgcmVhZHk6MTsKK30gSW5wdXRPdXRwdXRNb25pdG9yOworCit0eXBlZGVmIGludCBNb25pdG9ySW5wdXRPdXRwdXRNZXRob2QgKGNvbnN0IElucHV0T3V0cHV0SGFuZGxlICppb2gsIEFzeW5jSGFuZGxlICpoYW5kbGUsIElucHV0T3V0cHV0TW9uaXRvciAqaW9tKTsKK3R5cGVkZWYgc3NpemVfdCBSZWFkRGF0YU1ldGhvZCAoY29uc3QgSW5wdXRPdXRwdXRIYW5kbGUgKmlvaCwgdm9pZCAqYnVmZmVyLCBzaXplX3Qgc2l6ZSk7Cit0eXBlZGVmIHNzaXplX3QgV3JpdGVEYXRhTWV0aG9kIChjb25zdCBJbnB1dE91dHB1dEhhbmRsZSAqaW9oLCBjb25zdCB2b2lkICpidWZmZXIsIHNpemVfdCBzaXplKTsKKworc3RydWN0IElucHV0T3V0cHV0TWV0aG9kc1N0cnVjdCB7CisgIE1vbml0b3JJbnB1dE91dHB1dE1ldGhvZCAqbW9uaXRvcklucHV0OworICBNb25pdG9ySW5wdXRPdXRwdXRNZXRob2QgKm1vbml0b3JPdXRwdXQ7CisgIE1vbml0b3JJbnB1dE91dHB1dE1ldGhvZCAqbW9uaXRvckFsZXJ0OworCisgIFJlYWREYXRhTWV0aG9kICpyZWFkRGF0YTsKKyAgV3JpdGVEYXRhTWV0aG9kICp3cml0ZURhdGE7Cit9OworCitBU1lOQ19NT05JVE9SX0NBTExCQUNLKHNldElucHV0T3V0cHV0TW9uaXRvcikgeworICBJbnB1dE91dHB1dE1vbml0b3IgKmlvbSA9IHBhcmFtZXRlcnMtPmRhdGE7CisKKyAgaW9tLT5yZWFkeSA9IDE7CisgIHJldHVybiAwOworfQorCitBU1lOQ19DT05ESVRJT05fVEVTVEVSKHRlc3RJbnB1dE91dHB1dE1vbml0b3IpIHsKKyAgSW5wdXRPdXRwdXRNb25pdG9yICppb20gPSBkYXRhOworCisgIHJldHVybiBpb20tPnJlYWR5OworfQorCitzdGF0aWMgaW50Cithd2FpdElucHV0T3V0cHV0IChjb25zdCBJbnB1dE91dHB1dEhhbmRsZSAqaW9oLCBpbnQgdGltZW91dCwgTW9uaXRvcklucHV0T3V0cHV0TWV0aG9kICptb25pdG9ySW5wdXRPdXRwdXQpIHsKKyAgSW5wdXRPdXRwdXRNb25pdG9yIGlvbSA9IHsKKyAgICAucmVhZHkgPSAwCisgIH07CisKKyAgQXN5bmNIYW5kbGUgbW9uaXRvcjsKKworICBpZiAobW9uaXRvcklucHV0T3V0cHV0KGlvaCwgJm1vbml0b3IsICZpb20pKSB7CisgICAgYXN5bmNBd2FpdENvbmRpdGlvbih0aW1lb3V0LCB0ZXN0SW5wdXRPdXRwdXRNb25pdG9yLCAmaW9tKTsKKyAgICBhc3luY0NhbmNlbFJlcXVlc3QobW9uaXRvcik7CisgICAgaWYgKGlvbS5yZWFkeSkgcmV0dXJuIDE7CisKKyNpZmRlZiBFVElNRURPVVQKKyAgICBlcnJubyA9IEVUSU1FRE9VVDsKKyNlbHNlIC8qIEVUSU1FRE9VVCAqLworICAgIGVycm5vID0gRUFHQUlOOworI2VuZGlmIC8qIEVUSU1FRE9VVCAqLworICB9CisKKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK2F3YWl0SW5wdXQgKGNvbnN0IElucHV0T3V0cHV0SGFuZGxlICppb2gsIGludCB0aW1lb3V0KSB7CisgIHJldHVybiBhd2FpdElucHV0T3V0cHV0KGlvaCwgdGltZW91dCwgaW9oLT5tZXRob2RzLT5tb25pdG9ySW5wdXQpOworfQorCitzdGF0aWMgaW50Cithd2FpdE91dHB1dCAoY29uc3QgSW5wdXRPdXRwdXRIYW5kbGUgKmlvaCwgaW50IHRpbWVvdXQpIHsKKyAgcmV0dXJuIGF3YWl0SW5wdXRPdXRwdXQoaW9oLCB0aW1lb3V0LCBpb2gtPm1ldGhvZHMtPm1vbml0b3JPdXRwdXQpOworfQorCitzdGF0aWMgaW50Cithd2FpdEFsZXJ0IChjb25zdCBJbnB1dE91dHB1dEhhbmRsZSAqaW9oLCBpbnQgdGltZW91dCkgeworICByZXR1cm4gYXdhaXRJbnB1dE91dHB1dChpb2gsIHRpbWVvdXQsIGlvaC0+bWV0aG9kcy0+bW9uaXRvckFsZXJ0KTsKK30KKworc3RhdGljIHNzaXplX3QKK3JlYWREYXRhICgKKyAgY29uc3QgSW5wdXRPdXRwdXRIYW5kbGUgKmlvaCwKKyAgdm9pZCAqYnVmZmVyLCBzaXplX3Qgc2l6ZSwKKyAgaW50IGluaXRpYWxUaW1lb3V0LCBpbnQgc3Vic2VxdWVudFRpbWVvdXQKKykgeworICB1bnNpZ25lZCBjaGFyICphZGRyZXNzID0gYnVmZmVyOworCisjaWZkZWYgX19NU0RPU19fCisgIGludCB0cmllZCA9IDA7CisgIGdvdG8gbm9JbnB1dDsKKyNlbmRpZiAvKiBfX01TRE9TX18gKi8KKworICB3aGlsZSAoc2l6ZSA+IDApIHsKKyAgICBzc2l6ZV90IGNvdW50ID0gaW9oLT5tZXRob2RzLT5yZWFkRGF0YShpb2gsIGFkZHJlc3MsIHNpemUpOworCisjaWZkZWYgX19NU0RPU19fCisgICAgdHJpZWQgPSAxOworI2VuZGlmIC8qIF9fTVNET1NfXyAqLworCisgICAgaWYgKGNvdW50ID09IC0xKSB7CisgICAgICBpZiAoZXJybm8gPT0gRUlOVFIpIGNvbnRpbnVlOworICAgICAgaWYgKGVycm5vID09IEVBR0FJTikgZ290byBub0lucHV0OworCisjaWZkZWYgRVdPVUxEQkxPQ0sKKyAgICAgIGlmIChlcnJubyA9PSBFV09VTERCTE9DSykgZ290byBub0lucHV0OworI2VuZGlmIC8qIEVXT1VMREJMT0NLICovCisKKyAgICAgIGxvZ1N5c3RlbUVycm9yKCJyZWFkIik7CisgICAgICByZXR1cm4gY291bnQ7CisgICAgfQorCisgICAgaWYgKCFjb3VudCkgeworICAgICAgdW5zaWduZWQgY2hhciAqc3RhcnQ7CisgICAgICB1bnNpZ25lZCBpbnQgb2Zmc2V0OworICAgICAgaW50IHRpbWVvdXQ7CisKKyAgICBub0lucHV0OgorICAgICAgc3RhcnQgPSBidWZmZXI7CisgICAgICBvZmZzZXQgPSBhZGRyZXNzIC0gc3RhcnQ7CisgICAgICB0aW1lb3V0ID0gb2Zmc2V0PyBzdWJzZXF1ZW50VGltZW91dDogaW5pdGlhbFRpbWVvdXQ7CisKKyAgICAgIGlmICh0aW1lb3V0KSB7CisgICAgICAgIGlmIChhd2FpdElucHV0KGlvaCwgdGltZW91dCkpIGNvbnRpbnVlOworICAgICAgfSBlbHNlCisKKyNpZmRlZiBfX01TRE9TX18KKyAgICAgIGlmICghdHJpZWQpIHsKKyAgICAgICAgaWYgKGF3YWl0SW5wdXQoaW9oLCAwKSkgY29udGludWU7CisgICAgICB9IGVsc2UKKyNlbmRpZiAvKiBfX01TRE9TX18gKi8KKworICAgICAgeworICAgICAgICBlcnJubyA9IEVBR0FJTjsKKyAgICAgIH0KKworICAgICAgYnJlYWs7CisgICAgfQorCisgICAgYWRkcmVzcyArPSBjb3VudDsKKyAgICBzaXplIC09IGNvdW50OworICB9CisKKyAgeworICAgIHVuc2lnbmVkIGNoYXIgKnN0YXJ0ID0gYnVmZmVyOworCisgICAgcmV0dXJuIGFkZHJlc3MgLSBzdGFydDsKKyAgfQorfQorCitzdGF0aWMgc3NpemVfdAord3JpdGVEYXRhIChjb25zdCBJbnB1dE91dHB1dEhhbmRsZSAqaW9oLCBjb25zdCB2b2lkICpidWZmZXIsIHNpemVfdCBzaXplKSB7CisgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmFkZHJlc3MgPSBidWZmZXI7CisKK2NhbldyaXRlOgorICB3aGlsZSAoc2l6ZSA+IDApIHsKKyAgICBzc2l6ZV90IGNvdW50ID0gaW9oLT5tZXRob2RzLT53cml0ZURhdGEoaW9oLCBhZGRyZXNzLCBzaXplKTsKKworICAgIGlmIChjb3VudCA9PSAtMSkgeworICAgICAgaWYgKGVycm5vID09IEVJTlRSKSBjb250aW51ZTsKKyAgICAgIGlmIChlcnJubyA9PSBFQUdBSU4pIGdvdG8gbm9PdXRwdXQ7CisKKyNpZmRlZiBFV09VTERCTE9DSworICAgICAgaWYgKGVycm5vID09IEVXT1VMREJMT0NLKSBnb3RvIG5vT3V0cHV0OworI2VuZGlmIC8qIEVXT1VMREJMT0NLICovCisKKyAgICAgIGxvZ1N5c3RlbUVycm9yKCJXcml0ZSIpOworICAgICAgcmV0dXJuIGNvdW50OworICAgIH0KKworICAgIGlmICghY291bnQpIHsKKyAgICAgIGVycm5vID0gRUFHQUlOOworCisgICAgbm9PdXRwdXQ6CisgICAgICBkbyB7CisgICAgICAgIGlmIChhd2FpdE91dHB1dChpb2gsIDE1MDAwKSkgZ290byBjYW5Xcml0ZTsKKyAgICAgIH0gd2hpbGUgKGVycm5vID09IEVBR0FJTik7CisKKyAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICBhZGRyZXNzICs9IGNvdW50OworICAgIHNpemUgLT0gY291bnQ7CisgIH0KKworICB7CisgICAgY29uc3QgdW5zaWduZWQgY2hhciAqc3RhcnQgPSBidWZmZXI7CisgICAgcmV0dXJuIGFkZHJlc3MgLSBzdGFydDsKKyAgfQorfQorCitzdGF0aWMgaW50Cittb25pdG9yRmlsZUlucHV0IChjb25zdCBJbnB1dE91dHB1dEhhbmRsZSAqaW9oLCBBc3luY0hhbmRsZSAqaGFuZGxlLCBJbnB1dE91dHB1dE1vbml0b3IgKmlvbSkgeworICByZXR1cm4gYXN5bmNNb25pdG9yRmlsZUlucHV0KGhhbmRsZSwgaW9oLT5kZXNjcmlwdG9yLmZpbGUsIHNldElucHV0T3V0cHV0TW9uaXRvciwgaW9tKTsKK30KKworc3RhdGljIGludAorbW9uaXRvckZpbGVPdXRwdXQgKGNvbnN0IElucHV0T3V0cHV0SGFuZGxlICppb2gsIEFzeW5jSGFuZGxlICpoYW5kbGUsIElucHV0T3V0cHV0TW9uaXRvciAqaW9tKSB7CisgIHJldHVybiBhc3luY01vbml0b3JGaWxlT3V0cHV0KGhhbmRsZSwgaW9oLT5kZXNjcmlwdG9yLmZpbGUsIHNldElucHV0T3V0cHV0TW9uaXRvciwgaW9tKTsKK30KKworc3RhdGljIGludAorbW9uaXRvckZpbGVBbGVydCAoY29uc3QgSW5wdXRPdXRwdXRIYW5kbGUgKmlvaCwgQXN5bmNIYW5kbGUgKmhhbmRsZSwgSW5wdXRPdXRwdXRNb25pdG9yICppb20pIHsKKyAgcmV0dXJuIGFzeW5jTW9uaXRvckZpbGVBbGVydChoYW5kbGUsIGlvaC0+ZGVzY3JpcHRvci5maWxlLCBzZXRJbnB1dE91dHB1dE1vbml0b3IsIGlvbSk7Cit9CisKK3N0YXRpYyBzc2l6ZV90CityZWFkRmlsZURhdGEgKGNvbnN0IElucHV0T3V0cHV0SGFuZGxlICppb2gsIHZvaWQgKmJ1ZmZlciwgc2l6ZV90IHNpemUpIHsKKyAgcmV0dXJuIHJlYWRGaWxlRGVzY3JpcHRvcihpb2gtPmRlc2NyaXB0b3IuZmlsZSwgYnVmZmVyLCBzaXplKTsKK30KKworc3RhdGljIHNzaXplX3QKK3dyaXRlRmlsZURhdGEgKGNvbnN0IElucHV0T3V0cHV0SGFuZGxlICppb2gsIGNvbnN0IHZvaWQgKmJ1ZmZlciwgc2l6ZV90IHNpemUpIHsKKyAgcmV0dXJuIHdyaXRlRmlsZURlc2NyaXB0b3IoaW9oLT5kZXNjcmlwdG9yLmZpbGUsIGJ1ZmZlciwgc2l6ZSk7Cit9CisKK3N0YXRpYyBjb25zdCBJbnB1dE91dHB1dE1ldGhvZHMgZmlsZU1ldGhvZHMgPSB7CisgIC5tb25pdG9ySW5wdXQgPSBtb25pdG9yRmlsZUlucHV0LAorICAubW9uaXRvck91dHB1dCA9IG1vbml0b3JGaWxlT3V0cHV0LAorICAubW9uaXRvckFsZXJ0ID0gbW9uaXRvckZpbGVBbGVydCwKKworICAucmVhZERhdGEgPSByZWFkRmlsZURhdGEsCisgIC53cml0ZURhdGEgPSB3cml0ZUZpbGVEYXRhCit9OworCitzdGF0aWMgdm9pZAorbWFrZUZpbGVIYW5kbGUgKElucHV0T3V0cHV0SGFuZGxlICppb2gsIEZpbGVEZXNjcmlwdG9yIGZpbGVEZXNjcmlwdG9yKSB7CisgIGlvaC0+bWV0aG9kcyA9ICZmaWxlTWV0aG9kczsKKyAgaW9oLT5kZXNjcmlwdG9yLmZpbGUgPSBmaWxlRGVzY3JpcHRvcjsKK30KKwordm9pZAorY2xvc2VGaWxlIChGaWxlRGVzY3JpcHRvciAqZmlsZURlc2NyaXB0b3IpIHsKKyAgaWYgKCpmaWxlRGVzY3JpcHRvciAhPSBJTlZBTElEX0ZJTEVfREVTQ1JJUFRPUikgeworICAgIGNsb3NlRmlsZURlc2NyaXB0b3IoKmZpbGVEZXNjcmlwdG9yKTsKKyAgICAqZmlsZURlc2NyaXB0b3IgPSBJTlZBTElEX0ZJTEVfREVTQ1JJUFRPUjsKKyAgfQorfQorCitpbnQKK2F3YWl0RmlsZUlucHV0IChGaWxlRGVzY3JpcHRvciBmaWxlRGVzY3JpcHRvciwgaW50IHRpbWVvdXQpIHsKKyAgSW5wdXRPdXRwdXRIYW5kbGUgaW9oOworCisgIG1ha2VGaWxlSGFuZGxlKCZpb2gsIGZpbGVEZXNjcmlwdG9yKTsKKyAgcmV0dXJuIGF3YWl0SW5wdXQoJmlvaCwgdGltZW91dCk7Cit9CisKK2ludAorYXdhaXRGaWxlT3V0cHV0IChGaWxlRGVzY3JpcHRvciBmaWxlRGVzY3JpcHRvciwgaW50IHRpbWVvdXQpIHsKKyAgSW5wdXRPdXRwdXRIYW5kbGUgaW9oOworCisgIG1ha2VGaWxlSGFuZGxlKCZpb2gsIGZpbGVEZXNjcmlwdG9yKTsKKyAgcmV0dXJuIGF3YWl0T3V0cHV0KCZpb2gsIHRpbWVvdXQpOworfQorCitpbnQKK2F3YWl0RmlsZUFsZXJ0IChGaWxlRGVzY3JpcHRvciBmaWxlRGVzY3JpcHRvciwgaW50IHRpbWVvdXQpIHsKKyAgSW5wdXRPdXRwdXRIYW5kbGUgaW9oOworCisgIG1ha2VGaWxlSGFuZGxlKCZpb2gsIGZpbGVEZXNjcmlwdG9yKTsKKyAgcmV0dXJuIGF3YWl0QWxlcnQoJmlvaCwgdGltZW91dCk7Cit9CisKK3NzaXplX3QKK3JlYWRGaWxlICgKKyAgRmlsZURlc2NyaXB0b3IgZmlsZURlc2NyaXB0b3IsIHZvaWQgKmJ1ZmZlciwgc2l6ZV90IHNpemUsCisgIGludCBpbml0aWFsVGltZW91dCwgaW50IHN1YnNlcXVlbnRUaW1lb3V0CispIHsKKyAgSW5wdXRPdXRwdXRIYW5kbGUgaW9oOworCisgIG1ha2VGaWxlSGFuZGxlKCZpb2gsIGZpbGVEZXNjcmlwdG9yKTsKKyAgcmV0dXJuIHJlYWREYXRhKCZpb2gsIGJ1ZmZlciwgc2l6ZSwgaW5pdGlhbFRpbWVvdXQsIHN1YnNlcXVlbnRUaW1lb3V0KTsKK30KKworc3NpemVfdAord3JpdGVGaWxlIChGaWxlRGVzY3JpcHRvciBmaWxlRGVzY3JpcHRvciwgY29uc3Qgdm9pZCAqYnVmZmVyLCBzaXplX3Qgc2l6ZSkgeworICBJbnB1dE91dHB1dEhhbmRsZSBpb2g7CisKKyAgbWFrZUZpbGVIYW5kbGUoJmlvaCwgZmlsZURlc2NyaXB0b3IpOworICByZXR1cm4gd3JpdGVEYXRhKCZpb2gsIGJ1ZmZlciwgc2l6ZSk7Cit9CisKKyNpZmRlZiBHT1RfU09DS0VUUworc3RhdGljIGludAorbW9uaXRvclNvY2tldElucHV0IChjb25zdCBJbnB1dE91dHB1dEhhbmRsZSAqaW9oLCBBc3luY0hhbmRsZSAqaGFuZGxlLCBJbnB1dE91dHB1dE1vbml0b3IgKmlvbSkgeworICByZXR1cm4gYXN5bmNNb25pdG9yU29ja2V0SW5wdXQoaGFuZGxlLCBpb2gtPmRlc2NyaXB0b3Iuc29ja2V0LCBzZXRJbnB1dE91dHB1dE1vbml0b3IsIGlvbSk7Cit9CisKK3N0YXRpYyBpbnQKK21vbml0b3JTb2NrZXRPdXRwdXQgKGNvbnN0IElucHV0T3V0cHV0SGFuZGxlICppb2gsIEFzeW5jSGFuZGxlICpoYW5kbGUsIElucHV0T3V0cHV0TW9uaXRvciAqaW9tKSB7CisgIHJldHVybiBhc3luY01vbml0b3JTb2NrZXRPdXRwdXQoaGFuZGxlLCBpb2gtPmRlc2NyaXB0b3Iuc29ja2V0LCBzZXRJbnB1dE91dHB1dE1vbml0b3IsIGlvbSk7Cit9CisKK3N0YXRpYyBpbnQKK21vbml0b3JTb2NrZXRBbGVydCAoY29uc3QgSW5wdXRPdXRwdXRIYW5kbGUgKmlvaCwgQXN5bmNIYW5kbGUgKmhhbmRsZSwgSW5wdXRPdXRwdXRNb25pdG9yICppb20pIHsKKyAgcmV0dXJuIGFzeW5jTW9uaXRvclNvY2tldEFsZXJ0KGhhbmRsZSwgaW9oLT5kZXNjcmlwdG9yLnNvY2tldCwgc2V0SW5wdXRPdXRwdXRNb25pdG9yLCBpb20pOworfQorCitzdGF0aWMgc3NpemVfdAorcmVhZFNvY2tldERhdGEgKGNvbnN0IElucHV0T3V0cHV0SGFuZGxlICppb2gsIHZvaWQgKmJ1ZmZlciwgc2l6ZV90IHNpemUpIHsKKyAgcmV0dXJuIHJlYWRTb2NrZXREZXNjcmlwdG9yKGlvaC0+ZGVzY3JpcHRvci5zb2NrZXQsIGJ1ZmZlciwgc2l6ZSk7Cit9CisKK3N0YXRpYyBzc2l6ZV90Cit3cml0ZVNvY2tldERhdGEgKGNvbnN0IElucHV0T3V0cHV0SGFuZGxlICppb2gsIGNvbnN0IHZvaWQgKmJ1ZmZlciwgc2l6ZV90IHNpemUpIHsKKyAgcmV0dXJuIHdyaXRlU29ja2V0RGVzY3JpcHRvcihpb2gtPmRlc2NyaXB0b3Iuc29ja2V0LCBidWZmZXIsIHNpemUpOworfQorCitzdGF0aWMgY29uc3QgSW5wdXRPdXRwdXRNZXRob2RzIHNvY2tldE1ldGhvZHMgPSB7CisgIC5tb25pdG9ySW5wdXQgPSBtb25pdG9yU29ja2V0SW5wdXQsCisgIC5tb25pdG9yT3V0cHV0ID0gbW9uaXRvclNvY2tldE91dHB1dCwKKyAgLm1vbml0b3JBbGVydCA9IG1vbml0b3JTb2NrZXRBbGVydCwKKworICAucmVhZERhdGEgPSByZWFkU29ja2V0RGF0YSwKKyAgLndyaXRlRGF0YSA9IHdyaXRlU29ja2V0RGF0YQorfTsKKworc3RhdGljIHZvaWQKK21ha2VTb2NrZXRIYW5kbGUgKElucHV0T3V0cHV0SGFuZGxlICppb2gsIFNvY2tldERlc2NyaXB0b3Igc29ja2V0RGVzY3JpcHRvcikgeworICBpb2gtPm1ldGhvZHMgPSAmc29ja2V0TWV0aG9kczsKKyAgaW9oLT5kZXNjcmlwdG9yLnNvY2tldCA9IHNvY2tldERlc2NyaXB0b3I7Cit9CisKK3ZvaWQKK2Nsb3NlU29ja2V0IChTb2NrZXREZXNjcmlwdG9yICpzb2NrZXREZXNjcmlwdG9yKSB7CisgIGlmICgqc29ja2V0RGVzY3JpcHRvciAhPSBJTlZBTElEX1NPQ0tFVF9ERVNDUklQVE9SKSB7CisgICAgY2xvc2VTb2NrZXREZXNjcmlwdG9yKCpzb2NrZXREZXNjcmlwdG9yKTsKKyAgICAqc29ja2V0RGVzY3JpcHRvciA9IElOVkFMSURfU09DS0VUX0RFU0NSSVBUT1I7CisgIH0KK30KKworaW50Cithd2FpdFNvY2tldElucHV0IChTb2NrZXREZXNjcmlwdG9yIHNvY2tldERlc2NyaXB0b3IsIGludCB0aW1lb3V0KSB7CisgIElucHV0T3V0cHV0SGFuZGxlIGlvaDsKKworICBtYWtlU29ja2V0SGFuZGxlKCZpb2gsIHNvY2tldERlc2NyaXB0b3IpOworICByZXR1cm4gYXdhaXRJbnB1dCgmaW9oLCB0aW1lb3V0KTsKK30KKworaW50Cithd2FpdFNvY2tldE91dHB1dCAoU29ja2V0RGVzY3JpcHRvciBzb2NrZXREZXNjcmlwdG9yLCBpbnQgdGltZW91dCkgeworICBJbnB1dE91dHB1dEhhbmRsZSBpb2g7CisKKyAgbWFrZVNvY2tldEhhbmRsZSgmaW9oLCBzb2NrZXREZXNjcmlwdG9yKTsKKyAgcmV0dXJuIGF3YWl0T3V0cHV0KCZpb2gsIHRpbWVvdXQpOworfQorCitpbnQKK2F3YWl0U29ja2V0QWxlcnQgKFNvY2tldERlc2NyaXB0b3Igc29ja2V0RGVzY3JpcHRvciwgaW50IHRpbWVvdXQpIHsKKyAgSW5wdXRPdXRwdXRIYW5kbGUgaW9oOworCisgIG1ha2VTb2NrZXRIYW5kbGUoJmlvaCwgc29ja2V0RGVzY3JpcHRvcik7CisgIHJldHVybiBhd2FpdEFsZXJ0KCZpb2gsIHRpbWVvdXQpOworfQorCitzc2l6ZV90CityZWFkU29ja2V0ICgKKyAgU29ja2V0RGVzY3JpcHRvciBzb2NrZXREZXNjcmlwdG9yLCB2b2lkICpidWZmZXIsIHNpemVfdCBzaXplLAorICBpbnQgaW5pdGlhbFRpbWVvdXQsIGludCBzdWJzZXF1ZW50VGltZW91dAorKSB7CisgIElucHV0T3V0cHV0SGFuZGxlIGlvaDsKKworICBtYWtlU29ja2V0SGFuZGxlKCZpb2gsIHNvY2tldERlc2NyaXB0b3IpOworICByZXR1cm4gcmVhZERhdGEoJmlvaCwgYnVmZmVyLCBzaXplLCBpbml0aWFsVGltZW91dCwgc3Vic2VxdWVudFRpbWVvdXQpOworfQorCitzc2l6ZV90Cit3cml0ZVNvY2tldCAoU29ja2V0RGVzY3JpcHRvciBzb2NrZXREZXNjcmlwdG9yLCBjb25zdCB2b2lkICpidWZmZXIsIHNpemVfdCBzaXplKSB7CisgIElucHV0T3V0cHV0SGFuZGxlIGlvaDsKKworICBtYWtlU29ja2V0SGFuZGxlKCZpb2gsIHNvY2tldERlc2NyaXB0b3IpOworICByZXR1cm4gd3JpdGVEYXRhKCZpb2gsIGJ1ZmZlciwgc2l6ZSk7Cit9CisKK2ludAorY29ubmVjdFNvY2tldCAoCisgIFNvY2tldERlc2NyaXB0b3Igc29ja2V0RGVzY3JpcHRvciwKKyAgY29uc3Qgc3RydWN0IHNvY2thZGRyICphZGRyZXNzLAorICBzaXplX3QgYWRkcmVzc0xlbmd0aCwKKyAgaW50IHRpbWVvdXQKKykgeworICBpbnQgcmVzdWx0ID0gY29ubmVjdChzb2NrZXREZXNjcmlwdG9yLCBhZGRyZXNzLCBhZGRyZXNzTGVuZ3RoKTsKKworICBpZiAocmVzdWx0ID09IC0xKSB7CisjaWZkZWYgRUlOUFJPR1JFU1MKKyAgICBpZiAoZ2V0U29ja2V0RXJyb3IoKSA9PSBFSU5QUk9HUkVTUykgeworICAgICAgaWYgKGF3YWl0U29ja2V0T3V0cHV0KHNvY2tldERlc2NyaXB0b3IsIHRpbWVvdXQpKSB7CisgICAgICAgIGludCBlcnJvcjsKKyAgICAgICAgc29ja2xlbl90IGxlbmd0aCA9IHNpemVvZihlcnJvcik7CisKKyAgICAgICAgaWYgKGdldHNvY2tvcHQoc29ja2V0RGVzY3JpcHRvciwgU09MX1NPQ0tFVCwgU09fRVJST1IsICh2b2lkICopJmVycm9yLCAmbGVuZ3RoKSAhPSAtMSkgeworICAgICAgICAgIGlmICghZXJyb3IpIHJldHVybiAwOworICAgICAgICAgIGVycm5vID0gZXJyb3I7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9CisjZW5kaWYgLyogRUlOUFJPR1JFU1MgKi8KKyAgfQorCisgIHJldHVybiByZXN1bHQ7Cit9CisKK2ludAorc2V0U29ja2V0TGluZ2VyVGltZSAoU29ja2V0RGVzY3JpcHRvciBzb2NrZXREZXNjcmlwdG9yLCBpbnQgc2Vjb25kcykgeworICBzdHJ1Y3QgbGluZ2VyIGxpbmdlciA9IHsKKyAgICAubF9vbm9mZiA9IDEsCisgICAgLmxfbGluZ2VyID0gc2Vjb25kcworICB9OworCisgIGlmIChzZXRzb2Nrb3B0KHNvY2tldERlc2NyaXB0b3IsIFNPTF9TT0NLRVQsIFNPX0xJTkdFUiwgKGNvbnN0IHZvaWQgKikmbGluZ2VyLCBzaXplb2YobGluZ2VyKSkgIT0gLTEpIHJldHVybiAxOworICBsb2dTeXN0ZW1FcnJvcigic2V0c29ja29wdFtTT19MSU5HRVJdIik7CisgIHJldHVybiAwOworfQorCitpbnQKK3NldFNvY2tldE5vTGluZ2VyIChTb2NrZXREZXNjcmlwdG9yIHNvY2tldERlc2NyaXB0b3IpIHsKKyAgcmV0dXJuIHNldFNvY2tldExpbmdlclRpbWUoc29ja2V0RGVzY3JpcHRvciwgMCk7Cit9CisKKyNlbHNlIC8qIGhhdmUgc29ja2V0cyAqLworI3dhcm5pbmcgc29ja2V0cyBub3Qgc3VwcG9ydGVkIG9uIHRoaXMgcGxhdGZvcm0KKyNlbmRpZiAvKiBHT1RfU09DS0VUUyAqLworCitpbnQKK2NoYW5nZU9wZW5GbGFncyAoRmlsZURlc2NyaXB0b3IgZmlsZURlc2NyaXB0b3IsIGludCBmbGFnc1RvQ2xlYXIsIGludCBmbGFnc1RvU2V0KSB7CisjaWYgZGVmaW5lZChGX0dFVEZMKSAmJiBkZWZpbmVkKEZfU0VURkwpCisgIGludCBmbGFnczsKKworICBpZiAoKGZsYWdzID0gZmNudGwoZmlsZURlc2NyaXB0b3IsIEZfR0VURkwpKSAhPSAtMSkgeworICAgIGZsYWdzICY9IH5mbGFnc1RvQ2xlYXI7CisgICAgZmxhZ3MgfD0gZmxhZ3NUb1NldDsKKyAgICBpZiAoZmNudGwoZmlsZURlc2NyaXB0b3IsIEZfU0VURkwsIGZsYWdzKSAhPSAtMSkgeworICAgICAgcmV0dXJuIDE7CisgICAgfSBlbHNlIHsKKyAgICAgIGxvZ1N5c3RlbUVycm9yKCJGX1NFVEZMIik7CisgICAgfQorICB9IGVsc2UgeworICAgIGxvZ1N5c3RlbUVycm9yKCJGX0dFVEZMIik7CisgIH0KKyNlbHNlIC8qIGRlZmluZWQoRl9HRVRGTCkgJiYgZGVmaW5lZChGX1NFVEZMKSAqLworICBlcnJubyA9IEVOT1NZUzsKKyNlbmRpZiAvKiBkZWZpbmVkKEZfR0VURkwpICYmIGRlZmluZWQoRl9TRVRGTCkgKi8KKworICByZXR1cm4gMDsKK30KKworaW50CitzZXRPcGVuRmxhZ3MgKEZpbGVEZXNjcmlwdG9yIGZpbGVEZXNjcmlwdG9yLCBpbnQgc3RhdGUsIGludCBmbGFncykgeworICBpZiAoc3RhdGUpIHsKKyAgICByZXR1cm4gY2hhbmdlT3BlbkZsYWdzKGZpbGVEZXNjcmlwdG9yLCAwLCBmbGFncyk7CisgIH0gZWxzZSB7CisgICAgcmV0dXJuIGNoYW5nZU9wZW5GbGFncyhmaWxlRGVzY3JpcHRvciwgZmxhZ3MsIDApOworICB9Cit9CisKK2ludAorc2V0QmxvY2tpbmdJbyAoRmlsZURlc2NyaXB0b3IgZmlsZURlc2NyaXB0b3IsIGludCBzdGF0ZSkgeworI2lmZGVmIE9fTk9OQkxPQ0sKKyAgaWYgKHNldE9wZW5GbGFncyhmaWxlRGVzY3JpcHRvciwgIXN0YXRlLCBPX05PTkJMT0NLKSkgcmV0dXJuIDE7CisjZWxzZSAvKiBPX05PTkJMT0NLICovCisgIGVycm5vID0gRU5PU1lTOworI2VuZGlmIC8qIE9fTk9OQkxPQ0sgKi8KKworICByZXR1cm4gMDsKK30KKworaW50CitzZXRDbG9zZU9uRXhlYyAoRmlsZURlc2NyaXB0b3IgZmlsZURlc2NyaXB0b3IsIGludCBzdGF0ZSkgeworI2lmIGRlZmluZWQoRl9TRVRGRCkgJiYgZGVmaW5lZChGRF9DTE9FWEVDKQorICBpZiAoZmNudGwoZmlsZURlc2NyaXB0b3IsIEZfU0VURkQsIChzdGF0ZT8gRkRfQ0xPRVhFQzogMCkpICE9IC0xKSByZXR1cm4gMTsKKyNlbHNlIC8qIGRlZmluZWQoRl9TRVRGRCkgJiYgZGVmaW5lZChGRF9DTE9FWEVDKSAqLworICBlcnJubyA9IEVOT1NZUzsKKyNlbmRpZiAvKiBkZWZpbmVkKEZfU0VURkQpICYmIGRlZmluZWQoRkRfQ0xPRVhFQykgKi8KKworICByZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL1Byb2dyYW1zL2tiZC5jIGIvUHJvZ3JhbXMva2JkLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWY1YjJkMgotLS0gL2Rldi9udWxsCisrKyBiL1Byb2dyYW1zL2tiZC5jCkBAIC0wLDAgKzEsMzI2IEBACisvKgorICogQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyAqICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyAqCisgKiBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorICoKKyAqIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyAqCisgKiBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisgKi8KKworI2luY2x1ZGUgInByb2xvZ3VlLmgiCisKKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworI2luY2x1ZGUgImxvZy5oIgorI2luY2x1ZGUgInBhcnNlLmgiCisjaW5jbHVkZSAiYml0bWFzay5oIgorI2luY2x1ZGUgImtiZC5oIgorI2luY2x1ZGUgImtiZF9pbnRlcm5hbC5oIgorCitjb25zdCBLZXlib2FyZFByb3BlcnRpZXMgYW55S2V5Ym9hcmQgPSB7CisgIC50eXBlID0gS0JEX1RZUEVfQU5ZLAorICAudmVuZG9yID0gMCwKKyAgLnByb2R1Y3QgPSAwCit9OworCitpbnQKK3BhcnNlS2V5Ym9hcmRQcm9wZXJ0aWVzIChLZXlib2FyZFByb3BlcnRpZXMgKnByb3BlcnRpZXMsIGNvbnN0IGNoYXIgKnN0cmluZykgeworICBlbnVtIHsKKyAgICBLQkRfUEFSTV9UWVBFLAorICAgIEtCRF9QQVJNX1ZFTkRPUiwKKyAgICBLQkRfUEFSTV9QUk9EVUNUCisgIH07CisKKyAgc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IG5hbWVzW10gPSB7InR5cGUiLCAidmVuZG9yIiwgInByb2R1Y3QiLCBOVUxMfTsKKyAgY2hhciAqKnBhcmFtZXRlcnMgPSBnZXRQYXJhbWV0ZXJzKG5hbWVzLCBOVUxMLCBzdHJpbmcpOworICBpbnQgb2sgPSAxOworCisgIGxvZ1BhcmFtZXRlcnMobmFtZXMsIHBhcmFtZXRlcnMsICJLZXlib2FyZCBQcm9wZXJ0eSIpOworICAqcHJvcGVydGllcyA9IGFueUtleWJvYXJkOworCisgIGlmICgqcGFyYW1ldGVyc1tLQkRfUEFSTV9UWVBFXSkgeworICAgIHN0YXRpYyBjb25zdCBLZXlib2FyZFR5cGUgdHlwZXNbXSA9IHsKKyAgICAgIEtCRF9UWVBFX0FOWSwgS0JEX1RZUEVfUFMyLCBLQkRfVFlQRV9VU0IsIEtCRF9UWVBFX0JMVUVUT09USCwgS0JEX1RZUEVfSU5URVJOQUwKKyAgICB9OworCisgICAgc3RhdGljIGNvbnN0IGNoYXIgKmNob2ljZXNbXSA9IHsiYW55IiwgInBzMiIsICJ1c2IiLCAiYmx1ZXRvb3RoIiwgImludGVybmFsIiwgTlVMTH07CisgICAgdW5zaWduZWQgaW50IGNob2ljZTsKKworICAgIGlmICh2YWxpZGF0ZUNob2ljZSgmY2hvaWNlLCBwYXJhbWV0ZXJzW0tCRF9QQVJNX1RZUEVdLCBjaG9pY2VzKSkgeworICAgICAgcHJvcGVydGllcy0+dHlwZSA9IHR5cGVzW2Nob2ljZV07CisgICAgfSBlbHNlIHsKKyAgICAgIGxvZ01lc3NhZ2UoTE9HX1dBUk5JTkcsICJpbnZhbGlkIGtleWJvYXJkIHR5cGU6ICVzIiwgcGFyYW1ldGVyc1tLQkRfUEFSTV9UWVBFXSk7CisgICAgICBvayA9IDA7CisgICAgfQorICB9CisKKyAgaWYgKCpwYXJhbWV0ZXJzW0tCRF9QQVJNX1ZFTkRPUl0pIHsKKyAgICBzdGF0aWMgY29uc3QgaW50IG1pbmltdW0gPSAwOworICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4aW11bSA9IDBYRkZGRjsKKyAgICBpbnQgdmFsdWU7CisKKyAgICBpZiAodmFsaWRhdGVJbnRlZ2VyKCZ2YWx1ZSwgcGFyYW1ldGVyc1tLQkRfUEFSTV9WRU5ET1JdLCAmbWluaW11bSwgJm1heGltdW0pKSB7CisgICAgICBwcm9wZXJ0aWVzLT52ZW5kb3IgPSB2YWx1ZTsKKyAgICB9IGVsc2UgeworICAgICAgbG9nTWVzc2FnZShMT0dfV0FSTklORywgImludmFsaWQga2V5Ym9hcmQgdmVuZG9yIGNvZGU6ICVzIiwgcGFyYW1ldGVyc1tLQkRfUEFSTV9WRU5ET1JdKTsKKyAgICAgIG9rID0gMDsKKyAgICB9CisgIH0KKworICBpZiAoKnBhcmFtZXRlcnNbS0JEX1BBUk1fUFJPRFVDVF0pIHsKKyAgICBzdGF0aWMgY29uc3QgaW50IG1pbmltdW0gPSAwOworICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4aW11bSA9IDBYRkZGRjsKKyAgICBpbnQgdmFsdWU7CisKKyAgICBpZiAodmFsaWRhdGVJbnRlZ2VyKCZ2YWx1ZSwgcGFyYW1ldGVyc1tLQkRfUEFSTV9QUk9EVUNUXSwgJm1pbmltdW0sICZtYXhpbXVtKSkgeworICAgICAgcHJvcGVydGllcy0+cHJvZHVjdCA9IHZhbHVlOworICAgIH0gZWxzZSB7CisgICAgICBsb2dNZXNzYWdlKExPR19XQVJOSU5HLCAiaW52YWxpZCBrZXlib2FyZCBwcm9kdWN0IGNvZGU6ICVzIiwgcGFyYW1ldGVyc1tLQkRfUEFSTV9QUk9EVUNUXSk7CisgICAgICBvayA9IDA7CisgICAgfQorICB9CisKKyAgZGVhbGxvY2F0ZVN0cmluZ3MocGFyYW1ldGVycyk7CisgIHJldHVybiBvazsKK30KKworaW50CitjaGVja0tleWJvYXJkUHJvcGVydGllcyAoY29uc3QgS2V5Ym9hcmRQcm9wZXJ0aWVzICphY3R1YWwsIGNvbnN0IEtleWJvYXJkUHJvcGVydGllcyAqcmVxdWlyZWQpIHsKKyAgaWYgKCFyZXF1aXJlZCkgcmV0dXJuIDE7CisgIGlmICghYWN0dWFsKSAgYWN0dWFsID0gJmFueUtleWJvYXJkOworCisgIGlmIChyZXF1aXJlZC0+dHlwZSAhPSBLQkRfVFlQRV9BTlkpIHsKKyAgICBpZiAocmVxdWlyZWQtPnR5cGUgIT0gYWN0dWFsLT50eXBlKSByZXR1cm4gMDsKKyAgfQorCisgIGlmIChyZXF1aXJlZC0+dmVuZG9yKSB7CisgICAgaWYgKHJlcXVpcmVkLT52ZW5kb3IgIT0gYWN0dWFsLT52ZW5kb3IpIHJldHVybiAwOworICB9CisKKyAgaWYgKHJlcXVpcmVkLT5wcm9kdWN0KSB7CisgICAgaWYgKHJlcXVpcmVkLT5wcm9kdWN0ICE9IGFjdHVhbC0+cHJvZHVjdCkgcmV0dXJuIDA7CisgIH0KKworICByZXR1cm4gMTsKK30KKworc3RhdGljIHZvaWQKK2xvZ0tleUV2ZW50IChjb25zdCBjaGFyICphY3Rpb24sIGludCBjb2RlLCBpbnQgcHJlc3MpIHsKKyAgbG9nTWVzc2FnZShMT0dfQ0FURUdPUlkoS0VZQk9BUkRfS0VZUyksCisgICAgICAgICAgICAgIiVzICVkOiAlcyIsCisgICAgICAgICAgICAgKHByZXNzPyAicHJlc3MiOiAicmVsZWFzZSIpLCBjb2RlLCBhY3Rpb24pOworfQorCitzdGF0aWMgdm9pZAorZmx1c2hLZXlFdmVudHMgKEtleWJvYXJkSW5zdGFuY2VPYmplY3QgKmtpbykgeworICBjb25zdCBLZXlFdmVudEVudHJ5ICpldmVudCA9IGtpby0+ZXZlbnRzLmJ1ZmZlcjsKKworICB3aGlsZSAoa2lvLT5ldmVudHMuY291bnQpIHsKKyAgICBsb2dLZXlFdmVudCgiZmx1c2hpbmciLCBldmVudC0+Y29kZSwgZXZlbnQtPnByZXNzKTsKKyAgICBmb3J3YXJkS2V5RXZlbnQoa2lvLCBldmVudC0+Y29kZSwgZXZlbnQtPnByZXNzKTsKKworICAgIGV2ZW50ICs9IDE7CisgICAga2lvLT5ldmVudHMuY291bnQgLT0gMTsKKyAgfQorCisgIG1lbXNldChraW8tPmRlZmVycmVkLm1hc2ssIDAsIGtpby0+ZGVmZXJyZWQuc2l6ZSk7CisgIGtpby0+ZGVmZXJyZWQubW9kaWZpZXJzT25seSA9IDA7Cit9CisKK0tleWJvYXJkSW5zdGFuY2VPYmplY3QgKgorbmV3S2V5Ym9hcmRJbnN0YW5jZU9iamVjdCAoS2V5Ym9hcmRNb25pdG9yT2JqZWN0ICprbW8pIHsKKyAgS2V5Ym9hcmRJbnN0YW5jZU9iamVjdCAqa2lvOworICB1bnNpZ25lZCBpbnQgY291bnQgPSBCSVRNQVNLX0VMRU1FTlRfQ09VTlQoa2V5Q29kZUNvdW50LCBCSVRNQVNLX0VMRU1FTlRfU0laRSh1bnNpZ25lZCBjaGFyKSk7CisgIHNpemVfdCBzaXplID0gc2l6ZW9mKCpraW8pICsgY291bnQ7CisKKyAgaWYgKChraW8gPSBtYWxsb2Moc2l6ZSkpKSB7CisgICAgbWVtc2V0KGtpbywgMCwgc2l6ZSk7CisgICAga2lvLT5rbW8gPSBrbW87CisKKyAgICBraW8tPmFjdHVhbFByb3BlcnRpZXMgPSBhbnlLZXlib2FyZDsKKworICAgIGtpby0+ZXZlbnRzLmJ1ZmZlciA9IE5VTEw7CisgICAga2lvLT5ldmVudHMuc2l6ZSA9IDA7CisgICAga2lvLT5ldmVudHMuY291bnQgPSAwOworCisgICAga2lvLT5kZWZlcnJlZC5tb2RpZmllcnNPbmx5ID0gMDsKKyAgICBraW8tPmRlZmVycmVkLnNpemUgPSBjb3VudDsKKworICAgIGlmIChuZXdLZXlib2FyZEluc3RhbmNlRXh0ZW5zaW9uKCZraW8tPmtpeCkpIHsKKyAgICAgIGlmIChlbnF1ZXVlSXRlbShrbW8tPmluc3RhbmNlUXVldWUsIGtpbykpIHsKKyAgICAgICAgcmV0dXJuIGtpbzsKKyAgICAgIH0KKworICAgICAgZGVzdHJveUtleWJvYXJkSW5zdGFuY2VFeHRlbnNpb24oa2lvLT5raXgpOworICAgIH0KKworICAgIGZyZWUoa2lvKTsKKyAgfSBlbHNlIHsKKyAgICBsb2dNYWxsb2NFcnJvcigpOworICB9CisKKyAgcmV0dXJuIE5VTEw7Cit9CisKK3ZvaWQKK2Rlc3Ryb3lLZXlib2FyZEluc3RhbmNlT2JqZWN0IChLZXlib2FyZEluc3RhbmNlT2JqZWN0ICpraW8pIHsKKyAgZmx1c2hLZXlFdmVudHMoa2lvKTsKKyAgaWYgKGtpby0+ZXZlbnRzLmJ1ZmZlcikgZnJlZShraW8tPmV2ZW50cy5idWZmZXIpOworCisgIGRlbGV0ZUl0ZW0oa2lvLT5rbW8tPmluc3RhbmNlUXVldWUsIGtpbyk7CisgIGlmIChraW8tPmtpeCkgZGVzdHJveUtleWJvYXJkSW5zdGFuY2VFeHRlbnNpb24oa2lvLT5raXgpOworICBmcmVlKGtpbyk7Cit9CisKK3ZvaWQKK2Rlc3Ryb3lLZXlib2FyZE1vbml0b3JPYmplY3QgKEtleWJvYXJkTW9uaXRvck9iamVjdCAqa21vKSB7CisgIGttby0+aXNBY3RpdmUgPSAwOworCisgIHdoaWxlIChnZXRRdWV1ZVNpemUoa21vLT5pbnN0YW5jZVF1ZXVlKSA+IDApIHsKKyAgICBFbGVtZW50ICplbGVtZW50ID0gZ2V0UXVldWVIZWFkKGttby0+aW5zdGFuY2VRdWV1ZSk7CisgICAgS2V5Ym9hcmRJbnN0YW5jZU9iamVjdCAqa2lvID0gZ2V0RWxlbWVudEl0ZW0oZWxlbWVudCk7CisKKyAgICBkZXN0cm95S2V5Ym9hcmRJbnN0YW5jZU9iamVjdChraW8pOworICB9CisKKyAgaWYgKGttby0+aW5zdGFuY2VRdWV1ZSkgZGVhbGxvY2F0ZVF1ZXVlKGttby0+aW5zdGFuY2VRdWV1ZSk7CisgIGlmIChrbW8tPmtteCkgZGVzdHJveUtleWJvYXJkTW9uaXRvckV4dGVuc2lvbihrbW8tPmtteCk7CisgIGZyZWUoa21vKTsKK30KKworS2V5Ym9hcmRNb25pdG9yT2JqZWN0ICoKK25ld0tleWJvYXJkTW9uaXRvck9iamVjdCAoY29uc3QgS2V5Ym9hcmRQcm9wZXJ0aWVzICpwcm9wZXJ0aWVzLCBLZXlFdmVudEhhbmRsZXIgaGFuZGxlS2V5RXZlbnQpIHsKKyAgS2V5Ym9hcmRNb25pdG9yT2JqZWN0ICprbW87CisKKyAgaWYgKChrbW8gPSBtYWxsb2Moc2l6ZW9mKCprbW8pKSkpIHsKKyAgICBtZW1zZXQoa21vLCAwLCBzaXplb2YoKmttbykpOworCisgICAga21vLT5yZXF1aXJlZFByb3BlcnRpZXMgPSAqcHJvcGVydGllczsKKyAgICBrbW8tPmhhbmRsZUtleUV2ZW50ID0gaGFuZGxlS2V5RXZlbnQ7CisKKyAgICBpZiAobmV3S2V5Ym9hcmRNb25pdG9yRXh0ZW5zaW9uKCZrbW8tPmtteCkpIHsKKyAgICAgIGlmICgoa21vLT5pbnN0YW5jZVF1ZXVlID0gbmV3UXVldWUoTlVMTCwgTlVMTCkpKSB7CisgICAgICAgIGlmIChtb25pdG9yS2V5Ym9hcmRzKGttbykpIHsKKyAgICAgICAgICBrbW8tPmlzQWN0aXZlID0gMTsKKyAgICAgICAgICByZXR1cm4ga21vOworICAgICAgICB9CisKKyAgICAgICAgZGVhbGxvY2F0ZVF1ZXVlKGttby0+aW5zdGFuY2VRdWV1ZSk7CisgICAgICB9CisKKyAgICAgIGRlc3Ryb3lLZXlib2FyZE1vbml0b3JFeHRlbnNpb24oa21vLT5rbXgpOworICAgIH0KKworICAgIGZyZWUoa21vKTsKKyAgfSBlbHNlIHsKKyAgICBsb2dNYWxsb2NFcnJvcigpOworICB9CisKKyAgcmV0dXJuIE5VTEw7Cit9CisKK3ZvaWQKK2hhbmRsZUtleUV2ZW50IChLZXlib2FyZEluc3RhbmNlT2JqZWN0ICpraW8sIGludCBjb2RlLCBpbnQgcHJlc3MpIHsKKyAgS2V5VGFibGVTdGF0ZSBzdGF0ZSA9IEtUU19VTkJPVU5EOworCisgIGxvZ0tleUV2ZW50KCJyZWNlaXZlZCIsIGNvZGUsIHByZXNzKTsKKworICBpZiAoa2lvLT5rbW8tPmlzQWN0aXZlKSB7CisgICAgaWYgKChjb2RlID49IDApICYmIChjb2RlIDwga2V5Q29kZUNvdW50KSkgeworICAgICAgY29uc3QgS2V5VmFsdWUgKmt2ID0gJmtleUNvZGVNYXBbY29kZV07CisKKyAgICAgIGlmICgoa3YtPmdyb3VwICE9IEtCRF9HUk9VUChTUEVDSUFMKSkgfHwgKGt2LT5udW1iZXIgIT0gS0JEX0tFWShTUEVDSUFMLCBVbm1hcHBlZCkpKSB7CisgICAgICAgIGlmICgoa3YtPmdyb3VwID09IEtCRF9HUk9VUChTUEVDSUFMKSkgJiYgKGt2LT5udW1iZXIgPT0gS0JEX0tFWShTUEVDSUFMLCBJZ25vcmUpKSkgcmV0dXJuOworICAgICAgICBzdGF0ZSA9IGtpby0+a21vLT5oYW5kbGVLZXlFdmVudChrdi0+Z3JvdXAsIGt2LT5udW1iZXIsIHByZXNzKTsKKyAgICAgIH0KKyAgICB9CisgIH0KKworICBpZiAoc3RhdGUgPT0gS1RTX0hPVEtFWSkgeworICAgIGxvZ0tleUV2ZW50KCJpZ25vcmluZyIsIGNvZGUsIHByZXNzKTsKKyAgfSBlbHNlIHsKKyAgICB0eXBlZGVmIGVudW0geworICAgICAgV0tBX05PTkUsCisgICAgICBXS0FfQ1VSUkVOVCwKKyAgICAgIFdLQV9BTEwKKyAgICB9IFdyaXRlS2V5c0FjdGlvbjsKKyAgICBXcml0ZUtleXNBY3Rpb24gYWN0aW9uID0gV0tBX05PTkU7CisKKyAgICBpZiAocHJlc3MpIHsKKyAgICAgIGtpby0+ZGVmZXJyZWQubW9kaWZpZXJzT25seSA9IHN0YXRlID09IEtUU19NT0RJRklFUlM7CisKKyAgICAgIGlmIChzdGF0ZSA9PSBLVFNfVU5CT1VORCkgeworICAgICAgICBhY3Rpb24gPSBXS0FfQUxMOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKGtpby0+ZXZlbnRzLmNvdW50ID09IGtpby0+ZXZlbnRzLnNpemUpIHsKKyAgICAgICAgICB1bnNpZ25lZCBpbnQgbmV3U2l6ZSA9IGtpby0+ZXZlbnRzLnNpemU/IGtpby0+ZXZlbnRzLnNpemU8PDE6IDBYMTsKKyAgICAgICAgICBLZXlFdmVudEVudHJ5ICpuZXdCdWZmZXIgPSByZWFsbG9jKGtpby0+ZXZlbnRzLmJ1ZmZlciwgKG5ld1NpemUgKiBzaXplb2YoKm5ld0J1ZmZlcikpKTsKKworICAgICAgICAgIGlmIChuZXdCdWZmZXIpIHsKKyAgICAgICAgICAgIGtpby0+ZXZlbnRzLmJ1ZmZlciA9IG5ld0J1ZmZlcjsKKyAgICAgICAgICAgIGtpby0+ZXZlbnRzLnNpemUgPSBuZXdTaXplOworICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBsb2dNYWxsb2NFcnJvcigpOworICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmIChraW8tPmV2ZW50cy5jb3VudCA8IGtpby0+ZXZlbnRzLnNpemUpIHsKKyAgICAgICAgICBLZXlFdmVudEVudHJ5ICpldmVudCA9ICZraW8tPmV2ZW50cy5idWZmZXJba2lvLT5ldmVudHMuY291bnQrK107CisKKyAgICAgICAgICBldmVudC0+Y29kZSA9IGNvZGU7CisgICAgICAgICAgZXZlbnQtPnByZXNzID0gcHJlc3M7CisgICAgICAgICAgQklUTUFTS19TRVQoa2lvLT5kZWZlcnJlZC5tYXNrLCBjb2RlKTsKKworICAgICAgICAgIGxvZ0tleUV2ZW50KCJkZWZlcnJpbmciLCBjb2RlLCBwcmVzcyk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgbG9nS2V5RXZlbnQoImRpc2NhcmRpbmciLCBjb2RlLCBwcmVzcyk7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9IGVsc2UgaWYgKGtpby0+ZGVmZXJyZWQubW9kaWZpZXJzT25seSkgeworICAgICAga2lvLT5kZWZlcnJlZC5tb2RpZmllcnNPbmx5ID0gMDsKKyAgICAgIGFjdGlvbiA9IFdLQV9BTEw7CisgICAgfSBlbHNlIGlmIChCSVRNQVNLX1RFU1Qoa2lvLT5kZWZlcnJlZC5tYXNrLCBjb2RlKSkgeworICAgICAgS2V5RXZlbnRFbnRyeSAqdG8gPSBraW8tPmV2ZW50cy5idWZmZXI7CisgICAgICBjb25zdCBLZXlFdmVudEVudHJ5ICpmcm9tID0gdG87CisgICAgICB1bnNpZ25lZCBpbnQgY291bnQgPSBraW8tPmV2ZW50cy5jb3VudDsKKworICAgICAgd2hpbGUgKGNvdW50KSB7CisgICAgICAgIGlmIChmcm9tLT5jb2RlID09IGNvZGUpIHsKKyAgICAgICAgICBsb2dLZXlFdmVudCgiZHJvcHBpbmciLCBmcm9tLT5jb2RlLCBmcm9tLT5wcmVzcyk7CisgICAgICAgIH0gZWxzZSBpZiAodG8gIT0gZnJvbSkgeworICAgICAgICAgICp0bysrID0gKmZyb207CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgdG8gKz0gMTsKKyAgICAgICAgfQorCisgICAgICAgIGZyb20gKz0gMSwgY291bnQgLT0gMTsKKyAgICAgIH0KKworICAgICAga2lvLT5ldmVudHMuY291bnQgPSB0byAtIGtpby0+ZXZlbnRzLmJ1ZmZlcjsKKyAgICAgIEJJVE1BU0tfQ0xFQVIoa2lvLT5kZWZlcnJlZC5tYXNrLCBjb2RlKTsKKyAgICB9IGVsc2UgeworICAgICAgYWN0aW9uID0gV0tBX0NVUlJFTlQ7CisgICAgfQorCisgICAgc3dpdGNoIChhY3Rpb24pIHsKKyAgICAgIGNhc2UgV0tBX0FMTDoKKyAgICAgICAgZmx1c2hLZXlFdmVudHMoa2lvKTsKKyAgICAgICAgLyogZmFsbCB0aHJvdWdoICovCisgICAgICBjYXNlIFdLQV9DVVJSRU5UOgorICAgICAgICBsb2dLZXlFdmVudCgiZm9yd2FyZGluZyIsIGNvZGUsIHByZXNzKTsKKyAgICAgICAgZm9yd2FyZEtleUV2ZW50KGtpbywgY29kZSwgcHJlc3MpOworCisgICAgICBjYXNlIFdLQV9OT05FOgorICAgICAgICBicmVhazsKKyAgICB9CisgIH0KK30KZGlmZiAtLWdpdCBhL1Byb2dyYW1zL2tiZC5oIGIvUHJvZ3JhbXMva2JkLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDllODU5NQotLS0gL2Rldi9udWxsCisrKyBiL1Byb2dyYW1zL2tiZC5oCkBAIC0wLDAgKzEsNTcgQEAKKy8qCisgKiBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorICogICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorICoKKyAqIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorICoKKyAqIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyAqLworCisjaWZuZGVmIEJSTFRUWV9JTkNMVURFRF9LQkQKKyNkZWZpbmUgQlJMVFRZX0lOQ0xVREVEX0tCRAorCisjaW5jbHVkZSAia3RiX3R5cGVzLmgiCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYgLyogX19jcGx1c3BsdXMgKi8KKwordHlwZWRlZiBlbnVtIHsKKyAgS0JEX1RZUEVfQU5ZID0gMCwKKyAgS0JEX1RZUEVfUFMyLAorICBLQkRfVFlQRV9VU0IsCisgIEtCRF9UWVBFX0JMVUVUT09USCwKKyAgS0JEX1RZUEVfSU5URVJOQUwsCit9IEtleWJvYXJkVHlwZTsKKwordHlwZWRlZiBzdHJ1Y3QgeworICBLZXlib2FyZFR5cGUgdHlwZTsKKyAgaW50IHZlbmRvcjsKKyAgaW50IHByb2R1Y3Q7Cit9IEtleWJvYXJkUHJvcGVydGllczsKKworZXh0ZXJuIGNvbnN0IEtleWJvYXJkUHJvcGVydGllcyBhbnlLZXlib2FyZDsKKworZXh0ZXJuIGludCBwYXJzZUtleWJvYXJkUHJvcGVydGllcyAoS2V5Ym9hcmRQcm9wZXJ0aWVzICpwcm9wZXJ0aWVzLCBjb25zdCBjaGFyICpzdHJpbmcpOworZXh0ZXJuIGludCBjaGVja0tleWJvYXJkUHJvcGVydGllcyAoY29uc3QgS2V5Ym9hcmRQcm9wZXJ0aWVzICphY3R1YWwsIGNvbnN0IEtleWJvYXJkUHJvcGVydGllcyAqcmVxdWlyZWQpOworCit0eXBlZGVmIHN0cnVjdCBLZXlib2FyZE1vbml0b3JPYmplY3RTdHJ1Y3QgS2V5Ym9hcmRNb25pdG9yT2JqZWN0OwordHlwZWRlZiBLZXlUYWJsZVN0YXRlIEtleUV2ZW50SGFuZGxlciAoS2V5R3JvdXAgZ3JvdXAsIEtleU51bWJlciBudW1iZXIsIGludCBwcmVzcyk7CisKK2V4dGVybiBLZXlib2FyZE1vbml0b3JPYmplY3QgKm5ld0tleWJvYXJkTW9uaXRvck9iamVjdCAoY29uc3QgS2V5Ym9hcmRQcm9wZXJ0aWVzICpwcm9wZXJ0aWVzLCBLZXlFdmVudEhhbmRsZXIgaGFuZGxlS2V5RXZlbnQpOworZXh0ZXJuIHZvaWQgZGVzdHJveUtleWJvYXJkTW9uaXRvck9iamVjdCAoS2V5Ym9hcmRNb25pdG9yT2JqZWN0ICprbW8pOworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZiAvKiBfX2NwbHVzcGx1cyAqLworCisjZW5kaWYgLyogQlJMVFRZX0lOQ0xVREVEX0tCRCAqLwpkaWZmIC0tZ2l0IGEvUHJvZ3JhbXMva2JkX2FuZHJvaWQuYyBiL1Byb2dyYW1zL2tiZF9hbmRyb2lkLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzcxNjkyOQotLS0gL2Rldi9udWxsCisrKyBiL1Byb2dyYW1zL2tiZF9hbmRyb2lkLmMKQEAgLTAsMCArMSw0MzQgQEAKKy8qCisgKiBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorICogICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorICoKKyAqIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorICoKKyAqIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyAqLworCisjaW5jbHVkZSAicHJvbG9ndWUuaCIKKworI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPGFuZHJvaWQva2V5Y29kZXMuaD4KKworI2luY2x1ZGUgImxvZy5oIgorI2luY2x1ZGUgInN5c3RlbV9qYXZhLmgiCisKKyNpbmNsdWRlICJrYmQuaCIKKyNpbmNsdWRlICJrYmRfaW50ZXJuYWwuaCIKKyNpbmNsdWRlICJrYmRfYW5kcm9pZC5oIgorCitCRUdJTl9LRVlfQ09ERV9NQVAKKyAgW0FORFJPSURfS0VZXzBdID0gS0JEX0tFWV9OVU1CRVIoWmVybyksCisgIFtBTkRST0lEX0tFWV8xXSA9IEtCRF9LRVlfTlVNQkVSKE9uZSksCisgIFtBTkRST0lEX0tFWV8yXSA9IEtCRF9LRVlfTlVNQkVSKFR3byksCisgIFtBTkRST0lEX0tFWV8zXSA9IEtCRF9LRVlfTlVNQkVSKFRocmVlKSwKKyAgW0FORFJPSURfS0VZXzNEX01PREVdID0gS0JEX0tFWV9VTk1BUFBFRCwKKyAgW0FORFJPSURfS0VZXzRdID0gS0JEX0tFWV9OVU1CRVIoRm91ciksCisgIFtBTkRST0lEX0tFWV81XSA9IEtCRF9LRVlfTlVNQkVSKEZpdmUpLAorICBbQU5EUk9JRF9LRVlfNl0gPSBLQkRfS0VZX05VTUJFUihTaXgpLAorICBbQU5EUk9JRF9LRVlfN10gPSBLQkRfS0VZX05VTUJFUihTZXZlbiksCisgIFtBTkRST0lEX0tFWV84XSA9IEtCRF9LRVlfTlVNQkVSKEVpZ2h0KSwKKyAgW0FORFJPSURfS0VZXzldID0gS0JEX0tFWV9OVU1CRVIoTmluZSksCisKKyAgW0FORFJPSURfS0VZX0FdID0gS0JEX0tFWV9MRVRURVIoQSksCisgIFtBTkRST0lEX0tFWV9BTFRfTEVGVF0gPSBLQkRfS0VZX01PRElGSUVSKEFsdExlZnQpLAorICBbQU5EUk9JRF9LRVlfQUxUX1JJR0hUXSA9IEtCRF9LRVlfTU9ESUZJRVIoQWx0UmlnaHQpLAorICBbQU5EUk9JRF9LRVlfQVBPU1RST1BIRV0gPSBLQkRfS0VZX1NZTUJPTChBcG9zdHJvcGhlKSwKKyAgW0FORFJPSURfS0VZX0FQUF9TV0lUQ0hdID0gS0JEX0tFWV9VTk1BUFBFRCwKKyAgW0FORFJPSURfS0VZX0FTU0lTVF0gPSBLQkRfS0VZX0FDVElPTihIZWxwKSwKKyAgW0FORFJPSURfS0VZX0FUXSA9IEtCRF9LRVlfVU5NQVBQRUQsCisgIFtBTkRST0lEX0tFWV9BVlJfSU5QVVRdID0gS0JEX0tFWV9VTk1BUFBFRCwKKyAgW0FORFJPSURfS0VZX0FWUl9QT1dFUl0gPSBLQkRfS0VZX1VOTUFQUEVELAorCisgIFtBTkRST0lEX0tFWV9CXSA9IEtCRF9LRVlfTEVUVEVSKEIpLAorICBbQU5EUk9JRF9LRVlfQkFDS10gPSBLQkRfS0VZX1VOTUFQUEVELAorICBbQU5EUk9JRF9LRVlfQkFDS1NMQVNIXSA9IEtCRF9LRVlfU1lNQk9MKEJhY2tzbGFzaCksCisgIFtBTkRST0lEX0tFWV9CT09LTUFSS10gPSBLQkRfS0VZX1VOTUFQUEVELAorICBbQU5EUk9JRF9LRVlfQlJFQUtdID0gS0JEX0tFWV9VTk1BUFBFRCwKKyAgW0FORFJPSURfS0VZX0JVVFRPTl8xXSA9IEtCRF9LRVlfVU5NQVBQRUQsCisgIFtBTkRST0lEX0tFWV9CVVRUT05fMTBdID0gS0JEX0tFWV9VTk1BUFBFRCwKKyAgW0FORFJPSURfS0VZX0JVVFRPTl8xMV0gPSBLQkRfS0VZX1VOTUFQUEVELAorICBbQU5EUk9JRF9LRVlfQlVUVE9OXzEyXSA9IEtCRF9LRVlfVU5NQVBQRUQsCisgIFtBTkRST0lEX0tFWV9CVVRUT05fMTNdID0gS0JEX0tFWV9VTk1BUFBFRCwKKyAgW0FORFJPSURfS0VZX0JVVFRPTl8xNF0gPSBLQkRfS0VZX1VOTUFQUEVELAorICBbQU5EUk9JRF9LRVlfQlVUVE9OXzE1XSA9IEtCRF9LRVlfVU5NQVBQRUQsCisgIFtBTkRST0lEX0tFWV9CVVRUT05fMTZdID0gS0JEX0tFWV9VTk1BUFBFRCwKKyAgW0FORFJPSURfS0VZX0JVVFRPTl8yXSA9IEtCRF9LRVlfVU5NQVBQRUQsCisgIFtBTkRST0lEX0tFWV9CVVRUT05fM10gPSBLQkRfS0VZX1VOTUFQUEVELAorICBbQU5EUk9JRF9LRVlfQlVUVE9OXzRdID0gS0JEX0tFWV9VTk1BUFBFRCwKKyAgW0FORFJPSURfS0VZX0JVVFRPTl81XSA9IEtCRF9LRVlfVU5NQVBQRUQsCisgIFtBTkRST0lEX0tFWV9CVVRUT05fNl0gPSBLQkRfS0VZX1VOTUFQUEVELAorICBbQU5EUk9JRF9LRVlfQlVUVE9OXzddID0gS0JEX0tFWV9VTk1BUFBFRCwKKyAgW0FORFJPSURfS0VZX0JVVFRPTl84XSA9IEtCRF9LRVlfVU5NQVBQRUQsCisgIFtBTkRST0lEX0tFWV9CVVRUT05fOV0gPSBLQkRfS0VZX1VOTUFQUEVELAorICBbQU5EUk9JRF9LRVlfQlVUVE9OX0FdID0gS0JEX0tFWV9VTk1BUFBFRCwKKyAgW0FORFJPSURfS0VZX0JVVFRPTl9CXSA9IEtCRF9LRVlfVU5NQVBQRUQsCisgIFtBTkRST0lEX0tFWV9CVVRUT05fQ10gPSBLQkRfS0VZX1VOTUFQUEVELAorICBbQU5EUk9JRF9LRVlfQlVUVE9OX0wxXSA9IEtCRF9LRVlfVU5NQVBQRUQsCisgIFtBTkRST0lEX0tFWV9CVVRUT05fTDJdID0gS0JEX0tFWV9VTk1BUFBFRCwKKyAgW0FORFJPSURfS0VZX0JVVFRPTl9NT0RFXSA9IEtCRF9LRVlfVU5NQVBQRUQsCisgIFtBTkRST0lEX0tFWV9CVVRUT05fUjFdID0gS0JEX0tFWV9VTk1BUFBFRCwKKyAgW0FORFJPSURfS0VZX0JVVFRPTl9SMl0gPSBLQkRfS0VZX1VOTUFQUEVELAorICBbQU5EUk9JRF9LRVlfQlVUVE9OX1NFTEVDVF0gPSBLQkRfS0VZX1VOTUFQUEVELAorICBbQU5EUk9JRF9LRVlfQlVUVE9OX1NUQVJUXSA9IEtCRF9LRVlfVU5NQVBQRUQsCisgIFtBTkRST0lEX0tFWV9CVVRUT05fVEhVTUJMXSA9IEtCRF9LRVlfVU5NQVBQRUQsCisgIFtBTkRST0lEX0tFWV9CVVRUT05fVEhVTUJSXSA9IEtCRF9LRVlfVU5NQVBQRUQsCisgIFtBTkRST0lEX0tFWV9CVVRUT05fWF0gPSBLQkRfS0VZX1VOTUFQUEVELAorICBbQU5EUk9JRF9LRVlfQlVUVE9OX1ldID0gS0JEX0tFWV9VTk1BUFBFRCwKKyAgW0FORFJPSURfS0VZX0JVVFRPTl9aXSA9IEtCRF9LRVlfVU5NQVBQRUQsCisKKyAgW0FORFJPSURfS0VZX0NdID0gS0JEX0tFWV9MRVRURVIoQyksCisgIFtBTkRST0lEX0tFWV9DQUxDVUxBVE9SXSA9IEtCRF9LRVlfVU5NQVBQRUQsCisgIFtBTkRST0lEX0tFWV9DQUxFTkRBUl0gPSBLQkRfS0VZX1VOTUFQUEVELAorICBbQU5EUk9JRF9LRVlfQ0FMTF0gPSBLQkRfS0VZX1VOTUFQUEVELAorICBbQU5EUk9JRF9LRVlfQ0FNRVJBXSA9IEtCRF9LRVlfVU5NQVBQRUQsCisgIFtBTkRST0lEX0tFWV9DQVBTX0xPQ0tdID0gS0JEX0tFWV9MT0NLKENhcGl0YWxzKSwKKyAgW0FORFJPSURfS0VZX0NBUFRJT05TXSA9IEtCRF9LRVlfVU5NQVBQRUQsCisgIFtBTkRST0lEX0tFWV9DSEFOTkVMX0RPV05dID0gS0JEX0tFWV9VTk1BUFBFRCwKKyAgW0FORFJPSURfS0VZX0NIQU5ORUxfVVBdID0gS0JEX0tFWV9VTk1BUFBFRCwKKyAgW0FORFJPSURfS0VZX0NMRUFSXSA9IEtCRF9LRVlfVU5NQVBQRUQsCisgIFtBTkRST0lEX0tFWV9DT01NQV0gPSBLQkRfS0VZX1NZTUJPTChDb21tYSksCisgIFtBTkRST0lEX0tFWV9DT05UQUNUU10gPSBLQkRfS0VZX1VOTUFQUEVELAorICBbQU5EUk9JRF9LRVlfQ1RSTF9MRUZUXSA9IEtCRF9LRVlfTU9ESUZJRVIoQ29udHJvbExlZnQpLAorICBbQU5EUk9JRF9LRVlfQ1RSTF9SSUdIVF0gPSBLQkRfS0VZX01PRElGSUVSKENvbnRyb2xSaWdodCksCisKKyAgW0FORFJPSURfS0VZX0RdID0gS0JEX0tFWV9MRVRURVIoRCksCisgIFtBTkRST0lEX0tFWV9ERUxdID0gS0JEX0tFWV9BQ1RJT04oRGVsZXRlQmFja3dhcmQpLAorICBbQU5EUk9JRF9LRVlfRFBBRF9DRU5URVJdID0gS0JEX0tFWV9BQ1RJT04oU2VsZWN0KSwKKyAgW0FORFJPSURfS0VZX0RQQURfRE9XTl0gPSBLQkRfS0VZX0FDVElPTihBcnJvd0Rvd24pLAorICBbQU5EUk9JRF9LRVlfRFBBRF9MRUZUXSA9IEtCRF9LRVlfQUNUSU9OKEFycm93TGVmdCksCisgIFtBTkRST0lEX0tFWV9EUEFEX1JJR0hUXSA9IEtCRF9LRVlfQUNUSU9OKEFycm93UmlnaHQpLAorICBbQU5EUk9JRF9LRVlfRFBBRF9VUF0gPSBLQkRfS0VZX0FDVElPTihBcnJvd1VwKSwKKyAgW0FORFJPSURfS0VZX0RWUl0gPSBLQkRfS0VZX1VOTUFQUEVELAorCisgIFtBTkRST0lEX0tFWV9FXSA9IEtCRF9LRVlfTEVUVEVSKEUpLAorICBbQU5EUk9JRF9LRVlfRUlTVV0gPSBLQkRfS0VZX1VOTUFQUEVELAorICBbQU5EUk9JRF9LRVlfRU5EQ0FMTF0gPSBLQkRfS0VZX1VOTUFQUEVELAorICBbQU5EUk9JRF9LRVlfRU5URVJdID0gS0JEX0tFWV9BQ1RJT04oRW50ZXIpLAorICBbQU5EUk9JRF9LRVlfRU5WRUxPUEVdID0gS0JEX0tFWV9VTk1BUFBFRCwKKyAgW0FORFJPSURfS0VZX0VRVUFMU10gPSBLQkRfS0VZX1NZTUJPTChFcXVhbHMpLAorICBbQU5EUk9JRF9LRVlfRVNDQVBFXSA9IEtCRF9LRVlfQUNUSU9OKEVzY2FwZSksCisgIFtBTkRST0lEX0tFWV9FWFBMT1JFUl0gPSBLQkRfS0VZX1VOTUFQUEVELAorCisgIFtBTkRST0lEX0tFWV9GXSA9IEtCRF9LRVlfTEVUVEVSKEYpLAorICBbQU5EUk9JRF9LRVlfRjFdID0gS0JEX0tFWV9GVU5DVElPTihGMSksCisgIFtBTkRST0lEX0tFWV9GMTBdID0gS0JEX0tFWV9GVU5DVElPTihGMTApLAorICBbQU5EUk9JRF9LRVlfRjExXSA9IEtCRF9LRVlfRlVOQ1RJT04oRjExKSwKKyAgW0FORFJPSURfS0VZX0YxMl0gPSBLQkRfS0VZX0ZVTkNUSU9OKEYxMiksCisgIFtBTkRST0lEX0tFWV9GMl0gPSBLQkRfS0VZX0ZVTkNUSU9OKEYyKSwKKyAgW0FORFJPSURfS0VZX0YzXSA9IEtCRF9LRVlfRlVOQ1RJT04oRjMpLAorICBbQU5EUk9JRF9LRVlfRjRdID0gS0JEX0tFWV9GVU5DVElPTihGNCksCisgIFtBTkRST0lEX0tFWV9GNV0gPSBLQkRfS0VZX0ZVTkNUSU9OKEY1KSwKKyAgW0FORFJPSURfS0VZX0Y2XSA9IEtCRF9LRVlfRlVOQ1RJT04oRjYpLAorICBbQU5EUk9JRF9LRVlfRjddID0gS0JEX0tFWV9GVU5DVElPTihGNyksCisgIFtBTkRST0lEX0tFWV9GOF0gPSBLQkRfS0VZX0ZVTkNUSU9OKEY4KSwKKyAgW0FORFJPSURfS0VZX0Y5XSA9IEtCRF9LRVlfRlVOQ1RJT04oRjkpLAorICBbQU5EUk9JRF9LRVlfRk9DVVNdID0gS0JEX0tFWV9VTk1BUFBFRCwKKyAgW0FORFJPSURfS0VZX0ZPUldBUkRdID0gS0JEX0tFWV9VTk1BUFBFRCwKKyAgW0FORFJPSURfS0VZX0ZPUldBUkRfREVMXSA9IEtCRF9LRVlfQUNUSU9OKERlbGV0ZUZvcndhcmQpLAorICBbQU5EUk9JRF9LRVlfRlVOQ1RJT05dID0gS0JEX0tFWV9VTk1BUFBFRCwKKworICBbQU5EUk9JRF9LRVlfR10gPSBLQkRfS0VZX0xFVFRFUihHKSwKKyAgW0FORFJPSURfS0VZX0dSQVZFXSA9IEtCRF9LRVlfU1lNQk9MKEdyYXZlKSwKKyAgW0FORFJPSURfS0VZX0dVSURFXSA9IEtCRF9LRVlfVU5NQVBQRUQsCisKKyAgW0FORFJPSURfS0VZX0hdID0gS0JEX0tFWV9MRVRURVIoSCksCisgIFtBTkRST0lEX0tFWV9IRUFEU0VUSE9PS10gPSBLQkRfS0VZX1VOTUFQUEVELAorICBbQU5EUk9JRF9LRVlfSEVOS0FOXSA9IEtCRF9LRVlfVU5NQVBQRUQsCisgIFtBTkRST0lEX0tFWV9IT01FXSA9IEtCRF9LRVlfVU5NQVBQRUQsCisKKyAgW0FORFJPSURfS0VZX0ldID0gS0JEX0tFWV9MRVRURVIoSSksCisgIFtBTkRST0lEX0tFWV9JTkZPXSA9IEtCRF9LRVlfVU5NQVBQRUQsCisgIFtBTkRST0lEX0tFWV9JTlNFUlRdID0gS0JEX0tFWV9BQ1RJT04oSW5zZXJ0KSwKKworICBbQU5EUk9JRF9LRVlfSl0gPSBLQkRfS0VZX0xFVFRFUihKKSwKKworICBbQU5EUk9JRF9LRVlfS10gPSBLQkRfS0VZX0xFVFRFUihLKSwKKyAgW0FORFJPSURfS0VZX0tBTkFdID0gS0JEX0tFWV9VTk1BUFBFRCwKKyAgW0FORFJPSURfS0VZX0tBVEFLQU5BX0hJUkFHQU5BXSA9IEtCRF9LRVlfVU5NQVBQRUQsCisKKyAgW0FORFJPSURfS0VZX0xdID0gS0JEX0tFWV9MRVRURVIoTCksCisgIFtBTkRST0lEX0tFWV9MQU5HVUFHRV9TV0lUQ0hdID0gS0JEX0tFWV9VTk1BUFBFRCwKKyAgW0FORFJPSURfS0VZX0xFRlRfQlJBQ0tFVF0gPSBLQkRfS0VZX1NZTUJPTChMZWZ0QnJhY2tldCksCisKKyAgW0FORFJPSURfS0VZX01dID0gS0JEX0tFWV9MRVRURVIoTSksCisgIFtBTkRST0lEX0tFWV9NQU5ORVJfTU9ERV0gPSBLQkRfS0VZX1VOTUFQUEVELAorICBbQU5EUk9JRF9LRVlfTUVESUFfQ0xPU0VdID0gS0JEX0tFWV9NRURJQShDbG9zZSksCisgIFtBTkRST0lEX0tFWV9NRURJQV9FSkVDVF0gPSBLQkRfS0VZX01FRElBKEVqZWN0KSwKKyAgW0FORFJPSURfS0VZX01FRElBX0ZBU1RfRk9SV0FSRF0gPSBLQkRfS0VZX01FRElBKEZvcndhcmQpLAorICBbQU5EUk9JRF9LRVlfTUVESUFfTkVYVF0gPSBLQkRfS0VZX01FRElBKE5leHQpLAorICBbQU5EUk9JRF9LRVlfTUVESUFfUEFVU0VdID0gS0JEX0tFWV9NRURJQShQYXVzZSksCisgIFtBTkRST0lEX0tFWV9NRURJQV9QTEFZXSA9IEtCRF9LRVlfTUVESUEoUGxheSksCisgIFtBTkRST0lEX0tFWV9NRURJQV9QTEFZX1BBVVNFXSA9IEtCRF9LRVlfTUVESUEoUGxheVBhdXNlKSwKKyAgW0FORFJPSURfS0VZX01FRElBX1BSRVZJT1VTXSA9IEtCRF9LRVlfTUVESUEoUHJldmlvdXMpLAorICBbQU5EUk9JRF9LRVlfTUVESUFfUkVDT1JEXSA9IEtCRF9LRVlfTUVESUEoUmVjb3JkKSwKKyAgW0FORFJPSURfS0VZX01FRElBX1JFV0lORF0gPSBLQkRfS0VZX01FRElBKEJhY2t3YXJkKSwKKyAgW0FORFJPSURfS0VZX01FRElBX1NUT1BdID0gS0JEX0tFWV9NRURJQShTdG9wKSwKKyAgW0FORFJPSURfS0VZX01FTlVdID0gS0JEX0tFWV9BQ1RJT04oTWVudSksCisgIFtBTkRST0lEX0tFWV9NRVRBX0xFRlRdID0gS0JEX0tFWV9VTk1BUFBFRCwKKyAgW0FORFJPSURfS0VZX01FVEFfUklHSFRdID0gS0JEX0tFWV9VTk1BUFBFRCwKKyAgW0FORFJPSURfS0VZX01JTlVTXSA9IEtCRF9LRVlfU1lNQk9MKE1pbnVzKSwKKyAgW0FORFJPSURfS0VZX01PVkVfRU5EXSA9IEtCRF9LRVlfQUNUSU9OKEVuZCksCisgIFtBTkRST0lEX0tFWV9NT1ZFX0hPTUVdID0gS0JEX0tFWV9BQ1RJT04oSG9tZSksCisgIFtBTkRST0lEX0tFWV9NVUhFTktBTl0gPSBLQkRfS0VZX1VOTUFQUEVELAorICBbQU5EUk9JRF9LRVlfTVVTSUNdID0gS0JEX0tFWV9VTk1BUFBFRCwKKyAgW0FORFJPSURfS0VZX01VVEVdID0gS0JEX0tFWV9NRURJQShNdXRlKSwKKworICBbQU5EUk9JRF9LRVlfTl0gPSBLQkRfS0VZX0xFVFRFUihOKSwKKyAgW0FORFJPSURfS0VZX05PVElGSUNBVElPTl0gPSBLQkRfS0VZX1VOTUFQUEVELAorICBbQU5EUk9JRF9LRVlfTlVNXSA9IEtCRF9LRVlfVU5NQVBQRUQsCisgIFtBTkRST0lEX0tFWV9OVU1QQURfMF0gPSBLQkRfS0VZX0tQTlVNQkVSKFplcm8pLAorICBbQU5EUk9JRF9LRVlfTlVNUEFEXzFdID0gS0JEX0tFWV9LUE5VTUJFUihPbmUpLAorICBbQU5EUk9JRF9LRVlfTlVNUEFEXzJdID0gS0JEX0tFWV9LUE5VTUJFUihUd28pLAorICBbQU5EUk9JRF9LRVlfTlVNUEFEXzNdID0gS0JEX0tFWV9LUE5VTUJFUihUaHJlZSksCisgIFtBTkRST0lEX0tFWV9OVU1QQURfNF0gPSBLQkRfS0VZX0tQTlVNQkVSKEZvdXIpLAorICBbQU5EUk9JRF9LRVlfTlVNUEFEXzVdID0gS0JEX0tFWV9LUE5VTUJFUihGaXZlKSwKKyAgW0FORFJPSURfS0VZX05VTVBBRF82XSA9IEtCRF9LRVlfS1BOVU1CRVIoU2l4KSwKKyAgW0FORFJPSURfS0VZX05VTVBBRF83XSA9IEtCRF9LRVlfS1BOVU1CRVIoU2V2ZW4pLAorICBbQU5EUk9JRF9LRVlfTlVNUEFEXzhdID0gS0JEX0tFWV9LUE5VTUJFUihFaWdodCksCisgIFtBTkRST0lEX0tFWV9OVU1QQURfOV0gPSBLQkRfS0VZX0tQTlVNQkVSKE5pbmUpLAorICBbQU5EUk9JRF9LRVlfTlVNUEFEX0FERF0gPSBLQkRfS0VZX0tQU1lNQk9MKFBsdXMpLAorICBbQU5EUk9JRF9LRVlfTlVNUEFEX0NPTU1BXSA9IEtCRF9LRVlfS1BTWU1CT0woQ29tbWEpLAorICBbQU5EUk9JRF9LRVlfTlVNUEFEX0RJVklERV0gPSBLQkRfS0VZX0tQU1lNQk9MKERpdmlkZSksCisgIFtBTkRST0lEX0tFWV9OVU1QQURfRE9UXSA9IEtCRF9LRVlfS1BTWU1CT0woUGVyaW9kKSwKKyAgW0FORFJPSURfS0VZX05VTVBBRF9FTlRFUl0gPSBLQkRfS0VZX0tQQUNUSU9OKEVudGVyKSwKKyAgW0FORFJPSURfS0VZX05VTVBBRF9FUVVBTFNdID0gS0JEX0tFWV9LUFNZTUJPTChFcXVhbHMpLAorICBbQU5EUk9JRF9LRVlfTlVNUEFEX0xFRlRfUEFSRU5dID0gS0JEX0tFWV9LUFNZTUJPTChMZWZ0UGFyZW50aGVzaXMpLAorICBbQU5EUk9JRF9LRVlfTlVNUEFEX01VTFRJUExZXSA9IEtCRF9LRVlfS1BTWU1CT0woTXVsdGlwbHkpLAorICBbQU5EUk9JRF9LRVlfTlVNUEFEX1JJR0hUX1BBUkVOXSA9IEtCRF9LRVlfS1BTWU1CT0woUmlnaHRQYXJlbnRoZXNpcyksCisgIFtBTkRST0lEX0tFWV9OVU1QQURfU1VCVFJBQ1RdID0gS0JEX0tFWV9LUFNZTUJPTChNaW51cyksCisgIFtBTkRST0lEX0tFWV9OVU1fTE9DS10gPSBLQkRfS0VZX0xPQ0soTnVtYmVycyksCisKKyAgW0FORFJPSURfS0VZX09dID0gS0JEX0tFWV9MRVRURVIoTyksCisKKyAgW0FORFJPSURfS0VZX1BdID0gS0JEX0tFWV9MRVRURVIoUCksCisgIFtBTkRST0lEX0tFWV9QQUdFX0RPV05dID0gS0JEX0tFWV9BQ1RJT04oUGFnZURvd24pLAorICBbQU5EUk9JRF9LRVlfUEFHRV9VUF0gPSBLQkRfS0VZX0FDVElPTihQYWdlVXApLAorICBbQU5EUk9JRF9LRVlfUEVSSU9EXSA9IEtCRF9LRVlfU1lNQk9MKFBlcmlvZCksCisgIFtBTkRST0lEX0tFWV9QSUNUU1lNQk9MU10gPSBLQkRfS0VZX1VOTUFQUEVELAorICBbQU5EUk9JRF9LRVlfUExVU10gPSBLQkRfS0VZX1VOTUFQUEVELAorICBbQU5EUk9JRF9LRVlfUE9VTkRdID0gS0JEX0tFWV9VTk1BUFBFRCwKKyAgW0FORFJPSURfS0VZX1BPV0VSXSA9IEtCRF9LRVlfQUNUSU9OKFBvd2VyKSwKKyAgW0FORFJPSURfS0VZX1BST0dfQkxVRV0gPSBLQkRfS0VZX1VOTUFQUEVELAorICBbQU5EUk9JRF9LRVlfUFJPR19HUkVFTl0gPSBLQkRfS0VZX1VOTUFQUEVELAorICBbQU5EUk9JRF9LRVlfUFJPR19SRURdID0gS0JEX0tFWV9VTk1BUFBFRCwKKyAgW0FORFJPSURfS0VZX1BST0dfWUVMTE9XXSA9IEtCRF9LRVlfVU5NQVBQRUQsCisKKyAgW0FORFJPSURfS0VZX1FdID0gS0JEX0tFWV9MRVRURVIoUSksCisKKyAgW0FORFJPSURfS0VZX1JdID0gS0JEX0tFWV9MRVRURVIoUiksCisgIFtBTkRST0lEX0tFWV9SSUdIVF9CUkFDS0VUXSA9IEtCRF9LRVlfU1lNQk9MKFJpZ2h0QnJhY2tldCksCisgIFtBTkRST0lEX0tFWV9ST10gPSBLQkRfS0VZX1VOTUFQUEVELAorCisgIFtBTkRST0lEX0tFWV9TXSA9IEtCRF9LRVlfTEVUVEVSKFMpLAorICBbQU5EUk9JRF9LRVlfU0NST0xMX0xPQ0tdID0gS0JEX0tFWV9MT0NLKFNjcm9sbCksCisgIFtBTkRST0lEX0tFWV9TRUFSQ0hdID0gS0JEX0tFWV9BQ1RJT04oRmluZCksCisgIFtBTkRST0lEX0tFWV9TRU1JQ09MT05dID0gS0JEX0tFWV9TWU1CT0woU2VtaWNvbG9uKSwKKyAgW0FORFJPSURfS0VZX1NFVFRJTkdTXSA9IEtCRF9LRVlfVU5NQVBQRUQsCisgIFtBTkRST0lEX0tFWV9TSElGVF9MRUZUXSA9IEtCRF9LRVlfTU9ESUZJRVIoU2hpZnRMZWZ0KSwKKyAgW0FORFJPSURfS0VZX1NISUZUX1JJR0hUXSA9IEtCRF9LRVlfTU9ESUZJRVIoU2hpZnRSaWdodCksCisgIFtBTkRST0lEX0tFWV9TTEFTSF0gPSBLQkRfS0VZX1NZTUJPTChTbGFzaCksCisgIFtBTkRST0lEX0tFWV9TT0ZUX0xFRlRdID0gS0JEX0tFWV9VTk1BUFBFRCwKKyAgW0FORFJPSURfS0VZX1NPRlRfUklHSFRdID0gS0JEX0tFWV9VTk1BUFBFRCwKKyAgW0FORFJPSURfS0VZX1NQQUNFXSA9IEtCRF9LRVlfU1lNQk9MKFNwYWNlKSwKKyAgW0FORFJPSURfS0VZX1NUQVJdID0gS0JEX0tFWV9VTk1BUFBFRCwKKyAgW0FORFJPSURfS0VZX1NUQl9JTlBVVF0gPSBLQkRfS0VZX1VOTUFQUEVELAorICBbQU5EUk9JRF9LRVlfU1RCX1BPV0VSXSA9IEtCRF9LRVlfVU5NQVBQRUQsCisgIFtBTkRST0lEX0tFWV9TV0lUQ0hfQ0hBUlNFVF0gPSBLQkRfS0VZX1VOTUFQUEVELAorICBbQU5EUk9JRF9LRVlfU1lNXSA9IEtCRF9LRVlfVU5NQVBQRUQsCisgIFtBTkRST0lEX0tFWV9TWVNSUV0gPSBLQkRfS0VZX0FDVElPTihTeXN0ZW1SZXF1ZXN0KSwKKworICBbQU5EUk9JRF9LRVlfVF0gPSBLQkRfS0VZX0xFVFRFUihUKSwKKyAgW0FORFJPSURfS0VZX1RBQl0gPSBLQkRfS0VZX0FDVElPTihUYWIpLAorICBbQU5EUk9JRF9LRVlfVFZdID0gS0JEX0tFWV9VTk1BUFBFRCwKKyAgW0FORFJPSURfS0VZX1RWX0lOUFVUXSA9IEtCRF9LRVlfVU5NQVBQRUQsCisgIFtBTkRST0lEX0tFWV9UVl9QT1dFUl0gPSBLQkRfS0VZX1VOTUFQUEVELAorCisgIFtBTkRST0lEX0tFWV9VXSA9IEtCRF9LRVlfTEVUVEVSKFUpLAorICBbQU5EUk9JRF9LRVlfVU5LTk9XTl0gPSBLQkRfS0VZX1VOTUFQUEVELAorCisgIFtBTkRST0lEX0tFWV9WXSA9IEtCRF9LRVlfTEVUVEVSKFYpLAorICBbQU5EUk9JRF9LRVlfVk9MVU1FX0RPV05dID0gS0JEX0tFWV9NRURJQShWb2x1bWVEb3duKSwKKyAgW0FORFJPSURfS0VZX1ZPTFVNRV9NVVRFXSA9IEtCRF9LRVlfTUVESUEoTXV0ZSksCisgIFtBTkRST0lEX0tFWV9WT0xVTUVfVVBdID0gS0JEX0tFWV9NRURJQShWb2x1bWVVcCksCisKKyAgW0FORFJPSURfS0VZX1ddID0gS0JEX0tFWV9MRVRURVIoVyksCisgIFtBTkRST0lEX0tFWV9XSU5ET1ddID0gS0JEX0tFWV9VTk1BUFBFRCwKKworICBbQU5EUk9JRF9LRVlfWF0gPSBLQkRfS0VZX0xFVFRFUihYKSwKKworICBbQU5EUk9JRF9LRVlfWV0gPSBLQkRfS0VZX0xFVFRFUihZKSwKKyAgW0FORFJPSURfS0VZX1lFTl0gPSBLQkRfS0VZX1VOTUFQUEVELAorCisgIFtBTkRST0lEX0tFWV9aXSA9IEtCRF9LRVlfTEVUVEVSKFopLAorICBbQU5EUk9JRF9LRVlfWkVOS0FLVV9IQU5LQUtVXSA9IEtCRF9LRVlfVU5NQVBQRUQsCisgIFtBTkRST0lEX0tFWV9aT09NX0lOXSA9IEtCRF9LRVlfVU5NQVBQRUQsCisgIFtBTkRST0lEX0tFWV9aT09NX09VVF0gPSBLQkRfS0VZX1VOTUFQUEVELAorCisgIFtCMkdfS0VZX0NIQVJBQ1RFUlMgLi4uIEIyR19LRVlfQ0hBUkFDVEVSUyswWEZGXSA9IEtCRF9LRVlfSUdOT1JFLAorICBbQjJHX0tFWV9DSE9SRFMgLi4uIEIyR19LRVlfQ0hPUkRTKzBYRkZdID0gS0JEX0tFWV9JR05PUkUsCisKKyAgW0IyR19LRVlfRE9UMV0gPSBLQkRfS0VZX0JSQUlMTEUoRG90NyksCisgIFtCMkdfS0VZX0RPVDJdID0gS0JEX0tFWV9CUkFJTExFKERvdDMpLAorICBbQjJHX0tFWV9ET1QzXSA9IEtCRF9LRVlfQlJBSUxMRShEb3QyKSwKKyAgW0IyR19LRVlfRE9UNF0gPSBLQkRfS0VZX0JSQUlMTEUoRG90MSksCisgIFtCMkdfS0VZX0RPVDVdID0gS0JEX0tFWV9CUkFJTExFKERvdDQpLAorICBbQjJHX0tFWV9ET1Q2XSA9IEtCRF9LRVlfQlJBSUxMRShEb3Q1KSwKKyAgW0IyR19LRVlfRE9UN10gPSBLQkRfS0VZX0JSQUlMTEUoRG90NiksCisgIFtCMkdfS0VZX0RPVDhdID0gS0JEX0tFWV9CUkFJTExFKERvdDgpLAorICBbQjJHX0tFWV9ET1Q5XSA9IEtCRF9LRVlfQlJBSUxMRShTcGFjZSksCisKKyAgW0IyR19LRVlfQ1VSU09SMF0gPSBLQkRfS0VZX1JPVVRJTkcoMCksCisgIFtCMkdfS0VZX0NVUlNPUjFdID0gS0JEX0tFWV9ST1VUSU5HKDEpLAorICBbQjJHX0tFWV9DVVJTT1IyXSA9IEtCRF9LRVlfUk9VVElORygyKSwKKyAgW0IyR19LRVlfQ1VSU09SM10gPSBLQkRfS0VZX1JPVVRJTkcoMyksCisgIFtCMkdfS0VZX0NVUlNPUjRdID0gS0JEX0tFWV9ST1VUSU5HKDQpLAorICBbQjJHX0tFWV9DVVJTT1I1XSA9IEtCRF9LRVlfUk9VVElORyg1KSwKKyAgW0IyR19LRVlfQ1VSU09SNl0gPSBLQkRfS0VZX1JPVVRJTkcoNiksCisgIFtCMkdfS0VZX0NVUlNPUjddID0gS0JEX0tFWV9ST1VUSU5HKDcpLAorICBbQjJHX0tFWV9DVVJTT1I4XSA9IEtCRF9LRVlfUk9VVElORyg4KSwKKyAgW0IyR19LRVlfQ1VSU09SOV0gPSBLQkRfS0VZX1JPVVRJTkcoOSksCisgIFtCMkdfS0VZX0NVUlNPUjEwXSA9IEtCRF9LRVlfUk9VVElORygxMCksCisgIFtCMkdfS0VZX0NVUlNPUjExXSA9IEtCRF9LRVlfUk9VVElORygxMSksCisgIFtCMkdfS0VZX0NVUlNPUjEyXSA9IEtCRF9LRVlfUk9VVElORygxMiksCisgIFtCMkdfS0VZX0NVUlNPUjEzXSA9IEtCRF9LRVlfUk9VVElORygxMyksCisgIFtCMkdfS0VZX0NVUlNPUjE0XSA9IEtCRF9LRVlfUk9VVElORygxNCksCisgIFtCMkdfS0VZX0NVUlNPUjE1XSA9IEtCRF9LRVlfUk9VVElORygxNSksCisgIFtCMkdfS0VZX0NVUlNPUjE2XSA9IEtCRF9LRVlfUk9VVElORygxNiksCisgIFtCMkdfS0VZX0NVUlNPUjE3XSA9IEtCRF9LRVlfUk9VVElORygxNyksCisgIFtCMkdfS0VZX0NVUlNPUjE4XSA9IEtCRF9LRVlfUk9VVElORygxOCksCisgIFtCMkdfS0VZX0NVUlNPUjE5XSA9IEtCRF9LRVlfUk9VVElORygxOSksCisgIFtCMkdfS0VZX0NVUlNPUjIwXSA9IEtCRF9LRVlfUk9VVElORygyMCksCisgIFtCMkdfS0VZX0NVUlNPUjIxXSA9IEtCRF9LRVlfUk9VVElORygyMSksCisgIFtCMkdfS0VZX0NVUlNPUjIyXSA9IEtCRF9LRVlfUk9VVElORygyMiksCisgIFtCMkdfS0VZX0NVUlNPUjIzXSA9IEtCRF9LRVlfUk9VVElORygyMyksCisgIFtCMkdfS0VZX0NVUlNPUjI0XSA9IEtCRF9LRVlfUk9VVElORygyNCksCisgIFtCMkdfS0VZX0NVUlNPUjI1XSA9IEtCRF9LRVlfUk9VVElORygyNSksCisgIFtCMkdfS0VZX0NVUlNPUjI2XSA9IEtCRF9LRVlfUk9VVElORygyNiksCisgIFtCMkdfS0VZX0NVUlNPUjI3XSA9IEtCRF9LRVlfUk9VVElORygyNyksCisgIFtCMkdfS0VZX0NVUlNPUjI4XSA9IEtCRF9LRVlfUk9VVElORygyOCksCisgIFtCMkdfS0VZX0NVUlNPUjI5XSA9IEtCRF9LRVlfUk9VVElORygyOSksCisgIFtCMkdfS0VZX0NVUlNPUjMwXSA9IEtCRF9LRVlfUk9VVElORygzMCksCisgIFtCMkdfS0VZX0NVUlNPUjMxXSA9IEtCRF9LRVlfUk9VVElORygzMSksCisgIFtCMkdfS0VZX0NVUlNPUjMyXSA9IEtCRF9LRVlfUk9VVElORygzMiksCisgIFtCMkdfS0VZX0NVUlNPUjMzXSA9IEtCRF9LRVlfUk9VVElORygzMyksCisgIFtCMkdfS0VZX0NVUlNPUjM0XSA9IEtCRF9LRVlfUk9VVElORygzNCksCisgIFtCMkdfS0VZX0NVUlNPUjM1XSA9IEtCRF9LRVlfUk9VVElORygzNSksCisgIFtCMkdfS0VZX0NVUlNPUjM2XSA9IEtCRF9LRVlfUk9VVElORygzNiksCisgIFtCMkdfS0VZX0NVUlNPUjM3XSA9IEtCRF9LRVlfUk9VVElORygzNyksCisgIFtCMkdfS0VZX0NVUlNPUjM4XSA9IEtCRF9LRVlfUk9VVElORygzOCksCisgIFtCMkdfS0VZX0NVUlNPUjM5XSA9IEtCRF9LRVlfUk9VVElORygzOSksCisKKyAgW0IyR19LRVlfQkFDS10gPSBLQkRfS0VZX0JSQUlMTEUoQmFja3dhcmQpLAorICBbQjJHX0tFWV9GT1JXQVJEXSA9IEtCRF9LRVlfQlJBSUxMRShGb3J3YXJkKSwKK0VORF9LRVlfQ09ERV9NQVAKKworc3RhdGljIEtleWJvYXJkSW5zdGFuY2VPYmplY3QgKmtleWJvYXJkSW5zdGFuY2UgPSBOVUxMOworCitzdHJ1Y3QgS2V5Ym9hcmRJbnN0YW5jZUV4dGVuc2lvblN0cnVjdCB7CisgIEpOSUVudiAqZW52OworICBqb2JqZWN0IG9iamVjdDsKKworICBqY2xhc3MgaW5wdXRTZXJ2aWNlOworICBqbWV0aG9kSUQgZm9yd2FyZEtleUV2ZW50OworfTsKKworaW50CituZXdLZXlib2FyZE1vbml0b3JFeHRlbnNpb24gKEtleWJvYXJkTW9uaXRvckV4dGVuc2lvbiAqKmtteCkgeworICByZXR1cm4gMTsKK30KKwordm9pZAorZGVzdHJveUtleWJvYXJkTW9uaXRvckV4dGVuc2lvbiAoS2V5Ym9hcmRNb25pdG9yRXh0ZW5zaW9uICprbXgpIHsKK30KKworaW50CituZXdLZXlib2FyZEluc3RhbmNlRXh0ZW5zaW9uIChLZXlib2FyZEluc3RhbmNlRXh0ZW5zaW9uICoqa2l4KSB7CisgIGlmICgoKmtpeCA9IG1hbGxvYyhzaXplb2YoKipraXgpKSkpIHsKKyAgICBtZW1zZXQoKmtpeCwgIDAsIHNpemVvZigqKmtpeCkpOworCisgICAgKCpraXgpLT5lbnYgPSBOVUxMOworICAgICgqa2l4KS0+b2JqZWN0ID0gTlVMTDsKKworICAgICgqa2l4KS0+aW5wdXRTZXJ2aWNlID0gTlVMTDsKKyAgICAoKmtpeCktPmZvcndhcmRLZXlFdmVudCA9IDA7CisKKyAgICByZXR1cm4gMTsKKyAgfSBlbHNlIHsKKyAgICBsb2dNYWxsb2NFcnJvcigpOworICB9CisKKyAgcmV0dXJuIDA7Cit9CisKK3ZvaWQKK2Rlc3Ryb3lLZXlib2FyZEluc3RhbmNlRXh0ZW5zaW9uIChLZXlib2FyZEluc3RhbmNlRXh0ZW5zaW9uICpraXgpIHsKKyAga2V5Ym9hcmRJbnN0YW5jZSA9IE5VTEw7CisgIGZyZWUoa2l4KTsKK30KKworaW50Citmb3J3YXJkS2V5RXZlbnQgKEtleWJvYXJkSW5zdGFuY2VPYmplY3QgKmtpbywgaW50IGNvZGUsIGludCBwcmVzcykgeworICBLZXlib2FyZEluc3RhbmNlRXh0ZW5zaW9uICpraXggPSBraW8tPmtpeDsKKworICBpZiAoZmluZEphdmFDbGFzcyhraXgtPmVudiwgJmtpeC0+aW5wdXRTZXJ2aWNlLCBKQVZBX09CSl9CUkxUVFkoIklucHV0U2VydmljZSIpKSkgeworICAgIGlmIChmaW5kSmF2YUluc3RhbmNlTWV0aG9kKGtpeC0+ZW52LCAma2l4LT5mb3J3YXJkS2V5RXZlbnQsIGtpeC0+aW5wdXRTZXJ2aWNlLCAiZm9yd2FyZEtleUV2ZW50IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKQVZBX1NJR19NRVRIT0QoSkFWQV9TSUdfVk9JRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSkFWQV9TSUdfSU5UIC8vIGNvZGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSkFWQV9TSUdfQk9PTEVBTiAvLyBwcmVzcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkpKSB7CisgICAgICAoKmtpeC0+ZW52KS0+Q2FsbFZvaWRNZXRob2QoCisgICAgICAgIGtpeC0+ZW52LCBraXgtPm9iamVjdCwga2l4LT5mb3J3YXJkS2V5RXZlbnQsCisgICAgICAgIGNvZGUsIChwcmVzcz8gSk5JX1RSVUU6IEpOSV9GQUxTRSkKKyAgICAgICk7CisKKyAgICAgIGlmICghY2xlYXJKYXZhRXhjZXB0aW9uKGtpeC0+ZW52LCAxKSkgeworICAgICAgICByZXR1cm4gMTsKKyAgICAgIH0KKyAgICB9CisgIH0KKworICByZXR1cm4gMDsKK30KKworSkFWQV9JTlNUQU5DRV9NRVRIT0QgKAorICBvcmdfYTExeV9icmx0dHlfYW5kcm9pZF9JbnB1dFNlcnZpY2UsIGhhbmRsZUtleUV2ZW50LCBqYm9vbGVhbiwKKyAgamludCBjb2RlLCBqYm9vbGVhbiBwcmVzcworKSB7CisgIEtleWJvYXJkSW5zdGFuY2VPYmplY3QgKmtpbyA9IGtleWJvYXJkSW5zdGFuY2U7CisKKyAgaWYgKGtpbykgeworICAgIEtleWJvYXJkSW5zdGFuY2VFeHRlbnNpb24gKmtpeCA9IGtpby0+a2l4OworCisgICAga2l4LT5lbnYgPSBlbnY7CisgICAga2l4LT5vYmplY3QgPSB0aGlzOworCisgICAgaGFuZGxlS2V5RXZlbnQoa2lvLCBjb2RlLCAocHJlc3MgIT0gSk5JX0ZBTFNFKSk7CisgICAgcmV0dXJuIEpOSV9UUlVFOworICB9CisKKyAgcmV0dXJuIEpOSV9GQUxTRTsKK30KKworaW50Cittb25pdG9yS2V5Ym9hcmRzIChLZXlib2FyZE1vbml0b3JPYmplY3QgKmttbykgeworICBLZXlib2FyZEluc3RhbmNlT2JqZWN0ICpraW87CisKKyAgaWYgKChraW8gPSBuZXdLZXlib2FyZEluc3RhbmNlT2JqZWN0KGttbykpKSB7CisgICAga2V5Ym9hcmRJbnN0YW5jZSA9IGtpbzsKKyAgICByZXR1cm4gMTsKKyAgfQorCisgIHJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvUHJvZ3JhbXMva2JkX2FuZHJvaWQuaCBiL1Byb2dyYW1zL2tiZF9hbmRyb2lkLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDc1OTJmMAotLS0gL2Rldi9udWxsCisrKyBiL1Byb2dyYW1zL2tiZF9hbmRyb2lkLmgKQEAgLTAsMCArMSwzMzYgQEAKKy8qCisgKiBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorICogICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorICoKKyAqIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorICoKKyAqIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyAqLworCisjaWZuZGVmIEJSTFRUWV9JTkNMVURFRF9LQkRfQU5EUk9JRAorI2RlZmluZSBCUkxUVFlfSU5DTFVERURfS0JEX0FORFJPSUQKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZiAvKiBfX2NwbHVzcGx1cyAqLworCit0eXBlZGVmIGVudW0geworICBBTkRST0lEX0tFWV8wID0gNywKKyAgQU5EUk9JRF9LRVlfMSA9IDgsCisgIEFORFJPSURfS0VZXzIgPSA5LAorICBBTkRST0lEX0tFWV8zID0gMTAsCisgIEFORFJPSURfS0VZXzNEX01PREUgPSAyMDYsCisgIEFORFJPSURfS0VZXzQgPSAxMSwKKyAgQU5EUk9JRF9LRVlfNSA9IDEyLAorICBBTkRST0lEX0tFWV82ID0gMTMsCisgIEFORFJPSURfS0VZXzcgPSAxNCwKKyAgQU5EUk9JRF9LRVlfOCA9IDE1LAorICBBTkRST0lEX0tFWV85ID0gMTYsCisKKyAgQU5EUk9JRF9LRVlfQSA9IDI5LAorICBBTkRST0lEX0tFWV9BTFRfTEVGVCA9IDU3LAorICBBTkRST0lEX0tFWV9BTFRfUklHSFQgPSA1OCwKKyAgQU5EUk9JRF9LRVlfQVBPU1RST1BIRSA9IDc1LAorICBBTkRST0lEX0tFWV9BUFBfU1dJVENIID0gMTg3LAorICBBTkRST0lEX0tFWV9BU1NJU1QgPSAyMTksCisgIEFORFJPSURfS0VZX0FUID0gNzcsCisgIEFORFJPSURfS0VZX0FWUl9JTlBVVCA9IDE4MiwKKyAgQU5EUk9JRF9LRVlfQVZSX1BPV0VSID0gMTgxLAorCisgIEFORFJPSURfS0VZX0IgPSAzMCwKKyAgQU5EUk9JRF9LRVlfQkFDSyA9IDQsCisgIEFORFJPSURfS0VZX0JBQ0tTTEFTSCA9IDczLAorICBBTkRST0lEX0tFWV9CT09LTUFSSyA9IDE3NCwKKyAgQU5EUk9JRF9LRVlfQlJFQUsgPSAxMjEsCisgIEFORFJPSURfS0VZX0JVVFRPTl8xID0gMTg4LAorICBBTkRST0lEX0tFWV9CVVRUT05fMTAgPSAxOTcsCisgIEFORFJPSURfS0VZX0JVVFRPTl8xMSA9IDE5OCwKKyAgQU5EUk9JRF9LRVlfQlVUVE9OXzEyID0gMTk5LAorICBBTkRST0lEX0tFWV9CVVRUT05fMTMgPSAyMDAsCisgIEFORFJPSURfS0VZX0JVVFRPTl8xNCA9IDIwMSwKKyAgQU5EUk9JRF9LRVlfQlVUVE9OXzE1ID0gMjAyLAorICBBTkRST0lEX0tFWV9CVVRUT05fMTYgPSAyMDMsCisgIEFORFJPSURfS0VZX0JVVFRPTl8yID0gMTg5LAorICBBTkRST0lEX0tFWV9CVVRUT05fMyA9IDE5MCwKKyAgQU5EUk9JRF9LRVlfQlVUVE9OXzQgPSAxOTEsCisgIEFORFJPSURfS0VZX0JVVFRPTl81ID0gMTkyLAorICBBTkRST0lEX0tFWV9CVVRUT05fNiA9IDE5MywKKyAgQU5EUk9JRF9LRVlfQlVUVE9OXzcgPSAxOTQsCisgIEFORFJPSURfS0VZX0JVVFRPTl84ID0gMTk1LAorICBBTkRST0lEX0tFWV9CVVRUT05fOSA9IDE5NiwKKyAgQU5EUk9JRF9LRVlfQlVUVE9OX0EgPSA5NiwKKyAgQU5EUk9JRF9LRVlfQlVUVE9OX0IgPSA5NywKKyAgQU5EUk9JRF9LRVlfQlVUVE9OX0MgPSA5OCwKKyAgQU5EUk9JRF9LRVlfQlVUVE9OX0wxID0gMTAyLAorICBBTkRST0lEX0tFWV9CVVRUT05fTDIgPSAxMDQsCisgIEFORFJPSURfS0VZX0JVVFRPTl9NT0RFID0gMTEwLAorICBBTkRST0lEX0tFWV9CVVRUT05fUjEgPSAxMDMsCisgIEFORFJPSURfS0VZX0JVVFRPTl9SMiA9IDEwNSwKKyAgQU5EUk9JRF9LRVlfQlVUVE9OX1NFTEVDVCA9IDEwOSwKKyAgQU5EUk9JRF9LRVlfQlVUVE9OX1NUQVJUID0gMTA4LAorICBBTkRST0lEX0tFWV9CVVRUT05fVEhVTUJMID0gMTA2LAorICBBTkRST0lEX0tFWV9CVVRUT05fVEhVTUJSID0gMTA3LAorICBBTkRST0lEX0tFWV9CVVRUT05fWCA9IDk5LAorICBBTkRST0lEX0tFWV9CVVRUT05fWSA9IDEwMCwKKyAgQU5EUk9JRF9LRVlfQlVUVE9OX1ogPSAxMDEsCisKKyAgQU5EUk9JRF9LRVlfQyA9IDMxLAorICBBTkRST0lEX0tFWV9DQUxDVUxBVE9SID0gMjEwLAorICBBTkRST0lEX0tFWV9DQUxFTkRBUiA9IDIwOCwKKyAgQU5EUk9JRF9LRVlfQ0FMTCA9IDUsCisgIEFORFJPSURfS0VZX0NBTUVSQSA9IDI3LAorICBBTkRST0lEX0tFWV9DQVBTX0xPQ0sgPSAxMTUsCisgIEFORFJPSURfS0VZX0NBUFRJT05TID0gMTc1LAorICBBTkRST0lEX0tFWV9DSEFOTkVMX0RPV04gPSAxNjcsCisgIEFORFJPSURfS0VZX0NIQU5ORUxfVVAgPSAxNjYsCisgIEFORFJPSURfS0VZX0NMRUFSID0gMjgsCisgIEFORFJPSURfS0VZX0NPTU1BID0gNTUsCisgIEFORFJPSURfS0VZX0NPTlRBQ1RTID0gMjA3LAorICBBTkRST0lEX0tFWV9DVFJMX0xFRlQgPSAxMTMsCisgIEFORFJPSURfS0VZX0NUUkxfUklHSFQgPSAxMTQsCisKKyAgQU5EUk9JRF9LRVlfRCA9IDMyLAorICBBTkRST0lEX0tFWV9ERUwgPSA2NywKKyAgQU5EUk9JRF9LRVlfRFBBRF9DRU5URVIgPSAyMywKKyAgQU5EUk9JRF9LRVlfRFBBRF9ET1dOID0gMjAsCisgIEFORFJPSURfS0VZX0RQQURfTEVGVCA9IDIxLAorICBBTkRST0lEX0tFWV9EUEFEX1JJR0hUID0gMjIsCisgIEFORFJPSURfS0VZX0RQQURfVVAgPSAxOSwKKyAgQU5EUk9JRF9LRVlfRFZSID0gMTczLAorCisgIEFORFJPSURfS0VZX0UgPSAzMywKKyAgQU5EUk9JRF9LRVlfRUlTVSA9IDIxMiwKKyAgQU5EUk9JRF9LRVlfRU5EQ0FMTCA9IDYsCisgIEFORFJPSURfS0VZX0VOVEVSID0gNjYsCisgIEFORFJPSURfS0VZX0VOVkVMT1BFID0gNjUsCisgIEFORFJPSURfS0VZX0VRVUFMUyA9IDcwLAorICBBTkRST0lEX0tFWV9FU0NBUEUgPSAxMTEsCisgIEFORFJPSURfS0VZX0VYUExPUkVSID0gNjQsCisKKyAgQU5EUk9JRF9LRVlfRiA9IDM0LAorICBBTkRST0lEX0tFWV9GMSA9IDEzMSwKKyAgQU5EUk9JRF9LRVlfRjEwID0gMTQwLAorICBBTkRST0lEX0tFWV9GMTEgPSAxNDEsCisgIEFORFJPSURfS0VZX0YxMiA9IDE0MiwKKyAgQU5EUk9JRF9LRVlfRjIgPSAxMzIsCisgIEFORFJPSURfS0VZX0YzID0gMTMzLAorICBBTkRST0lEX0tFWV9GNCA9IDEzNCwKKyAgQU5EUk9JRF9LRVlfRjUgPSAxMzUsCisgIEFORFJPSURfS0VZX0Y2ID0gMTM2LAorICBBTkRST0lEX0tFWV9GNyA9IDEzNywKKyAgQU5EUk9JRF9LRVlfRjggPSAxMzgsCisgIEFORFJPSURfS0VZX0Y5ID0gMTM5LAorICBBTkRST0lEX0tFWV9GT0NVUyA9IDgwLAorICBBTkRST0lEX0tFWV9GT1JXQVJEID0gMTI1LAorICBBTkRST0lEX0tFWV9GT1JXQVJEX0RFTCA9IDExMiwKKyAgQU5EUk9JRF9LRVlfRlVOQ1RJT04gPSAxMTksCisKKyAgQU5EUk9JRF9LRVlfRyA9IDM1LAorICBBTkRST0lEX0tFWV9HUkFWRSA9IDY4LAorICBBTkRST0lEX0tFWV9HVUlERSA9IDE3MiwKKworICBBTkRST0lEX0tFWV9IID0gMzYsCisgIEFORFJPSURfS0VZX0hFQURTRVRIT09LID0gNzksCisgIEFORFJPSURfS0VZX0hFTktBTiA9IDIxNCwKKyAgQU5EUk9JRF9LRVlfSE9NRSA9IDMsCisKKyAgQU5EUk9JRF9LRVlfSSA9IDM3LAorICBBTkRST0lEX0tFWV9JTkZPID0gMTY1LAorICBBTkRST0lEX0tFWV9JTlNFUlQgPSAxMjQsCisKKyAgQU5EUk9JRF9LRVlfSiA9IDM4LAorCisgIEFORFJPSURfS0VZX0sgPSAzOSwKKyAgQU5EUk9JRF9LRVlfS0FOQSA9IDIxOCwKKyAgQU5EUk9JRF9LRVlfS0FUQUtBTkFfSElSQUdBTkEgPSAyMTUsCisKKyAgQU5EUk9JRF9LRVlfTCA9IDQwLAorICBBTkRST0lEX0tFWV9MQU5HVUFHRV9TV0lUQ0ggPSAyMDQsCisgIEFORFJPSURfS0VZX0xFRlRfQlJBQ0tFVCA9IDcxLAorCisgIEFORFJPSURfS0VZX00gPSA0MSwKKyAgQU5EUk9JRF9LRVlfTUFOTkVSX01PREUgPSAyMDUsCisgIEFORFJPSURfS0VZX01FRElBX0NMT1NFID0gMTI4LAorICBBTkRST0lEX0tFWV9NRURJQV9FSkVDVCA9IDEyOSwKKyAgQU5EUk9JRF9LRVlfTUVESUFfRkFTVF9GT1JXQVJEID0gOTAsCisgIEFORFJPSURfS0VZX01FRElBX05FWFQgPSA4NywKKyAgQU5EUk9JRF9LRVlfTUVESUFfUEFVU0UgPSAxMjcsCisgIEFORFJPSURfS0VZX01FRElBX1BMQVkgPSAxMjYsCisgIEFORFJPSURfS0VZX01FRElBX1BMQVlfUEFVU0UgPSA4NSwKKyAgQU5EUk9JRF9LRVlfTUVESUFfUFJFVklPVVMgPSA4OCwKKyAgQU5EUk9JRF9LRVlfTUVESUFfUkVDT1JEID0gMTMwLAorICBBTkRST0lEX0tFWV9NRURJQV9SRVdJTkQgPSA4OSwKKyAgQU5EUk9JRF9LRVlfTUVESUFfU1RPUCA9IDg2LAorICBBTkRST0lEX0tFWV9NRU5VID0gODIsCisgIEFORFJPSURfS0VZX01FVEFfTEVGVCA9IDExNywKKyAgQU5EUk9JRF9LRVlfTUVUQV9SSUdIVCA9IDExOCwKKyAgQU5EUk9JRF9LRVlfTUlOVVMgPSA2OSwKKyAgQU5EUk9JRF9LRVlfTU9WRV9FTkQgPSAxMjMsCisgIEFORFJPSURfS0VZX01PVkVfSE9NRSA9IDEyMiwKKyAgQU5EUk9JRF9LRVlfTVVIRU5LQU4gPSAyMTMsCisgIEFORFJPSURfS0VZX01VU0lDID0gMjA5LAorICBBTkRST0lEX0tFWV9NVVRFID0gOTEsCisKKyAgQU5EUk9JRF9LRVlfTiA9IDQyLAorICBBTkRST0lEX0tFWV9OT1RJRklDQVRJT04gPSA4MywKKyAgQU5EUk9JRF9LRVlfTlVNID0gNzgsCisgIEFORFJPSURfS0VZX05VTVBBRF8wID0gMTQ0LAorICBBTkRST0lEX0tFWV9OVU1QQURfMSA9IDE0NSwKKyAgQU5EUk9JRF9LRVlfTlVNUEFEXzIgPSAxNDYsCisgIEFORFJPSURfS0VZX05VTVBBRF8zID0gMTQ3LAorICBBTkRST0lEX0tFWV9OVU1QQURfNCA9IDE0OCwKKyAgQU5EUk9JRF9LRVlfTlVNUEFEXzUgPSAxNDksCisgIEFORFJPSURfS0VZX05VTVBBRF82ID0gMTUwLAorICBBTkRST0lEX0tFWV9OVU1QQURfNyA9IDE1MSwKKyAgQU5EUk9JRF9LRVlfTlVNUEFEXzggPSAxNTIsCisgIEFORFJPSURfS0VZX05VTVBBRF85ID0gMTUzLAorICBBTkRST0lEX0tFWV9OVU1QQURfQUREID0gMTU3LAorICBBTkRST0lEX0tFWV9OVU1QQURfQ09NTUEgPSAxNTksCisgIEFORFJPSURfS0VZX05VTVBBRF9ESVZJREUgPSAxNTQsCisgIEFORFJPSURfS0VZX05VTVBBRF9ET1QgPSAxNTgsCisgIEFORFJPSURfS0VZX05VTVBBRF9FTlRFUiA9IDE2MCwKKyAgQU5EUk9JRF9LRVlfTlVNUEFEX0VRVUFMUyA9IDE2MSwKKyAgQU5EUk9JRF9LRVlfTlVNUEFEX0xFRlRfUEFSRU4gPSAxNjIsCisgIEFORFJPSURfS0VZX05VTVBBRF9NVUxUSVBMWSA9IDE1NSwKKyAgQU5EUk9JRF9LRVlfTlVNUEFEX1JJR0hUX1BBUkVOID0gMTYzLAorICBBTkRST0lEX0tFWV9OVU1QQURfU1VCVFJBQ1QgPSAxNTYsCisgIEFORFJPSURfS0VZX05VTV9MT0NLID0gMTQzLAorCisgIEFORFJPSURfS0VZX08gPSA0MywKKworICBBTkRST0lEX0tFWV9QID0gNDQsCisgIEFORFJPSURfS0VZX1BBR0VfRE9XTiA9IDkzLAorICBBTkRST0lEX0tFWV9QQUdFX1VQID0gOTIsCisgIEFORFJPSURfS0VZX1BFUklPRCA9IDU2LAorICBBTkRST0lEX0tFWV9QSUNUU1lNQk9MUyA9IDk0LAorICBBTkRST0lEX0tFWV9QTFVTID0gODEsCisgIEFORFJPSURfS0VZX1BPVU5EID0gMTgsCisgIEFORFJPSURfS0VZX1BPV0VSID0gMjYsCisgIEFORFJPSURfS0VZX1BST0dfQkxVRSA9IDE4NiwKKyAgQU5EUk9JRF9LRVlfUFJPR19HUkVFTiA9IDE4NCwKKyAgQU5EUk9JRF9LRVlfUFJPR19SRUQgPSAxODMsCisgIEFORFJPSURfS0VZX1BST0dfWUVMTE9XID0gMTg1LAorCisgIEFORFJPSURfS0VZX1EgPSA0NSwKKworICBBTkRST0lEX0tFWV9SID0gNDYsCisgIEFORFJPSURfS0VZX1JJR0hUX0JSQUNLRVQgPSA3MiwKKyAgQU5EUk9JRF9LRVlfUk8gPSAyMTcsCisKKyAgQU5EUk9JRF9LRVlfUyA9IDQ3LAorICBBTkRST0lEX0tFWV9TQ1JPTExfTE9DSyA9IDExNiwKKyAgQU5EUk9JRF9LRVlfU0VBUkNIID0gODQsCisgIEFORFJPSURfS0VZX1NFTUlDT0xPTiA9IDc0LAorICBBTkRST0lEX0tFWV9TRVRUSU5HUyA9IDE3NiwKKyAgQU5EUk9JRF9LRVlfU0hJRlRfTEVGVCA9IDU5LAorICBBTkRST0lEX0tFWV9TSElGVF9SSUdIVCA9IDYwLAorICBBTkRST0lEX0tFWV9TTEFTSCA9IDc2LAorICBBTkRST0lEX0tFWV9TT0ZUX0xFRlQgPSAxLAorICBBTkRST0lEX0tFWV9TT0ZUX1JJR0hUID0gMiwKKyAgQU5EUk9JRF9LRVlfU1BBQ0UgPSA2MiwKKyAgQU5EUk9JRF9LRVlfU1RBUiA9IDE3LAorICBBTkRST0lEX0tFWV9TVEJfSU5QVVQgPSAxODAsCisgIEFORFJPSURfS0VZX1NUQl9QT1dFUiA9IDE3OSwKKyAgQU5EUk9JRF9LRVlfU1dJVENIX0NIQVJTRVQgPSA5NSwKKyAgQU5EUk9JRF9LRVlfU1lNID0gNjMsCisgIEFORFJPSURfS0VZX1NZU1JRID0gMTIwLAorCisgIEFORFJPSURfS0VZX1QgPSA0OCwKKyAgQU5EUk9JRF9LRVlfVEFCID0gNjEsCisgIEFORFJPSURfS0VZX1RWID0gMTcwLAorICBBTkRST0lEX0tFWV9UVl9JTlBVVCA9IDE3OCwKKyAgQU5EUk9JRF9LRVlfVFZfUE9XRVIgPSAxNzcsCisKKyAgQU5EUk9JRF9LRVlfVSA9IDQ5LAorICBBTkRST0lEX0tFWV9VTktOT1dOID0gMCwKKworICBBTkRST0lEX0tFWV9WID0gNTAsCisgIEFORFJPSURfS0VZX1ZPTFVNRV9ET1dOID0gMjUsCisgIEFORFJPSURfS0VZX1ZPTFVNRV9NVVRFID0gMTY0LAorICBBTkRST0lEX0tFWV9WT0xVTUVfVVAgPSAyNCwKKworICBBTkRST0lEX0tFWV9XID0gNTEsCisgIEFORFJPSURfS0VZX1dJTkRPVyA9IDE3MSwKKworICBBTkRST0lEX0tFWV9YID0gNTIsCisKKyAgQU5EUk9JRF9LRVlfWSA9IDUzLAorICBBTkRST0lEX0tFWV9ZRU4gPSAyMTYsCisKKyAgQU5EUk9JRF9LRVlfWiA9IDU0LAorICBBTkRST0lEX0tFWV9aRU5LQUtVX0hBTktBS1UgPSAyMTEsCisgIEFORFJPSURfS0VZX1pPT01fSU4gPSAxNjgsCisgIEFORFJPSURfS0VZX1pPT01fT1VUID0gMTY5LAorCisgIEIyR19LRVlfQ0hBUkFDVEVSUyA9IDBYMTAwLAorICBCMkdfS0VZX0NIT1JEUyAgICAgPSAwWDIwMCwKKworICBCMkdfS0VZX0RPVDEgPSA3NjksCisgIEIyR19LRVlfRE9UMiA9IDc3MCwKKyAgQjJHX0tFWV9ET1QzID0gNzcxLAorICBCMkdfS0VZX0RPVDQgPSA3NzIsCisgIEIyR19LRVlfRE9UNSA9IDc3MywKKyAgQjJHX0tFWV9ET1Q2ID0gNzc0LAorICBCMkdfS0VZX0RPVDcgPSA3NzUsCisgIEIyR19LRVlfRE9UOCA9IDc3NiwKKyAgQjJHX0tFWV9ET1Q5ID0gNzc3LAorCisgIEIyR19LRVlfQ1VSU09SMCAgPSA3NzgsCisgIEIyR19LRVlfQ1VSU09SMSAgPSA3NzksCisgIEIyR19LRVlfQ1VSU09SMiAgPSA3ODAsCisgIEIyR19LRVlfQ1VSU09SMyAgPSA3ODEsCisgIEIyR19LRVlfQ1VSU09SNCAgPSA3ODIsCisgIEIyR19LRVlfQ1VSU09SNSAgPSA3ODMsCisgIEIyR19LRVlfQ1VSU09SNiAgPSA3ODQsCisgIEIyR19LRVlfQ1VSU09SNyAgPSA3ODUsCisgIEIyR19LRVlfQ1VSU09SOCAgPSA3ODYsCisgIEIyR19LRVlfQ1VSU09SOSAgPSA3ODcsCisgIEIyR19LRVlfQ1VSU09SMTAgPSA3ODgsCisgIEIyR19LRVlfQ1VSU09SMTEgPSA3ODksCisgIEIyR19LRVlfQ1VSU09SMTIgPSA3OTAsCisgIEIyR19LRVlfQ1VSU09SMTMgPSA3OTEsCisgIEIyR19LRVlfQ1VSU09SMTQgPSA3OTIsCisgIEIyR19LRVlfQ1VSU09SMTUgPSA3OTMsCisgIEIyR19LRVlfQ1VSU09SMTYgPSA3OTQsCisgIEIyR19LRVlfQ1VSU09SMTcgPSA3OTUsCisgIEIyR19LRVlfQ1VSU09SMTggPSA3OTYsCisgIEIyR19LRVlfQ1VSU09SMTkgPSA3OTcsCisgIEIyR19LRVlfQ1VSU09SMjAgPSA3OTgsCisgIEIyR19LRVlfQ1VSU09SMjEgPSA3OTksCisgIEIyR19LRVlfQ1VSU09SMjIgPSA4MDAsCisgIEIyR19LRVlfQ1VSU09SMjMgPSA4MDEsCisgIEIyR19LRVlfQ1VSU09SMjQgPSA4MDIsCisgIEIyR19LRVlfQ1VSU09SMjUgPSA4MDMsCisgIEIyR19LRVlfQ1VSU09SMjYgPSA4MDQsCisgIEIyR19LRVlfQ1VSU09SMjcgPSA4MDUsCisgIEIyR19LRVlfQ1VSU09SMjggPSA4MDYsCisgIEIyR19LRVlfQ1VSU09SMjkgPSA4MDcsCisgIEIyR19LRVlfQ1VSU09SMzAgPSA4MDgsCisgIEIyR19LRVlfQ1VSU09SMzEgPSA4MDksCisgIEIyR19LRVlfQ1VSU09SMzIgPSA4MTAsCisgIEIyR19LRVlfQ1VSU09SMzMgPSA4MTEsCisgIEIyR19LRVlfQ1VSU09SMzQgPSA4MTIsCisgIEIyR19LRVlfQ1VSU09SMzUgPSA4MTMsCisgIEIyR19LRVlfQ1VSU09SMzYgPSA4MTQsCisgIEIyR19LRVlfQ1VSU09SMzcgPSA4MTUsCisgIEIyR19LRVlfQ1VSU09SMzggPSA4MTYsCisgIEIyR19LRVlfQ1VSU09SMzkgPSA4MTcsCisKKyAgQjJHX0tFWV9CQUNLICAgID0gODE4LAorICBCMkdfS0VZX0ZPUldBUkQgPSA4MTksCit9IEFuZHJvaWRLZXlDb2RlOworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZiAvKiBfX2NwbHVzcGx1cyAqLworCisjZW5kaWYgLyogQlJMVFRZX0lOQ0xVREVEX0tCRF9BTkRST0lEICovCmRpZmYgLS1naXQgYS9Qcm9ncmFtcy9rYmRfaW50ZXJuYWwuaCBiL1Byb2dyYW1zL2tiZF9pbnRlcm5hbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQwMDk1Y2MKLS0tIC9kZXYvbnVsbAorKysgYi9Qcm9ncmFtcy9rYmRfaW50ZXJuYWwuaApAQCAtMCwwICsxLDkxIEBACisvKgorICogQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyAqICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyAqCisgKiBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorICoKKyAqIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyAqCisgKiBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisgKi8KKworI2lmbmRlZiBCUkxUVFlfSU5DTFVERURfS0JEX0lOVEVSTkFMCisjZGVmaW5lIEJSTFRUWV9JTkNMVURFRF9LQkRfSU5URVJOQUwKKworI2luY2x1ZGUgInF1ZXVlLmgiCisjaW5jbHVkZSAia3RiX2tleWJvYXJkLmgiCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYgLyogX19jcGx1c3BsdXMgKi8KKwordHlwZWRlZiBzdHJ1Y3QgS2V5Ym9hcmRNb25pdG9yRXh0ZW5zaW9uU3RydWN0IEtleWJvYXJkTW9uaXRvckV4dGVuc2lvbjsKKworc3RydWN0IEtleWJvYXJkTW9uaXRvck9iamVjdFN0cnVjdCB7CisgIEtleWJvYXJkTW9uaXRvckV4dGVuc2lvbiAqa214OworICB1bnNpZ25lZCBpc0FjdGl2ZToxOworCisgIEtleWJvYXJkUHJvcGVydGllcyByZXF1aXJlZFByb3BlcnRpZXM7CisgIFF1ZXVlICppbnN0YW5jZVF1ZXVlOworCisgIEtleUV2ZW50SGFuZGxlciAqaGFuZGxlS2V5RXZlbnQ7Cit9OworCit0eXBlZGVmIHN0cnVjdCB7CisgIGludCBjb2RlOworICBpbnQgcHJlc3M7Cit9IEtleUV2ZW50RW50cnk7CisKK3R5cGVkZWYgc3RydWN0IEtleWJvYXJkSW5zdGFuY2VFeHRlbnNpb25TdHJ1Y3QgS2V5Ym9hcmRJbnN0YW5jZUV4dGVuc2lvbjsKKwordHlwZWRlZiBzdHJ1Y3QgeworICBLZXlib2FyZE1vbml0b3JPYmplY3QgKmttbzsKKyAgS2V5Ym9hcmRJbnN0YW5jZUV4dGVuc2lvbiAqa2l4OworCisgIEtleWJvYXJkUHJvcGVydGllcyBhY3R1YWxQcm9wZXJ0aWVzOworCisgIHN0cnVjdCB7CisgICAgS2V5RXZlbnRFbnRyeSAqYnVmZmVyOworICAgIHVuc2lnbmVkIGludCBzaXplOworICAgIHVuc2lnbmVkIGludCBjb3VudDsKKyAgfSBldmVudHM7CisKKyAgc3RydWN0IHsKKyAgICB1bnNpZ25lZCBtb2RpZmllcnNPbmx5OjE7CisgICAgdW5zaWduZWQgaW50IHNpemU7CisgICAgdW5zaWduZWQgY2hhciBtYXNrWzBdOworICB9IGRlZmVycmVkOworfSBLZXlib2FyZEluc3RhbmNlT2JqZWN0OworCitleHRlcm4gdm9pZCBoYW5kbGVLZXlFdmVudCAoS2V5Ym9hcmRJbnN0YW5jZU9iamVjdCAqa2lvLCBpbnQgY29kZSwgaW50IHByZXNzKTsKKworZXh0ZXJuIEtleWJvYXJkSW5zdGFuY2VPYmplY3QgKm5ld0tleWJvYXJkSW5zdGFuY2VPYmplY3QgKEtleWJvYXJkTW9uaXRvck9iamVjdCAqa21vKTsKK2V4dGVybiB2b2lkIGRlc3Ryb3lLZXlib2FyZEluc3RhbmNlT2JqZWN0IChLZXlib2FyZEluc3RhbmNlT2JqZWN0ICpraW8pOworCitleHRlcm4gaW50IG1vbml0b3JLZXlib2FyZHMgKEtleWJvYXJkTW9uaXRvck9iamVjdCAqa21vKTsKK2V4dGVybiBpbnQgZm9yd2FyZEtleUV2ZW50IChLZXlib2FyZEluc3RhbmNlT2JqZWN0ICpraW8sIGludCBjb2RlLCBpbnQgcHJlc3MpOworCitleHRlcm4gaW50IG5ld0tleWJvYXJkTW9uaXRvckV4dGVuc2lvbiAoS2V5Ym9hcmRNb25pdG9yRXh0ZW5zaW9uICoqa214KTsKK2V4dGVybiB2b2lkIGRlc3Ryb3lLZXlib2FyZE1vbml0b3JFeHRlbnNpb24gKEtleWJvYXJkTW9uaXRvckV4dGVuc2lvbiAqa214KTsKKworZXh0ZXJuIGludCBuZXdLZXlib2FyZEluc3RhbmNlRXh0ZW5zaW9uIChLZXlib2FyZEluc3RhbmNlRXh0ZW5zaW9uICoqa2l4KTsKK2V4dGVybiB2b2lkIGRlc3Ryb3lLZXlib2FyZEluc3RhbmNlRXh0ZW5zaW9uIChLZXlib2FyZEluc3RhbmNlRXh0ZW5zaW9uICpraXgpOworCitleHRlcm4gY29uc3QgS2V5VmFsdWUga2V5Q29kZU1hcFtdOworZXh0ZXJuIGNvbnN0IHVuc2lnbmVkIGludCBrZXlDb2RlQ291bnQ7CisKKyNkZWZpbmUgQkVHSU5fS0VZX0NPREVfTUFQIGNvbnN0IEtleVZhbHVlIGtleUNvZGVNYXBbXSA9IHsKKyNkZWZpbmUgRU5EX0tFWV9DT0RFX01BUCB9OyBjb25zdCB1bnNpZ25lZCBpbnQga2V5Q29kZUNvdW50ID0gQVJSQVlfQ09VTlQoa2V5Q29kZU1hcCk7CisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmIC8qIF9fY3BsdXNwbHVzICovCisKKyNlbmRpZiAvKiBCUkxUVFlfSU5DTFVERURfS0JEX0lOVEVSTkFMICovCmRpZmYgLS1naXQgYS9Qcm9ncmFtcy9rYmRfa2V5Y29kZXMuYyBiL1Byb2dyYW1zL2tiZF9rZXljb2Rlcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM1MDk5MDIKLS0tIC9kZXYvbnVsbAorKysgYi9Qcm9ncmFtcy9rYmRfa2V5Y29kZXMuYwpAQCAtMCwwICsxLDE1MiBAQAorLyoKKyAqIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisgKiAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisgKgorICogQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKKyNpbmNsdWRlICJwcm9sb2d1ZS5oIgorCisjaW5jbHVkZSAia2JkX2tleWNvZGVzLmgiCisKK2NvbnN0IHVuc2lnbmVkIGNoYXIgQVQyWFRbMFg4MF0gPSB7CisgIFswWDAwXSA9IDBYMDAsCisgIFtBVF9LRVlfMDBfRXNjYXBlXSA9IFhUX0tFWV8wMF9Fc2NhcGUsCisgIFtBVF9LRVlfMDBfMV0gPSBYVF9LRVlfMDBfMSwKKyAgW0FUX0tFWV8wMF8yXSA9IFhUX0tFWV8wMF8yLAorICBbQVRfS0VZXzAwXzNdID0gWFRfS0VZXzAwXzMsCisgIFtBVF9LRVlfMDBfNF0gPSBYVF9LRVlfMDBfNCwKKyAgW0FUX0tFWV8wMF81XSA9IFhUX0tFWV8wMF81LAorICBbQVRfS0VZXzAwXzZdID0gWFRfS0VZXzAwXzYsCisgIFtBVF9LRVlfMDBfN10gPSBYVF9LRVlfMDBfNywKKyAgW0FUX0tFWV8wMF84XSA9IFhUX0tFWV8wMF84LAorICBbQVRfS0VZXzAwXzldID0gWFRfS0VZXzAwXzksCisgIFtBVF9LRVlfMDBfMF0gPSBYVF9LRVlfMDBfMCwKKyAgW0FUX0tFWV8wMF9NaW51c10gPSBYVF9LRVlfMDBfTWludXMsCisgIFtBVF9LRVlfMDBfRXF1YWxdID0gWFRfS0VZXzAwX0VxdWFsLAorICBbQVRfS0VZXzAwX0JhY2tzcGFjZV0gPSBYVF9LRVlfMDBfQmFja3NwYWNlLAorICBbQVRfS0VZXzAwX1RhYl0gPSBYVF9LRVlfMDBfVGFiLAorICBbQVRfS0VZXzAwX1FdID0gWFRfS0VZXzAwX1EsCisgIFtBVF9LRVlfMDBfV10gPSBYVF9LRVlfMDBfVywKKyAgW0FUX0tFWV8wMF9FXSA9IFhUX0tFWV8wMF9FLAorICBbQVRfS0VZXzAwX1JdID0gWFRfS0VZXzAwX1IsCisgIFtBVF9LRVlfMDBfVF0gPSBYVF9LRVlfMDBfVCwKKyAgW0FUX0tFWV8wMF9ZXSA9IFhUX0tFWV8wMF9ZLAorICBbQVRfS0VZXzAwX1VdID0gWFRfS0VZXzAwX1UsCisgIFtBVF9LRVlfMDBfSV0gPSBYVF9LRVlfMDBfSSwKKyAgW0FUX0tFWV8wMF9PXSA9IFhUX0tFWV8wMF9PLAorICBbQVRfS0VZXzAwX1BdID0gWFRfS0VZXzAwX1AsCisgIFtBVF9LRVlfMDBfTGVmdEJyYWNrZXRdID0gWFRfS0VZXzAwX0xlZnRCcmFja2V0LAorICBbQVRfS0VZXzAwX1JpZ2h0QnJhY2tldF0gPSBYVF9LRVlfMDBfUmlnaHRCcmFja2V0LAorICBbQVRfS0VZXzAwX0VudGVyXSA9IFhUX0tFWV8wMF9FbnRlciwKKyAgW0FUX0tFWV8wMF9MZWZ0Q29udHJvbF0gPSBYVF9LRVlfMDBfTGVmdENvbnRyb2wsCisgIFtBVF9LRVlfMDBfQV0gPSBYVF9LRVlfMDBfQSwKKyAgW0FUX0tFWV8wMF9TXSA9IFhUX0tFWV8wMF9TLAorICBbQVRfS0VZXzAwX0RdID0gWFRfS0VZXzAwX0QsCisgIFtBVF9LRVlfMDBfRl0gPSBYVF9LRVlfMDBfRiwKKyAgW0FUX0tFWV8wMF9HXSA9IFhUX0tFWV8wMF9HLAorICBbQVRfS0VZXzAwX0hdID0gWFRfS0VZXzAwX0gsCisgIFtBVF9LRVlfMDBfSl0gPSBYVF9LRVlfMDBfSiwKKyAgW0FUX0tFWV8wMF9LXSA9IFhUX0tFWV8wMF9LLAorICBbQVRfS0VZXzAwX0xdID0gWFRfS0VZXzAwX0wsCisgIFtBVF9LRVlfMDBfU2VtaWNvbG9uXSA9IFhUX0tFWV8wMF9TZW1pY29sb24sCisgIFtBVF9LRVlfMDBfQXBvc3Ryb3BoZV0gPSBYVF9LRVlfMDBfQXBvc3Ryb3BoZSwKKyAgW0FUX0tFWV8wMF9HcmF2ZV0gPSBYVF9LRVlfMDBfR3JhdmUsCisgIFtBVF9LRVlfMDBfTGVmdFNoaWZ0XSA9IFhUX0tFWV8wMF9MZWZ0U2hpZnQsCisgIFtBVF9LRVlfMDBfQmFja3NsYXNoXSA9IFhUX0tFWV8wMF9CYWNrc2xhc2gsCisgIFtBVF9LRVlfMDBfWl0gPSBYVF9LRVlfMDBfWiwKKyAgW0FUX0tFWV8wMF9YXSA9IFhUX0tFWV8wMF9YLAorICBbQVRfS0VZXzAwX0NdID0gWFRfS0VZXzAwX0MsCisgIFtBVF9LRVlfMDBfVl0gPSBYVF9LRVlfMDBfViwKKyAgW0FUX0tFWV8wMF9CXSA9IFhUX0tFWV8wMF9CLAorICBbQVRfS0VZXzAwX05dID0gWFRfS0VZXzAwX04sCisgIFtBVF9LRVlfMDBfTV0gPSBYVF9LRVlfMDBfTSwKKyAgW0FUX0tFWV8wMF9Db21tYV0gPSBYVF9LRVlfMDBfQ29tbWEsCisgIFtBVF9LRVlfMDBfUGVyaW9kXSA9IFhUX0tFWV8wMF9QZXJpb2QsCisgIFtBVF9LRVlfMDBfU2xhc2hdID0gWFRfS0VZXzAwX1NsYXNoLAorICBbQVRfS0VZXzAwX1JpZ2h0U2hpZnRdID0gWFRfS0VZXzAwX1JpZ2h0U2hpZnQsCisgIFtBVF9LRVlfMDBfS1BBc3Rlcmlza10gPSBYVF9LRVlfMDBfS1BBc3RlcmlzaywKKyAgW0FUX0tFWV8wMF9MZWZ0QWx0XSA9IFhUX0tFWV8wMF9MZWZ0QWx0LAorICBbQVRfS0VZXzAwX1NwYWNlXSA9IFhUX0tFWV8wMF9TcGFjZSwKKyAgW0FUX0tFWV8wMF9DYXBzTG9ja10gPSBYVF9LRVlfMDBfQ2Fwc0xvY2ssCisgIFtBVF9LRVlfMDBfRjFdID0gWFRfS0VZXzAwX0YxLAorICBbQVRfS0VZXzAwX0YyXSA9IFhUX0tFWV8wMF9GMiwKKyAgW0FUX0tFWV8wMF9GM10gPSBYVF9LRVlfMDBfRjMsCisgIFtBVF9LRVlfMDBfRjRdID0gWFRfS0VZXzAwX0Y0LAorICBbQVRfS0VZXzAwX0Y1XSA9IFhUX0tFWV8wMF9GNSwKKyAgW0FUX0tFWV8wMF9GNl0gPSBYVF9LRVlfMDBfRjYsCisgIFtBVF9LRVlfMDBfRjdfWDFdID0gWFRfS0VZXzAwX0Y3LAorICBbQVRfS0VZXzAwX0Y4XSA9IFhUX0tFWV8wMF9GOCwKKyAgW0FUX0tFWV8wMF9GOV0gPSBYVF9LRVlfMDBfRjksCisgIFtBVF9LRVlfMDBfRjEwXSA9IFhUX0tFWV8wMF9GMTAsCisgIFtBVF9LRVlfMDBfTnVtTG9ja10gPSBYVF9LRVlfMDBfTnVtTG9jaywKKyAgW0FUX0tFWV8wMF9TY3JvbGxMb2NrXSA9IFhUX0tFWV8wMF9TY3JvbGxMb2NrLAorICBbQVRfS0VZXzAwX0tQN10gPSBYVF9LRVlfMDBfS1A3LAorICBbQVRfS0VZXzAwX0tQOF0gPSBYVF9LRVlfMDBfS1A4LAorICBbQVRfS0VZXzAwX0tQOV0gPSBYVF9LRVlfMDBfS1A5LAorICBbQVRfS0VZXzAwX0tQTWludXNdID0gWFRfS0VZXzAwX0tQTWludXMsCisgIFtBVF9LRVlfMDBfS1A0XSA9IFhUX0tFWV8wMF9LUDQsCisgIFtBVF9LRVlfMDBfS1A1XSA9IFhUX0tFWV8wMF9LUDUsCisgIFtBVF9LRVlfMDBfS1A2XSA9IFhUX0tFWV8wMF9LUDYsCisgIFtBVF9LRVlfMDBfS1BQbHVzXSA9IFhUX0tFWV8wMF9LUFBsdXMsCisgIFtBVF9LRVlfMDBfS1AxXSA9IFhUX0tFWV8wMF9LUDEsCisgIFtBVF9LRVlfMDBfS1AyXSA9IFhUX0tFWV8wMF9LUDIsCisgIFtBVF9LRVlfMDBfS1AzXSA9IFhUX0tFWV8wMF9LUDMsCisgIFtBVF9LRVlfMDBfS1AwXSA9IFhUX0tFWV8wMF9LUDAsCisgIFtBVF9LRVlfMDBfS1BQZXJpb2RdID0gWFRfS0VZXzAwX0tQUGVyaW9kLAorICBbMFg3Rl0gPSAwWDU0LAorICBbMFg2MF0gPSAwWDU1LAorICBbQVRfS0VZXzAwX0V1cm9wZTJdID0gWFRfS0VZXzAwX0V1cm9wZTIsCisgIFtBVF9LRVlfMDBfRjExXSA9IFhUX0tFWV8wMF9GMTEsCisgIFtBVF9LRVlfMDBfRjEyXSA9IFhUX0tFWV8wMF9GMTIsCisgIFtBVF9LRVlfMDBfS1BFcXVhbF0gPSBYVF9LRVlfMDBfS1BFcXVhbCwKKyAgWzBYMTddID0gMFg1QSwKKyAgWzBYMUZdID0gMFg1QiwKKyAgW0FUX0tFWV8wMF9JbnRlcm5hdGlvbmFsNl0gPSBYVF9LRVlfMDBfSW50ZXJuYXRpb25hbDYsCisgIFswWDJGXSA9IDBYNUQsCisgIFswWDM3XSA9IDBYNUUsCisgIFswWDNGXSA9IDBYNUYsCisgIFswWDQ3XSA9IDBYNjAsCisgIFswWDRGXSA9IDBYNjEsCisgIFswWDU2XSA9IDBYNjIsCisgIFswWDVFXSA9IDBYNjMsCisgIFtBVF9LRVlfMDBfRjEzXSA9IFhUX0tFWV8wMF9GMTMsCisgIFtBVF9LRVlfMDBfRjE0XSA9IFhUX0tFWV8wMF9GMTQsCisgIFtBVF9LRVlfMDBfRjE1XSA9IFhUX0tFWV8wMF9GMTUsCisgIFtBVF9LRVlfMDBfRjE2XSA9IFhUX0tFWV8wMF9GMTYsCisgIFtBVF9LRVlfMDBfRjE3XSA9IFhUX0tFWV8wMF9GMTcsCisgIFtBVF9LRVlfMDBfRjE4XSA9IFhUX0tFWV8wMF9GMTgsCisgIFtBVF9LRVlfMDBfRjE5XSA9IFhUX0tFWV8wMF9GMTksCisgIFtBVF9LRVlfMDBfRjIwXSA9IFhUX0tFWV8wMF9GMjAsCisgIFtBVF9LRVlfMDBfRjIxXSA9IFhUX0tFWV8wMF9GMjEsCisgIFtBVF9LRVlfMDBfRjIyXSA9IFhUX0tFWV8wMF9GMjIsCisgIFtBVF9LRVlfMDBfRjIzXSA9IFhUX0tFWV8wMF9GMjMsCisgIFswWDZGXSA9IDBYNkYsCisgIFtBVF9LRVlfMDBfSW50ZXJuYXRpb25hbDJdID0gWFRfS0VZXzAwX0ludGVybmF0aW9uYWwyLAorICBbMFgxOV0gPSAwWDcxLAorICBbQVRfS0VZXzAwX0NyU2VsXSA9IFhUX0tFWV8wMF9DclNlbCwKKyAgW0FUX0tFWV8wMF9JbnRlcm5hdGlvbmFsMV0gPSBYVF9LRVlfMDBfSW50ZXJuYXRpb25hbDEsCisgIFtBVF9LRVlfMDBfRXhTZWxdID0gWFRfS0VZXzAwX0V4U2VsLAorICBbQVRfS0VZXzAwX0VubEhlbHBdID0gWFRfS0VZXzAwX0VubEhlbHAsCisgIFtBVF9LRVlfMDBfRjI0XSA9IFhUX0tFWV8wMF9GMjQsCisgIFtBVF9LRVlfMDBfTGFuZ3VhZ2U0XSA9IFhUX0tFWV8wMF9MYW5ndWFnZTQsCisgIFtBVF9LRVlfMDBfTGFuZ3VhZ2UzXSA9IFhUX0tFWV8wMF9MYW5ndWFnZTMsCisgIFtBVF9LRVlfMDBfSW50ZXJuYXRpb25hbDRdID0gWFRfS0VZXzAwX0ludGVybmF0aW9uYWw0LAorICBbMFg2NV0gPSAwWDdBLAorICBbQVRfS0VZXzAwX0ludGVybmF0aW9uYWw1XSA9IFhUX0tFWV8wMF9JbnRlcm5hdGlvbmFsNSwKKyAgWzBYNjhdID0gMFg3QywKKyAgW0FUX0tFWV8wMF9JbnRlcm5hdGlvbmFsM10gPSBYVF9LRVlfMDBfSW50ZXJuYXRpb25hbDMsCisgIFtBVF9LRVlfMDBfS1BDb21tYV0gPSBYVF9LRVlfMDBfS1BDb21tYSwKKyAgWzBYNkVdID0gMFg3RgorfTsKZGlmZiAtLWdpdCBhL1Byb2dyYW1zL2tiZF9saW51eC5jIGIvUHJvZ3JhbXMva2JkX2xpbnV4LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmE0YjMwOAotLS0gL2Rldi9udWxsCisrKyBiL1Byb2dyYW1zL2tiZF9saW51eC5jCkBAIC0wLDAgKzEsOTgyIEBACisvKgorICogQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyAqICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyAqCisgKiBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorICoKKyAqIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyAqCisgKiBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisgKi8KKworI2luY2x1ZGUgInByb2xvZ3VlLmgiCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisKKyNpbmNsdWRlICJwYXJhbWV0ZXJzLmgiCisjaW5jbHVkZSAibG9nLmgiCisjaW5jbHVkZSAic3RyZm10LmgiCisjaW5jbHVkZSAiZmlsZS5oIgorI2luY2x1ZGUgInN5c3RlbV9saW51eC5oIgorI2luY2x1ZGUgImtiZC5oIgorI2luY2x1ZGUgImtiZF9pbnRlcm5hbC5oIgorCisjaWZkZWYgSEFWRV9MSU5VWF9VSU5QVVRfSAorI2luY2x1ZGUgPGxpbWl0cy5oPgorI2luY2x1ZGUgPGRpcmVudC5oPgorI2luY2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVkZSA8c3lzL2lvY3RsLmg+CisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9uZXRsaW5rLmg+CisjaW5jbHVkZSA8bGludXgvaW5wdXQuaD4KKyNpbmNsdWRlIDxsaW51eC91aW5wdXQuaD4KKworI2luY2x1ZGUgImJpdG1hc2suaCIKKyNpbmNsdWRlICJhc3luY19oYW5kbGUuaCIKKyNpbmNsdWRlICJhc3luY19hbGFybS5oIgorI2luY2x1ZGUgImFzeW5jX2lvLmgiCisKK3N0cnVjdCBLZXlib2FyZE1vbml0b3JFeHRlbnNpb25TdHJ1Y3QgeworICBzdHJ1Y3QgeworICAgIGludCBzb2NrZXQ7CisgICAgQXN5bmNIYW5kbGUgbW9uaXRvcjsKKyAgfSB1ZXZlbnQ7Cit9OworCitzdHJ1Y3QgS2V5Ym9hcmRJbnN0YW5jZUV4dGVuc2lvblN0cnVjdCB7CisgIFVpbnB1dE9iamVjdCAqdWlucHV0OworICBBc3luY0hhbmRsZSB1ZGV2RGVsYXk7CisKKyAgc3RydWN0IHsKKyAgICBpbnQgZGVzY3JpcHRvcjsKKyAgICBBc3luY0hhbmRsZSBtb25pdG9yOworICB9IGZpbGU7CisKKyAgc3RydWN0IHsKKyAgICBjaGFyICpwYXRoOworICAgIGludCBtYWpvcjsKKyAgICBpbnQgbWlub3I7CisgIH0gZGV2aWNlOworfTsKKworQkVHSU5fS0VZX0NPREVfTUFQCisgIFtLRVlfRVNDXSA9IEtCRF9LRVlfQUNUSU9OKEVzY2FwZSksCisgIFtLRVlfMV0gPSBLQkRfS0VZX05VTUJFUihPbmUpLAorICBbS0VZXzJdID0gS0JEX0tFWV9OVU1CRVIoVHdvKSwKKyAgW0tFWV8zXSA9IEtCRF9LRVlfTlVNQkVSKFRocmVlKSwKKyAgW0tFWV80XSA9IEtCRF9LRVlfTlVNQkVSKEZvdXIpLAorICBbS0VZXzVdID0gS0JEX0tFWV9OVU1CRVIoRml2ZSksCisgIFtLRVlfNl0gPSBLQkRfS0VZX05VTUJFUihTaXgpLAorICBbS0VZXzddID0gS0JEX0tFWV9OVU1CRVIoU2V2ZW4pLAorICBbS0VZXzhdID0gS0JEX0tFWV9OVU1CRVIoRWlnaHQpLAorICBbS0VZXzldID0gS0JEX0tFWV9OVU1CRVIoTmluZSksCisgIFtLRVlfMF0gPSBLQkRfS0VZX05VTUJFUihaZXJvKSwKKyAgW0tFWV9NSU5VU10gPSBLQkRfS0VZX1NZTUJPTChNaW51cyksCisgIFtLRVlfRVFVQUxdID0gS0JEX0tFWV9TWU1CT0woRXF1YWxzKSwKKyAgW0tFWV9CQUNLU1BBQ0VdID0gS0JEX0tFWV9BQ1RJT04oRGVsZXRlQmFja3dhcmQpLAorICBbS0VZX1RBQl0gPSBLQkRfS0VZX0FDVElPTihUYWIpLAorICBbS0VZX1FdID0gS0JEX0tFWV9MRVRURVIoUSksCisgIFtLRVlfV10gPSBLQkRfS0VZX0xFVFRFUihXKSwKKyAgW0tFWV9FXSA9IEtCRF9LRVlfTEVUVEVSKEUpLAorICBbS0VZX1JdID0gS0JEX0tFWV9MRVRURVIoUiksCisgIFtLRVlfVF0gPSBLQkRfS0VZX0xFVFRFUihUKSwKKyAgW0tFWV9ZXSA9IEtCRF9LRVlfTEVUVEVSKFkpLAorICBbS0VZX1VdID0gS0JEX0tFWV9MRVRURVIoVSksCisgIFtLRVlfSV0gPSBLQkRfS0VZX0xFVFRFUihJKSwKKyAgW0tFWV9PXSA9IEtCRF9LRVlfTEVUVEVSKE8pLAorICBbS0VZX1BdID0gS0JEX0tFWV9MRVRURVIoUCksCisgIFtLRVlfTEVGVEJSQUNFXSA9IEtCRF9LRVlfU1lNQk9MKExlZnRCcmFja2V0KSwKKyAgW0tFWV9SSUdIVEJSQUNFXSA9IEtCRF9LRVlfU1lNQk9MKFJpZ2h0QnJhY2tldCksCisgIFtLRVlfRU5URVJdID0gS0JEX0tFWV9BQ1RJT04oRW50ZXIpLAorICBbS0VZX0xFRlRDVFJMXSA9IEtCRF9LRVlfTU9ESUZJRVIoQ29udHJvbExlZnQpLAorICBbS0VZX0FdID0gS0JEX0tFWV9MRVRURVIoQSksCisgIFtLRVlfU10gPSBLQkRfS0VZX0xFVFRFUihTKSwKKyAgW0tFWV9EXSA9IEtCRF9LRVlfTEVUVEVSKEQpLAorICBbS0VZX0ZdID0gS0JEX0tFWV9MRVRURVIoRiksCisgIFtLRVlfR10gPSBLQkRfS0VZX0xFVFRFUihHKSwKKyAgW0tFWV9IXSA9IEtCRF9LRVlfTEVUVEVSKEgpLAorICBbS0VZX0pdID0gS0JEX0tFWV9MRVRURVIoSiksCisgIFtLRVlfS10gPSBLQkRfS0VZX0xFVFRFUihLKSwKKyAgW0tFWV9MXSA9IEtCRF9LRVlfTEVUVEVSKEwpLAorICBbS0VZX1NFTUlDT0xPTl0gPSBLQkRfS0VZX1NZTUJPTChTZW1pY29sb24pLAorICBbS0VZX0FQT1NUUk9QSEVdID0gS0JEX0tFWV9TWU1CT0woQXBvc3Ryb3BoZSksCisgIFtLRVlfR1JBVkVdID0gS0JEX0tFWV9TWU1CT0woR3JhdmUpLAorICBbS0VZX0xFRlRTSElGVF0gPSBLQkRfS0VZX01PRElGSUVSKFNoaWZ0TGVmdCksCisgIFtLRVlfQkFDS1NMQVNIXSA9IEtCRF9LRVlfU1lNQk9MKEJhY2tzbGFzaCksCisgIFtLRVlfWl0gPSBLQkRfS0VZX0xFVFRFUihaKSwKKyAgW0tFWV9YXSA9IEtCRF9LRVlfTEVUVEVSKFgpLAorICBbS0VZX0NdID0gS0JEX0tFWV9MRVRURVIoQyksCisgIFtLRVlfVl0gPSBLQkRfS0VZX0xFVFRFUihWKSwKKyAgW0tFWV9CXSA9IEtCRF9LRVlfTEVUVEVSKEIpLAorICBbS0VZX05dID0gS0JEX0tFWV9MRVRURVIoTiksCisgIFtLRVlfTV0gPSBLQkRfS0VZX0xFVFRFUihNKSwKKyAgW0tFWV9DT01NQV0gPSBLQkRfS0VZX1NZTUJPTChDb21tYSksCisgIFtLRVlfRE9UXSA9IEtCRF9LRVlfU1lNQk9MKFBlcmlvZCksCisgIFtLRVlfU0xBU0hdID0gS0JEX0tFWV9TWU1CT0woU2xhc2gpLAorICBbS0VZX1JJR0hUU0hJRlRdID0gS0JEX0tFWV9NT0RJRklFUihTaGlmdFJpZ2h0KSwKKyAgW0tFWV9LUEFTVEVSSVNLXSA9IEtCRF9LRVlfS1BTWU1CT0woTXVsdGlwbHkpLAorICBbS0VZX0xFRlRBTFRdID0gS0JEX0tFWV9NT0RJRklFUihBbHRMZWZ0KSwKKyAgW0tFWV9TUEFDRV0gPSBLQkRfS0VZX1NZTUJPTChTcGFjZSksCisgIFtLRVlfQ0FQU0xPQ0tdID0gS0JEX0tFWV9MT0NLKENhcGl0YWxzKSwKKyAgW0tFWV9GMV0gPSBLQkRfS0VZX0ZVTkNUSU9OKEYxKSwKKyAgW0tFWV9GMl0gPSBLQkRfS0VZX0ZVTkNUSU9OKEYyKSwKKyAgW0tFWV9GM10gPSBLQkRfS0VZX0ZVTkNUSU9OKEYzKSwKKyAgW0tFWV9GNF0gPSBLQkRfS0VZX0ZVTkNUSU9OKEY0KSwKKyAgW0tFWV9GNV0gPSBLQkRfS0VZX0ZVTkNUSU9OKEY1KSwKKyAgW0tFWV9GNl0gPSBLQkRfS0VZX0ZVTkNUSU9OKEY2KSwKKyAgW0tFWV9GN10gPSBLQkRfS0VZX0ZVTkNUSU9OKEY3KSwKKyAgW0tFWV9GOF0gPSBLQkRfS0VZX0ZVTkNUSU9OKEY4KSwKKyAgW0tFWV9GOV0gPSBLQkRfS0VZX0ZVTkNUSU9OKEY5KSwKKyAgW0tFWV9GMTBdID0gS0JEX0tFWV9GVU5DVElPTihGMTApLAorICBbS0VZX05VTUxPQ0tdID0gS0JEX0tFWV9MT0NLKE51bWJlcnMpLAorICBbS0VZX1NDUk9MTExPQ0tdID0gS0JEX0tFWV9MT0NLKFNjcm9sbCksCisgIFtLRVlfS1A3XSA9IEtCRF9LRVlfS1BOVU1CRVIoU2V2ZW4pLAorICBbS0VZX0tQOF0gPSBLQkRfS0VZX0tQTlVNQkVSKEVpZ2h0KSwKKyAgW0tFWV9LUDldID0gS0JEX0tFWV9LUE5VTUJFUihOaW5lKSwKKyAgW0tFWV9LUE1JTlVTXSA9IEtCRF9LRVlfS1BTWU1CT0woTWludXMpLAorICBbS0VZX0tQNF0gPSBLQkRfS0VZX0tQTlVNQkVSKEZvdXIpLAorICBbS0VZX0tQNV0gPSBLQkRfS0VZX0tQTlVNQkVSKEZpdmUpLAorICBbS0VZX0tQNl0gPSBLQkRfS0VZX0tQTlVNQkVSKFNpeCksCisgIFtLRVlfS1BQTFVTXSA9IEtCRF9LRVlfS1BTWU1CT0woUGx1cyksCisgIFtLRVlfS1AxXSA9IEtCRF9LRVlfS1BOVU1CRVIoT25lKSwKKyAgW0tFWV9LUDJdID0gS0JEX0tFWV9LUE5VTUJFUihUd28pLAorICBbS0VZX0tQM10gPSBLQkRfS0VZX0tQTlVNQkVSKFRocmVlKSwKKyAgW0tFWV9LUDBdID0gS0JEX0tFWV9LUE5VTUJFUihaZXJvKSwKKyAgW0tFWV9LUERPVF0gPSBLQkRfS0VZX0tQU1lNQk9MKFBlcmlvZCksCisgIFtLRVlfWkVOS0FLVUhBTktBS1VdID0gS0JEX0tFWV9VTk1BUFBFRCwKKyAgW0tFWV8xMDJORF0gPSBLQkRfS0VZX1NZTUJPTChFdXJvcGUyKSwKKyAgW0tFWV9GMTFdID0gS0JEX0tFWV9GVU5DVElPTihGMTEpLAorICBbS0VZX0YxMl0gPSBLQkRfS0VZX0ZVTkNUSU9OKEYxMiksCisgIFtLRVlfUk9dID0gS0JEX0tFWV9VTk1BUFBFRCwKKyAgW0tFWV9LQVRBS0FOQV0gPSBLQkRfS0VZX1VOTUFQUEVELAorICBbS0VZX0hJUkFHQU5BXSA9IEtCRF9LRVlfVU5NQVBQRUQsCisgIFtLRVlfSEVOS0FOXSA9IEtCRF9LRVlfVU5NQVBQRUQsCisgIFtLRVlfS0FUQUtBTkFISVJBR0FOQV0gPSBLQkRfS0VZX1VOTUFQUEVELAorICBbS0VZX01VSEVOS0FOXSA9IEtCRF9LRVlfVU5NQVBQRUQsCisgIFtLRVlfS1BKUENPTU1BXSA9IEtCRF9LRVlfVU5NQVBQRUQsCisgIFtLRVlfS1BFTlRFUl0gPSBLQkRfS0VZX0tQQUNUSU9OKEVudGVyKSwKKyAgW0tFWV9SSUdIVENUUkxdID0gS0JEX0tFWV9NT0RJRklFUihDb250cm9sUmlnaHQpLAorICBbS0VZX0tQU0xBU0hdID0gS0JEX0tFWV9LUFNZTUJPTChEaXZpZGUpLAorICBbS0VZX1NZU1JRXSA9IEtCRF9LRVlfQUNUSU9OKFN5c3RlbVJlcXVlc3QpLAorICBbS0VZX1JJR0hUQUxUXSA9IEtCRF9LRVlfTU9ESUZJRVIoQWx0UmlnaHQpLAorICBbS0VZX0xJTkVGRUVEXSA9IEtCRF9LRVlfVU5NQVBQRUQsCisgIFtLRVlfSE9NRV0gPSBLQkRfS0VZX0FDVElPTihIb21lKSwKKyAgW0tFWV9VUF0gPSBLQkRfS0VZX0FDVElPTihBcnJvd1VwKSwKKyAgW0tFWV9QQUdFVVBdID0gS0JEX0tFWV9BQ1RJT04oUGFnZVVwKSwKKyAgW0tFWV9MRUZUXSA9IEtCRF9LRVlfQUNUSU9OKEFycm93TGVmdCksCisgIFtLRVlfUklHSFRdID0gS0JEX0tFWV9BQ1RJT04oQXJyb3dSaWdodCksCisgIFtLRVlfRU5EXSA9IEtCRF9LRVlfQUNUSU9OKEVuZCksCisgIFtLRVlfRE9XTl0gPSBLQkRfS0VZX0FDVElPTihBcnJvd0Rvd24pLAorICBbS0VZX1BBR0VET1dOXSA9IEtCRF9LRVlfQUNUSU9OKFBhZ2VEb3duKSwKKyAgW0tFWV9JTlNFUlRdID0gS0JEX0tFWV9BQ1RJT04oSW5zZXJ0KSwKKyAgW0tFWV9ERUxFVEVdID0gS0JEX0tFWV9BQ1RJT04oRGVsZXRlRm9yd2FyZCksCisgIFtLRVlfTUFDUk9dID0gS0JEX0tFWV9VTk1BUFBFRCwKKyAgW0tFWV9NVVRFXSA9IEtCRF9LRVlfTUVESUEoTXV0ZSksCisgIFtLRVlfVk9MVU1FRE9XTl0gPSBLQkRfS0VZX01FRElBKFZvbHVtZURvd24pLAorICBbS0VZX1ZPTFVNRVVQXSA9IEtCRF9LRVlfTUVESUEoVm9sdW1lVXApLAorICBbS0VZX1BPV0VSXSA9IEtCRF9LRVlfQUNUSU9OKFBvd2VyKSwKKyAgW0tFWV9LUEVRVUFMXSA9IEtCRF9LRVlfS1BTWU1CT0woRXF1YWxzKSwKKyAgW0tFWV9LUFBMVVNNSU5VU10gPSBLQkRfS0VZX0tQU1lNQk9MKFBsdXNNaW51cyksCisgIFtLRVlfTEVGVE1FVEFdID0gS0JEX0tFWV9BQ1RJT04oR3VpTGVmdCksCisgIFtLRVlfUklHSFRNRVRBXSA9IEtCRF9LRVlfQUNUSU9OKEd1aVJpZ2h0KSwKKyAgW0tFWV9DT01QT1NFXSA9IEtCRF9LRVlfQUNUSU9OKENvbnRleHQpLAorICBbS0VZX1BBVVNFXSA9IEtCRF9LRVlfQUNUSU9OKFBhdXNlKSwKKyAgW0tFWV9LUENPTU1BXSA9IEtCRF9LRVlfS1BTWU1CT0woQ29tbWEpLAorICBbS0VZX0hBTkdFVUxdID0gS0JEX0tFWV9VTk1BUFBFRCwKKyAgW0tFWV9IQU5HVUVMXSA9IEtCRF9LRVlfVU5NQVBQRUQsCisgIFtLRVlfSEFOSkFdID0gS0JEX0tFWV9VTk1BUFBFRCwKKyAgW0tFWV9ZRU5dID0gS0JEX0tFWV9VTk1BUFBFRCwKKyAgW0tFWV9MRUZUTUVUQV0gPSBLQkRfS0VZX1VOTUFQUEVELAorICBbS0VZX1JJR0hUTUVUQV0gPSBLQkRfS0VZX1VOTUFQUEVELAorICBbS0VZX0NPTVBPU0VdID0gS0JEX0tFWV9VTk1BUFBFRCwKKyAgW0tFWV9TVE9QXSA9IEtCRF9LRVlfQUNUSU9OKFN0b3ApLAorICBbS0VZX0FHQUlOXSA9IEtCRF9LRVlfQUNUSU9OKEFnYWluKSwKKyAgW0tFWV9QUk9QU10gPSBLQkRfS0VZX0FDVElPTihQcm9wcyksCisgIFtLRVlfVU5ET10gPSBLQkRfS0VZX0FDVElPTihVbmRvKSwKKyAgW0tFWV9GUk9OVF0gPSBLQkRfS0VZX0FDVElPTihGcm9udCksCisgIFtLRVlfQ09QWV0gPSBLQkRfS0VZX0FDVElPTihDb3B5KSwKKyAgW0tFWV9PUEVOXSA9IEtCRF9LRVlfQUNUSU9OKE9wZW4pLAorICBbS0VZX1BBU1RFXSA9IEtCRF9LRVlfQUNUSU9OKFBhc3RlKSwKKyAgW0tFWV9GSU5EXSA9IEtCRF9LRVlfQUNUSU9OKEZpbmQpLAorICBbS0VZX0NVVF0gPSBLQkRfS0VZX0FDVElPTihDdXQpLAorICBbS0VZX0hFTFBdID0gS0JEX0tFWV9BQ1RJT04oSGVscCksCisgIFtLRVlfTUVOVV0gPSBLQkRfS0VZX0FDVElPTihNZW51KSwKKyAgW0tFWV9DQUxDXSA9IEtCRF9LRVlfVU5NQVBQRUQsCisgIFtLRVlfU0VUVVBdID0gS0JEX0tFWV9VTk1BUFBFRCwKKyAgW0tFWV9TTEVFUF0gPSBLQkRfS0VZX1VOTUFQUEVELAorICBbS0VZX1dBS0VVUF0gPSBLQkRfS0VZX1VOTUFQUEVELAorICBbS0VZX0ZJTEVdID0gS0JEX0tFWV9VTk1BUFBFRCwKKyAgW0tFWV9TRU5ERklMRV0gPSBLQkRfS0VZX1VOTUFQUEVELAorICBbS0VZX0RFTEVURUZJTEVdID0gS0JEX0tFWV9VTk1BUFBFRCwKKyAgW0tFWV9YRkVSXSA9IEtCRF9LRVlfVU5NQVBQRUQsCisgIFtLRVlfUFJPRzFdID0gS0JEX0tFWV9VTk1BUFBFRCwKKyAgW0tFWV9QUk9HMl0gPSBLQkRfS0VZX1VOTUFQUEVELAorICBbS0VZX1dXV10gPSBLQkRfS0VZX1VOTUFQUEVELAorICBbS0VZX01TRE9TXSA9IEtCRF9LRVlfVU5NQVBQRUQsCisgIFtLRVlfQ09GRkVFXSA9IEtCRF9LRVlfVU5NQVBQRUQsCisgIFtLRVlfU0NSRUVOTE9DS10gPSBLQkRfS0VZX1VOTUFQUEVELAorICBbS0VZX0RJUkVDVElPTl0gPSBLQkRfS0VZX1VOTUFQUEVELAorICBbS0VZX0NZQ0xFV0lORE9XU10gPSBLQkRfS0VZX1VOTUFQUEVELAorICBbS0VZX01BSUxdID0gS0JEX0tFWV9VTk1BUFBFRCwKKyAgW0tFWV9CT09LTUFSS1NdID0gS0JEX0tFWV9VTk1BUFBFRCwKKyAgW0tFWV9DT01QVVRFUl0gPSBLQkRfS0VZX1VOTUFQUEVELAorICBbS0VZX0JBQ0tdID0gS0JEX0tFWV9VTk1BUFBFRCwKKyAgW0tFWV9GT1JXQVJEXSA9IEtCRF9LRVlfVU5NQVBQRUQsCisgIFtLRVlfQ0xPU0VDRF0gPSBLQkRfS0VZX01FRElBKENsb3NlKSwKKyAgW0tFWV9FSkVDVENEXSA9IEtCRF9LRVlfTUVESUEoRWplY3QpLAorICBbS0VZX0VKRUNUQ0xPU0VDRF0gPSBLQkRfS0VZX01FRElBKEVqZWN0Q2xvc2UpLAorICBbS0VZX05FWFRTT05HXSA9IEtCRF9LRVlfTUVESUEoTmV4dCksCisgIFtLRVlfUExBWVBBVVNFXSA9IEtCRF9LRVlfTUVESUEoUGxheVBhdXNlKSwKKyAgW0tFWV9QUkVWSU9VU1NPTkddID0gS0JEX0tFWV9NRURJQShQcmV2aW91cyksCisgIFtLRVlfU1RPUENEXSA9IEtCRF9LRVlfTUVESUEoU3RvcCksCisgIFtLRVlfUkVDT1JEXSA9IEtCRF9LRVlfTUVESUEoUmVjb3JkKSwKKyAgW0tFWV9SRVdJTkRdID0gS0JEX0tFWV9NRURJQShCYWNrd2FyZCksCisgIFtLRVlfUEhPTkVdID0gS0JEX0tFWV9VTk1BUFBFRCwKKyAgW0tFWV9JU09dID0gS0JEX0tFWV9VTk1BUFBFRCwKKyAgW0tFWV9DT05GSUddID0gS0JEX0tFWV9VTk1BUFBFRCwKKyAgW0tFWV9IT01FUEFHRV0gPSBLQkRfS0VZX1VOTUFQUEVELAorICBbS0VZX1JFRlJFU0hdID0gS0JEX0tFWV9VTk1BUFBFRCwKKyAgW0tFWV9FWElUXSA9IEtCRF9LRVlfVU5NQVBQRUQsCisgIFtLRVlfTU9WRV0gPSBLQkRfS0VZX1VOTUFQUEVELAorICBbS0VZX0VESVRdID0gS0JEX0tFWV9VTk1BUFBFRCwKKyAgW0tFWV9TQ1JPTExVUF0gPSBLQkRfS0VZX1VOTUFQUEVELAorICBbS0VZX1NDUk9MTERPV05dID0gS0JEX0tFWV9VTk1BUFBFRCwKKyAgW0tFWV9LUExFRlRQQVJFTl0gPSBLQkRfS0VZX0tQU1lNQk9MKExlZnRQYXJlbnRoZXNpcyksCisgIFtLRVlfS1BSSUdIVFBBUkVOXSA9IEtCRF9LRVlfS1BTWU1CT0woUmlnaHRQYXJlbnRoZXNpcyksCisgIFtLRVlfTkVXXSA9IEtCRF9LRVlfVU5NQVBQRUQsCisgIFtLRVlfUkVET10gPSBLQkRfS0VZX1VOTUFQUEVELAorICBbS0VZX0YxM10gPSBLQkRfS0VZX0ZVTkNUSU9OKEYxMyksCisgIFtLRVlfRjE0XSA9IEtCRF9LRVlfRlVOQ1RJT04oRjE0KSwKKyAgW0tFWV9GMTVdID0gS0JEX0tFWV9GVU5DVElPTihGMTUpLAorICBbS0VZX0YxNl0gPSBLQkRfS0VZX0ZVTkNUSU9OKEYxNiksCisgIFtLRVlfRjE3XSA9IEtCRF9LRVlfRlVOQ1RJT04oRjE3KSwKKyAgW0tFWV9GMThdID0gS0JEX0tFWV9GVU5DVElPTihGMTgpLAorICBbS0VZX0YxOV0gPSBLQkRfS0VZX0ZVTkNUSU9OKEYxOSksCisgIFtLRVlfRjIwXSA9IEtCRF9LRVlfRlVOQ1RJT04oRjIwKSwKKyAgW0tFWV9GMjFdID0gS0JEX0tFWV9GVU5DVElPTihGMjEpLAorICBbS0VZX0YyMl0gPSBLQkRfS0VZX0ZVTkNUSU9OKEYyMiksCisgIFtLRVlfRjIzXSA9IEtCRF9LRVlfRlVOQ1RJT04oRjIzKSwKKyAgW0tFWV9GMjRdID0gS0JEX0tFWV9GVU5DVElPTihGMjQpLAorICBbS0VZX1BMQVlDRF0gPSBLQkRfS0VZX01FRElBKFBsYXkpLAorICBbS0VZX1BBVVNFQ0RdID0gS0JEX0tFWV9NRURJQShQYXVzZSksCisgIFtLRVlfUFJPRzNdID0gS0JEX0tFWV9VTk1BUFBFRCwKKyAgW0tFWV9QUk9HNF0gPSBLQkRfS0VZX1VOTUFQUEVELAorICBbS0VZX0RBU0hCT0FSRF0gPSBLQkRfS0VZX1VOTUFQUEVELAorICBbS0VZX1NVU1BFTkRdID0gS0JEX0tFWV9VTk1BUFBFRCwKKyAgW0tFWV9DTE9TRV0gPSBLQkRfS0VZX1VOTUFQUEVELAorICBbS0VZX1BMQVldID0gS0JEX0tFWV9VTk1BUFBFRCwKKyAgW0tFWV9GQVNURk9SV0FSRF0gPSBLQkRfS0VZX01FRElBKEZvcndhcmQpLAorICBbS0VZX0JBU1NCT09TVF0gPSBLQkRfS0VZX1VOTUFQUEVELAorICBbS0VZX1BSSU5UXSA9IEtCRF9LRVlfVU5NQVBQRUQsCisgIFtLRVlfSFBdID0gS0JEX0tFWV9VTk1BUFBFRCwKKyAgW0tFWV9DQU1FUkFdID0gS0JEX0tFWV9VTk1BUFBFRCwKKyAgW0tFWV9TT1VORF0gPSBLQkRfS0VZX1VOTUFQUEVELAorICBbS0VZX1FVRVNUSU9OXSA9IEtCRF9LRVlfVU5NQVBQRUQsCisgIFtLRVlfRU1BSUxdID0gS0JEX0tFWV9VTk1BUFBFRCwKKyAgW0tFWV9DSEFUXSA9IEtCRF9LRVlfVU5NQVBQRUQsCisgIFtLRVlfU0VBUkNIXSA9IEtCRF9LRVlfVU5NQVBQRUQsCisgIFtLRVlfQ09OTkVDVF0gPSBLQkRfS0VZX1VOTUFQUEVELAorICBbS0VZX0ZJTkFOQ0VdID0gS0JEX0tFWV9VTk1BUFBFRCwKKyAgW0tFWV9TUE9SVF0gPSBLQkRfS0VZX1VOTUFQUEVELAorICBbS0VZX1NIT1BdID0gS0JEX0tFWV9VTk1BUFBFRCwKKyAgW0tFWV9BTFRFUkFTRV0gPSBLQkRfS0VZX1VOTUFQUEVELAorICBbS0VZX0NBTkNFTF0gPSBLQkRfS0VZX1VOTUFQUEVELAorICBbS0VZX0JSSUdIVE5FU1NET1dOXSA9IEtCRF9LRVlfVU5NQVBQRUQsCisgIFtLRVlfQlJJR0hUTkVTU1VQXSA9IEtCRF9LRVlfVU5NQVBQRUQsCisgIFtLRVlfTUVESUFdID0gS0JEX0tFWV9VTk1BUFBFRCwKKyAgW0tFWV9TV0lUQ0hWSURFT01PREVdID0gS0JEX0tFWV9VTk1BUFBFRCwKKyAgW0tFWV9LQkRJTExVTVRPR0dMRV0gPSBLQkRfS0VZX1VOTUFQUEVELAorICBbS0VZX0tCRElMTFVNRE9XTl0gPSBLQkRfS0VZX1VOTUFQUEVELAorICBbS0VZX0tCRElMTFVNVVBdID0gS0JEX0tFWV9VTk1BUFBFRCwKKyAgW0tFWV9TRU5EXSA9IEtCRF9LRVlfVU5NQVBQRUQsCisgIFtLRVlfUkVQTFldID0gS0JEX0tFWV9VTk1BUFBFRCwKKyAgW0tFWV9GT1JXQVJETUFJTF0gPSBLQkRfS0VZX1VOTUFQUEVELAorICBbS0VZX1NBVkVdID0gS0JEX0tFWV9VTk1BUFBFRCwKKyAgW0tFWV9ET0NVTUVOVFNdID0gS0JEX0tFWV9VTk1BUFBFRCwKKyAgW0tFWV9CQVRURVJZXSA9IEtCRF9LRVlfVU5NQVBQRUQsCisgIFtLRVlfQkxVRVRPT1RIXSA9IEtCRF9LRVlfVU5NQVBQRUQsCisgIFtLRVlfV0xBTl0gPSBLQkRfS0VZX1VOTUFQUEVELAorICBbS0VZX1VXQl0gPSBLQkRfS0VZX1VOTUFQUEVELAorICBbS0VZX1VOS05PV05dID0gS0JEX0tFWV9VTk1BUFBFRCwKKyAgW0tFWV9WSURFT19ORVhUXSA9IEtCRF9LRVlfVU5NQVBQRUQsCisgIFtLRVlfVklERU9fUFJFVl0gPSBLQkRfS0VZX1VOTUFQUEVELAorICBbS0VZX0JSSUdIVE5FU1NfQ1lDTEVdID0gS0JEX0tFWV9VTk1BUFBFRCwKKyAgW0tFWV9CUklHSFRORVNTX1pFUk9dID0gS0JEX0tFWV9VTk1BUFBFRCwKKyAgW0tFWV9ESVNQTEFZX09GRl0gPSBLQkRfS0VZX1VOTUFQUEVELAorICBbS0VZX1dJTUFYXSA9IEtCRF9LRVlfVU5NQVBQRUQsCisgIFtLRVlfT0tdID0gS0JEX0tFWV9VTk1BUFBFRCwKKyAgW0tFWV9TRUxFQ1RdID0gS0JEX0tFWV9BQ1RJT04oU2VsZWN0KSwKKyAgW0tFWV9HT1RPXSA9IEtCRF9LRVlfVU5NQVBQRUQsCisgIFtLRVlfQ0xFQVJdID0gS0JEX0tFWV9BQ1RJT04oQ2xlYXIpLAorICBbS0VZX1BPV0VSMl0gPSBLQkRfS0VZX1VOTUFQUEVELAorICBbS0VZX09QVElPTl0gPSBLQkRfS0VZX1VOTUFQUEVELAorICBbS0VZX0lORk9dID0gS0JEX0tFWV9VTk1BUFBFRCwKKyAgW0tFWV9USU1FXSA9IEtCRF9LRVlfVU5NQVBQRUQsCisgIFtLRVlfVkVORE9SXSA9IEtCRF9LRVlfVU5NQVBQRUQsCisgIFtLRVlfQVJDSElWRV0gPSBLQkRfS0VZX1VOTUFQUEVELAorICBbS0VZX1BST0dSQU1dID0gS0JEX0tFWV9VTk1BUFBFRCwKKyAgW0tFWV9DSEFOTkVMXSA9IEtCRF9LRVlfVU5NQVBQRUQsCisgIFtLRVlfRkFWT1JJVEVTXSA9IEtCRF9LRVlfVU5NQVBQRUQsCisgIFtLRVlfRVBHXSA9IEtCRF9LRVlfVU5NQVBQRUQsCisgIFtLRVlfUFZSXSA9IEtCRF9LRVlfVU5NQVBQRUQsCisgIFtLRVlfTUhQXSA9IEtCRF9LRVlfVU5NQVBQRUQsCisgIFtLRVlfTEFOR1VBR0VdID0gS0JEX0tFWV9VTk1BUFBFRCwKKyAgW0tFWV9USVRMRV0gPSBLQkRfS0VZX1VOTUFQUEVELAorICBbS0VZX1NVQlRJVExFXSA9IEtCRF9LRVlfVU5NQVBQRUQsCisgIFtLRVlfQU5HTEVdID0gS0JEX0tFWV9VTk1BUFBFRCwKKyAgW0tFWV9aT09NXSA9IEtCRF9LRVlfVU5NQVBQRUQsCisgIFtLRVlfTU9ERV0gPSBLQkRfS0VZX1VOTUFQUEVELAorICBbS0VZX0tFWUJPQVJEXSA9IEtCRF9LRVlfVU5NQVBQRUQsCisgIFtLRVlfU0NSRUVOXSA9IEtCRF9LRVlfVU5NQVBQRUQsCisgIFtLRVlfUENdID0gS0JEX0tFWV9VTk1BUFBFRCwKKyAgW0tFWV9UVl0gPSBLQkRfS0VZX1VOTUFQUEVELAorICBbS0VZX1RWMl0gPSBLQkRfS0VZX1VOTUFQUEVELAorICBbS0VZX1ZDUl0gPSBLQkRfS0VZX1VOTUFQUEVELAorICBbS0VZX1ZDUjJdID0gS0JEX0tFWV9VTk1BUFBFRCwKKyAgW0tFWV9TQVRdID0gS0JEX0tFWV9VTk1BUFBFRCwKKyAgW0tFWV9TQVQyXSA9IEtCRF9LRVlfVU5NQVBQRUQsCisgIFtLRVlfQ0RdID0gS0JEX0tFWV9VTk1BUFBFRCwKKyAgW0tFWV9UQVBFXSA9IEtCRF9LRVlfVU5NQVBQRUQsCisgIFtLRVlfUkFESU9dID0gS0JEX0tFWV9VTk1BUFBFRCwKKyAgW0tFWV9UVU5FUl0gPSBLQkRfS0VZX1VOTUFQUEVELAorICBbS0VZX1BMQVlFUl0gPSBLQkRfS0VZX1VOTUFQUEVELAorICBbS0VZX1RFWFRdID0gS0JEX0tFWV9VTk1BUFBFRCwKKyAgW0tFWV9EVkRdID0gS0JEX0tFWV9VTk1BUFBFRCwKKyAgW0tFWV9BVVhdID0gS0JEX0tFWV9VTk1BUFBFRCwKKyAgW0tFWV9NUDNdID0gS0JEX0tFWV9VTk1BUFBFRCwKKyAgW0tFWV9BVURJT10gPSBLQkRfS0VZX1VOTUFQUEVELAorICBbS0VZX1ZJREVPXSA9IEtCRF9LRVlfVU5NQVBQRUQsCisgIFtLRVlfRElSRUNUT1JZXSA9IEtCRF9LRVlfVU5NQVBQRUQsCisgIFtLRVlfTElTVF0gPSBLQkRfS0VZX1VOTUFQUEVELAorICBbS0VZX01FTU9dID0gS0JEX0tFWV9VTk1BUFBFRCwKKyAgW0tFWV9DQUxFTkRBUl0gPSBLQkRfS0VZX1VOTUFQUEVELAorICBbS0VZX1JFRF0gPSBLQkRfS0VZX1VOTUFQUEVELAorICBbS0VZX0dSRUVOXSA9IEtCRF9LRVlfVU5NQVBQRUQsCisgIFtLRVlfWUVMTE9XXSA9IEtCRF9LRVlfVU5NQVBQRUQsCisgIFtLRVlfQkxVRV0gPSBLQkRfS0VZX1VOTUFQUEVELAorICBbS0VZX0NIQU5ORUxVUF0gPSBLQkRfS0VZX1VOTUFQUEVELAorICBbS0VZX0NIQU5ORUxET1dOXSA9IEtCRF9LRVlfVU5NQVBQRUQsCisgIFtLRVlfRklSU1RdID0gS0JEX0tFWV9VTk1BUFBFRCwKKyAgW0tFWV9MQVNUXSA9IEtCRF9LRVlfVU5NQVBQRUQsCisgIFtLRVlfQUJdID0gS0JEX0tFWV9VTk1BUFBFRCwKKyAgW0tFWV9ORVhUXSA9IEtCRF9LRVlfVU5NQVBQRUQsCisgIFtLRVlfUkVTVEFSVF0gPSBLQkRfS0VZX1VOTUFQUEVELAorICBbS0VZX1NMT1ddID0gS0JEX0tFWV9VTk1BUFBFRCwKKyAgW0tFWV9TSFVGRkxFXSA9IEtCRF9LRVlfVU5NQVBQRUQsCisgIFtLRVlfQlJFQUtdID0gS0JEX0tFWV9VTk1BUFBFRCwKKyAgW0tFWV9QUkVWSU9VU10gPSBLQkRfS0VZX1VOTUFQUEVELAorICBbS0VZX0RJR0lUU10gPSBLQkRfS0VZX1VOTUFQUEVELAorICBbS0VZX1RFRU5dID0gS0JEX0tFWV9VTk1BUFBFRCwKKyAgW0tFWV9UV0VOXSA9IEtCRF9LRVlfVU5NQVBQRUQsCisgIFtLRVlfVklERU9QSE9ORV0gPSBLQkRfS0VZX1VOTUFQUEVELAorICBbS0VZX0dBTUVTXSA9IEtCRF9LRVlfVU5NQVBQRUQsCisgIFtLRVlfWk9PTUlOXSA9IEtCRF9LRVlfVU5NQVBQRUQsCisgIFtLRVlfWk9PTU9VVF0gPSBLQkRfS0VZX1VOTUFQUEVELAorICBbS0VZX1pPT01SRVNFVF0gPSBLQkRfS0VZX1VOTUFQUEVELAorICBbS0VZX1dPUkRQUk9DRVNTT1JdID0gS0JEX0tFWV9VTk1BUFBFRCwKKyAgW0tFWV9FRElUT1JdID0gS0JEX0tFWV9VTk1BUFBFRCwKKyAgW0tFWV9TUFJFQURTSEVFVF0gPSBLQkRfS0VZX1VOTUFQUEVELAorICBbS0VZX0dSQVBISUNTRURJVE9SXSA9IEtCRF9LRVlfVU5NQVBQRUQsCisgIFtLRVlfUFJFU0VOVEFUSU9OXSA9IEtCRF9LRVlfVU5NQVBQRUQsCisgIFtLRVlfREFUQUJBU0VdID0gS0JEX0tFWV9VTk1BUFBFRCwKKyAgW0tFWV9ORVdTXSA9IEtCRF9LRVlfVU5NQVBQRUQsCisgIFtLRVlfVk9JQ0VNQUlMXSA9IEtCRF9LRVlfVU5NQVBQRUQsCisgIFtLRVlfQUREUkVTU0JPT0tdID0gS0JEX0tFWV9VTk1BUFBFRCwKKyAgW0tFWV9NRVNTRU5HRVJdID0gS0JEX0tFWV9VTk1BUFBFRCwKKyAgW0tFWV9ESVNQTEFZVE9HR0xFXSA9IEtCRF9LRVlfVU5NQVBQRUQsCisgIFtLRVlfU1BFTExDSEVDS10gPSBLQkRfS0VZX1VOTUFQUEVELAorICBbS0VZX0xPR09GRl0gPSBLQkRfS0VZX1VOTUFQUEVELAorICBbS0VZX0RPTExBUl0gPSBLQkRfS0VZX1VOTUFQUEVELAorICBbS0VZX0VVUk9dID0gS0JEX0tFWV9VTk1BUFBFRCwKKyAgW0tFWV9GUkFNRUJBQ0tdID0gS0JEX0tFWV9VTk1BUFBFRCwKKyAgW0tFWV9GUkFNRUZPUldBUkRdID0gS0JEX0tFWV9VTk1BUFBFRCwKKyAgW0tFWV9DT05URVhUX01FTlVdID0gS0JEX0tFWV9VTk1BUFBFRCwKKyAgW0tFWV9NRURJQV9SRVBFQVRdID0gS0JEX0tFWV9VTk1BUFBFRCwKKyAgW0tFWV9ERUxfRU9MXSA9IEtCRF9LRVlfVU5NQVBQRUQsCisgIFtLRVlfREVMX0VPU10gPSBLQkRfS0VZX1VOTUFQUEVELAorICBbS0VZX0lOU19MSU5FXSA9IEtCRF9LRVlfVU5NQVBQRUQsCisgIFtLRVlfREVMX0xJTkVdID0gS0JEX0tFWV9VTk1BUFBFRCwKKyAgW0tFWV9GTl0gPSBLQkRfS0VZX1VOTUFQUEVELAorICBbS0VZX0ZOX0VTQ10gPSBLQkRfS0VZX1VOTUFQUEVELAorICBbS0VZX0ZOX0YxXSA9IEtCRF9LRVlfVU5NQVBQRUQsCisgIFtLRVlfRk5fRjJdID0gS0JEX0tFWV9VTk1BUFBFRCwKKyAgW0tFWV9GTl9GM10gPSBLQkRfS0VZX1VOTUFQUEVELAorICBbS0VZX0ZOX0Y0XSA9IEtCRF9LRVlfVU5NQVBQRUQsCisgIFtLRVlfRk5fRjVdID0gS0JEX0tFWV9VTk1BUFBFRCwKKyAgW0tFWV9GTl9GNl0gPSBLQkRfS0VZX1VOTUFQUEVELAorICBbS0VZX0ZOX0Y3XSA9IEtCRF9LRVlfVU5NQVBQRUQsCisgIFtLRVlfRk5fRjhdID0gS0JEX0tFWV9VTk1BUFBFRCwKKyAgW0tFWV9GTl9GOV0gPSBLQkRfS0VZX1VOTUFQUEVELAorICBbS0VZX0ZOX0YxMF0gPSBLQkRfS0VZX1VOTUFQUEVELAorICBbS0VZX0ZOX0YxMV0gPSBLQkRfS0VZX1VOTUFQUEVELAorICBbS0VZX0ZOX0YxMl0gPSBLQkRfS0VZX1VOTUFQUEVELAorICBbS0VZX0ZOXzFdID0gS0JEX0tFWV9VTk1BUFBFRCwKKyAgW0tFWV9GTl8yXSA9IEtCRF9LRVlfVU5NQVBQRUQsCisgIFtLRVlfRk5fRF0gPSBLQkRfS0VZX1VOTUFQUEVELAorICBbS0VZX0ZOX0VdID0gS0JEX0tFWV9VTk1BUFBFRCwKKyAgW0tFWV9GTl9GXSA9IEtCRF9LRVlfVU5NQVBQRUQsCisgIFtLRVlfRk5fU10gPSBLQkRfS0VZX1VOTUFQUEVELAorICBbS0VZX0ZOX0JdID0gS0JEX0tFWV9VTk1BUFBFRCwKKyAgW0tFWV9CUkxfRE9UMV0gPSBLQkRfS0VZX0JSQUlMTEUoRG90MSksCisgIFtLRVlfQlJMX0RPVDJdID0gS0JEX0tFWV9CUkFJTExFKERvdDIpLAorICBbS0VZX0JSTF9ET1QzXSA9IEtCRF9LRVlfQlJBSUxMRShEb3QzKSwKKyAgW0tFWV9CUkxfRE9UNF0gPSBLQkRfS0VZX0JSQUlMTEUoRG90NCksCisgIFtLRVlfQlJMX0RPVDVdID0gS0JEX0tFWV9CUkFJTExFKERvdDUpLAorICBbS0VZX0JSTF9ET1Q2XSA9IEtCRF9LRVlfQlJBSUxMRShEb3Q2KSwKKyAgW0tFWV9CUkxfRE9UN10gPSBLQkRfS0VZX0JSQUlMTEUoRG90NyksCisgIFtLRVlfQlJMX0RPVDhdID0gS0JEX0tFWV9CUkFJTExFKERvdDgpLAorICBbS0VZX0JSTF9ET1Q5XSA9IEtCRF9LRVlfQlJBSUxMRShCYWNrd2FyZCksCisgIFtLRVlfQlJMX0RPVDEwXSA9IEtCRF9LRVlfQlJBSUxMRShGb3J3YXJkKSwKK0VORF9LRVlfQ09ERV9NQVAKKworaW50CituZXdLZXlib2FyZE1vbml0b3JFeHRlbnNpb24gKEtleWJvYXJkTW9uaXRvckV4dGVuc2lvbiAqKmtteCkgeworICBpZiAoKCprbXggPSBtYWxsb2Moc2l6ZW9mKCoqa214KSkpKSB7CisgICAgbWVtc2V0KCprbXgsICAwLCBzaXplb2YoKiprbXgpKTsKKworICAgICgqa214KS0+dWV2ZW50LnNvY2tldCA9IC0xOworICAgICgqa214KS0+dWV2ZW50Lm1vbml0b3IgPSBOVUxMOworCisgICAgcmV0dXJuIDE7CisgIH0gZWxzZSB7CisgICAgbG9nTWFsbG9jRXJyb3IoKTsKKyAgfQorCisgIHJldHVybiAwOworfQorCit2b2lkCitkZXN0cm95S2V5Ym9hcmRNb25pdG9yRXh0ZW5zaW9uIChLZXlib2FyZE1vbml0b3JFeHRlbnNpb24gKmtteCkgeworICBpZiAoa214LT51ZXZlbnQubW9uaXRvcikgYXN5bmNDYW5jZWxSZXF1ZXN0KGtteC0+dWV2ZW50Lm1vbml0b3IpOworICBpZiAoa214LT51ZXZlbnQuc29ja2V0ICE9IC0xKSBjbG9zZShrbXgtPnVldmVudC5zb2NrZXQpOworICBmcmVlKGtteCk7Cit9CisKK2ludAorbmV3S2V5Ym9hcmRJbnN0YW5jZUV4dGVuc2lvbiAoS2V5Ym9hcmRJbnN0YW5jZUV4dGVuc2lvbiAqKmtpeCkgeworICBpZiAoKCpraXggPSBtYWxsb2Moc2l6ZW9mKCoqa2l4KSkpKSB7CisgICAgbWVtc2V0KCpraXgsICAwLCBzaXplb2YoKipraXgpKTsKKworICAgICgqa2l4KS0+dWlucHV0ID0gTlVMTDsKKyAgICAoKmtpeCktPnVkZXZEZWxheSA9IE5VTEw7CisKKyAgICAoKmtpeCktPmZpbGUuZGVzY3JpcHRvciA9IC0xOworICAgICgqa2l4KS0+ZmlsZS5tb25pdG9yID0gTlVMTDsKKworICAgICgqa2l4KS0+ZGV2aWNlLnBhdGggPSBOVUxMOworICAgICgqa2l4KS0+ZGV2aWNlLm1ham9yID0gMDsKKyAgICAoKmtpeCktPmRldmljZS5taW5vciA9IDA7CisKKyAgICByZXR1cm4gMTsKKyAgfSBlbHNlIHsKKyAgICBsb2dNYWxsb2NFcnJvcigpOworICB9CisKKyAgKmtpeCA9IE5VTEw7CisgIHJldHVybiAwOworfQorCit2b2lkCitkZXN0cm95S2V5Ym9hcmRJbnN0YW5jZUV4dGVuc2lvbiAoS2V5Ym9hcmRJbnN0YW5jZUV4dGVuc2lvbiAqa2l4KSB7CisgIGlmIChraXgtPmZpbGUubW9uaXRvcikgeworICAgIGFzeW5jQ2FuY2VsUmVxdWVzdChraXgtPmZpbGUubW9uaXRvcik7CisgICAgbG9nTWVzc2FnZShMT0dfREVCVUcsICJjbG9zaW5nIGtleWJvYXJkOiAlczogZmQ9JWQiLAorICAgICAgICAgICAgICAga2l4LT5kZXZpY2UucGF0aCwga2l4LT5maWxlLmRlc2NyaXB0b3IpOworICB9CisKKyAgaWYgKGtpeC0+ZmlsZS5kZXNjcmlwdG9yICE9IC0xKSBjbG9zZShraXgtPmZpbGUuZGVzY3JpcHRvcik7CisgIGlmIChraXgtPnVkZXZEZWxheSkgYXN5bmNDYW5jZWxSZXF1ZXN0KGtpeC0+dWRldkRlbGF5KTsKKyAgaWYgKGtpeC0+dWlucHV0KSBkZXN0cm95VWlucHV0T2JqZWN0KGtpeC0+dWlucHV0KTsKKyAgaWYgKGtpeC0+ZGV2aWNlLnBhdGgpIGZyZWUoa2l4LT5kZXZpY2UucGF0aCk7CisgIGZyZWUoa2l4KTsKK30KKworaW50Citmb3J3YXJkS2V5RXZlbnQgKEtleWJvYXJkSW5zdGFuY2VPYmplY3QgKmtpbywgaW50IGNvZGUsIGludCBwcmVzcykgeworICByZXR1cm4gd3JpdGVLZXlFdmVudChraW8tPmtpeC0+dWlucHV0LCBjb2RlLCAocHJlc3M/IDE6IDApKTsKK30KKworQVNZTkNfSU5QVVRfQ0FMTEJBQ0soaGFuZGxlTGludXhLZXlib2FyZEV2ZW50KSB7CisgIEtleWJvYXJkSW5zdGFuY2VPYmplY3QgKmtpbyA9IHBhcmFtZXRlcnMtPmRhdGE7CisgIHN0YXRpYyBjb25zdCBjaGFyIGxhYmVsW10gPSAia2V5Ym9hcmQiOworCisgIGlmIChwYXJhbWV0ZXJzLT5lcnJvcikgeworICAgIGxvZ01lc3NhZ2UoTE9HX0RFQlVHLCAiJXMgcmVhZCBlcnJvcjogZmQ9JWQ6ICVzIiwKKyAgICAgICAgICAgICAgIGxhYmVsLCBraW8tPmtpeC0+ZmlsZS5kZXNjcmlwdG9yLCBzdHJlcnJvcihwYXJhbWV0ZXJzLT5lcnJvcikpOworICAgIGRlc3Ryb3lLZXlib2FyZEluc3RhbmNlT2JqZWN0KGtpbyk7CisgIH0gZWxzZSBpZiAocGFyYW1ldGVycy0+ZW5kKSB7CisgICAgbG9nTWVzc2FnZShMT0dfREVCVUcsICIlcyBlbmQtb2YtZmlsZTogZmQ9JWQiLCAKKyAgICAgICAgICAgICAgIGxhYmVsLCBraW8tPmtpeC0+ZmlsZS5kZXNjcmlwdG9yKTsKKyAgICBkZXN0cm95S2V5Ym9hcmRJbnN0YW5jZU9iamVjdChraW8pOworICB9IGVsc2UgeworICAgIGNvbnN0IHN0cnVjdCBpbnB1dF9ldmVudCAqZXZlbnQgPSBwYXJhbWV0ZXJzLT5idWZmZXI7CisKKyAgICBpZiAocGFyYW1ldGVycy0+bGVuZ3RoID49IHNpemVvZigqZXZlbnQpKSB7CisgICAgICBzd2l0Y2ggKGV2ZW50LT50eXBlKSB7CisgICAgICAgIGNhc2UgRVZfS0VZOiB7CisgICAgICAgICAgaW50IHJlbGVhc2UgPSBldmVudC0+dmFsdWUgPT0gMDsKKyAgICAgICAgICBpbnQgcHJlc3MgICA9IGV2ZW50LT52YWx1ZSA9PSAxOworCisgICAgICAgICAgaWYgKHJlbGVhc2UgfHwgcHJlc3MpIGhhbmRsZUtleUV2ZW50KGtpbywgZXZlbnQtPmNvZGUsIHByZXNzKTsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGNhc2UgRVZfUkVQOiB7CisgICAgICAgICAgc3dpdGNoIChldmVudC0+Y29kZSkgeworICAgICAgICAgICAgY2FzZSBSRVBfREVMQVk6IHsKKyAgICAgICAgICAgICAgd3JpdGVSZXBlYXREZWxheShraW8tPmtpeC0+dWlucHV0LCBldmVudC0+dmFsdWUpOworICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgY2FzZSBSRVBfUEVSSU9EOiB7CisgICAgICAgICAgICAgIHdyaXRlUmVwZWF0UGVyaW9kKGtpby0+a2l4LT51aW5wdXQsIGV2ZW50LT52YWx1ZSk7CisgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICB9CisKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgYnJlYWs7CisgICAgICB9CisKKyAgICAgIHJldHVybiBzaXplb2YoKmV2ZW50KTsKKyAgICB9CisgIH0KKworICByZXR1cm4gMDsKK30KKworc3RhdGljIFVpbnB1dE9iamVjdCAqCituZXdVaW5wdXRJbnN0YW5jZSAoY29uc3QgY2hhciAqZGV2aWNlKSB7CisgIGNoYXIgbmFtZVswWDQwXTsKKworICBzbnByaW50ZihuYW1lLCBzaXplb2YobmFtZSksICJLZXlib2FyZCBJbnN0YW5jZSAtICVzIiwgbG9jYXRlUGF0aE5hbWUoZGV2aWNlKSk7CisgIHJldHVybiBuZXdVaW5wdXRPYmplY3QobmFtZSk7Cit9CisKK3N0YXRpYyBpbnQKK3ByZXBhcmVVaW5wdXRJbnN0YW5jZSAoVWlucHV0T2JqZWN0ICp1aW5wdXQsIGludCBrZXlib2FyZCkgeworICB7CisgICAgaW50IHR5cGUgPSBFVl9LRVk7CisgICAgQklUTUFTSyhtYXNrLCBLRVlfTUFYKzEsIGNoYXIpOworICAgIGludCBzaXplID0gaW9jdGwoa2V5Ym9hcmQsIEVWSU9DR0JJVCh0eXBlLCBzaXplb2YobWFzaykpLCBtYXNrKTsKKworICAgIGlmIChzaXplID09IC0xKSB7CisgICAgICBsb2dTeXN0ZW1FcnJvcigiaW9jdGxbRVZJT0NHQklUXSIpOworICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgeworICAgICAgaW50IGNvdW50ID0gc2l6ZSAqIDg7CisKKyAgICAgIHsKKyAgICAgICAgc3RhdGljIGNvbnN0IGludCBrZXlzW10gPSB7S0VZX0VOVEVSLCBLRVlfU1BBQ0UsIEtFWV9CUkxfRE9UMX07CisgICAgICAgIGNvbnN0IGludCAqa2V5ID0ga2V5czsKKyAgICAgICAgY29uc3QgaW50ICplbmQgPSBrZXkgKyBBUlJBWV9DT1VOVChrZXlzKTsKKworICAgICAgICB3aGlsZSAoa2V5IDwgZW5kKSB7CisgICAgICAgICAgaWYgKCprZXkgPj0gY291bnQpIGNvbnRpbnVlOworICAgICAgICAgIGlmIChCSVRNQVNLX1RFU1QobWFzaywgKmtleSkpIGJyZWFrOworICAgICAgICAgIGtleSArPSAxOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGtleSA9PSBlbmQpIHJldHVybiAwOworICAgICAgfQorCisgICAgICBpZiAoIWVuYWJsZVVpbnB1dEV2ZW50VHlwZSh1aW5wdXQsIHR5cGUpKSByZXR1cm4gMDsKKworICAgICAgZm9yIChpbnQga2V5PTA7IGtleTxjb3VudDsga2V5Kz0xKSB7CisgICAgICAgIGlmIChCSVRNQVNLX1RFU1QobWFzaywga2V5KSkgeworICAgICAgICAgIGlmICghZW5hYmxlVWlucHV0S2V5KHVpbnB1dCwga2V5KSkgeworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICB9CisgICAgfQorICB9CisKKyAgaWYgKCFlbmFibGVVaW5wdXRFdmVudFR5cGUodWlucHV0LCBFVl9SRVApKSByZXR1cm4gMDsKKyAgaWYgKCFjcmVhdGVVaW5wdXREZXZpY2UodWlucHV0KSkgcmV0dXJuIDA7CisKKyAgeworICAgIGludCBwcm9wZXJ0aWVzWzJdOworCisgICAgaWYgKGlvY3RsKGtleWJvYXJkLCBFVklPQ0dSRVAsIHByb3BlcnRpZXMpICE9IC0xKSB7CisgICAgICBpZiAoIXdyaXRlUmVwZWF0RGVsYXkodWlucHV0LCBwcm9wZXJ0aWVzWzBdKSkgcmV0dXJuIDA7CisgICAgICBpZiAoIXdyaXRlUmVwZWF0UGVyaW9kKHVpbnB1dCwgcHJvcGVydGllc1sxXSkpIHJldHVybiAwOworICAgIH0KKyAgfQorCisgIHsKKyAgICBCSVRNQVNLKG1hc2ssIEtFWV9NQVgrMSwgY2hhcik7CisgICAgaW50IHNpemUgPSBpb2N0bChrZXlib2FyZCwgRVZJT0NHS0VZKHNpemVvZihtYXNrKSksIG1hc2spOworCisgICAgaWYgKHNpemUgIT0gLTEpIHsKKyAgICAgIGludCBjb3VudCA9IHNpemUgKiA4OworICAgICAgZm9yIChpbnQga2V5PTA7IGtleTxjb3VudDsga2V5Kz0xKSB7CisgICAgICAgIGlmIChCSVRNQVNLX1RFU1QobWFzaywga2V5KSkgeworICAgICAgICAgIGxvZ01lc3NhZ2UoTE9HX1dBUk5JTkcsICJrZXkgYWxyZWFkeSBwcmVzc2VkOiAlZCIsIGtleSk7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9CisgIH0KKworICByZXR1cm4gMTsKK30KKworc3RhdGljIGludAorbW9uaXRvcktleWJvYXJkIChLZXlib2FyZEluc3RhbmNlT2JqZWN0ICpraW8pIHsKKyAgY29uc3QgY2hhciAqZGV2aWNlTmFtZSA9IGxvY2F0ZVBhdGhOYW1lKGtpby0+a2l4LT5kZXZpY2UucGF0aCk7CisKKyAgaWYgKChraW8tPmtpeC0+ZmlsZS5kZXNjcmlwdG9yID0gb3BlbihraW8tPmtpeC0+ZGV2aWNlLnBhdGgsIE9fUkRPTkxZKSkgIT0gLTEpIHsKKyAgICBzdHJ1Y3Qgc3RhdCBzdGF0dXM7CisKKyAgICBpZiAoZnN0YXQoa2lvLT5raXgtPmZpbGUuZGVzY3JpcHRvciwgJnN0YXR1cykgIT0gLTEpIHsKKyAgICAgIGlmIChTX0lTQ0hSKHN0YXR1cy5zdF9tb2RlKSkgeworICAgICAgICB7CisgICAgICAgICAgY2hhciBkZXNjcmlwdGlvblswWDEwMF07CisKKyAgICAgICAgICBTVFJfQkVHSU4oZGVzY3JpcHRpb24sIHNpemVvZihkZXNjcmlwdGlvbikpOworICAgICAgICAgIFNUUl9QUklOVEYoIiVzOiIsIGRldmljZU5hbWUpOworCisgICAgICAgICAgeworICAgICAgICAgICAgc3RydWN0IGlucHV0X2lkIGlkZW50aXR5OworCisgICAgICAgICAgICBpZiAoaW9jdGwoa2lvLT5raXgtPmZpbGUuZGVzY3JpcHRvciwgRVZJT0NHSUQsICZpZGVudGl0eSkgIT0gLTEpIHsKKyAgICAgICAgICAgICAgU1RSX1BSSU5URigiIGJ1cz0lMDRYIHZuZD0lMDRYIHByZD0lMDRYIHZlcj0lMDRYIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBpZGVudGl0eS5idXN0eXBlLCBpZGVudGl0eS52ZW5kb3IsIGlkZW50aXR5LnByb2R1Y3QsIGlkZW50aXR5LnZlcnNpb24pOworCisgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBzdGF0aWMgY29uc3QgS2V5Ym9hcmRUeXBlIHR5cGVUYWJsZVtdID0geworICAjaWZkZWYgQlVTX0k4MDQyCisgICAgICAgICAgICAgICAgICBbQlVTX0k4MDQyXSA9IEtCRF9UWVBFX1BTMiwKKyAgI2VuZGlmIC8qIEJVU19JODA0MiAqLworCisgICNpZmRlZiBCVVNfVVNCCisgICAgICAgICAgICAgICAgICBbQlVTX1VTQl0gPSBLQkRfVFlQRV9VU0IsCisgICNlbmRpZiAvKiBCVVNfVVNCICovCisKKyAgI2lmZGVmIEJVU19CTFVFVE9PVEgKKyAgICAgICAgICAgICAgICAgIFtCVVNfQkxVRVRPT1RIXSA9IEtCRF9UWVBFX0JMVUVUT09USCwKKyAgI2VuZGlmIC8qIEJVU19CTFVFVE9PVEggKi8KKworICAjaWZkZWYgQlVTX0hPU1QKKyAgICAgICAgICAgICAgICAgIFtCVVNfSE9TVF0gPSBLQkRfVFlQRV9JTlRFUk5BTCwKKyAgI2VuZGlmIC8qIEJVU19IT1NUICovCisgICAgICAgICAgICAgICAgfTsKKworICAgICAgICAgICAgICAgIGlmIChpZGVudGl0eS5idXN0eXBlIDwgQVJSQVlfQ09VTlQodHlwZVRhYmxlKSkgeworICAgICAgICAgICAgICAgICAga2lvLT5hY3R1YWxQcm9wZXJ0aWVzLnR5cGUgPSB0eXBlVGFibGVbaWRlbnRpdHkuYnVzdHlwZV07CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAga2lvLT5hY3R1YWxQcm9wZXJ0aWVzLnZlbmRvciA9IGlkZW50aXR5LnZlbmRvcjsKKyAgICAgICAgICAgICAga2lvLT5hY3R1YWxQcm9wZXJ0aWVzLnByb2R1Y3QgPSBpZGVudGl0eS5wcm9kdWN0OworICAgICAgICAgICAgfSBlbHNlIGlmIChlcnJubyAhPSBFTk9UVFkpIHsKKyAgICAgICAgICAgICAgbG9nTWVzc2FnZShMT0dfV0FSTklORywgImNhbm5vdCBnZXQgaW5wdXQgZGV2aWNlIGlkZW50aXR5OiAlczogJXMiLAorICAgICAgICAgICAgICAgICAgICAgICAgIGRldmljZU5hbWUsIHN0cmVycm9yKGVycm5vKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgfQorCisgICAgICAgICAgeworICAgICAgICAgICAgY2hhciB0b3BvbG9neVswWDEwMF07CisKKyAgICAgICAgICAgIGlmIChpb2N0bChraW8tPmtpeC0+ZmlsZS5kZXNjcmlwdG9yLCBFVklPQ0dQSFlTKHNpemVvZih0b3BvbG9neSkpLCB0b3BvbG9neSkgIT0gLTEpIHsKKyAgICAgICAgICAgICAgaWYgKCp0b3BvbG9neSkgeworICAgICAgICAgICAgICAgIFNUUl9QUklOVEYoIiB0cGw9JXMiLCB0b3BvbG9neSk7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9CisKKyAgICAgICAgICB7CisgICAgICAgICAgICBjaGFyIGlkZW50aWZpZXJbMFgxMDBdOworCisgICAgICAgICAgICBpZiAoaW9jdGwoa2lvLT5raXgtPmZpbGUuZGVzY3JpcHRvciwgRVZJT0NHVU5JUShzaXplb2YoaWRlbnRpZmllcikpLCBpZGVudGlmaWVyKSAhPSAtMSkgeworICAgICAgICAgICAgICBpZiAoKmlkZW50aWZpZXIpIHsKKyAgICAgICAgICAgICAgICBTVFJfUFJJTlRGKCIgaWQ9JXMiLCBpZGVudGlmaWVyKTsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgIH0KKworICAgICAgICAgIHsKKyAgICAgICAgICAgIGNoYXIgbmFtZVswWDEwMF07CisKKyAgICAgICAgICAgIGlmIChpb2N0bChraW8tPmtpeC0+ZmlsZS5kZXNjcmlwdG9yLCBFVklPQ0dOQU1FKHNpemVvZihuYW1lKSksIG5hbWUpICE9IC0xKSB7CisgICAgICAgICAgICAgIGlmICgqbmFtZSkgeworICAgICAgICAgICAgICAgIFNUUl9QUklOVEYoIiBuYW09JXMiLCBuYW1lKTsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgIH0KKworICAgICAgICAgIFNUUl9FTkQ7CisgICAgICAgICAgbG9nTWVzc2FnZShMT0dfREVCVUcsICJjaGVja2luZyBpbnB1dCBkZXZpY2U6ICVzIiwgZGVzY3JpcHRpb24pOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAoa2lvLT5hY3R1YWxQcm9wZXJ0aWVzLnR5cGUpIHsKKyAgICAgICAgICBpZiAoY2hlY2tLZXlib2FyZFByb3BlcnRpZXMoJmtpby0+YWN0dWFsUHJvcGVydGllcywgJmtpby0+a21vLT5yZXF1aXJlZFByb3BlcnRpZXMpKSB7CisgICAgICAgICAgICBpZiAoaW9jdGwoa2lvLT5raXgtPmZpbGUuZGVzY3JpcHRvciwgRVZJT0NHUkFCLCAxKSAhPSAtMSkgeworICAgICAgICAgICAgICBpZiAoKGtpby0+a2l4LT51aW5wdXQgPSBuZXdVaW5wdXRJbnN0YW5jZShraW8tPmtpeC0+ZGV2aWNlLnBhdGgpKSkgeworICAgICAgICAgICAgICAgIGlmIChwcmVwYXJlVWlucHV0SW5zdGFuY2Uoa2lvLT5raXgtPnVpbnB1dCwga2lvLT5raXgtPmZpbGUuZGVzY3JpcHRvcikpIHsKKyAgICAgICAgICAgICAgICAgIGlmIChhc3luY1JlYWRGaWxlKCZraW8tPmtpeC0+ZmlsZS5tb25pdG9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2lvLT5raXgtPmZpbGUuZGVzY3JpcHRvciwgc2l6ZW9mKHN0cnVjdCBpbnB1dF9ldmVudCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVMaW51eEtleWJvYXJkRXZlbnQsIGtpbykpIHsKKyAgICAgICAgICAgICAgICAgICAgbG9nTWVzc2FnZShMT0dfREVCVUcsICJrZXlib2FyZCBvcGVuZWQ6ICVzOiBmZD0lZCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2lvLT5raXgtPmRldmljZS5wYXRoLCBraW8tPmtpeC0+ZmlsZS5kZXNjcmlwdG9yKTsKKworICAgICAgICAgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgIGxvZ1N5c3RlbUVycm9yKCJpb2N0bFtFVklPQ0dSQUJdIik7CisgICAgICAgICAgICB9CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgIGxvZ01lc3NhZ2UoTE9HX1dBUk5JTkcsICJjYW5ub3Qgc3RhdCBpbnB1dCBkZXZpY2U6ICVzOiAlcyIsCisgICAgICAgICAgICAgICAgIGRldmljZU5hbWUsIHN0cmVycm9yKGVycm5vKSk7CisgICAgfQorICB9IGVsc2UgeworICAgIGxvZ01lc3NhZ2UoTE9HX1dBUk5JTkcsICJjYW5ub3Qgb3BlbiBpbnB1dCBkZXZpY2U6ICVzOiAlcyIsCisgICAgICAgICAgICAgICBkZXZpY2VOYW1lLCBzdHJlcnJvcihlcnJubykpOworICB9CisKKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkCittb25pdG9yQ3VycmVudEtleWJvYXJkcyAoS2V5Ym9hcmRNb25pdG9yT2JqZWN0ICprbW8pIHsKKyAgY29uc3QgY2hhciAqcm9vdCA9ICIvZGV2L2lucHV0IjsKKyAgY29uc3Qgc2l6ZV90IHJvb3RMZW5ndGggPSBzdHJsZW4ocm9vdCk7CisgIERJUiAqZGlyZWN0b3J5OworCisgIGxvZ01lc3NhZ2UoTE9HX0RFQlVHLCAic2VhcmNoaW5nIGZvciBrZXlib2FyZHMiKTsKKworICBpZiAoKGRpcmVjdG9yeSA9IG9wZW5kaXIocm9vdCkpKSB7CisgICAgc3RydWN0IGRpcmVudCAqZW50cnk7CisKKyAgICB3aGlsZSAoKGVudHJ5ID0gcmVhZGRpcihkaXJlY3RvcnkpKSkgeworICAgICAgS2V5Ym9hcmRJbnN0YW5jZU9iamVjdCAqa2lvOworCisgICAgICBpZiAoKGtpbyA9IG5ld0tleWJvYXJkSW5zdGFuY2VPYmplY3Qoa21vKSkpIHsKKyAgICAgICAgY29uc3Qgc2l6ZV90IHBhdGhTaXplID0gcm9vdExlbmd0aCArIDEgKyBzdHJsZW4oZW50cnktPmRfbmFtZSkgKyAxOworCisgICAgICAgIGlmICgoa2lvLT5raXgtPmRldmljZS5wYXRoID0gbWFsbG9jKHBhdGhTaXplKSkpIHsKKyAgICAgICAgICBzbnByaW50ZihraW8tPmtpeC0+ZGV2aWNlLnBhdGgsIHBhdGhTaXplLCAiJXMvJXMiLCByb290LCBlbnRyeS0+ZF9uYW1lKTsKKyAgICAgICAgICBpZiAobW9uaXRvcktleWJvYXJkKGtpbykpIGNvbnRpbnVlOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgIGxvZ01hbGxvY0Vycm9yKCk7CisgICAgICAgIH0KKworICAgICAgICBkZXN0cm95S2V5Ym9hcmRJbnN0YW5jZU9iamVjdChraW8pOworICAgICAgfQorICAgIH0KKworICAgIGNsb3NlZGlyKGRpcmVjdG9yeSk7CisgIH0gZWxzZSB7CisgICAgbG9nTWVzc2FnZShMT0dfREVCVUcsICJjYW5ub3Qgb3BlbiBkaXJlY3Rvcnk6ICVzOiAlcyIsIHJvb3QsIHN0cmVycm9yKGVycm5vKSk7CisgIH0KKworICBsb2dNZXNzYWdlKExPR19ERUJVRywgImtleWJvYXJkIHNlYXJjaCBjb21wbGV0ZSIpOworfQorCisjaWZkZWYgTkVUTElOS19LT0JKRUNUX1VFVkVOVAorQVNZTkNfQUxBUk1fQ0FMTEJBQ0sob3BlbkxpbnV4SW5wdXREZXZpY2UpIHsKKyAgS2V5Ym9hcmRJbnN0YW5jZU9iamVjdCAqa2lvID0gcGFyYW1ldGVycy0+ZGF0YTsKKworICBhc3luY0Rpc2NhcmRIYW5kbGUoa2lvLT5raXgtPnVkZXZEZWxheSk7CisgIGtpby0+a2l4LT51ZGV2RGVsYXkgPSBOVUxMOworCisgIGlmICghbW9uaXRvcktleWJvYXJkKGtpbykpIGRlc3Ryb3lLZXlib2FyZEluc3RhbmNlT2JqZWN0KGtpbyk7Cit9CisKK3N0YXRpYyBpbnQKK2dldERldmljZU51bWJlcnMgKGNvbnN0IGNoYXIgKmRldmljZSwgaW50ICptYWpvciwgaW50ICptaW5vcikgeworICBpbnQgb2sgPSAwOworICBzdGF0aWMgY29uc3QgY2hhciBwcmVmaXhbXSA9ICIvc3lzIjsKKyAgc3RhdGljIGNvbnN0IGNoYXIgc3VmZml4W10gPSAiL2RldiI7CisgIGNoYXIgcGF0aFtzdHJsZW4ocHJlZml4KSArIHN0cmxlbihkZXZpY2UpICsgc2l6ZW9mKHN1ZmZpeCldOworICBpbnQgZGVzY3JpcHRvcjsKKworICBzbnByaW50ZihwYXRoLCBzaXplb2YocGF0aCksICIlcyVzJXMiLCBwcmVmaXgsIGRldmljZSwgc3VmZml4KTsKKworICBpZiAoKGRlc2NyaXB0b3IgPSBvcGVuKHBhdGgsIE9fUkRPTkxZKSkgIT0gLTEpIHsKKyAgICBjaGFyIGJ1ZmZlclswWDEwXTsKKyAgICBzc2l6ZV90IGxlbmd0aDsKKworICAgIGlmICgobGVuZ3RoID0gcmVhZChkZXNjcmlwdG9yLCBidWZmZXIsIHNpemVvZihidWZmZXIpKSkgPiAwKSB7CisgICAgICBpZiAoc3NjYW5mKGJ1ZmZlciwgIiVkOiVkIiwgbWFqb3IsIG1pbm9yKSA9PSAyKSB7CisgICAgICAgIG9rID0gMTsKKyAgICAgIH0KKyAgICB9CisKKyAgICBjbG9zZShkZXNjcmlwdG9yKTsKKyAgfSBlbHNlIHsKKyAgICBsb2dNZXNzYWdlKExPR19ERUJVRywgImNhbm5vdCBvcGVuIHN5c2ZzIGRldiBmaWxlOiAlczogJXMiLAorICAgICAgICAgICAgICAgcGF0aCwgc3RyZXJyb3IoZXJybm8pKTsKKyAgfQorCisgIHJldHVybiBvazsKK30KKworQVNZTkNfSU5QVVRfQ0FMTEJBQ0soaGFuZGxlS29iamVjdFVldmVudFN0cmluZykgeworICBLZXlib2FyZE1vbml0b3JPYmplY3QgKmttbyA9IHBhcmFtZXRlcnMtPmRhdGE7CisgIHN0YXRpYyBjb25zdCBjaGFyIGxhYmVsW10gPSAia29iamVjdCB1ZXZlbnQiOworCisgIGlmIChwYXJhbWV0ZXJzLT5lcnJvcikgeworICAgIGxvZ01lc3NhZ2UoTE9HX0RFQlVHLCAiJXMgcmVhZCBlcnJvcjogJXMiLCBsYWJlbCwgc3RyZXJyb3IocGFyYW1ldGVycy0+ZXJyb3IpKTsKKyAgfSBlbHNlIGlmIChwYXJhbWV0ZXJzLT5lbmQpIHsKKyAgICBsb2dNZXNzYWdlKExPR19ERUJVRywgIiVzIGVuZC1vZi1maWxlIiwgbGFiZWwpOworICB9IGVsc2UgeworICAgIGNvbnN0IGNoYXIgKnN0cmluZyA9IHBhcmFtZXRlcnMtPmJ1ZmZlcjsKKyAgICBjb25zdCBjaGFyICplbmQgPSBtZW1jaHIoc3RyaW5nLCAwLCBwYXJhbWV0ZXJzLT5sZW5ndGgpOworCisgICAgaWYgKGVuZCkgeworICAgICAgc2l6ZV90IGxlbmd0aCA9IGVuZCAtIHN0cmluZzsKKworICAgICAgc3RhdGljIGNvbnN0IGNoYXIgZGVsaW1pdGVyc1tdID0geydAJywgJz0nLCAnXDAnfTsKKyAgICAgIGNvbnN0IGNoYXIgKmRlbGltaXRlciA9IHN0cnBicmsoc3RyaW5nLCBkZWxpbWl0ZXJzKTsKKworICAgICAgaWYgKCFkZWxpbWl0ZXIpIHsKKyAgICAgICAgY29uc3QgY2hhciAqZGF0YSA9IGVuZCArIDE7CisgICAgICAgIHNpemVfdCBzaXplOworCisgICAgICAgIGlmIChzdHJjbXAoc3RyaW5nLCAibGlidWRldiIpID09IDApIHsKKyAgICAgICAgICBzaXplID0gMzI7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgbG9nTWVzc2FnZShMT0dfV0FSTklORywgInVucmVjb2duaXplZCAlcyBzZWdtZW50OiAlcyIsIGxhYmVsLCBzdHJpbmcpOworICAgICAgICAgIHNpemUgPSAwOworICAgICAgICB9CisKKyAgICAgICAgbGVuZ3RoICs9IHNpemU7CisgICAgICAgIGlmIChwYXJhbWV0ZXJzLT5sZW5ndGggPCBsZW5ndGgpIHJldHVybiAwOworICAgICAgICBsb2dCeXRlcyhMT0dfREVCVUcsICIlcyBkYXRhOiAlcyIsIGRhdGEsIHNpemUsIGxhYmVsLCBzdHJpbmcpOworICAgICAgfSBlbHNlIGlmICgqZGVsaW1pdGVyID09ICdAJykgeworICAgICAgICBjb25zdCBjaGFyICphY3Rpb24gPSBzdHJpbmc7CisgICAgICAgIGNvbnN0IGNoYXIgKmRldmljZSA9IGRlbGltaXRlciArIDE7CisgICAgICAgIGludCBhY3Rpb25MZW5ndGggPSBkZWxpbWl0ZXIgLSBhY3Rpb247CisKKyAgICAgICAgbG9nTWVzc2FnZShMT0dfREVCVUcsICIlcyBhY3Rpb246ICUuKnMgJXMiLCBsYWJlbCwgYWN0aW9uTGVuZ3RoLCBhY3Rpb24sIGRldmljZSk7CisKKyAgICAgICAgaWYgKHN0cm5jbXAoYWN0aW9uLCAiYWRkIiwgYWN0aW9uTGVuZ3RoKSA9PSAwKSB7CisgICAgICAgICAgY29uc3QgY2hhciAqc3VmZml4ID0gZGV2aWNlOworCisgICAgICAgICAgd2hpbGUgKChzdWZmaXggPSBzdHJzdHIoc3VmZml4LCAiL2lucHV0IikpKSB7CisgICAgICAgICAgICBpbnQgaW5wdXQ7CisgICAgICAgICAgICBpbnQgZXZlbnQ7CisKKyAgICAgICAgICAgIGlmIChzc2NhbmYoKytzdWZmaXgsICJpbnB1dCVkL2V2ZW50JWQiLCAmaW5wdXQsICZldmVudCkgPT0gMikgeworICAgICAgICAgICAgICBLZXlib2FyZEluc3RhbmNlT2JqZWN0ICpraW87CisKKyAgICAgICAgICAgICAgaWYgKChraW8gPSBuZXdLZXlib2FyZEluc3RhbmNlT2JqZWN0KGttbykpKSB7CisgICAgICAgICAgICAgICAgaWYgKGdldERldmljZU51bWJlcnMoZGV2aWNlLCAma2lvLT5raXgtPmRldmljZS5tYWpvciwgJmtpby0+a2l4LT5kZXZpY2UubWlub3IpKSB7CisgICAgICAgICAgICAgICAgICBjaGFyIHBhdGhbMFg0MF07CisKKyAgICAgICAgICAgICAgICAgIHNucHJpbnRmKHBhdGgsIHNpemVvZihwYXRoKSwgIi9kZXYvaW5wdXQvZXZlbnQlZCIsIGV2ZW50KTsKKworICAgICAgICAgICAgICAgICAgaWYgKChraW8tPmtpeC0+ZGV2aWNlLnBhdGggPSBzdHJkdXAocGF0aCkpKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChhc3luY05ld1JlbGF0aXZlQWxhcm0oJmtpby0+a2l4LT51ZGV2RGVsYXksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTElOVVhfSU5QVVRfREVWSUNFX09QRU5fREVMQVksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3BlbkxpbnV4SW5wdXREZXZpY2UsIGtpbykpIHsKKyAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgbG9nTWFsbG9jRXJyb3IoKTsKKyAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBkZXN0cm95S2V5Ym9hcmRJbnN0YW5jZU9iamVjdChraW8pOworICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICB9IGVsc2UgaWYgKCpkZWxpbWl0ZXIgPT0gJz0nKSB7CisgICAgICAgIGNvbnN0IGNoYXIgKm5hbWUgPSBzdHJpbmc7CisgICAgICAgIGNvbnN0IGNoYXIgKnZhbHVlID0gZGVsaW1pdGVyICsgMTsKKyAgICAgICAgaW50IG5hbWVMZW5ndGggPSBkZWxpbWl0ZXIgLSBuYW1lOworCisgICAgICAgIGxvZ01lc3NhZ2UoTE9HX0RFQlVHLCAiJXMgcHJvcGVydHk6ICUuKnMgJXMiLCBsYWJlbCwgbmFtZUxlbmd0aCwgbmFtZSwgdmFsdWUpOworICAgICAgfQorCisgICAgICByZXR1cm4gbGVuZ3RoICsgMTsKKyAgICB9CisgIH0KKworICByZXR1cm4gMDsKK30KKworc3RhdGljIGludAorZ2V0S29iamVjdFVldmVudFNvY2tldCAodm9pZCkgeworICBzdGF0aWMgaW50IHNvY2tldERlc2NyaXB0b3IgPSAtMTsKKworICBpZiAoc29ja2V0RGVzY3JpcHRvciA9PSAtMSkgeworICAgIGNvbnN0IHN0cnVjdCBzb2NrYWRkcl9ubCBzb2NrZXRBZGRyZXNzID0geworICAgICAgLm5sX2ZhbWlseSA9IEFGX05FVExJTkssCisgICAgICAubmxfcGlkID0gZ2V0cGlkKCksCisgICAgICAubmxfZ3JvdXBzID0gMFhGRkZGRkZGRgorICAgIH07CisKKyAgICBpZiAoKHNvY2tldERlc2NyaXB0b3IgPSBzb2NrZXQoUEZfTkVUTElOSywgU09DS19ER1JBTSwgTkVUTElOS19LT0JKRUNUX1VFVkVOVCkpICE9IC0xKSB7CisgICAgICBpZiAoYmluZChzb2NrZXREZXNjcmlwdG9yLCAoY29uc3Qgc3RydWN0IHNvY2thZGRyICopJnNvY2tldEFkZHJlc3MsIHNpemVvZihzb2NrZXRBZGRyZXNzKSkgIT0gLTEpIHsKKyAgICAgICAgbG9nTWVzc2FnZShMT0dfREVCVUcsCisgICAgICAgICAgIm5ldGxpbmsga29iamVjdCB1ZXZlbnQgc29ja2V0IG9wZW5lZDogZmQ9JWQiLCBzb2NrZXREZXNjcmlwdG9yCisgICAgICAgICk7CisgICAgICB9IGVsc2UgeworICAgICAgICBsb2dTeXN0ZW1FcnJvcigibmV0bGluayBrb2JqZWN0IHVldmVudCBzb2NrZXQgYmluZCIpOworICAgICAgICBjbG9zZShzb2NrZXREZXNjcmlwdG9yKTsKKyAgICAgICAgc29ja2V0RGVzY3JpcHRvciA9IC0xOworICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICBsb2dTeXN0ZW1FcnJvcigibmV0bGluayBrb2JqZWN0IHVldmVudCBzb2NrZXQgY3JlYXRpb24iKTsKKyAgICB9CisgIH0KKworICByZXR1cm4gc29ja2V0RGVzY3JpcHRvcjsKK30KKyNlbmRpZiAvKiBORVRMSU5LX0tPQkpFQ1RfVUVWRU5UICovCisKK3N0YXRpYyBpbnQKK21vbml0b3JOZXdLZXlib2FyZHMgKEtleWJvYXJkTW9uaXRvck9iamVjdCAqa21vKSB7CisjaWZkZWYgTkVUTElOS19LT0JKRUNUX1VFVkVOVAorICBpZiAoKGttby0+a214LT51ZXZlbnQuc29ja2V0ID0gZ2V0S29iamVjdFVldmVudFNvY2tldCgpKSAhPSAtMSkgeworICAgIGlmIChhc3luY1JlYWRTb2NrZXQoJmttby0+a214LT51ZXZlbnQubW9uaXRvciwKKyAgICAgICAgICAgICAgICAgICAgICAgIGttby0+a214LT51ZXZlbnQuc29ja2V0LCA2KzErUEFUSF9NQVgrMSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZUtvYmplY3RVZXZlbnRTdHJpbmcsIGttbykpIHsKKyAgICAgIHJldHVybiAxOworICAgIH0KKworICAgIGNsb3NlKGttby0+a214LT51ZXZlbnQuc29ja2V0KTsKKyAgICBrbW8tPmtteC0+dWV2ZW50LnNvY2tldCA9IC0xOworICB9CisjZW5kaWYgLyogTkVUTElOS19LT0JKRUNUX1VFVkVOVCAqLworCisgIHJldHVybiAwOworfQorI2VuZGlmIC8qIEhBVkVfTElOVVhfVUlOUFVUX0ggKi8KKworaW50Cittb25pdG9yS2V5Ym9hcmRzIChLZXlib2FyZE1vbml0b3JPYmplY3QgKmttbykgeworI2lmZGVmIEhBVkVfTElOVVhfVUlOUFVUX0gKKyAgbW9uaXRvckN1cnJlbnRLZXlib2FyZHMoa21vKTsKKyAgbW9uaXRvck5ld0tleWJvYXJkcyhrbW8pOworI2VuZGlmIC8qIEhBVkVfTElOVVhfVUlOUFVUX0ggKi8KKworICByZXR1cm4gMTsKK30KZGlmZiAtLWdpdCBhL1Byb2dyYW1zL2tiZF9ub25lLmMgYi9Qcm9ncmFtcy9rYmRfbm9uZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNmYWYyZDUKLS0tIC9kZXYvbnVsbAorKysgYi9Qcm9ncmFtcy9rYmRfbm9uZS5jCkBAIC0wLDAgKzEsNTQgQEAKKy8qCisgKiBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorICogICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorICoKKyAqIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorICoKKyAqIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyAqLworCisjaW5jbHVkZSAicHJvbG9ndWUuaCIKKworI2luY2x1ZGUgImtiZC5oIgorI2luY2x1ZGUgImtiZF9pbnRlcm5hbC5oIgorCitCRUdJTl9LRVlfQ09ERV9NQVAKKyAgWzBdID0gS0JEX0tFWV9VTk1BUFBFRAorRU5EX0tFWV9DT0RFX01BUAorCitpbnQKK25ld0tleWJvYXJkTW9uaXRvckV4dGVuc2lvbiAoS2V5Ym9hcmRNb25pdG9yRXh0ZW5zaW9uICoqa214KSB7CisgIHJldHVybiAxOworfQorCit2b2lkCitkZXN0cm95S2V5Ym9hcmRNb25pdG9yRXh0ZW5zaW9uIChLZXlib2FyZE1vbml0b3JFeHRlbnNpb24gKmtteCkgeworfQorCitpbnQKK25ld0tleWJvYXJkSW5zdGFuY2VFeHRlbnNpb24gKEtleWJvYXJkSW5zdGFuY2VFeHRlbnNpb24gKipraXgpIHsKKyAgcmV0dXJuIDE7Cit9CisKK3ZvaWQKK2Rlc3Ryb3lLZXlib2FyZEluc3RhbmNlRXh0ZW5zaW9uIChLZXlib2FyZEluc3RhbmNlRXh0ZW5zaW9uICpraXgpIHsKK30KKworaW50Citmb3J3YXJkS2V5RXZlbnQgKEtleWJvYXJkSW5zdGFuY2VPYmplY3QgKmtpbywgaW50IGNvZGUsIGludCBwcmVzcykgeworICByZXR1cm4gMDsKK30KKworaW50Cittb25pdG9yS2V5Ym9hcmRzIChLZXlib2FyZE1vbml0b3JPYmplY3QgKmttbykgeworICByZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL1Byb2dyYW1zL2t0Yl9hdWRpdC5jIGIvUHJvZ3JhbXMva3RiX2F1ZGl0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWEwYTAxMAotLS0gL2Rldi9udWxsCisrKyBiL1Byb2dyYW1zL2t0Yl9hdWRpdC5jCkBAIC0wLDAgKzEsMTkyIEBACisvKgorICogQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyAqICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyAqCisgKiBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorICoKKyAqIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyAqCisgKiBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisgKi8KKworI2luY2x1ZGUgInByb2xvZ3VlLmgiCisKKyNpbmNsdWRlIDxzdGRpby5oPgorCisjaW5jbHVkZSAibG9nLmgiCisjaW5jbHVkZSAic3RyZm10LmgiCisjaW5jbHVkZSAia3RiLmgiCisjaW5jbHVkZSAia3RiX2ludGVybmFsLmgiCisjaW5jbHVkZSAia3RiX2luc3BlY3QuaCIKKwordHlwZWRlZiBzdHJ1Y3QgeworICBLZXlUYWJsZSAqdGFibGU7CisgIGNvbnN0IEtleUNvbnRleHQgKmN0eDsKKyAgY29uc3QgY2hhciAqcGF0aDsKK30gS2V5VGFibGVBdWRpdG9yUGFyYW1ldGVyczsKKworI2RlZmluZSBLRVlfVEFCTEVfQVVESVRPUihuYW1lKSBpbnQgbmFtZSAoY29uc3QgS2V5VGFibGVBdWRpdG9yUGFyYW1ldGVycyAqa3RhKQordHlwZWRlZiBLRVlfVEFCTEVfQVVESVRPUihLZXlUYWJsZUF1ZGl0b3IpOworCitzdGF0aWMgdm9pZAorcmVwb3J0S2V5VGFibGVBdWRpdCAoY29uc3QgY2hhciAqYXVkaXQpIHsKKyAgbG9nTWVzc2FnZShMT0dfV0FSTklORywgIiVzIiwgYXVkaXQpOworfQorCitzdGF0aWMKK1NUUl9CRUdJTl9GT1JNQVRURVIoCisgIGZvcm1hdEtleVRhYmxlQXVkaXRQcmVmaXgsCisgIGNvbnN0IEtleVRhYmxlQXVkaXRvclBhcmFtZXRlcnMgKmt0YSwKKyAgY29uc3QgY2hhciAqcHJvYmxlbQorKQorICBpZiAoa3RhLT5wYXRoKSBTVFJfUFJJTlRGKCIlczogIiwga3RhLT5wYXRoKTsKKyAgU1RSX1BSSU5URigiJXMiLCBwcm9ibGVtKTsKKyAgaWYgKGt0YS0+Y3R4KSBTVFJfUFJJTlRGKCI6ICUiIFBSSXdzLCBrdGEtPmN0eC0+bmFtZSk7CitTVFJfRU5EX0ZPUk1BVFRFUgorCitzdGF0aWMgS0VZX1RBQkxFX0FVRElUT1IocmVwb3J0S2V5Q29udGV4dFByb2JsZW1zKSB7CisgIGludCBvayA9IDE7CisKKyAgaWYgKGt0YS0+Y3R4LT5uYW1lICYmICFrdGEtPmN0eC0+aXNTcGVjaWFsKSB7CisgICAgY29uc3QgY2hhciAqcHJvYmxlbSA9IE5VTEw7CisKKyAgICBpZiAoIWt0YS0+Y3R4LT5pc0RlZmluZWQpIHsKKyAgICAgIHByb2JsZW0gPSAidW5kZWZpbmVkIGNvbnRleHQiOworICAgIH0gZWxzZSBpZiAoIWt0YS0+Y3R4LT5pc1JlZmVyZW5jZWQpIHsKKyAgICAgIHByb2JsZW0gPSAidW5yZWZlcmVuY2VkIGNvbnRleHQiOworICAgIH0gZWxzZSBpZiAoIShrdGEtPmN0eC0+a2V5QmluZGluZ3MuY291bnQgfHwKKyAgICAgICAgICAgICAgICAga3RhLT5jdHgtPm1hcHBlZEtleXMuY291bnQgfHwKKyAgICAgICAgICAgICAgICAga3RhLT5jdHgtPm1hcHBlZEtleXMuc3VwZXJpbXBvc2UgfHwKKyAgICAgICAgICAgICAgICAga3RhLT5jdHgtPmhvdGtleXMuY291bnQpKSB7CisgICAgICBwcm9ibGVtID0gImVtcHR5IGNvbnRleHQiOworICAgIH0KKworICAgIGlmIChwcm9ibGVtKSB7CisgICAgICBvayA9IDA7CisKKyAgICAgIGNoYXIgYXVkaXRbMFgxMDBdOworICAgICAgU1RSX0JFR0lOKGF1ZGl0LCBzaXplb2YoYXVkaXQpKTsKKworICAgICAgU1RSX0ZPUk1BVChmb3JtYXRLZXlUYWJsZUF1ZGl0UHJlZml4LCBrdGEsIHByb2JsZW0pOworCisgICAgICBTVFJfRU5EOworICAgICAgcmVwb3J0S2V5VGFibGVBdWRpdChhdWRpdCk7CisgICAgfQorICB9CisKKyAgcmV0dXJuIG9rOworfQorCitzdGF0aWMgS0VZX1RBQkxFX0FVRElUT1IocmVwb3J0RHVwbGljYXRlS2V5QmluZGluZ3MpIHsKKyAgaW50IG9rID0gMTsKKyAgY29uc3QgS2V5QmluZGluZyAqYmluZGluZyA9IGt0YS0+Y3R4LT5rZXlCaW5kaW5ncy50YWJsZTsKKyAgY29uc3QgS2V5QmluZGluZyAqZW5kID0gYmluZGluZyArIGt0YS0+Y3R4LT5rZXlCaW5kaW5ncy5jb3VudDsKKworICB3aGlsZSAoYmluZGluZyA8IGVuZCkgeworICAgIGlmIChiaW5kaW5nLT5mbGFncyAmIEtCRl9EVVBMSUNBVEUpIHsKKyAgICAgIG9rID0gMDsKKworICAgICAgY2hhciBhdWRpdFswWDEwMF07CisgICAgICBTVFJfQkVHSU4oYXVkaXQsIHNpemVvZihhdWRpdCkpOworCisgICAgICBTVFJfRk9STUFUKGZvcm1hdEtleVRhYmxlQXVkaXRQcmVmaXgsIGt0YSwgImR1cGxpY2F0ZSBrZXkgYmluZGluZyIpOworICAgICAgU1RSX1BSSU5URigiOiAiKTsKKyAgICAgIFNUUl9GT1JNQVQoZm9ybWF0S2V5Q29tYmluYXRpb24sIGt0YS0+dGFibGUsICZiaW5kaW5nLT5rZXlDb21iaW5hdGlvbik7CisKKyAgICAgIFNUUl9FTkQ7CisgICAgICByZXBvcnRLZXlUYWJsZUF1ZGl0KGF1ZGl0KTsKKyAgICB9CisKKyAgICBiaW5kaW5nICs9IDE7CisgIH0KKworICByZXR1cm4gb2s7Cit9CisKK3N0YXRpYyB2b2lkCityZXBvcnRLZXlQcm9ibGVtIChjb25zdCBLZXlUYWJsZUF1ZGl0b3JQYXJhbWV0ZXJzICprdGEsIGNvbnN0IEtleVZhbHVlICprZXksIGNvbnN0IGNoYXIgKnByb2JsZW0pIHsKKyAgY2hhciBhdWRpdFswWDEwMF07CisgIFNUUl9CRUdJTihhdWRpdCwgc2l6ZW9mKGF1ZGl0KSk7CisKKyAgU1RSX0ZPUk1BVChmb3JtYXRLZXlUYWJsZUF1ZGl0UHJlZml4LCBrdGEsIHByb2JsZW0pOworICBTVFJfUFJJTlRGKCI6ICIpOworICBTVFJfRk9STUFUKGZvcm1hdEtleU5hbWUsIGt0YS0+dGFibGUsIGtleSk7CisKKyAgU1RSX0VORDsKKyAgcmVwb3J0S2V5VGFibGVBdWRpdChhdWRpdCk7Cit9CisKK3N0YXRpYyBLRVlfVEFCTEVfQVVESVRPUihyZXBvcnREdXBsaWNhdGVIb3RrZXlzKSB7CisgIGludCBvayA9IDE7CisgIGNvbnN0IEhvdGtleUVudHJ5ICpob3RrZXkgPSBrdGEtPmN0eC0+aG90a2V5cy50YWJsZTsKKyAgY29uc3QgSG90a2V5RW50cnkgKmVuZCA9IGhvdGtleSArIGt0YS0+Y3R4LT5ob3RrZXlzLmNvdW50OworCisgIHdoaWxlIChob3RrZXkgPCBlbmQpIHsKKyAgICBpZiAoaG90a2V5LT5mbGFncyAmIEhLRl9EVVBMSUNBVEUpIHsKKyAgICAgIG9rID0gMDsKKyAgICAgIHJlcG9ydEtleVByb2JsZW0oa3RhLCAmaG90a2V5LT5rZXlWYWx1ZSwgImR1cGxpY2F0ZSBob3RrZXkiKTsKKyAgICB9CisKKyAgICBob3RrZXkgKz0gMTsKKyAgfQorCisgIHJldHVybiBvazsKK30KKworc3RhdGljIEtFWV9UQUJMRV9BVURJVE9SKHJlcG9ydER1cGxpY2F0ZU1hcHBlZEtleXMpIHsKKyAgaW50IG9rID0gMTsKKyAgY29uc3QgTWFwcGVkS2V5RW50cnkgKm1hcCA9IGt0YS0+Y3R4LT5tYXBwZWRLZXlzLnRhYmxlOworICBjb25zdCBNYXBwZWRLZXlFbnRyeSAqZW5kID0gbWFwICsga3RhLT5jdHgtPm1hcHBlZEtleXMuY291bnQ7CisKKyAgd2hpbGUgKG1hcCA8IGVuZCkgeworICAgIGlmIChtYXAtPmZsYWdzICYgTUtGX0RVUExJQ0FURSkgeworICAgICAgb2sgPSAwOworICAgICAgcmVwb3J0S2V5UHJvYmxlbShrdGEsICZtYXAtPmtleVZhbHVlLCAiZHVwbGljYXRlIG1hcHBlZCBrZXkiKTsKKyAgICB9CisKKyAgICBtYXAgKz0gMTsKKyAgfQorCisgIHJldHVybiBvazsKK30KKworaW50CithdWRpdEtleVRhYmxlIChLZXlUYWJsZSAqdGFibGUsIGNvbnN0IGNoYXIgKnBhdGgpIHsKKyAgaW50IG9rID0gMTsKKworICBmb3IgKHVuc2lnbmVkIGludCBjb250ZXh0PTA7IGNvbnRleHQ8dGFibGUtPmtleUNvbnRleHRzLmNvdW50OyBjb250ZXh0Kz0xKSB7CisgICAgY29uc3QgS2V5Q29udGV4dCAqY3R4ID0gZ2V0S2V5Q29udGV4dCh0YWJsZSwgY29udGV4dCk7CisKKyAgICBpZiAoY3R4KSB7CisgICAgICBzdGF0aWMgS2V5VGFibGVBdWRpdG9yICpjb25zdCBhdWRpdG9yc1tdID0geworICAgICAgICByZXBvcnRLZXlDb250ZXh0UHJvYmxlbXMsCisgICAgICAgIHJlcG9ydER1cGxpY2F0ZUtleUJpbmRpbmdzLAorICAgICAgICByZXBvcnREdXBsaWNhdGVIb3RrZXlzLAorICAgICAgICByZXBvcnREdXBsaWNhdGVNYXBwZWRLZXlzLAorICAgICAgICBOVUxMCisgICAgICB9OworCisgICAgICBjb25zdCBLZXlUYWJsZUF1ZGl0b3JQYXJhbWV0ZXJzIGt0YSA9IHsKKyAgICAgICAgLnRhYmxlID0gdGFibGUsCisgICAgICAgIC5jdHggPSBjdHgsCisgICAgICAgIC5wYXRoID0gcGF0aAorICAgICAgfTsKKworICAgICAgZm9yICgKKyAgICAgICAgS2V5VGFibGVBdWRpdG9yICpjb25zdCAqYXVkaXRvcj1hdWRpdG9yczsKKyAgICAgICAgKmF1ZGl0b3IhPU5VTEw7IGF1ZGl0b3IrPTEKKyAgICAgICkgeworICAgICAgICBpZiAoISgqYXVkaXRvcikoJmt0YSkpIG9rID0gMDsKKyAgICAgIH0KKyAgICB9CisgIH0KKworICByZXR1cm4gb2s7Cit9CmRpZmYgLS1naXQgYS9Qcm9ncmFtcy9rdGJfY21kcy5jIGIvUHJvZ3JhbXMva3RiX2NtZHMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YmNlMjRjCi0tLSAvZGV2L251bGwKKysrIGIvUHJvZ3JhbXMva3RiX2NtZHMuYwpAQCAtMCwwICsxLDM0MSBAQAorLyoKKyAqIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisgKiAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisgKgorICogQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKKyNpbmNsdWRlICJwcm9sb2d1ZS5oIgorCisjaW5jbHVkZSAia3RiX2NtZHMuaCIKKyNpbmNsdWRlICJicmxfY21kcy5oIgorCitzdGF0aWMgY29uc3QgQ29tbWFuZExpc3RFbnRyeSBjb21tYW5kTGlzdF9tb2Rlc1tdID0geworICB7IC5jb2RlID0gQlJMX0NNRF9IRUxQIH0sCisgIHsgLmNvZGUgPSBCUkxfQ01EX0xFQVJOIH0sCisgIHsgLmNvZGUgPSBCUkxfQ01EX1BSRUZNRU5VIH0sCisgIHsgLmNvZGUgPSBCUkxfQ01EX0lORk8gfSwKKyAgeyAuY29kZSA9IEJSTF9DTURfRElTUE1EIH0sCisgIHsgLmNvZGUgPSBCUkxfQ01EX0ZSRUVaRSB9LAorICB7IC5jb2RlID0gQlJMX0NNRF9CTEsoREVTQ0NIQVIpIH0sCisgIHsgLmNvZGUgPSBCUkxfQ01EX1RJTUUgfSwKKyAgeyAuY29kZSA9IEJSTF9DTURfSU5ESUNBVE9SUyB9LAorICB7IC5jb2RlID0gQlJMX0NNRF9CTEsoQ09OVEVYVCkgfSwKK307CisKK3N0YXRpYyBjb25zdCBDb21tYW5kTGlzdEVudHJ5IGNvbW1hbmRMaXN0X2N1cnNvcltdID0geworICB7IC5jb2RlID0gQlJMX0NNRF9IT01FIH0sCisgIHsgLmNvZGUgPSBCUkxfQ01EX0JBQ0sgfSwKKyAgeyAuY29kZSA9IEJSTF9DTURfUkVUVVJOIH0sCisgIHsgLmNvZGUgPSBCUkxfQ01EX0JMSyhST1VURSkgfSwKKyAgeyAuY29kZSA9IEJSTF9DTURfQkxLKFJPVVRFX0xJTkUpIH0sCisgIHsgLmNvZGUgPSBCUkxfQ01EX0NTUkpNUF9WRVJUIH0sCisgIHsgLmNvZGUgPSBCUkxfQ01EX1JPVVRFX0NVUlJfTE9DTiB9LAorfTsKKworc3RhdGljIGNvbnN0IENvbW1hbmRMaXN0RW50cnkgY29tbWFuZExpc3RfdmVydGljYWxbXSA9IHsKKyAgeyAuY29kZSA9IEJSTF9DTURfTE5VUCB9LAorICB7IC5jb2RlID0gQlJMX0NNRF9MTkROIH0sCisgIHsgLmNvZGUgPSBCUkxfQ01EX1RPUCB9LAorICB7IC5jb2RlID0gQlJMX0NNRF9CT1QgfSwKKyAgeyAuY29kZSA9IEJSTF9DTURfVE9QX0xFRlQgfSwKKyAgeyAuY29kZSA9IEJSTF9DTURfQk9UX0xFRlQgfSwKKyAgeyAuY29kZSA9IEJSTF9DTURfUFJESUZMTiB9LAorICB7IC5jb2RlID0gQlJMX0NNRF9OWERJRkxOIH0sCisgIHsgLmNvZGUgPSBCUkxfQ01EX0FUVFJVUCB9LAorICB7IC5jb2RlID0gQlJMX0NNRF9BVFRSRE4gfSwKKyAgeyAuY29kZSA9IEJSTF9DTURfUFJQR1JQSCB9LAorICB7IC5jb2RlID0gQlJMX0NNRF9OWFBHUlBIIH0sCisgIHsgLmNvZGUgPSBCUkxfQ01EX1BSUFJPTVBUIH0sCisgIHsgLmNvZGUgPSBCUkxfQ01EX05YUFJPTVBUIH0sCisgIHsgLmNvZGUgPSBCUkxfQ01EX1dJTlVQIH0sCisgIHsgLmNvZGUgPSBCUkxfQ01EX1dJTkROIH0sCisgIHsgLmNvZGUgPSBCUkxfQ01EX0JMSyhQUklOREVOVCkgfSwKKyAgeyAuY29kZSA9IEJSTF9DTURfQkxLKE5YSU5ERU5UKSB9LAorICB7IC5jb2RlID0gQlJMX0NNRF9CTEsoUFJESUZDSEFSKSB9LAorICB7IC5jb2RlID0gQlJMX0NNRF9CTEsoTlhESUZDSEFSKSB9LAorICB7IC5jb2RlID0gQlJMX0NNRF9CTEsoR09UT0xJTkUpIH0sCit9OworCitzdGF0aWMgY29uc3QgQ29tbWFuZExpc3RFbnRyeSBjb21tYW5kTGlzdF9ob3Jpem9udGFsW10gPSB7CisgIHsgLmNvZGUgPSBCUkxfQ01EX0ZXSU5MVCB9LAorICB7IC5jb2RlID0gQlJMX0NNRF9GV0lOUlQgfSwKKyAgeyAuY29kZSA9IEJSTF9DTURfRldJTkxUU0tJUCB9LAorICB7IC5jb2RlID0gQlJMX0NNRF9GV0lOUlRTS0lQIH0sCisgIHsgLmNvZGUgPSBCUkxfQ01EX1BSTkJXSU59LAorICB7IC5jb2RlID0gQlJMX0NNRF9OWE5CV0lOfSwKKyAgeyAuY29kZSA9IEJSTF9DTURfTE5CRUcgfSwKKyAgeyAuY29kZSA9IEJSTF9DTURfTE5FTkQgfSwKKyAgeyAuY29kZSA9IEJSTF9DTURfQ0hSTFQgfSwKKyAgeyAuY29kZSA9IEJSTF9DTURfQ0hSUlQgfSwKKyAgeyAuY29kZSA9IEJSTF9DTURfSFdJTkxUIH0sCisgIHsgLmNvZGUgPSBCUkxfQ01EX0hXSU5SVCB9LAorICB7IC5jb2RlID0gQlJMX0NNRF9CTEsoU0VUTEVGVCkgfSwKK307CisKK3N0YXRpYyBjb25zdCBDb21tYW5kTGlzdEVudHJ5IGNvbW1hbmRMaXN0X3dpbmRvd1tdID0geworICB7IC5jb2RlID0gQlJMX0NNRF9HVUlfVElUTEUgfSwKKyAgeyAuY29kZSA9IEJSTF9DTURfR1VJX0JSTF9BQ1RJT05TIH0sCisgIHsgLmNvZGUgPSBCUkxfQ01EX0dVSV9IT01FIH0sCisgIHsgLmNvZGUgPSBCUkxfQ01EX0dVSV9CQUNLIH0sCisgIHsgLmNvZGUgPSBCUkxfQ01EX0dVSV9ERVZfU0VUVElOR1MgfSwKKyAgeyAuY29kZSA9IEJSTF9DTURfR1VJX0RFVl9PUFRJT05TIH0sCisgIHsgLmNvZGUgPSBCUkxfQ01EX0dVSV9BUFBfTElTVCB9LAorICB7IC5jb2RlID0gQlJMX0NNRF9HVUlfQVBQX01FTlUgfSwKKyAgeyAuY29kZSA9IEJSTF9DTURfR1VJX0FQUF9BTEVSVFMgfSwKKyAgeyAuY29kZSA9IEJSTF9DTURfR1VJX0FSRUFfQUNUViB9LAorICB7IC5jb2RlID0gQlJMX0NNRF9HVUlfQVJFQV9QUkVWIH0sCisgIHsgLmNvZGUgPSBCUkxfQ01EX0dVSV9BUkVBX05FWFQgfSwKKyAgeyAuY29kZSA9IEJSTF9DTURfR1VJX0lURU1fRlJTVCB9LAorICB7IC5jb2RlID0gQlJMX0NNRF9HVUlfSVRFTV9QUkVWIH0sCisgIHsgLmNvZGUgPSBCUkxfQ01EX0dVSV9JVEVNX05FWFQgfSwKKyAgeyAuY29kZSA9IEJSTF9DTURfR1VJX0lURU1fTEFTVCB9LAorfTsKKworc3RhdGljIGNvbnN0IENvbW1hbmRMaXN0RW50cnkgY29tbWFuZExpc3RfY2xpcGJvYXJkW10gPSB7CisgIHsgLmNvZGUgPSBCUkxfQ01EX0JMSyhDTElQX05FVykgfSwKKyAgeyAuY29kZSA9IEJSTF9DTURfQkxLKENMSVBfQUREKSB9LAorICB7IC5jb2RlID0gQlJMX0NNRF9CTEsoQ09QWV9MSU5FKSB9LAorICB7IC5jb2RlID0gQlJMX0NNRF9CTEsoQ09QWV9SRUNUKSB9LAorICB7IC5jb2RlID0gQlJMX0NNRF9CTEsoQ0xJUF9DT1BZKSB9LAorICB7IC5jb2RlID0gQlJMX0NNRF9CTEsoQ0xJUF9BUFBFTkQpIH0sCisgIHsgLmNvZGUgPSBCUkxfQ01EX1BBU1RFIH0sCisgIHsgLmNvZGUgPSBCUkxfQ01EX0JMSyhQQVNURV9ISVNUT1JZKSB9LAorICB7IC5jb2RlID0gQlJMX0NNRF9QUlNFQVJDSCB9LAorICB7IC5jb2RlID0gQlJMX0NNRF9OWFNFQVJDSCB9LAorICB7IC5jb2RlID0gQlJMX0NNRF9DTElQX1NBVkUgfSwKKyAgeyAuY29kZSA9IEJSTF9DTURfQ0xJUF9SRVNUT1JFIH0sCit9OworCitzdGF0aWMgY29uc3QgQ29tbWFuZExpc3RFbnRyeSBjb21tYW5kTGlzdF90ZXh0W10gPSB7CisgIHsgLmNvZGUgPSBCUkxfQ01EX1RYVFNFTF9DTEVBUiB9LAorICB7IC5jb2RlID0gQlJMX0NNRF9CTEsoVFhUU0VMX1NFVCkgfSwKKyAgeyAuY29kZSA9IEJSTF9DTURfQkxLKFRYVFNFTF9TVEFSVCkgfSwKKyAgeyAuY29kZSA9IEJSTF9DTURfVFhUU0VMX0FMTCB9LAorICB7IC5jb2RlID0gQlJMX0NNRF9IT1NUX0NPUFkgfSwKKyAgeyAuY29kZSA9IEJSTF9DTURfSE9TVF9DVVQgfSwKKyAgeyAuY29kZSA9IEJSTF9DTURfSE9TVF9QQVNURSB9LAorfTsKKworc3RhdGljIGNvbnN0IENvbW1hbmRMaXN0RW50cnkgY29tbWFuZExpc3RfZmVhdHVyZVtdID0geworICB7IC5jb2RlID0gQlJMX0NNRF9UT1VDSF9OQVYgfSwKKyAgeyAuY29kZSA9IEJSTF9DTURfQVVUT1JFUEVBVCB9LAorICB7IC5jb2RlID0gQlJMX0NNRF9TSVhET1RTIH0sCisgIHsgLmNvZGUgPSBCUkxfQ01EX0NPTlRSQUNURUQgfSwKKyAgeyAuY29kZSA9IEJSTF9DTURfQ09NUEJSTDYgfSwKKyAgeyAuY29kZSA9IEJSTF9DTURfU0tQSURMTlMgfSwKKyAgeyAuY29kZSA9IEJSTF9DTURfU0tQQkxOS1dJTlMgfSwKKyAgeyAuY29kZSA9IEJSTF9DTURfU0xJREVXSU4gfSwKKyAgeyAuY29kZSA9IEJSTF9DTURfQ1NSVFJLIH0sCisgIHsgLmNvZGUgPSBCUkxfQ01EX0NTUlNJWkUgfSwKKyAgeyAuY29kZSA9IEJSTF9DTURfQ1NSVklTIH0sCisgIHsgLmNvZGUgPSBCUkxfQ01EX0NTUkhJREUgfSwKKyAgeyAuY29kZSA9IEJSTF9DTURfQ1NSQkxJTksgfSwKKyAgeyAuY29kZSA9IEJSTF9DTURfQVRUUlZJUyB9LAorICB7IC5jb2RlID0gQlJMX0NNRF9BVFRSQkxJTksgfSwKKyAgeyAuY29kZSA9IEJSTF9DTURfQ0FQQkxJTksgfSwKKyAgeyAuY29kZSA9IEJSTF9DTURfVFVORVMgfSwKKyAgeyAuY29kZSA9IEJSTF9DTURfQkxLKFNFVF9URVhUX1RBQkxFKSB9LAorICB7IC5jb2RlID0gQlJMX0NNRF9CTEsoU0VUX0FUVFJJQlVURVNfVEFCTEUpIH0sCisgIHsgLmNvZGUgPSBCUkxfQ01EX0JMSyhTRVRfQ09OVFJBQ1RJT05fVEFCTEUpIH0sCisgIHsgLmNvZGUgPSBCUkxfQ01EX0JMSyhTRVRfS0VZQk9BUkRfVEFCTEUpIH0sCisgIHsgLmNvZGUgPSBCUkxfQ01EX0JMSyhTRVRfTEFOR1VBR0VfUFJPRklMRSkgfSwKK307CisKK3N0YXRpYyBjb25zdCBDb21tYW5kTGlzdEVudHJ5IGNvbW1hbmRMaXN0X21lbnVbXSA9IHsKKyAgeyAuY29kZSA9IEJSTF9DTURfTUVOVV9QUkVWX0lURU0gfSwKKyAgeyAuY29kZSA9IEJSTF9DTURfTUVOVV9ORVhUX0lURU0gfSwKKyAgeyAuY29kZSA9IEJSTF9DTURfTUVOVV9GSVJTVF9JVEVNIH0sCisgIHsgLmNvZGUgPSBCUkxfQ01EX01FTlVfTEFTVF9JVEVNIH0sCisgIHsgLmNvZGUgPSBCUkxfQ01EX01FTlVfUFJFVl9TRVRUSU5HIH0sCisgIHsgLmNvZGUgPSBCUkxfQ01EX01FTlVfTkVYVF9TRVRUSU5HIH0sCisgIHsgLmNvZGUgPSBCUkxfQ01EX01FTlVfUFJFVl9MRVZFTCB9LAorICB7IC5jb2RlID0gQlJMX0NNRF9QUkVGU0FWRSB9LAorICB7IC5jb2RlID0gQlJMX0NNRF9QUkVGTE9BRCB9LAorICB7IC5jb2RlID0gQlJMX0NNRF9QUkVGUkVTRVQgfSwKK307CisKK3N0YXRpYyBjb25zdCBDb21tYW5kTGlzdEVudHJ5IGNvbW1hbmRMaXN0X3NheVtdID0geworICB7IC5jb2RlID0gQlJMX0NNRF9NVVRFIH0sCisgIHsgLmNvZGUgPSBCUkxfQ01EX1NBWV9MSU5FIH0sCisgIHsgLmNvZGUgPSBCUkxfQ01EX1NBWV9BTEwgfSwKKyAgeyAuY29kZSA9IEJSTF9DTURfU0FZX0FCT1ZFIH0sCisgIHsgLmNvZGUgPSBCUkxfQ01EX1NBWV9CRUxPVyB9LAorICB7IC5jb2RlID0gQlJMX0NNRF9TUEtIT01FIH0sCisgIHsgLmNvZGUgPSBCUkxfQ01EX1NBWV9TT0ZURVIgfSwKKyAgeyAuY29kZSA9IEJSTF9DTURfU0FZX0xPVURFUiB9LAorICB7IC5jb2RlID0gQlJMX0NNRF9TQVlfU0xPV0VSIH0sCisgIHsgLmNvZGUgPSBCUkxfQ01EX1NBWV9GQVNURVIgfSwKKyAgeyAuY29kZSA9IEJSTF9DTURfU0FZX0xPV0VSIH0sCisgIHsgLmNvZGUgPSBCUkxfQ01EX1NBWV9ISUdIRVIgfSwKKyAgeyAuY29kZSA9IEJSTF9DTURfQVVUT1NQRUFLIH0sCisgIHsgLmNvZGUgPSBCUkxfQ01EX0FTUEtfU0VMX0xJTkUgfSwKKyAgeyAuY29kZSA9IEJSTF9DTURfQVNQS19TRUxfQ0hBUiB9LAorICB7IC5jb2RlID0gQlJMX0NNRF9BU1BLX0lOU19DSEFSUyB9LAorICB7IC5jb2RlID0gQlJMX0NNRF9BU1BLX0RFTF9DSEFSUyB9LAorICB7IC5jb2RlID0gQlJMX0NNRF9BU1BLX1JFUF9DSEFSUyB9LAorICB7IC5jb2RlID0gQlJMX0NNRF9BU1BLX0NNUF9XT1JEUyB9LAorICB7IC5jb2RlID0gQlJMX0NNRF9BU1BLX0lOREVOVCB9LAorfTsKKworc3RhdGljIGNvbnN0IENvbW1hbmRMaXN0RW50cnkgY29tbWFuZExpc3Rfc3BlYWtbXSA9IHsKKyAgeyAuY29kZSA9IEJSTF9DTURfQkxLKFJPVVRFX1NQRUVDSCkgfSwKKyAgeyAuY29kZSA9IEJSTF9DTURfU1BFQUtfQ1VSUl9DSEFSIH0sCisgIHsgLmNvZGUgPSBCUkxfQ01EX0RFU0NfQ1VSUl9DSEFSIH0sCisgIHsgLmNvZGUgPSBCUkxfQ01EX1NQRUFLX1BSRVZfQ0hBUiB9LAorICB7IC5jb2RlID0gQlJMX0NNRF9TUEVBS19ORVhUX0NIQVIgfSwKKyAgeyAuY29kZSA9IEJSTF9DTURfU1BFQUtfRlJTVF9DSEFSIH0sCisgIHsgLmNvZGUgPSBCUkxfQ01EX1NQRUFLX0xBU1RfQ0hBUiB9LAorICB7IC5jb2RlID0gQlJMX0NNRF9TUEVBS19DVVJSX1dPUkQgfSwKKyAgeyAuY29kZSA9IEJSTF9DTURfU1BFTExfQ1VSUl9XT1JEIH0sCisgIHsgLmNvZGUgPSBCUkxfQ01EX1NQRUFLX1BSRVZfV09SRCB9LAorICB7IC5jb2RlID0gQlJMX0NNRF9TUEVBS19ORVhUX1dPUkQgfSwKKyAgeyAuY29kZSA9IEJSTF9DTURfU1BFQUtfQ1VSUl9MSU5FIH0sCisgIHsgLmNvZGUgPSBCUkxfQ01EX1NQRUFLX1BSRVZfTElORSB9LAorICB7IC5jb2RlID0gQlJMX0NNRF9TUEVBS19ORVhUX0xJTkUgfSwKKyAgeyAuY29kZSA9IEJSTF9DTURfU1BFQUtfRlJTVF9MSU5FIH0sCisgIHsgLmNvZGUgPSBCUkxfQ01EX1NQRUFLX0xBU1RfTElORSB9LAorICB7IC5jb2RlID0gQlJMX0NNRF9TUEVBS19JTkRFTlQgfSwKKyAgeyAuY29kZSA9IEJSTF9DTURfU1BFQUtfQ1VSUl9MT0NOIH0sCisgIHsgLmNvZGUgPSBCUkxfQ01EX1NIT1dfQ1VSUl9MT0NOIH0sCit9OworCitzdGF0aWMgY29uc3QgQ29tbWFuZExpc3RFbnRyeSBjb21tYW5kTGlzdF9pbnB1dFtdID0geworICB7IC5jb2RlID0gQlJMX0NNRF9CTEsoUEFTU0RPVFMpIH0sCisgIHsgLmNvZGUgPSBCUkxfQ01EX0JMSyhQQVNTQ0hBUikgfSwKKyAgeyAuY29kZSA9IEJSTF9DTURfS0VZKEJBQ0tTUEFDRSkgfSwKKyAgeyAuY29kZSA9IEJSTF9DTURfS0VZKEVOVEVSKSB9LAorICB7IC5jb2RlID0gQlJMX0NNRF9LRVkoVEFCKSB9LAorICB7IC5jb2RlID0gQlJMX0NNRF9LRVkoQ1VSU09SX0xFRlQpIH0sCisgIHsgLmNvZGUgPSBCUkxfQ01EX0tFWShDVVJTT1JfUklHSFQpIH0sCisgIHsgLmNvZGUgPSBCUkxfQ01EX0tFWShDVVJTT1JfVVApIH0sCisgIHsgLmNvZGUgPSBCUkxfQ01EX0tFWShDVVJTT1JfRE9XTikgfSwKKyAgeyAuY29kZSA9IEJSTF9DTURfS0VZKFBBR0VfVVApIH0sCisgIHsgLmNvZGUgPSBCUkxfQ01EX0tFWShQQUdFX0RPV04pIH0sCisgIHsgLmNvZGUgPSBCUkxfQ01EX0tFWShIT01FKSB9LAorICB7IC5jb2RlID0gQlJMX0NNRF9LRVkoRU5EKSB9LAorICB7IC5jb2RlID0gQlJMX0NNRF9LRVkoSU5TRVJUKSB9LAorICB7IC5jb2RlID0gQlJMX0NNRF9LRVkoREVMRVRFKSB9LAorICB7IC5jb2RlID0gQlJMX0NNRF9VTlNUSUNLIH0sCisgIHsgLmNvZGUgPSBCUkxfQ01EX1VQUEVSIH0sCisgIHsgLmNvZGUgPSBCUkxfQ01EX1NISUZUIH0sCisgIHsgLmNvZGUgPSBCUkxfQ01EX0NPTlRST0wgfSwKKyAgeyAuY29kZSA9IEJSTF9DTURfTUVUQSB9LAorICB7IC5jb2RlID0gQlJMX0NNRF9BTFRHUiB9LAorICB7IC5jb2RlID0gQlJMX0NNRF9HVUkgfSwKKyAgeyAuY29kZSA9IEJSTF9DTURfS0VZKEVTQ0FQRSkgfSwKKyAgeyAuY29kZSA9IEJSTF9DTURfS0VZKEZVTkNUSU9OKSB9LAorICB7IC5jb2RlID0gQlJMX0NNRF9CTEsoU1dJVENIVlQpIH0sCisgIHsgLmNvZGUgPSBCUkxfQ01EX1NXSVRDSFZUX1BSRVYgfSwKKyAgeyAuY29kZSA9IEJSTF9DTURfU1dJVENIVlRfTkVYVCB9LAorICB7IC5jb2RlID0gQlJMX0NNRF9CTEsoU0VMRUNUVlQpIH0sCisgIHsgLmNvZGUgPSBCUkxfQ01EX1NFTEVDVFZUX1BSRVYgfSwKKyAgeyAuY29kZSA9IEJSTF9DTURfU0VMRUNUVlRfTkVYVCB9LAorICB7IC5jb2RlID0gQlJMX0NNRF9CUkxLQkQgfSwKKyAgeyAuY29kZSA9IEJSTF9DTURfQlJMVUNET1RTIH0sCit9OworCitzdGF0aWMgY29uc3QgQ29tbWFuZExpc3RFbnRyeSBjb21tYW5kTGlzdF9zcGVjaWFsW10gPSB7CisgIHsgLmNvZGUgPSBCUkxfQ01EX0JMSyhTRVRNQVJLKSB9LAorICB7IC5jb2RlID0gQlJMX0NNRF9CTEsoR09UT01BUkspIH0sCisgIHsgLmNvZGUgPSBCUkxfQ01EX1JFRlJFU0ggfSwKKyAgeyAuY29kZSA9IEJSTF9DTURfQkxLKFJFRlJFU0hfTElORSkgfSwKKyAgeyAuY29kZSA9IEJSTF9DTURfUkVTVEFSVEJSTCB9LAorICB7IC5jb2RlID0gQlJMX0NNRF9CUkxfU1RPUCB9LAorICB7IC5jb2RlID0gQlJMX0NNRF9CUkxfU1RBUlQgfSwKKyAgeyAuY29kZSA9IEJSTF9DTURfUkVTVEFSVFNQRUVDSCB9LAorICB7IC5jb2RlID0gQlJMX0NNRF9TUEtfU1RPUCB9LAorICB7IC5jb2RlID0gQlJMX0NNRF9TUEtfU1RBUlQgfSwKKyAgeyAuY29kZSA9IEJSTF9DTURfU0NSX1NUT1AgfSwKKyAgeyAuY29kZSA9IEJSTF9DTURfU0NSX1NUQVJUIH0sCit9OworCitzdGF0aWMgY29uc3QgQ29tbWFuZExpc3RFbnRyeSBjb21tYW5kTGlzdF9pbnRlcm5hbFtdID0geworICB7IC5jb2RlID0gQlJMX0NNRF9OT09QIH0sCisgIHsgLmNvZGUgPSBCUkxfQ01EX09GRkxJTkUgfSwKKyAgeyAuY29kZSA9IEJSTF9DTURfQkxLKEFMRVJUKSB9LAorICB7IC5jb2RlID0gQlJMX0NNRF9CTEsoUEFTU1hUKSB9LAorICB7IC5jb2RlID0gQlJMX0NNRF9CTEsoUEFTU0FUKSB9LAorICB7IC5jb2RlID0gQlJMX0NNRF9CTEsoUEFTU1BTMikgfSwKKyAgeyAuY29kZSA9IEJSTF9DTURfQkxLKFRPVUNIX0FUKSB9LAorICB7IC5jb2RlID0gQlJMX0NNRF9CTEsoTUFDUk8pIH0sCisgIHsgLmNvZGUgPSBCUkxfQ01EX0JMSyhIT1NUQ01EKSB9LAorfTsKKworI2RlZmluZSBDT01NQU5EX0xJU1QobmFtZSkgLmNvbW1hbmRzID0geyBcCisgIC50YWJsZSA9IGNvbW1hbmRMaXN0XyMjbmFtZSwgXAorICAuY291bnQgPSBBUlJBWV9DT1VOVChjb21tYW5kTGlzdF8jI25hbWUpLCBcCit9CisKK2NvbnN0IENvbW1hbmRHcm91cEVudHJ5IGNvbW1hbmRHcm91cFRhYmxlW10gPSB7CisgIHsgQ09NTUFORF9MSVNUKG1vZGVzKSwKKyAgICAuYWZ0ZXIgPSBjb21tYW5kR3JvdXBIb29rX2hvdGtleXMsCisgICAgLm5hbWUgPSAiU3BlY2lhbCBNb2RlcyIKKyAgfSwKKworICB7IENPTU1BTkRfTElTVChjdXJzb3IpLAorICAgIC5uYW1lID0gIkN1cnNvciBGdW5jdGlvbnMiCisgIH0sCisKKyAgeyBDT01NQU5EX0xJU1QodmVydGljYWwpLAorICAgIC5uYW1lID0gIlZlcnRpY2FsIE5hdmlnYXRpb24iCisgIH0sCisKKyAgeyBDT01NQU5EX0xJU1QoaG9yaXpvbnRhbCksCisgICAgLm5hbWUgPSAiSG9yaXpvbnRhbCBOYXZpZ2F0aW9uIgorICB9LAorCisgIHsgQ09NTUFORF9MSVNUKHdpbmRvdyksCisgICAgLm5hbWUgPSAiV2luZG93IE5hdmlnYXRpb24iCisgIH0sCisKKyAgeyBDT01NQU5EX0xJU1QoY2xpcGJvYXJkKSwKKyAgICAubmFtZSA9ICJDbGlwYm9hcmQgRnVuY3Rpb25zIgorICB9LAorCisgIHsgQ09NTUFORF9MSVNUKHRleHQpLAorICAgIC5uYW1lID0gIlRleHQgU2VsZWN0aW9uIGFuZCB0aGUgSG9zdCBDbGlwYm9hcmQiCisgIH0sCisKKyAgeyBDT01NQU5EX0xJU1QoZmVhdHVyZSksCisgICAgLm5hbWUgPSAiQ29uZmlndXJhdGlvbiBGdW5jdGlvbnMiCisgIH0sCisKKyAgeyBDT01NQU5EX0xJU1QobWVudSksCisgICAgLm5hbWUgPSAiTWVudSBPcGVyYXRpb25zIgorICB9LAorCisgIHsgQ09NTUFORF9MSVNUKHNheSksCisgICAgLm5hbWUgPSAiU3BlZWNoIEZ1bmN0aW9ucyIKKyAgfSwKKworICB7IENPTU1BTkRfTElTVChzcGVhayksCisgICAgLm5hbWUgPSAiU3BlZWNoIE5hdmlnYXRpb24iCisgIH0sCisKKyAgeyBDT01NQU5EX0xJU1QoaW5wdXQpLAorICAgIC5iZWZvcmUgPSBjb21tYW5kR3JvdXBIb29rX2tleWJvYXJkRnVuY3Rpb25zLAorICAgIC5uYW1lID0gIktleWJvYXJkIElucHV0IgorICB9LAorCisgIHsgQ09NTUFORF9MSVNUKHNwZWNpYWwpLAorICAgIC5uYW1lID0gIlNwZWNpYWwgRnVuY3Rpb25zIgorICB9LAorCisgIHsgQ09NTUFORF9MSVNUKGludGVybmFsKSwKKyAgICAubmFtZSA9ICJJbnRlcm5hbCBGdW5jdGlvbnMiCisgIH0sCit9OworCitjb25zdCB1bnNpZ25lZCBjaGFyIGNvbW1hbmRHcm91cENvdW50ID0gQVJSQVlfQ09VTlQoY29tbWFuZEdyb3VwVGFibGUpOwpkaWZmIC0tZ2l0IGEvUHJvZ3JhbXMva3RiX2NtZHMuaCBiL1Byb2dyYW1zL2t0Yl9jbWRzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDIzMjEyMQotLS0gL2Rldi9udWxsCisrKyBiL1Byb2dyYW1zL2t0Yl9jbWRzLmgKQEAgLTAsMCArMSw1MyBAQAorLyoKKyAqIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisgKiAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisgKgorICogQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKKyNpZm5kZWYgQlJMVFRZX0lOQ0xVREVEX0tUQl9DTURTCisjZGVmaW5lIEJSTFRUWV9JTkNMVURFRF9LVEJfQ01EUworCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmIC8qIF9fY3BsdXNwbHVzICovCisKK3R5cGVkZWYgc3RydWN0IENvbW1hbmRHcm91cEhvb2tEYXRhU3RydWN0IENvbW1hbmRHcm91cEhvb2tEYXRhOwordHlwZWRlZiB2b2lkIENvbW1hbmRHcm91cEhvb2sgKENvbW1hbmRHcm91cEhvb2tEYXRhICpkYXRhKTsKK2V4dGVybiBDb21tYW5kR3JvdXBIb29rIGNvbW1hbmRHcm91cEhvb2tfa2V5Ym9hcmRGdW5jdGlvbnM7CitleHRlcm4gQ29tbWFuZEdyb3VwSG9vayBjb21tYW5kR3JvdXBIb29rX2hvdGtleXM7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgaW50IGNvZGU7Cit9IENvbW1hbmRMaXN0RW50cnk7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgc3RydWN0IHsKKyAgICBjb25zdCBDb21tYW5kTGlzdEVudHJ5ICp0YWJsZTsKKyAgICB1bnNpZ25lZCBpbnQgY291bnQ7CisgIH0gY29tbWFuZHM7CisKKyAgY29uc3QgY2hhciAqbmFtZTsKKyAgQ29tbWFuZEdyb3VwSG9vayAqYmVmb3JlOworICBDb21tYW5kR3JvdXBIb29rICphZnRlcjsKK30gQ29tbWFuZEdyb3VwRW50cnk7CisKK2V4dGVybiBjb25zdCBDb21tYW5kR3JvdXBFbnRyeSBjb21tYW5kR3JvdXBUYWJsZVtdOworZXh0ZXJuIGNvbnN0IHVuc2lnbmVkIGNoYXIgY29tbWFuZEdyb3VwQ291bnQ7CisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmIC8qIF9fY3BsdXNwbHVzICovCisKKyNlbmRpZiAvKiBCUkxUVFlfSU5DTFVERURfS1RCX0NNRFMgKi8KZGlmZiAtLWdpdCBhL1Byb2dyYW1zL2t0Yl9jb21waWxlLmMgYi9Qcm9ncmFtcy9rdGJfY29tcGlsZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZlYWM0MzQKLS0tIC9kZXYvbnVsbAorKysgYi9Qcm9ncmFtcy9rdGJfY29tcGlsZS5jCkBAIC0wLDAgKzEsMTk4MCBAQAorLyoKKyAqIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisgKiAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisgKgorICogQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKKyNpbmNsdWRlICJwcm9sb2d1ZS5oIgorCisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8Y3R5cGUuaD4KKworI2luY2x1ZGUgImxvZy5oIgorI2luY2x1ZGUgImZpbGUuaCIKKyNpbmNsdWRlICJkYXRhZmlsZS5oIgorI2luY2x1ZGUgInV0ZjguaCIKKyNpbmNsdWRlICJjbWQuaCIKKyNpbmNsdWRlICJicmxfY21kcy5oIgorI2luY2x1ZGUgImt0Yi5oIgorI2luY2x1ZGUgImt0Yl9pbnRlcm5hbC5oIgorI2luY2x1ZGUgInByb2dyYW0uaCIKKworY29uc3QgS2V5Ym9hcmRGdW5jdGlvbiBrZXlib2FyZEZ1bmN0aW9uVGFibGVbXSA9IHsKKyAgey5uYW1lPSJkb3QxIiwgLmJpdD1CUkxfRE9UMX0sCisgIHsubmFtZT0iZG90MiIsIC5iaXQ9QlJMX0RPVDJ9LAorICB7Lm5hbWU9ImRvdDMiLCAuYml0PUJSTF9ET1QzfSwKKyAgey5uYW1lPSJkb3Q0IiwgLmJpdD1CUkxfRE9UNH0sCisgIHsubmFtZT0iZG90NSIsIC5iaXQ9QlJMX0RPVDV9LAorICB7Lm5hbWU9ImRvdDYiLCAuYml0PUJSTF9ET1Q2fSwKKyAgey5uYW1lPSJkb3Q3IiwgLmJpdD1CUkxfRE9UN30sCisgIHsubmFtZT0iZG90OCIsIC5iaXQ9QlJMX0RPVDh9LAorICB7Lm5hbWU9InNwYWNlIiwgLmJpdD1CUkxfRE9UQ30sCisgIHsubmFtZT0ic2hpZnQiLCAuYml0PUJSTF9GTEdfSU5QVVRfU0hJRlR9LAorICB7Lm5hbWU9InVwcGVyIiwgLmJpdD1CUkxfRkxHX0lOUFVUX1VQUEVSfSwKKyAgey5uYW1lPSJjb250cm9sIiwgLmJpdD1CUkxfRkxHX0lOUFVUX0NPTlRST0x9LAorICB7Lm5hbWU9Im1ldGEiLCAuYml0PUJSTF9GTEdfSU5QVVRfTUVUQX0sCisgIHsubmFtZT0iYWx0Z3IiLCAuYml0PUJSTF9GTEdfSU5QVVRfQUxUR1J9LAorICB7Lm5hbWU9Imd1aSIsIC5iaXQ9QlJMX0ZMR19JTlBVVF9HVUl9Cit9OwordW5zaWduZWQgY2hhciBrZXlib2FyZEZ1bmN0aW9uQ291bnQgPSBBUlJBWV9DT1VOVChrZXlib2FyZEZ1bmN0aW9uVGFibGUpOworCit0eXBlZGVmIHN0cnVjdCB7CisgIGNvbnN0IGNoYXIgKmZpbGU7CisgIEtleVRhYmxlICp0YWJsZTsKKworICBjb25zdCBDb21tYW5kRW50cnkgKipjb21tYW5kVGFibGU7CisgIHVuc2lnbmVkIGludCBjb21tYW5kQ291bnQ7CisKKyAgQm91bmRDb21tYW5kIG51bGxCb3VuZENvbW1hbmQ7CisKKyAgdW5zaWduZWQgY2hhciBjb250ZXh0OworICB1bnNpZ25lZCBoaWRlUmVxdWVzdGVkOjE7CisgIHVuc2lnbmVkIGhpZGVJbmhlcml0ZWQ6MTsKK30gS2V5VGFibGVEYXRhOworCit2b2lkCitjb3B5S2V5VmFsdWVzIChLZXlWYWx1ZSAqdGFyZ2V0LCBjb25zdCBLZXlWYWx1ZSAqc291cmNlLCB1bnNpZ25lZCBpbnQgY291bnQpIHsKKyAgbWVtY3B5KHRhcmdldCwgc291cmNlLCBjb3VudCpzaXplb2YoKnRhcmdldCkpOworfQorCitpbnQKK2NvbXBhcmVLZXlWYWx1ZXMgKGNvbnN0IEtleVZhbHVlICp2YWx1ZTEsIGNvbnN0IEtleVZhbHVlICp2YWx1ZTIpIHsKKyAgaWYgKHZhbHVlMS0+Z3JvdXAgPCB2YWx1ZTItPmdyb3VwKSByZXR1cm4gLTE7CisgIGlmICh2YWx1ZTEtPmdyb3VwID4gdmFsdWUyLT5ncm91cCkgcmV0dXJuIDE7CisKKyAgaWYgKHZhbHVlMS0+bnVtYmVyIDwgdmFsdWUyLT5udW1iZXIpIHJldHVybiAtMTsKKyAgaWYgKHZhbHVlMS0+bnVtYmVyID4gdmFsdWUyLT5udW1iZXIpIHJldHVybiAxOworCisgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50Citjb21wYXJlS2V5QXJyYXlzICgKKyAgdW5zaWduZWQgaW50IGNvdW50MSwgY29uc3QgS2V5VmFsdWUgKmFycmF5MSwKKyAgdW5zaWduZWQgaW50IGNvdW50MiwgY29uc3QgS2V5VmFsdWUgKmFycmF5MgorKSB7CisgIGlmIChjb3VudDEgPCBjb3VudDIpIHJldHVybiAtMTsKKyAgaWYgKGNvdW50MSA+IGNvdW50MikgcmV0dXJuIDE7CisgIHJldHVybiBtZW1jbXAoYXJyYXkxLCBhcnJheTIsIGNvdW50MSpzaXplb2YoKmFycmF5MSkpOworfQorCitpbnQKK2ZpbmRLZXlWYWx1ZSAoCisgIGNvbnN0IEtleVZhbHVlICp2YWx1ZXMsIHVuc2lnbmVkIGludCBjb3VudCwKKyAgY29uc3QgS2V5VmFsdWUgKnRhcmdldCwgdW5zaWduZWQgaW50ICpwb3NpdGlvbgorKSB7CisgIGludCBmaXJzdCA9IDA7CisgIGludCBsYXN0ID0gY291bnQgLSAxOworCisgIHdoaWxlIChmaXJzdCA8PSBsYXN0KSB7CisgICAgaW50IGN1cnJlbnQgPSAoZmlyc3QgKyBsYXN0KSAvIDI7CisgICAgY29uc3QgS2V5VmFsdWUgKnZhbHVlID0gJnZhbHVlc1tjdXJyZW50XTsKKyAgICBpbnQgcmVsYXRpb24gPSBjb21wYXJlS2V5VmFsdWVzKHRhcmdldCwgdmFsdWUpOworCisgICAgaWYgKHJlbGF0aW9uIDwgMCkgeworICAgICAgbGFzdCA9IGN1cnJlbnQgLSAxOworICAgIH0gZWxzZSBpZiAocmVsYXRpb24gPiAwKSB7CisgICAgICBmaXJzdCA9IGN1cnJlbnQgKyAxOworICAgIH0gZWxzZSB7CisgICAgICAqcG9zaXRpb24gPSBjdXJyZW50OworICAgICAgcmV0dXJuIDE7CisgICAgfQorICB9CisKKyAgKnBvc2l0aW9uID0gZmlyc3Q7CisgIHJldHVybiAwOworfQorCitpbnQKK2luc2VydEtleVZhbHVlICgKKyAgS2V5VmFsdWUgKip2YWx1ZXMsIHVuc2lnbmVkIGludCAqY291bnQsIHVuc2lnbmVkIGludCAqc2l6ZSwKKyAgY29uc3QgS2V5VmFsdWUgKnZhbHVlLCB1bnNpZ25lZCBpbnQgcG9zaXRpb24KKykgeworICBpZiAoKmNvdW50ID09ICpzaXplKSB7CisgICAgdW5zaWduZWQgaW50IG5ld1NpemUgPSAoKnNpemUpPyAoKnNpemUpPDwxOiAwWDEwOworICAgIEtleVZhbHVlICpuZXdWYWx1ZXMgPSByZWFsbG9jKCp2YWx1ZXMsIEFSUkFZX1NJWkUobmV3VmFsdWVzLCBuZXdTaXplKSk7CisKKyAgICBpZiAoIW5ld1ZhbHVlcykgeworICAgICAgbG9nTWFsbG9jRXJyb3IoKTsKKyAgICAgIHJldHVybiAwOworICAgIH0KKworICAgICp2YWx1ZXMgPSBuZXdWYWx1ZXM7CisgICAgKnNpemUgPSBuZXdTaXplOworICB9CisKKyAgbWVtbW92ZSgmKCp2YWx1ZXMpW3Bvc2l0aW9uKzFdLCAmKCp2YWx1ZXMpW3Bvc2l0aW9uXSwKKyAgICAgICAgICAoKCpjb3VudCkrKyAtIHBvc2l0aW9uKSAqIHNpemVvZigqKnZhbHVlcykpOworICAoKnZhbHVlcylbcG9zaXRpb25dID0gKnZhbHVlOworICByZXR1cm4gMTsKK30KKwordm9pZAorcmVtb3ZlS2V5VmFsdWUgKEtleVZhbHVlICp2YWx1ZXMsIHVuc2lnbmVkIGludCAqY291bnQsIHVuc2lnbmVkIGludCBwb3NpdGlvbikgeworICBtZW1tb3ZlKCZ2YWx1ZXNbcG9zaXRpb25dLCAmdmFsdWVzW3Bvc2l0aW9uKzFdLAorICAgICAgICAgICgtLSpjb3VudCAtIHBvc2l0aW9uKSAqIHNpemVvZigqdmFsdWVzKSk7Cit9CisKK2ludAorZGVsZXRlS2V5VmFsdWUgKEtleVZhbHVlICp2YWx1ZXMsIHVuc2lnbmVkIGludCAqY291bnQsIGNvbnN0IEtleVZhbHVlICp2YWx1ZSkgeworICB1bnNpZ25lZCBpbnQgcG9zaXRpb247CisgIGludCBmb3VuZCA9IGZpbmRLZXlWYWx1ZSh2YWx1ZXMsICpjb3VudCwgdmFsdWUsICZwb3NpdGlvbik7CisKKyAgaWYgKGZvdW5kKSByZW1vdmVLZXlWYWx1ZSh2YWx1ZXMsIGNvdW50LCBwb3NpdGlvbik7CisgIHJldHVybiBmb3VuZDsKK30KKworc3RhdGljIGlubGluZSBpbnQKK2hpZGVCaW5kaW5ncyAoY29uc3QgS2V5VGFibGVEYXRhICprdGQpIHsKKyAgcmV0dXJuIGt0ZC0+aGlkZVJlcXVlc3RlZCB8fCBrdGQtPmhpZGVJbmhlcml0ZWQ7Cit9CisKK3N0YXRpYyBLZXlDb250ZXh0ICoKK2dldEtleUNvbnRleHQgKEtleVRhYmxlRGF0YSAqa3RkLCB1bnNpZ25lZCBjaGFyIGNvbnRleHQpIHsKKyAgaWYgKGNvbnRleHQgPj0ga3RkLT50YWJsZS0+a2V5Q29udGV4dHMuY291bnQpIHsKKyAgICB1bnNpZ25lZCBpbnQgbmV3Q291bnQgPSBjb250ZXh0ICsgMTsKKyAgICBLZXlDb250ZXh0ICpuZXdUYWJsZSA9IHJlYWxsb2Moa3RkLT50YWJsZS0+a2V5Q29udGV4dHMudGFibGUsIEFSUkFZX1NJWkUobmV3VGFibGUsIG5ld0NvdW50KSk7CisKKyAgICBpZiAoIW5ld1RhYmxlKSB7CisgICAgICBsb2dNYWxsb2NFcnJvcigpOworICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIGt0ZC0+dGFibGUtPmtleUNvbnRleHRzLnRhYmxlID0gbmV3VGFibGU7CisKKyAgICB3aGlsZSAoa3RkLT50YWJsZS0+a2V5Q29udGV4dHMuY291bnQgPCBuZXdDb3VudCkgeworICAgICAgS2V5Q29udGV4dCAqY3R4ID0gJmt0ZC0+dGFibGUtPmtleUNvbnRleHRzLnRhYmxlW2t0ZC0+dGFibGUtPmtleUNvbnRleHRzLmNvdW50KytdOworICAgICAgbWVtc2V0KGN0eCwgMCwgc2l6ZW9mKCpjdHgpKTsKKworICAgICAgY3R4LT5uYW1lID0gTlVMTDsKKyAgICAgIGN0eC0+dGl0bGUgPSBOVUxMOworCisgICAgICBjdHgtPmlzU3BlY2lhbCA9IDA7CisgICAgICBjdHgtPmlzRGVmaW5lZCA9IDA7CisgICAgICBjdHgtPmlzUmVmZXJlbmNlZCA9IDA7CisgICAgICBjdHgtPmlzSXNvbGF0ZWQgPSAwOworCisgICAgICBjdHgtPmtleUJpbmRpbmdzLnRhYmxlID0gTlVMTDsKKyAgICAgIGN0eC0+a2V5QmluZGluZ3Muc2l6ZSA9IDA7CisgICAgICBjdHgtPmtleUJpbmRpbmdzLmNvdW50ID0gMDsKKworICAgICAgY3R4LT5ob3RrZXlzLnRhYmxlID0gTlVMTDsKKyAgICAgIGN0eC0+aG90a2V5cy5zaXplID0gMDsKKyAgICAgIGN0eC0+aG90a2V5cy5jb3VudCA9IDA7CisKKyAgICAgIGN0eC0+bWFwcGVkS2V5cy50YWJsZSA9IE5VTEw7CisgICAgICBjdHgtPm1hcHBlZEtleXMuc2l6ZSA9IDA7CisgICAgICBjdHgtPm1hcHBlZEtleXMuY291bnQgPSAwOworICAgICAgY3R4LT5tYXBwZWRLZXlzLnN1cGVyaW1wb3NlID0gMDsKKyAgICB9CisgIH0KKworICByZXR1cm4gJmt0ZC0+dGFibGUtPmtleUNvbnRleHRzLnRhYmxlW2NvbnRleHRdOworfQorCitzdGF0aWMgaW5saW5lIEtleUNvbnRleHQgKgorZ2V0Q3VycmVudEtleUNvbnRleHQgKEtleVRhYmxlRGF0YSAqa3RkKSB7CisgIHJldHVybiBnZXRLZXlDb250ZXh0KGt0ZCwga3RkLT5jb250ZXh0KTsKK30KKworc3RhdGljIGludAorc2V0U3RyaW5nICh3Y2hhcl90ICoqc3RyaW5nLCBjb25zdCB3Y2hhcl90ICpjaGFyYWN0ZXJzLCBzaXplX3QgbGVuZ3RoKSB7CisgIGlmICgqc3RyaW5nKSBmcmVlKCpzdHJpbmcpOworCisgIGlmICghKCpzdHJpbmcgPSBtYWxsb2MoQVJSQVlfU0laRSgqc3RyaW5nLCBsZW5ndGgrMSkpKSkgeworICAgIGxvZ01hbGxvY0Vycm9yKCk7CisgICAgcmV0dXJuIDA7CisgIH0KKworICB3bWVtY3B5KCpzdHJpbmcsIGNoYXJhY3RlcnMsIGxlbmd0aCk7CisgICgqc3RyaW5nKVtsZW5ndGhdID0gMDsKKyAgcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQKK3NldEtleUNvbnRleHROYW1lIChLZXlDb250ZXh0ICpjdHgsIGNvbnN0IHdjaGFyX3QgKm5hbWUsIHNpemVfdCBsZW5ndGgpIHsKKyAgcmV0dXJuIHNldFN0cmluZygmY3R4LT5uYW1lLCBuYW1lLCBsZW5ndGgpOworfQorCitzdGF0aWMgaW50CitzZXRLZXlDb250ZXh0VGl0bGUgKEtleUNvbnRleHQgKmN0eCwgY29uc3Qgd2NoYXJfdCAqdGl0bGUsIHNpemVfdCBsZW5ndGgpIHsKKyAgcmV0dXJuIHNldFN0cmluZygmY3R4LT50aXRsZSwgdGl0bGUsIGxlbmd0aCk7Cit9CisKK3N0YXRpYyBpbnQKK2ZpbmRLZXlDb250ZXh0ICh1bnNpZ25lZCBjaGFyICpjb250ZXh0LCBjb25zdCB3Y2hhcl90ICpuYW1lLCBpbnQgbGVuZ3RoLCBLZXlUYWJsZURhdGEgKmt0ZCkgeworICBmb3IgKCpjb250ZXh0PTA7ICpjb250ZXh0PGt0ZC0+dGFibGUtPmtleUNvbnRleHRzLmNvdW50OyAqY29udGV4dCs9MSkgeworICAgIEtleUNvbnRleHQgKmN0eCA9ICZrdGQtPnRhYmxlLT5rZXlDb250ZXh0cy50YWJsZVsqY29udGV4dF07CisKKyAgICBpZiAoY3R4LT5uYW1lKSB7CisgICAgICBpZiAod2NzbGVuKGN0eC0+bmFtZSkgPT0gbGVuZ3RoKSB7CisgICAgICAgIGlmICh3bWVtY21wKGN0eC0+bmFtZSwgbmFtZSwgbGVuZ3RoKSA9PSAwKSB7CisgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9CisgIH0KKworICB7CisgICAgS2V5Q29udGV4dCAqY3R4ID0gZ2V0S2V5Q29udGV4dChrdGQsICpjb250ZXh0KTsKKworICAgIGlmIChjdHgpIHsKKyAgICAgIGlmIChzZXRLZXlDb250ZXh0TmFtZShjdHgsIG5hbWUsIGxlbmd0aCkpIHsKKyAgICAgICAgcmV0dXJuIDE7CisgICAgICB9CisKKyAgICAgIGt0ZC0+dGFibGUtPmtleUNvbnRleHRzLmNvdW50IC09IDE7CisgICAgfQorICB9CisKKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK2NvbXBhcmVUb05hbWUgKGNvbnN0IHdjaGFyX3QgKmxvY2F0aW9uMSwgaW50IGxlbmd0aDEsIGNvbnN0IGNoYXIgKmxvY2F0aW9uMikgeworICBjb25zdCB3Y2hhcl90ICplbmQxID0gbG9jYXRpb24xICsgbGVuZ3RoMTsKKworICB3aGlsZSAoMSkgeworICAgIGlmIChsb2NhdGlvbjEgPT0gZW5kMSkgcmV0dXJuICpsb2NhdGlvbjI/IC0xOiAwOworICAgIGlmICghKmxvY2F0aW9uMikgcmV0dXJuIDE7CisKKyAgICB7CisgICAgICB3Y2hhcl90IGNoYXJhY3RlcjEgPSB0b3dsb3dlcigqbG9jYXRpb24xKTsKKyAgICAgIGNoYXIgY2hhcmFjdGVyMiA9IHRvbG93ZXIoKHVuc2lnbmVkIGNoYXIpKmxvY2F0aW9uMik7CisKKyAgICAgIGlmIChjaGFyYWN0ZXIxIDwgY2hhcmFjdGVyMikgcmV0dXJuIC0xOworICAgICAgaWYgKGNoYXJhY3RlcjEgPiBjaGFyYWN0ZXIyKSByZXR1cm4gMTsKKyAgICB9CisKKyAgICBsb2NhdGlvbjEgKz0gMTsKKyAgICBsb2NhdGlvbjIgKz0gMTsKKyAgfQorfQorCitzdGF0aWMgaW50Citzb3J0S2V5TmFtZXMgKGNvbnN0IHZvaWQgKmVsZW1lbnQxLCBjb25zdCB2b2lkICplbGVtZW50MikgeworICBjb25zdCBLZXlOYW1lRW50cnkgKmNvbnN0ICprbmUxID0gZWxlbWVudDE7CisgIGNvbnN0IEtleU5hbWVFbnRyeSAqY29uc3QgKmtuZTIgPSBlbGVtZW50MjsKKyAgcmV0dXJuIHN0cmNhc2VjbXAoKCprbmUxKS0+bmFtZSwgKCprbmUyKS0+bmFtZSk7Cit9CisKK3N0YXRpYyBpbnQKK3NlYXJjaEtleU5hbWUgKGNvbnN0IHZvaWQgKnRhcmdldCwgY29uc3Qgdm9pZCAqZWxlbWVudCkgeworICBjb25zdCBEYXRhT3BlcmFuZCAqbmFtZSA9IHRhcmdldDsKKyAgY29uc3QgS2V5TmFtZUVudHJ5ICpjb25zdCAqa25lID0gZWxlbWVudDsKKyAgcmV0dXJuIGNvbXBhcmVUb05hbWUobmFtZS0+Y2hhcmFjdGVycywgbmFtZS0+bGVuZ3RoLCAoKmtuZSktPm5hbWUpOworfQorCitzdGF0aWMgaW50Citzb3J0S2V5VmFsdWVzIChjb25zdCB2b2lkICplbGVtZW50MSwgY29uc3Qgdm9pZCAqZWxlbWVudDIpIHsKKyAgY29uc3QgS2V5TmFtZUVudHJ5ICpjb25zdCAqa25lMSA9IGVsZW1lbnQxOworICBjb25zdCBLZXlOYW1lRW50cnkgKmNvbnN0ICprbmUyID0gZWxlbWVudDI7CisKKyAgeworICAgIGludCByZXN1bHQgPSBjb21wYXJlS2V5VmFsdWVzKCYoKmtuZTEpLT52YWx1ZSwgJigqa25lMiktPnZhbHVlKTsKKyAgICBpZiAocmVzdWx0ICE9IDApIHJldHVybiByZXN1bHQ7CisgIH0KKworICBpZiAoKmtuZTEgPCAqa25lMikgcmV0dXJuIC0xOworICBpZiAoKmtuZTEgPiAqa25lMikgcmV0dXJuIDE7CisKKyAgcmV0dXJuIDA7Cit9CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgdW5zaWduZWQgaW50IGNvdW50OworfSBDb3VudEtleU5hbWVEYXRhOworCitzdGF0aWMgaW50Citjb3VudEtleU5hbWUgKGNvbnN0IEtleU5hbWVFbnRyeSAqa25lLCB2b2lkICpkYXRhKSB7CisgIGlmIChrbmUpIHsKKyAgICBDb3VudEtleU5hbWVEYXRhICpja2QgPSBkYXRhOworCisgICAgY2tkLT5jb3VudCArPSAxOworICB9CisKKyAgcmV0dXJuIDE7Cit9CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgY29uc3QgS2V5TmFtZUVudHJ5ICoqa25lOworfSBBZGRLZXlOYW1lRGF0YTsKKworc3RhdGljIGludAorYWRkS2V5TmFtZSAoY29uc3QgS2V5TmFtZUVudHJ5ICprbmUsIHZvaWQgKmRhdGEpIHsKKyAgaWYgKGtuZSkgeworICAgIEFkZEtleU5hbWVEYXRhICpha2QgPSBkYXRhOworCisgICAgKmFrZC0+a25lKysgPSBrbmU7CisgIH0KKworICByZXR1cm4gMTsKK30KKworc3RhdGljIGludAorYWxsb2NhdGVLZXlOYW1lVGFibGUgKEtleVRhYmxlRGF0YSAqa3RkLCBLRVlfTkFNRV9UQUJMRVNfUkVGRVJFTkNFIGtleXMpIHsKKyAgeworICAgIENvdW50S2V5TmFtZURhdGEgY2tkID0geworICAgICAgLmNvdW50ID0gMAorICAgIH07CisKKyAgICBmb3JFYWNoS2V5TmFtZShrZXlzLCBjb3VudEtleU5hbWUsICZja2QpOworICAgIGt0ZC0+dGFibGUtPmtleU5hbWVzLmNvdW50ID0gY2tkLmNvdW50OworICB9CisKKyAgaWYgKChrdGQtPnRhYmxlLT5rZXlOYW1lcy50YWJsZSA9IG1hbGxvYyhBUlJBWV9TSVpFKGt0ZC0+dGFibGUtPmtleU5hbWVzLnRhYmxlLCBrdGQtPnRhYmxlLT5rZXlOYW1lcy5jb3VudCkpKSkgeworICAgIHsKKyAgICAgIEFkZEtleU5hbWVEYXRhIGFrZCA9IHsKKyAgICAgICAgLmtuZSA9IGt0ZC0+dGFibGUtPmtleU5hbWVzLnRhYmxlCisgICAgICB9OworCisgICAgICBmb3JFYWNoS2V5TmFtZShrZXlzLCBhZGRLZXlOYW1lLCAmYWtkKTsKKyAgICB9CisKKyAgICBxc29ydChrdGQtPnRhYmxlLT5rZXlOYW1lcy50YWJsZSwga3RkLT50YWJsZS0+a2V5TmFtZXMuY291bnQsIHNpemVvZigqa3RkLT50YWJsZS0+a2V5TmFtZXMudGFibGUpLCBzb3J0S2V5TmFtZXMpOworICAgIHJldHVybiAxOworICB9CisKKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBLZXlOYW1lRW50cnkgKmNvbnN0ICoKK2ZpbmRLZXlOYW1lIChjb25zdCB3Y2hhcl90ICpjaGFyYWN0ZXJzLCBpbnQgbGVuZ3RoLCBLZXlUYWJsZURhdGEgKmt0ZCkgeworICBjb25zdCBEYXRhT3BlcmFuZCBuYW1lID0geworICAgIC5jaGFyYWN0ZXJzID0gY2hhcmFjdGVycywKKyAgICAubGVuZ3RoID0gbGVuZ3RoCisgIH07CisKKyAgcmV0dXJuIGJzZWFyY2goJm5hbWUsIGt0ZC0+dGFibGUtPmtleU5hbWVzLnRhYmxlLCBrdGQtPnRhYmxlLT5rZXlOYW1lcy5jb3VudCwgc2l6ZW9mKCprdGQtPnRhYmxlLT5rZXlOYW1lcy50YWJsZSksIHNlYXJjaEtleU5hbWUpOworfQorCitzdGF0aWMgaW50CitwYXJzZUtleU5hbWUgKERhdGFGaWxlICpmaWxlLCBLZXlWYWx1ZSAqdmFsdWUsIGNvbnN0IHdjaGFyX3QgKmNoYXJhY3RlcnMsIGludCBsZW5ndGgsIEtleVRhYmxlRGF0YSAqa3RkKSB7CisgIGNvbnN0IHdjaGFyX3QgKnN1ZmZpeCA9IHdtZW1jaHIoY2hhcmFjdGVycywgV0NfQygnLicpLCBsZW5ndGgpOworICBpbnQgcHJlZml4TGVuZ3RoOworICBpbnQgc3VmZml4TGVuZ3RoOworCisgIGlmIChzdWZmaXgpIHsKKyAgICBpZiAoIShwcmVmaXhMZW5ndGggPSBzdWZmaXggLSBjaGFyYWN0ZXJzKSkgeworICAgICAgcmVwb3J0RGF0YUVycm9yKGZpbGUsICJtaXNzaW5nIGtleSBncm91cCBuYW1lOiAlLioiIFBSSXdzLCBsZW5ndGgsIGNoYXJhY3RlcnMpOworICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgaWYgKCEoc3VmZml4TGVuZ3RoID0gKGNoYXJhY3RlcnMgKyBsZW5ndGgpIC0gKytzdWZmaXgpKSB7CisgICAgICByZXBvcnREYXRhRXJyb3IoZmlsZSwgIm1pc3Npbmcga2V5IG51bWJlcjogJS4qIiBQUkl3cywgbGVuZ3RoLCBjaGFyYWN0ZXJzKTsKKyAgICAgIHJldHVybiAwOworICAgIH0KKyAgfSBlbHNlIHsKKyAgICBwcmVmaXhMZW5ndGggPSBsZW5ndGg7CisgICAgc3VmZml4TGVuZ3RoID0gMDsKKyAgfQorCisgIHsKKyAgICBjb25zdCBLZXlOYW1lRW50cnkgKmNvbnN0ICprbmUgPSBmaW5kS2V5TmFtZShjaGFyYWN0ZXJzLCBwcmVmaXhMZW5ndGgsIGt0ZCk7CisKKyAgICBpZiAoIWtuZSkgeworICAgICAgcmVwb3J0RGF0YUVycm9yKGZpbGUsICJ1bmtub3duIGtleSBuYW1lOiAlLioiIFBSSXdzLCBwcmVmaXhMZW5ndGgsIGNoYXJhY3RlcnMpOworICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgKnZhbHVlID0gKCprbmUpLT52YWx1ZTsKKyAgfQorCisgIGlmIChzdWZmaXgpIHsKKyAgICBpbnQgb2sgPSAwOworICAgIGludCBudW1iZXI7CisKKyAgICBpZiAoaXNOdW1iZXIoJm51bWJlciwgc3VmZml4LCBzdWZmaXhMZW5ndGgpKQorICAgICAgaWYgKG51bWJlciA+IDApCisgICAgICAgIGlmICgtLW51bWJlciA8PSBLVEJfS0VZX01BWCkKKyAgICAgICAgICBvayA9IDE7CisKKyAgICBpZiAoIW9rKSB7CisgICAgICByZXBvcnREYXRhRXJyb3IoZmlsZSwgImludmFsaWQga2V5IG51bWJlcjogJS4qIiBQUkl3cywgc3VmZml4TGVuZ3RoLCBzdWZmaXgpOworICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgaWYgKHZhbHVlLT5udW1iZXIgIT0gS1RCX0tFWV9BTlkpIHsKKyAgICAgIHJlcG9ydERhdGFFcnJvcihmaWxlLCAibm90IGEga2V5IGdyb3VwOiAlLioiIFBSSXdzLCBwcmVmaXhMZW5ndGgsIGNoYXJhY3RlcnMpOworICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgdmFsdWUtPm51bWJlciA9IG51bWJlcjsKKyAgfQorCisgIHJldHVybiAxOworfQorCitzdGF0aWMgaW50CitnZXRLZXlPcGVyYW5kIChEYXRhRmlsZSAqZmlsZSwgS2V5VmFsdWUgKnZhbHVlLCBLZXlUYWJsZURhdGEgKmt0ZCkgeworICBEYXRhU3RyaW5nIG5hbWU7CisKKyAgaWYgKGdldERhdGFTdHJpbmcoZmlsZSwgJm5hbWUsIDEsICJrZXkgbmFtZSIpKSB7CisgICAgaWYgKHBhcnNlS2V5TmFtZShmaWxlLCB2YWx1ZSwgbmFtZS5jaGFyYWN0ZXJzLCBuYW1lLmxlbmd0aCwga3RkKSkgeworICAgICAgcmV0dXJuIDE7CisgICAgfQorICB9CisKKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK25ld01vZGlmaWVyUG9zaXRpb24gKGNvbnN0IEtleUNvbWJpbmF0aW9uICpjb21iaW5hdGlvbiwgY29uc3QgS2V5VmFsdWUgKm1vZGlmaWVyLCB1bnNpZ25lZCBpbnQgKnBvc2l0aW9uKSB7CisgIGludCBmb3VuZCA9IGZpbmRLZXlWYWx1ZShjb21iaW5hdGlvbi0+bW9kaWZpZXJLZXlzLCBjb21iaW5hdGlvbi0+bW9kaWZpZXJDb3VudCwgbW9kaWZpZXIsIHBvc2l0aW9uKTsKKyAgcmV0dXJuIGZvdW5kICYmIChtb2RpZmllci0+bnVtYmVyICE9IEtUQl9LRVlfQU5ZKTsKK30KKworc3RhdGljIGludAoraW5zZXJ0TW9kaWZpZXIgKERhdGFGaWxlICpmaWxlLCBLZXlDb21iaW5hdGlvbiAqY29tYmluYXRpb24sIHVuc2lnbmVkIGludCBwb3NpdGlvbiwgY29uc3QgS2V5VmFsdWUgKnZhbHVlKSB7CisgIGlmIChjb21iaW5hdGlvbi0+bW9kaWZpZXJDb3VudCA9PSBNQVhfTU9ESUZJRVJTX1BFUl9DT01CSU5BVElPTikgeworICAgIHJlcG9ydERhdGFFcnJvcihmaWxlLCAidG9vIG1hbnkgbW9kaWZpZXIga2V5cyIpOworICAgIHJldHVybiAwOworICB9CisKKyAgeworICAgIGludCBpbmRleCA9IGNvbWJpbmF0aW9uLT5tb2RpZmllckNvdW50OworCisgICAgd2hpbGUgKGluZGV4LS0pIHsKKyAgICAgIGlmIChpbmRleCA+PSBwb3NpdGlvbikgeworICAgICAgICBjb21iaW5hdGlvbi0+bW9kaWZpZXJLZXlzW2luZGV4KzFdID0gY29tYmluYXRpb24tPm1vZGlmaWVyS2V5c1tpbmRleF07CisgICAgICB9CisKKyAgICAgIGlmIChjb21iaW5hdGlvbi0+bW9kaWZpZXJQb3NpdGlvbnNbaW5kZXhdID49IHBvc2l0aW9uKSB7CisgICAgICAgIGNvbWJpbmF0aW9uLT5tb2RpZmllclBvc2l0aW9uc1tpbmRleF0gKz0gMTsKKyAgICAgIH0KKyAgICB9CisgIH0KKworICBjb21iaW5hdGlvbi0+bW9kaWZpZXJLZXlzW3Bvc2l0aW9uXSA9ICp2YWx1ZTsKKyAgY29tYmluYXRpb24tPm1vZGlmaWVyUG9zaXRpb25zW2NvbWJpbmF0aW9uLT5tb2RpZmllckNvdW50KytdID0gcG9zaXRpb247CisgIHJldHVybiAxOworfQorCitzdGF0aWMgaW50CitwYXJzZUtleUNvbWJpbmF0aW9uIChEYXRhRmlsZSAqZmlsZSwgS2V5Q29tYmluYXRpb24gKmNvbWJpbmF0aW9uLCBjb25zdCB3Y2hhcl90ICpjaGFyYWN0ZXJzLCBpbnQgbGVuZ3RoLCBLZXlUYWJsZURhdGEgKmt0ZCkgeworICBLZXlWYWx1ZSB2YWx1ZTsKKworICBtZW1zZXQoY29tYmluYXRpb24sIDAsIHNpemVvZigqY29tYmluYXRpb24pKTsKKyAgY29tYmluYXRpb24tPm1vZGlmaWVyQ291bnQgPSAwOworCisgIHdoaWxlICgxKSB7CisgICAgY29uc3Qgd2NoYXJfdCAqZW5kID0gd21lbWNocihjaGFyYWN0ZXJzLCBXQ19DKCcrJyksIGxlbmd0aCk7CisgICAgaWYgKCFlbmQpIGJyZWFrOworCisgICAgeworICAgICAgaW50IGNvdW50ID0gZW5kIC0gY2hhcmFjdGVyczsKKworICAgICAgaWYgKCFjb3VudCkgeworICAgICAgICByZXBvcnREYXRhRXJyb3IoZmlsZSwgIm1pc3NpbmcgbW9kaWZpZXIga2V5Iik7CisgICAgICAgIHJldHVybiAwOworICAgICAgfQorICAgICAgaWYgKCFwYXJzZUtleU5hbWUoZmlsZSwgJnZhbHVlLCBjaGFyYWN0ZXJzLCBjb3VudCwga3RkKSkgcmV0dXJuIDA7CisKKyAgICAgIHsKKyAgICAgICAgdW5zaWduZWQgaW50IHBvc2l0aW9uOworCisgICAgICAgIGlmIChuZXdNb2RpZmllclBvc2l0aW9uKGNvbWJpbmF0aW9uLCAmdmFsdWUsICZwb3NpdGlvbikpIHsKKyAgICAgICAgICByZXBvcnREYXRhRXJyb3IoZmlsZSwgImR1cGxpY2F0ZSBtb2RpZmllciBrZXk6ICUuKiIgUFJJd3MsIGNvdW50LCBjaGFyYWN0ZXJzKTsKKyAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQorCisgICAgICAgIGlmICghaW5zZXJ0TW9kaWZpZXIoZmlsZSwgY29tYmluYXRpb24sIHBvc2l0aW9uLCAmdmFsdWUpKSByZXR1cm4gMDsKKyAgICAgICAgaWYgKHZhbHVlLm51bWJlciA9PSBLVEJfS0VZX0FOWSkgY29tYmluYXRpb24tPmFueUtleUNvdW50ICs9IDE7CisgICAgICB9CisKKyAgICAgIGxlbmd0aCAtPSBjb3VudCArIDE7CisgICAgICBjaGFyYWN0ZXJzID0gZW5kICsgMTsKKyAgICB9CisgIH0KKworICBpZiAobGVuZ3RoKSB7CisgICAgaWYgKCpjaGFyYWN0ZXJzID09IFdDX0MoJyEnKSkgeworICAgICAgY2hhcmFjdGVycyArPSAxLCBsZW5ndGggLT0gMTsKKyAgICAgIGNvbWJpbmF0aW9uLT5mbGFncyB8PSBLQ0ZfSU1NRURJQVRFX0tFWTsKKyAgICB9CisgIH0KKworICBpZiAoIWxlbmd0aCkgeworICAgIHJlcG9ydERhdGFFcnJvcihmaWxlLCAibWlzc2luZyBrZXkiKTsKKyAgICByZXR1cm4gMDsKKyAgfQorICBpZiAoIXBhcnNlS2V5TmFtZShmaWxlLCAmdmFsdWUsIGNoYXJhY3RlcnMsIGxlbmd0aCwga3RkKSkgcmV0dXJuIDA7CisKKyAgeworICAgIHVuc2lnbmVkIGludCBwb3NpdGlvbjsKKworICAgIGlmIChuZXdNb2RpZmllclBvc2l0aW9uKGNvbWJpbmF0aW9uLCAmdmFsdWUsICZwb3NpdGlvbikpIHsKKyAgICAgIHJlcG9ydERhdGFFcnJvcihmaWxlLCAiZHVwbGljYXRlIGtleTogJS4qIiBQUkl3cywgbGVuZ3RoLCBjaGFyYWN0ZXJzKTsKKyAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIGlmIChjb21iaW5hdGlvbi0+ZmxhZ3MgJiBLQ0ZfSU1NRURJQVRFX0tFWSkgeworICAgICAgY29tYmluYXRpb24tPmltbWVkaWF0ZUtleSA9IHZhbHVlOworICAgIH0gZWxzZSBpZiAoIWluc2VydE1vZGlmaWVyKGZpbGUsIGNvbWJpbmF0aW9uLCBwb3NpdGlvbiwgJnZhbHVlKSkgeworICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIGlmICh2YWx1ZS5udW1iZXIgPT0gS1RCX0tFWV9BTlkpIGNvbWJpbmF0aW9uLT5hbnlLZXlDb3VudCArPSAxOworICB9CisKKyAgcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQKK2dldEtleXNPcGVyYW5kIChEYXRhRmlsZSAqZmlsZSwgS2V5Q29tYmluYXRpb24gKmNvbWJpbmF0aW9uLCBLZXlUYWJsZURhdGEgKmt0ZCkgeworICBEYXRhU3RyaW5nIG5hbWVzOworCisgIGlmIChnZXREYXRhU3RyaW5nKGZpbGUsICZuYW1lcywgMSwgImtleSBjb21iaW5hdGlvbiIpKSB7CisgICAgaWYgKHBhcnNlS2V5Q29tYmluYXRpb24oZmlsZSwgY29tYmluYXRpb24sIG5hbWVzLmNoYXJhY3RlcnMsIG5hbWVzLmxlbmd0aCwga3RkKSkgcmV0dXJuIDE7CisgIH0KKworICByZXR1cm4gMDsKK30KKworc3RhdGljIGludAorc29ydEtleWJvYXJkRnVuY3Rpb25OYW1lcyAoY29uc3Qgdm9pZCAqZWxlbWVudDEsIGNvbnN0IHZvaWQgKmVsZW1lbnQyKSB7CisgIGNvbnN0IEtleWJvYXJkRnVuY3Rpb24gKmNvbnN0ICprYmYxID0gZWxlbWVudDE7CisgIGNvbnN0IEtleWJvYXJkRnVuY3Rpb24gKmNvbnN0ICprYmYyID0gZWxlbWVudDI7CisgIHJldHVybiBzdHJjYXNlY21wKCgqa2JmMSktPm5hbWUsICgqa2JmMiktPm5hbWUpOworfQorCitzdGF0aWMgaW50CitzZWFyY2hLZXlib2FyZEZ1bmN0aW9uTmFtZSAoY29uc3Qgdm9pZCAqdGFyZ2V0LCBjb25zdCB2b2lkICplbGVtZW50KSB7CisgIGNvbnN0IERhdGFPcGVyYW5kICpuYW1lID0gdGFyZ2V0OworICBjb25zdCBLZXlib2FyZEZ1bmN0aW9uICpjb25zdCAqa2JmID0gZWxlbWVudDsKKyAgcmV0dXJuIGNvbXBhcmVUb05hbWUobmFtZS0+Y2hhcmFjdGVycywgbmFtZS0+bGVuZ3RoLCAoKmtiZiktPm5hbWUpOworfQorCitzdGF0aWMgaW50CitwYXJzZUtleWJvYXJkRnVuY3Rpb25OYW1lIChEYXRhRmlsZSAqZmlsZSwgY29uc3QgS2V5Ym9hcmRGdW5jdGlvbiAqKmtleWJvYXJkRnVuY3Rpb24sIGNvbnN0IHdjaGFyX3QgKmNoYXJhY3RlcnMsIGludCBsZW5ndGgsIEtleVRhYmxlRGF0YSAqa3RkKSB7CisgIHN0YXRpYyBjb25zdCBLZXlib2FyZEZ1bmN0aW9uICoqc29ydGVkS2V5Ym9hcmRGdW5jdGlvbnMgPSBOVUxMOworCisgIGlmICghc29ydGVkS2V5Ym9hcmRGdW5jdGlvbnMpIHsKKyAgICBjb25zdCBLZXlib2FyZEZ1bmN0aW9uICoqbmV3VGFibGUgPSBtYWxsb2MoQVJSQVlfU0laRShuZXdUYWJsZSwga2V5Ym9hcmRGdW5jdGlvbkNvdW50KSk7CisKKyAgICBpZiAoIW5ld1RhYmxlKSB7CisgICAgICBsb2dNYWxsb2NFcnJvcigpOworICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgeworICAgICAgY29uc3QgS2V5Ym9hcmRGdW5jdGlvbiAqc291cmNlID0ga2V5Ym9hcmRGdW5jdGlvblRhYmxlOworICAgICAgY29uc3QgS2V5Ym9hcmRGdW5jdGlvbiAqKnRhcmdldCA9IG5ld1RhYmxlOworICAgICAgdW5zaWduZWQgaW50IGNvdW50ID0ga2V5Ym9hcmRGdW5jdGlvbkNvdW50OworCisgICAgICBkbyB7CisgICAgICAgICp0YXJnZXQrKyA9IHNvdXJjZSsrOworICAgICAgfSB3aGlsZSAoLS1jb3VudCk7CisKKyAgICAgIHFzb3J0KG5ld1RhYmxlLCBrZXlib2FyZEZ1bmN0aW9uQ291bnQsIHNpemVvZigqbmV3VGFibGUpLCBzb3J0S2V5Ym9hcmRGdW5jdGlvbk5hbWVzKTsKKyAgICB9CisKKyAgICBzb3J0ZWRLZXlib2FyZEZ1bmN0aW9ucyA9IG5ld1RhYmxlOworICAgIHJlZ2lzdGVyUHJvZ3JhbU1lbW9yeSgic29ydGVkLWtleWJvYXJkLWZ1bmN0aW9ucyIsICZzb3J0ZWRLZXlib2FyZEZ1bmN0aW9ucyk7CisgIH0KKworICB7CisgICAgY29uc3QgRGF0YU9wZXJhbmQgbmFtZSA9IHsKKyAgICAgIC5jaGFyYWN0ZXJzID0gY2hhcmFjdGVycywKKyAgICAgIC5sZW5ndGggPSBsZW5ndGgKKyAgICB9OworICAgIGNvbnN0IEtleWJvYXJkRnVuY3Rpb24gKmNvbnN0ICprYmYgPSBic2VhcmNoKCZuYW1lLCBzb3J0ZWRLZXlib2FyZEZ1bmN0aW9ucywga2V5Ym9hcmRGdW5jdGlvbkNvdW50LCBzaXplb2YoKnNvcnRlZEtleWJvYXJkRnVuY3Rpb25zKSwgc2VhcmNoS2V5Ym9hcmRGdW5jdGlvbk5hbWUpOworCisgICAgaWYgKGtiZikgeworICAgICAgKmtleWJvYXJkRnVuY3Rpb24gPSAqa2JmOworICAgICAgcmV0dXJuIDE7CisgICAgfQorICB9CisKKyAgcmVwb3J0RGF0YUVycm9yKGZpbGUsICJ1bmtub3duIGtleWJvYXJkIGZ1bmN0aW9uOiAlLioiIFBSSXdzLCBsZW5ndGgsIGNoYXJhY3RlcnMpOworICByZXR1cm4gMDsKK30KKworc3RhdGljIGludAorZ2V0S2V5Ym9hcmRGdW5jdGlvbk9wZXJhbmQgKERhdGFGaWxlICpmaWxlLCBjb25zdCBLZXlib2FyZEZ1bmN0aW9uICoqa2V5Ym9hcmRGdW5jdGlvbiwgS2V5VGFibGVEYXRhICprdGQpIHsKKyAgRGF0YU9wZXJhbmQgbmFtZTsKKworICBpZiAoZ2V0RGF0YU9wZXJhbmQoZmlsZSwgJm5hbWUsICJrZXlib2FyZCBmdW5jdGlvbiBuYW1lIikpIHsKKyAgICBpZiAocGFyc2VLZXlib2FyZEZ1bmN0aW9uTmFtZShmaWxlLCBrZXlib2FyZEZ1bmN0aW9uLCBuYW1lLmNoYXJhY3RlcnMsIG5hbWUubGVuZ3RoLCBrdGQpKSByZXR1cm4gMTsKKyAgfQorCisgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50Citzb3J0Q29tbWFuZE5hbWVzIChjb25zdCB2b2lkICplbGVtZW50MSwgY29uc3Qgdm9pZCAqZWxlbWVudDIpIHsKKyAgY29uc3QgQ29tbWFuZEVudHJ5ICpjb25zdCAqY21kMSA9IGVsZW1lbnQxOworICBjb25zdCBDb21tYW5kRW50cnkgKmNvbnN0ICpjbWQyID0gZWxlbWVudDI7CisgIHJldHVybiBzdHJjYXNlY21wKCgqY21kMSktPm5hbWUsICgqY21kMiktPm5hbWUpOworfQorCitzdGF0aWMgaW50CitzZWFyY2hDb21tYW5kTmFtZSAoY29uc3Qgdm9pZCAqdGFyZ2V0LCBjb25zdCB2b2lkICplbGVtZW50KSB7CisgIGNvbnN0IERhdGFPcGVyYW5kICpuYW1lID0gdGFyZ2V0OworICBjb25zdCBDb21tYW5kRW50cnkgKmNvbnN0ICpjbWQgPSBlbGVtZW50OworICByZXR1cm4gY29tcGFyZVRvTmFtZShuYW1lLT5jaGFyYWN0ZXJzLCBuYW1lLT5sZW5ndGgsICgqY21kKS0+bmFtZSk7Cit9CisKK3N0YXRpYyBpbnQKK2FsbG9jYXRlQ29tbWFuZFRhYmxlIChLZXlUYWJsZURhdGEgKmt0ZCkgeworICB7CisgICAgY29uc3QgQ29tbWFuZEVudHJ5ICpjb21tYW5kID0gY29tbWFuZFRhYmxlOworCisgICAga3RkLT5jb21tYW5kQ291bnQgPSAwOworICAgIHdoaWxlIChjb21tYW5kLT5uYW1lKSB7CisgICAgICBrdGQtPmNvbW1hbmRDb3VudCArPSAxOworICAgICAgY29tbWFuZCArPSAxOworICAgIH0KKyAgfQorCisgIGlmICgoa3RkLT5jb21tYW5kVGFibGUgPSBtYWxsb2Moa3RkLT5jb21tYW5kQ291bnQgKiBzaXplb2YoKmt0ZC0+Y29tbWFuZFRhYmxlKSkpKSB7CisgICAgeworICAgICAgY29uc3QgQ29tbWFuZEVudHJ5ICpjb21tYW5kID0gY29tbWFuZFRhYmxlOworICAgICAgY29uc3QgQ29tbWFuZEVudHJ5ICoqYWRkcmVzcyA9IGt0ZC0+Y29tbWFuZFRhYmxlOworICAgICAgd2hpbGUgKGNvbW1hbmQtPm5hbWUpICphZGRyZXNzKysgPSBjb21tYW5kKys7CisgICAgfQorCisgICAgcXNvcnQoa3RkLT5jb21tYW5kVGFibGUsIGt0ZC0+Y29tbWFuZENvdW50LCBzaXplb2YoKmt0ZC0+Y29tbWFuZFRhYmxlKSwgc29ydENvbW1hbmROYW1lcyk7CisgICAgcmV0dXJuIDE7CisgIH0KKworICByZXR1cm4gMDsKK30KKworc3RhdGljIGludAorYXBwbHlDb21tYW5kTW9kaWZpZXIgKGludCAqY29tbWFuZCwgY29uc3QgQ29tbWFuZE1vZGlmaWVyRW50cnkgKm1vZGlmaWVycywgY29uc3QgRGF0YU9wZXJhbmQgKm5hbWUpIHsKKyAgY29uc3QgQ29tbWFuZE1vZGlmaWVyRW50cnkgKm1vZGlmaWVyID0gbW9kaWZpZXJzOworCisgIHdoaWxlIChtb2RpZmllci0+bmFtZSkgeworICAgIGlmICghKCpjb21tYW5kICYgbW9kaWZpZXItPmJpdCkpIHsKKyAgICAgIGlmIChjb21wYXJlVG9OYW1lKG5hbWUtPmNoYXJhY3RlcnMsIG5hbWUtPmxlbmd0aCwgbW9kaWZpZXItPm5hbWUpID09IDApIHsKKyAgICAgICAgKmNvbW1hbmQgfD0gbW9kaWZpZXItPmJpdDsKKyAgICAgICAgcmV0dXJuIDE7CisgICAgICB9CisgICAgfQorCisgICAgbW9kaWZpZXIgKz0gMTsKKyAgfQorCisgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50CitwYXJzZUNvbW1hbmRPcGVyYW5kIChEYXRhRmlsZSAqZmlsZSwgQm91bmRDb21tYW5kICpjbWQsIGNvbnN0IHdjaGFyX3QgKmNoYXJhY3RlcnMsIGludCBsZW5ndGgsIEtleVRhYmxlRGF0YSAqa3RkKSB7CisgIGludCBvZmZzZXREb25lID0gMDsKKyAgaW50IHVuaWNvZGVEb25lID0gMDsKKworICBjb25zdCB3Y2hhcl90ICplbmQgPSB3bWVtY2hyKGNoYXJhY3RlcnMsIFdDX0MoJysnKSwgbGVuZ3RoKTsKKyAgY29uc3QgQ29tbWFuZEVudHJ5ICpjb25zdCAqY29tbWFuZDsKKworICB7CisgICAgY29uc3QgRGF0YU9wZXJhbmQgbmFtZSA9IHsKKyAgICAgIC5jaGFyYWN0ZXJzID0gY2hhcmFjdGVycywKKyAgICAgIC5sZW5ndGggPSBlbmQ/IGVuZC1jaGFyYWN0ZXJzOiBsZW5ndGgKKyAgICB9OworCisgICAgaWYgKCFuYW1lLmxlbmd0aCkgeworICAgICAgcmVwb3J0RGF0YUVycm9yKGZpbGUsICJtaXNzaW5nIGNvbW1hbmQgbmFtZSIpOworICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgaWYgKCEoY29tbWFuZCA9IGJzZWFyY2goJm5hbWUsIGt0ZC0+Y29tbWFuZFRhYmxlLCBrdGQtPmNvbW1hbmRDb3VudCwgc2l6ZW9mKCprdGQtPmNvbW1hbmRUYWJsZSksIHNlYXJjaENvbW1hbmROYW1lKSkpIHsKKyAgICAgIHJlcG9ydERhdGFFcnJvcihmaWxlLCAidW5rbm93biBjb21tYW5kIG5hbWU6ICUuKiIgUFJJd3MsIG5hbWUubGVuZ3RoLCBuYW1lLmNoYXJhY3RlcnMpOworICAgICAgcmV0dXJuIDA7CisgICAgfQorICB9CisKKyAgY21kLT52YWx1ZSA9IChjbWQtPmVudHJ5ID0gKmNvbW1hbmQpLT5jb2RlOworCisgIHdoaWxlIChlbmQpIHsKKyAgICBEYXRhT3BlcmFuZCBtb2RpZmllcjsKKworICAgIGlmICgobW9kaWZpZXIubGVuZ3RoID0gKGxlbmd0aCAtPSAoZW5kIC0gY2hhcmFjdGVycykgKyAxKSkpIHsKKyAgICAgIG1vZGlmaWVyLmNoYXJhY3RlcnMgPSBjaGFyYWN0ZXJzID0gZW5kICsgMTsKKyAgICAgIGVuZCA9IHdtZW1jaHIoY2hhcmFjdGVycywgV0NfQygnKycpLCBsZW5ndGgpOworICAgICAgaWYgKGVuZCkgbW9kaWZpZXIubGVuZ3RoID0gZW5kIC0gY2hhcmFjdGVyczsKKyAgICB9CisKKyAgICBpZiAoIW1vZGlmaWVyLmxlbmd0aCkgeworICAgICAgcmVwb3J0RGF0YUVycm9yKGZpbGUsICJtaXNzaW5nIGNvbW1hbmQgbW9kaWZpZXIiKTsKKyAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIGlmICgoKmNvbW1hbmQpLT5pc1RvZ2dsZSAmJiAhKGNtZC0+dmFsdWUgJiBCUkxfRkxHX1RPR0dMRV9NQVNLKSkgeworICAgICAgaWYgKGFwcGx5Q29tbWFuZE1vZGlmaWVyKCZjbWQtPnZhbHVlLCBjb21tYW5kTW9kaWZpZXJUYWJsZV90b2dnbGUsICZtb2RpZmllcikpIGNvbnRpbnVlOworICAgIH0KKworICAgIGlmICgoKmNvbW1hbmQpLT5pc01vdGlvbikgeworICAgICAgaWYgKGFwcGx5Q29tbWFuZE1vZGlmaWVyKCZjbWQtPnZhbHVlLCBjb21tYW5kTW9kaWZpZXJUYWJsZV9tb3Rpb24sICZtb2RpZmllcikpIGNvbnRpbnVlOworICAgIH0KKworICAgIGlmICgoKmNvbW1hbmQpLT5pc1JvdykgeworICAgICAgaWYgKGFwcGx5Q29tbWFuZE1vZGlmaWVyKCZjbWQtPnZhbHVlLCBjb21tYW5kTW9kaWZpZXJUYWJsZV9yb3csICZtb2RpZmllcikpIGNvbnRpbnVlOworICAgIH0KKworICAgIGlmICgoKmNvbW1hbmQpLT5pc1ZlcnRpY2FsKSB7CisgICAgICBpZiAoYXBwbHlDb21tYW5kTW9kaWZpZXIoJmNtZC0+dmFsdWUsIGNvbW1hbmRNb2RpZmllclRhYmxlX3ZlcnRpY2FsLCAmbW9kaWZpZXIpKSBjb250aW51ZTsKKyAgICB9CisKKyAgICBpZiAoKCpjb21tYW5kKS0+aXNJbnB1dCkgeworICAgICAgaWYgKGFwcGx5Q29tbWFuZE1vZGlmaWVyKCZjbWQtPnZhbHVlLCBjb21tYW5kTW9kaWZpZXJUYWJsZV9pbnB1dCwgJm1vZGlmaWVyKSkgY29udGludWU7CisgICAgfQorCisgICAgaWYgKCgqY29tbWFuZCktPmlzQ2hhcmFjdGVyKSB7CisgICAgICBpZiAoYXBwbHlDb21tYW5kTW9kaWZpZXIoJmNtZC0+dmFsdWUsIGNvbW1hbmRNb2RpZmllclRhYmxlX2NoYXJhY3RlciwgJm1vZGlmaWVyKSkgY29udGludWU7CisKKyAgICAgIGlmICghdW5pY29kZURvbmUpIHsKKyAgICAgICAgaWYgKG1vZGlmaWVyLmxlbmd0aCA9PSAxKSB7CisgICAgICAgICAgY21kLT52YWx1ZSB8PSBCUkxfQVJHX1NFVChtb2RpZmllci5jaGFyYWN0ZXJzWzBdKTsKKyAgICAgICAgICB1bmljb2RlRG9uZSA9IDE7CisgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoKCpjb21tYW5kKS0+aXNCcmFpbGxlKSB7CisgICAgICBpZiAoYXBwbHlDb21tYW5kTW9kaWZpZXIoJmNtZC0+dmFsdWUsIGNvbW1hbmRNb2RpZmllclRhYmxlX2JyYWlsbGUsICZtb2RpZmllcikpIGNvbnRpbnVlOworICAgICAgaWYgKGFwcGx5Q29tbWFuZE1vZGlmaWVyKCZjbWQtPnZhbHVlLCBjb21tYW5kTW9kaWZpZXJUYWJsZV9jaGFyYWN0ZXIsICZtb2RpZmllcikpIGNvbnRpbnVlOworICAgIH0KKworICAgIGlmICgoKmNvbW1hbmQpLT5pc0tleWJvYXJkKSB7CisgICAgICBpZiAoYXBwbHlDb21tYW5kTW9kaWZpZXIoJmNtZC0+dmFsdWUsIGNvbW1hbmRNb2RpZmllclRhYmxlX2tleWJvYXJkLCAmbW9kaWZpZXIpKSBjb250aW51ZTsKKyAgICB9CisKKyAgICBpZiAoIW9mZnNldERvbmUpIHsKKyAgICAgIGlmICgoKmNvbW1hbmQpLT5jb2RlID09IEJSTF9DTURfQkxLKENPTlRFWFQpKSB7CisgICAgICAgIHVuc2lnbmVkIGNoYXIgY29udGV4dDsKKworICAgICAgICBpZiAoZmluZEtleUNvbnRleHQoJmNvbnRleHQsIG1vZGlmaWVyLmNoYXJhY3RlcnMsIG1vZGlmaWVyLmxlbmd0aCwga3RkKSkgeworICAgICAgICAgIEtleUNvbnRleHQgKmN0eCA9IGdldEtleUNvbnRleHQoa3RkLCBjb250ZXh0KTsKKyAgICAgICAgICBpZiAoIWN0eCkgcmV0dXJuIDA7CisKKyAgICAgICAgICBpZiAoY3R4LT5pc1NwZWNpYWwpIHsKKyAgICAgICAgICAgIHJlcG9ydERhdGFFcnJvcihmaWxlLCAiaW52YWxpZCB0YXJnZXQgY29udGV4dDogJSJQUkl3cywgY3R4LT5uYW1lKTsKKyAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgY3R4LT5pc1JlZmVyZW5jZWQgPSAxOworICAgICAgICAgICAgY21kLT52YWx1ZSArPSBjb250ZXh0IC0gS1RCX0NUWF9ERUZBVUxUOworICAgICAgICAgIH0KKworICAgICAgICAgIG9mZnNldERvbmUgPSAxOworICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICB9IGVsc2UgaWYgKCgoKmNvbW1hbmQpLT5pc09mZnNldCB8fCAoKmNvbW1hbmQpLT5pc0NvbHVtbikgfHwgKCpjb21tYW5kKS0+aXNSb3cpIHsKKyAgICAgICAgaW50IG1heGltdW0gPSBCUkxfTVNLX0FSRyAtICgoKmNvbW1hbmQpLT5jb2RlICYgQlJMX01TS19BUkcpOworICAgICAgICBpbnQgb2Zmc2V0OworCisgICAgICAgIGlmIChpc051bWJlcigmb2Zmc2V0LCBtb2RpZmllci5jaGFyYWN0ZXJzLCBtb2RpZmllci5sZW5ndGgpKSB7CisgICAgICAgICAgaWYgKChvZmZzZXQgPj0gMCkgJiYgKG9mZnNldCA8PSBtYXhpbXVtKSkgeworICAgICAgICAgICAgY21kLT52YWx1ZSArPSBvZmZzZXQ7CisgICAgICAgICAgICBvZmZzZXREb25lID0gMTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgfQorICAgIH0KKworICAgIHJlcG9ydERhdGFFcnJvcihmaWxlLCAidW5rbm93biBjb21tYW5kIG1vZGlmaWVyOiAlLioiIFBSSXdzLCBtb2RpZmllci5sZW5ndGgsIG1vZGlmaWVyLmNoYXJhY3RlcnMpOworICAgIHJldHVybiAwOworICB9CisKKyAgcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQKK2dldENvbW1hbmRzT3BlcmFuZCAoRGF0YUZpbGUgKmZpbGUsIEJvdW5kQ29tbWFuZCAqKmNtZHMsIEtleVRhYmxlRGF0YSAqa3RkKSB7CisgIERhdGFTdHJpbmcgY29tbWFuZHM7CisKKyAgaWYgKGdldERhdGFTdHJpbmcoZmlsZSwgJmNvbW1hbmRzLCAxLCAiY29tbWFuZCIpKSB7CisgICAgY29uc3Qgd2NoYXJfdCAqY2hhcmFjdGVycyA9IGNvbW1hbmRzLmNoYXJhY3RlcnM7CisgICAgdW5zaWduZWQgaW50IGxlbmd0aCA9IGNvbW1hbmRzLmxlbmd0aDsKKyAgICBpbnQgZmlyc3QgPSAxOworCisgICAgd2hpbGUgKDEpIHsKKyAgICAgIGludCBjb3VudDsKKworICAgICAgQm91bmRDb21tYW5kICpjbWQgPSAqY21kcysrOworICAgICAgaWYgKCFjbWQpIGJyZWFrOworCisgICAgICBpZiAoZmlyc3QpIHsKKyAgICAgICAgZmlyc3QgPSAwOworICAgICAgfSBlbHNlIGlmIChsZW5ndGgpIHsKKyAgICAgICAgY2hhcmFjdGVycyArPSAxOworICAgICAgICBsZW5ndGggLT0gMTsKKyAgICAgIH0KKworICAgICAgeworICAgICAgICBjb25zdCB3Y2hhcl90ICplbmQgPSB3bWVtY2hyKGNoYXJhY3RlcnMsIFdDX0MoJzonKSwgbGVuZ3RoKTsKKyAgICAgICAgY291bnQgPSBlbmQ/IChlbmQgLSBjaGFyYWN0ZXJzKTogbGVuZ3RoOworICAgICAgfQorCisgICAgICBpZiAoIWNvdW50KSB7CisgICAgICAgICpjbWQgPSBrdGQtPm51bGxCb3VuZENvbW1hbmQ7CisgICAgICB9IGVsc2UgaWYgKCFwYXJzZUNvbW1hbmRPcGVyYW5kKGZpbGUsIGNtZCwgY2hhcmFjdGVycywgY291bnQsIGt0ZCkpIHsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgICB9CisKKyAgICAgIGNoYXJhY3RlcnMgKz0gY291bnQ7CisgICAgICBsZW5ndGggLT0gY291bnQ7CisgICAgfQorCisgICAgaWYgKCFsZW5ndGgpIHJldHVybiAxOworICAgIHJlcG9ydERhdGFFcnJvcihmaWxlLCAidG9vIG1hbnkgY29tbWFuZHM6ICUuKiIgUFJJd3MsIGxlbmd0aCwgY2hhcmFjdGVycyk7CisgIH0KKworICByZXR1cm4gMDsKK30KKworc3RhdGljIGludAorZ2V0Q29tbWFuZE9wZXJhbmQgKERhdGFGaWxlICpmaWxlLCBCb3VuZENvbW1hbmQgKmNtZCwgS2V5VGFibGVEYXRhICprdGQpIHsKKyAgQm91bmRDb21tYW5kICpjbWRzW10gPSB7Y21kLCBOVUxMfTsKKworICByZXR1cm4gZ2V0Q29tbWFuZHNPcGVyYW5kKGZpbGUsIGNtZHMsIGt0ZCk7Cit9CisKK3N0YXRpYyBpbnQKK2NvbXBhcmVLZXlDb21iaW5hdGlvbnMgKGNvbnN0IEtleUNvbWJpbmF0aW9uICpjb21iaW5hdGlvbjEsIGNvbnN0IEtleUNvbWJpbmF0aW9uICpjb21iaW5hdGlvbjIpIHsKKyAgaWYgKGNvbWJpbmF0aW9uMS0+ZmxhZ3MgJiBLQ0ZfSU1NRURJQVRFX0tFWSkgeworICAgIGlmIChjb21iaW5hdGlvbjItPmZsYWdzICYgS0NGX0lNTUVESUFURV9LRVkpIHsKKyAgICAgIGludCByZWxhdGlvbiA9IGNvbXBhcmVLZXlWYWx1ZXMoJmNvbWJpbmF0aW9uMS0+aW1tZWRpYXRlS2V5LCAmY29tYmluYXRpb24yLT5pbW1lZGlhdGVLZXkpOworICAgICAgaWYgKHJlbGF0aW9uKSByZXR1cm4gcmVsYXRpb247CisgICAgfSBlbHNlIHsKKyAgICAgIHJldHVybiAtMTsKKyAgICB9CisgIH0gZWxzZSBpZiAoY29tYmluYXRpb24yLT5mbGFncyAmIEtDRl9JTU1FRElBVEVfS0VZKSB7CisgICAgcmV0dXJuIDE7CisgIH0KKworICByZXR1cm4gY29tcGFyZUtleUFycmF5cyhjb21iaW5hdGlvbjEtPm1vZGlmaWVyQ291bnQsIGNvbWJpbmF0aW9uMS0+bW9kaWZpZXJLZXlzLAorICAgICAgICAgICAgICAgICAgICAgICAgICBjb21iaW5hdGlvbjItPm1vZGlmaWVyQ291bnQsIGNvbWJpbmF0aW9uMi0+bW9kaWZpZXJLZXlzKTsKK30KKworaW50Citjb21wYXJlS2V5QmluZGluZ3MgKGNvbnN0IEtleUJpbmRpbmcgKmJpbmRpbmcxLCBjb25zdCBLZXlCaW5kaW5nICpiaW5kaW5nMikgeworICByZXR1cm4gY29tcGFyZUtleUNvbWJpbmF0aW9ucygmYmluZGluZzEtPmtleUNvbWJpbmF0aW9uLCAmYmluZGluZzItPmtleUNvbWJpbmF0aW9uKTsKK30KKworc3RhdGljIGludAorZmluZEtleUJpbmRpbmcgKAorICBjb25zdCBLZXlCaW5kaW5nICpiaW5kaW5ncywgdW5zaWduZWQgaW50IGNvdW50LAorICBjb25zdCBLZXlCaW5kaW5nICp0YXJnZXQsIHVuc2lnbmVkIGludCAqcG9zaXRpb24KKykgeworICBpbnQgZmlyc3QgPSAwOworICBpbnQgbGFzdCA9IGNvdW50IC0gMTsKKworICB3aGlsZSAoZmlyc3QgPD0gbGFzdCkgeworICAgIGludCBjdXJyZW50ID0gKGZpcnN0ICsgbGFzdCkgLyAyOworICAgIGNvbnN0IEtleUJpbmRpbmcgKmJpbmRpbmcgPSAmYmluZGluZ3NbY3VycmVudF07CisgICAgaW50IHJlbGF0aW9uID0gY29tcGFyZUtleUJpbmRpbmdzKHRhcmdldCwgYmluZGluZyk7CisKKyAgICBpZiAocmVsYXRpb24gPCAwKSB7CisgICAgICBsYXN0ID0gY3VycmVudCAtIDE7CisgICAgfSBlbHNlIGlmIChyZWxhdGlvbiA+IDApIHsKKyAgICAgIGZpcnN0ID0gY3VycmVudCArIDE7CisgICAgfSBlbHNlIHsKKyAgICAgICpwb3NpdGlvbiA9IGN1cnJlbnQ7CisgICAgICByZXR1cm4gMTsKKyAgICB9CisgIH0KKworICAqcG9zaXRpb24gPSBmaXJzdDsKKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK2FkZEtleUJpbmRpbmcgKEtleUNvbnRleHQgKmN0eCwgY29uc3QgS2V5QmluZGluZyAqYmluZGluZywgaW50IGluY29tcGxldGUpIHsKKyAgdW5zaWduZWQgaW50IHBvc2l0aW9uOworICBpbnQgZm91bmQgPSBmaW5kS2V5QmluZGluZyhjdHgtPmtleUJpbmRpbmdzLnRhYmxlLCBjdHgtPmtleUJpbmRpbmdzLmNvdW50LCBiaW5kaW5nLCAmcG9zaXRpb24pOworCisgIGlmICghZm91bmQpIHsKKyAgICBpZiAoY3R4LT5rZXlCaW5kaW5ncy5jb3VudCA9PSBjdHgtPmtleUJpbmRpbmdzLnNpemUpIHsKKyAgICAgIHVuc2lnbmVkIGludCBuZXdTaXplID0gY3R4LT5rZXlCaW5kaW5ncy5zaXplPyBjdHgtPmtleUJpbmRpbmdzLnNpemU8PDE6IDBYMTA7CisgICAgICBLZXlCaW5kaW5nICpuZXdUYWJsZSA9IHJlYWxsb2MoY3R4LT5rZXlCaW5kaW5ncy50YWJsZSwgQVJSQVlfU0laRShuZXdUYWJsZSwgbmV3U2l6ZSkpOworCisgICAgICBpZiAoIW5ld1RhYmxlKSB7CisgICAgICAgIGxvZ01hbGxvY0Vycm9yKCk7CisgICAgICAgIHJldHVybiAwOworICAgICAgfQorCisgICAgICBjdHgtPmtleUJpbmRpbmdzLnRhYmxlID0gbmV3VGFibGU7CisgICAgICBjdHgtPmtleUJpbmRpbmdzLnNpemUgPSBuZXdTaXplOworICAgIH0KKworICAgIG1lbW1vdmUoJmN0eC0+a2V5QmluZGluZ3MudGFibGVbcG9zaXRpb24rMV0sCisgICAgICAgICAgICAmY3R4LT5rZXlCaW5kaW5ncy50YWJsZVtwb3NpdGlvbl0sCisgICAgICAgICAgICAoY3R4LT5rZXlCaW5kaW5ncy5jb3VudCsrIC0gcG9zaXRpb24pICogc2l6ZW9mKCpiaW5kaW5nKSk7CisgIH0gZWxzZSBpZiAoaW5jb21wbGV0ZSkgeworICAgIHJldHVybiAxOworICB9CisKKyAgeworICAgIEtleUJpbmRpbmcgKmtiID0gJmN0eC0+a2V5QmluZGluZ3MudGFibGVbcG9zaXRpb25dOworICAgICprYiA9ICpiaW5kaW5nOworICAgIGlmIChmb3VuZCkga2ItPmZsYWdzIHw9IEtCRl9EVVBMSUNBVEU7CisgIH0KKworICByZXR1cm4gMTsKK30KKworc3RhdGljIHZvaWQKK2luaXRpYWxpemVLZXlCaW5kaW5nIChLZXlCaW5kaW5nICpiaW5kaW5nLCBLZXlUYWJsZURhdGEgKmt0ZCkgeworICBtZW1zZXQoYmluZGluZywgMCwgc2l6ZW9mKCpiaW5kaW5nKSk7CisgIGJpbmRpbmctPnByaW1hcnlDb21tYW5kID0ga3RkLT5udWxsQm91bmRDb21tYW5kOworICBiaW5kaW5nLT5zZWNvbmRhcnlDb21tYW5kID0ga3RkLT5udWxsQm91bmRDb21tYW5kOworICBpZiAoaGlkZUJpbmRpbmdzKGt0ZCkpIGJpbmRpbmctPmZsYWdzIHw9IEtCRl9ISURERU47Cit9CisKK2ludAorY29tcGFyZUhvdGtleUVudHJpZXMgKGNvbnN0IEhvdGtleUVudHJ5ICpob3RrZXkxLCBjb25zdCBIb3RrZXlFbnRyeSAqaG90a2V5MikgeworICByZXR1cm4gY29tcGFyZUtleVZhbHVlcygmaG90a2V5MS0+a2V5VmFsdWUsICZob3RrZXkyLT5rZXlWYWx1ZSk7Cit9CisKK3N0YXRpYyBpbnQKK2ZpbmRIb3RrZXlFbnRyeSAoCisgIGNvbnN0IEhvdGtleUVudHJ5ICpob3RrZXlFbnRyaWVzLCB1bnNpZ25lZCBpbnQgY291bnQsCisgIGNvbnN0IEhvdGtleUVudHJ5ICp0YXJnZXQsIHVuc2lnbmVkIGludCAqcG9zaXRpb24KKykgeworICBpbnQgZmlyc3QgPSAwOworICBpbnQgbGFzdCA9IGNvdW50IC0gMTsKKworICB3aGlsZSAoZmlyc3QgPD0gbGFzdCkgeworICAgIGludCBjdXJyZW50ID0gKGZpcnN0ICsgbGFzdCkgLyAyOworICAgIGNvbnN0IEhvdGtleUVudHJ5ICpob3RrZXkgPSAmaG90a2V5RW50cmllc1tjdXJyZW50XTsKKyAgICBpbnQgcmVsYXRpb24gPSBjb21wYXJlSG90a2V5RW50cmllcyh0YXJnZXQsIGhvdGtleSk7CisKKyAgICBpZiAocmVsYXRpb24gPCAwKSB7CisgICAgICBsYXN0ID0gY3VycmVudCAtIDE7CisgICAgfSBlbHNlIGlmIChyZWxhdGlvbiA+IDApIHsKKyAgICAgIGZpcnN0ID0gY3VycmVudCArIDE7CisgICAgfSBlbHNlIHsKKyAgICAgICpwb3NpdGlvbiA9IGN1cnJlbnQ7CisgICAgICByZXR1cm4gMTsKKyAgICB9CisgIH0KKworICAqcG9zaXRpb24gPSBmaXJzdDsKKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK2FkZEhvdGtleSAoS2V5Q29udGV4dCAqY3R4LCBjb25zdCBIb3RrZXlFbnRyeSAqaG90a2V5KSB7CisgIHVuc2lnbmVkIGludCBwb3NpdGlvbjsKKyAgaW50IGZvdW5kID0gZmluZEhvdGtleUVudHJ5KGN0eC0+aG90a2V5cy50YWJsZSwgY3R4LT5ob3RrZXlzLmNvdW50LCBob3RrZXksICZwb3NpdGlvbik7CisKKyAgaWYgKCFmb3VuZCkgeworICAgIGlmIChjdHgtPmhvdGtleXMuY291bnQgPT0gY3R4LT5ob3RrZXlzLnNpemUpIHsKKyAgICAgIHVuc2lnbmVkIGludCBuZXdTaXplID0gY3R4LT5ob3RrZXlzLnNpemU/IGN0eC0+aG90a2V5cy5zaXplPDwxOiAwWDg7CisgICAgICBIb3RrZXlFbnRyeSAqbmV3VGFibGUgPSByZWFsbG9jKGN0eC0+aG90a2V5cy50YWJsZSwgQVJSQVlfU0laRShuZXdUYWJsZSwgbmV3U2l6ZSkpOworCisgICAgICBpZiAoIW5ld1RhYmxlKSB7CisgICAgICAgIGxvZ01hbGxvY0Vycm9yKCk7CisgICAgICAgIHJldHVybiAwOworICAgICAgfQorCisgICAgICBjdHgtPmhvdGtleXMudGFibGUgPSBuZXdUYWJsZTsKKyAgICAgIGN0eC0+aG90a2V5cy5zaXplID0gbmV3U2l6ZTsKKyAgICB9CisKKyAgICBtZW1tb3ZlKCZjdHgtPmhvdGtleXMudGFibGVbcG9zaXRpb24rMV0sCisgICAgICAgICAgICAmY3R4LT5ob3RrZXlzLnRhYmxlW3Bvc2l0aW9uXSwKKyAgICAgICAgICAgIChjdHgtPmhvdGtleXMuY291bnQrKyAtIHBvc2l0aW9uKSAqIHNpemVvZigqaG90a2V5KSk7CisgIH0KKworICB7CisgICAgSG90a2V5RW50cnkgKmhrID0gJmN0eC0+aG90a2V5cy50YWJsZVtwb3NpdGlvbl07CisgICAgKmhrID0gKmhvdGtleTsKKyAgICBpZiAoZm91bmQpIGhrLT5mbGFncyB8PSBIS0ZfRFVQTElDQVRFOworICB9CisKKyAgcmV0dXJuIDE7Cit9CisKK2ludAorY29tcGFyZU1hcHBlZEtleUVudHJpZXMgKGNvbnN0IE1hcHBlZEtleUVudHJ5ICptYXAxLCBjb25zdCBNYXBwZWRLZXlFbnRyeSAqbWFwMikgeworICByZXR1cm4gY29tcGFyZUtleVZhbHVlcygmbWFwMS0+a2V5VmFsdWUsICZtYXAyLT5rZXlWYWx1ZSk7Cit9CisKK3N0YXRpYyBpbnQKK2ZpbmRNYXBwZWRLZXlFbnRyeSAoCisgIGNvbnN0IE1hcHBlZEtleUVudHJ5ICptYXBwZWRLZXlFbnRyaWVzLCB1bnNpZ25lZCBpbnQgY291bnQsCisgIGNvbnN0IE1hcHBlZEtleUVudHJ5ICp0YXJnZXQsIHVuc2lnbmVkIGludCAqcG9zaXRpb24KKykgeworICBpbnQgZmlyc3QgPSAwOworICBpbnQgbGFzdCA9IGNvdW50IC0gMTsKKworICB3aGlsZSAoZmlyc3QgPD0gbGFzdCkgeworICAgIGludCBjdXJyZW50ID0gKGZpcnN0ICsgbGFzdCkgLyAyOworICAgIGNvbnN0IE1hcHBlZEtleUVudHJ5ICptYXAgPSAmbWFwcGVkS2V5RW50cmllc1tjdXJyZW50XTsKKyAgICBpbnQgcmVsYXRpb24gPSBjb21wYXJlTWFwcGVkS2V5RW50cmllcyh0YXJnZXQsIG1hcCk7CisKKyAgICBpZiAocmVsYXRpb24gPCAwKSB7CisgICAgICBsYXN0ID0gY3VycmVudCAtIDE7CisgICAgfSBlbHNlIGlmIChyZWxhdGlvbiA+IDApIHsKKyAgICAgIGZpcnN0ID0gY3VycmVudCArIDE7CisgICAgfSBlbHNlIHsKKyAgICAgICpwb3NpdGlvbiA9IGN1cnJlbnQ7CisgICAgICByZXR1cm4gMTsKKyAgICB9CisgIH0KKworICAqcG9zaXRpb24gPSBmaXJzdDsKKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK2FkZE1hcHBlZEtleSAoS2V5Q29udGV4dCAqY3R4LCBjb25zdCBNYXBwZWRLZXlFbnRyeSAqbWFwKSB7CisgIHVuc2lnbmVkIGludCBwb3NpdGlvbjsKKyAgaW50IGZvdW5kID0gZmluZE1hcHBlZEtleUVudHJ5KGN0eC0+bWFwcGVkS2V5cy50YWJsZSwgY3R4LT5tYXBwZWRLZXlzLmNvdW50LCBtYXAsICZwb3NpdGlvbik7CisKKyAgaWYgKCFmb3VuZCkgeworICAgIGlmIChjdHgtPm1hcHBlZEtleXMuY291bnQgPT0gY3R4LT5tYXBwZWRLZXlzLnNpemUpIHsKKyAgICAgIHVuc2lnbmVkIGludCBuZXdTaXplID0gY3R4LT5tYXBwZWRLZXlzLnNpemU/IGN0eC0+bWFwcGVkS2V5cy5zaXplPDwxOiAwWDg7CisgICAgICBNYXBwZWRLZXlFbnRyeSAqbmV3VGFibGUgPSByZWFsbG9jKGN0eC0+bWFwcGVkS2V5cy50YWJsZSwgQVJSQVlfU0laRShuZXdUYWJsZSwgbmV3U2l6ZSkpOworCisgICAgICBpZiAoIW5ld1RhYmxlKSB7CisgICAgICAgIGxvZ01hbGxvY0Vycm9yKCk7CisgICAgICAgIHJldHVybiAwOworICAgICAgfQorCisgICAgICBjdHgtPm1hcHBlZEtleXMudGFibGUgPSBuZXdUYWJsZTsKKyAgICAgIGN0eC0+bWFwcGVkS2V5cy5zaXplID0gbmV3U2l6ZTsKKyAgICB9CisKKyAgICBtZW1tb3ZlKCZjdHgtPm1hcHBlZEtleXMudGFibGVbcG9zaXRpb24rMV0sCisgICAgICAgICAgICAmY3R4LT5tYXBwZWRLZXlzLnRhYmxlW3Bvc2l0aW9uXSwKKyAgICAgICAgICAgIChjdHgtPm1hcHBlZEtleXMuY291bnQrKyAtIHBvc2l0aW9uKSAqIHNpemVvZigqbWFwKSk7CisgIH0KKworICB7CisgICAgTWFwcGVkS2V5RW50cnkgKm1rID0gJmN0eC0+bWFwcGVkS2V5cy50YWJsZVtwb3NpdGlvbl07CisgICAgKm1rID0gKm1hcDsKKyAgICBpZiAoZm91bmQpIG1rLT5mbGFncyB8PSBNS0ZfRFVQTElDQVRFOworICB9CisKKyAgcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBEQVRBX09QRVJBTkRTX1BST0NFU1NPUihwcm9jZXNzQmluZE9wZXJhbmRzKSB7CisgIEtleVRhYmxlRGF0YSAqa3RkID0gZGF0YTsKKworICBLZXlCaW5kaW5nIGJpbmRpbmc7CisgIGluaXRpYWxpemVLZXlCaW5kaW5nKCZiaW5kaW5nLCBrdGQpOworCisgIGlmIChnZXRLZXlzT3BlcmFuZChmaWxlLCAmYmluZGluZy5rZXlDb21iaW5hdGlvbiwga3RkKSkgeworICAgIEJvdW5kQ29tbWFuZCAqY21kc1tdID0geworICAgICAgJmJpbmRpbmcucHJpbWFyeUNvbW1hbmQsCisgICAgICAmYmluZGluZy5zZWNvbmRhcnlDb21tYW5kLAorICAgICAgTlVMTAorICAgIH07CisKKyAgICBpZiAoZ2V0Q29tbWFuZHNPcGVyYW5kKGZpbGUsIGNtZHMsIGt0ZCkpIHsKKyAgICAgIEtleUNvbnRleHQgKmN0eCA9IGdldEN1cnJlbnRLZXlDb250ZXh0KGt0ZCk7CisKKyAgICAgIGlmIChjdHgpIHsKKyAgICAgICAgaWYgKGFkZEtleUJpbmRpbmcoY3R4LCAmYmluZGluZywgMCkpIHsKKyAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgfQorICAgICAgfQorCisgICAgICByZXR1cm4gMDsKKyAgICB9CisgIH0KKworICByZXR1cm4gMTsKK30KKworc3RhdGljIERBVEFfT1BFUkFORFNfUFJPQ0VTU09SKHByb2Nlc3NDb250ZXh0T3BlcmFuZHMpIHsKKyAgS2V5VGFibGVEYXRhICprdGQgPSBkYXRhOworICBEYXRhU3RyaW5nIG5hbWU7CisKKyAgaWYgKGdldERhdGFTdHJpbmcoZmlsZSwgJm5hbWUsIDEsICJjb250ZXh0IG5hbWUiKSkgeworICAgIGlmIChmaW5kS2V5Q29udGV4dCgma3RkLT5jb250ZXh0LCBuYW1lLmNoYXJhY3RlcnMsIG5hbWUubGVuZ3RoLCBrdGQpKSB7CisgICAgICBLZXlDb250ZXh0ICpjdHggPSBnZXRDdXJyZW50S2V5Q29udGV4dChrdGQpOworCisgICAgICBpZiAoY3R4KSB7CisgICAgICAgIERhdGFPcGVyYW5kIHRpdGxlOworCisgICAgICAgIGN0eC0+aXNEZWZpbmVkID0gMTsKKworICAgICAgICBpZiAoZ2V0VGV4dE9wZXJhbmQoZmlsZSwgJnRpdGxlLCBOVUxMKSkgeworICAgICAgICAgIGlmIChjdHgtPnRpdGxlKSB7CisgICAgICAgICAgICBpZiAoKHRpdGxlLmxlbmd0aCAhPSB3Y3NsZW4oY3R4LT50aXRsZSkpIHx8CisgICAgICAgICAgICAgICAgKHdtZW1jbXAodGl0bGUuY2hhcmFjdGVycywgY3R4LT50aXRsZSwgdGl0bGUubGVuZ3RoKSAhPSAwKSkgeworICAgICAgICAgICAgICByZXBvcnREYXRhRXJyb3IoZmlsZSwgImNvbnRleHQgdGl0bGUgcmVkZWZpbmVkIik7CisgICAgICAgICAgICB9CisgICAgICAgICAgfSBlbHNlIGlmICghc2V0S2V5Q29udGV4dFRpdGxlKGN0eCwgdGl0bGUuY2hhcmFjdGVycywgdGl0bGUubGVuZ3RoKSkgeworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICB9CisgICAgfQorICB9CisKKyAgcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBEQVRBX09QRVJBTkRTX1BST0NFU1NPUihwcm9jZXNzSGlkZU9wZXJhbmRzKSB7CisgIEtleVRhYmxlRGF0YSAqa3RkID0gZGF0YTsKKyAgRGF0YVN0cmluZyBzdGF0ZTsKKworICBpZiAoZ2V0RGF0YVN0cmluZyhmaWxlLCAmc3RhdGUsIDEsICJoaWRlIHN0YXRlIikpIHsKKyAgICBpZiAoaXNLZXl3b3JkKFdTX0MoIm9uIiksIHN0YXRlLmNoYXJhY3RlcnMsIHN0YXRlLmxlbmd0aCkpIHsKKyAgICAgIGt0ZC0+aGlkZVJlcXVlc3RlZCA9IDE7CisgICAgfSBlbHNlIGlmIChpc0tleXdvcmQoV1NfQygib2ZmIiksIHN0YXRlLmNoYXJhY3RlcnMsIHN0YXRlLmxlbmd0aCkpIHsKKyAgICAgIGt0ZC0+aGlkZVJlcXVlc3RlZCA9IDA7CisgICAgfSBlbHNlIHsKKyAgICAgIHJlcG9ydERhdGFFcnJvcihmaWxlLCAidW5rbm93biBoaWRlIHN0YXRlOiAlLioiIFBSSXdzLCBzdGF0ZS5sZW5ndGgsIHN0YXRlLmNoYXJhY3RlcnMpOworICAgIH0KKyAgfQorCisgIHJldHVybiAxOworfQorCitzdGF0aWMgREFUQV9PUEVSQU5EU19QUk9DRVNTT1IocHJvY2Vzc0hvdGtleU9wZXJhbmRzKSB7CisgIEtleVRhYmxlRGF0YSAqa3RkID0gZGF0YTsKKyAgSG90a2V5RW50cnkgaG90a2V5OworCisgIG1lbXNldCgmaG90a2V5LCAwLCBzaXplb2YoaG90a2V5KSk7CisgIGlmIChoaWRlQmluZGluZ3Moa3RkKSkgaG90a2V5LmZsYWdzIHw9IEhLRl9ISURERU47CisKKyAgaWYgKGdldEtleU9wZXJhbmQoZmlsZSwgJmhvdGtleS5rZXlWYWx1ZSwga3RkKSkgeworICAgIGlmIChnZXRDb21tYW5kT3BlcmFuZChmaWxlLCAmaG90a2V5LnByZXNzQ29tbWFuZCwga3RkKSkgeworICAgICAgaWYgKGdldENvbW1hbmRPcGVyYW5kKGZpbGUsICZob3RrZXkucmVsZWFzZUNvbW1hbmQsIGt0ZCkpIHsKKyAgICAgICAgS2V5Q29udGV4dCAqY3R4ID0gZ2V0Q3VycmVudEtleUNvbnRleHQoa3RkKTsKKworICAgICAgICBpZiAoY3R4KSB7CisgICAgICAgICAgaWYgKGFkZEhvdGtleShjdHgsICZob3RrZXkpKSB7CisgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gMDsKKyAgICAgIH0KKyAgICB9CisgIH0KKworICByZXR1cm4gMTsKK30KKworc3RhdGljIERBVEFfQ09ORElUSU9OX1RFU1RFUih0ZXN0S2V5RGVmaW5lZCkgeworICByZXR1cm4gISFmaW5kS2V5TmFtZShpZGVudGlmaWVyLT5jaGFyYWN0ZXJzLCBpZGVudGlmaWVyLT5sZW5ndGgsIGRhdGEpOworfQorCitzdGF0aWMgaW50Citwcm9jZXNzS2V5VGVzdE9wZXJhbmRzIChEYXRhRmlsZSAqZmlsZSwgaW50IG5vdCwgdm9pZCAqZGF0YSkgeworICByZXR1cm4gcHJvY2Vzc0NvbmRpdGlvbk9wZXJhbmRzKGZpbGUsIHRlc3RLZXlEZWZpbmVkLCBub3QsICJrZXkgbmFtZSIsIGRhdGEpOworfQorCitzdGF0aWMgREFUQV9PUEVSQU5EU19QUk9DRVNTT1IocHJvY2Vzc0lmS2V5T3BlcmFuZHMpIHsKKyAgcmV0dXJuIHByb2Nlc3NLZXlUZXN0T3BlcmFuZHMoZmlsZSwgMCwgZGF0YSk7Cit9CisKK3N0YXRpYyBEQVRBX09QRVJBTkRTX1BST0NFU1NPUihwcm9jZXNzSWZOb3RLZXlPcGVyYW5kcykgeworICByZXR1cm4gcHJvY2Vzc0tleVRlc3RPcGVyYW5kcyhmaWxlLCAxLCBkYXRhKTsKK30KKworc3RhdGljIERBVEFfQ09ORElUSU9OX1RFU1RFUih0ZXN0UGxhdGZvcm1OYW1lKSB7CisgIHN0YXRpYyBjb25zdCB3Y2hhcl90ICpjb25zdCBwbGF0Zm9ybXNbXSA9IHsKKyNpZmRlZiBfX0FORFJPSURfXworICAgIFdTX0MoImFuZHJvaWQiKSwKKyNlbmRpZiAvKiBfX0FORFJPSURfXyAqLworCisjaWZkZWYgX19BUFBMRV9fCisgICAgV1NfQygiYXBwbGUiKSwKKyNlbmRpZiAvKiBfX0FQUExFX18gKi8KKworI2lmZGVmIF9fQ1lHV0lOX18KKyAgICBXU19DKCJjeWd3aW4iKSwKKyNlbmRpZiAvKiBfX0NZR1dJTl9fICovCisKKyNpZmRlZiBfX01TRE9TX18KKyAgICBXU19DKCJkb3MiKSwKKyNlbmRpZiAvKiBfX01TRE9TX18gKi8KKworI2lmZGVmIEdSVUJfUlVOVElNRQorICAgIFdTX0MoImdydWIiKSwKKyNlbmRpZiAvKiBHUlVCX1JVTlRJTUUgKi8KKworI2lmZGVmIF9fbGludXhfXworICAgIFdTX0MoImxpbnV4IiksCisjZW5kaWYgLyogX19saW51eF9fICovCisKKyNpZmRlZiBfX01JTkdXMzJfXworICAgIFdTX0MoIm1pbmd3MzIiKSwKKyNlbmRpZiAvKiBfX01JTkdXMzJfXyAqLworCisjaWZkZWYgX19NSU5HVzY0X18KKyAgICBXU19DKCJtaW5ndzY0IiksCisjZW5kaWYgLyogX19NSU5HVzY0X18gKi8KKworI2lmZGVmIF9fT3BlbkJTRF9fCisgICAgV1NfQygib3BlbmJzZCIpLAorI2VuZGlmIC8qIF9fT3BlbkJTRF9fICovCisKKyNpZmRlZiBfX3N1bl9fCisgICAgV1NfQygic3VuIiksCisjZW5kaWYgLyogX19zdW5fXyAqLworCisjaWZkZWYgV0lORE9XUworICAgIFdTX0MoIndpbmRvd3MiKSwKKyNlbmRpZiAvKiBXSU5ET1dTICovCisKKyAgICBOVUxMCisgIH07CisKKyAgY29uc3Qgd2NoYXJfdCAqY29uc3QgKnBsYXRmb3JtID0gcGxhdGZvcm1zOworCisgIHdoaWxlICgqcGxhdGZvcm0pIHsKKyAgICBpZiAoaWRlbnRpZmllci0+bGVuZ3RoID09IHdjc2xlbigqcGxhdGZvcm0pKSB7CisgICAgICBpZiAod2NzbmNtcCgqcGxhdGZvcm0sIGlkZW50aWZpZXItPmNoYXJhY3RlcnMsIGlkZW50aWZpZXItPmxlbmd0aCkgPT0gMCkgeworICAgICAgICByZXR1cm4gMTsKKyAgICAgIH0KKyAgICB9CisKKyAgICBwbGF0Zm9ybSArPSAxOworICB9CisKKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK3Byb2Nlc3NQbGF0Zm9ybVRlc3RPcGVyYW5kcyAoRGF0YUZpbGUgKmZpbGUsIGludCBub3QsIHZvaWQgKmRhdGEpIHsKKyAgcmV0dXJuIHByb2Nlc3NDb25kaXRpb25PcGVyYW5kcyhmaWxlLCB0ZXN0UGxhdGZvcm1OYW1lLCBub3QsICJwbGF0Zm9ybSBuYW1lIiwgZGF0YSk7Cit9CisKK3N0YXRpYyBEQVRBX09QRVJBTkRTX1BST0NFU1NPUihwcm9jZXNzSWZQbGF0Zm9ybU9wZXJhbmRzKSB7CisgIHJldHVybiBwcm9jZXNzUGxhdGZvcm1UZXN0T3BlcmFuZHMoZmlsZSwgMCwgZGF0YSk7Cit9CisKK3N0YXRpYyBEQVRBX09QRVJBTkRTX1BST0NFU1NPUihwcm9jZXNzSWZOb3RQbGF0Zm9ybU9wZXJhbmRzKSB7CisgIHJldHVybiBwcm9jZXNzUGxhdGZvcm1UZXN0T3BlcmFuZHMoZmlsZSwgMSwgZGF0YSk7Cit9CisKK3N0YXRpYyBEQVRBX09QRVJBTkRTX1BST0NFU1NPUihwcm9jZXNzSWdub3JlT3BlcmFuZHMpIHsKKyAgS2V5VGFibGVEYXRhICprdGQgPSBkYXRhOworICBIb3RrZXlFbnRyeSBob3RrZXk7CisKKyAgbWVtc2V0KCZob3RrZXksIDAsIHNpemVvZihob3RrZXkpKTsKKyAgaWYgKGhpZGVCaW5kaW5ncyhrdGQpKSBob3RrZXkuZmxhZ3MgfD0gSEtGX0hJRERFTjsKKyAgaG90a2V5LnByZXNzQ29tbWFuZCA9IGhvdGtleS5yZWxlYXNlQ29tbWFuZCA9IGt0ZC0+bnVsbEJvdW5kQ29tbWFuZDsKKworICBpZiAoZ2V0S2V5T3BlcmFuZChmaWxlLCAmaG90a2V5LmtleVZhbHVlLCBrdGQpKSB7CisgICAgS2V5Q29udGV4dCAqY3R4ID0gZ2V0Q3VycmVudEtleUNvbnRleHQoa3RkKTsKKworICAgIGlmIChjdHgpIHsKKyAgICAgIGlmIChhZGRIb3RrZXkoY3R4LCAmaG90a2V5KSkgeworICAgICAgICByZXR1cm4gMTsKKyAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gMDsKKyAgfQorCisgIHJldHVybiAxOworfQorCitzdGF0aWMgREFUQV9PUEVSQU5EU19QUk9DRVNTT1IocHJvY2Vzc0luY2x1ZGVXcmFwcGVyKSB7CisgIEtleVRhYmxlRGF0YSAqa3RkID0gZGF0YTsKKyAgaW50IHJlc3VsdDsKKworICB1bnNpZ25lZCBjaGFyIGNvbnRleHQgPSBrdGQtPmNvbnRleHQ7CisgIHVuc2lnbmVkIGludCBoaWRlUmVxdWVzdGVkID0ga3RkLT5oaWRlUmVxdWVzdGVkOworICB1bnNpZ25lZCBpbnQgaGlkZUluaGVyaXRlZCA9IGt0ZC0+aGlkZUluaGVyaXRlZDsKKworICBpZiAoa3RkLT5oaWRlUmVxdWVzdGVkKSBrdGQtPmhpZGVJbmhlcml0ZWQgPSAxOworICByZXN1bHQgPSBwcm9jZXNzSW5jbHVkZU9wZXJhbmRzKGZpbGUsIGRhdGEpOworCisgIGt0ZC0+Y29udGV4dCA9IGNvbnRleHQ7CisgIGt0ZC0+aGlkZVJlcXVlc3RlZCA9IGhpZGVSZXF1ZXN0ZWQ7CisgIGt0ZC0+aGlkZUluaGVyaXRlZCA9IGhpZGVJbmhlcml0ZWQ7CisgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBEQVRBX09QRVJBTkRTX1BST0NFU1NPUihwcm9jZXNzSXNvbGF0ZWRPcGVyYW5kcykgeworICBLZXlUYWJsZURhdGEgKmt0ZCA9IGRhdGE7CisgIEtleUNvbnRleHQgKmN0eCA9IGdldEN1cnJlbnRLZXlDb250ZXh0KGt0ZCk7CisKKyAgaWYgKGN0eCkgeworICAgIGlmICghY3R4LT5pc0lzb2xhdGVkKSB7CisgICAgICBjdHgtPmlzSXNvbGF0ZWQgPSAxOworICAgIH0gZWxzZSB7CisgICAgICByZXBvcnREYXRhRXJyb3IoZmlsZSwgImNvbnRleHQgYWxyZWFkeSBzb2xhdGVkOiAlIlBSSXdzLCBjdHgtPm5hbWUpOworICAgIH0KKyAgfQorCisgIHJldHVybiAxOworfQorCitzdGF0aWMgREFUQV9PUEVSQU5EU19QUk9DRVNTT1IocHJvY2Vzc01hY3JvT3BlcmFuZHMpIHsKKyAgS2V5VGFibGVEYXRhICprdGQgPSBkYXRhOworICBLZXlUYWJsZSAqdGFibGUgPSBrdGQtPnRhYmxlOworCisgIEtleUJpbmRpbmcgYmluZGluZzsKKyAgaW5pdGlhbGl6ZUtleUJpbmRpbmcoJmJpbmRpbmcsIGt0ZCk7CisKKyAgeworICAgIEJvdW5kQ29tbWFuZCAqY21kID0gJmJpbmRpbmcucHJpbWFyeUNvbW1hbmQ7CisgICAgY21kLT52YWx1ZSA9IEJSTF9DTURfQkxLKE1BQ1JPKTsKKyAgICBjbWQtPmVudHJ5ID0gZmluZENvbW1hbmRFbnRyeShjbWQtPnZhbHVlKTsKKyAgICBjbWQtPnZhbHVlICs9IHRhYmxlLT5jb21tYW5kTWFjcm9zLmNvdW50OworICB9CisKKyAgaWYgKGdldEtleXNPcGVyYW5kKGZpbGUsICZiaW5kaW5nLmtleUNvbWJpbmF0aW9uLCBrdGQpKSB7CisgICAgc2l6ZV90IGxpbWl0ID0gMTAwOworICAgIEJvdW5kQ29tbWFuZCBjb21tYW5kc1tsaW1pdF07CisgICAgc2l6ZV90IGNvdW50ID0gMDsKKworICAgIHdoaWxlIChmaW5kRGF0YU9wZXJhbmQoZmlsZSwgTlVMTCkpIHsKKyAgICAgIGlmIChjb3VudCA9PSBsaW1pdCkgeworICAgICAgICByZXBvcnREYXRhRXJyb3IoZmlsZSwgImNvbW1hbmQgbWFjcm8gdG9vIGxhcmdlIik7CisgICAgICAgIHJldHVybiAxOworICAgICAgfQorCisgICAgICBCb3VuZENvbW1hbmQgKmNvbW1hbmQgPSAmY29tbWFuZHNbY291bnRdOworICAgICAgaWYgKCFnZXRDb21tYW5kT3BlcmFuZChmaWxlLCBjb21tYW5kLCBrdGQpKSByZXR1cm4gMTsKKyAgICAgIGNvdW50ICs9IDE7CisgICAgfQorCisgICAgaWYgKGNvdW50ID09IDApIHsKKyAgICAgIHJlcG9ydERhdGFFcnJvcihmaWxlLCAiZW1wdHkgY29tbWFuZCBtYWNybyIpOworICAgIH0gZWxzZSB7CisgICAgICBpZiAodGFibGUtPmNvbW1hbmRNYWNyb3MuY291bnQgPT0gdGFibGUtPmNvbW1hbmRNYWNyb3Muc2l6ZSkgeworICAgICAgICBzaXplX3QgbmV3U2l6ZSA9IHRhYmxlLT5jb21tYW5kTWFjcm9zLnNpemU/IHRhYmxlLT5jb21tYW5kTWFjcm9zLnNpemU8PDE6IDQ7CisgICAgICAgIENvbW1hbmRNYWNybyAqbmV3VGFibGUgPSByZWFsbG9jKHRhYmxlLT5jb21tYW5kTWFjcm9zLnRhYmxlLCBBUlJBWV9TSVpFKHRhYmxlLT5jb21tYW5kTWFjcm9zLnRhYmxlLCBuZXdTaXplKSk7CisKKyAgICAgICAgaWYgKCFuZXdUYWJsZSkgeworICAgICAgICAgIGxvZ01hbGxvY0Vycm9yKCk7CisgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKworICAgICAgICB0YWJsZS0+Y29tbWFuZE1hY3Jvcy50YWJsZSA9IG5ld1RhYmxlOworICAgICAgICB0YWJsZS0+Y29tbWFuZE1hY3Jvcy5zaXplID0gbmV3U2l6ZTsKKyAgICAgIH0KKworICAgICAgQ29tbWFuZE1hY3JvICptYWNybyA9ICZ0YWJsZS0+Y29tbWFuZE1hY3Jvcy50YWJsZVt0YWJsZS0+Y29tbWFuZE1hY3Jvcy5jb3VudF07CisgICAgICBtZW1zZXQobWFjcm8sIDAsIHNpemVvZigqbWFjcm8pKTsKKyAgICAgIHNpemVfdCBzaXplID0gQVJSQVlfU0laRShtYWNyby0+Y29tbWFuZHMsIChtYWNyby0+Y291bnQgPSBjb3VudCkpOworCisgICAgICBpZiAoKG1hY3JvLT5jb21tYW5kcyA9IG1hbGxvYyhzaXplKSkpIHsKKyAgICAgICAgbWVtY3B5KG1hY3JvLT5jb21tYW5kcywgY29tbWFuZHMsIHNpemUpOworICAgICAgICBLZXlDb250ZXh0ICpjdHggPSBnZXRDdXJyZW50S2V5Q29udGV4dChrdGQpOworCisgICAgICAgIGlmIChjdHgpIHsKKyAgICAgICAgICBpZiAoYWRkS2V5QmluZGluZyhjdHgsICZiaW5kaW5nLCAwKSkgeworICAgICAgICAgICAgdGFibGUtPmNvbW1hbmRNYWNyb3MuY291bnQgKz0gMTsKKyAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGZyZWUobWFjcm8tPmNvbW1hbmRzKTsKKyAgICAgIH0KKworICAgICAgcmV0dXJuIDA7CisgICAgfQorICB9CisKKyAgcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBEQVRBX09QRVJBTkRTX1BST0NFU1NPUihwcm9jZXNzTWFwT3BlcmFuZHMpIHsKKyAgS2V5VGFibGVEYXRhICprdGQgPSBkYXRhOworICBNYXBwZWRLZXlFbnRyeSBtYXA7CisKKyAgbWVtc2V0KCZtYXAsIDAsIHNpemVvZihtYXApKTsKKyAgaWYgKGhpZGVCaW5kaW5ncyhrdGQpKSBtYXAuZmxhZ3MgfD0gTUtGX0hJRERFTjsKKworICBpZiAoZ2V0S2V5T3BlcmFuZChmaWxlLCAmbWFwLmtleVZhbHVlLCBrdGQpKSB7CisgICAgaWYgKG1hcC5rZXlWYWx1ZS5udW1iZXIgIT0gS1RCX0tFWV9BTlkpIHsKKyAgICAgIGlmIChnZXRLZXlib2FyZEZ1bmN0aW9uT3BlcmFuZChmaWxlLCAmbWFwLmtleWJvYXJkRnVuY3Rpb24sIGt0ZCkpIHsKKyAgICAgICAgS2V5Q29udGV4dCAqY3R4ID0gZ2V0Q3VycmVudEtleUNvbnRleHQoa3RkKTsKKworICAgICAgICBpZiAoY3R4KSB7CisgICAgICAgICAgaWYgKGFkZE1hcHBlZEtleShjdHgsICZtYXApKSB7CisgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gMDsKKyAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgcmVwb3J0RGF0YUVycm9yKGZpbGUsICJjYW5ub3QgbWFwIGEga2V5IGdyb3VwIik7CisgICAgfQorICB9CisKKyAgcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBEQVRBX09QRVJBTkRTX1BST0NFU1NPUihwcm9jZXNzTm90ZU9wZXJhbmRzKSB7CisgIEtleVRhYmxlRGF0YSAqa3RkID0gZGF0YTsKKyAgRGF0YU9wZXJhbmQgb3BlcmFuZDsKKworICBpZiAoZ2V0VGV4dE9wZXJhbmQoZmlsZSwgJm9wZXJhbmQsICJub3RlIHRleHQiKSkgeworICAgIGlmICghaGlkZUJpbmRpbmdzKGt0ZCkpIHsKKyAgICAgIERhdGFTdHJpbmcgc3RyaW5nOworCisgICAgICBpZiAocGFyc2VEYXRhU3RyaW5nKGZpbGUsICZzdHJpbmcsIG9wZXJhbmQuY2hhcmFjdGVycywgb3BlcmFuZC5sZW5ndGgsIDApKSB7CisgICAgICAgIGlmIChrdGQtPnRhYmxlLT5ub3Rlcy5jb3VudCA9PSBrdGQtPnRhYmxlLT5ub3Rlcy5zaXplKSB7CisgICAgICAgICAgdW5zaWduZWQgaW50IG5ld1NpemUgPSAoa3RkLT50YWJsZS0+bm90ZXMuc2l6ZSA9PSAwKT8gODogKGt0ZC0+dGFibGUtPm5vdGVzLnNpemUgPDwgMSk7CisgICAgICAgICAgd2NoYXJfdCAqKm5ld1RhYmxlID0gcmVhbGxvYyhrdGQtPnRhYmxlLT5ub3Rlcy50YWJsZSwgQVJSQVlfU0laRShuZXdUYWJsZSwgbmV3U2l6ZSkpOworCisgICAgICAgICAgaWYgKCFuZXdUYWJsZSkgeworICAgICAgICAgICAgbG9nTWFsbG9jRXJyb3IoKTsKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgIH0KKworICAgICAgICAgIGt0ZC0+dGFibGUtPm5vdGVzLnRhYmxlID0gbmV3VGFibGU7CisgICAgICAgICAga3RkLT50YWJsZS0+bm90ZXMuc2l6ZSA9IG5ld1NpemU7CisgICAgICAgIH0KKworICAgICAgICB7CisgICAgICAgICAgd2NoYXJfdCAqbm90ZVN0cmluZyA9IG1hbGxvYyhBUlJBWV9TSVpFKG5vdGVTdHJpbmcsIHN0cmluZy5sZW5ndGgrMSkpOworCisgICAgICAgICAgaWYgKCFub3RlU3RyaW5nKSB7CisgICAgICAgICAgICBsb2dNYWxsb2NFcnJvcigpOworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgfQorCisgICAgICAgICAgd21lbWNweShub3RlU3RyaW5nLCBzdHJpbmcuY2hhcmFjdGVycywgc3RyaW5nLmxlbmd0aCk7CisgICAgICAgICAgbm90ZVN0cmluZ1tzdHJpbmcubGVuZ3RoXSA9IDA7CisKKyAgICAgICAgICBrdGQtPnRhYmxlLT5ub3Rlcy50YWJsZVtrdGQtPnRhYmxlLT5ub3Rlcy5jb3VudCsrXSA9IG5vdGVTdHJpbmc7CisgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9CisgIH0KKworICByZXR1cm4gMTsKK30KKworc3RhdGljIERBVEFfT1BFUkFORFNfUFJPQ0VTU09SKHByb2Nlc3NSdW5PcGVyYW5kcykgeworICBLZXlUYWJsZURhdGEgKmt0ZCA9IGRhdGE7CisgIEtleVRhYmxlICp0YWJsZSA9IGt0ZC0+dGFibGU7CisgIGludCBzZXJpb3VzRmFpbHVyZSA9IDA7CisKKyAgS2V5QmluZGluZyBiaW5kaW5nOworICBpbml0aWFsaXplS2V5QmluZGluZygmYmluZGluZywga3RkKTsKKworICB7CisgICAgQm91bmRDb21tYW5kICpjbWQgPSAmYmluZGluZy5wcmltYXJ5Q29tbWFuZDsKKyAgICBjbWQtPnZhbHVlID0gQlJMX0NNRF9CTEsoSE9TVENNRCk7CisgICAgY21kLT5lbnRyeSA9IGZpbmRDb21tYW5kRW50cnkoY21kLT52YWx1ZSk7CisgICAgY21kLT52YWx1ZSArPSB0YWJsZS0+aG9zdENvbW1hbmRzLmNvdW50OworICB9CisKKyAgaWYgKGdldEtleXNPcGVyYW5kKGZpbGUsICZiaW5kaW5nLmtleUNvbWJpbmF0aW9uLCBrdGQpKSB7CisgICAgaW50IGFsbEFyZ3VtZW50c1BhcnNlZCA9IDE7CisKKyAgICBzaXplX3QgbGltaXQgPSAxMDA7CisgICAgY2hhciAqYXJndW1lbnRzW2xpbWl0XTsKKyAgICBzaXplX3QgY291bnQgPSAwOworCisgICAgd2hpbGUgKGZpbmREYXRhT3BlcmFuZChmaWxlLCBOVUxMKSkgeworICAgICAgaWYgKGNvdW50ID09IGxpbWl0KSB7CisgICAgICAgIHJlcG9ydERhdGFFcnJvcihmaWxlLCAidG9vIG1hbnkgaG9zdCBjb21tYW5kIGFyZ3VtZW50cyIpOworICAgICAgICBhbGxBcmd1bWVudHNQYXJzZWQgPSAwOworICAgICAgICBicmVhazsKKyAgICAgIH0KKworICAgICAgRGF0YVN0cmluZyBhcmd1bWVudDsKKyAgICAgIGlmICghZ2V0RGF0YVN0cmluZyhmaWxlLCAmYXJndW1lbnQsIDAsICJob3N0IGNvbW1hbmQgYXJndW1lbnQiKSkgeworICAgICAgICBhbGxBcmd1bWVudHNQYXJzZWQgPSAwOworICAgICAgICBicmVhazsKKyAgICAgIH0KKworICAgICAgaWYgKCEoYXJndW1lbnRzW2NvdW50XSA9IGdldFV0ZjhGcm9tV2NoYXJzKGFyZ3VtZW50LmNoYXJhY3RlcnMsIGFyZ3VtZW50Lmxlbmd0aCwgTlVMTCkpKSB7CisgICAgICAgIHNlcmlvdXNGYWlsdXJlID0gMTsKKyAgICAgICAgYnJlYWs7CisgICAgICB9CisKKyAgICAgIGNvdW50ICs9IDE7CisgICAgfQorCisgICAgaWYgKGFsbEFyZ3VtZW50c1BhcnNlZCAmJiAhc2VyaW91c0ZhaWx1cmUpIHsKKyAgICAgIGlmIChjb3VudCA9PSAwKSB7CisgICAgICAgIHJlcG9ydERhdGFFcnJvcihmaWxlLCAiaG9zdCBjb21tYW5kIG5hbWUvcGF0aCBub3Qgc3BlY2lmaWVkIik7CisgICAgICB9IGVsc2UgeworICAgICAgICBzZXJpb3VzRmFpbHVyZSA9IDE7CisKKyAgICAgICAgaWYgKHRhYmxlLT5ob3N0Q29tbWFuZHMuY291bnQgPT0gdGFibGUtPmhvc3RDb21tYW5kcy5zaXplKSB7CisgICAgICAgICAgc2l6ZV90IG5ld1NpemUgPSB0YWJsZS0+aG9zdENvbW1hbmRzLnNpemU/IHRhYmxlLT5ob3N0Q29tbWFuZHMuc2l6ZTw8MTogNDsKKyAgICAgICAgICBIb3N0Q29tbWFuZCAqbmV3VGFibGUgPSByZWFsbG9jKHRhYmxlLT5ob3N0Q29tbWFuZHMudGFibGUsIEFSUkFZX1NJWkUodGFibGUtPmhvc3RDb21tYW5kcy50YWJsZSwgbmV3U2l6ZSkpOworCisgICAgICAgICAgaWYgKCFuZXdUYWJsZSkgeworICAgICAgICAgICAgbG9nTWFsbG9jRXJyb3IoKTsKKyAgICAgICAgICAgIGdvdG8gU0VSSU9VU19GQUlMVVJFOworICAgICAgICAgIH0KKworICAgICAgICAgIHRhYmxlLT5ob3N0Q29tbWFuZHMudGFibGUgPSBuZXdUYWJsZTsKKyAgICAgICAgICB0YWJsZS0+aG9zdENvbW1hbmRzLnNpemUgPSBuZXdTaXplOworICAgICAgICB9CisKKyAgICAgICAgSG9zdENvbW1hbmQgKmhjID0gJnRhYmxlLT5ob3N0Q29tbWFuZHMudGFibGVbdGFibGUtPmhvc3RDb21tYW5kcy5jb3VudF07CisgICAgICAgIG1lbXNldChoYywgMCwgc2l6ZW9mKCpoYykpOworICAgICAgICBzaXplX3Qgc2l6ZSA9IEFSUkFZX1NJWkUoaGMtPmFyZ3VtZW50cywgKGhjLT5jb3VudCA9IGNvdW50KSk7CisKKyAgICAgICAgaWYgKChoYy0+YXJndW1lbnRzID0gbWFsbG9jKHNpemUgKyBzaXplb2YoKmhjLT5hcmd1bWVudHMpKSkpIHsKKyAgICAgICAgICBtZW1jcHkoaGMtPmFyZ3VtZW50cywgYXJndW1lbnRzLCBzaXplKTsKKyAgICAgICAgICBoYy0+YXJndW1lbnRzW2hjLT5jb3VudF0gPSBOVUxMOworICAgICAgICAgIEtleUNvbnRleHQgKmN0eCA9IGdldEN1cnJlbnRLZXlDb250ZXh0KGt0ZCk7CisKKyAgICAgICAgICBpZiAoY3R4KSB7CisgICAgICAgICAgICBpZiAoYWRkS2V5QmluZGluZyhjdHgsICZiaW5kaW5nLCAwKSkgeworICAgICAgICAgICAgICB0YWJsZS0+aG9zdENvbW1hbmRzLmNvdW50ICs9IDE7CisgICAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICAgICAgfQorICAgICAgICAgIH0KKworICAgICAgICAgIGZyZWUoaGMtPmFyZ3VtZW50cyk7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9CisKKyAgU0VSSU9VU19GQUlMVVJFOgorICAgIHdoaWxlIChjb3VudCA+IDApIGZyZWUoYXJndW1lbnRzWy0tY291bnRdKTsKKyAgfQorCisgIHJldHVybiAhc2VyaW91c0ZhaWx1cmU7Cit9CisKK3N0YXRpYyBEQVRBX09QRVJBTkRTX1BST0NFU1NPUihwcm9jZXNzU3VwZXJpbXBvc2VPcGVyYW5kcykgeworICBLZXlUYWJsZURhdGEgKmt0ZCA9IGRhdGE7CisKKyAgeworICAgIGNvbnN0IEtleWJvYXJkRnVuY3Rpb24gKmtiZjsKKworICAgIGlmIChnZXRLZXlib2FyZEZ1bmN0aW9uT3BlcmFuZChmaWxlLCAma2JmLCBrdGQpKSB7CisgICAgICBLZXlDb250ZXh0ICpjdHggPSBnZXRDdXJyZW50S2V5Q29udGV4dChrdGQpOworCisgICAgICBpZiAoY3R4KSB7CisgICAgICAgIGN0eC0+bWFwcGVkS2V5cy5zdXBlcmltcG9zZSB8PSBrYmYtPmJpdDsKKyAgICAgICAgcmV0dXJuIDE7CisgICAgICB9CisKKyAgICAgIHJldHVybiAwOworICAgIH0KKyAgfQorCisgIHJldHVybiAxOworfQorCitzdGF0aWMgREFUQV9PUEVSQU5EU19QUk9DRVNTT1IocHJvY2Vzc1RpdGxlT3BlcmFuZHMpIHsKKyAgS2V5VGFibGVEYXRhICprdGQgPSBkYXRhOworICBEYXRhT3BlcmFuZCB0aXRsZTsKKworICBpZiAoZ2V0VGV4dE9wZXJhbmQoZmlsZSwgJnRpdGxlLCAidGl0bGUgdGV4dCIpKSB7CisgICAgaWYgKGt0ZC0+dGFibGUtPnRpdGxlKSB7CisgICAgICByZXBvcnREYXRhRXJyb3IoZmlsZSwgInRhYmxlIHRpdGxlIHNwZWNpZmllZCBtb3JlIHRoYW4gb25jZSIpOworICAgIH0gZWxzZSBpZiAoIShrdGQtPnRhYmxlLT50aXRsZSA9IG1hbGxvYyhBUlJBWV9TSVpFKGt0ZC0+dGFibGUtPnRpdGxlLCB0aXRsZS5sZW5ndGgrMSkpKSkgeworICAgICAgbG9nTWFsbG9jRXJyb3IoKTsKKyAgICAgIHJldHVybiAwOworICAgIH0gZWxzZSB7CisgICAgICB3bWVtY3B5KGt0ZC0+dGFibGUtPnRpdGxlLCB0aXRsZS5jaGFyYWN0ZXJzLCB0aXRsZS5sZW5ndGgpOworICAgICAga3RkLT50YWJsZS0+dGl0bGVbdGl0bGUubGVuZ3RoXSA9IDA7CisgICAgICByZXR1cm4gMTsKKyAgICB9CisgIH0KKworICByZXR1cm4gMTsKK30KKworc3RhdGljIERBVEFfT1BFUkFORFNfUFJPQ0VTU09SKHByb2Nlc3NLZXlUYWJsZU9wZXJhbmRzKSB7CisgIEJFR0lOX0RBVEFfRElSRUNUSVZFX1RBQkxFCisgICAgREFUQV9WQVJJQUJMRV9ESVJFQ1RJVkVTLAorICAgIERBVEFfQ09ORElUSU9OX0RJUkVDVElWRVMsCisgICAgey5uYW1lPVdTX0MoImJpbmQiKSwgLnByb2Nlc3Nvcj1wcm9jZXNzQmluZE9wZXJhbmRzfSwKKyAgICB7Lm5hbWU9V1NfQygiY29udGV4dCIpLCAucHJvY2Vzc29yPXByb2Nlc3NDb250ZXh0T3BlcmFuZHN9LAorICAgIHsubmFtZT1XU19DKCJoaWRlIiksIC5wcm9jZXNzb3I9cHJvY2Vzc0hpZGVPcGVyYW5kc30sCisgICAgey5uYW1lPVdTX0MoImhvdGtleSIpLCAucHJvY2Vzc29yPXByb2Nlc3NIb3RrZXlPcGVyYW5kc30sCisgICAgey5uYW1lPVdTX0MoImlma2V5IiksIC5wcm9jZXNzb3I9cHJvY2Vzc0lmS2V5T3BlcmFuZHMsIC51bmNvbmRpdGlvbmFsPTF9LAorICAgIHsubmFtZT1XU19DKCJpZm5vdGtleSIpLCAucHJvY2Vzc29yPXByb2Nlc3NJZk5vdEtleU9wZXJhbmRzLCAudW5jb25kaXRpb25hbD0xfSwKKyAgICB7Lm5hbWU9V1NfQygiaWZwbGF0Zm9ybSIpLCAucHJvY2Vzc29yPXByb2Nlc3NJZlBsYXRmb3JtT3BlcmFuZHMsIC51bmNvbmRpdGlvbmFsPTF9LAorICAgIHsubmFtZT1XU19DKCJpZm5vdHBsYXRmb3JtIiksIC5wcm9jZXNzb3I9cHJvY2Vzc0lmTm90UGxhdGZvcm1PcGVyYW5kcywgLnVuY29uZGl0aW9uYWw9MX0sCisgICAgey5uYW1lPVdTX0MoImlnbm9yZSIpLCAucHJvY2Vzc29yPXByb2Nlc3NJZ25vcmVPcGVyYW5kc30sCisgICAgey5uYW1lPVdTX0MoImluY2x1ZGUiKSwgLnByb2Nlc3Nvcj1wcm9jZXNzSW5jbHVkZVdyYXBwZXJ9LAorICAgIHsubmFtZT1XU19DKCJpc29sYXRlZCIpLCAucHJvY2Vzc29yPXByb2Nlc3NJc29sYXRlZE9wZXJhbmRzfSwKKyAgICB7Lm5hbWU9V1NfQygibWFjcm8iKSwgLnByb2Nlc3Nvcj1wcm9jZXNzTWFjcm9PcGVyYW5kc30sCisgICAgey5uYW1lPVdTX0MoIm1hcCIpLCAucHJvY2Vzc29yPXByb2Nlc3NNYXBPcGVyYW5kc30sCisgICAgey5uYW1lPVdTX0MoIm5vdGUiKSwgLnByb2Nlc3Nvcj1wcm9jZXNzTm90ZU9wZXJhbmRzfSwKKyAgICB7Lm5hbWU9V1NfQygicnVuIiksIC5wcm9jZXNzb3I9cHJvY2Vzc1J1bk9wZXJhbmRzfSwKKyAgICB7Lm5hbWU9V1NfQygic3VwZXJpbXBvc2UiKSwgLnByb2Nlc3Nvcj1wcm9jZXNzU3VwZXJpbXBvc2VPcGVyYW5kc30sCisgICAgey5uYW1lPVdTX0MoInRpdGxlIiksIC5wcm9jZXNzb3I9cHJvY2Vzc1RpdGxlT3BlcmFuZHN9LAorICBFTkRfREFUQV9ESVJFQ1RJVkVfVEFCTEUKKworICByZXR1cm4gcHJvY2Vzc0RpcmVjdGl2ZU9wZXJhbmQoZmlsZSwgJmRpcmVjdGl2ZXMsICJrZXkgdGFibGUgZGlyZWN0aXZlIiwgZGF0YSk7Cit9CisKK3ZvaWQKK3Jlc2V0TG9uZ1ByZXNzRGF0YSAoS2V5VGFibGUgKnRhYmxlKSB7CisgIGlmICh0YWJsZS0+bG9uZ1ByZXNzLmFsYXJtKSB7CisgICAgYXN5bmNDYW5jZWxSZXF1ZXN0KHRhYmxlLT5sb25nUHJlc3MuYWxhcm0pOworICAgIHRhYmxlLT5sb25nUHJlc3MuYWxhcm0gPSBOVUxMOworICB9CisKKyAgdGFibGUtPmxvbmdQcmVzcy5jb21tYW5kID0gQlJMX0NNRF9OT09QOworICB0YWJsZS0+bG9uZ1ByZXNzLnJlcGVhdCA9IDA7CisKKyAgdGFibGUtPmxvbmdQcmVzcy5rZXlBY3Rpb24gPSBOVUxMOworICB0YWJsZS0+bG9uZ1ByZXNzLmtleUNvbnRleHQgPSBLVEJfQ1RYX0RFRkFVTFQ7CisgIHRhYmxlLT5sb25nUHJlc3Mua2V5VmFsdWUuZ3JvdXAgPSAwOworICB0YWJsZS0+bG9uZ1ByZXNzLmtleVZhbHVlLm51bWJlciA9IEtUQl9LRVlfQU5ZOworfQorCit2b2lkCityZXNldEtleVRhYmxlIChLZXlUYWJsZSAqdGFibGUpIHsKKyAgcmVzZXRMb25nUHJlc3NEYXRhKHRhYmxlKTsKKyAgdGFibGUtPnJlbGVhc2UuY29tbWFuZCA9IEJSTF9DTURfTk9PUDsKKyAgdGFibGUtPnByZXNzZWRLZXlzLmNvdW50ID0gMDsKKyAgdGFibGUtPmNvbnRleHQuY3VycmVudCA9IHRhYmxlLT5jb250ZXh0Lm5leHQgPSB0YWJsZS0+Y29udGV4dC5wZXJzaXN0ZW50ID0gS1RCX0NUWF9ERUZBVUxUOworfQorCitzdGF0aWMgaW50CithZGRJbmNvbXBsZXRlQmluZGluZyAoS2V5Q29udGV4dCAqY3R4LCBjb25zdCBLZXlWYWx1ZSAqa2V5cywgdW5zaWduZWQgY2hhciBjb3VudCkgeworICBzdGF0aWMgY29uc3QgQm91bmRDb21tYW5kIGNvbW1hbmQgPSB7CisgICAgLmVudHJ5ID0gTlVMTCwKKyAgICAudmFsdWUgPSBFT0YKKyAgfTsKKworICBLZXlCaW5kaW5nIGJpbmRpbmcgPSB7CisgICAgLmZsYWdzID0gS0JGX0hJRERFTiwKKworICAgIC5wcmltYXJ5Q29tbWFuZCA9IGNvbW1hbmQsCisgICAgLnNlY29uZGFyeUNvbW1hbmQgPSBjb21tYW5kLAorCisgICAgLmtleUNvbWJpbmF0aW9uID0geworICAgICAgLm1vZGlmaWVyQ291bnQgPSBjb3VudAorICAgIH0KKyAgfTsKKworICBjb3B5S2V5VmFsdWVzKGJpbmRpbmcua2V5Q29tYmluYXRpb24ubW9kaWZpZXJLZXlzLCBrZXlzLCBjb3VudCk7CisgIHJldHVybiBhZGRLZXlCaW5kaW5nKGN0eCwgJmJpbmRpbmcsIDEpOworfQorCitzdGF0aWMgaW50CithZGRJbmNvbXBsZXRlU3ViYmluZGluZ3MgKEtleUNvbnRleHQgKmN0eCwgY29uc3QgS2V5VmFsdWUgKmtleXMsIHVuc2lnbmVkIGNoYXIgY291bnQpIHsKKyAgaWYgKGNvdW50ID4gMSkgeworICAgIEtleVZhbHVlIHZhbHVlc1stLWNvdW50XTsKKyAgICB1bnNpZ25lZCBpbnQgaW5kZXggPSAwOworCisgICAgY29weUtleVZhbHVlcyh2YWx1ZXMsICZrZXlzWzFdLCBjb3VudCk7CisKKyAgICB3aGlsZSAoMSkgeworICAgICAgaWYgKCFhZGRJbmNvbXBsZXRlQmluZGluZyhjdHgsIHZhbHVlcywgY291bnQpKSByZXR1cm4gMDsKKyAgICAgIGlmICghYWRkSW5jb21wbGV0ZVN1YmJpbmRpbmdzKGN0eCwgdmFsdWVzLCBjb3VudCkpIHJldHVybiAwOworICAgICAgaWYgKGluZGV4ID09IGNvdW50KSBicmVhazsKKyAgICAgIHZhbHVlc1tpbmRleF0gPSBrZXlzW2luZGV4XTsKKyAgICAgIGluZGV4ICs9IDE7CisgICAgfQorICB9CisKKyAgcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQKK2FkZEluY29tcGxldGVCaW5kaW5ncyAoS2V5Q29udGV4dCAqY3R4KSB7CisgIHNpemVfdCBjb3VudCA9IGN0eC0+a2V5QmluZGluZ3MuY291bnQ7CisKKyAgaWYgKGNvdW50ID4gMCkgeworICAgIEtleUJpbmRpbmcgYmluZGluZ3NbY291bnRdOworCisgICAgbWVtY3B5KAorICAgICAgYmluZGluZ3MsIGN0eC0+a2V5QmluZGluZ3MudGFibGUsCisgICAgICAoY291bnQgKiBzaXplb2YoKmN0eC0+a2V5QmluZGluZ3MudGFibGUpKQorICAgICk7CisKKyAgICBjb25zdCBLZXlCaW5kaW5nICpiaW5kaW5nID0gYmluZGluZ3M7CisgICAgY29uc3QgS2V5QmluZGluZyAqZW5kID0gYmluZGluZyArIGNvdW50OworCisgICAgd2hpbGUgKGJpbmRpbmcgPCBlbmQpIHsKKyAgICAgIGNvbnN0IEtleUNvbWJpbmF0aW9uICpjb21iaW5hdGlvbiA9ICZiaW5kaW5nLT5rZXlDb21iaW5hdGlvbjsKKyAgICAgIGlmICghYWRkSW5jb21wbGV0ZUJpbmRpbmcoY3R4LCBjb21iaW5hdGlvbi0+bW9kaWZpZXJLZXlzLCBjb21iaW5hdGlvbi0+bW9kaWZpZXJDb3VudCkpIHJldHVybiAwOworICAgICAgaWYgKCFhZGRJbmNvbXBsZXRlU3ViYmluZGluZ3MoY3R4LCBjb21iaW5hdGlvbi0+bW9kaWZpZXJLZXlzLCBjb21iaW5hdGlvbi0+bW9kaWZpZXJDb3VudCkpIHJldHVybiAwOworICAgICAgYmluZGluZyArPSAxOworICAgIH0KKyAgfQorCisgIHJldHVybiAxOworfQorCitzdGF0aWMgaW50CitwcmVwYXJlS2V5QmluZGluZ3MgKEtleUNvbnRleHQgKmN0eCkgeworICBpZiAoIWFkZEluY29tcGxldGVCaW5kaW5ncyhjdHgpKSByZXR1cm4gMDsKKworICBpZiAoY3R4LT5rZXlCaW5kaW5ncy5jb3VudCA8IGN0eC0+a2V5QmluZGluZ3Muc2l6ZSkgeworICAgIGlmIChjdHgtPmtleUJpbmRpbmdzLmNvdW50KSB7CisgICAgICBLZXlCaW5kaW5nICpuZXdUYWJsZSA9IHJlYWxsb2MoY3R4LT5rZXlCaW5kaW5ncy50YWJsZSwgQVJSQVlfU0laRShuZXdUYWJsZSwgY3R4LT5rZXlCaW5kaW5ncy5jb3VudCkpOworCisgICAgICBpZiAoIW5ld1RhYmxlKSB7CisgICAgICAgIGxvZ01hbGxvY0Vycm9yKCk7CisgICAgICAgIHJldHVybiAwOworICAgICAgfQorCisgICAgICBjdHgtPmtleUJpbmRpbmdzLnRhYmxlID0gbmV3VGFibGU7CisgICAgfSBlbHNlIHsKKyAgICAgIGZyZWUoY3R4LT5rZXlCaW5kaW5ncy50YWJsZSk7CisgICAgICBjdHgtPmtleUJpbmRpbmdzLnRhYmxlID0gTlVMTDsKKyAgICB9CisKKyAgICBjdHgtPmtleUJpbmRpbmdzLnNpemUgPSBjdHgtPmtleUJpbmRpbmdzLmNvdW50OworICB9CisKKyAgcmV0dXJuIDE7Cit9CisKK2ludAorZmluaXNoS2V5VGFibGUgKEtleVRhYmxlRGF0YSAqa3RkKSB7CisgIGZvciAodW5zaWduZWQgaW50IGNvbnRleHQ9MDsgY29udGV4dDxrdGQtPnRhYmxlLT5rZXlDb250ZXh0cy5jb3VudDsgY29udGV4dCs9MSkgeworICAgIEtleUNvbnRleHQgKmN0eCA9ICZrdGQtPnRhYmxlLT5rZXlDb250ZXh0cy50YWJsZVtjb250ZXh0XTsKKyAgICBpZiAoIXByZXBhcmVLZXlCaW5kaW5ncyhjdHgpKSByZXR1cm4gMDsKKyAgfQorCisgIHFzb3J0KGt0ZC0+dGFibGUtPmtleU5hbWVzLnRhYmxlLCBrdGQtPnRhYmxlLT5rZXlOYW1lcy5jb3VudCwgc2l6ZW9mKCprdGQtPnRhYmxlLT5rZXlOYW1lcy50YWJsZSksIHNvcnRLZXlWYWx1ZXMpOworICByZXNldEtleVRhYmxlKGt0ZC0+dGFibGUpOworICByZXR1cm4gMTsKK30KKworc3RhdGljIGludAorZGVmaW5lSW5pdGlhbEtleUNvbnRleHRzIChLZXlUYWJsZURhdGEgKmt0ZCkgeworICB0eXBlZGVmIHN0cnVjdCB7CisgICAgdW5zaWduZWQgY2hhciBjb250ZXh0OworICAgIGNvbnN0IHdjaGFyX3QgKm5hbWU7CisgICAgY29uc3Qgd2NoYXJfdCAqdGl0bGU7CisgIH0gUHJvcGVydGllc0VudHJ5OworCisgIHN0YXRpYyBjb25zdCBQcm9wZXJ0aWVzRW50cnkgcHJvcGVydGllc1RhYmxlW10gPSB7CisgICAgeyAuY29udGV4dCA9IEtUQl9DVFhfREVGQVVMVCwKKyAgICAgIC50aXRsZSA9IFdTX0MoIkRlZmF1bHQgQmluZGluZ3MiKSwKKyAgICAgIC5uYW1lID0gV1NfQygiZGVmYXVsdCIpCisgICAgfSwKKworICAgIHsgLmNvbnRleHQgPSBLVEJfQ1RYX01FTlUsCisgICAgICAudGl0bGUgPSBXU19DKCJNZW51IEJpbmRpbmdzIiksCisgICAgICAubmFtZSA9IFdTX0MoIm1lbnUiKQorICAgIH0sCisKKyAgICB7IC5uYW1lID0gTlVMTCB9CisgIH07CisgIGNvbnN0IFByb3BlcnRpZXNFbnRyeSAqcHJvcGVydGllcyA9IHByb3BlcnRpZXNUYWJsZTsKKworICB3aGlsZSAocHJvcGVydGllcy0+bmFtZSkgeworICAgIEtleUNvbnRleHQgKmN0eCA9IGdldEtleUNvbnRleHQoa3RkLCBwcm9wZXJ0aWVzLT5jb250ZXh0KTsKKworICAgIGlmICghY3R4KSByZXR1cm4gMDsKKyAgICBpZiAocHJvcGVydGllcy0+Y29udGV4dCAhPSBLVEJfQ1RYX0RFRkFVTFQpIGN0eC0+aXNTcGVjaWFsID0gMTsKKworICAgIGN0eC0+aXNEZWZpbmVkID0gMTsKKyAgICBjdHgtPmlzUmVmZXJlbmNlZCA9IDE7CisKKyAgICBpZiAocHJvcGVydGllcy0+bmFtZSkgeworICAgICAgaWYgKCFzZXRLZXlDb250ZXh0TmFtZShjdHgsIHByb3BlcnRpZXMtPm5hbWUsIHdjc2xlbihwcm9wZXJ0aWVzLT5uYW1lKSkpIHsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgICB9CisgICAgfQorCisgICAgaWYgKHByb3BlcnRpZXMtPnRpdGxlKSB7CisgICAgICBpZiAoIXNldEtleUNvbnRleHRUaXRsZShjdHgsIHByb3BlcnRpZXMtPnRpdGxlLCB3Y3NsZW4ocHJvcGVydGllcy0+dGl0bGUpKSkgeworICAgICAgICByZXR1cm4gMDsKKyAgICAgIH0KKyAgICB9CisKKyAgICBwcm9wZXJ0aWVzICs9IDE7CisgIH0KKworICByZXR1cm4gMTsKK30KKworS2V5VGFibGUgKgorY29tcGlsZUtleVRhYmxlIChjb25zdCBjaGFyICpuYW1lLCBLRVlfTkFNRV9UQUJMRVNfUkVGRVJFTkNFIGtleXMpIHsKKyAgS2V5VGFibGUgKnRhYmxlID0gTlVMTDsKKworICBpZiAoc2V0VGFibGVEYXRhVmFyaWFibGVzKEtFWV9UQUJMRV9FWFRFTlNJT04sIEtFWV9TVUJUQUJMRV9FWFRFTlNJT04pKSB7CisgICAgS2V5VGFibGVEYXRhIGt0ZDsKKworICAgIG1lbXNldCgma3RkLCAwLCBzaXplb2Yoa3RkKSk7CisgICAga3RkLmZpbGUgPSBuYW1lOworICAgIGt0ZC5jb250ZXh0ID0gS1RCX0NUWF9ERUZBVUxUOworCisgICAgeworICAgICAgQm91bmRDb21tYW5kICpjbWQgPSAma3RkLm51bGxCb3VuZENvbW1hbmQ7CisKKyAgICAgIGNtZC0+ZW50cnkgPSBmaW5kQ29tbWFuZEVudHJ5KGNtZC0+dmFsdWUgPSBCUkxfQ01EX05PT1ApOworICAgIH0KKworICAgIGlmICgoa3RkLnRhYmxlID0gbWFsbG9jKHNpemVvZigqa3RkLnRhYmxlKSkpKSB7CisgICAgICBrdGQudGFibGUtPnRpdGxlID0gTlVMTDsKKworICAgICAga3RkLnRhYmxlLT5ub3Rlcy50YWJsZSA9IE5VTEw7CisgICAgICBrdGQudGFibGUtPm5vdGVzLnNpemUgPSAwOworICAgICAga3RkLnRhYmxlLT5ub3Rlcy5jb3VudCA9IDA7CisKKyAgICAgIGt0ZC50YWJsZS0+a2V5TmFtZXMudGFibGUgPSBOVUxMOworICAgICAga3RkLnRhYmxlLT5rZXlOYW1lcy5jb3VudCA9IDA7CisKKyAgICAgIGt0ZC50YWJsZS0+a2V5Q29udGV4dHMudGFibGUgPSBOVUxMOworICAgICAga3RkLnRhYmxlLT5rZXlDb250ZXh0cy5jb3VudCA9IDA7CisKKyAgICAgIGt0ZC50YWJsZS0+cHJlc3NlZEtleXMudGFibGUgPSBOVUxMOworICAgICAga3RkLnRhYmxlLT5wcmVzc2VkS2V5cy5zaXplID0gMDsKKyAgICAgIGt0ZC50YWJsZS0+cHJlc3NlZEtleXMuY291bnQgPSAwOworCisgICAgICBrdGQudGFibGUtPmxvbmdQcmVzcy5hbGFybSA9IE5VTEw7CisKKyAgICAgIGt0ZC50YWJsZS0+YXV0b3JlbGVhc2UuYWxhcm0gPSBOVUxMOworICAgICAga3RkLnRhYmxlLT5hdXRvcmVsZWFzZS50aW1lID0gMDsKKworICAgICAga3RkLnRhYmxlLT5jb21tYW5kTWFjcm9zLnRhYmxlID0gTlVMTDsKKyAgICAgIGt0ZC50YWJsZS0+Y29tbWFuZE1hY3Jvcy5zaXplID0gMDsKKyAgICAgIGt0ZC50YWJsZS0+Y29tbWFuZE1hY3Jvcy5jb3VudCA9IDA7CisKKyAgICAgIGt0ZC50YWJsZS0+aG9zdENvbW1hbmRzLnRhYmxlID0gTlVMTDsKKyAgICAgIGt0ZC50YWJsZS0+aG9zdENvbW1hbmRzLnNpemUgPSAwOworICAgICAga3RkLnRhYmxlLT5ob3N0Q29tbWFuZHMuY291bnQgPSAwOworCisgICAgICBrdGQudGFibGUtPm9wdGlvbnMubG9nTGFiZWwgPSBOVUxMOworICAgICAga3RkLnRhYmxlLT5vcHRpb25zLmxvZ0tleUV2ZW50c0ZsYWcgPSBOVUxMOworICAgICAga3RkLnRhYmxlLT5vcHRpb25zLmtleWJvYXJkRW5hYmxlZEZsYWcgPSBOVUxMOworCisgICAgICBpZiAoZGVmaW5lSW5pdGlhbEtleUNvbnRleHRzKCZrdGQpKSB7CisgICAgICAgIGlmIChhbGxvY2F0ZUtleU5hbWVUYWJsZSgma3RkLCBrZXlzKSkgeworICAgICAgICAgIGlmIChhbGxvY2F0ZUNvbW1hbmRUYWJsZSgma3RkKSkgeworICAgICAgICAgICAgY29uc3QgRGF0YUZpbGVQYXJhbWV0ZXJzIHBhcmFtZXRlcnMgPSB7CisgICAgICAgICAgICAgIC5wcm9jZXNzT3BlcmFuZHMgPSBwcm9jZXNzS2V5VGFibGVPcGVyYW5kcywKKyAgICAgICAgICAgICAgLmRhdGEgPSAma3RkCisgICAgICAgICAgICB9OworCisgICAgICAgICAgICBpZiAocHJvY2Vzc0RhdGFGaWxlKG5hbWUsICZwYXJhbWV0ZXJzKSkgeworICAgICAgICAgICAgICBpZiAoZmluaXNoS2V5VGFibGUoJmt0ZCkpIHsKKyAgICAgICAgICAgICAgICB0YWJsZSA9IGt0ZC50YWJsZTsKKyAgICAgICAgICAgICAgICBrdGQudGFibGUgPSBOVUxMOworICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChrdGQuY29tbWFuZFRhYmxlKSBmcmVlKGt0ZC5jb21tYW5kVGFibGUpOworICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgfQorCisgICAgICBpZiAoa3RkLnRhYmxlKSBkZXN0cm95S2V5VGFibGUoa3RkLnRhYmxlKTsKKyAgICB9IGVsc2UgeworICAgICAgbG9nTWFsbG9jRXJyb3IoKTsKKyAgICB9CisgIH0KKworICByZXR1cm4gdGFibGU7Cit9CisKK3ZvaWQKK2Rlc3Ryb3lLZXlUYWJsZSAoS2V5VGFibGUgKnRhYmxlKSB7CisgIHJlc2V0TG9uZ1ByZXNzRGF0YSh0YWJsZSk7CisgIHNldEtleUF1dG9yZWxlYXNlVGltZSh0YWJsZSwgMCk7CisKKyAgd2hpbGUgKHRhYmxlLT5ub3Rlcy5jb3VudCkgZnJlZSh0YWJsZS0+bm90ZXMudGFibGVbLS10YWJsZS0+bm90ZXMuY291bnRdKTsKKworICB3aGlsZSAodGFibGUtPmtleUNvbnRleHRzLmNvdW50KSB7CisgICAgS2V5Q29udGV4dCAqY3R4ID0gJnRhYmxlLT5rZXlDb250ZXh0cy50YWJsZVstLXRhYmxlLT5rZXlDb250ZXh0cy5jb3VudF07CisKKyAgICBpZiAoY3R4LT5uYW1lKSBmcmVlKGN0eC0+bmFtZSk7CisgICAgaWYgKGN0eC0+dGl0bGUpIGZyZWUoY3R4LT50aXRsZSk7CisKKyAgICBpZiAoY3R4LT5rZXlCaW5kaW5ncy50YWJsZSkgZnJlZShjdHgtPmtleUJpbmRpbmdzLnRhYmxlKTsKKyAgICBpZiAoY3R4LT5ob3RrZXlzLnRhYmxlKSBmcmVlKGN0eC0+aG90a2V5cy50YWJsZSk7CisgICAgaWYgKGN0eC0+bWFwcGVkS2V5cy50YWJsZSkgZnJlZShjdHgtPm1hcHBlZEtleXMudGFibGUpOworICB9CisKKyAgaWYgKHRhYmxlLT5jb21tYW5kTWFjcm9zLnRhYmxlKSB7CisgICAgd2hpbGUgKHRhYmxlLT5jb21tYW5kTWFjcm9zLmNvdW50ID4gMCkgeworICAgICAgQ29tbWFuZE1hY3JvICptYWNybyA9ICZ0YWJsZS0+Y29tbWFuZE1hY3Jvcy50YWJsZVstLXRhYmxlLT5jb21tYW5kTWFjcm9zLmNvdW50XTsKKyAgICAgIGZyZWUobWFjcm8tPmNvbW1hbmRzKTsKKyAgICB9CisKKyAgICBmcmVlKHRhYmxlLT5jb21tYW5kTWFjcm9zLnRhYmxlKTsKKyAgfQorCisgIGlmICh0YWJsZS0+aG9zdENvbW1hbmRzLnRhYmxlKSB7CisgICAgd2hpbGUgKHRhYmxlLT5ob3N0Q29tbWFuZHMuY291bnQgPiAwKSB7CisgICAgICBIb3N0Q29tbWFuZCAqaGNtZCA9ICZ0YWJsZS0+aG9zdENvbW1hbmRzLnRhYmxlWy0tdGFibGUtPmhvc3RDb21tYW5kcy5jb3VudF07CisgICAgICBmcmVlKGhjbWQtPmFyZ3VtZW50cyk7CisgICAgfQorCisgICAgZnJlZSh0YWJsZS0+aG9zdENvbW1hbmRzLnRhYmxlKTsKKyAgfQorCisgIGlmICh0YWJsZS0+a2V5Q29udGV4dHMudGFibGUpIGZyZWUodGFibGUtPmtleUNvbnRleHRzLnRhYmxlKTsKKyAgaWYgKHRhYmxlLT5rZXlOYW1lcy50YWJsZSkgZnJlZSh0YWJsZS0+a2V5TmFtZXMudGFibGUpOworICBpZiAodGFibGUtPm5vdGVzLnRhYmxlKSBmcmVlKHRhYmxlLT5ub3Rlcy50YWJsZSk7CisgIGlmICh0YWJsZS0+dGl0bGUpIGZyZWUodGFibGUtPnRpdGxlKTsKKyAgaWYgKHRhYmxlLT5wcmVzc2VkS2V5cy50YWJsZSkgZnJlZSh0YWJsZS0+cHJlc3NlZEtleXMudGFibGUpOworICBmcmVlKHRhYmxlKTsKK30KKworY2hhciAqCitlbnN1cmVLZXlUYWJsZUV4dGVuc2lvbiAoY29uc3QgY2hhciAqcGF0aCkgeworICByZXR1cm4gZW5zdXJlRmlsZUV4dGVuc2lvbihwYXRoLCBLRVlfVEFCTEVfRVhURU5TSU9OKTsKK30KKworY2hhciAqCittYWtlS2V5VGFibGVQYXRoIChjb25zdCBjaGFyICpkaXJlY3RvcnksIGNvbnN0IGNoYXIgKm5hbWUpIHsKKyAgcmV0dXJuIG1ha2VGaWxlUGF0aChkaXJlY3RvcnksIG5hbWUsIEtFWV9UQUJMRV9FWFRFTlNJT04pOworfQorCitjaGFyICoKK21ha2VLZXlib2FyZFRhYmxlUGF0aCAoY29uc3QgY2hhciAqZGlyZWN0b3J5LCBjb25zdCBjaGFyICpuYW1lKSB7CisgIGNoYXIgKnN1YmRpcmVjdG9yeSA9IG1ha2VQYXRoKGRpcmVjdG9yeSwgS0VZQk9BUkRfVEFCTEVTX1NVQkRJUkVDVE9SWSk7CisKKyAgaWYgKHN1YmRpcmVjdG9yeSkgeworICAgIGNoYXIgKmZpbGUgPSBtYWtlS2V5VGFibGVQYXRoKHN1YmRpcmVjdG9yeSwgbmFtZSk7CisKKyAgICBmcmVlKHN1YmRpcmVjdG9yeSk7CisgICAgaWYgKGZpbGUpIHJldHVybiBmaWxlOworICB9CisKKyAgcmV0dXJuIE5VTEw7Cit9CisKK2NoYXIgKgorbWFrZUlucHV0VGFibGVQYXRoIChjb25zdCBjaGFyICpkaXJlY3RvcnksIGNvbnN0IGNoYXIgKmRyaXZlciwgY29uc3QgY2hhciAqbmFtZSkgeworICBjb25zdCBjaGFyICpjb21wb25lbnRzW10gPSB7CisgICAgZGlyZWN0b3J5LAorICAgIElOUFVUX1RBQkxFU19TVUJESVJFQ1RPUlksCisgICAgZHJpdmVyCisgIH07CisgIGNoYXIgKnN1YmRpcmVjdG9yeSA9IGpvaW5QYXRoKGNvbXBvbmVudHMsIEFSUkFZX0NPVU5UKGNvbXBvbmVudHMpKTsKKworICBpZiAoc3ViZGlyZWN0b3J5KSB7CisgICAgY2hhciAqZmlsZSA9IG1ha2VLZXlUYWJsZVBhdGgoc3ViZGlyZWN0b3J5LCBuYW1lKTsKKworICAgIGZyZWUoc3ViZGlyZWN0b3J5KTsKKyAgICBpZiAoZmlsZSkgcmV0dXJuIGZpbGU7CisgIH0KKworICByZXR1cm4gTlVMTDsKK30KZGlmZiAtLWdpdCBhL1Byb2dyYW1zL2t0Yl9pbnNwZWN0LmggYi9Qcm9ncmFtcy9rdGJfaW5zcGVjdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgzN2Q0MDIKLS0tIC9kZXYvbnVsbAorKysgYi9Qcm9ncmFtcy9rdGJfaW5zcGVjdC5oCkBAIC0wLDAgKzEsNDUgQEAKKy8qCisgKiBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorICogICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorICoKKyAqIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorICoKKyAqIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyAqLworCisjaWZuZGVmIEJSTFRUWV9JTkNMVURFRF9LVEJfSU5TUEVDVAorI2RlZmluZSBCUkxUVFlfSU5DTFVERURfS1RCX0lOU1BFQ1QKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZiAvKiBfX2NwbHVzcGx1cyAqLworCitzdGF0aWMgaW5saW5lIGNvbnN0IEtleUNvbnRleHQgKgorZ2V0S2V5Q29udGV4dCAoS2V5VGFibGUgKnRhYmxlLCB1bnNpZ25lZCBjaGFyIGNvbnRleHQpIHsKKyAgaWYgKGNvbnRleHQgPCB0YWJsZS0+a2V5Q29udGV4dHMuY291bnQpIHJldHVybiAmdGFibGUtPmtleUNvbnRleHRzLnRhYmxlW2NvbnRleHRdOworICByZXR1cm4gTlVMTDsKK30KKworc3RhdGljIGlubGluZSBjb25zdCBLZXlDb250ZXh0ICpnZXRDdXJyZW50S2V5Q29udGV4dChLZXlUYWJsZSAqdGFibGUpIHsKKyAgcmV0dXJuIGdldEtleUNvbnRleHQodGFibGUsIHRhYmxlLT5jb250ZXh0LmN1cnJlbnQpOworfQorCitzdGF0aWMgaW5saW5lIGludAoraXNUZW1wb3JhcnlLZXlDb250ZXh0IChjb25zdCBLZXlUYWJsZSAqdGFibGUsIGNvbnN0IEtleUNvbnRleHQgKmN0eCkgeworICByZXR1cm4gKChjdHggLSB0YWJsZS0+a2V5Q29udGV4dHMudGFibGUpID4gS1RCX0NUWF9ERUZBVUxUKSAmJiAhY3R4LT50aXRsZTsKK30KKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYgLyogX19jcGx1c3BsdXMgKi8KKworI2VuZGlmIC8qIEJSTFRUWV9JTkNMVURFRF9LVEJfSU5TUEVDVCAqLwpkaWZmIC0tZ2l0IGEvUHJvZ3JhbXMva3RiX2ludGVybmFsLmggYi9Qcm9ncmFtcy9rdGJfaW50ZXJuYWwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZTViM2I2Ci0tLSAvZGV2L251bGwKKysrIGIvUHJvZ3JhbXMva3RiX2ludGVybmFsLmgKQEAgLTAsMCArMSwyMzAgQEAKKy8qCisgKiBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorICogICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorICoKKyAqIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorICoKKyAqIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyAqLworCisjaWZuZGVmIEJSTFRUWV9JTkNMVURFRF9LVEJfSU5URVJOQUwKKyNkZWZpbmUgQlJMVFRZX0lOQ0xVREVEX0tUQl9JTlRFUk5BTAorCisjaW5jbHVkZSAic3RyZm10aC5oIgorI2luY2x1ZGUgImNtZF90eXBlcy5oIgorI2luY2x1ZGUgImFzeW5jX2hhbmRsZS5oIgorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmIC8qIF9fY3BsdXNwbHVzICovCisKKyNkZWZpbmUgTUFYX01PRElGSUVSU19QRVJfQ09NQklOQVRJT04gMTAKKwordHlwZWRlZiBzdHJ1Y3QgeworICBjb25zdCBjaGFyICpuYW1lOworICBpbnQgYml0OworfSBLZXlib2FyZEZ1bmN0aW9uOworCitleHRlcm4gY29uc3QgS2V5Ym9hcmRGdW5jdGlvbiBrZXlib2FyZEZ1bmN0aW9uVGFibGVbXTsKK2V4dGVybiB1bnNpZ25lZCBjaGFyIGtleWJvYXJkRnVuY3Rpb25Db3VudDsKKwordHlwZWRlZiBlbnVtIHsKKyAgS0NGX0lNTUVESUFURV9LRVkgPSAwWDAxCit9IEtleUNvbWJpbmF0aW9uRmxhZzsKKwordHlwZWRlZiBzdHJ1Y3QgeworICB1bnNpZ25lZCBjaGFyIGZsYWdzOworICB1bnNpZ25lZCBjaGFyIGFueUtleUNvdW50OworICB1bnNpZ25lZCBjaGFyIG1vZGlmaWVyQ291bnQ7CisgIHVuc2lnbmVkIGNoYXIgbW9kaWZpZXJQb3NpdGlvbnNbTUFYX01PRElGSUVSU19QRVJfQ09NQklOQVRJT05dOworICBLZXlWYWx1ZSBtb2RpZmllcktleXNbTUFYX01PRElGSUVSU19QRVJfQ09NQklOQVRJT05dOworICBLZXlWYWx1ZSBpbW1lZGlhdGVLZXk7Cit9IEtleUNvbWJpbmF0aW9uOworCit0eXBlZGVmIHN0cnVjdCB7CisgIGNvbnN0IENvbW1hbmRFbnRyeSAqZW50cnk7CisgIGludCB2YWx1ZTsKK30gQm91bmRDb21tYW5kOworCit0eXBlZGVmIGVudW0geworICBLQkZfSElEREVOICAgID0gMFgwMSwKKyAgS0JGX0RVUExJQ0FURSA9IDBYODAKK30gS2V5QmluZGluZ0ZsYWc7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgQm91bmRDb21tYW5kIHByaW1hcnlDb21tYW5kOworICBCb3VuZENvbW1hbmQgc2Vjb25kYXJ5Q29tbWFuZDsKKyAgS2V5Q29tYmluYXRpb24ga2V5Q29tYmluYXRpb247CisgIHVuc2lnbmVkIGNoYXIgZmxhZ3M7Cit9IEtleUJpbmRpbmc7CisKK3R5cGVkZWYgZW51bSB7CisgIEhLRl9ISURERU4gICAgPSAwWDAxLAorICBIS0ZfRFVQTElDQVRFID0gMFg4MAorfSBIb3RrZXlGbGFnOworCit0eXBlZGVmIHN0cnVjdCB7CisgIEtleVZhbHVlIGtleVZhbHVlOworICBCb3VuZENvbW1hbmQgcHJlc3NDb21tYW5kOworICBCb3VuZENvbW1hbmQgcmVsZWFzZUNvbW1hbmQ7CisgIHVuc2lnbmVkIGNoYXIgZmxhZ3M7Cit9IEhvdGtleUVudHJ5OworCit0eXBlZGVmIGVudW0geworICBNS0ZfSElEREVOICAgID0gMFgwMSwKKyAgTUtGX0RVUExJQ0FURSA9IDBYODAKK30gTWFwcGVkS2V5RmxhZzsKKwordHlwZWRlZiBzdHJ1Y3QgeworICBLZXlWYWx1ZSBrZXlWYWx1ZTsKKyAgY29uc3QgS2V5Ym9hcmRGdW5jdGlvbiAqa2V5Ym9hcmRGdW5jdGlvbjsKKyAgdW5zaWduZWQgY2hhciBmbGFnczsKK30gTWFwcGVkS2V5RW50cnk7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgd2NoYXJfdCAqbmFtZTsKKyAgd2NoYXJfdCAqdGl0bGU7CisKKyAgdW5zaWduZWQgY2hhciBpc1NwZWNpYWwgOiAxOworICB1bnNpZ25lZCBjaGFyIGlzRGVmaW5lZCA6IDE7CisgIHVuc2lnbmVkIGNoYXIgaXNSZWZlcmVuY2VkIDogMTsKKyAgdW5zaWduZWQgY2hhciBpc0lzb2xhdGVkIDogMTsKKworICBzdHJ1Y3QgeworICAgIEtleUJpbmRpbmcgKnRhYmxlOworICAgIHVuc2lnbmVkIGludCBzaXplOworICAgIHVuc2lnbmVkIGludCBjb3VudDsKKyAgfSBrZXlCaW5kaW5nczsKKworICBzdHJ1Y3QgeworICAgIEhvdGtleUVudHJ5ICp0YWJsZTsKKyAgICB1bnNpZ25lZCBpbnQgc2l6ZTsKKyAgICB1bnNpZ25lZCBpbnQgY291bnQ7CisgIH0gaG90a2V5czsKKworICBzdHJ1Y3QgeworICAgIE1hcHBlZEtleUVudHJ5ICp0YWJsZTsKKyAgICB1bnNpZ25lZCBpbnQgc2l6ZTsKKyAgICB1bnNpZ25lZCBpbnQgY291bnQ7CisgICAgaW50IHN1cGVyaW1wb3NlOworICB9IG1hcHBlZEtleXM7Cit9IEtleUNvbnRleHQ7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgQm91bmRDb21tYW5kICpjb21tYW5kczsKKyAgdW5zaWduZWQgaW50IGNvdW50OworfSBDb21tYW5kTWFjcm87CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgY2hhciAqKmFyZ3VtZW50czsKKyAgdW5zaWduZWQgaW50IGNvdW50OworfSBIb3N0Q29tbWFuZDsKKworc3RydWN0IEtleVRhYmxlU3RydWN0IHsKKyAgd2NoYXJfdCAqdGl0bGU7CisKKyAgc3RydWN0IHsKKyAgICB3Y2hhcl90ICoqdGFibGU7CisgICAgdW5zaWduZWQgaW50IHNpemU7CisgICAgdW5zaWduZWQgaW50IGNvdW50OworICB9IG5vdGVzOworCisgIHN0cnVjdCB7CisgICAgY29uc3QgS2V5TmFtZUVudHJ5ICoqdGFibGU7CisgICAgdW5zaWduZWQgaW50IGNvdW50OworICB9IGtleU5hbWVzOworCisgIHN0cnVjdCB7CisgICAgS2V5Q29udGV4dCAqdGFibGU7CisgICAgdW5zaWduZWQgaW50IGNvdW50OworICB9IGtleUNvbnRleHRzOworCisgIHN0cnVjdCB7CisgICAgdW5zaWduZWQgY2hhciBwZXJzaXN0ZW50OworICAgIHVuc2lnbmVkIGNoYXIgbmV4dDsKKyAgICB1bnNpZ25lZCBjaGFyIGN1cnJlbnQ7CisgIH0gY29udGV4dDsKKworICBzdHJ1Y3QgeworICAgIEtleVZhbHVlICp0YWJsZTsKKyAgICB1bnNpZ25lZCBpbnQgc2l6ZTsKKyAgICB1bnNpZ25lZCBpbnQgY291bnQ7CisgIH0gcHJlc3NlZEtleXM7CisKKyAgc3RydWN0IHsKKyAgICBpbnQgY29tbWFuZDsKKyAgfSByZWxlYXNlOworCisgIHN0cnVjdCB7CisgICAgQXN5bmNIYW5kbGUgYWxhcm07CisgICAgaW50IGNvbW1hbmQ7CisgICAgdW5zaWduZWQgcmVwZWF0OjE7CisKKyAgICBjb25zdCBjaGFyICprZXlBY3Rpb247CisgICAgdW5zaWduZWQgY2hhciBrZXlDb250ZXh0OworICAgIEtleVZhbHVlIGtleVZhbHVlOworICB9IGxvbmdQcmVzczsKKworICBzdHJ1Y3QgeworICAgIEFzeW5jSGFuZGxlIGFsYXJtOworICAgIGludCB0aW1lOworICB9IGF1dG9yZWxlYXNlOworCisgIHN0cnVjdCB7CisgICAgQ29tbWFuZE1hY3JvICp0YWJsZTsKKyAgICB1bnNpZ25lZCBpbnQgc2l6ZTsKKyAgICB1bnNpZ25lZCBpbnQgY291bnQ7CisgIH0gY29tbWFuZE1hY3JvczsKKworICBzdHJ1Y3QgeworICAgIEhvc3RDb21tYW5kICp0YWJsZTsKKyAgICB1bnNpZ25lZCBpbnQgc2l6ZTsKKyAgICB1bnNpZ25lZCBpbnQgY291bnQ7CisgIH0gaG9zdENvbW1hbmRzOworCisgIHN0cnVjdCB7CisgICAgY29uc3QgY2hhciAqbG9nTGFiZWw7CisgICAgY29uc3QgdW5zaWduZWQgY2hhciAqbG9nS2V5RXZlbnRzRmxhZzsKKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyICprZXlib2FyZEVuYWJsZWRGbGFnOworICB9IG9wdGlvbnM7Cit9OworCitleHRlcm4gdm9pZCBjb3B5S2V5VmFsdWVzIChLZXlWYWx1ZSAqdGFyZ2V0LCBjb25zdCBLZXlWYWx1ZSAqc291cmNlLCB1bnNpZ25lZCBpbnQgY291bnQpOworZXh0ZXJuIGludCBjb21wYXJlS2V5VmFsdWVzIChjb25zdCBLZXlWYWx1ZSAqdmFsdWUxLCBjb25zdCBLZXlWYWx1ZSAqdmFsdWUyKTsKKworZXh0ZXJuIGludCBmaW5kS2V5VmFsdWUgKAorICBjb25zdCBLZXlWYWx1ZSAqdmFsdWVzLCB1bnNpZ25lZCBpbnQgY291bnQsCisgIGNvbnN0IEtleVZhbHVlICp0YXJnZXQsIHVuc2lnbmVkIGludCAqcG9zaXRpb24KKyk7CisKK2V4dGVybiBpbnQgaW5zZXJ0S2V5VmFsdWUgKAorICBLZXlWYWx1ZSAqKnZhbHVlcywgdW5zaWduZWQgaW50ICpjb3VudCwgdW5zaWduZWQgaW50ICpzaXplLAorICBjb25zdCBLZXlWYWx1ZSAqdmFsdWUsIHVuc2lnbmVkIGludCBwb3NpdGlvbgorKTsKKworZXh0ZXJuIHZvaWQgcmVtb3ZlS2V5VmFsdWUgKEtleVZhbHVlICp2YWx1ZXMsIHVuc2lnbmVkIGludCAqY291bnQsIHVuc2lnbmVkIGludCBwb3NpdGlvbik7CitleHRlcm4gaW50IGRlbGV0ZUtleVZhbHVlIChLZXlWYWx1ZSAqdmFsdWVzLCB1bnNpZ25lZCBpbnQgKmNvdW50LCBjb25zdCBLZXlWYWx1ZSAqdmFsdWUpOworCitleHRlcm4gaW50IGNvbXBhcmVLZXlCaW5kaW5ncyAoY29uc3QgS2V5QmluZGluZyAqYmluZGluZzEsIGNvbnN0IEtleUJpbmRpbmcgKmJpbmRpbmcyKTsKK2V4dGVybiBpbnQgY29tcGFyZUhvdGtleUVudHJpZXMgKGNvbnN0IEhvdGtleUVudHJ5ICpob3RrZXkxLCBjb25zdCBIb3RrZXlFbnRyeSAqaG90a2V5Mik7CitleHRlcm4gaW50IGNvbXBhcmVNYXBwZWRLZXlFbnRyaWVzIChjb25zdCBNYXBwZWRLZXlFbnRyeSAqbWFwMSwgY29uc3QgTWFwcGVkS2V5RW50cnkgKm1hcDIpOworCitleHRlcm4gU1RSX0RFQ0xBUkVfRk9STUFUVEVSKGZvcm1hdEtleU5hbWUsIEtleVRhYmxlICp0YWJsZSwgY29uc3QgS2V5VmFsdWUgKnZhbHVlKTsKK2V4dGVybiBTVFJfREVDTEFSRV9GT1JNQVRURVIoZm9ybWF0S2V5Q29tYmluYXRpb24sIEtleVRhYmxlICp0YWJsZSwgY29uc3QgS2V5Q29tYmluYXRpb24gKmNvbWJpbmF0aW9uKTsKKworZXh0ZXJuIHZvaWQgcmVzZXRMb25nUHJlc3NEYXRhIChLZXlUYWJsZSAqdGFibGUpOworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZiAvKiBfX2NwbHVzcGx1cyAqLworCisjZW5kaWYgLyogQlJMVFRZX0lOQ0xVREVEX0tUQl9JTlRFUk5BTCAqLwpkaWZmIC0tZ2l0IGEvUHJvZ3JhbXMva3RiX2tleWJvYXJkLmMgYi9Qcm9ncmFtcy9rdGJfa2V5Ym9hcmQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNTdiMjY3Ci0tLSAvZGV2L251bGwKKysrIGIvUHJvZ3JhbXMva3RiX2tleWJvYXJkLmMKQEAgLTAsMCArMSw2MTMgQEAKKy8qCisgKiBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorICogICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorICoKKyAqIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorICoKKyAqIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyAqLworCisjaW5jbHVkZSAicHJvbG9ndWUuaCIKKworI2luY2x1ZGUgImt0Yl9rZXlib2FyZC5oIgorCitCRUdJTl9LRVlfTkFNRV9UQUJMRShrZXlib2FyZCkKKyAgS0JEX0tFWV9OQU1FKExFVFRFUiwgQSwgIkEiKSwKKyAgS0JEX0tFWV9OQU1FKExFVFRFUiwgQSwgIkxFVFRFUl9BIiksCisKKyAgS0JEX0tFWV9OQU1FKExFVFRFUiwgQiwgIkIiKSwKKyAgS0JEX0tFWV9OQU1FKExFVFRFUiwgQiwgIkxFVFRFUl9CIiksCisKKyAgS0JEX0tFWV9OQU1FKExFVFRFUiwgQywgIkMiKSwKKyAgS0JEX0tFWV9OQU1FKExFVFRFUiwgQywgIkxFVFRFUl9DIiksCisKKyAgS0JEX0tFWV9OQU1FKExFVFRFUiwgRCwgIkQiKSwKKyAgS0JEX0tFWV9OQU1FKExFVFRFUiwgRCwgIkxFVFRFUl9EIiksCisKKyAgS0JEX0tFWV9OQU1FKExFVFRFUiwgRSwgIkUiKSwKKyAgS0JEX0tFWV9OQU1FKExFVFRFUiwgRSwgIkxFVFRFUl9FIiksCisKKyAgS0JEX0tFWV9OQU1FKExFVFRFUiwgRiwgIkYiKSwKKyAgS0JEX0tFWV9OQU1FKExFVFRFUiwgRiwgIkxFVFRFUl9GIiksCisKKyAgS0JEX0tFWV9OQU1FKExFVFRFUiwgRywgIkciKSwKKyAgS0JEX0tFWV9OQU1FKExFVFRFUiwgRywgIkxFVFRFUl9HIiksCisKKyAgS0JEX0tFWV9OQU1FKExFVFRFUiwgSCwgIkgiKSwKKyAgS0JEX0tFWV9OQU1FKExFVFRFUiwgSCwgIkxFVFRFUl9IIiksCisKKyAgS0JEX0tFWV9OQU1FKExFVFRFUiwgSSwgIkkiKSwKKyAgS0JEX0tFWV9OQU1FKExFVFRFUiwgSSwgIkxFVFRFUl9JIiksCisKKyAgS0JEX0tFWV9OQU1FKExFVFRFUiwgSiwgIkoiKSwKKyAgS0JEX0tFWV9OQU1FKExFVFRFUiwgSiwgIkxFVFRFUl9KIiksCisKKyAgS0JEX0tFWV9OQU1FKExFVFRFUiwgSywgIksiKSwKKyAgS0JEX0tFWV9OQU1FKExFVFRFUiwgSywgIkxFVFRFUl9LIiksCisKKyAgS0JEX0tFWV9OQU1FKExFVFRFUiwgTCwgIkwiKSwKKyAgS0JEX0tFWV9OQU1FKExFVFRFUiwgTCwgIkxFVFRFUl9MIiksCisKKyAgS0JEX0tFWV9OQU1FKExFVFRFUiwgTSwgIk0iKSwKKyAgS0JEX0tFWV9OQU1FKExFVFRFUiwgTSwgIkxFVFRFUl9NIiksCisKKyAgS0JEX0tFWV9OQU1FKExFVFRFUiwgTiwgIk4iKSwKKyAgS0JEX0tFWV9OQU1FKExFVFRFUiwgTiwgIkxFVFRFUl9OIiksCisKKyAgS0JEX0tFWV9OQU1FKExFVFRFUiwgTywgIk8iKSwKKyAgS0JEX0tFWV9OQU1FKExFVFRFUiwgTywgIkxFVFRFUl9PIiksCisKKyAgS0JEX0tFWV9OQU1FKExFVFRFUiwgUCwgIlAiKSwKKyAgS0JEX0tFWV9OQU1FKExFVFRFUiwgUCwgIkxFVFRFUl9QIiksCisKKyAgS0JEX0tFWV9OQU1FKExFVFRFUiwgUSwgIlEiKSwKKyAgS0JEX0tFWV9OQU1FKExFVFRFUiwgUSwgIkxFVFRFUl9RIiksCisKKyAgS0JEX0tFWV9OQU1FKExFVFRFUiwgUiwgIlIiKSwKKyAgS0JEX0tFWV9OQU1FKExFVFRFUiwgUiwgIkxFVFRFUl9SIiksCisKKyAgS0JEX0tFWV9OQU1FKExFVFRFUiwgUywgIlMiKSwKKyAgS0JEX0tFWV9OQU1FKExFVFRFUiwgUywgIkxFVFRFUl9TIiksCisKKyAgS0JEX0tFWV9OQU1FKExFVFRFUiwgVCwgIlQiKSwKKyAgS0JEX0tFWV9OQU1FKExFVFRFUiwgVCwgIkxFVFRFUl9UIiksCisKKyAgS0JEX0tFWV9OQU1FKExFVFRFUiwgVSwgIlUiKSwKKyAgS0JEX0tFWV9OQU1FKExFVFRFUiwgVSwgIkxFVFRFUl9VIiksCisKKyAgS0JEX0tFWV9OQU1FKExFVFRFUiwgViwgIlYiKSwKKyAgS0JEX0tFWV9OQU1FKExFVFRFUiwgViwgIkxFVFRFUl9WIiksCisKKyAgS0JEX0tFWV9OQU1FKExFVFRFUiwgVywgIlciKSwKKyAgS0JEX0tFWV9OQU1FKExFVFRFUiwgVywgIkxFVFRFUl9XIiksCisKKyAgS0JEX0tFWV9OQU1FKExFVFRFUiwgWCwgIlgiKSwKKyAgS0JEX0tFWV9OQU1FKExFVFRFUiwgWCwgIkxFVFRFUl9YIiksCisKKyAgS0JEX0tFWV9OQU1FKExFVFRFUiwgWSwgIlkiKSwKKyAgS0JEX0tFWV9OQU1FKExFVFRFUiwgWSwgIkxFVFRFUl9ZIiksCisKKyAgS0JEX0tFWV9OQU1FKExFVFRFUiwgWiwgIloiKSwKKyAgS0JEX0tFWV9OQU1FKExFVFRFUiwgWiwgIkxFVFRFUl9aIiksCisKKyAgS0JEX0tFWV9OQU1FKE5VTUJFUiwgWmVybywgIlplcm8iKSwKKyAgS0JEX0tFWV9OQU1FKE5VTUJFUiwgWmVybywgIk5VTUJFUl9aZXJvIiksCisKKyAgS0JEX0tFWV9OQU1FKE5VTUJFUiwgT25lLCAiT25lIiksCisgIEtCRF9LRVlfTkFNRShOVU1CRVIsIE9uZSwgIk5VTUJFUl9PbmUiKSwKKworICBLQkRfS0VZX05BTUUoTlVNQkVSLCBUd28sICJUd28iKSwKKyAgS0JEX0tFWV9OQU1FKE5VTUJFUiwgVHdvLCAiTlVNQkVSX1R3byIpLAorCisgIEtCRF9LRVlfTkFNRShOVU1CRVIsIFRocmVlLCAiVGhyZWUiKSwKKyAgS0JEX0tFWV9OQU1FKE5VTUJFUiwgVGhyZWUsICJOVU1CRVJfVGhyZWUiKSwKKworICBLQkRfS0VZX05BTUUoTlVNQkVSLCBGb3VyLCAiRm91ciIpLAorICBLQkRfS0VZX05BTUUoTlVNQkVSLCBGb3VyLCAiTlVNQkVSX0ZvdXIiKSwKKworICBLQkRfS0VZX05BTUUoTlVNQkVSLCBGaXZlLCAiRml2ZSIpLAorICBLQkRfS0VZX05BTUUoTlVNQkVSLCBGaXZlLCAiTlVNQkVSX0ZpdmUiKSwKKworICBLQkRfS0VZX05BTUUoTlVNQkVSLCBTaXgsICJTaXgiKSwKKyAgS0JEX0tFWV9OQU1FKE5VTUJFUiwgU2l4LCAiTlVNQkVSX1NpeCIpLAorCisgIEtCRF9LRVlfTkFNRShOVU1CRVIsIFNldmVuLCAiU2V2ZW4iKSwKKyAgS0JEX0tFWV9OQU1FKE5VTUJFUiwgU2V2ZW4sICJOVU1CRVJfU2V2ZW4iKSwKKworICBLQkRfS0VZX05BTUUoTlVNQkVSLCBFaWdodCwgIkVpZ2h0IiksCisgIEtCRF9LRVlfTkFNRShOVU1CRVIsIEVpZ2h0LCAiTlVNQkVSX0VpZ2h0IiksCisKKyAgS0JEX0tFWV9OQU1FKE5VTUJFUiwgTmluZSwgIk5pbmUiKSwKKyAgS0JEX0tFWV9OQU1FKE5VTUJFUiwgTmluZSwgIk5VTUJFUl9OaW5lIiksCisKKyAgS0JEX0tFWV9OQU1FKFNZTUJPTCwgR3JhdmUsICJHcmF2ZSIpLAorICBLQkRfS0VZX05BTUUoU1lNQk9MLCBHcmF2ZSwgIlNZTUJPTF9HcmF2ZSIpLAorCisgIEtCRF9LRVlfTkFNRShTWU1CT0wsIE1pbnVzLCAiTWludXMiKSwKKyAgS0JEX0tFWV9OQU1FKFNZTUJPTCwgTWludXMsICJTWU1CT0xfTWludXMiKSwKKworICBLQkRfS0VZX05BTUUoU1lNQk9MLCBFcXVhbHMsICJFcXVhbHMiKSwKKyAgS0JEX0tFWV9OQU1FKFNZTUJPTCwgRXF1YWxzLCAiU1lNQk9MX0VxdWFscyIpLAorCisgIEtCRF9LRVlfTkFNRShTWU1CT0wsIEJhY2tzbGFzaCwgIkJhY2tzbGFzaCIpLAorICBLQkRfS0VZX05BTUUoU1lNQk9MLCBCYWNrc2xhc2gsICJTWU1CT0xfQmFja3NsYXNoIiksCisKKyAgS0JEX0tFWV9OQU1FKFNZTUJPTCwgTGVmdEJyYWNrZXQsICJMZWZ0QnJhY2tldCIpLAorICBLQkRfS0VZX05BTUUoU1lNQk9MLCBMZWZ0QnJhY2tldCwgIlNZTUJPTF9MZWZ0QnJhY2tldCIpLAorCisgIEtCRF9LRVlfTkFNRShTWU1CT0wsIFJpZ2h0QnJhY2tldCwgIlJpZ2h0QnJhY2tldCIpLAorICBLQkRfS0VZX05BTUUoU1lNQk9MLCBSaWdodEJyYWNrZXQsICJTWU1CT0xfUmlnaHRCcmFja2V0IiksCisKKyAgS0JEX0tFWV9OQU1FKFNZTUJPTCwgU2VtaWNvbG9uLCAiU2VtaWNvbG9uIiksCisgIEtCRF9LRVlfTkFNRShTWU1CT0wsIFNlbWljb2xvbiwgIlNZTUJPTF9TZW1pY29sb24iKSwKKworICBLQkRfS0VZX05BTUUoU1lNQk9MLCBBcG9zdHJvcGhlLCAiQXBvc3Ryb3BoZSIpLAorICBLQkRfS0VZX05BTUUoU1lNQk9MLCBBcG9zdHJvcGhlLCAiU1lNQk9MX0Fwb3N0cm9waGUiKSwKKworICBLQkRfS0VZX05BTUUoU1lNQk9MLCBFdXJvcGUyLCAiRXVyb3BlMiIpLAorICBLQkRfS0VZX05BTUUoU1lNQk9MLCBFdXJvcGUyLCAiU1lNQk9MX0V1cm9wZTIiKSwKKworICBLQkRfS0VZX05BTUUoU1lNQk9MLCBDb21tYSwgIkNvbW1hIiksCisgIEtCRF9LRVlfTkFNRShTWU1CT0wsIENvbW1hLCAiU1lNQk9MX0NvbW1hIiksCisKKyAgS0JEX0tFWV9OQU1FKFNZTUJPTCwgUGVyaW9kLCAiUGVyaW9kIiksCisgIEtCRF9LRVlfTkFNRShTWU1CT0wsIFBlcmlvZCwgIlNZTUJPTF9QZXJpb2QiKSwKKworICBLQkRfS0VZX05BTUUoU1lNQk9MLCBTbGFzaCwgIlNsYXNoIiksCisgIEtCRF9LRVlfTkFNRShTWU1CT0wsIFNsYXNoLCAiU1lNQk9MX1NsYXNoIiksCisKKyAgS0JEX0tFWV9OQU1FKFNZTUJPTCwgU3BhY2UsICJTcGFjZSIpLAorICBLQkRfS0VZX05BTUUoU1lNQk9MLCBTcGFjZSwgIlNZTUJPTF9TcGFjZSIpLAorCisgIEtCRF9LRVlfTkFNRShBQ1RJT04sIEVudGVyLCAiRW50ZXIiKSwKKyAgS0JEX0tFWV9OQU1FKEFDVElPTiwgRW50ZXIsICJBQ1RJT05fRW50ZXIiKSwKKworICBLQkRfS0VZX05BTUUoQUNUSU9OLCBUYWIsICJUYWIiKSwKKyAgS0JEX0tFWV9OQU1FKEFDVElPTiwgVGFiLCAiQUNUSU9OX1RhYiIpLAorCisgIEtCRF9LRVlfTkFNRShBQ1RJT04sIEVzY2FwZSwgIkVzY2FwZSIpLAorICBLQkRfS0VZX05BTUUoQUNUSU9OLCBFc2NhcGUsICJBQ1RJT05fRXNjYXBlIiksCisKKyAgS0JEX0tFWV9OQU1FKEFDVElPTiwgSW5zZXJ0LCAiSW5zZXJ0IiksCisgIEtCRF9LRVlfTkFNRShBQ1RJT04sIEluc2VydCwgIkFDVElPTl9JbnNlcnQiKSwKKworICBLQkRfS0VZX05BTUUoQUNUSU9OLCBEZWxldGVCYWNrd2FyZCwgIkRlbGV0ZUJhY2t3YXJkIiksCisgIEtCRF9LRVlfTkFNRShBQ1RJT04sIERlbGV0ZUJhY2t3YXJkLCAiQUNUSU9OX0RlbGV0ZUJhY2t3YXJkIiksCisKKyAgS0JEX0tFWV9OQU1FKEFDVElPTiwgRGVsZXRlRm9yd2FyZCwgIkRlbGV0ZUZvcndhcmQiKSwKKyAgS0JEX0tFWV9OQU1FKEFDVElPTiwgRGVsZXRlRm9yd2FyZCwgIkFDVElPTl9EZWxldGVGb3J3YXJkIiksCisKKyAgS0JEX0tFWV9OQU1FKEFDVElPTiwgSG9tZSwgIkhvbWUiKSwKKyAgS0JEX0tFWV9OQU1FKEFDVElPTiwgSG9tZSwgIkFDVElPTl9Ib21lIiksCisKKyAgS0JEX0tFWV9OQU1FKEFDVElPTiwgRW5kLCAiRW5kIiksCisgIEtCRF9LRVlfTkFNRShBQ1RJT04sIEVuZCwgIkFDVElPTl9FbmQiKSwKKworICBLQkRfS0VZX05BTUUoQUNUSU9OLCBQYWdlVXAsICJQYWdlVXAiKSwKKyAgS0JEX0tFWV9OQU1FKEFDVElPTiwgUGFnZVVwLCAiQUNUSU9OX1BhZ2VVcCIpLAorCisgIEtCRF9LRVlfTkFNRShBQ1RJT04sIFBhZ2VEb3duLCAiUGFnZURvd24iKSwKKyAgS0JEX0tFWV9OQU1FKEFDVElPTiwgUGFnZURvd24sICJBQ1RJT05fUGFnZURvd24iKSwKKworICBLQkRfS0VZX05BTUUoQUNUSU9OLCBBcnJvd1VwLCAiQXJyb3dVcCIpLAorICBLQkRfS0VZX05BTUUoQUNUSU9OLCBBcnJvd1VwLCAiQUNUSU9OX0Fycm93VXAiKSwKKworICBLQkRfS0VZX05BTUUoQUNUSU9OLCBBcnJvd0Rvd24sICJBcnJvd0Rvd24iKSwKKyAgS0JEX0tFWV9OQU1FKEFDVElPTiwgQXJyb3dEb3duLCAiQUNUSU9OX0Fycm93RG93biIpLAorCisgIEtCRF9LRVlfTkFNRShBQ1RJT04sIEFycm93TGVmdCwgIkFycm93TGVmdCIpLAorICBLQkRfS0VZX05BTUUoQUNUSU9OLCBBcnJvd0xlZnQsICJBQ1RJT05fQXJyb3dMZWZ0IiksCisKKyAgS0JEX0tFWV9OQU1FKEFDVElPTiwgQXJyb3dSaWdodCwgIkFycm93UmlnaHQiKSwKKyAgS0JEX0tFWV9OQU1FKEFDVElPTiwgQXJyb3dSaWdodCwgIkFDVElPTl9BcnJvd1JpZ2h0IiksCisKKyAgS0JEX0tFWV9OQU1FKEFDVElPTiwgUHJpbnRTY3JlZW4sICJQcmludFNjcmVlbiIpLAorICBLQkRfS0VZX05BTUUoQUNUSU9OLCBQcmludFNjcmVlbiwgIkFDVElPTl9QcmludFNjcmVlbiIpLAorCisgIEtCRF9LRVlfTkFNRShBQ1RJT04sIFN5c3RlbVJlcXVlc3QsICJTeXN0ZW1SZXF1ZXN0IiksCisgIEtCRF9LRVlfTkFNRShBQ1RJT04sIFN5c3RlbVJlcXVlc3QsICJBQ1RJT05fU3lzdGVtUmVxdWVzdCIpLAorCisgIEtCRF9LRVlfTkFNRShBQ1RJT04sIFBhdXNlLCAiUGF1c2UiKSwKKyAgS0JEX0tFWV9OQU1FKEFDVElPTiwgUGF1c2UsICJBQ1RJT05fUGF1c2UiKSwKKworICBLQkRfS0VZX05BTUUoQUNUSU9OLCBHdWlMZWZ0LCAiR3VpTGVmdCIpLAorICBLQkRfS0VZX05BTUUoQUNUSU9OLCBHdWlMZWZ0LCAiQUNUSU9OX0d1aUxlZnQiKSwKKworICBLQkRfS0VZX05BTUUoQUNUSU9OLCBHdWlSaWdodCwgIkd1aVJpZ2h0IiksCisgIEtCRF9LRVlfTkFNRShBQ1RJT04sIEd1aVJpZ2h0LCAiQUNUSU9OX0d1aVJpZ2h0IiksCisKKyAgS0JEX0tFWV9OQU1FKEFDVElPTiwgQ29udGV4dCwgIkNvbnRleHQiKSwKKyAgS0JEX0tFWV9OQU1FKEFDVElPTiwgQ29udGV4dCwgIkFDVElPTl9Db250ZXh0IiksCisgIEtCRF9LRVlfTkFNRShBQ1RJT04sIENvbnRleHQsICJBcHBsaWNhdGlvbiIpLAorICBLQkRfS0VZX05BTUUoQUNUSU9OLCBDb250ZXh0LCAiQUNUSU9OX0FwcGxpY2F0aW9uIiksCisKKyAgS0JEX0tFWV9OQU1FKEFDVElPTiwgSGVscCwgIkFDVElPTl9IZWxwIiksCisKKyAgS0JEX0tFWV9OQU1FKEFDVElPTiwgU3RvcCwgIkFDVElPTl9TdG9wIiksCisKKyAgS0JEX0tFWV9OQU1FKEFDVElPTiwgUHJvcHMsICJBQ1RJT05fUHJvcHMiKSwKKworICBLQkRfS0VZX05BTUUoQUNUSU9OLCBGcm9udCwgIkFDVElPTl9Gcm9udCIpLAorCisgIEtCRF9LRVlfTkFNRShBQ1RJT04sIE9wZW4sICJBQ1RJT05fT3BlbiIpLAorCisgIEtCRF9LRVlfTkFNRShBQ1RJT04sIEZpbmQsICJBQ1RJT05fRmluZCIpLAorCisgIEtCRF9LRVlfTkFNRShBQ1RJT04sIEFnYWluLCAiQUNUSU9OX0FnYWluIiksCisKKyAgS0JEX0tFWV9OQU1FKEFDVElPTiwgVW5kbywgIkFDVElPTl9VbmRvIiksCisKKyAgS0JEX0tFWV9OQU1FKEFDVElPTiwgQ29weSwgIkFDVElPTl9Db3B5IiksCisKKyAgS0JEX0tFWV9OQU1FKEFDVElPTiwgUGFzdGUsICJBQ1RJT05fUGFzdGUiKSwKKworICBLQkRfS0VZX05BTUUoQUNUSU9OLCBDdXQsICJBQ1RJT05fQ3V0IiksCisKKyAgS0JEX0tFWV9OQU1FKEFDVElPTiwgUG93ZXIsICJBQ1RJT05fUG93ZXIiKSwKKworICBLQkRfS0VZX05BTUUoQUNUSU9OLCBTbGVlcCwgIkFDVElPTl9TbGVlcCIpLAorCisgIEtCRF9LRVlfTkFNRShBQ1RJT04sIFdha2V1cCwgIkFDVElPTl9XYWtldXAiKSwKKworICBLQkRfS0VZX05BTUUoQUNUSU9OLCBNZW51LCAiQUNUSU9OX01lbnUiKSwKKworICBLQkRfS0VZX05BTUUoQUNUSU9OLCBTZWxlY3QsICJTZWxlY3QiKSwKKyAgS0JEX0tFWV9OQU1FKEFDVElPTiwgU2VsZWN0LCAiQUNUSU9OX1NlbGVjdCIpLAorCisgIEtCRF9LRVlfTkFNRShBQ1RJT04sIENhbmNlbCwgIkFDVElPTl9DYW5jZWwiKSwKKworICBLQkRfS0VZX05BTUUoQUNUSU9OLCBDbGVhciwgIkFDVElPTl9DbGVhciIpLAorCisgIEtCRF9LRVlfTkFNRShBQ1RJT04sIFByaW9yLCAiQUNUSU9OX1ByaW9yIiksCisKKyAgS0JEX0tFWV9OQU1FKEFDVElPTiwgUmV0dXJuLCAiQUNUSU9OX1JldHVybiIpLAorCisgIEtCRF9LRVlfTkFNRShBQ1RJT04sIFNlcGFyYXRvciwgIkFDVElPTl9TZXBhcmF0b3IiKSwKKworICBLQkRfS0VZX05BTUUoQUNUSU9OLCBPdXQsICJBQ1RJT05fT3V0IiksCisKKyAgS0JEX0tFWV9OQU1FKEFDVElPTiwgT3BlciwgIkFDVElPTl9PcGVyIiksCisKKyAgS0JEX0tFWV9OQU1FKEFDVElPTiwgQ2xlYXJfQWdhaW4sICJBQ1RJT05fQ2xlYXJfQWdhaW4iKSwKKworICBLQkRfS0VZX05BTUUoQUNUSU9OLCBDclNlbF9Qcm9wcywgIkFDVElPTl9DclNlbF9Qcm9wcyIpLAorCisgIEtCRF9LRVlfTkFNRShBQ1RJT04sIEV4U2VsLCAiQUNUSU9OX0V4U2VsIiksCisKKyAgS0JEX0tFWV9OQU1FKE1FRElBLCBNdXRlLCAiTUVESUFfTXV0ZSIpLAorCisgIEtCRF9LRVlfTkFNRShNRURJQSwgVm9sdW1lRG93biwgIk1FRElBX1ZvbHVtZURvd24iKSwKKworICBLQkRfS0VZX05BTUUoTUVESUEsIFZvbHVtZVVwLCAiTUVESUFfVm9sdW1lVXAiKSwKKworICBLQkRfS0VZX05BTUUoTUVESUEsIFN0b3AsICJNRURJQV9TdG9wIiksCisKKyAgS0JEX0tFWV9OQU1FKE1FRElBLCBQbGF5LCAiTUVESUFfUGxheSIpLAorCisgIEtCRF9LRVlfTkFNRShNRURJQSwgUmVjb3JkLCAiTUVESUFfUmVjb3JkIiksCisKKyAgS0JEX0tFWV9OQU1FKE1FRElBLCBQYXVzZSwgIk1FRElBX1BhdXNlIiksCisKKyAgS0JEX0tFWV9OQU1FKE1FRElBLCBQbGF5UGF1c2UsICJNRURJQV9QbGF5UGF1c2UiKSwKKworICBLQkRfS0VZX05BTUUoTUVESUEsIFByZXZpb3VzLCAiTUVESUFfUHJldmlvdXMiKSwKKworICBLQkRfS0VZX05BTUUoTUVESUEsIE5leHQsICJNRURJQV9OZXh0IiksCisKKyAgS0JEX0tFWV9OQU1FKE1FRElBLCBCYWNrd2FyZCwgIk1FRElBX0JhY2t3YXJkIiksCisKKyAgS0JEX0tFWV9OQU1FKE1FRElBLCBGb3J3YXJkLCAiTUVESUFfRm9yd2FyZCIpLAorCisgIEtCRF9LRVlfTkFNRShNRURJQSwgRWplY3QsICJNRURJQV9FamVjdCIpLAorCisgIEtCRF9LRVlfTkFNRShNRURJQSwgQ2xvc2UsICJNRURJQV9DbG9zZSIpLAorCisgIEtCRF9LRVlfTkFNRShNRURJQSwgRWplY3RDbG9zZSwgIk1FRElBX0VqZWN0Q2xvc2UiKSwKKworICBLQkRfS0VZX05BTUUoRlVOQ1RJT04sIEYxLCAiRjEiKSwKKyAgS0JEX0tFWV9OQU1FKEZVTkNUSU9OLCBGMSwgIkZVTkNUSU9OX0YxIiksCisKKyAgS0JEX0tFWV9OQU1FKEZVTkNUSU9OLCBGMiwgIkYyIiksCisgIEtCRF9LRVlfTkFNRShGVU5DVElPTiwgRjIsICJGVU5DVElPTl9GMiIpLAorCisgIEtCRF9LRVlfTkFNRShGVU5DVElPTiwgRjMsICJGMyIpLAorICBLQkRfS0VZX05BTUUoRlVOQ1RJT04sIEYzLCAiRlVOQ1RJT05fRjMiKSwKKworICBLQkRfS0VZX05BTUUoRlVOQ1RJT04sIEY0LCAiRjQiKSwKKyAgS0JEX0tFWV9OQU1FKEZVTkNUSU9OLCBGNCwgIkZVTkNUSU9OX0Y0IiksCisKKyAgS0JEX0tFWV9OQU1FKEZVTkNUSU9OLCBGNSwgIkY1IiksCisgIEtCRF9LRVlfTkFNRShGVU5DVElPTiwgRjUsICJGVU5DVElPTl9GNSIpLAorCisgIEtCRF9LRVlfTkFNRShGVU5DVElPTiwgRjYsICJGNiIpLAorICBLQkRfS0VZX05BTUUoRlVOQ1RJT04sIEY2LCAiRlVOQ1RJT05fRjYiKSwKKworICBLQkRfS0VZX05BTUUoRlVOQ1RJT04sIEY3LCAiRjciKSwKKyAgS0JEX0tFWV9OQU1FKEZVTkNUSU9OLCBGNywgIkZVTkNUSU9OX0Y3IiksCisKKyAgS0JEX0tFWV9OQU1FKEZVTkNUSU9OLCBGOCwgIkY4IiksCisgIEtCRF9LRVlfTkFNRShGVU5DVElPTiwgRjgsICJGVU5DVElPTl9GOCIpLAorCisgIEtCRF9LRVlfTkFNRShGVU5DVElPTiwgRjksICJGOSIpLAorICBLQkRfS0VZX05BTUUoRlVOQ1RJT04sIEY5LCAiRlVOQ1RJT05fRjkiKSwKKworICBLQkRfS0VZX05BTUUoRlVOQ1RJT04sIEYxMCwgIkYxMCIpLAorICBLQkRfS0VZX05BTUUoRlVOQ1RJT04sIEYxMCwgIkZVTkNUSU9OX0YxMCIpLAorCisgIEtCRF9LRVlfTkFNRShGVU5DVElPTiwgRjExLCAiRjExIiksCisgIEtCRF9LRVlfTkFNRShGVU5DVElPTiwgRjExLCAiRlVOQ1RJT05fRjExIiksCisKKyAgS0JEX0tFWV9OQU1FKEZVTkNUSU9OLCBGMTIsICJGMTIiKSwKKyAgS0JEX0tFWV9OQU1FKEZVTkNUSU9OLCBGMTIsICJGVU5DVElPTl9GMTIiKSwKKworICBLQkRfS0VZX05BTUUoRlVOQ1RJT04sIEYxMywgIkYxMyIpLAorICBLQkRfS0VZX05BTUUoRlVOQ1RJT04sIEYxMywgIkZVTkNUSU9OX0YxMyIpLAorCisgIEtCRF9LRVlfTkFNRShGVU5DVElPTiwgRjE0LCAiRjE0IiksCisgIEtCRF9LRVlfTkFNRShGVU5DVElPTiwgRjE0LCAiRlVOQ1RJT05fRjE0IiksCisKKyAgS0JEX0tFWV9OQU1FKEZVTkNUSU9OLCBGMTUsICJGMTUiKSwKKyAgS0JEX0tFWV9OQU1FKEZVTkNUSU9OLCBGMTUsICJGVU5DVElPTl9GMTUiKSwKKworICBLQkRfS0VZX05BTUUoRlVOQ1RJT04sIEYxNiwgIkYxNiIpLAorICBLQkRfS0VZX05BTUUoRlVOQ1RJT04sIEYxNiwgIkZVTkNUSU9OX0YxNiIpLAorCisgIEtCRF9LRVlfTkFNRShGVU5DVElPTiwgRjE3LCAiRjE3IiksCisgIEtCRF9LRVlfTkFNRShGVU5DVElPTiwgRjE3LCAiRlVOQ1RJT05fRjE3IiksCisKKyAgS0JEX0tFWV9OQU1FKEZVTkNUSU9OLCBGMTgsICJGMTgiKSwKKyAgS0JEX0tFWV9OQU1FKEZVTkNUSU9OLCBGMTgsICJGVU5DVElPTl9GMTgiKSwKKworICBLQkRfS0VZX05BTUUoRlVOQ1RJT04sIEYxOSwgIkYxOSIpLAorICBLQkRfS0VZX05BTUUoRlVOQ1RJT04sIEYxOSwgIkZVTkNUSU9OX0YxOSIpLAorCisgIEtCRF9LRVlfTkFNRShGVU5DVElPTiwgRjIwLCAiRjIwIiksCisgIEtCRF9LRVlfTkFNRShGVU5DVElPTiwgRjIwLCAiRlVOQ1RJT05fRjIwIiksCisKKyAgS0JEX0tFWV9OQU1FKEZVTkNUSU9OLCBGMjEsICJGMjEiKSwKKyAgS0JEX0tFWV9OQU1FKEZVTkNUSU9OLCBGMjEsICJGVU5DVElPTl9GMjEiKSwKKworICBLQkRfS0VZX05BTUUoRlVOQ1RJT04sIEYyMiwgIkYyMiIpLAorICBLQkRfS0VZX05BTUUoRlVOQ1RJT04sIEYyMiwgIkZVTkNUSU9OX0YyMiIpLAorCisgIEtCRF9LRVlfTkFNRShGVU5DVElPTiwgRjIzLCAiRjIzIiksCisgIEtCRF9LRVlfTkFNRShGVU5DVElPTiwgRjIzLCAiRlVOQ1RJT05fRjIzIiksCisKKyAgS0JEX0tFWV9OQU1FKEZVTkNUSU9OLCBGMjQsICJGMjQiKSwKKyAgS0JEX0tFWV9OQU1FKEZVTkNUSU9OLCBGMjQsICJGVU5DVElPTl9GMjQiKSwKKworICBLQkRfS0VZX05BTUUoTU9ESUZJRVIsIFNoaWZ0TGVmdCwgIlNoaWZ0TGVmdCIpLAorICBLQkRfS0VZX05BTUUoTU9ESUZJRVIsIFNoaWZ0TGVmdCwgIk1PRElGSUVSX1NoaWZ0TGVmdCIpLAorCisgIEtCRF9LRVlfTkFNRShNT0RJRklFUiwgU2hpZnRSaWdodCwgIlNoaWZ0UmlnaHQiKSwKKyAgS0JEX0tFWV9OQU1FKE1PRElGSUVSLCBTaGlmdFJpZ2h0LCAiTU9ESUZJRVJfU2hpZnRSaWdodCIpLAorCisgIEtCRF9LRVlfTkFNRShNT0RJRklFUiwgQ29udHJvbExlZnQsICJDb250cm9sTGVmdCIpLAorICBLQkRfS0VZX05BTUUoTU9ESUZJRVIsIENvbnRyb2xMZWZ0LCAiTU9ESUZJRVJfQ29udHJvbExlZnQiKSwKKworICBLQkRfS0VZX05BTUUoTU9ESUZJRVIsIENvbnRyb2xSaWdodCwgIkNvbnRyb2xSaWdodCIpLAorICBLQkRfS0VZX05BTUUoTU9ESUZJRVIsIENvbnRyb2xSaWdodCwgIk1PRElGSUVSX0NvbnRyb2xSaWdodCIpLAorCisgIEtCRF9LRVlfTkFNRShNT0RJRklFUiwgQWx0TGVmdCwgIkFsdExlZnQiKSwKKyAgS0JEX0tFWV9OQU1FKE1PRElGSUVSLCBBbHRMZWZ0LCAiTU9ESUZJRVJfQWx0TGVmdCIpLAorICBLQkRfS0VZX05BTUUoTU9ESUZJRVIsIEFsdExlZnQsICJBbHQiKSwKKyAgS0JEX0tFWV9OQU1FKE1PRElGSUVSLCBBbHRMZWZ0LCAiTU9ESUZJRVJfQWx0IiksCisKKyAgS0JEX0tFWV9OQU1FKE1PRElGSUVSLCBBbHRSaWdodCwgIkFsdFJpZ2h0IiksCisgIEtCRF9LRVlfTkFNRShNT0RJRklFUiwgQWx0UmlnaHQsICJNT0RJRklFUl9BbHRSaWdodCIpLAorICBLQkRfS0VZX05BTUUoTU9ESUZJRVIsIEFsdFJpZ2h0LCAiQWx0R3IiKSwKKyAgS0JEX0tFWV9OQU1FKE1PRElGSUVSLCBBbHRSaWdodCwgIk1PRElGSUVSX0FsdEdyIiksCisKKyAgS0JEX0tFWV9OQU1FKExPQ0ssIENhcGl0YWxzLCAiQ2Fwc0xvY2siKSwKKyAgS0JEX0tFWV9OQU1FKExPQ0ssIENhcGl0YWxzLCAiTE9DS19DYXBpdGFscyIpLAorCisgIEtCRF9LRVlfTkFNRShMT0NLLCBTY3JvbGwsICJTY3JvbGxMb2NrIiksCisgIEtCRF9LRVlfTkFNRShMT0NLLCBTY3JvbGwsICJMT0NLX1Njcm9sbCIpLAorCisgIEtCRF9LRVlfTkFNRShMT0NLLCBOdW1iZXJzLCAiTnVtTG9jayIpLAorICBLQkRfS0VZX05BTUUoTE9DSywgTnVtYmVycywgIkxPQ0tfTnVtYmVycyIpLAorCisgIEtCRF9LRVlfTkFNRShLUE5VTUJFUiwgWmVybywgIktQMCIpLAorICBLQkRfS0VZX05BTUUoS1BOVU1CRVIsIFplcm8sICJLUE5VTUJFUl9aZXJvIiksCisKKyAgS0JEX0tFWV9OQU1FKEtQTlVNQkVSLCBPbmUsICJLUDEiKSwKKyAgS0JEX0tFWV9OQU1FKEtQTlVNQkVSLCBPbmUsICJLUE5VTUJFUl9PbmUiKSwKKworICBLQkRfS0VZX05BTUUoS1BOVU1CRVIsIFR3bywgIktQMiIpLAorICBLQkRfS0VZX05BTUUoS1BOVU1CRVIsIFR3bywgIktQTlVNQkVSX1R3byIpLAorCisgIEtCRF9LRVlfTkFNRShLUE5VTUJFUiwgVGhyZWUsICJLUDMiKSwKKyAgS0JEX0tFWV9OQU1FKEtQTlVNQkVSLCBUaHJlZSwgIktQTlVNQkVSX1RocmVlIiksCisKKyAgS0JEX0tFWV9OQU1FKEtQTlVNQkVSLCBGb3VyLCAiS1A0IiksCisgIEtCRF9LRVlfTkFNRShLUE5VTUJFUiwgRm91ciwgIktQTlVNQkVSX0ZvdXIiKSwKKworICBLQkRfS0VZX05BTUUoS1BOVU1CRVIsIEZpdmUsICJLUDUiKSwKKyAgS0JEX0tFWV9OQU1FKEtQTlVNQkVSLCBGaXZlLCAiS1BOVU1CRVJfRml2ZSIpLAorCisgIEtCRF9LRVlfTkFNRShLUE5VTUJFUiwgU2l4LCAiS1A2IiksCisgIEtCRF9LRVlfTkFNRShLUE5VTUJFUiwgU2l4LCAiS1BOVU1CRVJfU2l4IiksCisKKyAgS0JEX0tFWV9OQU1FKEtQTlVNQkVSLCBTZXZlbiwgIktQNyIpLAorICBLQkRfS0VZX05BTUUoS1BOVU1CRVIsIFNldmVuLCAiS1BOVU1CRVJfU2V2ZW4iKSwKKworICBLQkRfS0VZX05BTUUoS1BOVU1CRVIsIEVpZ2h0LCAiS1A4IiksCisgIEtCRF9LRVlfTkFNRShLUE5VTUJFUiwgRWlnaHQsICJLUE5VTUJFUl9FaWdodCIpLAorCisgIEtCRF9LRVlfTkFNRShLUE5VTUJFUiwgTmluZSwgIktQOSIpLAorICBLQkRfS0VZX05BTUUoS1BOVU1CRVIsIE5pbmUsICJLUE5VTUJFUl9OaW5lIiksCisKKyAgS0JEX0tFWV9OQU1FKEtQTlVNQkVSLCBBLCAiS1BBIiksCisgIEtCRF9LRVlfTkFNRShLUE5VTUJFUiwgQSwgIktQTlVNQkVSX0EiKSwKKworICBLQkRfS0VZX05BTUUoS1BOVU1CRVIsIEIsICJLUEIiKSwKKyAgS0JEX0tFWV9OQU1FKEtQTlVNQkVSLCBCLCAiS1BOVU1CRVJfQiIpLAorCisgIEtCRF9LRVlfTkFNRShLUE5VTUJFUiwgQywgIktQQyIpLAorICBLQkRfS0VZX05BTUUoS1BOVU1CRVIsIEMsICJLUE5VTUJFUl9DIiksCisKKyAgS0JEX0tFWV9OQU1FKEtQTlVNQkVSLCBELCAiS1BEIiksCisgIEtCRF9LRVlfTkFNRShLUE5VTUJFUiwgRCwgIktQTlVNQkVSX0QiKSwKKworICBLQkRfS0VZX05BTUUoS1BOVU1CRVIsIEUsICJLUEUiKSwKKyAgS0JEX0tFWV9OQU1FKEtQTlVNQkVSLCBFLCAiS1BOVU1CRVJfRSIpLAorCisgIEtCRF9LRVlfTkFNRShLUE5VTUJFUiwgRiwgIktQRiIpLAorICBLQkRfS0VZX05BTUUoS1BOVU1CRVIsIEYsICJLUE5VTUJFUl9GIiksCisKKyAgS0JEX0tFWV9OQU1FKEtQU1lNQk9MLCBEZWNpbWFsU2VwYXJhdG9yLCAiS1BTWU1CT0xfRGVjaW1hbFNlcGFyYXRvciIpLAorCisgIEtCRF9LRVlfTkFNRShLUFNZTUJPTCwgVGhvdXNhbmRzU2VwYXJhdG9yLCAiS1BTWU1CT0xfVGhvdXNhbmRzU2VwYXJhdG9yIiksCisKKyAgS0JEX0tFWV9OQU1FKEtQU1lNQk9MLCAwMCwgIktQU1lNQk9MXzAwIiksCisKKyAgS0JEX0tFWV9OQU1FKEtQU1lNQk9MLCAwMDAsICJLUFNZTUJPTF8wMDAiKSwKKworICBLQkRfS0VZX05BTUUoS1BTWU1CT0wsIFBsdXMsICJLUFBsdXMiKSwKKyAgS0JEX0tFWV9OQU1FKEtQU1lNQk9MLCBQbHVzLCAiS1BTWU1CT0xfUGx1cyIpLAorCisgIEtCRF9LRVlfTkFNRShLUFNZTUJPTCwgTWludXMsICJLUE1pbnVzIiksCisgIEtCRF9LRVlfTkFNRShLUFNZTUJPTCwgTWludXMsICJLUFNZTUJPTF9NaW51cyIpLAorCisgIEtCRF9LRVlfTkFNRShLUFNZTUJPTCwgTXVsdGlwbHksICJLUE11bHRpcGx5IiksCisgIEtCRF9LRVlfTkFNRShLUFNZTUJPTCwgTXVsdGlwbHksICJLUFNZTUJPTF9NdWx0aXBseSIpLAorCisgIEtCRF9LRVlfTkFNRShLUFNZTUJPTCwgRGl2aWRlLCAiS1BEaXZpZGUiKSwKKyAgS0JEX0tFWV9OQU1FKEtQU1lNQk9MLCBEaXZpZGUsICJLUFNZTUJPTF9EaXZpZGUiKSwKKworICBLQkRfS0VZX05BTUUoS1BTWU1CT0wsIE1vZHVsbywgIktQU1lNQk9MX01vZHVsbyIpLAorCisgIEtCRF9LRVlfTkFNRShLUFNZTUJPTCwgRXF1YWxzLCAiS1BFcXVhbHMiKSwKKyAgS0JEX0tFWV9OQU1FKEtQU1lNQk9MLCBFcXVhbHMsICJLUFNZTUJPTF9FcXVhbHMiKSwKKworICBLQkRfS0VZX05BTUUoS1BTWU1CT0wsIExlc3MsICJLUFNZTUJPTF9MZXNzIiksCisKKyAgS0JEX0tFWV9OQU1FKEtQU1lNQk9MLCBHcmVhdGVyLCAiS1BTWU1CT0xfR3JlYXRlciIpLAorCisgIEtCRF9LRVlfTkFNRShLUFNZTUJPTCwgUGx1c01pbnVzLCAiS1BTWU1CT0xfUGx1c01pbnVzIiksCisKKyAgS0JEX0tFWV9OQU1FKEtQU1lNQk9MLCBMZWZ0UGFyZW50aGVzaXMsICJLUFNZTUJPTF9MZWZ0UGFyZW50aGVzaXMiKSwKKworICBLQkRfS0VZX05BTUUoS1BTWU1CT0wsIFJpZ2h0UGFyZW50aGVzaXMsICJLUFNZTUJPTF9SaWdodFBhcmVudGhlc2lzIiksCisKKyAgS0JEX0tFWV9OQU1FKEtQU1lNQk9MLCBMZWZ0QnJhY2UsICJLUFNZTUJPTF9MZWZ0QnJhY2UiKSwKKworICBLQkRfS0VZX05BTUUoS1BTWU1CT0wsIFJpZ2h0QnJhY2UsICJLUFNZTUJPTF9SaWdodEJyYWNlIiksCisKKyAgS0JEX0tFWV9OQU1FKEtQU1lNQk9MLCBCaXR3aXNlQW5kLCAiS1BTWU1CT0xfQml0d2lzZUFuZCIpLAorCisgIEtCRF9LRVlfTkFNRShLUFNZTUJPTCwgQml0d2lzZU9yLCAiS1BTWU1CT0xfQml0d2lzZU9yIiksCisKKyAgS0JEX0tFWV9OQU1FKEtQU1lNQk9MLCBCaXR3aXNlWG9yLCAiS1BTWU1CT0xfQml0d2lzZVhvciIpLAorCisgIEtCRF9LRVlfTkFNRShLUFNZTUJPTCwgQm9vbGVhbk5vdCwgIktQU1lNQk9MX0Jvb2xlYW5Ob3QiKSwKKworICBLQkRfS0VZX05BTUUoS1BTWU1CT0wsIEJvb2xlYW5BbmQsICJLUFNZTUJPTF9Cb29sZWFuQW5kIiksCisKKyAgS0JEX0tFWV9OQU1FKEtQU1lNQk9MLCBCb29sZWFuT3IsICJLUFNZTUJPTF9Cb29sZWFuT3IiKSwKKworICBLQkRfS0VZX05BTUUoS1BTWU1CT0wsIEJvb2xlYW5Yb3IsICJLUFNZTUJPTF9Cb29sZWFuWG9yIiksCisKKyAgS0JEX0tFWV9OQU1FKEtQU1lNQk9MLCBTcGFjZSwgIktQU1lNQk9MX1NwYWNlIiksCisKKyAgS0JEX0tFWV9OQU1FKEtQU1lNQk9MLCBQZXJpb2QsICJLUFBlcmlvZCIpLAorICBLQkRfS0VZX05BTUUoS1BTWU1CT0wsIFBlcmlvZCwgIktQU1lNQk9MX1BlcmlvZCIpLAorCisgIEtCRF9LRVlfTkFNRShLUFNZTUJPTCwgQ29tbWEsICJLUFNZTUJPTF9Db21tYSIpLAorCisgIEtCRF9LRVlfTkFNRShLUFNZTUJPTCwgQ29sb24sICJLUFNZTUJPTF9Db2xvbiIpLAorCisgIEtCRF9LRVlfTkFNRShLUFNZTUJPTCwgQXQsICJLUFNZTUJPTF9BdCIpLAorCisgIEtCRF9LRVlfTkFNRShLUFNZTUJPTCwgTnVtYmVyLCAiS1BTWU1CT0xfTnVtYmVyIiksCisKKyAgS0JEX0tFWV9OQU1FKEtQU1lNQk9MLCBDdXJyZW5jeVVuaXQsICJLUFNZTUJPTF9DdXJyZW5jeVVuaXQiKSwKKworICBLQkRfS0VZX05BTUUoS1BTWU1CT0wsIEN1cnJlbmN5U3VidW5pdCwgIktQU1lNQk9MX0N1cnJlbmN5U3VidW5pdCIpLAorCisgIEtCRF9LRVlfTkFNRShLUEFDVElPTiwgRW50ZXIsICJLUEVudGVyIiksCisgIEtCRF9LRVlfTkFNRShLUEFDVElPTiwgRW50ZXIsICJLUEFDVElPTl9FbnRlciIpLAorCisgIEtCRF9LRVlfTkFNRShLUEFDVElPTiwgQmFja3NwYWNlLCAiS1BBQ1RJT05fQmFja3NwYWNlIiksCisKKyAgS0JEX0tFWV9OQU1FKEtQQUNUSU9OLCBUYWIsICJLUEFDVElPTl9UYWIiKSwKKworICBLQkRfS0VZX05BTUUoS1BBQ1RJT04sIENsZWFyLCAiS1BBQ1RJT05fQ2xlYXIiKSwKKworICBLQkRfS0VZX05BTUUoS1BBQ1RJT04sIENsZWFyRW50cnksICJLUEFDVElPTl9DbGVhckVudHJ5IiksCisKKyAgS0JEX0tFWV9OQU1FKEtQQUNUSU9OLCBNZW1vcnlDbGVhciwgIktQQUNUSU9OX01lbW9yeUNsZWFyIiksCisKKyAgS0JEX0tFWV9OQU1FKEtQQUNUSU9OLCBNZW1vcnlTdG9yZSwgIktQQUNUSU9OX01lbW9yeVN0b3JlIiksCisKKyAgS0JEX0tFWV9OQU1FKEtQQUNUSU9OLCBNZW1vcnlSZWNhbGwsICJLUEFDVElPTl9NZW1vcnlSZWNhbGwiKSwKKworICBLQkRfS0VZX05BTUUoS1BBQ1RJT04sIE1lbW9yeUFkZCwgIktQQUNUSU9OX01lbW9yeUFkZCIpLAorCisgIEtCRF9LRVlfTkFNRShLUEFDVElPTiwgTWVtb3J5U3VidHJhY3QsICJLUEFDVElPTl9NZW1vcnlTdWJ0cmFjdCIpLAorCisgIEtCRF9LRVlfTkFNRShLUEFDVElPTiwgTWVtb3J5TXVsdGlwbHksICJLUEFDVElPTl9NZW1vcnlNdWx0aXBseSIpLAorCisgIEtCRF9LRVlfTkFNRShLUEFDVElPTiwgTWVtb3J5RGl2aWRlLCAiS1BBQ1RJT05fTWVtb3J5RGl2aWRlIiksCisKKyAgS0JEX0tFWV9OQU1FKEtQQUNUSU9OLCBCaW5hcnksICJLUEFDVElPTl9CaW5hcnkiKSwKKworICBLQkRfS0VZX05BTUUoS1BBQ1RJT04sIE9jdGFsLCAiS1BBQ1RJT05fT2N0YWwiKSwKKworICBLQkRfS0VZX05BTUUoS1BBQ1RJT04sIERlY2ltYWwsICJLUEFDVElPTl9EZWNpbWFsIiksCisKKyAgS0JEX0tFWV9OQU1FKEtQQUNUSU9OLCBIZXhhZGVjaW1hbCwgIktQQUNUSU9OX0hleGFkZWNpbWFsIiksCisKKyAgS0JEX0tFWV9OQU1FKEJSQUlMTEUsIFNwYWNlLCAiRG90MCIpLAorICBLQkRfS0VZX05BTUUoQlJBSUxMRSwgU3BhY2UsICJCUkFJTExFX0RvdDAiKSwKKyAgS0JEX0tFWV9OQU1FKEJSQUlMTEUsIFNwYWNlLCAiQlJBSUxMRV9TcGFjZSIpLAorCisgIEtCRF9LRVlfTkFNRShCUkFJTExFLCBEb3QxLCAiRG90MSIpLAorICBLQkRfS0VZX05BTUUoQlJBSUxMRSwgRG90MSwgIkJSQUlMTEVfRG90MSIpLAorCisgIEtCRF9LRVlfTkFNRShCUkFJTExFLCBEb3QyLCAiRG90MiIpLAorICBLQkRfS0VZX05BTUUoQlJBSUxMRSwgRG90MiwgIkJSQUlMTEVfRG90MiIpLAorCisgIEtCRF9LRVlfTkFNRShCUkFJTExFLCBEb3QzLCAiRG90MyIpLAorICBLQkRfS0VZX05BTUUoQlJBSUxMRSwgRG90MywgIkJSQUlMTEVfRG90MyIpLAorCisgIEtCRF9LRVlfTkFNRShCUkFJTExFLCBEb3Q0LCAiRG90NCIpLAorICBLQkRfS0VZX05BTUUoQlJBSUxMRSwgRG90NCwgIkJSQUlMTEVfRG90NCIpLAorCisgIEtCRF9LRVlfTkFNRShCUkFJTExFLCBEb3Q1LCAiRG90NSIpLAorICBLQkRfS0VZX05BTUUoQlJBSUxMRSwgRG90NSwgIkJSQUlMTEVfRG90NSIpLAorCisgIEtCRF9LRVlfTkFNRShCUkFJTExFLCBEb3Q2LCAiRG90NiIpLAorICBLQkRfS0VZX05BTUUoQlJBSUxMRSwgRG90NiwgIkJSQUlMTEVfRG90NiIpLAorCisgIEtCRF9LRVlfTkFNRShCUkFJTExFLCBEb3Q3LCAiRG90NyIpLAorICBLQkRfS0VZX05BTUUoQlJBSUxMRSwgRG90NywgIkJSQUlMTEVfRG90NyIpLAorCisgIEtCRF9LRVlfTkFNRShCUkFJTExFLCBEb3Q4LCAiRG90OCIpLAorICBLQkRfS0VZX05BTUUoQlJBSUxMRSwgRG90OCwgIkJSQUlMTEVfRG90OCIpLAorCisgIEtCRF9LRVlfTkFNRShCUkFJTExFLCBCYWNrd2FyZCwgIkJhY2t3YXJkIiksCisgIEtCRF9LRVlfTkFNRShCUkFJTExFLCBCYWNrd2FyZCwgIkJSQUlMTEVfQmFja3dhcmQiKSwKKworICBLQkRfS0VZX05BTUUoQlJBSUxMRSwgRm9yd2FyZCwgIkZvcndhcmQiKSwKKyAgS0JEX0tFWV9OQU1FKEJSQUlMTEUsIEZvcndhcmQsICJCUkFJTExFX0ZvcndhcmQiKSwKKworICBLQkRfR1JPVVBfTkFNRShOVU1CRVIsICJOdW1iZXJLZXkiKSwKKyAgS0JEX0dST1VQX05BTUUoRlVOQ1RJT04sICJGdW5jdGlvbktleSIpLAorICBLQkRfR1JPVVBfTkFNRShLUE5VTUJFUiwgIktleXBhZE51bWJlcktleSIpLAorICBLQkRfR1JPVVBfTkFNRShST1VUSU5HLCAiUm91dGluZ0tleSIpLAorRU5EX0tFWV9OQU1FX1RBQkxFCisKK0tFWV9OQU1FX1RBQkxFU19ERUNMQVJBVElPTihrZXlib2FyZCkgPSB7CisgIEtFWV9OQU1FX1RBQkxFKGtleWJvYXJkKSwKKyAgTEFTVF9LRVlfTkFNRV9UQUJMRQorfTsKZGlmZiAtLWdpdCBhL1Byb2dyYW1zL2t0Yl9rZXlib2FyZC5oIGIvUHJvZ3JhbXMva3RiX2tleWJvYXJkLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzIwYTY0NQotLS0gL2Rldi9udWxsCisrKyBiL1Byb2dyYW1zL2t0Yl9rZXlib2FyZC5oCkBAIC0wLDAgKzEsMzc3IEBACisvKgorICogQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyAqICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyAqCisgKiBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorICoKKyAqIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyAqCisgKiBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisgKi8KKworI2lmbmRlZiBCUkxUVFlfSU5DTFVERURfS1RCX0tFWUJPQVJECisjZGVmaW5lIEJSTFRUWV9JTkNMVURFRF9LVEJfS0VZQk9BUkQKKworI2luY2x1ZGUgImt0Yl90eXBlcy5oIgorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmIC8qIF9fY3BsdXNwbHVzICovCisKKyNkZWZpbmUgS0JEX0dST1VQKGdycCkgS0JEX0dSUF8jI2dycAorI2RlZmluZSBLQkRfS0VZKGdycCxrZXkpIEtCRF9LRVlfIyNncnAjI18jI2tleQorCisjZGVmaW5lIEtCRF9LRVlfVkFMVUUoZ3JwLG51bSkgey5ncm91cD1LQkRfR1JPVVAoZ3JwKSwgLm51bWJlcj1udW19CisjZGVmaW5lIEtCRF9LRVlfRU5UUlkoZ3JwLGtleSkgS0JEX0tFWV9WQUxVRShncnAsIEtCRF9LRVkoZ3JwLCBrZXkpKQorCisjZGVmaW5lIEtCRF9HUk9VUF9OQU1FKGdycCxuYW0pIHsudmFsdWU9S0JEX0tFWV9WQUxVRShncnAsIEtUQl9LRVlfQU5ZKSwgLm5hbWU9bmFtfQorI2RlZmluZSBLQkRfS0VZX05BTUUoZ3JwLGtleSxuYW0pIHsudmFsdWU9S0JEX0tFWV9FTlRSWShncnAsIGtleSksIC5uYW1lPW5hbX0KKworI2RlZmluZSBLQkRfS0VZX1NQRUNJQUwobmFtZSkgS0JEX0tFWV9FTlRSWShTUEVDSUFMLCBuYW1lKQorI2RlZmluZSBLQkRfS0VZX1VOTUFQUEVEIEtCRF9LRVlfU1BFQ0lBTChVbm1hcHBlZCkKKyNkZWZpbmUgS0JEX0tFWV9JR05PUkUgS0JEX0tFWV9TUEVDSUFMKElnbm9yZSkKKworI2RlZmluZSBLQkRfS0VZX0xFVFRFUihuYW1lKSBLQkRfS0VZX0VOVFJZKExFVFRFUiwgbmFtZSkKKyNkZWZpbmUgS0JEX0tFWV9OVU1CRVIobmFtZSkgS0JEX0tFWV9FTlRSWShOVU1CRVIsIG5hbWUpCisjZGVmaW5lIEtCRF9LRVlfU1lNQk9MKG5hbWUpIEtCRF9LRVlfRU5UUlkoU1lNQk9MLCBuYW1lKQorCisjZGVmaW5lIEtCRF9LRVlfQUNUSU9OKG5hbWUpIEtCRF9LRVlfRU5UUlkoQUNUSU9OLCBuYW1lKQorI2RlZmluZSBLQkRfS0VZX01FRElBKG5hbWUpIEtCRF9LRVlfRU5UUlkoTUVESUEsIG5hbWUpCisjZGVmaW5lIEtCRF9LRVlfRlVOQ1RJT04obmFtZSkgS0JEX0tFWV9FTlRSWShGVU5DVElPTiwgbmFtZSkKKworI2RlZmluZSBLQkRfS0VZX01PRElGSUVSKG5hbWUpIEtCRF9LRVlfRU5UUlkoTU9ESUZJRVIsIG5hbWUpCisjZGVmaW5lIEtCRF9LRVlfTE9DSyhuYW1lKSBLQkRfS0VZX0VOVFJZKExPQ0ssIG5hbWUpCisKKyNkZWZpbmUgS0JEX0tFWV9LUE5VTUJFUihuYW1lKSBLQkRfS0VZX0VOVFJZKEtQTlVNQkVSLCBuYW1lKQorI2RlZmluZSBLQkRfS0VZX0tQU1lNQk9MKG5hbWUpIEtCRF9LRVlfRU5UUlkoS1BTWU1CT0wsIG5hbWUpCisjZGVmaW5lIEtCRF9LRVlfS1BBQ1RJT04obmFtZSkgS0JEX0tFWV9FTlRSWShLUEFDVElPTiwgbmFtZSkKKworI2RlZmluZSBLQkRfS0VZX0JSQUlMTEUobmFtZSkgS0JEX0tFWV9FTlRSWShCUkFJTExFLCBuYW1lKQorI2RlZmluZSBLQkRfS0VZX1JPVVRJTkcobnVtYmVyKSBLQkRfS0VZX1ZBTFVFKFJPVVRJTkcsIChudW1iZXIpKQorCit0eXBlZGVmIGVudW0geworICBLQkRfR1JPVVAoU1BFQ0lBTCkgPSAwIC8qIEtCRF9LRVlfVU5NQVBQRUQgbXVzdCBiZSBhbGwgemVyb3MgKi8sCisKKyAgS0JEX0dST1VQKExFVFRFUiksCisgIEtCRF9HUk9VUChOVU1CRVIpLAorICBLQkRfR1JPVVAoU1lNQk9MKSwKKworICBLQkRfR1JPVVAoQUNUSU9OKSwKKyAgS0JEX0dST1VQKE1FRElBKSwKKyAgS0JEX0dST1VQKEZVTkNUSU9OKSwKKworICBLQkRfR1JPVVAoTU9ESUZJRVIpLAorICBLQkRfR1JPVVAoTE9DSyksCisKKyAgS0JEX0dST1VQKEtQTlVNQkVSKSwKKyAgS0JEX0dST1VQKEtQU1lNQk9MKSwKKyAgS0JEX0dST1VQKEtQQUNUSU9OKSwKKworICBLQkRfR1JPVVAoQlJBSUxMRSksCisgIEtCRF9HUk9VUChST1VUSU5HKSwKK30gS0JEX0tleUdyb3VwOworCit0eXBlZGVmIGVudW0geworICBLQkRfS0VZKFNQRUNJQUwsIFVubWFwcGVkKSA9IDAgLyogS0JEX0tFWV9VTk1BUFBFRCBtdXN0IGJlIGFsbCB6ZXJvcyAqLywKKyAgS0JEX0tFWShTUEVDSUFMLCBJZ25vcmUpLAorfSBLQkRfU3BlY2lhbEtleTsKKwordHlwZWRlZiBlbnVtIHsKKyAgS0JEX0tFWShMRVRURVIsIEEpLAorICBLQkRfS0VZKExFVFRFUiwgQiksCisgIEtCRF9LRVkoTEVUVEVSLCBDKSwKKyAgS0JEX0tFWShMRVRURVIsIEQpLAorICBLQkRfS0VZKExFVFRFUiwgRSksCisgIEtCRF9LRVkoTEVUVEVSLCBGKSwKKyAgS0JEX0tFWShMRVRURVIsIEcpLAorICBLQkRfS0VZKExFVFRFUiwgSCksCisgIEtCRF9LRVkoTEVUVEVSLCBJKSwKKyAgS0JEX0tFWShMRVRURVIsIEopLAorICBLQkRfS0VZKExFVFRFUiwgSyksCisgIEtCRF9LRVkoTEVUVEVSLCBMKSwKKyAgS0JEX0tFWShMRVRURVIsIE0pLAorICBLQkRfS0VZKExFVFRFUiwgTiksCisgIEtCRF9LRVkoTEVUVEVSLCBPKSwKKyAgS0JEX0tFWShMRVRURVIsIFApLAorICBLQkRfS0VZKExFVFRFUiwgUSksCisgIEtCRF9LRVkoTEVUVEVSLCBSKSwKKyAgS0JEX0tFWShMRVRURVIsIFMpLAorICBLQkRfS0VZKExFVFRFUiwgVCksCisgIEtCRF9LRVkoTEVUVEVSLCBVKSwKKyAgS0JEX0tFWShMRVRURVIsIFYpLAorICBLQkRfS0VZKExFVFRFUiwgVyksCisgIEtCRF9LRVkoTEVUVEVSLCBYKSwKKyAgS0JEX0tFWShMRVRURVIsIFkpLAorICBLQkRfS0VZKExFVFRFUiwgWiksCit9IEtCRF9MZXR0ZXJLZXk7CisKK3R5cGVkZWYgZW51bSB7CisgIEtCRF9LRVkoTlVNQkVSLCBaZXJvKSwKKyAgS0JEX0tFWShOVU1CRVIsIE9uZSksCisgIEtCRF9LRVkoTlVNQkVSLCBUd28pLAorICBLQkRfS0VZKE5VTUJFUiwgVGhyZWUpLAorICBLQkRfS0VZKE5VTUJFUiwgRm91ciksCisgIEtCRF9LRVkoTlVNQkVSLCBGaXZlKSwKKyAgS0JEX0tFWShOVU1CRVIsIFNpeCksCisgIEtCRF9LRVkoTlVNQkVSLCBTZXZlbiksCisgIEtCRF9LRVkoTlVNQkVSLCBFaWdodCksCisgIEtCRF9LRVkoTlVNQkVSLCBOaW5lKSwKK30gS0JEX051bWJlcktleTsKKwordHlwZWRlZiBlbnVtIHsKKyAgS0JEX0tFWShTWU1CT0wsIEdyYXZlKSwKKyAgS0JEX0tFWShTWU1CT0wsIE1pbnVzKSwKKyAgS0JEX0tFWShTWU1CT0wsIEVxdWFscyksCisgIEtCRF9LRVkoU1lNQk9MLCBCYWNrc2xhc2gpLAorCisgIEtCRF9LRVkoU1lNQk9MLCBMZWZ0QnJhY2tldCksCisgIEtCRF9LRVkoU1lNQk9MLCBSaWdodEJyYWNrZXQpLAorCisgIEtCRF9LRVkoU1lNQk9MLCBTZW1pY29sb24pLAorICBLQkRfS0VZKFNZTUJPTCwgQXBvc3Ryb3BoZSksCisKKyAgS0JEX0tFWShTWU1CT0wsIEV1cm9wZTIpLAorICBLQkRfS0VZKFNZTUJPTCwgQ29tbWEpLAorICBLQkRfS0VZKFNZTUJPTCwgUGVyaW9kKSwKKyAgS0JEX0tFWShTWU1CT0wsIFNsYXNoKSwKKworICBLQkRfS0VZKFNZTUJPTCwgU3BhY2UpLAorfSBLQkRfU3ltYm9sS2V5OworCit0eXBlZGVmIGVudW0geworICBLQkRfS0VZKEFDVElPTiwgRW50ZXIpLAorICBLQkRfS0VZKEFDVElPTiwgVGFiKSwKKyAgS0JEX0tFWShBQ1RJT04sIEVzY2FwZSksCisKKyAgS0JEX0tFWShBQ1RJT04sIEluc2VydCksCisgIEtCRF9LRVkoQUNUSU9OLCBEZWxldGVCYWNrd2FyZCksCisgIEtCRF9LRVkoQUNUSU9OLCBEZWxldGVGb3J3YXJkKSwKKworICBLQkRfS0VZKEFDVElPTiwgSG9tZSksCisgIEtCRF9LRVkoQUNUSU9OLCBFbmQpLAorCisgIEtCRF9LRVkoQUNUSU9OLCBQYWdlVXApLAorICBLQkRfS0VZKEFDVElPTiwgUGFnZURvd24pLAorCisgIEtCRF9LRVkoQUNUSU9OLCBBcnJvd1VwKSwKKyAgS0JEX0tFWShBQ1RJT04sIEFycm93RG93biksCisgIEtCRF9LRVkoQUNUSU9OLCBBcnJvd0xlZnQpLAorICBLQkRfS0VZKEFDVElPTiwgQXJyb3dSaWdodCksCisKKyAgS0JEX0tFWShBQ1RJT04sIFByaW50U2NyZWVuKSwKKyAgS0JEX0tFWShBQ1RJT04sIFN5c3RlbVJlcXVlc3QpLAorICBLQkRfS0VZKEFDVElPTiwgUGF1c2UpLAorCisgIEtCRF9LRVkoQUNUSU9OLCBHdWlMZWZ0KSwKKyAgS0JEX0tFWShBQ1RJT04sIEd1aVJpZ2h0KSwKKyAgS0JEX0tFWShBQ1RJT04sIENvbnRleHQpLAorCisgIEtCRF9LRVkoQUNUSU9OLCBIZWxwKSwKKyAgS0JEX0tFWShBQ1RJT04sIFN0b3ApLAorICBLQkRfS0VZKEFDVElPTiwgUHJvcHMpLAorICBLQkRfS0VZKEFDVElPTiwgRnJvbnQpLAorICBLQkRfS0VZKEFDVElPTiwgT3BlbiksCisgIEtCRF9LRVkoQUNUSU9OLCBGaW5kKSwKKyAgS0JEX0tFWShBQ1RJT04sIEFnYWluKSwKKyAgS0JEX0tFWShBQ1RJT04sIFVuZG8pLAorICBLQkRfS0VZKEFDVElPTiwgQ29weSksCisgIEtCRF9LRVkoQUNUSU9OLCBQYXN0ZSksCisgIEtCRF9LRVkoQUNUSU9OLCBDdXQpLAorCisgIEtCRF9LRVkoQUNUSU9OLCBQb3dlciksCisgIEtCRF9LRVkoQUNUSU9OLCBTbGVlcCksCisgIEtCRF9LRVkoQUNUSU9OLCBXYWtldXApLAorCisgIEtCRF9LRVkoQUNUSU9OLCBNZW51KSwKKyAgS0JEX0tFWShBQ1RJT04sIFNlbGVjdCksCisKKyAgS0JEX0tFWShBQ1RJT04sIENhbmNlbCksCisgIEtCRF9LRVkoQUNUSU9OLCBDbGVhciksCisgIEtCRF9LRVkoQUNUSU9OLCBQcmlvciksCisgIEtCRF9LRVkoQUNUSU9OLCBSZXR1cm4pLAorICBLQkRfS0VZKEFDVElPTiwgU2VwYXJhdG9yKSwKKyAgS0JEX0tFWShBQ1RJT04sIE91dCksCisgIEtCRF9LRVkoQUNUSU9OLCBPcGVyKSwKKyAgS0JEX0tFWShBQ1RJT04sIENsZWFyX0FnYWluKSwKKyAgS0JEX0tFWShBQ1RJT04sIENyU2VsX1Byb3BzKSwKKyAgS0JEX0tFWShBQ1RJT04sIEV4U2VsKSwKK30gS0JEX0FjdGlvbktleTsKKwordHlwZWRlZiBlbnVtIHsKKyAgS0JEX0tFWShNRURJQSwgTXV0ZSksCisgIEtCRF9LRVkoTUVESUEsIFZvbHVtZURvd24pLAorICBLQkRfS0VZKE1FRElBLCBWb2x1bWVVcCksCisKKyAgS0JEX0tFWShNRURJQSwgU3RvcCksCisgIEtCRF9LRVkoTUVESUEsIFBsYXkpLAorICBLQkRfS0VZKE1FRElBLCBSZWNvcmQpLAorICBLQkRfS0VZKE1FRElBLCBQYXVzZSksCisgIEtCRF9LRVkoTUVESUEsIFBsYXlQYXVzZSksCisKKyAgS0JEX0tFWShNRURJQSwgUHJldmlvdXMpLAorICBLQkRfS0VZKE1FRElBLCBOZXh0KSwKKyAgS0JEX0tFWShNRURJQSwgQmFja3dhcmQpLAorICBLQkRfS0VZKE1FRElBLCBGb3J3YXJkKSwKKworICBLQkRfS0VZKE1FRElBLCBFamVjdCksCisgIEtCRF9LRVkoTUVESUEsIENsb3NlKSwKKyAgS0JEX0tFWShNRURJQSwgRWplY3RDbG9zZSksCit9IEtCRF9NZWRpYUtleTsKKwordHlwZWRlZiBlbnVtIHsKKyAgS0JEX0tFWShGVU5DVElPTiwgRjEpLAorICBLQkRfS0VZKEZVTkNUSU9OLCBGMiksCisgIEtCRF9LRVkoRlVOQ1RJT04sIEYzKSwKKyAgS0JEX0tFWShGVU5DVElPTiwgRjQpLAorICBLQkRfS0VZKEZVTkNUSU9OLCBGNSksCisgIEtCRF9LRVkoRlVOQ1RJT04sIEY2KSwKKyAgS0JEX0tFWShGVU5DVElPTiwgRjcpLAorICBLQkRfS0VZKEZVTkNUSU9OLCBGOCksCisgIEtCRF9LRVkoRlVOQ1RJT04sIEY5KSwKKyAgS0JEX0tFWShGVU5DVElPTiwgRjEwKSwKKyAgS0JEX0tFWShGVU5DVElPTiwgRjExKSwKKyAgS0JEX0tFWShGVU5DVElPTiwgRjEyKSwKKyAgS0JEX0tFWShGVU5DVElPTiwgRjEzKSwKKyAgS0JEX0tFWShGVU5DVElPTiwgRjE0KSwKKyAgS0JEX0tFWShGVU5DVElPTiwgRjE1KSwKKyAgS0JEX0tFWShGVU5DVElPTiwgRjE2KSwKKyAgS0JEX0tFWShGVU5DVElPTiwgRjE3KSwKKyAgS0JEX0tFWShGVU5DVElPTiwgRjE4KSwKKyAgS0JEX0tFWShGVU5DVElPTiwgRjE5KSwKKyAgS0JEX0tFWShGVU5DVElPTiwgRjIwKSwKKyAgS0JEX0tFWShGVU5DVElPTiwgRjIxKSwKKyAgS0JEX0tFWShGVU5DVElPTiwgRjIyKSwKKyAgS0JEX0tFWShGVU5DVElPTiwgRjIzKSwKKyAgS0JEX0tFWShGVU5DVElPTiwgRjI0KSwKK30gS0JEX0Z1bmN0aW9uS2V5OworCit0eXBlZGVmIGVudW0geworICBLQkRfS0VZKE1PRElGSUVSLCBTaGlmdExlZnQpLAorICBLQkRfS0VZKE1PRElGSUVSLCBTaGlmdFJpZ2h0KSwKKworICBLQkRfS0VZKE1PRElGSUVSLCBDb250cm9sTGVmdCksCisgIEtCRF9LRVkoTU9ESUZJRVIsIENvbnRyb2xSaWdodCksCisKKyAgS0JEX0tFWShNT0RJRklFUiwgQWx0TGVmdCksCisgIEtCRF9LRVkoTU9ESUZJRVIsIEFsdFJpZ2h0KSwKK30gS0JEX01vZGlmaWVyS2V5OworCit0eXBlZGVmIGVudW0geworICBLQkRfS0VZKExPQ0ssIENhcGl0YWxzKSwKKyAgS0JEX0tFWShMT0NLLCBTY3JvbGwpLAorICBLQkRfS0VZKExPQ0ssIE51bWJlcnMpLAorfSBLQkRfTG9ja0tleTsKKwordHlwZWRlZiBlbnVtIHsKKyAgS0JEX0tFWShLUE5VTUJFUiwgWmVybyksCisgIEtCRF9LRVkoS1BOVU1CRVIsIE9uZSksCisgIEtCRF9LRVkoS1BOVU1CRVIsIFR3byksCisgIEtCRF9LRVkoS1BOVU1CRVIsIFRocmVlKSwKKyAgS0JEX0tFWShLUE5VTUJFUiwgRm91ciksCisgIEtCRF9LRVkoS1BOVU1CRVIsIEZpdmUpLAorICBLQkRfS0VZKEtQTlVNQkVSLCBTaXgpLAorICBLQkRfS0VZKEtQTlVNQkVSLCBTZXZlbiksCisgIEtCRF9LRVkoS1BOVU1CRVIsIEVpZ2h0KSwKKyAgS0JEX0tFWShLUE5VTUJFUiwgTmluZSksCisKKyAgS0JEX0tFWShLUE5VTUJFUiwgQSksCisgIEtCRF9LRVkoS1BOVU1CRVIsIEIpLAorICBLQkRfS0VZKEtQTlVNQkVSLCBDKSwKKyAgS0JEX0tFWShLUE5VTUJFUiwgRCksCisgIEtCRF9LRVkoS1BOVU1CRVIsIEUpLAorICBLQkRfS0VZKEtQTlVNQkVSLCBGKSwKK30gS0JEX0tQTnVtYmVyS2V5OworCit0eXBlZGVmIGVudW0geworICBLQkRfS0VZKEtQU1lNQk9MLCBEZWNpbWFsU2VwYXJhdG9yKSwKKyAgS0JEX0tFWShLUFNZTUJPTCwgVGhvdXNhbmRzU2VwYXJhdG9yKSwKKyAgS0JEX0tFWShLUFNZTUJPTCwgMDApLAorICBLQkRfS0VZKEtQU1lNQk9MLCAwMDApLAorCisgIEtCRF9LRVkoS1BTWU1CT0wsIFBsdXMpLAorICBLQkRfS0VZKEtQU1lNQk9MLCBNaW51cyksCisgIEtCRF9LRVkoS1BTWU1CT0wsIE11bHRpcGx5KSwKKyAgS0JEX0tFWShLUFNZTUJPTCwgRGl2aWRlKSwKKyAgS0JEX0tFWShLUFNZTUJPTCwgTW9kdWxvKSwKKworICBLQkRfS0VZKEtQU1lNQk9MLCBFcXVhbHMpLAorICBLQkRfS0VZKEtQU1lNQk9MLCBMZXNzKSwKKyAgS0JEX0tFWShLUFNZTUJPTCwgR3JlYXRlciksCisgIEtCRF9LRVkoS1BTWU1CT0wsIFBsdXNNaW51cyksCisKKyAgS0JEX0tFWShLUFNZTUJPTCwgTGVmdFBhcmVudGhlc2lzKSwKKyAgS0JEX0tFWShLUFNZTUJPTCwgUmlnaHRQYXJlbnRoZXNpcyksCisgIEtCRF9LRVkoS1BTWU1CT0wsIExlZnRCcmFjZSksCisgIEtCRF9LRVkoS1BTWU1CT0wsIFJpZ2h0QnJhY2UpLAorCisgIEtCRF9LRVkoS1BTWU1CT0wsIEJpdHdpc2VBbmQpLAorICBLQkRfS0VZKEtQU1lNQk9MLCBCaXR3aXNlT3IpLAorICBLQkRfS0VZKEtQU1lNQk9MLCBCaXR3aXNlWG9yKSwKKworICBLQkRfS0VZKEtQU1lNQk9MLCBCb29sZWFuTm90KSwKKyAgS0JEX0tFWShLUFNZTUJPTCwgQm9vbGVhbkFuZCksCisgIEtCRF9LRVkoS1BTWU1CT0wsIEJvb2xlYW5PciksCisgIEtCRF9LRVkoS1BTWU1CT0wsIEJvb2xlYW5Yb3IpLAorCisgIEtCRF9LRVkoS1BTWU1CT0wsIFNwYWNlKSwKKyAgS0JEX0tFWShLUFNZTUJPTCwgUGVyaW9kKSwKKyAgS0JEX0tFWShLUFNZTUJPTCwgQ29tbWEpLAorICBLQkRfS0VZKEtQU1lNQk9MLCBDb2xvbiksCisgIEtCRF9LRVkoS1BTWU1CT0wsIEF0KSwKKyAgS0JEX0tFWShLUFNZTUJPTCwgTnVtYmVyKSwKKyAgS0JEX0tFWShLUFNZTUJPTCwgQ3VycmVuY3lVbml0KSwKKyAgS0JEX0tFWShLUFNZTUJPTCwgQ3VycmVuY3lTdWJ1bml0KSwKK30gS0JEX0tQU3ltYm9sS2V5OworCit0eXBlZGVmIGVudW0geworICBLQkRfS0VZKEtQQUNUSU9OLCBFbnRlciksCisgIEtCRF9LRVkoS1BBQ1RJT04sIEJhY2tzcGFjZSksCisgIEtCRF9LRVkoS1BBQ1RJT04sIFRhYiksCisKKyAgS0JEX0tFWShLUEFDVElPTiwgQ2xlYXIpLAorICBLQkRfS0VZKEtQQUNUSU9OLCBDbGVhckVudHJ5KSwKKworICBLQkRfS0VZKEtQQUNUSU9OLCBNZW1vcnlDbGVhciksCisgIEtCRF9LRVkoS1BBQ1RJT04sIE1lbW9yeVN0b3JlKSwKKyAgS0JEX0tFWShLUEFDVElPTiwgTWVtb3J5UmVjYWxsKSwKKyAgS0JEX0tFWShLUEFDVElPTiwgTWVtb3J5QWRkKSwKKyAgS0JEX0tFWShLUEFDVElPTiwgTWVtb3J5U3VidHJhY3QpLAorICBLQkRfS0VZKEtQQUNUSU9OLCBNZW1vcnlNdWx0aXBseSksCisgIEtCRF9LRVkoS1BBQ1RJT04sIE1lbW9yeURpdmlkZSksCisKKyAgS0JEX0tFWShLUEFDVElPTiwgQmluYXJ5KSwKKyAgS0JEX0tFWShLUEFDVElPTiwgT2N0YWwpLAorICBLQkRfS0VZKEtQQUNUSU9OLCBEZWNpbWFsKSwKKyAgS0JEX0tFWShLUEFDVElPTiwgSGV4YWRlY2ltYWwpLAorfSBLQkRfS1BBY3Rpb25LZXk7CisKK3R5cGVkZWYgZW51bSB7CisgIEtCRF9LRVkoQlJBSUxMRSwgU3BhY2UpLAorCisgIEtCRF9LRVkoQlJBSUxMRSwgRG90MSksCisgIEtCRF9LRVkoQlJBSUxMRSwgRG90MiksCisgIEtCRF9LRVkoQlJBSUxMRSwgRG90MyksCisgIEtCRF9LRVkoQlJBSUxMRSwgRG90NCksCisgIEtCRF9LRVkoQlJBSUxMRSwgRG90NSksCisgIEtCRF9LRVkoQlJBSUxMRSwgRG90NiksCisgIEtCRF9LRVkoQlJBSUxMRSwgRG90NyksCisgIEtCRF9LRVkoQlJBSUxMRSwgRG90OCksCisKKyAgS0JEX0tFWShCUkFJTExFLCBCYWNrd2FyZCksCisgIEtCRF9LRVkoQlJBSUxMRSwgRm9yd2FyZCksCit9IEtCRF9CcmFpbGxlS2V5OworCitleHRlcm4gS0VZX05BTUVfVEFCTEVTX0RFQ0xBUkFUSU9OKGtleWJvYXJkKTsKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYgLyogX19jcGx1c3BsdXMgKi8KKworI2VuZGlmIC8qIEJSTFRUWV9JTkNMVURFRF9LVEJfS0VZQk9BUkQgKi8KZGlmZiAtLWdpdCBhL1Byb2dyYW1zL2t0Yl9saXN0LmMgYi9Qcm9ncmFtcy9rdGJfbGlzdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA0MDA1MWEKLS0tIC9kZXYvbnVsbAorKysgYi9Qcm9ncmFtcy9rdGJfbGlzdC5jCkBAIC0wLDAgKzEsMTAzNCBAQAorLyoKKyAqIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisgKiAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisgKgorICogQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKKyNpbmNsdWRlICJwcm9sb2d1ZS5oIgorCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworI2luY2x1ZGUgImxvZy5oIgorI2luY2x1ZGUgInN0cmZtdC5oIgorI2luY2x1ZGUgInV0ZjguaCIKKyNpbmNsdWRlICJjbWQuaCIKKyNpbmNsdWRlICJicmxfY21kcy5oIgorI2luY2x1ZGUgImt0Yi5oIgorI2luY2x1ZGUgImt0Yl9saXN0LmgiCisjaW5jbHVkZSAia3RiX2NtZHMuaCIKKworc3RydWN0IENvbW1hbmRHcm91cEhvb2tEYXRhU3RydWN0IHsKKyAgTGlzdEdlbmVyYXRpb25EYXRhICpjb25zdCBsZ2Q7CisgIGNvbnN0IEtleUNvbnRleHQgKmNvbnN0IGN0eDsKKworICBpbnQgb2s7Cit9OworCitzdGF0aWMgaW5saW5lIHZvaWQKK2xpc3RDb21tYW5kU3ViZ3JvdXAgKAorICBpbnQgKCpsaXN0KSAoTGlzdEdlbmVyYXRpb25EYXRhICpsZ2QsIGNvbnN0IEtleUNvbnRleHQgKmN0eCksCisgIENvbW1hbmRHcm91cEhvb2tEYXRhICpjZ2gKKykgeworICBjZ2gtPm9rID0gbGlzdChjZ2gtPmxnZCwgY2doLT5jdHgpOworfQorCitzdGF0aWMgaW50CitoYW5kbGVDb21tYW5kR3JvdXBIb29rIChDb21tYW5kR3JvdXBIb29rICpoYW5kbGVyLCBDb21tYW5kR3JvdXBIb29rRGF0YSAqY2doKSB7CisgIGlmICghaGFuZGxlcikgcmV0dXJuIDE7CisgIGNnaC0+b2sgPSAwOworICBoYW5kbGVyKGNnaCk7CisgIHJldHVybiBjZ2gtPm9rOworfQorCitzdGF0aWMgdm9pZCAqCitnZXRNZXRob2REYXRhIChMaXN0R2VuZXJhdGlvbkRhdGEgKmxnZCkgeworICByZXR1cm4gbGdkLT5saXN0LmludGVybmFsPyBsZ2Q6IGxnZC0+bGlzdC5kYXRhOworfQorCitzdGF0aWMgaW50Cit3cml0ZUhlYWRlciAoTGlzdEdlbmVyYXRpb25EYXRhICpsZ2QsIGNvbnN0IHdjaGFyX3QgKnRleHQsIGludCBsZXZlbCkgeworICByZXR1cm4gbGdkLT5saXN0Lm1ldGhvZHMtPndyaXRlSGVhZGVyKHRleHQsIGxldmVsLCBnZXRNZXRob2REYXRhKGxnZCkpOworfQorCitzdGF0aWMgaW50Cit3cml0ZUxpbmUgKExpc3RHZW5lcmF0aW9uRGF0YSAqbGdkLCBjb25zdCB3Y2hhcl90ICpsaW5lKSB7CisgIHJldHVybiBsZ2QtPmxpc3Qud3JpdGVMaW5lKGxpbmUsIGxnZC0+bGlzdC5kYXRhKTsKK30KKworc3RhdGljIGludAord3JpdGVCbGFua0xpbmUgKExpc3RHZW5lcmF0aW9uRGF0YSAqbGdkKSB7CisgIHJldHVybiB3cml0ZUxpbmUobGdkLCBXU19DKCIiKSk7Cit9CisKK3N0YXRpYyBpbnQKK2FkZENoYXJhY3RlcnMgKExpc3RHZW5lcmF0aW9uRGF0YSAqbGdkLCBjb25zdCB3Y2hhcl90ICpjaGFyYWN0ZXJzLCBzaXplX3QgY291bnQpIHsKKyAgc2l6ZV90IG5ld0xlbmd0aCA9IGxnZC0+bGluZS5sZW5ndGggKyBjb3VudDsKKworICBpZiAobmV3TGVuZ3RoID4gbGdkLT5saW5lLnNpemUpIHsKKyAgICBzaXplX3QgbmV3U2l6ZSA9IChuZXdMZW5ndGggfCAwWDNGKSArIDE7CisgICAgd2NoYXJfdCAqbmV3Q2hhcmFjdGVycyA9IHJlYWxsb2MobGdkLT5saW5lLmNoYXJhY3RlcnMsIEFSUkFZX1NJWkUobmV3Q2hhcmFjdGVycywgbmV3U2l6ZSkpOworCisgICAgaWYgKCFuZXdDaGFyYWN0ZXJzKSB7CisgICAgICBsb2dTeXN0ZW1FcnJvcigicmVhbGxvYyIpOworICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgbGdkLT5saW5lLmNoYXJhY3RlcnMgPSBuZXdDaGFyYWN0ZXJzOworICAgIGxnZC0+bGluZS5zaXplID0gbmV3U2l6ZTsKKyAgfQorCisgIHdtZW1jcHkoJmxnZC0+bGluZS5jaGFyYWN0ZXJzW2xnZC0+bGluZS5sZW5ndGhdLCBjaGFyYWN0ZXJzLCBjb3VudCk7CisgIGxnZC0+bGluZS5sZW5ndGggPSBuZXdMZW5ndGg7CisgIHJldHVybiAxOworfQorCitzdGF0aWMgaW50CitwdXRDaGFyYWN0ZXJzIChMaXN0R2VuZXJhdGlvbkRhdGEgKmxnZCwgY29uc3Qgd2NoYXJfdCAqY2hhcmFjdGVycywgc2l6ZV90IGNvdW50KSB7CisgIGlmIChsZ2QtPmxpbmUubGVuZ3RoID09IDApIHsKKyAgICBpZiAobGdkLT5saXN0LmVsZW1lbnRMZXZlbCA+IDApIHsKKyAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBpbmRlbnQgPSAyOworICAgICAgY29uc3QgdW5zaWduZWQgaW50IGNvdW50ID0gaW5kZW50ICogbGdkLT5saXN0LmVsZW1lbnRMZXZlbDsKKyAgICAgIHdjaGFyX3QgY2hhcmFjdGVyc1tjb3VudF07CisKKyAgICAgIHdtZW1zZXQoY2hhcmFjdGVycywgV0NfQygnICcpLCBjb3VudCk7CisgICAgICBjaGFyYWN0ZXJzW2NvdW50IC0gaW5kZW50XSA9IGxnZC0+bGlzdC5lbGVtZW50QnVsbGV0OworICAgICAgbGdkLT5saXN0LmVsZW1lbnRCdWxsZXQgPSBXQ19DKCcgJyk7CisKKyAgICAgIGlmICghYWRkQ2hhcmFjdGVycyhsZ2QsIGNoYXJhY3RlcnMsIGNvdW50KSkgcmV0dXJuIDA7CisgICAgfQorICB9CisKKyAgcmV0dXJuIGFkZENoYXJhY3RlcnMobGdkLCBjaGFyYWN0ZXJzLCBjb3VudCk7Cit9CisKK3N0YXRpYyBpbnQKK3B1dENoYXJhY3RlciAoTGlzdEdlbmVyYXRpb25EYXRhICpsZ2QsIHdjaGFyX3QgY2hhcmFjdGVyKSB7CisgIHJldHVybiBwdXRDaGFyYWN0ZXJzKGxnZCwgJmNoYXJhY3RlciwgMSk7Cit9CisKK3N0YXRpYyBpbnQKK3B1dENoYXJhY3RlclN0cmluZyAoTGlzdEdlbmVyYXRpb25EYXRhICpsZ2QsIGNvbnN0IHdjaGFyX3QgKnN0cmluZykgeworICByZXR1cm4gcHV0Q2hhcmFjdGVycyhsZ2QsIHN0cmluZywgd2NzbGVuKHN0cmluZykpOworfQorCitzdGF0aWMgaW50CitwdXRVdGY4U3RyaW5nIChMaXN0R2VuZXJhdGlvbkRhdGEgKmxnZCwgY29uc3QgY2hhciAqc3RyaW5nKSB7CisgIHNpemVfdCBzaXplID0gc3RybGVuKHN0cmluZykgKyAxOworICB3Y2hhcl90IGNoYXJhY3RlcnNbc2l6ZV07CisgIHdjaGFyX3QgKmNoYXJhY3RlciA9IGNoYXJhY3RlcnM7CisKKyAgY29udmVydFV0ZjhUb1djaGFycygmc3RyaW5nLCAmY2hhcmFjdGVyLCBzaXplKTsKKyAgcmV0dXJuIHB1dENoYXJhY3RlcnMobGdkLCBjaGFyYWN0ZXJzLCBjaGFyYWN0ZXItY2hhcmFjdGVycyk7Cit9CisKK3N0YXRpYyB2b2lkCitjbGVhckxpbmUgKExpc3RHZW5lcmF0aW9uRGF0YSAqbGdkKSB7CisgIGxnZC0+bGluZS5sZW5ndGggPSAwOworfQorCitzdGF0aWMgdm9pZAordHJpbUxpbmUgKExpc3RHZW5lcmF0aW9uRGF0YSAqbGdkKSB7CisgIHdoaWxlIChsZ2QtPmxpbmUubGVuZ3RoID4gMCkgeworICAgIHNpemVfdCBsYXN0ID0gbGdkLT5saW5lLmxlbmd0aCAtIDE7CisKKyAgICBpZiAobGdkLT5saW5lLmNoYXJhY3RlcnNbbGFzdF0gIT0gV0NfQygnICcpKSBicmVhazsKKyAgICBsZ2QtPmxpbmUubGVuZ3RoID0gbGFzdDsKKyAgfQorfQorCitzdGF0aWMgaW50CitmaW5pc2hMaW5lIChMaXN0R2VuZXJhdGlvbkRhdGEgKmxnZCkgeworICB0cmltTGluZShsZ2QpOworICBpZiAoIXB1dENoYXJhY3RlcihsZ2QsIDApKSByZXR1cm4gMDsKKyAgcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQKK2VuZExpbmUgKExpc3RHZW5lcmF0aW9uRGF0YSAqbGdkKSB7CisgIGlmIChsZ2QtPnRvcGljSGVhZGVyKSB7CisgICAgaWYgKCF3cml0ZUhlYWRlcihsZ2QsIGxnZC0+dG9waWNIZWFkZXIsIDEpKSByZXR1cm4gMDsKKyAgICBsZ2QtPnRvcGljSGVhZGVyID0gTlVMTDsKKyAgfQorCisgIGlmIChsZ2QtPmxpc3RIZWFkZXIpIHsKKyAgICBjb25zdCBjaGFyICpzdHJpbmcgPSBsZ2QtPmxpc3RIZWFkZXI7CisgICAgbGdkLT5saXN0SGVhZGVyID0gTlVMTDsKKworICAgIHNpemVfdCBzaXplID0gc3RybGVuKHN0cmluZykgKyAxOworICAgIHdjaGFyX3QgY2hhcmFjdGVyc1tzaXplXTsKKyAgICB3Y2hhcl90ICpjaGFyYWN0ZXIgPSBjaGFyYWN0ZXJzOworCisgICAgY29udmVydFV0ZjhUb1djaGFycygmc3RyaW5nLCAmY2hhcmFjdGVyLCBzaXplKTsKKyAgICBpZiAoIXdyaXRlSGVhZGVyKGxnZCwgY2hhcmFjdGVycywgMikpIHJldHVybiAwOworICB9CisKKyAgaWYgKCFmaW5pc2hMaW5lKGxnZCkpIHJldHVybiAwOworICBpZiAoIXdyaXRlTGluZShsZ2QsIGxnZC0+bGluZS5jaGFyYWN0ZXJzKSkgcmV0dXJuIDA7CisgIGNsZWFyTGluZShsZ2QpOworICByZXR1cm4gMTsKK30KKworc3RhdGljIGludAorYmVnaW5MaXN0IChMaXN0R2VuZXJhdGlvbkRhdGEgKmxnZCwgY29uc3QgY2hhciAqaGVhZGVyKSB7CisgIGxnZC0+bGlzdEhlYWRlciA9IGhlYWRlcjsKKyAgcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQKK2VuZExpc3QgKExpc3RHZW5lcmF0aW9uRGF0YSAqbGdkKSB7CisgIHJldHVybiBsZ2QtPmxpc3QubWV0aG9kcy0+ZW5kTGlzdChnZXRNZXRob2REYXRhKGxnZCkpOworfQorCitzdGF0aWMgaW50CitiZWdpbkVsZW1lbnQgKExpc3RHZW5lcmF0aW9uRGF0YSAqbGdkLCB1bnNpZ25lZCBpbnQgbGV2ZWwpIHsKKyAgcmV0dXJuIGxnZC0+bGlzdC5tZXRob2RzLT5iZWdpbkVsZW1lbnQobGV2ZWwsIGdldE1ldGhvZERhdGEobGdkKSk7Cit9CisKK3N0YXRpYyBpbnQKK3NlYXJjaEtleU5hbWVFbnRyeSAoY29uc3Qgdm9pZCAqdGFyZ2V0LCBjb25zdCB2b2lkICplbGVtZW50KSB7CisgIGNvbnN0IEtleVZhbHVlICp2YWx1ZSA9IHRhcmdldDsKKyAgY29uc3QgS2V5TmFtZUVudHJ5ICpjb25zdCAqa25lID0gZWxlbWVudDsKKyAgcmV0dXJuIGNvbXBhcmVLZXlWYWx1ZXModmFsdWUsICYoKmtuZSktPnZhbHVlKTsKK30KKworY29uc3QgS2V5TmFtZUVudHJ5ICoKK2ZpbmRLZXlOYW1lRW50cnkgKEtleVRhYmxlICp0YWJsZSwgY29uc3QgS2V5VmFsdWUgKnZhbHVlKSB7CisgIGNvbnN0IEtleU5hbWVFbnRyeSAqY29uc3QgKmFycmF5ID0gdGFibGUtPmtleU5hbWVzLnRhYmxlOworICB1bnNpZ25lZCBpbnQgY291bnQgPSB0YWJsZS0+a2V5TmFtZXMuY291bnQ7CisKKyAgY29uc3QgS2V5TmFtZUVudHJ5ICpjb25zdCAqa25lID0gYnNlYXJjaCh2YWx1ZSwgYXJyYXksIGNvdW50LCBzaXplb2YoKmFycmF5KSwgc2VhcmNoS2V5TmFtZUVudHJ5KTsKKyAgaWYgKCFrbmUpIHJldHVybiBOVUxMOworCisgIHdoaWxlIChrbmUgPiBhcnJheSkgeworICAgIGlmIChjb21wYXJlS2V5VmFsdWVzKHZhbHVlLCAmKCotLWtuZSktPnZhbHVlKSAhPSAwKSB7CisgICAgICBrbmUgKz0gMTsKKyAgICAgIGJyZWFrOworICAgIH0KKyAgfQorCisgIHJldHVybiAqa25lOworfQorCitTVFJfQkVHSU5fRk9STUFUVEVSKGZvcm1hdEtleU5hbWUsIEtleVRhYmxlICp0YWJsZSwgY29uc3QgS2V5VmFsdWUgKnZhbHVlKQorICBjb25zdCBLZXlOYW1lRW50cnkgKmtuZSA9IGZpbmRLZXlOYW1lRW50cnkodGFibGUsIHZhbHVlKTsKKworICBpZiAoa25lKSB7CisgICAgU1RSX1BSSU5URigiJXMiLCBrbmUtPm5hbWUpOworICB9IGVsc2UgaWYgKHZhbHVlLT5udW1iZXIgIT0gS1RCX0tFWV9BTlkpIHsKKyAgICBjb25zdCBLZXlWYWx1ZSBhbnlLZXkgPSB7CisgICAgICAuZ3JvdXAgPSB2YWx1ZS0+Z3JvdXAsCisgICAgICAubnVtYmVyID0gS1RCX0tFWV9BTlkKKyAgICB9OworCisgICAgaWYgKChrbmUgPSBmaW5kS2V5TmFtZUVudHJ5KHRhYmxlLCAmYW55S2V5KSkpIHsKKyAgICAgIFNUUl9QUklOVEYoIiVzLiV1Iiwga25lLT5uYW1lLCB2YWx1ZS0+bnVtYmVyKzEpOworICAgIH0KKyAgfQorCisgIGlmIChTVFJfTEVOR1RIID09IDApIFNUUl9QUklOVEYoIj8iKTsKK1NUUl9FTkRfRk9STUFUVEVSCisKK3N0YXRpYyBpbnQKK3B1dEtleU5hbWUgKExpc3RHZW5lcmF0aW9uRGF0YSAqbGdkLCBjb25zdCBLZXlWYWx1ZSAqdmFsdWUpIHsKKyAgY2hhciBzdHJpbmdbMFgxMDBdOworICBmb3JtYXRLZXlOYW1lKHN0cmluZywgc2l6ZW9mKHN0cmluZyksIGxnZC0+a2V5VGFibGUsIHZhbHVlKTsKKyAgcmV0dXJuIHB1dFV0ZjhTdHJpbmcobGdkLCBzdHJpbmcpOworfQorCitTVFJfQkVHSU5fRk9STUFUVEVSKGZvcm1hdEtleUNvbWJpbmF0aW9uLCBLZXlUYWJsZSAqdGFibGUsIGNvbnN0IEtleUNvbWJpbmF0aW9uICpjb21iaW5hdGlvbikKKyAgY2hhciBrZXlEZWxpbWl0ZXIgPSAwOworICB1bnNpZ25lZCBjaGFyIGRvdENvdW50ID0gMDsKKworICBjb25zdCBjaGFyICpkb3RQcmVmaXggPSAiZG90IjsKKyAgY29uc3Qgc2l6ZV90IGRvdFByZWZpeExlbmd0aCA9IHN0cmxlbihkb3RQcmVmaXgpOworICBjb25zdCBzaXplX3QgZG90TmFtZUxlbmd0aCA9IGRvdFByZWZpeExlbmd0aCArIDE7CisKKyAgZm9yICh1bnNpZ25lZCBjaGFyIGluZGV4PTA7IGluZGV4PGNvbWJpbmF0aW9uLT5tb2RpZmllckNvdW50OyBpbmRleCs9MSkgeworICAgIGNoYXIga2V5TmFtZVswWDEwMF07CisgICAgZm9ybWF0S2V5TmFtZShrZXlOYW1lLCBzaXplb2Yoa2V5TmFtZSksIHRhYmxlLAorICAgICAgICAgICAgICAgICAgJmNvbWJpbmF0aW9uLT5tb2RpZmllcktleXNbY29tYmluYXRpb24tPm1vZGlmaWVyUG9zaXRpb25zW2luZGV4XV0pOworCisgICAgaWYgKHN0cmxlbihrZXlOYW1lKSA9PSBkb3ROYW1lTGVuZ3RoKSB7CisgICAgICBpZiAoc3RybmNhc2VjbXAoa2V5TmFtZSwgZG90UHJlZml4LCBkb3RQcmVmaXhMZW5ndGgpID09IDApIHsKKyAgICAgICAgY2hhciBkb3ROdW1iZXIgPSBrZXlOYW1lW2RvdFByZWZpeExlbmd0aF07CisKKyAgICAgICAgaWYgKChkb3ROdW1iZXIgPj0gJzEnKSAmJiAoZG90TnVtYmVyIDw9ICc4JykpIHsKKyAgICAgICAgICBpZiAoKytkb3RDb3VudCA9PSAxKSBnb3RvIEZJUlNUX0RPVDsKKworICAgICAgICAgIGlmIChkb3RDb3VudCA9PSAyKSB7CisgICAgICAgICAgICBjaGFyIGZpcnN0RG90ID0gKlNUUl9QT1AoKTsKKyAgICAgICAgICAgIFNUUl9QUklOVEYoInMlYyIsIGZpcnN0RG90KTsKKyAgICAgICAgICB9CisKKyAgICAgICAgICBTVFJfUFJJTlRGKCIlYyIsIGRvdE51bWJlcik7CisgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9CisKKyAgICBkb3RDb3VudCA9IDA7CisgIEZJUlNUX0RPVDoKKworICAgIGlmIChrZXlEZWxpbWl0ZXIpIHsKKyAgICAgIFNUUl9QUklOVEYoIiVjIiwga2V5RGVsaW1pdGVyKTsKKyAgICB9IGVsc2UgeworICAgICAga2V5RGVsaW1pdGVyID0gJysnOworICAgIH0KKworICAgIFNUUl9QUklOVEYoIiVzIiwga2V5TmFtZSk7CisgIH0KKworICBpZiAoY29tYmluYXRpb24tPmZsYWdzICYgS0NGX0lNTUVESUFURV9LRVkpIHsKKyAgICBpZiAoa2V5RGVsaW1pdGVyKSBTVFJfUFJJTlRGKCIlYyIsIGtleURlbGltaXRlcik7CisgICAgU1RSX0ZPUk1BVChmb3JtYXRLZXlOYW1lLCB0YWJsZSwgJmNvbWJpbmF0aW9uLT5pbW1lZGlhdGVLZXkpOworICB9CitTVFJfRU5EX0ZPUk1BVFRFUgorCitzdGF0aWMgaW50CitwdXRLZXlDb21iaW5hdGlvbiAoTGlzdEdlbmVyYXRpb25EYXRhICpsZ2QsIGNvbnN0IEtleUNvbWJpbmF0aW9uICpjb21iaW5hdGlvbikgeworICBjaGFyIHN0cmluZ1swWDEwMF07CisgIGZvcm1hdEtleUNvbWJpbmF0aW9uKHN0cmluZywgc2l6ZW9mKHN0cmluZyksIGxnZC0+a2V5VGFibGUsIGNvbWJpbmF0aW9uKTsKKyAgcmV0dXJuIHB1dFV0ZjhTdHJpbmcobGdkLCBzdHJpbmcpOworfQorCitzdGF0aWMgaW50CitwdXRDb21tYW5kRGVzY3JpcHRpb24gKExpc3RHZW5lcmF0aW9uRGF0YSAqbGdkLCBjb25zdCBCb3VuZENvbW1hbmQgKmNtZCwgaW50IGRldGFpbHMpIHsKKyAgY2hhciBkZXNjcmlwdGlvblswWDYwXTsKKworICBkZXNjcmliZUNvbW1hbmQoZGVzY3JpcHRpb24sIHNpemVvZihkZXNjcmlwdGlvbiksIGNtZC0+dmFsdWUsCisgICAgICAgICAgICAgICAgICAoZGV0YWlscz8gKENET19JbmNsdWRlT3BlcmFuZCB8IENET19EZWZhdWx0T3BlcmFuZCk6IDApKTsKKyAgcmV0dXJuIHB1dFV0ZjhTdHJpbmcobGdkLCBkZXNjcmlwdGlvbik7Cit9CisKK3N0YXRpYyBpbnQKK3B1dEtleWJvYXJkRnVuY3Rpb24gKExpc3RHZW5lcmF0aW9uRGF0YSAqbGdkLCBjb25zdCBLZXlib2FyZEZ1bmN0aW9uICprYmYpIHsKKyAgaWYgKCFiZWdpbkVsZW1lbnQobGdkLCAxKSkgcmV0dXJuIDA7CisgIGlmICghcHV0Q2hhcmFjdGVyU3RyaW5nKGxnZCwgV1NfQygiYnJhaWxsZSBrZXlib2FyZCAiKSkpIHJldHVybiAwOworICBpZiAoIXB1dFV0ZjhTdHJpbmcobGdkLCBrYmYtPm5hbWUpKSByZXR1cm4gMDsKKyAgaWYgKCFwdXRDaGFyYWN0ZXJTdHJpbmcobGdkLCBXU19DKCI6ICIpKSkgcmV0dXJuIDA7CisgIHJldHVybiAxOworfQorCitzdGF0aWMgaW50CitsaXN0S2V5Ym9hcmRGdW5jdGlvbnMgKExpc3RHZW5lcmF0aW9uRGF0YSAqbGdkLCBjb25zdCBLZXlDb250ZXh0ICpjdHgpIHsKKyAgaWYgKGN0eC0+bWFwcGVkS2V5cy5jb3VudCA+IDApIHsKKyAgICBmb3IgKHVuc2lnbmVkIGludCBpbmRleD0wOyBpbmRleDxjdHgtPm1hcHBlZEtleXMuY291bnQ7IGluZGV4Kz0xKSB7CisgICAgICBjb25zdCBNYXBwZWRLZXlFbnRyeSAqbWFwID0gJmN0eC0+bWFwcGVkS2V5cy50YWJsZVtpbmRleF07CisKKyAgICAgIGlmICghKG1hcC0+ZmxhZ3MgJiBNS0ZfSElEREVOKSkgeworICAgICAgICBjb25zdCBLZXlib2FyZEZ1bmN0aW9uICprYmYgPSBtYXAtPmtleWJvYXJkRnVuY3Rpb247CisKKyAgICAgICAgaWYgKCFwdXRLZXlib2FyZEZ1bmN0aW9uKGxnZCwga2JmKSkgcmV0dXJuIDA7CisgICAgICAgIGlmICghcHV0S2V5TmFtZShsZ2QsICZtYXAtPmtleVZhbHVlKSkgcmV0dXJuIDA7CisgICAgICAgIGlmICghZW5kTGluZShsZ2QpKSByZXR1cm4gMDsKKyAgICAgIH0KKyAgICB9CisKKyAgICB7CisgICAgICBjb25zdCBLZXlib2FyZEZ1bmN0aW9uICprYmYgPSBrZXlib2FyZEZ1bmN0aW9uVGFibGU7CisgICAgICBjb25zdCBLZXlib2FyZEZ1bmN0aW9uICplbmQgPSBrYmYgKyBrZXlib2FyZEZ1bmN0aW9uQ291bnQ7CisKKyAgICAgIHdoaWxlIChrYmYgPCBlbmQpIHsKKyAgICAgICAgaWYgKGN0eC0+bWFwcGVkS2V5cy5zdXBlcmltcG9zZSAmIGtiZi0+Yml0KSB7CisgICAgICAgICAgaWYgKCFwdXRLZXlib2FyZEZ1bmN0aW9uKGxnZCwga2JmKSkgcmV0dXJuIDA7CisgICAgICAgICAgaWYgKCFwdXRDaGFyYWN0ZXJTdHJpbmcobGdkLCBXU19DKCJzdXBlcmltcG9zZWQiKSkpIHJldHVybiAwOworICAgICAgICAgIGlmICghZW5kTGluZShsZ2QpKSByZXR1cm4gMDsKKyAgICAgICAgfQorCisgICAgICAgIGtiZiArPSAxOworICAgICAgfQorICAgIH0KKyAgfQorCisgIHJldHVybiAxOworfQorCit2b2lkCitjb21tYW5kR3JvdXBIb29rX2tleWJvYXJkRnVuY3Rpb25zIChDb21tYW5kR3JvdXBIb29rRGF0YSAqY2doKSB7CisgIGxpc3RDb21tYW5kU3ViZ3JvdXAobGlzdEtleWJvYXJkRnVuY3Rpb25zLCBjZ2gpOworfQorCitzdGF0aWMgaW50CitsaXN0SG90a2V5RXZlbnQgKExpc3RHZW5lcmF0aW9uRGF0YSAqbGdkLCBjb25zdCBLZXlWYWx1ZSAqa2V5VmFsdWUsIGNvbnN0IGNoYXIgKmV2ZW50LCBjb25zdCBCb3VuZENvbW1hbmQgKmNtZCkgeworICBpZiAoY21kLT52YWx1ZSAhPSBCUkxfQ01EX05PT1ApIHsKKyAgICBpZiAoIWJlZ2luRWxlbWVudChsZ2QsIDEpKSByZXR1cm4gMDsKKworICAgIGlmICgoY21kLT52YWx1ZSAmIEJSTF9NU0tfQkxLKSA9PSBCUkxfQ01EX0JMSyhDT05URVhUKSkgeworICAgICAgY29uc3QgS2V5Q29udGV4dCAqY3R4ID0gZ2V0S2V5Q29udGV4dChsZ2QtPmtleVRhYmxlLCAoS1RCX0NUWF9ERUZBVUxUICsgKGNtZC0+dmFsdWUgJiBCUkxfTVNLX0FSRykpKTsKKyAgICAgIGlmICghY3R4KSByZXR1cm4gMDsKKyAgICAgIGlmICghcHV0VXRmOFN0cmluZyhsZ2QsICJzd2l0Y2ggdG8gIikpIHJldHVybiAwOworICAgICAgaWYgKCFwdXRDaGFyYWN0ZXJTdHJpbmcobGdkLCBjdHgtPnRpdGxlKSkgcmV0dXJuIDA7CisgICAgfSBlbHNlIHsKKyAgICAgIGlmICghcHV0Q29tbWFuZERlc2NyaXB0aW9uKGxnZCwgY21kLCAoa2V5VmFsdWUtPm51bWJlciAhPSBLVEJfS0VZX0FOWSkpKSByZXR1cm4gMDsKKyAgICB9CisKKyAgICBpZiAoIXB1dENoYXJhY3RlclN0cmluZyhsZ2QsIFdTX0MoIjogIikpKSByZXR1cm4gMDsKKyAgICBpZiAoIXB1dFV0ZjhTdHJpbmcobGdkLCBldmVudCkpIHJldHVybiAwOworICAgIGlmICghcHV0Q2hhcmFjdGVyKGxnZCwgV0NfQygnICcpKSkgcmV0dXJuIDA7CisgICAgaWYgKCFwdXRLZXlOYW1lKGxnZCwga2V5VmFsdWUpKSByZXR1cm4gMDsKKyAgICBpZiAoIWVuZExpbmUobGdkKSkgcmV0dXJuIDA7CisgIH0KKworICByZXR1cm4gMTsKK30KKworc3RhdGljIGludAorbGlzdEhvdGtleXMgKExpc3RHZW5lcmF0aW9uRGF0YSAqbGdkLCBjb25zdCBLZXlDb250ZXh0ICpjdHgpIHsKKyAgY29uc3QgSG90a2V5RW50cnkgKmhvdGtleSA9IGN0eC0+aG90a2V5cy50YWJsZTsKKyAgdW5zaWduZWQgaW50IGNvdW50ID0gY3R4LT5ob3RrZXlzLmNvdW50OworCisgIHdoaWxlIChjb3VudCkgeworICAgIGlmICghKGhvdGtleS0+ZmxhZ3MgJiBIS0ZfSElEREVOKSkgeworICAgICAgaWYgKCFsaXN0SG90a2V5RXZlbnQobGdkLCAmaG90a2V5LT5rZXlWYWx1ZSwgInByZXNzIiwgJmhvdGtleS0+cHJlc3NDb21tYW5kKSkgcmV0dXJuIDA7CisgICAgICBpZiAoIWxpc3RIb3RrZXlFdmVudChsZ2QsICZob3RrZXktPmtleVZhbHVlLCAicmVsZWFzZSIsICZob3RrZXktPnJlbGVhc2VDb21tYW5kKSkgcmV0dXJuIDA7CisgICAgfQorCisgICAgaG90a2V5ICs9IDEsIGNvdW50IC09IDE7CisgIH0KKworICByZXR1cm4gMTsKK30KKwordm9pZAorY29tbWFuZEdyb3VwSG9va19ob3RrZXlzIChDb21tYW5kR3JvdXBIb29rRGF0YSAqY2doKSB7CisgIGxpc3RDb21tYW5kU3ViZ3JvdXAobGlzdEhvdGtleXMsIGNnaCk7Cit9CisKK3N0YXRpYyBpbnQKK3NhdmVCaW5kaW5nTGluZSAoCisgIExpc3RHZW5lcmF0aW9uRGF0YSAqbGdkLCBzaXplX3Qga2V5c09mZnNldCwKKyAgY29uc3QgQm91bmRDb21tYW5kICpjb21tYW5kLCBjb25zdCBLZXlCaW5kaW5nICpiaW5kaW5nCispIHsKKyAgaWYgKGxnZC0+YmluZGluZy5jb3VudCA9PSBsZ2QtPmJpbmRpbmcuc2l6ZSkgeworICAgIHNpemVfdCBuZXdTaXplID0gbGdkLT5iaW5kaW5nLnNpemU/IChsZ2QtPmJpbmRpbmcuc2l6ZSA8PCAxKTogMFgxMDsKKyAgICBCaW5kaW5nTGluZSAqKm5ld0xpbmVzID0gcmVhbGxvYyhsZ2QtPmJpbmRpbmcubGluZXMsIEFSUkFZX1NJWkUobmV3TGluZXMsIG5ld1NpemUpKTsKKworICAgIGlmICghbmV3TGluZXMpIHsKKyAgICAgIGxvZ01hbGxvY0Vycm9yKCk7CisgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBsZ2QtPmJpbmRpbmcubGluZXMgPSBuZXdMaW5lczsKKworICAgIHdoaWxlIChsZ2QtPmJpbmRpbmcuc2l6ZSA8IG5ld1NpemUpIHsKKyAgICAgIGxnZC0+YmluZGluZy5saW5lc1tsZ2QtPmJpbmRpbmcuc2l6ZSsrXSA9IE5VTEw7CisgICAgfQorICB9CisKKyAgeworICAgIEJpbmRpbmdMaW5lICpsaW5lOworICAgIHNpemVfdCBzaXplID0gc2l6ZW9mKCpsaW5lKSArIChzaXplb2YobGluZS0+dGV4dFswXSkgKiBsZ2QtPmxpbmUubGVuZ3RoKTsKKworICAgIGlmICghKGxpbmUgPSBtYWxsb2Moc2l6ZSkpKSB7CisgICAgICBsb2dNYWxsb2NFcnJvcigpOworICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgbGluZS0+Y29tbWFuZCA9IGNvbW1hbmQ7CisgICAgbGluZS0+a2V5Q29tYmluYXRpb24gPSAmYmluZGluZy0+a2V5Q29tYmluYXRpb247CisgICAgbGluZS0+a2V5c09mZnNldCA9IGtleXNPZmZzZXQ7CisgICAgd21lbWNweShsaW5lLT50ZXh0LCBsZ2QtPmxpbmUuY2hhcmFjdGVycywgKGxpbmUtPmxlbmd0aCA9IGxnZC0+bGluZS5sZW5ndGgpKTsKKyAgICBsZ2QtPmJpbmRpbmcubGluZXNbbGdkLT5iaW5kaW5nLmNvdW50KytdID0gbGluZTsKKyAgfQorCisgIGNsZWFyTGluZShsZ2QpOworICByZXR1cm4gMTsKK30KKworc3RhdGljIHZvaWQKK3JlbW92ZUJpbmRpbmdMaW5lIChMaXN0R2VuZXJhdGlvbkRhdGEgKmxnZCwgaW50IGluZGV4KSB7CisgIHsKKyAgICBCaW5kaW5nTGluZSAqYmwgPSBsZ2QtPmJpbmRpbmcubGluZXNbaW5kZXhdOworCisgICAgZnJlZShibCk7CisgIH0KKworICBpZiAoLS1sZ2QtPmJpbmRpbmcuY291bnQgPiBpbmRleCkgeworICAgIG1lbW1vdmUoJmxnZC0+YmluZGluZy5saW5lc1tpbmRleF0sICZsZ2QtPmJpbmRpbmcubGluZXNbaW5kZXgrMV0sCisgICAgICAgICAgICAoKGxnZC0+YmluZGluZy5jb3VudCAtIGluZGV4KSAqIHNpemVvZigqbGdkLT5iaW5kaW5nLmxpbmVzKSkpOworICB9Cit9CisKK3N0YXRpYyB2b2lkCityZW1vdmVCaW5kaW5nTGluZXMgKExpc3RHZW5lcmF0aW9uRGF0YSAqbGdkKSB7CisgIHNpemVfdCAqY291bnQgPSAmbGdkLT5iaW5kaW5nLmNvdW50OworCisgIHdoaWxlICgqY291bnQgPiAwKSByZW1vdmVCaW5kaW5nTGluZShsZ2QsICgqY291bnQgLSAxKSk7Cit9CisKK3N0YXRpYyBpbnQKK3NvcnRCaW5kaW5nTGluZXMgKGNvbnN0IHZvaWQgKmVsZW1lbnQxLCBjb25zdCB2b2lkICplbGVtZW50MikgeworICBjb25zdCBCaW5kaW5nTGluZSAqY29uc3QgKmxpbmUxID0gZWxlbWVudDE7CisgIGNvbnN0IEJpbmRpbmdMaW5lICpjb25zdCAqbGluZTIgPSBlbGVtZW50MjsKKworICBpbnQgY29tbWFuZDEgPSAoKmxpbmUxKS0+Y29tbWFuZC0+dmFsdWU7CisgIGludCBjb21tYW5kMiA9ICgqbGluZTIpLT5jb21tYW5kLT52YWx1ZTsKKworICBpbnQgY21kMSA9IGNvbW1hbmQxICYgQlJMX01TS19DTUQ7CisgIGludCBjbWQyID0gY29tbWFuZDIgJiBCUkxfTVNLX0NNRDsKKyAgaWYgKGNtZDEgPCBjbWQyKSByZXR1cm4gLTE7CisgIGlmIChjbWQxID4gY21kMikgcmV0dXJuIDE7CisKKyAgaWYgKGNvbW1hbmQxIDwgY29tbWFuZDIpIHJldHVybiAtMTsKKyAgaWYgKGNvbW1hbmQxID4gY29tbWFuZDIpIHJldHVybiAxOworCisgIGNvbnN0IEtleUNvbWJpbmF0aW9uICpjb21iaW5hdGlvbjEgPSAoKmxpbmUxKS0+a2V5Q29tYmluYXRpb247CisgIGNvbnN0IEtleUNvbWJpbmF0aW9uICpjb21iaW5hdGlvbjIgPSAoKmxpbmUyKS0+a2V5Q29tYmluYXRpb247CisgIGlmIChjb21iaW5hdGlvbjEtPmFueUtleUNvdW50IDwgY29tYmluYXRpb24yLT5hbnlLZXlDb3VudCkgcmV0dXJuIC0xOworICBpZiAoY29tYmluYXRpb24xLT5hbnlLZXlDb3VudCA+IGNvbWJpbmF0aW9uMi0+YW55S2V5Q291bnQpIHJldHVybiAxOworCisgIGlmIChjb21iaW5hdGlvbjEgPCBjb21iaW5hdGlvbjIpIHJldHVybiAtMTsKKyAgaWYgKGNvbWJpbmF0aW9uMSA+IGNvbWJpbmF0aW9uMikgcmV0dXJuIDE7CisgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50CitsaXN0QmluZGluZ0xpbmUgKExpc3RHZW5lcmF0aW9uRGF0YSAqbGdkLCBpbnQgaW5kZXgsIGludCAqaXNTYW1lKSB7CisgIGNvbnN0IEJpbmRpbmdMaW5lICpibCA9IGxnZC0+YmluZGluZy5saW5lc1tpbmRleF07CisgIGludCBhc0xpc3QgPSAqaXNTYW1lOworCisgIGlmICgqaXNTYW1lKSB7CisgICAgKmlzU2FtZSA9IDA7CisgIH0gZWxzZSB7CisgICAgaWYgKCFiZWdpbkVsZW1lbnQobGdkLCAxKSkgcmV0dXJuIDA7CisgICAgaWYgKCFwdXRDaGFyYWN0ZXJzKGxnZCwgYmwtPnRleHQsIGJsLT5rZXlzT2Zmc2V0KSkgcmV0dXJuIDA7CisgIH0KKworICB7CisgICAgaW50IG5leHQgPSBpbmRleCArIDE7CisKKyAgICBpZiAobmV4dCA8IGxnZC0+YmluZGluZy5jb3VudCkgeworICAgICAgY29uc3QgQmluZGluZ0xpbmUgKm5sID0gbGdkLT5iaW5kaW5nLmxpbmVzW25leHRdOworCisgICAgICBpZiAoYmwtPmNvbW1hbmQtPnZhbHVlID09IG5sLT5jb21tYW5kLT52YWx1ZSkgeworICAgICAgICBpZiAoYmwtPmtleUNvbWJpbmF0aW9uLT5hbnlLZXlDb3VudCA9PSBubC0+a2V5Q29tYmluYXRpb24tPmFueUtleUNvdW50KSB7CisgICAgICAgICAgaWYgKCFhc0xpc3QpIHsKKyAgICAgICAgICAgIGlmICghZW5kTGluZShsZ2QpKSByZXR1cm4gMDsKKyAgICAgICAgICB9CisKKyAgICAgICAgICBhc0xpc3QgPSAxOworICAgICAgICAgICppc1NhbWUgPSAxOworICAgICAgICB9CisgICAgICB9CisgICAgfQorICB9CisKKyAgaWYgKGFzTGlzdCkgeworICAgIGlmICghYmVnaW5FbGVtZW50KGxnZCwgMikpIHJldHVybiAwOworICB9CisKKyAgaWYgKCFwdXRDaGFyYWN0ZXJzKGxnZCwgJmJsLT50ZXh0W2JsLT5rZXlzT2Zmc2V0XSwgKGJsLT5sZW5ndGggLSBibC0+a2V5c09mZnNldCkpKSByZXR1cm4gMDsKKyAgaWYgKCFlbmRMaW5lKGxnZCkpIHJldHVybiAwOworCisgIHJlbW92ZUJpbmRpbmdMaW5lKGxnZCwgaW5kZXgpOworICByZXR1cm4gMTsKK30KKworc3RhdGljIGludAorbGlzdEJpbmRpbmdMaW5lcyAoTGlzdEdlbmVyYXRpb25EYXRhICpsZ2QsIGNvbnN0IEtleUNvbnRleHQgKmN0eCkgeworICBpZiAobGdkLT5iaW5kaW5nLmNvdW50ID4gMCkgeworICAgIHFzb3J0KGxnZC0+YmluZGluZy5saW5lcywgbGdkLT5iaW5kaW5nLmNvdW50LAorICAgICAgICAgIHNpemVvZigqbGdkLT5iaW5kaW5nLmxpbmVzKSwgc29ydEJpbmRpbmdMaW5lcyk7CisKKyAgICB7CisgICAgICBjb25zdCBDb21tYW5kR3JvdXBFbnRyeSAqZ3JwID0gY29tbWFuZEdyb3VwVGFibGU7CisgICAgICBjb25zdCBDb21tYW5kR3JvdXBFbnRyeSAqZ3JwRW5kID0gZ3JwICsgY29tbWFuZEdyb3VwQ291bnQ7CisKKyAgICAgIHdoaWxlIChncnAgPCBncnBFbmQpIHsKKyAgICAgICAgY29uc3QgQ29tbWFuZExpc3RFbnRyeSAqY21kID0gZ3JwLT5jb21tYW5kcy50YWJsZTsKKyAgICAgICAgY29uc3QgQ29tbWFuZExpc3RFbnRyeSAqY21kRW5kID0gY21kICsgZ3JwLT5jb21tYW5kcy5jb3VudDsKKworICAgICAgICBDb21tYW5kR3JvdXBIb29rRGF0YSBjZ2ggPSB7CisgICAgICAgICAgLmxnZCA9IGxnZCwKKyAgICAgICAgICAuY3R4ID0gY3R4CisgICAgICAgIH07CisKKyAgICAgICAgaWYgKCFiZWdpbkxpc3QobGdkLCBncnAtPm5hbWUpKSByZXR1cm4gMDsKKyAgICAgICAgaWYgKCFoYW5kbGVDb21tYW5kR3JvdXBIb29rKGdycC0+YmVmb3JlLCAmY2doKSkgcmV0dXJuIDA7CisKKyAgICAgICAgd2hpbGUgKGNtZCA8IGNtZEVuZCkgeworICAgICAgICAgIGludCBmaXJzdCA9IDA7CisgICAgICAgICAgaW50IGxhc3QgPSBsZ2QtPmJpbmRpbmcuY291bnQgLSAxOworCisgICAgICAgICAgd2hpbGUgKGZpcnN0IDw9IGxhc3QpIHsKKyAgICAgICAgICAgIGludCBjdXJyZW50ID0gKGZpcnN0ICsgbGFzdCkgLyAyOworICAgICAgICAgICAgY29uc3QgQmluZGluZ0xpbmUgKmJsID0gbGdkLT5iaW5kaW5nLmxpbmVzW2N1cnJlbnRdOworICAgICAgICAgICAgaW50IGNvbW1hbmQgPSBibC0+Y29tbWFuZC0+dmFsdWUgJiBCUkxfTVNLX0NNRDsKKworICAgICAgICAgICAgaWYgKGNvbW1hbmQgPCBjbWQtPmNvZGUpIHsKKyAgICAgICAgICAgICAgZmlyc3QgPSBjdXJyZW50ICsgMTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgIGxhc3QgPSBjdXJyZW50IC0gMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9CisKKyAgICAgICAgICBpbnQgaXNTYW1lID0gMDsKKyAgICAgICAgICBpbnQgY3VycmVudCA9IGNtZC0+Y29kZTsKKworICAgICAgICAgIC8vIEJpbmRpbmcgbGluZXMgYXJlIHJlbW92ZWQgYXMgdGhleSdyZSBwcm9jZXNzZWQsIHNvLCBldmVuIHRob3VnaAorICAgICAgICAgIC8vIGZpcnN0IGlzbid0IGJlaW5nIGluY3JlbWVudGVkLCB0aGUgY291bnQgd2lsbCBiZSBkZWNyZW1lbnRlZC4KKyAgICAgICAgICB3aGlsZSAoZmlyc3QgPCBsZ2QtPmJpbmRpbmcuY291bnQpIHsKKyAgICAgICAgICAgIGNvbnN0IEJpbmRpbmdMaW5lICpibCA9IGxnZC0+YmluZGluZy5saW5lc1tmaXJzdF07CisgICAgICAgICAgICBpbnQgbmV4dCA9IGJsLT5jb21tYW5kLT52YWx1ZTsKKworICAgICAgICAgICAgaWYgKChuZXh0ICYgQlJMX01TS19DTUQpICE9IGN1cnJlbnQpIHsKKyAgICAgICAgICAgICAgaW50IGJsayA9IG5leHQgJiBCUkxfTVNLX0JMSzsKKyAgICAgICAgICAgICAgaWYgKCFibGspIGJyZWFrOworICAgICAgICAgICAgICBpZiAoYmxrICE9IChjdXJyZW50ICYgQlJMX01TS19CTEspKSBicmVhazsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCFsaXN0QmluZGluZ0xpbmUobGdkLCBmaXJzdCwgJmlzU2FtZSkpIHJldHVybiAwOworICAgICAgICAgIH0KKworICAgICAgICAgIGNtZCArPSAxOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCFoYW5kbGVDb21tYW5kR3JvdXBIb29rKGdycC0+YWZ0ZXIsICZjZ2gpKSByZXR1cm4gMDsKKyAgICAgICAgaWYgKCFlbmRMaXN0KGxnZCkpIHJldHVybiAwOworICAgICAgICBncnAgKz0gMTsKKyAgICAgIH0KKworICAgICAgeworICAgICAgICBpbnQgaXNTYW1lID0gMDsKKworICAgICAgICBpZiAoIWJlZ2luTGlzdChsZ2QsICJVbmNhdGVnb3JpemVkIEJpbmRpbmdzIikpIHJldHVybiAwOworCisgICAgICAgIHdoaWxlIChsZ2QtPmJpbmRpbmcuY291bnQgPiAwKSB7CisgICAgICAgICAgaWYgKCFsaXN0QmluZGluZ0xpbmUobGdkLCAwLCAmaXNTYW1lKSkgcmV0dXJuIDA7CisgICAgICAgIH0KKworICAgICAgICBpZiAoIWVuZExpc3QobGdkKSkgcmV0dXJuIDA7CisgICAgICB9CisgICAgfQorICB9CisKKyAgcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQgbGlzdEtleUJpbmRpbmdzIChMaXN0R2VuZXJhdGlvbkRhdGEgKmxnZCwgY29uc3QgS2V5Q29udGV4dCAqY3R4LCBjb25zdCB3Y2hhcl90ICprZXlzUHJlZml4KTsKKworc3RhdGljIGludAorbGlzdEtleUJpbmRpbmcgKExpc3RHZW5lcmF0aW9uRGF0YSAqbGdkLCBjb25zdCBLZXlCaW5kaW5nICpiaW5kaW5nLCBpbnQgbG9uZ1ByZXNzLCBjb25zdCB3Y2hhcl90ICprZXlzUHJlZml4KSB7CisgIGNvbnN0IEJvdW5kQ29tbWFuZCAqY21kID0gbG9uZ1ByZXNzPyAmYmluZGluZy0+c2Vjb25kYXJ5Q29tbWFuZDogJmJpbmRpbmctPnByaW1hcnlDb21tYW5kOworCisgIGlmIChjbWQtPnZhbHVlID09IEJSTF9DTURfTk9PUCkgcmV0dXJuIDE7CisKKyAgaWYgKCFwdXRDb21tYW5kRGVzY3JpcHRpb24obGdkLCBjbWQsICFiaW5kaW5nLT5rZXlDb21iaW5hdGlvbi5hbnlLZXlDb3VudCkpIHJldHVybiAwOworICBpZiAoIXB1dENoYXJhY3RlclN0cmluZyhsZ2QsIFdTX0MoIjogIikpKSByZXR1cm4gMDsKKyAgc2l6ZV90IGtleXNPZmZzZXQgPSBsZ2QtPmxpbmUubGVuZ3RoOworCisgIGlmIChrZXlzUHJlZml4KSB7CisgICAgaWYgKCFwdXRDaGFyYWN0ZXJTdHJpbmcobGdkLCBrZXlzUHJlZml4KSkgcmV0dXJuIDA7CisgICAgaWYgKCFwdXRDaGFyYWN0ZXJTdHJpbmcobGdkLCBXU19DKCIsICIpKSkgcmV0dXJuIDA7CisgIH0KKworICBpZiAobG9uZ1ByZXNzKSB7CisgICAgaWYgKCFwdXRDaGFyYWN0ZXJTdHJpbmcobGdkLCBXU19DKCJsb25nICIpKSkgcmV0dXJuIDA7CisgIH0KKworICBpZiAoIXB1dEtleUNvbWJpbmF0aW9uKGxnZCwgJmJpbmRpbmctPmtleUNvbWJpbmF0aW9uKSkgcmV0dXJuIDA7CisKKyAgaWYgKChjbWQtPnZhbHVlICYgQlJMX01TS19CTEspID09IEJSTF9DTURfQkxLKENPTlRFWFQpKSB7CisgICAgY29uc3QgS2V5Q29udGV4dCAqY3R4ID0gZ2V0S2V5Q29udGV4dChsZ2QtPmtleVRhYmxlLCAoS1RCX0NUWF9ERUZBVUxUICsgKGNtZC0+dmFsdWUgJiBCUkxfTVNLX0FSRykpKTsKKyAgICBpZiAoIWN0eCkgcmV0dXJuIDA7CisKKyAgICB7CisgICAgICBzaXplX3QgbGVuZ3RoID0gbGdkLT5saW5lLmxlbmd0aCAtIGtleXNPZmZzZXQ7CisgICAgICB3Y2hhcl90IGtleXNbbGVuZ3RoICsgMV07CisKKyAgICAgIHdtZW1jcHkoa2V5cywgJmxnZC0+bGluZS5jaGFyYWN0ZXJzW2tleXNPZmZzZXRdLCBsZW5ndGgpOworICAgICAga2V5c1tsZW5ndGhdID0gMDsKKyAgICAgIGNsZWFyTGluZShsZ2QpOworCisgICAgICBpZiAoaXNUZW1wb3JhcnlLZXlDb250ZXh0KGxnZC0+a2V5VGFibGUsIGN0eCkpIHsKKyAgICAgICAgaWYgKCFsaXN0S2V5QmluZGluZ3MobGdkLCBjdHgsIGtleXMpKSByZXR1cm4gMDsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIGlmICghcHV0Q2hhcmFjdGVyU3RyaW5nKGxnZCwgV1NfQygic3dpdGNoIHRvICIpKSkgcmV0dXJuIDA7CisgICAgICAgIGlmICghcHV0Q2hhcmFjdGVyU3RyaW5nKGxnZCwgY3R4LT50aXRsZSkpIHJldHVybiAwOworICAgICAgICBpZiAoIXB1dENoYXJhY3RlclN0cmluZyhsZ2QsIFdTX0MoIjogIikpKSByZXR1cm4gMDsKKyAgICAgICAga2V5c09mZnNldCA9IGxnZC0+bGluZS5sZW5ndGg7CisgICAgICAgIGlmICghcHV0Q2hhcmFjdGVyU3RyaW5nKGxnZCwga2V5cykpIHJldHVybiAwOworICAgICAgICBpZiAoIXNhdmVCaW5kaW5nTGluZShsZ2QsIGtleXNPZmZzZXQsIGNtZCwgYmluZGluZykpIHJldHVybiAwOworICAgICAgfQorICAgIH0KKyAgfSBlbHNlIHsKKyAgICBpZiAoIXNhdmVCaW5kaW5nTGluZShsZ2QsIGtleXNPZmZzZXQsIGNtZCwgYmluZGluZykpIHJldHVybiAwOworICB9CisKKyAgcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQKK2xpc3RLZXlCaW5kaW5ncyAoTGlzdEdlbmVyYXRpb25EYXRhICpsZ2QsIGNvbnN0IEtleUNvbnRleHQgKmN0eCwgY29uc3Qgd2NoYXJfdCAqa2V5c1ByZWZpeCkgeworICBjb25zdCBLZXlCaW5kaW5nICpiaW5kaW5nID0gY3R4LT5rZXlCaW5kaW5ncy50YWJsZTsKKyAgdW5zaWduZWQgaW50IGNvdW50ID0gY3R4LT5rZXlCaW5kaW5ncy5jb3VudDsKKworICB3aGlsZSAoY291bnQpIHsKKyAgICBpZiAoIShiaW5kaW5nLT5mbGFncyAmIEtCRl9ISURERU4pKSB7CisgICAgICBpZiAoIWxpc3RLZXlCaW5kaW5nKGxnZCwgYmluZGluZywgMCwga2V5c1ByZWZpeCkpIHJldHVybiAwOworICAgICAgaWYgKCFsaXN0S2V5QmluZGluZyhsZ2QsIGJpbmRpbmcsIDEsIGtleXNQcmVmaXgpKSByZXR1cm4gMDsKKyAgICB9CisKKyAgICBiaW5kaW5nICs9IDEsIGNvdW50IC09IDE7CisgIH0KKworICByZXR1cm4gMTsKK30KKworc3RhdGljIGludAorbGlzdEtleUNvbnRleHQgKExpc3RHZW5lcmF0aW9uRGF0YSAqbGdkLCBjb25zdCBLZXlDb250ZXh0ICpjdHgpIHsKKyAgbGdkLT50b3BpY0hlYWRlciA9IGN0eC0+dGl0bGU7CisgIGlmICghbGlzdEtleUJpbmRpbmdzKGxnZCwgY3R4LCBOVUxMKSkgcmV0dXJuIDA7CisgIGlmICghbGlzdEJpbmRpbmdMaW5lcyhsZ2QsIGN0eCkpIHJldHVybiAwOworICByZXR1cm4gMTsKK30KKworc3RhdGljIGludAorbGlzdFNwZWNpYWxLZXlDb250ZXh0cyAoTGlzdEdlbmVyYXRpb25EYXRhICpsZ2QpIHsKKyAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgY29udGV4dHNbXSA9IHsKKyAgICBLVEJfQ1RYX0RFRkFVTFQsCisgICAgS1RCX0NUWF9NRU5VCisgIH07CisKKyAgY29uc3QgdW5zaWduZWQgY2hhciAqY29udGV4dCA9IGNvbnRleHRzOworICB1bnNpZ25lZCBpbnQgY291bnQgPSBBUlJBWV9DT1VOVChjb250ZXh0cyk7CisKKyAgd2hpbGUgKGNvdW50KSB7CisgICAgY29uc3QgS2V5Q29udGV4dCAqY3R4ID0gZ2V0S2V5Q29udGV4dChsZ2QtPmtleVRhYmxlLCAqY29udGV4dCk7CisKKyAgICBpZiAoY3R4KSB7CisgICAgICBpZiAoIWxpc3RLZXlDb250ZXh0KGxnZCwgY3R4KSkgcmV0dXJuIDA7CisgICAgfQorCisgICAgY29udGV4dCArPSAxLCBjb3VudCAtPSAxOworICB9CisKKyAgcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQKK2xpc3RQZXJzaXN0ZW50S2V5Q29udGV4dHMgKExpc3RHZW5lcmF0aW9uRGF0YSAqbGdkKSB7CisgIGZvciAodW5zaWduZWQgaW50IGNvbnRleHQ9S1RCX0NUWF9ERUZBVUxUKzE7IGNvbnRleHQ8bGdkLT5rZXlUYWJsZS0+a2V5Q29udGV4dHMuY291bnQ7IGNvbnRleHQrPTEpIHsKKyAgICBjb25zdCBLZXlDb250ZXh0ICpjdHggPSBnZXRLZXlDb250ZXh0KGxnZC0+a2V5VGFibGUsIGNvbnRleHQpOworCisgICAgaWYgKGN0eCAmJiAhaXNUZW1wb3JhcnlLZXlDb250ZXh0KGxnZC0+a2V5VGFibGUsIGN0eCkpIHsKKyAgICAgIGlmICghbGlzdEtleUNvbnRleHQobGdkLCBjdHgpKSByZXR1cm4gMDsKKyAgICB9CisgIH0KKworICByZXR1cm4gMTsKK30KKworc3RhdGljIGludAorbGlzdEtleVRhYmxlVGl0bGUgKExpc3RHZW5lcmF0aW9uRGF0YSAqbGdkKSB7CisgIGlmICghcHV0VXRmOFN0cmluZyhsZ2QsIGdldHRleHQoIktleSBUYWJsZSIpKSkgcmV0dXJuIDA7CisKKyAgaWYgKGxnZC0+a2V5VGFibGUtPnRpdGxlKSB7CisgICAgaWYgKCFwdXRDaGFyYWN0ZXJTdHJpbmcobGdkLCBXU19DKCI6ICIpKSkgcmV0dXJuIDA7CisgICAgaWYgKCFwdXRDaGFyYWN0ZXJTdHJpbmcobGdkLCBsZ2QtPmtleVRhYmxlLT50aXRsZSkpIHJldHVybiAwOworCisgICAgaWYgKCFmaW5pc2hMaW5lKGxnZCkpIHJldHVybiAwOworICAgIGlmICghd3JpdGVIZWFkZXIobGdkLCBsZ2QtPmxpbmUuY2hhcmFjdGVycywgMCkpIHJldHVybiAwOworICAgIGNsZWFyTGluZShsZ2QpOworICB9CisKKyAgcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQKK2xpc3RLZXlUYWJsZU5vdGVzIChMaXN0R2VuZXJhdGlvbkRhdGEgKmxnZCkgeworICBpZiAoIWJlZ2luTGlzdChsZ2QsICJOb3RlcyIpKSByZXR1cm4gMDsKKworICBmb3IgKHVuc2lnbmVkIGludCBub3RlSW5kZXg9MDsgbm90ZUluZGV4PGxnZC0+a2V5VGFibGUtPm5vdGVzLmNvdW50OyBub3RlSW5kZXgrPTEpIHsKKyAgICBjb25zdCB3Y2hhcl90ICpsaW5lID0gbGdkLT5rZXlUYWJsZS0+bm90ZXMudGFibGVbbm90ZUluZGV4XTsKKyAgICB1bnNpZ25lZCBpbnQgbGV2ZWw7CisgICAgaW50IHByZWZpeGVkOworCisgICAgaWYgKCpsaW5lID09IFdDX0MoJyonKSkgeworICAgICAgbGV2ZWwgPSAwOworICAgICAgcHJlZml4ZWQgPSAxOworICAgIH0gZWxzZSBpZiAoKmxpbmUgPT0gV0NfQygnKycpKSB7CisgICAgICBsZXZlbCA9IDI7CisgICAgICBwcmVmaXhlZCA9IDE7CisgICAgfSBlbHNlIHsKKyAgICAgIGxldmVsID0gMTsKKyAgICAgIHByZWZpeGVkID0gMDsKKyAgICB9CisKKyAgICBpZiAobGV2ZWwgPiAwKSB7CisgICAgICBpZiAoIWJlZ2luRWxlbWVudChsZ2QsIGxldmVsKSkgcmV0dXJuIDA7CisgICAgfQorCisgICAgaWYgKHByZWZpeGVkKSB7CisgICAgICBsaW5lICs9IDE7CisgICAgICB3aGlsZSAoaXN3c3BhY2UoKmxpbmUpKSBsaW5lICs9IDE7CisgICAgfQorCisgICAgaWYgKCFwdXRDaGFyYWN0ZXJTdHJpbmcobGdkLCBsaW5lKSkgcmV0dXJuIDA7CisgICAgaWYgKCFlbmRMaW5lKGxnZCkpIHJldHVybiAwOworICB9CisKKyAgaWYgKCFlbmRMaXN0KGxnZCkpIHJldHVybiAwOworICByZXR1cm4gMTsKK30KKworc3RhdGljIGludAorbGlzdENvbW1hbmRNYWNyb3MgKExpc3RHZW5lcmF0aW9uRGF0YSAqbGdkKSB7CisgIHVuc2lnbmVkIGludCBjb3VudCA9IGxnZC0+a2V5VGFibGUtPmNvbW1hbmRNYWNyb3MuY291bnQ7CisKKyAgaWYgKGNvdW50ID4gMCkgeworICAgIGxnZC0+dG9waWNIZWFkZXIgPSBXU19DKCJDb21tYW5kIE1hY3JvcyIpOworCisgICAgY29uc3QgQ29tbWFuZE1hY3JvICptYWNybyA9IGxnZC0+a2V5VGFibGUtPmNvbW1hbmRNYWNyb3MudGFibGU7CisgICAgY29uc3QgQ29tbWFuZE1hY3JvICplbmRNYWNyb3MgPSBtYWNybyArIGNvdW50OworICAgIHVuc2lnbmVkIGludCBudW1iZXIgPSAwOworCisgICAgd2hpbGUgKG1hY3JvIDwgZW5kTWFjcm9zKSB7CisgICAgICB7CisgICAgICAgIGNoYXIgYnVmZmVyWzBYMTAwXTsKKyAgICAgICAgc25wcmludGYoYnVmZmVyLCBzaXplb2YoYnVmZmVyKSwgIkNvbW1hbmQgTWFjcm8gIyV1OiIsICsrbnVtYmVyKTsKKyAgICAgICAgaWYgKCFwdXRVdGY4U3RyaW5nKGxnZCwgYnVmZmVyKSkgcmV0dXJuIDA7CisgICAgICB9CisKKyAgICAgIHsKKyAgICAgICAgY29uc3QgQm91bmRDb21tYW5kICpjb21tYW5kID0gbWFjcm8tPmNvbW1hbmRzOworICAgICAgICBjb25zdCBCb3VuZENvbW1hbmQgKmVuZENvbW1hbmRzID0gY29tbWFuZCArIG1hY3JvLT5jb3VudDsKKworICAgICAgICB3aGlsZSAoY29tbWFuZCA8IGVuZENvbW1hbmRzKSB7CisgICAgICAgICAgaWYgKCFwdXRDaGFyYWN0ZXIobGdkLCBXQ19DKCcgJykpKSByZXR1cm4gMDsKKyAgICAgICAgICBpZiAoIXB1dFV0ZjhTdHJpbmcobGdkLCBjb21tYW5kLT5lbnRyeS0+bmFtZSkpIHJldHVybiAwOworICAgICAgICAgIGNvbW1hbmQgKz0gMTsKKyAgICAgICAgfQorICAgICAgfQorCisgICAgICBpZiAoIWVuZExpbmUobGdkKSkgcmV0dXJuIDA7CisgICAgICBtYWNybyArPSAxOworICAgIH0KKworICAgIGlmICghZW5kTGluZShsZ2QpKSByZXR1cm4gMDsKKyAgfQorCisgIHJldHVybiAxOworfQorCitzdGF0aWMgaW50CitsaXN0SG9zdENvbW1hbmRzIChMaXN0R2VuZXJhdGlvbkRhdGEgKmxnZCkgeworICB1bnNpZ25lZCBpbnQgY291bnQgPSBsZ2QtPmtleVRhYmxlLT5ob3N0Q29tbWFuZHMuY291bnQ7CisKKyAgaWYgKGNvdW50ID4gMCkgeworICAgIGxnZC0+dG9waWNIZWFkZXIgPSBXU19DKCJIb3N0IENvbW1hbmRzIik7CisKKyAgICBjb25zdCBIb3N0Q29tbWFuZCAqaGMgPSBsZ2QtPmtleVRhYmxlLT5ob3N0Q29tbWFuZHMudGFibGU7CisgICAgY29uc3QgSG9zdENvbW1hbmQgKmVuZCA9IGhjICsgY291bnQ7CisgICAgdW5zaWduZWQgaW50IG51bWJlciA9IDA7CisKKyAgICB3aGlsZSAoaGMgPCBlbmQpIHsKKyAgICAgIHsKKyAgICAgICAgY2hhciBidWZmZXJbMFgxMDBdOworICAgICAgICBzbnByaW50ZihidWZmZXIsIHNpemVvZihidWZmZXIpLCAiSG9zdCBDb21tYW5kICMldToiLCArK251bWJlcik7CisgICAgICAgIGlmICghcHV0VXRmOFN0cmluZyhsZ2QsIGJ1ZmZlcikpIHJldHVybiAwOworICAgICAgfQorCisgICAgICB7CisgICAgICAgIGNoYXIgKiphcmd1bWVudCA9IGhjLT5hcmd1bWVudHM7CisKKyAgICAgICAgd2hpbGUgKCphcmd1bWVudCkgeworICAgICAgICAgIGlmICghcHV0Q2hhcmFjdGVyKGxnZCwgV0NfQygnICcpKSkgcmV0dXJuIDA7CisgICAgICAgICAgaWYgKCFwdXRVdGY4U3RyaW5nKGxnZCwgKmFyZ3VtZW50KSkgcmV0dXJuIDA7CisgICAgICAgICAgYXJndW1lbnQgKz0gMTsKKyAgICAgICAgfQorICAgICAgfQorCisgICAgICBpZiAoIWVuZExpbmUobGdkKSkgcmV0dXJuIDA7CisgICAgICBoYyArPSAxOworICAgIH0KKworICAgIGlmICghZW5kTGluZShsZ2QpKSByZXR1cm4gMDsKKyAgfQorCisgIHJldHVybiAxOworfQorCitzdGF0aWMgaW50CitsaXN0S2V5VGFibGVTZWN0aW9ucyAoTGlzdEdlbmVyYXRpb25EYXRhICpsZ2QpIHsKKyAgdHlwZWRlZiBpbnQgTGlzdGVyIChMaXN0R2VuZXJhdGlvbkRhdGEgKmxnZCk7CisKKyAgc3RhdGljIExpc3RlciAqY29uc3QgbGlzdGVyVGFibGVbXSA9IHsKKyAgICBsaXN0S2V5VGFibGVUaXRsZSwKKyAgICBsaXN0S2V5VGFibGVOb3RlcywKKyAgICBsaXN0Q29tbWFuZE1hY3JvcywKKyAgICBsaXN0SG9zdENvbW1hbmRzLAorICAgIGxpc3RTcGVjaWFsS2V5Q29udGV4dHMsCisgICAgbGlzdFBlcnNpc3RlbnRLZXlDb250ZXh0cworICB9OworCisgIExpc3RlciAqY29uc3QgKmxpc3RlciA9IGxpc3RlclRhYmxlOworICBMaXN0ZXIgKmNvbnN0ICplbmQgPSBsaXN0ZXIgKyBBUlJBWV9DT1VOVChsaXN0ZXJUYWJsZSk7CisKKyAgd2hpbGUgKGxpc3RlciA8IGVuZCkgeworICAgIGlmICghKCpsaXN0ZXIpKGxnZCkpIHJldHVybiAwOworICAgIGxpc3RlciArPSAxOworICB9CisKKyAgcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQKK2ludGVybmFsV3JpdGVIZWFkZXIgKGNvbnN0IHdjaGFyX3QgKnRleHQsIHVuc2lnbmVkIGludCBsZXZlbCwgdm9pZCAqZGF0YSkgeworICBzdGF0aWMgY29uc3Qgd2NoYXJfdCBjaGFyYWN0ZXJzW10gPSB7V0NfQygnPScpLCBXQ19DKCctJyl9OworICBMaXN0R2VuZXJhdGlvbkRhdGEgKmxnZCA9IGRhdGE7CisKKyAgaWYgKCF3cml0ZUxpbmUobGdkLCB0ZXh0KSkgcmV0dXJuIDA7CisKKyAgaWYgKGxldmVsIDwgQVJSQVlfQ09VTlQoY2hhcmFjdGVycykpIHsKKyAgICBzaXplX3QgbGVuZ3RoID0gd2NzbGVuKHRleHQpOworICAgIHdjaGFyX3QgdW5kZXJsaW5lW2xlbmd0aCArIDFdOworCisgICAgd21lbXNldCh1bmRlcmxpbmUsIGNoYXJhY3RlcnNbbGV2ZWxdLCBsZW5ndGgpOworICAgIHVuZGVybGluZVtsZW5ndGhdID0gMDsKKworICAgIGlmICghd3JpdGVMaW5lKGxnZCwgdW5kZXJsaW5lKSkgcmV0dXJuIDA7CisgICAgaWYgKCF3cml0ZUJsYW5rTGluZShsZ2QpKSByZXR1cm4gMDsKKyAgfQorCisgIHJldHVybiAxOworfQorCitzdGF0aWMgaW50CitpbnRlcm5hbEJlZ2luRWxlbWVudCAodW5zaWduZWQgaW50IGxldmVsLCB2b2lkICpkYXRhKSB7CisgIExpc3RHZW5lcmF0aW9uRGF0YSAqbGdkID0gZGF0YTsKKworICBzdGF0aWMgY29uc3Qgd2NoYXJfdCBidWxsZXRzW10gPSB7CisgICAgV0NfQygnKicpLAorICAgIFdDX0MoJysnKSwKKyAgICBXQ19DKCctJykKKyAgfTsKKworICBsZ2QtPmxpc3QuZWxlbWVudExldmVsID0gbGV2ZWw7CisgIGxnZC0+bGlzdC5lbGVtZW50QnVsbGV0ID0gYnVsbGV0c1tsZXZlbCAtIDFdOworICByZXR1cm4gMTsKK30KKworc3RhdGljIGludAoraW50ZXJuYWxFbmRMaXN0ICh2b2lkICpkYXRhKSB7CisgIExpc3RHZW5lcmF0aW9uRGF0YSAqbGdkID0gZGF0YTsKKworICBpZiAobGdkLT5saXN0LmVsZW1lbnRMZXZlbCA+IDApIHsKKyAgICBsZ2QtPmxpc3QuZWxlbWVudExldmVsID0gMDsKKyAgICBsZ2QtPmxpc3RIZWFkZXIgPSBOVUxMOworICAgIGlmICghd3JpdGVCbGFua0xpbmUobGdkKSkgcmV0dXJuIDA7CisgIH0KKworICByZXR1cm4gMTsKK30KKworaW50CitsaXN0S2V5VGFibGUgKEtleVRhYmxlICp0YWJsZSwgY29uc3QgS2V5VGFibGVMaXN0TWV0aG9kcyAqbWV0aG9kcywgS2V5VGFibGVXcml0ZUxpbmVNZXRob2QgKndyaXRlTGluZSwgdm9pZCAqZGF0YSkgeworICBzdGF0aWMgY29uc3QgS2V5VGFibGVMaXN0TWV0aG9kcyBpbnRlcm5hbE1ldGhvZHMgPSB7CisgICAgLndyaXRlSGVhZGVyID0gaW50ZXJuYWxXcml0ZUhlYWRlciwKKyAgICAuYmVnaW5FbGVtZW50ID0gaW50ZXJuYWxCZWdpbkVsZW1lbnQsCisgICAgLmVuZExpc3QgPSBpbnRlcm5hbEVuZExpc3QKKyAgfTsKKworICBMaXN0R2VuZXJhdGlvbkRhdGEgbGdkID0geworICAgIC5rZXlUYWJsZSA9IHRhYmxlLAorCisgICAgLnRvcGljSGVhZGVyID0gTlVMTCwKKyAgICAubGlzdEhlYWRlciA9IE5VTEwsCisKKyAgICAubGluZSA9IHsKKyAgICAgIC5jaGFyYWN0ZXJzID0gTlVMTCwKKyAgICAgIC5zaXplID0gMCwKKyAgICAgIC5sZW5ndGggPSAwLAorICAgIH0sCisKKyAgICAubGlzdCA9IHsKKyAgICAgIC5tZXRob2RzID0gbWV0aG9kcz8gbWV0aG9kczogJmludGVybmFsTWV0aG9kcywKKyAgICAgIC53cml0ZUxpbmUgPSB3cml0ZUxpbmUsCisgICAgICAuZGF0YSA9IGRhdGEsCisgICAgICAuaW50ZXJuYWwgPSAhbWV0aG9kcywKKworICAgICAgLmVsZW1lbnRMZXZlbCA9IDAKKyAgICB9LAorCisgICAgLmJpbmRpbmcgPSB7CisgICAgICAubGluZXMgPSBOVUxMLAorICAgICAgLnNpemUgPSAwLAorICAgICAgLmNvdW50ID0gMAorICAgIH0KKyAgfTsKKworICBpbnQgcmVzdWx0ID0gbGlzdEtleVRhYmxlU2VjdGlvbnMoJmxnZCk7CisKKyAgaWYgKGxnZC5iaW5kaW5nLmxpbmVzKSB7CisgICAgcmVtb3ZlQmluZGluZ0xpbmVzKCZsZ2QpOworICAgIGZyZWUobGdkLmJpbmRpbmcubGluZXMpOworICB9CisKKyAgaWYgKGxnZC5saW5lLmNoYXJhY3RlcnMpIGZyZWUobGdkLmxpbmUuY2hhcmFjdGVycyk7CisgIHJldHVybiByZXN1bHQ7Cit9CisKK2ludAorZm9yRWFjaEtleU5hbWUgKEtFWV9OQU1FX1RBQkxFU19SRUZFUkVOQ0Uga2V5cywgS2V5TmFtZUVudHJ5SGFuZGxlciAqaGFuZGxlS2V5TmFtZUVudHJ5LCB2b2lkICpkYXRhKSB7CisgIGNvbnN0IEtleU5hbWVFbnRyeSAqY29uc3QgKmtudCA9IGtleXM7CisKKyAgd2hpbGUgKCprbnQpIHsKKyAgICBjb25zdCBLZXlOYW1lRW50cnkgKmtuZSA9ICprbnQ7CisKKyAgICBpZiAoa250ICE9IGtleXMpIHsKKyAgICAgIGlmICghaGFuZGxlS2V5TmFtZUVudHJ5KE5VTEwsIGRhdGEpKSB7CisgICAgICAgIHJldHVybiAwOworICAgICAgfQorICAgIH0KKworICAgIHdoaWxlIChrbmUtPm5hbWUpIHsKKyAgICAgIGlmICghaGFuZGxlS2V5TmFtZUVudHJ5KGtuZSwgZGF0YSkpIHJldHVybiAwOworICAgICAga25lICs9IDE7CisgICAgfQorCisgICAga250ICs9IDE7CisgIH0KKworICByZXR1cm4gMTsKK30KKwordHlwZWRlZiBzdHJ1Y3QgeworICBLZXlUYWJsZVdyaXRlTGluZU1ldGhvZCAqY29uc3Qgd3JpdGVMaW5lOworICB2b2lkICpjb25zdCBkYXRhOworfSBMaXN0S2V5TmFtZURhdGE7CisKK3N0YXRpYyBpbnQKK2xpc3RLZXlOYW1lIChjb25zdCBLZXlOYW1lRW50cnkgKmtuZSwgdm9pZCAqZGF0YSkgeworICBjb25zdCBMaXN0S2V5TmFtZURhdGEgKmxrbiA9IGRhdGE7CisgIGNvbnN0IGNoYXIgKm5hbWUgPSBrbmU/IGtuZS0+bmFtZTogIiI7CisgIHNpemVfdCBzaXplID0gc3RybGVuKG5hbWUpICsgMTsKKyAgd2NoYXJfdCBjaGFyYWN0ZXJzW3NpemVdOworICB3Y2hhcl90ICpjaGFyYWN0ZXIgPSBjaGFyYWN0ZXJzOworCisgIGNvbnZlcnRVdGY4VG9XY2hhcnMoJm5hbWUsICZjaGFyYWN0ZXIsIHNpemUpOworICByZXR1cm4gbGtuLT53cml0ZUxpbmUoY2hhcmFjdGVycywgbGtuLT5kYXRhKTsKK30KKworaW50CitsaXN0S2V5TmFtZXMgKEtFWV9OQU1FX1RBQkxFU19SRUZFUkVOQ0Uga2V5cywgS2V5VGFibGVXcml0ZUxpbmVNZXRob2QgKndyaXRlTGluZSwgdm9pZCAqZGF0YSkgeworICBMaXN0S2V5TmFtZURhdGEgbGtuID0geworICAgIC53cml0ZUxpbmUgPSB3cml0ZUxpbmUsCisgICAgLmRhdGEgPSBkYXRhCisgIH07CisKKyAgcmV0dXJuIGZvckVhY2hLZXlOYW1lKGtleXMsIGxpc3RLZXlOYW1lLCAmbGtuKTsKK30KZGlmZiAtLWdpdCBhL1Byb2dyYW1zL2t0Yl9saXN0LmggYi9Qcm9ncmFtcy9rdGJfbGlzdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg4NzZjMWIKLS0tIC9kZXYvbnVsbAorKysgYi9Qcm9ncmFtcy9rdGJfbGlzdC5oCkBAIC0wLDAgKzEsNzAgQEAKKy8qCisgKiBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorICogICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorICoKKyAqIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorICoKKyAqIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyAqLworCisjaWZuZGVmIEJSTFRUWV9JTkNMVURFRF9LVEJfTElTVAorI2RlZmluZSBCUkxUVFlfSU5DTFVERURfS1RCX0xJU1QKKworI2luY2x1ZGUgImt0Yl9pbnRlcm5hbC5oIgorI2luY2x1ZGUgImt0Yl9pbnNwZWN0LmgiCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYgLyogX19jcGx1c3BsdXMgKi8KKwordHlwZWRlZiBzdHJ1Y3QgeworICBjb25zdCBCb3VuZENvbW1hbmQgKmNvbW1hbmQ7CisgIGNvbnN0IEtleUNvbWJpbmF0aW9uICprZXlDb21iaW5hdGlvbjsKKyAgc2l6ZV90IGtleXNPZmZzZXQ7CisgIHNpemVfdCBsZW5ndGg7CisgIHdjaGFyX3QgdGV4dFswXTsKK30gQmluZGluZ0xpbmU7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgS2V5VGFibGUgKmNvbnN0IGtleVRhYmxlOworCisgIGNvbnN0IHdjaGFyX3QgKnRvcGljSGVhZGVyOworICBjb25zdCBjaGFyICpsaXN0SGVhZGVyOworCisgIHN0cnVjdCB7CisgICAgd2NoYXJfdCAqY2hhcmFjdGVyczsKKyAgICBzaXplX3Qgc2l6ZTsKKyAgICBzaXplX3QgbGVuZ3RoOworICB9IGxpbmU7CisKKyAgc3RydWN0IHsKKyAgICBjb25zdCBLZXlUYWJsZUxpc3RNZXRob2RzICpjb25zdCBtZXRob2RzOworICAgIEtleVRhYmxlV3JpdGVMaW5lTWV0aG9kICpjb25zdCB3cml0ZUxpbmU7CisgICAgdm9pZCAqY29uc3QgZGF0YTsKKyAgICBjb25zdCB1bnNpZ25lZCBpbnRlcm5hbDoxOworCisgICAgdW5zaWduZWQgaW50IGVsZW1lbnRMZXZlbDsKKyAgICB3Y2hhcl90IGVsZW1lbnRCdWxsZXQ7CisgIH0gbGlzdDsKKworICBzdHJ1Y3QgeworICAgIEJpbmRpbmdMaW5lICoqbGluZXM7CisgICAgc2l6ZV90IHNpemU7CisgICAgc2l6ZV90IGNvdW50OworICB9IGJpbmRpbmc7Cit9IExpc3RHZW5lcmF0aW9uRGF0YTsKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYgLyogX19jcGx1c3BsdXMgKi8KKworI2VuZGlmIC8qIEJSTFRUWV9JTkNMVURFRF9LVEJfTElTVCAqLwpkaWZmIC0tZ2l0IGEvUHJvZ3JhbXMva3RiX3RyYW5zbGF0ZS5jIGIvUHJvZ3JhbXMva3RiX3RyYW5zbGF0ZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMxYjU0YzIKLS0tIC9kZXYvbnVsbAorKysgYi9Qcm9ncmFtcy9rdGJfdHJhbnNsYXRlLmMKQEAgLTAsMCArMSw5MjQgQEAKKy8qCisgKiBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorICogICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorICoKKyAqIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorICoKKyAqIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyAqLworCisjaW5jbHVkZSAicHJvbG9ndWUuaCIKKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKyNpbmNsdWRlICJsb2cuaCIKKyNpbmNsdWRlICJzdHJmbXQuaCIKKyNpbmNsdWRlICJhbGVydC5oIgorI2luY2x1ZGUgInByZWZzLmgiCisjaW5jbHVkZSAidW5pY29kZS5oIgorI2luY2x1ZGUgImt0Yi5oIgorI2luY2x1ZGUgImt0Yl9pbnRlcm5hbC5oIgorI2luY2x1ZGUgImt0Yl9pbnNwZWN0LmgiCisjaW5jbHVkZSAiYnJsX3R5cGVzLmgiCisjaW5jbHVkZSAiYnJsX2NtZHMuaCIKKyNpbmNsdWRlICJjbWQuaCIKKyNpbmNsdWRlICJjbWRfZW5xdWV1ZS5oIgorI2luY2x1ZGUgImFzeW5jX2FsYXJtLmgiCisjaW5jbHVkZSAiaG9zdGNtZC5oIgorCisjZGVmaW5lIEJSTF9DTURfQUxFUlQoYWxlcnQpIEJSTF9DTURfQVJHKEFMRVJULCBBTEVSVF8jI2FsZXJ0KQorCitBU1lOQ19BTEFSTV9DQUxMQkFDSyhoYW5kbGVLZXlBdXRvcmVsZWFzZUFsYXJtKSB7CisgIEtleVRhYmxlICp0YWJsZSA9IHBhcmFtZXRlcnMtPmRhdGE7CisKKyAgYXN5bmNEaXNjYXJkSGFuZGxlKHRhYmxlLT5hdXRvcmVsZWFzZS5hbGFybSk7CisgIHRhYmxlLT5hdXRvcmVsZWFzZS5hbGFybSA9IE5VTEw7CisKKyAgZm9yICh1bnNpZ25lZCBpbnQgaW5kZXg9MDsgaW5kZXg8dGFibGUtPnByZXNzZWRLZXlzLmNvdW50OyBpbmRleCs9MSkgeworICAgIGNvbnN0IEtleVZhbHVlICprdiA9ICZ0YWJsZS0+cHJlc3NlZEtleXMudGFibGVbaW5kZXhdOworCisgICAgY2hhciBrZXlbMFg0MF07CisgICAgU1RSX0JFR0lOKGtleSwgc2l6ZW9mKGtleSkpOworCisgICAgU1RSX0ZPUk1BVChmb3JtYXRLZXlOYW1lLCB0YWJsZSwga3YpOworICAgIFNUUl9QUklOVEYoIiAoR3JwOiV1IE51bToldSkiLCBrdi0+Z3JvdXAsIGt2LT5udW1iZXIpOworCisgICAgU1RSX0VORDsKKyAgICBsb2dNZXNzYWdlKExPR19XQVJOSU5HLCAiYXV0b3JlbGVhc2luZyBrZXk6ICVzIiwga2V5KTsKKyAgfQorCisgIHJlc2V0S2V5VGFibGUodGFibGUpOworICBhbGVydChBTEVSVF9LRVlTX0FVVE9SRUxFQVNFRCk7Cit9CisKK3N0YXRpYyB2b2lkCitjYW5jZWxBdXRvcmVsZWFzZUFsYXJtIChLZXlUYWJsZSAqdGFibGUpIHsKKyAgaWYgKHRhYmxlLT5hdXRvcmVsZWFzZS5hbGFybSkgeworICAgIGFzeW5jQ2FuY2VsUmVxdWVzdCh0YWJsZS0+YXV0b3JlbGVhc2UuYWxhcm0pOworICAgIHRhYmxlLT5hdXRvcmVsZWFzZS5hbGFybSA9IE5VTEw7CisgIH0KK30KKworc3RhdGljIHZvaWQKK3NldEF1dG9yZWxlYXNlQWxhcm0gKEtleVRhYmxlICp0YWJsZSkgeworICBpZiAoIXRhYmxlLT5hdXRvcmVsZWFzZS50aW1lIHx8ICF0YWJsZS0+cHJlc3NlZEtleXMuY291bnQpIHsKKyAgICBjYW5jZWxBdXRvcmVsZWFzZUFsYXJtKHRhYmxlKTsKKyAgfSBlbHNlIGlmICh0YWJsZS0+YXV0b3JlbGVhc2UuYWxhcm0pIHsKKyAgICBhc3luY1Jlc2V0QWxhcm1Jbih0YWJsZS0+YXV0b3JlbGVhc2UuYWxhcm0sIHRhYmxlLT5hdXRvcmVsZWFzZS50aW1lKTsKKyAgfSBlbHNlIHsKKyAgICBhc3luY05ld1JlbGF0aXZlQWxhcm0oJnRhYmxlLT5hdXRvcmVsZWFzZS5hbGFybSwgdGFibGUtPmF1dG9yZWxlYXNlLnRpbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZUtleUF1dG9yZWxlYXNlQWxhcm0sIHRhYmxlKTsKKyAgfQorfQorCit2b2lkCitzZXRLZXlBdXRvcmVsZWFzZVRpbWUgKEtleVRhYmxlICp0YWJsZSwgdW5zaWduZWQgY2hhciBzZXR0aW5nKSB7CisgIHRhYmxlLT5hdXRvcmVsZWFzZS50aW1lID0gc2V0dGluZz8gKDUwMDAgPDwgKHNldHRpbmcgLSAxKSk6IDA7CisgIHNldEF1dG9yZWxlYXNlQWxhcm0odGFibGUpOworfQorCitzdGF0aWMgaW50Citzb3J0TW9kaWZpZXJLZXlzIChjb25zdCB2b2lkICplbGVtZW50MSwgY29uc3Qgdm9pZCAqZWxlbWVudDIpIHsKKyAgY29uc3QgS2V5VmFsdWUgKm1vZGlmaWVyMSA9IGVsZW1lbnQxOworICBjb25zdCBLZXlWYWx1ZSAqbW9kaWZpZXIyID0gZWxlbWVudDI7CisgIHJldHVybiBjb21wYXJlS2V5VmFsdWVzKG1vZGlmaWVyMSwgbW9kaWZpZXIyKTsKK30KKworc3RhdGljIGludAorc2VhcmNoS2V5QmluZGluZyAoY29uc3Qgdm9pZCAqdGFyZ2V0LCBjb25zdCB2b2lkICplbGVtZW50KSB7CisgIGNvbnN0IEtleUJpbmRpbmcgKnJlZmVyZW5jZSA9IHRhcmdldDsKKyAgY29uc3QgS2V5QmluZGluZyAqYmluZGluZyA9IGVsZW1lbnQ7CisgIHJldHVybiBjb21wYXJlS2V5QmluZGluZ3MocmVmZXJlbmNlLCBiaW5kaW5nKTsKK30KKworc3RhdGljIGNvbnN0IEtleUJpbmRpbmcgKgorZmluZEtleUJpbmRpbmcgKEtleVRhYmxlICp0YWJsZSwgdW5zaWduZWQgY2hhciBjb250ZXh0LCBjb25zdCBLZXlWYWx1ZSAqaW1tZWRpYXRlLCBpbnQgKmlzSW5jb21wbGV0ZSkgeworICBjb25zdCBLZXlDb250ZXh0ICpjdHggPSBnZXRLZXlDb250ZXh0KHRhYmxlLCBjb250ZXh0KTsKKworICBpZiAoIWN0eCkgcmV0dXJuIE5VTEw7CisgIGlmICghY3R4LT5rZXlCaW5kaW5ncy50YWJsZSkgcmV0dXJuIE5VTEw7CisgIGlmICh0YWJsZS0+cHJlc3NlZEtleXMuY291bnQgPiBNQVhfTU9ESUZJRVJTX1BFUl9DT01CSU5BVElPTikgcmV0dXJuIE5VTEw7CisKKyAgS2V5QmluZGluZyB0YXJnZXQgPSB7CisgICAgLmtleUNvbWJpbmF0aW9uLm1vZGlmaWVyQ291bnQgPSB0YWJsZS0+cHJlc3NlZEtleXMuY291bnQKKyAgfTsKKworICBpZiAoaW1tZWRpYXRlKSB7CisgICAgdGFyZ2V0LmtleUNvbWJpbmF0aW9uLmltbWVkaWF0ZUtleSA9ICppbW1lZGlhdGU7CisgICAgdGFyZ2V0LmtleUNvbWJpbmF0aW9uLmZsYWdzIHw9IEtDRl9JTU1FRElBVEVfS0VZOworICB9CisKKyAgd2hpbGUgKDEpIHsKKyAgICB1bnNpZ25lZCBpbnQgYWxsID0gKDEgPDwgdGFibGUtPnByZXNzZWRLZXlzLmNvdW50KSAtIDE7CisKKyAgICBmb3IgKHVuc2lnbmVkIGludCBiaXRzPTA7IGJpdHM8PWFsbDsgYml0cys9MSkgeworICAgICAgeworICAgICAgICB1bnNpZ25lZCBpbnQgaW5kZXg7CisgICAgICAgIHVuc2lnbmVkIGludCBiaXQ7CisKKyAgICAgICAgZm9yIChpbmRleD0wLCBiaXQ9MTsgaW5kZXg8dGFibGUtPnByZXNzZWRLZXlzLmNvdW50OyBpbmRleCs9MSwgYml0PDw9MSkgeworICAgICAgICAgIEtleVZhbHVlICptb2RpZmllciA9ICZ0YXJnZXQua2V5Q29tYmluYXRpb24ubW9kaWZpZXJLZXlzW2luZGV4XTsKKworICAgICAgICAgICptb2RpZmllciA9IHRhYmxlLT5wcmVzc2VkS2V5cy50YWJsZVtpbmRleF07CisgICAgICAgICAgaWYgKGJpdHMgJiBiaXQpIG1vZGlmaWVyLT5udW1iZXIgPSBLVEJfS0VZX0FOWTsKKyAgICAgICAgfQorICAgICAgfQorCisgICAgICBxc29ydCgKKyAgICAgICAgdGFyZ2V0LmtleUNvbWJpbmF0aW9uLm1vZGlmaWVyS2V5cywgdGFibGUtPnByZXNzZWRLZXlzLmNvdW50LAorICAgICAgICBzaXplb2YoKnRhcmdldC5rZXlDb21iaW5hdGlvbi5tb2RpZmllcktleXMpLCBzb3J0TW9kaWZpZXJLZXlzCisgICAgICApOworCisgICAgICB7CisgICAgICAgIGNvbnN0IEtleUJpbmRpbmcgKmJpbmRpbmcgPSBic2VhcmNoKCZ0YXJnZXQsIGN0eC0+a2V5QmluZGluZ3MudGFibGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eC0+a2V5QmluZGluZ3MuY291bnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZigqY3R4LT5rZXlCaW5kaW5ncy50YWJsZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlYXJjaEtleUJpbmRpbmcpOworCisgICAgICAgIGlmIChiaW5kaW5nKSB7CisgICAgICAgICAgaWYgKGJpbmRpbmctPnByaW1hcnlDb21tYW5kLnZhbHVlICE9IEVPRikgcmV0dXJuIGJpbmRpbmc7CisgICAgICAgICAgKmlzSW5jb21wbGV0ZSA9IDE7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoISh0YXJnZXQua2V5Q29tYmluYXRpb24uZmxhZ3MgJiBLQ0ZfSU1NRURJQVRFX0tFWSkpIGJyZWFrOworICAgIGlmICh0YXJnZXQua2V5Q29tYmluYXRpb24uaW1tZWRpYXRlS2V5Lm51bWJlciA9PSBLVEJfS0VZX0FOWSkgYnJlYWs7CisgICAgdGFyZ2V0LmtleUNvbWJpbmF0aW9uLmltbWVkaWF0ZUtleS5udW1iZXIgPSBLVEJfS0VZX0FOWTsKKyAgfQorCisgIHJldHVybiBOVUxMOworfQorCitzdGF0aWMgaW50CitzZWFyY2hIb3RrZXlFbnRyeSAoY29uc3Qgdm9pZCAqdGFyZ2V0LCBjb25zdCB2b2lkICplbGVtZW50KSB7CisgIGNvbnN0IEhvdGtleUVudHJ5ICpyZWZlcmVuY2UgPSB0YXJnZXQ7CisgIGNvbnN0IEhvdGtleUVudHJ5ICpob3RrZXkgPSBlbGVtZW50OworICByZXR1cm4gY29tcGFyZUhvdGtleUVudHJpZXMocmVmZXJlbmNlLCBob3RrZXkpOworfQorCitzdGF0aWMgY29uc3QgSG90a2V5RW50cnkgKgorZmluZEhvdGtleUVudHJ5IChLZXlUYWJsZSAqdGFibGUsIHVuc2lnbmVkIGNoYXIgY29udGV4dCwgY29uc3QgS2V5VmFsdWUgKmtleVZhbHVlKSB7CisgIGNvbnN0IEtleUNvbnRleHQgKmN0eCA9IGdldEtleUNvbnRleHQodGFibGUsIGNvbnRleHQpOworCisgIGlmICghY3R4KSByZXR1cm4gTlVMTDsKKyAgaWYgKCFjdHgtPmhvdGtleXMudGFibGUpIHJldHVybiBOVUxMOworCisgIEhvdGtleUVudHJ5IHRhcmdldCA9IHsKKyAgICAua2V5VmFsdWUgPSAqa2V5VmFsdWUKKyAgfTsKKworICByZXR1cm4gYnNlYXJjaCgmdGFyZ2V0LCBjdHgtPmhvdGtleXMudGFibGUsIGN0eC0+aG90a2V5cy5jb3VudCwKKyAgICAgICAgICAgICAgICAgc2l6ZW9mKCpjdHgtPmhvdGtleXMudGFibGUpLCBzZWFyY2hIb3RrZXlFbnRyeSk7Cit9CisKK3N0YXRpYyBpbnQKK3NlYXJjaE1hcHBlZEtleUVudHJ5IChjb25zdCB2b2lkICp0YXJnZXQsIGNvbnN0IHZvaWQgKmVsZW1lbnQpIHsKKyAgY29uc3QgTWFwcGVkS2V5RW50cnkgKnJlZmVyZW5jZSA9IHRhcmdldDsKKyAgY29uc3QgTWFwcGVkS2V5RW50cnkgKm1hcCA9IGVsZW1lbnQ7CisgIHJldHVybiBjb21wYXJlTWFwcGVkS2V5RW50cmllcyhyZWZlcmVuY2UsIG1hcCk7Cit9CisKK3N0YXRpYyBjb25zdCBNYXBwZWRLZXlFbnRyeSAqCitmaW5kTWFwcGVkS2V5RW50cnkgKGNvbnN0IEtleUNvbnRleHQgKmN0eCwgY29uc3QgS2V5VmFsdWUgKmtleVZhbHVlKSB7CisgIGlmICghY3R4KSByZXR1cm4gTlVMTDsKKyAgaWYgKCFjdHgtPm1hcHBlZEtleXMudGFibGUpIHJldHVybiBOVUxMOworCisgIE1hcHBlZEtleUVudHJ5IHRhcmdldCA9IHsKKyAgICAua2V5VmFsdWUgPSAqa2V5VmFsdWUKKyAgfTsKKworICByZXR1cm4gYnNlYXJjaCgmdGFyZ2V0LCBjdHgtPm1hcHBlZEtleXMudGFibGUsIGN0eC0+bWFwcGVkS2V5cy5jb3VudCwKKyAgICAgICAgICAgICAgICAgc2l6ZW9mKCpjdHgtPm1hcHBlZEtleXMudGFibGUpLCBzZWFyY2hNYXBwZWRLZXlFbnRyeSk7Cit9CisKK3N0YXRpYyBpbnQKK21ha2VLZXlib2FyZENvbW1hbmQgKEtleVRhYmxlICp0YWJsZSwgdW5zaWduZWQgY2hhciBjb250ZXh0LCBpbnQgYWxsb3dDaG9yZHMpIHsKKyAgY29uc3QgS2V5Q29udGV4dCAqY3R4OworCisgIGlmICgoY3R4ID0gZ2V0S2V5Q29udGV4dCh0YWJsZSwgY29udGV4dCkpKSB7CisgICAgaW50IGJpdHMgPSAwOworCisgICAgZm9yICh1bnNpZ25lZCBpbnQgcHJlc3NlZEluZGV4PTA7IHByZXNzZWRJbmRleDx0YWJsZS0+cHJlc3NlZEtleXMuY291bnQ7IHByZXNzZWRJbmRleCs9MSkgeworICAgICAgY29uc3QgS2V5VmFsdWUgKmtleVZhbHVlID0gJnRhYmxlLT5wcmVzc2VkS2V5cy50YWJsZVtwcmVzc2VkSW5kZXhdOworICAgICAgY29uc3QgTWFwcGVkS2V5RW50cnkgKm1hcCA9IGZpbmRNYXBwZWRLZXlFbnRyeShjdHgsIGtleVZhbHVlKTsKKworICAgICAgaWYgKCFtYXApIHJldHVybiBFT0Y7CisgICAgICBiaXRzIHw9IG1hcC0+a2V5Ym9hcmRGdW5jdGlvbi0+Yml0OworICAgIH0KKworICAgIHsKKyAgICAgIGludCBzcGFjZSA9IGJpdHMgJiBCUkxfRE9UQzsKKyAgICAgIGludCBkb3RzID0gYml0cyAmIEJSTF9BTExfRE9UUzsKKworICAgICAgaWYgKCFhbGxvd0Nob3JkcykgeworICAgICAgICBpZiAoIXNwYWNlID09ICFkb3RzKSByZXR1cm4gRU9GOworICAgICAgICBiaXRzICY9IH5CUkxfRE9UQzsKKyAgICAgIH0KKworICAgICAgaWYgKGRvdHMpIGJpdHMgfD0gY3R4LT5tYXBwZWRLZXlzLnN1cGVyaW1wb3NlOworICAgIH0KKworICAgIHJldHVybiBCUkxfQ01EX0JMSyhQQVNTRE9UUykgfCBiaXRzOworICB9CisKKyAgcmV0dXJuIEVPRjsKK30KKworc3RhdGljIGludAorZmluZFByZXNzZWRLZXkgKEtleVRhYmxlICp0YWJsZSwgY29uc3QgS2V5VmFsdWUgKnZhbHVlLCB1bnNpZ25lZCBpbnQgKnBvc2l0aW9uKSB7CisgIHJldHVybiBmaW5kS2V5VmFsdWUodGFibGUtPnByZXNzZWRLZXlzLnRhYmxlLCB0YWJsZS0+cHJlc3NlZEtleXMuY291bnQsIHZhbHVlLCBwb3NpdGlvbik7Cit9CisKK3N0YXRpYyBpbnQKK2luc2VydFByZXNzZWRLZXkgKEtleVRhYmxlICp0YWJsZSwgY29uc3QgS2V5VmFsdWUgKnZhbHVlLCB1bnNpZ25lZCBpbnQgcG9zaXRpb24pIHsKKyAgcmV0dXJuIGluc2VydEtleVZhbHVlKCZ0YWJsZS0+cHJlc3NlZEtleXMudGFibGUsICZ0YWJsZS0+cHJlc3NlZEtleXMuY291bnQsICZ0YWJsZS0+cHJlc3NlZEtleXMuc2l6ZSwgdmFsdWUsIHBvc2l0aW9uKTsKK30KKworc3RhdGljIHZvaWQKK3JlbW92ZVByZXNzZWRLZXkgKEtleVRhYmxlICp0YWJsZSwgdW5zaWduZWQgaW50IHBvc2l0aW9uKSB7CisgIHJlbW92ZUtleVZhbHVlKHRhYmxlLT5wcmVzc2VkS2V5cy50YWJsZSwgJnRhYmxlLT5wcmVzc2VkS2V5cy5jb3VudCwgcG9zaXRpb24pOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK2RlbGV0ZUV4cGxpY2l0S2V5VmFsdWUgKEtleVZhbHVlICp2YWx1ZXMsIHVuc2lnbmVkIGludCAqY291bnQsIGNvbnN0IEtleVZhbHVlICp2YWx1ZSkgeworICBpZiAodmFsdWUtPm51bWJlciAhPSBLVEJfS0VZX0FOWSkgZGVsZXRlS2V5VmFsdWUodmFsdWVzLCBjb3VudCwgdmFsdWUpOworfQorCitzdGF0aWMgaW50Citzb3J0S2V5T2Zmc2V0cyAoY29uc3Qgdm9pZCAqZWxlbWVudDEsIGNvbnN0IHZvaWQgKmVsZW1lbnQyKSB7CisgIGNvbnN0IEtleVZhbHVlICp2YWx1ZTEgPSBlbGVtZW50MTsKKyAgY29uc3QgS2V5VmFsdWUgKnZhbHVlMiA9IGVsZW1lbnQyOworCisgIGlmICh2YWx1ZTEtPm51bWJlciA8IHZhbHVlMi0+bnVtYmVyKSByZXR1cm4gLTE7CisgIGlmICh2YWx1ZTEtPm51bWJlciA+IHZhbHVlMi0+bnVtYmVyKSByZXR1cm4gMTsKKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkCithZGRDb21tYW5kQXJndW1lbnRzIChLZXlUYWJsZSAqdGFibGUsIGludCAqY29tbWFuZCwgY29uc3QgQ29tbWFuZEVudHJ5ICplbnRyeSwgY29uc3QgS2V5QmluZGluZyAqYmluZGluZykgeworICBpZiAoZW50cnktPmlzT2Zmc2V0IHwgZW50cnktPmlzQ29sdW1uIHwgZW50cnktPmlzUm93IHwgZW50cnktPmlzUmFuZ2UgfCBlbnRyeS0+aXNLZXlib2FyZCkgeworICAgIHVuc2lnbmVkIGludCBrZXlDb3VudCA9IHRhYmxlLT5wcmVzc2VkS2V5cy5jb3VudDsKKyAgICBLZXlWYWx1ZSBrZXlWYWx1ZXNba2V5Q291bnRdOworICAgIGNvcHlLZXlWYWx1ZXMoa2V5VmFsdWVzLCB0YWJsZS0+cHJlc3NlZEtleXMudGFibGUsIGtleUNvdW50KTsKKworICAgIHsKKyAgICAgIGludCBpbmRleDsKKworICAgICAgZm9yIChpbmRleD0wOyBpbmRleDxiaW5kaW5nLT5rZXlDb21iaW5hdGlvbi5tb2RpZmllckNvdW50OyBpbmRleCs9MSkgeworICAgICAgICBkZWxldGVFeHBsaWNpdEtleVZhbHVlKGtleVZhbHVlcywgJmtleUNvdW50LCAmYmluZGluZy0+a2V5Q29tYmluYXRpb24ubW9kaWZpZXJLZXlzW2luZGV4XSk7CisgICAgICB9CisgICAgfQorCisgICAgaWYgKGJpbmRpbmctPmtleUNvbWJpbmF0aW9uLmZsYWdzICYgS0NGX0lNTUVESUFURV9LRVkpIHsKKyAgICAgIGRlbGV0ZUV4cGxpY2l0S2V5VmFsdWUoa2V5VmFsdWVzLCAma2V5Q291bnQsICZiaW5kaW5nLT5rZXlDb21iaW5hdGlvbi5pbW1lZGlhdGVLZXkpOworICAgIH0KKworICAgIGlmIChrZXlDb3VudCA+IDApIHsKKyAgICAgIGlmIChrZXlDb3VudCA+IDEpIHsKKyAgICAgICAgcXNvcnQoa2V5VmFsdWVzLCBrZXlDb3VudCwgc2l6ZW9mKCprZXlWYWx1ZXMpLCBzb3J0S2V5T2Zmc2V0cyk7CisgICAgICAgIGlmIChlbnRyeS0+aXNSYW5nZSkgKmNvbW1hbmQgfD0gQlJMX0VYVF9QVVQoa2V5VmFsdWVzWzFdLm51bWJlcik7CisgICAgICB9CisKKyAgICAgICpjb21tYW5kICs9IGtleVZhbHVlc1swXS5udW1iZXI7CisgICAgfSBlbHNlIGlmIChlbnRyeS0+aXNDb2x1bW4pIHsKKyAgICAgIGlmICghZW50cnktPmlzUm91dGluZykgKmNvbW1hbmQgfD0gQlJMX01TS19BUkc7CisgICAgfQorICB9Cit9CisKK3N0YXRpYyBpbnQKK2lzSW5wdXRLZXkgKEJSTF9LZXkga2V5KSB7CisgIHN3aXRjaCAoa2V5KSB7CisgICAgY2FzZSBCUkxfS0VZX0JBQ0tTUEFDRToKKyAgICBjYXNlIEJSTF9LRVlfREVMRVRFOgorICAgIGNhc2UgQlJMX0tFWV9FU0NBUEU6CisgICAgY2FzZSBCUkxfS0VZX1RBQjoKKyAgICBjYXNlIEJSTF9LRVlfRU5URVI6CisgICAgICByZXR1cm4gMTsKKworICAgIGRlZmF1bHQ6CisgICAgICByZXR1cm4gMDsKKyAgfQorfQorCitzdGF0aWMgaW50Citwcm9jZXNzQ29tbWFuZCAoS2V5VGFibGUgKnRhYmxlLCBpbnQgY29tbWFuZCkgeworICBpbnQgaXNJbnB1dCA9IDA7CisKKyAgc3dpdGNoIChjb21tYW5kKSB7CisgICAgZGVmYXVsdDogeworICAgICAgaW50IGFyZyA9IGNvbW1hbmQgJiBCUkxfTVNLX0FSRzsKKworICAgICAgc3dpdGNoIChjb21tYW5kICYgQlJMX01TS19CTEspIHsKKyAgICAgICAgY2FzZSBCUkxfQ01EX0JMSyhDT05URVhUKTogeworICAgICAgICAgIHVuc2lnbmVkIGNoYXIgY29udGV4dCA9IEtUQl9DVFhfREVGQVVMVCArIGFyZzsKKyAgICAgICAgICBjb25zdCBLZXlDb250ZXh0ICpjdHggPSBnZXRLZXlDb250ZXh0KHRhYmxlLCBjb250ZXh0KTsKKworICAgICAgICAgIGlmIChjdHgpIHsKKyAgICAgICAgICAgIHRhYmxlLT5jb250ZXh0Lm5leHQgPSBjb250ZXh0OworCisgICAgICAgICAgICBpZiAoaXNUZW1wb3JhcnlLZXlDb250ZXh0KHRhYmxlLCBjdHgpKSB7CisgICAgICAgICAgICAgIGNvbW1hbmQgPSBCUkxfQ01EX0FMRVJUKENPTlRFWFRfVEVNUE9SQVJZKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgIHRhYmxlLT5jb250ZXh0LnBlcnNpc3RlbnQgPSBjb250ZXh0OworICAgICAgICAgICAgICBjb21tYW5kID0KKyAgICAgICAgICAgICAgICAoY29udGV4dCA9PSBLVEJfQ1RYX0RFRkFVTFQpPworICAgICAgICAgICAgICAgIEJSTF9DTURfQUxFUlQoQ09OVEVYVF9ERUZBVUxUKToKKyAgICAgICAgICAgICAgICBCUkxfQ01EX0FMRVJUKENPTlRFWFRfUEVSU0lTVEVOVCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChwcmVmcy5zcGVha0tleUNvbnRleHQpIHsKKyAgICAgICAgICAgICAgaWYgKGN0eC0+dGl0bGUpIHsKKyAgICAgICAgICAgICAgICBzcGVha0FsZXJ0VGV4dChjdHgtPnRpdGxlKTsKKyAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBjb25zdCB3Y2hhcl90ICpuYW1lID0gY3R4LT5uYW1lOworICAgICAgICAgICAgICAgIGNvbnN0IHdjaGFyX3QgKmZyb20gPSBuYW1lOworCisgICAgICAgICAgICAgICAgd2NoYXJfdCB0ZXh0Wyh3Y3NsZW4obmFtZSkgKiAyKSArIDFdOworICAgICAgICAgICAgICAgIHdjaGFyX3QgKnRvID0gdGV4dDsKKworICAgICAgICAgICAgICAgIHdoaWxlICgqZnJvbSkgeworICAgICAgICAgICAgICAgICAgd2NoYXJfdCBjaGFyYWN0ZXIgPSAqZnJvbSsrOworCisgICAgICAgICAgICAgICAgICBpZiAoaXN3dXBwZXIoY2hhcmFjdGVyKSkgeworICAgICAgICAgICAgICAgICAgICBpZiAodG8gIT0gdGV4dCkgeworICAgICAgICAgICAgICAgICAgICAgICp0bysrID0gV0NfQygnICcpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICp0bysrID0gY2hhcmFjdGVyOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICp0byA9IDA7CisgICAgICAgICAgICAgICAgc3BlYWtBbGVydFRleHQodGV4dCk7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSBpZiAoIWVucXVldWVDb21tYW5kKGNvbW1hbmQpKSB7CisgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBjb21tYW5kID0gQlJMX0NNRF9OT09QOworICAgICAgICAgIH0KKworICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgY2FzZSBCUkxfQ01EX0JMSyhNQUNSTyk6IHsKKyAgICAgICAgICBpZiAoYXJnIDwgdGFibGUtPmNvbW1hbmRNYWNyb3MuY291bnQpIHsKKyAgICAgICAgICAgIGNvbnN0IENvbW1hbmRNYWNybyAqbWFjcm8gPSAmdGFibGUtPmNvbW1hbmRNYWNyb3MudGFibGVbYXJnXTsKKyAgICAgICAgICAgIGNvbnN0IEJvdW5kQ29tbWFuZCAqY21kID0gbWFjcm8tPmNvbW1hbmRzOworICAgICAgICAgICAgY29uc3QgQm91bmRDb21tYW5kICplbmQgPSBjbWQgKyBtYWNyby0+Y291bnQ7CisKKyAgICAgICAgICAgIHdoaWxlIChjbWQgPCBlbmQpIHsKKyAgICAgICAgICAgICAgaWYgKCFwcm9jZXNzQ29tbWFuZCh0YWJsZSwgKGNtZCsrKS0+dmFsdWUpKSByZXR1cm4gMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9CisKKyAgICAgICAgICBjb21tYW5kID0gQlJMX0NNRF9OT09QOworICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgY2FzZSBCUkxfQ01EX0JMSyhIT1NUQ01EKTogeworICAgICAgICAgIGlmIChhcmcgPCB0YWJsZS0+aG9zdENvbW1hbmRzLmNvdW50KSB7CisgICAgICAgICAgICBjb25zdCBIb3N0Q29tbWFuZCAqaGMgPSAmdGFibGUtPmhvc3RDb21tYW5kcy50YWJsZVthcmddOworCisgICAgICAgICAgICBIb3N0Q29tbWFuZE9wdGlvbnMgb3B0aW9uczsKKyAgICAgICAgICAgIGluaXRpYWxpemVIb3N0Q29tbWFuZE9wdGlvbnMoJm9wdGlvbnMpOworICAgICAgICAgICAgb3B0aW9ucy5hc3luY2hyb25vdXMgPSAxOworCisgICAgICAgICAgICBydW5Ib3N0Q29tbWFuZCgoY29uc3QgY2hhciAqY29uc3QgKiloYy0+YXJndW1lbnRzLCAmb3B0aW9ucyk7CisgICAgICAgICAgfQorCisgICAgICAgICAgY29tbWFuZCA9IEJSTF9DTURfTk9PUDsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGNhc2UgQlJMX0NNRF9CTEsoUEFTU0RPVFMpOgorICAgICAgICAgIHN3aXRjaCAocHJlZnMuYnJhaWxsZVR5cGluZ01vZGUpIHsKKyAgICAgICAgICAgIGNhc2UgQlJMX1RZUElOR19ET1RTOiB7CisgICAgICAgICAgICAgIHdjaGFyX3QgY2hhcmFjdGVyID0gVU5JQ09ERV9CUkFJTExFX1JPVyB8IGFyZzsKKyAgICAgICAgICAgICAgaW50IGZsYWdzID0gY29tbWFuZCAmIEJSTF9NU0tfRkxHOworICAgICAgICAgICAgICBjb21tYW5kID0gQlJMX0NNRF9CTEsoUEFTU0NIQVIpIHwgQlJMX0FSR19TRVQoY2hhcmFjdGVyKSB8IGZsYWdzOworICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9CisKKyAgICAgICAgICBpc0lucHV0ID0gMTsKKyAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIEJSTF9DTURfQkxLKFBBU1NDSEFSKToKKyAgICAgICAgICBpc0lucHV0ID0gMTsKKyAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIEJSTF9DTURfQkxLKFBBU1NLRVkpOgorICAgICAgICAgIGlmIChpc0lucHV0S2V5KGFyZykpIGlzSW5wdXQgPSAxOworICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgYnJlYWs7CisgICAgICB9CisKKyAgICAgIGJyZWFrOworICAgIH0KKyAgfQorCisgIGlmIChpc0lucHV0KSB7CisgICAgaWYgKHRhYmxlLT5vcHRpb25zLmtleWJvYXJkRW5hYmxlZEZsYWcgJiYgISp0YWJsZS0+b3B0aW9ucy5rZXlib2FyZEVuYWJsZWRGbGFnKSB7CisgICAgICBjb21tYW5kID0gQlJMX0NNRF9BTEVSVChDT01NQU5EX1JFSkVDVEVEKTsKKyAgICB9CisgIH0KKworICByZXR1cm4gZW5xdWV1ZUNvbW1hbmQoY29tbWFuZCk7Cit9CisKK3N0YXRpYyB2b2lkCitsb2dLZXlFdmVudCAoCisgIEtleVRhYmxlICp0YWJsZSwgY29uc3QgY2hhciAqYWN0aW9uLAorICB1bnNpZ25lZCBjaGFyIGNvbnRleHQsIGNvbnN0IEtleVZhbHVlICprZXlWYWx1ZSwgaW50IGNvbW1hbmQKKykgeworICBpZiAodGFibGUtPm9wdGlvbnMubG9nS2V5RXZlbnRzRmxhZyAmJiAqdGFibGUtPm9wdGlvbnMubG9nS2V5RXZlbnRzRmxhZykgeworICAgIGNoYXIgYnVmZmVyWzBYMTAwXTsKKworICAgIFNUUl9CRUdJTihidWZmZXIsIHNpemVvZihidWZmZXIpKTsKKyAgICBpZiAodGFibGUtPm9wdGlvbnMubG9nTGFiZWwpIFNUUl9QUklOVEYoIiVzICIsIHRhYmxlLT5vcHRpb25zLmxvZ0xhYmVsKTsKKyAgICBTVFJfUFJJTlRGKCJrZXkgJXM6ICIsIGFjdGlvbik7CisgICAgU1RSX0ZPUk1BVChmb3JtYXRLZXlOYW1lLCB0YWJsZSwga2V5VmFsdWUpOworICAgIFNUUl9QUklOVEYoIiAoQ3R4OiV1IEdycDoldSBOdW06JXUpIiwgY29udGV4dCwga2V5VmFsdWUtPmdyb3VwLCBrZXlWYWx1ZS0+bnVtYmVyKTsKKworICAgIGlmIChjb21tYW5kICE9IEVPRikgeworICAgICAgY29uc3QgQ29tbWFuZEVudHJ5ICpjbWQgPSBmaW5kQ29tbWFuZEVudHJ5KGNvbW1hbmQpOworICAgICAgY29uc3QgY2hhciAqbmFtZSA9IGNtZD8gY21kLT5uYW1lOiAiPyI7CisKKyAgICAgIFNUUl9QUklOVEYoIiAtPiAlcyAoQ21kOiUwNlgpIiwgbmFtZSwgY29tbWFuZCk7CisgICAgfQorCisgICAgU1RSX0VORDsKKyAgICBsb2dNZXNzYWdlKGNhdGVnb3J5TG9nTGV2ZWwsICIlcyIsIGJ1ZmZlcik7CisgIH0KK30KKworc3RhdGljIHZvaWQgc2V0TG9uZ1ByZXNzQWxhcm0gKEtleVRhYmxlICp0YWJsZSwgdW5zaWduZWQgY2hhciB3aGVuKTsKKworQVNZTkNfQUxBUk1fQ0FMTEJBQ0soaGFuZGxlTG9uZ1ByZXNzQWxhcm0pIHsKKyAgS2V5VGFibGUgKnRhYmxlID0gcGFyYW1ldGVycy0+ZGF0YTsKKyAgaW50IGNvbW1hbmQgPSB0YWJsZS0+bG9uZ1ByZXNzLmNvbW1hbmQ7CisKKyAgYXN5bmNEaXNjYXJkSGFuZGxlKHRhYmxlLT5sb25nUHJlc3MuYWxhcm0pOworICB0YWJsZS0+bG9uZ1ByZXNzLmFsYXJtID0gTlVMTDsKKworICBsb2dLZXlFdmVudCh0YWJsZSwgdGFibGUtPmxvbmdQcmVzcy5rZXlBY3Rpb24sCisgICAgICAgICAgICAgIHRhYmxlLT5sb25nUHJlc3Mua2V5Q29udGV4dCwKKyAgICAgICAgICAgICAgJnRhYmxlLT5sb25nUHJlc3Mua2V5VmFsdWUsCisgICAgICAgICAgICAgIGNvbW1hbmQpOworCisgIGlmICh0YWJsZS0+bG9uZ1ByZXNzLnJlcGVhdCkgeworICAgIHRhYmxlLT5sb25nUHJlc3Mua2V5QWN0aW9uID0gInJlcGVhdCI7CisgICAgc2V0TG9uZ1ByZXNzQWxhcm0odGFibGUsIHByZWZzLmF1dG9yZXBlYXRJbnRlcnZhbCk7CisgIH0KKworICB0YWJsZS0+cmVsZWFzZS5jb21tYW5kID0gQlJMX0NNRF9OT09QOworICBwcm9jZXNzQ29tbWFuZCh0YWJsZSwgY29tbWFuZCk7Cit9CisKK3N0YXRpYyB2b2lkCitzZXRMb25nUHJlc3NBbGFybSAoS2V5VGFibGUgKnRhYmxlLCB1bnNpZ25lZCBjaGFyIHdoZW4pIHsKKyAgYXN5bmNOZXdSZWxhdGl2ZUFsYXJtKCZ0YWJsZS0+bG9uZ1ByZXNzLmFsYXJtLCBQUkVGUzJNU0VDUyh3aGVuKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZUxvbmdQcmVzc0FsYXJtLCB0YWJsZSk7Cit9CisKK3N0YXRpYyBpbnQKK2lzUmVwZWF0YWJsZUNvbW1hbmQgKGludCBjb21tYW5kKSB7CisgIGlmIChwcmVmcy5hdXRvcmVwZWF0RW5hYmxlZCkgeworICAgIHN3aXRjaCAoY29tbWFuZCAmIEJSTF9NU0tfQkxLKSB7CisgICAgICBjYXNlIEJSTF9DTURfQkxLKFBBU1NDSEFSKToKKyAgICAgIGNhc2UgQlJMX0NNRF9CTEsoUEFTU0RPVFMpOgorICAgICAgICByZXR1cm4gMTsKKworICAgICAgZGVmYXVsdDoKKyAgICAgICAgc3dpdGNoIChjb21tYW5kICYgQlJMX01TS19DTUQpIHsKKyAgICAgICAgICBjYXNlIEJSTF9DTURfTE5VUDoKKyAgICAgICAgICBjYXNlIEJSTF9DTURfTE5ETjoKKyAgICAgICAgICBjYXNlIEJSTF9DTURfUFJESUZMTjoKKyAgICAgICAgICBjYXNlIEJSTF9DTURfTlhESUZMTjoKKyAgICAgICAgICBjYXNlIEJSTF9DTURfQ0hSTFQ6CisgICAgICAgICAgY2FzZSBCUkxfQ01EX0NIUlJUOgorCisgICAgICAgICAgY2FzZSBCUkxfQ01EX01FTlVfUFJFVl9JVEVNOgorICAgICAgICAgIGNhc2UgQlJMX0NNRF9NRU5VX05FWFRfSVRFTToKKyAgICAgICAgICBjYXNlIEJSTF9DTURfTUVOVV9QUkVWX1NFVFRJTkc6CisgICAgICAgICAgY2FzZSBCUkxfQ01EX01FTlVfTkVYVF9TRVRUSU5HOgorCisgICAgICAgICAgY2FzZSBCUkxfQ01EX0tFWShCQUNLU1BBQ0UpOgorICAgICAgICAgIGNhc2UgQlJMX0NNRF9LRVkoREVMRVRFKToKKyAgICAgICAgICBjYXNlIEJSTF9DTURfS0VZKFBBR0VfVVApOgorICAgICAgICAgIGNhc2UgQlJMX0NNRF9LRVkoUEFHRV9ET1dOKToKKyAgICAgICAgICBjYXNlIEJSTF9DTURfS0VZKENVUlNPUl9VUCk6CisgICAgICAgICAgY2FzZSBCUkxfQ01EX0tFWShDVVJTT1JfRE9XTik6CisgICAgICAgICAgY2FzZSBCUkxfQ01EX0tFWShDVVJTT1JfTEVGVCk6CisgICAgICAgICAgY2FzZSBCUkxfQ01EX0tFWShDVVJTT1JfUklHSFQpOgorCisgICAgICAgICAgY2FzZSBCUkxfQ01EX1NQRUFLX1BSRVZfQ0hBUjoKKyAgICAgICAgICBjYXNlIEJSTF9DTURfU1BFQUtfTkVYVF9DSEFSOgorICAgICAgICAgIGNhc2UgQlJMX0NNRF9TUEVBS19QUkVWX1dPUkQ6CisgICAgICAgICAgY2FzZSBCUkxfQ01EX1NQRUFLX05FWFRfV09SRDoKKyAgICAgICAgICBjYXNlIEJSTF9DTURfU1BFQUtfUFJFVl9MSU5FOgorICAgICAgICAgIGNhc2UgQlJMX0NNRF9TUEVBS19ORVhUX0xJTkU6CisgICAgICAgICAgICByZXR1cm4gMTsKKworICAgICAgICAgIGNhc2UgQlJMX0NNRF9GV0lOTFQ6CisgICAgICAgICAgY2FzZSBCUkxfQ01EX0ZXSU5SVDoKKyAgICAgICAgICAgIGlmIChwcmVmcy5hdXRvcmVwZWF0UGFubmluZykgcmV0dXJuIDE7CisKKyAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgfQorICB9CisKKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK2dldFByZXNzZWRLZXlzQ29tbWFuZCAoCisgIEtleVRhYmxlICp0YWJsZSwgdW5zaWduZWQgY2hhciBjb250ZXh0LAorICBjb25zdCBLZXlWYWx1ZSAqa2V5LCB1bnNpZ25lZCBpbnQgcG9zaXRpb24sCisgIGNvbnN0IEtleUJpbmRpbmcgKipiaW5kaW5nLCBpbnQgKndhc0luc2VydGVkLAorICBpbnQgKmlzSW5jb21wbGV0ZSwgaW50ICppc0ltbWVkaWF0ZQorKSB7CisgICpiaW5kaW5nID0gZmluZEtleUJpbmRpbmcodGFibGUsIGNvbnRleHQsIGtleSwgaXNJbmNvbXBsZXRlKTsKKyAgKndhc0luc2VydGVkID0gaW5zZXJ0UHJlc3NlZEtleSh0YWJsZSwga2V5LCBwb3NpdGlvbik7CisKKyAgaWYgKCpiaW5kaW5nKSB7CisgICAgKmlzSW1tZWRpYXRlID0gMTsKKyAgICByZXR1cm4gKCpiaW5kaW5nKS0+cHJpbWFyeUNvbW1hbmQudmFsdWU7CisgIH0KKworICBpZiAoKCpiaW5kaW5nID0gZmluZEtleUJpbmRpbmcodGFibGUsIGNvbnRleHQsIE5VTEwsIGlzSW5jb21wbGV0ZSkpKSB7CisgICAgKmlzSW1tZWRpYXRlID0gMDsKKyAgICByZXR1cm4gKCpiaW5kaW5nKS0+cHJpbWFyeUNvbW1hbmQudmFsdWU7CisgIH0KKworICByZXR1cm4gRU9GOworfQorCitLZXlUYWJsZVN0YXRlCitwcm9jZXNzS2V5RXZlbnQgKAorICBLZXlUYWJsZSAqdGFibGUsIHVuc2lnbmVkIGNoYXIgY29udGV4dCwKKyAgS2V5R3JvdXAga2V5R3JvdXAsIEtleU51bWJlciBrZXlOdW1iZXIsIGludCBwcmVzcworKSB7CisgIGNvbnN0IEtleVZhbHVlIGtleVZhbHVlID0geworICAgIC5ncm91cCA9IGtleUdyb3VwLAorICAgIC5udW1iZXIgPSBrZXlOdW1iZXIKKyAgfTsKKworICBLZXlUYWJsZVN0YXRlIHN0YXRlID0gS1RTX1VOQk9VTkQ7CisgIGludCBjb21tYW5kID0gRU9GOworICBjb25zdCBIb3RrZXlFbnRyeSAqaG90a2V5OworCisgIGlmIChwcmVzcyAmJiAhdGFibGUtPnByZXNzZWRLZXlzLmNvdW50KSB7CisgICAgdGFibGUtPmNvbnRleHQuY3VycmVudCA9IHRhYmxlLT5jb250ZXh0Lm5leHQ7CisgICAgdGFibGUtPmNvbnRleHQubmV4dCA9IHRhYmxlLT5jb250ZXh0LnBlcnNpc3RlbnQ7CisgIH0KKyAgaWYgKGNvbnRleHQgPT0gS1RCX0NUWF9ERUZBVUxUKSBjb250ZXh0ID0gdGFibGUtPmNvbnRleHQuY3VycmVudDsKKworICBpZiAoIShob3RrZXkgPSBmaW5kSG90a2V5RW50cnkodGFibGUsIGNvbnRleHQsICZrZXlWYWx1ZSkpKSB7CisgICAgY29uc3QgS2V5VmFsdWUgYW55S2V5ID0geworICAgICAgLmdyb3VwID0ga2V5VmFsdWUuZ3JvdXAsCisgICAgICAubnVtYmVyID0gS1RCX0tFWV9BTlkKKyAgICB9OworCisgICAgaG90a2V5ID0gZmluZEhvdGtleUVudHJ5KHRhYmxlLCBjb250ZXh0LCAmYW55S2V5KTsKKyAgfQorCisgIGlmIChob3RrZXkpIHsKKyAgICBjb25zdCBCb3VuZENvbW1hbmQgKmNtZCA9IHByZXNzPyAmaG90a2V5LT5wcmVzc0NvbW1hbmQ6ICZob3RrZXktPnJlbGVhc2VDb21tYW5kOworCisgICAgaWYgKGNtZC0+dmFsdWUgIT0gQlJMX0NNRF9OT09QKSBwcm9jZXNzQ29tbWFuZCh0YWJsZSwgKGNvbW1hbmQgPSBjbWQtPnZhbHVlKSk7CisgICAgc3RhdGUgPSBLVFNfSE9US0VZOworICB9IGVsc2UgeworICAgIGludCBpc0ltbWVkaWF0ZSA9IDE7CisgICAgdW5zaWduZWQgaW50IGtleVBvc2l0aW9uOworICAgIGludCB3YXNQcmVzc2VkID0gZmluZFByZXNzZWRLZXkodGFibGUsICZrZXlWYWx1ZSwgJmtleVBvc2l0aW9uKTsKKyAgICBpZiAod2FzUHJlc3NlZCkgcmVtb3ZlUHJlc3NlZEtleSh0YWJsZSwga2V5UG9zaXRpb24pOworCisgICAgaWYgKHByZXNzKSB7CisgICAgICBjb25zdCBLZXlCaW5kaW5nICpiaW5kaW5nOworICAgICAgaW50IGlzSW5jb21wbGV0ZSA9IDA7CisgICAgICBpbnQgd2FzSW5zZXJ0ZWQ7CisKKyAgICAgIGludCBjb21tYW5kID0gZ2V0UHJlc3NlZEtleXNDb21tYW5kKAorICAgICAgICB0YWJsZSwgY29udGV4dCwKKyAgICAgICAgJmtleVZhbHVlLCBrZXlQb3NpdGlvbiwKKyAgICAgICAgJmJpbmRpbmcsICZ3YXNJbnNlcnRlZCwKKyAgICAgICAgJmlzSW5jb21wbGV0ZSwgJmlzSW1tZWRpYXRlCisgICAgICApOworCisgICAgICBpZiAoY29tbWFuZCA9PSBFT0YpIHsKKyAgICAgICAgaWYgKChjb21tYW5kID0gbWFrZUtleWJvYXJkQ29tbWFuZCh0YWJsZSwgY29udGV4dCwgMCkpICE9IEVPRikgeworICAgICAgICAgIGlzSW1tZWRpYXRlID0gMDsKKyAgICAgICAgfSAgICAgICA7CisgICAgICB9CisKKyAgICAgIGlmIChjb21tYW5kID09IEVPRikgeworICAgICAgICBpbnQgdHJ5RGVmYXVsdENvbnRleHQgPSB3YXNJbnNlcnRlZCAmJiAoY29udGV4dCAhPSBLVEJfQ1RYX0RFRkFVTFQpOworCisgICAgICAgIGlmICh0cnlEZWZhdWx0Q29udGV4dCkgeworICAgICAgICAgIGNvbnN0IEtleUNvbnRleHQgKmN0eCA9IGdldEtleUNvbnRleHQodGFibGUsIGNvbnRleHQpOworCisgICAgICAgICAgaWYgKGN0eCAmJiBjdHgtPmlzSXNvbGF0ZWQpIHsKKyAgICAgICAgICAgIHRyeURlZmF1bHRDb250ZXh0ID0gMDsKKyAgICAgICAgICAgIGNvbW1hbmQgPSBCUkxfQ01EX05PT1A7CisgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYgKHRyeURlZmF1bHRDb250ZXh0KSB7CisgICAgICAgICAgcmVtb3ZlUHJlc3NlZEtleSh0YWJsZSwga2V5UG9zaXRpb24pOworCisgICAgICAgICAgY29tbWFuZCA9IGdldFByZXNzZWRLZXlzQ29tbWFuZCgKKyAgICAgICAgICAgIHRhYmxlLCBLVEJfQ1RYX0RFRkFVTFQsCisgICAgICAgICAgICAma2V5VmFsdWUsIGtleVBvc2l0aW9uLAorICAgICAgICAgICAgJmJpbmRpbmcsICZ3YXNJbnNlcnRlZCwKKyAgICAgICAgICAgICZpc0luY29tcGxldGUsICZpc0ltbWVkaWF0ZQorICAgICAgICAgICk7CisKKyAgICAgICAgICBpZiAoY29tbWFuZCAhPSBFT0YpIHsKKyAgICAgICAgICAgIHN3aXRjaCAoY29tbWFuZCAmIEJSTF9NU0tfQkxLKSB7CisgICAgICAgICAgICAgIGNhc2UgQlJMX0NNRF9CTEsoUEFTU0RPVFMpOiB7CisgICAgICAgICAgICAgICAgY29tbWFuZCA9IEJSTF9DTURfQUxFUlQoQ09NTUFORF9SRUpFQ1RFRCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgIH0KKworICAgICAgaWYgKHByZWZzLmJyYWlsbGVRdWlja1NwYWNlKSB7CisgICAgICAgIGludCBjbWQgPSBtYWtlS2V5Ym9hcmRDb21tYW5kKHRhYmxlLCBjb250ZXh0LCAxKTsKKworICAgICAgICBpZiAoY21kICE9IEVPRikgeworICAgICAgICAgIGNvbW1hbmQgPSBjbWQ7CisgICAgICAgICAgaXNJbW1lZGlhdGUgPSAwOworICAgICAgICB9CisgICAgICB9CisKKyAgICAgIGlmIChjb21tYW5kID09IEVPRikgeworICAgICAgICBjb21tYW5kID0gQlJMX0NNRF9OT09QOworICAgICAgICBpZiAoaXNJbmNvbXBsZXRlKSBzdGF0ZSA9IEtUU19NT0RJRklFUlM7CisgICAgICB9IGVsc2UgeworICAgICAgICBzdGF0ZSA9IEtUU19DT01NQU5EOworICAgICAgfQorCisgICAgICBpZiAoIXdhc1ByZXNzZWQpIHsKKyAgICAgICAgaW50IHNlY29uZGFyeUNvbW1hbmQgPSBCUkxfQ01EX05PT1A7CisKKyAgICAgICAgcmVzZXRMb25nUHJlc3NEYXRhKHRhYmxlKTsKKyAgICAgICAgdGFibGUtPnJlbGVhc2UuY29tbWFuZCA9IEJSTF9DTURfTk9PUDsKKworICAgICAgICBpZiAoYmluZGluZykgeworICAgICAgICAgIGFkZENvbW1hbmRBcmd1bWVudHModGFibGUsICZjb21tYW5kLCBiaW5kaW5nLT5wcmltYXJ5Q29tbWFuZC5lbnRyeSwgYmluZGluZyk7CisKKyAgICAgICAgICBzZWNvbmRhcnlDb21tYW5kID0gYmluZGluZy0+c2Vjb25kYXJ5Q29tbWFuZC52YWx1ZTsKKyAgICAgICAgICBhZGRDb21tYW5kQXJndW1lbnRzKHRhYmxlLCAmc2Vjb25kYXJ5Q29tbWFuZCwgYmluZGluZy0+c2Vjb25kYXJ5Q29tbWFuZC5lbnRyeSwgYmluZGluZyk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoY29udGV4dCA9PSBLVEJfQ1RYX1dBSVRJTkcpIHsKKyAgICAgICAgICB0YWJsZS0+cmVsZWFzZS5jb21tYW5kID0gQlJMX0NNRF9OT09QOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgIGlmIChzZWNvbmRhcnlDb21tYW5kID09IEJSTF9DTURfTk9PUCkgeworICAgICAgICAgICAgaWYgKGlzUmVwZWF0YWJsZUNvbW1hbmQoY29tbWFuZCkpIHsKKyAgICAgICAgICAgICAgc2Vjb25kYXJ5Q29tbWFuZCA9IGNvbW1hbmQ7CisgICAgICAgICAgICB9CisgICAgICAgICAgfQorCisgICAgICAgICAgaWYgKGlzSW1tZWRpYXRlKSB7CisgICAgICAgICAgICB0YWJsZS0+cmVsZWFzZS5jb21tYW5kID0gQlJMX0NNRF9OT09QOworICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICB0YWJsZS0+cmVsZWFzZS5jb21tYW5kID0gY29tbWFuZDsKKyAgICAgICAgICAgIGNvbW1hbmQgPSBCUkxfQ01EX05PT1A7CisgICAgICAgICAgfQorCisgICAgICAgICAgaWYgKHNlY29uZGFyeUNvbW1hbmQgIT0gQlJMX0NNRF9OT09QKSB7CisgICAgICAgICAgICB0YWJsZS0+bG9uZ1ByZXNzLmNvbW1hbmQgPSBzZWNvbmRhcnlDb21tYW5kOworICAgICAgICAgICAgdGFibGUtPmxvbmdQcmVzcy5yZXBlYXQgPSBpc1JlcGVhdGFibGVDb21tYW5kKHNlY29uZGFyeUNvbW1hbmQpOworCisgICAgICAgICAgICB0YWJsZS0+bG9uZ1ByZXNzLmtleUFjdGlvbiA9ICJsb25nIjsKKyAgICAgICAgICAgIHRhYmxlLT5sb25nUHJlc3Mua2V5Q29udGV4dCA9IGNvbnRleHQ7CisgICAgICAgICAgICB0YWJsZS0+bG9uZ1ByZXNzLmtleVZhbHVlID0ga2V5VmFsdWU7CisKKyAgICAgICAgICAgIHNldExvbmdQcmVzc0FsYXJtKHRhYmxlLCBwcmVmcy5sb25nUHJlc3NUaW1lKTsKKyAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBwcm9jZXNzQ29tbWFuZCh0YWJsZSwgY29tbWFuZCk7CisgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgIHJlc2V0TG9uZ1ByZXNzRGF0YSh0YWJsZSk7CisKKyAgICAgIGlmIChwcmVmcy5vbkZpcnN0UmVsZWFzZSB8fCAodGFibGUtPnByZXNzZWRLZXlzLmNvdW50ID09IDApKSB7CisgICAgICAgIGludCAqY21kID0gJnRhYmxlLT5yZWxlYXNlLmNvbW1hbmQ7CisKKyAgICAgICAgaWYgKCpjbWQgIT0gQlJMX0NNRF9OT09QKSB7CisgICAgICAgICAgcHJvY2Vzc0NvbW1hbmQodGFibGUsIChjb21tYW5kID0gKmNtZCkpOworICAgICAgICAgICpjbWQgPSBCUkxfQ01EX05PT1A7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9CisKKyAgICBzZXRBdXRvcmVsZWFzZUFsYXJtKHRhYmxlKTsKKyAgfQorCisgIGxvZ0tleUV2ZW50KHRhYmxlLCAocHJlc3M/ICJwcmVzcyI6ICJyZWxlYXNlIiksIGNvbnRleHQsICZrZXlWYWx1ZSwgY29tbWFuZCk7CisgIHJldHVybiBzdGF0ZTsKK30KKwordm9pZAorcmVsZWFzZUFsbEtleXMgKEtleVRhYmxlICp0YWJsZSkgeworICB3aGlsZSAodGFibGUtPnByZXNzZWRLZXlzLmNvdW50KSB7CisgICAgY29uc3QgS2V5VmFsdWUgKmt2ID0gJnRhYmxlLT5wcmVzc2VkS2V5cy50YWJsZVswXTsKKyAgICBwcm9jZXNzS2V5RXZlbnQodGFibGUsIEtUQl9DVFhfREVGQVVMVCwga3YtPmdyb3VwLCBrdi0+bnVtYmVyLCAwKTsKKyAgfQorfQorCit2b2lkCitzZXRLZXlUYWJsZUxvZ0xhYmVsIChLZXlUYWJsZSAqdGFibGUsIGNvbnN0IGNoYXIgKmxhYmVsKSB7CisgIHRhYmxlLT5vcHRpb25zLmxvZ0xhYmVsID0gbGFiZWw7Cit9CisKK3ZvaWQKK3NldExvZ0tleUV2ZW50c0ZsYWcgKEtleVRhYmxlICp0YWJsZSwgY29uc3QgdW5zaWduZWQgY2hhciAqZmxhZykgeworICB0YWJsZS0+b3B0aW9ucy5sb2dLZXlFdmVudHNGbGFnID0gZmxhZzsKK30KKwordm9pZAorc2V0S2V5Ym9hcmRFbmFibGVkRmxhZyAoS2V5VGFibGUgKnRhYmxlLCBjb25zdCB1bnNpZ25lZCBjaGFyICpmbGFnKSB7CisgIHRhYmxlLT5vcHRpb25zLmtleWJvYXJkRW5hYmxlZEZsYWcgPSBmbGFnOworfQorCit2b2lkCitnZXRLZXlHcm91cENvbW1hbmRzIChLZXlUYWJsZSAqdGFibGUsIEtleUdyb3VwIGdyb3VwLCBpbnQgKmNvbW1hbmRzLCB1bnNpZ25lZCBpbnQgc2l6ZSkgeworICBjb25zdCBLZXlDb250ZXh0ICpjdHggPSBnZXRLZXlDb250ZXh0KHRhYmxlLCBLVEJfQ1RYX0RFRkFVTFQpOworCisgIGlmIChjdHgpIHsKKyAgICB1bnNpZ25lZCBpbnQgaTsKKworICAgIGZvciAoaT0wOyBpPHNpemU7IGkrPTEpIHsKKyAgICAgIGNvbW1hbmRzW2ldID0gQlJMX0NNRF9OT09QOworICAgIH0KKworICAgIGZvciAoaT0wOyBpPGN0eC0+a2V5QmluZGluZ3MuY291bnQ7IGkrPTEpIHsKKyAgICAgIGNvbnN0IEtleUJpbmRpbmcgKmJpbmRpbmcgPSAmY3R4LT5rZXlCaW5kaW5ncy50YWJsZVtpXTsKKyAgICAgIGNvbnN0IEtleUNvbWJpbmF0aW9uICpjb21iaW5hdGlvbiA9ICZiaW5kaW5nLT5rZXlDb21iaW5hdGlvbjsKKyAgICAgIGNvbnN0IEtleVZhbHVlICprZXk7CisKKyAgICAgIGlmIChjb21iaW5hdGlvbi0+ZmxhZ3MgJiBLQ0ZfSU1NRURJQVRFX0tFWSkgeworICAgICAgICBpZiAoY29tYmluYXRpb24tPm1vZGlmaWVyQ291bnQgIT0gMCkgY29udGludWU7CisgICAgICAgIGtleSA9ICZjb21iaW5hdGlvbi0+aW1tZWRpYXRlS2V5OworICAgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKGNvbWJpbmF0aW9uLT5tb2RpZmllckNvdW50ICE9IDEpIGNvbnRpbnVlOworICAgICAgICBrZXkgPSAmY29tYmluYXRpb24tPm1vZGlmaWVyS2V5c1swXTsKKyAgICAgIH0KKworICAgICAgaWYgKGtleS0+Z3JvdXAgPT0gZ3JvdXApIHsKKyAgICAgICAgaWYgKGtleS0+bnVtYmVyICE9IEtUQl9LRVlfQU5ZKSB7CisgICAgICAgICAgaWYgKGtleS0+bnVtYmVyIDwgc2l6ZSkgeworICAgICAgICAgICAgaW50IGNvbW1hbmQgPSBiaW5kaW5nLT5wcmltYXJ5Q29tbWFuZC52YWx1ZTsKKworICAgICAgICAgICAgaWYgKGNvbW1hbmQgIT0gQlJMX0NNRF9OT09QKSB7CisgICAgICAgICAgICAgIGNvbW1hbmRzW2tleS0+bnVtYmVyXSA9IGNvbW1hbmQ7CisgICAgICAgICAgICB9CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICB9CisgICAgfQorICB9Cit9CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgaW50ICphcnJheTsKKyAgdW5zaWduZWQgaW50IHNpemU7CisgIHVuc2lnbmVkIGludCBjb3VudDsKK30gQWRkQ29tbWFuZERhdGE7CisKK3N0YXRpYyBpbnQKK2FkZENvbW1hbmQgKEFkZENvbW1hbmREYXRhICphY2QsIGludCBjb21tYW5kKSB7CisgIGlmIChjb21tYW5kID09IEVPRikgcmV0dXJuIDE7CisgIGludCBibGsgPSBjb21tYW5kICYgQlJMX01TS19CTEs7CisgIGNvbW1hbmQgJj0gYmxrPyBCUkxfTVNLX0JMSzogQlJMX01TS19DTUQ7CisgIGlmIChjb21tYW5kID09IEJSTF9DTURfTk9PUCkgcmV0dXJuIDE7CisKKyAgaWYgKGFjZC0+Y291bnQgPT0gYWNkLT5zaXplKSB7CisgICAgdW5zaWduZWQgaW50IG5ld1NpemUgPSBhY2QtPnNpemU/IChhY2QtPnNpemUgPDwgMSk6IDBYMTAwOworICAgIGludCAqbmV3QXJyYXkgPSByZWFsbG9jKGFjZC0+YXJyYXksIEFSUkFZX1NJWkUobmV3QXJyYXksIG5ld1NpemUpKTsKKworICAgIGlmICghbmV3QXJyYXkpIHsKKyAgICAgIGxvZ01hbGxvY0Vycm9yKCk7CisgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBhY2QtPmFycmF5ID0gbmV3QXJyYXk7CisgICAgYWNkLT5zaXplID0gbmV3U2l6ZTsKKyAgfQorCisgIGFjZC0+YXJyYXlbYWNkLT5jb3VudCsrXSA9IGNvbW1hbmQ7CisgIHJldHVybiAxOworfQorCitzdGF0aWMgaW50CithZGRCb3VuZENvbW1hbmQgKEFkZENvbW1hbmREYXRhICphY2QsIGNvbnN0IEJvdW5kQ29tbWFuZCAqY21kKSB7CisgIHJldHVybiBhZGRDb21tYW5kKGFjZCwgY21kLT52YWx1ZSk7Cit9CisKK3N0YXRpYyBpbnQKK3NvcnRDb21tYW5kcyAoY29uc3Qgdm9pZCAqZWxlbWVudDEsIGNvbnN0IHZvaWQgKmVsZW1lbnQyKSB7CisgIGNvbnN0IGludCAqY29tbWFuZDEgPSBlbGVtZW50MTsKKyAgY29uc3QgaW50ICpjb21tYW5kMiA9IGVsZW1lbnQyOworCisgIGlmICgqY29tbWFuZDEgPCAqY29tbWFuZDIpIHJldHVybiAtMTsKKyAgaWYgKCpjb21tYW5kMSA+ICpjb21tYW5kMikgcmV0dXJuIDE7CisgIHJldHVybiAwOworfQorCitpbnQgKgorZ2V0Qm91bmRDb21tYW5kcyAoS2V5VGFibGUgKnRhYmxlLCB1bnNpZ25lZCBpbnQgKmNvdW50KSB7CisgIEFkZENvbW1hbmREYXRhIGFjZCA9IHsKKyAgICAuYXJyYXkgPSBOVUxMLAorICAgIC5zaXplID0gMCwKKyAgICAuY291bnQgPSAwCisgIH07CisKKyAgZm9yICh1bnNpZ25lZCBpbnQgY29udGV4dD0wOyBjb250ZXh0PHRhYmxlLT5rZXlDb250ZXh0cy5jb3VudDsgY29udGV4dCs9MSkgeworICAgIGNvbnN0IEtleUNvbnRleHQgKmN0eCA9IGdldEtleUNvbnRleHQodGFibGUsIGNvbnRleHQpOworCisgICAgaWYgKGN0eCkgeworICAgICAgeworICAgICAgICBjb25zdCBLZXlCaW5kaW5nICpiaW5kaW5nID0gY3R4LT5rZXlCaW5kaW5ncy50YWJsZTsKKyAgICAgICAgY29uc3QgS2V5QmluZGluZyAqZW5kID0gYmluZGluZyArIGN0eC0+a2V5QmluZGluZ3MuY291bnQ7CisKKyAgICAgICAgd2hpbGUgKGJpbmRpbmcgPCBlbmQpIHsKKyAgICAgICAgICBpZiAoIWFkZEJvdW5kQ29tbWFuZCgmYWNkLCAmYmluZGluZy0+cHJpbWFyeUNvbW1hbmQpKSBnb3RvIGVycm9yOworICAgICAgICAgIGlmICghYWRkQm91bmRDb21tYW5kKCZhY2QsICZiaW5kaW5nLT5zZWNvbmRhcnlDb21tYW5kKSkgZ290byBlcnJvcjsKKyAgICAgICAgICBiaW5kaW5nICs9IDE7CisgICAgICAgIH0KKyAgICAgIH0KKworICAgICAgeworICAgICAgICBjb25zdCBIb3RrZXlFbnRyeSAqaG90a2V5ID0gY3R4LT5ob3RrZXlzLnRhYmxlOworICAgICAgICBjb25zdCBIb3RrZXlFbnRyeSAqZW5kID0gaG90a2V5ICsgY3R4LT5ob3RrZXlzLmNvdW50OworCisgICAgICAgIHdoaWxlIChob3RrZXkgPCBlbmQpIHsKKyAgICAgICAgICBpZiAoIWFkZEJvdW5kQ29tbWFuZCgmYWNkLCAmaG90a2V5LT5wcmVzc0NvbW1hbmQpKSBnb3RvIGVycm9yOworICAgICAgICAgIGlmICghYWRkQm91bmRDb21tYW5kKCZhY2QsICZob3RrZXktPnJlbGVhc2VDb21tYW5kKSkgZ290byBlcnJvcjsKKyAgICAgICAgICBob3RrZXkgKz0gMTsKKyAgICAgICAgfQorICAgICAgfQorCisgICAgICBpZiAoY3R4LT5tYXBwZWRLZXlzLmNvdW50KSB7CisgICAgICAgIGlmICghYWRkQ29tbWFuZCgmYWNkLCBCUkxfQ01EX0JMSyhQQVNTRE9UUykpKSB7CisgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgfQorICAgICAgfQorICAgIH0KKyAgfQorCisgIGlmIChhY2QuY291bnQgPiAxKSB7CisgICAgcXNvcnQoYWNkLmFycmF5LCBhY2QuY291bnQsIHNpemVvZigqYWNkLmFycmF5KSwgc29ydENvbW1hbmRzKTsKKworICAgIGludCAqdG8gPSBhY2QuYXJyYXk7CisgICAgY29uc3QgaW50ICpmcm9tID0gdG87CisgICAgY29uc3QgaW50ICplbmQgPSBmcm9tICsgYWNkLmNvdW50OworCisgICAgd2hpbGUgKGZyb20gPCBlbmQpIHsKKyAgICAgIGlmICgoZnJvbSA9PSBhY2QuYXJyYXkpIHx8ICgqZnJvbSAhPSAqKGZyb20gLSAxKSkpIHsKKyAgICAgICAgaWYgKGZyb20gIT0gdG8pICp0byA9ICpmcm9tOworICAgICAgICB0byArPSAxOworICAgICAgfQorCisgICAgICBmcm9tICs9IDE7CisgICAgfQorCisgICAgYWNkLmNvdW50ID0gdG8gLSBhY2QuYXJyYXk7CisgIH0KKworICB7CisgICAgaW50ICpuZXdBcnJheSA9IHJlYWxsb2MoYWNkLmFycmF5LCBBUlJBWV9TSVpFKG5ld0FycmF5LCBhY2QuY291bnQpKTsKKyAgICBpZiAobmV3QXJyYXkpIGFjZC5hcnJheSA9IG5ld0FycmF5OworICB9CisKKyAgKmNvdW50ID0gYWNkLmNvdW50OworICByZXR1cm4gYWNkLmFycmF5OworCitlcnJvcjoKKyAgaWYgKGFjZC5hcnJheSkgZnJlZShhY2QuYXJyYXkpOworICByZXR1cm4gTlVMTDsKK30KZGlmZiAtLWdpdCBhL1Byb2dyYW1zL2xlYXJuLmMgYi9Qcm9ncmFtcy9sZWFybi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYzMGJkNjUKLS0tIC9kZXYvbnVsbAorKysgYi9Qcm9ncmFtcy9sZWFybi5jCkBAIC0wLDAgKzEsMTE3IEBACisvKgorICogQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyAqICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyAqCisgKiBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorICoKKyAqIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyAqCisgKiBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisgKi8KKworI2luY2x1ZGUgInByb2xvZ3VlLmgiCisKKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworI2luY2x1ZGUgImxvZy5oIgorI2luY2x1ZGUgImxlYXJuLmgiCisjaW5jbHVkZSAibWVzc2FnZS5oIgorI2luY2x1ZGUgImFzeW5jX3dhaXQuaCIKKyNpbmNsdWRlICJjbWQuaCIKKyNpbmNsdWRlICJjbWRfcXVldWUuaCIKKyNpbmNsdWRlICJicmwuaCIKKyNpbmNsdWRlICJicmxfY21kcy5oIgorI2luY2x1ZGUgImNvcmUuaCIKKwordHlwZWRlZiBlbnVtIHsKKyAgTE1TX0NPTlRJTlVFLAorICBMTVNfVElNRU9VVCwKKyAgTE1TX0VYSVQsCisgIExNU19FUlJPUgorfSBMZWFybk1vZGVTdGF0ZTsKKwordHlwZWRlZiBzdHJ1Y3QgeworICBjb25zdCBjaGFyICptb2RlOworICBMZWFybk1vZGVTdGF0ZSBzdGF0ZTsKK30gTGVhcm5Nb2RlRGF0YTsKKworQVNZTkNfQ09ORElUSU9OX1RFU1RFUih0ZXN0RW5kTGVhcm5XYWl0KSB7CisgIExlYXJuTW9kZURhdGEgKmxtZCA9IGRhdGE7CisKKyAgcmV0dXJuIGxtZC0+c3RhdGUgIT0gTE1TX1RJTUVPVVQ7Cit9CisKK3N0YXRpYyBpbnQKK2hhbmRsZUxlYXJuTW9kZUNvbW1hbmRzIChpbnQgY29tbWFuZCwgdm9pZCAqZGF0YSkgeworICBMZWFybk1vZGVEYXRhICpsbWQgPSBkYXRhOworCisgIGxvZ01lc3NhZ2UoTE9HX0RFQlVHLCAibGVhcm46IGNvbW1hbmQ9JTA2WCIsIGNvbW1hbmQpOworICBsbWQtPnN0YXRlID0gTE1TX0NPTlRJTlVFOworCisgIHN3aXRjaCAoY29tbWFuZCAmIEJSTF9NU0tfQ01EKSB7CisgICAgY2FzZSBCUkxfQ01EX0xFQVJOOgorICAgICAgbG1kLT5zdGF0ZSA9IExNU19FWElUOworICAgICAgcmV0dXJuIDE7CisKKyAgICBjYXNlIEJSTF9DTURfTk9PUDoKKyAgICAgIHJldHVybiAxOworCisgICAgZGVmYXVsdDoKKyAgICAgIHN3aXRjaCAoY29tbWFuZCAmIEJSTF9NU0tfQkxLKSB7CisgICAgICAgIGNhc2UgQlJMX0NNRF9CTEsoVE9VQ0hfQVQpOgorICAgICAgICAgIHJldHVybiAxOworCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgYnJlYWs7CisgICAgICB9CisgICAgICBicmVhazsKKyAgfQorCisgIHsKKyAgICBjaGFyIGJ1ZmZlclswWDEwMF07CisKKyAgICBkZXNjcmliZUNvbW1hbmQoYnVmZmVyLCBzaXplb2YoYnVmZmVyKSwgY29tbWFuZCwKKyAgICAgICAgICAgICAgICAgICAgKENET19JbmNsdWRlTmFtZSB8IENET19JbmNsdWRlT3BlcmFuZCkpOworCisgICAgbG9nTWVzc2FnZShMT0dfREVCVUcsICJsZWFybjogJXMiLCBidWZmZXIpOworICAgIGlmICghbWVzc2FnZShsbWQtPm1vZGUsIGJ1ZmZlciwgTVNHX1NZTkN8TVNHX05PREVMQVkpKSBsbWQtPnN0YXRlID0gTE1TX0VSUk9SOworICB9CisKKyAgcmV0dXJuIDE7Cit9CisKK2ludAorbGVhcm5Nb2RlIChpbnQgdGltZW91dCkgeworICBMZWFybk1vZGVEYXRhIGxtZCA9IHsKKyAgICAubW9kZSA9ICJscm4iCisgIH07CisKKyAgcHVzaENvbW1hbmRFbnZpcm9ubWVudCgibGVhcm5Nb2RlIiwgTlVMTCwgTlVMTCk7CisgIHB1c2hDb21tYW5kSGFuZGxlcigibGVhcm5Nb2RlIiwgS1RCX0NUWF9ERUZBVUxULAorICAgICAgICAgICAgICAgICAgICAgaGFuZGxlTGVhcm5Nb2RlQ29tbWFuZHMsIE5VTEwsICZsbWQpOworCisgIGlmIChzZXRTdGF0dXNUZXh0KCZicmwsIGxtZC5tb2RlKSkgeworICAgIGlmIChtZXNzYWdlKGxtZC5tb2RlLCBnZXR0ZXh0KCJMZWFybiBNb2RlIiksIE1TR19TWU5DfE1TR19OT0RFTEFZKSkgeworICAgICAgZG8geworICAgICAgICBsbWQuc3RhdGUgPSBMTVNfVElNRU9VVDsKKyAgICAgICAgaWYgKCFhc3luY0F3YWl0Q29uZGl0aW9uKHRpbWVvdXQsIHRlc3RFbmRMZWFybldhaXQsICZsbWQpKSBicmVhazsKKyAgICAgIH0gd2hpbGUgKGxtZC5zdGF0ZSA9PSBMTVNfQ09OVElOVUUpOworCisgICAgICBpZiAobG1kLnN0YXRlID09IExNU19USU1FT1VUKSB7CisgICAgICAgIGlmICghbWVzc2FnZShsbWQubW9kZSwgZ2V0dGV4dCgiZG9uZSIpLCBNU0dfU1lOQykpIHsKKyAgICAgICAgICBsbWQuc3RhdGUgPSBMTVNfRVJST1I7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9CisgIH0KKworICBwb3BDb21tYW5kRW52aXJvbm1lbnQoKTsKKyAgcmV0dXJuIGxtZC5zdGF0ZSAhPSBMTVNfRVJST1I7Cit9CmRpZmYgLS1naXQgYS9Qcm9ncmFtcy9sZWFybi5oIGIvUHJvZ3JhbXMvbGVhcm4uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMDI0OTc1Ci0tLSAvZGV2L251bGwKKysrIGIvUHJvZ3JhbXMvbGVhcm4uaApAQCAtMCwwICsxLDMyIEBACisvKgorICogQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyAqICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyAqCisgKiBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorICoKKyAqIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyAqCisgKiBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisgKi8KKworI2lmbmRlZiBCUkxUVFlfSU5DTFVERURfTEVBUk4KKyNkZWZpbmUgQlJMVFRZX0lOQ0xVREVEX0xFQVJOCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYgLyogX19jcGx1c3BsdXMgKi8KKworZXh0ZXJuIGludCBsZWFybk1vZGUgKGludCB0aW1lb3V0KTsKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYgLyogX19jcGx1c3BsdXMgKi8KKworI2VuZGlmIC8qIEJSTFRUWV9JTkNMVURFRF9MRUFSTiAqLwpkaWZmIC0tZ2l0IGEvUHJvZ3JhbXMvbGVkcy5jIGIvUHJvZ3JhbXMvbGVkcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA2MzdkN2EKLS0tIC9kZXYvbnVsbAorKysgYi9Qcm9ncmFtcy9sZWRzLmMKQEAgLTAsMCArMSwyOSBAQAorLyoKKyAqIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisgKiAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisgKgorICogQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKKyNpbmNsdWRlICJwcm9sb2d1ZS5oIgorCisjaW5jbHVkZSAibGVkcy5oIgorCitpbnQKK3NldExlZE1vbml0b3JpbmcgKGludCBvbikgeworICBpZiAob24pIHJldHVybiBzdGFydE1vbml0b3JpbmdMZWRzKCk7CisKKyAgc3RvcE1vbml0b3JpbmdMZWRzKCk7CisgIHJldHVybiAxOworfQpkaWZmIC0tZ2l0IGEvUHJvZ3JhbXMvbGVkc19saW51eC5jIGIvUHJvZ3JhbXMvbGVkc19saW51eC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA5MGYzMzcKLS0tIC9kZXYvbnVsbAorKysgYi9Qcm9ncmFtcy9sZWRzX2xpbnV4LmMKQEAgLTAsMCArMSw5OCBAQAorLyoKKyAqIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisgKiAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisgKgorICogQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKKyNpbmNsdWRlICJwcm9sb2d1ZS5oIgorCisjaW5jbHVkZSAibG9nLmgiCisjaW5jbHVkZSAibGVkcy5oIgorCisjaWZkZWYgSEFWRV9MSU5VWF9JTlBVVF9ICisjaW5jbHVkZSA8bGludXgvaW5wdXQuaD4KKworI2luY2x1ZGUgInN5c3RlbV9saW51eC5oIgorCitzdGF0aWMgSW5wdXRFdmVudE1vbml0b3IgKmlucHV0RXZlbnRNb25pdG9yID0gTlVMTDsKKworc3RhdGljIGludAorcHJlcGFyZVVpbnB1dE9iamVjdCAoVWlucHV0T2JqZWN0ICp1aW5wdXQpIHsKKyAgaWYgKCFlbmFibGVVaW5wdXRFdmVudFR5cGUodWlucHV0LCBFVl9MRUQpKSByZXR1cm4gMDsKKyAgaWYgKCFlbmFibGVVaW5wdXRMZWQodWlucHV0LCBMRURfTlVNTCkpIHJldHVybiAwOworICBpZiAoIWVuYWJsZVVpbnB1dExlZCh1aW5wdXQsIExFRF9DQVBTTCkpIHJldHVybiAwOworICBpZiAoIWVuYWJsZVVpbnB1dExlZCh1aW5wdXQsIExFRF9TQ1JPTExMKSkgcmV0dXJuIDA7CisgIHJldHVybiAxOworfQorCitzdGF0aWMgdm9pZAoraGFuZGxlSW5wdXRFdmVudCAoY29uc3QgSW5wdXRFdmVudCAqZXZlbnQpIHsKKyAgc3dpdGNoIChldmVudC0+dHlwZSkgeworICAgIGNhc2UgRVZfTEVEOiB7CisgICAgICBzd2l0Y2ggKGV2ZW50LT5jb2RlKSB7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgYnJlYWs7CisgICAgICB9CisKKyAgICAgIGJyZWFrOworICAgIH0KKworICAgIGRlZmF1bHQ6CisgICAgICBicmVhazsKKyAgfQorfQorCitpbnQKK2Nhbk1vbml0b3JMZWRzICh2b2lkKSB7CisgIHJldHVybiAxOworfQorCitpbnQKK3N0YXJ0TW9uaXRvcmluZ0xlZHMgKHZvaWQpIHsKKyAgaWYgKCFpbnB1dEV2ZW50TW9uaXRvcikgeworICAgIElucHV0RXZlbnRNb25pdG9yICptb25pdG9yID0gbmV3SW5wdXRFdmVudE1vbml0b3IoCisgICAgICAiS2V5Ym9hcmQgTEVEIE1vbml0b3IiLCBwcmVwYXJlVWlucHV0T2JqZWN0LCBoYW5kbGVJbnB1dEV2ZW50CisgICAgKTsKKworICAgIGlmICghbW9uaXRvcikgcmV0dXJuIDA7CisgICAgaW5wdXRFdmVudE1vbml0b3IgPSBtb25pdG9yOworICB9CisKKyAgcmV0dXJuIDE7Cit9CisKK3ZvaWQKK3N0b3BNb25pdG9yaW5nTGVkcyAodm9pZCkgeworICBpZiAoaW5wdXRFdmVudE1vbml0b3IpIHsKKyAgICBkZXN0cm95SW5wdXRFdmVudE1vbml0b3IoaW5wdXRFdmVudE1vbml0b3IpOworICAgIGlucHV0RXZlbnRNb25pdG9yID0gTlVMTDsKKyAgfQorfQorCisjZWxzZSAvKiBIQVZFX0xJTlVYX0lOUFVUX0ggKi8KK2ludAorY2FuTW9uaXRvckxlZHMgKHZvaWQpIHsKKyAgcmV0dXJuIDA7Cit9CisKK2ludAorc3RhcnRNb25pdG9yaW5nTGVkcyAodm9pZCkgeworICByZXR1cm4gMDsKK30KKwordm9pZAorc3RvcE1vbml0b3JpbmdMZWRzICh2b2lkKSB7Cit9CisjZW5kaWYgLyogSEFWRV9MSU5VWF9JTlBVVF9IICovCmRpZmYgLS1naXQgYS9Qcm9ncmFtcy9sZWRzX25vbmUuYyBiL1Byb2dyYW1zL2xlZHNfbm9uZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEyMTFiZjkKLS0tIC9kZXYvbnVsbAorKysgYi9Qcm9ncmFtcy9sZWRzX25vbmUuYwpAQCAtMCwwICsxLDM1IEBACisvKgorICogQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyAqICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyAqCisgKiBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorICoKKyAqIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyAqCisgKiBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisgKi8KKworI2luY2x1ZGUgInByb2xvZ3VlLmgiCisKKyNpbmNsdWRlICJsZWRzLmgiCisKK2ludAorY2FuTW9uaXRvckxlZHMgKHZvaWQpIHsKKyAgcmV0dXJuIDA7Cit9CisKK2ludAorc3RhcnRNb25pdG9yaW5nTGVkcyAodm9pZCkgeworICByZXR1cm4gMDsKK30KKwordm9pZAorc3RvcE1vbml0b3JpbmdMZWRzICh2b2lkKSB7Cit9CmRpZmYgLS1naXQgYS9Qcm9ncmFtcy9sb2NrLmMgYi9Qcm9ncmFtcy9sb2NrLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzQ0M2E3OQotLS0gL2Rldi9udWxsCisrKyBiL1Byb2dyYW1zL2xvY2suYwpAQCAtMCwwICsxLDIzOCBAQAorLyoKKyAqIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisgKiAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisgKgorICogQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKKyNpbmNsdWRlICJwcm9sb2d1ZS5oIgorCisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKworI2luY2x1ZGUgImxvY2suaCIKKyNpbmNsdWRlICJsb2cuaCIKKyNpbmNsdWRlICJnZXRfdGhyZWFkLmgiCisgCisjdW5kZWYgQ0FOX0xPQ0sKKyNpZiBkZWZpbmVkKFBUSFJFQURfUldMT0NLX0lOSVRJQUxJWkVSKQorI2RlZmluZSBDQU5fTE9DSworCitzdHJ1Y3QgTG9ja0Rlc2NyaXB0b3JTdHJ1Y3QgeworICBwdGhyZWFkX3J3bG9ja190IGxvY2s7Cit9OworCitzdGF0aWMgaW50Citjb25zdHJ1Y3RMb2NrRGVzY3JpcHRvciAoTG9ja0Rlc2NyaXB0b3IgKmxvY2spIHsKKyAgaW50IGVycm9yOworCisgIGlmICghKGVycm9yID0gcHRocmVhZF9yd2xvY2tfaW5pdCgmbG9jay0+bG9jaywgTlVMTCkpKSB7CisgICAgcmV0dXJuIDE7CisgIH0gZWxzZSB7CisgICAgbG9nQWN0aW9uRXJyb3IoZXJyb3IsICJwdGhyZWFkX3J3bG9ja19pbml0Iik7CisgIH0KKworICByZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQKK2Rlc3RydWN0TG9ja0Rlc2NyaXB0b3IgKExvY2tEZXNjcmlwdG9yICpsb2NrKSB7CisgIHB0aHJlYWRfcndsb2NrX2Rlc3Ryb3koJmxvY2stPmxvY2spOworfQorCitpbnQKK29idGFpbkxvY2sgKExvY2tEZXNjcmlwdG9yICpsb2NrLCBMb2NrT3B0aW9ucyBvcHRpb25zKSB7CisgIGlmIChvcHRpb25zICYgTE9DS19FeGNsdXNpdmUpIHsKKyAgICBpZiAob3B0aW9ucyAmIExPQ0tfTm9XYWl0KSByZXR1cm4gIXB0aHJlYWRfcndsb2NrX3RyeXdybG9jaygmbG9jay0+bG9jayk7CisgICAgcHRocmVhZF9yd2xvY2tfd3Jsb2NrKCZsb2NrLT5sb2NrKTsKKyAgfSBlbHNlIHsKKyAgICBpZiAob3B0aW9ucyAmIExPQ0tfTm9XYWl0KSByZXR1cm4gIXB0aHJlYWRfcndsb2NrX3RyeXJkbG9jaygmbG9jay0+bG9jayk7CisgICAgcHRocmVhZF9yd2xvY2tfcmRsb2NrKCZsb2NrLT5sb2NrKTsKKyAgfQorCisgIHJldHVybiAxOworfQorCit2b2lkCityZWxlYXNlTG9jayAoTG9ja0Rlc2NyaXB0b3IgKmxvY2spIHsKKyAgcHRocmVhZF9yd2xvY2tfdW5sb2NrKCZsb2NrLT5sb2NrKTsKK30KKworI2VsaWYgZGVmaW5lZChQVEhSRUFEX01VVEVYX0lOSVRJQUxJWkVSKQorI2RlZmluZSBDQU5fTE9DSworCitzdHJ1Y3QgTG9ja0Rlc2NyaXB0b3JTdHJ1Y3QgeworICBwdGhyZWFkX211dGV4X3QgbXV0ZXg7CisgIHB0aHJlYWRfY29uZF90IHJlYWQ7CisgIHB0aHJlYWRfY29uZF90IHdyaXRlOworICBpbnQgY291bnQ7CisgIHVuc2lnbmVkIGludCB3cml0ZXJzOworfTsKKworc3RhdGljIGludAorY29uc3RydWN0TG9ja0Rlc2NyaXB0b3IgKExvY2tEZXNjcmlwdG9yICpsb2NrKSB7CisgIGludCBlcnJvcjsKKworICBpZiAoIShlcnJvciA9IHB0aHJlYWRfY29uZF9pbml0KCZsb2NrLT5yZWFkLCBOVUxMKSkpIHsKKyAgICBpZiAoIShlcnJvciA9IHB0aHJlYWRfY29uZF9pbml0KCZsb2NrLT53cml0ZSwgTlVMTCkpKSB7CisgICAgICBpZiAoIShlcnJvciA9IHB0aHJlYWRfbXV0ZXhfaW5pdCgmbG9jay0+bXV0ZXgsIE5VTEwpKSkgeworICAgICAgICBsb2NrLT5jb3VudCA9IDA7CisgICAgICAgIGxvY2stPndyaXRlcnMgPSAwOworICAgICAgICByZXR1cm4gMTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIGxvZ0FjdGlvbkVycm9yKGVycm9yLCAicHRocmVhZF9tdXRleF9pbml0Iik7CisgICAgICB9CisKKyAgICAgIHB0aHJlYWRfY29uZF9kZXN0cm95KCZsb2NrLT53cml0ZSk7CisgICAgfSBlbHNlIHsKKyAgICAgIGxvZ0FjdGlvbkVycm9yKGVycm9yLCAicHRocmVhZF9jb25kX2luaXQiKTsKKyAgICB9CisKKyAgICBwdGhyZWFkX2NvbmRfZGVzdHJveSgmbG9jay0+cmVhZCk7CisgIH0gZWxzZSB7CisgICAgbG9nQWN0aW9uRXJyb3IoZXJyb3IsICJwdGhyZWFkX2NvbmRfaW5pdCIpOworICB9CisKKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkCitkZXN0cnVjdExvY2tEZXNjcmlwdG9yIChMb2NrRGVzY3JpcHRvciAqbG9jaykgeworICBwdGhyZWFkX211dGV4X2Rlc3Ryb3koJmxvY2stPm11dGV4KTsKKyAgcHRocmVhZF9jb25kX2Rlc3Ryb3koJmxvY2stPnJlYWQpOworICBwdGhyZWFkX2NvbmRfZGVzdHJveSgmbG9jay0+d3JpdGUpOworfQorCitpbnQKK29idGFpbkxvY2sgKExvY2tEZXNjcmlwdG9yICpsb2NrLCBMb2NrT3B0aW9ucyBvcHRpb25zKSB7CisgIGludCBsb2NrZWQgPSAwOworCisgIHB0aHJlYWRfbXV0ZXhfbG9jaygmbG9jay0+bXV0ZXgpOworCisgIGlmIChvcHRpb25zICYgTE9DS19FeGNsdXNpdmUpIHsKKyAgICB3aGlsZSAobG9jay0+Y291bnQpIHsKKyAgICAgIGlmIChvcHRpb25zICYgTE9DS19Ob1dhaXQpIGdvdG8gZG9uZTsKKyAgICAgIGxvY2stPndyaXRlcnMgKz0gMTsKKyAgICAgIHB0aHJlYWRfY29uZF93YWl0KCZsb2NrLT53cml0ZSwgJmxvY2stPm11dGV4KTsKKyAgICAgIGxvY2stPndyaXRlcnMgLT0gMTsKKyAgICB9CisKKyAgICBsb2NrLT5jb3VudCA9IC0xOworICB9IGVsc2UgeworICAgIHdoaWxlIChsb2NrLT5jb3VudCA8IDApIHsKKyAgICAgIGlmIChvcHRpb25zICYgTE9DS19Ob1dhaXQpIGdvdG8gZG9uZTsKKyAgICAgIHB0aHJlYWRfY29uZF93YWl0KCZsb2NrLT5yZWFkLCAmbG9jay0+bXV0ZXgpOworICAgIH0KKworICAgIGxvY2stPmNvdW50ICs9IDE7CisgIH0KKworICBsb2NrZWQgPSAxOworZG9uZToKKyAgcHRocmVhZF9tdXRleF91bmxvY2soJmxvY2stPm11dGV4KTsKKyAgcmV0dXJuIGxvY2tlZDsKK30KKwordm9pZAorcmVsZWFzZUxvY2sgKExvY2tEZXNjcmlwdG9yICpsb2NrKSB7CisgIHB0aHJlYWRfbXV0ZXhfbG9jaygmbG9jay0+bXV0ZXgpOworCisgIGlmIChsb2NrLT5jb3VudCA8IDApIHsKKyAgICBsb2NrLT5jb3VudCA9IDA7CisgIH0gZWxzZSBpZiAoLS1sb2NrLT5jb3VudCkgeworICAgIGdvdG8gZG9uZTsKKyAgfQorCisgIGlmIChsb2NrLT53cml0ZXJzKSB7CisgICAgcHRocmVhZF9jb25kX3NpZ25hbCgmbG9jay0+d3JpdGUpOworICB9IGVsc2UgeworICAgIHB0aHJlYWRfY29uZF9icm9hZGNhc3QoJmxvY2stPnJlYWQpOworICB9CisKK2RvbmU6CisgIHB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZsb2NrLT5tdXRleCk7Cit9CisKKyNlbmRpZiAvKiBsb2NrIHBhcmFkaWdtICovCisKKyNpZmRlZiBDQU5fTE9DSworTG9ja0Rlc2NyaXB0b3IgKgorbmV3TG9ja0Rlc2NyaXB0b3IgKHZvaWQpIHsKKyAgTG9ja0Rlc2NyaXB0b3IgKmxvY2s7CisKKyAgaWYgKChsb2NrID0gbWFsbG9jKHNpemVvZigqbG9jaykpKSkgeworICAgIG1lbXNldChsb2NrLCAwLCBzaXplb2YoKmxvY2spKTsKKyAgICBpZiAoY29uc3RydWN0TG9ja0Rlc2NyaXB0b3IobG9jaykpIHJldHVybiBsb2NrOworCisgICAgZnJlZShsb2NrKTsKKyAgICBsb2NrID0gTlVMTDsKKyAgfSBlbHNlIHsKKyAgICBsb2dNYWxsb2NFcnJvcigpOworICB9CisKKyAgcmV0dXJuIGxvY2s7Cit9CisKK3ZvaWQKK2ZyZWVMb2NrRGVzY3JpcHRvciAoTG9ja0Rlc2NyaXB0b3IgKmxvY2spIHsKKyAgZGVzdHJ1Y3RMb2NrRGVzY3JpcHRvcihsb2NrKTsKKyAgZnJlZShsb2NrKTsKK30KKworTG9ja0Rlc2NyaXB0b3IgKgorZ2V0TG9ja0Rlc2NyaXB0b3IgKExvY2tEZXNjcmlwdG9yICoqbG9jaywgY29uc3QgY2hhciAqbmFtZSkgeworICBzdGF0aWMgcHRocmVhZF9tdXRleF90IG11dGV4ID0gUFRIUkVBRF9NVVRFWF9JTklUSUFMSVpFUjsKKyAgaW50IGlzTmV3ID0gMDsKKworICBwdGhyZWFkX211dGV4X2xvY2soJm11dGV4KTsKKyAgICBpZiAoISpsb2NrKSB7CisgICAgICBpZiAoKCpsb2NrID0gbmV3TG9ja0Rlc2NyaXB0b3IoKSkpIHsKKyAgICAgICAgaXNOZXcgPSAxOworICAgICAgfQorICAgIH0KKyAgcHRocmVhZF9tdXRleF91bmxvY2soJm11dGV4KTsKKworICBpZiAoaXNOZXcpIHsKKyAgICBsb2dNZXNzYWdlKExPR19ERUJVRywgImxvY2sgZGVzY3JpcHRvciBhbGxvY2F0ZWQ6ICVzIiwgbmFtZSk7CisgIH0KKworICByZXR1cm4gKmxvY2s7Cit9CisjZWxzZSAvKiBDQU5fTE9DSyAqLworI3dhcm5pbmcgdGhyZWFkIGxvY2sgc3VwcG9ydCBub3QgYXZhaWxhYmxlIG9uIHRoaXMgcGxhdGZvcm0KKworaW50CitvYnRhaW5Mb2NrIChMb2NrRGVzY3JpcHRvciAqbG9jaywgTG9ja09wdGlvbnMgb3B0aW9ucykgeworICByZXR1cm4gMTsKK30KKwordm9pZAorcmVsZWFzZUxvY2sgKExvY2tEZXNjcmlwdG9yICpsb2NrKSB7Cit9CisKK0xvY2tEZXNjcmlwdG9yICoKK25ld0xvY2tEZXNjcmlwdG9yICh2b2lkKSB7CisgIGVycm5vID0gRU5PU1lTOworICByZXR1cm4gTlVMTDsKK30KKwordm9pZAorZnJlZUxvY2tEZXNjcmlwdG9yIChMb2NrRGVzY3JpcHRvciAqbG9jaykgeworfQorCitMb2NrRGVzY3JpcHRvciAqCitnZXRMb2NrRGVzY3JpcHRvciAoTG9ja0Rlc2NyaXB0b3IgKipsb2NrLCBjb25zdCBjaGFyICpuYW1lKSB7CisgIHJldHVybiAqbG9jazsKK30KKyNlbmRpZiAvKiBDQU5fTE9DSyAqLwpkaWZmIC0tZ2l0IGEvUHJvZ3JhbXMvbG9nLmMgYi9Qcm9ncmFtcy9sb2cuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40N2M2ZmZjCi0tLSAvZGV2L251bGwKKysrIGIvUHJvZ3JhbXMvbG9nLmMKQEAgLTAsMCArMSw3MTcgQEAKKy8qCisgKiBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorICogICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorICoKKyAqIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorICoKKyAqIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyAqLworCisjaW5jbHVkZSAicHJvbG9ndWUuaCIKKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkYXJnLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxmY250bC5oPgorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisKKyNpZmRlZiBfX0FORFJPSURfXworI2luY2x1ZGUgPGFuZHJvaWQvbG9nLmg+CisjZW5kaWYgLyogX19BTkRST0lEX18gKi8KKworI2luY2x1ZGUgImxvZy5oIgorI2luY2x1ZGUgImxvZ19oaXN0b3J5LmgiCisjaW5jbHVkZSAic3RyZm10LmgiCisjaW5jbHVkZSAiZmlsZS5oIgorI2luY2x1ZGUgInVuaWNvZGUuaCIKKyNpbmNsdWRlICJ1dGY4LmgiCisjaW5jbHVkZSAidGltaW5nLmgiCisjaW5jbHVkZSAiYWRkcmVzc2VzLmgiCisjaW5jbHVkZSAic3RkaW94LmgiCisjaW5jbHVkZSAiaW9fbWlzYy5oIgorI2luY2x1ZGUgInRocmVhZC5oIgorCitjb25zdCBjaGFyIGxvZ0NhdGVnb3J5TmFtZV9hbGxbXSA9ICJhbGwiOworY29uc3QgY2hhciBsb2dDYXRlZ29yeVByZWZpeF9kaXNhYmxlID0gJy0nOworCitjb25zdCBjaGFyICpjb25zdCBsb2dMZXZlbE5hbWVzW10gPSB7CisgICJlbWVyZ2VuY3kiLCAiYWxlcnQiLCAiY3JpdGljYWwiLCAiZXJyb3IiLAorICAid2FybmluZyIsICJub3RpY2UiLCAiaW5mb3JtYXRpb24iLCAiZGVidWciCit9OworY29uc3QgdW5zaWduZWQgaW50IGxvZ0xldmVsQ291bnQgPSBBUlJBWV9DT1VOVChsb2dMZXZlbE5hbWVzKTsKKwordW5zaWduZWQgY2hhciBzeXN0ZW1Mb2dMZXZlbCA9IExPR19OT1RJQ0U7Cit1bnNpZ25lZCBjaGFyIHN0ZGVyckxvZ0xldmVsID0gTE9HX05PVElDRTsKKwordHlwZWRlZiBzdHJ1Y3QgeworICBjb25zdCBjaGFyICpuYW1lOworICBjb25zdCBjaGFyICp0aXRsZTsKKyAgY29uc3QgY2hhciAqcHJlZml4OworfSBMb2dDYXRlZ29yeUVudHJ5OworCitzdGF0aWMgY29uc3QgTG9nQ2F0ZWdvcnlFbnRyeSBsb2dDYXRlZ29yeVRhYmxlW0xPR19DQVRFR09SWV9DT1VOVF0gPSB7CisgIFtMT0dfQ0FURUdPUllfSU5ERVgoSU5QVVRfUEFDS0VUUyldID0geworICAgIC5uYW1lID0gImlucGt0cyIsCisgICAgLnRpdGxlID0gc3RydGV4dCgiSW5wdXQgUGFja2V0cyIpLAorICAgIC5wcmVmaXggPSAiaW5wdXQgcGFja2V0IgorICB9LAorCisgIFtMT0dfQ0FURUdPUllfSU5ERVgoT1VUUFVUX1BBQ0tFVFMpXSA9IHsKKyAgICAubmFtZSA9ICJvdXRwa3RzIiwKKyAgICAudGl0bGUgPSBzdHJ0ZXh0KCJPdXRwdXQgUGFja2V0cyIpLAorICAgIC5wcmVmaXggPSAib3V0cHV0IHBhY2tldCIKKyAgfSwKKworICBbTE9HX0NBVEVHT1JZX0lOREVYKEJSQUlMTEVfS0VZUyldID0geworICAgIC5uYW1lID0gImJybGtleXMiLAorICAgIC50aXRsZSA9IHN0cnRleHQoIkJyYWlsbGUgS2V5IEV2ZW50cyIpLAorICAgIC5wcmVmaXggPSAiYnJhaWxsZSBrZXkiCisgIH0sCisKKyAgW0xPR19DQVRFR09SWV9JTkRFWChLRVlCT0FSRF9LRVlTKV0gPSB7CisgICAgLm5hbWUgPSAia2Jka2V5cyIsCisgICAgLnRpdGxlID0gc3RydGV4dCgiS2V5Ym9hcmQgS2V5IEV2ZW50cyIpLAorICAgIC5wcmVmaXggPSAia2V5Ym9hcmQga2V5IgorICB9LAorCisgIFtMT0dfQ0FURUdPUllfSU5ERVgoQ1VSU09SX1RSQUNLSU5HKV0gPSB7CisgICAgLm5hbWUgPSAiY3NydHJrIiwKKyAgICAudGl0bGUgPSBzdHJ0ZXh0KCJDdXJzb3IgVHJhY2tpbmciKSwKKyAgICAucHJlZml4ID0gImN1cnNvciB0cmFja2luZyIKKyAgfSwKKworICBbTE9HX0NBVEVHT1JZX0lOREVYKENVUlNPUl9ST1VUSU5HKV0gPSB7CisgICAgLm5hbWUgPSAiY3NycnRnIiwKKyAgICAudGl0bGUgPSBzdHJ0ZXh0KCJDdXJzb3IgUm91dGluZyIpLAorICAgIC5wcmVmaXggPSAiY3Vyc29yIHJvdXRpbmciCisgIH0sCisKKyAgW0xPR19DQVRFR09SWV9JTkRFWChVUERBVEVfRVZFTlRTKV0gPSB7CisgICAgLm5hbWUgPSAidXBkYXRlIiwKKyAgICAudGl0bGUgPSBzdHJ0ZXh0KCJVcGRhdGUgRXZlbnRzIiksCisgICAgLnByZWZpeCA9ICJ1cGRhdGUiCisgIH0sCisKKyAgW0xPR19DQVRFR09SWV9JTkRFWChTUEVFQ0hfRVZFTlRTKV0gPSB7CisgICAgLm5hbWUgPSAic3BlZWNoIiwKKyAgICAudGl0bGUgPSBzdHJ0ZXh0KCJTcGVlY2ggRXZlbnRzIiksCisgICAgLnByZWZpeCA9ICJzcGVlY2giCisgIH0sCisKKyAgW0xPR19DQVRFR09SWV9JTkRFWChBU1lOQ19FVkVOVFMpXSA9IHsKKyAgICAubmFtZSA9ICJhc3luYyIsCisgICAgLnRpdGxlID0gc3RydGV4dCgiQXN5bmMgRXZlbnRzIiksCisgICAgLnByZWZpeCA9ICJhc3luYyIKKyAgfSwKKworICBbTE9HX0NBVEVHT1JZX0lOREVYKFNFUlZFUl9FVkVOVFMpXSA9IHsKKyAgICAubmFtZSA9ICJzZXJ2ZXIiLAorICAgIC50aXRsZSA9IHN0cnRleHQoIlNlcnZlciBFdmVudHMiKSwKKyAgICAucHJlZml4ID0gInNlcnZlciIKKyAgfSwKKworICBbTE9HX0NBVEVHT1JZX0lOREVYKEdFTkVSSUNfSU8pXSA9IHsKKyAgICAubmFtZSA9ICJnaW8iLAorICAgIC50aXRsZSA9IHN0cnRleHQoImdlbmVyaWMgSS9PIiksCisgICAgLnByZWZpeCA9ICJHSU8iCisgIH0sCisKKyAgW0xPR19DQVRFR09SWV9JTkRFWChTRVJJQUxfSU8pXSA9IHsKKyAgICAubmFtZSA9ICJzZXJpYWwiLAorICAgIC50aXRsZSA9IHN0cnRleHQoIlNlcmlhbCBJL08iKSwKKyAgICAucHJlZml4ID0gInNlcmlhbCIKKyAgfSwKKworICBbTE9HX0NBVEVHT1JZX0lOREVYKFVTQl9JTyldID0geworICAgIC5uYW1lID0gInVzYiIsCisgICAgLnRpdGxlID0gc3RydGV4dCgiVVNCIEkvTyIpLAorICAgIC5wcmVmaXggPSAiVVNCIgorICB9LAorCisgIFtMT0dfQ0FURUdPUllfSU5ERVgoQkxVRVRPT1RIX0lPKV0gPSB7CisgICAgLm5hbWUgPSAiYnQiLAorICAgIC50aXRsZSA9IHN0cnRleHQoIkJsdWV0b290aCBJL08iKSwKKyAgICAucHJlZml4ID0gIkJsdWV0b290aCIKKyAgfSwKKworICBbTE9HX0NBVEVHT1JZX0lOREVYKEhJRF9JTyldID0geworICAgIC5uYW1lID0gImhpZCIsCisgICAgLnRpdGxlID0gc3RydGV4dCgiSHVtYW4gSW50ZXJmYWNlIEkvTyIpLAorICAgIC5wcmVmaXggPSAiSElEIgorICB9LAorCisgIFtMT0dfQ0FURUdPUllfSU5ERVgoQlJBSUxMRV9EUklWRVIpXSA9IHsKKyAgICAubmFtZSA9ICJicmxkcnYiLAorICAgIC50aXRsZSA9IHN0cnRleHQoIkJyYWlsbGUgRHJpdmVyIEV2ZW50cyIpLAorICAgIC5wcmVmaXggPSAiYnJhaWxsZSBkcml2ZXIiCisgIH0sCisKKyAgW0xPR19DQVRFR09SWV9JTkRFWChTUEVFQ0hfRFJJVkVSKV0gPSB7CisgICAgLm5hbWUgPSAic3BrZHJ2IiwKKyAgICAudGl0bGUgPSBzdHJ0ZXh0KCJTcGVlY2ggRHJpdmVyIEV2ZW50cyIpLAorICAgIC5wcmVmaXggPSAic3BlZWNoIGRyaXZlciIKKyAgfSwKKworICBbTE9HX0NBVEVHT1JZX0lOREVYKFNDUkVFTl9EUklWRVIpXSA9IHsKKyAgICAubmFtZSA9ICJzY3JkcnYiLAorICAgIC50aXRsZSA9IHN0cnRleHQoIlNjcmVlbiBEcml2ZXIgRXZlbnRzIiksCisgICAgLnByZWZpeCA9ICJzY3JlZW4gZHJpdmVyIgorICB9LAorfTsKKwordW5zaWduZWQgY2hhciBjYXRlZ29yeUxvZ0xldmVsID0gTE9HX1dBUk5JTkc7Cit1bnNpZ25lZCBjaGFyIGxvZ0NhdGVnb3J5RmxhZ3NbTE9HX0NBVEVHT1JZX0NPVU5UXTsKKworI2lmIGRlZmluZWQoV0lORE9XUykKK3N0YXRpYyBIQU5ETEUgd2luZG93c0V2ZW50TG9nID0gSU5WQUxJRF9IQU5ETEVfVkFMVUU7CisKK3N0YXRpYyBXT1JECit0b1dpbmRvd3NFdmVudFR5cGUgKGludCBsZXZlbCkgeworICBpZiAobGV2ZWwgPD0gTE9HX0VSUikgcmV0dXJuIEVWRU5UTE9HX0VSUk9SX1RZUEU7CisgIGlmIChsZXZlbCA8PSBMT0dfV0FSTklORykgcmV0dXJuIEVWRU5UTE9HX1dBUk5JTkdfVFlQRTsKKyAgcmV0dXJuIEVWRU5UTE9HX0lORk9STUFUSU9OX1RZUEU7Cit9CisKKyNlbGlmIGRlZmluZWQoX19NU0RPU19fKQorCisjZWxpZiBkZWZpbmVkKF9fQU5EUk9JRF9fKQorc3RhdGljIGludAordG9BbmRyb2lkTG9nUHJpb3JpdHkgKGludCBsZXZlbCkgeworICBzd2l0Y2ggKGxldmVsKSB7CisgICAgY2FzZSBMT0dfRU1FUkc6ICAgcmV0dXJuIEFORFJPSURfTE9HX0ZBVEFMOworICAgIGNhc2UgTE9HX0FMRVJUOiAgIHJldHVybiBBTkRST0lEX0xPR19GQVRBTDsKKyAgICBjYXNlIExPR19DUklUOiAgICByZXR1cm4gQU5EUk9JRF9MT0dfRkFUQUw7CisgICAgY2FzZSBMT0dfRVJSOiAgICAgcmV0dXJuIEFORFJPSURfTE9HX0VSUk9SOworICAgIGNhc2UgTE9HX1dBUk5JTkc6IHJldHVybiBBTkRST0lEX0xPR19XQVJOOworICAgIGNhc2UgTE9HX05PVElDRTogIHJldHVybiBBTkRST0lEX0xPR19JTkZPOworICAgIGNhc2UgTE9HX0lORk86ICAgIHJldHVybiBBTkRST0lEX0xPR19JTkZPOworICAgIGNhc2UgTE9HX0RFQlVHOiAgIHJldHVybiBBTkRST0lEX0xPR19ERUJVRzsKKyAgICBkZWZhdWx0OiAgICAgICAgICByZXR1cm4gQU5EUk9JRF9MT0dfVU5LTk9XTjsKKyAgfQorfQorCisjZWxpZiBkZWZpbmVkKEhBVkVfU1lTTE9HX0gpCitzdGF0aWMgaW50IHN5c2xvZ09wZW5lZCA9IDA7CisjZW5kaWYgLyogc3lzdGVtIGxvZyBpbnRlcm5hbCBkZWZpbml0aW9ucyAqLworCitzdGF0aWMgTG9nRW50cnkgKmxvZ1ByZWZpeFN0YWNrID0gTlVMTDsKK3N0YXRpYyBGSUxFICpsb2dGaWxlID0gTlVMTDsKKworc3RhdGljIGlubGluZSBjb25zdCBMb2dDYXRlZ29yeUVudHJ5ICoKK2dldExvZ0NhdGVnb3J5RW50cnkgKExvZ0NhdGVnb3J5SW5kZXggaW5kZXgpIHsKKyAgcmV0dXJuIChpbmRleCA8IExPR19DQVRFR09SWV9DT1VOVCk/ICZsb2dDYXRlZ29yeVRhYmxlW2luZGV4XTogTlVMTDsKK30KKworY29uc3QgY2hhciAqCitnZXRMb2dDYXRlZ29yeU5hbWUgKExvZ0NhdGVnb3J5SW5kZXggaW5kZXgpIHsKKyAgY29uc3QgTG9nQ2F0ZWdvcnlFbnRyeSAqY3RnID0gZ2V0TG9nQ2F0ZWdvcnlFbnRyeShpbmRleCk7CisKKyAgcmV0dXJuIChjdGcgJiYgY3RnLT5uYW1lKT8gY3RnLT5uYW1lOiAiIjsKK30KKworY29uc3QgY2hhciAqCitnZXRMb2dDYXRlZ29yeVRpdGxlIChMb2dDYXRlZ29yeUluZGV4IGluZGV4KSB7CisgIGNvbnN0IExvZ0NhdGVnb3J5RW50cnkgKmN0ZyA9IGdldExvZ0NhdGVnb3J5RW50cnkoaW5kZXgpOworCisgIHJldHVybiAoY3RnICYmIGN0Zy0+dGl0bGUpPyBjdGctPnRpdGxlOiAiIjsKK30KKworc3RhdGljIGlubGluZSB2b2lkCitzZXRMb2dDYXRlZ29yeUZsYWcgKGNvbnN0IExvZ0NhdGVnb3J5RW50cnkgKmN0ZywgdW5zaWduZWQgY2hhciBzdGF0ZSkgeworICBsb2dDYXRlZ29yeUZsYWdzW2N0ZyAtIGxvZ0NhdGVnb3J5VGFibGVdID0gc3RhdGU7Cit9CisKK3ZvaWQKK2Rpc2FibGVBbGxMb2dDYXRlZ29yaWVzICh2b2lkKSB7CisgIGNvbnN0IExvZ0NhdGVnb3J5RW50cnkgKmN0ZyA9IGxvZ0NhdGVnb3J5VGFibGU7CisgIGNvbnN0IExvZ0NhdGVnb3J5RW50cnkgKmVuZCA9IGN0ZyArIExPR19DQVRFR09SWV9DT1VOVDsKKworICB3aGlsZSAoY3RnIDwgZW5kKSBzZXRMb2dDYXRlZ29yeUZsYWcoY3RnKyssIDApOworfQorCitpbnQKK3NldExvZ0NhdGVnb3J5IChjb25zdCBjaGFyICpuYW1lKSB7CisgIGNvbnN0IExvZ0NhdGVnb3J5RW50cnkgKmN0ZyA9IGxvZ0NhdGVnb3J5VGFibGU7CisgIGNvbnN0IExvZ0NhdGVnb3J5RW50cnkgKmVuZCA9IGN0ZyArIExPR19DQVRFR09SWV9DT1VOVDsKKworICBpbnQgb24gPSAxOworICBpbnQgYWxsOworCisgIGlmICgqbmFtZSA9PSBsb2dDYXRlZ29yeVByZWZpeF9kaXNhYmxlKSB7CisgICAgb24gPSAwOworICAgIG5hbWUgKz0gMTsKKyAgfQorCisgIGFsbCA9IHN0cmNhc2VjbXAobmFtZSwgbG9nQ2F0ZWdvcnlOYW1lX2FsbCkgPT0gMDsKKworICB3aGlsZSAoY3RnIDwgZW5kKSB7CisgICAgaWYgKGFsbCB8fCAoY3RnLT5uYW1lICYmIChzdHJjYXNlY21wKG5hbWUsIGN0Zy0+bmFtZSkgPT0gMCkpKSB7CisgICAgICBzZXRMb2dDYXRlZ29yeUZsYWcoY3RnLCBvbik7CisgICAgICBpZiAoIWFsbCkgcmV0dXJuIDE7CisgICAgfQorCisgICAgY3RnICs9IDE7CisgIH0KKworICByZXR1cm4gYWxsOworfQorCitpbnQKK3B1c2hMb2dQcmVmaXggKGNvbnN0IGNoYXIgKnByZWZpeCkgeworICBpZiAoIXByZWZpeCkgcHJlZml4ID0gIiI7CisgIHJldHVybiBwdXNoTG9nRW50cnkoJmxvZ1ByZWZpeFN0YWNrLCBwcmVmaXgsIDApOworfQorCitpbnQKK3BvcExvZ1ByZWZpeCAodm9pZCkgeworICByZXR1cm4gcG9wTG9nRW50cnkoJmxvZ1ByZWZpeFN0YWNrKTsKK30KKwordm9pZAorY2xvc2VMb2dGaWxlICh2b2lkKSB7CisgIGlmIChsb2dGaWxlKSB7CisgICAgZmNsb3NlKGxvZ0ZpbGUpOworICAgIGxvZ0ZpbGUgPSBOVUxMOworICB9Cit9CisKK3ZvaWQKK29wZW5Mb2dGaWxlIChjb25zdCBjaGFyICpwYXRoKSB7CisgIGNsb3NlTG9nRmlsZSgpOworICBGSUxFICpzdHJlYW0gPSBmb3BlbihwYXRoLCAidyIpOworCisgIGlmIChzdHJlYW0pIHsKKyAgLy9zZXRDbG9zZU9uRXhlYyhmaWxlbm8oc3RyZWFtKSwgMSk7CisgICAgd3JpdGVVdGY4Qnl0ZU9yZGVyTWFyayhzdHJlYW0pOworICAgIGxvZ0ZpbGUgPSBzdHJlYW07CisgIH0KK30KKworc3RhdGljIHZvaWQKK3dyaXRlTG9nUmVjb3JkIChjb25zdCBjaGFyICpyZWNvcmQpIHsKKyAgaWYgKGxvZ0ZpbGUpIHsKKyAgICBsb2NrU3RyZWFtKGxvZ0ZpbGUpOworCisgICAgeworICAgICAgVGltZVZhbHVlIG5vdzsKKyAgICAgIGNoYXIgYnVmZmVyWzBYMjBdOworICAgICAgc2l6ZV90IGxlbmd0aDsKKyAgICAgIHVuc2lnbmVkIGludCBtaWxsaXNlY29uZHM7CisKKyAgICAgIGdldEN1cnJlbnRUaW1lKCZub3cpOworICAgICAgbGVuZ3RoID0gZm9ybWF0U2Vjb25kcyhidWZmZXIsIHNpemVvZihidWZmZXIpLCAiJVktJW0tJWRAJUg6JU06JVMiLCBub3cuc2Vjb25kcyk7CisgICAgICBtaWxsaXNlY29uZHMgPSBub3cubmFub3NlY29uZHMgLyBOU0VDU19QRVJfTVNFQzsKKworICAgICAgZnByaW50Zihsb2dGaWxlLCAiJS4qcy4lMDN1ICIsIChpbnQpbGVuZ3RoLCBidWZmZXIsIG1pbGxpc2Vjb25kcyk7CisgICAgfQorCisgICAgeworICAgICAgY2hhciBuYW1lWzBYNDBdOworICAgICAgc2l6ZV90IGxlbmd0aCA9IGZvcm1hdFRocmVhZE5hbWUobmFtZSwgc2l6ZW9mKG5hbWUpKTsKKworICAgICAgaWYgKGxlbmd0aCkgZnByaW50Zihsb2dGaWxlLCAiWyVzXSAiLCBuYW1lKTsKKyAgICB9CisKKyAgICBmcHV0cyhyZWNvcmQsIGxvZ0ZpbGUpOworICAgIGZwdXRjKCdcbicsIGxvZ0ZpbGUpOworICAgIGZsdXNoU3RyZWFtKGxvZ0ZpbGUpOworICAgIHVubG9ja1N0cmVhbShsb2dGaWxlKTsKKyAgfQorfQorCit2b2lkCitvcGVuU3lzdGVtTG9nICh2b2lkKSB7CisjaWYgZGVmaW5lZChXSU5ET1dTKQorICBpZiAod2luZG93c0V2ZW50TG9nID09IElOVkFMSURfSEFORExFX1ZBTFVFKSB7CisgICAgd2luZG93c0V2ZW50TG9nID0gUmVnaXN0ZXJFdmVudFNvdXJjZShOVUxMLCBQQUNLQUdFX1RBUk5BTUUpOworICB9CisKKyNlbGlmIGRlZmluZWQoX19NU0RPU19fKQorICBpZiAoIWxvZ0ZpbGUpIHsKKyAgICBjaGFyICpwYXRoID0gbWFrZVdyaXRhYmxlUGF0aChQQUNLQUdFX1RBUk5BTUUgIi5sb2ciKTsKKworICAgIGlmIChwYXRoKSB7CisgICAgICBvcGVuTG9nRmlsZShwYXRoKTsKKyAgICAgIGZyZWUocGF0aCk7CisgICAgfQorICB9CisKKyNlbGlmIGRlZmluZWQoX19BTkRST0lEX18pCisKKyNlbGlmIGRlZmluZWQoSEFWRV9TWVNMT0dfSCkKKyAgaWYgKCFzeXNsb2dPcGVuZWQpIHsKKyAgICBvcGVubG9nKFBBQ0tBR0VfVEFSTkFNRSwgTE9HX1BJRCwgTE9HX0RBRU1PTik7CisgICAgc3lzbG9nT3BlbmVkID0gMTsKKyAgfQorI2VuZGlmIC8qIG9wZW4gc3lzdGVtIGxvZyAqLworfQorCit2b2lkCitjbG9zZVN5c3RlbUxvZyAodm9pZCkgeworI2lmIGRlZmluZWQoV0lORE9XUykKKyAgaWYgKHdpbmRvd3NFdmVudExvZyAhPSBJTlZBTElEX0hBTkRMRV9WQUxVRSkgeworICAgIERlcmVnaXN0ZXJFdmVudFNvdXJjZSh3aW5kb3dzRXZlbnRMb2cpOworICAgIHdpbmRvd3NFdmVudExvZyA9IElOVkFMSURfSEFORExFX1ZBTFVFOworICB9CisKKyNlbGlmIGRlZmluZWQoX19NU0RPU19fKQorICBjbG9zZUxvZ0ZpbGUoKTsKKworI2VsaWYgZGVmaW5lZChfX0FORFJPSURfXykKKworI2VsaWYgZGVmaW5lZChIQVZFX1NZU0xPR19IKQorICBpZiAoc3lzbG9nT3BlbmVkKSB7CisgICAgY2xvc2Vsb2coKTsKKyAgICBzeXNsb2dPcGVuZWQgPSAwOworICB9CisjZW5kaWYgLyogY2xvc2Ugc3lzdGVtIGxvZyAqLworfQorCitpbnQKK2xvZ0RhdGEgKGludCBsZXZlbCwgTG9nRGF0YUZvcm1hdHRlciAqZm9ybWF0TG9nRGF0YSwgY29uc3Qgdm9pZCAqZGF0YSkgeworICBMb2dDYXRlZ29yeUluZGV4IGNhdGVnb3J5ID0gbGV2ZWwgPj4gTE9HX0xFVkVMX1dJRFRIOworICBsZXZlbCAmPSBMT0dfTEVWRUxfTUFTSzsKKworICBjb25zdCBjaGFyICpwcmVmaXg7CisgIGludCBwdXNoOworCisgIGlmIChjYXRlZ29yeSkgeworICAgIGNhdGVnb3J5IC09IDE7CisKKyAgICBpZiAoIWxvZ0NhdGVnb3J5RmxhZ3NbY2F0ZWdvcnldKSByZXR1cm4gMDsKKyAgICBpZiAoIWxldmVsKSBsZXZlbCA9IGNhdGVnb3J5TG9nTGV2ZWw7CisKKyAgICBjb25zdCBMb2dDYXRlZ29yeUVudHJ5ICpjdGcgPSAmbG9nQ2F0ZWdvcnlUYWJsZVtjYXRlZ29yeV07CisgICAgcHJlZml4ID0gY3RnLT5wcmVmaXg7CisgICAgcHVzaCA9IDA7CisgIH0gZWxzZSB7CisgICAgcHJlZml4ID0gTlVMTDsKKyAgICBwdXNoID0gbGV2ZWwgPD0gTE9HX1dBUk5JTkc7CisgIH0KKworICBpbnQgd3JpdGUgPSBsZXZlbCA8PSBzeXN0ZW1Mb2dMZXZlbDsKKyAgaW50IHByaW50ID0gbGV2ZWwgPD0gc3RkZXJyTG9nTGV2ZWw7CisgIGlmICghKHdyaXRlIHx8IHByaW50IHx8IHB1c2gpKSByZXR1cm4gMDsKKworICBpbnQgb2xkRXJybm8gPSBlcnJubzsKKworICBjaGFyIHJlY29yZFswWDEwMDBdOworICBTVFJfQkVHSU4ocmVjb3JkLCBzaXplb2YocmVjb3JkKSk7CisgIGlmIChwcmVmaXgpIFNUUl9QUklOVEYoIiVzOiAiLCBwcmVmaXgpOworICBTVFJfRk9STUFUKGZvcm1hdExvZ0RhdGEsIGRhdGEpOworICBTVFJfRU5EOworCisgIGlmICh3cml0ZSkgeworICAgIHdyaXRlTG9nUmVjb3JkKHJlY29yZCk7CisKKyNpZiBkZWZpbmVkKFdJTkRPV1MpCisgICAgaWYgKHdpbmRvd3NFdmVudExvZyAhPSBJTlZBTElEX0hBTkRMRV9WQUxVRSkgeworICAgICAgY29uc3QgY2hhciAqc3RyaW5nc1tdID0ge3JlY29yZH07CisKKyAgICAgIFJlcG9ydEV2ZW50KAorICAgICAgICB3aW5kb3dzRXZlbnRMb2csIHRvV2luZG93c0V2ZW50VHlwZShsZXZlbCksIDAsIDAsIE5VTEwsCisgICAgICAgIEFSUkFZX0NPVU5UKHN0cmluZ3MpLCAwLCBzdHJpbmdzLCBOVUxMCisgICAgICApOworICAgIH0KKworI2VsaWYgZGVmaW5lZChfX01TRE9TX18pCisKKyNlbGlmIGRlZmluZWQoX19BTkRST0lEX18pCisgICAgX19hbmRyb2lkX2xvZ193cml0ZSgKKyAgICAgIHRvQW5kcm9pZExvZ1ByaW9yaXR5KGxldmVsKSwgUEFDS0FHRV9UQVJOQU1FLCByZWNvcmQKKyAgICApOworCisjZWxpZiBkZWZpbmVkKEhBVkVfU1lTTE9HX0gpCisgICAgaWYgKHN5c2xvZ09wZW5lZCkgc3lzbG9nKGxldmVsLCAiJXMiLCByZWNvcmQpOworI2VuZGlmIC8qIHdyaXRlIHN5c3RlbSBsb2cgKi8KKyAgfQorCisgIGlmIChwcmludCkgeworICAgIEZJTEUgKnN0cmVhbSA9IHN0ZGVycjsKKyAgICBsb2NrU3RyZWFtKHN0cmVhbSk7CisKKyAgICBpZiAobG9nUHJlZml4U3RhY2spIHsKKyAgICAgIGNvbnN0IGNoYXIgKnByZWZpeCA9IGdldExvZ0VudHJ5VGV4dChsb2dQcmVmaXhTdGFjayk7CisKKyAgICAgIGlmICgqcHJlZml4KSB7CisgICAgICAgIGZwdXRzKHByZWZpeCwgc3RyZWFtKTsKKyAgICAgICAgZnB1dHMoIjogIiwgc3RyZWFtKTsKKyAgICAgIH0KKyAgICB9CisKKyAgICB3cml0ZVdpdGhDb25zb2xlRW5jb2Rpbmcoc3RyZWFtLCByZWNvcmQsIHN0cmxlbihyZWNvcmQpKTsKKyAgICBmcHV0YygnXG4nLCBzdHJlYW0pOworCisgICAgZmx1c2hTdHJlYW0oc3RyZWFtKTsKKyAgICB1bmxvY2tTdHJlYW0oc3RyZWFtKTsKKyAgfQorCisgIGlmIChwdXNoKSBwdXNoTG9nTWVzc2FnZShyZWNvcmQpOworICBlcnJubyA9IG9sZEVycm5vOworICByZXR1cm4gMTsKK30KKworc3RhdGljIHNpemVfdAorZm9ybWF0TG9nQXJndW1lbnRzIChjaGFyICpidWZmZXIsIHNpemVfdCBzaXplLCBjb25zdCBjaGFyICpmb3JtYXQsIHZhX2xpc3QgKmFyZ3VtZW50cykgeworICBpbnQgbGVuZ3RoID0gdnNucHJpbnRmKGJ1ZmZlciwgc2l6ZSwgZm9ybWF0LCAqYXJndW1lbnRzKTsKKyAgaWYgKGxlbmd0aCA8IDApIHJldHVybiAwOworICBpZiAobGVuZ3RoIDwgc2l6ZSkgcmV0dXJuIGxlbmd0aDsKKyAgcmV0dXJuIHNpemU7Cit9CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgY29uc3QgY2hhciAqZm9ybWF0OworICB2YV9saXN0ICphcmd1bWVudHM7Cit9IExvZ01lc3NhZ2VEYXRhOworCitzdGF0aWMgc2l6ZV90Citmb3JtYXRMb2dNZXNzYWdlRGF0YSAoY2hhciAqYnVmZmVyLCBzaXplX3Qgc2l6ZSwgY29uc3Qgdm9pZCAqZGF0YSkgeworICBjb25zdCBMb2dNZXNzYWdlRGF0YSAqbXNnID0gZGF0YTsKKyAgcmV0dXJuIGZvcm1hdExvZ0FyZ3VtZW50cyhidWZmZXIsIHNpemUsIG1zZy0+Zm9ybWF0LCBtc2ctPmFyZ3VtZW50cyk7Cit9CisKK2ludAordmxvZ01lc3NhZ2UgKGludCBsZXZlbCwgY29uc3QgY2hhciAqZm9ybWF0LCB2YV9saXN0ICphcmd1bWVudHMpIHsKKyAgY29uc3QgTG9nTWVzc2FnZURhdGEgbXNnID0geworICAgIC5mb3JtYXQgPSBmb3JtYXQsCisgICAgLmFyZ3VtZW50cyA9IGFyZ3VtZW50cworICB9OworCisgIHJldHVybiBsb2dEYXRhKGxldmVsLCBmb3JtYXRMb2dNZXNzYWdlRGF0YSwgJm1zZyk7Cit9CisKK2ludAorbG9nTWVzc2FnZSAoaW50IGxldmVsLCBjb25zdCBjaGFyICpmb3JtYXQsIC4uLikgeworICBpbnQgd2FzTG9nZ2VkOworICB2YV9saXN0IGFyZ3VtZW50czsKKworICB2YV9zdGFydChhcmd1bWVudHMsIGZvcm1hdCk7CisgIHdhc0xvZ2dlZCA9IHZsb2dNZXNzYWdlKGxldmVsLCBmb3JtYXQsICZhcmd1bWVudHMpOworICB2YV9lbmQoYXJndW1lbnRzKTsKKworICByZXR1cm4gd2FzTG9nZ2VkOworfQorCit0eXBlZGVmIHN0cnVjdCB7CisgIGNvbnN0IGNoYXIgKmxhYmVsOworICB2YV9saXN0ICphcmd1bWVudHM7CisgIGNvbnN0IHZvaWQgKmRhdGE7CisgIHNpemVfdCBsZW5ndGg7Cit9IExvZ0J5dGVzRGF0YTsKKworc3RhdGljCitTVFJfQkVHSU5fRk9STUFUVEVSKGZvcm1hdExvZ0J5dGVzRGF0YSwgY29uc3Qgdm9pZCAqZGF0YSkKKyAgY29uc3QgTG9nQnl0ZXNEYXRhICpieXRlcyA9IGRhdGE7CisgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ5dGUgPSBieXRlcy0+ZGF0YTsKKyAgY29uc3QgdW5zaWduZWQgY2hhciAqZW5kID0gYnl0ZSArIGJ5dGVzLT5sZW5ndGg7CisKKyAgaWYgKGJ5dGVzLT5sYWJlbCkgeworICAgIFNUUl9GT1JNQVQoZm9ybWF0TG9nQXJndW1lbnRzLCBieXRlcy0+bGFiZWwsIGJ5dGVzLT5hcmd1bWVudHMpOworICAgIFNUUl9QUklOVEYoIjogIik7CisgIH0KKworICB3aGlsZSAoYnl0ZSA8IGVuZCkgeworICAgIGlmIChieXRlICE9IGJ5dGVzLT5kYXRhKSBTVFJfUFJJTlRGKCIgIik7CisgICAgU1RSX1BSSU5URigiJTIuMlgiLCAqYnl0ZSsrKTsKKyAgfQorU1RSX0VORF9GT1JNQVRURVIKKworaW50Citsb2dCeXRlcyAoaW50IGxldmVsLCBjb25zdCBjaGFyICpsYWJlbCwgY29uc3Qgdm9pZCAqZGF0YSwgc2l6ZV90IGxlbmd0aCwgLi4uKSB7CisgIGludCB3YXNMb2dnZWQ7CisgIHZhX2xpc3QgYXJndW1lbnRzOworCisgIHZhX3N0YXJ0KGFyZ3VtZW50cywgbGVuZ3RoKTsKKyAgeworICAgIGNvbnN0IExvZ0J5dGVzRGF0YSBieXRlcyA9IHsKKyAgICAgIC5sYWJlbCA9IGxhYmVsLAorICAgICAgLmFyZ3VtZW50cyA9ICZhcmd1bWVudHMsCisgICAgICAuZGF0YSA9IGRhdGEsCisgICAgICAubGVuZ3RoID0gbGVuZ3RoCisgICAgfTsKKworICAgIHdhc0xvZ2dlZCA9IGxvZ0RhdGEobGV2ZWwsIGZvcm1hdExvZ0J5dGVzRGF0YSwgJmJ5dGVzKTsKKyAgfQorICB2YV9lbmQoYXJndW1lbnRzKTsKKworICByZXR1cm4gd2FzTG9nZ2VkOworfQorCit0eXBlZGVmIHN0cnVjdCB7CisgIHZvaWQgKmFkZHJlc3M7CisgIGNvbnN0IGNoYXIgKmZvcm1hdDsKKyAgdmFfbGlzdCAqYXJndW1lbnRzOworfSBMb2dTeW1ib2xEYXRhOworCitzdGF0aWMKK1NUUl9CRUdJTl9GT1JNQVRURVIoZm9ybWF0TG9nU3ltYm9sRGF0YSwgY29uc3Qgdm9pZCAqZGF0YSkKKyAgY29uc3QgTG9nU3ltYm9sRGF0YSAqc3ltYm9sID0gZGF0YTsKKyAgcHRyZGlmZl90IG9mZnNldCA9IDA7CisgIGNvbnN0IGNoYXIgKm5hbWUgPSBnZXRBZGRyZXNzTmFtZShzeW1ib2wtPmFkZHJlc3MsICZvZmZzZXQpOworCisgIFNUUl9GT1JNQVQoZm9ybWF0TG9nQXJndW1lbnRzLCBzeW1ib2wtPmZvcm1hdCwgc3ltYm9sLT5hcmd1bWVudHMpOworICBTVFJfUFJJTlRGKCI6ICIpOworCisgIGlmIChuYW1lICYmICpuYW1lKSB7CisgICAgU1RSX1BSSU5URigiJXMiLCBuYW1lKTsKKyAgICBpZiAob2Zmc2V0KSBTVFJfUFJJTlRGKCIrJSJQUklYUFRSLCAodWludHB0cl90KW9mZnNldCk7CisgIH0gZWxzZSB7CisgICAgU1RSX1BSSU5URigiJXAiLCBzeW1ib2wtPmFkZHJlc3MpOworICB9CitTVFJfRU5EX0ZPUk1BVFRFUgorCitpbnQKK2xvZ1N5bWJvbCAoaW50IGxldmVsLCB2b2lkICphZGRyZXNzLCBjb25zdCBjaGFyICpmb3JtYXQsIC4uLikgeworICBpbnQgd2FzTG9nZ2VkOworICB2YV9saXN0IGFyZ3VtZW50czsKKworICB2YV9zdGFydChhcmd1bWVudHMsIGZvcm1hdCk7CisgIHsKKyAgICBjb25zdCBMb2dTeW1ib2xEYXRhIHN5bWJvbCA9IHsKKyAgICAgIC5hZGRyZXNzID0gYWRkcmVzcywKKyAgICAgIC5mb3JtYXQgPSBmb3JtYXQsCisgICAgICAuYXJndW1lbnRzID0gJmFyZ3VtZW50cworICAgIH07CisKKyAgICB3YXNMb2dnZWQgPSBsb2dEYXRhKGxldmVsLCBmb3JtYXRMb2dTeW1ib2xEYXRhLCAmc3ltYm9sKTsKKyAgfQorICB2YV9lbmQoYXJndW1lbnRzKTsKKworICByZXR1cm4gd2FzTG9nZ2VkOworfQorCitpbnQKK2xvZ0FjdGlvblByb2JsZW0gKGludCBsZXZlbCwgaW50IGVycm9yLCBjb25zdCBjaGFyICphY3Rpb24pIHsKKyAgcmV0dXJuIGxvZ01lc3NhZ2UobGV2ZWwsICIlcyBlcnJvciAlZDogJXMiLCBhY3Rpb24sIGVycm9yLCBzdHJlcnJvcihlcnJvcikpOworfQorCitpbnQKK2xvZ0FjdGlvbkVycm9yIChpbnQgZXJyb3IsIGNvbnN0IGNoYXIgKmFjdGlvbikgeworICByZXR1cm4gbG9nQWN0aW9uUHJvYmxlbShMT0dfRVJSLCBlcnJvciwgYWN0aW9uKTsKK30KKworaW50Citsb2dTeXN0ZW1Qcm9ibGVtIChpbnQgbGV2ZWwsIGNvbnN0IGNoYXIgKmFjdGlvbikgeworICByZXR1cm4gbG9nQWN0aW9uUHJvYmxlbShsZXZlbCwgZXJybm8sIGFjdGlvbik7Cit9CisKK2ludAorbG9nU3lzdGVtRXJyb3IgKGNvbnN0IGNoYXIgKmFjdGlvbikgeworICByZXR1cm4gbG9nU3lzdGVtUHJvYmxlbShMT0dfRVJSLCBhY3Rpb24pOworfQorCitpbnQKK2xvZ01hbGxvY0Vycm9yICh2b2lkKSB7CisgIHJldHVybiBsb2dTeXN0ZW1FcnJvcigibWFsbG9jIik7Cit9CisKK2ludAorbG9nVW5zdXBwb3J0ZWRGZWF0dXJlIChjb25zdCBjaGFyICpuYW1lKSB7CisgIHJldHVybiBsb2dNZXNzYWdlKExPR19XQVJOSU5HLCAiZmVhdHVyZSBub3Qgc3VwcG9ydGVkOiAlcyIsIG5hbWUpOworfQorCitpbnQKK2xvZ1Vuc3VwcG9ydGVkT3BlcmF0aW9uIChjb25zdCBjaGFyICpuYW1lKSB7CisgIGVycm5vID0gRU5PU1lTOworICByZXR1cm4gbG9nU3lzdGVtRXJyb3IobmFtZSk7Cit9CisKK2ludAorbG9nUG9zc2libGVDYXVzZSAoY29uc3QgY2hhciAqY2F1c2UpIHsKKyAgcmV0dXJuIGxvZ01lc3NhZ2UoTE9HX1dBUk5JTkcsICJwb3NzaWJsZSBjYXVzZTogJXMiLCBjYXVzZSk7Cit9CisKKyNpZmRlZiBXSU5ET1dTCitpbnQKK2xvZ1dpbmRvd3NFcnJvciAoRFdPUkQgZXJyb3IsIGNvbnN0IGNoYXIgKmFjdGlvbikgeworICBjaGFyICptZXNzYWdlOworICBEV09SRCBjb3VudCA9IEZvcm1hdE1lc3NhZ2UoRk9STUFUX01FU1NBR0VfQUxMT0NBVEVfQlVGRkVSIHwgRk9STUFUX01FU1NBR0VfRlJPTV9TWVNURU0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCBlcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1BS0VMQU5HSUQoTEFOR19ORVVUUkFMLCBTVUJMQU5HX0RFRkFVTFQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYXIgKikmbWVzc2FnZSwgMCwgTlVMTCk7CisKKyAgaWYgKGNvdW50KSB7CisgICAgY2hhciAqZW5kID0gc3RycGJyayhtZXNzYWdlLCAiXHJcbiIpOworCisgICAgaWYgKGVuZCkgKmVuZCA9IDA7CisgIH0gZWxzZSB7CisgICAgbWVzc2FnZSA9ICJ1bmtub3duIjsKKyAgfQorCisgIGludCB3YXNMb2dnZWQgPSBsb2dNZXNzYWdlKExPR19FUlIsICIlcyBlcnJvciAlZDogJXMiLCBhY3Rpb24sIChpbnQpZXJyb3IsIG1lc3NhZ2UpOworICBpZiAoY291bnQpIExvY2FsRnJlZShtZXNzYWdlKTsKKyAgcmV0dXJuIHdhc0xvZ2dlZDsKK30KKworaW50Citsb2dXaW5kb3dzU3lzdGVtRXJyb3IgKGNvbnN0IGNoYXIgKmFjdGlvbikgeworICBEV09SRCBlcnJvciA9IEdldExhc3RFcnJvcigpOworICByZXR1cm4gbG9nV2luZG93c0Vycm9yKGVycm9yLCBhY3Rpb24pOworfQorCisjaWZkZWYgX19NSU5HVzMyX18KK2ludAorbG9nV2luZG93c1NvY2tldEVycm9yIChjb25zdCBjaGFyICphY3Rpb24pIHsKKyAgRFdPUkQgZXJyb3IgPSBXU0FHZXRMYXN0RXJyb3IoKTsKKyAgcmV0dXJuIGxvZ1dpbmRvd3NFcnJvcihlcnJvciwgYWN0aW9uKTsKK30KKyNlbmRpZiAvKiBfX01JTkdXMzJfXyAqLworI2VuZGlmIC8qIFdJTkRPV1MgKi8KKworc3RhdGljIGludAorbG9nQmFja3RyYWNlU3RyaW5nIChjb25zdCBjaGFyICpzdHJpbmcpIHsKKyAgcmV0dXJuIGxvZ01lc3NhZ2UoTE9HX0RFQlVHLCAiYmFja3RyYWNlOiAlcyIsIHN0cmluZyk7Cit9CisKKyNpZiBkZWZpbmVkKEhBVkVfRVhFQ0lORk9fSCkKKyNpbmNsdWRlIDxleGVjaW5mby5oPgorCitpbnQKK2xvZ0JhY2t0cmFjZSAodm9pZCkgeworICBjb25zdCBpbnQgbGltaXQgPSAzMDsKKyAgdm9pZCAqZnJhbWVzW2xpbWl0XTsKKyAgaW50IGNvdW50ID0gYmFja3RyYWNlKGZyYW1lcywgbGltaXQpOworCisgIGlmIChjb3VudCA+IDApIHsKKyAgICBjaGFyICoqc3RyaW5nczsKKworICAgIGlmICgoc3RyaW5ncyA9IGJhY2t0cmFjZV9zeW1ib2xzKGZyYW1lcywgY291bnQpKSkgeworICAgICAgY2hhciAqKnN0cmluZyA9IHN0cmluZ3M7CisgICAgICBjaGFyICoqZW5kID0gc3RyaW5nICsgY291bnQ7CisKKyAgICAgIHdoaWxlIChzdHJpbmcgPCBlbmQpIHsKKyAgICAgICAgaWYgKCFsb2dCYWNrdHJhY2VTdHJpbmcoKnN0cmluZykpIHJldHVybiAwOworICAgICAgICBzdHJpbmcgKz0gMTsKKyAgICAgIH0KKworICAgICAgaWYgKGNvdW50ID09IGxpbWl0KSB7CisgICAgICAgIGlmICghbG9nQmFja3RyYWNlU3RyaW5nKCIuLi4iKSkgcmV0dXJuIDA7CisgICAgICB9CisKKyAgICAgIGZyZWUoc3RyaW5ncyk7CisgICAgfSBlbHNlIHsKKyAgICAgIGxvZ1N5c3RlbUVycm9yKCJiYWNrdHJhY2Vfc3ltYm9scyIpOworICAgIH0KKyAgfSBlbHNlIHsKKyAgICBpZiAoIWxvZ0JhY2t0cmFjZVN0cmluZygibm8gZnJhbWVzIikpIHJldHVybiAwOworICB9CisKKyAgcmV0dXJuIDE7Cit9CisKKyNlbHNlIC8qIGxvZyBiYWNrdHJhY2UgKi8KK2ludAorbG9nQmFja3RyYWNlICh2b2lkKSB7CisgIHJldHVybiBsb2dCYWNrdHJhY2VTdHJpbmcoIm5vdCBzdXBwb3J0ZWQiKTsKK30KKyNlbmRpZiAvKiBsb2cgYmFja3RyYWNlICovCmRpZmYgLS1naXQgYS9Qcm9ncmFtcy9sb2dfaGlzdG9yeS5jIGIvUHJvZ3JhbXMvbG9nX2hpc3RvcnkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YTFkY2UxCi0tLSAvZGV2L251bGwKKysrIGIvUHJvZ3JhbXMvbG9nX2hpc3RvcnkuYwpAQCAtMCwwICsxLDEyNyBAQAorLyoKKyAqIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisgKiAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisgKgorICogQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKKyNpbmNsdWRlICJwcm9sb2d1ZS5oIgorCisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKyNpbmNsdWRlICJsb2cuaCIKKyNpbmNsdWRlICJsb2dfaGlzdG9yeS5oIgorI2luY2x1ZGUgInRpbWluZy5oIgorCitzdHJ1Y3QgTG9nRW50cnlTdHJ1Y3QgeworICBzdHJ1Y3QgTG9nRW50cnlTdHJ1Y3QgKnByZXZpb3VzOworICBUaW1lVmFsdWUgdGltZTsKKyAgdW5zaWduZWQgaW50IGNvdW50OworICB1bnNpZ25lZCBub1NxdWFzaDoxOworICBjaGFyIHRleHRbMF07Cit9OworCitjb25zdCBMb2dFbnRyeSAqCitnZXRQcmV2aW91c0xvZ0VudHJ5IChjb25zdCBMb2dFbnRyeSAqZW50cnkpIHsKKyAgcmV0dXJuIGVudHJ5LT5wcmV2aW91czsKK30KKworY29uc3QgY2hhciAqCitnZXRMb2dFbnRyeVRleHQgKGNvbnN0IExvZ0VudHJ5ICplbnRyeSkgeworICByZXR1cm4gZW50cnktPnRleHQ7Cit9CisKK2NvbnN0IFRpbWVWYWx1ZSAqCitnZXRMb2dFbnRyeVRpbWUgKGNvbnN0IExvZ0VudHJ5ICplbnRyeSkgeworICByZXR1cm4gJmVudHJ5LT50aW1lOworfQorCit1bnNpZ25lZCBpbnQKK2dldExvZ0VudHJ5Q291bnQgKGNvbnN0IExvZ0VudHJ5ICplbnRyeSkgeworICByZXR1cm4gZW50cnktPmNvdW50OworfQorCitpbnQKK3B1c2hMb2dFbnRyeSAoTG9nRW50cnkgKipoZWFkLCBjb25zdCBjaGFyICp0ZXh0LCBMb2dFbnRyeVB1c2hPcHRpb25zIG9wdGlvbnMpIHsKKyAgaW50IGxvZyA9ICEob3B0aW9ucyAmIExQT19OT0xPRyk7CisgIExvZ0VudHJ5ICplbnRyeSA9IE5VTEw7CisKKyAgaWYgKG9wdGlvbnMgJiBMUE9fU1FVQVNIKSB7CisgICAgaWYgKChlbnRyeSA9ICpoZWFkKSkgeworICAgICAgaWYgKCFlbnRyeS0+bm9TcXVhc2ggJiYgKHN0cmNtcChlbnRyeS0+dGV4dCwgdGV4dCkgPT0gMCkpIHsKKyAgICAgICAgZW50cnktPmNvdW50ICs9IDE7CisgICAgICB9IGVsc2UgeworICAgICAgICBlbnRyeSA9IE5VTEw7CisgICAgICB9CisgICAgfQorICB9CisKKyAgaWYgKCFlbnRyeSkgeworICAgIGNvbnN0IHNpemVfdCBzaXplID0gc2l6ZW9mKCplbnRyeSkgKyBzdHJsZW4odGV4dCkgKyAxOworCisgICAgaWYgKCEoZW50cnkgPSBtYWxsb2Moc2l6ZSkpKSB7CisgICAgICBpZiAobG9nKSBsb2dNYWxsb2NFcnJvcigpOworICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgbWVtc2V0KGVudHJ5LCAwLCBzaXplb2YoKmVudHJ5KSk7CisgICAgZW50cnktPmNvdW50ID0gMTsKKyAgICBzdHJjcHkoZW50cnktPnRleHQsIHRleHQpOworCisgICAgZW50cnktPnByZXZpb3VzID0gKmhlYWQ7CisgICAgKmhlYWQgPSBlbnRyeTsKKyAgfQorCisgIGdldEN1cnJlbnRUaW1lKCZlbnRyeS0+dGltZSk7CisgIHJldHVybiAxOworfQorCitpbnQKK3BvcExvZ0VudHJ5IChMb2dFbnRyeSAqKmhlYWQpIHsKKyAgaWYgKCEqaGVhZCkgcmV0dXJuIDA7CisgIExvZ0VudHJ5ICplbnRyeSA9ICpoZWFkOworICAqaGVhZCA9IGVudHJ5LT5wcmV2aW91czsKKyAgZnJlZShlbnRyeSk7CisgIHJldHVybiAxOworfQorCitzdGF0aWMgQ3JpdGljYWxTZWN0aW9uTG9jayBsb2dNZXNzYWdlTG9jayA9IENSSVRJQ0FMX1NFQ1RJT05fTE9DS19JTklUSUFMSVpFUjsKKworc3RhdGljIHZvaWQKK2xvY2tMb2dNZXNzYWdlcyAodm9pZCkgeworICBlbnRlckNyaXRpY2FsU2VjdGlvbigmbG9nTWVzc2FnZUxvY2spOworfQorCitzdGF0aWMgdm9pZAordW5sb2NrTG9nTWVzc2FnZXMgKHZvaWQpIHsKKyAgbGVhdmVDcml0aWNhbFNlY3Rpb24oJmxvZ01lc3NhZ2VMb2NrKTsKK30KKworc3RhdGljIExvZ0VudHJ5ICpsb2dNZXNzYWdlU3RhY2sgPSBOVUxMOworCitjb25zdCBMb2dFbnRyeSAqCitnZXROZXdlc3RMb2dNZXNzYWdlIChpbnQgZnJlZXplKSB7CisgIGxvY2tMb2dNZXNzYWdlcygpOworICBMb2dFbnRyeSAqbWVzc2FnZSA9IGxvZ01lc3NhZ2VTdGFjazsKKyAgaWYgKGZyZWV6ZSAmJiBtZXNzYWdlKSBtZXNzYWdlLT5ub1NxdWFzaCA9IDE7CisgIHVubG9ja0xvZ01lc3NhZ2VzKCk7CisgIHJldHVybiBtZXNzYWdlOworfQorCit2b2lkCitwdXNoTG9nTWVzc2FnZSAoY29uc3QgY2hhciAqbWVzc2FnZSkgeworICBsb2NrTG9nTWVzc2FnZXMoKTsKKyAgcHVzaExvZ0VudHJ5KCZsb2dNZXNzYWdlU3RhY2ssIG1lc3NhZ2UsIChMUE9fTk9MT0cgfCBMUE9fU1FVQVNIKSk7CisgIHVubG9ja0xvZ01lc3NhZ2VzKCk7Cit9CmRpZmYgLS1naXQgYS9Qcm9ncmFtcy9tZW51LmMgYi9Qcm9ncmFtcy9tZW51LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDE2ZjNhMQotLS0gL2Rldi9udWxsCisrKyBiL1Byb2dyYW1zL21lbnUuYwpAQCAtMCwwICsxLDExMzUgQEAKKy8qCisgKiBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorICogICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorICoKKyAqIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorICoKKyAqIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyAqLworCisjaW5jbHVkZSAicHJvbG9ndWUuaCIKKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkYXJnLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxmY250bC5oPgorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisKKyNpZmRlZiBIQVZFX0xBTkdJTkZPX0gKKyNpbmNsdWRlIDxsYW5naW5mby5oPgorI2VuZGlmIC8qIEhBVkVfTEFOR0lORk9fSCAqLworCisjdW5kZWYgQ0FOX0dMT0IKKyNpZiBkZWZpbmVkKEhBVkVfR0xPQikKKyNkZWZpbmUgQ0FOX0dMT0IKKyNpbmNsdWRlIDxnbG9iLmg+CisKKyNlbGlmIGRlZmluZWQoX19NSU5HVzMyX18pCisjZGVmaW5lIENBTl9HTE9CCisjaW5jbHVkZSA8aW8uaD4KKworI2Vsc2UgLyogZ2xvYjogcGFyYWRpZ20tc3BlY2lmaWMgZ2xvYmFsIGRlZmluaXRpb25zICovCisjd2FybmluZyBmaWxlIGdsb2JiaW5nIHN1cHBvcnQgbm90IGF2YWlsYWJsZSBvbiB0aGlzIHBsYXRmb3JtCisjZW5kaWYgLyogZ2xvYjogcGFyYWRpZ20tc3BlY2lmaWMgZ2xvYmFsIGRlZmluaXRpb25zICovCisKKyNpbmNsdWRlICJsb2cuaCIKKyNpbmNsdWRlICJtZW51LmgiCisjaW5jbHVkZSAic3RyZm10LmgiCisjaW5jbHVkZSAicHJlZnMuaCIKKyNpbmNsdWRlICJ0aW1pbmcuaCIKKyNpbmNsdWRlICJwYXJzZS5oIgorI2luY2x1ZGUgImZpbGUuaCIKKwordHlwZWRlZiBzdHJ1Y3QgeworICBjaGFyICpkaXJlY3Rvcnk7CisgIGNvbnN0IGNoYXIgKmV4dGVuc2lvbjsKKyAgY29uc3QgY2hhciAqcGF0dGVybjsKKyAgY2hhciAqaW5pdGlhbDsKKyAgY2hhciAqY3VycmVudDsKKyAgdW5zaWduZWQgbm9uZToxOworCisjaWYgZGVmaW5lZChIQVZFX0dMT0IpCisgIGdsb2JfdCBnbG9iOworI2VsaWYgZGVmaW5lZChfX01JTkdXMzJfXykKKyAgY2hhciAqKm5hbWVzOworICBpbnQgb2Zmc2V0OworI2VuZGlmIC8qIGdsb2I6IHBhcmFkaWdtLXNwZWNpZmljIGZpZWxkIGRlY2xhcmF0aW9ucyAqLworCisgIGNoYXIgKipwYXRoczsKKyAgaW50IGNvdW50OworICB1bnNpZ25lZCBjaGFyIHNldHRpbmc7CisgIGNoYXIgKnBhdGhzQXJlYVszXTsKK30gRmlsZURhdGE7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgTWVudSAqbWVudTsKKyAgdW5zaWduZWQgb3BlbmVkOjE7CisKKyAgdW5zaWduZWQgaW50IHRvdGFsOworICB1bnNpZ25lZCBpbnQgdmlzaWJsZTsKK30gU3VibWVudURhdGE7CisKK3N0cnVjdCBNZW51U3RydWN0IHsKKyAgTWVudSAqcGFyZW50OworCisgIHN0cnVjdCB7CisgICAgTWVudUl0ZW0gKmFycmF5OworICAgIHVuc2lnbmVkIGludCBzaXplOworICAgIHVuc2lnbmVkIGludCBjb3VudDsKKyAgICB1bnNpZ25lZCBpbnQgaW5kZXg7CisgIH0gaXRlbXM7CisKKyAgdW5zaWduZWQgaW50IG1lbnVOdW1iZXI7CisgIHVuc2lnbmVkIGludCBzdWJtZW51Q291bnQ7CisgIE1lbnVJdGVtICphY3RpdmVJdGVtOworCisgIGNoYXIgdmFsdWVCdWZmZXJbMFgyMF07Cit9OworCit0eXBlZGVmIHN0cnVjdCB7CisgIGludCAoKnRlc3RJdGVtKSAoY29uc3QgTWVudUl0ZW0gKml0ZW0pOworICBpbnQgKCpiZWdpbkl0ZW0pIChNZW51SXRlbSAqaXRlbSk7CisgIHZvaWQgKCplbmRJdGVtKSAoTWVudUl0ZW0gKml0ZW0sIGludCBkZWFsbG9jYXRpbmcpOworICB2b2lkICgqYWN0aXZhdGVJdGVtKSAoTWVudUl0ZW0gKml0ZW0pOworICBjb25zdCBjaGFyICogKCpnZXRWYWx1ZSkgKGNvbnN0IE1lbnVJdGVtICppdGVtKTsKKyAgY29uc3QgY2hhciAqICgqZ2V0VGV4dCkgKGNvbnN0IE1lbnVJdGVtICppdGVtKTsKKyAgY29uc3QgY2hhciAqICgqZ2V0Q29tbWVudCkgKGNvbnN0IE1lbnVJdGVtICppdGVtKTsKK30gTWVudUl0ZW1NZXRob2RzOworCitzdHJ1Y3QgTWVudUl0ZW1TdHJ1Y3QgeworICBNZW51ICptZW51OworICB1bnNpZ25lZCBjaGFyICpzZXR0aW5nOyAgICAgICAgICAgICAgICAgLyogcG9pbnRlciB0byBjdXJyZW50IHZhbHVlICovCisKKyAgY29uc3QgY2hhciAqdGl0bGU7ICAgICAgICAgICAgICAgICAgICAgIC8qIGl0ZW0gbmFtZSBmb3IgcHJlc2VudGF0aW9uICovCisgIGNvbnN0IGNoYXIgKnN1YnRpdGxlOyAgICAgICAgICAgICAgICAgICAgICAvKiBpdGVtIG5hbWUgZm9yIHByZXNlbnRhdGlvbiAqLworCisgIGNvbnN0IE1lbnVJdGVtTWV0aG9kcyAqbWV0aG9kczsKKyAgTWVudUl0ZW1UZXN0ZXIgKnRlc3Q7ICAgICAgICAgICAgICAgICAgICAgLyogcmV0dXJucyB0cnVlIGlmIGl0ZW0gc2hvdWxkIGJlIHByZXNlbnRlZCAqLworICBNZW51SXRlbUNoYW5nZWQgKmNoYW5nZWQ7CisKKyAgdW5zaWduZWQgY2hhciBtaW5pbXVtOyAgICAgICAgICAgICAgICAgIC8qIGxvd2VzdCB2YWxpZCB2YWx1ZSAqLworICB1bnNpZ25lZCBjaGFyIG1heGltdW07ICAgICAgICAgICAgICAgICAgLyogaGlnaGVzdCB2YWxpZCB2YWx1ZSAqLworICB1bnNpZ25lZCBjaGFyIHN0ZXA7ICAgICAgICAgICAgICAgICAgLyogcHJlc2VudCBvbmx5IG11bHRpcGxlcyBvZiB0aGlzIHZhbHVlICovCisKKyAgdW5pb24geworICAgIGNvbnN0IGNoYXIgKnRleHQ7CisgICAgY29uc3QgTWVudVN0cmluZyAqc3RyaW5nczsKKyAgICBGaWxlRGF0YSAqZmlsZXM7CisgICAgU3VibWVudURhdGEgKnN1Ym1lbnU7CisKKyAgICBzdHJ1Y3QgeworICAgICAgY29uc3QgY2hhciAqdW5pdDsKKyAgICAgIE51bWVyaWNNZW51SXRlbUZvcm1hdHRlciAqZm9ybWF0dGVyOworICAgIH0gbnVtZXJpYzsKKworICAgIHN0cnVjdCB7CisgICAgICBNZW51VG9vbEZ1bmN0aW9uICpmdW5jdGlvbjsKKyAgICB9IHRvb2w7CisgIH0gZGF0YTsKK307CisKK3N0YXRpYyBpbmxpbmUgY29uc3QgY2hhciAqCitnZXRMb2NhbGl6ZWRUZXh0IChjb25zdCBjaGFyICpzdHJpbmcpIHsKKyAgcmV0dXJuIChzdHJpbmcgJiYgKnN0cmluZyk/IGdldHRleHQoc3RyaW5nKTogIiI7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICoKK2Zvcm1hdFZhbHVlIChNZW51ICptZW51LCBjb25zdCBjaGFyICpmb3JtYXQsIC4uLikgeworICB7CisgICAgdmFfbGlzdCBhcmd1bWVudHM7CisKKyAgICB2YV9zdGFydChhcmd1bWVudHMsIGZvcm1hdCk7CisgICAgdnNucHJpbnRmKG1lbnUtPnZhbHVlQnVmZmVyLCBzaXplb2YobWVudS0+dmFsdWVCdWZmZXIpLCBmb3JtYXQsIGFyZ3VtZW50cyk7CisgICAgdmFfZW5kKGFyZ3VtZW50cyk7CisgIH0KKworICByZXR1cm4gbWVudS0+dmFsdWVCdWZmZXI7Cit9CisKK01lbnUgKgorbmV3TWVudSAodm9pZCkgeworICBNZW51ICptZW51OworCisgIGlmICgobWVudSA9IG1hbGxvYyhzaXplb2YoKm1lbnUpKSkpIHsKKyAgICBtZW1zZXQobWVudSwgMCwgc2l6ZW9mKCptZW51KSk7CisgICAgbWVudS0+cGFyZW50ID0gTlVMTDsKKworICAgIG1lbnUtPml0ZW1zLmFycmF5ID0gTlVMTDsKKyAgICBtZW51LT5pdGVtcy5zaXplID0gMDsKKyAgICBtZW51LT5pdGVtcy5jb3VudCA9IDA7CisgICAgbWVudS0+aXRlbXMuaW5kZXggPSAwOworCisgICAgbWVudS0+bWVudU51bWJlciA9IDA7CisgICAgbWVudS0+c3VibWVudUNvdW50ID0gMDsKKyAgICBtZW51LT5hY3RpdmVJdGVtID0gTlVMTDsKKworICAgIHJldHVybiBtZW51OworICB9IGVsc2UgeworICAgIGxvZ01hbGxvY0Vycm9yKCk7CisgIH0KKworICByZXR1cm4gTlVMTDsKK30KKworc3RhdGljIGludAorYmVnaW5NZW51SXRlbSAoTWVudUl0ZW0gKml0ZW0pIHsKKyAgcmV0dXJuICFpdGVtLT5tZXRob2RzLT5iZWdpbkl0ZW0gfHwgaXRlbS0+bWV0aG9kcy0+YmVnaW5JdGVtKGl0ZW0pOworfQorCitzdGF0aWMgdm9pZAorZW5kTWVudUl0ZW0gKE1lbnVJdGVtICppdGVtLCBpbnQgZGVhbGxvY2F0aW5nKSB7CisgIGlmIChpdGVtLT5tZXRob2RzLT5lbmRJdGVtKSBpdGVtLT5tZXRob2RzLT5lbmRJdGVtKGl0ZW0sIGRlYWxsb2NhdGluZyk7Cit9CisKK3ZvaWQKK2Rlc3Ryb3lNZW51IChNZW51ICptZW51KSB7CisgIGlmIChtZW51KSB7CisgICAgaWYgKG1lbnUtPml0ZW1zLmFycmF5KSB7CisgICAgICBNZW51SXRlbSAqaXRlbSA9IG1lbnUtPml0ZW1zLmFycmF5OworICAgICAgY29uc3QgTWVudUl0ZW0gKmVuZCA9IGl0ZW0gKyBtZW51LT5pdGVtcy5jb3VudDsKKworICAgICAgd2hpbGUgKGl0ZW0gPCBlbmQpIGVuZE1lbnVJdGVtKGl0ZW0rKywgMSk7CisgICAgICBmcmVlKG1lbnUtPml0ZW1zLmFycmF5KTsKKyAgICB9CisKKyAgICBmcmVlKG1lbnUpOworICB9Cit9CisKK3Vuc2lnbmVkIGludAorZ2V0TWVudU51bWJlciAoY29uc3QgTWVudSAqbWVudSkgeworICByZXR1cm4gbWVudS0+bWVudU51bWJlcjsKK30KKworTWVudSAqCitnZXRNZW51UGFyZW50IChjb25zdCBNZW51ICptZW51KSB7CisgIHJldHVybiBtZW51LT5wYXJlbnQ7Cit9CisKK3Vuc2lnbmVkIGludAorZ2V0TWVudVNpemUgKGNvbnN0IE1lbnUgKm1lbnUpIHsKKyAgcmV0dXJuIG1lbnUtPml0ZW1zLmNvdW50OworfQorCit1bnNpZ25lZCBpbnQKK2dldE1lbnVJbmRleCAoY29uc3QgTWVudSAqbWVudSkgeworICByZXR1cm4gbWVudS0+aXRlbXMuaW5kZXg7Cit9CisKK01lbnVJdGVtICoKK2dldE1lbnVJdGVtIChNZW51ICptZW51LCB1bnNpZ25lZCBpbnQgaW5kZXgpIHsKKyAgcmV0dXJuIChpbmRleCA8IG1lbnUtPml0ZW1zLmNvdW50KT8gJm1lbnUtPml0ZW1zLmFycmF5W2luZGV4XTogTlVMTDsKK30KKworc3RhdGljIE1lbnVJdGVtICoKK2dldFNlbGVjdGVkTWVudUl0ZW0gKE1lbnUgKm1lbnUpIHsKKyAgcmV0dXJuIGdldE1lbnVJdGVtKG1lbnUsIG1lbnUtPml0ZW1zLmluZGV4KTsKK30KKworc3RhdGljIGludAordGVzdE1lbnVJdGVtIChjb25zdCBNZW51SXRlbSAqaXRlbSwgaW50IGFsbCkgeworICBpZiAoIWl0ZW0pIHJldHVybiAwOworICBpZiAoYWxsKSByZXR1cm4gMTsKKyAgaWYgKGl0ZW0tPm1ldGhvZHMtPnRlc3RJdGVtICYmICFpdGVtLT5tZXRob2RzLT50ZXN0SXRlbShpdGVtKSkgcmV0dXJuIDA7CisgIHJldHVybiAhaXRlbS0+dGVzdCB8fCBpdGVtLT50ZXN0KCk7Cit9CisKK2ludAoraXNNZW51SXRlbVNldHRhYmxlIChjb25zdCBNZW51SXRlbSAqaXRlbSkgeworICByZXR1cm4gISFpdGVtLT5zZXR0aW5nOworfQorCitpbnQKK2lzTWVudUl0ZW1BY3Rpb24gKGNvbnN0IE1lbnVJdGVtICppdGVtKSB7CisgIHJldHVybiAhIWl0ZW0tPm1ldGhvZHMtPmFjdGl2YXRlSXRlbTsKK30KKworaW50Citpc01lbnVJdGVtVmlzaWJsZSAoY29uc3QgTWVudUl0ZW0gKml0ZW0pIHsKKyAgcmV0dXJuIHRlc3RNZW51SXRlbShpdGVtLCAwKTsKK30KKworc3RhdGljIGlubGluZSBpbnQKK3Rlc3RNZW51SXRlbUFjdGl2ZSAoTWVudSAqbWVudSwgdW5zaWduZWQgaW50IGluZGV4KSB7CisgIHJldHVybiB0ZXN0TWVudUl0ZW0oZ2V0TWVudUl0ZW0obWVudSwgaW5kZXgpLCAwKTsKK30KKworc3RhdGljIGlubGluZSBpbnQKK3Rlc3RNZW51SXRlbVZpc2libGUgKE1lbnUgKm1lbnUsIHVuc2lnbmVkIGludCBpbmRleCkgeworICByZXR1cm4gdGVzdE1lbnVJdGVtKGdldE1lbnVJdGVtKG1lbnUsIGluZGV4KSwgcHJlZnMuc2hvd0FsbEl0ZW1zKTsKK30KKworTWVudSAqCitnZXRNZW51SXRlbU1lbnUgKGNvbnN0IE1lbnVJdGVtICppdGVtKSB7CisgIHJldHVybiBpdGVtLT5tZW51OworfQorCit1bnNpZ25lZCBpbnQKK2dldE1lbnVJdGVtSW5kZXggKGNvbnN0IE1lbnVJdGVtICppdGVtKSB7CisgIHJldHVybiBpdGVtIC0gaXRlbS0+bWVudS0+aXRlbXMuYXJyYXk7Cit9CisKK2NvbnN0IGNoYXIgKgorZ2V0TWVudUl0ZW1UaXRsZSAoY29uc3QgTWVudUl0ZW0gKml0ZW0pIHsKKyAgcmV0dXJuIGdldExvY2FsaXplZFRleHQoaXRlbS0+dGl0bGUpOworfQorCitjb25zdCBjaGFyICoKK2dldE1lbnVJdGVtU3VidGl0bGUgKGNvbnN0IE1lbnVJdGVtICppdGVtKSB7CisgIHJldHVybiBnZXRMb2NhbGl6ZWRUZXh0KGl0ZW0tPnN1YnRpdGxlKTsKK30KKworY29uc3QgY2hhciAqCitnZXRNZW51SXRlbVZhbHVlIChjb25zdCBNZW51SXRlbSAqaXRlbSkgeworICByZXR1cm4gaXRlbS0+bWV0aG9kcy0+Z2V0VmFsdWU/IGl0ZW0tPm1ldGhvZHMtPmdldFZhbHVlKGl0ZW0pOiAiIjsKK30KKworY29uc3QgY2hhciAqCitnZXRNZW51SXRlbVRleHQgKGNvbnN0IE1lbnVJdGVtICppdGVtKSB7CisgIHJldHVybiBpdGVtLT5tZXRob2RzLT5nZXRUZXh0PyBpdGVtLT5tZXRob2RzLT5nZXRUZXh0KGl0ZW0pOiBnZXRNZW51SXRlbVZhbHVlKGl0ZW0pOworfQorCitjb25zdCBjaGFyICoKK2dldE1lbnVJdGVtQ29tbWVudCAoY29uc3QgTWVudUl0ZW0gKml0ZW0pIHsKKyAgcmV0dXJuIGl0ZW0tPm1ldGhvZHMtPmdldENvbW1lbnQ/IGl0ZW0tPm1ldGhvZHMtPmdldENvbW1lbnQoaXRlbSk6ICIiOworfQorCitzdGF0aWMgTWVudUl0ZW0gKgorbmV3TWVudUl0ZW0gKE1lbnUgKm1lbnUsIHVuc2lnbmVkIGNoYXIgKnNldHRpbmcsIGNvbnN0IE1lbnVTdHJpbmcgKm5hbWUpIHsKKyAgaWYgKG1lbnUtPml0ZW1zLmNvdW50ID09IG1lbnUtPml0ZW1zLnNpemUpIHsKKyAgICB1bnNpZ25lZCBpbnQgbmV3U2l6ZSA9IG1lbnUtPml0ZW1zLnNpemU/IChtZW51LT5pdGVtcy5zaXplIDw8IDEpOiAwWDEwOworICAgIE1lbnVJdGVtICpuZXdBcnJheSA9IHJlYWxsb2MobWVudS0+aXRlbXMuYXJyYXksIChuZXdTaXplICogc2l6ZW9mKCpuZXdBcnJheSkpKTsKKworICAgIGlmICghbmV3QXJyYXkpIHsKKyAgICAgIGxvZ01hbGxvY0Vycm9yKCk7CisgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICBtZW51LT5pdGVtcy5hcnJheSA9IG5ld0FycmF5OworICAgIG1lbnUtPml0ZW1zLnNpemUgPSBuZXdTaXplOworICB9CisKKyAgeworICAgIE1lbnVJdGVtICppdGVtID0gZ2V0TWVudUl0ZW0obWVudSwgbWVudS0+aXRlbXMuY291bnQrKyk7CisKKyAgICBpdGVtLT5tZW51ID0gbWVudTsKKyAgICBpdGVtLT5zZXR0aW5nID0gc2V0dGluZzsKKworICAgIGlmIChuYW1lKSB7CisgICAgICBpdGVtLT50aXRsZSA9IG5hbWUtPmxhYmVsOworICAgICAgaXRlbS0+c3VidGl0bGUgPSBuYW1lLT5jb21tZW50OworICAgIH0gZWxzZSB7CisgICAgICBpdGVtLT50aXRsZSA9IE5VTEw7CisgICAgICBpdGVtLT5zdWJ0aXRsZSA9IE5VTEw7CisgICAgfQorCisgICAgaXRlbS0+bWV0aG9kcyA9IE5VTEw7CisgICAgaXRlbS0+dGVzdCA9IE5VTEw7CisgICAgaXRlbS0+Y2hhbmdlZCA9IE5VTEw7CisKKyAgICBpdGVtLT5taW5pbXVtID0gMDsKKyAgICBpdGVtLT5tYXhpbXVtID0gMDsKKyAgICBpdGVtLT5zdGVwID0gMTsKKworICAgIHJldHVybiBpdGVtOworICB9Cit9CisKK3ZvaWQKK3NldE1lbnVJdGVtVGVzdGVyIChNZW51SXRlbSAqaXRlbSwgTWVudUl0ZW1UZXN0ZXIgKmhhbmRsZXIpIHsKKyAgaXRlbS0+dGVzdCA9IGhhbmRsZXI7Cit9CisKK3ZvaWQKK3NldE1lbnVJdGVtQ2hhbmdlZCAoTWVudUl0ZW0gKml0ZW0sIE1lbnVJdGVtQ2hhbmdlZCAqaGFuZGxlcikgeworICBpdGVtLT5jaGFuZ2VkID0gaGFuZGxlcjsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgKgorZ2V0VmFsdWVfdGV4dCAoY29uc3QgTWVudUl0ZW0gKml0ZW0pIHsKKyAgcmV0dXJuIGl0ZW0tPmRhdGEudGV4dDsKK30KKworc3RhdGljIGNvbnN0IE1lbnVJdGVtTWV0aG9kcyBtZW51SXRlbU1ldGhvZHNfdGV4dCA9IHsKKyAgLmdldFZhbHVlID0gZ2V0VmFsdWVfdGV4dAorfTsKKworTWVudUl0ZW0gKgorbmV3VGV4dE1lbnVJdGVtIChNZW51ICptZW51LCBjb25zdCBNZW51U3RyaW5nICpuYW1lLCBjb25zdCBjaGFyICp0ZXh0KSB7CisgIE1lbnVJdGVtICppdGVtID0gbmV3TWVudUl0ZW0obWVudSwgTlVMTCwgbmFtZSk7CisKKyAgaWYgKGl0ZW0pIHsKKyAgICBpdGVtLT5tZXRob2RzID0gJm1lbnVJdGVtTWV0aG9kc190ZXh0OworICAgIGl0ZW0tPmRhdGEudGV4dCA9IHRleHQ7CisgIH0KKworICByZXR1cm4gaXRlbTsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgKgorZ2V0VmFsdWVfbnVtZXJpYyAoY29uc3QgTWVudUl0ZW0gKml0ZW0pIHsKKyAgTWVudSAqbWVudSA9IGl0ZW0tPm1lbnU7CisKKyAgaXRlbS0+ZGF0YS5udW1lcmljLmZvcm1hdHRlcigKKyAgICBtZW51LCAqaXRlbS0+c2V0dGluZywKKyAgICBtZW51LT52YWx1ZUJ1ZmZlciwgc2l6ZW9mKG1lbnUtPnZhbHVlQnVmZmVyKQorICApOworCisgIHJldHVybiBtZW51LT52YWx1ZUJ1ZmZlcjsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgKgorZ2V0Q29tbWVudF9udW1lcmljIChjb25zdCBNZW51SXRlbSAqaXRlbSkgeworICByZXR1cm4gZ2V0TG9jYWxpemVkVGV4dChpdGVtLT5kYXRhLm51bWVyaWMudW5pdCk7Cit9CisKK3N0YXRpYyBjb25zdCBNZW51SXRlbU1ldGhvZHMgbWVudUl0ZW1NZXRob2RzX251bWVyaWMgPSB7CisgIC5nZXRWYWx1ZSA9IGdldFZhbHVlX251bWVyaWMsCisgIC5nZXRDb21tZW50ID0gZ2V0Q29tbWVudF9udW1lcmljCit9OworCitzdGF0aWMgdm9pZAorZGVmYXVsdE51bWVyaWNNZW51SXRlbUZvcm1hdHRlciAoCisgIE1lbnUgKm1lbnUsIHVuc2lnbmVkIGNoYXIgdmFsdWUsCisgIGNoYXIgKmJ1ZmZlciwgc2l6ZV90IHNpemUKKykgeworICBzbnByaW50ZihidWZmZXIsIHNpemUsICIldSIsIHZhbHVlKTsKK30KKworTWVudUl0ZW0gKgorbmV3TnVtZXJpY01lbnVJdGVtICgKKyAgTWVudSAqbWVudSwgdW5zaWduZWQgY2hhciAqc2V0dGluZywgY29uc3QgTWVudVN0cmluZyAqbmFtZSwKKyAgdW5zaWduZWQgY2hhciBtaW5pbXVtLCB1bnNpZ25lZCBjaGFyIG1heGltdW0sIHVuc2lnbmVkIGNoYXIgc3RlcCwKKyAgY29uc3QgY2hhciAqdW5pdCwgTnVtZXJpY01lbnVJdGVtRm9ybWF0dGVyICpmb3JtYXR0ZXIKKykgeworICBpZiAoIWZvcm1hdHRlcikgZm9ybWF0dGVyID0gZGVmYXVsdE51bWVyaWNNZW51SXRlbUZvcm1hdHRlcjsKKworICBNZW51SXRlbSAqaXRlbSA9IG5ld01lbnVJdGVtKG1lbnUsIHNldHRpbmcsIG5hbWUpOworCisgIGlmIChpdGVtKSB7CisgICAgaXRlbS0+bWV0aG9kcyA9ICZtZW51SXRlbU1ldGhvZHNfbnVtZXJpYzsKKyAgICBpdGVtLT5taW5pbXVtID0gbWluaW11bTsKKyAgICBpdGVtLT5tYXhpbXVtID0gbWF4aW11bTsKKyAgICBpdGVtLT5zdGVwID0gc3RlcDsKKyAgICBpdGVtLT5kYXRhLm51bWVyaWMudW5pdCA9IHVuaXQ7CisgICAgaXRlbS0+ZGF0YS5udW1lcmljLmZvcm1hdHRlciA9IGZvcm1hdHRlcjsKKyAgfQorCisgIHJldHVybiBpdGVtOworfQorCitzdGF0aWMgdm9pZAorZm9ybWF0VGltZSAoTWVudSAqbWVudSwgdW5zaWduZWQgY2hhciB0aW1lLCBjaGFyICpidWZmZXIsIHNpemVfdCBzaXplKSB7CisgIHVuc2lnbmVkIGludCBtaWxsaXNlY29uZHMgPSBQUkVGUzJNU0VDUyh0aW1lKTsKKworICB1bnNpZ25lZCBpbnQgc2Vjb25kcyA9IG1pbGxpc2Vjb25kcyAvIE1TRUNTX1BFUl9TRUM7CisgIG1pbGxpc2Vjb25kcyAlPSBNU0VDU19QRVJfU0VDOworCisgIGNvbnN0IGNoYXIgKmRlY2ltYWxQb2ludDsKKyNpZmRlZiBIQVZFX05MX0xBTkdJTkZPCisgIGRlY2ltYWxQb2ludCA9IG5sX2xhbmdpbmZvKFJBRElYQ0hBUik7CisjZWxzZSAvKiBIQVZFX05MX0xBTkdJTkZPICovCisgIGRlY2ltYWxQb2ludCA9IE5VTEw7CisjZW5kaWYgLyogSEFWRV9OTF9MQU5HSU5GTyAqLworICBpZiAoIWRlY2ltYWxQb2ludCkgZGVjaW1hbFBvaW50ID0gIi4iOworCisgIHNpemVfdCBlbmQ7CisgIHNpemVfdCBkZWNpbWFsRnJvbTsKKyAgc2l6ZV90IGRlY2ltYWxUbzsKKworICBTVFJfQkVHSU4oYnVmZmVyLCBzaXplKTsKKyAgU1RSX1BSSU5URigiJXUiLCBzZWNvbmRzKTsKKyAgZGVjaW1hbEZyb20gPSBTVFJfTEVOR1RIOworICBTVFJfUFJJTlRGKCIlcyIsIGRlY2ltYWxQb2ludCk7CisgIGRlY2ltYWxUbyA9IFNUUl9MRU5HVEg7CisgIFNUUl9QUklOVEYoIiUwM3UiLCBtaWxsaXNlY29uZHMpOworICBlbmQgPSBTVFJfTEVOR1RIOworICBTVFJfRU5EOworCisgIHdoaWxlIChidWZmZXJbLS1lbmRdID09ICcwJyk7CisgIGlmICgrK2VuZCA9PSBkZWNpbWFsVG8pIGVuZCA9IGRlY2ltYWxGcm9tOworICBidWZmZXJbZW5kXSA9IDA7Cit9CisKK01lbnVJdGVtICoKK25ld1RpbWVNZW51SXRlbSAoCisgIE1lbnUgKm1lbnUsIHVuc2lnbmVkIGNoYXIgKnNldHRpbmcsCisgIGNvbnN0IE1lbnVTdHJpbmcgKm5hbWUKKykgeworICByZXR1cm4gbmV3TnVtZXJpY01lbnVJdGVtKG1lbnUsIHNldHRpbmcsIG5hbWUsIDEwLCAyNTAsIDEwLCBzdHJ0ZXh0KCJzZWNvbmRzIiksIGZvcm1hdFRpbWUpOworfQorCitNZW51SXRlbSAqCituZXdQZXJjZW50TWVudUl0ZW0gKAorICBNZW51ICptZW51LCB1bnNpZ25lZCBjaGFyICpzZXR0aW5nLAorICBjb25zdCBNZW51U3RyaW5nICpuYW1lLCB1bnNpZ25lZCBjaGFyIHN0ZXAKKykgeworICByZXR1cm4gbmV3TnVtZXJpY01lbnVJdGVtKG1lbnUsIHNldHRpbmcsIG5hbWUsIDAsIDEwMCwgc3RlcCwgIiUiLCBOVUxMKTsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgKgorZ2V0VmFsdWVfc3RyaW5ncyAoY29uc3QgTWVudUl0ZW0gKml0ZW0pIHsKKyAgY29uc3QgTWVudVN0cmluZyAqc3RyaW5ncyA9IGl0ZW0tPmRhdGEuc3RyaW5nczsKKyAgcmV0dXJuIGdldExvY2FsaXplZFRleHQoc3RyaW5nc1sqaXRlbS0+c2V0dGluZyAtIGl0ZW0tPm1pbmltdW1dLmxhYmVsKTsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgKgorZ2V0Q29tbWVudF9zdHJpbmdzIChjb25zdCBNZW51SXRlbSAqaXRlbSkgeworICBjb25zdCBNZW51U3RyaW5nICpzdHJpbmdzID0gaXRlbS0+ZGF0YS5zdHJpbmdzOworICByZXR1cm4gZ2V0TG9jYWxpemVkVGV4dChzdHJpbmdzWyppdGVtLT5zZXR0aW5nIC0gaXRlbS0+bWluaW11bV0uY29tbWVudCk7Cit9CisKK3N0YXRpYyBjb25zdCBNZW51SXRlbU1ldGhvZHMgbWVudUl0ZW1NZXRob2RzX3N0cmluZ3MgPSB7CisgIC5nZXRWYWx1ZSA9IGdldFZhbHVlX3N0cmluZ3MsCisgIC5nZXRDb21tZW50ID0gZ2V0Q29tbWVudF9zdHJpbmdzCit9OworCitzdGF0aWMgdm9pZAorc2V0TWVudUl0ZW1TdHJpbmdzIChNZW51SXRlbSAqaXRlbSwgY29uc3QgTWVudVN0cmluZyAqc3RyaW5ncywgdW5zaWduZWQgY2hhciBjb3VudCkgeworICBpdGVtLT5tZXRob2RzID0gJm1lbnVJdGVtTWV0aG9kc19zdHJpbmdzOworICBpdGVtLT5kYXRhLnN0cmluZ3MgPSBzdHJpbmdzOworICBpdGVtLT5taW5pbXVtID0gMDsKKyAgaXRlbS0+bWF4aW11bSA9IGNvdW50IC0gMTsKKyAgaXRlbS0+c3RlcCA9IDE7Cit9CisKK01lbnVJdGVtICoKK25ld1N0cmluZ3NNZW51SXRlbSAoCisgIE1lbnUgKm1lbnUsIHVuc2lnbmVkIGNoYXIgKnNldHRpbmcsIGNvbnN0IE1lbnVTdHJpbmcgKm5hbWUsCisgIGNvbnN0IE1lbnVTdHJpbmcgKnN0cmluZ3MsIHVuc2lnbmVkIGNoYXIgY291bnQKKykgeworICBNZW51SXRlbSAqaXRlbSA9IG5ld01lbnVJdGVtKG1lbnUsIHNldHRpbmcsIG5hbWUpOworCisgIGlmIChpdGVtKSB7CisgICAgc2V0TWVudUl0ZW1TdHJpbmdzKGl0ZW0sIHN0cmluZ3MsIGNvdW50KTsKKyAgfQorCisgIHJldHVybiBpdGVtOworfQorCitNZW51SXRlbSAqCituZXdCb29sZWFuTWVudUl0ZW0gKE1lbnUgKm1lbnUsIHVuc2lnbmVkIGNoYXIgKnNldHRpbmcsIGNvbnN0IE1lbnVTdHJpbmcgKm5hbWUpIHsKKyAgc3RhdGljIGNvbnN0IE1lbnVTdHJpbmcgc3RyaW5nc1tdID0geworICAgIHsubGFiZWw9c3RydGV4dCgiTm8iKX0sCisgICAgey5sYWJlbD1zdHJ0ZXh0KCJZZXMiKX0KKyAgfTsKKworICByZXR1cm4gbmV3RW51bWVyYXRlZE1lbnVJdGVtKG1lbnUsIHNldHRpbmcsIG5hbWUsIHN0cmluZ3MpOworfQorCitzdGF0aWMgaW50Citxc29ydENvbXBhcmVfZmlsZU5hbWVzIChjb25zdCB2b2lkICplbGVtZW50MSwgY29uc3Qgdm9pZCAqZWxlbWVudDIpIHsKKyAgY29uc3QgY2hhciAqY29uc3QgKm5hbWUxID0gZWxlbWVudDE7CisgIGNvbnN0IGNoYXIgKmNvbnN0ICpuYW1lMiA9IGVsZW1lbnQyOworICByZXR1cm4gc3RyY21wKCpuYW1lMSwgKm5hbWUyKTsKK30KKworc3RhdGljIGludAorYmVnaW5JdGVtX2ZpbGVzIChNZW51SXRlbSAqaXRlbSkgeworICBGaWxlRGF0YSAqZmlsZXMgPSBpdGVtLT5kYXRhLmZpbGVzOworICBpbnQgaW5kZXg7CisKKyAgZmlsZXMtPnBhdGhzID0gZmlsZXMtPnBhdGhzQXJlYTsKKyAgZmlsZXMtPmNvdW50ID0gQVJSQVlfQ09VTlQoZmlsZXMtPnBhdGhzQXJlYSkgLSAxOworICBmaWxlcy0+cGF0aHNbZmlsZXMtPmNvdW50XSA9IE5VTEw7CisgIGluZGV4ID0gZmlsZXMtPmNvdW50OworCisjaWZkZWYgQ0FOX0dMT0IKKyAgeworI2lmZGVmIEhBVkVfRkNIRElSCisgICAgaW50IG9yaWdpbmFsRGlyZWN0b3J5ID0gb3BlbigiLiIsIE9fUkRPTkxZKTsKKworICAgIGlmIChvcmlnaW5hbERpcmVjdG9yeSAhPSAtMSkKKyNlbHNlIC8qIEhBVkVfRkNIRElSICovCisgICAgY2hhciAqb3JpZ2luYWxEaXJlY3RvcnkgPSBnZXRXb3JraW5nRGlyZWN0b3J5KCk7CisKKyAgICBpZiAob3JpZ2luYWxEaXJlY3RvcnkpCisjZW5kaWYgLyogSEFWRV9GQ0hESVIgKi8KKyAgICB7CisgICAgICBpZiAoY2hkaXIoZmlsZXMtPmRpcmVjdG9yeSkgIT0gLTEpIHsKKyNpZiBkZWZpbmVkKEhBVkVfR0xPQikKKyAgICAgICAgbWVtc2V0KCZmaWxlcy0+Z2xvYiwgMCwgc2l6ZW9mKGZpbGVzLT5nbG9iKSk7CisgICAgICAgIGZpbGVzLT5nbG9iLmdsX29mZnMgPSBmaWxlcy0+Y291bnQ7CisKKyAgICAgICAgaWYgKGdsb2IoZmlsZXMtPnBhdHRlcm4sIEdMT0JfRE9PRkZTLCBOVUxMLCAmZmlsZXMtPmdsb2IpID09IDApIHsKKyAgICAgICAgICBmaWxlcy0+cGF0aHMgPSBmaWxlcy0+Z2xvYi5nbF9wYXRodjsKKworICAgICAgICAgIC8qIFRoZSBiZWhhdmlvdXIgb2YgZ2xfcGF0aGMgaXMgaW5jb25zaXN0ZW50LiBTb21lIGltcGxlbWVudGF0aW9ucworICAgICAgICAgICAqIGluY2x1ZGUgdGhlIGxlYWRpbmcgTlVMTCBwb2ludGVycyBhbmQgc29tZSBkb24ndC4gTGV0J3MganVzdAorICAgICAgICAgICAqIGZpZ3VyZSBpdCBvdXQgdGhlIGhhcmQgd2F5IGJ5IGZpbmRpbmcgdGhlIHRyYWlsaW5nIE5VTEwuCisgICAgICAgICAgICovCisgICAgICAgICAgd2hpbGUgKGZpbGVzLT5wYXRoc1tmaWxlcy0+Y291bnRdKSBmaWxlcy0+Y291bnQgKz0gMTsKKyAgICAgICAgfQorI2VsaWYgZGVmaW5lZChfX01JTkdXMzJfXykKKyAgICAgICAgc3RydWN0IF9maW5kZGF0YV90IGZpbmREYXRhOworICAgICAgICBsb25nIGZpbmRIYW5kbGUgPSBfZmluZGZpcnN0KGZpbGVzLT5wYXR0ZXJuLCAmZmluZERhdGEpOworICAgICAgICBpbnQgYWxsb2NhdGVkID0gZmlsZXMtPmNvdW50IHwgMFhGOworCisgICAgICAgIGZpbGVzLT5vZmZzZXQgPSBmaWxlcy0+Y291bnQ7CisgICAgICAgIGZpbGVzLT5uYW1lcyA9IG1hbGxvYyhhbGxvY2F0ZWQgKiBzaXplb2YoKmZpbGVzLT5uYW1lcykpOworCisgICAgICAgIGlmIChmaW5kSGFuZGxlICE9IC0xKSB7CisgICAgICAgICAgZG8geworICAgICAgICAgICAgaWYgKGZpbGVzLT5jb3VudCA+PSBhbGxvY2F0ZWQpIHsKKyAgICAgICAgICAgICAgYWxsb2NhdGVkID0gYWxsb2NhdGVkICogMjsKKyAgICAgICAgICAgICAgZmlsZXMtPm5hbWVzID0gcmVhbGxvYyhmaWxlcy0+bmFtZXMsIGFsbG9jYXRlZCAqIHNpemVvZigqZmlsZXMtPm5hbWVzKSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGZpbGVzLT5uYW1lc1tmaWxlcy0+Y291bnQrK10gPSBzdHJkdXAoZmluZERhdGEubmFtZSk7CisgICAgICAgICAgfSB3aGlsZSAoX2ZpbmRuZXh0KGZpbmRIYW5kbGUsICZmaW5kRGF0YSkgPT0gMCk7CisKKyAgICAgICAgICBfZmluZGNsb3NlKGZpbmRIYW5kbGUpOworICAgICAgICB9CisKKyAgICAgICAgZmlsZXMtPm5hbWVzID0gcmVhbGxvYyhmaWxlcy0+bmFtZXMsIGZpbGVzLT5jb3VudCAqIHNpemVvZigqZmlsZXMtPm5hbWVzKSk7CisgICAgICAgIGZpbGVzLT5wYXRocyA9IGZpbGVzLT5uYW1lczsKKyNlbmRpZiAvKiBnbG9iOiBwYXJhZGlnbS1zcGVjaWZpYyBmaWVsZCBpbml0aWFsaXphdGlvbiAqLworCisjaWZkZWYgSEFWRV9GQ0hESVIKKyAgICAgICAgaWYgKGZjaGRpcihvcmlnaW5hbERpcmVjdG9yeSkgPT0gLTEpIGxvZ1N5c3RlbUVycm9yKCJmY2hkaXIiKTsKKyNlbHNlIC8qIEhBVkVfRkNIRElSICovCisgICAgICAgIGlmIChjaGRpcihvcmlnaW5hbERpcmVjdG9yeSkgPT0gLTEpIGxvZ1N5c3RlbUVycm9yKCJjaGRpciIpOworI2VuZGlmIC8qIEhBVkVfRkNIRElSICovCisgICAgICB9IGVsc2UgeworICAgICAgICBsb2dNZXNzYWdlKExPR19FUlIsICIlczogJXM6ICVzIiwKKyAgICAgICAgICAgICAgICAgICBnZXR0ZXh0KCJjYW5ub3Qgc2V0IHdvcmtpbmcgZGlyZWN0b3J5IiksIGZpbGVzLT5kaXJlY3RvcnksIHN0cmVycm9yKGVycm5vKSk7CisgICAgICB9CisKKyNpZmRlZiBIQVZFX0ZDSERJUgorICAgICAgY2xvc2Uob3JpZ2luYWxEaXJlY3RvcnkpOworI2Vsc2UgLyogSEFWRV9GQ0hESVIgKi8KKyAgICAgIGZyZWUob3JpZ2luYWxEaXJlY3RvcnkpOworI2VuZGlmIC8qIEhBVkVfRkNIRElSICovCisgICAgfSBlbHNlIHsKKyNpZmRlZiBIQVZFX0ZDSERJUgorICAgICAgbG9nTWVzc2FnZShMT0dfRVJSLCAiJXM6ICVzIiwKKyAgICAgICAgICAgICAgICAgZ2V0dGV4dCgiY2Fubm90IG9wZW4gd29ya2luZyBkaXJlY3RvcnkiKSwgc3RyZXJyb3IoZXJybm8pKTsKKyNlbHNlIC8qIEhBVkVfRkNIRElSICovCisgICAgICBsb2dNZXNzYWdlKExPR19FUlIsICIlcyIsIGdldHRleHQoImNhbm5vdCBkZXRlcm1pbmUgd29ya2luZyBkaXJlY3RvcnkiKSk7CisjZW5kaWYgLyogSEFWRV9GQ0hESVIgKi8KKyAgICB9CisgIH0KKyNlbmRpZiAvKiBDQU5fR0xPQiAqLworCisgIHFzb3J0KCZmaWxlcy0+cGF0aHNbaW5kZXhdLCBmaWxlcy0+Y291bnQtaW5kZXgsIHNpemVvZigqZmlsZXMtPnBhdGhzKSwgcXNvcnRDb21wYXJlX2ZpbGVOYW1lcyk7CisgIGlmIChmaWxlcy0+bm9uZSkgZmlsZXMtPnBhdGhzWy0taW5kZXhdID0gIiI7CisgIGZpbGVzLT5wYXRoc1stLWluZGV4XSA9IGZpbGVzLT5pbml0aWFsOworICBmaWxlcy0+cGF0aHMgKz0gaW5kZXg7CisgIGZpbGVzLT5jb3VudCAtPSBpbmRleDsKKyAgZmlsZXMtPnNldHRpbmcgPSAwOworCisgIGZvciAoaW5kZXg9MTsgaW5kZXg8ZmlsZXMtPmNvdW50OyBpbmRleCs9MSkgeworICAgIGlmIChzdHJjbXAoZmlsZXMtPnBhdGhzW2luZGV4XSwgZmlsZXMtPmluaXRpYWwpID09IDApIHsKKyAgICAgIGZpbGVzLT5wYXRocyArPSAxOworICAgICAgZmlsZXMtPmNvdW50IC09IDE7CisgICAgICBicmVhazsKKyAgICB9CisgIH0KKworICBmb3IgKGluZGV4PTA7IGluZGV4PGZpbGVzLT5jb3VudDsgaW5kZXgrPTEpIHsKKyAgICBpZiAoc3RyY21wKGZpbGVzLT5wYXRoc1tpbmRleF0sIGZpbGVzLT5jdXJyZW50KSA9PSAwKSB7CisgICAgICBmaWxlcy0+c2V0dGluZyA9IGluZGV4OworICAgICAgYnJlYWs7CisgICAgfQorICB9CisKKyAgaXRlbS0+bWF4aW11bSA9IGZpbGVzLT5jb3VudCAtIDE7CisgIHJldHVybiAxOworfQorCitzdGF0aWMgdm9pZAorZW5kSXRlbV9maWxlcyAoTWVudUl0ZW0gKml0ZW0sIGludCBkZWFsbG9jYXRpbmcpIHsKKyAgRmlsZURhdGEgKmZpbGVzID0gaXRlbS0+ZGF0YS5maWxlczsKKworICBpZiAoZmlsZXMtPmN1cnJlbnQpIGZyZWUoZmlsZXMtPmN1cnJlbnQpOworICBmaWxlcy0+Y3VycmVudCA9IGRlYWxsb2NhdGluZz8gTlVMTDogc3RyZHVwKGZpbGVzLT5wYXRoc1tmaWxlcy0+c2V0dGluZ10pOworCisjaWYgZGVmaW5lZChIQVZFX0dMT0IpCisgIGlmIChmaWxlcy0+Z2xvYi5nbF9wYXRoYykgeworICAgIGZvciAoaW50IGk9MDsgaTxmaWxlcy0+Z2xvYi5nbF9vZmZzOyBpKz0xKSBmaWxlcy0+Z2xvYi5nbF9wYXRodltpXSA9IE5VTEw7CisgICAgZ2xvYmZyZWUoJmZpbGVzLT5nbG9iKTsKKyAgICBmaWxlcy0+Z2xvYi5nbF9wYXRoYyA9IDA7CisgIH0KKyNlbGlmIGRlZmluZWQoX19NSU5HVzMyX18pCisgIGlmIChmaWxlcy0+bmFtZXMpIHsKKyAgICBmb3IgKGludCBpPWZpbGVzLT5vZmZzZXQ7IGk8ZmlsZXMtPmNvdW50OyBpKz0xKSBmcmVlKGZpbGVzLT5uYW1lc1tpXSk7CisgICAgZnJlZShmaWxlcy0+bmFtZXMpOworICAgIGZpbGVzLT5uYW1lcyA9IE5VTEw7CisgIH0KKyNlbmRpZiAvKiBnbG9iOiBwYXJhZGlnbS1zcGVjaWZpYyBtZW1vcnkgZGVhbGxvY2F0aW9uICovCit9CisKK3N0YXRpYyBjb25zdCBjaGFyICoKK2dldFZhbHVlX2ZpbGVzIChjb25zdCBNZW51SXRlbSAqaXRlbSkgeworICBjb25zdCBGaWxlRGF0YSAqZmlsZXMgPSBpdGVtLT5kYXRhLmZpbGVzOworICBjb25zdCBjaGFyICpwYXRoOworCisgIGlmIChpdGVtID09IGl0ZW0tPm1lbnUtPmFjdGl2ZUl0ZW0pIHsKKyAgICBwYXRoID0gZmlsZXMtPnBhdGhzW2ZpbGVzLT5zZXR0aW5nXTsKKyAgfSBlbHNlIHsKKyAgICBwYXRoID0gZmlsZXMtPmN1cnJlbnQ7CisgIH0KKworICBpZiAoIXBhdGgpIHBhdGggPSAiIjsKKyAgY29uc3QgY2hhciAqbmFtZSA9IGxvY2F0ZVBhdGhOYW1lKHBhdGgpOworCisgIGlmIChuYW1lID09IHBhdGgpIHsKKyAgICBjb25zdCBjaGFyICpleHRlbnNpb24gPSBmaWxlcy0+ZXh0ZW5zaW9uOworCisgICAgaWYgKGhhc0ZpbGVFeHRlbnNpb24obmFtZSwgZXh0ZW5zaW9uKSkgeworICAgICAgaW50IGxlbmd0aCA9IHN0cmxlbihwYXRoKSAtIHN0cmxlbihleHRlbnNpb24pOworICAgICAgTWVudSAqbWVudSA9IGl0ZW0tPm1lbnU7CisKKyAgICAgIHNucHJpbnRmKAorICAgICAgICBtZW51LT52YWx1ZUJ1ZmZlciwgc2l6ZW9mKG1lbnUtPnZhbHVlQnVmZmVyKSwKKyAgICAgICAgIiUuKnMiLCBsZW5ndGgsIG5hbWUKKyAgICAgICk7CisKKyAgICAgIHBhdGggPSBtZW51LT52YWx1ZUJ1ZmZlcjsKKyAgICB9CisgIH0KKworICByZXR1cm4gcGF0aDsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgKgorZ2V0VGV4dF9maWxlcyAoY29uc3QgTWVudUl0ZW0gKml0ZW0pIHsKKyAgcmV0dXJuIGl0ZW0tPm1ldGhvZHMtPmdldFZhbHVlKGl0ZW0pOworfQorCitzdGF0aWMgY29uc3QgTWVudUl0ZW1NZXRob2RzIG1lbnVJdGVtTWV0aG9kc19maWxlcyA9IHsKKyAgLmJlZ2luSXRlbSA9IGJlZ2luSXRlbV9maWxlcywKKyAgLmVuZEl0ZW0gPSBlbmRJdGVtX2ZpbGVzLAorICAuZ2V0VmFsdWUgPSBnZXRWYWx1ZV9maWxlcywKKyAgLmdldFRleHQgPSBnZXRUZXh0X2ZpbGVzCit9OworCitNZW51SXRlbSAqCituZXdGaWxlc01lbnVJdGVtICgKKyAgTWVudSAqbWVudSwgY29uc3QgTWVudVN0cmluZyAqbmFtZSwKKyAgY29uc3QgY2hhciAqZGlyZWN0b3J5LCBjb25zdCBjaGFyICpzdWJkaXJlY3RvcnksIGNvbnN0IGNoYXIgKmV4dGVuc2lvbiwKKyAgY29uc3QgY2hhciAqaW5pdGlhbCwgaW50IG5vbmUKKykgeworICBGaWxlRGF0YSAqZmlsZXM7CisKKyAgaWYgKChmaWxlcyA9IG1hbGxvYyhzaXplb2YoKmZpbGVzKSkpKSB7CisgICAgbWVtc2V0KGZpbGVzLCAwLCBzaXplb2YoKmZpbGVzKSk7CisgICAgZmlsZXMtPmV4dGVuc2lvbiA9IGV4dGVuc2lvbjsKKyAgICBmaWxlcy0+bm9uZSA9ICEhbm9uZTsKKworICAgIGNoYXIgKnBhdHRlcm47CisgICAgeworICAgICAgY29uc3QgY2hhciAqc3RyaW5nc1tdID0geyIqIiwgZXh0ZW5zaW9ufTsKKyAgICAgIHBhdHRlcm4gPSBqb2luU3RyaW5ncyhzdHJpbmdzLCBBUlJBWV9DT1VOVChzdHJpbmdzKSk7CisgICAgfQorCisgICAgaWYgKHBhdHRlcm4pIHsKKyAgICAgIGZpbGVzLT5wYXR0ZXJuID0gcGF0dGVybjsgCisKKyAgICAgIGlmICgoZmlsZXMtPmluaXRpYWwgPSAqaW5pdGlhbD8gZW5zdXJlRmlsZUV4dGVuc2lvbihpbml0aWFsLCBleHRlbnNpb24pOiBzdHJkdXAoIiIpKSkgeworICAgICAgICBpZiAoKGZpbGVzLT5jdXJyZW50ID0gc3RyZHVwKGZpbGVzLT5pbml0aWFsKSkpIHsKKyAgICAgICAgICBpZiAoc3ViZGlyZWN0b3J5KSB7CisgICAgICAgICAgICBmaWxlcy0+ZGlyZWN0b3J5ID0gbWFrZVBhdGgoZGlyZWN0b3J5LCBzdWJkaXJlY3RvcnkpOworICAgICAgICAgIH0gZWxzZSBpZiAoIShmaWxlcy0+ZGlyZWN0b3J5ID0gc3RyZHVwKGRpcmVjdG9yeSkpKSB7CisgICAgICAgICAgICBsb2dNYWxsb2NFcnJvcigpOworICAgICAgICAgIH0KKworICAgICAgICAgIGlmIChmaWxlcy0+ZGlyZWN0b3J5KSB7CisgICAgICAgICAgICBNZW51SXRlbSAqaXRlbSA9IG5ld01lbnVJdGVtKG1lbnUsICZmaWxlcy0+c2V0dGluZywgbmFtZSk7CisKKyAgICAgICAgICAgIGlmIChpdGVtKSB7CisgICAgICAgICAgICAgIGl0ZW0tPm1ldGhvZHMgPSAmbWVudUl0ZW1NZXRob2RzX2ZpbGVzOworICAgICAgICAgICAgICBpdGVtLT5kYXRhLmZpbGVzID0gZmlsZXM7CisgICAgICAgICAgICAgIHJldHVybiBpdGVtOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBmcmVlKGZpbGVzLT5kaXJlY3RvcnkpOworICAgICAgICAgIH0KKworICAgICAgICAgIGZyZWUoZmlsZXMtPmN1cnJlbnQpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgIGxvZ01hbGxvY0Vycm9yKCk7CisgICAgICAgIH0KKworICAgICAgICBmcmVlKGZpbGVzLT5pbml0aWFsKTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIGxvZ01hbGxvY0Vycm9yKCk7CisgICAgICB9CisKKyAgICAgIGZyZWUocGF0dGVybik7CisgICAgfSBlbHNlIHsKKyAgICAgIGxvZ01hbGxvY0Vycm9yKCk7CisgICAgfQorCisgICAgZnJlZShmaWxlcyk7CisgIH0gZWxzZSB7CisgICAgbG9nTWFsbG9jRXJyb3IoKTsKKyAgfQorCisgIHJldHVybiBOVUxMOworfQorCitzdGF0aWMgdm9pZAorYWN0aXZhdGVJdGVtX3Rvb2wgKE1lbnVJdGVtICppdGVtKSB7CisgIGl0ZW0tPmRhdGEudG9vbC5mdW5jdGlvbigpOworfQorCitzdGF0aWMgY29uc3QgY2hhciAqCitnZXRWYWx1ZV90b29sIChjb25zdCBNZW51SXRlbSAqaXRlbSkgeworICByZXR1cm4gTlVMTDsKK30KKworc3RhdGljIGNvbnN0IE1lbnVJdGVtTWV0aG9kcyBtZW51SXRlbU1ldGhvZHNfdG9vbCA9IHsKKyAgLmFjdGl2YXRlSXRlbSA9IGFjdGl2YXRlSXRlbV90b29sLAorICAuZ2V0VmFsdWUgPSBnZXRWYWx1ZV90b29sCit9OworCitNZW51SXRlbSAqCituZXdUb29sTWVudUl0ZW0gKE1lbnUgKm1lbnUsIGNvbnN0IE1lbnVTdHJpbmcgKm5hbWUsIE1lbnVUb29sRnVuY3Rpb24gKmZ1bmN0aW9uKSB7CisgIE1lbnVJdGVtICppdGVtID0gbmV3TWVudUl0ZW0obWVudSwgTlVMTCwgbmFtZSk7CisKKyAgaWYgKGl0ZW0pIHsKKyAgICBpdGVtLT5tZXRob2RzID0gJm1lbnVJdGVtTWV0aG9kc190b29sOworICAgIGl0ZW0tPmRhdGEudG9vbC5mdW5jdGlvbiA9IGZ1bmN0aW9uOworICB9CisKKyAgcmV0dXJuIGl0ZW07Cit9CisKK3N0YXRpYyBNZW51SXRlbSAqCitnZXRQYXJlbnRNZW51SXRlbSAoY29uc3QgTWVudUl0ZW0gKml0ZW0pIHsKKyAgcmV0dXJuIGdldFNlbGVjdGVkTWVudUl0ZW0oaXRlbS0+bWVudS0+cGFyZW50KTsKK30KKworc3RhdGljIGludAordGVzdEl0ZW1fc3VibWVudSAoY29uc3QgTWVudUl0ZW0gKml0ZW0pIHsKKyAgcmV0dXJuIGdldE1lbnVTaXplKGl0ZW0tPmRhdGEuc3VibWVudS0+bWVudSkgPiAxOworfQorCitzdGF0aWMgaW50CitiZWdpbkl0ZW1fc3VibWVudSAoTWVudUl0ZW0gKml0ZW0pIHsKKyAgaXRlbS0+ZGF0YS5zdWJtZW51LT52aXNpYmxlID0gMDsKKworICB7CisgICAgTWVudSAqbWVudSA9IGl0ZW0tPmRhdGEuc3VibWVudS0+bWVudTsKKyAgICB1bnNpZ25lZCBpbnQgc2l6ZSA9IGdldE1lbnVTaXplKG1lbnUpOworCisgICAgZm9yICh1bnNpZ25lZCBpbnQgaW5kZXg9MTsgaW5kZXg8c2l6ZTsgaW5kZXgrPTEpIHsKKyAgICAgIGlmICh0ZXN0TWVudUl0ZW1BY3RpdmUobWVudSwgaW5kZXgpKSB7CisgICAgICAgIGl0ZW0tPmRhdGEuc3VibWVudS0+dmlzaWJsZSArPSAxOworICAgICAgfQorICAgIH0KKworICAgIGl0ZW0tPmRhdGEuc3VibWVudS0+dG90YWwgPSBzaXplIC0gMTsKKyAgfQorCisgIHJldHVybiAxOworfQorCitzdGF0aWMgdm9pZAorZW5kSXRlbV9zdWJtZW51IChNZW51SXRlbSAqaXRlbSwgaW50IGRlYWxsb2NhdGluZykgeworICBpZiAoZGVhbGxvY2F0aW5nKSB7CisgICAgU3VibWVudURhdGEgKnN1Ym1lbnUgPSBpdGVtLT5kYXRhLnN1Ym1lbnU7CisKKyAgICBkZXN0cm95TWVudShzdWJtZW51LT5tZW51KTsKKyAgICBmcmVlKHN1Ym1lbnUpOworICB9Cit9CisKK3N0YXRpYyB2b2lkCithY3RpdmF0ZUl0ZW1fc3VibWVudSAoTWVudUl0ZW0gKml0ZW0pIHsKKyAgZW5kTWVudUl0ZW0oaXRlbSwgMCk7CisgIGl0ZW0tPmRhdGEuc3VibWVudS0+b3BlbmVkID0gMTsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgKgorZ2V0VmFsdWVfc3VibWVudSAoY29uc3QgTWVudUl0ZW0gKml0ZW0pIHsKKyAgcmV0dXJuICItLS0+IjsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgKgorZ2V0Q29tbWVudF9zdWJtZW51IChjb25zdCBNZW51SXRlbSAqaXRlbSkgeworICBpZiAoIXByZWZzLnNob3dTdWJtZW51U2l6ZXMpIHJldHVybiAiIjsKKworICB7CisgICAgY29uc3QgU3VibWVudURhdGEgKnN1Ym1lbnUgPSBpdGVtLT5kYXRhLnN1Ym1lbnU7CisKKyAgICByZXR1cm4gcHJlZnMuc2hvd0FsbEl0ZW1zPworICAgICAgICAgICAgIGZvcm1hdFZhbHVlKGl0ZW0tPm1lbnUsICIldSIsIHN1Ym1lbnUtPnRvdGFsKToKKyAgICAgICAgICAgICBmb3JtYXRWYWx1ZShpdGVtLT5tZW51LCAiJXUvJXUiLCBzdWJtZW51LT52aXNpYmxlLCBzdWJtZW51LT50b3RhbCk7CisgIH0KK30KKworc3RhdGljIGNvbnN0IE1lbnVJdGVtTWV0aG9kcyBtZW51SXRlbU1ldGhvZHNfc3VibWVudSA9IHsKKyAgLnRlc3RJdGVtID0gdGVzdEl0ZW1fc3VibWVudSwKKyAgLmJlZ2luSXRlbSA9IGJlZ2luSXRlbV9zdWJtZW51LAorICAuZW5kSXRlbSA9IGVuZEl0ZW1fc3VibWVudSwKKyAgLmFjdGl2YXRlSXRlbSA9IGFjdGl2YXRlSXRlbV9zdWJtZW51LAorICAuZ2V0VmFsdWUgPSBnZXRWYWx1ZV9zdWJtZW51LAorICAuZ2V0Q29tbWVudCA9IGdldENvbW1lbnRfc3VibWVudQorfTsKKworc3RhdGljIHZvaWQKK2FjdGl2YXRlSXRlbV9jbG9zZSAoTWVudUl0ZW0gKml0ZW0pIHsKKyAgaXRlbSA9IGdldFBhcmVudE1lbnVJdGVtKGl0ZW0pOworICBpdGVtLT5kYXRhLnN1Ym1lbnUtPm9wZW5lZCA9IDA7CisgIGJlZ2luTWVudUl0ZW0oaXRlbSk7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICoKK2dldFZhbHVlX2Nsb3NlIChjb25zdCBNZW51SXRlbSAqaXRlbSkgeworICByZXR1cm4gZ2V0TG9jYWxpemVkVGV4dChzdHJ0ZXh0KCJDbG9zZSIpKTsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgKgorZ2V0Q29tbWVudF9jbG9zZSAoY29uc3QgTWVudUl0ZW0gKml0ZW0pIHsKKyAgcmV0dXJuIGdldE1lbnVJdGVtVGl0bGUoZ2V0UGFyZW50TWVudUl0ZW0oaXRlbSkpOworfQorCitzdGF0aWMgY29uc3QgTWVudUl0ZW1NZXRob2RzIG1lbnVJdGVtTWV0aG9kc19jbG9zZSA9IHsKKyAgLmFjdGl2YXRlSXRlbSA9IGFjdGl2YXRlSXRlbV9jbG9zZSwKKyAgLmdldFZhbHVlID0gZ2V0VmFsdWVfY2xvc2UsCisgIC5nZXRDb21tZW50ID0gZ2V0Q29tbWVudF9jbG9zZQorfTsKKworTWVudSAqCituZXdTdWJtZW51TWVudUl0ZW0gKAorICBNZW51ICptZW51LCBjb25zdCBNZW51U3RyaW5nICpuYW1lCispIHsKKyAgU3VibWVudURhdGEgKnN1Ym1lbnU7CisKKyAgaWYgKChzdWJtZW51ID0gbWFsbG9jKHNpemVvZigqc3VibWVudSkpKSkgeworICAgIG1lbXNldChzdWJtZW51LCAwLCBzaXplb2YoKnN1Ym1lbnUpKTsKKworICAgIGlmICgoc3VibWVudS0+bWVudSA9IG5ld01lbnUoKSkpIHsKKyAgICAgIHN0YXRpYyBjb25zdCBNZW51U3RyaW5nIGNsb3NlTmFtZSA9IHsubGFiZWw9IjwtLS0ifTsKKyAgICAgIE1lbnVJdGVtICpjbG9zZTsKKworICAgICAgaWYgKChjbG9zZSA9IG5ld01lbnVJdGVtKHN1Ym1lbnUtPm1lbnUsIE5VTEwsICZjbG9zZU5hbWUpKSkgeworICAgICAgICBNZW51SXRlbSAqaXRlbTsKKworICAgICAgICBpZiAoKGl0ZW0gPSBuZXdNZW51SXRlbShtZW51LCBOVUxMLCBuYW1lKSkpIHsKKyAgICAgICAgICBzdWJtZW51LT5tZW51LT5wYXJlbnQgPSBtZW51OworICAgICAgICAgIHN1Ym1lbnUtPm9wZW5lZCA9IDA7CisgICAgICAgICAgY2xvc2UtPm1ldGhvZHMgPSAmbWVudUl0ZW1NZXRob2RzX2Nsb3NlOworCisgICAgICAgICAgaXRlbS0+bWV0aG9kcyA9ICZtZW51SXRlbU1ldGhvZHNfc3VibWVudTsKKyAgICAgICAgICBpdGVtLT5kYXRhLnN1Ym1lbnUgPSBzdWJtZW51OworCisgICAgICAgICAgd2hpbGUgKDEpIHsKKyAgICAgICAgICAgIG1lbnUtPnN1Ym1lbnVDb3VudCArPSAxOworICAgICAgICAgICAgaWYgKCFtZW51LT5wYXJlbnQpIGJyZWFrOworICAgICAgICAgICAgbWVudSA9IG1lbnUtPnBhcmVudDsKKyAgICAgICAgICB9CisKKyAgICAgICAgICBzdWJtZW51LT5tZW51LT5tZW51TnVtYmVyID0gbWVudS0+c3VibWVudUNvdW50OworICAgICAgICAgIHJldHVybiBzdWJtZW51LT5tZW51OworICAgICAgICB9CisgICAgICB9CisKKyAgICAgIGRlc3Ryb3lNZW51KHN1Ym1lbnUtPm1lbnUpOworICAgIH0KKworICAgIGZyZWUoc3VibWVudSk7CisgIH0gZWxzZSB7CisgICAgbG9nTWFsbG9jRXJyb3IoKTsKKyAgfQorCisgIHJldHVybiBOVUxMOworfQorCit2b2lkCitjaGFuZ2VNZW51SXRlbSAoTWVudUl0ZW0gKml0ZW0pIHsKKyAgTWVudSAqbWVudSA9IGl0ZW0tPm1lbnU7CisKKyAgbWVudS0+aXRlbXMuaW5kZXggPSBnZXRNZW51SXRlbUluZGV4KGl0ZW0pOworfQorCitpbnQKK2NoYW5nZU1lbnVJdGVtUHJldmlvdXMgKE1lbnUgKm1lbnUsIGludCB3cmFwKSB7CisgIHVuc2lnbmVkIGludCBpbmRleCA9IG1lbnUtPml0ZW1zLmluZGV4OworICBpZiAoaW5kZXggPj0gbWVudS0+aXRlbXMuY291bnQpIHJldHVybiAwOworCisgIGRvIHsKKyAgICBpZiAoIW1lbnUtPml0ZW1zLmluZGV4KSB7CisgICAgICBpZiAoIXdyYXApIHsKKyAgICAgICAgbWVudS0+aXRlbXMuaW5kZXggPSBpbmRleDsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgICB9CisKKyAgICAgIG1lbnUtPml0ZW1zLmluZGV4ID0gbWVudS0+aXRlbXMuY291bnQ7CisgICAgfQorCisgICAgaWYgKC0tbWVudS0+aXRlbXMuaW5kZXggPT0gaW5kZXgpIHJldHVybiAwOworICB9IHdoaWxlICghdGVzdE1lbnVJdGVtVmlzaWJsZShtZW51LCBtZW51LT5pdGVtcy5pbmRleCkpOworCisgIHJldHVybiAxOworfQorCitpbnQKK2NoYW5nZU1lbnVJdGVtTmV4dCAoTWVudSAqbWVudSwgaW50IHdyYXApIHsKKyAgdW5zaWduZWQgaW50IGluZGV4ID0gbWVudS0+aXRlbXMuaW5kZXg7CisgIGlmIChpbmRleCA+PSBtZW51LT5pdGVtcy5jb3VudCkgcmV0dXJuIDA7CisKKyAgZG8geworICAgIGlmICgrK21lbnUtPml0ZW1zLmluZGV4ID09IG1lbnUtPml0ZW1zLmNvdW50KSB7CisgICAgICBpZiAoIXdyYXApIHsKKyAgICAgICAgbWVudS0+aXRlbXMuaW5kZXggPSBpbmRleDsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgICB9CisKKyAgICAgIG1lbnUtPml0ZW1zLmluZGV4ID0gMDsKKyAgICB9CisKKyAgICBpZiAobWVudS0+aXRlbXMuaW5kZXggPT0gaW5kZXgpIHJldHVybiAwOworICB9IHdoaWxlICghdGVzdE1lbnVJdGVtVmlzaWJsZShtZW51LCBtZW51LT5pdGVtcy5pbmRleCkpOworCisgIHJldHVybiAxOworfQorCitpbnQKK2NoYW5nZU1lbnVJdGVtRmlyc3QgKE1lbnUgKm1lbnUpIHsKKyAgaWYgKCFtZW51LT5pdGVtcy5jb3VudCkgcmV0dXJuIDA7CisgIG1lbnUtPml0ZW1zLmluZGV4ID0gMDsKKyAgcmV0dXJuIHRlc3RNZW51SXRlbVZpc2libGUobWVudSwgbWVudS0+aXRlbXMuaW5kZXgpIHx8IGNoYW5nZU1lbnVJdGVtTmV4dChtZW51LCAwKTsKK30KKworaW50CitjaGFuZ2VNZW51SXRlbUxhc3QgKE1lbnUgKm1lbnUpIHsKKyAgaWYgKCFtZW51LT5pdGVtcy5jb3VudCkgcmV0dXJuIDA7CisgIG1lbnUtPml0ZW1zLmluZGV4ID0gbWVudS0+aXRlbXMuY291bnQgLSAxOworICByZXR1cm4gdGVzdE1lbnVJdGVtVmlzaWJsZShtZW51LCBtZW51LT5pdGVtcy5pbmRleCkgfHwgY2hhbmdlTWVudUl0ZW1QcmV2aW91cyhtZW51LCAwKTsKK30KKworaW50CitjaGFuZ2VNZW51SXRlbUluZGV4IChNZW51ICptZW51LCB1bnNpZ25lZCBpbnQgaW5kZXgpIHsKKyAgaWYgKGluZGV4ID49IG1lbnUtPml0ZW1zLmNvdW50KSByZXR1cm4gMDsKKyAgbWVudS0+aXRlbXMuaW5kZXggPSBpbmRleDsKKyAgcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQKK2FjdGl2YXRlTWVudUl0ZW0gKE1lbnVJdGVtICppdGVtKSB7CisgIGlmICghaXRlbS0+bWV0aG9kcy0+YWN0aXZhdGVJdGVtKSByZXR1cm4gMDsKKyAgaXRlbS0+bWV0aG9kcy0+YWN0aXZhdGVJdGVtKGl0ZW0pOworICByZXR1cm4gMTsKK30KKworc3RhdGljIGludAorYWRqdXN0TWVudVNldHRpbmcgKGNvbnN0IE1lbnVJdGVtICppdGVtLCBpbnQgKCphZGp1c3QpIChjb25zdCBNZW51SXRlbSAqaXRlbSwgaW50IHdyYXApLCBpbnQgd3JhcCkgeworICB1bnNpZ25lZCBjaGFyIHNldHRpbmcgPSAqaXRlbS0+c2V0dGluZzsKKyAgaW50IGNvdW50ID0gaXRlbS0+bWF4aW11bSAtIGl0ZW0tPm1pbmltdW0gKyAxOworCisgIGRvIHsKKyAgICBpbnQgb2sgPSAwOworCisgICAgaWYgKC0tY291bnQpIHsKKyAgICAgIGlmIChhZGp1c3QoaXRlbSwgd3JhcCkpIHsKKyAgICAgICAgb2sgPSAxOworICAgICAgfQorICAgIH0KKworICAgIGlmICghb2spIHsKKyAgICAgICppdGVtLT5zZXR0aW5nID0gc2V0dGluZzsKKyAgICAgIHJldHVybiAwOworICAgIH0KKyAgfSB3aGlsZSAoKCppdGVtLT5zZXR0aW5nICUgaXRlbS0+c3RlcCkgfHwgKGl0ZW0tPmNoYW5nZWQgJiYgIWl0ZW0tPmNoYW5nZWQoaXRlbSwgKml0ZW0tPnNldHRpbmcpKSk7CisKKyAgcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQKK2RlY3JlbWVudE1lbnVTZXR0aW5nIChjb25zdCBNZW51SXRlbSAqaXRlbSwgaW50IHdyYXApIHsKKyAgaWYgKCgqaXRlbS0+c2V0dGluZyktLSA8PSBpdGVtLT5taW5pbXVtKSB7CisgICAgaWYgKCF3cmFwKSByZXR1cm4gMDsKKyAgICAqaXRlbS0+c2V0dGluZyA9IGl0ZW0tPm1heGltdW07CisgIH0KKworICByZXR1cm4gMTsKK30KKworaW50CitjaGFuZ2VNZW51U2V0dGluZ1ByZXZpb3VzIChNZW51ICptZW51LCBpbnQgd3JhcCkgeworICBNZW51SXRlbSAqaXRlbSA9IGdldEN1cnJlbnRNZW51SXRlbShtZW51KTsKKworICBpZiAoYWN0aXZhdGVNZW51SXRlbShpdGVtKSkgcmV0dXJuIDE7CisgIGlmICghaXRlbS0+c2V0dGluZykgcmV0dXJuIDA7CisgIHJldHVybiBhZGp1c3RNZW51U2V0dGluZyhpdGVtLCBkZWNyZW1lbnRNZW51U2V0dGluZywgd3JhcCk7Cit9CisKK3N0YXRpYyBpbnQKK2luY3JlbWVudE1lbnVTZXR0aW5nIChjb25zdCBNZW51SXRlbSAqaXRlbSwgaW50IHdyYXApIHsKKyAgaWYgKCgqaXRlbS0+c2V0dGluZykrKyA+PSBpdGVtLT5tYXhpbXVtKSB7CisgICAgaWYgKCF3cmFwKSByZXR1cm4gMDsKKyAgICAqaXRlbS0+c2V0dGluZyA9IGl0ZW0tPm1pbmltdW07CisgIH0KKworICByZXR1cm4gMTsKK30KKworaW50CitjaGFuZ2VNZW51U2V0dGluZ05leHQgKE1lbnUgKm1lbnUsIGludCB3cmFwKSB7CisgIE1lbnVJdGVtICppdGVtID0gZ2V0Q3VycmVudE1lbnVJdGVtKG1lbnUpOworCisgIGlmIChhY3RpdmF0ZU1lbnVJdGVtKGl0ZW0pKSByZXR1cm4gMTsKKyAgaWYgKCFpdGVtLT5zZXR0aW5nKSByZXR1cm4gMDsKKyAgcmV0dXJuIGFkanVzdE1lbnVTZXR0aW5nKGl0ZW0sIGluY3JlbWVudE1lbnVTZXR0aW5nLCB3cmFwKTsKK30KKworaW50CitjaGFuZ2VNZW51U2V0dGluZ1NjYWxlZCAoTWVudSAqbWVudSwgdW5zaWduZWQgaW50IGluZGV4LCB1bnNpZ25lZCBpbnQgY291bnQpIHsKKyAgTWVudUl0ZW0gKml0ZW0gPSBnZXRDdXJyZW50TWVudUl0ZW0obWVudSk7CisKKyAgaWYgKGFjdGl2YXRlTWVudUl0ZW0oaXRlbSkpIHJldHVybiAxOworCisgIGlmIChpdGVtLT5zZXR0aW5nKSB7CisgICAgdW5zaWduZWQgY2hhciBvbGRTZXR0aW5nID0gKml0ZW0tPnNldHRpbmc7CisKKyAgICBpZiAoaXRlbS0+bWV0aG9kcy0+Z2V0VmFsdWUgPT0gZ2V0VmFsdWVfbnVtZXJpYykgeworICAgICAgKml0ZW0tPnNldHRpbmcgPSByZXNjYWxlSW50ZWdlcihpbmRleCwgY291bnQtMSwgaXRlbS0+bWF4aW11bS1pdGVtLT5taW5pbXVtKSArIGl0ZW0tPm1pbmltdW07CisgICAgfSBlbHNlIHsKKyAgICAgICppdGVtLT5zZXR0aW5nID0gaW5kZXggJSAoaXRlbS0+bWF4aW11bSArIDEpOworICAgIH0KKworICAgIGlmICghaXRlbS0+Y2hhbmdlZCB8fCBpdGVtLT5jaGFuZ2VkKGl0ZW0sICppdGVtLT5zZXR0aW5nKSkgcmV0dXJuIDE7CisgICAgKml0ZW0tPnNldHRpbmcgPSBvbGRTZXR0aW5nOworICB9CisKKyAgcmV0dXJuIDA7Cit9CisKK01lbnVJdGVtICoKK2dldEN1cnJlbnRNZW51SXRlbSAoTWVudSAqbWVudSkgeworICBNZW51SXRlbSAqbmV3SXRlbSA9IGdldFNlbGVjdGVkTWVudUl0ZW0obWVudSk7CisgIE1lbnVJdGVtICpvbGRJdGVtID0gbWVudS0+YWN0aXZlSXRlbTsKKworICBpZiAobmV3SXRlbSAhPSBvbGRJdGVtKSB7CisgICAgaWYgKG9sZEl0ZW0pIGVuZE1lbnVJdGVtKG9sZEl0ZW0sIDApOworICAgIG1lbnUtPmFjdGl2ZUl0ZW0gPSBiZWdpbk1lbnVJdGVtKG5ld0l0ZW0pPyBuZXdJdGVtOiBOVUxMOworICB9CisKKyAgcmV0dXJuIG5ld0l0ZW07Cit9CisKK01lbnUgKgorZ2V0Q3VycmVudFN1Ym1lbnUgKE1lbnUgKm1lbnUpIHsKKyAgd2hpbGUgKDEpIHsKKyAgICBNZW51SXRlbSAqaXRlbSA9IGdldEN1cnJlbnRNZW51SXRlbShtZW51KTsKKworICAgIGlmIChpdGVtLT5tZXRob2RzICE9ICZtZW51SXRlbU1ldGhvZHNfc3VibWVudSkgYnJlYWs7CisgICAgaWYgKCFpdGVtLT5kYXRhLnN1Ym1lbnUtPm9wZW5lZCkgYnJlYWs7CisgICAgbWVudSA9IGl0ZW0tPmRhdGEuc3VibWVudS0+bWVudTsKKyAgfQorCisgIHJldHVybiBtZW51OworfQpkaWZmIC0tZ2l0IGEvUHJvZ3JhbXMvbWVudV9wcmVmcy5jIGIvUHJvZ3JhbXMvbWVudV9wcmVmcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ2NWQyNDgKLS0tIC9kZXYvbnVsbAorKysgYi9Qcm9ncmFtcy9tZW51X3ByZWZzLmMKQEAgLTAsMCArMSwxNjExIEBACisvKgorICogQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyAqICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyAqCisgKiBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorICoKKyAqIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyAqCisgKiBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisgKi8KKworI2luY2x1ZGUgInByb2xvZ3VlLmgiCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorCisjaW5jbHVkZSAibG9nLmgiCisjaW5jbHVkZSAibG9nX2hpc3RvcnkuaCIKKyNpbmNsdWRlICJlbWJlZC5oIgorI2luY2x1ZGUgInJldmlzaW9uLmgiCisjaW5jbHVkZSAiYXBpX2NvbnRyb2wuaCIKKyNpbmNsdWRlICJtZW51LmgiCisjaW5jbHVkZSAibWVudV9wcmVmcy5oIgorI2luY2x1ZGUgInByZWZzLmgiCisjaW5jbHVkZSAicHJvZmlsZS5oIgorI2luY2x1ZGUgInN0YXR1c190eXBlcy5oIgorI2luY2x1ZGUgImJsaW5rLmgiCisjaW5jbHVkZSAidGltaW5nLmgiCisjaW5jbHVkZSAiYnJsLmgiCisjaW5jbHVkZSAic3BrLmgiCisjaW5jbHVkZSAidHRiLmgiCisjaW5jbHVkZSAiYXRiLmgiCisjaW5jbHVkZSAiY3RiLmgiCisjaW5jbHVkZSAia3RiLmgiCisjaW5jbHVkZSAidHVuZS5oIgorI2luY2x1ZGUgImJlbGwuaCIKKyNpbmNsdWRlICJsZWRzLmgiCisjaW5jbHVkZSAibWlkaS5oIgorI2luY2x1ZGUgImNvcmUuaCIKKworI2RlZmluZSBQUkVGU19NRU5VX0lURU1fVkFSSUFCTEUobmFtZSkgcHJlZnNNZW51SXRlbVZhcmlhYmxlXyMjbmFtZQorI2RlZmluZSBQUkVGU19NRU5VX0lURU1fR0VUVEVSX0RFQ0xBUkUobmFtZSkgXAorc3RhdGljIE1lbnVJdGVtICpQUkVGU19NRU5VX0lURU1fVkFSSUFCTEUobmFtZSkgPSBOVUxMOyBcCitQUkVGU19NRU5VX0lURU1fR0VUVEVSX1BST1RPVFlQRShuYW1lKSB7IFwKKyAgcmV0dXJuIGdldFByZWZlcmVuY2VzTWVudSgpPyBQUkVGU19NRU5VX0lURU1fVkFSSUFCTEUobmFtZSk6IE5VTEw7IFwKK30KKworUFJFRlNfTUVOVV9JVEVNX0FQUExZKFBSRUZTX01FTlVfSVRFTV9HRVRURVJfREVDTEFSRSkKKworI2RlZmluZSBOQU1FKG5hbWUpIHN0YXRpYyBjb25zdCBNZW51U3RyaW5nIGl0ZW1OYW1lID0gey5sYWJlbD1uYW1lfQorI2RlZmluZSBJVEVNKG5ldykgTWVudUl0ZW0gKml0ZW0gPSAobmV3KTsgaWYgKCFpdGVtKSBnb3RvIG5vSXRlbQorI2RlZmluZSBURVNUKHByb3BlcnR5KSBzZXRNZW51SXRlbVRlc3RlcihpdGVtLCB0ZXN0IyNwcm9wZXJ0eSkKKyNkZWZpbmUgQ0hBTkdFRChwcm9wZXJ0eSkgc2V0TWVudUl0ZW1DaGFuZ2VkKGl0ZW0sIGNoYW5nZWQjI3Byb3BlcnR5KQorI2RlZmluZSBTRVQobmFtZSkgUFJFRlNfTUVOVV9JVEVNX1ZBUklBQkxFKG5hbWUpID0gaXRlbQorCisjZGVmaW5lIFNVQk1FTlUodmFyaWFibGUsIHBhcmVudCwgbmFtZSkgXAorICBOQU1FKG5hbWUpOyBcCisgIE1lbnUgKnZhcmlhYmxlID0gbmV3U3VibWVudU1lbnVJdGVtKHBhcmVudCwgJml0ZW1OYW1lKTsgXAorICBpZiAoIXZhcmlhYmxlKSBnb3RvIG5vSXRlbQorCisjZGVmaW5lIFBST1BFUlRZKHZhcmlhYmxlLCB2YWx1ZSkgXAorICBzdGF0aWMgdW5zaWduZWQgY2hhciB2YXJpYWJsZTsgXAorICB2YXJpYWJsZSA9ICh2YWx1ZSkKKworI2RlZmluZSBCTElOS19QRVJJT0QoYmxpbmspIFBST1BFUlRZKHBlcmlvZCwgTVNFQ1MyUFJFRlMoZ2V0QmxpbmtQZXJpb2QoKGJsaW5rKSkpKQorI2RlZmluZSBCTElOS19WSVNJQkxFKGJsaW5rKSBQUk9QRVJUWSh2aXNpYmxlLCBnZXRCbGlua1BlcmNlbnRWaXNpYmxlKChibGluaykpKQorCitzdGF0aWMgaW50Cit0ZXN0QWR2YW5jZWRTdWJtZW51ICh2b2lkKSB7CisgIHJldHVybiBwcmVmcy5zaG93QWR2YW5jZWRTdWJtZW51czsKK30KKworc3RhdGljIHZvaWQKK3NldEFkdmFuY2VkU3VibWVudSAoTWVudSAqc3VibWVudSkgeworICBNZW51ICpwYXJlbnQgPSBnZXRNZW51UGFyZW50KHN1Ym1lbnUpOworCisgIGlmIChwYXJlbnQpIHsKKyAgICB1bnNpZ25lZCBpbnQgc2l6ZSA9IGdldE1lbnVTaXplKHBhcmVudCk7CisKKyAgICBpZiAoc2l6ZSkgeworICAgICAgTWVudUl0ZW0gKml0ZW0gPSBnZXRNZW51SXRlbShwYXJlbnQsIHNpemUtMSk7CisKKyAgICAgIGlmIChpdGVtKSBzZXRNZW51SXRlbVRlc3RlcihpdGVtLCB0ZXN0QWR2YW5jZWRTdWJtZW51KTsKKyAgICB9CisgIH0KK30KKworc3RhdGljIGludAordGVzdFNsaWRpbmdCcmFpbGxlV2luZG93ICh2b2lkKSB7CisgIHJldHVybiBwcmVmcy5zbGlkaW5nQnJhaWxsZVdpbmRvdzsKK30KKworc3RhdGljIGludAorY2hhbmdlZEJyYWlsbGVXaW5kb3dPdmVybGFwIChjb25zdCBNZW51SXRlbSAqaXRlbSBVTlVTRUQsIHVuc2lnbmVkIGNoYXIgc2V0dGluZykgeworICBpZiAoc2V0dGluZyA+PSB0ZXh0Q291bnQpIHJldHVybiAwOworICByZWNvbmZpZ3VyZUJyYWlsbGVXaW5kb3coKTsKKyAgcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQKK2NoYW5nZWRBdXRvcmVsZWFzZVRpbWUgKGNvbnN0IE1lbnVJdGVtICppdGVtIFVOVVNFRCwgdW5zaWduZWQgY2hhciBzZXR0aW5nKSB7CisgIGlmIChicmwua2V5VGFibGUpIHNldEtleUF1dG9yZWxlYXNlVGltZShicmwua2V5VGFibGUsIHNldHRpbmcpOworICByZXR1cm4gMTsKK30KKworc3RhdGljIGludAordGVzdEF1dG9yZXBlYXRFbmFibGVkICh2b2lkKSB7CisgIHJldHVybiBwcmVmcy5hdXRvcmVwZWF0RW5hYmxlZDsKK30KKworc3RhdGljIGludAorY2hhbmdlQXV0b3JlcGVhdFByb3BlcnRpZXMgKEJyYWlsbGVEaXNwbGF5ICpicmwsIGludCBvbiwgaW50IGRlbGF5LCBpbnQgaW50ZXJ2YWwpIHsKKyAgaWYgKCFjYW5TZXRBdXRvcmVwZWF0UHJvcGVydGllcyhicmwpKSByZXR1cm4gMTsKKyAgcmV0dXJuIHNldEF1dG9yZXBlYXRQcm9wZXJ0aWVzKGJybCwgb24sIGRlbGF5LCBpbnRlcnZhbCk7Cit9CisKK3N0YXRpYyBpbnQKK2NoYW5nZWRBdXRvcmVwZWF0RW5hYmxlZCAoY29uc3QgTWVudUl0ZW0gKml0ZW0gVU5VU0VELCB1bnNpZ25lZCBjaGFyIHNldHRpbmcpIHsKKyAgcmV0dXJuIGNoYW5nZUF1dG9yZXBlYXRQcm9wZXJ0aWVzKCZicmwsIHNldHRpbmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUkVGUzJNU0VDUyhwcmVmcy5sb25nUHJlc3NUaW1lKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBSRUZTMk1TRUNTKHByZWZzLmF1dG9yZXBlYXRJbnRlcnZhbCkpOworfQorCitzdGF0aWMgaW50CitjaGFuZ2VkQXV0b3JlcGVhdERlbGF5IChjb25zdCBNZW51SXRlbSAqaXRlbSBVTlVTRUQsIHVuc2lnbmVkIGNoYXIgc2V0dGluZykgeworICByZXR1cm4gY2hhbmdlQXV0b3JlcGVhdFByb3BlcnRpZXMoJmJybCwgcHJlZnMuYXV0b3JlcGVhdEVuYWJsZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXR0aW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJFRlMyTVNFQ1MocHJlZnMuYXV0b3JlcGVhdEludGVydmFsKSk7Cit9CisKK3N0YXRpYyBpbnQKK2NoYW5nZWRBdXRvcmVwZWF0SW50ZXJ2YWwgKGNvbnN0IE1lbnVJdGVtICppdGVtIFVOVVNFRCwgdW5zaWduZWQgY2hhciBzZXR0aW5nKSB7CisgIHJldHVybiBjaGFuZ2VBdXRvcmVwZWF0UHJvcGVydGllcygmYnJsLCBwcmVmcy5hdXRvcmVwZWF0RW5hYmxlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBSRUZTMk1TRUNTKHByZWZzLmxvbmdQcmVzc1RpbWUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0dGluZyk7Cit9CisKK3N0YXRpYyBpbnQKK3Rlc3RTaG93U2NyZWVuQ3Vyc29yICh2b2lkKSB7CisgIHJldHVybiBwcmVmcy5zaG93U2NyZWVuQ3Vyc29yOworfQorCitzdGF0aWMgaW50Cit0ZXN0QmxpbmtpbmdTY3JlZW5DdXJzb3IgKHZvaWQpIHsKKyAgcmV0dXJuIHRlc3RTaG93U2NyZWVuQ3Vyc29yKCkgJiYgcHJlZnMuYmxpbmtpbmdTY3JlZW5DdXJzb3I7Cit9CisKK3N0YXRpYyBpbnQKK2NoYW5nZWRTY3JlZW5DdXJzb3JCbGlua1BlcmlvZCAoY29uc3QgTWVudUl0ZW0gKml0ZW0gVU5VU0VELCB1bnNpZ25lZCBjaGFyIHNldHRpbmcpIHsKKyAgc2V0QmxpbmtQZXJpb2QoJnNjcmVlbkN1cnNvckJsaW5rRGVzY3JpcHRvciwgUFJFRlMyTVNFQ1Moc2V0dGluZykpOworICByZXR1cm4gMTsKK30KKworc3RhdGljIGludAorY2hhbmdlZFNjcmVlbkN1cnNvckJsaW5rUGVyY2VudGFnZSAoY29uc3QgTWVudUl0ZW0gKml0ZW0gVU5VU0VELCB1bnNpZ25lZCBjaGFyIHNldHRpbmcpIHsKKyAgcmV0dXJuIHNldEJsaW5rUGVyY2VudFZpc2libGUoJnNjcmVlbkN1cnNvckJsaW5rRGVzY3JpcHRvciwgc2V0dGluZyk7Cit9CisKK3N0YXRpYyBpbnQKK3Rlc3RTaG93QXR0cmlidXRlcyAodm9pZCkgeworICByZXR1cm4gcHJlZnMuc2hvd0F0dHJpYnV0ZXM7Cit9CisKK3N0YXRpYyBpbnQKK3Rlc3RCbGlua2luZ0F0dHJpYnV0ZXMgKHZvaWQpIHsKKyAgcmV0dXJuIHRlc3RTaG93QXR0cmlidXRlcygpICYmIHByZWZzLmJsaW5raW5nQXR0cmlidXRlczsKK30KKworc3RhdGljIGludAorY2hhbmdlZEF0dHJpYnV0ZXNVbmRlcmxpbmVCbGlua1BlcmlvZCAoY29uc3QgTWVudUl0ZW0gKml0ZW0gVU5VU0VELCB1bnNpZ25lZCBjaGFyIHNldHRpbmcpIHsKKyAgc2V0QmxpbmtQZXJpb2QoJmF0dHJpYnV0ZXNVbmRlcmxpbmVCbGlua0Rlc2NyaXB0b3IsIFBSRUZTMk1TRUNTKHNldHRpbmcpKTsKKyAgcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQKK2NoYW5nZWRBdHRyaWJ1dGVzVW5kZXJsaW5lQmxpbmtQZXJjZW50YWdlIChjb25zdCBNZW51SXRlbSAqaXRlbSBVTlVTRUQsIHVuc2lnbmVkIGNoYXIgc2V0dGluZykgeworICByZXR1cm4gc2V0QmxpbmtQZXJjZW50VmlzaWJsZSgmYXR0cmlidXRlc1VuZGVybGluZUJsaW5rRGVzY3JpcHRvciwgc2V0dGluZyk7Cit9CisKK3N0YXRpYyBpbnQKK3Rlc3RCbGlua2luZ0NhcGl0YWxzICh2b2lkKSB7CisgIHJldHVybiBwcmVmcy5ibGlua2luZ0NhcGl0YWxzOworfQorCitzdGF0aWMgaW50CitjaGFuZ2VkVXBwZXJjYXNlTGV0dGVyc0JsaW5rUGVyaW9kIChjb25zdCBNZW51SXRlbSAqaXRlbSBVTlVTRUQsIHVuc2lnbmVkIGNoYXIgc2V0dGluZykgeworICBzZXRCbGlua1BlcmlvZCgmdXBwZXJjYXNlTGV0dGVyc0JsaW5rRGVzY3JpcHRvciwgUFJFRlMyTVNFQ1Moc2V0dGluZykpOworICByZXR1cm4gMTsKK30KKworc3RhdGljIGludAorY2hhbmdlZFVwcGVyY2FzZUxldHRlcnNCbGlua1BlcmNlbnRhZ2UgKGNvbnN0IE1lbnVJdGVtICppdGVtIFVOVVNFRCwgdW5zaWduZWQgY2hhciBzZXR0aW5nKSB7CisgIHJldHVybiBzZXRCbGlua1BlcmNlbnRWaXNpYmxlKCZ1cHBlcmNhc2VMZXR0ZXJzQmxpbmtEZXNjcmlwdG9yLCBzZXR0aW5nKTsKK30KKworc3RhdGljIGludAordGVzdEJyYWlsbGVGaXJtbmVzcyAodm9pZCkgeworICByZXR1cm4gY2FuU2V0QnJhaWxsZUZpcm1uZXNzKCZicmwpOworfQorCitzdGF0aWMgaW50CitjaGFuZ2VkQnJhaWxsZUZpcm1uZXNzIChjb25zdCBNZW51SXRlbSAqaXRlbSBVTlVTRUQsIHVuc2lnbmVkIGNoYXIgc2V0dGluZykgeworICByZXR1cm4gc2V0QnJhaWxsZUZpcm1uZXNzKCZicmwsIHNldHRpbmcpOworfQorCitzdGF0aWMgaW50Cit0ZXN0VG91Y2hTZW5zaXRpdml0eSAodm9pZCkgeworICByZXR1cm4gY2FuU2V0VG91Y2hTZW5zaXRpdml0eSgmYnJsKTsKK30KKworc3RhdGljIGludAorY2hhbmdlZFRvdWNoU2Vuc2l0aXZpdHkgKGNvbnN0IE1lbnVJdGVtICppdGVtIFVOVVNFRCwgdW5zaWduZWQgY2hhciBzZXR0aW5nKSB7CisgIHJldHVybiBzZXRUb3VjaFNlbnNpdGl2aXR5KCZicmwsIHNldHRpbmcpOworfQorCitzdGF0aWMgaW50Cit0ZXN0Q29uc29sZUJlbGxBbGVydCAodm9pZCkgeworICByZXR1cm4gY2FuTW9uaXRvckNvbnNvbGVCZWxsKCk7Cit9CisKK3N0YXRpYyBpbnQKK2NoYW5nZWRDb25zb2xlQmVsbEFsZXJ0IChjb25zdCBNZW51SXRlbSAqaXRlbSBVTlVTRUQsIHVuc2lnbmVkIGNoYXIgc2V0dGluZykgeworICByZXR1cm4gc2V0Q29uc29sZUJlbGxNb25pdG9yaW5nKHNldHRpbmcpOworfQorCitzdGF0aWMgaW50Cit0ZXN0S2V5Ym9hcmRMZWRBbGVydHMgKHZvaWQpIHsKKyAgcmV0dXJuIGNhbk1vbml0b3JMZWRzKCk7Cit9CisKK3N0YXRpYyBpbnQKK2NoYW5nZWRLZXlib2FyZExlZEFsZXJ0cyAoY29uc3QgTWVudUl0ZW0gKml0ZW0gVU5VU0VELCB1bnNpZ25lZCBjaGFyIHNldHRpbmcpIHsKKyAgcmV0dXJuIHNldExlZE1vbml0b3Jpbmcoc2V0dGluZyk7Cit9CisKK3N0YXRpYyBpbnQKK3Rlc3RBbGVydFR1bmVzICh2b2lkKSB7CisgIHJldHVybiBwcmVmcy5hbGVydFR1bmVzOworfQorCitzdGF0aWMgaW50CitjaGFuZ2VkQWxlcnRUdW5lcyAoY29uc3QgTWVudUl0ZW0gKml0ZW0gVU5VU0VELCB1bnNpZ25lZCBjaGFyIHNldHRpbmcpIHsKKyAgYXBpLnVwZGF0ZVBhcmFtZXRlcihCUkxBUElfUEFSQU1fQVVESUJMRV9BTEVSVFMsIDApOworICByZXR1cm4gMTsKK30KKworc3RhdGljIGludAorY2hhbmdlZFR1bmVEZXZpY2UgKGNvbnN0IE1lbnVJdGVtICppdGVtIFVOVVNFRCwgdW5zaWduZWQgY2hhciBzZXR0aW5nKSB7CisgIHJldHVybiB0dW5lU2V0RGV2aWNlKHNldHRpbmcpOworfQorCisjaWZkZWYgSEFWRV9QQ01fU1VQUE9SVAorc3RhdGljIGludAordGVzdFR1bmVzUGNtICh2b2lkKSB7CisgIHJldHVybiB0ZXN0QWxlcnRUdW5lcygpICYmIChwcmVmcy50dW5lRGV2aWNlID09IHRkUGNtKTsKK30KKyNlbmRpZiAvKiBIQVZFX1BDTV9TVVBQT1JUICovCisKKyNpZmRlZiBIQVZFX01JRElfU1VQUE9SVAorc3RhdGljIGludAordGVzdFR1bmVzTWlkaSAodm9pZCkgeworICByZXR1cm4gdGVzdEFsZXJ0VHVuZXMoKSAmJiAocHJlZnMudHVuZURldmljZSA9PSB0ZE1pZGkpOworfQorI2VuZGlmIC8qIEhBVkVfTUlESV9TVVBQT1JUICovCisKKyNpZmRlZiBIQVZFX0ZNX1NVUFBPUlQKK3N0YXRpYyBpbnQKK3Rlc3RUdW5lc0ZtICh2b2lkKSB7CisgIHJldHVybiB0ZXN0QWxlcnRUdW5lcygpICYmIChwcmVmcy50dW5lRGV2aWNlID09IHRkRm0pOworfQorI2VuZGlmIC8qIEhBVkVfRk1fU1VQUE9SVCAqLworCisjaWZkZWYgRU5BQkxFX1NQRUVDSF9TVVBQT1JUCitzdGF0aWMgaW50Cit0ZXN0U3BlZWNoVm9sdW1lICh2b2lkKSB7CisgIHJldHVybiBjYW5TZXRTcGVlY2hWb2x1bWUoJnNwayk7Cit9CisKK3N0YXRpYyBpbnQKK2NoYW5nZWRTcGVlY2hWb2x1bWUgKGNvbnN0IE1lbnVJdGVtICppdGVtIFVOVVNFRCwgdW5zaWduZWQgY2hhciBzZXR0aW5nKSB7CisgIHJldHVybiBzZXRTcGVlY2hWb2x1bWUoJnNwaywgc2V0dGluZywgIXByZWZzLmF1dG9zcGVhayk7Cit9CisKK3N0YXRpYyB2b2lkCitmb3JtYXRTcGVlY2hWb2x1bWUgKE1lbnUgKm1lbnUsIHVuc2lnbmVkIGNoYXIgdm9sdW1lLCBjaGFyICpidWZmZXIsIHNpemVfdCBzaXplKSB7CisgIHNucHJpbnRmKAorICAgIGJ1ZmZlciwgc2l6ZSwgIiVkIiwgdG9Ob3JtYWxpemVkU3BlZWNoVm9sdW1lKHZvbHVtZSkKKyAgKTsKK30KKworc3RhdGljIGludAordGVzdFNwZWVjaFJhdGUgKHZvaWQpIHsKKyAgcmV0dXJuIGNhblNldFNwZWVjaFJhdGUoJnNwayk7Cit9CisKK3N0YXRpYyBpbnQKK2NoYW5nZWRTcGVlY2hSYXRlIChjb25zdCBNZW51SXRlbSAqaXRlbSBVTlVTRUQsIHVuc2lnbmVkIGNoYXIgc2V0dGluZykgeworICByZXR1cm4gc2V0U3BlZWNoUmF0ZSgmc3BrLCBzZXR0aW5nLCAhcHJlZnMuYXV0b3NwZWFrKTsKK30KKworc3RhdGljIHZvaWQKK2Zvcm1hdFNwZWVjaFJhdGUgKE1lbnUgKm1lbnUsIHVuc2lnbmVkIGNoYXIgcmF0ZSwgY2hhciAqYnVmZmVyLCBzaXplX3Qgc2l6ZSkgeworICBzbnByaW50ZigKKyAgICBidWZmZXIsIHNpemUsICIlZCIsIHRvTm9ybWFsaXplZFNwZWVjaFJhdGUocmF0ZSkKKyAgKTsKK30KKworc3RhdGljIGludAordGVzdFNwZWVjaFBpdGNoICh2b2lkKSB7CisgIHJldHVybiBjYW5TZXRTcGVlY2hQaXRjaCgmc3BrKTsKK30KKworc3RhdGljIGludAorY2hhbmdlZFNwZWVjaFBpdGNoIChjb25zdCBNZW51SXRlbSAqaXRlbSBVTlVTRUQsIHVuc2lnbmVkIGNoYXIgc2V0dGluZykgeworICByZXR1cm4gc2V0U3BlZWNoUGl0Y2goJnNwaywgc2V0dGluZywgIXByZWZzLmF1dG9zcGVhayk7Cit9CisKK3N0YXRpYyB2b2lkCitmb3JtYXRTcGVlY2hQaXRjaCAoTWVudSAqbWVudSwgdW5zaWduZWQgY2hhciBwaXRjaCwgY2hhciAqYnVmZmVyLCBzaXplX3Qgc2l6ZSkgeworICBzbnByaW50ZigKKyAgICBidWZmZXIsIHNpemUsICIlZCIsIHRvTm9ybWFsaXplZFNwZWVjaFBpdGNoKHBpdGNoKQorICApOworfQorCitzdGF0aWMgaW50Cit0ZXN0U3BlZWNoUHVuY3R1YXRpb24gKHZvaWQpIHsKKyAgcmV0dXJuIGNhblNldFNwZWVjaFB1bmN0dWF0aW9uKCZzcGspOworfQorCitzdGF0aWMgaW50CitjaGFuZ2VkU3BlZWNoUHVuY3R1YXRpb24gKGNvbnN0IE1lbnVJdGVtICppdGVtIFVOVVNFRCwgdW5zaWduZWQgY2hhciBzZXR0aW5nKSB7CisgIHJldHVybiBzZXRTcGVlY2hQdW5jdHVhdGlvbigmc3BrLCBzZXR0aW5nLCAhcHJlZnMuYXV0b3NwZWFrKTsKK30KKworc3RhdGljIGludAordGVzdEF1dG9zcGVhayAodm9pZCkgeworICByZXR1cm4gcHJlZnMuYXV0b3NwZWFrOworfQorCitzdGF0aWMgaW50Cit0ZXN0U2hvd1NwZWVjaEN1cnNvciAodm9pZCkgeworICByZXR1cm4gcHJlZnMuc2hvd1NwZWVjaEN1cnNvcjsKK30KKworc3RhdGljIGludAordGVzdEJsaW5raW5nU3BlZWNoQ3Vyc29yICh2b2lkKSB7CisgIHJldHVybiB0ZXN0U2hvd1NwZWVjaEN1cnNvcigpICYmIHByZWZzLmJsaW5raW5nU3BlZWNoQ3Vyc29yOworfQorCitzdGF0aWMgaW50CitjaGFuZ2VkU3BlZWNoQ3Vyc29yQmxpbmtQZXJpb2QgKGNvbnN0IE1lbnVJdGVtICppdGVtIFVOVVNFRCwgdW5zaWduZWQgY2hhciBzZXR0aW5nKSB7CisgIHNldEJsaW5rUGVyaW9kKCZzcGVlY2hDdXJzb3JCbGlua0Rlc2NyaXB0b3IsIFBSRUZTMk1TRUNTKHNldHRpbmcpKTsKKyAgcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQKK2NoYW5nZWRTcGVlY2hDdXJzb3JCbGlua1BlcmNlbnRhZ2UgKGNvbnN0IE1lbnVJdGVtICppdGVtIFVOVVNFRCwgdW5zaWduZWQgY2hhciBzZXR0aW5nKSB7CisgIHJldHVybiBzZXRCbGlua1BlcmNlbnRWaXNpYmxlKCZzcGVlY2hDdXJzb3JCbGlua0Rlc2NyaXB0b3IsIHNldHRpbmcpOworfQorI2VuZGlmIC8qIEVOQUJMRV9TUEVFQ0hfU1VQUE9SVCAqLworCitzdGF0aWMgaW50Cit0ZXN0U2hvd0RhdGUgKHZvaWQpIHsKKyAgcmV0dXJuIHByZWZzLmRhdGVQb3NpdGlvbiAhPSBkcE5vbmU7Cit9CisKK3N0YXRpYyBpbnQKK3Rlc3RTdGF0dXNQb3NpdGlvbiAodm9pZCkgeworICByZXR1cm4gIWhhdmVTdGF0dXNDZWxscygpOworfQorCitzdGF0aWMgaW50CitjaGFuZ2VkU3RhdHVzUG9zaXRpb24gKGNvbnN0IE1lbnVJdGVtICppdGVtIFVOVVNFRCwgdW5zaWduZWQgY2hhciBzZXR0aW5nIFVOVVNFRCkgeworICByZWNvbmZpZ3VyZUJyYWlsbGVXaW5kb3coKTsKKyAgcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQKK3Rlc3RTdGF0dXNDb3VudCAodm9pZCkgeworICByZXR1cm4gdGVzdFN0YXR1c1Bvc2l0aW9uKCkgJiYgKHByZWZzLnN0YXR1c1Bvc2l0aW9uICE9IHNwTm9uZSk7Cit9CisKK3N0YXRpYyBpbnQKK2NoYW5nZWRTdGF0dXNDb3VudCAoY29uc3QgTWVudUl0ZW0gKml0ZW0gVU5VU0VELCB1bnNpZ25lZCBjaGFyIHNldHRpbmcgVU5VU0VEKSB7CisgIHJlY29uZmlndXJlQnJhaWxsZVdpbmRvdygpOworICByZXR1cm4gMTsKK30KKworc3RhdGljIGludAordGVzdFN0YXR1c1NlcGFyYXRvciAodm9pZCkgeworICByZXR1cm4gdGVzdFN0YXR1c0NvdW50KCk7Cit9CisKK3N0YXRpYyBpbnQKK2NoYW5nZWRTdGF0dXNTZXBhcmF0b3IgKGNvbnN0IE1lbnVJdGVtICppdGVtIFVOVVNFRCwgdW5zaWduZWQgY2hhciBzZXR0aW5nIFVOVVNFRCkgeworICByZWNvbmZpZ3VyZUJyYWlsbGVXaW5kb3coKTsKKyAgcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQKK3Rlc3RTdGF0dXNGaWVsZCAodW5zaWduZWQgY2hhciBpbmRleCkgeworICByZXR1cm4gKGhhdmVTdGF0dXNDZWxscygpIHx8IChwcmVmcy5zdGF0dXNQb3NpdGlvbiAhPSBzcE5vbmUpKSAmJgorICAgICAgICAgKChpbmRleCA9PSAwKSB8fCAocHJlZnMuc3RhdHVzRmllbGRzW2luZGV4LTFdICE9IHNmRW5kKSk7Cit9CisKK3N0YXRpYyBpbnQKK2NoYW5nZWRTdGF0dXNGaWVsZCAodW5zaWduZWQgY2hhciBpbmRleCwgdW5zaWduZWQgY2hhciBzZXR0aW5nKSB7CisgIHN3aXRjaCAoc2V0dGluZykgeworICAgIGNhc2Ugc2ZHZW5lcmljOgorICAgICAgaWYgKGluZGV4ID4gMCkgcmV0dXJuIDA7CisgICAgICBpZiAoIWhhdmVTdGF0dXNDZWxscygpKSByZXR1cm4gMDsKKyAgICAgIGlmICghYnJhaWxsZS0+c3RhdHVzRmllbGRzKSByZXR1cm4gMDsKKyAgICAgIGlmICgqYnJhaWxsZS0+c3RhdHVzRmllbGRzICE9IHNmR2VuZXJpYykgcmV0dXJuIDA7CisgICAgICAvKiBmYWxsIHRocm91Z2ggKi8KKworICAgIGNhc2Ugc2ZFbmQ6CisgICAgICBpZiAocHJlZnMuc3RhdHVzRmllbGRzW2luZGV4KzFdICE9IHNmRW5kKSByZXR1cm4gMDsKKyAgICAgIGJyZWFrOworCisgICAgZGVmYXVsdDoKKyAgICAgIGlmICgoaW5kZXggPiAwKSAmJiAocHJlZnMuc3RhdHVzRmllbGRzW2luZGV4LTFdID09IHNmR2VuZXJpYykpIHJldHVybiAwOworICAgICAgYnJlYWs7CisgIH0KKworICByZWNvbmZpZ3VyZUJyYWlsbGVXaW5kb3coKTsKKyAgcmV0dXJuIDE7Cit9CisKKyNkZWZpbmUgU1RBVFVTX0ZJRUxEX0hBTkRMRVJTKG4pIFwKKyAgc3RhdGljIGludCB0ZXN0U3RhdHVzRmllbGQjI24gKHZvaWQpIHsgcmV0dXJuIHRlc3RTdGF0dXNGaWVsZChuLTEpOyB9IFwKKyAgc3RhdGljIGludCBjaGFuZ2VkU3RhdHVzRmllbGQjI24gKGNvbnN0IE1lbnVJdGVtICppdGVtIFVOVVNFRCwgdW5zaWduZWQgY2hhciBzZXR0aW5nKSB7IHJldHVybiBjaGFuZ2VkU3RhdHVzRmllbGQobi0xLCBzZXR0aW5nKTsgfQorU1RBVFVTX0ZJRUxEX0hBTkRMRVJTKDEpCitTVEFUVVNfRklFTERfSEFORExFUlMoMikKK1NUQVRVU19GSUVMRF9IQU5ETEVSUygzKQorU1RBVFVTX0ZJRUxEX0hBTkRMRVJTKDQpCitTVEFUVVNfRklFTERfSEFORExFUlMoNSkKK1NUQVRVU19GSUVMRF9IQU5ETEVSUyg2KQorU1RBVFVTX0ZJRUxEX0hBTkRMRVJTKDcpCitTVEFUVVNfRklFTERfSEFORExFUlMoOCkKK1NUQVRVU19GSUVMRF9IQU5ETEVSUyg5KQorI3VuZGVmIFNUQVRVU19GSUVMRF9IQU5ETEVSUworCitzdGF0aWMgaW50CitjaGFuZ2VkU2tpcElkZW50aWNhbExpbmVzIChjb25zdCBNZW51SXRlbSAqaXRlbSwgdW5zaWduZWQgY2hhciBzZXR0aW5nIFVOVVNFRCkgeworICBhcGkudXBkYXRlUGFyYW1ldGVyKEJSTEFQSV9QQVJBTV9TS0lQX0lERU5USUNBTF9MSU5FUywgMCk7CisgIHJldHVybiAxOworfQorCitzdGF0aWMgaW50CitjaGFuZ2VkVGV4dFRhYmxlIChjb25zdCBNZW51SXRlbSAqaXRlbSwgdW5zaWduZWQgY2hhciBzZXR0aW5nIFVOVVNFRCkgeworICByZXR1cm4gY2hhbmdlVGV4dFRhYmxlKGdldE1lbnVJdGVtVmFsdWUoaXRlbSkpOworfQorCitzdGF0aWMgaW50CitjaGFuZ2VkQXR0cmlidXRlc1RhYmxlIChjb25zdCBNZW51SXRlbSAqaXRlbSwgdW5zaWduZWQgY2hhciBzZXR0aW5nIFVOVVNFRCkgeworICByZXR1cm4gY2hhbmdlQXR0cmlidXRlc1RhYmxlKGdldE1lbnVJdGVtVmFsdWUoaXRlbSkpOworfQorCitzdGF0aWMgaW50CitjaGFuZ2VkS2V5Ym9hcmRUYWJsZSAoY29uc3QgTWVudUl0ZW0gKml0ZW0sIHVuc2lnbmVkIGNoYXIgc2V0dGluZyBVTlVTRUQpIHsKKyAgcmV0dXJuIGNoYW5nZUtleWJvYXJkVGFibGUoZ2V0TWVudUl0ZW1WYWx1ZShpdGVtKSk7Cit9CisKK3N0YXRpYyBpbnQKK3Rlc3RDb21wdXRlckJyYWlsbGUgKHZvaWQpIHsKKyAgcmV0dXJuICFpc0NvbnRyYWN0ZWRCcmFpbGxlKCk7Cit9CisKK3N0YXRpYyBpbnQKK3Rlc3RDb250cmFjdGVkQnJhaWxsZSAodm9pZCkgeworICByZXR1cm4gaXNDb250cmFjdGVkQnJhaWxsZSgpOworfQorCitzdGF0aWMgaW50CitjaGFuZ2VkQ29udHJhY3RlZEJyYWlsbGUgKGNvbnN0IE1lbnVJdGVtICppdGVtLCB1bnNpZ25lZCBjaGFyIHNldHRpbmcgVU5VU0VEKSB7CisgIHNldENvbnRyYWN0ZWRCcmFpbGxlKHNldHRpbmcpOworICBhcGkudXBkYXRlUGFyYW1ldGVyKEJSTEFQSV9QQVJBTV9MSVRFUkFSWV9CUkFJTExFLCAwKTsKKyAgcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQKK2NoYW5nZWRDb250cmFjdGlvblRhYmxlIChjb25zdCBNZW51SXRlbSAqaXRlbSwgdW5zaWduZWQgY2hhciBzZXR0aW5nIFVOVVNFRCkgeworICByZXR1cm4gY2hhbmdlQ29udHJhY3Rpb25UYWJsZShnZXRNZW51SXRlbVZhbHVlKGl0ZW0pKTsKK30KKworc3RhdGljIGludAorY2hhbmdlZENvbXB1dGVyQnJhaWxsZSAoY29uc3QgTWVudUl0ZW0gKml0ZW0sIHVuc2lnbmVkIGNoYXIgc2V0dGluZyBVTlVTRUQpIHsKKyAgc2V0U2l4RG90Q29tcHV0ZXJCcmFpbGxlKHNldHRpbmcpOworICBhcGkudXBkYXRlUGFyYW1ldGVyKEJSTEFQSV9QQVJBTV9DT01QVVRFUl9CUkFJTExFX0NFTExfU0laRSwgMCk7CisgIHJldHVybiAxOworfQorCitzdGF0aWMgaW50Cit0ZXN0SW5wdXRUYWJsZSAodm9pZCkgeworICByZXR1cm4gISFicmwua2V5VGFibGU7Cit9CisKK3N0YXRpYyBpbnQKK3Rlc3RLZXlib2FyZFRhYmxlICh2b2lkKSB7CisgIHJldHVybiAhIWtleWJvYXJkVGFibGU7Cit9CisKK3N0YXRpYyBNZW51SXRlbSAqCituZXdQcm9maWxlTWVudUl0ZW0gKE1lbnUgKm1lbnUsIGNvbnN0IFByb2ZpbGVEZXNjcmlwdG9yICpwcm9maWxlKSB7CisgIE1lbnVTdHJpbmcgbmFtZSA9IHsubGFiZWwgPSBwcm9maWxlLT5jYXRlZ29yeX07CisKKyAgcmV0dXJuIG5ld0ZpbGVzTWVudUl0ZW0obWVudSwgJm5hbWUsIG9wdF90YWJsZXNEaXJlY3RvcnksIFBST0ZJTEVTX1NVQkRJUkVDVE9SWSwgcHJvZmlsZS0+ZXh0ZW5zaW9uLCAiIiwgMSk7Cit9CisKK3N0YXRpYyBpbnQKK2NoYW5nZWRQcm9maWxlIChjb25zdCBQcm9maWxlRGVzY3JpcHRvciAqcHJvZmlsZSwgY29uc3QgTWVudUl0ZW0gKml0ZW0pIHsKKyAgY29uc3QgY2hhciAqdmFsdWUgPSBnZXRNZW51SXRlbVZhbHVlKGl0ZW0pOworCisgIGlmICgqdmFsdWUpIHsKKyAgICBhY3RpdmF0ZVByb2ZpbGUocHJvZmlsZSwgb3B0X3RhYmxlc0RpcmVjdG9yeSwgdmFsdWUpOworICB9IGVsc2UgeworICAgIGRlYWN0aXZhdGVQcm9maWxlKHByb2ZpbGUpOworICB9CisKKyAgcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQKK2NoYW5nZWRMYW5ndWFnZVByb2ZpbGUgKGNvbnN0IE1lbnVJdGVtICppdGVtLCB1bnNpZ25lZCBjaGFyIHNldHRpbmcgVU5VU0VEKSB7CisgIHJldHVybiBjaGFuZ2VkUHJvZmlsZSgmbGFuZ3VhZ2VQcm9maWxlLCBpdGVtKTsKK30KKworc3RhdGljIE1lbnVJdGVtICoKK25ld1N0YXR1c0ZpZWxkTWVudUl0ZW0gKAorICBNZW51ICptZW51LCB1bnNpZ25lZCBjaGFyIG51bWJlciwKKyAgTWVudUl0ZW1UZXN0ZXIgKnRlc3QsIE1lbnVJdGVtQ2hhbmdlZCAqY2hhbmdlZAorKSB7CisgIHN0YXRpYyBjb25zdCBNZW51U3RyaW5nIHN0cmluZ3NbXSA9IHsKKyAgICBbc2ZFbmRdID0gey5sYWJlbD1zdHJ0ZXh0KCJFbmQiKX0sCisgICAgW3NmV2luZG93Q29vcmRpbmF0ZXMyXSA9IHsubGFiZWw9c3RydGV4dCgiV2luZG93IENvb3JkaW5hdGVzIiksIC5jb21tZW50PXN0cnRleHQoIjIgY2VsbHMiKX0sCisgICAgW3NmV2luZG93Q29sdW1uXSA9IHsubGFiZWw9c3RydGV4dCgiV2luZG93IENvbHVtbiIpLCAuY29tbWVudD1zdHJ0ZXh0KCIxIGNlbGwiKX0sCisgICAgW3NmV2luZG93Um93XSA9IHsubGFiZWw9c3RydGV4dCgiV2luZG93IFJvdyIpLCAuY29tbWVudD1zdHJ0ZXh0KCIxIGNlbGwiKX0sCisgICAgW3NmQ3Vyc29yQ29vcmRpbmF0ZXMyXSA9IHsubGFiZWw9c3RydGV4dCgiQ3Vyc29yIENvb3JkaW5hdGVzIiksIC5jb21tZW50PXN0cnRleHQoIjIgY2VsbHMiKX0sCisgICAgW3NmQ3Vyc29yQ29sdW1uXSA9IHsubGFiZWw9c3RydGV4dCgiQ3Vyc29yIENvbHVtbiIpLCAuY29tbWVudD1zdHJ0ZXh0KCIxIGNlbGwiKX0sCisgICAgW3NmQ3Vyc29yUm93XSA9IHsubGFiZWw9c3RydGV4dCgiQ3Vyc29yIFJvdyIpLCAuY29tbWVudD1zdHJ0ZXh0KCIxIGNlbGwiKX0sCisgICAgW3NmQ3Vyc29yQW5kV2luZG93Q29sdW1uMl0gPSB7LmxhYmVsPXN0cnRleHQoIkN1cnNvciBhbmQgV2luZG93IENvbHVtbiIpLCAuY29tbWVudD1zdHJ0ZXh0KCIyIGNlbGxzIil9LAorICAgIFtzZkN1cnNvckFuZFdpbmRvd1JvdzJdID0gey5sYWJlbD1zdHJ0ZXh0KCJDdXJzb3IgYW5kIFdpbmRvdyBSb3ciKSwgLmNvbW1lbnQ9c3RydGV4dCgiMiBjZWxscyIpfSwKKyAgICBbc2ZTY3JlZW5OdW1iZXJdID0gey5sYWJlbD1zdHJ0ZXh0KCJTY3JlZW4gTnVtYmVyIiksIC5jb21tZW50PXN0cnRleHQoIjEgY2VsbCIpfSwKKyAgICBbc2ZTdGF0ZURvdHNdID0gey5sYWJlbD1zdHJ0ZXh0KCJTdGF0ZSBEb3RzIiksIC5jb21tZW50PXN0cnRleHQoIjEgY2VsbCIpfSwKKyAgICBbc2ZTdGF0ZUxldHRlcl0gPSB7LmxhYmVsPXN0cnRleHQoIlN0YXRlIExldHRlciIpLCAuY29tbWVudD1zdHJ0ZXh0KCIxIGNlbGwiKX0sCisgICAgW3NmVGltZV0gPSB7LmxhYmVsPXN0cnRleHQoIlRpbWUiKSwgLmNvbW1lbnQ9c3RydGV4dCgiMiBjZWxscyIpfSwKKyAgICBbc2ZBbHBoYWJldGljV2luZG93Q29vcmRpbmF0ZXNdID0gey5sYWJlbD1zdHJ0ZXh0KCJBbHBoYWJldGljIFdpbmRvdyBDb29yZGluYXRlcyIpLCAuY29tbWVudD1zdHJ0ZXh0KCIxIGNlbGwiKX0sCisgICAgW3NmQWxwaGFiZXRpY0N1cnNvckNvb3JkaW5hdGVzXSA9IHsubGFiZWw9c3RydGV4dCgiQWxwaGFiZXRpYyBDdXJzb3IgQ29vcmRpbmF0ZXMiKSwgLmNvbW1lbnQ9c3RydGV4dCgiMSBjZWxsIil9LAorICAgIFtzZkdlbmVyaWNdID0gey5sYWJlbD1zdHJ0ZXh0KCJHZW5lcmljIil9LAorICAgIFtzZkN1cnNvckNvb3JkaW5hdGVzM10gPSB7LmxhYmVsPXN0cnRleHQoIkN1cnNvciBDb29yZGluYXRlcyIpLCAuY29tbWVudD1zdHJ0ZXh0KCIzIGNlbGxzIil9LAorICAgIFtzZldpbmRvd0Nvb3JkaW5hdGVzM10gPSB7LmxhYmVsPXN0cnRleHQoIldpbmRvdyBDb29yZGluYXRlcyIpLCAuY29tbWVudD1zdHJ0ZXh0KCIzIGNlbGxzIil9LAorICAgIFtzZkN1cnNvckFuZFdpbmRvd0NvbHVtbjNdID0gey5sYWJlbD1zdHJ0ZXh0KCJDdXJzb3IgYW5kIFdpbmRvdyBDb2x1bW4iKSwgLmNvbW1lbnQ9c3RydGV4dCgiMyBjZWxscyIpfSwKKyAgICBbc2ZDdXJzb3JBbmRXaW5kb3dSb3czXSA9IHsubGFiZWw9c3RydGV4dCgiQ3Vyc29yIGFuZCBXaW5kb3cgUm93IiksIC5jb21tZW50PXN0cnRleHQoIjMgY2VsbHMiKX0sCisgICAgW3NmU3BhY2VdID0gey5sYWJlbD1zdHJ0ZXh0KCJTcGFjZSIpLCAuY29tbWVudD1zdHJ0ZXh0KCIxIGNlbGwiKX0sCisgIH07CisKKyAgTWVudVN0cmluZyBuYW1lID0geworICAgIC5sYWJlbCA9IHN0cnRleHQoIlN0YXR1cyBGaWVsZCIpCisgIH07CisKKyAgY2hhciAqY29tbWVudDsKKyAgeworICAgIGNoYXIgYnVmZmVyWzBYM107CisgICAgc25wcmludGYoYnVmZmVyLCBzaXplb2YoYnVmZmVyKSwgIiV1IiwgbnVtYmVyKTsKKyAgICBuYW1lLmNvbW1lbnQgPSBjb21tZW50ID0gc3RyZHVwKGJ1ZmZlcik7CisgIH0KKworICBpZiAoY29tbWVudCkgeworICAgIE1lbnVJdGVtICppdGVtID0gbmV3RW51bWVyYXRlZE1lbnVJdGVtKG1lbnUsICZwcmVmcy5zdGF0dXNGaWVsZHNbbnVtYmVyLTFdLCAmbmFtZSwgc3RyaW5ncyk7CisKKyAgICBpZiAoaXRlbSkgeworICAgICAgc2V0TWVudUl0ZW1UZXN0ZXIoaXRlbSwgdGVzdCk7CisgICAgICBzZXRNZW51SXRlbUNoYW5nZWQoaXRlbSwgY2hhbmdlZCk7CisgICAgICByZXR1cm4gaXRlbTsKKyAgICB9CisKKyAgICBmcmVlKGNvbW1lbnQpOworICB9IGVsc2UgeworICAgIGxvZ01hbGxvY0Vycm9yKCk7CisgIH0KKworICByZXR1cm4gTlVMTDsKK30KKworc3RhdGljIE1lbnVJdGVtICoKK25ld0JsaW5rVmlzaWJsZU1lbnVJdGVtIChNZW51ICptZW51LCB1bnNpZ25lZCBjaGFyICpzZXR0aW5nLCBjb25zdCBNZW51U3RyaW5nICpuYW1lKSB7CisgIHJldHVybiBuZXdQZXJjZW50TWVudUl0ZW0obWVudSwgc2V0dGluZywgbmFtZSwgNSk7Cit9CisKKyNpZiBkZWZpbmVkKEhBVkVfUENNX1NVUFBPUlQpIHx8IGRlZmluZWQoSEFWRV9NSURJX1NVUFBPUlQpIHx8IGRlZmluZWQoSEFWRV9GTV9TVVBQT1JUKQorc3RhdGljIE1lbnVJdGVtICoKK25ld1ZvbHVtZU1lbnVJdGVtIChNZW51ICptZW51LCB1bnNpZ25lZCBjaGFyICpzZXR0aW5nLCBjb25zdCBNZW51U3RyaW5nICpuYW1lKSB7CisgIHJldHVybiBuZXdQZXJjZW50TWVudUl0ZW0obWVudSwgc2V0dGluZywgbmFtZSwgNSk7Cit9CisjZW5kaWYgLyogZGVmaW5lZChIQVZFX1BDTV9TVVBQT1JUKSB8fCBkZWZpbmVkKEhBVkVfTUlESV9TVVBQT1JUKSB8fCBkZWZpbmVkKEhBVkVfRk1fU1VQUE9SVCkgKi8KKworI2lmZGVmIEhBVkVfTUlESV9TVVBQT1JUCitzdGF0aWMgTWVudVN0cmluZyAqCittYWtlTWlkaUluc3RydW1lbnRNZW51U3RyaW5ncyAodm9pZCkgeworICBNZW51U3RyaW5nICpzdHJpbmdzID0gbWFsbG9jKG1pZGlJbnN0cnVtZW50Q291bnQgKiBzaXplb2YoKnN0cmluZ3MpKTsKKworICBpZiAoc3RyaW5ncykgeworICAgIGZvciAodW5zaWduZWQgaW50IGluc3RydW1lbnQ9MDsgaW5zdHJ1bWVudDxtaWRpSW5zdHJ1bWVudENvdW50OyBpbnN0cnVtZW50Kz0xKSB7CisgICAgICBNZW51U3RyaW5nICpzdHJpbmcgPSAmc3RyaW5nc1tpbnN0cnVtZW50XTsKKyAgICAgIHN0cmluZy0+bGFiZWwgPSBtaWRpSW5zdHJ1bWVudFRhYmxlW2luc3RydW1lbnRdOworICAgICAgc3RyaW5nLT5jb21tZW50ID0gbWlkaUdldEluc3RydW1lbnRHcm91cChpbnN0cnVtZW50KTsKKyAgICB9CisgIH0KKworICByZXR1cm4gc3RyaW5nczsKK30KKyNlbmRpZiAvKiBIQVZFX01JRElfU1VQUE9SVCAqLworCitzdGF0aWMgTWVudSAqbG9nTWVzc2FnZXNNZW51ID0gTlVMTDsKK3N0YXRpYyBjb25zdCBMb2dFbnRyeSAqbmV3ZXN0TG9nTWVzc2FnZSA9IE5VTEw7CisKK3N0YXRpYyBpbnQKK2FkZE5ld0xvZ01lc3NhZ2VzIChjb25zdCBMb2dFbnRyeSAqbWVzc2FnZSkgeworICBpZiAobWVzc2FnZSA9PSBuZXdlc3RMb2dNZXNzYWdlKSByZXR1cm4gMTsKKyAgaWYgKCFhZGROZXdMb2dNZXNzYWdlcyhnZXRQcmV2aW91c0xvZ0VudHJ5KG1lc3NhZ2UpKSkgcmV0dXJuIDA7CisKKyAgTWVudVN0cmluZyBuYW1lOworICBjb25zdCBUaW1lVmFsdWUgKnRpbWUgPSBnZXRMb2dFbnRyeVRpbWUobWVzc2FnZSk7CisgIHVuc2lnbmVkIGludCBjb3VudCA9IGdldExvZ0VudHJ5Q291bnQobWVzc2FnZSk7CisKKyAgaWYgKHRpbWUpIHsKKyAgICBjaGFyIGJ1ZmZlclswWDIwXTsKKyAgICBmb3JtYXRTZWNvbmRzKGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlciksICIlWS0lbS0lZEAlSDolTTolUyIsIHRpbWUtPnNlY29uZHMpOworICAgIG5hbWUubGFiZWwgPSBzdHJkdXAoYnVmZmVyKTsKKyAgfSBlbHNlIHsKKyAgICBuYW1lLmxhYmVsID0gTlVMTDsKKyAgfQorCisgIGlmIChjb3VudCA+IDEpIHsKKyAgICBjaGFyIGJ1ZmZlclswWDEwXTsKKyAgICBzbnByaW50ZihidWZmZXIsIHNpemVvZihidWZmZXIpLCAiKCV1KSIsIGNvdW50KTsKKyAgICBuYW1lLmNvbW1lbnQgPSBzdHJkdXAoYnVmZmVyKTsKKyAgfSBlbHNlIHsKKyAgICBuYW1lLmNvbW1lbnQgPSBOVUxMOworICB9CisKKyAgTWVudUl0ZW0gKml0ZW0gPSBuZXdUZXh0TWVudUl0ZW0obG9nTWVzc2FnZXNNZW51LCAmbmFtZSwgZ2V0TG9nRW50cnlUZXh0KG1lc3NhZ2UpKTsKKyAgaWYgKCFpdGVtKSByZXR1cm4gMDsKKworICBuZXdlc3RMb2dNZXNzYWdlID0gbWVzc2FnZTsKKyAgcmV0dXJuIDE7Cit9CisKK2ludAordXBkYXRlTG9nTWVzc2FnZXNTdWJtZW51ICh2b2lkKSB7CisgIHJldHVybiBhZGROZXdMb2dNZXNzYWdlcyhnZXROZXdlc3RMb2dNZXNzYWdlKDEpKTsKK30KKworc3RhdGljIE1lbnUgKgorbWFrZVByZWZlcmVuY2VzTWVudSAodm9pZCkgeworICBzdGF0aWMgY29uc3QgTWVudVN0cmluZyBjdXJzb3JTdHlsZXNbXSA9IHsKKyAgICBbY3NCb3R0b21Eb3RzXSA9IHsubGFiZWw9c3RydGV4dCgiVW5kZXJsaW5lIiksIC5jb21tZW50PXN0cnRleHQoImRvdHMgNyBhbmQgOCIpfSwKKyAgICBbY3NBbGxEb3RzXSA9IHsubGFiZWw9c3RydGV4dCgiQmxvY2siKSwgLmNvbW1lbnQ9c3RydGV4dCgiYWxsIGRvdHMiKX0sCisgICAgW2NzTG93ZXJMZWZ0RG90XSA9IHsubGFiZWw9c3RydGV4dCgiTG93ZXIgTGVmdCBEb3QiKSwgLmNvbW1lbnQ9c3RydGV4dCgiZG90IDciKX0sCisgICAgW2NzTG93ZXJSaWdodERvdF0gPSB7LmxhYmVsPXN0cnRleHQoIkxvd2VyIFJpZ2h0IERvdCIpLCAuY29tbWVudD1zdHJ0ZXh0KCJkb3QgOCIpfSwKKyAgICBbY3NOb0RvdHNdID0gey5sYWJlbD1zdHJ0ZXh0KCJIaWRlIiksIC5jb21tZW50PXN0cnRleHQoIm5vIGRvdHMiKX0sCisgIH07CisKKyAgTWVudSAqcm9vdE1lbnUgPSBuZXdNZW51KCk7CisgIGlmICghcm9vdE1lbnUpIGdvdG8gbm9NZW51OworCisgIHsKKyAgICBOQU1FKHN0cnRleHQoIlNhdmUgb24gRXhpdCIpKTsKKyAgICBJVEVNKG5ld0Jvb2xlYW5NZW51SXRlbShyb290TWVudSwgJnByZWZzLnNhdmVPbkV4aXQsICZpdGVtTmFtZSkpOworICB9CisKKyAgeworICAgIFNVQk1FTlUob3B0aW9uc1N1Ym1lbnUsIHJvb3RNZW51LCBzdHJ0ZXh0KCJNZW51IE9wdGlvbnMiKSk7CisKKyAgICB7CisgICAgICBOQU1FKHN0cnRleHQoIlNob3cgU3VibWVudSBTaXplcyIpKTsKKyAgICAgIElURU0obmV3Qm9vbGVhbk1lbnVJdGVtKG9wdGlvbnNTdWJtZW51LCAmcHJlZnMuc2hvd1N1Ym1lbnVTaXplcywgJml0ZW1OYW1lKSk7CisgICAgfQorCisgICAgeworICAgICAgTkFNRShzdHJ0ZXh0KCJTaG93IEFkdmFuY2VkIFN1Ym1lbnVzIikpOworICAgICAgSVRFTShuZXdCb29sZWFuTWVudUl0ZW0ob3B0aW9uc1N1Ym1lbnUsICZwcmVmcy5zaG93QWR2YW5jZWRTdWJtZW51cywgJml0ZW1OYW1lKSk7CisgICAgfQorCisgICAgeworICAgICAgTkFNRShzdHJ0ZXh0KCJTaG93IEFsbCBJdGVtcyIpKTsKKyAgICAgIElURU0obmV3Qm9vbGVhbk1lbnVJdGVtKG9wdGlvbnNTdWJtZW51LCAmcHJlZnMuc2hvd0FsbEl0ZW1zLCAmaXRlbU5hbWUpKTsKKyAgICB9CisgIH0KKworICB7CisgICAgU1VCTUVOVShwcmVzZW50YXRpb25TdWJtZW51LCByb290TWVudSwgc3RydGV4dCgiQnJhaWxsZSBQcmVzZW50YXRpb24iKSk7CisKKyAgICB7CisgICAgICBzdGF0aWMgY29uc3QgTWVudVN0cmluZyBzdHJpbmdzW10gPSB7CisgICAgICAgIHsubGFiZWw9c3RydGV4dCgiQ29tcHV0ZXIgQnJhaWxsZSIpfSwKKyAgICAgICAgey5sYWJlbD1zdHJ0ZXh0KCJDb250cmFjdGVkIEJyYWlsbGUiKX0sCisgICAgICB9OworCisgICAgICBOQU1FKHN0cnRleHQoIkJyYWlsbGUgVmFyaWFudCIpKTsKKyAgICAgIFBST1BFUlRZKHllcywgaXNDb250cmFjdGVkQnJhaWxsZSgpKTsKKyAgICAgIElURU0obmV3RW51bWVyYXRlZE1lbnVJdGVtKHByZXNlbnRhdGlvblN1Ym1lbnUsICZ5ZXMsICZpdGVtTmFtZSwgc3RyaW5ncykpOworICAgICAgQ0hBTkdFRChDb250cmFjdGVkQnJhaWxsZSk7CisgICAgfQorCisgICAgeworICAgICAgTkFNRShzdHJ0ZXh0KCJFeHBhbmQgQ3VycmVudCBXb3JkIikpOworICAgICAgSVRFTShuZXdCb29sZWFuTWVudUl0ZW0ocHJlc2VudGF0aW9uU3VibWVudSwgJnByZWZzLmV4cGFuZEN1cnJlbnRXb3JkLCAmaXRlbU5hbWUpKTsKKyAgICAgIFRFU1QoQ29udHJhY3RlZEJyYWlsbGUpOworICAgIH0KKworICAgIHsKKyAgICAgIHN0YXRpYyBjb25zdCBNZW51U3RyaW5nIHN0cmluZ3NbXSA9IHsKKyAgICAgICAgW0NUQl9DQVBfTk9ORV0gPSB7LmxhYmVsPXN0cnRleHQoIk5vIENhcGl0YWxpemF0aW9uIil9LAorICAgICAgICBbQ1RCX0NBUF9TSUdOXSA9IHsubGFiZWw9c3RydGV4dCgiVXNlIENhcGl0YWwgU2lnbiIpfSwKKyAgICAgICAgW0NUQl9DQVBfRE9UN10gPSB7LmxhYmVsPXN0cnRleHQoIlN1cGVyaW1wb3NlIERvdCA3Iil9LAorICAgICAgfTsKKworICAgICAgTkFNRShzdHJ0ZXh0KCJDYXBpdGFsaXphdGlvbiBNb2RlIikpOworICAgICAgSVRFTShuZXdFbnVtZXJhdGVkTWVudUl0ZW0ocHJlc2VudGF0aW9uU3VibWVudSwgJnByZWZzLmNhcGl0YWxpemF0aW9uTW9kZSwgJml0ZW1OYW1lLCBzdHJpbmdzKSk7CisgICAgICBURVNUKENvbnRyYWN0ZWRCcmFpbGxlKTsKKyAgICB9CisKKyAgICB7CisgICAgICBzdGF0aWMgY29uc3QgTWVudVN0cmluZyBzdHJpbmdzW10gPSB7CisgICAgICAgIHsubGFiZWw9c3RydGV4dCgiOC1kb3QiKX0sCisgICAgICAgIHsubGFiZWw9c3RydGV4dCgiNi1kb3QiKX0sCisgICAgICB9OworCisgICAgICBOQU1FKHN0cnRleHQoIkNvbXB1dGVyIEJyYWlsbGUgQ2VsbCBUeXBlIikpOworICAgICAgUFJPUEVSVFkoeWVzLCBpc1NpeERvdENvbXB1dGVyQnJhaWxsZSgpKTsKKyAgICAgIElURU0obmV3RW51bWVyYXRlZE1lbnVJdGVtKHByZXNlbnRhdGlvblN1Ym1lbnUsICZ5ZXMsICZpdGVtTmFtZSwgc3RyaW5ncykpOworICAgICAgVEVTVChDb21wdXRlckJyYWlsbGUpOworICAgICAgQ0hBTkdFRChDb21wdXRlckJyYWlsbGUpOworICAgIH0KKworICAgIHsKKyAgICAgIHN0YXRpYyBjb25zdCBNZW51U3RyaW5nIHN0cmluZ3NbXSA9IHsKKyAgICAgICAgW0JSTF9GSVJNTkVTU19NSU5JTVVNXSA9IHsubGFiZWw9c3RydGV4dCgiTWluaW11bSIpfSwKKyAgICAgICAgW0JSTF9GSVJNTkVTU19MT1ddID0gey5sYWJlbD1zdHJ0ZXh0KCJMb3ciKX0sCisgICAgICAgIFtCUkxfRklSTU5FU1NfTUVESVVNXSA9IHsubGFiZWw9c3RydGV4dCgiTWVkaXVtIil9LAorICAgICAgICBbQlJMX0ZJUk1ORVNTX0hJR0hdID0gey5sYWJlbD1zdHJ0ZXh0KCJIaWdoIil9LAorICAgICAgICBbQlJMX0ZJUk1ORVNTX01BWElNVU1dID0gey5sYWJlbD1zdHJ0ZXh0KCJNYXhpbXVtIil9LAorICAgICAgfTsKKworICAgICAgTkFNRShzdHJ0ZXh0KCJCcmFpbGxlIEZpcm1uZXNzIikpOworICAgICAgSVRFTShuZXdFbnVtZXJhdGVkTWVudUl0ZW0ocHJlc2VudGF0aW9uU3VibWVudSwgJnByZWZzLmJyYWlsbGVGaXJtbmVzcywgJml0ZW1OYW1lLCBzdHJpbmdzKSk7CisgICAgICBURVNUKEJyYWlsbGVGaXJtbmVzcyk7CisgICAgICBDSEFOR0VEKEJyYWlsbGVGaXJtbmVzcyk7CisgICAgfQorICB9CisKKyAgeworICAgIFNVQk1FTlUoaW5kaWNhdG9yc1N1Ym1lbnUsIHJvb3RNZW51LCBzdHJ0ZXh0KCJUZXh0IEluZGljYXRvcnMiKSk7CisKKyAgICB7CisgICAgICBOQU1FKHN0cnRleHQoIlNob3cgU2NyZWVuIEN1cnNvciIpKTsKKyAgICAgIElURU0obmV3Qm9vbGVhbk1lbnVJdGVtKGluZGljYXRvcnNTdWJtZW51LCAmcHJlZnMuc2hvd1NjcmVlbkN1cnNvciwgJml0ZW1OYW1lKSk7CisgICAgfQorCisgICAgeworICAgICAgTkFNRShzdHJ0ZXh0KCJTY3JlZW4gQ3Vyc29yIFN0eWxlIikpOworICAgICAgSVRFTShuZXdFbnVtZXJhdGVkTWVudUl0ZW0oaW5kaWNhdG9yc1N1Ym1lbnUsICZwcmVmcy5zY3JlZW5DdXJzb3JTdHlsZSwgJml0ZW1OYW1lLCBjdXJzb3JTdHlsZXMpKTsKKyAgICAgIFRFU1QoU2hvd1NjcmVlbkN1cnNvcik7CisgICAgfQorCisgICAgeworICAgICAgTkFNRShzdHJ0ZXh0KCJCbGlua2luZyBTY3JlZW4gQ3Vyc29yIikpOworICAgICAgSVRFTShuZXdCb29sZWFuTWVudUl0ZW0oaW5kaWNhdG9yc1N1Ym1lbnUsICZwcmVmcy5ibGlua2luZ1NjcmVlbkN1cnNvciwgJml0ZW1OYW1lKSk7CisgICAgICBURVNUKFNob3dTY3JlZW5DdXJzb3IpOworICAgIH0KKworICAgIHsKKyAgICAgIE5BTUUoc3RydGV4dCgiU2NyZWVuIEN1cnNvciBCbGluayBQZXJpb2QiKSk7CisgICAgICBCTElOS19QRVJJT0QoJnNjcmVlbkN1cnNvckJsaW5rRGVzY3JpcHRvcik7CisgICAgICBJVEVNKG5ld1RpbWVNZW51SXRlbShpbmRpY2F0b3JzU3VibWVudSwgJnBlcmlvZCwgJml0ZW1OYW1lKSk7CisgICAgICBURVNUKEJsaW5raW5nU2NyZWVuQ3Vyc29yKTsKKyAgICAgIENIQU5HRUQoU2NyZWVuQ3Vyc29yQmxpbmtQZXJpb2QpOworICAgIH0KKworICAgIHsKKyAgICAgIE5BTUUoc3RydGV4dCgiU2NyZWVuIEN1cnNvciBQZXJjZW50IFZpc2libGUiKSk7CisgICAgICBCTElOS19WSVNJQkxFKCZzY3JlZW5DdXJzb3JCbGlua0Rlc2NyaXB0b3IpOworICAgICAgSVRFTShuZXdCbGlua1Zpc2libGVNZW51SXRlbShpbmRpY2F0b3JzU3VibWVudSwgJnZpc2libGUsICZpdGVtTmFtZSkpOworICAgICAgVEVTVChCbGlua2luZ1NjcmVlbkN1cnNvcik7CisgICAgICBDSEFOR0VEKFNjcmVlbkN1cnNvckJsaW5rUGVyY2VudGFnZSk7CisgICAgfQorCisgICAgeworICAgICAgTkFNRShzdHJ0ZXh0KCJTaG93IEF0dHJpYnV0ZXMiKSk7CisgICAgICBJVEVNKG5ld0Jvb2xlYW5NZW51SXRlbShpbmRpY2F0b3JzU3VibWVudSwgJnByZWZzLnNob3dBdHRyaWJ1dGVzLCAmaXRlbU5hbWUpKTsKKyAgICB9CisKKyAgICB7CisgICAgICBOQU1FKHN0cnRleHQoIkJsaW5raW5nIEF0dHJpYnV0ZXMiKSk7CisgICAgICBJVEVNKG5ld0Jvb2xlYW5NZW51SXRlbShpbmRpY2F0b3JzU3VibWVudSwgJnByZWZzLmJsaW5raW5nQXR0cmlidXRlcywgJml0ZW1OYW1lKSk7CisgICAgICBURVNUKFNob3dBdHRyaWJ1dGVzKTsKKyAgICB9CisKKyAgICB7CisgICAgICBOQU1FKHN0cnRleHQoIkF0dHJpYnV0ZXMgQmxpbmsgUGVyaW9kIikpOworICAgICAgQkxJTktfUEVSSU9EKCZhdHRyaWJ1dGVzVW5kZXJsaW5lQmxpbmtEZXNjcmlwdG9yKTsKKyAgICAgIElURU0obmV3VGltZU1lbnVJdGVtKGluZGljYXRvcnNTdWJtZW51LCAmcGVyaW9kLCAmaXRlbU5hbWUpKTsKKyAgICAgIFRFU1QoQmxpbmtpbmdBdHRyaWJ1dGVzKTsKKyAgICAgIENIQU5HRUQoQXR0cmlidXRlc1VuZGVybGluZUJsaW5rUGVyaW9kKTsKKyAgICB9CisKKyAgICB7CisgICAgICBOQU1FKHN0cnRleHQoIkF0dHJpYnV0ZXMgUGVyY2VudCBWaXNpYmxlIikpOworICAgICAgQkxJTktfVklTSUJMRSgmYXR0cmlidXRlc1VuZGVybGluZUJsaW5rRGVzY3JpcHRvcik7CisgICAgICBJVEVNKG5ld0JsaW5rVmlzaWJsZU1lbnVJdGVtKGluZGljYXRvcnNTdWJtZW51LCAmdmlzaWJsZSwgJml0ZW1OYW1lKSk7CisgICAgICBURVNUKEJsaW5raW5nQXR0cmlidXRlcyk7CisgICAgICBDSEFOR0VEKEF0dHJpYnV0ZXNVbmRlcmxpbmVCbGlua1BlcmNlbnRhZ2UpOworICAgIH0KKworICAgIHsKKyAgICAgIE5BTUUoc3RydGV4dCgiQmxpbmtpbmcgQ2FwaXRhbHMiKSk7CisgICAgICBJVEVNKG5ld0Jvb2xlYW5NZW51SXRlbShpbmRpY2F0b3JzU3VibWVudSwgJnByZWZzLmJsaW5raW5nQ2FwaXRhbHMsICZpdGVtTmFtZSkpOworICAgIH0KKworICAgIHsKKyAgICAgIE5BTUUoc3RydGV4dCgiQ2FwaXRhbHMgQmxpbmsgUGVyaW9kIikpOworICAgICAgQkxJTktfUEVSSU9EKCZ1cHBlcmNhc2VMZXR0ZXJzQmxpbmtEZXNjcmlwdG9yKTsKKyAgICAgIElURU0obmV3VGltZU1lbnVJdGVtKGluZGljYXRvcnNTdWJtZW51LCAmcGVyaW9kLCAmaXRlbU5hbWUpKTsKKyAgICAgIFRFU1QoQmxpbmtpbmdDYXBpdGFscyk7CisgICAgICBDSEFOR0VEKFVwcGVyY2FzZUxldHRlcnNCbGlua1BlcmlvZCk7CisgICAgfQorCisgICAgeworICAgICAgTkFNRShzdHJ0ZXh0KCJDYXBpdGFscyBQZXJjZW50IFZpc2libGUiKSk7CisgICAgICBCTElOS19WSVNJQkxFKCZ1cHBlcmNhc2VMZXR0ZXJzQmxpbmtEZXNjcmlwdG9yKTsKKyAgICAgIElURU0obmV3QmxpbmtWaXNpYmxlTWVudUl0ZW0oaW5kaWNhdG9yc1N1Ym1lbnUsICZ2aXNpYmxlLCAmaXRlbU5hbWUpKTsKKyAgICAgIFRFU1QoQmxpbmtpbmdDYXBpdGFscyk7CisgICAgICBDSEFOR0VEKFVwcGVyY2FzZUxldHRlcnNCbGlua1BlcmNlbnRhZ2UpOworICAgIH0KKyAgfQorCisgIHsKKyAgICBTVUJNRU5VKG5hdmlnYXRpb25TdWJtZW51LCByb290TWVudSwgc3RydGV4dCgiTmF2aWdhdGlvbiBPcHRpb25zIikpOworCisgICAgeworICAgICAgTkFNRShzdHJ0ZXh0KCJXb3JkIFdyYXAiKSk7CisgICAgICBJVEVNKG5ld0Jvb2xlYW5NZW51SXRlbShuYXZpZ2F0aW9uU3VibWVudSwgJnByZWZzLndvcmRXcmFwLCAmaXRlbU5hbWUpKTsKKyAgICB9CisKKyAgICB7CisgICAgICBOQU1FKHN0cnRleHQoIlNraXAgSWRlbnRpY2FsIExpbmVzIikpOworICAgICAgSVRFTShuZXdCb29sZWFuTWVudUl0ZW0obmF2aWdhdGlvblN1Ym1lbnUsICZwcmVmcy5za2lwSWRlbnRpY2FsTGluZXMsICZpdGVtTmFtZSkpOworICAgICAgQ0hBTkdFRChTa2lwSWRlbnRpY2FsTGluZXMpOworICAgIH0KKworICAgIHsKKyAgICAgIE5BTUUoc3RydGV4dCgiU2tpcCBCbGFuayBCcmFpbGxlIFdpbmRvd3MiKSk7CisgICAgICBJVEVNKG5ld0Jvb2xlYW5NZW51SXRlbShuYXZpZ2F0aW9uU3VibWVudSwgJnByZWZzLnNraXBCbGFua0JyYWlsbGVXaW5kb3dzLCAmaXRlbU5hbWUpKTsKKyAgICB9CisKKyAgICB7CisgICAgICBzdGF0aWMgY29uc3QgTWVudVN0cmluZyBzdHJpbmdzW10gPSB7CisgICAgICAgIFtzYndBbGxdID0gey5sYWJlbD1zdHJ0ZXh0KCJBbGwiKX0sCisgICAgICAgIFtzYndFbmRPZkxpbmVdID0gey5sYWJlbD1zdHJ0ZXh0KCJFbmQgb2YgTGluZSIpfSwKKyAgICAgICAgW3Nid1Jlc3RPZkxpbmVdID0gey5sYWJlbD1zdHJ0ZXh0KCJSZXN0IG9mIExpbmUiKX0sCisgICAgICB9OworCisgICAgICBOQU1FKHN0cnRleHQoIlNraXAgV2hpY2ggQmxhbmsgQnJhaWxsZSBXaW5kb3dzIikpOworICAgICAgSVRFTShuZXdFbnVtZXJhdGVkTWVudUl0ZW0obmF2aWdhdGlvblN1Ym1lbnUsICZwcmVmcy5za2lwQmxhbmtCcmFpbGxlV2luZG93c01vZGUsICZpdGVtTmFtZSwgc3RyaW5ncykpOworICAgIH0KKworICAgIHsKKyAgICAgIE5BTUUoc3RydGV4dCgiU2xpZGluZyBCcmFpbGxlIFdpbmRvdyIpKTsKKyAgICAgIElURU0obmV3Qm9vbGVhbk1lbnVJdGVtKG5hdmlnYXRpb25TdWJtZW51LCAmcHJlZnMuc2xpZGluZ0JyYWlsbGVXaW5kb3csICZpdGVtTmFtZSkpOworICAgIH0KKworICAgIHsKKyAgICAgIE5BTUUoc3RydGV4dCgiRWFnZXIgU2xpZGluZyBCcmFpbGxlIFdpbmRvdyIpKTsKKyAgICAgIElURU0obmV3Qm9vbGVhbk1lbnVJdGVtKG5hdmlnYXRpb25TdWJtZW51LCAmcHJlZnMuZWFnZXJTbGlkaW5nQnJhaWxsZVdpbmRvdywgJml0ZW1OYW1lKSk7CisgICAgICBURVNUKFNsaWRpbmdCcmFpbGxlV2luZG93KTsKKyAgICB9CisKKyAgICB7CisgICAgICBOQU1FKHN0cnRleHQoIkJyYWlsbGUgV2luZG93IE92ZXJsYXAiKSk7CisgICAgICBJVEVNKG5ld051bWVyaWNNZW51SXRlbShuYXZpZ2F0aW9uU3VibWVudSwgJnByZWZzLmJyYWlsbGVXaW5kb3dPdmVybGFwLCAmaXRlbU5hbWUsIDAsIDIwLCAxLCBzdHJ0ZXh0KCJjZWxscyIpLCBOVUxMKSk7CisgICAgICBDSEFOR0VEKEJyYWlsbGVXaW5kb3dPdmVybGFwKTsKKyAgICB9CisKKyAgICB7CisgICAgICBOQU1FKHN0cnRleHQoIlNjcm9sbC1hd2FyZSBDdXJzb3IgTmF2aWdhdGlvbiIpKTsKKyAgICAgIElURU0obmV3Qm9vbGVhbk1lbnVJdGVtKG5hdmlnYXRpb25TdWJtZW51LCAmcHJlZnMuc2Nyb2xsQXdhcmVDdXJzb3JOYXZpZ2F0aW9uLCAmaXRlbU5hbWUpKTsKKyAgICB9CisKKyAgICB7CisgICAgICBzdGF0aWMgY29uc3QgTWVudVN0cmluZyBzdHJpbmdzW10gPSB7CisgICAgICAgIFtjdGROb25lXSA9IHsubGFiZWw9c3RydGV4dCgiTm9uZSIpfSwKKyAgICAgICAgW2N0ZDI1MG1zXSA9IHsubGFiZWw9c3RydGV4dCgiMjUwIG1pbGxpc2Vjb25kcyIpfSwKKyAgICAgICAgW2N0ZDUwMG1zXSA9IHsubGFiZWw9c3RydGV4dCgiNTAwIG1pbGxpc2Vjb25kcyIpfSwKKyAgICAgICAgW2N0ZDFzXSA9IHsubGFiZWw9c3RydGV4dCgiMSBzZWNvbmQiKX0sCisgICAgICAgIFtjdGQyc10gPSB7LmxhYmVsPXN0cnRleHQoIjIgc2Vjb25kcyIpfSwKKyAgICAgIH07CisKKyAgICAgIE5BTUUoc3RydGV4dCgiQ3Vyc29yIFRyYWNraW5nIERlbGF5IikpOworICAgICAgSVRFTShuZXdFbnVtZXJhdGVkTWVudUl0ZW0obmF2aWdhdGlvblN1Ym1lbnUsICZwcmVmcy5jdXJzb3JUcmFja2luZ0RlbGF5LCAmaXRlbU5hbWUsIHN0cmluZ3MpKTsKKyAgICB9CisKKyAgICB7CisgICAgICBOQU1FKHN0cnRleHQoIlRyYWNrIFNjcmVlbiBTY3JvbGwiKSk7CisgICAgICBJVEVNKG5ld0Jvb2xlYW5NZW51SXRlbShuYXZpZ2F0aW9uU3VibWVudSwgJnByZWZzLnRyYWNrU2NyZWVuU2Nyb2xsLCAmaXRlbU5hbWUpKTsKKyAgICB9CisKKyAgI2lmZGVmIEhBVkVfTElCR1BNCisgICAgeworICAgICAgTkFNRShzdHJ0ZXh0KCJUcmFjayBTY3JlZW4gUG9pbnRlciIpKTsKKyAgICAgIElURU0obmV3Qm9vbGVhbk1lbnVJdGVtKG5hdmlnYXRpb25TdWJtZW51LCAmcHJlZnMudHJhY2tTY3JlZW5Qb2ludGVyLCAmaXRlbU5hbWUpKTsKKyAgICB9CisgICNlbmRpZiAvKiBIQVZFX0xJQkdQTSAqLworCisgICAgeworICAgICAgTkFNRShzdHJ0ZXh0KCJIaWdobGlnaHQgQnJhaWxsZSBXaW5kb3cgTG9jYXRpb24iKSk7CisgICAgICBJVEVNKG5ld0Jvb2xlYW5NZW51SXRlbShuYXZpZ2F0aW9uU3VibWVudSwgJnByZWZzLmhpZ2hsaWdodEJyYWlsbGVXaW5kb3dMb2NhdGlvbiwgJml0ZW1OYW1lKSk7CisgICAgfQorCisgICAgeworICAgICAgTkFNRShzdHJ0ZXh0KCJTdGFydCBTZWxlY3Rpb24gd2l0aCBSb3V0aW5nIEtleSIpKTsKKyAgICAgIElURU0obmV3Qm9vbGVhbk1lbnVJdGVtKG5hdmlnYXRpb25TdWJtZW51LCAmcHJlZnMuc3RhcnRTZWxlY3Rpb25XaXRoUm91dGluZ0tleSwgJml0ZW1OYW1lKSk7CisgICAgfQorICB9CisKKyAgeworICAgIFNVQk1FTlUodHlwaW5nU3VibWVudSwgcm9vdE1lbnUsIHN0cnRleHQoIkJyYWlsbGUgVHlwaW5nIikpOworCisgICAgeworICAgICAgTkFNRShzdHJ0ZXh0KCJLZXlib2FyZCBFbmFibGVkIikpOworICAgICAgSVRFTShuZXdCb29sZWFuTWVudUl0ZW0odHlwaW5nU3VibWVudSwgJnByZWZzLmJyYWlsbGVLZXlib2FyZEVuYWJsZWQsICZpdGVtTmFtZSkpOworICAgIH0KKworICAgIHsKKyAgICAgIHN0YXRpYyBjb25zdCBNZW51U3RyaW5nIHN0cmluZ3NbXSA9IHsKKyAgICAgICAgW0JSTF9UWVBJTkdfVEVYVF0gPSB7LmxhYmVsPXN0cnRleHQoIlRyYW5zbGF0ZWQgdmlhIFRleHQgVGFibGUiKX0sCisgICAgICAgIFtCUkxfVFlQSU5HX0RPVFNdID0gey5sYWJlbD1zdHJ0ZXh0KCJEb3RzIHZpYSBVbmljb2RlIEJyYWlsbGUiKX0sCisgICAgICB9OworCisgICAgICBOQU1FKHN0cnRleHQoIlR5cGluZyBNb2RlIikpOworICAgICAgSVRFTShuZXdFbnVtZXJhdGVkTWVudUl0ZW0odHlwaW5nU3VibWVudSwgJnByZWZzLmJyYWlsbGVUeXBpbmdNb2RlLCAmaXRlbU5hbWUsIHN0cmluZ3MpKTsKKyAgICB9CisKKyAgICB7CisgICAgICBOQU1FKHN0cnRleHQoIlF1aWNrIFNwYWNlIikpOworICAgICAgSVRFTShuZXdCb29sZWFuTWVudUl0ZW0odHlwaW5nU3VibWVudSwgJnByZWZzLmJyYWlsbGVRdWlja1NwYWNlLCAmaXRlbU5hbWUpKTsKKyAgICB9CisgIH0KKworICB7CisgICAgU1VCTUVOVShpbnB1dFN1Ym1lbnUsIHJvb3RNZW51LCBzdHJ0ZXh0KCJJbnB1dCBPcHRpb25zIikpOworCisgICAgeworICAgICAgc3RhdGljIGNvbnN0IE1lbnVTdHJpbmcgc3RyaW5nc1tdID0geworICAgICAgICBbYXRPZmZdID0gey5sYWJlbD1zdHJ0ZXh0KCJPZmYiKX0sCisgICAgICAgIFthdDVzXSA9IHsubGFiZWw9c3RydGV4dCgiNSBzZWNvbmRzIil9LAorICAgICAgICBbYXQxMHNdID0gey5sYWJlbD1zdHJ0ZXh0KCIxMCBzZWNvbmRzIil9LAorICAgICAgICBbYXQyMHNdID0gey5sYWJlbD1zdHJ0ZXh0KCIyMCBzZWNvbmRzIil9LAorICAgICAgICBbYXQ0MHNdID0gey5sYWJlbD1zdHJ0ZXh0KCI0MCBzZWNvbmRzIil9LAorICAgICAgfTsKKworICAgICAgTkFNRShzdHJ0ZXh0KCJBdXRvcmVsZWFzZSBUaW1lIikpOworICAgICAgSVRFTShuZXdFbnVtZXJhdGVkTWVudUl0ZW0oaW5wdXRTdWJtZW51LCAmcHJlZnMuYXV0b3JlbGVhc2VUaW1lLCAmaXRlbU5hbWUsIHN0cmluZ3MpKTsKKyAgICAgIENIQU5HRUQoQXV0b3JlbGVhc2VUaW1lKTsKKyAgICB9CisKKyAgICB7CisgICAgICBOQU1FKHN0cnRleHQoIk9uIEZpcnN0IFJlbGVhc2UiKSk7CisgICAgICBJVEVNKG5ld0Jvb2xlYW5NZW51SXRlbShpbnB1dFN1Ym1lbnUsICZwcmVmcy5vbkZpcnN0UmVsZWFzZSwgJml0ZW1OYW1lKSk7CisgICAgfQorCisgICAgeworICAgICAgTkFNRShzdHJ0ZXh0KCJMb25nIFByZXNzIFRpbWUiKSk7CisgICAgICBJVEVNKG5ld1RpbWVNZW51SXRlbShpbnB1dFN1Ym1lbnUsICZwcmVmcy5sb25nUHJlc3NUaW1lLCAmaXRlbU5hbWUpKTsKKyAgICAgIENIQU5HRUQoQXV0b3JlcGVhdERlbGF5KTsKKyAgICB9CisKKyAgICB7CisgICAgICBOQU1FKHN0cnRleHQoIkF1dG9yZXBlYXQgRW5hYmxlZCIpKTsKKyAgICAgIElURU0obmV3Qm9vbGVhbk1lbnVJdGVtKGlucHV0U3VibWVudSwgJnByZWZzLmF1dG9yZXBlYXRFbmFibGVkLCAmaXRlbU5hbWUpKTsKKyAgICAgIENIQU5HRUQoQXV0b3JlcGVhdEVuYWJsZWQpOworICAgIH0KKworICAgIHsKKyAgICAgIE5BTUUoc3RydGV4dCgiQXV0b3JlcGVhdCBJbnRlcnZhbCIpKTsKKyAgICAgIElURU0obmV3VGltZU1lbnVJdGVtKGlucHV0U3VibWVudSwgJnByZWZzLmF1dG9yZXBlYXRJbnRlcnZhbCwgJml0ZW1OYW1lKSk7CisgICAgICBURVNUKEF1dG9yZXBlYXRFbmFibGVkKTsKKyAgICAgIENIQU5HRUQoQXV0b3JlcGVhdEludGVydmFsKTsKKyAgICB9CisKKyAgICB7CisgICAgICBOQU1FKHN0cnRleHQoIkF1dG9yZXBlYXQgUGFubmluZyIpKTsKKyAgICAgIElURU0obmV3Qm9vbGVhbk1lbnVJdGVtKGlucHV0U3VibWVudSwgJnByZWZzLmF1dG9yZXBlYXRQYW5uaW5nLCAmaXRlbU5hbWUpKTsKKyAgICAgIFRFU1QoQXV0b3JlcGVhdEVuYWJsZWQpOworICAgIH0KKworICAgIHsKKyAgICAgIE5BTUUoc3RydGV4dCgiVG91Y2ggTmF2aWdhdGlvbiIpKTsKKyAgICAgIElURU0obmV3Qm9vbGVhbk1lbnVJdGVtKGlucHV0U3VibWVudSwgJnByZWZzLnRvdWNoTmF2aWdhdGlvbiwgJml0ZW1OYW1lKSk7CisgICAgICBURVNUKFRvdWNoU2Vuc2l0aXZpdHkpOworICAgIH0KKworICAgIHsKKyAgICAgIHN0YXRpYyBjb25zdCBNZW51U3RyaW5nIHN0cmluZ3NbXSA9IHsKKyAgICAgICAgW0JSTF9TRU5TSVRJVklUWV9NSU5JTVVNXSA9IHsubGFiZWw9c3RydGV4dCgiTWluaW11bSIpfSwKKyAgICAgICAgW0JSTF9TRU5TSVRJVklUWV9MT1ddID0gey5sYWJlbD1zdHJ0ZXh0KCJMb3ciKX0sCisgICAgICAgIFtCUkxfU0VOU0lUSVZJVFlfTUVESVVNXSA9IHsubGFiZWw9c3RydGV4dCgiTWVkaXVtIil9LAorICAgICAgICBbQlJMX1NFTlNJVElWSVRZX0hJR0hdID0gey5sYWJlbD1zdHJ0ZXh0KCJIaWdoIil9LAorICAgICAgICBbQlJMX1NFTlNJVElWSVRZX01BWElNVU1dID0gey5sYWJlbD1zdHJ0ZXh0KCJNYXhpbXVtIil9LAorICAgICAgfTsKKworICAgICAgTkFNRShzdHJ0ZXh0KCJUb3VjaCBTZW5zaXRpdml0eSIpKTsKKyAgICAgIElURU0obmV3RW51bWVyYXRlZE1lbnVJdGVtKGlucHV0U3VibWVudSwgJnByZWZzLnRvdWNoU2Vuc2l0aXZpdHksICZpdGVtTmFtZSwgc3RyaW5ncykpOworICAgICAgVEVTVChUb3VjaFNlbnNpdGl2aXR5KTsKKyAgICAgIENIQU5HRUQoVG91Y2hTZW5zaXRpdml0eSk7CisgICAgfQorCisgICAgeworICAgICAgTkFNRShzdHJ0ZXh0KCJLZXlib2FyZCBUYWJsZSIpKTsKKyAgICAgIElURU0obmV3RmlsZXNNZW51SXRlbShpbnB1dFN1Ym1lbnUsICZpdGVtTmFtZSwgb3B0X3RhYmxlc0RpcmVjdG9yeSwgS0VZQk9BUkRfVEFCTEVTX1NVQkRJUkVDVE9SWSwgS0VZX1RBQkxFX0VYVEVOU0lPTiwgb3B0X2tleWJvYXJkVGFibGUsIDEpKTsKKyAgICAgIENIQU5HRUQoS2V5Ym9hcmRUYWJsZSk7CisgICAgICBTRVQoa2V5Ym9hcmRUYWJsZSk7CisgICAgfQorICB9CisKKyAgeworICAgIFNVQk1FTlUoYWxlcnRzU3VibWVudSwgcm9vdE1lbnUsIHN0cnRleHQoIkV2ZW50IEFsZXJ0cyIpKTsKKworICAgIHsKKyAgICAgIE5BTUUoc3RydGV4dCgiQ29uc29sZSBCZWxsIEFsZXJ0IikpOworICAgICAgSVRFTShuZXdCb29sZWFuTWVudUl0ZW0oYWxlcnRzU3VibWVudSwgJnByZWZzLmNvbnNvbGVCZWxsQWxlcnQsICZpdGVtTmFtZSkpOworICAgICAgVEVTVChDb25zb2xlQmVsbEFsZXJ0KTsKKyAgICAgIENIQU5HRUQoQ29uc29sZUJlbGxBbGVydCk7CisgICAgfQorCisgICAgeworICAgICAgTkFNRShzdHJ0ZXh0KCJLZXlib2FyZCBMRUQgQWxlcnRzIikpOworICAgICAgSVRFTShuZXdCb29sZWFuTWVudUl0ZW0oYWxlcnRzU3VibWVudSwgJnByZWZzLmtleWJvYXJkTGVkQWxlcnRzLCAmaXRlbU5hbWUpKTsKKyAgICAgIFRFU1QoS2V5Ym9hcmRMZWRBbGVydHMpOworICAgICAgQ0hBTkdFRChLZXlib2FyZExlZEFsZXJ0cyk7CisgICAgfQorCisgICAgeworICAgICAgTkFNRShzdHJ0ZXh0KCJBbGVydCBUdW5lcyIpKTsKKyAgICAgIElURU0obmV3Qm9vbGVhbk1lbnVJdGVtKGFsZXJ0c1N1Ym1lbnUsICZwcmVmcy5hbGVydFR1bmVzLCAmaXRlbU5hbWUpKTsKKyAgICAgIENIQU5HRUQoQWxlcnRUdW5lcyk7CisgICAgfQorCisgICAgeworICAgICAgc3RhdGljIGNvbnN0IE1lbnVTdHJpbmcgc3RyaW5nc1tdID0geworICAgICAgICBbdGRCZWVwZXJdID0gey5sYWJlbD1zdHJ0ZXh0KCJCZWVwZXIiKSwgLmNvbW1lbnQ9c3RydGV4dCgiY29uc29sZSB0b25lIGdlbmVyYXRvciIpfSwKKyAgICAgICAgW3RkUGNtXSA9IHsubGFiZWw9c3RydGV4dCgiUENNIiksIC5jb21tZW50PXN0cnRleHQoInNvdW5kY2FyZCBkaWdpdGFsIGF1ZGlvIil9LAorICAgICAgICBbdGRNaWRpXSA9IHsubGFiZWw9c3RydGV4dCgiTUlESSIpLCAuY29tbWVudD1zdHJ0ZXh0KCJNdXNpY2FsIEluc3RydW1lbnQgRGlnaXRhbCBJbnRlcmZhY2UiKX0sCisgICAgICAgIFt0ZEZtXSA9IHsubGFiZWw9c3RydGV4dCgiRk0iKSwgLmNvbW1lbnQ9c3RydGV4dCgic291bmRjYXJkIHN5bnRoZXNpemVyIil9LAorICAgICAgfTsKKworICAgICAgTkFNRShzdHJ0ZXh0KCJUdW5lIERldmljZSIpKTsKKyAgICAgIElURU0obmV3RW51bWVyYXRlZE1lbnVJdGVtKGFsZXJ0c1N1Ym1lbnUsICZwcmVmcy50dW5lRGV2aWNlLCAmaXRlbU5hbWUsIHN0cmluZ3MpKTsKKyAgICAgIFRFU1QoQWxlcnRUdW5lcyk7CisgICAgICBDSEFOR0VEKFR1bmVEZXZpY2UpOworICAgIH0KKworICAjaWZkZWYgSEFWRV9QQ01fU1VQUE9SVAorICAgIHsKKyAgICAgIE5BTUUoc3RydGV4dCgiUENNIFZvbHVtZSIpKTsKKyAgICAgIElURU0obmV3Vm9sdW1lTWVudUl0ZW0oYWxlcnRzU3VibWVudSwgJnByZWZzLnBjbVZvbHVtZSwgJml0ZW1OYW1lKSk7CisgICAgICBURVNUKFR1bmVzUGNtKTsKKyAgICB9CisgICNlbmRpZiAvKiBIQVZFX1BDTV9TVVBQT1JUICovCisKKyAgI2lmZGVmIEhBVkVfTUlESV9TVVBQT1JUCisgICAgeworICAgICAgTkFNRShzdHJ0ZXh0KCJNSURJIFZvbHVtZSIpKTsKKyAgICAgIElURU0obmV3Vm9sdW1lTWVudUl0ZW0oYWxlcnRzU3VibWVudSwgJnByZWZzLm1pZGlWb2x1bWUsICZpdGVtTmFtZSkpOworICAgICAgVEVTVChUdW5lc01pZGkpOworICAgIH0KKworICAgIHsKKyAgICAgIGNvbnN0IE1lbnVTdHJpbmcgKnN0cmluZ3MgPSBtYWtlTWlkaUluc3RydW1lbnRNZW51U3RyaW5ncygpOworICAgICAgaWYgKCFzdHJpbmdzKSBnb3RvIG5vSXRlbTsKKworICAgICAgeworICAgICAgICBOQU1FKHN0cnRleHQoIk1JREkgSW5zdHJ1bWVudCIpKTsKKyAgICAgICAgSVRFTShuZXdTdHJpbmdzTWVudUl0ZW0oYWxlcnRzU3VibWVudSwgJnByZWZzLm1pZGlJbnN0cnVtZW50LCAmaXRlbU5hbWUsIHN0cmluZ3MsIG1pZGlJbnN0cnVtZW50Q291bnQpKTsKKyAgICAgICAgVEVTVChUdW5lc01pZGkpOworICAgICAgfQorICAgIH0KKyAgI2VuZGlmIC8qIEhBVkVfTUlESV9TVVBQT1JUICovCisKKyAgI2lmZGVmIEhBVkVfRk1fU1VQUE9SVAorICAgIHsKKyAgICAgIE5BTUUoc3RydGV4dCgiRk0gVm9sdW1lIikpOworICAgICAgSVRFTShuZXdWb2x1bWVNZW51SXRlbShhbGVydHNTdWJtZW51LCAmcHJlZnMuZm1Wb2x1bWUsICZpdGVtTmFtZSkpOworICAgICAgVEVTVChUdW5lc0ZtKTsKKyAgICB9CisgICNlbmRpZiAvKiBIQVZFX0ZNX1NVUFBPUlQgKi8KKworICAgIHsKKyAgICAgIE5BTUUoc3RydGV4dCgiQWxlcnQgRG90cyIpKTsKKyAgICAgIElURU0obmV3Qm9vbGVhbk1lbnVJdGVtKGFsZXJ0c1N1Ym1lbnUsICZwcmVmcy5hbGVydERvdHMsICZpdGVtTmFtZSkpOworICAgIH0KKworICAgIHsKKyAgICAgIE5BTUUoc3RydGV4dCgiQWxlcnQgTWVzc2FnZXMiKSk7CisgICAgICBJVEVNKG5ld0Jvb2xlYW5NZW51SXRlbShhbGVydHNTdWJtZW51LCAmcHJlZnMuYWxlcnRNZXNzYWdlcywgJml0ZW1OYW1lKSk7CisgICAgfQorCisjaWZkZWYgRU5BQkxFX1NQRUVDSF9TVVBQT1JUCisgICAgeworICAgICAgTkFNRShzdHJ0ZXh0KCJTcGVhayBLZXkgQ29udGV4dCIpKTsKKyAgICAgIElURU0obmV3Qm9vbGVhbk1lbnVJdGVtKGFsZXJ0c1N1Ym1lbnUsICZwcmVmcy5zcGVha0tleUNvbnRleHQsICZpdGVtTmFtZSkpOworICAgIH0KKworICAgIHsKKyAgICAgIE5BTUUoc3RydGV4dCgiU3BlYWsgTW9kaWZpZXIgS2V5IikpOworICAgICAgSVRFTShuZXdCb29sZWFuTWVudUl0ZW0oYWxlcnRzU3VibWVudSwgJnByZWZzLnNwZWFrTW9kaWZpZXJLZXksICZpdGVtTmFtZSkpOworICAgIH0KKyNlbmRpZiAvKiBFTkFCTEVfU1BFRUNIX1NVUFBPUlQgKi8KKyAgfQorCisjaWZkZWYgRU5BQkxFX1NQRUVDSF9TVVBQT1JUCisgIHsKKyAgICBTVUJNRU5VKGF1dG9zcGVha1N1Ym1lbnUsIHJvb3RNZW51LCBzdHJ0ZXh0KCJBdXRvc3BlYWsgT3B0aW9ucyIpKTsKKworICAgIHsKKyAgICAgIE5BTUUoc3RydGV4dCgiQXV0b3NwZWFrIikpOworICAgICAgSVRFTShuZXdCb29sZWFuTWVudUl0ZW0oYXV0b3NwZWFrU3VibWVudSwgJnByZWZzLmF1dG9zcGVhaywgJml0ZW1OYW1lKSk7CisgICAgfQorCisgICAgeworICAgICAgTkFNRShzdHJ0ZXh0KCJTcGVhayBTZWxlY3RlZCBMaW5lIikpOworICAgICAgSVRFTShuZXdCb29sZWFuTWVudUl0ZW0oYXV0b3NwZWFrU3VibWVudSwgJnByZWZzLmF1dG9zcGVha1NlbGVjdGVkTGluZSwgJml0ZW1OYW1lKSk7CisgICAgICBURVNUKEF1dG9zcGVhayk7CisgICAgfQorCisgICAgeworICAgICAgTkFNRShzdHJ0ZXh0KCJTcGVhayBTZWxlY3RlZCBDaGFyYWN0ZXIiKSk7CisgICAgICBJVEVNKG5ld0Jvb2xlYW5NZW51SXRlbShhdXRvc3BlYWtTdWJtZW51LCAmcHJlZnMuYXV0b3NwZWFrU2VsZWN0ZWRDaGFyYWN0ZXIsICZpdGVtTmFtZSkpOworICAgICAgVEVTVChBdXRvc3BlYWspOworICAgIH0KKworICAgIHsKKyAgICAgIE5BTUUoc3RydGV4dCgiU3BlYWsgSW5zZXJ0ZWQgQ2hhcmFjdGVycyIpKTsKKyAgICAgIElURU0obmV3Qm9vbGVhbk1lbnVJdGVtKGF1dG9zcGVha1N1Ym1lbnUsICZwcmVmcy5hdXRvc3BlYWtJbnNlcnRlZENoYXJhY3RlcnMsICZpdGVtTmFtZSkpOworICAgICAgVEVTVChBdXRvc3BlYWspOworICAgIH0KKworICAgIHsKKyAgICAgIE5BTUUoc3RydGV4dCgiU3BlYWsgRGVsZXRlZCBDaGFyYWN0ZXJzIikpOworICAgICAgSVRFTShuZXdCb29sZWFuTWVudUl0ZW0oYXV0b3NwZWFrU3VibWVudSwgJnByZWZzLmF1dG9zcGVha0RlbGV0ZWRDaGFyYWN0ZXJzLCAmaXRlbU5hbWUpKTsKKyAgICAgIFRFU1QoQXV0b3NwZWFrKTsKKyAgICB9CisKKyAgICB7CisgICAgICBOQU1FKHN0cnRleHQoIlNwZWFrIFJlcGxhY2VkIENoYXJhY3RlcnMiKSk7CisgICAgICBJVEVNKG5ld0Jvb2xlYW5NZW51SXRlbShhdXRvc3BlYWtTdWJtZW51LCAmcHJlZnMuYXV0b3NwZWFrUmVwbGFjZWRDaGFyYWN0ZXJzLCAmaXRlbU5hbWUpKTsKKyAgICAgIFRFU1QoQXV0b3NwZWFrKTsKKyAgICB9CisKKyAgICB7CisgICAgICBOQU1FKHN0cnRleHQoIlNwZWFrIENvbXBsZXRlZCBXb3JkcyIpKTsKKyAgICAgIElURU0obmV3Qm9vbGVhbk1lbnVJdGVtKGF1dG9zcGVha1N1Ym1lbnUsICZwcmVmcy5hdXRvc3BlYWtDb21wbGV0ZWRXb3JkcywgJml0ZW1OYW1lKSk7CisgICAgICBURVNUKEF1dG9zcGVhayk7CisgICAgfQorCisgICAgeworICAgICAgTkFNRShzdHJ0ZXh0KCJTcGVhayBMaW5lIEluZGVudCIpKTsKKyAgICAgIElURU0obmV3Qm9vbGVhbk1lbnVJdGVtKGF1dG9zcGVha1N1Ym1lbnUsICZwcmVmcy5hdXRvc3BlYWtMaW5lSW5kZW50LCAmaXRlbU5hbWUpKTsKKyAgICAgIFRFU1QoQXV0b3NwZWFrKTsKKyAgICB9CisgIH0KKworICB7CisgICAgU1VCTUVOVShzcGVlY2hTdWJtZW51LCByb290TWVudSwgc3RydGV4dCgiU3BlZWNoIE9wdGlvbnMiKSk7CisKKyAgICB7CisgICAgICBOQU1FKHN0cnRleHQoIlNwZWVjaCBWb2x1bWUiKSk7CisgICAgICBJVEVNKG5ld051bWVyaWNNZW51SXRlbShzcGVlY2hTdWJtZW51LCAmcHJlZnMuc3BlZWNoVm9sdW1lLCAmaXRlbU5hbWUsIDAsIFNQS19WT0xVTUVfTUFYSU1VTSwgMSwgIiUiLCBmb3JtYXRTcGVlY2hWb2x1bWUpKTsKKyAgICAgIFRFU1QoU3BlZWNoVm9sdW1lKTsKKyAgICAgIENIQU5HRUQoU3BlZWNoVm9sdW1lKTsKKyAgICB9CisKKyAgICB7CisgICAgICBOQU1FKHN0cnRleHQoIlNwZWVjaCBSYXRlIikpOworICAgICAgSVRFTShuZXdOdW1lcmljTWVudUl0ZW0oc3BlZWNoU3VibWVudSwgJnByZWZzLnNwZWVjaFJhdGUsICZpdGVtTmFtZSwgMCwgU1BLX1JBVEVfTUFYSU1VTSwgMSwgTlVMTCwgZm9ybWF0U3BlZWNoUmF0ZSkpOworICAgICAgVEVTVChTcGVlY2hSYXRlKTsKKyAgICAgIENIQU5HRUQoU3BlZWNoUmF0ZSk7CisgICAgfQorCisgICAgeworICAgICAgTkFNRShzdHJ0ZXh0KCJTcGVlY2ggUGl0Y2giKSk7CisgICAgICBJVEVNKG5ld051bWVyaWNNZW51SXRlbShzcGVlY2hTdWJtZW51LCAmcHJlZnMuc3BlZWNoUGl0Y2gsICZpdGVtTmFtZSwgMCwgU1BLX1BJVENIX01BWElNVU0sIDEsIE5VTEwsIGZvcm1hdFNwZWVjaFBpdGNoKSk7CisgICAgICBURVNUKFNwZWVjaFBpdGNoKTsKKyAgICAgIENIQU5HRUQoU3BlZWNoUGl0Y2gpOworICAgIH0KKworICAgIHsKKyAgICAgIHN0YXRpYyBjb25zdCBNZW51U3RyaW5nIHN0cmluZ3NbXSA9IHsKKyAgICAgICAgW1NQS19QVU5DVFVBVElPTl9OT05FXSA9IHsubGFiZWw9c3RydGV4dCgiTm9uZSIpfSwKKyAgICAgICAgW1NQS19QVU5DVFVBVElPTl9TT01FXSA9IHsubGFiZWw9c3RydGV4dCgiU29tZSIpfSwKKyAgICAgICAgW1NQS19QVU5DVFVBVElPTl9BTExdID0gey5sYWJlbD1zdHJ0ZXh0KCJBbGwiKX0sCisgICAgICB9OworCisgICAgICBOQU1FKHN0cnRleHQoIlNwZWVjaCBQdW5jdHVhdGlvbiIpKTsKKyAgICAgIElURU0obmV3RW51bWVyYXRlZE1lbnVJdGVtKHNwZWVjaFN1Ym1lbnUsICZwcmVmcy5zcGVlY2hQdW5jdHVhdGlvbiwgJml0ZW1OYW1lLCBzdHJpbmdzKSk7CisgICAgICBURVNUKFNwZWVjaFB1bmN0dWF0aW9uKTsKKyAgICAgIENIQU5HRUQoU3BlZWNoUHVuY3R1YXRpb24pOworICAgIH0KKworICAgIHsKKyAgICAgIHN0YXRpYyBjb25zdCBNZW51U3RyaW5nIHN0cmluZ3NbXSA9IHsKKyAgICAgICAgW3N1Y05vbmVdID0gey5sYWJlbD1zdHJ0ZXh0KCJOb25lIil9LAorICAgICAgICAvLyAiY2FwIiBoZXJlLCB1c2VkIGR1cmluZyBzcGVlY2ggb3V0cHV0LCBpcyBzaG9ydCBmb3IgImNhcGl0YWwiLgorICAgICAgICAvLyBJdCBpcyBzcG9rZW4ganVzdCBiZWZvcmUgYW4gdXBwZXJjYXNlIGxldHRlciwgZS5nLiAiY2FwIEEiLgorICAgICAgICBbc3VjU2F5Q2FwXSA9IHsubGFiZWw9c3RydGV4dCgiU2F5IENhcCIpfSwKKyAgICAgICAgW3N1Y1JhaXNlUGl0Y2hdID0gey5sYWJlbD1zdHJ0ZXh0KCJSYWlzZSBQaXRjaCIpfSwKKyAgICAgIH07CisKKyAgICAgIE5BTUUoc3RydGV4dCgiU3BlZWNoIFVwcGVyY2FzZSBJbmRpY2F0b3IiKSk7CisgICAgICBJVEVNKG5ld0VudW1lcmF0ZWRNZW51SXRlbShzcGVlY2hTdWJtZW51LCAmcHJlZnMuc3BlZWNoVXBwZXJjYXNlSW5kaWNhdG9yLCAmaXRlbU5hbWUsIHN0cmluZ3MpKTsKKyAgICB9CisKKyAgICB7CisgICAgICBzdGF0aWMgY29uc3QgTWVudVN0cmluZyBzdHJpbmdzW10gPSB7CisgICAgICAgIFtzd3NOb25lXSA9IHsubGFiZWw9c3RydGV4dCgiTm9uZSIpfSwKKyAgICAgICAgW3N3c1NheVNwYWNlXSA9IHsubGFiZWw9c3RydGV4dCgiU2F5IFNwYWNlIil9LAorICAgICAgfTsKKworICAgICAgTkFNRShzdHJ0ZXh0KCJTcGVlY2ggV2hpdGVzcGFjZSBJbmRpY2F0b3IiKSk7CisgICAgICBJVEVNKG5ld0VudW1lcmF0ZWRNZW51SXRlbShzcGVlY2hTdWJtZW51LCAmcHJlZnMuc3BlZWNoV2hpdGVzcGFjZUluZGljYXRvciwgJml0ZW1OYW1lLCBzdHJpbmdzKSk7CisgICAgfQorCisgICAgeworICAgICAgc3RhdGljIGNvbnN0IE1lbnVTdHJpbmcgc3RyaW5nc1tdID0geworICAgICAgICBbc2F5SW1tZWRpYXRlXSA9IHsubGFiZWw9c3RydGV4dCgiSW1tZWRpYXRlIil9LAorICAgICAgICBbc2F5RW5xdWV1ZV0gPSB7LmxhYmVsPXN0cnRleHQoIkVucXVldWUiKX0sCisgICAgICB9OworCisgICAgICBOQU1FKHN0cnRleHQoIlNheSBMaW5lIE1vZGUiKSk7CisgICAgICBJVEVNKG5ld0VudW1lcmF0ZWRNZW51SXRlbShzcGVlY2hTdWJtZW51LCAmcHJlZnMuc2F5TGluZU1vZGUsICZpdGVtTmFtZSwgc3RyaW5ncykpOworICAgIH0KKworICAgIHsKKyAgICAgIE5BTUUoc3RydGV4dCgiU2hvdyBTcGVlY2ggQ3Vyc29yIikpOworICAgICAgSVRFTShuZXdCb29sZWFuTWVudUl0ZW0oc3BlZWNoU3VibWVudSwgJnByZWZzLnNob3dTcGVlY2hDdXJzb3IsICZpdGVtTmFtZSkpOworICAgIH0KKworICAgIHsKKyAgICAgIE5BTUUoc3RydGV4dCgiU3BlZWNoIEN1cnNvciBTdHlsZSIpKTsKKyAgICAgIElURU0obmV3RW51bWVyYXRlZE1lbnVJdGVtKHNwZWVjaFN1Ym1lbnUsICZwcmVmcy5zcGVlY2hDdXJzb3JTdHlsZSwgJml0ZW1OYW1lLCBjdXJzb3JTdHlsZXMpKTsKKyAgICAgIFRFU1QoU2hvd1NwZWVjaEN1cnNvcik7CisgICAgfQorCisgICAgeworICAgICAgTkFNRShzdHJ0ZXh0KCJCbGlua2luZyBTcGVlY2ggQ3Vyc29yIikpOworICAgICAgSVRFTShuZXdCb29sZWFuTWVudUl0ZW0oc3BlZWNoU3VibWVudSwgJnByZWZzLmJsaW5raW5nU3BlZWNoQ3Vyc29yLCAmaXRlbU5hbWUpKTsKKyAgICAgIFRFU1QoU2hvd1NwZWVjaEN1cnNvcik7CisgICAgfQorCisgICAgeworICAgICAgTkFNRShzdHJ0ZXh0KCJTcGVlY2ggQ3Vyc29yIEJsaW5rIFBlcmlvZCIpKTsKKyAgICAgIEJMSU5LX1BFUklPRCgmc3BlZWNoQ3Vyc29yQmxpbmtEZXNjcmlwdG9yKTsKKyAgICAgIElURU0obmV3VGltZU1lbnVJdGVtKHNwZWVjaFN1Ym1lbnUsICZwZXJpb2QsICZpdGVtTmFtZSkpOworICAgICAgVEVTVChCbGlua2luZ1NwZWVjaEN1cnNvcik7CisgICAgICBDSEFOR0VEKFNwZWVjaEN1cnNvckJsaW5rUGVyaW9kKTsKKyAgICB9CisKKyAgICB7CisgICAgICBOQU1FKHN0cnRleHQoIlNwZWVjaCBDdXJzb3IgUGVyY2VudCBWaXNpYmxlIikpOworICAgICAgQkxJTktfVklTSUJMRSgmc3BlZWNoQ3Vyc29yQmxpbmtEZXNjcmlwdG9yKTsKKyAgICAgIElURU0obmV3QmxpbmtWaXNpYmxlTWVudUl0ZW0oc3BlZWNoU3VibWVudSwgJnZpc2libGUsICZpdGVtTmFtZSkpOworICAgICAgVEVTVChCbGlua2luZ1NwZWVjaEN1cnNvcik7CisgICAgICBDSEFOR0VEKFNwZWVjaEN1cnNvckJsaW5rUGVyY2VudGFnZSk7CisgICAgfQorICB9CisjZW5kaWYgLyogRU5BQkxFX1NQRUVDSF9TVVBQT1JUICovCisKKyAgeworICAgIFNVQk1FTlUodGltZVN1Ym1lbnUsIHJvb3RNZW51LCBzdHJ0ZXh0KCJUaW1lIFByZXNlbnRhdGlvbiIpKTsKKworICAgIHsKKyAgICAgIHN0YXRpYyBjb25zdCBNZW51U3RyaW5nIHN0cmluZ3NbXSA9IHsKKyAgICAgICAgW3RmMjRIb3VyXSA9IHsubGFiZWw9c3RydGV4dCgiMjQgSG91ciIpfSwKKyAgICAgICAgW3RmMTJIb3VyXSA9IHsubGFiZWw9c3RydGV4dCgiMTIgSG91ciIpfSwKKyAgICAgIH07CisKKyAgICAgIE5BTUUoc3RydGV4dCgiVGltZSBGb3JtYXQiKSk7CisgICAgICBJVEVNKG5ld0VudW1lcmF0ZWRNZW51SXRlbSh0aW1lU3VibWVudSwgJnByZWZzLnRpbWVGb3JtYXQsICZpdGVtTmFtZSwgc3RyaW5ncykpOworICAgIH0KKworICAgIHsKKyAgICAgIHN0YXRpYyBjb25zdCBNZW51U3RyaW5nIHN0cmluZ3NbXSA9IHsKKyAgICAgICAgW3RzQ29sb25dID0gey5sYWJlbD1zdHJ0ZXh0KCJDb2xvbiIpLCAiOiJ9LAorICAgICAgICBbdHNEb3RdID0gey5sYWJlbD1zdHJ0ZXh0KCJEb3QiKSwgIi4ifSwKKyAgICAgIH07CisKKyAgICAgIE5BTUUoc3RydGV4dCgiVGltZSBTZXBhcmF0b3IiKSk7CisgICAgICBJVEVNKG5ld0VudW1lcmF0ZWRNZW51SXRlbSh0aW1lU3VibWVudSwgJnByZWZzLnRpbWVTZXBhcmF0b3IsICZpdGVtTmFtZSwgc3RyaW5ncykpOworICAgIH0KKworICAgIHsKKyAgICAgIE5BTUUoc3RydGV4dCgiU2hvdyBTZWNvbmRzIikpOworICAgICAgSVRFTShuZXdCb29sZWFuTWVudUl0ZW0odGltZVN1Ym1lbnUsICZwcmVmcy5zaG93U2Vjb25kcywgJml0ZW1OYW1lKSk7CisgICAgfQorCisgICAgeworICAgICAgc3RhdGljIGNvbnN0IE1lbnVTdHJpbmcgc3RyaW5nc1tdID0geworICAgICAgICBbZHBOb25lXSA9IHsubGFiZWw9c3RydGV4dCgiTm9uZSIpfSwKKyAgICAgICAgW2RwQmVmb3JlVGltZV0gPSB7LmxhYmVsPXN0cnRleHQoIkJlZm9yZSBUaW1lIil9LAorICAgICAgICBbZHBBZnRlclRpbWVdID0gey5sYWJlbD1zdHJ0ZXh0KCJBZnRlciBUaW1lIil9LAorICAgICAgfTsKKworICAgICAgTkFNRShzdHJ0ZXh0KCJEYXRlIFBvc2l0aW9uIikpOworICAgICAgSVRFTShuZXdFbnVtZXJhdGVkTWVudUl0ZW0odGltZVN1Ym1lbnUsICZwcmVmcy5kYXRlUG9zaXRpb24sICZpdGVtTmFtZSwgc3RyaW5ncykpOworICAgIH0KKworICAgIHsKKyAgICAgIHN0YXRpYyBjb25zdCBNZW51U3RyaW5nIHN0cmluZ3NbXSA9IHsKKyAgICAgICAgW2RmWWVhck1vbnRoRGF5XSA9IHsubGFiZWw9c3RydGV4dCgiWWVhciBNb250aCBEYXkiKX0sCisgICAgICAgIFtkZk1vbnRoRGF5WWVhcl0gPSB7LmxhYmVsPXN0cnRleHQoIk1vbnRoIERheSBZZWFyIil9LAorICAgICAgICBbZGZEYXlNb250aFllYXJdID0gey5sYWJlbD1zdHJ0ZXh0KCJEYXkgTW9udGggWWVhciIpfSwKKyAgICAgIH07CisKKyAgICAgIE5BTUUoc3RydGV4dCgiRGF0ZSBGb3JtYXQiKSk7CisgICAgICBJVEVNKG5ld0VudW1lcmF0ZWRNZW51SXRlbSh0aW1lU3VibWVudSwgJnByZWZzLmRhdGVGb3JtYXQsICZpdGVtTmFtZSwgc3RyaW5ncykpOworICAgICAgVEVTVChTaG93RGF0ZSk7CisgICAgfQorCisgICAgeworICAgICAgc3RhdGljIGNvbnN0IE1lbnVTdHJpbmcgc3RyaW5nc1tdID0geworICAgICAgICBbZHNEYXNoXSA9IHsubGFiZWw9c3RydGV4dCgiRGFzaCIpLCAiLSJ9LAorICAgICAgICBbZHNTbGFzaF0gPSB7LmxhYmVsPXN0cnRleHQoIlNsYXNoIiksICIvIn0sCisgICAgICAgIFtkc0RvdF0gPSB7LmxhYmVsPXN0cnRleHQoIkRvdCIpLCAiLiJ9LAorICAgICAgfTsKKworICAgICAgTkFNRShzdHJ0ZXh0KCJEYXRlIFNlcGFyYXRvciIpKTsKKyAgICAgIElURU0obmV3RW51bWVyYXRlZE1lbnVJdGVtKHRpbWVTdWJtZW51LCAmcHJlZnMuZGF0ZVNlcGFyYXRvciwgJml0ZW1OYW1lLCBzdHJpbmdzKSk7CisgICAgICBURVNUKFNob3dEYXRlKTsKKyAgICB9CisgIH0KKworICB7CisgICAgU1VCTUVOVShzdGF0dXNTdWJtZW51LCByb290TWVudSwgc3RydGV4dCgiU3RhdHVzIENlbGxzIikpOworCisgICAgeworICAgICAgc3RhdGljIGNvbnN0IE1lbnVTdHJpbmcgc3RyaW5nc1tdID0geworICAgICAgICBbc3BOb25lXSA9IHsubGFiZWw9c3RydGV4dCgiTm9uZSIpfSwKKyAgICAgICAgW3NwTGVmdF0gPSB7LmxhYmVsPXN0cnRleHQoIkxlZnQiKX0sCisgICAgICAgIFtzcFJpZ2h0XSA9IHsubGFiZWw9c3RydGV4dCgiUmlnaHQiKX0sCisgICAgICB9OworCisgICAgICBOQU1FKHN0cnRleHQoIlN0YXR1cyBQb3NpdGlvbiIpKTsKKyAgICAgIElURU0obmV3RW51bWVyYXRlZE1lbnVJdGVtKHN0YXR1c1N1Ym1lbnUsICZwcmVmcy5zdGF0dXNQb3NpdGlvbiwgJml0ZW1OYW1lLCBzdHJpbmdzKSk7CisgICAgICBURVNUKFN0YXR1c1Bvc2l0aW9uKTsKKyAgICAgIENIQU5HRUQoU3RhdHVzUG9zaXRpb24pOworICAgIH0KKworICAgIHsKKyAgICAgIE5BTUUoc3RydGV4dCgiU3RhdHVzIENvdW50IikpOworICAgICAgSVRFTShuZXdOdW1lcmljTWVudUl0ZW0oc3RhdHVzU3VibWVudSwgJnByZWZzLnN0YXR1c0NvdW50LCAmaXRlbU5hbWUsIDAsIE1BWCgoaW50KWJybC50ZXh0Q29sdW1ucy8yLTEsIDApLCAxLCBzdHJ0ZXh0KCJjZWxscyIpLCBOVUxMKSk7CisgICAgICBURVNUKFN0YXR1c0NvdW50KTsKKyAgICAgIENIQU5HRUQoU3RhdHVzQ291bnQpOworICAgIH0KKworICAgIHsKKyAgICAgIHN0YXRpYyBjb25zdCBNZW51U3RyaW5nIHN0cmluZ3NbXSA9IHsKKyAgICAgICAgW3NzTm9uZV0gPSB7LmxhYmVsPXN0cnRleHQoIk5vbmUiKX0sCisgICAgICAgIFtzc1NwYWNlXSA9IHsubGFiZWw9c3RydGV4dCgiU3BhY2UiKX0sCisgICAgICAgIFtzc0Jsb2NrXSA9IHsubGFiZWw9c3RydGV4dCgiQmxvY2siKX0sCisgICAgICAgIFtzc1N0YXR1c1NpZGVdID0gey5sYWJlbD1zdHJ0ZXh0KCJTdGF0dXMgU2lkZSIpfSwKKyAgICAgICAgW3NzVGV4dFNpZGVdID0gey5sYWJlbD1zdHJ0ZXh0KCJUZXh0IFNpZGUiKX0sCisgICAgICB9OworCisgICAgICBOQU1FKHN0cnRleHQoIlN0YXR1cyBTZXBhcmF0b3IiKSk7CisgICAgICBJVEVNKG5ld0VudW1lcmF0ZWRNZW51SXRlbShzdGF0dXNTdWJtZW51LCAmcHJlZnMuc3RhdHVzU2VwYXJhdG9yLCAmaXRlbU5hbWUsIHN0cmluZ3MpKTsKKyAgICAgIFRFU1QoU3RhdHVzU2VwYXJhdG9yKTsKKyAgICAgIENIQU5HRUQoU3RhdHVzU2VwYXJhdG9yKTsKKyAgICB9CisKKyAgICB7CisgICAgICAjZGVmaW5lIFNUQVRVU19GSUVMRF9JVEVNKG51bWJlcikgeyBJVEVNKG5ld1N0YXR1c0ZpZWxkTWVudUl0ZW0oc3RhdHVzU3VibWVudSwgbnVtYmVyLCB0ZXN0U3RhdHVzRmllbGQjI251bWJlciwgY2hhbmdlZFN0YXR1c0ZpZWxkIyNudW1iZXIpKTsgfQorICAgICAgU1RBVFVTX0ZJRUxEX0lURU0oMSk7CisgICAgICBTVEFUVVNfRklFTERfSVRFTSgyKTsKKyAgICAgIFNUQVRVU19GSUVMRF9JVEVNKDMpOworICAgICAgU1RBVFVTX0ZJRUxEX0lURU0oNCk7CisgICAgICBTVEFUVVNfRklFTERfSVRFTSg1KTsKKyAgICAgIFNUQVRVU19GSUVMRF9JVEVNKDYpOworICAgICAgU1RBVFVTX0ZJRUxEX0lURU0oNyk7CisgICAgICBTVEFUVVNfRklFTERfSVRFTSg4KTsKKyAgICAgIFNUQVRVU19GSUVMRF9JVEVNKDkpOworICAgICAgI3VuZGVmIFNUQVRVU19GSUVMRF9JVEVNCisgICAgfQorICB9CisKKyAgeworICAgIFNVQk1FTlUodGFibGVzU3VibWVudSwgcm9vdE1lbnUsIHN0cnRleHQoIkJyYWlsbGUgVGFibGVzIikpOworCisgICAgeworICAgICAgTkFNRShzdHJ0ZXh0KCJUZXh0IFRhYmxlIikpOworICAgICAgSVRFTShuZXdGaWxlc01lbnVJdGVtKHRhYmxlc1N1Ym1lbnUsICZpdGVtTmFtZSwgb3B0X3RhYmxlc0RpcmVjdG9yeSwgVEVYVF9UQUJMRVNfU1VCRElSRUNUT1JZLCBURVhUX1RBQkxFX0VYVEVOU0lPTiwgb3B0X3RleHRUYWJsZSwgMCkpOworICAgICAgQ0hBTkdFRChUZXh0VGFibGUpOworICAgICAgU0VUKHRleHRUYWJsZSk7CisgICAgfQorCisgICAgeworICAgICAgTkFNRShzdHJ0ZXh0KCJDb250cmFjdGlvbiBUYWJsZSIpKTsKKyAgICAgIElURU0obmV3RmlsZXNNZW51SXRlbSh0YWJsZXNTdWJtZW51LCAmaXRlbU5hbWUsIG9wdF90YWJsZXNEaXJlY3RvcnksIENPTlRSQUNUSU9OX1RBQkxFU19TVUJESVJFQ1RPUlksIENPTlRSQUNUSU9OX1RBQkxFX0VYVEVOU0lPTiwgb3B0X2NvbnRyYWN0aW9uVGFibGUsIDEpKTsKKyAgICAgIENIQU5HRUQoQ29udHJhY3Rpb25UYWJsZSk7CisgICAgICBTRVQoY29udHJhY3Rpb25UYWJsZSk7CisgICAgfQorCisgICAgeworICAgICAgTkFNRShzdHJ0ZXh0KCJBdHRyaWJ1dGVzIFRhYmxlIikpOworICAgICAgSVRFTShuZXdGaWxlc01lbnVJdGVtKHRhYmxlc1N1Ym1lbnUsICZpdGVtTmFtZSwgb3B0X3RhYmxlc0RpcmVjdG9yeSwgQVRUUklCVVRFU19UQUJMRVNfU1VCRElSRUNUT1JZLCBBVFRSSUJVVEVTX1RBQkxFX0VYVEVOU0lPTiwgb3B0X2F0dHJpYnV0ZXNUYWJsZSwgMCkpOworICAgICAgQ0hBTkdFRChBdHRyaWJ1dGVzVGFibGUpOworICAgICAgU0VUKGF0dHJpYnV0ZXNUYWJsZSk7CisgICAgfQorICB9CisKKyAgeworICAgIFNVQk1FTlUocHJvZmlsZXNTdWJtZW51LCByb290TWVudSwgc3RydGV4dCgiUHJvZmlsZXMiKSk7CisKKyAgICB7CisgICAgICBJVEVNKG5ld1Byb2ZpbGVNZW51SXRlbShwcm9maWxlc1N1Ym1lbnUsICZsYW5ndWFnZVByb2ZpbGUpKTsKKyAgICAgIENIQU5HRUQoTGFuZ3VhZ2VQcm9maWxlKTsKKyAgICAgIFNFVChsYW5ndWFnZVByb2ZpbGUpOworICAgIH0KKyAgfQorCisgIHsKKyAgICBTVUJNRU5VKGJ1aWxkU3VibWVudSwgcm9vdE1lbnUsIHN0cnRleHQoIkJ1aWxkIEluZm9ybWF0aW9uIikpOworICAgIHNldEFkdmFuY2VkU3VibWVudShidWlsZFN1Ym1lbnUpOworCisgICAgeworICAgICAgTkFNRShzdHJ0ZXh0KCJQYWNrYWdlIFZlcnNpb24iKSk7CisgICAgICBJVEVNKG5ld1RleHRNZW51SXRlbShidWlsZFN1Ym1lbnUsICZpdGVtTmFtZSwgUEFDS0FHRV9WRVJTSU9OKSk7CisgICAgfQorCisgICAgeworICAgICAgTkFNRShzdHJ0ZXh0KCJQYWNrYWdlIFJldmlzaW9uIikpOworICAgICAgSVRFTShuZXdUZXh0TWVudUl0ZW0oYnVpbGRTdWJtZW51LCAmaXRlbU5hbWUsIGdldFJldmlzaW9uSWRlbnRpZmllcigpKSk7CisgICAgfQorCisgICAgeworICAgICAgTkFNRShzdHJ0ZXh0KCJXZWIgU2l0ZSIpKTsKKyAgICAgIElURU0obmV3VGV4dE1lbnVJdGVtKGJ1aWxkU3VibWVudSwgJml0ZW1OYW1lLCBQQUNLQUdFX1VSTCkpOworICAgIH0KKworICAgIHsKKyAgICAgIE5BTUUoc3RydGV4dCgiTWFpbGluZyBMaXN0IikpOworICAgICAgSVRFTShuZXdUZXh0TWVudUl0ZW0oYnVpbGRTdWJtZW51LCAmaXRlbU5hbWUsIFBBQ0tBR0VfQlVHUkVQT1JUKSk7CisgICAgfQorCisgICAgeworICAgICAgTkFNRShzdHJ0ZXh0KCJDb25maWd1cmF0aW9uIERpcmVjdG9yeSIpKTsKKyAgICAgIElURU0obmV3VGV4dE1lbnVJdGVtKGJ1aWxkU3VibWVudSwgJml0ZW1OYW1lLCBDT05GSUdVUkFUSU9OX0RJUkVDVE9SWSkpOworICAgIH0KKworICAgIHsKKyAgICAgIE5BTUUoc3RydGV4dCgiQ29uZmlndXJhdGlvbiBGaWxlIikpOworICAgICAgSVRFTShuZXdUZXh0TWVudUl0ZW0oYnVpbGRTdWJtZW51LCAmaXRlbU5hbWUsIENPTkZJR1VSQVRJT05fRklMRSkpOworICAgIH0KKworICAgIHsKKyAgICAgIE5BTUUoc3RydGV4dCgiVXBkYXRhYmxlIERpcmVjdG9yeSIpKTsKKyAgICAgIElURU0obmV3VGV4dE1lbnVJdGVtKGJ1aWxkU3VibWVudSwgJml0ZW1OYW1lLCBVUERBVEFCTEVfRElSRUNUT1JZKSk7CisgICAgfQorCisgICAgeworICAgICAgTkFNRShzdHJ0ZXh0KCJQcmVmZXJlbmNlcyBGaWxlIikpOworICAgICAgSVRFTShuZXdUZXh0TWVudUl0ZW0oYnVpbGRTdWJtZW51LCAmaXRlbU5hbWUsIFBSRUZFUkVOQ0VTX0ZJTEUpKTsKKyAgICB9CisKKyAgICB7CisgICAgICBOQU1FKHN0cnRleHQoIldyaXRhYmxlIERpcmVjdG9yeSIpKTsKKyAgICAgIElURU0obmV3VGV4dE1lbnVJdGVtKGJ1aWxkU3VibWVudSwgJml0ZW1OYW1lLCBXUklUQUJMRV9ESVJFQ1RPUlkpKTsKKyAgICB9CisKKyAgICB7CisgICAgICBOQU1FKHN0cnRleHQoIkRyaXZlcnMgRGlyZWN0b3J5IikpOworICAgICAgSVRFTShuZXdUZXh0TWVudUl0ZW0oYnVpbGRTdWJtZW51LCAmaXRlbU5hbWUsIERSSVZFUlNfRElSRUNUT1JZKSk7CisgICAgfQorCisgICAgeworICAgICAgTkFNRShzdHJ0ZXh0KCJUYWJsZXMgRGlyZWN0b3J5IikpOworICAgICAgSVRFTShuZXdUZXh0TWVudUl0ZW0oYnVpbGRTdWJtZW51LCAmaXRlbU5hbWUsIFRBQkxFU19ESVJFQ1RPUlkpKTsKKyAgICB9CisKKyAgICB7CisgICAgICBOQU1FKHN0cnRleHQoIkxvY2FsZSBEaXJlY3RvcnkiKSk7CisgICAgICBJVEVNKG5ld1RleHRNZW51SXRlbShidWlsZFN1Ym1lbnUsICZpdGVtTmFtZSwgTE9DQUxFX0RJUkVDVE9SWSkpOworICAgIH0KKyAgfQorCisgIHsKKyAgICBzdGF0aWMgY29uc3QgTWVudVN0cmluZyBsb2dMZXZlbHNbXSA9IHsKKyAgICAgIFtMT0dfRU1FUkddID0gey5sYWJlbD1zdHJ0ZXh0KCJFbWVyZ2VuY3kiKX0sCisgICAgICBbTE9HX0FMRVJUXSA9IHsubGFiZWw9c3RydGV4dCgiQWxlcnQiKX0sCisgICAgICBbTE9HX0NSSVRdID0gey5sYWJlbD1zdHJ0ZXh0KCJDcml0aWNhbCIpfSwKKyAgICAgIFtMT0dfRVJSXSA9IHsubGFiZWw9c3RydGV4dCgiRXJyb3IiKX0sCisgICAgICBbTE9HX1dBUk5JTkddID0gey5sYWJlbD1zdHJ0ZXh0KCJXYXJuaW5nIil9LAorICAgICAgW0xPR19OT1RJQ0VdID0gey5sYWJlbD1zdHJ0ZXh0KCJOb3RpY2UiKX0sCisgICAgICBbTE9HX0lORk9dID0gey5sYWJlbD1zdHJ0ZXh0KCJJbmZvcm1hdGlvbiIpfSwKKyAgICAgIFtMT0dfREVCVUddID0gey5sYWJlbD1zdHJ0ZXh0KCJEZWJ1ZyIpfSwKKyAgICB9OworCisgICAgU1VCTUVOVShpbnRlcm5hbFN1Ym1lbnUsIHJvb3RNZW51LCBzdHJ0ZXh0KCJJbnRlcm5hbCBQYXJhbWV0ZXJzIikpOworICAgIHNldEFkdmFuY2VkU3VibWVudShpbnRlcm5hbFN1Ym1lbnUpOworCisgICAgeworICAgICAgTkFNRShzdHJ0ZXh0KCJTeXN0ZW0gTG9nIExldmVsIikpOworICAgICAgSVRFTShuZXdFbnVtZXJhdGVkTWVudUl0ZW0oaW50ZXJuYWxTdWJtZW51LCAmc3lzdGVtTG9nTGV2ZWwsICZpdGVtTmFtZSwgbG9nTGV2ZWxzKSk7CisgICAgfQorCisgICAgeworICAgICAgTkFNRShzdHJ0ZXh0KCJTdGFuZGFyZCBFcnJvciBMb2cgTGV2ZWwiKSk7CisgICAgICBJVEVNKG5ld0VudW1lcmF0ZWRNZW51SXRlbShpbnRlcm5hbFN1Ym1lbnUsICZzdGRlcnJMb2dMZXZlbCwgJml0ZW1OYW1lLCBsb2dMZXZlbHMpKTsKKyAgICB9CisKKyAgICB7CisgICAgICBOQU1FKHN0cnRleHQoIkNhdGVnb3J5IExvZyBMZXZlbCIpKTsKKyAgICAgIElURU0obmV3RW51bWVyYXRlZE1lbnVJdGVtKGludGVybmFsU3VibWVudSwgJmNhdGVnb3J5TG9nTGV2ZWwsICZpdGVtTmFtZSwgbG9nTGV2ZWxzKSk7CisgICAgfQorCisgICAgeworICAgICAgU1VCTUVOVShsb2dDYXRlZ29yaWVzU3VibWVudSwgaW50ZXJuYWxTdWJtZW51LCBzdHJ0ZXh0KCJMb2cgQ2F0ZWdvcmllcyIpKTsKKyAgICAgIHNldEFkdmFuY2VkU3VibWVudShsb2dDYXRlZ29yaWVzU3VibWVudSk7CisKKyAgICAgIHsKKyAgICAgICAgTG9nQ2F0ZWdvcnlJbmRleCBjYXRlZ29yeTsKKworICAgICAgICBmb3IgKGNhdGVnb3J5PTA7IGNhdGVnb3J5PExPR19DQVRFR09SWV9DT1VOVDsgY2F0ZWdvcnkrPTEpIHsKKyAgICAgICAgICBjb25zdCBjaGFyICpkZXNjcmlwdGlvbiA9IGdldExvZ0NhdGVnb3J5VGl0bGUoY2F0ZWdvcnkpOworCisgICAgICAgICAgaWYgKGRlc2NyaXB0aW9uICYmICpkZXNjcmlwdGlvbikgeworICAgICAgICAgICAgTWVudVN0cmluZyAqbmFtZTsKKworICAgICAgICAgICAgaWYgKCEobmFtZSA9IG1hbGxvYyhzaXplb2YoKm5hbWUpKSkpIGdvdG8gbm9JdGVtOworICAgICAgICAgICAgbWVtc2V0KG5hbWUsIDAsIHNpemVvZigqbmFtZSkpOworICAgICAgICAgICAgbmFtZS0+bGFiZWwgPSBkZXNjcmlwdGlvbjsKKworICAgICAgICAgICAgeworICAgICAgICAgICAgICBJVEVNKG5ld0Jvb2xlYW5NZW51SXRlbShsb2dDYXRlZ29yaWVzU3VibWVudSwgJmxvZ0NhdGVnb3J5RmxhZ3NbY2F0ZWdvcnldLCBuYW1lKSk7CisKKyAgICAgICAgICAgICAgc3dpdGNoIChjYXRlZ29yeSkgeworICAgICAgICAgICAgICAgIGNhc2UgTE9HX0NBVEVHT1JZX0lOREVYKEJSQUlMTEVfS0VZUyk6CisgICAgICAgICAgICAgICAgICBURVNUKElucHV0VGFibGUpOworICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICBjYXNlIExPR19DQVRFR09SWV9JTkRFWChLRVlCT0FSRF9LRVlTKToKKyAgICAgICAgICAgICAgICAgIFRFU1QoS2V5Ym9hcmRUYWJsZSk7CisgICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgfQorICAgIH0KKyAgfQorCisgIHsKKyAgICBTVUJNRU5VKHRvb2xzU3VibWVudSwgcm9vdE1lbnUsIHN0cnRleHQoIlRvb2xzIikpOworICAgIHNldEFkdmFuY2VkU3VibWVudSh0b29sc1N1Ym1lbnUpOworCisgICAgeworICAgICAgTkFNRShzdHJ0ZXh0KCJSZXN0YXJ0IEJyYWlsbGUgRHJpdmVyIikpOworICAgICAgSVRFTShuZXdUb29sTWVudUl0ZW0odG9vbHNTdWJtZW51LCAmaXRlbU5hbWUsIHJlc3RhcnRCcmFpbGxlRHJpdmVyKSk7CisgICAgfQorCisgICNpZmRlZiBFTkFCTEVfU1BFRUNIX1NVUFBPUlQKKyAgICB7CisgICAgICBOQU1FKHN0cnRleHQoIlJlc3RhcnQgU3BlZWNoIERyaXZlciIpKTsKKyAgICAgIElURU0obmV3VG9vbE1lbnVJdGVtKHRvb2xzU3VibWVudSwgJml0ZW1OYW1lLCByZXN0YXJ0U3BlZWNoRHJpdmVyKSk7CisgICAgfQorICAjZW5kaWYgLyogRU5BQkxFX1NQRUVDSF9TVVBQT1JUICovCisKKyAgICB7CisgICAgICBOQU1FKHN0cnRleHQoIlJlc3RhcnQgU2NyZWVuIERyaXZlciIpKTsKKyAgICAgIElURU0obmV3VG9vbE1lbnVJdGVtKHRvb2xzU3VibWVudSwgJml0ZW1OYW1lLCByZXN0YXJ0U2NyZWVuRHJpdmVyKSk7CisgICAgfQorICB9CisKKyAgeworICAgIE5BTUUoc3RydGV4dCgiTG9nIE1lc3NhZ2VzIikpOworICAgIGxvZ01lc3NhZ2VzTWVudSA9IG5ld1N1Ym1lbnVNZW51SXRlbShyb290TWVudSwgJml0ZW1OYW1lKTsKKyAgfQorCisgIHJldHVybiByb290TWVudTsKKworbm9JdGVtOgorICBkZXN0cm95TWVudShyb290TWVudSk7Citub01lbnU6CisgIHJldHVybiBOVUxMOworfQorCitNZW51ICoKK2dldFByZWZlcmVuY2VzTWVudSAodm9pZCkgeworICBzdGF0aWMgTWVudSAqbWVudSA9IE5VTEw7CisgIGlmICghbWVudSkgbWVudSA9IG1ha2VQcmVmZXJlbmNlc01lbnUoKTsKKyAgcmV0dXJuIG1lbnU7Cit9CmRpZmYgLS1naXQgYS9Qcm9ncmFtcy9tZW51X3ByZWZzLmggYi9Qcm9ncmFtcy9tZW51X3ByZWZzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzJkMGIyNQotLS0gL2Rldi9udWxsCisrKyBiL1Byb2dyYW1zL21lbnVfcHJlZnMuaApAQCAtMCwwICsxLDQ2IEBACisvKgorICogQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyAqICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyAqCisgKiBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorICoKKyAqIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyAqCisgKiBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisgKi8KKworI2lmbmRlZiBCUkxUVFlfSU5DTFVERURfTUVOVV9QUkVGUworI2RlZmluZSBCUkxUVFlfSU5DTFVERURfTUVOVV9QUkVGUworCisjaW5jbHVkZSAibWVudS5oIgorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmIC8qIF9fY3BsdXNwbHVzICovCisKK2V4dGVybiBNZW51ICpnZXRQcmVmZXJlbmNlc01lbnUgKHZvaWQpOworZXh0ZXJuIGludCB1cGRhdGVMb2dNZXNzYWdlc1N1Ym1lbnUgKHZvaWQpOworCisjZGVmaW5lIFBSRUZTX01FTlVfSVRFTV9BUFBMWShhcHBseSkgXAorYXBwbHkodGV4dFRhYmxlKSBcCithcHBseShhdHRyaWJ1dGVzVGFibGUpIFwKK2FwcGx5KGNvbnRyYWN0aW9uVGFibGUpIFwKK2FwcGx5KGtleWJvYXJkVGFibGUpIFwKK2FwcGx5KGxhbmd1YWdlUHJvZmlsZSkKKworI2RlZmluZSBQUkVGU19NRU5VX0lURU1fR0VUVEVSX1BST1RPVFlQRShuYW1lKSBNZW51SXRlbSAqZ2V0UHJlZmVyZW5jZXNNZW51SXRlbV8jI25hbWUgKHZvaWQpCisjZGVmaW5lIFBSRUZTX01FTlVfSVRFTV9HRVRURVJfREVGSU5FKG5hbWUpIGV4dGVybiBQUkVGU19NRU5VX0lURU1fR0VUVEVSX1BST1RPVFlQRShuYW1lKTsKK1BSRUZTX01FTlVfSVRFTV9BUFBMWShQUkVGU19NRU5VX0lURU1fR0VUVEVSX0RFRklORSkKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYgLyogX19jcGx1c3BsdXMgKi8KKworI2VuZGlmIC8qIEJSTFRUWV9JTkNMVURFRF9NRU5VICovCmRpZmYgLS1naXQgYS9Qcm9ncmFtcy9tZXNzYWdlLmMgYi9Qcm9ncmFtcy9tZXNzYWdlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTRmZDkxNgotLS0gL2Rldi9udWxsCisrKyBiL1Byb2dyYW1zL21lc3NhZ2UuYwpAQCAtMCwwICsxLDI2NSBAQAorLyoKKyAqIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisgKiAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisgKgorICogQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKKyNpbmNsdWRlICJwcm9sb2d1ZS5oIgorCisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKyNpbmNsdWRlICJlbWJlZC5oIgorI2luY2x1ZGUgImxvZy5oIgorI2luY2x1ZGUgImxvZ19oaXN0b3J5LmgiCisjaW5jbHVkZSAibWVzc2FnZS5oIgorI2luY2x1ZGUgImRlZmF1bHRzLmgiCisjaW5jbHVkZSAiYXN5bmNfd2FpdC5oIgorI2luY2x1ZGUgImFzeW5jX3Rhc2suaCIKKyNpbmNsdWRlICJ1dGY4LmgiCisjaW5jbHVkZSAiYnJsX3V0aWxzLmgiCisjaW5jbHVkZSAiYnJsX2NtZHMuaCIKKyNpbmNsdWRlICJzcGsuaCIKKyNpbmNsdWRlICJrdGJfdHlwZXMuaCIKKyNpbmNsdWRlICJ1cGRhdGUuaCIKKyNpbmNsdWRlICJjbWRfcXVldWUuaCIKKyNpbmNsdWRlICJhcGlfY29udHJvbC5oIgorI2luY2x1ZGUgImNvcmUuaCIKKworaW50IG1lc3NhZ2VIb2xkVGltZW91dCA9IERFRkFVTFRfTUVTU0FHRV9IT0xEX1RJTUVPVVQ7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgY29uc3QgY2hhciAqbW9kZTsKKyAgTWVzc2FnZU9wdGlvbnMgb3B0aW9uczsKKyAgdW5zaWduZWQgcHJlc2VudGVkOjE7CisgIHVuc2lnbmVkIGRlYWxsb2NhdGU6MTsKKyAgY2hhciB0ZXh0WzBdOworfSBNZXNzYWdlUGFyYW1ldGVyczsKKwordHlwZWRlZiBzdHJ1Y3QgeworICBjb25zdCB3Y2hhcl90ICpzdGFydDsKKyAgc2l6ZV90IGxlbmd0aDsKK30gTWVzc2FnZVNlZ21lbnQ7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgY29uc3QgTWVzc2FnZVBhcmFtZXRlcnMgKnBhcmFtZXRlcnM7CisKKyAgc3RydWN0IHsKKyAgICBjb25zdCBNZXNzYWdlU2VnbWVudCAqZmlyc3Q7CisgICAgY29uc3QgTWVzc2FnZVNlZ21lbnQgKmN1cnJlbnQ7CisgICAgY29uc3QgTWVzc2FnZVNlZ21lbnQgKmxhc3Q7CisgIH0gc2VnbWVudHM7CisKKyAgaW50IHRpbWVvdXQ7CisgIHVuc2lnbmVkIGVuZFdhaXQ6MTsKKyAgdW5zaWduZWQgaG9sZDoxOworICB1bnNpZ25lZCB0b3VjaDoxOworfSBNZXNzYWdlRGF0YTsKKworQVNZTkNfQ09ORElUSU9OX1RFU1RFUih0ZXN0RW5kTWVzc2FnZVdhaXQpIHsKKyAgY29uc3QgTWVzc2FnZURhdGEgKm1nZCA9IGRhdGE7CisgIHJldHVybiBtZ2QtPmVuZFdhaXQ7Cit9CisKK3N0YXRpYyBpbnQKK2hhbmRsZU1lc3NhZ2VDb21tYW5kcyAoaW50IGNvbW1hbmQsIHZvaWQgKmRhdGEpIHsKKyAgTWVzc2FnZURhdGEgKm1nZCA9IGRhdGE7CisKKyAgc3dpdGNoIChjb21tYW5kICYgQlJMX01TS19DTUQpIHsKKyAgICBjYXNlIEJSTF9DTURfTE5VUDoKKyAgICBjYXNlIEJSTF9DTURfUFJESUZMTjoKKyAgICBjYXNlIEJSTF9DTURfRldJTkxUU0tJUDoKKyAgICBjYXNlIEJSTF9DTURfRldJTkxUOiB7CisgICAgICBpZiAobWdkLT5zZWdtZW50cy5jdXJyZW50ID4gbWdkLT5zZWdtZW50cy5maXJzdCkgeworICAgICAgICBtZ2QtPnNlZ21lbnRzLmN1cnJlbnQgLT0gMTsKKyAgICAgICAgbWdkLT5lbmRXYWl0ID0gMTsKKyAgICAgIH0KKworICAgICAgbWdkLT5ob2xkID0gMTsKKyAgICAgIHJldHVybiAxOworICAgIH0KKworICAgIGNhc2UgQlJMX0NNRF9MTkROOgorICAgIGNhc2UgQlJMX0NNRF9OWERJRkxOOgorICAgIGNhc2UgQlJMX0NNRF9GV0lOUlRTS0lQOgorICAgIGNhc2UgQlJMX0NNRF9GV0lOUlQ6IHsKKyAgICAgIGlmICgobWdkLT5ob2xkID0gbWdkLT5zZWdtZW50cy5jdXJyZW50IDwgbWdkLT5zZWdtZW50cy5sYXN0KSkgeworICAgICAgICBtZ2QtPnNlZ21lbnRzLmN1cnJlbnQgKz0gMTsKKyAgICAgIH0KKworICAgICAgYnJlYWs7CisgICAgfQorCisgICAgZGVmYXVsdDogeworICAgICAgaW50IGFyZyA9IGNvbW1hbmQgJiBCUkxfTVNLX0FSRzsKKworICAgICAgc3dpdGNoIChjb21tYW5kICYgQlJMX01TS19CTEspIHsKKyAgICAgICAgY2FzZSBCUkxfQ01EX0JMSyhUT1VDSF9BVCk6CisgICAgICAgICAgaWYgKChtZ2QtPnRvdWNoID0gYXJnICE9IEJSTF9NU0tfQVJHKSkgcmV0dXJuIDE7CisgICAgICAgICAgbWdkLT50aW1lb3V0ID0gMTAwMDsKKyAgICAgICAgICBicmVhazsKKworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgIG1nZC0+aG9sZCA9IDA7CisgICAgICAgICAgYnJlYWs7CisgICAgICB9CisKKyAgICAgIGJyZWFrOworICAgIH0KKyAgfQorCisgIG1nZC0+ZW5kV2FpdCA9IDE7CisgIHJldHVybiAxOworfQorCitBU1lOQ19UQVNLX0NBTExCQUNLKHByZXNlbnRNZXNzYWdlKSB7CisgIE1lc3NhZ2VQYXJhbWV0ZXJzICptZ3AgPSBkYXRhOworCisjaWZkZWYgRU5BQkxFX1NQRUVDSF9TVVBQT1JUCisgIGlmICghKG1ncC0+b3B0aW9ucyAmIE1TR19TSUxFTlQpKSB7CisgICAgaWYgKGlzQXV0b3NwZWFrQWN0aXZlKCkpIHsKKyAgICAgIHNheVN0cmluZygmc3BrLCBtZ3AtPnRleHQsIFNBWV9PUFRfTVVURV9GSVJTVCk7CisgICAgfQorICB9CisjZW5kaWYgLyogRU5BQkxFX1NQRUVDSF9TVVBQT1JUICovCisKKyAgaWYgKGNhbkJyYWlsbGUoKSkgeworICAgIE1lc3NhZ2VEYXRhIG1nZCA9IHsKKyAgICAgIC5ob2xkID0gMCwKKyAgICAgIC50b3VjaCA9IDAsCisgICAgICAucGFyYW1ldGVycyA9IG1ncAorICAgIH07CisKKyAgICBjb25zdCBzaXplX3QgY2hhcmFjdGVyQ291bnQgPSBjb3VudFV0ZjhDaGFyYWN0ZXJzKG1ncC0+dGV4dCk7CisgICAgTWVzc2FnZVNlZ21lbnQgbWVzc2FnZVNlZ21lbnRzW2NoYXJhY3RlckNvdW50XTsKKyAgICB3Y2hhcl90IGNoYXJhY3RlcnNbY2hhcmFjdGVyQ291bnQgKyAxXTsKKyAgICBtYWtlV2NoYXJzRnJvbVV0ZjgobWdwLT50ZXh0LCBjaGFyYWN0ZXJzLCBBUlJBWV9DT1VOVChjaGFyYWN0ZXJzKSk7CisKKyAgICBjb25zdCBzaXplX3QgYnJhaWxsZVNpemUgPSB0ZXh0Q291bnQgKiBicmwudGV4dFJvd3M7CisgICAgd2NoYXJfdCBicmFpbGxlQnVmZmVyW2JyYWlsbGVTaXplXTsKKworICAgIHsKKyAgICAgIGNvbnN0IHdjaGFyX3QgKmNoYXJhY3RlciA9IGNoYXJhY3RlcnM7CisgICAgICBjb25zdCB3Y2hhcl90ICpjb25zdCBlbmQgPSBjaGFyYWN0ZXIgKyBjaGFyYWN0ZXJDb3VudDsKKworICAgICAgTWVzc2FnZVNlZ21lbnQgKnNlZ21lbnQgPSBtZXNzYWdlU2VnbWVudHM7CisgICAgICBtZ2Quc2VnbWVudHMuY3VycmVudCA9IG1nZC5zZWdtZW50cy5maXJzdCA9IHNlZ21lbnQ7CisKKyAgICAgIHdoaWxlICgqY2hhcmFjdGVyKSB7CisgICAgICAgIC8qIHN0cmlwIGxlYWRpbmcgc3BhY2VzICovCisgICAgICAgIHdoaWxlICgoY2hhcmFjdGVyIDwgZW5kKSAmJiBpc3dzcGFjZSgqY2hhcmFjdGVyKSkgY2hhcmFjdGVyICs9IDE7CisKKyAgICAgICAgY29uc3Qgc2l6ZV90IGNoYXJhY3RlcnNMZWZ0ID0gZW5kIC0gY2hhcmFjdGVyOworICAgICAgICBpZiAoIWNoYXJhY3RlcnNMZWZ0KSBicmVhazsKKworICAgICAgICBzZWdtZW50LT5zdGFydCA9IGNoYXJhY3RlcjsKKyAgICAgICAgc2VnbWVudC0+bGVuZ3RoID0gTUlOKGNoYXJhY3RlcnNMZWZ0LCBicmFpbGxlU2l6ZSk7CisKKyAgICAgICAgY2hhcmFjdGVyICs9IHNlZ21lbnQtPmxlbmd0aDsKKyAgICAgICAgc2VnbWVudCArPSAxOworICAgICAgfQorCisgICAgICBtZ2Quc2VnbWVudHMubGFzdCA9IHNlZ21lbnQgLSAxOworICAgIH0KKworICAgIGludCB3YXNMaW5rZWQgPSBhcGkuaXNTZXJ2ZXJMaW5rZWQoKTsKKyAgICBpZiAod2FzTGlua2VkKSBhcGkudW5saW5rU2VydmVyKCk7CisKKyAgICBzdXNwZW5kVXBkYXRlcygpOworICAgIHB1c2hDb21tYW5kRW52aXJvbm1lbnQoIm1lc3NhZ2UiLCBOVUxMLCBOVUxMKTsKKyAgICBwdXNoQ29tbWFuZEhhbmRsZXIoIm1lc3NhZ2UiLCBLVEJfQ1RYX1dBSVRJTkcsCisgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZU1lc3NhZ2VDb21tYW5kcywgTlVMTCwgJm1nZCk7CisKKyAgICB3aGlsZSAoMSkgeworICAgICAgY29uc3QgTWVzc2FnZVNlZ21lbnQgKnNlZ21lbnQgPSBtZ2Quc2VnbWVudHMuY3VycmVudDsKKyAgICAgIHNpemVfdCBjZWxsQ291bnQgPSBzZWdtZW50LT5sZW5ndGg7CisgICAgICBpbnQgbGFzdFNlZ21lbnQgPSBzZWdtZW50ID09IG1nZC5zZWdtZW50cy5sYXN0OworCisgICAgICB3bWVtY3B5KGJyYWlsbGVCdWZmZXIsIHNlZ21lbnQtPnN0YXJ0LCBjZWxsQ291bnQpOworICAgICAgYnJsLmN1cnNvciA9IEJSTF9OT19DVVJTT1I7CisKKyAgICAgIGlmICghd3JpdGVCcmFpbGxlQ2hhcmFjdGVycyhtZ3AtPm1vZGUsIGJyYWlsbGVCdWZmZXIsIGNlbGxDb3VudCkpIHsKKyAgICAgICAgbWdwLT5wcmVzZW50ZWQgPSAwOworICAgICAgICBicmVhazsKKyAgICAgIH0KKworICAgICAgbWdkLnRpbWVvdXQgPSBtZXNzYWdlSG9sZFRpbWVvdXQgLSBicmwud3JpdGVEZWxheTsKKyAgICAgIGRyYWluQnJhaWxsZU91dHB1dCgmYnJsLCAwKTsKKyAgICAgIGlmICghbWdkLmhvbGQgJiYgbGFzdFNlZ21lbnQgJiYgKG1ncC0+b3B0aW9ucyAmIE1TR19OT0RFTEFZKSkgYnJlYWs7CisgICAgICBtZ2QudGltZW91dCA9IE1BWChtZ2QudGltZW91dCwgMCk7CisKKyAgICAgIHdoaWxlICgxKSB7CisgICAgICAgIGludCB0aW1lb3V0ID0gbWdkLnRpbWVvdXQ7CisgICAgICAgIG1nZC50aW1lb3V0ID0gLTE7CisKKyAgICAgICAgbWdkLmVuZFdhaXQgPSAwOworICAgICAgICBpbnQgdGltZWRPdXQgPSAhYXN5bmNBd2FpdENvbmRpdGlvbih0aW1lb3V0LCB0ZXN0RW5kTWVzc2FnZVdhaXQsICZtZ2QpOworICAgICAgICBpZiAobWdkLnNlZ21lbnRzLmN1cnJlbnQgIT0gc2VnbWVudCkgYnJlYWs7CisKKyAgICAgICAgaWYgKG1nZC5ob2xkIHx8IG1nZC50b3VjaCkgeworICAgICAgICAgIG1nZC50aW1lb3V0ID0gMTAwMDAwMDsKKyAgICAgICAgfSBlbHNlIGlmICh0aW1lZE91dCkgeworICAgICAgICAgIGlmIChsYXN0U2VnbWVudCkgZ290byBET05FOworICAgICAgICAgIG1nZC5zZWdtZW50cy5jdXJyZW50ICs9IDE7CisgICAgICAgICAgbWdkLnRpbWVvdXQgPSBtZXNzYWdlSG9sZFRpbWVvdXQ7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0gZWxzZSBpZiAobWdkLnRpbWVvdXQgPCAwKSB7CisgICAgICAgICAgZ290byBET05FOworICAgICAgICB9CisgICAgICB9CisgICAgfQorCisgIERPTkU6CisgICAgcG9wQ29tbWFuZEVudmlyb25tZW50KCk7CisgICAgcmVzdW1lVXBkYXRlcygxKTsKKyAgICBpZiAod2FzTGlua2VkKSBhcGkubGlua1NlcnZlcigpOworICB9CisKKyAgaWYgKG1ncC0+ZGVhbGxvY2F0ZSkgZnJlZShtZ3ApOworfQorCitpbnQgCittZXNzYWdlIChjb25zdCBjaGFyICptb2RlLCBjb25zdCBjaGFyICp0ZXh0LCBNZXNzYWdlT3B0aW9ucyBvcHRpb25zKSB7CisgIGlmIChvcHRpb25zICYgTVNHX0xPRykgcHVzaExvZ01lc3NhZ2UodGV4dCk7CisKKyAgaW50IHByZXNlbnRlZCA9IDA7CisgIE1lc3NhZ2VQYXJhbWV0ZXJzICptZ3A7CisgIHNpemVfdCBzaXplID0gc2l6ZW9mKCptZ3ApICsgc3RybGVuKHRleHQpICsgMTsKKworICBpZiAoKG1ncCA9IG1hbGxvYyhzaXplKSkpIHsKKyAgICBtZW1zZXQobWdwLCAwLCBzaXplKTsKKyAgICBtZ3AtPm1vZGUgPSBtb2RlPyBtb2RlOiAiIjsKKyAgICBtZ3AtPm9wdGlvbnMgPSBvcHRpb25zOworICAgIG1ncC0+cHJlc2VudGVkID0gMTsKKyAgICBzdHJjcHkobWdwLT50ZXh0LCB0ZXh0KTsKKworICAgIGlmIChtZ3AtPm9wdGlvbnMgJiBNU0dfU1lOQykgeworICAgICAgbWdwLT5kZWFsbG9jYXRlID0gMDsKKyAgICAgIHByZXNlbnRNZXNzYWdlKG1ncCk7CisgICAgICBpZiAobWdwLT5wcmVzZW50ZWQpIHByZXNlbnRlZCA9IDE7CisgICAgfSBlbHNlIHsKKyAgICAgIG1ncC0+ZGVhbGxvY2F0ZSA9IDE7CisgICAgICBpZiAoYXN5bmNBZGRUYXNrKE5VTEwsIHByZXNlbnRNZXNzYWdlLCBtZ3ApKSByZXR1cm4gMTsKKyAgICB9CisKKyAgICBmcmVlKG1ncCk7CisgIH0KKworICByZXR1cm4gcHJlc2VudGVkOworfQorCit2b2lkCitzaG93TWVzc2FnZSAoY29uc3QgY2hhciAqdGV4dCkgeworICBtZXNzYWdlKE5VTEwsIHRleHQsIDApOworfQpkaWZmIC0tZ2l0IGEvUHJvZ3JhbXMvbWVzc2FnZXMuYyBiL1Byb2dyYW1zL21lc3NhZ2VzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDU2ZDQyZAotLS0gL2Rldi9udWxsCisrKyBiL1Byb2dyYW1zL21lc3NhZ2VzLmMKQEAgLTAsMCArMSw2MzIgQEAKKy8qCisgKiBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorICogICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorICoKKyAqIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorICoKKyAqIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyAqLworCisjaW5jbHVkZSAicHJvbG9ndWUuaCIKKworI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8bG9jYWxlLmg+CisjaW5jbHVkZSA8ZmNudGwuaD4KKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorCisjaW5jbHVkZSAibG9nLmgiCisjaW5jbHVkZSAibWVzc2FnZXMuaCIKKyNpbmNsdWRlICJmaWxlLmgiCisKKy8vIE1pbkdXIGRvZXNuJ3QgZGVmaW5lIExDX01FU1NBR0VTCisjaWZuZGVmIExDX01FU1NBR0VTCisjZGVmaW5lIExDX01FU1NBR0VTIExDX0FMTAorI2VuZGlmIC8qIExDX01FU1NBR0VTICovCisKKy8vIFdpbmRvd3MgbmVlZHMgT19CSU5BUlkKKyNpZm5kZWYgT19CSU5BUlkKKyNkZWZpbmUgT19CSU5BUlkgMAorI2VuZGlmIC8qIE9fQklOQVJZICovCisKK3N0YXRpYyBjaGFyICpsb2NhbGVEaXJlY3RvcnkgPSBOVUxMOworc3RhdGljIGNoYXIgKmxvY2FsZVNwZWNpZmllciA9IE5VTEw7CitzdGF0aWMgY2hhciAqZG9tYWluTmFtZSA9IE5VTEw7CisKK2NvbnN0IGNoYXIgKgorZ2V0TWVzc2FnZXNEaXJlY3RvcnkgKHZvaWQpIHsKKyAgcmV0dXJuIGxvY2FsZURpcmVjdG9yeTsKK30KKworY29uc3QgY2hhciAqCitnZXRNZXNzYWdlc0xvY2FsZSAodm9pZCkgeworICByZXR1cm4gbG9jYWxlU3BlY2lmaWVyOworfQorCitjb25zdCBjaGFyICoKK2dldE1lc3NhZ2VzRG9tYWluICh2b2lkKSB7CisgIHJldHVybiBkb21haW5OYW1lOworfQorCitzdGF0aWMgY29uc3QgdWludDMyX3QgbWFnaWNOdW1iZXIgPSBVSU5UMzJfQygwWDk1MDQxMkRFKTsKK3R5cGVkZWYgdWludDMyX3QgR2V0SW50ZWdlckZ1bmN0aW9uICh1aW50MzJfdCB2YWx1ZSk7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgdWludDMyX3QgbWFnaWNOdW1iZXI7CisgIHVpbnQzMl90IHZlcnNpb25OdW1iZXI7CisgIHVpbnQzMl90IG1lc3NhZ2VDb3VudDsKKyAgdWludDMyX3Qgc291cmNlTWVzc2FnZXM7CisgIHVpbnQzMl90IHRyYW5zbGF0ZWRNZXNzYWdlczsKKyAgdWludDMyX3QgaGFzaFNpemU7CisgIHVpbnQzMl90IGhhc2hPZmZzZXQ7Cit9IE1lc3NhZ2VDYXRhbG9nSGVhZGVyOworCit0eXBlZGVmIHN0cnVjdCB7CisgIHVuaW9uIHsKKyAgICB2b2lkICpkYXRhOworICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ5dGVzOworICAgIGNvbnN0IE1lc3NhZ2VDYXRhbG9nSGVhZGVyICpoZWFkZXI7CisgIH0gdmlldzsKKworICBzaXplX3QgZGF0YVNpemU7CisgIEdldEludGVnZXJGdW5jdGlvbiAqZ2V0SW50ZWdlcjsKK30gTWVzc2FnZUNhdGFsb2c7CisKK3N0YXRpYyBNZXNzYWdlQ2F0YWxvZyBtZXNzYWdlQ2F0YWxvZyA9IHsKKyAgLnZpZXcuZGF0YSA9IE5VTEwsCisgIC5kYXRhU2l6ZSA9IDAsCisgIC5nZXRJbnRlZ2VyID0gTlVMTCwKK307CisKK3N0YXRpYyB1aW50MzJfdAorZ2V0TmF0aXZlSW50ZWdlciAodWludDMyX3QgdmFsdWUpIHsKKyAgcmV0dXJuIHZhbHVlOworfQorCitzdGF0aWMgdWludDMyX3QKK2dldEZsaXBwZWRJbnRlZ2VyICh1aW50MzJfdCB2YWx1ZSkgeworICB1aW50MzJfdCByZXN1bHQgPSAwOworCisgIHdoaWxlICh2YWx1ZSkgeworICAgIHJlc3VsdCA8PD0gODsKKyAgICByZXN1bHQgfD0gdmFsdWUgJiBVSU5UOF9NQVg7CisgICAgdmFsdWUgPj49IDg7CisgIH0KKworICByZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgaW50CitjaGVja01hZ2ljTnVtYmVyIChNZXNzYWdlQ2F0YWxvZyAqY2F0YWxvZykgeworICBjb25zdCBNZXNzYWdlQ2F0YWxvZ0hlYWRlciAqaGVhZGVyID0gY2F0YWxvZy0+dmlldy5oZWFkZXI7CisKKyAgeworICAgIHN0YXRpYyBHZXRJbnRlZ2VyRnVuY3Rpb24gKmNvbnN0IGZ1bmN0aW9uc1tdID0geworICAgICAgZ2V0TmF0aXZlSW50ZWdlciwKKyAgICAgIGdldEZsaXBwZWRJbnRlZ2VyLAorICAgICAgTlVMTAorICAgIH07CisKKyAgICBHZXRJbnRlZ2VyRnVuY3Rpb24gKmNvbnN0ICpmdW5jdGlvbiA9IGZ1bmN0aW9uczsKKworICAgIHdoaWxlICgqZnVuY3Rpb24pIHsKKyAgICAgIGlmICgoKmZ1bmN0aW9uKShoZWFkZXItPm1hZ2ljTnVtYmVyKSA9PSBtYWdpY051bWJlcikgeworICAgICAgICBjYXRhbG9nLT5nZXRJbnRlZ2VyID0gKmZ1bmN0aW9uOworICAgICAgICByZXR1cm4gMTsKKyAgICAgIH0KKworICAgICAgZnVuY3Rpb24gKz0gMTsKKyAgICB9CisgIH0KKworICByZXR1cm4gMDsKK30KKworc3RhdGljIGNoYXIgKgorbWFrZUxvY2FsZURpcmVjdG9yeVBhdGggKHZvaWQpIHsKKyAgc2l6ZV90IGxlbmd0aCA9IHN0cmxlbihsb2NhbGVTcGVjaWZpZXIpOworCisgIGNoYXIgZGlhbGVjdFtsZW5ndGggKyAxXTsKKyAgc3RyY3B5KGRpYWxlY3QsIGxvY2FsZVNwZWNpZmllcik7CisgIGxlbmd0aCA9IHN0cmNzcG4oZGlhbGVjdCwgIi5AIik7CisgIGRpYWxlY3RbbGVuZ3RoXSA9IDA7CisKKyAgY2hhciBsYW5ndWFnZVtsZW5ndGggKyAxXTsKKyAgc3RyY3B5KGxhbmd1YWdlLCBkaWFsZWN0KTsKKyAgbGVuZ3RoID0gc3RyY3NwbihsYW5ndWFnZSwgIl8iKTsKKyAgbGFuZ3VhZ2VbbGVuZ3RoXSA9IDA7CisKKyAgY2hhciAqY29kZXNbXSA9IHtkaWFsZWN0LCBsYW5ndWFnZSwgTlVMTH07CisgIGNoYXIgKipjb2RlID0gY29kZXM7CisKKyAgd2hpbGUgKCpjb2RlICYmICoqY29kZSkgeworICAgIGNoYXIgKnBhdGggPSBtYWtlUGF0aChsb2NhbGVEaXJlY3RvcnksICpjb2RlKTsKKworICAgIGlmIChwYXRoKSB7CisgICAgICBpZiAodGVzdERpcmVjdG9yeVBhdGgocGF0aCkpIHJldHVybiBwYXRoOworICAgICAgZnJlZShwYXRoKTsKKyAgICB9CisKKyAgICBjb2RlICs9IDE7CisgIH0KKworICBsb2dNZXNzYWdlKExPR19ERUJVRywgIm1lc3NhZ2VzIGxvY2FsZSBub3QgZm91bmQ6ICVzIiwgbG9jYWxlU3BlY2lmaWVyKTsKKyAgcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBjaGFyICoKK21ha2VDYXRhbG9nRmlsZVBhdGggKHZvaWQpIHsKKyAgY2hhciAqbG9jYWxlID0gbWFrZUxvY2FsZURpcmVjdG9yeVBhdGgoKTsKKworICBpZiAobG9jYWxlKSB7CisgICAgY2hhciAqY2F0ZWdvcnkgPSBtYWtlUGF0aChsb2NhbGUsICJMQ19NRVNTQUdFUyIpOworCisgICAgZnJlZShsb2NhbGUpOworICAgIGxvY2FsZSA9IE5VTEw7CisKKyAgICBpZiAoY2F0ZWdvcnkpIHsKKyAgICAgIGNoYXIgKmNhdGFsb2cgPSBtYWtlRmlsZVBhdGgoY2F0ZWdvcnksIGRvbWFpbk5hbWUsICIubW8iKTsKKworICAgICAgZnJlZShjYXRlZ29yeSk7CisgICAgICBjYXRlZ29yeSA9IE5VTEw7CisKKyAgICAgIGlmIChjYXRhbG9nKSByZXR1cm4gY2F0YWxvZzsKKyAgICB9CisgIH0KKworICByZXR1cm4gTlVMTDsKK30KKworc3RhdGljIGludAorc2V0TWVzc2FnZUNhdGFsb2cgKHZvaWQgKmRhdGEsIHNpemVfdCBzaXplKSB7CisgIE1lc3NhZ2VDYXRhbG9nIGNhdGFsb2cgPSB7CisgICAgLnZpZXcuZGF0YSA9IGRhdGEsCisgICAgLmRhdGFTaXplID0gc2l6ZQorICB9OworCisgIGlmIChjaGVja01hZ2ljTnVtYmVyKCZjYXRhbG9nKSkgeworICAgIG1lc3NhZ2VDYXRhbG9nID0gY2F0YWxvZzsKKyAgICByZXR1cm4gMTsKKyAgfQorCisgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50CitzZXRFbXB0eU1lc3NhZ2VDYXRhbG9nICh2b2lkKSB7CisgIE1lc3NhZ2VDYXRhbG9nSGVhZGVyICpoZWFkZXI7CisgIHNpemVfdCBzaXplID0gc2l6ZW9mKCpoZWFkZXIpOworCisgIGlmICgoaGVhZGVyID0gbWFsbG9jKHNpemUpKSkgeworICAgIG1lbXNldChoZWFkZXIsIDAsIHNpemUpOworICAgIGhlYWRlci0+bWFnaWNOdW1iZXIgPSBtYWdpY051bWJlcjsKKworICAgIGhlYWRlci0+c291cmNlTWVzc2FnZXMgPSBzaXplOworICAgIGhlYWRlci0+dHJhbnNsYXRlZE1lc3NhZ2VzID0gaGVhZGVyLT5zb3VyY2VNZXNzYWdlczsKKworICAgIGlmIChzZXRNZXNzYWdlQ2F0YWxvZyhoZWFkZXIsIHNpemUpKSByZXR1cm4gMTsKKyAgICBmcmVlKGhlYWRlcik7CisgIH0gZWxzZSB7CisgICAgbG9nTWFsbG9jRXJyb3IoKTsKKyAgfQorCisgIHJldHVybiAwOworfQorCitpbnQKK2xvYWRNZXNzYWdlQ2F0YWxvZyAodm9pZCkgeworICBpZiAobWVzc2FnZUNhdGFsb2cudmlldy5kYXRhKSByZXR1cm4gMTsKKyAgZW5zdXJlQWxsTWVzc2FnZXNQcm9wZXJ0aWVzKCk7CisKKyAgaW50IGxvYWRlZCA9IDA7CisgIGNoYXIgKnBhdGggPSBtYWtlQ2F0YWxvZ0ZpbGVQYXRoKCk7CisKKyAgaWYgKHBhdGgpIHsKKyAgICBpbnQgZmQgPSBvcGVuKHBhdGgsIChPX1JET05MWSB8IE9fQklOQVJZKSk7CisKKyAgICBpZiAoZmQgIT0gLTEpIHsKKyAgICAgIHN0cnVjdCBzdGF0IGluZm87CisKKyAgICAgIGlmIChmc3RhdChmZCwgJmluZm8pICE9IC0xKSB7CisgICAgICAgIHNpemVfdCBzaXplID0gaW5mby5zdF9zaXplOworICAgICAgICB2b2lkICpkYXRhID0gTlVMTDsKKworICAgICAgICBpZiAoc2l6ZSkgeworICAgICAgICAgIGlmICgoZGF0YSA9IG1hbGxvYyhzaXplKSkpIHsKKyAgICAgICAgICAgIHNzaXplX3QgY291bnQgPSByZWFkKGZkLCBkYXRhLCBzaXplKTsKKworICAgICAgICAgICAgaWYgKGNvdW50ID09IC0xKSB7CisgICAgICAgICAgICAgIGxvZ01lc3NhZ2UoTE9HX1dBUk5JTkcsCisgICAgICAgICAgICAgICAgIm1lc3NhZ2UgY2F0YWxvZyByZWFkIGVycm9yOiAlczogJXMiLAorICAgICAgICAgICAgICAgIHBhdGgsIHN0cmVycm9yKGVycm5vKQorICAgICAgICAgICAgICApOworICAgICAgICAgICAgfSBlbHNlIGlmIChjb3VudCA8IHNpemUpIHsKKyAgICAgICAgICAgICAgbG9nTWVzc2FnZShMT0dfV0FSTklORywKKyAgICAgICAgICAgICAgICAidHJ1bmNhdGVkIG1lc3NhZ2UgY2F0YWxvZzogJSJQUklzc2l6ZSIgPCAlIlBSSXNpemUiOiAlcyIsCisgICAgICAgICAgICAgICAgY291bnQsIHNpemUsIHBhdGgKKyAgICAgICAgICAgICAgKTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoc2V0TWVzc2FnZUNhdGFsb2coZGF0YSwgc2l6ZSkpIHsKKyAgICAgICAgICAgICAgZGF0YSA9IE5VTEw7CisgICAgICAgICAgICAgIGxvYWRlZCA9IDE7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICghbG9hZGVkKSBmcmVlKGRhdGEpOworICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBsb2dNYWxsb2NFcnJvcigpOworICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICBsb2dNZXNzYWdlKExPR19XQVJOSU5HLCAiZW1wdHkgbWVzc2FnZSBjYXRhbG9nIik7CisgICAgICAgIH0KKyAgICAgIH0gZWxzZSB7CisgICAgICAgIGxvZ01lc3NhZ2UoTE9HX1dBUk5JTkcsCisgICAgICAgICAgIm1lc3NhZ2UgY2F0YWxvZyBzdGF0IGVycm9yOiAlczogJXMiLAorICAgICAgICAgIHBhdGgsIHN0cmVycm9yKGVycm5vKQorICAgICAgICApOworICAgICAgfQorCisgICAgICBjbG9zZShmZCk7CisgICAgfSBlbHNlIHsKKyAgICAgIGxvZ01lc3NhZ2UoTE9HX1dBUk5JTkcsCisgICAgICAgICJtZXNzYWdlIGNhdGFsb2cgb3BlbiBlcnJvcjogJXM6ICVzIiwKKyAgICAgICAgcGF0aCwgc3RyZXJyb3IoZXJybm8pCisgICAgICApOworICAgIH0KKworICAgIGZyZWUocGF0aCk7CisgIH0KKworICBpZiAoIWxvYWRlZCkgeworICAgIGlmIChzZXRFbXB0eU1lc3NhZ2VDYXRhbG9nKCkpIHsKKyAgICAgIGxvYWRlZCA9IDE7CisgICAgICBsb2dNZXNzYWdlKExPR19ERUJVRywgIm5vIG1lc3NhZ2UgdHJhbnNsYXRpb25zIik7CisgICAgfQorICB9CisKKyAgcmV0dXJuIGxvYWRlZDsKK30KKwordm9pZAorcmVsZWFzZU1lc3NhZ2VDYXRhbG9nICh2b2lkKSB7CisgIGlmIChtZXNzYWdlQ2F0YWxvZy52aWV3LmRhdGEpIGZyZWUobWVzc2FnZUNhdGFsb2cudmlldy5kYXRhKTsKKyAgbWVtc2V0KCZtZXNzYWdlQ2F0YWxvZywgMCwgc2l6ZW9mKG1lc3NhZ2VDYXRhbG9nKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgY29uc3QgTWVzc2FnZUNhdGFsb2dIZWFkZXIgKgorZ2V0SGVhZGVyICh2b2lkKSB7CisgIHJldHVybiBtZXNzYWdlQ2F0YWxvZy52aWV3LmhlYWRlcjsKK30KKworc3RhdGljIGlubGluZSBjb25zdCB2b2lkICoKK2dldEl0ZW0gKHVpbnQzMl90IG9mZnNldCkgeworICByZXR1cm4gJm1lc3NhZ2VDYXRhbG9nLnZpZXcuYnl0ZXNbbWVzc2FnZUNhdGFsb2cuZ2V0SW50ZWdlcihvZmZzZXQpXTsKK30KKwordWludDMyX3QKK2dldE1lc3NhZ2VDb3VudCAodm9pZCkgeworICByZXR1cm4gbWVzc2FnZUNhdGFsb2cuZ2V0SW50ZWdlcihnZXRIZWFkZXIoKS0+bWVzc2FnZUNvdW50KTsKK30KKworc3RydWN0IE1lc3NhZ2VTdHJ1Y3QgeworICB1aW50MzJfdCBsZW5ndGg7CisgIHVpbnQzMl90IG9mZnNldDsKK307CisKK3VpbnQzMl90CitnZXRNZXNzYWdlTGVuZ3RoIChjb25zdCBNZXNzYWdlICptZXNzYWdlKSB7CisgIHJldHVybiBtZXNzYWdlQ2F0YWxvZy5nZXRJbnRlZ2VyKG1lc3NhZ2UtPmxlbmd0aCk7Cit9CisKK2NvbnN0IGNoYXIgKgorZ2V0TWVzc2FnZVRleHQgKGNvbnN0IE1lc3NhZ2UgKm1lc3NhZ2UpIHsKKyAgcmV0dXJuIGdldEl0ZW0obWVzc2FnZS0+b2Zmc2V0KTsKK30KKworc3RhdGljIGlubGluZSBjb25zdCBNZXNzYWdlICoKK2dldFNvdXJjZU1lc3NhZ2VzICh2b2lkKSB7CisgIHJldHVybiBnZXRJdGVtKGdldEhlYWRlcigpLT5zb3VyY2VNZXNzYWdlcyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgY29uc3QgTWVzc2FnZSAqCitnZXRUcmFuc2xhdGVkTWVzc2FnZXMgKHZvaWQpIHsKKyAgcmV0dXJuIGdldEl0ZW0oZ2V0SGVhZGVyKCktPnRyYW5zbGF0ZWRNZXNzYWdlcyk7Cit9CisKK2NvbnN0IE1lc3NhZ2UgKgorZ2V0U291cmNlTWVzc2FnZSAodW5zaWduZWQgaW50IGluZGV4KSB7CisgIHJldHVybiAmZ2V0U291cmNlTWVzc2FnZXMoKVtpbmRleF07Cit9CisKK2NvbnN0IE1lc3NhZ2UgKgorZ2V0VHJhbnNsYXRlZE1lc3NhZ2UgKHVuc2lnbmVkIGludCBpbmRleCkgeworICByZXR1cm4gJmdldFRyYW5zbGF0ZWRNZXNzYWdlcygpW2luZGV4XTsKK30KKworY29uc3QgY2hhciAqCitnZXRNZXNzYWdlc01ldGFkYXRhICh2b2lkKSB7CisgIGlmIChnZXRNZXNzYWdlQ291bnQoKSA9PSAwKSByZXR1cm4gIiI7CisKKyAgeworICAgIGNvbnN0IE1lc3NhZ2UgKm1lc3NhZ2UgPSBnZXRTb3VyY2VNZXNzYWdlKDApOworICAgIGlmIChnZXRNZXNzYWdlTGVuZ3RoKG1lc3NhZ2UpICE9IDApIHJldHVybiAiIjsKKyAgfQorCisgIHJldHVybiBnZXRNZXNzYWdlVGV4dChnZXRUcmFuc2xhdGVkTWVzc2FnZSgwKSk7Cit9CisKK2NoYXIgKgorZ2V0TWVzc2FnZXNQcm9wZXJ0eSAoY29uc3QgY2hhciAqbmFtZSkgeworICBzaXplX3QgbmFtZUxlbmd0aCA9IHN0cmxlbihuYW1lKTsKKyAgY29uc3QgY2hhciAqbWV0YWRhdGEgPSBnZXRNZXNzYWdlc01ldGFkYXRhKCk7CisKKyAgd2hpbGUgKG1ldGFkYXRhKSB7CisgICAgY29uc3QgY2hhciAqbGluZSA9IG1ldGFkYXRhOworICAgIHNpemVfdCBsaW5lTGVuZ3RoID0gc3RyY3NwbihsaW5lLCAiXG5ceDAwIik7CisKKyAgICBjb25zdCBjaGFyICplbmQgPSBsaW5lICsgbGluZUxlbmd0aDsKKyAgICBtZXRhZGF0YSA9ICplbmQ/IChsaW5lICsgbGluZUxlbmd0aCArIDEpOiBOVUxMOworCisgICAgaWYgKG5hbWVMZW5ndGggPCBsaW5lTGVuZ3RoKSB7CisgICAgICBpZiAobWVtY21wKGxpbmUsIG5hbWUsIG5hbWVMZW5ndGgpID09IDApIHsKKyAgICAgICAgaWYgKGxpbmVbbmFtZUxlbmd0aF0gPT0gJzonKSB7CisgICAgICAgICAgY29uc3QgY2hhciAqdmFsdWUgPSBsaW5lICsgbmFtZUxlbmd0aCArIDE7CisgICAgICAgICAgd2hpbGUgKGlzd3NwYWNlKCp2YWx1ZSkpIHZhbHVlICs9IDE7CisKKyAgICAgICAgICBzaXplX3QgdmFsdWVMZW5ndGggPSBlbmQgLSB2YWx1ZTsKKyAgICAgICAgICBjaGFyICpjb3B5ID0gbWFsbG9jKHZhbHVlTGVuZ3RoICsgMSk7CisKKyAgICAgICAgICBpZiAoY29weSkgeworICAgICAgICAgICAgbWVtY3B5KGNvcHksIHZhbHVlLCB2YWx1ZUxlbmd0aCk7CisgICAgICAgICAgICBjb3B5W3ZhbHVlTGVuZ3RoXSA9IDA7CisgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGxvZ01hbGxvY0Vycm9yKCk7CisgICAgICAgICAgfQorCisgICAgICAgICAgcmV0dXJuIGNvcHk7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9CisgIH0KKworICByZXR1cm4gTlVMTDsKK30KKworY2hhciAqCitnZXRNZXNzYWdlc0F0dHJpYnV0ZSAoY29uc3QgY2hhciAqcHJvcGVydHksIGNvbnN0IGNoYXIgKm5hbWUpIHsKKyAgc2l6ZV90IG5hbWVMZW5ndGggPSBzdHJsZW4obmFtZSk7CisgIGNvbnN0IGNoYXIgKmJ5dGUgPSBwcm9wZXJ0eTsKKworICB3aGlsZSAoKmJ5dGUpIHsKKyAgICB3aGlsZSAoaXN3c3BhY2UoKmJ5dGUpKSBieXRlICs9IDE7CisgICAgY29uc3QgY2hhciAqbmFtZVN0YXJ0ID0gYnl0ZTsKKworICAgIHdoaWxlIChpc3dhbHBoYSgqYnl0ZSkpIGJ5dGUgKz0gMTsKKyAgICBjb25zdCBjaGFyICpuYW1lRW5kID0gYnl0ZTsKKworICAgIHdoaWxlIChpc3dzcGFjZSgqYnl0ZSkpIGJ5dGUgKz0gMTsKKyAgICBpZiAoISpieXRlKSBicmVhazsKKworICAgIGlmICgqYnl0ZSAhPSAnPScpIGNvbnRpbnVlOworICAgIGJ5dGUgKz0gMTsKKworICAgIHdoaWxlIChpc3dzcGFjZSgqYnl0ZSkpIGJ5dGUgKz0gMTsKKyAgICBjb25zdCBjaGFyICp2YWx1ZVN0YXJ0ID0gYnl0ZTsKKworICAgIHdoaWxlICgqYnl0ZSAmJiAoKmJ5dGUgIT0gJzsnKSkgYnl0ZSArPSAxOworICAgIGNvbnN0IGNoYXIgKnZhbHVlRW5kID0gYnl0ZTsKKyAgICBpZiAoKmJ5dGUpIGJ5dGUgKz0gMTsKKworICAgIGlmICgobmFtZUVuZCAtIG5hbWVTdGFydCkgPT0gbmFtZUxlbmd0aCkgeworICAgICAgaWYgKG1lbWNtcChuYW1lLCBuYW1lU3RhcnQsIG5hbWVMZW5ndGgpID09IDApIHsKKyAgICAgICAgc2l6ZV90IGxlbmd0aCA9IHZhbHVlRW5kIC0gdmFsdWVTdGFydDsKKyAgICAgICAgY2hhciAqdmFsdWUgPSBtYWxsb2MobGVuZ3RoICsgMSk7CisKKyAgICAgICAgaWYgKHZhbHVlKSB7CisgICAgICAgICAgbWVtY3B5KHZhbHVlLCB2YWx1ZVN0YXJ0LCBsZW5ndGgpOworICAgICAgICAgIHZhbHVlW2xlbmd0aF0gPSAwOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgIGxvZ01hbGxvY0Vycm9yKCk7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gdmFsdWU7CisgICAgICB9CisgICAgfQorICB9CisKKyAgcmV0dXJuIE5VTEw7Cit9CisKK2ludAorZmluZFNvdXJjZU1lc3NhZ2UgKGNvbnN0IGNoYXIgKnRleHQsIHNpemVfdCB0ZXh0TGVuZ3RoLCB1bnNpZ25lZCBpbnQgKmluZGV4KSB7CisgIGNvbnN0IE1lc3NhZ2UgKm1lc3NhZ2VzID0gZ2V0U291cmNlTWVzc2FnZXMoKTsKKyAgaW50IGZyb20gPSAwOworICBpbnQgdG8gPSBnZXRNZXNzYWdlQ291bnQoKTsKKworICB3aGlsZSAoZnJvbSA8IHRvKSB7CisgICAgaW50IGN1cnJlbnQgPSAoZnJvbSArIHRvKSAvIDI7CisgICAgY29uc3QgTWVzc2FnZSAqbWVzc2FnZSA9ICZtZXNzYWdlc1tjdXJyZW50XTsKKworICAgIHVpbnQzMl90IG1lc3NhZ2VMZW5ndGggPSBnZXRNZXNzYWdlTGVuZ3RoKG1lc3NhZ2UpOworICAgIGludCByZWxhdGlvbiA9IG1lbWNtcCh0ZXh0LCBnZXRNZXNzYWdlVGV4dChtZXNzYWdlKSwgTUlOKHRleHRMZW5ndGgsIG1lc3NhZ2VMZW5ndGgpKTsKKworICAgIGlmIChyZWxhdGlvbiA9PSAwKSB7CisgICAgICBpZiAodGV4dExlbmd0aCA9PSBtZXNzYWdlTGVuZ3RoKSB7CisgICAgICAgICppbmRleCA9IGN1cnJlbnQ7CisgICAgICAgIHJldHVybiAxOworICAgICAgfQorCisgICAgICByZWxhdGlvbiA9ICh0ZXh0TGVuZ3RoIDwgbWVzc2FnZUxlbmd0aCk/IC0xOiAxOworICAgIH0KKworICAgIGlmIChyZWxhdGlvbiA8IDApIHsKKyAgICAgIHRvID0gY3VycmVudDsKKyAgICB9IGVsc2UgeworICAgICAgZnJvbSA9IGN1cnJlbnQgKyAxOworICAgIH0KKyAgfQorCisgIHJldHVybiAwOworfQorCitjb25zdCBNZXNzYWdlICoKK2ZpbmRTaW1wbGVUcmFuc2xhdGlvbiAoY29uc3QgY2hhciAqdGV4dCwgc2l6ZV90IGxlbmd0aCkgeworICBpZiAoIXRleHQpIHJldHVybiBOVUxMOworICBpZiAoIWxlbmd0aCkgcmV0dXJuIE5VTEw7CisKKyAgaWYgKGxvYWRNZXNzYWdlQ2F0YWxvZygpKSB7CisgICAgdW5zaWduZWQgaW50IGluZGV4OworCisgICAgaWYgKGZpbmRTb3VyY2VNZXNzYWdlKHRleHQsIGxlbmd0aCwgJmluZGV4KSkgeworICAgICAgcmV0dXJuIGdldFRyYW5zbGF0ZWRNZXNzYWdlKGluZGV4KTsKKyAgICB9CisgIH0KKworICByZXR1cm4gTlVMTDsKK30KKworY29uc3QgY2hhciAqCitnZXRTaW1wbGVUcmFuc2xhdGlvbiAoY29uc3QgY2hhciAqdGV4dCkgeworICBjb25zdCBNZXNzYWdlICp0cmFuc2xhdGlvbiA9IGZpbmRTaW1wbGVUcmFuc2xhdGlvbih0ZXh0LCBzdHJsZW4odGV4dCkpOworICBpZiAodHJhbnNsYXRpb24pIHJldHVybiBnZXRNZXNzYWdlVGV4dCh0cmFuc2xhdGlvbik7CisgIHJldHVybiB0ZXh0OworfQorCitjb25zdCBNZXNzYWdlICoKK2ZpbmRQbHVyYWxUcmFuc2xhdGlvbiAoY29uc3QgY2hhciAqY29uc3QgKnN0cmluZ3MpIHsKKyAgdW5zaWduZWQgaW50IGNvdW50ID0gMDsKKyAgd2hpbGUgKHN0cmluZ3NbY291bnRdKSBjb3VudCArPSAxOworICBpZiAoIWNvdW50KSByZXR1cm4gTlVMTDsKKworICBzaXplX3Qgc2l6ZSA9IDA7CisgIHNpemVfdCBsZW5ndGhzW2NvdW50XTsKKworICBmb3IgKHVuc2lnbmVkIGludCBpbmRleD0wOyBpbmRleDxjb3VudDsgaW5kZXgrPTEpIHsKKyAgICBzaXplX3QgbGVuZ3RoID0gc3RybGVuKHN0cmluZ3NbaW5kZXhdKTsKKyAgICBsZW5ndGhzW2luZGV4XSA9IGxlbmd0aDsKKyAgICBzaXplICs9IGxlbmd0aCArIDE7CisgIH0KKworICBjaGFyIHRleHRbc2l6ZV07CisgIGNoYXIgKmJ5dGUgPSB0ZXh0OworCisgIGZvciAodW5zaWduZWQgaW50IGluZGV4PTA7IGluZGV4PGNvdW50OyBpbmRleCs9MSkgeworICAgIGJ5dGUgPSBtZW1wY3B5KGJ5dGUsIHN0cmluZ3NbaW5kZXhdLCAobGVuZ3Roc1tpbmRleF0gKyAxKSk7CisgIH0KKworICBieXRlIC09IDE7IC8vIHRoZSBsZW5ndGggbXVzdG4ndCBpbmNsdWRlIHRoZSBmaW5hbCBOVUwKKyAgcmV0dXJuIGZpbmRTaW1wbGVUcmFuc2xhdGlvbih0ZXh0LCAoYnl0ZSAtIHRleHQpKTsKK30KKworY29uc3QgY2hhciAqCitnZXRQbHVyYWxUcmFuc2xhdGlvbiAoY29uc3QgY2hhciAqc2luZ3VsYXIsIGNvbnN0IGNoYXIgKnBsdXJhbCwgdW5zaWduZWQgbG9uZyBpbnQgY291bnQpIHsKKyAgaW50IHVzZVNpbmd1bGFyID0gY291bnQgPT0gMTsKKworICBjb25zdCBjaGFyICpjb25zdCBzdHJpbmdzW10gPSB7c2luZ3VsYXIsIHBsdXJhbCwgTlVMTH07CisgIGNvbnN0IE1lc3NhZ2UgKm1lc3NhZ2UgPSBmaW5kUGx1cmFsVHJhbnNsYXRpb24oc3RyaW5ncyk7CisgIGlmICghbWVzc2FnZSkgcmV0dXJuIHVzZVNpbmd1bGFyPyBzaW5ndWxhcjogcGx1cmFsOworCisgIGNvbnN0IGNoYXIgKnRyYW5zbGF0aW9uID0gZ2V0TWVzc2FnZVRleHQobWVzc2FnZSk7CisgIGlmICghdXNlU2luZ3VsYXIpIHRyYW5zbGF0aW9uICs9IHN0cmxlbih0cmFuc2xhdGlvbikgKyAxOworICByZXR1cm4gdHJhbnNsYXRpb247Cit9CisKKyNpZmRlZiBFTkFCTEVfSTE4Tl9TVVBQT1JUCitzdGF0aWMgaW50CitzZXREaXJlY3RvcnkgKGNvbnN0IGNoYXIgKmRpcmVjdG9yeSkgeworICBpZiAoYmluZHRleHRkb21haW4oZG9tYWluTmFtZSwgZGlyZWN0b3J5KSkgcmV0dXJuIDE7CisgIGxvZ1N5c3RlbUVycm9yKCJiaW5kdGV4dGRvbWFpbiIpOworICByZXR1cm4gMDsKK30KKworc3RhdGljIGludAorc2V0RG9tYWluIChjb25zdCBjaGFyICpkb21haW4pIHsKKyAgaWYgKCF0ZXh0ZG9tYWluKGRvbWFpbikpIHsKKyAgICBsb2dTeXN0ZW1FcnJvcigidGV4dGRvbWFpbiIpOworICAgIHJldHVybiAwOworICB9CisKKyAgaWYgKCFiaW5kX3RleHRkb21haW5fY29kZXNldChkb21haW4sICJVVEYtOCIpKSB7CisgICAgbG9nU3lzdGVtRXJyb3IoImJpbmRfdGV4dGRvbWFpbl9jb2Rlc2V0Iik7CisgIH0KKworICByZXR1cm4gMTsKK30KKyNlbHNlIC8qIEVOQUJMRV9JMThOX1NVUFBPUlQgKi8KK3N0YXRpYyBpbnQKK3NldERpcmVjdG9yeSAoY29uc3QgY2hhciAqZGlyZWN0b3J5KSB7CisgIHJldHVybiAxOworfQorCitzdGF0aWMgaW50CitzZXREb21haW4gKGNvbnN0IGNoYXIgKmRvbWFpbikgeworICByZXR1cm4gMTsKK30KKworY2hhciAqCitnZXR0ZXh0IChjb25zdCBjaGFyICp0ZXh0KSB7CisgIHJldHVybiAoY2hhciAqKWdldFNpbXBsZVRyYW5zbGF0aW9uKHRleHQpOworfQorCitjaGFyICoKK25nZXR0ZXh0IChjb25zdCBjaGFyICpzaW5ndWxhciwgY29uc3QgY2hhciAqcGx1cmFsLCB1bnNpZ25lZCBsb25nIGludCBjb3VudCkgeworICByZXR1cm4gKGNoYXIgKilnZXRQbHVyYWxUcmFuc2xhdGlvbihzaW5ndWxhciwgcGx1cmFsLCBjb3VudCk7Cit9CisjZW5kaWYgLyogRU5BQkxFX0kxOE5fU1VQUE9SVCAqLworCitzdGF0aWMgaW50Cit1cGRhdGVQcm9wZXJ0eSAoCisgIGNoYXIgKipwcm9wZXJ0eSwgY29uc3QgY2hhciAqdmFsdWUsIGNvbnN0IGNoYXIgKmRlZmF1bHRWYWx1ZSwKKyAgaW50ICgqc2V0dGVyKSAoY29uc3QgY2hhciAqdmFsdWUpCispIHsKKyAgcmVsZWFzZU1lc3NhZ2VDYXRhbG9nKCk7CisKKyAgaWYgKCEodmFsdWUgJiYgKnZhbHVlKSkgdmFsdWUgPSBkZWZhdWx0VmFsdWU7CisgIGNoYXIgKmNvcHkgPSBzdHJkdXAodmFsdWUpOworCisgIGlmIChjb3B5KSB7CisgICAgaWYgKCFzZXR0ZXIgfHwgc2V0dGVyKHZhbHVlKSkgeworICAgICAgaWYgKCpwcm9wZXJ0eSkgZnJlZSgqcHJvcGVydHkpOworICAgICAgKnByb3BlcnR5ID0gY29weTsKKyAgICAgIHJldHVybiAxOworICAgIH0KKworICAgIGZyZWUoY29weSk7CisgIH0gZWxzZSB7CisgICAgbG9nTWFsbG9jRXJyb3IoKTsKKyAgfQorCisgIHJldHVybiAwOworfQorCitpbnQKK3NldE1lc3NhZ2VzRGlyZWN0b3J5IChjb25zdCBjaGFyICpkaXJlY3RvcnkpIHsKKyAgcmV0dXJuIHVwZGF0ZVByb3BlcnR5KCZsb2NhbGVEaXJlY3RvcnksIGRpcmVjdG9yeSwgTE9DQUxFX0RJUkVDVE9SWSwgc2V0RGlyZWN0b3J5KTsKK30KKworaW50CitzZXRNZXNzYWdlc0xvY2FsZSAoY29uc3QgY2hhciAqc3BlY2lmaWVyKSB7CisgIHJldHVybiB1cGRhdGVQcm9wZXJ0eSgmbG9jYWxlU3BlY2lmaWVyLCBzcGVjaWZpZXIsICJDLlVURi04IiwgTlVMTCk7Cit9CisKK2ludAorc2V0TWVzc2FnZXNEb21haW4gKGNvbnN0IGNoYXIgKm5hbWUpIHsKKyAgcmV0dXJuIHVwZGF0ZVByb3BlcnR5KCZkb21haW5OYW1lLCBuYW1lLCBQQUNLQUdFX1RBUk5BTUUsIHNldERvbWFpbik7Cit9CisKK3ZvaWQKK2Vuc3VyZUFsbE1lc3NhZ2VzUHJvcGVydGllcyAodm9pZCkgeworICBpZiAoIWxvY2FsZVNwZWNpZmllcikgeworICAgIHNldE1lc3NhZ2VzTG9jYWxlKHNldGxvY2FsZShMQ19NRVNTQUdFUywgIiIpKTsKKyAgfQorCisgIGlmICghZG9tYWluTmFtZSkgc2V0TWVzc2FnZXNEb21haW4oTlVMTCk7CisgIGlmICghbG9jYWxlRGlyZWN0b3J5KSBzZXRNZXNzYWdlc0RpcmVjdG9yeShOVUxMKTsKK30KZGlmZiAtLWdpdCBhL1Byb2dyYW1zL21pZGkuYyBiL1Byb2dyYW1zL21pZGkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMjZiMmUyCi0tLSAvZGV2L251bGwKKysrIGIvUHJvZ3JhbXMvbWlkaS5jCkBAIC0wLDAgKzEsNDg0IEBACisvKgorICogQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyAqICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyAqCisgKiBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorICoKKyAqIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyAqCisgKiBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisgKi8KKworI2luY2x1ZGUgInByb2xvZ3VlLmgiCisKKyNpbmNsdWRlICJtaWRpLmgiCisKK3N0YXRpYyBjb25zdCBjaGFyICpjb25zdCBtaWRpSW5zdHJ1bWVudEdyb3Vwc1tdID0geworICAvLyB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgbmFtZSBvZiBNSURJIG11c2ljYWwgaW5zdHJ1bWVudCBncm91cCAjMS4KKyAgWzBYMF0gPSBzdHJ0ZXh0KCJQaWFubyIpLAorCisgIC8vIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBuYW1lIG9mIE1JREkgbXVzaWNhbCBpbnN0cnVtZW50IGdyb3VwICMyLgorICBbMFgxXSA9IHN0cnRleHQoIkNocm9tYXRpYyBQZXJjdXNzaW9uIiksCisKKyAgLy8geGdldHRleHQ6IFRoaXMgaXMgdGhlIG5hbWUgb2YgTUlESSBtdXNpY2FsIGluc3RydW1lbnQgZ3JvdXAgIzMuCisgIFswWDJdID0gc3RydGV4dCgiT3JnYW4iKSwKKworICAvLyB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgbmFtZSBvZiBNSURJIG11c2ljYWwgaW5zdHJ1bWVudCBncm91cCAjNC4KKyAgWzBYM10gPSBzdHJ0ZXh0KCJHdWl0YXIiKSwKKworICAvLyB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgbmFtZSBvZiBNSURJIG11c2ljYWwgaW5zdHJ1bWVudCBncm91cCAjNS4KKyAgWzBYNF0gPSBzdHJ0ZXh0KCJCYXNzIiksCisKKyAgLy8geGdldHRleHQ6IFRoaXMgaXMgdGhlIG5hbWUgb2YgTUlESSBtdXNpY2FsIGluc3RydW1lbnQgZ3JvdXAgIzYuCisgIFswWDVdID0gc3RydGV4dCgiU3RyaW5ncyIpLAorCisgIC8vIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBuYW1lIG9mIE1JREkgbXVzaWNhbCBpbnN0cnVtZW50IGdyb3VwICM3LgorICBbMFg2XSA9IHN0cnRleHQoIkVuc2VtYmxlIiksCisKKyAgLy8geGdldHRleHQ6IFRoaXMgaXMgdGhlIG5hbWUgb2YgTUlESSBtdXNpY2FsIGluc3RydW1lbnQgZ3JvdXAgIzguCisgIFswWDddID0gc3RydGV4dCgiQnJhc3MiKSwKKworICAvLyB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgbmFtZSBvZiBNSURJIG11c2ljYWwgaW5zdHJ1bWVudCBncm91cCAjOS4KKyAgWzBYOF0gPSBzdHJ0ZXh0KCJSZWVkIiksCisKKyAgLy8geGdldHRleHQ6IFRoaXMgaXMgdGhlIG5hbWUgb2YgTUlESSBtdXNpY2FsIGluc3RydW1lbnQgZ3JvdXAgIzEwLgorICBbMFg5XSA9IHN0cnRleHQoIlBpcGUiKSwKKworICAvLyB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgbmFtZSBvZiBNSURJIG11c2ljYWwgaW5zdHJ1bWVudCBncm91cCAjMTEuCisgIC8vIHhnZXR0ZXh0OiAoc3ludGggaXMgYSBjb21tb24gc2hvcnQgZm9ybSBmb3Igc3ludGhlc2l6ZXIpCisgIFswWEFdID0gc3RydGV4dCgiU3ludGggTGVhZCIpLAorCisgIC8vIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBuYW1lIG9mIE1JREkgbXVzaWNhbCBpbnN0cnVtZW50IGdyb3VwICMxMi4KKyAgLy8geGdldHRleHQ6IChzeW50aCBpcyBhIGNvbW1vbiBzaG9ydCBmb3JtIGZvciBzeW50aGVzaXplcikKKyAgWzBYQl0gPSBzdHJ0ZXh0KCJTeW50aCBQYWQiKSwKKworICAvLyB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgbmFtZSBvZiBNSURJIG11c2ljYWwgaW5zdHJ1bWVudCBncm91cCAjMTMuCisgIC8vIHhnZXR0ZXh0OiAoc3ludGggaXMgYSBjb21tb24gc2hvcnQgZm9ybSBmb3Igc3ludGhlc2l6ZXIpCisgIC8vIHhnZXR0ZXh0OiAoRk0gaXMgdGhlIGFjcm9ueW0gZm9yIEZyZXF1ZW5jeSBNb2R1bGF0aW9uKQorICBbMFhDXSA9IHN0cnRleHQoIlN5bnRoIEZNIiksCisKKyAgLy8geGdldHRleHQ6IFRoaXMgaXMgdGhlIG5hbWUgb2YgTUlESSBtdXNpY2FsIGluc3RydW1lbnQgZ3JvdXAgIzE0LgorICBbMFhEXSA9IHN0cnRleHQoIkV0aG5pYyBJbnN0cnVtZW50cyIpLAorCisgIC8vIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBuYW1lIG9mIE1JREkgbXVzaWNhbCBpbnN0cnVtZW50IGdyb3VwICMxNS4KKyAgWzBYRV0gPSBzdHJ0ZXh0KCJQZXJjdXNzaXZlIEluc3RydW1lbnRzIiksCisKKyAgLy8geGdldHRleHQ6IFRoaXMgaXMgdGhlIG5hbWUgb2YgTUlESSBtdXNpY2FsIGluc3RydW1lbnQgZ3JvdXAgIzE2LgorICBbMFhGXSA9IHN0cnRleHQoIlNvdW5kIEVmZmVjdHMiKQorfTsKKworY29uc3QgY2hhciAqY29uc3QgbWlkaUluc3RydW1lbnRUYWJsZVtdID0geworLyogUGlhbm8gKi8KKyAgLy8geGdldHRleHQ6IFRoaXMgaXMgdGhlIG5hbWUgb2YgTUlESSBtdXNpY2FsIGluc3RydW1lbnQgIzEgKGluIHRoZSBQaWFubyBncm91cCkuCisgIFswWDAwXSA9IHN0cnRleHQoIkFjb3VzdGljIEdyYW5kIFBpYW5vIiksCisKKyAgLy8geGdldHRleHQ6IFRoaXMgaXMgdGhlIG5hbWUgb2YgTUlESSBtdXNpY2FsIGluc3RydW1lbnQgIzIgKGluIHRoZSBQaWFubyBncm91cCkuCisgIFswWDAxXSA9IHN0cnRleHQoIkJyaWdodCBBY291c3RpYyBQaWFubyIpLAorCisgIC8vIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBuYW1lIG9mIE1JREkgbXVzaWNhbCBpbnN0cnVtZW50ICMzIChpbiB0aGUgUGlhbm8gZ3JvdXApLgorICBbMFgwMl0gPSBzdHJ0ZXh0KCJFbGVjdHJpYyBHcmFuZCBQaWFubyIpLAorCisgIC8vIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBuYW1lIG9mIE1JREkgbXVzaWNhbCBpbnN0cnVtZW50ICM0IChpbiB0aGUgUGlhbm8gZ3JvdXApLgorICBbMFgwM10gPSBzdHJ0ZXh0KCJIb25reXRvbmsgUGlhbm8iKSwKKworICAvLyB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgbmFtZSBvZiBNSURJIG11c2ljYWwgaW5zdHJ1bWVudCAjNSAoaW4gdGhlIFBpYW5vIGdyb3VwKS4KKyAgWzBYMDRdID0gc3RydGV4dCgiRWxlY3RyaWMgUGlhbm8gMSIpLAorCisgIC8vIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBuYW1lIG9mIE1JREkgbXVzaWNhbCBpbnN0cnVtZW50ICM2IChpbiB0aGUgUGlhbm8gZ3JvdXApLgorICBbMFgwNV0gPSBzdHJ0ZXh0KCJFbGVjdHJpYyBQaWFubyAyIiksCisKKyAgLy8geGdldHRleHQ6IFRoaXMgaXMgdGhlIG5hbWUgb2YgTUlESSBtdXNpY2FsIGluc3RydW1lbnQgIzcgKGluIHRoZSBQaWFubyBncm91cCkuCisgIFswWDA2XSA9IHN0cnRleHQoIkhhcnBzaWNob3JkIiksCisKKyAgLy8geGdldHRleHQ6IFRoaXMgaXMgdGhlIG5hbWUgb2YgTUlESSBtdXNpY2FsIGluc3RydW1lbnQgIzggKGluIHRoZSBQaWFubyBncm91cCkuCisgIFswWDA3XSA9IHN0cnRleHQoIkNsYXZpbmV0IiksCisKKy8qIENocm9tYXRpYyBQZXJjdXNzaW9uICovCisgIC8vIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBuYW1lIG9mIE1JREkgbXVzaWNhbCBpbnN0cnVtZW50ICM5IChpbiB0aGUgQ2hyb21hdGljIFBlcmN1c3Npb24gZ3JvdXApLgorICBbMFgwOF0gPSBzdHJ0ZXh0KCJDZWxlc3RhIiksCisKKyAgLy8geGdldHRleHQ6IFRoaXMgaXMgdGhlIG5hbWUgb2YgTUlESSBtdXNpY2FsIGluc3RydW1lbnQgIzEwIChpbiB0aGUgQ2hyb21hdGljIFBlcmN1c3Npb24gZ3JvdXApLgorICBbMFgwOV0gPSBzdHJ0ZXh0KCJHbG9ja2Vuc3BpZWwiKSwKKworICAvLyB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgbmFtZSBvZiBNSURJIG11c2ljYWwgaW5zdHJ1bWVudCAjMTEgKGluIHRoZSBDaHJvbWF0aWMgUGVyY3Vzc2lvbiBncm91cCkuCisgIFswWDBBXSA9IHN0cnRleHQoIk11c2ljIEJveCIpLAorCisgIC8vIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBuYW1lIG9mIE1JREkgbXVzaWNhbCBpbnN0cnVtZW50ICMxMiAoaW4gdGhlIENocm9tYXRpYyBQZXJjdXNzaW9uIGdyb3VwKS4KKyAgWzBYMEJdID0gc3RydGV4dCgiVmlicmFwaG9uZSIpLAorCisgIC8vIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBuYW1lIG9mIE1JREkgbXVzaWNhbCBpbnN0cnVtZW50ICMxMyAoaW4gdGhlIENocm9tYXRpYyBQZXJjdXNzaW9uIGdyb3VwKS4KKyAgWzBYMENdID0gc3RydGV4dCgiTWFyaW1iYSIpLAorCisgIC8vIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBuYW1lIG9mIE1JREkgbXVzaWNhbCBpbnN0cnVtZW50ICMxNCAoaW4gdGhlIENocm9tYXRpYyBQZXJjdXNzaW9uIGdyb3VwKS4KKyAgWzBYMERdID0gc3RydGV4dCgiWHlsb3Bob25lIiksCisKKyAgLy8geGdldHRleHQ6IFRoaXMgaXMgdGhlIG5hbWUgb2YgTUlESSBtdXNpY2FsIGluc3RydW1lbnQgIzE1IChpbiB0aGUgQ2hyb21hdGljIFBlcmN1c3Npb24gZ3JvdXApLgorICBbMFgwRV0gPSBzdHJ0ZXh0KCJUdWJ1bGFyIEJlbGxzIiksCisKKyAgLy8geGdldHRleHQ6IFRoaXMgaXMgdGhlIG5hbWUgb2YgTUlESSBtdXNpY2FsIGluc3RydW1lbnQgIzE2IChpbiB0aGUgQ2hyb21hdGljIFBlcmN1c3Npb24gZ3JvdXApLgorICBbMFgwRl0gPSBzdHJ0ZXh0KCJEdWxjaW1lciIpLAorCisvKiBPcmdhbiAqLworICAvLyB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgbmFtZSBvZiBNSURJIG11c2ljYWwgaW5zdHJ1bWVudCAjMTcgKGluIHRoZSBPcmdhbiBncm91cCkuCisgIFswWDEwXSA9IHN0cnRleHQoIkRyYXdiYXIgT3JnYW4iKSwKKworICAvLyB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgbmFtZSBvZiBNSURJIG11c2ljYWwgaW5zdHJ1bWVudCAjMTggKGluIHRoZSBPcmdhbiBncm91cCkuCisgIFswWDExXSA9IHN0cnRleHQoIlBlcmN1c3NpdmUgT3JnYW4iKSwKKworICAvLyB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgbmFtZSBvZiBNSURJIG11c2ljYWwgaW5zdHJ1bWVudCAjMTkgKGluIHRoZSBPcmdhbiBncm91cCkuCisgIFswWDEyXSA9IHN0cnRleHQoIlJvY2sgT3JnYW4iKSwKKworICAvLyB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgbmFtZSBvZiBNSURJIG11c2ljYWwgaW5zdHJ1bWVudCAjMjAgKGluIHRoZSBPcmdhbiBncm91cCkuCisgIFswWDEzXSA9IHN0cnRleHQoIkNodXJjaCBPcmdhbiIpLAorCisgIC8vIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBuYW1lIG9mIE1JREkgbXVzaWNhbCBpbnN0cnVtZW50ICMyMSAoaW4gdGhlIE9yZ2FuIGdyb3VwKS4KKyAgWzBYMTRdID0gc3RydGV4dCgiUmVlZCBPcmdhbiIpLAorCisgIC8vIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBuYW1lIG9mIE1JREkgbXVzaWNhbCBpbnN0cnVtZW50ICMyMiAoaW4gdGhlIE9yZ2FuIGdyb3VwKS4KKyAgWzBYMTVdID0gc3RydGV4dCgiQWNjb3JkaW9uIiksCisKKyAgLy8geGdldHRleHQ6IFRoaXMgaXMgdGhlIG5hbWUgb2YgTUlESSBtdXNpY2FsIGluc3RydW1lbnQgIzIzIChpbiB0aGUgT3JnYW4gZ3JvdXApLgorICBbMFgxNl0gPSBzdHJ0ZXh0KCJIYXJtb25pY2EiKSwKKworICAvLyB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgbmFtZSBvZiBNSURJIG11c2ljYWwgaW5zdHJ1bWVudCAjMjQgKGluIHRoZSBPcmdhbiBncm91cCkuCisgIFswWDE3XSA9IHN0cnRleHQoIlRhbmdvIEFjY29yZGlvbiIpLAorCisvKiBHdWl0YXIgKi8KKyAgLy8geGdldHRleHQ6IFRoaXMgaXMgdGhlIG5hbWUgb2YgTUlESSBtdXNpY2FsIGluc3RydW1lbnQgIzI1IChpbiB0aGUgR3VpdGFyIGdyb3VwKS4KKyAgWzBYMThdID0gc3RydGV4dCgiQWNvdXN0aWMgR3VpdGFyIChueWxvbikiKSwKKworICAvLyB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgbmFtZSBvZiBNSURJIG11c2ljYWwgaW5zdHJ1bWVudCAjMjYgKGluIHRoZSBHdWl0YXIgZ3JvdXApLgorICBbMFgxOV0gPSBzdHJ0ZXh0KCJBY291c3RpYyBHdWl0YXIgKHN0ZWVsKSIpLAorCisgIC8vIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBuYW1lIG9mIE1JREkgbXVzaWNhbCBpbnN0cnVtZW50ICMyNyAoaW4gdGhlIEd1aXRhciBncm91cCkuCisgIFswWDFBXSA9IHN0cnRleHQoIkVsZWN0cmljIEd1aXRhciAoamF6eikiKSwKKworICAvLyB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgbmFtZSBvZiBNSURJIG11c2ljYWwgaW5zdHJ1bWVudCAjMjggKGluIHRoZSBHdWl0YXIgZ3JvdXApLgorICBbMFgxQl0gPSBzdHJ0ZXh0KCJFbGVjdHJpYyBHdWl0YXIgKGNsZWFuKSIpLAorCisgIC8vIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBuYW1lIG9mIE1JREkgbXVzaWNhbCBpbnN0cnVtZW50ICMyOSAoaW4gdGhlIEd1aXRhciBncm91cCkuCisgIFswWDFDXSA9IHN0cnRleHQoIkVsZWN0cmljIEd1aXRhciAobXV0ZWQpIiksCisKKyAgLy8geGdldHRleHQ6IFRoaXMgaXMgdGhlIG5hbWUgb2YgTUlESSBtdXNpY2FsIGluc3RydW1lbnQgIzMwIChpbiB0aGUgR3VpdGFyIGdyb3VwKS4KKyAgWzBYMURdID0gc3RydGV4dCgiT3ZlcmRyaXZlbiBHdWl0YXIiKSwKKworICAvLyB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgbmFtZSBvZiBNSURJIG11c2ljYWwgaW5zdHJ1bWVudCAjMzEgKGluIHRoZSBHdWl0YXIgZ3JvdXApLgorICBbMFgxRV0gPSBzdHJ0ZXh0KCJEaXN0b3J0aW9uIEd1aXRhciIpLAorCisgIC8vIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBuYW1lIG9mIE1JREkgbXVzaWNhbCBpbnN0cnVtZW50ICMzMiAoaW4gdGhlIEd1aXRhciBncm91cCkuCisgIFswWDFGXSA9IHN0cnRleHQoIkd1aXRhciBIYXJtb25pY3MiKSwKKworLyogQmFzcyAqLworICAvLyB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgbmFtZSBvZiBNSURJIG11c2ljYWwgaW5zdHJ1bWVudCAjMzMgKGluIHRoZSBCYXNzIGdyb3VwKS4KKyAgWzBYMjBdID0gc3RydGV4dCgiQWNvdXN0aWMgQmFzcyIpLAorCisgIC8vIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBuYW1lIG9mIE1JREkgbXVzaWNhbCBpbnN0cnVtZW50ICMzNCAoaW4gdGhlIEJhc3MgZ3JvdXApLgorICBbMFgyMV0gPSBzdHJ0ZXh0KCJFbGVjdHJpYyBCYXNzIChmaW5nZXIpIiksCisKKyAgLy8geGdldHRleHQ6IFRoaXMgaXMgdGhlIG5hbWUgb2YgTUlESSBtdXNpY2FsIGluc3RydW1lbnQgIzM1IChpbiB0aGUgQmFzcyBncm91cCkuCisgIFswWDIyXSA9IHN0cnRleHQoIkVsZWN0cmljIEJhc3MgKHBpY2spIiksCisKKyAgLy8geGdldHRleHQ6IFRoaXMgaXMgdGhlIG5hbWUgb2YgTUlESSBtdXNpY2FsIGluc3RydW1lbnQgIzM2IChpbiB0aGUgQmFzcyBncm91cCkuCisgIFswWDIzXSA9IHN0cnRleHQoIkZyZXRsZXNzIEJhc3MiKSwKKworICAvLyB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgbmFtZSBvZiBNSURJIG11c2ljYWwgaW5zdHJ1bWVudCAjMzcgKGluIHRoZSBCYXNzIGdyb3VwKS4KKyAgWzBYMjRdID0gc3RydGV4dCgiU2xhcCBCYXNzIDEiKSwKKworICAvLyB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgbmFtZSBvZiBNSURJIG11c2ljYWwgaW5zdHJ1bWVudCAjMzggKGluIHRoZSBCYXNzIGdyb3VwKS4KKyAgWzBYMjVdID0gc3RydGV4dCgiU2xhcCBCYXNzIDIiKSwKKworICAvLyB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgbmFtZSBvZiBNSURJIG11c2ljYWwgaW5zdHJ1bWVudCAjMzkgKGluIHRoZSBCYXNzIGdyb3VwKS4KKyAgWzBYMjZdID0gc3RydGV4dCgiU3ludGggQmFzcyAxIiksCisKKyAgLy8geGdldHRleHQ6IFRoaXMgaXMgdGhlIG5hbWUgb2YgTUlESSBtdXNpY2FsIGluc3RydW1lbnQgIzQwIChpbiB0aGUgQmFzcyBncm91cCkuCisgIFswWDI3XSA9IHN0cnRleHQoIlN5bnRoIEJhc3MgMiIpLAorCisvKiBTdHJpbmdzICovCisgIC8vIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBuYW1lIG9mIE1JREkgbXVzaWNhbCBpbnN0cnVtZW50ICM0MSAoaW4gdGhlIFN0cmluZ3MgZ3JvdXApLgorICBbMFgyOF0gPSBzdHJ0ZXh0KCJWaW9saW4iKSwKKworICAvLyB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgbmFtZSBvZiBNSURJIG11c2ljYWwgaW5zdHJ1bWVudCAjNDIgKGluIHRoZSBTdHJpbmdzIGdyb3VwKS4KKyAgWzBYMjldID0gc3RydGV4dCgiVmlvbGEiKSwKKworICAvLyB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgbmFtZSBvZiBNSURJIG11c2ljYWwgaW5zdHJ1bWVudCAjNDMgKGluIHRoZSBTdHJpbmdzIGdyb3VwKS4KKyAgWzBYMkFdID0gc3RydGV4dCgiQ2VsbG8iKSwKKworICAvLyB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgbmFtZSBvZiBNSURJIG11c2ljYWwgaW5zdHJ1bWVudCAjNDQgKGluIHRoZSBTdHJpbmdzIGdyb3VwKS4KKyAgWzBYMkJdID0gc3RydGV4dCgiQ29udHJhYmFzcyIpLAorCisgIC8vIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBuYW1lIG9mIE1JREkgbXVzaWNhbCBpbnN0cnVtZW50ICM0NSAoaW4gdGhlIFN0cmluZ3MgZ3JvdXApLgorICBbMFgyQ10gPSBzdHJ0ZXh0KCJUcmVtb2xvIFN0cmluZ3MiKSwKKworICAvLyB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgbmFtZSBvZiBNSURJIG11c2ljYWwgaW5zdHJ1bWVudCAjNDYgKGluIHRoZSBTdHJpbmdzIGdyb3VwKS4KKyAgWzBYMkRdID0gc3RydGV4dCgiUGl6emljYXRvIFN0cmluZ3MiKSwKKworICAvLyB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgbmFtZSBvZiBNSURJIG11c2ljYWwgaW5zdHJ1bWVudCAjNDcgKGluIHRoZSBTdHJpbmdzIGdyb3VwKS4KKyAgWzBYMkVdID0gc3RydGV4dCgiT3JjaGVzdHJhbCBIYXJwIiksCisKKyAgLy8geGdldHRleHQ6IFRoaXMgaXMgdGhlIG5hbWUgb2YgTUlESSBtdXNpY2FsIGluc3RydW1lbnQgIzQ4IChpbiB0aGUgU3RyaW5ncyBncm91cCkuCisgIFswWDJGXSA9IHN0cnRleHQoIlRpbXBhbmkiKSwKKworLyogRW5zZW1ibGUgKi8KKyAgLy8geGdldHRleHQ6IFRoaXMgaXMgdGhlIG5hbWUgb2YgTUlESSBtdXNpY2FsIGluc3RydW1lbnQgIzQ5IChpbiB0aGUgRW5zZW1ibGUgZ3JvdXApLgorICBbMFgzMF0gPSBzdHJ0ZXh0KCJTdHJpbmcgRW5zZW1ibGUgMSIpLAorCisgIC8vIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBuYW1lIG9mIE1JREkgbXVzaWNhbCBpbnN0cnVtZW50ICM1MCAoaW4gdGhlIEVuc2VtYmxlIGdyb3VwKS4KKyAgWzBYMzFdID0gc3RydGV4dCgiU3RyaW5nIEVuc2VtYmxlIDIiKSwKKworICAvLyB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgbmFtZSBvZiBNSURJIG11c2ljYWwgaW5zdHJ1bWVudCAjNTEgKGluIHRoZSBFbnNlbWJsZSBncm91cCkuCisgIFswWDMyXSA9IHN0cnRleHQoIlN5bnRoU3RyaW5ncyAxIiksCisKKyAgLy8geGdldHRleHQ6IFRoaXMgaXMgdGhlIG5hbWUgb2YgTUlESSBtdXNpY2FsIGluc3RydW1lbnQgIzUyIChpbiB0aGUgRW5zZW1ibGUgZ3JvdXApLgorICBbMFgzM10gPSBzdHJ0ZXh0KCJTeW50aFN0cmluZ3MgMiIpLAorCisgIC8vIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBuYW1lIG9mIE1JREkgbXVzaWNhbCBpbnN0cnVtZW50ICM1MyAoaW4gdGhlIEVuc2VtYmxlIGdyb3VwKS4KKyAgWzBYMzRdID0gc3RydGV4dCgiQ2hvaXIgQWFocyIpLAorCisgIC8vIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBuYW1lIG9mIE1JREkgbXVzaWNhbCBpbnN0cnVtZW50ICM1NCAoaW4gdGhlIEVuc2VtYmxlIGdyb3VwKS4KKyAgWzBYMzVdID0gc3RydGV4dCgiVm9pY2UgT29ocyIpLAorCisgIC8vIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBuYW1lIG9mIE1JREkgbXVzaWNhbCBpbnN0cnVtZW50ICM1NSAoaW4gdGhlIEVuc2VtYmxlIGdyb3VwKS4KKyAgWzBYMzZdID0gc3RydGV4dCgiU3ludGggVm9pY2UiKSwKKworICAvLyB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgbmFtZSBvZiBNSURJIG11c2ljYWwgaW5zdHJ1bWVudCAjNTYgKGluIHRoZSBFbnNlbWJsZSBncm91cCkuCisgIFswWDM3XSA9IHN0cnRleHQoIk9yY2hlc3RyYSBIaXQiKSwKKworLyogQnJhc3MgKi8KKyAgLy8geGdldHRleHQ6IFRoaXMgaXMgdGhlIG5hbWUgb2YgTUlESSBtdXNpY2FsIGluc3RydW1lbnQgIzU3IChpbiB0aGUgQnJhc3MgZ3JvdXApLgorICBbMFgzOF0gPSBzdHJ0ZXh0KCJUcnVtcGV0IiksCisKKyAgLy8geGdldHRleHQ6IFRoaXMgaXMgdGhlIG5hbWUgb2YgTUlESSBtdXNpY2FsIGluc3RydW1lbnQgIzU4IChpbiB0aGUgQnJhc3MgZ3JvdXApLgorICBbMFgzOV0gPSBzdHJ0ZXh0KCJUcm9tYm9uZSIpLAorCisgIC8vIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBuYW1lIG9mIE1JREkgbXVzaWNhbCBpbnN0cnVtZW50ICM1OSAoaW4gdGhlIEJyYXNzIGdyb3VwKS4KKyAgWzBYM0FdID0gc3RydGV4dCgiVHViYSIpLAorCisgIC8vIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBuYW1lIG9mIE1JREkgbXVzaWNhbCBpbnN0cnVtZW50ICM2MCAoaW4gdGhlIEJyYXNzIGdyb3VwKS4KKyAgWzBYM0JdID0gc3RydGV4dCgiTXV0ZWQgVHJ1bXBldCIpLAorCisgIC8vIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBuYW1lIG9mIE1JREkgbXVzaWNhbCBpbnN0cnVtZW50ICM2MSAoaW4gdGhlIEJyYXNzIGdyb3VwKS4KKyAgWzBYM0NdID0gc3RydGV4dCgiRnJlbmNoIEhvcm4iKSwKKworICAvLyB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgbmFtZSBvZiBNSURJIG11c2ljYWwgaW5zdHJ1bWVudCAjNjIgKGluIHRoZSBCcmFzcyBncm91cCkuCisgIFswWDNEXSA9IHN0cnRleHQoIkJyYXNzIFNlY3Rpb24iKSwKKworICAvLyB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgbmFtZSBvZiBNSURJIG11c2ljYWwgaW5zdHJ1bWVudCAjNjMgKGluIHRoZSBCcmFzcyBncm91cCkuCisgIFswWDNFXSA9IHN0cnRleHQoIlN5bnRoQnJhc3MgMSIpLAorCisgIC8vIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBuYW1lIG9mIE1JREkgbXVzaWNhbCBpbnN0cnVtZW50ICM2NCAoaW4gdGhlIEJyYXNzIGdyb3VwKS4KKyAgWzBYM0ZdID0gc3RydGV4dCgiU3ludGhCcmFzcyAyIiksCisKKy8qIFJlZWQgKi8KKyAgLy8geGdldHRleHQ6IFRoaXMgaXMgdGhlIG5hbWUgb2YgTUlESSBtdXNpY2FsIGluc3RydW1lbnQgIzY1IChpbiB0aGUgUmVlZCBncm91cCkuCisgIFswWDQwXSA9IHN0cnRleHQoIlNvcHJhbm8gU2F4b3Bob25lIiksCisKKyAgLy8geGdldHRleHQ6IFRoaXMgaXMgdGhlIG5hbWUgb2YgTUlESSBtdXNpY2FsIGluc3RydW1lbnQgIzY2IChpbiB0aGUgUmVlZCBncm91cCkuCisgIFswWDQxXSA9IHN0cnRleHQoIkFsdG8gU2F4b3Bob25lIiksCisKKyAgLy8geGdldHRleHQ6IFRoaXMgaXMgdGhlIG5hbWUgb2YgTUlESSBtdXNpY2FsIGluc3RydW1lbnQgIzY3IChpbiB0aGUgUmVlZCBncm91cCkuCisgIFswWDQyXSA9IHN0cnRleHQoIlRlbm9yIFNheG9waG9uZSIpLAorCisgIC8vIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBuYW1lIG9mIE1JREkgbXVzaWNhbCBpbnN0cnVtZW50ICM2OCAoaW4gdGhlIFJlZWQgZ3JvdXApLgorICBbMFg0M10gPSBzdHJ0ZXh0KCJCYXJpdG9uZSBTYXhvcGhvbmUiKSwKKworICAvLyB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgbmFtZSBvZiBNSURJIG11c2ljYWwgaW5zdHJ1bWVudCAjNjkgKGluIHRoZSBSZWVkIGdyb3VwKS4KKyAgWzBYNDRdID0gc3RydGV4dCgiT2JvZSIpLAorCisgIC8vIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBuYW1lIG9mIE1JREkgbXVzaWNhbCBpbnN0cnVtZW50ICM3MCAoaW4gdGhlIFJlZWQgZ3JvdXApLgorICBbMFg0NV0gPSBzdHJ0ZXh0KCJFbmdsaXNoIEhvcm4iKSwKKworICAvLyB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgbmFtZSBvZiBNSURJIG11c2ljYWwgaW5zdHJ1bWVudCAjNzEgKGluIHRoZSBSZWVkIGdyb3VwKS4KKyAgWzBYNDZdID0gc3RydGV4dCgiQmFzc29vbiIpLAorCisgIC8vIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBuYW1lIG9mIE1JREkgbXVzaWNhbCBpbnN0cnVtZW50ICM3MiAoaW4gdGhlIFJlZWQgZ3JvdXApLgorICBbMFg0N10gPSBzdHJ0ZXh0KCJDbGFyaW5ldCIpLAorCisvKiBQaXBlICovCisgIC8vIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBuYW1lIG9mIE1JREkgbXVzaWNhbCBpbnN0cnVtZW50ICM3MyAoaW4gdGhlIFBpcGUgZ3JvdXApLgorICBbMFg0OF0gPSBzdHJ0ZXh0KCJQaWNjb2xvIiksCisKKyAgLy8geGdldHRleHQ6IFRoaXMgaXMgdGhlIG5hbWUgb2YgTUlESSBtdXNpY2FsIGluc3RydW1lbnQgIzc0IChpbiB0aGUgUGlwZSBncm91cCkuCisgIFswWDQ5XSA9IHN0cnRleHQoIkZsdXRlIiksCisKKyAgLy8geGdldHRleHQ6IFRoaXMgaXMgdGhlIG5hbWUgb2YgTUlESSBtdXNpY2FsIGluc3RydW1lbnQgIzc1IChpbiB0aGUgUGlwZSBncm91cCkuCisgIFswWDRBXSA9IHN0cnRleHQoIlJlY29yZGVyIiksCisKKyAgLy8geGdldHRleHQ6IFRoaXMgaXMgdGhlIG5hbWUgb2YgTUlESSBtdXNpY2FsIGluc3RydW1lbnQgIzc2IChpbiB0aGUgUGlwZSBncm91cCkuCisgIFswWDRCXSA9IHN0cnRleHQoIlBhbiBGbHV0ZSIpLAorCisgIC8vIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBuYW1lIG9mIE1JREkgbXVzaWNhbCBpbnN0cnVtZW50ICM3NyAoaW4gdGhlIFBpcGUgZ3JvdXApLgorICBbMFg0Q10gPSBzdHJ0ZXh0KCJCbG93biBCb3R0bGUiKSwKKworICAvLyB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgbmFtZSBvZiBNSURJIG11c2ljYWwgaW5zdHJ1bWVudCAjNzggKGluIHRoZSBQaXBlIGdyb3VwKS4KKyAgWzBYNERdID0gc3RydGV4dCgiU2hha3VoYWNoaSIpLAorCisgIC8vIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBuYW1lIG9mIE1JREkgbXVzaWNhbCBpbnN0cnVtZW50ICM3OSAoaW4gdGhlIFBpcGUgZ3JvdXApLgorICBbMFg0RV0gPSBzdHJ0ZXh0KCJXaGlzdGxlIiksCisKKyAgLy8geGdldHRleHQ6IFRoaXMgaXMgdGhlIG5hbWUgb2YgTUlESSBtdXNpY2FsIGluc3RydW1lbnQgIzgwIChpbiB0aGUgUGlwZSBncm91cCkuCisgIFswWDRGXSA9IHN0cnRleHQoIk9jYXJpbmEiKSwKKworLyogU3ludGggTGVhZCAqLworICAvLyB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgbmFtZSBvZiBNSURJIG11c2ljYWwgaW5zdHJ1bWVudCAjODEgKGluIHRoZSBTeW50aCBMZWFkIGdyb3VwKS4KKyAgWzBYNTBdID0gc3RydGV4dCgiTGVhZCAxIChzcXVhcmUpIiksCisKKyAgLy8geGdldHRleHQ6IFRoaXMgaXMgdGhlIG5hbWUgb2YgTUlESSBtdXNpY2FsIGluc3RydW1lbnQgIzgyIChpbiB0aGUgU3ludGggTGVhZCBncm91cCkuCisgIFswWDUxXSA9IHN0cnRleHQoIkxlYWQgMiAoc2F3dG9vdGgpIiksCisKKyAgLy8geGdldHRleHQ6IFRoaXMgaXMgdGhlIG5hbWUgb2YgTUlESSBtdXNpY2FsIGluc3RydW1lbnQgIzgzIChpbiB0aGUgU3ludGggTGVhZCBncm91cCkuCisgIFswWDUyXSA9IHN0cnRleHQoIkxlYWQgMyAoY2FsbGlvcGUpIiksCisKKyAgLy8geGdldHRleHQ6IFRoaXMgaXMgdGhlIG5hbWUgb2YgTUlESSBtdXNpY2FsIGluc3RydW1lbnQgIzg0IChpbiB0aGUgU3ludGggTGVhZCBncm91cCkuCisgIFswWDUzXSA9IHN0cnRleHQoIkxlYWQgNCAoY2hpZmYpIiksCisKKyAgLy8geGdldHRleHQ6IFRoaXMgaXMgdGhlIG5hbWUgb2YgTUlESSBtdXNpY2FsIGluc3RydW1lbnQgIzg1IChpbiB0aGUgU3ludGggTGVhZCBncm91cCkuCisgIFswWDU0XSA9IHN0cnRleHQoIkxlYWQgNSAoY2hhcmFuZykiKSwKKworICAvLyB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgbmFtZSBvZiBNSURJIG11c2ljYWwgaW5zdHJ1bWVudCAjODYgKGluIHRoZSBTeW50aCBMZWFkIGdyb3VwKS4KKyAgWzBYNTVdID0gc3RydGV4dCgiTGVhZCA2ICh2b2ljZSkiKSwKKworICAvLyB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgbmFtZSBvZiBNSURJIG11c2ljYWwgaW5zdHJ1bWVudCAjODcgKGluIHRoZSBTeW50aCBMZWFkIGdyb3VwKS4KKyAgWzBYNTZdID0gc3RydGV4dCgiTGVhZCA3IChmaWZ0aHMpIiksCisKKyAgLy8geGdldHRleHQ6IFRoaXMgaXMgdGhlIG5hbWUgb2YgTUlESSBtdXNpY2FsIGluc3RydW1lbnQgIzg4IChpbiB0aGUgU3ludGggTGVhZCBncm91cCkuCisgIFswWDU3XSA9IHN0cnRleHQoIkxlYWQgOCAoYmFzcyArIGxlYWQpIiksCisKKy8qIFN5bnRoIFBhZCAqLworICAvLyB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgbmFtZSBvZiBNSURJIG11c2ljYWwgaW5zdHJ1bWVudCAjODkgKGluIHRoZSBTeW50aCBQYWQgZ3JvdXApLgorICBbMFg1OF0gPSBzdHJ0ZXh0KCJQYWQgMSAobmV3IGFnZSkiKSwKKworICAvLyB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgbmFtZSBvZiBNSURJIG11c2ljYWwgaW5zdHJ1bWVudCAjOTAgKGluIHRoZSBTeW50aCBQYWQgZ3JvdXApLgorICBbMFg1OV0gPSBzdHJ0ZXh0KCJQYWQgMiAod2FybSkiKSwKKworICAvLyB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgbmFtZSBvZiBNSURJIG11c2ljYWwgaW5zdHJ1bWVudCAjOTEgKGluIHRoZSBTeW50aCBQYWQgZ3JvdXApLgorICBbMFg1QV0gPSBzdHJ0ZXh0KCJQYWQgMyAocG9seXN5bnRoKSIpLAorCisgIC8vIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBuYW1lIG9mIE1JREkgbXVzaWNhbCBpbnN0cnVtZW50ICM5MiAoaW4gdGhlIFN5bnRoIFBhZCBncm91cCkuCisgIFswWDVCXSA9IHN0cnRleHQoIlBhZCA0IChjaG9pcikiKSwKKworICAvLyB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgbmFtZSBvZiBNSURJIG11c2ljYWwgaW5zdHJ1bWVudCAjOTMgKGluIHRoZSBTeW50aCBQYWQgZ3JvdXApLgorICBbMFg1Q10gPSBzdHJ0ZXh0KCJQYWQgNSAoYm93ZWQpIiksCisKKyAgLy8geGdldHRleHQ6IFRoaXMgaXMgdGhlIG5hbWUgb2YgTUlESSBtdXNpY2FsIGluc3RydW1lbnQgIzk0IChpbiB0aGUgU3ludGggUGFkIGdyb3VwKS4KKyAgWzBYNURdID0gc3RydGV4dCgiUGFkIDYgKG1ldGFsbGljKSIpLAorCisgIC8vIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBuYW1lIG9mIE1JREkgbXVzaWNhbCBpbnN0cnVtZW50ICM5NSAoaW4gdGhlIFN5bnRoIFBhZCBncm91cCkuCisgIFswWDVFXSA9IHN0cnRleHQoIlBhZCA3IChoYWxvKSIpLAorCisgIC8vIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBuYW1lIG9mIE1JREkgbXVzaWNhbCBpbnN0cnVtZW50ICM5NiAoaW4gdGhlIFN5bnRoIFBhZCBncm91cCkuCisgIFswWDVGXSA9IHN0cnRleHQoIlBhZCA4IChzd2VlcCkiKSwKKworLyogU3ludGggRk0gKi8KKyAgLy8geGdldHRleHQ6IFRoaXMgaXMgdGhlIG5hbWUgb2YgTUlESSBtdXNpY2FsIGluc3RydW1lbnQgIzk3IChpbiB0aGUgU3ludGggRk0gZ3JvdXApLgorICBbMFg2MF0gPSBzdHJ0ZXh0KCJGWCAxIChyYWluKSIpLAorCisgIC8vIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBuYW1lIG9mIE1JREkgbXVzaWNhbCBpbnN0cnVtZW50ICM5OCAoaW4gdGhlIFN5bnRoIEZNIGdyb3VwKS4KKyAgWzBYNjFdID0gc3RydGV4dCgiRlggMiAoc291bmR0cmFjaykiKSwKKworICAvLyB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgbmFtZSBvZiBNSURJIG11c2ljYWwgaW5zdHJ1bWVudCAjOTkgKGluIHRoZSBTeW50aCBGTSBncm91cCkuCisgIFswWDYyXSA9IHN0cnRleHQoIkZYIDMgKGNyeXN0YWwpIiksCisKKyAgLy8geGdldHRleHQ6IFRoaXMgaXMgdGhlIG5hbWUgb2YgTUlESSBtdXNpY2FsIGluc3RydW1lbnQgIzEwMCAoaW4gdGhlIFN5bnRoIEZNIGdyb3VwKS4KKyAgWzBYNjNdID0gc3RydGV4dCgiRlggNCAoYXRtb3NwaGVyZSkiKSwKKworICAvLyB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgbmFtZSBvZiBNSURJIG11c2ljYWwgaW5zdHJ1bWVudCAjMTAxIChpbiB0aGUgU3ludGggRk0gZ3JvdXApLgorICBbMFg2NF0gPSBzdHJ0ZXh0KCJGWCA1IChicmlnaHRuZXNzKSIpLAorCisgIC8vIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBuYW1lIG9mIE1JREkgbXVzaWNhbCBpbnN0cnVtZW50ICMxMDIgKGluIHRoZSBTeW50aCBGTSBncm91cCkuCisgIFswWDY1XSA9IHN0cnRleHQoIkZYIDYgKGdvYmxpbnMpIiksCisKKyAgLy8geGdldHRleHQ6IFRoaXMgaXMgdGhlIG5hbWUgb2YgTUlESSBtdXNpY2FsIGluc3RydW1lbnQgIzEwMyAoaW4gdGhlIFN5bnRoIEZNIGdyb3VwKS4KKyAgWzBYNjZdID0gc3RydGV4dCgiRlggNyAoZWNob2VzKSIpLAorCisgIC8vIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBuYW1lIG9mIE1JREkgbXVzaWNhbCBpbnN0cnVtZW50ICMxMDQgKGluIHRoZSBTeW50aCBGTSBncm91cCkuCisgIC8vIHhnZXR0ZXh0OiAoc2NpLWZpIGlzIGEgY29tbW9uIHNob3J0IGZvcm0gZm9yIHNjaWVuY2UgZmljdGlvbikKKyAgWzBYNjddID0gc3RydGV4dCgiRlggOCAoc2NpLWZpKSIpLAorCisvKiBFdGhuaWMgSW5zdHJ1bWVudHMgKi8KKyAgLy8geGdldHRleHQ6IFRoaXMgaXMgdGhlIG5hbWUgb2YgTUlESSBtdXNpY2FsIGluc3RydW1lbnQgIzEwNSAoaW4gdGhlIEV0aG5pYyBncm91cCkuCisgIFswWDY4XSA9IHN0cnRleHQoIlNpdGFyIiksCisKKyAgLy8geGdldHRleHQ6IFRoaXMgaXMgdGhlIG5hbWUgb2YgTUlESSBtdXNpY2FsIGluc3RydW1lbnQgIzEwNiAoaW4gdGhlIEV0aG5pYyBncm91cCkuCisgIFswWDY5XSA9IHN0cnRleHQoIkJhbmpvIiksCisKKyAgLy8geGdldHRleHQ6IFRoaXMgaXMgdGhlIG5hbWUgb2YgTUlESSBtdXNpY2FsIGluc3RydW1lbnQgIzEwNyAoaW4gdGhlIEV0aG5pYyBncm91cCkuCisgIFswWDZBXSA9IHN0cnRleHQoIlNoYW1pc2VuIiksCisKKyAgLy8geGdldHRleHQ6IFRoaXMgaXMgdGhlIG5hbWUgb2YgTUlESSBtdXNpY2FsIGluc3RydW1lbnQgIzEwOCAoaW4gdGhlIEV0aG5pYyBncm91cCkuCisgIFswWDZCXSA9IHN0cnRleHQoIktvdG8iKSwKKworICAvLyB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgbmFtZSBvZiBNSURJIG11c2ljYWwgaW5zdHJ1bWVudCAjMTA5IChpbiB0aGUgRXRobmljIGdyb3VwKS4KKyAgWzBYNkNdID0gc3RydGV4dCgiS2FsaW1iYSIpLAorCisgIC8vIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBuYW1lIG9mIE1JREkgbXVzaWNhbCBpbnN0cnVtZW50ICMxMTAgKGluIHRoZSBFdGhuaWMgZ3JvdXApLgorICBbMFg2RF0gPSBzdHJ0ZXh0KCJCYWcgUGlwZSIpLAorCisgIC8vIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBuYW1lIG9mIE1JREkgbXVzaWNhbCBpbnN0cnVtZW50ICMxMTEgKGluIHRoZSBFdGhuaWMgZ3JvdXApLgorICBbMFg2RV0gPSBzdHJ0ZXh0KCJGaWRkbGUiKSwKKworICAvLyB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgbmFtZSBvZiBNSURJIG11c2ljYWwgaW5zdHJ1bWVudCAjMTEyIChpbiB0aGUgRXRobmljIGdyb3VwKS4KKyAgWzBYNkZdID0gc3RydGV4dCgiU2hhbmFpIiksCisKKy8qIFBlcmN1c3NpdmUgSW5zdHJ1bWVudHMgKi8KKyAgLy8geGdldHRleHQ6IFRoaXMgaXMgdGhlIG5hbWUgb2YgTUlESSBtdXNpY2FsIGluc3RydW1lbnQgIzExMyAoaW4gdGhlIFBlcmN1c3NpdmUgZ3JvdXApLgorICBbMFg3MF0gPSBzdHJ0ZXh0KCJUaW5rbGUgQmVsbCIpLAorCisgIC8vIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBuYW1lIG9mIE1JREkgbXVzaWNhbCBpbnN0cnVtZW50ICMxMTQgKGluIHRoZSBQZXJjdXNzaXZlIGdyb3VwKS4KKyAgWzBYNzFdID0gc3RydGV4dCgiQWdvZ28iKSwKKworICAvLyB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgbmFtZSBvZiBNSURJIG11c2ljYWwgaW5zdHJ1bWVudCAjMTE1IChpbiB0aGUgUGVyY3Vzc2l2ZSBncm91cCkuCisgIFswWDcyXSA9IHN0cnRleHQoIlN0ZWVsIERydW1zIiksCisKKyAgLy8geGdldHRleHQ6IFRoaXMgaXMgdGhlIG5hbWUgb2YgTUlESSBtdXNpY2FsIGluc3RydW1lbnQgIzExNiAoaW4gdGhlIFBlcmN1c3NpdmUgZ3JvdXApLgorICBbMFg3M10gPSBzdHJ0ZXh0KCJXb29kYmxvY2siKSwKKworICAvLyB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgbmFtZSBvZiBNSURJIG11c2ljYWwgaW5zdHJ1bWVudCAjMTE3IChpbiB0aGUgUGVyY3Vzc2l2ZSBncm91cCkuCisgIFswWDc0XSA9IHN0cnRleHQoIlRhaWtvIERydW0iKSwKKworICAvLyB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgbmFtZSBvZiBNSURJIG11c2ljYWwgaW5zdHJ1bWVudCAjMTE4IChpbiB0aGUgUGVyY3Vzc2l2ZSBncm91cCkuCisgIFswWDc1XSA9IHN0cnRleHQoIk1lbG9kaWMgVG9tIiksCisKKyAgLy8geGdldHRleHQ6IFRoaXMgaXMgdGhlIG5hbWUgb2YgTUlESSBtdXNpY2FsIGluc3RydW1lbnQgIzExOSAoaW4gdGhlIFBlcmN1c3NpdmUgZ3JvdXApLgorICBbMFg3Nl0gPSBzdHJ0ZXh0KCJTeW50aCBEcnVtIiksCisKKyAgLy8geGdldHRleHQ6IFRoaXMgaXMgdGhlIG5hbWUgb2YgTUlESSBtdXNpY2FsIGluc3RydW1lbnQgIzEyMCAoaW4gdGhlIFBlcmN1c3NpdmUgZ3JvdXApLgorICBbMFg3N10gPSBzdHJ0ZXh0KCJSZXZlcnNlIEN5bWJhbCIpLAorCisvKiBTb3VuZCBFZmZlY3RzICovCisgIC8vIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBuYW1lIG9mIE1JREkgbXVzaWNhbCBpbnN0cnVtZW50ICMxMjEgKGluIHRoZSBTb3VuZCBFZmZlY3RzIGdyb3VwKS4KKyAgWzBYNzhdID0gc3RydGV4dCgiR3VpdGFyIEZyZXQgTm9pc2UiKSwKKworICAvLyB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgbmFtZSBvZiBNSURJIG11c2ljYWwgaW5zdHJ1bWVudCAjMTIyIChpbiB0aGUgU291bmQgRWZmZWN0cyBncm91cCkuCisgIFswWDc5XSA9IHN0cnRleHQoIkJyZWF0aCBOb2lzZSIpLAorCisgIC8vIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBuYW1lIG9mIE1JREkgbXVzaWNhbCBpbnN0cnVtZW50ICMxMjMgKGluIHRoZSBTb3VuZCBFZmZlY3RzIGdyb3VwKS4KKyAgWzBYN0FdID0gc3RydGV4dCgiU2Vhc2hvcmUiKSwKKworICAvLyB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgbmFtZSBvZiBNSURJIG11c2ljYWwgaW5zdHJ1bWVudCAjMTI0IChpbiB0aGUgU291bmQgRWZmZWN0cyBncm91cCkuCisgIFswWDdCXSA9IHN0cnRleHQoIkJpcmQgVHdlZXQiKSwKKworICAvLyB4Z2V0dGV4dDogVGhpcyBpcyB0aGUgbmFtZSBvZiBNSURJIG11c2ljYWwgaW5zdHJ1bWVudCAjMTI1IChpbiB0aGUgU291bmQgRWZmZWN0cyBncm91cCkuCisgIFswWDdDXSA9IHN0cnRleHQoIlRlbGVwaG9uZSBSaW5nIiksCisKKyAgLy8geGdldHRleHQ6IFRoaXMgaXMgdGhlIG5hbWUgb2YgTUlESSBtdXNpY2FsIGluc3RydW1lbnQgIzEyNiAoaW4gdGhlIFNvdW5kIEVmZmVjdHMgZ3JvdXApLgorICBbMFg3RF0gPSBzdHJ0ZXh0KCJIZWxpY29wdGVyIiksCisKKyAgLy8geGdldHRleHQ6IFRoaXMgaXMgdGhlIG5hbWUgb2YgTUlESSBtdXNpY2FsIGluc3RydW1lbnQgIzEyNyAoaW4gdGhlIFNvdW5kIEVmZmVjdHMgZ3JvdXApLgorICBbMFg3RV0gPSBzdHJ0ZXh0KCJBcHBsYXVzZSIpLAorCisgIC8vIHhnZXR0ZXh0OiBUaGlzIGlzIHRoZSBuYW1lIG9mIE1JREkgbXVzaWNhbCBpbnN0cnVtZW50ICMxMjggKGluIHRoZSBTb3VuZCBFZmZlY3RzIGdyb3VwKS4KKyAgWzBYN0ZdID0gc3RydGV4dCgiR3Vuc2hvdCIpCit9OworY29uc3QgdW5zaWduZWQgaW50IG1pZGlJbnN0cnVtZW50Q291bnQgPSBBUlJBWV9DT1VOVChtaWRpSW5zdHJ1bWVudFRhYmxlKTsKKworY29uc3QgY2hhciAqCittaWRpR2V0SW5zdHJ1bWVudEdyb3VwICh1bnNpZ25lZCBjaGFyIGluc3RydW1lbnQpIHsKKyAgcmV0dXJuIG1pZGlJbnN0cnVtZW50R3JvdXBzW2luc3RydW1lbnQgPj4gM107Cit9CmRpZmYgLS1naXQgYS9Qcm9ncmFtcy9taWRpX2Fsc2EuYyBiL1Byb2dyYW1zL21pZGlfYWxzYS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlkZDY3ZjEKLS0tIC9kZXYvbnVsbAorKysgYi9Qcm9ncmFtcy9taWRpX2Fsc2EuYwpAQCAtMCwwICsxLDM5MSBAQAorLyoKKyAqIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisgKiAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisgKgorICogQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKKyNpbmNsdWRlICJwcm9sb2d1ZS5oIgorCisjaW5jbHVkZSA8YWxzYS9hc291bmRsaWIuaD4KKworI2luY2x1ZGUgImxvZy5oIgorI2luY2x1ZGUgInBhcnNlLmgiCisjaW5jbHVkZSAidGltaW5nLmgiCisjaW5jbHVkZSAibWlkaS5oIgorCitzdHJ1Y3QgTWlkaURldmljZVN0cnVjdCB7CisgIHNuZF9zZXFfdCAqc2VxdWVuY2VyOworICBpbnQgcG9ydDsKKyAgaW50IHF1ZXVlOworICBzbmRfc2VxX3F1ZXVlX3N0YXR1c190ICpzdGF0dXM7CisgIHNuZF9zZXFfcmVhbF90aW1lX3QgdGltZTsKKyAgdW5zaWduZWQgY2hhciBub3RlOworfTsKKworI2RlZmluZSBzbmRfc2VxX2NvbnRyb2xfcXVldWUgc25kX3NlcV9jb250cm9sX3F1ZXVlCisKK3N0YXRpYyBpbnQKK2ZpbmRNaWRpRGV2aWNlIChNaWRpRGV2aWNlICptaWRpLCBpbnQgZXJyb3JMZXZlbCwgaW50ICpjbGllbnQsIGludCAqcG9ydCkgeworICBzbmRfc2VxX2NsaWVudF9pbmZvX3QgKmNsaWVudEluZm9ybWF0aW9uID0gbWFsbG9jKHNuZF9zZXFfY2xpZW50X2luZm9fc2l6ZW9mKCkpOworCisgIGlmIChjbGllbnRJbmZvcm1hdGlvbikgeworICAgIG1lbXNldChjbGllbnRJbmZvcm1hdGlvbiwgMCwgc25kX3NlcV9jbGllbnRfaW5mb19zaXplb2YoKSk7CisgICAgc25kX3NlcV9jbGllbnRfaW5mb19zZXRfY2xpZW50KGNsaWVudEluZm9ybWF0aW9uLCAtMSk7CisKKyAgICB3aGlsZSAoc25kX3NlcV9xdWVyeV9uZXh0X2NsaWVudChtaWRpLT5zZXF1ZW5jZXIsIGNsaWVudEluZm9ybWF0aW9uKSA+PSAwKSB7CisgICAgICBpbnQgY2xpZW50SWRlbnRpZmllciA9IHNuZF9zZXFfY2xpZW50X2luZm9fZ2V0X2NsaWVudChjbGllbnRJbmZvcm1hdGlvbik7CisgICAgICBzbmRfc2VxX3BvcnRfaW5mb190ICpwb3J0SW5mb3JtYXRpb24gPSBtYWxsb2Moc25kX3NlcV9wb3J0X2luZm9fc2l6ZW9mKCkpOworCisgICAgICBpZiAocG9ydEluZm9ybWF0aW9uKSB7CisgICAgICAgIG1lbXNldChwb3J0SW5mb3JtYXRpb24sIDAsIHNuZF9zZXFfcG9ydF9pbmZvX3NpemVvZigpKTsKKyAgICAgICAgc25kX3NlcV9wb3J0X2luZm9fc2V0X2NsaWVudChwb3J0SW5mb3JtYXRpb24sIGNsaWVudElkZW50aWZpZXIpOworICAgICAgICBzbmRfc2VxX3BvcnRfaW5mb19zZXRfcG9ydChwb3J0SW5mb3JtYXRpb24sIC0xKTsKKworICAgICAgICB3aGlsZSAoc25kX3NlcV9xdWVyeV9uZXh0X3BvcnQobWlkaS0+c2VxdWVuY2VyLCBwb3J0SW5mb3JtYXRpb24pID49IDApIHsKKyAgICAgICAgICBpbnQgcG9ydElkZW50aWZpZXIgPSBzbmRfc2VxX3BvcnRfaW5mb19nZXRfcG9ydChwb3J0SW5mb3JtYXRpb24pOworICAgICAgICAgIGludCBhY3R1YWxDYXBhYmlsaXRpZXMgPSBzbmRfc2VxX3BvcnRfaW5mb19nZXRfY2FwYWJpbGl0eShwb3J0SW5mb3JtYXRpb24pOworICAgICAgICAgIGNvbnN0IGludCBuZWVkZWRDYXBhYmlsdGllcyA9IFNORF9TRVFfUE9SVF9DQVBfV1JJVEUgfCBTTkRfU0VRX1BPUlRfQ0FQX1NVQlNfV1JJVEU7CisKKyAgICAgICAgICBpZiAoKChhY3R1YWxDYXBhYmlsaXRpZXMgJiBuZWVkZWRDYXBhYmlsdGllcykgPT0gbmVlZGVkQ2FwYWJpbHRpZXMpICYmCisgICAgICAgICAgICAgICEoYWN0dWFsQ2FwYWJpbGl0aWVzICYgU05EX1NFUV9QT1JUX0NBUF9OT19FWFBPUlQpKSB7CisgICAgICAgICAgICAqY2xpZW50ID0gY2xpZW50SWRlbnRpZmllcjsKKyAgICAgICAgICAgICpwb3J0ID0gcG9ydElkZW50aWZpZXI7CisgICAgICAgICAgICBsb2dNZXNzYWdlKExPR19ERUJVRywgIlVzaW5nIEFMU0EgTUlESSBkZXZpY2U6ICVkWyVzXSAlZFslc10iLAorICAgICAgICAgICAgICAgICAgICAgICBjbGllbnRJZGVudGlmaWVyLCBzbmRfc2VxX2NsaWVudF9pbmZvX2dldF9uYW1lKGNsaWVudEluZm9ybWF0aW9uKSwKKyAgICAgICAgICAgICAgICAgICAgICAgcG9ydElkZW50aWZpZXIsIHNuZF9zZXFfcG9ydF9pbmZvX2dldF9uYW1lKHBvcnRJbmZvcm1hdGlvbikpOworCisgICAgICAgICAgICBmcmVlKHBvcnRJbmZvcm1hdGlvbik7CisgICAgICAgICAgICBmcmVlKGNsaWVudEluZm9ybWF0aW9uKTsKKyAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGZyZWUocG9ydEluZm9ybWF0aW9uKTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIGxvZ01hbGxvY0Vycm9yKCk7CisgICAgICB9CisgICAgfQorCisgICAgZnJlZShjbGllbnRJbmZvcm1hdGlvbik7CisgIH0gZWxzZSB7CisgICAgbG9nTWFsbG9jRXJyb3IoKTsKKyAgfQorCisgIGxvZ01lc3NhZ2UoZXJyb3JMZXZlbCwgIk5vIE1ESUkgZGV2aWNlcy4iKTsKKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK3BhcnNlTWlkaURldmljZSAoTWlkaURldmljZSAqbWlkaSwgaW50IGVycm9yTGV2ZWwsIGNvbnN0IGNoYXIgKmRldmljZSwgaW50ICpjbGllbnQsIGludCAqcG9ydCkgeworICBjaGFyICoqY29tcG9uZW50cyA9IHNwbGl0U3RyaW5nKGRldmljZSwgJzonLCBOVUxMKTsKKworICBpZiAoY29tcG9uZW50cykgeworICAgIGNoYXIgKipjb21wb25lbnQgPSBjb21wb25lbnRzOworCisgICAgaWYgKCpjb21wb25lbnQgJiYgKipjb21wb25lbnQpIHsKKyAgICAgIGNvbnN0IGNoYXIgKmNsaWVudFNwZWNpZmllciA9ICpjb21wb25lbnQrKzsKKworICAgICAgaWYgKCpjb21wb25lbnQgJiYgKipjb21wb25lbnQpIHsKKyAgICAgICAgY29uc3QgY2hhciAqcG9ydFNwZWNpZmllciA9ICpjb21wb25lbnQrKzsKKworICAgICAgICBpZiAoISpjb21wb25lbnQpIHsKKyAgICAgICAgICBpbnQgY2xpZW50SWRlbnRpZmllcjsKKyAgICAgICAgICBpbnQgY2xpZW50T2sgPSAwOworCisgICAgICAgICAgaWYgKGlzSW50ZWdlcigmY2xpZW50SWRlbnRpZmllciwgY2xpZW50U3BlY2lmaWVyKSkgeworICAgICAgICAgICAgaWYgKChjbGllbnRJZGVudGlmaWVyID49IDApICYmIChjbGllbnRJZGVudGlmaWVyIDw9IDBYRkZGRikpIGNsaWVudE9rID0gMTsKKyAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgc25kX3NlcV9jbGllbnRfaW5mb190ICppbmZvID0gbWFsbG9jKHNuZF9zZXFfY2xpZW50X2luZm9fc2l6ZW9mKCkpOworCisgICAgICAgICAgICBpZiAoaW5mbykgeworICAgICAgICAgICAgICBtZW1zZXQoaW5mbywgMCwgc25kX3NlcV9jbGllbnRfaW5mb19zaXplb2YoKSk7CisgICAgICAgICAgICAgIHNuZF9zZXFfY2xpZW50X2luZm9fc2V0X2NsaWVudChpbmZvLCAtMSk7CisKKyAgICAgICAgICAgICAgd2hpbGUgKHNuZF9zZXFfcXVlcnlfbmV4dF9jbGllbnQobWlkaS0+c2VxdWVuY2VyLCBpbmZvKSA+PSAwKSB7CisgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqbmFtZSA9IHNuZF9zZXFfY2xpZW50X2luZm9fZ2V0X25hbWUoaW5mbyk7CisKKyAgICAgICAgICAgICAgICBpZiAoc3Ryc3RyKG5hbWUsIGNsaWVudFNwZWNpZmllcikpIHsKKyAgICAgICAgICAgICAgICAgIGNsaWVudElkZW50aWZpZXIgPSBzbmRfc2VxX2NsaWVudF9pbmZvX2dldF9jbGllbnQoaW5mbyk7CisgICAgICAgICAgICAgICAgICBjbGllbnRPayA9IDE7CisgICAgICAgICAgICAgICAgICBsb2dNZXNzYWdlKExPR19JTkZPLCAiVXNpbmcgQUxTQSBNSURJIGNsaWVudDogJWRbJXNdIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xpZW50SWRlbnRpZmllciwgbmFtZSk7CisgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICBmcmVlKGluZm8pOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgbG9nTWFsbG9jRXJyb3IoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9CisKKyAgICAgICAgICBpZiAoY2xpZW50T2spIHsKKyAgICAgICAgICAgIGludCBwb3J0SWRlbnRpZmllcjsKKyAgICAgICAgICAgIGludCBwb3J0T2sgPSAwOworCisgICAgICAgICAgICBpZiAoaXNJbnRlZ2VyKCZwb3J0SWRlbnRpZmllciwgcG9ydFNwZWNpZmllcikpIHsKKyAgICAgICAgICAgICAgaWYgKChwb3J0SWRlbnRpZmllciA+PSAwKSAmJiAocG9ydElkZW50aWZpZXIgPD0gMFhGRkZGKSkgcG9ydE9rID0gMTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgIHNuZF9zZXFfcG9ydF9pbmZvX3QgKmluZm8gPSBtYWxsb2Moc25kX3NlcV9wb3J0X2luZm9fc2l6ZW9mKCkpOworCisgICAgICAgICAgICAgIGlmIChpbmZvKSB7CisgICAgICAgICAgICAgICAgbWVtc2V0KGluZm8sIDAsIHNuZF9zZXFfcG9ydF9pbmZvX3NpemVvZigpKTsKKyAgICAgICAgICAgICAgICBzbmRfc2VxX3BvcnRfaW5mb19zZXRfY2xpZW50KGluZm8sIGNsaWVudElkZW50aWZpZXIpOworICAgICAgICAgICAgICAgIHNuZF9zZXFfcG9ydF9pbmZvX3NldF9wb3J0KGluZm8sIC0xKTsKKworICAgICAgICAgICAgICAgIHdoaWxlIChzbmRfc2VxX3F1ZXJ5X25leHRfcG9ydChtaWRpLT5zZXF1ZW5jZXIsIGluZm8pID49IDApIHsKKyAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKm5hbWUgPSBzbmRfc2VxX3BvcnRfaW5mb19nZXRfbmFtZShpbmZvKTsKKworICAgICAgICAgICAgICAgICAgaWYgKHN0cnN0cihuYW1lLCBwb3J0U3BlY2lmaWVyKSkgeworICAgICAgICAgICAgICAgICAgICBwb3J0SWRlbnRpZmllciA9IHNuZF9zZXFfcG9ydF9pbmZvX2dldF9wb3J0KGluZm8pOworICAgICAgICAgICAgICAgICAgICBwb3J0T2sgPSAxOworICAgICAgICAgICAgICAgICAgICBsb2dNZXNzYWdlKExPR19JTkZPLCAiVXNpbmcgQUxTQSBNSURJIHBvcnQ6ICVkWyVzXSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9ydElkZW50aWZpZXIsIG5hbWUpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBmcmVlKGluZm8pOworICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGxvZ01hbGxvY0Vycm9yKCk7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKHBvcnRPaykgeworICAgICAgICAgICAgICAqY2xpZW50ID0gY2xpZW50SWRlbnRpZmllcjsKKyAgICAgICAgICAgICAgKnBvcnQgPSBwb3J0SWRlbnRpZmllcjsKKworICAgICAgICAgICAgICBkZWFsbG9jYXRlU3RyaW5ncyhjb21wb25lbnRzKTsKKyAgICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICBsb2dNZXNzYWdlKGVycm9yTGV2ZWwsICJJbnZhbGlkIEFMU0EgTUlESSBwb3J0OiAlcyIsIGRldmljZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGxvZ01lc3NhZ2UoZXJyb3JMZXZlbCwgIkludmFsaWQgQUxTQSBNSURJIGNsaWVudDogJXMiLCBkZXZpY2UpOworICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICBsb2dNZXNzYWdlKGVycm9yTGV2ZWwsICJUb28gbWFueSBBTFNBIE1JREkgZGV2aWNlIGNvbXBvbmVudHM6ICVzIiwgZGV2aWNlKTsKKyAgICAgICAgfQorICAgICAgfSBlbHNlIHsKKyAgICAgICAgbG9nTWVzc2FnZShlcnJvckxldmVsLCAiTWlzc2luZyBBTFNBIE1JREkgcG9ydCBzcGVjaWZpZXI6ICVzIiwgZGV2aWNlKTsKKyAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgbG9nTWVzc2FnZShlcnJvckxldmVsLCAiTWlzc2luZyBBTFNBIE1JREkgY2xpZW50IHNwZWNpZmllcjogJXMiLCBkZXZpY2UpOworICAgIH0KKworICAgIGRlYWxsb2NhdGVTdHJpbmdzKGNvbXBvbmVudHMpOworICB9IGVsc2UgeworICAgIGxvZ01hbGxvY0Vycm9yKCk7CisgIH0KKworICByZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQKK3VwZGF0ZU1pZGlTdGF0dXMgKE1pZGlEZXZpY2UgKm1pZGkpIHsKKyAgc25kX3NlcV9nZXRfcXVldWVfc3RhdHVzKG1pZGktPnNlcXVlbmNlciwgbWlkaS0+cXVldWUsIG1pZGktPnN0YXR1cyk7Cit9CisKK3N0YXRpYyB2b2lkCitzdGFydE1pZGlUaW1lciAoTWlkaURldmljZSAqbWlkaSkgeworICBpZiAoIW1pZGktPnRpbWUudHZfc2VjICYmICFtaWRpLT50aW1lLnR2X25zZWMpIHsKKyAgICB1cGRhdGVNaWRpU3RhdHVzKG1pZGkpOworICAgIG1pZGktPnRpbWUgPSAqc25kX3NlcV9xdWV1ZV9zdGF0dXNfZ2V0X3JlYWxfdGltZShtaWRpLT5zdGF0dXMpOworICB9Cit9CisKK3N0YXRpYyB2b2lkCitzdG9wTWlkaVRpbWVyIChNaWRpRGV2aWNlICptaWRpKSB7CisgIG1pZGktPnRpbWUudHZfc2VjID0gMDsKKyAgbWlkaS0+dGltZS50dl9uc2VjID0gMDsKK30KKworTWlkaURldmljZSAqCitvcGVuTWlkaURldmljZSAoaW50IGVycm9yTGV2ZWwsIGNvbnN0IGNoYXIgKmRldmljZSkgeworICBNaWRpRGV2aWNlICptaWRpOworCisgIGlmICgobWlkaSA9IG1hbGxvYyhzaXplb2YoKm1pZGkpKSkpIHsKKyAgICBjb25zdCBjaGFyICpzZXF1ZW5jZXJOYW1lID0gImRlZmF1bHQiOworICAgIGludCByZXN1bHQ7CisKKyAgICBpZiAoKHJlc3VsdCA9IHNuZF9zZXFfb3BlbigmbWlkaS0+c2VxdWVuY2VyLCBzZXF1ZW5jZXJOYW1lLCBTTkRfU0VRX09QRU5fT1VUUFVULCAwKSkgPj0gMCkgeworICAgICAgc25kX3NlcV9zZXRfY2xpZW50X25hbWUobWlkaS0+c2VxdWVuY2VyLCBQQUNLQUdFX05BTUUpOworCisgICAgICBpZiAoKG1pZGktPnBvcnQgPSBzbmRfc2VxX2NyZWF0ZV9zaW1wbGVfcG9ydChtaWRpLT5zZXF1ZW5jZXIsICJvdXQwIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU05EX1NFUV9QT1JUX0NBUF9SRUFEfFNORF9TRVFfUE9SVF9DQVBfU1VCU19SRUFELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTTkRfU0VRX1BPUlRfVFlQRV9BUFBMSUNBVElPTikpID49IDApIHsKKyAgICAgICAgaWYgKChtaWRpLT5xdWV1ZSA9IHNuZF9zZXFfYWxsb2NfcXVldWUobWlkaS0+c2VxdWVuY2VyKSkgPj0gMCkgeworICAgICAgICAgIGlmICgocmVzdWx0ID0gc25kX3NlcV9xdWV1ZV9zdGF0dXNfbWFsbG9jKCZtaWRpLT5zdGF0dXMpKSA+PSAwKSB7CisgICAgICAgICAgICBpbnQgY2xpZW50ID0gMDsKKyAgICAgICAgICAgIGludCBwb3J0ID0gMDsKKyAgICAgICAgICAgIGludCBkZXZpY2VPazsKKworICAgICAgICAgICAgaWYgKCpkZXZpY2UpIHsKKyAgICAgICAgICAgICAgZGV2aWNlT2sgPSBwYXJzZU1pZGlEZXZpY2UobWlkaSwgZXJyb3JMZXZlbCwgZGV2aWNlLCAmY2xpZW50LCAmcG9ydCk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICBkZXZpY2VPayA9IGZpbmRNaWRpRGV2aWNlKG1pZGksIGVycm9yTGV2ZWwsICZjbGllbnQsICZwb3J0KTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGRldmljZU9rKSB7CisgICAgICAgICAgICAgIGxvZ01lc3NhZ2UoTE9HX0RFQlVHLCAiQ29ubmVjdGluZyB0byBBTFNBIE1JREkgZGV2aWNlOiAlZDolZCIsIGNsaWVudCwgcG9ydCk7CisKKyAgICAgICAgICAgICAgaWYgKChyZXN1bHQgPSBzbmRfc2VxX2Nvbm5lY3RfdG8obWlkaS0+c2VxdWVuY2VyLCBtaWRpLT5wb3J0LCBjbGllbnQsIHBvcnQpKSA+PSAwKSB7CisgICAgICAgICAgICAgICAgaWYgKChyZXN1bHQgPSBzbmRfc2VxX3N0YXJ0X3F1ZXVlKG1pZGktPnNlcXVlbmNlciwgbWlkaS0+cXVldWUsIE5VTEwpKSA+PSAwKSB7CisgICAgICAgICAgICAgICAgICBzdG9wTWlkaVRpbWVyKG1pZGkpOworICAgICAgICAgICAgICAgICAgcmV0dXJuIG1pZGk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgIGxvZ01lc3NhZ2UoZXJyb3JMZXZlbCwgIkNhbm5vdCBzdGFydCBBTFNBIE1JREkgcXVldWU6ICVkOiVkOiAlcyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsaWVudCwgcG9ydCwgc25kX3N0cmVycm9yKHJlc3VsdCkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBsb2dNZXNzYWdlKGVycm9yTGV2ZWwsICJDYW5ub3QgY29ubmVjdCB0byBBTFNBIE1JREkgZGV2aWNlOiAlZDolZDogJXMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xpZW50LCBwb3J0LCBzbmRfc3RyZXJyb3IocmVzdWx0KSk7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgc25kX3NlcV9xdWV1ZV9zdGF0dXNfZnJlZShtaWRpLT5zdGF0dXMpOworICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBsb2dNZXNzYWdlKGVycm9yTGV2ZWwsICJDYW5ub3QgYWxsb2NhdGUgQUxTQSBNSURJIHF1ZXVlIHN0YXR1cyBjb250YWluZXI6ICVzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgc25kX3N0cmVycm9yKHJlc3VsdCkpOworICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICBsb2dNZXNzYWdlKGVycm9yTGV2ZWwsICJDYW5ub3QgYWxsb2NhdGUgQUxTQSBNSURJIHF1ZXVlOiAlcyIsCisgICAgICAgICAgICAgICAgICAgICBzbmRfc3RyZXJyb3IocmVzdWx0KSk7CisgICAgICAgIH0KKyAgICAgIH0gZWxzZSB7CisgICAgICAgIGxvZ01lc3NhZ2UoZXJyb3JMZXZlbCwgIkNhbm5vdCBjcmVhdGUgQUxTQSBNSURJIG91dHB1dCBwb3J0OiAlcyIsCisgICAgICAgICAgICAgICAgICAgc25kX3N0cmVycm9yKG1pZGktPnBvcnQpKTsKKyAgICAgIH0KKworICAgICAgc25kX3NlcV9jbG9zZShtaWRpLT5zZXF1ZW5jZXIpOworICAgIH0gZWxzZSB7CisgICAgICBsb2dNZXNzYWdlKGVycm9yTGV2ZWwsICJDYW5ub3Qgb3BlbiBBTFNBIHNlcXVlbmNlcjogJXM6ICVzIiwKKyAgICAgICAgICAgICAgICAgc2VxdWVuY2VyTmFtZSwgc25kX3N0cmVycm9yKHJlc3VsdCkpOworICAgIH0KKworICAgIGZyZWUobWlkaSk7CisgIH0gZWxzZSB7CisgICAgbG9nU3lzdGVtRXJyb3IoIk1JREkgZGV2aWNlIGFsbG9jYXRpb24iKTsKKyAgfQorICByZXR1cm4gTlVMTDsKK30KKwordm9pZAorY2xvc2VNaWRpRGV2aWNlIChNaWRpRGV2aWNlICptaWRpKSB7CisgIHNuZF9zZXFfcXVldWVfc3RhdHVzX2ZyZWUobWlkaS0+c3RhdHVzKTsKKyAgc25kX3NlcV9jbG9zZShtaWRpLT5zZXF1ZW5jZXIpOworICBmcmVlKG1pZGkpOworfQorCitpbnQKK2ZsdXNoTWlkaURldmljZSAoTWlkaURldmljZSAqbWlkaSkgeworICB3aGlsZSAoMSkgeworICAgIGludCBkdXJhdGlvbjsKKworICAgIHVwZGF0ZU1pZGlTdGF0dXMobWlkaSk7CisgICAgeworICAgICAgY29uc3Qgc25kX3NlcV9yZWFsX3RpbWVfdCAqdGltZSA9IHNuZF9zZXFfcXVldWVfc3RhdHVzX2dldF9yZWFsX3RpbWUobWlkaS0+c3RhdHVzKTsKKyAgICAgIGludCBzZWNvbmRzID0gbWlkaS0+dGltZS50dl9zZWMgLSB0aW1lLT50dl9zZWM7CisgICAgICBpbnQgbmFub3NlY29uZHMgPSBtaWRpLT50aW1lLnR2X25zZWMgLSB0aW1lLT50dl9uc2VjOworICAgICAgZHVyYXRpb24gPSAoc2Vjb25kcyAqIDEwMDApICsgKG5hbm9zZWNvbmRzIC8gMTAwMDAwMCk7CisgICAgfQorCisgICAgaWYgKGR1cmF0aW9uIDw9IDApIGJyZWFrOworICAgIGFwcHJveGltYXRlRGVsYXkoZHVyYXRpb24pOworICB9CisKKyAgc3RvcE1pZGlUaW1lcihtaWRpKTsKKyAgcmV0dXJuIDE7Cit9CisKK3N0YXRpYyB2b2lkCitwcmVwYXJlTWlkaUV2ZW50IChNaWRpRGV2aWNlICptaWRpLCBzbmRfc2VxX2V2ZW50X3QgKmV2ZW50KSB7CisgIHNuZF9zZXFfZXZfY2xlYXIoZXZlbnQpOworICBzbmRfc2VxX2V2X3NldF9zb3VyY2UoZXZlbnQsIG1pZGktPnBvcnQpOworICBzbmRfc2VxX2V2X3NldF9zdWJzKGV2ZW50KTsKK30KKworc3RhdGljIHZvaWQKK3NjaGVkdWxlTWlkaUV2ZW50IChNaWRpRGV2aWNlICptaWRpLCBzbmRfc2VxX2V2ZW50X3QgKmV2ZW50KSB7CisgIHNuZF9zZXFfZXZfc2NoZWR1bGVfcmVhbChldmVudCwgbWlkaS0+cXVldWUsIDEsICZtaWRpLT50aW1lKTsKK30KKworc3RhdGljIGludAorc2VuZE1pZGlFdmVudCAoTWlkaURldmljZSAqbWlkaSwgc25kX3NlcV9ldmVudF90ICpldmVudCkgeworICBpbnQgcmVzdWx0OworCisgIGlmICgocmVzdWx0ID0gc25kX3NlcV9ldmVudF9vdXRwdXQobWlkaS0+c2VxdWVuY2VyLCBldmVudCkpID49IDApIHsKKyAgICBzbmRfc2VxX2RyYWluX291dHB1dChtaWRpLT5zZXF1ZW5jZXIpOworICAgIHJldHVybiAxOworICB9IGVsc2UgeworICAgIGxvZ01lc3NhZ2UoTE9HX0VSUiwgIkFMU0EgTUlESSB3cml0ZSBlcnJvcjogJXMiLCBzbmRfc3RyZXJyb3IocmVzdWx0KSk7CisgIH0KKyAgcmV0dXJuIDA7Cit9CisKK2ludAorc2V0TWlkaUluc3RydW1lbnQgKE1pZGlEZXZpY2UgKm1pZGksIHVuc2lnbmVkIGNoYXIgY2hhbm5lbCwgdW5zaWduZWQgY2hhciBpbnN0cnVtZW50KSB7CisgIHNuZF9zZXFfZXZlbnRfdCBldmVudDsKKworICBwcmVwYXJlTWlkaUV2ZW50KG1pZGksICZldmVudCk7CisgIHNuZF9zZXFfZXZfc2V0X3BnbWNoYW5nZSgmZXZlbnQsIGNoYW5uZWwsIGluc3RydW1lbnQpOworICByZXR1cm4gc2VuZE1pZGlFdmVudChtaWRpLCAmZXZlbnQpOworfQorCitpbnQKK2JlZ2luTWlkaUJsb2NrIChNaWRpRGV2aWNlICptaWRpKSB7CisgIHN0YXJ0TWlkaVRpbWVyKG1pZGkpOworICByZXR1cm4gMTsKK30KKworaW50CitlbmRNaWRpQmxvY2sgKE1pZGlEZXZpY2UgKm1pZGkpIHsKKyAgcmV0dXJuIDE7Cit9CisKK2ludAorc3RhcnRNaWRpTm90ZSAoTWlkaURldmljZSAqbWlkaSwgdW5zaWduZWQgY2hhciBjaGFubmVsLCB1bnNpZ25lZCBjaGFyIG5vdGUsIHVuc2lnbmVkIGNoYXIgdm9sdW1lKSB7CisgIHNuZF9zZXFfZXZlbnRfdCBldmVudDsKKworICBwcmVwYXJlTWlkaUV2ZW50KG1pZGksICZldmVudCk7CisgIHNuZF9zZXFfZXZfc2V0X25vdGVvbigmZXZlbnQsIGNoYW5uZWwsIG5vdGUsIHZvbHVtZSk7CisgIG1pZGktPm5vdGUgPSBub3RlOworICBzY2hlZHVsZU1pZGlFdmVudChtaWRpLCAmZXZlbnQpOworICByZXR1cm4gc2VuZE1pZGlFdmVudChtaWRpLCAmZXZlbnQpOworfQorCitpbnQKK3N0b3BNaWRpTm90ZSAoTWlkaURldmljZSAqbWlkaSwgdW5zaWduZWQgY2hhciBjaGFubmVsKSB7CisgIHNuZF9zZXFfZXZlbnRfdCBldmVudDsKKworICBwcmVwYXJlTWlkaUV2ZW50KG1pZGksICZldmVudCk7CisgIHNuZF9zZXFfZXZfc2V0X25vdGVvZmYoJmV2ZW50LCBjaGFubmVsLCBtaWRpLT5ub3RlLCAwKTsKKyAgbWlkaS0+bm90ZSA9IDA7CisgIHNjaGVkdWxlTWlkaUV2ZW50KG1pZGksICZldmVudCk7CisgIHJldHVybiBzZW5kTWlkaUV2ZW50KG1pZGksICZldmVudCk7Cit9CisKK2ludAoraW5zZXJ0TWlkaVdhaXQgKE1pZGlEZXZpY2UgKm1pZGksIGludCBkdXJhdGlvbikgeworICBtaWRpLT50aW1lLnR2X3NlYyArPSBkdXJhdGlvbiAvIDEwMDA7CisgIG1pZGktPnRpbWUudHZfbnNlYyArPSAoZHVyYXRpb24gJSAxMDAwKSAqIDEwMDAwMDA7CisKKyAgd2hpbGUgKG1pZGktPnRpbWUudHZfbnNlYyA+PSAxMDAwMDAwMDAwKSB7CisgICAgbWlkaS0+dGltZS50dl9uc2VjIC09IDEwMDAwMDAwMDA7CisgICAgbWlkaS0+dGltZS50dl9zZWMrKzsKKyAgfQorCisgIHJldHVybiAxOworfQpkaWZmIC0tZ2l0IGEvUHJvZ3JhbXMvbWlkaV9kYXJ3aW4uYyBiL1Byb2dyYW1zL21pZGlfZGFyd2luLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDEyOTZiYQotLS0gL2Rldi9udWxsCisrKyBiL1Byb2dyYW1zL21pZGlfZGFyd2luLmMKQEAgLTAsMCArMSwxOTUgQEAKKy8qCisgKiBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorICogICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorICoKKyAqIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorICoKKyAqIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyAqLworCisjaW5jbHVkZSAicHJvbG9ndWUuaCIKKworI2luY2x1ZGUgPENvcmVTZXJ2aWNlcy9Db3JlU2VydmljZXMuaD4KKyNpbmNsdWRlIDxBdWRpb1VuaXQvQXVkaW9Vbml0Lmg+CisjaW5jbHVkZSA8QXVkaW9Ub29sYm94L0F1ZGlvVG9vbGJveC5oPgorCisjaW5jbHVkZSAibG9nLmgiCisjaW5jbHVkZSAibWlkaS5oIgorCitzdHJ1Y3QgTWlkaURldmljZVN0cnVjdCB7CisgIEFVR3JhcGggZ3JhcGg7CisgIEF1ZGlvVW5pdCBzeW50aDsKKyAgLyogTm90ZSB0aGF0IGlzIGN1cnJlbnRseSBwbGF5aW5nLiAqLworICBpbnQgbm90ZTsKK307CisgIAorTWlkaURldmljZSAqCitvcGVuTWlkaURldmljZSAoaW50IGVycm9yTGV2ZWwsIGNvbnN0IGNoYXIgKmRldmljZSkgeworICBNaWRpRGV2aWNlICptaWRpOworICBpbnQgcmVzdWx0OworICBBVU5vZGUgc3ludGhOb2RlLCBvdXROb2RlOworICBDb21wb25lbnREZXNjcmlwdGlvbiBjZDsKKyAgVUludDMyIHByb3BWYWw7CisKKyAgaWYgKCEobWlkaSA9IG1hbGxvYyhzaXplb2YoKm1pZGkpKSkpIHsKKyAgICBsb2dNYWxsb2NFcnJvcigpOworICAgIHJldHVybiBOVUxMOworICB9CisKKyAgLyogQ3JlYXRlIGEgZ3JhcGggd2l0aCBhIHNvZnR3YXJlIHN5bnRoIGFuZCBhIGRlZmF1bHQgb3V0cHV0IHVuaXQuICovCisKKyAgY2QuY29tcG9uZW50TWFudWZhY3R1cmVyID0ga0F1ZGlvVW5pdE1hbnVmYWN0dXJlcl9BcHBsZTsKKyAgY2QuY29tcG9uZW50RmxhZ3MgPSAwOworICBjZC5jb21wb25lbnRGbGFnc01hc2sgPSAwOworCisgIGlmICgocmVzdWx0ID0gTmV3QVVHcmFwaCgmbWlkaS0+Z3JhcGgpKSAhPSBub0VycikgeworICAgIGxvZ01lc3NhZ2UoZXJyb3JMZXZlbCwgIkNhbid0IGNyZWF0ZSBhdWRpbyBncmFwaCBjb21wb25lbnQ6ICVkIiwgcmVzdWx0KTsKKyAgICBnb3RvIGVycjsKKyAgfQorCisgIGNkLmNvbXBvbmVudFR5cGUgPSBrQXVkaW9Vbml0VHlwZV9NdXNpY0RldmljZTsKKyAgY2QuY29tcG9uZW50U3ViVHlwZSA9IGtBdWRpb1VuaXRTdWJUeXBlX0RMU1N5bnRoOworICBpZiAoKHJlc3VsdCA9IEFVR3JhcGhOZXdOb2RlKG1pZGktPmdyYXBoLCAmY2QsIDAsIE5VTEwsICZzeW50aE5vZGUpKQorICAgICAgIT0gbm9FcnIpIHsKKyAgICBsb2dNZXNzYWdlKGVycm9yTGV2ZWwsICJDYW4ndCBjcmVhdGUgc29mdHdhcmUgc3ludGhlcnNpemVyIGNvbXBvbmVudDogJWQiLAorCSAgICAgICByZXN1bHQpOworICAgIGdvdG8gZXJyOworICB9CisKKyAgY2QuY29tcG9uZW50VHlwZSA9IGtBdWRpb1VuaXRUeXBlX091dHB1dDsKKyAgY2QuY29tcG9uZW50U3ViVHlwZSA9IGtBdWRpb1VuaXRTdWJUeXBlX0RlZmF1bHRPdXRwdXQ7CisgIGlmICgocmVzdWx0ID0gQVVHcmFwaE5ld05vZGUobWlkaS0+Z3JhcGgsICZjZCwgMCwgTlVMTCwgJm91dE5vZGUpKQorICAgICAgIT0gbm9FcnIpIHsKKyAgICBsb2dNZXNzYWdlKGVycm9yTGV2ZWwsICJDYW4ndCBjcmVhdGUgZGVmYXVsdCBvdXRwdXQgYXVkaW8gY29tcG9uZW50OiAlZCIsCisJICAgICAgIHJlc3VsdCk7CisgICAgZ290byBlcnI7CisgIH0KKworICBpZiAoKHJlc3VsdCA9IEFVR3JhcGhPcGVuKG1pZGktPmdyYXBoKSkgIT0gbm9FcnIpIHsKKyAgICBsb2dNZXNzYWdlKGVycm9yTGV2ZWwsICJDYW4ndCBvcGVuIGF1ZGlvIGdyYXBoIGNvbXBvbmVudDogJWQiLCByZXN1bHQpOworICAgIGdvdG8gZXJyOworICB9CisKKyAgaWYgKChyZXN1bHQgPSBBVUdyYXBoQ29ubmVjdE5vZGVJbnB1dChtaWRpLT5ncmFwaCwgc3ludGhOb2RlLCAwLCBvdXROb2RlLCAwKSkKKyAgICAgICE9IG5vRXJyKSB7CisgICAgbG9nTWVzc2FnZShlcnJvckxldmVsLCAiQ2FuJ3QgY29ubmVjdCBzeW50aCBhdWRpbyBjb21wb25lbnQgdG8gb3V0cHV0OiAlZCIsCisJICAgICAgIHJlc3VsdCk7CisgICAgZ290byBlcnI7CisgIH0KKworICBpZiAoKHJlc3VsdCA9IEFVR3JhcGhHZXROb2RlSW5mbyhtaWRpLT5ncmFwaCwgc3ludGhOb2RlLCAwLCAwLCAwLAorCQkJCSAgICZtaWRpLT5zeW50aCkpICE9IG5vRXJyKSB7CisgICAgbG9nTWVzc2FnZShlcnJvckxldmVsLCAiQ2FuJ3QgZ2V0IGF1ZGlvIGNvbXBvbmVudCBmb3Igc29mdHdhcmUgc3ludGg6ICVkIiwKKwkgICAgICAgcmVzdWx0KTsKKyAgICBnb3RvIGVycjsKKyAgfQorCisgIGlmICgocmVzdWx0ID0gQVVHcmFwaEluaXRpYWxpemUobWlkaS0+Z3JhcGgpKSAhPSBub0VycikgeworICAgIGxvZ01lc3NhZ2UoZXJyb3JMZXZlbCwgIkNhbid0IGluaXRpYWxpemUgYXVkaW8gZ3JhcGg6ICVkIiwgcmVzdWx0KTsKKyAgICBnb3RvIGVycjsKKyAgfQorCisgIC8qIFR1cm4gb2ZmIHRoZSByZXZlcmIuICBUaGUgdmFsdWUgcmFuZ2UgaXMgLTEyMCB0byA0MCBkQi4gKi8KKyAgcHJvcFZhbCA9IGZhbHNlOworICBpZiAoKHJlc3VsdCA9IEF1ZGlvVW5pdFNldFByb3BlcnR5KG1pZGktPnN5bnRoLAorCQkJCSAgICAga011c2ljRGV2aWNlUHJvcGVydHlfVXNlc0ludGVybmFsUmV2ZXJiLAorCQkJCSAgICAga0F1ZGlvVW5pdFNjb3BlX0dsb2JhbCwgMCwKKwkJCQkgICAgICZwcm9wVmFsLCBzaXplb2YocHJvcFZhbCkpKQorICAgICAgIT0gbm9FcnIpIHsKKyAgICAvKiBTbywgaGF2aW5nIHJldmVyYiBpc24ndCB0aGF0IGNyaXRpY2FsLCBpcyBpdD8gKi8KKyAgICBsb2dNZXNzYWdlKExPR19ERUJVRywgIkNhbid0IHR1cm4gb2Ygc29mdHdhcmUgc3ludGggcmV2ZXJiOiAlZCIsCisJICAgICAgIHJlc3VsdCk7CisgIH0KKworICAvKiBUT0RPOiBNYXliZSBqdXN0IHN0YXJ0IHRoZSBncmFwaCB3aGVuIHdlIGFyZSBnb2luZyB0byB1c2UgaXQ/ICovCisgIGlmICgocmVzdWx0ID0gQVVHcmFwaFN0YXJ0KG1pZGktPmdyYXBoKSkgIT0gbm9FcnIpIHsKKyAgICBsb2dNZXNzYWdlKGVycm9yTGV2ZWwsICJDYW4ndCBzdGFydCBhdWRpbyBncmFwaCBjb21wb25lbnQ6ICVkIiwgcmVzdWx0KTsKKyAgICBnb3RvIGVycjsKKyAgfQorCisgIHJldHVybiBtaWRpOworCisgZXJyOgorICBpZiAobWlkaS0+Z3JhcGgpCisgICAgRGlzcG9zZUFVR3JhcGgobWlkaS0+Z3JhcGgpOworICBmcmVlKG1pZGkpOworICByZXR1cm4gTlVMTDsKK30KKwordm9pZAorY2xvc2VNaWRpRGV2aWNlIChNaWRpRGV2aWNlICptaWRpKSB7CisgIGludCByZXN1bHQ7CisgIGlmIChtaWRpKSB7CisgICAgaWYgKChyZXN1bHQgPSBEaXNwb3NlQVVHcmFwaChtaWRpLT5ncmFwaCkpICE9IG5vRXJyKQorICAgICAgbG9nTWVzc2FnZShMT0dfRVJSLCAiQ2FuJ3QgZGlzcG9zZSBhdWRpbyBncmFwaCBjb21wb25lbnQ6ICVkIiwgcmVzdWx0KTsKKyAgICBmcmVlKG1pZGkpOworICB9Cit9CisKK2ludAorZmx1c2hNaWRpRGV2aWNlIChNaWRpRGV2aWNlICptaWRpKSB7CisgIHJldHVybiAxOworfQorCitpbnQKK3NldE1pZGlJbnN0cnVtZW50IChNaWRpRGV2aWNlICptaWRpLCB1bnNpZ25lZCBjaGFyIGNoYW5uZWwsIHVuc2lnbmVkIGNoYXIgaW5zdHJ1bWVudCkgeworICBpbnQgcmVzdWx0OworICBpZiAoKHJlc3VsdCA9IE11c2ljRGV2aWNlTUlESUV2ZW50KG1pZGktPnN5bnRoLCAweEMwIHwgY2hhbm5lbCwgaW5zdHJ1bWVudCwKKwkJCQkgICAgIDAsIDApKSAhPSBub0VycikKKyAgICBsb2dNZXNzYWdlKExPR19FUlIsICJDYW4ndCBzZXQgTUlESSBpbnN0cnVtZW50OiAlZCIsIHJlc3VsdCk7CisKKyAgcmV0dXJuIHJlc3VsdCA9PSBub0VycjsKK30KKworaW50CitiZWdpbk1pZGlCbG9jayAoTWlkaURldmljZSAqbWlkaSkgeworICByZXR1cm4gMTsKK30KKworaW50CitlbmRNaWRpQmxvY2sgKE1pZGlEZXZpY2UgKm1pZGkpIHsKKyAgcmV0dXJuIDE7Cit9CisKK2ludAorc3RhcnRNaWRpTm90ZSAoTWlkaURldmljZSAqbWlkaSwgdW5zaWduZWQgY2hhciBjaGFubmVsLCB1bnNpZ25lZCBjaGFyIG5vdGUsIHVuc2lnbmVkIGNoYXIgdm9sdW1lKSB7CisgIGludCByZXN1bHQ7CisKKyAgaWYgKChyZXN1bHQgPSBNdXNpY0RldmljZU1JRElFdmVudChtaWRpLT5zeW50aCwgMHg5MCB8IGNoYW5uZWwsIG5vdGUsCisJCQkJICAgICB2b2x1bWUsIDApKSAhPSBub0VycikgeworICAgIGxvZ01lc3NhZ2UoTE9HX0VSUiwgIkNhbid0IHN0YXJ0IE1JREkgbm90ZTogJWQiLCByZXN1bHQpOworICAgIHJldHVybiAwOworICB9CisgIG1pZGktPm5vdGUgPSBub3RlOworCisgIHJldHVybiAxOworfQorCitpbnQKK3N0b3BNaWRpTm90ZSAoTWlkaURldmljZSAqbWlkaSwgdW5zaWduZWQgY2hhciBjaGFubmVsKSB7CisgIGludCByZXN1bHQ7CisKKyAgaWYgKChyZXN1bHQgPSBNdXNpY0RldmljZU1JRElFdmVudChtaWRpLT5zeW50aCwgMHg5MCB8IGNoYW5uZWwsIG1pZGktPm5vdGUsCisJCQkJICAgICAwLCAwKSkgIT0gbm9FcnIpIHsKKyAgICBsb2dNZXNzYWdlKExPR19FUlIsICJDYW4ndCBzdG9wIE1JREkgbm90ZTogJWQiLCByZXN1bHQpOworICAgIHJldHVybiAwOworICB9CisgIG1pZGktPm5vdGUgPSAwOworCisgIHJldHVybiAxOworfQorCitpbnQKK2luc2VydE1pZGlXYWl0IChNaWRpRGV2aWNlICptaWRpLCBpbnQgZHVyYXRpb24pIHsKKyAgdXNsZWVwKGR1cmF0aW9uICogMTAwMCk7CisgIHJldHVybiAxOworfQpkaWZmIC0tZ2l0IGEvUHJvZ3JhbXMvbWlkaV9ub25lLmMgYi9Qcm9ncmFtcy9taWRpX25vbmUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYWQ1ZTBjCi0tLSAvZGV2L251bGwKKysrIGIvUHJvZ3JhbXMvbWlkaV9ub25lLmMKQEAgLTAsMCArMSw2NyBAQAorLyoKKyAqIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisgKiAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisgKgorICogQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKKyNpbmNsdWRlICJwcm9sb2d1ZS5oIgorCisjaW5jbHVkZSAibG9nLmgiCisjaW5jbHVkZSAibWlkaS5oIgorCitNaWRpRGV2aWNlICoKK29wZW5NaWRpRGV2aWNlIChpbnQgZXJyb3JMZXZlbCwgY29uc3QgY2hhciAqZGV2aWNlKSB7CisgIGxvZ01lc3NhZ2UoZXJyb3JMZXZlbCwgIk1JREkgZGV2aWNlIG5vdCBzdXBwb3J0ZWQuIik7CisgIHJldHVybiBOVUxMOworfQorCit2b2lkCitjbG9zZU1pZGlEZXZpY2UgKE1pZGlEZXZpY2UgKm1pZGkpIHsKK30KKworaW50CitmbHVzaE1pZGlEZXZpY2UgKE1pZGlEZXZpY2UgKm1pZGkpIHsKKyAgcmV0dXJuIDE7Cit9CisKK2ludAorc2V0TWlkaUluc3RydW1lbnQgKE1pZGlEZXZpY2UgKm1pZGksIHVuc2lnbmVkIGNoYXIgY2hhbm5lbCwgdW5zaWduZWQgY2hhciBpbnN0cnVtZW50KSB7CisgIHJldHVybiAxOworfQorCitpbnQKK2JlZ2luTWlkaUJsb2NrIChNaWRpRGV2aWNlICptaWRpKSB7CisgIHJldHVybiAxOworfQorCitpbnQKK2VuZE1pZGlCbG9jayAoTWlkaURldmljZSAqbWlkaSkgeworICByZXR1cm4gMTsKK30KKworaW50CitzdGFydE1pZGlOb3RlIChNaWRpRGV2aWNlICptaWRpLCB1bnNpZ25lZCBjaGFyIGNoYW5uZWwsIHVuc2lnbmVkIGNoYXIgbm90ZSwgdW5zaWduZWQgY2hhciB2b2x1bWUpIHsKKyAgcmV0dXJuIDE7Cit9CisKK2ludAorc3RvcE1pZGlOb3RlIChNaWRpRGV2aWNlICptaWRpLCB1bnNpZ25lZCBjaGFyIGNoYW5uZWwpIHsKKyAgcmV0dXJuIDE7Cit9CisKK2ludAoraW5zZXJ0TWlkaVdhaXQgKE1pZGlEZXZpY2UgKm1pZGksIGludCBkdXJhdGlvbikgeworICByZXR1cm4gMTsKK30KZGlmZiAtLWdpdCBhL1Byb2dyYW1zL21pZGlfb3NzLmMgYi9Qcm9ncmFtcy9taWRpX29zcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUzMGMyMzMKLS0tIC9kZXYvbnVsbAorKysgYi9Qcm9ncmFtcy9taWRpX29zcy5jCkBAIC0wLDAgKzEsMjA5IEBACisvKgorICogQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyAqICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyAqCisgKiBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorICoKKyAqIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyAqCisgKiBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisgKi8KKworI2luY2x1ZGUgInByb2xvZ3VlLmgiCisKKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisjaW5jbHVkZSA8ZmNudGwuaD4KKyNpbmNsdWRlIDxzeXMvaW9jdGwuaD4KKyNpbmNsdWRlIDxzeXMvc291bmRjYXJkLmg+CisKKyNpbmNsdWRlICJsb2cuaCIKKyNpbmNsdWRlICJpb19taXNjLmgiCisjaW5jbHVkZSAibWlkaS5oIgorCisjZGVmaW5lIE1JRElfT1NTX0RFVklDRV9QQVRIICIvZGV2L3NlcXVlbmNlciI7CisKK3N0cnVjdCBNaWRpRGV2aWNlU3RydWN0IHsKKyAgaW50IGZpbGVEZXNjcmlwdG9yOworICBpbnQgZGV2aWNlTnVtYmVyOworLypTRVFfREVGSU5FQlVGKDBYODApOyovCisgIHVuc2lnbmVkIGNoYXIgYnVmZmVyWzBYODBdOworICBpbnQgYnVmZmVyTGVuZ3RoOworICBpbnQgYnVmZmVyVXNlZDsKK307CisKKyNpZm5kZWYgU0FNUExFX1RZUEVfQVdFCisjZGVmaW5lIFNBTVBMRV9UWVBFX0FXRSAweDIwCisjZW5kaWYgLyogU0FNUExFX1RZUEVfQVdFICovCisKK3N0YXRpYyBNaWRpRGV2aWNlICptaWRpRGV2aWNlID0gTlVMTDsKKyNkZWZpbmUgX3NlcWJ1ZiBtaWRpRGV2aWNlLT5idWZmZXIKKyNkZWZpbmUgX3NlcWJ1ZmxlbiBtaWRpRGV2aWNlLT5idWZmZXJMZW5ndGgKKyNkZWZpbmUgX3NlcWJ1ZnB0ciBtaWRpRGV2aWNlLT5idWZmZXJVc2VkCisKK3ZvaWQKK3NlcWJ1Zl9kdW1wICh2b2lkKSB7CisgIGlmIChfc2VxYnVmcHRyKQorICAgIGlmICh3cml0ZUZpbGUobWlkaURldmljZS0+ZmlsZURlc2NyaXB0b3IsIF9zZXFidWYsIF9zZXFidWZwdHIpID09IC0xKQorICAgICAgbG9nU3lzdGVtRXJyb3IoIk1JREkgd3JpdGUiKTsKKyAgX3NlcWJ1ZnB0ciA9IDA7Cit9CisKK01pZGlEZXZpY2UgKgorb3Blbk1pZGlEZXZpY2UgKGludCBlcnJvckxldmVsLCBjb25zdCBjaGFyICpkZXZpY2UpIHsKKyAgTWlkaURldmljZSAqbWlkaTsKKyAgaWYgKChtaWRpID0gbWFsbG9jKHNpemVvZigqbWlkaSkpKSkgeworICAgIGlmICghKmRldmljZSkgZGV2aWNlID0gTUlESV9PU1NfREVWSUNFX1BBVEg7CisgICAgaWYgKChtaWRpLT5maWxlRGVzY3JpcHRvciA9IG9wZW4oZGV2aWNlLCBPX1dST05MWSkpICE9IC0xKSB7CisgICAgICB7CisgICAgICAgIGludCBjb3VudDsKKyAgICAgICAgaW50IGF3ZSA9IC0xOworICAgICAgICBpbnQgZm0gPSAtMTsKKyAgICAgICAgaW50IGd1cyA9IC0xOworICAgICAgICBpbnQgZXh0ID0gLTE7CisKKyAgICAgICAgaWYgKGlvY3RsKG1pZGktPmZpbGVEZXNjcmlwdG9yLCBTTkRDVExfU0VRX05SU1lOVEhTLCAmY291bnQpICE9IC0xKSB7CisgICAgICAgICAgaW50IGluZGV4OworICAgICAgICAgIGZvciAoaW5kZXg9MDsgaW5kZXg8Y291bnQ7ICsraW5kZXgpIHsKKyAgICAgICAgICAgIHN0cnVjdCBzeW50aF9pbmZvIGluZm87CisgICAgICAgICAgICBpbmZvLmRldmljZSA9IGluZGV4OworICAgICAgICAgICAgaWYgKGlvY3RsKG1pZGktPmZpbGVEZXNjcmlwdG9yLCBTTkRDVExfU1lOVEhfSU5GTywgJmluZm8pICE9IC0xKSB7CisgICAgICAgICAgICAgIHN3aXRjaCAoaW5mby5zeW50aF90eXBlKSB7CisgICAgICAgICAgICAgICAgY2FzZSBTWU5USF9UWVBFX1NBTVBMRToKKyAgICAgICAgICAgICAgICAgIHN3aXRjaCAoaW5mby5zeW50aF9zdWJ0eXBlKSB7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgU0FNUExFX1RZUEVfQVdFOgorICAgICAgICAgICAgICAgICAgICAgIGF3ZSA9IGluZGV4OworICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAgICAgICAgICAgIGNhc2UgU0FNUExFX1RZUEVfR1VTOgorICAgICAgICAgICAgICAgICAgICAgIGd1cyA9IGluZGV4OworICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICBjYXNlIFNZTlRIX1RZUEVfRk06CisgICAgICAgICAgICAgICAgICBmbSA9IGluZGV4OworICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICBsb2dNZXNzYWdlKExPR19ERUJVRywgIlVua25vd24gc3ludGhlc2l6ZXI6ICVkWyVkXTogJXMiLAorICAgICAgICAgICAgICAgICAgICAgICAgIGluZm8uc3ludGhfdHlwZSwgaW5mby5zeW50aF9zdWJ0eXBlLCBpbmZvLm5hbWUpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgbG9nTWVzc2FnZShlcnJvckxldmVsLCAiQ2Fubm90IGdldCBkZXNjcmlwdGlvbiBmb3Igc3ludGhlc2l6ZXIgJWQ6ICVzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleCwgc3RyZXJyb3IoZXJybm8pKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9CisKKyAgICAgICAgICBpZiAoZ3VzID49IDApCisgICAgICAgICAgICBpZiAoaW9jdGwobWlkaS0+ZmlsZURlc2NyaXB0b3IsIFNORENUTF9TRVFfUkVTRVRTQU1QTEVTLCAmZ3VzKSA9PSAtMSkKKyAgICAgICAgICAgICAgbG9nTWVzc2FnZShlcnJvckxldmVsLCAiQ2Fubm90IHJlc2V0IHNhbXBsZXMgZm9yIGd1cyBzeW50aGVzaXplciAlZDogJXMiLAorICAgICAgICAgICAgICAgICAgICAgICAgIGd1cywgc3RyZXJyb3IoZXJybm8pKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICBsb2dNZXNzYWdlKGVycm9yTGV2ZWwsICJDYW5ub3QgZ2V0IE1JREkgc3ludGhlc2l6ZXIgY291bnQ6ICVzIiwKKyAgICAgICAgICAgICAgICAgICAgIHN0cmVycm9yKGVycm5vKSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoaW9jdGwobWlkaS0+ZmlsZURlc2NyaXB0b3IsIFNORENUTF9TRVFfTlJNSURJUywgJmNvdW50KSAhPSAtMSkgeworICAgICAgICAgIGlmIChjb3VudCA+IDApIGV4dCA9IGNvdW50IC0gMTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICBsb2dNZXNzYWdlKGVycm9yTGV2ZWwsICJDYW5ub3QgZ2V0IE1JREkgZGV2aWNlIGNvdW50OiAlcyIsCisgICAgICAgICAgICAgICAgICAgICBzdHJlcnJvcihlcnJubykpOworICAgICAgICB9CisKKyAgICAgICAgbWlkaS0+ZGV2aWNlTnVtYmVyID0gKGF3ZSA+PSAwKT8gYXdlOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZ3VzID49IDApPyBndXM6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChmbSA+PSAwKT8gZm06CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChleHQgPj0gMCk/IGV4dDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMDsKKyAgICAgIH0KKworICAgICAgbWlkaS0+YnVmZmVyTGVuZ3RoID0gc2l6ZW9mKG1pZGktPmJ1ZmZlcik7CisgICAgICBtaWRpLT5idWZmZXJVc2VkID0gMDsKKworICAgICAgcmV0dXJuIG1pZGk7CisgICAgfSBlbHNlIHsKKyAgICAgIGxvZ01lc3NhZ2UoZXJyb3JMZXZlbCwgIkNhbm5vdCBvcGVuIE1JREkgZGV2aWNlOiAlczogJXMiLCBkZXZpY2UsIHN0cmVycm9yKGVycm5vKSk7CisgICAgfQorCisgICAgZnJlZShtaWRpKTsKKyAgfSBlbHNlIHsKKyAgICBsb2dTeXN0ZW1FcnJvcigiTUlESSBkZXZpY2UgYWxsb2NhdGlvbiIpOworICB9CisgIHJldHVybiBOVUxMOworfQorCit2b2lkCitjbG9zZU1pZGlEZXZpY2UgKE1pZGlEZXZpY2UgKm1pZGkpIHsKKyAgY2xvc2UobWlkaS0+ZmlsZURlc2NyaXB0b3IpOworICBmcmVlKG1pZGkpOworfQorCitzdGF0aWMgdm9pZAorYmVnaW5NaWRpT3BlcmF0aW9uIChNaWRpRGV2aWNlICptaWRpKSB7CisgIG1pZGlEZXZpY2UgPSBtaWRpOworfQorCitzdGF0aWMgaW50CitlbmRNaWRpT3BlcmF0aW9uIChNaWRpRGV2aWNlICptaWRpKSB7CisgIG1pZGlEZXZpY2UgPSBOVUxMOworICByZXR1cm4gMTsKK30KKworaW50CitmbHVzaE1pZGlEZXZpY2UgKE1pZGlEZXZpY2UgKm1pZGkpIHsKKyAgYmVnaW5NaWRpT3BlcmF0aW9uKG1pZGkpOworICBzZXFidWZfZHVtcCgpOworICByZXR1cm4gZW5kTWlkaU9wZXJhdGlvbihtaWRpKTsKK30KKworaW50CitzZXRNaWRpSW5zdHJ1bWVudCAoTWlkaURldmljZSAqbWlkaSwgdW5zaWduZWQgY2hhciBjaGFubmVsLCB1bnNpZ25lZCBjaGFyIGluc3RydW1lbnQpIHsKKyAgYmVnaW5NaWRpT3BlcmF0aW9uKG1pZGkpOworICBTRVFfU0VUX1BBVENIKG1pZGktPmRldmljZU51bWJlciwgY2hhbm5lbCwgaW5zdHJ1bWVudCk7CisgIHJldHVybiBlbmRNaWRpT3BlcmF0aW9uKG1pZGkpOworfQorCitpbnQKK2JlZ2luTWlkaUJsb2NrIChNaWRpRGV2aWNlICptaWRpKSB7CisgIGJlZ2luTWlkaU9wZXJhdGlvbihtaWRpKTsKKyAgU0VRX1NUQVJUX1RJTUVSKCk7CisgIHJldHVybiBlbmRNaWRpT3BlcmF0aW9uKG1pZGkpOworfQorCitpbnQKK2VuZE1pZGlCbG9jayAoTWlkaURldmljZSAqbWlkaSkgeworICBiZWdpbk1pZGlPcGVyYXRpb24obWlkaSk7CisgIFNFUV9TVE9QX1RJTUVSKCk7CisgIHNlcWJ1Zl9kdW1wKCk7CisgIGlvY3RsKG1pZGktPmZpbGVEZXNjcmlwdG9yLCBTTkRDVExfU0VRX1NZTkMpOworICByZXR1cm4gZW5kTWlkaU9wZXJhdGlvbihtaWRpKTsKK30KKworaW50CitzdGFydE1pZGlOb3RlIChNaWRpRGV2aWNlICptaWRpLCB1bnNpZ25lZCBjaGFyIGNoYW5uZWwsIHVuc2lnbmVkIGNoYXIgbm90ZSwgdW5zaWduZWQgY2hhciB2b2x1bWUpIHsKKyAgYmVnaW5NaWRpT3BlcmF0aW9uKG1pZGkpOworICBTRVFfU1RBUlRfTk9URShtaWRpLT5kZXZpY2VOdW1iZXIsIGNoYW5uZWwsIG5vdGUsIDBYN0Yqdm9sdW1lLzEwMCk7CisgIHJldHVybiBlbmRNaWRpT3BlcmF0aW9uKG1pZGkpOworfQorCitpbnQKK3N0b3BNaWRpTm90ZSAoTWlkaURldmljZSAqbWlkaSwgdW5zaWduZWQgY2hhciBjaGFubmVsKSB7CisgIGJlZ2luTWlkaU9wZXJhdGlvbihtaWRpKTsKKyAgU0VRX1NUT1BfTk9URShtaWRpLT5kZXZpY2VOdW1iZXIsIGNoYW5uZWwsIDAsIDApOworICByZXR1cm4gZW5kTWlkaU9wZXJhdGlvbihtaWRpKTsKK30KKworaW50CitpbnNlcnRNaWRpV2FpdCAoTWlkaURldmljZSAqbWlkaSwgaW50IGR1cmF0aW9uKSB7CisgIGJlZ2luTWlkaU9wZXJhdGlvbihtaWRpKTsKKyAgU0VRX0RFTFRBX1RJTUUoKGR1cmF0aW9uICsgOSkgLyAxMCk7CisgIHJldHVybiBlbmRNaWRpT3BlcmF0aW9uKG1pZGkpOworfQpkaWZmIC0tZ2l0IGEvUHJvZ3JhbXMvbWlkaV93aW5kb3dzLmMgYi9Qcm9ncmFtcy9taWRpX3dpbmRvd3MuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMGUzNWJiCi0tLSAvZGV2L251bGwKKysrIGIvUHJvZ3JhbXMvbWlkaV93aW5kb3dzLmMKQEAgLTAsMCArMSwxOTYgQEAKKy8qCisgKiBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorICogICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorICoKKyAqIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorICoKKyAqIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyAqLworCisjaW5jbHVkZSAicHJvbG9ndWUuaCIKKworI2luY2x1ZGUgImxvZy5oIgorI2luY2x1ZGUgInBhcnNlLmgiCisjaW5jbHVkZSAidGltaW5nLmgiCisjaW5jbHVkZSAibWlkaS5oIgorCitzdHJ1Y3QgTWlkaURldmljZVN0cnVjdCB7CisgIEhNSURJT1VUIGhhbmRsZTsKKyAgdW5zaWduZWQgY2hhciBub3RlOworICBpbnQgY291bnQ7CisgIGNoYXIgYnVmZmVyWzBYODBdOworfTsKKwordHlwZWRlZiBlbnVtIHsKKyAgTUlESV9Ob3RlT2ZmICAgICAgICA9IDBYODAsCisgIE1JRElfTm90ZU9uICAgICAgICAgPSAwWDkwLAorICBNSURJX0tleVByZXNzdXJlICAgID0gMFhBMCwKKyAgTUlESV9Db250cm9sQ2hhbmdlICA9IDBYQjAsCisgIE1JRElfUHJvZ3JhbUNoYW5nZSAgPSAwWEMwLAorICBNSURJX0NoYW5uZWxQcmVzdXJlID0gMFhEMCwKKyAgTUlESV9QaXRjaEJlbmQgICAgICA9IDBYRTAsCisgIE1JRElfU3lzdGVtUHJlZml4ICAgPSAwWEYwCit9IE1pZGlFdmVudDsKKworc3RhdGljIHZvaWQKK2xvZ01pZGlPdXRFcnJvciAoTU1SRVNVTFQgZXJyb3IsIGludCBlcnJvckxldmVsLCBjb25zdCBjaGFyICphY3Rpb24pIHsKKyAgY2hhciB0ZXh0W01BWEVSUk9STEVOR1RIXTsKKyAgbWlkaU91dEdldEVycm9yVGV4dChlcnJvciwgdGV4dCwgc2l6ZW9mKHRleHQpKTsKKyAgbG9nTWVzc2FnZShlcnJvckxldmVsLCAiJXMgZXJyb3IgJWQ6ICVzIiwgYWN0aW9uLCBlcnJvciwgdGV4dCk7Cit9CisKK3N0YXRpYyBpbnQKK2FkZE1pZGlNZXNzYWdlIChNaWRpRGV2aWNlICptaWRpLCBjb25zdCB1bnNpZ25lZCBjaGFyICptZXNzYWdlLCBpbnQgbGVuZ3RoKSB7CisgIGlmICgobWlkaS0+Y291bnQgKyBsZW5ndGgpID4gc2l6ZW9mKG1pZGktPmJ1ZmZlcikpCisgICAgaWYgKCFmbHVzaE1pZGlEZXZpY2UobWlkaSkpCisgICAgICByZXR1cm4gMDsKKworICBtZW1jcHkoJm1pZGktPmJ1ZmZlclttaWRpLT5jb3VudF0sIG1lc3NhZ2UsIGxlbmd0aCk7CisgIG1pZGktPmNvdW50ICs9IGxlbmd0aDsKKyAgcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQKK3dyaXRlTWlkaU1lc3NhZ2UgKE1pZGlEZXZpY2UgKm1pZGksIGNvbnN0IHVuc2lnbmVkIGNoYXIgKm1lc3NhZ2UsIGludCBsZW5ndGgpIHsKKyAgaWYgKCFhZGRNaWRpTWVzc2FnZShtaWRpLCBtZXNzYWdlLCBsZW5ndGgpKSByZXR1cm4gMDsKKyAgaWYgKCFmbHVzaE1pZGlEZXZpY2UobWlkaSkpIHJldHVybiAwOworICByZXR1cm4gMTsKK30KKworTWlkaURldmljZSAqCitvcGVuTWlkaURldmljZSAoaW50IGVycm9yTGV2ZWwsIGNvbnN0IGNoYXIgKmRldmljZSkgeworICBNaWRpRGV2aWNlICptaWRpOworICBNTVJFU1VMVCBlcnJvcjsKKyAgaW50IGlkID0gMDsKKyAgc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IGRlZmF1bHREZXZpY2UgPSAiZGVmYXVsdCI7CisKKyAgaWYgKCEqZGV2aWNlKSBkZXZpY2UgPSBkZWZhdWx0RGV2aWNlOworCisgIGlmIChzdHJjbXAoZGV2aWNlLCBkZWZhdWx0RGV2aWNlKSA9PSAwKSB7CisgICAgaWQgPSAtMTsKKyAgfSBlbHNlIGlmICghaXNJbnRlZ2VyKCZpZCwgZGV2aWNlKSB8fCAoaWQgPCAwKSB8fCAoaWQgPj0gbWlkaU91dEdldE51bURldnMoKSkpIHsKKyAgICBpbnQgY291bnQgPSBtaWRpT3V0R2V0TnVtRGV2cygpOworICAgIGZvciAoaWQ9MDsgaWQ8Y291bnQ7ICsraWQpIHsKKyAgICAgIE1JRElPVVRDQVBTIGNhcDsKKyAgICAgIGlmIChtaWRpT3V0R2V0RGV2Q2FwcyhpZCwgJmNhcCwgc2l6ZW9mKGNhcCkpID09IE1NU1lTRVJSX05PRVJST1IpCisgICAgICAgIGlmIChzdHJuY2FzZWNtcChkZXZpY2UsIGNhcC5zelBuYW1lLCBzdHJsZW4oZGV2aWNlKSkgPT0gMCkKKyAgICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBpZiAoaWQgPT0gY291bnQpIHsKKyAgICAgIGxvZ01lc3NhZ2UoZXJyb3JMZXZlbCwgImludmFsaWQgTUlESSBkZXZpY2UgbnVtYmVyOiAlcyIsIGRldmljZSk7CisgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgIH0KKworICBpZiAoKG1pZGkgPSBtYWxsb2Moc2l6ZW9mKCptaWRpKSkpKSB7CisgICAgaWYgKChlcnJvciA9IG1pZGlPdXRPcGVuKCZtaWRpLT5oYW5kbGUsIGlkLCAwLCAwLCBDQUxMQkFDS19OVUxMKSkgPT0gTU1TWVNFUlJfTk9FUlJPUikgeworICAgICAgbWlkaS0+bm90ZSA9IDA7CisgICAgICBtaWRpLT5jb3VudCA9IDA7CisgICAgICByZXR1cm4gbWlkaTsKKyAgICB9IGVsc2UgeworICAgICAgbG9nTWlkaU91dEVycm9yKGVycm9yLCBlcnJvckxldmVsLCAiTUlESSBkZXZpY2Ugb3BlbiIpOworICAgIH0KKworICAgIGZyZWUobWlkaSk7CisgIH0gZWxzZSB7CisgICAgbG9nU3lzdGVtRXJyb3IoIk1JREkgZGV2aWNlIGFsbG9jYXRpb24iKTsKKyAgfQorICByZXR1cm4gTlVMTDsKK30KKwordm9pZAorY2xvc2VNaWRpRGV2aWNlIChNaWRpRGV2aWNlICptaWRpKSB7CisgIGZsdXNoTWlkaURldmljZShtaWRpKTsKKyAgbWlkaU91dENsb3NlKG1pZGktPmhhbmRsZSk7CisgIGZyZWUobWlkaSk7Cit9CisKK2ludAorZmx1c2hNaWRpRGV2aWNlIChNaWRpRGV2aWNlICptaWRpKSB7CisgIGludCBvayA9IDE7CisKKyAgaWYgKG1pZGktPmNvdW50ID4gMCkgeworICAgIE1NUkVTVUxUIGVycm9yOworICAgIE1JRElIRFIgaGVhZGVyOworICAgIAorICAgIGhlYWRlci5scERhdGEgPSBtaWRpLT5idWZmZXI7CisgICAgaGVhZGVyLmR3QnVmZmVyTGVuZ3RoID0gbWlkaS0+Y291bnQ7CisgICAgaGVhZGVyLmR3RmxhZ3MgPSAwOworCisgICAgaWYgKChlcnJvciA9IG1pZGlPdXRQcmVwYXJlSGVhZGVyKG1pZGktPmhhbmRsZSwgJmhlYWRlciwgc2l6ZW9mKGhlYWRlcikpKSA9PSBNTVNZU0VSUl9OT0VSUk9SKSB7CisgICAgICBpZiAoKGVycm9yID0gbWlkaU91dExvbmdNc2cobWlkaS0+aGFuZGxlLCAmaGVhZGVyLCBzaXplb2YoaGVhZGVyKSkpID09IE1NU1lTRVJSX05PRVJST1IpIHsKKyAgICAgICAgbWlkaS0+Y291bnQgPSAwOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgbG9nTWlkaU91dEVycm9yKGVycm9yLCBMT0dfRVJSLCAibWlkaU91dExvbmdNc2ciKTsKKyAgICAgICAgb2sgPSAwOworICAgICAgfQorCisgICAgICB3aGlsZSAoKGVycm9yID0gbWlkaU91dFVucHJlcGFyZUhlYWRlcihtaWRpLT5oYW5kbGUsICZoZWFkZXIsIHNpemVvZihoZWFkZXIpKSkgPT0gTUlESUVSUl9TVElMTFBMQVlJTkcpIHsKKyAgICAgICAgYXBwcm94aW1hdGVEZWxheSgxKTsKKyAgICAgIH0KKworICAgICAgaWYgKGVycm9yICE9IE1NU1lTRVJSX05PRVJST1IpIHsKKyAgICAgICAgbG9nTWlkaU91dEVycm9yKGVycm9yLCBMT0dfRVJSLCAibWlkaU91dFVucHJlcGFyZUhlYWRlciIpOworICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICBsb2dNaWRpT3V0RXJyb3IoZXJyb3IsIExPR19FUlIsICJtaWRpT3V0UHJlcGFyZUhlYWRlciIpOworICAgICAgb2sgPSAwOworICAgIH0KKyAgfQorCisgIHJldHVybiBvazsKK30KKworaW50CitzZXRNaWRpSW5zdHJ1bWVudCAoTWlkaURldmljZSAqbWlkaSwgdW5zaWduZWQgY2hhciBjaGFubmVsLCB1bnNpZ25lZCBjaGFyIGluc3RydW1lbnQpIHsKKyAgY29uc3QgdW5zaWduZWQgY2hhciBtZXNzYWdlW10gPSB7CisgICAgTUlESV9Qcm9ncmFtQ2hhbmdlfGNoYW5uZWwsIGluc3RydW1lbnQKKyAgfTsKKyAgcmV0dXJuIHdyaXRlTWlkaU1lc3NhZ2UobWlkaSwgbWVzc2FnZSwgc2l6ZW9mKG1lc3NhZ2UpKTsKK30KKworaW50CitiZWdpbk1pZGlCbG9jayAoTWlkaURldmljZSAqbWlkaSkgeworICByZXR1cm4gMTsKK30KKworaW50CitlbmRNaWRpQmxvY2sgKE1pZGlEZXZpY2UgKm1pZGkpIHsKKyAgcmV0dXJuIDE7Cit9CisKK2ludAorc3RhcnRNaWRpTm90ZSAoTWlkaURldmljZSAqbWlkaSwgdW5zaWduZWQgY2hhciBjaGFubmVsLCB1bnNpZ25lZCBjaGFyIG5vdGUsIHVuc2lnbmVkIGNoYXIgdm9sdW1lKSB7CisgIGNvbnN0IHVuc2lnbmVkIGNoYXIgbWVzc2FnZVtdID0geworICAgIE1JRElfTm90ZU9ufGNoYW5uZWwsIG5vdGUsICgwWDdGICogdm9sdW1lIC8gMTAwKQorICB9OworICBpbnQgb2sgPSB3cml0ZU1pZGlNZXNzYWdlKG1pZGksIG1lc3NhZ2UsIHNpemVvZihtZXNzYWdlKSk7CisgIGlmIChvaykgbWlkaS0+bm90ZSA9IG5vdGU7CisgIHJldHVybiBvazsKK30KKworaW50CitzdG9wTWlkaU5vdGUgKE1pZGlEZXZpY2UgKm1pZGksIHVuc2lnbmVkIGNoYXIgY2hhbm5lbCkgeworICBjb25zdCB1bnNpZ25lZCBjaGFyIG1lc3NhZ2VbXSA9IHsKKyAgICBNSURJX05vdGVPZmZ8Y2hhbm5lbCwgbWlkaS0+bm90ZSwgMAorICB9OworICBpbnQgb2sgPSB3cml0ZU1pZGlNZXNzYWdlKG1pZGksIG1lc3NhZ2UsIHNpemVvZihtZXNzYWdlKSk7CisgIGlmIChvaykgbWlkaS0+bm90ZSA9IDA7CisgIHJldHVybiBvazsKK30KKworaW50CitpbnNlcnRNaWRpV2FpdCAoTWlkaURldmljZSAqbWlkaSwgaW50IGR1cmF0aW9uKSB7CisgIGFwcHJveGltYXRlRGVsYXkoZHVyYXRpb24pOworICByZXR1cm4gMTsKK30KZGlmZiAtLWdpdCBhL1Byb2dyYW1zL21rZHJ2dGFiIGIvUHJvZ3JhbXMvbWtkcnZ0YWIKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uM2JlODY2ZQotLS0gL2Rldi9udWxsCisrKyBiL1Byb2dyYW1zL21rZHJ2dGFiCkBAIC0wLDAgKzEsNTQgQEAKKyMhL2Jpbi9zaAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorIyAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyMKKyMgQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorIworIyBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorIworIyBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisjIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyMgbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisjCisjIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK3Byb2dyYW1OYW1lPSIkezB9IgorcHJvZ3JhbU1lc3NhZ2UoKSB7CisgICBlY2hvID4mMiAiJHtwcm9ncmFtTmFtZX06ICR7MX0iCit9CitzeW50YXhFcnJvcigpIHsKKyAgIFsgLW4gIiR7MX0iIF0gJiYgcHJvZ3JhbU1lc3NhZ2UgIiR7MX0iCisgICBleGl0IDIKK30KKworaWYgWyAiJHsjfSIgLWVxIDAgXQordGhlbgorICAgc3ludGF4RXJyb3IgIm1pc3NpbmcgZHJpdmVyIHR5cGUuIgorZmkKK2RyaXZlclR5cGU9IiR7MX0iCitzaGlmdAorCitpZiBbICIkeyN9IiAtZXEgMCBdCit0aGVuCisgICBzeW50YXhFcnJvciAibWlzc2luZyBzeW1ib2wgcHJlZml4LiIKK2ZpCitzeW1ib2xQcmVmaXg9IiR7MX0iCitzaGlmdAorCitmb3IgZHJpdmVyQ29kZQorZG8KKyAgIGVjaG8gImV4dGVybiBjb25zdCAke2RyaXZlclR5cGV9ICR7c3ltYm9sUHJlZml4fSR7ZHJpdmVyQ29kZX07IgorZG9uZQorCitlY2hvICJzdGF0aWMgY29uc3QgRHJpdmVyRW50cnkgZHJpdmVyVGFibGVbXSA9IHsiCitmb3IgZHJpdmVyQ29kZQorZG8KKyAgIGVjaG8gIiAgeyYke3N5bWJvbFByZWZpeH0ke2RyaXZlckNvZGV9LCAmJHtzeW1ib2xQcmVmaXh9JHtkcml2ZXJDb2RlfS5kZWZpbml0aW9ufSwiCitkb25lCitlY2hvICIgIHtOVUxMLCBOVUxMfSIKK2VjaG8gIn07IgpkaWZmIC0tZ2l0IGEvUHJvZ3JhbXMvbW50ZnNfbGludXguYyBiL1Byb2dyYW1zL21udGZzX2xpbnV4LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDIzZGUzNQotLS0gL2Rldi9udWxsCisrKyBiL1Byb2dyYW1zL21udGZzX2xpbnV4LmMKQEAgLTAsMCArMSwyOCBAQAorLyoKKyAqIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisgKiAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisgKgorICogQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKKyNpbmNsdWRlICJwcm9sb2d1ZS5oIgorCisjaW5jbHVkZSA8c3lzL21vdW50Lmg+CisKKyNpbmNsdWRlICJtbnRmcy5oIgorCitpbnQKK21vdW50RmlsZVN5c3RlbSAoY29uc3QgY2hhciAqcGF0aCwgY29uc3QgY2hhciAqcmVmZXJlbmNlLCBjb25zdCBjaGFyICp0eXBlKSB7CisgIHJldHVybiBtb3VudChyZWZlcmVuY2UsIHBhdGgsIHR5cGUsIDAsIE5VTEwpICE9IC0xOworfQpkaWZmIC0tZ2l0IGEvUHJvZ3JhbXMvbW50ZnNfbm9uZS5jIGIvUHJvZ3JhbXMvbW50ZnNfbm9uZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFhN2VmZDAKLS0tIC9kZXYvbnVsbAorKysgYi9Qcm9ncmFtcy9tbnRmc19ub25lLmMKQEAgLTAsMCArMSwyOSBAQAorLyoKKyAqIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisgKiAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisgKgorICogQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKKyNpbmNsdWRlICJwcm9sb2d1ZS5oIgorCisjaW5jbHVkZSA8ZXJybm8uaD4KKworI2luY2x1ZGUgIm1udGZzLmgiCisKK2ludAorbW91bnRGaWxlU3lzdGVtIChjb25zdCBjaGFyICpwYXRoLCBjb25zdCBjaGFyICpyZWZlcmVuY2UsIGNvbnN0IGNoYXIgKnR5cGUpIHsKKyAgZXJybm8gPSBFTk9TWVM7CisgIHJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvUHJvZ3JhbXMvbW50cHQuYyBiL1Byb2dyYW1zL21udHB0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTFlOWM3MgotLS0gL2Rldi9udWxsCisrKyBiL1Byb2dyYW1zL21udHB0LmMKQEAgLTAsMCArMSwxNTAgQEAKKy8qCisgKiBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorICogICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorICoKKyAqIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorICoKKyAqIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyAqLworCisjaW5jbHVkZSAicHJvbG9ndWUuaCIKKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKworI2luY2x1ZGUgImxvZy5oIgorI2luY2x1ZGUgInBhcmFtZXRlcnMuaCIKKyNpbmNsdWRlICJtbnRmcy5oIgorI2luY2x1ZGUgImFzeW5jX2FsYXJtLmgiCisjaW5jbHVkZSAibW50cHQuaCIKKworI2lmIGRlZmluZWQoVVNFX1BLR19NTlRQVF9OT05FKQorI2luY2x1ZGUgIm1udHB0X25vbmUuaCIKKyNlbGlmIGRlZmluZWQoVVNFX1BLR19NTlRQVF9NTlRFTlQpCisjaW5jbHVkZSAibW50cHRfbW50ZW50LmgiCisjZWxpZiBkZWZpbmVkKFVTRV9QS0dfTU5UUFRfTU5UVEFCKQorI2luY2x1ZGUgIm1udHB0X21udHRhYi5oIgorI2Vsc2UgLyogbW91bnQgcG9pbnQgcGFja2FnZSAqLworI2Vycm9yIG1vdW50IHBvaW50IHBhY2thZ2Ugbm90IHNlbGVjdGVkCisjaW5jbHVkZSAibW50cHRfbm9uZS5oIgorI2VuZGlmIC8qIG1vdW50IHBvaW50IHBhY2thZ2UgKi8KKworI2luY2x1ZGUgIm1udHB0X2ludGVybmFsLmgiCisKKyNpZiBkZWZpbmVkKE1OVE9QVF9SVykKKyNkZWZpbmUgTU9VTlRfT1BUSU9OX1JXIE1OVE9QVF9SVworI2Vsc2UgLyogTU9VTlRfT1BUSU9OX1JXICovCisjZGVmaW5lIE1PVU5UX09QVElPTl9SVyAicnciCisjZW5kaWYgLyogTU9VTlRfT1BUSU9OX1JXICovCisKK2NoYXIgKgorZmluZE1vdW50UG9pbnQgKE1vdW50UG9pbnRUZXN0ZXIgdGVzdCkgeworICBjaGFyICpwYXRoID0gTlVMTDsKKyAgRklMRSAqdGFibGU7CisKKyAgaWYgKCh0YWJsZSA9IG9wZW5Nb3VudHNUYWJsZSgwKSkpIHsKKyAgICBNb3VudEVudHJ5ICplbnRyeTsKKworICAgIHdoaWxlICgoZW50cnkgPSByZWFkTW91bnRzVGFibGUodGFibGUpKSkgeworICAgICAgaWYgKHRlc3QoZW50cnktPm1vdW50UGF0aCwgZW50cnktPm1vdW50VHlwZSkpIHsKKyAgICAgICAgaWYgKCEocGF0aCA9IHN0cmR1cChlbnRyeS0+bW91bnRQYXRoKSkpIGxvZ01hbGxvY0Vycm9yKCk7CisgICAgICAgIGJyZWFrOworICAgICAgfQorICAgIH0KKworICAgIGNsb3NlTW91bnRzVGFibGUodGFibGUpOworICB9CisKKyAgcmV0dXJuIHBhdGg7Cit9CisKK3N0YXRpYyB2b2lkIHVwZGF0ZU1vdW50c1RhYmxlIChNb3VudEVudHJ5ICplbnRyeSk7CisKK0FTWU5DX0FMQVJNX0NBTExCQUNLKHJldHJ5TW91bnRzVGFibGVVcGRhdGUpIHsKKyAgTW91bnRFbnRyeSAqZW50cnkgPSBwYXJhbWV0ZXJzLT5kYXRhOworICB1cGRhdGVNb3VudHNUYWJsZShlbnRyeSk7Cit9CisKK3N0YXRpYyB2b2lkCit1cGRhdGVNb3VudHNUYWJsZSAoTW91bnRFbnRyeSAqZW50cnkpIHsKKyAgaW50IHJldHJ5ID0gMDsKKworICB7CisgICAgRklMRSAqdGFibGU7CisKKyAgICBpZiAoKHRhYmxlID0gb3Blbk1vdW50c1RhYmxlKDEpKSkgeworICAgICAgYWRkTW91bnRFbnRyeSh0YWJsZSwgZW50cnkpOworICAgICAgY2xvc2VNb3VudHNUYWJsZSh0YWJsZSk7CisgICAgfSBlbHNlIGlmICgoZXJybm8gPT0gRVJPRlMpIHx8IChlcnJubyA9PSBFQUNDRVMpKSB7CisgICAgICByZXRyeSA9IDE7CisgICAgfQorICB9CisKKyAgaWYgKHJldHJ5KSB7CisgICAgYXN5bmNOZXdSZWxhdGl2ZUFsYXJtKE5VTEwsIE1PVU5UX1RBQkxFX1VQREFURV9SRVRSWV9JTlRFUlZBTCwgcmV0cnlNb3VudHNUYWJsZVVwZGF0ZSwgZW50cnkpOworICB9IGVsc2UgeworICAgIGlmIChlbnRyeS0+bW91bnRQYXRoKSBmcmVlKGVudHJ5LT5tb3VudFBhdGgpOworICAgIGlmIChlbnRyeS0+bW91bnRSZWZlcmVuY2UpIGZyZWUoZW50cnktPm1vdW50UmVmZXJlbmNlKTsKKyAgICBpZiAoZW50cnktPm1vdW50VHlwZSkgZnJlZShlbnRyeS0+bW91bnRUeXBlKTsKKyAgICBpZiAoZW50cnktPm1vdW50T3B0aW9ucykgZnJlZShlbnRyeS0+bW91bnRPcHRpb25zKTsKKyAgICBmcmVlKGVudHJ5KTsKKyAgfQorfQorCitpbnQKK21ha2VNb3VudFBvaW50IChjb25zdCBjaGFyICpwYXRoLCBjb25zdCBjaGFyICpyZWZlcmVuY2UsIGNvbnN0IGNoYXIgKnR5cGUpIHsKKyAgaWYgKG1vdW50RmlsZVN5c3RlbShwYXRoLCByZWZlcmVuY2UsIHR5cGUpKSB7CisgICAgTW91bnRFbnRyeSAqZW50cnk7CisKKyAgICBsb2dNZXNzYWdlKExPR19OT1RJQ0UsICJmaWxlIHN5c3RlbSBtb3VudGVkOiAlc1slc10gLT4gJXMiLAorICAgICAgICAgICAgICAgdHlwZSwgcmVmZXJlbmNlLCBwYXRoKTsKKworICAgIGlmICgoZW50cnkgPSBtYWxsb2Moc2l6ZW9mKCplbnRyeSkpKSkgeworICAgICAgbWVtc2V0KGVudHJ5LCAwLCBzaXplb2YoKmVudHJ5KSk7CisKKyAgICAgIGlmICgoZW50cnktPm1vdW50UGF0aCA9IHN0cmR1cChwYXRoKSkpIHsKKyAgICAgICAgaWYgKChlbnRyeS0+bW91bnRSZWZlcmVuY2UgPSBzdHJkdXAocmVmZXJlbmNlKSkpIHsKKyAgICAgICAgICBpZiAoKGVudHJ5LT5tb3VudFR5cGUgPSBzdHJkdXAodHlwZSkpKSB7CisgICAgICAgICAgICBpZiAoKGVudHJ5LT5tb3VudE9wdGlvbnMgPSBzdHJkdXAoTU9VTlRfT1BUSU9OX1JXKSkpIHsKKyAgICAgICAgICAgICAgdXBkYXRlTW91bnRzVGFibGUoZW50cnkpOworICAgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgIGxvZ01hbGxvY0Vycm9yKCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGZyZWUoZW50cnktPm1vdW50VHlwZSk7CisgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGxvZ01hbGxvY0Vycm9yKCk7CisgICAgICAgICAgfQorCisgICAgICAgICAgZnJlZShlbnRyeS0+bW91bnRSZWZlcmVuY2UpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgIGxvZ01hbGxvY0Vycm9yKCk7CisgICAgICAgIH0KKworICAgICAgICBmcmVlKGVudHJ5LT5tb3VudFBhdGgpOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgbG9nTWFsbG9jRXJyb3IoKTsKKyAgICAgIH0KKworICAgICAgZnJlZShlbnRyeSk7CisgICAgfSBlbHNlIHsKKyAgICAgIGxvZ01hbGxvY0Vycm9yKCk7CisgICAgfQorICB9IGVsc2UgeworICAgIGxvZ01lc3NhZ2UoTE9HX0VSUiwgImZpbGUgc3lzdGVtIG1vdW50IGVycm9yOiAlc1slc10gLT4gJXM6ICVzIiwKKyAgICAgICAgICAgICAgIHR5cGUsIHJlZmVyZW5jZSwgcGF0aCwgc3RyZXJyb3IoZXJybm8pKTsKKyAgfQorCisgIHJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvUHJvZ3JhbXMvbW50cHRfaW50ZXJuYWwuaCBiL1Byb2dyYW1zL21udHB0X2ludGVybmFsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzQzZGFhMgotLS0gL2Rldi9udWxsCisrKyBiL1Byb2dyYW1zL21udHB0X2ludGVybmFsLmgKQEAgLTAsMCArMSwzNyBAQAorLyoKKyAqIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisgKiAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisgKgorICogQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKKyNpZm5kZWYgQlJMVFRZX0lOQ0xVREVEX01OVFBUX0lOVEVSTkFMCisjZGVmaW5lIEJSTFRUWV9JTkNMVURFRF9NTlRQVF9JTlRFUk5BTAorCisjaW5jbHVkZSA8c3RkaW8uaD4KKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZiAvKiBfX2NwbHVzcGx1cyAqLworCitleHRlcm4gRklMRSAqb3Blbk1vdW50c1RhYmxlIChpbnQgdXBkYXRlKTsKK2V4dGVybiB2b2lkIGNsb3NlTW91bnRzVGFibGUgKEZJTEUgKnRhYmxlKTsKK2V4dGVybiBNb3VudEVudHJ5ICpyZWFkTW91bnRzVGFibGUgKEZJTEUgKnRhYmxlKTsKK2V4dGVybiBpbnQgYWRkTW91bnRFbnRyeSAoRklMRSAqdGFibGUsIE1vdW50RW50cnkgKmVudHJ5KTsKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYgLyogX19jcGx1c3BsdXMgKi8KKworI2VuZGlmIC8qIEJSTFRUWV9JTkNMVURFRF9NTlRQVF9JTlRFUk5BTCAqLwpkaWZmIC0tZ2l0IGEvUHJvZ3JhbXMvbW50cHRfbW50ZW50LmMgYi9Qcm9ncmFtcy9tbnRwdF9tbnRlbnQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MWU1ODk1Ci0tLSAvZGV2L251bGwKKysrIGIvUHJvZ3JhbXMvbW50cHRfbW50ZW50LmMKQEAgLTAsMCArMSw2MCBAQAorLyoKKyAqIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisgKiAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisgKgorICogQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKKyNpbmNsdWRlICJwcm9sb2d1ZS5oIgorCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorCisjaW5jbHVkZSAibG9nLmgiCisKKyNpbmNsdWRlICJtbnRwdF9tbnRlbnQuaCIKKyNpbmNsdWRlICJtbnRwdF9pbnRlcm5hbC5oIgorCitGSUxFICoKK29wZW5Nb3VudHNUYWJsZSAoaW50IHVwZGF0ZSkgeworICBGSUxFICp0YWJsZSA9IHNldG1udGVudChNT1VOVFNfVEFCTEVfUEFUSCwgKHVwZGF0ZT8gImEiOiAiciIpKTsKKyAgaWYgKCF0YWJsZSkKKyAgICBsb2dNZXNzYWdlKChlcnJubyA9PSBFTk9FTlQpPyBMT0dfV0FSTklORzogTE9HX0VSUiwKKyAgICAgICAgICAgICAgICJtb3VudGVkIGZpbGUgc3lzdGVtcyB0YWJsZSBvcGVuIGVycm9yOiAlczogJXMiLAorICAgICAgICAgICAgICAgTU9VTlRTX1RBQkxFX1BBVEgsIHN0cmVycm9yKGVycm5vKSk7CisgIHJldHVybiB0YWJsZTsKK30KKwordm9pZAorY2xvc2VNb3VudHNUYWJsZSAoRklMRSAqdGFibGUpIHsKKyAgZW5kbW50ZW50KHRhYmxlKTsKK30KKworTW91bnRFbnRyeSAqCityZWFkTW91bnRzVGFibGUgKEZJTEUgKnRhYmxlKSB7CisgIHJldHVybiBnZXRtbnRlbnQodGFibGUpOworfQorCitpbnQKK2FkZE1vdW50RW50cnkgKEZJTEUgKnRhYmxlLCBNb3VudEVudHJ5ICplbnRyeSkgeworI2lmZGVmIEhBVkVfQURETU5URU5UCisgIGlmIChhZGRtbnRlbnQodGFibGUsIGVudHJ5KSkgeworICAgIGxvZ01lc3NhZ2UoTE9HX0VSUiwgIm1vdW50cyB0YWJsZSBlbnRyeSBhZGQgZXJyb3I6ICVzWyVzXSAtPiAlczogJXMiLAorICAgICAgICAgICAgICAgZW50cnktPm1udF90eXBlLCBlbnRyeS0+bW50X2ZzbmFtZSwgZW50cnktPm1udF9kaXIsIHN0cmVycm9yKGVycm5vKSk7CisgICAgcmV0dXJuIDA7CisgIH0KKyNlbmRpZiAvKiBIQVZFX0FERE1OVEVOVCAqLworICByZXR1cm4gMTsKK30KZGlmZiAtLWdpdCBhL1Byb2dyYW1zL21udHB0X21udGVudC5oIGIvUHJvZ3JhbXMvbW50cHRfbW50ZW50LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDQ4NmQzZgotLS0gL2Rldi9udWxsCisrKyBiL1Byb2dyYW1zL21udHB0X21udGVudC5oCkBAIC0wLDAgKzEsNDQgQEAKKy8qCisgKiBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorICogICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorICoKKyAqIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorICoKKyAqIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyAqLworCisjaWZuZGVmIEJSTFRUWV9JTkNMVURFRF9NTlRQVF9NTlRFTlQKKyNkZWZpbmUgQlJMVFRZX0lOQ0xVREVEX01OVFBUX01OVEVOVAorCisjaW5jbHVkZSA8bW50ZW50Lmg+CisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYgLyogX19jcGx1c3BsdXMgKi8KKworI2lmIGRlZmluZWQoTU9VTlRFRCkKKyNkZWZpbmUgTU9VTlRTX1RBQkxFX1BBVEggTU9VTlRFRAorI2VsaWYgZGVmaW5lZChNTlRfTU5UVEFCKQorI2RlZmluZSBNT1VOVFNfVEFCTEVfUEFUSCBNTlRfTU5UVEFCCisjZW5kaWYgLyogTU9VTlRTX1RBQkxFX1BBVEggKi8KKwordHlwZWRlZiBzdHJ1Y3QgbW50ZW50IE1vdW50RW50cnk7CisjZGVmaW5lIG1vdW50UGF0aCBtbnRfZGlyCisjZGVmaW5lIG1vdW50UmVmZXJlbmNlIG1udF9mc25hbWUKKyNkZWZpbmUgbW91bnRUeXBlIG1udF90eXBlCisjZGVmaW5lIG1vdW50T3B0aW9ucyBtbnRfb3B0cworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZiAvKiBfX2NwbHVzcGx1cyAqLworCisjZW5kaWYgLyogQlJMVFRZX0lOQ0xVREVEX01OVFBUX01OVEVOVCAqLwpkaWZmIC0tZ2l0IGEvUHJvZ3JhbXMvbW50cHRfbW50dGFiLmMgYi9Qcm9ncmFtcy9tbnRwdF9tbnR0YWIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNGMyNzVkCi0tLSAvZGV2L251bGwKKysrIGIvUHJvZ3JhbXMvbW50cHRfbW50dGFiLmMKQEAgLTAsMCArMSw1OSBAQAorLyoKKyAqIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisgKiAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisgKgorICogQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKKyNpbmNsdWRlICJwcm9sb2d1ZS5oIgorCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorCisjaW5jbHVkZSAibG9nLmgiCisKKyNpbmNsdWRlICJtbnRwdF9tbnR0YWIuaCIKKyNpbmNsdWRlICJtbnRwdF9pbnRlcm5hbC5oIgorCitGSUxFICoKK29wZW5Nb3VudHNUYWJsZSAoaW50IHVwZGF0ZSkgeworICBGSUxFICp0YWJsZSA9IGZvcGVuKE1OVFRBQiwgKHVwZGF0ZT8gImEiOiAiciIpKTsKKyAgaWYgKCF0YWJsZSkKKyAgICBsb2dNZXNzYWdlKChlcnJubyA9PSBFTk9FTlQpPyBMT0dfV0FSTklORzogTE9HX0VSUiwKKyAgICAgICAgICAgICAgICJtb3VudGVkIGZpbGUgc3lzdGVtcyB0YWJsZSBvcGVuIGVycm9yOiAlczogJXMiLAorICAgICAgICAgICAgICAgTU5UVEFCLCBzdHJlcnJvcihlcnJubykpOworICByZXR1cm4gdGFibGU7Cit9CisKK3ZvaWQKK2Nsb3NlTW91bnRzVGFibGUgKEZJTEUgKnRhYmxlKSB7CisgIGZjbG9zZSh0YWJsZSk7Cit9CisKK01vdW50RW50cnkgKgorcmVhZE1vdW50c1RhYmxlIChGSUxFICp0YWJsZSkgeworICBzdGF0aWMgc3RydWN0IG1udHRhYiBlbnRyeTsKKyAgaWYgKGdldG1udGVudCh0YWJsZSwgJmVudHJ5KSA9PSAwKSByZXR1cm4gJmVudHJ5OworICByZXR1cm4gTlVMTDsKK30KKworaW50CithZGRNb3VudEVudHJ5IChGSUxFICp0YWJsZSwgTW91bnRFbnRyeSAqZW50cnkpIHsKKyAgZXJybm8gPSBFTk9TWVM7CisgIGlmICghcHV0bW50ZW50KHRhYmxlLCBlbnRyeSkpIHJldHVybiAxOworICBsb2dNZXNzYWdlKExPR19FUlIsICJtb3VudHMgdGFibGUgZW50cnkgYWRkIGVycm9yOiAlc1slc10gLT4gJXM6ICVzIiwKKyAgICAgICAgICAgICBlbnRyeS0+bW50X2ZzdHlwZSwgZW50cnktPm1udF9zcGVjaWFsLCBlbnRyeS0+bW50X21vdW50cCwgc3RyZXJyb3IoZXJybm8pKTsKKyAgcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9Qcm9ncmFtcy9tbnRwdF9tbnR0YWIuaCBiL1Byb2dyYW1zL21udHB0X21udHRhYi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM0MjIyYjAKLS0tIC9kZXYvbnVsbAorKysgYi9Qcm9ncmFtcy9tbnRwdF9tbnR0YWIuaApAQCAtMCwwICsxLDM4IEBACisvKgorICogQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyAqICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyAqCisgKiBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorICoKKyAqIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyAqCisgKiBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisgKi8KKworI2lmbmRlZiBCUkxUVFlfSU5DTFVERURfTU5UUFRfTU5UVEFCCisjZGVmaW5lIEJSTFRUWV9JTkNMVURFRF9NTlRQVF9NTlRUQUIKKworI2luY2x1ZGUgPHN5cy9tbnR0YWIuaD4KKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZiAvKiBfX2NwbHVzcGx1cyAqLworCit0eXBlZGVmIHN0cnVjdCBtbnR0YWIgTW91bnRFbnRyeTsKKyNkZWZpbmUgbW91bnRQYXRoIG1udF9tb3VudHAKKyNkZWZpbmUgbW91bnRSZWZlcmVuY2UgbW50X3NwZWNpYWwKKyNkZWZpbmUgbW91bnRUeXBlIG1udF9mc3R5cGUKKyNkZWZpbmUgbW91bnRPcHRpb25zIG1udF9tbnRvcHRzCisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmIC8qIF9fY3BsdXNwbHVzICovCisKKyNlbmRpZiAvKiBCUkxUVFlfSU5DTFVERURfTU5UUFRfTU5UVEFCICovCmRpZmYgLS1naXQgYS9Qcm9ncmFtcy9tbnRwdF9ub25lLmMgYi9Qcm9ncmFtcy9tbnRwdF9ub25lLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjhhMmIwMQotLS0gL2Rldi9udWxsCisrKyBiL1Byb2dyYW1zL21udHB0X25vbmUuYwpAQCAtMCwwICsxLDQ2IEBACisvKgorICogQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyAqICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyAqCisgKiBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorICoKKyAqIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyAqCisgKiBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisgKi8KKworI2luY2x1ZGUgInByb2xvZ3VlLmgiCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisKKyNpbmNsdWRlICJsb2cuaCIKKyNpbmNsdWRlICJtbnRwdF9ub25lLmgiCisjaW5jbHVkZSAibW50cHRfaW50ZXJuYWwuaCIKKworRklMRSAqCitvcGVuTW91bnRzVGFibGUgKGludCB1cGRhdGUpIHsKKyAgbG9nVW5zdXBwb3J0ZWRGdW5jdGlvbigpOworICByZXR1cm4gTlVMTDsKK30KKwordm9pZAorY2xvc2VNb3VudHNUYWJsZSAoRklMRSAqdGFibGUpIHsKK30KKworTW91bnRFbnRyeSAqCityZWFkTW91bnRzVGFibGUgKEZJTEUgKnRhYmxlKSB7CisgIHJldHVybiBOVUxMOworfQorCitpbnQKK2FkZE1vdW50RW50cnkgKEZJTEUgKnRhYmxlLCBNb3VudEVudHJ5ICplbnRyeSkgeworICByZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL1Byb2dyYW1zL21udHB0X25vbmUuaCBiL1Byb2dyYW1zL21udHB0X25vbmUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MDdjMTI1Ci0tLSAvZGV2L251bGwKKysrIGIvUHJvZ3JhbXMvbW50cHRfbm9uZS5oCkBAIC0wLDAgKzEsMzcgQEAKKy8qCisgKiBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorICogICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorICoKKyAqIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorICoKKyAqIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyAqLworCisjaWZuZGVmIEJSTFRUWV9JTkNMVURFRF9NTlRQVF9OT05FCisjZGVmaW5lIEJSTFRUWV9JTkNMVURFRF9NTlRQVF9OT05FCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYgLyogX19jcGx1c3BsdXMgKi8KKwordHlwZWRlZiBzdHJ1Y3QgeworICBjaGFyICptb3VudFBhdGg7CisgIGNoYXIgKm1vdW50UmVmZXJlbmNlOworICBjaGFyICptb3VudFR5cGU7CisgIGNoYXIgKm1vdW50T3B0aW9uczsKK30gTW91bnRFbnRyeTsKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYgLyogX19jcGx1c3BsdXMgKi8KKworI2VuZGlmIC8qIEJSTFRUWV9JTkNMVURFRF9NTlRQVF9OT05FICovCmRpZmYgLS1naXQgYS9Qcm9ncmFtcy9tb3JzZS5jIGIvUHJvZ3JhbXMvbW9yc2UuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNThiNjIyCi0tLSAvZGV2L251bGwKKysrIGIvUHJvZ3JhbXMvbW9yc2UuYwpAQCAtMCwwICsxLDMxNyBAQAorLyoKKyAqIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisgKiAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisgKgorICogQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKKyNpbmNsdWRlICJwcm9sb2d1ZS5oIgorCisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKyNpbmNsdWRlICJsb2cuaCIKKyNpbmNsdWRlICJtb3JzZS5oIgorI2luY2x1ZGUgInR1bmUuaCIKKyNpbmNsdWRlICJ1dGY4LmgiCisKK3N0YXRpYyBjb25zdCBNb3JzZVBhdHRlcm4gbW9yc2VQYXR0ZXJuc1tdID0geworICBbV0NfQygnYScpXSA9IDBCMTAxLAorICBbV0NfQygnYicpXSA9IDBCMTExMTAsCisgIFtXQ19DKCdjJyldID0gMEIxMTAxMCwKKyAgW1dDX0MoJ2QnKV0gPSAwQjExMTAsCisgIFtXQ19DKCdlJyldID0gMEIxMSwKKyAgW1dDX0MoJ2YnKV0gPSAwQjExMDExLAorICBbV0NfQygnZycpXSA9IDBCMTEwMCwKKyAgW1dDX0MoJ2gnKV0gPSAwQjExMTExLAorICBbV0NfQygnaScpXSA9IDBCMTExLAorICBbV0NfQygnaicpXSA9IDBCMTAwMDEsCisgIFtXQ19DKCdrJyldID0gMEIxMDEwLAorICBbV0NfQygnbCcpXSA9IDBCMTExMDEsCisgIFtXQ19DKCdtJyldID0gMEIxMDAsCisgIFtXQ19DKCduJyldID0gMEIxMTAsCisgIFtXQ19DKCdvJyldID0gMEIxMDAwLAorICBbV0NfQygncCcpXSA9IDBCMTEwMDEsCisgIFtXQ19DKCdxJyldID0gMEIxMDEwMCwKKyAgW1dDX0MoJ3InKV0gPSAwQjExMDEsCisgIFtXQ19DKCdzJyldID0gMEIxMTExLAorICBbV0NfQygndCcpXSA9IDBCMTAsCisgIFtXQ19DKCd1JyldID0gMEIxMDExLAorICBbV0NfQygndicpXSA9IDBCMTAxMTEsCisgIFtXQ19DKCd3JyldID0gMEIxMDAxLAorICBbV0NfQygneCcpXSA9IDBCMTAxMTAsCisgIFtXQ19DKCd5JyldID0gMEIxMDAxMCwKKyAgW1dDX0MoJ3onKV0gPSAwQjExMTAwLAorCisjaWZkZWYgSEFWRV9XQ0hBUl9ICisgIFtXQ19DKCfDpCcpXSA9IDBCMTAxMDEsCisgIFtXQ19DKCfDoScpXSA9IDBCMTAxMDAxLAorICBbV0NfQygnw6UnKV0gPSAwQjEwMTAwMSwKKyAgW1dDX0MoJ8OpJyldID0gMEIxMTEwMTEsCisgIFtXQ19DKCfDsScpXSA9IDBCMTAwMTAwLAorICBbV0NfQygnw7YnKV0gPSAwQjExMDAwLAorICBbV0NfQygnw7wnKV0gPSAwQjEwMDExLAorI2VuZGlmIC8qIEhBVkVfV0NIQVJfSCAqLworCisgIFtXQ19DKCcwJyldID0gMEIxMDAwMDAsCisgIFtXQ19DKCcxJyldID0gMEIxMDAwMDEsCisgIFtXQ19DKCcyJyldID0gMEIxMDAwMTEsCisgIFtXQ19DKCczJyldID0gMEIxMDAxMTEsCisgIFtXQ19DKCc0JyldID0gMEIxMDExMTEsCisgIFtXQ19DKCc1JyldID0gMEIxMTExMTEsCisgIFtXQ19DKCc2JyldID0gMEIxMTExMTAsCisgIFtXQ19DKCc3JyldID0gMEIxMTExMDAsCisgIFtXQ19DKCc4JyldID0gMEIxMTEwMDAsCisgIFtXQ19DKCc5JyldID0gMEIxMTAwMDAsCisKKyAgW1dDX0MoJy4nKV0gPSAwQjEwMTAxMDEsCisgIFtXQ19DKCcsJyldID0gMEIxMDAxMTAwLAorICBbV0NfQygnPycpXSA9IDBCMTExMDAxMSwKKyAgW1dDX0MoJyEnKV0gPSAwQjEwMDEwMTAsCisgIFtXQ19DKCc6JyldID0gMEIxMTExMDAwLAorICBbV0NfQygnXCcnKV0gPSAwQjExMDAwMDEsCisgIFtXQ19DKCciJyldID0gMEIxMTAxMTAxLAorICBbV0NfQygnKCcpXSA9IDBCMTEwMDEwLAorICBbV0NfQygnKScpXSA9IDBCMTAxMDAxMCwKKyAgW1dDX0MoJz0nKV0gPSAwQjEwMTExMCwKKyAgW1dDX0MoJysnKV0gPSAwQjExMDEwMSwKKyAgW1dDX0MoJy0nKV0gPSAwQjEwMTExMTAsCisgIFtXQ19DKCcvJyldID0gMEIxMTAxMTAsCisgIFtXQ19DKCcmJyldID0gMEIxMTExMDEsCisgIFtXQ19DKCdAJyldID0gMEIxMTAxMDAxLAorCisgIFswXSA9IDAKK307CisKK01vcnNlUGF0dGVybgorZ2V0TW9yc2VQYXR0ZXJuICh3Y2hhcl90IGNoYXJhY3RlcikgeworICBjaGFyYWN0ZXIgPSB0b3dsb3dlcihjaGFyYWN0ZXIpOworICBpZiAoY2hhcmFjdGVyIDwgMCkgcmV0dXJuIDA7CisgIGlmIChjaGFyYWN0ZXIgPj0gQVJSQVlfQ09VTlQobW9yc2VQYXR0ZXJucykpIHJldHVybiAwOworICByZXR1cm4gbW9yc2VQYXR0ZXJuc1tjaGFyYWN0ZXJdOworfQorCitzdHJ1Y3QgIE1vcnNlT2JqZWN0U3RydWN0IHsKKyAgc3RydWN0IHsKKyAgICB1bnNpZ25lZCBpbnQgZnJlcXVlbmN5OworICAgIHVuc2lnbmVkIGludCB1bml0OworICB9IHBhcmFtZXRlcnM7CisKKyAgc3RydWN0IHsKKyAgICB1bnNpZ25lZCB3YXNTcGFjZToxOworICB9IHN0YXRlOworCisgIHN0cnVjdCB7CisgICAgVG9uZUVsZW1lbnQgKmFycmF5OworICAgIHNpemVfdCBzaXplOworICAgIHNpemVfdCBjb3VudDsKKyAgfSBlbGVtZW50czsKK307CisKK3N0YXRpYyBpbnQKK2FkZE1vcnNlRWxlbWVudCAoTW9yc2VPYmplY3QgKm1vcnNlLCBjb25zdCBUb25lRWxlbWVudCAqZWxlbWVudCkgeworICBpZiAobW9yc2UtPmVsZW1lbnRzLmNvdW50ID09IG1vcnNlLT5lbGVtZW50cy5zaXplKSB7CisgICAgc2l6ZV90IG5ld1NpemUgPSBtb3JzZS0+ZWxlbWVudHMuc2l6ZT8gKG1vcnNlLT5lbGVtZW50cy5zaXplIDw8IDEpOiAwWDEwOworICAgIFRvbmVFbGVtZW50ICpuZXdBcnJheSA9IHJlYWxsb2MobW9yc2UtPmVsZW1lbnRzLmFycmF5LCAobmV3U2l6ZSAqIHNpemVvZigqbmV3QXJyYXkpKSk7CisKKyAgICBpZiAoIW5ld0FycmF5KSB7CisgICAgICBsb2dNYWxsb2NFcnJvcigpOworICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgbW9yc2UtPmVsZW1lbnRzLmFycmF5ID0gbmV3QXJyYXk7CisgICAgbW9yc2UtPmVsZW1lbnRzLnNpemUgPSBuZXdTaXplOworICB9CisKKyAgbW9yc2UtPmVsZW1lbnRzLmFycmF5W21vcnNlLT5lbGVtZW50cy5jb3VudCsrXSA9ICplbGVtZW50OworICByZXR1cm4gMTsKK30KKworc3RhdGljIGludAorYWRkTW9yc2VNYXJrIChNb3JzZU9iamVjdCAqbW9yc2UsIHVuc2lnbmVkIGludCB1bml0cykgeworICBUb25lRWxlbWVudCBlbGVtZW50ID0gVE9ORV9QTEFZKChtb3JzZS0+cGFyYW1ldGVycy51bml0ICogdW5pdHMpLCBtb3JzZS0+cGFyYW1ldGVycy5mcmVxdWVuY3kpOworICByZXR1cm4gYWRkTW9yc2VFbGVtZW50KG1vcnNlLCAmZWxlbWVudCk7Cit9CisKK3N0YXRpYyBpbnQKK2FkZE1vcnNlR2FwIChNb3JzZU9iamVjdCAqbW9yc2UsIHVuc2lnbmVkIGludCB1bml0cykgeworICBUb25lRWxlbWVudCBlbGVtZW50ID0gVE9ORV9SRVNUKChtb3JzZS0+cGFyYW1ldGVycy51bml0ICogdW5pdHMpKTsKKyAgcmV0dXJuIGFkZE1vcnNlRWxlbWVudChtb3JzZSwgJmVsZW1lbnQpOworfQorCitpbnQKK2FkZE1vcnNlUGF0dGVybiAoTW9yc2VPYmplY3QgKm1vcnNlLCBNb3JzZVBhdHRlcm4gcGF0dGVybikgeworICBpZiAocGF0dGVybikgeworICAgIGludCBhZGRHYXAgPSAwOworCisgICAgd2hpbGUgKHBhdHRlcm4gIT0gMEIxKSB7CisgICAgICBpZiAoIWFkZEdhcCkgeworICAgICAgICBhZGRHYXAgPSAxOworICAgICAgfSBlbHNlIGlmICghYWRkTW9yc2VHYXAobW9yc2UsIE1PUlNFX1VOSVRTX0dBUF9TWU1CT0wpKSB7CisgICAgICAgIHJldHVybiAwOworICAgICAgfQorCisgICAgICB1bnNpZ25lZCBpbnQgdW5pdHMgPSAocGF0dGVybiAmIDBCMSk/IE1PUlNFX1VOSVRTX01BUktfU0hPUlQ6IE1PUlNFX1VOSVRTX01BUktfTE9ORzsKKyAgICAgIGlmICghYWRkTW9yc2VNYXJrKG1vcnNlLCB1bml0cykpIHJldHVybiAwOworICAgICAgcGF0dGVybiA+Pj0gMTsKKyAgICB9CisgIH0KKworICByZXR1cm4gMTsKK30KKworaW50CithZGRNb3JzZUNoYXJhY3RlciAoTW9yc2VPYmplY3QgKm1vcnNlLCB3Y2hhcl90IGNoYXJhY3RlcikgeworICBpZiAoIWlzd3NwYWNlKGNoYXJhY3RlcikpIHsKKyAgICBpZiAobW9yc2UtPnN0YXRlLndhc1NwYWNlKSB7CisgICAgICBtb3JzZS0+c3RhdGUud2FzU3BhY2UgPSAwOworICAgIH0gZWxzZSBpZiAoIWFkZE1vcnNlR2FwKG1vcnNlLCBNT1JTRV9VTklUU19HQVBfTEVUVEVSKSkgeworICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgaWYgKCFhZGRNb3JzZVBhdHRlcm4obW9yc2UsIGdldE1vcnNlUGF0dGVybihjaGFyYWN0ZXIpKSkgcmV0dXJuIDA7CisgIH0gZWxzZSBpZiAoIW1vcnNlLT5zdGF0ZS53YXNTcGFjZSkgeworICAgIG1vcnNlLT5zdGF0ZS53YXNTcGFjZSA9IDE7CisgICAgaWYgKCFhZGRNb3JzZUdhcChtb3JzZSwgTU9SU0VfVU5JVFNfR0FQX1dPUkQpKSByZXR1cm4gMDsKKyAgfQorCisgIHJldHVybiAxOworfQorCitpbnQKK2FkZE1vcnNlU3BhY2UgKE1vcnNlT2JqZWN0ICptb3JzZSkgeworICByZXR1cm4gYWRkTW9yc2VDaGFyYWN0ZXIobW9yc2UsIFdDX0MoJyAnKSk7Cit9CisKK2ludAorYWRkTW9yc2VDaGFyYWN0ZXJzIChNb3JzZU9iamVjdCAqbW9yc2UsIGNvbnN0IHdjaGFyX3QgKmNoYXJhY3RlcnMsIHNpemVfdCBjb3VudCkgeworICBjb25zdCB3Y2hhcl90ICpjaGFyYWN0ZXIgPSBjaGFyYWN0ZXJzOworICBjb25zdCB3Y2hhcl90ICplbmQgPSBjaGFyYWN0ZXIgKyBjb3VudDsKKworICB3aGlsZSAoY2hhcmFjdGVyIDwgZW5kKSB7CisgICAgaWYgKCFhZGRNb3JzZUNoYXJhY3Rlcihtb3JzZSwgKmNoYXJhY3RlcisrKSkgcmV0dXJuIDA7CisgIH0KKworICByZXR1cm4gMTsKK30KKworaW50CithZGRNb3JzZVN0cmluZyAoTW9yc2VPYmplY3QgKm1vcnNlLCBjb25zdCBjaGFyICpzdHJpbmcpIHsKKyAgc2l6ZV90IHNpemUgPSBzdHJsZW4oc3RyaW5nKSArIDE7CisgIHdjaGFyX3QgY2hhcmFjdGVyc1tzaXplXTsKKworICBjb25zdCBjaGFyICpieXRlID0gc3RyaW5nOworICB3Y2hhcl90ICplbmQgPSBjaGFyYWN0ZXJzOworCisgIGNvbnZlcnRVdGY4VG9XY2hhcnMoJmJ5dGUsICZlbmQsIHNpemUpOworICByZXR1cm4gYWRkTW9yc2VDaGFyYWN0ZXJzKG1vcnNlLCBjaGFyYWN0ZXJzLCAoZW5kIC0gY2hhcmFjdGVycykpOworfQorCitpbnQKK3BsYXlNb3JzZVNlcXVlbmNlIChNb3JzZU9iamVjdCAqbW9yc2UpIHsKKyAgeworICAgIFRvbmVFbGVtZW50IGVsZW1lbnQgPSBUT05FX1NUT1AoKTsKKyAgICBpZiAoIWFkZE1vcnNlRWxlbWVudChtb3JzZSwgJmVsZW1lbnQpKSByZXR1cm4gMDsKKyAgfQorCisgIHR1bmVQbGF5VG9uZXMobW9yc2UtPmVsZW1lbnRzLmFycmF5KTsKKyAgdHVuZVN5bmNocm9uaXplKCk7CisgIHJldHVybiAxOworfQorCit2b2lkCitjbGVhck1vcnNlU2VxdWVuY2UgKE1vcnNlT2JqZWN0ICptb3JzZSkgeworICBtb3JzZS0+ZWxlbWVudHMuY291bnQgPSAwOworICBtb3JzZS0+c3RhdGUud2FzU3BhY2UgPSAxOworfQorCit1bnNpZ25lZCBpbnQKK2dldE1vcnNlUGl0Y2ggKE1vcnNlT2JqZWN0ICptb3JzZSkgeworICByZXR1cm4gbW9yc2UtPnBhcmFtZXRlcnMuZnJlcXVlbmN5OworfQorCitpbnQKK3NldE1vcnNlUGl0Y2ggKE1vcnNlT2JqZWN0ICptb3JzZSwgdW5zaWduZWQgaW50IGZyZXF1ZW5jeSkgeworICBpZiAoZnJlcXVlbmN5IDwgMSkgcmV0dXJuIDA7CisgIGlmIChmcmVxdWVuY3kgPiAwWEZGRkYpIHJldHVybiAwOworCisgIG1vcnNlLT5wYXJhbWV0ZXJzLmZyZXF1ZW5jeSA9IGZyZXF1ZW5jeTsKKyAgcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50CitnZXRNb3JzZVJlZmVyZW5jZUR1cmF0aW9uICh1bnNpZ25lZCBpbnQgdW5pdHNQZXJNaW51dGUpIHsKKyAgcmV0dXJuIDYwMDAwIC8gdW5pdHNQZXJNaW51dGU7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQKK2dldE1vcnNlU3BlZWQgKE1vcnNlT2JqZWN0ICptb3JzZSwgdW5zaWduZWQgaW50IHVuaXRzUGVyTWludXRlKSB7CisgIHJldHVybiBnZXRNb3JzZVJlZmVyZW5jZUR1cmF0aW9uKHVuaXRzUGVyTWludXRlKSAvIG1vcnNlLT5wYXJhbWV0ZXJzLnVuaXQ7Cit9CisKK3N0YXRpYyBpbnQKK3NldE1vcnNlU3BlZWQgKE1vcnNlT2JqZWN0ICptb3JzZSwgdW5zaWduZWQgaW50IHNwZWVkLCB1bnNpZ25lZCBpbnQgdW5pdHNQZXJNaW51dGUpIHsKKyAgdW5zaWduZWQgaW50IHVuaXREdXJhdGlvbiA9IGdldE1vcnNlUmVmZXJlbmNlRHVyYXRpb24odW5pdHNQZXJNaW51dGUpIC8gc3BlZWQ7CisgIGlmICh1bml0RHVyYXRpb24gPCAxMCkgcmV0dXJuIDA7CisKKyAgbW9yc2UtPnBhcmFtZXRlcnMudW5pdCA9IHVuaXREdXJhdGlvbjsKKyAgcmV0dXJuIDE7Cit9CisKK3Vuc2lnbmVkIGludAorZ2V0TW9yc2VXb3Jkc1Blck1pbnV0ZSAoTW9yc2VPYmplY3QgKm1vcnNlKSB7CisgIHJldHVybiBnZXRNb3JzZVNwZWVkKG1vcnNlLCBNT1JTRV9VTklUU19QRVJfV09SRCk7Cit9CisKK2ludAorc2V0TW9yc2VXb3Jkc1Blck1pbnV0ZSAoTW9yc2VPYmplY3QgKm1vcnNlLCB1bnNpZ25lZCBpbnQgc3BlZWQpIHsKKyAgcmV0dXJuIHNldE1vcnNlU3BlZWQobW9yc2UsIHNwZWVkLCBNT1JTRV9VTklUU19QRVJfV09SRCk7Cit9CisKK3Vuc2lnbmVkIGludAorZ2V0TW9yc2VHcm91cHNQZXJNaW51dGUgKE1vcnNlT2JqZWN0ICptb3JzZSkgeworICByZXR1cm4gZ2V0TW9yc2VTcGVlZChtb3JzZSwgTU9SU0VfVU5JVFNfUEVSX0dST1VQKTsKK30KKworaW50CitzZXRNb3JzZUdyb3Vwc1Blck1pbnV0ZSAoTW9yc2VPYmplY3QgKm1vcnNlLCB1bnNpZ25lZCBpbnQgc3BlZWQpIHsKKyAgcmV0dXJuIHNldE1vcnNlU3BlZWQobW9yc2UsIHNwZWVkLCBNT1JTRV9VTklUU19QRVJfR1JPVVApOworfQorCit2b2lkICoKK25ld01vcnNlT2JqZWN0ICh2b2lkKSB7CisgIE1vcnNlT2JqZWN0ICptb3JzZTsKKworICBpZiAoKG1vcnNlID0gbWFsbG9jKHNpemVvZigqbW9yc2UpKSkpIHsKKyAgICBtZW1zZXQobW9yc2UsIDAsIHNpemVvZigqbW9yc2UpKTsKKworICAgIHNldE1vcnNlUGl0Y2gobW9yc2UsIDQ0MCk7CisgICAgc2V0TW9yc2VXb3Jkc1Blck1pbnV0ZShtb3JzZSwgMjApOworCisgICAgbW9yc2UtPmVsZW1lbnRzLmFycmF5ID0gTlVMTDsKKyAgICBtb3JzZS0+ZWxlbWVudHMuc2l6ZSA9IDA7CisKKyAgICBjbGVhck1vcnNlU2VxdWVuY2UobW9yc2UpOworICAgIHJldHVybiBtb3JzZTsKKyAgfSBlbHNlIHsKKyAgICBsb2dNYWxsb2NFcnJvcigpOworICB9CisKKyAgcmV0dXJuIE5VTEw7Cit9CisKK3ZvaWQKK2Rlc3Ryb3lNb3JzZU9iamVjdCAoTW9yc2VPYmplY3QgKm1vcnNlKSB7CisgIGlmIChtb3JzZS0+ZWxlbWVudHMuYXJyYXkpIGZyZWUobW9yc2UtPmVsZW1lbnRzLmFycmF5KTsKKyAgZnJlZShtb3JzZSk7Cit9CmRpZmYgLS1naXQgYS9Qcm9ncmFtcy9tc2dfcXVldWUuYyBiL1Byb2dyYW1zL21zZ19xdWV1ZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNkNmEzN2IKLS0tIC9kZXYvbnVsbAorKysgYi9Qcm9ncmFtcy9tc2dfcXVldWUuYwpAQCAtMCwwICsxLDE2NyBAQAorLyoKKyAqIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisgKiAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisgKgorICogQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKKyNpbmNsdWRlICJwcm9sb2d1ZS5oIgorCisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxzeXMvbXNnLmg+CisKKyNpbmNsdWRlICJsb2cuaCIKKyNpbmNsdWRlICJtc2dfcXVldWUuaCIKKyNpbmNsdWRlICJhc3luY19ldmVudC5oIgorI2luY2x1ZGUgInRocmVhZC5oIgorCit0eXBlZGVmIHN0cnVjdCB7CisgIE1lc3NhZ2VUeXBlIHR5cGU7CisgIGNoYXIgY29udGVudFtdOworfSBNZXNzYWdlOworCisjZGVmaW5lIE1FU1NBR0UobmFtZSwgbGVuZ3RoKSBcCisgIHVuc2lnbmVkIGNoYXIgbmFtZSMjX2J5dGVzW3NpemVvZihNZXNzYWdlVHlwZSkgKyAobGVuZ3RoKV07IFwKKyAgTWVzc2FnZSAqbmFtZSA9ICh2b2lkICopbmFtZSMjX2J5dGVzOworCitpbnQKK3NlbmRNZXNzYWdlIChpbnQgcXVldWUsIE1lc3NhZ2VUeXBlIHR5cGUsIGNvbnN0IHZvaWQgKmNvbnRlbnQsIHNpemVfdCBsZW5ndGgsIGludCBmbGFncykgeworICBNRVNTQUdFKG1lc3NhZ2UsIGxlbmd0aCk7CisKKyAgaWYgKCFjb250ZW50KSB7CisgICAgbGVuZ3RoID0gMDsKKyAgfSBlbHNlIGlmIChsZW5ndGgpIHsKKyAgICBtZW1jcHkobWVzc2FnZS0+Y29udGVudCwgY29udGVudCwgbGVuZ3RoKTsKKyAgfQorCisgIG1lc3NhZ2UtPnR5cGUgPSB0eXBlOworICBpZiAobXNnc25kKHF1ZXVlLCBtZXNzYWdlLCBsZW5ndGgsIGZsYWdzKSAhPSAtMSkgcmV0dXJuIDE7CisKKyAgbG9nU3lzdGVtRXJyb3IoIm1zZ3NuZCIpOworICByZXR1cm4gMDsKK30KKworc3NpemVfdAorcmVjZWl2ZU1lc3NhZ2UgKGludCBxdWV1ZSwgTWVzc2FnZVR5cGUgKnR5cGUsIHZvaWQgKmJ1ZmZlciwgc2l6ZV90IHNpemUsIGludCBmbGFncykgeworICBNRVNTQUdFKG1lc3NhZ2UsIHNpemUpOworCisgIGlmICghYnVmZmVyKSBzaXplID0gMDsKKyAgc3NpemVfdCBsZW5ndGggPSBtc2dyY3YocXVldWUsIG1lc3NhZ2UsIHNpemUsICp0eXBlLCBmbGFncyk7CisKKyAgaWYgKGxlbmd0aCAhPSAtMSkgeworICAgICp0eXBlID0gbWVzc2FnZS0+dHlwZTsKKyAgICBpZiAobGVuZ3RoKSBtZW1jcHkoYnVmZmVyLCBtZXNzYWdlLT5jb250ZW50LCBsZW5ndGgpOworICB9IGVsc2UgaWYgKGVycm5vICE9IEVJRFJNKSB7CisgICAgbG9nU3lzdGVtRXJyb3IoIm1zZ3JjdiIpOworICB9CisKKyAgcmV0dXJuIGxlbmd0aDsKK30KKwordHlwZWRlZiBzdHJ1Y3QgeworICBBc3luY0V2ZW50ICpldmVudDsKKyAgcHRocmVhZF90IHRocmVhZDsKKworICBNZXNzYWdlSGFuZGxlciAqaGFuZGxlcjsKKyAgdm9pZCAqZGF0YTsKKworICBpbnQgcXVldWU7CisgIE1lc3NhZ2VUeXBlIHR5cGU7CisgIHNpemVfdCBzaXplOworfSBNZXNzYWdlUmVjZWl2ZXJBcmd1bWVudDsKKworQVNZTkNfRVZFTlRfQ0FMTEJBQ0soaGFuZGxlUmVjZWl2ZWRNZXNzYWdlKSB7CisgIE1lc3NhZ2VSZWNlaXZlckFyZ3VtZW50ICptcmEgPSBwYXJhbWV0ZXJzLT5ldmVudERhdGE7CisgIE1lc3NhZ2VIYW5kbGVyUGFyYW1ldGVycyAqbWhwID0gcGFyYW1ldGVycy0+c2lnbmFsRGF0YTsKKworICBpZiAobWhwKSB7CisgICAgbXJhLT5oYW5kbGVyKG1ocCk7CisgICAgZnJlZShtaHApOworICB9IGVsc2UgeworICAgIHZvaWQgKnJlc3VsdDsKKyAgICBwdGhyZWFkX2pvaW4obXJhLT50aHJlYWQsICZyZXN1bHQpOworCisgICAgYXN5bmNEaXNjYXJkRXZlbnQobXJhLT5ldmVudCk7CisgICAgZnJlZShtcmEpOworICB9Cit9CisKK1RIUkVBRF9GVU5DVElPTihtZXNzYWdlUmVjZWl2ZXJUaHJlYWQpIHsKKyAgTWVzc2FnZVJlY2VpdmVyQXJndW1lbnQgKm1yYSA9IGFyZ3VtZW50OworICBjaGFyIGJ1ZmZlclttcmEtPnNpemVdOworCisgIHdoaWxlICgxKSB7CisgICAgTWVzc2FnZVR5cGUgdHlwZSA9IG1yYS0+dHlwZTsKKyAgICBzc2l6ZV90IGxlbmd0aCA9IHJlY2VpdmVNZXNzYWdlKG1yYS0+cXVldWUsICZ0eXBlLCBidWZmZXIsIG1yYS0+c2l6ZSwgMCk7CisKKyAgICBpZiAobGVuZ3RoICE9IC0xKSB7CisgICAgICBNZXNzYWdlSGFuZGxlclBhcmFtZXRlcnMgKm1ocDsKKworICAgICAgaWYgKChtaHAgPSBtYWxsb2Moc2l6ZW9mKCptaHApICsgbGVuZ3RoKSkpIHsKKyAgICAgICAgbWVtc2V0KG1ocCwgMCwgc2l6ZW9mKCptaHApKTsKKworICAgICAgICBtaHAtPmRhdGEgPSBtcmEtPmRhdGE7CisgICAgICAgIG1ocC0+dHlwZSA9IHR5cGU7CisKKyAgICAgICAgbWhwLT5sZW5ndGggPSBsZW5ndGg7CisgICAgICAgIG1lbWNweShtaHAtPmNvbnRlbnQsIGJ1ZmZlciwgbWhwLT5sZW5ndGgpOworCisgICAgICAgIGlmIChhc3luY1NpZ25hbEV2ZW50KG1yYS0+ZXZlbnQsIG1ocCkpIGNvbnRpbnVlOworICAgICAgICBmcmVlKG1ocCk7CisgICAgICB9IGVsc2UgeworICAgICAgICBsb2dNYWxsb2NFcnJvcigpOworICAgICAgfQorICAgIH0KKworICAgIGJyZWFrOworICB9CisKKyAgYXN5bmNTaWduYWxFdmVudChtcmEtPmV2ZW50LCBOVUxMKTsKKyAgcmV0dXJuIE5VTEw7Cit9CisKK2ludAorc3RhcnRNZXNzYWdlUmVjZWl2ZXIgKGNvbnN0IGNoYXIgKm5hbWUsIGludCBxdWV1ZSwgTWVzc2FnZVR5cGUgdHlwZSwgc2l6ZV90IHNpemUsIE1lc3NhZ2VIYW5kbGVyICpoYW5kbGVyLCB2b2lkICpkYXRhKSB7CisgIE1lc3NhZ2VSZWNlaXZlckFyZ3VtZW50ICptcmE7CisKKyAgaWYgKChtcmEgPSBtYWxsb2Moc2l6ZW9mKCptcmEpKSkpIHsKKyAgICBtZW1zZXQobXJhLCAwLCBzaXplb2YoKm1yYSkpOworCisgICAgbXJhLT5oYW5kbGVyID0gaGFuZGxlcjsKKyAgICBtcmEtPmRhdGEgPSBkYXRhOworCisgICAgbXJhLT5xdWV1ZSA9IHF1ZXVlOworICAgIG1yYS0+dHlwZSA9IHR5cGU7CisgICAgbXJhLT5zaXplID0gc2l6ZTsKKworICAgIGlmICgobXJhLT5ldmVudCA9IGFzeW5jTmV3RXZlbnQoaGFuZGxlUmVjZWl2ZWRNZXNzYWdlLCBtcmEpKSkgeworICAgICAgaW50IHRocmVhZENyZWF0aW9uRXJyb3IgPSBjcmVhdGVUaHJlYWQobmFtZSwgJm1yYS0+dGhyZWFkLCBOVUxMLCBtZXNzYWdlUmVjZWl2ZXJUaHJlYWQsIG1yYSk7CisKKyAgICAgIGlmICghdGhyZWFkQ3JlYXRpb25FcnJvcikgeworICAgICAgICBsb2dNZXNzYWdlKExPR19ERUJVRywgIm1lc3NhZ2UgcmVjZWl2ZXIgc3RhcnRlZDogJXMiLCBuYW1lKTsKKyAgICAgICAgcmV0dXJuIDE7CisgICAgICB9CisKKyAgICAgIGFzeW5jRGlzY2FyZEV2ZW50KG1yYS0+ZXZlbnQpOworICAgIH0KKworICAgIGZyZWUobXJhKTsKKyAgfSBlbHNlIHsKKyAgICBsb2dNYWxsb2NFcnJvcigpOworICB9CisKKyAgbG9nTWVzc2FnZShMT0dfV0FSTklORywgIm1lc3NhZ2UgcmVjZWl2ZXIgbm90IHN0YXJ0ZWQ6ICVzIiwgbmFtZSk7CisgIHJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvUHJvZ3JhbXMvbXNndGVzdC5jIGIvUHJvZ3JhbXMvbXNndGVzdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAxNTVkOTUKLS0tIC9kZXYvbnVsbAorKysgYi9Qcm9ncmFtcy9tc2d0ZXN0LmMKQEAgLTAsMCArMSwzMDggQEAKKy8qCisgKiBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorICogICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorICoKKyAqIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorICoKKyAqIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyAqLworCisjaW5jbHVkZSAicHJvbG9ndWUuaCIKKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKworI2luY2x1ZGUgImxvZy5oIgorI2luY2x1ZGUgInByb2dyYW0uaCIKKyNpbmNsdWRlICJjbWRsaW5lLmgiCisjaW5jbHVkZSAibWVzc2FnZXMuaCIKKyNpbmNsdWRlICJwYXJzZS5oIgorI2luY2x1ZGUgImZpbGUuaCIKKworc3RhdGljIGNoYXIgKm9wdF9sb2NhbGVEaXJlY3Rvcnk7CitzdGF0aWMgY2hhciAqb3B0X2xvY2FsZVNwZWNpZmllcjsKK3N0YXRpYyBjaGFyICpvcHRfZG9tYWluTmFtZTsKKworc3RhdGljIEZJTEUgKm91dHB1dFN0cmVhbTsKK3N0YXRpYyBpbnQgb3B0X3V0ZjhPdXRwdXQ7CisKK0JFR0lOX09QVElPTl9UQUJMRShwcm9ncmFtT3B0aW9ucykKKyAgeyAud29yZCA9ICJkaXJlY3RvcnkiLAorICAgIC5sZXR0ZXIgPSAnZCcsCisgICAgLmFyZ3VtZW50ID0gc3RydGV4dCgicGF0aCIpLAorICAgIC5zZXR0aW5nLnN0cmluZyA9ICZvcHRfbG9jYWxlRGlyZWN0b3J5LAorICAgIC5pbnRlcm5hbC5hZGp1c3QgPSBmaXhJbnN0YWxsUGF0aCwKKyAgICAuZGVzY3JpcHRpb24gPSBzdHJ0ZXh0KCJ0aGUgbG9jYWxlIGRpcmVjdG9yeSBjb250YWluaW5nIHRoZSB0cmFuc2xhdGlvbnMiKQorICB9LAorCisgIHsgLndvcmQgPSAibG9jYWxlIiwKKyAgICAubGV0dGVyID0gJ2wnLAorICAgIC5hcmd1bWVudCA9IHN0cnRleHQoInNwZWNpZmllciIpLAorICAgIC5zZXR0aW5nLnN0cmluZyA9ICZvcHRfbG9jYWxlU3BlY2lmaWVyLAorICAgIC5kZXNjcmlwdGlvbiA9IHN0cnRleHQoInRoZSBsb2NhbGUgaW4gd2hpY2ggdG8gbG9vayB1cCBhIHRyYW5zbGF0aW9uIikKKyAgfSwKKworICB7IC53b3JkID0gImRvbWFpbiIsCisgICAgLmxldHRlciA9ICduJywKKyAgICAuYXJndW1lbnQgPSBzdHJ0ZXh0KCJuYW1lIiksCisgICAgLnNldHRpbmcuc3RyaW5nID0gJm9wdF9kb21haW5OYW1lLAorICAgIC5kZXNjcmlwdGlvbiA9IHN0cnRleHQoInRoZSBuYW1lIG9mIHRoZSBkb21haW4gY29udGFpbmluZyB0aGUgdHJhbnNsYXRpb25zIikKKyAgfSwKKworICB7IC53b3JkID0gInV0ZjgiLAorICAgIC5sZXR0ZXIgPSAndScsCisgICAgLnNldHRpbmcuZmxhZyA9ICZvcHRfdXRmOE91dHB1dCwKKyAgICAuZGVzY3JpcHRpb24gPSBzdHJ0ZXh0KCJ3cml0ZSB0aGUgdHJhbnNsYXRpb25zIHVzaW5nIFVURi04IikKKyAgfSwKK0VORF9PUFRJT05fVEFCTEUocHJvZ3JhbU9wdGlvbnMpCisKK3N0YXRpYyBpbnQKK25vT3V0cHV0RXJyb3JZZXQgKHZvaWQpIHsKKyAgaWYgKCFmZXJyb3Iob3V0cHV0U3RyZWFtKSkgcmV0dXJuIDE7CisgIGxvZ01lc3NhZ2UoTE9HX0VSUiwgIm91dHB1dCBlcnJvcjogJXMiLCBzdHJlcnJvcihlcnJubykpOworICByZXR1cm4gMDsKK30KKworc3RhdGljIGludAorcHV0Q2hhcmFjdGVyIChjaGFyIGMpIHsKKyAgZnB1dGMoYywgb3V0cHV0U3RyZWFtKTsKKyAgcmV0dXJuIG5vT3V0cHV0RXJyb3JZZXQoKTsKK30KKworc3RhdGljIGludAorcHV0TmV3bGluZSAodm9pZCkgeworICByZXR1cm4gcHV0Q2hhcmFjdGVyKCdcbicpOworfQorCitzdGF0aWMgaW50CitwdXRCeXRlcyAoY29uc3QgY2hhciAqYnl0ZXMsIHNpemVfdCBjb3VudCkgeworICB3aGlsZSAoY291bnQpIHsKKyAgICB1aW50MzJfdCBsYXN0ID0gY291bnQgLSAxOworICAgIGlmIChieXRlc1tsYXN0XSAhPSAnXG4nKSBicmVhazsKKyAgICBjb3VudCA9IGxhc3Q7CisgIH0KKworICBpZiAob3B0X3V0ZjhPdXRwdXQpIHsKKyAgICBmd3JpdGUoYnl0ZXMsIDEsIGNvdW50LCBvdXRwdXRTdHJlYW0pOworICB9IGVsc2UgeworICAgIHdyaXRlV2l0aENvbnNvbGVFbmNvZGluZyhvdXRwdXRTdHJlYW0sIGJ5dGVzLCBjb3VudCk7CisgIH0KKworICByZXR1cm4gbm9PdXRwdXRFcnJvcllldCgpOworfQorCitzdGF0aWMgaW50CitwdXRTdHJpbmcgKGNvbnN0IGNoYXIgKnN0cmluZykgeworICByZXR1cm4gcHV0Qnl0ZXMoc3RyaW5nLCBzdHJsZW4oc3RyaW5nKSk7Cit9CisKK3N0YXRpYyBpbnQKK3B1dE1lc3NhZ2UgKGNvbnN0IE1lc3NhZ2UgKm1lc3NhZ2UpIHsKKyAgcmV0dXJuIHB1dEJ5dGVzKGdldE1lc3NhZ2VUZXh0KG1lc3NhZ2UpLCBnZXRNZXNzYWdlTGVuZ3RoKG1lc3NhZ2UpKTsKK30KKworc3RhdGljIGludAorbGlzdFRyYW5zbGF0aW9uIChjb25zdCBNZXNzYWdlICpzb3VyY2UsIGNvbnN0IE1lc3NhZ2UgKnRyYW5zbGF0aW9uKSB7CisgIHJldHVybiBwdXRNZXNzYWdlKHNvdXJjZSkKKyAgICAgICYmIHB1dFN0cmluZygiIC0+ICIpCisgICAgICAmJiBwdXRNZXNzYWdlKHRyYW5zbGF0aW9uKQorICAgICAgJiYgcHV0TmV3bGluZSgpOworfQorCitzdGF0aWMgaW50CitsaXN0QWxsVHJhbnNsYXRpb25zICh2b2lkKSB7CisgIHVpbnQzMl90IGNvdW50ID0gZ2V0TWVzc2FnZUNvdW50KCk7CisKKyAgZm9yICh1bnNpZ25lZCBpbnQgaW5kZXg9MDsgaW5kZXg8Y291bnQ7IGluZGV4Kz0xKSB7CisgICAgY29uc3QgTWVzc2FnZSAqc291cmNlID0gZ2V0U291cmNlTWVzc2FnZShpbmRleCk7CisgICAgaWYgKGdldE1lc3NhZ2VMZW5ndGgoc291cmNlKSA9PSAwKSBjb250aW51ZTsKKworICAgIGNvbnN0IE1lc3NhZ2UgKnRyYW5zbGF0aW9uID0gZ2V0VHJhbnNsYXRlZE1lc3NhZ2UoaW5kZXgpOworICAgIGlmICghbGlzdFRyYW5zbGF0aW9uKHNvdXJjZSwgdHJhbnNsYXRpb24pKSByZXR1cm4gMDsKKyAgfQorCisgIHJldHVybiAxOworfQorCitzdGF0aWMgaW50CitzaG93U2ltcGxlVHJhbnNsYXRpb24gKGNvbnN0IGNoYXIgKnRleHQpIHsKKyAgeworICAgIHVuc2lnbmVkIGludCBpbmRleDsKKworICAgIGlmIChmaW5kU291cmNlTWVzc2FnZSh0ZXh0LCBzdHJsZW4odGV4dCksICZpbmRleCkpIHsKKyAgICAgIHJldHVybiBwdXRNZXNzYWdlKGdldFRyYW5zbGF0ZWRNZXNzYWdlKGluZGV4KSkgJiYgcHV0TmV3bGluZSgpOworICAgIH0KKyAgfQorCisgIGxvZ01lc3NhZ2UoTE9HX1dBUk5JTkcsICJ0cmFuc2xhdGlvbiBub3QgZm91bmQ6ICVzIiwgdGV4dCk7CisgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50CitzaG93UGx1cmFsVHJhbnNsYXRpb24gKGNvbnN0IGNoYXIgKnNpbmd1bGFyLCBjb25zdCBjaGFyICpwbHVyYWwsIGludCBjb3VudCkgeworICBjb25zdCBjaGFyICp0cmFuc2xhdGlvbiA9IGdldFBsdXJhbFRyYW5zbGF0aW9uKHNpbmd1bGFyLCBwbHVyYWwsIGNvdW50KTsKKyAgcmV0dXJuIHB1dFN0cmluZyh0cmFuc2xhdGlvbikgJiYgcHV0TmV3bGluZSgpOworfQorCitzdGF0aWMgaW50CitzaG93UHJvcGVydHkgKGNvbnN0IGNoYXIgKnByb3BlcnR5TmFtZSwgY29uc3QgY2hhciAqYXR0cmlidXRlTmFtZSkgeworICBpbnQgb2sgPSAwOworICBjaGFyICpwcm9wZXJ0eVZhbHVlID0gZ2V0TWVzc2FnZXNQcm9wZXJ0eShwcm9wZXJ0eU5hbWUpOworCisgIGlmIChwcm9wZXJ0eVZhbHVlKSB7CisgICAgaWYgKCFhdHRyaWJ1dGVOYW1lKSB7CisgICAgICBmcHJpbnRmKG91dHB1dFN0cmVhbSwgIiVzXG4iLCBwcm9wZXJ0eVZhbHVlKTsKKyAgICAgIG9rID0gbm9PdXRwdXRFcnJvcllldCgpOworICAgIH0gZWxzZSB7CisgICAgICBjaGFyICphdHRyaWJ1dGVWYWx1ZSA9IGdldE1lc3NhZ2VzQXR0cmlidXRlKHByb3BlcnR5VmFsdWUsIGF0dHJpYnV0ZU5hbWUpOworCisgICAgICBpZiAoYXR0cmlidXRlVmFsdWUpIHsKKyAgICAgICAgZnByaW50ZihvdXRwdXRTdHJlYW0sICIlc1xuIiwgYXR0cmlidXRlVmFsdWUpOworICAgICAgICBvayA9IG5vT3V0cHV0RXJyb3JZZXQoKTsKKyAgICAgICAgZnJlZShhdHRyaWJ1dGVWYWx1ZSk7CisgICAgICB9IGVsc2UgeworICAgICAgICBsb2dNZXNzYWdlKExPR19XQVJOSU5HLAorICAgICAgICAgICJhdHRyaWJ1dGUgbm90IGRlZmluZWQ6ICVzOiAlcyIsCisgICAgICAgICAgcHJvcGVydHlOYW1lLCBhdHRyaWJ1dGVOYW1lCisgICAgICAgICk7CisgICAgICB9CisgICAgfQorCisgICAgZnJlZShwcm9wZXJ0eVZhbHVlKTsKKyAgfSBlbHNlIHsKKyAgICBsb2dNZXNzYWdlKExPR19XQVJOSU5HLCAicHJvcGVydHkgbm90IGRlZmluZWQ6ICVzIiwgcHJvcGVydHlOYW1lKTsKKyAgfQorCisgIHJldHVybiBvazsKK30KKworc3RhdGljIGludAorcGFyc2VRdWFudGl0eSAoaW50ICpjb3VudCwgY29uc3QgY2hhciAqcXVhbnRpdHkpIHsKKyAgc3RhdGljIGNvbnN0IGludCBtaW5pbXVtID0gMDsKKyAgc3RhdGljIGNvbnN0IGludCBtYXhpbXVtID0gOTk5OTk5OTk5OworCisgIGlmICh2YWxpZGF0ZUludGVnZXIoY291bnQsIHF1YW50aXR5LCAmbWluaW11bSwgJm1heGltdW0pKSByZXR1cm4gMTsKKyAgbG9nTWVzc2FnZShMT0dfRVJSLCAiaW52YWxpZCBxdWFudGl0eTogJXMiLCBxdWFudGl0eSk7CisgIHJldHVybiAwOworfQorCitzdGF0aWMgY29uc3QgY2hhciAqCituZXh0UGFyYW1ldGVyIChjaGFyICoqKmFyZ3YsIGludCAqYXJnYywgY29uc3QgY2hhciAqZGVzY3JpcHRpb24pIHsKKyAgaWYgKCphcmdjKSB7CisgICAgKmFyZ2MgLT0gMTsKKyAgICByZXR1cm4gKigqYXJndikrKzsKKyAgfQorCisgIGlmICghZGVzY3JpcHRpb24pIHJldHVybiBOVUxMOworICBsb2dNZXNzYWdlKExPR19FUlIsICJtaXNzaW5nICVzIiwgZGVzY3JpcHRpb24pOworICBleGl0KFBST0dfRVhJVF9TWU5UQVgpOworfQorCitzdGF0aWMgdm9pZAorbm9Nb3JlUGFyYW1ldGVycyAoY2hhciAqKiphcmd2LCBpbnQgKmFyZ2MpIHsKKyAgaWYgKCphcmdjKSB7CisgICAgbG9nTWVzc2FnZShMT0dfRVJSLCAidG9vIG1hbnkgcGFyYW1ldGVycyIpOworICAgIGV4aXQoUFJPR19FWElUX1NZTlRBWCk7CisgIH0KK30KKworc3RhdGljIHZvaWQKK2JlZ2luQWN0aW9uIChjaGFyICoqKmFyZ3YsIGludCAqYXJnYykgeworICBub01vcmVQYXJhbWV0ZXJzKGFyZ3YsIGFyZ2MpOworCisgIHsKKyAgICBjb25zdCBjaGFyICpkaXJlY3RvcnkgPSBvcHRfbG9jYWxlRGlyZWN0b3J5OworCisgICAgaWYgKCpkaXJlY3RvcnkpIHsKKyAgICAgIGlmICghdGVzdERpcmVjdG9yeVBhdGgoZGlyZWN0b3J5KSkgeworICAgICAgICBsb2dNZXNzYWdlKExPR19XQVJOSU5HLCAibm90IGEgZGlyZWN0b3J5OiAlcyIsIGRpcmVjdG9yeSk7CisgICAgICAgIGV4aXQoUFJPR19FWElUX1NFTUFOVElDKTsKKyAgICAgIH0KKworICAgICAgc2V0TWVzc2FnZXNEaXJlY3RvcnkoZGlyZWN0b3J5KTsKKyAgICB9CisgIH0KKworICBpZiAoKm9wdF9sb2NhbGVTcGVjaWZpZXIpIHNldE1lc3NhZ2VzTG9jYWxlKG9wdF9sb2NhbGVTcGVjaWZpZXIpOworICBpZiAoKm9wdF9kb21haW5OYW1lKSBzZXRNZXNzYWdlc0RvbWFpbihvcHRfZG9tYWluTmFtZSk7CisgIGlmICghbG9hZE1lc3NhZ2VDYXRhbG9nKCkpIGV4aXQoUFJPR19FWElUX0ZBVEFMKTsKK30KKworaW50CittYWluIChpbnQgYXJnYywgY2hhciAqYXJndltdKSB7CisgIG91dHB1dFN0cmVhbSA9IHN0ZG91dDsKKworICB7CisgICAgY29uc3QgQ29tbWFuZExpbmVEZXNjcmlwdG9yIGRlc2NyaXB0b3IgPSB7CisgICAgICAub3B0aW9ucyA9ICZwcm9ncmFtT3B0aW9ucywKKyAgICAgIC5hcHBsaWNhdGlvbk5hbWUgPSAibXNndGVzdCIsCisKKyAgICAgIC51c2FnZSA9IHsKKyAgICAgICAgLnB1cnBvc2UgPSBzdHJ0ZXh0KCJUZXN0IG1lc3NhZ2UgbG9jYWxpemF0aW9uIHVzaW5nIHRoZSBtZXNzYWdlIGNhdGFsb2cgcmVhZGVyLiIpLAorICAgICAgICAucGFyYW1ldGVycyA9ICJhY3Rpb24gW2FyZ3VtZW50IC4uLl0iLAorICAgICAgfQorICAgIH07CisKKyAgICBQUk9DRVNTX09QVElPTlMoZGVzY3JpcHRvciwgYXJnYywgYXJndik7CisgIH0KKworICBpZiAoIWFyZ2MpIHsKKyAgICBsb2dNZXNzYWdlKExPR19FUlIsICJtaXNzaW5nIGFjdGlvbiIpOworICAgIGV4aXQoUFJPR19FWElUX1NZTlRBWCk7CisgIH0KKworICBjb25zdCBjaGFyICphY3Rpb24gPSAqYXJndisrOworICBhcmdjIC09IDE7CisgIGludCBvayA9IDE7CisKKyAgaWYgKGlzQWJicmV2aWF0aW9uKCJ0cmFuc2xhdGlvbiIsIGFjdGlvbikpIHsKKyAgICBjb25zdCBjaGFyICptZXNzYWdlID0gbmV4dFBhcmFtZXRlcigmYXJndiwgJmFyZ2MsICJtZXNzYWdlIik7CisgICAgY29uc3QgY2hhciAqcGx1cmFsID0gbmV4dFBhcmFtZXRlcigmYXJndiwgJmFyZ2MsIE5VTEwpOworCisgICAgaWYgKHBsdXJhbCkgeworICAgICAgY29uc3QgY2hhciAqcXVhbnRpdHkgPSBuZXh0UGFyYW1ldGVyKCZhcmd2LCAmYXJnYywgInF1YW50aXR5Iik7CisKKyAgICAgIGludCBjb3VudDsKKyAgICAgIGlmICghcGFyc2VRdWFudGl0eSgmY291bnQsIHF1YW50aXR5KSkgcmV0dXJuIFBST0dfRVhJVF9TWU5UQVg7CisKKyAgICAgIGJlZ2luQWN0aW9uKCZhcmd2LCAmYXJnYyk7CisgICAgICBvayA9IHNob3dQbHVyYWxUcmFuc2xhdGlvbihtZXNzYWdlLCBwbHVyYWwsIGNvdW50KTsKKyAgICB9IGVsc2UgeworICAgICAgYmVnaW5BY3Rpb24oJmFyZ3YsICZhcmdjKTsKKyAgICAgIG9rID0gc2hvd1NpbXBsZVRyYW5zbGF0aW9uKG1lc3NhZ2UpOworICAgIH0KKyAgfSBlbHNlIGlmIChpc0FiYnJldmlhdGlvbigiY291bnQiLCBhY3Rpb24pKSB7CisgICAgYmVnaW5BY3Rpb24oJmFyZ3YsICZhcmdjKTsKKyAgICBmcHJpbnRmKG91dHB1dFN0cmVhbSwgIiV1XG4iLCBnZXRNZXNzYWdlQ291bnQoKSk7CisgICAgb2sgPSBub091dHB1dEVycm9yWWV0KCk7CisgIH0gZWxzZSBpZiAoaXNBYmJyZXZpYXRpb24oImFsbCIsIGFjdGlvbikpIHsKKyAgICBiZWdpbkFjdGlvbigmYXJndiwgJmFyZ2MpOworICAgIG9rID0gbGlzdEFsbFRyYW5zbGF0aW9ucygpOworICB9IGVsc2UgaWYgKGlzQWJicmV2aWF0aW9uKCJtZXRhZGF0YSIsIGFjdGlvbikpIHsKKyAgICBiZWdpbkFjdGlvbigmYXJndiwgJmFyZ2MpOworICAgIGZwcmludGYob3V0cHV0U3RyZWFtLCAiJXNcbiIsIGdldE1lc3NhZ2VzTWV0YWRhdGEoKSk7CisgICAgb2sgPSBub091dHB1dEVycm9yWWV0KCk7CisgIH0gZWxzZSBpZiAoaXNBYmJyZXZpYXRpb24oInByb3BlcnR5IiwgYWN0aW9uKSkgeworICAgIGNvbnN0IGNoYXIgKnByb3BlcnR5ID0gbmV4dFBhcmFtZXRlcigmYXJndiwgJmFyZ2MsICJwcm9wZXJ0eSBuYW1lIik7CisgICAgY29uc3QgY2hhciAqYXR0cmlidXRlID0gbmV4dFBhcmFtZXRlcigmYXJndiwgJmFyZ2MsIE5VTEwpOworCisgICAgYmVnaW5BY3Rpb24oJmFyZ3YsICZhcmdjKTsKKyAgICBvayA9IHNob3dQcm9wZXJ0eShwcm9wZXJ0eSwgYXR0cmlidXRlKTsKKyAgfSBlbHNlIHsKKyAgICBsb2dNZXNzYWdlKExPR19FUlIsICJ1bmtub3duIGFjdGlvbjogJXMiLCBhY3Rpb24pOworICAgIHJldHVybiBQUk9HX0VYSVRfU1lOVEFYOworICB9CisKKyAgaWYgKGZlcnJvcihvdXRwdXRTdHJlYW0pKSByZXR1cm4gUFJPR19FWElUX0ZBVEFMOworICByZXR1cm4gb2s/IFBST0dfRVhJVF9TVUNDRVNTOiBQUk9HX0VYSVRfU0VNQU5USUM7Cit9CmRpZmYgLS1naXQgYS9Qcm9ncmFtcy9ub3Rlcy5jIGIvUHJvZ3JhbXMvbm90ZXMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NTVhMmMwCi0tLSAvZGV2L251bGwKKysrIGIvUHJvZ3JhbXMvbm90ZXMuYwpAQCAtMCwwICsxLDIxNCBAQAorLyoKKyAqIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisgKiAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisgKgorICogQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKKyNpbmNsdWRlICJwcm9sb2d1ZS5oIgorCisjaW5jbHVkZSAibm90ZXMuaCIKKworI2RlZmluZSBOT1RFX0ZSRVFVRU5DWV9GQUNUT1IgMTAwMAorCitzdGF0aWMgY29uc3QgdWludDMyX3Qgc2NhbGVkTm90ZUZyZXF1ZW5jaWVzW10gPSB7CisgIC8qICAgMCByZXN0ICovICAgICAgICAwLAorICAvKiAgIDEgLTFDIyAqLyAgICAgODY2MiwKKyAgLyogICAyIC0xRCAgKi8gICAgIDkxNzcsCisgIC8qICAgMyAtMUQjICovICAgICA5NzIzLAorICAvKiAgIDQgLTFFICAqLyAgICAxMDMwMSwKKyAgLyogICA1IC0xRiAgKi8gICAgMTA5MTMsCisgIC8qICAgNiAtMUYjICovICAgIDExNTYyLAorICAvKiAgIDcgLTFHICAqLyAgICAxMjI1MCwKKyAgLyogICA4IC0xRyMgKi8gICAgMTI5NzgsCisgIC8qICAgOSAtMUEgICovICAgIDEzNzUwLAorICAvKiAgMTAgLTFBIyAqLyAgICAxNDU2OCwKKyAgLyogIDExIC0xQiAgKi8gICAgMTU0MzQsCisgIC8qICAxMiAgMEMgICovICAgIDE2MzUyLAorICAvKiAgMTMgIDBDIyAqLyAgICAxNzMyNCwKKyAgLyogIDE0ICAwRCAgKi8gICAgMTgzNTQsCisgIC8qICAxNSAgMEQjICovICAgIDE5NDQ1LAorICAvKiAgMTYgIDBFICAqLyAgICAyMDYwMiwKKyAgLyogIDE3ICAwRiAgKi8gICAgMjE4MjcsCisgIC8qICAxOCAgMEYjICovICAgIDIzMTI1LAorICAvKiAgMTkgIDBHICAqLyAgICAyNDUwMCwKKyAgLyogIDIwICAwRyMgKi8gICAgMjU5NTcsCisgIC8qICAyMSAgMEEgICovICAgIDI3NTAwLAorICAvKiAgMjIgIDBBIyAqLyAgICAyOTEzNSwKKyAgLyogIDIzICAwQiAgKi8gICAgMzA4NjgsCisgIC8qICAyNCAgMUMgICovICAgIDMyNzAzLAorICAvKiAgMjUgIDFDIyAqLyAgICAzNDY0OCwKKyAgLyogIDI2ICAxRCAgKi8gICAgMzY3MDgsCisgIC8qICAyNyAgMUQjICovICAgIDM4ODkxLAorICAvKiAgMjggIDFFICAqLyAgICA0MTIwMywKKyAgLyogIDI5ICAxRiAgKi8gICAgNDM2NTQsCisgIC8qICAzMCAgMUYjICovICAgIDQ2MjQ5LAorICAvKiAgMzEgIDFHICAqLyAgICA0ODk5OSwKKyAgLyogIDMyICAxRyMgKi8gICAgNTE5MTMsCisgIC8qICAzMyAgMUEgICovICAgIDU1MDAwLAorICAvKiAgMzQgIDFBIyAqLyAgICA1ODI3MCwKKyAgLyogIDM1ICAxQiAgKi8gICAgNjE3MzUsCisgIC8qICAzNiAgMkMgICovICAgIDY1NDA2LAorICAvKiAgMzcgIDJDIyAqLyAgICA2OTI5NiwKKyAgLyogIDM4ICAyRCAgKi8gICAgNzM0MTYsCisgIC8qICAzOSAgMkQjICovICAgIDc3NzgyLAorICAvKiAgNDAgIDJFICAqLyAgICA4MjQwNywKKyAgLyogIDQxICAyRiAgKi8gICAgODczMDcsCisgIC8qICA0MiAgMkYjICovICAgIDkyNDk5LAorICAvKiAgNDMgIDJHICAqLyAgICA5Nzk5OSwKKyAgLyogIDQ0ICAyRyMgKi8gICAxMDM4MjYsCisgIC8qICA0NSAgMkEgICovICAgMTEwMDAwLAorICAvKiAgNDYgIDJBIyAqLyAgIDExNjU0MSwKKyAgLyogIDQ3ICAyQiAgKi8gICAxMjM0NzEsCisgIC8qICA0OCAgM0MgICovICAgMTMwODEzLAorICAvKiAgNDkgIDNDIyAqLyAgIDEzODU5MSwKKyAgLyogIDUwICAzRCAgKi8gICAxNDY4MzIsCisgIC8qICA1MSAgM0QjICovICAgMTU1NTYzLAorICAvKiAgNTIgIDNFICAqLyAgIDE2NDgxNCwKKyAgLyogIDUzICAzRiAgKi8gICAxNzQ2MTQsCisgIC8qICA1NCAgM0YjICovICAgMTg0OTk3LAorICAvKiAgNTUgIDNHICAqLyAgIDE5NTk5OCwKKyAgLyogIDU2ICAzRyMgKi8gICAyMDc2NTIsCisgIC8qICA1NyAgM0EgICovICAgMjIwMDAwLAorICAvKiAgNTggIDNBIyAqLyAgIDIzMzA4MiwKKyAgLyogIDU5ICAzQiAgKi8gICAyNDY5NDIsCisgIC8qICA2MCAgNEMgICovICAgMjYxNjI2LAorICAvKiAgNjEgIDRDIyAqLyAgIDI3NzE4MywKKyAgLyogIDYyICA0RCAgKi8gICAyOTM2NjUsCisgIC8qICA2MyAgNEQjICovICAgMzExMTI3LAorICAvKiAgNjQgIDRFICAqLyAgIDMyOTYyOCwKKyAgLyogIDY1ICA0RiAgKi8gICAzNDkyMjgsCisgIC8qICA2NiAgNEYjICovICAgMzY5OTk0LAorICAvKiAgNjcgIDRHICAqLyAgIDM5MTk5NSwKKyAgLyogIDY4ICA0RyMgKi8gICA0MTUzMDUsCisgIC8qICA2OSAgNEEgICovICAgNDQwMDAwLAorICAvKiAgNzAgIDRBIyAqLyAgIDQ2NjE2NCwKKyAgLyogIDcxICA0QiAgKi8gICA0OTM4ODMsCisgIC8qICA3MiAgNUMgICovICAgNTIzMjUxLAorICAvKiAgNzMgIDVDIyAqLyAgIDU1NDM2NSwKKyAgLyogIDc0ICA1RCAgKi8gICA1ODczMzAsCisgIC8qICA3NSAgNUQjICovICAgNjIyMjU0LAorICAvKiAgNzYgIDVFICAqLyAgIDY1OTI1NSwKKyAgLyogIDc3ICA1RiAgKi8gICA2OTg0NTYsCisgIC8qICA3OCAgNUYjICovICAgNzM5OTg5LAorICAvKiAgNzkgIDVHICAqLyAgIDc4Mzk5MSwKKyAgLyogIDgwICA1RyMgKi8gICA4MzA2MDksCisgIC8qICA4MSAgNUEgICovICAgODgwMDAwLAorICAvKiAgODIgIDVBIyAqLyAgIDkzMjMyOCwKKyAgLyogIDgzICA1QiAgKi8gICA5ODc3NjcsCisgIC8qICA4NCAgNkMgICovICAxMDQ2NTAyLAorICAvKiAgODUgIDZDIyAqLyAgMTEwODczMSwKKyAgLyogIDg2ICA2RCAgKi8gIDExNzQ2NTksCisgIC8qICA4NyAgNkQjICovICAxMjQ0NTA4LAorICAvKiAgODggIDZFICAqLyAgMTMxODUxMCwKKyAgLyogIDg5ICA2RiAgKi8gIDEzOTY5MTMsCisgIC8qICA5MCAgNkYjICovICAxNDc5OTc4LAorICAvKiAgOTEgIDZHICAqLyAgMTU2Nzk4MiwKKyAgLyogIDkyICA2RyMgKi8gIDE2NjEyMTksCisgIC8qICA5MyAgNkEgICovICAxNzYwMDAwLAorICAvKiAgOTQgIDZBIyAqLyAgMTg2NDY1NSwKKyAgLyogIDk1ICA2QiAgKi8gIDE5NzU1MzMsCisgIC8qICA5NiAgN0MgICovICAyMDkzMDA1LAorICAvKiAgOTcgIDdDIyAqLyAgMjIxNzQ2MSwKKyAgLyogIDk4ICA3RCAgKi8gIDIzNDkzMTgsCisgIC8qICA5OSAgN0QjICovICAyNDg5MDE2LAorICAvKiAxMDAgIDdFICAqLyAgMjYzNzAyMCwKKyAgLyogMTAxICA3RiAgKi8gIDI3OTM4MjYsCisgIC8qIDEwMiAgN0YjICovICAyOTU5OTU1LAorICAvKiAxMDMgIDdHICAqLyAgMzEzNTk2MywKKyAgLyogMTA0ICA3RyMgKi8gIDMzMjI0MzgsCisgIC8qIDEwNSAgN0EgICovICAzNTIwMDAwLAorICAvKiAxMDYgIDdBIyAqLyAgMzcyOTMxMCwKKyAgLyogMTA3ICA3QiAgKi8gIDM5NTEwNjYsCisgIC8qIDEwOCAgOEMgICovICA0MTg2MDA5LAorICAvKiAxMDkgIDhDIyAqLyAgNDQzNDkyMiwKKyAgLyogMTEwICA4RCAgKi8gIDQ2OTg2MzYsCisgIC8qIDExMSAgOEQjICovICA0OTc4MDMyLAorICAvKiAxMTIgIDhFICAqLyAgNTI3NDA0MSwKKyAgLyogMTEzICA4RiAgKi8gIDU1ODc2NTIsCisgIC8qIDExNCAgOEYjICovICA1OTE5OTExLAorICAvKiAxMTUgIDhHICAqLyAgNjI3MTkyNywKKyAgLyogMTE2ICA4RyMgKi8gIDY2NDQ4NzUsCisgIC8qIDExNyAgOEEgICovICA3MDQwMDAwLAorICAvKiAxMTggIDhBIyAqLyAgNzQ1ODYyMCwKKyAgLyogMTE5ICA4QiAgKi8gIDc5MDIxMzMsCisgIC8qIDEyMCAgOUMgICovICA4MzcyMDE4LAorICAvKiAxMjEgIDlDIyAqLyAgODg2OTg0NCwKKyAgLyogMTIyICA5RCAgKi8gIDkzOTcyNzMsCisgIC8qIDEyMyAgOUQjICovICA5OTU2MDYzLAorICAvKiAxMjQgIDlFICAqLyAxMDU0ODA4MiwKKyAgLyogMTI1ICA5RiAgKi8gMTExNzUzMDMsCisgIC8qIDEyNiAgOUYjICovIDExODM5ODIyLAorICAvKiAxMjcgIDlHICAqLyAxMjU0Mzg1NAorfTsKKwordW5zaWduZWQgY2hhcgorZ2V0TG93ZXN0Tm90ZSAodm9pZCkgeworICByZXR1cm4gMTsKK30KKwordW5zaWduZWQgY2hhcgorZ2V0SGlnaGVzdE5vdGUgKHZvaWQpIHsKKyAgcmV0dXJuIEFSUkFZX0NPVU5UKHNjYWxlZE5vdGVGcmVxdWVuY2llcykgLSAxOworfQorCitzdGF0aWMgaW5saW5lIHVpbnQzMl90CitnZXRTY2FsZWROb3RlRnJlcXVlbmN5ICh1bnNpZ25lZCBjaGFyIG5vdGUpIHsKKyAgdW5zaWduZWQgY2hhciBoaWdoZXN0Tm90ZSA9IGdldEhpZ2hlc3ROb3RlKCk7CisKKyAgaWYgKG5vdGUgPiBoaWdoZXN0Tm90ZSkgbm90ZSA9IGhpZ2hlc3ROb3RlOworICByZXR1cm4gc2NhbGVkTm90ZUZyZXF1ZW5jaWVzW25vdGVdOworfQorCit1aW50MzJfdAorZ2V0SW50ZWdlck5vdGVGcmVxdWVuY3kgKHVuc2lnbmVkIGNoYXIgbm90ZSkgeworICByZXR1cm4gZ2V0U2NhbGVkTm90ZUZyZXF1ZW5jeShub3RlKSAvIE5PVEVfRlJFUVVFTkNZX0ZBQ1RPUjsKK30KKworI2lmbmRlZiBOT19GTE9BVAorZmxvYXQKK2dldFJlYWxOb3RlRnJlcXVlbmN5ICh1bnNpZ25lZCBjaGFyIG5vdGUpIHsKKyAgcmV0dXJuIChmbG9hdClnZXRTY2FsZWROb3RlRnJlcXVlbmN5KG5vdGUpIC8gKGZsb2F0KU5PVEVfRlJFUVVFTkNZX0ZBQ1RPUjsKK30KKyNlbmRpZiAvKiBOT19GTE9BVCAqLworCit1bnNpZ25lZCBjaGFyCitnZXROZWFyZXN0Tm90ZSAoTm90ZUZyZXF1ZW5jeSBmcmVxdWVuY3kpIHsKKyAgaWYgKCFmcmVxdWVuY3kpIHJldHVybiAwOworCisgIHVuc2lnbmVkIGNoYXIgbG93ZXN0Tm90ZSA9IGdldExvd2VzdE5vdGUoKTsKKyAgaWYgKGZyZXF1ZW5jeSA8PSBnZXROb3RlRnJlcXVlbmN5KGxvd2VzdE5vdGUpKSByZXR1cm4gbG93ZXN0Tm90ZTsKKworICB1bnNpZ25lZCBjaGFyIGhpZ2hlc3ROb3RlID0gZ2V0SGlnaGVzdE5vdGUoKTsKKyAgaWYgKGZyZXF1ZW5jeSA+PSBnZXROb3RlRnJlcXVlbmN5KGhpZ2hlc3ROb3RlKSkgcmV0dXJuIGhpZ2hlc3ROb3RlOworCisgIHdoaWxlIChsb3dlc3ROb3RlIDw9IGhpZ2hlc3ROb3RlKSB7CisgICAgdW5zaWduZWQgY2hhciBjdXJyZW50Tm90ZSA9IChsb3dlc3ROb3RlICsgaGlnaGVzdE5vdGUpIC8gMjsKKworICAgIGlmIChmcmVxdWVuY3kgPCBnZXROb3RlRnJlcXVlbmN5KGN1cnJlbnROb3RlKSkgeworICAgICAgaGlnaGVzdE5vdGUgPSBjdXJyZW50Tm90ZSAtIDE7CisgICAgfSBlbHNlIHsKKyAgICAgIGxvd2VzdE5vdGUgPSBjdXJyZW50Tm90ZSArIDE7CisgICAgfQorICB9CisKKyAgdW5zaWduZWQgY2hhciBsb3dlck5vdGUgPSBoaWdoZXN0Tm90ZTsKKyAgdW5zaWduZWQgY2hhciBoaWdoZXJOb3RlID0gbG93ZXJOb3RlICsgMTsKKworICBOb3RlRnJlcXVlbmN5IGxvd2VyRnJlcXVlbmN5ID0gZ2V0Tm90ZUZyZXF1ZW5jeShsb3dlck5vdGUpOworICBOb3RlRnJlcXVlbmN5IGhpZ2hlckZyZXF1ZW5jeSA9IGdldE5vdGVGcmVxdWVuY3koaGlnaGVyTm90ZSk7CisKKyAgcmV0dXJuICgoZnJlcXVlbmN5IC0gbG93ZXJGcmVxdWVuY3kpIDwgKGhpZ2hlckZyZXF1ZW5jeSAtIGZyZXF1ZW5jeSkpPworICAgICAgICAgbG93ZXJOb3RlOiBoaWdoZXJOb3RlOworfQpkaWZmIC0tZ2l0IGEvUHJvZ3JhbXMvbm90ZXNfYmVlcC5jIGIvUHJvZ3JhbXMvbm90ZXNfYmVlcC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjllYjY1YzcKLS0tIC9kZXYvbnVsbAorKysgYi9Qcm9ncmFtcy9ub3Rlc19iZWVwLmMKQEAgLTAsMCArMSw4NiBAQAorLyoKKyAqIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisgKiAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisgKgorICogQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKKyNpbmNsdWRlICJwcm9sb2d1ZS5oIgorCisjaW5jbHVkZSAibG9nLmgiCisjaW5jbHVkZSAiYXN5bmNfd2FpdC5oIgorI2luY2x1ZGUgImJlZXAuaCIKKyNpbmNsdWRlICJub3Rlcy5oIgorCitzdHJ1Y3QgTm90ZURldmljZVN0cnVjdCB7CisgIGNoYXIgbXVzdEhhdmVBdExlYXN0T25lRmllbGQ7Cit9OworCitzdGF0aWMgTm90ZURldmljZSAqCitiZWVwQ29uc3RydWN0IChpbnQgZXJyb3JMZXZlbCkgeworICBOb3RlRGV2aWNlICpkZXZpY2U7CisKKyAgaWYgKChkZXZpY2UgPSBtYWxsb2Moc2l6ZW9mKCpkZXZpY2UpKSkpIHsKKyAgICBpZiAoY2FuQmVlcCgpKSB7CisgICAgICBsb2dNZXNzYWdlKExPR19ERUJVRywgImJlZXBlciBlbmFibGVkIik7CisgICAgICByZXR1cm4gZGV2aWNlOworICAgIH0KKworICAgIGZyZWUoZGV2aWNlKTsKKyAgfSBlbHNlIHsKKyAgICBsb2dNYWxsb2NFcnJvcigpOworICB9CisKKyAgbG9nTWVzc2FnZShMT0dfREVCVUcsICJiZWVwZXIgbm90IGF2YWlsYWJsZSIpOworICByZXR1cm4gTlVMTDsKK30KKworc3RhdGljIHZvaWQKK2JlZXBEZXN0cnVjdCAoTm90ZURldmljZSAqZGV2aWNlKSB7CisgIGVuZEJlZXAoKTsKKyAgZnJlZShkZXZpY2UpOworICBsb2dNZXNzYWdlKExPR19ERUJVRywgImJlZXBlciBkaXNhYmxlZCIpOworfQorCitzdGF0aWMgaW50CitiZWVwVG9uZSAoTm90ZURldmljZSAqZGV2aWNlLCB1bnNpZ25lZCBpbnQgZHVyYXRpb24sIE5vdGVGcmVxdWVuY3kgZnJlcXVlbmN5KSB7CisgIHVpbnQzMl90IHBpdGNoID0gZnJlcXVlbmN5OworICBsb2dNZXNzYWdlKExPR19ERUJVRywgInRvbmU6IE1TZWNzOiV1IEZyZXE6JSJQUkl1MzIsIGR1cmF0aW9uLCBwaXRjaCk7CisKKyAgaWYgKCFwaXRjaCkgeworICAgIGFzeW5jV2FpdChkdXJhdGlvbik7CisgICAgcmV0dXJuIDE7CisgIH0KKworICByZXR1cm4gcGxheUJlZXAocGl0Y2gsIGR1cmF0aW9uKTsKK30KKworc3RhdGljIGludAorYmVlcE5vdGUgKE5vdGVEZXZpY2UgKmRldmljZSwgdW5zaWduZWQgaW50IGR1cmF0aW9uLCB1bnNpZ25lZCBjaGFyIG5vdGUpIHsKKyAgcmV0dXJuIGJlZXBUb25lKGRldmljZSwgZHVyYXRpb24sIGdldE5vdGVGcmVxdWVuY3kobm90ZSkpOworfQorCitzdGF0aWMgaW50CitiZWVwRmx1c2ggKE5vdGVEZXZpY2UgKmRldmljZSkgeworICByZXR1cm4gMTsKK30KKworY29uc3QgTm90ZU1ldGhvZHMgYmVlcE5vdGVNZXRob2RzID0geworICAuY29uc3RydWN0ID0gYmVlcENvbnN0cnVjdCwKKyAgLmRlc3RydWN0ID0gYmVlcERlc3RydWN0LAorCisgIC50b25lID0gYmVlcFRvbmUsCisgIC5ub3RlID0gYmVlcE5vdGUsCisgIC5mbHVzaCA9IGJlZXBGbHVzaAorfTsKZGlmZiAtLWdpdCBhL1Byb2dyYW1zL25vdGVzX2ZtLmMgYi9Qcm9ncmFtcy9ub3Rlc19mbS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAxMWJiZDcKLS0tIC9kZXYvbnVsbAorKysgYi9Qcm9ncmFtcy9ub3Rlc19mbS5jCkBAIC0wLDAgKzEsOTUgQEAKKy8qCisgKiBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorICogICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorICoKKyAqIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorICoKKyAqIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyAqLworCisjaW5jbHVkZSAicHJvbG9ndWUuaCIKKworI2luY2x1ZGUgImxvZy5oIgorI2luY2x1ZGUgInByZWZzLmgiCisjaW5jbHVkZSAiYXN5bmNfd2FpdC5oIgorI2luY2x1ZGUgIm5vdGVzLmgiCisjaW5jbHVkZSAiZm0uaCIKKworc3RydWN0IE5vdGVEZXZpY2VTdHJ1Y3QgeworICB1bnNpZ25lZCBpbnQgY2hhbm5lbE51bWJlcjsKK307CisKK3N0YXRpYyBOb3RlRGV2aWNlICoKK2ZtQ29uc3RydWN0IChpbnQgZXJyb3JMZXZlbCkgeworICBOb3RlRGV2aWNlICpkZXZpY2U7CisKKyAgaWYgKChkZXZpY2UgPSBtYWxsb2Moc2l6ZW9mKCpkZXZpY2UpKSkpIHsKKyAgICBpZiAoZm1FbmFibGVQb3J0cyhlcnJvckxldmVsKSkgeworICAgICAgaWYgKGZtVGVzdENhcmQoZXJyb3JMZXZlbCkpIHsKKyAgICAgICAgZGV2aWNlLT5jaGFubmVsTnVtYmVyID0gMDsKKworICAgICAgICBsb2dNZXNzYWdlKExPR19ERUJVRywgIkZNIGVuYWJsZWQiKTsKKyAgICAgICAgcmV0dXJuIGRldmljZTsKKyAgICAgIH0KKworICAgICAgZm1EaXNhYmxlUG9ydHMoKTsKKyAgICB9CisKKyAgICBmcmVlKGRldmljZSk7CisgIH0gZWxzZSB7CisgICAgbG9nTWFsbG9jRXJyb3IoKTsKKyAgfQorCisgIGxvZ01lc3NhZ2UoTE9HX0RFQlVHLCAiRk0gbm90IGF2YWlsYWJsZSIpOworICByZXR1cm4gTlVMTDsKK30KKworc3RhdGljIHZvaWQKK2ZtRGVzdHJ1Y3QgKE5vdGVEZXZpY2UgKmRldmljZSkgeworICBmcmVlKGRldmljZSk7CisgIGZtRGlzYWJsZVBvcnRzKCk7CisgIGxvZ01lc3NhZ2UoTE9HX0RFQlVHLCAiRk0gZGlzYWJsZWQiKTsKK30KKworc3RhdGljIGludAorZm1Ub25lIChOb3RlRGV2aWNlICpkZXZpY2UsIHVuc2lnbmVkIGludCBkdXJhdGlvbiwgTm90ZUZyZXF1ZW5jeSBmcmVxdWVuY3kpIHsKKyAgdWludDMyX3QgcGl0Y2ggPSBmcmVxdWVuY3k7CisgIGxvZ01lc3NhZ2UoTE9HX0RFQlVHLCAidG9uZTogTVNlY3M6JXUgRnJlcTolIlBSSXUzMiwKKyAgICAgICAgICAgICBkdXJhdGlvbiwgcGl0Y2gpOworCisgIGlmIChwaXRjaCkgeworICAgIGZtUGxheVRvbmUoZGV2aWNlLT5jaGFubmVsTnVtYmVyLCBwaXRjaCwgZHVyYXRpb24sIHByZWZzLmZtVm9sdW1lKTsKKyAgfSBlbHNlIHsKKyAgICBhc3luY1dhaXQoZHVyYXRpb24pOworICB9CisKKyAgcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQKK2ZtTm90ZSAoTm90ZURldmljZSAqZGV2aWNlLCB1bnNpZ25lZCBpbnQgZHVyYXRpb24sIHVuc2lnbmVkIGNoYXIgbm90ZSkgeworICByZXR1cm4gZm1Ub25lKGRldmljZSwgZHVyYXRpb24sIGdldE5vdGVGcmVxdWVuY3kobm90ZSkpOworfQorCitzdGF0aWMgaW50CitmbUZsdXNoIChOb3RlRGV2aWNlICpkZXZpY2UpIHsKKyAgcmV0dXJuIDE7Cit9CisKK2NvbnN0IE5vdGVNZXRob2RzIGZtTm90ZU1ldGhvZHMgPSB7CisgIC5jb25zdHJ1Y3QgPSBmbUNvbnN0cnVjdCwKKyAgLmRlc3RydWN0ID0gZm1EZXN0cnVjdCwKKworICAudG9uZSA9IGZtVG9uZSwKKyAgLm5vdGUgPSBmbU5vdGUsCisgIC5mbHVzaCA9IGZtRmx1c2gKK307CmRpZmYgLS1naXQgYS9Qcm9ncmFtcy9ub3Rlc19taWRpLmMgYi9Qcm9ncmFtcy9ub3Rlc19taWRpLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGMxZTQxNAotLS0gL2Rldi9udWxsCisrKyBiL1Byb2dyYW1zL25vdGVzX21pZGkuYwpAQCAtMCwwICsxLDk5IEBACisvKgorICogQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyAqICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyAqCisgKiBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorICoKKyAqIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyAqCisgKiBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisgKi8KKworI2luY2x1ZGUgInByb2xvZ3VlLmgiCisKKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorCisjaW5jbHVkZSAicHJlZnMuaCIKKyNpbmNsdWRlICJsb2cuaCIKKyNpbmNsdWRlICJtaWRpLmgiCisjaW5jbHVkZSAibm90ZXMuaCIKKworY2hhciAqb3B0X21pZGlEZXZpY2U7CisKK3N0cnVjdCBOb3RlRGV2aWNlU3RydWN0IHsKKyAgTWlkaURldmljZSAqbWlkaTsKKyAgaW50IGNoYW5uZWxOdW1iZXI7Cit9OworCitzdGF0aWMgTm90ZURldmljZSAqCittaWRpQ29uc3RydWN0IChpbnQgZXJyb3JMZXZlbCkgeworICBOb3RlRGV2aWNlICpkZXZpY2U7CisKKyAgaWYgKChkZXZpY2UgPSBtYWxsb2Moc2l6ZW9mKCpkZXZpY2UpKSkpIHsKKyAgICBpZiAoKGRldmljZS0+bWlkaSA9IG9wZW5NaWRpRGV2aWNlKGVycm9yTGV2ZWwsIG9wdF9taWRpRGV2aWNlKSkpIHsKKyAgICAgIGRldmljZS0+Y2hhbm5lbE51bWJlciA9IDA7CisgICAgICBzZXRNaWRpSW5zdHJ1bWVudChkZXZpY2UtPm1pZGksIGRldmljZS0+Y2hhbm5lbE51bWJlciwgcHJlZnMubWlkaUluc3RydW1lbnQpOworCisgICAgICBsb2dNZXNzYWdlKExPR19ERUJVRywgIk1JREkgZW5hYmxlZCIpOworICAgICAgcmV0dXJuIGRldmljZTsKKyAgICB9CisKKyAgICBmcmVlKGRldmljZSk7CisgIH0gZWxzZSB7CisgICAgbG9nTWFsbG9jRXJyb3IoKTsKKyAgfQorCisgIGxvZ01lc3NhZ2UoTE9HX0RFQlVHLCAiTUlESSBub3QgYXZhaWxhYmxlIik7CisgIHJldHVybiBOVUxMOworfQorCitzdGF0aWMgdm9pZAorbWlkaURlc3RydWN0IChOb3RlRGV2aWNlICpkZXZpY2UpIHsKKyAgY2xvc2VNaWRpRGV2aWNlKGRldmljZS0+bWlkaSk7CisgIGZyZWUoZGV2aWNlKTsKKyAgbG9nTWVzc2FnZShMT0dfREVCVUcsICJNSURJIGRpc2FibGVkIik7Cit9CisKK3N0YXRpYyBpbnQKK21pZGlOb3RlIChOb3RlRGV2aWNlICpkZXZpY2UsIHVuc2lnbmVkIGludCBkdXJhdGlvbiwgdW5zaWduZWQgY2hhciBub3RlKSB7CisgIGxvZ01lc3NhZ2UoTE9HX0RFQlVHLCAidG9uZTogTVNlY3M6JXUgTm90ZToldSIsIGR1cmF0aW9uLCBub3RlKTsKKyAgYmVnaW5NaWRpQmxvY2soZGV2aWNlLT5taWRpKTsKKworICBpZiAobm90ZSkgeworICAgIHN0YXJ0TWlkaU5vdGUoZGV2aWNlLT5taWRpLCBkZXZpY2UtPmNoYW5uZWxOdW1iZXIsIG5vdGUsIHByZWZzLm1pZGlWb2x1bWUpOworICAgIGluc2VydE1pZGlXYWl0KGRldmljZS0+bWlkaSwgZHVyYXRpb24pOworICAgIHN0b3BNaWRpTm90ZShkZXZpY2UtPm1pZGksIGRldmljZS0+Y2hhbm5lbE51bWJlcik7CisgIH0gZWxzZSB7CisgICAgaW5zZXJ0TWlkaVdhaXQoZGV2aWNlLT5taWRpLCBkdXJhdGlvbik7CisgIH0KKworICBlbmRNaWRpQmxvY2soZGV2aWNlLT5taWRpKTsKKyAgcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQKK21pZGlUb25lIChOb3RlRGV2aWNlICpkZXZpY2UsIHVuc2lnbmVkIGludCBkdXJhdGlvbiwgTm90ZUZyZXF1ZW5jeSBmcmVxdWVuY3kpIHsKKyAgcmV0dXJuIG1pZGlOb3RlKGRldmljZSwgZHVyYXRpb24sIGdldE5lYXJlc3ROb3RlKGZyZXF1ZW5jeSkpOworfQorCitzdGF0aWMgaW50CittaWRpRmx1c2ggKE5vdGVEZXZpY2UgKmRldmljZSkgeworICByZXR1cm4gZmx1c2hNaWRpRGV2aWNlKGRldmljZS0+bWlkaSk7Cit9CisKK2NvbnN0IE5vdGVNZXRob2RzIG1pZGlOb3RlTWV0aG9kcyA9IHsKKyAgLmNvbnN0cnVjdCA9IG1pZGlDb25zdHJ1Y3QsCisgIC5kZXN0cnVjdCA9IG1pZGlEZXN0cnVjdCwKKworICAudG9uZSA9IG1pZGlUb25lLAorICAubm90ZSA9IG1pZGlOb3RlLAorICAuZmx1c2ggPSBtaWRpRmx1c2gKK307CmRpZmYgLS1naXQgYS9Qcm9ncmFtcy9ub3Rlc19wY20uYyBiL1Byb2dyYW1zL25vdGVzX3BjbS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY3OWMxYTcKLS0tIC9kZXYvbnVsbAorKysgYi9Qcm9ncmFtcy9ub3Rlc19wY20uYwpAQCAtMCwwICsxLDI2OSBAQAorLyoKKyAqIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisgKiAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisgKgorICogQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKKyNpbmNsdWRlICJwcm9sb2d1ZS5oIgorCisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKworI2luY2x1ZGUgInByZWZzLmgiCisjaW5jbHVkZSAibG9nLmgiCisjaW5jbHVkZSAicGNtLmgiCisjaW5jbHVkZSAibm90ZXMuaCIKKworY2hhciAqb3B0X3BjbURldmljZTsKKworc3RydWN0IE5vdGVEZXZpY2VTdHJ1Y3QgeworICBQY21EZXZpY2UgKnBjbTsKKworICBpbnQgYmxvY2tTaXplOworICBpbnQgc2FtcGxlUmF0ZTsKKyAgaW50IGNoYW5uZWxDb3VudDsKKyAgUGNtQW1wbGl0dWRlRm9ybWF0IGFtcGxpdHVkZUZvcm1hdDsKKworICB1bnNpZ25lZCBjaGFyICpibG9ja0FkZHJlc3M7CisgIGludCBibG9ja1VzZWQ7CisKKyAgUGNtU2FtcGxlTWFrZXIgbWFrZVNhbXBsZTsKK307CisKK3N0YXRpYyBpbnQKK3BjbUZsdXNoQnl0ZXMgKE5vdGVEZXZpY2UgKmRldmljZSkgeworICBpbnQgb2sgPSB3cml0ZVBjbURhdGEoZGV2aWNlLT5wY20sIGRldmljZS0+YmxvY2tBZGRyZXNzLCBkZXZpY2UtPmJsb2NrVXNlZCk7CisgIGlmIChvaykgZGV2aWNlLT5ibG9ja1VzZWQgPSAwOworICByZXR1cm4gb2s7Cit9CisKK3N0YXRpYyBpbnQKK3BjbVdyaXRlU2FtcGxlIChOb3RlRGV2aWNlICpkZXZpY2UsIGludDE2X3QgYW1wbGl0dWRlKSB7CisgIFBjbVNhbXBsZSAqc2FtcGxlID0gKFBjbVNhbXBsZSAqKSZkZXZpY2UtPmJsb2NrQWRkcmVzc1tkZXZpY2UtPmJsb2NrVXNlZF07CisgIFBjbVNhbXBsZVNpemUgc2l6ZSA9IGRldmljZS0+bWFrZVNhbXBsZShzYW1wbGUsIGFtcGxpdHVkZSk7CisgIGRldmljZS0+YmxvY2tVc2VkICs9IHNpemU7CisKKyAgZm9yIChpbnQgY2hhbm5lbD0xOyBjaGFubmVsPGRldmljZS0+Y2hhbm5lbENvdW50OyBjaGFubmVsKz0xKSB7CisgICAgZm9yIChpbnQgYnl0ZT0wOyBieXRlPHNpemU7IGJ5dGUrPTEpIHsKKyAgICAgIGRldmljZS0+YmxvY2tBZGRyZXNzW2RldmljZS0+YmxvY2tVc2VkKytdID0gc2FtcGxlLT5ieXRlc1tieXRlXTsKKyAgICB9CisgIH0KKworICBpZiAoZGV2aWNlLT5ibG9ja1VzZWQgPT0gZGV2aWNlLT5ibG9ja1NpemUpIHsKKyAgICBpZiAoIXBjbUZsdXNoQnl0ZXMoZGV2aWNlKSkgeworICAgICAgcmV0dXJuIDA7CisgICAgfQorICB9CisKKyAgcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQKK3BjbUZsdXNoQmxvY2sgKE5vdGVEZXZpY2UgKmRldmljZSkgeworICB3aGlsZSAoZGV2aWNlLT5ibG9ja1VzZWQpCisgICAgaWYgKCFwY21Xcml0ZVNhbXBsZShkZXZpY2UsIDApKQorICAgICAgcmV0dXJuIDA7CisKKyAgcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBOb3RlRGV2aWNlICoKK3BjbUNvbnN0cnVjdCAoaW50IGVycm9yTGV2ZWwpIHsKKyAgTm90ZURldmljZSAqZGV2aWNlOworCisgIGlmICgoZGV2aWNlID0gbWFsbG9jKHNpemVvZigqZGV2aWNlKSkpKSB7CisgICAgbWVtc2V0KGRldmljZSwgMCwgc2l6ZW9mKCpkZXZpY2UpKTsKKworICAgIGlmICgoZGV2aWNlLT5wY20gPSBvcGVuUGNtRGV2aWNlKGVycm9yTGV2ZWwsIG9wdF9wY21EZXZpY2UpKSkgeworICAgICAgZGV2aWNlLT5ibG9ja1NpemUgPSBnZXRQY21CbG9ja1NpemUoZGV2aWNlLT5wY20pOworICAgICAgZGV2aWNlLT5zYW1wbGVSYXRlID0gZ2V0UGNtU2FtcGxlUmF0ZShkZXZpY2UtPnBjbSk7CisgICAgICBkZXZpY2UtPmNoYW5uZWxDb3VudCA9IGdldFBjbUNoYW5uZWxDb3VudChkZXZpY2UtPnBjbSk7CisgICAgICBkZXZpY2UtPmFtcGxpdHVkZUZvcm1hdCA9IGdldFBjbUFtcGxpdHVkZUZvcm1hdChkZXZpY2UtPnBjbSk7CisKKyAgICAgIGRldmljZS0+YmxvY2tVc2VkID0gMDsKKyAgICAgIGRldmljZS0+bWFrZVNhbXBsZSA9IGdldFBjbVNhbXBsZU1ha2VyKGRldmljZS0+YW1wbGl0dWRlRm9ybWF0KTsKKworICAgICAgUGNtU2FtcGxlIHNhbXBsZTsKKyAgICAgIFBjbVNhbXBsZVNpemUgc2FtcGxlU2l6ZSA9IGRldmljZS0+bWFrZVNhbXBsZSgmc2FtcGxlLCAwKTsKKyAgICAgIHNhbXBsZVNpemUgKj0gZGV2aWNlLT5jaGFubmVsQ291bnQ7CisKKyAgICAgIGlmIChzYW1wbGVTaXplICYmIGRldmljZS0+YmxvY2tTaXplICYmCisgICAgICAgICAgIShkZXZpY2UtPmJsb2NrU2l6ZSAlIHNhbXBsZVNpemUpKSB7CisgICAgICAgIGlmICgoZGV2aWNlLT5ibG9ja0FkZHJlc3MgPSBtYWxsb2MoZGV2aWNlLT5ibG9ja1NpemUpKSkgeworICAgICAgICAgIGxvZ01lc3NhZ2UoTE9HX0RFQlVHLCAiUENNIGVuYWJsZWQ6IEJsa1N6OiVkIFJhdGU6JWQgQ2huQ3Q6JWQgRm10OiVkIiwKKyAgICAgICAgICAgICAgICAgICAgIGRldmljZS0+YmxvY2tTaXplLCBkZXZpY2UtPnNhbXBsZVJhdGUsIGRldmljZS0+Y2hhbm5lbENvdW50LCBkZXZpY2UtPmFtcGxpdHVkZUZvcm1hdCk7CisgICAgICAgICAgcmV0dXJuIGRldmljZTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICBsb2dNYWxsb2NFcnJvcigpOworICAgICAgICB9CisgICAgICB9IGVsc2UgeworICAgICAgICBsb2dNZXNzYWdlKExPR19FUlIsCisgICAgICAgICAgICAgICAgICAgIlBDTSBibG9jayBzaXplIG5vdCBtdWx0aXBsZSBvZiBzYW1wbGUgc2l6ZToiCisgICAgICAgICAgICAgICAgICAgIiBCbGtTejolZCIgIiBTbXBTejoldSIsCisgICAgICAgICAgICAgICAgICAgZGV2aWNlLT5ibG9ja1NpemUsIHNhbXBsZVNpemUpOworICAgICAgfQorCisgICAgICBjbG9zZVBjbURldmljZShkZXZpY2UtPnBjbSk7CisgICAgfQorCisgICAgZnJlZShkZXZpY2UpOworICB9IGVsc2UgeworICAgIGxvZ01hbGxvY0Vycm9yKCk7CisgIH0KKworICBsb2dNZXNzYWdlKExPR19ERUJVRywgIlBDTSBub3QgYXZhaWxhYmxlIik7CisgIHJldHVybiBOVUxMOworfQorCitzdGF0aWMgdm9pZAorcGNtRGVzdHJ1Y3QgKE5vdGVEZXZpY2UgKmRldmljZSkgeworICBwY21GbHVzaEJsb2NrKGRldmljZSk7CisgIGZyZWUoZGV2aWNlLT5ibG9ja0FkZHJlc3MpOworICBjbG9zZVBjbURldmljZShkZXZpY2UtPnBjbSk7CisgIGZyZWUoZGV2aWNlKTsKKyAgbG9nTWVzc2FnZShMT0dfREVCVUcsICJQQ00gZGlzYWJsZWQiKTsKK30KKworc3RhdGljIGludAorcGNtVG9uZSAoTm90ZURldmljZSAqZGV2aWNlLCB1bnNpZ25lZCBpbnQgZHVyYXRpb24sIE5vdGVGcmVxdWVuY3kgZnJlcXVlbmN5KSB7CisgIGludDMyX3Qgc2FtcGxlQ291bnQgPSBkZXZpY2UtPnNhbXBsZVJhdGUgKiBkdXJhdGlvbiAvIDEwMDA7CisKKyAgbG9nTWVzc2FnZShMT0dfREVCVUcsICJ0b25lOiBNU2VjczoldSBTbXBDdDolIlBSSWQzMiAiIEZyZXE6JSJQUklmcmVxLAorICAgICAgICAgICAgIGR1cmF0aW9uLCBzYW1wbGVDb3VudCwgZnJlcXVlbmN5KTsKKworICBpZiAoZnJlcXVlbmN5KSB7CisgICAgLyogQSB0cmlhbmdsZSB3YXZlZm9ybSBzb3VuZHMgbmljZSwgaXMgbGlnaHR3ZWlnaHQsIGFuZCBhdm9pZHMKKyAgICAgKiByZWx5aW5nIHRvbyBtdWNoIG9uIGZsb2F0aW5nLXBvaW50IHBlcmZvcm1hbmNlIGFuZC9vciBvbgorICAgICAqIGV4cGVuc2l2ZSBtYXRoIGZ1bmN0aW9ucyBsaWtlIHNpbigpLiBDb25zaWRlcmF0aW9ucyBsaWtlCisgICAgICogdGhlc2UgYXJlIGVzcGVjaWFsbHkgaW1wb3J0YW50IG9uIFBEQXMgd2l0aG91dCBhbnkgRlBVLgorICAgICAqLyAKKworICAgIC8qIFdlIG5lZWQgdG8ga25vdyB0aGUgbWF4aW11bSBhbXBsaXR1ZGUgYmFzZWQgb24gdGhlIGN1cnJlbnRseSBzZXQKKyAgICAgKiB2b2x1bWUgcGVyY2VudGFnZS4gVGhpcyBwZXJjZW50YWdlIHRoZW4gbmVlZHMgdG8gYmUgc3F1YXJlZCBiZWNhdXNlCisgICAgICogd2UgcGVyY2VpdmUgbG91ZG5lc3MgZXhwb25lbnRpYWxseS4KKyAgICAgKi8KKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyIGZ1bGxWb2x1bWUgPSAxMDA7CisgICAgY29uc3QgdW5zaWduZWQgY2hhciBjdXJyZW50Vm9sdW1lID0gTUlOKGZ1bGxWb2x1bWUsIHByZWZzLnBjbVZvbHVtZSk7CisgICAgY29uc3QgaW50MzJfdCBtYXhpbXVtQW1wbGl0dWRlID0gSU5UMTZfTUFYCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogKGN1cnJlbnRWb2x1bWUgKiBjdXJyZW50Vm9sdW1lKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvIChmdWxsVm9sdW1lICogZnVsbFZvbHVtZSk7CisKKyAgICAvKiBUaGUgY2FsY3VsYXRpb25zIGZvciB0cmlhbmdsZSB3YXZlIGdlbmVyYXRpb24gd29yayBvdXQgbmljZWx5IGFuZAorICAgICAqIGVmZmljaWVudGx5IGlmIHdlIG1hcCBhIGZ1bGwgcGVyaW9kIG9udG8gYSAzMi1iaXQgdW5zaWduZWQgcmFuZ2UuCisgICAgICovCisKKyAgICAvKiBUaGUgdHdvIGhpZ2gtb3JkZXIgYml0cyBzcGVjaWZ5IHdoaWNoIHF1YXJ0ZXIgd2F2ZSBhIHNhbXBsZSBpcyBmb3IuCisgICAgICogICAwMCAtPiBhc2NlbmRpbmcgZnJvbSB0aGUgbmVnYXRpdmUgcGVhayB0byB6ZXJvCisgICAgICogICAwMSAtPiBhc2NlbmRpbmcgZnJvbSB6ZXJvIHRvIHRoZSBwb3NpdGl2ZSBwZWFrCisgICAgICogICAxMCAtPiBkZXNjZW5kaW5nIGZyb20gdGhlIHBvc2l0aXZlIHBlYWsgdG8gemVybworICAgICAqICAgMTEgLT4gZGVzY2VuZGluZyBmcm9tIHplcm8gdG8gdGhlIG5lZ2F0aXZlIHBlYWsKKyAgICAgKiBUaGUgaGlnaGVyIGJpdCBpcyAwIGZvciB0aGUgYXNjZW5kaW5nIHNlZ21lbnQgYW5kIDEgZm9yIHRoZQorICAgICAqIGRlc2NlbmRpbmcgc2VnbWVudC4gVGhlIGxvd2VyIGJpdCBpcyAwIHdoZW4gZ29pbmcgZnJvbSBhIHBlYWsgdG8KKyAgICAgKiB6ZXJvIGFuZCAxIHdoZW4gZ29pbmcgZnJvbSB6ZXJvIHRvIGEgcGVhay4KKyAgICAgKi8KKyAgICBjb25zdCB1aW50OF90IG1hZ25pdHVkZVdpZHRoID0gMzIgLSAyOworCisgICAgLyogVGhlIGFtcGxpdHVkZSBpcyAwIHdoZW4gdGhlIGxvd2VyIGJpdCBvZiB0aGUgcXVhcnRlciB3YXZlIGluZGljYXRvcgorICAgICAqIGlzIDEgYW5kIHRoZSByZXN0IG9mIHRoZSAobWFnbml0dWRlKSBiaXRzIGFyZSBhbGwgMC4KKyAgICAgKi8KKyAgICBjb25zdCB1aW50MzJfdCB6ZXJvVmFsdWUgPSBVSU5UMzJfQygxKSA8PCBtYWduaXR1ZGVXaWR0aDsKKworICAgIC8qIFdlIG5lZWQgdG8ga25vdyBob3cgbWFueSBzdGVwcyB0byBtYWtlIGZyb20gb25lIHNhbXBsZSB0byB0aGUgbmV4dC4KKyAgICAgKiBzdGVwc1BlclNhbXBsZSA9IHN0ZXBzUGVyV2F2ZSAqIHdhdmVzUGVyU2Vjb25kIC8gc2FtcGxlc1BlclNlY29uZAorICAgICAqICAgICAgICAgICAgICAgID0gc3RlcHNQZXJXYXZlICogZnJlcXVlbmN5IC8gc2FtcGxlUmF0ZQorICAgICAqICAgICAgICAgICAgICAgID0gc3RlcHNQZXJXYXZlIC8gc2FtcGxlUmF0ZSAqIGZyZXF1ZW5jeQorICAgICAqLworICAgIGNvbnN0IHVpbnQzMl90IHN0ZXBzUGVyU2FtcGxlID0gKE5vdGVGcmVxdWVuY3kpVUlOVDMyX01BWCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvIChOb3RlRnJlcXVlbmN5KWRldmljZS0+c2FtcGxlUmF0ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogZnJlcXVlbmN5OworCisgICAgLyogVGhlIGN1cnJlbnQgdmFsdWUgbmVlZHMgdG8gYmUgYSBzaWduZWQgdmFsdWUgc28gdGhhdCB0aGUgPj4gb3BlcmF0b3IKKyAgICAgKiB3aWxsIGV4dGVuZCBpdHMgc2lnbiBiaXQuIFdlIHN0YXJ0IGJ5IGluaXRpYWxpemluZyBpdCB0byB0aGUgdmFsdWUKKyAgICAgKiB0aGF0IGNvcnJlc3BvbmRzIHRvIHRoZSBzdGFydCBvZiB0aGUgZmlyc3QgbG9naWNhbCBxdWFydGVyIHdhdmUKKyAgICAgKiAodGhlIG9uZSB0aGF0IGFzY2VuZHMgZnJvbSB6ZXJvIHRvIHRoZSBwb3NpdGl2ZSBwZWFrKS4KKyAgICAgKi8KKyAgICBpbnQzMl90IGN1cnJlbnRWYWx1ZSA9IHplcm9WYWx1ZTsKKworICAgIC8qIFJvdW5kIHRoZSBudW1iZXIgb2Ygc2FtcGxlcyB1cCB0byBhIHdob2xlIG51bWJlciBvZiBwZXJpb2RzOgorICAgICAqIHBhcnRpYWxTdGVwcyA9IChzYW1wbGVDb3VudCAqIHN0ZXBzUGVyU2FtcGxlKSAlIHN0ZXBzUGVyV2F2ZQorICAgICAqCisgICAgICogV2l0aCBzdGVwc1BlcldhdmUgYmVpbmcgKDEgPDwgMzIpLCB3ZSBzaW1wbHkgbGV0IHRoZSBwcm9kdWN0CisgICAgICogb3ZlcmZsb3cuIFRoZSBtb2R1bHVzIGNvcnJlc3BvbmRzIHRvIHRoZSByZW1haW5pbmcgMzIgbG93IGJpdHM6CisgICAgICogcGFydGlhbFN0ZXBzID0gKHVpbnQzMl90KShzYW1wbGVDb3VudCAqIHN0ZXBzUGVyU2FtcGxlKQorICAgICAqCisgICAgICogbWlzc2luZ1N0ZXBzID0gc3RlcHNQZXJXYXZlIC0gcGFydGlhbFN0ZXBzCisgICAgICogICAgICAgICAgICAgID0gKHVpbnQzMl90KSAtcGFydGlhbFN0ZXBzCisKKyAgICAgKiBleHRyYVNhbXBsZXMgPSBtaXNzaW5nU3RlcHMgLyBzdGVwc1BlclNhbXBsZQorICAgICAqLworICAgIHNhbXBsZUNvdW50ICs9ICh1aW50MzJfdCkoc2FtcGxlQ291bnQgKiAtc3RlcHNQZXJTYW1wbGUpIC8gc3RlcHNQZXJTYW1wbGU7CisKKyAgICB3aGlsZSAoc2FtcGxlQ291bnQgPiAwKSB7CisgICAgICAvKiBDb252ZXJ0IHRoZSBjdXJyZW50IDMyLWJpdCB1bnNpZ25lZCBsaW5lYXIgdmFsdWUgdG8gYSAzMS1iaXQKKyAgICAgICAqIHRyaWFuZ3VsYXIgYW1wbGl0dWRlIGJ5IGludmVydGluZyBpdHMgbG93LW9yZGVyIDMxIGJpdHMgaWYgaXRzCisgICAgICAgKiBoaWdoLW9yZGVyIChzaWduKSBiaXQgaXMgc2V0LgorICAgICAgICovCisgICAgICBpbnQzMl90IGFtcGxpdHVkZSA9IGN1cnJlbnRWYWx1ZSBeIChjdXJyZW50VmFsdWUgPj4gMzEpOworCisgICAgICAvKiBDb252ZXJ0IHRoZSAzMS1iaXQgYW1wbGl0dWRlIGZyb20gdW5zaWduZWQgdG8gc2lnbmVkLiAqLworICAgICAgYW1wbGl0dWRlIC09IHplcm9WYWx1ZTsKKworICAgICAgLyogQ29udmVydCB0aGUgYW1wbGl0dWRlJ3MgbWFnbml0dWRlIGZyb20gMzAgYml0cyB0byAxNiBiaXRzLiAqLworICAgICAgYW1wbGl0dWRlID4+PSBtYWduaXR1ZGVXaWR0aCAtIDE2OworCisgICAgICAvKiBBZGp1c3QgdGhlIDE3LWJpdCBzaWduZWQgYW1wbGl0dWRlIChzaWduIGJpdCArIDE2LWJpdCB2YWx1ZSkgYnkKKyAgICAgICAqIHRoZSBjdXJyZW50bHkgc2V0IHZvbHVtZSAoMTUtYml0IHZhbHVlKToKKyAgICAgICAqICgxNi1iaXQgdmFsdWUpICogKDE1LWJpdCB2YWx1ZSkgKyAoc2lnbiBiaXQpID0gMzItYml0IHNpZ25lZCB2YWx1ZQorICAgICAgICovCisgICAgICBhbXBsaXR1ZGUgKj0gbWF4aW11bUFtcGxpdHVkZTsKKworICAgICAgLyogQ29udmVydCB0aGUgc2lnbmVkIGFtcGxpdHVkZSBmcm9tIDMyIGJpdHMgdG8gMTYgYml0cy4gKi8KKyAgICAgIGFtcGxpdHVkZSA+Pj0gMTY7CisKKyAgICAgIGlmICghcGNtV3JpdGVTYW1wbGUoZGV2aWNlLCBhbXBsaXR1ZGUpKSBicmVhazsKKyAgICAgIGN1cnJlbnRWYWx1ZSArPSBzdGVwc1BlclNhbXBsZTsKKyAgICAgIHNhbXBsZUNvdW50IC09IDE7CisgICAgfQorICB9IGVsc2UgeworICAgIC8qIGdlbmVyYXRlIHNpbGVuY2UgKi8KKyAgICB3aGlsZSAoc2FtcGxlQ291bnQgPiAwKSB7CisgICAgICBpZiAoIXBjbVdyaXRlU2FtcGxlKGRldmljZSwgMCkpIGJyZWFrOworICAgICAgc2FtcGxlQ291bnQgLT0gMTsKKyAgICB9CisgIH0KKworICByZXR1cm4gKHNhbXBsZUNvdW50ID4gMCkgPyAwIDogMTsKK30KKworc3RhdGljIGludAorcGNtTm90ZSAoTm90ZURldmljZSAqZGV2aWNlLCB1bnNpZ25lZCBpbnQgZHVyYXRpb24sIHVuc2lnbmVkIGNoYXIgbm90ZSkgeworICByZXR1cm4gcGNtVG9uZShkZXZpY2UsIGR1cmF0aW9uLCBnZXROb3RlRnJlcXVlbmN5KG5vdGUpKTsKK30KKworc3RhdGljIGludAorcGNtRmx1c2ggKE5vdGVEZXZpY2UgKmRldmljZSkgeworICBpbnQgb2sgPSBwY21GbHVzaEJsb2NrKGRldmljZSk7CisgIGlmIChvaykgcHVzaFBjbU91dHB1dChkZXZpY2UtPnBjbSk7CisgIHJldHVybiBvazsKK30KKworY29uc3QgTm90ZU1ldGhvZHMgcGNtTm90ZU1ldGhvZHMgPSB7CisgIC5jb25zdHJ1Y3QgPSBwY21Db25zdHJ1Y3QsCisgIC5kZXN0cnVjdCA9IHBjbURlc3RydWN0LAorCisgIC50b25lID0gcGNtVG9uZSwKKyAgLm5vdGUgPSBwY21Ob3RlLAorICAuZmx1c2ggPSBwY21GbHVzaAorfTsKZGlmZiAtLWdpdCBhL1Byb2dyYW1zL3BhcmFtZXRlcnMuaCBiL1Byb2dyYW1zL3BhcmFtZXRlcnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZjQzZWZiCi0tLSAvZGV2L251bGwKKysrIGIvUHJvZ3JhbXMvcGFyYW1ldGVycy5oCkBAIC0wLDAgKzEsMTAyIEBACisvKgorICogQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyAqICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyAqCisgKiBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorICoKKyAqIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyAqCisgKiBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisgKi8KKworI2lmbmRlZiBCUkxUVFlfSU5DTFVERURfUEFSQU1FVEVSUworI2RlZmluZSBCUkxUVFlfSU5DTFVERURfUEFSQU1FVEVSUworCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmIC8qIF9fY3BsdXNwbHVzICovCisKKyNkZWZpbmUgUFJPR1JBTV9URVJNSU5BVElPTl9SRVFVRVNUX0NPVU5UX1RIUkVTSE9MRCAzCisjZGVmaW5lIFBST0dSQU1fVEVSTUlOQVRJT05fUkVRVUVTVF9SRVNFVF9TRUNPTkRTIDUKKworI2RlZmluZSBERUZBVUxUX0FDVElWSVRZX1NUQVJUX1RJTUVPVVQgMTAwMAorI2RlZmluZSBERUZBVUxUX0FDVElWSVRZX1NUT1BfVElNRU9VVCAxMDAwCisKKyNkZWZpbmUgQlJBSUxMRV9EUklWRVJfU1RBUlRfUkVUUllfSU5URVJWQUwgNTAwMAorI2RlZmluZSBCUkFJTExFX0RSSVZFUl9JTlBVVF9QT0xMX0lOVEVSVkFMIDQwCisKKyNkZWZpbmUgQlJBSUxMRV9NRVNTQUdFX0FDS05PV0xFREdFTUVOVF9USU1FT1VUIDEwMDAKKyNkZWZpbmUgQlJBSUxMRV9NRVNTQUdFX1VOQUNLTk9XTEVER0VFRF9MSU1JVCA1CisKKyNkZWZpbmUgU1BFRUNIX0RSSVZFUl9TVEFSVF9SRVRSWV9JTlRFUlZBTCA1MDAwCisjZGVmaW5lIFNQRUVDSF9EUklWRVJfU1RBUlRfQVVUT1NQRUFLX0RFTEFZIDQwMDAKKworI2RlZmluZSBTUEVFQ0hfRFJJVkVSX1RIUkVBRF9TVEFSVF9USU1FT1VUIDE1MDAwCisjZGVmaW5lIFNQRUVDSF9EUklWRVJfVEhSRUFEX1NUT1BfVElNRU9VVCA1MDAwCisKKyNkZWZpbmUgU1BFRUNIX1JFU1BPTlNFX1dBSVRfVElNRU9VVCA1MDAwCisKKyNkZWZpbmUgU0NSRUVOX0RSSVZFUl9TVEFSVF9SRVRSWV9JTlRFUlZBTCA1MDAwCisjZGVmaW5lIFNDUkVFTl9GUkVFWkVfUkVNSU5ERVJfSU5URVJWQUwgMzAwMDAKKyNkZWZpbmUgU0NSRUVOX1VQREFURV9QT0xMX0lOVEVSVkFMIDQwCisjZGVmaW5lIFNDUkVFTl9VUERBVEVfU0NIRURVTEVfREVMQVkgNQorCisjZGVmaW5lIEtFWUJPQVJEX01PTklUT1JfU1RBUlRfUkVUUllfSU5URVJWQUwgNTAwMAorCisjZGVmaW5lIFBJRF9GSUxFX0NSRUFURV9SRVRSWV9JTlRFUlZBTCA1MDAwCisKKyNkZWZpbmUgVVBEQVRFX1NDSEVEVUxFX0RFTEFZIDE1CisKKyNkZWZpbmUgUk9VVElOR19QUk9DRVNTX05JQ0VORVNTIDEwCisjZGVmaW5lIFJPVVRJTkdfUE9MTF9JTlRFUlZBTCAxCisjZGVmaW5lIFJPVVRJTkdfTUFYSU1VTV9USU1FT1VUIDIwMDAKKworI2RlZmluZSBUVU5FX0RFVklDRV9DTE9TRV9ERUxBWSAyMDAwCisjZGVmaW5lIFRVTkVfVE9HR0xFX1JFUEVBVF9ERUxBWSAxMDAKKworI2RlZmluZSBNRVNTQUdFX0hPTERfVElNRU9VVCA0MDAwCisKKyNkZWZpbmUgTEVBUk5fTU9ERV9USU1FT1VUIDEwMDAwCisKKyNkZWZpbmUgSU5QVVRfU1RJQ0tZX01PRElGSUVSU19USU1FT1VUIDUwMDAKKworI2RlZmluZSBNT1VOVF9UQUJMRV9VUERBVEVfUkVUUllfSU5URVJWQUwgNTAwMAorCisjZGVmaW5lIEdQTV9DT05ORUNUSU9OX1JFU0VUX0RFTEFZIDUwMDAKKworI2RlZmluZSBHSU9fVVNCX0lOUFVUX01PTklUT1JfRElTQUJMRSAwCisKKyNkZWZpbmUgU0VSSUFMX0RFVklDRV9SRVNUQVJUX0RFTEFZIDUwMAorCisjZGVmaW5lIFVTQl9JTlBVVF9BV0FJVF9SRVRSWV9JTlRFUlZBTF9NSU5JTVVNIDEwCisjZGVmaW5lIFVTQl9JTlBVVF9SRUFEX0lOSVRJQUxfVElNRU9VVF9ERUZBVUxUIDIwCisjZGVmaW5lIFVTQl9JTlBVVF9JTlRFUlJVUFRfREVMQVlfTUFYSU1VTSAxNgorI2RlZmluZSBVU0JfSU5QVVRfSU5URVJSVVBUX1JFUVVFU1RTX01BWElNVU0gOAorCisjZGVmaW5lIEJMVUVUT09USF9ERVZJQ0VfTkFNRV9PQlRBSU5fVElNRU9VVCA1MDAwCisjZGVmaW5lIEJMVUVUT09USF9DSEFOTkVMX0JVU1lfUkVUUllfVElNRU9VVCAyMDAwCisjZGVmaW5lIEJMVUVUT09USF9DSEFOTkVMX0JVU1lfUkVUUllfSU5URVJWQUwgMTAwCisjZGVmaW5lIEJMVUVUT09USF9DSEFOTkVMX0NPTk5FQ1RfVElNRU9VVCAxNTAwMAorCisjZGVmaW5lIExJTlVYX0lOUFVUX0RFVklDRV9PUEVOX0RFTEFZIDEwMDAKKyNkZWZpbmUgTElOVVhfVVNCX0lOUFVUX1BJUEVfRElTQUJMRSAwCisjZGVmaW5lIExJTlVYX1VTQl9JTlBVVF9VU0VfU0lHTkFMX01PTklUT1IgMAorI2RlZmluZSBMSU5VWF9VU0JfSU5QVVRfVFJFQVRfSU5URVJSVVBUX0FTX0JVTEsgMAorI2RlZmluZSBMSU5VWF9CTFVFVE9PVEhfTkFNRV9PQlRBSU5fQVNZTkNIUk9OT1VTIDEKKyNkZWZpbmUgTElOVVhfQkxVRVRPT1RIX0NIQU5ORUxfRElTQ09WRVJfQVNZTkNIUk9OT1VTIDEKKyNkZWZpbmUgTElOVVhfQkxVRVRPT1RIX0NIQU5ORUxfQ09OTkVDVF9BU1lOQ0hST05PVVMgMQorCisjZGVmaW5lIFdJTkRPV1NfRklMRV9MT0NLX1JFVFJZX0lOVEVSVkFMIDEwMDAKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYgLyogX19jcGx1c3BsdXMgKi8KKworI2VuZGlmIC8qIEJSTFRUWV9JTkNMVURFRF9QQVJBTUVURVJTICovCmRpZmYgLS1naXQgYS9Qcm9ncmFtcy9wYXJhbXNfbGludXguYyBiL1Byb2dyYW1zL3BhcmFtc19saW51eC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZiMDdlNjAKLS0tIC9kZXYvbnVsbAorKysgYi9Qcm9ncmFtcy9wYXJhbXNfbGludXguYwpAQCAtMCwwICsxLDY3IEBACisvKgorICogQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyAqICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyAqCisgKiBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorICoKKyAqIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyAqCisgKiBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisgKi8KKworI2luY2x1ZGUgInByb2xvZ3VlLmgiCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorCisjaW5jbHVkZSAibG9nLmgiCisjaW5jbHVkZSAicGFyYW1zLmgiCisKK2NoYXIgKgorZ2V0Qm9vdFBhcmFtZXRlcnMgKGNvbnN0IGNoYXIgKm5hbWUpIHsKKyAgc2l6ZV90IG5hbWVMZW5ndGggPSBzdHJsZW4obmFtZSk7CisgIGNoYXIgKnBhcmFtZXRlcnM7CisKKyAgaWYgKChwYXJhbWV0ZXJzID0gc3RyZHVwKCIiKSkpIHsKKyAgICBjb25zdCBjaGFyICpwYXRoID0gIi9wcm9jL2NtZGxpbmUiOworICAgIEZJTEUgKmZpbGU7CisKKyAgICBpZiAoKGZpbGUgPSBmb3BlbihwYXRoLCAiciIpKSkgeworICAgICAgY2hhciBidWZmZXJbMFgxMDAwXTsKKyAgICAgIGNoYXIgKmxpbmUgPSBmZ2V0cyhidWZmZXIsIHNpemVvZihidWZmZXIpLCBmaWxlKTsKKworICAgICAgaWYgKGxpbmUpIHsKKyAgICAgICAgY2hhciAqdG9rZW47CisKKyAgICAgICAgd2hpbGUgKCh0b2tlbiA9IHN0cnRvayhsaW5lLCAiIFxuIikpKSB7CisgICAgICAgICAgbGluZSA9IE5VTEw7CisKKyAgICAgICAgICBpZiAoKHN0cm5jbXAodG9rZW4sIG5hbWUsIG5hbWVMZW5ndGgpID09IDApICYmCisgICAgICAgICAgICAgICh0b2tlbltuYW1lTGVuZ3RoXSA9PSAnPScpKSB7CisgICAgICAgICAgICBjaGFyICpuZXdQYXJhbWV0ZXJzID0gc3RyZHVwKHRva2VuICsgbmFtZUxlbmd0aCArIDEpOworCisgICAgICAgICAgICBpZiAobmV3UGFyYW1ldGVycykgeworICAgICAgICAgICAgICBmcmVlKHBhcmFtZXRlcnMpOworICAgICAgICAgICAgICBwYXJhbWV0ZXJzID0gbmV3UGFyYW1ldGVyczsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgIGxvZ01hbGxvY0Vycm9yKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICB9CisKKyAgICAgIGZjbG9zZShmaWxlKTsKKyAgICB9CisgIH0gZWxzZSB7CisgICAgbG9nTWFsbG9jRXJyb3IoKTsKKyAgfQorCisgIHJldHVybiBwYXJhbWV0ZXJzOworfQpkaWZmIC0tZ2l0IGEvUHJvZ3JhbXMvcGFyYW1zX25vbmUuYyBiL1Byb2dyYW1zL3BhcmFtc19ub25lLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzU5MTk5ZQotLS0gL2Rldi9udWxsCisrKyBiL1Byb2dyYW1zL3BhcmFtc19ub25lLmMKQEAgLTAsMCArMSwyNiBAQAorLyoKKyAqIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisgKiAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisgKgorICogQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKKyNpbmNsdWRlICJwcm9sb2d1ZS5oIgorCisjaW5jbHVkZSAicGFyYW1zLmgiCisKK2NoYXIgKgorZ2V0Qm9vdFBhcmFtZXRlcnMgKGNvbnN0IGNoYXIgKm5hbWUpIHsKKyAgcmV0dXJuIE5VTEw7Cit9CmRpZmYgLS1naXQgYS9Qcm9ncmFtcy9wYXJzZS5jIGIvUHJvZ3JhbXMvcGFyc2UuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NGNkMGVkCi0tLSAvZGV2L251bGwKKysrIGIvUHJvZ3JhbXMvcGFyc2UuYwpAQCAtMCwwICsxLDYyNSBAQAorLyoKKyAqIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisgKiAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisgKgorICogQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKKyNpbmNsdWRlICJwcm9sb2d1ZS5oIgorCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxjdHlwZS5oPgorCisjaW5jbHVkZSAicGFyc2UuaCIKKyNpbmNsdWRlICJsb2cuaCIKKworY2hhciAqCitqb2luU3RyaW5ncyAoY29uc3QgY2hhciAqY29uc3QgKnN0cmluZ3MsIGludCBjb3VudCkgeworICBjaGFyICpzdHJpbmc7CisgIHNpemVfdCBsZW5ndGggPSAwOworICBzaXplX3QgbGVuZ3Roc1tjb3VudF07CisKKyAgZm9yICh1bnNpZ25lZCBpbnQgaW5kZXg9MDsgaW5kZXg8Y291bnQ7IGluZGV4Kz0xKSB7CisgICAgbGVuZ3RoICs9IGxlbmd0aHNbaW5kZXhdID0gc3RybGVuKHN0cmluZ3NbaW5kZXhdKTsKKyAgfQorCisgIGlmICgoc3RyaW5nID0gbWFsbG9jKGxlbmd0aCsxKSkpIHsKKyAgICBjaGFyICp0YXJnZXQgPSBzdHJpbmc7CisKKyAgICBmb3IgKHVuc2lnbmVkIGludCBpbmRleD0wOyBpbmRleDxjb3VudDsgaW5kZXgrPTEpIHsKKyAgICAgIGxlbmd0aCA9IGxlbmd0aHNbaW5kZXhdOworICAgICAgbWVtY3B5KHRhcmdldCwgc3RyaW5nc1tpbmRleF0sIGxlbmd0aCk7CisgICAgICB0YXJnZXQgKz0gbGVuZ3RoOworICAgIH0KKworICAgICp0YXJnZXQgPSAwOworICB9CisKKyAgcmV0dXJuIHN0cmluZzsKK30KKworaW50CitjaGFuZ2VTdHJpbmdTZXR0aW5nIChjaGFyICoqc2V0dGluZywgY29uc3QgY2hhciAqdmFsdWUpIHsKKyAgaWYgKHZhbHVlID09ICpzZXR0aW5nKSByZXR1cm4gMTsKKyAgY2hhciAqc3RyaW5nOworCisgIGlmICghdmFsdWUpIHsKKyAgICBzdHJpbmcgPSBOVUxMOworICB9IGVsc2UgaWYgKCEoc3RyaW5nID0gc3RyZHVwKHZhbHVlKSkpIHsKKyAgICBsb2dNYWxsb2NFcnJvcigpOworICAgIHJldHVybiAwOworICB9CisKKyAgaWYgKCpzZXR0aW5nKSBmcmVlKCpzZXR0aW5nKTsKKyAgKnNldHRpbmcgPSBzdHJpbmc7CisgIHJldHVybiAxOworfQorCitpbnQKK2V4dGVuZFN0cmluZ1NldHRpbmcgKGNoYXIgKipzZXR0aW5nLCBjb25zdCBjaGFyICp2YWx1ZSwgaW50IHByZXBlbmQpIHsKKyAgaWYgKCF2YWx1ZSkgdmFsdWUgPSAiIjsKKworICBpZiAoKnNldHRpbmcgJiYgKipzZXR0aW5nKSB7CisgICAgaWYgKCp2YWx1ZSkgeworICAgICAgc2l6ZV90IG5ld1NpemUgPSBzdHJsZW4oKnNldHRpbmcpICsgMSArIHN0cmxlbih2YWx1ZSkgKyAxOworICAgICAgY2hhciBuZXdTZXR0aW5nW25ld1NpemVdOworCisgICAgICBpZiAocHJlcGVuZCkgeworICAgICAgICBzbnByaW50ZihuZXdTZXR0aW5nLCBuZXdTaXplLCAiJXMlYyVzIiwgdmFsdWUsIFBBUkFNRVRFUl9TRVBBUkFUT1JfQ0hBUkFDVEVSLCAqc2V0dGluZyk7CisgICAgICB9IGVsc2UgeworICAgICAgICBzbnByaW50ZihuZXdTZXR0aW5nLCBuZXdTaXplLCAiJXMlYyVzIiwgKnNldHRpbmcsIFBBUkFNRVRFUl9TRVBBUkFUT1JfQ0hBUkFDVEVSLCB2YWx1ZSk7CisgICAgICB9CisKKyAgICAgIGlmICghY2hhbmdlU3RyaW5nU2V0dGluZyhzZXR0aW5nLCBuZXdTZXR0aW5nKSkgcmV0dXJuIDA7CisgICAgfQorICB9IGVsc2UgaWYgKCFjaGFuZ2VTdHJpbmdTZXR0aW5nKHNldHRpbmcsIHZhbHVlKSkgeworICAgIHJldHVybiAwOworICB9CisKKyAgcmV0dXJuIDE7Cit9CisKK3ZvaWQKK2RlYWxsb2NhdGVTdHJpbmdzIChjaGFyICoqYXJyYXkpIHsKKyAgY2hhciAqKmVsZW1lbnQgPSBhcnJheTsKKyAgd2hpbGUgKCplbGVtZW50KSBmcmVlKCplbGVtZW50KyspOworICBmcmVlKGFycmF5KTsKK30KKworY2hhciAqKgorc3BsaXRTdHJpbmcgKGNvbnN0IGNoYXIgKnN0cmluZywgY2hhciBkZWxpbWl0ZXIsIGludCAqY291bnQpIHsKKyAgY2hhciAqKmFycmF5ID0gTlVMTDsKKworICBpZiAoIXN0cmluZykgc3RyaW5nID0gIiI7CisKKyAgaWYgKHN0cmluZykgeworICAgIHdoaWxlICgxKSB7CisgICAgICBjb25zdCBjaGFyICpzdGFydCA9IHN0cmluZzsKKyAgICAgIGludCBpbmRleCA9IDA7CisKKyAgICAgIGlmICgqc3RhcnQpIHsKKyAgICAgICAgd2hpbGUgKDEpIHsKKyAgICAgICAgICBjb25zdCBjaGFyICplbmQgPSBzdHJjaHIoc3RhcnQsIGRlbGltaXRlcik7CisgICAgICAgICAgc2l6ZV90IGxlbmd0aCA9IGVuZD8gKHNpemVfdCkoZW5kLXN0YXJ0KTogc3RybGVuKHN0YXJ0KTsKKworICAgICAgICAgIGlmIChhcnJheSkgeworICAgICAgICAgICAgY2hhciAqZWxlbWVudCA9IG1hbGxvYyhsZW5ndGgrMSk7CisKKyAgICAgICAgICAgIGlmICghKGFycmF5W2luZGV4XSA9IGVsZW1lbnQpKSB7CisgICAgICAgICAgICAgIGxvZ01hbGxvY0Vycm9yKCk7CisgICAgICAgICAgICAgIGRlYWxsb2NhdGVTdHJpbmdzKGFycmF5KTsKKyAgICAgICAgICAgICAgYXJyYXkgPSBOVUxMOworICAgICAgICAgICAgICBnb3RvIGRvbmU7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIG1lbWNweShlbGVtZW50LCBzdGFydCwgbGVuZ3RoKTsKKyAgICAgICAgICAgIGVsZW1lbnRbbGVuZ3RoXSA9IDA7CisgICAgICAgICAgfQorICAgICAgICAgIGluZGV4ICs9IDE7CisKKyAgICAgICAgICBpZiAoIWVuZCkgYnJlYWs7CisgICAgICAgICAgc3RhcnQgPSBlbmQgKyAxOworICAgICAgICB9CisgICAgICB9CisKKyAgICAgIGlmIChhcnJheSkgeworICAgICAgICBhcnJheVtpbmRleF0gPSBOVUxMOworICAgICAgICBpZiAoY291bnQpICpjb3VudCA9IGluZGV4OworICAgICAgICBicmVhazsKKyAgICAgIH0KKworICAgICAgaWYgKCEoYXJyYXkgPSBtYWxsb2MoKGluZGV4ICsgMSkgKiBzaXplb2YoKmFycmF5KSkpKSB7CisgICAgICAgIGxvZ01hbGxvY0Vycm9yKCk7CisgICAgICAgIGJyZWFrOworICAgICAgfQorICAgIH0KKyAgfQorCitkb25lOgorICBpZiAoIWFycmF5ICYmIGNvdW50KSAqY291bnQgPSAwOworICByZXR1cm4gYXJyYXk7Cit9CisKK2ludAorY2hhbmdlTGlzdFNldHRpbmcgKGNoYXIgKioqbGlzdCwgY2hhciAqKnNldHRpbmcsIGNvbnN0IGNoYXIgKnZhbHVlKSB7CisgIGNoYXIgKipuZXdMaXN0ID0gc3BsaXRTdHJpbmcodmFsdWUsIFBBUkFNRVRFUl9TRVBBUkFUT1JfQ0hBUkFDVEVSLCBOVUxMKTsKKworICBpZiAobmV3TGlzdCkgeworICAgIGlmIChjaGFuZ2VTdHJpbmdTZXR0aW5nKHNldHRpbmcsIHZhbHVlKSkgeworICAgICAgY2hhciAqKm9sZExpc3QgPSAqbGlzdDsKKyAgICAgICpsaXN0ID0gbmV3TGlzdDsKKyAgICAgIGlmIChvbGRMaXN0KSBkZWFsbG9jYXRlU3RyaW5ncyhvbGRMaXN0KTsKKyAgICAgIHJldHVybiAxOworICAgIH0KKworICAgIGRlYWxsb2NhdGVTdHJpbmdzKG5ld0xpc3QpOworICB9CisKKyAgcmV0dXJuIDA7Cit9CisKK2ludAorcmVzY2FsZUludGVnZXIgKGludCB2YWx1ZSwgaW50IGZyb20sIGludCB0bykgeworICByZXR1cm4gKHRvICogKHZhbHVlICsgKGZyb20gLyAodG8gKiAyKSkpKSAvIGZyb207Cit9CisKK2ludAoraXNJbnRlZ2VyIChpbnQgKnZhbHVlLCBjb25zdCBjaGFyICpzdHJpbmcpIHsKKyAgaWYgKCpzdHJpbmcpIHsKKyAgICBjaGFyICplbmQ7CisgICAgbG9uZyBsID0gc3RydG9sKHN0cmluZywgJmVuZCwgMCk7CisKKyAgICBpZiAoISplbmQpIHsKKyAgICAgICp2YWx1ZSA9IGw7CisgICAgICByZXR1cm4gMTsKKyAgICB9CisgIH0KKworICByZXR1cm4gMDsKK30KKworaW50Citpc1Vuc2lnbmVkSW50ZWdlciAodW5zaWduZWQgaW50ICp2YWx1ZSwgY29uc3QgY2hhciAqc3RyaW5nKSB7CisgIGlmICgqc3RyaW5nKSB7CisgICAgY2hhciAqZW5kOworICAgIHVuc2lnbmVkIGxvbmcgbCA9IHN0cnRvdWwoc3RyaW5nLCAmZW5kLCAwKTsKKworICAgIGlmICghKmVuZCkgeworICAgICAgKnZhbHVlID0gbDsKKyAgICAgIHJldHVybiAxOworICAgIH0KKyAgfQorCisgIHJldHVybiAwOworfQorCitpbnQKK2lzTG9nTGV2ZWwgKHVuc2lnbmVkIGludCAqbGV2ZWwsIGNvbnN0IGNoYXIgKnN0cmluZykgeworICB7CisgICAgc2l6ZV90IGxlbmd0aCA9IHN0cmxlbihzdHJpbmcpOworCisgICAgZm9yICh1bnNpZ25lZCBpbnQgaW5kZXg9MDsgaW5kZXg8bG9nTGV2ZWxDb3VudDsgaW5kZXgrPTEpIHsKKyAgICAgIGlmIChzdHJuY2FzZWNtcChzdHJpbmcsIGxvZ0xldmVsTmFtZXNbaW5kZXhdLCBsZW5ndGgpID09IDApIHsKKyAgICAgICAgKmxldmVsID0gaW5kZXg7CisgICAgICAgIHJldHVybiAxOworICAgICAgfQorICAgIH0KKyAgfQorCisgIHsKKyAgICB1bnNpZ25lZCBpbnQgdmFsdWU7CisKKyAgICBpZiAoaXNVbnNpZ25lZEludGVnZXIoJnZhbHVlLCBzdHJpbmcpICYmICh2YWx1ZSA8IGxvZ0xldmVsQ291bnQpKSB7CisgICAgICAqbGV2ZWwgPSB2YWx1ZTsKKyAgICAgIHJldHVybiAxOworICAgIH0KKyAgfQorCisgIHJldHVybiAwOworfQorCitpbnQKK2lzQWJicmV2aWF0aW9uIChjb25zdCBjaGFyICphY3R1YWwsIGNvbnN0IGNoYXIgKnN1cHBsaWVkKSB7CisgIHJldHVybiBzdHJuY2FzZWNtcChhY3R1YWwsIHN1cHBsaWVkLCBzdHJsZW4oc3VwcGxpZWQpKSA9PSAwOworfQorCitpbnQKK2lzQWJicmV2aWF0ZWRQaHJhc2UgKGNvbnN0IGNoYXIgKmFjdHVhbCwgY29uc3QgY2hhciAqc3VwcGxpZWQpIHsKKyAgd2hpbGUgKDEpIHsKKyAgICBpZiAoISpzdXBwbGllZCkgcmV0dXJuIDE7CisKKyAgICBpZiAoKnN1cHBsaWVkID09ICctJykgeworICAgICAgd2hpbGUgKCphY3R1YWwgIT0gJy0nKSB7CisgICAgICAgIGlmICghKmFjdHVhbCkgcmV0dXJuIDA7CisgICAgICAgIGFjdHVhbCArPSAxOworICAgICAgfQorICAgIH0gZWxzZSBpZiAodG9sb3dlcigqc3VwcGxpZWQpICE9IHRvbG93ZXIoKmFjdHVhbCkpIHsKKyAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIGFjdHVhbCArPSAxOworICAgIHN1cHBsaWVkICs9IDE7CisgIH0KK30KKworaW50Cit2YWxpZGF0ZUludGVnZXIgKGludCAqdmFsdWUsIGNvbnN0IGNoYXIgKnN0cmluZywgY29uc3QgaW50ICptaW5pbXVtLCBjb25zdCBpbnQgKm1heGltdW0pIHsKKyAgaWYgKCpzdHJpbmcpIHsKKyAgICBpbnQgaTsKKworICAgIGlmICghaXNJbnRlZ2VyKCZpLCBzdHJpbmcpKSByZXR1cm4gMDsKKyAgICBpZiAobWluaW11bSAmJiAoaSA8ICptaW5pbXVtKSkgcmV0dXJuIDA7CisgICAgaWYgKG1heGltdW0gJiYgKGkgPiAqbWF4aW11bSkpIHJldHVybiAwOworCisgICAgKnZhbHVlID0gaTsKKyAgfQorCisgIHJldHVybiAxOworfQorCitpbnQKK3ZhbGlkYXRlQ2hvaWNlRXggKHVuc2lnbmVkIGludCAqdmFsdWUsIGNvbnN0IGNoYXIgKnN0cmluZywgY29uc3Qgdm9pZCAqY2hvaWNlcywgc2l6ZV90IHNpemUpIHsKKyAgKnZhbHVlID0gMDsKKyAgaWYgKCEqc3RyaW5nKSByZXR1cm4gMTsKKyAgY29uc3Qgdm9pZCAqY2hvaWNlID0gY2hvaWNlczsKKworICB3aGlsZSAoMSkgeworICAgIHR5cGVkZWYgc3RydWN0IHsKKyAgICAgIGNvbnN0IGNoYXIgKm5hbWU7CisgICAgfSBFbnRyeTsKKworICAgIGNvbnN0IEVudHJ5ICplbnRyeSA9IGNob2ljZTsKKyAgICBjb25zdCBjaGFyICpuYW1lID0gZW50cnktPm5hbWU7CisgICAgaWYgKCFuYW1lKSBicmVhazsKKworICAgIGlmIChpc0FiYnJldmlhdGVkUGhyYXNlKG5hbWUsIHN0cmluZykpIHsKKyAgICAgICp2YWx1ZSA9IChjaG9pY2UgLSBjaG9pY2VzKSAvIHNpemU7CisgICAgICByZXR1cm4gMTsKKyAgICB9CisKKyAgICBjaG9pY2UgKz0gc2l6ZTsKKyAgfQorCisgIHJldHVybiAwOworfQorCitpbnQKK3ZhbGlkYXRlQ2hvaWNlICh1bnNpZ25lZCBpbnQgKnZhbHVlLCBjb25zdCBjaGFyICpzdHJpbmcsIGNvbnN0IGNoYXIgKmNvbnN0ICpjaG9pY2VzKSB7CisgIHJldHVybiB2YWxpZGF0ZUNob2ljZUV4KHZhbHVlLCBzdHJpbmcsIGNob2ljZXMsIHNpemVvZigqY2hvaWNlcykpOworfQorCitGbGFnS2V5d29yZFBhaXIgZmtwT25PZmYgICAgID0gey5vbj0ib24iICAsIC5vZmY9Im9mZiIgIH07CitGbGFnS2V5d29yZFBhaXIgZmtwVHJ1ZUZhbHNlID0gey5vbj0idHJ1ZSIsIC5vZmY9ImZhbHNlIn07CitGbGFnS2V5d29yZFBhaXIgZmtwWWVzTm8gICAgID0gey5vbj0ieWVzIiAsIC5vZmY9Im5vIiAgIH07CitGbGFnS2V5d29yZFBhaXIgZmtwMTAgICAgICAgID0gey5vbj0iMSIgICAsIC5vZmY9IjAiICAgIH07CisKK2NvbnN0IEZsYWdLZXl3b3JkUGFpciAqY29uc3QgZmxhZ0tleXdvcmRQYWlyc1tdID0geworICAmZmtwT25PZmYsICZma3BUcnVlRmFsc2UsICZma3BZZXNObywgJmZrcDEwCit9OworCitpbnQKK3ZhbGlkYXRlRmxhZ0tleXdvcmQgKHVuc2lnbmVkIGludCAqdmFsdWUsIGNvbnN0IGNoYXIgKnN0cmluZykgeworICBzdGF0aWMgY29uc3QgY2hhciAqKmNob2ljZXMgPSBOVUxMOworCisgIGlmICghY2hvaWNlcykgeworICAgIHVuc2lnbmVkIGludCBjb3VudCA9IEFSUkFZX0NPVU5UKGZsYWdLZXl3b3JkUGFpcnMpOworICAgIHNpemVfdCBzaXplID0gQVJSQVlfU0laRShjaG9pY2VzLCAoKGNvdW50ICogMikgKyAxKSk7CisKKyAgICBpZiAoIShjaG9pY2VzID0gbWFsbG9jKHNpemUpKSkgeworICAgICAgbG9nTWFsbG9jRXJyb3IoKTsKKyAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIGNvbnN0IEZsYWdLZXl3b3JkUGFpciAqY29uc3QgKmZrcCA9IGZsYWdLZXl3b3JkUGFpcnM7CisgICAgY29uc3QgRmxhZ0tleXdvcmRQYWlyICpjb25zdCAqZW5kID0gZmtwICsgY291bnQ7CisgICAgY29uc3QgY2hhciAqKmNob2ljZSA9IGNob2ljZXM7CisKKyAgICB3aGlsZSAoZmtwIDwgZW5kKSB7CisgICAgICAqY2hvaWNlKysgPSAoKmZrcCktPm9mZjsKKyAgICAgICpjaG9pY2UrKyA9ICgqZmtwKS0+b247CisgICAgICBma3AgKz0gMTsKKyAgICB9CisKKyAgICAqY2hvaWNlID0gTlVMTDsKKyAgfQorCisgIGlmICghdmFsaWRhdGVDaG9pY2UodmFsdWUsIHN0cmluZywgY2hvaWNlcykpIHJldHVybiAwOworICAqdmFsdWUgJT0gMjsKKyAgcmV0dXJuIDE7Cit9CisKK2ludAordmFsaWRhdGVGbGFnICh1bnNpZ25lZCBpbnQgKnZhbHVlLCBjb25zdCBjaGFyICpzdHJpbmcsIGNvbnN0IEZsYWdLZXl3b3JkUGFpciAqZmtwKSB7CisgIGNvbnN0IGNoYXIgKmNob2ljZXNbXSA9IHtma3AtPm9mZiwgZmtwLT5vbiwgTlVMTH07CisgIHJldHVybiB2YWxpZGF0ZUNob2ljZSh2YWx1ZSwgc3RyaW5nLCBjaG9pY2VzKTsKK30KKworaW50Cit2YWxpZGF0ZU9uT2ZmICh1bnNpZ25lZCBpbnQgKnZhbHVlLCBjb25zdCBjaGFyICpzdHJpbmcpIHsKKyAgcmV0dXJuIHZhbGlkYXRlRmxhZyh2YWx1ZSwgc3RyaW5nLCAmZmtwT25PZmYpOworfQorCitpbnQKK3ZhbGlkYXRlWWVzTm8gKHVuc2lnbmVkIGludCAqdmFsdWUsIGNvbnN0IGNoYXIgKnN0cmluZykgeworICByZXR1cm4gdmFsaWRhdGVGbGFnKHZhbHVlLCBzdHJpbmcsICZma3BZZXNObyk7Cit9CisKKyNpZm5kZWYgTk9fRkxPQVQKK2ludAoraXNGbG9hdCAoZmxvYXQgKnZhbHVlLCBjb25zdCBjaGFyICpzdHJpbmcpIHsKKyAgaWYgKCpzdHJpbmcpIHsKKyAgICBjaGFyICplbmQ7CisgICAgZG91YmxlIGQgPSBzdHJ0b2Qoc3RyaW5nLCAmZW5kKTsKKworICAgIGlmICghKmVuZCkgeworICAgICAgKnZhbHVlID0gZDsKKyAgICAgIHJldHVybiAxOworICAgIH0KKyAgfQorCisgIHJldHVybiAwOworfQorCitpbnQKK3ZhbGlkYXRlRmxvYXQgKGZsb2F0ICp2YWx1ZSwgY29uc3QgY2hhciAqc3RyaW5nLCBjb25zdCBmbG9hdCAqbWluaW11bSwgY29uc3QgZmxvYXQgKm1heGltdW0pIHsKKyAgaWYgKCpzdHJpbmcpIHsKKyAgICBmbG9hdCBmOworCisgICAgaWYgKCFpc0Zsb2F0KCZmLCBzdHJpbmcpKSByZXR1cm4gMDsKKyAgICBpZiAobWluaW11bSAmJiAoZiA8ICptaW5pbXVtKSkgcmV0dXJuIDA7CisgICAgaWYgKG1heGltdW0gJiYgKGYgPiAqbWF4aW11bSkpIHJldHVybiAwOworCisgICAgKnZhbHVlID0gZjsKKyAgfQorCisgIHJldHVybiAxOworfQorI2VuZGlmIC8qIE5PX0ZMT0FUICovCisKKyNpZiBkZWZpbmVkKEhBVkVfUFdEX0gpICYmIGRlZmluZWQoSEFWRV9HUlBfSCkKKyNpbmNsdWRlIDxwd2QuaD4KKyNpbmNsdWRlIDxncnAuaD4KKworaW50Cit2YWxpZGF0ZVVzZXIgKHVpZF90ICp2YWx1ZSwgY29uc3QgY2hhciAqc3RyaW5nLCBnaWRfdCAqZ3JvdXApIHsKKyAgeworICAgIGludCBpbnRlZ2VyID0gZ2V0ZXVpZCgpOworICAgIHN0YXRpYyBjb25zdCBpbnQgbWluaW11bSA9IDA7CisKKyAgICBpZiAodmFsaWRhdGVJbnRlZ2VyKCZpbnRlZ2VyLCBzdHJpbmcsICZtaW5pbXVtLCBOVUxMKSkgeworICAgICAgKnZhbHVlID0gaW50ZWdlcjsKKworICAgICAgaWYgKGdyb3VwKSB7CisgICAgICAgIHN0cnVjdCBwYXNzd2QgKnVzZXIgPSBnZXRwd3VpZCgqdmFsdWUpOworICAgICAgICAqZ3JvdXAgPSB1c2VyPyB1c2VyLT5wd19naWQ6IDA7CisgICAgICB9CisKKyAgICAgIHJldHVybiAxOworICAgIH0KKyAgfQorCisgIHsKKyAgICBzdHJ1Y3QgcGFzc3dkICp1c2VyID0gZ2V0cHduYW0oc3RyaW5nKTsKKworICAgIGlmICh1c2VyKSB7CisgICAgICAqdmFsdWUgPSB1c2VyLT5wd191aWQ7CisgICAgICBpZiAoZ3JvdXApICpncm91cCA9IHVzZXItPnB3X2dpZDsKKyAgICAgIHJldHVybiAxOworICAgIH0KKyAgfQorCisgIHJldHVybiAwOworfQorCitpbnQKK3ZhbGlkYXRlR3JvdXAgKGdpZF90ICp2YWx1ZSwgY29uc3QgY2hhciAqc3RyaW5nKSB7CisgIHsKKyAgICBpbnQgaW50ZWdlciA9IGdldGV1aWQoKTsKKyAgICBzdGF0aWMgY29uc3QgaW50IG1pbmltdW0gPSAwOworCisgICAgaWYgKHZhbGlkYXRlSW50ZWdlcigmaW50ZWdlciwgc3RyaW5nLCAmbWluaW11bSwgTlVMTCkpIHsKKyAgICAgICp2YWx1ZSA9IGludGVnZXI7CisgICAgICByZXR1cm4gMTsKKyAgICB9CisgIH0KKworICB7CisgICAgc3RydWN0IGdyb3VwICpncm91cCA9IGdldGdybmFtKHN0cmluZyk7CisKKyAgICBpZiAoZ3JvdXApIHsKKyAgICAgICp2YWx1ZSA9IGdyb3VwLT5ncl9naWQ7CisgICAgICByZXR1cm4gMTsKKyAgICB9CisgIH0KKworICByZXR1cm4gMDsKK30KKyNlbmRpZiAvKiBkZWZpbmVkKEhBVkVfUFdEX0gpICYmIGRlZmluZWQoSEFWRV9HUlBfSCkgKi8KKworaW50CitoYXNRdWFsaWZpZXIgKGNvbnN0IGNoYXIgKippZGVudGlmaWVyLCBjb25zdCBjaGFyICpxdWFsaWZpZXIpIHsKKyAgY29uc3QgY2hhciAqZGVsaW1pdGVyID0gc3RyY2hyKCppZGVudGlmaWVyLCBQQVJBTUVURVJfUVVBTElGSUVSX0NIQVJBQ1RFUik7CisgIGlmICghZGVsaW1pdGVyKSByZXR1cm4gMDsKKworICBzaXplX3QgY291bnQgPSBkZWxpbWl0ZXIgLSAqaWRlbnRpZmllcjsKKyAgaWYgKG1lbWNocigqaWRlbnRpZmllciwgUEFUSF9TRVBBUkFUT1JfQ0hBUkFDVEVSLCBjb3VudCkpIHJldHVybiAwOworCisgIGlmIChxdWFsaWZpZXIpIHsKKyAgICBpZiAoY291bnQgIT0gc3RybGVuKHF1YWxpZmllcikpIHJldHVybiAwOworICAgIGlmIChzdHJuY2FzZWNtcCgqaWRlbnRpZmllciwgcXVhbGlmaWVyLCBjb3VudCkgIT0gMCkgcmV0dXJuIDA7CisgIH0KKworICAqaWRlbnRpZmllciArPSBjb3VudCArIDE7CisgIHJldHVybiAxOworfQorCitpbnQKK2hhc05vUXVhbGlmaWVyIChjb25zdCBjaGFyICppZGVudGlmaWVyKSB7CisgIHJldHVybiAhaGFzUXVhbGlmaWVyKCZpZGVudGlmaWVyLCBOVUxMKTsKK30KKworc3RhdGljIGludAorcGFyc2VQYXJhbWV0ZXJzICgKKyAgY2hhciAqKnZhbHVlcywKKyAgY29uc3QgY2hhciAqY29uc3QgKm5hbWVzLAorICBjb25zdCBjaGFyICpxdWFsaWZpZXIsCisgIGNvbnN0IGNoYXIgKnBhcmFtZXRlcnMKKykgeworICBpZiAocGFyYW1ldGVycyAmJiAqcGFyYW1ldGVycykgeworICAgIGNvbnN0IGNoYXIgKnBhcmFtZXRlciA9IHBhcmFtZXRlcnM7CisKKyAgICB3aGlsZSAoMSkgeworICAgICAgY29uc3QgY2hhciAqcGFyYW1ldGVyRW5kID0gc3RyY2hyKHBhcmFtZXRlciwgUEFSQU1FVEVSX1NFUEFSQVRPUl9DSEFSQUNURVIpOworICAgICAgaW50IGRvbmUgPSAhcGFyYW1ldGVyRW5kOworCisgICAgICBpZiAoZG9uZSkgcGFyYW1ldGVyRW5kID0gcGFyYW1ldGVyICsgc3RybGVuKHBhcmFtZXRlcik7CisgICAgICBpbnQgcGFyYW1ldGVyTGVuZ3RoID0gcGFyYW1ldGVyRW5kIC0gcGFyYW1ldGVyOworCisgICAgICBpZiAocGFyYW1ldGVyTGVuZ3RoID4gMCkgeworICAgICAgICBjb25zdCBjaGFyICp2YWx1ZSA9IG1lbWNocihwYXJhbWV0ZXIsIFBBUkFNRVRFUl9BU1NJR05NRU5UX0NIQVJBQ1RFUiwgcGFyYW1ldGVyTGVuZ3RoKTsKKworICAgICAgICBpZiAoIXZhbHVlKSB7CisgICAgICAgICAgbG9nTWVzc2FnZShMT0dfV0FSTklORywgIiVzOiAlLipzIiwKKyAgICAgICAgICAgICAgICAgICAgIGdldHRleHQoIm1pc3NpbmcgcGFyYW1ldGVyIHZhbHVlIiksCisgICAgICAgICAgICAgICAgICAgICBwYXJhbWV0ZXJMZW5ndGgsIHBhcmFtZXRlcik7CisgICAgICAgICAgZ290byBORVhUX1BBUkFNRVRFUjsKKyAgICAgICAgfQorCisgICAgICAgIHsKKyAgICAgICAgICBjb25zdCBjaGFyICpuYW1lID0gcGFyYW1ldGVyOworICAgICAgICAgIHNpemVfdCBuYW1lTGVuZ3RoID0gdmFsdWUrKyAtIG5hbWU7CisgICAgICAgICAgc2l6ZV90IHZhbHVlTGVuZ3RoID0gcGFyYW1ldGVyRW5kIC0gdmFsdWU7CisgICAgICAgICAgaW50IGlzRWxpZ2libGUgPSAxOworCisgICAgICAgICAgaWYgKHF1YWxpZmllcikgeworICAgICAgICAgICAgY29uc3QgY2hhciAqZGVsaW1pdGVyID0gbWVtY2hyKG5hbWUsIFBBUkFNRVRFUl9RVUFMSUZJRVJfQ0hBUkFDVEVSLCBuYW1lTGVuZ3RoKTsKKworICAgICAgICAgICAgaWYgKGRlbGltaXRlcikgeworICAgICAgICAgICAgICBzaXplX3QgcXVhbGlmaWVyTGVuZ3RoID0gZGVsaW1pdGVyIC0gbmFtZTsKKyAgICAgICAgICAgICAgc2l6ZV90IG5hbWVBZGp1c3RtZW50ID0gcXVhbGlmaWVyTGVuZ3RoICsgMTsKKworICAgICAgICAgICAgICBuYW1lICs9IG5hbWVBZGp1c3RtZW50OworICAgICAgICAgICAgICBuYW1lTGVuZ3RoIC09IG5hbWVBZGp1c3RtZW50OworICAgICAgICAgICAgICBpc0VsaWdpYmxlID0gMDsKKworICAgICAgICAgICAgICBpZiAoIXF1YWxpZmllckxlbmd0aCkgeworICAgICAgICAgICAgICAgIGxvZ01lc3NhZ2UoTE9HX1dBUk5JTkcsICIlczogJS4qcyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXR0ZXh0KCJtaXNzaW5nIHBhcmFtZXRlciBxdWFsaWZpZXIiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtZXRlckxlbmd0aCwgcGFyYW1ldGVyKTsKKyAgICAgICAgICAgICAgICBnb3RvIE5FWFRfUEFSQU1FVEVSOworICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgaWYgKChxdWFsaWZpZXJMZW5ndGggPT0gc3RybGVuKHF1YWxpZmllcikpICYmCisgICAgICAgICAgICAgICAgICAobWVtY21wKHBhcmFtZXRlciwgcXVhbGlmaWVyLCBxdWFsaWZpZXJMZW5ndGgpID09IDApKSB7CisgICAgICAgICAgICAgICAgaXNFbGlnaWJsZSA9IDE7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9CisKKyAgICAgICAgICBpZiAoIW5hbWVMZW5ndGgpIHsKKyAgICAgICAgICAgIGxvZ01lc3NhZ2UoTE9HX1dBUk5JTkcsICIlczogJS4qcyIsCisgICAgICAgICAgICAgICAgICAgICAgIGdldHRleHQoIm1pc3NpbmcgcGFyYW1ldGVyIG5hbWUiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1ldGVyTGVuZ3RoLCBwYXJhbWV0ZXIpOworICAgICAgICAgICAgZ290byBORVhUX1BBUkFNRVRFUjsKKyAgICAgICAgICB9CisKKyAgICAgICAgICBpZiAoaXNFbGlnaWJsZSkgeworICAgICAgICAgICAgdW5zaWduZWQgaW50IGluZGV4ID0gMDsKKworICAgICAgICAgICAgd2hpbGUgKG5hbWVzW2luZGV4XSkgeworICAgICAgICAgICAgICBpZiAoc3RybmNhc2VjbXAobmFtZSwgbmFtZXNbaW5kZXhdLCBuYW1lTGVuZ3RoKSA9PSAwKSB7CisgICAgICAgICAgICAgICAgY2hhciAqbmV3VmFsdWUgPSBtYWxsb2ModmFsdWVMZW5ndGggKyAxKTsKKworICAgICAgICAgICAgICAgIGlmICghbmV3VmFsdWUpIHsKKyAgICAgICAgICAgICAgICAgIGxvZ01hbGxvY0Vycm9yKCk7CisgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBtZW1jcHkobmV3VmFsdWUsIHZhbHVlLCB2YWx1ZUxlbmd0aCk7CisgICAgICAgICAgICAgICAgbmV3VmFsdWVbdmFsdWVMZW5ndGhdID0gMDsKKworICAgICAgICAgICAgICAgIGZyZWUodmFsdWVzW2luZGV4XSk7CisgICAgICAgICAgICAgICAgdmFsdWVzW2luZGV4XSA9IG5ld1ZhbHVlOworICAgICAgICAgICAgICAgIGdvdG8gTkVYVF9QQVJBTUVURVI7CisgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICBpbmRleCArPSAxOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBsb2dNZXNzYWdlKExPR19XQVJOSU5HLCAiJXM6ICUuKnMiLAorICAgICAgICAgICAgICAgICAgICAgICBnZXR0ZXh0KCJ1bnN1cHBvcnRlZCBwYXJhbWV0ZXIiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1ldGVyTGVuZ3RoLCBwYXJhbWV0ZXIpOworICAgICAgICAgICAgZ290byBORVhUX1BBUkFNRVRFUjsKKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgIH0KKworICAgIE5FWFRfUEFSQU1FVEVSOgorICAgICAgaWYgKGRvbmUpIGJyZWFrOworICAgICAgcGFyYW1ldGVyID0gcGFyYW1ldGVyRW5kICsgMTsKKyAgICB9CisgIH0KKworICByZXR1cm4gMTsKK30KKworY2hhciAqKgorZ2V0UGFyYW1ldGVycyAoY29uc3QgY2hhciAqY29uc3QgKm5hbWVzLCBjb25zdCBjaGFyICpxdWFsaWZpZXIsIGNvbnN0IGNoYXIgKnBhcmFtZXRlcnMpIHsKKyAgaWYgKCFuYW1lcykgeworICAgIHN0YXRpYyBjb25zdCBjaGFyICpjb25zdCBub05hbWVzW10gPSB7TlVMTH07CisgICAgbmFtZXMgPSBub05hbWVzOworICB9CisKKyAgeworICAgIGNoYXIgKip2YWx1ZXM7CisgICAgdW5zaWduZWQgaW50IGNvdW50ID0gMDsKKyAgICB3aGlsZSAobmFtZXNbY291bnRdKSBjb3VudCArPSAxOworCisgICAgaWYgKCh2YWx1ZXMgPSBtYWxsb2MoKGNvdW50ICsgMSkgKiBzaXplb2YoKnZhbHVlcykpKSkgeworICAgICAgdW5zaWduZWQgaW50IGluZGV4ID0gMDsKKworICAgICAgd2hpbGUgKGluZGV4IDwgY291bnQpIHsKKyAgICAgICAgaWYgKCEodmFsdWVzW2luZGV4XSA9IHN0cmR1cCgiIikpKSB7CisgICAgICAgICAgbG9nTWFsbG9jRXJyb3IoKTsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGluZGV4ICs9IDE7CisgICAgICB9CisKKyAgICAgIGlmIChpbmRleCA9PSBjb3VudCkgeworICAgICAgICB2YWx1ZXNbaW5kZXhdID0gTlVMTDsKKyAgICAgICAgaWYgKHBhcnNlUGFyYW1ldGVycyh2YWx1ZXMsIG5hbWVzLCBxdWFsaWZpZXIsIHBhcmFtZXRlcnMpKSByZXR1cm4gdmFsdWVzOworICAgICAgfQorCisgICAgICBkZWFsbG9jYXRlU3RyaW5ncyh2YWx1ZXMpOworICAgIH0gZWxzZSB7CisgICAgICBsb2dNYWxsb2NFcnJvcigpOworICAgIH0KKyAgfQorCisgIHJldHVybiBOVUxMOworfQorCit2b2lkCitsb2dQYXJhbWV0ZXJzIChjb25zdCBjaGFyICpjb25zdCAqbmFtZXMsIGNoYXIgKip2YWx1ZXMsIGNvbnN0IGNoYXIgKmRlc2NyaXB0aW9uKSB7CisgIGlmIChuYW1lcyAmJiB2YWx1ZXMpIHsKKyAgICB3aGlsZSAoKm5hbWVzKSB7CisgICAgICBsb2dNZXNzYWdlKExPR19JTkZPLCAiJXM6ICVzPSVzIiwgZGVzY3JpcHRpb24sICpuYW1lcywgKnZhbHVlcyk7CisgICAgICArK25hbWVzOworICAgICAgKyt2YWx1ZXM7CisgICAgfQorICB9Cit9CmRpZmYgLS1naXQgYS9Qcm9ncmFtcy9wY20uYyBiL1Byb2dyYW1zL3BjbS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc5ZWQ0Y2MKLS0tIC9kZXYvbnVsbAorKysgYi9Qcm9ncmFtcy9wY20uYwpAQCAtMCwwICsxLDE4OSBAQAorLyoKKyAqIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisgKiAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisgKgorICogQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKKyNpbmNsdWRlICJwcm9sb2d1ZS5oIgorCisjaW5jbHVkZSAibG9nLmgiCisjaW5jbHVkZSAicGNtLmgiCisKKyNkZWZpbmUgVU5TSUdORURfVE9fU0lHTkVEIGFtcGxpdHVkZSArPSBJTlQxNl9NSU4KKworc3RhdGljIGlubGluZSBQY21TYW1wbGVTaXplCittYWtlUGNtU2FtcGxlXzggKFBjbVNhbXBsZSAqc2FtcGxlLCBpbnQxNl90IGFtcGxpdHVkZSkgeworICBzYW1wbGUtPmJ5dGVzWzBdID0gYW1wbGl0dWRlID4+IDg7CisgIHJldHVybiAxOworfQorCitzdGF0aWMgUGNtU2FtcGxlU2l6ZQorbWFrZVBjbVNhbXBsZV9TOCAoUGNtU2FtcGxlICpzYW1wbGUsIGludDE2X3QgYW1wbGl0dWRlKSB7CisgIHJldHVybiBtYWtlUGNtU2FtcGxlXzgoc2FtcGxlLCBhbXBsaXR1ZGUpOworfQorCitzdGF0aWMgUGNtU2FtcGxlU2l6ZQorbWFrZVBjbVNhbXBsZV9VOCAoUGNtU2FtcGxlICpzYW1wbGUsIGludDE2X3QgYW1wbGl0dWRlKSB7CisgIFVOU0lHTkVEX1RPX1NJR05FRDsKKyAgcmV0dXJuIG1ha2VQY21TYW1wbGVfOChzYW1wbGUsIGFtcGxpdHVkZSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgUGNtU2FtcGxlU2l6ZQorbWFrZVBjbVNhbXBsZV8xNk4gKFBjbVNhbXBsZSAqc2FtcGxlLCBpbnQxNl90IGFtcGxpdHVkZSkgeworICB1bmlvbiB7CisgICAgdW5zaWduZWQgY2hhciAqYnl0ZXM7CisgICAgaW50MTZfdCAqczE2OworICB9IG92ZXJsYXk7CisKKyAgb3ZlcmxheS5ieXRlcyA9IHNhbXBsZS0+Ynl0ZXM7CisgICpvdmVybGF5LnMxNiA9IGFtcGxpdHVkZTsKKyAgcmV0dXJuIDI7Cit9CisKK3N0YXRpYyBQY21TYW1wbGVTaXplCittYWtlUGNtU2FtcGxlX1MxNk4gKFBjbVNhbXBsZSAqc2FtcGxlLCBpbnQxNl90IGFtcGxpdHVkZSkgeworICByZXR1cm4gbWFrZVBjbVNhbXBsZV8xNk4oc2FtcGxlLCBhbXBsaXR1ZGUpOworfQorCitzdGF0aWMgUGNtU2FtcGxlU2l6ZQorbWFrZVBjbVNhbXBsZV9VMTZOIChQY21TYW1wbGUgKnNhbXBsZSwgaW50MTZfdCBhbXBsaXR1ZGUpIHsKKyAgVU5TSUdORURfVE9fU0lHTkVEOworICByZXR1cm4gbWFrZVBjbVNhbXBsZV8xNk4oc2FtcGxlLCBhbXBsaXR1ZGUpOworfQorCisjaWZkZWYgV09SRFNfQklHRU5ESUFOCisjZGVmaW5lIG1ha2VQY21TYW1wbGVfUzE2QiBtYWtlUGNtU2FtcGxlX1MxNk4KKyNkZWZpbmUgbWFrZVBjbVNhbXBsZV9VMTZCIG1ha2VQY21TYW1wbGVfVTE2TgorI2Vsc2UgLyogV09SRFNfQklHRU5ESUFOICovCitzdGF0aWMgaW5saW5lIFBjbVNhbXBsZVNpemUKK21ha2VQY21TYW1wbGVfMTZCIChQY21TYW1wbGUgKnNhbXBsZSwgaW50MTZfdCBhbXBsaXR1ZGUpIHsKKyAgc2FtcGxlLT5ieXRlc1swXSA9IGFtcGxpdHVkZSA+PiA4OworICBzYW1wbGUtPmJ5dGVzWzFdID0gYW1wbGl0dWRlOworICByZXR1cm4gMjsKK30KKworc3RhdGljIFBjbVNhbXBsZVNpemUKK21ha2VQY21TYW1wbGVfUzE2QiAoUGNtU2FtcGxlICpzYW1wbGUsIGludDE2X3QgYW1wbGl0dWRlKSB7CisgIHJldHVybiBtYWtlUGNtU2FtcGxlXzE2QihzYW1wbGUsIGFtcGxpdHVkZSk7Cit9CisKK3N0YXRpYyBQY21TYW1wbGVTaXplCittYWtlUGNtU2FtcGxlX1UxNkIgKFBjbVNhbXBsZSAqc2FtcGxlLCBpbnQxNl90IGFtcGxpdHVkZSkgeworICBVTlNJR05FRF9UT19TSUdORUQ7CisgIHJldHVybiBtYWtlUGNtU2FtcGxlXzE2QihzYW1wbGUsIGFtcGxpdHVkZSk7Cit9CisjZW5kaWYgLyogV09SRFNfQklHRU5ESUFOICovCisKKyNpZm5kZWYgV09SRFNfQklHRU5ESUFOCisjZGVmaW5lIG1ha2VQY21TYW1wbGVfUzE2TCBtYWtlUGNtU2FtcGxlX1MxNk4KKyNkZWZpbmUgbWFrZVBjbVNhbXBsZV9VMTZMIG1ha2VQY21TYW1wbGVfVTE2TgorI2Vsc2UgLyogV09SRFNfQklHRU5ESUFOICovCitzdGF0aWMgaW5saW5lIFBjbVNhbXBsZVNpemUKK21ha2VQY21TYW1wbGVfMTZMIChQY21TYW1wbGUgKnNhbXBsZSwgaW50MTZfdCBhbXBsaXR1ZGUpIHsKKyAgc2FtcGxlLT5ieXRlc1swXSA9IGFtcGxpdHVkZTsKKyAgc2FtcGxlLT5ieXRlc1sxXSA9IGFtcGxpdHVkZSA+PiA4OworICByZXR1cm4gMjsKK30KKworc3RhdGljIFBjbVNhbXBsZVNpemUKK21ha2VQY21TYW1wbGVfUzE2TCAoUGNtU2FtcGxlICpzYW1wbGUsIGludDE2X3QgYW1wbGl0dWRlKSB7CisgIHJldHVybiBtYWtlUGNtU2FtcGxlXzE2TChzYW1wbGUsIGFtcGxpdHVkZSk7Cit9CisKK3N0YXRpYyBQY21TYW1wbGVTaXplCittYWtlUGNtU2FtcGxlX1UxNkwgKFBjbVNhbXBsZSAqc2FtcGxlLCBpbnQxNl90IGFtcGxpdHVkZSkgeworICBVTlNJR05FRF9UT19TSUdORUQ7CisgIHJldHVybiBtYWtlUGNtU2FtcGxlXzE2TChzYW1wbGUsIGFtcGxpdHVkZSk7Cit9CisjZW5kaWYgLyogV09SRFNfQklHRU5ESUFOICovCisKK3N0YXRpYyBQY21TYW1wbGVTaXplCittYWtlUGNtU2FtcGxlX1VMQVcgKFBjbVNhbXBsZSAqc2FtcGxlLCBpbnQxNl90IGFtcGxpdHVkZSkgeworICBpbnQgbmVnYXRpdmUgPSBhbXBsaXR1ZGUgPCAwOworICBpbnQgZXhwb25lbnQgPSAwWDc7CisgIHVuc2lnbmVkIGNoYXIgdmFsdWU7CisgIGNvbnN0IHVuc2lnbmVkIGludCBiaWFzID0gMFg4NDsKKyAgY29uc3QgdW5zaWduZWQgaW50IGNsaXAgPSAwWDdGRkYgLSBiaWFzOworCisgIGlmIChuZWdhdGl2ZSkgYW1wbGl0dWRlID0gLWFtcGxpdHVkZTsKKyAgaWYgKGFtcGxpdHVkZSA+IGNsaXApIGFtcGxpdHVkZSA9IGNsaXA7CisgIGFtcGxpdHVkZSArPSBiaWFzOworCisgIHdoaWxlICgoZXhwb25lbnQgPiAwKSAmJiAhKGFtcGxpdHVkZSAmIDBYNDAwMCkpIHsKKyAgICBhbXBsaXR1ZGUgPDw9IDE7CisgICAgLS1leHBvbmVudDsKKyAgfQorCisgIHZhbHVlID0gKGV4cG9uZW50IDw8IDQpIHwgKChhbXBsaXR1ZGUgPj4gMTApICYgMFgwRik7CisgIGlmIChuZWdhdGl2ZSkgdmFsdWUgfD0gMFg4MDsKKworICBzYW1wbGUtPmJ5dGVzWzBdID0gfnZhbHVlOworICByZXR1cm4gMTsKK30KKworc3RhdGljIFBjbVNhbXBsZVNpemUKK21ha2VQY21TYW1wbGVfQUxBVyAoUGNtU2FtcGxlICpzYW1wbGUsIGludDE2X3QgYW1wbGl0dWRlKSB7CisgIGludCBuZWdhdGl2ZSA9IGFtcGxpdHVkZSA8IDA7CisgIGludCBleHBvbmVudCA9IDBYNzsKKyAgdW5zaWduZWQgY2hhciB2YWx1ZTsKKworICBpZiAobmVnYXRpdmUpIGFtcGxpdHVkZSA9IC1hbXBsaXR1ZGU7CisKKyAgd2hpbGUgKChleHBvbmVudCA+IDApICYmICEoYW1wbGl0dWRlICYgMFg0MDAwKSkgeworICAgIGFtcGxpdHVkZSA8PD0gMTsKKyAgICAtLWV4cG9uZW50OworICB9CisKKyAgaWYgKCFleHBvbmVudCkgYW1wbGl0dWRlID4+PSAxOworICB2YWx1ZSA9IChleHBvbmVudCA8PCA0KSB8ICgoYW1wbGl0dWRlID4+IDEwKSAmIDBYMEYpOworICBpZiAobmVnYXRpdmUpIHZhbHVlIHw9IDBYODA7CisKKyAgc2FtcGxlLT5ieXRlc1swXSA9IHZhbHVlIF4gMFg1NTsKKyAgcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBQY21TYW1wbGVTaXplCittYWtlUGNtU2FtcGxlX1VOS05PV04gKFBjbVNhbXBsZSAqc2FtcGxlLCBpbnQxNl90IGFtcGxpdHVkZSkgeworICByZXR1cm4gMDsKK30KKworUGNtU2FtcGxlTWFrZXIKK2dldFBjbVNhbXBsZU1ha2VyIChQY21BbXBsaXR1ZGVGb3JtYXQgZm9ybWF0KSB7CisjZGVmaW5lIFBDTV9TQU1QTEVfTUFLRVJfRU5UUlkoZm9ybWF0KSBbUENNX0ZNVF8jI2Zvcm1hdF0gPSBtYWtlUGNtU2FtcGxlXyMjZm9ybWF0CisKKyAgc3RhdGljIFBjbVNhbXBsZU1ha2VyIGNvbnN0IHBjbVNhbXBsZU1ha2Vyc1tdID0geworICAgIFBDTV9TQU1QTEVfTUFLRVJfRU5UUlkoUzgpLAorICAgIFBDTV9TQU1QTEVfTUFLRVJfRU5UUlkoVTgpLAorCisgICAgUENNX1NBTVBMRV9NQUtFUl9FTlRSWShTMTZCKSwKKyAgICBQQ01fU0FNUExFX01BS0VSX0VOVFJZKFUxNkIpLAorCisgICAgUENNX1NBTVBMRV9NQUtFUl9FTlRSWShTMTZMKSwKKyAgICBQQ01fU0FNUExFX01BS0VSX0VOVFJZKFUxNkwpLAorCisgICAgUENNX1NBTVBMRV9NQUtFUl9FTlRSWShVTEFXKSwKKyAgICBQQ01fU0FNUExFX01BS0VSX0VOVFJZKEFMQVcpLAorCisgICAgUENNX1NBTVBMRV9NQUtFUl9FTlRSWShVTktOT1dOKQorICB9OworCisgIGlmIChmb3JtYXQgPCBBUlJBWV9DT1VOVChwY21TYW1wbGVNYWtlcnMpKSB7CisgICAgUGNtU2FtcGxlTWFrZXIgc2FtcGxlTWFrZXIgPSBwY21TYW1wbGVNYWtlcnNbZm9ybWF0XTsKKyAgICBpZiAoc2FtcGxlTWFrZXIpIHJldHVybiBzYW1wbGVNYWtlcjsKKyAgfQorCisgIGxvZ01lc3NhZ2UoTE9HX1dBUk5JTkcsICJ1bnN1cHBvcnRlZCBQQ00gZm9ybWF0OiAlZCIsIGZvcm1hdCk7CisgIHJldHVybiBwY21TYW1wbGVNYWtlcnNbUENNX0ZNVF9VTktOT1dOXTsKK30KZGlmZiAtLWdpdCBhL1Byb2dyYW1zL3BjbV9hbHNhLmMgYi9Qcm9ncmFtcy9wY21fYWxzYS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRiNzFjMzgKLS0tIC9kZXYvbnVsbAorKysgYi9Qcm9ncmFtcy9wY21fYWxzYS5jCkBAIC0wLDAgKzEsMzUxIEBACisvKgorICogQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyAqICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyAqCisgKiBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorICoKKyAqIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyAqCisgKiBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisgKi8KKworI2luY2x1ZGUgInByb2xvZ3VlLmgiCisKKyNkZWZpbmUgQUxTQV9QQ01fTkVXX0hXX1BBUkFNU19BUEkKKyNpbmNsdWRlIDxhbHNhL2Fzb3VuZGxpYi5oPgorCisjaW5jbHVkZSAibG9nLmgiCisjaW5jbHVkZSAidGltaW5nLmgiCisjaW5jbHVkZSAicGNtLmgiCisKK3N0cnVjdCBQY21EZXZpY2VTdHJ1Y3QgeworICBzbmRfcGNtX3QgKmhhbmRsZTsKKyAgc25kX3BjbV9od19wYXJhbXNfdCAqaGFyZHdhcmVQYXJhbWV0ZXJzOworICB1bnNpZ25lZCBpbnQgY2hhbm5lbENvdW50OworICB1bnNpZ25lZCBpbnQgc2FtcGxlUmF0ZTsKKyAgdW5zaWduZWQgaW50IGJ1ZmZlclRpbWU7CisgIHVuc2lnbmVkIGludCBwZXJpb2RUaW1lOworfTsKKworc3RhdGljIHZvaWQKK2xvZ1BjbUVycm9yIChpbnQgbGV2ZWwsIGNvbnN0IGNoYXIgKmFjdGlvbiwgaW50IGNvZGUpIHsKKyAgbG9nTWVzc2FnZShsZXZlbCwgIkFMU0EgUENNICVzIGVycm9yOiAlcyIsIGFjdGlvbiwgc25kX3N0cmVycm9yKGNvZGUpKTsKK30KKworc3RhdGljIGludAorY29uZmlndXJlUGNtU2FtcGxlRm9ybWF0IChQY21EZXZpY2UgKnBjbSwgaW50IGVycm9yTGV2ZWwpIHsKKyAgc3RhdGljIGNvbnN0IHNuZF9wY21fZm9ybWF0X3QgZm9ybWF0c1tdID0geworICAgIFNORF9QQ01fRk9STUFUX1MxNiwgU05EX1BDTV9GT1JNQVRfVTE2LAorICAgIFNORF9QQ01fRk9STUFUX1U4LCBTTkRfUENNX0ZPUk1BVF9TOCwKKyAgICBTTkRfUENNX0ZPUk1BVF9NVV9MQVcsCisgICAgU05EX1BDTV9GT1JNQVRfVU5LTk9XTgorICB9OworICBjb25zdCBzbmRfcGNtX2Zvcm1hdF90ICpmb3JtYXQgPSBmb3JtYXRzOworCisgIHdoaWxlICgqZm9ybWF0ICE9IFNORF9QQ01fRk9STUFUX1VOS05PV04pIHsKKyAgICBpbnQgcmVzdWx0ID0gc25kX3BjbV9od19wYXJhbXNfc2V0X2Zvcm1hdChwY20tPmhhbmRsZSwgcGNtLT5oYXJkd2FyZVBhcmFtZXRlcnMsICpmb3JtYXQpOworICAgIGlmIChyZXN1bHQgPj0gMCkgcmV0dXJuIDE7CisKKyAgICBpZiAocmVzdWx0ICE9IC1FSU5WQUwpIHsKKyAgICAgIGxvZ1BjbUVycm9yKGVycm9yTGV2ZWwsICJzZXQgZm9ybWF0IiwgcmVzdWx0KTsKKyAgICAgIHJldHVybiAwOworICAgIH0KKworICAgICsrZm9ybWF0OworICB9CisKKyAgbG9nTWVzc2FnZShlcnJvckxldmVsLCAiVW5zdXBwb3J0ZWQgUENNIHNhbXBsZSBmb3JtYXQuIik7CisgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50Citjb25maWd1cmVQY21TYW1wbGVSYXRlIChQY21EZXZpY2UgKnBjbSwgaW50IGVycm9yTGV2ZWwpIHsKKyAgaW50IHJlc3VsdDsKKyAgdW5zaWduZWQgaW50IG1pbmltdW07CisgIHVuc2lnbmVkIGludCBtYXhpbXVtOworCisgIGlmICgocmVzdWx0ID0gc25kX3BjbV9od19wYXJhbXNfZ2V0X3JhdGVfbWluKHBjbS0+aGFyZHdhcmVQYXJhbWV0ZXJzLCAmbWluaW11bSwgTlVMTCkpIDwgMCkgeworICAgIGxvZ1BjbUVycm9yKGVycm9yTGV2ZWwsICJnZXQgcmF0ZSBtaW4iLCByZXN1bHQpOworICAgIHJldHVybiAwOworICB9CisKKyAgaWYgKChyZXN1bHQgPSBzbmRfcGNtX2h3X3BhcmFtc19nZXRfcmF0ZV9tYXgocGNtLT5oYXJkd2FyZVBhcmFtZXRlcnMsICZtYXhpbXVtLCBOVUxMKSkgPCAwKSB7CisgICAgbG9nUGNtRXJyb3IoZXJyb3JMZXZlbCwgImdldCByYXRlIG1heCIsIHJlc3VsdCk7CisgICAgcmV0dXJuIDA7CisgIH0KKworICBpZiAoKG1pbmltdW0gPiBtYXhpbXVtKSB8fCAobWluaW11bSA8IDEpKSB7CisgICAgbG9nTWVzc2FnZShlcnJvckxldmVsLCAiSW52YWxpZCBQQ00gcmF0ZSByYW5nZTogJXUtJXUiLCBtaW5pbXVtLCBtYXhpbXVtKTsKKyAgICByZXR1cm4gMDsKKyAgfQorCisgIHBjbS0+c2FtcGxlUmF0ZSA9IE1JTihNQVgoMTYwMDAsIG1pbmltdW0pLCBtYXhpbXVtKTsKKyAgaWYgKChyZXN1bHQgPSBzbmRfcGNtX2h3X3BhcmFtc19zZXRfcmF0ZV9uZWFyKHBjbS0+aGFuZGxlLCBwY20tPmhhcmR3YXJlUGFyYW1ldGVycywgJnBjbS0+c2FtcGxlUmF0ZSwgTlVMTCkpIDwgMCkgeworICAgIGxvZ1BjbUVycm9yKGVycm9yTGV2ZWwsICJzZXQgcmF0ZSBuZWFyIiwgcmVzdWx0KTsKKyAgICByZXR1cm4gMDsKKyAgfQorCisgIHJldHVybiAxOworfQorCitzdGF0aWMgaW50Citjb25maWd1cmVQY21DaGFubmVsQ291bnQgKFBjbURldmljZSAqcGNtLCBpbnQgZXJyb3JMZXZlbCkgeworICBpbnQgcmVzdWx0OworICB1bnNpZ25lZCBpbnQgbWluaW11bTsKKyAgdW5zaWduZWQgaW50IG1heGltdW07CisKKyAgaWYgKChyZXN1bHQgPSBzbmRfcGNtX2h3X3BhcmFtc19nZXRfY2hhbm5lbHNfbWluKHBjbS0+aGFyZHdhcmVQYXJhbWV0ZXJzLCAmbWluaW11bSkpIDwgMCkgeworICAgIGxvZ1BjbUVycm9yKGVycm9yTGV2ZWwsICJnZXQgY2hhbm5lbHMgbWluIiwgcmVzdWx0KTsKKyAgICByZXR1cm4gMDsKKyAgfQorCisgIGlmICgocmVzdWx0ID0gc25kX3BjbV9od19wYXJhbXNfZ2V0X2NoYW5uZWxzX21heChwY20tPmhhcmR3YXJlUGFyYW1ldGVycywgJm1heGltdW0pKSA8IDApIHsKKyAgICBsb2dQY21FcnJvcihlcnJvckxldmVsLCAiZ2V0IGNoYW5uZWxzIG1heCIsIHJlc3VsdCk7CisgICAgcmV0dXJuIDA7CisgIH0KKworICBpZiAoKG1pbmltdW0gPiBtYXhpbXVtKSB8fCAobWluaW11bSA8IDEpKSB7CisgICAgbG9nTWVzc2FnZShlcnJvckxldmVsLCAiSW52YWxpZCBQQ00gY2hhbm5lbCByYW5nZTogJXUtJXUiLCBtaW5pbXVtLCBtYXhpbXVtKTsKKyAgICByZXR1cm4gMDsKKyAgfQorCisgIHBjbS0+Y2hhbm5lbENvdW50ID0gbWluaW11bTsKKyAgaWYgKChyZXN1bHQgPSBzbmRfcGNtX2h3X3BhcmFtc19zZXRfY2hhbm5lbHNfbmVhcihwY20tPmhhbmRsZSwgcGNtLT5oYXJkd2FyZVBhcmFtZXRlcnMsICZwY20tPmNoYW5uZWxDb3VudCkpIDwgMCkgeworICAgIGxvZ1BjbUVycm9yKGVycm9yTGV2ZWwsICJzZXQgY2hhbm5lbHMgbmVhciIsIHJlc3VsdCk7CisgICAgcmV0dXJuIDA7CisgIH0KKworICByZXR1cm4gMTsKK30KKworUGNtRGV2aWNlICoKK29wZW5QY21EZXZpY2UgKGludCBlcnJvckxldmVsLCBjb25zdCBjaGFyICpkZXZpY2UpIHsKKyAgUGNtRGV2aWNlICpwY207CisKKyAgaWYgKChwY20gPSBtYWxsb2Moc2l6ZW9mKCpwY20pKSkpIHsKKyAgICBpbnQgcmVzdWx0OworCisgICAgaWYgKCEqZGV2aWNlKSBkZXZpY2UgPSAiZGVmYXVsdCI7CisgICAgaWYgKChyZXN1bHQgPSBzbmRfcGNtX29wZW4oJnBjbS0+aGFuZGxlLCBkZXZpY2UsIFNORF9QQ01fU1RSRUFNX1BMQVlCQUNLLCBTTkRfUENNX05PTkJMT0NLKSkgPj0gMCkgeworICAgICAgc25kX3BjbV9ub25ibG9jayhwY20tPmhhbmRsZSwgMCk7CisKKyAgICAgIGlmICgocmVzdWx0ID0gc25kX3BjbV9od19wYXJhbXNfbWFsbG9jKCZwY20tPmhhcmR3YXJlUGFyYW1ldGVycykpID49IDApIHsKKyAgICAgICAgaWYgKChyZXN1bHQgPSBzbmRfcGNtX2h3X3BhcmFtc19hbnkocGNtLT5oYW5kbGUsIHBjbS0+aGFyZHdhcmVQYXJhbWV0ZXJzKSkgPj0gMCkgeworICAgICAgICAgIGlmICgocmVzdWx0ID0gc25kX3BjbV9od19wYXJhbXNfc2V0X2FjY2VzcyhwY20tPmhhbmRsZSwgcGNtLT5oYXJkd2FyZVBhcmFtZXRlcnMsIFNORF9QQ01fQUNDRVNTX1JXX0lOVEVSTEVBVkVEKSkgPj0gMCkgeworICAgICAgICAgICAgaWYgKGNvbmZpZ3VyZVBjbVNhbXBsZUZvcm1hdChwY20sIGVycm9yTGV2ZWwpKSB7CisgICAgICAgICAgICAgIGlmIChjb25maWd1cmVQY21TYW1wbGVSYXRlKHBjbSwgZXJyb3JMZXZlbCkpIHsKKyAgICAgICAgICAgICAgICBpZiAoY29uZmlndXJlUGNtQ2hhbm5lbENvdW50KHBjbSwgZXJyb3JMZXZlbCkpIHsKKyAgICAgICAgICAgICAgICAgIHBjbS0+YnVmZmVyVGltZSA9IDUwMDAwMDsKKyAgICAgICAgICAgICAgICAgIGlmICgocmVzdWx0ID0gc25kX3BjbV9od19wYXJhbXNfc2V0X2J1ZmZlcl90aW1lX25lYXIocGNtLT5oYW5kbGUsIHBjbS0+aGFyZHdhcmVQYXJhbWV0ZXJzLCAmcGNtLT5idWZmZXJUaW1lLCBOVUxMKSkgPj0gMCkgeworICAgICAgICAgICAgICAgICAgICBwY20tPnBlcmlvZFRpbWUgPSBwY20tPmJ1ZmZlclRpbWUgLyA4OworICAgICAgICAgICAgICAgICAgICBpZiAoKHJlc3VsdCA9IHNuZF9wY21faHdfcGFyYW1zX3NldF9wZXJpb2RfdGltZV9uZWFyKHBjbS0+aGFuZGxlLCBwY20tPmhhcmR3YXJlUGFyYW1ldGVycywgJnBjbS0+cGVyaW9kVGltZSwgTlVMTCkpID49IDApIHsKKyAgICAgICAgICAgICAgICAgICAgICBpZiAoKHJlc3VsdCA9IHNuZF9wY21faHdfcGFyYW1zKHBjbS0+aGFuZGxlLCBwY20tPmhhcmR3YXJlUGFyYW1ldGVycykpID49IDApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGxvZ01lc3NhZ2UoTE9HX0RFQlVHLCAiQUxTQSBQQ006IENoYW49JXUgUmF0ZT0ldSBCdWZUaW09JXUgUGVyVGltPSV1IiwgcGNtLT5jaGFubmVsQ291bnQsIHBjbS0+c2FtcGxlUmF0ZSwgcGNtLT5idWZmZXJUaW1lLCBwY20tPnBlcmlvZFRpbWUpOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHBjbTsKKyAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgbG9nUGNtRXJyb3IoZXJyb3JMZXZlbCwgInNldCBoYXJkd2FyZSBwYXJhbWV0ZXJzIiwgcmVzdWx0KTsKKyAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgbG9nUGNtRXJyb3IoZXJyb3JMZXZlbCwgInNldCBwZXJpb2QgdGltZSBuZWFyIiwgcmVzdWx0KTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgbG9nUGNtRXJyb3IoZXJyb3JMZXZlbCwgInNldCBidWZmZXIgdGltZSBuZWFyIiwgcmVzdWx0KTsKKyAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgbG9nUGNtRXJyb3IoZXJyb3JMZXZlbCwgInNldCBhY2Nlc3MiLCByZXN1bHQpOworICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICBsb2dQY21FcnJvcihlcnJvckxldmVsLCAiZ2V0IGhhcmR3YXJlIHBhcmFtZXRlcnMiLCByZXN1bHQpOworICAgICAgICB9CisKKyAgICAgICAgc25kX3BjbV9od19wYXJhbXNfZnJlZShwY20tPmhhcmR3YXJlUGFyYW1ldGVycyk7CisgICAgICB9IGVsc2UgeworICAgICAgICBsb2dQY21FcnJvcihlcnJvckxldmVsLCAiaGFyZHdhcmUgcGFyYW1ldGVycyBhbGxvY2F0aW9uIiwgcmVzdWx0KTsKKyAgICAgIH0KKworICAgICAgc25kX3BjbV9jbG9zZShwY20tPmhhbmRsZSk7CisgICAgfSBlbHNlIHsKKyAgICAgIGxvZ1BjbUVycm9yKGVycm9yTGV2ZWwsICJvcGVuIiwgcmVzdWx0KTsKKyAgICB9CisKKyAgICBmcmVlKHBjbSk7CisgIH0gZWxzZSB7CisgICAgbG9nU3lzdGVtRXJyb3IoIlBDTSBkZXZpY2UgYWxsb2NhdGlvbiIpOworICB9CisKKyAgcmV0dXJuIE5VTEw7Cit9CisKK3ZvaWQKK2Nsb3NlUGNtRGV2aWNlIChQY21EZXZpY2UgKnBjbSkgeworICBhd2FpdFBjbU91dHB1dChwY20pOworICBzbmRfcGNtX2Nsb3NlKHBjbS0+aGFuZGxlKTsKKyAgc25kX3BjbV9od19wYXJhbXNfZnJlZShwY20tPmhhcmR3YXJlUGFyYW1ldGVycyk7CisgIGZyZWUocGNtKTsKK30KKworc3RhdGljIGludAorZ2V0UGNtRnJhbWVTaXplIChQY21EZXZpY2UgKnBjbSkgeworICByZXR1cm4gZ2V0UGNtQ2hhbm5lbENvdW50KHBjbSkgKiAoc25kX3BjbV9od19wYXJhbXNfZ2V0X3NiaXRzKHBjbS0+aGFyZHdhcmVQYXJhbWV0ZXJzKSAvIDgpOworfQorCitpbnQKK3dyaXRlUGNtRGF0YSAoUGNtRGV2aWNlICpwY20sIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZmZlciwgaW50IGNvdW50KSB7CisgIGludCBmcmFtZVNpemUgPSBnZXRQY21GcmFtZVNpemUocGNtKTsKKyAgaW50IGZyYW1lc0xlZnQgPSBjb3VudCAvIGZyYW1lU2l6ZTsKKworICB3aGlsZSAoZnJhbWVzTGVmdCA+IDApIHsKKyAgICBpbnQgcmVzdWx0OworCisgICAgaWYgKChyZXN1bHQgPSBzbmRfcGNtX3dyaXRlaShwY20tPmhhbmRsZSwgYnVmZmVyLCBmcmFtZXNMZWZ0KSkgPiAwKSB7CisgICAgICBmcmFtZXNMZWZ0IC09IHJlc3VsdDsKKyAgICAgIGJ1ZmZlciArPSByZXN1bHQgKiBmcmFtZVNpemU7CisgICAgfSBlbHNlIHsKKyAgICAgIHN3aXRjaCAocmVzdWx0KSB7CisgICAgICAgIGNhc2UgLUVQSVBFOgorICAgICAgICAgIGlmICgocmVzdWx0ID0gc25kX3BjbV9wcmVwYXJlKHBjbS0+aGFuZGxlKSkgPCAwKSB7CisgICAgICAgICAgICBsb2dQY21FcnJvcihMT0dfV0FSTklORywgInVuZGVycnVuIHJlY292ZXJ5IC0gcHJlcGFyZSIsIHJlc3VsdCk7CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICB9CisgICAgICAgICAgY29udGludWU7CisKKyNpZiBFU1RSUElQRSAhPSBFUElQRQorICAgICAgICBjYXNlIC1FU1RSUElQRToKKyAgICAgICAgICB3aGlsZSAoKHJlc3VsdCA9IHNuZF9wY21fcmVzdW1lKHBjbS0+aGFuZGxlKSkgPT0gLUVBR0FJTikgYXBwcm94aW1hdGVEZWxheSgxKTsKKworICAgICAgICAgIGlmIChyZXN1bHQgPCAwKSB7CisgICAgICAgICAgICBpZiAoKHJlc3VsdCA9IHNuZF9wY21fcHJlcGFyZShwY20tPmhhbmRsZSkpIDwgMCkgeworICAgICAgICAgICAgICBsb2dQY21FcnJvcihMT0dfV0FSTklORywgInJlc3VtZSAtIHByZXBhcmUiLCByZXN1bHQpOworICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9CisgICAgICAgICAgY29udGludWU7CisjZW5kaWYgLyogRVNUUlBJUEUgIT0gRVBJUEUgKi8KKyAgICAgIH0KKyAgICB9CisgIH0KKyAgcmV0dXJuIDE7Cit9CisKK2ludAorZ2V0UGNtQmxvY2tTaXplIChQY21EZXZpY2UgKnBjbSkgeworICBzbmRfcGNtX3VmcmFtZXNfdCBmcmFtZXM7CisgIGludCByZXN1bHQ7CisKKyAgaWYgKChyZXN1bHQgPSBzbmRfcGNtX2h3X3BhcmFtc19nZXRfcGVyaW9kX3NpemUocGNtLT5oYXJkd2FyZVBhcmFtZXRlcnMsICZmcmFtZXMsIE5VTEwpKSA+PSAwKSB7CisgICAgcmV0dXJuIGZyYW1lcyAqIGdldFBjbUZyYW1lU2l6ZShwY20pOworICB9IGVsc2UgeworICAgIGxvZ1BjbUVycm9yKExPR19FUlIsICJnZXQgcGVyaW9kIHNpemUiLCByZXN1bHQpOworICB9CisgIHJldHVybiA2NTUzNTsKK30KKworaW50CitnZXRQY21TYW1wbGVSYXRlIChQY21EZXZpY2UgKnBjbSkgeworICByZXR1cm4gcGNtLT5zYW1wbGVSYXRlOworfQorCitpbnQKK3NldFBjbVNhbXBsZVJhdGUgKFBjbURldmljZSAqcGNtLCBpbnQgcmF0ZSkgeworICBpbnQgcmVzdWx0OworCisgIHBjbS0+c2FtcGxlUmF0ZSA9IHJhdGU7CisgIGlmICgocmVzdWx0ID0gc25kX3BjbV9od19wYXJhbXNfc2V0X3JhdGVfbmVhcihwY20tPmhhbmRsZSwgcGNtLT5oYXJkd2FyZVBhcmFtZXRlcnMsICZwY20tPnNhbXBsZVJhdGUsIE5VTEwpKSA8IDApIHsKKyAgICBsb2dQY21FcnJvcihMT0dfRVJSLCAic2V0IHJhdGUgbmVhciIsIHJlc3VsdCk7CisgIH0KKworICByZXR1cm4gZ2V0UGNtU2FtcGxlUmF0ZShwY20pOworfQorCitpbnQKK2dldFBjbUNoYW5uZWxDb3VudCAoUGNtRGV2aWNlICpwY20pIHsKKyAgcmV0dXJuIHBjbS0+Y2hhbm5lbENvdW50OworfQorCitpbnQKK3NldFBjbUNoYW5uZWxDb3VudCAoUGNtRGV2aWNlICpwY20sIGludCBjaGFubmVscykgeworICBpbnQgcmVzdWx0OworCisgIHBjbS0+Y2hhbm5lbENvdW50ID0gY2hhbm5lbHM7CisgIGlmICgocmVzdWx0ID0gc25kX3BjbV9od19wYXJhbXNfc2V0X2NoYW5uZWxzX25lYXIocGNtLT5oYW5kbGUsIHBjbS0+aGFyZHdhcmVQYXJhbWV0ZXJzLCAmcGNtLT5jaGFubmVsQ291bnQpKSA8IDApIHsKKyAgICBsb2dQY21FcnJvcihMT0dfRVJSLCAic2V0IGNoYW5uZWxzIG5lYXIiLCByZXN1bHQpOworICB9CisKKyAgcmV0dXJuIGdldFBjbUNoYW5uZWxDb3VudChwY20pOworfQorCit0eXBlZGVmIHN0cnVjdCB7CisgIFBjbUFtcGxpdHVkZUZvcm1hdCBpbnRlcm5hbDsKKyAgc25kX3BjbV9mb3JtYXRfdCBleHRlcm5hbDsKK30gQW1wbGl0dWRlRm9ybWF0RW50cnk7CitzdGF0aWMgY29uc3QgQW1wbGl0dWRlRm9ybWF0RW50cnkgYW1wbGl0dWRlRm9ybWF0VGFibGVbXSA9IHsKKyAge1BDTV9GTVRfVTggICAgICwgU05EX1BDTV9GT1JNQVRfVTggICAgIH0sCisgIHtQQ01fRk1UX1M4ICAgICAsIFNORF9QQ01fRk9STUFUX1M4ICAgICB9LAorICB7UENNX0ZNVF9VMTZCICAgLCBTTkRfUENNX0ZPUk1BVF9VMTZfQkUgfSwKKyAge1BDTV9GTVRfUzE2QiAgICwgU05EX1BDTV9GT1JNQVRfUzE2X0JFIH0sCisgIHtQQ01fRk1UX1UxNkwgICAsIFNORF9QQ01fRk9STUFUX1UxNl9MRSB9LAorICB7UENNX0ZNVF9TMTZMICAgLCBTTkRfUENNX0ZPUk1BVF9TMTZfTEUgfSwKKyAge1BDTV9GTVRfVUxBVyAgICwgU05EX1BDTV9GT1JNQVRfTVVfTEFXIH0sCisgIHtQQ01fRk1UX1VOS05PV04sIFNORF9QQ01fRk9STUFUX1VOS05PV059Cit9OworCitQY21BbXBsaXR1ZGVGb3JtYXQKK2dldFBjbUFtcGxpdHVkZUZvcm1hdCAoUGNtRGV2aWNlICpwY20pIHsKKyAgc25kX3BjbV9mb3JtYXRfdCBmb3JtYXQ7CisgIGludCByZXN1bHQ7CisKKyAgaWYgKChyZXN1bHQgPSBzbmRfcGNtX2h3X3BhcmFtc19nZXRfZm9ybWF0KHBjbS0+aGFyZHdhcmVQYXJhbWV0ZXJzLCAmZm9ybWF0KSkgPCAwKSB7CisgICAgbG9nUGNtRXJyb3IoTE9HX0VSUiwgImdldCBmb3JtYXQiLCByZXN1bHQpOworICB9IGVsc2UgeworICAgIGNvbnN0IEFtcGxpdHVkZUZvcm1hdEVudHJ5ICplbnRyeSA9IGFtcGxpdHVkZUZvcm1hdFRhYmxlOworICAgIHdoaWxlIChlbnRyeS0+aW50ZXJuYWwgIT0gUENNX0ZNVF9VTktOT1dOKSB7CisgICAgICBpZiAoZW50cnktPmV4dGVybmFsID09IGZvcm1hdCkgcmV0dXJuIGVudHJ5LT5pbnRlcm5hbDsKKyAgICAgICsrZW50cnk7CisgICAgfQorICB9CisgIHJldHVybiBQQ01fRk1UX1VOS05PV047Cit9CisKK1BjbUFtcGxpdHVkZUZvcm1hdAorc2V0UGNtQW1wbGl0dWRlRm9ybWF0IChQY21EZXZpY2UgKnBjbSwgUGNtQW1wbGl0dWRlRm9ybWF0IGZvcm1hdCkgeworICBjb25zdCBBbXBsaXR1ZGVGb3JtYXRFbnRyeSAqZW50cnkgPSBhbXBsaXR1ZGVGb3JtYXRUYWJsZTsKKyAgaW50IHJlc3VsdDsKKworICB3aGlsZSAoZW50cnktPmludGVybmFsICE9IFBDTV9GTVRfVU5LTk9XTikgeworICAgIGlmIChlbnRyeS0+aW50ZXJuYWwgPT0gZm9ybWF0KSBicmVhazsKKyAgICArK2VudHJ5OworICB9CisKKyAgaWYgKChyZXN1bHQgPSBzbmRfcGNtX2h3X3BhcmFtc19zZXRfZm9ybWF0KHBjbS0+aGFuZGxlLCBwY20tPmhhcmR3YXJlUGFyYW1ldGVycywgZW50cnktPmV4dGVybmFsKSkgPCAwKSB7CisgICAgbG9nUGNtRXJyb3IoTE9HX0VSUiwgInNldCBmb3JtYXQiLCByZXN1bHQpOworICAgIHJldHVybiBnZXRQY21BbXBsaXR1ZGVGb3JtYXQocGNtKTsKKyAgfQorCisgIHJldHVybiBlbnRyeS0+aW50ZXJuYWw7Cit9CisKK3ZvaWQKK3B1c2hQY21PdXRwdXQgKFBjbURldmljZSAqcGNtKSB7Cit9CisKK3ZvaWQKK2F3YWl0UGNtT3V0cHV0IChQY21EZXZpY2UgKnBjbSkgeworICBpbnQgcmVzdWx0OworICBpZiAoKHJlc3VsdCA9IHNuZF9wY21fZHJhaW4ocGNtLT5oYW5kbGUpKSA8IDApIGxvZ1BjbUVycm9yKExPR19XQVJOSU5HLCAiZHJhaW4iLCByZXN1bHQpOworfQorCit2b2lkCitjYW5jZWxQY21PdXRwdXQgKFBjbURldmljZSAqcGNtKSB7CisgIGludCByZXN1bHQ7CisgIGlmICgocmVzdWx0ID0gc25kX3BjbV9kcm9wKHBjbS0+aGFuZGxlKSkgPCAwKSBsb2dQY21FcnJvcihMT0dfV0FSTklORywgImRyb3AiLCByZXN1bHQpOworfQpkaWZmIC0tZ2l0IGEvUHJvZ3JhbXMvcGNtX2FuZHJvaWQuYyBiL1Byb2dyYW1zL3BjbV9hbmRyb2lkLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjc1MzZjOQotLS0gL2Rldi9udWxsCisrKyBiL1Byb2dyYW1zL3BjbV9hbmRyb2lkLmMKQEAgLTAsMCArMSwyODQgQEAKKy8qCisgKiBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorICogICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorICoKKyAqIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorICoKKyAqIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyAqLworCisjaW5jbHVkZSAicHJvbG9ndWUuaCIKKworI2luY2x1ZGUgPHN0cmluZy5oPgorCisjaW5jbHVkZSAibG9nLmgiCisjaW5jbHVkZSAicGNtLmgiCisjaW5jbHVkZSAic3lzdGVtX2phdmEuaCIKKworc3RydWN0IFBjbURldmljZVN0cnVjdCB7CisgIEpOSUVudiAqZW52OworICBqb2JqZWN0IGRldmljZTsKK307CisKK3N0YXRpYyBqY2xhc3MgcGNtRGV2aWNlQ2xhc3MgPSBOVUxMOworCitzdGF0aWMgaW50CitmaW5kUGNtRGV2aWNlQ2xhc3MgKEpOSUVudiAqZW52KSB7CisgIHJldHVybiBmaW5kSmF2YUNsYXNzKGVudiwgJnBjbURldmljZUNsYXNzLCBKQVZBX09CSl9CUkxUVFkoIlBjbURldmljZSIpKTsKK30KKworUGNtRGV2aWNlICoKK29wZW5QY21EZXZpY2UgKGludCBlcnJvckxldmVsLCBjb25zdCBjaGFyICpkZXZpY2UpIHsKKyAgUGNtRGV2aWNlICpwY20gPSBtYWxsb2Moc2l6ZW9mKCpwY20pKTsKKworICBpZiAocGNtKSB7CisgICAgbWVtc2V0KHBjbSwgMCwgc2l6ZW9mKCpwY20pKTsKKyAgICBwY20tPmVudiA9IGdldEphdmFOYXRpdmVJbnRlcmZhY2UoKTsKKyAgICBwY20tPmRldmljZSA9IE5VTEw7CisKKyAgICBpZiAoZmluZFBjbURldmljZUNsYXNzKHBjbS0+ZW52KSkgeworICAgICAgc3RhdGljIGptZXRob2RJRCBjb25zdHJ1Y3RvciA9IDA7CisKKyAgICAgIGlmIChmaW5kSmF2YUNvbnN0cnVjdG9yKHBjbS0+ZW52LCAmY29uc3RydWN0b3IsIHBjbURldmljZUNsYXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSkFWQV9TSUdfQ09OU1RSVUNUT1IoKSkpIHsKKyAgICAgICAgam9iamVjdCBsb2NhbFJlZmVyZW5jZSA9ICgqcGNtLT5lbnYpLT5OZXdPYmplY3QocGNtLT5lbnYsIHBjbURldmljZUNsYXNzLCBjb25zdHJ1Y3Rvcik7CisKKyAgICAgICAgaWYgKCFjbGVhckphdmFFeGNlcHRpb24ocGNtLT5lbnYsIDEpKSB7CisgICAgICAgICAgam9iamVjdCBnbG9iYWxSZWZlcmVuY2UgPSAoKnBjbS0+ZW52KS0+TmV3R2xvYmFsUmVmKHBjbS0+ZW52LCBsb2NhbFJlZmVyZW5jZSk7CisKKyAgICAgICAgICAoKnBjbS0+ZW52KS0+RGVsZXRlTG9jYWxSZWYocGNtLT5lbnYsIGxvY2FsUmVmZXJlbmNlKTsKKyAgICAgICAgICBsb2NhbFJlZmVyZW5jZSA9IE5VTEw7CisKKyAgICAgICAgICBpZiAoZ2xvYmFsUmVmZXJlbmNlKSB7CisgICAgICAgICAgICBwY20tPmRldmljZSA9IGdsb2JhbFJlZmVyZW5jZTsKKyAgICAgICAgICAgIHJldHVybiBwY207CisgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGxvZ01hbGxvY0Vycm9yKCk7CisgICAgICAgICAgICBjbGVhckphdmFFeGNlcHRpb24ocGNtLT5lbnYsIDApOworICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgfQorICAgIH0KKworICAgIGZyZWUocGNtKTsKKyAgfSBlbHNlIHsKKyAgICBsb2dNYWxsb2NFcnJvcigpOworICB9CisKKyAgcmV0dXJuIE5VTEw7Cit9CisKK3ZvaWQKK2Nsb3NlUGNtRGV2aWNlIChQY21EZXZpY2UgKnBjbSkgeworICBpZiAocGNtKSB7CisgICAgaWYgKHBjbS0+ZGV2aWNlKSB7CisgICAgICBpZiAoZmluZFBjbURldmljZUNsYXNzKHBjbS0+ZW52KSkgeworICAgICAgICBzdGF0aWMgam1ldGhvZElEIG1ldGhvZCA9IDA7CisKKyAgICAgICAgaWYgKGZpbmRKYXZhSW5zdGFuY2VNZXRob2QocGNtLT5lbnYsICZtZXRob2QsIHBjbURldmljZUNsYXNzLCAiY2xvc2UiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKQVZBX1NJR19NRVRIT0QoSkFWQV9TSUdfVk9JRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSkpIHsKKyAgICAgICAgICAoKnBjbS0+ZW52KS0+Q2FsbFZvaWRNZXRob2QocGNtLT5lbnYsIHBjbS0+ZGV2aWNlLCBtZXRob2QpOworICAgICAgICAgIGNsZWFySmF2YUV4Y2VwdGlvbihwY20tPmVudiwgMSk7CisgICAgICAgIH0KKyAgICAgIH0KKworICAgICAgKCpwY20tPmVudiktPkRlbGV0ZUdsb2JhbFJlZihwY20tPmVudiwgcGNtLT5kZXZpY2UpOworICAgIH0KKworICAgIGZyZWUocGNtKTsKKyAgfQorfQorCitpbnQKK3dyaXRlUGNtRGF0YSAoUGNtRGV2aWNlICpwY20sIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZmZlciwgaW50IGNvdW50KSB7CisgIGlmIChmaW5kUGNtRGV2aWNlQ2xhc3MocGNtLT5lbnYpKSB7CisgICAgc3RhdGljIGptZXRob2RJRCBtZXRob2QgPSAwOworCisgICAgaWYgKGZpbmRKYXZhSW5zdGFuY2VNZXRob2QocGNtLT5lbnYsICZtZXRob2QsIHBjbURldmljZUNsYXNzLCAid3JpdGUiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpBVkFfU0lHX01FVEhPRChKQVZBX1NJR19CT09MRUFOLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKQVZBX1NJR19BUlJBWShKQVZBX1NJR19TSE9SVCkgLy8gc2FtcGxlcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkpKSB7CisgICAgICBqaW50IHNpemUgPSBjb3VudCAvIDI7CisgICAgICBqc2hvcnRBcnJheSBqU2FtcGxlcyA9ICgqcGNtLT5lbnYpLT5OZXdTaG9ydEFycmF5KHBjbS0+ZW52LCBzaXplKTsKKworICAgICAgaWYgKGpTYW1wbGVzKSB7CisgICAgICAgIHR5cGVkZWYgdW5pb24geworICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ5dGVzOworICAgICAgICAgIGNvbnN0IGludDE2X3QgKmFjdHVhbDsKKyAgICAgICAgfSBTYW1wbGVzOworCisgICAgICAgIFNhbXBsZXMgc2FtcGxlcyA9IHsKKyAgICAgICAgICAuYnl0ZXMgPSBidWZmZXIKKyAgICAgICAgfTsKKworICAgICAgICAoKnBjbS0+ZW52KS0+U2V0U2hvcnRBcnJheVJlZ2lvbigKKyAgICAgICAgICBwY20tPmVudiwgalNhbXBsZXMsIDAsIHNpemUsIHNhbXBsZXMuYWN0dWFsCisgICAgICAgICk7CisKKyAgICAgICAgaWYgKCFjbGVhckphdmFFeGNlcHRpb24ocGNtLT5lbnYsIDEpKSB7CisgICAgICAgICAgamJvb2xlYW4gcmVzdWx0ID0gKCpwY20tPmVudiktPkNhbGxCb29sZWFuTWV0aG9kKAorICAgICAgICAgICAgcGNtLT5lbnYsIHBjbS0+ZGV2aWNlLCBtZXRob2QsIGpTYW1wbGVzCisgICAgICAgICAgKTsKKworICAgICAgICAgICgqcGNtLT5lbnYpLT5EZWxldGVMb2NhbFJlZihwY20tPmVudiwgalNhbXBsZXMpOworICAgICAgICAgIGpTYW1wbGVzID0gTlVMTDsKKworICAgICAgICAgIGlmICghY2xlYXJKYXZhRXhjZXB0aW9uKHBjbS0+ZW52LCAxKSkgeworICAgICAgICAgICAgaWYgKHJlc3VsdCA9PSBKTklfVFJVRSkgeworICAgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgIH0gZWxzZSB7CisgICAgICAgIGxvZ01hbGxvY0Vycm9yKCk7CisgICAgICAgIGNsZWFySmF2YUV4Y2VwdGlvbihwY20tPmVudiwgMCk7CisgICAgICB9CisgICAgfQorICB9CisKKyAgcmV0dXJuIDA7Cit9CisKK2ludAorZ2V0UGNtQmxvY2tTaXplIChQY21EZXZpY2UgKnBjbSkgeworICBpZiAoZmluZFBjbURldmljZUNsYXNzKHBjbS0+ZW52KSkgeworICAgIHN0YXRpYyBqbWV0aG9kSUQgbWV0aG9kID0gMDsKKworICAgIGlmIChmaW5kSmF2YUluc3RhbmNlTWV0aG9kKHBjbS0+ZW52LCAmbWV0aG9kLCBwY21EZXZpY2VDbGFzcywgImdldEJ1ZmZlclNpemUiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpBVkFfU0lHX01FVEhPRChKQVZBX1NJR19JTlQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSkpIHsKKyAgICAgIGppbnQgcmVzdWx0ID0gKCpwY20tPmVudiktPkNhbGxJbnRNZXRob2QocGNtLT5lbnYsIHBjbS0+ZGV2aWNlLCBtZXRob2QpOworICAgICAgaWYgKCFjbGVhckphdmFFeGNlcHRpb24ocGNtLT5lbnYsIDEpKSByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgfQorCisgIHJldHVybiAwWDEwMDsKK30KKworaW50CitnZXRQY21TYW1wbGVSYXRlIChQY21EZXZpY2UgKnBjbSkgeworICBpZiAoZmluZFBjbURldmljZUNsYXNzKHBjbS0+ZW52KSkgeworICAgIHN0YXRpYyBqbWV0aG9kSUQgbWV0aG9kID0gMDsKKworICAgIGlmIChmaW5kSmF2YUluc3RhbmNlTWV0aG9kKHBjbS0+ZW52LCAmbWV0aG9kLCBwY21EZXZpY2VDbGFzcywgImdldFNhbXBsZVJhdGUiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpBVkFfU0lHX01FVEhPRChKQVZBX1NJR19JTlQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSkpIHsKKyAgICAgIGppbnQgcmVzdWx0ID0gKCpwY20tPmVudiktPkNhbGxJbnRNZXRob2QocGNtLT5lbnYsIHBjbS0+ZGV2aWNlLCBtZXRob2QpOworICAgICAgaWYgKCFjbGVhckphdmFFeGNlcHRpb24ocGNtLT5lbnYsIDEpKSByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgfQorCisgIHJldHVybiA4MDAwOworfQorCitpbnQKK3NldFBjbVNhbXBsZVJhdGUgKFBjbURldmljZSAqcGNtLCBpbnQgcmF0ZSkgeworICBpZiAoZmluZFBjbURldmljZUNsYXNzKHBjbS0+ZW52KSkgeworICAgIHN0YXRpYyBqbWV0aG9kSUQgbWV0aG9kID0gMDsKKworICAgIGlmIChmaW5kSmF2YUluc3RhbmNlTWV0aG9kKHBjbS0+ZW52LCAmbWV0aG9kLCBwY21EZXZpY2VDbGFzcywgInNldFNhbXBsZVJhdGUiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpBVkFfU0lHX01FVEhPRChKQVZBX1NJR19WT0lELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKQVZBX1NJR19JTlQgLy8gcmF0ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkpKSB7CisgICAgICAoKnBjbS0+ZW52KS0+Q2FsbFZvaWRNZXRob2QocGNtLT5lbnYsIHBjbS0+ZGV2aWNlLCBtZXRob2QsIHJhdGUpOworICAgICAgY2xlYXJKYXZhRXhjZXB0aW9uKHBjbS0+ZW52LCAxKTsKKyAgICB9CisgIH0KKworICByZXR1cm4gZ2V0UGNtU2FtcGxlUmF0ZShwY20pOworfQorCitpbnQKK2dldFBjbUNoYW5uZWxDb3VudCAoUGNtRGV2aWNlICpwY20pIHsKKyAgaWYgKGZpbmRQY21EZXZpY2VDbGFzcyhwY20tPmVudikpIHsKKyAgICBzdGF0aWMgam1ldGhvZElEIG1ldGhvZCA9IDA7CisKKyAgICBpZiAoZmluZEphdmFJbnN0YW5jZU1ldGhvZChwY20tPmVudiwgJm1ldGhvZCwgcGNtRGV2aWNlQ2xhc3MsICJnZXRDaGFubmVsQ291bnQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpBVkFfU0lHX01FVEhPRChKQVZBX1NJR19JTlQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSkpIHsKKyAgICAgIGppbnQgcmVzdWx0ID0gKCpwY20tPmVudiktPkNhbGxJbnRNZXRob2QocGNtLT5lbnYsIHBjbS0+ZGV2aWNlLCBtZXRob2QpOworICAgICAgaWYgKCFjbGVhckphdmFFeGNlcHRpb24ocGNtLT5lbnYsIDEpKSByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgfQorCisgIHJldHVybiAxOworfQorCitpbnQKK3NldFBjbUNoYW5uZWxDb3VudCAoUGNtRGV2aWNlICpwY20sIGludCBjaGFubmVscykgeworICBpZiAoZmluZFBjbURldmljZUNsYXNzKHBjbS0+ZW52KSkgeworICAgIHN0YXRpYyBqbWV0aG9kSUQgbWV0aG9kID0gMDsKKworICAgIGlmIChmaW5kSmF2YUluc3RhbmNlTWV0aG9kKHBjbS0+ZW52LCAmbWV0aG9kLCBwY21EZXZpY2VDbGFzcywgInNldENoYW5uZWxDb3VudCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSkFWQV9TSUdfTUVUSE9EKEpBVkFfU0lHX1ZPSUQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpBVkFfU0lHX0lOVCAvLyBjb3VudAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkpKSB7CisgICAgICAoKnBjbS0+ZW52KS0+Q2FsbFZvaWRNZXRob2QocGNtLT5lbnYsIHBjbS0+ZGV2aWNlLCBtZXRob2QsIGNoYW5uZWxzKTsKKyAgICAgIGNsZWFySmF2YUV4Y2VwdGlvbihwY20tPmVudiwgMSk7CisgICAgfQorICB9CisKKyAgcmV0dXJuIGdldFBjbUNoYW5uZWxDb3VudChwY20pOworfQorCitQY21BbXBsaXR1ZGVGb3JtYXQKK2dldFBjbUFtcGxpdHVkZUZvcm1hdCAoUGNtRGV2aWNlICpwY20pIHsKKyAgcmV0dXJuIFBDTV9GTVRfUzE2TjsKK30KKworUGNtQW1wbGl0dWRlRm9ybWF0CitzZXRQY21BbXBsaXR1ZGVGb3JtYXQgKFBjbURldmljZSAqcGNtLCBQY21BbXBsaXR1ZGVGb3JtYXQgZm9ybWF0KSB7CisgIHJldHVybiBnZXRQY21BbXBsaXR1ZGVGb3JtYXQocGNtKTsKK30KKwordm9pZAorcHVzaFBjbU91dHB1dCAoUGNtRGV2aWNlICpwY20pIHsKKyAgaWYgKGZpbmRQY21EZXZpY2VDbGFzcyhwY20tPmVudikpIHsKKyAgICBzdGF0aWMgam1ldGhvZElEIG1ldGhvZCA9IDA7CisKKyAgICBpZiAoZmluZEphdmFJbnN0YW5jZU1ldGhvZChwY20tPmVudiwgJm1ldGhvZCwgcGNtRGV2aWNlQ2xhc3MsICJwdXNoIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKQVZBX1NJR19NRVRIT0QoSkFWQV9TSUdfVk9JRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApKSkgeworICAgICAgKCpwY20tPmVudiktPkNhbGxWb2lkTWV0aG9kKHBjbS0+ZW52LCBwY20tPmRldmljZSwgbWV0aG9kKTsKKyAgICAgIGNsZWFySmF2YUV4Y2VwdGlvbihwY20tPmVudiwgMSk7CisgICAgfQorICB9Cit9CisKK3ZvaWQKK2F3YWl0UGNtT3V0cHV0IChQY21EZXZpY2UgKnBjbSkgeworICBpZiAoZmluZFBjbURldmljZUNsYXNzKHBjbS0+ZW52KSkgeworICAgIHN0YXRpYyBqbWV0aG9kSUQgbWV0aG9kID0gMDsKKworICAgIGlmIChmaW5kSmF2YUluc3RhbmNlTWV0aG9kKHBjbS0+ZW52LCAmbWV0aG9kLCBwY21EZXZpY2VDbGFzcywgImF3YWl0IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKQVZBX1NJR19NRVRIT0QoSkFWQV9TSUdfVk9JRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApKSkgeworICAgICAgKCpwY20tPmVudiktPkNhbGxWb2lkTWV0aG9kKHBjbS0+ZW52LCBwY20tPmRldmljZSwgbWV0aG9kKTsKKyAgICAgIGNsZWFySmF2YUV4Y2VwdGlvbihwY20tPmVudiwgMSk7CisgICAgfQorICB9Cit9CisKK3ZvaWQKK2NhbmNlbFBjbU91dHB1dCAoUGNtRGV2aWNlICpwY20pIHsKKyAgaWYgKGZpbmRQY21EZXZpY2VDbGFzcyhwY20tPmVudikpIHsKKyAgICBzdGF0aWMgam1ldGhvZElEIG1ldGhvZCA9IDA7CisKKyAgICBpZiAoZmluZEphdmFJbnN0YW5jZU1ldGhvZChwY20tPmVudiwgJm1ldGhvZCwgcGNtRGV2aWNlQ2xhc3MsICJjYW5jZWwiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpBVkFfU0lHX01FVEhPRChKQVZBX1NJR19WT0lELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkpKSB7CisgICAgICAoKnBjbS0+ZW52KS0+Q2FsbFZvaWRNZXRob2QocGNtLT5lbnYsIHBjbS0+ZGV2aWNlLCBtZXRob2QpOworICAgICAgY2xlYXJKYXZhRXhjZXB0aW9uKHBjbS0+ZW52LCAxKTsKKyAgICB9CisgIH0KK30KZGlmZiAtLWdpdCBhL1Byb2dyYW1zL3BjbV9hdWRpby5jIGIvUHJvZ3JhbXMvcGNtX2F1ZGlvLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGRkZGVkYwotLS0gL2Rldi9udWxsCisrKyBiL1Byb2dyYW1zL3BjbV9hdWRpby5jCkBAIC0wLDAgKzEsMTg0IEBACisvKgorICogQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyAqICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyAqCisgKiBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorICoKKyAqIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyAqCisgKiBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisgKi8KKworI2luY2x1ZGUgInByb2xvZ3VlLmgiCisKKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVkZSA8c3lzL2F1ZGlvLmg+CisjaW5jbHVkZSA8c3Ryb3B0cy5oPgorCisjaW5jbHVkZSAibG9nLmgiCisjaW5jbHVkZSAiaW9fbWlzYy5oIgorI2luY2x1ZGUgInBjbS5oIgorCisjZGVmaW5lIFBDTV9BVURJT19ERVZJQ0VfUEFUSCAiL2Rldi9hdWRpbyIKKworc3RydWN0IFBjbURldmljZVN0cnVjdCB7CisgIGludCBmaWxlRGVzY3JpcHRvcjsKK307CisKK1BjbURldmljZSAqCitvcGVuUGNtRGV2aWNlIChpbnQgZXJyb3JMZXZlbCwgY29uc3QgY2hhciAqZGV2aWNlKSB7CisgIFBjbURldmljZSAqcGNtOworICBpZiAoKHBjbSA9IG1hbGxvYyhzaXplb2YoKnBjbSkpKSkgeworICAgIGlmICghKmRldmljZSkgZGV2aWNlID0gZ2V0ZW52KCJBVURJT0RFViIpOworICAgIGlmICghZGV2aWNlIHx8ICEqZGV2aWNlKSBkZXZpY2UgPSBQQ01fQVVESU9fREVWSUNFX1BBVEg7CisgICAgaWYgKChwY20tPmZpbGVEZXNjcmlwdG9yID0gb3BlbihkZXZpY2UsIE9fV1JPTkxZfE9fTk9OQkxPQ0spKSAhPSAtMSkgeworICAgICAgYXVkaW9faW5mb190IGluZm87CisgICAgICBBVURJT19JTklUSU5GTygmaW5mbyk7CisjaWZkZWYgQVVNT0RFX1BMQVkKKyAgICAgIGluZm8ubW9kZSA9IEFVTU9ERV9QTEFZOworI2VuZGlmIC8qIEFVTU9ERV9QTEFZICovCisjaWZkZWYgQVVESU9fRU5DT0RJTkdfU0xJTkVBUgorICAgICAgaW5mby5wbGF5LmVuY29kaW5nID0gQVVESU9fRU5DT0RJTkdfU0xJTkVBUjsKKyNlbHNlIC8qIEFVRElPX0VOQ09ESU5HX1NMSU5FQVIgKi8KKyAgICAgIGluZm8ucGxheS5lbmNvZGluZyA9IEFVRElPX0VOQ09ESU5HX0xJTkVBUjsKKyNlbmRpZiAvKiBBVURJT19FTkNPRElOR19TTElORUFSICovCisgICAgICBpbmZvLnBsYXkuc2FtcGxlX3JhdGUgPSAxNjAwMDsKKyAgICAgIGluZm8ucGxheS5jaGFubmVscyA9IDE7CisgICAgICBpbmZvLnBsYXkucHJlY2lzaW9uID0gMTY7CisgICAgICBpbmZvLnBsYXkuZ2FpbiA9IEFVRElPX01BWF9HQUlOOworICAgICAgaWYgKGlvY3RsKHBjbS0+ZmlsZURlc2NyaXB0b3IsIEFVRElPX1NFVElORk8sICZpbmZvKSA9PSAtMSkKKyAgICAgICAgbG9nTWVzc2FnZShlcnJvckxldmVsLCAiQ2Fubm90IHNldCBhdWRpbyBpbmZvOiAlcyIsIHN0cmVycm9yKGVycm5vKSk7CisgICAgICByZXR1cm4gcGNtOworICAgIH0gZWxzZSB7CisgICAgICBsb2dNZXNzYWdlKGVycm9yTGV2ZWwsICJDYW5ub3Qgb3BlbiBQQ00gZGV2aWNlOiAlczogJXMiLCBkZXZpY2UsIHN0cmVycm9yKGVycm5vKSk7CisgICAgfQorICAgIGZyZWUocGNtKTsKKyAgfSBlbHNlIHsKKyAgICBsb2dTeXN0ZW1FcnJvcigiUENNIGRldmljZSBhbGxvY2F0aW9uIik7CisgIH0KKyAgcmV0dXJuIE5VTEw7Cit9CisKK3ZvaWQKK2Nsb3NlUGNtRGV2aWNlIChQY21EZXZpY2UgKnBjbSkgeworICBjbG9zZShwY20tPmZpbGVEZXNjcmlwdG9yKTsKKyAgZnJlZShwY20pOworfQorCitpbnQKK3dyaXRlUGNtRGF0YSAoUGNtRGV2aWNlICpwY20sIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZmZlciwgaW50IGNvdW50KSB7CisgIHJldHVybiB3cml0ZUZpbGUocGNtLT5maWxlRGVzY3JpcHRvciwgYnVmZmVyLCBjb3VudCkgIT0gLTE7Cit9CisKK3N0YXRpYyBpbnQKK2dldFBjbUF1ZGlvSW5mbyAoUGNtRGV2aWNlICpwY20sIGF1ZGlvX2luZm9fdCAqaW5mbykgeworICBpZiAoaW9jdGwocGNtLT5maWxlRGVzY3JpcHRvciwgQVVESU9fR0VUSU5GTywgaW5mbykgIT0gLTEpIHJldHVybiAxOworICBsb2dTeXN0ZW1FcnJvcigiQVVESU9fR0VUSU5GTyIpOworICByZXR1cm4gMDsKK30KKworaW50CitnZXRQY21CbG9ja1NpemUgKFBjbURldmljZSAqcGNtKSB7CisgIGF1ZGlvX2luZm9fdCBpbmZvOworICBpZiAoZ2V0UGNtQXVkaW9JbmZvKHBjbSwgJmluZm8pKSByZXR1cm4gKGluZm8ucGxheS5wcmVjaXNpb24gLyA4ICogaW5mby5wbGF5LmNoYW5uZWxzKSAqIDBYNDAwOworICByZXR1cm4gMFgxMDA7Cit9CisKK2ludAorZ2V0UGNtU2FtcGxlUmF0ZSAoUGNtRGV2aWNlICpwY20pIHsKKyAgYXVkaW9faW5mb190IGluZm87CisgIGlmIChnZXRQY21BdWRpb0luZm8ocGNtLCAmaW5mbykpIHJldHVybiBpbmZvLnBsYXkuc2FtcGxlX3JhdGU7CisgIHJldHVybiA4MDAwOworfQorCitpbnQKK3NldFBjbVNhbXBsZVJhdGUgKFBjbURldmljZSAqcGNtLCBpbnQgcmF0ZSkgeworICByZXR1cm4gZ2V0UGNtU2FtcGxlUmF0ZShwY20pOworfQorCitpbnQKK2dldFBjbUNoYW5uZWxDb3VudCAoUGNtRGV2aWNlICpwY20pIHsKKyAgYXVkaW9faW5mb190IGluZm87CisgIGlmIChnZXRQY21BdWRpb0luZm8ocGNtLCAmaW5mbykpIHJldHVybiBpbmZvLnBsYXkuY2hhbm5lbHM7CisgIHJldHVybiAxOworfQorCitpbnQKK3NldFBjbUNoYW5uZWxDb3VudCAoUGNtRGV2aWNlICpwY20sIGludCBjaGFubmVscykgeworICByZXR1cm4gZ2V0UGNtQ2hhbm5lbENvdW50KHBjbSk7Cit9CisKK1BjbUFtcGxpdHVkZUZvcm1hdAorZ2V0UGNtQW1wbGl0dWRlRm9ybWF0IChQY21EZXZpY2UgKnBjbSkgeworICBhdWRpb19pbmZvX3QgaW5mbzsKKyAgaWYgKGdldFBjbUF1ZGlvSW5mbyhwY20sICZpbmZvKSkgeworICAgIHN3aXRjaCAoaW5mby5wbGF5LmVuY29kaW5nKSB7CisgICAgICBkZWZhdWx0OgorICAgICAgICBicmVhazsKKworI2lmZGVmIEFVRElPX0VOQ09ESU5HX1NMSU5FQVJfQkUKKyAgICAgIGNhc2UgQVVESU9fRU5DT0RJTkdfU0xJTkVBUl9CRToKKyAgICAgICAgaWYgKGluZm8ucGxheS5wcmVjaXNpb24gPT0gMTYpIHJldHVybiBQQ01fRk1UX1MxNkI7CisgICAgICAgIGdvdG8gdGVzdExpbmVhclNpZ25lZDg7CisjZW5kaWYgLyogQVVESU9fRU5DT0RJTkdfU0xJTkVBUl9CRSAqLworCisjaWZkZWYgQVVESU9fRU5DT0RJTkdfU0xJTkVBUl9MRQorICAgICAgY2FzZSBBVURJT19FTkNPRElOR19TTElORUFSX0xFOgorICAgICAgICBpZiAoaW5mby5wbGF5LnByZWNpc2lvbiA9PSAxNikgcmV0dXJuIFBDTV9GTVRfUzE2TDsKKyAgICAgICAgZ290byB0ZXN0TGluZWFyU2lnbmVkODsKKyNlbmRpZiAvKiBBVURJT19FTkNPRElOR19TTElORUFSX0xFICovCisKKyNpZmRlZiBBVURJT19FTkNPRElOR19MSU5FQVIKKyAgICAgIGNhc2UgQVVESU9fRU5DT0RJTkdfTElORUFSOgorI2lmZGVmIFdPUkRTX0JJR0VORElBTgorICAgICAgICBpZiAoaW5mby5wbGF5LnByZWNpc2lvbiA9PSAxNikgcmV0dXJuIFBDTV9GTVRfUzE2QjsKKyNlbHNlIC8qIFdPUkRTX0JJR0VORElBTiAqLworICAgICAgICBpZiAoaW5mby5wbGF5LnByZWNpc2lvbiA9PSAxNikgcmV0dXJuIFBDTV9GTVRfUzE2TDsKKyNlbmRpZiAvKiBXT1JEU19CSUdFTkRJQU4gKi8KKyAgICAgICAgZ290byB0ZXN0TGluZWFyU2lnbmVkODsKKyNlbmRpZiAvKiBBVURJT19FTkNPRElOR19MSU5FQVIgKi8KKworICAgICAgdGVzdExpbmVhclNpZ25lZDg6CisgICAgICAgIGlmIChpbmZvLnBsYXkucHJlY2lzaW9uID09IDgpIHJldHVybiBQQ01fRk1UX1M4OworICAgICAgICBicmVhazsKKworICAgICAgY2FzZSBBVURJT19FTkNPRElOR19MSU5FQVI4OgorICAgICAgICByZXR1cm4gUENNX0ZNVF9VODsKKworICAgICAgY2FzZSBBVURJT19FTkNPRElOR19VTEFXOgorICAgICAgICByZXR1cm4gUENNX0ZNVF9VTEFXOworCisgICAgICBjYXNlIEFVRElPX0VOQ09ESU5HX0FMQVc6CisgICAgICAgIHJldHVybiBQQ01fRk1UX0FMQVc7CisgICAgfQorICB9CisgIHJldHVybiBQQ01fRk1UX1VOS05PV047Cit9CisKK1BjbUFtcGxpdHVkZUZvcm1hdAorc2V0UGNtQW1wbGl0dWRlRm9ybWF0IChQY21EZXZpY2UgKnBjbSwgUGNtQW1wbGl0dWRlRm9ybWF0IGZvcm1hdCkgeworICByZXR1cm4gZ2V0UGNtQW1wbGl0dWRlRm9ybWF0KHBjbSk7Cit9CisKK3ZvaWQKK3B1c2hQY21PdXRwdXQgKFBjbURldmljZSAqcGNtKSB7Cit9CisKK3ZvaWQKK2F3YWl0UGNtT3V0cHV0IChQY21EZXZpY2UgKnBjbSkgeworICBpb2N0bChwY20tPmZpbGVEZXNjcmlwdG9yLCBBVURJT19EUkFJTik7Cit9CisKK3ZvaWQKK2NhbmNlbFBjbU91dHB1dCAoUGNtRGV2aWNlICpwY20pIHsKKyAgaW9jdGwocGNtLT5maWxlRGVzY3JpcHRvciwgSV9GTFVTSCk7Cit9CmRpZmYgLS1naXQgYS9Qcm9ncmFtcy9wY21faHB1eC5jIGIvUHJvZ3JhbXMvcGNtX2hwdXguYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOTQwMzg4Ci0tLSAvZGV2L251bGwKKysrIGIvUHJvZ3JhbXMvcGNtX2hwdXguYwpAQCAtMCwwICsxLDE5MiBAQAorLyoKKyAqIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisgKiAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisgKgorICogQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKKyNpbmNsdWRlICJwcm9sb2d1ZS5oIgorCisjaWZkZWYgSEFWRV9IUFVYX0FVRElPCisjaW5jbHVkZSA8QWxpYi5oPgorI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyNpbmNsdWRlIDxuZXRpbmV0L2luLmg+CisjZW5kaWYgLyogSEFWRV9IUFVYX0FVRElPICovCisKKyNpbmNsdWRlICJsb2cuaCIKKyNpbmNsdWRlICJwY20uaCIKKworI2lmZGVmIEhBVkVfSFBVWF9BVURJTworc3RhdGljIEF1ZGlvICphdWRpb1NlcnZlciA9IE5VTEw7CisKK3N0cnVjdCBQY21EZXZpY2VTdHJ1Y3QgeworICBBVHJhbnNJRCB0cmFuc2FjdGlvbjsKKyAgU1N0cmVhbSBzdHJlYW07CisgIGludCBzb2NrZXQ7Cit9OworCitzdGF0aWMgdm9pZAorbG9nQXVkaW9FcnJvciAoaW50IGxldmVsLCBsb25nIHN0YXR1cywgY29uc3QgY2hhciAqYWN0aW9uKSB7CisgIGNoYXIgbWVzc2FnZVsxMzJdOworICBBR2V0RXJyb3JUZXh0KGF1ZGlvU2VydmVyLCBzdGF0dXMsIG1lc3NhZ2UsIHNpemVvZihtZXNzYWdlKS0xKTsKKyAgbG9nTWVzc2FnZShsZXZlbCwgIiVzIGVycm9yICVsZDogJXMiLCBhY3Rpb24sIHN0YXR1cywgbWVzc2FnZSk7Cit9CisKK3N0YXRpYyBjb25zdCBBdWRpb0F0dHJpYnV0ZXMgKgorZ2V0QXVkaW9BdHRyaWJ1dGVzIChQY21EZXZpY2UgKnBjbSkgeworICByZXR1cm4gJnBjbS0+c3RyZWFtLmF1ZGlvX2F0dHI7Cit9CisjZW5kaWYgLyogSEFWRV9IUFVYX0FVRElPICovCisKK1BjbURldmljZSAqCitvcGVuUGNtRGV2aWNlIChpbnQgZXJyb3JMZXZlbCwgY29uc3QgY2hhciAqZGV2aWNlKSB7CisjaWZkZWYgSEFWRV9IUFVYX0FVRElPCisgIFBjbURldmljZSAqcGNtOworICBpZiAoKHBjbSA9IG1hbGxvYyhzaXplb2YoKnBjbSkpKSkgeworICAgIGxvbmcgc3RhdHVzOworICAgIEF1ZGlvQXR0ck1hc2sgbWFzayA9IDA7CisgICAgQXVkaW9BdHRyaWJ1dGVzIGF0dHJpYnV0ZXM7CisgICAgU1NQbGF5UGFyYW1zIHBhcmFtZXRlcnM7CisgIAorICAgIGlmICghYXVkaW9TZXJ2ZXIpIHsKKyAgICAgIGNoYXIgKnNlcnZlciA9ICIiOworICAgICAgYXVkaW9TZXJ2ZXIgPSBBT3BlbkF1ZGlvKHNlcnZlciwgJnN0YXR1cyk7CisgICAgICBpZiAoc3RhdHVzICE9IEFFTm9FcnJvcikgeworICAgICAgICBsb2dBdWRpb0Vycm9yKGVycm9yTGV2ZWwsIHN0YXR1cywgIkFPcGVuQXVkaW8iKTsKKyAgICAgICAgYXVkaW9TZXJ2ZXIgPSBOVUxMOworICAgICAgICBnb3RvIG5vU2VydmVyOworICAgICAgfQorICAgICAgbG9nTWVzc2FnZShMT0dfREVCVUcsICJjb25uZWN0ZWQgdG8gYXVkaW8gc2VydmVyOiAlcyIsIEFBdWRpb1N0cmluZyhhdWRpb1NlcnZlcikpOworICAKKyAgICAgIEFTZXRDbG9zZURvd25Nb2RlKGF1ZGlvU2VydmVyLCBBS2VlcFRyYW5zYWN0aW9ucywgJnN0YXR1cyk7CisgICAgICBpZiAoc3RhdHVzICE9IEFFTm9FcnJvcikgeworICAgICAgICBsb2dBdWRpb0Vycm9yKGVycm9yTGV2ZWwsIHN0YXR1cywgIkFTZXRDbG9zZURvd25Nb2RlIik7CisgICAgICB9CisgICAgfQorICAKKyAgICBtZW1zZXQoJmF0dHJpYnV0ZXMsIDAsIHNpemVvZihhdHRyaWJ1dGVzKSk7CisgIAorICAgIHBhcmFtZXRlcnMuZ2Fpbl9tYXRyaXggPSAqQVNpbXBsZVBsYXllcihhdWRpb1NlcnZlcik7CisgICAgcGFyYW1ldGVycy5wbGF5X3ZvbHVtZSA9IEFVbml0eUdhaW47CisgICAgcGFyYW1ldGVycy5wcmlvcml0eSA9IEFQcmlvcml0eVVyZ2VudDsKKyAgICBwYXJhbWV0ZXJzLmV2ZW50X21hc2sgPSAwOworICAKKyAgICBwY20tPnRyYW5zYWN0aW9uID0gQVBsYXlTU3RyZWFtKGF1ZGlvU2VydmVyLCBtYXNrLCAmYXR0cmlidXRlcywgJnBhcmFtZXRlcnMsICZwY20tPnN0cmVhbSwgJnN0YXR1cyk7CisgICAgaWYgKHN0YXR1cyA9PSBBRU5vRXJyb3IpIHsKKyAgICAgIGlmICgocGNtLT5zb2NrZXQgPSBzb2NrZXQoQUZfSU5FVCwgU09DS19TVFJFQU0sIDApKSAhPSAtMSkgeworICAgICAgICBpZiAoY29ubmVjdChwY20tPnNvY2tldCwgKHN0cnVjdCBzb2NrYWRkciAqKSZwY20tPnN0cmVhbS50Y3Bfc29ja2FkZHIsIHNpemVvZihwY20tPnN0cmVhbS50Y3Bfc29ja2FkZHIpKSAhPSAtMSkgeworICAgICAgICAgIHJldHVybiBwY207CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgbG9nU3lzdGVtRXJyb3IoIlBDTSBzb2NrZXQgY29ubmVjdGlvbiIpOworICAgICAgICB9CisgICAgICAgIGNsb3NlKHBjbS0+c29ja2V0KTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIGxvZ1N5c3RlbUVycm9yKCJQQ00gc29ja2V0IGNyZWF0aW9uIik7CisgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgIGxvZ0F1ZGlvRXJyb3IoZXJyb3JMZXZlbCwgc3RhdHVzLCAiQVBsYXlTU3RyZWFtIik7CisgICAgfQorCisgIG5vU2VydmVyOgorICAgIGZyZWUocGNtKTsKKyAgfSBlbHNlIHsKKyAgICBsb2dTeXN0ZW1FcnJvcigiUENNIGRldmljZSBhbGxvY2F0aW9uIik7CisgIH0KKyNlbmRpZiAvKiBIQVZFX0hQVVhfQVVESU8gKi8KKyAgcmV0dXJuIE5VTEw7Cit9CisKK3ZvaWQKK2Nsb3NlUGNtRGV2aWNlIChQY21EZXZpY2UgKnBjbSkgeworICBjbG9zZShwY20tPnNvY2tldCk7CisgIGZyZWUocGNtKTsKK30KKworaW50Cit3cml0ZVBjbURhdGEgKFBjbURldmljZSAqcGNtLCBjb25zdCB1bnNpZ25lZCBjaGFyICpidWZmZXIsIGludCBjb3VudCkgeworICByZXR1cm4gc2FmZV93cml0ZShwY20tPnNvY2tldCwgYnVmZmVyLCBjb3VudCkgIT0gLTE7Cit9CisKK2ludAorZ2V0UGNtQmxvY2tTaXplIChQY21EZXZpY2UgKnBjbSkgeworICBpbnQgc2l6ZSA9IDBYMTAwOworI2lmZGVmIEhBVkVfSFBVWF9BVURJTworICBzaXplID0gTUlOKHNpemUsIHBjbS0+c3RyZWFtLm1heF9ibG9ja19zaXplKTsKKyNlbmRpZiAvKiBIQVZFX0hQVVhfQVVESU8gKi8KKyAgcmV0dXJuIHNpemU7Cit9CisKK2ludAorZ2V0UGNtU2FtcGxlUmF0ZSAoUGNtRGV2aWNlICpwY20pIHsKKyNpZmRlZiBIQVZFX0hQVVhfQVVESU8KKyAgcmV0dXJuIGdldEF1ZGlvQXR0cmlidXRlcyhwY20pLT5hdHRyLnNhbXBsZWRfYXR0ci5zYW1wbGluZ19yYXRlOworI2Vsc2UgLyogSEFWRV9IUFVYX0FVRElPICovCisgIHJldHVybiA4MDAwOworI2VuZGlmIC8qIEhBVkVfSFBVWF9BVURJTyAqLworfQorCitpbnQKK3NldFBjbVNhbXBsZVJhdGUgKFBjbURldmljZSAqcGNtLCBpbnQgcmF0ZSkgeworICByZXR1cm4gZ2V0UGNtU2FtcGxlUmF0ZShwY20pOworfQorCitpbnQKK2dldFBjbUNoYW5uZWxDb3VudCAoUGNtRGV2aWNlICpwY20pIHsKKyNpZmRlZiBIQVZFX0hQVVhfQVVESU8KKyAgcmV0dXJuIGdldEF1ZGlvQXR0cmlidXRlcyhwY20pLT5hdHRyLnNhbXBsZWRfYXR0ci5jaGFubmVsczsKKyNlbHNlIC8qIEhBVkVfSFBVWF9BVURJTyAqLworICByZXR1cm4gMTsKKyNlbmRpZiAvKiBIQVZFX0hQVVhfQVVESU8gKi8KK30KKworaW50CitzZXRQY21DaGFubmVsQ291bnQgKFBjbURldmljZSAqcGNtLCBpbnQgY2hhbm5lbHMpIHsKKyAgcmV0dXJuIGdldFBjbUNoYW5uZWxDb3VudChwY20pOworfQorCitQY21BbXBsaXR1ZGVGb3JtYXQKK2dldFBjbUFtcGxpdHVkZUZvcm1hdCAoUGNtRGV2aWNlICpwY20pIHsKKyNpZmRlZiBIQVZFX0hQVVhfQVVESU8KKyAgc3dpdGNoIChnZXRBdWRpb0F0dHJpYnV0ZXMocGNtKS0+YXR0ci5zYW1wbGVkX2F0dHIuZGF0YV9mb3JtYXQpIHsKKyAgICBkZWZhdWx0OgorICAgICAgYnJlYWs7CisgICAgY2FzZSBBREZMaW44OgorICAgICAgcmV0dXJuIFBDTV9GTVRfUzg7CisgICAgY2FzZSBBREZMaW44T2Zmc2V0OgorICAgICAgcmV0dXJuIFBDTV9GTVRfVTg7CisgICAgY2FzZSBBREZMaW4xNjoKKyAgICAgIHJldHVybiBQQ01fRk1UX1MxNkI7CisgICAgY2FzZSBBREZNdUxhdzoKKyAgICAgIHJldHVybiBQQ01fRk1UX1VMQVc7CisgIH0KKyNlbmRpZiAvKiBIQVZFX0hQVVhfQVVESU8gKi8KKyAgcmV0dXJuIFBDTV9GTVRfVU5LTk9XTjsKK30KKworUGNtQW1wbGl0dWRlRm9ybWF0CitzZXRQY21BbXBsaXR1ZGVGb3JtYXQgKFBjbURldmljZSAqcGNtLCBQY21BbXBsaXR1ZGVGb3JtYXQgZm9ybWF0KSB7CisgIHJldHVybiBnZXRQY21BbXBsaXR1ZGVGb3JtYXQocGNtKTsKK30KKwordm9pZAorcHVzaFBjbU91dHB1dCAoUGNtRGV2aWNlICpwY20pIHsKK30KKwordm9pZAorYXdhaXRQY21PdXRwdXQgKFBjbURldmljZSAqcGNtKSB7Cit9CisKK3ZvaWQKK2NhbmNlbFBjbU91dHB1dCAoUGNtRGV2aWNlICpwY20pIHsKK30KZGlmZiAtLWdpdCBhL1Byb2dyYW1zL3BjbV9ub25lLmMgYi9Qcm9ncmFtcy9wY21fbm9uZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJlNDE1NmUKLS0tIC9kZXYvbnVsbAorKysgYi9Qcm9ncmFtcy9wY21fbm9uZS5jCkBAIC0wLDAgKzEsODQgQEAKKy8qCisgKiBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorICogICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorICoKKyAqIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorICoKKyAqIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyAqLworCisjaW5jbHVkZSAicHJvbG9ndWUuaCIKKworI2luY2x1ZGUgImxvZy5oIgorI2luY2x1ZGUgInBjbS5oIgorCitQY21EZXZpY2UgKgorb3BlblBjbURldmljZSAoaW50IGVycm9yTGV2ZWwsIGNvbnN0IGNoYXIgKmRldmljZSkgeworICBsb2dNZXNzYWdlKGVycm9yTGV2ZWwsICJQQ00gZGV2aWNlIG5vdCBzdXBwb3J0ZWQuIik7CisgIHJldHVybiBOVUxMOworfQorCit2b2lkCitjbG9zZVBjbURldmljZSAoUGNtRGV2aWNlICpwY20pIHsKK30KKworaW50Cit3cml0ZVBjbURhdGEgKFBjbURldmljZSAqcGNtLCBjb25zdCB1bnNpZ25lZCBjaGFyICpidWZmZXIsIGludCBjb3VudCkgeworICByZXR1cm4gMDsKK30KKworaW50CitnZXRQY21CbG9ja1NpemUgKFBjbURldmljZSAqcGNtKSB7CisgIHJldHVybiAwWDEwMDsKK30KKworaW50CitnZXRQY21TYW1wbGVSYXRlIChQY21EZXZpY2UgKnBjbSkgeworICByZXR1cm4gODAwMDsKK30KKworaW50CitzZXRQY21TYW1wbGVSYXRlIChQY21EZXZpY2UgKnBjbSwgaW50IHJhdGUpIHsKKyAgcmV0dXJuIGdldFBjbVNhbXBsZVJhdGUocGNtKTsKK30KKworaW50CitnZXRQY21DaGFubmVsQ291bnQgKFBjbURldmljZSAqcGNtKSB7CisgIHJldHVybiAxOworfQorCitpbnQKK3NldFBjbUNoYW5uZWxDb3VudCAoUGNtRGV2aWNlICpwY20sIGludCBjaGFubmVscykgeworICByZXR1cm4gZ2V0UGNtQ2hhbm5lbENvdW50KHBjbSk7Cit9CisKK1BjbUFtcGxpdHVkZUZvcm1hdAorZ2V0UGNtQW1wbGl0dWRlRm9ybWF0IChQY21EZXZpY2UgKnBjbSkgeworICByZXR1cm4gUENNX0ZNVF9VTktOT1dOOworfQorCitQY21BbXBsaXR1ZGVGb3JtYXQKK3NldFBjbUFtcGxpdHVkZUZvcm1hdCAoUGNtRGV2aWNlICpwY20sIFBjbUFtcGxpdHVkZUZvcm1hdCBmb3JtYXQpIHsKKyAgcmV0dXJuIGdldFBjbUFtcGxpdHVkZUZvcm1hdChwY20pOworfQorCit2b2lkCitwdXNoUGNtT3V0cHV0IChQY21EZXZpY2UgKnBjbSkgeworfQorCit2b2lkCithd2FpdFBjbU91dHB1dCAoUGNtRGV2aWNlICpwY20pIHsKK30KKwordm9pZAorY2FuY2VsUGNtT3V0cHV0IChQY21EZXZpY2UgKnBjbSkgeworfQpkaWZmIC0tZ2l0IGEvUHJvZ3JhbXMvcGNtX29zcy5jIGIvUHJvZ3JhbXMvcGNtX29zcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI5ZWVkMTIKLS0tIC9kZXYvbnVsbAorKysgYi9Qcm9ncmFtcy9wY21fb3NzLmMKQEAgLTAsMCArMSwxODYgQEAKKy8qCisgKiBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorICogICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorICoKKyAqIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorICoKKyAqIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyAqLworCisjaW5jbHVkZSAicHJvbG9ndWUuaCIKKworI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKyNpbmNsdWRlIDxmY250bC5oPgorI2luY2x1ZGUgPHN5cy9pb2N0bC5oPgorI2luY2x1ZGUgPHN5cy9zb3VuZGNhcmQuaD4KKworI2luY2x1ZGUgImxvZy5oIgorI2luY2x1ZGUgImlvX21pc2MuaCIKKyNpbmNsdWRlICJwY20uaCIKKworI2RlZmluZSBQQ01fT1NTX0RFVklDRV9QQVRIICIvZGV2L2RzcCIKKworI2lmbmRlZiBTTkRDVExfRFNQX1NQRUVECisjZGVmaW5lIFNORENUTF9EU1BfU1BFRUQgU09VTkRfUENNX1dSSVRFX1JBVEUKKyNlbmRpZiAvKiBTTkRDVExfRFNQX1NQRUVEICovCisKKyNpZm5kZWYgU05EQ1RMX0RTUF9DSEFOTkVMUworI2RlZmluZSBTTkRDVExfRFNQX0NIQU5ORUxTIFNPVU5EX1BDTV9XUklURV9DSEFOTkVMUworI2VuZGlmIC8qIFNORENUTF9EU1BfQ0hBTk5FTFMgKi8KKworc3RydWN0IFBjbURldmljZVN0cnVjdCB7CisgIGludCBmaWxlRGVzY3JpcHRvcjsKKyAgaW50IGRyaXZlclZlcnNpb247CisgIGludCBzYW1wbGVSYXRlOworICBpbnQgY2hhbm5lbENvdW50OworfTsKKworUGNtRGV2aWNlICoKK29wZW5QY21EZXZpY2UgKGludCBlcnJvckxldmVsLCBjb25zdCBjaGFyICpkZXZpY2UpIHsKKyAgUGNtRGV2aWNlICpwY207CisgIGlmICgocGNtID0gbWFsbG9jKHNpemVvZigqcGNtKSkpKSB7CisgICAgaWYgKCEqZGV2aWNlKSBkZXZpY2UgPSBQQ01fT1NTX0RFVklDRV9QQVRIOworICAgIGlmICgocGNtLT5maWxlRGVzY3JpcHRvciA9IG9wZW4oZGV2aWNlLCBPX1dST05MWXxPX05PTkJMT0NLKSkgIT0gLTEpIHsKKyAgICAgIC8qIE5vbmJsb2NraW5nIGlmIHNuZF9zZXFfb3NzIGlzIGxvYWRlZCB3aXRoIG5vbmJsb2NrX29wZW49MS4KKyAgICAgICAqIFRoZXJlIGFwcGVhcnMgdG8gYmUgYSBidWcgaW4gdGhpcyBjYXNlIGFzIHdyaXRlKCkgYWx3YXlzCisgICAgICAgKiByZXR1cm5zIHRoZSBmdWxsIGNvdW50IGV2ZW4gdGhvdWdoIGxhcmdlIGNodW5rcyBvZiBzb3VuZCBhcmUKKyAgICAgICAqIG1pc3NpbmcuIEZvciBub3csIHRoZXJlZm9yZSwgZm9yY2UgYmxvY2tpbmcgb3V0cHV0LgorICAgICAgICovCisgICAgICBzZXRCbG9ja2luZ0lvKHBjbS0+ZmlsZURlc2NyaXB0b3IsIDEpOworCisgICAgICBwY20tPmRyaXZlclZlcnNpb24gPSAwWDAzMDAwMDsKKyNpZmRlZiBPU1NfR0VUVkVSU0lPTgorICAgICAgaWYgKGlvY3RsKHBjbS0+ZmlsZURlc2NyaXB0b3IsIE9TU19HRVRWRVJTSU9OLCAmcGNtLT5kcml2ZXJWZXJzaW9uKSA9PSAtMSkKKyAgICAgICAgbG9nTWVzc2FnZShlcnJvckxldmVsLCAiY2Fubm90IGdldCBPU1MgZHJpdmVyIHZlcnNpb24iKTsKKyNlbmRpZiAvKiBPU1NfR0VUVkVSU0lPTiAqLworICAgICAgbG9nTWVzc2FnZShMT0dfREVCVUcsICJPUFNTIGRyaXZlciB2ZXJzaW9uOiAlMDZYIiwgcGNtLT5kcml2ZXJWZXJzaW9uKTsKKworICAgICAgc2V0UGNtU2FtcGxlUmF0ZShwY20sIDgwMDApOworICAgICAgc2V0UGNtQ2hhbm5lbENvdW50KHBjbSwgMSk7CisgICAgICByZXR1cm4gcGNtOworICAgIH0gZWxzZSB7CisgICAgICBsb2dNZXNzYWdlKGVycm9yTGV2ZWwsICJjYW5ub3Qgb3BlbiBQQ00gZGV2aWNlOiAlczogJXMiLCBkZXZpY2UsIHN0cmVycm9yKGVycm5vKSk7CisgICAgfQorICAgIGZyZWUocGNtKTsKKyAgfSBlbHNlIHsKKyAgICBsb2dTeXN0ZW1FcnJvcigiUENNIGRldmljZSBhbGxvY2F0aW9uIik7CisgIH0KKyAgcmV0dXJuIE5VTEw7Cit9CisKK3ZvaWQKK2Nsb3NlUGNtRGV2aWNlIChQY21EZXZpY2UgKnBjbSkgeworICBjbG9zZShwY20tPmZpbGVEZXNjcmlwdG9yKTsKKyAgZnJlZShwY20pOworfQorCitpbnQKK3dyaXRlUGNtRGF0YSAoUGNtRGV2aWNlICpwY20sIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZmZlciwgaW50IGNvdW50KSB7CisgIHJldHVybiB3cml0ZUZpbGUocGNtLT5maWxlRGVzY3JpcHRvciwgYnVmZmVyLCBjb3VudCkgIT0gLTE7Cit9CisKK2ludAorZ2V0UGNtQmxvY2tTaXplIChQY21EZXZpY2UgKnBjbSkgeworICBpbnQgZnJhZ21lbnRDb3VudCA9ICgxIDw8IDBYMTApIC0gMTsKKyAgaW50IGZyYWdtZW50U2hpZnQgPSA3OworICBpbnQgZnJhZ21lbnRTaXplID0gMSA8PCBmcmFnbWVudFNoaWZ0OworICBpbnQgZnJhZ21lbnRTZXR0aW5nID0gKGZyYWdtZW50Q291bnQgPDwgMFgxMCkgfCBmcmFnbWVudFNoaWZ0OworICBpb2N0bChwY20tPmZpbGVEZXNjcmlwdG9yLCBTTkRDVExfRFNQX1NFVEZSQUdNRU5ULCAmZnJhZ21lbnRTZXR0aW5nKTsKKworICB7CisgICAgaW50IGJsb2NrU2l6ZTsKKyAgICBpZiAoaW9jdGwocGNtLT5maWxlRGVzY3JpcHRvciwgU05EQ1RMX0RTUF9HRVRCTEtTSVpFLCAmYmxvY2tTaXplKSAhPSAtMSkgcmV0dXJuIGJsb2NrU2l6ZTsKKyAgfQorICByZXR1cm4gZnJhZ21lbnRTaXplOworfQorCitpbnQKK2dldFBjbVNhbXBsZVJhdGUgKFBjbURldmljZSAqcGNtKSB7CisgIHJldHVybiBwY20tPnNhbXBsZVJhdGU7Cit9CisKK2ludAorc2V0UGNtU2FtcGxlUmF0ZSAoUGNtRGV2aWNlICpwY20sIGludCByYXRlKSB7CisgIGlmIChpb2N0bChwY20tPmZpbGVEZXNjcmlwdG9yLCBTTkRDVExfRFNQX1NQRUVELCAmcmF0ZSkgIT0gLTEpIHBjbS0+c2FtcGxlUmF0ZSA9IHJhdGU7CisgIHJldHVybiBnZXRQY21TYW1wbGVSYXRlKHBjbSk7Cit9CisKK2ludAorZ2V0UGNtQ2hhbm5lbENvdW50IChQY21EZXZpY2UgKnBjbSkgeworICByZXR1cm4gcGNtLT5jaGFubmVsQ291bnQ7Cit9CisKK2ludAorc2V0UGNtQ2hhbm5lbENvdW50IChQY21EZXZpY2UgKnBjbSwgaW50IGNoYW5uZWxzKSB7CisgIGlmIChpb2N0bChwY20tPmZpbGVEZXNjcmlwdG9yLCBTTkRDVExfRFNQX0NIQU5ORUxTLCAmY2hhbm5lbHMpICE9IC0xKSBwY20tPmNoYW5uZWxDb3VudCA9IGNoYW5uZWxzOworICByZXR1cm4gZ2V0UGNtQ2hhbm5lbENvdW50KHBjbSk7Cit9CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgUGNtQW1wbGl0dWRlRm9ybWF0IGludGVybmFsOworICBpbnQgZXh0ZXJuYWw7Cit9IEFtcGxpdHVkZUZvcm1hdEVudHJ5Oworc3RhdGljIGNvbnN0IEFtcGxpdHVkZUZvcm1hdEVudHJ5IGFtcGxpdHVkZUZvcm1hdFRhYmxlW10gPSB7CisgIHtQQ01fRk1UX1U4ICAgICAsIEFGTVRfVTggICAgfSwKKyAge1BDTV9GTVRfUzggICAgICwgQUZNVF9TOCAgICB9LAorICB7UENNX0ZNVF9VMTZCICAgLCBBRk1UX1UxNl9CRX0sCisgIHtQQ01fRk1UX1MxNkIgICAsIEFGTVRfUzE2X0JFfSwKKyAge1BDTV9GTVRfVTE2TCAgICwgQUZNVF9VMTZfTEV9LAorICB7UENNX0ZNVF9TMTZMICAgLCBBRk1UX1MxNl9MRX0sCisgIHtQQ01fRk1UX1VMQVcgICAsIEFGTVRfTVVfTEFXfSwKKyAge1BDTV9GTVRfQUxBVyAgICwgQUZNVF9BX0xBV30sCisgIHtQQ01fRk1UX1VOS05PV04sIEFGTVRfUVVFUlkgfQorfTsKKworc3RhdGljIFBjbUFtcGxpdHVkZUZvcm1hdAorZG9QY21BbXBsaXR1ZGVGb3JtYXQgKFBjbURldmljZSAqcGNtLCBpbnQgZm9ybWF0KSB7CisgIGlmIChpb2N0bChwY20tPmZpbGVEZXNjcmlwdG9yLCBTTkRDVExfRFNQX1NFVEZNVCwgJmZvcm1hdCkgIT0gLTEpIHsKKyAgICBjb25zdCBBbXBsaXR1ZGVGb3JtYXRFbnRyeSAqZW50cnkgPSBhbXBsaXR1ZGVGb3JtYXRUYWJsZTsKKyAgICB3aGlsZSAoZW50cnktPmludGVybmFsICE9IFBDTV9GTVRfVU5LTk9XTikgeworICAgICAgaWYgKGVudHJ5LT5leHRlcm5hbCA9PSBmb3JtYXQpIHJldHVybiBlbnRyeS0+aW50ZXJuYWw7CisgICAgICArK2VudHJ5OworICAgIH0KKyAgfQorICByZXR1cm4gUENNX0ZNVF9VTktOT1dOOworfQorCitQY21BbXBsaXR1ZGVGb3JtYXQKK2dldFBjbUFtcGxpdHVkZUZvcm1hdCAoUGNtRGV2aWNlICpwY20pIHsKKyAgcmV0dXJuIGRvUGNtQW1wbGl0dWRlRm9ybWF0KHBjbSwgQUZNVF9RVUVSWSk7Cit9CisKK1BjbUFtcGxpdHVkZUZvcm1hdAorc2V0UGNtQW1wbGl0dWRlRm9ybWF0IChQY21EZXZpY2UgKnBjbSwgUGNtQW1wbGl0dWRlRm9ybWF0IGZvcm1hdCkgeworICBjb25zdCBBbXBsaXR1ZGVGb3JtYXRFbnRyeSAqZW50cnkgPSBhbXBsaXR1ZGVGb3JtYXRUYWJsZTsKKyAgd2hpbGUgKGVudHJ5LT5pbnRlcm5hbCAhPSBQQ01fRk1UX1VOS05PV04pIHsKKyAgICBpZiAoZW50cnktPmludGVybmFsID09IGZvcm1hdCkgYnJlYWs7CisgICAgKytlbnRyeTsKKyAgfQorICByZXR1cm4gZG9QY21BbXBsaXR1ZGVGb3JtYXQocGNtLCBlbnRyeS0+ZXh0ZXJuYWwpOworfQorCit2b2lkCitwdXNoUGNtT3V0cHV0IChQY21EZXZpY2UgKnBjbSkgeworICBpb2N0bChwY20tPmZpbGVEZXNjcmlwdG9yLCBTTkRDVExfRFNQX1BPU1QsIDApOworfQorCit2b2lkCithd2FpdFBjbU91dHB1dCAoUGNtRGV2aWNlICpwY20pIHsKKyAgaW9jdGwocGNtLT5maWxlRGVzY3JpcHRvciwgU05EQ1RMX0RTUF9TWU5DLCAwKTsKK30KKwordm9pZAorY2FuY2VsUGNtT3V0cHV0IChQY21EZXZpY2UgKnBjbSkgeworICBpb2N0bChwY20tPmZpbGVEZXNjcmlwdG9yLCBTTkRDVExfRFNQX1JFU0VULCAwKTsKK30KZGlmZiAtLWdpdCBhL1Byb2dyYW1zL3BjbV9xc2EuYyBiL1Byb2dyYW1zL3BjbV9xc2EuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lOGE2MzA1Ci0tLSAvZGV2L251bGwKKysrIGIvUHJvZ3JhbXMvcGNtX3FzYS5jCkBAIC0wLDAgKzEsMjY1IEBACisvKgorICogQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyAqICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyAqCisgKiBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorICoKKyAqIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyAqCisgKiBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisgKi8KKworI2luY2x1ZGUgInByb2xvZ3VlLmgiCisKKyNpbmNsdWRlIDxzeXMvYXNvdW5kbGliLmg+CisKKyNpbmNsdWRlICJsb2cuaCIKKyNpbmNsdWRlICJpb19taXNjLmgiCisjaW5jbHVkZSAicGNtLmgiCisKK3N0cnVjdCBQY21EZXZpY2VTdHJ1Y3QgeworICBpbnQgY2FyZDsKKyAgaW50IGRldmljZTsKKyAgc25kX3BjbV90ICpoYW5kbGU7CisgIHNuZF9wY21fY2hhbm5lbF9wYXJhbXNfdCBwYXJhbWV0ZXJzOworfTsKKworc3RhdGljIHZvaWQKK2xvZ1BjbUVycm9yIChpbnQgbGV2ZWwsIGNvbnN0IGNoYXIgKmFjdGlvbiwgaW50IGNvZGUpIHsKKyAgbG9nTWVzc2FnZShsZXZlbCwgIlFTQSBQQ00gJXMgZXJyb3I6ICVzIiwgYWN0aW9uLCBzbmRfc3RyZXJyb3IoY29kZSkpOworfQorCitzdGF0aWMgaW50CityZWNvbmZpZ3VyZVBjbUNoYW5uZWwgKFBjbURldmljZSAqcGNtLCBpbnQgZXJyb3JMZXZlbCkgeworICBpbnQgY29kZTsKKyAgaWYgKChjb2RlID0gc25kX3BjbV9jaGFubmVsX3BhcmFtcyhwY20tPmhhbmRsZSwgJnBjbS0+cGFyYW1ldGVycykpID49IDApIHsKKyAgICBzbmRfcGNtX2NoYW5uZWxfc2V0dXBfdCBzZXR1cDsKKyAgICBzZXR1cC5jaGFubmVsID0gcGNtLT5wYXJhbWV0ZXJzLmNoYW5uZWw7CisgICAgaWYgKChjb2RlID0gc25kX3BjbV9jaGFubmVsX3NldHVwKHBjbS0+aGFuZGxlLCAmc2V0dXApKSA+PSAwKSB7CisgICAgICBwY20tPnBhcmFtZXRlcnMubW9kZSA9IHNldHVwLm1vZGU7CisgICAgICBwY20tPnBhcmFtZXRlcnMuZm9ybWF0ID0gc2V0dXAuZm9ybWF0OworICAgICAgcGNtLT5wYXJhbWV0ZXJzLmJ1Zi5ibG9jay5mcmFnX3NpemUgPSBzZXR1cC5idWYuYmxvY2suZnJhZ19zaXplOworICAgICAgcGNtLT5wYXJhbWV0ZXJzLmJ1Zi5ibG9jay5mcmFnc19taW4gPSBzZXR1cC5idWYuYmxvY2suZnJhZ3NfbWluOworICAgICAgcGNtLT5wYXJhbWV0ZXJzLmJ1Zi5ibG9jay5mcmFnc19tYXggPSBzZXR1cC5idWYuYmxvY2suZnJhZ3NfbWF4OworICAgICAgcmV0dXJuIDE7CisgICAgfSBlbHNlIHsKKyAgICAgIGxvZ1BjbUVycm9yKGVycm9yTGV2ZWwsICJnZXQgY2hhbm5lbCBzZXR1cCIsIGNvZGUpOworICAgIH0KKyAgfSBlbHNlIHsKKyAgICBsb2dQY21FcnJvcihlcnJvckxldmVsLCAic2V0IGNoYW5uZWwgcGFyYW1ldGVycyIsIGNvZGUpOworICB9CisgIHJldHVybiAwOworfQorCitQY21EZXZpY2UgKgorb3BlblBjbURldmljZSAoaW50IGVycm9yTGV2ZWwsIGNvbnN0IGNoYXIgKmRldmljZSkgeworICBQY21EZXZpY2UgKnBjbTsKKyAgaWYgKChwY20gPSBtYWxsb2Moc2l6ZW9mKCpwY20pKSkpIHsKKyAgICBpbnQgY29kZTsKKworICAgIGlmICgqZGV2aWNlKSB7CisgICAgICB7CisJaW50IG9rID0gMDsKKwlsb25nIG51bWJlcjsKKwljaGFyICplbmQ7CisJY29uc3QgY2hhciAqY29tcG9uZW50ID0gZGV2aWNlOworCisJbnVtYmVyID0gc3RydG9sKGNvbXBvbmVudCwgJmVuZCwgMCk7CisJaWYgKCgqZW5kICYmICgqZW5kICE9ICc6JykpIHx8IChudW1iZXIgPCAwKSB8fCAobnVtYmVyID4gMFhGRikpIHsKKwkgIGxvZ01lc3NhZ2UoZXJyb3JMZXZlbCwgIkludmFsaWQgUVNBIGNhcmQgbnVtYmVyOiAlcyIsIGRldmljZSk7CisJfSBlbHNlIGlmIChlbmQgPT0gY29tcG9uZW50KSB7CisJICBsb2dNZXNzYWdlKGVycm9yTGV2ZWwsICJNaXNzaW5nIFFTQSBjYXJkIG51bWJlcjogJXMiLCBkZXZpY2UpOworCX0gZWxzZSB7CisJICBwY20tPmNhcmQgPSBudW1iZXI7CisKKwkgIGlmICgqZW5kKSB7CisJICAgIGNvbXBvbmVudCA9IGVuZCArIDE7CisJICAgIG51bWJlciA9IHN0cnRvbChjb21wb25lbnQsICZlbmQsIDApOworCSAgICBpZiAoKmVuZCB8fCAobnVtYmVyIDwgMCkgfHwgKG51bWJlciA+IDBYRkYpKSB7CisJICAgICAgbG9nTWVzc2FnZShlcnJvckxldmVsLCAiSW52YWxpZCBRU0EgZGV2aWNlIG51bWJlcjogJXMiLCBkZXZpY2UpOworCSAgICB9IGVsc2UgaWYgKGVuZCA9PSBjb21wb25lbnQpIHsKKwkgICAgICBsb2dNZXNzYWdlKGVycm9yTGV2ZWwsICJNaXNzaW5nIFFTQSBkZXZpY2UgbnVtYmVyOiAlcyIsIGRldmljZSk7CisJICAgIH0gZWxzZSB7CisJICAgICAgcGNtLT5kZXZpY2UgPSBudW1iZXI7CisJICAgICAgb2sgPSAxOworCSAgICB9CisJICB9IGVsc2UgeworCSAgICBwY20tPmRldmljZSA9IDA7CisJICAgIG9rID0gMTsKKwkgIH0KKwl9CisKKwlpZiAoIW9rKSBnb3RvIG9wZW5FcnJvcjsKKyAgICAgIH0KKworICAgICAgaWYgKChjb2RlID0gc25kX3BjbV9vcGVuKCZwY20tPmhhbmRsZSwgcGNtLT5jYXJkLCBwY20tPmRldmljZSwgU05EX1BDTV9PUEVOX1BMQVlCQUNLKSkgPCAwKSB7CisJbG9nUGNtRXJyb3IoZXJyb3JMZXZlbCwgIm9wZW4iLCBjb2RlKTsKKwlnb3RvIG9wZW5FcnJvcjsKKyAgICAgIH0KKyAgICB9IGVsc2UgaWYgKChjb2RlID0gc25kX3BjbV9vcGVuX3ByZWZlcnJlZCgmcGNtLT5oYW5kbGUsICZwY20tPmNhcmQsICZwY20tPmRldmljZSwgU05EX1BDTV9PUEVOX1BMQVlCQUNLKSkgPCAwKSB7CisgICAgICBsb2dQY21FcnJvcihlcnJvckxldmVsLCAicHJlZmVycmVkIG9wZW4iLCBjb2RlKTsKKyAgICAgIGdvdG8gb3BlbkVycm9yOworICAgIH0KKyAgICBsb2dNZXNzYWdlKExPR19ERUJVRywgIlFTQSBQQ00gZGV2aWNlIG9wZW5lZDogJWQ6JWQiLCBwY20tPmNhcmQsIHBjbS0+ZGV2aWNlKTsKKworICAgIHsKKyAgICAgIHNuZF9wY21fY2hhbm5lbF9pbmZvX3QgaW5mbzsKKyAgICAgIGluZm8uY2hhbm5lbCA9IFNORF9QQ01fQ0hBTk5FTF9QTEFZQkFDSzsKKyAgICAgIGlmICgoY29kZSA9IHNuZF9wY21fY2hhbm5lbF9pbmZvKHBjbS0+aGFuZGxlLCAmaW5mbykpID49IDApIHsKKwlsb2dNZXNzYWdlKExPR19ERUJVRywgIlFTQSBQQ00gSW5mbzogRnJhZz0lZC0lZCBSYXRlPSVkLSVkIENoYW49JWQtJWQiLAorCSAgICAgICAgICAgaW5mby5taW5fZnJhZ21lbnRfc2l6ZSwgaW5mby5tYXhfZnJhZ21lbnRfc2l6ZSwKKwkgICAgICAgICAgIGluZm8ubWluX3JhdGUsIGluZm8ubWF4X3JhdGUsCisJICAgICAgICAgICBpbmZvLm1pbl92b2ljZXMsIGluZm8ubWF4X3ZvaWNlcyk7CisJbWVtc2V0KCZwY20tPnBhcmFtZXRlcnMsIDAsIHNpemVvZihwY20tPnBhcmFtZXRlcnMpKTsKKworCXBjbS0+cGFyYW1ldGVycy5jaGFubmVsID0gaW5mby5jaGFubmVsOworCXBjbS0+cGFyYW1ldGVycy5zdGFydF9tb2RlID0gU05EX1BDTV9TVEFSVF9EQVRBOworCXBjbS0+cGFyYW1ldGVycy5zdG9wX21vZGUgPSBTTkRfUENNX1NUT1BfUk9MTE9WRVI7CisKKwlzd2l0Y2ggKHBjbS0+cGFyYW1ldGVycy5tb2RlID0gU05EX1BDTV9NT0RFX0JMT0NLKSB7CisJICBjYXNlIFNORF9QQ01fTU9ERV9CTE9DSzoKKwkgICAgcGNtLT5wYXJhbWV0ZXJzLmJ1Zi5ibG9jay5mcmFnX3NpemUgPSBNSU4oTUFYKDBYNDAwLCBpbmZvLm1pbl9mcmFnbWVudF9zaXplKSwgaW5mby5tYXhfZnJhZ21lbnRfc2l6ZSk7CisJICAgIHBjbS0+cGFyYW1ldGVycy5idWYuYmxvY2suZnJhZ3NfbWluID0gMTsKKwkgICAgcGNtLT5wYXJhbWV0ZXJzLmJ1Zi5ibG9jay5mcmFnc19tYXggPSAwWDQwOworCSAgICBicmVhazsKKworCSAgZGVmYXVsdDoKKwkgICAgbG9nTWVzc2FnZShMT0dfV0FSTklORywgIlVuc3VwcG9ydGVkIFFTQSBQQ00gbW9kZTogJWQiLCBwY20tPnBhcmFtZXRlcnMubW9kZSk7CisJICAgIGdvdG8gb3BlbkVycm9yOworCX0KKworCXBjbS0+cGFyYW1ldGVycy5mb3JtYXQuaW50ZXJsZWF2ZSA9IDE7CisJcGNtLT5wYXJhbWV0ZXJzLmZvcm1hdC5yYXRlID0gaW5mby5tYXhfcmF0ZTsKKwlwY20tPnBhcmFtZXRlcnMuZm9ybWF0LnZvaWNlcyA9IE1JTihNQVgoMSwgaW5mby5taW5fdm9pY2VzKSwgaW5mby5tYXhfdm9pY2VzKTsKKwlwY20tPnBhcmFtZXRlcnMuZm9ybWF0LmZvcm1hdCA9IFNORF9QQ01fU0ZNVF9TMTY7CisKKwlpZiAocmVjb25maWd1cmVQY21DaGFubmVsKHBjbSwgZXJyb3JMZXZlbCkpIHsKKwkgIGlmICgoY29kZSA9IHNuZF9wY21fY2hhbm5lbF9wcmVwYXJlKHBjbS0+aGFuZGxlLCBwY20tPnBhcmFtZXRlcnMuY2hhbm5lbCkpID49IDApIHsKKwkgICAgcmV0dXJuIHBjbTsKKwkgIH0gZWxzZSB7CisJICAgIGxvZ1BjbUVycm9yKGVycm9yTGV2ZWwsICJwcmVwYXJlIGNoYW5uZWwiLCBjb2RlKTsKKwkgIH0KKwl9CisgICAgICB9IGVsc2UgeworICAgICAgICBsb2dQY21FcnJvcihlcnJvckxldmVsLCAiZ2V0IGNoYW5uZWwgaW5mb3JtYXRpb24iLCBjb2RlKTsKKyAgICAgIH0KKyAgICB9CisKKyAgb3BlbkVycm9yOgorICAgIGZyZWUocGNtKTsKKyAgfSBlbHNlIHsKKyAgICBsb2dTeXN0ZW1FcnJvcigiUENNIGRldmljZSBhbGxvY2F0aW9uIik7CisgIH0KKworICByZXR1cm4gTlVMTDsKK30KKwordm9pZAorY2xvc2VQY21EZXZpY2UgKFBjbURldmljZSAqcGNtKSB7CisgIGludCBjb2RlOworICBpZiAoKGNvZGUgPSBzbmRfcGNtX2Nsb3NlKHBjbS0+aGFuZGxlKSkgPCAwKSB7CisgICAgbG9nUGNtRXJyb3IoTE9HX1dBUk5JTkcsICJjbG9zZSIsIGNvZGUpOworICB9CisKKyAgZnJlZShwY20pOworfQorCitpbnQKK3dyaXRlUGNtRGF0YSAoUGNtRGV2aWNlICpwY20sIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZmZlciwgaW50IGNvdW50KSB7CisgIHJldHVybiB3cml0ZUZpbGUoc25kX3BjbV9maWxlX2Rlc2NyaXB0b3IocGNtLT5oYW5kbGUsIHBjbS0+cGFyYW1ldGVycy5jaGFubmVsKSwgYnVmZmVyLCBjb3VudCk7Cit9CisKK2ludAorZ2V0UGNtQmxvY2tTaXplIChQY21EZXZpY2UgKnBjbSkgeworICByZXR1cm4gcGNtLT5wYXJhbWV0ZXJzLmJ1Zi5ibG9jay5mcmFnX3NpemU7Cit9CisKK2ludAorZ2V0UGNtU2FtcGxlUmF0ZSAoUGNtRGV2aWNlICpwY20pIHsKKyAgcmV0dXJuIHBjbS0+cGFyYW1ldGVycy5mb3JtYXQucmF0ZTsKK30KKworaW50CitzZXRQY21TYW1wbGVSYXRlIChQY21EZXZpY2UgKnBjbSwgaW50IHJhdGUpIHsKKyAgcGNtLT5wYXJhbWV0ZXJzLmZvcm1hdC5yYXRlID0gcmF0ZTsKKyAgcmVjb25maWd1cmVQY21DaGFubmVsKHBjbSwgTE9HX1dBUk5JTkcpOworICByZXR1cm4gZ2V0UGNtU2FtcGxlUmF0ZShwY20pOworfQorCitpbnQKK2dldFBjbUNoYW5uZWxDb3VudCAoUGNtRGV2aWNlICpwY20pIHsKKyAgcmV0dXJuIHBjbS0+cGFyYW1ldGVycy5mb3JtYXQudm9pY2VzOworfQorCitpbnQKK3NldFBjbUNoYW5uZWxDb3VudCAoUGNtRGV2aWNlICpwY20sIGludCBjaGFubmVscykgeworICBwY20tPnBhcmFtZXRlcnMuZm9ybWF0LnZvaWNlcyA9IGNoYW5uZWxzOworICByZWNvbmZpZ3VyZVBjbUNoYW5uZWwocGNtLCBMT0dfV0FSTklORyk7CisgIHJldHVybiBnZXRQY21DaGFubmVsQ291bnQocGNtKTsKK30KKwordHlwZWRlZiBzdHJ1Y3QgeworICBQY21BbXBsaXR1ZGVGb3JtYXQgaW50ZXJuYWw7CisgIGludCBleHRlcm5hbDsKK30gQW1wbGl0dWRlRm9ybWF0RW50cnk7CitzdGF0aWMgY29uc3QgQW1wbGl0dWRlRm9ybWF0RW50cnkgYW1wbGl0dWRlRm9ybWF0VGFibGVbXSA9IHsKKyAge1BDTV9GTVRfVTggICAgICwgU05EX1BDTV9TRk1UX1U4ICAgICB9LAorICB7UENNX0ZNVF9TOCAgICAgLCBTTkRfUENNX1NGTVRfUzggICAgIH0sCisgIHtQQ01fRk1UX1UxNkIgICAsIFNORF9QQ01fU0ZNVF9VMTZfQkUgfSwKKyAge1BDTV9GTVRfUzE2QiAgICwgU05EX1BDTV9TRk1UX1MxNl9CRSB9LAorICB7UENNX0ZNVF9VMTZMICAgLCBTTkRfUENNX1NGTVRfVTE2X0xFIH0sCisgIHtQQ01fRk1UX1MxNkwgICAsIFNORF9QQ01fU0ZNVF9TMTZfTEUgfSwKKyAge1BDTV9GTVRfVUxBVyAgICwgU05EX1BDTV9TRk1UX01VX0xBVyB9LAorICB7UENNX0ZNVF9VTktOT1dOLCBTTkRfUENNX1NGTVRfU1BFQ0lBTH0KK307CisKK1BjbUFtcGxpdHVkZUZvcm1hdAorZ2V0UGNtQW1wbGl0dWRlRm9ybWF0IChQY21EZXZpY2UgKnBjbSkgeworICBjb25zdCBBbXBsaXR1ZGVGb3JtYXRFbnRyeSAqZW50cnkgPSBhbXBsaXR1ZGVGb3JtYXRUYWJsZTsKKyAgd2hpbGUgKGVudHJ5LT5pbnRlcm5hbCAhPSBQQ01fRk1UX1VOS05PV04pIHsKKyAgICBpZiAoZW50cnktPmV4dGVybmFsID09IHBjbS0+cGFyYW1ldGVycy5mb3JtYXQuZm9ybWF0KSBicmVhazsKKyAgICArK2VudHJ5OworICB9CisgIHJldHVybiBlbnRyeS0+aW50ZXJuYWw7Cit9CisKK1BjbUFtcGxpdHVkZUZvcm1hdAorc2V0UGNtQW1wbGl0dWRlRm9ybWF0IChQY21EZXZpY2UgKnBjbSwgUGNtQW1wbGl0dWRlRm9ybWF0IGZvcm1hdCkgeworICBjb25zdCBBbXBsaXR1ZGVGb3JtYXRFbnRyeSAqZW50cnkgPSBhbXBsaXR1ZGVGb3JtYXRUYWJsZTsKKyAgd2hpbGUgKGVudHJ5LT5pbnRlcm5hbCAhPSBQQ01fRk1UX1VOS05PV04pIHsKKyAgICBpZiAoZW50cnktPmludGVybmFsID09IGZvcm1hdCkgeworICAgICAgcGNtLT5wYXJhbWV0ZXJzLmZvcm1hdC5mb3JtYXQgPSBmb3JtYXQ7CisgICAgICByZWNvbmZpZ3VyZVBjbUNoYW5uZWwocGNtLCBMT0dfV0FSTklORyk7CisgICAgICBicmVhazsKKyAgICB9CisgICAgKytlbnRyeTsKKyAgfQorICByZXR1cm4gZ2V0UGNtQW1wbGl0dWRlRm9ybWF0KHBjbSk7Cit9CisKK3ZvaWQKK3B1c2hQY21PdXRwdXQgKFBjbURldmljZSAqcGNtKSB7Cit9CisKK3ZvaWQKK2F3YWl0UGNtT3V0cHV0IChQY21EZXZpY2UgKnBjbSkgeworICBpbnQgY29kZTsKKyAgaWYgKChjb2RlID0gc25kX3BjbV9wbGF5YmFja19mbHVzaChwY20tPmhhbmRsZSkpIDwgMCkgeworICAgIGxvZ1BjbUVycm9yKExPR19XQVJOSU5HLCAiZmx1c2giLCBjb2RlKTsKKyAgfQorfQorCit2b2lkCitjYW5jZWxQY21PdXRwdXQgKFBjbURldmljZSAqcGNtKSB7CisgIGludCBjb2RlOworICBpZiAoKGNvZGUgPSBzbmRfcGNtX3BsYXliYWNrX2RyYWluKHBjbS0+aGFuZGxlKSkgPCAwKSB7CisgICAgbG9nUGNtRXJyb3IoTE9HX1dBUk5JTkcsICJkcmFpbiIsIGNvZGUpOworICB9Cit9CmRpZmYgLS1naXQgYS9Qcm9ncmFtcy9wY21fd2luZG93cy5jIGIvUHJvZ3JhbXMvcGNtX3dpbmRvd3MuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNDkzNTY2Ci0tLSAvZGV2L251bGwKKysrIGIvUHJvZ3JhbXMvcGNtX3dpbmRvd3MuYwpAQCAtMCwwICsxLDI5MyBAQAorLyoKKyAqIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisgKiAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisgKgorICogQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKKyNpbmNsdWRlICJwcm9sb2d1ZS5oIgorCisjaW5jbHVkZSAibG9nLmgiCisjaW5jbHVkZSAicGFyc2UuaCIKKyNpbmNsdWRlICJwY20uaCIKKworc3RydWN0IFBjbURldmljZVN0cnVjdCB7CisgIEhXQVZFT1VUIGhhbmRsZTsKKyAgVUlOVCBkZXZpY2VJRDsKKyAgV0FWRUZPUk1BVEVYIGZvcm1hdDsKKyAgSEFORExFIGRvbmU7CisgIFdBVkVIRFIgd2F2ZUhkcjsKKyAgc2l6ZV90IGJ1ZlNpemU7Cit9OworCitzdGF0aWMgV0FWRUZPUk1BVEVYIGRlZmF1bHRGb3JtYXQgPSB7IFdBVkVfRk9STUFUX1BDTSwgMSwgMTEwMjUsIDExMDI1LCAxLCA4LCAwIH07CisKK3N0YXRpYyB2b2lkCityZWNvbXB1dGVXYXZlT3V0Rm9ybWF0KFdBVkVGT1JNQVRFWCAqZm9ybWF0KSB7CisgIGZvcm1hdC0+bkJsb2NrQWxpZ24gPSBmb3JtYXQtPm5DaGFubmVscyAqICgoZm9ybWF0LT53Qml0c1BlclNhbXBsZSArIDcpIC8gOCk7CisgIGZvcm1hdC0+bkF2Z0J5dGVzUGVyU2VjID0gZm9ybWF0LT5uQmxvY2tBbGlnbiAqIGZvcm1hdC0+blNhbXBsZXNQZXJTZWM7Cit9CisKK3N0YXRpYyBXQVZFSERSIGluaXRXYXZlSGRyID0geyBOVUxMLCAwLCAwLCAwLCAwLCAxLCBOVUxMLCAwIH07CisKK3N0YXRpYyB2b2lkCitMb2dXYXZlT3V0RXJyb3IoTU1SRVNVTFQgZXJyb3IsIGludCBlcnJvckxldmVsLCBjb25zdCBjaGFyICphY3Rpb24pIHsKKyAgY2hhciBtc2dbTUFYRVJST1JMRU5HVEhdOworICB3YXZlT3V0R2V0RXJyb3JUZXh0KGVycm9yLCBtc2csIHNpemVvZihtc2cpKTsKKyAgbG9nTWVzc2FnZShlcnJvckxldmVsLCAiJXMgZXJyb3IgJWQ6ICVzLiIsIGFjdGlvbiwgZXJyb3IsIG1zZyk7Cit9CisKK1BjbURldmljZSAqCitvcGVuUGNtRGV2aWNlIChpbnQgZXJyb3JMZXZlbCwgY29uc3QgY2hhciAqZGV2aWNlKSB7CisgIFBjbURldmljZSAqcGNtOworICBNTVJFU1VMVCBtbXJlczsKKyAgV0FWRU9VVENBUFMgY2FwczsKKyAgaW50IGlkID0gMDsKKworICBpZiAoKmRldmljZSkgeworICAgIGlmICghaXNJbnRlZ2VyKCZpZCwgZGV2aWNlKSB8fCAoaWQgPCAwKSB8fCAoaWQgPj0gd2F2ZU91dEdldE51bURldnMoKSkpIHsKKyAgICAgIGxvZ01lc3NhZ2UoZXJyb3JMZXZlbCwgImludmFsaWQgUENNIGRldmljZSBudW1iZXI6ICVzIiwgZGV2aWNlKTsKKyAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgfQorCisgIGlmICghKHBjbSA9IG1hbGxvYyhzaXplb2YoKnBjbSkpKSkgeworICAgIGxvZ1N5c3RlbUVycm9yKCJQQ00gZGV2aWNlIGFsbG9jYXRpb24iKTsKKyAgICByZXR1cm4gTlVMTDsKKyAgfQorICBwY20tPmRldmljZUlEID0gaWQ7CisKKyAgaWYgKCh3YXZlT3V0R2V0RGV2Q2FwcyhwY20tPmRldmljZUlELCAmY2Fwcywgc2l6ZW9mKGNhcHMpKSkgIT0gTU1TWVNFUlJfTk9FUlJPUikKKyAgICBwY20tPmZvcm1hdCA9IGRlZmF1bHRGb3JtYXQ7CisgIGVsc2UgeworICAgIGxvZ01lc3NhZ2UoZXJyb3JMZXZlbCwgIlBDTSBkZXZpY2UgJWQgaXMgJXMiLCBwY20tPmRldmljZUlELCBjYXBzLnN6UG5hbWUpOworICAgIHBjbS0+Zm9ybWF0LndGb3JtYXRUYWcgPSBXQVZFX0ZPUk1BVF9QQ007CisgICAgaWYgKGNhcHMuZHdGb3JtYXRzICYgCisJKFdBVkVfRk9STUFUXzFTMDgKKwl8V0FWRV9GT1JNQVRfMVMxNgorCXxXQVZFX0ZPUk1BVF8yUzA4CisJfFdBVkVfRk9STUFUXzJTMTYKKwl8V0FWRV9GT1JNQVRfNFMwOAorCXxXQVZFX0ZPUk1BVF80UzE2KSkKKyAgICAgIHBjbS0+Zm9ybWF0Lm5DaGFubmVscyA9IDI7CisgICAgZWxzZQorICAgICAgcGNtLT5mb3JtYXQubkNoYW5uZWxzID0gMTsKKyAgICBpZiAoY2Fwcy5kd0Zvcm1hdHMgJgorCShXQVZFX0ZPUk1BVF80TTA4CisJfFdBVkVfRk9STUFUXzRNMTYKKwl8V0FWRV9GT1JNQVRfNFMwOAorCXxXQVZFX0ZPUk1BVF80UzE2KSkKKyAgICAgIHBjbS0+Zm9ybWF0Lm5TYW1wbGVzUGVyU2VjID0gNDQxMDA7CisgICAgZWxzZSBpZiAoY2Fwcy5kd0Zvcm1hdHMgJgorCShXQVZFX0ZPUk1BVF8yTTA4CisJfFdBVkVfRk9STUFUXzJNMTYKKwl8V0FWRV9GT1JNQVRfMlMwOAorCXxXQVZFX0ZPUk1BVF8yUzE2KSkKKyAgICAgIHBjbS0+Zm9ybWF0Lm5TYW1wbGVzUGVyU2VjID0gMjIwNTA7CisgICAgZWxzZSBpZiAoY2Fwcy5kd0Zvcm1hdHMgJgorCShXQVZFX0ZPUk1BVF8xTTA4CisJfFdBVkVfRk9STUFUXzFNMTYKKwl8V0FWRV9GT1JNQVRfMVMwOAorCXxXQVZFX0ZPUk1BVF8xUzE2KSkKKyAgICAgIHBjbS0+Zm9ybWF0Lm5TYW1wbGVzUGVyU2VjID0gMTEwMjU7CisgICAgZWxzZSB7CisgICAgICBsb2dNZXNzYWdlKGVycm9yTGV2ZWwsICJ1bmtub3duIFBDTSBjYXBhYmlsaXR5ICUjbHgiLCBjYXBzLmR3Rm9ybWF0cyk7CisgICAgICBnb3RvIG91dDsKKyAgICB9CisgICAgaWYgKGNhcHMuZHdGb3JtYXRzICYKKwkoV0FWRV9GT1JNQVRfMU0xNgorCXxXQVZFX0ZPUk1BVF8xUzE2CisJfFdBVkVfRk9STUFUXzJNMTYKKwl8V0FWRV9GT1JNQVRfMlMxNgorCXxXQVZFX0ZPUk1BVF80TTE2CisJfFdBVkVfRk9STUFUXzRTMTYpKQorICAgICAgcGNtLT5mb3JtYXQud0JpdHNQZXJTYW1wbGUgPSAxNjsKKyAgICBlbHNlIGlmIChjYXBzLmR3Rm9ybWF0cyAmCisJKFdBVkVfRk9STUFUXzFNMDgKKwl8V0FWRV9GT1JNQVRfMVMwOAorCXxXQVZFX0ZPUk1BVF8yTTA4CisJfFdBVkVfRk9STUFUXzJTMDgKKwl8V0FWRV9GT1JNQVRfNE0wOAorCXxXQVZFX0ZPUk1BVF80UzA4KSkKKyAgICAgIHBjbS0+Zm9ybWF0LndCaXRzUGVyU2FtcGxlID0gODsKKyAgICBlbHNlIHsKKyAgICAgIGxvZ01lc3NhZ2UoTE9HX0VSUiwgInVua25vd24gUENNIGNhcGFiaWxpdHkgJSNseCIsIGNhcHMuZHdGb3JtYXRzKTsKKyAgICAgIGdvdG8gb3V0OworICAgIH0KKyAgICByZWNvbXB1dGVXYXZlT3V0Rm9ybWF0KCZwY20tPmZvcm1hdCk7CisgICAgcGNtLT5mb3JtYXQuY2JTaXplID0gMDsKKyAgfQorCisgIGlmICghKHBjbS0+ZG9uZSA9IENyZWF0ZUV2ZW50KE5VTEwsIEZBTFNFLCBUUlVFLCBOVUxMKSkpIHsKKyAgICBsb2dXaW5kb3dzU3lzdGVtRXJyb3IoImNyZWF0aW5nIFBDTSBjb21wbGV0aW9uIGV2ZW50Iik7CisgICAgZ290byBvdXQ7CisgIH0KKworICBwY20tPndhdmVIZHIgPSBpbml0V2F2ZUhkcjsKKyAgcGNtLT5idWZTaXplID0gMDsKKworICBpZiAoKG1tcmVzID0gd2F2ZU91dE9wZW4oJnBjbS0+aGFuZGxlLCBwY20tPmRldmljZUlELAorCSAgJnBjbS0+Zm9ybWF0LCAoRFdPUkQpIHBjbS0+ZG9uZSwgMCwgQ0FMTEJBQ0tfRVZFTlQpKSAhPSBNTVNZU0VSUl9OT0VSUk9SKSB7CisgICAgTG9nV2F2ZU91dEVycm9yKG1tcmVzLCBlcnJvckxldmVsLCAib3BlbmluZyBQQ00gZGV2aWNlIik7CisgICAgZ290byBvdXRFdmVudDsKKyAgfQorICByZXR1cm4gcGNtOworCitvdXRFdmVudDoKKyAgQ2xvc2VIYW5kbGUocGNtLT5kb25lKTsKK291dDoKKyAgZnJlZShwY20pOworICByZXR1cm4gTlVMTDsKK30KKworc3RhdGljIGludAordW5wcmVwYXJlSGVhZGVyKFBjbURldmljZSAqcGNtKSB7CisgIE1NUkVTVUxUIG1tcmVzOworICBhd2FpdFBjbU91dHB1dChwY20pOworICBpZiAoKG1tcmVzID0gd2F2ZU91dFVucHJlcGFyZUhlYWRlcihwY20tPmhhbmRsZSwgJnBjbS0+d2F2ZUhkciwgc2l6ZW9mKHBjbS0+d2F2ZUhkcikpKSAhPSBNTVNZU0VSUl9OT0VSUk9SKSB7CisgICAgTG9nV2F2ZU91dEVycm9yKG1tcmVzLCBMT0dfRVJSLCAidW5wcmVwYXJpbmcgUENNIGRhdGEgaGVhZGVyIik7CisgICAgcmV0dXJuIDA7CisgIH0KKyAgcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQKK3VwZGF0ZVdhdmVPdXRGb3JtYXQoUGNtRGV2aWNlICpwY20sIFdBVkVGT1JNQVRFWCAqZm9ybWF0LCBjb25zdCBjaGFyICplcnJtc2cpIHsKKyAgTU1SRVNVTFQgbW1yZXM7CisgIHJlY29tcHV0ZVdhdmVPdXRGb3JtYXQoZm9ybWF0KTsKKyAgaWYgKCEodW5wcmVwYXJlSGVhZGVyKHBjbSkpKSByZXR1cm4gMDsKKyAgaWYgKHdhdmVPdXRPcGVuKE5VTEwsIHBjbS0+ZGV2aWNlSUQsIGZvcm1hdCwgMCwgMCwgV0FWRV9GT1JNQVRfUVVFUlkpID09IE1NU1lTRVJSX05PRVJST1IpIHsKKyAgICB3YXZlT3V0Q2xvc2UocGNtLT5oYW5kbGUpOworICAgIHBjbS0+aGFuZGxlID0gSU5WQUxJRF9IQU5ETEVfVkFMVUU7CisgICAgaWYgKChtbXJlcyA9IHdhdmVPdXRPcGVuKCZwY20tPmhhbmRsZSwgcGNtLT5kZXZpY2VJRCwgZm9ybWF0LAorCSAgICAoRFdPUkQpIHBjbS0+ZG9uZSwgMCwgQ0FMTEJBQ0tfRVZFTlQpKSA9PSBNTVNZU0VSUl9OT0VSUk9SKSB7CisgICAgICBwY20tPmZvcm1hdCA9ICpmb3JtYXQ7CisgICAgICByZXR1cm4gMTsKKyAgICB9CisgICAgTG9nV2F2ZU91dEVycm9yKG1tcmVzLCBMT0dfRVJSLCBlcnJtc2cpOworICB9CisgIHJldHVybiAwOworfQorCit2b2lkCitjbG9zZVBjbURldmljZSAoUGNtRGV2aWNlICpwY20pIHsKKyAgQ2xvc2VIYW5kbGUocGNtLT5kb25lKTsKKyAgdW5wcmVwYXJlSGVhZGVyKHBjbSk7CisgIHdhdmVPdXRDbG9zZShwY20tPmhhbmRsZSk7CisgIGZyZWUocGNtLT53YXZlSGRyLmxwRGF0YSk7CisgIGZyZWUocGNtKTsKK30KKworaW50Cit3cml0ZVBjbURhdGEgKFBjbURldmljZSAqcGNtLCBjb25zdCB1bnNpZ25lZCBjaGFyICpidWZmZXIsIGludCBjb3VudCkgeworICBNTVJFU1VMVCBtbXJlczsKKyAgdm9pZCAqbmV3QnVmOworICBpZiAoIWNvdW50KSByZXR1cm4gMTsKKyAgaWYgKGNvdW50ID4gcGNtLT5idWZTaXplKSB7CisgICAgaWYgKCEodW5wcmVwYXJlSGVhZGVyKHBjbSkpKSByZXR1cm4gMDsKKyAgICBpZiAoIShuZXdCdWYgPSByZWFsbG9jKHBjbS0+d2F2ZUhkci5scERhdGEsIDIgKiBjb3VudCkpKSB7CisgICAgICBsb2dTeXN0ZW1FcnJvcigiYWxsb2NhdGluZyBQQ00gZGF0YSBidWZmZXIiKTsKKyAgICAgIHJldHVybiAwOworICAgIH0KKyAgICBwY20tPndhdmVIZHIubHBEYXRhID0gbmV3QnVmOworICAgIHBjbS0+d2F2ZUhkci5kd0ZsYWdzID0gMDsKKyAgICBwY20tPndhdmVIZHIuZHdCdWZmZXJMZW5ndGggPSBwY20tPmJ1ZlNpemUgPSAyICogY291bnQ7CisgIH0KKyAgYXdhaXRQY21PdXRwdXQocGNtKTsKKyAgaWYgKCEocGNtLT53YXZlSGRyLmR3RmxhZ3MgJiBXSERSX1BSRVBBUkVEKSkKKyAgICBpZiAoKG1tcmVzID0gd2F2ZU91dFByZXBhcmVIZWFkZXIocGNtLT5oYW5kbGUsICZwY20tPndhdmVIZHIsIHNpemVvZihwY20tPndhdmVIZHIpKSkgIT0gTU1TWVNFUlJfTk9FUlJPUikgeworICAgICAgTG9nV2F2ZU91dEVycm9yKG1tcmVzLCBMT0dfRVJSLCAicHJlcGFyaW5nIFBDTSBkYXRhIGhlYWRlciIpOworICAgICAgcmV0dXJuIDA7CisgICAgfQorICBwY20tPndhdmVIZHIuZHdCdWZmZXJMZW5ndGggPSBjb3VudDsKKyAgbWVtY3B5KHBjbS0+d2F2ZUhkci5scERhdGEsIGJ1ZmZlciwgY291bnQpOworICBSZXNldEV2ZW50KHBjbS0+ZG9uZSk7CisgIGlmICgobW1yZXMgPSB3YXZlT3V0V3JpdGUocGNtLT5oYW5kbGUsICZwY20tPndhdmVIZHIsIHNpemVvZihwY20tPndhdmVIZHIpKSkgIT0gTU1TWVNFUlJfTk9FUlJPUikgeworICAgIFNldEV2ZW50KHBjbS0+ZG9uZSk7CisgICAgTG9nV2F2ZU91dEVycm9yKG1tcmVzLCBMT0dfRVJSLCAid3JpdGluZyBQQ00gZGF0YSIpOworICAgIHJldHVybiAwOworICB9CisgIHJldHVybiAxOworfQorCitpbnQKK2dldFBjbUJsb2NrU2l6ZSAoUGNtRGV2aWNlICpwY20pIHsKKyAgcmV0dXJuIDBYMTAwMDA7Cit9CisKK2ludAorZ2V0UGNtU2FtcGxlUmF0ZSAoUGNtRGV2aWNlICpwY20pIHsKKyAgcmV0dXJuIHBjbS0+Zm9ybWF0Lm5TYW1wbGVzUGVyU2VjOworfQorCitpbnQKK3NldFBjbVNhbXBsZVJhdGUgKFBjbURldmljZSAqcGNtLCBpbnQgcmF0ZSkgeworICBXQVZFRk9STUFURVggZm9ybWF0ID0gcGNtLT5mb3JtYXQ7CisgIGZvcm1hdC5uU2FtcGxlc1BlclNlYyA9IHJhdGU7CisgIGlmICghdXBkYXRlV2F2ZU91dEZvcm1hdChwY20sICZmb3JtYXQsICJzZXR0aW5nIFBDTSBzYW1wbGUgcmF0ZSIpKQorICAgIHJldHVybiBnZXRQY21TYW1wbGVSYXRlKHBjbSk7CisgIGVsc2UKKyAgICByZXR1cm4gcmF0ZTsKK30KKworaW50CitnZXRQY21DaGFubmVsQ291bnQgKFBjbURldmljZSAqcGNtKSB7CisgIHJldHVybiBwY20tPmZvcm1hdC5uQ2hhbm5lbHM7Cit9CisKK2ludAorc2V0UGNtQ2hhbm5lbENvdW50IChQY21EZXZpY2UgKnBjbSwgaW50IGNoYW5uZWxzKSB7CisgIFdBVkVGT1JNQVRFWCBmb3JtYXQgPSBwY20tPmZvcm1hdDsKKyAgZm9ybWF0Lm5DaGFubmVscyA9IGNoYW5uZWxzOworICBpZiAoIXVwZGF0ZVdhdmVPdXRGb3JtYXQocGNtLCAmZm9ybWF0LCAic2V0dGluZyBQQ00gY2hhbm5lbCBjb3VudCIpKQorICAgIHJldHVybiBnZXRQY21DaGFubmVsQ291bnQocGNtKTsKKyAgZWxzZQorICAgIHJldHVybiBjaGFubmVsczsKK30KKworUGNtQW1wbGl0dWRlRm9ybWF0CitnZXRQY21BbXBsaXR1ZGVGb3JtYXQgKFBjbURldmljZSAqcGNtKSB7CisgIGlmIChwY20tPmZvcm1hdC53Qml0c1BlclNhbXBsZSA9PSA4KSByZXR1cm4gUENNX0ZNVF9VODsKKyAgaWYgKHBjbS0+Zm9ybWF0LndCaXRzUGVyU2FtcGxlID09IDE2KSByZXR1cm4gUENNX0ZNVF9TMTZMOworICByZXR1cm4gUENNX0ZNVF9VTktOT1dOOworfQorCitQY21BbXBsaXR1ZGVGb3JtYXQKK3NldFBjbUFtcGxpdHVkZUZvcm1hdCAoUGNtRGV2aWNlICpwY20sIFBjbUFtcGxpdHVkZUZvcm1hdCBmb3JtYXQpIHsKKyAgV0FWRUZPUk1BVEVYIG5ld0Zvcm1hdCA9IHBjbS0+Zm9ybWF0OworICBpZiAoZm9ybWF0ID09IFBDTV9GTVRfVTgpIG5ld0Zvcm1hdC53Qml0c1BlclNhbXBsZSA9IDg7CisgIGVsc2UgaWYgKGZvcm1hdCA9PSBQQ01fRk1UX1MxNkwpIG5ld0Zvcm1hdC53Qml0c1BlclNhbXBsZSA9IDE2OworICBlbHNlIHJldHVybiBnZXRQY21BbXBsaXR1ZGVGb3JtYXQocGNtKTsKKyAgaWYgKCF1cGRhdGVXYXZlT3V0Rm9ybWF0KHBjbSwgJm5ld0Zvcm1hdCwgInNldHRpbmcgUENNIGFtcGxpdHVkZSBmb3JtYXQiKSkKKyAgICByZXR1cm4gZ2V0UGNtQW1wbGl0dWRlRm9ybWF0KHBjbSk7CisgIGVsc2UKKyAgICByZXR1cm4gZm9ybWF0OworfQorCit2b2lkCitwdXNoUGNtT3V0cHV0IChQY21EZXZpY2UgKnBjbSkgeworfQorCit2b2lkCithd2FpdFBjbU91dHB1dCAoUGNtRGV2aWNlICpwY20pIHsKKyAgd2hpbGUgKChwY20tPndhdmVIZHIuZHdGbGFncyAmIFdIRFJfUFJFUEFSRUQpCisJCSAgJiYgIShwY20tPndhdmVIZHIuZHdGbGFncyAmIFdIRFJfRE9ORSkpCisgICAgV2FpdEZvclNpbmdsZU9iamVjdChwY20tPmRvbmUsIElORklOSVRFKTsKKyAgU2V0RXZlbnQocGNtLT5kb25lKTsKK30KKwordm9pZAorY2FuY2VsUGNtT3V0cHV0IChQY21EZXZpY2UgKnBjbSkgeworICB3YXZlT3V0UmVzZXQocGNtLT5oYW5kbGUpOworfQpkaWZmIC0tZ2l0IGEvUHJvZ3JhbXMvcGdtcGF0aF9mcmVlYnNkLmMgYi9Qcm9ncmFtcy9wZ21wYXRoX2ZyZWVic2QuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MGQxNzY3Ci0tLSAvZGV2L251bGwKKysrIGIvUHJvZ3JhbXMvcGdtcGF0aF9mcmVlYnNkLmMKQEAgLTAsMCArMSwzMSBAQAorLyoKKyAqIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisgKiAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisgKgorICogQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKKyNpbmNsdWRlICJwcm9sb2d1ZS5oIgorCisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKworI2luY2x1ZGUgImxvZy5oIgorI2luY2x1ZGUgInBnbXBhdGguaCIKKyNpbmNsdWRlICJmaWxlLmgiCisKK2NoYXIgKgorZ2V0UHJvZ3JhbVBhdGggKHZvaWQpIHsKKyAgcmV0dXJuIHJlYWRTeW1ib2xpY0xpbmsoIi9wcm9jL2N1cnByb2MvZmlsZSIpOworfQpkaWZmIC0tZ2l0IGEvUHJvZ3JhbXMvcGdtcGF0aF9odXJkLmMgYi9Qcm9ncmFtcy9wZ21wYXRoX2h1cmQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZTQ1ZGQ5Ci0tLSAvZGV2L251bGwKKysrIGIvUHJvZ3JhbXMvcGdtcGF0aF9odXJkLmMKQEAgLTAsMCArMSwzMSBAQAorLyoKKyAqIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisgKiAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisgKgorICogQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKKyNpbmNsdWRlICJwcm9sb2d1ZS5oIgorCisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKworI2luY2x1ZGUgImxvZy5oIgorI2luY2x1ZGUgInBnbXBhdGguaCIKKyNpbmNsdWRlICJmaWxlLmgiCisKK2NoYXIgKgorZ2V0UHJvZ3JhbVBhdGggKHZvaWQpIHsKKyAgcmV0dXJuIHJlYWRTeW1ib2xpY0xpbmsoIi9wcm9jL3NlbGYvZXhlIik7Cit9CmRpZmYgLS1naXQgYS9Qcm9ncmFtcy9wZ21wYXRoX2xpbnV4LmMgYi9Qcm9ncmFtcy9wZ21wYXRoX2xpbnV4LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWU0NWRkOQotLS0gL2Rldi9udWxsCisrKyBiL1Byb2dyYW1zL3BnbXBhdGhfbGludXguYwpAQCAtMCwwICsxLDMxIEBACisvKgorICogQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyAqICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyAqCisgKiBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorICoKKyAqIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyAqCisgKiBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisgKi8KKworI2luY2x1ZGUgInByb2xvZ3VlLmgiCisKKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorCisjaW5jbHVkZSAibG9nLmgiCisjaW5jbHVkZSAicGdtcGF0aC5oIgorI2luY2x1ZGUgImZpbGUuaCIKKworY2hhciAqCitnZXRQcm9ncmFtUGF0aCAodm9pZCkgeworICByZXR1cm4gcmVhZFN5bWJvbGljTGluaygiL3Byb2Mvc2VsZi9leGUiKTsKK30KZGlmZiAtLWdpdCBhL1Byb2dyYW1zL3BnbXBhdGhfbm9uZS5jIGIvUHJvZ3JhbXMvcGdtcGF0aF9ub25lLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGNiYWQ5OAotLS0gL2Rldi9udWxsCisrKyBiL1Byb2dyYW1zL3BnbXBhdGhfbm9uZS5jCkBAIC0wLDAgKzEsMjYgQEAKKy8qCisgKiBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorICogICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorICoKKyAqIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorICoKKyAqIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyAqLworCisjaW5jbHVkZSAicHJvbG9ndWUuaCIKKworI2luY2x1ZGUgInBnbXBhdGguaCIKKworY2hhciAqCitnZXRQcm9ncmFtUGF0aCAodm9pZCkgeworICByZXR1cm4gTlVMTDsKK30KZGlmZiAtLWdpdCBhL1Byb2dyYW1zL3BnbXBhdGhfc29sYXJpcy5jIGIvUHJvZ3JhbXMvcGdtcGF0aF9zb2xhcmlzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWJmNGU2ZQotLS0gL2Rldi9udWxsCisrKyBiL1Byb2dyYW1zL3BnbXBhdGhfc29sYXJpcy5jCkBAIC0wLDAgKzEsMzEgQEAKKy8qCisgKiBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorICogICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorICoKKyAqIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorICoKKyAqIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyAqLworCisjaW5jbHVkZSAicHJvbG9ndWUuaCIKKworI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisKKyNpbmNsdWRlICJsb2cuaCIKKyNpbmNsdWRlICJwZ21wYXRoLmgiCisjaW5jbHVkZSAiZmlsZS5oIgorCitjaGFyICoKK2dldFByb2dyYW1QYXRoICh2b2lkKSB7CisgIHJldHVybiByZWFkU3ltYm9saWNMaW5rKCIvcHJvYy9zZWxmL3BhdGgvYS5vdXQiKTsKK30KZGlmZiAtLWdpdCBhL1Byb2dyYW1zL3BnbXBhdGhfd2luZG93cy5jIGIvUHJvZ3JhbXMvcGdtcGF0aF93aW5kb3dzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTkzMWIxNQotLS0gL2Rldi9udWxsCisrKyBiL1Byb2dyYW1zL3BnbXBhdGhfd2luZG93cy5jCkBAIC0wLDAgKzEsNzUgQEAKKy8qCisgKiBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorICogICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorICoKKyAqIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorICoKKyAqIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyAqLworCisjaW5jbHVkZSAicHJvbG9ndWUuaCIKKworI2luY2x1ZGUgImxvZy5oIgorI2luY2x1ZGUgInBnbXBhdGguaCIKKyNpbmNsdWRlICJzeXN0ZW1fd2luZG93cy5oIgorCitjaGFyICoKK2dldFByb2dyYW1QYXRoICh2b2lkKSB7CisgIGNoYXIgKnBhdGggPSBOVUxMOworICBITU9EVUxFIGhhbmRsZTsKKworICBpZiAoKGhhbmRsZSA9IEdldE1vZHVsZUhhbmRsZShOVUxMKSkpIHsKKyAgICBzaXplX3Qgc2l6ZSA9IDBYODA7CisgICAgY2hhciAqYnVmZmVyID0gTlVMTDsKKworICAgIHdoaWxlICgxKSB7CisgICAgICB7CisgICAgICAgIGNoYXIgKm5ld0J1ZmZlciA9IHJlYWxsb2MoYnVmZmVyLCBzaXplPDw9MSk7CisKKyAgICAgICAgaWYgKCFuZXdCdWZmZXIpIHsKKyAgICAgICAgICBsb2dNYWxsb2NFcnJvcigpOworICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgYnVmZmVyID0gbmV3QnVmZmVyOworICAgICAgfQorCisgICAgICB7CisgICAgICAgIERXT1JEIGxlbmd0aCA9IEdldE1vZHVsZUZpbGVOYW1lKGhhbmRsZSwgYnVmZmVyLCBzaXplKTsKKworICAgICAgICBpZiAoIWxlbmd0aCkgeworICAgICAgICAgIGxvZ1dpbmRvd3NTeXN0ZW1FcnJvcigiR2V0TW9kdWxlRmlsZU5hbWUiKTsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChsZW5ndGggPCBzaXplKSB7CisgICAgICAgICAgYnVmZmVyW2xlbmd0aF0gPSAwOworICAgICAgICAgIGlmICgocGF0aCA9IHN0cmR1cChidWZmZXIpKSkgeworICAgICAgICAgICAgd2hpbGUgKGxlbmd0aCA+IDApCisgICAgICAgICAgICAgIGlmIChwYXRoWy0tbGVuZ3RoXSA9PSAnXFwnKQorICAgICAgICAgICAgICAgIHBhdGhbbGVuZ3RoXSA9ICcvJzsKKyAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgbG9nTWFsbG9jRXJyb3IoKTsKKyAgICAgICAgICB9CisKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgfQorICAgIH0KKworICAgIGZyZWUoYnVmZmVyKTsKKyAgfSBlbHNlIHsKKyAgICBsb2dXaW5kb3dzU3lzdGVtRXJyb3IoIkdldE1vZHVsZUhhbmRsZSIpOworICB9CisKKyAgcmV0dXJuIHBhdGg7Cit9CmRpZmYgLS1naXQgYS9Qcm9ncmFtcy9wZ21wcml2c19saW51eC5jIGIvUHJvZ3JhbXMvcGdtcHJpdnNfbGludXguYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wODcwMTMxCi0tLSAvZGV2L251bGwKKysrIGIvUHJvZ3JhbXMvcGdtcHJpdnNfbGludXguYwpAQCAtMCwwICsxLDIyODcgQEAKKy8qCisgKiBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorICogICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorICoKKyAqIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorICoKKyAqIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyAqLworCisjaW5jbHVkZSAicHJvbG9ndWUuaCIKKworI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKworI2luY2x1ZGUgImxvZy5oIgorI2luY2x1ZGUgInN0cmZtdC5oIgorI2luY2x1ZGUgInBnbXByaXZzLmgiCisjaW5jbHVkZSAic3lzdGVtX2xpbnV4LmgiCisjaW5jbHVkZSAiZmlsZS5oIgorI2luY2x1ZGUgInBhcnNlLmgiCisKKyNkZWZpbmUgU0NGX0xPR19MRVZFTCBMT0dfREVCVUcKKyNkZWZpbmUgU0NGX0xPR19QUk9HUkFNIDAKKworLy8jdW5kZWYgSEFWRV9QV0RfSAorLy8jdW5kZWYgSEFWRV9HUlBfSAorLy8jdW5kZWYgSEFWRV9TWVNfUFJDVExfSAorLy8jdW5kZWYgSEFWRV9TWVNfQ0FQQUJJTElUWV9ICisvLyN1bmRlZiBIQVZFX0xJQkNBUAorLy8jdW5kZWYgSEFWRV9TQ0hFRF9ICisvLyN1bmRlZiBIQVZFX0xJTlVYX0FVRElUX0gKKy8vI3VuZGVmIEhBVkVfTElOVVhfRklMVEVSX0gKKy8vI3VuZGVmIEhBVkVfTElOVVhfU0VDQ09NUF9ICisKKyNpZmRlZiBIQVZFX1NZU19QUkNUTF9ICisjaW5jbHVkZSA8c3lzL3ByY3RsLmg+CisjZW5kaWYgLyogSEFWRV9TWVNfUFJDVExfSCAqLworCisjaWZkZWYgSEFWRV9QV0RfSAorI2luY2x1ZGUgPHB3ZC5oPgorI2VuZGlmIC8qIEhBVkVfUFdEX0ggKi8KKworI2lmZGVmIEhBVkVfR1JQX0gKKyNpbmNsdWRlIDxncnAuaD4KKyNlbmRpZiAvKiBIQVZFX0dSUF9IICovCisKKyNpZmRlZiBIQVZFX0xJQkNBUAorI2lmZGVmIEhBVkVfU1lTX0NBUEFCSUxJVFlfSAorI2luY2x1ZGUgPHN5cy9jYXBhYmlsaXR5Lmg+CisKK3N0YXRpYworU1RSX0JFR0lOX0ZPUk1BVFRFUihmb3JtYXRDYXBhYmlsaXR5TmFtZSwgY2FwX3ZhbHVlX3QgY2FwYWJpbGl0eSkKKyAgeworICAgIGNoYXIgKm5hbWUgPSBjYXBfdG9fbmFtZShjYXBhYmlsaXR5KTsKKworICAgIGlmIChuYW1lKSB7CisgICAgICBTVFJfUFJJTlRGKCIlcyIsIG5hbWUpOworICAgICAgY2FwX2ZyZWUobmFtZSk7CisgICAgfQorICB9CisKKyAgaWYgKCFTVFJfTEVOR1RIKSBTVFJfUFJJTlRGKCJDQVAjJWQiLCBjYXBhYmlsaXR5KTsKK1NUUl9FTkRfRk9STUFUVEVSCisKKyNkZWZpbmUgTUFLRV9DQVBBQklMSVRZX05BTUUoYnVmZmVyLGNhcGFiaWxpdHkpIFwKK2NoYXIgYnVmZmVyWzBYMjBdOyBcCitTVFJfQkVHSU4oYnVmZmVyLCBzaXplb2YoYnVmZmVyKSk7IFwKK1NUUl9GT1JNQVQoZm9ybWF0Q2FwYWJpbGl0eU5hbWUsIGNhcGFiaWxpdHkpOyBcCitTVFJfRU5EOworCitzdGF0aWMgaW50CitoYXNDYXBhYmlsaXR5IChjYXBfdCBjYXBzLCBjYXBfZmxhZ190IHNldCwgY2FwX3ZhbHVlX3QgY2FwYWJpbGl0eSkgeworICBjYXBfZmxhZ192YWx1ZV90IHZhbHVlOworICBpZiAoY2FwX2dldF9mbGFnKGNhcHMsIGNhcGFiaWxpdHksIHNldCwgJnZhbHVlKSAhPSAtMSkgcmV0dXJuIHZhbHVlID09IENBUF9TRVQ7CisgIGxvZ1N5c3RlbUVycm9yKCJjYXBfZ2V0X2ZsYWciKTsKKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK3NldENhcGFiaWxpdGllcyAoY2FwX3QgY2FwcykgeworICBpZiAoY2FwX3NldF9wcm9jKGNhcHMpICE9IC0xKSByZXR1cm4gMTsKKyAgbG9nU3lzdGVtRXJyb3IoImNhcF9zZXRfcHJvYyIpOworICByZXR1cm4gMDsKK30KKworc3RhdGljIGludAorYWRkQ2FwYWJpbGl0eSAoY2FwX3QgY2FwcywgY2FwX2ZsYWdfdCBzZXQsIGNhcF92YWx1ZV90IGNhcGFiaWxpdHkpIHsKKyAgaWYgKGNhcF9zZXRfZmxhZyhjYXBzLCBzZXQsIDEsICZjYXBhYmlsaXR5LCBDQVBfU0VUKSAhPSAtMSkgcmV0dXJuIDE7CisgIGxvZ1N5c3RlbUVycm9yKCJjYXBfc2V0X2ZsYWciKTsKKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK3JlcXVlc3RDYXBhYmlsaXR5IChjYXBfdCBjYXBzLCBjYXBfdmFsdWVfdCBjYXBhYmlsaXR5LCBpbnQgaW5oZXJpdGFibGUpIHsKKyAgaWYgKCFoYXNDYXBhYmlsaXR5KGNhcHMsIENBUF9FRkZFQ1RJVkUsIGNhcGFiaWxpdHkpKSB7CisgICAgaWYgKCFoYXNDYXBhYmlsaXR5KGNhcHMsIENBUF9QRVJNSVRURUQsIGNhcGFiaWxpdHkpKSB7CisgICAgICBNQUtFX0NBUEFCSUxJVFlfTkFNRShuYW1lQnVmZmVyLCBjYXBhYmlsaXR5KTsKKyAgICAgIGxvZ01lc3NhZ2UoTE9HX0RFQlVHLCAiY2FwYWJpbGl0eSBub3QgcGVybWl0dGVkOiAlcyIsIG5hbWVCdWZmZXIpOworICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgaWYgKCFhZGRDYXBhYmlsaXR5KGNhcHMsIENBUF9FRkZFQ1RJVkUsIGNhcGFiaWxpdHkpKSByZXR1cm4gMDsKKyAgICBpZiAoIWluaGVyaXRhYmxlKSByZXR1cm4gc2V0Q2FwYWJpbGl0aWVzKGNhcHMpOworICB9IGVsc2UgaWYgKCFpbmhlcml0YWJsZSkgeworICAgIHJldHVybiAxOworICB9CisKKyAgaWYgKCFoYXNDYXBhYmlsaXR5KGNhcHMsIENBUF9JTkhFUklUQUJMRSwgY2FwYWJpbGl0eSkpIHsKKyAgICBpZiAoIWFkZENhcGFiaWxpdHkoY2FwcywgQ0FQX0lOSEVSSVRBQkxFLCBjYXBhYmlsaXR5KSkgeworICAgICAgcmV0dXJuIDA7CisgICAgfQorICB9CisKKyAgaWYgKHNldENhcGFiaWxpdGllcyhjYXBzKSkgeworI2lmZGVmIFBSX0NBUF9BTUJJRU5UX1JBSVNFCisgICAgaWYgKHByY3RsKFBSX0NBUF9BTUJJRU5ULCBQUl9DQVBfQU1CSUVOVF9SQUlTRSwgY2FwYWJpbGl0eSwgMCwgMCkgIT0gLTEpIHJldHVybiAxOworICAgIGxvZ1N5c3RlbUVycm9yKCJwcmN0bFtQUl9DQVBfQU1CSUVOVF9SQUlTRV0iKTsKKyNlbHNlIC8qIFBSX0NBUF9BTUJJRU5UX1JBSVNFICovCisgICAgbG9nTWVzc2FnZShMT0dfV0FSTklORywgImNhbid0IHJhaXNlIGFtYmllbnQgY2FwYWJpbGl0aWVzIik7CisjZW5kaWYgLyogUFJfQ0FQX0FNQklFTlRfUkFJU0UgKi8KKyAgfQorCisgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50CituZWVkQ2FwYWJpbGl0eSAoY2FwX3ZhbHVlX3QgY2FwYWJpbGl0eSwgaW50IGluaGVyaXRhYmxlLCBjb25zdCBjaGFyICpyZWFzb24pIHsKKyAgaW50IGhhdmVDYXBhYmlsaXR5ID0gMDsKKyAgY29uc3QgY2hhciAqb3V0Y29tZSA9IE5VTEw7CisgIGNhcF90IGNhcHM7CisKKyAgaWYgKChjYXBzID0gY2FwX2dldF9wcm9jKCkpKSB7CisgICAgaWYgKGhhc0NhcGFiaWxpdHkoY2FwcywgQ0FQX0VGRkVDVElWRSwgY2FwYWJpbGl0eSkpIHsKKyAgICAgIGhhdmVDYXBhYmlsaXR5ID0gMTsKKyAgICAgIG91dGNvbWUgPSAiYWxyZWFkeSBhZGRlZCI7CisgICAgfSBlbHNlIGlmIChyZXF1ZXN0Q2FwYWJpbGl0eShjYXBzLCBjYXBhYmlsaXR5LCBpbmhlcml0YWJsZSkpIHsKKyAgICAgIGhhdmVDYXBhYmlsaXR5ID0gMTsKKyAgICAgIG91dGNvbWUgPSAiYWRkZWQiOworICAgIH0gZWxzZSB7CisgICAgICBvdXRjb21lID0gIm5vdCBncmFudGVkIjsKKyAgICB9CisKKyAgICBjYXBfZnJlZShjYXBzKTsKKyAgfSBlbHNlIHsKKyAgICBsb2dTeXN0ZW1FcnJvcigiY2FwX2dldF9wcm9jIik7CisgIH0KKworICBpZiAob3V0Y29tZSkgeworICAgIE1BS0VfQ0FQQUJJTElUWV9OQU1FKG5hbWVCdWZmZXIsIGNhcGFiaWxpdHkpOworCisgICAgbG9nTWVzc2FnZShMT0dfREVCVUcsCisgICAgICAidGVtcG9yYXJ5IGNhcGFiaWxpdHkgJXM6ICVzICglcykiLAorICAgICAgb3V0Y29tZSwgbmFtZUJ1ZmZlciwgcmVhc29uCisgICAgKTsKKyAgfQorCisgIHJldHVybiBoYXZlQ2FwYWJpbGl0eTsKK30KKyNlbmRpZiAvKiBIQVZFX1NZU19DQVBBQklMSVRZX0ggKi8KKyNlbmRpZiAvKiBIQVZFX0xJQkNBUCAqLworCisjaWYgZGVmaW5lZChIQVZFX0dSUF9IKSB8fCBkZWZpbmVkKEhBVkVfUFdEX0gpCitzdGF0aWMgaW50CitjYW5TZXRTdXBwbGVtZW50YXJ5R3JvdXBzIChjb25zdCBjaGFyICpyZWFzb24pIHsKKyNpZmRlZiBDQVBfU0VUR0lECisgIGlmIChuZWVkQ2FwYWJpbGl0eShDQVBfU0VUR0lELCAwLCByZWFzb24pKSB7CisgICAgcmV0dXJuIDE7CisgIH0KKyNlbmRpZiAvKiBDQVBfU0VUR0lEICovCisKKyAgcmV0dXJuIDA7Cit9CisjZW5kaWYgLyogZGVmaW5lZChIQVZFX0dSUF9IKSB8fCBkZWZpbmVkKEhBVkVfUFdEX0gpICovCisKK3N0YXRpYyBpbnQKK2FtUHJpdmlsZWdlZFVzZXIgKHZvaWQpIHsKKyAgcmV0dXJuICFnZXRldWlkKCk7Cit9CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgY29uc3QgY2hhciAqcmVhc29uOworICBpbnQgKCppbnN0YWxsKSAodm9pZCk7Cit9IEtlcm5lbE1vZHVsZUVudHJ5OworCitzdGF0aWMgY29uc3QgS2VybmVsTW9kdWxlRW50cnkga2VybmVsTW9kdWxlVGFibGVbXSA9IHsKKyAgeyAucmVhc29uID0gImZvciBwbGF5aW5nIGFsZXJ0IHR1bmVzIHZpYSB0aGUgYnVpbHQtaW4gUEMgc3BlYWtlciIsCisgICAgLmluc3RhbGwgPSBpbnN0YWxsU3BlYWtlck1vZHVsZSwKKyAgfSwKKworICB7IC5yZWFzb24gPSAiZm9yIGNyZWF0aW5nIHZpcnR1YWwgZGV2aWNlcyIsCisgICAgLmluc3RhbGwgPSBpbnN0YWxsVWlucHV0TW9kdWxlLAorICB9LAorfTsgc3RhdGljIGNvbnN0IHVpbnQ4X3Qga2VybmVsTW9kdWxlQ291bnQgPSBBUlJBWV9DT1VOVChrZXJuZWxNb2R1bGVUYWJsZSk7CisKK3N0YXRpYyB2b2lkCitpbnN0YWxsS2VybmVsTW9kdWxlcyAoaW50IHN0YXlQcml2aWxlZ2VkKSB7CisgIGNvbnN0IEtlcm5lbE1vZHVsZUVudHJ5ICprbWUgPSBrZXJuZWxNb2R1bGVUYWJsZTsKKyAgY29uc3QgS2VybmVsTW9kdWxlRW50cnkgKmVuZCA9IGttZSArIGtlcm5lbE1vZHVsZUNvdW50OworCisgIHdoaWxlIChrbWUgPCBlbmQpIHsKKyAgICBrbWUtPmluc3RhbGwoKTsKKyAgICBrbWUgKz0gMTsKKyAgfQorfQorCisjaWZkZWYgSEFWRV9HUlBfSAordHlwZWRlZiBzdHJ1Y3QgeworICBjb25zdCBjaGFyICptZXNzYWdlOworICBjb25zdCBnaWRfdCAqZ3JvdXBzOworICBzaXplX3QgY291bnQ7Cit9IEdyb3Vwc0xvZ0RhdGE7CisKK3N0YXRpYyBzaXplX3QKK2dyb3Vwc0xvZ0Zvcm1hdHRlciAoY2hhciAqYnVmZmVyLCBzaXplX3Qgc2l6ZSwgY29uc3Qgdm9pZCAqZGF0YSkgeworICBjb25zdCBHcm91cHNMb2dEYXRhICpnbGQgPSBkYXRhOworCisgIHNpemVfdCBsZW5ndGg7CisgIFNUUl9CRUdJTihidWZmZXIsIHNpemUpOworICBTVFJfUFJJTlRGKCIlczoiLCBnbGQtPm1lc3NhZ2UpOworCisgIGNvbnN0IGdpZF90ICpnaWQgPSBnbGQtPmdyb3VwczsKKyAgY29uc3QgZ2lkX3QgKmVuZCA9IGdpZCArIGdsZC0+Y291bnQ7CisKKyAgd2hpbGUgKGdpZCA8IGVuZCkgeworICAgIFNUUl9QUklOVEYoIiAlZCIsICpnaWQpOworCisgICAgY29uc3Qgc3RydWN0IGdyb3VwICpncnAgPSBnZXRncmdpZCgqZ2lkKTsKKyAgICBpZiAoZ3JwKSBTVFJfUFJJTlRGKCIoJXMpIiwgZ3JwLT5ncl9uYW1lKTsKKworICAgIGdpZCArPSAxOworICB9CisKKyAgbGVuZ3RoID0gU1RSX0xFTkdUSDsKKyAgU1RSX0VORDsKKyAgcmV0dXJuIGxlbmd0aDsKK30KKworc3RhdGljIHZvaWQKK2xvZ0dyb3VwcyAoaW50IGxldmVsLCBjb25zdCBjaGFyICptZXNzYWdlLCBjb25zdCBnaWRfdCAqZ3JvdXBzLCBzaXplX3QgY291bnQpIHsKKyAgR3JvdXBzTG9nRGF0YSBnbGQgPSB7CisgICAgLm1lc3NhZ2UgPSBtZXNzYWdlLAorICAgIC5ncm91cHMgPSBncm91cHMsCisgICAgLmNvdW50ID0gY291bnQKKyAgfTsKKworICBsb2dEYXRhKGxldmVsLCBncm91cHNMb2dGb3JtYXR0ZXIsICZnbGQpOworfQorCitzdGF0aWMgdm9pZAorbG9nR3JvdXAgKGludCBsZXZlbCwgY29uc3QgY2hhciAqbWVzc2FnZSwgZ2lkX3QgZ3JvdXApIHsKKyAgbG9nR3JvdXBzKGxldmVsLCBtZXNzYWdlLCAmZ3JvdXAsIDEpOworfQorCit0eXBlZGVmIHN0cnVjdCB7CisgIGNvbnN0IGNoYXIgKnJlYXNvbjsKKyAgY29uc3QgY2hhciAqbmFtZTsKKyAgY29uc3QgY2hhciAqcGF0aDsKKyAgdW5zaWduZWQgY2hhciBuZWVkUmVhZDoxOworICB1bnNpZ25lZCBjaGFyIG5lZWRXcml0ZToxOworfSBSZXF1aXJlZEdyb3VwRW50cnk7CisKK3N0YXRpYyBjb25zdCBSZXF1aXJlZEdyb3VwRW50cnkgcmVxdWlyZWRHcm91cFRhYmxlW10gPSB7CisgIHsgLnJlYXNvbiA9ICJmb3IgcmVhZGluZyBzY3JlZW4gY29udGVudCIsCisgICAgLm5hbWUgPSAidHR5IiwKKyAgICAucGF0aCA9ICIvZGV2L3ZjczEiLAorICB9LAorCisgIHsgLnJlYXNvbiA9ICJmb3IgdmlydHVhbCBjb25zb2xlIG1vbml0b3JpbmcgYW5kIGNvbnRyb2wiLAorICAgIC5uYW1lID0gInR0eSIsCisgICAgLnBhdGggPSAiL2Rldi90dHkxIiwKKyAgfSwKKworICB7IC5yZWFzb24gPSAiZm9yIHNlcmlhbCBJL08iLAorICAgIC5wYXRoID0gIi9kZXYvdHR5UzAiLAorICB9LAorCisgIHsgLnJlYXNvbiA9ICJmb3IgVVNCIEkvTyB2aWEgVVNCRlMiLAorICAgIC5wYXRoID0gIi9kZXYvYnVzL3VzYiIsCisgIH0sCisKKyAgeyAucmVhc29uID0gImZvciBwbGF5aW5nIHNvdW5kIHZpYSB0aGUgQUxTQSBmcmFtZXdvcmsiLAorICAgIC5uYW1lID0gImF1ZGlvIiwKKyAgICAucGF0aCA9ICIvZGV2L3NuZC9zZXEiLAorICB9LAorCisgIHsgLnJlYXNvbiA9ICJmb3IgcGxheWluZyBzb3VuZCB2aWEgdGhlIFB1bHNlIEF1ZGlvIGRhZW1vbiIsCisgICAgLm5hbWUgPSAicHVsc2UtYWNjZXNzIiwKKyAgfSwKKworICB7IC5yZWFzb24gPSAiZm9yIG1vbml0b3Jpbmcga2V5Ym9hcmQgaW5wdXQiLAorICAgIC5uYW1lID0gImlucHV0IiwKKyAgICAucGF0aCA9ICIvZGV2L2lucHV0L21pY2UiLAorICB9LAorCisgIHsgLnJlYXNvbiA9ICJmb3IgY3JlYXRpbmcgdmlydHVhbCBkZXZpY2VzIiwKKyAgICAucGF0aCA9ICIvZGV2L3VpbnB1dCIsCisgICAgLm5lZWRSZWFkID0gMSwKKyAgICAubmVlZFdyaXRlID0gMSwKKyAgfSwKKworICB7IC5yZWFzb24gPSAiZm9yIHJlYWRpbmcgQnJsQVBJJ3MgYXV0aG9yaXphdGlvbiBrZXkgZmlsZSIsCisgICAgLnBhdGggPSBCUkxBUElfRVRDRElSICIvIiBCUkxBUElfQVVUSEtFWUZJTEUsCisgICAgLm5lZWRSZWFkID0gMSwKKyAgfSwKK307IHN0YXRpYyBjb25zdCB1aW50OF90IHJlcXVpcmVkR3JvdXBDb3VudCA9IEFSUkFZX0NPVU5UKHJlcXVpcmVkR3JvdXBUYWJsZSk7CisKK3N0YXRpYyB2b2lkCitwcm9jZXNzUmVxdWlyZWRHcm91cHMgKEdyb3Vwc1Byb2Nlc3NvciAqcHJvY2Vzc0dyb3VwcywgaW50IGxvZ1Byb2JsZW1zLCB2b2lkICpkYXRhKSB7CisgIGdpZF90IGdyb3Vwc1tyZXF1aXJlZEdyb3VwQ291bnQgKiAyXTsKKyAgc2l6ZV90IGNvdW50ID0gMDsKKworICB7CisgICAgY29uc3QgUmVxdWlyZWRHcm91cEVudHJ5ICpyZ2UgPSByZXF1aXJlZEdyb3VwVGFibGU7CisgICAgY29uc3QgUmVxdWlyZWRHcm91cEVudHJ5ICplbmQgPSByZ2UgKyByZXF1aXJlZEdyb3VwQ291bnQ7CisKKyAgICB3aGlsZSAocmdlIDwgZW5kKSB7CisgICAgICB7CisgICAgICAgIGNvbnN0IGNoYXIgKm5hbWUgPSByZ2UtPm5hbWU7CisKKyAgICAgICAgaWYgKG5hbWUpIHsKKyAgICAgICAgICBjb25zdCBzdHJ1Y3QgZ3JvdXAgKmdycDsKKworICAgICAgICAgIGlmICgoZ3JwID0gZ2V0Z3JuYW0obmFtZSkpKSB7CisgICAgICAgICAgICBncm91cHNbY291bnQrK10gPSBncnAtPmdyX2dpZDsKKyAgICAgICAgICB9IGVsc2UgaWYgKGxvZ1Byb2JsZW1zKSB7CisgICAgICAgICAgICBsb2dNZXNzYWdlKExPR19ERUJVRywgInVua25vd24gZ3JvdXA6ICVzIiwgbmFtZSk7CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICB9CisKKyAgICAgIHsKKyAgICAgICAgY29uc3QgY2hhciAqcGF0aCA9IHJnZS0+cGF0aDsKKworICAgICAgICBpZiAocGF0aCkgeworICAgICAgICAgIHN0cnVjdCBzdGF0IHN0YXR1czsKKworICAgICAgICAgIGlmIChzdGF0KHBhdGgsICZzdGF0dXMpICE9IC0xKSB7CisgICAgICAgICAgICBncm91cHNbY291bnQrK10gPSBzdGF0dXMuc3RfZ2lkOworCisgICAgICAgICAgICBpZiAobG9nUHJvYmxlbXMpIHsKKyAgICAgICAgICAgICAgaWYgKHJnZS0+bmVlZFJlYWQgJiYgIShzdGF0dXMuc3RfbW9kZSAmIFNfSVJHUlApKSB7CisgICAgICAgICAgICAgICAgbG9nTWVzc2FnZShMT0dfREVCVUcsICJwYXRoIG5vdCBncm91cCByZWFkYWJsZTogJXMiLCBwYXRoKTsKKyAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgIGlmIChyZ2UtPm5lZWRXcml0ZSAmJiAhKHN0YXR1cy5zdF9tb2RlICYgU19JV0dSUCkpIHsKKyAgICAgICAgICAgICAgICBsb2dNZXNzYWdlKExPR19ERUJVRywgInBhdGggbm90IGdyb3VwIHdyaXRhYmxlOiAlcyIsIHBhdGgpOworICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgfSBlbHNlIGlmIChsb2dQcm9ibGVtcykgeworICAgICAgICAgICAgbG9nTWVzc2FnZShMT0dfREVCVUcsICJwYXRoIGFjY2VzcyBlcnJvcjogJXM6ICVzIiwgcGF0aCwgc3RyZXJyb3IoZXJybm8pKTsKKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgIH0KKworICAgICAgcmdlICs9IDE7CisgICAgfQorICB9CisKKyAgcmVtb3ZlRHVwbGljYXRlR3JvdXBzKGdyb3VwcywgJmNvdW50KTsKKyAgcHJvY2Vzc0dyb3Vwcyhncm91cHMsIGNvdW50LCBkYXRhKTsKK30KKwordHlwZWRlZiBzdHJ1Y3QgeworICBjb25zdCBnaWRfdCAqZ3JvdXBzOworICBzaXplX3QgY291bnQ7Cit9IEN1cnJlbnRHcm91cHNEYXRhOworCitzdGF0aWMgdm9pZAorc2V0U3VwcGxlbWVudGFyeUdyb3VwcyAoY29uc3QgZ2lkX3QgKmdyb3Vwcywgc2l6ZV90IGNvdW50LCB2b2lkICpkYXRhKSB7CisgIGlmIChoYXZlU3VwcGxlbWVudGFyeUdyb3Vwcyhncm91cHMsIGNvdW50KSkgcmV0dXJuOworICBjb25zdCBDdXJyZW50R3JvdXBzRGF0YSAqY2dkID0gZGF0YTsKKworICBzaXplX3QgdG90YWwgPSBjb3VudDsKKyAgaWYgKGNnZCkgdG90YWwgKz0gY2dkLT5jb3VudDsKKyAgZ2lkX3QgYnVmZmVyW3RvdGFsXTsKKworICBpZiAoY2dkICYmIChjZ2QtPmNvdW50ID4gMCkpIHsKKyAgICBnaWRfdCAqZ2lkID0gYnVmZmVyOworICAgIGdpZCA9IG1lbXBjcHkoZ2lkLCBncm91cHMsIEFSUkFZX1NJWkUoZ3JvdXBzLCBjb3VudCkpOworCisgICAgaWYgKGNnZCkgeworICAgICAgZ2lkID0gbWVtcGNweShnaWQsIGNnZC0+Z3JvdXBzLCBBUlJBWV9TSVpFKGNnZC0+Z3JvdXBzLCBjZ2QtPmNvdW50KSk7CisgICAgfQorCisgICAgY291bnQgPSBnaWQgLSBidWZmZXI7CisgICAgcmVtb3ZlRHVwbGljYXRlR3JvdXBzKGJ1ZmZlciwgJmNvdW50KTsKKyAgICBncm91cHMgPSBidWZmZXI7CisgIH0KKworICBpZiAoY2FuU2V0U3VwcGxlbWVudGFyeUdyb3VwcygiZm9yIGpvaW5pbmcgdGhlIHJlcXVpcmVkIGdyb3VwcyIpKSB7CisgICAgbG9nR3JvdXBzKExPR19ERUJVRywgInNldHRpbmcgc3VwcGxlbWVudGFyeSBncm91cHMiLCBncm91cHMsIGNvdW50KTsKKworICAgIGlmIChzZXRncm91cHMoY291bnQsIGdyb3VwcykgPT0gLTEpIHsKKyAgICAgIGxvZ1N5c3RlbUVycm9yKCJzZXRncm91cHMiKTsKKyAgICB9CisgIH0gZWxzZSB7CisgICAgbG9nTWVzc2FnZShMT0dfV0FSTklORywgImNhbid0IHNldCBzdXBwbGVtZW50YXJ5IGdyb3VwcyIpOworICB9Cit9CisKK3N0YXRpYyB2b2lkCitqb2luUmVxdWlyZWRHcm91cHMgKGludCBzdGF5UHJpdmlsZWdlZCkgeworICBjb25zdCBpbnQgbG9nUHJvYmxlbXMgPSAxOworCisjaWZkZWYgSEFWRV9QV0RfSAorICBpZiAoc3RheVByaXZpbGVnZWQgfHwgIWFtUHJpdmlsZWdlZFVzZXIoKSkgeworICAgIHVpZF90IHVpZCA9IGdldGV1aWQoKTsKKyAgICBjb25zdCBzdHJ1Y3QgcGFzc3dkICpwd2QgPSBnZXRwd3VpZCh1aWQpOworCisgICAgaWYgKHB3ZCkgeworICAgICAgY29uc3QgY2hhciAqdXNlciA9IHB3ZC0+cHdfbmFtZTsKKyAgICAgIGdpZF90IGdyb3VwID0gcHdkLT5wd19naWQ7CisKKyAgICAgIGludCBjb3VudCA9IDA7CisgICAgICBnZXRncm91cGxpc3QodXNlciwgZ3JvdXAsIE5VTEwsICZjb3VudCk7CisKKyAgICAgIGNvdW50ICs9IDE7IC8vIGFsbG93IGZvciB0aGUgcHJpbWFyeSBncm91cAorICAgICAgZ2lkX3QgZ3JvdXBzW2NvdW50XTsKKworICAgICAgaWYgKGdldGdyb3VwbGlzdCh1c2VyLCBncm91cCwgZ3JvdXBzLCAmY291bnQpICE9IC0xKSB7CisgICAgICAgIHNpemVfdCBzaXplID0gY291bnQ7CisgICAgICAgIHJlbW92ZUR1cGxpY2F0ZUdyb3Vwcyhncm91cHMsICZzaXplKTsKKworICAgICAgICBDdXJyZW50R3JvdXBzRGF0YSBjZ2QgPSB7CisgICAgICAgICAgLmdyb3VwcyA9IGdyb3VwcywKKyAgICAgICAgICAuY291bnQgPSBzaXplCisgICAgICAgIH07CisKKyAgICAgICAgcHJvY2Vzc1JlcXVpcmVkR3JvdXBzKHNldFN1cHBsZW1lbnRhcnlHcm91cHMsIGxvZ1Byb2JsZW1zLCAmY2dkKTsKKyAgICAgICAgcmV0dXJuOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgbG9nU3lzdGVtRXJyb3IoImdldGdyb3VwbGlzdCIpOworICAgICAgfQorICAgIH0KKyAgfQorI2VuZGlmIC8qIEhBVkVfUFdEX0ggKi8KKworICBwcm9jZXNzUmVxdWlyZWRHcm91cHMoc2V0U3VwcGxlbWVudGFyeUdyb3VwcywgbG9nUHJvYmxlbXMsIE5VTEwpOworfQorCitzdGF0aWMgdm9pZAorbG9nVW5qb2luZWRHcm91cHMgKGNvbnN0IGdpZF90ICpncm91cHMsIHNpemVfdCBjb3VudCwgdm9pZCAqZGF0YSkgeworICBjb25zdCBDdXJyZW50R3JvdXBzRGF0YSAqY2dkID0gZGF0YTsKKworICBjb25zdCBnaWRfdCAqY3VyID0gY2dkLT5ncm91cHM7CisgIGNvbnN0IGdpZF90ICpjdXJFbmQgPSBjdXIgKyBjZ2QtPmNvdW50OworCisgIGNvbnN0IGdpZF90ICpyZXEgPSBncm91cHM7CisgIGNvbnN0IGdpZF90ICpyZXFFbmQgPSByZXEgKyBjb3VudDsKKworICB3aGlsZSAocmVxIDwgcmVxRW5kKSB7CisgICAgaW50IHJlbGF0aW9uID0gKGN1ciA8IGN1ckVuZCk/IGNvbXBhcmVHcm91cHMoKmN1ciwgKnJlcSk6IDE7CisKKyAgICBpZiAocmVsYXRpb24gPiAwKSB7CisgICAgICBsb2dHcm91cChMT0dfV0FSTklORywgImdyb3VwIG5vdCBqb2luZWQiLCAqcmVxKyspOworICAgIH0gZWxzZSB7CisgICAgICBpZiAoIXJlbGF0aW9uKSByZXEgKz0gMTsKKyAgICAgIGN1ciArPSAxOworICAgIH0KKyAgfQorfQorCitzdGF0aWMgdm9pZAorbG9nV2FudGVkR3JvdXBzIChjb25zdCBnaWRfdCAqZ3JvdXBzLCBzaXplX3QgY291bnQsIHZvaWQgKmRhdGEpIHsKKyAgQ3VycmVudEdyb3Vwc0RhdGEgY2dkID0geworICAgIC5ncm91cHMgPSBncm91cHMsCisgICAgLmNvdW50ID0gY291bnQKKyAgfTsKKworICBwcm9jZXNzUmVxdWlyZWRHcm91cHMobG9nVW5qb2luZWRHcm91cHMsIDAsICZjZ2QpOworfQorCitzdGF0aWMgdm9pZAorbG9nTWlzc2luZ0dyb3VwcyAodm9pZCkgeworICBwcm9jZXNzU3VwcGxlbWVudGFyeUdyb3Vwcyhsb2dXYW50ZWRHcm91cHMsIE5VTEwpOworfQorCitzdGF0aWMgdm9pZAorY2xvc2VHcm91cHNEYXRhYmFzZSAodm9pZCkgeworICBlbmRncmVudCgpOworfQorI2VuZGlmIC8qIEhBVkVfR1JQX0ggKi8KKworI2lmZGVmIENBUF9JU19TVVBQT1JURUQKK3R5cGVkZWYgc3RydWN0IHsKKyAgY29uc3QgY2hhciAqbGFiZWw7CisgIGNhcF90IGNhcHM7Cit9IENhcGFiaWxpdGllc0xvZ0RhdGE7CisKK3N0YXRpYyBzaXplX3QKK2NhcGFiaWxpdGllc0xvZ0Zvcm1hdHRlciAoY2hhciAqYnVmZmVyLCBzaXplX3Qgc2l6ZSwgY29uc3Qgdm9pZCAqZGF0YSkgeworICBjb25zdCBDYXBhYmlsaXRpZXNMb2dEYXRhICpjbGQgPSBkYXRhOworCisgIHNpemVfdCBsZW5ndGg7CisgIFNUUl9CRUdJTihidWZmZXIsIHNpemUpOworICBTVFJfUFJJTlRGKCJjYXBhYmlsaXRpZXM6ICVzOiIsIGNsZC0+bGFiZWwpOworCisgIGludCBjYXBzQWxsb2NhdGVkID0gMDsKKyAgY2FwX3QgY2FwczsKKworICBpZiAoIShjYXBzID0gY2xkLT5jYXBzKSkgeworICAgIGlmICghKGNhcHMgPSBjYXBfZ2V0X3Byb2MoKSkpIHsKKyAgICAgIGxvZ1N5c3RlbUVycm9yKCJjYXBfZ2V0X3Byb2MiKTsKKyAgICAgIGdvdG8gZG9uZTsKKyAgICB9CisKKyAgICBjYXBzQWxsb2NhdGVkID0gMTsKKyAgfQorCisgIHsKKyAgICBjaGFyICp0ZXh0OworCisgICAgaWYgKCh0ZXh0ID0gY2FwX3RvX3RleHQoY2FwcywgTlVMTCkpKSB7CisgICAgICBTVFJfUFJJTlRGKCIgJXMiLCB0ZXh0KTsKKyAgICAgIGNhcF9mcmVlKHRleHQpOworICAgIH0gZWxzZSB7CisgICAgICBsb2dTeXN0ZW1FcnJvcigiY2FwX3RvX3RleHQiKTsKKyAgICB9CisgIH0KKworICBpZiAoY2Fwc0FsbG9jYXRlZCkgeworICAgIGNhcF9mcmVlKGNhcHMpOworICAgIGNhcHMgPSBOVUxMOworICB9CisKK2RvbmU6CisgIGxlbmd0aCA9IFNUUl9MRU5HVEg7CisgIFNUUl9FTkQ7CisgIHJldHVybiBsZW5ndGg7Cit9CisKK3N0YXRpYyB2b2lkCitsb2dDYXBhYmlsaXRpZXMgKGNhcF90IGNhcHMsIGNvbnN0IGNoYXIgKmxhYmVsKSB7CisgIENhcGFiaWxpdGllc0xvZ0RhdGEgY2xkID0geyAubGFiZWw9bGFiZWwsIC5jYXBzPWNhcHMgfTsKKyAgbG9nRGF0YShMT0dfREVCVUcsIGNhcGFiaWxpdGllc0xvZ0Zvcm1hdHRlciwgJmNsZCk7Cit9CisKK3N0YXRpYyB2b2lkCitsb2dDdXJyZW50Q2FwYWJpbGl0aWVzIChjb25zdCBjaGFyICpsYWJlbCkgeworICBsb2dDYXBhYmlsaXRpZXMoTlVMTCwgbGFiZWwpOworfQorCit0eXBlZGVmIHN0cnVjdCB7CisgIGNvbnN0IGNoYXIgKnJlYXNvbjsKKyAgY2FwX3ZhbHVlX3QgdmFsdWU7Cit9IFJlcXVpcmVkQ2FwYWJpbGl0eUVudHJ5OworCitzdGF0aWMgY29uc3QgUmVxdWlyZWRDYXBhYmlsaXR5RW50cnkgcmVxdWlyZWRDYXBhYmlsaXR5VGFibGVbXSA9IHsKKyAgeyAucmVhc29uID0gImZvciBpbmplY3RpbmcgaW5wdXQgY2hhcmFjdGVycyB0eXBlZCBvbiBhIGJyYWlsbGUgZGV2aWNlIiwKKyAgICAudmFsdWUgPSBDQVBfU1lTX0FETUlOLAorICB9LAorCisgIHsgLnJlYXNvbiA9ICJmb3IgcGxheWluZyBhbGVydCB0dW5lcyB2aWEgdGhlIGJ1aWx0LWluIFBDIHNwZWFrZXIiLAorICAgIC52YWx1ZSA9IENBUF9TWVNfVFRZX0NPTkZJRywKKyAgfSwKKworICB7IC5yZWFzb24gPSAiZm9yIGNyZWF0aW5nIG5lZWRlZCBidXQgbWlzc2luZyBzcGVjaWFsIGRldmljZSBmaWxlcyIsCisgICAgLnZhbHVlID0gQ0FQX01LTk9ELAorICB9LAorfTsgc3RhdGljIGNvbnN0IHVpbnQ4X3QgcmVxdWlyZWRDYXBhYmlsaXR5Q291bnQgPSBBUlJBWV9DT1VOVChyZXF1aXJlZENhcGFiaWxpdHlUYWJsZSk7CisKK3N0YXRpYyB2b2lkCitzZXRSZXF1aXJlZENhcGFiaWxpdGllcyAoaW50IHN0YXlQcml2aWxlZ2VkKSB7CisgIGNhcF90IG5ld0NhcHMsIG9sZENhcHM7CisKKyAgaWYgKGFtUHJpdmlsZWdlZFVzZXIoKSkgeworICAgIG9sZENhcHMgPSBOVUxMOworICB9IGVsc2UgaWYgKCEob2xkQ2FwcyA9IGNhcF9nZXRfcHJvYygpKSkgeworICAgIGxvZ1N5c3RlbUVycm9yKCJjYXBfZ2V0X3Byb2MiKTsKKyAgICByZXR1cm47CisgIH0KKworICB7CisgICAgY2FwX3QgKCpmdW5jdGlvbikgKHZvaWQpOworICAgIGNvbnN0IGNoYXIgKm5hbWU7CisKKyAgICBpZiAoc3RheVByaXZpbGVnZWQpIHsKKyAgICAgIGZ1bmN0aW9uID0gY2FwX2dldF9wcm9jOworICAgICAgbmFtZSA9ICJjYXBfZ2V0X3Byb2MiOworICAgIH0gZWxzZSB7CisgICAgICBmdW5jdGlvbiA9IGNhcF9pbml0OworICAgICAgbmFtZSA9ICJjYXBfaW5pdCI7CisgICAgfQorCisgICAgaWYgKCEobmV3Q2FwcyA9IGZ1bmN0aW9uKCkpKSBsb2dTeXN0ZW1FcnJvcihuYW1lKTsKKyAgfQorCisgIGlmIChuZXdDYXBzKSB7CisgICAgeworICAgICAgY29uc3QgUmVxdWlyZWRDYXBhYmlsaXR5RW50cnkgKnJjZSA9IHJlcXVpcmVkQ2FwYWJpbGl0eVRhYmxlOworICAgICAgY29uc3QgUmVxdWlyZWRDYXBhYmlsaXR5RW50cnkgKmVuZCA9IHJjZSArIHJlcXVpcmVkQ2FwYWJpbGl0eUNvdW50OworCisgICAgICB3aGlsZSAocmNlIDwgZW5kKSB7CisgICAgICAgIGNhcF92YWx1ZV90IGNhcGFiaWxpdHkgPSByY2UtPnZhbHVlOworCisgICAgICAgIGlmICghb2xkQ2FwcyB8fCBoYXNDYXBhYmlsaXR5KG9sZENhcHMsIENBUF9QRVJNSVRURUQsIGNhcGFiaWxpdHkpKSB7CisgICAgICAgICAgaWYgKCFhZGRDYXBhYmlsaXR5KG5ld0NhcHMsIENBUF9QRVJNSVRURUQsIGNhcGFiaWxpdHkpKSBicmVhazsKKyAgICAgICAgICBpZiAoIWFkZENhcGFiaWxpdHkobmV3Q2FwcywgQ0FQX0VGRkVDVElWRSwgY2FwYWJpbGl0eSkpIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgcmNlICs9IDE7CisgICAgICB9CisgICAgfQorCisgICAgc2V0Q2FwYWJpbGl0aWVzKG5ld0NhcHMpOworICAgIGNhcF9mcmVlKG5ld0NhcHMpOworICB9CisKKyNpZmRlZiBQUl9DQVBfQU1CSUVOVF9DTEVBUl9BTEwKKyAgaWYgKHByY3RsKFBSX0NBUF9BTUJJRU5ULCBQUl9DQVBfQU1CSUVOVF9DTEVBUl9BTEwsIDAsIDAsIDApID09IC0xKSB7CisgICAgbG9nU3lzdGVtRXJyb3IoInByY3RsW1BSX0NBUF9BTUJJRU5UX0NMRUFSX0FMTF0iKTsKKyAgfQorI2Vsc2UgLyogUFJfQ0FQX0FNQklFTlRfQ0xFQVJfQUxMICovCisgIGxvZ01lc3NhZ2UoTE9HX1dBUk5JTkcsICJjYW4ndCBjbGVhciBhbWJpZW50IGNhcGFiaWxpdGllcyIpOworI2VuZGlmIC8qIFBSX0NBUF9BTUJJRU5UX0NMRUFSX0FMTCAqLworCisgIGlmIChvbGRDYXBzKSBjYXBfZnJlZShvbGRDYXBzKTsKK30KKworc3RhdGljIHZvaWQKK2xvZ01pc3NpbmdDYXBhYmlsaXRpZXMgKHZvaWQpIHsKKyAgY2FwX3QgY2FwczsKKworICBpZiAoKGNhcHMgPSBjYXBfZ2V0X3Byb2MoKSkpIHsKKyAgICBjb25zdCBSZXF1aXJlZENhcGFiaWxpdHlFbnRyeSAqcmNlID0gcmVxdWlyZWRDYXBhYmlsaXR5VGFibGU7CisgICAgY29uc3QgUmVxdWlyZWRDYXBhYmlsaXR5RW50cnkgKmVuZCA9IHJjZSArIHJlcXVpcmVkQ2FwYWJpbGl0eUNvdW50OworCisgICAgd2hpbGUgKHJjZSA8IGVuZCkgeworICAgICAgY2FwX3ZhbHVlX3QgY2FwYWJpbGl0eSA9IHJjZS0+dmFsdWU7CisKKyAgICAgIGlmICghaGFzQ2FwYWJpbGl0eShjYXBzLCBDQVBfRUZGRUNUSVZFLCBjYXBhYmlsaXR5KSkgeworICAgICAgICBNQUtFX0NBUEFCSUxJVFlfTkFNRShuYW1lQnVmZmVyLCBjYXBhYmlsaXR5KTsKKworICAgICAgICBsb2dNZXNzYWdlKExPR19XQVJOSU5HLAorICAgICAgICAgICJyZXF1aXJlZCBjYXBhYmlsaXR5IG5vdCBncmFudGVkOiAlcyAoJXMpIiwKKyAgICAgICAgICBuYW1lQnVmZmVyLCByY2UtPnJlYXNvbgorICAgICAgICApOworICAgICAgfQorCisgICAgICByY2UgKz0gMTsKKyAgICB9CisKKyAgICBjYXBfZnJlZShjYXBzKTsKKyAgfSBlbHNlIHsKKyAgICBsb2dTeXN0ZW1FcnJvcigiY2FwX2dldF9wcm9jIik7CisgIH0KK30KKworI2Vsc2UgLyogQ0FQX0lTX1NVUFBPUlRFRCAqLworc3RhdGljIHZvaWQKK2xvZ0N1cnJlbnRDYXBhYmlsaXRpZXMgKGNvbnN0IGNoYXIgKmxhYmVsKSB7Cit9CisjZW5kaWYgLyogQ0FQX0lTX1NVUFBPUlRFRCAqLworCisjaWZkZWYgSEFWRV9TQ0hFRF9ICisjaW5jbHVkZSA8c2NoZWQuaD4KKwordHlwZWRlZiBzdHJ1Y3QgeworICBjb25zdCBjaGFyICpuYW1lOworICBjb25zdCBjaGFyICpzdW1tYXJ5OworICBpbnQgdW5zaGFyZUZsYWc7Cit9IElzb2xhdGVkTmFtZXNwYWNlRW50cnk7CisKK3N0YXRpYyBjb25zdCBJc29sYXRlZE5hbWVzcGFjZUVudHJ5IGlzb2xhdGVkTmFtZXNwYWNlVGFibGVbXSA9IHsKKyAgI2lmZGVmIENMT05FX05FV0NHUk9VUAorICB7IC51bnNoYXJlRmxhZyA9IENMT05FX05FV0NHUk9VUCwKKyAgICAubmFtZSA9ICJjZ3JvdXAiLAorICAgIC5zdW1tYXJ5ID0gImNvbnRyb2wgZ3JvdXBzIiwKKyAgfSwKKyAgI2VuZGlmIC8qIENMT05FX05FV0NHUk9VUCAqLworCisgICNpZmRlZiBDTE9ORV9ORVdOUworICB7IC51bnNoYXJlRmxhZyA9IENMT05FX05FV05TLAorICAgIC5uYW1lID0gIm1vdW50IiwKKyAgICAuc3VtbWFyeSA9ICJtb3VudCBwb2ludHMiLAorICB9LAorICAjZW5kaWYgLyogQ0xPTkVfTkVXTlMgKi8KKworICAjaWZkZWYgQ0xPTkVfTkVXVVRTCisgIHsgLnVuc2hhcmVGbGFnID0gQ0xPTkVfTkVXVVRTLAorICAgIC5uYW1lID0gIlVUUyIsCisgICAgLnN1bW1hcnkgPSAiaG9zdCBuYW1lIGFuZCBOSVMgZG9tYWluIG5hbWUiLAorICB9LAorICAjZW5kaWYgLyogQ0xPTkVfTkVXVVRTICovCit9OyBzdGF0aWMgY29uc3QgdWludDhfdCBpc29sYXRlZE5hbWVzcGFjZUNvdW50ID0gQVJSQVlfQ09VTlQoaXNvbGF0ZWROYW1lc3BhY2VUYWJsZSk7CisKK3N0YXRpYyB2b2lkCitpc29sYXRlTmFtZXNwYWNlcyAodm9pZCkgeworICBpbnQgY2FuSXNvbGF0ZU5hbWVzcGFjZXMgPSAwOworCisjaWZkZWYgQ0FQX1NZU19BRE1JTgorICBpZiAobmVlZENhcGFiaWxpdHkoQ0FQX1NZU19BRE1JTiwgMCwgImZvciBpc29sYXRpbmcgbmFtZXNwYWNlcyIpKSB7CisgICAgY2FuSXNvbGF0ZU5hbWVzcGFjZXMgPSAxOworICB9CisjZW5kaWYgLyogQ0FQX1NZU19BRE1JTiAqLworCisgIGlmIChjYW5Jc29sYXRlTmFtZXNwYWNlcykgeworICAgIGludCB1bnNoYXJlRmxhZ3MgPSAwOworCisgICAgY29uc3QgSXNvbGF0ZWROYW1lc3BhY2VFbnRyeSAqaW5lID0gaXNvbGF0ZWROYW1lc3BhY2VUYWJsZTsKKyAgICBjb25zdCBJc29sYXRlZE5hbWVzcGFjZUVudHJ5ICplbmQgPSBpbmUgKyBpc29sYXRlZE5hbWVzcGFjZUNvdW50OworCisgICAgd2hpbGUgKGluZSA8IGVuZCkgeworICAgICAgbG9nTWVzc2FnZShMT0dfREVCVUcsCisgICAgICAgICJpc29sYXRpbmcgbmFtZXNwYWNlOiAlcyAoJXMpIiwgaW5lLT5uYW1lLCBpbmUtPnN1bW1hcnkKKyAgICAgICk7CisKKyAgICAgIHVuc2hhcmVGbGFncyB8PSBpbmUtPnVuc2hhcmVGbGFnOworICAgICAgaW5lICs9IDE7CisgICAgfQorCisgICAgaWYgKHVuc2hhcmUodW5zaGFyZUZsYWdzKSA9PSAtMSkgeworICAgICAgbG9nU3lzdGVtRXJyb3IoInVuc2hhcmUiKTsKKyAgICB9CisgIH0gZWxzZSB7CisgICAgbG9nTWVzc2FnZShMT0dfV0FSTklORywgImNhbid0IGlzb2xhdGUgbmFtZXNwYWNlcyIpOworICB9Cit9CisjZW5kaWYgLyogSEFWRV9TQ0hFRF9IICovCisKKyNpZmRlZiBIQVZFX0xJTlVYX0FVRElUX0gKKyNpbmNsdWRlIDxsaW51eC9hdWRpdC5oPgorCisjaWYgZGVmaW5lZChfX2kzODZfXykKKyNkZWZpbmUgU1lTVEVNX0NBTExfQVJDSElURUNUVVJFIEFVRElUX0FSQ0hfSTM4NgorI2VsaWYgZGVmaW5lZChfX3g4Nl82NF9fKQorI2RlZmluZSBTWVNURU1fQ0FMTF9BUkNISVRFQ1RVUkUgQVVESVRfQVJDSF9YODZfNjQKKyNlbHNlIC8qIHN5c3RlbSBjYWxsIGFyY2hpdGVjdHVyZSAqLworI3dhcm5pbmcgc3lzdGVtIGNhbGwgYXJjaGl0ZWN0dXJlIG5vdCBrbm93biBmb3IgdGhpcyBwbGF0Zm9ybQorI2VuZGlmIC8qIHN5c3RlbSBjYWxsIGFyY2hpdGVjdHVyZSAqLworI2VuZGlmIC8qIEhBVkVfTElOVVhfQVVESVRfSCAqLworCisjaWZkZWYgU1lTVEVNX0NBTExfQVJDSElURUNUVVJFCisjaWZkZWYgSEFWRV9MSU5VWF9GSUxURVJfSAorI2luY2x1ZGUgPGxpbnV4L2ZpbHRlci5oPgorCisjaWZkZWYgSEFWRV9MSU5VWF9TRUNDT01QX0gKKyNpbmNsdWRlIDxsaW51eC9zZWNjb21wLmg+CisjZW5kaWYgLyogSEFWRV9MSU5VWF9TRUNDT01QX0ggKi8KKyNlbmRpZiAvKiBIQVZFX0xJTlVYX0ZJTFRFUl9IICovCisjZW5kaWYgLyogU1lTVEVNX0NBTExfQVJDSElURUNUVVJFICovCisKKyNpZmRlZiBTRUNDT01QX01PREVfRklMVEVSCitzdGF0aWMgY29uc3QgIGNoYXIgc2NmTG9nTGFiZWxbXSA9ICJTQ0YiOworCit0eXBlZGVmIHN0cnVjdCBTQ0ZBcmd1bWVudERlc2NyaXB0b3JTdHJ1Y3QgU0NGQXJndW1lbnREZXNjcmlwdG9yOworCisvLyBiZXN0IHRvIHByb3RlY3QgZWFjaCBvZiB0aGVzZSB3aXRoIGFuICNpZmRlZiBmb3IgdGhlIHZhbHVlJ3MgbWFjcm8KK3R5cGVkZWYgc3RydWN0IHsKKyAgLy8gcmVxdWlyZWQgLSBtdXN0IGJlIGZpcnN0CisgIHVpbnQzMl90IHZhbHVlOworCisgIC8vIG9wdGlvbmFsIC0gdXNlIFNDRl9BUkdVTUVOVChpbmRleCwgZ3JvdXApCisgIGNvbnN0IFNDRkFyZ3VtZW50RGVzY3JpcHRvciAqYXJndW1lbnQ7Cit9IFNDRlZhbHVlRGVzY3JpcHRvcjsKKwordHlwZWRlZiBzdHJ1Y3QgeworICBjb25zdCBjaGFyICpuYW1lOworICBjb25zdCBTQ0ZWYWx1ZURlc2NyaXB0b3IgKmRlc2NyaXB0b3JzOworICBzaXplX3QgY291bnQ7Cit9IFNDRlZhbHVlR3JvdXA7CisKKyNkZWZpbmUgU0NGX1ZBTFVFX0dST1VQKGdyb3VwKSB7IFwKKyAgLm5hbWUgPSAjZ3JvdXAsIFwKKyAgLmRlc2NyaXB0b3JzID0gZ3JvdXAjI1ZhbHVlcywgXAorICAuY291bnQgPSBBUlJBWV9DT1VOVChncm91cCMjVmFsdWVzKSwgXAorfQorCitzdHJ1Y3QgU0NGQXJndW1lbnREZXNjcmlwdG9yU3RydWN0IHsKKyAgU0NGVmFsdWVHcm91cCB2YWx1ZXM7CisgIHVpbnQ4X3QgaW5kZXg7Cit9OworCisjZGVmaW5lIFNDRl9BUkdVTUVOVChuLCBncm91cCkgXAorLmFyZ3VtZW50ID0gJihjb25zdCBTQ0ZBcmd1bWVudERlc2NyaXB0b3IpeyBcCisgIC52YWx1ZXMgPSBTQ0ZfVkFMVUVfR1JPVVAoZ3JvdXApLCBcCisgIC5pbmRleCA9IChuKSBcCit9CisKKyNkZWZpbmUgU0NGX0JFR0lOX1ZBTFVFUyhncm91cCkgc3RhdGljIGNvbnN0IFNDRlZhbHVlRGVzY3JpcHRvciBncm91cCMjVmFsdWVzW10gPSB7CisjZGVmaW5lIFNDRl9FTkRfVkFMVUVTIH07CisKKyNpbmNsdWRlICJzeXNjYWxsc19saW51eC5oIgorc3RhdGljIGNvbnN0IFNDRlZhbHVlR3JvdXAgc2NmU3lzdGVtQ2FsbHMgPSBTQ0ZfVkFMVUVfR1JPVVAoc3lzdGVtQ2FsbCk7CisKK3R5cGVkZWYgc3RydWN0IFNDRkp1bXBTdHJ1Y3QgU0NGSnVtcDsKKwordHlwZWRlZiBlbnVtIHsKKyAgU0NGX0pVTVBfQUxXQVlTLAorICBTQ0ZfSlVNUF9UUlVFLAorICBTQ0ZfSlVNUF9GQUxTRQorfSBTQ0ZKdW1wVHlwZTsKKworc3RydWN0IFNDRkp1bXBTdHJ1Y3QgeworICBTQ0ZKdW1wICpuZXh0OworICBzaXplX3QgbG9jYXRpb247CisgIFNDRkp1bXBUeXBlIHR5cGU7Cit9OworCit0eXBlZGVmIHN0cnVjdCB7CisgIGNvbnN0IFNDRkFyZ3VtZW50RGVzY3JpcHRvciAqZGVzY3JpcHRvcjsKKyAgU0NGSnVtcCBqdW1wOworfSBTQ0ZBcmd1bWVudDsKKworI2RlZmluZSBTQ0ZfSU5TVFJVQ1RJT04oY29kZSwgaykgXAorKGNvbnN0IHN0cnVjdCBzb2NrX2ZpbHRlcilCUEZfU1RNVCgoY29kZSksIChrKSkKKworI2RlZmluZSBTQ0ZfUkVUVVJOX0lOU1RSVUNUSU9OKGFjdGlvbiwgdmFsdWUpIFwKK1NDRl9JTlNUUlVDVElPTihCUEZfUkVUfEJQRl9LLCAoU0VDQ09NUF9SRVRfIyNhY3Rpb24gfCAoKHZhbHVlKSAmIFNFQ0NPTVBfUkVUX0RBVEEpKSkKKwordHlwZWRlZiBzdHJ1Y3QgeworICBjb25zdCBjaGFyICpuYW1lOyAvLyBtdXN0IGJlIGZpcnN0CisgIGNvbnN0IHN0cnVjdCBzb2NrX2ZpbHRlciAqZGVueTsKK30gU0NGTW9kZTsKKworc3RhdGljIGNvbnN0IFNDRk1vZGUgc2NmTW9kZXNbXSA9IHsKKyAgLy8gbXVzdCBiZSBmaXJzdAorICB7IC5uYW1lID0gIm5vIiwKKyAgfSwKKworICAjaWZkZWYgU0VDQ09NUF9SRVRfTE9HCisgIHsgLm5hbWUgPSAibG9nIiwKKyAgICAuZGVueSA9ICZTQ0ZfUkVUVVJOX0lOU1RSVUNUSU9OKExPRywgMCkKKyAgfSwKKyAgI2VuZGlmIC8qIFNFQ0NPTVBfUkVUX0xPRyAqLworCisgICNpZmRlZiBTRUNDT01QX1JFVF9FUlJOTworICB7IC5uYW1lID0gImZhaWwiLAorICAgIC5kZW55ID0gJlNDRl9SRVRVUk5fSU5TVFJVQ1RJT04oRVJSTk8sIEVQRVJNKQorICB9LAorICAjZW5kaWYgLyogU0VDQ09NUF9SRVRfRVJSTk8gKi8KKworICAjaWZkZWYgU0VDQ09NUF9SRVRfS0lMTF9QUk9DRVNTCisgIHsgLm5hbWUgPSAia2lsbCIsCisgICAgLmRlbnkgPSAmU0NGX1JFVFVSTl9JTlNUUlVDVElPTihLSUxMX1BST0NFU1MsIDApCisgIH0sCisgICNlbmRpZiAvKiBTRUNDT01QX1JFVF9LSUxMX1BST0NFU1MgKi8KKworICAvLyBtdXN0IGJlIGxhc3QKKyAgeyAubmFtZSA9IE5VTEwgfQorfTsKKworc3RhdGljIGNvbnN0IFNDRk1vZGUgKgorc2NmR2V0TW9kZSAoY29uc3QgY2hhciAqbmFtZSkgeworICB1bnNpZ25lZCBpbnQgY2hvaWNlOworICBpbnQgdmFsaWQgPSB2YWxpZGF0ZUNob2ljZUV4KCZjaG9pY2UsIG5hbWUsIHNjZk1vZGVzLCBzaXplb2Yoc2NmTW9kZXNbMF0pKTsKKyAgY29uc3QgU0NGTW9kZSAqbW9kZSA9ICZzY2ZNb2Rlc1tjaG9pY2VdOworCisgIGlmICghdmFsaWQpIHsKKyAgICBsb2dNZXNzYWdlKExPR19XQVJOSU5HLAorICAgICAgInVua25vd24gc3lzdGVtIGNhbGwgZmlsdGVyIG1vZGU6ICVzOiBhc3N1bWluZyAlcyIsCisgICAgICBuYW1lLCBtb2RlLT5uYW1lCisgICAgKTsKKyAgfQorCisgIHJldHVybiBtb2RlOworfQorCit0eXBlZGVmIHN0cnVjdCB7CisgIGNvbnN0IFNDRk1vZGUgKm1vZGU7CisKKyAgc3RydWN0IHsKKyAgICBzdHJ1Y3Qgc29ja19maWx0ZXIgKmFycmF5OworICAgIHNpemVfdCBzaXplOworICAgIHNpemVfdCBjb3VudDsKKyAgfSBpbnN0cnVjdGlvbjsKKworICBzdHJ1Y3QgeworICAgIFNDRkFyZ3VtZW50ICphcnJheTsKKyAgICBzaXplX3Qgc2l6ZTsKKyAgICBzaXplX3QgY291bnQ7CisgIH0gYXJndW1lbnQ7CisKKyAgc3RydWN0IHsKKyAgICBTQ0ZKdW1wICpqdW1wczsKKyAgfSBhbGxvdzsKK30gU0NGT2JqZWN0OworCitzdGF0aWMgaW50CitzY2ZBZGRJbnN0cnVjdGlvbiAoU0NGT2JqZWN0ICpzY2YsIGNvbnN0IHN0cnVjdCBzb2NrX2ZpbHRlciAqaW5zdHJ1Y3Rpb24pIHsKKyAgaWYgKHNjZi0+aW5zdHJ1Y3Rpb24uY291bnQgPT0gQlBGX01BWElOU05TKSB7CisgICAgbG9nTWVzc2FnZShMT0dfRVJSLCAic3lzdGVtIGNhbGwgZmlsdGVyIHRvbyBsYXJnZSIpOworICAgIHJldHVybiAwOworICB9CisKKyAgaWYgKHNjZi0+aW5zdHJ1Y3Rpb24uY291bnQgPT0gc2NmLT5pbnN0cnVjdGlvbi5zaXplKSB7CisgICAgc2l6ZV90IG5ld1NpemUgPSBzY2YtPmluc3RydWN0aW9uLnNpemU/IHNjZi0+aW5zdHJ1Y3Rpb24uc2l6ZTw8MTogMFgxMDsKKyAgICBzdHJ1Y3Qgc29ja19maWx0ZXIgKm5ld0FycmF5OworCisgICAgaWYgKCEobmV3QXJyYXkgPSByZWFsbG9jKHNjZi0+aW5zdHJ1Y3Rpb24uYXJyYXksIEFSUkFZX1NJWkUobmV3QXJyYXksIG5ld1NpemUpKSkpIHsKKyAgICAgIGxvZ01hbGxvY0Vycm9yKCk7CisgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBzY2YtPmluc3RydWN0aW9uLmFycmF5ID0gbmV3QXJyYXk7CisgICAgc2NmLT5pbnN0cnVjdGlvbi5zaXplID0gbmV3U2l6ZTsKKyAgfQorCisgIHNjZi0+aW5zdHJ1Y3Rpb24uYXJyYXlbc2NmLT5pbnN0cnVjdGlvbi5jb3VudCsrXSA9ICppbnN0cnVjdGlvbjsKKyAgcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQKK3NjZkFkZEFsbG93SW5zdHJ1Y3Rpb24gKFNDRk9iamVjdCAqc2NmKSB7CisgIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc29ja19maWx0ZXIgYWxsb3cgPSBTQ0ZfUkVUVVJOX0lOU1RSVUNUSU9OKEFMTE9XLCAwKTsKKyAgcmV0dXJuIHNjZkFkZEluc3RydWN0aW9uKHNjZiwgJmFsbG93KTsKK30KKworc3RhdGljIGludAorc2NmQWRkRGVueUluc3RydWN0aW9uIChTQ0ZPYmplY3QgKnNjZikgeworICByZXR1cm4gc2NmQWRkSW5zdHJ1Y3Rpb24oc2NmLCBzY2YtPm1vZGUtPmRlbnkpOworfQorCitzdGF0aWMgaW50CitzY2ZMb2FkRGF0YSAoU0NGT2JqZWN0ICpzY2YsIHVpbnQzMl90IG9mZnNldCwgdWludDhfdCB3aWR0aCkgeworICBzdHJ1Y3Qgc29ja19maWx0ZXIgaW5zdHJ1Y3Rpb24gPSBCUEZfU1RNVChCUEZfTER8QlBGX0FCUywgb2Zmc2V0KTsKKworICBzd2l0Y2ggKHdpZHRoKSB7CisgICAgY2FzZSAxOgorICAgICAgaW5zdHJ1Y3Rpb24uY29kZSB8PSBCUEZfQjsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSAyOgorICAgICAgaW5zdHJ1Y3Rpb24uY29kZSB8PSBCUEZfSDsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSA0OgorICAgICAgaW5zdHJ1Y3Rpb24uY29kZSB8PSBCUEZfVzsKKyAgICAgIGJyZWFrOworCisgICAgZGVmYXVsdDoKKyAgICAgIGxvZ01lc3NhZ2UoTE9HX1dBUk5JTkcsICJ1bnN1cHBvcnRlZCBmaWVsZCB3aWR0aDogJXUiLCB3aWR0aCk7CisgICAgICByZXR1cm4gMDsKKyAgfQorCisgIHJldHVybiBzY2ZBZGRJbnN0cnVjdGlvbihzY2YsICZpbnN0cnVjdGlvbik7Cit9CisKKyNkZWZpbmUgU0NGX0RBVEFfT0ZGU0VUKGZpZWxkKSAob2Zmc2V0b2Yoc3RydWN0IHNlY2NvbXBfZGF0YSwgZmllbGQpKQorCitzdGF0aWMgaW50CitzY2ZMb2FkQXJjaGl0ZWN0dXJlIChTQ0ZPYmplY3QgKnNjZikgeworICByZXR1cm4gc2NmTG9hZERhdGEoc2NmLCBTQ0ZfREFUQV9PRkZTRVQoYXJjaCksIDQpOworfQorCitzdGF0aWMgaW50CitzY2ZMb2FkU3lzdGVtQ2FsbCAoU0NGT2JqZWN0ICpzY2YpIHsKKyAgcmV0dXJuIHNjZkxvYWREYXRhKHNjZiwgU0NGX0RBVEFfT0ZGU0VUKG5yKSwgNCk7Cit9CisKK3N0YXRpYyBpbnQKK3NjZkxvYWRBcmd1bWVudCAoU0NGT2JqZWN0ICpzY2YsIHVpbnQ4X3QgaW5kZXgpIHsKKyAgcmV0dXJuIHNjZkxvYWREYXRhKHNjZiwgU0NGX0RBVEFfT0ZGU0VUKGFyZ3NbaW5kZXhdKSwgNCk7Cit9CisKK3N0YXRpYyB2b2lkCitzY2ZCZWdpbkp1bXAgKFNDRk9iamVjdCAqc2NmLCBTQ0ZKdW1wICpqdW1wLCBTQ0ZKdW1wVHlwZSB0eXBlKSB7CisgIG1lbXNldChqdW1wLCAwLCBzaXplb2YoKmp1bXApKTsKKyAganVtcC0+bmV4dCA9IE5VTEw7CisgIGp1bXAtPmxvY2F0aW9uID0gc2NmLT5pbnN0cnVjdGlvbi5jb3VudDsKKyAganVtcC0+dHlwZSA9IHR5cGU7Cit9CisKK3N0YXRpYyBpbnQKK3NjZkVuZEp1bXAgKFNDRk9iamVjdCAqc2NmLCBjb25zdCBTQ0ZKdW1wICpqdW1wKSB7CisgIHNpemVfdCBmcm9tID0ganVtcC0+bG9jYXRpb247CisgIHN0cnVjdCBzb2NrX2ZpbHRlciAqaW5zdHJ1Y3Rpb24gPSAmc2NmLT5pbnN0cnVjdGlvbi5hcnJheVtmcm9tXTsKKworICBzaXplX3QgdG8gPSBzY2YtPmluc3RydWN0aW9uLmNvdW50IC0gZnJvbSAtIDE7CisgIFNDRkp1bXBUeXBlIHR5cGUgPSBqdW1wLT50eXBlOworCisgIHN3aXRjaCAodHlwZSkgeworICAgIGNhc2UgU0NGX0pVTVBfQUxXQVlTOgorICAgICAgaW5zdHJ1Y3Rpb24tPmsgPSB0bzsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBTQ0ZfSlVNUF9UUlVFOgorICAgICAgaW5zdHJ1Y3Rpb24tPmp0ID0gdG87CisgICAgICBicmVhazsKKworICAgIGNhc2UgU0NGX0pVTVBfRkFMU0U6CisgICAgICBpbnN0cnVjdGlvbi0+amYgPSB0bzsKKyAgICAgIGJyZWFrOworCisgICAgZGVmYXVsdDoKKyAgICAgIGxvZ01lc3NhZ2UoTE9HX1dBUk5JTkcsICJ1bnN1cHBvcnRlZCBqdW1wIHR5cGU6ICV1IiwgdHlwZSk7CisgICAgICByZXR1cm4gMDsKKyAgfQorCisgIHJldHVybiAxOworfQorCitzdGF0aWMgdm9pZAorc2NmUHVzaEp1bXAgKFNDRkp1bXAgKipqdW1wcywgU0NGSnVtcCAqanVtcCkgeworICBqdW1wLT5uZXh0ID0gKmp1bXBzOworICAqanVtcHMgPSBqdW1wOworfQorCitzdGF0aWMgU0NGSnVtcCAqCitzY2ZQb3BKdW1wIChTQ0ZKdW1wICoqanVtcHMpIHsKKyAgU0NGSnVtcCAqanVtcCA9ICpqdW1wczsKKworICBpZiAoanVtcCkgeworICAgICpqdW1wcyA9IGp1bXAtPm5leHQ7CisgICAganVtcC0+bmV4dCA9IE5VTEw7CisgIH0KKworICByZXR1cm4ganVtcDsKK30KKworc3RhdGljIGludAorc2NmRW5kSnVtcHMgKFNDRk9iamVjdCAqc2NmLCBTQ0ZKdW1wICoqanVtcHMpIHsKKyAgaW50IG9rID0gMTsKKworICB3aGlsZSAoMSkgeworICAgIFNDRkp1bXAgKmp1bXAgPSBzY2ZQb3BKdW1wKGp1bXBzKTsKKyAgICBpZiAoIWp1bXApIGJyZWFrOworCisgICAgaWYgKCFzY2ZFbmRKdW1wKHNjZiwganVtcCkpIG9rID0gMDsKKyAgICBmcmVlKGp1bXApOworICB9CisKKyAgcmV0dXJuIG9rOworfQorCitzdGF0aWMgaW50CitzY2ZKdW1wVG8gKFNDRk9iamVjdCAqc2NmLCBTQ0ZKdW1wICpqdW1wKSB7CisgIHN0cnVjdCBzb2NrX2ZpbHRlciBpbnN0cnVjdGlvbiA9IEJQRl9TVE1UKEJQRl9KTVB8QlBGX0t8QlBGX0pBLCAwKTsKKyAgc2NmQmVnaW5KdW1wKHNjZiwganVtcCwgU0NGX0pVTVBfQUxXQVlTKTsKKyAgcmV0dXJuIHNjZkFkZEluc3RydWN0aW9uKHNjZiwgJmluc3RydWN0aW9uKTsKK30KKwordHlwZWRlZiBlbnVtIHsKKyAgU0NGX1RFU1RfTkUsCisgIFNDRl9URVNUX0xULAorICBTQ0ZfVEVTVF9MRSwKKyAgU0NGX1RFU1RfRVEsCisgIFNDRl9URVNUX0dFLAorICBTQ0ZfVEVTVF9HVCwKK30gU0NGVGVzdDsKKworc3RhdGljIGludAorc2NmSnVtcElmIChTQ0ZPYmplY3QgKnNjZiwgU0NGVGVzdCB0ZXN0LCB1aW50MzJfdCB2YWx1ZSwgU0NGSnVtcCAqanVtcCkgeworICBzdHJ1Y3Qgc29ja19maWx0ZXIgaW5zdHJ1Y3Rpb24gPSBCUEZfU1RNVChCUEZfSk1QfEJQRl9LLCB2YWx1ZSk7CisgIGludCBpbnZlcnQgPSAwOworCisgIHN3aXRjaCAodGVzdCkgeworICAgIGNhc2UgU0NGX1RFU1RfTkU6CisgICAgICBpbnZlcnQgPSAxOworICAgIGNhc2UgU0NGX1RFU1RfRVE6CisgICAgICBpbnN0cnVjdGlvbi5jb2RlIHw9IEJQRl9KRVE7CisgICAgICBicmVhazsKKworICAgIGNhc2UgU0NGX1RFU1RfTFQ6CisgICAgICBpbnZlcnQgPSAxOworICAgIGNhc2UgU0NGX1RFU1RfR0U6CisgICAgICBpbnN0cnVjdGlvbi5jb2RlIHw9IEJQRl9KR0U7CisgICAgICBicmVhazsKKworICAgIGNhc2UgU0NGX1RFU1RfTEU6CisgICAgICBpbnZlcnQgPSAxOworICAgIGNhc2UgU0NGX1RFU1RfR1Q6CisgICAgICBpbnN0cnVjdGlvbi5jb2RlIHw9IEJQRl9KR1Q7CisgICAgICBicmVhazsKKworICAgIGRlZmF1bHQ6CisgICAgICBsb2dNZXNzYWdlKExPR19XQVJOSU5HLCAidW5zdXBwb3J0ZWQgdmFsdWUgdGVzdDogJXUiLCB0ZXN0KTsKKyAgICAgIHJldHVybiAwOworICB9CisKKyAgc2NmQmVnaW5KdW1wKHNjZiwganVtcCwgKGludmVydD8gU0NGX0pVTVBfRkFMU0U6IFNDRl9KVU1QX1RSVUUpKTsKKyAgcmV0dXJuIHNjZkFkZEluc3RydWN0aW9uKHNjZiwgJmluc3RydWN0aW9uKTsKK30KKworc3RhdGljIGludAorc2NmVmVyaWZ5QXJjaGl0ZWN0dXJlIChTQ0ZPYmplY3QgKnNjZikgeworICBTQ0ZKdW1wIGVxQXJjaDsKKworICByZXR1cm4gc2NmTG9hZEFyY2hpdGVjdHVyZShzY2YpCisgICAgICAmJiBzY2ZKdW1wSWYoc2NmLCBTQ0ZfVEVTVF9FUSwgU1lTVEVNX0NBTExfQVJDSElURUNUVVJFLCAmZXFBcmNoKQorICAgICAgJiYgc2NmQWRkRGVueUluc3RydWN0aW9uKHNjZikKKyAgICAgICYmIHNjZkVuZEp1bXAoc2NmLCAmZXFBcmNoKTsKK30KKworc3RhdGljIGludAorc2NmSnVtcFRvQXJndW1lbnQgKFNDRk9iamVjdCAqc2NmLCBjb25zdCBTQ0ZBcmd1bWVudERlc2NyaXB0b3IgKmRlc2NyaXB0b3IpIHsKKyAgaWYgKHNjZi0+YXJndW1lbnQuY291bnQgPT0gc2NmLT5hcmd1bWVudC5zaXplKSB7CisgICAgc2l6ZV90IG5ld1NpemUgPSBzY2YtPmFyZ3VtZW50LnNpemU/IHNjZi0+YXJndW1lbnQuc2l6ZTw8MTogMFgxMDsKKyAgICBTQ0ZBcmd1bWVudCAqbmV3QXJyYXk7CisKKyAgICBpZiAoIShuZXdBcnJheSA9IHJlYWxsb2Moc2NmLT5hcmd1bWVudC5hcnJheSwgQVJSQVlfU0laRShuZXdBcnJheSwgbmV3U2l6ZSkpKSkgeworICAgICAgbG9nTWFsbG9jRXJyb3IoKTsKKyAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIHNjZi0+YXJndW1lbnQuYXJyYXkgPSBuZXdBcnJheTsKKyAgICBzY2YtPmFyZ3VtZW50LnNpemUgPSBuZXdTaXplOworICB9CisKKyAgeworICAgIHNpemVfdCAqY291bnQgPSAmc2NmLT5hcmd1bWVudC5jb3VudDsKKyAgICBTQ0ZBcmd1bWVudCAqYXJndW1lbnQgPSAmc2NmLT5hcmd1bWVudC5hcnJheVsqY291bnRdOworCisgICAgYXJndW1lbnQtPmRlc2NyaXB0b3IgPSBkZXNjcmlwdG9yOworICAgIGlmICghc2NmSnVtcFRvKHNjZiwgJmFyZ3VtZW50LT5qdW1wKSkgcmV0dXJuIDA7CisKKyAgICAqY291bnQgKz0gMTsKKyAgfQorCisgIHJldHVybiAxOworfQorCitzdGF0aWMgaW50CitzY2ZBbGxvd1ZhbHVlIChTQ0ZPYmplY3QgKnNjZiwgY29uc3QgU0NGVmFsdWVEZXNjcmlwdG9yICpkZXNjcmlwdG9yKSB7CisgIGlmIChkZXNjcmlwdG9yLT5hcmd1bWVudCkgeworICAgIFNDRkp1bXAgbmVWYWx1ZTsKKworICAgIHJldHVybiBzY2ZKdW1wSWYoc2NmLCBTQ0ZfVEVTVF9ORSwgZGVzY3JpcHRvci0+dmFsdWUsICZuZVZhbHVlKQorICAgICAgICAmJiBzY2ZKdW1wVG9Bcmd1bWVudChzY2YsIGRlc2NyaXB0b3ItPmFyZ3VtZW50KQorICAgICAgICAmJiBzY2ZFbmRKdW1wKHNjZiwgJm5lVmFsdWUpOworICB9IGVsc2UgeworICAgIFNDRkp1bXAgKmVxVmFsdWU7CisKKyAgICBpZiAoKGVxVmFsdWUgPSBtYWxsb2Moc2l6ZW9mKCplcVZhbHVlKSkpKSB7CisgICAgICBpZiAoc2NmSnVtcElmKHNjZiwgU0NGX1RFU1RfRVEsIGRlc2NyaXB0b3ItPnZhbHVlLCBlcVZhbHVlKSkgeworICAgICAgICBzY2ZQdXNoSnVtcCgmc2NmLT5hbGxvdy5qdW1wcywgZXFWYWx1ZSk7CisgICAgICAgIHJldHVybiAxOworICAgICAgfQorCisgICAgICBmcmVlKGVxVmFsdWUpOworICAgIH0gZWxzZSB7CisgICAgICBsb2dNYWxsb2NFcnJvcigpOworICAgIH0KKyAgfQorCisgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50CitzY2ZBbGxvd1ZhbHVlcyAoU0NGT2JqZWN0ICpzY2YsIGNvbnN0IFNDRlZhbHVlRGVzY3JpcHRvciAqZGVzY3JpcHRvcnMsIHNpemVfdCBjb3VudCkgeworICBpZiAoY291bnQgPD0gMykgeworICAgIGNvbnN0IFNDRlZhbHVlRGVzY3JpcHRvciAqZGVzY3JpcHRvciA9IGRlc2NyaXB0b3JzOworICAgIGNvbnN0IFNDRlZhbHVlRGVzY3JpcHRvciAqZW5kID0gZGVzY3JpcHRvciArIGNvdW50OworCisgICAgd2hpbGUgKGRlc2NyaXB0b3IgPCBlbmQpIHsKKyAgICAgIGlmICghc2NmQWxsb3dWYWx1ZShzY2YsIGRlc2NyaXB0b3IpKSByZXR1cm4gMDsKKyAgICAgIGRlc2NyaXB0b3IgKz0gMTsKKyAgICB9CisKKyAgICByZXR1cm4gc2NmQWRkRGVueUluc3RydWN0aW9uKHNjZik7CisgIH0KKworICBjb25zdCBTQ0ZWYWx1ZURlc2NyaXB0b3IgKmRlc2NyaXB0b3IgPSBkZXNjcmlwdG9ycyArIChjb3VudCAvIDIpOworICBTQ0ZKdW1wIGd0VmFsdWU7CisgIGlmICghc2NmSnVtcElmKHNjZiwgU0NGX1RFU1RfR1QsIGRlc2NyaXB0b3ItPnZhbHVlLCAmZ3RWYWx1ZSkpIHJldHVybiAwOworICBpZiAoIXNjZkFsbG93VmFsdWUoc2NmLCBkZXNjcmlwdG9yKSkgcmV0dXJuIDA7CisKKyAgaWYgKCFzY2ZBbGxvd1ZhbHVlcyhzY2YsIGRlc2NyaXB0b3JzLCAoZGVzY3JpcHRvciAtIGRlc2NyaXB0b3JzKSkpIHJldHVybiAwOworICBpZiAoIXNjZkVuZEp1bXAoc2NmLCAmZ3RWYWx1ZSkpIHJldHVybiAwOworCisgIGNvbnN0IFNDRlZhbHVlRGVzY3JpcHRvciAqZW5kID0gZGVzY3JpcHRvcnMgKyBjb3VudDsKKyAgZGVzY3JpcHRvciArPSAxOworICByZXR1cm4gc2NmQWxsb3dWYWx1ZXMoc2NmLCBkZXNjcmlwdG9yLCAoZW5kIC0gZGVzY3JpcHRvcikpOworfQorCitzdGF0aWMgaW50CitzY2ZWYWx1ZVNvcnRlciAoY29uc3Qgdm9pZCAqZWxlbWVudDEsIGNvbnN0IHZvaWQgKmVsZW1lbnQyKSB7CisgIGNvbnN0IFNDRlZhbHVlRGVzY3JpcHRvciAqZGVzY3JpcHRvcjEgPSBlbGVtZW50MTsKKyAgY29uc3QgU0NGVmFsdWVEZXNjcmlwdG9yICpkZXNjcmlwdG9yMiA9IGVsZW1lbnQyOworCisgIGlmIChkZXNjcmlwdG9yMS0+dmFsdWUgPCBkZXNjcmlwdG9yMi0+dmFsdWUpIHJldHVybiAtMTsKKyAgaWYgKGRlc2NyaXB0b3IxLT52YWx1ZSA+IGRlc2NyaXB0b3IyLT52YWx1ZSkgcmV0dXJuIDE7CisgIHJldHVybiAwOworfQorCitzdGF0aWMgdm9pZAorc2NmU29ydFZhbHVlcyAoU0NGVmFsdWVEZXNjcmlwdG9yICp2YWx1ZXMsIHNpemVfdCBjb3VudCkgeworICBxc29ydCh2YWx1ZXMsIGNvdW50LCBzaXplb2YoKnZhbHVlcyksIHNjZlZhbHVlU29ydGVyKTsKK30KKworc3RhdGljIHZvaWQKK3NjZlJlbW92ZUR1cGxpY2F0ZVZhbHVlcyAoU0NGVmFsdWVEZXNjcmlwdG9yICp2YWx1ZXMsIHNpemVfdCAqY291bnQsIGNvbnN0IGNoYXIgKm5hbWUpIHsKKyAgaWYgKCpjb3VudCA+IDEpIHsKKyAgICBTQ0ZWYWx1ZURlc2NyaXB0b3IgKnRvID0gdmFsdWVzOworICAgIGNvbnN0IFNDRlZhbHVlRGVzY3JpcHRvciAqZnJvbSA9IHZhbHVlcyArIDE7CisgICAgY29uc3QgU0NGVmFsdWVEZXNjcmlwdG9yICplbmQgPSB2YWx1ZXMgKyAqY291bnQ7CisKKyAgICB3aGlsZSAoZnJvbSA8IGVuZCkgeworICAgICAgaWYgKGZyb20tPnZhbHVlID09IHRvLT52YWx1ZSkgeworICAgICAgICBsb2dNZXNzYWdlKExPR19XQVJOSU5HLAorICAgICAgICAgICIlczogZHVwbGljYXRlIHZhbHVlOiAlczogMFglMDgiUFJJWDMyLAorICAgICAgICAgIHNjZkxvZ0xhYmVsLCBuYW1lLCBmcm9tLT52YWx1ZQorICAgICAgICApOworICAgICAgfSBlbHNlIGlmICgrK3RvICE9IGZyb20pIHsKKyAgICAgICAgKnRvID0gKmZyb207CisgICAgICB9CisKKyAgICAgIGZyb20gKz0gMTsKKyAgICB9CisKKyAgICAqY291bnQgPSArK3RvIC0gdmFsdWVzOworICB9Cit9CisKK3N0YXRpYyBpbnQKK3NjZkFsbG93VmFsdWVHcm91cCAoU0NGT2JqZWN0ICpzY2YsIGNvbnN0IFNDRlZhbHVlR3JvdXAgKnZhbHVlcykgeworICB7CisgICAgY29uc3QgY2hhciAqbmFtZSA9IHZhbHVlcy0+bmFtZTsKKyAgICBzaXplX3QgY291bnQgPSB2YWx1ZXMtPmNvdW50OworCisgICAgU0NGVmFsdWVEZXNjcmlwdG9yIGRlc2NyaXB0b3JzW2NvdW50XTsKKyAgICBtZW1jcHkoZGVzY3JpcHRvcnMsIHZhbHVlcy0+ZGVzY3JpcHRvcnMsIHNpemVvZihkZXNjcmlwdG9ycykpOworCisgICAgc2NmU29ydFZhbHVlcyhkZXNjcmlwdG9ycywgY291bnQpOworICAgIHNjZlJlbW92ZUR1cGxpY2F0ZVZhbHVlcyhkZXNjcmlwdG9ycywgJmNvdW50LCBuYW1lKTsKKworICAgIGxvZ01lc3NhZ2UoU0NGX0xPR19MRVZFTCwKKyAgICAgICIlczogdmFsdWUgZ3JvdXAgc2l6ZTogJXM6ICV6dSIsIHNjZkxvZ0xhYmVsLCBuYW1lLCBjb3VudAorICAgICk7CisKKyAgICBpZiAoIXNjZkFsbG93VmFsdWVzKHNjZiwgZGVzY3JpcHRvcnMsIGNvdW50KSkgcmV0dXJuIDA7CisgIH0KKworICBpZiAoc2NmLT5hbGxvdy5qdW1wcykgeworICAgIGlmICghc2NmRW5kSnVtcHMoc2NmLCAmc2NmLT5hbGxvdy5qdW1wcykpIHJldHVybiAwOworICAgIGlmICghc2NmQWRkQWxsb3dJbnN0cnVjdGlvbihzY2YpKSByZXR1cm4gMDsKKyAgfQorCisgIHJldHVybiAxOworfQorCitzdGF0aWMgaW50CitzY2ZDaGVja1N5c2VtQ2FsbCAoU0NGT2JqZWN0ICpzY2YpIHsKKyAgcmV0dXJuIHNjZkxvYWRTeXN0ZW1DYWxsKHNjZikKKyAgICAgICYmIHNjZkFsbG93VmFsdWVHcm91cChzY2YsICZzY2ZTeXN0ZW1DYWxscyk7Cit9CisKK3N0YXRpYyBpbnQKK3NjZkNoZWNrQXJndW1lbnQgKFNDRk9iamVjdCAqc2NmLCBjb25zdCBTQ0ZBcmd1bWVudCAqYXJndW1lbnQpIHsKKyAgY29uc3QgU0NGQXJndW1lbnREZXNjcmlwdG9yICpkZXNjcmlwdG9yID0gYXJndW1lbnQtPmRlc2NyaXB0b3I7CisKKyAgcmV0dXJuIHNjZkVuZEp1bXAoc2NmLCAmYXJndW1lbnQtPmp1bXApCisgICAgICAmJiBzY2ZMb2FkQXJndW1lbnQoc2NmLCBkZXNjcmlwdG9yLT5pbmRleCkKKyAgICAgICYmIHNjZkFsbG93VmFsdWVHcm91cChzY2YsICZkZXNjcmlwdG9yLT52YWx1ZXMpOworfQorCitzdGF0aWMgaW50CitzY2ZDaGVja0FyZ3VtZW50cyAoU0NGT2JqZWN0ICpzY2YpIHsKKyAgLyogQW4gYXJndW1lbnQncyB2YWx1ZSBncm91cCBjYW4gaW5jbHVkZSB0aGUgc3BlY2lmaWNhdGlvbiBvZiBhbm90aGVyCisgICAqIGFyZ3VtZW50IGFuZCBpdHMgYXNzb2NpYXRlZCB2YWx1ZSBncm91cC4gVGhlIGZvbGxvd2luZyBpdGVyYXRpb24sCisgICAqIHRoZXJlZm9yZSwgbmVlZHMgdG8gaGFuZGxlIHRoZSBwb3NzaWJpbGl0eSB0aGF0IHRoZSBwZW5kaW5nIGFyZ3VtZW50CisgICAqIGNvdW50IG1heSBpbmNyZWFzZSBhcyBlYWNoIGFyZ3VtZW50IGlzIHByb2Nlc3NlZC4KKyAgICovCisKKyAgd2hpbGUgKHNjZi0+YXJndW1lbnQuY291bnQgPiAwKSB7CisgICAgaWYgKCFzY2ZDaGVja0FyZ3VtZW50KHNjZiwgJnNjZi0+YXJndW1lbnQuYXJyYXlbLS1zY2YtPmFyZ3VtZW50LmNvdW50XSkpIHsKKyAgICAgIHJldHVybiAwOworICAgIH0KKyAgfQorCisgIHJldHVybiAxOworfQorCisjaWYgU0NGX0xPR19QUk9HUkFNCit0eXBlZGVmIHN0cnVjdCB7CisgIGNvbnN0IHN0cnVjdCBzb2NrX2ZpbHRlciAqaW5zdHJ1Y3Rpb247CisgIHNpemVfdCBsb2NhdGlvbjsKKworICBzdHJ1Y3QgeworICAgIGludCBkZWNpbWFsOworICAgIGludCBoZXhhZGVjaW1hbDsKKyAgfSB3aWR0aDsKK30gU0NGSW5zdHJ1Y3Rpb25Gb3JtYXR0aW5nRGF0YTsKKworc3RhdGljCitTVFJfQkVHSU5fRk9STUFUVEVSKHNjZkZvcm1hdExvY2F0aW9uLCBzaXplX3QgbG9jYXRpb24sIGNvbnN0IFNDRkluc3RydWN0aW9uRm9ybWF0dGluZ0RhdGEgKmlmZCkKKyAgU1RSX1BSSU5URigiWCUwKnpYIiwgaWZkLT53aWR0aC5oZXhhZGVjaW1hbCwgbG9jYXRpb24pOworU1RSX0VORF9GT1JNQVRURVIKKworc3RhdGljCitTVFJfQkVHSU5fRk9STUFUVEVSKHNjZkRpc2Fzc2VtYmxlSW5zdHJ1Y3Rpb24sIGNvbnN0IFNDRkluc3RydWN0aW9uRm9ybWF0dGluZ0RhdGEgKmlmZCkKKyAgY29uc3Qgc3RydWN0IHNvY2tfZmlsdGVyICppbnN0cnVjdGlvbiA9IGlmZC0+aW5zdHJ1Y3Rpb247CisgIHVpbnQxNl90IGNvZGUgPSBpbnN0cnVjdGlvbi0+Y29kZTsKKyAgdWludDMyX3Qgb3BlcmFuZCA9IGluc3RydWN0aW9uLT5rOworCisgIGNvbnN0IGNoYXIgKm5hbWUgPSBOVUxMOworICBpbnQgaGFzU2l6ZSA9IDA7CisgIGludCBoYXNNb2RlID0gMDsKKyAgaW50IGhhc1NvdXJjZSA9IDA7CisgIGludCBpc0p1bXAgPSAwOworICBpbnQgaXNSZXR1cm4gPSAwOworICBpbnQgcHJvYmxlbSA9IDA7CisKKyAgc3dpdGNoIChCUEZfQ0xBU1MoY29kZSkpIHsKKyAgICBjYXNlIEJQRl9MRDoKKyAgICAgIG5hbWUgPSAibGQiOworICAgICAgaGFzU2l6ZSA9IDE7CisgICAgICBoYXNNb2RlID0gMTsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBCUEZfTERYOgorICAgICAgbmFtZSA9ICJsZHgiOworICAgICAgaGFzU2l6ZSA9IDE7CisgICAgICBoYXNNb2RlID0gMTsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBCUEZfU1Q6CisgICAgICBuYW1lID0gInN0IjsKKyAgICAgIGhhc1NpemUgPSAxOworICAgICAgaGFzTW9kZSA9IDE7CisgICAgICBicmVhazsKKworICAgIGNhc2UgQlBGX1NUWDoKKyAgICAgIG5hbWUgPSAic3R4IjsKKyAgICAgIGhhc1NpemUgPSAxOworICAgICAgaGFzTW9kZSA9IDE7CisgICAgICBicmVhazsKKworICAgIGNhc2UgQlBGX0FMVToKKyAgICAgIHN3aXRjaCAoQlBGX09QKGNvZGUpKSB7CisgICAgICAgIGNhc2UgQlBGX0FERDoKKyAgICAgICAgICBuYW1lID0gImFkZCI7CisgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBCUEZfU1VCOgorICAgICAgICAgIG5hbWUgPSAic3ViIjsKKyAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIEJQRl9NVUw6CisgICAgICAgICAgbmFtZSA9ICJtdWwiOworICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgQlBGX0RJVjoKKyAgICAgICAgICBuYW1lID0gImRpdiI7CisgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBCUEZfTU9EOgorICAgICAgICAgIG5hbWUgPSAibW9kIjsKKyAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIEJQRl9MU0g6CisgICAgICAgICAgbmFtZSA9ICJsc2giOworICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgQlBGX1JTSDoKKyAgICAgICAgICBuYW1lID0gInJzaCI7CisgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBCUEZfQU5EOgorICAgICAgICAgIG5hbWUgPSAiYW5kIjsKKyAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIEJQRl9PUjoKKyAgICAgICAgICBuYW1lID0gIm9yIjsKKyAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIEJQRl9YT1I6CisgICAgICAgICAgbmFtZSA9ICJ4b3IiOworICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgQlBGX05FRzoKKyAgICAgICAgICBuYW1lID0gIm5lZyI7CisgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICBuYW1lID0gImFsdSI7CisgICAgICAgICAgcHJvYmxlbSA9IDE7CisgICAgICAgICAgYnJlYWs7CisgICAgICB9CisKKyAgICAgIGhhc1NvdXJjZSA9IDE7CisgICAgICBicmVhazsKKworICAgIGNhc2UgQlBGX0pNUDoKKyAgICAgIHN3aXRjaCAoQlBGX09QKGNvZGUpKSB7CisgICAgICAgIGNhc2UgQlBGX0pFUToKKyAgICAgICAgICBuYW1lID0gImplcSI7CisgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBCUEZfSkdUOgorICAgICAgICAgIG5hbWUgPSAiamd0IjsKKyAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIEJQRl9KR0U6CisgICAgICAgICAgbmFtZSA9ICJqZ2UiOworICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgQlBGX0pTRVQ6CisgICAgICAgICAgbmFtZSA9ICJqc2VUIjsKKyAgICAgICAgICBicmVhazsKKworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgIHByb2JsZW0gPSAxOworICAgICAgICAgIC8qIGZhbGwgdGhyb3VnaCAqLworCisgICAgICAgIGNhc2UgQlBGX0pBOgorICAgICAgICAgIG5hbWUgPSAiam1wIjsKKyAgICAgICAgICBicmVhazsKKyAgICAgIH0KKworICAgICAgaGFzU291cmNlID0gMTsKKyAgICAgIGlzSnVtcCA9IDE7CisgICAgICBicmVhazsKKworICAgIGNhc2UgQlBGX1JFVDoKKyAgICAgIG5hbWUgPSAicmV0IjsKKyAgICAgIGlzUmV0dXJuID0gMTsKKyAgICAgIGJyZWFrOworCisgICAgZGVmYXVsdDoKKyAgICAgIHByb2JsZW0gPSAxOworICAgICAgYnJlYWs7CisgIH0KKworICBpZiAobmFtZSkgU1RSX1BSSU5URigiJXMiLCBuYW1lKTsKKworICBpZiAoaGFzU2l6ZSkgeworICAgIGNvbnN0IGNoYXIgKnNpemUgPSBOVUxMOworCisgICAgc3dpdGNoIChCUEZfU0laRShjb2RlKSkgeworICAgICAgY2FzZSBCUEZfQjoKKyAgICAgICAgc2l6ZSA9ICJiIjsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGNhc2UgQlBGX0g6CisgICAgICAgIHNpemUgPSAiaCI7CisgICAgICAgIGJyZWFrOworCisgICAgICBjYXNlIEJQRl9XOgorICAgICAgICBzaXplID0gInciOworICAgICAgICBicmVhazsKKworICAgICAgZGVmYXVsdDoKKyAgICAgICAgcHJvYmxlbSA9IDE7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGlmIChzaXplKSBTVFJfUFJJTlRGKCIlcyIsIHNpemUpOworICB9CisKKyAgaWYgKGhhc01vZGUpIHsKKyAgICBjb25zdCBjaGFyICptb2RlID0gTlVMTDsKKworICAgIHN3aXRjaCAoQlBGX01PREUoY29kZSkpIHsKKyAgICAgIGNhc2UgQlBGX0lNTToKKyAgICAgICAgbW9kZSA9ICJpbW0iOworICAgICAgICBicmVhazsKKworICAgICAgY2FzZSBCUEZfQUJTOgorICAgICAgICBtb2RlID0gImFicyI7CisgICAgICAgIGJyZWFrOworCisgICAgICBjYXNlIEJQRl9JTkQ6CisgICAgICAgIG1vZGUgPSAiaW5kIjsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGNhc2UgQlBGX01FTToKKyAgICAgICAgbW9kZSA9ICJtZW0iOworICAgICAgICBicmVhazsKKworICAgICAgY2FzZSBCUEZfTEVOOgorICAgICAgICBtb2RlID0gImxlbiI7CisgICAgICAgIGJyZWFrOworCisgICAgICBkZWZhdWx0OgorICAgICAgICBwcm9ibGVtID0gMTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgaWYgKG1vZGUpIFNUUl9QUklOVEYoIi0lcyIsIG1vZGUpOworICB9CisKKyAgaWYgKGhhc1NvdXJjZSkgeworICAgIGNvbnN0IGNoYXIgKnNvdXJjZSA9IE5VTEw7CisKKyAgICBzd2l0Y2ggKEJQRl9TUkMoY29kZSkpIHsKKyAgICAgIGNhc2UgQlBGX0s6CisgICAgICAgIHNvdXJjZSA9ICJrIjsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGNhc2UgQlBGX1g6CisgICAgICAgIHNvdXJjZSA9ICJ4IjsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIHByb2JsZW0gPSAxOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBpZiAoc291cmNlKSBTVFJfUFJJTlRGKCItJXMiLCBzb3VyY2UpOworICB9CisKKyAgaWYgKGlzUmV0dXJuKSB7CisgICAgY29uc3QgY2hhciAqYWN0aW9uID0gTlVMTDsKKworICAgIHN3aXRjaCAob3BlcmFuZCAmIFNFQ0NPTVBfUkVUX0FDVElPTl9GVUxMKSB7CisgICAgICBjYXNlIFNFQ0NPTVBfUkVUX0tJTExfUFJPQ0VTUzoKKyAgICAgICAgYWN0aW9uID0gImtpbGwtcHJvY2VzcyI7CisgICAgICAgIGJyZWFrOworCisgICAgICBjYXNlIFNFQ0NPTVBfUkVUX0tJTExfVEhSRUFEOgorICAgICAgICBhY3Rpb24gPSAia2lsbC10aHJlYWQiOworICAgICAgICBicmVhazsKKworICAgICAgY2FzZSBTRUNDT01QX1JFVF9UUkFQOgorICAgICAgICBhY3Rpb24gPSAidHJhcCI7CisgICAgICAgIGJyZWFrOworCisgICAgICBjYXNlIFNFQ0NPTVBfUkVUX0VSUk5POgorICAgICAgICBhY3Rpb24gPSAiZXJybm8iOworICAgICAgICBicmVhazsKKworICAgICAgY2FzZSBTRUNDT01QX1JFVF9VU0VSX05PVElGOgorICAgICAgICBhY3Rpb24gPSAibm90aWZ5IjsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGNhc2UgU0VDQ09NUF9SRVRfVFJBQ0U6CisgICAgICAgIGFjdGlvbiA9ICJ0cmFjZSI7CisgICAgICAgIGJyZWFrOworCisgICAgICBjYXNlIFNFQ0NPTVBfUkVUX0xPRzoKKyAgICAgICAgYWN0aW9uID0gImxvZyI7CisgICAgICAgIGJyZWFrOworCisgICAgICBjYXNlIFNFQ0NPTVBfUkVUX0FMTE9XOgorICAgICAgICBhY3Rpb24gPSAiYWxsb3ciOworICAgICAgICBicmVhazsKKworICAgICAgZGVmYXVsdDoKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgaWYgKGFjdGlvbikgeworICAgICAgU1RSX1BSSU5URigiLSVzIiwgYWN0aW9uKTsKKyAgICAgIHVpbnQxNl90IGRhdGEgPSBvcGVyYW5kICYgU0VDQ09NUF9SRVRfREFUQTsKKyAgICAgIGlmIChkYXRhKSBTVFJfUFJJTlRGKCIoJXUpIiwgZGF0YSk7CisgICAgfQorICB9CisKKyAgaWYgKHByb2JsZW0pIHsKKyAgICBTVFJfUFJJTlRGKCI/Iik7CisgIH0gZWxzZSBpZiAoaXNKdW1wKSB7CisgICAgU1RSX1BSSU5URigiIC0+ICIpOworICAgIHNpemVfdCBmcm9tID0gaWZkLT5sb2NhdGlvbiArIDE7CisKKyAgICBpZiAoQlBGX09QKGNvZGUpID09IEJQRl9KQSkgeworICAgICAgU1RSX0ZPUk1BVChzY2ZGb3JtYXRMb2NhdGlvbiwgKGZyb20gKyBvcGVyYW5kKSwgaWZkKTsKKyAgICB9IGVsc2UgeworICAgICAgU1RSX0ZPUk1BVChzY2ZGb3JtYXRMb2NhdGlvbiwgKGZyb20gKyBpbnN0cnVjdGlvbi0+anQpLCBpZmQpOworICAgICAgU1RSX1BSSU5URigiICIpOworICAgICAgU1RSX0ZPUk1BVChzY2ZGb3JtYXRMb2NhdGlvbiwgKGZyb20gKyBpbnN0cnVjdGlvbi0+amYpLCBpZmQpOworICAgIH0KKyAgfQorU1RSX0VORF9GT1JNQVRURVIKKworc3RhdGljCitTVFJfQkVHSU5fRk9STUFUVEVSKHNjZkZvcm1hdEluc3RydWN0aW9uLCBjb25zdCBTQ0ZJbnN0cnVjdGlvbkZvcm1hdHRpbmdEYXRhICppZmQpCisgIFNUUl9GT1JNQVQoc2NmRm9ybWF0TG9jYXRpb24sIGlmZC0+bG9jYXRpb24sIGlmZCk7CisKKyAgU1RSX1BSSU5URigKKyAgICAiOiAlMDRYICUwOFggJTAyWCAlMDJYOiAiLAorICAgIGlmZC0+aW5zdHJ1Y3Rpb24tPmNvZGUsIGlmZC0+aW5zdHJ1Y3Rpb24tPmssCisgICAgaWZkLT5pbnN0cnVjdGlvbi0+anQsIGlmZC0+aW5zdHJ1Y3Rpb24tPmpmCisgICk7CisKKyAgU1RSX0ZPUk1BVChzY2ZEaXNhc3NlbWJsZUluc3RydWN0aW9uLCBpZmQpOworU1RSX0VORF9GT1JNQVRURVIKKworc3RhdGljIHZvaWQKK3NjZkxvZ1Byb2dyYW0gKFNDRk9iamVjdCAqc2NmKSB7CisgIHNpemVfdCBjb3VudCA9IHNjZi0+aW5zdHJ1Y3Rpb24uY291bnQ7CisKKyAgU0NGSW5zdHJ1Y3Rpb25Gb3JtYXR0aW5nRGF0YSBpZmQ7CisgIG1lbXNldCgmaWZkLCAwLCBzaXplb2YoaWZkKSk7CisKKyAgeworICAgIHNpemVfdCBpbmRleCA9IGNvdW50OworICAgIGlmIChpbmRleCA+IDApIGluZGV4IC09IDE7CisKKyAgICBjaGFyIGJ1ZmZlclswWDQwXTsKKyAgICBpZmQud2lkdGguZGVjaW1hbCA9IHNucHJpbnRmKGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlciksICIlenUiLCBpbmRleCk7CisgICAgaWZkLndpZHRoLmhleGFkZWNpbWFsID0gc25wcmludGYoYnVmZmVyLCBzaXplb2YoYnVmZmVyKSwgIiV6eCIsIGluZGV4KTsKKyAgfQorCisgIGZvciAoc2l6ZV90IGluZGV4PTA7IGluZGV4PGNvdW50OyBpbmRleCs9MSkgeworICAgIGNoYXIgbG9nWzBYMTAwXTsKKyAgICBTVFJfQkVHSU4obG9nLCBzaXplb2YobG9nKSk7CisgICAgU1RSX1BSSU5URigiJXM6IGluc3RydWN0aW9uOiAlKnp1ICIsIHNjZkxvZ0xhYmVsLCBpZmQud2lkdGguZGVjaW1hbCwgaW5kZXgpOworCisgICAgaWZkLmluc3RydWN0aW9uID0gJnNjZi0+aW5zdHJ1Y3Rpb24uYXJyYXlbaW5kZXhdOworICAgIGlmZC5sb2NhdGlvbiA9IGluZGV4OworICAgIFNUUl9GT1JNQVQoc2NmRm9ybWF0SW5zdHJ1Y3Rpb24sICZpZmQpOworCisgICAgU1RSX0VORDsKKyAgICBsb2dNZXNzYWdlKFNDRl9MT0dfTEVWRUwsICIlcyIsIGxvZyk7CisgIH0KK30KKyNlbmRpZiAvKiBTQ0ZfTE9HX1BST0dSQU0gKi8KKworc3RhdGljIHZvaWQKK3NjZkRlc3Ryb3lKdW1wcyAoU0NGSnVtcCAqKmp1bXBzKSB7CisgIHdoaWxlICgxKSB7CisgICAgU0NGSnVtcCAqanVtcCA9IHNjZlBvcEp1bXAoanVtcHMpOworICAgIGlmICghanVtcCkgYnJlYWs7CisgICAgZnJlZShqdW1wKTsKKyAgfQorfQorCitzdGF0aWMgdm9pZAorc2NmRGVzdHJveU9iamVjdCAoU0NGT2JqZWN0ICpzY2YpIHsKKyAgc2NmRGVzdHJveUp1bXBzKCZzY2YtPmFsbG93Lmp1bXBzKTsKKyAgaWYgKHNjZi0+aW5zdHJ1Y3Rpb24uYXJyYXkpIGZyZWUoc2NmLT5pbnN0cnVjdGlvbi5hcnJheSk7CisgIGlmIChzY2YtPmFyZ3VtZW50LmFycmF5KSBmcmVlKHNjZi0+YXJndW1lbnQuYXJyYXkpOworICBmcmVlKHNjZik7Cit9CisKK3N0YXRpYyBTQ0ZPYmplY3QgKgorc2NmTmV3T2JqZWN0IChjb25zdCBTQ0ZNb2RlICptb2RlKSB7CisgIFNDRk9iamVjdCAqc2NmOworCisgIGlmICgoc2NmID0gbWFsbG9jKHNpemVvZigqc2NmKSkpKSB7CisgICAgbWVtc2V0KHNjZiwgMCwgc2l6ZW9mKCpzY2YpKTsKKyAgICBzY2YtPm1vZGUgPSBtb2RlOworCisgICAgc2NmLT5pbnN0cnVjdGlvbi5hcnJheSA9IE5VTEw7CisgICAgc2NmLT5pbnN0cnVjdGlvbi5zaXplID0gMDsKKyAgICBzY2YtPmluc3RydWN0aW9uLmNvdW50ID0gMDsKKworICAgIHNjZi0+YXJndW1lbnQuYXJyYXkgPSBOVUxMOworICAgIHNjZi0+YXJndW1lbnQuc2l6ZSA9IDA7CisgICAgc2NmLT5hcmd1bWVudC5jb3VudCA9IDA7CisKKyAgICBzY2YtPmFsbG93Lmp1bXBzID0gTlVMTDsKKworICAgIHJldHVybiBzY2Y7CisgIH0gZWxzZSB7CisgICAgbG9nTWFsbG9jRXJyb3IoKTsKKyAgfQorCisgIHJldHVybiBOVUxMOworfQorCitzdGF0aWMgU0NGT2JqZWN0ICoKK3NjZk1ha2VGaWx0ZXIgKGNvbnN0IFNDRk1vZGUgKm1vZGUpIHsKKyAgU0NGT2JqZWN0ICpzY2Y7CisKKyAgaWYgKChzY2YgPSBzY2ZOZXdPYmplY3QobW9kZSkpKSB7CisgICAgaWYgKHNjZlZlcmlmeUFyY2hpdGVjdHVyZShzY2YpKSB7CisgICAgICBpZiAoc2NmQ2hlY2tTeXNlbUNhbGwoc2NmKSkgeworICAgICAgICBpZiAoc2NmQ2hlY2tBcmd1bWVudHMoc2NmKSkgeworICAgICAgICAgIGxvZ01lc3NhZ2UoU0NGX0xPR19MRVZFTCwKKyAgICAgICAgICAgICIlczogcHJvZ3JhbSBzaXplOiAlenUiLAorICAgICAgICAgICAgc2NmTG9nTGFiZWwsIHNjZi0+aW5zdHJ1Y3Rpb24uY291bnQKKyAgICAgICAgICApOworCisgICAgICAgICAgI2lmIFNDRl9MT0dfUFJPR1JBTQorICAgICAgICAgIGxvZ01lc3NhZ2UoU0NGX0xPR19MRVZFTCwgIiVzOiBiZWdpbiBwcm9ncmFtIiwgc2NmTG9nTGFiZWwpOworICAgICAgICAgIHNjZkxvZ1Byb2dyYW0oc2NmKTsKKyAgICAgICAgICBsb2dNZXNzYWdlKFNDRl9MT0dfTEVWRUwsICIlczogZW5kIHByb2dyYW0iLCBzY2ZMb2dMYWJlbCk7CisgICAgICAgICAgI2VuZGlmIC8qIFNDRl9MT0dfUFJPR1JBTSAqLworCisgICAgICAgICAgcmV0dXJuIHNjZjsKKyAgICAgICAgfQorICAgICAgfQorICAgIH0KKworICAgIHNjZkRlc3Ryb3lPYmplY3Qoc2NmKTsKKyAgfQorCisgIHJldHVybiBOVUxMOworfQorCitzdGF0aWMgdm9pZAorc2NmSW5zdGFsbEZpbHRlciAoY29uc3QgY2hhciAqbW9kZU5hbWUpIHsKKyAgY29uc3QgU0NGTW9kZSAqbW9kZSA9IHNjZkdldE1vZGUobW9kZU5hbWUpOworICBpZiAoIW1vZGUtPmRlbnkpIHJldHVybjsKKyAgU0NGT2JqZWN0ICpzY2Y7CisKKyNpZmRlZiBQUl9TRVRfTk9fTkVXX1BSSVZTCisgIGlmIChwcmN0bChQUl9TRVRfTk9fTkVXX1BSSVZTLCAxLCAwLCAwLCAwKSA9PSAtMSkgeworICAgIGxvZ1N5c3RlbUVycm9yKCJwcmN0bFtQUl9TRVRfTk9fTkVXX1BSSVZTXSIpOworICB9CisjZW5kaWYgLyogUFJfU0VUX05PX05FV19QUklWUyAqLworCisgIGlmICgoc2NmID0gc2NmTWFrZUZpbHRlcihtb2RlKSkpIHsKKyAgICBzdHJ1Y3Qgc29ja19mcHJvZyBwcm9ncmFtID0geworICAgICAgLmZpbHRlciA9IHNjZi0+aW5zdHJ1Y3Rpb24uYXJyYXksCisgICAgICAubGVuID0gc2NmLT5pbnN0cnVjdGlvbi5jb3VudAorICAgIH07CisKKyNpZiBkZWZpbmVkKFBSX1NFVF9TRUNDT01QKQorICAgIGlmIChwcmN0bChQUl9TRVRfU0VDQ09NUCwgU0VDQ09NUF9NT0RFX0ZJTFRFUiwgJnByb2dyYW0sIDAsIDApID09IC0xKSB7CisgICAgICBsb2dTeXN0ZW1FcnJvcigicHJjdGxbUFJfU0VUX1NFQ0NPTVAsU0VDQ09NUF9NT0RFX0ZJTFRFUl0iKTsKKyAgICB9CisjZWxpZiBkZWZpbmVkKFNFQ0NPTVBfU0VUX01PREVfRklMVEVSKQorICAgIHVuc2lnbmVkIGludCBmbGFncyA9IDA7CisKKyAgICBpZiAoc2VjY29tcChTRUNDT01QX1NFVF9NT0RFX0ZJTFRFUiwgZmxhZ3MsICZwcm9ncmFtKSA9PSAtMSkgeworICAgICAgbG9nU3lzdGVtRXJyb3IoInNlY2NvbXBbU0VDQ09NUF9TRVRfTU9ERV9GSUxURVJdIik7CisgICAgfQorI2Vsc2UgLyogaW5zdGFsbCBzeXN0ZW0gY2FsbCBmaWx0ZXIgKi8KKyN3YXJuaW5nIG5vIG1lY2hhbmlzbSBmb3IgaW5zdGFsbGluZyB0aGUgc3lzdGVtIGNhbGwgZmlsdGVyCisjZW5kaWYgLyogaW5zdGFsbCBzeXN0ZW0gY2FsbCBmaWx0ZXIgKi8KKworICAgIHNjZkRlc3Ryb3lPYmplY3Qoc2NmKTsKKyAgfQorfQorI2VuZGlmIC8qIFNFQ0NPTVBfTU9ERV9GSUxURVIgKi8KKwordHlwZWRlZiB2b2lkIFByaXZpbGVnZXNFc3RhYmxpc2htZW50RnVuY3Rpb24gKGludCBzdGF5UHJpdmlsZWdlZCk7Cit0eXBlZGVmIHZvaWQgTWlzc2luZ1ByaXZpbGVnZXNMb2dnZXIgKHZvaWQpOwordHlwZWRlZiB2b2lkIFJlbGVhc2VSZXNvdXJjZXNGdW5jdGlvbiAodm9pZCk7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgY29uc3QgY2hhciAqcmVhc29uOworICBQcml2aWxlZ2VzRXN0YWJsaXNobWVudEZ1bmN0aW9uICplc3RhYmxpc2hQcml2aWxlZ2VzOworICBNaXNzaW5nUHJpdmlsZWdlc0xvZ2dlciAqbG9nTWlzc2luZ1ByaXZpbGVnZXM7CisgIFJlbGVhc2VSZXNvdXJjZXNGdW5jdGlvbiAqcmVsZWFzZVJlc291cmNlczsKKworICAjaWZkZWYgQ0FQX0lTX1NVUFBPUlRFRAorICBjYXBfdmFsdWVfdCBjYXBhYmlsaXR5OworICB1bnNpZ25lZCBjaGFyIGluaGVyaXRhYmxlOjE7CisgICNlbmRpZiAvKiBDQVBfSVNfU1VQUE9SVEVEICovCit9IFByaXZpbGVnZXNNZWNoYW5pc21FbnRyeTsKKworc3RhdGljIGNvbnN0IFByaXZpbGVnZXNNZWNoYW5pc21FbnRyeSBwcml2aWxlZ2VzTWVjaGFuaXNtVGFibGVbXSA9IHsKKyAgeyAucmVhc29uID0gImZvciBpbnN0YWxsaW5nIGtlcm5lbCBtb2R1bGVzIiwKKyAgICAuZXN0YWJsaXNoUHJpdmlsZWdlcyA9IGluc3RhbGxLZXJuZWxNb2R1bGVzLAorCisgICAgI2lmZGVmIENBUF9TWVNfTU9EVUxFCisgICAgLmNhcGFiaWxpdHkgPSBDQVBfU1lTX01PRFVMRSwKKyAgICAuaW5oZXJpdGFibGUgPSAxLAorICAgICNlbmRpZiAvKiBDQVBfU1lTX01PRFVMRSwgKi8KKyAgfSwKKworI2lmZGVmIEhBVkVfR1JQX0gKKyAgeyAucmVhc29uID0gImZvciBqb2luaW5nIHRoZSByZXF1aXJlZCBncm91cHMiLAorICAgIC5lc3RhYmxpc2hQcml2aWxlZ2VzID0gam9pblJlcXVpcmVkR3JvdXBzLAorICAgIC5sb2dNaXNzaW5nUHJpdmlsZWdlcyA9IGxvZ01pc3NpbmdHcm91cHMsCisgICAgLnJlbGVhc2VSZXNvdXJjZXMgPSBjbG9zZUdyb3Vwc0RhdGFiYXNlLAorICB9LAorI2VuZGlmIC8qIEhBVkVfR1JQX0ggKi8KKworLy8gVGhpcyBvbmUgbXVzdCBiZSBsYXN0IGJlY2F1c2UgaXQgcmVsaW5xdWlzaGVzIHRoZSB0ZW1wb3JhcnkgY2FwYWJpbGl0aWVzLgorI2lmZGVmIENBUF9JU19TVVBQT1JURUQKKyAgeyAucmVhc29uID0gImZvciBhc3NpZ25pbmcgcmVxdWlyZWQgY2FwYWJpbGl0aWVzIiwKKyAgICAuZXN0YWJsaXNoUHJpdmlsZWdlcyA9IHNldFJlcXVpcmVkQ2FwYWJpbGl0aWVzLAorICAgIC5sb2dNaXNzaW5nUHJpdmlsZWdlcyA9IGxvZ01pc3NpbmdDYXBhYmlsaXRpZXMsCisgIH0KKyNlbmRpZiAvKiBDQVBfSVNfU1VQUE9SVEVEICovCit9OyBzdGF0aWMgY29uc3QgdWludDhfdCBwcml2aWxlZ2VzTWVjaGFuaXNtQ291bnQgPSBBUlJBWV9DT1VOVChwcml2aWxlZ2VzTWVjaGFuaXNtVGFibGUpOworCitzdGF0aWMgdm9pZAorZXN0YWJsaXNoUHJpdmlsZWdlcyAoaW50IHN0YXlQcml2aWxlZ2VkKSB7CisgIGlmIChhbVByaXZpbGVnZWRVc2VyKCkpIHsKKyAgICBjb25zdCBQcml2aWxlZ2VzTWVjaGFuaXNtRW50cnkgKnBtZSA9IHByaXZpbGVnZXNNZWNoYW5pc21UYWJsZTsKKyAgICBjb25zdCBQcml2aWxlZ2VzTWVjaGFuaXNtRW50cnkgKmVuZCA9IHBtZSArIHByaXZpbGVnZXNNZWNoYW5pc21Db3VudDsKKworICAgIHdoaWxlIChwbWUgPCBlbmQpIHsKKyAgICAgIHBtZS0+ZXN0YWJsaXNoUHJpdmlsZWdlcyhzdGF5UHJpdmlsZWdlZCk7CisgICAgICBwbWUgKz0gMTsKKyAgICB9CisgIH0KKworI2lmZGVmIENBUF9JU19TVVBQT1JURUQKKyAgZWxzZSB7CisgICAgY29uc3QgUHJpdmlsZWdlc01lY2hhbmlzbUVudHJ5ICpwbWUgPSBwcml2aWxlZ2VzTWVjaGFuaXNtVGFibGU7CisgICAgY29uc3QgUHJpdmlsZWdlc01lY2hhbmlzbUVudHJ5ICplbmQgPSBwbWUgKyBwcml2aWxlZ2VzTWVjaGFuaXNtQ291bnQ7CisKKyAgICB3aGlsZSAocG1lIDwgZW5kKSB7CisgICAgICBjYXBfdmFsdWVfdCBjYXBhYmlsaXR5ID0gcG1lLT5jYXBhYmlsaXR5OworCisgICAgICBpZiAoIWNhcGFiaWxpdHkgfHwgbmVlZENhcGFiaWxpdHkoY2FwYWJpbGl0eSwgcG1lLT5pbmhlcml0YWJsZSwgcG1lLT5yZWFzb24pKSB7CisgICAgICAgIHBtZS0+ZXN0YWJsaXNoUHJpdmlsZWdlcyhzdGF5UHJpdmlsZWdlZCk7CisgICAgICB9CisKKyAgICAgIHBtZSArPSAxOworICAgIH0KKyAgfQorI2VuZGlmIC8qIENBUF9JU19TVVBQT1JURUQgKi8KKworICB7CisgICAgY29uc3QgUHJpdmlsZWdlc01lY2hhbmlzbUVudHJ5ICpwbWUgPSBwcml2aWxlZ2VzTWVjaGFuaXNtVGFibGU7CisgICAgY29uc3QgUHJpdmlsZWdlc01lY2hhbmlzbUVudHJ5ICplbmQgPSBwbWUgKyBwcml2aWxlZ2VzTWVjaGFuaXNtQ291bnQ7CisKKyAgICB3aGlsZSAocG1lIDwgZW5kKSB7CisgICAgICB7CisgICAgICAgIE1pc3NpbmdQcml2aWxlZ2VzTG9nZ2VyICpsb2cgPSBwbWUtPmxvZ01pc3NpbmdQcml2aWxlZ2VzOworICAgICAgICBpZiAobG9nKSBsb2coKTsKKyAgICAgIH0KKworICAgICAgeworICAgICAgICBSZWxlYXNlUmVzb3VyY2VzRnVuY3Rpb24gKnJlbGVhc2UgPSBwbWUtPnJlbGVhc2VSZXNvdXJjZXM7CisgICAgICAgIGlmIChyZWxlYXNlKSByZWxlYXNlKCk7CisgICAgICB9CisKKyAgICAgIHBtZSArPSAxOworICAgIH0KKyAgfQorfQorCitzdGF0aWMgaW50Citpc0Vudmlyb25tZW50VmFyaWFibGVTZXQgKGNvbnN0IGNoYXIgKm5hbWUpIHsKKyAgY29uc3QgY2hhciAqdmFsdWUgPSBnZXRlbnYobmFtZSk7CisgIHJldHVybiB2YWx1ZSAmJiAqdmFsdWU7Cit9CisKK3N0YXRpYyBpbnQKK3Vuc2V0RW52aXJvbm1lbnRWYXJpYWJsZSAoY29uc3QgY2hhciAqbmFtZSkgeworICBpZiAoIWlzRW52aXJvbm1lbnRWYXJpYWJsZVNldChuYW1lKSkgcmV0dXJuIDE7CisKKyAgaWYgKHVuc2V0ZW52KG5hbWUpICE9IC0xKSB7CisgICAgbG9nTWVzc2FnZShMT0dfREVCVUcsICJlbnZpcm9ubWVudCB2YXJpYWJsZSB1bnNldDogJXMiLCBuYW1lKTsKKyAgICByZXR1cm4gMTsKKyAgfSBlbHNlIHsKKyAgICBsb2dTeXN0ZW1FcnJvcigidW5zZXRlbnYiKTsKKyAgfQorCisgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50CitzZXRFbnZpcm9ubWVudFZhcmlhYmxlIChjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICp2YWx1ZSkgeworICBpZiAoc2V0ZW52KG5hbWUsIHZhbHVlLCAxKSAhPSAtMSkgeworICAgIGxvZ01lc3NhZ2UoTE9HX0RFQlVHLCAiZW52aXJvbm1lbnQgdmFyaWFibGUgc2V0OiAlczogJXMiLCBuYW1lLCB2YWx1ZSk7CisgICAgcmV0dXJuIDE7CisgIH0gZWxzZSB7CisgICAgbG9nU3lzdGVtRXJyb3IoInNldGVudiIpOworICB9CisKKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK2NoYW5nZUVudmlyb25tZW50VmFyaWFibGUgKGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnZhbHVlKSB7CisgIGlmICghaXNFbnZpcm9ubWVudFZhcmlhYmxlU2V0KG5hbWUpKSByZXR1cm4gMTsKKyAgcmV0dXJuIHNldEVudmlyb25tZW50VmFyaWFibGUobmFtZSwgdmFsdWUpOworfQorCitzdGF0aWMgaW50CitzZXRIb21lRGlyZWN0b3J5IChjb25zdCBjaGFyICpkaXJlY3RvcnkpIHsKKyAgaWYgKCFkaXJlY3RvcnkpIHJldHVybiAwOworICBpZiAoISpkaXJlY3RvcnkpIHJldHVybiAwOworCisgIGlmIChjaGRpcihkaXJlY3RvcnkpICE9IC0xKSB7CisgICAgbG9nTWVzc2FnZShMT0dfSU5GTywgIiVzOiAlcyIsIGdldHRleHQoIndvcmtpbmcgZGlyZWN0b3J5IGNoYW5nZWQiKSwgZGlyZWN0b3J5KTsKKyAgICBzZXRFbnZpcm9ubWVudFZhcmlhYmxlKCJIT01FIiwgZGlyZWN0b3J5KTsKKyAgICByZXR1cm4gMTsKKyAgfSBlbHNlIHsKKyAgICBsb2dNZXNzYWdlKExPR19XQVJOSU5HLCAKKyAgICAgICJ3b3JraW5nIGRpcmVjdG9yeSBub3QgY2hhbmdlZDogJXM6ICVzIiwKKyAgICAgIGRpcmVjdG9yeSwgc3RyZXJyb3IoZXJybm8pCisgICAgKTsKKyAgfQorCisgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50CitzZXRDb21tYW5kU2VhcmNoUGF0aCAoY29uc3QgY2hhciAqcGF0aCkgeworICBjb25zdCBjaGFyICp2YXJpYWJsZSA9ICJQQVRIIjsKKworICBpZiAoISpwYXRoKSB7CisgICAgaW50IHBhcmFtZXRlciA9IF9DU19QQVRIOworICAgIHNpemVfdCBzaXplID0gY29uZnN0cihwYXJhbWV0ZXIsIE5VTEwsIDApOworCisgICAgaWYgKHNpemUgPiAwKSB7CisgICAgICBjaGFyIGJ1ZmZlcltzaXplXTsKKyAgICAgIGNvbmZzdHIocGFyYW1ldGVyLCBidWZmZXIsIHNpemVvZihidWZmZXIpKTsKKyAgICAgIHJldHVybiBzZXRFbnZpcm9ubWVudFZhcmlhYmxlKHZhcmlhYmxlLCBidWZmZXIpOworICAgIH0KKworICAgIHBhdGggPSAiL3Vzci9zYmluOi9zYmluOi91c3IvYmluOi9iaW4iOworICB9CisKKyAgcmV0dXJuIHNldEVudmlyb25tZW50VmFyaWFibGUodmFyaWFibGUsIHBhdGgpOworfQorCitzdGF0aWMgaW50CitzZXREZWZhdWx0U2hlbGwgKGNvbnN0IGNoYXIgKnNoZWxsKSB7CisgIGlmICghKnNoZWxsKSBzaGVsbCA9ICIvYmluL3NoIjsKKyAgcmV0dXJuIHNldEVudmlyb25tZW50VmFyaWFibGUoIlNIRUxMIiwgc2hlbGwpOworfQorCisjaWZkZWYgSEFWRV9QV0RfSAorc3RhdGljIGludAorY2FuU3dpdGNoR3JvdXAgKGdpZF90IGdpZCkgeworICB7CisgICAgZ2lkX3QgckdpZCwgZUdpZCwgc0dpZDsKKyAgICBnZXRyZXNnaWQoJnJHaWQsICZlR2lkLCAmc0dpZCk7CisgICAgaWYgKChnaWQgPT0gckdpZCkgfHwgKGdpZCA9PSBlR2lkKSB8fCAoZ2lkID09IHNHaWQpKSByZXR1cm4gMTsKKyAgfQorCisgIHJldHVybiBjYW5TZXRTdXBwbGVtZW50YXJ5R3JvdXBzKCJmb3Igc3dpdGNoaW5nIHRvIHRoZSB3cml0YWJsZSBncm91cCIpOworfQorCitzdGF0aWMgaW50CitzZXRYREdSdW50aW1lRGlyZWN0b3J5ICh1aWRfdCB1aWQsIGdpZF90IGdpZCkgeworICBjb25zdCBjaGFyICp2YXJpYWJsZSA9ICJYREdfUlVOVElNRV9ESVIiOworCisgIGNvbnN0IGNoYXIgKm9sZFBhdGggPSBnZXRlbnYodmFyaWFibGUpOworICBpZiAoIW9sZFBhdGgpIHJldHVybiAxOworICBpZiAoISpvbGRQYXRoKSByZXR1cm4gMTsKKworICBjb25zdCBjaGFyICpvbGROYW1lID0gbG9jYXRlUGF0aE5hbWUob2xkUGF0aCk7CisgIGlmICghb2xkTmFtZSkgcmV0dXJuIDE7CisKKyAgaW50IGxlbmd0aCA9IG9sZE5hbWUgLSBvbGRQYXRoOworICBjaGFyIG5ld1BhdGhbbGVuZ3RoICsgMFgyMF07CisgIHNucHJpbnRmKG5ld1BhdGgsIHNpemVvZihuZXdQYXRoKSwgIiUuKnMlZCIsIGxlbmd0aCwgb2xkUGF0aCwgdWlkKTsKKworICB7CisgICAgbG9nTWVzc2FnZShMT0dfREVCVUcsICJjaGVja2luZyBYREcgcnVudGltZSBkaXJlY3Rvcnk6ICVzIiwgbmV3UGF0aCk7CisgICAgaW50IGV4aXN0cyA9IDA7CisKKyAgICBpZiAoYWNjZXNzKG5ld1BhdGgsIEZfT0spICE9IC0xKSB7CisgICAgICBleGlzdHMgPSAxOworICAgICAgbG9nTWVzc2FnZShMT0dfREVCVUcsICIlczogJXMiLCBnZXR0ZXh0KCJYREcgcnVudGltZSBkaXJlY3RvcnkgZXhpc3RzIiksIG5ld1BhdGgpOworICAgIH0gZWxzZSBpZiAoZXJybm8gPT0gRU5PRU5UKSB7CisgICAgICBpZiAobWtkaXIobmV3UGF0aCwgU19JUldYVSkgIT0gLTEpIHsKKyAgICAgICAgaWYgKGNob3duKG5ld1BhdGgsIHVpZCwgZ2lkKSAhPSAwMSkgeworICAgICAgICAgIGV4aXN0cyA9IDE7CisgICAgICAgICAgbG9nTWVzc2FnZShMT0dfSU5GTywgIiVzOiAlcyIsIGdldHRleHQoIlhERyBydW50aW1lIGRpcmVjdG9yeSBjcmVhdGVkIiksIG5ld1BhdGgpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgIGxvZ1N5c3RlbUVycm9yKCJjaG93biIpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCFleGlzdHMpIHsKKyAgICAgICAgICBpZiAocm1kaXIobmV3UGF0aCkgPT0gLTEpIHsKKyAgICAgICAgICAgIGxvZ1N5c3RlbUVycm9yKCJybWRpciIpOworICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgfSBlbHNlIHsKKyAgICAgICAgbG9nU3lzdGVtRXJyb3IoIm1rZGlyIik7CisgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgIGxvZ1N5c3RlbUVycm9yKCJhY2Nlc3MiKTsKKyAgICB9CisKKyAgICBpZiAoIWV4aXN0cykgeworICAgICAgbG9nTWVzc2FnZShMT0dfV0FSTklORywgIiVzOiAlcyIsIGdldHRleHQoIlhERyBydW50aW1lIGRpcmVjdG9yeSBhY2Nlc3MgcHJvYmxlbSIpLCBuZXdQYXRoKTsKKyAgICB9CisgIH0KKworICByZXR1cm4gc2V0RW52aXJvbm1lbnRWYXJpYWJsZSh2YXJpYWJsZSwgbmV3UGF0aCk7Cit9CisKK3N0YXRpYyBpbnQKK3NldFByb2Nlc3NPd25lcnNoaXAgKHVpZF90IHVpZCwgZ2lkX3QgZ2lkKSB7CisgIGlmIChzZXRYREdSdW50aW1lRGlyZWN0b3J5KHVpZCwgZ2lkKSkgeworICAgIGdpZF90IG9sZFJnaWQsIG9sZEVnaWQsIG9sZFNnaWQ7CisKKyAgICBpZiAoZ2V0cmVzZ2lkKCZvbGRSZ2lkLCAmb2xkRWdpZCwgJm9sZFNnaWQpICE9IC0xKSB7CisgICAgICBpZiAoc2V0cmVzZ2lkKGdpZCwgZ2lkLCBnaWQpICE9IC0xKSB7CisgICAgICAgIGlmIChzZXRyZXN1aWQodWlkLCB1aWQsIHVpZCkgIT0gLTEpIHsKKyAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICBsb2dTeXN0ZW1FcnJvcigic2V0cmVzdWlkIik7CisgICAgICAgIH0KKworICAgICAgICBpZiAoc2V0cmVzZ2lkKG9sZFJnaWQsIG9sZEVnaWQsIG9sZFNnaWQpID09IC0xKSB7CisgICAgICAgICAgbG9nU3lzdGVtRXJyb3IoInNldHJlc2dpZCIpOworICAgICAgICB9CisgICAgICB9IGVsc2UgeworICAgICAgICBsb2dTeXN0ZW1FcnJvcigic2V0cmVzZ2lkIik7CisgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgIGxvZ1N5c3RlbUVycm9yKCJnZXRyZXNnaWQiKTsKKyAgICB9CisgIH0KKworICByZXR1cm4gMDsKK30KKworc3RhdGljIGludAorc3dpdGNoVG9Vc2VyIChjb25zdCBjaGFyICp1c2VyLCBpbnQgKmhhdmVIb21lRGlyZWN0b3J5KSB7CisgIGNvbnN0IHN0cnVjdCBwYXNzd2QgKnB3ZDsKKworICBpZiAoKHB3ZCA9IGdldHB3bmFtKHVzZXIpKSkgeworICAgIHVpZF90IHVpZCA9IHB3ZC0+cHdfdWlkOworICAgIGdpZF90IGdpZCA9IHB3ZC0+cHdfZ2lkOworCisgICAgaWYgKCF1aWQpIHsKKyAgICAgIGxvZ01lc3NhZ2UoTE9HX1dBUk5JTkcsICJub3QgYW4gdW5wcml2aWxlZ2VkIHVzZXI6ICVzIiwgdXNlcik7CisgICAgfSBlbHNlIGlmIChzZXRQcm9jZXNzT3duZXJzaGlwKHVpZCwgZ2lkKSkgeworICAgICAgbG9nTWVzc2FnZShMT0dfTk9USUNFLCAiJXM6ICVzIiwgZ2V0dGV4dCgic3dpdGNoZWQgdG8gdW5wcml2aWxlZ2VkIHVzZXIiKSwgdXNlcik7CisKKyAgICAgIGNoYW5nZUVudmlyb25tZW50VmFyaWFibGUoIlVTRVIiLCB1c2VyKTsKKyAgICAgIGNoYW5nZUVudmlyb25tZW50VmFyaWFibGUoIkxPR05BTUUiLCB1c2VyKTsKKworICAgICAgdW5zZXRFbnZpcm9ubWVudFZhcmlhYmxlKCJYREdfQ09ORklHX0hPTUUiKTsKKyAgICAgIHVuc2V0RW52aXJvbm1lbnRWYXJpYWJsZSgiWERHX0RBVEFfRElSUyIpOworCisgICAgICBpZiAoc2V0SG9tZURpcmVjdG9yeShwd2QtPnB3X2RpcikpICpoYXZlSG9tZURpcmVjdG9yeSA9IDE7CisgICAgICBmb3JnZXRPdmVycmlkZURpcmVjdG9yaWVzKCk7CisKKyAgICAgIHJldHVybiAxOworICAgIH0KKyAgfSBlbHNlIHsKKyAgICBsb2dNZXNzYWdlKExPR19XQVJOSU5HLCAidW5wcml2aWxlZ2VkIHVzZXIgbm90IGZvdW5kOiAlcyIsIHVzZXIpOworICB9CisKKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK3N3aXRjaFVzZXIgKGNvbnN0IGNoYXIgKnVzZXIsIGludCBzdGF5UHJpdmlsZWdlZCwgaW50ICpoYXZlSG9tZURpcmVjdG9yeSkgeworICBpZiAoYW1Qcml2aWxlZ2VkVXNlcigpKSB7CisgICAgaWYgKHN0YXlQcml2aWxlZ2VkKSB7CisgICAgICBsb2dNZXNzYWdlKExPR19OT1RJQ0UsICIlcyIsIGdldHRleHQoIm5vdCBzd2l0Y2hpbmcgdG8gYW4gdW5wcml2aWxlZ2VkIHVzZXIiKSk7CisgICAgfSBlbHNlIGlmICghKnVzZXIpIHsKKyAgICAgIGxvZ01lc3NhZ2UoTE9HX0RFQlVHLCAiZGVmYXVsdCB1bnByaXZpbGVnZWQgdXNlciBub3QgY29uZmlndXJlZCIpOworICAgIH0gZWxzZSBpZiAoc3dpdGNoVG9Vc2VyKHVzZXIsIGhhdmVIb21lRGlyZWN0b3J5KSkgeworICAgICAgcmV0dXJuIDE7CisgICAgfSBlbHNlIHsKKyAgICAgIGxvZ01lc3NhZ2UoTE9HX1dBUk5JTkcsICJjb3VsZG4ndCBzd2l0Y2ggdG8gdGhlIHVucHJpdmlsZWdlZCB1c2VyOiAlcyIsIHVzZXIpOworICAgIH0KKyAgfQorCisgIHsKKyAgICB1aWRfdCB1aWQgPSBnZXR1aWQoKTsKKyAgICBnaWRfdCBnaWQgPSBnZXRnaWQoKTsKKworICAgIHsKKyAgICAgIGNvbnN0IHN0cnVjdCBwYXNzd2QgKnB3ZDsKKyAgICAgIGNvbnN0IGNoYXIgKm5hbWU7CisgICAgICBjaGFyIG51bWJlclswWDEwXTsKKworICAgICAgaWYgKChwd2QgPSBnZXRwd3VpZCh1aWQpKSkgeworICAgICAgICBuYW1lID0gcHdkLT5wd19uYW1lOworICAgICAgICBpZiAoY2FuU3dpdGNoR3JvdXAocHdkLT5wd19naWQpKSBnaWQgPSBwd2QtPnB3X2dpZDsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIHNucHJpbnRmKG51bWJlciwgc2l6ZW9mKG51bWJlciksICIlZCIsIHVpZCk7CisgICAgICAgIG5hbWUgPSBudW1iZXI7CisgICAgICB9CisKKyAgICAgIGxvZ01lc3NhZ2UoTE9HX05PVElDRSwgIiVzOiAlcyIsIGdldHRleHQoImV4ZWN1dGluZyBhcyB0aGUgaW52b2tpbmcgdXNlciIpLCBuYW1lKTsKKyAgICB9CisKKyAgICBzZXRQcm9jZXNzT3duZXJzaGlwKHVpZCwgZ2lkKTsKKyAgICBpZiAoIWFtUHJpdmlsZWdlZFVzZXIoKSkgKmhhdmVIb21lRGlyZWN0b3J5ID0gMTsKKyAgfQorCisgIHJldHVybiAwOworfQorCitzdGF0aWMgY29uc3QgY2hhciAqCitnZXRTb2NrZXRzRGlyZWN0b3J5ICh2b2lkKSB7CisgIGNvbnN0IGNoYXIgKnBhdGggPSBCUkxBUElfU09DS0VUUEFUSDsKKyAgaWYgKCFlbnN1cmVEaXJlY3RvcnkocGF0aCwgMSkpIHBhdGggPSBOVUxMOworICByZXR1cm4gcGF0aDsKK30KKwordHlwZWRlZiBzdHJ1Y3QgeworICBjb25zdCBjaGFyICp3aGljaERpcmVjdG9yeTsKKyAgY29uc3QgY2hhciAqKCpnZXRQYXRoKSAodm9pZCk7CisgIGNvbnN0IGNoYXIgKmV4cGVjdGVkTmFtZTsKK30gU3RhdGVEaXJlY3RvcnlFbnRyeTsKKworc3RhdGljIGNvbnN0IFN0YXRlRGlyZWN0b3J5RW50cnkgc3RhdGVEaXJlY3RvcnlUYWJsZVtdID0geworICB7IC53aGljaERpcmVjdG9yeSA9ICJ1cGRhdGFibGUiLAorICAgIC5nZXRQYXRoID0gZ2V0VXBkYXRhYmxlRGlyZWN0b3J5LAorICAgIC5leHBlY3RlZE5hbWUgPSAiYnJsdHR5IiwKKyAgfSwKKworICB7IC53aGljaERpcmVjdG9yeSA9ICJ3cml0YWJsZSIsCisgICAgLmdldFBhdGggPSBnZXRXcml0YWJsZURpcmVjdG9yeSwKKyAgICAuZXhwZWN0ZWROYW1lID0gImJybHR0eSIsCisgIH0sCisKKyAgeyAud2hpY2hEaXJlY3RvcnkgPSAic29ja2V0cyIsCisgICAgLmdldFBhdGggPSBnZXRTb2NrZXRzRGlyZWN0b3J5LAorICAgIC5leHBlY3RlZE5hbWUgPSAiQnJsQVBJIiwKKyAgfSwKK307IHN0YXRpYyBjb25zdCB1aW50OF90IHN0YXRlRGlyZWN0b3J5Q291bnQgPSBBUlJBWV9DT1VOVChzdGF0ZURpcmVjdG9yeVRhYmxlKTsKKworc3RhdGljIGludAorY2FuQ3JlYXRlU3RhdGVEaXJlY3RvcnkgKHZvaWQpIHsKKyNpZmRlZiBDQVBfREFDX09WRVJSSURFCisgIGlmIChuZWVkQ2FwYWJpbGl0eShDQVBfREFDX09WRVJSSURFLCAwLCAiZm9yIGNyZWF0aW5nIG1pc3Npbmcgc3RhdGUgZGlyZWN0b3JpZXMiKSkgeworICAgIHJldHVybiAxOworICB9CisjZW5kaWYgLyogQ0FQX0RBQ19PVkVSUklERSAqLworCisgIHJldHVybiAwOworfQorCitzdGF0aWMgY29uc3QgY2hhciAqCitnZXRTdGF0ZURpcmVjdG9yeVBhdGggKGNvbnN0IFN0YXRlRGlyZWN0b3J5RW50cnkgKnNkZSkgeworICB7CisgICAgY29uc3QgY2hhciAqcGF0aCA9IHNkZS0+Z2V0UGF0aCgpOworICAgIGlmIChwYXRoKSByZXR1cm4gcGF0aDsKKyAgfQorCisgIGlmICghY2FuQ3JlYXRlU3RhdGVEaXJlY3RvcnkoKSkgcmV0dXJuIE5VTEw7CisgIHJldHVybiBzZGUtPmdldFBhdGgoKTsKK30KKworc3RhdGljIGludAorY2FuQ2hhbmdlUGF0aE93bmVyc2hpcCAoY29uc3QgY2hhciAqcGF0aCkgeworI2lmZGVmIENBUF9DSE9XTgorICBpZiAobmVlZENhcGFiaWxpdHkoQ0FQX0NIT1dOLCAwLCAiZm9yIGNsYWltaW5nIG93bmVyc2hpcCBvZiB0aGUgc3RhdGUgZGlyZWN0b3JpZXMiKSkgeworICAgIHJldHVybiAxOworICB9CisjZW5kaWYgLyogQ0FQX0NIT1dOICovCisKKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK2NhbkNoYW5nZVBhdGhQZXJtaXNzaW9ucyAoY29uc3QgY2hhciAqcGF0aCkgeworI2lmZGVmIENBUF9GT1dORVIKKyAgaWYgKG5lZWRDYXBhYmlsaXR5KENBUF9GT1dORVIsIDAsICJmb3IgYWRkaW5nIGdyb3VwIHBlcm1pc3Npb25zIHRvIHRoZSBzdGF0ZSBkaXJlY3RvcmllcyIpKSB7CisgICAgcmV0dXJuIDE7CisgIH0KKyNlbmRpZiAvKiBDQVBfRk9XTkVSICovCisKKyAgcmV0dXJuIDA7Cit9CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgdWlkX3Qgb3duaW5nVXNlcjsKKyAgZ2lkX3Qgb3duaW5nR3JvdXA7Cit9IFN0YXRlRGlyZWN0b3J5RGF0YTsKKworc3RhdGljIGludAorY2xhaW1TdGF0ZURpcmVjdG9yeSAoY29uc3QgUGF0aFByb2Nlc3NvclBhcmFtZXRlcnMgKnBhcmFtZXRlcnMpIHsKKyAgY29uc3QgU3RhdGVEaXJlY3RvcnlEYXRhICpzZGQgPSBwYXJhbWV0ZXJzLT5kYXRhOworICBjb25zdCBjaGFyICpwYXRoID0gcGFyYW1ldGVycy0+cGF0aDsKKyAgdWlkX3QgdXNlciA9IHNkZC0+b3duaW5nVXNlcjsKKyAgZ2lkX3QgZ3JvdXAgPSBzZGQtPm93bmluZ0dyb3VwOworICBzdHJ1Y3Qgc3RhdCBzdGF0dXM7CisKKyAgaWYgKHN0YXQocGF0aCwgJnN0YXR1cykgIT0gLTEpIHsKKyAgICBpbnQgb3duZXJzaGlwQ2xhaW1lZCA9IDA7CisKKyAgICBpZiAoKHN0YXR1cy5zdF91aWQgPT0gdXNlcikgJiYgKHN0YXR1cy5zdF9naWQgPT0gZ3JvdXApKSB7CisgICAgICBvd25lcnNoaXBDbGFpbWVkID0gMTsKKyAgICB9IGVsc2UgaWYgKCFjYW5DaGFuZ2VQYXRoT3duZXJzaGlwKHBhdGgpKSB7CisgICAgICBsb2dNZXNzYWdlKExPR19XQVJOSU5HLCAiY2FuJ3QgY2xhaW0gb3duZXJzaGlwOiAlcyIsIHBhdGgpOworICAgIH0gZWxzZSBpZiAoY2hvd24ocGF0aCwgdXNlciwgZ3JvdXApID09IC0xKSB7CisgICAgICBsb2dTeXN0ZW1FcnJvcigiY2hvd24iKTsKKyAgICB9IGVsc2UgeworICAgICAgbG9nTWVzc2FnZShMT0dfSU5GTywgIiVzOiAlcyIsIGdldHRleHQoIm93bmVyc2hpcCBjbGFpbWVkIiksIHBhdGgpOworICAgICAgb3duZXJzaGlwQ2xhaW1lZCA9IDE7CisgICAgfQorCisgICAgaWYgKG93bmVyc2hpcENsYWltZWQpIHsKKyAgICAgIG1vZGVfdCBvbGRNb2RlID0gc3RhdHVzLnN0X21vZGU7CisgICAgICBtb2RlX3QgbmV3TW9kZSA9IG9sZE1vZGU7CisKKyAgICAgIG5ld01vZGUgfD0gU19JUkdSUCB8IFNfSVdHUlA7CisgICAgICBpZiAoU19JU0RJUihuZXdNb2RlKSkgbmV3TW9kZSB8PSBTX0lYR1JQIHwgU19JU0dJRDsKKworICAgICAgaWYgKG5ld01vZGUgIT0gb2xkTW9kZSkgeworICAgICAgICBpZiAoIWNhbkNoYW5nZVBhdGhQZXJtaXNzaW9ucyhwYXRoKSkgeworICAgICAgICAgIGxvZ01lc3NhZ2UoTE9HX1dBUk5JTkcsICJjYW4ndCBhZGQgZ3JvdXAgcGVybWlzc2lvbnM6ICVzIiwgcGF0aCk7CisgICAgICAgIH0gZWxzZSBpZiAoY2htb2QocGF0aCwgbmV3TW9kZSkgIT0gLTEpIHsKKyAgICAgICAgICBsb2dNZXNzYWdlKExPR19JTkZPLCAiJXM6ICVzIiwgZ2V0dGV4dCgiZ3JvdXAgcGVybWlzc2lvbnMgYWRkZWQiKSwgcGF0aCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgbG9nU3lzdGVtRXJyb3IoImNobW9kIik7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9CisgIH0gZWxzZSB7CisgICAgbG9nU3lzdGVtRXJyb3IoInN0YXQiKTsKKyAgfQorCisgIHJldHVybiAxOworfQorCitzdGF0aWMgdm9pZAorY2xhaW1TdGF0ZURpcmVjdG9yaWVzICh2b2lkKSB7CisgIFN0YXRlRGlyZWN0b3J5RGF0YSBzZGQgPSB7CisgICAgLm93bmluZ1VzZXIgPSBnZXRldWlkKCksCisgICAgLm93bmluZ0dyb3VwID0gZ2V0ZWdpZCgpLAorICB9OworCisgIGNvbnN0IFN0YXRlRGlyZWN0b3J5RW50cnkgKnNkZSA9IHN0YXRlRGlyZWN0b3J5VGFibGU7CisgIGNvbnN0IFN0YXRlRGlyZWN0b3J5RW50cnkgKmVuZCA9IHNkZSArIHN0YXRlRGlyZWN0b3J5Q291bnQ7CisKKyAgd2hpbGUgKHNkZSA8IGVuZCkgeworICAgIGNvbnN0IGNoYXIgKnBhdGggPSBnZXRTdGF0ZURpcmVjdG9yeVBhdGgoc2RlKTsKKworICAgIGlmIChwYXRoICYmICpwYXRoKSB7CisgICAgICBjb25zdCBjaGFyICpuYW1lID0gbG9jYXRlUGF0aE5hbWUocGF0aCk7CisKKyAgICAgIGlmIChzdHJjYXNlY21wKG5hbWUsIHNkZS0+ZXhwZWN0ZWROYW1lKSA9PSAwKSB7CisgICAgICAgIHByb2Nlc3NQYXRoVHJlZShwYXRoLCBjbGFpbVN0YXRlRGlyZWN0b3J5LCAmc2RkKTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIGxvZ01lc3NhZ2UoTE9HX0RFQlVHLAorICAgICAgICAgICJub3QgY2xhaW1pbmcgJXMgZGlyZWN0b3J5OiAlcyAoZXhwZWN0aW5nICVzKSIsCisgICAgICAgICAgc2RlLT53aGljaERpcmVjdG9yeSwgcGF0aCwgc2RlLT5leHBlY3RlZE5hbWUKKyAgICAgICAgKTsKKyAgICAgIH0KKyAgICB9CisKKyAgICBzZGUgKz0gMTsKKyAgfQorfQorI2VuZGlmIC8qIEhBVkVfUFdEX0ggKi8KKwordHlwZWRlZiBlbnVtIHsKKyAgUEFSTV9QQVRILAorICBQQVJNX1NDRk1PREUsCisgIFBBUk1fU0hFTEwsCisgIFBBUk1fVVNFUiwKK30gUGFyYW1ldGVyczsKKworCitzdGF0aWMgY29uc3QgY2hhciAqY29uc3QgKmNvbnN0IHByaXZpbGVnZVBhcmFtZXRlck5hbWVzID0KKyAgTlVMTF9URVJNSU5BVEVEX1NUUklOR19BUlJBWSgKKyAgICAicGF0aCIsICJzY2Ztb2RlIiwgInNoZWxsIiwgInVzZXIiCisgICk7CisKK2NvbnN0IGNoYXIgKmNvbnN0ICoKK2dldFByaXZpbGVnZVBhcmFtZXRlck5hbWVzICh2b2lkKSB7CisgIHJldHVybiBwcml2aWxlZ2VQYXJhbWV0ZXJOYW1lczsKK30KKworY29uc3QgY2hhciAqCitnZXRQcml2aWxlZ2VQYXJhbWV0ZXJzUGxhdGZvcm0gKHZvaWQpIHsKKyAgcmV0dXJuICJseCI7Cit9CisKK3ZvaWQKK2VzdGFibGlzaFByb2dyYW1Qcml2aWxlZ2VzIChjaGFyICoqcGFyYW1ldGVycywgaW50IHN0YXlQcml2aWxlZ2VkKSB7CisgIGxvZ0N1cnJlbnRDYXBhYmlsaXRpZXMoImF0IHN0YXJ0Iik7CisKKyAgc2V0Q29tbWFuZFNlYXJjaFBhdGgocGFyYW1ldGVyc1tQQVJNX1BBVEhdKTsKKyAgc2V0RGVmYXVsdFNoZWxsKHBhcmFtZXRlcnNbUEFSTV9TSEVMTF0pOworCisjaWZkZWYgUFJfU0VUX0tFRVBDQVBTCisgIGlmIChwcmN0bChQUl9TRVRfS0VFUENBUFMsIDEsIDAsIDAsIDApID09IC0xKSB7CisgICAgbG9nU3lzdGVtRXJyb3IoInByY3RsW1BSX1NFVF9LRUVQQ0FQU10iKTsKKyAgfQorI2VuZGlmIC8qIFBSX1NFVF9LRUVQQ0FQUyAqLworCisjaWZkZWYgSEFWRV9TQ0hFRF9ICisgIGlzb2xhdGVOYW1lc3BhY2VzKCk7CisjZW5kaWYgLyogSEFWRV9TQ0hFRF9IICovCisKKyAgeworICAgIGNvbnN0IGNoYXIgKnVucHJpdmlsZWdlZFVzZXIgPSBwYXJhbWV0ZXJzW1BBUk1fVVNFUl07CisgICAgaW50IGhhdmVIb21lRGlyZWN0b3J5ID0gMDsKKworI2lmZGVmIEhBVkVfUFdEX0gKKyAgICBpbnQgc3dpdGNoZWQgPSBzd2l0Y2hVc2VyKAorICAgICAgdW5wcml2aWxlZ2VkVXNlciwKKyAgICAgIHN0YXlQcml2aWxlZ2VkLAorICAgICAgJmhhdmVIb21lRGlyZWN0b3J5CisgICAgKTsKKworICAgIGlmIChzd2l0Y2hlZCkgeworICAgICAgdW1hc2sodW1hc2soMCkgJiB+U19JUldYRyk7CisgICAgICBjbGFpbVN0YXRlRGlyZWN0b3JpZXMoKTsKKyAgICB9IGVsc2UgeworICAgICAgbG9nTWVzc2FnZShMT0dfREVCVUcsICJub3QgY2xhaW1pbmcgc3RhdGUgZGlyZWN0b3JpZXMiKTsKKyAgICB9CisKKyAgICBlbmRwd2VudCgpOworI2VuZGlmIC8qIEhBVkVfUFdEX0ggKi8KKworICAgIGlmICghaGF2ZUhvbWVEaXJlY3RvcnkpIHsKKyAgICAgIGlmICghc2V0SG9tZURpcmVjdG9yeShnZXRVcGRhdGFibGVEaXJlY3RvcnkoKSkpIHsKKyAgICAgICAgbG9nTWVzc2FnZShMT0dfV0FSTklORywgImhvbWUgZGlyZWN0b3J5IG5vdCBzZXQiKTsKKyAgICAgIH0KKyAgICB9CisgIH0KKworICBlc3RhYmxpc2hQcml2aWxlZ2VzKHN0YXlQcml2aWxlZ2VkKTsKKyAgbG9nQ3VycmVudENhcGFiaWxpdGllcygiYWZ0ZXIgcmVsaW5xdWlzaCIpOworCisjaWZkZWYgU0VDQ09NUF9NT0RFX0ZJTFRFUgorICBzY2ZJbnN0YWxsRmlsdGVyKHBhcmFtZXRlcnNbUEFSTV9TQ0ZNT0RFXSk7CisjZW5kaWYgLyogU0VDQ09NUF9NT0RFX0ZJTFRFUiAqLworfQpkaWZmIC0tZ2l0IGEvUHJvZ3JhbXMvcGdtcHJpdnNfbm9uZS5jIGIvUHJvZ3JhbXMvcGdtcHJpdnNfbm9uZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYyMmI1MmYKLS0tIC9kZXYvbnVsbAorKysgYi9Qcm9ncmFtcy9wZ21wcml2c19ub25lLmMKQEAgLTAsMCArMSwzNiBAQAorLyoKKyAqIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisgKiAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisgKgorICogQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKKyNpbmNsdWRlICJwcm9sb2d1ZS5oIgorCisjaW5jbHVkZSAicGdtcHJpdnMuaCIKKworY29uc3QgY2hhciAqY29uc3QgKgorZ2V0UHJpdmlsZWdlUGFyYW1ldGVyTmFtZXMgKHZvaWQpIHsKKyAgc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IG5hbWVzW10gPSB7TlVMTH07CisgIHJldHVybiBuYW1lczsKK30KKworY29uc3QgY2hhciAqCitnZXRQcml2aWxlZ2VQYXJhbWV0ZXJzUGxhdGZvcm0gKHZvaWQpIHsKKyAgcmV0dXJuICJubyI7Cit9CisKK3ZvaWQKK2VzdGFibGlzaFByb2dyYW1Qcml2aWxlZ2VzIChjaGFyICoqcGFyYW1ldGVycywgaW50IHN0YXlQcml2aWxlZ2VkKSB7Cit9CmRpZmYgLS1naXQgYS9Qcm9ncmFtcy9waWQuYyBiL1Byb2dyYW1zL3BpZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIyYjdlODEKLS0tIC9kZXYvbnVsbAorKysgYi9Qcm9ncmFtcy9waWQuYwpAQCAtMCwwICsxLDg0IEBACisvKgorICogQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyAqICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyAqCisgKiBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorICoKKyAqIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyAqCisgKiBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisgKi8KKworI2luY2x1ZGUgInByb2xvZ3VlLmgiCisKKyNpbmNsdWRlIDxlcnJuby5oPgorCisjaW5jbHVkZSAicGlkLmgiCisKKyNpZiBkZWZpbmVkKF9fTVNET1NfXykgfHwgZGVmaW5lZChHUlVCX1JVTlRJTUUpCitQcm9jZXNzSWRlbnRpZmllcgorZ2V0UHJvY2Vzc0lkZW50aWZpZXIgKHZvaWQpIHsKKyAgcmV0dXJuIE1ZX1BST0NFU1NfSUQ7Cit9CisKK2ludAordGVzdFByb2Nlc3NJZGVudGlmaWVyIChQcm9jZXNzSWRlbnRpZmllciBwaWQpIHsKKyAgcmV0dXJuIHBpZCA9PSBNWV9QUk9DRVNTX0lEOworfQorCitpbnQKK2NhbmNlbFByb2Nlc3MgKFByb2Nlc3NJZGVudGlmaWVyIHBpZCkgeworICBlcnJubyA9IEVOT1NZUzsKKyAgcmV0dXJuIDA7Cit9CisKKyNlbGlmIGRlZmluZWQoX19NSU5HVzMyX18pCitQcm9jZXNzSWRlbnRpZmllcgorZ2V0UHJvY2Vzc0lkZW50aWZpZXIgKHZvaWQpIHsKKyAgcmV0dXJuIEdldEN1cnJlbnRQcm9jZXNzSWQoKTsKK30KKworaW50Cit0ZXN0UHJvY2Vzc0lkZW50aWZpZXIgKFByb2Nlc3NJZGVudGlmaWVyIHBpZCkgeworICBIQU5ETEUgaGFuZGxlID0gT3BlblByb2Nlc3MoUFJPQ0VTU19RVUVSWV9JTkZPUk1BVElPTiwgRkFMU0UsIHBpZCk7CisgIGlmICghaGFuZGxlKSByZXR1cm4gMDsKKyAgQ2xvc2VIYW5kbGUoaGFuZGxlKTsKKyAgcmV0dXJuIDE7Cit9CisKK2ludAorY2FuY2VsUHJvY2VzcyAoUHJvY2Vzc0lkZW50aWZpZXIgcGlkKSB7CisgIGVycm5vID0gRU5PU1lTOworICByZXR1cm4gMDsKK30KKworI2Vsc2UgLyogVW5peCAqLworCisjaWZkZWYgSEFWRV9TSUdOQUxfSAorI2luY2x1ZGUgPHNpZ25hbC5oPgorI2VuZGlmIC8qIEhBVkVfU0lHTkFMX0ggKi8KKworUHJvY2Vzc0lkZW50aWZpZXIKK2dldFByb2Nlc3NJZGVudGlmaWVyICh2b2lkKSB7CisgIHJldHVybiBnZXRwaWQoKTsKK30KKworaW50Cit0ZXN0UHJvY2Vzc0lkZW50aWZpZXIgKFByb2Nlc3NJZGVudGlmaWVyIHBpZCkgeworICByZXR1cm4ga2lsbChwaWQsIDApICE9IC0xOworfQorCitpbnQKK2NhbmNlbFByb2Nlc3MgKFByb2Nlc3NJZGVudGlmaWVyIHBpZCkgeworICBpZiAoa2lsbChwaWQsIFNJR1RFUk0pICE9IC0xKSByZXR1cm4gMTsKKyAgcmV0dXJuIDA7Cit9CisKKyNlbmRpZiAvKiBwaWQgc3VwcG9ydCAqLwpkaWZmIC0tZ2l0IGEvUHJvZ3JhbXMvcGlwZS5jIGIvUHJvZ3JhbXMvcGlwZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMzNjE2ZTQKLS0tIC9kZXYvbnVsbAorKysgYi9Qcm9ncmFtcy9waXBlLmMKQEAgLTAsMCArMSwzNjIgQEAKKy8qCisgKiBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorICogICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorICoKKyAqIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorICoKKyAqIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyAqLworCisjaW5jbHVkZSAicHJvbG9ndWUuaCIKKworI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKyNpbmNsdWRlIDxmY250bC5oPgorCisjaW5jbHVkZSAibG9nLmgiCisjaW5jbHVkZSAicGlwZS5oIgorI2luY2x1ZGUgImZpbGUuaCIKKyNpbmNsdWRlICJpb19taXNjLmgiCisjaW5jbHVkZSAiYXN5bmNfaGFuZGxlLmgiCisjaW5jbHVkZSAiYXN5bmNfaW8uaCIKKworc3RydWN0IE5hbWVkUGlwZU9iamVjdFN0cnVjdCB7CisgIE5hbWVkUGlwZUlucHV0Q2FsbGJhY2sgKmNhbGxiYWNrOworICB2b2lkICpkYXRhOworCisgIGludCAoKmNyZWF0ZVBpcGUpIChOYW1lZFBpcGVPYmplY3QgKm9iaik7CisgIGludCAoKm1vbml0b3JQaXBlKSAoTmFtZWRQaXBlT2JqZWN0ICpvYmopOworICB2b2lkICgqcmVzZXRQaXBlKSAoTmFtZWRQaXBlT2JqZWN0ICpvYmopOworICB2b2lkICgqcmVsZWFzZVJlc291cmNlcykgKE5hbWVkUGlwZU9iamVjdCAqb2JqKTsKKworICBzdHJ1Y3QgeworICAgIGNoYXIgKnBhdGg7CisgIH0gaG9zdDsKKworICBzdHJ1Y3QgeworICAgIEZpbGVEZXNjcmlwdG9yIGRlc2NyaXB0b3I7CisgICAgQXN5bmNIYW5kbGUgbW9uaXRvcjsKKyAgfSBpbnB1dDsKKworI2lmIGRlZmluZWQoX19NSU5HVzMyX18pCisgIHN0cnVjdCB7CisgICAgc3RydWN0IHsKKyAgICAgIEFzeW5jSGFuZGxlIG1vbml0b3I7CisgICAgICBIQU5ETEUgZXZlbnQ7CisgICAgICBPVkVSTEFQUEVEIG92ZXJsYXBwZWQ7CisgICAgfSBjb25uZWN0OworICB9IHdpbmRvd3M7CisKKyNlbmRpZiAvKiAgKi8KK307CisKK3N0YXRpYyB2b2lkCitpbml0aWFsaXplSG9zdFBhdGggKE5hbWVkUGlwZU9iamVjdCAqb2JqKSB7CisgIG9iai0+aG9zdC5wYXRoID0gTlVMTDsKK30KKworc3RhdGljIHZvaWQKK2RlYWxsb2NhdGVIb3N0UGF0aCAoTmFtZWRQaXBlT2JqZWN0ICpvYmopIHsKKyAgZnJlZShvYmotPmhvc3QucGF0aCk7CisgIGluaXRpYWxpemVIb3N0UGF0aChvYmopOworfQorCitzdGF0aWMgdm9pZAorcmVtb3ZlUGlwZSAoTmFtZWRQaXBlT2JqZWN0ICpvYmopIHsKKyAgdW5saW5rKG9iai0+aG9zdC5wYXRoKTsKK30KKworc3RhdGljIHZvaWQKK2luaXRpYWxpemVJbnB1dERlc2NyaXB0b3IgKE5hbWVkUGlwZU9iamVjdCAqb2JqKSB7CisgIG9iai0+aW5wdXQuZGVzY3JpcHRvciA9IElOVkFMSURfRklMRV9ERVNDUklQVE9SOworfQorCitzdGF0aWMgdm9pZAorY2xvc2VJbnB1dERlc2NyaXB0b3IgKE5hbWVkUGlwZU9iamVjdCAqb2JqKSB7CisgIGNsb3NlRmlsZURlc2NyaXB0b3Iob2JqLT5pbnB1dC5kZXNjcmlwdG9yKTsKKyAgaW5pdGlhbGl6ZUlucHV0RGVzY3JpcHRvcihvYmopOworfQorCitzdGF0aWMgdm9pZAoraW5pdGlhbGl6ZUlucHV0TW9uaXRvciAoTmFtZWRQaXBlT2JqZWN0ICpvYmopIHsKKyAgb2JqLT5pbnB1dC5tb25pdG9yID0gTlVMTDsKK30KKworc3RhdGljIHZvaWQKK3N0b3BJbnB1dE1vbml0b3IgKE5hbWVkUGlwZU9iamVjdCAqb2JqKSB7CisgIGFzeW5jQ2FuY2VsUmVxdWVzdChvYmotPmlucHV0Lm1vbml0b3IpOworICBpbml0aWFsaXplSW5wdXRNb25pdG9yKG9iaik7Cit9CisKK0FTWU5DX0lOUFVUX0NBTExCQUNLKGhhbmRsZU5hbWVkUGlwZUlucHV0KSB7CisgIE5hbWVkUGlwZU9iamVjdCAqb2JqID0gcGFyYW1ldGVycy0+ZGF0YTsKKworICBpZiAocGFyYW1ldGVycy0+ZXJyb3IpIHsKKyAgICBsb2dNZXNzYWdlKExPR19XQVJOSU5HLCAibmFtZWQgcGlwZSBpbnB1dCBlcnJvcjogJXM6ICVzIiwKKyAgICAgICAgICAgICAgIG9iai0+aG9zdC5wYXRoLCBzdHJlcnJvcihwYXJhbWV0ZXJzLT5lcnJvcikpOworICB9IGVsc2UgaWYgKHBhcmFtZXRlcnMtPmVuZCkgeworICAgIGxvZ01lc3NhZ2UoTE9HX1dBUk5JTkcsICJuYW1lZCBwaXBlIGVuZC1vZi1maWxlOiAlcyIsIG9iai0+aG9zdC5wYXRoKTsKKyAgfSBlbHNlIHsKKyAgICBjb25zdCBOYW1lZFBpcGVJbnB1dENhbGxiYWNrUGFyYW1ldGVycyBpbnB1dCA9IHsKKyAgICAgIC5idWZmZXIgPSBwYXJhbWV0ZXJzLT5idWZmZXIsCisgICAgICAubGVuZ3RoID0gcGFyYW1ldGVycy0+bGVuZ3RoLAorICAgICAgLmRhdGEgPSBvYmotPmRhdGEKKyAgICB9OworCisgICAgcmV0dXJuIG9iai0+Y2FsbGJhY2soJmlucHV0KTsKKyAgfQorCisgIGFzeW5jRGlzY2FyZEhhbmRsZShvYmotPmlucHV0Lm1vbml0b3IpOworICBpbml0aWFsaXplSW5wdXRNb25pdG9yKG9iaik7CisKKyAgaWYgKG9iai0+cmVzZXRQaXBlKSBvYmotPnJlc2V0UGlwZShvYmopOworICBvYmotPm1vbml0b3JQaXBlKG9iaik7CisKKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK21vbml0b3JJbnB1dCAoTmFtZWRQaXBlT2JqZWN0ICpvYmopIHsKKyAgaWYgKCFvYmotPmlucHV0Lm1vbml0b3IpIHsKKyAgICBpZiAoIWFzeW5jUmVhZEZpbGUoJm9iai0+aW5wdXQubW9uaXRvciwgb2JqLT5pbnB1dC5kZXNjcmlwdG9yLCAwWDEwMDAsIGhhbmRsZU5hbWVkUGlwZUlucHV0LCBvYmopKSB7CisgICAgICByZXR1cm4gMDsKKyAgICB9CisgIH0KKworICByZXR1cm4gMTsKK30KKworI2lmIGRlZmluZWQoX19NSU5HVzMyX18pCitzdGF0aWMgaW50CitjcmVhdGVXaW5kb3dzUGlwZSAoTmFtZWRQaXBlT2JqZWN0ICpvYmopIHsKKyAgb2JqLT53aW5kb3dzLmNvbm5lY3QubW9uaXRvciA9IE5VTEw7CisKKyAgaWYgKChvYmotPndpbmRvd3MuY29ubmVjdC5ldmVudCA9IENyZWF0ZUV2ZW50KE5VTEwsIFRSVUUsIEZBTFNFLCBOVUxMKSkpIHsKKyAgICBpZiAoKG9iai0+aW5wdXQuZGVzY3JpcHRvciA9IENyZWF0ZU5hbWVkUGlwZShvYmotPmhvc3QucGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQSVBFX0FDQ0VTU19JTkJPVU5EIHwgRklMRV9GTEFHX09WRVJMQVBQRUQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUElQRV9UWVBFX01FU1NBR0UgfCBQSVBFX1JFQURNT0RFX01FU1NBR0UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSwgMCwgMCwgMCwgTlVMTCkpICE9IElOVkFMSURfSEFORExFX1ZBTFVFKSB7CisgICAgICBsb2dNZXNzYWdlKExPR19ERUJVRywgIm5hbWVkIHBpcGUgY3JlYXRlZDogJXM6IGhhbmRsZT0ldSIsCisgICAgICAgICAgICAgICAgIG9iai0+aG9zdC5wYXRoLCAodW5zaWduZWQgaW50KW9iai0+aW5wdXQuZGVzY3JpcHRvcik7CisKKyAgICAgIHJldHVybiAxOworICAgIH0gZWxzZSB7CisgICAgICBsb2dXaW5kb3dzU3lzdGVtRXJyb3IoIkNyZWF0ZU5hbWVkUGlwZSIpOworICAgIH0KKworICAgIENsb3NlSGFuZGxlKG9iai0+d2luZG93cy5jb25uZWN0LmV2ZW50KTsKKyAgfSBlbHNlIHsKKyAgICBsb2dXaW5kb3dzU3lzdGVtRXJyb3IoIkNyZWF0ZUV2ZW50Iik7CisgIH0KKworICByZXR1cm4gMDsKK30KKworc3RhdGljIGludAorZG9XaW5kb3dzUGlwZUNvbm5lY3RlZCAoTmFtZWRQaXBlT2JqZWN0ICpvYmopIHsKKyAgcmV0dXJuIG1vbml0b3JJbnB1dChvYmopOworfQorCitBU1lOQ19NT05JVE9SX0NBTExCQUNLKGhhbmRsZVdpbmRvd3NQaXBlQ29ubmVjdGVkKSB7CisgIE5hbWVkUGlwZU9iamVjdCAqb2JqID0gcGFyYW1ldGVycy0+ZGF0YTsKKworICBhc3luY0Rpc2NhcmRIYW5kbGUob2JqLT53aW5kb3dzLmNvbm5lY3QubW9uaXRvcik7CisgIG9iai0+d2luZG93cy5jb25uZWN0Lm1vbml0b3IgPSBOVUxMOworCisgIGRvV2luZG93c1BpcGVDb25uZWN0ZWQob2JqKTsKKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK21vbml0b3JXaW5kb3dzUGlwZUNvbm5lY3QgKE5hbWVkUGlwZU9iamVjdCAqb2JqKSB7CisgIGlmIChSZXNldEV2ZW50KG9iai0+d2luZG93cy5jb25uZWN0LmV2ZW50KSkgeworICAgIFplcm9NZW1vcnkoJm9iai0+d2luZG93cy5jb25uZWN0Lm92ZXJsYXBwZWQsIHNpemVvZihvYmotPndpbmRvd3MuY29ubmVjdC5vdmVybGFwcGVkKSk7CisgICAgb2JqLT53aW5kb3dzLmNvbm5lY3Qub3ZlcmxhcHBlZC5oRXZlbnQgPSBvYmotPndpbmRvd3MuY29ubmVjdC5ldmVudDsKKworICAgIGlmIChDb25uZWN0TmFtZWRQaXBlKG9iai0+aW5wdXQuZGVzY3JpcHRvciwgJm9iai0+d2luZG93cy5jb25uZWN0Lm92ZXJsYXBwZWQpKSB7CisgICAgICBpZiAoZG9XaW5kb3dzUGlwZUNvbm5lY3RlZChvYmopKSB7CisgICAgICAgIHJldHVybiAxOworICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICBEV09SRCBlcnJvciA9IEdldExhc3RFcnJvcigpOworCisgICAgICBpZiAoZXJyb3IgPT0gRVJST1JfUElQRV9DT05ORUNURUQpIHsKKyAgICAgICAgaWYgKGRvV2luZG93c1BpcGVDb25uZWN0ZWQob2JqKSkgeworICAgICAgICAgIHJldHVybiAxOworICAgICAgICB9CisgICAgICB9IGVsc2UgaWYgKGVycm9yID09IEVSUk9SX0lPX1BFTkRJTkcpIHsKKyAgICAgICAgaWYgKGFzeW5jTW9uaXRvckZpbGVJbnB1dCgmb2JqLT53aW5kb3dzLmNvbm5lY3QubW9uaXRvciwgb2JqLT53aW5kb3dzLmNvbm5lY3QuZXZlbnQsIGhhbmRsZVdpbmRvd3NQaXBlQ29ubmVjdGVkLCBvYmopKSB7CisgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgIH0KKyAgICAgIH0gZWxzZSB7CisgICAgICAgIGxvZ1dpbmRvd3NFcnJvcihlcnJvciwgIkNvbm5lY3ROYW1lZFBpcGUiKTsKKyAgICAgIH0KKyAgICB9CisgIH0gZWxzZSB7CisgICAgbG9nV2luZG93c1N5c3RlbUVycm9yKCJSZXNldEV2ZW50Iik7CisgIH0KKworICByZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQKK2Rpc2Nvbm5lY3RXaW5kb3dzUGlwZSAoTmFtZWRQaXBlT2JqZWN0ICpvYmopIHsKKyAgaWYgKCFEaXNjb25uZWN0TmFtZWRQaXBlKG9iai0+aW5wdXQuZGVzY3JpcHRvcikpIHsKKyAgICBsb2dXaW5kb3dzU3lzdGVtRXJyb3IoIkRpc2Nvbm5lY3ROYW1lZFBpcGUiKTsKKyAgfQorfQorCitzdGF0aWMgdm9pZAorcmVsZWFzZVdpbmRvd3NSZXNvdXJjZXMgKE5hbWVkUGlwZU9iamVjdCAqb2JqKSB7CisgIGlmIChvYmotPndpbmRvd3MuY29ubmVjdC5tb25pdG9yKSB7CisgICAgYXN5bmNDYW5jZWxSZXF1ZXN0KG9iai0+d2luZG93cy5jb25uZWN0Lm1vbml0b3IpOworICAgIG9iai0+d2luZG93cy5jb25uZWN0Lm1vbml0b3IgPSBOVUxMOworICB9CisKKyAgaWYgKG9iai0+d2luZG93cy5jb25uZWN0LmV2ZW50KSB7CisgICAgQ2xvc2VIYW5kbGUob2JqLT53aW5kb3dzLmNvbm5lY3QuZXZlbnQpOworICAgIG9iai0+d2luZG93cy5jb25uZWN0LmV2ZW50ID0gTlVMTDsKKyAgfQorfQorCitzdGF0aWMgdm9pZAorc2V0TmFtZWRQaXBlTWV0aG9kcyAoTmFtZWRQaXBlT2JqZWN0ICpvYmopIHsKKyAgb2JqLT5jcmVhdGVQaXBlID0gY3JlYXRlV2luZG93c1BpcGU7CisgIG9iai0+bW9uaXRvclBpcGUgPSBtb25pdG9yV2luZG93c1BpcGVDb25uZWN0OworICBvYmotPnJlc2V0UGlwZSA9IGRpc2Nvbm5lY3RXaW5kb3dzUGlwZTsKKyAgb2JqLT5yZWxlYXNlUmVzb3VyY2VzID0gcmVsZWFzZVdpbmRvd3NSZXNvdXJjZXM7Cit9CisKKyNlbGlmIGRlZmluZWQoU19JU0ZJRk8pCitzdGF0aWMgaW50CitjcmVhdGVGaWZvIChOYW1lZFBpcGVPYmplY3QgKm9iaikgeworICBsb2NrVW1hc2soKTsKKyAgaW50IHJlc3VsdCA9IG1rZmlmbyhvYmotPmhvc3QucGF0aCwgMCk7CisgIHVubG9ja1VtYXNrKCk7CisKKyAgaWYgKChyZXN1bHQgPT0gLTEpICYmIChlcnJubyA9PSBFRVhJU1QpKSB7CisgICAgc3RydWN0IHN0YXQgZmlmbzsKKworICAgIGlmIChsc3RhdChvYmotPmhvc3QucGF0aCwgJmZpZm8pID09IC0xKSB7CisgICAgICBsb2dNZXNzYWdlKExPR19FUlIsICJjYW5ub3Qgc3RhdCBGSUZPOiAlczogJXMiLAorICAgICAgICAgICAgICAgICBvYmotPmhvc3QucGF0aCwgc3RyZXJyb3IoZXJybm8pKTsKKyAgICB9IGVsc2UgaWYgKFNfSVNGSUZPKGZpZm8uc3RfbW9kZSkpIHsKKyAgICAgIHJlc3VsdCA9IDA7CisgICAgfQorICB9CisKKyAgaWYgKHJlc3VsdCAhPSAtMSkgeworICAgIGxvY2tVbWFzaygpOworICAgIGludCBjaGFuZ2VkID0gY2htb2Qob2JqLT5ob3N0LnBhdGgsIFNfSVJVU1J8U19JV1VTUnxTX0lXR1JQfFNfSVdPVEgpICE9IC0xOworICAgIHVubG9ja1VtYXNrKCk7CisKKyAgICBpZiAoY2hhbmdlZCkgeworICAgICAgLy8gb3BlbiByZWFkLXdyaXRlIGV2ZW4gdGhvdWdoIHdlIG9ubHkgcmVhZCB0byBwcmV2ZW50IGFuIGVuZC1vZi1maWxlIGNvbmRpdGlvbgorICAgICAgaWYgKChvYmotPmlucHV0LmRlc2NyaXB0b3IgPSBvcGVuKG9iai0+aG9zdC5wYXRoLCBPX1JEV1J8T19OT05CTE9DSykpICE9IC0xKSB7CisgICAgICAgIGxvZ01lc3NhZ2UoTE9HX0RFQlVHLCAiRklGTyBjcmVhdGVkOiAlczogZmQ9JWQiLAorICAgICAgICAgICAgICAgICAgIG9iai0+aG9zdC5wYXRoLCBvYmotPmlucHV0LmRlc2NyaXB0b3IpOworCisgICAgICAgIHNldENsb3NlT25FeGVjKG9iai0+aW5wdXQuZGVzY3JpcHRvciwgMSk7CisgICAgICAgIHJldHVybiAxOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgbG9nTWVzc2FnZShMT0dfRVJSLCAiY2Fubm90IG9wZW4gRklGTzogJXM6ICVzIiwKKyAgICAgICAgICAgICAgICAgICBvYmotPmhvc3QucGF0aCwgc3RyZXJyb3IoZXJybm8pKTsKKyAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgbG9nTWVzc2FnZShMT0dfRVJSLCAiY2Fubm90IHNldCBGSUZPIHBlcm1pc3Npb25zOiAlczogJXMiLAorICAgICAgICAgICAgICAgICBvYmotPmhvc3QucGF0aCwgc3RyZXJyb3IoZXJybm8pKTsKKyAgICB9CisKKyAgICByZW1vdmVQaXBlKG9iaik7CisgIH0gZWxzZSB7CisgICAgbG9nTWVzc2FnZShMT0dfRVJSLCAiY2Fubm90IGNyZWF0ZSBGSUZPOiAlczogJXMiLAorICAgICAgICAgICAgICAgb2JqLT5ob3N0LnBhdGgsIHN0cmVycm9yKGVycm5vKSk7CisgIH0KKworICByZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQKK3NldE5hbWVkUGlwZU1ldGhvZHMgKE5hbWVkUGlwZU9iamVjdCAqb2JqKSB7CisgIG9iai0+Y3JlYXRlUGlwZSA9IGNyZWF0ZUZpZm87Cit9CisKKyNlbHNlIC8qIG5hbWVkIHBpcGUgZnVuY3Rpb25zICovCisjd2FybmluZyBuYW1lZCBwaXBlcyBub3Qgc3VwcG9ydGVkIG9uIHRoaXMgcGxhdGZvcm0KKworc3RhdGljIHZvaWQKK3NldE5hbWVkUGlwZU1ldGhvZHMgKE5hbWVkUGlwZU9iamVjdCAqb2JqKSB7Cit9CisjZW5kaWYgLyogbmFtZWQgcGlwZXMgZnVuY3Rpb25zICovCisKK05hbWVkUGlwZU9iamVjdCAqCituZXdOYW1lZFBpcGVPYmplY3QgKGNvbnN0IGNoYXIgKm5hbWUsIE5hbWVkUGlwZUlucHV0Q2FsbGJhY2sgKmNhbGxiYWNrLCB2b2lkICpkYXRhKSB7CisgIE5hbWVkUGlwZU9iamVjdCAqb2JqOworCisgIGlmICgob2JqID0gbWFsbG9jKHNpemVvZigqb2JqKSkpKSB7CisgICAgbWVtc2V0KG9iaiwgMCwgc2l6ZW9mKCpvYmopKTsKKworICAgIG9iai0+Y2FsbGJhY2sgPSBjYWxsYmFjazsKKyAgICBvYmotPmRhdGEgPSBkYXRhOworCisgICAgb2JqLT5jcmVhdGVQaXBlID0gTlVMTDsKKyAgICBvYmotPm1vbml0b3JQaXBlID0gbW9uaXRvcklucHV0OworICAgIG9iai0+cmVzZXRQaXBlID0gTlVMTDsKKyAgICBvYmotPnJlbGVhc2VSZXNvdXJjZXMgPSBOVUxMOworICAgIHNldE5hbWVkUGlwZU1ldGhvZHMob2JqKTsKKworICAgIGluaXRpYWxpemVIb3N0UGF0aChvYmopOworICAgIGluaXRpYWxpemVJbnB1dERlc2NyaXB0b3Iob2JqKTsKKyAgICBpbml0aWFsaXplSW5wdXRNb25pdG9yKG9iaik7CisKKyAgICB7CisgICAgICBjb25zdCBjaGFyICpkaXJlY3RvcnkgPSBnZXROYW1lZFBpcGVEaXJlY3RvcnkoKTsKKworICAgICAgb2JqLT5ob3N0LnBhdGggPSBkaXJlY3Rvcnk/IG1ha2VQYXRoKGRpcmVjdG9yeSwgbmFtZSk6IE5VTEw7CisgICAgfQorCisgICAgaWYgKG9iai0+aG9zdC5wYXRoKSB7CisgICAgICBpZiAoIW9iai0+Y3JlYXRlUGlwZSkgeworICAgICAgICBsb2dVbnN1cHBvcnRlZE9wZXJhdGlvbigiY3JlYXRlIG5hbWVkIHBpcGUiKTsKKyAgICAgIH0gZWxzZSBpZiAob2JqLT5jcmVhdGVQaXBlKG9iaikpIHsKKyAgICAgICAgaWYgKCFvYmotPm1vbml0b3JQaXBlKSB7CisgICAgICAgICAgbG9nVW5zdXBwb3J0ZWRPcGVyYXRpb24oIm1vbml0b3IgbmFtZWQgcGlwZSIpOworICAgICAgICB9IGVsc2UgaWYgKG9iai0+bW9uaXRvclBpcGUob2JqKSkgeworICAgICAgICAgIHJldHVybiBvYmo7CisgICAgICAgIH0KKworICAgICAgICBjbG9zZUlucHV0RGVzY3JpcHRvcihvYmopOworICAgICAgICByZW1vdmVQaXBlKG9iaik7CisgICAgICB9CisKKyAgICAgIGRlYWxsb2NhdGVIb3N0UGF0aChvYmopOworICAgIH0KKworICAgIGZyZWUob2JqKTsKKyAgfSBlbHNlIHsKKyAgICBsb2dNYWxsb2NFcnJvcigpOworICB9CisKKyAgcmV0dXJuIE5VTEw7Cit9CisKK3ZvaWQKK2Rlc3Ryb3lOYW1lZFBpcGVPYmplY3QgKE5hbWVkUGlwZU9iamVjdCAqb2JqKSB7CisgIGxvZ01lc3NhZ2UoTE9HX0RFQlVHLCAiZGVzdHJveWluZyBuYW1lZCBwaXBlOiAlcyIsIG9iai0+aG9zdC5wYXRoKTsKKyAgaWYgKG9iai0+cmVsZWFzZVJlc291cmNlcykgb2JqLT5yZWxlYXNlUmVzb3VyY2VzKG9iaik7CisgIHN0b3BJbnB1dE1vbml0b3Iob2JqKTsKKyAgY2xvc2VJbnB1dERlc2NyaXB0b3Iob2JqKTsKKyAgcmVtb3ZlUGlwZShvYmopOworICBkZWFsbG9jYXRlSG9zdFBhdGgob2JqKTsKKyAgZnJlZShvYmopOworfQpkaWZmIC0tZ2l0IGEvUHJvZ3JhbXMvcGlwZS5oIGIvUHJvZ3JhbXMvcGlwZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI1YzAzNDIKLS0tIC9kZXYvbnVsbAorKysgYi9Qcm9ncmFtcy9waXBlLmgKQEAgLTAsMCArMSw0NCBAQAorLyoKKyAqIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisgKiAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisgKgorICogQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKKyNpZm5kZWYgQlJMVFRZX0lOQ0xVREVEX1BJUEUKKyNkZWZpbmUgQlJMVFRZX0lOQ0xVREVEX1BJUEUKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZiAvKiBfX2NwbHVzcGx1cyAqLworCit0eXBlZGVmIHN0cnVjdCBOYW1lZFBpcGVPYmplY3RTdHJ1Y3QgTmFtZWRQaXBlT2JqZWN0OworCit0eXBlZGVmIHN0cnVjdCB7CisgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZmZlcjsKKyAgc2l6ZV90IGxlbmd0aDsKKyAgdm9pZCAqZGF0YTsKK30gTmFtZWRQaXBlSW5wdXRDYWxsYmFja1BhcmFtZXRlcnM7CisKKyNkZWZpbmUgTkFNRURfUElQRV9JTlBVVF9DQUxMQkFDSyhuYW1lKSBzaXplX3QgbmFtZSAoY29uc3QgTmFtZWRQaXBlSW5wdXRDYWxsYmFja1BhcmFtZXRlcnMgKnBhcmFtZXRlcnMpCit0eXBlZGVmIE5BTUVEX1BJUEVfSU5QVVRfQ0FMTEJBQ0soTmFtZWRQaXBlSW5wdXRDYWxsYmFjayk7CisKK2V4dGVybiBOYW1lZFBpcGVPYmplY3QgKm5ld05hbWVkUGlwZU9iamVjdCAoY29uc3QgY2hhciAqbmFtZSwgTmFtZWRQaXBlSW5wdXRDYWxsYmFjayAqY2FsbGJhY2ssIHZvaWQgKmRhdGEpOworZXh0ZXJuIHZvaWQgZGVzdHJveU5hbWVkUGlwZU9iamVjdCAoTmFtZWRQaXBlT2JqZWN0ICpvYmopOworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZiAvKiBfX2NwbHVzcGx1cyAqLworCisjZW5kaWYgLyogQlJMVFRZX0lOQ0xVREVEX1BJUEUgKi8KZGlmZiAtLWdpdCBhL1Byb2dyYW1zL3BvcnRzX2dsaWJjLmMgYi9Qcm9ncmFtcy9wb3J0c19nbGliYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJmNjg3Y2IKLS0tIC9kZXYvbnVsbAorKysgYi9Qcm9ncmFtcy9wb3J0c19nbGliYy5jCkBAIC0wLDAgKzEsNjUgQEAKKy8qCisgKiBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorICogICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorICoKKyAqIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorICoKKyAqIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyAqLworCisjaW5jbHVkZSAicHJvbG9ndWUuaCIKKworI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisKKyNpZmRlZiBIQVZFX1NZU19JT19ICisjaW5jbHVkZSA8c3lzL2lvLmg+CisjZW5kaWYgLyogSEFWRV9TWVNfSU9fSCAqLworCisjaW5jbHVkZSAibG9nLmgiCisjaW5jbHVkZSAicG9ydHMuaCIKKworaW50CitlbmFibGVQb3J0cyAoaW50IGVycm9yTGV2ZWwsIHVuc2lnbmVkIHNob3J0IGludCBiYXNlLCB1bnNpZ25lZCBzaG9ydCBpbnQgY291bnQpIHsKKyNpZmRlZiBIQVZFX1NZU19JT19ICisgIGlmIChpb3Blcm0oYmFzZSwgY291bnQsIDEpICE9IC0xKSByZXR1cm4gMTsKKyAgbG9nTWVzc2FnZShlcnJvckxldmVsLCAiUG9ydCBlbmFibGUgZXJyb3I6ICV1LiV1OiAlcyIsIGJhc2UsIGNvdW50LCBzdHJlcnJvcihlcnJubykpOworI2Vsc2UgLyogSEFWRV9TWVNfSU9fSCAqLworICBsb2dNZXNzYWdlKGVycm9yTGV2ZWwsICJJL08gcG9ydHMgbm90IHN1cHBvcnRlZC4iKTsKKyNlbmRpZiAvKiBIQVZFX1NZU19JT19IICovCisgIHJldHVybiAwOworfQorCitpbnQKK2Rpc2FibGVQb3J0cyAodW5zaWduZWQgc2hvcnQgaW50IGJhc2UsIHVuc2lnbmVkIHNob3J0IGludCBjb3VudCkgeworI2lmZGVmIEhBVkVfU1lTX0lPX0gKKyAgaWYgKGlvcGVybShiYXNlLCBjb3VudCwgMCkgIT0gLTEpIHJldHVybiAxOworICBsb2dNZXNzYWdlKExPR19FUlIsICJQb3J0IGRpc2FibGUgZXJyb3I6ICV1LiV1OiAlcyIsIGJhc2UsIGNvdW50LCBzdHJlcnJvcihlcnJubykpOworI2VuZGlmIC8qIEhBVkVfU1lTX0lPX0ggKi8KKyAgcmV0dXJuIDA7Cit9CisKK3Vuc2lnbmVkIGNoYXIKK3JlYWRQb3J0MSAodW5zaWduZWQgc2hvcnQgaW50IHBvcnQpIHsKKyNpZmRlZiBIQVZFX1NZU19JT19ICisgIHJldHVybiBpbmIocG9ydCk7CisjZWxzZSAvKiBIQVZFX1NZU19JT19IICovCisgIHJldHVybiAwOworI2VuZGlmIC8qIEhBVkVfU1lTX0lPX0ggKi8KK30KKwordm9pZAord3JpdGVQb3J0MSAodW5zaWduZWQgc2hvcnQgaW50IHBvcnQsIHVuc2lnbmVkIGNoYXIgdmFsdWUpIHsKKyNpZmRlZiBIQVZFX1NZU19JT19ICisgIG91dGIodmFsdWUsIHBvcnQpOworI2VuZGlmIC8qIEhBVkVfU1lTX0lPX0ggKi8KK30KZGlmZiAtLWdpdCBhL1Byb2dyYW1zL3BvcnRzX2dydWIuYyBiL1Byb2dyYW1zL3BvcnRzX2dydWIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MDA0YTJmCi0tLSAvZGV2L251bGwKKysrIGIvUHJvZ3JhbXMvcG9ydHNfZ3J1Yi5jCkBAIC0wLDAgKzEsNDMgQEAKKy8qCisgKiBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorICogICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorICoKKyAqIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorICoKKyAqIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyAqLworCisjaW5jbHVkZSAicHJvbG9ndWUuaCIKKworI2luY2x1ZGUgPGdydWIvY3B1L2lvLmg+CisKKyNpbmNsdWRlICJwb3J0cy5oIgorCitpbnQKK2VuYWJsZVBvcnRzIChpbnQgZXJyb3JMZXZlbCwgdW5zaWduZWQgc2hvcnQgaW50IGJhc2UsIHVuc2lnbmVkIHNob3J0IGludCBjb3VudCkgeworICByZXR1cm4gMTsKK30KKworaW50CitkaXNhYmxlUG9ydHMgKHVuc2lnbmVkIHNob3J0IGludCBiYXNlLCB1bnNpZ25lZCBzaG9ydCBpbnQgY291bnQpIHsKKyAgcmV0dXJuIDE7Cit9CisKK3Vuc2lnbmVkIGNoYXIKK3JlYWRQb3J0MSAodW5zaWduZWQgc2hvcnQgaW50IHBvcnQpIHsKKyAgcmV0dXJuIGdydWJfaW5iKHBvcnQpOworfQorCit2b2lkCit3cml0ZVBvcnQxICh1bnNpZ25lZCBzaG9ydCBpbnQgcG9ydCwgdW5zaWduZWQgY2hhciB2YWx1ZSkgeworICBncnViX291dGIodmFsdWUsIHBvcnQpOworfQpkaWZmIC0tZ2l0IGEvUHJvZ3JhbXMvcG9ydHNfa2ZyZWVic2QuYyBiL1Byb2dyYW1zL3BvcnRzX2tmcmVlYnNkLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTcyNDFmMgotLS0gL2Rldi9udWxsCisrKyBiL1Byb2dyYW1zL3BvcnRzX2tmcmVlYnNkLmMKQEAgLTAsMCArMSw2NSBAQAorLyoKKyAqIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisgKiAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisgKgorICogQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKKyNpbmNsdWRlICJwcm9sb2d1ZS5oIgorCisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKworI2lmZGVmIEhBVkVfU1lTX0lPX0gKKyNpbmNsdWRlIDxzeXMvaW8uaD4KKyNlbmRpZiAvKiBIQVZFX1NZU19JT19IICovCisKKyNpbmNsdWRlICJsb2cuaCIKKyNpbmNsdWRlICJwb3J0cy5oIgorCitpbnQKK2VuYWJsZVBvcnRzIChpbnQgZXJyb3JMZXZlbCwgdW5zaWduZWQgc2hvcnQgaW50IGJhc2UsIHVuc2lnbmVkIHNob3J0IGludCBjb3VudCkgeworI2lmZGVmIEhBVkVfU1lTX0lPX0gKKyAgaWYgKGlvcGwoMykgIT0gLTEpIHJldHVybiAxOworICBsb2dNZXNzYWdlKGVycm9yTGV2ZWwsICJQb3J0IGVuYWJsZSBlcnJvcjogJXUuJXU6ICVzIiwgYmFzZSwgY291bnQsIHN0cmVycm9yKGVycm5vKSk7CisjZWxzZSAvKiBIQVZFX1NZU19JT19IICovCisgIGxvZ01lc3NhZ2UoZXJyb3JMZXZlbCwgIkkvTyBwb3J0cyBub3Qgc3VwcG9ydGVkLiIpOworI2VuZGlmIC8qIEhBVkVfU1lTX0lPX0ggKi8KKyAgcmV0dXJuIDA7Cit9CisKK2ludAorZGlzYWJsZVBvcnRzICh1bnNpZ25lZCBzaG9ydCBpbnQgYmFzZSwgdW5zaWduZWQgc2hvcnQgaW50IGNvdW50KSB7CisjaWZkZWYgSEFWRV9TWVNfSU9fSAorICBpZiAoaW9wbCgwKSAhPSAtMSkgcmV0dXJuIDE7CisgIGxvZ01lc3NhZ2UoTE9HX0VSUiwgIlBvcnQgZGlzYWJsZSBlcnJvcjogJXUuJXU6ICVzIiwgYmFzZSwgY291bnQsIHN0cmVycm9yKGVycm5vKSk7CisjZW5kaWYgLyogSEFWRV9TWVNfSU9fSCAqLworICByZXR1cm4gMDsKK30KKwordW5zaWduZWQgY2hhcgorcmVhZFBvcnQxICh1bnNpZ25lZCBzaG9ydCBpbnQgcG9ydCkgeworI2lmZGVmIEhBVkVfU1lTX0lPX0gKKyAgcmV0dXJuIGluYihwb3J0KTsKKyNlbHNlIC8qIEhBVkVfU1lTX0lPX0ggKi8KKyAgcmV0dXJuIDA7CisjZW5kaWYgLyogSEFWRV9TWVNfSU9fSCAqLworfQorCit2b2lkCit3cml0ZVBvcnQxICh1bnNpZ25lZCBzaG9ydCBpbnQgcG9ydCwgdW5zaWduZWQgY2hhciB2YWx1ZSkgeworI2lmZGVmIEhBVkVfU1lTX0lPX0gKKyAgb3V0Yih2YWx1ZSwgcG9ydCk7CisjZW5kaWYgLyogSEFWRV9TWVNfSU9fSCAqLworfQpkaWZmIC0tZ2l0IGEvUHJvZ3JhbXMvcG9ydHNfbXNkb3MuYyBiL1Byb2dyYW1zL3BvcnRzX21zZG9zLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTk0ODA2YQotLS0gL2Rldi9udWxsCisrKyBiL1Byb2dyYW1zL3BvcnRzX21zZG9zLmMKQEAgLTAsMCArMSwzMyBAQAorLyoKKyAqIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisgKiAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisgKgorICogQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKKyNpbmNsdWRlICJwcm9sb2d1ZS5oIgorCisjaW5jbHVkZSAicG9ydHMuaCIKKworaW50CitlbmFibGVQb3J0cyAoaW50IGVycm9yTGV2ZWwsIHVuc2lnbmVkIHNob3J0IGludCBiYXNlLCB1bnNpZ25lZCBzaG9ydCBpbnQgY291bnQpIHsKKyAgcmV0dXJuIDE7Cit9CisKK2ludAorZGlzYWJsZVBvcnRzICh1bnNpZ25lZCBzaG9ydCBpbnQgYmFzZSwgdW5zaWduZWQgc2hvcnQgaW50IGNvdW50KSB7CisgIHJldHVybiAxOworfQorCisjaW5jbHVkZSAicG9ydHNfeDg2LmgiCmRpZmYgLS1naXQgYS9Qcm9ncmFtcy9wb3J0c19ub25lLmMgYi9Qcm9ncmFtcy9wb3J0c19ub25lLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTA1NGI0NwotLS0gL2Rldi9udWxsCisrKyBiL1Byb2dyYW1zL3BvcnRzX25vbmUuYwpAQCAtMCwwICsxLDQyIEBACisvKgorICogQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyAqICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyAqCisgKiBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorICoKKyAqIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyAqCisgKiBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisgKi8KKworI2luY2x1ZGUgInByb2xvZ3VlLmgiCisKKyNpbmNsdWRlICJsb2cuaCIKKyNpbmNsdWRlICJwb3J0cy5oIgorCitpbnQKK2VuYWJsZVBvcnRzIChpbnQgZXJyb3JMZXZlbCwgdW5zaWduZWQgc2hvcnQgaW50IGJhc2UsIHVuc2lnbmVkIHNob3J0IGludCBjb3VudCkgeworICBsb2dNZXNzYWdlKGVycm9yTGV2ZWwsICJJL08gcG9ydHMgbm90IHN1cHBvcnRlZC4iKTsKKyAgcmV0dXJuIDA7Cit9CisKK2ludAorZGlzYWJsZVBvcnRzICh1bnNpZ25lZCBzaG9ydCBpbnQgYmFzZSwgdW5zaWduZWQgc2hvcnQgaW50IGNvdW50KSB7CisgIHJldHVybiAwOworfQorCit1bnNpZ25lZCBjaGFyCityZWFkUG9ydDEgKHVuc2lnbmVkIHNob3J0IGludCBwb3J0KSB7CisgIHJldHVybiAwOworfQorCit2b2lkCit3cml0ZVBvcnQxICh1bnNpZ25lZCBzaG9ydCBpbnQgcG9ydCwgdW5zaWduZWQgY2hhciB2YWx1ZSkgeworfQpkaWZmIC0tZ2l0IGEvUHJvZ3JhbXMvcG9ydHNfd2luZG93cy5jIGIvUHJvZ3JhbXMvcG9ydHNfd2luZG93cy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmViYzRlNTQKLS0tIC9kZXYvbnVsbAorKysgYi9Qcm9ncmFtcy9wb3J0c193aW5kb3dzLmMKQEAgLTAsMCArMSw0NiBAQAorLyoKKyAqIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisgKiAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisgKgorICogQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKKyNpbmNsdWRlICJwcm9sb2d1ZS5oIgorCisjaW5jbHVkZSAicG9ydHMuaCIKKyNpbmNsdWRlICJzeXN0ZW1fd2luZG93cy5oIgorCisjZGVmaW5lIFVTRV9QT1JUU19YODYKKworc3RhdGljIGludCBwb3J0c0VuYWJsZWQgPSAwOworCitpbnQKK2VuYWJsZVBvcnRzIChpbnQgZXJyb3JMZXZlbCwgdW5zaWduZWQgc2hvcnQgaW50IGJhc2UsIHVuc2lnbmVkIHNob3J0IGludCBjb3VudCkgeworICBpZiAoIXBvcnRzRW5hYmxlZCAmJiBOdFNldEluZm9ybWF0aW9uUHJvY2Vzc1Byb2MpIHsKKyAgICBVTE9ORyBJb3BsPTM7CisgICAgaWYgKE50U2V0SW5mb3JtYXRpb25Qcm9jZXNzUHJvYyhHZXRDdXJyZW50UHJvY2VzcygpLCBQcm9jZXNzVXNlck1vZGVJT1BMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmSW9wbCwgc2l6ZW9mKElvcGwpKSAhPSBTVEFUVVNfU1VDQ0VTUykgeworICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIHBvcnRzRW5hYmxlZCA9IDE7CisgIH0KKyAgcmV0dXJuIDE7Cit9CisKK2ludAorZGlzYWJsZVBvcnRzICh1bnNpZ25lZCBzaG9ydCBpbnQgYmFzZSwgdW5zaWduZWQgc2hvcnQgaW50IGNvdW50KSB7CisgIHJldHVybiAxOworfQorCisjaW5jbHVkZSAicG9ydHNfeDg2LmgiCmRpZmYgLS1naXQgYS9Qcm9ncmFtcy9wb3J0c194ODYuaCBiL1Byb2dyYW1zL3BvcnRzX3g4Ni5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE1NjAzYmMKLS0tIC9kZXYvbnVsbAorKysgYi9Qcm9ncmFtcy9wb3J0c194ODYuaApAQCAtMCwwICsxLDI5IEBACisvKgorICogQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyAqICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyAqCisgKiBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorICoKKyAqIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyAqCisgKiBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisgKi8KKwordW5zaWduZWQgY2hhcgorcmVhZFBvcnQxICh1bnNpZ25lZCBzaG9ydCBpbnQgcG9ydCkgeworICB1bnNpZ25lZCBjaGFyIHY7CisgIF9fYXNtX18gX192b2xhdGlsZV9fICgiaW5iICV3MSwlMCIgOiAiPWEiICh2KSA6ICJOZCIgKHBvcnQpKTsKKyAgcmV0dXJuIHY7Cit9CisKK3ZvaWQKK3dyaXRlUG9ydDEgKHVuc2lnbmVkIHNob3J0IGludCBwb3J0LCB1bnNpZ25lZCBjaGFyIHZhbHVlKSB7CisgIF9fYXNtX18gX192b2xhdGlsZV9fICgib3V0YiAlYjAsJXcxIiA6IDogImEiICh2YWx1ZSksICJOZCIgKHBvcnQpKTsKK30KZGlmZiAtLWdpdCBhL1Byb2dyYW1zL3ByZWZfdGFibGVzLmMgYi9Qcm9ncmFtcy9wcmVmX3RhYmxlcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJmOTA5ZjQKLS0tIC9kZXYvbnVsbAorKysgYi9Qcm9ncmFtcy9wcmVmX3RhYmxlcy5jCkBAIC0wLDAgKzEsNzM5IEBACisvKgorICogQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyAqICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyAqCisgKiBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorICoKKyAqIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyAqCisgKiBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisgKi8KKworI2luY2x1ZGUgInByb2xvZ3VlLmgiCisKKyNpbmNsdWRlICJwcmVmcy5oIgorI2luY2x1ZGUgInByZWZfdGFibGVzLmgiCisjaW5jbHVkZSAic3RhdHVzX3R5cGVzLmgiCisjaW5jbHVkZSAiZGVmYXVsdHMuaCIKKworUHJlZmVyZW5jZVNldHRpbmdzIHByZWZzOyAgICAgICAgICAgICAgICAvKiBlbnZpcm9ubWVudCAoaS5lLiBnbG9iYWwpIHBhcmFtZXRlcnMgKi8KK3Vuc2lnbmVkIGNoYXIgc3RhdHVzRmllbGRzU2V0OworCisjZGVmaW5lIFBSRUZFUkVOQ0VfU1RSSU5HX1RBQkxFKG5hbWUsIC4uLikgXAorc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IHByZWZlcmVuY2VTdHJpbmdBcnJheV8jI25hbWVbXSA9IHtfX1ZBX0FSR1NfX307IFwKK3N0YXRpYyBjb25zdCBQcmVmZXJlbmNlU3RyaW5nVGFibGUgcHJlZmVyZW5jZVN0cmluZ1RhYmxlXyMjbmFtZSA9IHsgXAorICAudGFibGUgPSBwcmVmZXJlbmNlU3RyaW5nQXJyYXlfIyNuYW1lLCBcCisgIC5jb3VudCA9IEFSUkFZX0NPVU5UKHByZWZlcmVuY2VTdHJpbmdBcnJheV8jI25hbWUpIFwKK307CisKK1BSRUZFUkVOQ0VfU1RSSU5HX1RBQkxFKGJvb2xlYW4sCisgICJubyIsICJ5ZXMiCispCisKK1BSRUZFUkVOQ0VfU1RSSU5HX1RBQkxFKHRleHRTdHlsZSwKKyAgW2J2Q29tcHV0ZXI4XSA9ICI4ZG90IiwKKyAgW2J2Q29udHJhY3RlZDZdID0gImNvbnRyYWN0ZWQiLAorICBbYnZDb21wdXRlcjZdID0gIjZkb3QiLAorICBbYnZDb250cmFjdGVkOF0gPSAibGl0ZXJhcnkiCispCisKK1BSRUZFUkVOQ0VfU1RSSU5HX1RBQkxFKGJyYWlsbGVWYXJpYW50LAorICBbYnZDb21wdXRlcjhdID0gImNvbXB1dGVyOCIsCisgIFtidkNvbnRyYWN0ZWQ2XSA9ICJjb250cmFjdGVkNiIsCisgIFtidkNvbXB1dGVyNl0gPSAiY29tcHV0ZXI2IiwKKyAgW2J2Q29udHJhY3RlZDhdID0gImNvbnRyYWN0ZWQ4IgorKQorCitQUkVGRVJFTkNFX1NUUklOR19UQUJMRShjYXBpdGFsaXphdGlvbk1vZGUsCisgIFtDVEJfQ0FQX05PTkVdID0gIm5vbmUiLAorICBbQ1RCX0NBUF9TSUdOXSA9ICJzaWduIiwKKyAgW0NUQl9DQVBfRE9UN10gPSAiZG90NyIsCispCisKK1BSRUZFUkVOQ0VfU1RSSU5HX1RBQkxFKHNraXBCbGFua1dpbmRvd3NNb2RlLAorICBbc2J3QWxsXSA9ICJhbGwiLAorICBbc2J3RW5kT2ZMaW5lXSA9ICJlbmQiLAorICBbc2J3UmVzdE9mTGluZV0gPSAicmVzdCIsCispCisKK1BSRUZFUkVOQ0VfU1RSSU5HX1RBQkxFKGN1cnNvclRyYWNraW5nRGVsYXksCisgIFtjdGROb25lXSA9ICIwIiwKKyAgW2N0ZDI1MG1zXSA9ICIyNSIsCisgIFtjdGQ1MDBtc10gPSAiNTAiLAorICBbY3RkMXNdID0gIjEwMCIsCisgIFtjdGQyc10gPSAiMjAwIiwKKykKKworUFJFRkVSRU5DRV9TVFJJTkdfVEFCTEUoYXV0b3JlbGVhc2VUaW1lLAorICBbYXRPZmZdID0gIjAiLAorICBbYXQ1c10gPSAiNSIsCisgIFthdDEwc10gPSAiMTAiLAorICBbYXQyMHNdID0gIjIwIiwKKyAgW2F0NDBzXSA9ICI0MCIsCispCisKK1BSRUZFUkVOQ0VfU1RSSU5HX1RBQkxFKGN1cnNvclN0eWxlLAorICBbY3NCb3R0b21Eb3RzXSA9ICJ1bmRlcmxpbmUiLAorICBbY3NBbGxEb3RzXSA9ICJibG9jayIsCisgIFtjc0xvd2VyTGVmdERvdF0gPSAiZG90NyIsCisgIFtjc0xvd2VyUmlnaHREb3RdID0gImRvdDgiLAorICBbY3NOb0RvdHNdID0gImhpZGUiLAorKQorCitQUkVGRVJFTkNFX1NUUklOR19UQUJMRShicmFpbGxlRmlybW5lc3MsCisgIFtCUkxfRklSTU5FU1NfTUlOSU1VTV0gPSAibWluaW11bSIsCisgIFtCUkxfRklSTU5FU1NfTE9XXSA9ICJsb3ciLAorICBbQlJMX0ZJUk1ORVNTX01FRElVTV0gPSAibWVkaXVtIiwKKyAgW0JSTF9GSVJNTkVTU19ISUdIXSA9ICJoaWdoIiwKKyAgW0JSTF9GSVJNTkVTU19NQVhJTVVNXSA9ICJtYXhpbXVtIiwKKykKKworUFJFRkVSRU5DRV9TVFJJTkdfVEFCTEUodG91Y2hTZW5zaXRpdml0eSwKKyAgW0JSTF9TRU5TSVRJVklUWV9NSU5JTVVNXSA9ICJtaW5pbXVtIiwKKyAgW0JSTF9TRU5TSVRJVklUWV9MT1ddID0gImxvdyIsCisgIFtCUkxfU0VOU0lUSVZJVFlfTUVESVVNXSA9ICJtZWRpdW0iLAorICBbQlJMX1NFTlNJVElWSVRZX0hJR0hdID0gImhpZ2giLAorICBbQlJMX1NFTlNJVElWSVRZX01BWElNVU1dID0gIm1heGltdW0iCispCisKK1BSRUZFUkVOQ0VfU1RSSU5HX1RBQkxFKGJyYWlsbGVUeXBpbmdNb2RlLAorICBbQlJMX1RZUElOR19URVhUXSA9ICJ0ZXh0IiwKKyAgW0JSTF9UWVBJTkdfRE9UU10gPSAiZG90cyIsCispCisKK1BSRUZFUkVOQ0VfU1RSSU5HX1RBQkxFKHR1bmVEZXZpY2UsCisgIFt0ZEJlZXBlcl0gPSAiYmVlcGVyIiwKKyAgW3RkUGNtXSA9ICJwY20iLAorICBbdGRNaWRpXSA9ICJtaWRpIiwKKyAgW3RkRm1dID0gImZtIiwKKykKKworUFJFRkVSRU5DRV9TVFJJTkdfVEFCTEUoc3BlZWNoUHVuY3R1YXRpb24sCisgIFtTUEtfUFVOQ1RVQVRJT05fTk9ORV0gPSAibm9uZSIsCisgIFtTUEtfUFVOQ1RVQVRJT05fU09NRV0gPSAic29tZSIsCisgIFtTUEtfUFVOQ1RVQVRJT05fQUxMXSA9ICJhbGwiLAorKQorCitQUkVGRVJFTkNFX1NUUklOR19UQUJMRShzcGVlY2hVcHBlcmNhc2VJbmRpY2F0b3IsCisgIFtzdWNOb25lXSA9ICJub25lIiwKKyAgW3N1Y1NheUNhcF0gPSAiY2FwIiwKKyAgW3N1Y1JhaXNlUGl0Y2hdID0gImhpZ2hlciIsCispCisKK1BSRUZFUkVOQ0VfU1RSSU5HX1RBQkxFKHNwZWVjaFdoaXRlc3BhY2VJbmRpY2F0b3IsCisgIFtzd3NOb25lXSA9ICJub25lIiwKKyAgW3N3c1NheVNwYWNlXSA9ICJzcGFjZSIsCispCisKK1BSRUZFUkVOQ0VfU1RSSU5HX1RBQkxFKHNheUxpbmVNb2RlLAorICBbc2F5SW1tZWRpYXRlXSA9ICJpbW1lZGlhdGUiLAorICBbc2F5RW5xdWV1ZV0gPSAiZW5xdWV1ZSIsCispCisKK1BSRUZFUkVOQ0VfU1RSSU5HX1RBQkxFKHRpbWVGb3JtYXQsCisgIFt0ZjI0SG91cl0gPSAiMjRob3VyIiwKKyAgW3RmMTJIb3VyXSA9ICIxMmhvdXIiLAorKQorCitQUkVGRVJFTkNFX1NUUklOR19UQUJMRSh0aW1lU2VwYXJhdG9yLAorICBbdHNDb2xvbl0gPSAiY29sb24iLAorICBbdHNEb3RdID0gImRvdCIsCispCisKK1BSRUZFUkVOQ0VfU1RSSU5HX1RBQkxFKGRhdGVQb3NpdGlvbiwKKyAgW2RwTm9uZV0gPSAibm8iLAorICBbZHBCZWZvcmVUaW1lXSA9ICJiZWZvcmUiLAorICBbZHBBZnRlclRpbWVdID0gImFmdGVyIiwKKykKKworUFJFRkVSRU5DRV9TVFJJTkdfVEFCTEUoZGF0ZUZvcm1hdCwKKyAgW2RmWWVhck1vbnRoRGF5XSA9ICJ5bWQiLAorICBbZGZNb250aERheVllYXJdID0gIm1keSIsCisgIFtkZkRheU1vbnRoWWVhcl0gPSAiZG15IiwKKykKKworUFJFRkVSRU5DRV9TVFJJTkdfVEFCTEUoZGF0ZVNlcGFyYXRvciwKKyAgW2RzRGFzaF0gPSAiZGFzaCIsCisgIFtkc1NsYXNoXSA9ICJzbGFzaCIsCisgIFtkc0RvdF0gPSAiZG90IiwKKykKKworUFJFRkVSRU5DRV9TVFJJTkdfVEFCTEUoc3RhdHVzUG9zaXRpb24sCisgIFtzcE5vbmVdID0gIm5vbmUiLAorICBbc3BMZWZ0XSA9ICJsZWZ0IiwKKyAgW3NwUmlnaHRdID0gInJpZ2h0IiwKKykKKworUFJFRkVSRU5DRV9TVFJJTkdfVEFCTEUoc3RhdHVzU2VwYXJhdG9yLAorICBbc3NOb25lXSA9ICJub25lIiwKKyAgW3NzU3BhY2VdID0gInNwYWNlIiwKKyAgW3NzQmxvY2tdID0gImJsb2NrIiwKKyAgW3NzU3RhdHVzU2lkZV0gPSAic3RhdHVzIiwKKyAgW3NzVGV4dFNpZGVdID0gInRleHQiLAorKQorCitQUkVGRVJFTkNFX1NUUklOR19UQUJMRShzdGF0dXNGaWVsZCwKKyAgW3NmRW5kXSA9ICJlbmQiLAorICBbc2ZXaW5kb3dDb29yZGluYXRlczJdID0gInd4eSIsCisgIFtzZldpbmRvd0NvbHVtbl0gPSAid3giLAorICBbc2ZXaW5kb3dSb3ddID0gInd5IiwKKyAgW3NmQ3Vyc29yQ29vcmRpbmF0ZXMyXSA9ICJjeHkiLAorICBbc2ZDdXJzb3JDb2x1bW5dID0gImN4IiwKKyAgW3NmQ3Vyc29yUm93XSA9ICJjeSIsCisgIFtzZkN1cnNvckFuZFdpbmRvd0NvbHVtbjJdID0gImN3eCIsCisgIFtzZkN1cnNvckFuZFdpbmRvd1JvdzJdID0gImN3eSIsCisgIFtzZlNjcmVlbk51bWJlcl0gPSAic24iLAorICBbc2ZTdGF0ZURvdHNdID0gImRvdHMiLAorICBbc2ZTdGF0ZUxldHRlcl0gPSAibGV0dGVyIiwKKyAgW3NmVGltZV0gPSAidGltZSIsCisgIFtzZkFscGhhYmV0aWNXaW5kb3dDb29yZGluYXRlc10gPSAid3h5YSIsCisgIFtzZkFscGhhYmV0aWNDdXJzb3JDb29yZGluYXRlc10gPSAiY3h5YSIsCisgIFtzZkdlbmVyaWNdID0gImdlbmVyaWMiLAorICBbc2ZDdXJzb3JDb29yZGluYXRlczNdID0gImN4eTMiLAorICBbc2ZXaW5kb3dDb29yZGluYXRlczNdID0gInd4eTMiLAorICBbc2ZDdXJzb3JBbmRXaW5kb3dDb2x1bW4zXSA9ICJjd3gzIiwKKyAgW3NmQ3Vyc29yQW5kV2luZG93Um93M10gPSAiY3d5MyIsCisgIFtzZlNwYWNlXSA9ICJzcGFjZSIsCispCisKK2NvbnN0IFByZWZlcmVuY2VEZWZpbml0aW9uIHByZWZlcmVuY2VEZWZpbml0aW9uVGFibGVbXSA9IHsKKyAgeyAubmFtZSA9ICJzYXZlLW9uLWV4aXQiLAorICAgIC5kZWZhdWx0VmFsdWUgPSBERUZBVUxUX1NBVkVfT05fRVhJVCwKKyAgICAuc2V0dGluZ05hbWVzID0gJnByZWZlcmVuY2VTdHJpbmdUYWJsZV9ib29sZWFuLAorICAgIC5zZXR0aW5nID0gJnByZWZzLnNhdmVPbkV4aXQKKyAgfSwKKworICB7IC5uYW1lID0gInNob3ctc3VibWVudS1zaXplcyIsCisgICAgLmRlZmF1bHRWYWx1ZSA9IERFRkFVTFRfU0hPV19TVUJNRU5VX1NJWkVTLAorICAgIC5zZXR0aW5nTmFtZXMgPSAmcHJlZmVyZW5jZVN0cmluZ1RhYmxlX2Jvb2xlYW4sCisgICAgLnNldHRpbmcgPSAmcHJlZnMuc2hvd1N1Ym1lbnVTaXplcworICB9LAorCisgIHsgLm5hbWUgPSAic2hvdy1hZHZhbmNlZC1zdWJtZW51cyIsCisgICAgLmRlZmF1bHRWYWx1ZSA9IERFRkFVTFRfU0hPV19BRFZBTkNFRF9TVUJNRU5VUywKKyAgICAuc2V0dGluZ05hbWVzID0gJnByZWZlcmVuY2VTdHJpbmdUYWJsZV9ib29sZWFuLAorICAgIC5zZXR0aW5nID0gJnByZWZzLnNob3dBZHZhbmNlZFN1Ym1lbnVzCisgIH0sCisKKyAgeyAubmFtZSA9ICJzaG93LWFsbC1pdGVtcyIsCisgICAgLmRlZmF1bHRWYWx1ZSA9IERFRkFVTFRfU0hPV19BTExfSVRFTVMsCisgICAgLnNldHRpbmdOYW1lcyA9ICZwcmVmZXJlbmNlU3RyaW5nVGFibGVfYm9vbGVhbiwKKyAgICAuc2V0dGluZyA9ICZwcmVmcy5zaG93QWxsSXRlbXMKKyAgfSwKKworICAvLyB0ZXh0LXN0eWxlIGlzIGFuIG9sZCBlbnRyeSB3aGljaCBzaG91bGQgYmUgYmVmb3JlIGJyYWlsbGUtdmFyaWFudAorICB7IC5uYW1lID0gInRleHQtc3R5bGUiLAorICAgIC5kb250U2F2ZSA9IDEsCisgICAgLmRlZmF1bHRWYWx1ZSA9IERFRkFVTFRfQlJBSUxMRV9WQVJJQU5ULAorICAgIC5zZXR0aW5nTmFtZXMgPSAmcHJlZmVyZW5jZVN0cmluZ1RhYmxlX3RleHRTdHlsZSwKKyAgICAuc2V0dGluZyA9ICZwcmVmcy5icmFpbGxlVmFyaWFudAorICB9LAorCisgIC8vIGJyYWlsbGUtdmFyaWFudCBpcyBhIG5ldyBlbnRyeSB3aGljaCBzaG91bGQgYmUgYWZ0ZXIgdGV4dC1zdHlsZQorICB7IC5uYW1lID0gImJyYWlsbGUtdmFyaWFudCIsCisgICAgLmRlZmF1bHRWYWx1ZSA9IERFRkFVTFRfQlJBSUxMRV9WQVJJQU5ULAorICAgIC5zZXR0aW5nTmFtZXMgPSAmcHJlZmVyZW5jZVN0cmluZ1RhYmxlX2JyYWlsbGVWYXJpYW50LAorICAgIC5zZXR0aW5nID0gJnByZWZzLmJyYWlsbGVWYXJpYW50CisgIH0sCisKKyAgeyAubmFtZSA9ICJleHBhbmQtY3VycmVudC13b3JkIiwKKyAgICAuZGVmYXVsdFZhbHVlID0gREVGQVVMVF9FWFBBTkRfQ1VSUkVOVF9XT1JELAorICAgIC5zZXR0aW5nTmFtZXMgPSAmcHJlZmVyZW5jZVN0cmluZ1RhYmxlX2Jvb2xlYW4sCisgICAgLnNldHRpbmcgPSAmcHJlZnMuZXhwYW5kQ3VycmVudFdvcmQKKyAgfSwKKworICB7IC5uYW1lID0gImNhcGl0YWxpemF0aW9uLW1vZGUiLAorICAgIC5kZWZhdWx0VmFsdWUgPSBERUZBVUxUX0NBUElUQUxJWkFUSU9OX01PREUsCisgICAgLnNldHRpbmdOYW1lcyA9ICZwcmVmZXJlbmNlU3RyaW5nVGFibGVfY2FwaXRhbGl6YXRpb25Nb2RlLAorICAgIC5zZXR0aW5nID0gJnByZWZzLmNhcGl0YWxpemF0aW9uTW9kZQorICB9LAorCisgIHsgLm5hbWUgPSAiYnJhaWxsZS1maXJtbmVzcyIsCisgICAgLmRlZmF1bHRWYWx1ZSA9IERFRkFVTFRfQlJBSUxMRV9GSVJNTkVTUywKKyAgICAuc2V0dGluZ05hbWVzID0gJnByZWZlcmVuY2VTdHJpbmdUYWJsZV9icmFpbGxlRmlybW5lc3MsCisgICAgLnNldHRpbmcgPSAmcHJlZnMuYnJhaWxsZUZpcm1uZXNzCisgIH0sCisKKyAgeyAubmFtZSA9ICJzaG93LXNjcmVlbi1jdXJzb3IiLAorICAgIC5kZWZhdWx0VmFsdWUgPSBERUZBVUxUX1NIT1dfU0NSRUVOX0NVUlNPUiwKKyAgICAuc2V0dGluZ05hbWVzID0gJnByZWZlcmVuY2VTdHJpbmdUYWJsZV9ib29sZWFuLAorICAgIC5zZXR0aW5nID0gJnByZWZzLnNob3dTY3JlZW5DdXJzb3IKKyAgfSwKKworICB7IC5uYW1lID0gInNjcmVlbi1jdXJzb3Itc3R5bGUiLAorICAgIC5kZWZhdWx0VmFsdWUgPSBERUZBVUxUX1NDUkVFTl9DVVJTT1JfU1RZTEUsCisgICAgLnNldHRpbmdOYW1lcyA9ICZwcmVmZXJlbmNlU3RyaW5nVGFibGVfY3Vyc29yU3R5bGUsCisgICAgLnNldHRpbmcgPSAmcHJlZnMuc2NyZWVuQ3Vyc29yU3R5bGUKKyAgfSwKKworICB7IC5uYW1lID0gImJsaW5raW5nLXNjcmVlbi1jdXJzb3IiLAorICAgIC5kZWZhdWx0VmFsdWUgPSBERUZBVUxUX0JMSU5LSU5HX1NDUkVFTl9DVVJTT1IsCisgICAgLnNldHRpbmdOYW1lcyA9ICZwcmVmZXJlbmNlU3RyaW5nVGFibGVfYm9vbGVhbiwKKyAgICAuc2V0dGluZyA9ICZwcmVmcy5ibGlua2luZ1NjcmVlbkN1cnNvcgorICB9LAorCisgIHsgLm5hbWUgPSAic2NyZWVuLWN1cnNvci12aXNpYmxlLXRpbWUiLAorICAgIC5kZWZhdWx0VmFsdWUgPSBERUZBVUxUX1NDUkVFTl9DVVJTT1JfVklTSUJMRV9USU1FLAorICAgIC5zZXR0aW5nID0gJnByZWZzLnNjcmVlbkN1cnNvclZpc2libGVUaW1lCisgIH0sCisKKyAgeyAubmFtZSA9ICJzY3JlZW4tY3Vyc29yLWludmlzaWJsZS10aW1lIiwKKyAgICAuZGVmYXVsdFZhbHVlID0gREVGQVVMVF9TQ1JFRU5fQ1VSU09SX0lOVklTSUJMRV9USU1FLAorICAgIC5zZXR0aW5nID0gJnByZWZzLnNjcmVlbkN1cnNvckludmlzaWJsZVRpbWUKKyAgfSwKKworICB7IC5uYW1lID0gInNob3ctYXR0cmlidXRlcyIsCisgICAgLmRlZmF1bHRWYWx1ZSA9IERFRkFVTFRfU0hPV19BVFRSSUJVVEVTLAorICAgIC5zZXR0aW5nTmFtZXMgPSAmcHJlZmVyZW5jZVN0cmluZ1RhYmxlX2Jvb2xlYW4sCisgICAgLnNldHRpbmcgPSAmcHJlZnMuc2hvd0F0dHJpYnV0ZXMKKyAgfSwKKworICB7IC5uYW1lID0gImJsaW5raW5nLWF0dHJpYnV0ZXMiLAorICAgIC5kZWZhdWx0VmFsdWUgPSBERUZBVUxUX0JMSU5LSU5HX0FUVFJJQlVURVMsCisgICAgLnNldHRpbmdOYW1lcyA9ICZwcmVmZXJlbmNlU3RyaW5nVGFibGVfYm9vbGVhbiwKKyAgICAuc2V0dGluZyA9ICZwcmVmcy5ibGlua2luZ0F0dHJpYnV0ZXMKKyAgfSwKKworICB7IC5uYW1lID0gImF0dHJpYnV0ZXMtdmlzaWJsZS10aW1lIiwKKyAgICAuZGVmYXVsdFZhbHVlID0gREVGQVVMVF9BVFRSSUJVVEVTX1ZJU0lCTEVfVElNRSwKKyAgICAuc2V0dGluZyA9ICZwcmVmcy5hdHRyaWJ1dGVzVmlzaWJsZVRpbWUKKyAgfSwKKworICB7IC5uYW1lID0gImF0dHJpYnV0ZXMtaW52aXNpYmxlLXRpbWUiLAorICAgIC5kZWZhdWx0VmFsdWUgPSBERUZBVUxUX0FUVFJJQlVURVNfSU5WSVNJQkxFX1RJTUUsCisgICAgLnNldHRpbmcgPSAmcHJlZnMuYXR0cmlidXRlc0ludmlzaWJsZVRpbWUKKyAgfSwKKworICB7IC5uYW1lID0gImJsaW5raW5nLWNhcGl0YWxzIiwKKyAgICAuZGVmYXVsdFZhbHVlID0gREVGQVVMVF9CTElOS0lOR19DQVBJVEFMUywKKyAgICAuc2V0dGluZ05hbWVzID0gJnByZWZlcmVuY2VTdHJpbmdUYWJsZV9ib29sZWFuLAorICAgIC5zZXR0aW5nID0gJnByZWZzLmJsaW5raW5nQ2FwaXRhbHMKKyAgfSwKKworICB7IC5uYW1lID0gImNhcGl0YWxzLXZpc2libGUtdGltZSIsCisgICAgLmRlZmF1bHRWYWx1ZSA9IERFRkFVTFRfQ0FQSVRBTFNfVklTSUJMRV9USU1FLAorICAgIC5zZXR0aW5nID0gJnByZWZzLmNhcGl0YWxzVmlzaWJsZVRpbWUKKyAgfSwKKworICB7IC5uYW1lID0gImNhcGl0YWxzLWludmlzaWJsZS10aW1lIiwKKyAgICAuZGVmYXVsdFZhbHVlID0gREVGQVVMVF9DQVBJVEFMU19JTlZJU0lCTEVfVElNRSwKKyAgICAuc2V0dGluZyA9ICZwcmVmcy5jYXBpdGFsc0ludmlzaWJsZVRpbWUKKyAgfSwKKworICB7IC5uYW1lID0gIndvcmQtd3JhcCIsCisgICAgLmRlZmF1bHRWYWx1ZSA9IERFRkFVTFRfV09SRF9XUkFQLAorICAgIC5zZXR0aW5nTmFtZXMgPSAmcHJlZmVyZW5jZVN0cmluZ1RhYmxlX2Jvb2xlYW4sCisgICAgLnNldHRpbmcgPSAmcHJlZnMud29yZFdyYXAKKyAgfSwKKworICB7IC5uYW1lID0gInNraXAtaWRlbnRpY2FsLWxpbmVzIiwKKyAgICAuZGVmYXVsdFZhbHVlID0gREVGQVVMVF9TS0lQX0lERU5USUNBTF9MSU5FUywKKyAgICAuc2V0dGluZ05hbWVzID0gJnByZWZlcmVuY2VTdHJpbmdUYWJsZV9ib29sZWFuLAorICAgIC5zZXR0aW5nID0gJnByZWZzLnNraXBJZGVudGljYWxMaW5lcworICB9LAorCisgIHsgLm5hbWUgPSAic2tpcC1ibGFuay1icmFpbGxlLXdpbmRvd3MiLAorICAgIC5kZWZhdWx0VmFsdWUgPSBERUZBVUxUX1NLSVBfQkxBTktfQlJBSUxMRV9XSU5ET1dTLAorICAgIC5zZXR0aW5nTmFtZXMgPSAmcHJlZmVyZW5jZVN0cmluZ1RhYmxlX2Jvb2xlYW4sCisgICAgLnNldHRpbmcgPSAmcHJlZnMuc2tpcEJsYW5rQnJhaWxsZVdpbmRvd3MKKyAgfSwKKworICB7IC5uYW1lID0gInNraXAtYmxhbmstYnJhaWxsZS13aW5kb3dzLW1vZGUiLAorICAgIC5kZWZhdWx0VmFsdWUgPSBERUZBVUxUX1NLSVBfQkxBTktfQlJBSUxMRV9XSU5ET1dTX01PREUsCisgICAgLnNldHRpbmdOYW1lcyA9ICZwcmVmZXJlbmNlU3RyaW5nVGFibGVfc2tpcEJsYW5rV2luZG93c01vZGUsCisgICAgLnNldHRpbmcgPSAmcHJlZnMuc2tpcEJsYW5rQnJhaWxsZVdpbmRvd3NNb2RlCisgIH0sCisKKyAgeyAubmFtZSA9ICJzbGlkaW5nLWJyYWlsbGUtd2luZG93IiwKKyAgICAuZGVmYXVsdFZhbHVlID0gREVGQVVMVF9TTElESU5HX0JSQUlMTEVfV0lORE9XLAorICAgIC5zZXR0aW5nTmFtZXMgPSAmcHJlZmVyZW5jZVN0cmluZ1RhYmxlX2Jvb2xlYW4sCisgICAgLnNldHRpbmcgPSAmcHJlZnMuc2xpZGluZ0JyYWlsbGVXaW5kb3cKKyAgfSwKKworICB7IC5uYW1lID0gImVhZ2VyLXNsaWRpbmctYnJhaWxsZS13aW5kb3ciLAorICAgIC5kZWZhdWx0VmFsdWUgPSBERUZBVUxUX0VBR0VSX1NMSURJTkdfQlJBSUxMRV9XSU5ET1csCisgICAgLnNldHRpbmdOYW1lcyA9ICZwcmVmZXJlbmNlU3RyaW5nVGFibGVfYm9vbGVhbiwKKyAgICAuc2V0dGluZyA9ICZwcmVmcy5lYWdlclNsaWRpbmdCcmFpbGxlV2luZG93CisgIH0sCisKKyAgeyAubmFtZSA9ICJicmFpbGxlLXdpbmRvdy1vdmVybGFwIiwKKyAgICAuZGVmYXVsdFZhbHVlID0gREVGQVVMVF9CUkFJTExFX1dJTkRPV19PVkVSTEFQLAorICAgIC5zZXR0aW5nID0gJnByZWZzLmJyYWlsbGVXaW5kb3dPdmVybGFwCisgIH0sCisKKyAgeyAubmFtZSA9ICJzY3JvbGxhd2FyZS1jdXJzb3ItbmF2aWdhdGlvbiIsCisgICAgLmRlZmF1bHRWYWx1ZSA9IERFRkFVTFRfU0NST0xMX0FXQVJFX0NVUlNPUl9OQVZJR0FUSU9OLAorICAgIC5zZXR0aW5nTmFtZXMgPSAmcHJlZmVyZW5jZVN0cmluZ1RhYmxlX2Jvb2xlYW4sCisgICAgLnNldHRpbmcgPSAmcHJlZnMuc2Nyb2xsQXdhcmVDdXJzb3JOYXZpZ2F0aW9uCisgIH0sCisKKyAgeyAubmFtZSA9ICJjdXJzb3ItdHJhY2tpbmctZGVsYXkiLAorICAgIC5kZWZhdWx0VmFsdWUgPSBERUZBVUxUX0NVUlNPUl9UUkFDS0lOR19ERUxBWSwKKyAgICAuc2V0dGluZ05hbWVzID0gJnByZWZlcmVuY2VTdHJpbmdUYWJsZV9jdXJzb3JUcmFja2luZ0RlbGF5LAorICAgIC5zZXR0aW5nID0gJnByZWZzLmN1cnNvclRyYWNraW5nRGVsYXkKKyAgfSwKKworICB7IC5uYW1lID0gInRyYWNrLXNjcmVlbi1zY3JvbGwiLAorICAgIC5kZWZhdWx0VmFsdWUgPSBERUZBVUxUX1RSQUNLX1NDUkVFTl9TQ1JPTEwsCisgICAgLnNldHRpbmdOYW1lcyA9ICZwcmVmZXJlbmNlU3RyaW5nVGFibGVfYm9vbGVhbiwKKyAgICAuc2V0dGluZyA9ICZwcmVmcy50cmFja1NjcmVlblNjcm9sbAorICB9LAorCisgIHsgLm5hbWUgPSAidHJhY2stc2NyZWVuLXBvaW50ZXIiLAorICAgIC5kZWZhdWx0VmFsdWUgPSBERUZBVUxUX1RSQUNLX1NDUkVFTl9QT0lOVEVSLAorICAgIC5zZXR0aW5nTmFtZXMgPSAmcHJlZmVyZW5jZVN0cmluZ1RhYmxlX2Jvb2xlYW4sCisgICAgLnNldHRpbmcgPSAmcHJlZnMudHJhY2tTY3JlZW5Qb2ludGVyCisgIH0sCisKKyAgeyAubmFtZSA9ICJoaWdobGlnaHQtYnJhaWxsZS13aW5kb3ctbG9jYXRpb24iLAorICAgIC5kZWZhdWx0VmFsdWUgPSBERUZBVUxUX0hJR0hMSUdIVF9CUkFJTExFX1dJTkRPV19MT0NBVElPTiwKKyAgICAuc2V0dGluZ05hbWVzID0gJnByZWZlcmVuY2VTdHJpbmdUYWJsZV9ib29sZWFuLAorICAgIC5zZXR0aW5nID0gJnByZWZzLmhpZ2hsaWdodEJyYWlsbGVXaW5kb3dMb2NhdGlvbgorICB9LAorCisgIHsgLm5hbWUgPSAicm91dGluZ2tleS1zdGFydC1zZWxlY3Rpb24iLAorICAgIC5kZWZhdWx0VmFsdWUgPSBERUZBVUxUX1NUQVJUX1NFTEVDVElPTl9XSVRIX1JPVVRJTkdfS0VZLAorICAgIC5zZXR0aW5nTmFtZXMgPSAmcHJlZmVyZW5jZVN0cmluZ1RhYmxlX2Jvb2xlYW4sCisgICAgLnNldHRpbmcgPSAmcHJlZnMuc3RhcnRTZWxlY3Rpb25XaXRoUm91dGluZ0tleQorICB9LAorCisgIHsgLm5hbWUgPSAiYXV0b3JlbGVhc2UtdGltZSIsCisgICAgLmRlZmF1bHRWYWx1ZSA9IERFRkFVTFRfQVVUT1JFTEVBU0VfVElNRSwKKyAgICAuc2V0dGluZ05hbWVzID0gJnByZWZlcmVuY2VTdHJpbmdUYWJsZV9hdXRvcmVsZWFzZVRpbWUsCisgICAgLnNldHRpbmcgPSAmcHJlZnMuYXV0b3JlbGVhc2VUaW1lCisgIH0sCisKKyAgeyAubmFtZSA9ICJvbi1maXJzdC1yZWxlYXNlIiwKKyAgICAuZGVmYXVsdFZhbHVlID0gREVGQVVMVF9PTl9GSVJTVF9SRUxFQVNFLAorICAgIC5zZXR0aW5nTmFtZXMgPSAmcHJlZmVyZW5jZVN0cmluZ1RhYmxlX2Jvb2xlYW4sCisgICAgLnNldHRpbmcgPSAmcHJlZnMub25GaXJzdFJlbGVhc2UKKyAgfSwKKworICB7IC5uYW1lID0gImxvbmctcHJlc3MtdGltZSIsCisgICAgLmRlZmF1bHRWYWx1ZSA9IERFRkFVTFRfTE9OR19QUkVTU19USU1FLAorICAgIC5zZXR0aW5nID0gJnByZWZzLmxvbmdQcmVzc1RpbWUKKyAgfSwKKworICB7IC5uYW1lID0gImF1dG9yZXBlYXQiLAorICAgIC5kZWZhdWx0VmFsdWUgPSBERUZBVUxUX0FVVE9SRVBFQVRfRU5BQkxFRCwKKyAgICAuc2V0dGluZ05hbWVzID0gJnByZWZlcmVuY2VTdHJpbmdUYWJsZV9ib29sZWFuLAorICAgIC5zZXR0aW5nID0gJnByZWZzLmF1dG9yZXBlYXRFbmFibGVkCisgIH0sCisKKyAgeyAubmFtZSA9ICJhdXRvcmVwZWF0LWludGVydmFsIiwKKyAgICAuZGVmYXVsdFZhbHVlID0gREVGQVVMVF9BVVRPUkVQRUFUX0lOVEVSVkFMLAorICAgIC5zZXR0aW5nID0gJnByZWZzLmF1dG9yZXBlYXRJbnRlcnZhbAorICB9LAorCisgIHsgLm5hbWUgPSAiYXV0b3JlcGVhdC1wYW5uaW5nIiwKKyAgICAuZGVmYXVsdFZhbHVlID0gREVGQVVMVF9BVVRPUkVQRUFUX1BBTk5JTkcsCisgICAgLnNldHRpbmdOYW1lcyA9ICZwcmVmZXJlbmNlU3RyaW5nVGFibGVfYm9vbGVhbiwKKyAgICAuc2V0dGluZyA9ICZwcmVmcy5hdXRvcmVwZWF0UGFubmluZworICB9LAorCisgIHsgLm5hbWUgPSAidG91Y2gtbmF2aWdhdGlvbiIsCisgICAgLmRlZmF1bHRWYWx1ZSA9IERFRkFVTFRfVE9VQ0hfTkFWSUdBVElPTiwKKyAgICAuc2V0dGluZ05hbWVzID0gJnByZWZlcmVuY2VTdHJpbmdUYWJsZV9ib29sZWFuLAorICAgIC5zZXR0aW5nID0gJnByZWZzLnRvdWNoTmF2aWdhdGlvbgorICB9LAorCisgIHsgLm5hbWUgPSAidG91Y2gtc2Vuc2l0aXZpdHkiLAorICAgIC5kZWZhdWx0VmFsdWUgPSBERUZBVUxUX1RPVUNIX1NFTlNJVElWSVRZLAorICAgIC5zZXR0aW5nTmFtZXMgPSAmcHJlZmVyZW5jZVN0cmluZ1RhYmxlX3RvdWNoU2Vuc2l0aXZpdHksCisgICAgLnNldHRpbmcgPSAmcHJlZnMudG91Y2hTZW5zaXRpdml0eQorICB9LAorCisgIHsgLm5hbWUgPSAiYnJhaWxsZS1rZXlib2FyZC1lbmFibGVkIiwKKyAgICAuZGVmYXVsdFZhbHVlID0gREVGQVVMVF9CUkFJTExFX0tFWUJPQVJEX0VOQUJMRUQsCisgICAgLnNldHRpbmdOYW1lcyA9ICZwcmVmZXJlbmNlU3RyaW5nVGFibGVfYm9vbGVhbiwKKyAgICAuc2V0dGluZyA9ICZwcmVmcy5icmFpbGxlS2V5Ym9hcmRFbmFibGVkCisgIH0sCisKKyAgeyAubmFtZSA9ICJicmFpbGxlLXR5cGluZy1tb2RlIiwKKyAgICAuZGVmYXVsdFZhbHVlID0gREVGQVVMVF9CUkFJTExFX1RZUElOR19NT0RFLAorICAgIC5zZXR0aW5nTmFtZXMgPSAmcHJlZmVyZW5jZVN0cmluZ1RhYmxlX2JyYWlsbGVUeXBpbmdNb2RlLAorICAgIC5zZXR0aW5nID0gJnByZWZzLmJyYWlsbGVUeXBpbmdNb2RlCisgIH0sCisKKyAgeyAubmFtZSA9ICJicmFpbGxlLXF1aWNrLXNwYWNlIiwKKyAgICAuZGVmYXVsdFZhbHVlID0gREVGQVVMVF9CUkFJTExFX1FVSUNLX1NQQUNFLAorICAgIC5zZXR0aW5nTmFtZXMgPSAmcHJlZmVyZW5jZVN0cmluZ1RhYmxlX2Jvb2xlYW4sCisgICAgLnNldHRpbmcgPSAmcHJlZnMuYnJhaWxsZVF1aWNrU3BhY2UKKyAgfSwKKworICB7IC5uYW1lID0gImFsZXJ0cy1jb25zb2xlLWJlbGwiLAorICAgIC5kZWZhdWx0VmFsdWUgPSBERUZBVUxUX0NPTlNPTEVfQkVMTF9BTEVSVCwKKyAgICAuc2V0dGluZ05hbWVzID0gJnByZWZlcmVuY2VTdHJpbmdUYWJsZV9ib29sZWFuLAorICAgIC5zZXR0aW5nID0gJnByZWZzLmNvbnNvbGVCZWxsQWxlcnQKKyAgfSwKKworICB7IC5uYW1lID0gImFsZXJ0cy1rZXlib2FyZC1sZWRzIiwKKyAgICAuZGVmYXVsdFZhbHVlID0gREVGQVVMVF9LRVlCT0FSRF9MRURfQUxFUlRTLAorICAgIC5zZXR0aW5nTmFtZXMgPSAmcHJlZmVyZW5jZVN0cmluZ1RhYmxlX2Jvb2xlYW4sCisgICAgLnNldHRpbmcgPSAmcHJlZnMua2V5Ym9hcmRMZWRBbGVydHMKKyAgfSwKKworICB7IC5uYW1lID0gInNwZWFrLWtleS1jb250ZXh0IiwKKyAgICAuZGVmYXVsdFZhbHVlID0gREVGQVVMVF9TUEVBS19LRVlfQ09OVEVYVCwKKyAgICAuc2V0dGluZ05hbWVzID0gJnByZWZlcmVuY2VTdHJpbmdUYWJsZV9ib29sZWFuLAorICAgIC5zZXR0aW5nID0gJnByZWZzLnNwZWFrS2V5Q29udGV4dAorICB9LAorCisgIHsgLm5hbWUgPSAic3BlYWstbW9kaWZpZXIta2V5IiwKKyAgICAuZGVmYXVsdFZhbHVlID0gREVGQVVMVF9TUEVBS19NT0RJRklFUl9LRVksCisgICAgLnNldHRpbmdOYW1lcyA9ICZwcmVmZXJlbmNlU3RyaW5nVGFibGVfYm9vbGVhbiwKKyAgICAuc2V0dGluZyA9ICZwcmVmcy5zcGVha01vZGlmaWVyS2V5CisgIH0sCisKKyAgeyAubmFtZSA9ICJhbGVydC10dW5lcyIsCisgICAgLmRlZmF1bHRWYWx1ZSA9IERFRkFVTFRfQUxFUlRfVFVORVMsCisgICAgLnNldHRpbmdOYW1lcyA9ICZwcmVmZXJlbmNlU3RyaW5nVGFibGVfYm9vbGVhbiwKKyAgICAuc2V0dGluZyA9ICZwcmVmcy5hbGVydFR1bmVzCisgIH0sCisKKyAgeyAubmFtZSA9ICJ0dW5lLWRldmljZSIsCisgICAgLmRlZmF1bHRWYWx1ZSA9IERFRkFVTFRfVFVORV9ERVZJQ0UsCisgICAgLnNldHRpbmdOYW1lcyA9ICZwcmVmZXJlbmNlU3RyaW5nVGFibGVfdHVuZURldmljZSwKKyAgICAuc2V0dGluZyA9ICZwcmVmcy50dW5lRGV2aWNlCisgIH0sCisKKyAgeyAubmFtZSA9ICJwY20tdm9sdW1lIiwKKyAgICAuZGVmYXVsdFZhbHVlID0gREVGQVVMVF9QQ01fVk9MVU1FLAorICAgIC5zZXR0aW5nID0gJnByZWZzLnBjbVZvbHVtZQorICB9LAorCisgIHsgLm5hbWUgPSAibWlkaS12b2x1bWUiLAorICAgIC5kZWZhdWx0VmFsdWUgPSBERUZBVUxUX01JRElfVk9MVU1FLAorICAgIC5zZXR0aW5nID0gJnByZWZzLm1pZGlWb2x1bWUKKyAgfSwKKworICB7IC5uYW1lID0gIm1pZGktaW5zdHJ1bWVudCIsCisgICAgLmRlZmF1bHRWYWx1ZSA9IERFRkFVTFRfTUlESV9JTlNUUlVNRU5ULAorICAgIC5zZXR0aW5nID0gJnByZWZzLm1pZGlJbnN0cnVtZW50CisgIH0sCisKKyAgeyAubmFtZSA9ICJmbS12b2x1bWUiLAorICAgIC5kZWZhdWx0VmFsdWUgPSBERUZBVUxUX0ZNX1ZPTFVNRSwKKyAgICAuc2V0dGluZyA9ICZwcmVmcy5mbVZvbHVtZQorICB9LAorCisgIHsgLm5hbWUgPSAiYWxlcnQtZG90cyIsCisgICAgLmRlZmF1bHRWYWx1ZSA9IERFRkFVTFRfQUxFUlRfRE9UUywKKyAgICAuc2V0dGluZ05hbWVzID0gJnByZWZlcmVuY2VTdHJpbmdUYWJsZV9ib29sZWFuLAorICAgIC5zZXR0aW5nID0gJnByZWZzLmFsZXJ0RG90cworICB9LAorCisgIHsgLm5hbWUgPSAiYWxlcnQtbWVzc2FnZXMiLAorICAgIC5kZWZhdWx0VmFsdWUgPSBERUZBVUxUX0FMRVJUX01FU1NBR0VTLAorICAgIC5zZXR0aW5nTmFtZXMgPSAmcHJlZmVyZW5jZVN0cmluZ1RhYmxlX2Jvb2xlYW4sCisgICAgLnNldHRpbmcgPSAmcHJlZnMuYWxlcnRNZXNzYWdlcworICB9LAorCisgIHsgLm5hbWUgPSAic3BlZWNoLXZvbHVtZSIsCisgICAgLmRlZmF1bHRWYWx1ZSA9IERFRkFVTFRfU1BFRUNIX1ZPTFVNRSwKKyAgICAuc2V0dGluZyA9ICZwcmVmcy5zcGVlY2hWb2x1bWUKKyAgfSwKKworICB7IC5uYW1lID0gInNwZWVjaC1yYXRlIiwKKyAgICAuZGVmYXVsdFZhbHVlID0gREVGQVVMVF9TUEVFQ0hfUkFURSwKKyAgICAuc2V0dGluZyA9ICZwcmVmcy5zcGVlY2hSYXRlCisgIH0sCisKKyAgeyAubmFtZSA9ICJzcGVlY2gtcGl0Y2giLAorICAgIC5kZWZhdWx0VmFsdWUgPSBERUZBVUxUX1NQRUVDSF9QSVRDSCwKKyAgICAuc2V0dGluZyA9ICZwcmVmcy5zcGVlY2hQaXRjaAorICB9LAorCisgIHsgLm5hbWUgPSAic3BlZWNoLXB1bmN0dWF0aW9uIiwKKyAgICAuZGVmYXVsdFZhbHVlID0gREVGQVVMVF9TUEVFQ0hfUFVOQ1RVQVRJT04sCisgICAgLnNldHRpbmdOYW1lcyA9ICZwcmVmZXJlbmNlU3RyaW5nVGFibGVfc3BlZWNoUHVuY3R1YXRpb24sCisgICAgLnNldHRpbmcgPSAmcHJlZnMuc3BlZWNoUHVuY3R1YXRpb24KKyAgfSwKKworICB7IC5uYW1lID0gInNwZWVjaC11cHBlcmNhc2UtaW5kaWNhdG9yIiwKKyAgICAuZGVmYXVsdFZhbHVlID0gREVGQVVMVF9TUEVFQ0hfVVBQRVJDQVNFX0lORElDQVRPUiwKKyAgICAuc2V0dGluZ05hbWVzID0gJnByZWZlcmVuY2VTdHJpbmdUYWJsZV9zcGVlY2hVcHBlcmNhc2VJbmRpY2F0b3IsCisgICAgLnNldHRpbmcgPSAmcHJlZnMuc3BlZWNoVXBwZXJjYXNlSW5kaWNhdG9yCisgIH0sCisKKyAgeyAubmFtZSA9ICJzcGVlY2gtd2hpdGVzcGFjZS1pbmRpY2F0b3IiLAorICAgIC5kZWZhdWx0VmFsdWUgPSBERUZBVUxUX1NQRUVDSF9XSElURVNQQUNFX0lORElDQVRPUiwKKyAgICAuc2V0dGluZ05hbWVzID0gJnByZWZlcmVuY2VTdHJpbmdUYWJsZV9zcGVlY2hXaGl0ZXNwYWNlSW5kaWNhdG9yLAorICAgIC5zZXR0aW5nID0gJnByZWZzLnNwZWVjaFdoaXRlc3BhY2VJbmRpY2F0b3IKKyAgfSwKKworICB7IC5uYW1lID0gInNheS1saW5lLW1vZGUiLAorICAgIC5kZWZhdWx0VmFsdWUgPSBERUZBVUxUX1NBWV9MSU5FX01PREUsCisgICAgLnNldHRpbmdOYW1lcyA9ICZwcmVmZXJlbmNlU3RyaW5nVGFibGVfc2F5TGluZU1vZGUsCisgICAgLnNldHRpbmcgPSAmcHJlZnMuc2F5TGluZU1vZGUKKyAgfSwKKworICB7IC5uYW1lID0gImF1dG9zcGVhayIsCisgICAgLmRlZmF1bHRWYWx1ZSA9IERFRkFVTFRfQVVUT1NQRUFLLAorICAgIC5zZXR0aW5nTmFtZXMgPSAmcHJlZmVyZW5jZVN0cmluZ1RhYmxlX2Jvb2xlYW4sCisgICAgLnNldHRpbmcgPSAmcHJlZnMuYXV0b3NwZWFrCisgIH0sCisKKyAgeyAubmFtZSA9ICJhdXRvc3BlYWstc2VsZWN0ZWQtbGluZSIsCisgICAgLmRlZmF1bHRWYWx1ZSA9IERFRkFVTFRfQVVUT1NQRUFLX1NFTEVDVEVEX0xJTkUsCisgICAgLnNldHRpbmdOYW1lcyA9ICZwcmVmZXJlbmNlU3RyaW5nVGFibGVfYm9vbGVhbiwKKyAgICAuc2V0dGluZyA9ICZwcmVmcy5hdXRvc3BlYWtTZWxlY3RlZExpbmUKKyAgfSwKKworICB7IC5uYW1lID0gImF1dG9zcGVhay1zZWxlY3RlZC1jaGFyYWN0ZXIiLAorICAgIC5kZWZhdWx0VmFsdWUgPSBERUZBVUxUX0FVVE9TUEVBS19TRUxFQ1RFRF9DSEFSQUNURVIsCisgICAgLnNldHRpbmdOYW1lcyA9ICZwcmVmZXJlbmNlU3RyaW5nVGFibGVfYm9vbGVhbiwKKyAgICAuc2V0dGluZyA9ICZwcmVmcy5hdXRvc3BlYWtTZWxlY3RlZENoYXJhY3RlcgorICB9LAorCisgIHsgLm5hbWUgPSAiYXV0b3NwZWFrLWluc2VydGVkLWNoYXJhY3RlcnMiLAorICAgIC5kZWZhdWx0VmFsdWUgPSBERUZBVUxUX0FVVE9TUEVBS19JTlNFUlRFRF9DSEFSQUNURVJTLAorICAgIC5zZXR0aW5nTmFtZXMgPSAmcHJlZmVyZW5jZVN0cmluZ1RhYmxlX2Jvb2xlYW4sCisgICAgLnNldHRpbmcgPSAmcHJlZnMuYXV0b3NwZWFrSW5zZXJ0ZWRDaGFyYWN0ZXJzCisgIH0sCisKKyAgeyAubmFtZSA9ICJhdXRvc3BlYWstZGVsZXRlZC1jaGFyYWN0ZXJzIiwKKyAgICAuZGVmYXVsdFZhbHVlID0gREVGQVVMVF9BVVRPU1BFQUtfREVMRVRFRF9DSEFSQUNURVJTLAorICAgIC5zZXR0aW5nTmFtZXMgPSAmcHJlZmVyZW5jZVN0cmluZ1RhYmxlX2Jvb2xlYW4sCisgICAgLnNldHRpbmcgPSAmcHJlZnMuYXV0b3NwZWFrRGVsZXRlZENoYXJhY3RlcnMKKyAgfSwKKworICB7IC5uYW1lID0gImF1dG9zcGVhay1yZXBsYWNlZC1jaGFyYWN0ZXJzIiwKKyAgICAuZGVmYXVsdFZhbHVlID0gREVGQVVMVF9BVVRPU1BFQUtfUkVQTEFDRURfQ0hBUkFDVEVSUywKKyAgICAuc2V0dGluZ05hbWVzID0gJnByZWZlcmVuY2VTdHJpbmdUYWJsZV9ib29sZWFuLAorICAgIC5zZXR0aW5nID0gJnByZWZzLmF1dG9zcGVha1JlcGxhY2VkQ2hhcmFjdGVycworICB9LAorCisgIHsgLm5hbWUgPSAiYXV0b3NwZWFrLWNvbXBsZXRlZC13b3JkcyIsCisgICAgLmRlZmF1bHRWYWx1ZSA9IERFRkFVTFRfQVVUT1NQRUFLX0NPTVBMRVRFRF9XT1JEUywKKyAgICAuc2V0dGluZ05hbWVzID0gJnByZWZlcmVuY2VTdHJpbmdUYWJsZV9ib29sZWFuLAorICAgIC5zZXR0aW5nID0gJnByZWZzLmF1dG9zcGVha0NvbXBsZXRlZFdvcmRzCisgIH0sCisKKyAgeyAubmFtZSA9ICJhdXRvc3BlYWstbGluZS1pbmRlbnQiLAorICAgIC5kZWZhdWx0VmFsdWUgPSBERUZBVUxUX0FVVE9TUEVBS19MSU5FX0lOREVOVCwKKyAgICAuc2V0dGluZ05hbWVzID0gJnByZWZlcmVuY2VTdHJpbmdUYWJsZV9ib29sZWFuLAorICAgIC5zZXR0aW5nID0gJnByZWZzLmF1dG9zcGVha0xpbmVJbmRlbnQKKyAgfSwKKworICB7IC5uYW1lID0gInNob3ctc3BlZWNoLWN1cnNvciIsCisgICAgLmRlZmF1bHRWYWx1ZSA9IERFRkFVTFRfU0hPV19TUEVFQ0hfQ1VSU09SLAorICAgIC5zZXR0aW5nTmFtZXMgPSAmcHJlZmVyZW5jZVN0cmluZ1RhYmxlX2Jvb2xlYW4sCisgICAgLnNldHRpbmcgPSAmcHJlZnMuc2hvd1NwZWVjaEN1cnNvcgorICB9LAorCisgIHsgLm5hbWUgPSAic3BlZWNoLWN1cnNvci1zdHlsZSIsCisgICAgLmRlZmF1bHRWYWx1ZSA9IERFRkFVTFRfU1BFRUNIX0NVUlNPUl9TVFlMRSwKKyAgICAuc2V0dGluZ05hbWVzID0gJnByZWZlcmVuY2VTdHJpbmdUYWJsZV9jdXJzb3JTdHlsZSwKKyAgICAuc2V0dGluZyA9ICZwcmVmcy5zcGVlY2hDdXJzb3JTdHlsZQorICB9LAorCisgIHsgLm5hbWUgPSAiYmxpbmtpbmctc3BlZWNoLWN1cnNvciIsCisgICAgLmRlZmF1bHRWYWx1ZSA9IERFRkFVTFRfQkxJTktJTkdfU1BFRUNIX0NVUlNPUiwKKyAgICAuc2V0dGluZ05hbWVzID0gJnByZWZlcmVuY2VTdHJpbmdUYWJsZV9ib29sZWFuLAorICAgIC5zZXR0aW5nID0gJnByZWZzLmJsaW5raW5nU3BlZWNoQ3Vyc29yCisgIH0sCisKKyAgeyAubmFtZSA9ICJzcGVlY2gtY3Vyc29yLXZpc2libGUtdGltZSIsCisgICAgLmRlZmF1bHRWYWx1ZSA9IERFRkFVTFRfU1BFRUNIX0NVUlNPUl9WSVNJQkxFX1RJTUUsCisgICAgLnNldHRpbmcgPSAmcHJlZnMuc3BlZWNoQ3Vyc29yVmlzaWJsZVRpbWUKKyAgfSwKKworICB7IC5uYW1lID0gInNwZWVjaC1jdXJzb3ItaW52aXNpYmxlLXRpbWUiLAorICAgIC5kZWZhdWx0VmFsdWUgPSBERUZBVUxUX1NQRUVDSF9DVVJTT1JfSU5WSVNJQkxFX1RJTUUsCisgICAgLnNldHRpbmcgPSAmcHJlZnMuc3BlZWNoQ3Vyc29ySW52aXNpYmxlVGltZQorICB9LAorCisgIHsgLm5hbWUgPSAidGltZS1mb3JtYXQiLAorICAgIC5kZWZhdWx0VmFsdWUgPSBERUZBVUxUX1RJTUVfRk9STUFULAorICAgIC5zZXR0aW5nTmFtZXMgPSAmcHJlZmVyZW5jZVN0cmluZ1RhYmxlX3RpbWVGb3JtYXQsCisgICAgLnNldHRpbmcgPSAmcHJlZnMudGltZUZvcm1hdAorICB9LAorCisgIHsgLm5hbWUgPSAidGltZS1zZXBhcmF0b3IiLAorICAgIC5kZWZhdWx0VmFsdWUgPSBERUZBVUxUX1RJTUVfU0VQQVJBVE9SLAorICAgIC5zZXR0aW5nTmFtZXMgPSAmcHJlZmVyZW5jZVN0cmluZ1RhYmxlX3RpbWVTZXBhcmF0b3IsCisgICAgLnNldHRpbmcgPSAmcHJlZnMudGltZVNlcGFyYXRvcgorICB9LAorCisgIHsgLm5hbWUgPSAic2hvdy1zZWNvbmRzIiwKKyAgICAuZGVmYXVsdFZhbHVlID0gREVGQVVMVF9TSE9XX1NFQ09ORFMsCisgICAgLnNldHRpbmdOYW1lcyA9ICZwcmVmZXJlbmNlU3RyaW5nVGFibGVfYm9vbGVhbiwKKyAgICAuc2V0dGluZyA9ICZwcmVmcy5zaG93U2Vjb25kcworICB9LAorCisgIHsgLm5hbWUgPSAiZGF0ZS1wb3NpdGlvbiIsCisgICAgLmRlZmF1bHRWYWx1ZSA9IERFRkFVTFRfREFURV9QT1NJVElPTiwKKyAgICAuc2V0dGluZ05hbWVzID0gJnByZWZlcmVuY2VTdHJpbmdUYWJsZV9kYXRlUG9zaXRpb24sCisgICAgLnNldHRpbmcgPSAmcHJlZnMuZGF0ZVBvc2l0aW9uCisgIH0sCisKKyAgeyAubmFtZSA9ICJkYXRlLWZvcm1hdCIsCisgICAgLmRlZmF1bHRWYWx1ZSA9IERFRkFVTFRfREFURV9GT1JNQVQsCisgICAgLnNldHRpbmdOYW1lcyA9ICZwcmVmZXJlbmNlU3RyaW5nVGFibGVfZGF0ZUZvcm1hdCwKKyAgICAuc2V0dGluZyA9ICZwcmVmcy5kYXRlRm9ybWF0CisgIH0sCisKKyAgeyAubmFtZSA9ICJkYXRlLXNlcGFyYXRvciIsCisgICAgLmRlZmF1bHRWYWx1ZSA9IERFRkFVTFRfREFURV9TRVBBUkFUT1IsCisgICAgLnNldHRpbmdOYW1lcyA9ICZwcmVmZXJlbmNlU3RyaW5nVGFibGVfZGF0ZVNlcGFyYXRvciwKKyAgICAuc2V0dGluZyA9ICZwcmVmcy5kYXRlU2VwYXJhdG9yCisgIH0sCisKKyAgeyAubmFtZSA9ICJzdGF0dXMtcG9zaXRpb24iLAorICAgIC5kZWZhdWx0VmFsdWUgPSBERUZBVUxUX1NUQVRVU19QT1NJVElPTiwKKyAgICAuc2V0dGluZ05hbWVzID0gJnByZWZlcmVuY2VTdHJpbmdUYWJsZV9zdGF0dXNQb3NpdGlvbiwKKyAgICAuc2V0dGluZyA9ICZwcmVmcy5zdGF0dXNQb3NpdGlvbgorICB9LAorCisgIHsgLm5hbWUgPSAic3RhdHVzLWNvdW50IiwKKyAgICAuZGVmYXVsdFZhbHVlID0gREVGQVVMVF9TVEFUVVNfQ09VTlQsCisgICAgLnNldHRpbmcgPSAmcHJlZnMuc3RhdHVzQ291bnQKKyAgfSwKKworICB7IC5uYW1lID0gInN0YXR1cy1zZXBhcmF0b3IiLAorICAgIC5kZWZhdWx0VmFsdWUgPSBERUZBVUxUX1NUQVRVU19TRVBBUkFUT1IsCisgICAgLnNldHRpbmdOYW1lcyA9ICZwcmVmZXJlbmNlU3RyaW5nVGFibGVfc3RhdHVzU2VwYXJhdG9yLAorICAgIC5zZXR0aW5nID0gJnByZWZzLnN0YXR1c1NlcGFyYXRvcgorICB9LAorCisgIHsgLm5hbWUgPSAic3RhdHVzLWZpZWxkcyIsCisgICAgLmRlZmF1bHRWYWx1ZSA9IHNmRW5kLAorICAgIC5lbmNvdW50ZXJlZCA9ICZzdGF0dXNGaWVsZHNTZXQsCisgICAgLnNldHRpbmdOYW1lcyA9ICZwcmVmZXJlbmNlU3RyaW5nVGFibGVfc3RhdHVzRmllbGQsCisgICAgLnNldHRpbmdDb3VudCA9IEFSUkFZX0NPVU5UKHByZWZzLnN0YXR1c0ZpZWxkcyksCisgICAgLnNldHRpbmcgPSBwcmVmcy5zdGF0dXNGaWVsZHMKKyAgfQorfTsKKworY29uc3QgUHJlZmVyZW5jZUFsaWFzIHByZWZlcmVuY2VBbGlhc1RhYmxlW10gPSB7CisgIHsub2xkTmFtZT0iYXV0b3JlcGVhdC1kZWxheSIsIC5uZXdOYW1lPSJsb25nLXByZXNzLXRpbWUifSwKKyAgey5vbGROYW1lPSJzaG93LWN1cnNvciIsIC5uZXdOYW1lPSJzaG93LXNjcmVlbi1jdXJzb3IifSwKKyAgey5vbGROYW1lPSJjdXJzb3Itc3R5bGUiLCAubmV3TmFtZT0ic2NyZWVuLWN1cnNvci1zdHlsZSJ9LAorICB7Lm9sZE5hbWU9ImJsaW5raW5nLWN1cnNvciIsIC5uZXdOYW1lPSJibGlua2luZy1zY3JlZW4tY3Vyc29yIn0sCisgIHsub2xkTmFtZT0iY3Vyc29yLXZpc2libGUtdGltZSIsIC5uZXdOYW1lPSJzY3JlZW4tY3Vyc29yLXZpc2libGUtdGltZSJ9LAorICB7Lm9sZE5hbWU9ImN1cnNvci1pbnZpc2libGUtdGltZSIsIC5uZXdOYW1lPSJzY3JlZW4tY3Vyc29yLWludmlzaWJsZS10aW1lIn0sCisgIHsub2xkTmFtZT0ic2tpcC1ibGFuay13aW5kb3dzIiwgLm5ld05hbWU9InNraXAtYmxhbmstYnJhaWxsZS13aW5kb3dzIn0sCisgIHsub2xkTmFtZT0ic2tpcC1ibGFuay13aW5kb3dzLW1vZGUiLCAubmV3TmFtZT0ic2tpcC1ibGFuay1icmFpbGxlLXdpbmRvd3MtbW9kZSJ9LAorICB7Lm9sZE5hbWU9InNsaWRpbmctd2luZG93IiwgLm5ld05hbWU9InNsaWRpbmctYnJhaWxsZS13aW5kb3cifSwKKyAgey5vbGROYW1lPSJlYWdlci1zbGlkaW5nLXdpbmRvdyIsIC5uZXdOYW1lPSJlYWdlci1zbGlkaW5nLWJyYWlsbGUtd2luZG93In0sCisgIHsub2xkTmFtZT0id2luZG93LW92ZXJsYXAiLCAubmV3TmFtZT0iYnJhaWxsZS13aW5kb3ctb3ZlcmxhcCJ9LAorICB7Lm9sZE5hbWU9IndpbmRvdy1mb2xsb3dzLXBvaW50ZXIiLCAubmV3TmFtZT0idHJhY2stc2NyZWVuLXBvaW50ZXIifSwKKyAgey5vbGROYW1lPSJoaWdobGlnaHQtd2luZG93IiwgLm5ld05hbWU9ImhpZ2hsaWdodC1icmFpbGxlLXdpbmRvdy1sb2NhdGlvbiJ9LAorICB7Lm9sZE5hbWU9InVwcGVyY2FzZS1pbmRpY2F0b3IiLCAubmV3TmFtZT0ic3BlZWNoLXVwcGVyY2FzZS1pbmRpY2F0b3IifSwKKyAgey5vbGROYW1lPSJ3aGl0ZXNwYWNlLWluZGljYXRvciIsIC5uZXdOYW1lPSJzcGVlY2gtd2hpdGVzcGFjZS1pbmRpY2F0b3IifSwKKyAgey5vbGROYW1lPSJicmFpbGxlLXNlbnNpdGl2aXR5IiwgLm5ld05hbWU9InRvdWNoLXNlbnNpdGl2aXR5In0sCisgIHsub2xkTmFtZT0iYnJhaWxsZS1pbnB1dC1tb2RlIiwgLm5ld05hbWU9ImJyYWlsbGUtdHlwaW5nLW1vZGUifSwKKyAgey5vbGROYW1lPSJicmFpbGxlLWRpc3BsYXktb3JpZW50YXRpb24ifSwKKyAgey5vbGROYW1lPSJmaXJzdC1yZWxlYXNlIiwgLm5ld05hbWU9Im9uLWZpcnN0LXJlbGVhc2UifSwKK307CisKK2NvbnN0IHVuc2lnbmVkIGNoYXIgcHJlZmVyZW5jZURlZmluaXRpb25Db3VudCA9IEFSUkFZX0NPVU5UKHByZWZlcmVuY2VEZWZpbml0aW9uVGFibGUpOworY29uc3QgdW5zaWduZWQgY2hhciBwcmVmZXJlbmNlQWxpYXNDb3VudCA9IEFSUkFZX0NPVU5UKHByZWZlcmVuY2VBbGlhc1RhYmxlKTsKZGlmZiAtLWdpdCBhL1Byb2dyYW1zL3ByZWZfdGFibGVzLmggYi9Qcm9ncmFtcy9wcmVmX3RhYmxlcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA1OTMzOWUKLS0tIC9kZXYvbnVsbAorKysgYi9Qcm9ncmFtcy9wcmVmX3RhYmxlcy5oCkBAIC0wLDAgKzEsNTcgQEAKKy8qCisgKiBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorICogICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorICoKKyAqIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorICoKKyAqIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyAqLworCisjaWZuZGVmIEJSTFRUWV9JTkNMVURFRF9QUkVGX1RBQkxFUworI2RlZmluZSBCUkxUVFlfSU5DTFVERURfUFJFRl9UQUJMRVMKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZiAvKiBfX2NwbHVzcGx1cyAqLworCit0eXBlZGVmIHN0cnVjdCB7CisgIGNvbnN0IGNoYXIgKmNvbnN0ICp0YWJsZTsKKyAgdW5zaWduZWQgY2hhciBjb3VudDsKK30gUHJlZmVyZW5jZVN0cmluZ1RhYmxlOworCitzdHJ1Y3QgUHJlZmVyZW5jZURlZmluaXRpb25TdHJ1Y3QgeworICBjb25zdCBjaGFyICpuYW1lOworICB1bnNpZ25lZCBjaGFyICpzZXR0aW5nOworICBjb25zdCBQcmVmZXJlbmNlU3RyaW5nVGFibGUgKnNldHRpbmdOYW1lczsKKyAgdW5zaWduZWQgY2hhciAqZW5jb3VudGVyZWQ7CisgIHVuc2lnbmVkIGNoYXIgc2V0dGluZ0NvdW50OworICB1bnNpZ25lZCBjaGFyIGRlZmF1bHRWYWx1ZTsKKyAgdW5zaWduZWQgY2hhciBkb250U2F2ZToxOworfTsKKworZXh0ZXJuIHVuc2lnbmVkIGNoYXIgc3RhdHVzRmllbGRzU2V0OworZXh0ZXJuIGNvbnN0IFByZWZlcmVuY2VEZWZpbml0aW9uIHByZWZlcmVuY2VEZWZpbml0aW9uVGFibGVbXTsKK2V4dGVybiBjb25zdCB1bnNpZ25lZCBjaGFyIHByZWZlcmVuY2VEZWZpbml0aW9uQ291bnQ7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgY29uc3QgY2hhciAqb2xkTmFtZTsKKyAgY29uc3QgY2hhciAqbmV3TmFtZTsKK30gUHJlZmVyZW5jZUFsaWFzOworCitleHRlcm4gY29uc3QgUHJlZmVyZW5jZUFsaWFzIHByZWZlcmVuY2VBbGlhc1RhYmxlW107CitleHRlcm4gY29uc3QgdW5zaWduZWQgY2hhciBwcmVmZXJlbmNlQWxpYXNDb3VudDsKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYgLyogX19jcGx1c3BsdXMgKi8KKworI2VuZGlmIC8qIEJSTFRUWV9JTkNMVURFRF9QUkVGX1RBQkxFUyAqLwpkaWZmIC0tZ2l0IGEvUHJvZ3JhbXMvcHJlZnMuYyBiL1Byb2dyYW1zL3ByZWZzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGI1YTIwNQotLS0gL2Rldi9udWxsCisrKyBiL1Byb2dyYW1zL3ByZWZzLmMKQEAgLTAsMCArMSw1ODUgQEAKKy8qCisgKiBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorICogICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorICoKKyAqIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorICoKKyAqIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyAqLworCisjaW5jbHVkZSAicHJvbG9ndWUuaCIKKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxjdHlwZS5oPgorCisjaW5jbHVkZSAicHJlZnMuaCIKKyNpbmNsdWRlICJwcmVmX3RhYmxlcy5oIgorI2luY2x1ZGUgInN0YXR1c190eXBlcy5oIgorI2luY2x1ZGUgImRlZmF1bHRzLmgiCisjaW5jbHVkZSAibG9nLmgiCisjaW5jbHVkZSAiZmlsZS5oIgorI2luY2x1ZGUgImRhdGFmaWxlLmgiCisjaW5jbHVkZSAicGFyc2UuaCIKKworI2RlZmluZSBQUkVGU19DT01NRU5UX0NIQVJBQ1RFUiAnIycKKyNkZWZpbmUgUFJFRlNfTUFHSUNfTlVNQkVSIDB4NDAwNQorCit2b2lkCitzZXRTdGF0dXNGaWVsZHMgKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmZpZWxkcykgeworICBpZiAoIXN0YXR1c0ZpZWxkc1NldCkgeworICAgIGlmIChmaWVsZHMpIHsKKyAgICAgIHVuc2lnbmVkIGludCBpbmRleCA9IDA7CisKKyAgICAgIHdoaWxlIChpbmRleCA8IChBUlJBWV9DT1VOVChwcmVmcy5zdGF0dXNGaWVsZHMpIC0gMSkpIHsKKyAgICAgICAgdW5zaWduZWQgY2hhciBmaWVsZCA9IGZpZWxkc1tpbmRleF07CisgICAgICAgIGlmIChmaWVsZCA9PSBzZkVuZCkgYnJlYWs7CisgICAgICAgIHByZWZzLnN0YXR1c0ZpZWxkc1tpbmRleCsrXSA9IGZpZWxkOworICAgICAgfQorCisgICAgICBzdGF0dXNGaWVsZHNTZXQgPSAxOworICAgIH0KKyAgfQorfQorCitzdGF0aWMgdm9pZAorc2V0U3RhdHVzU3R5bGUgKHVuc2lnbmVkIGNoYXIgc3R5bGUpIHsKKyAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc3R5bGVOb25lW10gPSB7CisgICAgc2ZFbmQKKyAgfTsKKworICBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzdHlsZUFsdmFbXSA9IHsKKyAgICBzZkFscGhhYmV0aWNDdXJzb3JDb29yZGluYXRlcywgc2ZBbHBoYWJldGljV2luZG93Q29vcmRpbmF0ZXMsIHNmU3RhdGVMZXR0ZXIsIHNmRW5kCisgIH07CisKKyAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc3R5bGVUaWVtYW5bXSA9IHsKKyAgICBzZkN1cnNvckFuZFdpbmRvd0NvbHVtbjIsIHNmQ3Vyc29yQW5kV2luZG93Um93Miwgc2ZTdGF0ZURvdHMsIHNmRW5kCisgIH07CisKKyAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc3R5bGVQQjgwW10gPSB7CisgICAgc2ZXaW5kb3dSb3csIHNmRW5kCisgIH07CisKKyAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc3R5bGVDb25maWd1cmFibGVbXSA9IHsKKyAgICBzZkdlbmVyaWMsIHNmRW5kCisgIH07CisKKyAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc3R5bGVNRFZbXSA9IHsKKyAgICBzZldpbmRvd0Nvb3JkaW5hdGVzMiwgc2ZFbmQKKyAgfTsKKworICBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzdHlsZVZveWFnZXJbXSA9IHsKKyAgICBzZldpbmRvd1Jvdywgc2ZDdXJzb3JSb3csIHNmQ3Vyc29yQ29sdW1uLCBzZkVuZAorICB9OworCisgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHN0eWxlVGltZVtdID0geworICAgIHNmVGltZSwgc2ZFbmQKKyAgfTsKKworICBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciAqY29uc3Qgc3R5bGVUYWJsZVtdID0geworICAgIHN0eWxlTm9uZSwgc3R5bGVBbHZhLCBzdHlsZVRpZW1hbiwgc3R5bGVQQjgwLAorICAgIHN0eWxlQ29uZmlndXJhYmxlLCBzdHlsZU1EViwgc3R5bGVWb3lhZ2VyLCBzdHlsZVRpbWUKKyAgfTsKKyAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc3R5bGVDb3VudCA9IEFSUkFZX0NPVU5UKHN0eWxlVGFibGUpOworCisgIGlmIChzdHlsZSA8IHN0eWxlQ291bnQpIHsKKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpmaWVsZHMgPSBzdHlsZVRhYmxlW3N0eWxlXTsKKyAgICBpZiAoKmZpZWxkcyAhPSBzZkVuZCkgc2V0U3RhdHVzRmllbGRzKGZpZWxkcyk7CisgIH0KK30KKworc3RhdGljIGludAorY29tcGFyZVByZWZlcmVuY2VOYW1lcyAoY29uc3QgY2hhciAqbmFtZTEsIGNvbnN0IGNoYXIgKm5hbWUyKSB7CisgIHJldHVybiBzdHJjbXAobmFtZTEsIG5hbWUyKTsKK30KKworc3RhdGljIGludAorc29ydFByZWZlcmVuY2VEZWZpbml0aW9ucyAoY29uc3Qgdm9pZCAqZWxlbWVudDEsIGNvbnN0IHZvaWQgKmVsZW1lbnQyKSB7CisgIGNvbnN0IFByZWZlcmVuY2VEZWZpbml0aW9uICpjb25zdCAqcHJlZjEgPSBlbGVtZW50MTsKKyAgY29uc3QgUHJlZmVyZW5jZURlZmluaXRpb24gKmNvbnN0ICpwcmVmMiA9IGVsZW1lbnQyOworICByZXR1cm4gY29tcGFyZVByZWZlcmVuY2VOYW1lcygoKnByZWYxKS0+bmFtZSwgKCpwcmVmMiktPm5hbWUpOworfQorCitzdGF0aWMgaW50CitzZWFyY2hQcmVmZXJlbmNlRGVmaW5pdGlvbiAoY29uc3Qgdm9pZCAqdGFyZ2V0LCBjb25zdCB2b2lkICplbGVtZW50KSB7CisgIGNvbnN0IGNoYXIgKm5hbWUgPSB0YXJnZXQ7CisgIGNvbnN0IFByZWZlcmVuY2VEZWZpbml0aW9uICpjb25zdCAqcHJlZiA9IGVsZW1lbnQ7CisgIHJldHVybiBjb21wYXJlUHJlZmVyZW5jZU5hbWVzKG5hbWUsICgqcHJlZiktPm5hbWUpOworfQorCitzdGF0aWMgY29uc3QgUHJlZmVyZW5jZURlZmluaXRpb24gKgorZmluZFByZWZlcmVuY2VEZWZpbml0aW9uIChjb25zdCBjaGFyICpuYW1lKSB7CisgIHN0YXRpYyBjb25zdCBQcmVmZXJlbmNlRGVmaW5pdGlvbiAqKnNvcnRlZERlZmluaXRpb25zID0gTlVMTDsKKworICBpZiAoIXNvcnRlZERlZmluaXRpb25zKSB7CisgICAgaWYgKCEoc29ydGVkRGVmaW5pdGlvbnMgPSBtYWxsb2MoQVJSQVlfU0laRShzb3J0ZWREZWZpbml0aW9ucywgcHJlZmVyZW5jZURlZmluaXRpb25Db3VudCkpKSkgeworICAgICAgbG9nTWFsbG9jRXJyb3IoKTsKKyAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIGZvciAodW5zaWduZWQgaW50IGluZGV4PTA7IGluZGV4PHByZWZlcmVuY2VEZWZpbml0aW9uQ291bnQ7IGluZGV4Kz0xKSB7CisgICAgICBzb3J0ZWREZWZpbml0aW9uc1tpbmRleF0gPSAmcHJlZmVyZW5jZURlZmluaXRpb25UYWJsZVtpbmRleF07CisgICAgfQorCisgICAgcXNvcnQoCisgICAgICBzb3J0ZWREZWZpbml0aW9ucywgcHJlZmVyZW5jZURlZmluaXRpb25Db3VudCwKKyAgICAgIHNpemVvZigqc29ydGVkRGVmaW5pdGlvbnMpLCBzb3J0UHJlZmVyZW5jZURlZmluaXRpb25zCisgICAgKTsKKyAgfQorCisgIHsKKyAgICBjb25zdCBQcmVmZXJlbmNlRGVmaW5pdGlvbiAqY29uc3QgKnByZWYgPSBic2VhcmNoKAorICAgICAgbmFtZSwgc29ydGVkRGVmaW5pdGlvbnMsIHByZWZlcmVuY2VEZWZpbml0aW9uQ291bnQsCisgICAgICBzaXplb2YoKnNvcnRlZERlZmluaXRpb25zKSwgc2VhcmNoUHJlZmVyZW5jZURlZmluaXRpb24KKyAgICApOworCisgICAgaWYgKHByZWYpIHJldHVybiAqcHJlZjsKKyAgfQorCisgIHJldHVybiBOVUxMOworfQorCitzdGF0aWMgaW50Citzb3J0UHJlZmVyZW5jZUFsaWFzZXMgKGNvbnN0IHZvaWQgKmVsZW1lbnQxLCBjb25zdCB2b2lkICplbGVtZW50MikgeworICBjb25zdCBQcmVmZXJlbmNlQWxpYXMgKmNvbnN0ICphbGlhczEgPSBlbGVtZW50MTsKKyAgY29uc3QgUHJlZmVyZW5jZUFsaWFzICpjb25zdCAqYWxpYXMyID0gZWxlbWVudDI7CisgIHJldHVybiBjb21wYXJlUHJlZmVyZW5jZU5hbWVzKCgqYWxpYXMxKS0+b2xkTmFtZSwgKCphbGlhczIpLT5vbGROYW1lKTsKK30KKworc3RhdGljIGludAorc2VhcmNoUHJlZmVyZW5jZUFsaWFzIChjb25zdCB2b2lkICp0YXJnZXQsIGNvbnN0IHZvaWQgKmVsZW1lbnQpIHsKKyAgY29uc3QgY2hhciAqbmFtZSA9IHRhcmdldDsKKyAgY29uc3QgUHJlZmVyZW5jZUFsaWFzICpjb25zdCAqYWxpYXMgPSBlbGVtZW50OworICByZXR1cm4gY29tcGFyZVByZWZlcmVuY2VOYW1lcyhuYW1lLCAoKmFsaWFzKS0+b2xkTmFtZSk7Cit9CisKK3N0YXRpYyBjb25zdCBQcmVmZXJlbmNlQWxpYXMgKgorZmluZFByZWZlcmVuY2VBbGlhcyAoY29uc3QgY2hhciAqbmFtZSkgeworICBzdGF0aWMgY29uc3QgUHJlZmVyZW5jZUFsaWFzICoqc29ydGVkQWxpYXNlcyA9IE5VTEw7CisKKyAgaWYgKCFzb3J0ZWRBbGlhc2VzKSB7CisgICAgaWYgKCEoc29ydGVkQWxpYXNlcyA9IG1hbGxvYyhBUlJBWV9TSVpFKHNvcnRlZEFsaWFzZXMsIHByZWZlcmVuY2VBbGlhc0NvdW50KSkpKSB7CisgICAgICBsb2dNYWxsb2NFcnJvcigpOworICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgZm9yICh1bnNpZ25lZCBpbnQgaW5kZXg9MDsgaW5kZXg8cHJlZmVyZW5jZUFsaWFzQ291bnQ7IGluZGV4Kz0xKSB7CisgICAgICBzb3J0ZWRBbGlhc2VzW2luZGV4XSA9ICZwcmVmZXJlbmNlQWxpYXNUYWJsZVtpbmRleF07CisgICAgfQorCisgICAgcXNvcnQoCisgICAgICBzb3J0ZWRBbGlhc2VzLCBwcmVmZXJlbmNlQWxpYXNDb3VudCwKKyAgICAgIHNpemVvZigqc29ydGVkQWxpYXNlcyksIHNvcnRQcmVmZXJlbmNlQWxpYXNlcworICAgICk7CisgIH0KKworICB7CisgICAgY29uc3QgUHJlZmVyZW5jZUFsaWFzICpjb25zdCAqYWxpYXMgPSBic2VhcmNoKAorICAgICAgbmFtZSwgc29ydGVkQWxpYXNlcywgcHJlZmVyZW5jZUFsaWFzQ291bnQsCisgICAgICBzaXplb2YoKnNvcnRlZEFsaWFzZXMpLCBzZWFyY2hQcmVmZXJlbmNlQWxpYXMKKyAgICApOworCisgICAgaWYgKGFsaWFzKSByZXR1cm4gKmFsaWFzOworICB9CisKKyAgcmV0dXJuIE5VTEw7Cit9CisKK2NvbnN0IFByZWZlcmVuY2VEZWZpbml0aW9uICoKK2ZpbmRQcmVmZXJlbmNlIChjb25zdCBjaGFyICpuYW1lKSB7CisgIHdoaWxlIChuYW1lKSB7CisgICAgeworICAgICAgY29uc3QgUHJlZmVyZW5jZURlZmluaXRpb24gKnByZWYgPSBmaW5kUHJlZmVyZW5jZURlZmluaXRpb24obmFtZSk7CisgICAgICBpZiAocHJlZikgcmV0dXJuIHByZWY7CisgICAgfQorCisgICAgeworICAgICAgY29uc3QgUHJlZmVyZW5jZUFsaWFzICphbGlhcyA9IGZpbmRQcmVmZXJlbmNlQWxpYXMobmFtZSk7CisgICAgICBpZiAoIWFsaWFzKSBicmVhazsKKyAgICAgIG5hbWUgPSBhbGlhcy0+bmV3TmFtZTsKKyAgICB9CisgIH0KKworICBpZiAobmFtZSkgbG9nTWVzc2FnZShMT0dfV0FSTklORywgInVua25vd24gcHJlZmVyZW5jZTogJXMiLCBuYW1lKTsKKyAgcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyB2b2lkCityZXNldFByZWZlcmVuY2UgKGNvbnN0IFByZWZlcmVuY2VEZWZpbml0aW9uICpwcmVmKSB7CisgIGlmIChwcmVmLT5zZXR0aW5nQ291bnQpIHsKKyAgICBtZW1zZXQocHJlZi0+c2V0dGluZywgcHJlZi0+ZGVmYXVsdFZhbHVlLCBwcmVmLT5zZXR0aW5nQ291bnQpOworICB9IGVsc2UgeworICAgICpwcmVmLT5zZXR0aW5nID0gcHJlZi0+ZGVmYXVsdFZhbHVlOworICB9CisKKyAgaWYgKHByZWYtPmVuY291bnRlcmVkKSAqcHJlZi0+ZW5jb3VudGVyZWQgPSAwOworfQorCit2b2lkCityZXNldFByZWZlcmVuY2VzICh2b2lkKSB7CisgIG1lbXNldCgmcHJlZnMsIDAsIHNpemVvZihwcmVmcykpOworCisgIHByZWZzLm1hZ2ljWzBdID0gUFJFRlNfTUFHSUNfTlVNQkVSICYgMFhGRjsKKyAgcHJlZnMubWFnaWNbMV0gPSBQUkVGU19NQUdJQ19OVU1CRVIgPj4gODsKKyAgcHJlZnMudmVyc2lvbiA9IDY7CisKKyAgeworICAgIGNvbnN0IFByZWZlcmVuY2VEZWZpbml0aW9uICpwcmVmID0gcHJlZmVyZW5jZURlZmluaXRpb25UYWJsZTsKKyAgICBjb25zdCBQcmVmZXJlbmNlRGVmaW5pdGlvbiAqZW5kID0gcHJlZiArIHByZWZlcmVuY2VEZWZpbml0aW9uQ291bnQ7CisKKyAgICB3aGlsZSAocHJlZiA8IGVuZCkgcmVzZXRQcmVmZXJlbmNlKHByZWYrKyk7CisgIH0KK30KKworc3RhdGljIGNvbnN0IGNoYXIgKgorZ2V0U2V0dGluZ05hbWUgKGNvbnN0IFByZWZlcmVuY2VEZWZpbml0aW9uICpwcmVmLCB1bnNpZ25lZCBjaGFyIGluZGV4KSB7CisgIGNvbnN0IFByZWZlcmVuY2VTdHJpbmdUYWJsZSAqbmFtZXMgPSBwcmVmLT5zZXR0aW5nTmFtZXM7CisgIGlmICghbmFtZXMpIHJldHVybiBOVUxMOworICBpZiAoaW5kZXggPj0gbmFtZXMtPmNvdW50KSByZXR1cm4gTlVMTDsKKyAgcmV0dXJuIG5hbWVzLT50YWJsZVtpbmRleF07Cit9CisKK3N0YXRpYyBpbnQKK2NoYW5nZVByZWZlcmVuY2VTZXR0aW5nICgKKyAgY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqb3BlcmFuZCwKKyAgdW5zaWduZWQgY2hhciAqc2V0dGluZywgY29uc3QgUHJlZmVyZW5jZVN0cmluZ1RhYmxlICpuYW1lcworKSB7CisgIGlmIChuYW1lcykgeworICAgIGZvciAodW5zaWduZWQgaW50IGluZGV4PTA7IGluZGV4PG5hbWVzLT5jb3VudDsgaW5kZXgrPTEpIHsKKyAgICAgIGNvbnN0IGNoYXIgKm5hbWUgPSBuYW1lcy0+dGFibGVbaW5kZXhdOworICAgICAgaWYgKCFuYW1lKSBjb250aW51ZTsKKworICAgICAgaWYgKHN0cmNtcChvcGVyYW5kLCBuYW1lKSA9PSAwKSB7CisgICAgICAgICpzZXR0aW5nID0gaW5kZXg7CisgICAgICAgIHJldHVybiAxOworICAgICAgfQorICAgIH0KKyAgfQorCisgIHsKKyAgICBpbnQgdmFsdWU7CisKKyAgICBpZiAoaXNJbnRlZ2VyKCZ2YWx1ZSwgb3BlcmFuZCkpIHsKKyAgICAgIHVuc2lnbmVkIGNoYXIgbWF4aW11bSA9IG5hbWVzPyAobmFtZXMtPmNvdW50IC0gMSk6IDBYRkY7CisKKyAgICAgIGlmICgodmFsdWUgPj0gMCkgJiYgKHZhbHVlIDw9IG1heGltdW0pKSB7CisgICAgICAgICpzZXR0aW5nID0gdmFsdWU7CisgICAgICAgIHJldHVybiAxOworICAgICAgfQorICAgIH0KKyAgfQorCisgIGxvZ01lc3NhZ2UoTE9HX1dBUk5JTkcsICJpbnZhbGlkIHByZWZlcmVuY2Ugc2V0dGluZzogJXMgJXMiLCBuYW1lLCBvcGVyYW5kKTsKKyAgcmV0dXJuIDA7Cit9CisKK2ludAorc2V0UHJlZmVyZW5jZSAoY2hhciAqc3RyaW5nKSB7CisgIGNvbnN0IGNoYXIgKm5hbWU7CisKKyAgeworICAgIHN0YXRpYyBjb25zdCBjaGFyIGRlbGltaXRlcnNbXSA9IHsKKyAgICAgICcgJywgJ1x0JywgUEFSQU1FVEVSX0FTU0lHTk1FTlRfQ0hBUkFDVEVSLCAwCisgICAgfTsKKworICAgIG5hbWUgPSBzdHJ0b2soc3RyaW5nLCBkZWxpbWl0ZXJzKTsKKyAgfQorCisgIGlmIChuYW1lKSB7CisgICAgY29uc3QgUHJlZmVyZW5jZURlZmluaXRpb24gKnByZWYgPSBmaW5kUHJlZmVyZW5jZShuYW1lKTsKKworICAgIGlmIChwcmVmKSB7CisgICAgICBpZiAocHJlZi0+ZW5jb3VudGVyZWQpICpwcmVmLT5lbmNvdW50ZXJlZCA9IDE7CisKKyAgICAgIHN0YXRpYyBjb25zdCBjaGFyIGRlbGltaXRlcnNbXSA9ICIgXHQiOworICAgICAgY29uc3QgY2hhciAqb3BlcmFuZDsKKworICAgICAgaWYgKHByZWYtPnNldHRpbmdDb3VudCkgeworICAgICAgICB1bnNpZ25lZCBjaGFyIGNvdW50ID0gcHJlZi0+c2V0dGluZ0NvdW50OworICAgICAgICB1bnNpZ25lZCBjaGFyICpzZXR0aW5nID0gcHJlZi0+c2V0dGluZzsKKworICAgICAgICB3aGlsZSAoY291bnQpIHsKKyAgICAgICAgICBpZiAoKG9wZXJhbmQgPSBzdHJ0b2soTlVMTCwgZGVsaW1pdGVycykpKSB7CisgICAgICAgICAgICBpZiAoY2hhbmdlUHJlZmVyZW5jZVNldHRpbmcobmFtZSwgb3BlcmFuZCwgc2V0dGluZywgcHJlZi0+c2V0dGluZ05hbWVzKSkgeworICAgICAgICAgICAgICBzZXR0aW5nICs9IDE7CisgICAgICAgICAgICAgIGNvdW50IC09IDE7CisgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAgICAgICAgIH0KKworICAgICAgICAgICpzZXR0aW5nID0gMDsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgfSBlbHNlIGlmICghKG9wZXJhbmQgPSBzdHJ0b2soTlVMTCwgZGVsaW1pdGVycykpKSB7CisgICAgICAgIGxvZ01lc3NhZ2UoTE9HX1dBUk5JTkcsICJtaXNzaW5nIHByZWZlcmVuY2Ugc2V0dGluZzogJXMiLCBuYW1lKTsKKyAgICAgIH0gZWxzZSBpZiAoIWNoYW5nZVByZWZlcmVuY2VTZXR0aW5nKG5hbWUsIG9wZXJhbmQsIHByZWYtPnNldHRpbmcsIHByZWYtPnNldHRpbmdOYW1lcykpIHsKKyAgICAgIH0KKyAgICB9CisgIH0gZWxzZSB7CisgICAgbG9nTWVzc2FnZShMT0dfV0FSTklORywgIm1pc3NpbmcgcHJlZmVyZW5jZSBuYW1lIik7CisgIH0KKworICByZXR1cm4gMTsKK30KKworY2hhciAqCittYWtlUHJlZmVyZW5jZXNGaWxlUGF0aCAoY29uc3QgY2hhciAqbmFtZSkgeworICBpZiAoIW5hbWUpIG5hbWUgPSBQUkVGRVJFTkNFU19GSUxFOworICByZXR1cm4gbWFrZVVwZGF0YWJsZVBhdGgobmFtZSk7Cit9CisKK3N0YXRpYyBpbnQKK3Byb2Nlc3NQcmVmZXJlbmNlTGluZSAoY29uc3QgTGluZUhhbmRsZXJQYXJhbWV0ZXJzICpwYXJhbWV0ZXJzKSB7CisgIGNoYXIgKmxpbmUgPSBwYXJhbWV0ZXJzLT5saW5lLnRleHQ7CisgIHdoaWxlIChpc3NwYWNlKCpsaW5lKSkgbGluZSArPSAxOworICBpZiAoISpsaW5lKSByZXR1cm4gMTsKKyAgaWYgKCpsaW5lID09IFBSRUZTX0NPTU1FTlRfQ0hBUkFDVEVSKSByZXR1cm4gMTsKKyAgcmV0dXJuIHNldFByZWZlcmVuY2UobGluZSk7Cit9CisKK2ludAorbG9hZFByZWZlcmVuY2VzRmlsZSAoY29uc3QgY2hhciAqcGF0aCkgeworICBpbnQgb2sgPSAwOworCisgIGxvZ01lc3NhZ2UoTE9HX0RFQlVHLCAibG9hZGluZyBwcmVmZXJlbmNlcyBmaWxlOiAlcyIsIHBhdGgpOworICBGSUxFICpmaWxlID0gb3BlbkRhdGFGaWxlKHBhdGgsICJyYiIsIDEpOworCisgIGlmIChmaWxlKSB7CisgICAgUHJlZmVyZW5jZVNldHRpbmdzIG5ld1ByZWZlcmVuY2VzOworICAgIHNpemVfdCBsZW5ndGggPSBmcmVhZCgmbmV3UHJlZmVyZW5jZXMsIDEsIHNpemVvZihuZXdQcmVmZXJlbmNlcyksIGZpbGUpOworCisgICAgaWYgKGZlcnJvcihmaWxlKSkgeworICAgICAgbG9nTWVzc2FnZShMT0dfRVJSLCAiJXM6ICVzOiAlcyIsCisgICAgICAgICAgICAgICAgIGdldHRleHQoImNhbm5vdCByZWFkIHByZWZlcmVuY2VzIGZpbGUiKSwgcGF0aCwgc3RyZXJyb3IoZXJybm8pKTsKKyAgICB9IGVsc2UgaWYgKChsZW5ndGggPCA0MCkgfHwKKyAgICAgICAgICAgICAgIChuZXdQcmVmZXJlbmNlcy5tYWdpY1swXSAhPSAoUFJFRlNfTUFHSUNfTlVNQkVSICYgMFhGRikpIHx8CisgICAgICAgICAgICAgICAobmV3UHJlZmVyZW5jZXMubWFnaWNbMV0gIT0gKFBSRUZTX01BR0lDX05VTUJFUiA+PiA4KSkpIHsKKyAgICAgIGZjbG9zZShmaWxlKTsKKworICAgICAgaWYgKChmaWxlID0gb3BlbkRhdGFGaWxlKHBhdGgsICJyIiwgMSkpKSB7CisgICAgICAgIHJlc2V0UHJlZmVyZW5jZXMoKTsKKyAgICAgICAgaWYgKHByb2Nlc3NMaW5lcyhmaWxlLCBwcm9jZXNzUHJlZmVyZW5jZUxpbmUsIE5VTEwpKSBvayA9IDE7CisgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgIHByZWZzID0gbmV3UHJlZmVyZW5jZXM7CisgICAgICBvayA9IDE7CisKKyAgICAgIHsKKyAgICAgICAgY29uc3QgUHJlZmVyZW5jZURlZmluaXRpb24gKnByZWYgPSBwcmVmZXJlbmNlRGVmaW5pdGlvblRhYmxlOworICAgICAgICBjb25zdCBQcmVmZXJlbmNlRGVmaW5pdGlvbiAqZW5kID0gcHJlZiArIHByZWZlcmVuY2VEZWZpbml0aW9uQ291bnQ7CisKKyAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqZnJvbSA9IHByZWZzLm1hZ2ljOworICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICp0byA9IGZyb20gKyBsZW5ndGg7CisKKyAgICAgICAgd2hpbGUgKHByZWYgPCBlbmQpIHsKKyAgICAgICAgICB1bnNpZ25lZCBjaGFyIGNvdW50ID0gcHJlZi0+c2V0dGluZ0NvdW50OworICAgICAgICAgIGlmICghY291bnQpIGNvdW50ID0gMTsKKworICAgICAgICAgIGlmICgocHJlZi0+c2V0dGluZyA8IGZyb20pIHx8ICgocHJlZi0+c2V0dGluZyArIGNvdW50KSA+IHRvKSkgeworICAgICAgICAgICAgcmVzZXRQcmVmZXJlbmNlKHByZWYpOworICAgICAgICAgIH0KKworICAgICAgICAgIHByZWYgKz0gMTsKKyAgICAgICAgfQorICAgICAgfQorCisgICAgICBpZiAobGVuZ3RoIDwgKHByZWZzLnN0YXR1c0ZpZWxkcyArIHNpemVvZihwcmVmcy5zdGF0dXNGaWVsZHMpIC0gcHJlZnMubWFnaWMpKSB7CisgICAgICAgIHNldFN0YXR1c1N0eWxlKHByZWZzLmV4cGFuZEN1cnJlbnRXb3JkKTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIHN0YXR1c0ZpZWxkc1NldCA9IDE7CisgICAgICB9CisKKyAgICAgIGlmIChwcmVmcy52ZXJzaW9uID09IDApIHsKKyAgICAgICAgcHJlZnMudmVyc2lvbiArPSAxOworICAgICAgICBwcmVmcy5wY21Wb2x1bWUgPSBERUZBVUxUX1BDTV9WT0xVTUU7CisgICAgICAgIHByZWZzLm1pZGlWb2x1bWUgPSBERUZBVUxUX01JRElfVk9MVU1FOworICAgICAgICBwcmVmcy5mbVZvbHVtZSA9IERFRkFVTFRfRk1fVk9MVU1FOworICAgICAgfQorCisgICAgICBpZiAocHJlZnMudmVyc2lvbiA9PSAxKSB7CisgICAgICAgIHByZWZzLnZlcnNpb24gKz0gMTsKKyAgICAgICAgcHJlZnMuc2F5TGluZU1vZGUgPSBERUZBVUxUX1NBWV9MSU5FX01PREU7CisgICAgICAgIHByZWZzLmF1dG9zcGVhayA9IERFRkFVTFRfQVVUT1NQRUFLOworICAgICAgfQorCisgICAgICBpZiAocHJlZnMudmVyc2lvbiA9PSAyKSB7CisgICAgICAgIHByZWZzLnZlcnNpb24gKz0gMTsKKyAgICAgICAgcHJlZnMuYXV0b3JlcGVhdEVuYWJsZWQgPSBERUZBVUxUX0FVVE9SRVBFQVRfRU5BQkxFRDsKKyAgICAgICAgcHJlZnMubG9uZ1ByZXNzVGltZSA9IERFRkFVTFRfTE9OR19QUkVTU19USU1FOworICAgICAgICBwcmVmcy5hdXRvcmVwZWF0SW50ZXJ2YWwgPSBERUZBVUxUX0FVVE9SRVBFQVRfSU5URVJWQUw7CisgICAgICAgIHByZWZzLnNjcmVlbkN1cnNvclZpc2libGVUaW1lICo9IDQ7CisgICAgICAgIHByZWZzLnNjcmVlbkN1cnNvckludmlzaWJsZVRpbWUgKj0gNDsKKyAgICAgICAgcHJlZnMuYXR0cmlidXRlc1Zpc2libGVUaW1lICo9IDQ7CisgICAgICAgIHByZWZzLmF0dHJpYnV0ZXNJbnZpc2libGVUaW1lICo9IDQ7CisgICAgICAgIHByZWZzLmNhcGl0YWxzVmlzaWJsZVRpbWUgKj0gNDsKKyAgICAgICAgcHJlZnMuY2FwaXRhbHNJbnZpc2libGVUaW1lICo9IDQ7CisgICAgICB9CisKKyAgICAgIGlmIChwcmVmcy52ZXJzaW9uID09IDMpIHsKKyAgICAgICAgcHJlZnMudmVyc2lvbiArPSAxOworICAgICAgICBwcmVmcy5hdXRvcmVwZWF0UGFubmluZyA9IERFRkFVTFRfQVVUT1JFUEVBVF9QQU5OSU5HOworICAgICAgfQorCisgICAgICBpZiAocHJlZnMudmVyc2lvbiA9PSA0KSB7CisgICAgICAgIHByZWZzLnZlcnNpb24gKz0gMTsKKyAgICAgICAgcHJlZnMudG91Y2hTZW5zaXRpdml0eSA9IERFRkFVTFRfVE9VQ0hfU0VOU0lUSVZJVFk7CisgICAgICB9CisKKyAgICAgIGlmIChwcmVmcy52ZXJzaW9uID09IDUpIHsKKyAgICAgICAgcHJlZnMudmVyc2lvbiArPSAxOworICAgICAgICBwcmVmcy5leHBhbmRDdXJyZW50V29yZCA9IERFRkFVTFRfRVhQQU5EX0NVUlJFTlRfV09SRDsKKyAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoZmlsZSkgeworICAgICAgZmNsb3NlKGZpbGUpOworICAgICAgZmlsZSA9IE5VTEw7CisgICAgfQorICB9CisKKyAgcmV0dXJuIG9rOworfQorCitzdGF0aWMgaW50CitwdXRQcmVmZXJlbmNlQ29tbWVudCAoRklMRSAqZmlsZSwgY29uc3QgUHJlZmVyZW5jZURlZmluaXRpb24gKnByZWYpIHsKKyAgaWYgKGZwcmludGYoZmlsZSwgIlxuJWMgJXMiLCBQUkVGU19DT01NRU5UX0NIQVJBQ1RFUiwgcHJlZi0+bmFtZSkgPCAwKSByZXR1cm4gMDsKKworICBpZiAocHJlZi0+c2V0dGluZ0NvdW50KSB7CisgICAgaWYgKGZwcmludGYoZmlsZSwgIlsldV0iLCBwcmVmLT5zZXR0aW5nQ291bnQpIDwgMCkgcmV0dXJuIDA7CisgIH0KKworICBpZiAoZnB1dHMoIjogIiwgZmlsZSkgPT0gRU9GKSByZXR1cm4gMDsKKyAgY29uc3QgY2hhciAqbmFtZSA9IGdldFNldHRpbmdOYW1lKHByZWYsIHByZWYtPmRlZmF1bHRWYWx1ZSk7CisKKyAgaWYgKG5hbWUpIHsKKyAgICBpZiAoZnB1dHMobmFtZSwgZmlsZSkgPT0gRU9GKSByZXR1cm4gMDsKKyAgfSBlbHNlIHsKKyAgICBpZiAoZnByaW50ZihmaWxlLCAiJXUiLCBwcmVmLT5kZWZhdWx0VmFsdWUpIDwgMCkgcmV0dXJuIDA7CisgIH0KKworICBpZiAocHJlZi0+c2V0dGluZ05hbWVzKSB7CisgICAgaWYgKGZwdXRzKCIgeyIsIGZpbGUpID09IEVPRikgcmV0dXJuIDA7CisKKyAgICB1bnNpZ25lZCBjaGFyIGNvdW50ID0gcHJlZi0+c2V0dGluZ05hbWVzLT5jb3VudDsKKyAgICBpbnQgZmlyc3QgPSAxOworCisgICAgZm9yICh1bnNpZ25lZCBjaGFyIGluZGV4PTA7IGluZGV4PGNvdW50OyBpbmRleCs9MSkgeworICAgICAgY29uc3QgY2hhciAqbmFtZSA9IGdldFNldHRpbmdOYW1lKHByZWYsIGluZGV4KTsKKyAgICAgIGlmIChuYW1lKSB7CisgICAgICAgIGlmIChmaXJzdCkgeworICAgICAgICAgIGZpcnN0ID0gMDsKKyAgICAgICAgfSBlbHNlIGlmIChmcHV0YygnICcsIGZpbGUpID09IEVPRikgeworICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGZwdXRzKG5hbWUsIGZpbGUpID09IEVPRikgcmV0dXJuIDA7CisgICAgICB9IGVsc2UgeworICAgICAgICBsb2dNZXNzYWdlKExPR19XQVJOSU5HLAorICAgICAgICAgICJ1bm5hbWVkIHByZWZlcmVuY2Ugc2V0dGluZzogJXM6ICV1IiwKKyAgICAgICAgICBwcmVmLT5uYW1lLCBpbmRleAorICAgICAgICApOworICAgICAgfQorICAgIH0KKworICAgIGlmIChmcHV0YygnfScsIGZpbGUpID09IEVPRikgcmV0dXJuIDA7CisgIH0KKworICBpZiAoZnB1dGMoJ1xuJywgZmlsZSkgPT0gRU9GKSByZXR1cm4gMDsKKyAgcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQKK3B1dFNldHRpbmcgKEZJTEUgKmZpbGUsIGNvbnN0IFByZWZlcmVuY2VEZWZpbml0aW9uICpwcmVmLCB1bnNpZ25lZCBjaGFyIHNldHRpbmcpIHsKKyAgaWYgKGZwdXRjKCcgJywgZmlsZSkgPT0gRU9GKSByZXR1cm4gMDsKKyAgY29uc3QgY2hhciAqbmFtZSA9IGdldFNldHRpbmdOYW1lKHByZWYsIHNldHRpbmcpOworCisgIGlmIChuYW1lKSB7CisgICAgaWYgKGZwdXRzKG5hbWUsIGZpbGUpID09IEVPRikgcmV0dXJuIDA7CisgIH0gZWxzZSB7CisgICAgaWYgKGZwcmludGYoZmlsZSwgIiV1Iiwgc2V0dGluZykgPCAwKSByZXR1cm4gMDsKKyAgfQorCisgIHJldHVybiAxOworfQorCitzdGF0aWMgaW50CitwdXRQcmVmZXJlbmNlIChGSUxFICpmaWxlLCBjb25zdCBQcmVmZXJlbmNlRGVmaW5pdGlvbiAqcHJlZikgeworICBpZiAocHJlZi0+ZG9udFNhdmUpIHJldHVybiAxOworCisgIGlmICghcHV0UHJlZmVyZW5jZUNvbW1lbnQoZmlsZSwgcHJlZikpIHJldHVybiAwOworICBpZiAoZnB1dHMocHJlZi0+bmFtZSwgZmlsZSkgPT0gRU9GKSByZXR1cm4gMDsKKworICBpZiAocHJlZi0+c2V0dGluZ0NvdW50KSB7CisgICAgdW5zaWduZWQgY2hhciBjb3VudCA9IHByZWYtPnNldHRpbmdDb3VudDsKKyAgICB1bnNpZ25lZCBjaGFyICpzZXR0aW5nID0gcHJlZi0+c2V0dGluZzsKKworICAgIHdoaWxlIChjb3VudC0tICYmICpzZXR0aW5nKSB7CisgICAgICBpZiAoIXB1dFNldHRpbmcoZmlsZSwgcHJlZiwgKnNldHRpbmcrKykpIHJldHVybiAwOworICAgIH0KKyAgfSBlbHNlIGlmICghcHV0U2V0dGluZyhmaWxlLCBwcmVmLCAqcHJlZi0+c2V0dGluZykpIHsKKyAgICByZXR1cm4gMDsKKyAgfQorCisgIGlmIChmcHV0cygiXG4iLCBmaWxlKSA9PSBFT0YpIHJldHVybiAwOworICByZXR1cm4gMTsKK30KKworc3RhdGljIGludAorcHV0UHJlZmVyZW5jZXMgKEZJTEUgKmZpbGUpIHsKKyAgY29uc3QgUHJlZmVyZW5jZURlZmluaXRpb24gKnByZWYgPSBwcmVmZXJlbmNlRGVmaW5pdGlvblRhYmxlOworICBjb25zdCBQcmVmZXJlbmNlRGVmaW5pdGlvbiAqY29uc3QgZW5kID0gcHJlZiArIHByZWZlcmVuY2VEZWZpbml0aW9uQ291bnQ7CisKKyAgd2hpbGUgKHByZWYgPCBlbmQpIHsKKyAgICBpZiAoIXB1dFByZWZlcmVuY2UoZmlsZSwgcHJlZikpIHJldHVybiAwOworICAgIHByZWYgKz0gMTsKKyAgfQorCisgIHJldHVybiAxOworfQorCitzdGF0aWMgaW50CitwdXRIZWFkZXIgKEZJTEUgKmZpbGUpIHsKKyAgZnByaW50ZihmaWxlLAorICAgICIlYyAlcyBQcmVmZXJlbmNlcyBGaWxlXG4iLAorICAgIFBSRUZTX0NPTU1FTlRfQ0hBUkFDVEVSLCBQQUNLQUdFX05BTUUKKyAgKTsKKworICByZXR1cm4gIWZlcnJvcihmaWxlKTsKK30KKworaW50CitzYXZlUHJlZmVyZW5jZXNGaWxlIChjb25zdCBjaGFyICpwYXRoKSB7CisgIGludCBvayA9IDA7CisgIEZJTEUgKmZpbGUgPSBvcGVuRGF0YUZpbGUocGF0aCwgInciLCAwKTsKKworICBpZiAoZmlsZSkgeworICAgIGlmIChwdXRIZWFkZXIoZmlsZSkpIHsKKyAgICAgIGlmIChwdXRQcmVmZXJlbmNlcyhmaWxlKSkgeworICAgICAgICBvayA9IDE7CisgICAgICB9CisgICAgfQorCisgICAgaWYgKCFvaykgeworICAgICAgaWYgKCFmZXJyb3IoZmlsZSkpIGVycm5vID0gRUlPOworICAgICAgbG9nTWVzc2FnZShMT0dfRVJSLAorICAgICAgICAiJXM6ICVzOiAlcyIsCisgICAgICAgIGdldHRleHQoImNhbm5vdCB3cml0ZSB0byBwcmVmZXJlbmNlcyBmaWxlIiksCisgICAgICAgIHBhdGgsIHN0cmVycm9yKGVycm5vKQorICAgICAgKTsKKyAgICB9CisKKyAgICBmY2xvc2UoZmlsZSk7CisgIH0KKworICByZXR1cm4gb2s7Cit9CmRpZmYgLS1naXQgYS9Qcm9ncmFtcy9wcm9maWxlLmMgYi9Qcm9ncmFtcy9wcm9maWxlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjIzZDk5OQotLS0gL2Rldi9udWxsCisrKyBiL1Byb2dyYW1zL3Byb2ZpbGUuYwpAQCAtMCwwICsxLDE4OSBAQAorLyoKKyAqIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisgKiAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisgKgorICogQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKKyNpbmNsdWRlICJwcm9sb2d1ZS5oIgorCisjaW5jbHVkZSAibG9nLmgiCisjaW5jbHVkZSAicHJvZmlsZS5oIgorI2luY2x1ZGUgImRhdGFmaWxlLmgiCisjaW5jbHVkZSAiZmlsZS5oIgorI2luY2x1ZGUgInV0ZjguaCIKKwordHlwZWRlZiBzdHJ1Y3QgeworICBjb25zdCBQcm9maWxlRGVzY3JpcHRvciAqcHJvZmlsZTsKKyAgY2hhciAqKnZhbHVlczsKK30gUHJvZmlsZUFjdGl2YXRpb25EYXRhOworCitzdGF0aWMgaW50Citwcm9jZXNzUHJvcGVydHlBc3NpZ25tZW50ICgKKyAgRGF0YUZpbGUgKmZpbGUsCisgIGNvbnN0IERhdGFTdHJpbmcgKm5hbWUsCisgIGNoYXIgKip2YWx1ZSwKKyAgY29uc3QgUHJvZmlsZUFjdGl2YXRpb25EYXRhICpwYWQKKykgeworICB1bnNpZ25lZCBpbnQgaW5kZXg7CisKKyAgZm9yIChpbmRleD0wOyBpbmRleDxwYWQtPnByb2ZpbGUtPnByb3BlcnRpZXMuY291bnQ7IGluZGV4Kz0xKSB7CisgICAgaWYgKGlzS2V5d29yZChwYWQtPnByb2ZpbGUtPnByb3BlcnRpZXMuYXJyYXlbaW5kZXhdLm5hbWUsIG5hbWUtPmNoYXJhY3RlcnMsIG5hbWUtPmxlbmd0aCkpIHsKKyAgICAgIGNoYXIgKip2ID0gJnBhZC0+dmFsdWVzW2luZGV4XTsKKworICAgICAgaWYgKCp2KSB7CisgICAgICAgIHJlcG9ydERhdGFFcnJvcihmaWxlLCAicHJvcGVydHkgYXNzaWduZWQgbW9yZSB0aGFuIG9uY2U6ICVzOiUuKiJQUkl3cywKKyAgICAgICAgICAgICAgICAgICAgICAgIHBhZC0+cHJvZmlsZS0+Y2F0ZWdvcnksIG5hbWUtPmxlbmd0aCwgbmFtZS0+Y2hhcmFjdGVycyk7CisgICAgICAgIGZyZWUoKnYpOworICAgICAgfQorCisgICAgICAqdiA9ICp2YWx1ZTsKKyAgICAgICp2YWx1ZSA9IE5VTEw7CisgICAgICByZXR1cm4gMTsKKyAgICB9CisgIH0KKworICByZXBvcnREYXRhRXJyb3IoZmlsZSwgInVua25vd24gcHJvcGVydHk6ICVzOiUuKiJQUkl3cywKKyAgICAgICAgICAgICAgICAgIHBhZC0+cHJvZmlsZS0+Y2F0ZWdvcnksIG5hbWUtPmxlbmd0aCwgbmFtZS0+Y2hhcmFjdGVycyk7CisgIHJldHVybiAxOworfQorCitzdGF0aWMgREFUQV9PUEVSQU5EU19QUk9DRVNTT1IocHJvY2Vzc1Byb3BlcnR5T3BlcmFuZHMpIHsKKyAgY29uc3QgUHJvZmlsZUFjdGl2YXRpb25EYXRhICpwYWQgPSBkYXRhOworICBpbnQgb2sgPSAxOworICBEYXRhU3RyaW5nIG5hbWU7CisKKyAgaWYgKGdldERhdGFTdHJpbmcoZmlsZSwgJm5hbWUsIDAsICJwcm9wZXJ0eSBuYW1lIikpIHsKKyAgICBEYXRhU3RyaW5nIHZhbHVlOworCisgICAgaWYgKGdldERhdGFTdHJpbmcoZmlsZSwgJnZhbHVlLCAwLCAicHJvcGVydHkgdmFsdWUiKSkgeworICAgICAgY2hhciAqdiA9IGdldFV0ZjhGcm9tV2NoYXJzKHZhbHVlLmNoYXJhY3RlcnMsIHZhbHVlLmxlbmd0aCwgTlVMTCk7CisKKyAgICAgIGlmICh2KSB7CisgICAgICAgIGlmICghcHJvY2Vzc1Byb3BlcnR5QXNzaWdubWVudChmaWxlLCAmbmFtZSwgJnYsIHBhZCkpIG9rID0gMDsKKyAgICAgICAgaWYgKHYpIGZyZWUodik7CisgICAgICB9IGVsc2UgeworICAgICAgICBvayA9IDA7CisgICAgICB9CisgICAgfQorICB9CisKKyAgcmV0dXJuIG9rOworfQorCitzdGF0aWMgREFUQV9PUEVSQU5EU19QUk9DRVNTT1IocHJvY2Vzc1Byb2ZpbGVPcGVyYW5kcykgeworICBCRUdJTl9EQVRBX0RJUkVDVElWRV9UQUJMRQorICAgIERBVEFfTkVTVElOR19ESVJFQ1RJVkVTLAorICAgIERBVEFfVkFSSUFCTEVfRElSRUNUSVZFUywKKyAgICBEQVRBX0NPTkRJVElPTl9ESVJFQ1RJVkVTLAorICAgIHsubmFtZT1OVUxMLCAucHJvY2Vzc29yPXByb2Nlc3NQcm9wZXJ0eU9wZXJhbmRzfSwKKyAgRU5EX0RBVEFfRElSRUNUSVZFX1RBQkxFCisKKyAgcmV0dXJuIHByb2Nlc3NEaXJlY3RpdmVPcGVyYW5kKGZpbGUsICZkaXJlY3RpdmVzLCAicHJvZmlsZSBkaXJlY3RpdmUiLCBkYXRhKTsKK30KKworY2hhciAqCittYWtlUHJvZmlsZVBhdGggKGNvbnN0IFByb2ZpbGVEZXNjcmlwdG9yICpwcm9maWxlLCBjb25zdCBjaGFyICpkaXJlY3RvcnksIGNvbnN0IGNoYXIgKm5hbWUpIHsKKyAgY2hhciAqc3ViZGlyZWN0b3J5ID0gbWFrZVBhdGgoZGlyZWN0b3J5LCBQUk9GSUxFU19TVUJESVJFQ1RPUlkpOworCisgIGlmIChzdWJkaXJlY3RvcnkpIHsKKyAgICBjaGFyICpmaWxlID0gbWFrZUZpbGVQYXRoKHN1YmRpcmVjdG9yeSwgbmFtZSwgcHJvZmlsZS0+ZXh0ZW5zaW9uKTsKKworICAgIGZyZWUoc3ViZGlyZWN0b3J5KTsKKyAgICBpZiAoZmlsZSkgcmV0dXJuIGZpbGU7CisgIH0KKworICByZXR1cm4gTlVMTDsKK30KKworc3RhdGljIGludAorY2hhbmdlUHJvcGVydHkgKGNvbnN0IFByb2ZpbGVQcm9wZXJ0eSAqcHJvcGVydHksIGNvbnN0IGNoYXIgKnZhbHVlKSB7CisgIGlmIChwcm9wZXJ0eS0+Y2hhbmdlKSB7CisgICAgaWYgKCF2YWx1ZSkgdmFsdWUgPSAqcHJvcGVydHktPmRlZmF1bHRWYWx1ZTsKKworICAgIGlmIChwcm9wZXJ0eS0+Y2hhbmdlKHZhbHVlKSkgeworICAgICAgcmV0dXJuIDE7CisgICAgfQorICB9CisKKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK2NoYW5nZVByb3BlcnRpZXMgKGNvbnN0IFByb2ZpbGVEZXNjcmlwdG9yICpwcm9maWxlLCBjaGFyICoqdmFsdWVzKSB7CisgIGludCBvayA9ICFwcm9maWxlLT5iZWdpbiB8fCBwcm9maWxlLT5iZWdpbigpOworCisgIGlmIChvaykgeworICAgIGNvbnN0IFByb2ZpbGVQcm9wZXJ0eSAqY29uc3Qgc3RhcnQgPSBwcm9maWxlLT5wcm9wZXJ0aWVzLmFycmF5OworICAgIGNvbnN0IFByb2ZpbGVQcm9wZXJ0eSAqY29uc3QgZW5kID0gc3RhcnQgKyBwcm9maWxlLT5wcm9wZXJ0aWVzLmNvdW50OworICAgIGNvbnN0IFByb2ZpbGVQcm9wZXJ0eSAqcHJvcGVydHkgPSBzdGFydDsKKworICAgIHdoaWxlIChwcm9wZXJ0eSA8IGVuZCkgeworICAgICAgY2hhciAqdmFsdWUgPSB2YWx1ZXM/IHZhbHVlc1twcm9wZXJ0eSAtIHN0YXJ0XTogTlVMTDsKKworICAgICAgaWYgKCFjaGFuZ2VQcm9wZXJ0eShwcm9wZXJ0eSwgdmFsdWUpKSBvayA9IDA7CisgICAgICBpZiAodmFsdWUpIGZyZWUodmFsdWUpOworICAgICAgcHJvcGVydHkgKz0gMTsKKyAgICB9CisKKyAgICBpZiAocHJvZmlsZS0+ZW5kICYmICFwcm9maWxlLT5lbmQoKSkgb2sgPSAwOworICB9CisKKyAgcmV0dXJuIG9rOworfQorCitpbnQKK2FjdGl2YXRlUHJvZmlsZSAoY29uc3QgUHJvZmlsZURlc2NyaXB0b3IgKnByb2ZpbGUsIGNvbnN0IGNoYXIgKmRpcmVjdG9yeSwgY29uc3QgY2hhciAqbmFtZSkgeworICBpbnQgb2sgPSAwOworCisgIGlmIChzZXRCYXNlRGF0YVZhcmlhYmxlcyhOVUxMKSkgeworICAgIGNoYXIgKnBhdGg7CisKKyAgICBpZiAoKHBhdGggPSBtYWtlUHJvZmlsZVBhdGgocHJvZmlsZSwgZGlyZWN0b3J5LCBuYW1lKSkpIHsKKyAgICAgIFByb2ZpbGVBY3RpdmF0aW9uRGF0YSBwYWQgPSB7CisgICAgICAgIC5wcm9maWxlID0gcHJvZmlsZQorICAgICAgfTsKKworICAgICAgaWYgKChwYWQudmFsdWVzID0gbWFsbG9jKEFSUkFZX1NJWkUocGFkLnZhbHVlcywgcHJvZmlsZS0+cHJvcGVydGllcy5jb3VudCkpKSkgeworICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpbmRleD0wOyBpbmRleDxwcm9maWxlLT5wcm9wZXJ0aWVzLmNvdW50OyBpbmRleCs9MSkgeworICAgICAgICAgIHBhZC52YWx1ZXNbaW5kZXhdID0gTlVMTDsKKyAgICAgICAgfQorCisgICAgICAgIGNvbnN0IERhdGFGaWxlUGFyYW1ldGVycyBwYXJhbWV0ZXJzID0geworICAgICAgICAgIC5wcm9jZXNzT3BlcmFuZHMgPSBwcm9jZXNzUHJvZmlsZU9wZXJhbmRzLAorICAgICAgICAgIC5kYXRhID0gJnBhZAorICAgICAgICB9OworCisgICAgICAgIGlmIChwcm9jZXNzRGF0YUZpbGUocGF0aCwgJnBhcmFtZXRlcnMpKSB7CisgICAgICAgICAgaWYgKGNoYW5nZVByb3BlcnRpZXMocHJvZmlsZSwgcGFkLnZhbHVlcykpIHsKKyAgICAgICAgICAgIG9rID0gMTsKKyAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBmcmVlKHBhZC52YWx1ZXMpOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgbG9nTWFsbG9jRXJyb3IoKTsKKyAgICAgIH0KKworICAgICAgZnJlZShwYXRoKTsKKyAgICB9CisgIH0KKworICByZXR1cm4gb2s7Cit9CisKK2ludAorZGVhY3RpdmF0ZVByb2ZpbGUgKGNvbnN0IFByb2ZpbGVEZXNjcmlwdG9yICpwcm9maWxlKSB7CisgIHJldHVybiBjaGFuZ2VQcm9wZXJ0aWVzKHByb2ZpbGUsIE5VTEwpOworfQpkaWZmIC0tZ2l0IGEvUHJvZ3JhbXMvcHJvZmlsZS5oIGIvUHJvZ3JhbXMvcHJvZmlsZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhiNjZhMzYKLS0tIC9kZXYvbnVsbAorKysgYi9Qcm9ncmFtcy9wcm9maWxlLmgKQEAgLTAsMCArMSwzNiBAQAorLyoKKyAqIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisgKiAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisgKgorICogQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKKyNpZm5kZWYgQlJMVFRZX0lOQ0xVREVEX1BST0ZJTEUKKyNkZWZpbmUgQlJMVFRZX0lOQ0xVREVEX1BST0ZJTEUKKworI2luY2x1ZGUgInByb2ZpbGVfdHlwZXMuaCIKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZiAvKiBfX2NwbHVzcGx1cyAqLworCitleHRlcm4gY2hhciAqbWFrZVByb2ZpbGVQYXRoIChjb25zdCBQcm9maWxlRGVzY3JpcHRvciAqcHJvZmlsZSwgY29uc3QgY2hhciAqZGlyZWN0b3J5LCBjb25zdCBjaGFyICpuYW1lKTsKK2V4dGVybiBpbnQgYWN0aXZhdGVQcm9maWxlIChjb25zdCBQcm9maWxlRGVzY3JpcHRvciAqcHJvZmlsZSwgY29uc3QgY2hhciAqZGlyZWN0b3J5LCBjb25zdCBjaGFyICpuYW1lKTsKK2V4dGVybiBpbnQgZGVhY3RpdmF0ZVByb2ZpbGUgKGNvbnN0IFByb2ZpbGVEZXNjcmlwdG9yICpwcm9maWxlKTsKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYgLyogX19jcGx1c3BsdXMgKi8KKworI2VuZGlmIC8qIEJSTFRUWV9JTkNMVURFRF9QUk9GSUxFICovCmRpZmYgLS1naXQgYS9Qcm9ncmFtcy9wcm9maWxlX3R5cGVzLmggYi9Qcm9ncmFtcy9wcm9maWxlX3R5cGVzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGIwZWZiZgotLS0gL2Rldi9udWxsCisrKyBiL1Byb2dyYW1zL3Byb2ZpbGVfdHlwZXMuaApAQCAtMCwwICsxLDQ5IEBACisvKgorICogQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyAqICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyAqCisgKiBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorICoKKyAqIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyAqCisgKiBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisgKi8KKworI2lmbmRlZiBCUkxUVFlfSU5DTFVERURfUFJPRklMRV9UWVBFUworI2RlZmluZSBCUkxUVFlfSU5DTFVERURfUFJPRklMRV9UWVBFUworCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmIC8qIF9fY3BsdXNwbHVzICovCisKK3R5cGVkZWYgc3RydWN0IHsKKyAgY29uc3Qgd2NoYXJfdCAqbmFtZTsKKyAgY2hhciAqKmRlZmF1bHRWYWx1ZTsKKyAgaW50ICgqY2hhbmdlKSAoY29uc3QgY2hhciAqdmFsdWUpOworfSBQcm9maWxlUHJvcGVydHk7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgY29uc3QgY2hhciAqY2F0ZWdvcnk7CisgIGNvbnN0IGNoYXIgKmV4dGVuc2lvbjsKKworICBpbnQgKCpiZWdpbikgKHZvaWQpOworICBpbnQgKCplbmQpICh2b2lkKTsKKworICBzdHJ1Y3QgeworICAgIGNvbnN0IFByb2ZpbGVQcm9wZXJ0eSAqYXJyYXk7CisgICAgdW5zaWduZWQgaW50IGNvdW50OworICB9IHByb3BlcnRpZXM7Cit9IFByb2ZpbGVEZXNjcmlwdG9yOworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZiAvKiBfX2NwbHVzcGx1cyAqLworCisjZW5kaWYgLyogQlJMVFRZX0lOQ0xVREVEX1BST0ZJTEVfVFlQRVMgKi8KZGlmZiAtLWdpdCBhL1Byb2dyYW1zL3Byb2dyYW0uYyBiL1Byb2dyYW1zL3Byb2dyYW0uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MjdmZGRiCi0tLSAvZGV2L251bGwKKysrIGIvUHJvZ3JhbXMvcHJvZ3JhbS5jCkBAIC0wLDAgKzEsNDA0IEBACisvKgorICogQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyAqICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyAqCisgKiBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorICoKKyAqIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyAqCisgKiBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisgKi8KKworI2luY2x1ZGUgInByb2xvZ3VlLmgiCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPGN0eXBlLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxsb2NhbGUuaD4KKyNpbmNsdWRlIDxmY250bC5oPgorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisjaW5jbHVkZSA8bGltaXRzLmg+CisKKyNpbmNsdWRlICJwcm9ncmFtLmgiCisjaW5jbHVkZSAibWVzc2FnZXMuaCIKKyNpbmNsdWRlICJwZ21wYXRoLmgiCisjaW5jbHVkZSAicGlkLmgiCisjaW5jbHVkZSAibG9nLmgiCisjaW5jbHVkZSAiZmlsZS5oIgorI2luY2x1ZGUgInBhcnNlLmgiCisjaW5jbHVkZSAic3lzdGVtLmgiCisKK2NvbnN0IGNoYXIgc3RhbmRhcmRTdHJlYW1Bcmd1bWVudFtdID0gIi0iOworY29uc3QgY2hhciBzdGFuZGFyZElucHV0TmFtZVtdID0gIjxzdGFuZGFyZC1pbnB1dD4iOworY29uc3QgY2hhciBzdGFuZGFyZE91dHB1dE5hbWVbXSA9ICI8c3RhbmRhcmQtb3V0cHV0PiI7Citjb25zdCBjaGFyIHN0YW5kYXJkRXJyb3JOYW1lW10gPSAiPHN0YW5kYXJkLWVycm9yPiI7CisKK2NvbnN0IGNoYXIgKnByb2dyYW1QYXRoOworY29uc3QgY2hhciAqcHJvZ3JhbU5hbWU7CisKK3N0YXRpYyBjaGFyICoKK3Rlc3RQcm9ncmFtIChjb25zdCBjaGFyICpkaXJlY3RvcnksIGNvbnN0IGNoYXIgKm5hbWUpIHsKKyAgY2hhciAqcGF0aDsKKworICBpZiAoKHBhdGggPSBtYWtlUGF0aChkaXJlY3RvcnksIG5hbWUpKSkgeworICAgIGlmICh0ZXN0UHJvZ3JhbVBhdGgocGF0aCkpIHJldHVybiBwYXRoOworCisgICAgZnJlZShwYXRoKTsKKyAgfQorCisgIHJldHVybiBOVUxMOworfQorCitzdGF0aWMgY2hhciAqCitmaW5kUHJvZ3JhbSAoY29uc3QgY2hhciAqbmFtZSkgeworICBjaGFyICpwYXRoID0gTlVMTDsKKyAgY29uc3QgY2hhciAqc3RyaW5nOworCisgIGlmICgoc3RyaW5nID0gZ2V0ZW52KCJQQVRIIikpKSB7CisgICAgaW50IGNvdW50OworICAgIGNoYXIgKiphcnJheTsKKworICAgIGlmICgoYXJyYXkgPSBzcGxpdFN0cmluZyhzdHJpbmcsICc6JywgJmNvdW50KSkpIHsKKyAgICAgIGZvciAodW5zaWduZWQgaW50IGluZGV4PTA7IGluZGV4PGNvdW50OyBpbmRleCs9MSkgeworICAgICAgICBjb25zdCBjaGFyICpkaXJlY3RvcnkgPSBhcnJheVtpbmRleF07CisgICAgICAgIGlmICghKmRpcmVjdG9yeSkgZGlyZWN0b3J5ID0gQ1VSUkVOVF9ESVJFQ1RPUllfTkFNRTsKKyAgICAgICAgaWYgKChwYXRoID0gdGVzdFByb2dyYW0oZGlyZWN0b3J5LCBuYW1lKSkpIGJyZWFrOworICAgICAgfQorCisgICAgICBkZWFsbG9jYXRlU3RyaW5ncyhhcnJheSk7CisgICAgfQorICB9CisKKyAgcmV0dXJuIHBhdGg7Cit9CisKK3ZvaWQKK2JlZ2luUHJvZ3JhbSAoaW50IGFyZ3VtZW50Q291bnQsIGNoYXIgKiphcmd1bWVudFZlY3RvcikgeworI2lmIGRlZmluZWQoR1JVQl9SVU5USU1FKQorCisjZWxzZSAvKiBhdCBleGl0ICovCisgIGF0ZXhpdChlbmRQcm9ncmFtKTsKKyNlbmRpZiAvKiBhdCBleGl0ICovCisKKyAgc2V0bG9jYWxlKExDX0FMTCwgIiIpOworICBpbml0aWFsaXplU3lzdGVtT2JqZWN0KCk7CisgIGVuc3VyZUFsbE1lc3NhZ2VzUHJvcGVydGllcygpOworCisgIGlmICgocHJvZ3JhbVBhdGggPSBnZXRQcm9ncmFtUGF0aCgpKSkgeworICAgIHJlZ2lzdGVyUHJvZ3JhbU1lbW9yeSgicHJvZ3JhbS1wYXRoIiwgJnByb2dyYW1QYXRoKTsKKyAgfSBlbHNlIHsKKyAgICBwcm9ncmFtUGF0aCA9IGFyZ3VtZW50VmVjdG9yWzBdOworICB9CisKKyAgaWYgKCFpc0V4cGxpY2l0UGF0aChwcm9ncmFtUGF0aCkpIHsKKyAgICBjaGFyICpwYXRoID0gZmluZFByb2dyYW0ocHJvZ3JhbVBhdGgpOworICAgIGlmICghcGF0aCkgcGF0aCA9IHRlc3RQcm9ncmFtKENVUlJFTlRfRElSRUNUT1JZX05BTUUsIHByb2dyYW1QYXRoKTsKKyAgICBpZiAocGF0aCkgcHJvZ3JhbVBhdGggPSBwYXRoOworICB9CisKKyAgaWYgKGlzRXhwbGljaXRQYXRoKHByb2dyYW1QYXRoKSkgeworI2lmIGRlZmluZWQoSEFWRV9SRUFMUEFUSCkgJiYgZGVmaW5lZChQQVRIX01BWCkKKyAgICBpZiAoIWlzQWJzb2x1dGVQYXRoKHByb2dyYW1QYXRoKSkgeworICAgICAgY2hhciBidWZmZXJbUEFUSF9NQVhdOworICAgICAgY2hhciAqcGF0aCA9IHJlYWxwYXRoKHByb2dyYW1QYXRoLCBidWZmZXIpOworCisgICAgICBpZiAocGF0aCkgeworICAgICAgICBjaGFyICpyZWFsUGF0aCA9IHN0cmR1cChwYXRoKTsKKworICAgICAgICBpZiAocmVhbFBhdGgpIHsKKyAgICAgICAgICBwcm9ncmFtUGF0aCA9IHJlYWxQYXRoOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgIGxvZ01hbGxvY0Vycm9yKCk7CisgICAgICAgIH0KKyAgICAgIH0gZWxzZSB7CisgICAgICAgIGxvZ1N5c3RlbUVycm9yKCJyZWFscGF0aCIpOworICAgICAgfQorICAgIH0KKyNlbmRpZiAvKiBkZWZpbmVkKEhBVkVfUkVBTFBBVEgpICYmIGRlZmluZWQoUEFUSF9NQVgpICovCisKKyAgICBpZiAoIWlzQWJzb2x1dGVQYXRoKHByb2dyYW1QYXRoKSkgeworICAgICAgY2hhciAqZGlyZWN0b3J5OworCisgICAgICBpZiAoKGRpcmVjdG9yeSA9IGdldFdvcmtpbmdEaXJlY3RvcnkoKSkpIHsKKyAgICAgICAgY2hhciAqcGF0aDsKKyAgICAgICAgaWYgKChwYXRoID0gbWFrZVBhdGgoZGlyZWN0b3J5LCBwcm9ncmFtUGF0aCkpKSBwcm9ncmFtUGF0aCA9IHBhdGg7CisgICAgICAgIGZyZWUoZGlyZWN0b3J5KTsKKyAgICAgIH0KKyAgICB9CisgIH0KKworICBwcm9ncmFtTmFtZSA9IGxvY2F0ZVBhdGhOYW1lKHByb2dyYW1QYXRoKTsKKyAgcHVzaExvZ1ByZWZpeChwcm9ncmFtTmFtZSk7Cit9CisKK2NvbnN0IGNoYXIgKgorZ2V0UHJvZ3JhbURpcmVjdG9yeSAodm9pZCkgeworICBzdGF0aWMgY29uc3QgY2hhciAqcHJvZ3JhbURpcmVjdG9yeSA9IE5VTEw7CisKKyAgaWYgKCFwcm9ncmFtRGlyZWN0b3J5KSB7CisgICAgaWYgKChwcm9ncmFtRGlyZWN0b3J5ID0gZ2V0UGF0aERpcmVjdG9yeShwcm9ncmFtUGF0aCkpKSB7CisgICAgICBsb2dNZXNzYWdlKExPR19ERUJVRywgInByb2dyYW0gZGlyZWN0b3J5OiAlcyIsIHByb2dyYW1EaXJlY3RvcnkpOworICAgICAgcmVnaXN0ZXJQcm9ncmFtTWVtb3J5KCJwcm9ncmFtLWRpcmVjdG9yeSIsICZwcm9ncmFtRGlyZWN0b3J5KTsKKyAgICB9IGVsc2UgeworICAgICAgbG9nTWVzc2FnZShMT0dfV0FSTklORywgZ2V0dGV4dCgiY2Fubm90IGRldGVybWluZSBwcm9ncmFtIGRpcmVjdG9yeSIpKTsKKyAgICAgIHByb2dyYW1EaXJlY3RvcnkgPSAiIjsKKyAgICB9CisgIH0KKworICBpZiAoISpwcm9ncmFtRGlyZWN0b3J5KSByZXR1cm4gTlVMTDsKKyAgcmV0dXJuIHByb2dyYW1EaXJlY3Rvcnk7Cit9CisKK2ludAorZml4SW5zdGFsbFBhdGggKGNoYXIgKipwYXRoKSB7CisgIGNvbnN0IGNoYXIgKnByb2dyYW1EaXJlY3RvcnkgPSBnZXRQcm9ncmFtRGlyZWN0b3J5KCk7CisgIGlmICghcHJvZ3JhbURpcmVjdG9yeSkgcHJvZ3JhbURpcmVjdG9yeSA9IENVUlJFTlRfRElSRUNUT1JZX05BTUU7CisKKyAgY29uc3QgY2hhciAqcHJvYmxlbSA9IHN0cnRleHQoImNhbm5vdCBmaXggaW5zdGFsbCBwYXRoIik7CisgIGNoYXIgKm5ld1BhdGggPSBtYWtlUGF0aChwcm9ncmFtRGlyZWN0b3J5LCAqcGF0aCk7CisKKyAgaWYgKG5ld1BhdGgpIHsKKyAgICBpZiAoY2hhbmdlU3RyaW5nU2V0dGluZyhwYXRoLCBuZXdQYXRoKSkgeworICAgICAgaWYgKGlzQWJzb2x1dGVQYXRoKCpwYXRoKSkgeworICAgICAgICBwcm9ibGVtID0gTlVMTDsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIHByb2JsZW0gPSBzdHJ0ZXh0KCJpbnN0YWxsIHBhdGggbm90IGFic29sdXRlIik7CisgICAgICB9CisgICAgfQorCisgICAgZnJlZShuZXdQYXRoKTsKKyAgfQorCisgIGlmICghcHJvYmxlbSkgcmV0dXJuIDE7CisgIGxvZ01lc3NhZ2UoTE9HX1dBUk5JTkcsICIlczogJXMiLCBnZXR0ZXh0KHByb2JsZW0pLCAqcGF0aCk7CisgIHJldHVybiAwOworfQorCitjaGFyICoKK21ha2VQcm9ncmFtUGF0aCAoY29uc3QgY2hhciAqbmFtZSkgeworICAgY29uc3QgY2hhciAqZGlyZWN0b3J5ID0gZ2V0UHJvZ3JhbURpcmVjdG9yeSgpOworICAgaWYgKCFkaXJlY3RvcnkpIHJldHVybiBOVUxMOworICAgcmV0dXJuIG1ha2VQYXRoKGRpcmVjdG9yeSwgbmFtZSk7Cit9CisKK2NoYXIgKgorbWFrZUNvbW1hbmRQYXRoIChjb25zdCBjaGFyICpuYW1lKSB7CisgIGNoYXIgKnBhdGggPSBOVUxMOworICBjaGFyICpkaXJlY3RvcnkgPSBOVUxMOworCisgIGlmIChjaGFuZ2VTdHJpbmdTZXR0aW5nKCZkaXJlY3RvcnksIENPTU1BTkRTX0RJUkVDVE9SWSkpIHsKKyAgICBpZiAoZml4SW5zdGFsbFBhdGgoJmRpcmVjdG9yeSkpIHsKKyAgICAgIHBhdGggPSBtYWtlUGF0aChkaXJlY3RvcnksIG5hbWUpOworICAgIH0KKyAgfQorCisgIGlmIChkaXJlY3RvcnkpIGZyZWUoZGlyZWN0b3J5KTsKKyAgcmV0dXJuIHBhdGg7Cit9CisKK2ludAorY3JlYXRlUGlkRmlsZSAoY29uc3QgY2hhciAqcGF0aCwgUHJvY2Vzc0lkZW50aWZpZXIgcGlkKSB7CisjaWYgZGVmaW5lZChHUlVCX1JVTlRJTUUpCisgIGVycm5vID0gRVJPRlM7CisKKyNlbHNlIC8qIGNyZWF0ZSBwaWQgZmlsZSAqLworICBpZiAoIXBpZCkgcGlkID0gZ2V0UHJvY2Vzc0lkZW50aWZpZXIoKTsKKworICBpZiAocGF0aCAmJiAqcGF0aCkgeworICAgIGlmICghZW5zdXJlUGF0aERpcmVjdG9yeShwYXRoKSkgcmV0dXJuIDA7CisKKyAgICB0eXBlZGVmIGVudW0ge1BGU19yZWFkeSwgUEZTX3N0YWxlLCBQRlNfY2xhc2gsIFBGU19lcnJvcn0gUGlkRmlsZVN0YXRlOworICAgIFBpZEZpbGVTdGF0ZSBzdGF0ZSA9IFBGU19lcnJvcjsKKworICAgIGxvY2tVbWFzaygpOworICAgIGludCBmaWxlID0gb3BlbigKKyAgICAgIHBhdGgsIE9fUkRXUiB8IE9fQ1JFQVQsIFNfSVJVU1IgfCBTX0lXVVNSCisjaWZkZWYgU19JUkdSUAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgU19JUkdSUAorI2VuZGlmIC8qIFNfSVJHUlAgKi8KKyNpZmRlZiBTX0lST1RICisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBTX0lST1RICisjZW5kaWYgLyogU19JUk9USCAqLworICAgICk7CisgICAgdW5sb2NrVW1hc2soKTsKKworICAgIGlmIChmaWxlICE9IC0xKSB7CisgICAgICBpbnQgbG9ja2VkID0gYWNxdWlyZUZpbGVMb2NrKGZpbGUsIDEpOworCisgICAgICBpZiAobG9ja2VkIHx8IChlcnJubyA9PSBFTk9TWVMpKSB7CisgICAgICAgIGNoYXIgYnVmZmVyWzBYMjBdOworICAgICAgICBzc2l6ZV90IGxlbmd0aDsKKworICAgICAgICBpZiAoKGxlbmd0aCA9IHJlYWQoZmlsZSwgYnVmZmVyLCBzaXplb2YoYnVmZmVyKSkpICE9IC0xKSB7CisgICAgICAgICAgUHJvY2Vzc0lkZW50aWZpZXIgb2xkUGlkOworICAgICAgICAgIGNoYXIgdGVybWluYXRvcjsKKyAgICAgICAgICBpbnQgY291bnQ7CisKKyAgICAgICAgICBpZiAobGVuZ3RoID09IHNpemVvZihidWZmZXIpKSBsZW5ndGggLT0gMTsKKyAgICAgICAgICBidWZmZXJbbGVuZ3RoXSA9IDA7CisgICAgICAgICAgY291bnQgPSBzc2NhbmYoYnVmZmVyLCAiJSIgU0NOcGlkICIlYyIsICZvbGRQaWQsICZ0ZXJtaW5hdG9yKTsKKyAgICAgICAgICBzdGF0ZSA9IFBGU19zdGFsZTsKKworICAgICAgICAgIGlmICgoY291bnQgPT0gMSkgfHwKKyAgICAgICAgICAgICAgKChjb3VudCA9PSAyKSAmJiAoKHRlcm1pbmF0b3IgPT0gJ1xuJykgfHwgKHRlcm1pbmF0b3IgPT0gJ1xyJykpKSkgeworICAgICAgICAgICAgaWYgKG9sZFBpZCA9PSBwaWQpIHsKKyAgICAgICAgICAgICAgc3RhdGUgPSBQRlNfcmVhZHk7CisgICAgICAgICAgICB9IGVsc2UgaWYgKHRlc3RQcm9jZXNzSWRlbnRpZmllcihvbGRQaWQpKSB7CisgICAgICAgICAgICAgIGxvZ01lc3NhZ2UoTE9HX0VSUiwgImluc3RhbmNlIGFscmVhZHkgcnVubmluZzogUElEPSUiIFBSSXBpZCwgb2xkUGlkKTsKKyAgICAgICAgICAgICAgc3RhdGUgPSBQRlNfY2xhc2g7CisgICAgICAgICAgICB9CisgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgIGxvZ1N5c3RlbUVycm9yKCJyZWFkIik7CisgICAgICAgIH0KKworICAgICAgICBpZiAoc3RhdGUgPT0gUEZTX3N0YWxlKSB7CisgICAgICAgICAgc3RhdGUgPSBQRlNfZXJyb3I7CisKKyAgICAgICAgICBpZiAobHNlZWsoZmlsZSwgMCwgU0VFS19TRVQpICE9IC0xKSB7CisgICAgICAgICAgICBpZiAoZnRydW5jYXRlKGZpbGUsIDApICE9IC0xKSB7CisgICAgICAgICAgICAgIGxlbmd0aCA9IHNucHJpbnRmKGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlciksICIlIiBQUklwaWQgIlxuIiwgcGlkKTsKKworICAgICAgICAgICAgICBpZiAod3JpdGUoZmlsZSwgYnVmZmVyLCBsZW5ndGgpICE9IC0xKSB7CisgICAgICAgICAgICAgICAgc3RhdGUgPSBQRlNfcmVhZHk7CisgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgbG9nU3lzdGVtRXJyb3IoIndyaXRlIik7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgIGxvZ1N5c3RlbUVycm9yKCJmdHJ1bmNhdGUiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgbG9nU3lzdGVtRXJyb3IoImxzZWVrIik7CisgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYgKGxvY2tlZCkgcmVsZWFzZUZpbGVMb2NrKGZpbGUpOworICAgICAgfQorCisgICAgICBjbG9zZShmaWxlKTsKKyAgICB9IGVsc2UgeworICAgICAgbG9nTWVzc2FnZShMT0dfV0FSTklORywgIiVzOiAlczogJXMiLAorICAgICAgICAgICAgICAgICBnZXR0ZXh0KCJjYW5ub3Qgb3BlbiBwcm9jZXNzIGlkZW50aWZpZXIgZmlsZSIpLAorICAgICAgICAgICAgICAgICBwYXRoLCBzdHJlcnJvcihlcnJubykpOworICAgIH0KKworICAgIHN3aXRjaCAoc3RhdGUpIHsKKyAgICAgIGNhc2UgUEZTX3JlYWR5OgorICAgICAgICByZXR1cm4gMTsKKworICAgICAgY2FzZSBQRlNfY2xhc2g6CisgICAgICAgIGVycm5vID0gRUVYSVNUOworICAgICAgICBicmVhazsKKworICAgICAgY2FzZSBQRlNfZXJyb3I6CisgICAgICAgIGJyZWFrOworCisgICAgICBkZWZhdWx0OgorICAgICAgICBsb2dNZXNzYWdlKExPR19XQVJOSU5HLCAidW5leHBlY3RlZCBQSUQgZmlsZSBzdGF0ZTogJXUiLCBzdGF0ZSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgfQorI2VuZGlmIC8qIGNyZWF0ZSBwaWQgZmlsZSAqLworCisgIHJldHVybiAwOworfQorCitpbnQKK2NhbmNlbFByb2dyYW0gKGNvbnN0IGNoYXIgKnBpZEZpbGUpIHsKKyAgaW50IGNhbmNlbGxlZCA9IDA7CisgIEZJTEUgKmZpbGU7CisKKyAgaWYgKChmaWxlID0gZm9wZW4ocGlkRmlsZSwgInIiKSkpIHsKKyAgICBjaGFyIGJ1ZmZlclswWDEwMF07CisgICAgY29uc3QgY2hhciAqbGluZTsKKworICAgIGlmICgobGluZSA9IGZnZXRzKGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlciksIGZpbGUpKSkgeworICAgICAgY2hhciAqZW5kOworICAgICAgbG9uZyBpbnQgcGlkID0gc3RydG9sKGxpbmUsICZlbmQsIDEwKTsKKworICAgICAgaWYgKCEqZW5kIHx8IGlzc3BhY2UoKHVuc2lnbmVkIGNoYXIpKmVuZCkpIHsKKyAgICAgICAgaWYgKGNhbmNlbFByb2Nlc3MocGlkKSkgY2FuY2VsbGVkID0gMTsKKyAgICAgIH0KKyAgICB9CisKKyAgICBmY2xvc2UoZmlsZSk7CisgIH0gZWxzZSB7CisgICAgbG9nTWVzc2FnZShMT0dfRVJSLCAiJXM6ICVzOiAlcyIsCisgICAgICAgICAgICAgICBnZXR0ZXh0KCJwaWQgZmlsZSBvcGVuIGVycm9yIiksCisgICAgICAgICAgICAgICBwaWRGaWxlLCBzdHJlcnJvcihlcnJubykpOworICB9CisKKyAgcmV0dXJuIGNhbmNlbGxlZDsKK30KKwordHlwZWRlZiBzdHJ1Y3QgUHJvZ3JhbUV4aXRFbnRyeVN0cnVjdCBQcm9ncmFtRXhpdEVudHJ5Oworc3RhdGljIFByb2dyYW1FeGl0RW50cnkgKnByb2dyYW1FeGl0RW50cmllcyA9IE5VTEw7CisKK3N0cnVjdCBQcm9ncmFtRXhpdEVudHJ5U3RydWN0IHsKKyAgUHJvZ3JhbUV4aXRFbnRyeSAqbmV4dDsKKyAgY2hhciAqbmFtZTsKKyAgUHJvZ3JhbUV4aXRIYW5kbGVyICpoYW5kbGVyOworICB2b2lkICpkYXRhOworfTsKKwordm9pZAorb25Qcm9ncmFtRXhpdCAoY29uc3QgY2hhciAqbmFtZSwgUHJvZ3JhbUV4aXRIYW5kbGVyICpoYW5kbGVyLCB2b2lkICpkYXRhKSB7CisgIFByb2dyYW1FeGl0RW50cnkgKnB4ZTsKKworICBpZiAoKHB4ZSA9IG1hbGxvYyhzaXplb2YoKnB4ZSkpKSkgeworICAgIHB4ZS0+bmFtZSA9IHN0cmR1cChuYW1lKTsKKyAgICBweGUtPmhhbmRsZXIgPSBoYW5kbGVyOworICAgIHB4ZS0+ZGF0YSA9IGRhdGE7CisKKyAgICBweGUtPm5leHQgPSBwcm9ncmFtRXhpdEVudHJpZXM7CisgICAgcHJvZ3JhbUV4aXRFbnRyaWVzID0gcHhlOworICAgIGxvZ01lc3NhZ2UoTE9HX0RFQlVHLCAicHJvZ3JhbSBleGl0IGV2ZW50IGFkZGVkOiAlcyIsIG5hbWUpOworICB9IGVsc2UgeworICAgIGxvZ01hbGxvY0Vycm9yKCk7CisgIH0KK30KKworc3RhdGljIHZvaWQKK2V4aXRQcm9ncmFtTWVtb3J5ICh2b2lkICpkYXRhKSB7CisgIGNoYXIgKipwb2ludGVyID0gZGF0YTsKKworICBpZiAoKnBvaW50ZXIpIHsKKyAgICBmcmVlKCpwb2ludGVyKTsKKyAgICAqcG9pbnRlciA9IE5VTEw7CisgIH0KK30KKwordm9pZAorcmVnaXN0ZXJQcm9ncmFtTWVtb3J5IChjb25zdCBjaGFyICpuYW1lLCB2b2lkICpwb2ludGVyKSB7CisgIG9uUHJvZ3JhbUV4aXQobmFtZSwgZXhpdFByb2dyYW1NZW1vcnksIHBvaW50ZXIpOworfQorCit2b2lkCitlbmRQcm9ncmFtICh2b2lkKSB7CisgIGxvZ01lc3NhZ2UoTE9HX0RFQlVHLCAic3RvcHBpbmcgcHJvZ3JhbSBjb21wb25lbnRzIik7CisKKyAgd2hpbGUgKHByb2dyYW1FeGl0RW50cmllcykgeworICAgIFByb2dyYW1FeGl0RW50cnkgKnB4ZSA9IHByb2dyYW1FeGl0RW50cmllczsKKyAgICBjb25zdCBjaGFyICpuYW1lID0gcHhlLT5uYW1lOworCisgICAgcHJvZ3JhbUV4aXRFbnRyaWVzID0gcHhlLT5uZXh0OworICAgIGlmICghbmFtZSkgbmFtZSA9ICJ1bmtub3duIjsKKworICAgIGxvZ01lc3NhZ2UoTE9HX0RFQlVHLCAic3RvcHBpbmcgcHJvZ3JhbSBjb21wb25lbnQ6ICVzIiwgbmFtZSk7CisgICAgcHhlLT5oYW5kbGVyKHB4ZS0+ZGF0YSk7CisKKyAgICBpZiAocHhlLT5uYW1lKSBmcmVlKHB4ZS0+bmFtZSk7CisgICAgZnJlZShweGUpOworICB9CisKKyAgbG9nTWVzc2FnZShMT0dfREVCVUcsICJzdG9wcGVkIHByb2dyYW0gY29tcG9uZW50cyIpOworICBwb3BMb2dQcmVmaXgoKTsKK30KZGlmZiAtLWdpdCBhL1Byb2dyYW1zL3B0eV9vYmplY3QuYyBiL1Byb2dyYW1zL3B0eV9vYmplY3QuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMGMyYzU1Ci0tLSAvZGV2L251bGwKKysrIGIvUHJvZ3JhbXMvcHR5X29iamVjdC5jCkBAIC0wLDAgKzEsMjExIEBACisvKgorICogQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyAqICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyAqCisgKiBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorICoKKyAqIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyAqCisgKiBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisgKi8KKworI2luY2x1ZGUgInByb2xvZ3VlLmgiCisKKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxmY250bC5oPgorCisjaW5jbHVkZSAibG9nLmgiCisjaW5jbHVkZSAicHR5X29iamVjdC5oIgorI2luY2x1ZGUgInNjcl90eXBlcy5oIgorCitzdHJ1Y3QgUHR5T2JqZWN0U3RydWN0IHsKKyAgY2hhciAqcGF0aDsKKyAgaW50IG1hc3RlcjsKKworICB1bnNpZ25lZCBjaGFyIGxvZ0xldmVsOworICB1bnNpZ25lZCBjaGFyIGxvZ0lucHV0OjE7Cit9OworCitQdHlPYmplY3QgKgorcHR5TmV3T2JqZWN0ICh2b2lkKSB7CisgIFB0eU9iamVjdCAqcHR5OworCisgIGlmICgocHR5ID0gbWFsbG9jKHNpemVvZigqcHR5KSkpKSB7CisgICAgbWVtc2V0KHB0eSwgMCwgc2l6ZW9mKCpwdHkpKTsKKworICAgIHB0eS0+cGF0aCA9IE5VTEw7CisgICAgcHR5LT5tYXN0ZXIgPSBJTlZBTElEX0ZJTEVfREVTQ1JJUFRPUjsKKworICAgIHB0eS0+bG9nTGV2ZWwgPSBMT0dfREVCVUc7CisgICAgcHR5LT5sb2dJbnB1dCA9IDA7CisKKyAgICBpZiAoKHB0eS0+bWFzdGVyID0gcG9zaXhfb3BlbnB0KE9fUkRXUikpICE9IC0xKSB7CisgICAgICBpZiAoKHB0eS0+cGF0aCA9IHB0c25hbWUocHR5LT5tYXN0ZXIpKSkgeworICAgICAgICBpZiAoKHB0eS0+cGF0aCA9IHN0cmR1cChwdHktPnBhdGgpKSkgeworICAgICAgICAgIGlmIChncmFudHB0KHB0eS0+bWFzdGVyKSAhPSAtMSkgeworICAgICAgICAgICAgaWYgKHVubG9ja3B0KHB0eS0+bWFzdGVyKSAhPSAtMSkgeworICAgICAgICAgICAgICByZXR1cm4gcHR5OworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgbG9nU3lzdGVtRXJyb3IoInVubG9ja3B0Iik7CisgICAgICAgICAgICB9CisgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGxvZ1N5c3RlbUVycm9yKCJncmFudHB0Iik7CisgICAgICAgICAgfQorCisgICAgICAgICAgZnJlZShwdHktPnBhdGgpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgIGxvZ01hbGxvY0Vycm9yKCk7CisgICAgICAgIH0KKyAgICAgIH0gZWxzZSB7CisgICAgICAgIGxvZ1N5c3RlbUVycm9yKCJwdHNuYW1lIik7CisgICAgICB9CisKKyAgICAgIGNsb3NlKHB0eS0+bWFzdGVyKTsKKyAgICB9IGVsc2UgeworICAgICAgbG9nU3lzdGVtRXJyb3IoInBvc2l4X29wZW5wdCIpOworICAgIH0KKworICAgIGZyZWUocHR5KTsKKyAgfSBlbHNlIHsKKyAgICBsb2dNYWxsb2NFcnJvcigpOworICB9CisKKyAgcmV0dXJuIE5VTEw7Cit9CisKK2NvbnN0IGNoYXIgKgorcHR5R2V0UGF0aCAoY29uc3QgUHR5T2JqZWN0ICpwdHkpIHsKKyAgcmV0dXJuIHB0eS0+cGF0aDsKK30KKworaW50CitwdHlHZXRNYXN0ZXIgKGNvbnN0IFB0eU9iamVjdCAqcHR5KSB7CisgIHJldHVybiBwdHktPm1hc3RlcjsKK30KKwordm9pZAorcHR5U2V0TG9nTGV2ZWwgKFB0eU9iamVjdCAqcHR5LCB1bnNpZ25lZCBjaGFyIGxldmVsKSB7CisgIHB0eS0+bG9nTGV2ZWwgPSBsZXZlbDsKK30KKwordm9pZAorcHR5U2V0TG9nSW5wdXQgKFB0eU9iamVjdCAqcHR5LCBpbnQgeWVzKSB7CisgIHB0eS0+bG9nSW5wdXQgPSB5ZXM7Cit9CisKK2ludAorcHR5V3JpdGVJbnB1dERhdGEgKFB0eU9iamVjdCAqcHR5LCBjb25zdCB2b2lkICpkYXRhLCBzaXplX3QgbGVuZ3RoKSB7CisgIGlmIChwdHktPmxvZ0lucHV0KSB7CisgICAgbG9nQnl0ZXMocHR5LT5sb2dMZXZlbCwgInB0eSBpbnB1dCIsIGRhdGEsIGxlbmd0aCk7CisgIH0KKworICBpZiAod3JpdGUocHR5LT5tYXN0ZXIsIGRhdGEsIGxlbmd0aCkgIT0gLTEpIHJldHVybiAxOworICBsb2dTeXN0ZW1FcnJvcigicHR5IHdyaXRlIGlucHV0Iik7CisgIHJldHVybiAwOworfQorCitpbnQKK3B0eVdyaXRlSW5wdXRDaGFyYWN0ZXIgKFB0eU9iamVjdCAqcHR5LCB3Y2hhcl90IGNoYXJhY3RlciwgaW50IGt4TW9kZSkgeworICBpZiAoIWlzU3BlY2lhbEtleShjaGFyYWN0ZXIpKSB7CisgICAgY2hhciBidWZmZXJbTUJfQ1VSX01BWF07CisgICAgaW50IGNvdW50ID0gd2N0b21iKGJ1ZmZlciwgY2hhcmFjdGVyKTsKKyAgICBpZiAoY291bnQgPT0gLTEpIHJldHVybiAwOworICAgIHJldHVybiBwdHlXcml0ZUlucHV0RGF0YShwdHksIGJ1ZmZlciwgY291bnQpOworICB9CisKKyAgY29uc3QgY2hhciAqc2VxdWVuY2UgPSBOVUxMOworICBjaGFyIGJ1ZmZlclswWDIwXTsKKworICAjZGVmaW5lIEtFWShrZXksIHNlcSkgY2FzZSBTQ1JfS0VZXyMja2V5OiBzZXF1ZW5jZSA9IHNlcTsgYnJlYWs7CisgIHN3aXRjaCAoY2hhcmFjdGVyKSB7CisgICAgS0VZKEVOVEVSICAgICAgICwgIlxyIikKKyAgICBLRVkoVEFCICAgICAgICAgLCAiXHQiKQorICAgIEtFWShCQUNLU1BBQ0UgICAsICJceDdGIikKKyAgICBLRVkoRVNDQVBFICAgICAgLCAiXHgxQiIpCisKKyAgICBLRVkoQ1VSU09SX1VQICAgLCAiXHgxQk9BIikKKyAgICBLRVkoQ1VSU09SX0RPV04gLCAiXHgxQk9CIikKKyAgICBLRVkoQ1VSU09SX1JJR0hULCAiXHgxQk9DIikKKyAgICBLRVkoQ1VSU09SX0xFRlQgLCAiXHgxQk9EIikKKworICAgIEtFWShIT01FICAgICAgICAsICJceDFCWzF+IikKKyAgICBLRVkoSU5TRVJUICAgICAgLCAiXHgxQlsyfiIpCisgICAgS0VZKERFTEVURSAgICAgICwgIlx4MUJbM34iKQorICAgIEtFWShFTkQgICAgICAgICAsICJceDFCWzR+IikKKyAgICBLRVkoUEFHRV9VUCAgICAgLCAiXHgxQls1fiIpCisgICAgS0VZKFBBR0VfRE9XTiAgICwgIlx4MUJbNn4iKQorCisgICAgS0VZKEYxICAgICAgICAgICwgIlx4MUJPUCIpCisgICAgS0VZKEYyICAgICAgICAgICwgIlx4MUJPUSIpCisgICAgS0VZKEYzICAgICAgICAgICwgIlx4MUJPUiIpCisgICAgS0VZKEY0ICAgICAgICAgICwgIlx4MUJPUyIpCisgICAgS0VZKEY1ICAgICAgICAgICwgIlx4MUJbMTV+IikKKyAgICBLRVkoRjYgICAgICAgICAgLCAiXHgxQlsxN34iKQorICAgIEtFWShGNyAgICAgICAgICAsICJceDFCWzE4fiIpCisgICAgS0VZKEY4ICAgICAgICAgICwgIlx4MUJbMTl+IikKKyAgICBLRVkoRjkgICAgICAgICAgLCAiXHgxQlsyMH4iKQorICAgIEtFWShGMTAgICAgICAgICAsICJceDFCWzIxfiIpCisgICAgS0VZKEYxMSAgICAgICAgICwgIlx4MUJbMjN+IikKKyAgICBLRVkoRjEyICAgICAgICAgLCAiXHgxQlsyNH4iKQorCisgICAgZGVmYXVsdDoKKyAgICAgIGxvZ01lc3NhZ2UoTE9HX1dBUk5JTkcsICJ1bnN1cHBvcnRlZCBwdHkgc2NyZWVuIGtleTogJTA0WCIsIGNoYXJhY3Rlcik7CisgICAgICBicmVhazsKKyAgfQorICAjdW5kZWYgS0VZCisKKyAgaWYgKHNlcXVlbmNlKSB7CisgICAgc3dpdGNoIChjaGFyYWN0ZXIpIHsKKyAgICAgIGNhc2UgU0NSX0tFWV9DVVJTT1JfTEVGVDoKKyAgICAgIGNhc2UgU0NSX0tFWV9DVVJTT1JfUklHSFQ6CisgICAgICBjYXNlIFNDUl9LRVlfQ1VSU09SX1VQOgorICAgICAgY2FzZSBTQ1JfS0VZX0NVUlNPUl9ET1dOOgorICAgICAgICBzdHJjcHkoYnVmZmVyLCBzZXF1ZW5jZSk7CisgICAgICAgIGJ1ZmZlclsxXSA9IGt4TW9kZT8gJ08nOiAnWyc7CisgICAgICAgIHNlcXVlbmNlID0gYnVmZmVyOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBpZiAoIXB0eVdyaXRlSW5wdXREYXRhKHB0eSwgc2VxdWVuY2UsIHN0cmxlbihzZXF1ZW5jZSkpKSB7CisgICAgICByZXR1cm4gMDsKKyAgICB9CisgIH0KKworICByZXR1cm4gMTsKK30KKwordm9pZAorcHR5Q2xvc2VNYXN0ZXIgKFB0eU9iamVjdCAqcHR5KSB7CisgIGlmIChwdHktPm1hc3RlciAhPSBJTlZBTElEX0ZJTEVfREVTQ1JJUFRPUikgeworICAgIGNsb3NlKHB0eS0+bWFzdGVyKTsKKyAgICBwdHktPm1hc3RlciA9IElOVkFMSURfRklMRV9ERVNDUklQVE9SOworICB9Cit9CisKK2ludAorcHR5T3BlblNsYXZlIChjb25zdCBQdHlPYmplY3QgKnB0eSwgaW50ICpmaWxlRGVzY3JpcHRvcikgeworICBpbnQgcmVzdWx0ID0gb3BlbihwdHktPnBhdGgsIE9fUkRXUik7CisgIGludCBvcGVuZWQgPSByZXN1bHQgIT0gSU5WQUxJRF9GSUxFX0RFU0NSSVBUT1I7CisKKyAgaWYgKG9wZW5lZCkgeworICAgICpmaWxlRGVzY3JpcHRvciA9IHJlc3VsdDsKKyAgfSBlbHNlIHsKKyAgICBsb2dTeXN0ZW1FcnJvcigicHR5IHNsYXZlIG9wZW4iKTsKKyAgfQorCisgIHJldHVybiBvcGVuZWQ7Cit9CisKK3ZvaWQKK3B0eURlc3Ryb3lPYmplY3QgKFB0eU9iamVjdCAqcHR5KSB7CisgIHB0eUNsb3NlTWFzdGVyKHB0eSk7CisgIGZyZWUocHR5LT5wYXRoKTsKKyAgZnJlZShwdHkpOworfQpkaWZmIC0tZ2l0IGEvUHJvZ3JhbXMvcHR5X3NjcmVlbi5jIGIvUHJvZ3JhbXMvcHR5X3NjcmVlbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM1NjI2ZDUKLS0tIC9kZXYvbnVsbAorKysgYi9Qcm9ncmFtcy9wdHlfc2NyZWVuLmMKQEAgLTAsMCArMSw1OTcgQEAKKy8qCisgKiBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorICogICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorICoKKyAqIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorICoKKyAqIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyAqLworCisjaW5jbHVkZSAicHJvbG9ndWUuaCIKKworI2luY2x1ZGUgImxvZy5oIgorI2luY2x1ZGUgInB0eV9zY3JlZW4uaCIKKyNpbmNsdWRlICJzY3JfZW11bGF0b3IuaCIKKyNpbmNsdWRlICJtc2dfcXVldWUuaCIKKyNpbmNsdWRlICJ1dGY4LmgiCisKKyNkZWZpbmUgRU5BQkxFX1JPV19BUlJBWSAxCisKK3N0YXRpYyB1bnNpZ25lZCBjaGFyIHNjcmVlbkxvZ0xldmVsID0gTE9HX0RFQlVHOworCit2b2lkCitwdHlTZXRTY3JlZW5Mb2dMZXZlbCAodW5zaWduZWQgY2hhciBsZXZlbCkgeworICBzY3JlZW5Mb2dMZXZlbCA9IGxldmVsOworfQorCitzdGF0aWMgdW5zaWduZWQgY2hhciBoYXNDb2xvcnMgPSAwOworc3RhdGljIHVuc2lnbmVkIGNoYXIgY3VycmVudEZvcmVncm91bmRDb2xvcjsKK3N0YXRpYyB1bnNpZ25lZCBjaGFyIGN1cnJlbnRCYWNrZ3JvdW5kQ29sb3I7CitzdGF0aWMgdW5zaWduZWQgY2hhciBkZWZhdWx0Rm9yZWdyb3VuZENvbG9yOworc3RhdGljIHVuc2lnbmVkIGNoYXIgZGVmYXVsdEJhY2tncm91bmRDb2xvcjsKK3N0YXRpYyB1bnNpZ25lZCBjaGFyIGNvbG9yUGFpck1hcFswMTAwXTsKKworc3RhdGljIHVuc2lnbmVkIGNoYXIKK3RvQ29sb3JQYWlyICh1bnNpZ25lZCBjaGFyIGZvcmVncm91bmQsIHVuc2lnbmVkIGNoYXIgYmFja2dyb3VuZCkgeworICByZXR1cm4gY29sb3JQYWlyTWFwWyhiYWNrZ3JvdW5kIDw8IDMpIHwgZm9yZWdyb3VuZF07Cit9CisKK3N0YXRpYyB2b2lkCitpbml0aWFsaXplQ29sb3JzICh1bnNpZ25lZCBjaGFyIGZvcmVncm91bmQsIHVuc2lnbmVkIGNoYXIgYmFja2dyb3VuZCkgeworICBjdXJyZW50Rm9yZWdyb3VuZENvbG9yID0gZGVmYXVsdEZvcmVncm91bmRDb2xvciA9IGZvcmVncm91bmQ7CisgIGN1cnJlbnRCYWNrZ3JvdW5kQ29sb3IgPSBkZWZhdWx0QmFja2dyb3VuZENvbG9yID0gYmFja2dyb3VuZDsKK30KKworc3RhdGljIHZvaWQKK2luaXRpYWxpemVDb2xvclBhaXJzICh2b2lkKSB7CisgIGZvciAodW5zaWduZWQgaW50IHBhaXI9MDsgcGFpcjxBUlJBWV9DT1VOVChjb2xvclBhaXJNYXApOyBwYWlyKz0xKSB7CisgICAgY29sb3JQYWlyTWFwW3BhaXJdID0gcGFpcjsKKyAgfQorCisgIHsKKyAgICBzaG9ydCBmb3JlZ3JvdW5kLCBiYWNrZ3JvdW5kOworICAgIHBhaXJfY29udGVudCgwLCAmZm9yZWdyb3VuZCwgJmJhY2tncm91bmQpOworICAgIGluaXRpYWxpemVDb2xvcnMoZm9yZWdyb3VuZCwgYmFja2dyb3VuZCk7CisKKyAgICB1bnNpZ25lZCBjaGFyIHBhaXIgPSB0b0NvbG9yUGFpcihmb3JlZ3JvdW5kLCBiYWNrZ3JvdW5kKTsKKyAgICBjb2xvclBhaXJNYXBbcGFpcl0gPSAwOworICAgIGNvbG9yUGFpck1hcFswXSA9IHBhaXI7CisgIH0KKworICBmb3IgKHVuc2lnbmVkIGNoYXIgZm9yZWdyb3VuZD1DT0xPUl9CTEFDSzsgZm9yZWdyb3VuZDw9Q09MT1JfV0hJVEU7IGZvcmVncm91bmQrPTEpIHsKKyAgICBmb3IgKHVuc2lnbmVkIGNoYXIgYmFja2dyb3VuZD1DT0xPUl9CTEFDSzsgYmFja2dyb3VuZDw9Q09MT1JfV0hJVEU7IGJhY2tncm91bmQrPTEpIHsKKyAgICAgIHVuc2lnbmVkIGNoYXIgcGFpciA9IHRvQ29sb3JQYWlyKGZvcmVncm91bmQsIGJhY2tncm91bmQpOworICAgICAgaWYgKCFwYWlyKSBjb250aW51ZTsKKyAgICAgIGluaXRfcGFpcihwYWlyLCBmb3JlZ3JvdW5kLCBiYWNrZ3JvdW5kKTsKKyAgICB9CisgIH0KK30KKworc3RhdGljIGludCBoYXZlVGVybWluYWxNZXNzYWdlUXVldWUgPSAwOworc3RhdGljIGludCB0ZXJtaW5hbE1lc3NhZ2VRdWV1ZTsKK3N0YXRpYyBpbnQgaGF2ZUlucHV0VGV4dEhhbmRsZXIgPSAwOworCitzdGF0aWMgaW50CitzZW5kVGVybWluYWxNZXNzYWdlIChNZXNzYWdlVHlwZSB0eXBlLCBjb25zdCB2b2lkICpjb250ZW50LCBzaXplX3QgbGVuZ3RoKSB7CisgIGlmICghaGF2ZVRlcm1pbmFsTWVzc2FnZVF1ZXVlKSByZXR1cm4gMDsKKyAgcmV0dXJuIHNlbmRNZXNzYWdlKHRlcm1pbmFsTWVzc2FnZVF1ZXVlLCB0eXBlLCBjb250ZW50LCBsZW5ndGgsIDApOworfQorCitzdGF0aWMgaW50CitzdGFydFRlcm1pbmFsTWVzc2FnZVJlY2VpdmVyIChjb25zdCBjaGFyICpuYW1lLCBNZXNzYWdlVHlwZSB0eXBlLCBzaXplX3Qgc2l6ZSwgTWVzc2FnZUhhbmRsZXIgKmhhbmRsZXIsIHZvaWQgKmRhdGEpIHsKKyAgaWYgKCFoYXZlVGVybWluYWxNZXNzYWdlUXVldWUpIHJldHVybiAwOworICByZXR1cm4gc3RhcnRNZXNzYWdlUmVjZWl2ZXIobmFtZSwgdGVybWluYWxNZXNzYWdlUXVldWUsIHR5cGUsIHNpemUsIGhhbmRsZXIsIGRhdGEpOworfQorCitzdGF0aWMgdm9pZAorbWVzc2FnZUhhbmRsZXJfSW5wdXRUZXh0IChjb25zdCBNZXNzYWdlSGFuZGxlclBhcmFtZXRlcnMgKnBhcmFtZXRlcnMpIHsKKyAgUHR5T2JqZWN0ICpwdHkgPSBwYXJhbWV0ZXJzLT5kYXRhOworICBjb25zdCBjaGFyICpjb250ZW50ID0gcGFyYW1ldGVycy0+Y29udGVudDsKKyAgc2l6ZV90IGxlbmd0aCA9IHBhcmFtZXRlcnMtPmxlbmd0aDsKKworICB3aGlsZSAobGVuZ3RoKSB7CisgICAgd2ludF90IGNoYXJhY3RlciA9IGNvbnZlcnRVdGY4VG9XY2hhcigmY29udGVudCwgJmxlbmd0aCk7CisgICAgaWYgKGNoYXJhY3RlciA9PSBXRU9GKSBicmVhazsKKyAgICBpZiAoIXB0eVdyaXRlSW5wdXRDaGFyYWN0ZXIocHR5LCBjaGFyYWN0ZXIsIDApKSBicmVhazsKKyAgfQorfQorCitzdGF0aWMgdm9pZAorZW5hYmxlTWVzc2FnZXMgKGtleV90IGtleSkgeworICBoYXZlVGVybWluYWxNZXNzYWdlUXVldWUgPSBjcmVhdGVNZXNzYWdlUXVldWUoJnRlcm1pbmFsTWVzc2FnZVF1ZXVlLCBrZXkpOworfQorCitzdGF0aWMgaW50IHNlZ21lbnRJZGVudGlmaWVyID0gMDsKK3N0YXRpYyBTY3JlZW5TZWdtZW50SGVhZGVyICpzZWdtZW50SGVhZGVyID0gTlVMTDsKKworc3RhdGljIGludAorZGVzdHJveVNlZ21lbnQgKHZvaWQpIHsKKyAgaWYgKGhhdmVUZXJtaW5hbE1lc3NhZ2VRdWV1ZSkgeworICAgIGRlc3Ryb3lNZXNzYWdlUXVldWUodGVybWluYWxNZXNzYWdlUXVldWUpOworICAgIGhhdmVUZXJtaW5hbE1lc3NhZ2VRdWV1ZSA9IDA7CisgIH0KKworICByZXR1cm4gZGVzdHJveVNjcmVlblNlZ21lbnQoc2VnbWVudElkZW50aWZpZXIpOworfQorCitzdGF0aWMgaW50CitjcmVhdGVTZWdtZW50IChjb25zdCBjaGFyICpwYXRoLCBpbnQgZHJpdmVyRGlyZWN0aXZlcykgeworICBrZXlfdCBrZXk7CisKKyAgaWYgKG1ha2VUZXJtaW5hbEtleSgma2V5LCBwYXRoKSkgeworICAgIHNlZ21lbnRIZWFkZXIgPSBjcmVhdGVTY3JlZW5TZWdtZW50KCZzZWdtZW50SWRlbnRpZmllciwga2V5LCBDT0xTLCBMSU5FUywgRU5BQkxFX1JPV19BUlJBWSk7CisKKyAgICBpZiAoc2VnbWVudEhlYWRlcikgeworICAgICAgaWYgKGRyaXZlckRpcmVjdGl2ZXMpIGVuYWJsZU1lc3NhZ2VzKGtleSk7CisgICAgICByZXR1cm4gMTsKKyAgICB9CisgIH0KKworICByZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQKK3N0b3JlQ3Vyc29yUG9zaXRpb24gKHZvaWQpIHsKKyAgc2VnbWVudEhlYWRlci0+Y3Vyc29yUm93ID0gZ2V0Y3VyeShzdGRzY3IpOworICBzZWdtZW50SGVhZGVyLT5jdXJzb3JDb2x1bW4gPSBnZXRjdXJ4KHN0ZHNjcik7Cit9CisKK3N0YXRpYyB2b2lkCitzZXRDb2xvciAoU2NyZWVuU2VnbWVudENvbG9yICpzc2MsIHVuc2lnbmVkIGNoYXIgY29sb3IsIHVuc2lnbmVkIGNoYXIgbGV2ZWwpIHsKKyAgaWYgKGNvbG9yICYgQ09MT1JfUkVEKSBzc2MtPnJlZCA9IGxldmVsOworICBpZiAoY29sb3IgJiBDT0xPUl9HUkVFTikgc3NjLT5ncmVlbiA9IGxldmVsOworICBpZiAoY29sb3IgJiBDT0xPUl9CTFVFKSBzc2MtPmJsdWUgPSBsZXZlbDsKK30KKworc3RhdGljIFNjcmVlblNlZ21lbnRDaGFyYWN0ZXIgKgorc2V0Q2hhcmFjdGVyICh1bnNpZ25lZCBpbnQgcm93LCB1bnNpZ25lZCBpbnQgY29sdW1uLCBjb25zdCBTY3JlZW5TZWdtZW50Q2hhcmFjdGVyICoqZW5kKSB7CisgIHdjaGFyX3QgdGV4dDsKKyAgYXR0cl90IGF0dHJpYnV0ZXM7CisgIGludCBjb2xvclBhaXI7CisKKyAgeworICAgIHVuc2lnbmVkIGludCBvbGRSb3cgPSBzZWdtZW50SGVhZGVyLT5jdXJzb3JSb3c7CisgICAgdW5zaWduZWQgaW50IG9sZENvbHVtbiA9IHNlZ21lbnRIZWFkZXItPmN1cnNvckNvbHVtbjsKKyAgICBpbnQgbW92ZSA9IChyb3cgIT0gb2xkUm93KSB8fCAoY29sdW1uICE9IG9sZENvbHVtbik7CisgICAgaWYgKG1vdmUpIHB0eVNldEN1cnNvclBvc2l0aW9uKHJvdywgY29sdW1uKTsKKworICAgIHsKKyAgICAjaWZkZWYgR09UX0NVUlNFU19XQ0gKKyAgICAgIGNjaGFyX3QgY2hhcmFjdGVyOworICAgICAgaW5fd2NoKCZjaGFyYWN0ZXIpOworCisgICAgICB0ZXh0ID0gY2hhcmFjdGVyLmNoYXJzWzBdOworICAgICAgYXR0cmlidXRlcyA9IGNoYXJhY3Rlci5hdHRyOworICAgICAgY29sb3JQYWlyID0gY2hhcmFjdGVyLmV4dF9jb2xvcjsKKyAgICAjZWxzZSAvKiBHT1RfQ1VSU0VTX1dDSCAqLworICAgICAgY2h0eXBlIGNoYXJhY3RlciA9IGluY2goKTsKKyAgICAgIHRleHQgPSBjaGFyYWN0ZXIgJiBBX0NIQVJURVhUOworICAgICAgYXR0cmlidXRlcyA9IGNoYXJhY3RlciAmIEFfQVRUUklCVVRFUzsKKyAgICAgIGNvbG9yUGFpciA9IFBBSVJfTlVNQkVSKGNoYXJhY3Rlcik7CisgICAgI2VuZGlmIC8qIEdPVF9DVVJTRVNfV0NIICovCisgICAgfQorCisgICAgaWYgKG1vdmUpIHB0eVNldEN1cnNvclBvc2l0aW9uKG9sZFJvdywgb2xkQ29sdW1uKTsKKyAgfQorCisgIFNjcmVlblNlZ21lbnRDaGFyYWN0ZXIgY2hhcmFjdGVyID0geworICAgIC50ZXh0ID0gdGV4dCwKKyAgICAuYWxwaGEgPSBVSU5UOF9NQVgsCisgIH07CisKKyAgeworICAgIHNob3J0IGZnQ29sb3IsIGJnQ29sb3I7CisgICAgcGFpcl9jb250ZW50KGNvbG9yUGFpciwgJmZnQ29sb3IsICZiZ0NvbG9yKTsKKworICAgIHVuc2lnbmVkIGNoYXIgYmdMZXZlbCA9IFNDUkVFTl9TRUdNRU5UX0NPTE9SX0xFVkVMOworICAgIHVuc2lnbmVkIGNoYXIgZmdMZXZlbCA9IGJnTGV2ZWw7CisKKyAgICBpZiAoYXR0cmlidXRlcyAmIChBX0JPTEQgfCBBX1NUQU5ET1VUKSkgZmdMZXZlbCA9IFVJTlQ4X01BWDsKKyAgICBpZiAoYXR0cmlidXRlcyAmIEFfRElNKSBmZ0xldmVsID4+PSAxLCBiZ0xldmVsID4+PSAxOworCisgICAgeworICAgICAgU2NyZWVuU2VnbWVudENvbG9yICpjZmcsICpjYmc7CisKKyAgICAgIGlmIChhdHRyaWJ1dGVzICYgQV9SRVZFUlNFKSB7CisgICAgICAgIGNmZyA9ICZjaGFyYWN0ZXIuYmFja2dyb3VuZDsKKyAgICAgICAgY2JnID0gJmNoYXJhY3Rlci5mb3JlZ3JvdW5kOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgY2ZnID0gJmNoYXJhY3Rlci5mb3JlZ3JvdW5kOworICAgICAgICBjYmcgPSAmY2hhcmFjdGVyLmJhY2tncm91bmQ7CisgICAgICB9CisKKyAgICAgIHNldENvbG9yKGNmZywgZmdDb2xvciwgZmdMZXZlbCk7CisgICAgICBzZXRDb2xvcihjYmcsIGJnQ29sb3IsIGJnTGV2ZWwpOworICAgIH0KKyAgfQorCisgIGlmIChhdHRyaWJ1dGVzICYgQV9CTElOSykgY2hhcmFjdGVyLmJsaW5rID0gMTsKKyAgaWYgKGF0dHJpYnV0ZXMgJiBBX1VOREVSTElORSkgY2hhcmFjdGVyLnVuZGVybGluZSA9IDE7CisKKyAgeworICAgIFNjcmVlblNlZ21lbnRDaGFyYWN0ZXIgKmxvY2F0aW9uID0gZ2V0U2NyZWVuQ2hhcmFjdGVyKHNlZ21lbnRIZWFkZXIsIHJvdywgY29sdW1uLCBlbmQpOworICAgICpsb2NhdGlvbiA9IGNoYXJhY3RlcjsKKyAgICByZXR1cm4gbG9jYXRpb247CisgIH0KK30KKworc3RhdGljIFNjcmVlblNlZ21lbnRDaGFyYWN0ZXIgKgorc2V0Q3VycmVudENoYXJhY3RlciAoY29uc3QgU2NyZWVuU2VnbWVudENoYXJhY3RlciAqKmVuZCkgeworICByZXR1cm4gc2V0Q2hhcmFjdGVyKHNlZ21lbnRIZWFkZXItPmN1cnNvclJvdywgc2VnbWVudEhlYWRlci0+Y3Vyc29yQ29sdW1uLCBlbmQpOworfQorCitzdGF0aWMgU2NyZWVuU2VnbWVudENoYXJhY3RlciAqCitnZXRDdXJyZW50Q2hhcmFjdGVyIChjb25zdCBTY3JlZW5TZWdtZW50Q2hhcmFjdGVyICoqZW5kKSB7CisgIHJldHVybiBnZXRTY3JlZW5DaGFyYWN0ZXIoc2VnbWVudEhlYWRlciwgc2VnbWVudEhlYWRlci0+Y3Vyc29yUm93LCBzZWdtZW50SGVhZGVyLT5jdXJzb3JDb2x1bW4sIGVuZCk7Cit9CisKK3N0YXRpYyB2b2lkCitmaWxsQ2hhcmFjdGVycyAodW5zaWduZWQgaW50IHJvdywgdW5zaWduZWQgaW50IGNvbHVtbiwgdW5zaWduZWQgaW50IGNvdW50KSB7CisgIFNjcmVlblNlZ21lbnRDaGFyYWN0ZXIgKmZyb20gPSBzZXRDaGFyYWN0ZXIocm93LCBjb2x1bW4sIE5VTEwpOworICBwcm9wYWdhdGVTY3JlZW5DaGFyYWN0ZXIoZnJvbSwgKGZyb20gKyBjb3VudCkpOworfQorCitzdGF0aWMgdm9pZAorZmlsbFJvd3MgKHVuc2lnbmVkIGludCByb3csIHVuc2lnbmVkIGludCBjb3VudCkgeworICBjb25zdCBTY3JlZW5TZWdtZW50Q2hhcmFjdGVyICpjaGFyYWN0ZXIgPSBzZXRDaGFyYWN0ZXIocm93LCAwLCBOVUxMKTsKKyAgZmlsbFNjcmVlblJvd3Moc2VnbWVudEhlYWRlciwgcm93LCBjb3VudCwgY2hhcmFjdGVyKTsKK30KKworc3RhdGljIHVuc2lnbmVkIGludCBzY3JvbGxSZWdpb25Ub3A7CitzdGF0aWMgdW5zaWduZWQgaW50IHNjcm9sbFJlZ2lvbkJvdHRvbTsKKworc3RhdGljIHVuc2lnbmVkIGludCBzYXZlZEN1cnNvclJvdyA9IDA7CitzdGF0aWMgdW5zaWduZWQgaW50IHNhdmVkQ3Vyc29yQ29sdW1uID0gMDsKKworaW50CitwdHlCZWdpblNjcmVlbiAoUHR5T2JqZWN0ICpwdHksIGludCBkcml2ZXJEaXJlY3RpdmVzKSB7CisgIGhhdmVUZXJtaW5hbE1lc3NhZ2VRdWV1ZSA9IDA7CisgIGhhdmVJbnB1dFRleHRIYW5kbGVyID0gMDsKKworICBpZiAoaW5pdHNjcigpKSB7CisgICAgaW50cmZsdXNoKHN0ZHNjciwgRkFMU0UpOworICAgIGtleXBhZChzdGRzY3IsIFRSVUUpOworCisgICAgcmF3KCk7CisgICAgbm9lY2hvKCk7CisKKyAgICBzY3JvbGxvayhzdGRzY3IsIFRSVUUpOworICAgIGlkbG9rKHN0ZHNjciwgVFJVRSk7CisgICAgaWRjb2soc3Rkc2NyLCBUUlVFKTsKKworICAgIHNjcm9sbFJlZ2lvblRvcCA9IGdldGJlZ3koc3Rkc2NyKTsKKyAgICBzY3JvbGxSZWdpb25Cb3R0b20gPSBnZXRtYXh5KHN0ZHNjcikgLSAxOworCisgICAgc2F2ZWRDdXJzb3JSb3cgPSAwOworICAgIHNhdmVkQ3Vyc29yQ29sdW1uID0gMDsKKworICAgIGhhc0NvbG9ycyA9IGhhc19jb2xvcnMoKTsKKyAgICBpbml0aWFsaXplQ29sb3JzKENPTE9SX1dISVRFLCBDT0xPUl9CTEFDSyk7CisKKyAgICBpZiAoaGFzQ29sb3JzKSB7CisgICAgICBzdGFydF9jb2xvcigpOworICAgICAgaW5pdGlhbGl6ZUNvbG9yUGFpcnMoKTsKKyAgICB9CisKKyAgICBpZiAoY3JlYXRlU2VnbWVudChwdHlHZXRQYXRoKHB0eSksIGRyaXZlckRpcmVjdGl2ZXMpKSB7CisgICAgICBzZWdtZW50SGVhZGVyLT5zY3JlZW5OdW1iZXIgPSAxOworICAgICAgc3RvcmVDdXJzb3JQb3NpdGlvbigpOworCisgICAgICBoYXZlSW5wdXRUZXh0SGFuZGxlciA9IHN0YXJ0VGVybWluYWxNZXNzYWdlUmVjZWl2ZXIoCisgICAgICAgICJ0ZXJtaW5hbC1pbnB1dC10ZXh0LXJlY2VpdmVyIiwgVEVSTV9NU0dfSU5QVVRfVEVYVCwKKyAgICAgICAgMFgyMDAsIG1lc3NhZ2VIYW5kbGVyX0lucHV0VGV4dCwgcHR5CisgICAgICApOworCisgICAgICByZXR1cm4gMTsKKyAgICB9CisKKyAgICBlbmR3aW4oKTsKKyAgfQorCisgIHJldHVybiAwOworfQorCit2b2lkCitwdHlFbmRTY3JlZW4gKHZvaWQpIHsKKyAgZW5kd2luKCk7CisgIHNlbmRUZXJtaW5hbE1lc3NhZ2UoVEVSTV9NU0dfRU1VTEFUT1JfRVhJVElORywgTlVMTCwgMCk7CisgIGRldGFjaFNjcmVlblNlZ21lbnQoc2VnbWVudEhlYWRlcik7CisgIGRlc3Ryb3lTZWdtZW50KCk7Cit9CisKK3ZvaWQKK3B0eVJlZnJlc2hTY3JlZW4gKHZvaWQpIHsKKyAgc2VuZFRlcm1pbmFsTWVzc2FnZShURVJNX01TR19TRUdNRU5UX1VQREFURUQsIE5VTEwsIDApOworICByZWZyZXNoKCk7Cit9CisKK3ZvaWQKK3B0eVNldEN1cnNvclBvc2l0aW9uICh1bnNpZ25lZCBpbnQgcm93LCB1bnNpZ25lZCBpbnQgY29sdW1uKSB7CisgIG1vdmUocm93LCBjb2x1bW4pOworICBzdG9yZUN1cnNvclBvc2l0aW9uKCk7Cit9CisKK3ZvaWQKK3B0eVNldEN1cnNvclJvdyAodW5zaWduZWQgaW50IHJvdykgeworICBwdHlTZXRDdXJzb3JQb3NpdGlvbihyb3csIHNlZ21lbnRIZWFkZXItPmN1cnNvckNvbHVtbik7Cit9CisKK3ZvaWQKK3B0eVNldEN1cnNvckNvbHVtbiAodW5zaWduZWQgaW50IGNvbHVtbikgeworICBwdHlTZXRDdXJzb3JQb3NpdGlvbihzZWdtZW50SGVhZGVyLT5jdXJzb3JSb3csIGNvbHVtbik7Cit9CisKK3ZvaWQKK3B0eVNhdmVDdXJzb3JQb3NpdGlvbiAodm9pZCkgeworICBzYXZlZEN1cnNvclJvdyA9IHNlZ21lbnRIZWFkZXItPmN1cnNvclJvdzsKKyAgc2F2ZWRDdXJzb3JDb2x1bW4gPSBzZWdtZW50SGVhZGVyLT5jdXJzb3JDb2x1bW47Cit9CisKK3ZvaWQKK3B0eVJlc3RvcmVDdXJzb3JQb3NpdGlvbiAodm9pZCkgeworICBwdHlTZXRDdXJzb3JQb3NpdGlvbihzYXZlZEN1cnNvclJvdywgc2F2ZWRDdXJzb3JDb2x1bW4pOworfQorCit2b2lkCitwdHlTZXRTY3JvbGxSZWdpb24gKHVuc2lnbmVkIGludCB0b3AsIHVuc2lnbmVkIGludCBib3R0b20pIHsKKyAgc2Nyb2xsUmVnaW9uVG9wID0gdG9wOworICBzY3JvbGxSZWdpb25Cb3R0b20gPSBib3R0b207CisgIHNldHNjcnJlZyh0b3AsIGJvdHRvbSk7Cit9CisKK3N0YXRpYyBpbnQKK2lzV2l0aGluU2Nyb2xsUmVnaW9uICh1bnNpZ25lZCBpbnQgcm93KSB7CisgIGlmIChyb3cgPCBzY3JvbGxSZWdpb25Ub3ApIHJldHVybiAwOworICBpZiAocm93ID4gc2Nyb2xsUmVnaW9uQm90dG9tKSByZXR1cm4gMDsKKyAgcmV0dXJuIDE7Cit9CisKK2ludAorcHR5QW1XaXRoaW5TY3JvbGxSZWdpb24gKHZvaWQpIHsKKyAgcmV0dXJuIGlzV2l0aGluU2Nyb2xsUmVnaW9uKHNlZ21lbnRIZWFkZXItPmN1cnNvclJvdyk7Cit9CisKK3N0YXRpYyB2b2lkCitzY3JvbGxSb3dzICh1bnNpZ25lZCBpbnQgY291bnQsIGludCBkb3duKSB7CisgIHVuc2lnbmVkIGludCB0b3AgPSBzY3JvbGxSZWdpb25Ub3A7CisgIHVuc2lnbmVkIGludCBib3R0b20gPSBzY3JvbGxSZWdpb25Cb3R0b20gKyAxOworICB1bnNpZ25lZCBpbnQgc2l6ZSA9IGJvdHRvbSAtIHRvcDsKKyAgaWYgKGNvdW50ID4gc2l6ZSkgY291bnQgPSBzaXplOworICB1bnNpZ25lZCBpbnQgY2xlYXI7CisKKyAgaWYgKGRvd24pIHsKKyAgICBzY3JsKC1jb3VudCk7CisgICAgY2xlYXIgPSB0b3A7CisgIH0gZWxzZSB7CisgICAgc2NybChjb3VudCk7CisgICAgY2xlYXIgPSBib3R0b20gLSBjb3VudDsKKyAgfQorCisgIHNjcm9sbFNjcmVlblJvd3Moc2VnbWVudEhlYWRlciwgdG9wLCBzaXplLCBjb3VudCwgZG93bik7CisgIGZpbGxSb3dzKGNsZWFyLCBjb3VudCk7Cit9CisKK3ZvaWQKK3B0eVNjcm9sbERvd24gKHVuc2lnbmVkIGludCBjb3VudCkgeworICBzY3JvbGxSb3dzKGNvdW50LCB0cnVlKTsKK30KKwordm9pZAorcHR5U2Nyb2xsVXAgKHVuc2lnbmVkIGludCBjb3VudCkgeworICBzY3JvbGxSb3dzKGNvdW50LCBmYWxzZSk7Cit9CisKK3ZvaWQKK3B0eU1vdmVDdXJzb3JVcCAodW5zaWduZWQgaW50IGFtb3VudCkgeworICB1bnNpZ25lZCBpbnQgcm93ID0gc2VnbWVudEhlYWRlci0+Y3Vyc29yUm93OworICBpZiAoYW1vdW50ID4gcm93KSBhbW91bnQgPSByb3c7CisgIGlmIChhbW91bnQgPiAwKSBwdHlTZXRDdXJzb3JSb3cocm93LWFtb3VudCk7Cit9CisKK3ZvaWQKK3B0eU1vdmVDdXJzb3JEb3duICh1bnNpZ25lZCBpbnQgYW1vdW50KSB7CisgIHVuc2lnbmVkIGludCBvbGRSb3cgPSBzZWdtZW50SGVhZGVyLT5jdXJzb3JSb3c7CisgIHVuc2lnbmVkIGludCBuZXdSb3cgPSBNSU4ob2xkUm93K2Ftb3VudCwgTElORVMtMSk7CisgIGlmIChuZXdSb3cgIT0gb2xkUm93KSBwdHlTZXRDdXJzb3JSb3cobmV3Um93KTsKK30KKwordm9pZAorcHR5TW92ZUN1cnNvckxlZnQgKHVuc2lnbmVkIGludCBhbW91bnQpIHsKKyAgdW5zaWduZWQgaW50IGNvbHVtbiA9IHNlZ21lbnRIZWFkZXItPmN1cnNvckNvbHVtbjsKKyAgaWYgKGFtb3VudCA+IGNvbHVtbikgYW1vdW50ID0gY29sdW1uOworICBpZiAoYW1vdW50ID4gMCkgcHR5U2V0Q3Vyc29yQ29sdW1uKGNvbHVtbi1hbW91bnQpOworfQorCit2b2lkCitwdHlNb3ZlQ3Vyc29yUmlnaHQgKHVuc2lnbmVkIGludCBhbW91bnQpIHsKKyAgdW5zaWduZWQgaW50IG9sZENvbHVtbiA9IHNlZ21lbnRIZWFkZXItPmN1cnNvckNvbHVtbjsKKyAgdW5zaWduZWQgaW50IG5ld0NvbHVtbiA9IE1JTihvbGRDb2x1bW4rYW1vdW50LCBDT0xTLTEpOworICBpZiAobmV3Q29sdW1uICE9IG9sZENvbHVtbikgcHR5U2V0Q3Vyc29yQ29sdW1uKG5ld0NvbHVtbik7Cit9CisKK3ZvaWQKK3B0eU1vdmVVcDEgKHZvaWQpIHsKKyAgaWYgKHNlZ21lbnRIZWFkZXItPmN1cnNvclJvdyA9PSBzY3JvbGxSZWdpb25Ub3ApIHsKKyAgICBwdHlTY3JvbGxEb3duKDEpOworICB9IGVsc2UgeworICAgIHB0eU1vdmVDdXJzb3JVcCgxKTsKKyAgfQorfQorCit2b2lkCitwdHlNb3ZlRG93bjEgKHZvaWQpIHsKKyAgaWYgKHNlZ21lbnRIZWFkZXItPmN1cnNvclJvdyA9PSBzY3JvbGxSZWdpb25Cb3R0b20pIHsKKyAgICBwdHlTY3JvbGxVcCgxKTsKKyAgfSBlbHNlIHsKKyAgICBwdHlNb3ZlQ3Vyc29yRG93bigxKTsKKyAgfQorfQorCit2b2lkCitwdHlUYWJCYWNrd2FyZCAodm9pZCkgeworICBwdHlTZXRDdXJzb3JDb2x1bW4oKChzZWdtZW50SGVhZGVyLT5jdXJzb3JDb2x1bW4gLSAxKSAvIFRBQlNJWkUpICogVEFCU0laRSk7Cit9CisKK3ZvaWQKK3B0eVRhYkZvcndhcmQgKHZvaWQpIHsKKyAgcHR5U2V0Q3Vyc29yQ29sdW1uKCgoc2VnbWVudEhlYWRlci0+Y3Vyc29yQ29sdW1uIC8gVEFCU0laRSkgKyAxKSAqIFRBQlNJWkUpOworfQorCit2b2lkCitwdHlJbnNlcnRMaW5lcyAodW5zaWduZWQgaW50IGNvdW50KSB7CisgIGlmIChwdHlBbVdpdGhpblNjcm9sbFJlZ2lvbigpKSB7CisgICAgdW5zaWduZWQgaW50IHJvdyA9IHNlZ21lbnRIZWFkZXItPmN1cnNvclJvdzsKKyAgICB1bnNpZ25lZCBpbnQgb2xkVG9wID0gc2Nyb2xsUmVnaW9uVG9wOworICAgIHVuc2lnbmVkIGludCBvbGRCb3R0b20gPSBzY3JvbGxSZWdpb25Cb3R0b207CisKKyAgICBwdHlTZXRTY3JvbGxSZWdpb24ocm93LCBzY3JvbGxSZWdpb25Cb3R0b20pOworICAgIHB0eVNjcm9sbERvd24oY291bnQpOworICAgIHB0eVNldFNjcm9sbFJlZ2lvbihvbGRUb3AsIG9sZEJvdHRvbSk7CisgIH0KK30KKwordm9pZAorcHR5RGVsZXRlTGluZXMgKHVuc2lnbmVkIGludCBjb3VudCkgeworICBpZiAocHR5QW1XaXRoaW5TY3JvbGxSZWdpb24oKSkgeworICAgIHVuc2lnbmVkIGludCByb3cgPSBzZWdtZW50SGVhZGVyLT5jdXJzb3JSb3c7CisgICAgdW5zaWduZWQgaW50IG9sZFRvcCA9IHNjcm9sbFJlZ2lvblRvcDsKKyAgICB1bnNpZ25lZCBpbnQgb2xkQm90dG9tID0gc2Nyb2xsUmVnaW9uQm90dG9tOworCisgICAgcHR5U2V0U2Nyb2xsUmVnaW9uKHJvdywgc2Nyb2xsUmVnaW9uQm90dG9tKTsKKyAgICBwdHlTY3JvbGxVcChjb3VudCk7CisgICAgcHR5U2V0U2Nyb2xsUmVnaW9uKG9sZFRvcCwgb2xkQm90dG9tKTsKKyAgfQorfQorCit2b2lkCitwdHlJbnNlcnRDaGFyYWN0ZXJzICh1bnNpZ25lZCBpbnQgY291bnQpIHsKKyAgY29uc3QgU2NyZWVuU2VnbWVudENoYXJhY3RlciAqZW5kOworICBTY3JlZW5TZWdtZW50Q2hhcmFjdGVyICpmcm9tID0gZ2V0Q3VycmVudENoYXJhY3RlcigmZW5kKTsKKworICBpZiAoKGZyb20gKyBjb3VudCkgPiBlbmQpIGNvdW50ID0gZW5kIC0gZnJvbTsKKyAgU2NyZWVuU2VnbWVudENoYXJhY3RlciAqdG8gPSBmcm9tICsgY291bnQ7CisgIG1vdmVTY3JlZW5DaGFyYWN0ZXJzKHRvLCBmcm9tLCAoZW5kIC0gdG8pKTsKKworICB7CisgICAgdW5zaWduZWQgaW50IGNvdW50ZXIgPSBjb3VudDsKKyAgICB3aGlsZSAoY291bnRlci0tID4gMCkgaW5zY2goJyAnKTsKKyAgfQorCisgIGZpbGxDaGFyYWN0ZXJzKHNlZ21lbnRIZWFkZXItPmN1cnNvclJvdywgc2VnbWVudEhlYWRlci0+Y3Vyc29yQ29sdW1uLCBjb3VudCk7Cit9CisKK3ZvaWQKK3B0eURlbGV0ZUNoYXJhY3RlcnMgKHVuc2lnbmVkIGludCBjb3VudCkgeworICBjb25zdCBTY3JlZW5TZWdtZW50Q2hhcmFjdGVyICplbmQ7CisgIFNjcmVlblNlZ21lbnRDaGFyYWN0ZXIgKnRvID0gZ2V0Q3VycmVudENoYXJhY3RlcigmZW5kKTsKKworICBpZiAoKHRvICsgY291bnQpID4gZW5kKSBjb3VudCA9IGVuZCAtIHRvOworICBTY3JlZW5TZWdtZW50Q2hhcmFjdGVyICpmcm9tID0gdG8gKyBjb3VudDsKKyAgaWYgKGZyb20gPCBlbmQpIG1vdmVTY3JlZW5DaGFyYWN0ZXJzKHRvLCBmcm9tLCAoZW5kIC0gZnJvbSkpOworCisgIHsKKyAgICB1bnNpZ25lZCBpbnQgY291bnRlciA9IGNvdW50OworICAgIHdoaWxlIChjb3VudGVyLS0gPiAwKSBkZWxjaCgpOworICB9CisKKyAgZmlsbENoYXJhY3RlcnMoc2VnbWVudEhlYWRlci0+Y3Vyc29yUm93LCAoQ09MUyAtIGNvdW50KSwgY291bnQpOworfQorCit2b2lkCitwdHlBZGRDaGFyYWN0ZXIgKHVuc2lnbmVkIGNoYXIgY2hhcmFjdGVyKSB7CisgIHVuc2lnbmVkIGludCByb3cgPSBzZWdtZW50SGVhZGVyLT5jdXJzb3JSb3c7CisgIHVuc2lnbmVkIGludCBjb2x1bW4gPSBzZWdtZW50SGVhZGVyLT5jdXJzb3JDb2x1bW47CisKKyAgYWRkY2goY2hhcmFjdGVyKTsKKyAgc3RvcmVDdXJzb3JQb3NpdGlvbigpOworCisgIHNldENoYXJhY3Rlcihyb3csIGNvbHVtbiwgTlVMTCk7Cit9CisKK3ZvaWQKK3B0eVNldEN1cnNvclZpc2liaWxpdHkgKHVuc2lnbmVkIGludCB2aXNpYmlsaXR5KSB7CisgIGN1cnNfc2V0KHZpc2liaWxpdHkpOworfQorCit2b2lkCitwdHlTZXRBdHRyaWJ1dGVzIChhdHRyX3QgYXR0cmlidXRlcykgeworICBhdHRyc2V0KGF0dHJpYnV0ZXMpOworfQorCit2b2lkCitwdHlBZGRBdHRyaWJ1dGVzIChhdHRyX3QgYXR0cmlidXRlcykgeworICBhdHRyb24oYXR0cmlidXRlcyk7Cit9CisKK3ZvaWQKK3B0eVJlbW92ZUF0dHJpYnV0ZXMgKGF0dHJfdCBhdHRyaWJ1dGVzKSB7CisgIGF0dHJvZmYoYXR0cmlidXRlcyk7Cit9CisKK3N0YXRpYyB2b2lkCitzZXRDaGFyYWN0ZXJDb2xvcnMgKHZvaWQpIHsKKyAgYXR0cm9mZihBX0NPTE9SKTsKKyAgYXR0cm9uKENPTE9SX1BBSVIodG9Db2xvclBhaXIoY3VycmVudEZvcmVncm91bmRDb2xvciwgY3VycmVudEJhY2tncm91bmRDb2xvcikpKTsKK30KKwordm9pZAorcHR5U2V0Rm9yZWdyb3VuZENvbG9yIChpbnQgY29sb3IpIHsKKyAgaWYgKGNvbG9yID09IC0xKSBjb2xvciA9IGRlZmF1bHRGb3JlZ3JvdW5kQ29sb3I7CisgIGN1cnJlbnRGb3JlZ3JvdW5kQ29sb3IgPSBjb2xvcjsKKyAgc2V0Q2hhcmFjdGVyQ29sb3JzKCk7Cit9CisKK3ZvaWQKK3B0eVNldEJhY2tncm91bmRDb2xvciAoaW50IGNvbG9yKSB7CisgIGlmIChjb2xvciA9PSAtMSkgY29sb3IgPSBkZWZhdWx0QmFja2dyb3VuZENvbG9yOworICBjdXJyZW50QmFja2dyb3VuZENvbG9yID0gY29sb3I7CisgIHNldENoYXJhY3RlckNvbG9ycygpOworfQorCit2b2lkCitwdHlDbGVhclRvRW5kT2ZMaW5lICh2b2lkKSB7CisgIGNscnRvZW9sKCk7CisKKyAgY29uc3QgU2NyZWVuU2VnbWVudENoYXJhY3RlciAqdG87CisgIFNjcmVlblNlZ21lbnRDaGFyYWN0ZXIgKmZyb20gPSBzZXRDdXJyZW50Q2hhcmFjdGVyKCZ0byk7CisgIHByb3BhZ2F0ZVNjcmVlbkNoYXJhY3Rlcihmcm9tLCB0byk7Cit9CisKK3ZvaWQKK3B0eUNsZWFyVG9CZWdpbm5pbmdPZkxpbmUgKHZvaWQpIHsKKyAgdW5zaWduZWQgaW50IGNvbHVtbiA9IHNlZ21lbnRIZWFkZXItPmN1cnNvckNvbHVtbjsKKyAgaWYgKGNvbHVtbiA+IDApIHB0eVNldEN1cnNvckNvbHVtbigwKTsKKworICB3aGlsZSAoMSkgeworICAgIHB0eUFkZENoYXJhY3RlcignICcpOworICAgIGlmIChzZWdtZW50SGVhZGVyLT5jdXJzb3JDb2x1bW4gPiBjb2x1bW4pIGJyZWFrOworICB9CisKKyAgcHR5U2V0Q3Vyc29yQ29sdW1uKGNvbHVtbik7Cit9CisKK3ZvaWQKK3B0eUNsZWFyVG9FbmRPZkRpc3BsYXkgKHZvaWQpIHsKKyAgY2xydG9ib3QoKTsKKworICBpZiAoaGF2ZVNjcmVlblJvd0FycmF5KHNlZ21lbnRIZWFkZXIpKSB7CisgICAgcHR5Q2xlYXJUb0VuZE9mTGluZSgpOworCisgICAgdW5zaWduZWQgaW50IGJvdHRvbVJvd3MgPSBzZWdtZW50SGVhZGVyLT5zY3JlZW5IZWlnaHQgLSBzZWdtZW50SGVhZGVyLT5jdXJzb3JSb3cgLSAxOworICAgIGlmIChib3R0b21Sb3dzID4gMCkgZmlsbFJvd3MoKHNlZ21lbnRIZWFkZXItPmN1cnNvclJvdyArIDEpLCBib3R0b21Sb3dzKTsKKyAgfSBlbHNlIHsKKyAgICBTY3JlZW5TZWdtZW50Q2hhcmFjdGVyICpmcm9tID0gc2V0Q3VycmVudENoYXJhY3RlcihOVUxMKTsKKyAgICBjb25zdCBTY3JlZW5TZWdtZW50Q2hhcmFjdGVyICp0bzsKKyAgICBnZXRTY3JlZW5DaGFyYWN0ZXJBcnJheShzZWdtZW50SGVhZGVyLCAmdG8pOworICAgIHByb3BhZ2F0ZVNjcmVlbkNoYXJhY3Rlcihmcm9tLCB0byk7CisgIH0KK30KZGlmZiAtLWdpdCBhL1Byb2dyYW1zL3B0eV90ZXJtaW5hbC5jIGIvUHJvZ3JhbXMvcHR5X3Rlcm1pbmFsLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTc5ZDU1YgotLS0gL2Rldi9udWxsCisrKyBiL1Byb2dyYW1zL3B0eV90ZXJtaW5hbC5jCkBAIC0wLDAgKzEsODQxIEBACisvKgorICogQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyAqICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyAqCisgKiBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorICoKKyAqIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyAqCisgKiBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisgKi8KKworLyogdW5pbXBsZW1lbnRlZCBvdXRwdXQgYWN0aW9ucworICogZW5hY3M9XEUoQlxFKTAgLSBlbmFibGUgYWx0ZXJuYXRlIGNoYXJzZXQgbW9kZQorICogaHRzPVxFSCAtIHNldCB0YWIKKyAqIGttb3VzPVxFW00gLSBtb3VzZSBldmVudAorICogdGJjPVxFWzNnIC0gY2xlYXIgYWxsIHRhYnMKKyAqIHU2PVxFWyVpJWQ7JWRSIC0gdXNlciBzdHJpbmcgNgorICogdTc9XEVbNm4gLSB1c2VyIHN0cmluZyA3CisgKiB1OD1cRVs/MTsyYyAtIHVzZXIgc3RyaW5nIDgKKyAqIHU5PVxFW2MgLSB1c2VyIHN0cmluZyA5CisgKi8KKworI2luY2x1ZGUgInByb2xvZ3VlLmgiCisKKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworI2luY2x1ZGUgImxvZy5oIgorI2luY2x1ZGUgInN0cmZtdC5oIgorI2luY2x1ZGUgInB0eV90ZXJtaW5hbC5oIgorI2luY2x1ZGUgInB0eV9zY3JlZW4uaCIKKyNpbmNsdWRlICJzY3JfdHlwZXMuaCIKKyNpbmNsdWRlICJhc2NpaS5oIgorCitzdGF0aWMgdW5zaWduZWQgY2hhciB0ZXJtaW5hbExvZ0xldmVsID0gTE9HX0RFQlVHOworc3RhdGljIHVuc2lnbmVkIGNoYXIgbG9nSW5wdXQgPSAwOworc3RhdGljIHVuc2lnbmVkIGNoYXIgbG9nT3V0cHV0ID0gMDsKK3N0YXRpYyB1bnNpZ25lZCBjaGFyIGxvZ1NlcXVlbmNlcyA9IDA7CitzdGF0aWMgdW5zaWduZWQgY2hhciBsb2dVbmV4cGVjdGVkID0gMDsKKwordm9pZAorcHR5U2V0VGVybWluYWxMb2dMZXZlbCAodW5zaWduZWQgY2hhciBsZXZlbCkgeworICB0ZXJtaW5hbExvZ0xldmVsID0gbGV2ZWw7CisgIHB0eVNldFNjcmVlbkxvZ0xldmVsKGxldmVsKTsKK30KKwordm9pZAorcHR5U2V0TG9nVGVybWluYWxJbnB1dCAoaW50IHllcykgeworICBsb2dJbnB1dCA9IHllczsKK30KKwordm9pZAorcHR5U2V0TG9nVGVybWluYWxPdXRwdXQgKGludCB5ZXMpIHsKKyAgbG9nT3V0cHV0ID0geWVzOworfQorCit2b2lkCitwdHlTZXRMb2dUZXJtaW5hbFNlcXVlbmNlcyAoaW50IHllcykgeworICBsb2dTZXF1ZW5jZXMgPSB5ZXM7Cit9CisKK3ZvaWQKK3B0eVNldExvZ1VuZXhwZWN0ZWRUZXJtaW5hbElPIChpbnQgeWVzKSB7CisgIGxvZ1VuZXhwZWN0ZWQgPSB5ZXM7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyIHB0eVRlcm1pbmFsVHlwZVtdID0gInNjcmVlbiI7CisKK2NvbnN0IGNoYXIgKgorcHR5R2V0VGVybWluYWxUeXBlICh2b2lkKSB7CisgIHJldHVybiBwdHlUZXJtaW5hbFR5cGU7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBjaGFyIGluc2VydE1vZGUgPSAwOworc3RhdGljIHVuc2lnbmVkIGNoYXIgYWx0ZXJuYXRlQ2hhcnNldE1vZGUgPSAwOworc3RhdGljIHVuc2lnbmVkIGNoYXIga2V5cGFkVHJhbnNtaXRNb2RlID0gMDsKK3N0YXRpYyB1bnNpZ25lZCBjaGFyIGJyYWNrZXRlZFBhc3RlTW9kZSA9IDA7CitzdGF0aWMgdW5zaWduZWQgY2hhciBhYnNvbHV0ZUN1cnNvckFkZHJlc3NpbmdNb2RlID0gMDsKKworaW50CitwdHlCZWdpblRlcm1pbmFsIChQdHlPYmplY3QgKnB0eSwgaW50IGRyaXZlckRpcmVjdGl2ZXMpIHsKKyAgaW5zZXJ0TW9kZSA9IDA7CisgIGFsdGVybmF0ZUNoYXJzZXRNb2RlID0gMDsKKyAga2V5cGFkVHJhbnNtaXRNb2RlID0gMDsKKyAgYnJhY2tldGVkUGFzdGVNb2RlID0gMDsKKyAgYWJzb2x1dGVDdXJzb3JBZGRyZXNzaW5nTW9kZSA9IDA7CisKKyAgcmV0dXJuIHB0eUJlZ2luU2NyZWVuKHB0eSwgZHJpdmVyRGlyZWN0aXZlcyk7Cit9CisKK3ZvaWQKK3B0eUVuZFRlcm1pbmFsICh2b2lkKSB7CisgIHB0eUVuZFNjcmVlbigpOworfQorCitzdGF0aWMgdm9pZAorc291bmRBbGVydCAodm9pZCkgeworICBiZWVwKCk7Cit9CisKK3N0YXRpYyB2b2lkCitzaG93QWxlcnQgKHZvaWQpIHsKKyAgZmxhc2goKTsKK30KKworaW50CitwdHlQcm9jZXNzVGVybWluYWxJbnB1dCAoUHR5T2JqZWN0ICpwdHkpIHsKKyAgaW50IGNoYXJhY3RlciA9IGdldGNoKCk7CisKKyAgaWYgKGxvZ0lucHV0KSB7CisgICAgY29uc3QgY2hhciAqbmFtZSA9IGtleW5hbWUoY2hhcmFjdGVyKTsKKyAgICBpZiAoIW5hbWUpIG5hbWUgPSAidW5rbm93biI7CisgICAgbG9nTWVzc2FnZSh0ZXJtaW5hbExvZ0xldmVsLCAiaW5wdXQ6IDBYJTAyWCAoJXMpIiwgY2hhcmFjdGVyLCBuYW1lKTsKKyAgfQorCisgIGlmIChjaGFyYWN0ZXIgPiBVSU5UOF9NQVgpIHsKKyAgICBTY3JlZW5LZXkga2V5ID0gMDsKKworICAgICNkZWZpbmUgS0VZKGZyb20sIHRvKSBjYXNlIEtFWV8jI2Zyb206IGtleSA9IFNDUl9LRVlfIyN0bzsgYnJlYWs7CisgICAgc3dpdGNoIChjaGFyYWN0ZXIpIHsKKyAgICAgIEtFWShFTlRFUiAgICAsIEVOVEVSKQorICAgICAgS0VZKEJBQ0tTUEFDRSwgQkFDS1NQQUNFKQorCisgICAgICBLRVkoTEVGVCAgICAgLCBDVVJTT1JfTEVGVCkKKyAgICAgIEtFWShSSUdIVCAgICAsIENVUlNPUl9SSUdIVCkKKyAgICAgIEtFWShVUCAgICAgICAsIENVUlNPUl9VUCkKKyAgICAgIEtFWShET1dOICAgICAsIENVUlNPUl9ET1dOKQorCisgICAgICBLRVkoUFBBR0UgICAgLCBQQUdFX1VQKQorICAgICAgS0VZKE5QQUdFICAgICwgUEFHRV9ET1dOKQorICAgICAgS0VZKEhPTUUgICAgICwgSE9NRSkKKyAgICAgIEtFWShFTkQgICAgICAsIEVORCkKKyAgICAgIEtFWShJQyAgICAgICAsIElOU0VSVCkKKyAgICAgIEtFWShEQyAgICAgICAsIERFTEVURSkKKworICAgICAgS0VZKEYoIDEpICAgICwgRjEpCisgICAgICBLRVkoRiggMikgICAgLCBGMikKKyAgICAgIEtFWShGKCAzKSAgICAsIEYzKQorICAgICAgS0VZKEYoIDQpICAgICwgRjQpCisgICAgICBLRVkoRiggNSkgICAgLCBGNSkKKyAgICAgIEtFWShGKCA2KSAgICAsIEY2KQorICAgICAgS0VZKEYoIDcpICAgICwgRjcpCisgICAgICBLRVkoRiggOCkgICAgLCBGOCkKKyAgICAgIEtFWShGKCA5KSAgICAsIEY5KQorICAgICAgS0VZKEYoMTApICAgICwgRjEwKQorICAgICAgS0VZKEYoMTEpICAgICwgRjExKQorICAgICAgS0VZKEYoMTIpICAgICwgRjEyKQorICAgIH0KKyAgICAjdW5kZWYgS0VZCisKKyAgICBpZiAoa2V5KSB7CisgICAgICBpZiAoIXB0eVdyaXRlSW5wdXRDaGFyYWN0ZXIocHR5LCBrZXksIGtleXBhZFRyYW5zbWl0TW9kZSkpIHsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgICB9CisgICAgfSBlbHNlIGlmIChsb2dVbmV4cGVjdGVkKSB7CisgICAgICBjb25zdCBjaGFyICpuYW1lID0ga2V5bmFtZShjaGFyYWN0ZXIpOworICAgICAgaWYgKCFuYW1lKSBuYW1lID0gInVua25vd24iOworICAgICAgbG9nTWVzc2FnZSh0ZXJtaW5hbExvZ0xldmVsLCAidW5leHBlY3RlZCBpbnB1dDogMFglMDJYICglcykiLCBjaGFyYWN0ZXIsIG5hbWUpOworICAgIH0KKworICAgIHJldHVybiAxOworICB9CisKKyAgY2hhciBieXRlID0gY2hhcmFjdGVyOworICByZXR1cm4gcHR5V3JpdGVJbnB1dERhdGEocHR5LCAmYnl0ZSwxKTsKK30KKworc3RhdGljIHVuc2lnbmVkIGNoYXIgb3V0cHV0Qnl0ZUJ1ZmZlclswWDQwXTsKK3N0YXRpYyB1bnNpZ25lZCBjaGFyIG91dHB1dEJ5dGVDb3VudDsKKworc3RhdGljIHZvaWQKK2xvZ1VuZXhwZWN0ZWRTZXF1ZW5jZSAodm9pZCkgeworICBpZiAobG9nVW5leHBlY3RlZCkgeworICAgIGxvZ0J5dGVzKAorICAgICAgdGVybWluYWxMb2dMZXZlbCwgInVuZXhwZWN0ZWQgc2VxdWVuY2UiLAorICAgICAgb3V0cHV0Qnl0ZUJ1ZmZlciwgb3V0cHV0Qnl0ZUNvdW50CisgICAgKTsKKyAgfQorfQorCit0eXBlZGVmIGVudW0geworICBPUFNfQkFTSUMsCisgIE9QU19FU0NBUEUsCisgIE9QU19CUkFDS0VULAorICBPUFNfTlVNQkVSLAorICBPUFNfRElHSVQsCisgIE9QU19BQ1RJT04sCit9IE91dHB1dFBhcnNlclN0YXRlOworCitzdGF0aWMgT3V0cHV0UGFyc2VyU3RhdGUgb3V0cHV0UGFyc2VyU3RhdGU7CitzdGF0aWMgdW5zaWduZWQgY2hhciBvdXRwdXRQYXJzZXJRdWVzdGlvbk1hcms7CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgb3V0cHV0UGFyc2VyTnVtYmVyOworc3RhdGljIHVuc2lnbmVkIGludCBvdXRwdXRQYXJzZXJOdW1iZXJBcnJheVs5XTsKK3N0YXRpYyB1bnNpZ25lZCBjaGFyIG91dHB1dFBhcnNlck51bWJlckNvdW50OworCitzdGF0aWMgdm9pZAorYWRkT3V0cHV0UGFyc2VyTnVtYmVyICh1bnNpZ25lZCBpbnQgbnVtYmVyKSB7CisgIGlmIChvdXRwdXRQYXJzZXJOdW1iZXJDb3VudCA8IEFSUkFZX0NPVU5UKG91dHB1dFBhcnNlck51bWJlckFycmF5KSkgeworICAgIG91dHB1dFBhcnNlck51bWJlckFycmF5W291dHB1dFBhcnNlck51bWJlckNvdW50KytdID0gbnVtYmVyOworICB9Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQKK2dldE91dHB1dEFjdGlvbkNvdW50ICh2b2lkKSB7CisgIGlmIChvdXRwdXRQYXJzZXJOdW1iZXJDb3VudCA9PSAwKSByZXR1cm4gMTsKKyAgcmV0dXJuIG91dHB1dFBhcnNlck51bWJlckFycmF5WzBdOworfQorCitzdGF0aWMgdm9pZAorbG9nT3V0cHV0QWN0aW9uIChjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICpkZXNjcmlwdGlvbikgeworICBpZiAobG9nU2VxdWVuY2VzKSB7CisgICAgY2hhciBwcmVmaXhbMFgxMDBdOworICAgIFNUUl9CRUdJTihwcmVmaXgsIHNpemVvZihwcmVmaXgpKTsKKyAgICBTVFJfUFJJTlRGKCJhY3Rpb246ICVzIiwgbmFtZSk7CisKKyAgICBmb3IgKHVuc2lnbmVkIGludCBpPTA7IGk8b3V0cHV0UGFyc2VyTnVtYmVyQ291bnQ7IGkrPTEpIHsKKyAgICAgIFNUUl9QUklOVEYoIiAldSIsIG91dHB1dFBhcnNlck51bWJlckFycmF5W2ldKTsKKyAgICB9CisKKyAgICBpZiAoZGVzY3JpcHRpb24gJiYgKmRlc2NyaXB0aW9uKSBTVFJfUFJJTlRGKCIgKCVzKSIsIGRlc2NyaXB0aW9uKTsKKyAgICBTVFJfRU5EOworICAgIGxvZ0J5dGVzKHRlcm1pbmFsTG9nTGV2ZWwsICIlcyIsIG91dHB1dEJ5dGVCdWZmZXIsIG91dHB1dEJ5dGVDb3VudCwgcHJlZml4KTsKKyAgfQorfQorCit0eXBlZGVmIGVudW0geworICBPQlBfRE9ORSwKKyAgT0JQX0NPTlRJTlVFLAorICBPQlBfUkVQUk9DRVNTLAorICBPQlBfVU5FWFBFQ1RFRCwKK30gT3V0cHV0Qnl0ZVBhcnNlclJlc3VsdDsKKwordHlwZWRlZiBPdXRwdXRCeXRlUGFyc2VyUmVzdWx0IE91dHB1dEJ5dGVQYXJzZXIgKHVuc2lnbmVkIGNoYXIgYnl0ZSk7CisKK3N0YXRpYyBPdXRwdXRCeXRlUGFyc2VyUmVzdWx0CitwYXJzZU91dHB1dEJ5dGVfQkFTSUMgKHVuc2lnbmVkIGNoYXIgYnl0ZSkgeworICBvdXRwdXRQYXJzZXJRdWVzdGlvbk1hcmsgPSAwOworICBvdXRwdXRQYXJzZXJOdW1iZXJDb3VudCA9IDA7CisKKyAgc3dpdGNoIChieXRlKSB7CisgICAgY2FzZSBBU0NJSV9FU0M6CisgICAgICBvdXRwdXRQYXJzZXJTdGF0ZSA9IE9QU19FU0NBUEU7CisgICAgICByZXR1cm4gT0JQX0NPTlRJTlVFOworCisgICAgY2FzZSBBU0NJSV9CRUw6CisgICAgICBsb2dPdXRwdXRBY3Rpb24oImJlbCIsICJhdWRpYmxlIGFsZXJ0Iik7CisgICAgICBzb3VuZEFsZXJ0KCk7CisgICAgICByZXR1cm4gT0JQX0RPTkU7CisKKyAgICBjYXNlIEFTQ0lJX0JTOgorICAgICAgbG9nT3V0cHV0QWN0aW9uKCJjdWIxIiwgImN1cnNvciBsZWZ0IDEiKTsKKyAgICAgIHB0eU1vdmVDdXJzb3JMZWZ0KDEpOworICAgICAgcmV0dXJuIE9CUF9ET05FOworCisgICAgY2FzZSBBU0NJSV9IVDoKKyAgICAgIGxvZ091dHB1dEFjdGlvbigiaHQiLCAidGFiIGZvcndhcmQiKTsKKyAgICAgIHB0eVRhYkZvcndhcmQoKTsKKyAgICAgIHJldHVybiBPQlBfRE9ORTsKKworICAgIGNhc2UgQVNDSUlfTEY6CisgICAgICBpZiAocHR5QW1XaXRoaW5TY3JvbGxSZWdpb24oKSkgeworICAgICAgICBsb2dPdXRwdXRBY3Rpb24oImluZCIsICJtb3ZlIGRvd24gMSIpOworICAgICAgICBwdHlNb3ZlRG93bjEoKTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIGxvZ091dHB1dEFjdGlvbigiY3VkMSIsICJjdXJzb3IgZG93biAxIik7CisgICAgICAgIHB0eU1vdmVDdXJzb3JEb3duKDEpOworICAgICAgfQorICAgICAgcmV0dXJuIE9CUF9ET05FOworCisgICAgY2FzZSBBU0NJSV9DUjoKKyAgICAgIGxvZ091dHB1dEFjdGlvbigiY3IiLCAiY2FycmlhZ2UgcmV0dXJuIik7CisgICAgICBwdHlTZXRDdXJzb3JDb2x1bW4oMCk7CisgICAgICByZXR1cm4gT0JQX0RPTkU7CisKKyAgICBjYXNlIEFTQ0lJX1NPOgorICAgICAgbG9nT3V0cHV0QWN0aW9uKCJzbWFjcyIsICJhbHRlcm5hdGUgY2hhcnNldCBvbiIpOworICAgICAgYWx0ZXJuYXRlQ2hhcnNldE1vZGUgPSAxOworICAgICAgcmV0dXJuIE9CUF9ET05FOworCisgICAgY2FzZSBBU0NJSV9TSToKKyAgICAgIGxvZ091dHB1dEFjdGlvbigicm1hY3MiLCAiYWx0ZXJuYXRlIGNoYXJzZXQgb2ZmIik7CisgICAgICBhbHRlcm5hdGVDaGFyc2V0TW9kZSA9IDA7CisgICAgICByZXR1cm4gT0JQX0RPTkU7CisKKyAgICBkZWZhdWx0OiB7CisgICAgICBpZiAobG9nT3V0cHV0KSB7CisgICAgICAgIGxvZ01lc3NhZ2UodGVybWluYWxMb2dMZXZlbCwgIm91dHB1dDogMFglMDJYIiwgYnl0ZSk7CisgICAgICB9CisKKyAgICAgIGlmIChpbnNlcnRNb2RlKSBwdHlJbnNlcnRDaGFyYWN0ZXJzKDEpOworICAgICAgcHR5QWRkQ2hhcmFjdGVyKGJ5dGUpOworICAgICAgcmV0dXJuIE9CUF9ET05FOworICAgIH0KKyAgfQorfQorCitzdGF0aWMgT3V0cHV0Qnl0ZVBhcnNlclJlc3VsdAorcGFyc2VPdXRwdXRCeXRlX0VTQ0FQRSAodW5zaWduZWQgY2hhciBieXRlKSB7CisgIHN3aXRjaCAoYnl0ZSkgeworICAgIGNhc2UgJ1snOgorICAgICAgb3V0cHV0UGFyc2VyU3RhdGUgPSBPUFNfQlJBQ0tFVDsKKyAgICAgIHJldHVybiBPQlBfQ09OVElOVUU7CisKKyAgICBjYXNlICc9JzoKKyAgICAgIGxvZ091dHB1dEFjdGlvbigic21reCIsICJrZXlwYWQgdHJhbnNtaXQgb24iKTsKKyAgICAgIGtleXBhZFRyYW5zbWl0TW9kZSA9IDE7CisgICAgICByZXR1cm4gT0JQX0RPTkU7CisKKyAgICBjYXNlICc+JzoKKyAgICAgIGxvZ091dHB1dEFjdGlvbigicm1reCIsICJrZXlwYWQgdHJhbnNtaXQgb2ZmIik7CisgICAgICBrZXlwYWRUcmFuc21pdE1vZGUgPSAwOworICAgICAgcmV0dXJuIE9CUF9ET05FOworCisgICAgY2FzZSAnRSc6CisgICAgICBsb2dPdXRwdXRBY3Rpb24oIm5lbCIsICJuZXcgbGluZSIpOworICAgICAgcHR5U2V0Q3Vyc29yQ29sdW1uKDApOworICAgICAgcHR5TW92ZURvd24xKCk7CisgICAgICByZXR1cm4gT0JQX0RPTkU7CisKKyAgICBjYXNlICdNJzoKKyAgICAgIGlmIChwdHlBbVdpdGhpblNjcm9sbFJlZ2lvbigpKSB7CisgICAgICAgIGxvZ091dHB1dEFjdGlvbigicmkiLCAibW92ZSB1cCAxIik7CisgICAgICAgIHB0eU1vdmVVcDEoKTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIGxvZ091dHB1dEFjdGlvbigiY3V1MSIsICJjdXJzb3IgdXAgMSIpOworICAgICAgICBwdHlNb3ZlQ3Vyc29yVXAoMSk7CisgICAgICB9CisgICAgICByZXR1cm4gT0JQX0RPTkU7CisKKyAgICBjYXNlICdjJzoKKyAgICAgIGxvZ091dHB1dEFjdGlvbigiY2xlYXIiLCAiY2xlYXIgc2NyZWVuIik7CisgICAgICBwdHlTZXRDdXJzb3JQb3NpdGlvbigwLCAwKTsKKyAgICAgIHB0eUNsZWFyVG9FbmRPZkRpc3BsYXkoKTsKKyAgICAgIHJldHVybiBPQlBfRE9ORTsKKworICAgIGNhc2UgJ2cnOgorICAgICAgbG9nT3V0cHV0QWN0aW9uKCJmbGFzaCIsICJ2aXN1YWwgYWxlcnQiKTsKKyAgICAgIHNob3dBbGVydCgpOworICAgICAgcmV0dXJuIE9CUF9ET05FOworCisgICAgY2FzZSAnNyc6CisgICAgICBsb2dPdXRwdXRBY3Rpb24oInNjIiwgInNhdmUgY3Vyc29yIHBvc2l0aW9uIik7CisgICAgICBwdHlTYXZlQ3Vyc29yUG9zaXRpb24oKTsKKyAgICAgIHJldHVybiBPQlBfRE9ORTsKKworICAgIGNhc2UgJzgnOgorICAgICAgbG9nT3V0cHV0QWN0aW9uKCJyYyIsICJyZXN0b3JlIGN1cnNvciBwb3NpdGlvbiIpOworICAgICAgcHR5UmVzdG9yZUN1cnNvclBvc2l0aW9uKCk7CisgICAgICByZXR1cm4gT0JQX0RPTkU7CisgIH0KKworICByZXR1cm4gT0JQX1VORVhQRUNURUQ7Cit9CisKK3N0YXRpYyBPdXRwdXRCeXRlUGFyc2VyUmVzdWx0CitwYXJzZU91dHB1dEJ5dGVfQlJBQ0tFVCAodW5zaWduZWQgY2hhciBieXRlKSB7CisgIG91dHB1dFBhcnNlclN0YXRlID0gT1BTX05VTUJFUjsKKyAgaWYgKG91dHB1dFBhcnNlclF1ZXN0aW9uTWFyaykgcmV0dXJuIE9CUF9SRVBST0NFU1M7CisgIGlmIChieXRlICE9ICc/JykgcmV0dXJuIE9CUF9SRVBST0NFU1M7CisKKyAgb3V0cHV0UGFyc2VyUXVlc3Rpb25NYXJrID0gMTsKKyAgb3V0cHV0UGFyc2VyU3RhdGUgPSBPUFNfQlJBQ0tFVDsKKyAgcmV0dXJuIE9CUF9DT05USU5VRTsKK30KKworc3RhdGljIE91dHB1dEJ5dGVQYXJzZXJSZXN1bHQKK3BhcnNlT3V0cHV0Qnl0ZV9OVU1CRVIgKHVuc2lnbmVkIGNoYXIgYnl0ZSkgeworICBpZiAoaXN3ZGlnaXQoYnl0ZSkpIHsKKyAgICBvdXRwdXRQYXJzZXJOdW1iZXIgPSAwOworICAgIG91dHB1dFBhcnNlclN0YXRlID0gT1BTX0RJR0lUOworICB9IGVsc2UgeworICAgIG91dHB1dFBhcnNlclN0YXRlID0gT1BTX0FDVElPTjsKKyAgfQorCisgIHJldHVybiBPQlBfUkVQUk9DRVNTOworfQorCitzdGF0aWMgT3V0cHV0Qnl0ZVBhcnNlclJlc3VsdAorcGFyc2VPdXRwdXRCeXRlX0RJR0lUICh1bnNpZ25lZCBjaGFyIGJ5dGUpIHsKKyAgaWYgKGlzd2RpZ2l0KGJ5dGUpKSB7CisgICAgb3V0cHV0UGFyc2VyTnVtYmVyICo9IDEwOworICAgIG91dHB1dFBhcnNlck51bWJlciArPSBieXRlIC0gJzAnOworICAgIHJldHVybiBPQlBfQ09OVElOVUU7CisgIH0KKworICBhZGRPdXRwdXRQYXJzZXJOdW1iZXIob3V0cHV0UGFyc2VyTnVtYmVyKTsKKyAgb3V0cHV0UGFyc2VyTnVtYmVyID0gMDsKKyAgaWYgKGJ5dGUgPT0gJzsnKSByZXR1cm4gT0JQX0NPTlRJTlVFOworCisgIG91dHB1dFBhcnNlclN0YXRlID0gT1BTX0FDVElPTjsKKyAgcmV0dXJuIE9CUF9SRVBST0NFU1M7Cit9CisKK3N0YXRpYyBPdXRwdXRCeXRlUGFyc2VyUmVzdWx0CitwZXJmb3JtQnJhY2tldEFjdGlvbl9oICh1bnNpZ25lZCBjaGFyIGJ5dGUpIHsKKyAgaWYgKG91dHB1dFBhcnNlck51bWJlckNvdW50ID09IDEpIHsKKyAgICBzd2l0Y2ggKG91dHB1dFBhcnNlck51bWJlckFycmF5WzBdKSB7CisgICAgICBjYXNlIDQ6CisgICAgICAgIGxvZ091dHB1dEFjdGlvbigic21pciIsICJpbnNlcnQgb24iKTsKKyAgICAgICAgaW5zZXJ0TW9kZSA9IDE7CisgICAgICAgIHJldHVybiBPQlBfRE9ORTsKKworICAgICAgY2FzZSAzNDoKKyAgICAgICAgbG9nT3V0cHV0QWN0aW9uKCJjbm9ybSIsICJjdXJzb3Igbm9ybWFsIHZpc2liaWxpdHkiKTsKKyAgICAgICAgcHR5U2V0Q3Vyc29yVmlzaWJpbGl0eSgxKTsKKyAgICAgICAgcmV0dXJuIE9CUF9ET05FOworICAgIH0KKyAgfQorCisgIHJldHVybiBPQlBfVU5FWFBFQ1RFRDsKK30KKworc3RhdGljIE91dHB1dEJ5dGVQYXJzZXJSZXN1bHQKK3BlcmZvcm1CcmFja2V0QWN0aW9uX2wgKHVuc2lnbmVkIGNoYXIgYnl0ZSkgeworICBpZiAob3V0cHV0UGFyc2VyTnVtYmVyQ291bnQgPT0gMSkgeworICAgIHN3aXRjaCAob3V0cHV0UGFyc2VyTnVtYmVyQXJyYXlbMF0pIHsKKyAgICAgIGNhc2UgNDoKKyAgICAgICAgbG9nT3V0cHV0QWN0aW9uKCJybWlyIiwgImluc2VydCBvZmYiKTsKKyAgICAgICAgaW5zZXJ0TW9kZSA9IDA7CisgICAgICAgIHJldHVybiBPQlBfRE9ORTsKKworICAgICAgY2FzZSAzNDoKKyAgICAgICAgbG9nT3V0cHV0QWN0aW9uKCJjdnZpcyIsICJjdXJzb3IgdmVyeSB2aXNpbGUiKTsKKyAgICAgICAgcHR5U2V0Q3Vyc29yVmlzaWJpbGl0eSgyKTsKKyAgICAgICAgcmV0dXJuIE9CUF9ET05FOworICAgIH0KKyAgfQorCisgIHJldHVybiBPQlBfVU5FWFBFQ1RFRDsKK30KKworc3RhdGljIE91dHB1dEJ5dGVQYXJzZXJSZXN1bHQKK3BlcmZvcm1CcmFja2V0QWN0aW9uX20gKHVuc2lnbmVkIGNoYXIgYnl0ZSkgeworICBpZiAob3V0cHV0UGFyc2VyTnVtYmVyQ291bnQgPT0gMCkgYWRkT3V0cHV0UGFyc2VyTnVtYmVyKDApOworCisgIGZvciAodW5zaWduZWQgaW50IGluZGV4PTA7IGluZGV4PG91dHB1dFBhcnNlck51bWJlckNvdW50OyBpbmRleCs9MSkgeworICAgIHVuc2lnbmVkIGludCBudW1iZXIgPSBvdXRwdXRQYXJzZXJOdW1iZXJBcnJheVtpbmRleF07CisKKyAgICBzd2l0Y2ggKG51bWJlciAvIDEwKSB7CisgICAgICB7CisgICAgICAgIGNvbnN0IGNoYXIgKm5hbWU7CisgICAgICAgIGNvbnN0IGNoYXIgKmRlc2NyaXB0aW9uOworICAgICAgICB2b2lkICgqc2V0Q29sb3IpIChpbnQgY29sb3IpOworICAgICAgICBpbnQgY29sb3I7CisKKyAgICAgIGNhc2UgMzoKKyAgICAgICAgbmFtZSA9ICJzZXRhZiI7CisgICAgICAgIGRlc2NyaXB0aW9uID0gImZvcmVncm91bmQgY29sb3IiOworICAgICAgICBzZXRDb2xvciA9IHB0eVNldEZvcmVncm91bmRDb2xvcjsKKyAgICAgICAgZ290byBkb0NvbG9yOworCisgICAgICBjYXNlIDQ6CisgICAgICAgIG5hbWUgPSAic2V0YWIiOworICAgICAgICBkZXNjcmlwdGlvbiA9ICJiYWNrZ3JvdW5kIGNvbG9yIjsKKyAgICAgICAgc2V0Q29sb3IgPSBwdHlTZXRCYWNrZ3JvdW5kQ29sb3I7CisgICAgICAgIGdvdG8gZG9Db2xvcjsKKworICAgICAgZG9Db2xvcjoKKyAgICAgICAgY29sb3IgPSBudW1iZXIgJSAxMDsKKyAgICAgICAgaWYgKGNvbG9yID09IDgpIHJldHVybiBPQlBfVU5FWFBFQ1RFRDsKKyAgICAgICAgaWYgKGNvbG9yID09IDkpIGNvbG9yID0gLTE7CisKKyAgICAgICAgbG9nT3V0cHV0QWN0aW9uKG5hbWUsIGRlc2NyaXB0aW9uKTsKKyAgICAgICAgc2V0Q29sb3IoY29sb3IpOworICAgICAgICBjb250aW51ZTsKKyAgICAgIH0KKyAgICB9CisKKyAgICBzd2l0Y2ggKG51bWJlcikgeworICAgICAgY2FzZSAwOgorICAgICAgICBsb2dPdXRwdXRBY3Rpb24oInNncjAiLCAiYWxsIGF0dHJpYnV0ZXMgb2ZmIik7CisgICAgICAgIHB0eVNldEF0dHJpYnV0ZXMoMCk7CisgICAgICAgIGNvbnRpbnVlOworCisgICAgICBjYXNlIDE6CisgICAgICAgIGxvZ091dHB1dEFjdGlvbigiYm9sZCIsICJib2xkIG9uIik7CisgICAgICAgIHB0eUFkZEF0dHJpYnV0ZXMoQV9CT0xEKTsKKyAgICAgICAgY29udGludWU7CisKKyAgICAgIGNhc2UgMjoKKyAgICAgICAgbG9nT3V0cHV0QWN0aW9uKCJkaW0iLCAiZGltIG9uIik7CisgICAgICAgIHB0eUFkZEF0dHJpYnV0ZXMoQV9ESU0pOworICAgICAgICBjb250aW51ZTsKKworICAgICAgY2FzZSAzOgorICAgICAgICBsb2dPdXRwdXRBY3Rpb24oInNtc28iLCAic3RhbmRvdXQgb24iKTsKKyAgICAgICAgcHR5QWRkQXR0cmlidXRlcyhBX1NUQU5ET1VUKTsKKyAgICAgICAgY29udGludWU7CisKKyAgICAgIGNhc2UgNDoKKyAgICAgICAgbG9nT3V0cHV0QWN0aW9uKCJzbXVsIiwgInVuZGVybGluZSBvbiIpOworICAgICAgICBwdHlBZGRBdHRyaWJ1dGVzKEFfVU5ERVJMSU5FKTsKKyAgICAgICAgY29udGludWU7CisKKyAgICAgIGNhc2UgNToKKyAgICAgICAgbG9nT3V0cHV0QWN0aW9uKCJibGluayIsICJibGluayBvbiIpOworICAgICAgICBwdHlBZGRBdHRyaWJ1dGVzKEFfQkxJTkspOworICAgICAgICBjb250aW51ZTsKKworICAgICAgY2FzZSA3OgorICAgICAgICBsb2dPdXRwdXRBY3Rpb24oInJldiIsICJyZXZlcnNlIHZpZGVvIG9uIik7CisgICAgICAgIHB0eUFkZEF0dHJpYnV0ZXMoQV9SRVZFUlNFKTsKKyAgICAgICAgY29udGludWU7CisKKyAgICAgIGNhc2UgMjI6CisgICAgICAgIGxvZ091dHB1dEFjdGlvbigibm9ybWFsIiwgImJvbGQvZGltIG9mZiIpOworICAgICAgICBwdHlSZW1vdmVBdHRyaWJ1dGVzKEFfQk9MRCB8IEFfRElNKTsKKyAgICAgICAgY29udGludWU7CisKKyAgICAgIGNhc2UgMjM6CisgICAgICAgIGxvZ091dHB1dEFjdGlvbigicm1zbyIsICJzdGFuZG91dCBvZmYiKTsKKyAgICAgICAgcHR5UmVtb3ZlQXR0cmlidXRlcyhBX1NUQU5ET1VUKTsKKyAgICAgICAgY29udGludWU7CisKKyAgICAgIGNhc2UgMjQ6CisgICAgICAgIGxvZ091dHB1dEFjdGlvbigicm11bCIsICJ1bmRlcmxpbmUgb2ZmIik7CisgICAgICAgIHB0eVJlbW92ZUF0dHJpYnV0ZXMoQV9VTkRFUkxJTkUpOworICAgICAgICBjb250aW51ZTsKKworICAgICAgY2FzZSAyNToKKyAgICAgICAgbG9nT3V0cHV0QWN0aW9uKCJ1bmJsaW5rIiwgImJsaW5rIG9mZiIpOworICAgICAgICBwdHlSZW1vdmVBdHRyaWJ1dGVzKEFfQkxJTkspOworICAgICAgICBjb250aW51ZTsKKworICAgICAgY2FzZSAyNzoKKyAgICAgICAgbG9nT3V0cHV0QWN0aW9uKCJ1bnJldiIsICJyZXZlcnNlIHZpZGVvIG9mZiIpOworICAgICAgICBwdHlSZW1vdmVBdHRyaWJ1dGVzKEFfUkVWRVJTRSk7CisgICAgICAgIGNvbnRpbnVlOworICAgIH0KKworICAgIHJldHVybiBPQlBfVU5FWFBFQ1RFRDsKKyAgfQorCisgIHJldHVybiBPQlBfRE9ORTsKK30KKworc3RhdGljIE91dHB1dEJ5dGVQYXJzZXJSZXN1bHQKK3BlcmZvcm1CcmFja2V0QWN0aW9uICh1bnNpZ25lZCBjaGFyIGJ5dGUpIHsKKyAgc3dpdGNoIChieXRlKSB7CisgICAgY2FzZSAnQSc6CisgICAgICBsb2dPdXRwdXRBY3Rpb24oImN1dSIsICJjdXJzb3IgdXAiKTsKKyAgICAgIHB0eU1vdmVDdXJzb3JVcChnZXRPdXRwdXRBY3Rpb25Db3VudCgpKTsKKyAgICAgIHJldHVybiBPQlBfRE9ORTsKKworICAgIGNhc2UgJ0InOgorICAgICAgbG9nT3V0cHV0QWN0aW9uKCJjdWQiLCAiY3Vyc29yIGRvd24iKTsKKyAgICAgIHB0eU1vdmVDdXJzb3JEb3duKGdldE91dHB1dEFjdGlvbkNvdW50KCkpOworICAgICAgcmV0dXJuIE9CUF9ET05FOworCisgICAgY2FzZSAnQyc6CisgICAgICBsb2dPdXRwdXRBY3Rpb24oImN1ZiIsICJjdXJzb3IgcmlnaHQiKTsKKyAgICAgIHB0eU1vdmVDdXJzb3JSaWdodChnZXRPdXRwdXRBY3Rpb25Db3VudCgpKTsKKyAgICAgIHJldHVybiBPQlBfRE9ORTsKKworICAgIGNhc2UgJ0QnOgorICAgICAgbG9nT3V0cHV0QWN0aW9uKCJjdWIiLCAiY3Vyc29yIGxlZnQiKTsKKyAgICAgIHB0eU1vdmVDdXJzb3JMZWZ0KGdldE91dHB1dEFjdGlvbkNvdW50KCkpOworICAgICAgcmV0dXJuIE9CUF9ET05FOworCisgICAgY2FzZSAnRyc6IHsKKyAgICAgIGlmIChvdXRwdXRQYXJzZXJOdW1iZXJDb3VudCAhPSAxKSByZXR1cm4gT0JQX1VORVhQRUNURUQgICA7CisgICAgICB1bnNpZ25lZCBpbnQgKmNvbHVtbiA9ICZvdXRwdXRQYXJzZXJOdW1iZXJBcnJheVswXTsKKyAgICAgIGlmICghKCpjb2x1bW4pLS0pIHJldHVybiBPQlBfVU5FWFBFQ1RFRDsKKworICAgICAgbG9nT3V0cHV0QWN0aW9uKCJocGEiLCAic2V0IGN1cnNvciBjb2x1bW4iKTsKKyAgICAgIHB0eVNldEN1cnNvckNvbHVtbigqY29sdW1uKTsKKyAgICAgIHJldHVybiBPQlBfRE9ORTsKKyAgICB9CisKKyAgICBjYXNlICdIJzogeworICAgICAgaWYgKG91dHB1dFBhcnNlck51bWJlckNvdW50ID09IDApIHsKKyAgICAgICAgYWRkT3V0cHV0UGFyc2VyTnVtYmVyKDEpOworICAgICAgICBhZGRPdXRwdXRQYXJzZXJOdW1iZXIoMSk7CisgICAgICB9IGVsc2UgaWYgKG91dHB1dFBhcnNlck51bWJlckNvdW50ICE9IDIpIHsKKyAgICAgICAgcmV0dXJuIE9CUF9VTkVYUEVDVEVEOworICAgICAgfQorCisgICAgICB1bnNpZ25lZCBpbnQgKnJvdyA9ICZvdXRwdXRQYXJzZXJOdW1iZXJBcnJheVswXTsKKyAgICAgIHVuc2lnbmVkIGludCAqY29sdW1uID0gJm91dHB1dFBhcnNlck51bWJlckFycmF5WzFdOworCisgICAgICBpZiAoISgqcm93KS0tKSByZXR1cm4gT0JQX1VORVhQRUNURUQ7CisgICAgICBpZiAoISgqY29sdW1uKS0tKSByZXR1cm4gT0JQX1VORVhQRUNURUQ7CisKKyAgICAgIGxvZ091dHB1dEFjdGlvbigiY3VwIiwgInNldCBjdXJzb3IgcG9zaXRpb24iKTsKKyAgICAgIHB0eVNldEN1cnNvclBvc2l0aW9uKCpyb3csICpjb2x1bW4pOworICAgICAgcmV0dXJuIE9CUF9ET05FOworICAgIH0KKworICAgIGNhc2UgJ0onOgorICAgICAgaWYgKG91dHB1dFBhcnNlck51bWJlckNvdW50ICE9IDApIHJldHVybiBPQlBfVU5FWFBFQ1RFRDsKKyAgICAgIGxvZ091dHB1dEFjdGlvbigiZWQiLCAiY2xlYXIgdG8gZW5kIG9mIGRpc3BsYXkiKTsKKyAgICAgIHB0eUNsZWFyVG9FbmRPZkRpc3BsYXkoKTsKKyAgICAgIHJldHVybiBPQlBfRE9ORTsKKworICAgIGNhc2UgJ0snOiB7CisgICAgICBpZiAob3V0cHV0UGFyc2VyTnVtYmVyQ291bnQgPT0gMCkgYWRkT3V0cHV0UGFyc2VyTnVtYmVyKDApOworICAgICAgaWYgKG91dHB1dFBhcnNlck51bWJlckNvdW50ICE9IDEpIHJldHVybiBPQlBfVU5FWFBFQ1RFRDsKKworICAgICAgc3dpdGNoIChvdXRwdXRQYXJzZXJOdW1iZXJBcnJheVswXSkgeworICAgICAgICBjYXNlIDA6CisgICAgICAgICAgbG9nT3V0cHV0QWN0aW9uKCJlbCIsICJjbGVhciB0byBlbmQgb2YgbGluZSIpOworICAgICAgICAgIHB0eUNsZWFyVG9FbmRPZkxpbmUoKTsKKyAgICAgICAgICByZXR1cm4gT0JQX0RPTkU7CisKKyAgICAgICAgY2FzZSAxOgorICAgICAgICAgIGxvZ091dHB1dEFjdGlvbigiZWwxIiwgImNsZWFyIHRvIGJlZ2lubmluZyBvZiBsaW5lIik7CisgICAgICAgICAgcHR5Q2xlYXJUb0JlZ2lubmluZ09mTGluZSgpOworICAgICAgICAgIHJldHVybiBPQlBfRE9ORTsKKyAgICAgIH0KKworICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSAnTCc6CisgICAgICBsb2dPdXRwdXRBY3Rpb24oImlsIiwgImluc2VydCBsaW5lcyIpOworICAgICAgcHR5SW5zZXJ0TGluZXMoZ2V0T3V0cHV0QWN0aW9uQ291bnQoKSk7CisgICAgICByZXR1cm4gT0JQX0RPTkU7CisKKyAgICBjYXNlICdNJzoKKyAgICAgIGxvZ091dHB1dEFjdGlvbigiZGwiLCAiZGVsZXRlIGxpbmVzIik7CisgICAgICBwdHlEZWxldGVMaW5lcyhnZXRPdXRwdXRBY3Rpb25Db3VudCgpKTsKKyAgICAgIHJldHVybiBPQlBfRE9ORTsKKworICAgIGNhc2UgJ1AnOgorICAgICAgbG9nT3V0cHV0QWN0aW9uKCJkY2giLCAiZGVsZXRlIGNoYXJhY3RlcnMiKTsKKyAgICAgIHB0eURlbGV0ZUNoYXJhY3RlcnMoZ2V0T3V0cHV0QWN0aW9uQ291bnQoKSk7CisgICAgICByZXR1cm4gT0JQX0RPTkU7CisKKyAgICBjYXNlICdTJzoKKyAgICAgIGxvZ091dHB1dEFjdGlvbigiaW5kbiIsICJzY3JvbGwgZm9yd2FyZCIpOworICAgICAgcHR5U2Nyb2xsVXAoZ2V0T3V0cHV0QWN0aW9uQ291bnQoKSk7CisgICAgICByZXR1cm4gT0JQX0RPTkU7CisKKyAgICBjYXNlICdUJzoKKyAgICAgIGxvZ091dHB1dEFjdGlvbigicmluIiwgInNjcm9sbCBiYWNrd2FyZCIpOworICAgICAgcHR5U2Nyb2xsRG93bihnZXRPdXRwdXRBY3Rpb25Db3VudCgpKTsKKyAgICAgIHJldHVybiBPQlBfRE9ORTsKKworICAgIGNhc2UgJ1onOgorICAgICAgbG9nT3V0cHV0QWN0aW9uKCJjYnQiLCAidGFiIGJhY2t3YXJkIik7CisgICAgICBwdHlUYWJCYWNrd2FyZCgpOworICAgICAgcmV0dXJuIE9CUF9ET05FOworCisgICAgY2FzZSAnZCc6IHsKKyAgICAgIGlmIChvdXRwdXRQYXJzZXJOdW1iZXJDb3VudCAhPSAxKSByZXR1cm4gT0JQX1VORVhQRUNURUQgICA7CisgICAgICB1bnNpZ25lZCBpbnQgKnJvdyA9ICZvdXRwdXRQYXJzZXJOdW1iZXJBcnJheVswXTsKKyAgICAgIGlmICghKCpyb3cpLS0pIHJldHVybiBPQlBfVU5FWFBFQ1RFRDsKKworICAgICAgbG9nT3V0cHV0QWN0aW9uKCJ2cGEiLCAic2V0IGN1cnNvciByb3ciKTsKKyAgICAgIHB0eVNldEN1cnNvclJvdygqcm93KTsKKyAgICAgIHJldHVybiBPQlBfRE9ORTsKKyAgICB9CisKKyAgICBjYXNlICdoJzoKKyAgICAgIHJldHVybiBwZXJmb3JtQnJhY2tldEFjdGlvbl9oKGJ5dGUpOworCisgICAgY2FzZSAnbCc6CisgICAgICByZXR1cm4gcGVyZm9ybUJyYWNrZXRBY3Rpb25fbChieXRlKTsKKworICAgIGNhc2UgJ20nOgorICAgICAgcmV0dXJuIHBlcmZvcm1CcmFja2V0QWN0aW9uX20oYnl0ZSk7CisKKyAgICBjYXNlICdyJzogeworICAgICAgaWYgKG91dHB1dFBhcnNlck51bWJlckNvdW50ICE9IDIpIHJldHVybiBPQlBfVU5FWFBFQ1RFRDsKKworICAgICAgdW5zaWduZWQgaW50ICp0b3AgPSAmb3V0cHV0UGFyc2VyTnVtYmVyQXJyYXlbMF07CisgICAgICB1bnNpZ25lZCBpbnQgKmJvdHRvbSA9ICZvdXRwdXRQYXJzZXJOdW1iZXJBcnJheVsxXTsKKworICAgICAgaWYgKCEoKnRvcCktLSkgcmV0dXJuIE9CUF9VTkVYUEVDVEVEOworICAgICAgaWYgKCEoKmJvdHRvbSktLSkgcmV0dXJuIE9CUF9VTkVYUEVDVEVEOworCisgICAgICBsb2dPdXRwdXRBY3Rpb24oImNzciIsICJzZXQgc2Nyb2xsIHJlZ2lvbiIpOworICAgICAgcHR5U2V0U2Nyb2xsUmVnaW9uKCp0b3AsICpib3R0b20pOworICAgICAgcmV0dXJuIE9CUF9ET05FOworICAgIH0KKworICAgIGNhc2UgJ0AnOgorICAgICAgbG9nT3V0cHV0QWN0aW9uKCJpYyIsICJpbnNlcnQgY2hhcmFjdGVycyIpOworICAgICAgcHR5SW5zZXJ0Q2hhcmFjdGVycyhnZXRPdXRwdXRBY3Rpb25Db3VudCgpKTsKKyAgICAgIHJldHVybiBPQlBfRE9ORTsKKyAgfQorCisgIHJldHVybiBPQlBfVU5FWFBFQ1RFRDsKK30KKworc3RhdGljIE91dHB1dEJ5dGVQYXJzZXJSZXN1bHQKK3BlcmZvcm1RdWVzdGlvbk1hcmtBY3Rpb25faCAodW5zaWduZWQgY2hhciBieXRlKSB7CisgIGlmIChvdXRwdXRQYXJzZXJOdW1iZXJDb3VudCA9PSAxKSB7CisgICAgc3dpdGNoIChvdXRwdXRQYXJzZXJOdW1iZXJBcnJheVswXSkgeworICAgICAgY2FzZSAxOgorICAgICAgICBsb2dPdXRwdXRBY3Rpb24oInNta3giLCAia2V5cGFkIHRyYW5zbWl0IG9uIik7CisgICAgICAgIGtleXBhZFRyYW5zbWl0TW9kZSA9IDE7CisgICAgICAgIHJldHVybiBPQlBfRE9ORTsKKworICAgICAgY2FzZSAyNToKKyAgICAgICAgbG9nT3V0cHV0QWN0aW9uKCJjbm9ybSIsICJjdXJzb3Igbm9ybWFsIHZpc2liaWxpdHkiKTsKKyAgICAgICAgcHR5U2V0Q3Vyc29yVmlzaWJpbGl0eSgxKTsKKyAgICAgICAgcmV0dXJuIE9CUF9ET05FOworCisgICAgICBjYXNlIDEwNDk6CisgICAgICAgIGxvZ091dHB1dEFjdGlvbigic21jdXAiLCAiYWJzb2x1dGUgY3Vyc29yIGFkZHJlc3Npbmcgb24iKTsKKyAgICAgICAgYWJzb2x1dGVDdXJzb3JBZGRyZXNzaW5nTW9kZSA9IDE7CisgICAgICAgIHJldHVybiBPQlBfRE9ORTsKKworICAgICAgY2FzZSAyMDA0OgorICAgICAgICBsb2dPdXRwdXRBY3Rpb24oInNtYnAiLCAiYnJhY2tldGVkIHBhc3RlIG9uIik7CisgICAgICAgIGJyYWNrZXRlZFBhc3RlTW9kZSA9IDE7CisgICAgICAgIHJldHVybiBPQlBfRE9ORTsKKyAgICB9CisgIH0KKworICByZXR1cm4gT0JQX1VORVhQRUNURUQ7Cit9CisKK3N0YXRpYyBPdXRwdXRCeXRlUGFyc2VyUmVzdWx0CitwZXJmb3JtUXVlc3Rpb25NYXJrQWN0aW9uX2wgKHVuc2lnbmVkIGNoYXIgYnl0ZSkgeworICBpZiAob3V0cHV0UGFyc2VyTnVtYmVyQ291bnQgPT0gMSkgeworICAgIHN3aXRjaCAob3V0cHV0UGFyc2VyTnVtYmVyQXJyYXlbMF0pIHsKKyAgICAgIGNhc2UgMToKKyAgICAgICAgbG9nT3V0cHV0QWN0aW9uKCJybWt4IiwgImtleXBhZCB0cmFuc21pdCBvZmYiKTsKKyAgICAgICAga2V5cGFkVHJhbnNtaXRNb2RlID0gMDsKKyAgICAgICAgcmV0dXJuIE9CUF9ET05FOworCisgICAgICBjYXNlIDI1OgorICAgICAgICBsb2dPdXRwdXRBY3Rpb24oImNpdmlzIiwgImN1cnNvciBpbnZpc2libGUiKTsKKyAgICAgICAgcHR5U2V0Q3Vyc29yVmlzaWJpbGl0eSgwKTsKKyAgICAgICAgcmV0dXJuIE9CUF9ET05FOworCisgICAgICBjYXNlIDEwNDk6CisgICAgICAgIGxvZ091dHB1dEFjdGlvbigicm1jdXAiLCAiYWJzb2x1dGUgY3Vyc29yIGFkZHJlc3Npbmcgb2ZmIik7CisgICAgICAgIGFic29sdXRlQ3Vyc29yQWRkcmVzc2luZ01vZGUgPSAwOworICAgICAgICByZXR1cm4gT0JQX0RPTkU7CisKKyAgICAgIGNhc2UgMjAwNDoKKyAgICAgICAgbG9nT3V0cHV0QWN0aW9uKCJybWJwIiwgImJyYWNrZXRlZCBwYXN0ZSBvZmYiKTsKKyAgICAgICAgYnJhY2tldGVkUGFzdGVNb2RlID0gMDsKKyAgICAgICAgcmV0dXJuIE9CUF9ET05FOworICAgIH0KKyAgfQorCisgIHJldHVybiBPQlBfVU5FWFBFQ1RFRDsKK30KKworc3RhdGljIE91dHB1dEJ5dGVQYXJzZXJSZXN1bHQKK3BlcmZvcm1RdWVzdGlvbk1hcmtBY3Rpb24gKHVuc2lnbmVkIGNoYXIgYnl0ZSkgeworICBzd2l0Y2ggKGJ5dGUpIHsKKyAgICBjYXNlICdoJzoKKyAgICAgIHJldHVybiBwZXJmb3JtUXVlc3Rpb25NYXJrQWN0aW9uX2goYnl0ZSk7CisKKyAgICBjYXNlICdsJzoKKyAgICAgIHJldHVybiBwZXJmb3JtUXVlc3Rpb25NYXJrQWN0aW9uX2woYnl0ZSk7CisgIH0KKworICByZXR1cm4gT0JQX1VORVhQRUNURUQ7Cit9CisKK3N0YXRpYyBPdXRwdXRCeXRlUGFyc2VyUmVzdWx0CitwYXJzZU91dHB1dEJ5dGVfQUNUSU9OICh1bnNpZ25lZCBjaGFyIGJ5dGUpIHsKKyAgaWYgKG91dHB1dFBhcnNlclF1ZXN0aW9uTWFyaykgeworICAgIHJldHVybiBwZXJmb3JtUXVlc3Rpb25NYXJrQWN0aW9uKGJ5dGUpOworICB9IGVsc2UgeworICAgIHJldHVybiBwZXJmb3JtQnJhY2tldEFjdGlvbihieXRlKTsKKyAgfQorfQorCit0eXBlZGVmIHN0cnVjdCB7CisgIE91dHB1dEJ5dGVQYXJzZXIgKnBhcnNlT3V0cHV0Qnl0ZTsKKyAgY29uc3QgY2hhciAqbmFtZTsKK30gT3V0cHV0UGFyc2VyU3RhdGVFbnRyeTsKKworI2RlZmluZSBPUFMoc3RhdGUpIFwKK1tPUFNfIyNzdGF0ZV0gPSB7IFwKKyAgLnBhcnNlT3V0cHV0Qnl0ZSA9IHBhcnNlT3V0cHV0Qnl0ZV8jI3N0YXRlLCBcCisgIC5uYW1lID0gI3N0YXRlLCBcCit9CisKK3N0YXRpYyBjb25zdCBPdXRwdXRQYXJzZXJTdGF0ZUVudHJ5IG91dHB1dFBhcnNlclN0YXRlVGFibGVbXSA9IHsKKyAgT1BTKEJBU0lDKSwKKyAgT1BTKEVTQ0FQRSksCisgIE9QUyhCUkFDS0VUKSwKKyAgT1BTKE5VTUJFUiksCisgIE9QUyhESUdJVCksCisgIE9QUyhBQ1RJT04pLAorfTsKKyN1bmRlZiBPUFMKKworc3RhdGljIGludAorcGFyc2VPdXRwdXRCeXRlICh1bnNpZ25lZCBjaGFyIGJ5dGUpIHsKKyAgaWYgKG91dHB1dFBhcnNlclN0YXRlID09IE9QU19CQVNJQykgeworICAgIG91dHB1dEJ5dGVDb3VudCA9IDA7CisgIH0KKworICBpZiAob3V0cHV0Qnl0ZUNvdW50IDwgQVJSQVlfQ09VTlQob3V0cHV0Qnl0ZUJ1ZmZlcikpIHsKKyAgICBvdXRwdXRCeXRlQnVmZmVyW291dHB1dEJ5dGVDb3VudCsrXSA9IGJ5dGU7CisgIH0KKworICB3aGlsZSAoMSkgeworICAgIE91dHB1dEJ5dGVQYXJzZXJSZXN1bHQgcmVzdWx0ID0gb3V0cHV0UGFyc2VyU3RhdGVUYWJsZVtvdXRwdXRQYXJzZXJTdGF0ZV0ucGFyc2VPdXRwdXRCeXRlKGJ5dGUpOworCisgICAgc3dpdGNoIChyZXN1bHQpIHsKKyAgICAgIGNhc2UgT0JQX1JFUFJPQ0VTUzoKKyAgICAgICAgY29udGludWU7CisKKyAgICAgIGNhc2UgT0JQX1VORVhQRUNURUQ6CisgICAgICAgIGxvZ1VuZXhwZWN0ZWRTZXF1ZW5jZSgpOworICAgICAgICAvKiBmYWxsIHRocm91Z2ggKi8KKworICAgICAgY2FzZSBPQlBfRE9ORToKKyAgICAgICAgb3V0cHV0UGFyc2VyU3RhdGUgPSBPUFNfQkFTSUM7CisgICAgICAgIHJldHVybiAxOworCisgICAgICBjYXNlIE9CUF9DT05USU5VRToKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICB9Cit9CisKK2ludAorcHR5UHJvY2Vzc1Rlcm1pbmFsT3V0cHV0IChjb25zdCB1bnNpZ25lZCBjaGFyICpieXRlcywgc2l6ZV90IGNvdW50KSB7CisgIGludCB3YW50UmVmcmVzaCA9IDA7CisKKyAgY29uc3QgdW5zaWduZWQgY2hhciAqYnl0ZSA9IGJ5dGVzOworICBjb25zdCB1bnNpZ25lZCBjaGFyICplbmQgPSBieXRlICsgY291bnQ7CisKKyAgd2hpbGUgKGJ5dGUgPCBlbmQpIHsKKyAgICB3YW50UmVmcmVzaCA9IHBhcnNlT3V0cHV0Qnl0ZSgqYnl0ZSsrKTsKKyAgfQorCisgIGlmICh3YW50UmVmcmVzaCkgeworICAgIHB0eVJlZnJlc2hTY3JlZW4oKTsKKyAgfQorCisgIHJldHVybiAxOworfQpkaWZmIC0tZ2l0IGEvUHJvZ3JhbXMvcXVldWUuYyBiL1Byb2dyYW1zL3F1ZXVlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWZmZGJjZgotLS0gL2Rldi9udWxsCisrKyBiL1Byb2dyYW1zL3F1ZXVlLmMKQEAgLTAsMCArMSw0NDkgQEAKKy8qCisgKiBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorICogICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorICoKKyAqIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorICoKKyAqIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyAqLworCisjaW5jbHVkZSAicHJvbG9ndWUuaCIKKworI2luY2x1ZGUgImxvZy5oIgorI2luY2x1ZGUgInF1ZXVlLmgiCisjaW5jbHVkZSAibG9jay5oIgorI2luY2x1ZGUgInByb2dyYW0uaCIKKworc3RhdGljIEVsZW1lbnQgKmRpc2NhcmRlZEVsZW1lbnRzID0gTlVMTDsKKworc3RhdGljIExvY2tEZXNjcmlwdG9yICoKK2dldERpc2NhcmRlZEVsZW1lbnRzTG9jayAodm9pZCkgeworICBzdGF0aWMgTG9ja0Rlc2NyaXB0b3IgKmxvY2sgPSBOVUxMOworCisgIHJldHVybiBnZXRMb2NrRGVzY3JpcHRvcigmbG9jaywgInF1ZXVlLWRpc2NhcmRlZC1lbGVtZW50cyIpOworfQorCitzdGF0aWMgdm9pZAorbG9ja0Rpc2NhcmRlZEVsZW1lbnRzICh2b2lkKSB7CisgIG9idGFpbkV4Y2x1c2l2ZUxvY2soZ2V0RGlzY2FyZGVkRWxlbWVudHNMb2NrKCkpOworfQorCitzdGF0aWMgdm9pZAordW5sb2NrRGlzY2FyZGVkRWxlbWVudHMgKHZvaWQpIHsKKyAgcmVsZWFzZUxvY2soZ2V0RGlzY2FyZGVkRWxlbWVudHNMb2NrKCkpOworfQorCitzdHJ1Y3QgUXVldWVTdHJ1Y3QgeworICBFbGVtZW50ICpoZWFkOworICB1bnNpZ25lZCBpbnQgc2l6ZTsKKyAgdm9pZCAqZGF0YTsKKyAgSXRlbURlYWxsb2NhdG9yICpkZWFsbG9jYXRlSXRlbTsKKyAgSXRlbUNvbXBhcmF0b3IgKmNvbXBhcmVJdGVtczsKK307CisKK3N0cnVjdCBFbGVtZW50U3RydWN0IHsKKyAgRWxlbWVudCAqbmV4dDsKKyAgRWxlbWVudCAqcHJldmlvdXM7CisgIFF1ZXVlICpxdWV1ZTsKKyAgaW50IGlkZW50aWZpZXI7CisgIHZvaWQgKml0ZW07Cit9OworCitzdGF0aWMgdm9pZAorYWRkRWxlbWVudCAoUXVldWUgKnF1ZXVlLCBFbGVtZW50ICplbGVtZW50KSB7CisgIHsKKyAgICBzdGF0aWMgaW50IGlkZW50aWZpZXIgPSAwOworICAgIGVsZW1lbnQtPmlkZW50aWZpZXIgPSArK2lkZW50aWZpZXI7CisgIH0KKworICBlbGVtZW50LT5xdWV1ZSA9IHF1ZXVlOworICBxdWV1ZS0+c2l6ZSArPSAxOworfQorCitzdGF0aWMgdm9pZAorcmVtb3ZlRWxlbWVudCAoRWxlbWVudCAqZWxlbWVudCkgeworICBlbGVtZW50LT5xdWV1ZS0+c2l6ZSAtPSAxOworICBlbGVtZW50LT5xdWV1ZSA9IE5VTEw7CisgIGVsZW1lbnQtPmlkZW50aWZpZXIgPSAwOworfQorCitzdGF0aWMgdm9pZAorcmVtb3ZlSXRlbSAoRWxlbWVudCAqZWxlbWVudCkgeworICBpZiAoZWxlbWVudC0+aXRlbSkgeworICAgIFF1ZXVlICpxdWV1ZSA9IGVsZW1lbnQtPnF1ZXVlOworICAgIEl0ZW1EZWFsbG9jYXRvciAqZGVhbGxvY2F0ZUl0ZW0gPSBxdWV1ZS0+ZGVhbGxvY2F0ZUl0ZW07CisKKyAgICBpZiAoZGVhbGxvY2F0ZUl0ZW0pIGRlYWxsb2NhdGVJdGVtKGVsZW1lbnQtPml0ZW0sIHF1ZXVlLT5kYXRhKTsKKyAgICBlbGVtZW50LT5pdGVtID0gTlVMTDsKKyAgfQorfQorCitzdGF0aWMgdm9pZAorZGlzY2FyZEVsZW1lbnQgKEVsZW1lbnQgKmVsZW1lbnQpIHsKKyAgcmVtb3ZlSXRlbShlbGVtZW50KTsKKyAgcmVtb3ZlRWxlbWVudChlbGVtZW50KTsKKworICBsb2NrRGlzY2FyZGVkRWxlbWVudHMoKTsKKyAgICBlbGVtZW50LT5uZXh0ID0gZGlzY2FyZGVkRWxlbWVudHM7CisgICAgZGlzY2FyZGVkRWxlbWVudHMgPSBlbGVtZW50OworICB1bmxvY2tEaXNjYXJkZWRFbGVtZW50cygpOworfQorCitzdGF0aWMgRWxlbWVudCAqCityZXRyaWV2ZUVsZW1lbnQgKHZvaWQpIHsKKyAgRWxlbWVudCAqZWxlbWVudDsKKworICBsb2NrRGlzY2FyZGVkRWxlbWVudHMoKTsKKyAgICBpZiAoKGVsZW1lbnQgPSBkaXNjYXJkZWRFbGVtZW50cykpIHsKKyAgICAgIGRpc2NhcmRlZEVsZW1lbnRzID0gZWxlbWVudC0+bmV4dDsKKyAgICAgIGVsZW1lbnQtPm5leHQgPSBOVUxMOworICAgIH0KKyAgdW5sb2NrRGlzY2FyZGVkRWxlbWVudHMoKTsKKworICByZXR1cm4gZWxlbWVudDsKK30KKworc3RhdGljIEVsZW1lbnQgKgorbmV3RWxlbWVudCAoUXVldWUgKnF1ZXVlLCB2b2lkICppdGVtKSB7CisgIEVsZW1lbnQgKmVsZW1lbnQ7CisKKyAgaWYgKCEoZWxlbWVudCA9IHJldHJpZXZlRWxlbWVudCgpKSkgeworICAgIGlmICghKGVsZW1lbnQgPSBtYWxsb2Moc2l6ZW9mKCplbGVtZW50KSkpKSB7CisgICAgICBsb2dNYWxsb2NFcnJvcigpOworICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgZWxlbWVudC0+cHJldmlvdXMgPSBlbGVtZW50LT5uZXh0ID0gTlVMTDsKKyAgfQorCisgIGFkZEVsZW1lbnQocXVldWUsIGVsZW1lbnQpOworICBlbGVtZW50LT5pdGVtID0gaXRlbTsKKyAgcmV0dXJuIGVsZW1lbnQ7Cit9CisKK3N0YXRpYyB2b2lkCitsaW5rRmlyc3RFbGVtZW50IChFbGVtZW50ICplbGVtZW50KSB7CisgIGVsZW1lbnQtPnF1ZXVlLT5oZWFkID0gZWxlbWVudC0+cHJldmlvdXMgPSBlbGVtZW50LT5uZXh0ID0gZWxlbWVudDsKK30KKworc3RhdGljIHZvaWQKK2xpbmtBZGRpdGlvbmFsRWxlbWVudCAoRWxlbWVudCAqcmVmZXJlbmNlLCBFbGVtZW50ICplbGVtZW50KSB7CisgIGVsZW1lbnQtPm5leHQgPSByZWZlcmVuY2U7CisgIGVsZW1lbnQtPnByZXZpb3VzID0gcmVmZXJlbmNlLT5wcmV2aW91czsKKyAgZWxlbWVudC0+bmV4dC0+cHJldmlvdXMgPSBlbGVtZW50OworICBlbGVtZW50LT5wcmV2aW91cy0+bmV4dCA9IGVsZW1lbnQ7Cit9CisKK3N0YXRpYyB2b2lkCit1bmxpbmtFbGVtZW50IChFbGVtZW50ICplbGVtZW50KSB7CisgIFF1ZXVlICpxdWV1ZSA9IGVsZW1lbnQtPnF1ZXVlOworICBpZiAoZWxlbWVudCA9PSBlbGVtZW50LT5uZXh0KSB7CisgICAgcXVldWUtPmhlYWQgPSBOVUxMOworICB9IGVsc2UgeworICAgIGlmIChlbGVtZW50ID09IHF1ZXVlLT5oZWFkKSBxdWV1ZS0+aGVhZCA9IGVsZW1lbnQtPm5leHQ7CisgICAgZWxlbWVudC0+bmV4dC0+cHJldmlvdXMgPSBlbGVtZW50LT5wcmV2aW91czsKKyAgICBlbGVtZW50LT5wcmV2aW91cy0+bmV4dCA9IGVsZW1lbnQtPm5leHQ7CisgIH0KKyAgZWxlbWVudC0+cHJldmlvdXMgPSBlbGVtZW50LT5uZXh0ID0gTlVMTDsKK30KKwordm9pZAorZGVsZXRlRWxlbWVudCAoRWxlbWVudCAqZWxlbWVudCkgeworICB1bmxpbmtFbGVtZW50KGVsZW1lbnQpOworICBkaXNjYXJkRWxlbWVudChlbGVtZW50KTsKK30KKwordHlwZWRlZiBzdHJ1Y3QgeworICBRdWV1ZSAqcXVldWU7CisgIHZvaWQgKml0ZW07Cit9IEZpbmRSZWZlcmVuY2VFbGVtZW50RGF0YTsKKworc3RhdGljIGludAorZmluZFJlZmVyZW5jZUVsZW1lbnQgKGNvbnN0IHZvaWQgKml0ZW0sIHZvaWQgKmRhdGEpIHsKKyAgY29uc3QgRmluZFJlZmVyZW5jZUVsZW1lbnREYXRhICpmcmUgPSBkYXRhOworCisgIHJldHVybiBmcmUtPnF1ZXVlLT5jb21wYXJlSXRlbXMoZnJlLT5pdGVtLCBpdGVtLCBmcmUtPnF1ZXVlLT5kYXRhKTsKK30KKworc3RhdGljIHZvaWQKK2xpbmtFbGVtZW50IChFbGVtZW50ICplbGVtZW50KSB7CisgIFF1ZXVlICpxdWV1ZSA9IGVsZW1lbnQtPnF1ZXVlOworCisgIGlmIChxdWV1ZS0+aGVhZCkgeworICAgIEVsZW1lbnQgKnJlZmVyZW5jZTsKKyAgICBpbnQgaXNOZXdIZWFkID0gMDsKKworICAgIGlmIChxdWV1ZS0+Y29tcGFyZUl0ZW1zKSB7CisgICAgICBGaW5kUmVmZXJlbmNlRWxlbWVudERhdGEgZnJlID0geworICAgICAgICAucXVldWUgPSBxdWV1ZSwKKyAgICAgICAgLml0ZW0gPSBlbGVtZW50LT5pdGVtCisgICAgICB9OworCisgICAgICBpZiAoIShyZWZlcmVuY2UgPSBmaW5kRWxlbWVudChxdWV1ZSwgZmluZFJlZmVyZW5jZUVsZW1lbnQsICZmcmUpKSkgeworICAgICAgICByZWZlcmVuY2UgPSBxdWV1ZS0+aGVhZDsKKyAgICAgIH0gZWxzZSBpZiAocmVmZXJlbmNlID09IHF1ZXVlLT5oZWFkKSB7CisgICAgICAgIGlzTmV3SGVhZCA9IDE7CisgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgIHJlZmVyZW5jZSA9IHF1ZXVlLT5oZWFkOworICAgIH0KKworICAgIGxpbmtBZGRpdGlvbmFsRWxlbWVudChyZWZlcmVuY2UsIGVsZW1lbnQpOworICAgIGlmIChpc05ld0hlYWQpIHF1ZXVlLT5oZWFkID0gZWxlbWVudDsKKyAgfSBlbHNlIHsKKyAgICBsaW5rRmlyc3RFbGVtZW50KGVsZW1lbnQpOworICB9Cit9CisKK0VsZW1lbnQgKgorZW5xdWV1ZUl0ZW0gKFF1ZXVlICpxdWV1ZSwgdm9pZCAqaXRlbSkgeworICBFbGVtZW50ICplbGVtZW50ID0gbmV3RWxlbWVudChxdWV1ZSwgaXRlbSk7CisKKyAgaWYgKGVsZW1lbnQpIGxpbmtFbGVtZW50KGVsZW1lbnQpOworICByZXR1cm4gZWxlbWVudDsKK30KKwordm9pZAorcmVxdWV1ZUVsZW1lbnQgKEVsZW1lbnQgKmVsZW1lbnQpIHsKKyAgdW5saW5rRWxlbWVudChlbGVtZW50KTsKKyAgbGlua0VsZW1lbnQoZWxlbWVudCk7Cit9CisKK3ZvaWQKK21vdmVFbGVtZW50IChFbGVtZW50ICplbGVtZW50LCBRdWV1ZSAqcXVldWUpIHsKKyAgdW5saW5rRWxlbWVudChlbGVtZW50KTsKKyAgcmVtb3ZlRWxlbWVudChlbGVtZW50KTsKKyAgYWRkRWxlbWVudChxdWV1ZSwgZWxlbWVudCk7CisgIGxpbmtFbGVtZW50KGVsZW1lbnQpOworfQorCit2b2lkICoKK2RlcXVldWVJdGVtIChRdWV1ZSAqcXVldWUpIHsKKyAgdm9pZCAqaXRlbTsKKyAgRWxlbWVudCAqZWxlbWVudDsKKworICBpZiAoIShlbGVtZW50ID0gcXVldWUtPmhlYWQpKSByZXR1cm4gTlVMTDsKKyAgaXRlbSA9IGVsZW1lbnQtPml0ZW07CisgIGVsZW1lbnQtPml0ZW0gPSBOVUxMOworCisgIGRlbGV0ZUVsZW1lbnQoZWxlbWVudCk7CisgIHJldHVybiBpdGVtOworfQorCitRdWV1ZSAqCitnZXRFbGVtZW50UXVldWUgKGNvbnN0IEVsZW1lbnQgKmVsZW1lbnQpIHsKKyAgcmV0dXJuIGVsZW1lbnQtPnF1ZXVlOworfQorCitpbnQKK2dldEVsZW1lbnRJZGVudGlmaWVyIChjb25zdCBFbGVtZW50ICplbGVtZW50KSB7CisgIHJldHVybiBlbGVtZW50LT5pZGVudGlmaWVyOworfQorCit2b2lkICoKK2dldEVsZW1lbnRJdGVtIChjb25zdCBFbGVtZW50ICplbGVtZW50KSB7CisgIHJldHVybiBlbGVtZW50LT5pdGVtOworfQorCitzdGF0aWMgaW50IHF1ZXVlSW5pdGlhbGl6ZWQgPSAwOworCitzdGF0aWMgdm9pZAorZXhpdFF1ZXVlICh2b2lkICpkYXRhKSB7CisgIGxvY2tEaXNjYXJkZWRFbGVtZW50cygpOworICAgIHdoaWxlIChkaXNjYXJkZWRFbGVtZW50cykgeworICAgICAgRWxlbWVudCAqZWxlbWVudCA9IGRpc2NhcmRlZEVsZW1lbnRzOworICAgICAgZGlzY2FyZGVkRWxlbWVudHMgPSBlbGVtZW50LT5uZXh0OworICAgICAgZnJlZShlbGVtZW50KTsKKyAgICB9CisgIHVubG9ja0Rpc2NhcmRlZEVsZW1lbnRzKCk7CisKKyAgcXVldWVJbml0aWFsaXplZCA9IDA7Cit9CisKK1F1ZXVlICoKK25ld1F1ZXVlIChJdGVtRGVhbGxvY2F0b3IgKmRlYWxsb2NhdGVJdGVtLCBJdGVtQ29tcGFyYXRvciAqY29tcGFyZUl0ZW1zKSB7CisgIFF1ZXVlICpxdWV1ZTsKKworICBpZiAoIXF1ZXVlSW5pdGlhbGl6ZWQpIHsKKyAgICBxdWV1ZUluaXRpYWxpemVkID0gMTsKKyAgICBvblByb2dyYW1FeGl0KCJxdWV1ZSIsIGV4aXRRdWV1ZSwgTlVMTCk7CisgIH0KKworICBpZiAoKHF1ZXVlID0gbWFsbG9jKHNpemVvZigqcXVldWUpKSkpIHsKKyAgICBxdWV1ZS0+aGVhZCA9IE5VTEw7CisgICAgcXVldWUtPnNpemUgPSAwOworICAgIHF1ZXVlLT5kYXRhID0gTlVMTDsKKyAgICBxdWV1ZS0+ZGVhbGxvY2F0ZUl0ZW0gPSBkZWFsbG9jYXRlSXRlbTsKKyAgICBxdWV1ZS0+Y29tcGFyZUl0ZW1zID0gY29tcGFyZUl0ZW1zOworICAgIHJldHVybiBxdWV1ZTsKKyAgfSBlbHNlIHsKKyAgICBsb2dNYWxsb2NFcnJvcigpOworICB9CisKKyAgcmV0dXJuIE5VTEw7Cit9CisKK3ZvaWQKK2RlbGV0ZUVsZW1lbnRzIChRdWV1ZSAqcXVldWUpIHsKKyAgd2hpbGUgKHF1ZXVlLT5oZWFkKSBkZWxldGVFbGVtZW50KHF1ZXVlLT5oZWFkKTsKK30KKwordm9pZAorZGVhbGxvY2F0ZVF1ZXVlIChRdWV1ZSAqcXVldWUpIHsKKyAgZGVsZXRlRWxlbWVudHMocXVldWUpOworICBmcmVlKHF1ZXVlKTsKK30KKworc3RhdGljIHZvaWQKK2V4aXRQcm9ncmFtUXVldWUgKHZvaWQgKmRhdGEpIHsKKyAgUXVldWUgKipxdWV1ZSA9IGRhdGE7CisKKyAgaWYgKCpxdWV1ZSkgeworICAgIGRlYWxsb2NhdGVRdWV1ZSgqcXVldWUpOworICAgICpxdWV1ZSA9IE5VTEw7CisgIH0KK30KKworUXVldWUgKgorZ2V0UHJvZ3JhbVF1ZXVlICgKKyAgUXVldWUgKipxdWV1ZSwgY29uc3QgY2hhciAqbmFtZSwgaW50IGNyZWF0ZSwKKyAgUXVldWVDcmVhdG9yICpjcmVhdGVRdWV1ZSwgdm9pZCAqZGF0YQorKSB7CisgIGlmICghKnF1ZXVlICYmIGNyZWF0ZSkgeworICAgIGlmICgoKnF1ZXVlID0gY3JlYXRlUXVldWUoZGF0YSkpKSB7CisgICAgICBvblByb2dyYW1FeGl0KG5hbWUsIGV4aXRQcm9ncmFtUXVldWUsIHF1ZXVlKTsKKyAgICB9CisgIH0KKworICByZXR1cm4gKnF1ZXVlOworfQorCitpbnQKK2dldFF1ZXVlU2l6ZSAoY29uc3QgUXVldWUgKnF1ZXVlKSB7CisgIHJldHVybiBxdWV1ZS0+c2l6ZTsKK30KKwordm9pZCAqCitnZXRRdWV1ZURhdGEgKGNvbnN0IFF1ZXVlICpxdWV1ZSkgeworICByZXR1cm4gcXVldWUtPmRhdGE7Cit9CisKK3ZvaWQgKgorc2V0UXVldWVEYXRhIChRdWV1ZSAqcXVldWUsIHZvaWQgKmRhdGEpIHsKKyAgdm9pZCAqcHJldmlvdXMgPSBxdWV1ZS0+ZGF0YTsKKyAgcXVldWUtPmRhdGEgPSBkYXRhOworICByZXR1cm4gcHJldmlvdXM7Cit9CisKK0VsZW1lbnQgKgorZ2V0UXVldWVIZWFkIChjb25zdCBRdWV1ZSAqcXVldWUpIHsKKyAgcmV0dXJuIHF1ZXVlLT5oZWFkOworfQorCitFbGVtZW50ICoKK2dldFN0YWNrSGVhZCAoY29uc3QgUXVldWUgKnF1ZXVlKSB7CisgIEVsZW1lbnQgKmhlYWQgPSBxdWV1ZS0+aGVhZDsKKyAgcmV0dXJuIGhlYWQ/IGhlYWQtPnByZXZpb3VzOiBOVUxMOworfQorCitzdGF0aWMgRWxlbWVudCAqCitnZXRFbGVtZW50QnlJbmRleCAoY29uc3QgUXVldWUgKnF1ZXVlLCB1bnNpZ25lZCBpbnQgaW5kZXgsIGludCBmcm9tVGFpbCkgeworICBpZiAoaW5kZXggPCBxdWV1ZS0+c2l6ZSkgeworICAgIEVsZW1lbnQgKmVsZW1lbnQgPSBxdWV1ZS0+aGVhZDsKKworICAgIHsKKyAgICAgIGludCBpID0gcXVldWUtPnNpemUgLSAxIC0gaW5kZXg7CisKKyAgICAgIGlmIChpIDwgaW5kZXgpIHsKKyAgICAgICAgaW5kZXggPSBpOworICAgICAgICBmcm9tVGFpbCA9ICFmcm9tVGFpbDsKKyAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoZnJvbVRhaWwpIGVsZW1lbnQgPSBlbGVtZW50LT5wcmV2aW91czsKKworICAgIHdoaWxlIChpbmRleCA+IDApIHsKKyAgICAgIGVsZW1lbnQgPSBmcm9tVGFpbD8gZWxlbWVudC0+cHJldmlvdXM6IGVsZW1lbnQtPm5leHQ7CisgICAgICBpbmRleCAtPSAxOworICAgIH0KKworICAgIHJldHVybiBlbGVtZW50OworICB9CisKKyAgcmV0dXJuIDA7Cit9CisKK0VsZW1lbnQgKgorZ2V0UXVldWVFbGVtZW50IChjb25zdCBRdWV1ZSAqcXVldWUsIHVuc2lnbmVkIGludCBpbmRleCkgeworICByZXR1cm4gZ2V0RWxlbWVudEJ5SW5kZXgocXVldWUsIGluZGV4LCAwKTsKK30KKworRWxlbWVudCAqCitnZXRTdGFja0VsZW1lbnQgKGNvbnN0IFF1ZXVlICpxdWV1ZSwgdW5zaWduZWQgaW50IGluZGV4KSB7CisgIHJldHVybiBnZXRFbGVtZW50QnlJbmRleChxdWV1ZSwgaW5kZXgsIDEpOworfQorCitFbGVtZW50ICoKK2ZpbmRFbGVtZW50IChjb25zdCBRdWV1ZSAqcXVldWUsIEl0ZW1UZXN0ZXIgKnRlc3RJdGVtLCB2b2lkICpkYXRhKSB7CisgIGlmIChxdWV1ZS0+aGVhZCkgeworICAgIEVsZW1lbnQgKmVsZW1lbnQgPSBxdWV1ZS0+aGVhZDsKKworICAgIGRvIHsKKyAgICAgIGlmICh0ZXN0SXRlbShlbGVtZW50LT5pdGVtLCBkYXRhKSkgcmV0dXJuIGVsZW1lbnQ7CisgICAgfSB3aGlsZSAoKGVsZW1lbnQgPSBlbGVtZW50LT5uZXh0KSAhPSBxdWV1ZS0+aGVhZCk7CisgIH0KKyAgcmV0dXJuIE5VTEw7Cit9CisKK3ZvaWQgKgorZmluZEl0ZW0gKGNvbnN0IFF1ZXVlICpxdWV1ZSwgSXRlbVRlc3RlciAqdGVzdEl0ZW0sIHZvaWQgKmRhdGEpIHsKKyAgRWxlbWVudCAqZWxlbWVudCA9IGZpbmRFbGVtZW50KHF1ZXVlLCB0ZXN0SXRlbSwgZGF0YSk7CisgIGlmIChlbGVtZW50KSByZXR1cm4gZWxlbWVudC0+aXRlbTsKKyAgcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBpbnQKK3Rlc3RFbGVtZW50SGFzSXRlbSAoY29uc3Qgdm9pZCAqaXRlbSwgdm9pZCAqZGF0YSkgeworICByZXR1cm4gaXRlbSA9PSBkYXRhOworfQorCitFbGVtZW50ICoKK2ZpbmRFbGVtZW50V2l0aEl0ZW0gKGNvbnN0IFF1ZXVlICpxdWV1ZSwgdm9pZCAqaXRlbSkgeworICByZXR1cm4gZmluZEVsZW1lbnQocXVldWUsIHRlc3RFbGVtZW50SGFzSXRlbSwgaXRlbSk7Cit9CisKK0VsZW1lbnQgKgorcHJvY2Vzc1F1ZXVlIChRdWV1ZSAqcXVldWUsIEl0ZW1Qcm9jZXNzb3IgKnByb2Nlc3NJdGVtLCB2b2lkICpkYXRhKSB7CisgIEVsZW1lbnQgKmVsZW1lbnQgPSBxdWV1ZS0+aGVhZDsKKyAgd2hpbGUgKGVsZW1lbnQpIHsKKyAgICBFbGVtZW50ICpuZXh0ID0gZWxlbWVudC0+bmV4dDsKKyAgICBpZiAobmV4dCA9PSBxdWV1ZS0+aGVhZCkgbmV4dCA9IE5VTEw7CisgICAgaWYgKHByb2Nlc3NJdGVtKGVsZW1lbnQtPml0ZW0sIGRhdGEpKSByZXR1cm4gZWxlbWVudDsKKyAgICBlbGVtZW50ID0gbmV4dDsKKyAgfQorICByZXR1cm4gTlVMTDsKK30KKworc3RhdGljIGludAordGVzdEl0ZW1BZGRyZXNzIChjb25zdCB2b2lkICppdGVtLCB2b2lkICpkYXRhKSB7CisgIHJldHVybiBpdGVtID09IGRhdGE7Cit9CisKK2ludAorZGVsZXRlSXRlbSAoUXVldWUgKnF1ZXVlLCB2b2lkICppdGVtKSB7CisgIEVsZW1lbnQgKmVsZW1lbnQgPSBmaW5kRWxlbWVudChxdWV1ZSwgdGVzdEl0ZW1BZGRyZXNzLCBpdGVtKTsKKyAgaWYgKCFlbGVtZW50KSByZXR1cm4gMDsKKworICBlbGVtZW50LT5pdGVtID0gTlVMTDsKKyAgZGVsZXRlRWxlbWVudChlbGVtZW50KTsKKyAgcmV0dXJuIDE7Cit9CmRpZmYgLS1naXQgYS9Qcm9ncmFtcy9yZXBvcnQuYyBiL1Byb2dyYW1zL3JlcG9ydC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ0ZjA0ZjUKLS0tIC9kZXYvbnVsbAorKysgYi9Qcm9ncmFtcy9yZXBvcnQuYwpAQCAtMCwwICsxLDIwOSBAQAorLyoKKyAqIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisgKiAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisgKgorICogQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKKyNpbmNsdWRlICJwcm9sb2d1ZS5oIgorCisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKyNpbmNsdWRlICJsb2cuaCIKKyNpbmNsdWRlICJyZXBvcnQuaCIKKyNpbmNsdWRlICJxdWV1ZS5oIgorCitzdHJ1Y3QgUmVwb3J0TGlzdGVuZXJJbnN0YW5jZVN0cnVjdCB7CisgIEVsZW1lbnQgKmVsZW1lbnQ7CisgIFJlcG9ydExpc3RlbmVyICpsaXN0ZW5lcjsKKyAgdm9pZCAqZGF0YTsKK307CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgUmVwb3J0SWRlbnRpZmllciBpZGVudGlmaWVyOworICBRdWV1ZSAqbGlzdGVuZXJzOworfSBSZXBvcnRFbnRyeTsKKworc3RhdGljIFJlcG9ydEVudHJ5ICoqcmVwb3J0VGFibGUgPSBOVUxMOworc3RhdGljIHVuc2lnbmVkIGludCByZXBvcnRTaXplID0gMDsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgcmVwb3J0Q291bnQgPSAwOworCitzdGF0aWMgaW50CitmaW5kUmVwb3J0RW50cnkgKFJlcG9ydElkZW50aWZpZXIgaWRlbnRpZmllciwgaW50ICpwb3NpdGlvbikgeworICBpbnQgZmlyc3QgPSAwOworICBpbnQgbGFzdCA9IHJlcG9ydENvdW50IC0gMTsKKworICB3aGlsZSAoZmlyc3QgPD0gbGFzdCkgeworICAgIGludCBjdXJyZW50ID0gKGZpcnN0ICsgbGFzdCkgLyAyOworICAgIFJlcG9ydEVudHJ5ICpyZXBvcnQgPSByZXBvcnRUYWJsZVtjdXJyZW50XTsKKworICAgIGlmIChyZXBvcnQtPmlkZW50aWZpZXIgPCBpZGVudGlmaWVyKSB7CisgICAgICBmaXJzdCA9IGN1cnJlbnQgKyAxOworICAgIH0gZWxzZSBpZiAocmVwb3J0LT5pZGVudGlmaWVyID4gaWRlbnRpZmllcikgeworICAgICAgbGFzdCA9IGN1cnJlbnQgLSAxOworICAgIH0gZWxzZSB7CisgICAgICAqcG9zaXRpb24gPSBjdXJyZW50OworICAgICAgcmV0dXJuIDE7CisgICAgfQorICB9CisKKyAgKnBvc2l0aW9uID0gZmlyc3Q7CisgIHJldHVybiAwOworfQorCitzdGF0aWMgUmVwb3J0RW50cnkgKgorZ2V0UmVwb3J0RW50cnkgKFJlcG9ydElkZW50aWZpZXIgaWRlbnRpZmllciwgaW50IGFkZCkgeworICBpbnQgcG9zaXRpb247CisgIGludCBmb3VuZCA9IGZpbmRSZXBvcnRFbnRyeShpZGVudGlmaWVyLCAmcG9zaXRpb24pOworCisgIGlmIChmb3VuZCkgcmV0dXJuIHJlcG9ydFRhYmxlW3Bvc2l0aW9uXTsKKyAgaWYgKCFhZGQpIHJldHVybiBOVUxMOworCisgIGlmIChyZXBvcnRDb3VudCA9PSByZXBvcnRTaXplKSB7CisgICAgdW5zaWduZWQgaW50IG5ld1NpemUgPSByZXBvcnRDb3VudD8gKHJlcG9ydENvdW50IDw8IDEpOiAxOworICAgIFJlcG9ydEVudHJ5ICoqbmV3VGFibGUgPSByZWFsbG9jKHJlcG9ydFRhYmxlLCBBUlJBWV9TSVpFKHJlcG9ydFRhYmxlLCBuZXdTaXplKSk7CisKKyAgICBpZiAoIW5ld1RhYmxlKSB7CisgICAgICBsb2dNYWxsb2NFcnJvcigpOworICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgcmVwb3J0VGFibGUgPSBuZXdUYWJsZTsKKyAgICByZXBvcnRTaXplID0gbmV3U2l6ZTsKKyAgfQorCisgIHsKKyAgICBSZXBvcnRFbnRyeSAqKnNsb3QgPSAmcmVwb3J0VGFibGVbcG9zaXRpb25dOworICAgIFJlcG9ydEVudHJ5ICpyZXBvcnQgPSBtYWxsb2Moc2l6ZW9mKCpyZXBvcnQpKTsKKworICAgIGlmICghcmVwb3J0KSB7CisgICAgICBsb2dNYWxsb2NFcnJvcigpOworICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgbWVtc2V0KHJlcG9ydCwgMCwgc2l6ZW9mKCpyZXBvcnQpKTsKKyAgICByZXBvcnQtPmlkZW50aWZpZXIgPSBpZGVudGlmaWVyOworICAgIHJlcG9ydC0+bGlzdGVuZXJzID0gTlVMTDsKKworICAgIG1lbW1vdmUoc2xvdCsxLCBzbG90LCAoKHJlcG9ydENvdW50KysgLSBwb3NpdGlvbikgKiBzaXplb2YoKnNsb3QpKSk7CisgICAgKnNsb3QgPSByZXBvcnQ7CisKKyAgICByZXR1cm4gcmVwb3J0OworICB9Cit9CisKK3N0YXRpYyBpbnQKK3RlbGxMaXN0ZW5lciAodm9pZCAqaXRlbSwgdm9pZCAqZGF0YSkgeworICBSZXBvcnRMaXN0ZW5lckluc3RhbmNlICpybGkgPSBpdGVtOworICBSZXBvcnRMaXN0ZW5lclBhcmFtZXRlcnMgKnBhcmFtZXRlcnMgPSBkYXRhOworCisgIHBhcmFtZXRlcnMtPmxpc3RlbmVyRGF0YSA9IHJsaS0+ZGF0YTsKKyAgcmxpLT5saXN0ZW5lcihwYXJhbWV0ZXJzKTsKKworICByZXR1cm4gMDsKK30KKwordm9pZAorcmVwb3J0IChSZXBvcnRJZGVudGlmaWVyIGlkZW50aWZpZXIsIGNvbnN0IHZvaWQgKmRhdGEpIHsKKyAgUmVwb3J0RW50cnkgKnJlcG9ydCA9IGdldFJlcG9ydEVudHJ5KGlkZW50aWZpZXIsIDApOworCisgIGlmIChyZXBvcnQpIHsKKyAgICBpZiAocmVwb3J0LT5saXN0ZW5lcnMpIHsKKyAgICAgIFJlcG9ydExpc3RlbmVyUGFyYW1ldGVycyBwYXJhbWV0ZXJzID0geworICAgICAgICAucmVwb3J0SWRlbnRpZmllciA9IGlkZW50aWZpZXIsCisgICAgICAgIC5yZXBvcnREYXRhID0gZGF0YSwKKyAgICAgICAgLmxpc3RlbmVyRGF0YSA9IE5VTEwKKyAgICAgIH07CisKKyAgICAgIHByb2Nlc3NRdWV1ZShyZXBvcnQtPmxpc3RlbmVycywgdGVsbExpc3RlbmVyLCAmcGFyYW1ldGVycyk7CisgICAgfQorICB9Cit9CisKK3ZvaWQKK3JlcG9ydFBhcmFtZXRlclVwZGF0ZWQgKGJybGFwaV9wYXJhbV90IHBhcmFtZXRlciwgYnJsYXBpX3BhcmFtX3N1YnBhcmFtX3Qgc3VicGFyYW0pIHsKKyAgY29uc3QgQXBpUGFyYW1ldGVyVXBkYXRlZFJlcG9ydCBkYXRhID0geworICAgIC5wYXJhbWV0ZXIgPSBwYXJhbWV0ZXIsCisgICAgLnN1YnBhcmFtID0gc3VicGFyYW0KKyAgfTsKKworICByZXBvcnQoUkVQT1JUX0FQSV9QQVJBTUVURVJfVVBEQVRFRCwgJmRhdGEpOworfQorCitzdGF0aWMgaW50Cit0ZXN0TGlzdGVuZXIgKHZvaWQgKml0ZW0sIHZvaWQgKmRhdGEpIHsKKyAgUmVwb3J0TGlzdGVuZXJJbnN0YW5jZSAqcmxpID0gaXRlbTsKKyAgUmVwb3J0TGlzdGVuZXIgKmxpc3RlbmVyID0gZGF0YTsKKworICByZXR1cm4gcmxpLT5saXN0ZW5lciA9PSBsaXN0ZW5lcjsKK30KKworc3RhdGljIEVsZW1lbnQgKgorZmluZExpc3RlbmVyRWxlbWVudCAoUmVwb3J0RW50cnkgKnJlcG9ydCwgUmVwb3J0TGlzdGVuZXIgKmxpc3RlbmVyKSB7CisgIHJldHVybiBwcm9jZXNzUXVldWUocmVwb3J0LT5saXN0ZW5lcnMsIHRlc3RMaXN0ZW5lciwgbGlzdGVuZXIpOworfQorCitzdGF0aWMgdm9pZAorZGVhbGxvY2F0ZVJlcG9ydExpc3RlbmVySW5zdGFuY2UgKHZvaWQgKml0ZW0sIHZvaWQgKmRhdGEpIHsKKyAgUmVwb3J0TGlzdGVuZXJJbnN0YW5jZSAqcmxpID0gaXRlbTsKKyAgUmVwb3J0RW50cnkgKnJlcG9ydCA9IGRhdGE7CisKKyAgbG9nU3ltYm9sKExPR19ERUJVRywgcmxpLT5saXN0ZW5lciwKKyAgICAgICAgICAgICJyZXBvcnQgbGlzdGVuZXIgdW5yZWdpc3RlcmVkOiAldSIsIHJlcG9ydC0+aWRlbnRpZmllcik7CisKKyAgZnJlZShybGkpOworfQorCitSZXBvcnRMaXN0ZW5lckluc3RhbmNlICoKK3JlZ2lzdGVyUmVwb3J0TGlzdGVuZXIgKFJlcG9ydElkZW50aWZpZXIgaWRlbnRpZmllciwgUmVwb3J0TGlzdGVuZXIgKmxpc3RlbmVyLCB2b2lkICpkYXRhKSB7CisgIFJlcG9ydEVudHJ5ICpyZXBvcnQgPSBnZXRSZXBvcnRFbnRyeShpZGVudGlmaWVyLCAxKTsKKworICBpZiAocmVwb3J0KSB7CisgICAgaWYgKCFyZXBvcnQtPmxpc3RlbmVycykgeworICAgICAgaWYgKCEocmVwb3J0LT5saXN0ZW5lcnMgPSBuZXdRdWV1ZShkZWFsbG9jYXRlUmVwb3J0TGlzdGVuZXJJbnN0YW5jZSwgTlVMTCkpKSB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgICAgfQorCisgICAgICBzZXRRdWV1ZURhdGEocmVwb3J0LT5saXN0ZW5lcnMsIHJlcG9ydCk7CisgICAgfQorCisgICAgaWYgKGZpbmRMaXN0ZW5lckVsZW1lbnQocmVwb3J0LCBsaXN0ZW5lcikpIHsKKyAgICAgIGxvZ1N5bWJvbChMT0dfV0FSTklORywgbGlzdGVuZXIsICJyZXBvcnQgbGlzdGVuZXIgYWxyZWFkeSByZWdpc3RlcmVkOiAldSIsIGlkZW50aWZpZXIpOworICAgIH0gZWxzZSB7CisgICAgICBSZXBvcnRMaXN0ZW5lckluc3RhbmNlICpybGk7CisKKyAgICAgIGlmICgocmxpID0gbWFsbG9jKHNpemVvZigqcmxpKSkpKSB7CisgICAgICAgIG1lbXNldChybGksIDAsIHNpemVvZigqcmxpKSk7CisgICAgICAgIHJsaS0+bGlzdGVuZXIgPSBsaXN0ZW5lcjsKKyAgICAgICAgcmxpLT5kYXRhID0gZGF0YTsKKworICAgICAgICBpZiAoKHJsaS0+ZWxlbWVudCA9IGVucXVldWVJdGVtKHJlcG9ydC0+bGlzdGVuZXJzLCBybGkpKSkgeworICAgICAgICAgIGxvZ1N5bWJvbChMT0dfREVCVUcsIGxpc3RlbmVyLCAicmVwb3J0IGxpc3RlbmVyIHJlZ2lzdGVyZWQ6ICV1IiwgaWRlbnRpZmllcik7CisgICAgICAgICAgcmV0dXJuIHJsaTsKKyAgICAgICAgfQorCisgICAgICAgIGZyZWUocmxpKTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIGxvZ01hbGxvY0Vycm9yKCk7CisgICAgICB9CisgICAgfQorICB9CisKKyAgcmV0dXJuIE5VTEw7Cit9CisKK3ZvaWQKK3VucmVnaXN0ZXJSZXBvcnRMaXN0ZW5lciAoUmVwb3J0TGlzdGVuZXJJbnN0YW5jZSAqcmxpKSB7CisgIGRlbGV0ZUVsZW1lbnQocmxpLT5lbGVtZW50KTsKK30KZGlmZiAtLWdpdCBhL1Byb2dyYW1zL3JlcG9ydC5oIGIvUHJvZ3JhbXMvcmVwb3J0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2M4MGNlZAotLS0gL2Rldi9udWxsCisrKyBiL1Byb2dyYW1zL3JlcG9ydC5oCkBAIC0wLDAgKzEsODYgQEAKKy8qCisgKiBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorICogICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorICoKKyAqIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorICoKKyAqIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyAqLworCisjaWZuZGVmIEJSTFRUWV9JTkNMVURFRF9SRVBPUlQKKyNkZWZpbmUgQlJMVFRZX0lOQ0xVREVEX1JFUE9SVAorCisjaW5jbHVkZSAiYnJsYXBpX3BhcmFtLmgiCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYgLyogX19jcGx1c3BsdXMgKi8KKwordHlwZWRlZiBlbnVtIHsKKyAgUkVQT1JUX0JSQUlMTEVfREVWSUNFX09OTElORSwKKyAgUkVQT1JUX0JSQUlMTEVfREVWSUNFX09GRkxJTkUsCisgIFJFUE9SVF9CUkFJTExFX1dJTkRPV19NT1ZFRCwKKyAgUkVQT1JUX0JSQUlMTEVfV0lORE9XX1VQREFURUQsCisgIFJFUE9SVF9CUkFJTExFX0tFWV9FVkVOVCwKKyAgUkVQT1JUX0FQSV9QQVJBTUVURVJfVVBEQVRFRCwKK30gUmVwb3J0SWRlbnRpZmllcjsKKworZXh0ZXJuIHZvaWQgcmVwb3J0IChSZXBvcnRJZGVudGlmaWVyIGlkZW50aWllciwgY29uc3Qgdm9pZCAqZGF0YSk7CisKK2V4dGVybiB2b2lkIHJlcG9ydFBhcmFtZXRlclVwZGF0ZWQgKAorICBicmxhcGlfcGFyYW1fdCBwYXJhbWV0ZXIsIGJybGFwaV9wYXJhbV9zdWJwYXJhbV90IHN1YnBhcmFtCispOworCit0eXBlZGVmIHN0cnVjdCB7CisgIFJlcG9ydElkZW50aWZpZXIgcmVwb3J0SWRlbnRpZmllcjsKKyAgY29uc3Qgdm9pZCAqcmVwb3J0RGF0YTsKKyAgdm9pZCAqbGlzdGVuZXJEYXRhOworfSBSZXBvcnRMaXN0ZW5lclBhcmFtZXRlcnM7CisKKyNkZWZpbmUgUkVQT1JUX0xJU1RFTkVSKG5hbWUpIHZvaWQgbmFtZSAoY29uc3QgUmVwb3J0TGlzdGVuZXJQYXJhbWV0ZXJzICpwYXJhbWV0ZXJzKQordHlwZWRlZiBSRVBPUlRfTElTVEVORVIoUmVwb3J0TGlzdGVuZXIpOwordHlwZWRlZiBzdHJ1Y3QgUmVwb3J0TGlzdGVuZXJJbnN0YW5jZVN0cnVjdCBSZXBvcnRMaXN0ZW5lckluc3RhbmNlOworCitleHRlcm4gUmVwb3J0TGlzdGVuZXJJbnN0YW5jZSAqcmVnaXN0ZXJSZXBvcnRMaXN0ZW5lciAoCisgIFJlcG9ydElkZW50aWZpZXIgaWRlbnRpZmllciwKKyAgUmVwb3J0TGlzdGVuZXIgKmxpc3RlbmVyLAorICB2b2lkICpkYXRhCispOworCitleHRlcm4gdm9pZCB1bnJlZ2lzdGVyUmVwb3J0TGlzdGVuZXIgKFJlcG9ydExpc3RlbmVySW5zdGFuY2UgKnJsaSk7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgc3RydWN0IHsKKyAgICB1bnNpZ25lZCBpbnQgY29sdW1uOworICAgIHVuc2lnbmVkIGludCByb3c7CisgIH0gc2NyZWVuOworCisgIHN0cnVjdCB7CisgICAgdW5zaWduZWQgaW50IGNvdW50OworICB9IHRleHQ7Cit9IEJyYWlsbGVXaW5kb3dNb3ZlZFJlcG9ydDsKKwordHlwZWRlZiBzdHJ1Y3QgeworICBjb25zdCB1bnNpZ25lZCBjaGFyICpjZWxsczsKKyAgdW5zaWduZWQgaW50IGNvdW50OworfSBCcmFpbGxlV2luZG93VXBkYXRlZFJlcG9ydDsKKwordHlwZWRlZiBzdHJ1Y3QgeworICBicmxhcGlfcGFyYW1fdCBwYXJhbWV0ZXI7CisgIGJybGFwaV9wYXJhbV9zdWJwYXJhbV90IHN1YnBhcmFtOworfSBBcGlQYXJhbWV0ZXJVcGRhdGVkUmVwb3J0OworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZiAvKiBfX2NwbHVzcGx1cyAqLworCisjZW5kaWYgLyogQlJMVFRZX0lOQ0xVREVEX1JFUE9SVCAqLwpkaWZmIC0tZ2l0IGEvUHJvZ3JhbXMvcmV2aXNpb24uYyBiL1Byb2dyYW1zL3JldmlzaW9uLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzliZDJiMQotLS0gL2Rldi9udWxsCisrKyBiL1Byb2dyYW1zL3JldmlzaW9uLmMKQEAgLTAsMCArMSwzMCBAQAorLyoKKyAqIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisgKiAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisgKgorICogQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKKyNpbmNsdWRlICJwcm9sb2d1ZS5oIgorCisjaW5jbHVkZSAicmV2aXNpb24uaCIKKworc3RhdGljIGNvbnN0IGNoYXIgcmV2aXNpb25JZGVudGlmaWVyW10gPQorI2luY2x1ZGUgInJldmlzaW9uX2lkZW50aWZpZXIuYXV0by5oIgorOworCitjb25zdCBjaGFyICoKK2dldFJldmlzaW9uSWRlbnRpZmllciAodm9pZCkgeworICByZXR1cm4gcmV2aXNpb25JZGVudGlmaWVyOworfQpkaWZmIC0tZ2l0IGEvUHJvZ3JhbXMvcmV2aXNpb25faWRlbnRpZmllci5hdXRvLmggYi9Qcm9ncmFtcy9yZXZpc2lvbl9pZGVudGlmaWVyLmF1dG8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZjJmMWFhCi0tLSAvZGV2L251bGwKKysrIGIvUHJvZ3JhbXMvcmV2aXNpb25faWRlbnRpZmllci5hdXRvLmgKQEAgLTAsMCArMSBAQAorIkJSTFRUWS02LjYiCmRpZmYgLS1naXQgYS9Qcm9ncmFtcy9yZ3guYyBiL1Byb2dyYW1zL3JneC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNmODA3MTkKLS0tIC9kZXYvbnVsbAorKysgYi9Qcm9ncmFtcy9yZ3guYwpAQCAtMCwwICsxLDQyMSBAQAorLyoKKyAqIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisgKiAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisgKgorICogQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKKyNpbmNsdWRlICJwcm9sb2d1ZS5oIgorCisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKyNpbmNsdWRlICJsb2cuaCIKKyNpbmNsdWRlICJyZ3guaCIKKyNpbmNsdWRlICJyZ3hfaW50ZXJuYWwuaCIKKyNpbmNsdWRlICJ1dGY4LmgiCisjaW5jbHVkZSAicXVldWUuaCIKKyNpbmNsdWRlICJzdHJmbXQuaCIKKworI2RlZmluZSBSR1hfVVRGOF9UT19DSEFSQUNURVJTIFwKKyAgc2l6ZV90IHNpemUgPSBzdHJsZW4oc3RyaW5nKSArIDE7IFwKKyAgd2NoYXJfdCBjaGFyYWN0ZXJzW3NpemVdOyBcCisgIHNpemVfdCBjb3VudDsgXAorICB7IFwKKyAgICBjb25zdCBjaGFyICpmcm9tID0gc3RyaW5nOyBcCisgICAgd2NoYXJfdCAqdG8gPSBjaGFyYWN0ZXJzOyBcCisgICAgY29udmVydFV0ZjhUb1djaGFycygmZnJvbSwgJnRvLCBzaXplKTsgXAorICAgIGNvdW50ID0gdG8gLSBjaGFyYWN0ZXJzOyBcCisgIH0KKworI2RlZmluZSBSR1hfQ0hBUkFDVEVSU19UT19JTlRFUk5BTCBcCisgIFJHWF9DaGFyYWN0ZXJUeXBlIGludGVybmFsW2xlbmd0aCArIDFdOyBcCisgIGludGVybmFsW2xlbmd0aF0gPSAwOyBcCisgIGZvciAodW5zaWduZWQgaW50IGluZGV4PTA7IGluZGV4PGxlbmd0aDsgaW5kZXgrPTEpIHsgXAorICAgIGludGVybmFsW2luZGV4XSA9IGNoYXJhY3RlcnNbaW5kZXhdOyBcCisgIH0KKworc3RydWN0IFJHWF9PYmplY3RTdHJ1Y3QgeworICB2b2lkICpkYXRhOworICBRdWV1ZSAqbWF0Y2hlcnM7CisgIFJHWF9PcHRpb25zVHlwZSBvcHRpb25zOworfTsKKworc3RydWN0IFJHWF9NYXRjaGVyU3RydWN0IHsKKyAgdm9pZCAqZGF0YTsKKyAgUkdYX01hdGNoSGFuZGxlciAqaGFuZGxlcjsKKyAgUkdYX09wdGlvbnNUeXBlIG9wdGlvbnM7CisKKyAgc3RydWN0IHsKKyAgICB3Y2hhcl90ICpjaGFyYWN0ZXJzOworICAgIHNpemVfdCBsZW5ndGg7CisgIH0gcGF0dGVybjsKKworICBzdHJ1Y3QgeworICAgIFJHWF9Db2RlVHlwZSAqY29kZTsKKyAgICBSR1hfRGF0YVR5cGUgKmRhdGE7CisgIH0gY29tcGlsZWQ7Cit9OworCitzdGF0aWMgdm9pZAorcmd4TG9nRXJyb3IgKGludCBlcnJvciwgY29uc3QgUkdYX01hdGNoZXIgKm1hdGNoZXIsIFJHWF9PZmZzZXRUeXBlICpvZmZzZXQpIHsKKyAgY2hhciBsb2dbMFgxMDBdOworICBTVFJfQkVHSU4obG9nLCBzaXplb2YobG9nKSk7CisKKyAgU1RSX1BSSU5URigicmVndWxhciBleHByZXNzaW9uIGVycm9yIik7CisgIGlmIChvZmZzZXQpIFNUUl9QUklOVEYoIiBhdCBvZmZzZXQgJSJQUkl1MzIsICh1aW50MzJfdCkqb2Zmc2V0KTsKKyAgU1RSX1BSSU5URigiOiAiKTsKKworICB7CisgICAgc2l6ZV90IG9sZExlbmd0aCA9IFNUUl9MRU5HVEg7CisgICAgU1RSX0ZPUk1BVChyZ3hGb3JtYXRFcnJvck1lc3NhZ2UsIGVycm9yKTsKKyAgICBpZiAoU1RSX0xFTkdUSCA9PSBvbGRMZW5ndGgpIFNUUl9QUklOVEYoInVucmVjb2duaXplZCBlcnJvciAlZCIsIGVycm9yKTsKKyAgfQorCisgIGlmIChtYXRjaGVyKSB7CisgICAgU1RSX1BSSU5URigKKyAgICAgICI6ICUuKiJQUkl3cywgKGludCltYXRjaGVyLT5wYXR0ZXJuLmxlbmd0aCwgbWF0Y2hlci0+cGF0dGVybi5jaGFyYWN0ZXJzCisgICAgKTsKKyAgfQorCisgIFNUUl9FTkQ7CisgIGxvZ01lc3NhZ2UoTE9HX1dBUk5JTkcsICIlcyIsIGxvZyk7Cit9CisKK3N0YXRpYyB2b2lkCityZ3hEZWFsbG9jYXRlTWF0Y2hlciAodm9pZCAqaXRlbSwgdm9pZCAqZGF0YSkgeworICBSR1hfTWF0Y2hlciAqbWF0Y2hlciA9IGl0ZW07CisKKyAgcmd4RGVhbGxvY2F0ZURhdGEobWF0Y2hlci0+Y29tcGlsZWQuZGF0YSk7CisgIHJneERlYWxsb2NhdGVDb2RlKG1hdGNoZXItPmNvbXBpbGVkLmNvZGUpOworICBmcmVlKG1hdGNoZXItPnBhdHRlcm4uY2hhcmFjdGVycyk7CisgIGZyZWUobWF0Y2hlcik7Cit9CisKK1JHWF9NYXRjaGVyICoKK3JneEFkZFBhdHRlcm5DaGFyYWN0ZXJzICgKKyAgUkdYX09iamVjdCAqcmd4LAorICBjb25zdCB3Y2hhcl90ICpjaGFyYWN0ZXJzLCBzaXplX3QgbGVuZ3RoLAorICBSR1hfTWF0Y2hIYW5kbGVyICpoYW5kbGVyLCB2b2lkICpkYXRhCispIHsKKyAgUkdYX01hdGNoZXIgKm1hdGNoZXI7CisKKyAgaWYgKChtYXRjaGVyID0gbWFsbG9jKHNpemVvZigqbWF0Y2hlcikpKSkgeworICAgIG1lbXNldChtYXRjaGVyLCAwLCBzaXplb2YoKm1hdGNoZXIpKTsKKyAgICBtYXRjaGVyLT5kYXRhID0gZGF0YTsKKyAgICBtYXRjaGVyLT5oYW5kbGVyID0gaGFuZGxlcjsKKyAgICBtYXRjaGVyLT5vcHRpb25zID0gMDsKKworICAgIG1hdGNoZXItPnBhdHRlcm4uY2hhcmFjdGVycyA9IGNhbGxvYygKKyAgICAgIChtYXRjaGVyLT5wYXR0ZXJuLmxlbmd0aCA9IGxlbmd0aCkgKyAxLAorICAgICAgc2l6ZW9mKCptYXRjaGVyLT5wYXR0ZXJuLmNoYXJhY3RlcnMpCisgICAgKTsKKworICAgIGlmIChtYXRjaGVyLT5wYXR0ZXJuLmNoYXJhY3RlcnMpIHsKKyAgICAgIHdtZW1jcHkobWF0Y2hlci0+cGF0dGVybi5jaGFyYWN0ZXJzLCBjaGFyYWN0ZXJzLCBsZW5ndGgpOworICAgICAgbWF0Y2hlci0+cGF0dGVybi5jaGFyYWN0ZXJzW2xlbmd0aF0gPSAwOworCisgICAgICBSR1hfQ0hBUkFDVEVSU19UT19JTlRFUk5BTDsKKyAgICAgIGludCBlcnJvcjsKKyAgICAgIFJHWF9PZmZzZXRUeXBlIG9mZnNldDsKKworICAgICAgbWF0Y2hlci0+Y29tcGlsZWQuY29kZSA9IHJneENvbXBpbGVQYXR0ZXJuKAorICAgICAgICBpbnRlcm5hbCwgbGVuZ3RoLCByZ3gtPm9wdGlvbnMsICZvZmZzZXQsICZlcnJvcgorICAgICAgKTsKKworICAgICAgaWYgKG1hdGNoZXItPmNvbXBpbGVkLmNvZGUpIHsKKyAgICAgICAgbWF0Y2hlci0+Y29tcGlsZWQuZGF0YSA9IHJneEFsbG9jYXRlRGF0YShtYXRjaGVyLT5jb21waWxlZC5jb2RlKTsKKworICAgICAgICBpZiAobWF0Y2hlci0+Y29tcGlsZWQuZGF0YSkgeworICAgICAgICAgIGlmIChlbnF1ZXVlSXRlbShyZ3gtPm1hdGNoZXJzLCBtYXRjaGVyKSkgeworICAgICAgICAgICAgcmV0dXJuIG1hdGNoZXI7CisgICAgICAgICAgfQorCisgICAgICAgICAgcmd4RGVhbGxvY2F0ZURhdGEobWF0Y2hlci0+Y29tcGlsZWQuZGF0YSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgbG9nTWFsbG9jRXJyb3IoKTsKKyAgICAgICAgfQorCisgICAgICAgIHJneERlYWxsb2NhdGVDb2RlKG1hdGNoZXItPmNvbXBpbGVkLmNvZGUpOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgcmd4TG9nRXJyb3IoZXJyb3IsIG1hdGNoZXIsICZvZmZzZXQpOworICAgICAgfQorCisgICAgICBmcmVlKG1hdGNoZXItPnBhdHRlcm4uY2hhcmFjdGVycyk7CisgICAgfSBlbHNlIHsKKyAgICAgIGxvZ01hbGxvY0Vycm9yKCk7CisgICAgfQorCisgICAgZnJlZShtYXRjaGVyKTsKKyAgfSBlbHNlIHsKKyAgICBsb2dNYWxsb2NFcnJvcigpOworICB9CisKKyAgcmV0dXJuIE5VTEw7Cit9CisKK1JHWF9NYXRjaGVyICoKK3JneEFkZFBhdHRlcm5TdHJpbmcgKAorICBSR1hfT2JqZWN0ICpyZ3gsCisgIGNvbnN0IHdjaGFyX3QgKnN0cmluZywKKyAgUkdYX01hdGNoSGFuZGxlciAqaGFuZGxlciwgdm9pZCAqZGF0YQorKSB7CisgIHJldHVybiByZ3hBZGRQYXR0ZXJuQ2hhcmFjdGVycyhyZ3gsIHN0cmluZywgd2NzbGVuKHN0cmluZyksIGhhbmRsZXIsIGRhdGEpOworfQorCitSR1hfTWF0Y2hlciAqCityZ3hBZGRQYXR0ZXJuVVRGOCAoCisgIFJHWF9PYmplY3QgKnJneCwKKyAgY29uc3QgY2hhciAqc3RyaW5nLAorICBSR1hfTWF0Y2hIYW5kbGVyICpoYW5kbGVyLCB2b2lkICpkYXRhCispIHsKKyAgUkdYX1VURjhfVE9fQ0hBUkFDVEVSUzsKKyAgcmV0dXJuIHJneEFkZFBhdHRlcm5DaGFyYWN0ZXJzKHJneCwgY2hhcmFjdGVycywgY291bnQsIGhhbmRsZXIsIGRhdGEpOworfQorCitzdGF0aWMgaW50CityZ3hUZXN0TWF0Y2hlciAoY29uc3Qgdm9pZCAqaXRlbSwgdm9pZCAqZGF0YSkgeworICBjb25zdCBSR1hfTWF0Y2hlciAqbWF0Y2hlciA9IGl0ZW07CisgIFJHWF9NYXRjaCAqbWF0Y2ggPSBkYXRhOworCisgIGludCBlcnJvcjsKKyAgaW50IG1hdGNoZWQgPSByZ3hNYXRjaFRleHQoCisgICAgbWF0Y2gtPnRleHQuaW50ZXJuYWwsIG1hdGNoLT50ZXh0Lmxlbmd0aCwKKyAgICBtYXRjaGVyLT5jb21waWxlZC5jb2RlLCBtYXRjaGVyLT5jb21waWxlZC5kYXRhLAorICAgIG1hdGNoZXItPm9wdGlvbnMsICZtYXRjaC0+Y2FwdHVyZS5jb3VudCwgJmVycm9yCisgICk7CisKKyAgaWYgKCFtYXRjaGVkKSB7CisgICAgaWYgKGVycm9yICE9IFJHWF9OT19NQVRDSCkgcmd4TG9nRXJyb3IoZXJyb3IsIG1hdGNoZXIsIE5VTEwpOworICAgIHJldHVybiAwOworICB9CisKKyAgUkdYX01hdGNoSGFuZGxlciAqaGFuZGxlciA9IG1hdGNoZXItPmhhbmRsZXI7CisgIGlmICghaGFuZGxlcikgcmV0dXJuIDE7CisKKyAgbWF0Y2gtPm1hdGNoZXIgPSBtYXRjaGVyOworICBtYXRjaC0+ZGF0YS5wYXR0ZXJuID0gbWF0Y2hlci0+ZGF0YTsKKyAgbWF0Y2gtPnBhdHRlcm4uY2hhcmFjdGVycyA9IG1hdGNoZXItPnBhdHRlcm4uY2hhcmFjdGVyczsKKyAgbWF0Y2gtPnBhdHRlcm4ubGVuZ3RoID0gbWF0Y2hlci0+cGF0dGVybi5sZW5ndGg7CisgIHJldHVybiBoYW5kbGVyKG1hdGNoKTsKK30KKworUkdYX01hdGNoZXIgKgorcmd4TWF0Y2hUZXh0Q2hhcmFjdGVycyAoCisgIFJHWF9PYmplY3QgKnJneCwKKyAgY29uc3Qgd2NoYXJfdCAqY2hhcmFjdGVycywgc2l6ZV90IGxlbmd0aCwKKyAgUkdYX01hdGNoICoqcmVzdWx0LCB2b2lkICpkYXRhCispIHsKKyAgUkdYX0NIQVJBQ1RFUlNfVE9fSU5URVJOQUw7CisKKyAgUkdYX01hdGNoIG1hdGNoID0geworICAgIC50ZXh0ID0geworICAgICAgLmludGVybmFsID0gaW50ZXJuYWwsCisgICAgICAuY2hhcmFjdGVycyA9IGNoYXJhY3RlcnMsCisgICAgICAubGVuZ3RoID0gbGVuZ3RoCisgICAgfSwKKworICAgIC5kYXRhID0geworICAgICAgLm9iamVjdCA9IHJneC0+ZGF0YSwKKyAgICAgIC5tYXRjaCA9IGRhdGEKKyAgICB9CisgIH07CisKKyAgRWxlbWVudCAqZWxlbWVudCA9IGZpbmRFbGVtZW50KHJneC0+bWF0Y2hlcnMsIHJneFRlc3RNYXRjaGVyLCAmbWF0Y2gpOworICBpZiAoIWVsZW1lbnQpIHJldHVybiBOVUxMOworCisgIGlmIChyZXN1bHQpIHsKKyAgICB0eXBlZGVmIHN0cnVjdCB7CisgICAgICBSR1hfTWF0Y2ggbWF0Y2g7CisgICAgICB3Y2hhcl90IHRleHRbXTsKKyAgICB9IEJsb2NrOworCisgICAgQmxvY2sgKmJsb2NrOworICAgIHNpemVfdCBzaXplID0gc2l6ZW9mKCpibG9jayk7CisgICAgc2l6ZSArPSAobGVuZ3RoICsgMSkgKiBzaXplb2YoYmxvY2stPnRleHRbMF0pOworCisgICAgaWYgKCEoYmxvY2sgPSBtYWxsb2Moc2l6ZSkpKSB7CisgICAgICBsb2dNYWxsb2NFcnJvcigpOworICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgYmxvY2stPm1hdGNoID0gbWF0Y2g7CisgICAgYmxvY2stPm1hdGNoLnRleHQuaW50ZXJuYWwgPSBOVUxMOworCisgICAgd21lbWNweShibG9jay0+dGV4dCwgbWF0Y2gudGV4dC5jaGFyYWN0ZXJzLCBsZW5ndGgpOworICAgIGJsb2NrLT50ZXh0W2xlbmd0aF0gPSAwOworICAgIGJsb2NrLT5tYXRjaC50ZXh0LmNoYXJhY3RlcnMgPSBibG9jay0+dGV4dDsKKworICAgICpyZXN1bHQgPSAmYmxvY2stPm1hdGNoOworICB9CisKKyAgcmV0dXJuIGdldEVsZW1lbnRJdGVtKGVsZW1lbnQpOworfQorCitSR1hfTWF0Y2hlciAqCityZ3hNYXRjaFRleHRTdHJpbmcgKAorICBSR1hfT2JqZWN0ICpyZ3gsCisgIGNvbnN0IHdjaGFyX3QgKnN0cmluZywKKyAgUkdYX01hdGNoICoqcmVzdWx0LCB2b2lkICpkYXRhCispIHsKKyAgcmV0dXJuIHJneE1hdGNoVGV4dENoYXJhY3RlcnMocmd4LCBzdHJpbmcsIHdjc2xlbihzdHJpbmcpLCByZXN1bHQsIGRhdGEpOworfQorCitSR1hfTWF0Y2hlciAqCityZ3hNYXRjaFRleHRVVEY4ICgKKyAgUkdYX09iamVjdCAqcmd4LAorICBjb25zdCBjaGFyICpzdHJpbmcsCisgIFJHWF9NYXRjaCAqKnJlc3VsdCwgdm9pZCAqZGF0YQorKSB7CisgIFJHWF9VVEY4X1RPX0NIQVJBQ1RFUlM7CisgIHJldHVybiByZ3hNYXRjaFRleHRDaGFyYWN0ZXJzKHJneCwgY2hhcmFjdGVycywgY291bnQsIHJlc3VsdCwgZGF0YSk7Cit9CisKK2ludAorcmd4R2V0TmFtZU51bWJlckNoYXJhY3RlcnMgKAorICBjb25zdCBSR1hfTWF0Y2hlciAqbWF0Y2hlciwKKyAgY29uc3Qgd2NoYXJfdCAqY2hhcmFjdGVycywgc2l6ZV90IGxlbmd0aCwKKyAgc2l6ZV90ICpudW1iZXIKKykgeworICBSR1hfQ0hBUkFDVEVSU19UT19JTlRFUk5BTDsKKworICBpbnQgZXJyb3I7CisgIGlmIChyZ3hOYW1lTnVtYmVyKG1hdGNoZXItPmNvbXBpbGVkLmNvZGUsIGludGVybmFsLCBudW1iZXIsICZlcnJvcikpIHJldHVybiAxOworCisgIGlmIChlcnJvciAhPSBSR1hfTk9fTkFNRSkgcmd4TG9nRXJyb3IoZXJyb3IsIG1hdGNoZXIsIE5VTEwpOworICByZXR1cm4gMDsKK30KKworaW50CityZ3hHZXROYW1lTnVtYmVyU3RyaW5nICgKKyAgY29uc3QgUkdYX01hdGNoZXIgKm1hdGNoZXIsCisgIGNvbnN0IHdjaGFyX3QgKnN0cmluZywKKyAgc2l6ZV90ICpudW1iZXIKKykgeworICByZXR1cm4gcmd4R2V0TmFtZU51bWJlckNoYXJhY3RlcnMobWF0Y2hlciwgc3RyaW5nLCB3Y3NsZW4oc3RyaW5nKSwgbnVtYmVyKTsKK30KKworaW50CityZ3hHZXROYW1lTnVtYmVyVVRGOCAoCisgIGNvbnN0IFJHWF9NYXRjaGVyICptYXRjaGVyLAorICBjb25zdCBjaGFyICpzdHJpbmcsCisgIHNpemVfdCAqbnVtYmVyCispIHsKKyAgUkdYX1VURjhfVE9fQ0hBUkFDVEVSUzsKKyAgcmV0dXJuIHJneEdldE5hbWVOdW1iZXJDaGFyYWN0ZXJzKG1hdGNoZXIsIGNoYXJhY3RlcnMsIGNvdW50LCBudW1iZXIpOworfQorCitzaXplX3QKK3JneEdldENhcHR1cmVDb3VudCAoCisgIGNvbnN0IFJHWF9NYXRjaCAqbWF0Y2gKKykgeworICByZXR1cm4gbWF0Y2gtPmNhcHR1cmUuY291bnQ7Cit9CisKK2ludAorcmd4R2V0Q2FwdHVyZUJvdW5kcyAoCisgIGNvbnN0IFJHWF9NYXRjaCAqbWF0Y2gsCisgIHNpemVfdCBudW1iZXIsIHNpemVfdCAqZnJvbSwgc2l6ZV90ICp0bworKSB7CisgIGlmIChudW1iZXIgPiBtYXRjaC0+Y2FwdHVyZS5jb3VudCkgcmV0dXJuIDA7CisgIHJldHVybiByZ3hDYXB0dXJlQm91bmRzKG1hdGNoLT5tYXRjaGVyLT5jb21waWxlZC5kYXRhLCBudW1iZXIsIGZyb20sIHRvKTsKK30KKworaW50CityZ3hHZXRDYXB0dXJlVGV4dCAoCisgIGNvbnN0IFJHWF9NYXRjaCAqbWF0Y2gsCisgIHNpemVfdCBudW1iZXIsIGNvbnN0IHdjaGFyX3QgKipjaGFyYWN0ZXJzLCBzaXplX3QgKmxlbmd0aAorKSB7CisgIHNpemVfdCBmcm9tLCB0bzsKKyAgaWYgKCFyZ3hHZXRDYXB0dXJlQm91bmRzKG1hdGNoLCBudW1iZXIsICZmcm9tLCAmdG8pKSByZXR1cm4gMDsKKworICAqY2hhcmFjdGVycyA9ICZtYXRjaC0+dGV4dC5jaGFyYWN0ZXJzW2Zyb21dOworICAqbGVuZ3RoID0gdG8gLSBmcm9tOworICByZXR1cm4gMTsKK30KKworUkdYX09iamVjdCAqCityZ3hOZXdPYmplY3QgKHZvaWQgKmRhdGEpIHsKKyAgUkdYX09iamVjdCAqcmd4OworCisgIGlmICgocmd4ID0gbWFsbG9jKHNpemVvZigqcmd4KSkpKSB7CisgICAgbWVtc2V0KHJneCwgMCwgc2l6ZW9mKCpyZ3gpKTsKKyAgICByZ3gtPmRhdGEgPSBkYXRhOworICAgIHJneC0+b3B0aW9ucyA9IDA7CisKKyAgICBpZiAoKHJneC0+bWF0Y2hlcnMgPSBuZXdRdWV1ZShyZ3hEZWFsbG9jYXRlTWF0Y2hlciwgTlVMTCkpKSB7CisgICAgICByZXR1cm4gcmd4OworICAgIH0KKworICAgIGZyZWUocmd4KTsKKyAgfSBlbHNlIHsKKyAgICBsb2dNYWxsb2NFcnJvcigpOworICB9CisKKyAgcmV0dXJuIE5VTEw7Cit9CisKK3ZvaWQKK3JneERlc3Ryb3lPYmplY3QgKFJHWF9PYmplY3QgKnJneCkgeworICBkZWFsbG9jYXRlUXVldWUocmd4LT5tYXRjaGVycyk7CisgIGZyZWUocmd4KTsKK30KKworc3RhdGljIGludAorcmd4T3B0aW9uICgKKyAgUkdYX09wdGlvbkFjdGlvbiBhY3Rpb24sIGludCBvcHRpb24sCisgIFJHWF9PcHRpb25zVHlwZSAqYml0cywgY29uc3QgUkdYX09wdGlvbk1hcCAqbWFwCispIHsKKyAgUkdYX09wdGlvbnNUeXBlIGJpdCA9ICgob3B0aW9uID49IDApICYmIChvcHRpb24gPCBtYXAtPmNvdW50KSk/IG1hcC0+YXJyYXlbb3B0aW9uXTogMDsKKyAgaW50IHdhc1NldCA9ICEhKCpiaXRzICYgYml0KTsKKworICBpZiAoYWN0aW9uID09IFJHWF9PUFRJT05fVE9HR0xFKSB7CisgICAgYWN0aW9uID0gd2FzU2V0PyBSR1hfT1BUSU9OX0NMRUFSOiBSR1hfT1BUSU9OX1NFVDsKKyAgfQorCisgIHN3aXRjaCAoYWN0aW9uKSB7CisgICAgY2FzZSBSR1hfT1BUSU9OX1NFVDoKKyAgICAgICpiaXRzIHw9IGJpdDsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBSR1hfT1BUSU9OX0NMRUFSOgorICAgICAgKmJpdHMgJj0gfmJpdDsKKyAgICAgIGJyZWFrOworCisgICAgZGVmYXVsdDoKKyAgICAgIGxvZ01lc3NhZ2UoTE9HX1dBUk5JTkcsICJ1bmltcGxlbWVudGVkIHJlZ3VsYXIgZXhwcmVzc2lvbiBvcHRpb24gYWN0aW9uOiAlZCIsIGFjdGlvbik7CisgICAgICAvKiBmYWxsIHRocm91Z2ggKi8KKyAgICBjYXNlIFJHWF9PUFRJT05fVEVTVDoKKyAgICAgIGJyZWFrOworICB9CisKKyAgcmV0dXJuIHdhc1NldDsKK30KKworaW50CityZ3hDb21waWxlT3B0aW9uICgKKyAgUkdYX09iamVjdCAqcmd4LAorICBSR1hfT3B0aW9uQWN0aW9uIGFjdGlvbiwKKyAgUkdYX0NvbXBpbGVPcHRpb24gb3B0aW9uCispIHsKKyAgcmV0dXJuIHJneE9wdGlvbihhY3Rpb24sIG9wdGlvbiwgJnJneC0+b3B0aW9ucywgJnJneENvbXBpbGVPcHRpb25zTWFwKTsKK30KKworaW50CityZ3hNYXRjaE9wdGlvbiAoCisgIFJHWF9NYXRjaGVyICptYXRjaGVyLAorICBSR1hfT3B0aW9uQWN0aW9uIGFjdGlvbiwKKyAgUkdYX01hdGNoT3B0aW9uIG9wdGlvbgorKSB7CisgIHJldHVybiByZ3hPcHRpb24oYWN0aW9uLCBvcHRpb24sICZtYXRjaGVyLT5vcHRpb25zLCAmcmd4TWF0Y2hPcHRpb25zTWFwKTsKK30KZGlmZiAtLWdpdCBhL1Byb2dyYW1zL3JneF9pbnRlcm5hbC5oIGIvUHJvZ3JhbXMvcmd4X2ludGVybmFsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGQ4NDAzOQotLS0gL2Rldi9udWxsCisrKyBiL1Byb2dyYW1zL3JneF9pbnRlcm5hbC5oCkBAIC0wLDAgKzEsMTE5IEBACisvKgorICogQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyAqICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyAqCisgKiBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorICoKKyAqIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyAqCisgKiBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisgKi8KKworI2lmbmRlZiBCUkxUVFlfSU5DTFVERURfUkdYX0lOVEVSTkFMCisjZGVmaW5lIEJSTFRUWV9JTkNMVURFRF9SR1hfSU5URVJOQUwKKworI2luY2x1ZGUgInN0cmZtdGguaCIKKworI2lmIGRlZmluZWQoVVNFX1BLR19SR1hfTk9ORSkKKyNkZWZpbmUgUkdYX05PX01BVENIIDEKKyNkZWZpbmUgUkdYX05PX05BTUUgMgorCit0eXBlZGVmIHdjaGFyX3QgUkdYX0NoYXJhY3RlclR5cGU7Cit0eXBlZGVmIHNpemVfdCBSR1hfT2Zmc2V0VHlwZTsKK3R5cGVkZWYgaW50IFJHWF9PcHRpb25zVHlwZTsKK3R5cGVkZWYgdWludDhfdCBSR1hfQ29kZVR5cGU7Cit0eXBlZGVmIHVpbnQ4X3QgUkdYX0RhdGFUeXBlOworCisjZWxpZiBkZWZpbmVkKFVTRV9QS0dfUkdYX0xJQlBDUkUzMikKKyNpbmNsdWRlIDxwY3JlLmg+CisKKyNkZWZpbmUgUkdYX05PX01BVENIIFBDUkVfRVJST1JfTk9NQVRDSAorI2RlZmluZSBSR1hfTk9fTkFNRSBQQ1JFX0VSUk9SX05PU1VCU1RSSU5HCisKK3R5cGVkZWYgUENSRV9VQ0hBUjMyIFJHWF9DaGFyYWN0ZXJUeXBlOwordHlwZWRlZiBpbnQgUkdYX09mZnNldFR5cGU7Cit0eXBlZGVmIGludCBSR1hfT3B0aW9uc1R5cGU7Cit0eXBlZGVmIHBjcmUzMiBSR1hfQ29kZVR5cGU7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgcGNyZTMyX2V4dHJhICpzdHVkeTsKKyAgc2l6ZV90IG1hdGNoZXM7CisgIHNpemVfdCBjb3VudDsKKyAgUkdYX09mZnNldFR5cGUgb2Zmc2V0c1tdOworfSBSR1hfRGF0YVR5cGU7CisKKyNlbGlmIGRlZmluZWQoVVNFX1BLR19SR1hfTElCUENSRTJfMzIpCisjZGVmaW5lIFBDUkUyX0NPREVfVU5JVF9XSURUSCAzMgorI2luY2x1ZGUgPHBjcmUyLmg+CisKKyNkZWZpbmUgUkdYX05PX01BVENIIFBDUkUyX0VSUk9SX05PTUFUQ0gKKyNkZWZpbmUgUkdYX05PX05BTUUgUENSRTJfRVJST1JfTk9TVUJTVFJJTkcKKwordHlwZWRlZiBQQ1JFMl9VQ0hBUiBSR1hfQ2hhcmFjdGVyVHlwZTsKK3R5cGVkZWYgUENSRTJfU0laRSBSR1hfT2Zmc2V0VHlwZTsKK3R5cGVkZWYgdWludDMyX3QgUkdYX09wdGlvbnNUeXBlOwordHlwZWRlZiBwY3JlMl9jb2RlIFJHWF9Db2RlVHlwZTsKK3R5cGVkZWYgcGNyZTJfbWF0Y2hfZGF0YSBSR1hfRGF0YVR5cGU7CisKKyNlbHNlIC8qIHJlZ3VsYXIgZXhwcmVzc2lvbiBwYWNrYWdlICovCisjZXJyb3IgcmVndWxhciBleHByZXNzaW9uIHBhY2thZ2Ugbm90IHNlbGVjdGVkCisjZW5kaWYgLyogcmVndWxhciBleHByZXNzaW9uIHBhY2thZ2UgKi8KKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZiAvKiBfX2NwbHVzcGx1cyAqLworCitleHRlcm4gUkdYX0NvZGVUeXBlICpyZ3hDb21waWxlUGF0dGVybiAoCisgIGNvbnN0IFJHWF9DaGFyYWN0ZXJUeXBlICpjaGFyYWN0ZXJzLCBzaXplX3QgbGVuZ3RoLAorICBSR1hfT3B0aW9uc1R5cGUgb3B0aW9ucywgUkdYX09mZnNldFR5cGUgKm9mZnNldCwKKyAgaW50ICplcnJvcgorKTsKKworZXh0ZXJuIHZvaWQgcmd4RGVhbGxvY2F0ZUNvZGUgKFJHWF9Db2RlVHlwZSAqY29kZSk7CitleHRlcm4gUkdYX0RhdGFUeXBlICpyZ3hBbGxvY2F0ZURhdGEgKFJHWF9Db2RlVHlwZSAqY29kZSk7CitleHRlcm4gdm9pZCByZ3hEZWFsbG9jYXRlRGF0YSAoUkdYX0RhdGFUeXBlICpkYXRhKTsKKworZXh0ZXJuIGludCByZ3hNYXRjaFRleHQgKAorICBjb25zdCBSR1hfQ2hhcmFjdGVyVHlwZSAqY2hhcmFjdGVycywgc2l6ZV90IGxlbmd0aCwKKyAgUkdYX0NvZGVUeXBlICpjb2RlLCBSR1hfRGF0YVR5cGUgKmRhdGEsCisgIFJHWF9PcHRpb25zVHlwZSBvcHRpb25zLCBzaXplX3QgKmNvdW50LCBpbnQgKmVycm9yCispOworCitleHRlcm4gaW50IHJneE5hbWVOdW1iZXIgKAorICBSR1hfQ29kZVR5cGUgKmNvZGUsIGNvbnN0IFJHWF9DaGFyYWN0ZXJUeXBlICpuYW1lLAorICBzaXplX3QgKm51bWJlciwgaW50ICplcnJvcgorKTsKKworZXh0ZXJuIGludCByZ3hDYXB0dXJlQm91bmRzICgKKyAgUkdYX0RhdGFUeXBlICpkYXRhLCBzaXplX3QgbnVtYmVyLCBzaXplX3QgKmZyb20sIHNpemVfdCAqdG8KKyk7CisKK2V4dGVybiBTVFJfREVDTEFSRV9GT1JNQVRURVIocmd4Rm9ybWF0RXJyb3JNZXNzYWdlLCBpbnQgZXJyb3IpOworCit0eXBlZGVmIHN0cnVjdCB7CisgIGNvbnN0IFJHWF9PcHRpb25zVHlwZSAqYXJyYXk7CisgIHVpbnQ4X3QgY291bnQ7Cit9IFJHWF9PcHRpb25NYXA7CisKK2V4dGVybiBjb25zdCBSR1hfT3B0aW9uTWFwIHJneENvbXBpbGVPcHRpb25zTWFwOworZXh0ZXJuIGNvbnN0IFJHWF9PcHRpb25NYXAgcmd4TWF0Y2hPcHRpb25zTWFwOworCisjZGVmaW5lIFJHWF9CRUdJTl9PUFRJT05fTUFQKG5hbWUpIHN0YXRpYyBjb25zdCBSR1hfT3B0aW9uc1R5cGUgbmFtZSMjQXJyYXlbXSA9IHsKKyNkZWZpbmUgUkdYX0VORF9PUFRJT05fTUFQKG5hbWUpIH07IFwKKyAgY29uc3QgUkdYX09wdGlvbk1hcCBuYW1lIyNNYXAgPSB7IFwKKyAgLmFycmF5ID0gbmFtZSMjQXJyYXksIFwKKyAgLmNvdW50ID0gQVJSQVlfQ09VTlQobmFtZSMjQXJyYXkpIFwKK307CisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmIC8qIF9fY3BsdXNwbHVzICovCisKKyNlbmRpZiAvKiBCUkxUVFlfSU5DTFVERURfUkdYX0lOVEVSTkFMICovCmRpZmYgLS1naXQgYS9Qcm9ncmFtcy9yZ3hfbGlicGNyZTItMzIuYyBiL1Byb2dyYW1zL3JneF9saWJwY3JlMi0zMi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE3ZjlkODgKLS0tIC9kZXYvbnVsbAorKysgYi9Qcm9ncmFtcy9yZ3hfbGlicGNyZTItMzIuYwpAQCAtMCwwICsxLDEyMyBAQAorLyoKKyAqIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisgKiAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisgKgorICogQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKKyNpbmNsdWRlICJwcm9sb2d1ZS5oIgorCisjaW5jbHVkZSAicmd4LmgiCisjaW5jbHVkZSAicmd4X2ludGVybmFsLmgiCisjaW5jbHVkZSAic3RyZm10LmgiCisKK1JHWF9Db2RlVHlwZSAqCityZ3hDb21waWxlUGF0dGVybiAoCisgIGNvbnN0IFJHWF9DaGFyYWN0ZXJUeXBlICpjaGFyYWN0ZXJzLCBzaXplX3QgbGVuZ3RoLAorICBSR1hfT3B0aW9uc1R5cGUgb3B0aW9ucywgUkdYX09mZnNldFR5cGUgKm9mZnNldCwKKyAgaW50ICplcnJvcgorKSB7CisgIHJldHVybiBwY3JlMl9jb21waWxlKAorICAgIGNoYXJhY3RlcnMsIGxlbmd0aCwgb3B0aW9ucywgZXJyb3IsIG9mZnNldCwgTlVMTAorICApOworfQorCit2b2lkCityZ3hEZWFsbG9jYXRlQ29kZSAoUkdYX0NvZGVUeXBlICpjb2RlKSB7CisgIHBjcmUyX2NvZGVfZnJlZShjb2RlKTsKK30KKworUkdYX0RhdGFUeXBlICoKK3JneEFsbG9jYXRlRGF0YSAoUkdYX0NvZGVUeXBlICpjb2RlKSB7CisgIHJldHVybiBwY3JlMl9tYXRjaF9kYXRhX2NyZWF0ZV9mcm9tX3BhdHRlcm4oY29kZSwgTlVMTCk7Cit9CisKK3ZvaWQKK3JneERlYWxsb2NhdGVEYXRhIChSR1hfRGF0YVR5cGUgKmRhdGEpIHsKKyAgcGNyZTJfbWF0Y2hfZGF0YV9mcmVlKGRhdGEpOworfQorCitpbnQKK3JneE1hdGNoVGV4dCAoCisgIGNvbnN0IFJHWF9DaGFyYWN0ZXJUeXBlICpjaGFyYWN0ZXJzLCBzaXplX3QgbGVuZ3RoLAorICBSR1hfQ29kZVR5cGUgKmNvZGUsIFJHWF9EYXRhVHlwZSAqZGF0YSwKKyAgUkdYX09wdGlvbnNUeXBlIG9wdGlvbnMsIHNpemVfdCAqY291bnQsIGludCAqZXJyb3IKKykgeworICBpbnQgcmVzdWx0ID0gcGNyZTJfbWF0Y2goCisgICAgY29kZSwgY2hhcmFjdGVycywgbGVuZ3RoLCAwLCBvcHRpb25zLCBkYXRhLCBOVUxMCisgICk7CisKKyAgaWYgKHJlc3VsdCA8IDApIHsKKyAgICAqZXJyb3IgPSByZXN1bHQ7CisgICAgcmV0dXJuIDA7CisgIH0KKworICBpZiAoIXJlc3VsdCkgcmVzdWx0ID0gcGNyZTJfZ2V0X292ZWN0b3JfY291bnQoZGF0YSk7CisgICpjb3VudCA9IHJlc3VsdCAtIDE7CisgIHJldHVybiAxOworfQorCitpbnQKK3JneE5hbWVOdW1iZXIgKAorICBSR1hfQ29kZVR5cGUgKmNvZGUsIGNvbnN0IFJHWF9DaGFyYWN0ZXJUeXBlICpuYW1lLAorICBzaXplX3QgKm51bWJlciwgaW50ICplcnJvcgorKSB7CisgIGludCByZXN1bHQgPSBwY3JlMl9zdWJzdHJpbmdfbnVtYmVyX2Zyb21fbmFtZShjb2RlLCBuYW1lKTsKKworICBpZiAocmVzdWx0ID4gMCkgeworICAgICpudW1iZXIgPSByZXN1bHQ7CisgICAgcmV0dXJuIDE7CisgIH0gZWxzZSB7CisgICAgKmVycm9yID0gcmVzdWx0OworICAgIHJldHVybiAwOworICB9Cit9CisKK2ludAorcmd4Q2FwdHVyZUJvdW5kcyAoCisgIFJHWF9EYXRhVHlwZSAqZGF0YSwgc2l6ZV90IG51bWJlciwgc2l6ZV90ICpmcm9tLCBzaXplX3QgKnRvCispIHsKKyAgY29uc3QgUkdYX09mZnNldFR5cGUgKm9mZnNldHMgPSBwY3JlMl9nZXRfb3ZlY3Rvcl9wb2ludGVyKGRhdGEpOworICBvZmZzZXRzICs9IG51bWJlciAqIDI7CisKKyAgaWYgKG9mZnNldHNbMF0gPT0gUENSRTJfVU5TRVQpIHJldHVybiAwOworICBpZiAob2Zmc2V0c1sxXSA9PSBQQ1JFMl9VTlNFVCkgcmV0dXJuIDA7CisKKyAgKmZyb20gPSBvZmZzZXRzWzBdOworICAqdG8gPSBvZmZzZXRzWzFdOworICByZXR1cm4gMTsKK30KKworU1RSX0JFR0lOX0ZPUk1BVFRFUihyZ3hGb3JtYXRFcnJvck1lc3NhZ2UsIGludCBlcnJvcikKKyAgc2l6ZV90IHNpemUgPSBTVFJfTEVGVDsKKyAgUkdYX0NoYXJhY3RlclR5cGUgbWVzc2FnZVtzaXplXTsKKyAgaW50IGxlbmd0aCA9IHBjcmUyX2dldF9lcnJvcl9tZXNzYWdlKGVycm9yLCBtZXNzYWdlLCBzaXplKTsKKworICBpZiAobGVuZ3RoID4gMCkgeworICAgIGZvciAodW5zaWduZWQgaW50IGluZGV4PTA7IGluZGV4PGxlbmd0aDsgaW5kZXgrPTEpIHsKKyAgICAgIFNUUl9QUklOVEYoIiUiUFJJd2MsIG1lc3NhZ2VbaW5kZXhdKTsKKyAgICB9CisgIH0KK1NUUl9FTkRfRk9STUFUVEVSCisKK1JHWF9CRUdJTl9PUFRJT05fTUFQKHJneENvbXBpbGVPcHRpb25zKQorICBbUkdYX0NPTVBJTEVfQU5DSE9SX1NUQVJUXSA9IFBDUkUyX0FOQ0hPUkVELAorCisgIFtSR1hfQ09NUElMRV9JR05PUkVfQ0FTRV0gPSBQQ1JFMl9DQVNFTEVTUywKKyAgW1JHWF9DT01QSUxFX1VOSUNPREVfUFJPUEVSVElFU10gPSBQQ1JFMl9VQ1AsCitSR1hfRU5EX09QVElPTl9NQVAocmd4Q29tcGlsZU9wdGlvbnMpCisKK1JHWF9CRUdJTl9PUFRJT05fTUFQKHJneE1hdGNoT3B0aW9ucykKKyAgW1JHWF9NQVRDSF9BTkNIT1JfU1RBUlRdID0gUENSRTJfQU5DSE9SRUQsCitSR1hfRU5EX09QVElPTl9NQVAocmd4TWF0Y2hPcHRpb25zKQpkaWZmIC0tZ2l0IGEvUHJvZ3JhbXMvcmd4X2xpYnBjcmUzMi5jIGIvUHJvZ3JhbXMvcmd4X2xpYnBjcmUzMi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ0ODNmMWYKLS0tIC9kZXYvbnVsbAorKysgYi9Qcm9ncmFtcy9yZ3hfbGlicGNyZTMyLmMKQEAgLTAsMCArMSwyMTggQEAKKy8qCisgKiBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorICogICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorICoKKyAqIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorICoKKyAqIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyAqLworCisjaW5jbHVkZSAicHJvbG9ndWUuaCIKKworI2luY2x1ZGUgPHN0cmluZy5oPgorCisjaW5jbHVkZSAibG9nLmgiCisjaW5jbHVkZSAicmd4LmgiCisjaW5jbHVkZSAicmd4X2ludGVybmFsLmgiCisjaW5jbHVkZSAic3RyZm10LmgiCisKK3N0YXRpYyBpbnQgc2F2ZWRFcnJvckNvZGUgPSAwOworc3RhdGljIGNvbnN0IGNoYXIgKnNhdmVkRXJyb3JNZXNzYWdlID0gTlVMTDsKKworc3RhdGljIHZvaWQKK3NhdmVFcnJvck1lc3NhZ2UgKGludCBlcnJvciwgY29uc3QgY2hhciAqbWVzc2FnZSkgeworICBpZiAobWVzc2FnZSAmJiAqbWVzc2FnZSkgeworICAgIHNhdmVkRXJyb3JDb2RlID0gZXJyb3I7CisgICAgc2F2ZWRFcnJvck1lc3NhZ2UgPSBtZXNzYWdlOworICB9Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICoKK2dldEVycm9yTWVzc2FnZSAoaW50IGVycm9yKSB7CisgIGlmIChlcnJvciA9PSBzYXZlZEVycm9yQ29kZSkgcmV0dXJuIHNhdmVkRXJyb3JNZXNzYWdlOworICByZXR1cm4gTlVMTDsKK30KKworUkdYX0NvZGVUeXBlICoKK3JneENvbXBpbGVQYXR0ZXJuICgKKyAgY29uc3QgUkdYX0NoYXJhY3RlclR5cGUgKmNoYXJhY3RlcnMsIHNpemVfdCBsZW5ndGgsCisgIFJHWF9PcHRpb25zVHlwZSBvcHRpb25zLCBSR1hfT2Zmc2V0VHlwZSAqb2Zmc2V0LAorICBpbnQgKmVycm9yCispIHsKKyAgY29uc3QgY2hhciAqbWVzc2FnZTsKKworICBSR1hfQ29kZVR5cGUgKmNvZGUgPSBwY3JlMzJfY29tcGlsZTIoCisgICAgY2hhcmFjdGVycywgb3B0aW9ucywgZXJyb3IsICZtZXNzYWdlLCBvZmZzZXQsIE5VTEwKKyAgKTsKKworICBpZiAoIWNvZGUpIHNhdmVFcnJvck1lc3NhZ2UoKmVycm9yLCBtZXNzYWdlKTsKKyAgcmV0dXJuIGNvZGU7Cit9CisKK3ZvaWQKK3JneERlYWxsb2NhdGVDb2RlIChSR1hfQ29kZVR5cGUgKmNvZGUpIHsKKyAgcGNyZTMyX2ZyZWUoY29kZSk7Cit9CisKK1JHWF9EYXRhVHlwZSAqCityZ3hBbGxvY2F0ZURhdGEgKFJHWF9Db2RlVHlwZSAqY29kZSkgeworICBSR1hfRGF0YVR5cGUgKmRhdGE7CisgIHNpemVfdCBzaXplID0gc2l6ZW9mKCpkYXRhKTsKKworICBzaXplX3QgbWF0Y2hlcyA9IDEwOworICBzaXplX3QgY291bnQgPSBtYXRjaGVzICogMzsKKyAgc2l6ZSArPSBjb3VudCAqIHNpemVvZihkYXRhLT5vZmZzZXRzWzBdKTsKKworICBpZiAoIShkYXRhID0gbWFsbG9jKHNpemUpKSkgcmV0dXJuIE5VTEw7CisgIG1lbXNldChkYXRhLCAwLCBzaXplKTsKKworICBkYXRhLT5tYXRjaGVzID0gbWF0Y2hlczsKKyAgZGF0YS0+Y291bnQgPSBjb3VudDsKKworICB7CisgICAgY29uc3QgY2hhciAqbWVzc2FnZSA9IE5VTEw7CisgICAgZGF0YS0+c3R1ZHkgPSBwY3JlMzJfc3R1ZHkoY29kZSwgMCwgJm1lc3NhZ2UpOworCisgICAgaWYgKG1lc3NhZ2UpIHsKKyAgICAgIGxvZ01lc3NhZ2UoTE9HX1dBUk5JTkcsICJwY3JlIHN0dWR5IGVycm9yOiAlcyIsIG1lc3NhZ2UpOworCisgICAgICBpZiAoZGF0YS0+c3R1ZHkpIHsKKyAgICAgICAgcGNyZTMyX2ZyZWVfc3R1ZHkoZGF0YS0+c3R1ZHkpOworICAgICAgICBkYXRhLT5zdHVkeSA9IE5VTEw7CisgICAgICB9CisgICAgfQorICB9CisKKyAgcmV0dXJuIGRhdGE7Cit9CisKK3ZvaWQKK3JneERlYWxsb2NhdGVEYXRhIChSR1hfRGF0YVR5cGUgKmRhdGEpIHsKKyAgaWYgKGRhdGEtPnN0dWR5KSBwY3JlMzJfZnJlZV9zdHVkeShkYXRhLT5zdHVkeSk7CisgIGZyZWUoZGF0YSk7Cit9CisKK2ludAorcmd4TWF0Y2hUZXh0ICgKKyAgY29uc3QgUkdYX0NoYXJhY3RlclR5cGUgKmNoYXJhY3RlcnMsIHNpemVfdCBsZW5ndGgsCisgIFJHWF9Db2RlVHlwZSAqY29kZSwgUkdYX0RhdGFUeXBlICpkYXRhLAorICBSR1hfT3B0aW9uc1R5cGUgb3B0aW9ucywgc2l6ZV90ICpjb3VudCwgaW50ICplcnJvcgorKSB7CisgIGludCByZXN1bHQgPSBwY3JlMzJfZXhlYygKKyAgICBjb2RlLCBkYXRhLT5zdHVkeSwKKyAgICBjaGFyYWN0ZXJzLCBsZW5ndGgsCisgICAgMCwgb3B0aW9ucywKKyAgICBkYXRhLT5vZmZzZXRzLCBkYXRhLT5jb3VudAorICApOworCisgIGlmIChyZXN1bHQgPCAwKSB7CisgICAgKmVycm9yID0gcmVzdWx0OworICAgIHJldHVybiAwOworICB9CisKKyAgaWYgKCFyZXN1bHQpIHJlc3VsdCA9IGRhdGEtPm1hdGNoZXM7CisgICpjb3VudCA9IHJlc3VsdCAtIDE7CisgIHJldHVybiAxOworfQorCitpbnQKK3JneE5hbWVOdW1iZXIgKAorICBSR1hfQ29kZVR5cGUgKmNvZGUsIGNvbnN0IFJHWF9DaGFyYWN0ZXJUeXBlICpuYW1lLAorICBzaXplX3QgKm51bWJlciwgaW50ICplcnJvcgorKSB7CisgIGludCByZXN1bHQgPSBwY3JlMzJfZ2V0X3N0cmluZ251bWJlcihjb2RlLCBuYW1lKTsKKworICBpZiAocmVzdWx0ID4gMCkgeworICAgICpudW1iZXIgPSByZXN1bHQ7CisgICAgcmV0dXJuIDE7CisgIH0gZWxzZSB7CisgICAgKmVycm9yID0gcmVzdWx0OworICAgIHJldHVybiAwOworICB9Cit9CisKK2ludAorcmd4Q2FwdHVyZUJvdW5kcyAoCisgIFJHWF9EYXRhVHlwZSAqZGF0YSwgc2l6ZV90IG51bWJlciwgc2l6ZV90ICpmcm9tLCBzaXplX3QgKnRvCispIHsKKyAgY29uc3QgUkdYX09mZnNldFR5cGUgKm9mZnNldHMgPSBkYXRhLT5vZmZzZXRzOworICBvZmZzZXRzICs9IG51bWJlciAqIDI7CisKKyAgaWYgKG9mZnNldHNbMF0gPT0gLTEpIHJldHVybiAwOworICBpZiAob2Zmc2V0c1sxXSA9PSAtMSkgcmV0dXJuIDA7CisKKyAgKmZyb20gPSBvZmZzZXRzWzBdOworICAqdG8gPSBvZmZzZXRzWzFdOworICByZXR1cm4gMTsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IHJneE5lZ2F0aXZlRXJyb3JzW10gPSB7CisgIFswXSA9ICJubyBlcnJvciIsCisgICBbLVBDUkVfRVJST1JfTk9NQVRDSF0gPSAibm8gbWF0Y2giLAorICAgWy1QQ1JFX0VSUk9SX05VTExdID0gInJlcXVpcmVkIHBvaW50ZXIgYXJndW1lbnQgaXMgbnVsbCIsCisgICBbLVBDUkVfRVJST1JfQkFET1BUSU9OXSA9ICJ1bnJlY29nbml6ZWQgb3B0aW9uIiwKKyAgIFstUENSRV9FUlJPUl9CQURNQUdJQ10gPSAibWFnaWMgbnVtYmVyIG5vdCBmb3VuZCIsCisgICBbLVBDUkVfRVJST1JfVU5LTk9XTl9PUENPREVdID0gImludmFsaWQgaXRlbSBpbiBjb21waWxlZCBwYXR0ZXJuIiwKKyAgIFstUENSRV9FUlJPUl9OT01FTU9SWV0gPSAiaW5zdWZmaWNpZW50IG1lbW9yeSIsCisgICBbLVBDUkVfRVJST1JfTk9TVUJTVFJJTkddID0gIm5vIGNhcHR1cmUgd2l0aCBzcGVjaWZpZWQgbnVtYmVyIG9yIG5hbWUiLAorICAgWy1QQ1JFX0VSUk9SX01BVENITElNSVRdID0gIm1hdGNoIGxpbWl0IGV4Y2VlZGVkIiwKKyAgIFstUENSRV9FUlJPUl9DQUxMT1VUXSA9ICJlcnJvciBpbiBjYWxsb3V0IiwKKyAgIFstUENSRV9FUlJPUl9CQURVVEYzMl0gPSAiaW52YWxpZCBVVEYtMzIgY2hhcmFjdGVyIiwKKyAgIFstUENSRV9FUlJPUl9CQURVVEYxNl9PRkZTRVRdID0gInN0YXJ0IG9mZnNldCBpcyB3aXRoaW4gYSBtdWx0aWJ5dGUgY2hhcmFjdGVyIiwKKyAgIFstUENSRV9FUlJPUl9QQVJUSUFMXSA9ICJwYXJ0aWFsIG1hdGNoIiwKKyAgIFstUENSRV9FUlJPUl9CQURQQVJUSUFMXSA9ICJwYXR0ZXJuIGNvbnRhaW5zIGl0ZW0gbm90IHN1cHBvcnRlZCBmb3IgcGFydGlhbCBtYXRjaCIsCisgICBbLVBDUkVfRVJST1JfSU5URVJOQUxdID0gImludGVybmFsIGVycm9yIiwKKyAgIFstUENSRV9FUlJPUl9CQURDT1VOVF0gPSAic2l6ZSBvZiBvZmZzZXRzIHZlY3RvciBpcyBuZWdhdGl2ZSIsCisgICBbLVBDUkVfRVJST1JfREZBX1VJVEVNXSA9ICJwYXR0ZXJuIGNvbnRhaW5zIGl0ZW0gbm90IHN1cHBvcnRlZCBmb3IgREZBIG1hdGNoIiwKKyAgIFstUENSRV9FUlJPUl9ERkFfVUNPTkRdID0gIkRGQSBtYXRjaCB1c2VzIGJhY2sgcmVmZXJlbmNlIGZvciBjb25kaXRpb24gb3IgdGVzdCBmb3IgcmVjdXJzaW9uIGluIHNwZWNpZmljIGdyb3VwIiwKKyAgIFstUENSRV9FUlJPUl9ERkFfVU1MSU1JVF0gPSAibWF0Y2ggb3IgcmVjdXJzaW9uIGxpbWl0IHNwZWNpZmllZCBmb3IgREZBIG1hdGNoIiwKKyAgIFstUENSRV9FUlJPUl9ERkFfV1NTSVpFXSA9ICJERkEgd29ya3NwYWNlIG92ZXJmbG93IiwKKyAgIFstUENSRV9FUlJPUl9ERkFfUkVDVVJTRV0gPSAiREZBIHJlY3Vyc2lvbiBvZmZzZXRzIHZlY3RvciB0b28gc21hbGwiLAorICAgWy1QQ1JFX0VSUk9SX1JFQ1VSU0lPTkxJTUlUXSA9ICJyZWN1cnNpb24gbGltaXQgZXhjZWVkZWQiLAorICAgWy1QQ1JFX0VSUk9SX05VTExXU0xJTUlUXSA9ICIiLAorICAgWy1QQ1JFX0VSUk9SX0JBRE5FV0xJTkVdID0gImludmFsaWQgbmV3bGluZSBvcHRpb24gY29tYmluYXRpb24iLAorICAgWy1QQ1JFX0VSUk9SX0JBRE9GRlNFVF0gPSAic3RhcnQgb2Zmc2V0IG91dCBvZiBib3VuZHMiLAorICAgWy1QQ1JFX0VSUk9SX1NIT1JUVVRGMTZdID0gInRydW5jYXRlZCBtdWx0aWJ5dGUgY2hhcmFjdGVyIiwKKyAgIFstUENSRV9FUlJPUl9SRUNVUlNFTE9PUF0gPSAicmVjdXJzaW9uIGxvb3AgZGV0ZWN0ZWQiLAorICAgWy1QQ1JFX0VSUk9SX0pJVF9TVEFDS0xJTUlUXSA9ICJKSVQgc3RhY2sgdG9vIHNtYWxsIiwKKyAgIFstUENSRV9FUlJPUl9CQURNT0RFXSA9ICJwYXR0ZXJuIGNvbXBpbGVkIGZvciBkaWZmZXJlbnQgY2hhcmFjdGVyIHNpemUiLAorICAgWy1QQ1JFX0VSUk9SX0JBREVORElBTk5FU1NdID0gInBhdHRlcm4gY29tcGlsZWQgZm9yIGRpZmZlcmVudCBob3N0IGVuZGlhbm5lc3MiLAorICAgWy1QQ1JFX0VSUk9SX0RGQV9CQURSRVNUQVJUXSA9ICJ1bmFibGUgdG8gcmVzdW1lIHBhcnRpYWwgREZBIG1hdGNoIiwKKyAgIFstUENSRV9FUlJPUl9KSVRfQkFET1BUSU9OXSA9ICJpbnZhbGlkIEpJVCBvcHRpb24iLAorICAgWy1QQ1JFX0VSUk9SX0JBRExFTkdUSF0gPSAidGV4dCBsZW5ndGggaXMgbmVnYXRpdmUiLAorICAgWy1QQ1JFX0VSUk9SX1VOU0VUXSA9ICJyZXF1aXJlZCB2YWx1ZSBub3Qgc2V0IiwKK307CisKK1NUUl9CRUdJTl9GT1JNQVRURVIocmd4Rm9ybWF0RXJyb3JNZXNzYWdlLCBpbnQgZXJyb3IpCisgIGNvbnN0IGNoYXIgKm1lc3NhZ2UgPSBnZXRFcnJvck1lc3NhZ2UoZXJyb3IpOworCisgIGlmICghbWVzc2FnZSkgeworICAgIGlmIChlcnJvciA8PSAwKSB7CisgICAgICBpZiAoKGVycm9yID0gLWVycm9yKSA8IEFSUkFZX0NPVU5UKHJneE5lZ2F0aXZlRXJyb3JzKSkgeworICAgICAgICBtZXNzYWdlID0gcmd4TmVnYXRpdmVFcnJvcnNbZXJyb3JdOworICAgICAgfQorICAgIH0KKyAgfQorCisgIGlmIChtZXNzYWdlICYmICptZXNzYWdlKSBTVFJfUFJJTlRGKCIlcyIsIG1lc3NhZ2UpOworU1RSX0VORF9GT1JNQVRURVIKKworUkdYX0JFR0lOX09QVElPTl9NQVAocmd4Q29tcGlsZU9wdGlvbnMpCisgIFtSR1hfQ09NUElMRV9BTkNIT1JfU1RBUlRdID0gUENSRV9BTkNIT1JFRCwKKworICBbUkdYX0NPTVBJTEVfSUdOT1JFX0NBU0VdID0gUENSRV9DQVNFTEVTUywKKyAgW1JHWF9DT01QSUxFX1VOSUNPREVfUFJPUEVSVElFU10gPSBQQ1JFX1VDUCwKK1JHWF9FTkRfT1BUSU9OX01BUChyZ3hDb21waWxlT3B0aW9ucykKKworUkdYX0JFR0lOX09QVElPTl9NQVAocmd4TWF0Y2hPcHRpb25zKQorICBbUkdYX01BVENIX0FOQ0hPUl9TVEFSVF0gPSBQQ1JFX0FOQ0hPUkVELAorUkdYX0VORF9PUFRJT05fTUFQKHJneE1hdGNoT3B0aW9ucykKZGlmZiAtLWdpdCBhL1Byb2dyYW1zL3JneF9ub25lLmMgYi9Qcm9ncmFtcy9yZ3hfbm9uZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFjMGY1ZWUKLS0tIC9kZXYvbnVsbAorKysgYi9Qcm9ncmFtcy9yZ3hfbm9uZS5jCkBAIC0wLDAgKzEsODUgQEAKKy8qCisgKiBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorICogICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorICoKKyAqIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorICoKKyAqIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyAqLworCisjaW5jbHVkZSAicHJvbG9ndWUuaCIKKworI2luY2x1ZGUgInJneC5oIgorI2luY2x1ZGUgInJneF9pbnRlcm5hbC5oIgorI2luY2x1ZGUgInN0cmZtdC5oIgorCitSR1hfQ29kZVR5cGUgKgorcmd4Q29tcGlsZVBhdHRlcm4gKAorICBjb25zdCBSR1hfQ2hhcmFjdGVyVHlwZSAqY2hhcmFjdGVycywgc2l6ZV90IGxlbmd0aCwKKyAgUkdYX09wdGlvbnNUeXBlIG9wdGlvbnMsIFJHWF9PZmZzZXRUeXBlICpvZmZzZXQsCisgIGludCAqZXJyb3IKKykgeworICByZXR1cm4gTlVMTDsKK30KKwordm9pZAorcmd4RGVhbGxvY2F0ZUNvZGUgKFJHWF9Db2RlVHlwZSAqY29kZSkgeworfQorCitSR1hfRGF0YVR5cGUgKgorcmd4QWxsb2NhdGVEYXRhIChSR1hfQ29kZVR5cGUgKmNvZGUpIHsKKyAgcmV0dXJuIE5VTEw7Cit9CisKK3ZvaWQKK3JneERlYWxsb2NhdGVEYXRhIChSR1hfRGF0YVR5cGUgKmRhdGEpIHsKK30KKworaW50CityZ3hNYXRjaFRleHQgKAorICBjb25zdCBSR1hfQ2hhcmFjdGVyVHlwZSAqY2hhcmFjdGVycywgc2l6ZV90IGxlbmd0aCwKKyAgUkdYX0NvZGVUeXBlICpjb2RlLCBSR1hfRGF0YVR5cGUgKmRhdGEsCisgIFJHWF9PcHRpb25zVHlwZSBvcHRpb25zLCBzaXplX3QgKmNvdW50LCBpbnQgKmVycm9yCispIHsKKyAgKmVycm9yID0gUkdYX05PX01BVENIOworICByZXR1cm4gMDsKK30KKworaW50CityZ3hOYW1lTnVtYmVyICgKKyAgUkdYX0NvZGVUeXBlICpjb2RlLCBjb25zdCBSR1hfQ2hhcmFjdGVyVHlwZSAqbmFtZSwKKyAgc2l6ZV90ICpudW1iZXIsIGludCAqZXJyb3IKKykgeworICAqZXJyb3IgPSBSR1hfTk9fTkFNRTsKKyAgcmV0dXJuIDA7Cit9CisKK2ludAorcmd4Q2FwdHVyZUJvdW5kcyAoCisgIFJHWF9EYXRhVHlwZSAqZGF0YSwgc2l6ZV90IG51bWJlciwgc2l6ZV90ICpmcm9tLCBzaXplX3QgKnRvCispIHsKKyAgcmV0dXJuIDA7Cit9CisKK1NUUl9CRUdJTl9GT1JNQVRURVIocmd4Rm9ybWF0RXJyb3JNZXNzYWdlLCBpbnQgZXJyb3IpCisgIHN3aXRjaCAoZXJyb3IpIHsKKyAgICBjYXNlIFJHWF9OT19NQVRDSDoKKyAgICAgIFNUUl9QUklOVEYoIm5vIG1hdGNoIik7CisgICAgICBicmVhazsKKyAgfQorU1RSX0VORF9GT1JNQVRURVIKKworUkdYX0JFR0lOX09QVElPTl9NQVAocmd4Q29tcGlsZU9wdGlvbnMpCitSR1hfRU5EX09QVElPTl9NQVAocmd4Q29tcGlsZU9wdGlvbnMpCisKK1JHWF9CRUdJTl9PUFRJT05fTUFQKHJneE1hdGNoT3B0aW9ucykKK1JHWF9FTkRfT1BUSU9OX01BUChyZ3hNYXRjaE9wdGlvbnMpCmRpZmYgLS1naXQgYS9Qcm9ncmFtcy9yb3V0aW5nLmMgYi9Qcm9ncmFtcy9yb3V0aW5nLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjk4MjRmMgotLS0gL2Rldi9udWxsCisrKyBiL1Byb2dyYW1zL3JvdXRpbmcuYwpAQCAtMCwwICsxLDU3MyBAQAorLyoKKyAqIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisgKiAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisgKgorICogQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKKyNpbmNsdWRlICJwcm9sb2d1ZS5oIgorCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRhcmcuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorCisjaWZkZWYgSEFWRV9TSUdOQUxfSAorI2luY2x1ZGUgPHNpZ25hbC5oPgorI2VuZGlmIC8qIEhBVkVfU0lHTkFMX0ggKi8KKworI2lmZGVmIFNJR1VTUjEKKyNpbmNsdWRlIDxzeXMvd2FpdC5oPgorI2VuZGlmIC8qIFNJR1VTUjEgKi8KKworI2luY2x1ZGUgInBhcmFtZXRlcnMuaCIKKyNpbmNsdWRlICJsb2cuaCIKKyNpbmNsdWRlICJwcm9ncmFtLmgiCisjaW5jbHVkZSAidGhyZWFkLmgiCisjaW5jbHVkZSAiYXN5bmNfd2FpdC5oIgorI2luY2x1ZGUgInRpbWluZy5oIgorI2luY2x1ZGUgInNjci5oIgorI2luY2x1ZGUgInJvdXRpbmcuaCIKKwordHlwZWRlZiBlbnVtIHsKKyAgQ1JSX0RPTkUsCisgIENSUl9ORUFSLAorICBDUlJfRkFJTAorfSBSb3V0aW5nUmVzdWx0OworCit0eXBlZGVmIHN0cnVjdCB7CisjaWZkZWYgU0lHVVNSMQorICBzdHJ1Y3QgeworICAgIHNpZ3NldF90IG1hc2s7CisgIH0gc2lnbmFsOworI2VuZGlmIC8qIFNJR1VTUjEgKi8KKworICBzdHJ1Y3QgeworICAgIGludCBudW1iZXI7CisgICAgaW50IHdpZHRoOworICAgIGludCBoZWlnaHQ7CisgIH0gc2NyZWVuOworCisgIHN0cnVjdCB7CisgICAgaW50IHNjcm9sbDsKKyAgICBpbnQgcm93OworICAgIFNjcmVlbkNoYXJhY3RlciAqYnVmZmVyOworICB9IHZlcnRpY2FsOworCisgIHN0cnVjdCB7CisgICAgaW50IGNvbHVtbjsKKyAgICBpbnQgcm93OworICB9IGN1cnJlbnQ7CisKKyAgc3RydWN0IHsKKyAgICBpbnQgY29sdW1uOworICAgIGludCByb3c7CisgIH0gcHJldmlvdXM7CisKKyAgc3RydWN0IHsKKyAgICBsb25nIHN1bTsKKyAgICBpbnQgY291bnQ7CisgIH0gdGltZTsKK30gQ3Vyc29yUm91dGluZ0RhdGE7CisKK3R5cGVkZWYgZW51bSB7CisgIENVUlNPUl9ESVJfTEVGVCwKKyAgQ1VSU09SX0RJUl9SSUdIVCwKKyAgQ1VSU09SX0RJUl9VUCwKKyAgQ1VSU09SX0RJUl9ET1dOCit9IEN1cnNvckRpcmVjdGlvbjsKKwordHlwZWRlZiBzdHJ1Y3QgeworICBjb25zdCBjaGFyICpuYW1lOworICBTY3JlZW5LZXkga2V5OworfSBDdXJzb3JEaXJlY3Rpb25FbnRyeTsKKworc3RhdGljIGNvbnN0IEN1cnNvckRpcmVjdGlvbkVudHJ5IGN1cnNvckRpcmVjdGlvblRhYmxlW10gPSB7CisgIFtDVVJTT1JfRElSX0xFRlRdICA9IHsubmFtZT0ibGVmdCIgLCAua2V5PVNDUl9LRVlfQ1VSU09SX0xFRlQgfSwKKyAgW0NVUlNPUl9ESVJfUklHSFRdID0gey5uYW1lPSJyaWdodCIsIC5rZXk9U0NSX0tFWV9DVVJTT1JfUklHSFR9LAorICBbQ1VSU09SX0RJUl9VUF0gICAgPSB7Lm5hbWU9InVwIiAgICwgLmtleT1TQ1JfS0VZX0NVUlNPUl9VUCAgIH0sCisgIFtDVVJTT1JfRElSX0RPV05dICA9IHsubmFtZT0iZG93biIgLCAua2V5PVNDUl9LRVlfQ1VSU09SX0RPV04gfQorfTsKKwordHlwZWRlZiBlbnVtIHsKKyAgQ1VSU09SX0FYSVNfSE9SSVpPTlRBTCwKKyAgQ1VSU09SX0FYSVNfVkVSVElDQUwKK30gQ3Vyc29yQXhpczsKKwordHlwZWRlZiBzdHJ1Y3QgeworICBjb25zdCBDdXJzb3JEaXJlY3Rpb25FbnRyeSAqZm9yd2FyZDsKKyAgY29uc3QgQ3Vyc29yRGlyZWN0aW9uRW50cnkgKmJhY2t3YXJkOworfSBDdXJzb3JBeGlzRW50cnk7CisKK3N0YXRpYyBjb25zdCBDdXJzb3JBeGlzRW50cnkgY3Vyc29yQXhpc1RhYmxlW10gPSB7CisgIFtDVVJTT1JfQVhJU19IT1JJWk9OVEFMXSA9IHsKKyAgICAuZm9yd2FyZCAgPSAmY3Vyc29yRGlyZWN0aW9uVGFibGVbQ1VSU09SX0RJUl9SSUdIVF0sCisgICAgLmJhY2t3YXJkID0gJmN1cnNvckRpcmVjdGlvblRhYmxlW0NVUlNPUl9ESVJfTEVGVF0KKyAgfQorICAsCisgIFtDVVJTT1JfQVhJU19WRVJUSUNBTF0gPSB7CisgICAgLmZvcndhcmQgID0gJmN1cnNvckRpcmVjdGlvblRhYmxlW0NVUlNPUl9ESVJfRE9XTl0sCisgICAgLmJhY2t3YXJkID0gJmN1cnNvckRpcmVjdGlvblRhYmxlW0NVUlNPUl9ESVJfVVBdCisgIH0KK307CisKKyNkZWZpbmUgbG9nUm91dGluZyguLi4pIGxvZ01lc3NhZ2UoTE9HX0NBVEVHT1JZKENVUlNPUl9ST1VUSU5HKSwgX19WQV9BUkdTX18pCisKK3N0YXRpYyBpbnQKK3JlYWRSb3cgKEN1cnNvclJvdXRpbmdEYXRhICpjcmQsIFNjcmVlbkNoYXJhY3RlciAqYnVmZmVyLCBpbnQgcm93KSB7CisgIGlmICghYnVmZmVyKSBidWZmZXIgPSBjcmQtPnZlcnRpY2FsLmJ1ZmZlcjsKKyAgaWYgKHJlYWRTY3JlZW5Sb3cocm93LCBjcmQtPnNjcmVlbi53aWR0aCwgYnVmZmVyKSkgcmV0dXJuIDE7CisgIGxvZ1JvdXRpbmcoInJlYWQgZmFpbGVkOiByb3c9JWQiLCByb3cpOworICByZXR1cm4gMDsKK30KKworc3RhdGljIGludAorZ2V0Q3VycmVudFBvc2l0aW9uIChDdXJzb3JSb3V0aW5nRGF0YSAqY3JkKSB7CisgIFNjcmVlbkRlc2NyaXB0aW9uIGRlc2NyaXB0aW9uOworICBkZXNjcmliZVNjcmVlbigmZGVzY3JpcHRpb24pOworCisgIGlmIChkZXNjcmlwdGlvbi5udW1iZXIgIT0gY3JkLT5zY3JlZW4ubnVtYmVyKSB7CisgICAgbG9nUm91dGluZygic2NyZWVuIGNoYW5nZWQ6ICVkIC0+ICVkIiwgY3JkLT5zY3JlZW4ubnVtYmVyLCBkZXNjcmlwdGlvbi5udW1iZXIpOworICAgIGNyZC0+c2NyZWVuLm51bWJlciA9IGRlc2NyaXB0aW9uLm51bWJlcjsKKyAgICByZXR1cm4gMDsKKyAgfQorCisgIGlmICghY3JkLT52ZXJ0aWNhbC5idWZmZXIpIHsKKyAgICBjcmQtPnNjcmVlbi53aWR0aCA9IGRlc2NyaXB0aW9uLmNvbHM7CisgICAgY3JkLT5zY3JlZW4uaGVpZ2h0ID0gZGVzY3JpcHRpb24ucm93czsKKyAgICBjcmQtPnZlcnRpY2FsLnNjcm9sbCA9IDA7CisKKyAgICBpZiAoIShjcmQtPnZlcnRpY2FsLmJ1ZmZlciA9IG1hbGxvYyhBUlJBWV9TSVpFKGNyZC0+dmVydGljYWwuYnVmZmVyLCBjcmQtPnNjcmVlbi53aWR0aCkpKSkgeworICAgICAgbG9nTWFsbG9jRXJyb3IoKTsKKyAgICAgIGdvdG8gZXJyb3I7CisgICAgfQorCisgICAgbG9nUm91dGluZygic2NyZWVuOiBudW09JWQgY29scz0lZCByb3dzPSVkIiwKKyAgICAgICAgICAgICAgIGNyZC0+c2NyZWVuLm51bWJlciwKKyAgICAgICAgICAgICAgIGNyZC0+c2NyZWVuLndpZHRoLCBjcmQtPnNjcmVlbi5oZWlnaHQpOworICB9IGVsc2UgaWYgKChjcmQtPnNjcmVlbi53aWR0aCAhPSBkZXNjcmlwdGlvbi5jb2xzKSB8fAorICAgICAgICAgICAgIChjcmQtPnNjcmVlbi5oZWlnaHQgIT0gZGVzY3JpcHRpb24ucm93cykpIHsKKyAgICBsb2dSb3V0aW5nKCJzaXplIGNoYW5nZWQ6ICVkeCVkIC0+ICVkeCVkIiwKKyAgICAgICAgICAgICAgIGNyZC0+c2NyZWVuLndpZHRoLCBjcmQtPnNjcmVlbi5oZWlnaHQsCisgICAgICAgICAgICAgICBkZXNjcmlwdGlvbi5jb2xzLCBkZXNjcmlwdGlvbi5yb3dzKTsKKyAgICBnb3RvIGVycm9yOworICB9CisKKyAgY3JkLT5jdXJyZW50LnJvdyA9IGRlc2NyaXB0aW9uLnBvc3kgKyBjcmQtPnZlcnRpY2FsLnNjcm9sbDsKKyAgY3JkLT5jdXJyZW50LmNvbHVtbiA9IGRlc2NyaXB0aW9uLnBvc3g7CisgIHJldHVybiAxOworCitlcnJvcjoKKyAgY3JkLT5zY3JlZW4ubnVtYmVyID0gLTE7CisgIHJldHVybiAwOworfQorCitzdGF0aWMgdm9pZAoraGFuZGxlVmVydGljYWxTY3JvbGxpbmcgKEN1cnNvclJvdXRpbmdEYXRhICpjcmQsIGludCBkaXJlY3Rpb24pIHsKKyAgaW50IGZpcnN0Um93ID0gY3JkLT52ZXJ0aWNhbC5yb3c7CisgIGludCBjdXJyZW50Um93ID0gZmlyc3RSb3c7CisKKyAgaW50IGJlc3RSb3cgPSBmaXJzdFJvdzsKKyAgaW50IGJlc3RMZW5ndGggPSAwOworCisgIGRvIHsKKyAgICBTY3JlZW5DaGFyYWN0ZXIgYnVmZmVyW2NyZC0+c2NyZWVuLndpZHRoXTsKKyAgICBpZiAoIXJlYWRSb3coY3JkLCBidWZmZXIsIGN1cnJlbnRSb3cpKSBicmVhazsKKworICAgIGludCBsZW5ndGg7CisgICAgeworICAgICAgaW50IGJlZm9yZSA9IGNyZC0+Y3VycmVudC5jb2x1bW47CisgICAgICBpbnQgYWZ0ZXIgPSBiZWZvcmU7CisKKyAgICAgIHdoaWxlIChidWZmZXJbYmVmb3JlXS50ZXh0ID09IGNyZC0+dmVydGljYWwuYnVmZmVyW2JlZm9yZV0udGV4dCkKKyAgICAgICAgaWYgKC0tYmVmb3JlIDwgMCkKKyAgICAgICAgICBicmVhazsKKworICAgICAgd2hpbGUgKGJ1ZmZlclthZnRlcl0udGV4dCA9PSBjcmQtPnZlcnRpY2FsLmJ1ZmZlclthZnRlcl0udGV4dCkKKyAgICAgICAgaWYgKCsrYWZ0ZXIgPj0gY3JkLT5zY3JlZW4ud2lkdGgpCisgICAgICAgICAgYnJlYWs7CisKKyAgICAgIGxlbmd0aCA9IGFmdGVyIC0gYmVmb3JlIC0gMTsKKyAgICB9CisKKyAgICBpZiAobGVuZ3RoID4gYmVzdExlbmd0aCkgeworICAgICAgYmVzdFJvdyA9IGN1cnJlbnRSb3c7CisgICAgICBpZiAoKGJlc3RMZW5ndGggPSBsZW5ndGgpID09IGNyZC0+c2NyZWVuLndpZHRoKSBicmVhazsKKyAgICB9CisKKyAgICBjdXJyZW50Um93IC09IGRpcmVjdGlvbjsKKyAgfSB3aGlsZSAoKGN1cnJlbnRSb3cgPj0gMCkgJiYgKGN1cnJlbnRSb3cgPCBjcmQtPnNjcmVlbi5oZWlnaHQpKTsKKworICBpbnQgZGVsdGEgPSBiZXN0Um93IC0gZmlyc3RSb3c7CisgIGNyZC0+dmVydGljYWwuc2Nyb2xsIC09IGRlbHRhOworICBjcmQtPmN1cnJlbnQucm93IC09IGRlbHRhOworfQorCitzdGF0aWMgaW50Cithd2FpdEN1cnNvck1vdGlvbiAoQ3Vyc29yUm91dGluZ0RhdGEgKmNyZCwgaW50IGRpcmVjdGlvbikgeworICBjcmQtPnByZXZpb3VzLmNvbHVtbiA9IGNyZC0+Y3VycmVudC5jb2x1bW47CisgIGNyZC0+cHJldmlvdXMucm93ID0gY3JkLT5jdXJyZW50LnJvdzsKKworICBUaW1lVmFsdWUgc3RhcnQ7CisgIGdldE1vbm90b25pY1RpbWUoJnN0YXJ0KTsKKworICBpbnQgbW92ZWQgPSAwOworICBsb25nIGludCB0aW1lb3V0ID0gY3JkLT50aW1lLnN1bSAvIGNyZC0+dGltZS5jb3VudDsKKworICB3aGlsZSAoMSkgeworICAgIGFzeW5jV2FpdChST1VUSU5HX1BPTExfSU5URVJWQUwpOworCisgICAgVGltZVZhbHVlIG5vdzsKKyAgICBnZXRNb25vdG9uaWNUaW1lKCZub3cpOworICAgIGxvbmcgaW50IHRpbWUgPSBtaWxsaXNlY29uZHNCZXR3ZWVuKCZzdGFydCwgJm5vdykgKyAxOworCisgICAgaW50IG9sZHkgPSBjcmQtPmN1cnJlbnQucm93OworICAgIGludCBvbGR4ID0gY3JkLT5jdXJyZW50LmNvbHVtbjsKKyAgICBpZiAoIWdldEN1cnJlbnRQb3NpdGlvbihjcmQpKSByZXR1cm4gMDsKKworICAgIGlmICgoY3JkLT5jdXJyZW50LnJvdyAhPSBvbGR5KSB8fCAoY3JkLT5jdXJyZW50LmNvbHVtbiAhPSBvbGR4KSkgeworICAgICAgbG9nUm91dGluZygibW92ZWQ6IFslZCwlZF0gLT4gWyVkLCVkXSAoJWxkbXMpIiwKKyAgICAgICAgICAgICAgICAgb2xkeCwgb2xkeSwgY3JkLT5jdXJyZW50LmNvbHVtbiwgY3JkLT5jdXJyZW50LnJvdywgdGltZSk7CisKKyAgICAgIGlmICghbW92ZWQpIHsKKyAgICAgICAgbW92ZWQgPSAxOworICAgICAgICB0aW1lb3V0ID0gKHRpbWUgKiAyKSArIDE7CisKKyAgICAgICAgY3JkLT50aW1lLnN1bSArPSB0aW1lICogODsKKyAgICAgICAgY3JkLT50aW1lLmNvdW50ICs9IDE7CisgICAgICB9CisKKyAgICAgIGlmIChST1VUSU5HX1BPTExfSU5URVJWQUwpIHsKKyAgICAgICAgc3RhcnQgPSBub3c7CisgICAgICB9IGVsc2UgeworICAgICAgICBhc3luY1dhaXQoMSk7CisgICAgICAgIGdldE1vbm90b25pY1RpbWUoJnN0YXJ0KTsKKyAgICAgIH0KKyAgICB9IGVsc2UgaWYgKHRpbWUgPiB0aW1lb3V0KSB7CisgICAgICBicmVhazsKKyAgICB9CisgIH0KKworICBoYW5kbGVWZXJ0aWNhbFNjcm9sbGluZyhjcmQsIGRpcmVjdGlvbik7CisgIHJldHVybiAxOworfQorCitzdGF0aWMgaW50Cittb3ZlQ3Vyc29yIChDdXJzb3JSb3V0aW5nRGF0YSAqY3JkLCBjb25zdCBDdXJzb3JEaXJlY3Rpb25FbnRyeSAqZGlyZWN0aW9uKSB7CisgIGNyZC0+dmVydGljYWwucm93ID0gY3JkLT5jdXJyZW50LnJvdyAtIGNyZC0+dmVydGljYWwuc2Nyb2xsOworICBpZiAoIXJlYWRSb3coY3JkLCBOVUxMLCBjcmQtPnZlcnRpY2FsLnJvdykpIHJldHVybiAwOworCisjaWZkZWYgU0lHVVNSMQorICBzaWdzZXRfdCBvbGRNYXNrOworICBzaWdwcm9jbWFzayhTSUdfQkxPQ0ssICZjcmQtPnNpZ25hbC5tYXNrLCAmb2xkTWFzayk7CisjZW5kaWYgLyogU0lHVVNSMSAqLworCisgIGxvZ1JvdXRpbmcoIm1vdmU6ICVzIiwgZGlyZWN0aW9uLT5uYW1lKTsKKyAgaW5zZXJ0U2NyZWVuS2V5KGRpcmVjdGlvbi0+a2V5KTsKKworI2lmZGVmIFNJR1VTUjEKKyAgc2lncHJvY21hc2soU0lHX1NFVE1BU0ssICZvbGRNYXNrLCBOVUxMKTsKKyNlbmRpZiAvKiBTSUdVU1IxICovCisKKyAgcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBSb3V0aW5nUmVzdWx0CithZGp1c3RDdXJzb3JQb3NpdGlvbiAoQ3Vyc29yUm91dGluZ0RhdGEgKmNyZCwgaW50IHdoZXJlLCBpbnQgdHJneSwgaW50IHRyZ3gsIGNvbnN0IEN1cnNvckF4aXNFbnRyeSAqYXhpcykgeworICBsb2dSb3V0aW5nKCJ0bzogWyVkLCVkXSIsIHRyZ3gsIHRyZ3kpOworCisgIHdoaWxlICgxKSB7CisgICAgaW50IGRpZnkgPSB0cmd5IC0gY3JkLT5jdXJyZW50LnJvdzsKKyAgICBpbnQgZGlmeCA9ICh0cmd4IDwgMCk/IDA6ICh0cmd4IC0gY3JkLT5jdXJyZW50LmNvbHVtbik7CisgICAgaW50IGRpcjsKKworICAgIC8qIGRldGVybWluZSB3aGljaCBkaXJlY3Rpb24gdGhlIGN1cnNvciBuZWVkcyB0byBtb3ZlIGluICovCisgICAgaWYgKGRpZnkpIHsKKyAgICAgIGRpciA9IChkaWZ5ID4gMCk/IDE6IC0xOworICAgIH0gZWxzZSBpZiAoZGlmeCkgeworICAgICAgZGlyID0gKGRpZnggPiAwKT8gMTogLTE7CisgICAgfSBlbHNlIHsKKyAgICAgIHJldHVybiBDUlJfRE9ORTsKKyAgICB9CisKKyAgICAvKiB0ZWxsIHRoZSBjdXJzb3IgdG8gbW92ZSBpbiB0aGUgbmVlZGVkIGRpcmVjdGlvbiAqLworICAgIGlmICghbW92ZUN1cnNvcihjcmQsICgoZGlyID4gMCk/IGF4aXMtPmZvcndhcmQ6IGF4aXMtPmJhY2t3YXJkKSkpIHJldHVybiBDUlJfRkFJTDsKKyAgICBpZiAoIWF3YWl0Q3Vyc29yTW90aW9uKGNyZCwgZGlyKSkgcmV0dXJuIENSUl9GQUlMOworCisgICAgaWYgKGNyZC0+Y3VycmVudC5yb3cgIT0gY3JkLT5wcmV2aW91cy5yb3cpIHsKKyAgICAgIGlmIChjcmQtPnByZXZpb3VzLnJvdyAhPSB0cmd5KSB7CisgICAgICAgIGlmICgoKGNyZC0+Y3VycmVudC5yb3cgLSBjcmQtPnByZXZpb3VzLnJvdykgKiBkaXIpID4gMCkgeworICAgICAgICAgIGludCBkaWYgPSB0cmd5IC0gY3JkLT5jdXJyZW50LnJvdzsKKyAgICAgICAgICBpZiAoKGRpZiAqIGRpZnkpID49IDApIGNvbnRpbnVlOworICAgICAgICAgIGlmICh3aGVyZSA+IDApIHsKKyAgICAgICAgICAgIGlmIChjcmQtPmN1cnJlbnQucm93ID4gdHJneSkgcmV0dXJuIENSUl9ORUFSOworICAgICAgICAgIH0gZWxzZSBpZiAod2hlcmUgPCAwKSB7CisgICAgICAgICAgICBpZiAoY3JkLT5jdXJyZW50LnJvdyA8IHRyZ3kpIHJldHVybiBDUlJfTkVBUjsKKyAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaWYgKChkaWYgKiBkaWYpIDwgKGRpZnkgKiBkaWZ5KSkgcmV0dXJuIENSUl9ORUFSOworICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgfQorICAgIH0gZWxzZSBpZiAoY3JkLT5jdXJyZW50LmNvbHVtbiAhPSBjcmQtPnByZXZpb3VzLmNvbHVtbikgeworICAgICAgaWYgKCgoY3JkLT5jdXJyZW50LmNvbHVtbiAtIGNyZC0+cHJldmlvdXMuY29sdW1uKSAqIGRpcikgPiAwKSB7CisgICAgICAgIGludCBkaWYgPSB0cmd4IC0gY3JkLT5jdXJyZW50LmNvbHVtbjsKKyAgICAgICAgaWYgKGNyZC0+Y3VycmVudC5yb3cgIT0gdHJneSkgY29udGludWU7CisgICAgICAgIGlmICgoZGlmICogZGlmeCkgPj0gMCkgY29udGludWU7CisgICAgICAgIGlmICh3aGVyZSA+IDApIHsKKyAgICAgICAgICBpZiAoY3JkLT5jdXJyZW50LmNvbHVtbiA+IHRyZ3gpIHJldHVybiBDUlJfTkVBUjsKKyAgICAgICAgfSBlbHNlIGlmICh3aGVyZSA8IDApIHsKKyAgICAgICAgICBpZiAoY3JkLT5jdXJyZW50LmNvbHVtbiA8IHRyZ3gpIHJldHVybiBDUlJfTkVBUjsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICBpZiAoKGRpZiAqIGRpZikgPCAoZGlmeCAqIGRpZngpKSByZXR1cm4gQ1JSX05FQVI7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgcmV0dXJuIENSUl9ORUFSOworICAgIH0KKworICAgIC8qIFdlJ3JlIGdldHRpbmcgZmFydGhlciBmcm9tIG91ciB0YXJnZXQuIEJlZm9yZSBnaXZpbmcgdXAsIGxldCdzCisgICAgICogdHJ5IGdvaW5nIGJhY2sgdG8gdGhlIHByZXZpb3VzIHBvc2l0aW9uIHNpbmNlIGl0IHdhcyBvYnZpb3VzbHkKKyAgICAgKiB0aGUgbmVhcmVzdCBldmVyIHJlYWNoZWQuCisgICAgICovCisgICAgaWYgKCFtb3ZlQ3Vyc29yKGNyZCwgKChkaXIgPiAwKT8gYXhpcy0+YmFja3dhcmQ6IGF4aXMtPmZvcndhcmQpKSkgcmV0dXJuIENSUl9GQUlMOworICAgIHJldHVybiBhd2FpdEN1cnNvck1vdGlvbihjcmQsIC1kaXIpPyBDUlJfTkVBUjogQ1JSX0ZBSUw7CisgIH0KK30KKworc3RhdGljIFJvdXRpbmdSZXN1bHQKK2FkanVzdEN1cnNvckhvcml6b250YWxseSAoQ3Vyc29yUm91dGluZ0RhdGEgKmNyZCwgaW50IHdoZXJlLCBpbnQgcm93LCBpbnQgY29sdW1uKSB7CisgIHJldHVybiBhZGp1c3RDdXJzb3JQb3NpdGlvbihjcmQsIHdoZXJlLCByb3csIGNvbHVtbiwgJmN1cnNvckF4aXNUYWJsZVtDVVJTT1JfQVhJU19IT1JJWk9OVEFMXSk7Cit9CisKK3N0YXRpYyBSb3V0aW5nUmVzdWx0CithZGp1c3RDdXJzb3JWZXJ0aWNhbGx5IChDdXJzb3JSb3V0aW5nRGF0YSAqY3JkLCBpbnQgd2hlcmUsIGludCByb3cpIHsKKyAgcmV0dXJuIGFkanVzdEN1cnNvclBvc2l0aW9uKGNyZCwgd2hlcmUsIHJvdywgLTEsICZjdXJzb3JBeGlzVGFibGVbQ1VSU09SX0FYSVNfVkVSVElDQUxdKTsKK30KKwordHlwZWRlZiBzdHJ1Y3QgeworICBpbnQgY29sdW1uOworICBpbnQgcm93OworICBpbnQgc2NyZWVuOworfSBSb3V0aW5nUGFyYW1ldGVyczsKKworc3RhdGljIFJvdXRpbmdTdGF0dXMKK3JvdXRlQ3Vyc29yIChjb25zdCBSb3V0aW5nUGFyYW1ldGVycyAqcGFyYW1ldGVycykgeworICBDdXJzb3JSb3V0aW5nRGF0YSBjcmQ7CisKKyNpZmRlZiBTSUdVU1IxCisgIC8qIFNldCB1cCB0aGUgc2lnbmFsIG1hc2suICovCisgIHNpZ2VtcHR5c2V0KCZjcmQuc2lnbmFsLm1hc2spOworICBzaWdhZGRzZXQoJmNyZC5zaWduYWwubWFzaywgU0lHVVNSMSk7CisgIHNpZ3Byb2NtYXNrKFNJR19VTkJMT0NLLCAmY3JkLnNpZ25hbC5tYXNrLCBOVUxMKTsKKyNlbmRpZiAvKiBTSUdVU1IxICovCisKKyAgLyogaW5pdGlhbGl6ZSB0aGUgcm91dGluZyBkYXRhIHN0cnVjdHVyZSAqLworICBjcmQuc2NyZWVuLm51bWJlciA9IHBhcmFtZXRlcnMtPnNjcmVlbjsKKyAgY3JkLnZlcnRpY2FsLmJ1ZmZlciA9IE5VTEw7CisgIGNyZC50aW1lLnN1bSA9IFJPVVRJTkdfTUFYSU1VTV9USU1FT1VUOworICBjcmQudGltZS5jb3VudCA9IDE7CisKKyAgaWYgKGdldEN1cnJlbnRQb3NpdGlvbigmY3JkKSkgeworICAgIGxvZ1JvdXRpbmcoImZyb206IFslZCwlZF0iLCBjcmQuY3VycmVudC5jb2x1bW4sIGNyZC5jdXJyZW50LnJvdyk7CisKKyAgICBpZiAocGFyYW1ldGVycy0+Y29sdW1uIDwgMCkgeworICAgICAgYWRqdXN0Q3Vyc29yVmVydGljYWxseSgmY3JkLCAwLCBwYXJhbWV0ZXJzLT5yb3cpOworICAgIH0gZWxzZSB7CisgICAgICBpZiAoYWRqdXN0Q3Vyc29yVmVydGljYWxseSgmY3JkLCAtMSwgcGFyYW1ldGVycy0+cm93KSAhPSBDUlJfRkFJTCkgeworICAgICAgICBpZiAoYWRqdXN0Q3Vyc29ySG9yaXpvbnRhbGx5KCZjcmQsIDAsIHBhcmFtZXRlcnMtPnJvdywgcGFyYW1ldGVycy0+Y29sdW1uKSA9PSBDUlJfTkVBUikgeworICAgICAgICAgIGlmIChjcmQuY3VycmVudC5yb3cgPCBwYXJhbWV0ZXJzLT5yb3cpIHsKKyAgICAgICAgICAgIGlmIChhZGp1c3RDdXJzb3JWZXJ0aWNhbGx5KCZjcmQsIDEsIGNyZC5jdXJyZW50LnJvdysxKSAhPSBDUlJfRkFJTCkgeworICAgICAgICAgICAgICBhZGp1c3RDdXJzb3JIb3Jpem9udGFsbHkoJmNyZCwgMCwgcGFyYW1ldGVycy0+cm93LCBwYXJhbWV0ZXJzLT5jb2x1bW4pOworICAgICAgICAgICAgfQorICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgfQorICAgIH0KKyAgfQorCisgIGlmIChjcmQudmVydGljYWwuYnVmZmVyKSBmcmVlKGNyZC52ZXJ0aWNhbC5idWZmZXIpOworCisgIGlmIChjcmQuc2NyZWVuLm51bWJlciAhPSBwYXJhbWV0ZXJzLT5zY3JlZW4pIHJldHVybiBST1VUSU5HX1NUQVRVU19GQUlMVVJFOworICBpZiAoY3JkLmN1cnJlbnQucm93ICE9IHBhcmFtZXRlcnMtPnJvdykgcmV0dXJuIFJPVVRJTkdfU1RBVFVTX1JPVzsKKyAgaWYgKChwYXJhbWV0ZXJzLT5jb2x1bW4gPj0gMCkgJiYgKGNyZC5jdXJyZW50LmNvbHVtbiAhPSBwYXJhbWV0ZXJzLT5jb2x1bW4pKSByZXR1cm4gUk9VVElOR19TVEFUVVNfQ09MVU1OOworICByZXR1cm4gUk9VVElOR19TVEFUVVNfU1VDQ0VFU1M7Cit9CisKKyNpZmRlZiBTSUdVU1IxCisjZGVmaW5lIE5PVF9ST1VUSU5HIDAKKworc3RhdGljIHBpZF90IHJvdXRpbmdQcm9jZXNzID0gTk9UX1JPVVRJTkc7CisKK2ludAoraXNSb3V0aW5nICh2b2lkKSB7CisgIHJldHVybiByb3V0aW5nUHJvY2VzcyAhPSBOT1RfUk9VVElORzsKK30KKworUm91dGluZ1N0YXR1cworZ2V0Um91dGluZ1N0YXR1cyAoaW50IHdhaXQpIHsKKyAgaWYgKGlzUm91dGluZygpKSB7CisgICAgaW50IG9wdGlvbnMgPSAwOworICAgIGlmICghd2FpdCkgb3B0aW9ucyB8PSBXTk9IQU5HOworCisgIGRvV2FpdDoKKyAgICB7CisgICAgICBpbnQgc3RhdHVzOworICAgICAgcGlkX3QgcHJvY2VzcyA9IHdhaXRwaWQocm91dGluZ1Byb2Nlc3MsICZzdGF0dXMsIG9wdGlvbnMpOworCisgICAgICBpZiAocHJvY2VzcyA9PSByb3V0aW5nUHJvY2VzcykgeworICAgICAgICByb3V0aW5nUHJvY2VzcyA9IE5PVF9ST1VUSU5HOworICAgICAgICByZXR1cm4gV0lGRVhJVEVEKHN0YXR1cyk/IFdFWElUU1RBVFVTKHN0YXR1cyk6IFJPVVRJTkdfU1RBVFVTX0ZBSUxVUkU7CisgICAgICB9CisKKyAgICAgIGlmIChwcm9jZXNzID09IC0xKSB7CisgICAgICAgIGlmIChlcnJubyA9PSBFSU5UUikgZ290byBkb1dhaXQ7CisKKyAgICAgICAgaWYgKGVycm5vID09IEVDSElMRCkgeworICAgICAgICAgIHJvdXRpbmdQcm9jZXNzID0gTk9UX1JPVVRJTkc7CisgICAgICAgICAgcmV0dXJuIFJPVVRJTkdfU1RBVFVTX0ZBSUxVUkU7CisgICAgICAgIH0KKworICAgICAgICBsb2dTeXN0ZW1FcnJvcigid2FpdHBpZCIpOworICAgICAgfQorICAgIH0KKyAgfQorCisgIHJldHVybiBST1VUSU5HX1NUQVRVU19OT05FOworfQorCitzdGF0aWMgdm9pZAorc3RvcFJvdXRpbmcgKHZvaWQpIHsKKyAgaWYgKGlzUm91dGluZygpKSB7CisgICAga2lsbChyb3V0aW5nUHJvY2VzcywgU0lHVVNSMSk7CisgICAgZ2V0Um91dGluZ1N0YXR1cygxKTsKKyAgfQorfQorCitzdGF0aWMgdm9pZAorZXhpdEN1cnNvclJvdXRpbmcgKHZvaWQgKmRhdGEpIHsKKyAgc3RvcFJvdXRpbmcoKTsKK30KKyNlbHNlIC8qIFNJR1VTUjEgKi8KK3N0YXRpYyBSb3V0aW5nU3RhdHVzIHJvdXRpbmdTdGF0dXMgPSBST1VUSU5HX1NUQVRVU19OT05FOworCitSb3V0aW5nU3RhdHVzCitnZXRSb3V0aW5nU3RhdHVzIChpbnQgd2FpdCkgeworICBSb3V0aW5nU3RhdHVzIHN0YXR1cyA9IHJvdXRpbmdTdGF0dXM7CisgIHJvdXRpbmdTdGF0dXMgPSBST1VUSU5HX1NUQVRVU19OT05FOworICByZXR1cm4gc3RhdHVzOworfQorCitpbnQKK2lzUm91dGluZyAodm9pZCkgeworICByZXR1cm4gMDsKK30KKyNlbmRpZiAvKiBTSUdVU1IxICovCisKK3N0YXRpYyBpbnQKK3N0YXJ0Um91dGluZ1Byb2Nlc3MgKGNvbnN0IFJvdXRpbmdQYXJhbWV0ZXJzICpwYXJhbWV0ZXJzKSB7CisjaWZkZWYgU0lHVVNSMQorICBpbnQgc3RhcnRlZCA9IDA7CisKKyAgc3RvcFJvdXRpbmcoKTsKKworICBzd2l0Y2ggKHJvdXRpbmdQcm9jZXNzID0gZm9yaygpKSB7CisgICAgY2FzZSAwOiB7IC8qIGNoaWxkOiBjdXJzb3Igcm91dGluZyBzdWJwcm9jZXNzICovCisgICAgICBSb3V0aW5nU3RhdHVzIHN0YXR1cyA9IFJPVVRJTkdfU1RBVFVTX0ZBSUxVUkU7CisKKyAgICAgIGlmICghUk9VVElOR19QT0xMX0lOVEVSVkFMKSB7CisgICAgICAgIGludCBuaWNlbmVzcyA9IG5pY2UoUk9VVElOR19QUk9DRVNTX05JQ0VORVNTKTsKKworICAgICAgICBpZiAobmljZW5lc3MgPT0gLTEpIHsKKyAgICAgICAgICBsb2dTeXN0ZW1FcnJvcigibmljZSIpOworICAgICAgICB9CisgICAgICB9CisKKyAgICAgIGlmIChjb25zdHJ1Y3RSb3V0aW5nU2NyZWVuKCkpIHsKKyAgICAgICAgc3RhdHVzID0gcm91dGVDdXJzb3IocGFyYW1ldGVycyk7CQkvKiB0ZXJtaW5hdGUgY2hpbGQgcHJvY2VzcyAqLworICAgICAgICBkZXN0cnVjdFJvdXRpbmdTY3JlZW4oKTsJCS8qIGNsb3NlIHNlY29uZCB0aHJlYWQgb2Ygc2NyZWVuIHJlYWRpbmcgKi8KKyAgICAgIH0KKworICAgICAgX2V4aXQoc3RhdHVzKTsJCS8qIHRlcm1pbmF0ZSBjaGlsZCBwcm9jZXNzICovCisgICAgfQorCisgICAgY2FzZSAtMTogLyogZXJyb3I6IGZvcmsoKSBmYWlsZWQgKi8KKyAgICAgIGxvZ1N5c3RlbUVycm9yKCJmb3JrIik7CisgICAgICByb3V0aW5nUHJvY2VzcyA9IE5PVF9ST1VUSU5HOworICAgICAgYnJlYWs7CisKKyAgICBkZWZhdWx0OiB7CisgICAgICAvKiBwYXJlbnQ6IGNvbnRpbnVlIHdoaWxlIGN1cnNvciBpcyBiZWluZyByb3V0ZWQgKi8KKworICAgICAgeworICAgICAgICBzdGF0aWMgaW50IGZpcnN0ID0gMTsKKworICAgICAgICBpZiAoZmlyc3QpIHsKKyAgICAgICAgICBmaXJzdCA9IDA7CisgICAgICAgICAgb25Qcm9ncmFtRXhpdCgiY3Vyc29yLXJvdXRpbmciLCBleGl0Q3Vyc29yUm91dGluZywgTlVMTCk7CisgICAgICAgIH0KKyAgICAgIH0KKworICAgICAgc3RhcnRlZCA9IDE7CisgICAgICBicmVhazsKKyAgICB9CisgIH0KKworICByZXR1cm4gc3RhcnRlZDsKKyNlbHNlIC8qIFNJR1VTUjEgKi8KKyAgcm91dGluZ1N0YXR1cyA9IHJvdXRlQ3Vyc29yKHBhcmFtZXRlcnMpOworICByZXR1cm4gMTsKKyNlbmRpZiAvKiBTSUdVU1IxICovCit9CisKKyNpZmRlZiBHT1RfUFRIUkVBRFMKK3R5cGVkZWYgc3RydWN0IHsKKyAgY29uc3QgUm91dGluZ1BhcmFtZXRlcnMgKmNvbnN0IHBhcmFtZXRlcnM7CisKKyAgaW50IHJlc3VsdDsKK30gUm91dGluZ1RocmVhZEFyZ3VtZW50OworCitUSFJFQURfRlVOQ1RJT04ocnVuUm91dGluZ1RocmVhZCkgeworICBSb3V0aW5nVGhyZWFkQXJndW1lbnQgKnJ0YSA9IGFyZ3VtZW50OworCisgIHJ0YS0+cmVzdWx0ID0gc3RhcnRSb3V0aW5nUHJvY2VzcyhydGEtPnBhcmFtZXRlcnMpOworICByZXR1cm4gTlVMTDsKK30KKyNlbmRpZiAvKiBHT1RfUFRIUkVBRFMgKi8KKworaW50CitzdGFydFJvdXRpbmcgKGludCBjb2x1bW4sIGludCByb3csIGludCBzY3JlZW4pIHsKKyAgY29uc3QgUm91dGluZ1BhcmFtZXRlcnMgcGFyYW1ldGVycyA9IHsKKyAgICAuY29sdW1uID0gY29sdW1uLAorICAgIC5yb3cgPSByb3csCisgICAgLnNjcmVlbiA9IHNjcmVlbgorICB9OworCisjaWZkZWYgR09UX1BUSFJFQURTCisgIGludCBzdGFydGVkID0gMDsKKworICBSb3V0aW5nVGhyZWFkQXJndW1lbnQgcnRhID0geworICAgIC5wYXJhbWV0ZXJzID0gJnBhcmFtZXRlcnMKKyAgfTsKKworICBpZiAoY2FsbFRocmVhZEZ1bmN0aW9uKCJjdXJzb3Itcm91dGluZyIsIHJ1blJvdXRpbmdUaHJlYWQsICZydGEsIE5VTEwpKSB7CisgICAgaWYgKHJ0YS5yZXN1bHQpIHsKKyAgICAgIHN0YXJ0ZWQgPSAxOworICAgIH0KKyAgfQorCisgIHJldHVybiBzdGFydGVkOworI2Vsc2UgLyogR09UX1BUSFJFQURTICovCisgIHJldHVybiBzdGFydFJvdXRpbmdQcm9jZXNzKCZwYXJhbWV0ZXJzKTsKKyNlbmRpZiAvKiBHT1RfUFRIUkVBRFMgKi8KK30KZGlmZiAtLWdpdCBhL1Byb2dyYW1zL3JvdXRpbmcuaCBiL1Byb2dyYW1zL3JvdXRpbmcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZTNiNTI3Ci0tLSAvZGV2L251bGwKKysrIGIvUHJvZ3JhbXMvcm91dGluZy5oCkBAIC0wLDAgKzEsNDMgQEAKKy8qCisgKiBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorICogICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorICoKKyAqIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorICoKKyAqIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyAqLworCisjaWZuZGVmIEJSTFRUWV9JTkNMVURFRF9ST1VUSU5HCisjZGVmaW5lIEJSTFRUWV9JTkNMVURFRF9ST1VUSU5HCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYgLyogX19jcGx1c3BsdXMgKi8KKwordHlwZWRlZiBlbnVtIHsKKyAgLy8gZG9uJ3QgY2hhbmdlIHRoZSBvcmRlcgorICBST1VUSU5HX1NUQVRVU19OT05FLAorICBST1VUSU5HX1NUQVRVU19TVUNDRUVTUywKKyAgUk9VVElOR19TVEFUVVNfQ09MVU1OLAorICBST1VUSU5HX1NUQVRVU19ST1csCisgIFJPVVRJTkdfU1RBVFVTX0ZBSUxVUkUKK30gUm91dGluZ1N0YXR1czsKKworZXh0ZXJuIGludCBzdGFydFJvdXRpbmcgKGludCBjb2x1bW4sIGludCByb3csIGludCBzY3JlZW4pOworZXh0ZXJuIGludCBpc1JvdXRpbmcgKHZvaWQpOworZXh0ZXJuIFJvdXRpbmdTdGF0dXMgZ2V0Um91dGluZ1N0YXR1cyAoaW50IHdhaXQpOworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZiAvKiBfX2NwbHVzcGx1cyAqLworCisjZW5kaWYgLyogQlJMVFRZX0lOQ0xVREVEX1JPVVRJTkcgKi8KZGlmZiAtLWdpdCBhL1Byb2dyYW1zL3Njci5hdXRvLmggYi9Qcm9ncmFtcy9zY3IuYXV0by5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJkMmNkOWQKLS0tIC9kZXYvbnVsbAorKysgYi9Qcm9ncmFtcy9zY3IuYXV0by5oCkBAIC0wLDAgKzEsMyBAQAorc3RhdGljIGNvbnN0IERyaXZlckVudHJ5IGRyaXZlclRhYmxlW10gPSB7CisgIHtOVUxMLCBOVUxMfQorfTsKZGlmZiAtLWdpdCBhL1Byb2dyYW1zL3Njci5jIGIvUHJvZ3JhbXMvc2NyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjQ2NDhmYgotLS0gL2Rldi9udWxsCisrKyBiL1Byb2dyYW1zL3Njci5jCkBAIC0wLDAgKzEsMjU3IEBACisvKgorICogQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyAqICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyAqCisgKiBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorICoKKyAqIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyAqCisgKiBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisgKi8KKworLyogc2NyLmNjIC0gVGhlIHNjcmVlbiByZWFkaW5nIGxpYnJhcnkKKyAqCisgKiBOb3RlOiBBbHRob3VnaCBDKyssIHRoaXMgY29kZSByZXF1aXJlcyBubyBzdGFuZGFyZCBDKysgbGlicmFyeS4KKyAqIFRoaXMgaXMgaW1wb3J0YW50IGFzIEJSTFRUWSAqbXVzdCBub3QqIHJlbHkgb24gdG9vIG1hbnkKKyAqIHJ1bi10aW1lIHNoYXJlZCBsaWJyYXJpZXMsIG5vciBiZSBhIGh1Z2UgZXhlY3V0YWJsZS4KKyAqLworCisjaW5jbHVkZSAicHJvbG9ndWUuaCIKKworI2luY2x1ZGUgPHN0cmluZy5oPgorCisjaW5jbHVkZSAibG9nLmgiCisjaW5jbHVkZSAidW5pY29kZS5oIgorI2luY2x1ZGUgInNjci5oIgorI2luY2x1ZGUgInNjcl9yZWFsLmgiCisjaW5jbHVkZSAiZHJpdmVyLmgiCisKK01haW5TY3JlZW4gbWFpblNjcmVlbjsKK0Jhc2VTY3JlZW4gKmN1cnJlbnRTY3JlZW4gPSBOVUxMOworCitpbnQKK2lzTWFpblNjcmVlbiAodm9pZCkgeworICByZXR1cm4gY3VycmVudFNjcmVlbiA9PSAmbWFpblNjcmVlbi5iYXNlOworfQorCitjb25zdCBjaGFyICpjb25zdCAqCitnZXRTY3JlZW5QYXJhbWV0ZXJzIChjb25zdCBTY3JlZW5Ecml2ZXIgKmRyaXZlcikgeworICByZXR1cm4gZHJpdmVyLT5wYXJhbWV0ZXJzOworfQorCitzdGF0aWMgdm9pZAoraW5pdGlhbGl6ZVNjcmVlbiAodm9pZCkgeworICBzY3JlZW4tPmluaXRpYWxpemUoJm1haW5TY3JlZW4pOworICBjdXJyZW50U2NyZWVuID0gJm1haW5TY3JlZW4uYmFzZTsKKyAgY3VycmVudFNjcmVlbi0+b25Gb3JlZ3JvdW5kKCk7Cit9CisKK3ZvaWQKK3NldE5vU2NyZWVuICh2b2lkKSB7CisgIHNjcmVlbiA9ICZub1NjcmVlbjsKKyAgaW5pdGlhbGl6ZVNjcmVlbigpOworfQorCitpbnQKK2NvbnN0cnVjdFNjcmVlbkRyaXZlciAoY2hhciAqKnBhcmFtZXRlcnMpIHsKKyAgaW5pdGlhbGl6ZVNjcmVlbigpOworCisgIGlmIChtYWluU2NyZWVuLnByb2Nlc3NQYXJhbWV0ZXJzKHBhcmFtZXRlcnMpKSB7CisgICAgaWYgKG1haW5TY3JlZW4uY29uc3RydWN0KCkpIHsKKyAgICAgIHJldHVybiAxOworICAgIH0gZWxzZSB7CisgICAgICBsb2dNZXNzYWdlKExPR19ERUJVRywgInNjcmVlbiBkcml2ZXIgaW5pdGlhbGl6YXRpb24gZmFpbGVkOiAlcyIsCisgICAgICAgICAgICAgICAgIHNjcmVlbi0+ZGVmaW5pdGlvbi5jb2RlKTsKKyAgICB9CisKKyAgICBtYWluU2NyZWVuLnJlbGVhc2VQYXJhbWV0ZXJzKCk7CisgIH0KKworICByZXR1cm4gMDsKK30KKwordm9pZAorZGVzdHJ1Y3RTY3JlZW5Ecml2ZXIgKHZvaWQpIHsKKyAgbWFpblNjcmVlbi5kZXN0cnVjdCgpOworICBtYWluU2NyZWVuLnJlbGVhc2VQYXJhbWV0ZXJzKCk7Cit9CisKKworaW50Citwb2xsU2NyZWVuICh2b2lkKSB7CisgIHJldHVybiBjdXJyZW50U2NyZWVuLT5wb2xsKCk7Cit9CisKK2ludAorcmVmcmVzaFNjcmVlbiAodm9pZCkgeworICByZXR1cm4gY3VycmVudFNjcmVlbi0+cmVmcmVzaCgpOworfQorCit2b2lkCitkZXNjcmliZVNjcmVlbiAoU2NyZWVuRGVzY3JpcHRpb24gKmRlc2NyaXB0aW9uKSB7CisgIGRlc2NyaWJlQmFzZVNjcmVlbihjdXJyZW50U2NyZWVuLCBkZXNjcmlwdGlvbik7CisgIGlmIChkZXNjcmlwdGlvbi0+dW5yZWFkYWJsZSkgZGVzY3JpcHRpb24tPnF1YWxpdHkgPSBTQ1FfTk9ORTsKK30KKworaW50CityZWFkU2NyZWVuIChzaG9ydCBsZWZ0LCBzaG9ydCB0b3AsIHNob3J0IHdpZHRoLCBzaG9ydCBoZWlnaHQsIFNjcmVlbkNoYXJhY3RlciAqYnVmZmVyKSB7CisgIGNvbnN0IFNjcmVlbkJveCBib3ggPSB7CisgICAgLmxlZnQgPSBsZWZ0LAorICAgIC50b3AgPSB0b3AsCisgICAgLndpZHRoID0gd2lkdGgsCisgICAgLmhlaWdodCA9IGhlaWdodCwKKyAgfTsKKworICBpZiAoIWN1cnJlbnRTY3JlZW4tPnJlYWRDaGFyYWN0ZXJzKCZib3gsIGJ1ZmZlcikpIHJldHVybiAwOworCisgIFNjcmVlbkNoYXJhY3RlciAqY2hhcmFjdGVyID0gYnVmZmVyOworICBjb25zdCBTY3JlZW5DaGFyYWN0ZXIgKmVuZCA9IGNoYXJhY3RlciArIChib3gud2lkdGggKiBib3guaGVpZ2h0KTsKKworICB3aGlsZSAoY2hhcmFjdGVyIDwgZW5kKSB7CisgICAgd2NoYXJfdCAqdGV4dCA9ICZjaGFyYWN0ZXItPnRleHQ7CisKKyAgICBpZiAoKCp0ZXh0IDw9IDApIHx8ICgqdGV4dCA+IFVOSUNPREVfTEFTVF9DSEFSQUNURVIpKSB7CisgICAgICAvLyBUaGlzIGlzIG5vdCBhIHZhbGlkIFVuaWNvZGUgY2hhcmFjdGVyIC0gcmV0dXJuIHRoZSByZXBsYWNlbWVudCBjaGFyYWN0ZXIuCisKKyAgICAgIHNpemVfdCBpbmRleCA9IGNoYXJhY3RlciAtIGJ1ZmZlcjsKKyAgICAgIHVuc2lnbmVkIGludCBjb2x1bW4gPSBib3gubGVmdCArIChpbmRleCAlIGJveC53aWR0aCk7CisgICAgICB1bnNpZ25lZCBpbnQgcm93ID0gYm94LnRvcCArIChpbmRleCAvIGJveC53aWR0aCk7CisKKyAgICAgIGxvZ01lc3NhZ2UoTE9HX0VSUiwKKyAgICAgICAgImludmFsaWQgY2hhcmFjdGVyIFUrJTA0bFggb24gc2NyZWVuIGF0IFsldSwldV0iLAorICAgICAgICAodW5zaWduZWQgbG9uZykqdGV4dCwgY29sdW1uLCByb3cKKyAgICAgICk7CisKKyAgICAgICp0ZXh0ID0gVU5JQ09ERV9SRVBMQUNFTUVOVF9DSEFSQUNURVI7CisgICAgfQorCisgICAgY2hhcmFjdGVyICs9IDE7CisgIH0KKworICByZXR1cm4gMTsKK30KKworaW50CityZWFkU2NyZWVuVGV4dCAoc2hvcnQgbGVmdCwgc2hvcnQgdG9wLCBzaG9ydCB3aWR0aCwgc2hvcnQgaGVpZ2h0LCB3Y2hhcl90ICpidWZmZXIpIHsKKyAgdW5zaWduZWQgaW50IGNvdW50ID0gd2lkdGggKiBoZWlnaHQ7CisgIFNjcmVlbkNoYXJhY3RlciBjaGFyYWN0ZXJzW2NvdW50XTsKKyAgaWYgKCFyZWFkU2NyZWVuKGxlZnQsIHRvcCwgd2lkdGgsIGhlaWdodCwgY2hhcmFjdGVycykpIHJldHVybiAwOworCisgIGZvciAoaW50IGk9MDsgaTxjb3VudDsgaSs9MSkgeworICAgIGJ1ZmZlcltpXSA9IGNoYXJhY3RlcnNbaV0udGV4dDsKKyAgfQorCisgIHJldHVybiAxOworfQorCitpbnQKK2luc2VydFNjcmVlbktleSAoU2NyZWVuS2V5IGtleSkgeworICBsb2dNZXNzYWdlKExPR19DQVRFR09SWShTQ1JFRU5fRFJJVkVSKSwgImluc2VydCBrZXk6IDBYJTA0WCIsIGtleSk7CisgIHJldHVybiBjdXJyZW50U2NyZWVuLT5pbnNlcnRLZXkoa2V5KTsKK30KKworaW50Cityb3V0ZVNjcmVlbkN1cnNvciAoaW50IGNvbHVtbiwgaW50IHJvdywgaW50IHNjcmVlbikgeworICByZXR1cm4gY3VycmVudFNjcmVlbi0+cm91dGVDdXJzb3IoY29sdW1uLCByb3csIHNjcmVlbik7Cit9CisKK2ludAoraGlnaGxpZ2h0U2NyZWVuUmVnaW9uIChpbnQgbGVmdCwgaW50IHJpZ2h0LCBpbnQgdG9wLCBpbnQgYm90dG9tKSB7CisgIHJldHVybiBjdXJyZW50U2NyZWVuLT5oaWdobGlnaHRSZWdpb24obGVmdCwgcmlnaHQsIHRvcCwgYm90dG9tKTsKK30KKworaW50Cit1bmhpZ2hsaWdodFNjcmVlblJlZ2lvbiAodm9pZCkgeworICByZXR1cm4gY3VycmVudFNjcmVlbi0+dW5oaWdobGlnaHRSZWdpb24oKTsKK30KKworaW50CitnZXRTY3JlZW5Qb2ludGVyIChpbnQgKmNvbHVtbiwgaW50ICpyb3cpIHsKKyAgcmV0dXJuIGN1cnJlbnRTY3JlZW4tPmdldFBvaW50ZXIoY29sdW1uLCByb3cpOworfQorCitpbnQKK2NsZWFyU2NyZWVuVGV4dFNlbGVjdGlvbiAodm9pZCkgeworICByZXR1cm4gY3VycmVudFNjcmVlbi0+Y2xlYXJTZWxlY3Rpb24oKTsKK30KKworaW50CitzZXRTY3JlZW5UZXh0U2VsZWN0aW9uIChpbnQgc3RhcnRDb2x1bW4sIGludCBzdGFydFJvdywgaW50IGVuZENvbHVtbiwgaW50IGVuZFJvdykgeworICBpZiAoKGVuZFJvdyA8IHN0YXJ0Um93KSB8fCAoKGVuZFJvdyA9PSBzdGFydFJvdykgJiYgKGVuZENvbHVtbiA8IHN0YXJ0Q29sdW1uKSkpIHsKKyAgICBpbnQgdGVtcDsKKworICAgIHRlbXAgPSBlbmRDb2x1bW47CisgICAgZW5kQ29sdW1uID0gc3RhcnRDb2x1bW47CisgICAgc3RhcnRDb2x1bW4gPSB0ZW1wOworCisgICAgdGVtcCA9IGVuZFJvdzsKKyAgICBlbmRSb3cgPSBzdGFydFJvdzsKKyAgICBzdGFydFJvdyA9IHRlbXA7CisgIH0KKworICByZXR1cm4gY3VycmVudFNjcmVlbi0+c2V0U2VsZWN0aW9uKHN0YXJ0Q29sdW1uLCBzdGFydFJvdywgZW5kQ29sdW1uLCBlbmRSb3cpOworfQorCitpbnQKK2N1cnJlbnRWaXJ0dWFsVGVybWluYWwgKHZvaWQpIHsKKyAgcmV0dXJuIGN1cnJlbnRTY3JlZW4tPmN1cnJlbnRWaXJ0dWFsVGVybWluYWwoKTsKK30KKworaW50CitzZWxlY3RTY3JlZW5WaXJ0dWFsVGVybWluYWwgKGludCB2dCkgeworICByZXR1cm4gY3VycmVudFNjcmVlbi0+c2VsZWN0VmlydHVhbFRlcm1pbmFsKHZ0KTsKK30KKworaW50Citzd2l0Y2hTY3JlZW5WaXJ0dWFsVGVybWluYWwgKGludCB2dCkgeworICByZXR1cm4gY3VycmVudFNjcmVlbi0+c3dpdGNoVmlydHVhbFRlcm1pbmFsKHZ0KTsKK30KKworaW50CituZXh0U2NyZWVuVmlydHVhbFRlcm1pbmFsICh2b2lkKSB7CisgIHJldHVybiBjdXJyZW50U2NyZWVuLT5uZXh0VmlydHVhbFRlcm1pbmFsKCk7Cit9CisKK2ludAorcHJldmlvdXNTY3JlZW5WaXJ0dWFsVGVybWluYWwgKHZvaWQpIHsKKyAgcmV0dXJuIGN1cnJlbnRTY3JlZW4tPnByZXZpb3VzVmlydHVhbFRlcm1pbmFsKCk7Cit9CisKK2ludAordXNlclZpcnR1YWxUZXJtaW5hbCAoaW50IG51bWJlcikgeworICByZXR1cm4gbWFpblNjcmVlbi51c2VyVmlydHVhbFRlcm1pbmFsKG51bWJlcik7Cit9CisKK2ludAoraGFuZGxlU2NyZWVuQ29tbWFuZHMgKGludCBjb21tYW5kLCB2b2lkICpkYXRhKSB7CisgIHJldHVybiBjdXJyZW50U2NyZWVuLT5oYW5kbGVDb21tYW5kKGNvbW1hbmQpOworfQorCitLZXlUYWJsZUNvbW1hbmRDb250ZXh0CitnZXRTY3JlZW5Db21tYW5kQ29udGV4dCAodm9pZCkgeworICByZXR1cm4gY3VycmVudFNjcmVlbi0+Z2V0Q29tbWFuZENvbnRleHQoKTsKK30KKworCitpbnQKK2NvbnN0cnVjdFJvdXRpbmdTY3JlZW4gKHZvaWQpIHsKKyAgLyogVGhpcyBmdW5jdGlvbiBzaG91bGQgYmUgdXNlZCBpbiBhIGZvcmtlZCBwcm9jZXNzLiBUaG91Z2ggd2Ugd2FudCB0bworICAgKiBoYXZlIGEgc2VwYXJhdGUgZmlsZSBkZXNjcmlwdG9yIGZvciB0aGUgbWFpbiBzY3JlZW4gZnJvbSB0aGUgb25lIHVzZWQKKyAgICogaW4gdGhlIG1haW4gdGhyZWFkLiAgU28gd2UgY2xvc2UgYW5kIHJlb3BlbiB0aGUgZGV2aWNlLgorICAgKi8KKyAgbWFpblNjcmVlbi5kZXN0cnVjdCgpOworICByZXR1cm4gbWFpblNjcmVlbi5jb25zdHJ1Y3QoKTsKK30KKwordm9pZAorZGVzdHJ1Y3RSb3V0aW5nU2NyZWVuICh2b2lkKSB7CisgIG1haW5TY3JlZW4uZGVzdHJ1Y3QoKTsKKyAgbWFpblNjcmVlbi5yZWxlYXNlUGFyYW1ldGVycygpOworfQpkaWZmIC0tZ2l0IGEvUHJvZ3JhbXMvc2NyLmggYi9Qcm9ncmFtcy9zY3IuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNGU1M2I0Ci0tLSAvZGV2L251bGwKKysrIGIvUHJvZ3JhbXMvc2NyLmgKQEAgLTAsMCArMSw5NCBAQAorLyoKKyAqIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisgKiAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisgKgorICogQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKKyNpZm5kZWYgQlJMVFRZX0lOQ0xVREVEX1NDUgorI2RlZmluZSBCUkxUVFlfSU5DTFVERURfU0NSCisKKyNpbmNsdWRlICJzY3JfdHlwZXMuaCIKKyNpbmNsdWRlICJrdGJfdHlwZXMuaCIKKyNpbmNsdWRlICJkcml2ZXIuaCIKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZiAvKiBfX2NwbHVzcGx1cyAqLworCitleHRlcm4gaW50IGlzTWFpblNjcmVlbiAodm9pZCk7CisKKy8qIFJvdXRpbmVzIHdoaWNoIGFwcGx5IHRvIHRoZSBjdXJyZW50IHNjcmVlbi4gKi8KK2V4dGVybiBpbnQgcG9sbFNjcmVlbiAodm9pZCk7CitleHRlcm4gaW50IHJlZnJlc2hTY3JlZW4gKHZvaWQpOworZXh0ZXJuIHZvaWQgZGVzY3JpYmVTY3JlZW4gKFNjcmVlbkRlc2NyaXB0aW9uICopOwkJLyogZ2V0IHNjcmVlbiBzdGF0dXMgKi8KK2V4dGVybiBpbnQgcmVhZFNjcmVlbiAoc2hvcnQgbGVmdCwgc2hvcnQgdG9wLCBzaG9ydCB3aWR0aCwgc2hvcnQgaGVpZ2h0LCBTY3JlZW5DaGFyYWN0ZXIgKmJ1ZmZlcik7CitleHRlcm4gaW50IHJlYWRTY3JlZW5UZXh0IChzaG9ydCBsZWZ0LCBzaG9ydCB0b3AsIHNob3J0IHdpZHRoLCBzaG9ydCBoZWlnaHQsIHdjaGFyX3QgKmJ1ZmZlcik7CitleHRlcm4gaW50IGluc2VydFNjcmVlbktleSAoU2NyZWVuS2V5IGtleSk7CitleHRlcm4gaW50IHJvdXRlU2NyZWVuQ3Vyc29yIChpbnQgY29sdW1uLCBpbnQgcm93LCBpbnQgc2NyZWVuKTsKK2V4dGVybiBpbnQgaGlnaGxpZ2h0U2NyZWVuUmVnaW9uIChpbnQgbGVmdCwgaW50IHJpZ2h0LCBpbnQgdG9wLCBpbnQgYm90dG9tKTsKK2V4dGVybiBpbnQgdW5oaWdobGlnaHRTY3JlZW5SZWdpb24gKHZvaWQpOworZXh0ZXJuIGludCBnZXRTY3JlZW5Qb2ludGVyIChpbnQgKmNvbHVtbiwgaW50ICpyb3cpOworZXh0ZXJuIGludCBjbGVhclNjcmVlblRleHRTZWxlY3Rpb24gKHZvaWQpOworZXh0ZXJuIGludCBzZXRTY3JlZW5UZXh0U2VsZWN0aW9uIChpbnQgc3RhcnRDb2x1bW4sIGludCBzdGFydFJvdywgaW50IGVuZENvbHVtbiwgaW50IGVuZFJvdyk7CitleHRlcm4gaW50IGN1cnJlbnRWaXJ0dWFsVGVybWluYWwgKHZvaWQpOworZXh0ZXJuIGludCBzZWxlY3RTY3JlZW5WaXJ0dWFsVGVybWluYWwgKGludCB2dCk7CitleHRlcm4gaW50IHN3aXRjaFNjcmVlblZpcnR1YWxUZXJtaW5hbCAoaW50IHZ0KTsKK2V4dGVybiBpbnQgbmV4dFNjcmVlblZpcnR1YWxUZXJtaW5hbCAodm9pZCk7CitleHRlcm4gaW50IHByZXZpb3VzU2NyZWVuVmlydHVhbFRlcm1pbmFsICh2b2lkKTsKK2V4dGVybiBpbnQgdXNlclZpcnR1YWxUZXJtaW5hbCAoaW50IG51bWJlcik7CitleHRlcm4gaW50IGhhbmRsZVNjcmVlbkNvbW1hbmRzIChpbnQgY29tbWFuZCwgdm9pZCAqZGF0YSk7CitleHRlcm4gS2V5VGFibGVDb21tYW5kQ29udGV4dCBnZXRTY3JlZW5Db21tYW5kQ29udGV4dCAodm9pZCk7CisKK3N0YXRpYyBpbmxpbmUgaW50CityZWFkU2NyZWVuUm93cyAoaW50IHJvdywgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBTY3JlZW5DaGFyYWN0ZXIgKmJ1ZmZlcikgeworICByZXR1cm4gcmVhZFNjcmVlbigwLCByb3csIHdpZHRoLCBoZWlnaHQsIGJ1ZmZlcik7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50CityZWFkU2NyZWVuUm93IChpbnQgcm93LCBpbnQgd2lkdGgsIFNjcmVlbkNoYXJhY3RlciAqYnVmZmVyKSB7CisgIHJldHVybiByZWFkU2NyZWVuUm93cyhyb3csIHdpZHRoLCAxLCBidWZmZXIpOworfQorCisvKiBSb3V0aW5lcyB3aGljaCBhcHBseSB0byB0aGUgcm91dGluZyBzY3JlZW4uCisgKiBBbiBleHRyYSBgdGhyZWFkJyBmb3IgdGhlIGN1cnNvciByb3V0aW5nIHN1YnByb2Nlc3MuCisgKiBUaGlzIGlzIG5lZWRlZCBiZWNhdXNlIHRoZSBmb3JrZWQgc3VicHJvY2VzcyBzaGFyZXMgaXRzIHBhcmVudCdzCisgKiBmaWxlIGRlc2NyaXB0b3JzLiAgQSByZWFkU2NyZWVuIGVxdWl2YWxlbnQgaXMgbm90IG5lZWRlZC4KKyAqLworZXh0ZXJuIGludCBjb25zdHJ1Y3RSb3V0aW5nU2NyZWVuICh2b2lkKTsKK2V4dGVybiB2b2lkIGRlc3RydWN0Um91dGluZ1NjcmVlbiAodm9pZCk7CisKK2V4dGVybiBjb25zdCBTY3JlZW5Ecml2ZXIgKnNjcmVlbjsKK2V4dGVybiBjb25zdCBTY3JlZW5Ecml2ZXIgbm9TY3JlZW47CitleHRlcm4gdm9pZCBzZXROb1NjcmVlbiAodm9pZCk7CisKK2V4dGVybiBjb25zdCBjaGFyICpjb25zdCAqZ2V0U2NyZWVuUGFyYW1ldGVycyAoY29uc3QgU2NyZWVuRHJpdmVyICpkcml2ZXIpOworCitleHRlcm4gaW50IGhhdmVTY3JlZW5Ecml2ZXIgKGNvbnN0IGNoYXIgKmNvZGUpOworZXh0ZXJuIGNvbnN0IGNoYXIgKmdldERlZmF1bHRTY3JlZW5Ecml2ZXIgKHZvaWQpOworCitleHRlcm4gY29uc3QgU2NyZWVuRHJpdmVyICpsb2FkU2NyZWVuRHJpdmVyIChjb25zdCBjaGFyICpjb2RlLCB2b2lkICoqZHJpdmVyT2JqZWN0LCBjb25zdCBjaGFyICpkcml2ZXJEaXJlY3RvcnkpOworZXh0ZXJuIGludCBjb25zdHJ1Y3RTY3JlZW5Ecml2ZXIgKGNoYXIgKipwYXJhbWV0ZXJzKTsKK2V4dGVybiB2b2lkIGRlc3RydWN0U2NyZWVuRHJpdmVyICh2b2lkKTsKKworZXh0ZXJuIHZvaWQgaWRlbnRpZnlTY3JlZW5Ecml2ZXIgKGNvbnN0IFNjcmVlbkRyaXZlciAqZHJpdmVyLCBpbnQgZnVsbCk7CitleHRlcm4gdm9pZCBpZGVudGlmeVNjcmVlbkRyaXZlcnMgKGludCBmdWxsKTsKKworZXh0ZXJuIHZvaWQgc2V0Tm9TY3JlZW5Ecml2ZXJSZWFzb24gKGNvbnN0IGNoYXIgKnJlYXNvbik7CisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmIC8qIF9fY3BsdXNwbHVzICovCisKKyNlbmRpZiAvKiBCUkxUVFlfSU5DTFVERURfU0NSICovCmRpZmYgLS1naXQgYS9Qcm9ncmFtcy9zY3JfYmFzZS5jIGIvUHJvZ3JhbXMvc2NyX2Jhc2UuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yM2M3ZTRkCi0tLSAvZGV2L251bGwKKysrIGIvUHJvZ3JhbXMvc2NyX2Jhc2UuYwpAQCAtMCwwICsxLDMwMiBAQAorLyoKKyAqIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisgKiAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisgKgorICogQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKKyNpbmNsdWRlICJwcm9sb2d1ZS5oIgorCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworI2luY2x1ZGUgImxvZy5oIgorI2luY2x1ZGUgInNjci5oIgorI2luY2x1ZGUgInNjcl91dGlscy5oIgorI2luY2x1ZGUgInNjcl9iYXNlLmgiCisjaW5jbHVkZSAic2NyX2ludGVybmFsLmgiCisjaW5jbHVkZSAiYXNjaWkuaCIKKwordm9pZAorc2V0U2NyZWVuS2V5TW9kaWZpZXJzIChTY3JlZW5LZXkgKmtleSwgU2NyZWVuS2V5IHdoaWNoKSB7CisgIGlmICghaXNTcGVjaWFsS2V5KCprZXkpKSB7CisgICAgd2NoYXJfdCBjaGFyYWN0ZXIgPSAqa2V5ICYgU0NSX0tFWV9DSEFSX01BU0s7CisgICAgU2NyZWVuS2V5IG1vZGlmaWVycyA9ICprZXkgJiB+U0NSX0tFWV9DSEFSX01BU0s7CisKKyAgICBpZiAod2hpY2ggJiAoU0NSX0tFWV9VUFBFUiB8IFNDUl9LRVlfU0hJRlQpKSB7CisgICAgICBpZiAoIShtb2RpZmllcnMgJiAoU0NSX0tFWV9VUFBFUiB8IFNDUl9LRVlfU0hJRlQpKSkgeworICAgICAgICBpZiAoaXN3dXBwZXIoY2hhcmFjdGVyKSkgeworICAgICAgICAgIGNoYXJhY3RlciA9IHRvd2xvd2VyKGNoYXJhY3Rlcik7CisKKyAgICAgICAgICBpZiAod2hpY2ggJiBTQ1JfS0VZX1VQUEVSKSB7CisgICAgICAgICAgICBtb2RpZmllcnMgfD0gU0NSX0tFWV9VUFBFUjsKKyAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgbW9kaWZpZXJzIHw9IFNDUl9LRVlfU0hJRlQ7CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgIGlmIChtb2RpZmllcnMgJiAoU0NSX0tFWV9VUFBFUiB8IFNDUl9LRVlfU0hJRlQpKSB7CisgICAgICAgIGlmIChpc3dhbHBoYShjaGFyYWN0ZXIpKSB7CisgICAgICAgICAgY2hhcmFjdGVyID0gdG93dXBwZXIoY2hhcmFjdGVyKTsKKyAgICAgICAgICBtb2RpZmllcnMgJj0gflNDUl9LRVlfU0hJRlQ7CisgICAgICAgIH0KKworICAgICAgICBtb2RpZmllcnMgJj0gflNDUl9LRVlfVVBQRVI7CisgICAgICB9CisgICAgfQorCisgICAgaWYgKHdoaWNoICYgU0NSX0tFWV9DT05UUk9MKSB7CisgICAgICBpZiAoIShtb2RpZmllcnMgJiBTQ1JfS0VZX0NPTlRST0wpKSB7CisgICAgICAgIGlmIChjaGFyYWN0ZXIgPCAwWDIwKSB7CisgICAgICAgICAgY2hhcmFjdGVyIHw9IDBYNjA7CisgICAgICAgICAgbW9kaWZpZXJzIHw9IFNDUl9LRVlfQ09OVFJPTDsKKyAgICAgICAgfQorICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICBpZiAobW9kaWZpZXJzICYgU0NSX0tFWV9DT05UUk9MKSB7CisgICAgICAgIGlmIChjaGFyYWN0ZXIgPD0gMFg3RikgeworICAgICAgICAgIGlmICgoY2hhcmFjdGVyICYgMFg2RikgPT0gMFgyRikgeworICAgICAgICAgICAgY2hhcmFjdGVyIHw9IDBYNTA7CisgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGNoYXJhY3RlciAmPSAwWDFGOworICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIG1vZGlmaWVycyAmPSB+U0NSX0tFWV9DT05UUk9MOworICAgICAgfQorICAgIH0KKworICAgIFNjcmVlbktleSBuZXdLZXkgPSBjaGFyYWN0ZXIgfCBtb2RpZmllcnM7CisgICAgaWYgKG5ld0tleSAhPSAqa2V5KSB7CisgICAgICBsb2dNZXNzYWdlKExPR19DQVRFR09SWShTQ1JFRU5fRFJJVkVSKSwgInRyYW5zZm9ybWVkIGtleTogMFglMDRYIC0+IDBYJTA0WCIsICprZXksIG5ld0tleSk7CisgICAgICAqa2V5ID0gbmV3S2V5OworICAgIH0KKyAgfQorfQorCit2b2lkCittYXBTY3JlZW5LZXkgKFNjcmVlbktleSAqa2V5KSB7CisgIHN3aXRjaCAoKmtleSAmIFNDUl9LRVlfQ0hBUl9NQVNLKSB7CisgICAgY2FzZSAnXG4nOgorICAgIGNhc2UgJ1xyJzogICAqa2V5ID0gU0NSX0tFWV9FTlRFUjsgICAgIGJyZWFrOworICAgIGNhc2UgJ1x0JzogICAqa2V5ID0gU0NSX0tFWV9UQUI7ICAgICAgIGJyZWFrOworICAgIGNhc2UgJ1xiJzogICAqa2V5ID0gU0NSX0tFWV9CQUNLU1BBQ0U7IGJyZWFrOworICAgIGNhc2UgQVNDSUlfRVNDOiAqa2V5ID0gU0NSX0tFWV9FU0NBUEU7ICAgIGJyZWFrOworICB9Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyIHRleHRfQmFzZVNjcmVlbltdID0gIiAiOworCitzdGF0aWMgaW50CitjdXJyZW50VmlydHVhbFRlcm1pbmFsX0Jhc2VTY3JlZW4gKHZvaWQpIHsKKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK3NlbGVjdFZpcnR1YWxUZXJtaW5hbF9CYXNlU2NyZWVuIChpbnQgdnQpIHsKKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK3N3aXRjaFZpcnR1YWxUZXJtaW5hbF9CYXNlU2NyZWVuIChpbnQgdnQpIHsKKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK25leHRWaXJ0dWFsVGVybWluYWxfQmFzZVNjcmVlbiAodm9pZCkgeworICByZXR1cm4gY3VycmVudFNjcmVlbi0+c3dpdGNoVmlydHVhbFRlcm1pbmFsKGN1cnJlbnRTY3JlZW4tPmN1cnJlbnRWaXJ0dWFsVGVybWluYWwoKSArIDEpOworfQorCitzdGF0aWMgaW50CitwcmV2aW91c1ZpcnR1YWxUZXJtaW5hbF9CYXNlU2NyZWVuICh2b2lkKSB7CisgIHJldHVybiBjdXJyZW50U2NyZWVuLT5zd2l0Y2hWaXJ0dWFsVGVybWluYWwoY3VycmVudFNjcmVlbi0+Y3VycmVudFZpcnR1YWxUZXJtaW5hbCgpIC0gMSk7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICoKK2dldFRpdGxlX0Jhc2VTY3JlZW4gKHZvaWQpIHsKKyAgcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyB2b2lkCitvbkZvcmVncm91bmRfQmFzZVNjcmVlbiAodm9pZCkgeworfQorCitzdGF0aWMgdm9pZAorb25CYWNrZ3JvdW5kX0Jhc2VTY3JlZW4gKHZvaWQpIHsKK30KKworc3RhdGljIGludAorcG9sbF9CYXNlU2NyZWVuICh2b2lkKSB7CisgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50CityZWZyZXNoX0Jhc2VTY3JlZW4gKHZvaWQpIHsKKyAgcmV0dXJuIDE7Cit9CisKK3N0YXRpYyB2b2lkCitkZXNjcmliZV9CYXNlU2NyZWVuIChTY3JlZW5EZXNjcmlwdGlvbiAqZGVzY3JpcHRpb24pIHsKKyAgZGVzY3JpcHRpb24tPnJvd3MgPSAxOworICBkZXNjcmlwdGlvbi0+Y29scyA9IHN0cmxlbih0ZXh0X0Jhc2VTY3JlZW4pOworICBkZXNjcmlwdGlvbi0+cG9zeCA9IDA7CisgIGRlc2NyaXB0aW9uLT5wb3N5ID0gMDsKKyAgZGVzY3JpcHRpb24tPm51bWJlciA9IGN1cnJlbnRWaXJ0dWFsVGVybWluYWxfQmFzZVNjcmVlbigpOworfQorCitzdGF0aWMgaW50CityZWFkQ2hhcmFjdGVyc19CYXNlU2NyZWVuIChjb25zdCBTY3JlZW5Cb3ggKmJveCwgU2NyZWVuQ2hhcmFjdGVyICpidWZmZXIpIHsKKyAgU2NyZWVuRGVzY3JpcHRpb24gZGVzY3JpcHRpb247CisgIGRlc2NyaWJlX0Jhc2VTY3JlZW4oJmRlc2NyaXB0aW9uKTsKKyAgaWYgKCF2YWxpZGF0ZVNjcmVlbkJveChib3gsIGRlc2NyaXB0aW9uLmNvbHMsIGRlc2NyaXB0aW9uLnJvd3MpKSByZXR1cm4gMDsKKyAgc2V0U2NyZWVuTWVzc2FnZShib3gsIGJ1ZmZlciwgdGV4dF9CYXNlU2NyZWVuKTsKKyAgcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQKK2luc2VydEtleV9CYXNlU2NyZWVuIChTY3JlZW5LZXkga2V5KSB7CisgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50Cityb3V0ZUN1cnNvcl9CYXNlU2NyZWVuIChpbnQgY29sdW1uLCBpbnQgcm93LCBpbnQgc2NyZWVuKSB7CisgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50CitoaWdobGlnaHRSZWdpb25fQmFzZVNjcmVlbiAoaW50IGxlZnQsIGludCByaWdodCwgaW50IHRvcCwgaW50IGJvdHRvbSkgeworICByZXR1cm4gMDsKK30KKworaW50Cit1bmhpZ2hsaWdodFJlZ2lvbl9CYXNlU2NyZWVuICh2b2lkKSB7CisgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50CitnZXRQb2ludGVyX0Jhc2VTY3JlZW4gKGludCAqY29sdW1uLCBpbnQgKnJvdykgeworICByZXR1cm4gMDsKK30KKworc3RhdGljIGludAorY2xlYXJTZWxlY3Rpb25fQmFzZVNjcmVlbiAodm9pZCkgeworICByZXR1cm4gMDsKK30KKworc3RhdGljIGludAorc2V0U2VsZWN0aW9uX0Jhc2VTY3JlZW4gKGludCBzdGFydENvbHVtbiwgaW50IHN0YXJ0Um93LCBpbnQgZW5kQ29sdW1uLCBpbnQgZW5kUm93KSB7CisgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50CitoYW5kbGVDb21tYW5kX0Jhc2VTY3JlZW4gKGludCBjb21tYW5kKSB7CisgIHJldHVybiAwOworfQorCitzdGF0aWMgS2V5VGFibGVDb21tYW5kQ29udGV4dAorZ2V0Q29tbWFuZENvbnRleHRfQmFzZVNjcmVlbiAodm9pZCkgeworICByZXR1cm4gS1RCX0NUWF9ERUZBVUxUOworfQorCit2b2lkCitpbml0aWFsaXplQmFzZVNjcmVlbiAoQmFzZVNjcmVlbiAqYmFzZSkgeworICBiYXNlLT5nZXRUaXRsZSA9IGdldFRpdGxlX0Jhc2VTY3JlZW47CisgIGJhc2UtPm9uRm9yZWdyb3VuZCA9IG9uRm9yZWdyb3VuZF9CYXNlU2NyZWVuOworICBiYXNlLT5vbkJhY2tncm91bmQgPSBvbkJhY2tncm91bmRfQmFzZVNjcmVlbjsKKworICBiYXNlLT5wb2xsID0gcG9sbF9CYXNlU2NyZWVuOworICBiYXNlLT5yZWZyZXNoID0gcmVmcmVzaF9CYXNlU2NyZWVuOworICBiYXNlLT5kZXNjcmliZSA9IGRlc2NyaWJlX0Jhc2VTY3JlZW47CisKKyAgYmFzZS0+cmVhZENoYXJhY3RlcnMgPSByZWFkQ2hhcmFjdGVyc19CYXNlU2NyZWVuOworICBiYXNlLT5pbnNlcnRLZXkgPSBpbnNlcnRLZXlfQmFzZVNjcmVlbjsKKyAgYmFzZS0+cm91dGVDdXJzb3IgPSByb3V0ZUN1cnNvcl9CYXNlU2NyZWVuOworCisgIGJhc2UtPmhpZ2hsaWdodFJlZ2lvbiA9IGhpZ2hsaWdodFJlZ2lvbl9CYXNlU2NyZWVuOworICBiYXNlLT51bmhpZ2hsaWdodFJlZ2lvbiA9IHVuaGlnaGxpZ2h0UmVnaW9uX0Jhc2VTY3JlZW47CisgIGJhc2UtPmdldFBvaW50ZXIgPSBnZXRQb2ludGVyX0Jhc2VTY3JlZW47CisKKyAgYmFzZS0+Y2xlYXJTZWxlY3Rpb24gPSBjbGVhclNlbGVjdGlvbl9CYXNlU2NyZWVuOworICBiYXNlLT5zZXRTZWxlY3Rpb24gPSBzZXRTZWxlY3Rpb25fQmFzZVNjcmVlbjsKKworICBiYXNlLT5jdXJyZW50VmlydHVhbFRlcm1pbmFsID0gY3VycmVudFZpcnR1YWxUZXJtaW5hbF9CYXNlU2NyZWVuOworICBiYXNlLT5zZWxlY3RWaXJ0dWFsVGVybWluYWwgPSBzZWxlY3RWaXJ0dWFsVGVybWluYWxfQmFzZVNjcmVlbjsKKyAgYmFzZS0+c3dpdGNoVmlydHVhbFRlcm1pbmFsID0gc3dpdGNoVmlydHVhbFRlcm1pbmFsX0Jhc2VTY3JlZW47CisgIGJhc2UtPm5leHRWaXJ0dWFsVGVybWluYWwgPSBuZXh0VmlydHVhbFRlcm1pbmFsX0Jhc2VTY3JlZW47CisgIGJhc2UtPnByZXZpb3VzVmlydHVhbFRlcm1pbmFsID0gcHJldmlvdXNWaXJ0dWFsVGVybWluYWxfQmFzZVNjcmVlbjsKKworICBiYXNlLT5oYW5kbGVDb21tYW5kID0gaGFuZGxlQ29tbWFuZF9CYXNlU2NyZWVuOworICBiYXNlLT5nZXRDb21tYW5kQ29udGV4dCA9IGdldENvbW1hbmRDb250ZXh0X0Jhc2VTY3JlZW47Cit9CisKK3ZvaWQKK2Rlc2NyaWJlQmFzZVNjcmVlbiAoQmFzZVNjcmVlbiAqYmFzZSwgU2NyZWVuRGVzY3JpcHRpb24gKmRlc2NyaXB0aW9uKSB7CisgIGRlc2NyaXB0aW9uLT51bnJlYWRhYmxlID0gTlVMTDsKKyAgZGVzY3JpcHRpb24tPnF1YWxpdHkgPSBTQ1FfR09PRDsKKworICBkZXNjcmlwdGlvbi0+bnVtYmVyID0gMDsKKyAgZGVzY3JpcHRpb24tPmNvbHMgPSBkZXNjcmlwdGlvbi0+cm93cyA9IDE7CisgIGRlc2NyaXB0aW9uLT5wb3N4ID0gZGVzY3JpcHRpb24tPnBvc3kgPSAwOworCisgIGRlc2NyaXB0aW9uLT5oYXNDdXJzb3IgPSAxOworICBkZXNjcmlwdGlvbi0+aGFzU2VsZWN0aW9uID0gMDsKKworICBiYXNlLT5kZXNjcmliZShkZXNjcmlwdGlvbik7CisKKyAgaWYgKGRlc2NyaXB0aW9uLT51bnJlYWRhYmxlKSB7CisgICAgZGVzY3JpcHRpb24tPmhhc0N1cnNvciA9IDA7CisgIH0KK30KKworaW50Cit2YWxpZGF0ZVNjcmVlbkJveCAoY29uc3QgU2NyZWVuQm94ICpib3gsIGludCBjb2x1bW5zLCBpbnQgcm93cykgeworICBpZiAoKGJveC0+bGVmdCA+PSAwKSkKKyAgICBpZiAoKGJveC0+d2lkdGggPiAwKSkKKyAgICAgIGlmICgoKGJveC0+bGVmdCArIGJveC0+d2lkdGgpIDw9IGNvbHVtbnMpKQorICAgICAgICBpZiAoKGJveC0+dG9wID49IDApKQorICAgICAgICAgIGlmICgoYm94LT5oZWlnaHQgPiAwKSkKKyAgICAgICAgICAgIGlmICgoKGJveC0+dG9wICsgYm94LT5oZWlnaHQpIDw9IHJvd3MpKQorICAgICAgICAgICAgICByZXR1cm4gMTsKKworICBsb2dNZXNzYWdlKExPR19FUlIsICJpbnZhbGlkIHNjcmVlbiBhcmVhOiBjb2xzPSVkIGxlZnQ9JWQgd2lkdGg9JWQgcm93cz0lZCB0b3A9JWQgaGVpZ2h0PSVkIiwKKyAgICAgICAgICAgICBjb2x1bW5zLCBib3gtPmxlZnQsIGJveC0+d2lkdGgsCisgICAgICAgICAgICAgcm93cywgYm94LT50b3AsIGJveC0+aGVpZ2h0KTsKKyAgcmV0dXJuIDA7Cit9CisKK3ZvaWQKK3NldFNjcmVlbk1lc3NhZ2UgKGNvbnN0IFNjcmVlbkJveCAqYm94LCBTY3JlZW5DaGFyYWN0ZXIgKmJ1ZmZlciwgY29uc3QgY2hhciAqbWVzc2FnZSkgeworICBjb25zdCBTY3JlZW5DaGFyYWN0ZXIgKmVuZCA9IGJ1ZmZlciArIGJveC0+d2lkdGg7CisgIHVuc2lnbmVkIGludCBpbmRleCA9IDA7CisgIHNpemVfdCBsZW5ndGggPSBzdHJsZW4obWVzc2FnZSk7CisgIG1ic3RhdGVfdCBzdGF0ZTsKKworICBtZW1zZXQoJnN0YXRlLCAwLCBzaXplb2Yoc3RhdGUpKTsKKyAgY2xlYXJTY3JlZW5DaGFyYWN0ZXJzKGJ1ZmZlciwgKGJveC0+d2lkdGggKiBib3gtPmhlaWdodCkpOworCisgIHdoaWxlIChsZW5ndGgpIHsKKyAgICB3Y2hhcl90IHdjOworICAgIHNpemVfdCByZXN1bHQgPSBtYnJ0b3djKCZ3YywgbWVzc2FnZSwgbGVuZ3RoLCAmc3RhdGUpOworICAgIGlmICgoc3NpemVfdClyZXN1bHQgPCAxKSBicmVhazsKKworICAgIG1lc3NhZ2UgKz0gcmVzdWx0OworICAgIGxlbmd0aCAtPSByZXN1bHQ7CisKKyAgICBpZiAoaW5kZXgrKyA+PSBib3gtPmxlZnQpIHsKKyAgICAgIGlmIChidWZmZXIgPT0gZW5kKSBicmVhazsKKyAgICAgIChidWZmZXIrKyktPnRleHQgPSB3YzsKKyAgICB9CisgIH0KK30KZGlmZiAtLWdpdCBhL1Byb2dyYW1zL3Njcl9kcml2ZXIuYyBiL1Byb2dyYW1zL3Njcl9kcml2ZXIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41N2U2MDJiCi0tLSAvZGV2L251bGwKKysrIGIvUHJvZ3JhbXMvc2NyX2RyaXZlci5jCkBAIC0wLDAgKzEsMTUwIEBACisvKgorICogQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyAqICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyAqCisgKiBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorICoKKyAqIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyAqCisgKiBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisgKi8KKworI2luY2x1ZGUgInByb2xvZ3VlLmgiCisKKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworI2luY2x1ZGUgImRyaXZlcnMuaCIKKwordHlwZWRlZiBlbnVtIHsKKyAgUEFSTV9NRVNTQUdFCit9IFNjcmVlblBhcmFtZXRlcnM7CisjZGVmaW5lIFNDUlBBUk1TICJtZXNzYWdlIgorCisjZGVmaW5lIFNDUlNZTUJPTCBub1NjcmVlbgorI2RlZmluZSBEUklWRVJfTkFNRSBOb1NjcmVlbgorI2RlZmluZSBEUklWRVJfQ09ERSBubworI2RlZmluZSBEUklWRVJfQ09NTUVOVCAibm8gc2NyZWVuIHN1cHBvcnQiCisjZGVmaW5lIERSSVZFUl9WRVJTSU9OICIiCisjZGVmaW5lIERSSVZFUl9ERVZFTE9QRVJTICIiCisjaW5jbHVkZSAic2NyX2RyaXZlci5oIgorI2luY2x1ZGUgInNjci5hdXRvLmgiCisKK3N0YXRpYyBjb25zdCBjaGFyIGRlZmF1bHRNZXNzYWdlW10gPSBzdHJ0ZXh0KCJubyBzY3JlZW4iKTsKK3N0YXRpYyBjb25zdCBjaGFyICptZXNzYWdlUGFyYW1ldGVyID0gTlVMTDsKK3N0YXRpYyBjb25zdCBjaGFyICpub0RyaXZlclJlYXNvbiA9IE5VTEw7CitzdGF0aWMgY29uc3QgY2hhciAqc2NyZWVuTWVzc2FnZSA9IE5VTEw7CisKK3ZvaWQKK3NldE5vU2NyZWVuRHJpdmVyUmVhc29uIChjb25zdCBjaGFyICpyZWFzb24pIHsKKyAgbm9Ecml2ZXJSZWFzb24gPSByZWFzb247Cit9CisKK3N0YXRpYyBpbnQKK3Byb2Nlc3NQYXJhbWV0ZXJzX05vU2NyZWVuIChjaGFyICoqcGFyYW1ldGVycykgeworICB7CisgICAgY29uc3QgY2hhciAqbWVzc2FnZSA9IHBhcmFtZXRlcnNbUEFSTV9NRVNTQUdFXTsKKyAgICBpZiAobWVzc2FnZSAmJiAhKm1lc3NhZ2UpIG1lc3NhZ2UgPSBOVUxMOworICAgIG1lc3NhZ2VQYXJhbWV0ZXIgPSBtZXNzYWdlOworICB9CisKKyAgcmV0dXJuIDE7Cit9CisKK3N0YXRpYyB2b2lkCityZWxlYXNlUGFyYW1ldGVyc19Ob1NjcmVlbiAodm9pZCkgeworICBtZXNzYWdlUGFyYW1ldGVyID0gTlVMTDsKK30KKworc3RhdGljIGludAorY3VycmVudFZpcnR1YWxUZXJtaW5hbF9Ob1NjcmVlbiAodm9pZCkgeworICByZXR1cm4gU0NSX05PX1ZUOworfQorCitzdGF0aWMgdm9pZAorZGVzY3JpYmVfTm9TY3JlZW4gKFNjcmVlbkRlc2NyaXB0aW9uICpkZXNjcmlwdGlvbikgeworICB7CisgICAgY29uc3QgY2hhciAqbWVzc2FnZSA9IG5vRHJpdmVyUmVhc29uOworCisgICAgaWYgKCFtZXNzYWdlKSB7CisgICAgICBtZXNzYWdlID0gbWVzc2FnZVBhcmFtZXRlcjsKKyAgICAgIGlmICghbWVzc2FnZSkgbWVzc2FnZSA9IGRlZmF1bHRNZXNzYWdlOworICAgICAgbWVzc2FnZSA9IGdldHRleHQobWVzc2FnZSk7CisgICAgfQorCisgICAgc2NyZWVuTWVzc2FnZSA9IG1lc3NhZ2U7CisgIH0KKworICBkZXNjcmlwdGlvbi0+cm93cyA9IDE7CisgIGRlc2NyaXB0aW9uLT5jb2xzID0gc3RybGVuKHNjcmVlbk1lc3NhZ2UpOworICBkZXNjcmlwdGlvbi0+cG9zeCA9IDA7CisgIGRlc2NyaXB0aW9uLT5wb3N5ID0gMDsKKyAgZGVzY3JpcHRpb24tPm51bWJlciA9IGN1cnJlbnRWaXJ0dWFsVGVybWluYWxfTm9TY3JlZW4oKTsKK30KKworc3RhdGljIGludAorcmVhZENoYXJhY3RlcnNfTm9TY3JlZW4gKGNvbnN0IFNjcmVlbkJveCAqYm94LCBTY3JlZW5DaGFyYWN0ZXIgKmJ1ZmZlcikgeworICBTY3JlZW5EZXNjcmlwdGlvbiBkZXNjcmlwdGlvbjsKKyAgZGVzY3JpYmVfTm9TY3JlZW4oJmRlc2NyaXB0aW9uKTsKKyAgaWYgKCF2YWxpZGF0ZVNjcmVlbkJveChib3gsIGRlc2NyaXB0aW9uLmNvbHMsIGRlc2NyaXB0aW9uLnJvd3MpKSByZXR1cm4gMDsKKyAgc2V0U2NyZWVuTWVzc2FnZShib3gsIGJ1ZmZlciwgc2NyZWVuTWVzc2FnZSk7CisgIHJldHVybiAxOworfQorCitzdGF0aWMgaW50Citwb2xsX05vU2NyZWVuICh2b2lkKSB7CisgIHJldHVybiAwOworfQorCitzdGF0aWMgdm9pZAorc2NyX2luaXRpYWxpemUgKE1haW5TY3JlZW4gKm1haW4pIHsKKyAgaW5pdGlhbGl6ZU1haW5TY3JlZW4obWFpbik7CisKKyAgbWFpbi0+YmFzZS5wb2xsID0gcG9sbF9Ob1NjcmVlbjsKKyAgbWFpbi0+YmFzZS5kZXNjcmliZSA9IGRlc2NyaWJlX05vU2NyZWVuOworICBtYWluLT5iYXNlLnJlYWRDaGFyYWN0ZXJzID0gcmVhZENoYXJhY3RlcnNfTm9TY3JlZW47CisgIG1haW4tPmJhc2UuY3VycmVudFZpcnR1YWxUZXJtaW5hbCA9IGN1cnJlbnRWaXJ0dWFsVGVybWluYWxfTm9TY3JlZW47CisKKyAgbWFpbi0+cHJvY2Vzc1BhcmFtZXRlcnMgPSBwcm9jZXNzUGFyYW1ldGVyc19Ob1NjcmVlbjsKKyAgbWFpbi0+cmVsZWFzZVBhcmFtZXRlcnMgPSByZWxlYXNlUGFyYW1ldGVyc19Ob1NjcmVlbjsKK30KKworY29uc3QgU2NyZWVuRHJpdmVyICpzY3JlZW4gPSAmbm9TY3JlZW47CisKK2ludAoraGF2ZVNjcmVlbkRyaXZlciAoY29uc3QgY2hhciAqY29kZSkgeworICByZXR1cm4gaGF2ZURyaXZlcihjb2RlLCBTQ1JFRU5fRFJJVkVSX0NPREVTLCBkcml2ZXJUYWJsZSk7Cit9CisKK2NvbnN0IGNoYXIgKgorZ2V0RGVmYXVsdFNjcmVlbkRyaXZlciAodm9pZCkgeworICByZXR1cm4gZ2V0RGVmYXVsdERyaXZlcihkcml2ZXJUYWJsZSk7Cit9CisKK2NvbnN0IFNjcmVlbkRyaXZlciAqCitsb2FkU2NyZWVuRHJpdmVyIChjb25zdCBjaGFyICpjb2RlLCB2b2lkICoqZHJpdmVyT2JqZWN0LCBjb25zdCBjaGFyICpkcml2ZXJEaXJlY3RvcnkpIHsKKyAgcmV0dXJuIGxvYWREcml2ZXIoY29kZSwgZHJpdmVyT2JqZWN0LAorICAgICAgICAgICAgICAgICAgICBkcml2ZXJEaXJlY3RvcnksIGRyaXZlclRhYmxlLAorICAgICAgICAgICAgICAgICAgICAic2NyZWVuIiwgJ3gnLCAic2NyIiwKKyAgICAgICAgICAgICAgICAgICAgJm5vU2NyZWVuLCAmbm9TY3JlZW4uZGVmaW5pdGlvbik7Cit9CisKK3ZvaWQKK2lkZW50aWZ5U2NyZWVuRHJpdmVyIChjb25zdCBTY3JlZW5Ecml2ZXIgKmRyaXZlciwgaW50IGZ1bGwpIHsKKyAgaWRlbnRpZnlEcml2ZXIoIlNjcmVlbiIsICZkcml2ZXItPmRlZmluaXRpb24sIGZ1bGwpOworfQorCit2b2lkCitpZGVudGlmeVNjcmVlbkRyaXZlcnMgKGludCBmdWxsKSB7CisgIGNvbnN0IERyaXZlckVudHJ5ICplbnRyeSA9IGRyaXZlclRhYmxlOworICB3aGlsZSAoZW50cnktPmFkZHJlc3MpIHsKKyAgICBjb25zdCBTY3JlZW5Ecml2ZXIgKmRyaXZlciA9IGVudHJ5KystPmFkZHJlc3M7CisgICAgaWRlbnRpZnlTY3JlZW5Ecml2ZXIoZHJpdmVyLCBmdWxsKTsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvUHJvZ3JhbXMvc2NyX2VtdWxhdG9yLmMgYi9Qcm9ncmFtcy9zY3JfZW11bGF0b3IuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YWJkNmQ0Ci0tLSAvZGV2L251bGwKKysrIGIvUHJvZ3JhbXMvc2NyX2VtdWxhdG9yLmMKQEAgLTAsMCArMSwyODYgQEAKKy8qCisgKiBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorICogICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorICoKKyAqIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorICoKKyAqIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyAqLworCisjaW5jbHVkZSAicHJvbG9ndWUuaCIKKworI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisjaW5jbHVkZSA8c3lzL21zZy5oPgorI2luY2x1ZGUgPHN5cy9zaG0uaD4KKworI2luY2x1ZGUgImxvZy5oIgorI2luY2x1ZGUgInNjcl9lbXVsYXRvci5oIgorCitzdGF0aWMgY29uc3QgaW50IGlwY0NyZWF0aW9uRmxhZ3MgPSBJUENfQ1JFQVQgfCBJUENfRVhDTCB8IFNfSVJVU1IgfCBTX0lXVVNSOworCit2b2lkCittb3ZlU2NyZWVuQ2hhcmFjdGVycyAoU2NyZWVuU2VnbWVudENoYXJhY3RlciAqdG8sIGNvbnN0IFNjcmVlblNlZ21lbnRDaGFyYWN0ZXIgKmZyb20sIHNpemVfdCBjb3VudCkgeworICBpZiAoY291bnQgJiYgKGZyb20gIT0gdG8pKSB7CisgICAgbWVtbW92ZSh0bywgZnJvbSwgKGNvdW50ICogc2l6ZW9mKCpmcm9tKSkpOworICB9Cit9CisKK3ZvaWQKK3NldFNjcmVlbkNoYXJhY3RlcnMgKFNjcmVlblNlZ21lbnRDaGFyYWN0ZXIgKmZyb20sIGNvbnN0IFNjcmVlblNlZ21lbnRDaGFyYWN0ZXIgKnRvLCBjb25zdCBTY3JlZW5TZWdtZW50Q2hhcmFjdGVyICpjaGFyYWN0ZXIpIHsKKyAgd2hpbGUgKGZyb20gPCB0bykgKmZyb20rKyA9ICpjaGFyYWN0ZXI7Cit9CisKK3ZvaWQKK3Byb3BhZ2F0ZVNjcmVlbkNoYXJhY3RlciAoU2NyZWVuU2VnbWVudENoYXJhY3RlciAqZnJvbSwgY29uc3QgU2NyZWVuU2VnbWVudENoYXJhY3RlciAqdG8pIHsKKyAgc2V0U2NyZWVuQ2hhcmFjdGVycyhmcm9tKzEsIHRvLCBmcm9tKTsKK30KKwordm9pZAorZmlsbFNjcmVlblJvd3MgKFNjcmVlblNlZ21lbnRIZWFkZXIgKnNlZ21lbnQsIHVuc2lnbmVkIGludCByb3csIHVuc2lnbmVkIGludCBjb3VudCwgY29uc3QgU2NyZWVuU2VnbWVudENoYXJhY3RlciAqY2hhcmFjdGVyKSB7CisgIHdoaWxlIChjb3VudC0tKSB7CisgICAgY29uc3QgU2NyZWVuU2VnbWVudENoYXJhY3RlciAqdG87CisgICAgU2NyZWVuU2VnbWVudENoYXJhY3RlciAqZnJvbSA9IGdldFNjcmVlblJvdyhzZWdtZW50LCByb3crKywgJnRvKTsKKyAgICBzZXRTY3JlZW5DaGFyYWN0ZXJzKGZyb20sIHRvLCBjaGFyYWN0ZXIpOworICB9Cit9CisKK3ZvaWQKK21vdmVTY3JlZW5Sb3dzIChTY3JlZW5TZWdtZW50SGVhZGVyICpzZWdtZW50LCB1bnNpZ25lZCBpbnQgZnJvbSwgdW5zaWduZWQgaW50IHRvLCB1bnNpZ25lZCBpbnQgY291bnQpIHsKKyAgaWYgKGNvdW50ICYmIChmcm9tICE9IHRvKSkgeworICAgIG1vdmVTY3JlZW5DaGFyYWN0ZXJzKAorICAgICAgZ2V0U2NyZWVuUm93KHNlZ21lbnQsIHRvLCBOVUxMKSwKKyAgICAgIGdldFNjcmVlblJvdyhzZWdtZW50LCBmcm9tLCBOVUxMKSwKKyAgICAgIChjb3VudCAqIHNlZ21lbnQtPnNjcmVlbldpZHRoKQorICAgICk7CisgIH0KK30KKworI2RlZmluZSBTV0FQKGEsIGIpIGRvIHsgKGEpIF49IChiKTsgKGIpIF49IChhKTsgKGEpIF49IChiKTsgfSB3aGlsZSAoMCkKKworI3VuZGVmIEhBVkVfQlVJTFRJTl9DVFoKKyNpZmRlZiBfX2hhc19idWlsdGluCisjaWYgX19oYXNfYnVpbHRpbihfX2J1aWx0aW5fY3R6KQorI2RlZmluZSBIQVZFX0JVSUxUSU5fQ1RaCisjZW5kaWYgLyogX19oYXNfYnVpbHRpbihfX2J1aWx0aW5fY3R6KSAqLworI2VuZGlmIC8qIF9faGFzX2J1aWx0aW4gKi8KKworI2lmZGVmIEhBVkVfQlVJTFRJTl9DVFoKK3N0YXRpYyBpbmxpbmUgaW50CitjdHogKHVuc2lnbmVkIGludCB4KSB7CisgIHJldHVybiBfX2J1aWx0aW5fY3R6KHgpOworfQorCisjZWxzZSAvKiBIQVZFX0JVSUxUSU5fQ1RaICovCisjaW5jbHVkZSA8c3RyaW5nLmg+CisKK3N0YXRpYyBpbmxpbmUgaW50CitjdHogKHVuc2lnbmVkIGludCB4KSB7CisgIHJldHVybiBmZnMoeCkgLSAxOworfQorI2VuZGlmIC8qIEhBVkVfQlVJTFRJTl9DVFogKi8KKworLyogR3JlYXRlc3QgQ29tbW9uIERpdmlzb3IKKyAqCisgKiBnY2QoYSxiKSBjb21wdXRlcyB0aGUgZ3JlYXRlc3QgY29tbW9uIGRpdmlzb3Igb2YgYSBhbmQgYi4gSSBpbmNsdWRlZCAKKyAqIGEgaGlnaGx5IG9wdGltaXplZCBpbXBsZW1lbnRhdGlvbiBmb3Igc3BlZWQuIEJ1dCB0aGUgc2ltcGxlc3QgCisgKiBpbXBsZW1lbnRhdGlvbiB3b3VsZCBsb29rIGxpa2U6CisgKgorICogdW5zaWduZWQgbG9uZyBnY2QodW5zaWduZWQgbG9uZyBhLCB1bnNpZ25lZCBsb25nIGIpIHsKKyAqICAgaWYgKGIgPT0gMCkgcmV0dXJuIGE7CisgKiAgIHJldHVybiBnY2QoYiwgYSAlIGIpOworICogfQorICovCitzdGF0aWMgdW5zaWduZWQgaW50CitnY2QgKHVuc2lnbmVkIGludCBhLCB1bnNpZ25lZCBpbnQgYikgeworICB1bnNpZ25lZCBpbnQgciA9IGEgfCBiOworICBpZiAoIWEgfHwgIWIpIHJldHVybiByOworCisgIGIgPj49IGN0eihiKTsKKyAgaWYgKGIgPT0gMSkgcmV0dXJuIHIgJiAtcjsKKworICB3aGlsZSAoMSkgeworICAgIGEgPj49IGN0eihhKTsKKyAgICBpZiAoYSA9PSAxKSByZXR1cm4gciAmIC1yOworICAgIGlmIChhID09IGIpIHJldHVybiBhIDw8IGN0eihyKTsKKworICAgIGlmIChhIDwgYikgU1dBUChhLCBiKTsKKyAgICBhIC09IGI7CisgIH0KK30KKworLyogU2Nyb2xsaW5nIHRoZSBSb3cgQXJyYXkKKyAqCisgKiBUaGUgaWRlYSBpcyB0byBoYXZlIGxpbmVzIGluZGV4ZWQgaW50byBhbiBhcnJheS4gVGhlbiwgYSBzY3JlZW4gc2Nyb2xsIAorICogY2FuIGJlIGFjaGlldmVkIGJ5IHBlcmZvcm1pbmcgYW4gYXJyYXkgcm90YXRpb24uIFRvIHNjcm9sbCBvbmUgbGluZSAKKyAqIHVwLCB0aGUgYXJyYXkgaXMgcm90YXRlZCBsZWZ0IGJ5IG9uZSBwb3NpdGlvbiBhbmQgd2hhdCB1c2VkIHRvIGJlIHRoZSAKKyAqIHRvcCByb3cgYmVjb21lcyB0aGUgYm90dG9tIHJvdyBhbmQgZ2V0cyBjbGVhcmVkLiBUbyBzY3JvbGwgb25lIGxpbmUgCisgKiBkb3duLCB0aGUgYXJyYXkgaXMgcm90YXRlZCBsZWZ0IGJ5IG4tMSBwb3NpdGlvbnMgaW5zdGVhZCwgYW5kIHRoZSBib3R0b20gCisgKiByb3cgYmVjb21lcyB0aGUgdG9wIHJvdy4gQW5kIHRoaXMgd29ya3MgdGhlIHNhbWUgcmVnYXJkbGVzcyBvZiB0aGUgCisgKiBudW1iZXIgb2YgbGluZXMgdG8gc2Nyb2xsLgorICoKKyAqIFRoZSBhcnJheSByb3RhdGlvbiBhbGdvcml0aG0gdXNlZCBoZXJlIGlzIGNvbXBsZXhpdHkgTyhuKSBpbiBleGVjdXRpb24gCisgKiBhbmQgTygxKSBpbiBtZW1vcnkgdXNhZ2UsIG4gYmVpbmcgdGhlIGFycmF5IHNpemUuIFRoZSBzY3JvbGwgYW1vdW50IAorICogZG9lc24ndCBhZmZlY3QgY29tcGxleGl0eS4KKyAqCisgKiBTZWUgaHR0cHM6Ly93d3cuZ2Vla3Nmb3JnZWVrcy5vcmcvYXJyYXktcm90YXRpb24vIGZvciBhbGdvcml0aG1pYyAKKyAqIGRldGFpbHMuCisgKi8KK3ZvaWQKK3Njcm9sbFNjcmVlblJvd3MgKFNjcmVlblNlZ21lbnRIZWFkZXIgKnNlZ21lbnQsIHVuc2lnbmVkIGludCB0b3AsIHVuc2lnbmVkIGludCBzaXplLCB1bnNpZ25lZCBpbnQgY291bnQsIGludCBkb3duKSB7CisgIGlmIChoYXZlU2NyZWVuUm93QXJyYXkoc2VnbWVudCkpIHsKKyAgICB1bnNpZ25lZCBpbnQgZGVsdGEgPSBkb3duPyAoc2l6ZSAtIGNvdW50KTogY291bnQ7CisKKyAgICBmb3IgKHVuc2lnbmVkIGludCBpPTA7IGk8Z2NkKGRlbHRhLCBzaXplKTsgaSs9MSkgeworICAgICAgU2NyZWVuU2VnbWVudFJvdyByb3cgPSBnZXRTY3JlZW5Sb3dBcnJheShzZWdtZW50KVt0b3AgKyBpXTsKKyAgICAgIHVuc2lnbmVkIGludCBqID0gaTsKKworICAgICAgd2hpbGUgKDEpIHsKKyAgICAgICAgdW5zaWduZWQgaW50IGsgPSBqICsgZGVsdGE7CisgICAgICAgIGlmIChrID49IHNpemUpIGsgLT0gc2l6ZTsKKyAgICAgICAgaWYgKGsgPT0gaSkgYnJlYWs7CisKKyAgICAgICAgZ2V0U2NyZWVuUm93QXJyYXkoc2VnbWVudClbdG9wICsgal0gPSBnZXRTY3JlZW5Sb3dBcnJheShzZWdtZW50KVt0b3AgKyBrXTsKKyAgICAgICAgaiA9IGs7CisgICAgICB9CisKKyAgICAgIGdldFNjcmVlblJvd0FycmF5KHNlZ21lbnQpW3RvcCArIGpdID0gcm93OworICAgIH0KKyAgfSBlbHNlIGlmIChkb3duKSB7CisgICAgbW92ZVNjcmVlblJvd3Moc2VnbWVudCwgdG9wLCAodG9wICsgY291bnQpLCAoc2l6ZSAtIGNvdW50KSk7CisgIH0gZWxzZSB7CisgICAgbW92ZVNjcmVlblJvd3Moc2VnbWVudCwgKHRvcCArIGNvdW50KSwgdG9wLCAoc2l6ZSAtIGNvdW50KSk7CisgIH0KK30KKworaW50CitkZXN0cm95U2NyZWVuU2VnbWVudCAoaW50IGlkZW50aWZpZXIpIHsKKyAgaWYgKHNobWN0bChpZGVudGlmaWVyLCBJUENfUk1JRCwgTlVMTCkgIT0gLTEpIHJldHVybiAxOworICBsb2dTeXN0ZW1FcnJvcigic2htY3RsW0lQQ19STUlEXSIpOworICByZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQKK2luaXRpYWxpemVTY3JlZW5DaGFyYWN0ZXJzIChTY3JlZW5TZWdtZW50Q2hhcmFjdGVyICpmcm9tLCBjb25zdCBTY3JlZW5TZWdtZW50Q2hhcmFjdGVyICp0bykgeworICBjb25zdCBTY3JlZW5TZWdtZW50Q2hhcmFjdGVyIGluaXRpYWxpemVyID0geworICAgIC50ZXh0ID0gJyAnLAorICAgIC5mb3JlZ3JvdW5kID0gU0NSRUVOX1NFR01FTlRfQ09MT1JfV0hJVEUsCisgICAgLmJhY2tncm91bmQgPSBTQ1JFRU5fU0VHTUVOVF9DT0xPUl9CTEFDSywKKyAgICAuYWxwaGEgPSBVSU5UOF9NQVgsCisgIH07CisKKyAgc2V0U2NyZWVuQ2hhcmFjdGVycyhmcm9tLCB0bywgJmluaXRpYWxpemVyKTsKK30KKworU2NyZWVuU2VnbWVudEhlYWRlciAqCitjcmVhdGVTY3JlZW5TZWdtZW50IChpbnQgKmlkZW50aWZpZXIsIGtleV90IGtleSwgaW50IGNvbHVtbnMsIGludCByb3dzLCBpbnQgZW5hYmxlUm93QXJyYXkpIHsKKyAgc2l6ZV90IHJvd3NTaXplID0gZW5hYmxlUm93QXJyYXk/IChzaXplb2YoU2NyZWVuU2VnbWVudFJvdykgKiByb3dzKTogMDsKKyAgc2l6ZV90IGNoYXJhY3RlcnNTaXplID0gc2l6ZW9mKFNjcmVlblNlZ21lbnRDaGFyYWN0ZXIpICogcm93cyAqIGNvbHVtbnM7CisKKyAgc2l6ZV90IHNlZ21lbnRTaXplID0gc2l6ZW9mKFNjcmVlblNlZ21lbnRIZWFkZXIpICsgcm93c1NpemUgKyBjaGFyYWN0ZXJzU2l6ZTsKKyAgaW50IHNlZ21lbnRJZGVudGlmaWVyOworCisgIGlmIChnZXRTY3JlZW5TZWdtZW50KCZzZWdtZW50SWRlbnRpZmllciwga2V5KSkgeworICAgIGRlc3Ryb3lTY3JlZW5TZWdtZW50KHNlZ21lbnRJZGVudGlmaWVyKTsKKyAgfQorCisgIGlmICgoc2VnbWVudElkZW50aWZpZXIgPSBzaG1nZXQoa2V5LCBzZWdtZW50U2l6ZSwgaXBjQ3JlYXRpb25GbGFncykpICE9IC0xKSB7CisgICAgU2NyZWVuU2VnbWVudEhlYWRlciAqc2VnbWVudCA9IGF0dGFjaFNjcmVlblNlZ21lbnQoc2VnbWVudElkZW50aWZpZXIpOworCisgICAgaWYgKHNlZ21lbnQpIHsKKyAgICAgIHVpbnQzMl90IG5leHRPZmZzZXQgPSAwOworCisgICAgICBzZWdtZW50LT5zZWdtZW50U2l6ZSA9IHNlZ21lbnRTaXplOworICAgICAgc2VnbWVudC0+aGVhZGVyU2l6ZSA9IHNpemVvZigqc2VnbWVudCk7CisgICAgICBuZXh0T2Zmc2V0ICs9IHNlZ21lbnQtPmhlYWRlclNpemU7CisKKyAgICAgIHNlZ21lbnQtPnNjcmVlbkhlaWdodCA9IHJvd3M7CisgICAgICBzZWdtZW50LT5zY3JlZW5XaWR0aCA9IGNvbHVtbnM7CisKKyAgICAgIHNlZ21lbnQtPmN1cnNvclJvdyA9IDA7CisgICAgICBzZWdtZW50LT5jdXJzb3JDb2x1bW4gPSAwOworCisgICAgICBzZWdtZW50LT5zY3JlZW5OdW1iZXIgPSAwOworICAgICAgc2VnbWVudC0+Y29tbW9uRmxhZ3MgPSAwOworICAgICAgc2VnbWVudC0+cHJpdmF0ZUZsYWdzID0gMDsKKworICAgICAgaWYgKHJvd3NTaXplKSB7CisgICAgICAgIHNlZ21lbnQtPnJvd1NpemUgPSBzaXplb2YoU2NyZWVuU2VnbWVudFJvdyk7CisgICAgICAgIHNlZ21lbnQtPnJvd3NPZmZzZXQgPSBuZXh0T2Zmc2V0OworICAgICAgICBuZXh0T2Zmc2V0ICs9IHJvd3NTaXplOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgc2VnbWVudC0+cm93U2l6ZSA9IDA7CisgICAgICAgIHNlZ21lbnQtPnJvd3NPZmZzZXQgPSAwOworICAgICAgfQorCisgICAgICBzZWdtZW50LT5jaGFyYWN0ZXJTaXplID0gc2l6ZW9mKFNjcmVlblNlZ21lbnRDaGFyYWN0ZXIpOworICAgICAgc2VnbWVudC0+Y2hhcmFjdGVyc09mZnNldCA9IG5leHRPZmZzZXQ7CisgICAgICBuZXh0T2Zmc2V0ICs9IGNoYXJhY3RlcnNTaXplOworCisgICAgICBpZiAoaGF2ZVNjcmVlblJvd0FycmF5KHNlZ21lbnQpKSB7CisgICAgICAgIC8qIFJvd3MgYXJlIGluaXRpYWxseSBzZXF1ZW50aWFsLiAqLworCisgICAgICAgIFNjcmVlblNlZ21lbnRSb3cgKnJvdyA9IGdldFNjcmVlblJvd0FycmF5KHNlZ21lbnQpOworICAgICAgICBTY3JlZW5TZWdtZW50Um93ICplbmQgPSByb3cgKyByb3dzOworCisgICAgICAgIHVpbnQzMl90IG9mZnNldCA9IHNlZ21lbnQtPmNoYXJhY3RlcnNPZmZzZXQ7CisgICAgICAgIHVpbnQzMl90IGluY3JlbWVudCA9IGdldFNjcmVlblJvd1dpZHRoKHNlZ21lbnQpOworCisgICAgICAgIHdoaWxlIChyb3cgPCBlbmQpIHsKKyAgICAgICAgICByb3ctPmNoYXJhY3RlcnNPZmZzZXQgPSBvZmZzZXQ7CisgICAgICAgICAgb2Zmc2V0ICs9IGluY3JlbWVudDsKKyAgICAgICAgICByb3cgKz0gMTsKKyAgICAgICAgfQorICAgICAgfQorCisgICAgICB7CisgICAgICAgIGNvbnN0IFNjcmVlblNlZ21lbnRDaGFyYWN0ZXIgKnRvOworICAgICAgICBTY3JlZW5TZWdtZW50Q2hhcmFjdGVyICpmcm9tID0gZ2V0U2NyZWVuQ2hhcmFjdGVyQXJyYXkoc2VnbWVudCwgJnRvKTsKKyAgICAgICAgaW5pdGlhbGl6ZVNjcmVlbkNoYXJhY3RlcnMoZnJvbSwgdG8pOworICAgICAgfQorCisgICAgICBpZiAoaWRlbnRpZmllcikgKmlkZW50aWZpZXIgPSBzZWdtZW50SWRlbnRpZmllcjsKKyAgICAgIHJldHVybiBzZWdtZW50OworICAgIH0KKworICAgIGRlc3Ryb3lTY3JlZW5TZWdtZW50KHNlZ21lbnRJZGVudGlmaWVyKTsKKyAgfSBlbHNlIHsKKyAgICBsb2dTeXN0ZW1FcnJvcigic2htZ2V0Iik7CisgIH0KKworICByZXR1cm4gTlVMTDsKK30KKworaW50CitkZXN0cm95TWVzc2FnZVF1ZXVlIChpbnQgcXVldWUpIHsKKyAgaWYgKG1zZ2N0bChxdWV1ZSwgSVBDX1JNSUQsIE5VTEwpICE9IC0xKSByZXR1cm4gMTsKKyAgbG9nU3lzdGVtRXJyb3IoIm1zZ2N0bFtJUENfUk1JRF0iKTsKKyAgcmV0dXJuIDA7Cit9CisKK2ludAorY3JlYXRlTWVzc2FnZVF1ZXVlIChpbnQgKnF1ZXVlLCBrZXlfdCBrZXkpIHsKKyAgaW50IHE7CisKKyAgaWYgKGdldE1lc3NhZ2VRdWV1ZSgmcSwga2V5KSkgeworICAgIGRlc3Ryb3lNZXNzYWdlUXVldWUocSk7CisgIH0KKworICBpZiAoKHEgPSBtc2dnZXQoa2V5LCBpcGNDcmVhdGlvbkZsYWdzKSkgIT0gLTEpIHsKKyAgICBpZiAocXVldWUpICpxdWV1ZSA9IHE7CisgICAgcmV0dXJuIDE7CisgIH0gZWxzZSB7CisgICAgbG9nU3lzdGVtRXJyb3IoIm1zZ2dldCIpOworICB9CisKKyAgcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9Qcm9ncmFtcy9zY3JfZnJvemVuLmMgYi9Qcm9ncmFtcy9zY3JfZnJvemVuLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTU2ODU5NgotLS0gL2Rldi9udWxsCisrKyBiL1Byb2dyYW1zL3Njcl9mcm96ZW4uYwpAQCAtMCwwICsxLDEyOSBAQAorLyoKKyAqIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisgKiAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisgKgorICogQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKKyNpbmNsdWRlICJwcm9sb2d1ZS5oIgorCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworI2luY2x1ZGUgImxvZy5oIgorI2luY2x1ZGUgInBhcmFtZXRlcnMuaCIKKyNpbmNsdWRlICJhc3luY19oYW5kbGUuaCIKKyNpbmNsdWRlICJhc3luY19hbGFybS5oIgorI2luY2x1ZGUgImFsZXJ0LmgiCisjaW5jbHVkZSAic2NyLmgiCisjaW5jbHVkZSAic2NyX2Zyb3plbi5oIgorCitzdGF0aWMgU2NyZWVuRGVzY3JpcHRpb24gc2NyZWVuRGVzY3JpcHRpb247CitzdGF0aWMgU2NyZWVuQ2hhcmFjdGVyICpzY3JlZW5DaGFyYWN0ZXJzOworCitzdGF0aWMgaW50IHN0YXJ0RnJlZXplUmVtaW5kZXJBbGFybSAodm9pZCk7CitzdGF0aWMgQXN5bmNIYW5kbGUgZnJlZXplUmVtaW5kZXJBbGFybSA9IE5VTEw7CisKK0FTWU5DX0FMQVJNX0NBTExCQUNLKGhhbmRsZUZyZWV6ZVJlbWluZGVyQWxhcm0pIHsKKyAgYXN5bmNEaXNjYXJkSGFuZGxlKGZyZWV6ZVJlbWluZGVyQWxhcm0pOworICBmcmVlemVSZW1pbmRlckFsYXJtID0gTlVMTDsKKworICBhbGVydChBTEVSVF9GUkVFWkVfUkVNSU5ERVIpOworICBzdGFydEZyZWV6ZVJlbWluZGVyQWxhcm0oKTsKK30KKworc3RhdGljIGludAorc3RhcnRGcmVlemVSZW1pbmRlckFsYXJtICh2b2lkKSB7CisgIGlmIChmcmVlemVSZW1pbmRlckFsYXJtKSByZXR1cm4gMTsKKyAgcmV0dXJuIGFzeW5jTmV3UmVsYXRpdmVBbGFybSgmZnJlZXplUmVtaW5kZXJBbGFybSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTQ1JFRU5fRlJFRVpFX1JFTUlOREVSX0lOVEVSVkFMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZUZyZWV6ZVJlbWluZGVyQWxhcm0sIE5VTEwpOworfQorCitzdGF0aWMgdm9pZAorc3RvcEZyZWV6ZVJlbWluZGVyQWxhcm0gKHZvaWQpIHsKKyAgaWYgKGZyZWV6ZVJlbWluZGVyQWxhcm0pIHsKKyAgICBhc3luY0NhbmNlbFJlcXVlc3QoZnJlZXplUmVtaW5kZXJBbGFybSk7CisgICAgZnJlZXplUmVtaW5kZXJBbGFybSA9IE5VTEw7CisgIH0KK30KKworc3RhdGljIGludAorY29uc3RydWN0X0Zyb3plblNjcmVlbiAoQmFzZVNjcmVlbiAqc291cmNlKSB7CisgIGRlc2NyaWJlQmFzZVNjcmVlbihzb3VyY2UsICZzY3JlZW5EZXNjcmlwdGlvbik7CisKKyAgaWYgKChzY3JlZW5DaGFyYWN0ZXJzID0gY2FsbG9jKHNjcmVlbkRlc2NyaXB0aW9uLnJvd3Mqc2NyZWVuRGVzY3JpcHRpb24uY29scywgc2l6ZW9mKCpzY3JlZW5DaGFyYWN0ZXJzKSkpKSB7CisgICAgY29uc3QgU2NyZWVuQm94IGJveCA9IHsKKyAgICAgIC5sZWZ0PTAsIC53aWR0aD1zY3JlZW5EZXNjcmlwdGlvbi5jb2xzLAorICAgICAgLnRvcD0wLCAuaGVpZ2h0PXNjcmVlbkRlc2NyaXB0aW9uLnJvd3MKKyAgICB9OworCisgICAgaWYgKHNvdXJjZS0+cmVhZENoYXJhY3RlcnMoJmJveCwgc2NyZWVuQ2hhcmFjdGVycykpIHsKKyAgICAgIHN0YXJ0RnJlZXplUmVtaW5kZXJBbGFybSgpOworICAgICAgcmV0dXJuIDE7CisgICAgfQorCisgICAgZnJlZShzY3JlZW5DaGFyYWN0ZXJzKTsKKyAgICBzY3JlZW5DaGFyYWN0ZXJzID0gTlVMTDsKKyAgfSBlbHNlIHsKKyAgICBsb2dNYWxsb2NFcnJvcigpOworICB9CisKKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkCitkZXN0cnVjdF9Gcm96ZW5TY3JlZW4gKHZvaWQpIHsKKyAgc3RvcEZyZWV6ZVJlbWluZGVyQWxhcm0oKTsKKworICBpZiAoc2NyZWVuQ2hhcmFjdGVycykgeworICAgIGZyZWUoc2NyZWVuQ2hhcmFjdGVycyk7CisgICAgc2NyZWVuQ2hhcmFjdGVycyA9IE5VTEw7CisgIH0KK30KKworc3RhdGljIHZvaWQKK2Rlc2NyaWJlX0Zyb3plblNjcmVlbiAoU2NyZWVuRGVzY3JpcHRpb24gKmRlc2NyaXB0aW9uKSB7CisgICpkZXNjcmlwdGlvbiA9IHNjcmVlbkRlc2NyaXB0aW9uOworfQorCitzdGF0aWMgaW50CityZWFkQ2hhcmFjdGVyc19Gcm96ZW5TY3JlZW4gKGNvbnN0IFNjcmVlbkJveCAqYm94LCBTY3JlZW5DaGFyYWN0ZXIgKmJ1ZmZlcikgeworICBpZiAodmFsaWRhdGVTY3JlZW5Cb3goYm94LCBzY3JlZW5EZXNjcmlwdGlvbi5jb2xzLCBzY3JlZW5EZXNjcmlwdGlvbi5yb3dzKSkgeworICAgIGludCByb3c7CisgICAgZm9yIChyb3c9MDsgcm93PGJveC0+aGVpZ2h0OyByb3crKykgeworICAgICAgbWVtY3B5KCZidWZmZXJbcm93ICogYm94LT53aWR0aF0sCisgICAgICAgICAgICAgJnNjcmVlbkNoYXJhY3RlcnNbKChib3gtPnRvcCArIHJvdykgKiBzY3JlZW5EZXNjcmlwdGlvbi5jb2xzKSArIGJveC0+bGVmdF0sCisgICAgICAgICAgICAgYm94LT53aWR0aCAqIHNpemVvZigqc2NyZWVuQ2hhcmFjdGVycykpOworICAgIH0KKyAgICByZXR1cm4gMTsKKyAgfQorICByZXR1cm4gMDsKK30KKworc3RhdGljIGludAorY3VycmVudFZpcnR1YWxUZXJtaW5hbF9Gcm96ZW5TY3JlZW4gKHZvaWQpIHsKKyAgcmV0dXJuIHNjcmVlbkRlc2NyaXB0aW9uLm51bWJlcjsKK30KKwordm9pZAoraW5pdGlhbGl6ZUZyb3plblNjcmVlbiAoRnJvemVuU2NyZWVuICpmcm96ZW4pIHsKKyAgaW5pdGlhbGl6ZUJhc2VTY3JlZW4oJmZyb3plbi0+YmFzZSk7CisgIGZyb3plbi0+YmFzZS5kZXNjcmliZSA9IGRlc2NyaWJlX0Zyb3plblNjcmVlbjsKKyAgZnJvemVuLT5iYXNlLnJlYWRDaGFyYWN0ZXJzID0gcmVhZENoYXJhY3RlcnNfRnJvemVuU2NyZWVuOworICBmcm96ZW4tPmJhc2UuY3VycmVudFZpcnR1YWxUZXJtaW5hbCA9IGN1cnJlbnRWaXJ0dWFsVGVybWluYWxfRnJvemVuU2NyZWVuOworICBmcm96ZW4tPmNvbnN0cnVjdCA9IGNvbnN0cnVjdF9Gcm96ZW5TY3JlZW47CisgIGZyb3plbi0+ZGVzdHJ1Y3QgPSBkZXN0cnVjdF9Gcm96ZW5TY3JlZW47CisgIHNjcmVlbkNoYXJhY3RlcnMgPSBOVUxMOworfQpkaWZmIC0tZ2l0IGEvUHJvZ3JhbXMvc2NyX2Zyb3plbi5oIGIvUHJvZ3JhbXMvc2NyX2Zyb3plbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJlMzU1YWQKLS0tIC9kZXYvbnVsbAorKysgYi9Qcm9ncmFtcy9zY3JfZnJvemVuLmgKQEAgLTAsMCArMSw0MCBAQAorLyoKKyAqIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisgKiAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisgKgorICogQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKKyNpZm5kZWYgQlJMVFRZX0lOQ0xVREVEX1NDUl9GUk9aRU4KKyNkZWZpbmUgQlJMVFRZX0lOQ0xVREVEX1NDUl9GUk9aRU4KKworI2luY2x1ZGUgInNjcl9iYXNlLmgiCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYgLyogX19jcGx1c3BsdXMgKi8KKwordHlwZWRlZiBzdHJ1Y3QgeworICBCYXNlU2NyZWVuIGJhc2U7CisgIGludCAoKmNvbnN0cnVjdCkgKEJhc2VTY3JlZW4gKik7CQkvKiBjYWxsZWQgZXZlcnkgdGltZSB0aGUgc2NyZWVuIGlzIGZyb3plbiAqLworICB2b2lkICgqZGVzdHJ1Y3QpICh2b2lkKTsJCS8qIGNhbGxlZCB0byBkaXNjYXJkIGZyb3plbiBzY3JlZW4gaW1hZ2UgKi8KK30gRnJvemVuU2NyZWVuOworCitleHRlcm4gdm9pZCBpbml0aWFsaXplRnJvemVuU2NyZWVuIChGcm96ZW5TY3JlZW4gKmZyb3plbik7CisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmIC8qIF9fY3BsdXNwbHVzICovCisKKyNlbmRpZiAvKiBCUkxUVFlfSU5DTFVERURfU0NSX0ZST1pFTiAqLwpkaWZmIC0tZ2l0IGEvUHJvZ3JhbXMvc2NyX2dwbS5jIGIvUHJvZ3JhbXMvc2NyX2dwbS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY3MWM5ZjEKLS0tIC9kZXYvbnVsbAorKysgYi9Qcm9ncmFtcy9zY3JfZ3BtLmMKQEAgLTAsMCArMSwxNzQgQEAKKy8qCisgKiBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorICogICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorICoKKyAqIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorICoKKyAqIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyAqLworCisjaW5jbHVkZSAicHJvbG9ndWUuaCIKKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKworI2luY2x1ZGUgImxvZy5oIgorI2luY2x1ZGUgInBhcmFtZXRlcnMuaCIKKyNpbmNsdWRlICJkZXZpY2UuaCIKKyNpbmNsdWRlICJnZXRfc2VsZWN0LmgiCisjaW5jbHVkZSAiYXN5bmNfYWxhcm0uaCIKKyNpbmNsdWRlICJzY3IuaCIKKyNpbmNsdWRlICJzY3JfZ3BtLmgiCisKKyNpZmRlZiBIQVZFX0xJQkdQTQorI2luY2x1ZGUgPGdwbS5oPgorZXh0ZXJuIGludCBncG1fdHJpZWQ7CisKK3R5cGVkZWYgZW51bSB7CisgIEdDU19DTE9TRUQsCisgIEdDU19GQUlMRUQsCisgIEdDU19PUEVORUQKK30gR3BtQ29ubmVjdGlvblN0YXRlOworCitzdGF0aWMgaW50IGdwbUNvbm5lY3Rpb25TdGF0ZSA9IEdDU19DTE9TRUQ7CisKK0FTWU5DX0FMQVJNX0NBTExCQUNLKGdwbVJlc2V0Q29ubmVjdGlvbikgeworICBncG1Db25uZWN0aW9uU3RhdGUgPSBHQ1NfQ0xPU0VEOworfQorCitzdGF0aWMgaW50CitncG1PcGVuQ29ubmVjdGlvbiAodm9pZCkgeworICBzd2l0Y2ggKGdwbUNvbm5lY3Rpb25TdGF0ZSkgeworICAgIGNhc2UgIEdDU19DTE9TRUQ6IHsKKyAgICAgIEdwbV9Db25uZWN0IG9wdGlvbnMgPSB7CisgICAgICAgIC5ldmVudE1hc2sgPSBHUE1fTU9WRSwKKyAgICAgICAgLmRlZmF1bHRNYXNrID0gfjAsCisgICAgICAgIC5taW5Nb2QgPSAwLAorICAgICAgICAubWF4TW9kID0gfjAKKyAgICAgIH07CisKKyAgICAgIGdwbV90cmllZCA9IDA7CisgICAgICBncG1femVyb2Jhc2VkID0gMTsKKworICAgICAgaWYgKEdwbV9PcGVuKCZvcHRpb25zLCAtMSkgPT0gLTEpIHsKKyAgICAgICAgbG9nTWVzc2FnZShMT0dfREVCVUcsICJHUE0gb3BlbiBlcnJvcjogJXMiLCBzdHJlcnJvcihlcnJubykpOworICAgICAgICBhc3luY05ld1JlbGF0aXZlQWxhcm0oTlVMTCwgR1BNX0NPTk5FQ1RJT05fUkVTRVRfREVMQVksIGdwbVJlc2V0Q29ubmVjdGlvbiwgTlVMTCk7CisgICAgICAgIGdwbUNvbm5lY3Rpb25TdGF0ZSA9IEdDU19GQUlMRUQ7CisgICAgICAgIHJldHVybiAwOworICAgICAgfQorCisgICAgICBsb2dNZXNzYWdlKExPR19ERUJVRywgIkdQTSBvcGVuZWQ6IGZkPSVkIGNvbj0lZCIsIGdwbV9mZCwgZ3BtX2NvbnNvbGVmZCk7CisgICAgICBncG1Db25uZWN0aW9uU3RhdGUgPSBHQ1NfT1BFTkVEOworICAgIH0KKworICAgIGNhc2UgR0NTX09QRU5FRDoKKyAgICAgIHJldHVybiAxOworICB9CisKKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkCitncG1DbG9zZUNvbm5lY3Rpb24gKGludCBhbHJlYWR5Q2xvc2VkKSB7CisgIGlmIChncG1Db25uZWN0aW9uU3RhdGUgPT0gR0NTX09QRU5FRCkgeworICAgIGlmICghYWxyZWFkeUNsb3NlZCkgR3BtX0Nsb3NlKCk7CisgICAgbG9nTWVzc2FnZShMT0dfREVCVUcsICJHUE0gY2xvc2VkIik7CisgIH0KKyAgZ3BtQ29ubmVjdGlvblN0YXRlID0gR0NTX0NMT1NFRDsKK30KKyNlbmRpZiAvKiBIQVZFX0xJQkdQTSAqLworCitzdGF0aWMgaW50CitncG1TY3JlZW5IYW5kbGVyX2hpZ2hsaWdodFJlZ2lvbiAoaW50IGxlZnQsIGludCByaWdodCwgaW50IHRvcCwgaW50IGJvdHRvbSkgeworI2lmZGVmIEhBVkVfTElCR1BNCisgIEZJTEUgKmNvbnNvbGUgPSBnZXRDb25zb2xlKCk7CisKKyAgaWYgKGNvbnNvbGUpIHsKKyAgICBpZiAoZ3BtT3BlbkNvbm5lY3Rpb24oKSAmJiAoZ3BtX2ZkID49IDApKSB7CisgICAgICBpZiAoR3BtX0RyYXdQb2ludGVyKGxlZnQsIHRvcCwgZmlsZW5vKGNvbnNvbGUpKSAhPSAtMSkgcmV0dXJuIDE7CisKKyAgICAgIGlmIChlcnJubyAhPSBFSU5WQUwpIHsKKyAgICAgICAgbG9nTWVzc2FnZShMT0dfREVCVUcsICJHcG1fRHJhd1BvaW50ZXIgZXJyb3I6ICVzIiwgc3RyZXJyb3IoZXJybm8pKTsKKyAgICAgICAgZ3BtQ2xvc2VDb25uZWN0aW9uKDApOworICAgICAgICByZXR1cm4gMDsKKyAgICAgIH0KKyAgICB9CisgIH0KKyNlbmRpZiAvKiBIQVZFX0xJQkdQTSAqLworCisgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50CitncG1TY3JlZW5IYW5kbGVyX2dldFBvaW50ZXIgKGludCAqY29sdW1uLCBpbnQgKnJvdykgeworICBpbnQgb2sgPSAwOworCisjaWZkZWYgSEFWRV9MSUJHUE0KKyAgaWYgKGdwbU9wZW5Db25uZWN0aW9uKCkpIHsKKyAgICBpZiAoZ3BtX2ZkID49IDApIHsKKyAgICAgIGludCBlcnJvciA9IDA7CisKKyAgICAgIHdoaWxlICgxKSB7CisgICAgICAgIGZkX3NldCBtYXNrOworICAgICAgICBzdHJ1Y3QgdGltZXZhbCB0aW1lb3V0OworICAgICAgICBHcG1fRXZlbnQgZXZlbnQ7CisgICAgICAgIGludCByZXN1bHQ7CisKKyAgICAgICAgRkRfWkVSTygmbWFzayk7CisgICAgICAgIEZEX1NFVChncG1fZmQsICZtYXNrKTsKKyAgICAgICAgbWVtc2V0KCZ0aW1lb3V0LCAwLCBzaXplb2YodGltZW91dCkpOworCisgICAgICAgIGlmICgocmVzdWx0ID0gc2VsZWN0KGdwbV9mZCsxLCAmbWFzaywgTlVMTCwgTlVMTCwgJnRpbWVvdXQpKSA9PSAwKSBicmVhazsKKyAgICAgICAgZXJyb3IgPSAxOworCisgICAgICAgIGlmIChyZXN1bHQgPT0gLTEpIHsKKyAgICAgICAgICBpZiAoZXJybm8gPT0gRUlOVFIpIGNvbnRpbnVlOworICAgICAgICAgIGxvZ1N5c3RlbUVycm9yKCJzZWxlY3QiKTsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGlmICghRkRfSVNTRVQoZ3BtX2ZkLCAmbWFzaykpIHsKKyAgICAgICAgICBsb2dNZXNzYWdlKExPR19ERUJVRywgIkdQTSBmaWxlIGRlc2NyaXB0b3Igbm90IHNldDogJWQiLCBncG1fZmQpOworICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgaWYgKChyZXN1bHQgPSBHcG1fR2V0RXZlbnQoJmV2ZW50KSkgPT0gLTEpIHsKKyAgICAgICAgICBpZiAoZXJybm8gPT0gRUlOVFIpIGNvbnRpbnVlOworICAgICAgICAgIGxvZ1N5c3RlbUVycm9yKCJHcG1fR2V0RXZlbnQiKTsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGVycm9yID0gMDsKKyAgICAgICAgaWYgKHJlc3VsdCA9PSAwKSB7CisgICAgICAgICAgZ3BtQ2xvc2VDb25uZWN0aW9uKDEpOworICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgKmNvbHVtbiA9IGV2ZW50Lng7CisgICAgICAgICpyb3cgPSBldmVudC55OworICAgICAgICBvayA9IDE7CisgICAgICB9CisKKyAgICAgIGlmIChlcnJvcikgZ3BtQ2xvc2VDb25uZWN0aW9uKDApOworICAgIH0KKyAgfQorI2VuZGlmIC8qIEhBVkVfTElCR1BNICovCisKKyAgcmV0dXJuIG9rOworfQorCit2b2lkCitncG1JbmNsdWRlU2NyZWVuSGFuZGxlcnMgKE1haW5TY3JlZW4gKm1haW4pIHsKKyAgbWFpbi0+YmFzZS5oaWdobGlnaHRSZWdpb24gPSBncG1TY3JlZW5IYW5kbGVyX2hpZ2hsaWdodFJlZ2lvbjsKKyAgbWFpbi0+YmFzZS5nZXRQb2ludGVyID0gZ3BtU2NyZWVuSGFuZGxlcl9nZXRQb2ludGVyOworfQpkaWZmIC0tZ2l0IGEvUHJvZ3JhbXMvc2NyX2hlbHAuYyBiL1Byb2dyYW1zL3Njcl9oZWxwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODYzMmQwNQotLS0gL2Rldi9udWxsCisrKyBiL1Byb2dyYW1zL3Njcl9oZWxwLmMKQEAgLTAsMCArMSwzNDggQEAKKy8qCisgKiBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorICogICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorICoKKyAqIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorICoKKyAqIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyAqLworCisjaW5jbHVkZSAicHJvbG9ndWUuaCIKKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKworI2luY2x1ZGUgImxvZy5oIgorI2luY2x1ZGUgInN0cmZtdC5oIgorI2luY2x1ZGUgInNjci5oIgorI2luY2x1ZGUgInNjcl9oZWxwLmgiCisKK3R5cGVkZWYgc3RydWN0IHsKKyAgd2NoYXJfdCAqY2hhcmFjdGVyczsKKyAgc2l6ZV90IGxlbmd0aDsKK30gSGVscExpbmVFbnRyeTsKKwordHlwZWRlZiBzdHJ1Y3QgeworICBIZWxwTGluZUVudHJ5ICpsaW5lVGFibGU7CisgIHVuc2lnbmVkIGludCBsaW5lTGltaXQ7CisKKyAgdW5zaWduZWQgaW50IGxpbmVDb3VudDsKKyAgc2l6ZV90IGxpbmVMZW5ndGg7CisKKyAgdW5zaWduZWQgY2hhciBjdXJzb3JSb3c7CisgIHVuc2lnbmVkIGNoYXIgY3Vyc29yQ29sdW1uOworfSBIZWxwUGFnZUVudHJ5OworCitzdGF0aWMgSGVscFBhZ2VFbnRyeSAqcGFnZVRhYmxlOworc3RhdGljIHVuc2lnbmVkIGludCBwYWdlTGltaXQ7CitzdGF0aWMgdW5zaWduZWQgaW50IHBhZ2VDb3VudDsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgcGFnZUluZGV4OworCitzdGF0aWMgdm9pZAoraW5pdGlhbGl6ZVBhZ2VUYWJsZSAodm9pZCkgeworICBwYWdlVGFibGUgPSBOVUxMOworICBwYWdlTGltaXQgPSAwOworICBwYWdlQ291bnQgPSAwOworICBwYWdlSW5kZXggPSAwOworfQorCitzdGF0aWMgdm9pZAoraW5pdGlhbGl6ZVBhZ2UgKEhlbHBQYWdlRW50cnkgKnBhZ2UpIHsKKyAgcGFnZS0+bGluZVRhYmxlID0gTlVMTDsKKyAgcGFnZS0+bGluZUxpbWl0ID0gMDsKKworICBwYWdlLT5saW5lQ291bnQgPSAwOworICBwYWdlLT5saW5lTGVuZ3RoID0gMTsKKworICBwYWdlLT5jdXJzb3JSb3cgPSAwOworICBwYWdlLT5jdXJzb3JDb2x1bW4gPSAwOworfQorCitzdGF0aWMgdW5zaWduZWQgaW50CithZGRQYWdlICh2b2lkKSB7CisgIGlmIChwYWdlQ291bnQgPT0gcGFnZUxpbWl0KSB7CisgICAgdW5zaWduZWQgaW50IG5ld0xpbWl0ID0gcGFnZUxpbWl0ICsgMTsKKyAgICBIZWxwUGFnZUVudHJ5ICpuZXdUYWJsZSA9IHJlYWxsb2MocGFnZVRhYmxlLCBBUlJBWV9TSVpFKG5ld1RhYmxlLCBuZXdMaW1pdCkpOworCisgICAgaWYgKCFuZXdUYWJsZSkgeworICAgICAgbG9nTWFsbG9jRXJyb3IoKTsKKyAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIHBhZ2VUYWJsZSA9IG5ld1RhYmxlOworICAgIHBhZ2VMaW1pdCA9IG5ld0xpbWl0OworICB9CisKKyAgeworICAgIEhlbHBQYWdlRW50cnkgKnBhZ2UgPSAmcGFnZVRhYmxlW3BhZ2VDb3VudF07CisgICAgaW5pdGlhbGl6ZVBhZ2UocGFnZSk7CisgIH0KKworICByZXR1cm4gcGFnZUNvdW50ICs9IDE7Cit9CisKK3N0YXRpYyB2b2lkCitjbGVhclBhZ2UgKEhlbHBQYWdlRW50cnkgKnBhZ2UpIHsKKyAgaWYgKHBhZ2UtPmxpbmVUYWJsZSkgeworICAgIHdoaWxlIChwYWdlLT5saW5lQ291bnQpIHsKKyAgICAgIEhlbHBMaW5lRW50cnkgKmxpbmUgPSAmcGFnZS0+bGluZVRhYmxlWy0tcGFnZS0+bGluZUNvdW50XTsKKworICAgICAgaWYgKGxpbmUtPmNoYXJhY3RlcnMpIGZyZWUobGluZS0+Y2hhcmFjdGVycyk7CisgICAgfQorCisgICAgZnJlZShwYWdlLT5saW5lVGFibGUpOworICAgIGluaXRpYWxpemVQYWdlKHBhZ2UpOworICB9Cit9CisKK3N0YXRpYyBpbnQKK2FkZExpbmUgKEhlbHBQYWdlRW50cnkgKnBhZ2UsIGNvbnN0IHdjaGFyX3QgKmNoYXJhY3RlcnMpIHsKKyAgaWYgKHBhZ2UtPmxpbmVDb3VudCA9PSBwYWdlLT5saW5lTGltaXQpIHsKKyAgICB1bnNpZ25lZCBpbnQgbmV3TGltaXQgPSBwYWdlLT5saW5lTGltaXQ/IHBhZ2UtPmxpbmVMaW1pdDw8MTogMFg0MDsKKyAgICBIZWxwTGluZUVudHJ5ICpuZXdUYWJsZSA9IHJlYWxsb2MocGFnZS0+bGluZVRhYmxlLCBBUlJBWV9TSVpFKG5ld1RhYmxlLCBuZXdMaW1pdCkpOworCisgICAgaWYgKCFuZXdUYWJsZSkgeworICAgICAgbG9nTWFsbG9jRXJyb3IoKTsKKyAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIHBhZ2UtPmxpbmVUYWJsZSA9IG5ld1RhYmxlOworICAgIHBhZ2UtPmxpbmVMaW1pdCA9IG5ld0xpbWl0OworICB9CisKKyAgeworICAgIEhlbHBMaW5lRW50cnkgKmxpbmUgPSAmcGFnZS0+bGluZVRhYmxlW3BhZ2UtPmxpbmVDb3VudF07CisgICAgc2l6ZV90IGxlbmd0aCA9IHdjc2xlbihjaGFyYWN0ZXJzKTsKKyAgICBpZiAoKGxpbmUtPmxlbmd0aCA9IGxlbmd0aCkgPiBwYWdlLT5saW5lTGVuZ3RoKSBwYWdlLT5saW5lTGVuZ3RoID0gbGVuZ3RoOworCisgICAgaWYgKCEobGluZS0+Y2hhcmFjdGVycyA9IG1hbGxvYyhBUlJBWV9TSVpFKGxpbmUtPmNoYXJhY3RlcnMsIGxlbmd0aCkpKSkgeworICAgICAgbG9nTWFsbG9jRXJyb3IoKTsKKyAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIHdtZW1jcHkobGluZS0+Y2hhcmFjdGVycywgY2hhcmFjdGVycywgbGVuZ3RoKTsKKyAgfQorCisgIHBhZ2UtPmxpbmVDb3VudCArPSAxOworICByZXR1cm4gMTsKK30KKworc3RhdGljIEhlbHBQYWdlRW50cnkgKgorZ2V0UGFnZSAodm9pZCkgeworICBpZiAocGFnZUluZGV4IDwgcGFnZUNvdW50KSByZXR1cm4gJnBhZ2VUYWJsZVtwYWdlSW5kZXhdOworICBsb2dNZXNzYWdlKExPR19XQVJOSU5HLCAiaGVscCBwYWdlIGluZGV4IG91dCBvZiByYW5nZTogJXUgPj0gJXUiLCBwYWdlSW5kZXgsIHBhZ2VDb3VudCk7CisgIHJldHVybiBOVUxMOworfQorCitzdGF0aWMgaW50Citjb25zdHJ1Y3RfSGVscFNjcmVlbiAodm9pZCkgeworICBpbml0aWFsaXplUGFnZVRhYmxlKCk7CisgIHJldHVybiAxOworfQorCitzdGF0aWMgdm9pZAorZGVzdHJ1Y3RfSGVscFNjcmVlbiAodm9pZCkgeworICBpZiAocGFnZVRhYmxlKSB7CisgICAgd2hpbGUgKHBhZ2VDb3VudCkgY2xlYXJQYWdlKCZwYWdlVGFibGVbLS1wYWdlQ291bnRdKTsKKyAgICBmcmVlKHBhZ2VUYWJsZSk7CisgIH0KKworICBpbml0aWFsaXplUGFnZVRhYmxlKCk7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQKK2FkZFBhZ2VfSGVscFNjcmVlbiAodm9pZCkgeworICByZXR1cm4gYWRkUGFnZSgpOworfQorCitzdGF0aWMgdW5zaWduZWQgaW50CitnZXRQYWdlQ291bnRfSGVscFNjcmVlbiAodm9pZCkgeworICByZXR1cm4gcGFnZUNvdW50OworfQorCitzdGF0aWMgdW5zaWduZWQgaW50CitnZXRQYWdlTnVtYmVyX0hlbHBTY3JlZW4gKHZvaWQpIHsKKyAgcmV0dXJuIHBhZ2VJbmRleCArIDE7Cit9CisKK3N0YXRpYyBpbnQKK3NldFBhZ2VOdW1iZXJfSGVscFNjcmVlbiAodW5zaWduZWQgaW50IG51bWJlcikgeworICBpZiAoKG51bWJlciA8IDEpIHx8IChudW1iZXIgPiBwYWdlQ291bnQpKSByZXR1cm4gMDsKKyAgcGFnZUluZGV4ID0gbnVtYmVyIC0gMTsKKyAgcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQKK2NsZWFyUGFnZV9IZWxwU2NyZWVuICh2b2lkKSB7CisgIEhlbHBQYWdlRW50cnkgKnBhZ2UgPSBnZXRQYWdlKCk7CisKKyAgaWYgKCFwYWdlKSByZXR1cm4gMDsKKyAgY2xlYXJQYWdlKHBhZ2UpOworICByZXR1cm4gMTsKK30KKworc3RhdGljIGludAorYWRkTGluZV9IZWxwU2NyZWVuIChjb25zdCB3Y2hhcl90ICpjaGFyYWN0ZXJzKSB7CisgIEhlbHBQYWdlRW50cnkgKnBhZ2UgPSBnZXRQYWdlKCk7CisgIGlmICghcGFnZSkgcmV0dXJuIDA7CisgIHJldHVybiBhZGRMaW5lKHBhZ2UsIGNoYXJhY3RlcnMpOworfQorCitzdGF0aWMgdW5zaWduZWQgaW50IAorZ2V0TGluZUNvdW50X0hlbHBTY3JlZW4gKHZvaWQpIHsKKyAgSGVscFBhZ2VFbnRyeSAqcGFnZSA9IGdldFBhZ2UoKTsKKworICByZXR1cm4gcGFnZT8gcGFnZS0+bGluZUNvdW50OiAwOworfQorCitzdGF0aWMgaW50CitjdXJyZW50VmlydHVhbFRlcm1pbmFsX0hlbHBTY3JlZW4gKHZvaWQpIHsKKyAgcmV0dXJuIHVzZXJWaXJ0dWFsVGVybWluYWwocGFnZUluZGV4KTsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgKgorZ2V0VGl0bGVfSGVscFNjcmVlbiAodm9pZCkgeworICByZXR1cm4gZ2V0dGV4dCgiSGVscCBTY3JlZW4iKTsKK30KKworc3RhdGljIHZvaWQKK2Rlc2NyaWJlX0hlbHBTY3JlZW4gKFNjcmVlbkRlc2NyaXB0aW9uICpkZXNjcmlwdGlvbikgeworICBjb25zdCBIZWxwUGFnZUVudHJ5ICpwYWdlID0gZ2V0UGFnZSgpOworCisgIGlmIChwYWdlKSB7CisgICAgZGVzY3JpcHRpb24tPnBvc3ggPSBwYWdlLT5jdXJzb3JDb2x1bW47CisgICAgZGVzY3JpcHRpb24tPnBvc3kgPSBwYWdlLT5jdXJzb3JSb3c7CisgICAgZGVzY3JpcHRpb24tPmNvbHMgPSBwYWdlLT5saW5lTGVuZ3RoOworICAgIGRlc2NyaXB0aW9uLT5yb3dzID0gcGFnZS0+bGluZUNvdW50OworICAgIGRlc2NyaXB0aW9uLT5udW1iZXIgPSBjdXJyZW50VmlydHVhbFRlcm1pbmFsX0hlbHBTY3JlZW4oKTsKKyAgfSBlbHNlIHsKKyAgICBkZXNjcmlwdGlvbi0+dW5yZWFkYWJsZSA9IGdldHRleHQoImhlbHAgc2NyZWVuIG5vdCByZWFkYWJsZSIpOworICB9Cit9CisKK3N0YXRpYyBpbnQKK3JlYWRDaGFyYWN0ZXJzX0hlbHBTY3JlZW4gKGNvbnN0IFNjcmVlbkJveCAqYm94LCBTY3JlZW5DaGFyYWN0ZXIgKmJ1ZmZlcikgeworICBjb25zdCBIZWxwUGFnZUVudHJ5ICpwYWdlID0gZ2V0UGFnZSgpOworCisgIGlmIChwYWdlKSB7CisgICAgaWYgKHZhbGlkYXRlU2NyZWVuQm94KGJveCwgcGFnZS0+bGluZUxlbmd0aCwgcGFnZS0+bGluZUNvdW50KSkgeworICAgICAgU2NyZWVuQ2hhcmFjdGVyICpjaGFyYWN0ZXIgPSBidWZmZXI7CisgICAgICBpbnQgcm93OworCisgICAgICBmb3IgKHJvdz0wOyByb3c8Ym94LT5oZWlnaHQ7IHJvdys9MSkgeworICAgICAgICBjb25zdCBIZWxwTGluZUVudHJ5ICpsaW5lID0gJnBhZ2UtPmxpbmVUYWJsZVtib3gtPnRvcCArIHJvd107CisgICAgICAgIGludCBjb2x1bW47CisKKyAgICAgICAgZm9yIChjb2x1bW49MDsgY29sdW1uPGJveC0+d2lkdGg7IGNvbHVtbis9MSkgeworICAgICAgICAgIGludCBpbmRleCA9IGJveC0+bGVmdCArIGNvbHVtbjsKKworICAgICAgICAgIGlmIChpbmRleCA8IGxpbmUtPmxlbmd0aCkgeworICAgICAgICAgICAgY2hhcmFjdGVyLT50ZXh0ID0gbGluZS0+Y2hhcmFjdGVyc1tpbmRleF07CisgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGNoYXJhY3Rlci0+dGV4dCA9IFdDX0MoJyAnKTsKKyAgICAgICAgICB9CisKKyAgICAgICAgICBjaGFyYWN0ZXItPmF0dHJpYnV0ZXMgPSBTQ1JfQ09MT1VSX0RFRkFVTFQ7CisgICAgICAgICAgY2hhcmFjdGVyICs9IDE7CisgICAgICAgIH0KKyAgICAgIH0KKworICAgICAgcmV0dXJuIDE7CisgICAgfQorICB9CisKKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK2luc2VydEtleV9IZWxwU2NyZWVuIChTY3JlZW5LZXkga2V5KSB7CisgIEhlbHBQYWdlRW50cnkgKnBhZ2UgPSBnZXRQYWdlKCk7CisKKyAgaWYgKHBhZ2UpIHsKKyAgICBzd2l0Y2ggKGtleSkgeworICAgICAgY2FzZSBTQ1JfS0VZX0NVUlNPUl9VUDoKKyAgICAgICAgaWYgKHBhZ2UtPmN1cnNvclJvdyA+IDApIHsKKyAgICAgICAgICBwYWdlLT5jdXJzb3JSb3cgLT0gMTsKKyAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKworICAgICAgY2FzZSBTQ1JfS0VZX0NVUlNPUl9ET1dOOgorICAgICAgICBpZiAocGFnZS0+Y3Vyc29yUm93IDwgKHBhZ2UtPmxpbmVDb3VudCAtIDEpKSB7CisgICAgICAgICAgcGFnZS0+Y3Vyc29yUm93ICs9IDE7CisgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGNhc2UgU0NSX0tFWV9DVVJTT1JfTEVGVDoKKyAgICAgICAgaWYgKHBhZ2UtPmN1cnNvckNvbHVtbiA+IDApIHsKKyAgICAgICAgICBwYWdlLT5jdXJzb3JDb2x1bW4gLT0gMTsKKyAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKworICAgICAgY2FzZSBTQ1JfS0VZX0NVUlNPUl9SSUdIVDoKKyAgICAgICAgaWYgKHBhZ2UtPmN1cnNvckNvbHVtbiA8IChwYWdlLT5saW5lTGVuZ3RoIC0gMSkpIHsKKyAgICAgICAgICBwYWdlLT5jdXJzb3JDb2x1bW4gKz0gMTsKKyAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKworICAgICAgZGVmYXVsdDoKKyAgICAgICAgYnJlYWs7CisgICAgfQorICB9CisKKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK3JvdXRlQ3Vyc29yX0hlbHBTY3JlZW4gKGludCBjb2x1bW4sIGludCByb3csIGludCBzY3JlZW4pIHsKKyAgSGVscFBhZ2VFbnRyeSAqcGFnZSA9IGdldFBhZ2UoKTsKKyAgaWYgKCFwYWdlKSByZXR1cm4gMDsKKworICBpZiAocm93ICE9IC0xKSB7CisgICAgaWYgKChyb3cgPCAwKSB8fCAocm93ID49IHBhZ2UtPmxpbmVDb3VudCkpIHJldHVybiAwOworICAgIHBhZ2UtPmN1cnNvclJvdyA9IHJvdzsKKyAgfQorCisgIGlmIChjb2x1bW4gIT0gLTEpIHsKKyAgICBpZiAoKGNvbHVtbiA8IDApIHx8IChjb2x1bW4gPj0gcGFnZS0+bGluZUxlbmd0aCkpIHJldHVybiAwOworICAgIHBhZ2UtPmN1cnNvckNvbHVtbiA9IGNvbHVtbjsKKyAgfQorCisgIHJldHVybiAxOworfQorCit2b2lkCitpbml0aWFsaXplSGVscFNjcmVlbiAoSGVscFNjcmVlbiAqaGVscCkgeworICBpbml0aWFsaXplQmFzZVNjcmVlbigmaGVscC0+YmFzZSk7CisgIGhlbHAtPmJhc2UuY3VycmVudFZpcnR1YWxUZXJtaW5hbCA9IGN1cnJlbnRWaXJ0dWFsVGVybWluYWxfSGVscFNjcmVlbjsKKyAgaGVscC0+YmFzZS5nZXRUaXRsZSA9IGdldFRpdGxlX0hlbHBTY3JlZW47CisgIGhlbHAtPmJhc2UuZGVzY3JpYmUgPSBkZXNjcmliZV9IZWxwU2NyZWVuOworICBoZWxwLT5iYXNlLnJlYWRDaGFyYWN0ZXJzID0gcmVhZENoYXJhY3RlcnNfSGVscFNjcmVlbjsKKyAgaGVscC0+YmFzZS5pbnNlcnRLZXkgPSBpbnNlcnRLZXlfSGVscFNjcmVlbjsKKyAgaGVscC0+YmFzZS5yb3V0ZUN1cnNvciA9IHJvdXRlQ3Vyc29yX0hlbHBTY3JlZW47CisKKyAgaGVscC0+Y29uc3RydWN0ID0gY29uc3RydWN0X0hlbHBTY3JlZW47CisgIGhlbHAtPmRlc3RydWN0ID0gZGVzdHJ1Y3RfSGVscFNjcmVlbjsKKworICBoZWxwLT5hZGRQYWdlID0gYWRkUGFnZV9IZWxwU2NyZWVuOworICBoZWxwLT5nZXRQYWdlQ291bnQgPSBnZXRQYWdlQ291bnRfSGVscFNjcmVlbjsKKyAgaGVscC0+Z2V0UGFnZU51bWJlciA9IGdldFBhZ2VOdW1iZXJfSGVscFNjcmVlbjsKKyAgaGVscC0+c2V0UGFnZU51bWJlciA9IHNldFBhZ2VOdW1iZXJfSGVscFNjcmVlbjsKKworICBoZWxwLT5jbGVhclBhZ2UgPSBjbGVhclBhZ2VfSGVscFNjcmVlbjsKKyAgaGVscC0+YWRkTGluZSA9IGFkZExpbmVfSGVscFNjcmVlbjsKKyAgaGVscC0+Z2V0TGluZUNvdW50ID0gZ2V0TGluZUNvdW50X0hlbHBTY3JlZW47Cit9CmRpZmYgLS1naXQgYS9Qcm9ncmFtcy9zY3JfaGVscC5oIGIvUHJvZ3JhbXMvc2NyX2hlbHAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMzBiZTZjCi0tLSAvZGV2L251bGwKKysrIGIvUHJvZ3JhbXMvc2NyX2hlbHAuaApAQCAtMCwwICsxLDQ5IEBACisvKgorICogQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyAqICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyAqCisgKiBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorICoKKyAqIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyAqCisgKiBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisgKi8KKworI2lmbmRlZiBCUkxUVFlfSU5DTFVERURfU0NSX0hFTFAKKyNkZWZpbmUgQlJMVFRZX0lOQ0xVREVEX1NDUl9IRUxQCisKKyNpbmNsdWRlICJzY3JfYmFzZS5oIgorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmIC8qIF9fY3BsdXNwbHVzICovCisKK3R5cGVkZWYgc3RydWN0IHsKKyAgQmFzZVNjcmVlbiBiYXNlOworICBpbnQgKCpjb25zdHJ1Y3QpICh2b2lkKTsKKyAgdm9pZCAoKmRlc3RydWN0KSAodm9pZCk7CisKKyAgdW5zaWduZWQgaW50ICgqYWRkUGFnZSkgKHZvaWQpOworICB1bnNpZ25lZCBpbnQgKCpnZXRQYWdlQ291bnQpICh2b2lkKTsKKyAgdW5zaWduZWQgaW50ICgqZ2V0UGFnZU51bWJlcikgKHZvaWQpOworICBpbnQgKCpzZXRQYWdlTnVtYmVyKSAodW5zaWduZWQgaW50IG51bWJlcik7CisKKyAgaW50ICgqY2xlYXJQYWdlKSAodm9pZCk7CisgIGludCAoKmFkZExpbmUpIChjb25zdCB3Y2hhcl90ICpjaGFyYWN0ZXJzKTsKKyAgdW5zaWduZWQgaW50ICgqZ2V0TGluZUNvdW50KSAodm9pZCk7Cit9IEhlbHBTY3JlZW47CisKK2V4dGVybiB2b2lkIGluaXRpYWxpemVIZWxwU2NyZWVuIChIZWxwU2NyZWVuICpoZWxwKTsKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYgLyogX19jcGx1c3BsdXMgKi8KKworI2VuZGlmIC8qIEJSTFRUWV9JTkNMVURFRF9TQ1JfSEVMUCAqLwpkaWZmIC0tZ2l0IGEvUHJvZ3JhbXMvc2NyX2ludGVybmFsLmggYi9Qcm9ncmFtcy9zY3JfaW50ZXJuYWwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNDYxMDU4Ci0tLSAvZGV2L251bGwKKysrIGIvUHJvZ3JhbXMvc2NyX2ludGVybmFsLmgKQEAgLTAsMCArMSwzNSBAQAorLyoKKyAqIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisgKiAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisgKgorICogQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKKyNpZm5kZWYgQlJMVFRZX0lOQ0xVREVEX1NDUl9JTlRFUk5BTAorI2RlZmluZSBCUkxUVFlfSU5DTFVERURfU0NSX0lOVEVSTkFMCisKKyNpbmNsdWRlICJzY3JfbWFpbi5oIgorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmIC8qIF9fY3BsdXNwbHVzICovCisKK2V4dGVybiBNYWluU2NyZWVuIG1haW5TY3JlZW47CitleHRlcm4gQmFzZVNjcmVlbiAqY3VycmVudFNjcmVlbjsKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYgLyogX19jcGx1c3BsdXMgKi8KKworI2VuZGlmIC8qIEJSTFRUWV9JTkNMVURFRF9TQ1JfSU5URVJOQUwgKi8KZGlmZiAtLWdpdCBhL1Byb2dyYW1zL3Njcl9tYWluLmMgYi9Qcm9ncmFtcy9zY3JfbWFpbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU5YmFkYjkKLS0tIC9kZXYvbnVsbAorKysgYi9Qcm9ncmFtcy9zY3JfbWFpbi5jCkBAIC0wLDAgKzEsNzUgQEAKKy8qCisgKiBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorICogICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorICoKKyAqIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorICoKKyAqIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyAqLworCisjaW5jbHVkZSAicHJvbG9ndWUuaCIKKworI2luY2x1ZGUgPHN0ZGlvLmg+CisKKyNpbmNsdWRlICJwYXJhbWV0ZXJzLmgiCisjaW5jbHVkZSAidXBkYXRlLmgiCisjaW5jbHVkZSAic2NyLmgiCisjaW5jbHVkZSAic2NyX21haW4uaCIKKworc3RhdGljIGludAorcG9sbF9NYWluU2NyZWVuICh2b2lkKSB7CisgIHJldHVybiAxOworfQorCitzdGF0aWMgaW50Citwcm9jZXNzUGFyYW1ldGVyc19NYWluU2NyZWVuIChjaGFyICoqcGFyYW1ldGVycykgeworICByZXR1cm4gMTsKK30KKworc3RhdGljIHZvaWQKK3JlbGVhc2VQYXJhbWV0ZXJzX01haW5TY3JlZW4gKHZvaWQpIHsKK30KKworc3RhdGljIGludAorY29uc3RydWN0X01haW5TY3JlZW4gKHZvaWQpIHsKKyAgcmV0dXJuIDE7Cit9CisKK3N0YXRpYyB2b2lkCitkZXN0cnVjdF9NYWluU2NyZWVuICh2b2lkKSB7Cit9CisKK3N0YXRpYyBpbnQKK3VzZXJWaXJ0dWFsVGVybWluYWxfTWFpblNjcmVlbiAoaW50IG51bWJlcikgeworICByZXR1cm4gMSArIG51bWJlcjsKK30KKwordm9pZAoraW5pdGlhbGl6ZU1haW5TY3JlZW4gKE1haW5TY3JlZW4gKm1haW4pIHsKKyAgaW5pdGlhbGl6ZUJhc2VTY3JlZW4oJm1haW4tPmJhc2UpOworICBtYWluLT5iYXNlLnBvbGwgPSBwb2xsX01haW5TY3JlZW47CisKKyAgbWFpbi0+cHJvY2Vzc1BhcmFtZXRlcnMgPSBwcm9jZXNzUGFyYW1ldGVyc19NYWluU2NyZWVuOworICBtYWluLT5yZWxlYXNlUGFyYW1ldGVycyA9IHJlbGVhc2VQYXJhbWV0ZXJzX01haW5TY3JlZW47CisKKyAgbWFpbi0+Y29uc3RydWN0ID0gY29uc3RydWN0X01haW5TY3JlZW47CisgIG1haW4tPmRlc3RydWN0ID0gZGVzdHJ1Y3RfTWFpblNjcmVlbjsKKworICBtYWluLT51c2VyVmlydHVhbFRlcm1pbmFsID0gdXNlclZpcnR1YWxUZXJtaW5hbF9NYWluU2NyZWVuOworfQorCit2b2lkCittYWluU2NyZWVuVXBkYXRlZCAodm9pZCkgeworICBpZiAoaXNNYWluU2NyZWVuKCkpIHsKKyAgICBzY2hlZHVsZVVwZGF0ZUluKCJtYWluIHNjcmVlbiB1cGRhdGVkIiwgU0NSRUVOX1VQREFURV9TQ0hFRFVMRV9ERUxBWSk7CisgIH0KK30KZGlmZiAtLWdpdCBhL1Byb2dyYW1zL3Njcl9tZW51LmMgYi9Qcm9ncmFtcy9zY3JfbWVudS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRjNjgxMzYKLS0tIC9kZXYvbnVsbAorKysgYi9Qcm9ncmFtcy9zY3JfbWVudS5jCkBAIC0wLDAgKzEsNTA3IEBACisvKgorICogQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyAqICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyAqCisgKiBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorICoKKyAqIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyAqCisgKiBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisgKi8KKworI2luY2x1ZGUgInByb2xvZ3VlLmgiCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorCisjaW5jbHVkZSAicGFyYW1ldGVycy5oIgorI2luY2x1ZGUgImxvZy5oIgorI2luY2x1ZGUgInN0cmZtdC5oIgorI2luY2x1ZGUgInNjci5oIgorI2luY2x1ZGUgInNjcl9zcGVjaWFsLmgiCisjaW5jbHVkZSAic2NyX21lbnUuaCIKKyNpbmNsdWRlICJ1cGRhdGUuaCIKKyNpbmNsdWRlICJicmxfY21kcy5oIgorI2luY2x1ZGUgImNtZF9xdWV1ZS5oIgorI2luY2x1ZGUgImFsZXJ0LmgiCisjaW5jbHVkZSAidXRmOC5oIgorI2luY2x1ZGUgImNvcmUuaCIKKwordHlwZWRlZiBzdHJ1Y3QgeworICBNZW51SXRlbSAqaXRlbTsKKyAgc2l6ZV90IGxlbmd0aDsKKyAgc2l6ZV90IHNldHRpbmdJbmRlbnQ7CisgIHdjaGFyX3QgdGV4dFswXTsKK30gUmVuZGVyZWRNZW51SXRlbTsKKworc3RhdGljIE1lbnUgKnJvb3RNZW51ID0gTlVMTDsKKworc3RhdGljIGludCBzY3JlZW5VcGRhdGVkOworc3RhdGljIFJlbmRlcmVkTWVudUl0ZW0gKipzY3JlZW5MaW5lczsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgbGluZUNvdW50Oworc3RhdGljIHVuc2lnbmVkIGludCBzY3JlZW5IZWlnaHQ7CisKK3N0YXRpYyBNZW51ICpzY3JlZW5NZW51Oworc3RhdGljIHVuc2lnbmVkIGludCBzY3JlZW5Db2x1bW47CitzdGF0aWMgdW5zaWduZWQgaW50IHNjcmVlblJvdzsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgc2NyZWVuV2lkdGg7CisKK3N0YXRpYyBpbmxpbmUgY29uc3QgTWVudUl0ZW0gKgorZ2V0Q3VycmVudEl0ZW0gKHZvaWQpIHsKKyAgTWVudSAqbWVudSA9IHNjcmVlbk1lbnU7CisKKyAgcmV0dXJuIGdldE1lbnVJdGVtKG1lbnUsIGdldE1lbnVJbmRleChtZW51KSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorc2V0Rm9jdXNlZEl0ZW0gKHZvaWQpIHsKKyAgY2hhbmdlTWVudUl0ZW0oc2NyZWVuTGluZXNbc2VzLT53aW55XS0+aXRlbSk7Cit9CisKK3N0YXRpYyBSZW5kZXJlZE1lbnVJdGVtICoKK25ld1JlbmRlcmVkTWVudUl0ZW0gKE1lbnUgKm1lbnUpIHsKKyAgTWVudUl0ZW0gKml0ZW0gPSBnZXRDdXJyZW50TWVudUl0ZW0obWVudSk7CisKKyAgY2hhciBsYWJlbFN0cmluZ1swWDEwMF07CisgIHNpemVfdCBsYWJlbExlbmd0aDsKKyAgeworICAgIGNvbnN0IGNoYXIgKnRpdGxlID0gZ2V0TWVudUl0ZW1UaXRsZShpdGVtKTsKKyAgICBjb25zdCBjaGFyICpzdWJ0aXRsZSA9IGdldE1lbnVJdGVtU3VidGl0bGUoaXRlbSk7CisKKyAgICBTVFJfQkVHSU4obGFiZWxTdHJpbmcsIEFSUkFZX0NPVU5UKGxhYmVsU3RyaW5nKSk7CisgICAgU1RSX1BSSU5URigiJXMiLCB0aXRsZSk7CisKKyAgICBpZiAoKnN1YnRpdGxlKSB7CisgICAgICBpZiAoKnRpdGxlKSBTVFJfUFJJTlRGKCIgIik7CisgICAgICBTVFJfUFJJTlRGKCIlcyIsIHN1YnRpdGxlKTsKKyAgICB9CisKKyAgICBpZiAobGFiZWxTdHJpbmdbMF0pIHsKKyAgICAgIGlmICghaXNNZW51SXRlbUFjdGlvbihpdGVtKSkgU1RSX1BSSU5URigiOiIpOworICAgICAgU1RSX1BSSU5URigiICIpOworICAgIH0KKworICAgIGxhYmVsTGVuZ3RoID0gU1RSX0xFTkdUSDsKKyAgICBTVFJfRU5EOworICB9CisKKyAgY2hhciBzZXR0aW5nU3RyaW5nWzBYMTAwXTsKKyAgc2l6ZV90IHNldHRpbmdMZW5ndGg7CisgIHsKKyAgICBjb25zdCBjaGFyICp0ZXh0ID0gZ2V0TWVudUl0ZW1UZXh0KGl0ZW0pOworICAgIGNvbnN0IGNoYXIgKmNvbW1lbnQgPSBnZXRNZW51SXRlbUNvbW1lbnQoaXRlbSk7CisKKyAgICBpZiAoIXRleHQpIHsKKyAgICAgIHRleHQgPSAiIjsKKyAgICB9IGVsc2UgaWYgKCEqdGV4dCkgeworICAgICAgdGV4dCA9IGdldHRleHQoIjxvZmY+Iik7CisgICAgfQorCisgICAgU1RSX0JFR0lOKHNldHRpbmdTdHJpbmcsIEFSUkFZX0NPVU5UKHNldHRpbmdTdHJpbmcpKTsKKyAgICBTVFJfUFJJTlRGKCIlcyIsIHRleHQpOworICAgIGlmICgqY29tbWVudCkgU1RSX1BSSU5URigiICglcykiLCBjb21tZW50KTsKKyAgICBzZXR0aW5nTGVuZ3RoID0gU1RSX0xFTkdUSDsKKyAgICBTVFJfRU5EOworICB9CisKKyAgeworICAgIHNpemVfdCBtYXhpbXVtTGVuZ3RoID0gbGFiZWxMZW5ndGggKyBzZXR0aW5nTGVuZ3RoOworICAgIHdjaGFyX3QgY2hhcmFjdGVyc1ttYXhpbXVtTGVuZ3RoXTsKKworICAgIHNpemVfdCBzZXR0aW5nSW5kZW50OworICAgIHNpemVfdCBhY3R1YWxMZW5ndGg7CisKKyAgICB7CisgICAgICBzaXplX3QgY3VycmVudExlbmd0aCA9IDA7CisgICAgICAgCisgICAgICBjdXJyZW50TGVuZ3RoICs9IG1ha2VXY2hhcnNGcm9tVXRmOChsYWJlbFN0cmluZywgJmNoYXJhY3RlcnNbY3VycmVudExlbmd0aF0sIG1heGltdW1MZW5ndGgtY3VycmVudExlbmd0aCk7CisgICAgICBzZXR0aW5nSW5kZW50ID0gY3VycmVudExlbmd0aDsKKworICAgICAgY3VycmVudExlbmd0aCArPSBtYWtlV2NoYXJzRnJvbVV0Zjgoc2V0dGluZ1N0cmluZywgJmNoYXJhY3RlcnNbY3VycmVudExlbmd0aF0sIG1heGltdW1MZW5ndGgtY3VycmVudExlbmd0aCk7CisgICAgICBhY3R1YWxMZW5ndGggPSBjdXJyZW50TGVuZ3RoOworICAgIH0KKworICAgIHsKKyAgICAgIFJlbmRlcmVkTWVudUl0ZW0gKnJtaTsKKyAgICAgIHNpemVfdCBzaXplID0gc2l6ZW9mKCpybWkpICsgKGFjdHVhbExlbmd0aCAqIHNpemVvZihybWktPnRleHRbMF0pKTsKKworICAgICAgaWYgKChybWkgPSBtYWxsb2Moc2l6ZSkpKSB7CisgICAgICAgIG1lbXNldChybWksIDAsIHNpemVvZigqcm1pKSk7CisgICAgICAgIHdtZW1jcHkocm1pLT50ZXh0LCBjaGFyYWN0ZXJzLCBhY3R1YWxMZW5ndGgpOworCisgICAgICAgIHJtaS0+aXRlbSA9IGl0ZW07CisgICAgICAgIHJtaS0+bGVuZ3RoID0gYWN0dWFsTGVuZ3RoOworICAgICAgICBybWktPnNldHRpbmdJbmRlbnQgPSBzZXR0aW5nSW5kZW50OworCisgICAgICAgIHJldHVybiBybWk7CisgICAgICB9IGVsc2UgeworICAgICAgICBsb2dNYWxsb2NFcnJvcigpOworICAgICAgfQorICAgIH0KKyAgfQorCisgIHJldHVybiBOVUxMOworfQorCitzdGF0aWMgdm9pZAorZGVzdHJveVJlbmRlcmVkTWVudUl0ZW0gKFJlbmRlcmVkTWVudUl0ZW0gKnJtaSkgeworICBmcmVlKHJtaSk7Cit9CisKK3N0YXRpYyB2b2lkCityZW1vdmVMaW5lcyAodm9pZCkgeworICB3aGlsZSAoc2NyZWVuSGVpZ2h0ID4gMCkgeworICAgIGRlc3Ryb3lSZW5kZXJlZE1lbnVJdGVtKHNjcmVlbkxpbmVzWy0tc2NyZWVuSGVpZ2h0XSk7CisgIH0KK30KKworc3RhdGljIGludAorc2V0U2NyZWVuUm93ICh2b2lkKSB7CisgIGNvbnN0IE1lbnVJdGVtICppdGVtID0gZ2V0Q3VycmVudEl0ZW0oKTsKKworICBmb3IgKHVuc2lnbmVkIGludCByb3c9MDsgcm93PHNjcmVlbkhlaWdodDsgcm93Kz0xKSB7CisgICAgY29uc3QgUmVuZGVyZWRNZW51SXRlbSAqcm1pID0gc2NyZWVuTGluZXNbcm93XTsKKworICAgIGlmIChybWktPml0ZW0gPT0gaXRlbSkgeworICAgICAgc2NyZWVuUm93ID0gcm93OworICAgICAgcmV0dXJuIDE7CisgICAgfQorICB9CisKKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK3JlbG9hZFNjcmVlbiAoaW50IGNvbnN0cnVjdGluZykgeworICBNZW51ICptZW51ID0gZ2V0Q3VycmVudFN1Ym1lbnUocm9vdE1lbnUpOworICB1bnNpZ25lZCBpbnQgaW5kZXggPSBnZXRNZW51SW5kZXgobWVudSk7CisKKyAgc2NyZWVuTWVudSA9IG1lbnU7CisgIHNjcmVlbldpZHRoID0gMDsKKyAgcmVtb3ZlTGluZXMoKTsKKworICBpZiAoY2hhbmdlTWVudUl0ZW1GaXJzdChtZW51KSkgeworICAgIHsKKyAgICAgIHVuc2lnbmVkIGludCBjb3VudCA9IGdldE1lbnVTaXplKG1lbnUpOworCisgICAgICBpZiAoY291bnQgPiBsaW5lQ291bnQpIHsKKyAgICAgICAgUmVuZGVyZWRNZW51SXRlbSAqKmxpbmVzID0gcmVhbGxvYyhzY3JlZW5MaW5lcywgQVJSQVlfU0laRShzY3JlZW5MaW5lcywgY291bnQpKTsKKworICAgICAgICBpZiAoIWxpbmVzKSB7CisgICAgICAgICAgbG9nTWFsbG9jRXJyb3IoKTsKKyAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQorCisgICAgICAgIHNjcmVlbkxpbmVzID0gbGluZXM7CisgICAgICAgIGxpbmVDb3VudCA9IGNvdW50OworICAgICAgfQorICAgIH0KKworICAgIGRvIHsKKyAgICAgIFJlbmRlcmVkTWVudUl0ZW0gKnJtaSA9IG5ld1JlbmRlcmVkTWVudUl0ZW0obWVudSk7CisKKyAgICAgIGlmICghcm1pKSByZXR1cm4gMDsKKyAgICAgIHNjcmVlbkxpbmVzW3NjcmVlbkhlaWdodCsrXSA9IHJtaTsKKyAgICAgIGlmIChzY3JlZW5XaWR0aCA8IHJtaS0+bGVuZ3RoKSBzY3JlZW5XaWR0aCA9IHJtaS0+bGVuZ3RoOworICAgIH0gd2hpbGUgKGNoYW5nZU1lbnVJdGVtTmV4dChtZW51LCAwKSk7CisKKyAgICBpZiAoY2hhbmdlTWVudUl0ZW1JbmRleChtZW51LCBpbmRleCkpIHsKKyAgICAgIGlmIChjb25zdHJ1Y3RpbmcpIHsKKyAgICAgICAgc2NyZWVuUm93ID0gMDsKKyAgICAgICAgc2NyZWVuQ29sdW1uID0gMDsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIGlmICghc2V0U2NyZWVuUm93KCkpIHJldHVybiAwOworICAgICAgICBzY3JlZW5Db2x1bW4gPSBzY3JlZW5MaW5lc1tzY3JlZW5Sb3ddLT5zZXR0aW5nSW5kZW50OworICAgICAgfQorCisgICAgICByZXR1cm4gMTsKKyAgICB9CisgIH0KKworICByZXR1cm4gMDsKK30KKworc3RhdGljIGludAorcmVmcmVzaF9NZW51U2NyZWVuICh2b2lkKSB7CisgIGlmIChzY3JlZW5VcGRhdGVkKSB7CisgICAgaWYgKCFyZWxvYWRTY3JlZW4oMCkpIHJldHVybiAwOworICAgIHNjcmVlblVwZGF0ZWQgPSAwOworICB9CisKKyAgcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQKK2NvbnN0cnVjdF9NZW51U2NyZWVuIChNZW51ICptZW51KSB7CisgIHJvb3RNZW51ID0gbWVudTsKKworICBzY3JlZW5VcGRhdGVkID0gMDsKKyAgc2NyZWVuTGluZXMgPSBOVUxMOworICBsaW5lQ291bnQgPSAwOworICBzY3JlZW5IZWlnaHQgPSAwOworCisgIHJldHVybiByZWxvYWRTY3JlZW4oMSk7Cit9CisKK3N0YXRpYyB2b2lkCitkZXN0cnVjdF9NZW51U2NyZWVuICh2b2lkKSB7CisgIGlmIChzY3JlZW5MaW5lcykgeworICAgIHJlbW92ZUxpbmVzKCk7CisgICAgZnJlZShzY3JlZW5MaW5lcyk7CisgICAgc2NyZWVuTGluZXMgPSBOVUxMOworICB9CisKKyAgcm9vdE1lbnUgPSBOVUxMOworfQorCitzdGF0aWMgaW50CitjdXJyZW50VmlydHVhbFRlcm1pbmFsX01lbnVTY3JlZW4gKHZvaWQpIHsKKyAgcmV0dXJuIHVzZXJWaXJ0dWFsVGVybWluYWwoMiArIGdldE1lbnVOdW1iZXIoc2NyZWVuTWVudSkpOworfQorCitzdGF0aWMgY29uc3QgY2hhciAqCitnZXRUaXRsZV9NZW51U2NyZWVuICh2b2lkKSB7CisgIHJldHVybiBnZXR0ZXh0KCJQcmVmZXJlbmNlcyBNZW51Iik7Cit9CisKK3N0YXRpYyB2b2lkCitkZXNjcmliZV9NZW51U2NyZWVuIChTY3JlZW5EZXNjcmlwdGlvbiAqZGVzY3JpcHRpb24pIHsKKyAgZGVzY3JpcHRpb24tPmNvbHMgPSBNQVgoc2NyZWVuV2lkdGgsIDEpOworICBkZXNjcmlwdGlvbi0+cm93cyA9IE1BWChzY3JlZW5IZWlnaHQsIDEpOworCisgIGRlc2NyaXB0aW9uLT5wb3N4ID0gc2NyZWVuQ29sdW1uOworICBkZXNjcmlwdGlvbi0+cG9zeSA9IHNjcmVlblJvdzsKKworICBkZXNjcmlwdGlvbi0+bnVtYmVyID0gY3VycmVudFZpcnR1YWxUZXJtaW5hbF9NZW51U2NyZWVuKCk7Cit9CisKK3N0YXRpYyBpbnQKK3JlYWRDaGFyYWN0ZXJzX01lbnVTY3JlZW4gKGNvbnN0IFNjcmVlbkJveCAqYm94LCBTY3JlZW5DaGFyYWN0ZXIgKmJ1ZmZlcikgeworICBpZiAodmFsaWRhdGVTY3JlZW5Cb3goYm94LCBzY3JlZW5XaWR0aCwgc2NyZWVuSGVpZ2h0KSkgeworICAgIFNjcmVlbkNoYXJhY3RlciAqY2hhcmFjdGVyID0gYnVmZmVyOworCisgICAgZm9yICh1bnNpZ25lZCBpbnQgcm93PTA7IHJvdzxib3gtPmhlaWdodDsgcm93Kz0xKSB7CisgICAgICBjb25zdCBSZW5kZXJlZE1lbnVJdGVtICpybWkgPSBzY3JlZW5MaW5lc1tyb3cgKyBib3gtPnRvcF07CisKKyAgICAgIGZvciAodW5zaWduZWQgaW50IGNvbHVtbj0wOyBjb2x1bW48Ym94LT53aWR0aDsgY29sdW1uKz0xKSB7CisgICAgICAgIHVuc2lnbmVkIGludCBpbmRleCA9IGNvbHVtbiArIGJveC0+bGVmdDsKKworICAgICAgICBjaGFyYWN0ZXItPnRleHQgPSAoaW5kZXggPCBybWktPmxlbmd0aCk/IHJtaS0+dGV4dFtpbmRleF06IFdDX0MoJyAnKTsKKyAgICAgICAgY2hhcmFjdGVyLT5hdHRyaWJ1dGVzID0gU0NSX0NPTE9VUl9ERUZBVUxUOworICAgICAgICBjaGFyYWN0ZXIgKz0gMTsKKyAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gMTsKKyAgfQorCisgIHJldHVybiAwOworfQorCitzdGF0aWMgdm9pZAorY29tbWFuZFJlamVjdGVkICh2b2lkKSB7CisgIGFsZXJ0KEFMRVJUX0NPTU1BTkRfUkVKRUNURUQpOworfQorCitzdGF0aWMgdm9pZAoraXRlbUNoYW5nZWQgKHZvaWQpIHsKKyAgc2V0U2NyZWVuUm93KCk7CisgIHNjcmVlbkNvbHVtbiA9IDA7Cit9CisKK3N0YXRpYyB2b2lkCitzZXR0aW5nQ2hhbmdlZCAodm9pZCkgeworICBzY3JlZW5VcGRhdGVkID0gMTsKK30KKwordm9pZAorbWVudVNjcmVlblVwZGF0ZWQgKHZvaWQpIHsKKyAgc2NyZWVuVXBkYXRlZCA9IDE7CisKKyAgaWYgKGlzU3BlY2lhbFNjcmVlbihTQ1JfTUVOVSkpIHsKKyAgICBzY2hlZHVsZVVwZGF0ZUluKCJtZW51IHNjcmVlbiB1cGRhdGVkIiwgU0NSRUVOX1VQREFURV9TQ0hFRFVMRV9ERUxBWSk7CisgIH0KK30KKworc3RhdGljIGludAoraGFuZGxlQ29tbWFuZF9NZW51U2NyZWVuIChpbnQgY29tbWFuZCkgeworICBzd2l0Y2ggKGNvbW1hbmQpIHsKKyAgICBjYXNlIEJSTF9DTURfS0VZKEJBQ0tTUEFDRSk6CisgICAgY2FzZSBCUkxfQ01EX01FTlVfUFJFVl9MRVZFTDogeworICAgICAgTWVudSAqbWVudSA9IHNjcmVlbk1lbnU7CisKKyAgICAgIGlmIChtZW51ICE9IHJvb3RNZW51KSB7CisgICAgICAgIGlmICghY2hhbmdlTWVudUl0ZW1JbmRleChzY3JlZW5NZW51LCAwKSkgeworICAgICAgICAgIGNvbW1hbmRSZWplY3RlZCgpOworICAgICAgICB9IGVsc2UgaWYgKCFjaGFuZ2VNZW51U2V0dGluZ05leHQobWVudSwgMCkpIHsKKyAgICAgICAgICBjb21tYW5kUmVqZWN0ZWQoKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICBzZXRGb2N1c2VkSXRlbSgpOworICAgICAgICAgIHNldHRpbmdDaGFuZ2VkKCk7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gMTsKKyAgICAgIH0KKyAgICB9CisgICAgLyogZmFsbCB0aHJvdWdoICovCisgICAgY2FzZSBCUkxfQ01EX0tFWShFU0NBUEUpOgorICAgIGNhc2UgQlJMX0NNRF9LRVkoRU5URVIpOiB7CisgICAgICBpbnQgaGFuZGxlZCA9IGhhbmRsZUNvbW1hbmQoQlJMX0NNRF9QUkVGTUVOVSk7CisgICAgICBpZiAoaGFuZGxlZCkgc2V0Rm9jdXNlZEl0ZW0oKTsKKyAgICAgIHJldHVybiBoYW5kbGVkOworICAgIH0KKworICAgIGNhc2UgQlJMX0NNRF9LRVkoSE9NRSk6IHsKKyAgICAgIGludCBoYW5kbGVkID0gaGFuZGxlQ29tbWFuZChCUkxfQ01EX1BSRUZMT0FEKTsKKworICAgICAgaWYgKGhhbmRsZWQpIHNldHRpbmdDaGFuZ2VkKCk7CisgICAgICByZXR1cm4gaGFuZGxlZDsKKyAgICB9CisKKyAgICBjYXNlIEJSTF9DTURfS0VZKEVORCk6IHsKKyAgICAgIGludCBoYW5kbGVkID0gaGFuZGxlQ29tbWFuZChCUkxfQ01EX1BSRUZTQVZFKTsKKworICAgICAgaWYgKGhhbmRsZWQpIHNldEZvY3VzZWRJdGVtKCk7CisgICAgICByZXR1cm4gaGFuZGxlZDsKKyAgICB9CisKKyAgICBjYXNlIEJSTF9DTURfS0VZKFBBR0VfVVApOgorICAgIGNhc2UgQlJMX0NNRF9NRU5VX0ZJUlNUX0lURU06IHsKKyAgICAgIGlmIChjaGFuZ2VNZW51SXRlbUZpcnN0KHNjcmVlbk1lbnUpKSB7CisgICAgICAgIGl0ZW1DaGFuZ2VkKCk7CisgICAgICB9IGVsc2UgeworICAgICAgICBjb21tYW5kUmVqZWN0ZWQoKTsKKyAgICAgIH0KKworICAgICAgcmV0dXJuIDE7CisgICAgfQorCisgICAgY2FzZSBCUkxfQ01EX0tFWShQQUdFX0RPV04pOgorICAgIGNhc2UgQlJMX0NNRF9NRU5VX0xBU1RfSVRFTTogeworICAgICAgaWYgKGNoYW5nZU1lbnVJdGVtTGFzdChzY3JlZW5NZW51KSkgeworICAgICAgICBpdGVtQ2hhbmdlZCgpOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgY29tbWFuZFJlamVjdGVkKCk7CisgICAgICB9CisKKyAgICAgIHJldHVybiAxOworICAgIH0KKworICAgIGNhc2UgQlJMX0NNRF9LRVkoQ1VSU09SX1VQKToKKyAgICBjYXNlIEJSTF9DTURfTUVOVV9QUkVWX0lURU06IHsKKyAgICAgIGlmIChjaGFuZ2VNZW51SXRlbVByZXZpb3VzKHNjcmVlbk1lbnUsIDEpKSB7CisgICAgICAgIGl0ZW1DaGFuZ2VkKCk7CisgICAgICB9IGVsc2UgeworICAgICAgICBjb21tYW5kUmVqZWN0ZWQoKTsKKyAgICAgIH0KKworICAgICAgcmV0dXJuIDE7CisgICAgfQorCisgICAgY2FzZSBCUkxfQ01EX0tFWShDVVJTT1JfRE9XTik6CisgICAgY2FzZSBCUkxfQ01EX01FTlVfTkVYVF9JVEVNOiB7CisgICAgICBpZiAoY2hhbmdlTWVudUl0ZW1OZXh0KHNjcmVlbk1lbnUsIDEpKSB7CisgICAgICAgIGl0ZW1DaGFuZ2VkKCk7CisgICAgICB9IGVsc2UgeworICAgICAgICBjb21tYW5kUmVqZWN0ZWQoKTsKKyAgICAgIH0KKworICAgICAgcmV0dXJuIDE7CisgICAgfQorCisgICAgY2FzZSBCUkxfQ01EX0tFWShDVVJTT1JfTEVGVCk6CisgICAgY2FzZSBCUkxfQ01EX0JBQ0s6CisgICAgY2FzZSBCUkxfQ01EX01FTlVfUFJFVl9TRVRUSU5HOiB7CisgICAgICBzZXRGb2N1c2VkSXRlbSgpOworCisgICAgICBpZiAoY2hhbmdlTWVudVNldHRpbmdQcmV2aW91cyhzY3JlZW5NZW51LCAxKSkgeworICAgICAgICBzZXR0aW5nQ2hhbmdlZCgpOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgY29tbWFuZFJlamVjdGVkKCk7CisgICAgICB9CisKKyAgICAgIHJldHVybiAxOworICAgIH0KKworICAgIGNhc2UgQlJMX0NNRF9LRVkoQ1VSU09SX1JJR0hUKToKKyAgICBjYXNlIEJSTF9DTURfSE9NRToKKyAgICBjYXNlIEJSTF9DTURfUkVUVVJOOgorICAgIGNhc2UgQlJMX0NNRF9NRU5VX05FWFRfU0VUVElORzogeworICAgICAgc2V0Rm9jdXNlZEl0ZW0oKTsKKworICAgICAgaWYgKGNoYW5nZU1lbnVTZXR0aW5nTmV4dChzY3JlZW5NZW51LCAxKSkgeworICAgICAgICBzZXR0aW5nQ2hhbmdlZCgpOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgY29tbWFuZFJlamVjdGVkKCk7CisgICAgICB9CisKKyAgICAgIHJldHVybiAxOworICAgIH0KKworICAgIGNhc2UgQlJMX0NNRF9DU1JKTVBfVkVSVDogeworICAgICAgc2V0Rm9jdXNlZEl0ZW0oKTsKKyAgICAgIHJldHVybiAxOworICAgIH0KKworICAgIGRlZmF1bHQ6IHsKKyAgICAgIGlmICgoY29tbWFuZCAmIEJSTF9NU0tfQkxLKSA9PSBCUkxfQ01EX0JMSyhST1VURSkpIHsKKyAgICAgICAgdW5zaWduZWQgaW50IGtleSA9IGNvbW1hbmQgJiBCUkxfTVNLX0FSRzsKKyAgICAgICAgdW5zaWduZWQgaW50IGNvdW50ID0gYnJsLnRleHRDb2x1bW5zOworCisgICAgICAgIGlmIChrZXkgPCBjb3VudCkgeworICAgICAgICAgIHNldEZvY3VzZWRJdGVtKCk7CisKKyAgICAgICAgICBpZiAoY2hhbmdlTWVudVNldHRpbmdTY2FsZWQoc2NyZWVuTWVudSwga2V5LCBjb3VudCkpIHsKKyAgICAgICAgICAgIHNldHRpbmdDaGFuZ2VkKCk7CisgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGNvbW1hbmRSZWplY3RlZCgpOworICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmICgoa2V5ID49IHN0YXR1c1N0YXJ0KSAmJiAoa2V5IDwgKHN0YXR1c1N0YXJ0ICsgc3RhdHVzQ291bnQpKSkgeworICAgICAgICAgIHN3aXRjaCAoa2V5IC0gc3RhdHVzU3RhcnQpIHsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgIGNvbW1hbmRSZWplY3RlZCgpOworICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgY29tbWFuZFJlamVjdGVkKCk7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gMTsKKyAgICAgIH0KKworICAgICAgYnJlYWs7CisgICAgfQorICB9CisKKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBLZXlUYWJsZUNvbW1hbmRDb250ZXh0CitnZXRDb21tYW5kQ29udGV4dF9NZW51U2NyZWVuICh2b2lkKSB7CisgIHJldHVybiBLVEJfQ1RYX01FTlU7Cit9CisKK3ZvaWQKK2luaXRpYWxpemVNZW51U2NyZWVuIChNZW51U2NyZWVuICptZW51KSB7CisgIGluaXRpYWxpemVCYXNlU2NyZWVuKCZtZW51LT5iYXNlKTsKKworICBtZW51LT5iYXNlLmN1cnJlbnRWaXJ0dWFsVGVybWluYWwgPSBjdXJyZW50VmlydHVhbFRlcm1pbmFsX01lbnVTY3JlZW47CisgIG1lbnUtPmJhc2UuZ2V0VGl0bGUgPSBnZXRUaXRsZV9NZW51U2NyZWVuOworCisgIG1lbnUtPmJhc2UucmVmcmVzaCA9IHJlZnJlc2hfTWVudVNjcmVlbjsKKyAgbWVudS0+YmFzZS5kZXNjcmliZSA9IGRlc2NyaWJlX01lbnVTY3JlZW47CisgIG1lbnUtPmJhc2UucmVhZENoYXJhY3RlcnMgPSByZWFkQ2hhcmFjdGVyc19NZW51U2NyZWVuOworCisgIG1lbnUtPmJhc2UuaGFuZGxlQ29tbWFuZCA9IGhhbmRsZUNvbW1hbmRfTWVudVNjcmVlbjsKKyAgbWVudS0+YmFzZS5nZXRDb21tYW5kQ29udGV4dCA9IGdldENvbW1hbmRDb250ZXh0X01lbnVTY3JlZW47CisKKyAgbWVudS0+Y29uc3RydWN0ID0gY29uc3RydWN0X01lbnVTY3JlZW47CisgIG1lbnUtPmRlc3RydWN0ID0gZGVzdHJ1Y3RfTWVudVNjcmVlbjsKK30KZGlmZiAtLWdpdCBhL1Byb2dyYW1zL3Njcl9tZW51LmggYi9Qcm9ncmFtcy9zY3JfbWVudS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQwMWQyZmEKLS0tIC9kZXYvbnVsbAorKysgYi9Qcm9ncmFtcy9zY3JfbWVudS5oCkBAIC0wLDAgKzEsNDIgQEAKKy8qCisgKiBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorICogICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorICoKKyAqIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorICoKKyAqIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyAqLworCisjaWZuZGVmIEJSTFRUWV9JTkNMVURFRF9TQ1JfTUVOVQorI2RlZmluZSBCUkxUVFlfSU5DTFVERURfU0NSX01FTlUKKworI2luY2x1ZGUgInNjcl9iYXNlLmgiCisjaW5jbHVkZSAibWVudS5oIgorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmIC8qIF9fY3BsdXNwbHVzICovCisKK3R5cGVkZWYgc3RydWN0IHsKKyAgQmFzZVNjcmVlbiBiYXNlOworICBpbnQgKCpjb25zdHJ1Y3QpIChNZW51ICptZW51KTsKKyAgdm9pZCAoKmRlc3RydWN0KSAodm9pZCk7Cit9IE1lbnVTY3JlZW47CisKK2V4dGVybiB2b2lkIGluaXRpYWxpemVNZW51U2NyZWVuIChNZW51U2NyZWVuICptZW51KTsKK2V4dGVybiB2b2lkIG1lbnVTY3JlZW5VcGRhdGVkICh2b2lkKTsKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYgLyogX19jcGx1c3BsdXMgKi8KKworI2VuZGlmIC8qIEJSTFRUWV9JTkNMVURFRF9TQ1JfTUVOVSAqLwpkaWZmIC0tZ2l0IGEvUHJvZ3JhbXMvc2NyX3JlYWwuYyBiL1Byb2dyYW1zL3Njcl9yZWFsLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2RiMjk2MAotLS0gL2Rldi9udWxsCisrKyBiL1Byb2dyYW1zL3Njcl9yZWFsLmMKQEAgLTAsMCArMSwzNSBAQAorLyoKKyAqIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisgKiAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisgKgorICogQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKKyNpbmNsdWRlICJwcm9sb2d1ZS5oIgorCisjaW5jbHVkZSAibG9nLmgiCisjaW5jbHVkZSAic2NyLmgiCisjaW5jbHVkZSAic2NyX3JlYWwuaCIKKyNpbmNsdWRlICJyb3V0aW5nLmgiCisKK3N0YXRpYyBpbnQKK3JvdXRlQ3Vyc29yX1JlYWxTY3JlZW4gKGludCBjb2x1bW4sIGludCByb3csIGludCBzY3JlZW4pIHsKKyAgcmV0dXJuIHN0YXJ0Um91dGluZyhjb2x1bW4sIHJvdywgc2NyZWVuKTsKK30KKwordm9pZAoraW5pdGlhbGl6ZVJlYWxTY3JlZW4gKE1haW5TY3JlZW4gKm1haW4pIHsKKyAgaW5pdGlhbGl6ZU1haW5TY3JlZW4obWFpbik7CisgIG1haW4tPmJhc2Uucm91dGVDdXJzb3IgPSByb3V0ZUN1cnNvcl9SZWFsU2NyZWVuOworfQpkaWZmIC0tZ2l0IGEvUHJvZ3JhbXMvc2NyX3NwZWNpYWwuYyBiL1Byb2dyYW1zL3Njcl9zcGVjaWFsLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGQwNTJjNQotLS0gL2Rldi9udWxsCisrKyBiL1Byb2dyYW1zL3Njcl9zcGVjaWFsLmMKQEAgLTAsMCArMSwyNjcgQEAKKy8qCisgKiBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorICogICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorICoKKyAqIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorICoKKyAqIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyAqLworCisvKiBzY3IuY2MgLSBUaGUgc2NyZWVuIHJlYWRpbmcgbGlicmFyeQorICoKKyAqIE5vdGU6IEFsdGhvdWdoIEMrKywgdGhpcyBjb2RlIHJlcXVpcmVzIG5vIHN0YW5kYXJkIEMrKyBsaWJyYXJ5LgorICogVGhpcyBpcyBpbXBvcnRhbnQgYXMgQlJMVFRZICptdXN0IG5vdCogcmVseSBvbiB0b28gbWFueQorICogcnVuLXRpbWUgc2hhcmVkIGxpYnJhcmllcywgbm9yIGJlIGEgaHVnZSBleGVjdXRhYmxlLgorICovCisKKyNpbmNsdWRlICJwcm9sb2d1ZS5oIgorCisjaW5jbHVkZSAibG9nLmgiCisjaW5jbHVkZSAic2NyLmgiCisjaW5jbHVkZSAic2NyX3NwZWNpYWwuaCIKKyNpbmNsdWRlICJ1cGRhdGUuaCIKKyNpbmNsdWRlICJtZXNzYWdlLmgiCisKKyNpbmNsdWRlICJzY3JfZnJvemVuLmgiCitzdGF0aWMgRnJvemVuU2NyZWVuIGZyb3plblNjcmVlbjsKKworc3RhdGljIGludAorZnJvemVuU2NyZWVuX2NvbnN0cnVjdCAodm9pZCkgeworICByZXR1cm4gZnJvemVuU2NyZWVuLmNvbnN0cnVjdCgmbWFpblNjcmVlbi5iYXNlKTsKK30KKworI2luY2x1ZGUgInNjcl9oZWxwLmgiCitzdGF0aWMgSGVscFNjcmVlbiBoZWxwU2NyZWVuOworCitzdGF0aWMgaW50CitoZWxwU2NyZWVuX2NvbnN0cnVjdCAodm9pZCkgeworICByZXR1cm4gaGVscFNjcmVlbi5jb25zdHJ1Y3QoKTsKK30KKworI2luY2x1ZGUgInNjcl9tZW51LmgiCisjaW5jbHVkZSAibWVudV9wcmVmcy5oIgorc3RhdGljIE1lbnVTY3JlZW4gbWVudVNjcmVlbjsKKworc3RhdGljIGludAorbWVudVNjcmVlbl9jb25zdHJ1Y3QgKHZvaWQpIHsKKyAgTWVudSAqbWVudSA9IGdldFByZWZlcmVuY2VzTWVudSgpOworICBpZiAoIW1lbnUpIHJldHVybiAwOworCisgIHVwZGF0ZUxvZ01lc3NhZ2VzU3VibWVudSgpOworICByZXR1cm4gbWVudVNjcmVlbi5jb25zdHJ1Y3QobWVudSk7Cit9CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgY29uc3QgY2hhciAqY29uc3QgbmFtZTsKKyAgaW50ICgqY29uc3QgY29uc3RydWN0KSAodm9pZCk7CisgIHZvaWQgKCoqY29uc3QgZGVzdHJ1Y3QpICh2b2lkKTsKKyAgQmFzZVNjcmVlbiAqY29uc3QgYmFzZTsKKworICBjb25zdCB1bnNpZ25lZCBhdXRvRGVzdHJ1Y3Q6MTsKKworICB1bnNpZ25lZCBpc0NvbnN0cnVjdGVkOjE7CisgIHVuc2lnbmVkIGlzQWN0aXZlOjE7Cit9IFNwZWNpYWxTY3JlZW5FbnRyeTsKKworI2RlZmluZSBTUEVDSUFMX1NDUkVFTl9JTklUSUFMSVpFUih0eXBlKSBcCisgIC5uYW1lID0gI3R5cGUsIFwKKyAgLmNvbnN0cnVjdCA9IHR5cGUgIyMgU2NyZWVuX2NvbnN0cnVjdCwgXAorICAuZGVzdHJ1Y3QgPSAmdHlwZSAjIyBTY3JlZW4uZGVzdHJ1Y3QsIFwKKyAgLmJhc2UgPSAmdHlwZSAjIyBTY3JlZW4uYmFzZQorCitzdGF0aWMgU3BlY2lhbFNjcmVlbkVudHJ5IHNwZWNpYWxTY3JlZW5UYWJsZVtdID0geworICBbU0NSX0ZST1pFTl0gPSB7CisgICAgU1BFQ0lBTF9TQ1JFRU5fSU5JVElBTElaRVIoZnJvemVuKSwKKyAgICAuYXV0b0Rlc3RydWN0ID0gMQorICB9LAorCisgIFtTQ1JfSEVMUF0gPSB7CisgICAgU1BFQ0lBTF9TQ1JFRU5fSU5JVElBTElaRVIoaGVscCkKKyAgfSwKKworICBbU0NSX01FTlVdID0geworICAgIFNQRUNJQUxfU0NSRUVOX0lOSVRJQUxJWkVSKG1lbnUpCisgIH0sCit9OworCitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzcGVjaWFsU2NyZWVuQ291bnQgPSBBUlJBWV9DT1VOVChzcGVjaWFsU2NyZWVuVGFibGUpOworCitzdGF0aWMgU3BlY2lhbFNjcmVlbkVudHJ5ICoKK2dldFNwZWNpYWxTY3JlZW5FbnRyeSAoU3BlY2lhbFNjcmVlblR5cGUgdHlwZSkgeworICByZXR1cm4gJnNwZWNpYWxTY3JlZW5UYWJsZVt0eXBlXTsKK30KKworc3RhdGljIHZvaWQKK2xvZ1NjcmVlbkFjdGlvbiAoY29uc3QgY2hhciAqdHlwZSwgY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqYWN0aW9uKSB7CisgIGxvZ01lc3NhZ2UoTE9HX0RFQlVHLCAiJXMgJXMgc2NyZWVuOiAlcyIsIGFjdGlvbiwgdHlwZSwgbmFtZSk7Cit9CisKK3N0YXRpYyB2b2lkCitsb2dNYWluU2NyZWVuQWN0aW9uIChjb25zdCBjaGFyICphY3Rpb24pIHsKKyAgbG9nU2NyZWVuQWN0aW9uKCJtYWluIiwgc2NyZWVuLT5kZWZpbml0aW9uLm5hbWUsIGFjdGlvbik7Cit9CisKK3N0YXRpYyB2b2lkCitsb2dTcGVjaWFsU2NyZWVuQWN0aW9uIChjb25zdCBTcGVjaWFsU2NyZWVuRW50cnkgKnNzZSwgY29uc3QgY2hhciAqYWN0aW9uKSB7CisgIGxvZ1NjcmVlbkFjdGlvbigic3BlY2lhbCIsIHNzZS0+bmFtZSwgYWN0aW9uKTsKK30KKworc3RhdGljIGludAorY29uc3RydWN0U3BlY2lhbFNjcmVlbiAoU3BlY2lhbFNjcmVlbkVudHJ5ICpzc2UpIHsKKyAgaWYgKHNzZS0+aXNDb25zdHJ1Y3RlZCkgcmV0dXJuICFzc2UtPmF1dG9EZXN0cnVjdDsKKyAgbG9nU3BlY2lhbFNjcmVlbkFjdGlvbihzc2UsICJjb25zdHJ1Y3RpbmciKTsKKyAgaWYgKCFzc2UtPmNvbnN0cnVjdCgpKSByZXR1cm4gMDsKKyAgc3NlLT5pc0NvbnN0cnVjdGVkID0gMTsKKyAgcmV0dXJuIDE7Cit9CisKK3N0YXRpYyB2b2lkCitkZXN0cnVjdFNwZWNpYWxTY3JlZW4gKFNwZWNpYWxTY3JlZW5FbnRyeSAqc3NlKSB7CisgIGlmIChzc2UtPmlzQ29uc3RydWN0ZWQpIHsKKyAgICBsb2dTcGVjaWFsU2NyZWVuQWN0aW9uKHNzZSwgImRlc3RydWN0aW5nIik7CisgICAgKCpzc2UtPmRlc3RydWN0KSgpOworICAgIHNzZS0+aXNDb25zdHJ1Y3RlZCA9IDA7CisgIH0KK30KKwordm9pZAorYmVnaW5TcGVjaWFsU2NyZWVucyAodm9pZCkgeworICBpbml0aWFsaXplRnJvemVuU2NyZWVuKCZmcm96ZW5TY3JlZW4pOworICBpbml0aWFsaXplTWVudVNjcmVlbigmbWVudVNjcmVlbik7CisgIGluaXRpYWxpemVIZWxwU2NyZWVuKCZoZWxwU2NyZWVuKTsKK30KKwordm9pZAorZW5kU3BlY2lhbFNjcmVlbnMgKHZvaWQpIHsKKyAgU3BlY2lhbFNjcmVlbkVudHJ5ICpzc2UgPSBzcGVjaWFsU2NyZWVuVGFibGU7CisgIFNwZWNpYWxTY3JlZW5FbnRyeSAqZW5kID0gc3NlICsgc3BlY2lhbFNjcmVlbkNvdW50OworCisgIHdoaWxlIChzc2UgPCBlbmQpIHsKKyAgICBkZXN0cnVjdFNwZWNpYWxTY3JlZW4oc3NlKTsKKyAgICBzc2UgKz0gMTsKKyAgfQorfQorCitzdGF0aWMgdm9pZAorYW5ub3VuY2VDdXJyZW50U2NyZWVuICh2b2lkKSB7CisgIGNvbnN0IGNoYXIgKnRpdGxlID0gY3VycmVudFNjcmVlbi0+Z2V0VGl0bGUoKTsKKyAgaWYgKHRpdGxlKSBtZXNzYWdlKE5VTEwsIHRpdGxlLCAwKTsKK30KKworc3RhdGljIHZvaWQKK3NldEN1cnJlbnRTY3JlZW4gKEJhc2VTY3JlZW4gKnNjcmVlbikgeworICBpZiAoc2NyZWVuICE9IGN1cnJlbnRTY3JlZW4pIHsKKyAgICBjdXJyZW50U2NyZWVuLT5vbkJhY2tncm91bmQoKTsKKyAgICBjdXJyZW50U2NyZWVuID0gc2NyZWVuOworICAgIGN1cnJlbnRTY3JlZW4tPm9uRm9yZWdyb3VuZCgpOworCisgICAgc2NoZWR1bGVVcGRhdGUoIm5ldyBzY3JlZW4gc2VsZWN0ZWQiKTsKKyAgICBhbm5vdW5jZUN1cnJlbnRTY3JlZW4oKTsKKyAgfQorfQorCitzdGF0aWMgdm9pZAorc2V0U3BlY2lhbFNjcmVlbiAoY29uc3QgU3BlY2lhbFNjcmVlbkVudHJ5ICpzc2UpIHsKKyAgbG9nU3BlY2lhbFNjcmVlbkFjdGlvbihzc2UsICJzZWxlY3RpbmciKTsKKyAgc2V0Q3VycmVudFNjcmVlbihzc2UtPmJhc2UpOworfQorCitzdGF0aWMgdm9pZAorc2VsZWN0Q3VycmVudFNjcmVlbiAodm9pZCkgeworICBjb25zdCBTcGVjaWFsU2NyZWVuRW50cnkgKnNzZSA9IHNwZWNpYWxTY3JlZW5UYWJsZTsKKyAgY29uc3QgU3BlY2lhbFNjcmVlbkVudHJ5ICplbmQgPSBzc2UgKyBzcGVjaWFsU2NyZWVuQ291bnQ7CisKKyAgd2hpbGUgKHNzZSA8IGVuZCkgeworICAgIGlmIChzc2UtPmlzQWN0aXZlKSB7CisgICAgICBzZXRTcGVjaWFsU2NyZWVuKHNzZSk7CisgICAgICByZXR1cm47CisgICAgfQorCisgICAgc3NlICs9IDE7CisgIH0KKworICBsb2dNYWluU2NyZWVuQWN0aW9uKCJzZWxlY3RpbmciKTsKKyAgc2V0Q3VycmVudFNjcmVlbigmbWFpblNjcmVlbi5iYXNlKTsKK30KKworaW50CithY3RpdmF0ZVNwZWNpYWxTY3JlZW4gKFNwZWNpYWxTY3JlZW5UeXBlIHR5cGUpIHsKKyAgU3BlY2lhbFNjcmVlbkVudHJ5ICpzc2UgPSBnZXRTcGVjaWFsU2NyZWVuRW50cnkodHlwZSk7CisKKyAgaWYgKCFjb25zdHJ1Y3RTcGVjaWFsU2NyZWVuKHNzZSkpIHJldHVybiAwOworICBsb2dTcGVjaWFsU2NyZWVuQWN0aW9uKHNzZSwgImFjdGl2YXRpbmciKTsKKyAgc3NlLT5pc0FjdGl2ZSA9IDE7CisgIHNldFNwZWNpYWxTY3JlZW4oc3NlKTsKKyAgcmV0dXJuIDE7Cit9CisKK3ZvaWQKK2RlYWN0aXZhdGVTcGVjaWFsU2NyZWVuIChTcGVjaWFsU2NyZWVuVHlwZSB0eXBlKSB7CisgIFNwZWNpYWxTY3JlZW5FbnRyeSAqc3NlID0gZ2V0U3BlY2lhbFNjcmVlbkVudHJ5KHR5cGUpOworCisgIGxvZ1NwZWNpYWxTY3JlZW5BY3Rpb24oc3NlLCAiZGVhY3RpdmF0aW5nIik7CisgIHNzZS0+aXNBY3RpdmUgPSAwOworICBpZiAoc3NlLT5hdXRvRGVzdHJ1Y3QpIGRlc3RydWN0U3BlY2lhbFNjcmVlbihzc2UpOworICBzZWxlY3RDdXJyZW50U2NyZWVuKCk7Cit9CisKK2ludAoraGF2ZVNwZWNpYWxTY3JlZW4gKFNwZWNpYWxTY3JlZW5UeXBlIHR5cGUpIHsKKyAgcmV0dXJuIGdldFNwZWNpYWxTY3JlZW5FbnRyeSh0eXBlKS0+aXNBY3RpdmU7Cit9CisKK2ludAoraXNTcGVjaWFsU2NyZWVuIChTcGVjaWFsU2NyZWVuVHlwZSB0eXBlKSB7CisgIHJldHVybiBjdXJyZW50U2NyZWVuID09IGdldFNwZWNpYWxTY3JlZW5FbnRyeSh0eXBlKS0+YmFzZTsKK30KKworaW50Citjb25zdHJ1Y3RIZWxwU2NyZWVuICh2b2lkKSB7CisgIFNwZWNpYWxTY3JlZW5FbnRyeSAqc3NlID0gZ2V0U3BlY2lhbFNjcmVlbkVudHJ5KFNDUl9IRUxQKTsKKworICByZXR1cm4gY29uc3RydWN0U3BlY2lhbFNjcmVlbihzc2UpOworfQorCitpbnQKK2FkZEhlbHBQYWdlICh2b2lkKSB7CisgIHJldHVybiBoZWxwU2NyZWVuLmFkZFBhZ2UoKTsKK30KKwordW5zaWduZWQgaW50CitnZXRIZWxwUGFnZUNvdW50ICh2b2lkKSB7CisgIHJldHVybiBoZWxwU2NyZWVuLmdldFBhZ2VDb3VudCgpOworfQorCit1bnNpZ25lZCBpbnQKK2dldEhlbHBQYWdlTnVtYmVyICh2b2lkKSB7CisgIHJldHVybiBoZWxwU2NyZWVuLmdldFBhZ2VOdW1iZXIoKTsKK30KKworaW50CitzZXRIZWxwUGFnZU51bWJlciAodW5zaWduZWQgaW50IG51bWJlcikgeworICByZXR1cm4gaGVscFNjcmVlbi5zZXRQYWdlTnVtYmVyKG51bWJlcik7Cit9CisKK2ludAorY2xlYXJIZWxwUGFnZSAodm9pZCkgeworICByZXR1cm4gaGVscFNjcmVlbi5jbGVhclBhZ2UoKTsKK30KKworaW50CithZGRIZWxwTGluZSAoY29uc3Qgd2NoYXJfdCAqY2hhcmFjdGVycykgeworICByZXR1cm4gaGVscFNjcmVlbi5hZGRMaW5lKGNoYXJhY3RlcnMpOworfQorCit1bnNpZ25lZCBpbnQKK2dldEhlbHBMaW5lQ291bnQgKHZvaWQpIHsKKyAgcmV0dXJuIGhlbHBTY3JlZW4uZ2V0TGluZUNvdW50KCk7Cit9CmRpZmYgLS1naXQgYS9Qcm9ncmFtcy9zY3Jfc3BlY2lhbC5oIGIvUHJvZ3JhbXMvc2NyX3NwZWNpYWwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YzMzOWE2Ci0tLSAvZGV2L251bGwKKysrIGIvUHJvZ3JhbXMvc2NyX3NwZWNpYWwuaApAQCAtMCwwICsxLDU1IEBACisvKgorICogQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyAqICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyAqCisgKiBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorICoKKyAqIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyAqCisgKiBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisgKi8KKworI2lmbmRlZiBCUkxUVFlfSU5DTFVERURfU0NSX1NQRUNJQUwKKyNkZWZpbmUgQlJMVFRZX0lOQ0xVREVEX1NDUl9TUEVDSUFMCisKKyNpbmNsdWRlICJzY3JfaW50ZXJuYWwuaCIKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZiAvKiBfX2NwbHVzcGx1cyAqLworCitleHRlcm4gdm9pZCBiZWdpblNwZWNpYWxTY3JlZW5zICh2b2lkKTsKK2V4dGVybiB2b2lkIGVuZFNwZWNpYWxTY3JlZW5zICh2b2lkKTsKKwordHlwZWRlZiBlbnVtIHsKKyAgU0NSX0ZST1pFTiwKKyAgU0NSX01FTlUsCisgIFNDUl9IRUxQLAorfSBTcGVjaWFsU2NyZWVuVHlwZTsKKworZXh0ZXJuIGludCBhY3RpdmF0ZVNwZWNpYWxTY3JlZW4gKFNwZWNpYWxTY3JlZW5UeXBlIHR5cGUpOworZXh0ZXJuIHZvaWQgZGVhY3RpdmF0ZVNwZWNpYWxTY3JlZW4gKFNwZWNpYWxTY3JlZW5UeXBlIHR5cGUpOworZXh0ZXJuIGludCBoYXZlU3BlY2lhbFNjcmVlbiAoU3BlY2lhbFNjcmVlblR5cGUgdHlwZSk7CitleHRlcm4gaW50IGlzU3BlY2lhbFNjcmVlbiAoU3BlY2lhbFNjcmVlblR5cGUgdHlwZSk7CisKK2V4dGVybiBpbnQgY29uc3RydWN0SGVscFNjcmVlbiAodm9pZCk7CitleHRlcm4gaW50IGFkZEhlbHBQYWdlICh2b2lkKTsKK2V4dGVybiB1bnNpZ25lZCBpbnQgZ2V0SGVscFBhZ2VDb3VudCAodm9pZCk7CitleHRlcm4gdW5zaWduZWQgaW50IGdldEhlbHBQYWdlTnVtYmVyICh2b2lkKTsKK2V4dGVybiBpbnQgc2V0SGVscFBhZ2VOdW1iZXIgKHVuc2lnbmVkIGludCBudW1iZXIpOworZXh0ZXJuIGludCBjbGVhckhlbHBQYWdlICh2b2lkKTsKK2V4dGVybiBpbnQgYWRkSGVscExpbmUgKGNvbnN0IHdjaGFyX3QgKmNoYXJhY3RlcnMpOworZXh0ZXJuIHVuc2lnbmVkIGludCBnZXRIZWxwTGluZUNvdW50ICh2b2lkKTsKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYgLyogX19jcGx1c3BsdXMgKi8KKworI2VuZGlmIC8qIEJSTFRUWV9JTkNMVURFRF9TQ1JfU1BFQ0lBTCAqLwpkaWZmIC0tZ2l0IGEvUHJvZ3JhbXMvc2NyX3Rlcm1pbmFsLmMgYi9Qcm9ncmFtcy9zY3JfdGVybWluYWwuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NWVhMWI5Ci0tLSAvZGV2L251bGwKKysrIGIvUHJvZ3JhbXMvc2NyX3Rlcm1pbmFsLmMKQEAgLTAsMCArMSwxNzAgQEAKKy8qCisgKiBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorICogICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorICoKKyAqIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorICoKKyAqIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyAqLworCisjaW5jbHVkZSAicHJvbG9ndWUuaCIKKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxzeXMvbXNnLmg+CisjaW5jbHVkZSA8c3lzL3NobS5oPgorCisjaW5jbHVkZSAibG9nLmgiCisjaW5jbHVkZSAic2NyX3Rlcm1pbmFsLmgiCisKK2ludAorbWFrZVRlcm1pbmFsS2V5IChrZXlfdCAqa2V5LCBjb25zdCBjaGFyICpwYXRoKSB7CisgIGtleV90IHJlc3VsdCA9IGZ0b2socGF0aCwgJ3QnKTsKKyAgaW50IGdvdEtleSA9IHJlc3VsdCAhPSAtMTsKKworICBpZiAoZ290S2V5KSB7CisgICAgKmtleSA9IHJlc3VsdDsKKyAgfSBlbHNlIHsKKyAgICBsb2dTeXN0ZW1FcnJvcigiZnRvayIpOworICB9CisKKyAgcmV0dXJuIGdvdEtleTsKK30KKworaW50CitnZXRNZXNzYWdlUXVldWUgKGludCAqcXVldWUsIGtleV90IGtleSkgeworICBpbnQgcmVzdWx0ID0gbXNnZ2V0KGtleSwgMCk7CisgIGludCBmb3VuZFF1ZXVlID0gcmVzdWx0ICE9IC0xOworCisgIGlmIChmb3VuZFF1ZXVlKSB7CisgICAgKnF1ZXVlID0gcmVzdWx0OworICB9IGVsc2UgaWYgKGVycm5vICE9IEVOT0VOVCkgeworICAgIGxvZ1N5c3RlbUVycm9yKCJtc2dnZXQiKTsKKyAgfQorCisgIHJldHVybiBmb3VuZFF1ZXVlOworfQorCitpbnQKK2dldFNjcmVlblNlZ21lbnQgKGludCAqaWRlbnRpZmllciwga2V5X3Qga2V5KSB7CisgIGludCByZXN1bHQgPSBzaG1nZXQoa2V5LCAwLCAwKTsKKyAgaW50IGZvdW5kU2VnbWVudCA9IHJlc3VsdCAhPSAtMTsKKworICBpZiAoZm91bmRTZWdtZW50KSB7CisgICAgKmlkZW50aWZpZXIgPSByZXN1bHQ7CisgIH0gZWxzZSBpZiAoZXJybm8gIT0gRU5PRU5UKSB7CisgICAgbG9nU3lzdGVtRXJyb3IoInNobWdldCIpOworICB9CisKKyAgcmV0dXJuIGZvdW5kU2VnbWVudDsKK30KKworU2NyZWVuU2VnbWVudEhlYWRlciAqCithdHRhY2hTY3JlZW5TZWdtZW50IChpbnQgaWRlbnRpZmllcikgeworICB2b2lkICphZGRyZXNzID0gc2htYXQoaWRlbnRpZmllciwgTlVMTCwgMCk7CisgIGlmIChhZGRyZXNzICE9ICh2b2lkICopLTEpIHJldHVybiBhZGRyZXNzOworCisgIGxvZ1N5c3RlbUVycm9yKCJzaG1hdCIpOworICByZXR1cm4gTlVMTDsKK30KKworaW50CitkZXRhY2hTY3JlZW5TZWdtZW50IChTY3JlZW5TZWdtZW50SGVhZGVyICpzZWdtZW50KSB7CisgIGlmIChzaG1kdChzZWdtZW50KSAhPSAtMSkgcmV0dXJuIDE7CisgIGxvZ1N5c3RlbUVycm9yKCJzaG1kdCIpOworICByZXR1cm4gMDsKK30KKworU2NyZWVuU2VnbWVudEhlYWRlciAqCitnZXRTY3JlZW5TZWdtZW50Rm9yS2V5IChrZXlfdCBrZXkpIHsKKyAgaW50IGlkZW50aWZpZXI7CisKKyAgaWYgKGdldFNjcmVlblNlZ21lbnQoJmlkZW50aWZpZXIsIGtleSkpIHsKKyAgICBTY3JlZW5TZWdtZW50SGVhZGVyICpzZWdtZW50ID0gYXR0YWNoU2NyZWVuU2VnbWVudChpZGVudGlmaWVyKTsKKyAgICBpZiAoc2VnbWVudCkgcmV0dXJuIHNlZ21lbnQ7CisgIH0KKworICByZXR1cm4gTlVMTDsKK30KKworU2NyZWVuU2VnbWVudEhlYWRlciAqCitnZXRTY3JlZW5TZWdtZW50Rm9yUGF0aCAoY29uc3QgY2hhciAqcGF0aCkgeworICBrZXlfdCBrZXk7CisgIGlmICghbWFrZVRlcm1pbmFsS2V5KCZrZXksIHBhdGgpKSByZXR1cm4gTlVMTDsKKyAgcmV0dXJuIGdldFNjcmVlblNlZ21lbnRGb3JLZXkoa2V5KTsKK30KKwordm9pZAorbG9nU2NyZWVuU2VnbWVudCAoY29uc3QgU2NyZWVuU2VnbWVudEhlYWRlciAqc2VnbWVudCkgeworICBjb25zdCB2b2lkICpjb25zdCBhZGRyZXNzID0gc2VnbWVudDsKKyAgY29uc3QgdW5zaWduZWQgY2hhciAqY29uc3QgYnl0ZXMgPSBhZGRyZXNzOworCisgIHVpbnQzMl90IG9mZnNldCA9IDA7CisgIGNvbnN0IHVpbnQzMl90IGVuZCA9IHNlZ21lbnQtPnNlZ21lbnRTaXplOworICB1bnNpZ25lZCBpbnQgaW5jcmVtZW50ID0gMFgxMDsKKyAgY29uc3QgaW50IHdpZHRoID0gc25wcmludGYoTlVMTCwgMCwgIiVYIiwgZW5kKTsKKworICB3aGlsZSAob2Zmc2V0IDwgZW5kKSB7CisgICAgeworICAgICAgY29uc3QgdWludDMyX3QgY291bnQgPSBlbmQgLSBvZmZzZXQ7CisgICAgICBpZiAoaW5jcmVtZW50ID4gY291bnQpIGluY3JlbWVudCA9IGNvdW50OworICAgIH0KKworICAgIGxvZ0J5dGVzKExPR19OT1RJQ0UsICJzY3JlZW4gc2VnbWVudDogJTAqWCIsICZieXRlc1tvZmZzZXRdLCBpbmNyZW1lbnQsIHdpZHRoLCBvZmZzZXQpOworICAgIG9mZnNldCArPSBpbmNyZW1lbnQ7CisgIH0KK30KKwordm9pZCAqCitnZXRTY3JlZW5JdGVtIChTY3JlZW5TZWdtZW50SGVhZGVyICpzZWdtZW50LCB1aW50MzJfdCBvZmZzZXQpIHsKKyAgdm9pZCAqYWRkcmVzcyA9IHNlZ21lbnQ7CisgIGFkZHJlc3MgKz0gb2Zmc2V0OworICByZXR1cm4gYWRkcmVzczsKK30KKworU2NyZWVuU2VnbWVudFJvdyAqCitnZXRTY3JlZW5Sb3dBcnJheSAoU2NyZWVuU2VnbWVudEhlYWRlciAqc2VnbWVudCkgeworICByZXR1cm4gZ2V0U2NyZWVuSXRlbShzZWdtZW50LCBzZWdtZW50LT5yb3dzT2Zmc2V0KTsKK30KKworU2NyZWVuU2VnbWVudENoYXJhY3RlciAqCitnZXRTY3JlZW5DaGFyYWN0ZXJBcnJheSAoU2NyZWVuU2VnbWVudEhlYWRlciAqc2VnbWVudCwgY29uc3QgU2NyZWVuU2VnbWVudENoYXJhY3RlciAqKmVuZCkgeworICBTY3JlZW5TZWdtZW50Q2hhcmFjdGVyICphcnJheSA9IGdldFNjcmVlbkl0ZW0oc2VnbWVudCwgc2VnbWVudC0+Y2hhcmFjdGVyc09mZnNldCk7CisgIGlmIChlbmQpICplbmQgPSBhcnJheSArIGdldFNjcmVlbkNoYXJhY3RlckNvdW50KHNlZ21lbnQpOworICByZXR1cm4gYXJyYXk7Cit9CisKK1NjcmVlblNlZ21lbnRDaGFyYWN0ZXIgKgorZ2V0U2NyZWVuUm93IChTY3JlZW5TZWdtZW50SGVhZGVyICpzZWdtZW50LCB1bnNpZ25lZCBpbnQgcm93LCBjb25zdCBTY3JlZW5TZWdtZW50Q2hhcmFjdGVyICoqZW5kKSB7CisgIHZvaWQgKmFkZHJlc3MgPSBzZWdtZW50OworCisgIGlmIChoYXZlU2NyZWVuUm93QXJyYXkoc2VnbWVudCkpIHsKKyAgICBhZGRyZXNzICs9IGdldFNjcmVlblJvd0FycmF5KHNlZ21lbnQpW3Jvd10uY2hhcmFjdGVyc09mZnNldDsKKyAgfSBlbHNlIHsKKyAgICBhZGRyZXNzICs9IHNlZ21lbnQtPmNoYXJhY3RlcnNPZmZzZXQ7CisgICAgYWRkcmVzcyArPSByb3cgKiBnZXRTY3JlZW5Sb3dXaWR0aChzZWdtZW50KTsKKyAgfQorCisgIGlmIChlbmQpIHsKKyAgICAqZW5kID0gYWRkcmVzcyArIGdldFNjcmVlblJvd1dpZHRoKHNlZ21lbnQpOworICB9CisKKyAgcmV0dXJuIGFkZHJlc3M7Cit9CisKK1NjcmVlblNlZ21lbnRDaGFyYWN0ZXIgKgorZ2V0U2NyZWVuQ2hhcmFjdGVyIChTY3JlZW5TZWdtZW50SGVhZGVyICpzZWdtZW50LCB1bnNpZ25lZCBpbnQgcm93LCB1bnNpZ25lZCBpbnQgY29sdW1uLCBjb25zdCBTY3JlZW5TZWdtZW50Q2hhcmFjdGVyICoqZW5kKSB7CisgIHZvaWQgKmFkZHJlc3MgPSBnZXRTY3JlZW5Sb3coc2VnbWVudCwgcm93LCBlbmQpOworICBhZGRyZXNzICs9IGNvbHVtbiAqIHNlZ21lbnQtPmNoYXJhY3RlclNpemU7CisgIHJldHVybiBhZGRyZXNzOworfQpkaWZmIC0tZ2l0IGEvUHJvZ3JhbXMvc2NyX3V0aWxzLmMgYi9Qcm9ncmFtcy9zY3JfdXRpbHMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNmQ3MzNlCi0tLSAvZGV2L251bGwKKysrIGIvUHJvZ3JhbXMvc2NyX3V0aWxzLmMKQEAgLTAsMCArMSw0MSBAQAorLyoKKyAqIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisgKiAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisgKgorICogQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKKyNpbmNsdWRlICJwcm9sb2d1ZS5oIgorCisjaW5jbHVkZSAic2NyX3V0aWxzLmgiCisKK3ZvaWQKK3NldFNjcmVlbkNoYXJhY3RlclRleHQgKFNjcmVlbkNoYXJhY3RlciAqY2hhcmFjdGVycywgd2NoYXJfdCB0ZXh0LCBzaXplX3QgY291bnQpIHsKKyAgd2hpbGUgKGNvdW50ID4gMCkgeworICAgIGNoYXJhY3RlcnNbLS1jb3VudF0udGV4dCA9IHRleHQ7CisgIH0KK30KKwordm9pZAorc2V0U2NyZWVuQ2hhcmFjdGVyQXR0cmlidXRlcyAoU2NyZWVuQ2hhcmFjdGVyICpjaGFyYWN0ZXJzLCB1bnNpZ25lZCBjaGFyIGF0dHJpYnV0ZXMsIHNpemVfdCBjb3VudCkgeworICB3aGlsZSAoY291bnQgPiAwKSB7CisgICAgY2hhcmFjdGVyc1stLWNvdW50XS5hdHRyaWJ1dGVzID0gYXR0cmlidXRlczsKKyAgfQorfQorCit2b2lkCitjbGVhclNjcmVlbkNoYXJhY3RlcnMgKFNjcmVlbkNoYXJhY3RlciAqY2hhcmFjdGVycywgc2l6ZV90IGNvdW50KSB7CisgIHNldFNjcmVlbkNoYXJhY3RlclRleHQoY2hhcmFjdGVycywgV0NfQygnICcpLCBjb3VudCk7CisgIHNldFNjcmVlbkNoYXJhY3RlckF0dHJpYnV0ZXMoY2hhcmFjdGVycywgU0NSX0NPTE9VUl9ERUZBVUxULCBjb3VudCk7Cit9CmRpZmYgLS1naXQgYS9Qcm9ncmFtcy9zY3J0ZXN0LmMgYi9Qcm9ncmFtcy9zY3J0ZXN0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTUyNmVhMAotLS0gL2Rldi9udWxsCisrKyBiL1Byb2dyYW1zL3NjcnRlc3QuYwpAQCAtMCwwICsxLDI1NiBAQAorLyoKKyAqIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisgKiAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisgKgorICogQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKKyNpbmNsdWRlICJwcm9sb2d1ZS5oIgorCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxzdHJpbmdzLmg+CisjaW5jbHVkZSA8Y3R5cGUuaD4KKworI2luY2x1ZGUgInByb2dyYW0uaCIKKyNpbmNsdWRlICJjbWRsaW5lLmgiCisjaW5jbHVkZSAibG9nLmgiCisjaW5jbHVkZSAicGFyc2UuaCIKKyNpbmNsdWRlICJzY3IuaCIKKworc3RhdGljIGNoYXIgKm9wdF9ib3hMZWZ0Oworc3RhdGljIGNoYXIgKm9wdF9ib3hXaWR0aDsKK3N0YXRpYyBjaGFyICpvcHRfYm94VG9wOworc3RhdGljIGNoYXIgKm9wdF9ib3hIZWlnaHQ7CitzdGF0aWMgY2hhciAqb3B0X3NjcmVlbkRyaXZlcjsKK3N0YXRpYyBjaGFyICpvcHRfZHJpdmVyc0RpcmVjdG9yeTsKKworQkVHSU5fT1BUSU9OX1RBQkxFKHByb2dyYW1PcHRpb25zKQorICB7IC53b3JkID0gInNjcmVlbi1kcml2ZXIiLAorICAgIC5sZXR0ZXIgPSAneCcsCisgICAgLmFyZ3VtZW50ID0gImRyaXZlciIsCisgICAgLnNldHRpbmcuc3RyaW5nID0gJm9wdF9zY3JlZW5Ecml2ZXIsCisgICAgLmludGVybmFsLnNldHRpbmcgPSBERUZBVUxUX1NDUkVFTl9EUklWRVIsCisgICAgLmRlc2NyaXB0aW9uID0gIlNjcmVlbiBkcml2ZXI6IG9uZSBvZiB7IiBTQ1JFRU5fRFJJVkVSX0NPREVTICJ9IgorICB9LAorCisgIHsgLndvcmQgPSAibGVmdCIsCisgICAgLmxldHRlciA9ICdsJywKKyAgICAuYXJndW1lbnQgPSAiY29sdW1uIiwKKyAgICAuc2V0dGluZy5zdHJpbmcgPSAmb3B0X2JveExlZnQsCisgICAgLmRlc2NyaXB0aW9uID0gIkxlZnQgZWRnZSBvZiByZWdpb24gKGZyb20gMCkuIgorICB9LAorCisgIHsgLndvcmQgPSAiY29sdW1ucyIsCisgICAgLmxldHRlciA9ICdjJywKKyAgICAuYXJndW1lbnQgPSAiY291bnQiLAorICAgIC5zZXR0aW5nLnN0cmluZyA9ICZvcHRfYm94V2lkdGgsCisgICAgLmRlc2NyaXB0aW9uID0gIldpZHRoIG9mIHJlZ2lvbi4iCisgIH0sCisKKyAgeyAud29yZCA9ICJ0b3AiLAorICAgIC5sZXR0ZXIgPSAndCcsCisgICAgLmFyZ3VtZW50ID0gInJvdyIsCisgICAgLnNldHRpbmcuc3RyaW5nID0gJm9wdF9ib3hUb3AsCisgICAgLmRlc2NyaXB0aW9uID0gIlRvcCBlZGdlIG9mIHJlZ2lvbiAoZnJvbSAwKS4iCisgIH0sCisKKyAgeyAud29yZCA9ICJyb3dzIiwKKyAgICAubGV0dGVyID0gJ3InLAorICAgIC5hcmd1bWVudCA9ICJjb3VudCIsCisgICAgLnNldHRpbmcuc3RyaW5nID0gJm9wdF9ib3hIZWlnaHQsCisgICAgLmRlc2NyaXB0aW9uID0gIkhlaWdodCBvZiByZWdpb24uIgorICB9LAorCisgIHsgLndvcmQgPSAiZHJpdmVycy1kaXJlY3RvcnkiLAorICAgIC5sZXR0ZXIgPSAnRCcsCisgICAgLmFyZ3VtZW50ID0gImRpcmVjdG9yeSIsCisgICAgLnNldHRpbmcuc3RyaW5nID0gJm9wdF9kcml2ZXJzRGlyZWN0b3J5LAorICAgIC5pbnRlcm5hbC5zZXR0aW5nID0gRFJJVkVSU19ESVJFQ1RPUlksCisgICAgLmludGVybmFsLmFkanVzdCA9IGZpeEluc3RhbGxQYXRoLAorICAgIC5kZXNjcmlwdGlvbiA9ICJQYXRoIHRvIGRpcmVjdG9yeSBmb3IgbG9hZGluZyBkcml2ZXJzLiIKKyAgfSwKK0VORF9PUFRJT05fVEFCTEUocHJvZ3JhbU9wdGlvbnMpCisKK3N0YXRpYyBpbnQKK3NldFJlZ2lvbiAoCisgIGludCAqb2Zmc2V0VmFsdWUsIGNvbnN0IGNoYXIgKm9mZnNldE9wdGlvbiwgY29uc3QgY2hhciAqb2Zmc2V0TmFtZSwKKyAgaW50ICpzaXplVmFsdWUsIGNvbnN0IGNoYXIgKnNpemVPcHRpb24sIGludCBzaXplTGltaXQsIGNvbnN0IGNoYXIgKnNpemVOYW1lCispIHsKKyAgaWYgKCpvZmZzZXRPcHRpb24pIHsKKyAgICB7CisgICAgICBjb25zdCBpbnQgbWluaW11bSA9IDA7CisgICAgICBjb25zdCBpbnQgbWF4aW11bSA9IHNpemVMaW1pdCAtIDE7CisgICAgICBpZiAoIXZhbGlkYXRlSW50ZWdlcihvZmZzZXRWYWx1ZSwgb2Zmc2V0T3B0aW9uLCAmbWluaW11bSwgJm1heGltdW0pKSB7CisgICAgICAgIGxvZ01lc3NhZ2UoTE9HX0VSUiwgImludmFsaWQgJXM6ICVzIiwgb2Zmc2V0TmFtZSwgb2Zmc2V0T3B0aW9uKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgICB9CisgICAgfQorCisgICAgaWYgKCpzaXplT3B0aW9uKSB7CisgICAgICBjb25zdCBpbnQgbWluaW11bSA9IDE7CisgICAgICBjb25zdCBpbnQgbWF4aW11bSA9IHNpemVMaW1pdCAtICpvZmZzZXRWYWx1ZTsKKyAgICAgIGlmICghdmFsaWRhdGVJbnRlZ2VyKHNpemVWYWx1ZSwgc2l6ZU9wdGlvbiwgJm1pbmltdW0sICZtYXhpbXVtKSkgeworICAgICAgICBsb2dNZXNzYWdlKExPR19FUlIsICJpbnZhbGlkICVzOiAlcyIsIHNpemVOYW1lLCBzaXplT3B0aW9uKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgICB9CisgICAgICByZXR1cm4gMTsKKyAgICB9CisgIH0gZWxzZSBpZiAoKnNpemVPcHRpb24pIHsKKyAgICBjb25zdCBpbnQgbWluaW11bSA9IDE7CisgICAgY29uc3QgaW50IG1heGltdW0gPSBzaXplTGltaXQ7CisgICAgaWYgKCF2YWxpZGF0ZUludGVnZXIoc2l6ZVZhbHVlLCBzaXplT3B0aW9uLCAmbWluaW11bSwgJm1heGltdW0pKSB7CisgICAgICBsb2dNZXNzYWdlKExPR19FUlIsICJpbnZhbGlkICVzOiAlcyIsIHNpemVOYW1lLCBzaXplT3B0aW9uKTsKKyAgICAgIHJldHVybiAwOworICAgIH0KKyAgICAqb2Zmc2V0VmFsdWUgPSAoc2l6ZUxpbWl0IC0gKnNpemVWYWx1ZSkgLyAyOworICAgIHJldHVybiAxOworICB9IGVsc2UgeworICAgICpvZmZzZXRWYWx1ZSA9IHNpemVMaW1pdCAvIDQ7CisgIH0KKyAgaWYgKCgqc2l6ZVZhbHVlID0gc2l6ZUxpbWl0IC0gKCpvZmZzZXRWYWx1ZSAqIDIpKSA8IDEpICpzaXplVmFsdWUgPSAxOworICByZXR1cm4gMTsKK30KKworaW50CittYWluIChpbnQgYXJnYywgY2hhciAqYXJndltdKSB7CisgIFByb2dyYW1FeGl0U3RhdHVzIGV4aXRTdGF0dXM7CisgIHZvaWQgKmRyaXZlck9iamVjdDsKKworICB7CisgICAgY29uc3QgQ29tbWFuZExpbmVEZXNjcmlwdG9yIGRlc2NyaXB0b3IgPSB7CisgICAgICAub3B0aW9ucyA9ICZwcm9ncmFtT3B0aW9ucywKKyAgICAgIC5hcHBsaWNhdGlvbk5hbWUgPSAic2NydGVzdCIsCisKKyAgICAgIC51c2FnZSA9IHsKKyAgICAgICAgLnB1cnBvc2UgPSBzdHJ0ZXh0KCJUZXN0IGEgc2NyZWVuIGRyaXZlci4iKSwKKyAgICAgICAgLnBhcmFtZXRlcnMgPSAiW3BhcmFtZXRlcj12YWx1ZSAuLi5dIiwKKyAgICAgIH0KKyAgICB9OworCisgICAgUFJPQ0VTU19PUFRJT05TKGRlc2NyaXB0b3IsIGFyZ2MsIGFyZ3YpOworICB9CisKKyAgaWYgKChzY3JlZW4gPSBsb2FkU2NyZWVuRHJpdmVyKG9wdF9zY3JlZW5Ecml2ZXIsICZkcml2ZXJPYmplY3QsIG9wdF9kcml2ZXJzRGlyZWN0b3J5KSkpIHsKKyAgICBjb25zdCBjaGFyICpjb25zdCAqcGFyYW1ldGVyTmFtZXMgPSBnZXRTY3JlZW5QYXJhbWV0ZXJzKHNjcmVlbik7CisgICAgY2hhciAqKnBhcmFtZXRlclNldHRpbmdzOworCisgICAgaWYgKCFwYXJhbWV0ZXJOYW1lcykgeworICAgICAgc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IG5vTmFtZXNbXSA9IHtOVUxMfTsKKyAgICAgIHBhcmFtZXRlck5hbWVzID0gbm9OYW1lczsKKyAgICB9CisKKyAgICB7CisgICAgICBjb25zdCBjaGFyICpjb25zdCAqbmFtZSA9IHBhcmFtZXRlck5hbWVzOworICAgICAgdW5zaWduZWQgaW50IGNvdW50OworICAgICAgY2hhciAqKnNldHRpbmc7CisgICAgICB3aGlsZSAoKm5hbWUpICsrbmFtZTsKKyAgICAgIGNvdW50ID0gbmFtZSAtIHBhcmFtZXRlck5hbWVzOworICAgICAgaWYgKCEocGFyYW1ldGVyU2V0dGluZ3MgPSBtYWxsb2MoKGNvdW50ICsgMSkgKiBzaXplb2YoKnBhcmFtZXRlclNldHRpbmdzKSkpKSB7CisgICAgICAgIGxvZ01hbGxvY0Vycm9yKCk7CisgICAgICAgIHJldHVybiBQUk9HX0VYSVRfRkFUQUw7CisgICAgICB9CisgICAgICBzZXR0aW5nID0gcGFyYW1ldGVyU2V0dGluZ3M7CisgICAgICB3aGlsZSAoY291bnQtLSkgKnNldHRpbmcrKyA9ICIiOworICAgICAgKnNldHRpbmcgPSBOVUxMOworICAgIH0KKworICAgIHdoaWxlIChhcmdjKSB7CisgICAgICBjaGFyICphc3NpZ25tZW50ID0gKmFyZ3YrKzsKKyAgICAgIGludCBvayA9IDA7CisgICAgICBjaGFyICpkZWxpbWl0ZXIgPSBzdHJjaHIoYXNzaWdubWVudCwgJz0nKTsKKyAgICAgIGlmICghZGVsaW1pdGVyKSB7CisgICAgICAgIGxvZ01lc3NhZ2UoTE9HX0VSUiwgIm1pc3Npbmcgc2NyZWVuIHBhcmFtZXRlciB2YWx1ZTogJXMiLCBhc3NpZ25tZW50KTsKKyAgICAgIH0gZWxzZSBpZiAoZGVsaW1pdGVyID09IGFzc2lnbm1lbnQpIHsKKyAgICAgICAgbG9nTWVzc2FnZShMT0dfRVJSLCAibWlzc2luZyBzY3JlZW4gcGFyYW1ldGVyIG5hbWU6ICVzIiwgYXNzaWdubWVudCk7CisgICAgICB9IGVsc2UgeworICAgICAgICBzaXplX3QgbmFtZUxlbmd0aCA9IGRlbGltaXRlciAtIGFzc2lnbm1lbnQ7CisgICAgICAgIGNvbnN0IGNoYXIgKmNvbnN0ICpuYW1lID0gcGFyYW1ldGVyTmFtZXM7CisgICAgICAgIHdoaWxlICgqbmFtZSkgeworICAgICAgICAgIGlmIChzdHJuY2FzZWNtcChhc3NpZ25tZW50LCAqbmFtZSwgbmFtZUxlbmd0aCkgPT0gMCkgeworICAgICAgICAgICAgcGFyYW1ldGVyU2V0dGluZ3NbbmFtZSAtIHBhcmFtZXRlck5hbWVzXSA9IGRlbGltaXRlciArIDE7CisgICAgICAgICAgICBvayA9IDE7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICB9CisgICAgICAgICAgKytuYW1lOworICAgICAgICB9CisgICAgICAgIGlmICghb2spIGxvZ01lc3NhZ2UoTE9HX0VSUiwgImludmFsaWQgc2NyZWVuIHBhcmFtZXRlcjogJXMiLCBhc3NpZ25tZW50KTsKKyAgICAgIH0KKyAgICAgIGlmICghb2spIHJldHVybiBQUk9HX0VYSVRfU1lOVEFYOworICAgICAgLS1hcmdjOworICAgIH0KKworICAgIGlmIChjb25zdHJ1Y3RTY3JlZW5Ecml2ZXIocGFyYW1ldGVyU2V0dGluZ3MpKSB7CisgICAgICBTY3JlZW5EZXNjcmlwdGlvbiBkZXNjcmlwdGlvbjsKKyAgICAgIGludCBsZWZ0LCB0b3AsIHdpZHRoLCBoZWlnaHQ7CisKKyAgICAgIGRlc2NyaWJlU2NyZWVuKCZkZXNjcmlwdGlvbik7CisgICAgICBwcmludGYoIlNjcmVlbjogJWR4JWRcbiIsIGRlc2NyaXB0aW9uLmNvbHMsIGRlc2NyaXB0aW9uLnJvd3MpOworICAgICAgcHJpbnRmKCJDdXJzb3I6IFslZCwlZF1cbiIsIGRlc2NyaXB0aW9uLnBvc3gsIGRlc2NyaXB0aW9uLnBvc3kpOworCisgICAgICBpZiAoc2V0UmVnaW9uKCZsZWZ0LCBvcHRfYm94TGVmdCwgInN0YXJ0aW5nIGNvbHVtbiIsCisgICAgICAgICAgICAgICAgJndpZHRoLCBvcHRfYm94V2lkdGgsIGRlc2NyaXB0aW9uLmNvbHMsICJyZWdpb24gd2lkdGgiKSkgeworICAgICAgICBpZiAoc2V0UmVnaW9uKCZ0b3AsIG9wdF9ib3hUb3AsICJzdGFydGluZyByb3ciLAorICAgICAgICAgICAgICAgICAgJmhlaWdodCwgb3B0X2JveEhlaWdodCwgZGVzY3JpcHRpb24ucm93cywgInJlZ2lvbiBoZWlnaHQiKSkgeworICAgICAgICAgIHByaW50ZigiUmVnaW9uOiAlZHglZEBbJWQsJWRdXG4iLCB3aWR0aCwgaGVpZ2h0LCBsZWZ0LCB0b3ApOworCisgICAgICAgICAgeworICAgICAgICAgICAgU2NyZWVuQ2hhcmFjdGVyIGJ1ZmZlclt3aWR0aCAqIGhlaWdodF07CisKKyAgICAgICAgICAgIGlmIChyZWFkU2NyZWVuKGxlZnQsIHRvcCwgd2lkdGgsIGhlaWdodCwgYnVmZmVyKSkgeworICAgICAgICAgICAgICBpbnQgbGluZTsKKyAgICAgICAgICAgICAgZm9yIChsaW5lPTA7IGxpbmU8aGVpZ2h0OyBsaW5lKyspIHsKKyAgICAgICAgICAgICAgICBpbnQgY29sdW1uOworICAgICAgICAgICAgICAgIGZvciAoY29sdW1uPTA7IGNvbHVtbjx3aWR0aDsgY29sdW1uKyspIHsKKyAgICAgICAgICAgICAgICAgIHdjaGFyX3QgY2hhcmFjdGVyID0gYnVmZmVyW2xpbmUgKiB3aWR0aCArIGNvbHVtbl0udGV4dDsKKyAgICAgICAgICAgICAgICAgIGlmICghaXN3TGF0aW4xKGNoYXJhY3RlcikpIHsKKyAgICAgICAgICAgICAgICAgICAgcHV0Y2hhcignPycpOworICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICghaXNwcmludChjaGFyYWN0ZXIpKSB7CisgICAgICAgICAgICAgICAgICAgIHB1dGNoYXIoJyonKTsKKyAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIHB1dGNoYXIoY2hhcmFjdGVyKTsKKyAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcHV0Y2hhcignXG4nKTsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICBleGl0U3RhdHVzID0gUFJPR19FWElUX1NVQ0NFU1M7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICBsb2dNZXNzYWdlKExPR19FUlIsICJDYW4ndCByZWFkIHNjcmVlbi4iKTsKKyAgICAgICAgICAgICAgZXhpdFN0YXR1cyA9IFBST0dfRVhJVF9GQVRBTDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgZXhpdFN0YXR1cyA9IFBST0dfRVhJVF9TWU5UQVg7CisgICAgICAgIH0KKyAgICAgIH0gZWxzZSB7CisgICAgICAgIGV4aXRTdGF0dXMgPSBQUk9HX0VYSVRfU1lOVEFYOworICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICBsb2dNZXNzYWdlKExPR19FUlIsICJjYW4ndCBvcGVuIHNjcmVlbi4iKTsKKyAgICAgIGV4aXRTdGF0dXMgPSBQUk9HX0VYSVRfRkFUQUw7CisgICAgfQorCisgICAgZGVzdHJ1Y3RTY3JlZW5Ecml2ZXIoKTsKKyAgfSBlbHNlIHsKKyAgICBsb2dNZXNzYWdlKExPR19FUlIsICJjYW4ndCBsb2FkIHNjcmVlbiBkcml2ZXIuIik7CisgICAgZXhpdFN0YXR1cyA9IFBST0dfRVhJVF9GQVRBTDsKKyAgfQorICByZXR1cm4gZXhpdFN0YXR1czsKK30KKworI2luY2x1ZGUgInVwZGF0ZS5oIgorCit2b2lkCitzY2hlZHVsZVVwZGF0ZUluIChjb25zdCBjaGFyICpyZWFzb24sIGludCBkZWxheSkgeworfQpkaWZmIC0tZ2l0IGEvUHJvZ3JhbXMvc2VyaWFsLmMgYi9Qcm9ncmFtcy9zZXJpYWwuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOTI2MjZkCi0tLSAvZGV2L251bGwKKysrIGIvUHJvZ3JhbXMvc2VyaWFsLmMKQEAgLTAsMCArMSw4OTcgQEAKKy8qCisgKiBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorICogICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorICoKKyAqIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorICoKKyAqIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyAqLworCisjaW5jbHVkZSAicHJvbG9ndWUuaCIKKworI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisKKyNpbmNsdWRlICJsb2cuaCIKKyNpbmNsdWRlICJpb19sb2cuaCIKKyNpbmNsdWRlICJzdHJmbXQuaCIKKyNpbmNsdWRlICJwYXJhbWV0ZXJzLmgiCisjaW5jbHVkZSAicGFyc2UuaCIKKyNpbmNsdWRlICJkZXZpY2UuaCIKKyNpbmNsdWRlICJhc3luY193YWl0LmgiCisKKyNpZiBkZWZpbmVkKFVTRV9QS0dfU0VSSUFMX05PTkUpCisjaW5jbHVkZSAic2VyaWFsX25vbmUuaCIKKyNlbGlmIGRlZmluZWQoVVNFX1BLR19TRVJJQUxfR1JVQikKKyNpbmNsdWRlICJzZXJpYWxfZ3J1Yi5oIgorI2VsaWYgZGVmaW5lZChVU0VfUEtHX1NFUklBTF9NU0RPUykKKyNpbmNsdWRlICJzZXJpYWxfbXNkb3MuaCIKKyNlbGlmIGRlZmluZWQoVVNFX1BLR19TRVJJQUxfVEVSTUlPUykKKyNpbmNsdWRlICJzZXJpYWxfdGVybWlvcy5oIgorI2VsaWYgZGVmaW5lZChVU0VfUEtHX1NFUklBTF9XSU5ET1dTKQorI2luY2x1ZGUgInNlcmlhbF93aW5kb3dzLmgiCisjZWxzZSAvKiBzZXJpYWwgcGFja2FnZSAqLworI2Vycm9yIHNlcmlhbCBJL08gcGFja2FnZSBub3Qgc2VsZWN0ZWQKKyNpbmNsdWRlICJzZXJpYWxfbm9uZS5oIgorI2VuZGlmIC8qIHNlcmlhbCBwYWNrYWdlICovCisKKyNpbmNsdWRlICJzZXJpYWxfaW50ZXJuYWwuaCIKKworY29uc3QgY2hhciAqCitzZXJpYWxHZXREZXZpY2VQYXRoIChTZXJpYWxEZXZpY2UgKnNlcmlhbCkgeworICByZXR1cm4gc2VyaWFsLT5kZXZpY2VQYXRoOworfQorCitjb25zdCBTZXJpYWxCYXVkRW50cnkgKgorc2VyaWFsR2V0QmF1ZEVudHJ5ICh1bnNpZ25lZCBpbnQgYmF1ZCkgeworICBjb25zdCBTZXJpYWxCYXVkRW50cnkgKmVudHJ5ID0gc2VyaWFsQmF1ZFRhYmxlOworCisgIHdoaWxlIChlbnRyeS0+YmF1ZCkgeworICAgIGlmIChiYXVkID09IGVudHJ5LT5iYXVkKSByZXR1cm4gZW50cnk7CisgICAgZW50cnkgKz0gMTsKKyAgfQorCisgIGxvZ01lc3NhZ2UoTE9HX1dBUk5JTkcsICJ1bmRlZmluZWQgc2VyaWFsIGJhdWQ6ICV1IiwgYmF1ZCk7CisgIHJldHVybiBOVUxMOworfQorCitzdGF0aWMgdm9pZAorc2VyaWFsSW5pdGlhbGl6ZUF0dHJpYnV0ZXMgKFNlcmlhbEF0dHJpYnV0ZXMgKmF0dHJpYnV0ZXMpIHsKKyAgbWVtc2V0KGF0dHJpYnV0ZXMsIDAsIHNpemVvZigqYXR0cmlidXRlcykpOworICBzZXJpYWxQdXRJbml0aWFsQXR0cmlidXRlcyhhdHRyaWJ1dGVzKTsKKworICB7CisgICAgY29uc3QgU2VyaWFsQmF1ZEVudHJ5ICplbnRyeSA9IHNlcmlhbEdldEJhdWRFbnRyeShTRVJJQUxfREVGQVVMVF9CQVVEKTsKKworICAgIGlmIChlbnRyeSkgeworICAgICAgaWYgKCFzZXJpYWxQdXRTcGVlZChhdHRyaWJ1dGVzLCBlbnRyeS0+c3BlZWQpKSB7CisgICAgICAgIGxvZ01lc3NhZ2UoTE9HX1dBUk5JTkcsICJkZWZhdWx0IHNlcmlhbCBiYXVkIG5vdCBzdXBwb3J0ZWQ6ICV1IiwgU0VSSUFMX0RFRkFVTFRfQkFVRCk7CisgICAgICB9CisgICAgfQorICB9CisKKyAgaWYgKCFzZXJpYWxQdXREYXRhQml0cyhhdHRyaWJ1dGVzLCBTRVJJQUxfREVGQVVMVF9EQVRBX0JJVFMpKSB7CisgICAgbG9nTWVzc2FnZShMT0dfV0FSTklORywgImRlZmF1bHQgc2VyaWFsIGRhdGEgYml0cyBub3Qgc3VwcG9ydGVkOiAldSIsIFNFUklBTF9ERUZBVUxUX0RBVEFfQklUUyk7CisgIH0KKworICBpZiAoIXNlcmlhbFB1dFN0b3BCaXRzKGF0dHJpYnV0ZXMsIFNFUklBTF9ERUZBVUxUX1NUT1BfQklUUykpIHsKKyAgICBsb2dNZXNzYWdlKExPR19XQVJOSU5HLCAiZGVmYXVsdCBzZXJpYWwgc3RvcCBiaXRzIG5vdCBzdXBwb3J0ZWQ6ICV1IiwgU0VSSUFMX0RFRkFVTFRfU1RPUF9CSVRTKTsKKyAgfQorCisgIGlmICghc2VyaWFsUHV0UGFyaXR5KGF0dHJpYnV0ZXMsIFNFUklBTF9ERUZBVUxUX1BBUklUWSkpIHsKKyAgICBsb2dNZXNzYWdlKExPR19XQVJOSU5HLCAiZGVmYXVsdCBzZXJpYWwgcGFyaXR5IG5vdCBzdXBwb3J0ZWQ6ICV1IiwgU0VSSUFMX0RFRkFVTFRfUEFSSVRZKTsKKyAgfQorCisgIGlmIChzZXJpYWxQdXRGbG93Q29udHJvbChhdHRyaWJ1dGVzLCBTRVJJQUxfREVGQVVMVF9GTE9XX0NPTlRST0wpKSB7CisgICAgbG9nTWVzc2FnZShMT0dfV0FSTklORywgImRlZmF1bHQgc2VyaWFsIGZsb3cgY29udHJvbCBub3Qgc3VwcG9ydGVkOiAwWCUwNFgiLCBTRVJJQUxfREVGQVVMVF9GTE9XX0NPTlRST0wpOworICB9CisKKyAgeworICAgIGludCBzdGF0ZSA9IDA7CisKKyAgICBpZiAoIXNlcmlhbFB1dE1vZGVtU3RhdGUoYXR0cmlidXRlcywgc3RhdGUpKSB7CisgICAgICBsb2dNZXNzYWdlKExPR19XQVJOSU5HLCAiZGVmYXVsdCBzZXJpYWwgbW9kZW0gc3RhdGUgbm90IHN1cHBvcnRlZDogJWQiLCBzdGF0ZSk7CisgICAgfQorICB9Cit9CisKK2ludAorc2VyaWFsU2V0QmF1ZCAoU2VyaWFsRGV2aWNlICpzZXJpYWwsIHVuc2lnbmVkIGludCBiYXVkKSB7CisgIGNvbnN0IFNlcmlhbEJhdWRFbnRyeSAqZW50cnkgPSBzZXJpYWxHZXRCYXVkRW50cnkoYmF1ZCk7CisKKyAgaWYgKGVudHJ5KSB7CisgICAgbG9nTWVzc2FnZShMT0dfQ0FURUdPUlkoU0VSSUFMX0lPKSwgInNldCBiYXVkOiAldSIsIGJhdWQpOworICAgIGlmIChzZXJpYWxQdXRTcGVlZCgmc2VyaWFsLT5wZW5kaW5nQXR0cmlidXRlcywgZW50cnktPnNwZWVkKSkgcmV0dXJuIDE7CisgICAgbG9nVW5zdXBwb3J0ZWRCYXVkKGJhdWQpOworICB9CisKKyAgcmV0dXJuIDA7Cit9CisKK2ludAorc2VyaWFsVmFsaWRhdGVCYXVkICh1bnNpZ25lZCBpbnQgKmJhdWQsIGNvbnN0IGNoYXIgKmRlc2NyaXB0aW9uLCBjb25zdCBjaGFyICp3b3JkLCBjb25zdCB1bnNpZ25lZCBpbnQgKmNob2ljZXMpIHsKKyAgaWYgKCEqd29yZCB8fCBpc1Vuc2lnbmVkSW50ZWdlcihiYXVkLCB3b3JkKSkgeworICAgIGNvbnN0IFNlcmlhbEJhdWRFbnRyeSAqZW50cnkgPSBzZXJpYWxHZXRCYXVkRW50cnkoKmJhdWQpOworCisgICAgaWYgKGVudHJ5KSB7CisgICAgICBpZiAoIWNob2ljZXMpIHJldHVybiAxOworCisgICAgICB3aGlsZSAoKmNob2ljZXMpIHsKKyAgICAgICAgaWYgKCpiYXVkID09ICpjaG9pY2VzKSByZXR1cm4gMTsKKyAgICAgICAgY2hvaWNlcyArPSAxOworICAgICAgfQorCisgICAgICBsb2dNZXNzYWdlKExPR19FUlIsICJ1bnN1cHBvcnRlZCAlczogJXUiLCBkZXNjcmlwdGlvbiwgKmJhdWQpOworICAgIH0gZWxzZSB7CisgICAgICBsb2dNZXNzYWdlKExPR19FUlIsICJ1bmRlZmluZWQgJXM6ICV1IiwgZGVzY3JpcHRpb24sICpiYXVkKTsKKyAgICB9CisgIH0gZWxzZSB7CisgICAgbG9nTWVzc2FnZShMT0dfRVJSLCAiaW52YWxpZCAlczogJXUiLCBkZXNjcmlwdGlvbiwgKmJhdWQpOworICB9CisKKyAgcmV0dXJuIDA7Cit9CisKK2ludAorc2VyaWFsU2V0RGF0YUJpdHMgKFNlcmlhbERldmljZSAqc2VyaWFsLCB1bnNpZ25lZCBpbnQgYml0cykgeworICBsb2dNZXNzYWdlKExPR19DQVRFR09SWShTRVJJQUxfSU8pLCAic2V0IGRhdGEgYml0czogJXUiLCBiaXRzKTsKKyAgaWYgKHNlcmlhbFB1dERhdGFCaXRzKCZzZXJpYWwtPnBlbmRpbmdBdHRyaWJ1dGVzLCBiaXRzKSkgcmV0dXJuIDE7CisKKyAgbG9nVW5zdXBwb3J0ZWREYXRhQml0cyhiaXRzKTsKKyAgcmV0dXJuIDA7Cit9CisKK2ludAorc2VyaWFsU2V0U3RvcEJpdHMgKFNlcmlhbERldmljZSAqc2VyaWFsLCBTZXJpYWxTdG9wQml0cyBiaXRzKSB7CisgIGxvZ01lc3NhZ2UoTE9HX0NBVEVHT1JZKFNFUklBTF9JTyksICJzZXQgc3RvcCBiaXRzOiAldSIsIGJpdHMpOworICBpZiAoc2VyaWFsUHV0U3RvcEJpdHMoJnNlcmlhbC0+cGVuZGluZ0F0dHJpYnV0ZXMsIGJpdHMpKSByZXR1cm4gMTsKKworICBsb2dVbnN1cHBvcnRlZFN0b3BCaXRzKGJpdHMpOworICByZXR1cm4gMDsKK30KKworaW50CitzZXJpYWxTZXRQYXJpdHkgKFNlcmlhbERldmljZSAqc2VyaWFsLCBTZXJpYWxQYXJpdHkgcGFyaXR5KSB7CisgIGxvZ01lc3NhZ2UoTE9HX0NBVEVHT1JZKFNFUklBTF9JTyksICJzZXQgcGFyaXR5OiAldSIsIHBhcml0eSk7CisgIGlmIChzZXJpYWxQdXRQYXJpdHkoJnNlcmlhbC0+cGVuZGluZ0F0dHJpYnV0ZXMsIHBhcml0eSkpIHJldHVybiAxOworCisgIGxvZ1Vuc3VwcG9ydGVkUGFyaXR5KHBhcml0eSk7CisgIHJldHVybiAwOworfQorCisjaWZkZWYgSEFWRV9QT1NJWF9USFJFQURTCitzdGF0aWMgdm9pZAorc2VyaWFsRmxvd0NvbnRyb2xQcm9jX2lucHV0Q1RTIChTZXJpYWxEZXZpY2UgKnNlcmlhbCkgeworICBpbnQgdXAgPSBzZXJpYWxUZXN0TGluZUNUUyhzZXJpYWwpOworCisgIHdoaWxlICghc2VyaWFsLT5mbG93Q29udHJvbFN0b3ApIHsKKyAgICBzZXJpYWxTZXRMaW5lUlRTKHNlcmlhbCwgdXApOworICAgIHNlcmlhbFdhaXRMaW5lQ1RTKHNlcmlhbCwgKHVwID0gIXVwKSwgMCk7CisgIH0KK30KKworVEhSRUFEX0ZVTkNUSU9OKHNlcmlhbEZsb3dDb250cm9sVGhyZWFkKSB7CisgIFNlcmlhbERldmljZSAqc2VyaWFsID0gYXJndW1lbnQ7CisKKyAgc2VyaWFsLT5jdXJyZW50Rmxvd0NvbnRyb2xQcm9jKHNlcmlhbCk7CisgIHJldHVybiBOVUxMOworfQorCitzdGF0aWMgaW50CitzZXJpYWxTdGFydEZsb3dDb250cm9sVGhyZWFkIChTZXJpYWxEZXZpY2UgKnNlcmlhbCkgeworICBpZiAoIXNlcmlhbC0+Zmxvd0NvbnRyb2xSdW5uaW5nICYmIHNlcmlhbC0+Y3VycmVudEZsb3dDb250cm9sUHJvYykgeworICAgIHB0aHJlYWRfdCB0aHJlYWQ7CisgICAgcHRocmVhZF9hdHRyX3QgYXR0cmlidXRlczsKKworICAgIHB0aHJlYWRfYXR0cl9pbml0KCZhdHRyaWJ1dGVzKTsKKyAgICBwdGhyZWFkX2F0dHJfc2V0ZGV0YWNoc3RhdGUoJmF0dHJpYnV0ZXMsIFBUSFJFQURfQ1JFQVRFX0RFVEFDSEVEKTsKKworICAgIHNlcmlhbC0+Zmxvd0NvbnRyb2xTdG9wID0gMDsKKyAgICBpZiAoY3JlYXRlVGhyZWFkKCJzZXJpYWwtaW5wdXQtY3RzIiwgJnRocmVhZCwgJmF0dHJpYnV0ZXMsCisgICAgICAgICAgICAgICAgICAgICBzZXJpYWxGbG93Q29udHJvbFRocmVhZCwgc2VyaWFsKSkgeworICAgICAgbG9nU3lzdGVtRXJyb3IoInB0aHJlYWRfY3JlYXRlIik7CisgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBzZXJpYWwtPmZsb3dDb250cm9sVGhyZWFkID0gdGhyZWFkOworICAgIHNlcmlhbC0+Zmxvd0NvbnRyb2xSdW5uaW5nID0gMTsKKyAgfQorCisgIHJldHVybiAxOworfQorCitzdGF0aWMgdm9pZAorc2VyaWFsU3RvcEZsb3dDb250cm9sVGhyZWFkIChTZXJpYWxEZXZpY2UgKnNlcmlhbCkgeworICBpZiAoc2VyaWFsLT5mbG93Q29udHJvbFJ1bm5pbmcpIHsKKyAgICBzZXJpYWwtPmZsb3dDb250cm9sU3RvcCA9IDE7CisgICAgc2VyaWFsLT5mbG93Q29udHJvbFJ1bm5pbmcgPSAwOworICB9Cit9CisjZW5kaWYgLyogSEFWRV9QT1NJWF9USFJFQURTICovCisKK2ludAorc2VyaWFsU2V0Rmxvd0NvbnRyb2wgKFNlcmlhbERldmljZSAqc2VyaWFsLCBTZXJpYWxGbG93Q29udHJvbCBmbG93KSB7CisgIGxvZ01lc3NhZ2UoTE9HX0NBVEVHT1JZKFNFUklBTF9JTyksICJzZXQgZmxvdyBjb250cm9sOiAwWCUwMlgiLCBmbG93KTsKKyAgZmxvdyA9IHNlcmlhbFB1dEZsb3dDb250cm9sKCZzZXJpYWwtPnBlbmRpbmdBdHRyaWJ1dGVzLCBmbG93KTsKKworI2lmZGVmIEhBVkVfUE9TSVhfVEhSRUFEUworICBpZiAoZmxvdyAmIFNFUklBTF9GTE9XX0lOUFVUX0NUUykgeworICAgIGZsb3cgJj0gflNFUklBTF9GTE9XX0lOUFVUX0NUUzsKKyAgICBzZXJpYWwtPnBlbmRpbmdGbG93Q29udHJvbFByb2MgPSBzZXJpYWxGbG93Q29udHJvbFByb2NfaW5wdXRDVFM7CisgIH0gZWxzZSB7CisgICAgc2VyaWFsLT5wZW5kaW5nRmxvd0NvbnRyb2xQcm9jID0gTlVMTDsKKyAgfQorCisgIHsKKyAgICBpbnQgc3RhdGUgPSAhIXNlcmlhbC0+cGVuZGluZ0Zsb3dDb250cm9sUHJvYzsKKworICAgIGlmICghc2VyaWFsUHV0TW9kZW1TdGF0ZSgmc2VyaWFsLT5wZW5kaW5nQXR0cmlidXRlcywgc3RhdGUpKSB7CisgICAgICBsb2dNZXNzYWdlKExPR19XQVJOSU5HLCAidW5zdXBwb3J0ZWQgc2VyaWFsIG1vZGVtIHN0YXRlOiAlZCIsIHN0YXRlKTsKKyAgICB9CisgIH0KKyNlbmRpZiAvKiBIQVZFX1BPU0lYX1RIUkVBRFMgKi8KKworICBpZiAoIWZsb3cpIHJldHVybiAxOworICBsb2dVbnN1cHBvcnRlZEZsb3dDb250cm9sKGZsb3cpOworICByZXR1cm4gMDsKK30KKworaW50CitzZXJpYWxTZXRQYXJhbWV0ZXJzIChTZXJpYWxEZXZpY2UgKnNlcmlhbCwgY29uc3QgU2VyaWFsUGFyYW1ldGVycyAqcGFyYW1ldGVycykgeworICBpZiAoIXNlcmlhbFNldEJhdWQoc2VyaWFsLCBwYXJhbWV0ZXJzLT5iYXVkKSkgcmV0dXJuIDA7CisgIGlmICghc2VyaWFsU2V0RGF0YUJpdHMoc2VyaWFsLCBwYXJhbWV0ZXJzLT5kYXRhQml0cykpIHJldHVybiAwOworICBpZiAoIXNlcmlhbFNldFN0b3BCaXRzKHNlcmlhbCwgcGFyYW1ldGVycy0+c3RvcEJpdHMpKSByZXR1cm4gMDsKKyAgaWYgKCFzZXJpYWxTZXRQYXJpdHkoc2VyaWFsLCBwYXJhbWV0ZXJzLT5wYXJpdHkpKSByZXR1cm4gMDsKKyAgaWYgKCFzZXJpYWxTZXRGbG93Q29udHJvbChzZXJpYWwsIHBhcmFtZXRlcnMtPmZsb3dDb250cm9sKSkgcmV0dXJuIDA7CisgIHJldHVybiAxOworfQorCit1bnNpZ25lZCBpbnQKK3NlcmlhbEdldENoYXJhY3RlclNpemUgKGNvbnN0IFNlcmlhbFBhcmFtZXRlcnMgKnBhcmFtZXRlcnMpIHsKKyAgdW5zaWduZWQgaW50IHNpemUgPSAxIC8qIHN0YXJ0IGJpdCAqLyArIHBhcmFtZXRlcnMtPmRhdGFCaXRzOworICBzaXplICs9IChwYXJhbWV0ZXJzLT5zdG9wQml0cyA9PSBTRVJJQUxfU1RPUF8xKT8gMTogMjsKKyAgaWYgKHBhcmFtZXRlcnMtPnBhcml0eSAhPSBTRVJJQUxfUEFSSVRZX05PTkUpIHNpemUgKz0gMTsKKyAgcmV0dXJuIHNpemU7Cit9CisKK3Vuc2lnbmVkIGludAorc2VyaWFsR2V0Q2hhcmFjdGVyQml0cyAoU2VyaWFsRGV2aWNlICpzZXJpYWwpIHsKKyAgY29uc3QgU2VyaWFsQXR0cmlidXRlcyAqYXR0cmlidXRlcyA9ICZzZXJpYWwtPnBlbmRpbmdBdHRyaWJ1dGVzOworICByZXR1cm4gMSAvKiBzdGFydCBiaXQgKi8KKyAgICAgICArIHNlcmlhbEdldERhdGFCaXRzKGF0dHJpYnV0ZXMpCisgICAgICAgKyBzZXJpYWxHZXRQYXJpdHlCaXRzKGF0dHJpYnV0ZXMpCisgICAgICAgKyBzZXJpYWxHZXRTdG9wQml0cyhhdHRyaWJ1dGVzKQorICAgICAgIDsKK30KKworaW50CitzZXJpYWxEaXNjYXJkSW5wdXQgKFNlcmlhbERldmljZSAqc2VyaWFsKSB7CisgIGxvZ01lc3NhZ2UoTE9HX0NBVEVHT1JZKFNFUklBTF9JTyksICJkaXNjYXJkIGlucHV0Iik7CisgIHJldHVybiBzZXJpYWxDYW5jZWxJbnB1dChzZXJpYWwpOworfQorCitpbnQKK3NlcmlhbERpc2NhcmRPdXRwdXQgKFNlcmlhbERldmljZSAqc2VyaWFsKSB7CisgIGxvZ01lc3NhZ2UoTE9HX0NBVEVHT1JZKFNFUklBTF9JTyksICJkaXNjYXJkIG91dHB1dCIpOworICByZXR1cm4gc2VyaWFsQ2FuY2VsT3V0cHV0KHNlcmlhbCk7Cit9CisKK2ludAorc2VyaWFsRmx1c2hPdXRwdXQgKFNlcmlhbERldmljZSAqc2VyaWFsKSB7CisgIGxvZ01lc3NhZ2UoTE9HX0NBVEVHT1JZKFNFUklBTF9JTyksICJmbHVzaCBvdXRwdXQiKTsKKworICBpZiAoc2VyaWFsLT5zdHJlYW0pIHsKKyAgICBpZiAoZmZsdXNoKHNlcmlhbC0+c3RyZWFtKSA9PSBFT0YpIHsKKyAgICAgIGxvZ1N5c3RlbUVycm9yKCJmZmx1c2giKTsKKyAgICAgIHJldHVybiAwOworICAgIH0KKyAgfQorICByZXR1cm4gMTsKK30KKworaW50CitzZXJpYWxBd2FpdE91dHB1dCAoU2VyaWFsRGV2aWNlICpzZXJpYWwpIHsKKyAgaWYgKCFzZXJpYWxGbHVzaE91dHB1dChzZXJpYWwpKSByZXR1cm4gMDsKKyAgaWYgKCFzZXJpYWxEcmFpbk91dHB1dChzZXJpYWwpKSByZXR1cm4gMDsKKyAgcmV0dXJuIDE7Cit9CisKK3N0YXRpYyB2b2lkCitzZXJpYWxDb3B5QXR0cmlidXRlcyAoU2VyaWFsQXR0cmlidXRlcyAqZGVzdGluYXRpb24sIGNvbnN0IFNlcmlhbEF0dHJpYnV0ZXMgKnNvdXJjZSkgeworICBtZW1jcHkoZGVzdGluYXRpb24sIHNvdXJjZSwgc2l6ZW9mKCpkZXN0aW5hdGlvbikpOworfQorCitzdGF0aWMgaW50CitzZXJpYWxDb21wYXJlQXR0cmlidXRlcyAoY29uc3QgU2VyaWFsQXR0cmlidXRlcyAqYXR0cmlidXRlcywgY29uc3QgU2VyaWFsQXR0cmlidXRlcyAqcmVmZXJlbmNlKSB7CisgIHJldHVybiBtZW1jbXAoYXR0cmlidXRlcywgcmVmZXJlbmNlLCBzaXplb2YoKmF0dHJpYnV0ZXMpKSA9PSAwOworfQorCitzdGF0aWMgaW50CitzZXJpYWxSZWFkQXR0cmlidXRlcyAoU2VyaWFsRGV2aWNlICpzZXJpYWwpIHsKKyAgcmV0dXJuIHNlcmlhbEdldEF0dHJpYnV0ZXMoc2VyaWFsLCAmc2VyaWFsLT5jdXJyZW50QXR0cmlidXRlcyk7Cit9CisKK3N0YXRpYyBpbnQKK3NlcmlhbFdyaXRlQXR0cmlidXRlcyAoU2VyaWFsRGV2aWNlICpzZXJpYWwsIGNvbnN0IFNlcmlhbEF0dHJpYnV0ZXMgKmF0dHJpYnV0ZXMpIHsKKyAgaWYgKCFzZXJpYWxDb21wYXJlQXR0cmlidXRlcyhhdHRyaWJ1dGVzLCAmc2VyaWFsLT5jdXJyZW50QXR0cmlidXRlcykpIHsKKyAgICBpZiAoIXNlcmlhbEF3YWl0T3V0cHV0KHNlcmlhbCkpIHJldHVybiAwOworICAgIGxvZ0J5dGVzKExPR19DQVRFR09SWShTRVJJQUxfSU8pLCAiYXR0cmlidXRlcyIsIGF0dHJpYnV0ZXMsIHNpemVvZigqYXR0cmlidXRlcykpOworICAgIGlmICghc2VyaWFsUHV0QXR0cmlidXRlcyhzZXJpYWwsIGF0dHJpYnV0ZXMpKSByZXR1cm4gMDsKKyAgICBzZXJpYWxDb3B5QXR0cmlidXRlcygmc2VyaWFsLT5jdXJyZW50QXR0cmlidXRlcywgYXR0cmlidXRlcyk7CisgIH0KKworICByZXR1cm4gMTsKK30KKworc3RhdGljIGludAorc2VyaWFsRmx1c2hBdHRyaWJ1dGVzIChTZXJpYWxEZXZpY2UgKnNlcmlhbCkgeworI2lmZGVmIEhBVkVfUE9TSVhfVEhSRUFEUworICBpbnQgcmVzdGFydEZsb3dDb250cm9sVGhyZWFkID0gc2VyaWFsLT5wZW5kaW5nRmxvd0NvbnRyb2xQcm9jICE9IHNlcmlhbC0+Y3VycmVudEZsb3dDb250cm9sUHJvYzsKKyAgaWYgKHJlc3RhcnRGbG93Q29udHJvbFRocmVhZCkgc2VyaWFsU3RvcEZsb3dDb250cm9sVGhyZWFkKHNlcmlhbCk7CisjZW5kaWYgLyogSEFWRV9QT1NJWF9USFJFQURTICovCisKKyAgaWYgKCFzZXJpYWxXcml0ZUF0dHJpYnV0ZXMoc2VyaWFsLCAmc2VyaWFsLT5wZW5kaW5nQXR0cmlidXRlcykpIHJldHVybiAwOworCisjaWZkZWYgSEFWRV9QT1NJWF9USFJFQURTCisgIGlmIChyZXN0YXJ0Rmxvd0NvbnRyb2xUaHJlYWQpIHsKKyAgICBzZXJpYWwtPmN1cnJlbnRGbG93Q29udHJvbFByb2MgPSBzZXJpYWwtPnBlbmRpbmdGbG93Q29udHJvbFByb2M7CisgICAgaWYgKCFzZXJpYWxTdGFydEZsb3dDb250cm9sVGhyZWFkKHNlcmlhbCkpIHJldHVybiAwOworICB9CisjZW5kaWYgLyogSEFWRV9QT1NJWF9USFJFQURTICovCisKKyAgcmV0dXJuIDE7Cit9CisKK2ludAorc2VyaWFsQXdhaXRJbnB1dCAoU2VyaWFsRGV2aWNlICpzZXJpYWwsIGludCB0aW1lb3V0KSB7CisgIGlmICghc2VyaWFsRmx1c2hBdHRyaWJ1dGVzKHNlcmlhbCkpIHJldHVybiAwOworICBpZiAoIXNlcmlhbFBvbGxJbnB1dChzZXJpYWwsIHRpbWVvdXQpKSByZXR1cm4gMDsKKyAgcmV0dXJuIDE7Cit9CisKK3NzaXplX3QKK3NlcmlhbFJlYWREYXRhICgKKyAgU2VyaWFsRGV2aWNlICpzZXJpYWwsCisgIHZvaWQgKmJ1ZmZlciwgc2l6ZV90IHNpemUsCisgIGludCBpbml0aWFsVGltZW91dCwgaW50IHN1YnNlcXVlbnRUaW1lb3V0CispIHsKKyAgaWYgKCFzZXJpYWxGbHVzaEF0dHJpYnV0ZXMoc2VyaWFsKSkgcmV0dXJuIC0xOworCisgIHsKKyAgICBzc2l6ZV90IHJlc3VsdCA9IHNlcmlhbEdldERhdGEoc2VyaWFsLCBidWZmZXIsIHNpemUsIGluaXRpYWxUaW1lb3V0LCBzdWJzZXF1ZW50VGltZW91dCk7CisKKyAgICBpZiAocmVzdWx0ID4gMCkgeworICAgICAgbG9nQnl0ZXMoTE9HX0NBVEVHT1JZKFNFUklBTF9JTyksICJpbnB1dCIsIGJ1ZmZlciwgcmVzdWx0KTsKKyAgICB9CisKKyAgICByZXR1cm4gcmVzdWx0OworICB9Cit9CisKK2ludAorc2VyaWFsUmVhZENodW5rICgKKyAgU2VyaWFsRGV2aWNlICpzZXJpYWwsCisgIHZvaWQgKmJ1ZmZlciwgc2l6ZV90ICpvZmZzZXQsIHNpemVfdCBjb3VudCwKKyAgaW50IGluaXRpYWxUaW1lb3V0LCBpbnQgc3Vic2VxdWVudFRpbWVvdXQKKykgeworICB1bnNpZ25lZCBjaGFyICpieXRlID0gYnVmZmVyOworICBjb25zdCB1bnNpZ25lZCBjaGFyICpjb25zdCBmaXJzdCA9IGJ5dGU7CisgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmNvbnN0IGVuZCA9IGZpcnN0ICsgY291bnQ7CisgIGludCB0aW1lb3V0ID0gKm9mZnNldD8gc3Vic2VxdWVudFRpbWVvdXQ6IGluaXRpYWxUaW1lb3V0OworCisgIGlmICghc2VyaWFsRmx1c2hBdHRyaWJ1dGVzKHNlcmlhbCkpIHJldHVybiAwOworICBieXRlICs9ICpvZmZzZXQ7CisKKyAgd2hpbGUgKGJ5dGUgPCBlbmQpIHsKKyAgICBzc2l6ZV90IHJlc3VsdCA9IHNlcmlhbEdldERhdGEoc2VyaWFsLCBieXRlLCAxLCB0aW1lb3V0LCBzdWJzZXF1ZW50VGltZW91dCk7CisKKyAgICBpZiAoIXJlc3VsdCkgeworICAgICAgcmVzdWx0ID0gLTE7CisgICAgICBlcnJubyA9IEVBR0FJTjsKKyAgICB9CisKKyAgICBpZiAocmVzdWx0ID09IC0xKSB7CisgICAgICBpZiAoZXJybm8gPT0gRUlOVFIpIGNvbnRpbnVlOworICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgYnl0ZSArPSAxOworICAgICpvZmZzZXQgKz0gMTsKKyAgICB0aW1lb3V0ID0gc3Vic2VxdWVudFRpbWVvdXQ7CisgIH0KKworICBpZiAoYnl0ZSA+IGZpcnN0KSB7CisgICAgbG9nQnl0ZXMoTE9HX0NBVEVHT1JZKFNFUklBTF9JTyksICJpbnB1dCIsIGZpcnN0LCAoYnl0ZSAtIGZpcnN0KSk7CisgIH0KKworICByZXR1cm4gMTsKK30KKworc3NpemVfdAorc2VyaWFsV3JpdGVEYXRhICgKKyAgU2VyaWFsRGV2aWNlICpzZXJpYWwsCisgIGNvbnN0IHZvaWQgKmRhdGEsIHNpemVfdCBzaXplCispIHsKKyAgaWYgKCFzZXJpYWxGbHVzaEF0dHJpYnV0ZXMoc2VyaWFsKSkgcmV0dXJuIC0xOworICBpZiAoc2l6ZSA+IDApIGxvZ0J5dGVzKExPR19DQVRFR09SWShTRVJJQUxfSU8pLCAib3V0cHV0IiwgZGF0YSwgc2l6ZSk7CisgIHJldHVybiBzZXJpYWxQdXREYXRhKHNlcmlhbCwgZGF0YSwgc2l6ZSk7Cit9CisKK3N0YXRpYyBpbnQKK3NlcmlhbFJlYWRMaW5lcyAoU2VyaWFsRGV2aWNlICpzZXJpYWwsIFNlcmlhbExpbmVzICpsaW5lcykgeworICBpbnQgcmVzdWx0ID0gc2VyaWFsR2V0TGluZXMoc2VyaWFsKTsKKyAgaWYgKHJlc3VsdCkgKmxpbmVzID0gc2VyaWFsLT5saW5lc1N0YXRlOworICByZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgaW50CitzZXJpYWxXcml0ZUxpbmVzIChTZXJpYWxEZXZpY2UgKnNlcmlhbCwgU2VyaWFsTGluZXMgaGlnaCwgU2VyaWFsTGluZXMgbG93KSB7CisgIHJldHVybiBzZXJpYWxQdXRMaW5lcyhzZXJpYWwsIGhpZ2gsIGxvdyk7Cit9CisKK3N0YXRpYyBpbnQKK3NlcmlhbFNldExpbmUgKFNlcmlhbERldmljZSAqc2VyaWFsLCBTZXJpYWxMaW5lcyBsaW5lLCBpbnQgdXApIHsKKyAgcmV0dXJuIHNlcmlhbFdyaXRlTGluZXMoc2VyaWFsLCB1cD9saW5lOjAsIHVwPzA6bGluZSk7Cit9CisKK2ludAorc2VyaWFsU2V0TGluZVJUUyAoU2VyaWFsRGV2aWNlICpzZXJpYWwsIGludCB1cCkgeworICByZXR1cm4gc2VyaWFsU2V0TGluZShzZXJpYWwsIFNFUklBTF9MSU5FX1JUUywgdXApOworfQorCitpbnQKK3NlcmlhbFNldExpbmVEVFIgKFNlcmlhbERldmljZSAqc2VyaWFsLCBpbnQgdXApIHsKKyAgcmV0dXJuIHNlcmlhbFNldExpbmUoc2VyaWFsLCBTRVJJQUxfTElORV9EVFIsIHVwKTsKK30KKworc3RhdGljIGludAorc2VyaWFsVGVzdExpbmVzIChTZXJpYWxEZXZpY2UgKnNlcmlhbCwgU2VyaWFsTGluZXMgaGlnaCwgU2VyaWFsTGluZXMgbG93KSB7CisgIFNlcmlhbExpbmVzIGxpbmVzOworICBpZiAoc2VyaWFsUmVhZExpbmVzKHNlcmlhbCwgJmxpbmVzKSkKKyAgICBpZiAoKChsaW5lcyAmIGhpZ2gpID09IGhpZ2gpICYmICgofmxpbmVzICYgbG93KSA9PSBsb3cpKQorICAgICAgcmV0dXJuIDE7CisgIHJldHVybiAwOworfQorCitpbnQKK3NlcmlhbFRlc3RMaW5lQ1RTIChTZXJpYWxEZXZpY2UgKnNlcmlhbCkgeworICByZXR1cm4gc2VyaWFsVGVzdExpbmVzKHNlcmlhbCwgU0VSSUFMX0xJTkVfQ1RTLCAwKTsKK30KKworaW50CitzZXJpYWxUZXN0TGluZURTUiAoU2VyaWFsRGV2aWNlICpzZXJpYWwpIHsKKyAgcmV0dXJuIHNlcmlhbFRlc3RMaW5lcyhzZXJpYWwsIFNFUklBTF9MSU5FX0RTUiwgMCk7Cit9CisKK3N0YXRpYyBpbnQKK3NlcmlhbERlZmluZVdhaXRMaW5lcyAoU2VyaWFsRGV2aWNlICpzZXJpYWwsIFNlcmlhbExpbmVzIGxpbmVzKSB7CisgIGlmIChsaW5lcyAhPSBzZXJpYWwtPndhaXRMaW5lcykgeworICAgIGlmICghc2VyaWFsUmVnaXN0ZXJXYWl0TGluZXMoc2VyaWFsLCBsaW5lcykpIHJldHVybiAwOworICAgIHNlcmlhbC0+d2FpdExpbmVzID0gbGluZXM7CisgIH0KKworICByZXR1cm4gMTsKK30KKworc3RhdGljIGludAorc2VyaWFsQXdhaXRMaW5lQ2hhbmdlIChTZXJpYWxEZXZpY2UgKnNlcmlhbCkgeworICByZXR1cm4gc2VyaWFsTW9uaXRvcldhaXRMaW5lcyhzZXJpYWwpOworfQorCitzdGF0aWMgaW50CitzZXJpYWxXYWl0TGluZXMgKFNlcmlhbERldmljZSAqc2VyaWFsLCBTZXJpYWxMaW5lcyBoaWdoLCBTZXJpYWxMaW5lcyBsb3cpIHsKKyAgU2VyaWFsTGluZXMgbGluZXMgPSBoaWdoIHwgbG93OworICBpbnQgb2sgPSAwOworCisgIGlmIChzZXJpYWxEZWZpbmVXYWl0TGluZXMoc2VyaWFsLCBsaW5lcykpIHsKKyAgICB3aGlsZSAoIXNlcmlhbFRlc3RMaW5lcyhzZXJpYWwsIGhpZ2gsIGxvdykpCisgICAgICBpZiAoIXNlcmlhbEF3YWl0TGluZUNoYW5nZShzZXJpYWwpKQorICAgICAgICBnb3RvIGRvbmU7CisgICAgb2sgPSAxOworICB9CisKK2RvbmU6CisgIHNlcmlhbERlZmluZVdhaXRMaW5lcyhzZXJpYWwsIDApOworICByZXR1cm4gb2s7Cit9CisKK3N0YXRpYyBpbnQKK3NlcmlhbFdhaXRGbGFuayAoU2VyaWFsRGV2aWNlICpzZXJpYWwsIFNlcmlhbExpbmVzIGxpbmUsIGludCB1cCkgeworICBpbnQgb2sgPSAwOworCisgIGlmIChzZXJpYWxEZWZpbmVXYWl0TGluZXMoc2VyaWFsLCBsaW5lKSkgeworICAgIHdoaWxlICghc2VyaWFsVGVzdExpbmVzKHNlcmlhbCwgdXA/MDpsaW5lLCB1cD9saW5lOjApKQorICAgICAgaWYgKCFzZXJpYWxBd2FpdExpbmVDaGFuZ2Uoc2VyaWFsKSkKKyAgICAgICAgZ290byBkb25lOworICAgIGlmIChzZXJpYWxBd2FpdExpbmVDaGFuZ2Uoc2VyaWFsKSkgb2sgPSAxOworICB9CisKK2RvbmU6CisgIHNlcmlhbERlZmluZVdhaXRMaW5lcyhzZXJpYWwsIDApOworICByZXR1cm4gb2s7Cit9CisKK2ludAorc2VyaWFsV2FpdExpbmUgKFNlcmlhbERldmljZSAqc2VyaWFsLCBTZXJpYWxMaW5lcyBsaW5lLCBpbnQgdXAsIGludCBmbGFuaykgeworICByZXR1cm4gZmxhbms/IHNlcmlhbFdhaXRGbGFuayhzZXJpYWwsIGxpbmUsIHVwKToKKyAgICAgICAgICAgICAgICBzZXJpYWxXYWl0TGluZXMoc2VyaWFsLCB1cD9saW5lOjAsIHVwPzA6bGluZSk7Cit9CisKK2ludAorc2VyaWFsV2FpdExpbmVDVFMgKFNlcmlhbERldmljZSAqc2VyaWFsLCBpbnQgdXAsIGludCBmbGFuaykgeworICByZXR1cm4gc2VyaWFsV2FpdExpbmUoc2VyaWFsLCBTRVJJQUxfTElORV9DVFMsIHVwLCBmbGFuayk7Cit9CisKK2ludAorc2VyaWFsV2FpdExpbmVEU1IgKFNlcmlhbERldmljZSAqc2VyaWFsLCBpbnQgdXAsIGludCBmbGFuaykgeworICByZXR1cm4gc2VyaWFsV2FpdExpbmUoc2VyaWFsLCBTRVJJQUxfTElORV9EU1IsIHVwLCBmbGFuayk7Cit9CisKK2ludAorc2VyaWFsUHJlcGFyZURldmljZSAoU2VyaWFsRGV2aWNlICpzZXJpYWwpIHsKKyAgaWYgKHNlcmlhbFJlYWRBdHRyaWJ1dGVzKHNlcmlhbCkpIHsKKyAgICBzZXJpYWxDb3B5QXR0cmlidXRlcygmc2VyaWFsLT5vcmlnaW5hbEF0dHJpYnV0ZXMsICZzZXJpYWwtPmN1cnJlbnRBdHRyaWJ1dGVzKTsKKyAgICBzZXJpYWxJbml0aWFsaXplQXR0cmlidXRlcygmc2VyaWFsLT5wZW5kaW5nQXR0cmlidXRlcyk7CisKKyAgICBzZXJpYWwtPmxpbmVzU3RhdGUgPSAwOworICAgIHNlcmlhbC0+d2FpdExpbmVzID0gMDsKKworI2lmZGVmIEhBVkVfUE9TSVhfVEhSRUFEUworICAgIHNlcmlhbC0+Y3VycmVudEZsb3dDb250cm9sUHJvYyA9IE5VTEw7CisgICAgc2VyaWFsLT5wZW5kaW5nRmxvd0NvbnRyb2xQcm9jID0gTlVMTDsKKyAgICBzZXJpYWwtPmZsb3dDb250cm9sUnVubmluZyA9IDA7CisjZW5kaWYgLyogSEFWRV9QT1NJWF9USFJFQURTICovCisKKyAgICByZXR1cm4gMTsKKyAgfQorCisgIHJldHVybiAwOworfQorCitpbnQKK3NlcmlhbFBhcnNlQmF1ZCAodW5zaWduZWQgaW50ICpiYXVkLCBjb25zdCBjaGFyICpzdHJpbmcpIHsKKyAgaWYgKGlzVW5zaWduZWRJbnRlZ2VyKGJhdWQsIHN0cmluZykpIHJldHVybiAxOworCisgIGxvZ01lc3NhZ2UoTE9HX1dBUk5JTkcsICJpbnZhbGlkIHNlcmlhbCBiYXVkOiAlcyIsIHN0cmluZyk7CisgIHJldHVybiAwOworfQorCitpbnQKK3NlcmlhbFBhcnNlRGF0YUJpdHMgKHVuc2lnbmVkIGludCAqYml0cywgY29uc3QgY2hhciAqc3RyaW5nKSB7CisgIGlmIChpc1Vuc2lnbmVkSW50ZWdlcihiaXRzLCBzdHJpbmcpKSByZXR1cm4gMTsKKworICBsb2dNZXNzYWdlKExPR19XQVJOSU5HLCAiaW52YWxpZCBzZXJpYWwgZGF0YSBiaXQgY291bnQ6ICVzIiwgc3RyaW5nKTsKKyAgcmV0dXJuIDA7Cit9CisKK2ludAorc2VyaWFsUGFyc2VTdG9wQml0cyAodW5zaWduZWQgaW50ICpiaXRzLCBjb25zdCBjaGFyICpzdHJpbmcpIHsKKyAgaWYgKGlzVW5zaWduZWRJbnRlZ2VyKGJpdHMsIHN0cmluZykpIHJldHVybiAxOworCisgIGxvZ01lc3NhZ2UoTE9HX1dBUk5JTkcsICJpbnZhbGlkIHNlcmlhbCBzdG9wIGJpdCBjb3VudDogJXMiLCBzdHJpbmcpOworICByZXR1cm4gMDsKK30KKworaW50CitzZXJpYWxQYXJzZVBhcml0eSAoU2VyaWFsUGFyaXR5ICpwYXJpdHksIGNvbnN0IGNoYXIgKnN0cmluZykgeworICBpZiAoaXNBYmJyZXZpYXRpb24oc3RyaW5nLCAibm9uZSIpKSB7CisgICAgKnBhcml0eSA9IFNFUklBTF9QQVJJVFlfTk9ORTsKKyAgfSBlbHNlIGlmIChpc0FiYnJldmlhdGlvbihzdHJpbmcsICJvZGQiKSkgeworICAgICpwYXJpdHkgPSBTRVJJQUxfUEFSSVRZX09ERDsKKyAgfSBlbHNlIGlmIChpc0FiYnJldmlhdGlvbihzdHJpbmcsICJldmVuIikpIHsKKyAgICAqcGFyaXR5ID0gU0VSSUFMX1BBUklUWV9FVkVOOworICB9IGVsc2UgaWYgKGlzQWJicmV2aWF0aW9uKHN0cmluZywgInNwYWNlIikpIHsKKyAgICAqcGFyaXR5ID0gU0VSSUFMX1BBUklUWV9TUEFDRTsKKyAgfSBlbHNlIGlmIChpc0FiYnJldmlhdGlvbihzdHJpbmcsICJtYXJrIikpIHsKKyAgICAqcGFyaXR5ID0gU0VSSUFMX1BBUklUWV9NQVJLOworICB9IGVsc2UgeworICAgIGxvZ01lc3NhZ2UoTE9HX1dBUk5JTkcsICJpbnZhbGlkIHNlcmlhbCBwYXJpdHk6ICVzIiwgc3RyaW5nKTsKKyAgICByZXR1cm4gMDsKKyAgfQorCisgIHJldHVybiAxOworfQorCitpbnQKK3NlcmlhbFBhcnNlRmxvd0NvbnRyb2wgKFNlcmlhbEZsb3dDb250cm9sICpmbG93LCBjb25zdCBjaGFyICpzdHJpbmcpIHsKKyAgaWYgKGlzQWJicmV2aWF0aW9uKHN0cmluZywgIm5vbmUiKSkgeworICAgICpmbG93ID0gU0VSSUFMX0ZMT1dfTk9ORTsKKyAgfSBlbHNlIGlmIChpc0FiYnJldmlhdGlvbihzdHJpbmcsICJoYXJkd2FyZSIpKSB7CisgICAgKmZsb3cgPSBTRVJJQUxfRkxPV19IQVJEV0FSRTsKKyAgfSBlbHNlIHsKKyAgICBsb2dNZXNzYWdlKExPR19XQVJOSU5HLCAiaW52YWxpZCBzZXJpYWwgZmxvdyBjb250cm9sOiAlcyIsIHN0cmluZyk7CisgICAgcmV0dXJuIDA7CisgIH0KKworICByZXR1cm4gMTsKK30KKworc3RhdGljIGludAorc2VyaWFsQ29uZmlndXJlQmF1ZCAoU2VyaWFsRGV2aWNlICpzZXJpYWwsIGNvbnN0IGNoYXIgKnN0cmluZykgeworICBpZiAoc3RyaW5nICYmICpzdHJpbmcpIHsKKyAgICB1bnNpZ25lZCBpbnQgYmF1ZDsKKworICAgIGlmICghc2VyaWFsUGFyc2VCYXVkKCZiYXVkLCBzdHJpbmcpKSByZXR1cm4gMDsKKyAgICBpZiAoIXNlcmlhbFNldEJhdWQoc2VyaWFsLCBiYXVkKSkgcmV0dXJuIDA7CisgIH0KKworICByZXR1cm4gMTsKK30KKworc3RhdGljIGludAorc2VyaWFsQ29uZmlndXJlRGF0YUJpdHMgKFNlcmlhbERldmljZSAqc2VyaWFsLCBjb25zdCBjaGFyICpzdHJpbmcpIHsKKyAgaWYgKHN0cmluZyAmJiAqc3RyaW5nKSB7CisgICAgdW5zaWduZWQgaW50IGJpdHM7CisKKyAgICBpZiAoIXNlcmlhbFBhcnNlRGF0YUJpdHMoJmJpdHMsIHN0cmluZykpIHJldHVybiAwOworICAgIGlmICghc2VyaWFsU2V0RGF0YUJpdHMoc2VyaWFsLCBiaXRzKSkgcmV0dXJuIDA7CisgIH0KKworICByZXR1cm4gMTsKK30KKworc3RhdGljIGludAorc2VyaWFsQ29uZmlndXJlU3RvcEJpdHMgKFNlcmlhbERldmljZSAqc2VyaWFsLCBjb25zdCBjaGFyICpzdHJpbmcpIHsKKyAgaWYgKHN0cmluZyAmJiAqc3RyaW5nKSB7CisgICAgdW5zaWduZWQgaW50IGJpdHM7CisKKyAgICBpZiAoIXNlcmlhbFBhcnNlU3RvcEJpdHMoJmJpdHMsIHN0cmluZykpIHJldHVybiAwOworICAgIGlmICghc2VyaWFsU2V0U3RvcEJpdHMoc2VyaWFsLCBiaXRzKSkgcmV0dXJuIDA7CisgIH0KKworICByZXR1cm4gMTsKK30KKworc3RhdGljIGludAorc2VyaWFsQ29uZmlndXJlUGFyaXR5IChTZXJpYWxEZXZpY2UgKnNlcmlhbCwgY29uc3QgY2hhciAqc3RyaW5nKSB7CisgIGlmIChzdHJpbmcgJiYgKnN0cmluZykgeworICAgIFNlcmlhbFBhcml0eSBwYXJpdHk7CisKKyAgICBpZiAoIXNlcmlhbFBhcnNlUGFyaXR5KCZwYXJpdHksIHN0cmluZykpIHJldHVybiAwOworICAgIGlmICghc2VyaWFsU2V0UGFyaXR5KHNlcmlhbCwgcGFyaXR5KSkgcmV0dXJuIDA7CisgIH0KKworICByZXR1cm4gMTsKK30KKworc3RhdGljIGludAorc2VyaWFsQ29uZmlndXJlRmxvd0NvbnRyb2wgKFNlcmlhbERldmljZSAqc2VyaWFsLCBjb25zdCBjaGFyICpzdHJpbmcpIHsKKyAgaWYgKHN0cmluZyAmJiAqc3RyaW5nKSB7CisgICAgU2VyaWFsRmxvd0NvbnRyb2wgZmxvdzsKKworICAgIGlmICghc2VyaWFsUGFyc2VGbG93Q29udHJvbCgmZmxvdywgc3RyaW5nKSkgcmV0dXJuIDA7CisgICAgaWYgKCFzZXJpYWxTZXRGbG93Q29udHJvbChzZXJpYWwsIGZsb3cpKSByZXR1cm4gMDsKKyAgfQorCisgIHJldHVybiAxOworfQorCit0eXBlZGVmIGVudW0geworICBTRVJJQUxfUEFSTV9OQU1FLAorICBTRVJJQUxfUEFSTV9CQVVELAorICBTRVJJQUxfUEFSTV9EQVRBX0JJVFMsCisgIFNFUklBTF9QQVJNX1NUT1BfQklUUywKKyAgU0VSSUFMX1BBUk1fREFUQV9QQVJJVFksCisgIFNFUklBTF9QQVJNX0ZMT1dfQ09OVFJPTAorfSBTZXJpYWxEZXZpY2VQYXJhbWV0ZXI7CisKK3N0YXRpYyBjb25zdCBjaGFyICpjb25zdCBzZXJpYWxEZXZpY2VQYXJhbWV0ZXJOYW1lc1tdID0geworICAibmFtZSIsCisgICJiYXVkIiwKKyAgImRhdGFCaXRzIiwKKyAgInN0b3BCaXRzIiwKKyAgInBhcml0eSIsCisgICJmbG93Q29udHJvbCIsCisgIE5VTEwKK307CisKK3N0YXRpYyBjaGFyICoqCitzZXJpYWxHZXREZXZpY2VQYXJhbWV0ZXJzIChjb25zdCBjaGFyICppZGVudGlmaWVyKSB7CisgIGlmICghaWRlbnRpZmllcikgaWRlbnRpZmllciA9ICIiOworICByZXR1cm4gZ2V0RGV2aWNlUGFyYW1ldGVycyhzZXJpYWxEZXZpY2VQYXJhbWV0ZXJOYW1lcywgaWRlbnRpZmllcik7Cit9CisKK1NlcmlhbERldmljZSAqCitzZXJpYWxPcGVuRGV2aWNlIChjb25zdCBjaGFyICppZGVudGlmaWVyKSB7CisgIGNoYXIgKipwYXJhbWV0ZXJzID0gc2VyaWFsR2V0RGV2aWNlUGFyYW1ldGVycyhpZGVudGlmaWVyKTsKKworICBpZiAocGFyYW1ldGVycykgeworICAgIFNlcmlhbERldmljZSAqc2VyaWFsOworCisgICAgaWYgKChzZXJpYWwgPSBtYWxsb2Moc2l6ZW9mKCpzZXJpYWwpKSkpIHsKKyAgICAgIG1lbXNldChzZXJpYWwsIDAsIHNpemVvZigqc2VyaWFsKSk7CisKKyAgICAgIHsKKyAgICAgICAgY29uc3QgY2hhciAqbmFtZSA9IHBhcmFtZXRlcnNbU0VSSUFMX1BBUk1fTkFNRV07CisgICAgICAgIGlmICghKm5hbWUpIG5hbWUgPSBTRVJJQUxfRklSU1RfREVWSUNFOworICAgICAgICBzZXJpYWwtPmRldmljZVBhdGggPSBnZXREZXZpY2VQYXRoKG5hbWUpOworICAgICAgfQorCisgICAgICBpZiAoc2VyaWFsLT5kZXZpY2VQYXRoKSB7CisgICAgICAgIHNlcmlhbC0+ZmlsZURlc2NyaXB0b3IgPSAtMTsKKyAgICAgICAgc2VyaWFsLT5zdHJlYW0gPSBOVUxMOworCisgICAgICAgIGlmIChzZXJpYWxDb25uZWN0RGV2aWNlKHNlcmlhbCwgc2VyaWFsLT5kZXZpY2VQYXRoKSkgeworICAgICAgICAgIGludCBvayA9IDE7CisKKyAgICAgICAgICBpZiAoIXNlcmlhbENvbmZpZ3VyZUJhdWQoc2VyaWFsLCBwYXJhbWV0ZXJzW1NFUklBTF9QQVJNX0JBVURdKSkgb2sgPSAwOworICAgICAgICAgIGlmICghc2VyaWFsQ29uZmlndXJlRGF0YUJpdHMoc2VyaWFsLCBwYXJhbWV0ZXJzW1NFUklBTF9QQVJNX0RBVEFfQklUU10pKSBvayA9IDA7CisgICAgICAgICAgaWYgKCFzZXJpYWxDb25maWd1cmVTdG9wQml0cyhzZXJpYWwsIHBhcmFtZXRlcnNbU0VSSUFMX1BBUk1fU1RPUF9CSVRTXSkpIG9rID0gMDsKKyAgICAgICAgICBpZiAoIXNlcmlhbENvbmZpZ3VyZVBhcml0eShzZXJpYWwsIHBhcmFtZXRlcnNbU0VSSUFMX1BBUk1fREFUQV9QQVJJVFldKSkgb2sgPSAwOworICAgICAgICAgIGlmICghc2VyaWFsQ29uZmlndXJlRmxvd0NvbnRyb2woc2VyaWFsLCBwYXJhbWV0ZXJzW1NFUklBTF9QQVJNX0ZMT1dfQ09OVFJPTF0pKSBvayA9IDA7CisKKyAgICAgICAgICBkZWFsbG9jYXRlU3RyaW5ncyhwYXJhbWV0ZXJzKTsKKyAgICAgICAgICBpZiAob2spIHJldHVybiBzZXJpYWw7CisKKyAgICAgICAgICBzZXJpYWxDbG9zZURldmljZShzZXJpYWwpOworICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisKKyAgICAgICAgZnJlZShzZXJpYWwtPmRldmljZVBhdGgpOworICAgICAgfQorCisgICAgICBmcmVlKHNlcmlhbCk7CisgICAgfSBlbHNlIHsKKyAgICAgIGxvZ01hbGxvY0Vycm9yKCk7CisgICAgfQorCisgICAgZGVhbGxvY2F0ZVN0cmluZ3MocGFyYW1ldGVycyk7CisgIH0KKworICByZXR1cm4gTlVMTDsKK30KKwordm9pZAorc2VyaWFsQ2xvc2VEZXZpY2UgKFNlcmlhbERldmljZSAqc2VyaWFsKSB7CisjaWZkZWYgSEFWRV9QT1NJWF9USFJFQURTCisgIHNlcmlhbFN0b3BGbG93Q29udHJvbFRocmVhZChzZXJpYWwpOworI2VuZGlmIC8qIEhBVkVfUE9TSVhfVEhSRUFEUyAqLworCisgIHNlcmlhbFdyaXRlQXR0cmlidXRlcyhzZXJpYWwsICZzZXJpYWwtPm9yaWdpbmFsQXR0cmlidXRlcyk7CisKKyAgaWYgKHNlcmlhbC0+c3RyZWFtKSB7CisgICAgZmNsb3NlKHNlcmlhbC0+c3RyZWFtKTsKKyAgfSBlbHNlIGlmIChzZXJpYWwtPmZpbGVEZXNjcmlwdG9yICE9IC0xKSB7CisgICAgY2xvc2Uoc2VyaWFsLT5maWxlRGVzY3JpcHRvcik7CisgIH0gZWxzZSB7CisgICAgc2VyaWFsRGlzY29ubmVjdERldmljZShzZXJpYWwpOworICB9CisKKyAgZnJlZShzZXJpYWwtPmRldmljZVBhdGgpOworICBmcmVlKHNlcmlhbCk7Cit9CisKK2NvbnN0IGNoYXIgKgorc2VyaWFsTWFrZURldmljZUlkZW50aWZpZXIgKFNlcmlhbERldmljZSAqc2VyaWFsLCBjaGFyICpidWZmZXIsIHNpemVfdCBzaXplKSB7CisgIFNUUl9CRUdJTihidWZmZXIsIHNpemUpOworCisgIFNUUl9QUklOVEYoCisgICAgIiVzJWMlcyVjJXMiLAorICAgIFNFUklBTF9ERVZJQ0VfUVVBTElGSUVSLAorICAgIFBBUkFNRVRFUl9RVUFMSUZJRVJfQ0hBUkFDVEVSLAorICAgIHNlcmlhbERldmljZVBhcmFtZXRlck5hbWVzW1NFUklBTF9QQVJNX05BTUVdLAorICAgIFBBUkFNRVRFUl9BU1NJR05NRU5UX0NIQVJBQ1RFUiwKKyAgICBzZXJpYWxHZXREZXZpY2VQYXRoKHNlcmlhbCkKKyAgKTsKKworICBTVFJfRU5EOworICByZXR1cm4gYnVmZmVyOworfQorCitpbnQKK3NlcmlhbFJlc3RhcnREZXZpY2UgKFNlcmlhbERldmljZSAqc2VyaWFsLCB1bnNpZ25lZCBpbnQgYmF1ZCkgeworICBTZXJpYWxMaW5lcyBoaWdoTGluZXMgPSAwOworICBTZXJpYWxMaW5lcyBsb3dMaW5lcyA9IDA7CisgIGludCB1c2luZ0IwOworCisjaWZkZWYgSEFWRV9QT1NJWF9USFJFQURTCisgIFNlcmlhbEZsb3dDb250cm9sUHJvYyAqZmxvd0NvbnRyb2xQcm9jID0gc2VyaWFsLT5wZW5kaW5nRmxvd0NvbnRyb2xQcm9jOworI2VuZGlmIC8qIEhBVkVfUE9TSVhfVEhSRUFEUyAqLworCisgIGxvZ01lc3NhZ2UoTE9HX0NBVEVHT1JZKFNFUklBTF9JTyksICJyZXN0YXJ0aW5nIik7CisKKyAgaWYgKHNlcmlhbC0+c3RyZWFtKSB7CisjaWYgZGVmaW5lZChHUlVCX1JVTlRJTUUpCisjZWxzZSAvKiBjbGVhcmVycigpICovCisgICAgY2xlYXJlcnIoc2VyaWFsLT5zdHJlYW0pOworI2VuZGlmIC8qIGNsZWFyIGVycm9yIG9uIHN0ZGlvIHN0cmVhbSAqLworICB9CisKKyAgc2VyaWFsQ2xlYXJFcnJvcihzZXJpYWwpOworCisgIGlmICghc2VyaWFsRGlzY2FyZE91dHB1dChzZXJpYWwpKSByZXR1cm4gMDsKKworI2lmZGVmIEhBVkVfUE9TSVhfVEhSRUFEUworICBzZXJpYWwtPnBlbmRpbmdGbG93Q29udHJvbFByb2MgPSBOVUxMOworI2VuZGlmIC8qIEhBVkVfUE9TSVhfVEhSRUFEUyAqLworCisjaWZkZWYgQjAKKyAgaWYgKCFzZXJpYWxQdXRTcGVlZCgmc2VyaWFsLT5wZW5kaW5nQXR0cmlidXRlcywgQjApKSByZXR1cm4gMDsKKyAgdXNpbmdCMCA9IDE7CisjZWxzZSAvKiBCMCAqLworICB1c2luZ0IwID0gMDsKKyNlbmRpZiAvKiBCMCAqLworCisgIGlmICghc2VyaWFsRmx1c2hBdHRyaWJ1dGVzKHNlcmlhbCkpIHsKKyAgICBpZiAoIXVzaW5nQjApIHJldHVybiAwOworICAgIGlmICghc2VyaWFsU2V0QmF1ZChzZXJpYWwsIGJhdWQpKSByZXR1cm4gMDsKKyAgICBpZiAoIXNlcmlhbEZsdXNoQXR0cmlidXRlcyhzZXJpYWwpKSByZXR1cm4gMDsKKyAgICB1c2luZ0IwID0gMDsKKyAgfQorCisgIGlmICghdXNpbmdCMCkgeworICAgIFNlcmlhbExpbmVzIGxpbmVzOworICAgIGlmICghc2VyaWFsUmVhZExpbmVzKHNlcmlhbCwgJmxpbmVzKSkgcmV0dXJuIDA7CisKKyAgICB7CisgICAgICBzdGF0aWMgY29uc3QgU2VyaWFsTGluZXMgbGluZXNUYWJsZVtdID0ge1NFUklBTF9MSU5FX0RUUiwgU0VSSUFMX0xJTkVfUlRTLCAwfTsKKyAgICAgIGNvbnN0IFNlcmlhbExpbmVzICpsaW5lID0gbGluZXNUYWJsZTsKKworICAgICAgd2hpbGUgKCpsaW5lKSB7CisgICAgICAgICooKGxpbmVzICYgKmxpbmUpPyAmaGlnaExpbmVzOiAmbG93TGluZXMpIHw9ICpsaW5lOworICAgICAgICBsaW5lICs9IDE7CisgICAgICB9CisgICAgfQorCisgICAgaWYgKGhpZ2hMaW5lcykKKyAgICAgIGlmICghc2VyaWFsV3JpdGVMaW5lcyhzZXJpYWwsIDAsIGhpZ2hMaW5lc3xsb3dMaW5lcykpCisgICAgICAgIHJldHVybiAwOworICB9CisKKyAgYXN5bmNXYWl0KFNFUklBTF9ERVZJQ0VfUkVTVEFSVF9ERUxBWSk7CisgIGlmICghc2VyaWFsRGlzY2FyZElucHV0KHNlcmlhbCkpIHJldHVybiAwOworCisgIGlmICghdXNpbmdCMCkKKyAgICBpZiAoIXNlcmlhbFdyaXRlTGluZXMoc2VyaWFsLCBoaWdoTGluZXMsIGxvd0xpbmVzKSkKKyAgICAgIHJldHVybiAwOworCisjaWZkZWYgSEFWRV9QT1NJWF9USFJFQURTCisgIHNlcmlhbC0+cGVuZGluZ0Zsb3dDb250cm9sUHJvYyA9IGZsb3dDb250cm9sUHJvYzsKKyNlbmRpZiAvKiBIQVZFX1BPU0lYX1RIUkVBRFMgKi8KKworICBpZiAoIXNlcmlhbFNldEJhdWQoc2VyaWFsLCBiYXVkKSkgcmV0dXJuIDA7CisgIGlmICghc2VyaWFsRmx1c2hBdHRyaWJ1dGVzKHNlcmlhbCkpIHJldHVybiAwOworCisgIGxvZ01lc3NhZ2UoTE9HX0NBVEVHT1JZKFNFUklBTF9JTyksICJyZXN0YXJ0ZWQiKTsKKyAgcmV0dXJuIDE7Cit9CisKK0ZJTEUgKgorc2VyaWFsR2V0U3RyZWFtIChTZXJpYWxEZXZpY2UgKnNlcmlhbCkgeworICBpZiAoIXNlcmlhbC0+c3RyZWFtKSB7CisgICAgaWYgKCFzZXJpYWxFbnN1cmVGaWxlRGVzY3JpcHRvcihzZXJpYWwpKSByZXR1cm4gTlVMTDsKKworI2lmIGRlZmluZWQoR1JVQl9SVU5USU1FKQorICAgIGVycm5vID0gRU5PU1lTOworI2Vsc2UgLyogZmRvcGVuKCkgKi8KKyAgICBzZXJpYWwtPnN0cmVhbSA9IGZkb3BlbihzZXJpYWwtPmZpbGVEZXNjcmlwdG9yLCAiYWIrIik7CisjZW5kaWYgLyogY3JlYXRlIHN0ZGlvIHN0cmVhbSAqLworCisgICAgaWYgKCFzZXJpYWwtPnN0cmVhbSkgeworICAgICAgbG9nU3lzdGVtRXJyb3IoImZkb3BlbiIpOworICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICB9CisKKyAgcmV0dXJuIHNlcmlhbC0+c3RyZWFtOworfQorCitpbnQKK2lzU2VyaWFsRGV2aWNlSWRlbnRpZmllciAoY29uc3QgY2hhciAqKmlkZW50aWZpZXIpIHsKKyNpZmRlZiBBTExPV19ET1NfREVWSUNFX05BTUVTCisgIGlmIChpc0Rvc0RldmljZSgqaWRlbnRpZmllciwgIkNPTSIpKSByZXR1cm4gMTsKKyNlbmRpZiAvKiBBTExPV19ET1NfREVWSUNFX05BTUVTICovCisKKyAgaWYgKGhhc1F1YWxpZmllcihpZGVudGlmaWVyLCBTRVJJQUxfREVWSUNFX1FVQUxJRklFUikpIHJldHVybiAxOworICBpZiAoaGFzTm9RdWFsaWZpZXIoKmlkZW50aWZpZXIpKSByZXR1cm4gMTsKKyAgcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9Qcm9ncmFtcy9zZXJpYWxfZ3J1Yi5jIGIvUHJvZ3JhbXMvc2VyaWFsX2dydWIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZDQzZWIwCi0tLSAvZGV2L251bGwKKysrIGIvUHJvZ3JhbXMvc2VyaWFsX2dydWIuYwpAQCAtMCwwICsxLDI4MSBAQAorLyoKKyAqIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisgKiAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisgKgorICogQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKKyNpbmNsdWRlICJwcm9sb2d1ZS5oIgorCisjaW5jbHVkZSA8ZXJybm8uaD4KKworI2luY2x1ZGUgImxvZy5oIgorI2luY2x1ZGUgInRpbWluZy5oIgorCisjaW5jbHVkZSAic2VyaWFsX2dydWIuaCIKKyNpbmNsdWRlICJzZXJpYWxfaW50ZXJuYWwuaCIKKworI2RlZmluZSBTRVJJQUxfTk9fQllURSAtMQorCisjZGVmaW5lIFNFUklBTF9CQVVEX0VOVFJZKGJhdWQpIHsoYmF1ZCksIChiYXVkKX0KKworQkVHSU5fU0VSSUFMX0JBVURfVEFCTEUKKyAgU0VSSUFMX0JBVURfRU5UUlkoICAgMTEwKSwKKyAgU0VSSUFMX0JBVURfRU5UUlkoICAgMTUwKSwKKyAgU0VSSUFMX0JBVURfRU5UUlkoICAgMzAwKSwKKyAgU0VSSUFMX0JBVURfRU5UUlkoICAgNjAwKSwKKyAgU0VSSUFMX0JBVURfRU5UUlkoICAxMjAwKSwKKyAgU0VSSUFMX0JBVURfRU5UUlkoICAyNDAwKSwKKyAgU0VSSUFMX0JBVURfRU5UUlkoICA0ODAwKSwKKyAgU0VSSUFMX0JBVURfRU5UUlkoICA5NjAwKSwKKyAgU0VSSUFMX0JBVURfRU5UUlkoIDE5MjAwKSwKKyAgU0VSSUFMX0JBVURfRU5UUlkoIDM4NDAwKSwKKyAgU0VSSUFMX0JBVURfRU5UUlkoIDU3NjAwKSwKKyAgU0VSSUFMX0JBVURfRU5UUlkoMTE1MjAwKSwKK0VORF9TRVJJQUxfQkFVRF9UQUJMRQorCit2b2lkCitzZXJpYWxQdXRJbml0aWFsQXR0cmlidXRlcyAoU2VyaWFsQXR0cmlidXRlcyAqYXR0cmlidXRlcykgeworfQorCitpbnQKK3NlcmlhbFB1dFNwZWVkIChTZXJpYWxBdHRyaWJ1dGVzICphdHRyaWJ1dGVzLCBTZXJpYWxTcGVlZCBzcGVlZCkgeworICBhdHRyaWJ1dGVzLT5zcGVlZCA9IHNwZWVkOworICByZXR1cm4gMTsKK30KKworaW50CitzZXJpYWxQdXREYXRhQml0cyAoU2VyaWFsQXR0cmlidXRlcyAqYXR0cmlidXRlcywgdW5zaWduZWQgaW50IGJpdHMpIHsKKyAgaWYgKChiaXRzIDwgNSkgfHwgKGJpdHMgPiA4KSkgcmV0dXJuIDA7CisgIGF0dHJpYnV0ZXMtPndvcmRfbGVuID0gYml0czsKKyAgcmV0dXJuIDE7Cit9CisKK2ludAorc2VyaWFsUHV0U3RvcEJpdHMgKFNlcmlhbEF0dHJpYnV0ZXMgKmF0dHJpYnV0ZXMsIFNlcmlhbFN0b3BCaXRzIGJpdHMpIHsKKyAgc3dpdGNoIChiaXRzKSB7CisgICAgY2FzZSBTRVJJQUxfU1RPUF8xOgorICAgICAgYXR0cmlidXRlcy0+c3RvcF9iaXRzID0gR1JVQl9TRVJJQUxfU1RPUF9CSVRTXzE7CisgICAgICBicmVhazsKKworICAgIGNhc2UgU0VSSUFMX1NUT1BfMjoKKyAgICAgIGF0dHJpYnV0ZXMtPnN0b3BfYml0cyA9IEdSVUJfU0VSSUFMX1NUT1BfQklUU18yOworICAgICAgYnJlYWs7CisKKyAgICBkZWZhdWx0OgorICAgICAgcmV0dXJuIDA7CisgIH0KKworICByZXR1cm4gMTsKK30KKworaW50CitzZXJpYWxQdXRQYXJpdHkgKFNlcmlhbEF0dHJpYnV0ZXMgKmF0dHJpYnV0ZXMsIFNlcmlhbFBhcml0eSBwYXJpdHkpIHsKKyAgc3dpdGNoIChwYXJpdHkpIHsKKyAgICBjYXNlIFNFUklBTF9QQVJJVFlfTk9ORToKKyAgICAgIGF0dHJpYnV0ZXMtPnBhcml0eSA9IEdSVUJfU0VSSUFMX1BBUklUWV9OT05FOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNFUklBTF9QQVJJVFlfT0REOgorICAgICAgYXR0cmlidXRlcy0+cGFyaXR5ID0gR1JVQl9TRVJJQUxfUEFSSVRZX09ERDsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBTRVJJQUxfUEFSSVRZX0VWRU46CisgICAgICBhdHRyaWJ1dGVzLT5wYXJpdHkgPSBHUlVCX1NFUklBTF9QQVJJVFlfRVZFTjsKKyAgICAgIGJyZWFrOworCisgICAgZGVmYXVsdDogCisgICAgICByZXR1cm4gMDsKKyAgfQorCisgIHJldHVybiAxOworfQorCitTZXJpYWxGbG93Q29udHJvbAorc2VyaWFsUHV0Rmxvd0NvbnRyb2wgKFNlcmlhbEF0dHJpYnV0ZXMgKmF0dHJpYnV0ZXMsIFNlcmlhbEZsb3dDb250cm9sIGZsb3cpIHsKKyAgcmV0dXJuIGZsb3c7Cit9CisKK2ludAorc2VyaWFsUHV0TW9kZW1TdGF0ZSAoU2VyaWFsQXR0cmlidXRlcyAqYXR0cmlidXRlcywgaW50IGVuYWJsZWQpIHsKKyAgcmV0dXJuIDA7Cit9CisKK3Vuc2lnbmVkIGludAorc2VyaWFsR2V0RGF0YUJpdHMgKGNvbnN0IFNlcmlhbEF0dHJpYnV0ZXMgKmF0dHJpYnV0ZXMpIHsKKyAgcmV0dXJuIGF0dHJpYnV0ZXMtPndvcmRfbGVuOworfQorCit1bnNpZ25lZCBpbnQKK3NlcmlhbEdldFN0b3BCaXRzIChjb25zdCBTZXJpYWxBdHRyaWJ1dGVzICphdHRyaWJ1dGVzKSB7CisgIHN3aXRjaCAoYXR0cmlidXRlcy0+c3RvcF9iaXRzKSB7CisgICAgY2FzZSBHUlVCX1NFUklBTF9TVE9QX0JJVFNfMTogcmV0dXJuIDE7CisgICAgY2FzZSBHUlVCX1NFUklBTF9TVE9QX0JJVFNfMjogcmV0dXJuIDI7CisgICAgZGVmYXVsdDogICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgIH0KK30KKwordW5zaWduZWQgaW50CitzZXJpYWxHZXRQYXJpdHlCaXRzIChjb25zdCBTZXJpYWxBdHRyaWJ1dGVzICphdHRyaWJ1dGVzKSB7CisgIHJldHVybiAoYXR0cmlidXRlcy0+cGFyaXR5ID09IEdSVUJfU0VSSUFMX1BBUklUWV9OT05FKT8gMDogMTsKK30KKworaW50CitzZXJpYWxHZXRBdHRyaWJ1dGVzIChTZXJpYWxEZXZpY2UgKnNlcmlhbCwgU2VyaWFsQXR0cmlidXRlcyAqYXR0cmlidXRlcykgeworICAqYXR0cmlidXRlcyA9IHNlcmlhbC0+cGFja2FnZS5wb3J0LT5jb25maWc7CisgIHJldHVybiAxOworfQorCitpbnQKK3NlcmlhbFB1dEF0dHJpYnV0ZXMgKFNlcmlhbERldmljZSAqc2VyaWFsLCBjb25zdCBTZXJpYWxBdHRyaWJ1dGVzICphdHRyaWJ1dGVzKSB7CisgIGdydWJfZXJyX3QgcmVzdWx0ID0gc2VyaWFsLT5wYWNrYWdlLnBvcnQtPmRyaXZlci0+Y29uZmlndXJlKHNlcmlhbC0+cGFja2FnZS5wb3J0LCBhdHRyaWJ1dGVzKTsKKyAgaWYgKHJlc3VsdCA9PSBHUlVCX0VSUl9OT05FKSByZXR1cm4gMTsKKyAgcmV0dXJuIDA7Cit9CisKK2ludAorc2VyaWFsQ2FuY2VsSW5wdXQgKFNlcmlhbERldmljZSAqc2VyaWFsKSB7CisgIHJldHVybiAxOworfQorCitpbnQKK3NlcmlhbENhbmNlbE91dHB1dCAoU2VyaWFsRGV2aWNlICpzZXJpYWwpIHsKKyAgcmV0dXJuIDE7Cit9CisKK2ludAorc2VyaWFsTW9uaXRvcklucHV0IChTZXJpYWxEZXZpY2UgKnNlcmlhbCwgQXN5bmNNb25pdG9yQ2FsbGJhY2sgKmNhbGxiYWNrLCB2b2lkICpkYXRhKSB7CisgIHJldHVybiAwOworfQorCitpbnQKK3NlcmlhbFBvbGxJbnB1dCAoU2VyaWFsRGV2aWNlICpzZXJpYWwsIGludCB0aW1lb3V0KSB7CisgIGlmIChzZXJpYWwtPnBhY2thZ2UuYnl0ZSA9PSBTRVJJQUxfTk9fQllURSkgeworICAgIFRpbWVQZXJpb2QgcGVyaW9kOworICAgIHN0YXJ0VGltZVBlcmlvZCgmcGVyaW9kLCB0aW1lb3V0KTsKKworICAgIHdoaWxlICgoc2VyaWFsLT5wYWNrYWdlLmJ5dGUgPSBzZXJpYWwtPnBhY2thZ2UucG9ydC0+ZHJpdmVyLT5mZXRjaChzZXJpYWwtPnBhY2thZ2UucG9ydCkpID09IFNFUklBTF9OT19CWVRFKSB7CisgICAgICBpZiAoYWZ0ZXJUaW1lUGVyaW9kKCZwZXJpb2QsIE5VTEwpKSB7CisgICAgICAgIGVycm5vID0gRUFHQUlOOworICAgICAgICByZXR1cm4gMDsKKyAgICAgIH0KKworICAgICAgYXBwcm94aW1hdGVEZWxheSgxKTsKKyAgICB9CisgIH0KKworICByZXR1cm4gMTsKK30KKworaW50CitzZXJpYWxEcmFpbk91dHB1dCAoU2VyaWFsRGV2aWNlICpzZXJpYWwpIHsKKyAgcmV0dXJuIDE7Cit9CisKK3NzaXplX3QKK3NlcmlhbEdldERhdGEgKAorICBTZXJpYWxEZXZpY2UgKnNlcmlhbCwKKyAgdm9pZCAqYnVmZmVyLCBzaXplX3Qgc2l6ZSwKKyAgaW50IGluaXRpYWxUaW1lb3V0LCBpbnQgc3Vic2VxdWVudFRpbWVvdXQKKykgeworICB1bnNpZ25lZCBjaGFyICpieXRlID0gYnVmZmVyOworICBjb25zdCB1bnNpZ25lZCBjaGFyICpjb25zdCBmaXJzdCA9IGJ5dGU7CisgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmNvbnN0IGVuZCA9IGZpcnN0ICsgc2l6ZTsKKyAgaW50IHRpbWVvdXQgPSBpbml0aWFsVGltZW91dDsKKworICB3aGlsZSAoYnl0ZSA8IGVuZCkgeworICAgIGlmICghc2VyaWFsUG9sbElucHV0KHNlcmlhbCwgdGltZW91dCkpIGJyZWFrOworICAgICpieXRlKysgPSBzZXJpYWwtPnBhY2thZ2UuYnl0ZTsKKyAgICBzZXJpYWwtPnBhY2thZ2UuYnl0ZSA9IFNFUklBTF9OT19CWVRFOworICAgIHRpbWVvdXQgPSBzdWJzZXF1ZW50VGltZW91dDsKKyAgfQorCisgIHsKKyAgICBzaXplX3QgY291bnQgPSBieXRlIC0gZmlyc3Q7CisgICAgaWYgKGNvdW50KSByZXR1cm4gY291bnQ7CisgIH0KKworICBlcnJubyA9IEVBR0FJTjsKKyAgcmV0dXJuIC0xOworfQorCitzc2l6ZV90CitzZXJpYWxQdXREYXRhICgKKyAgU2VyaWFsRGV2aWNlICpzZXJpYWwsCisgIGNvbnN0IHZvaWQgKmRhdGEsIHNpemVfdCBzaXplCispIHsKKyAgY29uc3QgdW5zaWduZWQgY2hhciAqYnl0ZSA9IGRhdGE7CisgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmVuZCA9IGJ5dGUgKyBzaXplOworCisgIHdoaWxlIChieXRlIDwgZW5kKSB7CisgICAgc2VyaWFsLT5wYWNrYWdlLnBvcnQtPmRyaXZlci0+cHV0KHNlcmlhbC0+cGFja2FnZS5wb3J0LCAqYnl0ZSsrKTsKKyAgfQorCisgIHJldHVybiBzaXplOworfQorCitpbnQKK3NlcmlhbEdldExpbmVzIChTZXJpYWxEZXZpY2UgKnNlcmlhbCkgeworICBlcnJubyA9IEVOT1NZUzsKKyAgcmV0dXJuIDA7Cit9CisKK2ludAorc2VyaWFsUHV0TGluZXMgKFNlcmlhbERldmljZSAqc2VyaWFsLCBTZXJpYWxMaW5lcyBoaWdoLCBTZXJpYWxMaW5lcyBsb3cpIHsKKyAgZXJybm8gPSBFTk9TWVM7CisgIHJldHVybiAwOworfQorCitpbnQKK3NlcmlhbFJlZ2lzdGVyV2FpdExpbmVzIChTZXJpYWxEZXZpY2UgKnNlcmlhbCwgU2VyaWFsTGluZXMgbGluZXMpIHsKKyAgcmV0dXJuIDE7Cit9CisKK2ludAorc2VyaWFsTW9uaXRvcldhaXRMaW5lcyAoU2VyaWFsRGV2aWNlICpzZXJpYWwpIHsKKyAgcmV0dXJuIDA7Cit9CisKK2ludAorc2VyaWFsQ29ubmVjdERldmljZSAoU2VyaWFsRGV2aWNlICpzZXJpYWwsIGNvbnN0IGNoYXIgKmRldmljZSkgeworICBpZiAoKHNlcmlhbC0+cGFja2FnZS5wb3J0ID0gZ3J1Yl9zZXJpYWxfZmluZChkZXZpY2UpKSkgeworICAgIHNlcmlhbC0+cGFja2FnZS5ieXRlID0gU0VSSUFMX05PX0JZVEU7CisKKyAgICBpZiAoc2VyaWFsUHJlcGFyZURldmljZShzZXJpYWwpKSB7CisgICAgICBsb2dNZXNzYWdlKExPR19DQVRFR09SWShTRVJJQUxfSU8pLCAiZGV2aWNlIG9wZW5lZDogJXMiLAorICAgICAgICAgICAgICAgICBkZXZpY2UpOworICAgICAgcmV0dXJuIDE7CisgICAgfQorICB9IGVsc2UgeworICAgIGxvZ01lc3NhZ2UoTE9HX0VSUiwgImNhbm5vdCBmaW5kIHNlcmlhbCBkZXZpY2U6ICVzIiwgZGV2aWNlKTsKKyAgICBlcnJubyA9IEVOT0VOVDsKKyAgfQorCisgIHJldHVybiAwOworfQorCit2b2lkCitzZXJpYWxEaXNjb25uZWN0RGV2aWNlIChTZXJpYWxEZXZpY2UgKnNlcmlhbCkgeworICBzZXJpYWwtPnBhY2thZ2UucG9ydCA9IE5VTEw7Cit9CisKK2ludAorc2VyaWFsRW5zdXJlRmlsZURlc2NyaXB0b3IgKFNlcmlhbERldmljZSAqc2VyaWFsKSB7CisgIHJldHVybiAxOworfQorCit2b2lkCitzZXJpYWxDbGVhckVycm9yIChTZXJpYWxEZXZpY2UgKnNlcmlhbCkgeworfQorCmRpZmYgLS1naXQgYS9Qcm9ncmFtcy9zZXJpYWxfZ3J1Yi5oIGIvUHJvZ3JhbXMvc2VyaWFsX2dydWIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZDE5M2Y3Ci0tLSAvZGV2L251bGwKKysrIGIvUHJvZ3JhbXMvc2VyaWFsX2dydWIuaApAQCAtMCwwICsxLDUwIEBACisvKgorICogQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyAqICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyAqCisgKiBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorICoKKyAqIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyAqCisgKiBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisgKi8KKworI2lmbmRlZiBCUkxUVFlfSU5DTFVERURfU0VSSUFMX0dSVUIKKyNkZWZpbmUgQlJMVFRZX0lOQ0xVREVEX1NFUklBTF9HUlVCCisKKyNpbmNsdWRlIDxncnViL3NlcmlhbC5oPgorCisjaW5jbHVkZSAic2VyaWFsX3VhcnQuaCIKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZiAvKiBfX2NwbHVzcGx1cyAqLworCit0eXBlZGVmIHN0cnVjdCBncnViX3NlcmlhbF9jb25maWcgU2VyaWFsQXR0cmlidXRlczsKK3R5cGVkZWYgdW5zaWduZWQgU2VyaWFsU3BlZWQ7CisKK3R5cGVkZWYgdW5zaWduZWQgY2hhciBTZXJpYWxMaW5lczsKKyNkZWZpbmUgU0VSSUFMX0xJTkVfRFRSIFVBUlRfRkxBR19NQ1JfRFRSCisjZGVmaW5lIFNFUklBTF9MSU5FX1JUUyBVQVJUX0ZMQUdfTUNSX1JUUworI2RlZmluZSBTRVJJQUxfTElORV9DVFMgVUFSVF9GTEFHX01TUl9DVFMKKyNkZWZpbmUgU0VSSUFMX0xJTkVfRFNSIFVBUlRfRkxBR19NU1JfRFNSCisjZGVmaW5lIFNFUklBTF9MSU5FX1JORyBVQVJUX0ZMQUdfTVNSX1JORworI2RlZmluZSBTRVJJQUxfTElORV9DQVIgVUFSVF9GTEFHX01TUl9DQVIKKwordHlwZWRlZiBzdHJ1Y3QgeworICBzdHJ1Y3QgZ3J1Yl9zZXJpYWxfcG9ydCAqcG9ydDsKKyAgaW50IGJ5dGU7Cit9IFNlcmlhbFBhY2thZ2VGaWVsZHM7CisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmIC8qIF9fY3BsdXNwbHVzICovCisKKyNlbmRpZiAvKiBCUkxUVFlfSU5DTFVERURfU0VSSUFMX0dSVUIgKi8KZGlmZiAtLWdpdCBhL1Byb2dyYW1zL3NlcmlhbF9pbnRlcm5hbC5oIGIvUHJvZ3JhbXMvc2VyaWFsX2ludGVybmFsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDAyY2UyYwotLS0gL2Rldi9udWxsCisrKyBiL1Byb2dyYW1zL3NlcmlhbF9pbnRlcm5hbC5oCkBAIC0wLDAgKzEsMTE4IEBACisvKgorICogQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyAqICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyAqCisgKiBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorICoKKyAqIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyAqCisgKiBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisgKi8KKworI2lmbmRlZiBCUkxUVFlfSU5DTFVERURfU0VSSUFMX0lOVEVSTkFMCisjZGVmaW5lIEJSTFRUWV9JTkNMVURFRF9TRVJJQUxfSU5URVJOQUwKKworI2luY2x1ZGUgInByb2xvZ3VlLmgiCisKKyNpbmNsdWRlIDxzdGRpby5oPgorCisjaW5jbHVkZSAiaW9fc2VyaWFsLmgiCisjaW5jbHVkZSAidGhyZWFkLmgiCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYgLyogX19jcGx1c3BsdXMgKi8KKwordHlwZWRlZiB2b2lkIFNlcmlhbEZsb3dDb250cm9sUHJvYyAoU2VyaWFsRGV2aWNlICpzZXJpYWwpOworCitzdHJ1Y3QgU2VyaWFsRGV2aWNlU3RydWN0IHsKKyAgY2hhciAqZGV2aWNlUGF0aDsKKyAgaW50IGZpbGVEZXNjcmlwdG9yOworICBGSUxFICpzdHJlYW07CisKKyAgU2VyaWFsQXR0cmlidXRlcyBvcmlnaW5hbEF0dHJpYnV0ZXM7CisgIFNlcmlhbEF0dHJpYnV0ZXMgY3VycmVudEF0dHJpYnV0ZXM7CisgIFNlcmlhbEF0dHJpYnV0ZXMgcGVuZGluZ0F0dHJpYnV0ZXM7CisKKyAgU2VyaWFsTGluZXMgbGluZXNTdGF0ZTsKKyAgU2VyaWFsTGluZXMgd2FpdExpbmVzOworCisjaWZkZWYgSEFWRV9QT1NJWF9USFJFQURTCisgIFNlcmlhbEZsb3dDb250cm9sUHJvYyAqY3VycmVudEZsb3dDb250cm9sUHJvYzsKKyAgU2VyaWFsRmxvd0NvbnRyb2xQcm9jICpwZW5kaW5nRmxvd0NvbnRyb2xQcm9jOworICBwdGhyZWFkX3QgZmxvd0NvbnRyb2xUaHJlYWQ7CisgIHVuc2lnbmVkIGZsb3dDb250cm9sUnVubmluZzoxOworICB1bnNpZ25lZCBmbG93Q29udHJvbFN0b3A6MTsKKyNlbmRpZiAvKiBIQVZFX1BPU0lYX1RIUkVBRFMgKi8KKworICBTZXJpYWxQYWNrYWdlRmllbGRzIHBhY2thZ2U7Cit9OworCit0eXBlZGVmIHN0cnVjdCB7CisgIHVuc2lnbmVkIGludCBiYXVkOworICBTZXJpYWxTcGVlZCBzcGVlZDsKK30gU2VyaWFsQmF1ZEVudHJ5OworCitleHRlcm4gY29uc3QgU2VyaWFsQmF1ZEVudHJ5ICpzZXJpYWxHZXRCYXVkRW50cnkgKHVuc2lnbmVkIGludCBiYXVkKTsKKyNkZWZpbmUgU0VSSUFMX0JBVURfVEFCTEVfREVDTEFSQVRJT04gIGNvbnN0IFNlcmlhbEJhdWRFbnRyeSBzZXJpYWxCYXVkVGFibGVbXQorZXh0ZXJuIFNFUklBTF9CQVVEX1RBQkxFX0RFQ0xBUkFUSU9OOworI2RlZmluZSBCRUdJTl9TRVJJQUxfQkFVRF9UQUJMRSBTRVJJQUxfQkFVRF9UQUJMRV9ERUNMQVJBVElPTiA9IHsKKyNkZWZpbmUgRU5EX1NFUklBTF9CQVVEX1RBQkxFIHswfSB9OworCitleHRlcm4gdm9pZCBzZXJpYWxQdXRJbml0aWFsQXR0cmlidXRlcyAoU2VyaWFsQXR0cmlidXRlcyAqYXR0cmlidXRlcyk7CitleHRlcm4gaW50IHNlcmlhbFB1dFNwZWVkIChTZXJpYWxBdHRyaWJ1dGVzICphdHRyaWJ1dGVzLCBTZXJpYWxTcGVlZCBzcGVlZCk7CitleHRlcm4gaW50IHNlcmlhbFB1dERhdGFCaXRzIChTZXJpYWxBdHRyaWJ1dGVzICphdHRyaWJ1dGVzLCB1bnNpZ25lZCBpbnQgYml0cyk7CitleHRlcm4gaW50IHNlcmlhbFB1dFN0b3BCaXRzIChTZXJpYWxBdHRyaWJ1dGVzICphdHRyaWJ1dGVzLCBTZXJpYWxTdG9wQml0cyBiaXRzKTsKK2V4dGVybiBpbnQgc2VyaWFsUHV0UGFyaXR5IChTZXJpYWxBdHRyaWJ1dGVzICphdHRyaWJ1dGVzLCBTZXJpYWxQYXJpdHkgcGFyaXR5KTsKK2V4dGVybiBTZXJpYWxGbG93Q29udHJvbCBzZXJpYWxQdXRGbG93Q29udHJvbCAoU2VyaWFsQXR0cmlidXRlcyAqYXR0cmlidXRlcywgU2VyaWFsRmxvd0NvbnRyb2wgZmxvdyk7CitleHRlcm4gaW50IHNlcmlhbFB1dE1vZGVtU3RhdGUgKFNlcmlhbEF0dHJpYnV0ZXMgKmF0dHJpYnV0ZXMsIGludCBlbmFibGVkKTsKKworZXh0ZXJuIHVuc2lnbmVkIGludCBzZXJpYWxHZXREYXRhQml0cyAoY29uc3QgU2VyaWFsQXR0cmlidXRlcyAqYXR0cmlidXRlcyk7CitleHRlcm4gdW5zaWduZWQgaW50IHNlcmlhbEdldFN0b3BCaXRzIChjb25zdCBTZXJpYWxBdHRyaWJ1dGVzICphdHRyaWJ1dGVzKTsKK2V4dGVybiB1bnNpZ25lZCBpbnQgc2VyaWFsR2V0UGFyaXR5Qml0cyAoY29uc3QgU2VyaWFsQXR0cmlidXRlcyAqYXR0cmlidXRlcyk7CisKK2V4dGVybiBpbnQgc2VyaWFsR2V0QXR0cmlidXRlcyAoU2VyaWFsRGV2aWNlICpzZXJpYWwsIFNlcmlhbEF0dHJpYnV0ZXMgKmF0dHJpYnV0ZXMpOworZXh0ZXJuIGludCBzZXJpYWxQdXRBdHRyaWJ1dGVzIChTZXJpYWxEZXZpY2UgKnNlcmlhbCwgY29uc3QgU2VyaWFsQXR0cmlidXRlcyAqYXR0cmlidXRlcyk7CisKK2V4dGVybiBpbnQgc2VyaWFsQ2FuY2VsSW5wdXQgKFNlcmlhbERldmljZSAqc2VyaWFsKTsKK2V4dGVybiBpbnQgc2VyaWFsQ2FuY2VsT3V0cHV0IChTZXJpYWxEZXZpY2UgKnNlcmlhbCk7CisKK2V4dGVybiBpbnQgc2VyaWFsUG9sbElucHV0IChTZXJpYWxEZXZpY2UgKnNlcmlhbCwgaW50IHRpbWVvdXQpOworZXh0ZXJuIGludCBzZXJpYWxEcmFpbk91dHB1dCAoU2VyaWFsRGV2aWNlICpzZXJpYWwpOworCitleHRlcm4gc3NpemVfdCBzZXJpYWxHZXREYXRhICgKKyAgU2VyaWFsRGV2aWNlICpzZXJpYWwsCisgIHZvaWQgKmJ1ZmZlciwgc2l6ZV90IHNpemUsCisgIGludCBpbml0aWFsVGltZW91dCwgaW50IHN1YnNlcXVlbnRUaW1lb3V0CispOworCitleHRlcm4gc3NpemVfdCBzZXJpYWxQdXREYXRhICgKKyAgU2VyaWFsRGV2aWNlICpzZXJpYWwsCisgIGNvbnN0IHZvaWQgKmRhdGEsIHNpemVfdCBzaXplCispOworCitleHRlcm4gaW50IHNlcmlhbEdldExpbmVzIChTZXJpYWxEZXZpY2UgKnNlcmlhbCk7CitleHRlcm4gaW50IHNlcmlhbFB1dExpbmVzIChTZXJpYWxEZXZpY2UgKnNlcmlhbCwgU2VyaWFsTGluZXMgaGlnaCwgU2VyaWFsTGluZXMgbG93KTsKKworZXh0ZXJuIGludCBzZXJpYWxSZWdpc3RlcldhaXRMaW5lcyAoU2VyaWFsRGV2aWNlICpzZXJpYWwsIFNlcmlhbExpbmVzIGxpbmVzKTsKK2V4dGVybiBpbnQgc2VyaWFsTW9uaXRvcldhaXRMaW5lcyAoU2VyaWFsRGV2aWNlICpzZXJpYWwpOworCitleHRlcm4gaW50IHNlcmlhbENvbm5lY3REZXZpY2UgKFNlcmlhbERldmljZSAqc2VyaWFsLCBjb25zdCBjaGFyICpkZXZpY2UpOworZXh0ZXJuIGludCBzZXJpYWxQcmVwYXJlRGV2aWNlIChTZXJpYWxEZXZpY2UgKnNlcmlhbCk7CisKK2V4dGVybiB2b2lkIHNlcmlhbERpc2Nvbm5lY3REZXZpY2UgKFNlcmlhbERldmljZSAqc2VyaWFsKTsKK2V4dGVybiBpbnQgc2VyaWFsRW5zdXJlRmlsZURlc2NyaXB0b3IgKFNlcmlhbERldmljZSAqc2VyaWFsKTsKK2V4dGVybiB2b2lkIHNlcmlhbENsZWFyRXJyb3IgKFNlcmlhbERldmljZSAqc2VyaWFsKTsKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYgLyogX19jcGx1c3BsdXMgKi8KKworI2VuZGlmIC8qIEJSTFRUWV9JTkNMVURFRF9TRVJJQUxfSU5URVJOQUwgKi8KZGlmZiAtLWdpdCBhL1Byb2dyYW1zL3NlcmlhbF9tc2Rvcy5jIGIvUHJvZ3JhbXMvc2VyaWFsX21zZG9zLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDJhMWE3YQotLS0gL2Rldi9udWxsCisrKyBiL1Byb2dyYW1zL3NlcmlhbF9tc2Rvcy5jCkBAIC0wLDAgKzEsNDExIEBACisvKgorICogQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyAqICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyAqCisgKiBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorICoKKyAqIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyAqCisgKiBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisgKi8KKworI2luY2x1ZGUgInByb2xvZ3VlLmgiCisKKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisjaW5jbHVkZSA8ZmNudGwuaD4KKworI2luY2x1ZGUgImxvZy5oIgorI2luY2x1ZGUgImFzeW5jX3dhaXQuaCIKKyNpbmNsdWRlICJ0aW1pbmcuaCIKKyNpbmNsdWRlICJpb19taXNjLmgiCisjaW5jbHVkZSAicG9ydHMuaCIKKworI2luY2x1ZGUgInNlcmlhbF9tc2Rvcy5oIgorI2luY2x1ZGUgInNlcmlhbF9pbnRlcm5hbC5oIgorCisjaW5jbHVkZSA8ZG9zLmg+CisjaW5jbHVkZSA8ZHBtaS5oPgorI2luY2x1ZGUgPGJpb3MuaD4KKyNpbmNsdWRlIDxnbzMyLmg+CisjaW5jbHVkZSA8c3lzL2ZhcnB0ci5oPgorCisjZGVmaW5lIFNFUklBTF9ESVZJU09SX0JBU0UgMTE1MjAwCisjZGVmaW5lIFNFUklBTF9ESVZJU09SKGJhdWQpIChTRVJJQUxfRElWSVNPUl9CQVNFIC8gKGJhdWQpKQorI2RlZmluZSBTRVJJQUxfU1BFRUQoYmF1ZCkgey5kaXZpc29yPVNFUklBTF9ESVZJU09SKGJhdWQpLCAuYnBzPVNFUklBTF9CSU9TX0JBVURfIyNiYXVkfQorI2RlZmluZSBTRVJJQUxfQkFVRF9FTlRSWShiYXVkKSB7YmF1ZCwgLnNwZWVkPVNFUklBTF9TUEVFRChiYXVkKX0KKworQkVHSU5fU0VSSUFMX0JBVURfVEFCTEUKKyAgU0VSSUFMX0JBVURfRU5UUlkoMTEwKSwKKyAgU0VSSUFMX0JBVURfRU5UUlkoMTUwKSwKKyAgU0VSSUFMX0JBVURfRU5UUlkoMzAwKSwKKyAgU0VSSUFMX0JBVURfRU5UUlkoNjAwKSwKKyAgU0VSSUFMX0JBVURfRU5UUlkoMTIwMCksCisgIFNFUklBTF9CQVVEX0VOVFJZKDI0MDApLAorICBTRVJJQUxfQkFVRF9FTlRSWSg0ODAwKSwKKyAgU0VSSUFMX0JBVURfRU5UUlkoOTYwMCksCisgIFNFUklBTF9CQVVEX0VOVFJZKDE5MjAwKSwKKyAgU0VSSUFMX0JBVURfRU5UUlkoMzg0MDApLAorICBTRVJJQUxfQkFVRF9FTlRSWSg1NzYwMCksCisgIFNFUklBTF9CQVVEX0VOVFJZKDExNTIwMCksCitFTkRfU0VSSUFMX0JBVURfVEFCTEUKKworc3RhdGljIGlubGluZSBpbnQKK3NlcmlhbEdldFBvcnQgKFNlcmlhbERldmljZSAqc2VyaWFsKSB7CisgIHJldHVybiBzZXJpYWwtPnBhY2thZ2UuZGV2aWNlSW5kZXg7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBzaG9ydAorc2VyaWFsUG9ydEJhc2UgKFNlcmlhbERldmljZSAqc2VyaWFsKSB7CisgIHJldHVybiBfZmFycGVla3coX2Rvc19kcywgKDBYMDQwMCArICgyICogc2VyaWFsR2V0UG9ydChzZXJpYWwpKSkpOworfQorCitzdGF0aWMgdW5zaWduZWQgY2hhcgorc2VyaWFsUmVhZFBvcnQgKFNlcmlhbERldmljZSAqc2VyaWFsLCB1bnNpZ25lZCBjaGFyIHBvcnQpIHsKKyAgcmV0dXJuIHJlYWRQb3J0MShzZXJpYWxQb3J0QmFzZShzZXJpYWwpK3BvcnQpOworfQorCitzdGF0aWMgdm9pZAorc2VyaWFsV3JpdGVQb3J0IChTZXJpYWxEZXZpY2UgKnNlcmlhbCwgdW5zaWduZWQgY2hhciBwb3J0LCB1bnNpZ25lZCBjaGFyIHZhbHVlKSB7CisgIHdyaXRlUG9ydDEoc2VyaWFsUG9ydEJhc2Uoc2VyaWFsKStwb3J0LCB2YWx1ZSk7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQKK3NlcmlhbEJpb3NDb21tYW5kIChTZXJpYWxEZXZpY2UgKnNlcmlhbCwgaW50IGNvbW1hbmQsIHVuc2lnbmVkIGNoYXIgZGF0YSkgeworICByZXR1cm4gX2Jpb3Nfc2VyaWFsY29tKGNvbW1hbmQsIHNlcmlhbEdldFBvcnQoc2VyaWFsKSwgZGF0YSk7Cit9CisKK3N0YXRpYyBpbnQKK3NlcmlhbFRlc3RJbnB1dCAoU2VyaWFsRGV2aWNlICpzZXJpYWwpIHsKKyAgcmV0dXJuICEhKHNlcmlhbEJpb3NDb21tYW5kKHNlcmlhbCwgX0NPTV9TVEFUVVMsIDApICYgU0VSSUFMX0JJT1NfU1RBVFVTX0RBVEFfUkVBRFkpOworfQorCit2b2lkCitzZXJpYWxQdXRJbml0aWFsQXR0cmlidXRlcyAoU2VyaWFsQXR0cmlidXRlcyAqYXR0cmlidXRlcykgeworICBhdHRyaWJ1dGVzLT5zcGVlZCA9IHNlcmlhbEdldEJhdWRFbnRyeSg5NjAwKS0+c3BlZWQ7CisgIGF0dHJpYnV0ZXMtPmJpb3MuZmllbGRzLmJwcyA9IGF0dHJpYnV0ZXMtPnNwZWVkLmJwczsKKyAgYXR0cmlidXRlcy0+Ymlvcy5maWVsZHMuZGF0YUJpdHMgPSBTRVJJQUxfQklPU19EQVRBXzg7CisgIGF0dHJpYnV0ZXMtPmJpb3MuZmllbGRzLnN0b3BCaXRzID0gU0VSSUFMX0JJT1NfU1RPUF8xOworICBhdHRyaWJ1dGVzLT5iaW9zLmZpZWxkcy5wYXJpdHkgPSBTRVJJQUxfQklPU19QQVJJVFlfTk9ORTsKK30KKworaW50CitzZXJpYWxQdXRTcGVlZCAoU2VyaWFsQXR0cmlidXRlcyAqYXR0cmlidXRlcywgU2VyaWFsU3BlZWQgc3BlZWQpIHsKKyAgbG9nTWVzc2FnZShMT0dfQ0FURUdPUlkoU0VSSUFMX0lPKSwgInB1dCBzcGVlZDogYnBzPSV1IGRpdmlzb3I9JXUiLAorICAgICAgICAgICAgIHNwZWVkLmJwcywgc3BlZWQuZGl2aXNvcik7CisKKyAgYXR0cmlidXRlcy0+c3BlZWQgPSBzcGVlZDsKKyAgYXR0cmlidXRlcy0+Ymlvcy5maWVsZHMuYnBzID0gYXR0cmlidXRlcy0+c3BlZWQuYnBzOworICByZXR1cm4gMTsKK30KKworaW50CitzZXJpYWxQdXREYXRhQml0cyAoU2VyaWFsQXR0cmlidXRlcyAqYXR0cmlidXRlcywgdW5zaWduZWQgaW50IGJpdHMpIHsKKyAgaWYgKGJpdHMgPT0gOCkgeworICAgIGF0dHJpYnV0ZXMtPmJpb3MuZmllbGRzLmRhdGFCaXRzID0gU0VSSUFMX0JJT1NfREFUQV84OworICB9IGVsc2UgaWYgKGJpdHMgPT0gNykgeworICAgIGF0dHJpYnV0ZXMtPmJpb3MuZmllbGRzLmRhdGFCaXRzID0gU0VSSUFMX0JJT1NfREFUQV83OworICB9IGVsc2UgeworICAgIHJldHVybiAwOworICB9CisKKyAgcmV0dXJuIDE7Cit9CisKK2ludAorc2VyaWFsUHV0U3RvcEJpdHMgKFNlcmlhbEF0dHJpYnV0ZXMgKmF0dHJpYnV0ZXMsIFNlcmlhbFN0b3BCaXRzIGJpdHMpIHsKKyAgaWYgKGJpdHMgPT0gU0VSSUFMX1NUT1BfMSkgeworICAgIGF0dHJpYnV0ZXMtPmJpb3MuZmllbGRzLnN0b3BCaXRzID0gU0VSSUFMX0JJT1NfU1RPUF8xOworICB9IGVsc2UgaWYgKGJpdHMgPT0gU0VSSUFMX1NUT1BfMikgeworICAgIGF0dHJpYnV0ZXMtPmJpb3MuZmllbGRzLnN0b3BCaXRzID0gU0VSSUFMX0JJT1NfU1RPUF8yOworICB9IGVsc2UgeworICAgIHJldHVybiAwOworICB9CisKKyAgcmV0dXJuIDE7Cit9CisKK2ludAorc2VyaWFsUHV0UGFyaXR5IChTZXJpYWxBdHRyaWJ1dGVzICphdHRyaWJ1dGVzLCBTZXJpYWxQYXJpdHkgcGFyaXR5KSB7CisgIHN3aXRjaCAocGFyaXR5KSB7CisgICAgY2FzZSBTRVJJQUxfUEFSSVRZX05PTkU6CisgICAgICBhdHRyaWJ1dGVzLT5iaW9zLmZpZWxkcy5wYXJpdHkgPSBTRVJJQUxfQklPU19QQVJJVFlfTk9ORTsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBTRVJJQUxfUEFSSVRZX09ERDoKKyAgICAgIGF0dHJpYnV0ZXMtPmJpb3MuZmllbGRzLnBhcml0eSA9IFNFUklBTF9CSU9TX1BBUklUWV9PREQ7CisgICAgICBicmVhazsKKworICAgIGNhc2UgU0VSSUFMX1BBUklUWV9FVkVOOgorICAgICAgYXR0cmlidXRlcy0+Ymlvcy5maWVsZHMucGFyaXR5ID0gU0VSSUFMX0JJT1NfUEFSSVRZX0VWRU47CisgICAgICBicmVhazsKKworICAgIGRlZmF1bHQ6CisgICAgICByZXR1cm4gMDsKKyAgfQorCisgIHJldHVybiAxOworfQorCitTZXJpYWxGbG93Q29udHJvbAorc2VyaWFsUHV0Rmxvd0NvbnRyb2wgKFNlcmlhbEF0dHJpYnV0ZXMgKmF0dHJpYnV0ZXMsIFNlcmlhbEZsb3dDb250cm9sIGZsb3cpIHsKKyAgcmV0dXJuIGZsb3c7Cit9CisKK2ludAorc2VyaWFsUHV0TW9kZW1TdGF0ZSAoU2VyaWFsQXR0cmlidXRlcyAqYXR0cmlidXRlcywgaW50IGVuYWJsZWQpIHsKKyAgcmV0dXJuICFlbmFibGVkOworfQorCit1bnNpZ25lZCBpbnQKK3NlcmlhbEdldERhdGFCaXRzIChjb25zdCBTZXJpYWxBdHRyaWJ1dGVzICphdHRyaWJ1dGVzKSB7CisgIHN3aXRjaCAoYXR0cmlidXRlcy0+Ymlvcy5maWVsZHMuZGF0YUJpdHMpIHsKKyAgICBkZWZhdWx0OgorICAgIGNhc2UgU0VSSUFMX0JJT1NfREFUQV84OiByZXR1cm4gODsKKyAgICBjYXNlIFNFUklBTF9CSU9TX0RBVEFfNzogcmV0dXJuIDc7CisgIH0KK30KKwordW5zaWduZWQgaW50CitzZXJpYWxHZXRTdG9wQml0cyAoY29uc3QgU2VyaWFsQXR0cmlidXRlcyAqYXR0cmlidXRlcykgeworICBzd2l0Y2ggKGF0dHJpYnV0ZXMtPmJpb3MuZmllbGRzLnN0b3BCaXRzKSB7CisgICAgZGVmYXVsdDoKKyAgICBjYXNlIFNFUklBTF9CSU9TX1NUT1BfMTogcmV0dXJuIDE7CisgICAgY2FzZSBTRVJJQUxfQklPU19TVE9QXzI6IHJldHVybiAyOworICB9Cit9CisKK3Vuc2lnbmVkIGludAorc2VyaWFsR2V0UGFyaXR5Qml0cyAoY29uc3QgU2VyaWFsQXR0cmlidXRlcyAqYXR0cmlidXRlcykgeworICByZXR1cm4gKGF0dHJpYnV0ZXMtPmJpb3MuZmllbGRzLnBhcml0eSA9PSBTRVJJQUxfQklPU19QQVJJVFlfTk9ORSk/IDA6IDE7Cit9CisKK2ludAorc2VyaWFsR2V0QXR0cmlidXRlcyAoU2VyaWFsRGV2aWNlICpzZXJpYWwsIFNlcmlhbEF0dHJpYnV0ZXMgKmF0dHJpYnV0ZXMpIHsKKyAgdW5zaWduZWQgY2hhciBsY3I7CisgIGludCBkaXZpc29yOworCisgIHsKKyAgICBpbnQgd2FzRW5hYmxlZCA9IGRpc2FibGUoKTsKKworICAgIGxjciA9IHNlcmlhbFJlYWRQb3J0KHNlcmlhbCwgVUFSVF9QT1JUX0xDUik7CisgICAgc2VyaWFsV3JpdGVQb3J0KHNlcmlhbCwgVUFSVF9QT1JUX0xDUiwgKGxjciB8IFVBUlRfRkxBR19MQ1JfRExBQikpOworCisgICAgZGl2aXNvciA9IChzZXJpYWxSZWFkUG9ydChzZXJpYWwsIFVBUlRfUE9SVF9ETEgpIDw8IDgpIHwKKyAgICAgICAgICAgICAgIHNlcmlhbFJlYWRQb3J0KHNlcmlhbCwgVUFSVF9QT1JUX0RMTCk7CisgICAgc2VyaWFsV3JpdGVQb3J0KHNlcmlhbCwgVUFSVF9QT1JUX0xDUiwgbGNyKTsKKworICAgIGlmICh3YXNFbmFibGVkKSBlbmFibGUoKTsKKyAgfQorCisgIGF0dHJpYnV0ZXMtPmJpb3MuYnl0ZSA9IGxjcjsKKworICB7CisgICAgY29uc3QgU2VyaWFsQmF1ZEVudHJ5ICpiYXVkID0gc2VyaWFsR2V0QmF1ZEVudHJ5KFNFUklBTF9ESVZJU09SX0JBU0UvZGl2aXNvcik7CisKKyAgICBpZiAoYmF1ZCkgeworICAgICAgYXR0cmlidXRlcy0+c3BlZWQgPSBiYXVkLT5zcGVlZDsKKyAgICB9IGVsc2UgeworICAgICAgbG9nTWVzc2FnZShMT0dfV0FSTklORywgInVuc3VwcG9ydGVkIHNlcmlhbCBkaXZpc29yOiAlZCIsIGRpdmlzb3IpOworICAgICAgbWVtc2V0KCZhdHRyaWJ1dGVzLT5zcGVlZCwgMCwgc2l6ZW9mKGF0dHJpYnV0ZXMtPnNwZWVkKSk7CisgICAgfQorICB9CisKKyAgYXR0cmlidXRlcy0+Ymlvcy5maWVsZHMuYnBzID0gYXR0cmlidXRlcy0+c3BlZWQuYnBzOworICByZXR1cm4gMTsKK30KKworaW50CitzZXJpYWxQdXRBdHRyaWJ1dGVzIChTZXJpYWxEZXZpY2UgKnNlcmlhbCwgY29uc3QgU2VyaWFsQXR0cmlidXRlcyAqYXR0cmlidXRlcykgeworICBpZiAoYXR0cmlidXRlcy0+c3BlZWQuYnBzIDwgKDBYMSA8PCAzKSkgeworICAgIHVuc2lnbmVkIGNoYXIgYnl0ZSA9IGF0dHJpYnV0ZXMtPmJpb3MuYnl0ZTsKKworICAgIGxvZ01lc3NhZ2UoTE9HX0NBVEVHT1JZKFNFUklBTF9JTyksICJwdXQgYXR0cmlidXRlczogcG9ydD0lZCBieXRlPTBYJTAyWCIsCisgICAgICAgICAgICAgICBzZXJpYWxHZXRQb3J0KHNlcmlhbCksIGJ5dGUpOworICAgIHNlcmlhbEJpb3NDb21tYW5kKHNlcmlhbCwgX0NPTV9JTklULCBieXRlKTsKKyAgfSBlbHNlIHsKKyAgICBTZXJpYWxCaW9zQ29uZmlndXJhdGlvbiBsY3IgPSBhdHRyaWJ1dGVzLT5iaW9zOworCisgICAgbGNyLmZpZWxkcy5icHMgPSAwOworICAgIGxvZ01lc3NhZ2UoTE9HX0NBVEVHT1JZKFNFUklBTF9JTyksICJwdXQgYXR0cmlidXRlczogcG9ydD0lZCBsY3I9MFglMDJYIGRpdmlzb3I9JXUiLAorICAgICAgICAgICAgICAgc2VyaWFsR2V0UG9ydChzZXJpYWwpLCBsY3IuYnl0ZSwgYXR0cmlidXRlcy0+c3BlZWQuZGl2aXNvcik7CisKKyAgICB7CisgICAgICBpbnQgd2FzRW5hYmxlZCA9IGRpc2FibGUoKTsKKworICAgICAgc2VyaWFsV3JpdGVQb3J0KHNlcmlhbCwgVUFSVF9QT1JUX0xDUiwgKGxjci5ieXRlIHwgVUFSVF9GTEFHX0xDUl9ETEFCKSk7CisgICAgICBzZXJpYWxXcml0ZVBvcnQoc2VyaWFsLCBVQVJUX1BPUlRfRExMLCAoYXR0cmlidXRlcy0+c3BlZWQuZGl2aXNvciAmIDBYRkYpKTsKKyAgICAgIHNlcmlhbFdyaXRlUG9ydChzZXJpYWwsIFVBUlRfUE9SVF9ETEgsIChhdHRyaWJ1dGVzLT5zcGVlZC5kaXZpc29yID4+IDgpKTsKKyAgICAgIHNlcmlhbFdyaXRlUG9ydChzZXJpYWwsIFVBUlRfUE9SVF9MQ1IsIGxjci5ieXRlKTsKKworICAgICAgaWYgKHdhc0VuYWJsZWQpIGVuYWJsZSgpOworICAgIH0KKyAgfQorCisgIHJldHVybiAxOworfQorCitpbnQKK3NlcmlhbENhbmNlbElucHV0IChTZXJpYWxEZXZpY2UgKnNlcmlhbCkgeworICByZXR1cm4gMTsKK30KKworaW50CitzZXJpYWxDYW5jZWxPdXRwdXQgKFNlcmlhbERldmljZSAqc2VyaWFsKSB7CisgIHJldHVybiAxOworfQorCitpbnQKK3NlcmlhbE1vbml0b3JJbnB1dCAoU2VyaWFsRGV2aWNlICpzZXJpYWwsIEFzeW5jTW9uaXRvckNhbGxiYWNrICpjYWxsYmFjaywgdm9pZCAqZGF0YSkgeworICByZXR1cm4gMDsKK30KKworaW50CitzZXJpYWxQb2xsSW5wdXQgKFNlcmlhbERldmljZSAqc2VyaWFsLCBpbnQgdGltZW91dCkgeworICBUaW1lUGVyaW9kIHBlcmlvZDsKKworICBpZiAodGltZW91dCkgc3RhcnRUaW1lUGVyaW9kKCZwZXJpb2QsIHRpbWVvdXQpOworCisgIHdoaWxlICgxKSB7CisgICAgaWYgKHNlcmlhbFRlc3RJbnB1dChzZXJpYWwpKSByZXR1cm4gMTsKKyAgICBpZiAoIXRpbWVvdXQpIGJyZWFrOworICAgIGlmIChhZnRlclRpbWVQZXJpb2QoJnBlcmlvZCwgTlVMTCkpIGJyZWFrOworICAgIGFzeW5jV2FpdCgxKTsKKyAgfQorCisgIGVycm5vID0gRUFHQUlOOworICByZXR1cm4gMDsKK30KKworaW50CitzZXJpYWxEcmFpbk91dHB1dCAoU2VyaWFsRGV2aWNlICpzZXJpYWwpIHsKKyAgcmV0dXJuIDE7Cit9CisKK3NzaXplX3QKK3NlcmlhbEdldERhdGEgKAorICBTZXJpYWxEZXZpY2UgKnNlcmlhbCwKKyAgdm9pZCAqYnVmZmVyLCBzaXplX3Qgc2l6ZSwKKyAgaW50IGluaXRpYWxUaW1lb3V0LCBpbnQgc3Vic2VxdWVudFRpbWVvdXQKKykgeworICB1bnNpZ25lZCBjaGFyICpjb25zdCBzdGFydCA9IGJ1ZmZlcjsKKyAgdW5zaWduZWQgY2hhciAqY29uc3QgZW5kID0gc3RhcnQgKyBzaXplOworICB1bnNpZ25lZCBjaGFyICpieXRlID0gc3RhcnQ7CisgIGludCB0aW1lb3V0ID0gaW5pdGlhbFRpbWVvdXQ7CisKKyAgd2hpbGUgKGJ5dGUgPCBlbmQpIHsKKyAgICBpZiAoIXNlcmlhbFBvbGxJbnB1dChzZXJpYWwsIHRpbWVvdXQpKSBicmVhazsKKyAgICB0aW1lb3V0ID0gc3Vic2VxdWVudFRpbWVvdXQ7CisKKyAgICB7CisgICAgICBpbnQgc3RhdHVzID0gc2VyaWFsQmlvc0NvbW1hbmQoc2VyaWFsLCBfQ09NX1JFQ0VJVkUsIDApOworCisgICAgICAqYnl0ZSsrID0gc3RhdHVzICYgMFhGRjsKKyAgICB9CisgIH0KKworICByZXR1cm4gYnl0ZSAtIHN0YXJ0OworfQorCitzc2l6ZV90CitzZXJpYWxQdXREYXRhICgKKyAgU2VyaWFsRGV2aWNlICpzZXJpYWwsCisgIGNvbnN0IHZvaWQgKmRhdGEsIHNpemVfdCBzaXplCispIHsKKyAgcmV0dXJuIHdyaXRlRmlsZShzZXJpYWwtPmZpbGVEZXNjcmlwdG9yLCBkYXRhLCBzaXplKTsKK30KKworaW50CitzZXJpYWxHZXRMaW5lcyAoU2VyaWFsRGV2aWNlICpzZXJpYWwpIHsKKyAgc2VyaWFsLT5saW5lc1N0YXRlID0gc2VyaWFsUmVhZFBvcnQoc2VyaWFsLCBVQVJUX1BPUlRfTVNSKSAmIDBYRjA7CisgIHJldHVybiAxOworfQorCitpbnQKK3NlcmlhbFB1dExpbmVzIChTZXJpYWxEZXZpY2UgKnNlcmlhbCwgU2VyaWFsTGluZXMgaGlnaCwgU2VyaWFsTGluZXMgbG93KSB7CisgIGludCB3YXNFbmFibGVkID0gZGlzYWJsZSgpOworICB1bnNpZ25lZCBjaGFyIG9sZE1DUiA9IHNlcmlhbFJlYWRQb3J0KHNlcmlhbCwgVUFSVF9QT1JUX01DUik7CisKKyAgc2VyaWFsV3JpdGVQb3J0KHNlcmlhbCwgVUFSVF9QT1JUX01DUiwKKyAgICAgICAgICAgICAgICAgIChvbGRNQ1IgfCBoaWdoKSAmIH5sb3cpOworICBpZiAod2FzRW5hYmxlZCkgZW5hYmxlKCk7CisgIHJldHVybiAxOworfQorCitpbnQKK3NlcmlhbFJlZ2lzdGVyV2FpdExpbmVzIChTZXJpYWxEZXZpY2UgKnNlcmlhbCwgU2VyaWFsTGluZXMgbGluZXMpIHsKKyAgcmV0dXJuIDE7Cit9CisKK2ludAorc2VyaWFsTW9uaXRvcldhaXRMaW5lcyAoU2VyaWFsRGV2aWNlICpzZXJpYWwpIHsKKyAgcmV0dXJuIDA7Cit9CisKK2ludAorc2VyaWFsQ29ubmVjdERldmljZSAoU2VyaWFsRGV2aWNlICpzZXJpYWwsIGNvbnN0IGNoYXIgKmRldmljZSkgeworICBpZiAoKHNlcmlhbC0+ZmlsZURlc2NyaXB0b3IgPSBvcGVuKGRldmljZSwgT19SRFdSfE9fTk9DVFRZfE9fTk9OQkxPQ0spKSAhPSAtMSkgeworICAgIHNlcmlhbC0+cGFja2FnZS5kZXZpY2VJbmRleCA9IC0xOworCisgICAgeworICAgICAgY2hhciAqdHJ1ZVBhdGg7CisKKyAgICAgIGlmICgodHJ1ZVBhdGggPSBfdHJ1ZW5hbWUoZGV2aWNlLCBOVUxMKSkpIHsKKyAgICAgICAgY2hhciAqY29tOworCisgICAgICAgIHsKKyAgICAgICAgICBjaGFyICpjID0gdHJ1ZVBhdGg7CisKKyAgICAgICAgICB3aGlsZSAoKmMpIHsKKyAgICAgICAgICAgICpjID0gdG91cHBlcigqYyk7CisgICAgICAgICAgICBjICs9IDE7CisgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYgKChjb20gPSBzdHJzdHIodHJ1ZVBhdGgsICJDT00iKSkpIHsKKyAgICAgICAgICBzZXJpYWwtPnBhY2thZ2UuZGV2aWNlSW5kZXggPSBhdG9pKGNvbSszKSAtIDE7CisgICAgICAgIH0KKworICAgICAgICBmcmVlKHRydWVQYXRoKTsKKyAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoc2VyaWFsLT5wYWNrYWdlLmRldmljZUluZGV4ID49IDApIHsKKyAgICAgIGlmIChzZXJpYWxQcmVwYXJlRGV2aWNlKHNlcmlhbCkpIHsKKyAgICAgICAgbG9nTWVzc2FnZShMT0dfQ0FURUdPUlkoU0VSSUFMX0lPKSwgImRldmljZSBvcGVuZWQ6ICVzOiBmZD0lZCIsCisgICAgICAgICAgICAgICAgICAgZGV2aWNlLCBzZXJpYWwtPmZpbGVEZXNjcmlwdG9yKTsKKyAgICAgICAgcmV0dXJuIDE7CisgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgIGxvZ01lc3NhZ2UoTE9HX0VSUiwgImNvdWxkIG5vdCBkZXRlcm1pbmUgc2VyaWFsIGRldmljZSBudW1iZXI6ICVzIiwgZGV2aWNlKTsKKyAgICB9CisKKyAgICBjbG9zZShzZXJpYWwtPmZpbGVEZXNjcmlwdG9yKTsKKyAgfSBlbHNlIHsKKyAgICBsb2dNZXNzYWdlKExPR19FUlIsICJjYW5ub3Qgb3BlbiBzZXJpYWwgZGV2aWNlOiAlczogJXMiLCBkZXZpY2UsIHN0cmVycm9yKGVycm5vKSk7CisgIH0KKworICByZXR1cm4gMDsKK30KKwordm9pZAorc2VyaWFsRGlzY29ubmVjdERldmljZSAoU2VyaWFsRGV2aWNlICpzZXJpYWwpIHsKK30KKworaW50CitzZXJpYWxFbnN1cmVGaWxlRGVzY3JpcHRvciAoU2VyaWFsRGV2aWNlICpzZXJpYWwpIHsKKyAgcmV0dXJuIDE7Cit9CisKK3ZvaWQKK3NlcmlhbENsZWFyRXJyb3IgKFNlcmlhbERldmljZSAqc2VyaWFsKSB7Cit9CisKZGlmZiAtLWdpdCBhL1Byb2dyYW1zL3NlcmlhbF9tc2Rvcy5oIGIvUHJvZ3JhbXMvc2VyaWFsX21zZG9zLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTQxYjVkYQotLS0gL2Rldi9udWxsCisrKyBiL1Byb2dyYW1zL3NlcmlhbF9tc2Rvcy5oCkBAIC0wLDAgKzEsMTI0IEBACisvKgorICogQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyAqICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyAqCisgKiBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorICoKKyAqIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyAqCisgKiBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisgKi8KKworI2lmbmRlZiBCUkxUVFlfSU5DTFVERURfU0VSSUFMX01TRE9TCisjZGVmaW5lIEJSTFRUWV9JTkNMVURFRF9TRVJJQUxfTVNET1MKKworI2luY2x1ZGUgInNlcmlhbF91YXJ0LmgiCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYgLyogX19jcGx1c3BsdXMgKi8KKwordHlwZWRlZiBzdHJ1Y3QgeworICB1bnNpZ25lZCBzaG9ydCBkaXZpc29yOworICB1bnNpZ25lZCBzaG9ydCBicHM7Cit9IFNlcmlhbFNwZWVkOworCit0eXBlZGVmIHVuaW9uIHsKKyAgdW5zaWduZWQgY2hhciBieXRlOworCisgIHN0cnVjdCB7CisgICAgdW5zaWduZWQgZGF0YUJpdHM6MjsKKyAgICB1bnNpZ25lZCBzdG9wQml0czoxOworICAgIHVuc2lnbmVkIHBhcml0eToyOworICAgIHVuc2lnbmVkIGJwczozOworICB9IGZpZWxkczsKK30gU2VyaWFsQmlvc0NvbmZpZ3VyYXRpb247CisKK3R5cGVkZWYgZW51bSB7CisgIFNFUklBTF9CSU9TX0RBVEFfNyA9IDIsCisgIFNFUklBTF9CSU9TX0RBVEFfOCA9IDMKK30gc2VyaWFsQmlvc0RhdGFCaXRzOworCit0eXBlZGVmIGVudW0geworICBTRVJJQUxfQklPU19TVE9QXzEgPSAwLAorICBTRVJJQUxfQklPU19TVE9QXzIgPSAxCit9IFNlcmlhbEJpb3NTdG9wQml0czsKKwordHlwZWRlZiBlbnVtIHsKKyAgU0VSSUFMX0JJT1NfUEFSSVRZX05PTkUgPSAwLAorICBTRVJJQUxfQklPU19QQVJJVFlfT0REICA9IDEsCisgIFNFUklBTF9CSU9TX1BBUklUWV9FVkVOID0gMworfSBTZXJpYWxCaW9zUGFyaXR5OworCit0eXBlZGVmIGVudW0geworICBTRVJJQUxfQklPU19CQVVEXzExMCA9IDAsCisgIFNFUklBTF9CSU9TX0JBVURfMTUwLAorICBTRVJJQUxfQklPU19CQVVEXzMwMCwKKyAgU0VSSUFMX0JJT1NfQkFVRF82MDAsCisgIFNFUklBTF9CSU9TX0JBVURfMTIwMCwKKyAgU0VSSUFMX0JJT1NfQkFVRF8yNDAwLAorICBTRVJJQUxfQklPU19CQVVEXzQ4MDAsCisgIFNFUklBTF9CSU9TX0JBVURfOTYwMCwKKworICAvKiBEbyBub3QgcmVvcmRlciwgYWRkIHRvLCBvciBkZWxldGUgZnJvbSB0aGUgcHJlY2VkaW5nIHNldCBvZiBkZWZpbml0aW9ucworICAgKiBiZWNhdXNlIHRoZWlyIHZhbHVlcyBhcmUgc2lnbmlmaWNhbnQgd2l0aGluIHRoZSBvcGVyYXRpbmcgc3lzdGVtLgorICAgKiBUaGUgc2V0IGRlZmluZWQgYmVsb3cgbWF5IGJlIGV4dGVuZGVkIGFzIG5lZWRlZC4KKyAgICovCisKKyAgU0VSSUFMX0JJT1NfQkFVRF8xOTIwMCwKKyAgU0VSSUFMX0JJT1NfQkFVRF8zODQwMCwKKyAgU0VSSUFMX0JJT1NfQkFVRF81NzYwMCwKKyAgU0VSSUFMX0JJT1NfQkFVRF8xMTUyMDAKK30gU2VyaWFsQmlvc0JhdWQ7CisKK3R5cGVkZWYgZW51bSB7CisgIFNFUklBTF9CSU9TX1NUQVRVU19DVFNfQ0hBTkdFICAgID0gMFgwMDAxLAorICBTRVJJQUxfQklPU19TVEFUVVNfRFNSX0NIQU5HRSAgICA9IDBYMDAwMiwKKyAgU0VSSUFMX0JJT1NfU1RBVFVTX1JOR19DSEFOR0UgICAgPSAwWDAwMDQsCisgIFNFUklBTF9CSU9TX1NUQVRVU19DQVJfQ0hBTkdFICAgID0gMFgwMDA4LAorCisgIFNFUklBTF9CSU9TX1NUQVRVU19DVFNfUFJFU0VOVCAgID0gMFgwMDEwLAorICBTRVJJQUxfQklPU19TVEFUVVNfRFNSX1BSRVNFTlQgICA9IDBYMDAyMCwKKyAgU0VSSUFMX0JJT1NfU1RBVFVTX1JOR19QUkVTRU5UICAgPSAwWDAwNDAsCisgIFNFUklBTF9CSU9TX1NUQVRVU19DQVJfUFJFU0VOVCAgID0gMFgwMDgwLAorCisgIFNFUklBTF9CSU9TX1NUQVRVU19EQVRBX1JFQURZICAgID0gMFgwMTAwLAorICBTRVJJQUxfQklPU19TVEFUVVNfT1ZFUlJVTl9FUlJPUiA9IDBYMDIwMCwKKyAgU0VSSUFMX0JJT1NfU1RBVFVTX1BBUklUWV9FUlJPUiAgPSAwWDA0MDAsCisgIFNFUklBTF9CSU9TX1NUQVRVU19GUkFNSU5HX0VSUk9SID0gMFgwODAwLAorCisgIFNFUklBTF9CSU9TX1NUQVRVU19CUktfREVURUNUICAgID0gMFgxMDAwLAorICBTRVJJQUxfQklPU19TVEFUVVNfVEhSX0VNUFRZICAgICA9IDBYMjAwMCwKKyAgU0VSSUFMX0JJT1NfU1RBVFVTX1RTUl9FTVBUWSAgICAgPSAwWDQwMDAsCisgIFNFUklBTF9CSU9TX1NUQVRVU19USU1FT1VUICAgICAgID0gMFg4MDAwCit9IFNlcmlhbEJpb3NTdGF0dXM7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgU2VyaWFsQmlvc0NvbmZpZ3VyYXRpb24gYmlvczsKKyAgU2VyaWFsU3BlZWQgc3BlZWQ7Cit9IFNlcmlhbEF0dHJpYnV0ZXM7CisKK3R5cGVkZWYgdW5zaWduZWQgY2hhciBTZXJpYWxMaW5lczsKKyNkZWZpbmUgU0VSSUFMX0xJTkVfRFRSIFVBUlRfRkxBR19NQ1JfRFRSCisjZGVmaW5lIFNFUklBTF9MSU5FX1JUUyBVQVJUX0ZMQUdfTUNSX1JUUworI2RlZmluZSBTRVJJQUxfTElORV9DVFMgVUFSVF9GTEFHX01TUl9DVFMKKyNkZWZpbmUgU0VSSUFMX0xJTkVfRFNSIFVBUlRfRkxBR19NU1JfRFNSCisjZGVmaW5lIFNFUklBTF9MSU5FX1JORyBVQVJUX0ZMQUdfTVNSX1JORworI2RlZmluZSBTRVJJQUxfTElORV9DQVIgVUFSVF9GTEFHX01TUl9DQVIKKwordHlwZWRlZiBzdHJ1Y3QgeworICBpbnQgZGV2aWNlSW5kZXg7Cit9IFNlcmlhbFBhY2thZ2VGaWVsZHM7CisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmIC8qIF9fY3BsdXNwbHVzICovCisKKyNlbmRpZiAvKiBCUkxUVFlfSU5DTFVERURfU0VSSUFMX01TRE9TICovCmRpZmYgLS1naXQgYS9Qcm9ncmFtcy9zZXJpYWxfbm9uZS5jIGIvUHJvZ3JhbXMvc2VyaWFsX25vbmUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYjlmYmMxCi0tLSAvZGV2L251bGwKKysrIGIvUHJvZ3JhbXMvc2VyaWFsX25vbmUuYwpAQCAtMCwwICsxLDE3NSBAQAorLyoKKyAqIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisgKiAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisgKgorICogQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKKyNpbmNsdWRlICJwcm9sb2d1ZS5oIgorCisjaW5jbHVkZSA8ZXJybm8uaD4KKworI2luY2x1ZGUgInNlcmlhbF9ub25lLmgiCisjaW5jbHVkZSAic2VyaWFsX2ludGVybmFsLmgiCisKK0JFR0lOX1NFUklBTF9CQVVEX1RBQkxFCitFTkRfU0VSSUFMX0JBVURfVEFCTEUKKwordm9pZAorc2VyaWFsUHV0SW5pdGlhbEF0dHJpYnV0ZXMgKFNlcmlhbEF0dHJpYnV0ZXMgKmF0dHJpYnV0ZXMpIHsKK30KKworaW50CitzZXJpYWxQdXRTcGVlZCAoU2VyaWFsQXR0cmlidXRlcyAqYXR0cmlidXRlcywgU2VyaWFsU3BlZWQgc3BlZWQpIHsKKyAgcmV0dXJuIDA7Cit9CisKK2ludAorc2VyaWFsUHV0RGF0YUJpdHMgKFNlcmlhbEF0dHJpYnV0ZXMgKmF0dHJpYnV0ZXMsIHVuc2lnbmVkIGludCBiaXRzKSB7CisgIHJldHVybiAwOworfQorCitpbnQKK3NlcmlhbFB1dFN0b3BCaXRzIChTZXJpYWxBdHRyaWJ1dGVzICphdHRyaWJ1dGVzLCBTZXJpYWxTdG9wQml0cyBiaXRzKSB7CisgIHJldHVybiAwOworfQorCitpbnQKK3NlcmlhbFB1dFBhcml0eSAoU2VyaWFsQXR0cmlidXRlcyAqYXR0cmlidXRlcywgU2VyaWFsUGFyaXR5IHBhcml0eSkgeworICByZXR1cm4gMDsKK30KKworU2VyaWFsRmxvd0NvbnRyb2wKK3NlcmlhbFB1dEZsb3dDb250cm9sIChTZXJpYWxBdHRyaWJ1dGVzICphdHRyaWJ1dGVzLCBTZXJpYWxGbG93Q29udHJvbCBmbG93KSB7CisgIHJldHVybiBmbG93OworfQorCitpbnQKK3NlcmlhbFB1dE1vZGVtU3RhdGUgKFNlcmlhbEF0dHJpYnV0ZXMgKmF0dHJpYnV0ZXMsIGludCBlbmFibGVkKSB7CisgIHJldHVybiAwOworfQorCit1bnNpZ25lZCBpbnQKK3NlcmlhbEdldERhdGFCaXRzIChjb25zdCBTZXJpYWxBdHRyaWJ1dGVzICphdHRyaWJ1dGVzKSB7CisgIHJldHVybiA4OworfQorCit1bnNpZ25lZCBpbnQKK3NlcmlhbEdldFN0b3BCaXRzIChjb25zdCBTZXJpYWxBdHRyaWJ1dGVzICphdHRyaWJ1dGVzKSB7CisgIHJldHVybiAxOworfQorCit1bnNpZ25lZCBpbnQKK3NlcmlhbEdldFBhcml0eUJpdHMgKGNvbnN0IFNlcmlhbEF0dHJpYnV0ZXMgKmF0dHJpYnV0ZXMpIHsKKyAgcmV0dXJuIDA7Cit9CisKK2ludAorc2VyaWFsR2V0QXR0cmlidXRlcyAoU2VyaWFsRGV2aWNlICpzZXJpYWwsIFNlcmlhbEF0dHJpYnV0ZXMgKmF0dHJpYnV0ZXMpIHsKKyAgZXJybm8gPSBFTk9TWVM7CisgIHJldHVybiAwOworfQorCitpbnQKK3NlcmlhbFB1dEF0dHJpYnV0ZXMgKFNlcmlhbERldmljZSAqc2VyaWFsLCBjb25zdCBTZXJpYWxBdHRyaWJ1dGVzICphdHRyaWJ1dGVzKSB7CisgIGVycm5vID0gRU5PU1lTOworICByZXR1cm4gMDsKK30KKworaW50CitzZXJpYWxDYW5jZWxJbnB1dCAoU2VyaWFsRGV2aWNlICpzZXJpYWwpIHsKKyAgcmV0dXJuIDE7Cit9CisKK2ludAorc2VyaWFsQ2FuY2VsT3V0cHV0IChTZXJpYWxEZXZpY2UgKnNlcmlhbCkgeworICByZXR1cm4gMTsKK30KKworaW50CitzZXJpYWxNb25pdG9ySW5wdXQgKFNlcmlhbERldmljZSAqc2VyaWFsLCBBc3luY01vbml0b3JDYWxsYmFjayAqY2FsbGJhY2ssIHZvaWQgKmRhdGEpIHsKKyAgcmV0dXJuIDA7Cit9CisKK2ludAorc2VyaWFsUG9sbElucHV0IChTZXJpYWxEZXZpY2UgKnNlcmlhbCwgaW50IHRpbWVvdXQpIHsKKyAgZXJybm8gPSBFQUdBSU47CisgIHJldHVybiAwOworfQorCitpbnQKK3NlcmlhbERyYWluT3V0cHV0IChTZXJpYWxEZXZpY2UgKnNlcmlhbCkgeworICByZXR1cm4gMTsKK30KKworc3NpemVfdAorc2VyaWFsR2V0RGF0YSAoCisgIFNlcmlhbERldmljZSAqc2VyaWFsLAorICB2b2lkICpidWZmZXIsIHNpemVfdCBzaXplLAorICBpbnQgaW5pdGlhbFRpbWVvdXQsIGludCBzdWJzZXF1ZW50VGltZW91dAorKSB7CisgIGVycm5vID0gRU5PU1lTOworICByZXR1cm4gLTE7Cit9CisKK3NzaXplX3QKK3NlcmlhbFB1dERhdGEgKAorICBTZXJpYWxEZXZpY2UgKnNlcmlhbCwKKyAgY29uc3Qgdm9pZCAqZGF0YSwgc2l6ZV90IHNpemUKKykgeworICBlcnJubyA9IEVOT1NZUzsKKyAgcmV0dXJuIC0xOworfQorCitpbnQKK3NlcmlhbEdldExpbmVzIChTZXJpYWxEZXZpY2UgKnNlcmlhbCkgeworICBlcnJubyA9IEVOT1NZUzsKKyAgcmV0dXJuIDA7Cit9CisKK2ludAorc2VyaWFsUHV0TGluZXMgKFNlcmlhbERldmljZSAqc2VyaWFsLCBTZXJpYWxMaW5lcyBoaWdoLCBTZXJpYWxMaW5lcyBsb3cpIHsKKyAgZXJybm8gPSBFTk9TWVM7CisgIHJldHVybiAwOworfQorCitpbnQKK3NlcmlhbFJlZ2lzdGVyV2FpdExpbmVzIChTZXJpYWxEZXZpY2UgKnNlcmlhbCwgU2VyaWFsTGluZXMgbGluZXMpIHsKKyAgcmV0dXJuIDE7Cit9CisKK2ludAorc2VyaWFsTW9uaXRvcldhaXRMaW5lcyAoU2VyaWFsRGV2aWNlICpzZXJpYWwpIHsKKyAgcmV0dXJuIDA7Cit9CisKK2ludAorc2VyaWFsQ29ubmVjdERldmljZSAoU2VyaWFsRGV2aWNlICpzZXJpYWwsIGNvbnN0IGNoYXIgKmRldmljZSkgeworICBlcnJubyA9IEVOT0VOVDsKKyAgcmV0dXJuIDA7Cit9CisKK3ZvaWQKK3NlcmlhbERpc2Nvbm5lY3REZXZpY2UgKFNlcmlhbERldmljZSAqc2VyaWFsKSB7Cit9CisKK2ludAorc2VyaWFsRW5zdXJlRmlsZURlc2NyaXB0b3IgKFNlcmlhbERldmljZSAqc2VyaWFsKSB7CisgIHJldHVybiAxOworfQorCit2b2lkCitzZXJpYWxDbGVhckVycm9yIChTZXJpYWxEZXZpY2UgKnNlcmlhbCkgeworfQorCmRpZmYgLS1naXQgYS9Qcm9ncmFtcy9zZXJpYWxfbm9uZS5oIGIvUHJvZ3JhbXMvc2VyaWFsX25vbmUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNmY1ZTcyCi0tLSAvZGV2L251bGwKKysrIGIvUHJvZ3JhbXMvc2VyaWFsX25vbmUuaApAQCAtMCwwICsxLDQ1IEBACisvKgorICogQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyAqICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyAqCisgKiBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorICoKKyAqIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyAqCisgKiBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisgKi8KKworI2lmbmRlZiBCUkxUVFlfSU5DTFVERURfU0VSSUFMX05PTkUKKyNkZWZpbmUgQlJMVFRZX0lOQ0xVREVEX1NFUklBTF9OT05FCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYgLyogX19jcGx1c3BsdXMgKi8KKwordHlwZWRlZiB1bnNpZ25lZCBjaGFyIFNlcmlhbFNwZWVkOwordHlwZWRlZiB1bnNpZ25lZCBjaGFyIFNlcmlhbEF0dHJpYnV0ZXM7CisKK3R5cGVkZWYgdW5zaWduZWQgY2hhciBTZXJpYWxMaW5lczsKKyNkZWZpbmUgU0VSSUFMX0xJTkVfRFRSIDBYMDEKKyNkZWZpbmUgU0VSSUFMX0xJTkVfUlRTIDBYMDIKKyNkZWZpbmUgU0VSSUFMX0xJTkVfQ1RTIDBYMTAKKyNkZWZpbmUgU0VSSUFMX0xJTkVfRFNSIDBYMjAKKyNkZWZpbmUgU0VSSUFMX0xJTkVfUk5HIDBYNDAKKyNkZWZpbmUgU0VSSUFMX0xJTkVfQ0FSIDBYODAKKwordHlwZWRlZiBzdHJ1Y3QgeworICBjaGFyIGR1bW15OworfSBTZXJpYWxQYWNrYWdlRmllbGRzOworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZiAvKiBfX2NwbHVzcGx1cyAqLworCisjZW5kaWYgLyogQlJMVFRZX0lOQ0xVREVEX1NFUklBTF9OT05FICovCmRpZmYgLS1naXQgYS9Qcm9ncmFtcy9zZXJpYWxfdGVybWlvcy5jIGIvUHJvZ3JhbXMvc2VyaWFsX3Rlcm1pb3MuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNzQzOTkwCi0tLSAvZGV2L251bGwKKysrIGIvUHJvZ3JhbXMvc2VyaWFsX3Rlcm1pb3MuYwpAQCAtMCwwICsxLDU1MSBAQAorLyoKKyAqIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisgKiAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisgKgorICogQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKKyNpbmNsdWRlICJwcm9sb2d1ZS5oIgorCisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorI2luY2x1ZGUgPGZjbnRsLmg+CisKKyNpbmNsdWRlICJsb2cuaCIKKyNpbmNsdWRlICJpb19taXNjLmgiCisjaW5jbHVkZSAiYXN5bmNfaW8uaCIKKworI2luY2x1ZGUgInNlcmlhbF90ZXJtaW9zLmgiCisjaW5jbHVkZSAic2VyaWFsX2ludGVybmFsLmgiCisKK0JFR0lOX1NFUklBTF9CQVVEX1RBQkxFCisjaWZkZWYgQjUwCisgIHs1MCwgQjUwfSwKKyNlbmRpZiAvKiBCNTAgKi8KKworI2lmZGVmIEI3NQorICB7NzUsIEI3NX0sCisjZW5kaWYgLyogQjc1ICovCisKKyNpZmRlZiBCMTEwCisgIHsxMTAsIEIxMTB9LAorI2VuZGlmIC8qIEIxMTAgKi8KKworI2lmZGVmIEIxMzQKKyAgezEzNCwgQjEzNH0sCisjZW5kaWYgLyogQjEzNCAqLworCisjaWZkZWYgQjE1MAorICB7MTUwLCBCMTUwfSwKKyNlbmRpZiAvKiBCMTUwICovCisKKyNpZmRlZiBCMjAwCisgIHsyMDAsIEIyMDB9LAorI2VuZGlmIC8qIEIyMDAgKi8KKworI2lmZGVmIEIzMDAKKyAgezMwMCwgQjMwMH0sCisjZW5kaWYgLyogQjMwMCAqLworCisjaWZkZWYgQjYwMAorICB7NjAwLCBCNjAwfSwKKyNlbmRpZiAvKiBCNjAwICovCisKKyNpZmRlZiBCMTIwMAorICB7MTIwMCwgQjEyMDB9LAorI2VuZGlmIC8qIEIxMjAwICovCisKKyNpZmRlZiBCMTgwMAorICB7MTgwMCwgQjE4MDB9LAorI2VuZGlmIC8qIEIxODAwICovCisKKyNpZmRlZiBCMjQwMAorICB7MjQwMCwgQjI0MDB9LAorI2VuZGlmIC8qIEIyNDAwICovCisKKyNpZmRlZiBCNDgwMAorICB7NDgwMCwgQjQ4MDB9LAorI2VuZGlmIC8qIEI0ODAwICovCisKKyNpZmRlZiBCOTYwMAorICB7OTYwMCwgQjk2MDB9LAorI2VuZGlmIC8qIEI5NjAwICovCisKKyNpZmRlZiBCMTkyMDAKKyAgezE5MjAwLCBCMTkyMDB9LAorI2VuZGlmIC8qIEIxOTIwMCAqLworCisjaWZkZWYgQjM4NDAwCisgIHszODQwMCwgQjM4NDAwfSwKKyNlbmRpZiAvKiBCMzg0MDAgKi8KKworI2lmZGVmIEI1NzYwMAorICB7NTc2MDAsIEI1NzYwMH0sCisjZW5kaWYgLyogQjU3NjAwICovCisKKyNpZmRlZiBCMTE1MjAwCisgIHsxMTUyMDAsIEIxMTUyMDB9LAorI2VuZGlmIC8qIEIxMTUyMDAgKi8KKworI2lmZGVmIEIyMzA0MDAKKyAgezIzMDQwMCwgQjIzMDQwMH0sCisjZW5kaWYgLyogQjIzMDQwMCAqLworCisjaWZkZWYgQjQ2MDgwMAorICB7NDYwODAwLCBCNDYwODAwfSwKKyNlbmRpZiAvKiBCNDYwODAwICovCisKKyNpZmRlZiBCNTAwMDAwCisgIHs1MDAwMDAsIEI1MDAwMDB9LAorI2VuZGlmIC8qIEI1MDAwMDAgKi8KKworI2lmZGVmIEI1NzYwMDAKKyAgezU3NjAwMCwgQjU3NjAwMH0sCisjZW5kaWYgLyogQjU3NjAwMCAqLworCisjaWZkZWYgQjkyMTYwMAorICB7OTIxNjAwLCBCOTIxNjAwfSwKKyNlbmRpZiAvKiBCOTIxNjAwICovCisKKyNpZmRlZiBCMTAwMDAwMAorICB7MTAwMDAwMCwgQjEwMDAwMDB9LAorI2VuZGlmIC8qIEIxMDAwMDAwICovCisKKyNpZmRlZiBCMTE1MjAwMAorICB7MTE1MjAwMCwgQjExNTIwMDB9LAorI2VuZGlmIC8qIEIxMTUyMDAwICovCisKKyNpZmRlZiBCMTUwMDAwMAorICB7MTUwMDAwMCwgQjE1MDAwMDB9LAorI2VuZGlmIC8qIEIxNTAwMDAwICovCisKKyNpZmRlZiBCMjAwMDAwMAorICB7MjAwMDAwMCwgQjIwMDAwMDB9LAorI2VuZGlmIC8qIEIyMDAwMDAwICovCisKKyNpZmRlZiBCMjUwMDAwMAorICB7MjUwMDAwMCwgQjI1MDAwMDB9LAorI2VuZGlmIC8qIEIyNTAwMDAwICovCisKKyNpZmRlZiBCMzAwMDAwMAorICB7MzAwMDAwMCwgQjMwMDAwMDB9LAorI2VuZGlmIC8qIEIzMDAwMDAwICovCisKKyNpZmRlZiBCMzUwMDAwMAorICB7MzUwMDAwMCwgQjM1MDAwMDB9LAorI2VuZGlmIC8qIEIzNTAwMDAwICovCisKKyNpZmRlZiBCNDAwMDAwMAorICB7NDAwMDAwMCwgQjQwMDAwMDB9LAorI2VuZGlmIC8qIEI0MDAwMDAwICovCitFTkRfU0VSSUFMX0JBVURfVEFCTEUKKwordm9pZAorc2VyaWFsUHV0SW5pdGlhbEF0dHJpYnV0ZXMgKFNlcmlhbEF0dHJpYnV0ZXMgKmF0dHJpYnV0ZXMpIHsKKyAgYXR0cmlidXRlcy0+Y19jZmxhZyA9IENSRUFEOworICBhdHRyaWJ1dGVzLT5jX2lmbGFnID0gSUdOUEFSIHwgSUdOQlJLOworCisjaWZkZWYgSUVYVEVOCisgIGF0dHJpYnV0ZXMtPmNfbGZsYWcgfD0gSUVYVEVOOworI2VuZGlmIC8qIElFWFRFTiAqLworCisjaWZkZWYgX1BPU0lYX1ZESVNBQkxFCisgIGlmIChfUE9TSVhfVkRJU0FCTEUpIHsKKyAgICB1bnNpZ25lZCBpbnQgaTsKKworICAgIGZvciAoaT0wOyBpPE5DQ1M7IGkrPTEpIHsKKyAgICAgIGlmIChpID09IFZUSU1FKSBjb250aW51ZTsKKyAgICAgIGlmIChpID09IFZNSU4pIGNvbnRpbnVlOworICAgICAgYXR0cmlidXRlcy0+Y19jY1tpXSA9IF9QT1NJWF9WRElTQUJMRTsKKyAgICB9CisgIH0KKyNlbmRpZiAvKiBfUE9TSVhfVkRJU0FCTEUgKi8KK30KKworaW50CitzZXJpYWxQdXRTcGVlZCAoU2VyaWFsQXR0cmlidXRlcyAqYXR0cmlidXRlcywgU2VyaWFsU3BlZWQgc3BlZWQpIHsKKyAgaWYgKGNmc2V0b3NwZWVkKGF0dHJpYnV0ZXMsIHNwZWVkKSAhPSAtMSkgeworICAgIGlmIChjZnNldGlzcGVlZChhdHRyaWJ1dGVzLCBzcGVlZCkgIT0gLTEpIHsKKyAgICAgIHJldHVybiAxOworICAgIH0gZWxzZSB7CisgICAgICBsb2dTeXN0ZW1FcnJvcigiY2ZzZXRpc3BlZWQiKTsKKyAgICB9CisgIH0gZWxzZSB7CisgICAgbG9nU3lzdGVtRXJyb3IoImNmc2V0b3NwZWVkIik7CisgIH0KKworICByZXR1cm4gMDsKK30KKworaW50CitzZXJpYWxQdXREYXRhQml0cyAoU2VyaWFsQXR0cmlidXRlcyAqYXR0cmlidXRlcywgdW5zaWduZWQgaW50IGJpdHMpIHsKKyAgdGNmbGFnX3Qgc2l6ZTsKKworICBzd2l0Y2ggKGJpdHMpIHsKKyNpZmRlZiBDUzUKKyNpZiAhZGVmaW5lZChDUzYpIHx8IChDUzUgIT0gQ1M2KQorICAgIGNhc2UgNTogc2l6ZSA9IENTNTsgYnJlYWs7CisjZW5kaWYKKyNlbmRpZiAvKiBDUzUgKi8KKworI2lmZGVmIENTNgorI2lmICFkZWZpbmVkKENTNykgfHwgKENTNiAhPSBDUzcpCisgICAgY2FzZSA2OiBzaXplID0gQ1M2OyBicmVhazsKKyNlbmRpZgorI2VuZGlmIC8qIENTNiAqLworCisjaWZkZWYgQ1M3CisgICAgY2FzZSA3OiBzaXplID0gQ1M3OyBicmVhazsKKyNlbmRpZiAvKiBDUzcgKi8KKworI2lmZGVmIENTOAorICAgIGNhc2UgODogc2l6ZSA9IENTODsgYnJlYWs7CisjZW5kaWYgLyogQ1M4ICovCisKKyAgICBkZWZhdWx0OgorICAgICAgcmV0dXJuIDA7CisgIH0KKworICBhdHRyaWJ1dGVzLT5jX2NmbGFnICY9IH5DU0laRTsKKyAgYXR0cmlidXRlcy0+Y19jZmxhZyB8PSBzaXplOworICByZXR1cm4gMTsKK30KKworaW50CitzZXJpYWxQdXRTdG9wQml0cyAoU2VyaWFsQXR0cmlidXRlcyAqYXR0cmlidXRlcywgU2VyaWFsU3RvcEJpdHMgYml0cykgeworICBpZiAoYml0cyA9PSBTRVJJQUxfU1RPUF8xKSB7CisgICAgYXR0cmlidXRlcy0+Y19jZmxhZyAmPSB+Q1NUT1BCOworICB9IGVsc2UgaWYgKGJpdHMgPT0gU0VSSUFMX1NUT1BfMikgeworICAgIGF0dHJpYnV0ZXMtPmNfY2ZsYWcgfD0gQ1NUT1BCOworICB9IGVsc2UgeworICAgIHJldHVybiAwOworICB9CisKKyAgcmV0dXJuIDE7Cit9CisKK2ludAorc2VyaWFsUHV0UGFyaXR5IChTZXJpYWxBdHRyaWJ1dGVzICphdHRyaWJ1dGVzLCBTZXJpYWxQYXJpdHkgcGFyaXR5KSB7CisgIGF0dHJpYnV0ZXMtPmNfY2ZsYWcgJj0gfihQQVJFTkIgfCBQQVJPREQpOworCisjaWZkZWYgUEFSU1RLCisgIGF0dHJpYnV0ZXMtPmNfY2ZsYWcgJj0gflBBUlNUSzsKKyNlbmRpZiAvKiBQQVJTVEsgKi8KKworICBpZiAocGFyaXR5ICE9IFNFUklBTF9QQVJJVFlfTk9ORSkgeworICAgIGlmIChwYXJpdHkgPT0gU0VSSUFMX1BBUklUWV9PREQpIHsKKyAgICAgIGF0dHJpYnV0ZXMtPmNfY2ZsYWcgfD0gUEFST0REOworICAgIH0gZWxzZQorCisjaWZuZGVmIFBBUlNUSworI2lmZGVmIENNU1BBUgorI2RlZmluZSBQQVJTVEsgQ01TUEFSCisjZW5kaWYgLyogQ01TUEFSICovCisjZW5kaWYgLyogUEFSU1RLICovCisKKyNpZmRlZiBQQVJTVEsKKyAgICBpZiAocGFyaXR5ID09IFNFUklBTF9QQVJJVFlfU1BBQ0UpIHsKKyAgICAgIGF0dHJpYnV0ZXMtPmNfY2ZsYWcgfD0gUEFSU1RLOworICAgIH0gZWxzZQorCisgICAgaWYgKHBhcml0eSA9PSBTRVJJQUxfUEFSSVRZX01BUkspIHsKKyAgICAgIGF0dHJpYnV0ZXMtPmNfY2ZsYWcgfD0gUEFSU1RLIHwgUEFST0REOworICAgIH0gZWxzZQorI2VuZGlmIC8qIFBBUlNUSyAqLworCisgICAgaWYgKHBhcml0eSAhPSBTRVJJQUxfUEFSSVRZX0VWRU4pIHsKKyAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIGF0dHJpYnV0ZXMtPmNfY2ZsYWcgfD0gUEFSRU5COworICB9CisKKyAgcmV0dXJuIDE7Cit9CisKK1NlcmlhbEZsb3dDb250cm9sCitzZXJpYWxQdXRGbG93Q29udHJvbCAoU2VyaWFsQXR0cmlidXRlcyAqYXR0cmlidXRlcywgU2VyaWFsRmxvd0NvbnRyb2wgZmxvdykgeworICB0eXBlZGVmIHN0cnVjdCB7CisgICAgdGNmbGFnX3QgKmZpZWxkOworICAgIHRjZmxhZ190IGZsYWc7CisgICAgU2VyaWFsRmxvd0NvbnRyb2wgZmxvdzsKKyAgfSBGbG93Q29udHJvbEVudHJ5OworCisgIGNvbnN0IEZsb3dDb250cm9sRW50cnkgZmxvd0NvbnRyb2xUYWJsZVtdID0geworI2lmZGVmIENSVFNDVFMKKyAgICB7JmF0dHJpYnV0ZXMtPmNfY2ZsYWcsIENSVFNDVFMsIFNFUklBTF9GTE9XX09VVFBVVF9SVFMgfCBTRVJJQUxfRkxPV19PVVRQVVRfQ1RTfSwKKyNlbmRpZiAvKiBDUlRTQ1RTICovCisKKyNpZmRlZiBJSEZMT1cKKyAgICB7JmF0dHJpYnV0ZXMtPmNfY2ZsYWcsIElIRkxPVywgU0VSSUFMX0ZMT1dfSU5QVVRfUlRTfSwKKyNlbmRpZiAvKiBJSEZMT1cgKi8KKworI2lmZGVmIE9IRkxPVworICAgIHsmYXR0cmlidXRlcy0+Y19jZmxhZywgT0hGTE9XLCBTRVJJQUxfRkxPV19PVVRQVVRfQ1RTfSwKKyNlbmRpZiAvKiBPSEZMT1cgKi8KKworI2lmZGVmIElYT0ZGCisgICAgeyZhdHRyaWJ1dGVzLT5jX2lmbGFnLCBJWE9GRiwgU0VSSUFMX0ZMT1dfSU5QVVRfWE9OfSwKKyNlbmRpZiAvKiBJWE9GRiAqLworCisjaWZkZWYgSVhPTgorICAgIHsmYXR0cmlidXRlcy0+Y19pZmxhZywgSVhPTiwgU0VSSUFMX0ZMT1dfT1VUUFVUX1hPTn0sCisjZW5kaWYgLyogSVhPTiAqLworCisgICAge05VTEwsIDAsIDB9CisgIH07CisgIGNvbnN0IEZsb3dDb250cm9sRW50cnkgKmVudHJ5ID0gZmxvd0NvbnRyb2xUYWJsZTsKKworICB3aGlsZSAoZW50cnktPmZpZWxkKSB7CisgICAgaWYgKChmbG93ICYgZW50cnktPmZsb3cpID09IGVudHJ5LT5mbG93KSB7CisgICAgICBmbG93ICY9IH5lbnRyeS0+ZmxvdzsKKyAgICAgICplbnRyeS0+ZmllbGQgfD0gZW50cnktPmZsYWc7CisgICAgfSBlbHNlIGlmICghKGZsb3cgJiBlbnRyeS0+ZmxvdykpIHsKKyAgICAgICplbnRyeS0+ZmllbGQgJj0gfmVudHJ5LT5mbGFnOworICAgIH0KKworICAgIGVudHJ5ICs9IDE7CisgIH0KKworICByZXR1cm4gZmxvdzsKK30KKworaW50CitzZXJpYWxQdXRNb2RlbVN0YXRlIChTZXJpYWxBdHRyaWJ1dGVzICphdHRyaWJ1dGVzLCBpbnQgZW5hYmxlZCkgeworICBpZiAoZW5hYmxlZCkgeworICAgIGF0dHJpYnV0ZXMtPmNfY2ZsYWcgJj0gfkNMT0NBTDsKKyAgfSBlbHNlIHsKKyAgICBhdHRyaWJ1dGVzLT5jX2NmbGFnIHw9IENMT0NBTDsKKyAgfQorCisgIHJldHVybiAxOworfQorCit1bnNpZ25lZCBpbnQKK3NlcmlhbEdldERhdGFCaXRzIChjb25zdCBTZXJpYWxBdHRyaWJ1dGVzICphdHRyaWJ1dGVzKSB7CisgIHRjZmxhZ190IHNpemUgPSBhdHRyaWJ1dGVzLT5jX2NmbGFnICYgQ1NJWkU7CisKKyAgc3dpdGNoIChzaXplKSB7CisjaWZkZWYgQ1M1CisjaWYgIWRlZmluZWQoQ1M2KSB8fCAoQ1M1ICE9IENTNikKKyAgICBjYXNlIENTNTogcmV0dXJuIDU7CisjZW5kaWYKKyNlbmRpZiAvKiBDUzUgKi8KKworI2lmZGVmIENTNgorI2lmICFkZWZpbmVkKENTNykgfHwgKENTNiAhPSBDUzcpCisgICAgY2FzZSBDUzY6IHJldHVybiA2OworI2VuZGlmCisjZW5kaWYgLyogQ1M2ICovCisKKyNpZmRlZiBDUzcKKyAgICBjYXNlIENTNzogcmV0dXJuIDc7CisjZW5kaWYgLyogQ1M3ICovCisKKyNpZmRlZiBDUzgKKyAgICBjYXNlIENTODogcmV0dXJuIDg7CisjZW5kaWYgLyogQ1M4ICovCisKKyAgICBkZWZhdWx0OgorICAgICAgbG9nTWVzc2FnZShMT0dfV0FSTklORywgInVuc3VwcG9ydGVkIHRlcm1pb3MgZGF0YSBiaXRzOiAlbFgiLCAodW5zaWduZWQgbG9uZylzaXplKTsKKyAgICAgIHJldHVybiAwOworICB9Cit9CisKK3Vuc2lnbmVkIGludAorc2VyaWFsR2V0U3RvcEJpdHMgKGNvbnN0IFNlcmlhbEF0dHJpYnV0ZXMgKmF0dHJpYnV0ZXMpIHsKKyAgcmV0dXJuIChhdHRyaWJ1dGVzLT5jX2NmbGFnICYgQ1NUT1BCKT8gMjogMTsKK30KKwordW5zaWduZWQgaW50CitzZXJpYWxHZXRQYXJpdHlCaXRzIChjb25zdCBTZXJpYWxBdHRyaWJ1dGVzICphdHRyaWJ1dGVzKSB7CisgIHJldHVybiAoYXR0cmlidXRlcy0+Y19jZmxhZyAmIFBBUkVOQik/IDE6IDA7Cit9CisKK2ludAorc2VyaWFsR2V0QXR0cmlidXRlcyAoU2VyaWFsRGV2aWNlICpzZXJpYWwsIFNlcmlhbEF0dHJpYnV0ZXMgKmF0dHJpYnV0ZXMpIHsKKyAgaWYgKHRjZ2V0YXR0cihzZXJpYWwtPmZpbGVEZXNjcmlwdG9yLCBhdHRyaWJ1dGVzKSAhPSAtMSkgcmV0dXJuIDE7CisgIGxvZ1N5c3RlbUVycm9yKCJ0Y2dldGF0dHIiKTsKKyAgcmV0dXJuIDA7Cit9CisKK2ludAorc2VyaWFsUHV0QXR0cmlidXRlcyAoU2VyaWFsRGV2aWNlICpzZXJpYWwsIGNvbnN0IFNlcmlhbEF0dHJpYnV0ZXMgKmF0dHJpYnV0ZXMpIHsKKyAgaWYgKHRjc2V0YXR0cihzZXJpYWwtPmZpbGVEZXNjcmlwdG9yLCBUQ1NBTk9XLCBhdHRyaWJ1dGVzKSAhPSAtMSkgcmV0dXJuIDE7CisgIGxvZ1N5c3RlbUVycm9yKCJ0Y3NldGF0dHIiKTsKKyAgcmV0dXJuIDA7Cit9CisKK2ludAorc2VyaWFsQ2FuY2VsSW5wdXQgKFNlcmlhbERldmljZSAqc2VyaWFsKSB7CisgIGlmICh0Y2ZsdXNoKHNlcmlhbC0+ZmlsZURlc2NyaXB0b3IsIFRDSUZMVVNIKSAhPSAtMSkgcmV0dXJuIDE7CisgIGlmIChlcnJubyA9PSBFSU5WQUwpIHJldHVybiAxOworICBsb2dTeXN0ZW1FcnJvcigiVENJRkxVU0giKTsKKyAgcmV0dXJuIDA7Cit9CisKK2ludAorc2VyaWFsQ2FuY2VsT3V0cHV0IChTZXJpYWxEZXZpY2UgKnNlcmlhbCkgeworICBpZiAodGNmbHVzaChzZXJpYWwtPmZpbGVEZXNjcmlwdG9yLCBUQ09GTFVTSCkgIT0gLTEpIHJldHVybiAxOworICBpZiAoZXJybm8gPT0gRUlOVkFMKSByZXR1cm4gMTsKKyAgbG9nU3lzdGVtRXJyb3IoIlRDT0ZMVVNIIik7CisgIHJldHVybiAwOworfQorCitzdGF0aWMgdm9pZAorc2VyaWFsQ2FuY2VsSW5wdXRNb25pdG9yIChTZXJpYWxEZXZpY2UgKnNlcmlhbCkgeworICBpZiAoc2VyaWFsLT5wYWNrYWdlLmlucHV0TW9uaXRvcikgeworICAgIGFzeW5jQ2FuY2VsUmVxdWVzdChzZXJpYWwtPnBhY2thZ2UuaW5wdXRNb25pdG9yKTsKKyAgICBzZXJpYWwtPnBhY2thZ2UuaW5wdXRNb25pdG9yID0gTlVMTDsKKyAgfQorfQorCitpbnQKK3NlcmlhbE1vbml0b3JJbnB1dCAoU2VyaWFsRGV2aWNlICpzZXJpYWwsIEFzeW5jTW9uaXRvckNhbGxiYWNrICpjYWxsYmFjaywgdm9pZCAqZGF0YSkgeworICBzZXJpYWxDYW5jZWxJbnB1dE1vbml0b3Ioc2VyaWFsKTsKKyAgaWYgKCFjYWxsYmFjaykgcmV0dXJuIDE7CisgIHJldHVybiBhc3luY01vbml0b3JGaWxlSW5wdXQoJnNlcmlhbC0+cGFja2FnZS5pbnB1dE1vbml0b3IsIHNlcmlhbC0+ZmlsZURlc2NyaXB0b3IsIGNhbGxiYWNrLCBkYXRhKTsKK30KKworaW50CitzZXJpYWxQb2xsSW5wdXQgKFNlcmlhbERldmljZSAqc2VyaWFsLCBpbnQgdGltZW91dCkgeworICByZXR1cm4gYXdhaXRGaWxlSW5wdXQoc2VyaWFsLT5maWxlRGVzY3JpcHRvciwgdGltZW91dCk7Cit9CisKK2ludAorc2VyaWFsRHJhaW5PdXRwdXQgKFNlcmlhbERldmljZSAqc2VyaWFsKSB7CisjaWZkZWYgSEFWRV9UQ0RSQUlOCisgIGRvIHsKKyAgICBpZiAodGNkcmFpbihzZXJpYWwtPmZpbGVEZXNjcmlwdG9yKSAhPSAtMSkgcmV0dXJuIDE7CisgIH0gd2hpbGUgKGVycm5vID09IEVJTlRSKTsKKyNlbHNlIC8qIEhBVkVfVENEUkFJTiAqLworICBlcnJubyA9IEVOT1NZUzsKKyNlbmRpZiAvKiBIQVZFX1RDRFJBSU4gKi8KKworICBsb2dTeXN0ZW1FcnJvcigidGNkcmFpbiIpOworICByZXR1cm4gMDsKK30KKworc3NpemVfdAorc2VyaWFsR2V0RGF0YSAoCisgIFNlcmlhbERldmljZSAqc2VyaWFsLAorICB2b2lkICpidWZmZXIsIHNpemVfdCBzaXplLAorICBpbnQgaW5pdGlhbFRpbWVvdXQsIGludCBzdWJzZXF1ZW50VGltZW91dAorKSB7CisgIHJldHVybiByZWFkRmlsZShzZXJpYWwtPmZpbGVEZXNjcmlwdG9yLCBidWZmZXIsIHNpemUsIGluaXRpYWxUaW1lb3V0LCBzdWJzZXF1ZW50VGltZW91dCk7Cit9CisKK3NzaXplX3QKK3NlcmlhbFB1dERhdGEgKAorICBTZXJpYWxEZXZpY2UgKnNlcmlhbCwKKyAgY29uc3Qgdm9pZCAqZGF0YSwgc2l6ZV90IHNpemUKKykgeworICByZXR1cm4gd3JpdGVGaWxlKHNlcmlhbC0+ZmlsZURlc2NyaXB0b3IsIGRhdGEsIHNpemUpOworfQorCitpbnQKK3NlcmlhbEdldExpbmVzIChTZXJpYWxEZXZpY2UgKnNlcmlhbCkgeworI2lmZGVmIFRJT0NNR0VUCisgIGlmIChpb2N0bChzZXJpYWwtPmZpbGVEZXNjcmlwdG9yLCBUSU9DTUdFVCwgJnNlcmlhbC0+bGluZXNTdGF0ZSkgPT0gLTEpIHsKKyAgICBsb2dTeXN0ZW1FcnJvcigiVElPQ01HRVQiKTsKKyAgICByZXR1cm4gMDsKKyAgfQorI2Vsc2UgLyogVElPQ01HRVQgKi8KKyN3YXJuaW5nIGdldHRpbmcgbW9kZW0gbGluZXMgbm90IHN1cHBvcnRlZCBvbiB0aGlzIHBsYXRmb3JtCisgIHNlcmlhbC0+bGluZXNTdGF0ZSA9IFNFUklBTF9MSU5FX1JUUyB8IFNFUklBTF9MSU5FX0NUUyB8IFNFUklBTF9MSU5FX0RUUiB8IFNFUklBTF9MSU5FX0RTUiB8IFNFUklBTF9MSU5FX0NBUjsKKyNlbmRpZiAvKiBUSU9DTUdFVCAqLworCisgIHJldHVybiAxOworfQorCitpbnQKK3NlcmlhbFB1dExpbmVzIChTZXJpYWxEZXZpY2UgKnNlcmlhbCwgU2VyaWFsTGluZXMgaGlnaCwgU2VyaWFsTGluZXMgbG93KSB7CisjaWZkZWYgVElPQ01TRVQKKyAgaWYgKHNlcmlhbEdldExpbmVzKHNlcmlhbCkpIHsKKyAgICBTZXJpYWxMaW5lcyBsaW5lcyA9IHNlcmlhbC0+bGluZXNTdGF0ZTsKKyAgICBsaW5lcyB8PSBoaWdoOworICAgIGxpbmVzICY9IH5sb3c7CisKKyAgICBpZiAoaW9jdGwoc2VyaWFsLT5maWxlRGVzY3JpcHRvciwgVElPQ01TRVQsICZsaW5lcykgIT0gLTEpIHJldHVybiAxOworICAgIGxvZ1N5c3RlbUVycm9yKCJUSU9DTVNFVCIpOworICB9CisjZWxzZSAvKiBUSU9DTVNFVCAqLworI3dhcm5pbmcgc2V0dGluZyBtb2RlbSBsaW5lcyBub3Qgc3VwcG9ydGVkIG9uIHRoaXMgcGxhdGZvcm0KKyNlbmRpZiAvKiBUSU9DTVNFVCAqLworCisgIHJldHVybiAwOworfQorCitpbnQKK3NlcmlhbFJlZ2lzdGVyV2FpdExpbmVzIChTZXJpYWxEZXZpY2UgKnNlcmlhbCwgU2VyaWFsTGluZXMgbGluZXMpIHsKKyAgcmV0dXJuIDE7Cit9CisKK2ludAorc2VyaWFsTW9uaXRvcldhaXRMaW5lcyAoU2VyaWFsRGV2aWNlICpzZXJpYWwpIHsKKyNpZmRlZiBUSU9DTUlXQUlUCisgIGlmIChpb2N0bChzZXJpYWwtPmZpbGVEZXNjcmlwdG9yLCBUSU9DTUlXQUlULCBzZXJpYWwtPndhaXRMaW5lcykgIT0gLTEpIHJldHVybiAxOworICBsb2dTeXN0ZW1FcnJvcigiVElPQ01JV0FJVCIpOworI2Vsc2UgLyogVElPQ01JV0FJVCAqLworICBTZXJpYWxMaW5lcyBvbGQgPSBzZXJpYWwtPmxpbmVzU3RhdGUgJiBzZXJpYWwtPndhaXRMaW5lczsKKworICB3aGlsZSAoc2VyaWFsR2V0TGluZXMoc2VyaWFsKSkgeworICAgIGlmICgoc2VyaWFsLT5saW5lc1N0YXRlICYgc2VyaWFsLT53YWl0TGluZXMpICE9IG9sZCkgcmV0dXJuIDE7CisgIH0KKyNlbmRpZiAvKiBUSU9DTUlXQUlUICovCisKKyAgcmV0dXJuIDA7Cit9CisKK2ludAorc2VyaWFsQ29ubmVjdERldmljZSAoU2VyaWFsRGV2aWNlICpzZXJpYWwsIGNvbnN0IGNoYXIgKmRldmljZSkgeworICBzZXJpYWwtPnBhY2thZ2UuaW5wdXRNb25pdG9yID0gTlVMTDsKKworICBpZiAoKHNlcmlhbC0+ZmlsZURlc2NyaXB0b3IgPSBvcGVuKGRldmljZSwgT19SRFdSfE9fTk9DVFRZfE9fTk9OQkxPQ0spKSAhPSAtMSkgeworICAgIHNldENsb3NlT25FeGVjKHNlcmlhbC0+ZmlsZURlc2NyaXB0b3IsIDEpOworCisgICAgaWYgKGlzYXR0eShzZXJpYWwtPmZpbGVEZXNjcmlwdG9yKSkgeworICAgICAgaWYgKHNlcmlhbFByZXBhcmVEZXZpY2Uoc2VyaWFsKSkgeworICAgICAgICBsb2dNZXNzYWdlKExPR19DQVRFR09SWShTRVJJQUxfSU8pLCAiZGV2aWNlIG9wZW5lZDogJXM6IGZkPSVkIiwKKyAgICAgICAgICAgICAgICAgICBkZXZpY2UsIHNlcmlhbC0+ZmlsZURlc2NyaXB0b3IpOworICAgICAgICByZXR1cm4gMTsKKyAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgbG9nTWVzc2FnZShMT0dfRVJSLCAibm90IGEgc2VyaWFsIGRldmljZTogJXMiLCBkZXZpY2UpOworICAgIH0KKworICAgIGNsb3NlKHNlcmlhbC0+ZmlsZURlc2NyaXB0b3IpOworICB9IGVsc2UgeworICAgIGxvZ01lc3NhZ2UoKChlcnJubyA9PSBFTk9FTlQpPyBMT0dfREVCVUc6IExPR19FUlIpLAorICAgICAgICAgICAgICAgImNhbm5vdCBvcGVuIHNlcmlhbCBkZXZpY2U6ICVzOiAlcyIsCisgICAgICAgICAgICAgICBkZXZpY2UsIHN0cmVycm9yKGVycm5vKSk7CisgIH0KKworICByZXR1cm4gMDsKK30KKwordm9pZAorc2VyaWFsRGlzY29ubmVjdERldmljZSAoU2VyaWFsRGV2aWNlICpzZXJpYWwpIHsKKyAgc2VyaWFsQ2FuY2VsSW5wdXRNb25pdG9yKHNlcmlhbCk7Cit9CisKK2ludAorc2VyaWFsRW5zdXJlRmlsZURlc2NyaXB0b3IgKFNlcmlhbERldmljZSAqc2VyaWFsKSB7CisgIHJldHVybiAxOworfQorCit2b2lkCitzZXJpYWxDbGVhckVycm9yIChTZXJpYWxEZXZpY2UgKnNlcmlhbCkgeworfQpkaWZmIC0tZ2l0IGEvUHJvZ3JhbXMvc2VyaWFsX3Rlcm1pb3MuaCBiL1Byb2dyYW1zL3NlcmlhbF90ZXJtaW9zLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOThlZDdmOQotLS0gL2Rldi9udWxsCisrKyBiL1Byb2dyYW1zL3NlcmlhbF90ZXJtaW9zLmgKQEAgLTAsMCArMSw1NCBAQAorLyoKKyAqIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisgKiAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisgKgorICogQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKKyNpZm5kZWYgQlJMVFRZX0lOQ0xVREVEX1NFUklBTF9URVJNSU9TCisjZGVmaW5lIEJSTFRUWV9JTkNMVURFRF9TRVJJQUxfVEVSTUlPUworCisjaW5jbHVkZSA8dGVybWlvcy5oPgorI2luY2x1ZGUgPHN5cy9pb2N0bC5oPgorCisjaWZkZWYgSEFWRV9TWVNfTU9ERU1fSAorI2luY2x1ZGUgPHN5cy9tb2RlbS5oPgorI2VuZGlmIC8qIEhBVkVfU1lTX01PREVNX0ggKi8KKworI2luY2x1ZGUgImFzeW5jX2hhbmRsZS5oIgorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmIC8qIF9fY3BsdXNwbHVzICovCisKK3R5cGVkZWYgc3BlZWRfdCBTZXJpYWxTcGVlZDsKK3R5cGVkZWYgc3RydWN0IHRlcm1pb3MgU2VyaWFsQXR0cmlidXRlczsKKwordHlwZWRlZiBpbnQgU2VyaWFsTGluZXM7CisjZGVmaW5lIFNFUklBTF9MSU5FX1JUUyBUSU9DTV9SVFMKKyNkZWZpbmUgU0VSSUFMX0xJTkVfRFRSIFRJT0NNX0RUUgorI2RlZmluZSBTRVJJQUxfTElORV9DVFMgVElPQ01fQ1RTCisjZGVmaW5lIFNFUklBTF9MSU5FX0RTUiBUSU9DTV9EU1IKKyNkZWZpbmUgU0VSSUFMX0xJTkVfUk5HIFRJT0NNX1JORworI2RlZmluZSBTRVJJQUxfTElORV9DQVIgVElPQ01fQ0FSCisKK3R5cGVkZWYgc3RydWN0IHsKKyAgQXN5bmNIYW5kbGUgaW5wdXRNb25pdG9yOworfSBTZXJpYWxQYWNrYWdlRmllbGRzOworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZiAvKiBfX2NwbHVzcGx1cyAqLworCisjZW5kaWYgLyogQlJMVFRZX0lOQ0xVREVEX1NFUklBTF9URVJNSU9TICovCmRpZmYgLS1naXQgYS9Qcm9ncmFtcy9zZXJpYWxfdWFydC5oIGIvUHJvZ3JhbXMvc2VyaWFsX3VhcnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NDFkODRlCi0tLSAvZGV2L251bGwKKysrIGIvUHJvZ3JhbXMvc2VyaWFsX3VhcnQuaApAQCAtMCwwICsxLDUwIEBACisvKgorICogQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyAqICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyAqCisgKiBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorICoKKyAqIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyAqCisgKiBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisgKi8KKworI2lmbmRlZiBCUkxUVFlfSU5DTFVERURfU0VSSUFMX1VBUlQKKyNkZWZpbmUgQlJMVFRZX0lOQ0xVREVEX1NFUklBTF9VQVJUCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYgLyogX19jcGx1c3BsdXMgKi8KKworI2RlZmluZSBVQVJUX1BPUlRfUkJSIDAgLyogcmVjZWl2ZSBidWZmZXJlZCByZWdpc3RlciAqLworI2RlZmluZSBVQVJUX1BPUlRfVEhSIDAgLyogdHJhbnNtaXQgaG9sZGluZyByZWdpc3RlciAqLworI2RlZmluZSBVQVJUX1BPUlRfRExMIDAgLyogZGl2aXNvciBsYXRjaCBsb3cgKi8KKyNkZWZpbmUgVUFSVF9QT1JUX0lFUiAxIC8qIGludGVycnVwdCBlbmFibGUgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgVUFSVF9QT1JUX0RMSCAxIC8qIGRpdmlzb3IgbGF0Y2ggaGlnaCAqLworI2RlZmluZSBVQVJUX1BPUlRfSUlSIDIgLyogaW50ZXJydXB0IGlkIHJlZ2lzdGVyICovCisjZGVmaW5lIFVBUlRfUE9SVF9MQ1IgMyAvKiBsaW5lIGNvbnRyb2wgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgVUFSVF9QT1JUX01DUiA0IC8qIG1vZGVtIGNvbnRyb2wgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgVUFSVF9QT1JUX01TUiA2IC8qIG1vZGVtIHN0YXR1cyByZWdpc3RlciAqLworCisjZGVmaW5lIFVBUlRfRkxBR19MQ1JfRExBQiAwWDgwIC8qIGRpdmlzb3IgbGF0Y2ggYWNjZXNzIGJpdCAqLworCisjZGVmaW5lIFVBUlRfRkxBR19NQ1JfRFRSIDBYMDEgLyogZGF0YSB0ZXJtaW5hbCByZWFkeSAqLworI2RlZmluZSBVQVJUX0ZMQUdfTUNSX1JUUyAwWDAyIC8qIHJlYWR5IHRvIHNlbmQgKi8KKworI2RlZmluZSBVQVJUX0ZMQUdfTVNSX0NUUyAwWDEwIC8qIGNsZWFyIHRvIHNlbmQgKi8KKyNkZWZpbmUgVUFSVF9GTEFHX01TUl9EU1IgMFgyMCAvKiBkYXRhIHNldCByZWFkeSAqLworI2RlZmluZSBVQVJUX0ZMQUdfTVNSX1JORyAwWDQwIC8qIHJpbmcgaW5kaWNhdG9yICovCisjZGVmaW5lIFVBUlRfRkxBR19NU1JfQ0FSIDBYODAgLyogY2FycmllciBkZXRlY3QgKi8KKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYgLyogX19jcGx1c3BsdXMgKi8KKworI2VuZGlmIC8qIEJSTFRUWV9JTkNMVURFRF9TRVJJQUxfVUFSVCAqLwpkaWZmIC0tZ2l0IGEvUHJvZ3JhbXMvc2VyaWFsX3dpbmRvd3MuYyBiL1Byb2dyYW1zL3NlcmlhbF93aW5kb3dzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWQxZjU3MAotLS0gL2Rldi9udWxsCisrKyBiL1Byb2dyYW1zL3NlcmlhbF93aW5kb3dzLmMKQEAgLTAsMCArMSw1MDMgQEAKKy8qCisgKiBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorICogICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorICoKKyAqIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorICoKKyAqIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyAqLworCisjaW5jbHVkZSAicHJvbG9ndWUuaCIKKworI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8aW8uaD4KKyNpbmNsdWRlIDxmY250bC5oPgorCisjaW5jbHVkZSAibG9nLmgiCisjaW5jbHVkZSAiYXNjaWkuaCIKKworI2luY2x1ZGUgInNlcmlhbF93aW5kb3dzLmgiCisjaW5jbHVkZSAic2VyaWFsX2ludGVybmFsLmgiCisKK0JFR0lOX1NFUklBTF9CQVVEX1RBQkxFCisjaWZkZWYgQ0JSXzExMAorICB7MTEwLCBDQlJfMTEwfSwKKyNlbmRpZiAvKiBDQlJfMTEwICovCisKKyNpZmRlZiBDQlJfMzAwCisgIHszMDAsIENCUl8zMDB9LAorI2VuZGlmIC8qIENCUl8zMDAgKi8KKworI2lmZGVmIENCUl82MDAKKyAgezYwMCwgQ0JSXzYwMH0sCisjZW5kaWYgLyogQ0JSXzYwMCAqLworCisjaWZkZWYgQ0JSXzEyMDAKKyAgezEyMDAsIENCUl8xMjAwfSwKKyNlbmRpZiAvKiBDQlJfMTIwMCAqLworCisjaWZkZWYgQ0JSXzI0MDAKKyAgezI0MDAsIENCUl8yNDAwfSwKKyNlbmRpZiAvKiBDQlJfMjQwMCAqLworCisjaWZkZWYgQ0JSXzQ4MDAKKyAgezQ4MDAsIENCUl80ODAwfSwKKyNlbmRpZiAvKiBDQlJfNDgwMCAqLworCisjaWZkZWYgQ0JSXzk2MDAKKyAgezk2MDAsIENCUl85NjAwfSwKKyNlbmRpZiAvKiBDQlJfOTYwMCAqLworCisjaWZkZWYgQ0JSXzE0NDAwCisgIHsxNDQwMCwgQ0JSXzE0NDAwfSwKKyNlbmRpZiAvKiBDQlJfMTQ0MDAgKi8KKworI2lmZGVmIENCUl8xOTIwMAorICB7MTkyMDAsIENCUl8xOTIwMH0sCisjZW5kaWYgLyogQ0JSXzE5MjAwICovCisKKyNpZmRlZiBDQlJfMzg0MDAKKyAgezM4NDAwLCBDQlJfMzg0MDB9LAorI2VuZGlmIC8qIENCUl8zODQwMCAqLworCisjaWZkZWYgQ0JSXzU2MDAwCisgIHs1NjAwMCwgQ0JSXzU2MDAwfSwKKyNlbmRpZiAvKiBDQlJfNTYwMDAgKi8KKworI2lmZGVmIENCUl81NzYwMAorICB7NTc2MDAsIENCUl81NzYwMH0sCisjZW5kaWYgLyogQ0JSXzU3NjAwICovCisKKyNpZmRlZiBDQlJfMTE1MjAwCisgIHsxMTUyMDAsIENCUl8xMTUyMDB9LAorI2VuZGlmIC8qIENCUl8xMTUyMDAgKi8KKworI2lmZGVmIENCUl8xMjgwMDAKKyAgezEyODAwMCwgQ0JSXzEyODAwMH0sCisjZW5kaWYgLyogQ0JSXzEyODAwMCAqLworCisjaWZkZWYgQ0JSXzI1NjAwMAorICB7MjU2MDAwLCBDQlJfMjU2MDAwfSwKKyNlbmRpZiAvKiBDQlJfMjU2MDAwICovCitFTkRfU0VSSUFMX0JBVURfVEFCTEUKKwordm9pZAorc2VyaWFsUHV0SW5pdGlhbEF0dHJpYnV0ZXMgKFNlcmlhbEF0dHJpYnV0ZXMgKmF0dHJpYnV0ZXMpIHsKKyAgYXR0cmlidXRlcy0+RENCbGVuZ3RoID0gc2l6ZW9mKCphdHRyaWJ1dGVzKTsKKyAgYXR0cmlidXRlcy0+ZkJpbmFyeSA9IFRSVUU7CisgIGF0dHJpYnV0ZXMtPmZUWENvbnRpbnVlT25Yb2ZmID0gVFJVRTsKKyAgYXR0cmlidXRlcy0+WG9uQ2hhciA9IEFTQ0lJX0RDMTsKKyAgYXR0cmlidXRlcy0+WG9mZkNoYXIgPSBBU0NJSV9EQzM7Cit9CisKK2ludAorc2VyaWFsUHV0U3BlZWQgKFNlcmlhbEF0dHJpYnV0ZXMgKmF0dHJpYnV0ZXMsIFNlcmlhbFNwZWVkIHNwZWVkKSB7CisgIGF0dHJpYnV0ZXMtPkJhdWRSYXRlID0gc3BlZWQ7CisgIHJldHVybiAxOworfQorCitpbnQKK3NlcmlhbFB1dERhdGFCaXRzIChTZXJpYWxBdHRyaWJ1dGVzICphdHRyaWJ1dGVzLCB1bnNpZ25lZCBpbnQgYml0cykgeworICBpZiAoKGJpdHMgPCA1KSB8fCAoYml0cyA+IDgpKSByZXR1cm4gMDsKKyAgYXR0cmlidXRlcy0+Qnl0ZVNpemUgPSBiaXRzOworICByZXR1cm4gMTsKK30KKworaW50CitzZXJpYWxQdXRTdG9wQml0cyAoU2VyaWFsQXR0cmlidXRlcyAqYXR0cmlidXRlcywgU2VyaWFsU3RvcEJpdHMgYml0cykgeworICBpZiAoYml0cyA9PSBTRVJJQUxfU1RPUF8xKSB7CisgICAgYXR0cmlidXRlcy0+U3RvcEJpdHMgPSBPTkVTVE9QQklUOworICB9IGVsc2UgaWYgKGJpdHMgPT0gU0VSSUFMX1NUT1BfMV81KSB7CisgICAgYXR0cmlidXRlcy0+U3RvcEJpdHMgPSBPTkU1U1RPUEJJVFM7CisgIH0gZWxzZSBpZiAoYml0cyA9PSBTRVJJQUxfU1RPUF8yKSB7CisgICAgYXR0cmlidXRlcy0+U3RvcEJpdHMgPSBUV09TVE9QQklUUzsKKyAgfSBlbHNlIHsKKyAgICByZXR1cm4gMDsKKyAgfQorCisgIHJldHVybiAxOworfQorCitpbnQKK3NlcmlhbFB1dFBhcml0eSAoU2VyaWFsQXR0cmlidXRlcyAqYXR0cmlidXRlcywgU2VyaWFsUGFyaXR5IHBhcml0eSkgeworICBhdHRyaWJ1dGVzLT5mUGFyaXR5ID0gRkFMU0U7CisgIGF0dHJpYnV0ZXMtPlBhcml0eSA9IE5PUEFSSVRZOworCisgIGlmIChwYXJpdHkgIT0gU0VSSUFMX1BBUklUWV9OT05FKSB7CisgICAgc3dpdGNoIChwYXJpdHkpIHsKKyAgICAgIGNhc2UgU0VSSUFMX1BBUklUWV9PREQ6CisgICAgICAgIGF0dHJpYnV0ZXMtPlBhcml0eSA9IE9ERFBBUklUWTsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGNhc2UgU0VSSUFMX1BBUklUWV9FVkVOOgorICAgICAgICBhdHRyaWJ1dGVzLT5QYXJpdHkgPSBFVkVOUEFSSVRZOworICAgICAgICBicmVhazsKKworICAgICAgY2FzZSBTRVJJQUxfUEFSSVRZX01BUks6CisgICAgICAgIGF0dHJpYnV0ZXMtPlBhcml0eSA9IE1BUktQQVJJVFk7CisgICAgICAgIGJyZWFrOworCisgICAgICBjYXNlIFNFUklBTF9QQVJJVFlfU1BBQ0U6CisgICAgICAgIGF0dHJpYnV0ZXMtPlBhcml0eSA9IFNQQUNFUEFSSVRZOworICAgICAgICBicmVhazsKKworICAgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgYXR0cmlidXRlcy0+ZlBhcml0eSA9IFRSVUU7CisgIH0KKworICByZXR1cm4gMTsKK30KKworU2VyaWFsRmxvd0NvbnRyb2wKK3NlcmlhbFB1dEZsb3dDb250cm9sIChTZXJpYWxBdHRyaWJ1dGVzICphdHRyaWJ1dGVzLCBTZXJpYWxGbG93Q29udHJvbCBmbG93KSB7CisgIGlmIChmbG93ICYgU0VSSUFMX0ZMT1dfT1VUUFVUX1JUUykgeworICAgIGZsb3cgJj0gflNFUklBTF9GTE9XX09VVFBVVF9SVFM7CisgICAgYXR0cmlidXRlcy0+ZlJ0c0NvbnRyb2wgPSBSVFNfQ09OVFJPTF9UT0dHTEU7CisgIH0gZWxzZSBpZiAoZmxvdyAmIFNFUklBTF9GTE9XX0lOUFVUX1JUUykgeworICAgIGZsb3cgJj0gflNFUklBTF9GTE9XX0lOUFVUX1JUUzsKKyAgICBhdHRyaWJ1dGVzLT5mUnRzQ29udHJvbCA9IFJUU19DT05UUk9MX0hBTkRTSEFLRTsKKyAgfSBlbHNlIHsKKyAgICBhdHRyaWJ1dGVzLT5mUnRzQ29udHJvbCA9IFJUU19DT05UUk9MX0VOQUJMRTsKKyAgfQorCisgIGlmIChmbG93ICYgU0VSSUFMX0ZMT1dfSU5QVVRfWE9OKSB7CisgICAgZmxvdyAmPSB+U0VSSUFMX0ZMT1dfSU5QVVRfWE9OOworICAgIGF0dHJpYnV0ZXMtPmZJblggPSBUUlVFOworICB9IGVsc2UgeworICAgIGF0dHJpYnV0ZXMtPmZJblggPSBGQUxTRTsKKyAgfQorCisgIGlmIChmbG93ICYgU0VSSUFMX0ZMT1dfT1VUUFVUX0NUUykgeworICAgIGZsb3cgJj0gflNFUklBTF9GTE9XX09VVFBVVF9DVFM7CisgICAgYXR0cmlidXRlcy0+Zk91dHhDdHNGbG93ID0gVFJVRTsKKyAgfSBlbHNlIHsKKyAgICBhdHRyaWJ1dGVzLT5mT3V0eEN0c0Zsb3cgPSBGQUxTRTsKKyAgfQorCisgIGlmIChmbG93ICYgU0VSSUFMX0ZMT1dfT1VUUFVUX0RTUikgeworICAgIGZsb3cgJj0gflNFUklBTF9GTE9XX09VVFBVVF9EU1I7CisgICAgYXR0cmlidXRlcy0+Zk91dHhEc3JGbG93ID0gVFJVRTsKKyAgfSBlbHNlIHsKKyAgICBhdHRyaWJ1dGVzLT5mT3V0eERzckZsb3cgPSBGQUxTRTsKKyAgfQorCisgIGlmIChmbG93ICYgU0VSSUFMX0ZMT1dfT1VUUFVUX1hPTikgeworICAgIGZsb3cgJj0gflNFUklBTF9GTE9XX09VVFBVVF9YT047CisgICAgYXR0cmlidXRlcy0+Zk91dFggPSBUUlVFOworICB9IGVsc2UgeworICAgIGF0dHJpYnV0ZXMtPmZPdXRYID0gRkFMU0U7CisgIH0KKworICByZXR1cm4gZmxvdzsKK30KKworaW50CitzZXJpYWxQdXRNb2RlbVN0YXRlIChTZXJpYWxBdHRyaWJ1dGVzICphdHRyaWJ1dGVzLCBpbnQgZW5hYmxlZCkgeworICBpZiAoZW5hYmxlZCkgeworICAgIGF0dHJpYnV0ZXMtPmZEdHJDb250cm9sID0gRFRSX0NPTlRST0xfSEFORFNIQUtFOworICAgIGF0dHJpYnV0ZXMtPmZEc3JTZW5zaXRpdml0eSA9IFRSVUU7CisgIH0gZWxzZSB7CisgICAgYXR0cmlidXRlcy0+ZkR0ckNvbnRyb2wgPSBEVFJfQ09OVFJPTF9FTkFCTEU7CisgICAgYXR0cmlidXRlcy0+ZkRzclNlbnNpdGl2aXR5ID0gRkFMU0U7CisgIH0KKworICByZXR1cm4gMTsKK30KKwordW5zaWduZWQgaW50CitzZXJpYWxHZXREYXRhQml0cyAoY29uc3QgU2VyaWFsQXR0cmlidXRlcyAqYXR0cmlidXRlcykgeworICByZXR1cm4gYXR0cmlidXRlcy0+Qnl0ZVNpemU7Cit9CisKK3Vuc2lnbmVkIGludAorc2VyaWFsR2V0U3RvcEJpdHMgKGNvbnN0IFNlcmlhbEF0dHJpYnV0ZXMgKmF0dHJpYnV0ZXMpIHsKKyAgaWYgKGF0dHJpYnV0ZXMtPlN0b3BCaXRzID09IE9ORVNUT1BCSVQpIHJldHVybiAxOworICBpZiAoYXR0cmlidXRlcy0+U3RvcEJpdHMgPT0gVFdPU1RPUEJJVFMpIHJldHVybiAyOworCisgIGxvZ01lc3NhZ2UoTE9HX1dBUk5JTkcsICJ1bnN1cHBvcnRlZCBXaW5kb3dzIHNlcmlhbCBzdG9wIGJpdHMgdmFsdWU6ICVYIiwgYXR0cmlidXRlcy0+U3RvcEJpdHMpOworICByZXR1cm4gMDsKK30KKwordW5zaWduZWQgaW50CitzZXJpYWxHZXRQYXJpdHlCaXRzIChjb25zdCBTZXJpYWxBdHRyaWJ1dGVzICphdHRyaWJ1dGVzKSB7CisgIHJldHVybiAoYXR0cmlidXRlcy0+ZlBhcml0eSAmJiAoYXR0cmlidXRlcy0+UGFyaXR5ICE9IE5PUEFSSVRZKSk/IDE6IDA7Cit9CisKK2ludAorc2VyaWFsR2V0QXR0cmlidXRlcyAoU2VyaWFsRGV2aWNlICpzZXJpYWwsIFNlcmlhbEF0dHJpYnV0ZXMgKmF0dHJpYnV0ZXMpIHsKKyAgYXR0cmlidXRlcy0+RENCbGVuZ3RoID0gc2l6ZW9mKHNlcmlhbC0+Y3VycmVudEF0dHJpYnV0ZXMpOworICBpZiAoR2V0Q29tbVN0YXRlKHNlcmlhbC0+cGFja2FnZS5maWxlSGFuZGxlLCBhdHRyaWJ1dGVzKSkgcmV0dXJuIDE7CisgIGxvZ1dpbmRvd3NTeXN0ZW1FcnJvcigiR2V0Q29tbVN0YXRlIik7CisgIHJldHVybiAwOworfQorCitpbnQKK3NlcmlhbFB1dEF0dHJpYnV0ZXMgKFNlcmlhbERldmljZSAqc2VyaWFsLCBjb25zdCBTZXJpYWxBdHRyaWJ1dGVzICphdHRyaWJ1dGVzKSB7CisgIGlmIChTZXRDb21tU3RhdGUoc2VyaWFsLT5wYWNrYWdlLmZpbGVIYW5kbGUsIChTZXJpYWxBdHRyaWJ1dGVzICopYXR0cmlidXRlcykpIHJldHVybiAxOworICBsb2dXaW5kb3dzU3lzdGVtRXJyb3IoIlNldENvbW1TdGF0ZSIpOworICByZXR1cm4gMDsKK30KKworaW50CitzZXJpYWxDYW5jZWxJbnB1dCAoU2VyaWFsRGV2aWNlICpzZXJpYWwpIHsKKyAgaWYgKFB1cmdlQ29tbShzZXJpYWwtPnBhY2thZ2UuZmlsZUhhbmRsZSwgUFVSR0VfUlhDTEVBUikpIHJldHVybiAxOworICBsb2dXaW5kb3dzU3lzdGVtRXJyb3IoIlB1cmdlQ29tbSIpOworICByZXR1cm4gMDsKK30KKworaW50CitzZXJpYWxDYW5jZWxPdXRwdXQgKFNlcmlhbERldmljZSAqc2VyaWFsKSB7CisgIGlmIChQdXJnZUNvbW0oc2VyaWFsLT5wYWNrYWdlLmZpbGVIYW5kbGUsIFBVUkdFX1RYQ0xFQVIpKSByZXR1cm4gMTsKKyAgbG9nV2luZG93c1N5c3RlbUVycm9yKCJQdXJnZUNvbW0iKTsKKyAgcmV0dXJuIDA7Cit9CisKK2ludAorc2VyaWFsTW9uaXRvcklucHV0IChTZXJpYWxEZXZpY2UgKnNlcmlhbCwgQXN5bmNNb25pdG9yQ2FsbGJhY2sgKmNhbGxiYWNrLCB2b2lkICpkYXRhKSB7CisgIHJldHVybiAwOworfQorCitpbnQKK3NlcmlhbFBvbGxJbnB1dCAoU2VyaWFsRGV2aWNlICpzZXJpYWwsIGludCB0aW1lb3V0KSB7CisgIGlmIChzZXJpYWwtPnBhY2thZ2UucGVuZGluZ0NoYXJhY3RlciAhPSAtMSkgcmV0dXJuIDE7CisKKyAgeworICAgIENPTU1USU1FT1VUUyB0aW1lb3V0cyA9IHtNQVhEV09SRCwgMCwgdGltZW91dCwgMCwgMH07CisgICAgRFdPUkQgYnl0ZXNSZWFkOworICAgIGNoYXIgYzsKKworICAgIGlmICghKFNldENvbW1UaW1lb3V0cyhzZXJpYWwtPnBhY2thZ2UuZmlsZUhhbmRsZSwgJnRpbWVvdXRzKSkpIHsKKyAgICAgIGxvZ1dpbmRvd3NTeXN0ZW1FcnJvcigiU2V0Q29tbVRpbWVvdXRzIHNlcmlhbEF3YWl0SW5wdXQiKTsKKyAgICAgIHNldFN5c3RlbUVycm5vKCk7CisgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBpZiAoIVJlYWRGaWxlKHNlcmlhbC0+cGFja2FnZS5maWxlSGFuZGxlLCAmYywgMSwgJmJ5dGVzUmVhZCwgTlVMTCkpIHsKKyAgICAgIGxvZ1dpbmRvd3NTeXN0ZW1FcnJvcigiUmVhZEZpbGUiKTsKKyAgICAgIHNldFN5c3RlbUVycm5vKCk7CisgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBpZiAoYnl0ZXNSZWFkKSB7CisgICAgICBzZXJpYWwtPnBhY2thZ2UucGVuZGluZ0NoYXJhY3RlciA9ICh1bnNpZ25lZCBjaGFyKWM7CisgICAgICByZXR1cm4gMTsKKyAgICB9CisgIH0KKyAgZXJybm8gPSBFQUdBSU47CisKKyAgcmV0dXJuIDA7Cit9CisKK2ludAorc2VyaWFsRHJhaW5PdXRwdXQgKFNlcmlhbERldmljZSAqc2VyaWFsKSB7CisgIGlmIChGbHVzaEZpbGVCdWZmZXJzKHNlcmlhbC0+cGFja2FnZS5maWxlSGFuZGxlKSkgcmV0dXJuIDE7CisgIGxvZ1dpbmRvd3NTeXN0ZW1FcnJvcigiRmx1c2hGaWxlQnVmZmVycyIpOworICByZXR1cm4gMDsKK30KKworc3NpemVfdAorc2VyaWFsR2V0RGF0YSAoCisgIFNlcmlhbERldmljZSAqc2VyaWFsLAorICB2b2lkICpidWZmZXIsIHNpemVfdCBzaXplLAorICBpbnQgaW5pdGlhbFRpbWVvdXQsIGludCBzdWJzZXF1ZW50VGltZW91dAorKSB7CisgIHNpemVfdCBsZW5ndGggPSAwOworICBDT01NVElNRU9VVFMgdGltZW91dHMgPSB7TUFYRFdPUkQsIDAsIGluaXRpYWxUaW1lb3V0LCAwLCAwfTsKKyAgRFdPUkQgYnl0ZXNSZWFkOworCisgIGlmIChzZXJpYWwtPnBhY2thZ2UucGVuZGluZ0NoYXJhY3RlciAhPSAtMSkgeworICAgICogKHVuc2lnbmVkIGNoYXIgKikgYnVmZmVyID0gc2VyaWFsLT5wYWNrYWdlLnBlbmRpbmdDaGFyYWN0ZXI7CisgICAgc2VyaWFsLT5wYWNrYWdlLnBlbmRpbmdDaGFyYWN0ZXIgPSAtMTsKKyAgICBieXRlc1JlYWQgPSAxOworICB9IGVsc2UgeworICAgIGlmICghKFNldENvbW1UaW1lb3V0cyhzZXJpYWwtPnBhY2thZ2UuZmlsZUhhbmRsZSwgJnRpbWVvdXRzKSkpIHsKKyAgICAgIGxvZ1dpbmRvd3NTeXN0ZW1FcnJvcigiU2V0Q29tbVRpbWVvdXRzIHNlcmlhbFJlYWRDaHVuazEiKTsKKyAgICAgIHNldFN5c3RlbUVycm5vKCk7CisgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgaWYgKCFSZWFkRmlsZShzZXJpYWwtPnBhY2thZ2UuZmlsZUhhbmRsZSwgYnVmZmVyLCBzaXplLCAmYnl0ZXNSZWFkLCBOVUxMKSkgeworICAgICAgbG9nV2luZG93c1N5c3RlbUVycm9yKCJSZWFkRmlsZSIpOworICAgICAgc2V0U3lzdGVtRXJybm8oKTsKKyAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICBpZiAoIWJ5dGVzUmVhZCkgcmV0dXJuIDA7CisgIH0KKworICBzaXplIC09IGJ5dGVzUmVhZDsKKyAgbGVuZ3RoICs9IGJ5dGVzUmVhZDsKKyAgdGltZW91dHMuUmVhZFRvdGFsVGltZW91dENvbnN0YW50ID0gc3Vic2VxdWVudFRpbWVvdXQ7CisKKyAgaWYgKCEoU2V0Q29tbVRpbWVvdXRzKHNlcmlhbC0+cGFja2FnZS5maWxlSGFuZGxlLCAmdGltZW91dHMpKSkgeworICAgIGxvZ1dpbmRvd3NTeXN0ZW1FcnJvcigiU2V0Q29tbVRpbWVvdXRzIHNlcmlhbFJlYWRDaHVuazIiKTsKKyAgICBzZXRTeXN0ZW1FcnJubygpOworICAgIHJldHVybiAtMTsKKyAgfQorCisgIHdoaWxlIChzaXplICYmIFJlYWRGaWxlKHNlcmlhbC0+cGFja2FnZS5maWxlSGFuZGxlLCBidWZmZXIgKyBsZW5ndGgsIHNpemUsICZieXRlc1JlYWQsIE5VTEwpKSB7CisgICAgaWYgKCFieXRlc1JlYWQpIHJldHVybiBsZW5ndGg7CisgICAgc2l6ZSAtPSBieXRlc1JlYWQ7CisgICAgbGVuZ3RoICs9IGJ5dGVzUmVhZDsKKyAgfQorCisgIGlmICghc2l6ZSkgcmV0dXJuIGxlbmd0aDsKKyAgbG9nV2luZG93c1N5c3RlbUVycm9yKCJSZWFkRmlsZSIpOworICBzZXRTeXN0ZW1FcnJubygpOworICByZXR1cm4gLTE7Cit9CisKK3NzaXplX3QKK3NlcmlhbFB1dERhdGEgKAorICBTZXJpYWxEZXZpY2UgKnNlcmlhbCwKKyAgY29uc3Qgdm9pZCAqZGF0YSwgc2l6ZV90IHNpemUKKykgeworICBDT01NVElNRU9VVFMgdGltZW91dHMgPSB7TUFYRFdPUkQsIDAsIDAsIDAsIDE1MDAwfTsKKyAgc2l6ZV90IGxlZnQgPSBzaXplOworICBEV09SRCBieXRlc1dyaXR0ZW47CisKKyAgaWYgKCEoU2V0Q29tbVRpbWVvdXRzKHNlcmlhbC0+cGFja2FnZS5maWxlSGFuZGxlLCAmdGltZW91dHMpKSkgeworICAgIGxvZ1dpbmRvd3NTeXN0ZW1FcnJvcigiU2V0Q29tbVRpbWVvdXRzIHNlcmlhbFdyaXRlRGF0YSIpOworICAgIHNldFN5c3RlbUVycm5vKCk7CisgICAgcmV0dXJuIC0xOworICB9CisKKyAgd2hpbGUgKGxlZnQgJiYgV3JpdGVGaWxlKHNlcmlhbC0+cGFja2FnZS5maWxlSGFuZGxlLCBkYXRhLCBsZWZ0LCAmYnl0ZXNXcml0dGVuLCBOVUxMKSkgeworICAgIGlmICghYnl0ZXNXcml0dGVuKSBicmVhazsKKyAgICBsZWZ0IC09IGJ5dGVzV3JpdHRlbjsKKyAgICBkYXRhICs9IGJ5dGVzV3JpdHRlbjsKKyAgfQorCisgIGlmICghbGVmdCkgcmV0dXJuIHNpemU7CisgIGxvZ1dpbmRvd3NTeXN0ZW1FcnJvcigiV3JpdGVGaWxlIik7CisgIHJldHVybiAtMTsKK30KKworaW50CitzZXJpYWxHZXRMaW5lcyAoU2VyaWFsRGV2aWNlICpzZXJpYWwpIHsKKyAgaWYgKCFHZXRDb21tTW9kZW1TdGF0dXMoc2VyaWFsLT5wYWNrYWdlLmZpbGVIYW5kbGUsICZzZXJpYWwtPmxpbmVzU3RhdGUpKSB7CisgICAgbG9nV2luZG93c1N5c3RlbUVycm9yKCJHZXRDb21tTW9kZW1TdGF0dXMiKTsKKyAgICByZXR1cm4gMDsKKyAgfQorCisgIHsKKyAgICBEQ0IgZGNiOworICAgIGRjYi5EQ0JsZW5ndGggPSBzaXplb2YoZGNiKTsKKworICAgIGlmICghR2V0Q29tbVN0YXRlKHNlcmlhbC0+cGFja2FnZS5maWxlSGFuZGxlLCAmZGNiKSkgeworICAgICAgbG9nV2luZG93c1N5c3RlbUVycm9yKCJHZXRDb21tU3RhdGUiKTsKKyAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIGlmIChkY2IuZlJ0c0NvbnRyb2wgPT0gUlRTX0NPTlRST0xfRU5BQkxFKSBzZXJpYWwtPmxpbmVzU3RhdGUgfD0gU0VSSUFMX0xJTkVfUlRTOworICAgIGlmIChkY2IuZkR0ckNvbnRyb2wgPT0gRFRSX0NPTlRST0xfRU5BQkxFKSBzZXJpYWwtPmxpbmVzU3RhdGUgfD0gU0VSSUFMX0xJTkVfRFRSOworICB9CisKKyAgcmV0dXJuIDE7Cit9CisKK2ludAorc2VyaWFsUHV0TGluZXMgKFNlcmlhbERldmljZSAqc2VyaWFsLCBTZXJpYWxMaW5lcyBoaWdoLCBTZXJpYWxMaW5lcyBsb3cpIHsKKyAgRENCIGRjYjsKKyAgZGNiLkRDQmxlbmd0aCA9IHNpemVvZihkY2IpOworCisgIGlmIChHZXRDb21tU3RhdGUoc2VyaWFsLT5wYWNrYWdlLmZpbGVIYW5kbGUsICZkY2IpKSB7CisgICAgaWYgKGxvdyAmIFNFUklBTF9MSU5FX1JUUykgeworICAgICAgZGNiLmZSdHNDb250cm9sID0gUlRTX0NPTlRST0xfRElTQUJMRTsKKyAgICB9IGVsc2UgaWYgKGhpZ2ggJiBTRVJJQUxfTElORV9SVFMpIHsKKyAgICAgIGRjYi5mUnRzQ29udHJvbCA9IFJUU19DT05UUk9MX0VOQUJMRTsKKyAgICB9CisKKyAgICBpZiAobG93ICYgU0VSSUFMX0xJTkVfRFRSKSB7CisgICAgICBkY2IuZkR0ckNvbnRyb2wgPSBEVFJfQ09OVFJPTF9ESVNBQkxFOworICAgIH0gZWxzZSBpZiAoaGlnaCAmIFNFUklBTF9MSU5FX0RUUikgeworICAgICAgZGNiLmZEdHJDb250cm9sID0gRFRSX0NPTlRST0xfRU5BQkxFOworICAgIH0KKworICAgIGlmIChTZXRDb21tU3RhdGUoc2VyaWFsLT5wYWNrYWdlLmZpbGVIYW5kbGUsICZkY2IpKSByZXR1cm4gMTsKKyAgICBsb2dXaW5kb3dzU3lzdGVtRXJyb3IoIlNldENvbW1TdGF0ZSIpOworICB9IGVsc2UgeworICAgIGxvZ1dpbmRvd3NTeXN0ZW1FcnJvcigiR2V0Q29tbVN0YXRlIik7CisgIH0KKworICByZXR1cm4gMDsKK30KKworaW50CitzZXJpYWxSZWdpc3RlcldhaXRMaW5lcyAoU2VyaWFsRGV2aWNlICpzZXJpYWwsIFNlcmlhbExpbmVzIGxpbmVzKSB7CisgIERXT1JEIGV2ZW50TWFzayA9IDA7CisKKyAgaWYgKGxpbmVzICYgU0VSSUFMX0xJTkVfQ1RTKSBldmVudE1hc2sgfD0gRVZfQ1RTOworICBpZiAobGluZXMgJiBTRVJJQUxfTElORV9EU1IpIGV2ZW50TWFzayB8PSBFVl9EU1I7CisgIGlmIChsaW5lcyAmIFNFUklBTF9MSU5FX1JORykgZXZlbnRNYXNrIHw9IEVWX1JJTkc7CisgIGlmIChsaW5lcyAmIFNFUklBTF9MSU5FX0NBUikgZXZlbnRNYXNrIHw9IEVWX1JMU0Q7CisKKyAgaWYgKFNldENvbW1NYXNrKHNlcmlhbC0+cGFja2FnZS5maWxlSGFuZGxlLCBldmVudE1hc2spKSByZXR1cm4gMTsKKyAgbG9nV2luZG93c1N5c3RlbUVycm9yKCJTZXRDb21tTWFzayIpOworICByZXR1cm4gMDsKK30KKworaW50CitzZXJpYWxNb25pdG9yV2FpdExpbmVzIChTZXJpYWxEZXZpY2UgKnNlcmlhbCkgeworICBEV09SRCBldmVudDsKKworICBpZiAoV2FpdENvbW1FdmVudChzZXJpYWwtPnBhY2thZ2UuZmlsZUhhbmRsZSwgJmV2ZW50LCBOVUxMKSkgcmV0dXJuIDE7CisgIGxvZ1dpbmRvd3NTeXN0ZW1FcnJvcigiV2FpdENvbW1FdmVudCIpOworICByZXR1cm4gMDsKK30KKworaW50CitzZXJpYWxDb25uZWN0RGV2aWNlIChTZXJpYWxEZXZpY2UgKnNlcmlhbCwgY29uc3QgY2hhciAqZGV2aWNlKSB7CisgIGlmICgoc2VyaWFsLT5wYWNrYWdlLmZpbGVIYW5kbGUgPSBDcmVhdGVGaWxlKGRldmljZSwgR0VORVJJQ19SRUFEfEdFTkVSSUNfV1JJVEUsIDAsIE5VTEwsIE9QRU5fRVhJU1RJTkcsIDAsIE5VTEwpKSAhPSBJTlZBTElEX0hBTkRMRV9WQUxVRSkgeworICAgIHNlcmlhbC0+cGFja2FnZS5wZW5kaW5nQ2hhcmFjdGVyID0gLTE7CisKKyAgICBpZiAoc2VyaWFsUHJlcGFyZURldmljZShzZXJpYWwpKSB7CisgICAgICBsb2dNZXNzYWdlKExPR19DQVRFR09SWShTRVJJQUxfSU8pLCAiZGV2aWNlIG9wZW5lZDogJXM6IGZoPSUiIFBSSWZkLAorICAgICAgICAgICAgICAgICBkZXZpY2UsIHNlcmlhbC0+cGFja2FnZS5maWxlSGFuZGxlKTsKKyAgICAgIHJldHVybiAxOworICAgIH0KKworICAgIENsb3NlSGFuZGxlKHNlcmlhbC0+cGFja2FnZS5maWxlSGFuZGxlKTsKKyAgfSBlbHNlIHsKKyAgICBsb2dXaW5kb3dzU3lzdGVtRXJyb3IoIkNyZWF0ZUZpbGUiKTsKKyAgICBsb2dNZXNzYWdlKExPR19FUlIsICJjYW5ub3Qgb3BlbiBzZXJpYWwgZGV2aWNlOiAlcyIsIGRldmljZSk7CisgIH0KKworICByZXR1cm4gMDsKK30KKwordm9pZAorc2VyaWFsRGlzY29ubmVjdERldmljZSAoU2VyaWFsRGV2aWNlICpzZXJpYWwpIHsKKyAgQ2xvc2VIYW5kbGUoc2VyaWFsLT5wYWNrYWdlLmZpbGVIYW5kbGUpOworfQorCitpbnQKK3NlcmlhbEVuc3VyZUZpbGVEZXNjcmlwdG9yIChTZXJpYWxEZXZpY2UgKnNlcmlhbCkgeworI2lmZGVmIF9fQ1lHV0lOX18KKyAgaWYgKChzZXJpYWwtPmZpbGVEZXNjcmlwdG9yID0gY3lnd2luX2F0dGFjaF9oYW5kbGVfdG9fZmQoInNlcmlhbGRldmljZSIsIC0xLCBzZXJpYWwtPnBhY2thZ2UuZmlsZUhhbmRsZSwgVFJVRSwgR0VORVJJQ19SRUFEfEdFTkVSSUNfV1JJVEUpKSA+PSAwKSByZXR1cm4gMTsKKyAgbG9nU3lzdGVtRXJyb3IoImN5Z3dpbl9hdHRhY2hfaGFuZGxlX3RvX2ZkIik7CisjZWxzZSAvKiBfX0NZR1dJTl9fICovCisgIGlmICgoc2VyaWFsLT5maWxlRGVzY3JpcHRvciA9IF9vcGVuX29zZmhhbmRsZSgobG9uZylzZXJpYWwtPnBhY2thZ2UuZmlsZUhhbmRsZSwgT19SRFdSKSkgPj0gMCkgcmV0dXJuIDE7CisgIGxvZ1N5c3RlbUVycm9yKCJvcGVuX29zZmhhbmRsZSIpOworI2VuZGlmIC8qIF9fQ1lHV0lOX18gKi8KKworICByZXR1cm4gMDsKK30KKwordm9pZAorc2VyaWFsQ2xlYXJFcnJvciAoU2VyaWFsRGV2aWNlICpzZXJpYWwpIHsKKyAgQ2xlYXJDb21tRXJyb3Ioc2VyaWFsLT5wYWNrYWdlLmZpbGVIYW5kbGUsIE5VTEwsIE5VTEwpOworfQorCmRpZmYgLS1naXQgYS9Qcm9ncmFtcy9zZXJpYWxfd2luZG93cy5oIGIvUHJvZ3JhbXMvc2VyaWFsX3dpbmRvd3MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZjY5Mjg2Ci0tLSAvZGV2L251bGwKKysrIGIvUHJvZ3JhbXMvc2VyaWFsX3dpbmRvd3MuaApAQCAtMCwwICsxLDQ2IEBACisvKgorICogQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyAqICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyAqCisgKiBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorICoKKyAqIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyAqCisgKiBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisgKi8KKworI2lmbmRlZiBCUkxUVFlfSU5DTFVERURfU0VSSUFMX1dJTkRPV1MKKyNkZWZpbmUgQlJMVFRZX0lOQ0xVREVEX1NFUklBTF9XSU5ET1dTCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYgLyogX19jcGx1c3BsdXMgKi8KKwordHlwZWRlZiBEV09SRCBTZXJpYWxTcGVlZDsKK3R5cGVkZWYgRENCIFNlcmlhbEF0dHJpYnV0ZXM7CisKK3R5cGVkZWYgRFdPUkQgU2VyaWFsTGluZXM7CisjZGVmaW5lIFNFUklBTF9MSU5FX1JUUyAwWDAxCisjZGVmaW5lIFNFUklBTF9MSU5FX0RUUiAwWDAyCisjZGVmaW5lIFNFUklBTF9MSU5FX0NUUyBNU19DVFNfT04KKyNkZWZpbmUgU0VSSUFMX0xJTkVfRFNSIE1TX0RTUl9PTgorI2RlZmluZSBTRVJJQUxfTElORV9STkcgTVNfUklOR19PTgorI2RlZmluZSBTRVJJQUxfTElORV9DQVIgTVNfUkxTRF9PTgorCit0eXBlZGVmIHN0cnVjdCB7CisgIEhBTkRMRSBmaWxlSGFuZGxlOworICBpbnQgcGVuZGluZ0NoYXJhY3RlcjsKK30gU2VyaWFsUGFja2FnZUZpZWxkczsKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYgLyogX19jcGx1c3BsdXMgKi8KKworI2VuZGlmIC8qIEJSTFRUWV9JTkNMVURFRF9TRVJJQUxfV0lORE9XUyAqLwpkaWZmIC0tZ2l0IGEvUHJvZ3JhbXMvc2VydmljZV9saWJzeXN0ZW1kLmMgYi9Qcm9ncmFtcy9zZXJ2aWNlX2xpYnN5c3RlbWQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMmQ3MmY1Ci0tLSAvZGV2L251bGwKKysrIGIvUHJvZ3JhbXMvc2VydmljZV9saWJzeXN0ZW1kLmMKQEAgLTAsMCArMSw0NSBAQAorLyoKKyAqIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisgKiAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisgKgorICogQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKKyNpbmNsdWRlICJwcm9sb2d1ZS5oIgorCisjaW5jbHVkZSA8c3lzdGVtZC9zZC1kYWVtb24uaD4KKworI2luY2x1ZGUgImxvZy5oIgorI2luY2x1ZGUgInNlcnZpY2UuaCIKKworaW50CitpbnN0YWxsU2VydmljZSAoY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqZGVzY3JpcHRpb24sIGNvbnN0IGNoYXIgKmNvbmZpZ3VyYXRpb25GaWxlKSB7CisgIGxvZ1Vuc3VwcG9ydGVkRmVhdHVyZSgic2VydmljZSBpbnN0YWxsYXRpb24iKTsKKyAgcmV0dXJuIDA7Cit9CisKK2ludAorcmVtb3ZlU2VydmljZSAoY29uc3QgY2hhciAqbmFtZSkgeworICBsb2dVbnN1cHBvcnRlZEZlYXR1cmUoInNlcnZpY2UgcmVtb3ZhbCIpOworICByZXR1cm4gMDsKK30KKworaW50Citub3RpZnlTZXJ2aWNlUmVhZHkgKHZvaWQpIHsKKyAgaWYgKHNkX25vdGlmeSgxLCAiUkVBRFk9MSIpIDwgMCkgeworICAgIGxvZ1N5c3RlbUVycm9yKCJzZF9ub3RpZnkiKTsKKyAgfQorCisgIHJldHVybiAxOworfQpkaWZmIC0tZ2l0IGEvUHJvZ3JhbXMvc2VydmljZV9ub25lLmMgYi9Qcm9ncmFtcy9zZXJ2aWNlX25vbmUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMTg3OGVlCi0tLSAvZGV2L251bGwKKysrIGIvUHJvZ3JhbXMvc2VydmljZV9ub25lLmMKQEAgLTAsMCArMSwzOSBAQAorLyoKKyAqIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisgKiAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisgKgorICogQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKKyNpbmNsdWRlICJwcm9sb2d1ZS5oIgorCisjaW5jbHVkZSAibG9nLmgiCisjaW5jbHVkZSAic2VydmljZS5oIgorCitpbnQKK2luc3RhbGxTZXJ2aWNlIChjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICpkZXNjcmlwdGlvbiwgY29uc3QgY2hhciAqY29uZmlndXJhdGlvbkZpbGUpIHsKKyAgbG9nVW5zdXBwb3J0ZWRGZWF0dXJlKCJzZXJ2aWNlIGluc3RhbGxhdGlvbiIpOworICByZXR1cm4gMDsKK30KKworaW50CityZW1vdmVTZXJ2aWNlIChjb25zdCBjaGFyICpuYW1lKSB7CisgIGxvZ1Vuc3VwcG9ydGVkRmVhdHVyZSgic2VydmljZSByZW1vdmFsIik7CisgIHJldHVybiAwOworfQorCitpbnQKK25vdGlmeVNlcnZpY2VSZWFkeSAodm9pZCkgeworICByZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL1Byb2dyYW1zL3NlcnZpY2Vfd2luZG93cy5jIGIvUHJvZ3JhbXMvc2VydmljZV93aW5kb3dzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzRiOTc2NQotLS0gL2Rldi9udWxsCisrKyBiL1Byb2dyYW1zL3NlcnZpY2Vfd2luZG93cy5jCkBAIC0wLDAgKzEsMTIzIEBACisvKgorICogQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyAqICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyAqCisgKiBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorICoKKyAqIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyAqCisgKiBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisgKi8KKworI2luY2x1ZGUgInByb2xvZ3VlLmgiCisKKyNpbmNsdWRlICJsb2cuaCIKKyNpbmNsdWRlICJwZ21wYXRoLmgiCisjaW5jbHVkZSAic2VydmljZS5oIgorI2luY2x1ZGUgInN5c3RlbV93aW5kb3dzLmgiCisKK2ludAoraW5zdGFsbFNlcnZpY2UgKGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKmRlc2NyaXB0aW9uLCBjb25zdCBjaGFyICpjb25maWd1cmF0aW9uRmlsZSkgeworICBjb25zdCBjaGFyICpjb25zdCBhcmd1bWVudHNbXSA9IHsKKyAgICBnZXRQcm9ncmFtUGF0aCgpLCAiLW4iLAorICAgICItZiIsIGNvbmZpZ3VyYXRpb25GaWxlLAorICAgIE5VTEwKKyAgfTsKKworICBpbnQgaW5zdGFsbGVkID0gMDsKKyAgY2hhciAqY29tbWFuZCA9IG1ha2VXaW5kb3dzQ29tbWFuZExpbmUoYXJndW1lbnRzKTsKKworICBpZiAoY29tbWFuZCkgeworICAgIFNDX0hBTkRMRSBzY20gPSBPcGVuU0NNYW5hZ2VyKAorICAgICAgTlVMTCwgLy8gbWFjaGluZSBuYW1lCisgICAgICBOVUxMLCAvLyBkYXRhYmFzZSBuYW1lCisgICAgICBTQ19NQU5BR0VSX0NSRUFURV9TRVJWSUNFIC8vIGRlc2lyZWQgYWNjZXNzCisgICAgKTsKKworICAgIGlmIChzY20pIHsKKyAgICAgIFNDX0hBTkRMRSBzZXJ2aWNlID0gQ3JlYXRlU2VydmljZSgKKyAgICAgICAgc2NtLCAvLyBzZXJ2aWNlIGNvbnRyb2wgbWFuYWdlciBkYXRhYmFzZQorICAgICAgICBuYW1lLCAvLyBzZXJ2aWNlIG5hbWUKKyAgICAgICAgZGVzY3JpcHRpb24sIC8vIGRpc3BsYXkgbmFtZQorICAgICAgICBTRVJWSUNFX0FMTF9BQ0NFU1MsIC8vIGRlc2lyZWQgYWNjZXNzCisgICAgICAgIChTRVJWSUNFX1dJTjMyX09XTl9QUk9DRVNTIHwgU0VSVklDRV9JTlRFUkFDVElWRV9QUk9DRVNTKSwgLy8gc2VydmljZSB0eXBlCisgICAgICAgIFNFUlZJQ0VfQVVUT19TVEFSVCwgLy8gc3RhcnQgdHlwZQorICAgICAgICBTRVJWSUNFX0VSUk9SX05PUk1BTCwgLy8gZXJyb3IgY29udHJvbAorICAgICAgICBjb21tYW5kLCAvLyBiaW5hcnkgcGF0aCBuYW1lCisgICAgICAgIE5VTEwsIC8vIGxvYWQgb3JkZXIgZ3JvdXAKKyAgICAgICAgTlVMTCwgLy8gdGFnIGlkCisgICAgICAgIE5VTEwsIC8vIGRlcGVuZGVuY2llcworICAgICAgICBOVUxMLCAvLyBzZXJ2aWNlIHN0YXJ0IG5hbWUKKyAgICAgICAgTlVMTCAvLyBwYXNzd29yZAorICAgICAgKTsKKworICAgICAgaWYgKHNlcnZpY2UpIHsKKyAgICAgICAgbG9nTWVzc2FnZShMT0dfTk9USUNFLCAic2VydmljZSBpbnN0YWxsZWQ6ICVzIiwgbmFtZSk7CisgICAgICAgIGluc3RhbGxlZCA9IDE7CisKKyAgICAgICAgQ2xvc2VTZXJ2aWNlSGFuZGxlKHNlcnZpY2UpOworICAgICAgfSBlbHNlIGlmIChHZXRMYXN0RXJyb3IoKSA9PSBFUlJPUl9TRVJWSUNFX0VYSVNUUykgeworICAgICAgICBsb2dNZXNzYWdlKExPR19XQVJOSU5HLCAic2VydmljZSBhbHJlYWR5IGluc3RhbGxlZDogJXMiLCBuYW1lKTsKKyAgICAgICAgaW5zdGFsbGVkID0gMTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIGxvZ1dpbmRvd3NTeXN0ZW1FcnJvcigiQ3JlYXRlU2VydmljZSIpOworICAgICAgfQorCisgICAgICBDbG9zZVNlcnZpY2VIYW5kbGUoc2NtKTsKKyAgICB9IGVsc2UgeworICAgICAgbG9nV2luZG93c1N5c3RlbUVycm9yKCJPcGVuU0NNYW5hZ2VyIik7CisgICAgfQorCisgICAgZnJlZShjb21tYW5kKTsKKyAgfQorCisgIHJldHVybiBpbnN0YWxsZWQ7Cit9CisKK2ludAorcmVtb3ZlU2VydmljZSAoY29uc3QgY2hhciAqbmFtZSkgeworICBpbnQgcmVtb3ZlZCA9IDA7CisgIFNDX0hBTkRMRSBzY20gPSBPcGVuU0NNYW5hZ2VyKE5VTEwsIE5VTEwsIFNDX01BTkFHRVJfQUxMX0FDQ0VTUyk7CisKKyAgaWYgKHNjbSkgeworICAgIFNDX0hBTkRMRSBzZXJ2aWNlID0gT3BlblNlcnZpY2Uoc2NtLCBuYW1lLCBERUxFVEUpOworCisgICAgaWYgKHNlcnZpY2UpIHsKKyAgICAgIGlmIChEZWxldGVTZXJ2aWNlKHNlcnZpY2UpKSB7CisgICAgICAgIGxvZ01lc3NhZ2UoTE9HX05PVElDRSwgInNlcnZpY2UgcmVtb3ZlZDogJXMiLCBuYW1lKTsKKyAgICAgICAgcmVtb3ZlZCA9IDE7CisgICAgICB9IGVsc2UgaWYgKEdldExhc3RFcnJvcigpID09IEVSUk9SX1NFUlZJQ0VfTUFSS0VEX0ZPUl9ERUxFVEUpIHsKKyAgICAgICAgbG9nTWVzc2FnZShMT0dfV0FSTklORywgInNlcnZpY2UgYWxyZWFkeSBiZWluZyByZW1vdmVkOiAlcyIsIG5hbWUpOworICAgICAgICByZW1vdmVkID0gMTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIGxvZ1dpbmRvd3NTeXN0ZW1FcnJvcigiRGVsZXRlU2VydmljZSIpOworICAgICAgfQorCisgICAgICBDbG9zZVNlcnZpY2VIYW5kbGUoc2VydmljZSk7CisgICAgfSBlbHNlIGlmIChHZXRMYXN0RXJyb3IoKSA9PSBFUlJPUl9TRVJWSUNFX0RPRVNfTk9UX0VYSVNUKSB7CisgICAgICBsb2dNZXNzYWdlKExPR19XQVJOSU5HLCAic2VydmljZSBub3QgaW5zdGFsbGVkOiAlcyIsIG5hbWUpOworICAgICAgcmVtb3ZlZCA9IDE7CisgICAgfSBlbHNlIHsKKyAgICAgIGxvZ1dpbmRvd3NTeXN0ZW1FcnJvcigiT3BlblNlcnZpY2UiKTsKKyAgICB9CisKKyAgICBDbG9zZVNlcnZpY2VIYW5kbGUoc2NtKTsKKyAgfSBlbHNlIHsKKyAgICBsb2dXaW5kb3dzU3lzdGVtRXJyb3IoIk9wZW5TQ01hbmFnZXIiKTsKKyAgfQorCisgIHJldHVybiByZW1vdmVkOworfQorCitpbnQKK25vdGlmeVNlcnZpY2VSZWFkeSAodm9pZCkgeworICBsb2dVbnN1cHBvcnRlZEZlYXR1cmUoInNlcnZpY2UgcmVhZHkgbm90aWZpY2F0aW9uIik7CisgIHJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvUHJvZ3JhbXMvc2VzLmMgYi9Qcm9ncmFtcy9zZXMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lM2E0MTRjCi0tLSAvZGV2L251bGwKKysrIGIvUHJvZ3JhbXMvc2VzLmMKQEAgLTAsMCArMSwxMTAgQEAKKy8qCisgKiBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorICogICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorICoKKyAqIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorICoKKyAqIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyAqLworCisjaW5jbHVkZSAicHJvbG9ndWUuaCIKKworI2luY2x1ZGUgPHN0cmluZy5oPgorCisjaW5jbHVkZSAibG9nLmgiCisjaW5jbHVkZSAic2VzLmgiCisjaW5jbHVkZSAiZGVmYXVsdHMuaCIKKworc3RhdGljIGNvbnN0IFNlc3Npb25FbnRyeSBpbml0aWFsU2Vzc2lvbkVudHJ5ID0geworICAubnVtYmVyID0gMCwKKworICAudHJhY2tTY3JlZW5DdXJzb3IgPSBERUZBVUxUX1RSQUNLX1NDUkVFTl9DVVJTT1IsCisgIC5oaWRlU2NyZWVuQ3Vyc29yID0gREVGQVVMVF9ISURFX1NDUkVFTl9DVVJTT1IsCisKKyAgLnB0cnggPSAtMSwKKyAgLnB0cnkgPSAtMQorfTsKKworc3RhdGljIFNlc3Npb25FbnRyeSAqKnNlc3Npb25BcnJheSA9IE5VTEw7CitzdGF0aWMgdW5zaWduZWQgaW50IHNlc3Npb25MaW1pdCA9IDA7CitzdGF0aWMgdW5zaWduZWQgaW50IHNlc3Npb25Db3VudCA9IDA7CisKK1Nlc3Npb25FbnRyeSAqCitnZXRTZXNzaW9uRW50cnkgKGludCBudW1iZXIpIHsKKyAgaW50IGZpcnN0ID0gMDsKKyAgaW50IGxhc3QgPSBzZXNzaW9uQ291bnQgLSAxOworCisgIHdoaWxlIChmaXJzdCA8PSBsYXN0KSB7CisgICAgaW50IGN1cnJlbnQgPSAoZmlyc3QgKyBsYXN0KSAvIDI7CisgICAgU2Vzc2lvbkVudHJ5ICplbnRyeSA9IHNlc3Npb25BcnJheVtjdXJyZW50XTsKKyAgICBpZiAobnVtYmVyID09IGVudHJ5LT5udW1iZXIpIHJldHVybiBlbnRyeTsKKworICAgIGlmIChudW1iZXIgPCBlbnRyeS0+bnVtYmVyKSB7CisgICAgICBsYXN0ID0gY3VycmVudCAtIDE7CisgICAgfSBlbHNlIHsKKyAgICAgIGZpcnN0ID0gY3VycmVudCArIDE7CisgICAgfQorICB9CisKKyAgaWYgKHNlc3Npb25Db3VudCA9PSBzZXNzaW9uTGltaXQpIHsKKyAgICB1bnNpZ25lZCBpbnQgbmV3TGltaXQgPSBzZXNzaW9uTGltaXQ/IHNlc3Npb25MaW1pdDw8MTogMFgxMDsKKyAgICBTZXNzaW9uRW50cnkgKipuZXdBcnJheTsKKworICAgIGlmICgobmV3QXJyYXkgPSByZWFsbG9jKHNlc3Npb25BcnJheSwgQVJSQVlfU0laRShuZXdBcnJheSwgbmV3TGltaXQpKSkpIHsKKyAgICAgIHNlc3Npb25BcnJheSA9IG5ld0FycmF5OworICAgICAgc2Vzc2lvbkxpbWl0ID0gbmV3TGltaXQ7CisgICAgfSBlbHNlIHsKKyAgICAgIGxvZ01hbGxvY0Vycm9yKCk7CisgICAgfQorICB9CisKKyAgaWYgKHNlc3Npb25Db3VudCA8IHNlc3Npb25MaW1pdCkgeworICAgIFNlc3Npb25FbnRyeSAqZW50cnkgPSBtYWxsb2Moc2l6ZW9mKCplbnRyeSkpOworCisgICAgaWYgKGVudHJ5KSB7CisgICAgICAqZW50cnkgPSBpbml0aWFsU2Vzc2lvbkVudHJ5OworICAgICAgZW50cnktPm51bWJlciA9IG51bWJlcjsKKworICAgICAgbWVtbW92ZSgmc2Vzc2lvbkFycmF5W2ZpcnN0KzFdLCAmc2Vzc2lvbkFycmF5W2ZpcnN0XSwKKyAgICAgICAgICAgICAgQVJSQVlfU0laRShzZXNzaW9uQXJyYXksIHNlc3Npb25Db3VudC1maXJzdCkpOworICAgICAgc2Vzc2lvbkFycmF5W2ZpcnN0XSA9IGVudHJ5OworICAgICAgc2Vzc2lvbkNvdW50ICs9IDE7CisgICAgICByZXR1cm4gZW50cnk7CisgICAgfSBlbHNlIHsKKyAgICAgIGxvZ01hbGxvY0Vycm9yKCk7CisgICAgfQorICB9CisKKyAgeworICAgIHN0YXRpYyBTZXNzaW9uRW50cnkgZmFsbGJhY2tFbnRyeTsKKyAgICBzdGF0aWMgaW50IGluaXRpYWxpemVkID0gMDsKKworICAgIGlmICghaW5pdGlhbGl6ZWQpIHsKKyAgICAgIGZhbGxiYWNrRW50cnkgPSBpbml0aWFsU2Vzc2lvbkVudHJ5OworICAgICAgaW5pdGlhbGl6ZWQgPSAxOworICAgIH0KKworICAgIHJldHVybiAmZmFsbGJhY2tFbnRyeTsKKyAgfQorfQorCit2b2lkCitkZWFsbG9jYXRlU2Vzc2lvbkVudHJpZXMgKHZvaWQpIHsKKyAgaWYgKHNlc3Npb25BcnJheSkgeworICAgIHdoaWxlIChzZXNzaW9uQ291bnQgPiAwKSBmcmVlKHNlc3Npb25BcnJheVstLXNlc3Npb25Db3VudF0pOworICAgIGZyZWUoc2Vzc2lvbkFycmF5KTsKKyAgICBzZXNzaW9uQXJyYXkgPSBOVUxMOworICB9IGVsc2UgeworICAgIHNlc3Npb25Db3VudCA9IDA7CisgIH0KKyAgc2Vzc2lvbkxpbWl0ID0gMDsKK30KZGlmZiAtLWdpdCBhL1Byb2dyYW1zL3Nlcy5oIGIvUHJvZ3JhbXMvc2VzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzdhMjZiZQotLS0gL2Rldi9udWxsCisrKyBiL1Byb2dyYW1zL3Nlcy5oCkBAIC0wLDAgKzEsNTkgQEAKKy8qCisgKiBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorICogICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorICoKKyAqIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorICoKKyAqIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyAqLworCisjaWZuZGVmIEJSTFRUWV9JTkNMVURFRF9TRVMKKyNkZWZpbmUgQlJMVFRZX0lOQ0xVREVEX1NFUworCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmIC8qIF9fY3BsdXNwbHVzICovCisKKy8qIAorICogU3RydWN0dXJlIGRlZmluaXRpb24gZm9yIHZvbGF0aWxlIHNjcmVlbiBzdGF0ZSB2YXJpYWJsZXMuCisgKi8KKwordHlwZWRlZiBzdHJ1Y3QgeworICBzaG9ydCBjb2x1bW47CisgIHNob3J0IHJvdzsKK30gU2NyZWVuTG9jYXRpb247CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgaW50IG51bWJlcjsKKworICB1bnNpZ25lZCBjaGFyIHRyYWNrU2NyZWVuQ3Vyc29yOwkJLyogY3Vyc29yIHRyYWNraW5nIG1vZGUgKi8KKyAgdW5zaWduZWQgY2hhciBoaWRlU2NyZWVuQ3Vyc29yOwkJLyogZm9yIHRlbXBvcmFyaWx5IGhpZGluZyB0aGUgY3Vyc29yICovCisgIHVuc2lnbmVkIGNoYXIgZGlzcGxheU1vZGU7CQkvKiB0ZXh0IG9yIGF0dHJpYnV0ZXMgZGlzcGxheSAqLworCisgIGludCB3aW54LCB3aW55OwkvKiB1cHBlci1sZWZ0IGNvcm5lciBvZiBicmFpbGxlIHdpbmRvdyAqLworICBpbnQgbW90eCwgbW90eTsJLyogbGFzdCB1c2VyIG1vdGlvbiBvZiBicmFpbGxlIHdpbmRvdyAqLworICBpbnQgdHJreCwgdHJreTsJLyogdHJhY2tlZCBjdXJzb3IgcG9zaXRpb24gKi8KKyAgaW50IGRjdHgsIGRjdHk7CS8qIGluaXRpYWwgY3Vyc29yIHBvc2l0aW9uICovCisgIGludCBwdHJ4LCBwdHJ5OwkvKiBsYXN0IGtub3duIHNjcmVlbiBwb2ludGVyIHBvc2l0aW9uICovCisgIGludCBzcGt4LCBzcGt5OwkvKiBjdXJyZW50IHNwZWVjaCBwb3NpdGlvbiAqLworCisgIFNjcmVlbkxvY2F0aW9uIG1hcmtzWzBYMTAwXTsKK30gU2Vzc2lvbkVudHJ5OworCitleHRlcm4gU2Vzc2lvbkVudHJ5ICpnZXRTZXNzaW9uRW50cnkgKGludCBudW1iZXIpOworZXh0ZXJuIHZvaWQgZGVhbGxvY2F0ZVNlc3Npb25FbnRyaWVzICh2b2lkKTsKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYgLyogX19jcGx1c3BsdXMgKi8KKworI2VuZGlmIC8qIEJSTFRUWV9JTkNMVURFRF9TRVMgKi8KZGlmZiAtLWdpdCBhL1Byb2dyYW1zL3Nway5hdXRvLmggYi9Qcm9ncmFtcy9zcGsuYXV0by5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBkZjQyZTIKLS0tIC9kZXYvbnVsbAorKysgYi9Qcm9ncmFtcy9zcGsuYXV0by5oCkBAIC0wLDAgKzEgQEAKK3N0YXRpYyBjb25zdCBEcml2ZXJFbnRyeSBkcml2ZXJUYWJsZVtdID0ge3tOVUxMLCBOVUxMfX07CmRpZmYgLS1naXQgYS9Qcm9ncmFtcy9zcGsuYyBiL1Byb2dyYW1zL3Nway5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE5MWE4YzkKLS0tIC9kZXYvbnVsbAorKysgYi9Qcm9ncmFtcy9zcGsuYwpAQCAtMCwwICsxLDI1MSBAQAorLyoKKyAqIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisgKiAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisgKgorICogQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKKyNpbmNsdWRlICJwcm9sb2d1ZS5oIgorCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKworI2luY2x1ZGUgImxvZy5oIgorI2luY2x1ZGUgInBhcmFtZXRlcnMuaCIKKyNpbmNsdWRlICJwcm9ncmFtLmgiCisjaW5jbHVkZSAiZmlsZS5oIgorI2luY2x1ZGUgInBhcnNlLmgiCisjaW5jbHVkZSAicHJlZnMuaCIKKyNpbmNsdWRlICJ1dGY4LmgiCisjaW5jbHVkZSAic3BrLmgiCisjaW5jbHVkZSAic3BrX3RocmVhZC5oIgorCit2b2lkCitjb25zdHJ1Y3RTcGVlY2hTeW50aGVzaXplciAoU3BlZWNoU3ludGhlc2l6ZXIgKnNwaykgeworICBzcGstPmNhbkF1dG9zcGVhayA9IDE7CisKKyAgc3BrLT50cmFjay5pc0FjdGl2ZSA9IDA7CisgIHNway0+dHJhY2suc2NyZWVuTnVtYmVyID0gU1BLX1NDUl9OT05FOworICBzcGstPnRyYWNrLmZpcnN0TGluZSA9IDA7CisgIHNway0+dHJhY2suc3BlZWNoTG9jYXRpb24gPSBTUEtfTE9DX05PTkU7CisKKyAgc3BrLT5zZXRWb2x1bWUgPSBOVUxMOworICBzcGstPnNldFJhdGUgPSBOVUxMOworICBzcGstPnNldFBpdGNoID0gTlVMTDsKKyAgc3BrLT5zZXRQdW5jdHVhdGlvbiA9IE5VTEw7CisgIHNway0+ZHJhaW4gPSBOVUxMOworCisgIHNway0+c2V0RmluaXNoZWQgPSBOVUxMOworICBzcGstPnNldExvY2F0aW9uID0gTlVMTDsKKworICBzcGstPmRyaXZlci50aHJlYWQgPSBOVUxMOworICBzcGstPmRyaXZlci5kYXRhID0gTlVMTDsKK30KKwordm9pZAorZGVzdHJ1Y3RTcGVlY2hTeW50aGVzaXplciAoU3BlZWNoU3ludGhlc2l6ZXIgKnNwaykgeworfQorCitpbnQKK3N0YXJ0U3BlZWNoRHJpdmVyVGhyZWFkIChTcGVlY2hTeW50aGVzaXplciAqc3BrLCBjaGFyICoqcGFyYW1ldGVycykgeworICByZXR1cm4gY29uc3RydWN0U3BlZWNoRHJpdmVyVGhyZWFkKHNwaywgcGFyYW1ldGVycyk7Cit9CisKK3ZvaWQKK3N0b3BTcGVlY2hEcml2ZXJUaHJlYWQgKFNwZWVjaFN5bnRoZXNpemVyICpzcGspIHsKKyAgZGVzdHJveVNwZWVjaERyaXZlclRocmVhZChzcGspOworfQorCitpbnQKK211dGVTcGVlY2ggKFNwZWVjaFN5bnRoZXNpemVyICpzcGssIGNvbnN0IGNoYXIgKnJlYXNvbikgeworICBpbnQgcmVzdWx0OworCisgIGxvZ01lc3NhZ2UoTE9HX0NBVEVHT1JZKFNQRUVDSF9FVkVOVFMpLCAibXV0ZTogJXMiLCByZWFzb24pOworICByZXN1bHQgPSBzcGVlY2hSZXF1ZXN0X211dGVTcGVlY2goc3BrLT5kcml2ZXIudGhyZWFkKTsKKworICBpZiAoc3BrLT5zZXRGaW5pc2hlZCkgc3BrLT5zZXRGaW5pc2hlZChzcGspOworICByZXR1cm4gcmVzdWx0OworfQorCitpbnQKK3NheVV0ZjhDaGFyYWN0ZXJzICgKKyAgU3BlZWNoU3ludGhlc2l6ZXIgKnNwaywKKyAgY29uc3QgY2hhciAqdGV4dCwgY29uc3QgdW5zaWduZWQgY2hhciAqYXR0cmlidXRlcywKKyAgc2l6ZV90IGxlbmd0aCwgc2l6ZV90IGNvdW50LAorICBTYXlPcHRpb25zIG9wdGlvbnMKKykgeworICBpZiAoY291bnQpIHsKKyAgICBsb2dNZXNzYWdlKExPR19DQVRFR09SWShTUEVFQ0hfRVZFTlRTKSwgInNheTogJXMiLCB0ZXh0KTsKKyAgICBpZiAoIXNwZWVjaFJlcXVlc3Rfc2F5VGV4dChzcGstPmRyaXZlci50aHJlYWQsIHRleHQsIGxlbmd0aCwgY291bnQsIGF0dHJpYnV0ZXMsIG9wdGlvbnMpKSByZXR1cm4gMDsKKyAgfQorCisgIHJldHVybiAxOworfQorCitpbnQKK3NheVdpZGVDaGFyYWN0ZXJzICgKKyAgU3BlZWNoU3ludGhlc2l6ZXIgKnNwaywKKyAgY29uc3Qgd2NoYXJfdCAqY2hhcmFjdGVycywgY29uc3QgdW5zaWduZWQgY2hhciAqYXR0cmlidXRlcywKKyAgc2l6ZV90IGNvdW50LCBTYXlPcHRpb25zIG9wdGlvbnMKKykgeworICBpbnQgb2sgPSAwOworICBzaXplX3QgbGVuZ3RoOworICB2b2lkICp0ZXh0ID0gZ2V0VXRmOEZyb21XY2hhcnMoY2hhcmFjdGVycywgY291bnQsICZsZW5ndGgpOworCisgIGlmICh0ZXh0KSB7CisgICAgaWYgKHNheVV0ZjhDaGFyYWN0ZXJzKHNwaywgdGV4dCwgYXR0cmlidXRlcywgbGVuZ3RoLCBjb3VudCwgb3B0aW9ucykpIG9rID0gMTsKKyAgICBmcmVlKHRleHQpOworICB9IGVsc2UgeworICAgIGxvZ01hbGxvY0Vycm9yKCk7CisgIH0KKworICByZXR1cm4gb2s7Cit9CisKK2ludAorc2F5U3RyaW5nICgKKyAgU3BlZWNoU3ludGhlc2l6ZXIgKnNwaywKKyAgY29uc3QgY2hhciAqc3RyaW5nLCBTYXlPcHRpb25zIG9wdGlvbnMKKykgeworICByZXR1cm4gc2F5VXRmOENoYXJhY3RlcnMoc3BrLCBzdHJpbmcsIE5VTEwsIHN0cmxlbihzdHJpbmcpLCBjb3VudFV0ZjhDaGFyYWN0ZXJzKHN0cmluZyksIG9wdGlvbnMpOworfQorCitzdGF0aWMgaW50CitzYXlTdHJpbmdTZXR0aW5nICgKKyAgU3BlZWNoU3ludGhlc2l6ZXIgKnNwaywKKyAgY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqc3RyaW5nCispIHsKKyAgY2hhciBzdGF0ZW1lbnRbMFg0MF07CisKKyAgc25wcmludGYoc3RhdGVtZW50LCBzaXplb2Yoc3RhdGVtZW50KSwgIiVzICVzIiwgbmFtZSwgc3RyaW5nKTsKKyAgcmV0dXJuIHNheVN0cmluZyhzcGssIHN0YXRlbWVudCwgU0FZX09QVF9NVVRFX0ZJUlNUKTsKK30KKworc3RhdGljIGludAorc2F5SW50ZWdlclNldHRpbmcgKAorICBTcGVlY2hTeW50aGVzaXplciAqc3BrLAorICBjb25zdCBjaGFyICpuYW1lLCBpbnQgaW50ZWdlcgorKSB7CisgIGNoYXIgc3RyaW5nWzBYMTBdOworCisgIHNucHJpbnRmKHN0cmluZywgc2l6ZW9mKHN0cmluZyksICIlZCIsIGludGVnZXIpOworICByZXR1cm4gc2F5U3RyaW5nU2V0dGluZyhzcGssIG5hbWUsIHN0cmluZyk7Cit9CisKK2ludAorY2FuRHJhaW5TcGVlY2ggKFNwZWVjaFN5bnRoZXNpemVyICpzcGspIHsKKyAgcmV0dXJuIHNway0+ZHJhaW4gIT0gTlVMTDsKK30KKworaW50CitkcmFpblNwZWVjaCAoU3BlZWNoU3ludGhlc2l6ZXIgKnNwaykgeworICBpZiAoIWNhbkRyYWluU3BlZWNoKHNwaykpIHJldHVybiAwOworICBsb2dNZXNzYWdlKExPR19DQVRFR09SWShTUEVFQ0hfRVZFTlRTKSwgImRyYWluIHNwZWVjaCIpOworICBzcGVlY2hSZXF1ZXN0X2RyYWluU3BlZWNoKHNway0+ZHJpdmVyLnRocmVhZCk7CisgIHJldHVybiAxOworfQorCitpbnQKK2NhblNldFNwZWVjaFZvbHVtZSAoU3BlZWNoU3ludGhlc2l6ZXIgKnNwaykgeworICByZXR1cm4gc3BrLT5zZXRWb2x1bWUgIT0gTlVMTDsKK30KKworaW50Cit0b05vcm1hbGl6ZWRTcGVlY2hWb2x1bWUgKHVuc2lnbmVkIGNoYXIgdm9sdW1lKSB7CisgIHJldHVybiByZXNjYWxlSW50ZWdlcih2b2x1bWUsIFNQS19WT0xVTUVfREVGQVVMVCwgMTAwKTsKK30KKworaW50CitzZXRTcGVlY2hWb2x1bWUgKFNwZWVjaFN5bnRoZXNpemVyICpzcGssIGludCBzZXR0aW5nLCBpbnQgc2F5KSB7CisgIGlmICghY2FuU2V0U3BlZWNoVm9sdW1lKHNwaykpIHJldHVybiAwOworICBsb2dNZXNzYWdlKExPR19DQVRFR09SWShTUEVFQ0hfRVZFTlRTKSwgInNldCB2b2x1bWU6ICVkIiwgc2V0dGluZyk7CisgIHNwZWVjaFJlcXVlc3Rfc2V0Vm9sdW1lKHNway0+ZHJpdmVyLnRocmVhZCwgc2V0dGluZyk7CisKKyAgaWYgKHNheSkgeworICAgIHNheUludGVnZXJTZXR0aW5nKAorICAgICAgc3BrLCBnZXR0ZXh0KCJ2b2x1bWUiKSwKKyAgICAgIHRvTm9ybWFsaXplZFNwZWVjaFZvbHVtZShzZXR0aW5nKQorICAgICk7CisgIH0KKworICByZXR1cm4gMTsKK30KKworaW50CitjYW5TZXRTcGVlY2hSYXRlIChTcGVlY2hTeW50aGVzaXplciAqc3BrKSB7CisgIHJldHVybiBzcGstPnNldFJhdGUgIT0gTlVMTDsKK30KKworaW50Cit0b05vcm1hbGl6ZWRTcGVlY2hSYXRlICh1bnNpZ25lZCBjaGFyIHJhdGUpIHsKKyAgcmV0dXJuIHJhdGUgLSBTUEtfUkFURV9ERUZBVUxUOworfQorCitpbnQKK3NldFNwZWVjaFJhdGUgKFNwZWVjaFN5bnRoZXNpemVyICpzcGssIGludCBzZXR0aW5nLCBpbnQgc2F5KSB7CisgIGlmICghY2FuU2V0U3BlZWNoUmF0ZShzcGspKSByZXR1cm4gMDsKKyAgbG9nTWVzc2FnZShMT0dfQ0FURUdPUlkoU1BFRUNIX0VWRU5UUyksICJzZXQgcmF0ZTogJWQiLCBzZXR0aW5nKTsKKyAgc3BlZWNoUmVxdWVzdF9zZXRSYXRlKHNway0+ZHJpdmVyLnRocmVhZCwgc2V0dGluZyk7CisKKyAgaWYgKHNheSkgeworICAgIHNheUludGVnZXJTZXR0aW5nKAorICAgICAgc3BrLCBnZXR0ZXh0KCJyYXRlIiksCisgICAgICB0b05vcm1hbGl6ZWRTcGVlY2hSYXRlKHNldHRpbmcpCisgICAgKTsKKyAgfQorCisgIHJldHVybiAxOworfQorCitpbnQKK2NhblNldFNwZWVjaFBpdGNoIChTcGVlY2hTeW50aGVzaXplciAqc3BrKSB7CisgIHJldHVybiBzcGstPnNldFBpdGNoICE9IE5VTEw7Cit9CisKK2ludAordG9Ob3JtYWxpemVkU3BlZWNoUGl0Y2ggKHVuc2lnbmVkIGNoYXIgcGl0Y2gpIHsKKyAgcmV0dXJuIHBpdGNoIC0gU1BLX1BJVENIX0RFRkFVTFQ7Cit9CisKK2ludAorc2V0U3BlZWNoUGl0Y2ggKFNwZWVjaFN5bnRoZXNpemVyICpzcGssIGludCBzZXR0aW5nLCBpbnQgc2F5KSB7CisgIGlmICghY2FuU2V0U3BlZWNoUGl0Y2goc3BrKSkgcmV0dXJuIDA7CisgIGxvZ01lc3NhZ2UoTE9HX0NBVEVHT1JZKFNQRUVDSF9FVkVOVFMpLCAic2V0IHBpdGNoOiAlZCIsIHNldHRpbmcpOworICBzcGVlY2hSZXF1ZXN0X3NldFBpdGNoKHNway0+ZHJpdmVyLnRocmVhZCwgc2V0dGluZyk7CisKKyAgaWYgKHNheSkgeworICAgIHNheUludGVnZXJTZXR0aW5nKAorICAgICAgc3BrLCBnZXR0ZXh0KCJwaXRjaCIpLAorICAgICAgdG9Ob3JtYWxpemVkU3BlZWNoUGl0Y2goc2V0dGluZykKKyAgICApOworICB9CisKKyAgcmV0dXJuIDE7Cit9CisKK2ludAorY2FuU2V0U3BlZWNoUHVuY3R1YXRpb24gKFNwZWVjaFN5bnRoZXNpemVyICpzcGspIHsKKyAgcmV0dXJuIHNway0+c2V0UHVuY3R1YXRpb24gIT0gTlVMTDsKK30KKworaW50CitzZXRTcGVlY2hQdW5jdHVhdGlvbiAoU3BlZWNoU3ludGhlc2l6ZXIgKnNwaywgU3BlZWNoUHVuY3R1YXRpb24gc2V0dGluZywgaW50IHNheSkgeworICBpZiAoIWNhblNldFNwZWVjaFB1bmN0dWF0aW9uKHNwaykpIHJldHVybiAwOworICBsb2dNZXNzYWdlKExPR19DQVRFR09SWShTUEVFQ0hfRVZFTlRTKSwgInNldCBwdW5jdHVhdGlvbjogJWQiLCBzZXR0aW5nKTsKKyAgc3BlZWNoUmVxdWVzdF9zZXRQdW5jdHVhdGlvbihzcGstPmRyaXZlci50aHJlYWQsIHNldHRpbmcpOworICByZXR1cm4gMTsKK30KZGlmZiAtLWdpdCBhL1Byb2dyYW1zL3Nwa19iYXNlLmMgYi9Qcm9ncmFtcy9zcGtfYmFzZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM3NDFmZDMKLS0tIC9kZXYvbnVsbAorKysgYi9Qcm9ncmFtcy9zcGtfYmFzZS5jCkBAIC0wLDAgKzEsOTkgQEAKKy8qCisgKiBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorICogICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorICoKKyAqIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorICoKKyAqIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyAqLworCisjaW5jbHVkZSAicHJvbG9ndWUuaCIKKworI2luY2x1ZGUgImxvZy5oIgorI2luY2x1ZGUgInNwa190eXBlcy5oIgorI2luY2x1ZGUgInNwa19iYXNlLmgiCisjaW5jbHVkZSAic3BrX3RocmVhZC5oIgorI2luY2x1ZGUgInBhcnNlLmgiCisKKyNpZmRlZiBFTkFCTEVfU1BFRUNIX1NVUFBPUlQKK2ludAordGVsbFNwZWVjaEZpbmlzaGVkIChTcGVlY2hTeW50aGVzaXplciAqc3BrKSB7CisgIHJldHVybiBzcGVlY2hNZXNzYWdlX3NwZWVjaEZpbmlzaGVkKHNway0+ZHJpdmVyLnRocmVhZCk7Cit9CisKK2ludAordGVsbFNwZWVjaExvY2F0aW9uIChTcGVlY2hTeW50aGVzaXplciAqc3BrLCBpbnQgaW5kZXgpIHsKKyAgaWYgKCFzcGstPnRyYWNrLmlzQWN0aXZlKSByZXR1cm4gMTsKKyAgcmV0dXJuIHNwZWVjaE1lc3NhZ2Vfc3BlZWNoTG9jYXRpb24oc3BrLT5kcml2ZXIudGhyZWFkLCBpbmRleCk7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQKK2dldEludGVnZXJTZXR0aW5nICh1bnNpZ25lZCBjaGFyIHNldHRpbmcsIHVuc2lnbmVkIGNoYXIgaW50ZXJuYWwsIHVuc2lnbmVkIGludCBleHRlcm5hbCkgeworICByZXR1cm4gcmVzY2FsZUludGVnZXIoc2V0dGluZywgaW50ZXJuYWwsIGV4dGVybmFsKTsKK30KKwordW5zaWduZWQgaW50CitnZXRJbnRlZ2VyU3BlZWNoVm9sdW1lICh1bnNpZ25lZCBjaGFyIHNldHRpbmcsIHVuc2lnbmVkIGludCBub3JtYWwpIHsKKyAgcmV0dXJuIGdldEludGVnZXJTZXR0aW5nKHNldHRpbmcsIFNQS19WT0xVTUVfREVGQVVMVCwgbm9ybWFsKTsKK30KKwordW5zaWduZWQgaW50CitnZXRJbnRlZ2VyU3BlZWNoUmF0ZSAodW5zaWduZWQgY2hhciBzZXR0aW5nLCB1bnNpZ25lZCBpbnQgbm9ybWFsKSB7CisgIHJldHVybiBnZXRJbnRlZ2VyU2V0dGluZyhzZXR0aW5nLCBTUEtfUkFURV9ERUZBVUxULCBub3JtYWwpOworfQorCit1bnNpZ25lZCBpbnQKK2dldEludGVnZXJTcGVlY2hQaXRjaCAodW5zaWduZWQgY2hhciBzZXR0aW5nLCB1bnNpZ25lZCBpbnQgbm9ybWFsKSB7CisgIHJldHVybiBnZXRJbnRlZ2VyU2V0dGluZyhzZXR0aW5nLCBTUEtfUElUQ0hfREVGQVVMVCwgbm9ybWFsKTsKK30KKworI2lmbmRlZiBOT19GTE9BVAorZmxvYXQKK2dldEZsb2F0U3BlZWNoVm9sdW1lICh1bnNpZ25lZCBjaGFyIHNldHRpbmcpIHsKKyAgcmV0dXJuIChmbG9hdClzZXR0aW5nIC8gKGZsb2F0KVNQS19WT0xVTUVfREVGQVVMVDsKK30KKworZmxvYXQKK2dldEZsb2F0U3BlZWNoUmF0ZSAodW5zaWduZWQgY2hhciBzZXR0aW5nKSB7CisgIHN0YXRpYyBjb25zdCBmbG9hdCBzcGtSYXRlVGFibGVbXSA9IHsKKyAgICAwLjMzMzMsCisgICAgMC4zNzIwLAorICAgIDAuNDE1MiwKKyAgICAwLjQ2MzUsCisgICAgMC41MTczLAorICAgIDAuNTc3NCwKKyAgICAwLjY0NDQsCisgICAgMC43MTkyLAorICAgIDAuODAyNywKKyAgICAwLjg5NjAsCisgICAgMS4wMDAwLAorICAgIDEuMTE2MSwKKyAgICAxLjI0NTcsCisgICAgMS4zOTA0LAorICAgIDEuNTUxOCwKKyAgICAxLjczMjAsCisgICAgMS45MzMyLAorICAgIDIuMTU3NywKKyAgICAyLjQwODIsCisgICAgMi42ODc5LAorICAgIDMuMDAwMAorICB9OworCisgIHJldHVybiBzcGtSYXRlVGFibGVbc2V0dGluZ107Cit9CisKK2Zsb2F0CitnZXRGbG9hdFNwZWVjaFBpdGNoICh1bnNpZ25lZCBjaGFyIHNldHRpbmcpIHsKKyAgcmV0dXJuIChmbG9hdClzZXR0aW5nIC8gKGZsb2F0KVNQS19QSVRDSF9ERUZBVUxUOworfQorI2VuZGlmIC8qIE5PX0ZMT0FUICovCisjZW5kaWYgLyogRU5BQkxFX1NQRUVDSF9TVVBQT1JUICovCmRpZmYgLS1naXQgYS9Qcm9ncmFtcy9zcGtfZHJpdmVyLmMgYi9Qcm9ncmFtcy9zcGtfZHJpdmVyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTVkNGUzMgotLS0gL2Rldi9udWxsCisrKyBiL1Byb2dyYW1zL3Nwa19kcml2ZXIuYwpAQCAtMCwwICsxLDgyIEBACisvKgorICogQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyAqICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyAqCisgKiBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorICoKKyAqIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyAqCisgKiBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisgKi8KKworI2luY2x1ZGUgInByb2xvZ3VlLmgiCisKKyNpbmNsdWRlICJkcml2ZXJzLmgiCisjaW5jbHVkZSAic3BrLmgiCisKKyNkZWZpbmUgU1BLU1lNQk9MIG5vU3BlZWNoCisjZGVmaW5lIERSSVZFUl9OQU1FIE5vU3BlZWNoCisjZGVmaW5lIERSSVZFUl9DT0RFIG5vCisjZGVmaW5lIERSSVZFUl9DT01NRU5UICJubyBzcGVlY2ggc3VwcG9ydCIKKyNkZWZpbmUgRFJJVkVSX1ZFUlNJT04gIiIKKyNkZWZpbmUgRFJJVkVSX0RFVkVMT1BFUlMgIiIKKyNpbmNsdWRlICJzcGtfZHJpdmVyLmgiCisjaW5jbHVkZSAic3BrLmF1dG8uaCIKKworc3RhdGljIGludAorc3BrX2NvbnN0cnVjdCAoU3BlZWNoU3ludGhlc2l6ZXIgKnNwaywgY2hhciAqKnBhcmFtZXRlcnMpIHsKKyAgcmV0dXJuIDE7Cit9CisKK3N0YXRpYyB2b2lkCitzcGtfZGVzdHJ1Y3QgKFNwZWVjaFN5bnRoZXNpemVyICpzcGspIHsKK30KKworc3RhdGljIHZvaWQKK3Nwa19zYXkgKFNwZWVjaFN5bnRoZXNpemVyICpzcGssIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnRleHQsIHNpemVfdCBsZW5ndGgsIHNpemVfdCBjb3VudCwgY29uc3QgdW5zaWduZWQgY2hhciAqYXR0cmlidXRlcykgeworfQorCitzdGF0aWMgdm9pZAorc3BrX211dGUgKFNwZWVjaFN5bnRoZXNpemVyICpzcGspIHsKK30KKworY29uc3QgU3BlZWNoRHJpdmVyICpzcGVlY2ggPSAmbm9TcGVlY2g7CisKK2ludAoraGF2ZVNwZWVjaERyaXZlciAoY29uc3QgY2hhciAqY29kZSkgeworICByZXR1cm4gaGF2ZURyaXZlcihjb2RlLCBTUEVFQ0hfRFJJVkVSX0NPREVTLCBkcml2ZXJUYWJsZSk7Cit9CisKK2NvbnN0IGNoYXIgKgorZ2V0RGVmYXVsdFNwZWVjaERyaXZlciAodm9pZCkgeworICByZXR1cm4gZ2V0RGVmYXVsdERyaXZlcihkcml2ZXJUYWJsZSk7Cit9CisKK2NvbnN0IFNwZWVjaERyaXZlciAqCitsb2FkU3BlZWNoRHJpdmVyIChjb25zdCBjaGFyICpjb2RlLCB2b2lkICoqZHJpdmVyT2JqZWN0LCBjb25zdCBjaGFyICpkcml2ZXJEaXJlY3RvcnkpIHsKKyAgcmV0dXJuIGxvYWREcml2ZXIoY29kZSwgZHJpdmVyT2JqZWN0LAorICAgICAgICAgICAgICAgICAgICBkcml2ZXJEaXJlY3RvcnksIGRyaXZlclRhYmxlLAorICAgICAgICAgICAgICAgICAgICAic3BlZWNoIiwgJ3MnLCAic3BrIiwKKyAgICAgICAgICAgICAgICAgICAgJm5vU3BlZWNoLCAmbm9TcGVlY2guZGVmaW5pdGlvbik7Cit9CisKK3ZvaWQKK2lkZW50aWZ5U3BlZWNoRHJpdmVyIChjb25zdCBTcGVlY2hEcml2ZXIgKmRyaXZlciwgaW50IGZ1bGwpIHsKKyAgaWRlbnRpZnlEcml2ZXIoIlNwZWVjaCIsICZkcml2ZXItPmRlZmluaXRpb24sIGZ1bGwpOworfQorCit2b2lkCitpZGVudGlmeVNwZWVjaERyaXZlcnMgKGludCBmdWxsKSB7CisgIGNvbnN0IERyaXZlckVudHJ5ICplbnRyeSA9IGRyaXZlclRhYmxlOworICB3aGlsZSAoZW50cnktPmFkZHJlc3MpIHsKKyAgICBjb25zdCBTcGVlY2hEcml2ZXIgKmRyaXZlciA9IGVudHJ5KystPmFkZHJlc3M7CisgICAgaWRlbnRpZnlTcGVlY2hEcml2ZXIoZHJpdmVyLCBmdWxsKTsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvUHJvZ3JhbXMvc3BrX2lucHV0LmMgYi9Qcm9ncmFtcy9zcGtfaW5wdXQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MTdkZmNmCi0tLSAvZGV2L251bGwKKysrIGIvUHJvZ3JhbXMvc3BrX2lucHV0LmMKQEAgLTAsMCArMSw5MCBAQAorLyoKKyAqIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisgKiAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisgKgorICogQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKKyNpbmNsdWRlICJwcm9sb2d1ZS5oIgorCisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKyNpbmNsdWRlICJsb2cuaCIKKyNpbmNsdWRlICJzcGtfaW5wdXQuaCIKKyNpbmNsdWRlICJzcGsuaCIKKyNpbmNsdWRlICJwaXBlLmgiCisjaW5jbHVkZSAiYXNjaWkuaCIKKyNpbmNsdWRlICJjb3JlLmgiCisKKyNpZmRlZiBFTkFCTEVfU1BFRUNIX1NVUFBPUlQKK3N0cnVjdCBTcGVlY2hJbnB1dE9iamVjdFN0cnVjdCB7CisgIE5hbWVkUGlwZU9iamVjdCAqcGlwZTsKK307CisKK3N0YXRpYworTkFNRURfUElQRV9JTlBVVF9DQUxMQkFDSyhoYW5kbGVTcGVlY2hJbnB1dCkgeworICBjb25zdCB1bnNpZ25lZCBjaGFyICpidWZmZXIgPSBwYXJhbWV0ZXJzLT5idWZmZXI7CisgIHNpemVfdCBjb3VudCA9IHBhcmFtZXRlcnMtPmxlbmd0aDsKKyAgY29uc3QgdW5zaWduZWQgY2hhciAqZW5kID0gYnVmZmVyICsgY291bnQ7CisgIFNheU9wdGlvbnMgb3B0aW9ucyA9IDA7CisKKyAgd2hpbGUgKGJ1ZmZlciA8IGVuZCkgeworICAgICBpZiAoKmJ1ZmZlciAhPSBBU0NJSV9FU0MpIGJyZWFrOworICAgICBpZiAoKytidWZmZXIgPT0gZW5kKSBicmVhazsKKworICAgICBzd2l0Y2ggKCpidWZmZXIrKykgeworICAgICAgIGNhc2UgJyEnOgorICAgICAgICAgb3B0aW9ucyB8PSBTQVlfT1BUX01VVEVfRklSU1Q7CisgICAgICAgICBicmVhazsKKyAgICAgfQorICB9CisKKyAgaWYgKGJ1ZmZlciA8IGVuZCkgeworICAgIHNpemVfdCBsZW5ndGggPSBlbmQgLSBidWZmZXI7CisgICAgY2hhciBzdHJpbmdbbGVuZ3RoICsgMV07CisKKyAgICBtZW1jcHkoc3RyaW5nLCBidWZmZXIsIGxlbmd0aCk7CisgICAgc3RyaW5nW2xlbmd0aF0gPSAwOworCisgICAgc2F5U3RyaW5nKCZzcGssIHN0cmluZywgb3B0aW9ucyk7CisgIH0KKworICByZXR1cm4gY291bnQ7Cit9CisKK1NwZWVjaElucHV0T2JqZWN0ICoKK25ld1NwZWVjaElucHV0T2JqZWN0IChjb25zdCBjaGFyICpuYW1lKSB7CisgIFNwZWVjaElucHV0T2JqZWN0ICpvYmo7CisKKyAgaWYgKChvYmogPSBtYWxsb2Moc2l6ZW9mKCpvYmopKSkpIHsKKyAgICBtZW1zZXQob2JqLCAwLCBzaXplb2YoKm9iaikpOworCisgICAgaWYgKChvYmotPnBpcGUgPSBuZXdOYW1lZFBpcGVPYmplY3QobmFtZSwgaGFuZGxlU3BlZWNoSW5wdXQsIG9iaikpKSB7CisgICAgICByZXR1cm4gb2JqOworICAgIH0KKworICAgIGZyZWUob2JqKTsKKyAgfSBlbHNlIHsKKyAgICBsb2dNYWxsb2NFcnJvcigpOworICB9CisKKyAgcmV0dXJuIE5VTEw7Cit9CisKK3ZvaWQKK2Rlc3Ryb3lTcGVlY2hJbnB1dE9iamVjdCAoU3BlZWNoSW5wdXRPYmplY3QgKm9iaikgeworICBpZiAob2JqLT5waXBlKSBkZXN0cm95TmFtZWRQaXBlT2JqZWN0KG9iai0+cGlwZSk7CisgIGZyZWUob2JqKTsKK30KKyNlbmRpZiAvKiBFTkFCTEVfU1BFRUNIX1NVUFBPUlQgKi8KZGlmZiAtLWdpdCBhL1Byb2dyYW1zL3Nwa19pbnB1dC5oIGIvUHJvZ3JhbXMvc3BrX2lucHV0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjYyNmFlMQotLS0gL2Rldi9udWxsCisrKyBiL1Byb2dyYW1zL3Nwa19pbnB1dC5oCkBAIC0wLDAgKzEsMzcgQEAKKy8qCisgKiBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorICogICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorICoKKyAqIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorICoKKyAqIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyAqLworCisjaWZuZGVmIEJSTFRUWV9JTkNMVURFRF9TUEtfSU5QVVQKKyNkZWZpbmUgQlJMVFRZX0lOQ0xVREVEX1NQS19JTlBVVAorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmIC8qIF9fY3BsdXNwbHVzICovCisKKyNpZmRlZiBFTkFCTEVfU1BFRUNIX1NVUFBPUlQKK3R5cGVkZWYgc3RydWN0IFNwZWVjaElucHV0T2JqZWN0U3RydWN0IFNwZWVjaElucHV0T2JqZWN0OworCitleHRlcm4gU3BlZWNoSW5wdXRPYmplY3QgKm5ld1NwZWVjaElucHV0T2JqZWN0IChjb25zdCBjaGFyICpuYW1lKTsKK2V4dGVybiB2b2lkIGRlc3Ryb3lTcGVlY2hJbnB1dE9iamVjdCAoU3BlZWNoSW5wdXRPYmplY3QgKm9iaik7CisjZW5kaWYgLyogRU5BQkxFX1NQRUVDSF9TVVBQT1JUICovCisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmIC8qIF9fY3BsdXNwbHVzICovCisKKyNlbmRpZiAvKiBCUkxUVFlfSU5DTFVERURfU1BLX0lOUFVUICovCmRpZmYgLS1naXQgYS9Qcm9ncmFtcy9zcGtfdGhyZWFkLmMgYi9Qcm9ncmFtcy9zcGtfdGhyZWFkLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDY1NGM5ZAotLS0gL2Rldi9udWxsCisrKyBiL1Byb2dyYW1zL3Nwa190aHJlYWQuYwpAQCAtMCwwICsxLDk2MyBAQAorLyoKKyAqIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisgKiAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisgKgorICogQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKKyNpbmNsdWRlICJwcm9sb2d1ZS5oIgorCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworI2luY2x1ZGUgInBhcmFtZXRlcnMuaCIKKyNpbmNsdWRlICJsb2cuaCIKKyNpbmNsdWRlICJzdHJmbXQuaCIKKyNpbmNsdWRlICJwcmVmcy5oIgorI2luY2x1ZGUgInNwa190aHJlYWQuaCIKKyNpbmNsdWRlICJzcGsuaCIKKyNpbmNsdWRlICJhc3luY193YWl0LmgiCisjaW5jbHVkZSAiYXN5bmNfZXZlbnQuaCIKKyNpbmNsdWRlICJ0aHJlYWQuaCIKKyNpbmNsdWRlICJxdWV1ZS5oIgorCisjaWZkZWYgRU5BQkxFX1NQRUVDSF9TVVBQT1JUCit0eXBlZGVmIGVudW0geworICBUSERfQ09OU1RSVUNUSU5HLAorICBUSERfU1RBUlRJTkcsCisgIFRIRF9SRUFEWSwKKyAgVEhEX1NUT1BQSU5HLAorICBUSERfRklOSVNIRUQKK30gVGhyZWFkU3RhdGU7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgY29uc3QgY2hhciAqbmFtZTsKK30gVGhyZWFkU3RhdGVFbnRyeTsKKworc3RhdGljIGNvbnN0IFRocmVhZFN0YXRlRW50cnkgdGhyZWFkU3RhdGVUYWJsZVtdID0geworICBbVEhEX0NPTlNUUlVDVElOR10gPSB7CisgICAgLm5hbWUgPSAiY29uc3RydWN0aW5nIgorICB9LAorCisgIFtUSERfU1RBUlRJTkddID0geworICAgIC5uYW1lID0gInN0YXJ0aW5nIgorICB9LAorCisgIFtUSERfUkVBRFldID0geworICAgIC5uYW1lID0gInJlYWR5IgorICB9LAorCisgIFtUSERfU1RPUFBJTkddID0geworICAgIC5uYW1lID0gInN0b3BwaW5nIgorICB9LAorCisgIFtUSERfRklOSVNIRURdID0geworICAgIC5uYW1lID0gImZpbmlzaGVkIgorICB9LAorfTsKKworc3RhdGljIGlubGluZSBjb25zdCBUaHJlYWRTdGF0ZUVudHJ5ICoKK2dldFRocmVhZFN0YXRlRW50cnkgKFRocmVhZFN0YXRlIHN0YXRlKSB7CisgIGlmIChzdGF0ZSA+PSBBUlJBWV9DT1VOVCh0aHJlYWRTdGF0ZVRhYmxlKSkgcmV0dXJuIE5VTEw7CisgIHJldHVybiAmdGhyZWFkU3RhdGVUYWJsZVtzdGF0ZV07Cit9CisKK3R5cGVkZWYgZW51bSB7CisgIFJTUF9QRU5ESU5HLAorICBSU1BfSU5URUdFUgorfSBTcGVlY2hSZXNwb25zZVR5cGU7CisKK3N0cnVjdCBTcGVlY2hEcml2ZXJUaHJlYWRTdHJ1Y3QgeworICBUaHJlYWRTdGF0ZSB0aHJlYWRTdGF0ZTsKKyAgUXVldWUgKnJlcXVlc3RRdWV1ZTsKKworICBTcGVlY2hTeW50aGVzaXplciAqc3BlZWNoU3ludGhlc2l6ZXI7CisgIGNoYXIgKipkcml2ZXJQYXJhbWV0ZXJzOworCisjaWZkZWYgR09UX1BUSFJFQURTCisgIHB0aHJlYWRfdCB0aHJlYWRJZGVudGlmaWVyOworICBBc3luY0V2ZW50ICpyZXF1ZXN0RXZlbnQ7CisgIEFzeW5jRXZlbnQgKm1lc3NhZ2VFdmVudDsKKyAgdW5zaWduZWQgaXNCZWluZ0Rlc3Ryb3llZDoxOworI2VuZGlmIC8qIEdPVF9QVEhSRUFEUyAqLworCisgIHN0cnVjdCB7CisgICAgU3BlZWNoUmVzcG9uc2VUeXBlIHR5cGU7CisKKyAgICB1bmlvbiB7CisgICAgICBpbnQgSU5URUdFUjsKKyAgICB9IHZhbHVlOworICB9IHJlc3BvbnNlOworfTsKKwordHlwZWRlZiBlbnVtIHsKKyAgUkVRX1NBWV9URVhULAorICBSRVFfTVVURV9TUEVFQ0gsCisgIFJFUV9EUkFJTl9TUEVFQ0gsCisKKyAgUkVRX1NFVF9WT0xVTUUsCisgIFJFUV9TRVRfUkFURSwKKyAgUkVRX1NFVF9QSVRDSCwKKyAgUkVRX1NFVF9QVU5DVFVBVElPTgorfSBTcGVlY2hSZXF1ZXN0VHlwZTsKKworc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IHNwZWVjaFJlcXVlc3ROYW1lc1tdID0geworICBbUkVRX1NBWV9URVhUXSA9ICJzYXkgdGV4dCIsCisgIFtSRVFfTVVURV9TUEVFQ0hdID0gIm11dGUgc3BlZWNoIiwKKyAgW1JFUV9EUkFJTl9TUEVFQ0hdID0gImRyYWluIHNwZWVjaCIsCisKKyAgW1JFUV9TRVRfVk9MVU1FXSA9ICJzZXQgdm9sdW1lIiwKKyAgW1JFUV9TRVRfUkFURV0gPSAic2V0IHJhdGUiLAorICBbUkVRX1NFVF9QSVRDSF0gPSAic2V0IHBpdGNoIiwKKyAgW1JFUV9TRVRfUFVOQ1RVQVRJT05dID0gInNldCBwdW5jdHVhdGlvbiIKK307CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgU3BlZWNoUmVxdWVzdFR5cGUgdHlwZTsKKworICB1bmlvbiB7CisgICAgc3RydWN0IHsKKyAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnRleHQ7CisgICAgICBzaXplX3QgbGVuZ3RoOworICAgICAgc2l6ZV90IGNvdW50OworICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqYXR0cmlidXRlczsKKyAgICAgIFNheU9wdGlvbnMgb3B0aW9uczsKKyAgICB9IHNheVRleHQ7CisKKyAgICBzdHJ1Y3QgeworICAgICAgdW5zaWduZWQgY2hhciBzZXR0aW5nOworICAgIH0gc2V0Vm9sdW1lOworCisgICAgc3RydWN0IHsKKyAgICAgIHVuc2lnbmVkIGNoYXIgc2V0dGluZzsKKyAgICB9IHNldFJhdGU7CisKKyAgICBzdHJ1Y3QgeworICAgICAgdW5zaWduZWQgY2hhciBzZXR0aW5nOworICAgIH0gc2V0UGl0Y2g7CisKKyAgICBzdHJ1Y3QgeworICAgICAgU3BlZWNoUHVuY3R1YXRpb24gc2V0dGluZzsKKyAgICB9IHNldFB1bmN0dWF0aW9uOworICB9IGFyZ3VtZW50czsKKworICB1bnNpZ25lZCBjaGFyIGRhdGFbMF07Cit9IFNwZWVjaFJlcXVlc3Q7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgY29uc3Qgdm9pZCAqYWRkcmVzczsKKyAgc2l6ZV90IHNpemU7CisgIHVuc2lnbmVkIGVuZDoxOworfSBTcGVlY2hEYXR1bTsKKworI2RlZmluZSBCRUdJTl9TUEVFQ0hfREFUQSBTcGVlY2hEYXR1bSBkYXRhW10gPSB7CisjZGVmaW5lIEVORF9TUEVFQ0hfREFUQSB7LmVuZD0xfSB9OworCit0eXBlZGVmIGVudW0geworICBNU0dfUkVRVUVTVF9GSU5JU0hFRCwKKyAgTVNHX1NQRUVDSF9GSU5JU0hFRCwKKyAgTVNHX1NQRUVDSF9MT0NBVElPTgorfSBTcGVlY2hNZXNzYWdlVHlwZTsKKworc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IHNwZWVjaE1lc3NhZ2VOYW1lc1tdID0geworICBbTVNHX1JFUVVFU1RfRklOSVNIRURdID0gInJlcXVlc3QgZmluaXNoZWQiLAorICBbTVNHX1NQRUVDSF9GSU5JU0hFRF0gPSAic3BlZWNoIGZpbmlzaGVkIiwKKyAgW01TR19TUEVFQ0hfTE9DQVRJT05dID0gInNwZWVjaCBsb2NhdGlvbiIKK307CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgU3BlZWNoTWVzc2FnZVR5cGUgdHlwZTsKKworICB1bmlvbiB7CisgICAgc3RydWN0IHsKKyAgICAgIGludCByZXN1bHQ7CisgICAgfSByZXF1ZXN0RmluaXNoZWQ7CisKKyAgICBzdHJ1Y3QgeworICAgICAgaW50IGxvY2F0aW9uOworICAgIH0gc3BlZWNoTG9jYXRpb247CisgIH0gYXJndW1lbnRzOworCisgIHVuc2lnbmVkIGNoYXIgZGF0YVswXTsKK30gU3BlZWNoTWVzc2FnZTsKKworc3RhdGljIGNvbnN0IGNoYXIgKgorZ2V0QWN0aW9uTmFtZSAodW5zaWduZWQgaW50IGFjdGlvbiwgY29uc3QgY2hhciAqY29uc3QgKm5hbWVzLCBzaXplX3QgY291bnQpIHsKKyAgcmV0dXJuIChhY3Rpb24gPCBjb3VudCk/IG5hbWVzW2FjdGlvbl06IE5VTEw7Cit9CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgY29uc3QgY2hhciAqYWN0aW9uOworICBjb25zdCBjaGFyICp0eXBlOworICBjb25zdCBjaGFyICpuYW1lOworICB1bnNpZ25lZCBpbnQgdmFsdWU7Cit9IExvZ1NwZWVjaEFjdGlvbkRhdGE7CisKK3N0YXRpYworU1RSX0JFR0lOX0ZPUk1BVFRFUihmb3JtYXRMb2dTcGVlY2hBY3Rpb25EYXRhLCBjb25zdCB2b2lkICpkYXRhKQorICBjb25zdCBMb2dTcGVlY2hBY3Rpb25EYXRhICpsc2EgPSBkYXRhOworCisgIFNUUl9QUklOVEYoIiVzIHNwZWVjaCAlczogIiwgbHNhLT5hY3Rpb24sIGxzYS0+dHlwZSk7CisKKyAgaWYgKGxzYS0+bmFtZSkgeworICAgIFNUUl9QUklOVEYoIiVzIiwgbHNhLT5uYW1lKTsKKyAgfSBlbHNlIHsKKyAgICBTVFJfUFJJTlRGKCIldSIsIGxzYS0+dmFsdWUpOworICB9CitTVFJfRU5EX0ZPUk1BVFRFUgorCitzdGF0aWMgdm9pZAorbG9nU3BlZWNoQWN0aW9uIChjb25zdCBMb2dTcGVlY2hBY3Rpb25EYXRhICpsc2EpIHsKKyAgbG9nRGF0YShMT0dfQ0FURUdPUlkoU1BFRUNIX0VWRU5UUyksIGZvcm1hdExvZ1NwZWVjaEFjdGlvbkRhdGEsIGxzYSk7Cit9CisKK3N0YXRpYyB2b2lkCitsb2dTcGVlY2hSZXF1ZXN0IChTcGVlY2hSZXF1ZXN0ICpyZXEsIGNvbnN0IGNoYXIgKmFjdGlvbikgeworICBjb25zdCBMb2dTcGVlY2hBY3Rpb25EYXRhIGxzYSA9IHsKKyAgICAuYWN0aW9uID0gYWN0aW9uLAorICAgIC50eXBlID0gInJlcXVlc3QiLAorICAgIC5uYW1lID0gcmVxPyBnZXRBY3Rpb25OYW1lKHJlcS0+dHlwZSwgc3BlZWNoUmVxdWVzdE5hbWVzLCBBUlJBWV9DT1VOVChzcGVlY2hSZXF1ZXN0TmFtZXMpKTogInN0b3AiLAorICAgIC52YWx1ZSA9IHJlcT8gcmVxLT50eXBlOiAwCisgIH07CisKKyAgbG9nU3BlZWNoQWN0aW9uKCZsc2EpOworfQorCitzdGF0aWMgdm9pZAorbG9nU3BlZWNoTWVzc2FnZSAoU3BlZWNoTWVzc2FnZSAqbXNnLCBjb25zdCBjaGFyICphY3Rpb24pIHsKKyAgY29uc3QgTG9nU3BlZWNoQWN0aW9uRGF0YSBsc2EgPSB7CisgICAgLmFjdGlvbiA9IGFjdGlvbiwKKyAgICAudHlwZSA9ICJtZXNzYWdlIiwKKyAgICAubmFtZSA9IGdldEFjdGlvbk5hbWUobXNnLT50eXBlLCBzcGVlY2hNZXNzYWdlTmFtZXMsIEFSUkFZX0NPVU5UKHNwZWVjaE1lc3NhZ2VOYW1lcykpLAorICAgIC52YWx1ZSA9IG1zZy0+dHlwZQorICB9OworCisgIGxvZ1NwZWVjaEFjdGlvbigmbHNhKTsKK30KKworc3RhdGljIGludAordGVzdFRocmVhZFZhbGlkaXR5IChTcGVlY2hEcml2ZXJUaHJlYWQgKnNkdCkgeworICBpZiAoIXNkdCkgcmV0dXJuIDA7CisKKyNpZmRlZiBHT1RfUFRIUkVBRFMKKyAgaWYgKHNkdC0+aXNCZWluZ0Rlc3Ryb3llZCkgcmV0dXJuIDA7CisjZW5kaWYgLyogR09UX1BUSFJFQURTICovCisKKyAgU3BlZWNoU3ludGhlc2l6ZXIgKnNwayA9IHNkdC0+c3BlZWNoU3ludGhlc2l6ZXI7CisgIGlmICghc3BrKSByZXR1cm4gMDsKKyAgaWYgKHNkdCAhPSBzcGstPmRyaXZlci50aHJlYWQpIHJldHVybiAwOworCisgIGlmIChzZHQtPnRocmVhZFN0YXRlICE9IFRIRF9SRUFEWSkgcmV0dXJuIDA7CisgIHJldHVybiAxOworfQorCitzdGF0aWMgdm9pZAorc2V0VGhyZWFkU3RhdGUgKFNwZWVjaERyaXZlclRocmVhZCAqc2R0LCBUaHJlYWRTdGF0ZSBzdGF0ZSkgeworICBjb25zdCBUaHJlYWRTdGF0ZUVudHJ5ICplbnRyeSA9IGdldFRocmVhZFN0YXRlRW50cnkoc3RhdGUpOworICBjb25zdCBjaGFyICpuYW1lID0gZW50cnk/IGVudHJ5LT5uYW1lOiBOVUxMOworCisgIGlmICghbmFtZSkgbmFtZSA9ICI/IjsKKyAgbG9nTWVzc2FnZShMT0dfQ0FURUdPUlkoU1BFRUNIX0VWRU5UUyksICJkcml2ZXIgdGhyZWFkICVzIiwgbmFtZSk7CisgIHNkdC0+dGhyZWFkU3RhdGUgPSBzdGF0ZTsKK30KKworc3RhdGljIHNpemVfdAorZ2V0U3BlZWNoRGF0YVNpemUgKGNvbnN0IFNwZWVjaERhdHVtICpkYXRhKSB7CisgIHNpemVfdCBzaXplID0gMDsKKworICBpZiAoZGF0YSkgeworICAgIGNvbnN0IFNwZWVjaERhdHVtICpkYXR1bSA9IGRhdGE7CisKKyAgICB3aGlsZSAoIWRhdHVtLT5lbmQpIHsKKyAgICAgIGlmIChkYXR1bS0+YWRkcmVzcykgc2l6ZSArPSBkYXR1bS0+c2l6ZTsKKyAgICAgIGRhdHVtICs9IDE7CisgICAgfQorICB9CisKKyAgcmV0dXJuIHNpemU7Cit9CisKK3N0YXRpYyB2b2lkCittb3ZlU3BlZWNoRGF0YSAodW5zaWduZWQgY2hhciAqdGFyZ2V0LCBTcGVlY2hEYXR1bSAqZGF0YSkgeworICBpZiAoZGF0YSkgeworICAgIFNwZWVjaERhdHVtICpkYXR1bSA9IGRhdGE7CisKKyAgICB3aGlsZSAoIWRhdHVtLT5lbmQpIHsKKyAgICAgIGlmIChkYXR1bS0+YWRkcmVzcykgeworICAgICAgICBtZW1jcHkodGFyZ2V0LCBkYXR1bS0+YWRkcmVzcywgZGF0dW0tPnNpemUpOworICAgICAgICBkYXR1bS0+YWRkcmVzcyA9IHRhcmdldDsKKyAgICAgICAgdGFyZ2V0ICs9IGRhdHVtLT5zaXplOworICAgICAgfQorCisgICAgICBkYXR1bSArPSAxOworICAgIH0KKyAgfQorfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK3NldFJlc3BvbnNlUGVuZGluZyAoU3BlZWNoRHJpdmVyVGhyZWFkICpzZHQpIHsKKyAgc2R0LT5yZXNwb25zZS50eXBlID0gUlNQX1BFTkRJTkc7Cit9CisKK3N0YXRpYyB2b2lkCitzZXRJbnRlZ2VyUmVzcG9uc2UgKFNwZWVjaERyaXZlclRocmVhZCAqc2R0LCBpbnQgdmFsdWUpIHsKKyAgc2R0LT5yZXNwb25zZS50eXBlID0gUlNQX0lOVEVHRVI7CisgIHNkdC0+cmVzcG9uc2UudmFsdWUuSU5URUdFUiA9IHZhbHVlOworfQorCitBU1lOQ19DT05ESVRJT05fVEVTVEVSKHRlc3RTcGVlY2hSZXNwb25zZVJlY2VpdmVkKSB7CisgIFNwZWVjaERyaXZlclRocmVhZCAqc2R0ID0gZGF0YTsKKworICByZXR1cm4gc2R0LT5yZXNwb25zZS50eXBlICE9IFJTUF9QRU5ESU5HOworfQorCitzdGF0aWMgaW50Cithd2FpdFNwZWVjaFJlc3BvbnNlIChTcGVlY2hEcml2ZXJUaHJlYWQgKnNkdCwgaW50IHRpbWVvdXQpIHsKKyAgcmV0dXJuIGFzeW5jQXdhaXRDb25kaXRpb24odGltZW91dCwgdGVzdFNwZWVjaFJlc3BvbnNlUmVjZWl2ZWQsIHNkdCk7Cit9CisKK3N0YXRpYyB2b2lkIHNlbmRTcGVlY2hSZXF1ZXN0IChTcGVlY2hEcml2ZXJUaHJlYWQgKnNkdCk7CisKK3N0YXRpYyB2b2lkCitoYW5kbGVTcGVlY2hNZXNzYWdlIChTcGVlY2hEcml2ZXJUaHJlYWQgKnNkdCwgU3BlZWNoTWVzc2FnZSAqbXNnKSB7CisgIGxvZ1NwZWVjaE1lc3NhZ2UobXNnLCAiaGFuZGxpbmciKTsKKworICBpZiAobXNnKSB7CisgICAgc3dpdGNoIChtc2ctPnR5cGUpIHsKKyAgICAgIGNhc2UgTVNHX1JFUVVFU1RfRklOSVNIRUQ6CisgICAgICAgIHNldEludGVnZXJSZXNwb25zZShzZHQsIG1zZy0+YXJndW1lbnRzLnJlcXVlc3RGaW5pc2hlZC5yZXN1bHQpOworICAgICAgICBzZW5kU3BlZWNoUmVxdWVzdChzZHQpOworICAgICAgICBicmVhazsKKworICAgICAgY2FzZSBNU0dfU1BFRUNIX0ZJTklTSEVEOiB7CisgICAgICAgIFNwZWVjaFN5bnRoZXNpemVyICpzcGsgPSBzZHQtPnNwZWVjaFN5bnRoZXNpemVyOworICAgICAgICBTZXRTcGVlY2hGaW5pc2hlZE1ldGhvZCAqc2V0RmluaXNoZWQgPSBzcGstPnNldEZpbmlzaGVkOworCisgICAgICAgIGlmIChzZXRGaW5pc2hlZCkgc2V0RmluaXNoZWQoc3BrKTsKKyAgICAgICAgYnJlYWs7CisgICAgICB9CisKKyAgICAgIGNhc2UgTVNHX1NQRUVDSF9MT0NBVElPTjogeworICAgICAgICBTcGVlY2hTeW50aGVzaXplciAqc3BrID0gc2R0LT5zcGVlY2hTeW50aGVzaXplcjsKKyAgICAgICAgU2V0U3BlZWNoTG9jYXRpb25NZXRob2QgKnNldExvY2F0aW9uID0gc3BrLT5zZXRMb2NhdGlvbjsKKworICAgICAgICBpZiAoc2V0TG9jYXRpb24pIHNldExvY2F0aW9uKHNwaywgbXNnLT5hcmd1bWVudHMuc3BlZWNoTG9jYXRpb24ubG9jYXRpb24pOworICAgICAgICBicmVhazsKKyAgICAgIH0KKworICAgICAgZGVmYXVsdDoKKyAgICAgICAgbG9nTWVzc2FnZShMT0dfQ0FURUdPUlkoU1BFRUNIX0VWRU5UUyksICJ1bmltcGxlbWVudGVkIG1lc3NhZ2U6ICV1IiwgbXNnLT50eXBlKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgZnJlZShtc2cpOworICB9Cit9CisKK3N0YXRpYyBpbnQKK3NlbmRTcGVlY2hNZXNzYWdlIChTcGVlY2hEcml2ZXJUaHJlYWQgKnNkdCwgU3BlZWNoTWVzc2FnZSAqbXNnKSB7CisgIGxvZ1NwZWVjaE1lc3NhZ2UobXNnLCAic2VuZGluZyIpOworCisjaWZkZWYgR09UX1BUSFJFQURTCisgIHJldHVybiBhc3luY1NpZ25hbEV2ZW50KHNkdC0+bWVzc2FnZUV2ZW50LCBtc2cpOworI2Vsc2UgLyogR09UX1BUSFJFQURTICovCisgIGhhbmRsZVNwZWVjaE1lc3NhZ2Uoc2R0LCBtc2cpOworICByZXR1cm4gMTsKKyNlbmRpZiAvKiBHT1RfUFRIUkVBRFMgKi8KK30KKworc3RhdGljIFNwZWVjaE1lc3NhZ2UgKgorbmV3U3BlZWNoTWVzc2FnZSAoU3BlZWNoTWVzc2FnZVR5cGUgdHlwZSwgU3BlZWNoRGF0dW0gKmRhdGEpIHsKKyAgU3BlZWNoTWVzc2FnZSAqbXNnOworICBzaXplX3Qgc2l6ZSA9IHNpemVvZigqbXNnKSArIGdldFNwZWVjaERhdGFTaXplKGRhdGEpOworCisgIGlmICgobXNnID0gbWFsbG9jKHNpemUpKSkgeworICAgIG1lbXNldChtc2csIDAsIHNpemVvZigqbXNnKSk7CisgICAgbXNnLT50eXBlID0gdHlwZTsKKyAgICBtb3ZlU3BlZWNoRGF0YShtc2ctPmRhdGEsIGRhdGEpOworICAgIHJldHVybiBtc2c7CisgIH0gZWxzZSB7CisgICAgbG9nTWFsbG9jRXJyb3IoKTsKKyAgfQorCisgIHJldHVybiBOVUxMOworfQorCitzdGF0aWMgaW50CitzcGVlY2hNZXNzYWdlX3JlcXVlc3RGaW5pc2hlZCAoCisgIFNwZWVjaERyaXZlclRocmVhZCAqc2R0LAorICBpbnQgcmVzdWx0CispIHsKKyAgU3BlZWNoTWVzc2FnZSAqbXNnOworCisgIGlmICgobXNnID0gbmV3U3BlZWNoTWVzc2FnZShNU0dfUkVRVUVTVF9GSU5JU0hFRCwgTlVMTCkpKSB7CisgICAgbXNnLT5hcmd1bWVudHMucmVxdWVzdEZpbmlzaGVkLnJlc3VsdCA9IHJlc3VsdDsKKyAgICBpZiAoc2VuZFNwZWVjaE1lc3NhZ2Uoc2R0LCBtc2cpKSByZXR1cm4gMTsKKworICAgIGZyZWUobXNnKTsKKyAgfQorCisgIHJldHVybiAwOworfQorCitpbnQKK3NwZWVjaE1lc3NhZ2Vfc3BlZWNoRmluaXNoZWQgKAorICBTcGVlY2hEcml2ZXJUaHJlYWQgKnNkdAorKSB7CisgIFNwZWVjaE1lc3NhZ2UgKm1zZzsKKworICBpZiAoKG1zZyA9IG5ld1NwZWVjaE1lc3NhZ2UoTVNHX1NQRUVDSF9GSU5JU0hFRCwgTlVMTCkpKSB7CisgICAgaWYgKHNlbmRTcGVlY2hNZXNzYWdlKHNkdCwgbXNnKSkgcmV0dXJuIDE7CisKKyAgICBmcmVlKG1zZyk7CisgIH0KKworICByZXR1cm4gMDsKK30KKworaW50CitzcGVlY2hNZXNzYWdlX3NwZWVjaExvY2F0aW9uICgKKyAgU3BlZWNoRHJpdmVyVGhyZWFkICpzZHQsCisgIGludCBsb2NhdGlvbgorKSB7CisgIFNwZWVjaE1lc3NhZ2UgKm1zZzsKKworICBpZiAoKG1zZyA9IG5ld1NwZWVjaE1lc3NhZ2UoTVNHX1NQRUVDSF9MT0NBVElPTiwgTlVMTCkpKSB7CisgICAgbXNnLT5hcmd1bWVudHMuc3BlZWNoTG9jYXRpb24ubG9jYXRpb24gPSBsb2NhdGlvbjsKKyAgICBpZiAoc2VuZFNwZWVjaE1lc3NhZ2Uoc2R0LCBtc2cpKSByZXR1cm4gMTsKKworICAgIGZyZWUobXNnKTsKKyAgfQorCisgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50CitzZW5kSW50ZWdlclJlc3BvbnNlIChTcGVlY2hEcml2ZXJUaHJlYWQgKnNkdCwgaW50IHJlc3VsdCkgeworICByZXR1cm4gc3BlZWNoTWVzc2FnZV9yZXF1ZXN0RmluaXNoZWQoc2R0LCByZXN1bHQpOworfQorCitzdGF0aWMgdm9pZAoraGFuZGxlU3BlZWNoUmVxdWVzdCAoU3BlZWNoRHJpdmVyVGhyZWFkICpzZHQsIFNwZWVjaFJlcXVlc3QgKnJlcSkgeworICBTcGVlY2hTeW50aGVzaXplciAqc3BrID0gc2R0LT5zcGVlY2hTeW50aGVzaXplcjsKKworICBsb2dTcGVlY2hSZXF1ZXN0KHJlcSwgImhhbmRsaW5nIik7CisKKyAgaWYgKHJlcSkgeworICAgIHN3aXRjaCAocmVxLT50eXBlKSB7CisgICAgICBjYXNlIFJFUV9TQVlfVEVYVDogeworICAgICAgICBTYXlPcHRpb25zIG9wdGlvbnMgPSByZXEtPmFyZ3VtZW50cy5zYXlUZXh0Lm9wdGlvbnM7CisgICAgICAgIGludCByZXN0b3JlUGl0Y2ggPSAwOworICAgICAgICBpbnQgcmVzdG9yZVB1bmN0dWF0aW9uID0gMDsKKworICAgICAgICBpZiAob3B0aW9ucyAmIFNBWV9PUFRfTVVURV9GSVJTVCkgc3BlZWNoLT5tdXRlKHNwayk7CisKKyAgICAgICAgaWYgKG9wdGlvbnMgJiBTQVlfT1BUX0hJR0hFUl9QSVRDSCkgeworICAgICAgICAgIGlmIChzcGstPnNldFBpdGNoKSB7CisgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIHBpdGNoID0gcHJlZnMuc3BlZWNoUGl0Y2ggKyA3OworCisgICAgICAgICAgICBpZiAocGl0Y2ggPiBTUEtfUElUQ0hfTUFYSU1VTSkgcGl0Y2ggPSBTUEtfUElUQ0hfTUFYSU1VTTsKKworICAgICAgICAgICAgaWYgKHBpdGNoICE9IHByZWZzLnNwZWVjaFBpdGNoKSB7CisgICAgICAgICAgICAgIHNway0+c2V0UGl0Y2goc3BrLCBwaXRjaCk7CisgICAgICAgICAgICAgIHJlc3RvcmVQaXRjaCA9IDE7CisgICAgICAgICAgICB9CisgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYgKG9wdGlvbnMgJiBTQVlfT1BUX0FMTF9QVU5DVFVBVElPTikgeworICAgICAgICAgIGlmIChzcGstPnNldFB1bmN0dWF0aW9uKSB7CisgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIHB1bmN0dWF0aW9uID0gU1BLX1BVTkNUVUFUSU9OX0FMTDsKKworICAgICAgICAgICAgaWYgKHB1bmN0dWF0aW9uICE9IHByZWZzLnNwZWVjaFB1bmN0dWF0aW9uKSB7CisgICAgICAgICAgICAgIHNway0+c2V0UHVuY3R1YXRpb24oc3BrLCBwdW5jdHVhdGlvbik7CisgICAgICAgICAgICAgIHJlc3RvcmVQdW5jdHVhdGlvbiA9IDE7CisgICAgICAgICAgICB9CisgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgc3BlZWNoLT5zYXkoc3BrLAorICAgICAgICAgIHJlcS0+YXJndW1lbnRzLnNheVRleHQudGV4dCwgcmVxLT5hcmd1bWVudHMuc2F5VGV4dC5sZW5ndGgsCisgICAgICAgICAgcmVxLT5hcmd1bWVudHMuc2F5VGV4dC5jb3VudCwgcmVxLT5hcmd1bWVudHMuc2F5VGV4dC5hdHRyaWJ1dGVzCisgICAgICAgICk7CisKKyAgICAgICAgaWYgKHJlc3RvcmVQdW5jdHVhdGlvbikgc3BrLT5zZXRQdW5jdHVhdGlvbihzcGssIHByZWZzLnNwZWVjaFB1bmN0dWF0aW9uKTsKKyAgICAgICAgaWYgKHJlc3RvcmVQaXRjaCkgc3BrLT5zZXRQaXRjaChzcGssIHByZWZzLnNwZWVjaFBpdGNoKTsKKworICAgICAgICBzZW5kSW50ZWdlclJlc3BvbnNlKHNkdCwgMSk7CisgICAgICAgIGJyZWFrOworICAgICAgfQorCisgICAgICBjYXNlIFJFUV9NVVRFX1NQRUVDSDogeworICAgICAgICBzcGVlY2gtPm11dGUoc3BrKTsKKworICAgICAgICBzZW5kSW50ZWdlclJlc3BvbnNlKHNkdCwgMSk7CisgICAgICAgIGJyZWFrOworICAgICAgfQorCisgICAgICBjYXNlIFJFUV9EUkFJTl9TUEVFQ0g6IHsKKyAgICAgICAgc3BrLT5kcmFpbihzcGspOworCisgICAgICAgIHNlbmRJbnRlZ2VyUmVzcG9uc2Uoc2R0LCAxKTsKKyAgICAgICAgYnJlYWs7CisgICAgICB9CisKKyAgICAgIGNhc2UgUkVRX1NFVF9WT0xVTUU6IHsKKyAgICAgICAgc3BrLT5zZXRWb2x1bWUoc3BrLCByZXEtPmFyZ3VtZW50cy5zZXRWb2x1bWUuc2V0dGluZyk7CisKKyAgICAgICAgc2VuZEludGVnZXJSZXNwb25zZShzZHQsIDEpOworICAgICAgICBicmVhazsKKyAgICAgIH0KKworICAgICAgY2FzZSBSRVFfU0VUX1JBVEU6IHsKKyAgICAgICAgc3BrLT5zZXRSYXRlKHNwaywgcmVxLT5hcmd1bWVudHMuc2V0UmF0ZS5zZXR0aW5nKTsKKworICAgICAgICBzZW5kSW50ZWdlclJlc3BvbnNlKHNkdCwgMSk7CisgICAgICAgIGJyZWFrOworICAgICAgfQorCisgICAgICBjYXNlIFJFUV9TRVRfUElUQ0g6IHsKKyAgICAgICAgc3BrLT5zZXRQaXRjaChzcGssIHJlcS0+YXJndW1lbnRzLnNldFBpdGNoLnNldHRpbmcpOworCisgICAgICAgIHNlbmRJbnRlZ2VyUmVzcG9uc2Uoc2R0LCAxKTsKKyAgICAgICAgYnJlYWs7CisgICAgICB9CisKKyAgICAgIGNhc2UgUkVRX1NFVF9QVU5DVFVBVElPTjogeworICAgICAgICBzcGstPnNldFB1bmN0dWF0aW9uKHNwaywgcmVxLT5hcmd1bWVudHMuc2V0UHVuY3R1YXRpb24uc2V0dGluZyk7CisKKyAgICAgICAgc2VuZEludGVnZXJSZXNwb25zZShzZHQsIDEpOworICAgICAgICBicmVhazsKKyAgICAgIH0KKworICAgICAgZGVmYXVsdDoKKyAgICAgICAgbG9nTWVzc2FnZShMT0dfQ0FURUdPUlkoU1BFRUNIX0VWRU5UUyksICJ1bmltcGxlbWVudGVkIHJlcXVlc3Q6ICV1IiwgcmVxLT50eXBlKTsKKyAgICAgICAgc2VuZEludGVnZXJSZXNwb25zZShzZHQsIDApOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBmcmVlKHJlcSk7CisgIH0gZWxzZSB7CisgICAgc2V0VGhyZWFkU3RhdGUoc2R0LCBUSERfU1RPUFBJTkcpOworICAgIHNlbmRJbnRlZ2VyUmVzcG9uc2Uoc2R0LCAxKTsKKyAgfQorfQorCit0eXBlZGVmIHN0cnVjdCB7CisgIFNwZWVjaFJlcXVlc3RUeXBlIGNvbnN0IHR5cGU7Cit9IFRlc3RTcGVlY2hSZXF1ZXN0RGF0YTsKKworc3RhdGljIGludAordGVzdFNwZWVjaFJlcXVlc3QgKGNvbnN0IHZvaWQgKml0ZW0sIHZvaWQgKmRhdGEpIHsKKyAgY29uc3QgU3BlZWNoUmVxdWVzdCAqcmVxID0gaXRlbTsKKyAgY29uc3QgVGVzdFNwZWVjaFJlcXVlc3REYXRhICp0c3IgPSBkYXRhOworCisgIHJldHVybiByZXEtPnR5cGUgPT0gdHNyLT50eXBlOworfQorCitzdGF0aWMgRWxlbWVudCAqCitmaW5kU3BlZWNoUmVxdWVzdEVsZW1lbnQgKFNwZWVjaERyaXZlclRocmVhZCAqc2R0LCBTcGVlY2hSZXF1ZXN0VHlwZSB0eXBlKSB7CisgIFRlc3RTcGVlY2hSZXF1ZXN0RGF0YSB0c3IgPSB7CisgICAgLnR5cGUgPSB0eXBlCisgIH07CisKKyAgaWYgKCF0ZXN0VGhyZWFkVmFsaWRpdHkoc2R0KSkgcmV0dXJuIE5VTEw7CisgIHJldHVybiBmaW5kRWxlbWVudChzZHQtPnJlcXVlc3RRdWV1ZSwgdGVzdFNwZWVjaFJlcXVlc3QsICZ0c3IpOworfQorCitzdGF0aWMgdm9pZAorcmVtb3ZlU3BlZWNoUmVxdWVzdHMgKFNwZWVjaERyaXZlclRocmVhZCAqc2R0LCBTcGVlY2hSZXF1ZXN0VHlwZSB0eXBlKSB7CisgIEVsZW1lbnQgKmVsZW1lbnQ7CisKKyAgd2hpbGUgKChlbGVtZW50ID0gZmluZFNwZWVjaFJlcXVlc3RFbGVtZW50KHNkdCwgdHlwZSkpKSBkZWxldGVFbGVtZW50KGVsZW1lbnQpOworfQorCitzdGF0aWMgdm9pZAorbXV0ZVNwZWVjaFJlcXVlc3RRdWV1ZSAoU3BlZWNoRHJpdmVyVGhyZWFkICpzZHQpIHsKKyAgcmVtb3ZlU3BlZWNoUmVxdWVzdHMoc2R0LCBSRVFfU0FZX1RFWFQpOworICByZW1vdmVTcGVlY2hSZXF1ZXN0cyhzZHQsIFJFUV9NVVRFX1NQRUVDSCk7Cit9CisKK3N0YXRpYyB2b2lkCitzZW5kU3BlZWNoUmVxdWVzdCAoU3BlZWNoRHJpdmVyVGhyZWFkICpzZHQpIHsKKyAgd2hpbGUgKGdldFF1ZXVlU2l6ZShzZHQtPnJlcXVlc3RRdWV1ZSkgPiAwKSB7CisgICAgU3BlZWNoUmVxdWVzdCAqcmVxID0gZGVxdWV1ZUl0ZW0oc2R0LT5yZXF1ZXN0UXVldWUpOworCisgICAgbG9nU3BlZWNoUmVxdWVzdChyZXEsICJzZW5kaW5nIik7CisgICAgc2V0UmVzcG9uc2VQZW5kaW5nKHNkdCk7CisKKyNpZmRlZiBHT1RfUFRIUkVBRFMKKyAgICBpZiAoIWFzeW5jU2lnbmFsRXZlbnQoc2R0LT5yZXF1ZXN0RXZlbnQsIHJlcSkpIHsKKyAgICAgIGlmIChyZXEpIGZyZWUocmVxKTsKKyAgICAgIHNldEludGVnZXJSZXNwb25zZShzZHQsIDApOworICAgICAgY29udGludWU7CisgICAgfQorI2Vsc2UgLyogR09UX1BUSFJFQURTICovCisgICAgaGFuZGxlU3BlZWNoUmVxdWVzdChzZHQsIHJlcSk7CisjZW5kaWYgLyogR09UX1BUSFJFQURTICovCisKKyAgICBicmVhazsKKyAgfQorfQorCitzdGF0aWMgaW50CitlbnF1ZXVlU3BlZWNoUmVxdWVzdCAoU3BlZWNoRHJpdmVyVGhyZWFkICpzZHQsIFNwZWVjaFJlcXVlc3QgKnJlcSkgeworICBpZiAodGVzdFRocmVhZFZhbGlkaXR5KHNkdCkpIHsKKyAgICBsb2dTcGVlY2hSZXF1ZXN0KHJlcSwgImVucXVldWluZyIpOworCisgICAgaWYgKGVucXVldWVJdGVtKHNkdC0+cmVxdWVzdFF1ZXVlLCByZXEpKSB7CisgICAgICBpZiAoc2R0LT5yZXNwb25zZS50eXBlICE9IFJTUF9QRU5ESU5HKSB7CisgICAgICAgIGlmIChnZXRRdWV1ZVNpemUoc2R0LT5yZXF1ZXN0UXVldWUpID09IDEpIHsKKyAgICAgICAgICBzZW5kU3BlZWNoUmVxdWVzdChzZHQpOworICAgICAgICB9CisgICAgICB9CisKKyAgICAgIHJldHVybiAxOworICAgIH0KKyAgfQorCisgIHJldHVybiAwOworfQorCitzdGF0aWMgU3BlZWNoUmVxdWVzdCAqCituZXdTcGVlY2hSZXF1ZXN0IChTcGVlY2hSZXF1ZXN0VHlwZSB0eXBlLCBTcGVlY2hEYXR1bSAqZGF0YSkgeworICBTcGVlY2hSZXF1ZXN0ICpyZXE7CisgIHNpemVfdCBzaXplID0gc2l6ZW9mKCpyZXEpICsgZ2V0U3BlZWNoRGF0YVNpemUoZGF0YSk7CisKKyAgaWYgKChyZXEgPSBtYWxsb2Moc2l6ZSkpKSB7CisgICAgbWVtc2V0KHJlcSwgMCwgc2l6ZW9mKCpyZXEpKTsKKyAgICByZXEtPnR5cGUgPSB0eXBlOworICAgIG1vdmVTcGVlY2hEYXRhKHJlcS0+ZGF0YSwgZGF0YSk7CisgICAgcmV0dXJuIHJlcTsKKyAgfSBlbHNlIHsKKyAgICBsb2dNYWxsb2NFcnJvcigpOworICB9CisKKyAgcmV0dXJuIE5VTEw7Cit9CisKK2ludAorc3BlZWNoUmVxdWVzdF9zYXlUZXh0ICgKKyAgU3BlZWNoRHJpdmVyVGhyZWFkICpzZHQsCisgIGNvbnN0IGNoYXIgKnRleHQsIHNpemVfdCBsZW5ndGgsCisgIHNpemVfdCBjb3VudCwgY29uc3QgdW5zaWduZWQgY2hhciAqYXR0cmlidXRlcywKKyAgU2F5T3B0aW9ucyBvcHRpb25zCispIHsKKyAgU3BlZWNoUmVxdWVzdCAqcmVxOworCisgIEJFR0lOX1NQRUVDSF9EQVRBCisgICAgey5hZGRyZXNzPXRleHQsIC5zaXplPWxlbmd0aCsxfSwKKyAgICB7LmFkZHJlc3M9YXR0cmlidXRlcywgLnNpemU9Y291bnR9LAorICBFTkRfU1BFRUNIX0RBVEEKKworICBpZiAoKHJlcSA9IG5ld1NwZWVjaFJlcXVlc3QoUkVRX1NBWV9URVhULCBkYXRhKSkpIHsKKyAgICByZXEtPmFyZ3VtZW50cy5zYXlUZXh0LnRleHQgPSBkYXRhWzBdLmFkZHJlc3M7CisgICAgcmVxLT5hcmd1bWVudHMuc2F5VGV4dC5sZW5ndGggPSBsZW5ndGg7CisgICAgcmVxLT5hcmd1bWVudHMuc2F5VGV4dC5jb3VudCA9IGNvdW50OworICAgIHJlcS0+YXJndW1lbnRzLnNheVRleHQuYXR0cmlidXRlcyA9IGRhdGFbMV0uYWRkcmVzczsKKyAgICByZXEtPmFyZ3VtZW50cy5zYXlUZXh0Lm9wdGlvbnMgPSBvcHRpb25zOworCisgICAgaWYgKG9wdGlvbnMgJiBTQVlfT1BUX01VVEVfRklSU1QpIG11dGVTcGVlY2hSZXF1ZXN0UXVldWUoc2R0KTsKKyAgICBpZiAoZW5xdWV1ZVNwZWVjaFJlcXVlc3Qoc2R0LCByZXEpKSByZXR1cm4gMTsKKworICAgIGZyZWUocmVxKTsKKyAgfQorCisgIHJldHVybiAwOworfQorCitpbnQKK3NwZWVjaFJlcXVlc3RfbXV0ZVNwZWVjaCAoCisgIFNwZWVjaERyaXZlclRocmVhZCAqc2R0CispIHsKKyAgU3BlZWNoUmVxdWVzdCAqcmVxOworCisgIGlmICgocmVxID0gbmV3U3BlZWNoUmVxdWVzdChSRVFfTVVURV9TUEVFQ0gsIE5VTEwpKSkgeworICAgIG11dGVTcGVlY2hSZXF1ZXN0UXVldWUoc2R0KTsKKyAgICBpZiAoZW5xdWV1ZVNwZWVjaFJlcXVlc3Qoc2R0LCByZXEpKSByZXR1cm4gMTsKKworICAgIGZyZWUocmVxKTsKKyAgfQorCisgIHJldHVybiAwOworfQorCitpbnQKK3NwZWVjaFJlcXVlc3RfZHJhaW5TcGVlY2ggKAorICBTcGVlY2hEcml2ZXJUaHJlYWQgKnNkdAorKSB7CisgIFNwZWVjaFJlcXVlc3QgKnJlcTsKKworICBpZiAoKHJlcSA9IG5ld1NwZWVjaFJlcXVlc3QoUkVRX0RSQUlOX1NQRUVDSCwgTlVMTCkpKSB7CisgICAgaWYgKGVucXVldWVTcGVlY2hSZXF1ZXN0KHNkdCwgcmVxKSkgeworICAgICAgYXdhaXRTcGVlY2hSZXNwb25zZShzZHQsIFNQRUVDSF9SRVNQT05TRV9XQUlUX1RJTUVPVVQpOworICAgICAgcmV0dXJuIDE7CisgICAgfQorCisgICAgZnJlZShyZXEpOworICB9CisKKyAgcmV0dXJuIDA7Cit9CisKK2ludAorc3BlZWNoUmVxdWVzdF9zZXRWb2x1bWUgKAorICBTcGVlY2hEcml2ZXJUaHJlYWQgKnNkdCwKKyAgdW5zaWduZWQgY2hhciBzZXR0aW5nCispIHsKKyAgU3BlZWNoUmVxdWVzdCAqcmVxOworCisgIGlmICgocmVxID0gbmV3U3BlZWNoUmVxdWVzdChSRVFfU0VUX1ZPTFVNRSwgTlVMTCkpKSB7CisgICAgcmVxLT5hcmd1bWVudHMuc2V0Vm9sdW1lLnNldHRpbmcgPSBzZXR0aW5nOworICAgIGlmIChlbnF1ZXVlU3BlZWNoUmVxdWVzdChzZHQsIHJlcSkpIHJldHVybiAxOworCisgICAgZnJlZShyZXEpOworICB9CisKKyAgcmV0dXJuIDA7Cit9CisKK2ludAorc3BlZWNoUmVxdWVzdF9zZXRSYXRlICgKKyAgU3BlZWNoRHJpdmVyVGhyZWFkICpzZHQsCisgIHVuc2lnbmVkIGNoYXIgc2V0dGluZworKSB7CisgIFNwZWVjaFJlcXVlc3QgKnJlcTsKKworICBpZiAoKHJlcSA9IG5ld1NwZWVjaFJlcXVlc3QoUkVRX1NFVF9SQVRFLCBOVUxMKSkpIHsKKyAgICByZXEtPmFyZ3VtZW50cy5zZXRSYXRlLnNldHRpbmcgPSBzZXR0aW5nOworICAgIGlmIChlbnF1ZXVlU3BlZWNoUmVxdWVzdChzZHQsIHJlcSkpIHJldHVybiAxOworCisgICAgZnJlZShyZXEpOworICB9CisKKyAgcmV0dXJuIDA7Cit9CisKK2ludAorc3BlZWNoUmVxdWVzdF9zZXRQaXRjaCAoCisgIFNwZWVjaERyaXZlclRocmVhZCAqc2R0LAorICB1bnNpZ25lZCBjaGFyIHNldHRpbmcKKykgeworICBTcGVlY2hSZXF1ZXN0ICpyZXE7CisKKyAgaWYgKChyZXEgPSBuZXdTcGVlY2hSZXF1ZXN0KFJFUV9TRVRfUElUQ0gsIE5VTEwpKSkgeworICAgIHJlcS0+YXJndW1lbnRzLnNldFBpdGNoLnNldHRpbmcgPSBzZXR0aW5nOworICAgIGlmIChlbnF1ZXVlU3BlZWNoUmVxdWVzdChzZHQsIHJlcSkpIHJldHVybiAxOworCisgICAgZnJlZShyZXEpOworICB9CisKKyAgcmV0dXJuIDA7Cit9CisKK2ludAorc3BlZWNoUmVxdWVzdF9zZXRQdW5jdHVhdGlvbiAoCisgIFNwZWVjaERyaXZlclRocmVhZCAqc2R0LAorICBTcGVlY2hQdW5jdHVhdGlvbiBzZXR0aW5nCispIHsKKyAgU3BlZWNoUmVxdWVzdCAqcmVxOworCisgIGlmICgocmVxID0gbmV3U3BlZWNoUmVxdWVzdChSRVFfU0VUX1BVTkNUVUFUSU9OLCBOVUxMKSkpIHsKKyAgICByZXEtPmFyZ3VtZW50cy5zZXRQdW5jdHVhdGlvbi5zZXR0aW5nID0gc2V0dGluZzsKKyAgICBpZiAoZW5xdWV1ZVNwZWVjaFJlcXVlc3Qoc2R0LCByZXEpKSByZXR1cm4gMTsKKworICAgIGZyZWUocmVxKTsKKyAgfQorCisgIHJldHVybiAwOworfQorCitzdGF0aWMgdm9pZAorc2V0VGhyZWFkUmVhZHkgKFNwZWVjaERyaXZlclRocmVhZCAqc2R0KSB7CisgIHNldFRocmVhZFN0YXRlKHNkdCwgVEhEX1JFQURZKTsKKyAgc2VuZEludGVnZXJSZXNwb25zZShzZHQsIDEpOworfQorCitzdGF0aWMgaW50CitzdGFydFNwZWVjaERyaXZlciAoU3BlZWNoRHJpdmVyVGhyZWFkICpzZHQpIHsKKyAgbG9nTWVzc2FnZShMT0dfQ0FURUdPUlkoU1BFRUNIX0VWRU5UUyksICJzdGFydGluZyBkcml2ZXIiKTsKKyAgcmV0dXJuIHNwZWVjaC0+Y29uc3RydWN0KHNkdC0+c3BlZWNoU3ludGhlc2l6ZXIsIHNkdC0+ZHJpdmVyUGFyYW1ldGVycyk7Cit9CisKK3N0YXRpYyB2b2lkCitzdG9wU3BlZWNoRHJpdmVyIChTcGVlY2hEcml2ZXJUaHJlYWQgKnNkdCkgeworICBsb2dNZXNzYWdlKExPR19DQVRFR09SWShTUEVFQ0hfRVZFTlRTKSwgInN0b3BwaW5nIGRyaXZlciIpOworICBzcGVlY2gtPmRlc3RydWN0KHNkdC0+c3BlZWNoU3ludGhlc2l6ZXIpOworfQorCisjaWZkZWYgR09UX1BUSFJFQURTCitBU1lOQ19DT05ESVRJT05fVEVTVEVSKHRlc3RTcGVlY2hEcml2ZXJUaHJlYWRTdG9wcGluZykgeworICBTcGVlY2hEcml2ZXJUaHJlYWQgKnNkdCA9IGRhdGE7CisKKyAgcmV0dXJuIHNkdC0+dGhyZWFkU3RhdGUgPT0gVEhEX1NUT1BQSU5HOworfQorCitBU1lOQ19FVkVOVF9DQUxMQkFDSyhoYW5kbGVTcGVlY2hNZXNzYWdlRXZlbnQpIHsKKyAgU3BlZWNoRHJpdmVyVGhyZWFkICpzZHQgPSBwYXJhbWV0ZXJzLT5ldmVudERhdGE7CisgIFNwZWVjaE1lc3NhZ2UgKm1zZyA9IHBhcmFtZXRlcnMtPnNpZ25hbERhdGE7CisKKyAgaGFuZGxlU3BlZWNoTWVzc2FnZShzZHQsIG1zZyk7Cit9CisKK0FTWU5DX0VWRU5UX0NBTExCQUNLKGhhbmRsZVNwZWVjaFJlcXVlc3RFdmVudCkgeworICBTcGVlY2hEcml2ZXJUaHJlYWQgKnNkdCA9IHBhcmFtZXRlcnMtPmV2ZW50RGF0YTsKKyAgU3BlZWNoUmVxdWVzdCAqcmVxID0gcGFyYW1ldGVycy0+c2lnbmFsRGF0YTsKKworICBoYW5kbGVTcGVlY2hSZXF1ZXN0KHNkdCwgcmVxKTsKK30KKworc3RhdGljIHZvaWQKK2F3YWl0U3BlZWNoRHJpdmVyVGhyZWFkVGVybWluYXRpb24gKFNwZWVjaERyaXZlclRocmVhZCAqc2R0KSB7CisgIHZvaWQgKnJlc3VsdDsKKworICBwdGhyZWFkX2pvaW4oc2R0LT50aHJlYWRJZGVudGlmaWVyLCAmcmVzdWx0KTsKK30KKworVEhSRUFEX0ZVTkNUSU9OKHJ1blNwZWVjaERyaXZlclRocmVhZCkgeworICBTcGVlY2hEcml2ZXJUaHJlYWQgKnNkdCA9IGFyZ3VtZW50OworCisgIHNldFRocmVhZFN0YXRlKHNkdCwgVEhEX1NUQVJUSU5HKTsKKworICBpZiAoKHNkdC0+cmVxdWVzdEV2ZW50ID0gYXN5bmNOZXdFdmVudChoYW5kbGVTcGVlY2hSZXF1ZXN0RXZlbnQsIHNkdCkpKSB7CisgICAgaWYgKHN0YXJ0U3BlZWNoRHJpdmVyKHNkdCkpIHsKKyAgICAgIHNldFRocmVhZFJlYWR5KHNkdCk7CisgICAgICBhc3luY1dhaXRGb3IodGVzdFNwZWVjaERyaXZlclRocmVhZFN0b3BwaW5nLCBzZHQpOworICAgICAgc3RvcFNwZWVjaERyaXZlcihzZHQpOworICAgIH0gZWxzZSB7CisgICAgICBsb2dNZXNzYWdlKExPR19DQVRFR09SWShTUEVFQ0hfRVZFTlRTKSwgImRyaXZlciBjb25zdHJ1Y3Rpb24gZmFpbHVyZSIpOworICAgIH0KKworICAgIGFzeW5jRGlzY2FyZEV2ZW50KHNkdC0+cmVxdWVzdEV2ZW50KTsKKyAgICBzZHQtPnJlcXVlc3RFdmVudCA9IE5VTEw7CisgIH0gZWxzZSB7CisgICAgbG9nTWVzc2FnZShMT0dfQ0FURUdPUlkoU1BFRUNIX0VWRU5UUyksICJyZXF1ZXN0IGV2ZW50IGNvbnN0cnVjdGlvbiBmYWlsdXJlIik7CisgIH0KKworICB7CisgICAgaW50IG9rID0gc2R0LT50aHJlYWRTdGF0ZSA9PSBUSERfU1RPUFBJTkc7CisKKyAgICBzZW5kSW50ZWdlclJlc3BvbnNlKHNkdCwgb2spOworICB9CisKKyAgc2V0VGhyZWFkU3RhdGUoc2R0LCBUSERfRklOSVNIRUQpOworICByZXR1cm4gTlVMTDsKK30KKyNlbmRpZiAvKiBHT1RfUFRIUkVBRFMgKi8KKworc3RhdGljIHZvaWQKK2RlYWxsb2NhdGVTcGVlY2hSZXF1ZXN0ICh2b2lkICppdGVtLCB2b2lkICpkYXRhKSB7CisgIFNwZWVjaFJlcXVlc3QgKnJlcSA9IGl0ZW07CisKKyAgbG9nU3BlZWNoUmVxdWVzdChyZXEsICJ1bnF1ZXVpbmciKTsKKyAgZnJlZShyZXEpOworfQorCitpbnQKK2NvbnN0cnVjdFNwZWVjaERyaXZlclRocmVhZCAoCisgIFNwZWVjaFN5bnRoZXNpemVyICpzcGssCisgIGNoYXIgKipwYXJhbWV0ZXJzCispIHsKKyAgU3BlZWNoRHJpdmVyVGhyZWFkICpzZHQ7CisKKyAgaWYgKChzZHQgPSBtYWxsb2Moc2l6ZW9mKCpzZHQpKSkpIHsKKyAgICBtZW1zZXQoc2R0LCAwLCBzaXplb2YoKnNkdCkpOworICAgIHNldFRocmVhZFN0YXRlKHNkdCwgVEhEX0NPTlNUUlVDVElORyk7CisgICAgc2V0UmVzcG9uc2VQZW5kaW5nKHNkdCk7CisKKyAgICBzZHQtPnNwZWVjaFN5bnRoZXNpemVyID0gc3BrOworICAgIHNkdC0+ZHJpdmVyUGFyYW1ldGVycyA9IHBhcmFtZXRlcnM7CisKKyAgICBpZiAoKHNkdC0+cmVxdWVzdFF1ZXVlID0gbmV3UXVldWUoZGVhbGxvY2F0ZVNwZWVjaFJlcXVlc3QsIE5VTEwpKSkgeworICAgICAgc3BrLT5kcml2ZXIudGhyZWFkID0gc2R0OworCisjaWZkZWYgR09UX1BUSFJFQURTCisgICAgICBpZiAoKHNkdC0+bWVzc2FnZUV2ZW50ID0gYXN5bmNOZXdFdmVudChoYW5kbGVTcGVlY2hNZXNzYWdlRXZlbnQsIHNkdCkpKSB7CisgICAgICAgIHB0aHJlYWRfdCB0aHJlYWRJZGVudGlmaWVyOworICAgICAgICBpbnQgY3JlYXRlRXJyb3IgPSBjcmVhdGVUaHJlYWQoInNwZWVjaC1kcml2ZXIiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnRocmVhZElkZW50aWZpZXIsIE5VTEwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBydW5TcGVlY2hEcml2ZXJUaHJlYWQsIHNkdCk7CisKKyAgICAgICAgaWYgKCFjcmVhdGVFcnJvcikgeworICAgICAgICAgIHNkdC0+dGhyZWFkSWRlbnRpZmllciA9IHRocmVhZElkZW50aWZpZXI7CisKKyAgICAgICAgICBpZiAoYXdhaXRTcGVlY2hSZXNwb25zZShzZHQsIFNQRUVDSF9EUklWRVJfVEhSRUFEX1NUQVJUX1RJTUVPVVQpKSB7CisgICAgICAgICAgICBpZiAoc2R0LT5yZXNwb25zZS50eXBlID09IFJTUF9JTlRFR0VSKSB7CisgICAgICAgICAgICAgIGlmIChzZHQtPnJlc3BvbnNlLnZhbHVlLklOVEVHRVIpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBsb2dNZXNzYWdlKExPR19DQVRFR09SWShTUEVFQ0hfRVZFTlRTKSwgImRyaXZlciB0aHJlYWQgaW5pdGlhbGl6YXRpb24gZmFpbHVyZSIpOworICAgICAgICAgICAgYXdhaXRTcGVlY2hEcml2ZXJUaHJlYWRUZXJtaW5hdGlvbihzZHQpOworICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBsb2dNZXNzYWdlKExPR19DQVRFR09SWShTUEVFQ0hfRVZFTlRTKSwgImRyaXZlciB0aHJlYWQgaW5pdGlhbGl6YXRpb24gdGltZW91dCIpOworICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICBsb2dNZXNzYWdlKExPR19DQVRFR09SWShTUEVFQ0hfRVZFTlRTKSwgImRyaXZlciB0aHJlYWQgY3JlYXRpb24gZmFpbHVyZTogJXMiLCBzdHJlcnJvcihjcmVhdGVFcnJvcikpOworICAgICAgICB9CisKKyAgICAgICAgYXN5bmNEaXNjYXJkRXZlbnQoc2R0LT5tZXNzYWdlRXZlbnQpOworICAgICAgICBzZHQtPm1lc3NhZ2VFdmVudCA9IE5VTEw7CisgICAgICB9IGVsc2UgeworICAgICAgICBsb2dNZXNzYWdlKExPR19DQVRFR09SWShTUEVFQ0hfRVZFTlRTKSwgInJlc3BvbnNlIGV2ZW50IGNvbnN0cnVjdGlvbiBmYWlsdXJlIik7CisgICAgICB9CisjZWxzZSAvKiBHT1RfUFRIUkVBRFMgKi8KKyAgICAgIGlmIChzdGFydFNwZWVjaERyaXZlcihzZHQpKSB7CisgICAgICAgIHNldFRocmVhZFJlYWR5KHNkdCk7CisgICAgICAgIHJldHVybiAxOworICAgICAgfQorI2VuZGlmIC8qIEdPVF9QVEhSRUFEUyAqLworCisgICAgICBzcGstPmRyaXZlci50aHJlYWQgPSBOVUxMOworICAgICAgZGVhbGxvY2F0ZVF1ZXVlKHNkdC0+cmVxdWVzdFF1ZXVlKTsKKyAgICB9CisKKyAgICBmcmVlKHNkdCk7CisgIH0gZWxzZSB7CisgICAgbG9nTWFsbG9jRXJyb3IoKTsKKyAgfQorCisgIHNway0+ZHJpdmVyLnRocmVhZCA9IE5VTEw7CisgIHJldHVybiAwOworfQorCit2b2lkCitkZXN0cm95U3BlZWNoRHJpdmVyVGhyZWFkIChTcGVlY2hTeW50aGVzaXplciAqc3BrKSB7CisgIFNwZWVjaERyaXZlclRocmVhZCAqc2R0ID0gc3BrLT5kcml2ZXIudGhyZWFkOworCisgIGRlbGV0ZUVsZW1lbnRzKHNkdC0+cmVxdWVzdFF1ZXVlKTsKKworI2lmZGVmIEdPVF9QVEhSRUFEUworICBpZiAoZW5xdWV1ZVNwZWVjaFJlcXVlc3Qoc2R0LCBOVUxMKSkgeworICAgIHNkdC0+aXNCZWluZ0Rlc3Ryb3llZCA9IDE7CisgICAgYXdhaXRTcGVlY2hSZXNwb25zZShzZHQsIFNQRUVDSF9EUklWRVJfVEhSRUFEX1NUT1BfVElNRU9VVCk7CisKKyAgICBzZXRSZXNwb25zZVBlbmRpbmcoc2R0KTsKKyAgICBhd2FpdFNwZWVjaFJlc3BvbnNlKHNkdCwgU1BFRUNIX0RSSVZFUl9USFJFQURfU1RPUF9USU1FT1VUKTsKKworICAgIGF3YWl0U3BlZWNoRHJpdmVyVGhyZWFkVGVybWluYXRpb24oc2R0KTsKKyAgfQorCisgIGlmIChzZHQtPm1lc3NhZ2VFdmVudCkgYXN5bmNEaXNjYXJkRXZlbnQoc2R0LT5tZXNzYWdlRXZlbnQpOworI2Vsc2UgLyogR09UX1BUSFJFQURTICovCisgIHN0b3BTcGVlY2hEcml2ZXIoc2R0KTsKKyAgc2V0VGhyZWFkU3RhdGUoc2R0LCBUSERfRklOSVNIRUQpOworI2VuZGlmIC8qIEdPVF9QVEhSRUFEUyAqLworCisgIHNkdC0+c3BlZWNoU3ludGhlc2l6ZXItPmRyaXZlci50aHJlYWQgPSBOVUxMOworICBkZWFsbG9jYXRlUXVldWUoc2R0LT5yZXF1ZXN0UXVldWUpOworICBmcmVlKHNkdCk7Cit9CisjZW5kaWYgLyogRU5BQkxFX1NQRUVDSF9TVVBQT1JUICovCmRpZmYgLS1naXQgYS9Qcm9ncmFtcy9zcGtfdGhyZWFkLmggYi9Qcm9ncmFtcy9zcGtfdGhyZWFkLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDI0MWI3NwotLS0gL2Rldi9udWxsCisrKyBiL1Byb2dyYW1zL3Nwa190aHJlYWQuaApAQCAtMCwwICsxLDg3IEBACisvKgorICogQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyAqICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyAqCisgKiBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorICoKKyAqIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyAqCisgKiBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisgKi8KKworI2lmbmRlZiBCUkxUVFlfSU5DTFVERURfU1BLX1RIUkVBRAorI2RlZmluZSBCUkxUVFlfSU5DTFVERURfU1BLX1RIUkVBRAorCisjaW5jbHVkZSAic3BrX3R5cGVzLmgiCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYgLyogX19jcGx1c3BsdXMgKi8KKworI2lmZGVmIEVOQUJMRV9TUEVFQ0hfU1VQUE9SVAorZXh0ZXJuIGludCBjb25zdHJ1Y3RTcGVlY2hEcml2ZXJUaHJlYWQgKAorICBTcGVlY2hTeW50aGVzaXplciAqc3BrLAorICBjaGFyICoqcGFyYW1ldGVycworKTsKKworZXh0ZXJuIHZvaWQgZGVzdHJveVNwZWVjaERyaXZlclRocmVhZCAoCisgIFNwZWVjaFN5bnRoZXNpemVyICpzcGsKKyk7CisKK2V4dGVybiBpbnQgc3BlZWNoUmVxdWVzdF9zYXlUZXh0ICgKKyAgU3BlZWNoRHJpdmVyVGhyZWFkICpzZHQsCisgIGNvbnN0IGNoYXIgKnRleHQsIHNpemVfdCBsZW5ndGgsCisgIHNpemVfdCBjb3VudCwgY29uc3QgdW5zaWduZWQgY2hhciAqYXR0cmlidXRlcywKKyAgU2F5T3B0aW9ucyBvcHRpb25zCispOworCitleHRlcm4gaW50IHNwZWVjaFJlcXVlc3RfbXV0ZVNwZWVjaCAoCisgIFNwZWVjaERyaXZlclRocmVhZCAqc2R0CispOworCitleHRlcm4gaW50IHNwZWVjaFJlcXVlc3RfZHJhaW5TcGVlY2ggKAorICBTcGVlY2hEcml2ZXJUaHJlYWQgKnNkdAorKTsKKworZXh0ZXJuIGludCBzcGVlY2hSZXF1ZXN0X3NldFZvbHVtZSAoCisgIFNwZWVjaERyaXZlclRocmVhZCAqc2R0LAorICB1bnNpZ25lZCBjaGFyIHNldHRpbmcKKyk7CisKK2V4dGVybiBpbnQgc3BlZWNoUmVxdWVzdF9zZXRSYXRlICgKKyAgU3BlZWNoRHJpdmVyVGhyZWFkICpzZHQsCisgIHVuc2lnbmVkIGNoYXIgc2V0dGluZworKTsKKworZXh0ZXJuIGludCBzcGVlY2hSZXF1ZXN0X3NldFBpdGNoICgKKyAgU3BlZWNoRHJpdmVyVGhyZWFkICpzZHQsCisgIHVuc2lnbmVkIGNoYXIgc2V0dGluZworKTsKKworZXh0ZXJuIGludCBzcGVlY2hSZXF1ZXN0X3NldFB1bmN0dWF0aW9uICgKKyAgU3BlZWNoRHJpdmVyVGhyZWFkICpzZHQsCisgIFNwZWVjaFB1bmN0dWF0aW9uIHNldHRpbmcKKyk7CisKK2V4dGVybiBpbnQgc3BlZWNoTWVzc2FnZV9zcGVlY2hGaW5pc2hlZCAoCisgIFNwZWVjaERyaXZlclRocmVhZCAqc2R0CispOworCitleHRlcm4gaW50IHNwZWVjaE1lc3NhZ2Vfc3BlZWNoTG9jYXRpb24gKAorICBTcGVlY2hEcml2ZXJUaHJlYWQgKnNkdCwKKyAgaW50IGxvY2F0aW9uCispOworI2VuZGlmIC8qIEVOQUJMRV9TUEVFQ0hfU1VQUE9SVCAqLworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZiAvKiBfX2NwbHVzcGx1cyAqLworCisjZW5kaWYgLyogQlJMVFRZX0lOQ0xVREVEX1NQS19USFJFQUQgKi8KZGlmZiAtLWdpdCBhL1Byb2dyYW1zL3Nwa3Rlc3QuYyBiL1Byb2dyYW1zL3Nwa3Rlc3QuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YzExODlhCi0tLSAvZGV2L251bGwKKysrIGIvUHJvZ3JhbXMvc3BrdGVzdC5jCkBAIC0wLDAgKzEsMjMxIEBACisvKgorICogQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyAqICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyAqCisgKiBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorICoKKyAqIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyAqCisgKiBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisgKi8KKworLyogc3BrdGVzdC5jIC0gVGVzdCBwcm9ncm0gZm9yIHRoZSBzcGVlY2ggc3ludGhlc2l6ZXIgZHJpdmVycy4KKyAqLworCisjaW5jbHVkZSAicHJvbG9ndWUuaCIKKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8c3RyaW5ncy5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisKKyNpbmNsdWRlICJwcm9ncmFtLmgiCisjaW5jbHVkZSAiY21kbGluZS5oIgorI2luY2x1ZGUgImxvZy5oIgorI2luY2x1ZGUgInNway5oIgorI2luY2x1ZGUgImZpbGUuaCIKKyNpbmNsdWRlICJwYXJzZS5oIgorI2luY2x1ZGUgImFzeW5jX3dhaXQuaCIKKworc3RhdGljIGNoYXIgKm9wdF90ZXh0U3RyaW5nOworc3RhdGljIGNoYXIgKm9wdF9zcGVlY2hWb2x1bWU7CitzdGF0aWMgY2hhciAqb3B0X3NwZWVjaFJhdGU7CitzdGF0aWMgY2hhciAqb3B0X3BjbURldmljZTsKK3N0YXRpYyBjaGFyICpvcHRfZHJpdmVyc0RpcmVjdG9yeTsKKworQkVHSU5fT1BUSU9OX1RBQkxFKHByb2dyYW1PcHRpb25zKQorICB7IC53b3JkID0gInRleHQtc3RyaW5nIiwKKyAgICAubGV0dGVyID0gJ3QnLAorICAgIC5hcmd1bWVudCA9ICJzdHJpbmciLAorICAgIC5zZXR0aW5nLnN0cmluZyA9ICZvcHRfdGV4dFN0cmluZywKKyAgICAuZGVzY3JpcHRpb24gPSAiVGV4dCB0byBiZSBzcG9rZW4uIgorICB9LAorCisgIHsgLndvcmQgPSAidm9sdW1lIiwKKyAgICAubGV0dGVyID0gJ3YnLAorICAgIC5hcmd1bWVudCA9ICJsb3VkbmVzcyIsCisgICAgLnNldHRpbmcuc3RyaW5nID0gJm9wdF9zcGVlY2hWb2x1bWUsCisgICAgLmRlc2NyaXB0aW9uID0gIkZsb2F0aW5nLXBvaW50IHNwZWVjaCB2b2x1bWUgbXVsdGlwbGllci4iCisgIH0sCisKKyAgeyAud29yZCA9ICJyYXRlIiwKKyAgICAubGV0dGVyID0gJ3InLAorICAgIC5hcmd1bWVudCA9ICJzcGVlZCIsCisgICAgLnNldHRpbmcuc3RyaW5nID0gJm9wdF9zcGVlY2hSYXRlLAorICAgIC5kZXNjcmlwdGlvbiA9ICJGbG9hdGluZy1wb2ludCBzcGVlY2ggcmF0ZSBtdWx0aXBsaWVyLiIKKyAgfSwKKworICB7IC53b3JkID0gImRldmljZSIsCisgICAgLmxldHRlciA9ICdkJywKKyAgICAuYXJndW1lbnQgPSAiZGV2aWNlIiwKKyAgICAuc2V0dGluZy5zdHJpbmcgPSAmb3B0X3BjbURldmljZSwKKyAgICAuZGVzY3JpcHRpb24gPSAiRGlnaXRhbCBhdWRpbyBzb3VuZGNhcmQgZGV2aWNlIHNwZWNpZmllci4iCisgIH0sCisKKyAgeyAud29yZCA9ICJkcml2ZXJzLWRpcmVjdG9yeSIsCisgICAgLmxldHRlciA9ICdEJywKKyAgICAuYXJndW1lbnQgPSAiZGlyZWN0b3J5IiwKKyAgICAuc2V0dGluZy5zdHJpbmcgPSAmb3B0X2RyaXZlcnNEaXJlY3RvcnksCisgICAgLmludGVybmFsLnNldHRpbmcgPSBEUklWRVJTX0RJUkVDVE9SWSwKKyAgICAuaW50ZXJuYWwuYWRqdXN0ID0gZml4SW5zdGFsbFBhdGgsCisgICAgLmRlc2NyaXB0aW9uID0gIlBhdGggdG8gZGlyZWN0b3J5IGZvciBsb2FkaW5nIGRyaXZlcnMuIgorICB9LAorRU5EX09QVElPTl9UQUJMRShwcm9ncmFtT3B0aW9ucykKKworc3RhdGljIGludAorc2F5IChTcGVlY2hTeW50aGVzaXplciAqc3BrLCBjb25zdCBjaGFyICpzdHJpbmcpIHsKKyAgaWYgKCFzYXlTdHJpbmcoc3BrLCBzdHJpbmcsIDApKSByZXR1cm4gMDsKKyAgYXN5bmNXYWl0KDI1MCk7CisgIHJldHVybiAxOworfQorCitzdGF0aWMgaW50CitzYXlMaW5lIChjb25zdCBMaW5lSGFuZGxlclBhcmFtZXRlcnMgKnBhcmFtZXRlcnMpIHsKKyAgU3BlZWNoU3ludGhlc2l6ZXIgKnNwayA9IHBhcmFtZXRlcnMtPmRhdGE7CisKKyAgc2F5KHNwaywgcGFyYW1ldGVycy0+bGluZS50ZXh0KTsKKyAgcmV0dXJuIDE7Cit9CisKK2ludAorbWFpbiAoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkgeworICBQcm9ncmFtRXhpdFN0YXR1cyBleGl0U3RhdHVzOworICBTcGVlY2hTeW50aGVzaXplciBzcGs7CisKKworICBjb25zdCBjaGFyICpkcml2ZXIgPSBOVUxMOworICB2b2lkICpvYmplY3Q7CisKKyAgaW50IHNwZWVjaFZvbHVtZSA9IFNQS19WT0xVTUVfREVGQVVMVDsKKyAgaW50IHNwZWVjaFJhdGUgPSBTUEtfUkFURV9ERUZBVUxUOworCisgIHsKKyAgICBjb25zdCBDb21tYW5kTGluZURlc2NyaXB0b3IgZGVzY3JpcHRvciA9IHsKKyAgICAgIC5vcHRpb25zID0gJnByb2dyYW1PcHRpb25zLAorICAgICAgLmFwcGxpY2F0aW9uTmFtZSA9ICJzcGt0ZXN0IiwKKworICAgICAgLnVzYWdlID0geworICAgICAgICAucHVycG9zZSA9IHN0cnRleHQoIlRlc3QgYSBzcGVlY2ggZHJpdmVyLiIpLAorICAgICAgICAucGFyYW1ldGVycyA9ICJbZHJpdmVyIFtwYXJhbWV0ZXI9dmFsdWUgLi4uXV0iLAorICAgICAgfQorICAgIH07CisKKyAgICBQUk9DRVNTX09QVElPTlMoZGVzY3JpcHRvciwgYXJnYywgYXJndik7CisgIH0KKworICBpZiAob3B0X3NwZWVjaFZvbHVtZSAmJiAqb3B0X3NwZWVjaFZvbHVtZSkgeworICAgIHN0YXRpYyBjb25zdCBpbnQgbWluaW11bSA9IDA7CisgICAgc3RhdGljIGNvbnN0IGludCBtYXhpbXVtID0gU1BLX1ZPTFVNRV9NQVhJTVVNOworCisgICAgaWYgKCF2YWxpZGF0ZUludGVnZXIoJnNwZWVjaFZvbHVtZSwgb3B0X3NwZWVjaFZvbHVtZSwgJm1pbmltdW0sICZtYXhpbXVtKSkgeworICAgICAgbG9nTWVzc2FnZShMT0dfRVJSLCAiJXM6ICVzIiwgImludmFsaWQgdm9sdW1lIG11bHRpcGxpZXIiLCBvcHRfc3BlZWNoVm9sdW1lKTsKKyAgICAgIHJldHVybiBQUk9HX0VYSVRfU1lOVEFYOworICAgIH0KKyAgfQorCisgIGlmIChvcHRfc3BlZWNoUmF0ZSAmJiAqb3B0X3NwZWVjaFJhdGUpIHsKKyAgICBzdGF0aWMgY29uc3QgaW50IG1pbmltdW0gPSAwOworICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4aW11bSA9IFNQS19SQVRFX01BWElNVU07CisKKyAgICBpZiAoIXZhbGlkYXRlSW50ZWdlcigmc3BlZWNoUmF0ZSwgb3B0X3NwZWVjaFJhdGUsICZtaW5pbXVtLCAmbWF4aW11bSkpIHsKKyAgICAgIGxvZ01lc3NhZ2UoTE9HX0VSUiwgIiVzOiAlcyIsICJpbnZhbGlkIHJhdGUgbXVsdGlwbGllciIsIG9wdF9zcGVlY2hSYXRlKTsKKyAgICAgIHJldHVybiBQUk9HX0VYSVRfU1lOVEFYOworICAgIH0KKyAgfQorCisgIGlmIChhcmdjKSB7CisgICAgZHJpdmVyID0gKmFyZ3YrKywgLS1hcmdjOworICB9CisKKyAgaWYgKChzcGVlY2ggPSBsb2FkU3BlZWNoRHJpdmVyKGRyaXZlciwgJm9iamVjdCwgb3B0X2RyaXZlcnNEaXJlY3RvcnkpKSkgeworICAgIGNvbnN0IGNoYXIgKmNvbnN0ICpwYXJhbWV0ZXJOYW1lcyA9IHNwZWVjaC0+cGFyYW1ldGVyczsKKyAgICBjaGFyICoqcGFyYW1ldGVyU2V0dGluZ3M7CisKKyAgICBpZiAoIXBhcmFtZXRlck5hbWVzKSB7CisgICAgICBzdGF0aWMgY29uc3QgY2hhciAqY29uc3Qgbm9OYW1lc1tdID0ge05VTEx9OworCisgICAgICBwYXJhbWV0ZXJOYW1lcyA9IG5vTmFtZXM7CisgICAgfQorCisgICAgeworICAgICAgY29uc3QgY2hhciAqY29uc3QgKm5hbWUgPSBwYXJhbWV0ZXJOYW1lczsKKyAgICAgIHVuc2lnbmVkIGludCBjb3VudDsKKyAgICAgIGNoYXIgKipzZXR0aW5nOworCisgICAgICB3aGlsZSAoKm5hbWUpIG5hbWUgKz0gMTsKKyAgICAgIGNvdW50ID0gbmFtZSAtIHBhcmFtZXRlck5hbWVzOworCisgICAgICBpZiAoIShwYXJhbWV0ZXJTZXR0aW5ncyA9IG1hbGxvYygoY291bnQgKyAxKSAqIHNpemVvZigqcGFyYW1ldGVyU2V0dGluZ3MpKSkpIHsKKyAgICAgICAgbG9nTWFsbG9jRXJyb3IoKTsKKyAgICAgICAgcmV0dXJuIFBST0dfRVhJVF9GQVRBTDsKKyAgICAgIH0KKworICAgICAgc2V0dGluZyA9IHBhcmFtZXRlclNldHRpbmdzOworICAgICAgd2hpbGUgKGNvdW50LS0pICpzZXR0aW5nKysgPSAiIjsKKyAgICAgICpzZXR0aW5nID0gTlVMTDsKKyAgICB9CisKKyAgICB3aGlsZSAoYXJnYykgeworICAgICAgY2hhciAqYXNzaWdubWVudCA9ICphcmd2Kys7CisgICAgICBpbnQgb2sgPSAwOworICAgICAgY2hhciAqZGVsaW1pdGVyID0gc3RyY2hyKGFzc2lnbm1lbnQsICc9Jyk7CisKKyAgICAgIGlmICghZGVsaW1pdGVyKSB7CisgICAgICAgIGxvZ01lc3NhZ2UoTE9HX0VSUiwgIm1pc3Npbmcgc3BlZWNoIGRyaXZlciBwYXJhbWV0ZXIgdmFsdWU6ICVzIiwgYXNzaWdubWVudCk7CisgICAgICB9IGVsc2UgaWYgKGRlbGltaXRlciA9PSBhc3NpZ25tZW50KSB7CisgICAgICAgIGxvZ01lc3NhZ2UoTE9HX0VSUiwgIm1pc3Npbmcgc3BlZWNoIGRyaXZlciBwYXJhbWV0ZXIgbmFtZTogJXMiLCBhc3NpZ25tZW50KTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIHNpemVfdCBuYW1lTGVuZ3RoID0gZGVsaW1pdGVyIC0gYXNzaWdubWVudDsKKyAgICAgICAgY29uc3QgY2hhciAqY29uc3QgKm5hbWUgPSBwYXJhbWV0ZXJOYW1lczsKKworICAgICAgICB3aGlsZSAoKm5hbWUpIHsKKyAgICAgICAgICBpZiAoc3RybmNhc2VjbXAoYXNzaWdubWVudCwgKm5hbWUsIG5hbWVMZW5ndGgpID09IDApIHsKKyAgICAgICAgICAgIHBhcmFtZXRlclNldHRpbmdzW25hbWUgLSBwYXJhbWV0ZXJOYW1lc10gPSBkZWxpbWl0ZXIgKyAxOworICAgICAgICAgICAgb2sgPSAxOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgfQorCisgICAgICAgICAgbmFtZSArPSAxOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCFvaykgbG9nTWVzc2FnZShMT0dfRVJSLCAiaW52YWxpZCBzcGVlY2ggZHJpdmVyIHBhcmFtZXRlcjogJXMiLCBhc3NpZ25tZW50KTsKKyAgICAgIH0KKworICAgICAgaWYgKCFvaykgcmV0dXJuIFBST0dfRVhJVF9TWU5UQVg7CisgICAgICBhcmdjIC09IDE7CisgICAgfQorCisgICAgY29uc3RydWN0U3BlZWNoU3ludGhlc2l6ZXIoJnNwayk7CisgICAgaWRlbnRpZnlTcGVlY2hEcml2ZXIoc3BlZWNoLCAwKTsJCS8qIHN0YXJ0LXVwIG1lc3NhZ2VzICovCisKKyAgICBpZiAoc3RhcnRTcGVlY2hEcml2ZXJUaHJlYWQoJnNwaywgcGFyYW1ldGVyU2V0dGluZ3MpKSB7CisgICAgICBzZXRTcGVlY2hWb2x1bWUoJnNwaywgc3BlZWNoVm9sdW1lLCAwKTsKKyAgICAgIHNldFNwZWVjaFJhdGUoJnNwaywgc3BlZWNoUmF0ZSwgMCk7CisKKyAgICAgIGlmIChvcHRfdGV4dFN0cmluZyAmJiAqb3B0X3RleHRTdHJpbmcpIHsKKyAgICAgICAgc2F5KCZzcGssIG9wdF90ZXh0U3RyaW5nKTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIHByb2Nlc3NMaW5lcyhzdGRpbiwgc2F5TGluZSwgKHZvaWQgKikmc3BrKTsKKyAgICAgIH0KKworICAgICAgZHJhaW5TcGVlY2goJnNwayk7CisgICAgICBzdG9wU3BlZWNoRHJpdmVyVGhyZWFkKCZzcGspOworICAgICAgZXhpdFN0YXR1cyA9IFBST0dfRVhJVF9TVUNDRVNTOworICAgIH0gZWxzZSB7CisgICAgICBsb2dNZXNzYWdlKExPR19FUlIsICJjYW4ndCBpbml0aWFsaXplIHNwZWVjaCBkcml2ZXIiKTsKKyAgICAgIGV4aXRTdGF0dXMgPSBQUk9HX0VYSVRfRkFUQUw7CisgICAgfQorICB9IGVsc2UgeworICAgIGxvZ01lc3NhZ2UoTE9HX0VSUiwgImNhbid0IGxvYWQgc3BlZWNoIGRyaXZlciIpOworICAgIGV4aXRTdGF0dXMgPSBQUk9HX0VYSVRfRkFUQUw7CisgIH0KKworICByZXR1cm4gZXhpdFN0YXR1czsKK30KZGlmZiAtLWdpdCBhL1Byb2dyYW1zL3N0YXR1cy5jIGIvUHJvZ3JhbXMvc3RhdHVzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjlmMjA4MAotLS0gL2Rldi9udWxsCisrKyBiL1Byb2dyYW1zL3N0YXR1cy5jCkBAIC0wLDAgKzEsNDI5IEBACisvKgorICogQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyAqICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyAqCisgKiBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorICoKKyAqIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyAqCisgKiBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisgKi8KKworI2luY2x1ZGUgInByb2xvZ3VlLmgiCisKKyNpbmNsdWRlICJzdGF0dXMuaCIKKyNpbmNsdWRlICJ0aW1pbmcuaCIKKyNpbmNsdWRlICJ1cGRhdGUuaCIKKyNpbmNsdWRlICJicmxfZG90cy5oIgorI2luY2x1ZGUgImJybF91dGlscy5oIgorI2luY2x1ZGUgInNjcl9zcGVjaWFsLmgiCisjaW5jbHVkZSAiY29yZS5oIgorI2luY2x1ZGUgInByZWZzLmgiCisjaW5jbHVkZSAidHRiLmgiCisKK3N0YXRpYyB2b2lkCityZW5kZXJDaGFyYWN0ZXIgKHVuc2lnbmVkIGNoYXIgKmNlbGwsIGNoYXIgY2hhcmFjdGVyKSB7CisgICpjZWxsID0gY29udmVydENoYXJhY3RlclRvRG90cyh0ZXh0VGFibGUsIGNoYXJhY3Rlcik7Cit9CisKK3N0YXRpYyB2b2lkCityZW5kZXJEaWdpdFVwcGVyICh1bnNpZ25lZCBjaGFyICpjZWxsLCBpbnQgZGlnaXQpIHsKKyAgKmNlbGwgfD0gcG9ydHJhaXREaWdpdHNbZGlnaXQgJSAxMF07Cit9CisKK3N0YXRpYyB2b2lkCityZW5kZXJEaWdpdExvd2VyICh1bnNpZ25lZCBjaGFyICpjZWxsLCBpbnQgZGlnaXQpIHsKKyAgKmNlbGwgfD0gdG9Mb3dlckRpZ2l0KHBvcnRyYWl0RGlnaXRzW2RpZ2l0ICUgMTBdKTsKK30KKworc3RhdGljIHZvaWQKK3JlbmRlck51bWJlclZlcnRpY2FsICh1bnNpZ25lZCBjaGFyICpjZWxsLCBpbnQgbnVtYmVyKSB7CisgIHJlbmRlckRpZ2l0VXBwZXIoY2VsbCwgbnVtYmVyLzEwKTsKKyAgcmVuZGVyRGlnaXRMb3dlcihjZWxsLCBudW1iZXIpOworfQorCitzdGF0aWMgdm9pZAorcmVuZGVyTnVtYmVyVXBwZXIyICh1bnNpZ25lZCBjaGFyICpjZWxscywgaW50IG51bWJlcikgeworICByZW5kZXJEaWdpdFVwcGVyKCZjZWxsc1swXSwgbnVtYmVyLzEwKTsKKyAgcmVuZGVyRGlnaXRVcHBlcigmY2VsbHNbMV0sIG51bWJlcik7Cit9CisKK3N0YXRpYyB2b2lkCityZW5kZXJOdW1iZXJMb3dlcjIgKHVuc2lnbmVkIGNoYXIgKmNlbGxzLCBpbnQgbnVtYmVyKSB7CisgIHJlbmRlckRpZ2l0TG93ZXIoJmNlbGxzWzBdLCBudW1iZXIvMTApOworICByZW5kZXJEaWdpdExvd2VyKCZjZWxsc1sxXSwgbnVtYmVyKTsKK30KKworc3RhdGljIHZvaWQKK3JlbmRlck51bWJlcnMyICh1bnNpZ25lZCBjaGFyICpjZWxscywgaW50IHVwcGVyLCBpbnQgbG93ZXIpIHsKKyAgcmVuZGVyTnVtYmVyVXBwZXIyKCZjZWxsc1swXSwgdXBwZXIpOworICByZW5kZXJOdW1iZXJMb3dlcjIoJmNlbGxzWzBdLCBsb3dlcik7Cit9CisKK3N0YXRpYyB2b2lkCityZW5kZXJOdW1iZXJVcHBlcjMgKHVuc2lnbmVkIGNoYXIgKmNlbGxzLCBpbnQgbnVtYmVyKSB7CisgIHJlbmRlckRpZ2l0VXBwZXIoJmNlbGxzWzBdLCBudW1iZXIvMTAwKTsKKyAgcmVuZGVyRGlnaXRVcHBlcigmY2VsbHNbMV0sIG51bWJlci8xMCk7CisgIHJlbmRlckRpZ2l0VXBwZXIoJmNlbGxzWzJdLCBudW1iZXIpOworfQorCitzdGF0aWMgdm9pZAorcmVuZGVyTnVtYmVyTG93ZXIzICh1bnNpZ25lZCBjaGFyICpjZWxscywgaW50IG51bWJlcikgeworICByZW5kZXJEaWdpdExvd2VyKCZjZWxsc1swXSwgbnVtYmVyLzEwMCk7CisgIHJlbmRlckRpZ2l0TG93ZXIoJmNlbGxzWzFdLCBudW1iZXIvMTApOworICByZW5kZXJEaWdpdExvd2VyKCZjZWxsc1syXSwgbnVtYmVyKTsKK30KKworc3RhdGljIHZvaWQKK3JlbmRlck51bWJlcnMzICh1bnNpZ25lZCBjaGFyICpjZWxscywgaW50IHVwcGVyLCBpbnQgbG93ZXIpIHsKKyAgcmVuZGVyTnVtYmVyVXBwZXIzKCZjZWxsc1swXSwgdXBwZXIpOworICByZW5kZXJOdW1iZXJMb3dlcjMoJmNlbGxzWzBdLCBsb3dlcik7Cit9CisKK3N0YXRpYyB2b2lkCityZW5kZXJDb29yZGluYXRlczIgKHVuc2lnbmVkIGNoYXIgKmNlbGxzLCBpbnQgY29sdW1uLCBpbnQgcm93KSB7CisgIHJlbmRlck51bWJlcnMyKCZjZWxsc1swXSwgcm93LCBjb2x1bW4pOworfQorCitzdGF0aWMgdm9pZAorcmVuZGVyQ29vcmRpbmF0ZXMzICh1bnNpZ25lZCBjaGFyICpjZWxscywgaW50IGNvbHVtbiwgaW50IHJvdykgeworICByZW5kZXJOdW1iZXJzMygmY2VsbHNbMF0sIHJvdywgY29sdW1uKTsKK30KKworc3RhdGljIHZvaWQKK3JlbmRlckNvb3JkaW5hdGVzQWxwaGFiZXRpYyAodW5zaWduZWQgY2hhciAqY2VsbCwgaW50IGNvbHVtbiwgaW50IHJvdykgeworICAvKiB0aGUgY29vcmRpbmF0ZXMgYXJlIHByZXNlbnRlZCBhcyBhbiB1bmRlcmxpbmVkIGxldHRlciBhcyB0aGUgQWx2YSBET1MgVFNSICovCisgIGlmICghU0NSX0NPT1JESU5BVEVTX09LKGNvbHVtbiwgcm93KSkgeworICAgICpjZWxsID0gY29udmVydENoYXJhY3RlclRvRG90cyh0ZXh0VGFibGUsIFdDX0MoJ3onKSk7CisgIH0gZWxzZSB7CisgICAgY29uc3QgaW50MzJfdCBoZWlnaHQgPSAyNTsKKyAgICBjb25zdCBpbnQzMl90IGZyZXF1ZW5jeSA9IHJvdyAvIGhlaWdodDsKKworICAgIGlmIChmcmVxdWVuY3kpIHsKKyAgICAgIGNvbnN0IGludDMyX3QgaW50ZXJ2YWwgPSBOU0VDU19QRVJfU0VDIC8gKGZyZXF1ZW5jeSAqIDIpOworICAgICAgVGltZVZhbHVlIHRpbWU7CisKKyAgICAgIGdldE1vbm90b25pY1RpbWUoJnRpbWUpOworICAgICAgc2NoZWR1bGVVcGRhdGVJbigiYWx2YSBzdGF0dXMgZmllbGQiLAorICAgICAgICAgICAgICAgICAgICAgICAoKChpbnRlcnZhbCAtICh0aW1lLm5hbm9zZWNvbmRzICUgaW50ZXJ2YWwpKSAvIE5TRUNTX1BFUl9NU0VDKSArIDEpKTsKKworICAgICAgaWYgKCEoKHRpbWUubmFub3NlY29uZHMgLyBpbnRlcnZhbCkgJSAyKSkgeworICAgICAgICAqY2VsbCA9IDA7CisgICAgICAgIHJldHVybjsKKyAgICAgIH0KKyAgICB9CisKKyAgICAqY2VsbCA9IGNvbnZlcnRDaGFyYWN0ZXJUb0RvdHModGV4dFRhYmxlLCAoKHJvdyAlIGhlaWdodCkgKyBXQ19DKCdhJykpKQorICAgICAgICAgIHwgKChjb2x1bW4gLyB0ZXh0Q291bnQpIDw8IDYpOworICB9Cit9CisKK3R5cGVkZWYgdm9pZCAoKlJlbmRlclN0YXR1c0ZpZWxkKSAodW5zaWduZWQgY2hhciAqY2VsbHMpOworCitzdGF0aWMgdm9pZAorcmVuZGVyU3RhdHVzRmllbGRfY3Vyc29yQ29sdW1uICh1bnNpZ25lZCBjaGFyICpjZWxscykgeworICByZW5kZXJOdW1iZXJWZXJ0aWNhbChjZWxscywgU0NSX0NPTFVNTl9OVU1CRVIoc2NyLnBvc3gpKTsKK30KKworc3RhdGljIHZvaWQKK3JlbmRlclN0YXR1c0ZpZWxkX2N1cnNvclJvdyAodW5zaWduZWQgY2hhciAqY2VsbHMpIHsKKyAgcmVuZGVyTnVtYmVyVmVydGljYWwoY2VsbHMsIFNDUl9ST1dfTlVNQkVSKHNjci5wb3N5KSk7Cit9CisKK3N0YXRpYyB2b2lkCityZW5kZXJTdGF0dXNGaWVsZF93aW5kb3dDb2x1bW4gKHVuc2lnbmVkIGNoYXIgKmNlbGxzKSB7CisgIHJlbmRlck51bWJlclZlcnRpY2FsKGNlbGxzLCBTQ1JfQ09MVU1OX05VTUJFUihzZXMtPndpbngpKTsKK30KKworc3RhdGljIHZvaWQKK3JlbmRlclN0YXR1c0ZpZWxkX3dpbmRvd1JvdyAodW5zaWduZWQgY2hhciAqY2VsbHMpIHsKKyAgcmVuZGVyTnVtYmVyVmVydGljYWwoY2VsbHMsIFNDUl9ST1dfTlVNQkVSKHNlcy0+d2lueSkpOworfQorCitzdGF0aWMgdm9pZAorcmVuZGVyU3RhdHVzRmllbGRfY3Vyc29yQ29vcmRpbmF0ZXMyICh1bnNpZ25lZCBjaGFyICpjZWxscykgeworICByZW5kZXJDb29yZGluYXRlczIoY2VsbHMsIFNDUl9DT0xVTU5fTlVNQkVSKHNjci5wb3N4KSwgU0NSX1JPV19OVU1CRVIoc2NyLnBvc3kpKTsKK30KKworc3RhdGljIHZvaWQKK3JlbmRlclN0YXR1c0ZpZWxkX3dpbmRvd0Nvb3JkaW5hdGVzMiAodW5zaWduZWQgY2hhciAqY2VsbHMpIHsKKyAgcmVuZGVyQ29vcmRpbmF0ZXMyKGNlbGxzLCBTQ1JfQ09MVU1OX05VTUJFUihzZXMtPndpbngpLCBTQ1JfUk9XX05VTUJFUihzZXMtPndpbnkpKTsKK30KKworc3RhdGljIHZvaWQKK3JlbmRlclN0YXR1c0ZpZWxkX2N1cnNvckNvb3JkaW5hdGVzMyAodW5zaWduZWQgY2hhciAqY2VsbHMpIHsKKyAgcmVuZGVyQ29vcmRpbmF0ZXMzKGNlbGxzLCBTQ1JfQ09MVU1OX05VTUJFUihzY3IucG9zeCksIFNDUl9ST1dfTlVNQkVSKHNjci5wb3N5KSk7Cit9CisKK3N0YXRpYyB2b2lkCityZW5kZXJTdGF0dXNGaWVsZF93aW5kb3dDb29yZGluYXRlczMgKHVuc2lnbmVkIGNoYXIgKmNlbGxzKSB7CisgIHJlbmRlckNvb3JkaW5hdGVzMyhjZWxscywgU0NSX0NPTFVNTl9OVU1CRVIoc2VzLT53aW54KSwgU0NSX1JPV19OVU1CRVIoc2VzLT53aW55KSk7Cit9CisKK3N0YXRpYyB2b2lkCityZW5kZXJTdGF0dXNGaWVsZF9jdXJzb3JBbmRXaW5kb3dDb2x1bW4yICh1bnNpZ25lZCBjaGFyICpjZWxscykgeworICByZW5kZXJOdW1iZXJzMihjZWxscywKKyAgICBTQ1JfQ09MVU1OX05VTUJFUihzY3IucG9zeCksCisgICAgU0NSX0NPTFVNTl9OVU1CRVIoc2VzLT53aW54KQorICApOworfQorCitzdGF0aWMgdm9pZAorcmVuZGVyU3RhdHVzRmllbGRfY3Vyc29yQW5kV2luZG93Um93MiAodW5zaWduZWQgY2hhciAqY2VsbHMpIHsKKyAgcmVuZGVyTnVtYmVyczIoY2VsbHMsCisgICAgU0NSX1JPV19OVU1CRVIoc2NyLnBvc3kpLAorICAgIFNDUl9ST1dfTlVNQkVSKHNlcy0+d2lueSkKKyAgKTsKK30KKworc3RhdGljIHZvaWQKK3JlbmRlclN0YXR1c0ZpZWxkX2N1cnNvckFuZFdpbmRvd0NvbHVtbjMgKHVuc2lnbmVkIGNoYXIgKmNlbGxzKSB7CisgIHJlbmRlck51bWJlcnMzKGNlbGxzLAorICAgIFNDUl9DT0xVTU5fTlVNQkVSKHNjci5wb3N4KSwKKyAgICBTQ1JfQ09MVU1OX05VTUJFUihzZXMtPndpbngpCisgICk7Cit9CisKK3N0YXRpYyB2b2lkCityZW5kZXJTdGF0dXNGaWVsZF9jdXJzb3JBbmRXaW5kb3dSb3czICh1bnNpZ25lZCBjaGFyICpjZWxscykgeworICByZW5kZXJOdW1iZXJzMyhjZWxscywKKyAgICBTQ1JfUk9XX05VTUJFUihzY3IucG9zeSksCisgICAgU0NSX1JPV19OVU1CRVIoc2VzLT53aW55KQorICApOworfQorCitzdGF0aWMgdm9pZAorcmVuZGVyU3RhdHVzRmllbGRfc2NyZWVuTnVtYmVyICh1bnNpZ25lZCBjaGFyICpjZWxscykgeworICBjaGFyIGNoYXJhY3RlciA9CisgICAgaXNTcGVjaWFsU2NyZWVuKFNDUl9IRUxQKSAgPyAnaCc6CisgICAgaXNTcGVjaWFsU2NyZWVuKFNDUl9NRU5VKSAgPyAnbSc6CisgICAgaXNTcGVjaWFsU2NyZWVuKFNDUl9GUk9aRU4pPyAnZic6CisgICAgMDsKKworICBpZiAoY2hhcmFjdGVyKSB7CisgICAgcmVuZGVyQ2hhcmFjdGVyKGNlbGxzLCBjaGFyYWN0ZXIpOworICB9IGVsc2UgeworICAgIHJlbmRlck51bWJlclZlcnRpY2FsKGNlbGxzLCBzY3IubnVtYmVyKTsKKyAgfQorfQorCitzdGF0aWMgdm9pZAorcmVuZGVyU3RhdHVzRmllbGRfc3RhdGVEb3RzICh1bnNpZ25lZCBjaGFyICpjZWxscykgeworICBjZWxsc1swXSA9IChpc1NwZWNpYWxTY3JlZW4oU0NSX0ZST1pFTikgID8gQlJMX0RPVF8xOiAwKQorICAgICAgICAgICB8IChwcmVmcy5zaG93U2NyZWVuQ3Vyc29yICAgICAgID8gQlJMX0RPVF80OiAwKQorICAgICAgICAgICB8IChzZXMtPmRpc3BsYXlNb2RlICAgICAgICAgICAgID8gQlJMX0RPVF8yOiAwKQorICAgICAgICAgICB8IChwcmVmcy5zaG93QXR0cmlidXRlcyAgICAgICAgID8gQlJMX0RPVF81OiAwKQorICAgICAgICAgICB8IChwcmVmcy5hbGVydFR1bmVzICAgICAgICAgICAgID8gQlJMX0RPVF8zOiAwKQorICAgICAgICAgICB8IChwcmVmcy5icmFpbGxlVHlwaW5nTW9kZSAgICAgID8gQlJMX0RPVF82OiAwKQorICAgICAgICAgICB8IChzZXMtPnRyYWNrU2NyZWVuQ3Vyc29yICAgICAgID8gQlJMX0RPVF83OiAwKQorICAgICAgICAgICB8IChwcmVmcy5icmFpbGxlS2V5Ym9hcmRFbmFibGVkID8gQlJMX0RPVF84OiAwKQorICAgICAgICAgICA7Cit9CisKK3N0YXRpYyB2b2lkCityZW5kZXJTdGF0dXNGaWVsZF9zdGF0ZUxldHRlciAodW5zaWduZWQgY2hhciAqY2VsbHMpIHsKKyAgcmVuZGVyQ2hhcmFjdGVyKGNlbGxzLAorICAgIHNlcy0+ZGlzcGxheU1vZGUgICAgICAgICAgICA/IFdDX0MoJ2EnKToKKyAgICBpc1NwZWNpYWxTY3JlZW4oU0NSX0hFTFApICAgPyBXQ19DKCdoJyk6CisgICAgaXNTcGVjaWFsU2NyZWVuKFNDUl9NRU5VKSAgID8gV0NfQygnbScpOgorICAgIGlzU3BlY2lhbFNjcmVlbihTQ1JfRlJPWkVOKSA/IFdDX0MoJ2YnKToKKyAgICBzZXMtPnRyYWNrU2NyZWVuQ3Vyc29yICAgICAgPyBXQ19DKCd0Jyk6CisgICAgV0NfQygnICcpCisgICk7Cit9CisKK3N0YXRpYyB2b2lkCityZW5kZXJTdGF0dXNGaWVsZF90aW1lICh1bnNpZ25lZCBjaGFyICpjZWxscykgeworICBUaW1lVmFsdWUgdmFsdWU7CisgIGdldEN1cnJlbnRUaW1lKCZ2YWx1ZSk7CisgIHNjaGVkdWxlVXBkYXRlSW4oInRpbWUgc3RhdHVzIGZpZWxkIiwgbWlsbGlzZWNvbmRzVGlsbE5leHRNaW51dGUoJnZhbHVlKSk7CisKKyAgVGltZUNvbXBvbmVudHMgY29tcG9uZW50czsKKyAgZXhwYW5kVGltZVZhbHVlKCZ2YWx1ZSwgJmNvbXBvbmVudHMpOworICByZW5kZXJOdW1iZXJzMihjZWxscywgY29tcG9uZW50cy5ob3VyLCBjb21wb25lbnRzLm1pbnV0ZSk7Cit9CisKK3N0YXRpYyB2b2lkCityZW5kZXJTdGF0dXNGaWVsZF9hbHBoYWJldGljV2luZG93Q29vcmRpbmF0ZXMgKHVuc2lnbmVkIGNoYXIgKmNlbGxzKSB7CisgIHJlbmRlckNvb3JkaW5hdGVzQWxwaGFiZXRpYyhjZWxscywgc2VzLT53aW54LCBzZXMtPndpbnkpOworfQorCitzdGF0aWMgdm9pZAorcmVuZGVyU3RhdHVzRmllbGRfYWxwaGFiZXRpY0N1cnNvckNvb3JkaW5hdGVzICh1bnNpZ25lZCBjaGFyICpjZWxscykgeworICByZW5kZXJDb29yZGluYXRlc0FscGhhYmV0aWMoY2VsbHMsIHNjci5wb3N4LCBzY3IucG9zeSk7Cit9CisKK3N0YXRpYyB2b2lkCityZW5kZXJTdGF0dXNGaWVsZF9nZW5lcmljICh1bnNpZ25lZCBjaGFyICpjZWxscykgeworICBjZWxsc1tHU0NfRklSU1RdID0gR1NDX01BUktFUjsKKyAgY2VsbHNbZ3NjQnJhaWxsZVdpbmRvd0NvbHVtbl0gPSBTQ1JfQ09MVU1OX05VTUJFUihzZXMtPndpbngpOworICBjZWxsc1tnc2NCcmFpbGxlV2luZG93Um93XSA9IFNDUl9ST1dfTlVNQkVSKHNlcy0+d2lueSk7CisgIGNlbGxzW2dzY1NjcmVlbkN1cnNvckNvbHVtbl0gPSBTQ1JfQ09MVU1OX05VTUJFUihzY3IucG9zeCk7CisgIGNlbGxzW2dzY1NjcmVlbkN1cnNvclJvd10gPSBTQ1JfUk9XX05VTUJFUihzY3IucG9zeSk7CisgIGNlbGxzW2dzY1NjcmVlbk51bWJlcl0gPSBzY3IubnVtYmVyOworICBjZWxsc1tnc2NGcm96ZW5TY3JlZW5dID0gaXNTcGVjaWFsU2NyZWVuKFNDUl9GUk9aRU4pOworICBjZWxsc1tnc2NEaXNwbGF5TW9kZV0gPSBzZXMtPmRpc3BsYXlNb2RlOworICBjZWxsc1tnc2NTaXhEb3RDb21wdXRlckJyYWlsbGVdID0gaXNTaXhEb3RDb21wdXRlckJyYWlsbGUoKTsKKyAgY2VsbHNbZ3NjQ29udHJhY3RlZEJyYWlsbGVdID0gaXNDb250cmFjdGVkQnJhaWxsZSgpOworICBjZWxsc1tnc2NTbGlkaW5nQnJhaWxsZVdpbmRvd10gPSBwcmVmcy5zbGlkaW5nQnJhaWxsZVdpbmRvdzsKKyAgY2VsbHNbZ3NjU2tpcElkZW50aWNhbExpbmVzXSA9IHByZWZzLnNraXBJZGVudGljYWxMaW5lczsKKyAgY2VsbHNbZ3NjU2tpcEJsYW5rQnJhaWxsZVdpbmRvd3NdID0gcHJlZnMuc2tpcEJsYW5rQnJhaWxsZVdpbmRvd3M7CisgIGNlbGxzW2dzY1Nob3dTY3JlZW5DdXJzb3JdID0gcHJlZnMuc2hvd1NjcmVlbkN1cnNvcjsKKyAgY2VsbHNbZ3NjSGlkZVNjcmVlbkN1cnNvcl0gPSBzZXMtPmhpZGVTY3JlZW5DdXJzb3I7CisgIGNlbGxzW2dzY1RyYWNrU2NyZWVuQ3Vyc29yXSA9IHNlcy0+dHJhY2tTY3JlZW5DdXJzb3I7CisgIGNlbGxzW2dzY1NjcmVlbkN1cnNvclN0eWxlXSA9IHByZWZzLnNjcmVlbkN1cnNvclN0eWxlOworICBjZWxsc1tnc2NCbGlua2luZ1NjcmVlbkN1cnNvcl0gPSBwcmVmcy5ibGlua2luZ1NjcmVlbkN1cnNvcjsKKyAgY2VsbHNbZ3NjU2hvd0F0dHJpYnV0ZXNdID0gcHJlZnMuc2hvd0F0dHJpYnV0ZXM7CisgIGNlbGxzW2dzY0JsaW5raW5nQXR0cmlidXRlc10gPSBwcmVmcy5ibGlua2luZ0F0dHJpYnV0ZXM7CisgIGNlbGxzW2dzY0JsaW5raW5nQ2FwaXRhbHNdID0gcHJlZnMuYmxpbmtpbmdDYXBpdGFsczsKKyAgY2VsbHNbZ3NjQWxlcnRUdW5lc10gPSBwcmVmcy5hbGVydFR1bmVzOworICBjZWxsc1tnc2NBdXRvcmVwZWF0XSA9IHByZWZzLmF1dG9yZXBlYXRFbmFibGVkOworICBjZWxsc1tnc2NBdXRvc3BlYWtdID0gcHJlZnMuYXV0b3NwZWFrOworICBjZWxsc1tnc2NCcmFpbGxlVHlwaW5nTW9kZV0gPSBwcmVmcy5icmFpbGxlVHlwaW5nTW9kZTsKK30KKworc3RhdGljIHZvaWQKK3JlbmRlclN0YXR1c0ZpZWxkX3NwYWNlICh1bnNpZ25lZCBjaGFyICpjZWxscykgeworICBjZWxsc1swXSA9IDA7Cit9CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgUmVuZGVyU3RhdHVzRmllbGQgcmVuZGVyOworICB1bnNpZ25lZCBjaGFyIGxlbmd0aDsKK30gU3RhdHVzRmllbGRFbnRyeTsKKworc3RhdGljIGNvbnN0IFN0YXR1c0ZpZWxkRW50cnkgc3RhdHVzRmllbGRUYWJsZVtdID0geworICBbc2ZFbmRdID0geworICAgIC5yZW5kZXIgPSBOVUxMLAorICAgIC5sZW5ndGggPSAwCisgIH0KKyAgLAorICBbc2ZXaW5kb3dDb29yZGluYXRlczJdID0geworICAgIC5yZW5kZXIgPSByZW5kZXJTdGF0dXNGaWVsZF93aW5kb3dDb29yZGluYXRlczIsCisgICAgLmxlbmd0aCA9IDIKKyAgfQorICAsCisgIFtzZldpbmRvd0NvbHVtbl0gPSB7CisgICAgLnJlbmRlciA9IHJlbmRlclN0YXR1c0ZpZWxkX3dpbmRvd0NvbHVtbiwKKyAgICAubGVuZ3RoID0gMQorICB9CisgICwKKyAgW3NmV2luZG93Um93XSA9IHsKKyAgICAucmVuZGVyID0gcmVuZGVyU3RhdHVzRmllbGRfd2luZG93Um93LAorICAgIC5sZW5ndGggPSAxCisgIH0KKyAgLAorICBbc2ZDdXJzb3JDb29yZGluYXRlczJdID0geworICAgIC5yZW5kZXIgPSByZW5kZXJTdGF0dXNGaWVsZF9jdXJzb3JDb29yZGluYXRlczIsCisgICAgLmxlbmd0aCA9IDIKKyAgfQorICAsCisgIFtzZkN1cnNvckNvbHVtbl0gPSB7CisgICAgLnJlbmRlciA9IHJlbmRlclN0YXR1c0ZpZWxkX2N1cnNvckNvbHVtbiwKKyAgICAubGVuZ3RoID0gMQorICB9CisgICwKKyAgW3NmQ3Vyc29yUm93XSA9IHsKKyAgICAucmVuZGVyID0gcmVuZGVyU3RhdHVzRmllbGRfY3Vyc29yUm93LAorICAgIC5sZW5ndGggPSAxCisgIH0KKyAgLAorICBbc2ZDdXJzb3JBbmRXaW5kb3dDb2x1bW4yXSA9IHsKKyAgICAucmVuZGVyID0gcmVuZGVyU3RhdHVzRmllbGRfY3Vyc29yQW5kV2luZG93Q29sdW1uMiwKKyAgICAubGVuZ3RoID0gMgorICB9CisgICwKKyAgW3NmQ3Vyc29yQW5kV2luZG93Um93Ml0gPSB7CisgICAgLnJlbmRlciA9IHJlbmRlclN0YXR1c0ZpZWxkX2N1cnNvckFuZFdpbmRvd1JvdzIsCisgICAgLmxlbmd0aCA9IDIKKyAgfQorICAsCisgIFtzZlNjcmVlbk51bWJlcl0gPSB7CisgICAgLnJlbmRlciA9IHJlbmRlclN0YXR1c0ZpZWxkX3NjcmVlbk51bWJlciwKKyAgICAubGVuZ3RoID0gMQorICB9CisgICwKKyAgW3NmU3RhdGVEb3RzXSA9IHsKKyAgICAucmVuZGVyID0gcmVuZGVyU3RhdHVzRmllbGRfc3RhdGVEb3RzLAorICAgIC5sZW5ndGggPSAxCisgIH0KKyAgLAorICBbc2ZTdGF0ZUxldHRlcl0gPSB7CisgICAgLnJlbmRlciA9IHJlbmRlclN0YXR1c0ZpZWxkX3N0YXRlTGV0dGVyLAorICAgIC5sZW5ndGggPSAxCisgIH0KKyAgLAorICBbc2ZUaW1lXSA9IHsKKyAgICAucmVuZGVyID0gcmVuZGVyU3RhdHVzRmllbGRfdGltZSwKKyAgICAubGVuZ3RoID0gMgorICB9CisgICwKKyAgW3NmQWxwaGFiZXRpY1dpbmRvd0Nvb3JkaW5hdGVzXSA9IHsKKyAgICAucmVuZGVyID0gcmVuZGVyU3RhdHVzRmllbGRfYWxwaGFiZXRpY1dpbmRvd0Nvb3JkaW5hdGVzLAorICAgIC5sZW5ndGggPSAxCisgIH0KKyAgLAorICBbc2ZBbHBoYWJldGljQ3Vyc29yQ29vcmRpbmF0ZXNdID0geworICAgIC5yZW5kZXIgPSByZW5kZXJTdGF0dXNGaWVsZF9hbHBoYWJldGljQ3Vyc29yQ29vcmRpbmF0ZXMsCisgICAgLmxlbmd0aCA9IDEKKyAgfQorICAsCisgIFtzZkdlbmVyaWNdID0geworICAgIC5yZW5kZXIgPSByZW5kZXJTdGF0dXNGaWVsZF9nZW5lcmljLAorICAgIC5sZW5ndGggPSBHU0NfQ09VTlQKKyAgfSwKKworICBbc2ZDdXJzb3JDb29yZGluYXRlczNdID0geworICAgIC5yZW5kZXIgPSByZW5kZXJTdGF0dXNGaWVsZF9jdXJzb3JDb29yZGluYXRlczMsCisgICAgLmxlbmd0aCA9IDMKKyAgfQorICAsCisgIFtzZldpbmRvd0Nvb3JkaW5hdGVzM10gPSB7CisgICAgLnJlbmRlciA9IHJlbmRlclN0YXR1c0ZpZWxkX3dpbmRvd0Nvb3JkaW5hdGVzMywKKyAgICAubGVuZ3RoID0gMworICB9CisgICwKKyAgW3NmQ3Vyc29yQW5kV2luZG93Q29sdW1uM10gPSB7CisgICAgLnJlbmRlciA9IHJlbmRlclN0YXR1c0ZpZWxkX2N1cnNvckFuZFdpbmRvd0NvbHVtbjMsCisgICAgLmxlbmd0aCA9IDMKKyAgfQorICAsCisgIFtzZkN1cnNvckFuZFdpbmRvd1JvdzNdID0geworICAgIC5yZW5kZXIgPSByZW5kZXJTdGF0dXNGaWVsZF9jdXJzb3JBbmRXaW5kb3dSb3czLAorICAgIC5sZW5ndGggPSAzCisgIH0KKyAgLAorICBbc2ZTcGFjZV0gPSB7CisgICAgLnJlbmRlciA9IHJlbmRlclN0YXR1c0ZpZWxkX3NwYWNlLAorICAgIC5sZW5ndGggPSAxCisgIH0sCit9OworCitzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IHN0YXR1c0ZpZWxkQ291bnQgPSBBUlJBWV9DT1VOVChzdGF0dXNGaWVsZFRhYmxlKTsKKwordW5zaWduZWQgaW50CitnZXRTdGF0dXNGaWVsZHNMZW5ndGggKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmZpZWxkcykgeworICB1bnNpZ25lZCBpbnQgbGVuZ3RoID0gMDsKKyAgd2hpbGUgKCpmaWVsZHMgIT0gc2ZFbmQpIGxlbmd0aCArPSBzdGF0dXNGaWVsZFRhYmxlWypmaWVsZHMrK10ubGVuZ3RoOworICByZXR1cm4gbGVuZ3RoOworfQorCit2b2lkCityZW5kZXJTdGF0dXNGaWVsZHMgKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmZpZWxkcywgdW5zaWduZWQgY2hhciAqY2VsbHMpIHsKKyAgd2hpbGUgKCpmaWVsZHMgIT0gc2ZFbmQpIHsKKyAgICBTdGF0dXNGaWVsZCBmaWVsZCA9ICpmaWVsZHMrKzsKKworICAgIGlmIChmaWVsZCA8IHN0YXR1c0ZpZWxkQ291bnQpIHsKKyAgICAgIGNvbnN0IFN0YXR1c0ZpZWxkRW50cnkgKnNmID0gJnN0YXR1c0ZpZWxkVGFibGVbZmllbGRdOworICAgICAgc2YtPnJlbmRlcihjZWxscyk7CisgICAgICBjZWxscyArPSBzZi0+bGVuZ3RoOworICAgIH0KKyAgfQorfQpkaWZmIC0tZ2l0IGEvUHJvZ3JhbXMvc3RhdHVzLmggYi9Qcm9ncmFtcy9zdGF0dXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNDY1MjQ4Ci0tLSAvZGV2L251bGwKKysrIGIvUHJvZ3JhbXMvc3RhdHVzLmgKQEAgLTAsMCArMSwzNSBAQAorLyoKKyAqIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisgKiAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisgKgorICogQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKKyNpZm5kZWYgQlJMVFRZX0lOQ0xVREVEX1NUQVRVUworI2RlZmluZSBCUkxUVFlfSU5DTFVERURfU1RBVFVTCisKKyNpbmNsdWRlICJzdGF0dXNfdHlwZXMuaCIKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZiAvKiBfX2NwbHVzcGx1cyAqLworCitleHRlcm4gdW5zaWduZWQgaW50IGdldFN0YXR1c0ZpZWxkc0xlbmd0aCAoY29uc3QgdW5zaWduZWQgY2hhciAqZmllbGRzKTsKK2V4dGVybiB2b2lkIHJlbmRlclN0YXR1c0ZpZWxkcyAoY29uc3QgdW5zaWduZWQgY2hhciAqZmllbGRzLCB1bnNpZ25lZCBjaGFyICpjZWxscyk7CisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmIC8qIF9fY3BsdXNwbHVzICovCisKKyNlbmRpZiAvKiBCUkxUVFlfSU5DTFVERURfU1RBVFVTICovCmRpZmYgLS1naXQgYS9Qcm9ncmFtcy9zeXNfZGFyd2luLmMgYi9Qcm9ncmFtcy9zeXNfZGFyd2luLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTI1ZjJjZQotLS0gL2Rldi9udWxsCisrKyBiL1Byb2dyYW1zL3N5c19kYXJ3aW4uYwpAQCAtMCwwICsxLDIzIEBACisvKgorICogQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyAqICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyAqCisgKiBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorICoKKyAqIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyAqCisgKiBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisgKi8KKworI2luY2x1ZGUgInByb2xvZ3VlLmgiCisKKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworI2luY2x1ZGUgInN5c3RlbS5oIgpkaWZmIC0tZ2l0IGEvUHJvZ3JhbXMvc3lzX2ZyZWVic2QuYyBiL1Byb2dyYW1zL3N5c19mcmVlYnNkLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2QxMDljNwotLS0gL2Rldi9udWxsCisrKyBiL1Byb2dyYW1zL3N5c19mcmVlYnNkLmMKQEAgLTAsMCArMSwyNyBAQAorLyoKKyAqIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisgKiAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisgKgorICogQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKKyNpbmNsdWRlICJwcm9sb2d1ZS5oIgorCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVkZSA8c3lzL2lvY3RsLmg+CisKKyNpbmNsdWRlICJzeXN0ZW0uaCIKZGlmZiAtLWdpdCBhL1Byb2dyYW1zL3N5c19rZnJlZWJzZC5jIGIvUHJvZ3JhbXMvc3lzX2tmcmVlYnNkLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2QxMDljNwotLS0gL2Rldi9udWxsCisrKyBiL1Byb2dyYW1zL3N5c19rZnJlZWJzZC5jCkBAIC0wLDAgKzEsMjcgQEAKKy8qCisgKiBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorICogICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorICoKKyAqIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorICoKKyAqIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyAqLworCisjaW5jbHVkZSAicHJvbG9ndWUuaCIKKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxmY250bC5oPgorI2luY2x1ZGUgPHN5cy9pb2N0bC5oPgorCisjaW5jbHVkZSAic3lzdGVtLmgiCmRpZmYgLS1naXQgYS9Qcm9ncmFtcy9zeXNfbmV0YnNkLmMgYi9Qcm9ncmFtcy9zeXNfbmV0YnNkLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDNlNGY5ZgotLS0gL2Rldi9udWxsCisrKyBiL1Byb2dyYW1zL3N5c19uZXRic2QuYwpAQCAtMCwwICsxLDI4IEBACisvKgorICogQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyAqICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyAqCisgKiBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorICoKKyAqIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyAqCisgKiBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisgKi8KKworI2luY2x1ZGUgInByb2xvZ3VlLmgiCisKKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVkZSA8c3lzL2lvY3RsLmg+CisjaW5jbHVkZSA8c3lzL2F1ZGlvaW8uaD4KKyNpbmNsdWRlIDxzeXMvdGltZS5oPgorCisjaW5jbHVkZSAic3lzdGVtLmgiCmRpZmYgLS1naXQgYS9Qcm9ncmFtcy9zeXNfb3BlbmJzZC5jIGIvUHJvZ3JhbXMvc3lzX29wZW5ic2QuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wM2U0ZjlmCi0tLSAvZGV2L251bGwKKysrIGIvUHJvZ3JhbXMvc3lzX29wZW5ic2QuYwpAQCAtMCwwICsxLDI4IEBACisvKgorICogQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyAqICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyAqCisgKiBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorICoKKyAqIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyAqCisgKiBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisgKi8KKworI2luY2x1ZGUgInByb2xvZ3VlLmgiCisKKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVkZSA8c3lzL2lvY3RsLmg+CisjaW5jbHVkZSA8c3lzL2F1ZGlvaW8uaD4KKyNpbmNsdWRlIDxzeXMvdGltZS5oPgorCisjaW5jbHVkZSAic3lzdGVtLmgiCmRpZmYgLS1naXQgYS9Qcm9ncmFtcy9zeXNfc29sYXJpcy5jIGIvUHJvZ3JhbXMvc3lzX3NvbGFyaXMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMDQxYzg3Ci0tLSAvZGV2L251bGwKKysrIGIvUHJvZ3JhbXMvc3lzX3NvbGFyaXMuYwpAQCAtMCwwICsxLDI2IEBACisvKgorICogQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyAqICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyAqCisgKiBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorICoKKyAqIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyAqCisgKiBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisgKi8KKworI2luY2x1ZGUgInByb2xvZ3VlLmgiCisKKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPGZjbnRsLmg+CisKKyNpbmNsdWRlICJsb2cuaCIKKyNpbmNsdWRlICJzeXN0ZW0uaCIKZGlmZiAtLWdpdCBhL1Byb2dyYW1zL3N5c2NhbGxzX2xpbnV4LmggYi9Qcm9ncmFtcy9zeXNjYWxsc19saW51eC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcxN2M5ZmIKLS0tIC9kZXYvbnVsbAorKysgYi9Qcm9ncmFtcy9zeXNjYWxsc19saW51eC5oCkBAIC0wLDAgKzEsNDIxIEBACisvKgorICogQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyAqICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyAqCisgKiBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorICoKKyAqIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyAqCisgKiBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L3VuaXN0ZC5oPgorCitTQ0ZfQkVHSU5fVkFMVUVTKHN5c3RlbUNhbGwpCisgICNpZmRlZiBfX05SX2FjY2VwdAorICB7X19OUl9hY2NlcHR9LAorICAjZW5kaWYgLyogX19OUl9hY2NlcHQgKi8KKyAgCisgICNpZmRlZiBfX05SX2FjY2VzcworICB7X19OUl9hY2Nlc3N9LAorICAjZW5kaWYgLyogX19OUl9hY2Nlc3MgKi8KKyAgCisgICNpZmRlZiBfX05SX2FyY2hfcHJjdGwKKyAge19fTlJfYXJjaF9wcmN0bH0sCisgICNlbmRpZiAvKiBfX05SX2FyY2hfcHJjdGwgKi8KKyAgCisgICNpZmRlZiBfX05SX2JpbmQKKyAge19fTlJfYmluZH0sCisgICNlbmRpZiAvKiBfX05SX2JpbmQgKi8KKyAgCisgICNpZmRlZiBfX05SX2JyaworICB7X19OUl9icmt9LAorICAjZW5kaWYgLyogX19OUl9icmsgKi8KKyAgCisgICNpZmRlZiBfX05SX2NoZGlyCisgIHtfX05SX2NoZGlyfSwKKyAgI2VuZGlmIC8qIF9fTlJfY2hkaXIgKi8KKyAgCisgICNpZmRlZiBfX05SX2NobW9kCisgIHtfX05SX2NobW9kfSwKKyAgI2VuZGlmIC8qIF9fTlJfY2htb2QgKi8KKyAgCisgICNpZmRlZiBfX05SX2Nsb2NrX2dldHJlcworICB7X19OUl9jbG9ja19nZXRyZXN9LAorICAjZW5kaWYgLyogX19OUl9jbG9ja19nZXRyZXMgKi8KKyAgCisgICNpZmRlZiBfX05SX2Nsb2NrX2dldHRpbWUKKyAge19fTlJfY2xvY2tfZ2V0dGltZX0sCisgICNlbmRpZiAvKiBfX05SX2Nsb2NrX2dldHRpbWUgKi8KKyAgCisgICNpZmRlZiBfX05SX2Nsb2NrX25hbm9zbGVlcAorICB7X19OUl9jbG9ja19uYW5vc2xlZXB9LAorICAjZW5kaWYgLyogX19OUl9jbG9ja19uYW5vc2xlZXAgKi8KKyAgCisgICNpZmRlZiBfX05SX2Nsb25lCisgIHtfX05SX2Nsb25lfSwKKyAgI2VuZGlmIC8qIF9fTlJfY2xvbmUgKi8KKyAgCisgICNpZmRlZiBfX05SX2Nsb3NlCisgIHtfX05SX2Nsb3NlfSwKKyAgI2VuZGlmIC8qIF9fTlJfY2xvc2UgKi8KKyAgCisgICNpZmRlZiBfX05SX2Nvbm5lY3QKKyAge19fTlJfY29ubmVjdH0sCisgICNlbmRpZiAvKiBfX05SX2Nvbm5lY3QgKi8KKyAgCisgICNpZmRlZiBfX05SX2R1cAorICB7X19OUl9kdXB9LAorICAjZW5kaWYgLyogX19OUl9kdXAgKi8KKyAgCisgICNpZmRlZiBfX05SX2R1cDIKKyAge19fTlJfZHVwMn0sCisgICNlbmRpZiAvKiBfX05SX2R1cDIgKi8KKyAgCisgICNpZmRlZiBfX05SX2V2ZW50ZmQyCisgIHtfX05SX2V2ZW50ZmQyfSwKKyAgI2VuZGlmIC8qIF9fTlJfZXZlbnRmZDIgKi8KKyAgCisgICNpZmRlZiBfX05SX2V4ZWN2ZQorICB7X19OUl9leGVjdmV9LAorICAjZW5kaWYgLyogX19OUl9leGVjdmUgKi8KKyAgCisgICNpZmRlZiBfX05SX2V4aXQKKyAge19fTlJfZXhpdH0sCisgICNlbmRpZiAvKiBfX05SX2V4aXQgKi8KKyAgCisgICNpZmRlZiBfX05SX2V4aXRfZ3JvdXAKKyAge19fTlJfZXhpdF9ncm91cH0sCisgICNlbmRpZiAvKiBfX05SX2V4aXRfZ3JvdXAgKi8KKyAgCisgICNpZmRlZiBfX05SX2ZjaGRpcgorICB7X19OUl9mY2hkaXJ9LAorICAjZW5kaWYgLyogX19OUl9mY2hkaXIgKi8KKyAgCisgICNpZmRlZiBfX05SX2ZjbnRsCisgIHtfX05SX2ZjbnRsfSwKKyAgI2VuZGlmIC8qIF9fTlJfZmNudGwgKi8KKyAgCisgICNpZmRlZiBfX05SX2ZvcmsKKyAge19fTlJfZm9ya30sCisgICNlbmRpZiAvKiBfX05SX2ZvcmsgKi8KKyAgCisgICNpZmRlZiBfX05SX2ZzdGF0CisgIHtfX05SX2ZzdGF0fSwKKyAgI2VuZGlmIC8qIF9fTlJfZnN0YXQgKi8KKyAgCisgICNpZmRlZiBfX05SX2Z0cnVuY2F0ZQorICB7X19OUl9mdHJ1bmNhdGV9LAorICAjZW5kaWYgLyogX19OUl9mdHJ1bmNhdGUgKi8KKyAgCisgICNpZmRlZiBfX05SX2Z1dGV4CisgIHtfX05SX2Z1dGV4fSwKKyAgI2VuZGlmIC8qIF9fTlJfZnV0ZXggKi8KKyAgCisgICNpZmRlZiBfX05SX2dldGN3ZAorICB7X19OUl9nZXRjd2R9LAorICAjZW5kaWYgLyogX19OUl9nZXRjd2QgKi8KKyAgCisgICNpZmRlZiBfX05SX2dldGRlbnRzCisgIHtfX05SX2dldGRlbnRzfSwKKyAgI2VuZGlmIC8qIF9fTlJfZ2V0ZGVudHMgKi8KKyAgCisgICNpZmRlZiBfX05SX2dldGRlbnRzNjQKKyAge19fTlJfZ2V0ZGVudHM2NH0sCisgICNlbmRpZiAvKiBfX05SX2dldGRlbnRzNjQgKi8KKyAgCisgICNpZmRlZiBfX05SX2dldGVnaWQKKyAge19fTlJfZ2V0ZWdpZH0sCisgICNlbmRpZiAvKiBfX05SX2dldGVnaWQgKi8KKyAgCisgICNpZmRlZiBfX05SX2dldGV1aWQKKyAge19fTlJfZ2V0ZXVpZH0sCisgICNlbmRpZiAvKiBfX05SX2dldGV1aWQgKi8KKyAgCisgICNpZmRlZiBfX05SX2dldGdpZAorICB7X19OUl9nZXRnaWR9LAorICAjZW5kaWYgLyogX19OUl9nZXRnaWQgKi8KKyAgCisgICNpZmRlZiBfX05SX2dldHBlZXJuYW1lCisgIHtfX05SX2dldHBlZXJuYW1lfSwKKyAgI2VuZGlmIC8qIF9fTlJfZ2V0cGVlcm5hbWUgKi8KKyAgCisgICNpZmRlZiBfX05SX2dldHBncnAKKyAge19fTlJfZ2V0cGdycH0sCisgICNlbmRpZiAvKiBfX05SX2dldHBncnAgKi8KKyAgCisgICNpZmRlZiBfX05SX2dldHBpZAorICB7X19OUl9nZXRwaWR9LAorICAjZW5kaWYgLyogX19OUl9nZXRwaWQgKi8KKyAgCisgICNpZmRlZiBfX05SX2dldHBwaWQKKyAge19fTlJfZ2V0cHBpZH0sCisgICNlbmRpZiAvKiBfX05SX2dldHBwaWQgKi8KKyAgCisgICNpZmRlZiBfX05SX2dldHJhbmRvbQorICB7X19OUl9nZXRyYW5kb219LAorICAjZW5kaWYgLyogX19OUl9nZXRyYW5kb20gKi8KKyAgCisgICNpZmRlZiBfX05SX2dldHJlc2dpZAorICB7X19OUl9nZXRyZXNnaWR9LAorICAjZW5kaWYgLyogX19OUl9nZXRyZXNnaWQgKi8KKyAgCisgICNpZmRlZiBfX05SX2dldHJlc3VpZAorICB7X19OUl9nZXRyZXN1aWR9LAorICAjZW5kaWYgLyogX19OUl9nZXRyZXN1aWQgKi8KKyAgCisgICNpZmRlZiBfX05SX2dldF9yb2J1c3RfbGlzdAorICB7X19OUl9nZXRfcm9idXN0X2xpc3R9LAorICAjZW5kaWYgLyogX19OUl9nZXRfcm9idXN0X2xpc3QgKi8KKyAgCisgICNpZmRlZiBfX05SX2dldHNvY2tuYW1lCisgIHtfX05SX2dldHNvY2tuYW1lfSwKKyAgI2VuZGlmIC8qIF9fTlJfZ2V0c29ja25hbWUgKi8KKyAgCisgICNpZmRlZiBfX05SX2dldHNvY2tvcHQKKyAge19fTlJfZ2V0c29ja29wdH0sCisgICNlbmRpZiAvKiBfX05SX2dldHNvY2tvcHQgKi8KKyAgCisgICNpZmRlZiBfX05SX2dldHRpZAorICB7X19OUl9nZXR0aWR9LAorICAjZW5kaWYgLyogX19OUl9nZXR0aWQgKi8KKyAgCisgICNpZmRlZiBfX05SX2dldHVpZAorICB7X19OUl9nZXR1aWR9LAorICAjZW5kaWYgLyogX19OUl9nZXR1aWQgKi8KKyAgCisgICNpZmRlZiBfX05SX2lvY3RsCisgIHtfX05SX2lvY3RsfSwKKyAgI2VuZGlmIC8qIF9fTlJfaW9jdGwgKi8KKyAgCisgICNpZmRlZiBfX05SX2tpbGwKKyAge19fTlJfa2lsbH0sCisgICNlbmRpZiAvKiBfX05SX2tpbGwgKi8KKyAgCisgICNpZmRlZiBfX05SX2xpbmsKKyAge19fTlJfbGlua30sCisgICNlbmRpZiAvKiBfX05SX2xpbmsgKi8KKyAgCisgICNpZmRlZiBfX05SX2xpc3RlbgorICB7X19OUl9saXN0ZW59LAorICAjZW5kaWYgLyogX19OUl9saXN0ZW4gKi8KKyAgCisgICNpZmRlZiBfX05SX2xzZWVrCisgIHtfX05SX2xzZWVrfSwKKyAgI2VuZGlmIC8qIF9fTlJfbHNlZWsgKi8KKyAgCisgICNpZmRlZiBfX05SX21hZHZpc2UKKyAge19fTlJfbWFkdmlzZX0sCisgICNlbmRpZiAvKiBfX05SX21hZHZpc2UgKi8KKyAgCisgICNpZmRlZiBfX05SX21lbWZkX2NyZWF0ZQorICB7X19OUl9tZW1mZF9jcmVhdGV9LAorICAjZW5kaWYgLyogX19OUl9tZW1mZF9jcmVhdGUgKi8KKyAgCisgICNpZmRlZiBfX05SX21rZGlyCisgIHtfX05SX21rZGlyfSwKKyAgI2VuZGlmIC8qIF9fTlJfbWtkaXIgKi8KKyAgCisgICNpZmRlZiBfX05SX21rbm9kCisgIHtfX05SX21rbm9kfSwKKyAgI2VuZGlmIC8qIF9fTlJfbWtub2QgKi8KKyAgCisgICNpZmRlZiBfX05SX21tYXAKKyAge19fTlJfbW1hcH0sCisgICNlbmRpZiAvKiBfX05SX21tYXAgKi8KKyAgCisgICNpZmRlZiBfX05SX21wcm90ZWN0CisgIHtfX05SX21wcm90ZWN0fSwKKyAgI2VuZGlmIC8qIF9fTlJfbXByb3RlY3QgKi8KKyAgCisgICNpZmRlZiBfX05SX21yZW1hcAorICB7X19OUl9tcmVtYXB9LAorICAjZW5kaWYgLyogX19OUl9tcmVtYXAgKi8KKyAgCisgICNpZmRlZiBfX05SX211bm1hcAorICB7X19OUl9tdW5tYXB9LAorICAjZW5kaWYgLyogX19OUl9tdW5tYXAgKi8KKyAgCisgICNpZmRlZiBfX05SX25hbm9zbGVlcAorICB7X19OUl9uYW5vc2xlZXB9LAorICAjZW5kaWYgLyogX19OUl9uYW5vc2xlZXAgKi8KKyAgCisgICNpZmRlZiBfX05SX29wZW4KKyAge19fTlJfb3Blbn0sCisgICNlbmRpZiAvKiBfX05SX29wZW4gKi8KKyAgCisgICNpZmRlZiBfX05SX29wZW5hdAorICB7X19OUl9vcGVuYXR9LAorICAjZW5kaWYgLyogX19OUl9vcGVuYXQgKi8KKyAgCisgICNpZmRlZiBfX05SX3BpcGUKKyAge19fTlJfcGlwZX0sCisgICNlbmRpZiAvKiBfX05SX3BpcGUgKi8KKyAgCisgICNpZmRlZiBfX05SX3BpcGUyCisgIHtfX05SX3BpcGUyfSwKKyAgI2VuZGlmIC8qIF9fTlJfcGlwZTIgKi8KKyAgCisgICNpZmRlZiBfX05SX3BvbGwKKyAge19fTlJfcG9sbH0sCisgICNlbmRpZiAvKiBfX05SX3BvbGwgKi8KKyAgCisgICNpZmRlZiBfX05SX3Bwb2xsCisgIHtfX05SX3Bwb2xsfSwKKyAgI2VuZGlmIC8qIF9fTlJfcHBvbGwgKi8KKyAgCisgICNpZmRlZiBfX05SX3ByY3RsCisgIHtfX05SX3ByY3RsfSwKKyAgI2VuZGlmIC8qIF9fTlJfcHJjdGwgKi8KKyAgCisgICNpZmRlZiBfX05SX3ByZWFkNjQKKyAge19fTlJfcHJlYWQ2NH0sCisgICNlbmRpZiAvKiBfX05SX3ByZWFkNjQgKi8KKyAgCisgICNpZmRlZiBfX05SX3BybGltaXQ2NAorICB7X19OUl9wcmxpbWl0NjR9LAorICAjZW5kaWYgLyogX19OUl9wcmxpbWl0NjQgKi8KKyAgCisgICNpZmRlZiBfX05SX3JlYWQKKyAge19fTlJfcmVhZH0sCisgICNlbmRpZiAvKiBfX05SX3JlYWQgKi8KKyAgCisgICNpZmRlZiBfX05SX3JlYWRsaW5rCisgIHtfX05SX3JlYWRsaW5rfSwKKyAgI2VuZGlmIC8qIF9fTlJfcmVhZGxpbmsgKi8KKyAgCisgICNpZmRlZiBfX05SX3JlYWR2CisgIHtfX05SX3JlYWR2fSwKKyAgI2VuZGlmIC8qIF9fTlJfcmVhZHYgKi8KKyAgCisgICNpZmRlZiBfX05SX3JlY3Zmcm9tCisgIHtfX05SX3JlY3Zmcm9tfSwKKyAgI2VuZGlmIC8qIF9fTlJfcmVjdmZyb20gKi8KKyAgCisgICNpZmRlZiBfX05SX3JlY3Ztc2cKKyAge19fTlJfcmVjdm1zZ30sCisgICNlbmRpZiAvKiBfX05SX3JlY3Ztc2cgKi8KKyAgCisgICNpZmRlZiBfX05SX3Jlc3RhcnRfc3lzY2FsbAorICB7X19OUl9yZXN0YXJ0X3N5c2NhbGx9LAorICAjZW5kaWYgLyogX19OUl9yZXN0YXJ0X3N5c2NhbGwgKi8KKyAgCisgICNpZmRlZiBfX05SX3J0X3NpZ2FjdGlvbgorICB7X19OUl9ydF9zaWdhY3Rpb259LAorICAjZW5kaWYgLyogX19OUl9ydF9zaWdhY3Rpb24gKi8KKyAgCisgICNpZmRlZiBfX05SX3J0X3NpZ3Byb2NtYXNrCisgIHtfX05SX3J0X3NpZ3Byb2NtYXNrfSwKKyAgI2VuZGlmIC8qIF9fTlJfcnRfc2lncHJvY21hc2sgKi8KKyAgCisgICNpZmRlZiBfX05SX3J0X3NpZ3JldHVybgorICB7X19OUl9ydF9zaWdyZXR1cm59LAorICAjZW5kaWYgLyogX19OUl9ydF9zaWdyZXR1cm4gKi8KKyAgCisgICNpZmRlZiBfX05SX3NjaGVkX2dldGFmZmluaXR5CisgIHtfX05SX3NjaGVkX2dldGFmZmluaXR5fSwKKyAgI2VuZGlmIC8qIF9fTlJfc2NoZWRfZ2V0YWZmaW5pdHkgKi8KKyAgCisgICNpZmRlZiBfX05SX3NjaGVkX2dldGF0dHIKKyAge19fTlJfc2NoZWRfZ2V0YXR0cn0sCisgICNlbmRpZiAvKiBfX05SX3NjaGVkX2dldGF0dHIgKi8KKyAgCisgICNpZmRlZiBfX05SX3NjaGVkX3NldGF0dHIKKyAge19fTlJfc2NoZWRfc2V0YXR0cn0sCisgICNlbmRpZiAvKiBfX05SX3NjaGVkX3NldGF0dHIgKi8KKyAgCisgICNpZmRlZiBfX05SX3NlbGVjdAorICB7X19OUl9zZWxlY3R9LAorICAjZW5kaWYgLyogX19OUl9zZWxlY3QgKi8KKyAgCisgICNpZmRlZiBfX05SX3NlbmRtbXNnCisgIHtfX05SX3NlbmRtbXNnfSwKKyAgI2VuZGlmIC8qIF9fTlJfc2VuZG1tc2cgKi8KKyAgCisgICNpZmRlZiBfX05SX3NlbmRtc2cKKyAge19fTlJfc2VuZG1zZ30sCisgICNlbmRpZiAvKiBfX05SX3NlbmRtc2cgKi8KKyAgCisgICNpZmRlZiBfX05SX3NlbmR0bworICB7X19OUl9zZW5kdG99LAorICAjZW5kaWYgLyogX19OUl9zZW5kdG8gKi8KKyAgCisgICNpZmRlZiBfX05SX3NldF9yb2J1c3RfbGlzdAorICB7X19OUl9zZXRfcm9idXN0X2xpc3R9LAorICAjZW5kaWYgLyogX19OUl9zZXRfcm9idXN0X2xpc3QgKi8KKyAgCisgICNpZmRlZiBfX05SX3NldHNpZAorICB7X19OUl9zZXRzaWR9LAorICAjZW5kaWYgLyogX19OUl9zZXRzaWQgKi8KKyAgCisgICNpZmRlZiBfX05SX3NldHNvY2tvcHQKKyAge19fTlJfc2V0c29ja29wdH0sCisgICNlbmRpZiAvKiBfX05SX3NldHNvY2tvcHQgKi8KKyAgCisgICNpZmRlZiBfX05SX3NldF90aWRfYWRkcmVzcworICB7X19OUl9zZXRfdGlkX2FkZHJlc3N9LAorICAjZW5kaWYgLyogX19OUl9zZXRfdGlkX2FkZHJlc3MgKi8KKyAgCisgICNpZmRlZiBfX05SX3NvY2tldAorICB7X19OUl9zb2NrZXR9LAorICAjZW5kaWYgLyogX19OUl9zb2NrZXQgKi8KKyAgCisgICNpZmRlZiBfX05SX3NvY2tldHBhaXIKKyAge19fTlJfc29ja2V0cGFpcn0sCisgICNlbmRpZiAvKiBfX05SX3NvY2tldHBhaXIgKi8KKyAgCisgICNpZmRlZiBfX05SX3N0YXQKKyAge19fTlJfc3RhdH0sCisgICNlbmRpZiAvKiBfX05SX3N0YXQgKi8KKyAgCisgICNpZmRlZiBfX05SX3N0YXRmcworICB7X19OUl9zdGF0ZnN9LAorICAjZW5kaWYgLyogX19OUl9zdGF0ZnMgKi8KKyAgCisgICNpZmRlZiBfX05SX3N5bWxpbmsKKyAge19fTlJfc3ltbGlua30sCisgICNlbmRpZiAvKiBfX05SX3N5bWxpbmsgKi8KKyAgCisgICNpZmRlZiBfX05SX3N5c2luZm8KKyAge19fTlJfc3lzaW5mb30sCisgICNlbmRpZiAvKiBfX05SX3N5c2luZm8gKi8KKyAgCisgICNpZmRlZiBfX05SX3Rna2lsbAorICB7X19OUl90Z2tpbGx9LAorICAjZW5kaWYgLyogX19OUl90Z2tpbGwgKi8KKyAgCisgICNpZmRlZiBfX05SX3RpbWVzCisgIHtfX05SX3RpbWVzfSwKKyAgI2VuZGlmIC8qIF9fTlJfdGltZXMgKi8KKyAgCisgICNpZmRlZiBfX05SX3VtYXNrCisgIHtfX05SX3VtYXNrfSwKKyAgI2VuZGlmIC8qIF9fTlJfdW1hc2sgKi8KKyAgCisgICNpZmRlZiBfX05SX3VuYW1lCisgIHtfX05SX3VuYW1lfSwKKyAgI2VuZGlmIC8qIF9fTlJfdW5hbWUgKi8KKyAgCisgICNpZmRlZiBfX05SX3VubGluaworICB7X19OUl91bmxpbmt9LAorICAjZW5kaWYgLyogX19OUl91bmxpbmsgKi8KKyAgCisgICNpZmRlZiBfX05SX3dhaXQ0CisgIHtfX05SX3dhaXQ0fSwKKyAgI2VuZGlmIC8qIF9fTlJfd2FpdDQgKi8KKyAgCisgICNpZmRlZiBfX05SX3dyaXRlCisgIHtfX05SX3dyaXRlfSwKKyAgI2VuZGlmIC8qIF9fTlJfd3JpdGUgKi8KKyAgCisgICNpZmRlZiBfX05SX3dyaXRldgorICB7X19OUl93cml0ZXZ9LAorICAjZW5kaWYgLyogX19OUl93cml0ZXYgKi8KK1NDRl9FTkRfVkFMVUVTCmRpZmYgLS1naXQgYS9Qcm9ncmFtcy9zeXN0ZW1fZGFyd2luLmMgYi9Qcm9ncmFtcy9zeXN0ZW1fZGFyd2luLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmJjM2MwYQotLS0gL2Rldi9udWxsCisrKyBiL1Byb2dyYW1zL3N5c3RlbV9kYXJ3aW4uYwpAQCAtMCwwICsxLDI3OCBAQAorLyoKKyAqIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisgKiAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisgKgorICogQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKKyNpbmNsdWRlICJwcm9sb2d1ZS5oIgorCisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxJT0tpdC9JT0tpdExpYi5oPgorCisjaW1wb3J0IDxGb3VuZGF0aW9uL05TTG9jay5oPgorI2ltcG9ydCA8Rm91bmRhdGlvbi9OU1RocmVhZC5oPgorI2ltcG9ydCA8Rm91bmRhdGlvbi9OU0F1dG9yZWxlYXNlUG9vbC5oPgorCisjaW5jbHVkZSAibG9nLmgiCisjaW5jbHVkZSAic3lzdGVtLmgiCisjaW5jbHVkZSAic3lzdGVtX2Rhcndpbi5oIgorCitzdGF0aWMgaW5saW5lIENGUnVuTG9vcFJlZgorZ2V0UnVuTG9vcCAodm9pZCkgeworICByZXR1cm4gQ0ZSdW5Mb29wR2V0Q3VycmVudCgpOworfQorCitzdGF0aWMgaW5saW5lIENGU3RyaW5nUmVmCitnZXRSdW5Nb2RlICh2b2lkKSB7CisgIHJldHVybiBrQ0ZSdW5Mb29wRGVmYXVsdE1vZGU7Cit9CisKK0lPUmV0dXJuCitleGVjdXRlUnVuTG9vcCAoaW50IHNlY29uZHMpIHsKKyAgcmV0dXJuIENGUnVuTG9vcFJ1bkluTW9kZShnZXRSdW5Nb2RlKCksIHNlY29uZHMsIDEpOworfQorCit2b2lkCithZGRSdW5Mb29wU291cmNlIChDRlJ1bkxvb3BTb3VyY2VSZWYgc291cmNlKSB7CisgIENGUnVuTG9vcEFkZFNvdXJjZShnZXRSdW5Mb29wKCksIHNvdXJjZSwgZ2V0UnVuTW9kZSgpKTsKK30KKwordm9pZAorcmVtb3ZlUnVuTG9vcFNvdXJjZSAoQ0ZSdW5Mb29wU291cmNlUmVmIHNvdXJjZSkgeworICBDRlJ1bkxvb3BSZW1vdmVTb3VyY2UoZ2V0UnVuTG9vcCgpLCBzb3VyY2UsIGdldFJ1bk1vZGUoKSk7Cit9CisKK3ZvaWQKK3NldERhcndpblN5c3RlbUVycm9yIChJT1JldHVybiByZXN1bHQpIHsKKyAgc3dpdGNoIChyZXN1bHQpIHsKKyAgICBkZWZhdWx0OiBlcnJubyA9IEVJTzsgYnJlYWs7CisKKyAgLy9NQVBfREFSV0lOX0VSUk9SKEtFUk5fU1VDQ0VTUywgKQorICAgIE1BUF9EQVJXSU5fRVJST1IoS0VSTl9JTlZBTElEX0FERFJFU1MsIEVJTlZBTCkKKyAgICBNQVBfREFSV0lOX0VSUk9SKEtFUk5fUFJPVEVDVElPTl9GQUlMVVJFLCBFRkFVTFQpCisgICAgTUFQX0RBUldJTl9FUlJPUihLRVJOX05PX1NQQUNFLCBFTk9TUEMpCisgICAgTUFQX0RBUldJTl9FUlJPUihLRVJOX0lOVkFMSURfQVJHVU1FTlQsIEVJTlZBTCkKKyAgLy9NQVBfREFSV0lOX0VSUk9SKEtFUk5fRkFJTFVSRSwgKQorICAgIE1BUF9EQVJXSU5fRVJST1IoS0VSTl9SRVNPVVJDRV9TSE9SVEFHRSwgRUFHQUlOKQorICAvL01BUF9EQVJXSU5fRVJST1IoS0VSTl9OT1RfUkVDRUlWRVIsICkKKyAgICBNQVBfREFSV0lOX0VSUk9SKEtFUk5fTk9fQUNDRVNTLCBFQUNDRVMpCisgICAgTUFQX0RBUldJTl9FUlJPUihLRVJOX01FTU9SWV9GQUlMVVJFLCBFRkFVTFQpCisgICAgTUFQX0RBUldJTl9FUlJPUihLRVJOX01FTU9SWV9FUlJPUiwgRUZBVUxUKQorICAvL01BUF9EQVJXSU5fRVJST1IoS0VSTl9BTFJFQURZX0lOX1NFVCwgKQorICAvL01BUF9EQVJXSU5fRVJST1IoS0VSTl9OT1RfSU5fU0VULCApCisgICAgTUFQX0RBUldJTl9FUlJPUihLRVJOX05BTUVfRVhJU1RTLCBFRVhJU1QpCisgICAgTUFQX0RBUldJTl9FUlJPUihLRVJOX0FCT1JURUQsIEVDQU5DRUxFRCkKKyAgICBNQVBfREFSV0lOX0VSUk9SKEtFUk5fSU5WQUxJRF9OQU1FLCBFSU5WQUwpCisgICAgTUFQX0RBUldJTl9FUlJPUihLRVJOX0lOVkFMSURfVEFTSywgRUlOVkFMKQorICAgIE1BUF9EQVJXSU5fRVJST1IoS0VSTl9JTlZBTElEX1JJR0hULCBFSU5WQUwpCisgICAgTUFQX0RBUldJTl9FUlJPUihLRVJOX0lOVkFMSURfVkFMVUUsIEVJTlZBTCkKKyAgLy9NQVBfREFSV0lOX0VSUk9SKEtFUk5fVVJFRlNfT1ZFUkZMT1csICkKKyAgICBNQVBfREFSV0lOX0VSUk9SKEtFUk5fSU5WQUxJRF9DQVBBQklMSVRZLCBFSU5WQUwpCisgIC8vTUFQX0RBUldJTl9FUlJPUihLRVJOX1JJR0hUX0VYSVNUUywgKQorICAgIE1BUF9EQVJXSU5fRVJST1IoS0VSTl9JTlZBTElEX0hPU1QsIEVJTlZBTCkKKyAgLy9NQVBfREFSV0lOX0VSUk9SKEtFUk5fTUVNT1JZX1BSRVNFTlQsICkKKyAgLy9NQVBfREFSV0lOX0VSUk9SKEtFUk5fTUVNT1JZX0RBVEFfTU9WRUQsICkKKyAgLy9NQVBfREFSV0lOX0VSUk9SKEtFUk5fTUVNT1JZX1JFU1RBUlRfQ09QWSwgKQorICAgIE1BUF9EQVJXSU5fRVJST1IoS0VSTl9JTlZBTElEX1BST0NFU1NPUl9TRVQsIEVJTlZBTCkKKyAgLy9NQVBfREFSV0lOX0VSUk9SKEtFUk5fUE9MSUNZX0xJTUlULCApCisgICAgTUFQX0RBUldJTl9FUlJPUihLRVJOX0lOVkFMSURfUE9MSUNZLCBFSU5WQUwpCisgICAgTUFQX0RBUldJTl9FUlJPUihLRVJOX0lOVkFMSURfT0JKRUNULCBFSU5WQUwpCisgIC8vTUFQX0RBUldJTl9FUlJPUihLRVJOX0FMUkVBRFlfV0FJVElORywgKQorICAvL01BUF9EQVJXSU5fRVJST1IoS0VSTl9ERUZBVUxUX1NFVCwgKQorICAvL01BUF9EQVJXSU5fRVJST1IoS0VSTl9FWENFUFRJT05fUFJPVEVDVEVELCApCisgICAgTUFQX0RBUldJTl9FUlJPUihLRVJOX0lOVkFMSURfTEVER0VSLCBFSU5WQUwpCisgICAgTUFQX0RBUldJTl9FUlJPUihLRVJOX0lOVkFMSURfTUVNT1JZX0NPTlRST0wsIEVJTlZBTCkKKyAgICBNQVBfREFSV0lOX0VSUk9SKEtFUk5fSU5WQUxJRF9TRUNVUklUWSwgRUlOVkFMKQorICAvL01BUF9EQVJXSU5fRVJST1IoS0VSTl9OT1RfREVQUkVTU0VELCApCisgIC8vTUFQX0RBUldJTl9FUlJPUihLRVJOX1RFUk1JTkFURUQsICkKKyAgLy9NQVBfREFSV0lOX0VSUk9SKEtFUk5fTE9DS19TRVRfREVTVFJPWUVELCApCisgIC8vTUFQX0RBUldJTl9FUlJPUihLRVJOX0xPQ0tfVU5TVEFCTEUsICkKKyAgLy9NQVBfREFSV0lOX0VSUk9SKEtFUk5fTE9DS19PV05FRCwgKQorICAvL01BUF9EQVJXSU5fRVJST1IoS0VSTl9MT0NLX09XTkVEX1NFTEYsICkKKyAgLy9NQVBfREFSV0lOX0VSUk9SKEtFUk5fU0VNQVBIT1JFX0RFU1RST1lFRCwgKQorICAvL01BUF9EQVJXSU5fRVJST1IoS0VSTl9SUENfU0VSVkVSX1RFUk1JTkFURUQsICkKKyAgLy9NQVBfREFSV0lOX0VSUk9SKEtFUk5fUlBDX1RFUk1JTkFURV9PUlBIQU4sICkKKyAgLy9NQVBfREFSV0lOX0VSUk9SKEtFUk5fUlBDX0NPTlRJTlVFX09SUEhBTiwgKQorICAgIE1BUF9EQVJXSU5fRVJST1IoS0VSTl9OT1RfU1VQUE9SVEVELCBFTk9UU1VQKQorICAgIE1BUF9EQVJXSU5fRVJST1IoS0VSTl9OT0RFX0RPV04sIEVIT1NURE9XTikKKyAgLy9NQVBfREFSV0lOX0VSUk9SKEtFUk5fTk9UX1dBSVRJTkcsICkKKyAgICBNQVBfREFSV0lOX0VSUk9SKEtFUk5fT1BFUkFUSU9OX1RJTUVEX09VVCwgRVRJTUVET1VUKQorCisgICAgTUFQX0RBUldJTl9FUlJPUihrSU9SZXR1cm5TdWNjZXNzLCAwKQorICAvL01BUF9EQVJXSU5fRVJST1Ioa0lPUmV0dXJuRXJyb3IsICkKKyAgICBNQVBfREFSV0lOX0VSUk9SKGtJT1JldHVybk5vTWVtb3J5LCBFTk9NRU0pCisgICAgTUFQX0RBUldJTl9FUlJPUihrSU9SZXR1cm5Ob1Jlc291cmNlcywgRUFHQUlOKQorICAvL01BUF9EQVJXSU5fRVJST1Ioa0lPUmV0dXJuSVBDRXJyb3IsICkKKyAgICBNQVBfREFSV0lOX0VSUk9SKGtJT1JldHVybk5vRGV2aWNlLCBFTk9ERVYpCisgICAgTUFQX0RBUldJTl9FUlJPUihrSU9SZXR1cm5Ob3RQcml2aWxlZ2VkLCBFQUNDRVMpCisgICAgTUFQX0RBUldJTl9FUlJPUihrSU9SZXR1cm5CYWRBcmd1bWVudCwgRUlOVkFMKQorICAgIE1BUF9EQVJXSU5fRVJST1Ioa0lPUmV0dXJuTG9ja2VkUmVhZCwgRU5PTENLKQorICAgIE1BUF9EQVJXSU5fRVJST1Ioa0lPUmV0dXJuTG9ja2VkV3JpdGUsIEVOT0xDSykKKyAgICBNQVBfREFSV0lOX0VSUk9SKGtJT1JldHVybkV4Y2x1c2l2ZUFjY2VzcywgRUJVU1kpCisgIC8vTUFQX0RBUldJTl9FUlJPUihrSU9SZXR1cm5CYWRNZXNzYWdlSUQsICkKKyAgICBNQVBfREFSV0lOX0VSUk9SKGtJT1JldHVyblVuc3VwcG9ydGVkLCBFTk9UU1VQKQorICAvL01BUF9EQVJXSU5fRVJST1Ioa0lPUmV0dXJuVk1FcnJvciwgKQorICAvL01BUF9EQVJXSU5fRVJST1Ioa0lPUmV0dXJuSW50ZXJuYWxFcnJvciwgKQorICAgIE1BUF9EQVJXSU5fRVJST1Ioa0lPUmV0dXJuSU9FcnJvciwgRUlPKQorICAgIE1BUF9EQVJXSU5fRVJST1Ioa0lPUmV0dXJuQ2Fubm90TG9jaywgRU5PTENLKQorICAgIE1BUF9EQVJXSU5fRVJST1Ioa0lPUmV0dXJuTm90T3BlbiwgRUJBREYpCisgICAgTUFQX0RBUldJTl9FUlJPUihrSU9SZXR1cm5Ob3RSZWFkYWJsZSwgRUFDQ0VTKQorICAgIE1BUF9EQVJXSU5fRVJST1Ioa0lPUmV0dXJuTm90V3JpdGFibGUsIEVST0ZTKQorICAvL01BUF9EQVJXSU5fRVJST1Ioa0lPUmV0dXJuTm90QWxpZ25lZCwgKQorICAgIE1BUF9EQVJXSU5fRVJST1Ioa0lPUmV0dXJuQmFkTWVkaWEsIEVOWElPKQorICAvL01BUF9EQVJXSU5fRVJST1Ioa0lPUmV0dXJuU3RpbGxPcGVuLCApCisgIC8vTUFQX0RBUldJTl9FUlJPUihrSU9SZXR1cm5STERFcnJvciwgKQorICAgIE1BUF9EQVJXSU5fRVJST1Ioa0lPUmV0dXJuRE1BRXJyb3IsIEVERVZFUlIpCisgICAgTUFQX0RBUldJTl9FUlJPUihrSU9SZXR1cm5CdXN5LCBFQlVTWSkKKyAgICBNQVBfREFSV0lOX0VSUk9SKGtJT1JldHVyblRpbWVvdXQsIEVUSU1FRE9VVCkKKyAgICBNQVBfREFSV0lOX0VSUk9SKGtJT1JldHVybk9mZmxpbmUsIEVOWElPKQorICAgIE1BUF9EQVJXSU5fRVJST1Ioa0lPUmV0dXJuTm90UmVhZHksIEVOWElPKQorICAgIE1BUF9EQVJXSU5fRVJST1Ioa0lPUmV0dXJuTm90QXR0YWNoZWQsIEVOWElPKQorICAgIE1BUF9EQVJXSU5fRVJST1Ioa0lPUmV0dXJuTm9DaGFubmVscywgRURFVkVSUikKKyAgICBNQVBfREFSV0lOX0VSUk9SKGtJT1JldHVybk5vU3BhY2UsIEVOT1NQQykKKyAgICBNQVBfREFSV0lOX0VSUk9SKGtJT1JldHVyblBvcnRFeGlzdHMsIEVBRERSSU5VU0UpCisgICAgTUFQX0RBUldJTl9FUlJPUihrSU9SZXR1cm5DYW5ub3RXaXJlLCBFTk9NRU0pCisgIC8vTUFQX0RBUldJTl9FUlJPUihrSU9SZXR1cm5Ob0ludGVycnVwdCwgKQorICAgIE1BUF9EQVJXSU5fRVJST1Ioa0lPUmV0dXJuTm9GcmFtZXMsIEVERVZFUlIpCisgICAgTUFQX0RBUldJTl9FUlJPUihrSU9SZXR1cm5NZXNzYWdlVG9vTGFyZ2UsIEVNU0dTSVpFKQorICAgIE1BUF9EQVJXSU5fRVJST1Ioa0lPUmV0dXJuTm90UGVybWl0dGVkLCBFUEVSTSkKKyAgICBNQVBfREFSV0lOX0VSUk9SKGtJT1JldHVybk5vUG93ZXIsIEVQV1JPRkYpCisgICAgTUFQX0RBUldJTl9FUlJPUihrSU9SZXR1cm5Ob01lZGlhLCBFTlhJTykKKyAgICBNQVBfREFSV0lOX0VSUk9SKGtJT1JldHVyblVuZm9ybWF0dGVkTWVkaWEsIEVOWElPKQorICAgIE1BUF9EQVJXSU5fRVJST1Ioa0lPUmV0dXJuVW5zdXBwb3J0ZWRNb2RlLCBFTk9TWVMpCisgICAgTUFQX0RBUldJTl9FUlJPUihrSU9SZXR1cm5VbmRlcnJ1biwgRURFVkVSUikKKyAgICBNQVBfREFSV0lOX0VSUk9SKGtJT1JldHVybk92ZXJydW4sIEVERVZFUlIpCisgICAgTUFQX0RBUldJTl9FUlJPUihrSU9SZXR1cm5EZXZpY2VFcnJvciwgRURFVkVSUikKKyAgLy9NQVBfREFSV0lOX0VSUk9SKGtJT1JldHVybk5vQ29tcGxldGlvbiwgKQorICAgIE1BUF9EQVJXSU5fRVJST1Ioa0lPUmV0dXJuQWJvcnRlZCwgRUNBTkNFTEVEKQorICAgIE1BUF9EQVJXSU5fRVJST1Ioa0lPUmV0dXJuTm9CYW5kd2lkdGgsIEVERVZFUlIpCisgICAgTUFQX0RBUldJTl9FUlJPUihrSU9SZXR1cm5Ob3RSZXNwb25kaW5nLCBFREVWRVJSKQorICAgIE1BUF9EQVJXSU5fRVJST1Ioa0lPUmV0dXJuSXNvVG9vT2xkLCBFREVWRVJSKQorICAgIE1BUF9EQVJXSU5fRVJST1Ioa0lPUmV0dXJuSXNvVG9vTmV3LCBFREVWRVJSKQorICAgIE1BUF9EQVJXSU5fRVJST1Ioa0lPUmV0dXJuTm90Rm91bmQsIEVOT0VOVCkKKyAgLy9NQVBfREFSV0lOX0VSUk9SKGtJT1JldHVybkludmFsaWQsICkKKyAgfQorfQorCit2b2lkCitpbml0aWFsaXplU3lzdGVtT2JqZWN0ICh2b2lkKSB7Cit9CisKK0BpbnRlcmZhY2UgQXN5bmNocm9ub3VzUmVzdWx0ICgpCitAcHJvcGVydHkgKGFzc2lnbiwgcmVhZHdyaXRlKSBpbnQgaXNGaW5pc2hlZDsKK0Bwcm9wZXJ0eSAoYXNzaWduLCByZWFkd3JpdGUpIElPUmV0dXJuIGZpbmFsU3RhdHVzOworQGVuZAorCitAaW1wbGVtZW50YXRpb24gQXN5bmNocm9ub3VzUmVzdWx0CitAc3ludGhlc2l6ZSBpc0ZpbmlzaGVkOworQHN5bnRoZXNpemUgZmluYWxTdGF0dXM7CisKKy0gKGludCkgd2FpdAorICA6IChpbnQpIHRpbWVvdXQKKyAgeworICAgIGlmIChzZWxmLmlzRmluaXNoZWQpIHJldHVybiAxOworCisgICAgd2hpbGUgKDEpIHsKKyAgICAgIElPUmV0dXJuIHJlc3VsdCA9IGV4ZWN1dGVSdW5Mb29wKHRpbWVvdXQpOworCisgICAgICBpZiAoc2VsZi5pc0ZpbmlzaGVkKSByZXR1cm4gMTsKKyAgICAgIGlmIChyZXN1bHQgPT0ga0NGUnVuTG9vcFJ1bkhhbmRsZWRTb3VyY2UpIGNvbnRpbnVlOworICAgICAgaWYgKHJlc3VsdCA9PSBrQ0ZSdW5Mb29wUnVuVGltZWRPdXQpIHJldHVybiAwOworICAgIH0KKyAgfQorCistICh2b2lkKSBzZXRTdGF0dXMKKyAgOiAoSU9SZXR1cm4pIHN0YXR1cworICB7CisgICAgc2VsZi5maW5hbFN0YXR1cyA9IHN0YXR1czsKKyAgICBzZWxmLmlzRmluaXNoZWQgPSAxOworICB9CitAZW5kCisKK0BpbnRlcmZhY2UgQXN5bmNocm9ub3VzVGFzayAoKQorQHByb3BlcnR5IChhc3NpZ24sIHJlYWR3cml0ZSkgTlNUaHJlYWQgKnRhc2tUaHJlYWQ7CitAcHJvcGVydHkgKGFzc2lnbiwgcmVhZHdyaXRlKSBDRlJ1bkxvb3BSZWYgdGFza1J1bkxvb3A7CisKK0Bwcm9wZXJ0eSAocmV0YWluKSBOU0NvbmRpdGlvbiAqc3RhcnRTeW5jaHJvbml6ZXI7CitAcHJvcGVydHkgKHJldGFpbikgTlNUaHJlYWQgKnJlc3VsdFRocmVhZDsKKworLSAodm9pZCkgdGFza0ZpbmlzaGVkOworCistICh2b2lkKSBtYWluOworCistICh2b2lkKSBlbmRUYXNrOworQGVuZAorCitAaW1wbGVtZW50YXRpb24gQXN5bmNocm9ub3VzVGFzaworQHN5bnRoZXNpemUgdGFza1RocmVhZDsKK0BzeW50aGVzaXplIHRhc2tSdW5Mb29wOworQHN5bnRoZXNpemUgc3RhcnRTeW5jaHJvbml6ZXI7CitAc3ludGhlc2l6ZSByZXN1bHRUaHJlYWQ7CisKKy0gKElPUmV0dXJuKSBydW4KKyAgeworICAgIGxvZ01lc3NhZ2UoTE9HX1dBUk5JTkcsICJydW4gbWV0aG9kIG5vdCBvdmVycmlkZGVuIik7CisgICAgcmV0dXJuIGtJT1JldHVyblN1Y2Nlc3M7CisgIH0KKworLSAodm9pZCkgdGFza0ZpbmlzaGVkCisgIHsKKyAgICBzZWxmLnJlc3VsdFRocmVhZCA9IG5pbDsKKyAgfQorCistICh2b2lkKSBtYWluCisgIHsKKyAgICBOU0F1dG9yZWxlYXNlUG9vbCAqcG9vbCA9IFtOU0F1dG9yZWxlYXNlUG9vbCBuZXddOworCisgICAgW3NlbGYuc3RhcnRTeW5jaHJvbml6ZXIgbG9ja107CisgICAgc2VsZi50YXNrVGhyZWFkID0gW05TVGhyZWFkIGN1cnJlbnRUaHJlYWRdOworICAgIHNlbGYudGFza1J1bkxvb3AgPSBDRlJ1bkxvb3BHZXRDdXJyZW50KCk7CisgICAgW3NlbGYuc3RhcnRTeW5jaHJvbml6ZXIgc2lnbmFsXTsKKyAgICBbc2VsZi5zdGFydFN5bmNocm9uaXplciB1bmxvY2tdOworCisgICAgW3NlbGYgc2V0U3RhdHVzOltzZWxmIHJ1bl1dOworICAgIFtzZWxmIHBlcmZvcm1TZWxlY3RvcjpAc2VsZWN0b3IodGFza0ZpbmlzaGVkKSBvblRocmVhZDpzZWxmLnJlc3VsdFRocmVhZCB3aXRoT2JqZWN0Om5pbCB3YWl0VW50aWxEb25lOjBdOworCisgICAgc2VsZi50YXNrVGhyZWFkID0gbmlsOworICAgIFtwb29sIGRyYWluXTsKKyAgfQorCistIChpbnQpIHN0YXJ0CisgIHsKKyAgICBpZiAoKHNlbGYuc3RhcnRTeW5jaHJvbml6ZXIgPSBbTlNDb25kaXRpb24gbmV3XSkpIHsKKyAgICAgIHNlbGYucmVzdWx0VGhyZWFkID0gW05TVGhyZWFkIGN1cnJlbnRUaHJlYWRdOworCisgICAgICBbc2VsZi5zdGFydFN5bmNocm9uaXplciBsb2NrXTsKKyAgICAgIFtOU1RocmVhZCBkZXRhY2hOZXdUaHJlYWRTZWxlY3RvcjpAc2VsZWN0b3IobWFpbikgdG9UYXJnZXQ6c2VsZiB3aXRoT2JqZWN0Om5pbF07CisgICAgICBbc2VsZi5zdGFydFN5bmNocm9uaXplciB3YWl0XTsKKyAgICAgIFtzZWxmLnN0YXJ0U3luY2hyb25pemVyIHVubG9ja107CisKKyAgICAgIHNlbGYuc3RhcnRTeW5jaHJvbml6ZXIgPSBuaWw7CisgICAgICByZXR1cm4gMTsKKyAgICB9CisKKyAgICByZXR1cm4gMDsKKyAgfQorCistICh2b2lkKSBlbmRUYXNrCisgIHsKKyAgICBDRlJ1bkxvb3BTdG9wKHNlbGYudGFza1J1bkxvb3ApOworICB9CisKKy0gKHZvaWQpIHN0b3AKKyAgeworICAgIFtzZWxmIHBlcmZvcm1TZWxlY3RvcjpAc2VsZWN0b3IoZW5kVGFzaykgb25UaHJlYWQ6c2VsZi50YXNrVGhyZWFkIHdpdGhPYmplY3Q6bmlsIHdhaXRVbnRpbERvbmU6MF07CisgIH0KK0BlbmQKZGlmZiAtLWdpdCBhL1Byb2dyYW1zL3N5c3RlbV9qYXZhLmMgYi9Qcm9ncmFtcy9zeXN0ZW1famF2YS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA2NWM2MjEKLS0tIC9kZXYvbnVsbAorKysgYi9Qcm9ncmFtcy9zeXN0ZW1famF2YS5jCkBAIC0wLDAgKzEsNDU1IEBACisvKgorICogQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyAqICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyAqCisgKiBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorICoKKyAqIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyAqCisgKiBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisgKi8KKworI2luY2x1ZGUgInByb2xvZ3VlLmgiCisKKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworI2luY2x1ZGUgImxvZy5oIgorI2luY2x1ZGUgInRocmVhZC5oIgorI2luY2x1ZGUgInN5c3RlbS5oIgorI2luY2x1ZGUgInN5c3RlbV9qYXZhLmgiCisKK3N0YXRpYyBKYXZhVk0gKmphdmFWaXJ0dWFsTWFjaGluZSA9IE5VTEw7CisKK0pOSUVYUE9SVCBqaW50CitKTklfT25Mb2FkIChKYXZhVk0gKnZtLCB2b2lkICpyZXNlcnZlZCkgeworICBqYXZhVmlydHVhbE1hY2hpbmUgPSB2bTsKKyAgcmV0dXJuIEpBVkFfSk5JX1ZFUlNJT047Cit9CisKK0pOSUVYUE9SVCB2b2lkCitKTklfT25VbmxvYWQgKEphdmFWTSAqdm0sIHZvaWQgKnJlc2VydmVkKSB7CisgIGphdmFWaXJ0dWFsTWFjaGluZSA9IE5VTEw7Cit9CisKK0phdmFWTSAqCitnZXRKYXZhSW52b2NhdGlvbkludGVyZmFjZSAodm9pZCkgeworICByZXR1cm4gamF2YVZpcnR1YWxNYWNoaW5lOworfQorCit0eXBlZGVmIHN0cnVjdCB7CisgIEphdmFWTSAqdmlydHVhbE1hY2hpbmU7CisgIEpOSUVudiAqbmF0aXZlSW50ZXJmYWNlOworICBjaGFyICp0aHJlYWROYW1lOworfSBUaHJlYWRTcGVjaWZpY0RhdGE7CisKK3N0YXRpYyBUSFJFQURfU1BFQ0lGSUNfREFUQV9ORVcodHNkSmF2YU5hdGl2ZVRocmVhZCkgeworICBUaHJlYWRTcGVjaWZpY0RhdGEgKnRzZDsKKworICBpZiAoKHRzZCA9IG1hbGxvYyhzaXplb2YoKnRzZCkpKSkgeworICAgIG1lbXNldCh0c2QsIDAsIHNpemVvZigqdHNkKSk7CisgICAgcmV0dXJuIHRzZDsKKyAgfSBlbHNlIHsKKyAgICBsb2dNYWxsb2NFcnJvcigpOworICB9CisKKyAgcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBUSFJFQURfU1BFQ0lGSUNfREFUQV9ERVNUUk9ZKHRzZEphdmFOYXRpdmVUaHJlYWQpIHsKKyAgVGhyZWFkU3BlY2lmaWNEYXRhICp0c2QgPSBkYXRhOworCisgIHsKKyAgICBKYXZhVk0gKnZtID0gdHNkLT52aXJ0dWFsTWFjaGluZTsKKyAgICAoKnZtKS0+RGV0YWNoQ3VycmVudFRocmVhZCh2bSk7CisgIH0KKworICBsb2dNZXNzYWdlKExPR19ERUJVRywgInRocmVhZCBkZXRhY2hlZCBmcm9tIEphdmEgVk06ICVzIiwgdHNkLT50aHJlYWROYW1lKTsKKyAgZnJlZSh0c2QtPnRocmVhZE5hbWUpOworICBmcmVlKHRzZCk7Cit9CisKK1RIUkVBRF9TUEVDSUZJQ19EQVRBX0NPTlRST0wodHNkSmF2YU5hdGl2ZVRocmVhZCk7CisKK3N0YXRpYyBjaGFyICoKK2dldEphdmFUaHJlYWROYW1lIChKTklFbnYgKmVudikgeworICBjaGFyICpuYW1lID0gTlVMTDsKKyAgc3RhdGljIGpjbGFzcyBUaHJlYWRfY2xhc3MgPSBOVUxMOworCisgIGlmIChmaW5kSmF2YUNsYXNzKGVudiwgJlRocmVhZF9jbGFzcywgSkFWQV9PQkpfVEhSRUFEKSkgeworICAgIHN0YXRpYyBqbWV0aG9kSUQgVGhyZWFkX2N1cnJlbnRUaHJlYWQgPSAwOworCisgICAgaWYgKGZpbmRKYXZhU3RhdGljTWV0aG9kKGVudiwgJlRocmVhZF9jdXJyZW50VGhyZWFkLCBUaHJlYWRfY2xhc3MsICJjdXJyZW50VGhyZWFkIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSkFWQV9TSUdfTUVUSE9EKEpBVkFfU0lHX1RIUkVBRCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkpKSB7CisgICAgICBqb2JqZWN0IHRocmVhZCA9ICgqZW52KS0+Q2FsbFN0YXRpY09iamVjdE1ldGhvZChlbnYsIFRocmVhZF9jbGFzcywgVGhyZWFkX2N1cnJlbnRUaHJlYWQpOworCisgICAgICBpZiAoIWNsZWFySmF2YUV4Y2VwdGlvbihlbnYsIDEpKSB7CisgICAgICAgIHN0YXRpYyBqbWV0aG9kSUQgVGhyZWFkX2dldE5hbWUgPSAwOworCisgICAgICAgIGlmIChmaW5kSmF2YUluc3RhbmNlTWV0aG9kKGVudiwgJlRocmVhZF9nZXROYW1lLCBUaHJlYWRfY2xhc3MsICJnZXROYW1lIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSkFWQV9TSUdfTUVUSE9EKEpBVkFfU0lHX1NUUklORywgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkpKSB7CisgICAgICAgICAganN0cmluZyBqTmFtZSA9ICgqZW52KS0+Q2FsbE9iamVjdE1ldGhvZChlbnYsIHRocmVhZCwgVGhyZWFkX2dldE5hbWUpOworCisgICAgICAgICAgaWYgKCFjbGVhckphdmFFeGNlcHRpb24oZW52LCAxKSkgeworICAgICAgICAgICAgamJvb2xlYW4gaXNDb3B5OworICAgICAgICAgICAgY29uc3QgY2hhciAqY05hbWUgPSAoKmVudiktPkdldFN0cmluZ1VURkNoYXJzKGVudiwgak5hbWUsICZpc0NvcHkpOworCisgICAgICAgICAgICBpZiAoIShuYW1lID0gc3RyZHVwKGNOYW1lKSkpIHsKKyAgICAgICAgICAgICAgbG9nTWFsbG9jRXJyb3IoKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgKCplbnYpLT5SZWxlYXNlU3RyaW5nVVRGQ2hhcnMoZW52LCBqTmFtZSwgY05hbWUpOworICAgICAgICAgICAgKCplbnYpLT5EZWxldGVMb2NhbFJlZihlbnYsIGpOYW1lKTsKKyAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAoKmVudiktPkRlbGV0ZUxvY2FsUmVmKGVudiwgdGhyZWFkKTsKKyAgICAgIH0KKyAgICB9CisgIH0KKworICByZXR1cm4gbmFtZTsKK30KKworSk5JRW52ICoKK2dldEphdmFOYXRpdmVJbnRlcmZhY2UgKHZvaWQpIHsKKyAgSmF2YVZNICp2bSA9IGdldEphdmFJbnZvY2F0aW9uSW50ZXJmYWNlKCk7CisKKyNpZmRlZiBfX0FORFJPSURfXworICBKTklFbnYgKmVudiA9IE5VTEw7CisjZWxzZSAvKiBfX0FORFJPSURfXyAqLworICB2b2lkICplbnYgPSBOVUxMOworI2VuZGlmIC8qIF9fQU5EUk9JRF9fICovCisKKyAgaWYgKHZtKSB7CisgICAgamludCByZXN1bHQgPSAoKnZtKS0+R2V0RW52KHZtLCAodm9pZCAqKikmZW52LCBKQVZBX0pOSV9WRVJTSU9OKTsKKworICAgIGlmIChyZXN1bHQgIT0gSk5JX09LKSB7CisgICAgICBpZiAocmVzdWx0ID09IEpOSV9FREVUQUNIRUQpIHsKKyAgICAgICAgSmF2YVZNQXR0YWNoQXJncyBhcmdzID0geworICAgICAgICAgIC52ZXJzaW9uID0gSkFWQV9KTklfVkVSU0lPTiwKKyAgICAgICAgICAubmFtZSA9IE5VTEwsCisgICAgICAgICAgLmdyb3VwID0gTlVMTAorICAgICAgICB9OworCisgICAgICAgIGlmICgocmVzdWx0ID0gKCp2bSktPkF0dGFjaEN1cnJlbnRUaHJlYWQodm0sICZlbnYsICZhcmdzKSkgPCAwKSB7CisgICAgICAgICAgbG9nTWVzc2FnZShMT0dfV0FSTklORywgIkphdmEgQXR0YWNoQ3VycmVudFRocmVhZCBlcnJvcjogJWQiLCByZXN1bHQpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgIFRocmVhZFNwZWNpZmljRGF0YSAqdHNkID0gZ2V0VGhyZWFkU3BlY2lmaWNEYXRhKCZ0c2RKYXZhTmF0aXZlVGhyZWFkKTsKKyAgICAgICAgICB0c2QtPnZpcnR1YWxNYWNoaW5lID0gdm07CisgICAgICAgICAgdHNkLT5uYXRpdmVJbnRlcmZhY2UgPSBlbnY7CisgICAgICAgICAgdHNkLT50aHJlYWROYW1lID0gZ2V0SmF2YVRocmVhZE5hbWUoZW52KTsKKworICAgICAgICAgIGxvZ01lc3NhZ2UoTE9HX0RFQlVHLCAidGhyZWFkIGF0dGFjaGVkIHRvIEphdmEgVk06ICVzIiwgdHNkLT50aHJlYWROYW1lKTsKKyAgICAgICAgfQorICAgICAgfSBlbHNlIHsKKyAgICAgICAgbG9nTWVzc2FnZShMT0dfV0FSTklORywgIkphdmEgR2V0RW52IGVycm9yOiAlZCIsIHJlc3VsdCk7CisgICAgICB9CisgICAgfQorICB9CisKKyAgcmV0dXJuIGVudjsKK30KKworaW50CitjbGVhckphdmFFeGNlcHRpb24gKEpOSUVudiAqZW52LCBpbnQgZGVzY3JpYmUpIHsKKyAgaW50IGV4Y2VwdGlvbk9jY3VycmVkID0gKCplbnYpLT5FeGNlcHRpb25DaGVjayhlbnYpOworCisgIGlmIChleGNlcHRpb25PY2N1cnJlZCkgeworICAgIGlmIChkZXNjcmliZSkgKCplbnYpLT5FeGNlcHRpb25EZXNjcmliZShlbnYpOworICAgICgqZW52KS0+RXhjZXB0aW9uQ2xlYXIoZW52KTsKKyAgfQorCisgIHJldHVybiBleGNlcHRpb25PY2N1cnJlZDsKK30KKworc3RhdGljIGpvYmplY3QgamF2YUNsYXNzTG9hZGVySW5zdGFuY2UgPSBOVUxMOworc3RhdGljIGpjbGFzcyBqYXZhQ2xhc3NMb2FkZXJDbGFzcyA9IE5VTEw7CitzdGF0aWMgam1ldGhvZElEIGxvYWRDbGFzc01ldGhvZCA9IDA7CisKK2ludAorc2V0SmF2YUNsYXNzTG9hZGVyIChKTklFbnYgKmVudiwgam9iamVjdCBpbnN0YW5jZSkgeworICBpZiAoaW5zdGFuY2UpIHsKKyAgICBqYXZhQ2xhc3NMb2FkZXJJbnN0YW5jZSA9ICgqZW52KS0+TmV3R2xvYmFsUmVmKGVudiwgaW5zdGFuY2UpOworCisgICAgaWYgKGphdmFDbGFzc0xvYWRlckluc3RhbmNlKSB7CisgICAgICBqY2xhc3MgY2xhc3MgPSAoKmVudiktPkdldE9iamVjdENsYXNzKGVudiwgaW5zdGFuY2UpOworCisgICAgICBpZiAoY2xhc3MpIHsKKyAgICAgICAgamF2YUNsYXNzTG9hZGVyQ2xhc3MgPSAoKmVudiktPk5ld0dsb2JhbFJlZihlbnYsIGNsYXNzKTsKKworICAgICAgICAoKmVudiktPkRlbGV0ZUxvY2FsUmVmKGVudiwgY2xhc3MpOworICAgICAgICBjbGFzcyA9IE5VTEw7CisKKyAgICAgICAgaWYgKGphdmFDbGFzc0xvYWRlckNsYXNzKSB7CisgICAgICAgICAgam1ldGhvZElEIG1ldGhvZCA9ICgqZW52KS0+R2V0TWV0aG9kSUQoZW52LCBqYXZhQ2xhc3NMb2FkZXJDbGFzcywgImxvYWRDbGFzcyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSkFWQV9TSUdfTUVUSE9EKEpBVkFfU0lHX0NMQVNTLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKQVZBX1NJR19TVFJJTkcgLy8gY2xhc3NOYW1lCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSk7CisKKyAgICAgICAgICBpZiAobWV0aG9kKSB7CisgICAgICAgICAgICBsb2FkQ2xhc3NNZXRob2QgPSBtZXRob2Q7CisgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgICB9CisKKyAgICAgICAgICAoKmVudiktPkRlbGV0ZUdsb2JhbFJlZihlbnYsIGphdmFDbGFzc0xvYWRlckNsYXNzKTsKKyAgICAgICAgfQorICAgICAgfQorCisgICAgICAoKmVudiktPkRlbGV0ZUdsb2JhbFJlZihlbnYsIGphdmFDbGFzc0xvYWRlckluc3RhbmNlKTsKKyAgICB9CisgIH0KKworICBqYXZhQ2xhc3NMb2FkZXJJbnN0YW5jZSA9IE5VTEw7CisgIGphdmFDbGFzc0xvYWRlckNsYXNzID0gTlVMTDsKKyAgbG9hZENsYXNzTWV0aG9kID0gMDsKKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBqY2xhc3MKK2xvYWRKYXZhQ2xhc3MgKEpOSUVudiAqZW52LCBjb25zdCBjaGFyICpwYXRoKSB7CisgIHNpemVfdCBzaXplID0gc3RybGVuKHBhdGgpICsgMTsKKyAgY2hhciBjTmFtZVtzaXplXTsKKworICBqY2xhc3MgY2xhc3MgPSBOVUxMOworICBqb2JqZWN0IGpOYW1lOworCisgIHsKKyAgICBjb25zdCBjaGFyICpwID0gcGF0aDsKKyAgICBjaGFyICpuID0gY05hbWU7CisgICAgY2hhciBjOworCisgICAgZG8geworICAgICAgYyA9ICpwKys7CisgICAgICBpZiAoYyA9PSAnLycpIGMgPSAnLic7CisgICAgICAqbisrID0gYzsKKyAgICB9IHdoaWxlIChjKTsKKyAgfQorCisgIGlmICgoak5hbWUgPSAoKmVudiktPk5ld1N0cmluZ1VURihlbnYsIGNOYW1lKSkpIHsKKyAgICBqY2xhc3MgcmVzdWx0ID0gKCplbnYpLT5DYWxsT2JqZWN0TWV0aG9kKGVudiwgamF2YUNsYXNzTG9hZGVySW5zdGFuY2UsIGxvYWRDbGFzc01ldGhvZCwgak5hbWUpOworCisgICAgaWYgKGNsZWFySmF2YUV4Y2VwdGlvbihlbnYsIDEpKSB7CisgICAgICAoKmVudiktPkRlbGV0ZUxvY2FsUmVmKGVudiwgcmVzdWx0KTsKKyAgICB9IGVsc2UgeworICAgICAgY2xhc3MgPSByZXN1bHQ7CisgICAgfQorCisgICAgKCplbnYpLT5EZWxldGVMb2NhbFJlZihlbnYsIGpOYW1lKTsKKyAgfSBlbHNlIHsKKyAgICBsb2dNYWxsb2NFcnJvcigpOworICB9CisKKyAgcmV0dXJuIGNsYXNzOworfQorCitpbnQKK2ZpbmRKYXZhQ2xhc3MgKEpOSUVudiAqZW52LCBqY2xhc3MgKmNsYXNzLCBjb25zdCBjaGFyICpwYXRoKSB7CisgIGlmICgqY2xhc3MpIHJldHVybiAxOworCisgIHsKKyAgICBqY2xhc3MgbG9jYWxSZWZlcmVuY2UgPSBsb2FkQ2xhc3NNZXRob2Q/CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2FkSmF2YUNsYXNzKGVudiwgcGF0aCk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKmVudiktPkZpbmRDbGFzcyhlbnYsIHBhdGgpOworCisgICAgaWYgKGxvY2FsUmVmZXJlbmNlKSB7CisgICAgICBqY2xhc3MgZ2xvYmFsUmVmZXJlbmNlID0gKCplbnYpLT5OZXdHbG9iYWxSZWYoZW52LCBsb2NhbFJlZmVyZW5jZSk7CisKKyAgICAgICgqZW52KS0+RGVsZXRlTG9jYWxSZWYoZW52LCBsb2NhbFJlZmVyZW5jZSk7CisgICAgICBsb2NhbFJlZmVyZW5jZSA9IE5VTEw7CisKKyAgICAgIGlmIChnbG9iYWxSZWZlcmVuY2UpIHsKKyAgICAgICAgbG9nTWVzc2FnZShMT0dfREVCVUcsICJqYXZhIGNsYXNzIGZvdW5kOiAlcyIsIHBhdGgpOworICAgICAgICAqY2xhc3MgPSBnbG9iYWxSZWZlcmVuY2U7CisgICAgICAgIHJldHVybiAxOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgbG9nTWFsbG9jRXJyb3IoKTsKKyAgICAgICAgY2xlYXJKYXZhRXhjZXB0aW9uKGVudiwgMCk7CisgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgIGxvZ01lc3NhZ2UoTE9HX0VSUiwgImphdmEgY2xhc3Mgbm90IGZvdW5kOiAlcyIsIHBhdGgpOworICAgICAgY2xlYXJKYXZhRXhjZXB0aW9uKGVudiwgMSk7CisgICAgfQorICB9CisKKyAgcmV0dXJuIDA7Cit9CisKK2ludAorZmluZEphdmFJbnN0YW5jZU1ldGhvZCAoCisgIEpOSUVudiAqZW52LCBqbWV0aG9kSUQgKm1ldGhvZCwKKyAgamNsYXNzIGNsYXNzLCBjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICpzaWduYXR1cmUKKykgeworICBpZiAoISptZXRob2QpIHsKKyAgICBpZiAoISgqbWV0aG9kID0gKCplbnYpLT5HZXRNZXRob2RJRChlbnYsIGNsYXNzLCBuYW1lLCBzaWduYXR1cmUpKSkgeworICAgICAgbG9nTWVzc2FnZShMT0dfRVJSLCAiamF2YSBpbnN0YW5jZSBtZXRob2Qgbm90IGZvdW5kOiAlczogJXMiLCBuYW1lLCBzaWduYXR1cmUpOworICAgICAgY2xlYXJKYXZhRXhjZXB0aW9uKGVudiwgMCk7CisgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBsb2dNZXNzYWdlKExPR19ERUJVRywgImphdmEgaW5zdGFuY2UgbWV0aG9kIGZvdW5kOiAlczogJXMiLCBuYW1lLCBzaWduYXR1cmUpOworICB9CisKKyAgcmV0dXJuIDE7Cit9CisKK2ludAorZmluZEphdmFTdGF0aWNNZXRob2QgKAorICBKTklFbnYgKmVudiwgam1ldGhvZElEICptZXRob2QsCisgIGpjbGFzcyBjbGFzcywgY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqc2lnbmF0dXJlCispIHsKKyAgaWYgKCEqbWV0aG9kKSB7CisgICAgaWYgKCEoKm1ldGhvZCA9ICgqZW52KS0+R2V0U3RhdGljTWV0aG9kSUQoZW52LCBjbGFzcywgbmFtZSwgc2lnbmF0dXJlKSkpIHsKKyAgICAgIGxvZ01lc3NhZ2UoTE9HX0VSUiwgImphdmEgc3RhdGljIG1ldGhvZCBub3QgZm91bmQ6ICVzOiAlcyIsIG5hbWUsIHNpZ25hdHVyZSk7CisgICAgICBjbGVhckphdmFFeGNlcHRpb24oZW52LCAwKTsKKyAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIGxvZ01lc3NhZ2UoTE9HX0RFQlVHLCAiamF2YSBzdGF0aWMgbWV0aG9kIGZvdW5kOiAlczogJXMiLCBuYW1lLCBzaWduYXR1cmUpOworICB9CisKKyAgcmV0dXJuIDE7Cit9CisKK2ludAorZmluZEphdmFDb25zdHJ1Y3RvciAoCisgIEpOSUVudiAqZW52LCBqbWV0aG9kSUQgKmNvbnN0cnVjdG9yLAorICBqY2xhc3MgY2xhc3MsIGNvbnN0IGNoYXIgKnNpZ25hdHVyZQorKSB7CisgIHJldHVybiBmaW5kSmF2YUluc3RhbmNlTWV0aG9kKGVudiwgY29uc3RydWN0b3IsIGNsYXNzLCBKQVZBX0NPTlNUUlVDVE9SX05BTUUsIHNpZ25hdHVyZSk7Cit9CisKK2ludAorZmluZEphdmFJbnN0YW5jZUZpZWxkICgKKyAgSk5JRW52ICplbnYsIGpmaWVsZElEICpmaWVsZCwKKyAgamNsYXNzIGNsYXNzLCBjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICpzaWduYXR1cmUKKykgeworICBpZiAoISpmaWVsZCkgeworICAgIGlmICghKCpmaWVsZCA9ICgqZW52KS0+R2V0RmllbGRJRChlbnYsIGNsYXNzLCBuYW1lLCBzaWduYXR1cmUpKSkgeworICAgICAgbG9nTWVzc2FnZShMT0dfRVJSLCAiamF2YSBpbnN0YW5jZSBmaWVsZCBub3QgZm91bmQ6ICVzOiAlcyIsIG5hbWUsIHNpZ25hdHVyZSk7CisgICAgICBjbGVhckphdmFFeGNlcHRpb24oZW52LCAwKTsKKyAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIGxvZ01lc3NhZ2UoTE9HX0RFQlVHLCAiamF2YSBpbnN0YW5jZSBmaWVsZCBmb3VuZDogJXM6ICVzIiwgbmFtZSwgc2lnbmF0dXJlKTsKKyAgfQorCisgIHJldHVybiAxOworfQorCitpbnQKK2ZpbmRKYXZhU3RhdGljRmllbGQgKAorICBKTklFbnYgKmVudiwgamZpZWxkSUQgKmZpZWxkLAorICBqY2xhc3MgY2xhc3MsIGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnNpZ25hdHVyZQorKSB7CisgIGlmICghKmZpZWxkKSB7CisgICAgaWYgKCEoKmZpZWxkID0gKCplbnYpLT5HZXRTdGF0aWNGaWVsZElEKGVudiwgY2xhc3MsIG5hbWUsIHNpZ25hdHVyZSkpKSB7CisgICAgICBsb2dNZXNzYWdlKExPR19FUlIsICJqYXZhIHN0YXRpYyBmaWVsZCBub3QgZm91bmQ6ICVzOiAlcyIsIG5hbWUsIHNpZ25hdHVyZSk7CisgICAgICBjbGVhckphdmFFeGNlcHRpb24oZW52LCAwKTsKKyAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIGxvZ01lc3NhZ2UoTE9HX0RFQlVHLCAiamF2YSBzdGF0aWMgZmllbGQgZm91bmQ6ICVzOiAlcyIsIG5hbWUsIHNpZ25hdHVyZSk7CisgIH0KKworICByZXR1cm4gMTsKK30KKworY2hhciAqCitnZXRKYXZhTG9jYWxlTmFtZSAodm9pZCkgeworICBjaGFyICpuYW1lID0gTlVMTDsKKyAgSk5JRW52ICplbnY7CisKKyAgaWYgKChlbnYgPSBnZXRKYXZhTmF0aXZlSW50ZXJmYWNlKCkpKSB7CisgICAgamNsYXNzIExvY2FsZV9jbGFzcyA9IE5VTEw7CisKKyAgICBpZiAoZmluZEphdmFDbGFzcyhlbnYsICZMb2NhbGVfY2xhc3MsIEpBVkFfT0JKX0xPQ0FMRSkpIHsKKyAgICAgIGptZXRob2RJRCBMb2NhbGVfZ2V0RGVmYXVsdCA9IDA7CisKKyAgICAgIGlmIChmaW5kSmF2YVN0YXRpY01ldGhvZChlbnYsICZMb2NhbGVfZ2V0RGVmYXVsdCwgTG9jYWxlX2NsYXNzLCAiZ2V0RGVmYXVsdCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSkFWQV9TSUdfTUVUSE9EKEpBVkFfU0lHX0xPQ0FMRSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSkpIHsKKyAgICAgICAgam9iamVjdCBsb2NhbGUgPSAoKmVudiktPkNhbGxTdGF0aWNPYmplY3RNZXRob2QoZW52LCBMb2NhbGVfY2xhc3MsIExvY2FsZV9nZXREZWZhdWx0KTsKKworICAgICAgICBpZiAoIWNsZWFySmF2YUV4Y2VwdGlvbihlbnYsIDEpKSB7CisgICAgICAgICAgam1ldGhvZElEIExvY2FsZV90b1N0cmluZyA9IDA7CisKKyAgICAgICAgICBpZiAoZmluZEphdmFJbnN0YW5jZU1ldGhvZChlbnYsICZMb2NhbGVfdG9TdHJpbmcsIExvY2FsZV9jbGFzcywgInRvU3RyaW5nIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKQVZBX1NJR19NRVRIT0QoSkFWQV9TSUdfU1RSSU5HLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApKSkgeworICAgICAgICAgICAganN0cmluZyBqTmFtZSA9ICgqZW52KS0+Q2FsbE9iamVjdE1ldGhvZChlbnYsIGxvY2FsZSwgTG9jYWxlX3RvU3RyaW5nKTsKKworICAgICAgICAgICAgaWYgKCFjbGVhckphdmFFeGNlcHRpb24oZW52LCAxKSkgeworICAgICAgICAgICAgICBqYm9vbGVhbiBpc0NvcHk7CisgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmNOYW1lID0gKCplbnYpLT5HZXRTdHJpbmdVVEZDaGFycyhlbnYsIGpOYW1lLCAmaXNDb3B5KTsKKworICAgICAgICAgICAgICBpZiAoIShuYW1lID0gc3RyZHVwKGNOYW1lKSkpIHsKKyAgICAgICAgICAgICAgICBsb2dNYWxsb2NFcnJvcigpOworICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgKCplbnYpLT5SZWxlYXNlU3RyaW5nVVRGQ2hhcnMoZW52LCBqTmFtZSwgY05hbWUpOworICAgICAgICAgICAgICAoKmVudiktPkRlbGV0ZUxvY2FsUmVmKGVudiwgak5hbWUpOworICAgICAgICAgICAgfQorICAgICAgICAgIH0KKworICAgICAgICAgICgqZW52KS0+RGVsZXRlTG9jYWxSZWYoZW52LCBsb2NhbGUpOworICAgICAgICB9CisgICAgICB9CisgICAgfQorICB9CisKKyAgcmV0dXJuIG5hbWU7Cit9CisKKyNpZiBkZWZpbmVkKF9fQU5EUk9JRF9fKQorI2luY2x1ZGUgPGxvY2FsZS5oPgorI2luY2x1ZGUgIm1lc3NhZ2VzLmgiCisKK3N0YXRpYyB2b2lkCitpbml0aWFsaXplQW5kcm9pZEVudmlyb25tZW50IChKTklFbnYgKmVudikgeworICB7CisgICAgc3RhdGljIGpjbGFzcyBjbGFzcyA9IE5VTEw7CisKKyAgICBpZiAoZmluZEphdmFDbGFzcyhlbnYsICZjbGFzcywgSkFWQV9PQkpfQlJMVFRZKCJCcmFpbGxlQXBwbGljYXRpb24iKSkpIHsKKyAgICAgIHN0YXRpYyBqbWV0aG9kSUQgbWV0aG9kID0gMDsKKworICAgICAgaWYgKGZpbmRKYXZhU3RhdGljTWV0aG9kKGVudiwgJm1ldGhvZCwgY2xhc3MsICJnZXRDdXJyZW50TG9jYWxlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKQVZBX1NJR19NRVRIT0QoSkFWQV9TSUdfU1RSSU5HLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApKSkgeworICAgICAgICBqc3RyaW5nIGpMb2NhbGUgPSAoKmVudiktPkNhbGxTdGF0aWNPYmplY3RNZXRob2QoZW52LCBjbGFzcywgbWV0aG9kKTsKKworICAgICAgICBpZiAoIWNsZWFySmF2YUV4Y2VwdGlvbihlbnYsIDEpKSB7CisgICAgICAgICAgaWYgKGpMb2NhbGUpIHsKKyAgICAgICAgICAgIGpib29sZWFuIGlzQ29weTsKKyAgICAgICAgICAgIGNvbnN0IGNoYXIgKmNMb2NhbGUgPSAoKmVudiktPkdldFN0cmluZ1VURkNoYXJzKGVudiwgakxvY2FsZSwgJmlzQ29weSk7CisKKyAgICAgICAgICAgIGlmIChjTG9jYWxlKSB7CisgICAgICAgICAgICAgIGlmIChzZXRNZXNzYWdlc0xvY2FsZShjTG9jYWxlKSkgeworICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgKCplbnYpLT5SZWxlYXNlU3RyaW5nVVRGQ2hhcnMoZW52LCBqTG9jYWxlLCBjTG9jYWxlKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgKCplbnYpLT5EZWxldGVMb2NhbFJlZihlbnYsIGpMb2NhbGUpOworICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgfQorICAgIH0KKyAgfQorfQorI2VuZGlmIC8qIHBsYXRmb3JtLXNwZWNpb2ZpYyBpbml0aWFsaXphdGlvbiAqLworCit2b2lkCitpbml0aWFsaXplU3lzdGVtT2JqZWN0ICh2b2lkKSB7CisjaWYgZGVmaW5lZChfX0FORFJPSURfXykKKyAgaW5pdGlhbGl6ZUFuZHJvaWRFbnZpcm9ubWVudChnZXRKYXZhTmF0aXZlSW50ZXJmYWNlKCkpOworI2VuZGlmIC8qIHBsYXRmb3JtLXNwZWNpb2ZpYyBpbml0aWFsaXphdGlvbiAqLworfQpkaWZmIC0tZ2l0IGEvUHJvZ3JhbXMvc3lzdGVtX2xpbnV4LmMgYi9Qcm9ncmFtcy9zeXN0ZW1fbGludXguYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44Njc0NzIyCi0tLSAvZGV2L251bGwKKysrIGIvUHJvZ3JhbXMvc3lzdGVtX2xpbnV4LmMKQEAgLTAsMCArMSwxNDQ4IEBACisvKgorICogQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyAqICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyAqCisgKiBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorICoKKyAqIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyAqCisgKiBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisgKi8KKworI2luY2x1ZGUgInByb2xvZ3VlLmgiCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8ZmNudGwuaD4KKyNpbmNsdWRlIDxzeXMvaW9jdGwuaD4KKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorI2luY2x1ZGUgPHN5cy9zdGF0dmZzLmg+CisjaW5jbHVkZSA8ZGlyZW50Lmg+CisjaW5jbHVkZSA8c3lzL3N5c21hY3Jvcy5oPgorI2luY2x1ZGUgPGxpbnV4L21ham9yLmg+CisKKyNpbmNsdWRlICJsb2cuaCIKKyNpbmNsdWRlICJwYXJzZS5oIgorI2luY2x1ZGUgImZpbGUuaCIKKyNpbmNsdWRlICJkZXZpY2UuaCIKKyNpbmNsdWRlICJhc3luY19oYW5kbGUuaCIKKyNpbmNsdWRlICJhc3luY193YWl0LmgiCisjaW5jbHVkZSAiYXN5bmNfaW8uaCIKKyNpbmNsdWRlICJob3N0Y21kLmgiCisjaW5jbHVkZSAiYml0bWFzay5oIgorI2luY2x1ZGUgInN5c3RlbS5oIgorI2luY2x1ZGUgInN5c3RlbV9saW51eC5oIgorCit0eXBlZGVmIHN0cnVjdCB7CisgIFBhdGhQcm9jZXNzb3IgKnByb2Nlc3NvcjsKKyAgY29uc3QgUGF0aFByb2Nlc3NvclBhcmFtZXRlcnMgKnBhcmFtZXRlcnM7Cit9IFBhdGhQcm9jZXNzaW5nRGF0YTsKKworc3RhdGljIGludAorcHJvY2Vzc0RpcmVjdG9yeUVudHJ5IChjb25zdCBjaGFyICpuYW1lLCBjb25zdCBQYXRoUHJvY2Vzc2luZ0RhdGEgKnBwZCkgeworICBjb25zdCBQYXRoUHJvY2Vzc29yUGFyYW1ldGVycyAqcGFyYW1ldGVycyA9IHBwZC0+cGFyYW1ldGVyczsKKworICBjb25zdCBjaGFyICpkaXJlY3RvcnkgPSBwYXJhbWV0ZXJzLT5wYXRoOworICBjaGFyIHBhdGhbc3RybGVuKGRpcmVjdG9yeSkgKyAxICsgc3RybGVuKG5hbWUpICsgMV07CisKKyAgc25wcmludGYoCisgICAgcGF0aCwgc2l6ZW9mKHBhdGgpLCAiJXMlYyVzIiwKKyAgICBkaXJlY3RvcnksIFBBVEhfU0VQQVJBVE9SX0NIQVJBQ1RFUiwgbmFtZQorICApOworCisgIHJldHVybiBwcm9jZXNzUGF0aFRyZWUocGF0aCwgcHBkLT5wcm9jZXNzb3IsIHBhcmFtZXRlcnMtPmRhdGEpOworfQorCitpbnQKK3Byb2Nlc3NQYXRoVHJlZSAoY29uc3QgY2hhciAqcGF0aCwgUGF0aFByb2Nlc3NvciAqcHJvY2Vzc1BhdGgsIHZvaWQgKmRhdGEpIHsKKyAgUGF0aFByb2Nlc3NvclBhcmFtZXRlcnMgcGFyYW1ldGVycyA9IHsKKyAgICAucGF0aCA9IHBhdGgsCisgICAgLmRhdGEgPSBkYXRhCisgIH07CisKKyAgUGF0aFByb2Nlc3NpbmdEYXRhIHBwZCA9IHsKKyAgICAucHJvY2Vzc29yID0gcHJvY2Vzc1BhdGgsCisgICAgLnBhcmFtZXRlcnMgPSAmcGFyYW1ldGVycworICB9OworCisgIGludCBzdG9wID0gMDsKKyAgRElSICpkaXJlY3Rvcnk7CisKKyAgaWYgKChkaXJlY3RvcnkgPSBvcGVuZGlyKHBhdGgpKSkgeworICAgIGlmIChwcm9jZXNzUGF0aCgmcGFyYW1ldGVycykpIHsKKyAgICAgIHN0cnVjdCBkaXJlbnQgKmVudHJ5OworCisgICAgICB3aGlsZSAoKGVudHJ5ID0gcmVhZGRpcihkaXJlY3RvcnkpKSkgeworICAgICAgICBjb25zdCBjaGFyICpuYW1lID0gZW50cnktPmRfbmFtZTsKKworICAgICAgICBpZiAoc3RyY21wKG5hbWUsIENVUlJFTlRfRElSRUNUT1JZX05BTUUpID09IDApIGNvbnRpbnVlOworICAgICAgICBpZiAoc3RyY21wKG5hbWUsIFBBUkVOVF9ESVJFQ1RPUllfTkFNRSkgPT0gMCkgY29udGludWU7CisKKyAgICAgICAgaWYgKCFwcm9jZXNzRGlyZWN0b3J5RW50cnkobmFtZSwgJnBwZCkpIHsKKyAgICAgICAgICBzdG9wID0gMTsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICBzdG9wID0gMTsKKyAgICB9CisKKyAgICBjbG9zZWRpcihkaXJlY3RvcnkpOworICB9IGVsc2UgaWYgKGVycm5vID09IEVOT1RESVIpIHsKKyAgICBpZiAoIXByb2Nlc3NQYXRoKCZwYXJhbWV0ZXJzKSkgc3RvcCA9IDE7CisgIH0gZWxzZSB7CisgICAgbG9nTWVzc2FnZShMT0dfV0FSTklORywgImNhbid0IGFjY2VzcyBwYXRoOiAlczogJXMiLCBwYXRoLCBzdHJlcnJvcihlcnJubykpOworICB9CisKKyAgcmV0dXJuICFzdG9wOworfQorCitpbnQKK2NvbXBhcmVHcm91cHMgKGdpZF90IGdyb3VwMSwgZ2lkX3QgZ3JvdXAyKSB7CisgIGlmIChncm91cDEgPCBncm91cDIpIHJldHVybiAtMTsKKyAgaWYgKGdyb3VwMSA+IGdyb3VwMikgcmV0dXJuIDE7CisgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50Citncm91cFNvcnRlciAoY29uc3Qgdm9pZCAqZWxlbWVudDEsY29uc3Qgdm9pZCAqZWxlbWVudDIpIHsKKyAgY29uc3QgZ2lkX3QgKmdyb3VwMSA9IGVsZW1lbnQxOworICBjb25zdCBnaWRfdCAqZ3JvdXAyID0gZWxlbWVudDI7CisgIHJldHVybiBjb21wYXJlR3JvdXBzKCpncm91cDEsICpncm91cDIpOworfQorCit2b2lkCitzb3J0R3JvdXBzIChnaWRfdCAqZ3JvdXBzLCBzaXplX3QgY291bnQpIHsKKyAgcXNvcnQoZ3JvdXBzLCBjb3VudCwgc2l6ZW9mKCpncm91cHMpLCBncm91cFNvcnRlcik7Cit9CisKK3ZvaWQKK3JlbW92ZUR1cGxpY2F0ZUdyb3VwcyAoZ2lkX3QgKmdyb3Vwcywgc2l6ZV90ICpjb3VudCkgeworICBpZiAoKmNvdW50ID4gMSkgeworICAgIHNvcnRHcm91cHMoZ3JvdXBzLCAqY291bnQpOworCisgICAgZ2lkX3QgKnRvID0gZ3JvdXBzOworICAgIGNvbnN0IGdpZF90ICpmcm9tID0gdG8gKyAxOworICAgIGNvbnN0IGdpZF90ICplbmQgPSB0byArICpjb3VudDsKKworICAgIHdoaWxlIChmcm9tIDwgZW5kKSB7CisgICAgICBpZiAoKmZyb20gIT0gKnRvKSB7CisgICAgICAgIGlmICgrK3RvICE9IGZyb20pIHsKKyAgICAgICAgICAqdG8gPSAqZnJvbTsKKyAgICAgICAgfQorICAgICAgfQorCisgICAgICBmcm9tICs9IDE7CisgICAgfQorCisgICAgKmNvdW50ID0gKyt0byAtIGdyb3VwczsKKyAgfQorfQorCit2b2lkCitwcm9jZXNzU3VwcGxlbWVudGFyeUdyb3VwcyAoR3JvdXBzUHJvY2Vzc29yICpwcm9jZXNzR3JvdXBzLCB2b2lkICpkYXRhKSB7CisgIHNzaXplX3Qgc2l6ZSA9IGdldGdyb3VwcygwLCBOVUxMKTsKKworICBpZiAoc2l6ZSAhPSAtMSkgeworICAgIGdpZF90IGdyb3Vwc1tzaXplXTsKKyAgICBzc2l6ZV90IHJlc3VsdCA9IGdldGdyb3VwcyhzaXplLCBncm91cHMpOworCisgICAgaWYgKHJlc3VsdCAhPSAtMSkgeworICAgICAgc2l6ZV90IGNvdW50ID0gcmVzdWx0OworICAgICAgcmVtb3ZlRHVwbGljYXRlR3JvdXBzKGdyb3VwcywgJmNvdW50KTsKKyAgICAgIHByb2Nlc3NHcm91cHMoZ3JvdXBzLCBjb3VudCwgZGF0YSk7CisgICAgfSBlbHNlIHsKKyAgICAgIGxvZ1N5c3RlbUVycm9yKCJnZXRncm91cHMiKTsKKyAgICB9CisgIH0gZWxzZSB7CisgICAgbG9nU3lzdGVtRXJyb3IoImdldGdyb3VwcyIpOworICB9Cit9CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgY29uc3QgZ2lkX3QgKmdyb3VwczsKKyAgc2l6ZV90IGNvdW50OworICB1bnNpZ25lZCBjaGFyIGhhdmU6MTsKK30gSGF2ZUdyb3Vwc0RhdGE7CisKK3N0YXRpYyB2b2lkCitoYXZlR3JvdXBzIChjb25zdCBnaWRfdCAqZ3JvdXBzLCBzaXplX3QgY291bnQsIHZvaWQgKmRhdGEpIHsKKyAgSGF2ZUdyb3Vwc0RhdGEgKmhnZCA9IGRhdGE7CisKKyAgY29uc3QgZ2lkX3QgKm5lZWQgPSBoZ2QtPmdyb3VwczsKKyAgY29uc3QgZ2lkX3QgKm5lZWRFbmQgPSBuZWVkICsgaGdkLT5jb3VudDsKKworICBjb25zdCBnaWRfdCAqaGF2ZSA9IGdyb3VwczsKKyAgY29uc3QgZ2lkX3QgKmhhdmVFbmQgPSBoYXZlICsgY291bnQ7CisKKyAgd2hpbGUgKGhhdmUgPCBoYXZlRW5kKSB7CisgICAgaWYgKCpoYXZlID4gKm5lZWQpIGJyZWFrOworICAgIGlmICgqaGF2ZSsrIDwgKm5lZWQpIGNvbnRpbnVlOworCisgICAgaWYgKCsrbmVlZCA9PSBuZWVkRW5kKSB7CisgICAgICBoZ2QtPmhhdmUgPSAxOworICAgICAgcmV0dXJuOworICAgIH0KKyAgfQorCisgIGhnZC0+aGF2ZSA9IDA7Cit9CisKK2ludAoraGF2ZVN1cHBsZW1lbnRhcnlHcm91cHMgKGNvbnN0IGdpZF90ICpncm91cHMsIHNpemVfdCBjb3VudCkgeworICBIYXZlR3JvdXBzRGF0YSBoZ2QgPSB7CisgICAgLmdyb3VwcyA9IGdyb3VwcywKKyAgICAuY291bnQgPSBjb3VudAorICB9OworCisgIHByb2Nlc3NTdXBwbGVtZW50YXJ5R3JvdXBzKGhhdmVHcm91cHMsICZoZ2QpOworICByZXR1cm4gaGdkLmhhdmU7Cit9CisKKyNpZmRlZiBIQVZFX0xJTlVYX0lOUFVUX0gKKyNpbmNsdWRlIDxsaW51eC9pbnB1dC5oPgorCisjaWZuZGVmIGlucHV0X2V2ZW50X3NlYworI2RlZmluZSBpbnB1dF9ldmVudF9zZWMgdGltZS50dl9zZWMKKyNlbmRpZiAvKiBpbnB1dF9ldmVudF9zZWMgKi8KKworI2lmbmRlZiBpbnB1dF9ldmVudF91c2VjCisjZGVmaW5lIGlucHV0X2V2ZW50X3VzZWMgdGltZS50dl91c2VjCisjZW5kaWYgLyogaW5wdXRfZXZlbnRfdXNlYyAqLworCisjaW5jbHVkZSAia2JkX2tleWNvZGVzLmgiCisKK0xJTlVYX0tFWV9NQVAoeHQwMCkgPSB7CisgIFtYVF9LRVlfMDBfRXNjYXBlXSA9IEtFWV9FU0MsCisgIFtYVF9LRVlfMDBfRjFdID0gS0VZX0YxLAorICBbWFRfS0VZXzAwX0YyXSA9IEtFWV9GMiwKKyAgW1hUX0tFWV8wMF9GM10gPSBLRVlfRjMsCisgIFtYVF9LRVlfMDBfRjRdID0gS0VZX0Y0LAorICBbWFRfS0VZXzAwX0Y1XSA9IEtFWV9GNSwKKyAgW1hUX0tFWV8wMF9GNl0gPSBLRVlfRjYsCisgIFtYVF9LRVlfMDBfRjddID0gS0VZX0Y3LAorICBbWFRfS0VZXzAwX0Y4XSA9IEtFWV9GOCwKKyAgW1hUX0tFWV8wMF9GOV0gPSBLRVlfRjksCisgIFtYVF9LRVlfMDBfRjEwXSA9IEtFWV9GMTAsCisgIFtYVF9LRVlfMDBfRjExXSA9IEtFWV9GMTEsCisgIFtYVF9LRVlfMDBfRjEyXSA9IEtFWV9GMTIsCisgIFtYVF9LRVlfMDBfU3lzdGVtUmVxdWVzdF0gPSBLRVlfU1lTUlEsCisgIFtYVF9LRVlfMDBfU2Nyb2xsTG9ja10gPSBLRVlfU0NST0xMTE9DSywKKworICBbWFRfS0VZXzAwX0YxM10gPSBLRVlfRjEzLAorICBbWFRfS0VZXzAwX0YxNF0gPSBLRVlfRjE0LAorICBbWFRfS0VZXzAwX0YxNV0gPSBLRVlfRjE1LAorICBbWFRfS0VZXzAwX0YxNl0gPSBLRVlfRjE2LAorICBbWFRfS0VZXzAwX0YxN10gPSBLRVlfRjE3LAorICBbWFRfS0VZXzAwX0YxOF0gPSBLRVlfRjE4LAorICBbWFRfS0VZXzAwX0YxOV0gPSBLRVlfRjE5LAorICBbWFRfS0VZXzAwX0YyMF0gPSBLRVlfRjIwLAorICBbWFRfS0VZXzAwX0YyMV0gPSBLRVlfRjIxLAorICBbWFRfS0VZXzAwX0YyMl0gPSBLRVlfRjIyLAorICBbWFRfS0VZXzAwX0YyM10gPSBLRVlfRjIzLAorICBbWFRfS0VZXzAwX0YyNF0gPSBLRVlfRjI0LAorCisgIFtYVF9LRVlfMDBfR3JhdmVdID0gS0VZX0dSQVZFLAorICBbWFRfS0VZXzAwXzFdID0gS0VZXzEsCisgIFtYVF9LRVlfMDBfMl0gPSBLRVlfMiwKKyAgW1hUX0tFWV8wMF8zXSA9IEtFWV8zLAorICBbWFRfS0VZXzAwXzRdID0gS0VZXzQsCisgIFtYVF9LRVlfMDBfNV0gPSBLRVlfNSwKKyAgW1hUX0tFWV8wMF82XSA9IEtFWV82LAorICBbWFRfS0VZXzAwXzddID0gS0VZXzcsCisgIFtYVF9LRVlfMDBfOF0gPSBLRVlfOCwKKyAgW1hUX0tFWV8wMF85XSA9IEtFWV85LAorICBbWFRfS0VZXzAwXzBdID0gS0VZXzAsCisgIFtYVF9LRVlfMDBfTWludXNdID0gS0VZX01JTlVTLAorICBbWFRfS0VZXzAwX0VxdWFsXSA9IEtFWV9FUVVBTCwKKyAgW1hUX0tFWV8wMF9CYWNrc3BhY2VdID0gS0VZX0JBQ0tTUEFDRSwKKworICBbWFRfS0VZXzAwX1RhYl0gPSBLRVlfVEFCLAorICBbWFRfS0VZXzAwX1FdID0gS0VZX1EsCisgIFtYVF9LRVlfMDBfV10gPSBLRVlfVywKKyAgW1hUX0tFWV8wMF9FXSA9IEtFWV9FLAorICBbWFRfS0VZXzAwX1JdID0gS0VZX1IsCisgIFtYVF9LRVlfMDBfVF0gPSBLRVlfVCwKKyAgW1hUX0tFWV8wMF9ZXSA9IEtFWV9ZLAorICBbWFRfS0VZXzAwX1VdID0gS0VZX1UsCisgIFtYVF9LRVlfMDBfSV0gPSBLRVlfSSwKKyAgW1hUX0tFWV8wMF9PXSA9IEtFWV9PLAorICBbWFRfS0VZXzAwX1BdID0gS0VZX1AsCisgIFtYVF9LRVlfMDBfTGVmdEJyYWNrZXRdID0gS0VZX0xFRlRCUkFDRSwKKyAgW1hUX0tFWV8wMF9SaWdodEJyYWNrZXRdID0gS0VZX1JJR0hUQlJBQ0UsCisgIFtYVF9LRVlfMDBfQmFja3NsYXNoXSA9IEtFWV9CQUNLU0xBU0gsCisKKyAgW1hUX0tFWV8wMF9DYXBzTG9ja10gPSBLRVlfQ0FQU0xPQ0ssCisgIFtYVF9LRVlfMDBfQV0gPSBLRVlfQSwKKyAgW1hUX0tFWV8wMF9TXSA9IEtFWV9TLAorICBbWFRfS0VZXzAwX0RdID0gS0VZX0QsCisgIFtYVF9LRVlfMDBfRl0gPSBLRVlfRiwKKyAgW1hUX0tFWV8wMF9HXSA9IEtFWV9HLAorICBbWFRfS0VZXzAwX0hdID0gS0VZX0gsCisgIFtYVF9LRVlfMDBfSl0gPSBLRVlfSiwKKyAgW1hUX0tFWV8wMF9LXSA9IEtFWV9LLAorICBbWFRfS0VZXzAwX0xdID0gS0VZX0wsCisgIFtYVF9LRVlfMDBfU2VtaWNvbG9uXSA9IEtFWV9TRU1JQ09MT04sCisgIFtYVF9LRVlfMDBfQXBvc3Ryb3BoZV0gPSBLRVlfQVBPU1RST1BIRSwKKyAgW1hUX0tFWV8wMF9FbnRlcl0gPSBLRVlfRU5URVIsCisKKyAgW1hUX0tFWV8wMF9MZWZ0U2hpZnRdID0gS0VZX0xFRlRTSElGVCwKKyAgW1hUX0tFWV8wMF9FdXJvcGUyXSA9IEtFWV8xMDJORCwKKyAgW1hUX0tFWV8wMF9aXSA9IEtFWV9aLAorICBbWFRfS0VZXzAwX1hdID0gS0VZX1gsCisgIFtYVF9LRVlfMDBfQ10gPSBLRVlfQywKKyAgW1hUX0tFWV8wMF9WXSA9IEtFWV9WLAorICBbWFRfS0VZXzAwX0JdID0gS0VZX0IsCisgIFtYVF9LRVlfMDBfTl0gPSBLRVlfTiwKKyAgW1hUX0tFWV8wMF9NXSA9IEtFWV9NLAorICBbWFRfS0VZXzAwX0NvbW1hXSA9IEtFWV9DT01NQSwKKyAgW1hUX0tFWV8wMF9QZXJpb2RdID0gS0VZX0RPVCwKKyAgW1hUX0tFWV8wMF9TbGFzaF0gPSBLRVlfU0xBU0gsCisgIFtYVF9LRVlfMDBfUmlnaHRTaGlmdF0gPSBLRVlfUklHSFRTSElGVCwKKworICBbWFRfS0VZXzAwX0xlZnRDb250cm9sXSA9IEtFWV9MRUZUQ1RSTCwKKyAgW1hUX0tFWV8wMF9MZWZ0QWx0XSA9IEtFWV9MRUZUQUxULAorICBbWFRfS0VZXzAwX1NwYWNlXSA9IEtFWV9TUEFDRSwKKworICBbWFRfS0VZXzAwX051bUxvY2tdID0gS0VZX05VTUxPQ0ssCisgIFtYVF9LRVlfMDBfS1BBc3Rlcmlza10gPSBLRVlfS1BBU1RFUklTSywKKyAgW1hUX0tFWV8wMF9LUE1pbnVzXSA9IEtFWV9LUE1JTlVTLAorICBbWFRfS0VZXzAwX0tQUGx1c10gPSBLRVlfS1BQTFVTLAorICBbWFRfS0VZXzAwX0tQUGVyaW9kXSA9IEtFWV9LUERPVCwKKyAgW1hUX0tFWV8wMF9LUDBdID0gS0VZX0tQMCwKKyAgW1hUX0tFWV8wMF9LUDFdID0gS0VZX0tQMSwKKyAgW1hUX0tFWV8wMF9LUDJdID0gS0VZX0tQMiwKKyAgW1hUX0tFWV8wMF9LUDNdID0gS0VZX0tQMywKKyAgW1hUX0tFWV8wMF9LUDRdID0gS0VZX0tQNCwKKyAgW1hUX0tFWV8wMF9LUDVdID0gS0VZX0tQNSwKKyAgW1hUX0tFWV8wMF9LUDZdID0gS0VZX0tQNiwKKyAgW1hUX0tFWV8wMF9LUDddID0gS0VZX0tQNywKKyAgW1hUX0tFWV8wMF9LUDhdID0gS0VZX0tQOCwKKyAgW1hUX0tFWV8wMF9LUDldID0gS0VZX0tQOSwKKworICBbWFRfS0VZXzAwX0tQQ29tbWFdID0gS0VZX0tQQ09NTUEsCisgIFtYVF9LRVlfMDBfS1BFcXVhbF0gPSBLRVlfS1BFUVVBTCwKKworICBbWFRfS0VZXzAwX0ludGVybmF0aW9uYWwxXSA9IEtFWV9STywKKyAgW1hUX0tFWV8wMF9JbnRlcm5hdGlvbmFsMl0gPSBLRVlfS0FUQUtBTkFISVJBR0FOQSwKKyAgW1hUX0tFWV8wMF9JbnRlcm5hdGlvbmFsM10gPSBLRVlfWUVOLAorICBbWFRfS0VZXzAwX0ludGVybmF0aW9uYWw0XSA9IEtFWV9IRU5LQU4sCisgIFtYVF9LRVlfMDBfSW50ZXJuYXRpb25hbDVdID0gS0VZX01VSEVOS0FOLAorICBbWFRfS0VZXzAwX0ludGVybmF0aW9uYWw2XSA9IEtFWV9LUEpQQ09NTUEsCisKKyAgW1hUX0tFWV8wMF9MYW5ndWFnZTNdID0gS0VZX0tBVEFLQU5BLAorICBbWFRfS0VZXzAwX0xhbmd1YWdlNF0gPSBLRVlfSElSQUdBTkEsCit9OworCitMSU5VWF9LRVlfTUFQKHh0RTApID0geworICBbWFRfS0VZX0UwX0xlZnRHVUldID0gS0VZX0xFRlRNRVRBLAorICBbWFRfS0VZX0UwX1JpZ2h0QWx0XSA9IEtFWV9SSUdIVEFMVCwKKyAgW1hUX0tFWV9FMF9SaWdodEdVSV0gPSBLRVlfUklHSFRNRVRBLAorICBbWFRfS0VZX0UwX0NvbnRleHRdID0gS0VZX0NPTVBPU0UsCisgIFtYVF9LRVlfRTBfUmlnaHRDb250cm9sXSA9IEtFWV9SSUdIVENUUkwsCisKKyAgW1hUX0tFWV9FMF9JbnNlcnRdID0gS0VZX0lOU0VSVCwKKyAgW1hUX0tFWV9FMF9EZWxldGVdID0gS0VZX0RFTEVURSwKKyAgW1hUX0tFWV9FMF9Ib21lXSA9IEtFWV9IT01FLAorICBbWFRfS0VZX0UwX0VuZF0gPSBLRVlfRU5ELAorICBbWFRfS0VZX0UwX1BhZ2VVcF0gPSBLRVlfUEFHRVVQLAorICBbWFRfS0VZX0UwX1BhZ2VEb3duXSA9IEtFWV9QQUdFRE9XTiwKKworICBbWFRfS0VZX0UwX0Fycm93VXBdID0gS0VZX1VQLAorICBbWFRfS0VZX0UwX0Fycm93TGVmdF0gPSBLRVlfTEVGVCwKKyAgW1hUX0tFWV9FMF9BcnJvd0Rvd25dID0gS0VZX0RPV04sCisgIFtYVF9LRVlfRTBfQXJyb3dSaWdodF0gPSBLRVlfUklHSFQsCisKKyAgW1hUX0tFWV9FMF9LUEVudGVyXSA9IEtFWV9LUEVOVEVSLAorICBbWFRfS0VZX0UwX0tQU2xhc2hdID0gS0VZX0tQU0xBU0gsCisKKyAgW1hUX0tFWV9FMF9Db3B5XSA9IEtFWV9DT1BZLAorICBbWFRfS0VZX0UwX0N1dF0gPSBLRVlfQ1VULAorICBbWFRfS0VZX0UwX1Bhc3RlXSA9IEtFWV9QQVNURSwKKyAgW1hUX0tFWV9FMF9VbmRvXSA9IEtFWV9VTkRPLAorICBbWFRfS0VZX0UwX1JlZG9dID0gS0VZX1JFRE8sCisKKyAgW1hUX0tFWV9FMF9NeUNvbXB1dGVyXSA9IEtFWV9DT01QVVRFUiwKKyAgW1hUX0tFWV9FMF9DYWxjdWxhdG9yXSA9IEtFWV9DQUxDLAorICBbWFRfS0VZX0UwX01haWxdID0gS0VZX01BSUwsCisgIFtYVF9LRVlfRTBfTWFpbF9YMV0gPSBLRVlfTUFJTCwKKworICBbWFRfS0VZX0UwX1dlYkhvbWVdID0gS0VZX0hPTUVQQUdFLAorICBbWFRfS0VZX0UwX1dlYkJvb2ttYXJrc10gPSBLRVlfQk9PS01BUktTLAorICBbWFRfS0VZX0UwX1dlYlNlYXJjaF0gPSBLRVlfU0VBUkNILAorICBbWFRfS0VZX0UwX1dlYkJhY2tdID0gS0VZX0JBQ0ssCisgIFtYVF9LRVlfRTBfV2ViRm9yd2FyZF0gPSBLRVlfRk9SV0FSRCwKKyAgW1hUX0tFWV9FMF9XZWJSZWZyZXNoXSA9IEtFWV9SRUZSRVNILAorICBbWFRfS0VZX0UwX1dlYlN0b3BdID0gS0VZX1NUT1AsCisKKyAgW1hUX0tFWV9FMF9NdXRlXSA9IEtFWV9NVVRFLAorICBbWFRfS0VZX0UwX1ZvbHVtZURvd25dID0gS0VZX1ZPTFVNRURPV04sCisgIFtYVF9LRVlfRTBfVm9sdW1lVXBdID0gS0VZX1ZPTFVNRVVQLAorCisgIFtYVF9LRVlfRTBfTWVkaWFWaWRlb10gPSBLRVlfTUVESUEsCisgIFtYVF9LRVlfRTBfTWVkaWFQbGF5UGF1c2VdID0gS0VZX1BMQVlQQVVTRSwKKyAgW1hUX0tFWV9FMF9NZWRpYVN0b3BdID0gS0VZX1NUT1BDRCwKKyAgW1hUX0tFWV9FMF9NZWRpYVByZXZpb3VzXSA9IEtFWV9QUkVWSU9VU1NPTkcsCisgIFtYVF9LRVlfRTBfTWVkaWFOZXh0XSA9IEtFWV9ORVhUU09ORywKKworICBbWFRfS0VZX0UwX1Bvd2VyXSA9IEtFWV9QT1dFUiwKKyAgW1hUX0tFWV9FMF9TbGVlcF0gPSBLRVlfU0xFRVAsCisgIFtYVF9LRVlfRTBfV2FrZV0gPSBLRVlfV0FLRVVQLAorfTsKKworTElOVVhfS0VZX01BUCh4dEUxKSA9IHsKKyAgW1hUX0tFWV9FMV9QYXVzZV0gPSBLRVlfUEFVU0UsCit9OworCitMSU5VWF9LRVlfTUFQKGF0MDApID0geworICBbQVRfS0VZXzAwX0VzY2FwZV0gPSBLRVlfRVNDLAorICBbQVRfS0VZXzAwX0YxXSA9IEtFWV9GMSwKKyAgW0FUX0tFWV8wMF9GMl0gPSBLRVlfRjIsCisgIFtBVF9LRVlfMDBfRjNdID0gS0VZX0YzLAorICBbQVRfS0VZXzAwX0Y0XSA9IEtFWV9GNCwKKyAgW0FUX0tFWV8wMF9GNV0gPSBLRVlfRjUsCisgIFtBVF9LRVlfMDBfRjZdID0gS0VZX0Y2LAorICBbQVRfS0VZXzAwX0Y3XSA9IEtFWV9GNywKKyAgW0FUX0tFWV8wMF9GN19YMV0gPSBLRVlfRjcsCisgIFtBVF9LRVlfMDBfRjhdID0gS0VZX0Y4LAorICBbQVRfS0VZXzAwX0Y5XSA9IEtFWV9GOSwKKyAgW0FUX0tFWV8wMF9GMTBdID0gS0VZX0YxMCwKKyAgW0FUX0tFWV8wMF9GMTFdID0gS0VZX0YxMSwKKyAgW0FUX0tFWV8wMF9GMTJdID0gS0VZX0YxMiwKKyAgW0FUX0tFWV8wMF9TeXN0ZW1SZXF1ZXN0XSA9IEtFWV9TWVNSUSwKKyAgW0FUX0tFWV8wMF9TY3JvbGxMb2NrXSA9IEtFWV9TQ1JPTExMT0NLLAorCisgIFtBVF9LRVlfMDBfRjEzXSA9IEtFWV9GMTMsCisgIFtBVF9LRVlfMDBfRjE0XSA9IEtFWV9GMTQsCisgIFtBVF9LRVlfMDBfRjE1XSA9IEtFWV9GMTUsCisgIFtBVF9LRVlfMDBfRjE2XSA9IEtFWV9GMTYsCisgIFtBVF9LRVlfMDBfRjE3XSA9IEtFWV9GMTcsCisgIFtBVF9LRVlfMDBfRjE4XSA9IEtFWV9GMTgsCisgIFtBVF9LRVlfMDBfRjE5XSA9IEtFWV9GMTksCisgIFtBVF9LRVlfMDBfRjIwXSA9IEtFWV9GMjAsCisgIFtBVF9LRVlfMDBfRjIxXSA9IEtFWV9GMjEsCisgIFtBVF9LRVlfMDBfRjIyXSA9IEtFWV9GMjIsCisgIFtBVF9LRVlfMDBfRjIzXSA9IEtFWV9GMjMsCisgIFtBVF9LRVlfMDBfRjI0XSA9IEtFWV9GMjQsCisKKyAgW0FUX0tFWV8wMF9HcmF2ZV0gPSBLRVlfR1JBVkUsCisgIFtBVF9LRVlfMDBfMV0gPSBLRVlfMSwKKyAgW0FUX0tFWV8wMF8yXSA9IEtFWV8yLAorICBbQVRfS0VZXzAwXzNdID0gS0VZXzMsCisgIFtBVF9LRVlfMDBfNF0gPSBLRVlfNCwKKyAgW0FUX0tFWV8wMF81XSA9IEtFWV81LAorICBbQVRfS0VZXzAwXzZdID0gS0VZXzYsCisgIFtBVF9LRVlfMDBfN10gPSBLRVlfNywKKyAgW0FUX0tFWV8wMF84XSA9IEtFWV84LAorICBbQVRfS0VZXzAwXzldID0gS0VZXzksCisgIFtBVF9LRVlfMDBfMF0gPSBLRVlfMCwKKyAgW0FUX0tFWV8wMF9NaW51c10gPSBLRVlfTUlOVVMsCisgIFtBVF9LRVlfMDBfRXF1YWxdID0gS0VZX0VRVUFMLAorICBbQVRfS0VZXzAwX0JhY2tzcGFjZV0gPSBLRVlfQkFDS1NQQUNFLAorCisgIFtBVF9LRVlfMDBfVGFiXSA9IEtFWV9UQUIsCisgIFtBVF9LRVlfMDBfUV0gPSBLRVlfUSwKKyAgW0FUX0tFWV8wMF9XXSA9IEtFWV9XLAorICBbQVRfS0VZXzAwX0VdID0gS0VZX0UsCisgIFtBVF9LRVlfMDBfUl0gPSBLRVlfUiwKKyAgW0FUX0tFWV8wMF9UXSA9IEtFWV9ULAorICBbQVRfS0VZXzAwX1ldID0gS0VZX1ksCisgIFtBVF9LRVlfMDBfVV0gPSBLRVlfVSwKKyAgW0FUX0tFWV8wMF9JXSA9IEtFWV9JLAorICBbQVRfS0VZXzAwX09dID0gS0VZX08sCisgIFtBVF9LRVlfMDBfUF0gPSBLRVlfUCwKKyAgW0FUX0tFWV8wMF9MZWZ0QnJhY2tldF0gPSBLRVlfTEVGVEJSQUNFLAorICBbQVRfS0VZXzAwX1JpZ2h0QnJhY2tldF0gPSBLRVlfUklHSFRCUkFDRSwKKyAgW0FUX0tFWV8wMF9CYWNrc2xhc2hdID0gS0VZX0JBQ0tTTEFTSCwKKworICBbQVRfS0VZXzAwX0NhcHNMb2NrXSA9IEtFWV9DQVBTTE9DSywKKyAgW0FUX0tFWV8wMF9BXSA9IEtFWV9BLAorICBbQVRfS0VZXzAwX1NdID0gS0VZX1MsCisgIFtBVF9LRVlfMDBfRF0gPSBLRVlfRCwKKyAgW0FUX0tFWV8wMF9GXSA9IEtFWV9GLAorICBbQVRfS0VZXzAwX0ddID0gS0VZX0csCisgIFtBVF9LRVlfMDBfSF0gPSBLRVlfSCwKKyAgW0FUX0tFWV8wMF9KXSA9IEtFWV9KLAorICBbQVRfS0VZXzAwX0tdID0gS0VZX0ssCisgIFtBVF9LRVlfMDBfTF0gPSBLRVlfTCwKKyAgW0FUX0tFWV8wMF9TZW1pY29sb25dID0gS0VZX1NFTUlDT0xPTiwKKyAgW0FUX0tFWV8wMF9BcG9zdHJvcGhlXSA9IEtFWV9BUE9TVFJPUEhFLAorICBbQVRfS0VZXzAwX0VudGVyXSA9IEtFWV9FTlRFUiwKKworICBbQVRfS0VZXzAwX0xlZnRTaGlmdF0gPSBLRVlfTEVGVFNISUZULAorICBbQVRfS0VZXzAwX0V1cm9wZTJdID0gS0VZXzEwMk5ELAorICBbQVRfS0VZXzAwX1pdID0gS0VZX1osCisgIFtBVF9LRVlfMDBfWF0gPSBLRVlfWCwKKyAgW0FUX0tFWV8wMF9DXSA9IEtFWV9DLAorICBbQVRfS0VZXzAwX1ZdID0gS0VZX1YsCisgIFtBVF9LRVlfMDBfQl0gPSBLRVlfQiwKKyAgW0FUX0tFWV8wMF9OXSA9IEtFWV9OLAorICBbQVRfS0VZXzAwX01dID0gS0VZX00sCisgIFtBVF9LRVlfMDBfQ29tbWFdID0gS0VZX0NPTU1BLAorICBbQVRfS0VZXzAwX1BlcmlvZF0gPSBLRVlfRE9ULAorICBbQVRfS0VZXzAwX1NsYXNoXSA9IEtFWV9TTEFTSCwKKyAgW0FUX0tFWV8wMF9SaWdodFNoaWZ0XSA9IEtFWV9SSUdIVFNISUZULAorCisgIFtBVF9LRVlfMDBfTGVmdENvbnRyb2xdID0gS0VZX0xFRlRDVFJMLAorICBbQVRfS0VZXzAwX0xlZnRBbHRdID0gS0VZX0xFRlRBTFQsCisgIFtBVF9LRVlfMDBfU3BhY2VdID0gS0VZX1NQQUNFLAorCisgIFtBVF9LRVlfMDBfTnVtTG9ja10gPSBLRVlfTlVNTE9DSywKKyAgW0FUX0tFWV8wMF9LUEFzdGVyaXNrXSA9IEtFWV9LUEFTVEVSSVNLLAorICBbQVRfS0VZXzAwX0tQTWludXNdID0gS0VZX0tQTUlOVVMsCisgIFtBVF9LRVlfMDBfS1BQbHVzXSA9IEtFWV9LUFBMVVMsCisgIFtBVF9LRVlfMDBfS1BQZXJpb2RdID0gS0VZX0tQRE9ULAorICBbQVRfS0VZXzAwX0tQMF0gPSBLRVlfS1AwLAorICBbQVRfS0VZXzAwX0tQMV0gPSBLRVlfS1AxLAorICBbQVRfS0VZXzAwX0tQMl0gPSBLRVlfS1AyLAorICBbQVRfS0VZXzAwX0tQM10gPSBLRVlfS1AzLAorICBbQVRfS0VZXzAwX0tQNF0gPSBLRVlfS1A0LAorICBbQVRfS0VZXzAwX0tQNV0gPSBLRVlfS1A1LAorICBbQVRfS0VZXzAwX0tQNl0gPSBLRVlfS1A2LAorICBbQVRfS0VZXzAwX0tQN10gPSBLRVlfS1A3LAorICBbQVRfS0VZXzAwX0tQOF0gPSBLRVlfS1A4LAorICBbQVRfS0VZXzAwX0tQOV0gPSBLRVlfS1A5LAorCisgIFtBVF9LRVlfMDBfS1BDb21tYV0gPSBLRVlfS1BDT01NQSwKKyAgW0FUX0tFWV8wMF9LUEVxdWFsXSA9IEtFWV9LUEVRVUFMLAorCisgIFtBVF9LRVlfMDBfSW50ZXJuYXRpb25hbDFdID0gS0VZX1JPLAorICBbQVRfS0VZXzAwX0ludGVybmF0aW9uYWwyXSA9IEtFWV9LQVRBS0FOQUhJUkFHQU5BLAorICBbQVRfS0VZXzAwX0ludGVybmF0aW9uYWwzXSA9IEtFWV9ZRU4sCisgIFtBVF9LRVlfMDBfSW50ZXJuYXRpb25hbDRdID0gS0VZX0hFTktBTiwKKyAgW0FUX0tFWV8wMF9JbnRlcm5hdGlvbmFsNV0gPSBLRVlfTVVIRU5LQU4sCisgIFtBVF9LRVlfMDBfSW50ZXJuYXRpb25hbDZdID0gS0VZX0tQSlBDT01NQSwKKworICBbQVRfS0VZXzAwX0xhbmd1YWdlM10gPSBLRVlfS0FUQUtBTkEsCisgIFtBVF9LRVlfMDBfTGFuZ3VhZ2U0XSA9IEtFWV9ISVJBR0FOQSwKK307CisKK0xJTlVYX0tFWV9NQVAoYXRFMCkgPSB7CisgIFtBVF9LRVlfRTBfTGVmdEdVSV0gPSBLRVlfTEVGVE1FVEEsCisgIFtBVF9LRVlfRTBfUmlnaHRBbHRdID0gS0VZX1JJR0hUQUxULAorICBbQVRfS0VZX0UwX1JpZ2h0R1VJXSA9IEtFWV9SSUdIVE1FVEEsCisgIFtBVF9LRVlfRTBfQ29udGV4dF0gPSBLRVlfQ09NUE9TRSwKKyAgW0FUX0tFWV9FMF9SaWdodENvbnRyb2xdID0gS0VZX1JJR0hUQ1RSTCwKKworICBbQVRfS0VZX0UwX0luc2VydF0gPSBLRVlfSU5TRVJULAorICBbQVRfS0VZX0UwX0RlbGV0ZV0gPSBLRVlfREVMRVRFLAorICBbQVRfS0VZX0UwX0hvbWVdID0gS0VZX0hPTUUsCisgIFtBVF9LRVlfRTBfRW5kXSA9IEtFWV9FTkQsCisgIFtBVF9LRVlfRTBfUGFnZVVwXSA9IEtFWV9QQUdFVVAsCisgIFtBVF9LRVlfRTBfUGFnZURvd25dID0gS0VZX1BBR0VET1dOLAorCisgIFtBVF9LRVlfRTBfQXJyb3dVcF0gPSBLRVlfVVAsCisgIFtBVF9LRVlfRTBfQXJyb3dMZWZ0XSA9IEtFWV9MRUZULAorICBbQVRfS0VZX0UwX0Fycm93RG93bl0gPSBLRVlfRE9XTiwKKyAgW0FUX0tFWV9FMF9BcnJvd1JpZ2h0XSA9IEtFWV9SSUdIVCwKKworICBbQVRfS0VZX0UwX0tQRW50ZXJdID0gS0VZX0tQRU5URVIsCisgIFtBVF9LRVlfRTBfS1BTbGFzaF0gPSBLRVlfS1BTTEFTSCwKKworICBbQVRfS0VZX0UwX0NvcHldID0gS0VZX0NPUFksCisgIFtBVF9LRVlfRTBfQ3V0XSA9IEtFWV9DVVQsCisgIFtBVF9LRVlfRTBfUGFzdGVdID0gS0VZX1BBU1RFLAorICBbQVRfS0VZX0UwX1VuZG9dID0gS0VZX1VORE8sCisgIFtBVF9LRVlfRTBfUmVkb10gPSBLRVlfUkVETywKKworICBbQVRfS0VZX0UwX015Q29tcHV0ZXJdID0gS0VZX0NPTVBVVEVSLAorICBbQVRfS0VZX0UwX0NhbGN1bGF0b3JdID0gS0VZX0NBTEMsCisgIFtBVF9LRVlfRTBfTWFpbF0gPSBLRVlfTUFJTCwKKyAgW0FUX0tFWV9FMF9NYWlsX1gxXSA9IEtFWV9NQUlMLAorCisgIFtBVF9LRVlfRTBfV2ViSG9tZV0gPSBLRVlfSE9NRVBBR0UsCisgIFtBVF9LRVlfRTBfV2ViQm9va21hcmtzXSA9IEtFWV9CT09LTUFSS1MsCisgIFtBVF9LRVlfRTBfV2ViU2VhcmNoXSA9IEtFWV9TRUFSQ0gsCisgIFtBVF9LRVlfRTBfV2ViQmFja10gPSBLRVlfQkFDSywKKyAgW0FUX0tFWV9FMF9XZWJGb3J3YXJkXSA9IEtFWV9GT1JXQVJELAorICBbQVRfS0VZX0UwX1dlYlJlZnJlc2hdID0gS0VZX1JFRlJFU0gsCisgIFtBVF9LRVlfRTBfV2ViU3RvcF0gPSBLRVlfU1RPUCwKKworICBbQVRfS0VZX0UwX011dGVdID0gS0VZX01VVEUsCisgIFtBVF9LRVlfRTBfVm9sdW1lRG93bl0gPSBLRVlfVk9MVU1FRE9XTiwKKyAgW0FUX0tFWV9FMF9Wb2x1bWVVcF0gPSBLRVlfVk9MVU1FVVAsCisKKyAgW0FUX0tFWV9FMF9NZWRpYVZpZGVvXSA9IEtFWV9NRURJQSwKKyAgW0FUX0tFWV9FMF9NZWRpYVBsYXlQYXVzZV0gPSBLRVlfUExBWVBBVVNFLAorICBbQVRfS0VZX0UwX01lZGlhU3RvcF0gPSBLRVlfU1RPUENELAorICBbQVRfS0VZX0UwX01lZGlhUHJldmlvdXNdID0gS0VZX1BSRVZJT1VTU09ORywKKyAgW0FUX0tFWV9FMF9NZWRpYU5leHRdID0gS0VZX05FWFRTT05HLAorCisgIFtBVF9LRVlfRTBfUG93ZXJdID0gS0VZX1BPV0VSLAorICBbQVRfS0VZX0UwX1NsZWVwXSA9IEtFWV9TTEVFUCwKKyAgW0FUX0tFWV9FMF9XYWtlXSA9IEtFWV9XQUtFVVAsCit9OworCitMSU5VWF9LRVlfTUFQKGF0RTEpID0geworICBbQVRfS0VZX0UxX1BhdXNlXSA9IEtFWV9QQVVTRSwKK307CisKK0xJTlVYX0tFWV9NQVAocHMyKSA9IHsKKyAgW1BTMl9LRVlfRXNjYXBlXSA9IEtFWV9FU0MsCisgIFtQUzJfS0VZX0YxXSA9IEtFWV9GMSwKKyAgW1BTMl9LRVlfRjJdID0gS0VZX0YyLAorICBbUFMyX0tFWV9GM10gPSBLRVlfRjMsCisgIFtQUzJfS0VZX0Y0XSA9IEtFWV9GNCwKKyAgW1BTMl9LRVlfRjVdID0gS0VZX0Y1LAorICBbUFMyX0tFWV9GNl0gPSBLRVlfRjYsCisgIFtQUzJfS0VZX0Y3XSA9IEtFWV9GNywKKyAgW1BTMl9LRVlfRjhdID0gS0VZX0Y4LAorICBbUFMyX0tFWV9GOV0gPSBLRVlfRjksCisgIFtQUzJfS0VZX0YxMF0gPSBLRVlfRjEwLAorICBbUFMyX0tFWV9GMTFdID0gS0VZX0YxMSwKKyAgW1BTMl9LRVlfRjEyXSA9IEtFWV9GMTIsCisgIFtQUzJfS0VZX1BhdXNlXSA9IEtFWV9QQVVTRSwKKyAgW1BTMl9LRVlfU2Nyb2xsTG9ja10gPSBLRVlfU0NST0xMTE9DSywKKworICBbUFMyX0tFWV9HcmF2ZV0gPSBLRVlfR1JBVkUsCisgIFtQUzJfS0VZXzFdID0gS0VZXzEsCisgIFtQUzJfS0VZXzJdID0gS0VZXzIsCisgIFtQUzJfS0VZXzNdID0gS0VZXzMsCisgIFtQUzJfS0VZXzRdID0gS0VZXzQsCisgIFtQUzJfS0VZXzVdID0gS0VZXzUsCisgIFtQUzJfS0VZXzZdID0gS0VZXzYsCisgIFtQUzJfS0VZXzddID0gS0VZXzcsCisgIFtQUzJfS0VZXzhdID0gS0VZXzgsCisgIFtQUzJfS0VZXzldID0gS0VZXzksCisgIFtQUzJfS0VZXzBdID0gS0VZXzAsCisgIFtQUzJfS0VZX01pbnVzXSA9IEtFWV9NSU5VUywKKyAgW1BTMl9LRVlfRXF1YWxdID0gS0VZX0VRVUFMLAorICBbUFMyX0tFWV9CYWNrc3BhY2VdID0gS0VZX0JBQ0tTUEFDRSwKKworICBbUFMyX0tFWV9UYWJdID0gS0VZX1RBQiwKKyAgW1BTMl9LRVlfUV0gPSBLRVlfUSwKKyAgW1BTMl9LRVlfV10gPSBLRVlfVywKKyAgW1BTMl9LRVlfRV0gPSBLRVlfRSwKKyAgW1BTMl9LRVlfUl0gPSBLRVlfUiwKKyAgW1BTMl9LRVlfVF0gPSBLRVlfVCwKKyAgW1BTMl9LRVlfWV0gPSBLRVlfWSwKKyAgW1BTMl9LRVlfVV0gPSBLRVlfVSwKKyAgW1BTMl9LRVlfSV0gPSBLRVlfSSwKKyAgW1BTMl9LRVlfT10gPSBLRVlfTywKKyAgW1BTMl9LRVlfUF0gPSBLRVlfUCwKKyAgW1BTMl9LRVlfTGVmdEJyYWNrZXRdID0gS0VZX0xFRlRCUkFDRSwKKyAgW1BTMl9LRVlfUmlnaHRCcmFja2V0XSA9IEtFWV9SSUdIVEJSQUNFLAorICBbUFMyX0tFWV9CYWNrc2xhc2hdID0gS0VZX0JBQ0tTTEFTSCwKKyAgW1BTMl9LRVlfRXVyb3BlMV0gPSBLRVlfQkFDS1NMQVNILAorCisgIFtQUzJfS0VZX0NhcHNMb2NrXSA9IEtFWV9DQVBTTE9DSywKKyAgW1BTMl9LRVlfQV0gPSBLRVlfQSwKKyAgW1BTMl9LRVlfU10gPSBLRVlfUywKKyAgW1BTMl9LRVlfRF0gPSBLRVlfRCwKKyAgW1BTMl9LRVlfRl0gPSBLRVlfRiwKKyAgW1BTMl9LRVlfR10gPSBLRVlfRywKKyAgW1BTMl9LRVlfSF0gPSBLRVlfSCwKKyAgW1BTMl9LRVlfSl0gPSBLRVlfSiwKKyAgW1BTMl9LRVlfS10gPSBLRVlfSywKKyAgW1BTMl9LRVlfTF0gPSBLRVlfTCwKKyAgW1BTMl9LRVlfU2VtaWNvbG9uXSA9IEtFWV9TRU1JQ09MT04sCisgIFtQUzJfS0VZX0Fwb3N0cm9waGVdID0gS0VZX0FQT1NUUk9QSEUsCisgIFtQUzJfS0VZX0VudGVyXSA9IEtFWV9FTlRFUiwKKworICBbUFMyX0tFWV9MZWZ0U2hpZnRdID0gS0VZX0xFRlRTSElGVCwKKyAgW1BTMl9LRVlfRXVyb3BlMl0gPSBLRVlfMTAyTkQsCisgIFtQUzJfS0VZX1pdID0gS0VZX1osCisgIFtQUzJfS0VZX1hdID0gS0VZX1gsCisgIFtQUzJfS0VZX0NdID0gS0VZX0MsCisgIFtQUzJfS0VZX1ZdID0gS0VZX1YsCisgIFtQUzJfS0VZX0JdID0gS0VZX0IsCisgIFtQUzJfS0VZX05dID0gS0VZX04sCisgIFtQUzJfS0VZX01dID0gS0VZX00sCisgIFtQUzJfS0VZX0NvbW1hXSA9IEtFWV9DT01NQSwKKyAgW1BTMl9LRVlfUGVyaW9kXSA9IEtFWV9ET1QsCisgIFtQUzJfS0VZX1NsYXNoXSA9IEtFWV9TTEFTSCwKKyAgW1BTMl9LRVlfUmlnaHRTaGlmdF0gPSBLRVlfUklHSFRTSElGVCwKKworICBbUFMyX0tFWV9MZWZ0Q29udHJvbF0gPSBLRVlfTEVGVENUUkwsCisgIFtQUzJfS0VZX0xlZnRBbHRdID0gS0VZX0xFRlRBTFQsCisgIFtQUzJfS0VZX0xlZnRHVUldID0gS0VZX0xFRlRNRVRBLAorICBbUFMyX0tFWV9TcGFjZV0gPSBLRVlfU1BBQ0UsCisgIFtQUzJfS0VZX1JpZ2h0QWx0XSA9IEtFWV9SSUdIVEFMVCwKKyAgW1BTMl9LRVlfUmlnaHRHVUldID0gS0VZX1JJR0hUTUVUQSwKKyAgW1BTMl9LRVlfQ29udGV4dF0gPSBLRVlfQ09NUE9TRSwKKyAgW1BTMl9LRVlfUmlnaHRDb250cm9sXSA9IEtFWV9SSUdIVENUUkwsCisKKyAgW1BTMl9LRVlfSW5zZXJ0XSA9IEtFWV9JTlNFUlQsCisgIFtQUzJfS0VZX0RlbGV0ZV0gPSBLRVlfREVMRVRFLAorICBbUFMyX0tFWV9Ib21lXSA9IEtFWV9IT01FLAorICBbUFMyX0tFWV9FbmRdID0gS0VZX0VORCwKKyAgW1BTMl9LRVlfUGFnZVVwXSA9IEtFWV9QQUdFVVAsCisgIFtQUzJfS0VZX1BhZ2VEb3duXSA9IEtFWV9QQUdFRE9XTiwKKworICBbUFMyX0tFWV9BcnJvd1VwXSA9IEtFWV9VUCwKKyAgW1BTMl9LRVlfQXJyb3dMZWZ0XSA9IEtFWV9MRUZULAorICBbUFMyX0tFWV9BcnJvd0Rvd25dID0gS0VZX0RPV04sCisgIFtQUzJfS0VZX0Fycm93UmlnaHRdID0gS0VZX1JJR0hULAorCisgIFtQUzJfS0VZX051bUxvY2tdID0gS0VZX05VTUxPQ0ssCisgIFtQUzJfS0VZX0tQU2xhc2hdID0gS0VZX0tQU0xBU0gsCisgIFtQUzJfS0VZX0tQQXN0ZXJpc2tdID0gS0VZX0tQQVNURVJJU0ssCisgIFtQUzJfS0VZX0tQTWludXNdID0gS0VZX0tQTUlOVVMsCisgIFtQUzJfS0VZX0tQUGx1c10gPSBLRVlfS1BQTFVTLAorICBbUFMyX0tFWV9LUEVudGVyXSA9IEtFWV9LUEVOVEVSLAorICBbUFMyX0tFWV9LUFBlcmlvZF0gPSBLRVlfS1BET1QsCisgIFtQUzJfS0VZX0tQMF0gPSBLRVlfS1AwLAorICBbUFMyX0tFWV9LUDFdID0gS0VZX0tQMSwKKyAgW1BTMl9LRVlfS1AyXSA9IEtFWV9LUDIsCisgIFtQUzJfS0VZX0tQM10gPSBLRVlfS1AzLAorICBbUFMyX0tFWV9LUDRdID0gS0VZX0tQNCwKKyAgW1BTMl9LRVlfS1A1XSA9IEtFWV9LUDUsCisgIFtQUzJfS0VZX0tQNl0gPSBLRVlfS1A2LAorICBbUFMyX0tFWV9LUDddID0gS0VZX0tQNywKKyAgW1BTMl9LRVlfS1A4XSA9IEtFWV9LUDgsCisgIFtQUzJfS0VZX0tQOV0gPSBLRVlfS1A5LAorICBbUFMyX0tFWV9LUENvbW1hXSA9IEtFWV9LUENPTU1BLAorCisgIFtQUzJfS0VZX0ludGVybmF0aW9uYWwxXSA9IEtFWV9STywKKyAgW1BTMl9LRVlfSW50ZXJuYXRpb25hbDJdID0gS0VZX0tBVEFLQU5BSElSQUdBTkEsCisgIFtQUzJfS0VZX0ludGVybmF0aW9uYWwzXSA9IEtFWV9ZRU4sCisgIFtQUzJfS0VZX0ludGVybmF0aW9uYWw0XSA9IEtFWV9IRU5LQU4sCisgIFtQUzJfS0VZX0ludGVybmF0aW9uYWw1XSA9IEtFWV9NVUhFTktBTiwKK307CisKK0xJTlVYX0tFWV9NQVAoaGlkKSA9IHsKKyAgW0hJRF9LRVlfRXNjYXBlXSA9IEtFWV9FU0MsCisgIFtISURfS0VZX0YxXSA9IEtFWV9GMSwKKyAgW0hJRF9LRVlfRjJdID0gS0VZX0YyLAorICBbSElEX0tFWV9GM10gPSBLRVlfRjMsCisgIFtISURfS0VZX0Y0XSA9IEtFWV9GNCwKKyAgW0hJRF9LRVlfRjVdID0gS0VZX0Y1LAorICBbSElEX0tFWV9GNl0gPSBLRVlfRjYsCisgIFtISURfS0VZX0Y3XSA9IEtFWV9GNywKKyAgW0hJRF9LRVlfRjhdID0gS0VZX0Y4LAorICBbSElEX0tFWV9GOV0gPSBLRVlfRjksCisgIFtISURfS0VZX0YxMF0gPSBLRVlfRjEwLAorICBbSElEX0tFWV9GMTFdID0gS0VZX0YxMSwKKyAgW0hJRF9LRVlfRjEyXSA9IEtFWV9GMTIsCisgIFtISURfS0VZX1BhdXNlXSA9IEtFWV9QQVVTRSwKKyAgW0hJRF9LRVlfU2Nyb2xsTG9ja10gPSBLRVlfU0NST0xMTE9DSywKKworICBbSElEX0tFWV9GMTNdID0gS0VZX0YxMywKKyAgW0hJRF9LRVlfRjE0XSA9IEtFWV9GMTQsCisgIFtISURfS0VZX0YxNV0gPSBLRVlfRjE1LAorICBbSElEX0tFWV9GMTZdID0gS0VZX0YxNiwKKyAgW0hJRF9LRVlfRjE3XSA9IEtFWV9GMTcsCisgIFtISURfS0VZX0YxOF0gPSBLRVlfRjE4LAorICBbSElEX0tFWV9GMTldID0gS0VZX0YxOSwKKyAgW0hJRF9LRVlfRjIwXSA9IEtFWV9GMjAsCisgIFtISURfS0VZX0YyMV0gPSBLRVlfRjIxLAorICBbSElEX0tFWV9GMjJdID0gS0VZX0YyMiwKKyAgW0hJRF9LRVlfRjIzXSA9IEtFWV9GMjMsCisgIFtISURfS0VZX0YyNF0gPSBLRVlfRjI0LAorCisgIFtISURfS0VZX0dyYXZlXSA9IEtFWV9HUkFWRSwKKyAgW0hJRF9LRVlfMV0gPSBLRVlfMSwKKyAgW0hJRF9LRVlfMl0gPSBLRVlfMiwKKyAgW0hJRF9LRVlfM10gPSBLRVlfMywKKyAgW0hJRF9LRVlfNF0gPSBLRVlfNCwKKyAgW0hJRF9LRVlfNV0gPSBLRVlfNSwKKyAgW0hJRF9LRVlfNl0gPSBLRVlfNiwKKyAgW0hJRF9LRVlfN10gPSBLRVlfNywKKyAgW0hJRF9LRVlfOF0gPSBLRVlfOCwKKyAgW0hJRF9LRVlfOV0gPSBLRVlfOSwKKyAgW0hJRF9LRVlfMF0gPSBLRVlfMCwKKyAgW0hJRF9LRVlfTWludXNdID0gS0VZX01JTlVTLAorICBbSElEX0tFWV9FcXVhbF0gPSBLRVlfRVFVQUwsCisgIFtISURfS0VZX0JhY2tzcGFjZV0gPSBLRVlfQkFDS1NQQUNFLAorCisgIFtISURfS0VZX1RhYl0gPSBLRVlfVEFCLAorICBbSElEX0tFWV9RXSA9IEtFWV9RLAorICBbSElEX0tFWV9XXSA9IEtFWV9XLAorICBbSElEX0tFWV9FXSA9IEtFWV9FLAorICBbSElEX0tFWV9SXSA9IEtFWV9SLAorICBbSElEX0tFWV9UXSA9IEtFWV9ULAorICBbSElEX0tFWV9ZXSA9IEtFWV9ZLAorICBbSElEX0tFWV9VXSA9IEtFWV9VLAorICBbSElEX0tFWV9JXSA9IEtFWV9JLAorICBbSElEX0tFWV9PXSA9IEtFWV9PLAorICBbSElEX0tFWV9QXSA9IEtFWV9QLAorICBbSElEX0tFWV9MZWZ0QnJhY2tldF0gPSBLRVlfTEVGVEJSQUNFLAorICBbSElEX0tFWV9SaWdodEJyYWNrZXRdID0gS0VZX1JJR0hUQlJBQ0UsCisgIFtISURfS0VZX0JhY2tzbGFzaF0gPSBLRVlfQkFDS1NMQVNILAorICBbSElEX0tFWV9FdXJvcGUxXSA9IEtFWV9CQUNLU0xBU0gsCisKKyAgW0hJRF9LRVlfQ2Fwc0xvY2tdID0gS0VZX0NBUFNMT0NLLAorICBbSElEX0tFWV9BXSA9IEtFWV9BLAorICBbSElEX0tFWV9TXSA9IEtFWV9TLAorICBbSElEX0tFWV9EXSA9IEtFWV9ELAorICBbSElEX0tFWV9GXSA9IEtFWV9GLAorICBbSElEX0tFWV9HXSA9IEtFWV9HLAorICBbSElEX0tFWV9IXSA9IEtFWV9ILAorICBbSElEX0tFWV9KXSA9IEtFWV9KLAorICBbSElEX0tFWV9LXSA9IEtFWV9LLAorICBbSElEX0tFWV9MXSA9IEtFWV9MLAorICBbSElEX0tFWV9TZW1pY29sb25dID0gS0VZX1NFTUlDT0xPTiwKKyAgW0hJRF9LRVlfQXBvc3Ryb3BoZV0gPSBLRVlfQVBPU1RST1BIRSwKKyAgW0hJRF9LRVlfRW50ZXJdID0gS0VZX0VOVEVSLAorCisgIFtISURfS0VZX0xlZnRTaGlmdF0gPSBLRVlfTEVGVFNISUZULAorICBbSElEX0tFWV9FdXJvcGUyXSA9IEtFWV8xMDJORCwKKyAgW0hJRF9LRVlfWl0gPSBLRVlfWiwKKyAgW0hJRF9LRVlfWF0gPSBLRVlfWCwKKyAgW0hJRF9LRVlfQ10gPSBLRVlfQywKKyAgW0hJRF9LRVlfVl0gPSBLRVlfViwKKyAgW0hJRF9LRVlfQl0gPSBLRVlfQiwKKyAgW0hJRF9LRVlfTl0gPSBLRVlfTiwKKyAgW0hJRF9LRVlfTV0gPSBLRVlfTSwKKyAgW0hJRF9LRVlfQ29tbWFdID0gS0VZX0NPTU1BLAorICBbSElEX0tFWV9QZXJpb2RdID0gS0VZX0RPVCwKKyAgW0hJRF9LRVlfU2xhc2hdID0gS0VZX1NMQVNILAorICBbSElEX0tFWV9SaWdodFNoaWZ0XSA9IEtFWV9SSUdIVFNISUZULAorCisgIFtISURfS0VZX0xlZnRDb250cm9sXSA9IEtFWV9MRUZUQ1RSTCwKKyAgW0hJRF9LRVlfTGVmdEFsdF0gPSBLRVlfTEVGVEFMVCwKKyAgW0hJRF9LRVlfTGVmdEdVSV0gPSBLRVlfTEVGVE1FVEEsCisgIFtISURfS0VZX1NwYWNlXSA9IEtFWV9TUEFDRSwKKyAgW0hJRF9LRVlfUmlnaHRBbHRdID0gS0VZX1JJR0hUQUxULAorICBbSElEX0tFWV9SaWdodEdVSV0gPSBLRVlfUklHSFRNRVRBLAorICBbSElEX0tFWV9Db250ZXh0XSA9IEtFWV9DT01QT1NFLAorICBbSElEX0tFWV9SaWdodENvbnRyb2xdID0gS0VZX1JJR0hUQ1RSTCwKKworICBbSElEX0tFWV9JbnNlcnRdID0gS0VZX0lOU0VSVCwKKyAgW0hJRF9LRVlfRGVsZXRlXSA9IEtFWV9ERUxFVEUsCisgIFtISURfS0VZX0hvbWVdID0gS0VZX0hPTUUsCisgIFtISURfS0VZX0VuZF0gPSBLRVlfRU5ELAorICBbSElEX0tFWV9QYWdlVXBdID0gS0VZX1BBR0VVUCwKKyAgW0hJRF9LRVlfUGFnZURvd25dID0gS0VZX1BBR0VET1dOLAorCisgIFtISURfS0VZX0Fycm93VXBdID0gS0VZX1VQLAorICBbSElEX0tFWV9BcnJvd0xlZnRdID0gS0VZX0xFRlQsCisgIFtISURfS0VZX0Fycm93RG93bl0gPSBLRVlfRE9XTiwKKyAgW0hJRF9LRVlfQXJyb3dSaWdodF0gPSBLRVlfUklHSFQsCisKKyAgW0hJRF9LRVlfTnVtTG9ja10gPSBLRVlfTlVNTE9DSywKKyAgW0hJRF9LRVlfS1BTbGFzaF0gPSBLRVlfS1BTTEFTSCwKKyAgW0hJRF9LRVlfS1BBc3Rlcmlza10gPSBLRVlfS1BBU1RFUklTSywKKyAgW0hJRF9LRVlfS1BNaW51c10gPSBLRVlfS1BNSU5VUywKKyAgW0hJRF9LRVlfS1BQbHVzXSA9IEtFWV9LUFBMVVMsCisgIFtISURfS0VZX0tQRW50ZXJdID0gS0VZX0tQRU5URVIsCisgIFtISURfS0VZX0tQUGVyaW9kXSA9IEtFWV9LUERPVCwKKyAgW0hJRF9LRVlfS1AwXSA9IEtFWV9LUDAsCisgIFtISURfS0VZX0tQMV0gPSBLRVlfS1AxLAorICBbSElEX0tFWV9LUDJdID0gS0VZX0tQMiwKKyAgW0hJRF9LRVlfS1AzXSA9IEtFWV9LUDMsCisgIFtISURfS0VZX0tQNF0gPSBLRVlfS1A0LAorICBbSElEX0tFWV9LUDVdID0gS0VZX0tQNSwKKyAgW0hJRF9LRVlfS1A2XSA9IEtFWV9LUDYsCisgIFtISURfS0VZX0tQN10gPSBLRVlfS1A3LAorICBbSElEX0tFWV9LUDhdID0gS0VZX0tQOCwKKyAgW0hJRF9LRVlfS1A5XSA9IEtFWV9LUDksCisKKyAgW0hJRF9LRVlfS1BDb21tYV0gPSBLRVlfS1BDT01NQSwKKyAgW0hJRF9LRVlfS1BFcXVhbF0gPSBLRVlfS1BFUVVBTCwKKworICBbSElEX0tFWV9JbnRlcm5hdGlvbmFsMV0gPSBLRVlfUk8sCisgIFtISURfS0VZX0ludGVybmF0aW9uYWwyXSA9IEtFWV9LQVRBS0FOQUhJUkFHQU5BLAorICBbSElEX0tFWV9JbnRlcm5hdGlvbmFsM10gPSBLRVlfWUVOLAorICBbSElEX0tFWV9JbnRlcm5hdGlvbmFsNF0gPSBLRVlfSEVOS0FOLAorICBbSElEX0tFWV9JbnRlcm5hdGlvbmFsNV0gPSBLRVlfTVVIRU5LQU4sCisgIFtISURfS0VZX0ludGVybmF0aW9uYWw2XSA9IEtFWV9LUEpQQ09NTUEsCisKKyAgW0hJRF9LRVlfTGFuZ3VhZ2UzXSA9IEtFWV9LQVRBS0FOQSwKKyAgW0hJRF9LRVlfTGFuZ3VhZ2U0XSA9IEtFWV9ISVJBR0FOQSwKKyAgW0hJRF9LRVlfTGFuZ3VhZ2U1XSA9IEtFWV9aRU5LQUtVSEFOS0FLVSwKKworICBbSElEX0tFWV9Db3B5XSA9IEtFWV9DT1BZLAorICBbSElEX0tFWV9DdXRdID0gS0VZX0NVVCwKKyAgW0hJRF9LRVlfUGFzdGVdID0gS0VZX1BBU1RFLAorICBbSElEX0tFWV9VbmRvXSA9IEtFWV9VTkRPLAorCisgIFtISURfS0VZX011dGVdID0gS0VZX01VVEUsCisgIFtISURfS0VZX1ZvbHVtZURvd25dID0gS0VZX1ZPTFVNRURPV04sCisgIFtISURfS0VZX1ZvbHVtZVVwXSA9IEtFWV9WT0xVTUVVUCwKKworICBbSElEX0tFWV9Qb3dlcl0gPSBLRVlfUE9XRVIsCit9OworCisjZGVmaW5lIExJTlVYX0tFWV9NQVBfREVTQ1JJUFRPUih0eXBlKSB7IFwKKyAgLm5hbWUgPSAjdHlwZSwgXAorICAua2V5cyA9IExJTlVYX0tFWV9NQVBfTkFNRSh0eXBlKSwgXAorICAuY291bnQgPSBBUlJBWV9DT1VOVChMSU5VWF9LRVlfTUFQX05BTUUodHlwZSkpIFwKK30KKworY29uc3QgTGludXhLZXlNYXBEZXNjcmlwdG9yIGxpbnV4S2V5TWFwRGVzY3JpcHRvcnNbXSA9IHsKKyAgTElOVVhfS0VZX01BUF9ERVNDUklQVE9SKHh0MDApLAorICBMSU5VWF9LRVlfTUFQX0RFU0NSSVBUT1IoeHRFMCksCisgIExJTlVYX0tFWV9NQVBfREVTQ1JJUFRPUih4dEUxKSwKKyAgTElOVVhfS0VZX01BUF9ERVNDUklQVE9SKGF0MDApLAorICBMSU5VWF9LRVlfTUFQX0RFU0NSSVBUT1IoYXRFMCksCisgIExJTlVYX0tFWV9NQVBfREVTQ1JJUFRPUihhdEUxKSwKKyAgTElOVVhfS0VZX01BUF9ERVNDUklQVE9SKHBzMiksCisgIExJTlVYX0tFWV9NQVBfREVTQ1JJUFRPUihoaWQpCit9OworCitjb25zdCB1bnNpZ25lZCBjaGFyIGxpbnV4S2V5TWFwQ291bnQgPSBBUlJBWV9DT1VOVChsaW51eEtleU1hcERlc2NyaXB0b3JzKTsKKyNlbmRpZiAvKiBIQVZFX0xJTlVYX0lOUFVUX0ggKi8KKworI2lmZGVmIEhBVkVfTElOVVhfVUlOUFVUX0gKKyNpbmNsdWRlIDxsaW51eC91aW5wdXQuaD4KKworc3RydWN0IFVpbnB1dE9iamVjdFN0cnVjdCB7CisgIGludCBmaWxlRGVzY3JpcHRvcjsKKyAgQklUTUFTSyhwcmVzc2VkS2V5cywgS0VZX01BWCsxLCBjaGFyKTsKK307CisjZW5kaWYgLyogSEFWRV9MSU5VWF9VSU5QVVRfSCAqLworCitpbnQKK2luc3RhbGxLZXJuZWxNb2R1bGUgKGNvbnN0IGNoYXIgKm5hbWUsIHVuc2lnbmVkIGNoYXIgKnN0YXR1cykgeworICBpZiAoc3RhdHVzICYmICpzdGF0dXMpIHJldHVybiAqc3RhdHVzID09IDI7CisKKyAgeworICAgIGNvbnN0IGNoYXIgKmNvbW1hbmQgPSAibW9kcHJvYmUiOworICAgIGNoYXIgYnVmZmVyWzBYMTAwXTsKKyAgICBpZiAoc3RhdHVzKSArKypzdGF0dXM7CisKKyAgICB7CisgICAgICBjb25zdCBjaGFyICpwYXRoID0gIi9wcm9jL3N5cy9rZXJuZWwvbW9kcHJvYmUiOworICAgICAgRklMRSAqc3RyZWFtID0gZm9wZW4ocGF0aCwgInIiKTsKKworICAgICAgaWYgKHN0cmVhbSkgeworICAgICAgICBjaGFyICpsaW5lID0gZmdldHMoYnVmZmVyLCBzaXplb2YoYnVmZmVyKSwgc3RyZWFtKTsKKworICAgICAgICBpZiAobGluZSkgeworICAgICAgICAgIHNpemVfdCBsZW5ndGggPSBzdHJsZW4obGluZSk7CisgICAgICAgICAgaWYgKGxlbmd0aCAmJiAobGluZVtsZW5ndGgtMV0gPT0gJ1xuJykpIGxpbmVbLS1sZW5ndGhdID0gMDsKKyAgICAgICAgICBpZiAobGVuZ3RoKSBjb21tYW5kID0gbGluZTsKKyAgICAgICAgfQorCisgICAgICAgIGZjbG9zZShzdHJlYW0pOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgbG9nTWVzc2FnZShMT0dfV0FSTklORywgImNhbm5vdCBvcGVuICVzOiAlcyIsIHBhdGgsIHN0cmVycm9yKGVycm5vKSk7CisgICAgICB9CisgICAgfQorCisgICAgeworICAgICAgY29uc3QgY2hhciAqY29uc3QgYXJndW1lbnRzW10gPSB7Y29tbWFuZCwgIi1xIiwgbmFtZSwgTlVMTH07CisgICAgICBpbnQgb2sgPSBleGVjdXRlSG9zdENvbW1hbmQoYXJndW1lbnRzKSA9PSAwOworCisgICAgICBpZiAoIW9rKSB7CisgICAgICAgIGxvZ01lc3NhZ2UoTE9HX1dBUk5JTkcsICJrZXJuZWwgbW9kdWxlIG5vdCBpbnN0YWxsZWQ6ICVzIiwgbmFtZSk7CisgICAgICAgIHJldHVybiAwOworICAgICAgfQorCisgICAgICBpZiAoc3RhdHVzKSArKypzdGF0dXM7CisgICAgfQorICB9CisKKyAgcmV0dXJuIDE7Cit9CisKK2ludAoraW5zdGFsbFNwZWFrZXJNb2R1bGUgKHZvaWQpIHsKKyAgc3RhdGljIHVuc2lnbmVkIGNoYXIgc3RhdHVzID0gMDsKKyAgcmV0dXJuIGluc3RhbGxLZXJuZWxNb2R1bGUoInBjc3BrciIsICZzdGF0dXMpOworfQorCitpbnQKK2luc3RhbGxVaW5wdXRNb2R1bGUgKHZvaWQpIHsKKyAgc3RhdGljIHVuc2lnbmVkIGNoYXIgc3RhdHVzID0gMDsKKyAgaW50IHdhaXQgPSAhc3RhdHVzOworICBpbnQgaW5zdGFsbGVkID0gaW5zdGFsbEtlcm5lbE1vZHVsZSgidWlucHV0IiwgJnN0YXR1cyk7CisKKyAgaWYgKCFpbnN0YWxsZWQpIHdhaXQgPSAwOworICBpZiAod2FpdCkgYXN5bmNXYWl0KDUwMCk7CisgIHJldHVybiBpbnN0YWxsZWQ7Cit9CisKK3N0YXRpYyBpbnQKK29wZW5EZXZpY2UgKGNvbnN0IGNoYXIgKnBhdGgsIGludCBmbGFncywgaW50IGFsbG93TW9kZVN1YnNldCkgeworICBpbnQgZGVzY3JpcHRvcjsKKworICAjaWZkZWYgT19DTE9FWEVDCisgIGZsYWdzIHw9IE9fQ0xPRVhFQzsKKyAgI2VuZGlmIC8qIE9fQ0xPRVhFQyAqLworCisgIGlmICgoZGVzY3JpcHRvciA9IG9wZW4ocGF0aCwgZmxhZ3MpKSAhPSAtMSkgZ290byBvcGVuZWQ7CisgIGlmICghYWxsb3dNb2RlU3Vic2V0KSBnb3RvIGZhaWxlZDsKKyAgaWYgKChmbGFncyAmIE9fQUNDTU9ERSkgIT0gT19SRFdSKSBnb3RvIGZhaWxlZDsKKyAgZmxhZ3MgJj0gfk9fQUNDTU9ERTsKKworICB7CisgICAgaW50IGVycm9yID0gZXJybm87CisKKyAgICBpZiAoZXJybm8gPT0gRUFDQ0VTKSBnb3RvIHRyeVdyaXRlT25seTsKKyAgICBpZiAoZXJybm8gPT0gRVJPRlMpIGdvdG8gdHJ5UmVhZE9ubHk7CisgICAgZ290byBmYWlsZWQ7CisKKyAgdHJ5V3JpdGVPbmx5OgorICAgIGlmICgoZGVzY3JpcHRvciA9IG9wZW4ocGF0aCwgKGZsYWdzIHwgT19XUk9OTFkpKSkgIT0gLTEpIGdvdG8gb3BlbmVkOworCisgIHRyeVJlYWRPbmx5OgorICAgIGlmICgoZGVzY3JpcHRvciA9IG9wZW4ocGF0aCwgKGZsYWdzIHwgT19SRE9OTFkpKSkgIT0gLTEpIGdvdG8gb3BlbmVkOworCisgICAgZXJybm8gPSBlcnJvcjsKKyAgfQorCitmYWlsZWQ6CisgIGxvZ01lc3NhZ2UoTE9HX0RFQlVHLCAiY2Fubm90IG9wZW4gZGV2aWNlOiAlczogJXMiLCBwYXRoLCBzdHJlcnJvcihlcnJubykpOworICByZXR1cm4gLTE7CisKK29wZW5lZDoKKyAgbG9nTWVzc2FnZShMT0dfREVCVUcsICJkZXZpY2Ugb3BlbmVkOiAlczogZmQ9JWQiLCBwYXRoLCBkZXNjcmlwdG9yKTsKKyAgcmV0dXJuIGRlc2NyaXB0b3I7Cit9CisKK3N0YXRpYyBpbnQKK2NhbkNvbnRhaW5EZXZpY2VzIChjb25zdCBjaGFyICpkaXJlY3RvcnkpIHsKKyAgc3RydWN0IHN0YXR2ZnMgdmZzOworCisgIGlmIChzdGF0dmZzKGRpcmVjdG9yeSwgJnZmcykgPT0gLTEpIHsKKyAgICBsb2dTeXN0ZW1FcnJvcigic3RhdHZmcyIpOworICB9IGVsc2UgaWYgKHZmcy5mX2ZsYWcgJiBTVF9OT0RFVikgeworICAgIGxvZ01lc3NhZ2UoTE9HX1dBUk5JTkcsICJjYW5ub3QgY29udGFpbiBkZXZpY2UgZmlsZXM6ICVzIiwgZGlyZWN0b3J5KTsKKyAgICBlcnJubyA9IEVQRVJNOworICB9IGVsc2UgeworICAgIHJldHVybiAxOworICB9CisKKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK2NhbkNyZWF0ZURldmljZSAoY29uc3QgY2hhciAqcGF0aCkgeworICBpbnQgeWVzID0gMDsKKyAgY2hhciAqZGlyZWN0b3J5OworCisgIGlmICgoZGlyZWN0b3J5ID0gZ2V0UGF0aERpcmVjdG9yeShwYXRoKSkpIHsKKyAgICBpZiAoY2FuQ29udGFpbkRldmljZXMoZGlyZWN0b3J5KSkgeWVzID0gMTsKKyAgICBmcmVlKGRpcmVjdG9yeSk7CisgIH0KKworICByZXR1cm4geWVzOworfQorCitzdGF0aWMgaW50CitjcmVhdGVDaGFyYWN0ZXJEZXZpY2UgKGNvbnN0IGNoYXIgKnBhdGgsIGludCBmbGFncywgaW50IG1ham9yLCBpbnQgbWlub3IpIHsKKyAgaW50IGRlc2NyaXB0b3IgPSAtMTsKKworICBpZiAoY2FuQ3JlYXRlRGV2aWNlKHBhdGgpKSB7CisgICAgZGVzY3JpcHRvciA9IG9wZW5EZXZpY2UocGF0aCwgZmxhZ3MsIDApOworICB9CisKKyAgaWYgKGRlc2NyaXB0b3IgPT0gLTEpIHsKKyAgICBpZiAoZXJybm8gPT0gRU5PRU5UKSB7CisgICAgICBtb2RlX3QgbW9kZSA9IFNfSUZDSFIgfCBTX0lSVVNSIHwgU19JV1VTUjsKKworICAgICAgaWYgKG1rbm9kKHBhdGgsIG1vZGUsIG1ha2VkZXYobWFqb3IsIG1pbm9yKSkgPT0gLTEpIHsKKyAgICAgICAgbG9nTWVzc2FnZShMT0dfREVCVUcsCisgICAgICAgICAgImNhbm5vdCBjcmVhdGUgZGV2aWNlOiAlczogJXMiLCBwYXRoLCBzdHJlcnJvcihlcnJubykKKyAgICAgICAgKTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIGxvZ01lc3NhZ2UoTE9HX0RFQlVHLAorICAgICAgICAgICJkZXZpY2UgY3JlYXRlZDogJXMgbW9kZT0lMDZvIG1ham9yPSVkIG1pbm9yPSVkIiwKKyAgICAgICAgICBwYXRoLCBtb2RlLCBtYWpvciwgbWlub3IKKyAgICAgICAgKTsKKworICAgICAgICBkZXNjcmlwdG9yID0gb3BlbkRldmljZShwYXRoLCBmbGFncywgMCk7CisgICAgICB9CisgICAgfQorICB9CisKKyAgcmV0dXJuIGRlc2NyaXB0b3I7Cit9CisKK2ludAorb3BlbkNoYXJhY3RlckRldmljZSAoY29uc3QgY2hhciAqbmFtZSwgaW50IGZsYWdzLCBpbnQgbWFqb3IsIGludCBtaW5vcikgeworICBjaGFyICpwYXRoID0gZ2V0RGV2aWNlUGF0aChuYW1lKTsKKyAgaW50IGRlc2NyaXB0b3I7CisKKyAgaWYgKCFwYXRoKSB7CisgICAgZGVzY3JpcHRvciA9IC0xOworICB9IGVsc2UgaWYgKChkZXNjcmlwdG9yID0gb3BlbkRldmljZShwYXRoLCBmbGFncywgMSkpID09IC0xKSB7CisgICAgaWYgKChlcnJubyA9PSBFTk9FTlQpIHx8IChlcnJubyA9PSBFQUNDRVMpKSB7CisgICAgICBmcmVlKHBhdGgpOworCisgICAgICBpZiAoKHBhdGggPSBtYWtlV3JpdGFibGVQYXRoKGxvY2F0ZVBhdGhOYW1lKG5hbWUpKSkpIHsKKyAgICAgICAgZGVzY3JpcHRvciA9IGNyZWF0ZUNoYXJhY3RlckRldmljZShwYXRoLCBmbGFncywgbWFqb3IsIG1pbm9yKTsKKyAgICAgIH0KKyAgICB9CisgIH0KKworICBpZiAoZGVzY3JpcHRvciAhPSAtMSkgeworICAgIGludCBvayA9IDA7CisgICAgc3RydWN0IHN0YXQgc3RhdHVzOworCisgICAgaWYgKGZzdGF0KGRlc2NyaXB0b3IsICZzdGF0dXMpID09IC0xKSB7CisgICAgICBsb2dNZXNzYWdlKExPR19ERUJVRywgImNhbm5vdCBmc3RhdCBkZXZpY2U6ICVkIFslc106ICVzIiwKKyAgICAgICAgICAgICAgICAgZGVzY3JpcHRvciwgcGF0aCwgc3RyZXJyb3IoZXJybm8pKTsKKyAgICB9IGVsc2UgaWYgKCFTX0lTQ0hSKHN0YXR1cy5zdF9tb2RlKSkgeworICAgICAgbG9nTWVzc2FnZShMT0dfREVCVUcsICJub3QgYSBjaGFyYWN0ZXIgZGV2aWNlOiAlczogZmQ9JWQiLCBwYXRoLCBkZXNjcmlwdG9yKTsKKyAgICB9IGVsc2UgeworICAgICAgb2sgPSAxOworICAgIH0KKworICAgIGlmICghb2spIHsKKyAgICAgIGNsb3NlKGRlc2NyaXB0b3IpOworICAgICAgbG9nTWVzc2FnZShMT0dfREVCVUcsICJkZXZpY2UgY2xvc2VkOiAlczogZmQ9JWQiLCBwYXRoLCBkZXNjcmlwdG9yKTsKKyAgICAgIGRlc2NyaXB0b3IgPSAtMTsKKyAgICB9CisgIH0KKworICBpZiAocGF0aCkgZnJlZShwYXRoKTsKKyAgcmV0dXJuIGRlc2NyaXB0b3I7Cit9CisKK1VpbnB1dE9iamVjdCAqCituZXdVaW5wdXRPYmplY3QgKGNvbnN0IGNoYXIgKm5hbWUpIHsKKyNpZmRlZiBIQVZFX0xJTlVYX1VJTlBVVF9ICisgIFVpbnB1dE9iamVjdCAqdWlucHV0OworCisgIGlmICgodWlucHV0ID0gbWFsbG9jKHNpemVvZigqdWlucHV0KSkpKSB7CisgICAgbWVtc2V0KHVpbnB1dCwgMCwgc2l6ZW9mKCp1aW5wdXQpKTsKKyAgICBpbnN0YWxsVWlucHV0TW9kdWxlKCk7CisKKyAgICBjb25zdCBjaGFyICpkZXZpY2U7CisgICAgeworICAgICAgc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IG5hbWVzW10gPSB7InVpbnB1dCIsICJpbnB1dC91aW5wdXQiLCBOVUxMfTsKKyAgICAgIGRldmljZSA9IHJlc29sdmVEZXZpY2VOYW1lKG5hbWVzLCAwLCAidWlucHV0Iik7CisgICAgfQorCisgICAgaWYgKGRldmljZSkgeworICAgICAgaWYgKCh1aW5wdXQtPmZpbGVEZXNjcmlwdG9yID0gb3BlbkNoYXJhY3RlckRldmljZShkZXZpY2UsIE9fUkRXUiwgTUlTQ19NQUpPUiwgMjIzKSkgIT0gLTEpIHsKKyAgICAgICAgc3RydWN0IHVpbnB1dF91c2VyX2RldiBkZXNjcmlwdGlvbjsKKyAgICAgICAgCisgICAgICAgIG1lbXNldCgmZGVzY3JpcHRpb24sIDAsIHNpemVvZihkZXNjcmlwdGlvbikpOworICAgICAgICBzbnByaW50ZihkZXNjcmlwdGlvbi5uYW1lLCBzaXplb2YoZGVzY3JpcHRpb24ubmFtZSksCisgICAgICAgICAgICAgICAgICIlcyAlcyAlcyIsCisgICAgICAgICAgICAgICAgIFBBQ0tBR0VfTkFNRSwgUEFDS0FHRV9WRVJTSU9OLCBuYW1lKTsKKworICAgICAgICBpZiAod3JpdGUodWlucHV0LT5maWxlRGVzY3JpcHRvciwgJmRlc2NyaXB0aW9uLCBzaXplb2YoZGVzY3JpcHRpb24pKSAhPSAtMSkgeworI2lmZGVmIFVJX1NFVF9QSFlTCisgICAgICAgICAgeworICAgICAgICAgICAgZXh0ZXJuIGNvbnN0IGNoYXIgKl9fcHJvZ25hbWU7CisgICAgICAgICAgICBjaGFyIHRvcG9sb2d5WzBYNDBdOworCisgICAgICAgICAgICBzbnByaW50Zih0b3BvbG9neSwgc2l6ZW9mKHRvcG9sb2d5KSwKKyAgICAgICAgICAgICAgICAgICAgICJwaWQtJSJQUkl1MzIiLyVzLyVkIiwKKyAgICAgICAgICAgICAgICAgICAgICh1aW50MzJfdClnZXRwaWQoKSwgX19wcm9nbmFtZSwgdWlucHV0LT5maWxlRGVzY3JpcHRvcik7CisKKyAgICAgICAgICAgIGlmIChpb2N0bCh1aW5wdXQtPmZpbGVEZXNjcmlwdG9yLCBVSV9TRVRfUEhZUywgdG9wb2xvZ3kpID09IC0xKSB7CisgICAgICAgICAgICAgIGxvZ1N5c3RlbUVycm9yKCJpb2N0bFtVSV9TRVRfUEhZU10iKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9CisjZW5kaWYgLyogVUlfU0VUX1BIWVMgKi8KKworICAgICAgICAgIGxvZ01lc3NhZ2UoTE9HX0RFQlVHLCAidWlucHV0IG9wZW5lZDogJXM6ICVzIGZkPSVkIiwKKyAgICAgICAgICAgICAgICAgICAgIGRldmljZSwgZGVzY3JpcHRpb24ubmFtZSwgdWlucHV0LT5maWxlRGVzY3JpcHRvcik7CisKKyAgICAgICAgICByZXR1cm4gdWlucHV0OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgIGxvZ1N5c3RlbUVycm9yKCJ3cml0ZShzdHJ1Y3QgdWlucHV0X3VzZXJfZGV2KSIpOworICAgICAgICB9CisKKyAgICAgICAgY2xvc2UodWlucHV0LT5maWxlRGVzY3JpcHRvcik7CisgICAgICB9IGVsc2UgeworICAgICAgICBsb2dNZXNzYWdlKExPR19ERUJVRywgImNhbm5vdCBvcGVuIHVpbnB1dCBkZXZpY2U6ICVzOiAlcyIsIGRldmljZSwgc3RyZXJyb3IoZXJybm8pKTsKKyAgICAgIH0KKyAgICB9CisKKyAgICBmcmVlKHVpbnB1dCk7CisgICAgdWlucHV0ID0gTlVMTDsKKyAgfSBlbHNlIHsKKyAgICBsb2dNYWxsb2NFcnJvcigpOworICB9CisjZWxzZSAvKiBIQVZFX0xJTlVYX1VJTlBVVF9IICovCisgIGxvZ01lc3NhZ2UoTE9HX1dBUk5JTkcsICJ1aW5wdXQgc3VwcG9ydCBub3QgYXZhaWxhYmxlIik7CisgIGVycm5vID0gRU5PU1lTOworI2VuZGlmIC8qIEhBVkVfTElOVVhfVUlOUFVUX0ggKi8KKworICByZXR1cm4gTlVMTDsKK30KKwordm9pZAorZGVzdHJveVVpbnB1dE9iamVjdCAoVWlucHV0T2JqZWN0ICp1aW5wdXQpIHsKKyNpZmRlZiBIQVZFX0xJTlVYX1VJTlBVVF9ICisgIHJlbGVhc2VQcmVzc2VkS2V5cyh1aW5wdXQpOworICBjbG9zZSh1aW5wdXQtPmZpbGVEZXNjcmlwdG9yKTsKKyAgZnJlZSh1aW5wdXQpOworI2VuZGlmIC8qIEhBVkVfTElOVVhfVUlOUFVUX0ggKi8KK30KKworaW50CitnZXRVaW5wdXRGaWxlRGVzY3JpcHRvciAoVWlucHV0T2JqZWN0ICp1aW5wdXQpIHsKKyAgcmV0dXJuIHVpbnB1dC0+ZmlsZURlc2NyaXB0b3I7Cit9CisKK2ludAorY3JlYXRlVWlucHV0RGV2aWNlIChVaW5wdXRPYmplY3QgKnVpbnB1dCkgeworI2lmZGVmIEhBVkVfTElOVVhfVUlOUFVUX0gKKyAgaWYgKGlvY3RsKHVpbnB1dC0+ZmlsZURlc2NyaXB0b3IsIFVJX0RFVl9DUkVBVEUpICE9IC0xKSByZXR1cm4gMTsKKyAgbG9nU3lzdGVtRXJyb3IoImlvY3RsW1VJX0RFVl9DUkVBVEVdIik7CisjZW5kaWYgLyogSEFWRV9MSU5VWF9VSU5QVVRfSCAqLworCisgIHJldHVybiAwOworfQorCitpbnQKK2VuYWJsZVVpbnB1dEV2ZW50VHlwZSAoVWlucHV0T2JqZWN0ICp1aW5wdXQsIGludCB0eXBlKSB7CisjaWZkZWYgSEFWRV9MSU5VWF9VSU5QVVRfSAorICBpZiAoaW9jdGwodWlucHV0LT5maWxlRGVzY3JpcHRvciwgVUlfU0VUX0VWQklULCB0eXBlKSAhPSAtMSkgcmV0dXJuIDE7CisgIGxvZ1N5c3RlbUVycm9yKCJpb2N0bFtVSV9TRVRfRVZCSVRdIik7CisjZW5kaWYgLyogSEFWRV9MSU5VWF9VSU5QVVRfSCAqLworCisgIHJldHVybiAwOworfQorCitpbnQKK3dyaXRlSW5wdXRFdmVudCAoVWlucHV0T2JqZWN0ICp1aW5wdXQsIHVpbnQxNl90IHR5cGUsIHVpbnQxNl90IGNvZGUsIGludDMyX3QgdmFsdWUpIHsKKyNpZmRlZiBIQVZFX0xJTlVYX1VJTlBVVF9ICisgIHN0cnVjdCB0aW1ldmFsIG5vdzsKKyAgZ2V0dGltZW9mZGF5KCZub3csIE5VTEwpOworCisgIHN0cnVjdCBpbnB1dF9ldmVudCBldmVudCA9IHsKKyAgICAuaW5wdXRfZXZlbnRfc2VjID0gbm93LnR2X3NlYywKKyAgICAuaW5wdXRfZXZlbnRfdXNlYyA9IG5vdy50dl91c2VjLAorCisgICAgLnR5cGUgPSB0eXBlLAorICAgIC5jb2RlID0gY29kZSwKKyAgICAudmFsdWUgPSB2YWx1ZSwKKyAgfTsKKworICBpZiAod3JpdGUodWlucHV0LT5maWxlRGVzY3JpcHRvciwgJmV2ZW50LCBzaXplb2YoZXZlbnQpKSAhPSAtMSkgcmV0dXJuIDE7CisgIGxvZ1N5c3RlbUVycm9yKCJ3cml0ZShzdHJ1Y3QgaW5wdXRfZXZlbnQpIik7CisjZW5kaWYgLyogSEFWRV9MSU5VWF9VSU5QVVRfSCAqLworCisgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50Cit3cml0ZVN5blJlcG9ydCAoVWlucHV0T2JqZWN0ICp1aW5wdXQpIHsKKyAgcmV0dXJuIHdyaXRlSW5wdXRFdmVudCh1aW5wdXQsIEVWX1NZTiwgU1lOX1JFUE9SVCwgMCk7Cit9CisKK2ludAorZW5hYmxlVWlucHV0S2V5IChVaW5wdXRPYmplY3QgKnVpbnB1dCwgaW50IGtleSkgeworI2lmZGVmIEhBVkVfTElOVVhfVUlOUFVUX0gKKyAgaWYgKGlvY3RsKHVpbnB1dC0+ZmlsZURlc2NyaXB0b3IsIFVJX1NFVF9LRVlCSVQsIGtleSkgIT0gLTEpIHJldHVybiAxOworICBsb2dTeXN0ZW1FcnJvcigiaW9jdGxbVUlfU0VUX0tFWUJJVF0iKTsKKyNlbmRpZiAvKiBIQVZFX0xJTlVYX1VJTlBVVF9IICovCisKKyAgcmV0dXJuIDA7Cit9CisKK2ludAord3JpdGVLZXlFdmVudCAoVWlucHV0T2JqZWN0ICp1aW5wdXQsIGludCBrZXksIGludCBwcmVzcykgeworI2lmZGVmIEhBVkVfTElOVVhfVUlOUFVUX0gKKyAgaWYgKHdyaXRlSW5wdXRFdmVudCh1aW5wdXQsIEVWX0tFWSwga2V5LCBwcmVzcykpIHsKKyAgICBpZiAocHJlc3MpIHsKKyAgICAgIEJJVE1BU0tfU0VUKHVpbnB1dC0+cHJlc3NlZEtleXMsIGtleSk7CisgICAgfSBlbHNlIHsKKyAgICAgIEJJVE1BU0tfQ0xFQVIodWlucHV0LT5wcmVzc2VkS2V5cywga2V5KTsKKyAgICB9CisKKyAgICBpZiAod3JpdGVTeW5SZXBvcnQodWlucHV0KSkgeworICAgICAgcmV0dXJuIDE7CisgICAgfQorICB9CisjZW5kaWYgLyogSEFWRV9MSU5VWF9VSU5QVVRfSCAqLworCisgIHJldHVybiAwOworfQorCitpbnQKK3JlbGVhc2VQcmVzc2VkS2V5cyAoVWlucHV0T2JqZWN0ICp1aW5wdXQpIHsKKyNpZmRlZiBIQVZFX0xJTlVYX1VJTlBVVF9ICisgIHVuc2lnbmVkIGludCBrZXk7CisKKyAgZm9yIChrZXk9MDsga2V5PD1LRVlfTUFYOyBrZXkrPTEpIHsKKyAgICBpZiAoQklUTUFTS19URVNUKHVpbnB1dC0+cHJlc3NlZEtleXMsIGtleSkpIHsKKyAgICAgIGlmICghd3JpdGVLZXlFdmVudCh1aW5wdXQsIGtleSwgMCkpIHJldHVybiAwOworICAgICAgQklUTUFTS19DTEVBUih1aW5wdXQtPnByZXNzZWRLZXlzLCBrZXkpOworICAgIH0KKyAgfQorI2VuZGlmIC8qIEhBVkVfTElOVVhfVUlOUFVUX0ggKi8KKworICByZXR1cm4gMTsKK30KKworaW50Cit3cml0ZVJlcGVhdERlbGF5IChVaW5wdXRPYmplY3QgKnVpbnB1dCwgaW50IGRlbGF5KSB7CisgIGlmICh3cml0ZUlucHV0RXZlbnQodWlucHV0LCBFVl9SRVAsIFJFUF9ERUxBWSwgZGVsYXkpKSB7CisgICAgaWYgKHdyaXRlU3luUmVwb3J0KHVpbnB1dCkpIHsKKyAgICAgIHJldHVybiAxOworICAgIH0KKyAgfQorCisgIHJldHVybiAwOworfQorCitpbnQKK3dyaXRlUmVwZWF0UGVyaW9kIChVaW5wdXRPYmplY3QgKnVpbnB1dCwgaW50IHBlcmlvZCkgeworICBpZiAod3JpdGVJbnB1dEV2ZW50KHVpbnB1dCwgRVZfUkVQLCBSRVBfUEVSSU9ELCBwZXJpb2QpKSB7CisgICAgaWYgKHdyaXRlU3luUmVwb3J0KHVpbnB1dCkpIHsKKyAgICAgIHJldHVybiAxOworICAgIH0KKyAgfQorCisgIHJldHVybiAwOworfQorCisjaWZkZWYgSEFWRV9MSU5VWF9JTlBVVF9ICitzdGF0aWMgaW50CitlbmFibGVLZXlib2FyZEtleXMgKFVpbnB1dE9iamVjdCAqdWlucHV0KSB7CisgIGNvbnN0IExpbnV4S2V5TWFwRGVzY3JpcHRvciAqbWFwID0gbGludXhLZXlNYXBEZXNjcmlwdG9yczsKKyAgY29uc3QgTGludXhLZXlNYXBEZXNjcmlwdG9yICplbmQgPSBtYXAgKyBsaW51eEtleU1hcENvdW50OworICBCSVRNQVNLKGVuYWJsZWRLZXlzLCBLRVlfTUFYKzEsIGNoYXIpOworCisgIGlmICghZW5hYmxlVWlucHV0RXZlbnRUeXBlKHVpbnB1dCwgRVZfS0VZKSkgcmV0dXJuIDA7CisgIEJJVE1BU0tfWkVSTyhlbmFibGVkS2V5cyk7CisKKyAgd2hpbGUgKG1hcCA8IGVuZCkgeworICAgIHVuc2lnbmVkIGludCBjb2RlOworCisgICAgZm9yIChjb2RlPTA7IGNvZGU8bWFwLT5jb3VudDsgY29kZSs9MSkgeworICAgICAgTGludXhLZXlDb2RlIGtleSA9IG1hcC0+a2V5c1tjb2RlXTsKKworICAgICAgaWYgKGtleSkgeworICAgICAgICBpZiAoIUJJVE1BU0tfVEVTVChlbmFibGVkS2V5cywga2V5KSkgeworICAgICAgICAgIEJJVE1BU0tfU0VUKGVuYWJsZWRLZXlzLCBrZXkpOworICAgICAgICAgIGlmICghZW5hYmxlVWlucHV0S2V5KHVpbnB1dCwga2V5KSkgcmV0dXJuIDA7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9CisKKyAgICBtYXAgKz0gMTsKKyAgfQorCisgIHJldHVybiAxOworfQorI2VuZGlmIC8qIEhBVkVfTElOVVhfSU5QVVRfSCAqLworCitpbnQKK2VuYWJsZVVpbnB1dFNvdW5kIChVaW5wdXRPYmplY3QgKnVpbnB1dCwgaW50IHNvdW5kKSB7CisjaWZkZWYgSEFWRV9MSU5VWF9VSU5QVVRfSAorICBpZiAoaW9jdGwodWlucHV0LT5maWxlRGVzY3JpcHRvciwgVUlfU0VUX1NOREJJVCwgc291bmQpICE9IC0xKSByZXR1cm4gMTsKKyAgbG9nU3lzdGVtRXJyb3IoImlvY3RsW1VJX1NFVF9TTkRCSVRdIik7CisjZW5kaWYgLyogSEFWRV9MSU5VWF9VSU5QVVRfSCAqLworCisgIHJldHVybiAwOworfQorCitpbnQKK2VuYWJsZVVpbnB1dExlZCAoVWlucHV0T2JqZWN0ICp1aW5wdXQsIGludCBsZWQpIHsKKyNpZmRlZiBIQVZFX0xJTlVYX1VJTlBVVF9ICisgIGlmIChpb2N0bCh1aW5wdXQtPmZpbGVEZXNjcmlwdG9yLCBVSV9TRVRfTEVEQklULCBsZWQpICE9IC0xKSByZXR1cm4gMTsKKyAgbG9nU3lzdGVtRXJyb3IoImlvY3RsW1VJX1NFVF9MRURCSVRdIik7CisjZW5kaWYgLyogSEFWRV9MSU5VWF9VSU5QVVRfSCAqLworCisgIHJldHVybiAwOworfQorCitVaW5wdXRPYmplY3QgKgorbmV3VWlucHV0S2V5Ym9hcmQgKGNvbnN0IGNoYXIgKm5hbWUpIHsKKyNpZmRlZiBIQVZFX0xJTlVYX0lOUFVUX0gKKyAgVWlucHV0T2JqZWN0ICp1aW5wdXQ7CisKKyAgaWYgKCh1aW5wdXQgPSBuZXdVaW5wdXRPYmplY3QobmFtZSkpKSB7CisgICAgaWYgKGVuYWJsZUtleWJvYXJkS2V5cyh1aW5wdXQpKSB7CisgICAgICBpZiAoZW5hYmxlVWlucHV0RXZlbnRUeXBlKHVpbnB1dCwgRVZfUkVQKSkgeworICAgICAgICBpZiAoY3JlYXRlVWlucHV0RGV2aWNlKHVpbnB1dCkpIHsKKyAgICAgICAgICByZXR1cm4gdWlucHV0OworICAgICAgICB9CisgICAgICB9CisgICAgfQorCisgICAgZGVzdHJveVVpbnB1dE9iamVjdCh1aW5wdXQpOworICB9CisjZW5kaWYgLyogSEFWRV9MSU5VWF9JTlBVVF9IICovCisKKyAgcmV0dXJuIE5VTEw7Cit9CisKK3N0cnVjdCBJbnB1dEV2ZW50TW9uaXRvclN0cnVjdCB7CisgIFVpbnB1dE9iamVjdCAqdWlucHV0T2JqZWN0OworICBpbnQgZmlsZURlc2NyaXB0b3I7CisgIEFzeW5jSGFuZGxlIGFzeW5jSGFuZGxlOworCisgIFVpbnB1dE9iamVjdFByZXBhcmVyICpwcmVwYXJlVWlucHV0T2JqZWN0OworICBJbnB1dEV2ZW50SGFuZGxlciAqaGFuZGxlSW5wdXRFdmVudDsKK307CisKK3N0YXRpYyB2b2lkCitjbG9zZUlucHV0RXZlbnRNb25pdG9yIChJbnB1dEV2ZW50TW9uaXRvciAqbW9uaXRvcikgeworICBjbG9zZShtb25pdG9yLT5maWxlRGVzY3JpcHRvcik7CisgIG1vbml0b3ItPmZpbGVEZXNjcmlwdG9yID0gLTE7Cit9CisKK0FTWU5DX0lOUFVUX0NBTExCQUNLKGhhbmRsZUludGVyY2VwdGVkSW5wdXRFdmVudCkgeworICBJbnB1dEV2ZW50TW9uaXRvciAqbW9uaXRvciA9IHBhcmFtZXRlcnMtPmRhdGE7CisgIHN0YXRpYyBjb25zdCBjaGFyIGxhYmVsW10gPSAiaW5wdXQgZXZlbnQgbW9uaXRvciI7CisKKyAgaWYgKHBhcmFtZXRlcnMtPmVycm9yKSB7CisgICAgbG9nTWVzc2FnZShMT0dfREVCVUcsICIlcyByZWFkIGVycm9yOiBmZD0lZDogJXMiLAorICAgICAgICAgICAgICAgbGFiZWwsIG1vbml0b3ItPmZpbGVEZXNjcmlwdG9yLCBzdHJlcnJvcihwYXJhbWV0ZXJzLT5lcnJvcikpOworICAgIGNsb3NlSW5wdXRFdmVudE1vbml0b3IobW9uaXRvcik7CisgIH0gZWxzZSBpZiAocGFyYW1ldGVycy0+ZW5kKSB7CisgICAgbG9nTWVzc2FnZShMT0dfREVCVUcsICIlcyBlbmQtb2YtZmlsZTogZmQ9JWQiLAorICAgICAgICAgICAgICAgbGFiZWwsIG1vbml0b3ItPmZpbGVEZXNjcmlwdG9yKTsKKyAgICBjbG9zZUlucHV0RXZlbnRNb25pdG9yKG1vbml0b3IpOworICB9IGVsc2UgeworICAgIGNvbnN0IHN0cnVjdCBpbnB1dF9ldmVudCAqZXZlbnQgPSBwYXJhbWV0ZXJzLT5idWZmZXI7CisKKyAgICBpZiAocGFyYW1ldGVycy0+bGVuZ3RoID49IHNpemVvZigqZXZlbnQpKSB7CisgICAgICBtb25pdG9yLT5oYW5kbGVJbnB1dEV2ZW50KGV2ZW50KTsKKyAgICAgIHJldHVybiBzaXplb2YoKmV2ZW50KTsKKyAgICB9CisgIH0KKworICByZXR1cm4gMDsKK30KKworSW5wdXRFdmVudE1vbml0b3IgKgorbmV3SW5wdXRFdmVudE1vbml0b3IgKAorICBjb25zdCBjaGFyICpuYW1lLAorICBVaW5wdXRPYmplY3RQcmVwYXJlciAqcHJlcGFyZVVpbnB1dE9iamVjdCwKKyAgSW5wdXRFdmVudEhhbmRsZXIgKmhhbmRsZUlucHV0RXZlbnQKKykgeworICBJbnB1dEV2ZW50TW9uaXRvciAqbW9uaXRvcjsKKworICBpZiAoKG1vbml0b3IgPSBtYWxsb2Moc2l6ZW9mKCptb25pdG9yKSkpKSB7CisgICAgbWVtc2V0KG1vbml0b3IsIDAsIHNpemVvZigqbW9uaXRvcikpOworICAgIG1vbml0b3ItPnByZXBhcmVVaW5wdXRPYmplY3QgPSBwcmVwYXJlVWlucHV0T2JqZWN0OworICAgIG1vbml0b3ItPmhhbmRsZUlucHV0RXZlbnQgPSBoYW5kbGVJbnB1dEV2ZW50OworCisgICAgaWYgKChtb25pdG9yLT51aW5wdXRPYmplY3QgPSBuZXdVaW5wdXRPYmplY3QobmFtZSkpKSB7CisgICAgICBtb25pdG9yLT5maWxlRGVzY3JpcHRvciA9IGdldFVpbnB1dEZpbGVEZXNjcmlwdG9yKG1vbml0b3ItPnVpbnB1dE9iamVjdCk7CisKKyAgICAgIGlmIChwcmVwYXJlVWlucHV0T2JqZWN0KG1vbml0b3ItPnVpbnB1dE9iamVjdCkpIHsKKyAgICAgICAgaWYgKGNyZWF0ZVVpbnB1dERldmljZShtb25pdG9yLT51aW5wdXRPYmplY3QpKSB7CisgICAgICAgICAgaWYgKGFzeW5jUmVhZEZpbGUoJm1vbml0b3ItPmFzeW5jSGFuZGxlLCBtb25pdG9yLT5maWxlRGVzY3JpcHRvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2Yoc3RydWN0IGlucHV0X2V2ZW50KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVJbnRlcmNlcHRlZElucHV0RXZlbnQsIG1vbml0b3IpKSB7CisgICAgICAgICAgICBsb2dNZXNzYWdlKExPR19ERUJVRywgImlucHV0IGV2ZW50IG1vbml0b3Igb3BlbmVkOiBmZD0lZCIsCisgICAgICAgICAgICAgICAgICAgICAgIG1vbml0b3ItPmZpbGVEZXNjcmlwdG9yKTsKKworICAgICAgICAgICAgcmV0dXJuIG1vbml0b3I7CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICB9CisKKyAgICAgIGRlc3Ryb3lVaW5wdXRPYmplY3QobW9uaXRvci0+dWlucHV0T2JqZWN0KTsKKyAgICB9CisKKyAgICBmcmVlKG1vbml0b3IpOworICB9IGVsc2UgeworICAgIGxvZ01hbGxvY0Vycm9yKCk7CisgIH0KKworICByZXR1cm4gTlVMTDsKK30KKwordm9pZAorZGVzdHJveUlucHV0RXZlbnRNb25pdG9yIChJbnB1dEV2ZW50TW9uaXRvciAqbW9uaXRvcikgeworICBhc3luY0NhbmNlbFJlcXVlc3QobW9uaXRvci0+YXN5bmNIYW5kbGUpOworICBkZXN0cm95VWlucHV0T2JqZWN0KG1vbml0b3ItPnVpbnB1dE9iamVjdCk7CisgIGZyZWUobW9uaXRvcik7Cit9CisKK3ZvaWQKK2luaXRpYWxpemVTeXN0ZW1PYmplY3QgKHZvaWQpIHsKK30KZGlmZiAtLWdpdCBhL1Byb2dyYW1zL3N5c3RlbV9tc2Rvcy5jIGIvUHJvZ3JhbXMvc3lzdGVtX21zZG9zLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWIwNTJiYgotLS0gL2Rldi9udWxsCisrKyBiL1Byb2dyYW1zL3N5c3RlbV9tc2Rvcy5jCkBAIC0wLDAgKzEsMzg5IEBACisvKgorICogQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyAqICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyAqCisgKiBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorICoKKyAqIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyAqCisgKiBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisgKi8KKworI2luY2x1ZGUgInByb2xvZ3VlLmgiCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHN0ZGFyZy5oPgorI2luY2x1ZGUgPHNldGptcC5oPgorI2luY2x1ZGUgPGRwbWkuaD4KKyNpbmNsdWRlIDxwYy5oPgorI2luY2x1ZGUgPGRvcy5oPgorI2luY2x1ZGUgPGdvMzIuaD4KKyNpbmNsdWRlIDxjcnQwLmg+CisjaW5jbHVkZSA8c3lzL2ZhcnB0ci5oPgorCisjaW5jbHVkZSAibG9nLmgiCisjaW5jbHVkZSAic3lzdGVtLmgiCisjaW5jbHVkZSAic3lzdGVtX21zZG9zLmgiCisKK2ludCBfY3J0MF9zdGFydHVwX2ZsYWdzID0gX0NSVDBfRkxBR19MT0NLX01FTU9SWTsKKworLyogcmVkdWNlIGltYWdlICovCitpbnQgX3N0a2xlbiA9IDBYMjAwMDsKKwordm9pZCBfX2NydDBfbG9hZF9lbnZpcm9ubWVudF9maWxlKGNoYXIgKl9hcHBfbmFtZSkgeyByZXR1cm47IH0KK2NoYXIgKipfX2NydDBfZ2xvYl9mdW5jdGlvbihjaGFyICpfYXJnKSB7IHJldHVybiAwOyB9CisKK3N0YXRpYyB2b2lkIHRzckV4aXQgKHZvaWQpIE5PUkVUVVJOOworCisvKiBkaXNhYmxlIHRoaXMgYml0IG9mIG1hZ2ljIGFzIGl0IGNhdXNlcyBhIHBhZ2UgZmF1bHQgb24gZXhpdCAqLworI2lmIDAKKy8qIFN0YXJ0IHVuZG9jdW1lbnRlZCB3YXkgdG8gbWFrZSBleGNlcHRpb24gaGFuZGxpbmcgZGlzYXBwZWFyICh2Mi4wMykgKi8KK3Nob3J0IF9fZGpncHBfZHNfYWxpYXM7Cit2b2lkIF9fZGpncHBfZXhjZXB0aW9uX3Byb2Nlc3Nvcih2b2lkKSB7IHJldHVybjsgfQordm9pZCBfX2RqZ3BwX2V4Y2VwdGlvbl9zZXR1cCh2b2lkKSB7IHJldHVybjsgfQordm9pZCBfX2RqZ3BwX2V4Y2VwdGlvbl90b2dnbGUodm9pZCkgeyByZXR1cm47IH0KK2ludCBfX2RqZ3BwX3NldF9jdHJsX2MoaW50IGVuYWJsZSkgeyByZXR1cm4gMDsgfQordm9pZCBfX21heWJlX2ZpeF93MmtfbnR2ZG1fYnVnKHZvaWQpIHsgfQordm9pZCBhYm9ydCh2b2lkKSB7IHRzckV4aXQoKTsgfQordm9pZCBfZXhpdChpbnQgc3RhdHVzKSB7IHRzckV4aXQoKTsgfQoraW50IHJhaXNlKGludCBzaWcpIHsgcmV0dXJuIDA7IH0KK3ZvaWQgKnNpZ25hbChpbnQgc2lnbnVtLCB2b2lkKmhhbmRsZXIpIHsgcmV0dXJuIE5VTEw7IH0KKy8qIEVuZCB1bmRvY3VtZW50ZWQgd2F5IHRvIG1ha2UgZXhjZXB0aW9uIGhhbmRsaW5nIGRpc2FwcGVhciAqLworI2VuZGlmCisKKyNkZWZpbmUgVElNRVJfSU5URVJSVVBUIDBYMDgKKyNkZWZpbmUgRE9TX0lOVEVSUlVQVCAgIDBYMjEKKyNkZWZpbmUgSURMRV9JTlRFUlJVUFQgIDBYMjgKKworLyogRm9yIHNhdmluZyBpbnRlcnJ1cHQgYW5kIG1haW4gY29udGV4dHMgKi8KKwordHlwZWRlZiBjaGFyIEZwdVN0YXRlWyg3KzIwKSo4XTsKK3R5cGVkZWYgc3RydWN0IHsKKyAgdW5zaWduZWQgc2hvcnQgc2VnbWVudDsKKyAgdW5zaWduZWQgc2hvcnQgb2Zmc2V0OworfSBEaXNrVHJhbnNmZXJBZGRyZXNzOworCit0eXBlZGVmIHN0cnVjdCB7CisgIEZwdVN0YXRlIGZwdTsKKyAgRGlza1RyYW5zZmVyQWRkcmVzcyBkdGE7CisgIHVuc2lnbmVkIHNob3J0IHBzcDsKK30gU3RhdGU7CisKK3N0YXRpYyBTdGF0ZSBtYWluU3RhdGU7CitzdGF0aWMgU3RhdGUgaW50ZXJydXB0U3RhdGU7CisKK3N0YXRpYyBqbXBfYnVmIG1haW5Db250ZXh0Oworc3RhdGljIGptcF9idWYgaW50ZXJydXB0Q29udGV4dDsKKworc3RhdGljIGludCBpc0JhY2tncm91bmRlZCA9IDA7IC8qIHdoZXRoZXIgd2UgcmVhbGx5IFRTUiAqLworCitzdGF0aWMgdW5zaWduZWQgbG9uZyBpbkRvc0ZsYWdQb2ludGVyOworc3RhdGljIHVuc2lnbmVkIGxvbmcgY3JpdGljYWxPZmZzZXQ7CisKKy8qIHByZXZlbnQgcmVlbnRyYW5jeSAqLworc3RhdGljIHZvbGF0aWxlIGludCBpblRpbWVySW50ZXJydXB0ID0gMDsKK3N0YXRpYyB2b2xhdGlsZSBpbnQgaW5JZGxlSW50ZXJydXB0ID0gMDsKKworc3RhdGljIGlubGluZSBpbnQKK2luSW50ZXJydXB0ICh2b2lkKSB7CisgIHJldHVybiBpblRpbWVySW50ZXJydXB0IHx8IGluSWRsZUludGVycnVwdDsKK30KKworc3RhdGljIHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgZWxhcHNlZFRpY2tDb3VudDsKK3N0YXRpYyB2b2xhdGlsZSB1bnNpZ25lZCBsb25nIGVsYXBzZWRUaWNrSW5jcmVtZW50OworCitzdGF0aWMgX19kcG1pX3JlZ3MgaWRsZVJlZ2lzdGVyczsKKworc3RhdGljIF9nbzMyX2RwbWlfc2VnaW5mbyBvcmlnVGltZXJTZWdpbmZvLCB0aW1lclNlZ2luZm87CitzdGF0aWMgX2dvMzJfZHBtaV9zZWdpbmZvIG9yaWdJZGxlU2VnaW5mbywgIGlkbGVTZWdpbmZvOworCisvKiBoYW5kbGUgUHJvZ3JhbSBTZWdtZW50IFByZWZpeCBzd2l0Y2ggZm9yIHByb3BlciBmaWxlIGRlc2NyaXB0b3IgdGFibGUgKi8KK3N0YXRpYyB1bnNpZ25lZCBzaG9ydAorZ2V0UHJvZ3JhbVNlZ21lbnRQcmVmaXggKHZvaWQpIHsKKyAgX19kcG1pX3JlZ3MgcjsKKworICByLmguYWggPSAwWDUxOworICBfX2RwbWlfaW50KERPU19JTlRFUlJVUFQsICZyKTsKKyAgcmV0dXJuIHIueC5ieDsKK30KKworc3RhdGljIHZvaWQKK3NldFByb2dyYW1TZWdtZW50UHJlZml4ICh1bnNpZ25lZCBzaG9ydCBzZWdtZW50KSB7CisgIF9fZHBtaV9yZWdzIHI7CisKKyAgci5oLmFoID0gMFg1MDsKKyAgci54LmJ4ID0gc2VnbWVudDsKKyAgX19kcG1pX2ludChET1NfSU5URVJSVVBULCAmcik7Cit9CisKKy8qIGhhbmRsZSBEaXNrIFRyYW5zZmVyIEFkZHJlc3Mgc3dpdGNoIHNpbmNlIGRqZ3BwIHVzZXMgaXQgZm9yIEZpbmRGaXJzdC9GaW5kTmV4dCAqLworc3RhdGljIHZvaWQKK2dldERpc2tUcmFuc2ZlckFkZHJlc3MgKERpc2tUcmFuc2ZlckFkZHJlc3MgKmR0YSkgeworICBfX2RwbWlfcmVncyByOworCisgIHIuaC5haCA9IDBYMkY7CisgIF9fZHBtaV9pbnQoRE9TX0lOVEVSUlVQVCwgJnIpOworCisgIGR0YS0+c2VnbWVudCA9IHIueC5lczsKKyAgZHRhLT5vZmZzZXQgPSByLnguYng7Cit9CisKK3N0YXRpYyB2b2lkCitzZXREaXNrVHJhbnNmZXJBZGRyZXNzIChjb25zdCBEaXNrVHJhbnNmZXJBZGRyZXNzICpkdGEpIHsKKyAgX19kcG1pX3JlZ3MgcjsKKworICByLmguYWggPSAwWDFBOworICByLnguZHMgPSBkdGEtPnNlZ21lbnQ7CisgIHIueC5keCA9IGR0YS0+b2Zmc2V0OworICBfX2RwbWlfaW50KERPU19JTlRFUlJVUFQsICZyKTsKK30KKwordW5zaWduZWQgc2hvcnQKK21zZG9zR2V0Q29kZVBhZ2UgKHZvaWQpIHsKKyAgX19kcG1pX3JlZ3MgcjsKKworICByLmguYWggPSAwWDY2OworICByLmguYWwgPSAwWDAxOworICBfX2RwbWlfaW50KERPU19JTlRFUlJVUFQsICZyKTsKKworICByZXR1cm4gci54LmJ4OworfQorCisvKiBIYW5kbGUgRlBVIHN0YXRlIHN3aXRjaCAqLworI2RlZmluZSBzYXZlRnB1U3RhdGUocCkgYXNtIHZvbGF0aWxlKCJmbnNhdmUgKCUwKTsgZndhaXQiOjoiciIocCk6Im1lbW9yeSIpCisjZGVmaW5lIHJlc3RvcmVGcHVTdGF0ZShwKSBhc20gdm9sYXRpbGUoImZyc3RvciAoJTApIjo6InIiKHApKQorCitzdGF0aWMgdm9pZAorc2F2ZVN0YXRlIChTdGF0ZSAqc3RhdGUpIHsKKyAgc2F2ZUZwdVN0YXRlKCZzdGF0ZS0+ZnB1KTsKKyAgZ2V0RGlza1RyYW5zZmVyQWRkcmVzcygmc3RhdGUtPmR0YSk7CisgIHN0YXRlLT5wc3AgPSBnZXRQcm9ncmFtU2VnbWVudFByZWZpeCgpOworfQorCitzdGF0aWMgdm9pZAorcmVzdG9yZVN0YXRlIChjb25zdCBTdGF0ZSAqc3RhdGUpIHsKKyAgcmVzdG9yZUZwdVN0YXRlKCZzdGF0ZS0+ZnB1KTsKKyAgc2V0RGlza1RyYW5zZmVyQWRkcmVzcygmc3RhdGUtPmR0YSk7CisgIHNldFByb2dyYW1TZWdtZW50UHJlZml4KHN0YXRlLT5wc3ApOworfQorCitzdGF0aWMgdW5zaWduZWQgc2hvcnQKK2dldFRpY2tzVGlsbE5leHRUaW1lckludGVycnVwdCAodm9pZCkgeworICB1bnNpZ25lZCBjaGFyIGNsbywgY2hpOworCisgIG91dHBvcnRiKDBYNDMsIDBYRDIpOworICBjbG8gPSBpbnBvcnRiKDBYNDApOworICBjaGkgPSBpbnBvcnRiKDBYNDApOworCisgIHJldHVybiAoY2hpIDw8IDgpIHwgY2xvOworfQorCisvKiBUaW1lciBpbnRlcnJ1cHQgaGFuZGxlciAqLworc3RhdGljIHZvaWQKK3RpbWVySW50ZXJydXB0SGFuZGxlciAodm9pZCkgeworICBlbGFwc2VkVGlja0NvdW50ICs9IGVsYXBzZWRUaWNrSW5jcmVtZW50OworICBlbGFwc2VkVGlja0luY3JlbWVudCA9IGdldFRpY2tzVGlsbE5leHRUaW1lckludGVycnVwdCgpOworCisgIGlmICghaW5JbnRlcnJ1cHQoKSkgeworICAgIGluVGltZXJJbnRlcnJ1cHQgPSAxOworICAgIGlmICghc2V0am1wKGludGVycnVwdENvbnRleHQpKSBsb25nam1wKG1haW5Db250ZXh0LCAxKTsKKyAgICBpblRpbWVySW50ZXJydXB0ID0gMDsKKyAgfQorfQorCisvKiBJZGxlIGludGVycnVwdCBoYW5kbGVyICovCitzdGF0aWMgdm9pZAoraWRsZUludGVycnVwdEhhbmRsZXIgKF9nbzMyX2RwbWlfcmVnaXN0ZXJzICpyKSB7CisgIGlmICghaW5JbnRlcnJ1cHQoKSkgeworICAgIGluSWRsZUludGVycnVwdCA9IDE7CisgICAgaWYgKCFzZXRqbXAoaW50ZXJydXB0Q29udGV4dCkpIGxvbmdqbXAobWFpbkNvbnRleHQsIDEpOworICAgIGluSWRsZUludGVycnVwdCA9IDA7CisgIH0KKworICByLT54LmNzID0gb3JpZ0lkbGVTZWdpbmZvLnJtX3NlZ21lbnQ7CisgIHItPnguaXAgPSBvcmlnSWRsZVNlZ2luZm8ucm1fb2Zmc2V0OworICBfZ28zMl9kcG1pX3NpbXVsYXRlX2ZjYWxsX2lyZXQocik7Cit9CisKKy8qIFRyeSB0byByZXN0b3JlIGludGVycnVwdCBoYW5kbGVyICovCitzdGF0aWMgaW50CityZXN0b3JlIChpbnQgdmVjdG9yLCBfZ28zMl9kcG1pX3NlZ2luZm8gKnNlZ2luZm8sIF9nbzMyX2RwbWlfc2VnaW5mbyAqb3JpZ19zZWdpbmZvKSB7CisgIF9nbzMyX2RwbWlfc2VnaW5mbyBjdXJfc2VnaW5mbzsKKworICBfZ28zMl9kcG1pX2dldF9wcm90ZWN0ZWRfbW9kZV9pbnRlcnJ1cHRfdmVjdG9yKHZlY3RvciwgJmN1cl9zZWdpbmZvKTsKKworICBpZiAoKGN1cl9zZWdpbmZvLnBtX3NlbGVjdG9yICE9IHNlZ2luZm8tPnBtX3NlbGVjdG9yKSB8fAorICAgICAgKGN1cl9zZWdpbmZvLnBtX29mZnNldCAhPSBzZWdpbmZvLT5wbV9vZmZzZXQpKSB7CisgICAgcmV0dXJuIDE7CisgIH0KKworICBfZ28zMl9kcG1pX3NldF9wcm90ZWN0ZWRfbW9kZV9pbnRlcnJ1cHRfdmVjdG9yKHZlY3Rvciwgb3JpZ19zZWdpbmZvKTsKKyAgcmV0dXJuIDA7Cit9CisKKy8qIFRTUiBleGl0OiB0cnlpbmcgdG8gZnJlZSBhcyBtYW55IHJlc291cmNlcyBhcyBwb3NzaWJsZSAqLworc3RhdGljIHZvaWQKK3RzckV4aXQgKHZvaWQpIHsKKyAgaWYgKGlzQmFja2dyb3VuZGVkKSB7CisgICAgdW5zaWduZWQgbG9uZyBwc3BBZGRyZXNzID0gX2dvMzJfaW5mb19ibG9jay5saW5lYXJfYWRkcmVzc19vZl9vcmlnaW5hbF9wc3A7CisKKyAgICBpZiAocmVzdG9yZShUSU1FUl9JTlRFUlJVUFQsICZ0aW1lclNlZ2luZm8sICZvcmlnVGltZXJTZWdpbmZvKSArCisgICAgICAgIHJlc3RvcmUoSURMRV9JTlRFUlJVUFQsICAmaWRsZVNlZ2luZm8sICAmb3JpZ0lkbGVTZWdpbmZvKSkgeworICAgICAgLyogZmFpbGVkLCBoYW5nICovCisgICAgICBzZXRqbXAobWFpbkNvbnRleHQpOworICAgICAgbG9uZ2ptcChpbnRlcnJ1cHRDb250ZXh0LCAxKTsKKyAgICB9CisKKyAgICB7CisgICAgICBfX2RwbWlfcmVncyByOworCisgICAgICAvKiBmcmVlIGVudmlyb25tZW50ICovCisgICAgICByLnguZXMgPSBfZmFycGVla3coX2Rvc19kcywgcHNwQWRkcmVzcyswWDJDKTsKKyAgICAgIHIueC5heCA9IDBYNDkwMDsKKyAgICAgIF9fZHBtaV9pbnQoRE9TX0lOVEVSUlVQVCwgJnIpOworCisgICAgICAvKiBmcmVlIFByb2dyYW0gU2VnbWVudCBQcmVmaXggKi8KKyAgICAgIHIueC5lcyA9IHBzcEFkZHJlc3MgLyAwWDEwOworICAgICAgci54LmF4ID0gMFg0OTAwOworICAgICAgX19kcG1pX2ludChET1NfSU5URVJSVVBULCAmcik7CisgICAgfQorCisgICAgLyogYW5kIHJldHVybiAqLworICAgIGxvbmdqbXAoaW50ZXJydXB0Q29udGV4dCwgMSk7CisKKyAgICAvKiBUT0RPOiBmcmVlIHByb3RlY3RlZCBtb2RlIG1lbW9yeSAqLworICB9Cit9CisKKy8qIGdvIHRvIGJhY2tncm91bmQ6IFRTUiAqLwordm9pZAorbXNkb3NCYWNrZ3JvdW5kICh2b2lkKSB7CisgIF9fZGpncHBfc2V0X2N0cmxfYygwKTsKKyAgc2F2ZVN0YXRlKCZtYWluU3RhdGUpOworCisgIGlmICghc2V0am1wKG1haW5Db250ZXh0KSkgeworICAgIF9fZHBtaV9yZWdzIHJlZ3M7CisKKyAgICAvKiBzZXQgYSBjaGFpbmVkIFByb3RlY3RlZCBNb2RlIFRpbWVyIElSUSBoYW5kbGVyICovCisgICAgdGltZXJTZWdpbmZvLnBtX3NlbGVjdG9yID0gX215X2NzKCk7CisgICAgdGltZXJTZWdpbmZvLnBtX29mZnNldCA9ICh1bnNpZ25lZCBsb25nKSZ0aW1lckludGVycnVwdEhhbmRsZXI7CisgICAgX2dvMzJfZHBtaV9nZXRfcHJvdGVjdGVkX21vZGVfaW50ZXJydXB0X3ZlY3RvcihUSU1FUl9JTlRFUlJVUFQsICZvcmlnVGltZXJTZWdpbmZvKTsKKyAgICBfZ28zMl9kcG1pX2NoYWluX3Byb3RlY3RlZF9tb2RlX2ludGVycnVwdF92ZWN0b3IoVElNRVJfSU5URVJSVVBULCAmdGltZXJTZWdpbmZvKTsKKworICAgIC8qIHNldCBhIHJlYWwgbW9kZSBET1MgSWRsZSBoYW5kbGVyIHdoaWNoIGNhbGxzIGJhY2sgb3VyIElkbGUgaGFuZGxlciAqLworICAgIGlkbGVTZWdpbmZvLnBtX3NlbGVjdG9yID0gX215X2NzKCk7CisgICAgaWRsZVNlZ2luZm8ucG1fb2Zmc2V0ID0gKHVuc2lnbmVkIGxvbmcpJmlkbGVJbnRlcnJ1cHRIYW5kbGVyOworICAgIG1lbXNldCgmaWRsZVJlZ2lzdGVycywgMCwgc2l6ZW9mKGlkbGVSZWdpc3RlcnMpKTsKKyAgICBfZ28zMl9kcG1pX2dldF9yZWFsX21vZGVfaW50ZXJydXB0X3ZlY3RvcihJRExFX0lOVEVSUlVQVCwgJm9yaWdJZGxlU2VnaW5mbyk7CisgICAgX2dvMzJfZHBtaV9hbGxvY2F0ZV9yZWFsX21vZGVfY2FsbGJhY2tfaXJldCgmaWRsZVNlZ2luZm8sICZpZGxlUmVnaXN0ZXJzKTsKKyAgICBfZ28zMl9kcG1pX3NldF9yZWFsX21vZGVfaW50ZXJydXB0X3ZlY3RvcihJRExFX0lOVEVSUlVQVCwgJmlkbGVTZWdpbmZvKTsKKworICAgIC8qIEdldCBJbkRvcyBhbmQgQ3JpdGljYWwgZmxhZ3MgYWRkcmVzc2VzICovCisgICAgcmVncy5oLmFoID0gMFgzNDsKKyAgICBfX2RwbWlfaW50KERPU19JTlRFUlJVUFQsICZyZWdzKTsKKyAgICBpbkRvc0ZsYWdQb2ludGVyID0gbXNkb3NNYWtlQWRkcmVzcyhyZWdzLnguZXMsIHJlZ3MueC5ieCk7CisKKyAgICByZWdzLnguYXggPSAwWDVEMDY7CisgICAgX19kcG1pX2ludChET1NfSU5URVJSVVBULCAmcmVncyk7CisgICAgY3JpdGljYWxPZmZzZXQgPSBtc2Rvc01ha2VBZGRyZXNzKHJlZ3MueC5kcywgcmVncy54LnNpKTsKKworICAgIC8qIFdlIGFyZSByZWFkeSAqLworICAgIGlzQmFja2dyb3VuZGVkID0gMTsKKworICAgIHJlZ3MueC5heCA9IDBYMzEwMDsKKyAgICBtc2Rvc0JyZWFrQWRkcmVzcygwWDEwMC8qcHNwKi8gKyBfZ28zMl9pbmZvX2Jsb2NrLnNpemVfb2ZfdHJhbnNmZXJfYnVmZmVyLCAwLAorICAgICAgICAgICAgICAgICAgICAgICZyZWdzLnguZHgsIE5VTEwpOworICAgIF9fZHBtaV9pbnQoRE9TX0lOVEVSUlVQVCwgJnJlZ3MpOworCisgICAgLyogc2hvdWxkbid0IGJlIHJlYWNoZWQgKi8KKyAgICBsb2dNZXNzYWdlKExPR19FUlIsICJUU1IgaW5zdGFsbGF0aW9uIGZhaWxlZCIpOworICAgIGlzQmFja2dyb3VuZGVkID0gMDsKKyAgfQorCisgIHNhdmVTdGF0ZSgmaW50ZXJydXB0U3RhdGUpOworICByZXN0b3JlU3RhdGUoJm1haW5TdGF0ZSk7Cit9CisKK3Vuc2lnbmVkIGxvbmcKK21zZG9zVVNsZWVwICh1bnNpZ25lZCBsb25nIG1pY3Jvc2Vjb25kcykgeworICB1bnNpZ25lZCBsb25nIHRpY2tzOworCisgIGlmICghaXNCYWNrZ3JvdW5kZWQpIHsKKyAgICB1c2xlZXAobWljcm9zZWNvbmRzKTsKKyAgICByZXR1cm4gbWljcm9zZWNvbmRzOworICB9CisKKyAgc2F2ZVN0YXRlKCZtYWluU3RhdGUpOworICByZXN0b3JlU3RhdGUoJmludGVycnVwdFN0YXRlKTsKKworICAvKiBjbG9jayB0aWNrcyB0byB3YWl0ICovCisgIHRpY2tzID0gKG1pY3Jvc2Vjb25kcyAqIE1TRE9TX1BJVF9GUkVRVUVOQ1kpIC8gVUlOVDY0X0MoMTAwMDAwMCk7CisKKyAgLyogd2UncmUgc3RhcnRpbmcgaW4gdGhlIG1pZGRsZSBvZiBhIHRpbWVyIHBlcmlvZCAqLworICB7CisgICAgaW50IHdhc0VuYWJsZWQgPSBkaXNhYmxlKCk7CisKKyAgICBlbGFwc2VkVGlja0luY3JlbWVudCA9IGdldFRpY2tzVGlsbE5leHRUaW1lckludGVycnVwdCgpOworICAgIGVsYXBzZWRUaWNrQ291bnQgPSAwOworCisgICAgaWYgKHdhc0VuYWJsZWQpIGVuYWJsZSgpOworICB9CisKKyAgd2hpbGUgKGVsYXBzZWRUaWNrQ291bnQgPCB0aWNrcykgeworICAgIC8qIHdhaXQgZm9yIG5leHQgaW50ZXJydXB0ICovCisgICAgaWYgKCFzZXRqbXAobWFpbkNvbnRleHQpKSBsb25nam1wKGludGVycnVwdENvbnRleHQsIDEpOworICAgIC8qIGludGVycnVwdCByZXR1cm5lZCAqLworICB9CisKKyAgLyogd2FpdCBmb3IgRG9zIHRvIGJlIGZyZWUgKi8KKyAgc2V0am1wKG1haW5Db250ZXh0KTsKKworICAvKiBjcml0aWNhbCBzZWN0aW9ucyBvZiBET1MgYXJlIG5ldmVyIHJlZW50cmFudCAqLworICBpZiAoX2ZhcnBlZWtiKF9kb3NfZHMsIGNyaXRpY2FsT2Zmc2V0KQorICAvKiBET1MgaXMgYnVzeSBidXQgbm90IGlkbGUgKi8KKyAgIHx8ICghaW5JZGxlSW50ZXJydXB0ICYmIF9mYXJwZWVrYihfZG9zX2RzLCBpbkRvc0ZsYWdQb2ludGVyKSkpCisgICAgbG9uZ2ptcChpbnRlcnJ1cHRDb250ZXh0LCAxKTsKKworICBzYXZlU3RhdGUoJmludGVycnVwdFN0YXRlKTsKKyAgcmVzdG9yZVN0YXRlKCZtYWluU3RhdGUpOworCisgIHJldHVybiAoZWxhcHNlZFRpY2tDb3VudCAqIFVJTlQ2NF9DKDEwMDAwMDApKSAvIE1TRE9TX1BJVF9GUkVRVUVOQ1k7Cit9CisKK2ludAordnNucHJpbnRmIChjaGFyICpzdHIsIHNpemVfdCBzaXplLCBjb25zdCBjaGFyICpmb3JtYXQsIHZhX2xpc3QgYXApIHsKKyAgc2l6ZV90IGFsbG9jID0gMTAyNDsKKyAgY2hhciAqYnVmOworICBpbnQgcmV0OworCisgIGlmIChhbGxvYyA8IHNpemUpIGFsbG9jID0gc2l6ZTsKKyAgYnVmID0gYWxsb2NhKGFsbG9jKTsKKyAgcmV0ID0gdnNwcmludGYoYnVmLCBmb3JtYXQsIGFwKTsKKyAgaWYgKHNpemUgPiAocmV0ICsgMSkpIHNpemUgPSByZXQgKyAxOworICBtZW1jcHkoc3RyLCBidWYsIHNpemUpOworICByZXR1cm4gcmV0OworfQorCitpbnQKK3NucHJpbnRmIChjaGFyICpzdHIsIHNpemVfdCBzaXplLCBjb25zdCBjaGFyICpmb3JtYXQsIC4uLikgeworICB2YV9saXN0IGFyZ3A7CisgIGludCByZXQ7CisKKyAgdmFfc3RhcnQoYXJncCwgZm9ybWF0KTsKKyAgcmV0ID0gdnNucHJpbnRmKHN0ciwgc2l6ZSwgZm9ybWF0LCBhcmdwKTsKKyAgdmFfZW5kKGFyZ3ApOworCisgIHJldHVybiByZXQ7Cit9CisKK3ZvaWQKK2luaXRpYWxpemVTeXN0ZW1PYmplY3QgKHZvaWQpIHsKK30KZGlmZiAtLWdpdCBhL1Byb2dyYW1zL3N5c3RlbV9ub25lLmMgYi9Qcm9ncmFtcy9zeXN0ZW1fbm9uZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU4Y2QwNDYKLS0tIC9kZXYvbnVsbAorKysgYi9Qcm9ncmFtcy9zeXN0ZW1fbm9uZS5jCkBAIC0wLDAgKzEsMjUgQEAKKy8qCisgKiBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorICogICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorICoKKyAqIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorICoKKyAqIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyAqLworCisjaW5jbHVkZSAicHJvbG9ndWUuaCIKKworI2luY2x1ZGUgInN5c3RlbS5oIgorCit2b2lkCitpbml0aWFsaXplU3lzdGVtT2JqZWN0ICh2b2lkKSB7Cit9CmRpZmYgLS1naXQgYS9Qcm9ncmFtcy9zeXN0ZW1fd2luZG93cy5jIGIvUHJvZ3JhbXMvc3lzdGVtX3dpbmRvd3MuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MDBhZjNmCi0tLSAvZGV2L251bGwKKysrIGIvUHJvZ3JhbXMvc3lzdGVtX3dpbmRvd3MuYwpAQCAtMCwwICsxLDY2OSBAQAorLyoKKyAqIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisgKiAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisgKgorICogQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKKyNpbmNsdWRlICJwcm9sb2d1ZS5oIgorCisjaW5jbHVkZSA8ZmNudGwuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorCisjaW5jbHVkZSAibG9nLmgiCisjaW5jbHVkZSAic3lzdGVtLmgiCisjaW5jbHVkZSAic3lzdGVtX3dpbmRvd3MuaCIKKyNpbmNsdWRlICJ0aW1pbmcuaCIKKyNpbmNsdWRlICJtZXNzYWdlcy5oIgorCisvKiBudGRsbC5kbGwgKi8KK1dJTl9QUk9DX1NUVUIoTnRTZXRJbmZvcm1hdGlvblByb2Nlc3MpOworCisKKy8qIGtlcm5lbDMyLmRsbDogY29uc29sZSAqLworV0lOX1BST0NfU1RVQihBdHRhY2hDb25zb2xlKTsKK1dJTl9QUk9DX1NUVUIoR2V0TG9jYWxlSW5mb0V4KTsKKworCisvKiB1c2VyMzIuZGxsICovCitXSU5fUFJPQ19TVFVCKEdldEFsdFRhYkluZm9BKTsKK1dJTl9QUk9DX1NUVUIoU2VuZElucHV0KTsKKworCisjaWZkZWYgX19NSU5HVzMyX18KKy8qIHdzMl8zMi5kbGwgKi8KK1dJTl9QUk9DX1NUVUIoZ2V0YWRkcmluZm8pOworV0lOX1BST0NfU1RVQihmcmVlYWRkcmluZm8pOworI2VuZGlmIC8qIF9fTUlOR1czMl9fICovCisKKworc3RhdGljIHZvaWQgKgorbG9hZExpYnJhcnkgKGNvbnN0IGNoYXIgKm5hbWUpIHsKKyAgSE1PRFVMRSBtb2R1bGUgPSBMb2FkTGlicmFyeShuYW1lKTsKKyAgaWYgKCFtb2R1bGUpIGxvZ01lc3NhZ2UoTE9HX0RFQlVHLCAiJXM6ICVzIiwgZ2V0dGV4dCgiY2Fubm90IGxvYWQgbGlicmFyeSIpLCBuYW1lKTsKKyAgcmV0dXJuIG1vZHVsZTsKK30KKworc3RhdGljIHZvaWQgKgorZ2V0UHJvY2VkdXJlIChITU9EVUxFIG1vZHVsZSwgY29uc3QgY2hhciAqbmFtZSkgeworICB2b2lkICphZGRyZXNzID0gbW9kdWxlPyBHZXRQcm9jQWRkcmVzcyhtb2R1bGUsIG5hbWUpOiBOVUxMOworICBpZiAoIWFkZHJlc3MpIGxvZ01lc3NhZ2UoTE9HX0RFQlVHLCAiJXM6ICVzIiwgZ2V0dGV4dCgiY2Fubm90IGZpbmQgcHJvY2VkdXJlIiksIG5hbWUpOworICByZXR1cm4gYWRkcmVzczsKK30KKworc3RhdGljIGludAorYWRkV2luZG93c0NvbW1hbmRMaW5lQ2hhcmFjdGVyIChjaGFyICoqYnVmZmVyLCBpbnQgKnNpemUsIGludCAqbGVuZ3RoLCBjaGFyIGNoYXJhY3RlcikgeworICBpZiAoKmxlbmd0aCA9PSAqc2l6ZSkgeworICAgIGNoYXIgKm5ld0J1ZmZlciA9IHJlYWxsb2MoKmJ1ZmZlciwgKCpzaXplID0gKnNpemU/ICpzaXplPDwxOiAwWDgwKSk7CisgICAgaWYgKCFuZXdCdWZmZXIpIHsKKyAgICAgIGxvZ1N5c3RlbUVycm9yKCJyZWFsbG9jIik7CisgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgKmJ1ZmZlciA9IG5ld0J1ZmZlcjsKKyAgfQorCisgICgqYnVmZmVyKVsoKmxlbmd0aCkrK10gPSBjaGFyYWN0ZXI7CisgIHJldHVybiAxOworfQorCitjaGFyICoKK21ha2VXaW5kb3dzQ29tbWFuZExpbmUgKGNvbnN0IGNoYXIgKmNvbnN0ICphcmd1bWVudHMpIHsKKyAgY29uc3QgY2hhciBiYWNrc2xhc2ggPSAnXFwnOworICBjb25zdCBjaGFyIHF1b3RlID0gJyInOworICBjaGFyICpidWZmZXIgPSBOVUxMOworICBpbnQgc2l6ZSA9IDA7CisgIGludCBsZW5ndGggPSAwOworCisjZGVmaW5lIEFERChjKSBpZiAoIWFkZFdpbmRvd3NDb21tYW5kTGluZUNoYXJhY3RlcigmYnVmZmVyLCAmc2l6ZSwgJmxlbmd0aCwgKGMpKSkgZ290byBlcnJvcgorICB3aGlsZSAoKmFyZ3VtZW50cykgeworICAgIGNvbnN0IGNoYXIgKmNoYXJhY3RlciA9ICphcmd1bWVudHM7CisgICAgaW50IGJhY2tzbGFzaENvdW50ID0gMDsKKyAgICBpbnQgbmVlZFF1b3RlcyA9IDA7CisgICAgaW50IHN0YXJ0ID0gbGVuZ3RoOworCisgICAgd2hpbGUgKCpjaGFyYWN0ZXIpIHsKKyAgICAgIGlmICgqY2hhcmFjdGVyID09IGJhY2tzbGFzaCkgeworICAgICAgICArK2JhY2tzbGFzaENvdW50OworICAgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKCpjaGFyYWN0ZXIgPT0gcXVvdGUpIHsKKyAgICAgICAgICBuZWVkUXVvdGVzID0gMTsKKyAgICAgICAgICBiYWNrc2xhc2hDb3VudCA9IChiYWNrc2xhc2hDb3VudCAqIDIpICsgMTsKKyAgICAgICAgfSBlbHNlIGlmICgoKmNoYXJhY3RlciA9PSAnICcpIHx8ICgqY2hhcmFjdGVyID09ICdcdCcpKSB7CisgICAgICAgICAgbmVlZFF1b3RlcyA9IDE7CisgICAgICAgIH0KKworICAgICAgICB3aGlsZSAoYmFja3NsYXNoQ291bnQgPiAwKSB7CisgICAgICAgICAgQUREKGJhY2tzbGFzaCk7CisgICAgICAgICAgLS1iYWNrc2xhc2hDb3VudDsKKyAgICAgICAgfQorCisgICAgICAgIEFERCgqY2hhcmFjdGVyKTsKKyAgICAgIH0KKworICAgICAgKytjaGFyYWN0ZXI7CisgICAgfQorCisgICAgaWYgKG5lZWRRdW90ZXMpIGJhY2tzbGFzaENvdW50ICo9IDI7CisgICAgd2hpbGUgKGJhY2tzbGFzaENvdW50ID4gMCkgeworICAgICAgQUREKGJhY2tzbGFzaCk7CisgICAgICAtLWJhY2tzbGFzaENvdW50OworICAgIH0KKworICAgIGlmIChuZWVkUXVvdGVzKSB7CisgICAgICBBREQocXVvdGUpOworICAgICAgQUREKHF1b3RlKTsKKyAgICAgIG1lbW1vdmUoJmJ1ZmZlcltzdGFydCsxXSwgJmJ1ZmZlcltzdGFydF0sIGxlbmd0aC1zdGFydC0xKTsKKyAgICAgIGJ1ZmZlcltzdGFydF0gPSBxdW90ZTsKKyAgICB9CisKKyAgICBBREQoJyAnKTsKKyAgICArK2FyZ3VtZW50czsKKyAgfQorI3VuZGVmIEFERAorCisgIGJ1ZmZlcltsZW5ndGgtMV0gPSAwOworICB7CisgICAgY2hhciAqbGluZSA9IHJlYWxsb2MoYnVmZmVyLCBsZW5ndGgpOworICAgIGlmIChsaW5lKSByZXR1cm4gbGluZTsKKyAgICBsb2dTeXN0ZW1FcnJvcigicmVhbGxvYyIpOworICB9CisKK2Vycm9yOgorICBpZiAoYnVmZmVyKSBmcmVlKGJ1ZmZlcik7CisgIHJldHVybiBOVUxMOworfQorCitzdGF0aWMgdm9pZAorbG9hZExpYnJhcmllcyAodm9pZCkgeworICBITU9EVUxFIGxpYnJhcnk7CisKKyNkZWZpbmUgTE9BRF9MSUJSQVJZKG5hbWUpIChsaWJyYXJ5ID0gbG9hZExpYnJhcnkobmFtZSkpCisjZGVmaW5lIEdFVF9QUk9DKG5hbWUpIChuYW1lIyNQcm9jID0gZ2V0UHJvY2VkdXJlKGxpYnJhcnksICNuYW1lKSkKKworICBpZiAoTE9BRF9MSUJSQVJZKCJudGRsbC5kbGwiKSkgeworICAgIEdFVF9QUk9DKE50U2V0SW5mb3JtYXRpb25Qcm9jZXNzKTsKKyAgfQorCisgIGlmIChMT0FEX0xJQlJBUlkoImtlcm5lbDMyLmRsbCIpKSB7CisgICAgR0VUX1BST0MoQXR0YWNoQ29uc29sZSk7CisgICAgR0VUX1BST0MoR2V0TG9jYWxlSW5mb0V4KTsKKyAgfQorCisgIGlmIChMT0FEX0xJQlJBUlkoInVzZXIzMi5kbGwiKSkgeworICAgIEdFVF9QUk9DKEdldEFsdFRhYkluZm9BKTsKKyAgICBHRVRfUFJPQyhTZW5kSW5wdXQpOworICB9CisKKyNpZmRlZiBfX01JTkdXMzJfXworICBpZiAoTE9BRF9MSUJSQVJZKCJ3czJfMzIuZGxsIikpIHsKKyAgICBHRVRfUFJPQyhnZXRhZGRyaW5mbyk7CisgICAgR0VUX1BST0MoZnJlZWFkZHJpbmZvKTsKKyAgfQorI2VuZGlmIC8qIF9fTUlOR1czMl9fICovCit9CisKK3N0YXRpYyB2b2lkCitzZXRMb2NhbGUgKHZvaWQpIHsKKyAgeworICAgIGNvbnN0IGNoYXIgKmxvY2FsZSA9IGdldGVudigiTEFORyIpOworCisgICAgaWYgKGxvY2FsZSAmJiAqbG9jYWxlKSB7CisgICAgICBzZXRNZXNzYWdlc0xvY2FsZShsb2NhbGUpOworICAgICAgcmV0dXJuOworICAgIH0KKyAgfQorCisgIGNoYXIgKmxvY2FsZSA9IGdldFdpbmRvd3NMb2NhbGVOYW1lKCk7CisgIHNldE1lc3NhZ2VzTG9jYWxlKGxvY2FsZSk7CisgIGlmIChsb2NhbGUpIGZyZWUobG9jYWxlKTsKK30KKwordm9pZAoraW5pdGlhbGl6ZVN5c3RlbU9iamVjdCAodm9pZCkgeworICBzZXRMb2NhbGUoKTsKKyAgbG9hZExpYnJhcmllcygpOworfQorCisjaWZkZWYgX19NSU5HVzMyX18KKyNpbmNsdWRlICJ3aW5fZXJybm8uaCIKKworI2lmbmRlZiBTVUJMQU5HX0RVVENIX05FVEhFUkxBTkRTCisjZGVmaW5lIFNVQkxBTkdfRFVUQ0hfTkVUSEVSTEFORFMgU1VCTEFOR19EVVRDSAorI2VuZGlmIC8qIFNVQkxBTkdfRFVUQ0hfTkVUSEVSTEFORFMgKi8KKworI2lmbmRlZiBTVUJMQU5HX0VOR0xJU0hfSVJFTEFORAorI2RlZmluZSBTVUJMQU5HX0VOR0xJU0hfSVJFTEFORCBTVUJMQU5HX0VOR0xJU0hfRUlSRQorI2VuZGlmIC8qIFNVQkxBTkdfRU5HTElTSF9JUkVMQU5EICovCisKKyNpZm5kZWYgU1VCTEFOR19GUkVOQ0hfRlJBTkNFCisjZGVmaW5lIFNVQkxBTkdfRlJFTkNIX0ZSQU5DRSBTVUJMQU5HX0ZSRU5DSAorI2VuZGlmIC8qIFNVQkxBTkdfRlJFTkNIX0ZSQU5DRSAqLworCisjaWZuZGVmIFNVQkxBTkdfR0VSTUFOX0dFUk1BTlkKKyNkZWZpbmUgU1VCTEFOR19HRVJNQU5fR0VSTUFOWSBTVUJMQU5HX0dFUk1BTgorI2VuZGlmIC8qIFNVQkxBTkdfR0VSTUFOX0dFUk1BTlkgKi8KKworI2lmbmRlZiBTVUJMQU5HX0lUQUxJQU5fSVRBTFkKKyNkZWZpbmUgU1VCTEFOR19JVEFMSUFOX0lUQUxZIFNVQkxBTkdfSVRBTElBTgorI2VuZGlmIC8qIFNVQkxBTkdfSVRBTElBTl9JVEFMWSAqLworCisjaWZuZGVmIFNVQkxBTkdfS09SRUFOX0tPUkVBCisjZGVmaW5lIFNVQkxBTkdfS09SRUFOX0tPUkVBIFNVQkxBTkdfS09SRUFOCisjZW5kaWYgLyogU1VCTEFOR19LT1JFQU5fS09SRUEgKi8KKworI2lmbmRlZiBTVUJMQU5HX0xJVEhVQU5JQU5fTElUSFVBTklBCisjZGVmaW5lIFNVQkxBTkdfTElUSFVBTklBTl9MSVRIVUFOSUEgU1VCTEFOR19MSVRIVUFOSUFOCisjZW5kaWYgLyogU1VCTEFOR19MSVRIVUFOSUFOX0xJVEhVQU5JQSAqLworCisjaWZuZGVmIFNVQkxBTkdfUE9SVFVHVUVTRV9QT1JUVUdBTAorI2RlZmluZSBTVUJMQU5HX1BPUlRVR1VFU0VfUE9SVFVHQUwgU1VCTEFOR19QT1JUVUdVRVNFCisjZW5kaWYgLyogU1VCTEFOR19QT1JUVUdVRVNFX1BPUlRVR0FMICovCisKKyNpZm5kZWYgU1VCTEFOR19TUEFOSVNIX1NQQUlOCisjZGVmaW5lIFNVQkxBTkdfU1BBTklTSF9TUEFJTiBTVUJMQU5HX1NQQU5JU0gKKyNlbmRpZiAvKiBTVUJMQU5HX1NQQU5JU0hfU1BBSU4gKi8KKworI2lmbmRlZiBTVUJMQU5HX1NXRURJU0hfU1dFREVOCisjZGVmaW5lIFNVQkxBTkdfU1dFRElTSF9TV0VERU4gU1VCTEFOR19TV0VESVNICisjZW5kaWYgLyogU1VCTEFOR19TV0VESVNIX1NXRURFTiAqLworCisjaWZuZGVmIFNVQkxBTkdfU1lSSUFDX1RVUktFWQorI2RlZmluZSBTVUJMQU5HX1NZUklBQ19UVVJLRVkgU1VCTEFOR19TWVJJQUMKKyNlbmRpZiAvKiBTVUJMQU5HX1NZUklBQ19UVVJLRVkgKi8KKworY2hhciAqCitnZXRXaW5kb3dzTG9jYWxlTmFtZSAodm9pZCkgeworICBpZiAoR2V0TG9jYWxlSW5mb0V4UHJvYykgeworI2RlZmluZSBXSU5fTE9DQUxFX1NJWkUgODUKKyAgICBXQ0hBUiBidWZmZXJbV0lOX0xPQ0FMRV9TSVpFXTsKKyAgICBpbnQgcmVzdWx0ID0gR2V0TG9jYWxlSW5mb0V4UHJvYyhMT0NBTEVfTkFNRV9VU0VSX0RFRkFVTFQsIExPQ0FMRV9TTkFNRSwgYnVmZmVyLCBXSU5fTE9DQUxFX1NJWkUpOworCisgICAgaWYgKHJlc3VsdCA+IDApIHsKKyAgICAgIGNoYXIgbG9jYWxlW1dJTl9MT0NBTEVfU0laRV07CisgICAgICBjb25zdCBXQ0hBUiAqc291cmNlID0gYnVmZmVyOworICAgICAgY2hhciAqdGFyZ2V0ID0gbG9jYWxlOworCisgICAgICBkbyB7CisgICAgICAgIFdDSEFSIGMgPSAqc291cmNlOworCisgICAgICAgIGlmIChjID09ICctJykgYyA9ICdfJzsKKyAgICAgICAgKnRhcmdldCsrID0gYzsKKyAgICAgIH0gd2hpbGUgKCpzb3VyY2UrKyk7CisKKyAgICAgIHsKKyAgICAgICAgY2hhciAqbmFtZSA9IHN0cmR1cChsb2NhbGUpOworCisgICAgICAgIGlmIChuYW1lKSB7CisgICAgICAgICAgcmV0dXJuIG5hbWU7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgbG9nTWFsbG9jRXJyb3IoKTsKKyAgICAgICAgfQorICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICBsb2dXaW5kb3dzU3lzdGVtRXJyb3IoIkdldExvY2FsZUluZm9FeCIpOworICAgIH0KKyAgfQorCisgIHsKKyAgICBEV09SRCBsYW5naWQ7CisgICAgaW50IHJlc3VsdCA9IEdldExvY2FsZUluZm8oTE9DQUxFX1VTRVJfREVGQVVMVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMT0NBTEVfSUxBTkdVQUdFIHwgTE9DQUxFX1JFVFVSTl9OVU1CRVIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYXIgKikmbGFuZ2lkLCBzaXplb2YobGFuZ2lkKS9zaXplb2YoVENIQVIpKTsKKworICAgIGlmIChyZXN1bHQgPiAwKSB7CisgICAgICBjaGFyICpuYW1lOworCisgICAgICBzd2l0Y2ggKGxhbmdpZCkgeworI2RlZmluZSBESUFMRUNUKHByaW1hcnksc2Vjb25kYXJ5LGxvY2FsZSkgY2FzZSBNQUtFTEFOR0lEKExBTkdfIyNwcmltYXJ5LCBTVUJMQU5HXyMjcHJpbWFyeSMjXyMjc2Vjb25kYXJ5KTogbmFtZSA9IChsb2NhbGUpOyBicmVhazsKKyAgICAgICAgRElBTEVDVChBRlJJS0FBTlMsIFNPVVRIX0FGUklDQSwgImFmX1pBIik7CisgICAgICAgIERJQUxFQ1QoQUxCQU5JQU4sIEFMQkFOSUEsICJzcV9BTCIpOworICAgICAgICBESUFMRUNUKEFMU0FUSUFOLCBGUkFOQ0UsICJnc3dfRlIiKTsKKyAgICAgICAgRElBTEVDVChBTUhBUklDLCBFVEhJT1BJQSwgImFtX0VUIik7CisgICAgICAgIERJQUxFQ1QoQVJBQklDLCBBTEdFUklBLCAiYXJfRFoiKTsKKyAgICAgICAgRElBTEVDVChBUkFCSUMsIEJBSFJBSU4sICJhcl9CSCIpOworICAgICAgICBESUFMRUNUKEFSQUJJQywgRUdZUFQsICJhcl9FRyIpOworICAgICAgICBESUFMRUNUKEFSQUJJQywgSVJBUSwgImFyX0lRIik7CisgICAgICAgIERJQUxFQ1QoQVJBQklDLCBKT1JEQU4sICJhcl9KTyIpOworICAgICAgICBESUFMRUNUKEFSQUJJQywgS1VXQUlULCAiYXJfUVciKTsKKyAgICAgICAgRElBTEVDVChBUkFCSUMsIExFQkFOT04sICJhcl9MQiIpOworICAgICAgICBESUFMRUNUKEFSQUJJQywgTElCWUEsICJhcl9MWSIpOworICAgICAgICBESUFMRUNUKEFSQUJJQywgTU9ST0NDTywgImFyX01BIik7CisgICAgICAgIERJQUxFQ1QoQVJBQklDLCBPTUFOLCAiYXJfT00iKTsKKyAgICAgICAgRElBTEVDVChBUkFCSUMsIFFBVEFSLCAiYXJfUUEiKTsKKyAgICAgICAgRElBTEVDVChBUkFCSUMsIFNBVURJX0FSQUJJQSwgImFyX1NBIik7CisgICAgICAgIERJQUxFQ1QoQVJBQklDLCBTWVJJQSwgImFyX1NZIik7CisgICAgICAgIERJQUxFQ1QoQVJBQklDLCBUVU5JU0lBLCAiYXJfVE4iKTsKKyAgICAgICAgRElBTEVDVChBUkFCSUMsIFVBRSwgImFyX0FFIik7CisgICAgICAgIERJQUxFQ1QoQVJBQklDLCBZRU1FTiwgImFyX1lFIik7CisgICAgICAgIERJQUxFQ1QoQVJNRU5JQU4sIEFSTUVOSUEsICJoeV9BTSIpOworICAgICAgICBESUFMRUNUKEFTU0FNRVNFLCBJTkRJQSwgImFzX0lOIik7CisgICAgICAgIERJQUxFQ1QoQVpFUkksIENZUklMTElDLCAiYXpAY3lyaWxsaWMiKTsKKyAgICAgICAgRElBTEVDVChBWkVSSSwgTEFUSU4sICJhekBsYXRpbiIpOworICAgICAgICBESUFMRUNUKEJBU0hLSVIsIFJVU1NJQSwgImJhX1JVIik7CisgICAgICAgIERJQUxFQ1QoQkFTUVVFLCBCQVNRVUUsICJldV9YWCIpOworICAgICAgICBESUFMRUNUKEJFTEFSVVNJQU4sIEJFTEFSVVMsICJiZV9CWSIpOworICAgICAgICBESUFMRUNUKEJFTkdBTEksIEJBTkdMQURFU0gsICJibl9IRCIpOworICAgICAgICBESUFMRUNUKEJFTkdBTEksIElORElBLCAiYm5fSU4iKTsKKyAgICAgICAgRElBTEVDVChCT1NOSUFOLCBCT1NOSUFfSEVSWkVHT1ZJTkFfQ1lSSUxMSUMsICJic19CQUBjeXJpbGxpYyIpOworICAgICAgICBESUFMRUNUKEJPU05JQU4sIEJPU05JQV9IRVJaRUdPVklOQV9MQVRJTiwgImJzX0JBQGxhdGluIik7CisgICAgICAgIERJQUxFQ1QoQlJFVE9OLCBGUkFOQ0UsICJicl9GUiIpOworICAgICAgICBESUFMRUNUKEJVTEdBUklBTiwgQlVMR0FSSUEsICJiZ19CRyIpOworICAgICAgICBESUFMRUNUKENBVEFMQU4sIENBVEFMQU4sICJjYV9YWCIpOworICAgICAgICBESUFMRUNUKENISU5FU0UsIEhPTkdLT05HLCAiemhfSEsiKTsKKyAgICAgICAgRElBTEVDVChDSElORVNFLCBNQUNBVSwgInpoX01PIik7CisgICAgICAgIERJQUxFQ1QoQ0hJTkVTRSwgU0lNUExJRklFRCwgInpoX0NOIik7CisgICAgICAgIERJQUxFQ1QoQ0hJTkVTRSwgU0lOR0FQT1JFLCAiemhfU0ciKTsKKyAgICAgICAgRElBTEVDVChDSElORVNFLCBUUkFESVRJT05BTCwgInpoX1RXIik7CisgICAgICAgIERJQUxFQ1QoQ09SU0lDQU4sIEZSQU5DRSwgImNvX0ZSIik7CisgICAgICAgIERJQUxFQ1QoQ1JPQVRJQU4sIEJPU05JQV9IRVJaRUdPVklOQV9MQVRJTiwgImhyX0JBQGxhdGluIik7CisgICAgICAgIERJQUxFQ1QoQ1JPQVRJQU4sIENST0FUSUEsICJocl9IUiIpOworICAgICAgICBESUFMRUNUKENaRUNILCBDWkVDSF9SRVBVQkxJQywgImNzX0NaIik7CisgICAgICAgIERJQUxFQ1QoREFOSVNILCBERU5NQVJLLCAiZGFfREsiKTsKKyAgICAgICAgRElBTEVDVChESVZFSEksIE1BTERJVkVTLCAiZHZfTVYiKTsKKyAgICAgICAgRElBTEVDVChEVVRDSCwgQkVMR0lBTiwgIm5sX0JFIik7CisgICAgICAgIERJQUxFQ1QoRFVUQ0gsIE5FVEhFUkxBTkRTLCAibmxfTkwiKTsKKyAgICAgICAgRElBTEVDVChFTkdMSVNILCBBVVMsICJlbl9BVSIpOworICAgICAgICBESUFMRUNUKEVOR0xJU0gsIEJFTElaRSwgImVuX0JaIik7CisgICAgICAgIERJQUxFQ1QoRU5HTElTSCwgQ0FOLCAiZW5fQ0EiKTsKKyAgICAgICAgRElBTEVDVChFTkdMSVNILCBDQVJJQkJFQU4sICJlbl9YWCIpOworICAgICAgICBESUFMRUNUKEVOR0xJU0gsIElORElBLCAiZW5fSU4iKTsKKyAgICAgICAgRElBTEVDVChFTkdMSVNILCBJUkVMQU5ELCAiZW5fSUUiKTsKKyAgICAgICAgRElBTEVDVChFTkdMSVNILCBKQU1BSUNBLCAiZW5fSk0iKTsKKyAgICAgICAgRElBTEVDVChFTkdMSVNILCBNQUxBWVNJQSwgImVuX01ZIik7CisgICAgICAgIERJQUxFQ1QoRU5HTElTSCwgTlosICJlbl9OWiIpOworICAgICAgICBESUFMRUNUKEVOR0xJU0gsIFBISUxJUFBJTkVTLCAiZW5fUEgiKTsKKyAgICAgICAgRElBTEVDVChFTkdMSVNILCBTSU5HQVBPUkUsICJlbl9TRyIpOworICAgICAgICBESUFMRUNUKEVOR0xJU0gsIFNPVVRIX0FGUklDQSwgImVuX1pBIik7CisgICAgICAgIERJQUxFQ1QoRU5HTElTSCwgVFJJTklEQUQsICJlbl9UVCIpOworICAgICAgICBESUFMRUNUKEVOR0xJU0gsIFVLLCAiZW5fR0IiKTsKKyAgICAgICAgRElBTEVDVChFTkdMSVNILCBVUywgImVuX1VTIik7CisgICAgICAgIERJQUxFQ1QoRU5HTElTSCwgWklNQkFCV0UsICJlbl9aVyIpOworICAgICAgICBESUFMRUNUKEVTVE9OSUFOLCBFU1RPTklBLCAiZXRfRUUiKTsKKyAgICAgICAgRElBTEVDVChGQUVST0VTRSwgRkFST0VfSVNMQU5EUywgImZvX0ZPIik7CisgICAgICAgIERJQUxFQ1QoRklMSVBJTk8sIFBISUxJUFBJTkVTLCAiZmlsX1BIIik7CisgICAgICAgIERJQUxFQ1QoRklOTklTSCwgRklOTEFORCwgImZpX0ZJIik7CisgICAgICAgIERJQUxFQ1QoRlJFTkNILCBCRUxHSUFOLCAiZnJfQkUiKTsKKyAgICAgICAgRElBTEVDVChGUkVOQ0gsIENBTkFESUFOLCAiZnJfQ0EiKTsKKyAgICAgICAgRElBTEVDVChGUkVOQ0gsIEZSQU5DRSwgImZyX0ZSIik7CisgICAgICAgIERJQUxFQ1QoRlJFTkNILCBMVVhFTUJPVVJHLCAiZnJfTFUiKTsKKyAgICAgICAgRElBTEVDVChGUkVOQ0gsIE1PTkFDTywgImZyX01DIik7CisgICAgICAgIERJQUxFQ1QoRlJFTkNILCBTV0lTUywgImZyX0NIIik7CisgICAgICAgIERJQUxFQ1QoRlJJU0lBTiwgTkVUSEVSTEFORFMsICJmeV9OTCIpOworICAgICAgICBESUFMRUNUKEdBTElDSUFOLCBHQUxJQ0lBTiwgImdsX0VTIik7CisgICAgICAgIERJQUxFQ1QoR0VPUkdJQU4sIEdFT1JHSUEsICJrYV9HRSIpOworICAgICAgICBESUFMRUNUKEdFUk1BTiwgQVVTVFJJQU4sICJkZV9BVCIpOworICAgICAgICBESUFMRUNUKEdFUk1BTiwgR0VSTUFOWSwgImRlX0RFIik7CisgICAgICAgIERJQUxFQ1QoR0VSTUFOLCBMSUVDSFRFTlNURUlOLCAiZGVfTEkiKTsKKyAgICAgICAgRElBTEVDVChHRVJNQU4sIExVWEVNQk9VUkcsICJkZV9MVSIpOworICAgICAgICBESUFMRUNUKEdFUk1BTiwgU1dJU1MsICJkZV9DSCIpOworICAgICAgICBESUFMRUNUKEdSRUVLLCBHUkVFQ0UsICJlbF9HUiIpOworICAgICAgICBESUFMRUNUKEdSRUVOTEFORElDLCBHUkVFTkxBTkQsICJrbF9HTCIpOworICAgICAgICBESUFMRUNUKEdVSkFSQVRJLCBJTkRJQSwgImd1X0lOIik7CisgICAgICAgIERJQUxFQ1QoSEFVU0EsIE5JR0VSSUEsICJoYV9ORyIpOworICAgICAgICBESUFMRUNUKEhFQlJFVywgSVNSQUVMLCAiaGVfSUwiKTsKKyAgICAgICAgRElBTEVDVChISU5ESSwgSU5ESUEsICJoaV9JTiIpOworICAgICAgICBESUFMRUNUKEhVTkdBUklBTiwgSFVOR0FSWSwgImh1X0hVIik7CisgICAgICAgIERJQUxFQ1QoSUNFTEFORElDLCBJQ0VMQU5ELCAiaXNfSVMiKTsKKyAgICAgICAgRElBTEVDVChJR0JPLCBOSUdFUklBLCAiaWdfTkciKTsKKyAgICAgICAgRElBTEVDVChJTkRPTkVTSUFOLCBJTkRPTkVTSUEsICJpZF9JRCIpOworICAgICAgICBESUFMRUNUKElOVUtUSVRVVCwgQ0FOQURBLCAiaXVfQ0EiKTsKKyAgICAgICAgRElBTEVDVChJUklTSCwgSVJFTEFORCwgImdhX0lFIik7CisgICAgICAgIERJQUxFQ1QoSVRBTElBTiwgSVRBTFksICJpdF9JVCIpOworICAgICAgICBESUFMRUNUKElUQUxJQU4sIFNXSVNTLCAiaXRfQ0giKTsKKyAgICAgICAgRElBTEVDVChKQVBBTkVTRSwgSkFQQU4sICJqYV9KUCIpOworICAgICAgICBESUFMRUNUKEtBU0hNSVJJLCBJTkRJQSwgImtzX0lOIik7CisgICAgICAgIERJQUxFQ1QoS0FaQUssIEtBWkFLSFNUQU4sICJra19LWiIpOworICAgICAgICBESUFMRUNUKEtITUVSLCBDQU1CT0RJQSwgImttX0tIIik7CisgICAgICAgIERJQUxFQ1QoS0lDSEUsIEdVQVRFTUFMQSwgInF1Y19HVCIpOworICAgICAgICBESUFMRUNUKEtJTllBUldBTkRBLCBSV0FOREEsICJyd19SVyIpOworICAgICAgICBESUFMRUNUKEtPTktBTkksIElORElBLCAia29rX0lOIik7CisgICAgICAgIERJQUxFQ1QoS09SRUFOLCBLT1JFQSwgImtvX0tSIik7CisgICAgICAgIERJQUxFQ1QoS1lSR1laLCBLWVJHWVpTVEFOLCAia3lfS0ciKTsKKyAgICAgICAgRElBTEVDVChMQU8sIExBT19QRFIsICJsb19MQSIpOworICAgICAgICBESUFMRUNUKExBVFZJQU4sIExBVFZJQSwgImx2X0xWIik7CisgICAgICAgIERJQUxFQ1QoTElUSFVBTklBTiwgTElUSFVBTklBLCAibHRfTFQiKTsKKyAgICAgICAgRElBTEVDVChMT1dFUl9TT1JCSUFOLCBHRVJNQU5ZLCAiZHNiX0RFIik7CisgICAgICAgIERJQUxFQ1QoTFVYRU1CT1VSR0lTSCwgTFVYRU1CT1VSRywgImxiX0xVIik7CisgICAgICAgIERJQUxFQ1QoTUFDRURPTklBTiwgTUFDRURPTklBLCAibWtfTUsiKTsKKyAgICAgICAgRElBTEVDVChNQUxBWSwgQlJVTkVJX0RBUlVTU0FMQU0sICJtc19CTiIpOworICAgICAgICBESUFMRUNUKE1BTEFZLCBNQUxBWVNJQSwgIm1zX01ZIik7CisgICAgICAgIERJQUxFQ1QoTUFMQVlBTEFNLCBJTkRJQSwgIm1sX0lOIik7CisgICAgICAgIERJQUxFQ1QoTUFMVEVTRSwgTUFMVEEsICJtdF9NVCIpOworICAgICAgICBESUFMRUNUKE1BT1JJLCBORVdfWkVBTEFORCwgIm1pX05aIik7CisgICAgICAgIERJQUxFQ1QoTUFQVURVTkdVTiwgQ0hJTEUsICJhcm5fQ0wiKTsKKyAgICAgICAgRElBTEVDVChNQVJBVEhJLCBJTkRJQSwgIm1yX0lOIik7CisgICAgICAgIERJQUxFQ1QoTU9IQVdLLCBNT0hBV0ssICJtb2giKTsKKyAgICAgICAgRElBTEVDVChNT05HT0xJQU4sIENZUklMTElDX01PTkdPTElBLCAibW5fTU5AY3lyaWxsaWMiKTsKKyAgICAgICAgRElBTEVDVChNT05HT0xJQU4sIFBSQywgIm1uX0NOIik7CisgICAgICAgIERJQUxFQ1QoTkVQQUxJLCBJTkRJQSwgIm5lX0lOIik7CisgICAgICAgIERJQUxFQ1QoTkVQQUxJLCBORVBBTCwgIm5lX05QIik7CisgICAgICAgIERJQUxFQ1QoTk9SV0VHSUFOLCBCT0tNQUwsICJuYl9OTyIpOworICAgICAgICBESUFMRUNUKE5PUldFR0lBTiwgTllOT1JTSywgIm5uX05PIik7CisgICAgICAgIERJQUxFQ1QoT0NDSVRBTiwgRlJBTkNFLCAib2NfRlIiKTsKKyAgICAgICAgRElBTEVDVChPUklZQSwgSU5ESUEsICJvcl9JTiIpOworICAgICAgICBESUFMRUNUKFBBU0hUTywgQUZHSEFOSVNUQU4sICJwc19BRiIpOworICAgICAgICBESUFMRUNUKFBFUlNJQU4sIElSQU4sICJmYV9JUiIpOworICAgICAgICBESUFMRUNUKFBPTElTSCwgUE9MQU5ELCAicGxfUEwiKTsKKyAgICAgICAgRElBTEVDVChQT1JUVUdVRVNFLCBCUkFaSUxJQU4sICJwdF9CUiIpOworICAgICAgICBESUFMRUNUKFBPUlRVR1VFU0UsIFBPUlRVR0FMLCAicHRfUFQiKTsKKyAgICAgICAgRElBTEVDVChQVU5KQUJJLCBJTkRJQSwgInBhX0lOIik7CisjaWZkZWYgU1VCTEFOR19QVU5KQUJJX1BBS0lTVEFOCisgICAgICAgIERJQUxFQ1QoUFVOSkFCSSwgUEFLSVNUQU4sICJwYV9QSyIpOworI2VuZGlmIC8qIFNVQkxBTkdfUFVOSkFCSV9QQUtJU1RBTiAqLworICAgICAgICBESUFMRUNUKFFVRUNIVUEsIEJPTElWSUEsICJxdV9CTyIpOworICAgICAgICBESUFMRUNUKFFVRUNIVUEsIEVDVUFET1IsICJxdV9FQyIpOworICAgICAgICBESUFMRUNUKFFVRUNIVUEsIFBFUlUsICJxdV9QRSIpOworI2lmZGVmIFNVQkxBTkdfUk9NQU5JQU5fTU9MRE9WQQorICAgICAgICBESUFMRUNUKFJPTUFOSUFOLCBNT0xET1ZBLCAicm9fTUQiKTsKKyNlbmRpZiAvKiBTVUJMQU5HX1JPTUFOSUFOX01PTERPVkEgKi8KKyAgICAgICAgRElBTEVDVChST01BTklBTiwgUk9NQU5JQSwgInJvX1JPIik7CisgICAgICAgIERJQUxFQ1QoUlVTU0lBTiwgUlVTU0lBLCAicnVfUlUiKTsKKyAgICAgICAgRElBTEVDVChTQU1JLCBMVUxFX05PUldBWSwgInNtal9OTyIpOworICAgICAgICBESUFMRUNUKFNBTUksIExVTEVfU1dFREVOLCAic21qX1NFIik7CisgICAgICAgIERJQUxFQ1QoU0FNSSwgTk9SVEhFUk5fRklOTEFORCwgInNtZV9GSSIpOworICAgICAgICBESUFMRUNUKFNBTUksIE5PUlRIRVJOX05PUldBWSwgInNtZV9OTyIpOworICAgICAgICBESUFMRUNUKFNBTUksIE5PUlRIRVJOX1NXRURFTiwgInNtZV9TRSIpOworICAgICAgICBESUFMRUNUKFNBTUksIFNPVVRIRVJOX05PUldBWSwgInNtYV9OTyIpOworICAgICAgICBESUFMRUNUKFNBTUksIFNPVVRIRVJOX1NXRURFTiwgInNtYV9TRSIpOworICAgICAgICBESUFMRUNUKFNBTlNLUklULCBJTkRJQSwgInNhX0lOIik7CisgICAgICAgIERJQUxFQ1QoU0VSQklBTiwgQk9TTklBX0hFUlpFR09WSU5BX0NZUklMTElDLCAic3JfQkFAY3lyaWxsaWMiKTsKKyAgICAgICAgRElBTEVDVChTRVJCSUFOLCBCT1NOSUFfSEVSWkVHT1ZJTkFfTEFUSU4sICJzcl9CQUBsYXRpbiIpOworICAgICAgICBESUFMRUNUKFNFUkJJQU4sIENZUklMTElDLCAic3JAY3lyaWxsaWMiKTsKKyAgICAgICAgRElBTEVDVChTRVJCSUFOLCBMQVRJTiwgInNyQGxhdGluIik7CisgICAgICAgIERJQUxFQ1QoU0lOREhJLCBBRkdIQU5JU1RBTiwgInNkX0FGIik7CisgICAgICAgIERJQUxFQ1QoU0lOSEFMRVNFLCBTUklfTEFOS0EsICJzaV9MSyIpOworICAgICAgICBESUFMRUNUKFNMT1ZBSywgU0xPVkFLSUEsICJza19TSyIpOworICAgICAgICBESUFMRUNUKFNMT1ZFTklBTiwgU0xPVkVOSUEsICJzbF9TSSIpOworICAgICAgICBESUFMRUNUKFNPVEhPLCBOT1JUSEVSTl9TT1VUSF9BRlJJQ0EsICJzdF9YWCIpOworICAgICAgICBESUFMRUNUKFNQQU5JU0gsIEFSR0VOVElOQSwgImVzX0FSIik7CisgICAgICAgIERJQUxFQ1QoU1BBTklTSCwgQk9MSVZJQSwgImVzX0JPIik7CisgICAgICAgIERJQUxFQ1QoU1BBTklTSCwgQ0hJTEUsICJlc19DTCIpOworICAgICAgICBESUFMRUNUKFNQQU5JU0gsIENPTE9NQklBLCAiZXNfQ08iKTsKKyAgICAgICAgRElBTEVDVChTUEFOSVNILCBDT1NUQV9SSUNBLCAiZXNfQ1IiKTsKKyAgICAgICAgRElBTEVDVChTUEFOSVNILCBET01JTklDQU5fUkVQVUJMSUMsICJlc19ETyIpOworICAgICAgICBESUFMRUNUKFNQQU5JU0gsIEVDVUFET1IsICJlc19FQyIpOworICAgICAgICBESUFMRUNUKFNQQU5JU0gsIEVMX1NBTFZBRE9SLCAiZXNfU1YiKTsKKyAgICAgICAgRElBTEVDVChTUEFOSVNILCBHVUFURU1BTEEsICJlc19HVCIpOworICAgICAgICBESUFMRUNUKFNQQU5JU0gsIEhPTkRVUkFTLCAiZXNfSE4iKTsKKyAgICAgICAgRElBTEVDVChTUEFOSVNILCBNRVhJQ0FOLCAiZXNfTVgiKTsKKyAgICAgICAgRElBTEVDVChTUEFOSVNILCBNT0RFUk4sICJlc19YWCIpOworICAgICAgICBESUFMRUNUKFNQQU5JU0gsIE5JQ0FSQUdVQSwgImVzX05JIik7CisgICAgICAgIERJQUxFQ1QoU1BBTklTSCwgUEFOQU1BLCAiZXNfUEEiKTsKKyAgICAgICAgRElBTEVDVChTUEFOSVNILCBQQVJBR1VBWSwgImVzX1BZIik7CisgICAgICAgIERJQUxFQ1QoU1BBTklTSCwgUEVSVSwgImVzX1BFIik7CisgICAgICAgIERJQUxFQ1QoU1BBTklTSCwgUFVFUlRPX1JJQ08sICJlc19QUiIpOworICAgICAgICBESUFMRUNUKFNQQU5JU0gsIFNQQUlOLCAiZXNfRVMiKTsKKyAgICAgICAgRElBTEVDVChTUEFOSVNILCBVUlVHVUFZLCAiZXNfVVkiKTsKKyAgICAgICAgRElBTEVDVChTUEFOSVNILCBVUywgImVzX1VTIik7CisgICAgICAgIERJQUxFQ1QoU1BBTklTSCwgVkVORVpVRUxBLCAiZXNfVkUiKTsKKyAgICAgICAgRElBTEVDVChTV0VESVNILCBGSU5MQU5ELCAic3ZfRkkiKTsKKyAgICAgICAgRElBTEVDVChTV0VESVNILCBTV0VERU4sICJzdl9TRSIpOworICAgICAgICBESUFMRUNUKFNZUklBQywgVFVSS0VZLCAic3lyX1RSIik7CisgICAgICAgIERJQUxFQ1QoVEFNQVpJR0hULCBBTEdFUklBX0xBVElOLCAiYmVyX0RaQGxhdGluIik7CisgICAgICAgIERJQUxFQ1QoVEFNSUwsIElORElBLCAidGFfSU4iKTsKKyAgICAgICAgRElBTEVDVChUQVRBUiwgUlVTU0lBLCAidHRfUlUiKTsKKyAgICAgICAgRElBTEVDVChURUxVR1UsIElORElBLCAidGVfSU4iKTsKKyAgICAgICAgRElBTEVDVChUSEFJLCBUSEFJTEFORCwgInRoX1RIIik7CisgICAgICAgIERJQUxFQ1QoVElCRVRBTiwgQkhVVEFOLCAiYm9fQlQiKTsKKyAgICAgICAgRElBTEVDVChUSUJFVEFOLCBQUkMsICJib19DTiIpOworICAgICAgICBESUFMRUNUKFRJR1JJR05BLCBFUklUUkVBLCAidGlfRVIiKTsKKyAgICAgICAgRElBTEVDVChUU1dBTkEsIFNPVVRIX0FGUklDQSwgInRuX1pBIik7CisgICAgICAgIERJQUxFQ1QoVFVSS0lTSCwgVFVSS0VZLCAidHJfVFIiKTsKKyAgICAgICAgRElBTEVDVChVSUdIVVIsIFBSQywgInVnX0NOIik7CisgICAgICAgIERJQUxFQ1QoVUtSQUlOSUFOLCBVS1JBSU5FLCAidWtfVUEiKTsKKyAgICAgIC8vRElBTEVDVChVUFBFUl9TT1JCSUFOLCBHRVJNQU5ZLCAiaHNiX0RFIik7CisgICAgICAgIERJQUxFQ1QoVVJEVSwgSU5ESUEsICJ1cl9JTiIpOworICAgICAgICBESUFMRUNUKFVSRFUsIFBBS0lTVEFOLCAidXJfUEsiKTsKKyAgICAgICAgRElBTEVDVChVWkJFSywgQ1lSSUxMSUMsICJ1ekBjeXJpbGxpYyIpOworICAgICAgICBESUFMRUNUKFVaQkVLLCBMQVRJTiwgInV6QGxhdGluIik7CisgICAgICAgIERJQUxFQ1QoVklFVE5BTUVTRSwgVklFVE5BTSwgInZpX1ZOIik7CisgICAgICAgIERJQUxFQ1QoV0VMU0gsIFVOSVRFRF9LSU5HRE9NLCAiY3lfR0IiKTsKKyAgICAgICAgRElBTEVDVChXT0xPRiwgU0VORUdBTCwgImZ5X1NOIik7CisgICAgICAgIERJQUxFQ1QoWEhPU0EsIFNPVVRIX0FGUklDQSwgInhoX1pBIik7CisgICAgICAgIERJQUxFQ1QoWUFLVVQsIFJVU1NJQSwgInNhaF9SVSIpOworICAgICAgICBESUFMRUNUKFlJLCBQUkMsICJpaV9DTiIpOworICAgICAgICBESUFMRUNUKFlPUlVCQSwgTklHRVJJQSwgInlvX05HIik7CisgICAgICAgIERJQUxFQ1QoWlVMVSwgU09VVEhfQUZSSUNBLCAienVfWkEiKTsKKyN1bmRlZiBESUFMRUNUbworCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgc3dpdGNoIChQUklNQVJZTEFOR0lEKGxhbmdpZCkpIHsKKyNkZWZpbmUgTEFOR1VBR0UocHJpbWFyeSxsb2NhbGUpIGNhc2UgTEFOR18jI3ByaW1hcnk6IG5hbWUgPSAobG9jYWxlKTsgYnJlYWs7CisgICAgICAgICAgICBMQU5HVUFHRShBRlJJS0FBTlMsICJhZiIpOworICAgICAgICAgICAgTEFOR1VBR0UoQUxCQU5JQU4sICJzcSIpOworICAgICAgICAgICAgTEFOR1VBR0UoQUxTQVRJQU4sICJnc3ciKTsKKyAgICAgICAgICAgIExBTkdVQUdFKEFNSEFSSUMsICJhbSIpOworICAgICAgICAgICAgTEFOR1VBR0UoQVJBQklDLCAiYXIiKTsKKyAgICAgICAgICAgIExBTkdVQUdFKEFSTUVOSUFOLCAiaHkiKTsKKyAgICAgICAgICAgIExBTkdVQUdFKEFTU0FNRVNFLCAiYXMiKTsKKyAgICAgICAgICAgIExBTkdVQUdFKEFaRVJJLCAiYXoiKTsKKyAgICAgICAgICAgIExBTkdVQUdFKEJBU0hLSVIsICJiYSIpOworICAgICAgICAgICAgTEFOR1VBR0UoQkFTUVVFLCAiZXUiKTsKKyAgICAgICAgICAgIExBTkdVQUdFKEJFTEFSVVNJQU4sICJiZSIpOworICAgICAgICAgICAgTEFOR1VBR0UoQkVOR0FMSSwgImJuIik7CisgICAgICAgICAgICBMQU5HVUFHRShCT1NOSUFOLCAiYnMiKTsKKyAgICAgICAgICAgIExBTkdVQUdFKEJPU05JQU5fTkVVVFJBTCwgImJzIik7CisgICAgICAgICAgICBMQU5HVUFHRShCUkVUT04sICJiciIpOworICAgICAgICAgICAgTEFOR1VBR0UoQlVMR0FSSUFOLCAiYmciKTsKKyAgICAgICAgICAgIExBTkdVQUdFKENBVEFMQU4sICJjYSIpOworICAgICAgICAgICAgTEFOR1VBR0UoQ0hJTkVTRSwgInpoIik7CisgICAgICAgICAgICBMQU5HVUFHRShDT1JTSUNBTiwgImNvIik7CisgICAgICAgICAgLy9MQU5HVUFHRShDUk9BVElBTiwgImhyIik7CisgICAgICAgICAgICBMQU5HVUFHRShDWkVDSCwgImNzIik7CisgICAgICAgICAgICBMQU5HVUFHRShEQU5JU0gsICJkYSIpOworICAgICAgICAgICAgTEFOR1VBR0UoREFSSSwgImdieiIpOworICAgICAgICAgICAgTEFOR1VBR0UoRElWRUhJLCAiZHYiKTsKKyAgICAgICAgICAgIExBTkdVQUdFKERVVENILCAibmwiKTsKKyAgICAgICAgICAgIExBTkdVQUdFKEVOR0xJU0gsICJlbiIpOworICAgICAgICAgICAgTEFOR1VBR0UoRVNUT05JQU4sICJldCIpOworICAgICAgICAgICAgTEFOR1VBR0UoRkFFUk9FU0UsICJmbyIpOworICAgICAgICAgICAgTEFOR1VBR0UoRklMSVBJTk8sICJmaWwiKTsKKyAgICAgICAgICAgIExBTkdVQUdFKEZJTk5JU0gsICJmaSIpOworICAgICAgICAgICAgTEFOR1VBR0UoRlJFTkNILCAiZnIiKTsKKyAgICAgICAgICAgIExBTkdVQUdFKEZSSVNJQU4sICJmeSIpOworICAgICAgICAgICAgTEFOR1VBR0UoR0FMSUNJQU4sICJnbCIpOworICAgICAgICAgICAgTEFOR1VBR0UoR0VPUkdJQU4sICJrYSIpOworICAgICAgICAgICAgTEFOR1VBR0UoR0VSTUFOLCAiZGUiKTsKKyAgICAgICAgICAgIExBTkdVQUdFKEdSRUVLLCAiZWwiKTsKKyAgICAgICAgICAgIExBTkdVQUdFKEdSRUVOTEFORElDLCAia2wiKTsKKyAgICAgICAgICAgIExBTkdVQUdFKEdVSkFSQVRJLCAiZ3UiKTsKKyAgICAgICAgICAgIExBTkdVQUdFKEhBVVNBLCAiaGEiKTsKKyAgICAgICAgICAgIExBTkdVQUdFKEhFQlJFVywgImhlIik7CisgICAgICAgICAgICBMQU5HVUFHRShISU5ESSwgImhpIik7CisgICAgICAgICAgICBMQU5HVUFHRShIVU5HQVJJQU4sICJodSIpOworICAgICAgICAgICAgTEFOR1VBR0UoSUNFTEFORElDLCAiaXMiKTsKKyAgICAgICAgICAgIExBTkdVQUdFKElHQk8sICJpZyIpOworICAgICAgICAgICAgTEFOR1VBR0UoSU5ET05FU0lBTiwgImlkIik7CisgICAgICAgICAgICBMQU5HVUFHRShJTlVLVElUVVQsICJpdSIpOworICAgICAgICAgICAgTEFOR1VBR0UoSVJJU0gsICJnYSIpOworICAgICAgICAgICAgTEFOR1VBR0UoSVRBTElBTiwgIml0Iik7CisgICAgICAgICAgICBMQU5HVUFHRShKQVBBTkVTRSwgImphIik7CisgICAgICAgICAgICBMQU5HVUFHRShLQU5OQURBLCAia24iKTsKKyAgICAgICAgICAgIExBTkdVQUdFKEtBU0hNSVJJLCAia3MiKTsKKyAgICAgICAgICAgIExBTkdVQUdFKEtBWkFLLCAia2siKTsKKyAgICAgICAgICAgIExBTkdVQUdFKEtITUVSLCAia20iKTsKKyAgICAgICAgICAgIExBTkdVQUdFKEtJQ0hFLCAicXVjIik7CisgICAgICAgICAgICBMQU5HVUFHRShLSU5ZQVJXQU5EQSwgInJ3Iik7CisgICAgICAgICAgICBMQU5HVUFHRShLT05LQU5JLCAia29rIik7CisgICAgICAgICAgICBMQU5HVUFHRShLT1JFQU4sICJrbyIpOworICAgICAgICAgICAgTEFOR1VBR0UoS1lSR1laLCAia3kiKTsKKyAgICAgICAgICAgIExBTkdVQUdFKExBTywgImxvIik7CisgICAgICAgICAgICBMQU5HVUFHRShMQVRWSUFOLCAibHYiKTsKKyAgICAgICAgICAgIExBTkdVQUdFKExJVEhVQU5JQU4sICJsdCIpOworICAgICAgICAgICAgTEFOR1VBR0UoTE9XRVJfU09SQklBTiwgImRzYiIpOworICAgICAgICAgICAgTEFOR1VBR0UoTFVYRU1CT1VSR0lTSCwgImxiIik7CisgICAgICAgICAgICBMQU5HVUFHRShNQUNFRE9OSUFOLCAibWsiKTsKKyNpZm5kZWYgX19NSU5HVzY0X1ZFUlNJT05fTUFKT1IKKyAgICAgICAgICAgIExBTkdVQUdFKE1BTEFHQVNZLCAibWciKTsKKyNlbmRpZgorICAgICAgICAgICAgTEFOR1VBR0UoTUFMQVksICJtcyIpOworICAgICAgICAgICAgTEFOR1VBR0UoTUFMQVlBTEFNLCAibWwiKTsKKyAgICAgICAgICAgIExBTkdVQUdFKE1BTFRFU0UsICJtdCIpOworICAgICAgICAgICAgTEFOR1VBR0UoTUFOSVBVUkksICJtbmkiKTsKKyAgICAgICAgICAgIExBTkdVQUdFKE1BT1JJLCAibWkiKTsKKyAgICAgICAgICAgIExBTkdVQUdFKE1BUFVEVU5HVU4sICJhcm4iKTsKKyAgICAgICAgICAgIExBTkdVQUdFKE1BUkFUSEksICJtciIpOworICAgICAgICAgICAgTEFOR1VBR0UoTU9IQVdLLCAibW9oIik7CisgICAgICAgICAgICBMQU5HVUFHRShNT05HT0xJQU4sICJtbiIpOworICAgICAgICAgICAgTEFOR1VBR0UoTkVQQUxJLCAibmUiKTsKKyAgICAgICAgICAgIExBTkdVQUdFKE5PUldFR0lBTiwgIm5vIik7CisgICAgICAgICAgICBMQU5HVUFHRShPQ0NJVEFOLCAib2MiKTsKKyAgICAgICAgICAgIExBTkdVQUdFKE9SSVlBLCAib3IiKTsKKyAgICAgICAgICAgIExBTkdVQUdFKFBBU0hUTywgInBzIik7CisgICAgICAgICAgICBMQU5HVUFHRShQRVJTSUFOLCAiZmEiKTsKKyAgICAgICAgICAgIExBTkdVQUdFKFBPTElTSCwgInBsIik7CisgICAgICAgICAgICBMQU5HVUFHRShQT1JUVUdVRVNFLCAicHQiKTsKKyAgICAgICAgICAgIExBTkdVQUdFKFBVTkpBQkksICJwYSIpOworICAgICAgICAgICAgTEFOR1VBR0UoUVVFQ0hVQSwgInF1Iik7CisgICAgICAgICAgICBMQU5HVUFHRShST01BTklBTiwgInJvIik7CisgICAgICAgICAgICBMQU5HVUFHRShSVVNTSUFOLCAicnUiKTsKKyAgICAgICAgICAgIExBTkdVQUdFKFNBTUksICJzZSIpOworICAgICAgICAgICAgTEFOR1VBR0UoU0FOU0tSSVQsICJzYSIpOworICAgICAgICAgIC8vTEFOR1VBR0UoU0VSQklBTiwgInNyIik7CisgICAgICAgICAgICBMQU5HVUFHRShTRVJCSUFOX05FVVRSQUwsICJzciIpOworICAgICAgICAgICAgTEFOR1VBR0UoU0lOREhJLCAic2QiKTsKKyAgICAgICAgICAgIExBTkdVQUdFKFNJTkhBTEVTRSwgInNpIik7CisgICAgICAgICAgICBMQU5HVUFHRShTTE9WQUssICJzayIpOworICAgICAgICAgICAgTEFOR1VBR0UoU0xPVkVOSUFOLCAic2wiKTsKKyAgICAgICAgICAgIExBTkdVQUdFKFNPVEhPLCAic3QiKTsKKyAgICAgICAgICAgIExBTkdVQUdFKFNQQU5JU0gsICJlcyIpOworICAgICAgICAgICAgTEFOR1VBR0UoU1dBSElMSSwgInN3Iik7CisgICAgICAgICAgICBMQU5HVUFHRShTV0VESVNILCAic3YiKTsKKyAgICAgICAgICAgIExBTkdVQUdFKFNZUklBQywgInN5ciIpOworICAgICAgICAgICAgTEFOR1VBR0UoVEFNQVpJR0hULCAiYmVyIik7CisgICAgICAgICAgICBMQU5HVUFHRShUQU1JTCwgInRhIik7CisgICAgICAgICAgICBMQU5HVUFHRShUQVRBUiwgInR0Iik7CisgICAgICAgICAgICBMQU5HVUFHRShURUxVR1UsICJ0ZSIpOworICAgICAgICAgICAgTEFOR1VBR0UoVEhBSSwgInRoIik7CisgICAgICAgICAgICBMQU5HVUFHRShUSUJFVEFOLCAiYm8iKTsKKyAgICAgICAgICAgIExBTkdVQUdFKFRJR1JJR05BLCAidGkiKTsKKyAgICAgICAgICAgIExBTkdVQUdFKFRTV0FOQSwgInRuIik7CisgICAgICAgICAgICBMQU5HVUFHRShUVVJLSVNILCAidHIiKTsKKyAgICAgICAgICAgIExBTkdVQUdFKFVJR0hVUiwgInVnIik7CisgICAgICAgICAgICBMQU5HVUFHRShVS1JBSU5JQU4sICJ1ayIpOworICAgICAgICAgIC8vTEFOR1VBR0UoVVBQRVJfU09SQklBTiwgImhzYiIpOworICAgICAgICAgICAgTEFOR1VBR0UoVVJEVSwgInVyIik7CisgICAgICAgICAgICBMQU5HVUFHRShVWkJFSywgInV6Iik7CisgICAgICAgICAgICBMQU5HVUFHRShWSUVUTkFNRVNFLCAidmkiKTsKKyAgICAgICAgICAgIExBTkdVQUdFKFdFTFNILCAiY3kiKTsKKyAgICAgICAgICAgIExBTkdVQUdFKFdPTE9GLCAiZnkiKTsKKyAgICAgICAgICAgIExBTkdVQUdFKFhIT1NBLCAieGgiKTsKKyAgICAgICAgICAgIExBTkdVQUdFKFlBS1VULCAic2FoIik7CisgICAgICAgICAgICBMQU5HVUFHRShZSSwgImlpIik7CisgICAgICAgICAgICBMQU5HVUFHRShZT1JVQkEsICJ5byIpOworICAgICAgICAgICAgTEFOR1VBR0UoWlVMVSwgInp1Iik7CisjdW5kZWYgTEFOR1VBR0UKKworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgbmFtZSA9IE5VTEw7CisgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIH0KKyAgICAgICAgICBicmVhazsKKyAgICAgIH0KKworICAgICAgaWYgKG5hbWUpIHsKKyAgICAgICAgaWYgKChuYW1lID0gc3RyZHVwKG5hbWUpKSkgeworICAgICAgICAgIHJldHVybiBuYW1lOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgIGxvZ01hbGxvY0Vycm9yKCk7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgbG9nV2luZG93c1N5c3RlbUVycm9yKCJHZXRMb2NhbGVJbmZvIik7CisgICAgfQorICB9CisKKyAgcmV0dXJuIE5VTEw7Cit9CisKKyNpZiAoX19NSU5HVzMyX01BSk9SX1ZFUlNJT04gPCAzKSB8fCAoKF9fTUlOR1czMl9NQUpPUl9WRVJTSU9OID09IDMpICYmIChfX01JTkdXMzJfTUlOT1JfVkVSU0lPTiA8IDEwKSkKK2ludAorZ2V0dGltZW9mZGF5IChzdHJ1Y3QgdGltZXZhbCAqdHZwLCB2b2lkICp0enApIHsKKyAgRFdPUkQgdGltZSA9IEdldFRpY2tDb3VudCgpOworICAvKiB0aGlzIGlzIG5vdCA0OS43IGRheXMtcHJvb2YgISAqLworICB0dnAtPnR2X3NlYyA9IHRpbWUgLyAxMDAwOworICB0dnAtPnR2X3VzZWMgPSAodGltZSAlIDEwMDApICogMTAwMDsKKyAgcmV0dXJuIDA7Cit9CisjZW5kaWYgLyogZ2V0dGltZW9mZGF5KCkgKi8KKworI2lmICFkZWZpbmVkKF9fTUlOR1c2NF9WRVJTSU9OX01BSk9SKSAmJiAoKF9fTUlOR1czMl9NQUpPUl9WRVJTSU9OIDwgMykgfHwgKChfX01JTkdXMzJfTUFKT1JfVkVSU0lPTiA9PSAzKSAmJiAoX19NSU5HVzMyX01JTk9SX1ZFUlNJT04gPCAxNSkpKQordm9pZAordXNsZWVwIChpbnQgdXNlYykgeworICBpZiAodXNlYyA+IDApIHsKKyAgICBhcHByb3hpbWF0ZURlbGF5KCh1c2VjICsgKFVTRUNTX1BFUl9NU0VDIC0gMSkpIC8gVVNFQ1NfUEVSX01TRUMpOworICB9Cit9CisjZW5kaWYgLyogdXNsZWVwKCkgKi8KKyNlbmRpZiAvKiBfX01JTkdXMzJfXyAqLwpkaWZmIC0tZ2l0IGEvUHJvZ3JhbXMvdGJsMmhleC5jIGIvUHJvZ3JhbXMvdGJsMmhleC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFkMWFhOWIKLS0tIC9kZXYvbnVsbAorKysgYi9Qcm9ncmFtcy90YmwyaGV4LmMKQEAgLTAsMCArMSwyNzkgQEAKKy8qCisgKiBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorICogICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorICoKKyAqIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorICoKKyAqIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyAqLworCisjaW5jbHVkZSAicHJvbG9ndWUuaCIKKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKworI2luY2x1ZGUgImNtZGxpbmUuaCIKKyNpbmNsdWRlICJsb2cuaCIKKyNpbmNsdWRlICJmaWxlLmgiCisKKyNpbmNsdWRlICJ0dGIuaCIKKyNpbmNsdWRlICJ0dGJfaW50ZXJuYWwuaCIKKworI2luY2x1ZGUgImF0Yi5oIgorI2luY2x1ZGUgImF0Yl9pbnRlcm5hbC5oIgorCisjaW5jbHVkZSAiY3RiLmgiCisjaW5jbHVkZSAiY3RiX2ludGVybmFsLmgiCisKK0JFR0lOX09QVElPTl9UQUJMRShwcm9ncmFtT3B0aW9ucykKK0VORF9PUFRJT05fVEFCTEUocHJvZ3JhbU9wdGlvbnMpCisKK3R5cGVkZWYgc3RydWN0IHsKKyAgdm9pZCAqb2JqZWN0OworICBjb25zdCB1bnNpZ25lZCBjaGFyICpieXRlczsKKyAgc2l6ZV90IHNpemU7Cit9IFRhYmxlRGF0YTsKKwordHlwZWRlZiBzdHJ1Y3QgeworICBjb25zdCBjaGFyICpleHRlbnNpb247CisgIGludCAoKmxvYWQpIChjb25zdCBjaGFyICpwYXRoLCBUYWJsZURhdGEgKmRhdGEpOworICB2b2lkICgqdW5sb2FkKSAoVGFibGVEYXRhICpkYXRhKTsKK30gVGFibGVFbnRyeTsKKworc3RhdGljIGludAorbG9hZFRleHRUYWJsZSAoY29uc3QgY2hhciAqcGF0aCwgVGFibGVEYXRhICpkYXRhKSB7CisgIFRleHRUYWJsZSAqdGFibGUgPSBjb21waWxlVGV4dFRhYmxlKHBhdGgpOworICBpZiAoIXRhYmxlKSByZXR1cm4gMDsKKworICBkYXRhLT5vYmplY3QgPSB0YWJsZTsKKyAgZGF0YS0+Ynl0ZXMgPSB0YWJsZS0+aGVhZGVyLmJ5dGVzOworICBkYXRhLT5zaXplID0gdGFibGUtPnNpemU7CisgIHJldHVybiAxOworfQorCitzdGF0aWMgdm9pZAordW5sb2FkVGV4dFRhYmxlIChUYWJsZURhdGEgKmRhdGEpIHsKKyAgZGVzdHJveVRleHRUYWJsZShkYXRhLT5vYmplY3QpOworfQorCitzdGF0aWMgaW50Citsb2FkQXR0cmlidXRlc1RhYmxlIChjb25zdCBjaGFyICpwYXRoLCBUYWJsZURhdGEgKmRhdGEpIHsKKyAgQXR0cmlidXRlc1RhYmxlICp0YWJsZSA9IGNvbXBpbGVBdHRyaWJ1dGVzVGFibGUocGF0aCk7CisgIGlmICghdGFibGUpIHJldHVybiAwOworCisgIGRhdGEtPm9iamVjdCA9IHRhYmxlOworICBkYXRhLT5ieXRlcyA9IHRhYmxlLT5oZWFkZXIuYnl0ZXM7CisgIGRhdGEtPnNpemUgPSB0YWJsZS0+c2l6ZTsKKyAgcmV0dXJuIDE7Cit9CisKK3N0YXRpYyB2b2lkCit1bmxvYWRBdHRyaWJ1dGVzVGFibGUgKFRhYmxlRGF0YSAqZGF0YSkgeworICBkZXN0cm95QXR0cmlidXRlc1RhYmxlKGRhdGEtPm9iamVjdCk7Cit9CisKK3N0YXRpYyBpbnQKK2xvYWRDb250cmFjdGlvblRhYmxlIChjb25zdCBjaGFyICpwYXRoLCBUYWJsZURhdGEgKmRhdGEpIHsKKyAgQ29udHJhY3Rpb25UYWJsZSAqdGFibGUgPSBjb21waWxlQ29udHJhY3Rpb25UYWJsZShwYXRoKTsKKyAgaWYgKCF0YWJsZSkgcmV0dXJuIDA7CisKKyAgZGF0YS0+b2JqZWN0ID0gdGFibGU7CisgIGRhdGEtPmJ5dGVzID0gdGFibGUtPmRhdGEuaW50ZXJuYWwuaGVhZGVyLmJ5dGVzOworICBkYXRhLT5zaXplID0gdGFibGUtPmRhdGEuaW50ZXJuYWwuc2l6ZTsKKyAgcmV0dXJuIDE7Cit9CisKK3N0YXRpYyB2b2lkCit1bmxvYWRDb250cmFjdGlvblRhYmxlIChUYWJsZURhdGEgKmRhdGEpIHsKKyAgZGVzdHJveUNvbnRyYWN0aW9uVGFibGUoZGF0YS0+b2JqZWN0KTsKK30KKworc3RhdGljIGNvbnN0IFRhYmxlRW50cnkgdGFibGVFbnRyaWVzW10gPSB7CisgIHsKKyAgICAuZXh0ZW5zaW9uID0gVEVYVF9UQUJMRV9FWFRFTlNJT04sCisgICAgLmxvYWQgPSBsb2FkVGV4dFRhYmxlLAorICAgIC51bmxvYWQgPSB1bmxvYWRUZXh0VGFibGUKKyAgfQorICAsCisgIHsKKyAgICAuZXh0ZW5zaW9uID0gQVRUUklCVVRFU19UQUJMRV9FWFRFTlNJT04sCisgICAgLmxvYWQgPSBsb2FkQXR0cmlidXRlc1RhYmxlLAorICAgIC51bmxvYWQgPSB1bmxvYWRBdHRyaWJ1dGVzVGFibGUKKyAgfQorICAsCisgIHsKKyAgICAuZXh0ZW5zaW9uID0gQ09OVFJBQ1RJT05fVEFCTEVfRVhURU5TSU9OLAorICAgIC5sb2FkID0gbG9hZENvbnRyYWN0aW9uVGFibGUsCisgICAgLnVubG9hZCA9IHVubG9hZENvbnRyYWN0aW9uVGFibGUKKyAgfQorICAsCisgIHsKKyAgICAuZXh0ZW5zaW9uID0gTlVMTAorICB9Cit9OworCitzdGF0aWMgY29uc3QgVGFibGVFbnRyeSAqCitmaW5kVGFibGVFbnRyeSAoY29uc3QgY2hhciAqZXh0ZW5zaW9uKSB7CisgIGNvbnN0IFRhYmxlRW50cnkgKmVudHJ5ID0gdGFibGVFbnRyaWVzOworCisgIHdoaWxlIChlbnRyeS0+ZXh0ZW5zaW9uKSB7CisgICAgaWYgKHN0cmNtcChlbnRyeS0+ZXh0ZW5zaW9uLCBleHRlbnNpb24pID09IDApIHJldHVybiBlbnRyeTsKKyAgICBlbnRyeSArPSAxOworICB9CisKKyAgbG9nTWVzc2FnZShMT0dfRVJSLCAidW5yZWNvZ25pemVkIGZpbGUgZXh0ZW5zaW9uOiAlcyIsIGV4dGVuc2lvbik7CisgIHJldHVybiBOVUxMOworfQorCitpbnQKK2R1bXBCeXRlcyAoRklMRSAqc3RyZWFtLCBjb25zdCB1bnNpZ25lZCBjaGFyICpieXRlcywgc2l6ZV90IGNvdW50KSB7CisgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ5dGUgPSBieXRlczsKKyAgY29uc3QgdW5zaWduZWQgY2hhciAqZW5kID0gYnl0ZSArIGNvdW50OworICBpbnQgZmlyc3QgPSAxOworICBpbnQgZGlnaXRzOworCisgIGlmIChjb3VudCkgeworICAgIGNoYXIgYnVmZmVyWzBYMTBdOworICAgIGRpZ2l0cyA9IHNucHJpbnRmKGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlciksICIlWCIsICh1bnNpZ25lZCBpbnQpY291bnQtMSk7CisgIH0gZWxzZSB7CisgICAgZGlnaXRzID0gMTsKKyAgfQorCisgIHdoaWxlIChieXRlIDwgZW5kKSB7CisgICAgd2hpbGUgKCEqYnl0ZSAmJiAoYnl0ZSA8IChlbmQgLSAxKSkpIGJ5dGUgKz0gMTsKKworICAgIHsKKyAgICAgIHVuc2lnbmVkIGludCBjb3VudGVyID0gMDsKKyAgICAgIHVuc2lnbmVkIGludCBtYXhpbXVtID0gODsKKworICAgICAgaWYgKChieXRlICsgbWF4aW11bSkgIT0gZW5kKSB7CisgICAgICAgIHdoaWxlIChtYXhpbXVtID4gMSkgeworICAgICAgICAgIGlmIChieXRlW21heGltdW0tMV0pIGJyZWFrOworICAgICAgICAgIG1heGltdW0gLT0gMTsKKyAgICAgICAgfQorICAgICAgfQorCisgICAgICB3aGlsZSAoYnl0ZSA8IGVuZCkgeworICAgICAgICBpZiAoZmlyc3QpIHsKKyAgICAgICAgICBmaXJzdCA9IDA7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgZnByaW50ZihzdHJlYW0sICIsIik7CisgICAgICAgICAgaWYgKGZlcnJvcihzdHJlYW0pKSBnb3RvIG91dHB1dEVycm9yOworCisgICAgICAgICAgaWYgKCFjb3VudGVyKSB7CisgICAgICAgICAgICBmcHJpbnRmKHN0cmVhbSwgIlxuIik7CisgICAgICAgICAgICBpZiAoZmVycm9yKHN0cmVhbSkpIGdvdG8gb3V0cHV0RXJyb3I7CisgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYgKCFjb3VudGVyKSB7CisgICAgICAgICAgZnByaW50ZihzdHJlYW0sICJbMFglMCpYXSA9IiwgZGlnaXRzLCAodW5zaWduZWQgaW50KShieXRlLWJ5dGVzKSk7CisgICAgICAgICAgaWYgKGZlcnJvcihzdHJlYW0pKSBnb3RvIG91dHB1dEVycm9yOworICAgICAgICB9CisKKyAgICAgICAgZnByaW50ZihzdHJlYW0sICIgMFglMDJYIiwgKmJ5dGUrKyk7CisgICAgICAgIGlmIChmZXJyb3Ioc3Rkb3V0KSkgZ290byBvdXRwdXRFcnJvcjsKKworICAgICAgICBpZiAoKytjb3VudGVyID09IG1heGltdW0pIGJyZWFrOworICAgICAgfQorICAgIH0KKyAgfQorCisgIGlmICghZmlyc3QpIHsKKyAgICBmcHJpbnRmKHN0cmVhbSwgIlxuIik7CisgICAgaWYgKGZlcnJvcihzdHJlYW0pKSBnb3RvIG91dHB1dEVycm9yOworICB9CisKKyAgcmV0dXJuIDE7CisKK291dHB1dEVycm9yOgorICBsb2dNZXNzYWdlKExPR19FUlIsICJ0YWJsZSB3cml0ZSBlcnJvcjogJXMiLCBzdHJlcnJvcihlcnJubykpOworICByZXR1cm4gMDsKK30KKworaW50CittYWluIChpbnQgYXJnYywgY2hhciAqYXJndltdKSB7CisgIFByb2dyYW1FeGl0U3RhdHVzIGV4aXRTdGF0dXM7CisgIGNoYXIgKnBhdGg7CisKKyAgeworICAgIGNvbnN0IENvbW1hbmRMaW5lRGVzY3JpcHRvciBkZXNjcmlwdG9yID0geworICAgICAgLm9wdGlvbnMgPSAmcHJvZ3JhbU9wdGlvbnMsCisgICAgICAuYXBwbGljYXRpb25OYW1lID0gInRibDJoZXgiLAorCisgICAgICAudXNhZ2UgPSB7CisgICAgICAgIC5wdXJwb3NlID0gc3RydGV4dCgiV3JpdGUgdGhlIGhleGFkZWNpbWFsIGFycmF5IHJlcHJlc2VudGF0aW9uIG9mIGEgY29tcGlsZWQgdGFibGUuIiksCisgICAgICAgIC5wYXJhbWV0ZXJzID0gInRhYmxlLWZpbGUiLAorICAgICAgfQorICAgIH07CisgICAgUFJPQ0VTU19PUFRJT05TKGRlc2NyaXB0b3IsIGFyZ2MsIGFyZ3YpOworICB9CisKKyAgaWYgKGFyZ2MgPT0gMCkgeworICAgIGxvZ01lc3NhZ2UoTE9HX0VSUiwgIm1pc3NpbmcgdGFibGUgZmlsZS4iKTsKKyAgICByZXR1cm4gUFJPR19FWElUX1NZTlRBWDsKKyAgfQorICBwYXRoID0gKmFyZ3YrKywgYXJnYy0tOworCisgIHsKKyAgICBjb25zdCBjaGFyICpleHRlbnNpb24gPSBsb2NhdGVQYXRoRXh0ZW5zaW9uKHBhdGgpOworCisgICAgaWYgKGV4dGVuc2lvbikgeworICAgICAgY29uc3QgVGFibGVFbnRyeSAqZW50cnkgPSBmaW5kVGFibGVFbnRyeShleHRlbnNpb24pOworCisgICAgICBpZiAoZW50cnkpIHsKKyAgICAgICAgVGFibGVEYXRhIGRhdGE7CisgICAgICAgIGlmIChlbnRyeS0+bG9hZChwYXRoLCAmZGF0YSkpIHsKKyAgICAgICAgICBpZiAoZHVtcEJ5dGVzKHN0ZG91dCwgZGF0YS5ieXRlcywgZGF0YS5zaXplKSkgeworICAgICAgICAgICAgZXhpdFN0YXR1cyA9IFBST0dfRVhJVF9TVUNDRVNTOworICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBleGl0U3RhdHVzID0gUFJPR19FWElUX0ZBVEFMOworICAgICAgICAgIH0KKworICAgICAgICAgIGVudHJ5LT51bmxvYWQoJmRhdGEpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgIGV4aXRTdGF0dXMgPSBQUk9HX0VYSVRfRkFUQUw7CisgICAgICAgIH0KKyAgICAgIH0gZWxzZSB7CisgICAgICAgIGV4aXRTdGF0dXMgPSBQUk9HX0VYSVRfU0VNQU5USUM7CisgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgIGxvZ01lc3NhZ2UoTE9HX0VSUiwgIm5vIGZpbGUgZXh0ZW5zaW9uIik7CisgICAgICBleGl0U3RhdHVzID0gUFJPR19FWElUX1NFTUFOVElDOworICAgIH0KKyAgfQorCisgIHJldHVybiBleGl0U3RhdHVzOworfQorCisjaW5jbHVkZSAiY3RiX2ludGVybmFsLmgiCisKK2NvbnN0IHVuc2lnbmVkIGNoYXIgKgorZ2V0SW50ZXJuYWxDb250cmFjdGlvblRhYmxlQnl0ZXMgKHZvaWQpIHsKKyAgcmV0dXJuIE5VTEw7Cit9CisKK2NvbnN0IENvbnRyYWN0aW9uVGFibGVUcmFuc2xhdGlvbk1ldGhvZHMgKgorZ2V0Q29udHJhY3Rpb25UYWJsZVRyYW5zbGF0aW9uTWV0aG9kc19uYXRpdmUgKHZvaWQpIHsKKyAgcmV0dXJuIE5VTEw7Cit9CisKK2NvbnN0IENvbnRyYWN0aW9uVGFibGVUcmFuc2xhdGlvbk1ldGhvZHMgKgorZ2V0Q29udHJhY3Rpb25UYWJsZVRyYW5zbGF0aW9uTWV0aG9kc19leHRlcm5hbCAodm9pZCkgeworICByZXR1cm4gTlVMTDsKK30KKworY29uc3QgQ29udHJhY3Rpb25UYWJsZVRyYW5zbGF0aW9uTWV0aG9kcyAqCitnZXRDb250cmFjdGlvblRhYmxlVHJhbnNsYXRpb25NZXRob2RzX2xvdWlzICh2b2lkKSB7CisgIHJldHVybiBOVUxMOworfQpkaWZmIC0tZ2l0IGEvUHJvZ3JhbXMvdGhyZWFkLmMgYi9Qcm9ncmFtcy90aHJlYWQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lOGYyN2RiCi0tLSAvZGV2L251bGwKKysrIGIvUHJvZ3JhbXMvdGhyZWFkLmMKQEAgLTAsMCArMSwzNTkgQEAKKy8qCisgKiBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorICogICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorICoKKyAqIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorICoKKyAqIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyAqLworCisjaW5jbHVkZSAicHJvbG9ndWUuaCIKKworI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisKKyNpbmNsdWRlICJsb2cuaCIKKyNpbmNsdWRlICJzdHJmbXQuaCIKKyNpbmNsdWRlICJ0aHJlYWQuaCIKKyNpbmNsdWRlICJhc3luY19zaWduYWwuaCIKKyNpbmNsdWRlICJhc3luY19ldmVudC5oIgorI2luY2x1ZGUgImFzeW5jX3dhaXQuaCIKKworI3VuZGVmIEhBVkVfVEhSRUFEX05BTUVTCisKKyNpZmRlZiBHT1RfUFRIUkVBRFMKK3R5cGVkZWYgc3RydWN0IHsKKyAgVGhyZWFkRnVuY3Rpb24gKmZ1bmN0aW9uOworICB2b2lkICphcmd1bWVudDsKKyAgY2hhciBuYW1lW107Cit9IFJ1blRocmVhZEFyZ3VtZW50OworCitzdGF0aWMgdm9pZCAqCitydW5UaHJlYWQgKHZvaWQgKmFyZ3VtZW50KSB7CisgIFJ1blRocmVhZEFyZ3VtZW50ICpydW4gPSBhcmd1bWVudDsKKworICBzZXRUaHJlYWROYW1lKHJ1bi0+bmFtZSk7CisgIGxvZ01lc3NhZ2UoTE9HX0NBVEVHT1JZKEFTWU5DX0VWRU5UUyksICJ0aHJlYWQgc3RhcnRpbmc6ICVzIiwgcnVuLT5uYW1lKTsKKyAgdm9pZCAqcmVzdWx0ID0gcnVuLT5mdW5jdGlvbihydW4tPmFyZ3VtZW50KTsKKyAgbG9nTWVzc2FnZShMT0dfQ0FURUdPUlkoQVNZTkNfRVZFTlRTKSwgInRocmVhZCBmaW5pc2hlZDogJXMiLCBydW4tPm5hbWUpOworCisgIGZyZWUocnVuKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKwordHlwZWRlZiBzdHJ1Y3QgeworICBjb25zdCBjaGFyICpjb25zdCBuYW1lOworICBwdGhyZWFkX3QgKmNvbnN0IHRocmVhZDsKKyAgY29uc3QgcHRocmVhZF9hdHRyX3QgKmNvbnN0IGF0dHJpYnV0ZXM7CisgIFRocmVhZEZ1bmN0aW9uICpjb25zdCBmdW5jdGlvbjsKKyAgdm9pZCAqY29uc3QgYXJndW1lbnQ7CisKKyAgaW50IGVycm9yOworfSBDcmVhdGVUaHJlYWRQYXJhbWV0ZXJzOworCitzdGF0aWMgaW50CitjcmVhdGVBY3R1YWxUaHJlYWQgKHZvaWQgKnBhcmFtZXRlcnMpIHsKKyAgQ3JlYXRlVGhyZWFkUGFyYW1ldGVycyAqY3JlYXRlID0gcGFyYW1ldGVyczsKKyAgUnVuVGhyZWFkQXJndW1lbnQgKnJ1bjsKKworICBpZiAoKHJ1biA9IG1hbGxvYyhzaXplb2YoKnJ1bikgKyBzdHJsZW4oY3JlYXRlLT5uYW1lKSArIDEpKSkgeworICAgIG1lbXNldChydW4sIDAsIHNpemVvZigqcnVuKSk7CisgICAgcnVuLT5mdW5jdGlvbiA9IGNyZWF0ZS0+ZnVuY3Rpb247CisgICAgcnVuLT5hcmd1bWVudCA9IGNyZWF0ZS0+YXJndW1lbnQ7CisgICAgc3RyY3B5KHJ1bi0+bmFtZSwgY3JlYXRlLT5uYW1lKTsKKworICAgIGxvZ01lc3NhZ2UoTE9HX0NBVEVHT1JZKEFTWU5DX0VWRU5UUyksICJjcmVhdGluZyB0aHJlYWQ6ICVzIiwgY3JlYXRlLT5uYW1lKTsKKyAgICBjcmVhdGUtPmVycm9yID0gcHRocmVhZF9jcmVhdGUoY3JlYXRlLT50aHJlYWQsIGNyZWF0ZS0+YXR0cmlidXRlcywgcnVuVGhyZWFkLCBydW4pOworICAgIGlmICghY3JlYXRlLT5lcnJvcikgcmV0dXJuIDE7CisgICAgbG9nTWVzc2FnZShMT0dfQ0FURUdPUlkoQVNZTkNfRVZFTlRTKSwgInRocmVhZCBub3QgY3JlYXRlZDogJXM6ICVzIiwgY3JlYXRlLT5uYW1lLCBzdHJlcnJvcihjcmVhdGUtPmVycm9yKSk7CisKKyAgICBmcmVlKHJ1bik7CisgIH0gZWxzZSB7CisgICAgY3JlYXRlLT5lcnJvciA9IGVycm5vOworICAgIGxvZ01hbGxvY0Vycm9yKCk7CisgIH0KKworICByZXR1cm4gMDsKK30KKworI2lmZGVmIEFTWU5DX0NBTl9CTE9DS19TSUdOQUxTCitBU1lOQ19XSVRIX1NJR05BTFNfQkxPQ0tFRF9GVU5DVElPTihjcmVhdGVTaWduYWxTYWZlVGhyZWFkKSB7CisgIHN0YXRpYyBjb25zdCBpbnQgc2lnbmFsc1tdID0geworI2lmZGVmIFNJR0lOVAorICAgIFNJR0lOVCwKKyNlbmRpZiAvKiBTSUdJTlQgKi8KKworI2lmZGVmIFNJR1RFUk0KKyAgICBTSUdURVJNLAorI2VuZGlmIC8qIFNJR1RFUk0gKi8KKworI2lmZGVmIFNJR0NITEQKKyAgICBTSUdDSExELAorI2VuZGlmIC8qIFNJR0NITEQgKi8KKworICAgIDAKKyAgfTsKKworICBDcmVhdGVUaHJlYWRQYXJhbWV0ZXJzICpjcmVhdGUgPSBkYXRhOworICBjb25zdCBpbnQgKnNpZ25hbCA9IHNpZ25hbHM7CisKKyAgd2hpbGUgKCpzaWduYWwpIHsKKyAgICBhc3luY1NldFNpZ25hbEJsb2NrZWQoKnNpZ25hbCwgMSk7CisgICAgc2lnbmFsICs9IDE7CisgIH0KKworICBjcmVhdGVBY3R1YWxUaHJlYWQoY3JlYXRlKTsKK30KKyNlbmRpZiAvKiBBU1lOQ19DQU5fQkxPQ0tfU0lHTkFMUyAqLworCitpbnQKK2NyZWF0ZVRocmVhZCAoCisgIGNvbnN0IGNoYXIgKm5hbWUsCisgIHB0aHJlYWRfdCAqdGhyZWFkLCBjb25zdCBwdGhyZWFkX2F0dHJfdCAqYXR0cmlidXRlcywKKyAgVGhyZWFkRnVuY3Rpb24gKmZ1bmN0aW9uLCB2b2lkICphcmd1bWVudAorKSB7CisgIENyZWF0ZVRocmVhZFBhcmFtZXRlcnMgY3JlYXRlID0geworICAgIC5uYW1lID0gbmFtZSwKKyAgICAudGhyZWFkID0gdGhyZWFkLAorICAgIC5hdHRyaWJ1dGVzID0gYXR0cmlidXRlcywKKyAgICAuZnVuY3Rpb24gPSBmdW5jdGlvbiwKKyAgICAuYXJndW1lbnQgPSBhcmd1bWVudAorICB9OworCisjaWZkZWYgQVNZTkNfQ0FOX0JMT0NLX1NJR05BTFMKKyAgYXN5bmNXaXRoT2J0YWluYWJsZVNpZ25hbHNCbG9ja2VkKGNyZWF0ZVNpZ25hbFNhZmVUaHJlYWQsICZjcmVhdGUpOworI2Vsc2UgLyogQVNZTkNfQ0FOX0JMT0NLX1NJR05BTFMgKi8KKyAgY3JlYXRlQWN0dWFsVGhyZWFkKCZjcmVhdGUpOworI2VuZGlmIC8qIEFTWU5DX0NBTl9CTE9DS19TSUdOQUxTICovCisKKyAgcmV0dXJuIGNyZWF0ZS5lcnJvcjsKK30KKwordHlwZWRlZiBzdHJ1Y3QgeworICBUaHJlYWRGdW5jdGlvbiAqY29uc3QgZnVuY3Rpb247CisgIHZvaWQgKmNvbnN0IGFyZ3VtZW50OworCisgIEFzeW5jRXZlbnQgKmV2ZW50OworICB1bnNpZ25lZCByZXR1cm5lZDoxOworfSBDYWxsVGhyZWFkRnVuY3Rpb25EYXRhOworCitUSFJFQURfRlVOQ1RJT04ocnVuVGhyZWFkRnVuY3Rpb24pIHsKKyAgQ2FsbFRocmVhZEZ1bmN0aW9uRGF0YSAqY3RmID0gYXJndW1lbnQ7CisgIHZvaWQgKnJlc3VsdCA9IGN0Zi0+ZnVuY3Rpb24/IGN0Zi0+ZnVuY3Rpb24oY3RmLT5hcmd1bWVudCk6IE5VTEw7CisKKyAgYXN5bmNTaWduYWxFdmVudChjdGYtPmV2ZW50LCBOVUxMKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworQVNZTkNfRVZFTlRfQ0FMTEJBQ0soaGFuZGxlVGhyZWFkRnVuY3Rpb25SZXR1cm5lZCkgeworICBDYWxsVGhyZWFkRnVuY3Rpb25EYXRhICpjdGYgPSBwYXJhbWV0ZXJzLT5ldmVudERhdGE7CisKKyAgY3RmLT5yZXR1cm5lZCA9IDE7Cit9CisKK0FTWU5DX0NPTkRJVElPTl9URVNURVIodGVzdFRocmVhZEZ1bmN0aW9uUmV0dXJuZWQpIHsKKyAgQ2FsbFRocmVhZEZ1bmN0aW9uRGF0YSAqY3RmID0gZGF0YTsKKworICByZXR1cm4gY3RmLT5yZXR1cm5lZDsKK30KKworaW50CitjYWxsVGhyZWFkRnVuY3Rpb24gKAorICBjb25zdCBjaGFyICpuYW1lLCBUaHJlYWRGdW5jdGlvbiAqZnVuY3Rpb24sCisgIHZvaWQgKmFyZ3VtZW50LCB2b2lkICoqcmVzdWx0CispIHsKKyAgaW50IGNhbGxlZCA9IDA7CisKKyAgQ2FsbFRocmVhZEZ1bmN0aW9uRGF0YSBjdGYgPSB7CisgICAgLmZ1bmN0aW9uID0gZnVuY3Rpb24sCisgICAgLmFyZ3VtZW50ID0gYXJndW1lbnQsCisKKyAgICAucmV0dXJuZWQgPSAwCisgIH07CisKKyAgaWYgKChjdGYuZXZlbnQgPSBhc3luY05ld0V2ZW50KGhhbmRsZVRocmVhZEZ1bmN0aW9uUmV0dXJuZWQsICZjdGYpKSkgeworICAgIHB0aHJlYWRfdCB0aHJlYWQ7CisgICAgaW50IGVycm9yID0gY3JlYXRlVGhyZWFkKG5hbWUsICZ0aHJlYWQsIE5VTEwsIHJ1blRocmVhZEZ1bmN0aW9uLCAmY3RmKTsKKworICAgIGlmICghZXJyb3IpIHsKKyAgICAgIGFzeW5jV2FpdEZvcih0ZXN0VGhyZWFkRnVuY3Rpb25SZXR1cm5lZCwgJmN0Zik7CisKKyAgICAgIHsKKyAgICAgICAgdm9pZCAqcjsKKworICAgICAgICBpZiAoIXJlc3VsdCkgcmVzdWx0ID0gJnI7CisgICAgICAgIHB0aHJlYWRfam9pbih0aHJlYWQsIHJlc3VsdCk7CisgICAgICB9CisKKyAgICAgIGNhbGxlZCA9IDE7CisgICAgfSBlbHNlIHsKKyAgICAgIGVycm5vID0gZXJyb3I7CisgICAgfQorCisgICAgYXN5bmNEaXNjYXJkRXZlbnQoY3RmLmV2ZW50KTsKKyAgfQorCisgIHJldHVybiBjYWxsZWQ7Cit9CisKK2ludAorbG9ja011dGV4IChwdGhyZWFkX211dGV4X3QgKm11dGV4KSB7CisgIGludCByZXN1bHQgPSBwdGhyZWFkX211dGV4X2xvY2sobXV0ZXgpOworCisgIGxvZ1N5bWJvbChMT0dfQ0FURUdPUlkoQVNZTkNfRVZFTlRTKSwgbXV0ZXgsICJtdXRleCBsb2NrIik7CisgIHJldHVybiByZXN1bHQ7Cit9CisKK2ludAordW5sb2NrTXV0ZXggKHB0aHJlYWRfbXV0ZXhfdCAqbXV0ZXgpIHsKKyAgbG9nU3ltYm9sKExPR19DQVRFR09SWShBU1lOQ19FVkVOVFMpLCBtdXRleCwgIm11dGV4IHVubG9jayIpOworICByZXR1cm4gcHRocmVhZF9tdXRleF91bmxvY2sobXV0ZXgpOworfQorCisjaWYgZGVmaW5lZChIQVZFX1BUSFJFQURfR0VUTkFNRV9OUCkgJiYgZGVmaW5lZChfX0dMSUJDX18pCisjZGVmaW5lIEhBVkVfVEhSRUFEX05BTUVTCisKK3NpemVfdAorZm9ybWF0VGhyZWFkTmFtZSAoY2hhciAqYnVmZmVyLCBzaXplX3Qgc2l6ZSkgeworICBpbnQgZXJyb3IgPSBwdGhyZWFkX2dldG5hbWVfbnAocHRocmVhZF9zZWxmKCksIGJ1ZmZlciwgc2l6ZSk7CisKKyAgcmV0dXJuIGVycm9yPyAwOiBzdHJsZW4oYnVmZmVyKTsKK30KKwordm9pZAorc2V0VGhyZWFkTmFtZSAoY29uc3QgY2hhciAqbmFtZSkgeworICBwdGhyZWFkX3NldG5hbWVfbnAocHRocmVhZF9zZWxmKCksIG5hbWUpOworfQorCisjZWxpZiBkZWZpbmVkKEhBVkVfUFRIUkVBRF9HRVROQU1FX05QKSAmJiBkZWZpbmVkKF9fQVBQTEVfXykKKyNkZWZpbmUgSEFWRV9USFJFQURfTkFNRVMKKworc2l6ZV90Citmb3JtYXRUaHJlYWROYW1lIChjaGFyICpidWZmZXIsIHNpemVfdCBzaXplKSB7CisgIHsKKyAgICBpbnQgZXJyb3IgPSBwdGhyZWFkX2dldG5hbWVfbnAocHRocmVhZF9zZWxmKCksIGJ1ZmZlciwgc2l6ZSk7CisKKyAgICBpZiAoZXJyb3IpIHJldHVybiAwOworICAgIGlmICgqYnVmZmVyKSByZXR1cm4gc3RybGVuKGJ1ZmZlcik7CisgIH0KKworICBpZiAocHRocmVhZF9tYWluX25wKCkpIHsKKyAgICBzaXplX3QgbGVuZ3RoOworCisgICAgU1RSX0JFR0lOKGJ1ZmZlciwgc2l6ZSk7CisgICAgU1RSX1BSSU5URigibWFpbiIpOworICAgIGxlbmd0aCA9IFNUUl9MRU5HVEg7CisgICAgU1RSX0VORDsKKworICAgIHJldHVybiBsZW5ndGg7CisgIH0KKworICByZXR1cm4gMDsKK30KKwordm9pZAorc2V0VGhyZWFkTmFtZSAoY29uc3QgY2hhciAqbmFtZSkgeworICBwdGhyZWFkX3NldG5hbWVfbnAobmFtZSk7Cit9CisKKyNlbmRpZiAvKiB0aHJlYWQgbmFtZXMgKi8KKyNlbmRpZiAvKiBHT1RfUFRIUkVBRFMgKi8KKworI2lmbmRlZiBIQVZFX1RIUkVBRF9OQU1FUworc2l6ZV90Citmb3JtYXRUaHJlYWROYW1lIChjaGFyICpidWZmZXIsIHNpemVfdCBzaXplKSB7CisgIHJldHVybiAwOworfQorCit2b2lkCitzZXRUaHJlYWROYW1lIChjb25zdCBjaGFyICpuYW1lKSB7Cit9CisjZW5kaWYgLyogSEFWRV9USFJFQURfTkFNRVMgKi8KKworI2lmIGRlZmluZWQoUFRIUkVBRF9NVVRFWF9JTklUSUFMSVpFUikKK3N0YXRpYyB2b2lkCitjcmVhdGVUaHJlYWRTcGVjaWZpY0RhdGFLZXkgKFRocmVhZFNwZWNpZmljRGF0YUNvbnRyb2wgKmN0bCkgeworICBpbnQgZXJyb3I7CisKKyAgcHRocmVhZF9tdXRleF9sb2NrKCZjdGwtPm11dGV4KTsKKyAgICBpZiAoIWN0bC0+a2V5LmNyZWF0ZWQpIHsKKyAgICAgIGVycm9yID0gcHRocmVhZF9rZXlfY3JlYXRlKCZjdGwtPmtleS52YWx1ZSwgY3RsLT5kZXN0cm95KTsKKworICAgICAgaWYgKCFlcnJvcikgeworICAgICAgICBjdGwtPmtleS5jcmVhdGVkID0gMTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIGxvZ0FjdGlvbkVycm9yKGVycm9yLCAicHRocmVhZF9rZXlfY3JlYXRlIik7CisgICAgICB9CisgICAgfQorICBwdGhyZWFkX211dGV4X3VubG9jaygmY3RsLT5tdXRleCk7Cit9CisKKyNpZmRlZiBBU1lOQ19DQU5fQkxPQ0tfU0lHTkFMUworQVNZTkNfV0lUSF9TSUdOQUxTX0JMT0NLRURfRlVOQ1RJT04oY3JlYXRlVGhyZWFkU3BlY2lmaWNEYXRhS2V5V2l0aFNpZ25hbHNCbG9ja2VkKSB7CisgIFRocmVhZFNwZWNpZmljRGF0YUNvbnRyb2wgKmN0bCA9IGRhdGE7CisKKyAgY3JlYXRlVGhyZWFkU3BlY2lmaWNEYXRhS2V5KGN0bCk7Cit9CisjZW5kaWYgLyogQVNZTkNfQ0FOX0JMT0NLX1NJR05BTFMgKi8KKwordm9pZCAqCitnZXRUaHJlYWRTcGVjaWZpY0RhdGEgKFRocmVhZFNwZWNpZmljRGF0YUNvbnRyb2wgKmN0bCkgeworICBpbnQgZXJyb3I7CisKKyNpZmRlZiBBU1lOQ19DQU5fQkxPQ0tfU0lHTkFMUworICBhc3luY1dpdGhBbGxTaWduYWxzQmxvY2tlZChjcmVhdGVUaHJlYWRTcGVjaWZpY0RhdGFLZXlXaXRoU2lnbmFsc0Jsb2NrZWQsIGN0bCk7CisjZWxzZSAvKiBBU1lOQ19DQU5fQkxPQ0tfU0lHTkFMUyAqLworICBjcmVhdGVUaHJlYWRTcGVjaWZpY0RhdGFLZXkoY3RsKTsKKyNlbmRpZiAvKiBBU1lOQ19DQU5fQkxPQ0tfU0lHTkFMUyAqLworCisgIGlmIChjdGwtPmtleS5jcmVhdGVkKSB7CisgICAgdm9pZCAqdHNkID0gcHRocmVhZF9nZXRzcGVjaWZpYyhjdGwtPmtleS52YWx1ZSk7CisgICAgaWYgKHRzZCkgcmV0dXJuIHRzZDsKKworICAgIGlmICgodHNkID0gY3RsLT5uZXcoKSkpIHsKKyAgICAgIGlmICghKGVycm9yID0gcHRocmVhZF9zZXRzcGVjaWZpYyhjdGwtPmtleS52YWx1ZSwgdHNkKSkpIHsKKyAgICAgICAgcmV0dXJuIHRzZDsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIGxvZ0FjdGlvbkVycm9yKGVycm9yLCAicHRocmVhZF9zZXRzcGVjaWZpYyIpOworICAgICAgfQorCisgICAgICBjdGwtPmRlc3Ryb3kodHNkKTsKKyAgICB9CisgIH0KKworICByZXR1cm4gTlVMTDsKK30KKworI2Vsc2UgLyogdGhyZWFkIHNwZWNpZmljIGRhdGEgKi8KKyNpbmNsdWRlICJwcm9ncmFtLmgiCisKK3N0YXRpYyB2b2lkCitleGl0VGhyZWFkU3BlY2lmaWNEYXRhICh2b2lkICpkYXRhKSB7CisgIFRocmVhZFNwZWNpZmljRGF0YUNvbnRyb2wgKmN0bCA9IGRhdGE7CisKKyAgaWYgKGN0bC0+ZGF0YSkgeworICAgIGN0bC0+ZGVzdHJveShjdGwtPmRhdGEpOworICAgIGN0bC0+ZGF0YSA9IE5VTEw7CisgIH0KK30KKwordm9pZCAqCitnZXRUaHJlYWRTcGVjaWZpY0RhdGEgKFRocmVhZFNwZWNpZmljRGF0YUNvbnRyb2wgKmN0bCkgeworICBpZiAoIWN0bC0+ZGF0YSkgeworICAgIGlmICgoY3RsLT5kYXRhID0gY3RsLT5uZXcoKSkpIHsKKyAgICAgIG9uUHJvZ3JhbUV4aXQoInRocmVhZC1zcGVjaWZpYy1kYXRhIiwgZXhpdFRocmVhZFNwZWNpZmljRGF0YSwgY3RsKTsKKyAgICB9CisgIH0KKworICByZXR1cm4gY3RsLT5kYXRhOworfQorI2VuZGlmIC8qIHRocmVhZCBzcGVjaWZpYyBkYXRhICovCmRpZmYgLS1naXQgYS9Qcm9ncmFtcy90aW1pbmcuYyBiL1Byb2dyYW1zL3RpbWluZy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY0ODg1MjQKLS0tIC9kZXYvbnVsbAorKysgYi9Qcm9ncmFtcy90aW1pbmcuYwpAQCAtMCwwICsxLDQzNSBAQAorLyoKKyAqIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisgKiAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisgKgorICogQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKKyNpbmNsdWRlICJwcm9sb2d1ZS5oIgorCisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDx0aW1lLmg+CisKKyNpZiBkZWZpbmVkKEhBVkVfR0VUVElNRU9GREFZKSB8fCBkZWZpbmVkKEhBVkVfU0VUVElNRU9GREFZKQorI2luY2x1ZGUgPHN5cy90aW1lLmg+CisjZW5kaWYgLyogSEFWRV8oR0VUfFNFVClUSU1FT0ZEQVkgKi8KKworI2lmZGVmIEhBVkVfU1lTX1BPTExfSAorI2luY2x1ZGUgPHBvbGwuaD4KKyNlbmRpZiAvKiBIQVZFX1NZU19QT0xMX0ggKi8KKworI2lmZGVmIEhBVkVfU0VMRUNUCisjaWZkZWYgSEFWRV9TWVNfU0VMRUNUX0gKKyNpbmNsdWRlIDxzeXMvc2VsZWN0Lmg+CisjZWxzZSAvKiBIQVZFX1NZU19TRUxFQ1RfSCAqLworI2luY2x1ZGUgPHN5cy90aW1lLmg+CisjZW5kaWYgLyogSEFWRV9TWVNfU0VMRUNUX0ggKi8KKyNlbmRpZiAvKiBIQVZFX1NFTEVDVCAqLworCisjaW5jbHVkZSAibG9nLmgiCisjaW5jbHVkZSAidGltaW5nLmgiCisKKyNpZmRlZiBfX01TRE9TX18KKyNpbmNsdWRlICJzeXN0ZW1fbXNkb3MuaCIKKyNlbmRpZiAvKiBfX01TRE9TX18gKi8KKworI2lmICFIQVZFX0RFQ0xfTE9DQUxUSU1FX1IKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHRtICoKK2xvY2FsdGltZV9yIChjb25zdCB0aW1lX3QgKnRpbWVwLCBzdHJ1Y3QgdG0gKnJlc3VsdCkgeworICAqcmVzdWx0ID0gKmxvY2FsdGltZSh0aW1lcCk7CisgIHJldHVybiByZXN1bHQ7Cit9CisjZW5kaWYgLyogSEFWRV9ERUNMX0xPQ0FMVElNRV9SICovCisKK3ZvaWQKK2dldEN1cnJlbnRUaW1lIChUaW1lVmFsdWUgKm5vdykgeworICBub3ctPnNlY29uZHMgPSAwOworICBub3ctPm5hbm9zZWNvbmRzID0gMDsKKworI2lmIGRlZmluZWQoR1JVQl9SVU5USU1FKQorICBzdGF0aWMgdGltZV90IGJhc2VTZWNvbmRzID0gMDsKKyAgc3RhdGljIHVpbnQ2NF90IGJhc2VNaWxsaXNlY29uZHM7CisKKyAgaWYgKCFiYXNlU2Vjb25kcykgeworICAgIGJhc2VTZWNvbmRzID0gdGltZShOVUxMKTsKKyAgICBiYXNlTWlsbGlzZWNvbmRzID0gZ3J1Yl9nZXRfdGltZV9tcygpOworICB9CisKKyAgeworICAgIHVpbnQ2NF90IG1pbGxpc2Vjb25kcyA9IGdydWJfZ2V0X3RpbWVfbXMoKSAtIGJhc2VNaWxsaXNlY29uZHM7CisKKyAgICBub3ctPnNlY29uZHMgPSBiYXNlU2Vjb25kcyArIChtaWxsaXNlY29uZHMgLyBNU0VDU19QRVJfU0VDKTsKKyAgICBub3ctPm5hbm9zZWNvbmRzID0gKG1pbGxpc2Vjb25kcyAlIE1TRUNTX1BFUl9TRUMpICogTlNFQ1NfUEVSX01TRUM7CisgIH0KKworI2VsaWYgZGVmaW5lZChIQVZFX0NMT0NLX0dFVFRJTUUpICYmIGRlZmluZWQoQ0xPQ0tfUkVBTFRJTUUpICYmICFkZWZpbmVkKF9fTUlOR1czMl9fKQorICBzdHJ1Y3QgdGltZXNwZWMgdHM7CisKKyAgaWYgKGNsb2NrX2dldHRpbWUoQ0xPQ0tfUkVBTFRJTUUsICZ0cykgIT0gLTEpIHsKKyAgICBub3ctPnNlY29uZHMgPSB0cy50dl9zZWM7CisgICAgbm93LT5uYW5vc2Vjb25kcyA9IHRzLnR2X25zZWM7CisgIH0gZWxzZSB7CisgIC8vbG9nU3lzdGVtRXJyb3IoImNsb2NrX2dldHRpbWUiKTsKKyAgfQorCisjZWxpZiBkZWZpbmVkKEhBVkVfR0VUVElNRU9GREFZKQorICBzdHJ1Y3QgdGltZXZhbCB0djsKKworICAjcHJhZ21hIEdDQyBkaWFnbm9zdGljIHB1c2gKKyAgI3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBpZ25vcmVkICItV2RlcHJlY2F0ZWQtZGVjbGFyYXRpb25zIgorICBpbnQgcmVzdWx0ID0gZ2V0dGltZW9mZGF5KCZ0diwgTlVMTCk7CisgICNwcmFnbWEgR0NDIGRpYWdub3N0aWMgcG9wCisKKyAgaWYgKHJlc3VsdCAhPSAtMSkgeworICAgIG5vdy0+c2Vjb25kcyA9IHR2LnR2X3NlYzsKKyAgICBub3ctPm5hbm9zZWNvbmRzID0gdHYudHZfdXNlYyAqIE5TRUNTX1BFUl9VU0VDOworICB9IGVsc2UgeworICAvL2xvZ1N5c3RlbUVycm9yKCJnZXR0aW1lb2ZkYXkiKTsKKyAgfQorCisjZWxpZiBkZWZpbmVkKEhBVkVfVElNRSkKKyAgbm93LT5zZWNvbmRzID0gdGltZShOVUxMKTsKKworI2Vsc2UgLyogZ2V0IGN1cnJlbnQgdGltZSAqLworI3dhcm5pbmcgZ2V0IGN1cnJlbnQgdGltZSBub3Qgc3VwcG9ydGVkIG9uIHRoaXMgcGxhdGZvcm0KKyNlbmRpZiAvKiBnZXQgY3VycmVudCB0aW1lICovCit9CisKK3ZvaWQKK3NldEN1cnJlbnRUaW1lIChjb25zdCBUaW1lVmFsdWUgKm5vdykgeworI2lmIGRlZmluZWQoSEFWRV9DTE9DS19TRVRUSU1FKSAmJiBkZWZpbmVkKENMT0NLX1JFQUxUSU1FKQorICBjb25zdCBzdHJ1Y3QgdGltZXNwZWMgdHMgPSB7CisgICAgLnR2X3NlYyA9IG5vdy0+c2Vjb25kcywKKyAgICAudHZfbnNlYyA9IG5vdy0+bmFub3NlY29uZHMKKyAgfTsKKworICBpZiAoY2xvY2tfc2V0dGltZShDTE9DS19SRUFMVElNRSwgJnRzKSA9PSAtMSkgeworICAgIGxvZ1N5c3RlbUVycm9yKCJjbG9ja19zZXR0aW1lIik7CisgIH0KKworI2VsaWYgZGVmaW5lZChIQVZFX1NFVFRJTUVPRkRBWSkKKyAgc3RydWN0IHRpbWV2YWwgdHYgPSB7CisgICAgLnR2X3NlYyA9IG5vdy0+c2Vjb25kcywKKyAgICAudHZfdXNlYyA9IG5vdy0+bmFub3NlY29uZHMgLyBOU0VDU19QRVJfVVNFQworICB9OworCisgIGlmIChzZXR0aW1lb2ZkYXkoJnR2LCBOVUxMKSA9PSAtMSkgeworICAgIGxvZ1N5c3RlbUVycm9yKCJzZXR0aW1lb2ZkYXkiKTsKKyAgfQorCisjZWxpZiBkZWZpbmVkKF9fTUlOR1czMl9fKQorICBUaW1lQ29tcG9uZW50cyBjb21wb25lbnRzOworICBleHBhbmRUaW1lVmFsdWUobm93LCAmY29tcG9uZW50cyk7CisKKyAgU1lTVEVNVElNRSB0aW1lID0geworICAgIC53WWVhciA9IGNvbXBvbmVudHMueWVhciwKKyAgICAud01vbnRoID0gY29tcG9uZW50cy5tb250aCArIDEsCisgICAgLndEYXkgPSBjb21wb25lbnRzLmRheSArIDEsCisgICAgLndIb3VyID0gY29tcG9uZW50cy5ob3VyLAorICAgIC53TWludXRlID0gY29tcG9uZW50cy5taW51dGUsCisgICAgLndTZWNvbmQgPSBjb21wb25lbnRzLnNlY29uZCwKKyAgICAud01pbGxpc2Vjb25kcyA9IG5vdy0+bmFub3NlY29uZHMgLyBOU0VDU19QRVJfTVNFQworICB9OworCisgIGlmICghU2V0TG9jYWxUaW1lKCZ0aW1lKSkgeworICAgIGxvZ1dpbmRvd3NTeXN0ZW1FcnJvcigiU2V0TG9jYWxUaW1lIik7CisgIH0KKworI2VsaWYgZGVmaW5lZChIQVZFX1NUSU1FKQorICBjb25zdCB0aW1lX3Qgc2Vjb25kcyA9IG5vdy0+c2Vjb25kczsKKworICBpZiAoc3RpbWUoJnNlY29uZHMpID09IC0xKSB7CisgICAgbG9nU3lzdGVtRXJyb3IoInN0aW1lIik7CisgIH0KKworI2Vsc2UgLyogc2V0IGN1cnJlbnQgdGltZSAqLworI3dhcm5pbmcgc2V0IGN1cnJlbnQgdGltZSBub3Qgc3VwcG9ydGVkIG9uIHRoaXMgcGxhdGZvcm0KKyNlbmRpZiAvKiBnZXQgY3VycmVudCB0aW1lICovCit9CisKK3ZvaWQKK21ha2VUaW1lVmFsdWUgKFRpbWVWYWx1ZSAqdmFsdWUsIGNvbnN0IFRpbWVDb21wb25lbnRzICpjb21wb25lbnRzKSB7CisgIHZhbHVlLT5uYW5vc2Vjb25kcyA9IGNvbXBvbmVudHMtPm5hbm9zZWNvbmQ7CisKKyNpZiBkZWZpbmVkKEdSVUJfUlVOVElNRSkKKyAgdmFsdWUtPnNlY29uZHMgPSAwOworCisjZWxzZSAvKiBtYWtlIHNlY29uZHMgKi8KKyAgc3RydWN0IHRtIHRpbWUgPSB7CisgICAgLnRtX3llYXIgPSBjb21wb25lbnRzLT55ZWFyIC0gMTkwMCwKKyAgICAudG1fbW9uID0gY29tcG9uZW50cy0+bW9udGgsCisgICAgLnRtX21kYXkgPSBjb21wb25lbnRzLT5kYXkgKyAxLAorICAgIC50bV9ob3VyID0gY29tcG9uZW50cy0+aG91ciwKKyAgICAudG1fbWluID0gY29tcG9uZW50cy0+bWludXRlLAorICAgIC50bV9zZWMgPSBjb21wb25lbnRzLT5zZWNvbmQsCisgICAgLnRtX2lzZHN0ID0gLTEKKyAgfTsKKworICB2YWx1ZS0+c2Vjb25kcyA9IG1rdGltZSgmdGltZSk7CisjZW5kaWYgLyogbWFrZSBzZWNvbmRzICovCit9CisKK3ZvaWQKK2V4cGFuZFRpbWVWYWx1ZSAoY29uc3QgVGltZVZhbHVlICp2YWx1ZSwgVGltZUNvbXBvbmVudHMgKmNvbXBvbmVudHMpIHsKKyAgdGltZV90IHNlY29uZHMgPSB2YWx1ZS0+c2Vjb25kczsKKyAgY29tcG9uZW50cy0+bmFub3NlY29uZCA9IHZhbHVlLT5uYW5vc2Vjb25kczsKKworICBzdHJ1Y3QgdG0gKnRpbWUgPSAmY29tcG9uZW50cy0+dGltZTsKKyAgbG9jYWx0aW1lX3IoJnNlY29uZHMsIHRpbWUpOworCisjaWYgZGVmaW5lZChHUlVCX1JVTlRJTUUpCisgIGNvbXBvbmVudHMtPnllYXIgPSB0aW1lLT50bS55ZWFyOworICBjb21wb25lbnRzLT5tb250aCA9IHRpbWUtPnRtLm1vbnRoIC0gMTsKKyAgY29tcG9uZW50cy0+ZGF5ID0gdGltZS0+dG0uZGF5IC0gMTsKKyAgY29tcG9uZW50cy0+aG91ciA9IHRpbWUtPnRtLmhvdXI7CisgIGNvbXBvbmVudHMtPm1pbnV0ZSA9IHRpbWUtPnRtLm1pbnV0ZTsKKyAgY29tcG9uZW50cy0+c2Vjb25kID0gdGltZS0+dG0uc2Vjb25kOworCisjZWxzZSAvKiBleHBhbmQgc2Vjb25kcyAqLworICBjb21wb25lbnRzLT55ZWFyID0gdGltZS0+dG1feWVhciArIDE5MDA7CisgIGNvbXBvbmVudHMtPm1vbnRoID0gdGltZS0+dG1fbW9uOworICBjb21wb25lbnRzLT5kYXkgPSB0aW1lLT50bV9tZGF5IC0gMTsKKyAgY29tcG9uZW50cy0+aG91ciA9IHRpbWUtPnRtX2hvdXI7CisgIGNvbXBvbmVudHMtPm1pbnV0ZSA9IHRpbWUtPnRtX21pbjsKKyAgY29tcG9uZW50cy0+c2Vjb25kID0gdGltZS0+dG1fc2VjOworI2VuZGlmIC8qIGV4cGFuZCBzZWNvbmRzICovCit9CisKK3NpemVfdAorZm9ybWF0U2Vjb25kcyAoY2hhciAqYnVmZmVyLCBzaXplX3Qgc2l6ZSwgY29uc3QgY2hhciAqZm9ybWF0LCBpbnQzMl90IHNlY29uZHMpIHsKKyAgdGltZV90IHRpbWUgPSBzZWNvbmRzOworICBzdHJ1Y3QgdG0gZGVzY3JpcHRpb247CisKKyAgbG9jYWx0aW1lX3IoJnRpbWUsICZkZXNjcmlwdGlvbik7CisgIHJldHVybiBzdHJmdGltZShidWZmZXIsIHNpemUsIGZvcm1hdCwgJmRlc2NyaXB0aW9uKTsKK30KKwordm9pZAorbm9ybWFsaXplVGltZVZhbHVlIChUaW1lVmFsdWUgKnRpbWUpIHsKKyAgd2hpbGUgKHRpbWUtPm5hbm9zZWNvbmRzIDwgMCkgeworICAgIHRpbWUtPnNlY29uZHMgLT0gMTsKKyAgICB0aW1lLT5uYW5vc2Vjb25kcyArPSBOU0VDU19QRVJfU0VDOworICB9CisKKyAgd2hpbGUgKHRpbWUtPm5hbm9zZWNvbmRzID49IE5TRUNTX1BFUl9TRUMpIHsKKyAgICB0aW1lLT5zZWNvbmRzICs9IDE7CisgICAgdGltZS0+bmFub3NlY29uZHMgLT0gTlNFQ1NfUEVSX1NFQzsKKyAgfQorfQorCit2b2lkCithZGp1c3RUaW1lVmFsdWUgKFRpbWVWYWx1ZSAqdGltZSwgaW50IG1pbGxpc2Vjb25kcykgeworICBUaW1lVmFsdWUgYW1vdW50ID0geworICAgIC5zZWNvbmRzID0gbWlsbGlzZWNvbmRzIC8gTVNFQ1NfUEVSX1NFQywKKyAgICAubmFub3NlY29uZHMgPSAobWlsbGlzZWNvbmRzICUgTVNFQ1NfUEVSX1NFQykgKiBOU0VDU19QRVJfTVNFQworICB9OworCisgIG5vcm1hbGl6ZVRpbWVWYWx1ZSh0aW1lKTsKKyAgbm9ybWFsaXplVGltZVZhbHVlKCZhbW91bnQpOworICB0aW1lLT5zZWNvbmRzICs9IGFtb3VudC5zZWNvbmRzOworICB0aW1lLT5uYW5vc2Vjb25kcyArPSBhbW91bnQubmFub3NlY29uZHM7CisgIG5vcm1hbGl6ZVRpbWVWYWx1ZSh0aW1lKTsKK30KKworaW50Citjb21wYXJlVGltZVZhbHVlcyAoY29uc3QgVGltZVZhbHVlICpmaXJzdCwgY29uc3QgVGltZVZhbHVlICpzZWNvbmQpIHsKKyAgaWYgKGZpcnN0LT5zZWNvbmRzIDwgc2Vjb25kLT5zZWNvbmRzKSByZXR1cm4gLTE7CisgIGlmIChmaXJzdC0+c2Vjb25kcyA+IHNlY29uZC0+c2Vjb25kcykgcmV0dXJuIDE7CisKKyAgaWYgKGZpcnN0LT5uYW5vc2Vjb25kcyA8IHNlY29uZC0+bmFub3NlY29uZHMpIHJldHVybiAtMTsKKyAgaWYgKGZpcnN0LT5uYW5vc2Vjb25kcyA+IHNlY29uZC0+bmFub3NlY29uZHMpIHJldHVybiAxOworCisgIHJldHVybiAwOworfQorCitsb25nIGludAorbWlsbGlzZWNvbmRzQmV0d2VlbiAoY29uc3QgVGltZVZhbHVlICpmcm9tLCBjb25zdCBUaW1lVmFsdWUgKnRvKSB7CisgIFRpbWVWYWx1ZSBlbGFwc2VkID0geworICAgIC5zZWNvbmRzID0gdG8tPnNlY29uZHMgLSBmcm9tLT5zZWNvbmRzLAorICAgIC5uYW5vc2Vjb25kcyA9IHRvLT5uYW5vc2Vjb25kcyAtIGZyb20tPm5hbm9zZWNvbmRzCisgIH07CisKKyAgbm9ybWFsaXplVGltZVZhbHVlKCZlbGFwc2VkKTsKKyAgcmV0dXJuICgobG9uZyBpbnQpZWxhcHNlZC5zZWNvbmRzICogTVNFQ1NfUEVSX1NFQykKKyAgICAgICArIChlbGFwc2VkLm5hbm9zZWNvbmRzIC8gTlNFQ1NfUEVSX01TRUMpOworfQorCitsb25nIGludAorbWlsbGlzZWNvbmRzVGlsbE5leHRTZWNvbmQgKGNvbnN0IFRpbWVWYWx1ZSAqcmVmZXJlbmNlKSB7CisgIFRpbWVWYWx1ZSB0aW1lID0gKnJlZmVyZW5jZTsKKworICB0aW1lLm5hbm9zZWNvbmRzID0gMDsKKyAgdGltZS5zZWNvbmRzICs9IDE7CisgIHJldHVybiBtaWxsaXNlY29uZHNCZXR3ZWVuKHJlZmVyZW5jZSwgJnRpbWUpOworfQorCitsb25nIGludAorbWlsbGlzZWNvbmRzVGlsbE5leHRNaW51dGUgKGNvbnN0IFRpbWVWYWx1ZSAqcmVmZXJlbmNlKSB7CisgIFRpbWVWYWx1ZSB0aW1lID0gKnJlZmVyZW5jZTsKKyAgaW50MzJfdCAqc2Vjb25kcyA9ICZ0aW1lLnNlY29uZHM7CisKKyAgdGltZS5uYW5vc2Vjb25kcyA9IDA7CisgICpzZWNvbmRzIC89IFNFQ1NfUEVSX01JTjsKKyAgKnNlY29uZHMgKz0gMTsKKyAgKnNlY29uZHMgKj0gU0VDU19QRVJfTUlOOworICByZXR1cm4gbWlsbGlzZWNvbmRzQmV0d2VlbihyZWZlcmVuY2UsICZ0aW1lKTsKK30KKwordm9pZAorZ2V0TW9ub3RvbmljVGltZSAoVGltZVZhbHVlICpub3cpIHsKKyNpZiBkZWZpbmVkKEdSVUJfUlVOVElNRSkKKyAgZ3J1Yl91aW50NjRfdCBtaWxsaXNlY29uZHMgPSBncnViX2dldF90aW1lX21zKCk7CisgIG5vdy0+c2Vjb25kcyA9IG1pbGxpc2Vjb25kcyAvIE1TRUNTX1BFUl9TRUM7CisgIG5vdy0+bmFub3NlY29uZHMgPSAobWlsbGlzZWNvbmRzICUgTVNFQ1NfUEVSX1NFQykgKiBOU0VDU19QRVJfTVNFQzsKKworI2VsaWYgZGVmaW5lZChDTE9DS19SRUFMVElNRSkKKyAgc3RhdGljIGNvbnN0IGNsb2NraWRfdCBjbG9ja3NbXSA9IHsKKyNpZmRlZiBDTE9DS19NT05PVE9OSUNfUkFXCisgICAgQ0xPQ0tfTU9OT1RPTklDX1JBVywKKyNlbmRpZiAvKiBDTE9DS19NT05PVE9OSUNfUkFXICovCisKKyNpZmRlZiBDTE9DS19NT05PVE9OSUNfSFIKKyAgICBDTE9DS19NT05PVE9OSUNfSFIsCisjZW5kaWYgLyogQ0xPQ0tfTU9OT1RPTklDX0hSICovCisKKyNpZmRlZiBDTE9DS19NT05PVE9OSUMKKyAgICBDTE9DS19NT05PVE9OSUMsCisjZW5kaWYgLyogQ0xPQ0tfTU9OT1RPTklDICovCisKKyAgICBDTE9DS19SRUFMVElNRQorICB9OworCisgIHN0YXRpYyBjb25zdCBjbG9ja2lkX3QgKmNsb2NrID0gY2xvY2tzOworCisgIHdoaWxlICgqY2xvY2sgIT0gQ0xPQ0tfUkVBTFRJTUUpIHsKKyAgICBzdHJ1Y3QgdGltZXNwZWMgdHM7CisKKyAgICBpZiAoY2xvY2tfZ2V0dGltZSgqY2xvY2ssICZ0cykgIT0gLTEpIHsKKyAgICAgIG5vdy0+c2Vjb25kcyA9IHRzLnR2X3NlYzsKKyAgICAgIG5vdy0+bmFub3NlY29uZHMgPSB0cy50dl9uc2VjOworICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGxvZ01lc3NhZ2UoTE9HX1dBUk5JTkcsICJjbG9jayBub3QgYXZhaWxhYmxlOiAldSIsICh1bnNpZ25lZCBpbnQpKmNsb2NrKTsKKyAgICBjbG9jayArPSAxOworICB9CisjZW5kaWYgLyogZ2V0IG1vbm90b25pYyB0aW1lICovCisKKyAgZ2V0Q3VycmVudFRpbWUobm93KTsKK30KKworbG9uZyBpbnQKK2dldE1vbm90b25pY0VsYXBzZWQgKGNvbnN0IFRpbWVWYWx1ZSAqc3RhcnQpIHsKKyAgVGltZVZhbHVlIG5vdzsKKworICBnZXRNb25vdG9uaWNUaW1lKCZub3cpOworICByZXR1cm4gbWlsbGlzZWNvbmRzQmV0d2VlbihzdGFydCwgJm5vdyk7Cit9CisKK3ZvaWQKK3Jlc3RhcnRUaW1lUGVyaW9kIChUaW1lUGVyaW9kICpwZXJpb2QpIHsKKyAgZ2V0TW9ub3RvbmljVGltZSgmcGVyaW9kLT5zdGFydCk7Cit9CisKK3ZvaWQKK3N0YXJ0VGltZVBlcmlvZCAoVGltZVBlcmlvZCAqcGVyaW9kLCBsb25nIGludCBsZW5ndGgpIHsKKyAgcGVyaW9kLT5sZW5ndGggPSBsZW5ndGg7CisgIHJlc3RhcnRUaW1lUGVyaW9kKHBlcmlvZCk7Cit9CisKK2ludAorYWZ0ZXJUaW1lUGVyaW9kIChjb25zdCBUaW1lUGVyaW9kICpwZXJpb2QsIGxvbmcgaW50ICplbGFwc2VkKSB7CisgIGxvbmcgaW50IG1pbGxpc2Vjb25kcyA9IGdldE1vbm90b25pY0VsYXBzZWQoJnBlcmlvZC0+c3RhcnQpOworCisgIGlmIChlbGFwc2VkKSAqZWxhcHNlZCA9IG1pbGxpc2Vjb25kczsKKyAgcmV0dXJuIG1pbGxpc2Vjb25kcyA+PSBwZXJpb2QtPmxlbmd0aDsKK30KKwordm9pZAorYXBwcm94aW1hdGVEZWxheSAoaW50IG1pbGxpc2Vjb25kcykgeworICBpZiAobWlsbGlzZWNvbmRzID4gMCkgeworI2lmIGRlZmluZWQoX19NSU5HVzMyX18pCisgICAgU2xlZXAobWlsbGlzZWNvbmRzKTsKKworI2VsaWYgZGVmaW5lZChfX01TRE9TX18pCisgICAgbXNkb3NVU2xlZXAobWlsbGlzZWNvbmRzICogVVNFQ1NfUEVSX01TRUMpOworCisjZWxpZiBkZWZpbmVkIChHUlVCX1JVTlRJTUUpCisgICAgZ3J1Yl9taWxsaXNsZWVwKG1pbGxpc2Vjb25kcyk7CisKKyNlbGlmIGRlZmluZWQoSEFWRV9OQU5PU0xFRVApCisgICAgY29uc3Qgc3RydWN0IHRpbWVzcGVjIHRpbWVvdXQgPSB7CisgICAgICAudHZfc2VjID0gbWlsbGlzZWNvbmRzIC8gTVNFQ1NfUEVSX1NFQywKKyAgICAgIC50dl9uc2VjID0gKG1pbGxpc2Vjb25kcyAlIE1TRUNTX1BFUl9TRUMpICogTlNFQ1NfUEVSX01TRUMKKyAgICB9OworCisgICAgaWYgKG5hbm9zbGVlcCgmdGltZW91dCwgTlVMTCkgPT0gLTEpIHsKKyAgICAgIGlmIChlcnJubyAhPSBFSU5UUikgbG9nU3lzdGVtRXJyb3IoIm5hbm9zbGVlcCIpOworICAgIH0KKworI2VsaWYgZGVmaW5lZChIQVZFX1NZU19QT0xMX0gpCisgICAgaWYgKHBvbGwoTlVMTCwgMCwgbWlsbGlzZWNvbmRzKSA9PSAtMSkgeworICAgICAgaWYgKGVycm5vICE9IEVJTlRSKSBsb2dTeXN0ZW1FcnJvcigicG9sbCIpOworICAgIH0KKworI2VsaWYgZGVmaW5lZChIQVZFX1NFTEVDVCkKKyAgICBzdHJ1Y3QgdGltZXZhbCB0aW1lb3V0ID0geworICAgICAgLnR2X3NlYyA9IG1pbGxpc2Vjb25kcyAvIE1TRUNTX1BFUl9TRUMsCisgICAgICAudHZfdXNlYyA9IChtaWxsaXNlY29uZHMgJSBNU0VDU19QRVJfU0VDKSAqIFVTRUNTX1BFUl9NU0VDCisgICAgfTsKKworICAgIGlmIChzZWxlY3QoMCwgTlVMTCwgTlVMTCwgTlVMTCwgJnRpbWVvdXQpID09IC0xKSB7CisgICAgICBpZiAoZXJybm8gIT0gRUlOVFIpIGxvZ1N5c3RlbUVycm9yKCJzZWxlY3QiKTsKKyAgICB9CisKKyNlbmRpZiAvKiBhcHByb3hpbWF0ZSBkZWxheSAqLworICB9Cit9CisKK3ZvaWQKK2FjY3VyYXRlRGVsYXkgKGNvbnN0IFRpbWVWYWx1ZSAqZHVyYXRpb24pIHsKKyAgVGltZVZhbHVlIGRlbGF5ID0gKmR1cmF0aW9uOworICBub3JtYWxpemVUaW1lVmFsdWUoJmRlbGF5KTsKKworICBpZiAoKGRlbGF5LnNlY29uZHMgPiAwKSB8fCAoKGRlbGF5LnNlY29uZHMgPT0gMCkgJiYgKGRlbGF5Lm5hbm9zZWNvbmRzID4gMCkpKSB7CisjaWYgZGVmaW5lZChIQVZFX05BTk9TTEVFUCkKKyAgICBjb25zdCBzdHJ1Y3QgdGltZXNwZWMgdGltZW91dCA9IHsKKyAgICAgIC50dl9zZWMgPSBkZWxheS5zZWNvbmRzLAorICAgICAgLnR2X25zZWMgPSBkZWxheS5uYW5vc2Vjb25kcworICAgIH07CisKKyAgICBpZiAobmFub3NsZWVwKCZ0aW1lb3V0LCBOVUxMKSA9PSAtMSkgeworICAgICAgaWYgKGVycm5vICE9IEVJTlRSKSBsb2dTeXN0ZW1FcnJvcigibmFub3NsZWVwIik7CisgICAgfQorCisjZWxpZiBkZWZpbmVkKEhBVkVfU0VMRUNUKQorICAgIHN0cnVjdCB0aW1ldmFsIHRpbWVvdXQgPSB7CisgICAgICAudHZfc2VjID0gZGVsYXkuc2Vjb25kcywKKyAgICAgIC50dl91c2VjID0gKGRlbGF5Lm5hbm9zZWNvbmRzICsgKE5TRUNTX1BFUl9VU0VDIC0gMSkpIC8gTlNFQ1NfUEVSX1VTRUMKKyAgICB9OworCisgICAgaWYgKHRpbWVvdXQudHZfdXNlYyA9PSBVU0VDU19QRVJfU0VDKSB7CisgICAgICB0aW1lb3V0LnR2X3NlYyArPSAxOworICAgICAgdGltZW91dC50dl91c2VjID0gMDsKKyAgICB9CisKKyAgICBpZiAoc2VsZWN0KDAsIE5VTEwsIE5VTEwsIE5VTEwsICZ0aW1lb3V0KSA9PSAtMSkgeworICAgICAgaWYgKGVycm5vICE9IEVJTlRSKSBsb2dTeXN0ZW1FcnJvcigic2VsZWN0Iik7CisgICAgfQorCisjZWxzZSAvKiBhY2N1cmF0ZSBkZWxheSAqLworICAgIGFwcHJveGltYXRlRGVsYXkoKGRlbGF5LnNlY29uZHMgKiBNU0VDU19QRVJfU0VDKSArICgoZGVsYXkubmFub3NlY29uZHMgKyAoTlNFQ1NfUEVSX01TRUMgLSAxKSkgLyBOU0VDU19QRVJfTVNFQykpOworI2VuZGlmIC8qIGFjY3VyYXRlIGRlbGF5ICovCisgIH0KK30KZGlmZiAtLWdpdCBhL1Byb2dyYW1zL3R0Yi5hdXRvLmggYi9Qcm9ncmFtcy90dGIuYXV0by5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ3ZGQ5OGYKLS0tIC9kZXYvbnVsbAorKysgYi9Qcm9ncmFtcy90dGIuYXV0by5oCkBAIC0wLDAgKzEsMTI5OSBAQAorWzBYMDAwMF0gPSAwWDMwLCAwWDA2LAorWzBYMDIwMF0gPSAwWDIwLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDYxLAorWzBYMDIwOF0gPSAwWDMxLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDYyLAorWzBYMDIxMF0gPSAwWDI3LCAwWDAwLCAwWDAwLCAwWDAwLCAwWDZCLAorWzBYMDIxOF0gPSAwWDMyLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDZDLAorWzBYMDIyMF0gPSAwWDYwLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDYzLAorWzBYMDIyOF0gPSAwWDY5LCAwWDAwLCAwWDAwLCAwWDAwLCAwWDY2LAorWzBYMDIzMF0gPSAwWDJGLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDZELAorWzBYMDIzOF0gPSAwWDczLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDcwLAorWzBYMDI0MF0gPSAwWDIyLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDY1LAorWzBYMDI0OF0gPSAwWDMzLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDY4LAorWzBYMDI1MF0gPSAwWDM5LCAwWDAwLCAwWDAwLCAwWDAwLCAwWDZGLAorWzBYMDI1OF0gPSAwWDM2LCAwWDAwLCAwWDAwLCAwWDAwLCAwWDcyLAorWzBYMDI2MF0gPSAwWDdFLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDY0LAorWzBYMDI2OF0gPSAwWDZBLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDY3LAorWzBYMDI3MF0gPSAwWDNFLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDZFLAorWzBYMDI3OF0gPSAwWDc0LCAwWDAwLCAwWDAwLCAwWDAwLCAwWDcxLAorWzBYMDI4MF0gPSAwWDJDLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDJBLAorWzBYMDI4OF0gPSAwWDM1LCAwWDAwLCAwWDAwLCAwWDAwLCAwWDNDLAorWzBYMDI5MF0gPSAwWDJELCAwWDAwLCAwWDAwLCAwWDAwLCAwWDc1LAorWzBYMDI5OF0gPSAwWDM4LCAwWDAwLCAwWDAwLCAwWDAwLCAwWDc2LAorWzBYMDJBMF0gPSAwWDJFLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDI1LAorWzBYMDJBOF0gPSAwWDdCLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDI0LAorWzBYMDJCMF0gPSAwWDJCLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDc4LAorWzBYMDJCOF0gPSAwWDIxLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDI2LAorWzBYMDJDMF0gPSAwWDNCLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDNBLAorWzBYMDJDOF0gPSAwWDM0LCAwWDAwLCAwWDAwLCAwWDAwLCAwWDdDLAorWzBYMDJEMF0gPSAwWDMwLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDdBLAorWzBYMDJEOF0gPSAwWDM3LCAwWDAwLCAwWDAwLCAwWDAwLCAwWDI4LAorWzBYMDJFMF0gPSAwWDVGLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDNGLAorWzBYMDJFOF0gPSAwWDc3LCAwWDAwLCAwWDAwLCAwWDAwLCAwWDdELAorWzBYMDJGMF0gPSAwWDIzLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDc5LAorWzBYMDJGOF0gPSAwWDI5LCAwWDAwLCAwWDAwLCAwWDAwLCAwWDNELAorWzBYMDMwMF0gPSAwWEJBLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDQxLAorWzBYMDMwOF0gPSAwWEI5LCAwWDAwLCAwWDAwLCAwWDAwLCAwWDQyLAorWzBYMDMxMF0gPSAwWEI0LCAwWDAwLCAwWDAwLCAwWDAwLCAwWDRCLAorWzBYMDMxOF0gPSAwWEIyLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDRDLAorWzBYMDMyMF0gPSAwWDQwLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDQzLAorWzBYMDMyOF0gPSAwWDQ5LCAwWDAwLCAwWDAwLCAwWDAwLCAwWDQ2LAorWzBYMDMzMF0gPSAwWEY3LCAwWDAwLCAwWDAwLCAwWDAwLCAwWDRELAorWzBYMDMzOF0gPSAwWDUzLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDUwLAorWzBYMDM0MF0gPSAwWEE4LCAwWDAwLCAwWDAwLCAwWDAwLCAwWDQ1LAorWzBYMDM0OF0gPSAwWEIzLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDQ4LAorWzBYMDM1MF0gPSAwWEE3LCAwWDAwLCAwWDAwLCAwWDAwLCAwWDRGLAorWzBYMDM1OF0gPSAwWEI2LCAwWDAwLCAwWDAwLCAwWDAwLCAwWDUyLAorWzBYMDM2MF0gPSAwWDVFLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDQ0LAorWzBYMDM2OF0gPSAwWDRBLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDQ3LAorWzBYMDM3MF0gPSAwWEJCLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDRFLAorWzBYMDM3OF0gPSAwWDU0LCAwWDAwLCAwWDAwLCAwWDAwLCAwWDUxLAorWzBYMDM4MF0gPSAwWEI4LCAwWDAwLCAwWDAwLCAwWDAwLCAwWEQ3LAorWzBYMDM4OF0gPSAwWEFGLCAwWDAwLCAwWDAwLCAwWDAwLCAwWEFCLAorWzBYMDM5MF0gPSAwWEFELCAwWDAwLCAwWDAwLCAwWDAwLCAwWDU1LAorWzBYMDM5OF0gPSAwWEFFLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDU2LAorWzBYMDNBMF0gPSAwWEI3LCAwWDAwLCAwWDAwLCAwWDAwLCAwWEE0LAorWzBYMDNBOF0gPSAwWDVCLCAwWDAwLCAwWDAwLCAwWDAwLCAwWEEyLAorWzBYMDNCMF0gPSAwWEIxLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDU4LAorWzBYMDNCOF0gPSAwWEExLCAwWDAwLCAwWDAwLCAwWDAwLCAwWEE1LAorWzBYMDNDMF0gPSAwWEI1LCAwWDAwLCAwWDAwLCAwWDAwLCAwWEE2LAorWzBYMDNDOF0gPSAwWEFDLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDVDLAorWzBYMDNEMF0gPSAwWEIwLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDVBLAorWzBYMDNEOF0gPSAwWEE5LCAwWDAwLCAwWDAwLCAwWDAwLCAwWEJDLAorWzBYMDNFMF0gPSAwWDdGLCAwWDAwLCAwWDAwLCAwWDAwLCAwWEJGLAorWzBYMDNFOF0gPSAwWDU3LCAwWDAwLCAwWDAwLCAwWDAwLCAwWDVELAorWzBYMDNGMF0gPSAwWEEzLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDU5LAorWzBYMDNGOF0gPSAwWEJFLCAwWDAwLCAwWDAwLCAwWDAwLCAwWEJELAorWzBYMDQwMF0gPSAwWEFBLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDgxLAorWzBYMDQwOF0gPSAwWEUyLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDgyLAorWzBYMDQxMF0gPSAwWEU2LCAwWDAwLCAwWDAwLCAwWDAwLCAwWDhCLAorWzBYMDQxOF0gPSAwWEVBLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDhDLAorWzBYMDQyMF0gPSAwWDgwLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDgzLAorWzBYMDQyOF0gPSAwWDg5LCAwWDAwLCAwWDAwLCAwWDAwLCAwWDg2LAorWzBYMDQzMF0gPSAwWEY4LCAwWDAwLCAwWDAwLCAwWDAwLCAwWDhELAorWzBYMDQzOF0gPSAwWDkzLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDkwLAorWzBYMDQ0MF0gPSAwWEUzLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDg1LAorWzBYMDQ0OF0gPSAwWEVFLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDg4LAorWzBYMDQ1MF0gPSAwWEYyLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDhGLAorWzBYMDQ1OF0gPSAwWEUwLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDkyLAorWzBYMDQ2MF0gPSAwWDlFLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDg0LAorWzBYMDQ2OF0gPSAwWDhBLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDg3LAorWzBYMDQ3MF0gPSAwWEU1LCAwWDAwLCAwWDAwLCAwWDAwLCAwWDhFLAorWzBYMDQ3OF0gPSAwWDk0LCAwWDAwLCAwWDAwLCAwWDAwLCAwWDkxLAorWzBYMDQ4MF0gPSAwWEYwLCAwWDAwLCAwWDAwLCAwWDAwLCAwWEUxLAorWzBYMDQ4OF0gPSAwWEZCLCAwWDAwLCAwWDAwLCAwWDAwLCAwWEU5LAorWzBYMDQ5MF0gPSAwWEZFLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDk1LAorWzBYMDQ5OF0gPSAwWEVDLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDk2LAorWzBYMDRBMF0gPSAwWEYxLCAwWDAwLCAwWDAwLCAwWDAwLCAwWEVELAorWzBYMDRBOF0gPSAwWDlCLCAwWDAwLCAwWDAwLCAwWDAwLCAwWEZELAorWzBYMDRCMF0gPSAwWEU3LCAwWDAwLCAwWDAwLCAwWDAwLCAwWDk4LAorWzBYMDRCOF0gPSAwWEY2LCAwWDAwLCAwWDAwLCAwWDAwLCAwWEU0LAorWzBYMDRDMF0gPSAwWEY1LCAwWDAwLCAwWDAwLCAwWDAwLCAwWEZBLAorWzBYMDRDOF0gPSAwWEY0LCAwWDAwLCAwWDAwLCAwWDAwLCAwWDlDLAorWzBYMDREMF0gPSAwWEY5LCAwWDAwLCAwWDAwLCAwWDAwLCAwWDlBLAorWzBYMDREOF0gPSAwWEU4LCAwWDAwLCAwWDAwLCAwWDAwLCAwWEVGLAorWzBYMDRFMF0gPSAwWDlGLCAwWDAwLCAwWDAwLCAwWDAwLCAwWEYzLAorWzBYMDRFOF0gPSAwWDk3LCAwWDAwLCAwWDAwLCAwWDAwLCAwWDlELAorWzBYMDRGMF0gPSAwWEZGLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDk5LAorWzBYMDRGOF0gPSAwWEZDLCAwWDAwLCAwWDAwLCAwWDAwLCAwWEVCLAorWzBYMDUwNF0gPSAwWDAxLCAwWDAwLCAwWDAwLCAwWDAwLCAwWEMyLAorWzBYMDUwQ10gPSAwWDAyLCAwWDAwLCAwWDAwLCAwWDAwLCAwWEM2LAorWzBYMDUxNF0gPSAwWDBCLCAwWDAwLCAwWDAwLCAwWDAwLCAwWENBLAorWzBYMDUxQ10gPSAwWDBDLAorWzBYMDUyNF0gPSAwWDAzLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDA5LAorWzBYMDUyQ10gPSAwWDA2LCAwWDAwLCAwWDAwLCAwWDAwLCAwWEQ4LAorWzBYMDUzNF0gPSAwWDBELCAwWDAwLCAwWDAwLCAwWDAwLCAwWDEzLAorWzBYMDUzQ10gPSAwWDEwLCAwWDAwLCAwWDAwLCAwWDAwLCAwWEMzLAorWzBYMDU0NF0gPSAwWDA1LCAwWDAwLCAwWDAwLCAwWDAwLCAwWENFLAorWzBYMDU0Q10gPSAwWDA4LCAwWDAwLCAwWDAwLCAwWDAwLCAwWEQyLAorWzBYMDU1NF0gPSAwWDBGLCAwWDAwLCAwWDAwLCAwWDAwLCAwWEMwLAorWzBYMDU1Q10gPSAwWDEyLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDFFLAorWzBYMDU2NF0gPSAwWDA0LCAwWDAwLCAwWDAwLCAwWDAwLCAwWDBBLAorWzBYMDU2Q10gPSAwWDA3LCAwWDAwLCAwWDAwLCAwWDAwLCAwWEM1LAorWzBYMDU3NF0gPSAwWDBFLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDE0LAorWzBYMDU3Q10gPSAwWDExLCAwWDAwLCAwWDAwLCAwWDAwLCAwWEQwLAorWzBYMDU4NF0gPSAwWEMxLCAwWDAwLCAwWDAwLCAwWDAwLCAwWERCLAorWzBYMDU4Q10gPSAwWEM5LCAwWDAwLCAwWDAwLCAwWDAwLCAwWERFLAorWzBYMDU5NF0gPSAwWDE1LCAwWDAwLCAwWDAwLCAwWDAwLCAwWENDLAorWzBYMDU5Q10gPSAwWDE2LCAwWDAwLCAwWDAwLCAwWDAwLCAwWEQxLAorWzBYMDVBNF0gPSAwWENELCAwWDAwLCAwWDAwLCAwWDAwLCAwWDFCLAorWzBYMDVBQ10gPSAwWERELCAwWDAwLCAwWDAwLCAwWDAwLCAwWEM3LAorWzBYMDVCNF0gPSAwWDE4LCAwWDAwLCAwWDAwLCAwWDAwLCAwWEQ2LAorWzBYMDVCQ10gPSAwWEM0LCAwWDAwLCAwWDAwLCAwWDAwLCAwWEQ1LAorWzBYMDVDNF0gPSAwWERBLCAwWDAwLCAwWDAwLCAwWDAwLCAwWEQ0LAorWzBYMDVDQ10gPSAwWDFDLCAwWDAwLCAwWDAwLCAwWDAwLCAwWEQ5LAorWzBYMDVENF0gPSAwWDFBLCAwWDAwLCAwWDAwLCAwWDAwLCAwWEM4LAorWzBYMDVEQ10gPSAwWENGLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDFGLAorWzBYMDVFNF0gPSAwWEQzLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDE3LAorWzBYMDVFQ10gPSAwWDFELCAwWDAwLCAwWDAwLCAwWDAwLCAwWERGLAorWzBYMDVGNF0gPSAwWDE5LCAwWDAwLCAwWDAwLCAwWDAwLCAwWERDLAorWzBYMDVGQ10gPSAwWENCLCAwWDAwLCAwWDAwLCAwWDAwLCAwWEZGLCAwWEZGLCAwWEZGLCAwWEZGLAorWzBYMDYwNF0gPSAwWEZGLCAwWEZGLCAwWEZGLCAwWEZGLCAwWEZGLCAwWEZGLCAwWEZGLCAwWEZGLAorWzBYMDYwQ10gPSAwWEZGLCAwWEZGLCAwWEZGLCAwWEZGLCAwWEZGLCAwWEZGLCAwWEZGLCAwWEZGLAorWzBYMDYxNF0gPSAwWEZGLCAwWEZGLCAwWEZGLCAwWEZGLCAwWEZFLCAwWEZGLCAwWEZGLCAwWEZGLAorWzBYMDYxQ10gPSAwWEZGLCAwWEZGLCAwWEZGLCAwWEZGLCAwWDMwLCAwWDI2LAorWzBYMDYyOF0gPSAwWDI5LCAwWDA0LAorWzBYMDYzMF0gPSAwWDMwLCAwWDBBLCAwWDAwLCAwWDAwLCAwWEYwLCAwWDExLAorWzBYMEEzMF0gPSAwWDMwLCAwWDBFLCAwWDAwLCAwWDAwLCAwWEIwLCAwWDIzLAorWzBYMEEzOF0gPSAwWEYwLCAwWDI0LAorWzBYMEFCMF0gPSAwWDMwLCAwWDFDLCAwWDAwLCAwWDAwLCAwWDMwLCAwWDIxLAorWzBYMEFCOF0gPSAwWEYwLCAwWDFGLAorWzBYMEFDMF0gPSAwWDcwLCAwWDBGLCAwWDAwLCAwWDAwLCAwWDcwLCAwWDIyLAorWzBYMEFGMF0gPSAwWDcwLCAwWDFELAorWzBYMEUyOF0gPSAwWEIwLCAwWDFFLCAwWDAwLCAwWDAwLCAwWEIwLCAwWDEwLAorWzBYMEUzMF0gPSAwWEM4LCAwWEMxLCAwWEMzLCAwWEM5LCAwWEQ5LCAwWEQxLCAwWENCLCAwWERCLAorWzBYMEUzOF0gPSAwWEQzLCAwWENBLCAwWERBLCAwWEM1LCAwWEM3LCAwWENELCAwWERELCAwWEQ1LAorWzBYMEU0MF0gPSAwWENGLCAwWERGLCAwWEQ3LCAwWENFLCAwWERFLCAwWEU1LCAwWEU3LCAwWEZBLAorWzBYMEU0OF0gPSAwWEVELCAwWEZELCAwWEY1LCAwWEVBLCAwWEYzLCAwWEZCLCAwWEQ4LCAwWEY4LAorWzBYMEU1MV0gPSAwWDJFLCAwWDEwLCAwWDNDLCAwWDJCLCAwWDI5LCAwWDJGLCAwWDA0LCAwWDM3LAorWzBYMEU1OV0gPSAwWDNFLCAwWDIxLCAwWDJDLCAwWDIwLCAwWDI0LCAwWDI4LCAwWDBDLCAwWDM0LAorWzBYMEU2MV0gPSAwWDAyLCAwWDA2LCAwWDEyLCAwWDMyLCAwWDIyLCAwWDE2LCAwWDM2LCAwWDI2LAorWzBYMEU2OV0gPSAwWDE0LCAwWDMxLCAwWDMwLCAwWDIzLCAwWDNGLCAwWDFDLCAwWDM5LCAwWDQ4LAorWzBYMEU3MV0gPSAwWDQxLCAwWDQzLCAwWDQ5LCAwWDU5LCAwWDUxLCAwWDRCLCAwWDVCLCAwWDUzLAorWzBYMEU3OV0gPSAwWDRBLCAwWDVBLCAwWDQ1LCAwWDQ3LCAwWDRELCAwWDVELCAwWDU1LCAwWDRGLAorWzBYMEU4MV0gPSAwWDVGLCAwWDU3LCAwWDRFLCAwWDVFLCAwWDY1LCAwWDY3LCAwWDdBLCAwWDZELAorWzBYMEU4OV0gPSAwWDdELCAwWDc1LCAwWDZBLCAwWDczLCAwWDdCLCAwWDU4LCAwWDM4LCAwWDA4LAorWzBYMEU5MV0gPSAwWDAxLCAwWDAzLCAwWDA5LCAwWDE5LCAwWDExLCAwWDBCLCAwWDFCLCAwWDEzLAorWzBYMEU5OV0gPSAwWDBBLCAwWDFBLCAwWDA1LCAwWDA3LCAwWDBELCAwWDFELCAwWDE1LCAwWDBGLAorWzBYMEVBMV0gPSAwWDFGLCAwWDE3LCAwWDBFLCAwWDFFLCAwWDI1LCAwWDI3LCAwWDNBLCAwWDJELAorWzBYMEVBOV0gPSAwWDNELCAwWDM1LCAwWDJBLCAwWDMzLCAwWDNCLCAwWDE4LCAwWDc4LCAwWDg4LAorWzBYMEVCMV0gPSAwWDgxLCAwWDgzLCAwWDg5LCAwWDk5LCAwWDkxLCAwWDhCLCAwWDlCLCAwWDkzLAorWzBYMEVCOV0gPSAwWDhBLCAwWDlBLCAwWDg1LCAwWDg3LCAwWDhELCAwWDlELCAwWDk1LCAwWDhGLAorWzBYMEVDMV0gPSAwWDlGLCAwWDk3LCAwWDhFLCAwWDlFLCAwWEE1LCAwWEE3LCAwWEJBLCAwWEFELAorWzBYMEVDOV0gPSAwWEJELCAwWEI1LCAwWEFBLCAwWEIzLCAwWEJCLCAwWDk4LCAwWEI4LAorWzBYMEVEMV0gPSAwWDZFLCAwWDZCLCAwWDdDLCAwWDY5LCAwWDZGLCAwWDcxLCAwWDU0LCAwWDUwLAorWzBYMEVEOV0gPSAwWDc2LCAwWDgwLCAwWDYzLCAwWDcyLCAwWDY0LCAwWDY2LCAwWDYyLCAwWDc0LAorWzBYMEVFMV0gPSAwWDZDLCAwWDQ2LCAwWDUyLCAwWDQ0LCAwWDcwLCAwWDU2LCAwWDY4LCAwWDYwLAorWzBYMEVFOV0gPSAwWDQyLCAwWDQwLCAwWDVDLCAwWDc3LCAwWDdGLCAwWDdFLCAwWDc5LCAwWEQ2LAorWzBYMEVGMV0gPSAwWEUxLCAwWEMyLCAwWEQwLCAwWEVGLCAwWERDLCAwWEM0LCAwWEVDLCAwWEY2LAorWzBYMEVGOV0gPSAwWEUzLCAwWEM2LCAwWEZGLCAwWEU2LCAwWEU5LCAwWEQyLCAwWEY3LCAwWEUwLAorWzBYMEYwMV0gPSAwWEU4LCAwWEQ0LCAwWEY5LCAwWEYyLCAwWEYwLCAwWEVFLCAwWDYxLCAwWENDLAorWzBYMEYwOV0gPSAwWEY0LCAwWEYxLCAwWEUyLCAwWEZFLCAwWEVCLCAwWEU0LCAwWEZDLCAwWDk2LAorWzBYMEYxMV0gPSAwWEExLCAwWDgyLCAwWDkwLCAwWEFGLCAwWDlDLCAwWDg0LCAwWEFDLCAwWEI2LAorWzBYMEYxOV0gPSAwWEEzLCAwWDg2LCAwWEJGLCAwWEE2LCAwWEE5LCAwWDkyLCAwWEI3LCAwWEEwLAorWzBYMEYyMV0gPSAwWEE4LCAwWDk0LCAwWEI5LCAwWEIyLCAwWEIwLCAwWEFFLCAwWDRDLCAwWDhDLAorWzBYMEYyOV0gPSAwWEI0LCAwWEIxLCAwWEEyLCAwWEJFLCAwWEFCLCAwWEE0LCAwWEJDLCAwWEZGLAorWzBYMEYzMV0gPSAwWEZGLCAwWEZGLCAwWEZGLCAwWEZGLCAwWEZGLCAwWEZGLCAwWEZGLCAwWEZGLAorWzBYMEYzOV0gPSAwWEZGLCAwWEZGLCAwWEZGLCAwWEZGLCAwWEZGLCAwWEZGLCAwWEZGLCAwWEZGLAorWzBYMEY0MV0gPSAwWEZGLCAwWEZGLCAwWEZGLCAwWEZFLCAwWEZGLCAwWEZGLCAwWEZGLCAwWEZGLAorWzBYMEY0OV0gPSAwWEZGLCAwWEZGLCAwWEZGLCAwWEZGLCAwWEZGLCAwWEZGLCAwWEZGLAorWzBYMEY2MF0gPSAwWEZELCAwWDVGLCAwWEZFLCAwWERGLCAwWDAxLCAwWDIwLAorWzBYMTA5OV0gPSAwWDAxLCAwWDAwLCAwWDAwLCAwWEZGLCAwWDAxLAorWzBYMTBBM10gPSAwWEYwLCAwWEZGLCAwWEZGLCAwWEZGLCAwWEZGLCAwWEZGLCAwWEZGLCAwWEZGLAorWzBYMTBBQl0gPSAwWEZGLCAwWEZGLCAwWDA3LAorWzBYMTFEMV0gPSAwWDIwLCAwWEZGLCAwWDAzLCAwWEZFLCAwWEZGLCAwWEZGLCAwWDA3LCAwWEZFLAorWzBYMTFEOV0gPSAwWEZGLCAwWEZGLCAwWDA3LAorWzBYMTU0MF0gPSAwWEYwLCAwWDE1LCAwWDAwLCAwWDAwLCAwWDMwLCAwWDE3LAorWzBYMTU0OF0gPSAwWDcwLCAwWDE4LCAwWDAwLCAwWDAwLCAwWEYwLCAwWDFBLAorWzBYMTVCNF0gPSAwWEIwLCAwWDE5LAorWzBYMTcxMF0gPSAwWEZGLCAwWEZGLCAwWEZGLCAwWEZGLCAwWEZGLCAwWEZGLCAwWEZGLCAwWEZGLAorWzBYMTcxOF0gPSAwWEZGLCAwWEZGLCAwWEZGLCAwWEZGLCAwWEZGLCAwWEZGLCAwWEZGLCAwWEZGLAorWzBYMTcyMF0gPSAwWEZGLCAwWEZGLCAwWEZGLCAwWEZGLCAwWEZGLCAwWEZGLCAwWEZGLCAwWEZGLAorWzBYMTcyOF0gPSAwWEZGLCAwWEZGLCAwWEZGLCAwWEZGLCAwWEZGLCAwWEZGLCAwWEZGLCAwWEZGLAorWzBYMTg1MF0gPSAwWEZGLCAwWEZGLCAwWEZGLCAwWEZGLCAwWEZGLCAwWEZGLCAwWEZGLCAwWEZGLAorWzBYMTg1OF0gPSAwWEZGLCAwWEZGLCAwWEZGLCAwWEZGLCAwWEZGLCAwWEZGLCAwWEZGLCAwWEZGLAorWzBYMTg2MF0gPSAwWEZGLCAwWEZGLCAwWEZGLCAwWEZGLCAwWEZGLCAwWEZGLCAwWEZGLCAwWEZGLAorWzBYMTg2OF0gPSAwWEZGLCAwWEZGLCAwWEZGLCAwWEZGLCAwWEZGLCAwWEZGLCAwWEZGLCAwWEZGLAorWzBYMTk5MF0gPSAwWEZGLCAwWEZGLCAwWEZGLCAwWEZGLCAwWEZGLCAwWEZGLCAwWEZGLCAwWEZGLAorWzBYMTk5OF0gPSAwWEZGLCAwWEZGLCAwWEZGLCAwWEZGLCAwWEZGLCAwWEZGLCAwWEZGLCAwWEZGLAorWzBYMTlBMF0gPSAwWEZGLCAwWEZGLCAwWEZGLCAwWEZGLCAwWDBGLAorWzBYMUFEMl0gPSAwWEZGLCAwWEZGLCAwWEZGLCAwWDAzLCAwWEZGLCAwWEZGLCAwWEZGLCAwWDAzLAorWzBYMUFEQV0gPSAwWEZGLCAwWEZGLCAwWEZGLCAwWDAzLCAwWEZGLCAwWEZGLCAwWEZGLCAwWDAzLAorWzBYMUMyOV0gPSAwWEMwLCAwWEZGLCAwWEZGLCAwWEZGLCAwWEZGLCAwWEZGLCAwWEZGLAorWzBYMUQ1MF0gPSAwWEZDLCAwWDA3LCAwWDNGLCAwWDc3LCAwWDQ3LCAwWDgwLCAwWDAxLCAwWDA2LAorWzBYMUQ1QV0gPSAwWDA0LCAwWDgwLAorWzBYMUQ2NV0gPSAwWDEwLAorWzBYMUU5M10gPSAwWDEwLCAwWDAwLCAwWDAwLCAwWDAxLAorWzBYMUZEQl0gPSAwWDAxLCAwWDA4LAorWzBYMjExMl0gPSAwWDA0LAorWzBYMjI1MF0gPSAwWDA4LCAwWDAyLCAwWDAwLCAwWDAwLCAwWDA0LAorWzBYMjI3MF0gPSAwWDM2LCAwWDM2LCAwWEZGLCAwWEZGLCAwWDM2LCAwWDM2LCAwWEZGLCAwWEZGLAorWzBYMjI3OF0gPSAwWDM2LCAwWDM2LCAwWEZGLCAwWEZGLCAwWEY2LCAwWEY2LCAwWEY2LCAwWEY2LAorWzBYMjI4MF0gPSAwWEY2LCAwWEY2LCAwWEY2LCAwWEY2LCAwWDNGLCAwWDNGLCAwWDNGLCAwWDNGLAorWzBYMjI4OF0gPSAwWDNGLCAwWDNGLCAwWDNGLCAwWDNGLCAwWEZGLCAwWEZGLCAwWEZGLCAwWEZGLAorWzBYMjI5MF0gPSAwWEZGLCAwWEZGLCAwWEZGLCAwWEZGLCAwWEZGLCAwWEZGLCAwWEZGLCAwWEZGLAorWzBYMjI5OF0gPSAwWEZGLCAwWEZGLCAwWEZGLCAwWEZGLCAwWEY2LCAwWEY2LCAwWEY2LCAwWEY2LAorWzBYMjJBMF0gPSAwWEY2LCAwWEY2LCAwWEY2LCAwWEY2LCAwWDNGLCAwWDNGLCAwWDNGLCAwWDNGLAorWzBYMjJBOF0gPSAwWDNGLCAwWDNGLCAwWDNGLCAwWDNGLCAwWEZGLCAwWEZGLCAwWEZGLCAwWEZGLAorWzBYMjJCMF0gPSAwWEZGLCAwWEZGLCAwWEZGLCAwWEZGLCAwWEZGLCAwWEZGLCAwWEZGLCAwWEZGLAorWzBYMjJCOF0gPSAwWEZGLCAwWEZGLCAwWEZGLCAwWEZGLCAwWDM2LCAwWDM2LCAwWEZGLCAwWEZGLAorWzBYMjJDMF0gPSAwWDM2LCAwWEZGLCAwWEY2LCAwWEY2LCAwWEY2LCAwWEY2LCAwWEY2LCAwWEY2LAorWzBYMjJDOF0gPSAwWDNGLCAwWDNGLCAwWDNGLCAwWDNGLCAwWDNGLCAwWDNGLCAwWEZGLCAwWEZGLAorWzBYMjJEMF0gPSAwWEZGLCAwWEZGLCAwWEZGLCAwWEZGLCAwWEY2LCAwWEY2LCAwWEY2LCAwWDNGLAorWzBYMjJEOF0gPSAwWDNGLCAwWDNGLCAwWEZGLCAwWEZGLCAwWEZGLCAwWEY2LCAwWEY2LCAwWDNGLAorWzBYMjJFMF0gPSAwWDNGLCAwWDQ4LCAwWDgxLCAwWEM5LCAwWDM2LCAwWDNGLCAwWDM2LCAwWEY2LAorWzBYMjJFOF0gPSAwWDM2LCAwWDNGLCAwWDM2LCAwWEY2LCAwWDM2LCAwWEZGLCAwWDM2LCAwWEZGLAorWzBYMjJGMF0gPSAwWDFCLCAwWDAwLCAwWEMwLCAwWDAwLCAwWEU0LCAwWDAwLCAwWEY2LAorWzBYMjJGOF0gPSAwWEZGLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDQ3LAorWzBYMjMwMF0gPSAwWEI4LAorWzBYMjM3MF0gPSAwWEZGLCAwWEZGLCAwWEZGLCAwWEZGLCAwWEZGLCAwWEZGLCAwWEZGLCAwWEZGLAorWzBYMjM3OF0gPSAwWEZGLCAwWEZGLCAwWEZGLCAwWEZGLCAwWEZGLCAwWEZGLCAwWEZGLCAwWEZGLAorWzBYMjM4MF0gPSAwWDU1LCAwWDExLCAwWDAxLAorWzBYMjREQV0gPSAwWDBDLCAwWDAwLCAwWDAzLCAwWDAwLCAwWDAwLCAwWDYxLAorWzBYMjRFMl0gPSAwWDA0LAorWzBYMjYyOF0gPSAwWDQwLCAwWDAwLCAwWDAwLCAwWDEwLAorWzBYMjYzMF0gPSAwWDgwLCAwWDAwLCAwWDAwLCAwWDAwLCAwWEFDLCAwWDIwLAorWzBYMjYzOF0gPSAwWDgyLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDFBLCAwWDIwLAorWzBYMjY0MF0gPSAwWDgzLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDkyLCAwWDAxLAorWzBYMjY0OF0gPSAwWDg0LCAwWDAwLCAwWDAwLCAwWDAwLCAwWDFFLCAwWDIwLAorWzBYMjY1MF0gPSAwWDg1LCAwWDAwLCAwWDAwLCAwWDAwLCAwWDI2LCAwWDIwLAorWzBYMjY1OF0gPSAwWDg2LCAwWDAwLCAwWDAwLCAwWDAwLCAwWDIwLCAwWDIwLAorWzBYMjY2MF0gPSAwWDg3LCAwWDAwLCAwWDAwLCAwWDAwLCAwWDIxLCAwWDIwLAorWzBYMjY2OF0gPSAwWDg4LCAwWDAwLCAwWDAwLCAwWDAwLCAwWEM2LCAwWDAyLAorWzBYMjY3MF0gPSAwWDg5LCAwWDAwLCAwWDAwLCAwWDAwLCAwWDMwLCAwWDIwLAorWzBYMjY3OF0gPSAwWDhBLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDYwLCAwWDAxLAorWzBYMjY4MF0gPSAwWDhCLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDM5LCAwWDIwLAorWzBYMjY4OF0gPSAwWDhDLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDUyLCAwWDAxLAorWzBYMjY5MF0gPSAwWDhFLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDdELCAwWDAxLAorWzBYMjY5OF0gPSAwWDkxLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDE4LCAwWDIwLAorWzBYMjZBMF0gPSAwWDkyLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDE5LCAwWDIwLAorWzBYMjZBOF0gPSAwWDkzLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDFDLCAwWDIwLAorWzBYMjZCMF0gPSAwWDk0LCAwWDAwLCAwWDAwLCAwWDAwLCAwWDFELCAwWDIwLAorWzBYMjZCOF0gPSAwWDk1LCAwWDAwLCAwWDAwLCAwWDAwLCAwWDIyLCAwWDIwLAorWzBYMjZDMF0gPSAwWDk2LCAwWDAwLCAwWDAwLCAwWDAwLCAwWDEzLCAwWDIwLAorWzBYMjZDOF0gPSAwWDk3LCAwWDAwLCAwWDAwLCAwWDAwLCAwWDE0LCAwWDIwLAorWzBYMjZEMF0gPSAwWDk4LCAwWDAwLCAwWDAwLCAwWDAwLCAwWERDLCAwWDAyLAorWzBYMjZEOF0gPSAwWDk5LCAwWDAwLCAwWDAwLCAwWDAwLCAwWDIyLCAwWDIxLAorWzBYMjZFMF0gPSAwWDlBLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDYxLCAwWDAxLAorWzBYMjZFOF0gPSAwWDlCLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDNBLCAwWDIwLAorWzBYMjZGMF0gPSAwWDlDLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDUzLCAwWDAxLAorWzBYMjZGOF0gPSAwWDlFLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDdFLCAwWDAxLAorWzBYMjcwMF0gPSAwWDlGLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDc4LCAwWDAxLAorWzBYMjcwOF0gPSAwWEEwLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDIwLAorWzBYMjcxMF0gPSAwWEFELCAwWDAwLCAwWDAwLCAwWDAwLCAwWDJELAorWzBYMjcxOF0gPSAwWDUyLCAwWDAxLCAwWDAwLCAwWDAwLCAwWDhDLAorWzBYMjcyMF0gPSAwWDUzLCAwWDAxLCAwWDAwLCAwWDAwLCAwWDlDLAorWzBYMjcyOF0gPSAwWDYwLCAwWDAxLCAwWDAwLCAwWDAwLCAwWDhBLAorWzBYMjczMF0gPSAwWDYxLCAwWDAxLCAwWDAwLCAwWDAwLCAwWDlBLAorWzBYMjczOF0gPSAwWDc4LCAwWDAxLCAwWDAwLCAwWDAwLCAwWDlGLAorWzBYMjc0MF0gPSAwWDdELCAwWDAxLCAwWDAwLCAwWDAwLCAwWDhFLAorWzBYMjc0OF0gPSAwWDdFLCAwWDAxLCAwWDAwLCAwWDAwLCAwWDlFLAorWzBYMjc1MF0gPSAwWDkyLCAwWDAxLCAwWDAwLCAwWDAwLCAwWDgzLAorWzBYMjc1OF0gPSAwWEM2LCAwWDAyLCAwWDAwLCAwWDAwLCAwWDg4LAorWzBYMjc2MF0gPSAwWERDLCAwWDAyLCAwWDAwLCAwWDAwLCAwWDk4LAorWzBYMjc2OF0gPSAwWDAyLCAwWDIwLCAwWDAwLCAwWDAwLCAwWDIwLAorWzBYMjc3MF0gPSAwWDAzLCAwWDIwLCAwWDAwLCAwWDAwLCAwWDIwLAorWzBYMjc3OF0gPSAwWDA0LCAwWDIwLCAwWDAwLCAwWDAwLCAwWDIwLAorWzBYMjc4MF0gPSAwWDA1LCAwWDIwLCAwWDAwLCAwWDAwLCAwWDIwLAorWzBYMjc4OF0gPSAwWDA2LCAwWDIwLCAwWDAwLCAwWDAwLCAwWDIwLAorWzBYMjc5MF0gPSAwWDA3LCAwWDIwLCAwWDAwLCAwWDAwLCAwWDIwLAorWzBYMjc5OF0gPSAwWDA4LCAwWDIwLCAwWDAwLCAwWDAwLCAwWDIwLAorWzBYMjdBMF0gPSAwWDA5LCAwWDIwLCAwWDAwLCAwWDAwLCAwWDIwLAorWzBYMjdBOF0gPSAwWDBBLCAwWDIwLCAwWDAwLCAwWDAwLCAwWDIwLAorWzBYMjdCMF0gPSAwWDEwLCAwWDIwLCAwWDAwLCAwWDAwLCAwWDJELAorWzBYMjdCOF0gPSAwWDExLCAwWDIwLCAwWDAwLCAwWDAwLCAwWDJELAorWzBYMjdDMF0gPSAwWDEyLCAwWDIwLCAwWDAwLCAwWDAwLCAwWDJELAorWzBYMjdDOF0gPSAwWDEzLCAwWDIwLCAwWDAwLCAwWDAwLCAwWDJELAorWzBYMjdEMF0gPSAwWDEzLCAwWDIwLCAwWDAwLCAwWDAwLCAwWDk2LAorWzBYMjdEOF0gPSAwWDE0LCAwWDIwLCAwWDAwLCAwWDAwLCAwWDJELAorWzBYMjdFMF0gPSAwWDE0LCAwWDIwLCAwWDAwLCAwWDAwLCAwWDk3LAorWzBYMjdFOF0gPSAwWDE1LCAwWDIwLCAwWDAwLCAwWDAwLCAwWDJELAorWzBYMjdGMF0gPSAwWDE4LCAwWDIwLCAwWDAwLCAwWDAwLCAwWDI3LAorWzBYMjdGOF0gPSAwWDE4LCAwWDIwLCAwWDAwLCAwWDAwLCAwWDkxLAorWzBYMjgwMF0gPSAwWDE5LCAwWDIwLCAwWDAwLCAwWDAwLCAwWDI3LAorWzBYMjgwOF0gPSAwWDE5LCAwWDIwLCAwWDAwLCAwWDAwLCAwWDkyLAorWzBYMjgxMF0gPSAwWDFBLCAwWDIwLCAwWDAwLCAwWDAwLCAwWDgyLAorWzBYMjgxOF0gPSAwWDFDLCAwWDIwLCAwWDAwLCAwWDAwLCAwWDkzLAorWzBYMjgyMF0gPSAwWDFELCAwWDIwLCAwWDAwLCAwWDAwLCAwWDk0LAorWzBYMjgyOF0gPSAwWDFFLCAwWDIwLCAwWDAwLCAwWDAwLCAwWDg0LAorWzBYMjgzMF0gPSAwWDIwLCAwWDIwLCAwWDAwLCAwWDAwLCAwWDg2LAorWzBYMjgzOF0gPSAwWDIxLCAwWDIwLCAwWDAwLCAwWDAwLCAwWDg3LAorWzBYMjg0MF0gPSAwWDIyLCAwWDIwLCAwWDAwLCAwWDAwLCAwWDk1LAorWzBYMjg0OF0gPSAwWDI2LCAwWDIwLCAwWDAwLCAwWDAwLCAwWDg1LAorWzBYMjg1MF0gPSAwWDJGLCAwWDIwLCAwWDAwLCAwWDAwLCAwWDIwLAorWzBYMjg1OF0gPSAwWDMwLCAwWDIwLCAwWDAwLCAwWDAwLCAwWDg5LAorWzBYMjg2MF0gPSAwWDM5LCAwWDIwLCAwWDAwLCAwWDAwLCAwWDhCLAorWzBYMjg2OF0gPSAwWDNBLCAwWDIwLCAwWDAwLCAwWDAwLCAwWDlCLAorWzBYMjg3MF0gPSAwWDUyLCAwWDIwLCAwWDAwLCAwWDAwLCAwWDJELAorWzBYMjg3OF0gPSAwWDVGLCAwWDIwLCAwWDAwLCAwWDAwLCAwWDIwLAorWzBYMjg4MF0gPSAwWEFDLCAwWDIwLCAwWDAwLCAwWDAwLCAwWDgwLAorWzBYMjg4OF0gPSAwWDAzLCAwWDIxLCAwWDAwLCAwWDAwLCAwWDQzLAorWzBYMjg5MF0gPSAwWDA5LCAwWDIxLCAwWDAwLCAwWDAwLCAwWDQ2LAorWzBYMjg5OF0gPSAwWDIyLCAwWDIxLCAwWDAwLCAwWDAwLCAwWDk5LAorWzBYMjhBMF0gPSAwWDEyLCAwWDIyLCAwWDAwLCAwWDAwLCAwWDJELAorWzBYMjhBOF0gPSAwWDQ4LCAwWDI0LCAwWDAwLCAwWDAwLCAwWDJELAorWzBYMjhCMF0gPSAwWDYwLCAwWDI0LCAwWDAwLCAwWDAwLCAwWDMxLAorWzBYMjhCOF0gPSAwWDYxLCAwWDI0LCAwWDAwLCAwWDAwLCAwWDMyLAorWzBYMjhDMF0gPSAwWDYyLCAwWDI0LCAwWDAwLCAwWDAwLCAwWDMzLAorWzBYMjhDOF0gPSAwWDYzLCAwWDI0LCAwWDAwLCAwWDAwLCAwWDM0LAorWzBYMjhEMF0gPSAwWDY0LCAwWDI0LCAwWDAwLCAwWDAwLCAwWDM1LAorWzBYMjhEOF0gPSAwWDY1LCAwWDI0LCAwWDAwLCAwWDAwLCAwWDM2LAorWzBYMjhFMF0gPSAwWDY2LCAwWDI0LCAwWDAwLCAwWDAwLCAwWDM3LAorWzBYMjhFOF0gPSAwWDY3LCAwWDI0LCAwWDAwLCAwWDAwLCAwWDM4LAorWzBYMjhGMF0gPSAwWDY4LCAwWDI0LCAwWDAwLCAwWDAwLCAwWDM5LAorWzBYMjhGOF0gPSAwWDlDLCAwWDI0LCAwWDAwLCAwWDAwLCAwWDYxLAorWzBYMjkwMF0gPSAwWDlELCAwWDI0LCAwWDAwLCAwWDAwLCAwWDYyLAorWzBYMjkwOF0gPSAwWDlFLCAwWDI0LCAwWDAwLCAwWDAwLCAwWDYzLAorWzBYMjkxMF0gPSAwWDlGLCAwWDI0LCAwWDAwLCAwWDAwLCAwWDY0LAorWzBYMjkxOF0gPSAwWEEwLCAwWDI0LCAwWDAwLCAwWDAwLCAwWDY1LAorWzBYMjkyMF0gPSAwWEExLCAwWDI0LCAwWDAwLCAwWDAwLCAwWDY2LAorWzBYMjkyOF0gPSAwWEEyLCAwWDI0LCAwWDAwLCAwWDAwLCAwWDY3LAorWzBYMjkzMF0gPSAwWEEzLCAwWDI0LCAwWDAwLCAwWDAwLCAwWDY4LAorWzBYMjkzOF0gPSAwWEE0LCAwWDI0LCAwWDAwLCAwWDAwLCAwWDY5LAorWzBYMjk0MF0gPSAwWEE1LCAwWDI0LCAwWDAwLCAwWDAwLCAwWDZBLAorWzBYMjk0OF0gPSAwWEE2LCAwWDI0LCAwWDAwLCAwWDAwLCAwWDZCLAorWzBYMjk1MF0gPSAwWEE3LCAwWDI0LCAwWDAwLCAwWDAwLCAwWDZDLAorWzBYMjk1OF0gPSAwWEE4LCAwWDI0LCAwWDAwLCAwWDAwLCAwWDZELAorWzBYMjk2MF0gPSAwWEE5LCAwWDI0LCAwWDAwLCAwWDAwLCAwWDZFLAorWzBYMjk2OF0gPSAwWEFBLCAwWDI0LCAwWDAwLCAwWDAwLCAwWDZGLAorWzBYMjk3MF0gPSAwWEFCLCAwWDI0LCAwWDAwLCAwWDAwLCAwWDcwLAorWzBYMjk3OF0gPSAwWEFDLCAwWDI0LCAwWDAwLCAwWDAwLCAwWDcxLAorWzBYMjk4MF0gPSAwWEFELCAwWDI0LCAwWDAwLCAwWDAwLCAwWDcyLAorWzBYMjk4OF0gPSAwWEFFLCAwWDI0LCAwWDAwLCAwWDAwLCAwWDczLAorWzBYMjk5MF0gPSAwWEFGLCAwWDI0LCAwWDAwLCAwWDAwLCAwWDc0LAorWzBYMjk5OF0gPSAwWEIwLCAwWDI0LCAwWDAwLCAwWDAwLCAwWDc1LAorWzBYMjlBMF0gPSAwWEIxLCAwWDI0LCAwWDAwLCAwWDAwLCAwWDc2LAorWzBYMjlBOF0gPSAwWEIyLCAwWDI0LCAwWDAwLCAwWDAwLCAwWDc3LAorWzBYMjlCMF0gPSAwWEIzLCAwWDI0LCAwWDAwLCAwWDAwLCAwWDc4LAorWzBYMjlCOF0gPSAwWEI0LCAwWDI0LCAwWDAwLCAwWDAwLCAwWDc5LAorWzBYMjlDMF0gPSAwWEI1LCAwWDI0LCAwWDAwLCAwWDAwLCAwWDdBLAorWzBYMjlDOF0gPSAwWEI2LCAwWDI0LCAwWDAwLCAwWDAwLCAwWDQxLAorWzBYMjlEMF0gPSAwWEI3LCAwWDI0LCAwWDAwLCAwWDAwLCAwWDQyLAorWzBYMjlEOF0gPSAwWEI4LCAwWDI0LCAwWDAwLCAwWDAwLCAwWDQzLAorWzBYMjlFMF0gPSAwWEI5LCAwWDI0LCAwWDAwLCAwWDAwLCAwWDQ0LAorWzBYMjlFOF0gPSAwWEJBLCAwWDI0LCAwWDAwLCAwWDAwLCAwWDQ1LAorWzBYMjlGMF0gPSAwWEJCLCAwWDI0LCAwWDAwLCAwWDAwLCAwWDQ2LAorWzBYMjlGOF0gPSAwWEJDLCAwWDI0LCAwWDAwLCAwWDAwLCAwWDQ3LAorWzBYMkEwMF0gPSAwWEJELCAwWDI0LCAwWDAwLCAwWDAwLCAwWDQ4LAorWzBYMkEwOF0gPSAwWEJFLCAwWDI0LCAwWDAwLCAwWDAwLCAwWDQ5LAorWzBYMkExMF0gPSAwWEJGLCAwWDI0LCAwWDAwLCAwWDAwLCAwWDRBLAorWzBYMkExOF0gPSAwWEMwLCAwWDI0LCAwWDAwLCAwWDAwLCAwWDRCLAorWzBYMkEyMF0gPSAwWEMxLCAwWDI0LCAwWDAwLCAwWDAwLCAwWDRDLAorWzBYMkEyOF0gPSAwWEMyLCAwWDI0LCAwWDAwLCAwWDAwLCAwWDRELAorWzBYMkEzMF0gPSAwWEMzLCAwWDI0LCAwWDAwLCAwWDAwLCAwWDRFLAorWzBYMkEzOF0gPSAwWEM0LCAwWDI0LCAwWDAwLCAwWDAwLCAwWDRGLAorWzBYMkE0MF0gPSAwWEM1LCAwWDI0LCAwWDAwLCAwWDAwLCAwWDUwLAorWzBYMkE0OF0gPSAwWEM2LCAwWDI0LCAwWDAwLCAwWDAwLCAwWDUxLAorWzBYMkE1MF0gPSAwWEM3LCAwWDI0LCAwWDAwLCAwWDAwLCAwWDUyLAorWzBYMkE1OF0gPSAwWEM4LCAwWDI0LCAwWDAwLCAwWDAwLCAwWDUzLAorWzBYMkE2MF0gPSAwWEM5LCAwWDI0LCAwWDAwLCAwWDAwLCAwWDU0LAorWzBYMkE2OF0gPSAwWENBLCAwWDI0LCAwWDAwLCAwWDAwLCAwWDU1LAorWzBYMkE3MF0gPSAwWENCLCAwWDI0LCAwWDAwLCAwWDAwLCAwWDU2LAorWzBYMkE3OF0gPSAwWENDLCAwWDI0LCAwWDAwLCAwWDAwLCAwWDU3LAorWzBYMkE4MF0gPSAwWENELCAwWDI0LCAwWDAwLCAwWDAwLCAwWDU4LAorWzBYMkE4OF0gPSAwWENFLCAwWDI0LCAwWDAwLCAwWDAwLCAwWDU5LAorWzBYMkE5MF0gPSAwWENGLCAwWDI0LCAwWDAwLCAwWDAwLCAwWDVBLAorWzBYMkE5OF0gPSAwWEQwLCAwWDI0LCAwWDAwLCAwWDAwLCAwWDYxLAorWzBYMkFBMF0gPSAwWEQxLCAwWDI0LCAwWDAwLCAwWDAwLCAwWDYyLAorWzBYMkFBOF0gPSAwWEQyLCAwWDI0LCAwWDAwLCAwWDAwLCAwWDYzLAorWzBYMkFCMF0gPSAwWEQzLCAwWDI0LCAwWDAwLCAwWDAwLCAwWDY0LAorWzBYMkFCOF0gPSAwWEQ0LCAwWDI0LCAwWDAwLCAwWDAwLCAwWDY1LAorWzBYMkFDMF0gPSAwWEQ1LCAwWDI0LCAwWDAwLCAwWDAwLCAwWDY2LAorWzBYMkFDOF0gPSAwWEQ2LCAwWDI0LCAwWDAwLCAwWDAwLCAwWDY3LAorWzBYMkFEMF0gPSAwWEQ3LCAwWDI0LCAwWDAwLCAwWDAwLCAwWDY4LAorWzBYMkFEOF0gPSAwWEQ4LCAwWDI0LCAwWDAwLCAwWDAwLCAwWDY5LAorWzBYMkFFMF0gPSAwWEQ5LCAwWDI0LCAwWDAwLCAwWDAwLCAwWDZBLAorWzBYMkFFOF0gPSAwWERBLCAwWDI0LCAwWDAwLCAwWDAwLCAwWDZCLAorWzBYMkFGMF0gPSAwWERCLCAwWDI0LCAwWDAwLCAwWDAwLCAwWDZDLAorWzBYMkFGOF0gPSAwWERDLCAwWDI0LCAwWDAwLCAwWDAwLCAwWDZELAorWzBYMkIwMF0gPSAwWERELCAwWDI0LCAwWDAwLCAwWDAwLCAwWDZFLAorWzBYMkIwOF0gPSAwWERFLCAwWDI0LCAwWDAwLCAwWDAwLCAwWDZGLAorWzBYMkIxMF0gPSAwWERGLCAwWDI0LCAwWDAwLCAwWDAwLCAwWDcwLAorWzBYMkIxOF0gPSAwWEUwLCAwWDI0LCAwWDAwLCAwWDAwLCAwWDcxLAorWzBYMkIyMF0gPSAwWEUxLCAwWDI0LCAwWDAwLCAwWDAwLCAwWDcyLAorWzBYMkIyOF0gPSAwWEUyLCAwWDI0LCAwWDAwLCAwWDAwLCAwWDczLAorWzBYMkIzMF0gPSAwWEUzLCAwWDI0LCAwWDAwLCAwWDAwLCAwWDc0LAorWzBYMkIzOF0gPSAwWEU0LCAwWDI0LCAwWDAwLCAwWDAwLCAwWDc1LAorWzBYMkI0MF0gPSAwWEU1LCAwWDI0LCAwWDAwLCAwWDAwLCAwWDc2LAorWzBYMkI0OF0gPSAwWEU2LCAwWDI0LCAwWDAwLCAwWDAwLCAwWDc3LAorWzBYMkI1MF0gPSAwWEU3LCAwWDI0LCAwWDAwLCAwWDAwLCAwWDc4LAorWzBYMkI1OF0gPSAwWEU4LCAwWDI0LCAwWDAwLCAwWDAwLCAwWDc5LAorWzBYMkI2MF0gPSAwWEU5LCAwWDI0LCAwWDAwLCAwWDAwLCAwWDdBLAorWzBYMkI2OF0gPSAwWEVBLCAwWDI0LCAwWDAwLCAwWDAwLCAwWDMwLAorWzBYMkI3MF0gPSAwWDFDLCAwWDMwLCAwWDAwLCAwWDAwLCAwWDJELAorWzBYMkI3OF0gPSAwWDMwLCAwWDMwLCAwWDAwLCAwWDAwLCAwWDJELAorWzBYMkI4MF0gPSAwWDU4LCAwWEZFLCAwWDAwLCAwWDAwLCAwWDJELAorWzBYMkI4OF0gPSAwWDYzLCAwWEZFLCAwWDAwLCAwWDAwLCAwWDJELAorWzBYMkI5MF0gPSAwWDBELCAwWEZGLCAwWDAwLCAwWDAwLCAwWDJELAorWzBYMkI5OF0gPSAwWDEwLCAwWEZGLCAwWDAwLCAwWDAwLCAwWDMwLAorWzBYMkJBMF0gPSAwWDExLCAwWEZGLCAwWDAwLCAwWDAwLCAwWDMxLAorWzBYMkJBOF0gPSAwWDEyLCAwWEZGLCAwWDAwLCAwWDAwLCAwWDMyLAorWzBYMkJCMF0gPSAwWDEzLCAwWEZGLCAwWDAwLCAwWDAwLCAwWDMzLAorWzBYMkJCOF0gPSAwWDE0LCAwWEZGLCAwWDAwLCAwWDAwLCAwWDM0LAorWzBYMkJDMF0gPSAwWDE1LCAwWEZGLCAwWDAwLCAwWDAwLCAwWDM1LAorWzBYMkJDOF0gPSAwWDE2LCAwWEZGLCAwWDAwLCAwWDAwLCAwWDM2LAorWzBYMkJEMF0gPSAwWDE3LCAwWEZGLCAwWDAwLCAwWDAwLCAwWDM3LAorWzBYMkJEOF0gPSAwWDE4LCAwWEZGLCAwWDAwLCAwWDAwLCAwWDM4LAorWzBYMkJFMF0gPSAwWDE5LCAwWEZGLCAwWDAwLCAwWDAwLCAwWDM5LAorWzBYMkJFOF0gPSAwWDIxLCAwWEZGLCAwWDAwLCAwWDAwLCAwWDQxLAorWzBYMkJGMF0gPSAwWDIyLCAwWEZGLCAwWDAwLCAwWDAwLCAwWDQyLAorWzBYMkJGOF0gPSAwWDIzLCAwWEZGLCAwWDAwLCAwWDAwLCAwWDQzLAorWzBYMkMwMF0gPSAwWDI0LCAwWEZGLCAwWDAwLCAwWDAwLCAwWDQ0LAorWzBYMkMwOF0gPSAwWDI1LCAwWEZGLCAwWDAwLCAwWDAwLCAwWDQ1LAorWzBYMkMxMF0gPSAwWDI2LCAwWEZGLCAwWDAwLCAwWDAwLCAwWDQ2LAorWzBYMkMxOF0gPSAwWDI3LCAwWEZGLCAwWDAwLCAwWDAwLCAwWDQ3LAorWzBYMkMyMF0gPSAwWDI4LCAwWEZGLCAwWDAwLCAwWDAwLCAwWDQ4LAorWzBYMkMyOF0gPSAwWDI5LCAwWEZGLCAwWDAwLCAwWDAwLCAwWDQ5LAorWzBYMkMzMF0gPSAwWDJBLCAwWEZGLCAwWDAwLCAwWDAwLCAwWDRBLAorWzBYMkMzOF0gPSAwWDJCLCAwWEZGLCAwWDAwLCAwWDAwLCAwWDRCLAorWzBYMkM0MF0gPSAwWDJDLCAwWEZGLCAwWDAwLCAwWDAwLCAwWDRDLAorWzBYMkM0OF0gPSAwWDJELCAwWEZGLCAwWDAwLCAwWDAwLCAwWDRELAorWzBYMkM1MF0gPSAwWDJFLCAwWEZGLCAwWDAwLCAwWDAwLCAwWDRFLAorWzBYMkM1OF0gPSAwWDJGLCAwWEZGLCAwWDAwLCAwWDAwLCAwWDRGLAorWzBYMkM2MF0gPSAwWDMwLCAwWEZGLCAwWDAwLCAwWDAwLCAwWDUwLAorWzBYMkM2OF0gPSAwWDMxLCAwWEZGLCAwWDAwLCAwWDAwLCAwWDUxLAorWzBYMkM3MF0gPSAwWDMyLCAwWEZGLCAwWDAwLCAwWDAwLCAwWDUyLAorWzBYMkM3OF0gPSAwWDMzLCAwWEZGLCAwWDAwLCAwWDAwLCAwWDUzLAorWzBYMkM4MF0gPSAwWDM0LCAwWEZGLCAwWDAwLCAwWDAwLCAwWDU0LAorWzBYMkM4OF0gPSAwWDM1LCAwWEZGLCAwWDAwLCAwWDAwLCAwWDU1LAorWzBYMkM5MF0gPSAwWDM2LCAwWEZGLCAwWDAwLCAwWDAwLCAwWDU2LAorWzBYMkM5OF0gPSAwWDM3LCAwWEZGLCAwWDAwLCAwWDAwLCAwWDU3LAorWzBYMkNBMF0gPSAwWDM4LCAwWEZGLCAwWDAwLCAwWDAwLCAwWDU4LAorWzBYMkNBOF0gPSAwWDM5LCAwWEZGLCAwWDAwLCAwWDAwLCAwWDU5LAorWzBYMkNCMF0gPSAwWDNBLCAwWEZGLCAwWDAwLCAwWDAwLCAwWDVBLAorWzBYMkNCOF0gPSAwWDQxLCAwWEZGLCAwWDAwLCAwWDAwLCAwWDYxLAorWzBYMkNDMF0gPSAwWDQyLCAwWEZGLCAwWDAwLCAwWDAwLCAwWDYyLAorWzBYMkNDOF0gPSAwWDQzLCAwWEZGLCAwWDAwLCAwWDAwLCAwWDYzLAorWzBYMkNEMF0gPSAwWDQ0LCAwWEZGLCAwWDAwLCAwWDAwLCAwWDY0LAorWzBYMkNEOF0gPSAwWDQ1LCAwWEZGLCAwWDAwLCAwWDAwLCAwWDY1LAorWzBYMkNFMF0gPSAwWDQ2LCAwWEZGLCAwWDAwLCAwWDAwLCAwWDY2LAorWzBYMkNFOF0gPSAwWDQ3LCAwWEZGLCAwWDAwLCAwWDAwLCAwWDY3LAorWzBYMkNGMF0gPSAwWDQ4LCAwWEZGLCAwWDAwLCAwWDAwLCAwWDY4LAorWzBYMkNGOF0gPSAwWDQ5LCAwWEZGLCAwWDAwLCAwWDAwLCAwWDY5LAorWzBYMkQwMF0gPSAwWDRBLCAwWEZGLCAwWDAwLCAwWDAwLCAwWDZBLAorWzBYMkQwOF0gPSAwWDRCLCAwWEZGLCAwWDAwLCAwWDAwLCAwWDZCLAorWzBYMkQxMF0gPSAwWDRDLCAwWEZGLCAwWDAwLCAwWDAwLCAwWDZDLAorWzBYMkQxOF0gPSAwWDRELCAwWEZGLCAwWDAwLCAwWDAwLCAwWDZELAorWzBYMkQyMF0gPSAwWDRFLCAwWEZGLCAwWDAwLCAwWDAwLCAwWDZFLAorWzBYMkQyOF0gPSAwWDRGLCAwWEZGLCAwWDAwLCAwWDAwLCAwWDZGLAorWzBYMkQzMF0gPSAwWDUwLCAwWEZGLCAwWDAwLCAwWDAwLCAwWDcwLAorWzBYMkQzOF0gPSAwWDUxLCAwWEZGLCAwWDAwLCAwWDAwLCAwWDcxLAorWzBYMkQ0MF0gPSAwWDUyLCAwWEZGLCAwWDAwLCAwWDAwLCAwWDcyLAorWzBYMkQ0OF0gPSAwWDUzLCAwWEZGLCAwWDAwLCAwWDAwLCAwWDczLAorWzBYMkQ1MF0gPSAwWDU0LCAwWEZGLCAwWDAwLCAwWDAwLCAwWDc0LAorWzBYMkQ1OF0gPSAwWDU1LCAwWEZGLCAwWDAwLCAwWDAwLCAwWDc1LAorWzBYMkQ2MF0gPSAwWDU2LCAwWEZGLCAwWDAwLCAwWDAwLCAwWDc2LAorWzBYMkQ2OF0gPSAwWDU3LCAwWEZGLCAwWDAwLCAwWDAwLCAwWDc3LAorWzBYMkQ3MF0gPSAwWDU4LCAwWEZGLCAwWDAwLCAwWDAwLCAwWDc4LAorWzBYMkQ3OF0gPSAwWDU5LCAwWEZGLCAwWDAwLCAwWDAwLCAwWDc5LAorWzBYMkQ4MF0gPSAwWDVBLCAwWEZGLCAwWDAwLCAwWDAwLCAwWDdBLAorWzBYMkQ4OV0gPSAwWEQ0LCAwWDAxLCAwWDAwLCAwWDQxLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDAxLAorWzBYMkQ5MV0gPSAwWEQ0LCAwWDAxLCAwWDAwLCAwWDQyLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDAyLAorWzBYMkQ5OV0gPSAwWEQ0LCAwWDAxLCAwWDAwLCAwWDQzLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDAzLAorWzBYMkRBMV0gPSAwWEQ0LCAwWDAxLCAwWDAwLCAwWDQ0LCAwWDAwLCAwWDAwLCAwWDAwLCAwWDA0LAorWzBYMkRBOV0gPSAwWEQ0LCAwWDAxLCAwWDAwLCAwWDQ1LCAwWDAwLCAwWDAwLCAwWDAwLCAwWDA1LAorWzBYMkRCMV0gPSAwWEQ0LCAwWDAxLCAwWDAwLCAwWDQ2LCAwWDAwLCAwWDAwLCAwWDAwLCAwWDA2LAorWzBYMkRCOV0gPSAwWEQ0LCAwWDAxLCAwWDAwLCAwWDQ3LCAwWDAwLCAwWDAwLCAwWDAwLCAwWDA3LAorWzBYMkRDMV0gPSAwWEQ0LCAwWDAxLCAwWDAwLCAwWDQ4LCAwWDAwLCAwWDAwLCAwWDAwLCAwWDA4LAorWzBYMkRDOV0gPSAwWEQ0LCAwWDAxLCAwWDAwLCAwWDQ5LCAwWDAwLCAwWDAwLCAwWDAwLCAwWDA5LAorWzBYMkREMV0gPSAwWEQ0LCAwWDAxLCAwWDAwLCAwWDRBLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDBBLAorWzBYMkREOV0gPSAwWEQ0LCAwWDAxLCAwWDAwLCAwWDRCLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDBCLAorWzBYMkRFMV0gPSAwWEQ0LCAwWDAxLCAwWDAwLCAwWDRDLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDBDLAorWzBYMkRFOV0gPSAwWEQ0LCAwWDAxLCAwWDAwLCAwWDRELCAwWDAwLCAwWDAwLCAwWDAwLCAwWDBELAorWzBYMkRGMV0gPSAwWEQ0LCAwWDAxLCAwWDAwLCAwWDRFLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDBFLAorWzBYMkRGOV0gPSAwWEQ0LCAwWDAxLCAwWDAwLCAwWDRGLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDBGLAorWzBYMkUwMV0gPSAwWEQ0LCAwWDAxLCAwWDAwLCAwWDUwLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDEwLAorWzBYMkUwOV0gPSAwWEQ0LCAwWDAxLCAwWDAwLCAwWDUxLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDExLAorWzBYMkUxMV0gPSAwWEQ0LCAwWDAxLCAwWDAwLCAwWDUyLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDEyLAorWzBYMkUxOV0gPSAwWEQ0LCAwWDAxLCAwWDAwLCAwWDUzLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDEzLAorWzBYMkUyMV0gPSAwWEQ0LCAwWDAxLCAwWDAwLCAwWDU0LCAwWDAwLCAwWDAwLCAwWDAwLCAwWDE0LAorWzBYMkUyOV0gPSAwWEQ0LCAwWDAxLCAwWDAwLCAwWDU1LCAwWDAwLCAwWDAwLCAwWDAwLCAwWDE1LAorWzBYMkUzMV0gPSAwWEQ0LCAwWDAxLCAwWDAwLCAwWDU2LCAwWDAwLCAwWDAwLCAwWDAwLCAwWDE2LAorWzBYMkUzOV0gPSAwWEQ0LCAwWDAxLCAwWDAwLCAwWDU3LCAwWDAwLCAwWDAwLCAwWDAwLCAwWDE3LAorWzBYMkU0MV0gPSAwWEQ0LCAwWDAxLCAwWDAwLCAwWDU4LCAwWDAwLCAwWDAwLCAwWDAwLCAwWDE4LAorWzBYMkU0OV0gPSAwWEQ0LCAwWDAxLCAwWDAwLCAwWDU5LCAwWDAwLCAwWDAwLCAwWDAwLCAwWDE5LAorWzBYMkU1MV0gPSAwWEQ0LCAwWDAxLCAwWDAwLCAwWDVBLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDFBLAorWzBYMkU1OV0gPSAwWEQ0LCAwWDAxLCAwWDAwLCAwWDYxLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDFCLAorWzBYMkU2MV0gPSAwWEQ0LCAwWDAxLCAwWDAwLCAwWDYyLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDFDLAorWzBYMkU2OV0gPSAwWEQ0LCAwWDAxLCAwWDAwLCAwWDYzLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDFELAorWzBYMkU3MV0gPSAwWEQ0LCAwWDAxLCAwWDAwLCAwWDY0LCAwWDAwLCAwWDAwLCAwWDAwLCAwWDFFLAorWzBYMkU3OV0gPSAwWEQ0LCAwWDAxLCAwWDAwLCAwWDY1LCAwWDAwLCAwWDAwLCAwWDAwLCAwWDFGLAorWzBYMkU4MV0gPSAwWEQ0LCAwWDAxLCAwWDAwLCAwWDY2LCAwWDAwLCAwWDAwLCAwWDAwLCAwWDIwLAorWzBYMkU4OV0gPSAwWEQ0LCAwWDAxLCAwWDAwLCAwWDY3LCAwWDAwLCAwWDAwLCAwWDAwLCAwWDIxLAorWzBYMkU5MV0gPSAwWEQ0LCAwWDAxLCAwWDAwLCAwWDY4LCAwWDAwLCAwWDAwLCAwWDAwLCAwWDIyLAorWzBYMkU5OV0gPSAwWEQ0LCAwWDAxLCAwWDAwLCAwWDY5LCAwWDAwLCAwWDAwLCAwWDAwLCAwWDIzLAorWzBYMkVBMV0gPSAwWEQ0LCAwWDAxLCAwWDAwLCAwWDZBLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDI0LAorWzBYMkVBOV0gPSAwWEQ0LCAwWDAxLCAwWDAwLCAwWDZCLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDI1LAorWzBYMkVCMV0gPSAwWEQ0LCAwWDAxLCAwWDAwLCAwWDZDLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDI2LAorWzBYMkVCOV0gPSAwWEQ0LCAwWDAxLCAwWDAwLCAwWDZELCAwWDAwLCAwWDAwLCAwWDAwLCAwWDI3LAorWzBYMkVDMV0gPSAwWEQ0LCAwWDAxLCAwWDAwLCAwWDZFLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDI4LAorWzBYMkVDOV0gPSAwWEQ0LCAwWDAxLCAwWDAwLCAwWDZGLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDI5LAorWzBYMkVEMV0gPSAwWEQ0LCAwWDAxLCAwWDAwLCAwWDcwLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDJBLAorWzBYMkVEOV0gPSAwWEQ0LCAwWDAxLCAwWDAwLCAwWDcxLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDJCLAorWzBYMkVFMV0gPSAwWEQ0LCAwWDAxLCAwWDAwLCAwWDcyLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDJDLAorWzBYMkVFOV0gPSAwWEQ0LCAwWDAxLCAwWDAwLCAwWDczLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDJELAorWzBYMkVGMV0gPSAwWEQ0LCAwWDAxLCAwWDAwLCAwWDc0LCAwWDAwLCAwWDAwLCAwWDAwLCAwWDJFLAorWzBYMkVGOV0gPSAwWEQ0LCAwWDAxLCAwWDAwLCAwWDc1LCAwWDAwLCAwWDAwLCAwWDAwLCAwWDJGLAorWzBYMkYwMV0gPSAwWEQ0LCAwWDAxLCAwWDAwLCAwWDc2LCAwWDAwLCAwWDAwLCAwWDAwLCAwWDMwLAorWzBYMkYwOV0gPSAwWEQ0LCAwWDAxLCAwWDAwLCAwWDc3LCAwWDAwLCAwWDAwLCAwWDAwLCAwWDMxLAorWzBYMkYxMV0gPSAwWEQ0LCAwWDAxLCAwWDAwLCAwWDc4LCAwWDAwLCAwWDAwLCAwWDAwLCAwWDMyLAorWzBYMkYxOV0gPSAwWEQ0LCAwWDAxLCAwWDAwLCAwWDc5LCAwWDAwLCAwWDAwLCAwWDAwLCAwWDMzLAorWzBYMkYyMV0gPSAwWEQ0LCAwWDAxLCAwWDAwLCAwWDdBLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDM0LAorWzBYMkYyOV0gPSAwWEQ0LCAwWDAxLCAwWDAwLCAwWDQxLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDM1LAorWzBYMkYzMV0gPSAwWEQ0LCAwWDAxLCAwWDAwLCAwWDQyLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDM2LAorWzBYMkYzOV0gPSAwWEQ0LCAwWDAxLCAwWDAwLCAwWDQzLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDM3LAorWzBYMkY0MV0gPSAwWEQ0LCAwWDAxLCAwWDAwLCAwWDQ0LCAwWDAwLCAwWDAwLCAwWDAwLCAwWDM4LAorWzBYMkY0OV0gPSAwWEQ0LCAwWDAxLCAwWDAwLCAwWDQ1LCAwWDAwLCAwWDAwLCAwWDAwLCAwWDM5LAorWzBYMkY1MV0gPSAwWEQ0LCAwWDAxLCAwWDAwLCAwWDQ2LCAwWDAwLCAwWDAwLCAwWDAwLCAwWDNBLAorWzBYMkY1OV0gPSAwWEQ0LCAwWDAxLCAwWDAwLCAwWDQ3LCAwWDAwLCAwWDAwLCAwWDAwLCAwWDNCLAorWzBYMkY2MV0gPSAwWEQ0LCAwWDAxLCAwWDAwLCAwWDQ4LCAwWDAwLCAwWDAwLCAwWDAwLCAwWDNDLAorWzBYMkY2OV0gPSAwWEQ0LCAwWDAxLCAwWDAwLCAwWDQ5LCAwWDAwLCAwWDAwLCAwWDAwLCAwWDNELAorWzBYMkY3MV0gPSAwWEQ0LCAwWDAxLCAwWDAwLCAwWDRBLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDNFLAorWzBYMkY3OV0gPSAwWEQ0LCAwWDAxLCAwWDAwLCAwWDRCLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDNGLAorWzBYMkY4MV0gPSAwWEQ0LCAwWDAxLCAwWDAwLCAwWDRDLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDQwLAorWzBYMkY4OV0gPSAwWEQ0LCAwWDAxLCAwWDAwLCAwWDRELCAwWDAwLCAwWDAwLCAwWDAwLCAwWDQxLAorWzBYMkY5MV0gPSAwWEQ0LCAwWDAxLCAwWDAwLCAwWDRFLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDQyLAorWzBYMkY5OV0gPSAwWEQ0LCAwWDAxLCAwWDAwLCAwWDRGLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDQzLAorWzBYMkZBMV0gPSAwWEQ0LCAwWDAxLCAwWDAwLCAwWDUwLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDQ0LAorWzBYMkZBOV0gPSAwWEQ0LCAwWDAxLCAwWDAwLCAwWDUxLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDQ1LAorWzBYMkZCMV0gPSAwWEQ0LCAwWDAxLCAwWDAwLCAwWDUyLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDQ2LAorWzBYMkZCOV0gPSAwWEQ0LCAwWDAxLCAwWDAwLCAwWDUzLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDQ3LAorWzBYMkZDMV0gPSAwWEQ0LCAwWDAxLCAwWDAwLCAwWDU0LCAwWDAwLCAwWDAwLCAwWDAwLCAwWDQ4LAorWzBYMkZDOV0gPSAwWEQ0LCAwWDAxLCAwWDAwLCAwWDU1LCAwWDAwLCAwWDAwLCAwWDAwLCAwWDQ5LAorWzBYMkZEMV0gPSAwWEQ0LCAwWDAxLCAwWDAwLCAwWDU2LCAwWDAwLCAwWDAwLCAwWDAwLCAwWDRBLAorWzBYMkZEOV0gPSAwWEQ0LCAwWDAxLCAwWDAwLCAwWDU3LCAwWDAwLCAwWDAwLCAwWDAwLCAwWDRCLAorWzBYMkZFMV0gPSAwWEQ0LCAwWDAxLCAwWDAwLCAwWDU4LCAwWDAwLCAwWDAwLCAwWDAwLCAwWDRDLAorWzBYMkZFOV0gPSAwWEQ0LCAwWDAxLCAwWDAwLCAwWDU5LCAwWDAwLCAwWDAwLCAwWDAwLCAwWDRELAorWzBYMkZGMV0gPSAwWEQ0LCAwWDAxLCAwWDAwLCAwWDVBLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDRFLAorWzBYMkZGOV0gPSAwWEQ0LCAwWDAxLCAwWDAwLCAwWDYxLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDRGLAorWzBYMzAwMV0gPSAwWEQ0LCAwWDAxLCAwWDAwLCAwWDYyLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDUwLAorWzBYMzAwOV0gPSAwWEQ0LCAwWDAxLCAwWDAwLCAwWDYzLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDUxLAorWzBYMzAxMV0gPSAwWEQ0LCAwWDAxLCAwWDAwLCAwWDY0LCAwWDAwLCAwWDAwLCAwWDAwLCAwWDUyLAorWzBYMzAxOV0gPSAwWEQ0LCAwWDAxLCAwWDAwLCAwWDY1LCAwWDAwLCAwWDAwLCAwWDAwLCAwWDUzLAorWzBYMzAyMV0gPSAwWEQ0LCAwWDAxLCAwWDAwLCAwWDY2LCAwWDAwLCAwWDAwLCAwWDAwLCAwWDU0LAorWzBYMzAyOV0gPSAwWEQ0LCAwWDAxLCAwWDAwLCAwWDY3LCAwWDAwLCAwWDAwLCAwWDAwLCAwWDU1LAorWzBYMzAzMV0gPSAwWEQ0LCAwWDAxLCAwWDAwLCAwWDY4LCAwWDAwLCAwWDAwLCAwWDAwLCAwWDU2LAorWzBYMzAzOV0gPSAwWEQ0LCAwWDAxLCAwWDAwLCAwWDY5LCAwWDAwLCAwWDAwLCAwWDAwLCAwWDU3LAorWzBYMzA0MV0gPSAwWEQ0LCAwWDAxLCAwWDAwLCAwWDZBLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDU4LAorWzBYMzA0OV0gPSAwWEQ0LCAwWDAxLCAwWDAwLCAwWDZCLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDU5LAorWzBYMzA1MV0gPSAwWEQ0LCAwWDAxLCAwWDAwLCAwWDZDLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDVBLAorWzBYMzA1OV0gPSAwWEQ0LCAwWDAxLCAwWDAwLCAwWDZELCAwWDAwLCAwWDAwLCAwWDAwLCAwWDVCLAorWzBYMzA2MV0gPSAwWEQ0LCAwWDAxLCAwWDAwLCAwWDZFLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDVDLAorWzBYMzA2OV0gPSAwWEQ0LCAwWDAxLCAwWDAwLCAwWDZGLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDVELAorWzBYMzA3MV0gPSAwWEQ0LCAwWDAxLCAwWDAwLCAwWDcwLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDVFLAorWzBYMzA3OV0gPSAwWEQ0LCAwWDAxLCAwWDAwLCAwWDcxLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDVGLAorWzBYMzA4MV0gPSAwWEQ0LCAwWDAxLCAwWDAwLCAwWDcyLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDYwLAorWzBYMzA4OV0gPSAwWEQ0LCAwWDAxLCAwWDAwLCAwWDczLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDYxLAorWzBYMzA5MV0gPSAwWEQ0LCAwWDAxLCAwWDAwLCAwWDc0LCAwWDAwLCAwWDAwLCAwWDAwLCAwWDYyLAorWzBYMzA5OV0gPSAwWEQ0LCAwWDAxLCAwWDAwLCAwWDc1LCAwWDAwLCAwWDAwLCAwWDAwLCAwWDYzLAorWzBYMzBBMV0gPSAwWEQ0LCAwWDAxLCAwWDAwLCAwWDc2LCAwWDAwLCAwWDAwLCAwWDAwLCAwWDY0LAorWzBYMzBBOV0gPSAwWEQ0LCAwWDAxLCAwWDAwLCAwWDc3LCAwWDAwLCAwWDAwLCAwWDAwLCAwWDY1LAorWzBYMzBCMV0gPSAwWEQ0LCAwWDAxLCAwWDAwLCAwWDc4LCAwWDAwLCAwWDAwLCAwWDAwLCAwWDY2LAorWzBYMzBCOV0gPSAwWEQ0LCAwWDAxLCAwWDAwLCAwWDc5LCAwWDAwLCAwWDAwLCAwWDAwLCAwWDY3LAorWzBYMzBDMV0gPSAwWEQ0LCAwWDAxLCAwWDAwLCAwWDdBLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDY4LAorWzBYMzBDOV0gPSAwWEQ0LCAwWDAxLCAwWDAwLCAwWDQxLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDY5LAorWzBYMzBEMV0gPSAwWEQ0LCAwWDAxLCAwWDAwLCAwWDQyLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDZBLAorWzBYMzBEOV0gPSAwWEQ0LCAwWDAxLCAwWDAwLCAwWDQzLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDZCLAorWzBYMzBFMV0gPSAwWEQ0LCAwWDAxLCAwWDAwLCAwWDQ0LCAwWDAwLCAwWDAwLCAwWDAwLCAwWDZDLAorWzBYMzBFOV0gPSAwWEQ0LCAwWDAxLCAwWDAwLCAwWDQ1LCAwWDAwLCAwWDAwLCAwWDAwLCAwWDZELAorWzBYMzBGMV0gPSAwWEQ0LCAwWDAxLCAwWDAwLCAwWDQ2LCAwWDAwLCAwWDAwLCAwWDAwLCAwWDZFLAorWzBYMzBGOV0gPSAwWEQ0LCAwWDAxLCAwWDAwLCAwWDQ3LCAwWDAwLCAwWDAwLCAwWDAwLCAwWDZGLAorWzBYMzEwMV0gPSAwWEQ0LCAwWDAxLCAwWDAwLCAwWDQ4LCAwWDAwLCAwWDAwLCAwWDAwLCAwWDcwLAorWzBYMzEwOV0gPSAwWEQ0LCAwWDAxLCAwWDAwLCAwWDQ5LCAwWDAwLCAwWDAwLCAwWDAwLCAwWDcxLAorWzBYMzExMV0gPSAwWEQ0LCAwWDAxLCAwWDAwLCAwWDRBLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDcyLAorWzBYMzExOV0gPSAwWEQ0LCAwWDAxLCAwWDAwLCAwWDRCLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDczLAorWzBYMzEyMV0gPSAwWEQ0LCAwWDAxLCAwWDAwLCAwWDRDLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDc0LAorWzBYMzEyOV0gPSAwWEQ0LCAwWDAxLCAwWDAwLCAwWDRELCAwWDAwLCAwWDAwLCAwWDAwLCAwWDc1LAorWzBYMzEzMV0gPSAwWEQ0LCAwWDAxLCAwWDAwLCAwWDRFLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDc2LAorWzBYMzEzOV0gPSAwWEQ0LCAwWDAxLCAwWDAwLCAwWDRGLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDc3LAorWzBYMzE0MV0gPSAwWEQ0LCAwWDAxLCAwWDAwLCAwWDUwLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDc4LAorWzBYMzE0OV0gPSAwWEQ0LCAwWDAxLCAwWDAwLCAwWDUxLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDc5LAorWzBYMzE1MV0gPSAwWEQ0LCAwWDAxLCAwWDAwLCAwWDUyLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDdBLAorWzBYMzE1OV0gPSAwWEQ0LCAwWDAxLCAwWDAwLCAwWDUzLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDdCLAorWzBYMzE2MV0gPSAwWEQ0LCAwWDAxLCAwWDAwLCAwWDU0LCAwWDAwLCAwWDAwLCAwWDAwLCAwWDdDLAorWzBYMzE2OV0gPSAwWEQ0LCAwWDAxLCAwWDAwLCAwWDU1LCAwWDAwLCAwWDAwLCAwWDAwLCAwWDdELAorWzBYMzE3MV0gPSAwWEQ0LCAwWDAxLCAwWDAwLCAwWDU2LCAwWDAwLCAwWDAwLCAwWDAwLCAwWDdFLAorWzBYMzE3OV0gPSAwWEQ0LCAwWDAxLCAwWDAwLCAwWDU3LCAwWDAwLCAwWDAwLCAwWDAwLCAwWDdGLAorWzBYMzE4MV0gPSAwWEQ0LCAwWDAxLCAwWDAwLCAwWDU4LCAwWDAwLCAwWDAwLCAwWDAwLCAwWDgwLAorWzBYMzE4OV0gPSAwWEQ0LCAwWDAxLCAwWDAwLCAwWDU5LCAwWDAwLCAwWDAwLCAwWDAwLCAwWDgxLAorWzBYMzE5MV0gPSAwWEQ0LCAwWDAxLCAwWDAwLCAwWDVBLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDgyLAorWzBYMzE5OV0gPSAwWEQ0LCAwWDAxLCAwWDAwLCAwWDYxLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDgzLAorWzBYMzFBMV0gPSAwWEQ0LCAwWDAxLCAwWDAwLCAwWDYyLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDg0LAorWzBYMzFBOV0gPSAwWEQ0LCAwWDAxLCAwWDAwLCAwWDYzLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDg1LAorWzBYMzFCMV0gPSAwWEQ0LCAwWDAxLCAwWDAwLCAwWDY0LCAwWDAwLCAwWDAwLCAwWDAwLCAwWDg2LAorWzBYMzFCOV0gPSAwWEQ0LCAwWDAxLCAwWDAwLCAwWDY1LCAwWDAwLCAwWDAwLCAwWDAwLCAwWDg3LAorWzBYMzFDMV0gPSAwWEQ0LCAwWDAxLCAwWDAwLCAwWDY2LCAwWDAwLCAwWDAwLCAwWDAwLCAwWDg4LAorWzBYMzFDOV0gPSAwWEQ0LCAwWDAxLCAwWDAwLCAwWDY3LCAwWDAwLCAwWDAwLCAwWDAwLCAwWDg5LAorWzBYMzFEMV0gPSAwWEQ0LCAwWDAxLCAwWDAwLCAwWDY4LCAwWDAwLCAwWDAwLCAwWDAwLCAwWDhBLAorWzBYMzFEOV0gPSAwWEQ0LCAwWDAxLCAwWDAwLCAwWDY5LCAwWDAwLCAwWDAwLCAwWDAwLCAwWDhCLAorWzBYMzFFMV0gPSAwWEQ0LCAwWDAxLCAwWDAwLCAwWDZBLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDhDLAorWzBYMzFFOV0gPSAwWEQ0LCAwWDAxLCAwWDAwLCAwWDZCLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDhELAorWzBYMzFGMV0gPSAwWEQ0LCAwWDAxLCAwWDAwLCAwWDZDLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDhFLAorWzBYMzFGOV0gPSAwWEQ0LCAwWDAxLCAwWDAwLCAwWDZELCAwWDAwLCAwWDAwLCAwWDAwLCAwWDhGLAorWzBYMzIwMV0gPSAwWEQ0LCAwWDAxLCAwWDAwLCAwWDZFLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDkwLAorWzBYMzIwOV0gPSAwWEQ0LCAwWDAxLCAwWDAwLCAwWDZGLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDkxLAorWzBYMzIxMV0gPSAwWEQ0LCAwWDAxLCAwWDAwLCAwWDcwLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDkyLAorWzBYMzIxOV0gPSAwWEQ0LCAwWDAxLCAwWDAwLCAwWDcxLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDkzLAorWzBYMzIyMV0gPSAwWEQ0LCAwWDAxLCAwWDAwLCAwWDcyLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDk0LAorWzBYMzIyOV0gPSAwWEQ0LCAwWDAxLCAwWDAwLCAwWDczLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDk1LAorWzBYMzIzMV0gPSAwWEQ0LCAwWDAxLCAwWDAwLCAwWDc0LCAwWDAwLCAwWDAwLCAwWDAwLCAwWDk2LAorWzBYMzIzOV0gPSAwWEQ0LCAwWDAxLCAwWDAwLCAwWDc1LCAwWDAwLCAwWDAwLCAwWDAwLCAwWDk3LAorWzBYMzI0MV0gPSAwWEQ0LCAwWDAxLCAwWDAwLCAwWDc2LCAwWDAwLCAwWDAwLCAwWDAwLCAwWDk4LAorWzBYMzI0OV0gPSAwWEQ0LCAwWDAxLCAwWDAwLCAwWDc3LCAwWDAwLCAwWDAwLCAwWDAwLCAwWDk5LAorWzBYMzI1MV0gPSAwWEQ0LCAwWDAxLCAwWDAwLCAwWDc4LCAwWDAwLCAwWDAwLCAwWDAwLCAwWDlBLAorWzBYMzI1OV0gPSAwWEQ0LCAwWDAxLCAwWDAwLCAwWDc5LCAwWDAwLCAwWDAwLCAwWDAwLCAwWDlCLAorWzBYMzI2MV0gPSAwWEQ0LCAwWDAxLCAwWDAwLCAwWDdBLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDlDLAorWzBYMzI2OV0gPSAwWEQ0LCAwWDAxLCAwWDAwLCAwWDQxLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDlELAorWzBYMzI3MV0gPSAwWEQ0LCAwWDAxLCAwWDAwLCAwWDQyLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDlFLAorWzBYMzI3OV0gPSAwWEQ0LCAwWDAxLCAwWDAwLCAwWDQzLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDlGLAorWzBYMzI4MV0gPSAwWEQ0LCAwWDAxLCAwWDAwLCAwWDQ0LCAwWDAwLCAwWDAwLCAwWDAwLCAwWEEwLAorWzBYMzI4OV0gPSAwWEQ0LCAwWDAxLCAwWDAwLCAwWDQ1LCAwWDAwLCAwWDAwLCAwWDAwLCAwWEExLAorWzBYMzI5MV0gPSAwWEQ0LCAwWDAxLCAwWDAwLCAwWDQ2LCAwWDAwLCAwWDAwLCAwWDAwLCAwWEEyLAorWzBYMzI5OV0gPSAwWEQ0LCAwWDAxLCAwWDAwLCAwWDQ3LCAwWDAwLCAwWDAwLCAwWDAwLCAwWEEzLAorWzBYMzJBMV0gPSAwWEQ0LCAwWDAxLCAwWDAwLCAwWDQ4LCAwWDAwLCAwWDAwLCAwWDAwLCAwWEE0LAorWzBYMzJBOV0gPSAwWEQ0LCAwWDAxLCAwWDAwLCAwWDQ5LCAwWDAwLCAwWDAwLCAwWDAwLCAwWEE1LAorWzBYMzJCMV0gPSAwWEQ0LCAwWDAxLCAwWDAwLCAwWDRBLCAwWDAwLCAwWDAwLCAwWDAwLCAwWEE2LAorWzBYMzJCOV0gPSAwWEQ0LCAwWDAxLCAwWDAwLCAwWDRCLCAwWDAwLCAwWDAwLCAwWDAwLCAwWEE3LAorWzBYMzJDMV0gPSAwWEQ0LCAwWDAxLCAwWDAwLCAwWDRDLCAwWDAwLCAwWDAwLCAwWDAwLCAwWEE4LAorWzBYMzJDOV0gPSAwWEQ0LCAwWDAxLCAwWDAwLCAwWDRELCAwWDAwLCAwWDAwLCAwWDAwLCAwWEE5LAorWzBYMzJEMV0gPSAwWEQ0LCAwWDAxLCAwWDAwLCAwWDRFLCAwWDAwLCAwWDAwLCAwWDAwLCAwWEFBLAorWzBYMzJEOV0gPSAwWEQ0LCAwWDAxLCAwWDAwLCAwWDRGLCAwWDAwLCAwWDAwLCAwWDAwLCAwWEFCLAorWzBYMzJFMV0gPSAwWEQ0LCAwWDAxLCAwWDAwLCAwWDUwLCAwWDAwLCAwWDAwLCAwWDAwLCAwWEFDLAorWzBYMzJFOV0gPSAwWEQ0LCAwWDAxLCAwWDAwLCAwWDUxLCAwWDAwLCAwWDAwLCAwWDAwLCAwWEFELAorWzBYMzJGMV0gPSAwWEQ0LCAwWDAxLCAwWDAwLCAwWDUyLCAwWDAwLCAwWDAwLCAwWDAwLCAwWEFFLAorWzBYMzJGOV0gPSAwWEQ0LCAwWDAxLCAwWDAwLCAwWDUzLCAwWDAwLCAwWDAwLCAwWDAwLCAwWEFGLAorWzBYMzMwMV0gPSAwWEQ0LCAwWDAxLCAwWDAwLCAwWDU0LCAwWDAwLCAwWDAwLCAwWDAwLCAwWEIwLAorWzBYMzMwOV0gPSAwWEQ0LCAwWDAxLCAwWDAwLCAwWDU1LCAwWDAwLCAwWDAwLCAwWDAwLCAwWEIxLAorWzBYMzMxMV0gPSAwWEQ0LCAwWDAxLCAwWDAwLCAwWDU2LCAwWDAwLCAwWDAwLCAwWDAwLCAwWEIyLAorWzBYMzMxOV0gPSAwWEQ0LCAwWDAxLCAwWDAwLCAwWDU3LCAwWDAwLCAwWDAwLCAwWDAwLCAwWEIzLAorWzBYMzMyMV0gPSAwWEQ0LCAwWDAxLCAwWDAwLCAwWDU4LCAwWDAwLCAwWDAwLCAwWDAwLCAwWEI0LAorWzBYMzMyOV0gPSAwWEQ0LCAwWDAxLCAwWDAwLCAwWDU5LCAwWDAwLCAwWDAwLCAwWDAwLCAwWEI1LAorWzBYMzMzMV0gPSAwWEQ0LCAwWDAxLCAwWDAwLCAwWDVBLCAwWDAwLCAwWDAwLCAwWDAwLCAwWEI2LAorWzBYMzMzOV0gPSAwWEQ0LCAwWDAxLCAwWDAwLCAwWDYxLCAwWDAwLCAwWDAwLCAwWDAwLCAwWEI3LAorWzBYMzM0MV0gPSAwWEQ0LCAwWDAxLCAwWDAwLCAwWDYyLCAwWDAwLCAwWDAwLCAwWDAwLCAwWEI4LAorWzBYMzM0OV0gPSAwWEQ0LCAwWDAxLCAwWDAwLCAwWDYzLCAwWDAwLCAwWDAwLCAwWDAwLCAwWEI5LAorWzBYMzM1MV0gPSAwWEQ0LCAwWDAxLCAwWDAwLCAwWDY0LCAwWDAwLCAwWDAwLCAwWDAwLCAwWEJBLAorWzBYMzM1OV0gPSAwWEQ0LCAwWDAxLCAwWDAwLCAwWDY1LCAwWDAwLCAwWDAwLCAwWDAwLCAwWEJCLAorWzBYMzM2MV0gPSAwWEQ0LCAwWDAxLCAwWDAwLCAwWDY2LCAwWDAwLCAwWDAwLCAwWDAwLCAwWEJDLAorWzBYMzM2OV0gPSAwWEQ0LCAwWDAxLCAwWDAwLCAwWDY3LCAwWDAwLCAwWDAwLCAwWDAwLCAwWEJELAorWzBYMzM3MV0gPSAwWEQ0LCAwWDAxLCAwWDAwLCAwWDY4LCAwWDAwLCAwWDAwLCAwWDAwLCAwWEJFLAorWzBYMzM3OV0gPSAwWEQ0LCAwWDAxLCAwWDAwLCAwWDY5LCAwWDAwLCAwWDAwLCAwWDAwLCAwWEJGLAorWzBYMzM4MV0gPSAwWEQ0LCAwWDAxLCAwWDAwLCAwWDZBLCAwWDAwLCAwWDAwLCAwWDAwLCAwWEMwLAorWzBYMzM4OV0gPSAwWEQ0LCAwWDAxLCAwWDAwLCAwWDZCLCAwWDAwLCAwWDAwLCAwWDAwLCAwWEMxLAorWzBYMzM5MV0gPSAwWEQ0LCAwWDAxLCAwWDAwLCAwWDZDLCAwWDAwLCAwWDAwLCAwWDAwLCAwWEMyLAorWzBYMzM5OV0gPSAwWEQ0LCAwWDAxLCAwWDAwLCAwWDZELCAwWDAwLCAwWDAwLCAwWDAwLCAwWEMzLAorWzBYMzNBMV0gPSAwWEQ0LCAwWDAxLCAwWDAwLCAwWDZFLCAwWDAwLCAwWDAwLCAwWDAwLCAwWEM0LAorWzBYMzNBOV0gPSAwWEQ0LCAwWDAxLCAwWDAwLCAwWDZGLCAwWDAwLCAwWDAwLCAwWDAwLCAwWEM1LAorWzBYMzNCMV0gPSAwWEQ0LCAwWDAxLCAwWDAwLCAwWDcwLCAwWDAwLCAwWDAwLCAwWDAwLCAwWEM2LAorWzBYMzNCOV0gPSAwWEQ0LCAwWDAxLCAwWDAwLCAwWDcxLCAwWDAwLCAwWDAwLCAwWDAwLCAwWEM3LAorWzBYMzNDMV0gPSAwWEQ0LCAwWDAxLCAwWDAwLCAwWDcyLCAwWDAwLCAwWDAwLCAwWDAwLCAwWEM4LAorWzBYMzNDOV0gPSAwWEQ0LCAwWDAxLCAwWDAwLCAwWDczLCAwWDAwLCAwWDAwLCAwWDAwLCAwWEM5LAorWzBYMzNEMV0gPSAwWEQ0LCAwWDAxLCAwWDAwLCAwWDc0LCAwWDAwLCAwWDAwLCAwWDAwLCAwWENBLAorWzBYMzNEOV0gPSAwWEQ0LCAwWDAxLCAwWDAwLCAwWDc1LCAwWDAwLCAwWDAwLCAwWDAwLCAwWENCLAorWzBYMzNFMV0gPSAwWEQ0LCAwWDAxLCAwWDAwLCAwWDc2LCAwWDAwLCAwWDAwLCAwWDAwLCAwWENDLAorWzBYMzNFOV0gPSAwWEQ0LCAwWDAxLCAwWDAwLCAwWDc3LCAwWDAwLCAwWDAwLCAwWDAwLCAwWENELAorWzBYMzNGMV0gPSAwWEQ0LCAwWDAxLCAwWDAwLCAwWDc4LCAwWDAwLCAwWDAwLCAwWDAwLCAwWENFLAorWzBYMzNGOV0gPSAwWEQ0LCAwWDAxLCAwWDAwLCAwWDc5LCAwWDAwLCAwWDAwLCAwWDAwLCAwWENGLAorWzBYMzQwMV0gPSAwWEQ0LCAwWDAxLCAwWDAwLCAwWDdBLCAwWDAwLCAwWDAwLCAwWDAwLCAwWEQwLAorWzBYMzQwOV0gPSAwWEQ0LCAwWDAxLCAwWDAwLCAwWDQxLCAwWDAwLCAwWDAwLCAwWDAwLCAwWEQxLAorWzBYMzQxMV0gPSAwWEQ0LCAwWDAxLCAwWDAwLCAwWDQyLCAwWDAwLCAwWDAwLCAwWDAwLCAwWEQyLAorWzBYMzQxOV0gPSAwWEQ0LCAwWDAxLCAwWDAwLCAwWDQzLCAwWDAwLCAwWDAwLCAwWDAwLCAwWEQzLAorWzBYMzQyMV0gPSAwWEQ0LCAwWDAxLCAwWDAwLCAwWDQ0LCAwWDAwLCAwWDAwLCAwWDAwLCAwWEQ0LAorWzBYMzQyOV0gPSAwWEQ0LCAwWDAxLCAwWDAwLCAwWDQ1LCAwWDAwLCAwWDAwLCAwWDAwLCAwWEQ1LAorWzBYMzQzMV0gPSAwWEQ0LCAwWDAxLCAwWDAwLCAwWDQ2LCAwWDAwLCAwWDAwLCAwWDAwLCAwWEQ2LAorWzBYMzQzOV0gPSAwWEQ0LCAwWDAxLCAwWDAwLCAwWDQ3LCAwWDAwLCAwWDAwLCAwWDAwLCAwWEQ3LAorWzBYMzQ0MV0gPSAwWEQ0LCAwWDAxLCAwWDAwLCAwWDQ4LCAwWDAwLCAwWDAwLCAwWDAwLCAwWEQ4LAorWzBYMzQ0OV0gPSAwWEQ0LCAwWDAxLCAwWDAwLCAwWDQ5LCAwWDAwLCAwWDAwLCAwWDAwLCAwWEQ5LAorWzBYMzQ1MV0gPSAwWEQ0LCAwWDAxLCAwWDAwLCAwWDRBLCAwWDAwLCAwWDAwLCAwWDAwLCAwWERBLAorWzBYMzQ1OV0gPSAwWEQ0LCAwWDAxLCAwWDAwLCAwWDRCLCAwWDAwLCAwWDAwLCAwWDAwLCAwWERCLAorWzBYMzQ2MV0gPSAwWEQ0LCAwWDAxLCAwWDAwLCAwWDRDLCAwWDAwLCAwWDAwLCAwWDAwLCAwWERDLAorWzBYMzQ2OV0gPSAwWEQ0LCAwWDAxLCAwWDAwLCAwWDRELCAwWDAwLCAwWDAwLCAwWDAwLCAwWERELAorWzBYMzQ3MV0gPSAwWEQ0LCAwWDAxLCAwWDAwLCAwWDRFLCAwWDAwLCAwWDAwLCAwWDAwLCAwWERFLAorWzBYMzQ3OV0gPSAwWEQ0LCAwWDAxLCAwWDAwLCAwWDRGLCAwWDAwLCAwWDAwLCAwWDAwLCAwWERGLAorWzBYMzQ4MV0gPSAwWEQ0LCAwWDAxLCAwWDAwLCAwWDUwLCAwWDAwLCAwWDAwLCAwWDAwLCAwWEUwLAorWzBYMzQ4OV0gPSAwWEQ0LCAwWDAxLCAwWDAwLCAwWDUxLCAwWDAwLCAwWDAwLCAwWDAwLCAwWEUxLAorWzBYMzQ5MV0gPSAwWEQ0LCAwWDAxLCAwWDAwLCAwWDUyLCAwWDAwLCAwWDAwLCAwWDAwLCAwWEUyLAorWzBYMzQ5OV0gPSAwWEQ0LCAwWDAxLCAwWDAwLCAwWDUzLCAwWDAwLCAwWDAwLCAwWDAwLCAwWEUzLAorWzBYMzRBMV0gPSAwWEQ0LCAwWDAxLCAwWDAwLCAwWDU0LCAwWDAwLCAwWDAwLCAwWDAwLCAwWEU0LAorWzBYMzRBOV0gPSAwWEQ0LCAwWDAxLCAwWDAwLCAwWDU1LCAwWDAwLCAwWDAwLCAwWDAwLCAwWEU1LAorWzBYMzRCMV0gPSAwWEQ0LCAwWDAxLCAwWDAwLCAwWDU2LCAwWDAwLCAwWDAwLCAwWDAwLCAwWEU2LAorWzBYMzRCOV0gPSAwWEQ0LCAwWDAxLCAwWDAwLCAwWDU3LCAwWDAwLCAwWDAwLCAwWDAwLCAwWEU3LAorWzBYMzRDMV0gPSAwWEQ0LCAwWDAxLCAwWDAwLCAwWDU4LCAwWDAwLCAwWDAwLCAwWDAwLCAwWEU4LAorWzBYMzRDOV0gPSAwWEQ0LCAwWDAxLCAwWDAwLCAwWDU5LCAwWDAwLCAwWDAwLCAwWDAwLCAwWEU5LAorWzBYMzREMV0gPSAwWEQ0LCAwWDAxLCAwWDAwLCAwWDVBLCAwWDAwLCAwWDAwLCAwWDAwLCAwWEVBLAorWzBYMzREOV0gPSAwWEQ0LCAwWDAxLCAwWDAwLCAwWDYxLCAwWDAwLCAwWDAwLCAwWDAwLCAwWEVCLAorWzBYMzRFMV0gPSAwWEQ0LCAwWDAxLCAwWDAwLCAwWDYyLCAwWDAwLCAwWDAwLCAwWDAwLCAwWEVDLAorWzBYMzRFOV0gPSAwWEQ0LCAwWDAxLCAwWDAwLCAwWDYzLCAwWDAwLCAwWDAwLCAwWDAwLCAwWEVELAorWzBYMzRGMV0gPSAwWEQ0LCAwWDAxLCAwWDAwLCAwWDY0LCAwWDAwLCAwWDAwLCAwWDAwLCAwWEVFLAorWzBYMzRGOV0gPSAwWEQ0LCAwWDAxLCAwWDAwLCAwWDY1LCAwWDAwLCAwWDAwLCAwWDAwLCAwWEVGLAorWzBYMzUwMV0gPSAwWEQ0LCAwWDAxLCAwWDAwLCAwWDY2LCAwWDAwLCAwWDAwLCAwWDAwLCAwWEYwLAorWzBYMzUwOV0gPSAwWEQ0LCAwWDAxLCAwWDAwLCAwWDY3LCAwWDAwLCAwWDAwLCAwWDAwLCAwWEYxLAorWzBYMzUxMV0gPSAwWEQ0LCAwWDAxLCAwWDAwLCAwWDY4LCAwWDAwLCAwWDAwLCAwWDAwLCAwWEYyLAorWzBYMzUxOV0gPSAwWEQ0LCAwWDAxLCAwWDAwLCAwWDY5LCAwWDAwLCAwWDAwLCAwWDAwLCAwWEYzLAorWzBYMzUyMV0gPSAwWEQ0LCAwWDAxLCAwWDAwLCAwWDZBLCAwWDAwLCAwWDAwLCAwWDAwLCAwWEY0LAorWzBYMzUyOV0gPSAwWEQ0LCAwWDAxLCAwWDAwLCAwWDZCLCAwWDAwLCAwWDAwLCAwWDAwLCAwWEY1LAorWzBYMzUzMV0gPSAwWEQ0LCAwWDAxLCAwWDAwLCAwWDZDLCAwWDAwLCAwWDAwLCAwWDAwLCAwWEY2LAorWzBYMzUzOV0gPSAwWEQ0LCAwWDAxLCAwWDAwLCAwWDZELCAwWDAwLCAwWDAwLCAwWDAwLCAwWEY3LAorWzBYMzU0MV0gPSAwWEQ0LCAwWDAxLCAwWDAwLCAwWDZFLCAwWDAwLCAwWDAwLCAwWDAwLCAwWEY4LAorWzBYMzU0OV0gPSAwWEQ0LCAwWDAxLCAwWDAwLCAwWDZGLCAwWDAwLCAwWDAwLCAwWDAwLCAwWEY5LAorWzBYMzU1MV0gPSAwWEQ0LCAwWDAxLCAwWDAwLCAwWDcwLCAwWDAwLCAwWDAwLCAwWDAwLCAwWEZBLAorWzBYMzU1OV0gPSAwWEQ0LCAwWDAxLCAwWDAwLCAwWDcxLCAwWDAwLCAwWDAwLCAwWDAwLCAwWEZCLAorWzBYMzU2MV0gPSAwWEQ0LCAwWDAxLCAwWDAwLCAwWDcyLCAwWDAwLCAwWDAwLCAwWDAwLCAwWEZDLAorWzBYMzU2OV0gPSAwWEQ0LCAwWDAxLCAwWDAwLCAwWDczLCAwWDAwLCAwWDAwLCAwWDAwLCAwWEZELAorWzBYMzU3MV0gPSAwWEQ0LCAwWDAxLCAwWDAwLCAwWDc0LCAwWDAwLCAwWDAwLCAwWDAwLCAwWEZFLAorWzBYMzU3OV0gPSAwWEQ0LCAwWDAxLCAwWDAwLCAwWDc1LCAwWDAwLCAwWDAwLCAwWDAwLCAwWEZGLAorWzBYMzU4MV0gPSAwWEQ0LCAwWDAxLCAwWDAwLCAwWDc2LAorWzBYMzU4OV0gPSAwWEQ1LCAwWDAxLCAwWDAwLCAwWDc3LCAwWDAwLCAwWDAwLCAwWDAwLCAwWDAxLAorWzBYMzU5MV0gPSAwWEQ1LCAwWDAxLCAwWDAwLCAwWDc4LCAwWDAwLCAwWDAwLCAwWDAwLCAwWDAyLAorWzBYMzU5OV0gPSAwWEQ1LCAwWDAxLCAwWDAwLCAwWDc5LCAwWDAwLCAwWDAwLCAwWDAwLCAwWDAzLAorWzBYMzVBMV0gPSAwWEQ1LCAwWDAxLCAwWDAwLCAwWDdBLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDA0LAorWzBYMzVBOV0gPSAwWEQ1LCAwWDAxLCAwWDAwLCAwWDQxLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDA1LAorWzBYMzVCMV0gPSAwWEQ1LCAwWDAxLCAwWDAwLCAwWDQyLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDA2LAorWzBYMzVCOV0gPSAwWEQ1LCAwWDAxLCAwWDAwLCAwWDQzLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDA3LAorWzBYMzVDMV0gPSAwWEQ1LCAwWDAxLCAwWDAwLCAwWDQ0LCAwWDAwLCAwWDAwLCAwWDAwLCAwWDA4LAorWzBYMzVDOV0gPSAwWEQ1LCAwWDAxLCAwWDAwLCAwWDQ1LCAwWDAwLCAwWDAwLCAwWDAwLCAwWDA5LAorWzBYMzVEMV0gPSAwWEQ1LCAwWDAxLCAwWDAwLCAwWDQ2LCAwWDAwLCAwWDAwLCAwWDAwLCAwWDBBLAorWzBYMzVEOV0gPSAwWEQ1LCAwWDAxLCAwWDAwLCAwWDQ3LCAwWDAwLCAwWDAwLCAwWDAwLCAwWDBCLAorWzBYMzVFMV0gPSAwWEQ1LCAwWDAxLCAwWDAwLCAwWDQ4LCAwWDAwLCAwWDAwLCAwWDAwLCAwWDBDLAorWzBYMzVFOV0gPSAwWEQ1LCAwWDAxLCAwWDAwLCAwWDQ5LCAwWDAwLCAwWDAwLCAwWDAwLCAwWDBELAorWzBYMzVGMV0gPSAwWEQ1LCAwWDAxLCAwWDAwLCAwWDRBLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDBFLAorWzBYMzVGOV0gPSAwWEQ1LCAwWDAxLCAwWDAwLCAwWDRCLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDBGLAorWzBYMzYwMV0gPSAwWEQ1LCAwWDAxLCAwWDAwLCAwWDRDLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDEwLAorWzBYMzYwOV0gPSAwWEQ1LCAwWDAxLCAwWDAwLCAwWDRELCAwWDAwLCAwWDAwLCAwWDAwLCAwWDExLAorWzBYMzYxMV0gPSAwWEQ1LCAwWDAxLCAwWDAwLCAwWDRFLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDEyLAorWzBYMzYxOV0gPSAwWEQ1LCAwWDAxLCAwWDAwLCAwWDRGLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDEzLAorWzBYMzYyMV0gPSAwWEQ1LCAwWDAxLCAwWDAwLCAwWDUwLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDE0LAorWzBYMzYyOV0gPSAwWEQ1LCAwWDAxLCAwWDAwLCAwWDUxLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDE1LAorWzBYMzYzMV0gPSAwWEQ1LCAwWDAxLCAwWDAwLCAwWDUyLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDE2LAorWzBYMzYzOV0gPSAwWEQ1LCAwWDAxLCAwWDAwLCAwWDUzLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDE3LAorWzBYMzY0MV0gPSAwWEQ1LCAwWDAxLCAwWDAwLCAwWDU0LCAwWDAwLCAwWDAwLCAwWDAwLCAwWDE4LAorWzBYMzY0OV0gPSAwWEQ1LCAwWDAxLCAwWDAwLCAwWDU1LCAwWDAwLCAwWDAwLCAwWDAwLCAwWDE5LAorWzBYMzY1MV0gPSAwWEQ1LCAwWDAxLCAwWDAwLCAwWDU2LCAwWDAwLCAwWDAwLCAwWDAwLCAwWDFBLAorWzBYMzY1OV0gPSAwWEQ1LCAwWDAxLCAwWDAwLCAwWDU3LCAwWDAwLCAwWDAwLCAwWDAwLCAwWDFCLAorWzBYMzY2MV0gPSAwWEQ1LCAwWDAxLCAwWDAwLCAwWDU4LCAwWDAwLCAwWDAwLCAwWDAwLCAwWDFDLAorWzBYMzY2OV0gPSAwWEQ1LCAwWDAxLCAwWDAwLCAwWDU5LCAwWDAwLCAwWDAwLCAwWDAwLCAwWDFELAorWzBYMzY3MV0gPSAwWEQ1LCAwWDAxLCAwWDAwLCAwWDVBLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDFFLAorWzBYMzY3OV0gPSAwWEQ1LCAwWDAxLCAwWDAwLCAwWDYxLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDFGLAorWzBYMzY4MV0gPSAwWEQ1LCAwWDAxLCAwWDAwLCAwWDYyLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDIwLAorWzBYMzY4OV0gPSAwWEQ1LCAwWDAxLCAwWDAwLCAwWDYzLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDIxLAorWzBYMzY5MV0gPSAwWEQ1LCAwWDAxLCAwWDAwLCAwWDY0LCAwWDAwLCAwWDAwLCAwWDAwLCAwWDIyLAorWzBYMzY5OV0gPSAwWEQ1LCAwWDAxLCAwWDAwLCAwWDY1LCAwWDAwLCAwWDAwLCAwWDAwLCAwWDIzLAorWzBYMzZBMV0gPSAwWEQ1LCAwWDAxLCAwWDAwLCAwWDY2LCAwWDAwLCAwWDAwLCAwWDAwLCAwWDI0LAorWzBYMzZBOV0gPSAwWEQ1LCAwWDAxLCAwWDAwLCAwWDY3LCAwWDAwLCAwWDAwLCAwWDAwLCAwWDI1LAorWzBYMzZCMV0gPSAwWEQ1LCAwWDAxLCAwWDAwLCAwWDY4LCAwWDAwLCAwWDAwLCAwWDAwLCAwWDI2LAorWzBYMzZCOV0gPSAwWEQ1LCAwWDAxLCAwWDAwLCAwWDY5LCAwWDAwLCAwWDAwLCAwWDAwLCAwWDI3LAorWzBYMzZDMV0gPSAwWEQ1LCAwWDAxLCAwWDAwLCAwWDZBLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDI4LAorWzBYMzZDOV0gPSAwWEQ1LCAwWDAxLCAwWDAwLCAwWDZCLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDI5LAorWzBYMzZEMV0gPSAwWEQ1LCAwWDAxLCAwWDAwLCAwWDZDLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDJBLAorWzBYMzZEOV0gPSAwWEQ1LCAwWDAxLCAwWDAwLCAwWDZELCAwWDAwLCAwWDAwLCAwWDAwLCAwWDJCLAorWzBYMzZFMV0gPSAwWEQ1LCAwWDAxLCAwWDAwLCAwWDZFLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDJDLAorWzBYMzZFOV0gPSAwWEQ1LCAwWDAxLCAwWDAwLCAwWDZGLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDJELAorWzBYMzZGMV0gPSAwWEQ1LCAwWDAxLCAwWDAwLCAwWDcwLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDJFLAorWzBYMzZGOV0gPSAwWEQ1LCAwWDAxLCAwWDAwLCAwWDcxLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDJGLAorWzBYMzcwMV0gPSAwWEQ1LCAwWDAxLCAwWDAwLCAwWDcyLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDMwLAorWzBYMzcwOV0gPSAwWEQ1LCAwWDAxLCAwWDAwLCAwWDczLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDMxLAorWzBYMzcxMV0gPSAwWEQ1LCAwWDAxLCAwWDAwLCAwWDc0LCAwWDAwLCAwWDAwLCAwWDAwLCAwWDMyLAorWzBYMzcxOV0gPSAwWEQ1LCAwWDAxLCAwWDAwLCAwWDc1LCAwWDAwLCAwWDAwLCAwWDAwLCAwWDMzLAorWzBYMzcyMV0gPSAwWEQ1LCAwWDAxLCAwWDAwLCAwWDc2LCAwWDAwLCAwWDAwLCAwWDAwLCAwWDM0LAorWzBYMzcyOV0gPSAwWEQ1LCAwWDAxLCAwWDAwLCAwWDc3LCAwWDAwLCAwWDAwLCAwWDAwLCAwWDM1LAorWzBYMzczMV0gPSAwWEQ1LCAwWDAxLCAwWDAwLCAwWDc4LCAwWDAwLCAwWDAwLCAwWDAwLCAwWDM2LAorWzBYMzczOV0gPSAwWEQ1LCAwWDAxLCAwWDAwLCAwWDc5LCAwWDAwLCAwWDAwLCAwWDAwLCAwWDM3LAorWzBYMzc0MV0gPSAwWEQ1LCAwWDAxLCAwWDAwLCAwWDdBLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDM4LAorWzBYMzc0OV0gPSAwWEQ1LCAwWDAxLCAwWDAwLCAwWDQxLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDM5LAorWzBYMzc1MV0gPSAwWEQ1LCAwWDAxLCAwWDAwLCAwWDQyLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDNBLAorWzBYMzc1OV0gPSAwWEQ1LCAwWDAxLCAwWDAwLCAwWDQzLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDNCLAorWzBYMzc2MV0gPSAwWEQ1LCAwWDAxLCAwWDAwLCAwWDQ0LCAwWDAwLCAwWDAwLCAwWDAwLCAwWDNDLAorWzBYMzc2OV0gPSAwWEQ1LCAwWDAxLCAwWDAwLCAwWDQ1LCAwWDAwLCAwWDAwLCAwWDAwLCAwWDNELAorWzBYMzc3MV0gPSAwWEQ1LCAwWDAxLCAwWDAwLCAwWDQ2LCAwWDAwLCAwWDAwLCAwWDAwLCAwWDNFLAorWzBYMzc3OV0gPSAwWEQ1LCAwWDAxLCAwWDAwLCAwWDQ3LCAwWDAwLCAwWDAwLCAwWDAwLCAwWDNGLAorWzBYMzc4MV0gPSAwWEQ1LCAwWDAxLCAwWDAwLCAwWDQ4LCAwWDAwLCAwWDAwLCAwWDAwLCAwWDQwLAorWzBYMzc4OV0gPSAwWEQ1LCAwWDAxLCAwWDAwLCAwWDQ5LCAwWDAwLCAwWDAwLCAwWDAwLCAwWDQxLAorWzBYMzc5MV0gPSAwWEQ1LCAwWDAxLCAwWDAwLCAwWDRBLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDQyLAorWzBYMzc5OV0gPSAwWEQ1LCAwWDAxLCAwWDAwLCAwWDRCLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDQzLAorWzBYMzdBMV0gPSAwWEQ1LCAwWDAxLCAwWDAwLCAwWDRDLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDQ0LAorWzBYMzdBOV0gPSAwWEQ1LCAwWDAxLCAwWDAwLCAwWDRELCAwWDAwLCAwWDAwLCAwWDAwLCAwWDQ1LAorWzBYMzdCMV0gPSAwWEQ1LCAwWDAxLCAwWDAwLCAwWDRFLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDQ2LAorWzBYMzdCOV0gPSAwWEQ1LCAwWDAxLCAwWDAwLCAwWDRGLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDQ3LAorWzBYMzdDMV0gPSAwWEQ1LCAwWDAxLCAwWDAwLCAwWDUwLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDQ4LAorWzBYMzdDOV0gPSAwWEQ1LCAwWDAxLCAwWDAwLCAwWDUxLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDQ5LAorWzBYMzdEMV0gPSAwWEQ1LCAwWDAxLCAwWDAwLCAwWDUyLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDRBLAorWzBYMzdEOV0gPSAwWEQ1LCAwWDAxLCAwWDAwLCAwWDUzLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDRCLAorWzBYMzdFMV0gPSAwWEQ1LCAwWDAxLCAwWDAwLCAwWDU0LCAwWDAwLCAwWDAwLCAwWDAwLCAwWDRDLAorWzBYMzdFOV0gPSAwWEQ1LCAwWDAxLCAwWDAwLCAwWDU1LCAwWDAwLCAwWDAwLCAwWDAwLCAwWDRELAorWzBYMzdGMV0gPSAwWEQ1LCAwWDAxLCAwWDAwLCAwWDU2LCAwWDAwLCAwWDAwLCAwWDAwLCAwWDRFLAorWzBYMzdGOV0gPSAwWEQ1LCAwWDAxLCAwWDAwLCAwWDU3LCAwWDAwLCAwWDAwLCAwWDAwLCAwWDRGLAorWzBYMzgwMV0gPSAwWEQ1LCAwWDAxLCAwWDAwLCAwWDU4LCAwWDAwLCAwWDAwLCAwWDAwLCAwWDUwLAorWzBYMzgwOV0gPSAwWEQ1LCAwWDAxLCAwWDAwLCAwWDU5LCAwWDAwLCAwWDAwLCAwWDAwLCAwWDUxLAorWzBYMzgxMV0gPSAwWEQ1LCAwWDAxLCAwWDAwLCAwWDVBLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDUyLAorWzBYMzgxOV0gPSAwWEQ1LCAwWDAxLCAwWDAwLCAwWDYxLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDUzLAorWzBYMzgyMV0gPSAwWEQ1LCAwWDAxLCAwWDAwLCAwWDYyLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDU0LAorWzBYMzgyOV0gPSAwWEQ1LCAwWDAxLCAwWDAwLCAwWDYzLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDU1LAorWzBYMzgzMV0gPSAwWEQ1LCAwWDAxLCAwWDAwLCAwWDY0LCAwWDAwLCAwWDAwLCAwWDAwLCAwWDU2LAorWzBYMzgzOV0gPSAwWEQ1LCAwWDAxLCAwWDAwLCAwWDY1LCAwWDAwLCAwWDAwLCAwWDAwLCAwWDU3LAorWzBYMzg0MV0gPSAwWEQ1LCAwWDAxLCAwWDAwLCAwWDY2LCAwWDAwLCAwWDAwLCAwWDAwLCAwWDU4LAorWzBYMzg0OV0gPSAwWEQ1LCAwWDAxLCAwWDAwLCAwWDY3LCAwWDAwLCAwWDAwLCAwWDAwLCAwWDU5LAorWzBYMzg1MV0gPSAwWEQ1LCAwWDAxLCAwWDAwLCAwWDY4LCAwWDAwLCAwWDAwLCAwWDAwLCAwWDVBLAorWzBYMzg1OV0gPSAwWEQ1LCAwWDAxLCAwWDAwLCAwWDY5LCAwWDAwLCAwWDAwLCAwWDAwLCAwWDVCLAorWzBYMzg2MV0gPSAwWEQ1LCAwWDAxLCAwWDAwLCAwWDZBLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDVDLAorWzBYMzg2OV0gPSAwWEQ1LCAwWDAxLCAwWDAwLCAwWDZCLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDVELAorWzBYMzg3MV0gPSAwWEQ1LCAwWDAxLCAwWDAwLCAwWDZDLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDVFLAorWzBYMzg3OV0gPSAwWEQ1LCAwWDAxLCAwWDAwLCAwWDZELCAwWDAwLCAwWDAwLCAwWDAwLCAwWDVGLAorWzBYMzg4MV0gPSAwWEQ1LCAwWDAxLCAwWDAwLCAwWDZFLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDYwLAorWzBYMzg4OV0gPSAwWEQ1LCAwWDAxLCAwWDAwLCAwWDZGLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDYxLAorWzBYMzg5MV0gPSAwWEQ1LCAwWDAxLCAwWDAwLCAwWDcwLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDYyLAorWzBYMzg5OV0gPSAwWEQ1LCAwWDAxLCAwWDAwLCAwWDcxLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDYzLAorWzBYMzhBMV0gPSAwWEQ1LCAwWDAxLCAwWDAwLCAwWDcyLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDY0LAorWzBYMzhBOV0gPSAwWEQ1LCAwWDAxLCAwWDAwLCAwWDczLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDY1LAorWzBYMzhCMV0gPSAwWEQ1LCAwWDAxLCAwWDAwLCAwWDc0LCAwWDAwLCAwWDAwLCAwWDAwLCAwWDY2LAorWzBYMzhCOV0gPSAwWEQ1LCAwWDAxLCAwWDAwLCAwWDc1LCAwWDAwLCAwWDAwLCAwWDAwLCAwWDY3LAorWzBYMzhDMV0gPSAwWEQ1LCAwWDAxLCAwWDAwLCAwWDc2LCAwWDAwLCAwWDAwLCAwWDAwLCAwWDY4LAorWzBYMzhDOV0gPSAwWEQ1LCAwWDAxLCAwWDAwLCAwWDc3LCAwWDAwLCAwWDAwLCAwWDAwLCAwWDY5LAorWzBYMzhEMV0gPSAwWEQ1LCAwWDAxLCAwWDAwLCAwWDc4LCAwWDAwLCAwWDAwLCAwWDAwLCAwWDZBLAorWzBYMzhEOV0gPSAwWEQ1LCAwWDAxLCAwWDAwLCAwWDc5LCAwWDAwLCAwWDAwLCAwWDAwLCAwWDZCLAorWzBYMzhFMV0gPSAwWEQ1LCAwWDAxLCAwWDAwLCAwWDdBLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDZDLAorWzBYMzhFOV0gPSAwWEQ1LCAwWDAxLCAwWDAwLCAwWDQxLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDZELAorWzBYMzhGMV0gPSAwWEQ1LCAwWDAxLCAwWDAwLCAwWDQyLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDZFLAorWzBYMzhGOV0gPSAwWEQ1LCAwWDAxLCAwWDAwLCAwWDQzLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDZGLAorWzBYMzkwMV0gPSAwWEQ1LCAwWDAxLCAwWDAwLCAwWDQ0LCAwWDAwLCAwWDAwLCAwWDAwLCAwWDcwLAorWzBYMzkwOV0gPSAwWEQ1LCAwWDAxLCAwWDAwLCAwWDQ1LCAwWDAwLCAwWDAwLCAwWDAwLCAwWDcxLAorWzBYMzkxMV0gPSAwWEQ1LCAwWDAxLCAwWDAwLCAwWDQ2LCAwWDAwLCAwWDAwLCAwWDAwLCAwWDcyLAorWzBYMzkxOV0gPSAwWEQ1LCAwWDAxLCAwWDAwLCAwWDQ3LCAwWDAwLCAwWDAwLCAwWDAwLCAwWDczLAorWzBYMzkyMV0gPSAwWEQ1LCAwWDAxLCAwWDAwLCAwWDQ4LCAwWDAwLCAwWDAwLCAwWDAwLCAwWDc0LAorWzBYMzkyOV0gPSAwWEQ1LCAwWDAxLCAwWDAwLCAwWDQ5LCAwWDAwLCAwWDAwLCAwWDAwLCAwWDc1LAorWzBYMzkzMV0gPSAwWEQ1LCAwWDAxLCAwWDAwLCAwWDRBLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDc2LAorWzBYMzkzOV0gPSAwWEQ1LCAwWDAxLCAwWDAwLCAwWDRCLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDc3LAorWzBYMzk0MV0gPSAwWEQ1LCAwWDAxLCAwWDAwLCAwWDRDLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDc4LAorWzBYMzk0OV0gPSAwWEQ1LCAwWDAxLCAwWDAwLCAwWDRELCAwWDAwLCAwWDAwLCAwWDAwLCAwWDc5LAorWzBYMzk1MV0gPSAwWEQ1LCAwWDAxLCAwWDAwLCAwWDRFLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDdBLAorWzBYMzk1OV0gPSAwWEQ1LCAwWDAxLCAwWDAwLCAwWDRGLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDdCLAorWzBYMzk2MV0gPSAwWEQ1LCAwWDAxLCAwWDAwLCAwWDUwLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDdDLAorWzBYMzk2OV0gPSAwWEQ1LCAwWDAxLCAwWDAwLCAwWDUxLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDdELAorWzBYMzk3MV0gPSAwWEQ1LCAwWDAxLCAwWDAwLCAwWDUyLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDdFLAorWzBYMzk3OV0gPSAwWEQ1LCAwWDAxLCAwWDAwLCAwWDUzLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDdGLAorWzBYMzk4MV0gPSAwWEQ1LCAwWDAxLCAwWDAwLCAwWDU0LCAwWDAwLCAwWDAwLCAwWDAwLCAwWDgwLAorWzBYMzk4OV0gPSAwWEQ1LCAwWDAxLCAwWDAwLCAwWDU1LCAwWDAwLCAwWDAwLCAwWDAwLCAwWDgxLAorWzBYMzk5MV0gPSAwWEQ1LCAwWDAxLCAwWDAwLCAwWDU2LCAwWDAwLCAwWDAwLCAwWDAwLCAwWDgyLAorWzBYMzk5OV0gPSAwWEQ1LCAwWDAxLCAwWDAwLCAwWDU3LCAwWDAwLCAwWDAwLCAwWDAwLCAwWDgzLAorWzBYMzlBMV0gPSAwWEQ1LCAwWDAxLCAwWDAwLCAwWDU4LCAwWDAwLCAwWDAwLCAwWDAwLCAwWDg0LAorWzBYMzlBOV0gPSAwWEQ1LCAwWDAxLCAwWDAwLCAwWDU5LCAwWDAwLCAwWDAwLCAwWDAwLCAwWDg1LAorWzBYMzlCMV0gPSAwWEQ1LCAwWDAxLCAwWDAwLCAwWDVBLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDg2LAorWzBYMzlCOV0gPSAwWEQ1LCAwWDAxLCAwWDAwLCAwWDYxLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDg3LAorWzBYMzlDMV0gPSAwWEQ1LCAwWDAxLCAwWDAwLCAwWDYyLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDg4LAorWzBYMzlDOV0gPSAwWEQ1LCAwWDAxLCAwWDAwLCAwWDYzLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDg5LAorWzBYMzlEMV0gPSAwWEQ1LCAwWDAxLCAwWDAwLCAwWDY0LCAwWDAwLCAwWDAwLCAwWDAwLCAwWDhBLAorWzBYMzlEOV0gPSAwWEQ1LCAwWDAxLCAwWDAwLCAwWDY1LCAwWDAwLCAwWDAwLCAwWDAwLCAwWDhCLAorWzBYMzlFMV0gPSAwWEQ1LCAwWDAxLCAwWDAwLCAwWDY2LCAwWDAwLCAwWDAwLCAwWDAwLCAwWDhDLAorWzBYMzlFOV0gPSAwWEQ1LCAwWDAxLCAwWDAwLCAwWDY3LCAwWDAwLCAwWDAwLCAwWDAwLCAwWDhELAorWzBYMzlGMV0gPSAwWEQ1LCAwWDAxLCAwWDAwLCAwWDY4LCAwWDAwLCAwWDAwLCAwWDAwLCAwWDhFLAorWzBYMzlGOV0gPSAwWEQ1LCAwWDAxLCAwWDAwLCAwWDY5LCAwWDAwLCAwWDAwLCAwWDAwLCAwWDhGLAorWzBYM0EwMV0gPSAwWEQ1LCAwWDAxLCAwWDAwLCAwWDZBLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDkwLAorWzBYM0EwOV0gPSAwWEQ1LCAwWDAxLCAwWDAwLCAwWDZCLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDkxLAorWzBYM0ExMV0gPSAwWEQ1LCAwWDAxLCAwWDAwLCAwWDZDLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDkyLAorWzBYM0ExOV0gPSAwWEQ1LCAwWDAxLCAwWDAwLCAwWDZELCAwWDAwLCAwWDAwLCAwWDAwLCAwWDkzLAorWzBYM0EyMV0gPSAwWEQ1LCAwWDAxLCAwWDAwLCAwWDZFLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDk0LAorWzBYM0EyOV0gPSAwWEQ1LCAwWDAxLCAwWDAwLCAwWDZGLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDk1LAorWzBYM0EzMV0gPSAwWEQ1LCAwWDAxLCAwWDAwLCAwWDcwLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDk2LAorWzBYM0EzOV0gPSAwWEQ1LCAwWDAxLCAwWDAwLCAwWDcxLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDk3LAorWzBYM0E0MV0gPSAwWEQ1LCAwWDAxLCAwWDAwLCAwWDcyLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDk4LAorWzBYM0E0OV0gPSAwWEQ1LCAwWDAxLCAwWDAwLCAwWDczLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDk5LAorWzBYM0E1MV0gPSAwWEQ1LCAwWDAxLCAwWDAwLCAwWDc0LCAwWDAwLCAwWDAwLCAwWDAwLCAwWDlBLAorWzBYM0E1OV0gPSAwWEQ1LCAwWDAxLCAwWDAwLCAwWDc1LCAwWDAwLCAwWDAwLCAwWDAwLCAwWDlCLAorWzBYM0E2MV0gPSAwWEQ1LCAwWDAxLCAwWDAwLCAwWDc2LCAwWDAwLCAwWDAwLCAwWDAwLCAwWDlDLAorWzBYM0E2OV0gPSAwWEQ1LCAwWDAxLCAwWDAwLCAwWDc3LCAwWDAwLCAwWDAwLCAwWDAwLCAwWDlELAorWzBYM0E3MV0gPSAwWEQ1LCAwWDAxLCAwWDAwLCAwWDc4LCAwWDAwLCAwWDAwLCAwWDAwLCAwWDlFLAorWzBYM0E3OV0gPSAwWEQ1LCAwWDAxLCAwWDAwLCAwWDc5LCAwWDAwLCAwWDAwLCAwWDAwLCAwWDlGLAorWzBYM0E4MV0gPSAwWEQ1LCAwWDAxLCAwWDAwLCAwWDdBLCAwWDAwLCAwWDAwLCAwWDAwLCAwWEEwLAorWzBYM0E4OV0gPSAwWEQ1LCAwWDAxLCAwWDAwLCAwWDQxLCAwWDAwLCAwWDAwLCAwWDAwLCAwWEExLAorWzBYM0E5MV0gPSAwWEQ1LCAwWDAxLCAwWDAwLCAwWDQyLCAwWDAwLCAwWDAwLCAwWDAwLCAwWEEyLAorWzBYM0E5OV0gPSAwWEQ1LCAwWDAxLCAwWDAwLCAwWDQzLCAwWDAwLCAwWDAwLCAwWDAwLCAwWEEzLAorWzBYM0FBMV0gPSAwWEQ1LCAwWDAxLCAwWDAwLCAwWDQ0LCAwWDAwLCAwWDAwLCAwWDAwLCAwWEE0LAorWzBYM0FBOV0gPSAwWEQ1LCAwWDAxLCAwWDAwLCAwWDQ1LCAwWDAwLCAwWDAwLCAwWDAwLCAwWEE1LAorWzBYM0FCMV0gPSAwWEQ1LCAwWDAxLCAwWDAwLCAwWDQ2LCAwWDAwLCAwWDAwLCAwWDAwLCAwWEE2LAorWzBYM0FCOV0gPSAwWEQ1LCAwWDAxLCAwWDAwLCAwWDQ3LCAwWDAwLCAwWDAwLCAwWDAwLCAwWEE3LAorWzBYM0FDMV0gPSAwWEQ1LCAwWDAxLCAwWDAwLCAwWDQ4LCAwWDAwLCAwWDAwLCAwWDAwLCAwWEE4LAorWzBYM0FDOV0gPSAwWEQ1LCAwWDAxLCAwWDAwLCAwWDQ5LCAwWDAwLCAwWDAwLCAwWDAwLCAwWEE5LAorWzBYM0FEMV0gPSAwWEQ1LCAwWDAxLCAwWDAwLCAwWDRBLCAwWDAwLCAwWDAwLCAwWDAwLCAwWEFBLAorWzBYM0FEOV0gPSAwWEQ1LCAwWDAxLCAwWDAwLCAwWDRCLCAwWDAwLCAwWDAwLCAwWDAwLCAwWEFCLAorWzBYM0FFMV0gPSAwWEQ1LCAwWDAxLCAwWDAwLCAwWDRDLCAwWDAwLCAwWDAwLCAwWDAwLCAwWEFDLAorWzBYM0FFOV0gPSAwWEQ1LCAwWDAxLCAwWDAwLCAwWDRELCAwWDAwLCAwWDAwLCAwWDAwLCAwWEFELAorWzBYM0FGMV0gPSAwWEQ1LCAwWDAxLCAwWDAwLCAwWDRFLCAwWDAwLCAwWDAwLCAwWDAwLCAwWEFFLAorWzBYM0FGOV0gPSAwWEQ1LCAwWDAxLCAwWDAwLCAwWDRGLCAwWDAwLCAwWDAwLCAwWDAwLCAwWEFGLAorWzBYM0IwMV0gPSAwWEQ1LCAwWDAxLCAwWDAwLCAwWDUwLCAwWDAwLCAwWDAwLCAwWDAwLCAwWEIwLAorWzBYM0IwOV0gPSAwWEQ1LCAwWDAxLCAwWDAwLCAwWDUxLCAwWDAwLCAwWDAwLCAwWDAwLCAwWEIxLAorWzBYM0IxMV0gPSAwWEQ1LCAwWDAxLCAwWDAwLCAwWDUyLCAwWDAwLCAwWDAwLCAwWDAwLCAwWEIyLAorWzBYM0IxOV0gPSAwWEQ1LCAwWDAxLCAwWDAwLCAwWDUzLCAwWDAwLCAwWDAwLCAwWDAwLCAwWEIzLAorWzBYM0IyMV0gPSAwWEQ1LCAwWDAxLCAwWDAwLCAwWDU0LCAwWDAwLCAwWDAwLCAwWDAwLCAwWEI0LAorWzBYM0IyOV0gPSAwWEQ1LCAwWDAxLCAwWDAwLCAwWDU1LCAwWDAwLCAwWDAwLCAwWDAwLCAwWEI1LAorWzBYM0IzMV0gPSAwWEQ1LCAwWDAxLCAwWDAwLCAwWDU2LCAwWDAwLCAwWDAwLCAwWDAwLCAwWEI2LAorWzBYM0IzOV0gPSAwWEQ1LCAwWDAxLCAwWDAwLCAwWDU3LCAwWDAwLCAwWDAwLCAwWDAwLCAwWEI3LAorWzBYM0I0MV0gPSAwWEQ1LCAwWDAxLCAwWDAwLCAwWDU4LCAwWDAwLCAwWDAwLCAwWDAwLCAwWEI4LAorWzBYM0I0OV0gPSAwWEQ1LCAwWDAxLCAwWDAwLCAwWDU5LCAwWDAwLCAwWDAwLCAwWDAwLCAwWEI5LAorWzBYM0I1MV0gPSAwWEQ1LCAwWDAxLCAwWDAwLCAwWDVBLCAwWDAwLCAwWDAwLCAwWDAwLCAwWEJBLAorWzBYM0I1OV0gPSAwWEQ1LCAwWDAxLCAwWDAwLCAwWDYxLCAwWDAwLCAwWDAwLCAwWDAwLCAwWEJCLAorWzBYM0I2MV0gPSAwWEQ1LCAwWDAxLCAwWDAwLCAwWDYyLCAwWDAwLCAwWDAwLCAwWDAwLCAwWEJDLAorWzBYM0I2OV0gPSAwWEQ1LCAwWDAxLCAwWDAwLCAwWDYzLCAwWDAwLCAwWDAwLCAwWDAwLCAwWEJELAorWzBYM0I3MV0gPSAwWEQ1LCAwWDAxLCAwWDAwLCAwWDY0LCAwWDAwLCAwWDAwLCAwWDAwLCAwWEJFLAorWzBYM0I3OV0gPSAwWEQ1LCAwWDAxLCAwWDAwLCAwWDY1LCAwWDAwLCAwWDAwLCAwWDAwLCAwWEJGLAorWzBYM0I4MV0gPSAwWEQ1LCAwWDAxLCAwWDAwLCAwWDY2LCAwWDAwLCAwWDAwLCAwWDAwLCAwWEMwLAorWzBYM0I4OV0gPSAwWEQ1LCAwWDAxLCAwWDAwLCAwWDY3LCAwWDAwLCAwWDAwLCAwWDAwLCAwWEMxLAorWzBYM0I5MV0gPSAwWEQ1LCAwWDAxLCAwWDAwLCAwWDY4LCAwWDAwLCAwWDAwLCAwWDAwLCAwWEMyLAorWzBYM0I5OV0gPSAwWEQ1LCAwWDAxLCAwWDAwLCAwWDY5LCAwWDAwLCAwWDAwLCAwWDAwLCAwWEMzLAorWzBYM0JBMV0gPSAwWEQ1LCAwWDAxLCAwWDAwLCAwWDZBLCAwWDAwLCAwWDAwLCAwWDAwLCAwWEM0LAorWzBYM0JBOV0gPSAwWEQ1LCAwWDAxLCAwWDAwLCAwWDZCLCAwWDAwLCAwWDAwLCAwWDAwLCAwWEM1LAorWzBYM0JCMV0gPSAwWEQ1LCAwWDAxLCAwWDAwLCAwWDZDLCAwWDAwLCAwWDAwLCAwWDAwLCAwWEM2LAorWzBYM0JCOV0gPSAwWEQ1LCAwWDAxLCAwWDAwLCAwWDZELCAwWDAwLCAwWDAwLCAwWDAwLCAwWEM3LAorWzBYM0JDMV0gPSAwWEQ1LCAwWDAxLCAwWDAwLCAwWDZFLCAwWDAwLCAwWDAwLCAwWDAwLCAwWEM4LAorWzBYM0JDOV0gPSAwWEQ1LCAwWDAxLCAwWDAwLCAwWDZGLCAwWDAwLCAwWDAwLCAwWDAwLCAwWEM5LAorWzBYM0JEMV0gPSAwWEQ1LCAwWDAxLCAwWDAwLCAwWDcwLCAwWDAwLCAwWDAwLCAwWDAwLCAwWENBLAorWzBYM0JEOV0gPSAwWEQ1LCAwWDAxLCAwWDAwLCAwWDcxLCAwWDAwLCAwWDAwLCAwWDAwLCAwWENCLAorWzBYM0JFMV0gPSAwWEQ1LCAwWDAxLCAwWDAwLCAwWDcyLCAwWDAwLCAwWDAwLCAwWDAwLCAwWENDLAorWzBYM0JFOV0gPSAwWEQ1LCAwWDAxLCAwWDAwLCAwWDczLCAwWDAwLCAwWDAwLCAwWDAwLCAwWENELAorWzBYM0JGMV0gPSAwWEQ1LCAwWDAxLCAwWDAwLCAwWDc0LCAwWDAwLCAwWDAwLCAwWDAwLCAwWENFLAorWzBYM0JGOV0gPSAwWEQ1LCAwWDAxLCAwWDAwLCAwWDc1LCAwWDAwLCAwWDAwLCAwWDAwLCAwWENGLAorWzBYM0MwMV0gPSAwWEQ1LCAwWDAxLCAwWDAwLCAwWDc2LCAwWDAwLCAwWDAwLCAwWDAwLCAwWEQwLAorWzBYM0MwOV0gPSAwWEQ1LCAwWDAxLCAwWDAwLCAwWDc3LCAwWDAwLCAwWDAwLCAwWDAwLCAwWEQxLAorWzBYM0MxMV0gPSAwWEQ1LCAwWDAxLCAwWDAwLCAwWDc4LCAwWDAwLCAwWDAwLCAwWDAwLCAwWEQyLAorWzBYM0MxOV0gPSAwWEQ1LCAwWDAxLCAwWDAwLCAwWDc5LCAwWDAwLCAwWDAwLCAwWDAwLCAwWEQzLAorWzBYM0MyMV0gPSAwWEQ1LCAwWDAxLCAwWDAwLCAwWDdBLCAwWDAwLCAwWDAwLCAwWDAwLCAwWEQ0LAorWzBYM0MyOV0gPSAwWEQ1LCAwWDAxLCAwWDAwLCAwWDQxLCAwWDAwLCAwWDAwLCAwWDAwLCAwWEQ1LAorWzBYM0MzMV0gPSAwWEQ1LCAwWDAxLCAwWDAwLCAwWDQyLCAwWDAwLCAwWDAwLCAwWDAwLCAwWEQ2LAorWzBYM0MzOV0gPSAwWEQ1LCAwWDAxLCAwWDAwLCAwWDQzLCAwWDAwLCAwWDAwLCAwWDAwLCAwWEQ3LAorWzBYM0M0MV0gPSAwWEQ1LCAwWDAxLCAwWDAwLCAwWDQ0LCAwWDAwLCAwWDAwLCAwWDAwLCAwWEQ4LAorWzBYM0M0OV0gPSAwWEQ1LCAwWDAxLCAwWDAwLCAwWDQ1LCAwWDAwLCAwWDAwLCAwWDAwLCAwWEQ5LAorWzBYM0M1MV0gPSAwWEQ1LCAwWDAxLCAwWDAwLCAwWDQ2LCAwWDAwLCAwWDAwLCAwWDAwLCAwWERBLAorWzBYM0M1OV0gPSAwWEQ1LCAwWDAxLCAwWDAwLCAwWDQ3LCAwWDAwLCAwWDAwLCAwWDAwLCAwWERCLAorWzBYM0M2MV0gPSAwWEQ1LCAwWDAxLCAwWDAwLCAwWDQ4LCAwWDAwLCAwWDAwLCAwWDAwLCAwWERDLAorWzBYM0M2OV0gPSAwWEQ1LCAwWDAxLCAwWDAwLCAwWDQ5LCAwWDAwLCAwWDAwLCAwWDAwLCAwWERELAorWzBYM0M3MV0gPSAwWEQ1LCAwWDAxLCAwWDAwLCAwWDRBLCAwWDAwLCAwWDAwLCAwWDAwLCAwWERFLAorWzBYM0M3OV0gPSAwWEQ1LCAwWDAxLCAwWDAwLCAwWDRCLCAwWDAwLCAwWDAwLCAwWDAwLCAwWERGLAorWzBYM0M4MV0gPSAwWEQ1LCAwWDAxLCAwWDAwLCAwWDRDLCAwWDAwLCAwWDAwLCAwWDAwLCAwWEUwLAorWzBYM0M4OV0gPSAwWEQ1LCAwWDAxLCAwWDAwLCAwWDRELCAwWDAwLCAwWDAwLCAwWDAwLCAwWEUxLAorWzBYM0M5MV0gPSAwWEQ1LCAwWDAxLCAwWDAwLCAwWDRFLCAwWDAwLCAwWDAwLCAwWDAwLCAwWEUyLAorWzBYM0M5OV0gPSAwWEQ1LCAwWDAxLCAwWDAwLCAwWDRGLCAwWDAwLCAwWDAwLCAwWDAwLCAwWEUzLAorWzBYM0NBMV0gPSAwWEQ1LCAwWDAxLCAwWDAwLCAwWDUwLCAwWDAwLCAwWDAwLCAwWDAwLCAwWEU0LAorWzBYM0NBOV0gPSAwWEQ1LCAwWDAxLCAwWDAwLCAwWDUxLCAwWDAwLCAwWDAwLCAwWDAwLCAwWEU1LAorWzBYM0NCMV0gPSAwWEQ1LCAwWDAxLCAwWDAwLCAwWDUyLCAwWDAwLCAwWDAwLCAwWDAwLCAwWEU2LAorWzBYM0NCOV0gPSAwWEQ1LCAwWDAxLCAwWDAwLCAwWDUzLCAwWDAwLCAwWDAwLCAwWDAwLCAwWEU3LAorWzBYM0NDMV0gPSAwWEQ1LCAwWDAxLCAwWDAwLCAwWDU0LCAwWDAwLCAwWDAwLCAwWDAwLCAwWEU4LAorWzBYM0NDOV0gPSAwWEQ1LCAwWDAxLCAwWDAwLCAwWDU1LCAwWDAwLCAwWDAwLCAwWDAwLCAwWEU5LAorWzBYM0NEMV0gPSAwWEQ1LCAwWDAxLCAwWDAwLCAwWDU2LCAwWDAwLCAwWDAwLCAwWDAwLCAwWEVBLAorWzBYM0NEOV0gPSAwWEQ1LCAwWDAxLCAwWDAwLCAwWDU3LCAwWDAwLCAwWDAwLCAwWDAwLCAwWEVCLAorWzBYM0NFMV0gPSAwWEQ1LCAwWDAxLCAwWDAwLCAwWDU4LCAwWDAwLCAwWDAwLCAwWDAwLCAwWEVDLAorWzBYM0NFOV0gPSAwWEQ1LCAwWDAxLCAwWDAwLCAwWDU5LCAwWDAwLCAwWDAwLCAwWDAwLCAwWEVELAorWzBYM0NGMV0gPSAwWEQ1LCAwWDAxLCAwWDAwLCAwWDVBLCAwWDAwLCAwWDAwLCAwWDAwLCAwWEVFLAorWzBYM0NGOV0gPSAwWEQ1LCAwWDAxLCAwWDAwLCAwWDYxLCAwWDAwLCAwWDAwLCAwWDAwLCAwWEVGLAorWzBYM0QwMV0gPSAwWEQ1LCAwWDAxLCAwWDAwLCAwWDYyLCAwWDAwLCAwWDAwLCAwWDAwLCAwWEYwLAorWzBYM0QwOV0gPSAwWEQ1LCAwWDAxLCAwWDAwLCAwWDYzLCAwWDAwLCAwWDAwLCAwWDAwLCAwWEYxLAorWzBYM0QxMV0gPSAwWEQ1LCAwWDAxLCAwWDAwLCAwWDY0LCAwWDAwLCAwWDAwLCAwWDAwLCAwWEYyLAorWzBYM0QxOV0gPSAwWEQ1LCAwWDAxLCAwWDAwLCAwWDY1LCAwWDAwLCAwWDAwLCAwWDAwLCAwWEYzLAorWzBYM0QyMV0gPSAwWEQ1LCAwWDAxLCAwWDAwLCAwWDY2LCAwWDAwLCAwWDAwLCAwWDAwLCAwWEY0LAorWzBYM0QyOV0gPSAwWEQ1LCAwWDAxLCAwWDAwLCAwWDY3LCAwWDAwLCAwWDAwLCAwWDAwLCAwWEY1LAorWzBYM0QzMV0gPSAwWEQ1LCAwWDAxLCAwWDAwLCAwWDY4LCAwWDAwLCAwWDAwLCAwWDAwLCAwWEY2LAorWzBYM0QzOV0gPSAwWEQ1LCAwWDAxLCAwWDAwLCAwWDY5LCAwWDAwLCAwWDAwLCAwWDAwLCAwWEY3LAorWzBYM0Q0MV0gPSAwWEQ1LCAwWDAxLCAwWDAwLCAwWDZBLCAwWDAwLCAwWDAwLCAwWDAwLCAwWEY4LAorWzBYM0Q0OV0gPSAwWEQ1LCAwWDAxLCAwWDAwLCAwWDZCLCAwWDAwLCAwWDAwLCAwWDAwLCAwWEY5LAorWzBYM0Q1MV0gPSAwWEQ1LCAwWDAxLCAwWDAwLCAwWDZDLCAwWDAwLCAwWDAwLCAwWDAwLCAwWEZBLAorWzBYM0Q1OV0gPSAwWEQ1LCAwWDAxLCAwWDAwLCAwWDZELCAwWDAwLCAwWDAwLCAwWDAwLCAwWEZCLAorWzBYM0Q2MV0gPSAwWEQ1LCAwWDAxLCAwWDAwLCAwWDZFLCAwWDAwLCAwWDAwLCAwWDAwLCAwWEZDLAorWzBYM0Q2OV0gPSAwWEQ1LCAwWDAxLCAwWDAwLCAwWDZGLCAwWDAwLCAwWDAwLCAwWDAwLCAwWEZELAorWzBYM0Q3MV0gPSAwWEQ1LCAwWDAxLCAwWDAwLCAwWDcwLCAwWDAwLCAwWDAwLCAwWDAwLCAwWEZFLAorWzBYM0Q3OV0gPSAwWEQ1LCAwWDAxLCAwWDAwLCAwWDcxLCAwWDAwLCAwWDAwLCAwWDAwLCAwWEZGLAorWzBYM0Q4MV0gPSAwWEQ1LCAwWDAxLCAwWDAwLCAwWDcyLAorWzBYM0Q4OV0gPSAwWEQ2LCAwWDAxLCAwWDAwLCAwWDczLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDAxLAorWzBYM0Q5MV0gPSAwWEQ2LCAwWDAxLCAwWDAwLCAwWDc0LCAwWDAwLCAwWDAwLCAwWDAwLCAwWDAyLAorWzBYM0Q5OV0gPSAwWEQ2LCAwWDAxLCAwWDAwLCAwWDc1LCAwWDAwLCAwWDAwLCAwWDAwLCAwWDAzLAorWzBYM0RBMV0gPSAwWEQ2LCAwWDAxLCAwWDAwLCAwWDc2LCAwWDAwLCAwWDAwLCAwWDAwLCAwWDA0LAorWzBYM0RBOV0gPSAwWEQ2LCAwWDAxLCAwWDAwLCAwWDc3LCAwWDAwLCAwWDAwLCAwWDAwLCAwWDA1LAorWzBYM0RCMV0gPSAwWEQ2LCAwWDAxLCAwWDAwLCAwWDc4LCAwWDAwLCAwWDAwLCAwWDAwLCAwWDA2LAorWzBYM0RCOV0gPSAwWEQ2LCAwWDAxLCAwWDAwLCAwWDc5LCAwWDAwLCAwWDAwLCAwWDAwLCAwWDA3LAorWzBYM0RDMV0gPSAwWEQ2LCAwWDAxLCAwWDAwLCAwWDdBLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDA4LAorWzBYM0RDOV0gPSAwWEQ2LCAwWDAxLCAwWDAwLCAwWDQxLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDA5LAorWzBYM0REMV0gPSAwWEQ2LCAwWDAxLCAwWDAwLCAwWDQyLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDBBLAorWzBYM0REOV0gPSAwWEQ2LCAwWDAxLCAwWDAwLCAwWDQzLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDBCLAorWzBYM0RFMV0gPSAwWEQ2LCAwWDAxLCAwWDAwLCAwWDQ0LCAwWDAwLCAwWDAwLCAwWDAwLCAwWDBDLAorWzBYM0RFOV0gPSAwWEQ2LCAwWDAxLCAwWDAwLCAwWDQ1LCAwWDAwLCAwWDAwLCAwWDAwLCAwWDBELAorWzBYM0RGMV0gPSAwWEQ2LCAwWDAxLCAwWDAwLCAwWDQ2LCAwWDAwLCAwWDAwLCAwWDAwLCAwWDBFLAorWzBYM0RGOV0gPSAwWEQ2LCAwWDAxLCAwWDAwLCAwWDQ3LCAwWDAwLCAwWDAwLCAwWDAwLCAwWDBGLAorWzBYM0UwMV0gPSAwWEQ2LCAwWDAxLCAwWDAwLCAwWDQ4LCAwWDAwLCAwWDAwLCAwWDAwLCAwWDEwLAorWzBYM0UwOV0gPSAwWEQ2LCAwWDAxLCAwWDAwLCAwWDQ5LCAwWDAwLCAwWDAwLCAwWDAwLCAwWDExLAorWzBYM0UxMV0gPSAwWEQ2LCAwWDAxLCAwWDAwLCAwWDRBLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDEyLAorWzBYM0UxOV0gPSAwWEQ2LCAwWDAxLCAwWDAwLCAwWDRCLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDEzLAorWzBYM0UyMV0gPSAwWEQ2LCAwWDAxLCAwWDAwLCAwWDRDLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDE0LAorWzBYM0UyOV0gPSAwWEQ2LCAwWDAxLCAwWDAwLCAwWDRELCAwWDAwLCAwWDAwLCAwWDAwLCAwWDE1LAorWzBYM0UzMV0gPSAwWEQ2LCAwWDAxLCAwWDAwLCAwWDRFLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDE2LAorWzBYM0UzOV0gPSAwWEQ2LCAwWDAxLCAwWDAwLCAwWDRGLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDE3LAorWzBYM0U0MV0gPSAwWEQ2LCAwWDAxLCAwWDAwLCAwWDUwLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDE4LAorWzBYM0U0OV0gPSAwWEQ2LCAwWDAxLCAwWDAwLCAwWDUxLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDE5LAorWzBYM0U1MV0gPSAwWEQ2LCAwWDAxLCAwWDAwLCAwWDUyLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDFBLAorWzBYM0U1OV0gPSAwWEQ2LCAwWDAxLCAwWDAwLCAwWDUzLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDFCLAorWzBYM0U2MV0gPSAwWEQ2LCAwWDAxLCAwWDAwLCAwWDU0LCAwWDAwLCAwWDAwLCAwWDAwLCAwWDFDLAorWzBYM0U2OV0gPSAwWEQ2LCAwWDAxLCAwWDAwLCAwWDU1LCAwWDAwLCAwWDAwLCAwWDAwLCAwWDFELAorWzBYM0U3MV0gPSAwWEQ2LCAwWDAxLCAwWDAwLCAwWDU2LCAwWDAwLCAwWDAwLCAwWDAwLCAwWDFFLAorWzBYM0U3OV0gPSAwWEQ2LCAwWDAxLCAwWDAwLCAwWDU3LCAwWDAwLCAwWDAwLCAwWDAwLCAwWDFGLAorWzBYM0U4MV0gPSAwWEQ2LCAwWDAxLCAwWDAwLCAwWDU4LCAwWDAwLCAwWDAwLCAwWDAwLCAwWDIwLAorWzBYM0U4OV0gPSAwWEQ2LCAwWDAxLCAwWDAwLCAwWDU5LCAwWDAwLCAwWDAwLCAwWDAwLCAwWDIxLAorWzBYM0U5MV0gPSAwWEQ2LCAwWDAxLCAwWDAwLCAwWDVBLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDIyLAorWzBYM0U5OV0gPSAwWEQ2LCAwWDAxLCAwWDAwLCAwWDYxLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDIzLAorWzBYM0VBMV0gPSAwWEQ2LCAwWDAxLCAwWDAwLCAwWDYyLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDI0LAorWzBYM0VBOV0gPSAwWEQ2LCAwWDAxLCAwWDAwLCAwWDYzLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDI1LAorWzBYM0VCMV0gPSAwWEQ2LCAwWDAxLCAwWDAwLCAwWDY0LCAwWDAwLCAwWDAwLCAwWDAwLCAwWDI2LAorWzBYM0VCOV0gPSAwWEQ2LCAwWDAxLCAwWDAwLCAwWDY1LCAwWDAwLCAwWDAwLCAwWDAwLCAwWDI3LAorWzBYM0VDMV0gPSAwWEQ2LCAwWDAxLCAwWDAwLCAwWDY2LCAwWDAwLCAwWDAwLCAwWDAwLCAwWDI4LAorWzBYM0VDOV0gPSAwWEQ2LCAwWDAxLCAwWDAwLCAwWDY3LCAwWDAwLCAwWDAwLCAwWDAwLCAwWDI5LAorWzBYM0VEMV0gPSAwWEQ2LCAwWDAxLCAwWDAwLCAwWDY4LCAwWDAwLCAwWDAwLCAwWDAwLCAwWDJBLAorWzBYM0VEOV0gPSAwWEQ2LCAwWDAxLCAwWDAwLCAwWDY5LCAwWDAwLCAwWDAwLCAwWDAwLCAwWDJCLAorWzBYM0VFMV0gPSAwWEQ2LCAwWDAxLCAwWDAwLCAwWDZBLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDJDLAorWzBYM0VFOV0gPSAwWEQ2LCAwWDAxLCAwWDAwLCAwWDZCLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDJELAorWzBYM0VGMV0gPSAwWEQ2LCAwWDAxLCAwWDAwLCAwWDZDLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDJFLAorWzBYM0VGOV0gPSAwWEQ2LCAwWDAxLCAwWDAwLCAwWDZELCAwWDAwLCAwWDAwLCAwWDAwLCAwWDJGLAorWzBYM0YwMV0gPSAwWEQ2LCAwWDAxLCAwWDAwLCAwWDZFLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDMwLAorWzBYM0YwOV0gPSAwWEQ2LCAwWDAxLCAwWDAwLCAwWDZGLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDMxLAorWzBYM0YxMV0gPSAwWEQ2LCAwWDAxLCAwWDAwLCAwWDcwLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDMyLAorWzBYM0YxOV0gPSAwWEQ2LCAwWDAxLCAwWDAwLCAwWDcxLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDMzLAorWzBYM0YyMV0gPSAwWEQ2LCAwWDAxLCAwWDAwLCAwWDcyLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDM0LAorWzBYM0YyOV0gPSAwWEQ2LCAwWDAxLCAwWDAwLCAwWDczLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDM1LAorWzBYM0YzMV0gPSAwWEQ2LCAwWDAxLCAwWDAwLCAwWDc0LCAwWDAwLCAwWDAwLCAwWDAwLCAwWDM2LAorWzBYM0YzOV0gPSAwWEQ2LCAwWDAxLCAwWDAwLCAwWDc1LCAwWDAwLCAwWDAwLCAwWDAwLCAwWDM3LAorWzBYM0Y0MV0gPSAwWEQ2LCAwWDAxLCAwWDAwLCAwWDc2LCAwWDAwLCAwWDAwLCAwWDAwLCAwWDM4LAorWzBYM0Y0OV0gPSAwWEQ2LCAwWDAxLCAwWDAwLCAwWDc3LCAwWDAwLCAwWDAwLCAwWDAwLCAwWDM5LAorWzBYM0Y1MV0gPSAwWEQ2LCAwWDAxLCAwWDAwLCAwWDc4LCAwWDAwLCAwWDAwLCAwWDAwLCAwWDNBLAorWzBYM0Y1OV0gPSAwWEQ2LCAwWDAxLCAwWDAwLCAwWDc5LCAwWDAwLCAwWDAwLCAwWDAwLCAwWDNCLAorWzBYM0Y2MV0gPSAwWEQ2LCAwWDAxLCAwWDAwLCAwWDdBLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDNDLAorWzBYM0Y2OV0gPSAwWEQ2LCAwWDAxLCAwWDAwLCAwWDQxLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDNELAorWzBYM0Y3MV0gPSAwWEQ2LCAwWDAxLCAwWDAwLCAwWDQyLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDNFLAorWzBYM0Y3OV0gPSAwWEQ2LCAwWDAxLCAwWDAwLCAwWDQzLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDNGLAorWzBYM0Y4MV0gPSAwWEQ2LCAwWDAxLCAwWDAwLCAwWDQ0LCAwWDAwLCAwWDAwLCAwWDAwLCAwWDQwLAorWzBYM0Y4OV0gPSAwWEQ2LCAwWDAxLCAwWDAwLCAwWDQ1LCAwWDAwLCAwWDAwLCAwWDAwLCAwWDQxLAorWzBYM0Y5MV0gPSAwWEQ2LCAwWDAxLCAwWDAwLCAwWDQ2LCAwWDAwLCAwWDAwLCAwWDAwLCAwWDQyLAorWzBYM0Y5OV0gPSAwWEQ2LCAwWDAxLCAwWDAwLCAwWDQ3LCAwWDAwLCAwWDAwLCAwWDAwLCAwWDQzLAorWzBYM0ZBMV0gPSAwWEQ2LCAwWDAxLCAwWDAwLCAwWDQ4LCAwWDAwLCAwWDAwLCAwWDAwLCAwWDQ0LAorWzBYM0ZBOV0gPSAwWEQ2LCAwWDAxLCAwWDAwLCAwWDQ5LCAwWDAwLCAwWDAwLCAwWDAwLCAwWDQ1LAorWzBYM0ZCMV0gPSAwWEQ2LCAwWDAxLCAwWDAwLCAwWDRBLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDQ2LAorWzBYM0ZCOV0gPSAwWEQ2LCAwWDAxLCAwWDAwLCAwWDRCLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDQ3LAorWzBYM0ZDMV0gPSAwWEQ2LCAwWDAxLCAwWDAwLCAwWDRDLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDQ4LAorWzBYM0ZDOV0gPSAwWEQ2LCAwWDAxLCAwWDAwLCAwWDRELCAwWDAwLCAwWDAwLCAwWDAwLCAwWDQ5LAorWzBYM0ZEMV0gPSAwWEQ2LCAwWDAxLCAwWDAwLCAwWDRFLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDRBLAorWzBYM0ZEOV0gPSAwWEQ2LCAwWDAxLCAwWDAwLCAwWDRGLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDRCLAorWzBYM0ZFMV0gPSAwWEQ2LCAwWDAxLCAwWDAwLCAwWDUwLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDRDLAorWzBYM0ZFOV0gPSAwWEQ2LCAwWDAxLCAwWDAwLCAwWDUxLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDRELAorWzBYM0ZGMV0gPSAwWEQ2LCAwWDAxLCAwWDAwLCAwWDUyLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDRFLAorWzBYM0ZGOV0gPSAwWEQ2LCAwWDAxLCAwWDAwLCAwWDUzLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDRGLAorWzBYNDAwMV0gPSAwWEQ2LCAwWDAxLCAwWDAwLCAwWDU0LCAwWDAwLCAwWDAwLCAwWDAwLCAwWDUwLAorWzBYNDAwOV0gPSAwWEQ2LCAwWDAxLCAwWDAwLCAwWDU1LCAwWDAwLCAwWDAwLCAwWDAwLCAwWDUxLAorWzBYNDAxMV0gPSAwWEQ2LCAwWDAxLCAwWDAwLCAwWDU2LCAwWDAwLCAwWDAwLCAwWDAwLCAwWDUyLAorWzBYNDAxOV0gPSAwWEQ2LCAwWDAxLCAwWDAwLCAwWDU3LCAwWDAwLCAwWDAwLCAwWDAwLCAwWDUzLAorWzBYNDAyMV0gPSAwWEQ2LCAwWDAxLCAwWDAwLCAwWDU4LCAwWDAwLCAwWDAwLCAwWDAwLCAwWDU0LAorWzBYNDAyOV0gPSAwWEQ2LCAwWDAxLCAwWDAwLCAwWDU5LCAwWDAwLCAwWDAwLCAwWDAwLCAwWDU1LAorWzBYNDAzMV0gPSAwWEQ2LCAwWDAxLCAwWDAwLCAwWDVBLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDU2LAorWzBYNDAzOV0gPSAwWEQ2LCAwWDAxLCAwWDAwLCAwWDYxLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDU3LAorWzBYNDA0MV0gPSAwWEQ2LCAwWDAxLCAwWDAwLCAwWDYyLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDU4LAorWzBYNDA0OV0gPSAwWEQ2LCAwWDAxLCAwWDAwLCAwWDYzLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDU5LAorWzBYNDA1MV0gPSAwWEQ2LCAwWDAxLCAwWDAwLCAwWDY0LCAwWDAwLCAwWDAwLCAwWDAwLCAwWDVBLAorWzBYNDA1OV0gPSAwWEQ2LCAwWDAxLCAwWDAwLCAwWDY1LCAwWDAwLCAwWDAwLCAwWDAwLCAwWDVCLAorWzBYNDA2MV0gPSAwWEQ2LCAwWDAxLCAwWDAwLCAwWDY2LCAwWDAwLCAwWDAwLCAwWDAwLCAwWDVDLAorWzBYNDA2OV0gPSAwWEQ2LCAwWDAxLCAwWDAwLCAwWDY3LCAwWDAwLCAwWDAwLCAwWDAwLCAwWDVELAorWzBYNDA3MV0gPSAwWEQ2LCAwWDAxLCAwWDAwLCAwWDY4LCAwWDAwLCAwWDAwLCAwWDAwLCAwWDVFLAorWzBYNDA3OV0gPSAwWEQ2LCAwWDAxLCAwWDAwLCAwWDY5LCAwWDAwLCAwWDAwLCAwWDAwLCAwWDVGLAorWzBYNDA4MV0gPSAwWEQ2LCAwWDAxLCAwWDAwLCAwWDZBLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDYwLAorWzBYNDA4OV0gPSAwWEQ2LCAwWDAxLCAwWDAwLCAwWDZCLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDYxLAorWzBYNDA5MV0gPSAwWEQ2LCAwWDAxLCAwWDAwLCAwWDZDLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDYyLAorWzBYNDA5OV0gPSAwWEQ2LCAwWDAxLCAwWDAwLCAwWDZELCAwWDAwLCAwWDAwLCAwWDAwLCAwWDYzLAorWzBYNDBBMV0gPSAwWEQ2LCAwWDAxLCAwWDAwLCAwWDZFLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDY0LAorWzBYNDBBOV0gPSAwWEQ2LCAwWDAxLCAwWDAwLCAwWDZGLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDY1LAorWzBYNDBCMV0gPSAwWEQ2LCAwWDAxLCAwWDAwLCAwWDcwLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDY2LAorWzBYNDBCOV0gPSAwWEQ2LCAwWDAxLCAwWDAwLCAwWDcxLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDY3LAorWzBYNDBDMV0gPSAwWEQ2LCAwWDAxLCAwWDAwLCAwWDcyLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDY4LAorWzBYNDBDOV0gPSAwWEQ2LCAwWDAxLCAwWDAwLCAwWDczLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDY5LAorWzBYNDBEMV0gPSAwWEQ2LCAwWDAxLCAwWDAwLCAwWDc0LCAwWDAwLCAwWDAwLCAwWDAwLCAwWDZBLAorWzBYNDBEOV0gPSAwWEQ2LCAwWDAxLCAwWDAwLCAwWDc1LCAwWDAwLCAwWDAwLCAwWDAwLCAwWDZCLAorWzBYNDBFMV0gPSAwWEQ2LCAwWDAxLCAwWDAwLCAwWDc2LCAwWDAwLCAwWDAwLCAwWDAwLCAwWDZDLAorWzBYNDBFOV0gPSAwWEQ2LCAwWDAxLCAwWDAwLCAwWDc3LCAwWDAwLCAwWDAwLCAwWDAwLCAwWDZELAorWzBYNDBGMV0gPSAwWEQ2LCAwWDAxLCAwWDAwLCAwWDc4LCAwWDAwLCAwWDAwLCAwWDAwLCAwWDZFLAorWzBYNDBGOV0gPSAwWEQ2LCAwWDAxLCAwWDAwLCAwWDc5LCAwWDAwLCAwWDAwLCAwWDAwLCAwWDZGLAorWzBYNDEwMV0gPSAwWEQ2LCAwWDAxLCAwWDAwLCAwWDdBLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDcwLAorWzBYNDEwOV0gPSAwWEQ2LCAwWDAxLCAwWDAwLCAwWDQxLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDcxLAorWzBYNDExMV0gPSAwWEQ2LCAwWDAxLCAwWDAwLCAwWDQyLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDcyLAorWzBYNDExOV0gPSAwWEQ2LCAwWDAxLCAwWDAwLCAwWDQzLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDczLAorWzBYNDEyMV0gPSAwWEQ2LCAwWDAxLCAwWDAwLCAwWDQ0LCAwWDAwLCAwWDAwLCAwWDAwLCAwWDc0LAorWzBYNDEyOV0gPSAwWEQ2LCAwWDAxLCAwWDAwLCAwWDQ1LCAwWDAwLCAwWDAwLCAwWDAwLCAwWDc1LAorWzBYNDEzMV0gPSAwWEQ2LCAwWDAxLCAwWDAwLCAwWDQ2LCAwWDAwLCAwWDAwLCAwWDAwLCAwWDc2LAorWzBYNDEzOV0gPSAwWEQ2LCAwWDAxLCAwWDAwLCAwWDQ3LCAwWDAwLCAwWDAwLCAwWDAwLCAwWDc3LAorWzBYNDE0MV0gPSAwWEQ2LCAwWDAxLCAwWDAwLCAwWDQ4LCAwWDAwLCAwWDAwLCAwWDAwLCAwWDc4LAorWzBYNDE0OV0gPSAwWEQ2LCAwWDAxLCAwWDAwLCAwWDQ5LCAwWDAwLCAwWDAwLCAwWDAwLCAwWDc5LAorWzBYNDE1MV0gPSAwWEQ2LCAwWDAxLCAwWDAwLCAwWDRBLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDdBLAorWzBYNDE1OV0gPSAwWEQ2LCAwWDAxLCAwWDAwLCAwWDRCLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDdCLAorWzBYNDE2MV0gPSAwWEQ2LCAwWDAxLCAwWDAwLCAwWDRDLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDdDLAorWzBYNDE2OV0gPSAwWEQ2LCAwWDAxLCAwWDAwLCAwWDRELCAwWDAwLCAwWDAwLCAwWDAwLCAwWDdELAorWzBYNDE3MV0gPSAwWEQ2LCAwWDAxLCAwWDAwLCAwWDRFLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDdFLAorWzBYNDE3OV0gPSAwWEQ2LCAwWDAxLCAwWDAwLCAwWDRGLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDdGLAorWzBYNDE4MV0gPSAwWEQ2LCAwWDAxLCAwWDAwLCAwWDUwLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDgwLAorWzBYNDE4OV0gPSAwWEQ2LCAwWDAxLCAwWDAwLCAwWDUxLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDgxLAorWzBYNDE5MV0gPSAwWEQ2LCAwWDAxLCAwWDAwLCAwWDUyLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDgyLAorWzBYNDE5OV0gPSAwWEQ2LCAwWDAxLCAwWDAwLCAwWDUzLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDgzLAorWzBYNDFBMV0gPSAwWEQ2LCAwWDAxLCAwWDAwLCAwWDU0LCAwWDAwLCAwWDAwLCAwWDAwLCAwWDg0LAorWzBYNDFBOV0gPSAwWEQ2LCAwWDAxLCAwWDAwLCAwWDU1LCAwWDAwLCAwWDAwLCAwWDAwLCAwWDg1LAorWzBYNDFCMV0gPSAwWEQ2LCAwWDAxLCAwWDAwLCAwWDU2LCAwWDAwLCAwWDAwLCAwWDAwLCAwWDg2LAorWzBYNDFCOV0gPSAwWEQ2LCAwWDAxLCAwWDAwLCAwWDU3LCAwWDAwLCAwWDAwLCAwWDAwLCAwWDg3LAorWzBYNDFDMV0gPSAwWEQ2LCAwWDAxLCAwWDAwLCAwWDU4LCAwWDAwLCAwWDAwLCAwWDAwLCAwWDg4LAorWzBYNDFDOV0gPSAwWEQ2LCAwWDAxLCAwWDAwLCAwWDU5LCAwWDAwLCAwWDAwLCAwWDAwLCAwWDg5LAorWzBYNDFEMV0gPSAwWEQ2LCAwWDAxLCAwWDAwLCAwWDVBLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDhBLAorWzBYNDFEOV0gPSAwWEQ2LCAwWDAxLCAwWDAwLCAwWDYxLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDhCLAorWzBYNDFFMV0gPSAwWEQ2LCAwWDAxLCAwWDAwLCAwWDYyLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDhDLAorWzBYNDFFOV0gPSAwWEQ2LCAwWDAxLCAwWDAwLCAwWDYzLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDhELAorWzBYNDFGMV0gPSAwWEQ2LCAwWDAxLCAwWDAwLCAwWDY0LCAwWDAwLCAwWDAwLCAwWDAwLCAwWDhFLAorWzBYNDFGOV0gPSAwWEQ2LCAwWDAxLCAwWDAwLCAwWDY1LCAwWDAwLCAwWDAwLCAwWDAwLCAwWDhGLAorWzBYNDIwMV0gPSAwWEQ2LCAwWDAxLCAwWDAwLCAwWDY2LCAwWDAwLCAwWDAwLCAwWDAwLCAwWDkwLAorWzBYNDIwOV0gPSAwWEQ2LCAwWDAxLCAwWDAwLCAwWDY3LCAwWDAwLCAwWDAwLCAwWDAwLCAwWDkxLAorWzBYNDIxMV0gPSAwWEQ2LCAwWDAxLCAwWDAwLCAwWDY4LCAwWDAwLCAwWDAwLCAwWDAwLCAwWDkyLAorWzBYNDIxOV0gPSAwWEQ2LCAwWDAxLCAwWDAwLCAwWDY5LCAwWDAwLCAwWDAwLCAwWDAwLCAwWDkzLAorWzBYNDIyMV0gPSAwWEQ2LCAwWDAxLCAwWDAwLCAwWDZBLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDk0LAorWzBYNDIyOV0gPSAwWEQ2LCAwWDAxLCAwWDAwLCAwWDZCLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDk1LAorWzBYNDIzMV0gPSAwWEQ2LCAwWDAxLCAwWDAwLCAwWDZDLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDk2LAorWzBYNDIzOV0gPSAwWEQ2LCAwWDAxLCAwWDAwLCAwWDZELCAwWDAwLCAwWDAwLCAwWDAwLCAwWDk3LAorWzBYNDI0MV0gPSAwWEQ2LCAwWDAxLCAwWDAwLCAwWDZFLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDk4LAorWzBYNDI0OV0gPSAwWEQ2LCAwWDAxLCAwWDAwLCAwWDZGLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDk5LAorWzBYNDI1MV0gPSAwWEQ2LCAwWDAxLCAwWDAwLCAwWDcwLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDlBLAorWzBYNDI1OV0gPSAwWEQ2LCAwWDAxLCAwWDAwLCAwWDcxLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDlCLAorWzBYNDI2MV0gPSAwWEQ2LCAwWDAxLCAwWDAwLCAwWDcyLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDlDLAorWzBYNDI2OV0gPSAwWEQ2LCAwWDAxLCAwWDAwLCAwWDczLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDlELAorWzBYNDI3MV0gPSAwWEQ2LCAwWDAxLCAwWDAwLCAwWDc0LCAwWDAwLCAwWDAwLCAwWDAwLCAwWDlFLAorWzBYNDI3OV0gPSAwWEQ2LCAwWDAxLCAwWDAwLCAwWDc1LCAwWDAwLCAwWDAwLCAwWDAwLCAwWDlGLAorWzBYNDI4MV0gPSAwWEQ2LCAwWDAxLCAwWDAwLCAwWDc2LCAwWDAwLCAwWDAwLCAwWDAwLCAwWEEwLAorWzBYNDI4OV0gPSAwWEQ2LCAwWDAxLCAwWDAwLCAwWDc3LCAwWDAwLCAwWDAwLCAwWDAwLCAwWEExLAorWzBYNDI5MV0gPSAwWEQ2LCAwWDAxLCAwWDAwLCAwWDc4LCAwWDAwLCAwWDAwLCAwWDAwLCAwWEEyLAorWzBYNDI5OV0gPSAwWEQ2LCAwWDAxLCAwWDAwLCAwWDc5LCAwWDAwLCAwWDAwLCAwWDAwLCAwWEEzLAorWzBYNDJBMV0gPSAwWEQ2LCAwWDAxLCAwWDAwLCAwWDdBLCAwWDAwLCAwWDAwLCAwWDAwLCAwWENFLAorWzBYNDJBOV0gPSAwWEQ3LCAwWDAxLCAwWDAwLCAwWDMwLCAwWDAwLCAwWDAwLCAwWDAwLCAwWENGLAorWzBYNDJCMV0gPSAwWEQ3LCAwWDAxLCAwWDAwLCAwWDMxLCAwWDAwLCAwWDAwLCAwWDAwLCAwWEQwLAorWzBYNDJCOV0gPSAwWEQ3LCAwWDAxLCAwWDAwLCAwWDMyLCAwWDAwLCAwWDAwLCAwWDAwLCAwWEQxLAorWzBYNDJDMV0gPSAwWEQ3LCAwWDAxLCAwWDAwLCAwWDMzLCAwWDAwLCAwWDAwLCAwWDAwLCAwWEQyLAorWzBYNDJDOV0gPSAwWEQ3LCAwWDAxLCAwWDAwLCAwWDM0LCAwWDAwLCAwWDAwLCAwWDAwLCAwWEQzLAorWzBYNDJEMV0gPSAwWEQ3LCAwWDAxLCAwWDAwLCAwWDM1LCAwWDAwLCAwWDAwLCAwWDAwLCAwWEQ0LAorWzBYNDJEOV0gPSAwWEQ3LCAwWDAxLCAwWDAwLCAwWDM2LCAwWDAwLCAwWDAwLCAwWDAwLCAwWEQ1LAorWzBYNDJFMV0gPSAwWEQ3LCAwWDAxLCAwWDAwLCAwWDM3LCAwWDAwLCAwWDAwLCAwWDAwLCAwWEQ2LAorWzBYNDJFOV0gPSAwWEQ3LCAwWDAxLCAwWDAwLCAwWDM4LCAwWDAwLCAwWDAwLCAwWDAwLCAwWEQ3LAorWzBYNDJGMV0gPSAwWEQ3LCAwWDAxLCAwWDAwLCAwWDM5LCAwWDAwLCAwWDAwLCAwWDAwLCAwWEQ4LAorWzBYNDJGOV0gPSAwWEQ3LCAwWDAxLCAwWDAwLCAwWDMwLCAwWDAwLCAwWDAwLCAwWDAwLCAwWEQ5LAorWzBYNDMwMV0gPSAwWEQ3LCAwWDAxLCAwWDAwLCAwWDMxLCAwWDAwLCAwWDAwLCAwWDAwLCAwWERBLAorWzBYNDMwOV0gPSAwWEQ3LCAwWDAxLCAwWDAwLCAwWDMyLCAwWDAwLCAwWDAwLCAwWDAwLCAwWERCLAorWzBYNDMxMV0gPSAwWEQ3LCAwWDAxLCAwWDAwLCAwWDMzLCAwWDAwLCAwWDAwLCAwWDAwLCAwWERDLAorWzBYNDMxOV0gPSAwWEQ3LCAwWDAxLCAwWDAwLCAwWDM0LCAwWDAwLCAwWDAwLCAwWDAwLCAwWERELAorWzBYNDMyMV0gPSAwWEQ3LCAwWDAxLCAwWDAwLCAwWDM1LCAwWDAwLCAwWDAwLCAwWDAwLCAwWERFLAorWzBYNDMyOV0gPSAwWEQ3LCAwWDAxLCAwWDAwLCAwWDM2LCAwWDAwLCAwWDAwLCAwWDAwLCAwWERGLAorWzBYNDMzMV0gPSAwWEQ3LCAwWDAxLCAwWDAwLCAwWDM3LCAwWDAwLCAwWDAwLCAwWDAwLCAwWEUwLAorWzBYNDMzOV0gPSAwWEQ3LCAwWDAxLCAwWDAwLCAwWDM4LCAwWDAwLCAwWDAwLCAwWDAwLCAwWEUxLAorWzBYNDM0MV0gPSAwWEQ3LCAwWDAxLCAwWDAwLCAwWDM5LCAwWDAwLCAwWDAwLCAwWDAwLCAwWEUyLAorWzBYNDM0OV0gPSAwWEQ3LCAwWDAxLCAwWDAwLCAwWDMwLCAwWDAwLCAwWDAwLCAwWDAwLCAwWEUzLAorWzBYNDM1MV0gPSAwWEQ3LCAwWDAxLCAwWDAwLCAwWDMxLCAwWDAwLCAwWDAwLCAwWDAwLCAwWEU0LAorWzBYNDM1OV0gPSAwWEQ3LCAwWDAxLCAwWDAwLCAwWDMyLCAwWDAwLCAwWDAwLCAwWDAwLCAwWEU1LAorWzBYNDM2MV0gPSAwWEQ3LCAwWDAxLCAwWDAwLCAwWDMzLCAwWDAwLCAwWDAwLCAwWDAwLCAwWEU2LAorWzBYNDM2OV0gPSAwWEQ3LCAwWDAxLCAwWDAwLCAwWDM0LCAwWDAwLCAwWDAwLCAwWDAwLCAwWEU3LAorWzBYNDM3MV0gPSAwWEQ3LCAwWDAxLCAwWDAwLCAwWDM1LCAwWDAwLCAwWDAwLCAwWDAwLCAwWEU4LAorWzBYNDM3OV0gPSAwWEQ3LCAwWDAxLCAwWDAwLCAwWDM2LCAwWDAwLCAwWDAwLCAwWDAwLCAwWEU5LAorWzBYNDM4MV0gPSAwWEQ3LCAwWDAxLCAwWDAwLCAwWDM3LCAwWDAwLCAwWDAwLCAwWDAwLCAwWEVBLAorWzBYNDM4OV0gPSAwWEQ3LCAwWDAxLCAwWDAwLCAwWDM4LCAwWDAwLCAwWDAwLCAwWDAwLCAwWEVCLAorWzBYNDM5MV0gPSAwWEQ3LCAwWDAxLCAwWDAwLCAwWDM5LCAwWDAwLCAwWDAwLCAwWDAwLCAwWEVDLAorWzBYNDM5OV0gPSAwWEQ3LCAwWDAxLCAwWDAwLCAwWDMwLCAwWDAwLCAwWDAwLCAwWDAwLCAwWEVELAorWzBYNDNBMV0gPSAwWEQ3LCAwWDAxLCAwWDAwLCAwWDMxLCAwWDAwLCAwWDAwLCAwWDAwLCAwWEVFLAorWzBYNDNBOV0gPSAwWEQ3LCAwWDAxLCAwWDAwLCAwWDMyLCAwWDAwLCAwWDAwLCAwWDAwLCAwWEVGLAorWzBYNDNCMV0gPSAwWEQ3LCAwWDAxLCAwWDAwLCAwWDMzLCAwWDAwLCAwWDAwLCAwWDAwLCAwWEYwLAorWzBYNDNCOV0gPSAwWEQ3LCAwWDAxLCAwWDAwLCAwWDM0LCAwWDAwLCAwWDAwLCAwWDAwLCAwWEYxLAorWzBYNDNDMV0gPSAwWEQ3LCAwWDAxLCAwWDAwLCAwWDM1LCAwWDAwLCAwWDAwLCAwWDAwLCAwWEYyLAorWzBYNDNDOV0gPSAwWEQ3LCAwWDAxLCAwWDAwLCAwWDM2LCAwWDAwLCAwWDAwLCAwWDAwLCAwWEYzLAorWzBYNDNEMV0gPSAwWEQ3LCAwWDAxLCAwWDAwLCAwWDM3LCAwWDAwLCAwWDAwLCAwWDAwLCAwWEY0LAorWzBYNDNEOV0gPSAwWEQ3LCAwWDAxLCAwWDAwLCAwWDM4LCAwWDAwLCAwWDAwLCAwWDAwLCAwWEY1LAorWzBYNDNFMV0gPSAwWEQ3LCAwWDAxLCAwWDAwLCAwWDM5LCAwWDAwLCAwWDAwLCAwWDAwLCAwWEY2LAorWzBYNDNFOV0gPSAwWEQ3LCAwWDAxLCAwWDAwLCAwWDMwLCAwWDAwLCAwWDAwLCAwWDAwLCAwWEY3LAorWzBYNDNGMV0gPSAwWEQ3LCAwWDAxLCAwWDAwLCAwWDMxLCAwWDAwLCAwWDAwLCAwWDAwLCAwWEY4LAorWzBYNDNGOV0gPSAwWEQ3LCAwWDAxLCAwWDAwLCAwWDMyLCAwWDAwLCAwWDAwLCAwWDAwLCAwWEY5LAorWzBYNDQwMV0gPSAwWEQ3LCAwWDAxLCAwWDAwLCAwWDMzLCAwWDAwLCAwWDAwLCAwWDAwLCAwWEZBLAorWzBYNDQwOV0gPSAwWEQ3LCAwWDAxLCAwWDAwLCAwWDM0LCAwWDAwLCAwWDAwLCAwWDAwLCAwWEZCLAorWzBYNDQxMV0gPSAwWEQ3LCAwWDAxLCAwWDAwLCAwWDM1LCAwWDAwLCAwWDAwLCAwWDAwLCAwWEZDLAorWzBYNDQxOV0gPSAwWEQ3LCAwWDAxLCAwWDAwLCAwWDM2LCAwWDAwLCAwWDAwLCAwWDAwLCAwWEZELAorWzBYNDQyMV0gPSAwWEQ3LCAwWDAxLCAwWDAwLCAwWDM3LCAwWDAwLCAwWDAwLCAwWDAwLCAwWEZFLAorWzBYNDQyOV0gPSAwWEQ3LCAwWDAxLCAwWDAwLCAwWDM4LCAwWDAwLCAwWDAwLCAwWDAwLCAwWEZGLAorWzBYNDQzMV0gPSAwWEQ3LCAwWDAxLCAwWDAwLCAwWDM5LCAwWDAwLCAwWDAwLCAwWDAwLCAwWDEwLAorWzBYNDQzOV0gPSAwWEYxLCAwWDAxLCAwWDAwLCAwWDQxLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDExLAorWzBYNDQ0MV0gPSAwWEYxLCAwWDAxLCAwWDAwLCAwWDQyLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDEyLAorWzBYNDQ0OV0gPSAwWEYxLCAwWDAxLCAwWDAwLCAwWDQzLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDEzLAorWzBYNDQ1MV0gPSAwWEYxLCAwWDAxLCAwWDAwLCAwWDQ0LCAwWDAwLCAwWDAwLCAwWDAwLCAwWDE0LAorWzBYNDQ1OV0gPSAwWEYxLCAwWDAxLCAwWDAwLCAwWDQ1LCAwWDAwLCAwWDAwLCAwWDAwLCAwWDE1LAorWzBYNDQ2MV0gPSAwWEYxLCAwWDAxLCAwWDAwLCAwWDQ2LCAwWDAwLCAwWDAwLCAwWDAwLCAwWDE2LAorWzBYNDQ2OV0gPSAwWEYxLCAwWDAxLCAwWDAwLCAwWDQ3LCAwWDAwLCAwWDAwLCAwWDAwLCAwWDE3LAorWzBYNDQ3MV0gPSAwWEYxLCAwWDAxLCAwWDAwLCAwWDQ4LCAwWDAwLCAwWDAwLCAwWDAwLCAwWDE4LAorWzBYNDQ3OV0gPSAwWEYxLCAwWDAxLCAwWDAwLCAwWDQ5LCAwWDAwLCAwWDAwLCAwWDAwLCAwWDE5LAorWzBYNDQ4MV0gPSAwWEYxLCAwWDAxLCAwWDAwLCAwWDRBLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDFBLAorWzBYNDQ4OV0gPSAwWEYxLCAwWDAxLCAwWDAwLCAwWDRCLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDFCLAorWzBYNDQ5MV0gPSAwWEYxLCAwWDAxLCAwWDAwLCAwWDRDLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDFDLAorWzBYNDQ5OV0gPSAwWEYxLCAwWDAxLCAwWDAwLCAwWDRELCAwWDAwLCAwWDAwLCAwWDAwLCAwWDFELAorWzBYNDRBMV0gPSAwWEYxLCAwWDAxLCAwWDAwLCAwWDRFLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDFFLAorWzBYNDRBOV0gPSAwWEYxLCAwWDAxLCAwWDAwLCAwWDRGLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDFGLAorWzBYNDRCMV0gPSAwWEYxLCAwWDAxLCAwWDAwLCAwWDUwLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDIwLAorWzBYNDRCOV0gPSAwWEYxLCAwWDAxLCAwWDAwLCAwWDUxLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDIxLAorWzBYNDRDMV0gPSAwWEYxLCAwWDAxLCAwWDAwLCAwWDUyLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDIyLAorWzBYNDRDOV0gPSAwWEYxLCAwWDAxLCAwWDAwLCAwWDUzLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDIzLAorWzBYNDREMV0gPSAwWEYxLCAwWDAxLCAwWDAwLCAwWDU0LCAwWDAwLCAwWDAwLCAwWDAwLCAwWDI0LAorWzBYNDREOV0gPSAwWEYxLCAwWDAxLCAwWDAwLCAwWDU1LCAwWDAwLCAwWDAwLCAwWDAwLCAwWDI1LAorWzBYNDRFMV0gPSAwWEYxLCAwWDAxLCAwWDAwLCAwWDU2LCAwWDAwLCAwWDAwLCAwWDAwLCAwWDI2LAorWzBYNDRFOV0gPSAwWEYxLCAwWDAxLCAwWDAwLCAwWDU3LCAwWDAwLCAwWDAwLCAwWDAwLCAwWDI3LAorWzBYNDRGMV0gPSAwWEYxLCAwWDAxLCAwWDAwLCAwWDU4LCAwWDAwLCAwWDAwLCAwWDAwLCAwWDI4LAorWzBYNDRGOV0gPSAwWEYxLCAwWDAxLCAwWDAwLCAwWDU5LCAwWDAwLCAwWDAwLCAwWDAwLCAwWDI5LAorWzBYNDUwMV0gPSAwWEYxLCAwWDAxLCAwWDAwLCAwWDVBLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDMwLAorWzBYNDUwOV0gPSAwWEYxLCAwWDAxLCAwWDAwLCAwWDQxLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDMxLAorWzBYNDUxMV0gPSAwWEYxLCAwWDAxLCAwWDAwLCAwWDQyLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDMyLAorWzBYNDUxOV0gPSAwWEYxLCAwWDAxLCAwWDAwLCAwWDQzLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDMzLAorWzBYNDUyMV0gPSAwWEYxLCAwWDAxLCAwWDAwLCAwWDQ0LCAwWDAwLCAwWDAwLCAwWDAwLCAwWDM0LAorWzBYNDUyOV0gPSAwWEYxLCAwWDAxLCAwWDAwLCAwWDQ1LCAwWDAwLCAwWDAwLCAwWDAwLCAwWDM1LAorWzBYNDUzMV0gPSAwWEYxLCAwWDAxLCAwWDAwLCAwWDQ2LCAwWDAwLCAwWDAwLCAwWDAwLCAwWDM2LAorWzBYNDUzOV0gPSAwWEYxLCAwWDAxLCAwWDAwLCAwWDQ3LCAwWDAwLCAwWDAwLCAwWDAwLCAwWDM3LAorWzBYNDU0MV0gPSAwWEYxLCAwWDAxLCAwWDAwLCAwWDQ4LCAwWDAwLCAwWDAwLCAwWDAwLCAwWDM4LAorWzBYNDU0OV0gPSAwWEYxLCAwWDAxLCAwWDAwLCAwWDQ5LCAwWDAwLCAwWDAwLCAwWDAwLCAwWDM5LAorWzBYNDU1MV0gPSAwWEYxLCAwWDAxLCAwWDAwLCAwWDRBLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDNBLAorWzBYNDU1OV0gPSAwWEYxLCAwWDAxLCAwWDAwLCAwWDRCLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDNCLAorWzBYNDU2MV0gPSAwWEYxLCAwWDAxLCAwWDAwLCAwWDRDLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDNDLAorWzBYNDU2OV0gPSAwWEYxLCAwWDAxLCAwWDAwLCAwWDRELCAwWDAwLCAwWDAwLCAwWDAwLCAwWDNELAorWzBYNDU3MV0gPSAwWEYxLCAwWDAxLCAwWDAwLCAwWDRFLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDNFLAorWzBYNDU3OV0gPSAwWEYxLCAwWDAxLCAwWDAwLCAwWDRGLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDNGLAorWzBYNDU4MV0gPSAwWEYxLCAwWDAxLCAwWDAwLCAwWDUwLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDQwLAorWzBYNDU4OV0gPSAwWEYxLCAwWDAxLCAwWDAwLCAwWDUxLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDQxLAorWzBYNDU5MV0gPSAwWEYxLCAwWDAxLCAwWDAwLCAwWDUyLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDQyLAorWzBYNDU5OV0gPSAwWEYxLCAwWDAxLCAwWDAwLCAwWDUzLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDQzLAorWzBYNDVBMV0gPSAwWEYxLCAwWDAxLCAwWDAwLCAwWDU0LCAwWDAwLCAwWDAwLCAwWDAwLCAwWDQ0LAorWzBYNDVBOV0gPSAwWEYxLCAwWDAxLCAwWDAwLCAwWDU1LCAwWDAwLCAwWDAwLCAwWDAwLCAwWDQ1LAorWzBYNDVCMV0gPSAwWEYxLCAwWDAxLCAwWDAwLCAwWDU2LCAwWDAwLCAwWDAwLCAwWDAwLCAwWDQ2LAorWzBYNDVCOV0gPSAwWEYxLCAwWDAxLCAwWDAwLCAwWDU3LCAwWDAwLCAwWDAwLCAwWDAwLCAwWDQ3LAorWzBYNDVDMV0gPSAwWEYxLCAwWDAxLCAwWDAwLCAwWDU4LCAwWDAwLCAwWDAwLCAwWDAwLCAwWDQ4LAorWzBYNDVDOV0gPSAwWEYxLCAwWDAxLCAwWDAwLCAwWDU5LCAwWDAwLCAwWDAwLCAwWDAwLCAwWDQ5LAorWzBYNDVEMV0gPSAwWEYxLCAwWDAxLCAwWDAwLCAwWDVBLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDUwLAorWzBYNDVEOV0gPSAwWEYxLCAwWDAxLCAwWDAwLCAwWDQxLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDUxLAorWzBYNDVFMV0gPSAwWEYxLCAwWDAxLCAwWDAwLCAwWDQyLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDUyLAorWzBYNDVFOV0gPSAwWEYxLCAwWDAxLCAwWDAwLCAwWDQzLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDUzLAorWzBYNDVGMV0gPSAwWEYxLCAwWDAxLCAwWDAwLCAwWDQ0LCAwWDAwLCAwWDAwLCAwWDAwLCAwWDU0LAorWzBYNDVGOV0gPSAwWEYxLCAwWDAxLCAwWDAwLCAwWDQ1LCAwWDAwLCAwWDAwLCAwWDAwLCAwWDU1LAorWzBYNDYwMV0gPSAwWEYxLCAwWDAxLCAwWDAwLCAwWDQ2LCAwWDAwLCAwWDAwLCAwWDAwLCAwWDU2LAorWzBYNDYwOV0gPSAwWEYxLCAwWDAxLCAwWDAwLCAwWDQ3LCAwWDAwLCAwWDAwLCAwWDAwLCAwWDU3LAorWzBYNDYxMV0gPSAwWEYxLCAwWDAxLCAwWDAwLCAwWDQ4LCAwWDAwLCAwWDAwLCAwWDAwLCAwWDU4LAorWzBYNDYxOV0gPSAwWEYxLCAwWDAxLCAwWDAwLCAwWDQ5LCAwWDAwLCAwWDAwLCAwWDAwLCAwWDU5LAorWzBYNDYyMV0gPSAwWEYxLCAwWDAxLCAwWDAwLCAwWDRBLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDVBLAorWzBYNDYyOV0gPSAwWEYxLCAwWDAxLCAwWDAwLCAwWDRCLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDVCLAorWzBYNDYzMV0gPSAwWEYxLCAwWDAxLCAwWDAwLCAwWDRDLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDVDLAorWzBYNDYzOV0gPSAwWEYxLCAwWDAxLCAwWDAwLCAwWDRELCAwWDAwLCAwWDAwLCAwWDAwLCAwWDVELAorWzBYNDY0MV0gPSAwWEYxLCAwWDAxLCAwWDAwLCAwWDRFLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDVFLAorWzBYNDY0OV0gPSAwWEYxLCAwWDAxLCAwWDAwLCAwWDRGLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDVGLAorWzBYNDY1MV0gPSAwWEYxLCAwWDAxLCAwWDAwLCAwWDUwLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDYwLAorWzBYNDY1OV0gPSAwWEYxLCAwWDAxLCAwWDAwLCAwWDUxLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDYxLAorWzBYNDY2MV0gPSAwWEYxLCAwWDAxLCAwWDAwLCAwWDUyLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDYyLAorWzBYNDY2OV0gPSAwWEYxLCAwWDAxLCAwWDAwLCAwWDUzLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDYzLAorWzBYNDY3MV0gPSAwWEYxLCAwWDAxLCAwWDAwLCAwWDU0LCAwWDAwLCAwWDAwLCAwWDAwLCAwWDY0LAorWzBYNDY3OV0gPSAwWEYxLCAwWDAxLCAwWDAwLCAwWDU1LCAwWDAwLCAwWDAwLCAwWDAwLCAwWDY1LAorWzBYNDY4MV0gPSAwWEYxLCAwWDAxLCAwWDAwLCAwWDU2LCAwWDAwLCAwWDAwLCAwWDAwLCAwWDY2LAorWzBYNDY4OV0gPSAwWEYxLCAwWDAxLCAwWDAwLCAwWDU3LCAwWDAwLCAwWDAwLCAwWDAwLCAwWDY3LAorWzBYNDY5MV0gPSAwWEYxLCAwWDAxLCAwWDAwLCAwWDU4LCAwWDAwLCAwWDAwLCAwWDAwLCAwWDY4LAorWzBYNDY5OV0gPSAwWEYxLCAwWDAxLCAwWDAwLCAwWDU5LCAwWDAwLCAwWDAwLCAwWDAwLCAwWDY5LAorWzBYNDZBMV0gPSAwWEYxLCAwWDAxLCAwWDAwLCAwWDVBLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDcwLAorWzBYNDZBOV0gPSAwWEYxLCAwWDAxLCAwWDAwLCAwWDQxLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDcxLAorWzBYNDZCMV0gPSAwWEYxLCAwWDAxLCAwWDAwLCAwWDQyLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDcyLAorWzBYNDZCOV0gPSAwWEYxLCAwWDAxLCAwWDAwLCAwWDQzLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDczLAorWzBYNDZDMV0gPSAwWEYxLCAwWDAxLCAwWDAwLCAwWDQ0LCAwWDAwLCAwWDAwLCAwWDAwLCAwWDc0LAorWzBYNDZDOV0gPSAwWEYxLCAwWDAxLCAwWDAwLCAwWDQ1LCAwWDAwLCAwWDAwLCAwWDAwLCAwWDc1LAorWzBYNDZEMV0gPSAwWEYxLCAwWDAxLCAwWDAwLCAwWDQ2LCAwWDAwLCAwWDAwLCAwWDAwLCAwWDc2LAorWzBYNDZEOV0gPSAwWEYxLCAwWDAxLCAwWDAwLCAwWDQ3LCAwWDAwLCAwWDAwLCAwWDAwLCAwWDc3LAorWzBYNDZFMV0gPSAwWEYxLCAwWDAxLCAwWDAwLCAwWDQ4LCAwWDAwLCAwWDAwLCAwWDAwLCAwWDc4LAorWzBYNDZFOV0gPSAwWEYxLCAwWDAxLCAwWDAwLCAwWDQ5LCAwWDAwLCAwWDAwLCAwWDAwLCAwWDc5LAorWzBYNDZGMV0gPSAwWEYxLCAwWDAxLCAwWDAwLCAwWDRBLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDdBLAorWzBYNDZGOV0gPSAwWEYxLCAwWDAxLCAwWDAwLCAwWDRCLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDdCLAorWzBYNDcwMV0gPSAwWEYxLCAwWDAxLCAwWDAwLCAwWDRDLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDdDLAorWzBYNDcwOV0gPSAwWEYxLCAwWDAxLCAwWDAwLCAwWDRELCAwWDAwLCAwWDAwLCAwWDAwLCAwWDdELAorWzBYNDcxMV0gPSAwWEYxLCAwWDAxLCAwWDAwLCAwWDRFLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDdFLAorWzBYNDcxOV0gPSAwWEYxLCAwWDAxLCAwWDAwLCAwWDRGLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDdGLAorWzBYNDcyMV0gPSAwWEYxLCAwWDAxLCAwWDAwLCAwWDUwLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDgwLAorWzBYNDcyOV0gPSAwWEYxLCAwWDAxLCAwWDAwLCAwWDUxLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDgxLAorWzBYNDczMV0gPSAwWEYxLCAwWDAxLCAwWDAwLCAwWDUyLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDgyLAorWzBYNDczOV0gPSAwWEYxLCAwWDAxLCAwWDAwLCAwWDUzLCAwWDAwLCAwWDAwLCAwWDAwLCAwWDgzLAorWzBYNDc0MV0gPSAwWEYxLCAwWDAxLCAwWDAwLCAwWDU0LCAwWDAwLCAwWDAwLCAwWDAwLCAwWDg0LAorWzBYNDc0OV0gPSAwWEYxLCAwWDAxLCAwWDAwLCAwWDU1LCAwWDAwLCAwWDAwLCAwWDAwLCAwWDg1LAorWzBYNDc1MV0gPSAwWEYxLCAwWDAxLCAwWDAwLCAwWDU2LCAwWDAwLCAwWDAwLCAwWDAwLCAwWDg2LAorWzBYNDc1OV0gPSAwWEYxLCAwWDAxLCAwWDAwLCAwWDU3LCAwWDAwLCAwWDAwLCAwWDAwLCAwWDg3LAorWzBYNDc2MV0gPSAwWEYxLCAwWDAxLCAwWDAwLCAwWDU4LCAwWDAwLCAwWDAwLCAwWDAwLCAwWDg4LAorWzBYNDc2OV0gPSAwWEYxLCAwWDAxLCAwWDAwLCAwWDU5LCAwWDAwLCAwWDAwLCAwWDAwLCAwWDg5LAorWzBYNDc3MV0gPSAwWEYxLCAwWDAxLCAwWDAwLCAwWDVBLAorWzBYNDc3N10gPSAwWDAwCmRpZmYgLS1naXQgYS9Qcm9ncmFtcy90dGJfY29tcGlsZS5jIGIvUHJvZ3JhbXMvdHRiX2NvbXBpbGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OGVjMjllCi0tLSAvZGV2L251bGwKKysrIGIvUHJvZ3JhbXMvdHRiX2NvbXBpbGUuYwpAQCAtMCwwICsxLDQwMCBAQAorLyoKKyAqIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisgKiAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisgKgorICogQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKKyNpbmNsdWRlICJwcm9sb2d1ZS5oIgorCisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKyNpbmNsdWRlICJsb2cuaCIKKyNpbmNsdWRlICJmaWxlLmgiCisjaW5jbHVkZSAiZGF0YWZpbGUuaCIKKyNpbmNsdWRlICJkYXRhYXJlYS5oIgorI2luY2x1ZGUgImNoYXJzZXQuaCIKKyNpbmNsdWRlICJ0dGIuaCIKKyNpbmNsdWRlICJ0dGJfaW50ZXJuYWwuaCIKKyNpbmNsdWRlICJ0dGJfY29tcGlsZS5oIgorCitzdHJ1Y3QgVGV4dFRhYmxlRGF0YVN0cnVjdCB7CisgIERhdGFBcmVhICphcmVhOworCisgIHN0cnVjdCB7CisgICAgVGV4dFRhYmxlQWxpYXNFbnRyeSAqYXJyYXk7CisgICAgc2l6ZV90IHNpemU7CisgICAgc2l6ZV90IGNvdW50OworICB9IGFsaWFzOworfTsKKwordm9pZCAqCitnZXRUZXh0VGFibGVJdGVtIChUZXh0VGFibGVEYXRhICp0dGQsIFRleHRUYWJsZU9mZnNldCBvZmZzZXQpIHsKKyAgcmV0dXJuIGdldERhdGFJdGVtKHR0ZC0+YXJlYSwgb2Zmc2V0KTsKK30KKworVGV4dFRhYmxlSGVhZGVyICoKK2dldFRleHRUYWJsZUhlYWRlciAoVGV4dFRhYmxlRGF0YSAqdHRkKSB7CisgIHJldHVybiBnZXRUZXh0VGFibGVJdGVtKHR0ZCwgMCk7Cit9CisKK3N0YXRpYyBEYXRhT2Zmc2V0CitnZXRVbmljb2RlR3JvdXBPZmZzZXQgKFRleHRUYWJsZURhdGEgKnR0ZCwgd2NoYXJfdCBjaGFyYWN0ZXIsIGludCBhbGxvY2F0ZSkgeworICB1bnNpZ25lZCBpbnQgZ3JvdXBOdW1iZXIgPSBVTklDT0RFX0dST1VQX05VTUJFUihjaGFyYWN0ZXIpOworICBEYXRhT2Zmc2V0IGdyb3VwT2Zmc2V0ID0gZ2V0VGV4dFRhYmxlSGVhZGVyKHR0ZCktPnVuaWNvZGVHcm91cHNbZ3JvdXBOdW1iZXJdOworCisgIGlmICghZ3JvdXBPZmZzZXQgJiYgYWxsb2NhdGUpIHsKKyAgICBpZiAoIWFsbG9jYXRlRGF0YUl0ZW0odHRkLT5hcmVhLCAmZ3JvdXBPZmZzZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihVbmljb2RlR3JvdXBFbnRyeSksCisgICAgICAgICAgICAgICAgICAgICAgICAgIF9fYWxpZ25vZl9fKFVuaWNvZGVHcm91cEVudHJ5KSkpIHsKKyAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIGdldFRleHRUYWJsZUhlYWRlcih0dGQpLT51bmljb2RlR3JvdXBzW2dyb3VwTnVtYmVyXSA9IGdyb3VwT2Zmc2V0OworICB9CisKKyAgcmV0dXJuIGdyb3VwT2Zmc2V0OworfQorCitzdGF0aWMgRGF0YU9mZnNldAorZ2V0VW5pY29kZVBsYW5lT2Zmc2V0IChUZXh0VGFibGVEYXRhICp0dGQsIHdjaGFyX3QgY2hhcmFjdGVyLCBpbnQgYWxsb2NhdGUpIHsKKyAgRGF0YU9mZnNldCBncm91cE9mZnNldCA9IGdldFVuaWNvZGVHcm91cE9mZnNldCh0dGQsIGNoYXJhY3RlciwgYWxsb2NhdGUpOworICBpZiAoIWdyb3VwT2Zmc2V0KSByZXR1cm4gMDsKKworICB7CisgICAgVW5pY29kZUdyb3VwRW50cnkgKmdyb3VwID0gZ2V0RGF0YUl0ZW0odHRkLT5hcmVhLCBncm91cE9mZnNldCk7CisgICAgdW5zaWduZWQgaW50IHBsYW5lTnVtYmVyID0gVU5JQ09ERV9QTEFORV9OVU1CRVIoY2hhcmFjdGVyKTsKKyAgICBEYXRhT2Zmc2V0IHBsYW5lT2Zmc2V0ID0gZ3JvdXAtPnBsYW5lc1twbGFuZU51bWJlcl07CisKKyAgICBpZiAoIXBsYW5lT2Zmc2V0ICYmIGFsbG9jYXRlKSB7CisgICAgICBpZiAoIWFsbG9jYXRlRGF0YUl0ZW0odHRkLT5hcmVhLCAmcGxhbmVPZmZzZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKFVuaWNvZGVQbGFuZUVudHJ5KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2FsaWdub2ZfXyhVbmljb2RlUGxhbmVFbnRyeSkpKSB7CisgICAgICAgIHJldHVybiAwOworICAgICAgfQorCisgICAgICBncm91cCA9IGdldERhdGFJdGVtKHR0ZC0+YXJlYSwgZ3JvdXBPZmZzZXQpOworICAgICAgZ3JvdXAtPnBsYW5lc1twbGFuZU51bWJlcl0gPSBwbGFuZU9mZnNldDsKKyAgICB9CisKKyAgICByZXR1cm4gcGxhbmVPZmZzZXQ7CisgIH0KK30KKworc3RhdGljIERhdGFPZmZzZXQKK2dldFVuaWNvZGVSb3dPZmZzZXQgKFRleHRUYWJsZURhdGEgKnR0ZCwgd2NoYXJfdCBjaGFyYWN0ZXIsIGludCBhbGxvY2F0ZSkgeworICBEYXRhT2Zmc2V0IHBsYW5lT2Zmc2V0ID0gZ2V0VW5pY29kZVBsYW5lT2Zmc2V0KHR0ZCwgY2hhcmFjdGVyLCBhbGxvY2F0ZSk7CisgIGlmICghcGxhbmVPZmZzZXQpIHJldHVybiAwOworCisgIHsKKyAgICBVbmljb2RlUGxhbmVFbnRyeSAqcGxhbmUgPSBnZXREYXRhSXRlbSh0dGQtPmFyZWEsIHBsYW5lT2Zmc2V0KTsKKyAgICB1bnNpZ25lZCBpbnQgcm93TnVtYmVyID0gVU5JQ09ERV9ST1dfTlVNQkVSKGNoYXJhY3Rlcik7CisgICAgRGF0YU9mZnNldCByb3dPZmZzZXQgPSBwbGFuZS0+cm93c1tyb3dOdW1iZXJdOworCisgICAgaWYgKCFyb3dPZmZzZXQgJiYgYWxsb2NhdGUpIHsKKyAgICAgIGlmICghYWxsb2NhdGVEYXRhSXRlbSh0dGQtPmFyZWEsICZyb3dPZmZzZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKFVuaWNvZGVSb3dFbnRyeSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19hbGlnbm9mX18oVW5pY29kZVJvd0VudHJ5KSkpIHsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgICB9CisKKyAgICAgIHBsYW5lID0gZ2V0RGF0YUl0ZW0odHRkLT5hcmVhLCBwbGFuZU9mZnNldCk7CisgICAgICBwbGFuZS0+cm93c1tyb3dOdW1iZXJdID0gcm93T2Zmc2V0OworICAgIH0KKworICAgIHJldHVybiByb3dPZmZzZXQ7CisgIH0KK30KKworVW5pY29kZVJvd0VudHJ5ICoKK2dldFVuaWNvZGVSb3dFbnRyeSAoVGV4dFRhYmxlRGF0YSAqdHRkLCB3Y2hhcl90IGNoYXJhY3RlciwgaW50IGFsbG9jYXRlKSB7CisgIERhdGFPZmZzZXQgcm93T2Zmc2V0ID0gZ2V0VW5pY29kZVJvd09mZnNldCh0dGQsIGNoYXJhY3RlciwgYWxsb2NhdGUpOworICBpZiAoIXJvd09mZnNldCkgcmV0dXJuIE5VTEw7CisgIHJldHVybiBnZXREYXRhSXRlbSh0dGQtPmFyZWEsIHJvd09mZnNldCk7Cit9CisKK2NvbnN0IHVuc2lnbmVkIGNoYXIgKgorZ2V0VW5pY29kZUNlbGwgKFRleHRUYWJsZURhdGEgKnR0ZCwgd2NoYXJfdCBjaGFyYWN0ZXIpIHsKKyAgY29uc3QgVW5pY29kZVJvd0VudHJ5ICpyb3cgPSBnZXRVbmljb2RlUm93RW50cnkodHRkLCBjaGFyYWN0ZXIsIDApOworCisgIGlmIChyb3cpIHsKKyAgICB1bnNpZ25lZCBpbnQgY2VsbE51bWJlciA9IFVOSUNPREVfQ0VMTF9OVU1CRVIoY2hhcmFjdGVyKTsKKyAgICBpZiAoQklUTUFTS19URVNUKHJvdy0+Y2VsbERlZmluZWQsIGNlbGxOdW1iZXIpKSByZXR1cm4gJnJvdy0+Y2VsbHNbY2VsbE51bWJlcl07CisgIH0KKworICByZXR1cm4gTlVMTDsKK30KKworc3RhdGljIHZvaWQKK2NsZWFyVGV4dFRhYmxlSW5wdXQgKFRleHRUYWJsZURhdGEgKnR0ZCwgdW5zaWduZWQgY2hhciBkb3RzLCB3Y2hhcl90IGNoYXJhY3RlcikgeworICBUZXh0VGFibGVIZWFkZXIgKmhlYWRlciA9IGdldFRleHRUYWJsZUhlYWRlcih0dGQpOworCisgIGlmIChCSVRNQVNLX1RFU1QoaGVhZGVyLT5pbnB1dENoYXJhY3RlckRlZmluZWQsIGRvdHMpKSB7CisgICAgaWYgKGhlYWRlci0+aW5wdXRDaGFyYWN0ZXJzW2RvdHNdID09IGNoYXJhY3RlcikgeworICAgICAgaGVhZGVyLT5pbnB1dENoYXJhY3RlcnNbZG90c10gPSAwOworICAgICAgQklUTUFTS19DTEVBUihoZWFkZXItPmlucHV0Q2hhcmFjdGVyRGVmaW5lZCwgZG90cyk7CisgICAgfQorICB9Cit9CisKK2ludAorc2V0VGV4dFRhYmxlSW5wdXQgKFRleHRUYWJsZURhdGEgKnR0ZCwgd2NoYXJfdCBjaGFyYWN0ZXIsIHVuc2lnbmVkIGNoYXIgZG90cykgeworICBUZXh0VGFibGVIZWFkZXIgKmhlYWRlciA9IGdldFRleHRUYWJsZUhlYWRlcih0dGQpOworCisgIGlmICghQklUTUFTS19URVNUKGhlYWRlci0+aW5wdXRDaGFyYWN0ZXJEZWZpbmVkLCBkb3RzKSkgeworICAgIGhlYWRlci0+aW5wdXRDaGFyYWN0ZXJzW2RvdHNdID0gY2hhcmFjdGVyOworICAgIEJJVE1BU0tfU0VUKGhlYWRlci0+aW5wdXRDaGFyYWN0ZXJEZWZpbmVkLCBkb3RzKTsKKyAgfQorCisgIHJldHVybiAxOworfQorCitpbnQKK3NldFRleHRUYWJsZUdseXBoIChUZXh0VGFibGVEYXRhICp0dGQsIHdjaGFyX3QgY2hhcmFjdGVyLCB1bnNpZ25lZCBjaGFyIGRvdHMpIHsKKyAgVW5pY29kZVJvd0VudHJ5ICpyb3cgPSBnZXRVbmljb2RlUm93RW50cnkodHRkLCBjaGFyYWN0ZXIsIDEpOworCisgIGlmIChyb3cpIHsKKyAgICB1bnNpZ25lZCBpbnQgY2VsbE51bWJlciA9IFVOSUNPREVfQ0VMTF9OVU1CRVIoY2hhcmFjdGVyKTsKKyAgICB1bnNpZ25lZCBjaGFyICpjZWxsID0gJnJvdy0+Y2VsbHNbY2VsbE51bWJlcl07CisKKyAgICBpZiAoIUJJVE1BU0tfVEVTVChyb3ctPmNlbGxEZWZpbmVkLCBjZWxsTnVtYmVyKSkgeworICAgICAgQklUTUFTS19TRVQocm93LT5jZWxsRGVmaW5lZCwgY2VsbE51bWJlcik7CisgICAgfSBlbHNlIGlmICgqY2VsbCAhPSBkb3RzKSB7CisgICAgICBjbGVhclRleHRUYWJsZUlucHV0KHR0ZCwgKmNlbGwsIGNoYXJhY3Rlcik7CisgICAgfQorCisgICAgKmNlbGwgPSBkb3RzOworICAgIHJldHVybiAxOworICB9CisKKyAgcmV0dXJuIDA7Cit9CisKK2ludAorc2V0VGV4dFRhYmxlQ2hhcmFjdGVyIChUZXh0VGFibGVEYXRhICp0dGQsIHdjaGFyX3QgY2hhcmFjdGVyLCB1bnNpZ25lZCBjaGFyIGRvdHMpIHsKKyAgaWYgKCFzZXRUZXh0VGFibGVHbHlwaCh0dGQsIGNoYXJhY3RlciwgZG90cykpIHJldHVybiAwOworICBpZiAoIXNldFRleHRUYWJsZUlucHV0KHR0ZCwgY2hhcmFjdGVyLCBkb3RzKSkgcmV0dXJuIDA7CisgIHJldHVybiAxOworfQorCit2b2lkCit1bnNldFRleHRUYWJsZUNoYXJhY3RlciAoVGV4dFRhYmxlRGF0YSAqdHRkLCB3Y2hhcl90IGNoYXJhY3RlcikgeworICBVbmljb2RlUm93RW50cnkgKnJvdyA9IGdldFVuaWNvZGVSb3dFbnRyeSh0dGQsIGNoYXJhY3RlciwgMCk7CisKKyAgaWYgKHJvdykgeworICAgIHVuc2lnbmVkIGludCBjZWxsTnVtYmVyID0gVU5JQ09ERV9DRUxMX05VTUJFUihjaGFyYWN0ZXIpOworCisgICAgaWYgKEJJVE1BU0tfVEVTVChyb3ctPmNlbGxEZWZpbmVkLCBjZWxsTnVtYmVyKSkgeworICAgICAgdW5zaWduZWQgY2hhciAqY2VsbCA9ICZyb3ctPmNlbGxzW2NlbGxOdW1iZXJdOworCisgICAgICBjbGVhclRleHRUYWJsZUlucHV0KHR0ZCwgKmNlbGwsIGNoYXJhY3Rlcik7CisgICAgICAqY2VsbCA9IDA7CisgICAgICBCSVRNQVNLX0NMRUFSKHJvdy0+Y2VsbERlZmluZWQsIGNlbGxOdW1iZXIpOworICAgIH0KKyAgfQorfQorCitpbnQKK3NldFRleHRUYWJsZUJ5dGUgKFRleHRUYWJsZURhdGEgKnR0ZCwgdW5zaWduZWQgY2hhciBieXRlLCB1bnNpZ25lZCBjaGFyIGRvdHMpIHsKKyAgd2ludF90IGNoYXJhY3RlciA9IGNvbnZlcnRDaGFyVG9XY2hhcihieXRlKTsKKworICBpZiAoY2hhcmFjdGVyICE9IFdFT0YpCisgICAgaWYgKCFzZXRUZXh0VGFibGVDaGFyYWN0ZXIodHRkLCBjaGFyYWN0ZXIsIGRvdHMpKQorICAgICAgcmV0dXJuIDA7CisKKyAgcmV0dXJuIDE7Cit9CisKK2ludAorYWRkVGV4dFRhYmxlQWxpYXMgKFRleHRUYWJsZURhdGEgKnR0ZCwgd2NoYXJfdCBmcm9tLCB3Y2hhcl90IHRvKSB7CisgIGlmICh0dGQtPmFsaWFzLmNvdW50ID09IHR0ZC0+YWxpYXMuc2l6ZSkgeworICAgIHNpemVfdCBuZXdTaXplID0gdHRkLT5hbGlhcy5zaXplPyAodHRkLT5hbGlhcy5zaXplIDw8IDEpOiAwWDEwOworICAgIFRleHRUYWJsZUFsaWFzRW50cnkgKm5ld0FycmF5OworCisgICAgaWYgKCEobmV3QXJyYXkgPSByZWFsbG9jKHR0ZC0+YWxpYXMuYXJyYXksIEFSUkFZX1NJWkUobmV3QXJyYXksIG5ld1NpemUpKSkpIHsKKyAgICAgIGxvZ01hbGxvY0Vycm9yKCk7CisgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICB0dGQtPmFsaWFzLmFycmF5ID0gbmV3QXJyYXk7CisgICAgdHRkLT5hbGlhcy5zaXplID0gbmV3U2l6ZTsKKyAgfQorCisgIHsKKyAgICB1bnNpZ25lZCBpbnQgY2VsbE51bWJlciA9IFVOSUNPREVfQ0VMTF9OVU1CRVIoZnJvbSk7CisgICAgVW5pY29kZVJvd0VudHJ5ICpyb3cgPSBnZXRVbmljb2RlUm93RW50cnkodHRkLCBmcm9tLCAxKTsKKworICAgIGlmICghcm93KSByZXR1cm4gMDsKKyAgICBCSVRNQVNLX1NFVChyb3ctPmNlbGxBbGlhc2VkLCBjZWxsTnVtYmVyKTsKKyAgfQorCisgIHsKKyAgICBUZXh0VGFibGVBbGlhc0VudHJ5ICphbGlhcyA9ICZ0dGQtPmFsaWFzLmFycmF5W3R0ZC0+YWxpYXMuY291bnQrK107CisKKyAgICBtZW1zZXQoYWxpYXMsIDAsIHNpemVvZigqYWxpYXMpKTsKKyAgICBhbGlhcy0+ZnJvbSA9IGZyb207CisgICAgYWxpYXMtPnRvID0gdG87CisgIH0KKworICByZXR1cm4gMTsKK30KKworVGV4dFRhYmxlRGF0YSAqCituZXdUZXh0VGFibGVEYXRhICh2b2lkKSB7CisgIFRleHRUYWJsZURhdGEgKnR0ZDsKKworICBpZiAoKHR0ZCA9IG1hbGxvYyhzaXplb2YoKnR0ZCkpKSkgeworICAgIG1lbXNldCh0dGQsIDAsIHNpemVvZigqdHRkKSk7CisKKyAgICB0dGQtPmFsaWFzLmFycmF5ID0gTlVMTDsKKyAgICB0dGQtPmFsaWFzLnNpemUgPSAwOworICAgIHR0ZC0+YWxpYXMuY291bnQgPSAwOworCisgICAgaWYgKCh0dGQtPmFyZWEgPSBuZXdEYXRhQXJlYSgpKSkgeworICAgICAgaWYgKGFsbG9jYXRlRGF0YUl0ZW0odHRkLT5hcmVhLCBOVUxMLCBzaXplb2YoVGV4dFRhYmxlSGVhZGVyKSwgX19hbGlnbm9mX18oVGV4dFRhYmxlSGVhZGVyKSkpIHsKKyAgICAgICAgcmV0dXJuIHR0ZDsKKyAgICAgIH0KKworICAgICAgZGVzdHJveURhdGFBcmVhKHR0ZC0+YXJlYSk7CisgICAgfQorCisgICAgZnJlZSh0dGQpOworICB9CisKKyAgcmV0dXJuIE5VTEw7Cit9CisKK3ZvaWQKK2Rlc3Ryb3lUZXh0VGFibGVEYXRhIChUZXh0VGFibGVEYXRhICp0dGQpIHsKKyAgaWYgKHR0ZC0+YWxpYXMuYXJyYXkpIGZyZWUodHRkLT5hbGlhcy5hcnJheSk7CisgIGRlc3Ryb3lEYXRhQXJlYSh0dGQtPmFyZWEpOworICBmcmVlKHR0ZCk7Cit9CisKK3N0YXRpYyBpbnQKK3NvcnRUZXh0VGFibGVBbGlhc0FycmF5IChjb25zdCB2b2lkICplbGVtZW50MSwgY29uc3Qgdm9pZCAqZWxlbWVudDIpIHsKKyAgY29uc3QgVGV4dFRhYmxlQWxpYXNFbnRyeSAqYWxpYXMxID0gZWxlbWVudDE7CisgIGNvbnN0IFRleHRUYWJsZUFsaWFzRW50cnkgKmFsaWFzMiA9IGVsZW1lbnQyOworCisgIHdjaGFyX3Qgd2MxID0gYWxpYXMxLT5mcm9tOworICB3Y2hhcl90IHdjMiA9IGFsaWFzMi0+ZnJvbTsKKworICBpZiAod2MxIDwgd2MyKSByZXR1cm4gLTE7CisgIGlmICh3YzEgPiB3YzIpIHJldHVybiAxOworICByZXR1cm4gMDsKK30KKworc3RhdGljIGludAorZmluaXNoVGV4dFRhYmxlRGF0YSAoVGV4dFRhYmxlRGF0YSAqdHRkKSB7CisgIHFzb3J0KHR0ZC0+YWxpYXMuYXJyYXksIHR0ZC0+YWxpYXMuY291bnQsIHNpemVvZigqdHRkLT5hbGlhcy5hcnJheSksIHNvcnRUZXh0VGFibGVBbGlhc0FycmF5KTsKKworICB7CisgICAgRGF0YU9mZnNldCBvZmZzZXQ7CisKKyAgICBpZiAoIXNhdmVEYXRhSXRlbSh0dGQtPmFyZWEsICZvZmZzZXQsIHR0ZC0+YWxpYXMuYXJyYXksCisgICAgICAgICAgICAgICAgICAgICAgQVJSQVlfU0laRSh0dGQtPmFsaWFzLmFycmF5LCB0dGQtPmFsaWFzLmNvdW50KSwKKyAgICAgICAgICAgICAgICAgICAgICBfX2FsaWdub2ZfXygqdHRkLT5hbGlhcy5hcnJheSkpKSB7CisgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICB7CisgICAgICBUZXh0VGFibGVIZWFkZXIgKmhlYWRlciA9IGdldFRleHRUYWJsZUhlYWRlcih0dGQpOworCisgICAgICBoZWFkZXItPmFsaWFzQXJyYXkgPSBvZmZzZXQ7CisgICAgICBoZWFkZXItPmFsaWFzQ291bnQgPSB0dGQtPmFsaWFzLmNvdW50OworICAgIH0KKyAgfQorCisgIHJldHVybiAxOworfQorCitUZXh0VGFibGVEYXRhICoKK3Byb2Nlc3NUZXh0VGFibGVMaW5lcyAoRklMRSAqc3RyZWFtLCBjb25zdCBjaGFyICpuYW1lLCBEYXRhT3BlcmFuZHNQcm9jZXNzb3IgKnByb2Nlc3NPcGVyYW5kcykgeworICBpZiAoc2V0VGFibGVEYXRhVmFyaWFibGVzKFRFWFRfVEFCTEVfRVhURU5TSU9OLCBURVhUX1NVQlRBQkxFX0VYVEVOU0lPTikpIHsKKyAgICBUZXh0VGFibGVEYXRhICp0dGQ7CisKKyAgICBpZiAoKHR0ZCA9IG5ld1RleHRUYWJsZURhdGEoKSkpIHsKKyAgICAgIGNvbnN0IERhdGFGaWxlUGFyYW1ldGVycyBwYXJhbWV0ZXJzID0geworICAgICAgICAucHJvY2Vzc09wZXJhbmRzID0gcHJvY2Vzc09wZXJhbmRzLAorICAgICAgICAuZGF0YSA9IHR0ZAorICAgICAgfTsKKworICAgICAgaWYgKHByb2Nlc3NEYXRhU3RyZWFtKE5VTEwsIHN0cmVhbSwgbmFtZSwgJnBhcmFtZXRlcnMpKSB7CisgICAgICAgIGlmIChmaW5pc2hUZXh0VGFibGVEYXRhKHR0ZCkpIHsKKyAgICAgICAgICByZXR1cm4gdHRkOworICAgICAgICB9CisgICAgICB9CisKKyAgICAgIGRlc3Ryb3lUZXh0VGFibGVEYXRhKHR0ZCk7CisgICAgfQorICB9CisKKyAgcmV0dXJuIE5VTEw7Cit9CisKK1RleHRUYWJsZSAqCittYWtlVGV4dFRhYmxlIChUZXh0VGFibGVEYXRhICp0dGQpIHsKKyAgVGV4dFRhYmxlICp0YWJsZSA9IG1hbGxvYyhzaXplb2YoKnRhYmxlKSk7CisKKyAgaWYgKHRhYmxlKSB7CisgICAgbWVtc2V0KHRhYmxlLCAwLCBzaXplb2YoKnRhYmxlKSk7CisKKyAgICB0YWJsZS0+aGVhZGVyLmZpZWxkcyA9IGdldFRleHRUYWJsZUhlYWRlcih0dGQpOworICAgIHRhYmxlLT5zaXplID0gZ2V0RGF0YVNpemUodHRkLT5hcmVhKTsKKworICAgIHRhYmxlLT5vcHRpb25zLnRyeUJhc2VDaGFyYWN0ZXIgPSAxOworCisgICAgeworICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqKmNlbGwgPSAmdGFibGUtPmNlbGxzLnJlcGxhY2VtZW50Q2hhcmFjdGVyOworICAgICAgKmNlbGwgPSBnZXRVbmljb2RlQ2VsbCh0dGQsIFVOSUNPREVfUkVQTEFDRU1FTlRfQ0hBUkFDVEVSKTsKKyAgICAgIGlmICghKmNlbGwpICpjZWxsID0gZ2V0VW5pY29kZUNlbGwodHRkLCBXQ19DKCc/JykpOworICAgIH0KKworICAgIHJlc2V0RGF0YUFyZWEodHRkLT5hcmVhKTsKKyAgfQorCisgIHJldHVybiB0YWJsZTsKK30KKwordm9pZAorZGVzdHJveVRleHRUYWJsZSAoVGV4dFRhYmxlICp0YWJsZSkgeworICBpZiAodGFibGUtPnNpemUpIHsKKyAgICBmcmVlKHRhYmxlLT5oZWFkZXIuZmllbGRzKTsKKyAgICBmcmVlKHRhYmxlKTsKKyAgfQorfQorCitjaGFyICoKK2Vuc3VyZVRleHRUYWJsZUV4dGVuc2lvbiAoY29uc3QgY2hhciAqcGF0aCkgeworICByZXR1cm4gZW5zdXJlRmlsZUV4dGVuc2lvbihwYXRoLCBURVhUX1RBQkxFX0VYVEVOU0lPTik7Cit9CisKK2NoYXIgKgorbWFrZVRleHRUYWJsZVBhdGggKGNvbnN0IGNoYXIgKmRpcmVjdG9yeSwgY29uc3QgY2hhciAqbmFtZSkgeworICBjaGFyICpzdWJkaXJlY3RvcnkgPSBtYWtlUGF0aChkaXJlY3RvcnksIFRFWFRfVEFCTEVTX1NVQkRJUkVDVE9SWSk7CisKKyAgaWYgKHN1YmRpcmVjdG9yeSkgeworICAgIGNoYXIgKmZpbGUgPSBtYWtlRmlsZVBhdGgoc3ViZGlyZWN0b3J5LCBuYW1lLCBURVhUX1RBQkxFX0VYVEVOU0lPTik7CisKKyAgICBmcmVlKHN1YmRpcmVjdG9yeSk7CisgICAgaWYgKGZpbGUpIHJldHVybiBmaWxlOworICB9CisKKyAgcmV0dXJuIE5VTEw7Cit9CisKK2NoYXIgKgorZ2V0VGV4dFRhYmxlRm9yTG9jYWxlIChjb25zdCBjaGFyICpkaXJlY3RvcnkpIHsKKyAgcmV0dXJuIGdldEZpbGVGb3JMb2NhbGUoZGlyZWN0b3J5LCBtYWtlVGV4dFRhYmxlUGF0aCk7Cit9CmRpZmYgLS1naXQgYS9Qcm9ncmFtcy90dGJfY29tcGlsZS5oIGIvUHJvZ3JhbXMvdHRiX2NvbXBpbGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMTNlMjAzCi0tLSAvZGV2L251bGwKKysrIGIvUHJvZ3JhbXMvdHRiX2NvbXBpbGUuaApAQCAtMCwwICsxLDU5IEBACisvKgorICogQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyAqICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyAqCisgKiBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorICoKKyAqIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyAqCisgKiBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisgKi8KKworI2lmbmRlZiBCUkxUVFlfSU5DTFVERURfVFRCX0NPTVBJTEUKKyNkZWZpbmUgQlJMVFRZX0lOQ0xVREVEX1RUQl9DT01QSUxFCisKKyNpbmNsdWRlIDxzdGRpby5oPgorCisjaW5jbHVkZSAiZGF0YWZpbGUuaCIKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZiAvKiBfX2NwbHVzcGx1cyAqLworCit0eXBlZGVmIHN0cnVjdCBUZXh0VGFibGVEYXRhU3RydWN0IFRleHRUYWJsZURhdGE7CitleHRlcm4gVGV4dFRhYmxlRGF0YSAqbmV3VGV4dFRhYmxlRGF0YSAodm9pZCk7CitleHRlcm4gdm9pZCBkZXN0cm95VGV4dFRhYmxlRGF0YSAoVGV4dFRhYmxlRGF0YSAqdHRkKTsKKworZXh0ZXJuIFRleHRUYWJsZURhdGEgKnByb2Nlc3NUZXh0VGFibGVMaW5lcyAoRklMRSAqc3RyZWFtLCBjb25zdCBjaGFyICpuYW1lLCBEYXRhT3BlcmFuZHNQcm9jZXNzb3IgKnByb2Nlc3NPcGVyYW5kcyk7CitleHRlcm4gVGV4dFRhYmxlICptYWtlVGV4dFRhYmxlIChUZXh0VGFibGVEYXRhICp0dGQpOworCit0eXBlZGVmIFRleHRUYWJsZURhdGEgKlRleHRUYWJsZVByb2Nlc3NvciAoRklMRSAqc3RyZWFtLCBjb25zdCBjaGFyICpuYW1lKTsKK2V4dGVybiBUZXh0VGFibGVQcm9jZXNzb3IgcHJvY2Vzc1RleHRUYWJsZVN0cmVhbTsKK2V4dGVybiBUZXh0VGFibGVQcm9jZXNzb3IgcHJvY2Vzc0dub21lQnJhaWxsZVN0cmVhbTsKK2V4dGVybiBUZXh0VGFibGVQcm9jZXNzb3IgcHJvY2Vzc0xpYkxvdWlzU3RyZWFtOworCitleHRlcm4gdm9pZCAqZ2V0VGV4dFRhYmxlSXRlbSAoVGV4dFRhYmxlRGF0YSAqdHRkLCBUZXh0VGFibGVPZmZzZXQgb2Zmc2V0KTsKK2V4dGVybiBUZXh0VGFibGVIZWFkZXIgKmdldFRleHRUYWJsZUhlYWRlciAoVGV4dFRhYmxlRGF0YSAqdHRkKTsKK2V4dGVybiBjb25zdCB1bnNpZ25lZCBjaGFyICpnZXRVbmljb2RlQ2VsbCAoVGV4dFRhYmxlRGF0YSAqdHRkLCB3Y2hhcl90IGNoYXJhY3Rlcik7CisKK2V4dGVybiBpbnQgc2V0VGV4dFRhYmxlSW5wdXQgKFRleHRUYWJsZURhdGEgKnR0ZCwgd2NoYXJfdCBjaGFyYWN0ZXIsIHVuc2lnbmVkIGNoYXIgZG90cyk7CitleHRlcm4gaW50IHNldFRleHRUYWJsZUdseXBoIChUZXh0VGFibGVEYXRhICp0dGQsIHdjaGFyX3QgY2hhcmFjdGVyLCB1bnNpZ25lZCBjaGFyIGRvdHMpOworZXh0ZXJuIGludCBzZXRUZXh0VGFibGVDaGFyYWN0ZXIgKFRleHRUYWJsZURhdGEgKnR0ZCwgd2NoYXJfdCBjaGFyYWN0ZXIsIHVuc2lnbmVkIGNoYXIgZG90cyk7CitleHRlcm4gdm9pZCB1bnNldFRleHRUYWJsZUNoYXJhY3RlciAoVGV4dFRhYmxlRGF0YSAqdHRkLCB3Y2hhcl90IGNoYXJhY3Rlcik7CitleHRlcm4gaW50IHNldFRleHRUYWJsZUJ5dGUgKFRleHRUYWJsZURhdGEgKnR0ZCwgdW5zaWduZWQgY2hhciBieXRlLCB1bnNpZ25lZCBjaGFyIGRvdHMpOworZXh0ZXJuIGludCBhZGRUZXh0VGFibGVBbGlhcyAoVGV4dFRhYmxlRGF0YSAqdHRkLCB3Y2hhcl90IGZyb20sIHdjaGFyX3QgdG8pOworCitleHRlcm4gVW5pY29kZVJvd0VudHJ5ICpnZXRVbmljb2RlUm93RW50cnkgKFRleHRUYWJsZURhdGEgKnR0ZCwgd2NoYXJfdCBjaGFyYWN0ZXIsIGludCBhbGxvY2F0ZSk7CisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmIC8qIF9fY3BsdXNwbHVzICovCisKKyNlbmRpZiAvKiBCUkxUVFlfSU5DTFVERURfVFRCX0NPTVBJTEUgKi8KZGlmZiAtLWdpdCBhL1Byb2dyYW1zL3R0Yl9nbm9tZS5jIGIvUHJvZ3JhbXMvdHRiX2dub21lLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGEwNGRiZAotLS0gL2Rldi9udWxsCisrKyBiL1Byb2dyYW1zL3R0Yl9nbm9tZS5jCkBAIC0wLDAgKzEsMjAzIEBACisvKgorICogQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyAqICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyAqCisgKiBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorICoKKyAqIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyAqCisgKiBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisgKi8KKworI2luY2x1ZGUgInByb2xvZ3VlLmgiCisKKyNpbmNsdWRlICJ0dGIuaCIKKyNpbmNsdWRlICJ0dGJfaW50ZXJuYWwuaCIKKyNpbmNsdWRlICJ0dGJfY29tcGlsZS5oIgorCitzdGF0aWMgaW50IGluVWNzQmxvY2s7CisKK3N0YXRpYyBpbnQKK2dldFVuaWNvZGVDaGFyYWN0ZXIgKERhdGFGaWxlICpmaWxlLCB3Y2hhcl90ICpjaGFyYWN0ZXIsIGNvbnN0IGNoYXIgKmRlc2NyaXB0aW9uKSB7CisgIERhdGFPcGVyYW5kIHN0cmluZzsKKworICBpZiAoZ2V0RGF0YU9wZXJhbmQoZmlsZSwgJnN0cmluZywgZGVzY3JpcHRpb24pKSB7CisgICAgaWYgKHN0cmluZy5sZW5ndGggPiAyKSB7CisgICAgICBpZiAoKHN0cmluZy5jaGFyYWN0ZXJzWzBdID09IFdDX0MoJ1UnKSkgJiYKKyAgICAgICAgICAoc3RyaW5nLmNoYXJhY3RlcnNbMV0gPT0gV0NfQygnKycpKSkgeworICAgICAgICBjb25zdCB3Y2hhcl90ICpkaWdpdCA9ICZzdHJpbmcuY2hhcmFjdGVyc1syXTsKKyAgICAgICAgaW50IGxlbmd0aCA9IHN0cmluZy5sZW5ndGggLSAyOworCisgICAgICAgICpjaGFyYWN0ZXIgPSAwOworICAgICAgICB3aGlsZSAobGVuZ3RoKSB7CisgICAgICAgICAgaW50IHZhbHVlOworICAgICAgICAgIGludCBzaGlmdDsKKyAgICAgICAgICBpZiAoIWlzSGV4YWRlY2ltYWxEaWdpdCgqZGlnaXQrKywgJnZhbHVlLCAmc2hpZnQpKSBicmVhazsKKworICAgICAgICAgICpjaGFyYWN0ZXIgPDw9IHNoaWZ0OworICAgICAgICAgICpjaGFyYWN0ZXIgfD0gdmFsdWU7CisgICAgICAgICAgbGVuZ3RoIC09IDE7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFsZW5ndGgpIHJldHVybiAxOworICAgICAgfQorICAgIH0KKworICAgIHJlcG9ydERhdGFFcnJvcihmaWxlLCAiaW52YWxpZCBVbmljb2RlIGNoYXJhY3RlcjogJS4qIiBQUkl3cywKKyAgICAgICAgICAgICAgICAgICAgc3RyaW5nLmxlbmd0aCwgc3RyaW5nLmNoYXJhY3RlcnMpOworICB9CisKKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK3Rlc3RCcmFpbGxlUmVwcmVzZW50YXRpb24gKERhdGFGaWxlICpmaWxlLCB3Y2hhcl90IHJlcHJlc2VudGF0aW9uLCB1bnNpZ25lZCBjaGFyICpkb3RzKSB7CisgIGlmICgocmVwcmVzZW50YXRpb24gJiB+VU5JQ09ERV9DRUxMX01BU0spID09IFVOSUNPREVfQlJBSUxMRV9ST1cpIHsKKyAgICAqZG90cyA9IHJlcHJlc2VudGF0aW9uICYgVU5JQ09ERV9DRUxMX01BU0s7CisgICAgcmV0dXJuIDE7CisgIH0gZWxzZSB7CisgICAgcmVwb3J0RGF0YUVycm9yKGZpbGUsICJpbnZhbGlkIGJyYWlsbGUgcmVwcmVzZW50YXRpb24iKTsKKyAgfQorCisgIHJldHVybiAwOworfQorCitzdGF0aWMgREFUQV9PUEVSQU5EU19QUk9DRVNTT1IocHJvY2Vzc0VuY29kaW5nT3BlcmFuZHMpIHsKKyAgRGF0YU9wZXJhbmQgZW5jb2Rpbmc7CisKKyAgaWYgKGdldERhdGFPcGVyYW5kKGZpbGUsICZlbmNvZGluZywgImNoYXJhY3RlciBlbmNvZGluZyBuYW1lIikpIHsKKyAgICBpZiAoIWlzS2V5d29yZChXU19DKCJVVEYtOCIpLCBlbmNvZGluZy5jaGFyYWN0ZXJzLCBlbmNvZGluZy5sZW5ndGgpKSB7CisgICAgICByZXBvcnREYXRhRXJyb3IoZmlsZSwgInVuc3VwcG9ydGVkIGNoYXJhY3RlciBlbmNvZGluZzogJS4qIiBQUkl3cywKKyAgICAgICAgICAgICAgICAgICAgICBlbmNvZGluZy5sZW5ndGgsIGVuY29kaW5nLmNoYXJhY3RlcnMpOworICAgIH0KKyAgfQorCisgIHJldHVybiAxOworfQorCitzdGF0aWMgREFUQV9PUEVSQU5EU19QUk9DRVNTT1IocHJvY2Vzc0RlbGVnYXRlT3BlcmFuZHMpIHsKKyAgRGF0YU9wZXJhbmQgdHlwZTsKKworICBpZiAoZ2V0RGF0YU9wZXJhbmQoZmlsZSwgJnR5cGUsICJkZWxlZ2F0ZSB0eXBlIikpIHsKKyAgICBpZiAoaXNLZXl3b3JkKFdTX0MoIkZJTEUiKSwgdHlwZS5jaGFyYWN0ZXJzLCB0eXBlLmxlbmd0aCkpIHsKKyAgICAgIERhdGFPcGVyYW5kIG5hbWU7CisKKyAgICAgIGlmIChnZXREYXRhT3BlcmFuZChmaWxlLCAmbmFtZSwgImZpbGUgbmFtZSIpKSB7CisgICAgICAgIHJldHVybiBpbmNsdWRlRGF0YUZpbGUoZmlsZSwgbmFtZS5jaGFyYWN0ZXJzLCBuYW1lLmxlbmd0aCk7CisgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgIHJldHVybiBpbmNsdWRlRGF0YUZpbGUoZmlsZSwgdHlwZS5jaGFyYWN0ZXJzLCB0eXBlLmxlbmd0aCk7CisgICAgfQorICB9CisKKyAgcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBEQVRBX09QRVJBTkRTX1BST0NFU1NPUihwcm9jZXNzVWNzQmxvY2tPcGVyYW5kcykgeworICBEYXRhT3BlcmFuZCBhY3Rpb247CisKKyAgaWYgKGdldERhdGFPcGVyYW5kKGZpbGUsICZhY3Rpb24sICJVQ1MgYmxvY2sgYWN0aW9uIikpIHsKKyAgICBjb25zdCB3Y2hhcl90ICpleHBlY3RlZCA9IGluVWNzQmxvY2s/IFdTX0MoIkVORCIpOiBXU19DKCJTVEFSVCIpOworCisgICAgaWYgKGlzS2V5d29yZChleHBlY3RlZCwgYWN0aW9uLmNoYXJhY3RlcnMsIGFjdGlvbi5sZW5ndGgpKSB7CisgICAgICBpblVjc0Jsb2NrID0gIWluVWNzQmxvY2s7CisgICAgfSBlbHNlIHsKKyAgICAgIHJlcG9ydERhdGFFcnJvcihmaWxlLCAidW5leHBlY3RlZCBVQ1MgYmxvY2sgYWN0aW9uOiAlLioiIFBSSXdzICIgKGV4cGVjdGluZyAlIiBQUkl3cyAiKSIsCisgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uLmxlbmd0aCwgYWN0aW9uLmNoYXJhY3RlcnMsIGV4cGVjdGVkKTsKKyAgICB9CisgIH0KKworICByZXR1cm4gMTsKK30KKworc3RhdGljIERBVEFfT1BFUkFORFNfUFJPQ0VTU09SKHByb2Nlc3NVY3NDaGFyT3BlcmFuZHMpIHsKKyAgVGV4dFRhYmxlRGF0YSAqdHRkID0gZGF0YTsKKyAgRGF0YU9wZXJhbmQgc3RyaW5nOworCisgIGlmIChnZXREYXRhT3BlcmFuZChmaWxlLCAmc3RyaW5nLCAiY2hhcmFjdGVyIHN0cmluZyIpKSB7CisgICAgaWYgKHN0cmluZy5sZW5ndGggPT0gMSkgeworICAgICAgRGF0YU9wZXJhbmQgcmVwcmVzZW50YXRpb247CisKKyAgICAgIGlmIChnZXREYXRhT3BlcmFuZChmaWxlLCAmcmVwcmVzZW50YXRpb24sICJicmFpbGxlIHJlcHJlc2VudGF0aW9uIikpIHsKKyAgICAgICAgaWYgKHJlcHJlc2VudGF0aW9uLmxlbmd0aCA9PSAxKSB7CisgICAgICAgICAgdW5zaWduZWQgY2hhciBkb3RzOworCisgICAgICAgICAgaWYgKHRlc3RCcmFpbGxlUmVwcmVzZW50YXRpb24oZmlsZSwgcmVwcmVzZW50YXRpb24uY2hhcmFjdGVyc1swXSwgJmRvdHMpKSB7CisgICAgICAgICAgICBpZiAoIXNldFRleHRUYWJsZUNoYXJhY3Rlcih0dGQsIHN0cmluZy5jaGFyYWN0ZXJzWzBdLCBkb3RzKSkgcmV0dXJuIDA7CisgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgIHJlcG9ydERhdGFFcnJvcihmaWxlLCAibXVsdGktY2VsbCBicmFpbGxlIHJlcHJlc2VudGF0aW9uIG5vdCBzdXBwb3J0ZWQiKTsKKyAgICAgICAgfQorICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICByZXBvcnREYXRhRXJyb3IoZmlsZSwgIm11bHRpLWNoYXJhY3RlciBzdHJpbmcgbm90IHN1cHBvcnRlZCIpOworICAgIH0KKyAgfQorCisgIHJldHVybiAxOworfQorCitzdGF0aWMgREFUQV9PUEVSQU5EU19QUk9DRVNTT1IocHJvY2Vzc1VuaWNvZGVDaGFyT3BlcmFuZHMpIHsKKyAgVGV4dFRhYmxlRGF0YSAqdHRkID0gZGF0YTsKKyAgd2NoYXJfdCBjaGFyYWN0ZXI7CisKKyAgaWYgKGdldFVuaWNvZGVDaGFyYWN0ZXIoZmlsZSwgJmNoYXJhY3RlciwgImNoYXJhY3RlciIpKSB7CisgICAgd2NoYXJfdCByZXByZXNlbnRhdGlvbjsKKworICAgIGlmIChnZXRVbmljb2RlQ2hhcmFjdGVyKGZpbGUsICZyZXByZXNlbnRhdGlvbiwgImJyYWlsbGUgcmVwcmVzZW50YXRpb24iKSkgeworICAgICAgdW5zaWduZWQgY2hhciBkb3RzOworCisgICAgICBpZiAodGVzdEJyYWlsbGVSZXByZXNlbnRhdGlvbihmaWxlLCByZXByZXNlbnRhdGlvbiwgJmRvdHMpKSB7CisgICAgICAgIGlmICghc2V0VGV4dFRhYmxlQ2hhcmFjdGVyKHR0ZCwgY2hhcmFjdGVyLCBkb3RzKSkgcmV0dXJuIDA7CisgICAgICB9CisgICAgfQorICB9CisKKyAgcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBEQVRBX09QRVJBTkRTX1BST0NFU1NPUihwcm9jZXNzR25vbWVCcmFpbGxlT3BlcmFuZHMpIHsKKyAgaWYgKGluVWNzQmxvY2spIHsKKyAgICBCRUdJTl9EQVRBX0RJUkVDVElWRV9UQUJMRQorICAgICAgey5uYW1lPVdTX0MoIlVDUy1CTE9DSyIpLCAucHJvY2Vzc29yPXByb2Nlc3NVY3NCbG9ja09wZXJhbmRzfSwKKyAgICAgIHsubmFtZT1OVUxMLCAucHJvY2Vzc29yPXByb2Nlc3NVY3NDaGFyT3BlcmFuZHN9LAorICAgIEVORF9EQVRBX0RJUkVDVElWRV9UQUJMRQorCisgICAgcmV0dXJuIHByb2Nlc3NEaXJlY3RpdmVPcGVyYW5kKGZpbGUsICZkaXJlY3RpdmVzLCAiZ25vbWUgYnJhaWxsZSBVQ1MgYmxvY2sgZGlyZWN0aXZlIiwgZGF0YSk7CisgIH0gZWxzZSB7CisgICAgQkVHSU5fREFUQV9ESVJFQ1RJVkVfVEFCTEUKKyAgICAgIHsubmFtZT1XU19DKCJFTkNPRElORyIpLCAucHJvY2Vzc29yPXByb2Nlc3NFbmNvZGluZ09wZXJhbmRzfSwKKyAgLy8gIHsubmFtZT1XU19DKCJOQU1FIiksIC5wcm9jZXNzb3I9cHJvY2Vzc05hbWVPcGVyYW5kc30sCisgIC8vICB7Lm5hbWU9V1NfQygiTE9DQUxFUyIpLCAucHJvY2Vzc29yPXByb2Nlc3NMb2NhbGVzT3BlcmFuZHN9LAorICAvLyAgey5uYW1lPVdTX0MoIlVDUy1TVUZGSVgiKSwgLnByb2Nlc3Nvcj1wcm9jZXNzVWNzU3VmZml4T3BlcmFuZHN9LAorICAgICAgey5uYW1lPVdTX0MoIkRFTEVHQVRFIiksIC5wcm9jZXNzb3I9cHJvY2Vzc0RlbGVnYXRlT3BlcmFuZHN9LAorICAvLyAgey5uYW1lPVdTX0MoIlVURjgtU1RSSU5HIiksIC5wcm9jZXNzb3I9cHJvY2Vzc1V0ZjhTdHJpbmdPcGVyYW5kc30sCisgICAgICB7Lm5hbWU9V1NfQygiVUNTLUJMT0NLIiksIC5wcm9jZXNzb3I9cHJvY2Vzc1Vjc0Jsb2NrT3BlcmFuZHN9LAorICAgICAgey5uYW1lPVdTX0MoIlVDUy1DSEFSIiksIC5wcm9jZXNzb3I9cHJvY2Vzc1Vjc0NoYXJPcGVyYW5kc30sCisgICAgICB7Lm5hbWU9V1NfQygiVU5JQ09ERS1DSEFSIiksIC5wcm9jZXNzb3I9cHJvY2Vzc1VuaWNvZGVDaGFyT3BlcmFuZHN9LAorICAvLyAgey5uYW1lPVdTX0MoIlVOS05PV04tQ0hBUiIpLCAucHJvY2Vzc29yPXByb2Nlc3NVbmtub3duQ2hhck9wZXJhbmRzfSwKKyAgICBFTkRfREFUQV9ESVJFQ1RJVkVfVEFCTEUKKworICAgIHJldHVybiBwcm9jZXNzRGlyZWN0aXZlT3BlcmFuZChmaWxlLCAmZGlyZWN0aXZlcywgImdub21lIGJyYWlsbGUgbWFpbiBkaXJlY3RpdmUiLCBkYXRhKTsKKyAgfQorfQorCitUZXh0VGFibGVEYXRhICoKK3Byb2Nlc3NHbm9tZUJyYWlsbGVTdHJlYW0gKEZJTEUgKnN0cmVhbSwgY29uc3QgY2hhciAqbmFtZSkgeworICBUZXh0VGFibGVEYXRhICp0dGQ7CisKKyAgaW5VY3NCbG9jayA9IDA7CisgIGlmICgodHRkID0gcHJvY2Vzc1RleHRUYWJsZUxpbmVzKHN0cmVhbSwgbmFtZSwgcHJvY2Vzc0dub21lQnJhaWxsZU9wZXJhbmRzKSkpIHsKKyAgICBpZiAoaW5VY3NCbG9jaykgeworICAgICAgcmVwb3J0RGF0YUVycm9yKE5VTEwsICJ1bnRlcm1pbmF0ZWQgVUNTIGJsb2NrIik7CisgICAgfQorICB9OworCisgIHJldHVybiB0dGQ7Cit9CmRpZmYgLS1naXQgYS9Qcm9ncmFtcy90dGJfaW50ZXJuYWwuaCBiL1Byb2dyYW1zL3R0Yl9pbnRlcm5hbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBjOWZjOTkKLS0tIC9kZXYvbnVsbAorKysgYi9Qcm9ncmFtcy90dGJfaW50ZXJuYWwuaApAQCAtMCwwICsxLDg4IEBACisvKgorICogQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyAqICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyAqCisgKiBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorICoKKyAqIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyAqCisgKiBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisgKi8KKworI2lmbmRlZiBCUkxUVFlfSU5DTFVERURfVFRCX0lOVEVSTkFMCisjZGVmaW5lIEJSTFRUWV9JTkNMVURFRF9UVEJfSU5URVJOQUwKKworI2luY2x1ZGUgImJpdG1hc2suaCIKKyNpbmNsdWRlICJ1bmljb2RlLmgiCisjaW5jbHVkZSAiZGF0YWFyZWEuaCIKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZiAvKiBfX2NwbHVzcGx1cyAqLworCit0eXBlZGVmIHVpbnQzMl90IFRleHRUYWJsZU9mZnNldDsKKworI2RlZmluZSBDSEFSU0VUX0JZVEVfQklUUyA4CisjZGVmaW5lIENIQVJTRVRfQllURV9DT1VOVCAoMSA8PCBDSEFSU0VUX0JZVEVfQklUUykKKyNkZWZpbmUgQ0hBUlNFVF9CWVRFX01BWElNVU0gKENIQVJTRVRfQllURV9DT1VOVCAtIDEpCisKK3R5cGVkZWYgc3RydWN0IHsKKyAgdW5zaWduZWQgY2hhciBjZWxsc1tVTklDT0RFX0NFTExTX1BFUl9ST1ddOworICBCSVRNQVNLKGNlbGxEZWZpbmVkLCBVTklDT0RFX0NFTExTX1BFUl9ST1csIGNoYXIpOworICBCSVRNQVNLKGNlbGxBbGlhc2VkLCBVTklDT0RFX0NFTExTX1BFUl9ST1csIGNoYXIpOworfSBVbmljb2RlUm93RW50cnk7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgVGV4dFRhYmxlT2Zmc2V0IHJvd3NbVU5JQ09ERV9ST1dTX1BFUl9QTEFORV07Cit9IFVuaWNvZGVQbGFuZUVudHJ5OworCit0eXBlZGVmIHN0cnVjdCB7CisgIFRleHRUYWJsZU9mZnNldCBwbGFuZXNbVU5JQ09ERV9QTEFORVNfUEVSX0dST1VQXTsKK30gVW5pY29kZUdyb3VwRW50cnk7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgd2NoYXJfdCBmcm9tOworICB3Y2hhcl90IHRvOworfSBUZXh0VGFibGVBbGlhc0VudHJ5OworCit0eXBlZGVmIHN0cnVjdCB7CisgIFRleHRUYWJsZU9mZnNldCB1bmljb2RlR3JvdXBzW1VOSUNPREVfR1JPVVBfQ09VTlRdOworICB3Y2hhcl90IGlucHV0Q2hhcmFjdGVyc1swWDEwMF07CisgIEJJVE1BU0soaW5wdXRDaGFyYWN0ZXJEZWZpbmVkLCAwWDEwMCwgY2hhcik7CisgIERhdGFPZmZzZXQgYWxpYXNBcnJheTsKKyAgdWludDMyX3QgYWxpYXNDb3VudDsKK30gVGV4dFRhYmxlSGVhZGVyOworCitzdHJ1Y3QgVGV4dFRhYmxlU3RydWN0IHsKKyAgdW5pb24geworICAgIFRleHRUYWJsZUhlYWRlciAqZmllbGRzOworICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ5dGVzOworICB9IGhlYWRlcjsKKworICBzaXplX3Qgc2l6ZTsKKworICBzdHJ1Y3QgeworICAgIHVuc2lnbmVkIGNoYXIgdHJ5QmFzZUNoYXJhY3RlcjsKKyAgfSBvcHRpb25zOworCisgIHN0cnVjdCB7CisgICAgY29uc3QgdW5zaWduZWQgY2hhciAqcmVwbGFjZW1lbnRDaGFyYWN0ZXI7CisgIH0gY2VsbHM7Cit9OworCitleHRlcm4gY29uc3QgVGV4dFRhYmxlQWxpYXNFbnRyeSAqbG9jYXRlVGV4dFRhYmxlQWxpYXMgKAorICB3Y2hhcl90IGNoYXJhY3RlciwgY29uc3QgVGV4dFRhYmxlQWxpYXNFbnRyeSAqYXJyYXksIHNpemVfdCBjb3VudAorKTsKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYgLyogX19jcGx1c3BsdXMgKi8KKworI2VuZGlmIC8qIEJSTFRUWV9JTkNMVURFRF9UVEJfSU5URVJOQUwgKi8KZGlmZiAtLWdpdCBhL1Byb2dyYW1zL3R0Yl9sb3Vpcy5jIGIvUHJvZ3JhbXMvdHRiX2xvdWlzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzg4ODcyYwotLS0gL2Rldi9udWxsCisrKyBiL1Byb2dyYW1zL3R0Yl9sb3Vpcy5jCkBAIC0wLDAgKzEsMTU4IEBACisvKgorICogQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyAqICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyAqCisgKiBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorICoKKyAqIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyAqCisgKiBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisgKi8KKworI2luY2x1ZGUgInByb2xvZ3VlLmgiCisKKyNpbmNsdWRlICJ0dGIuaCIKKyNpbmNsdWRlICJ0dGJfaW50ZXJuYWwuaCIKKyNpbmNsdWRlICJ0dGJfY29tcGlsZS5oIgorCitzdGF0aWMgaW50CitnZXRVbmljb2RlQ2hhcmFjdGVycyAoRGF0YUZpbGUgKmZpbGUsIHdjaGFyX3QgKmNoYXJhY3RlciwgaW50IG51bSwgY29uc3QgY2hhciAqZGVzY3JpcHRpb24pIHsKKyAgRGF0YU9wZXJhbmQgc3RyaW5nOworICBjb25zdCB3Y2hhcl90ICpjOworICBpbnQgaTsKKworICBpZiAoZ2V0RGF0YU9wZXJhbmQoZmlsZSwgJnN0cmluZywgZGVzY3JpcHRpb24pKSB7CisgICAgZm9yIChjID0gc3RyaW5nLmNoYXJhY3RlcnMsIGkgPSAwOyBpIDwgbnVtOyBpKyspIHsKKyAgICAgIGlmICgqYyA9PSAnXFwnKSB7CisJYysrOworCXN3aXRjaCAoKmMpIHsKKwkgIGNhc2UgV0NfQygnXFwnKTogY2hhcmFjdGVyW2ldID0gV0NfQygnXFwnKTsgY29udGludWU7CisJICBjYXNlIFdDX0MoJ2YnKTogY2FzZSBXQ19DKCdGJyk6IGNoYXJhY3RlcltpXSA9IFdDX0MoJ1xmJyk7IGNvbnRpbnVlOworCSAgY2FzZSBXQ19DKCduJyk6IGNhc2UgV0NfQygnTicpOiBjaGFyYWN0ZXJbaV0gPSBXQ19DKCdcbicpOyBjb250aW51ZTsKKwkgIGNhc2UgV0NfQygncicpOiBjYXNlIFdDX0MoJ1InKTogY2hhcmFjdGVyW2ldID0gV0NfQygnXHInKTsgY29udGludWU7CisJICBjYXNlIFdDX0MoJ3MnKTogY2FzZSBXQ19DKCdTJyk6IGNoYXJhY3RlcltpXSA9IFdDX0MoJyAnICk7IGNvbnRpbnVlOworCSAgY2FzZSBXQ19DKCd0Jyk6IGNhc2UgV0NfQygnVCcpOiBjaGFyYWN0ZXJbaV0gPSBXQ19DKCdcdCcpOyBjb250aW51ZTsKKwkgIGNhc2UgV0NfQygndicpOiBjYXNlIFdDX0MoJ1YnKTogY2hhcmFjdGVyW2ldID0gV0NfQygnXHYnKTsgY29udGludWU7CisJICBjYXNlIFdDX0MoJ3gnKTogY2FzZSBXQ19DKCdYJyk6IHsKKwkgICAgY29uc3Qgd2NoYXJfdCAqZGlnaXQgPSArK2M7CisJICAgIGludCBsZW5ndGggPSBzdHJpbmcubGVuZ3RoIC0gKGRpZ2l0IC0gc3RyaW5nLmNoYXJhY3RlcnMpOworCisJICAgIGNoYXJhY3RlcltpXSA9IDA7CisJICAgIHdoaWxlIChsZW5ndGgpIHsKKwkgICAgICBpbnQgdmFsdWU7CisJICAgICAgaW50IHNoaWZ0OworCSAgICAgIGlmICghaXNIZXhhZGVjaW1hbERpZ2l0KCpkaWdpdCwgJnZhbHVlLCAmc2hpZnQpKSBicmVhazsKKwkgICAgICBkaWdpdCsrOworCisJICAgICAgY2hhcmFjdGVyW2ldIDw8PSBzaGlmdDsKKwkgICAgICBjaGFyYWN0ZXJbaV0gfD0gdmFsdWU7CisJICAgICAgbGVuZ3RoIC09IDE7CisJICAgIH0KKyAgICAgICAgICAgIGlmIChkaWdpdCA9PSBjKSBnb3RvIGludmFsaWQ7CisJICAgIGMgPSBkaWdpdDsKKwkgICAgY29udGludWU7CisJICB9CisJICBkZWZhdWx0OgorICAgICAgICAgIGludmFsaWQ6CisJICAgIHJlcG9ydERhdGFFcnJvcihmaWxlLCAidW5rbm93biBlc2NhcGUgc2VxdWVuY2U6ICUuKiIgUFJJd3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGludCkoYy1zdHJpbmcuY2hhcmFjdGVycysxKSwgc3RyaW5nLmNoYXJhY3RlcnMpOworCX0KKyAgICAgIH0gZWxzZSB7CisJY2hhcmFjdGVyW2ldID0gKmMrKzsKKyAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIDE7CisgIH0KKworICByZXR1cm4gMDsKK30KKworc3RhdGljIGludAorZ2V0RG90cyAoRGF0YUZpbGUgKmZpbGUsIHVuc2lnbmVkIGNoYXIgKmRvdHMsIGNvbnN0IGNoYXIgKmRlc2NyaXB0aW9uKSB7CisgIERhdGFPcGVyYW5kIHN0cmluZzsKKyAgaW50IGk7CisKKyAgKmRvdHMgPSAwOworCisgIGlmIChnZXREYXRhT3BlcmFuZChmaWxlLCAmc3RyaW5nLCBkZXNjcmlwdGlvbikpIHsKKyAgICBmb3IgKGkgPSAwOyBpIDwgc3RyaW5nLmxlbmd0aDsgaSsrKSB7CisgICAgICBpZiAoc3RyaW5nLmNoYXJhY3RlcnNbaV0gPj0gV0NfQygnMScpICYmIHN0cmluZy5jaGFyYWN0ZXJzW2ldIDw9IFdDX0MoJzgnKSkgeworCSpkb3RzIHw9IDEgPDwgKHN0cmluZy5jaGFyYWN0ZXJzW2ldIC0gV0NfQygnMScpKTsKKyAgICAgIH0gZWxzZSBpZiAoc3RyaW5nLmNoYXJhY3RlcnNbaV0gPT0gV0NfQygnLScpKSB7CisJcmVwb3J0RGF0YUVycm9yKGZpbGUsICJubyBzdXBwb3J0IGZvciBtdWx0aS1jZWxsICUuKiIgUFJJd3MsCisJCQlzdHJpbmcubGVuZ3RoLCBzdHJpbmcuY2hhcmFjdGVycyk7CisJcmV0dXJuIDA7CisgICAgICB9CisgICAgfQorICB9CisKKyAgcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBEQVRBX09QRVJBTkRTX1BST0NFU1NPUihwcm9jZXNzQ2hhcikgeworICBUZXh0VGFibGVEYXRhICp0dGQgPSBkYXRhOworICB3Y2hhcl90IGNoYXJhY3RlcjsKKworICBpZiAoZ2V0VW5pY29kZUNoYXJhY3RlcnMoZmlsZSwgJmNoYXJhY3RlciwgMSwgImNoYXJhY3RlciIpKSB7CisgICAgdW5zaWduZWQgY2hhciBkb3RzOworCisgICAgaWYgKGdldERvdHMoZmlsZSwgJmRvdHMsICJicmFpbGxlIHJlcHJlc2VudGF0aW9uIikpIHsKKyAgICAgIGlmICghc2V0VGV4dFRhYmxlQ2hhcmFjdGVyKHR0ZCwgY2hhcmFjdGVyLCBkb3RzKSkgcmV0dXJuIDA7CisgICAgfQorICB9CisKKyAgcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBEQVRBX09QRVJBTkRTX1BST0NFU1NPUihwcm9jZXNzVXBsb3cpIHsKKyAgVGV4dFRhYmxlRGF0YSAqdHRkID0gZGF0YTsKKyAgd2NoYXJfdCBjaGFyYWN0ZXJzWzJdOworCisgIGlmIChnZXRVbmljb2RlQ2hhcmFjdGVycyhmaWxlLCBjaGFyYWN0ZXJzLCAyLCAiY2hhcmFjdGVycyIpKSB7CisgICAgdW5zaWduZWQgY2hhciBkb3RzOworCisgICAgaWYgKGdldERvdHMoZmlsZSwgJmRvdHMsICJicmFpbGxlIHJlcHJlc2VudGF0aW9uIikpIHsKKyAgICAgIGlmICghc2V0VGV4dFRhYmxlQ2hhcmFjdGVyKHR0ZCwgY2hhcmFjdGVyc1swXSwgZG90cykpIHJldHVybiAwOworICAgICAgaWYgKCFzZXRUZXh0VGFibGVDaGFyYWN0ZXIodHRkLCBjaGFyYWN0ZXJzWzFdLCBkb3RzKSkgcmV0dXJuIDA7CisgICAgfQorICB9CisKKyAgcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBEQVRBX09QRVJBTkRTX1BST0NFU1NPUihwcm9jZXNzSW5jbHVkZSkgeworICByZXBvcnREYXRhRXJyb3IoZmlsZSwgIm5vIHN1cHBvcnQgZm9yIGluY2x1ZGUiKTsKKyAgcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBEQVRBX09QRVJBTkRTX1BST0NFU1NPUihwcm9jZXNzTGliTG91aXNPcGVyYW5kcykgeworICBCRUdJTl9EQVRBX0RJUkVDVElWRV9UQUJMRQorICAgIHsubmFtZT1XU19DKCJzcGFjZSIpLCAucHJvY2Vzc29yPXByb2Nlc3NDaGFyfSwKKyAgICB7Lm5hbWU9V1NfQygicHVuY3R1YXRpb24iKSwgLnByb2Nlc3Nvcj1wcm9jZXNzQ2hhcn0sCisgICAgey5uYW1lPVdTX0MoImRpZ2l0IiksIC5wcm9jZXNzb3I9cHJvY2Vzc0NoYXJ9LAorICAgIHsubmFtZT1XU19DKCJ1cGxvdyIpLCAucHJvY2Vzc29yPXByb2Nlc3NVcGxvd30sCisgICAgey5uYW1lPVdTX0MoImxldHRlciIpLCAucHJvY2Vzc29yPXByb2Nlc3NDaGFyfSwKKyAgICB7Lm5hbWU9V1NfQygibG93ZXJjYXNlIiksIC5wcm9jZXNzb3I9cHJvY2Vzc0NoYXJ9LAorICAgIHsubmFtZT1XU19DKCJ1cHBlcmNhc2UiKSwgLnByb2Nlc3Nvcj1wcm9jZXNzQ2hhcn0sCisgICAgey5uYW1lPVdTX0MoImxpdGRpZ2l0IiksIC5wcm9jZXNzb3I9cHJvY2Vzc0NoYXJ9LAorICAgIHsubmFtZT1XU19DKCJzaWduIiksIC5wcm9jZXNzb3I9cHJvY2Vzc0NoYXJ9LAorICAgIHsubmFtZT1XU19DKCJtYXRoIiksIC5wcm9jZXNzb3I9cHJvY2Vzc0NoYXJ9LAorICAgIHsubmFtZT1XU19DKCJkZWNwb2ludCIpLCAucHJvY2Vzc29yPXByb2Nlc3NDaGFyfSwKKyAgICB7Lm5hbWU9V1NfQygiaHlwaGVuIiksIC5wcm9jZXNzb3I9cHJvY2Vzc0NoYXJ9LAorICAgIHsubmFtZT1XU19DKCJpbmNsdWRlIiksIC5wcm9jZXNzb3I9cHJvY2Vzc0luY2x1ZGV9LAorICBFTkRfREFUQV9ESVJFQ1RJVkVfVEFCTEUKKworICByZXR1cm4gcHJvY2Vzc0RpcmVjdGl2ZU9wZXJhbmQoZmlsZSwgJmRpcmVjdGl2ZXMsICJsaWIgbG91aXMgZGlyZWN0aXZlIiwgZGF0YSk7Cit9CisKK1RleHRUYWJsZURhdGEgKgorcHJvY2Vzc0xpYkxvdWlzU3RyZWFtIChGSUxFICpzdHJlYW0sIGNvbnN0IGNoYXIgKm5hbWUpIHsKKyAgcmV0dXJuIHByb2Nlc3NUZXh0VGFibGVMaW5lcyhzdHJlYW0sIG5hbWUsIHByb2Nlc3NMaWJMb3Vpc09wZXJhbmRzKTsKK30KZGlmZiAtLWdpdCBhL1Byb2dyYW1zL3R0Yl9uYXRpdmUuYyBiL1Byb2dyYW1zL3R0Yl9uYXRpdmUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNDgyNjI4Ci0tLSAvZGV2L251bGwKKysrIGIvUHJvZ3JhbXMvdHRiX25hdGl2ZS5jCkBAIC0wLDAgKzEsMzI0IEBACisvKgorICogQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyAqICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyAqCisgKiBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorICoKKyAqIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyAqCisgKiBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisgKi8KKworI2luY2x1ZGUgInByb2xvZ3VlLmgiCisKKyNpbmNsdWRlICJmaWxlLmgiCisjaW5jbHVkZSAidHRiLmgiCisjaW5jbHVkZSAidHRiX2ludGVybmFsLmgiCisjaW5jbHVkZSAidHRiX2NvbXBpbGUuaCIKKworc3RhdGljIGludAorZ2V0Qnl0ZU9wZXJhbmQgKERhdGFGaWxlICpmaWxlLCB1bnNpZ25lZCBjaGFyICpieXRlKSB7CisgIERhdGFTdHJpbmcgc3RyaW5nOworICBjb25zdCBjaGFyICpkZXNjcmlwdGlvbiA9ICJsb2NhbCBjaGFyYWN0ZXIiOworCisgIGlmIChnZXREYXRhU3RyaW5nKGZpbGUsICZzdHJpbmcsIDEsIGRlc2NyaXB0aW9uKSkgeworICAgIGlmICgoc3RyaW5nLmxlbmd0aCA9PSAxKSAmJiBpc3dMYXRpbjEoc3RyaW5nLmNoYXJhY3RlcnNbMF0pKSB7CisgICAgICAqYnl0ZSA9IHN0cmluZy5jaGFyYWN0ZXJzWzBdOworICAgICAgcmV0dXJuIDE7CisgICAgfSBlbHNlIHsKKyAgICAgIHJlcG9ydERhdGFFcnJvcihmaWxlLCAiaW52YWxpZCAlczogJS4qIiBQUkl3cywKKyAgICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbiwgc3RyaW5nLmxlbmd0aCwgc3RyaW5nLmNoYXJhY3RlcnMpOworICAgIH0KKyAgfQorCisgIHJldHVybiAwOworfQorCitzdGF0aWMgY29uc3QgY2hhciBjaGFyYWN0ZXJEZXNjcmlwdGlvbltdID0gIlVuaWNvZGUgY2hhcmFjdGVyIjsKKworc3RhdGljIGludAoraXNDaGFyYWN0ZXJPcGVyYW5kICgKKyAgRGF0YUZpbGUgKmZpbGUsIHdjaGFyX3QgKmNoYXJhY3RlciwKKyAgY29uc3Qgd2NoYXJfdCAqY2hhcmFjdGVycywgaW50IGxlbmd0aAorKSB7CisgIGlmIChsZW5ndGggPT0gMSkgeworICAgIHdjaGFyX3Qgd2MgPSBjaGFyYWN0ZXJzWzBdOworCisgICAgaWYgKCEod2MgJiB+VU5JQ09ERV9DSEFSQUNURVJfTUFTSykpIHsKKyAgICAgICpjaGFyYWN0ZXIgPSB3YzsKKyAgICAgIHJldHVybiAxOworICAgIH0gZWxzZSB7CisgICAgICByZXBvcnREYXRhRXJyb3IoZmlsZSwgIiVzIG91dCBvZiByYW5nZTogJS4qIiBQUkl3cywKKyAgICAgICAgICAgICAgICAgICAgICBjaGFyYWN0ZXJEZXNjcmlwdGlvbiwgbGVuZ3RoLCBjaGFyYWN0ZXJzKTsKKyAgICB9CisgIH0gZWxzZSB7CisgICAgcmVwb3J0RGF0YUVycm9yKGZpbGUsICJub3QgYSBzaW5nbGUgJXM6ICUuKiIgUFJJd3MsCisgICAgICAgICAgICAgICAgICAgIGNoYXJhY3RlckRlc2NyaXB0aW9uLCBsZW5ndGgsIGNoYXJhY3RlcnMpOworICB9CisKKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK2dldENoYXJhY3Rlck9wZXJhbmQgKERhdGFGaWxlICpmaWxlLCB3Y2hhcl90ICpjaGFyYWN0ZXIpIHsKKyAgRGF0YVN0cmluZyBzdHJpbmc7CisKKyAgaWYgKGdldERhdGFTdHJpbmcoZmlsZSwgJnN0cmluZywgMCwgY2hhcmFjdGVyRGVzY3JpcHRpb24pKSB7CisgICAgaWYgKGlzQ2hhcmFjdGVyT3BlcmFuZChmaWxlLCBjaGFyYWN0ZXIsIHN0cmluZy5jaGFyYWN0ZXJzLCBzdHJpbmcubGVuZ3RoKSkgeworICAgICAgcmV0dXJuIDE7CisgICAgfQorICB9CisKKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK2dldERvdHNPcGVyYW5kIChEYXRhRmlsZSAqZmlsZSwgdW5zaWduZWQgY2hhciAqZG90cykgeworICBpZiAoZmluZERhdGFPcGVyYW5kKGZpbGUsICJjZWxsIikpIHsKKyAgICB3Y2hhcl90IGNoYXJhY3RlcjsKKworICAgIGlmIChnZXREYXRhQ2hhcmFjdGVyKGZpbGUsICZjaGFyYWN0ZXIpKSB7CisgICAgICBpbnQgbm9Eb3RzID0gMDsKKyAgICAgIHdjaGFyX3QgZW5jbG9zZWQgPSAoY2hhcmFjdGVyID09IFdDX0MoJygnKSk/IFdDX0MoJyknKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAwOworICAgICAgKmRvdHMgPSAwOworCisgICAgICBpZiAoIWVuY2xvc2VkKSB7CisgICAgICAgIGlmICh3Y3NjaHIoV1NfQygiMCIpLCBjaGFyYWN0ZXIpKSB7CisgICAgICAgICAgbm9Eb3RzID0gMTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICB1bmdldERhdGFDaGFyYWN0ZXJzKGZpbGUsIDEpOworICAgICAgICB9CisgICAgICB9CisKKyAgICAgIHdoaWxlIChnZXREYXRhQ2hhcmFjdGVyKGZpbGUsICZjaGFyYWN0ZXIpKSB7CisgICAgICAgIGludCBzcGFjZSA9IGlzd3NwYWNlKGNoYXJhY3Rlcik7CisKKyAgICAgICAgaWYgKGVuY2xvc2VkKSB7CisgICAgICAgICAgaWYgKGNoYXJhY3RlciA9PSBlbmNsb3NlZCkgeworICAgICAgICAgICAgZW5jbG9zZWQgPSAwOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgfQorCisgICAgICAgICAgaWYgKHNwYWNlKSBjb250aW51ZTsKKyAgICAgICAgfSBlbHNlIGlmIChzcGFjZSkgeworICAgICAgICAgIHVuZ2V0RGF0YUNoYXJhY3RlcnMoZmlsZSwgMSk7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICB7CisgICAgICAgICAgaW50IGRvdDsKKworICAgICAgICAgIGlmIChub0RvdHMgfHwgIWJybERvdE51bWJlclRvSW5kZXgoY2hhcmFjdGVyLCAmZG90KSkgeworICAgICAgICAgICAgcmVwb3J0RGF0YUVycm9yKGZpbGUsICJpbnZhbGlkIGRvdCBudW1iZXI6ICUuMSIgUFJJd3MsICZjaGFyYWN0ZXIpOworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgfQorCisgICAgICAgICAgeworICAgICAgICAgICAgdW5zaWduZWQgY2hhciBiaXQgPSBicmxEb3RCaXRzW2RvdF07CisKKyAgICAgICAgICAgIGlmICgqZG90cyAmIGJpdCkgeworICAgICAgICAgICAgICByZXBvcnREYXRhRXJyb3IoZmlsZSwgImR1cGxpY2F0ZSBkb3QgbnVtYmVyOiAlLjEiIFBSSXdzLCAmY2hhcmFjdGVyKTsKKyAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICpkb3RzIHw9IGJpdDsKKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgIH0KKworICAgICAgaWYgKGVuY2xvc2VkKSB7CisgICAgICAgIHJlcG9ydERhdGFFcnJvcihmaWxlLCAiaW5jb21wbGV0ZSBjZWxsIik7CisgICAgICAgIHJldHVybiAwOworICAgICAgfQorCisgICAgICByZXR1cm4gMTsKKyAgICB9CisgIH0KKworICByZXR1cm4gMDsKK30KKworc3RhdGljIERBVEFfT1BFUkFORFNfUFJPQ0VTU09SKHByb2Nlc3NBbGlhc09wZXJhbmRzKSB7CisgIFRleHRUYWJsZURhdGEgKnR0ZCA9IGRhdGE7CisgIHdjaGFyX3QgZnJvbTsKKworICBpZiAoZ2V0Q2hhcmFjdGVyT3BlcmFuZChmaWxlLCAmZnJvbSkpIHsKKyAgICB3Y2hhcl90IHRvOworCisgICAgaWYgKGdldENoYXJhY3Rlck9wZXJhbmQoZmlsZSwgJnRvKSkgeworICAgICAgaWYgKCFhZGRUZXh0VGFibGVBbGlhcyh0dGQsIGZyb20sIHRvKSkgcmV0dXJuIDA7CisgICAgfQorICB9CisKKyAgcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBEQVRBX09QRVJBTkRTX1BST0NFU1NPUihwcm9jZXNzQnl0ZU9wZXJhbmRzKSB7CisgIFRleHRUYWJsZURhdGEgKnR0ZCA9IGRhdGE7CisgIHVuc2lnbmVkIGNoYXIgYnl0ZTsKKworICBpZiAoZ2V0Qnl0ZU9wZXJhbmQoZmlsZSwgJmJ5dGUpKSB7CisgICAgdW5zaWduZWQgY2hhciBkb3RzOworCisgICAgaWYgKGdldERvdHNPcGVyYW5kKGZpbGUsICZkb3RzKSkgeworICAgICAgaWYgKCFzZXRUZXh0VGFibGVCeXRlKHR0ZCwgYnl0ZSwgZG90cykpIHJldHVybiAwOworICAgIH0KKyAgfQorCisgIHJldHVybiAxOworfQorCitzdGF0aWMgREFUQV9PUEVSQU5EU19QUk9DRVNTT1IocHJvY2Vzc0NoYXJPcGVyYW5kcykgeworICBUZXh0VGFibGVEYXRhICp0dGQgPSBkYXRhOworICB3Y2hhcl90IGNoYXJhY3RlcjsKKworICBpZiAoZ2V0Q2hhcmFjdGVyT3BlcmFuZChmaWxlLCAmY2hhcmFjdGVyKSkgeworICAgIHVuc2lnbmVkIGNoYXIgZG90czsKKworICAgIGlmIChnZXREb3RzT3BlcmFuZChmaWxlLCAmZG90cykpIHsKKyAgICAgIGlmICghc2V0VGV4dFRhYmxlQ2hhcmFjdGVyKHR0ZCwgY2hhcmFjdGVyLCBkb3RzKSkgcmV0dXJuIDA7CisgICAgfQorICB9CisKKyAgcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBEQVRBX09QRVJBTkRTX1BST0NFU1NPUihwcm9jZXNzR2x5cGhPcGVyYW5kcykgeworICBUZXh0VGFibGVEYXRhICp0dGQgPSBkYXRhOworICB3Y2hhcl90IGNoYXJhY3RlcjsKKworICBpZiAoZ2V0Q2hhcmFjdGVyT3BlcmFuZChmaWxlLCAmY2hhcmFjdGVyKSkgeworICAgIHVuc2lnbmVkIGNoYXIgZG90czsKKworICAgIGlmIChnZXREb3RzT3BlcmFuZChmaWxlLCAmZG90cykpIHsKKyAgICAgIGlmICghc2V0VGV4dFRhYmxlR2x5cGgodHRkLCBjaGFyYWN0ZXIsIGRvdHMpKSByZXR1cm4gMDsKKyAgICB9CisgIH0KKworICByZXR1cm4gMTsKK30KKworc3RhdGljIERBVEFfT1BFUkFORFNfUFJPQ0VTU09SKHByb2Nlc3NJbnB1dE9wZXJhbmRzKSB7CisgIFRleHRUYWJsZURhdGEgKnR0ZCA9IGRhdGE7CisgIHdjaGFyX3QgY2hhcmFjdGVyOworCisgIGlmIChnZXRDaGFyYWN0ZXJPcGVyYW5kKGZpbGUsICZjaGFyYWN0ZXIpKSB7CisgICAgdW5zaWduZWQgY2hhciBkb3RzOworCisgICAgaWYgKGdldERvdHNPcGVyYW5kKGZpbGUsICZkb3RzKSkgeworICAgICAgaWYgKCFzZXRUZXh0VGFibGVJbnB1dCh0dGQsIGNoYXJhY3RlciwgZG90cykpIHJldHVybiAwOworICAgIH0KKyAgfQorCisgIHJldHVybiAxOworfQorCitzdGF0aWMgREFUQV9DT05ESVRJT05fVEVTVEVSKHRlc3RHbHlwaERlZmluZWQpIHsKKyAgVGV4dFRhYmxlRGF0YSAqdHRkID0gZGF0YTsKKworICB3Y2hhcl90IGNoYXJhY3RlcjsKKyAgaWYgKCFpc0NoYXJhY3Rlck9wZXJhbmQoZmlsZSwgJmNoYXJhY3RlciwgaWRlbnRpZmllci0+Y2hhcmFjdGVycywgaWRlbnRpZmllci0+bGVuZ3RoKSkgcmV0dXJuIDA7CisKKyAgVW5pY29kZVJvd0VudHJ5ICpyb3cgPSBnZXRVbmljb2RlUm93RW50cnkodHRkLCBjaGFyYWN0ZXIsIDApOworICBpZiAoIXJvdykgcmV0dXJuIDA7CisKKyAgdW5zaWduZWQgaW50IGNlbGxOdW1iZXIgPSBVTklDT0RFX0NFTExfTlVNQkVSKGNoYXJhY3Rlcik7CisgIHJldHVybiAhIUJJVE1BU0tfVEVTVChyb3ctPmNlbGxEZWZpbmVkLCBjZWxsTnVtYmVyKTsKK30KKworc3RhdGljIGludAorcHJvY2Vzc0dseXBoVGVzdE9wZXJhbmRzIChEYXRhRmlsZSAqZmlsZSwgaW50IG5vdCwgdm9pZCAqZGF0YSkgeworICByZXR1cm4gcHJvY2Vzc0NvbmRpdGlvbk9wZXJhbmRzKGZpbGUsIHRlc3RHbHlwaERlZmluZWQsIG5vdCwgY2hhcmFjdGVyRGVzY3JpcHRpb24sIGRhdGEpOworfQorCitzdGF0aWMgREFUQV9PUEVSQU5EU19QUk9DRVNTT1IocHJvY2Vzc0lmR2x5cGhPcGVyYW5kcykgeworICByZXR1cm4gcHJvY2Vzc0dseXBoVGVzdE9wZXJhbmRzKGZpbGUsIDAsIGRhdGEpOworfQorCitzdGF0aWMgREFUQV9PUEVSQU5EU19QUk9DRVNTT1IocHJvY2Vzc0lmTm90R2x5cGhPcGVyYW5kcykgeworICByZXR1cm4gcHJvY2Vzc0dseXBoVGVzdE9wZXJhbmRzKGZpbGUsIDEsIGRhdGEpOworfQorCitzdGF0aWMgY29uc3QgY2hhciBpbnB1dERlc2NyaXB0aW9uW10gPSAiZG90IG51bWJlcihzKSI7CisKK3N0YXRpYyBEQVRBX0NPTkRJVElPTl9URVNURVIodGVzdElucHV0RGVmaW5lZCkgeworICBUZXh0VGFibGVEYXRhICp0dGQgPSBkYXRhOworCisgIEJ5dGVPcGVyYW5kIGNlbGxzOworICBpZiAoIXBhcnNlQ2VsbHNPcGVyYW5kKGZpbGUsICZjZWxscywgaWRlbnRpZmllci0+Y2hhcmFjdGVycywgaWRlbnRpZmllci0+bGVuZ3RoKSkgcmV0dXJuIDA7CisKKyAgaWYgKGNlbGxzLmxlbmd0aCAhPSAxKSB7CisgICAgcmVwb3J0RGF0YUVycm9yKGZpbGUsICJub3QgYSBzaW5nbGUgJXM6ICUuKiIgUFJJd3MsCisgICAgICAgICAgICAgICAgICAgIGlucHV0RGVzY3JpcHRpb24sIGlkZW50aWZpZXItPmxlbmd0aCwgaWRlbnRpZmllci0+Y2hhcmFjdGVycyk7CisKKyAgICByZXR1cm4gMDsKKyAgfQorCisgIGNvbnN0IFRleHRUYWJsZUhlYWRlciAqaGVhZGVyID0gZ2V0VGV4dFRhYmxlSGVhZGVyKHR0ZCk7CisgIHJldHVybiAhIUJJVE1BU0tfVEVTVChoZWFkZXItPmlucHV0Q2hhcmFjdGVyRGVmaW5lZCwgY2VsbHMuYnl0ZXNbMF0pOworfQorCitzdGF0aWMgaW50Citwcm9jZXNzSW5wdXRUZXN0T3BlcmFuZHMgKERhdGFGaWxlICpmaWxlLCBpbnQgbm90LCB2b2lkICpkYXRhKSB7CisgIHJldHVybiBwcm9jZXNzQ29uZGl0aW9uT3BlcmFuZHMoZmlsZSwgdGVzdElucHV0RGVmaW5lZCwgbm90LCBpbnB1dERlc2NyaXB0aW9uLCBkYXRhKTsKK30KKworc3RhdGljIERBVEFfT1BFUkFORFNfUFJPQ0VTU09SKHByb2Nlc3NJZklucHV0T3BlcmFuZHMpIHsKKyAgcmV0dXJuIHByb2Nlc3NJbnB1dFRlc3RPcGVyYW5kcyhmaWxlLCAwLCBkYXRhKTsKK30KKworc3RhdGljIERBVEFfT1BFUkFORFNfUFJPQ0VTU09SKHByb2Nlc3NJZk5vdElucHV0T3BlcmFuZHMpIHsKKyAgcmV0dXJuIHByb2Nlc3NJbnB1dFRlc3RPcGVyYW5kcyhmaWxlLCAxLCBkYXRhKTsKK30KKworc3RhdGljIERBVEFfT1BFUkFORFNfUFJPQ0VTU09SKHByb2Nlc3NOYXRpdmVUZXh0VGFibGVPcGVyYW5kcykgeworICBCRUdJTl9EQVRBX0RJUkVDVElWRV9UQUJMRQorICAgIERBVEFfTkVTVElOR19ESVJFQ1RJVkVTLAorICAgIERBVEFfVkFSSUFCTEVfRElSRUNUSVZFUywKKyAgICBEQVRBX0NPTkRJVElPTl9ESVJFQ1RJVkVTLAorICAgIHsubmFtZT1XU19DKCJhbGlhcyIpLCAucHJvY2Vzc29yPXByb2Nlc3NBbGlhc09wZXJhbmRzfSwKKyAgICB7Lm5hbWU9V1NfQygiYnl0ZSIpLCAucHJvY2Vzc29yPXByb2Nlc3NCeXRlT3BlcmFuZHN9LAorICAgIHsubmFtZT1XU19DKCJjaGFyIiksIC5wcm9jZXNzb3I9cHJvY2Vzc0NoYXJPcGVyYW5kc30sCisgICAgey5uYW1lPVdTX0MoImdseXBoIiksIC5wcm9jZXNzb3I9cHJvY2Vzc0dseXBoT3BlcmFuZHN9LAorICAgIHsubmFtZT1XU19DKCJpbnB1dCIpLCAucHJvY2Vzc29yPXByb2Nlc3NJbnB1dE9wZXJhbmRzfSwKKyAgICB7Lm5hbWU9V1NfQygiaWZnbHlwaCIpLCAucHJvY2Vzc29yPXByb2Nlc3NJZkdseXBoT3BlcmFuZHMsIC51bmNvbmRpdGlvbmFsPTF9LAorICAgIHsubmFtZT1XU19DKCJpZm5vdGdseXBoIiksIC5wcm9jZXNzb3I9cHJvY2Vzc0lmTm90R2x5cGhPcGVyYW5kcywgLnVuY29uZGl0aW9uYWw9MX0sCisgICAgey5uYW1lPVdTX0MoImlmaW5wdXQiKSwgLnByb2Nlc3Nvcj1wcm9jZXNzSWZJbnB1dE9wZXJhbmRzLCAudW5jb25kaXRpb25hbD0xfSwKKyAgICB7Lm5hbWU9V1NfQygiaWZub3RpbnB1dCIpLCAucHJvY2Vzc29yPXByb2Nlc3NJZk5vdElucHV0T3BlcmFuZHMsIC51bmNvbmRpdGlvbmFsPTF9LAorICBFTkRfREFUQV9ESVJFQ1RJVkVfVEFCTEUKKworICByZXR1cm4gcHJvY2Vzc0RpcmVjdGl2ZU9wZXJhbmQoZmlsZSwgJmRpcmVjdGl2ZXMsICJ0ZXh0IHRhYmxlIGRpcmVjdGl2ZSIsIGRhdGEpOworfQorCitUZXh0VGFibGVEYXRhICoKK3Byb2Nlc3NUZXh0VGFibGVTdHJlYW0gKEZJTEUgKnN0cmVhbSwgY29uc3QgY2hhciAqbmFtZSkgeworICByZXR1cm4gcHJvY2Vzc1RleHRUYWJsZUxpbmVzKHN0cmVhbSwgbmFtZSwgcHJvY2Vzc05hdGl2ZVRleHRUYWJsZU9wZXJhbmRzKTsKK30KKworVGV4dFRhYmxlICoKK2NvbXBpbGVUZXh0VGFibGUgKGNvbnN0IGNoYXIgKm5hbWUpIHsKKyAgVGV4dFRhYmxlICp0YWJsZSA9IE5VTEw7CisgIEZJTEUgKnN0cmVhbTsKKworICBpZiAoKHN0cmVhbSA9IG9wZW5EYXRhRmlsZShuYW1lLCAiciIsIDApKSkgeworICAgIFRleHRUYWJsZURhdGEgKnR0ZDsKKworICAgIGlmICgodHRkID0gcHJvY2Vzc1RleHRUYWJsZVN0cmVhbShzdHJlYW0sIG5hbWUpKSkgeworICAgICAgdGFibGUgPSBtYWtlVGV4dFRhYmxlKHR0ZCk7CisKKyAgICAgIGRlc3Ryb3lUZXh0VGFibGVEYXRhKHR0ZCk7CisgICAgfQorCisgICAgZmNsb3NlKHN0cmVhbSk7CisgIH0KKworICByZXR1cm4gdGFibGU7Cit9CmRpZmYgLS1naXQgYS9Qcm9ncmFtcy90dGJfdHJhbnNsYXRlLmMgYi9Qcm9ncmFtcy90dGJfdHJhbnNsYXRlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWMxMTllZQotLS0gL2Rldi9udWxsCisrKyBiL1Byb2dyYW1zL3R0Yl90cmFuc2xhdGUuYwpAQCAtMCwwICsxLDM3MSBAQAorLyoKKyAqIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisgKiAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisgKgorICogQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKKyNpbmNsdWRlICJwcm9sb2d1ZS5oIgorCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworI2luY2x1ZGUgImxvZy5oIgorI2luY2x1ZGUgImxvY2suaCIKKyNpbmNsdWRlICJmaWxlLmgiCisjaW5jbHVkZSAiY2hhcnNldC5oIgorI2luY2x1ZGUgInR0Yi5oIgorI2luY2x1ZGUgInR0Yl9pbnRlcm5hbC5oIgorI2luY2x1ZGUgImJybF9kb3RzLmgiCisjaW5jbHVkZSAiYnJsX3R5cGVzLmgiCisjaW5jbHVkZSAicHJlZnMuaCIKKworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaW50ZXJuYWxUZXh0VGFibGVCeXRlc1tdID0geworI2luY2x1ZGUgInR0Yi5hdXRvLmgiCit9OworCitzdGF0aWMgVGV4dFRhYmxlIGludGVybmFsVGV4dFRhYmxlID0geworICAuaGVhZGVyLmJ5dGVzID0gaW50ZXJuYWxUZXh0VGFibGVCeXRlcywKKyAgLnNpemUgPSAwCit9OworCitUZXh0VGFibGUgKnRleHRUYWJsZSA9ICZpbnRlcm5hbFRleHRUYWJsZTsKKworc3RhdGljIExvY2tEZXNjcmlwdG9yICoKK2dldFRleHRUYWJsZUxvY2sgKHZvaWQpIHsKKyAgc3RhdGljIExvY2tEZXNjcmlwdG9yICpsb2NrID0gTlVMTDsKKyAgcmV0dXJuIGdldExvY2tEZXNjcmlwdG9yKCZsb2NrLCAidGV4dC10YWJsZSIpOworfQorCit2b2lkCitsb2NrVGV4dFRhYmxlICh2b2lkKSB7CisgIG9idGFpbkV4Y2x1c2l2ZUxvY2soZ2V0VGV4dFRhYmxlTG9jaygpKTsKK30KKwordm9pZAordW5sb2NrVGV4dFRhYmxlICh2b2lkKSB7CisgIHJlbGVhc2VMb2NrKGdldFRleHRUYWJsZUxvY2soKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgY29uc3Qgdm9pZCAqCitnZXRUZXh0VGFibGVJdGVtIChUZXh0VGFibGUgKnRhYmxlLCBUZXh0VGFibGVPZmZzZXQgb2Zmc2V0KSB7CisgIHJldHVybiAmdGFibGUtPmhlYWRlci5ieXRlc1tvZmZzZXRdOworfQorCitzdGF0aWMgaW5saW5lIGNvbnN0IFVuaWNvZGVHcm91cEVudHJ5ICoKK2dldFVuaWNvZGVHcm91cEVudHJ5IChUZXh0VGFibGUgKnRhYmxlLCB3Y2hhcl90IGNoYXJhY3RlcikgeworICBUZXh0VGFibGVPZmZzZXQgb2Zmc2V0ID0gdGFibGUtPmhlYWRlci5maWVsZHMtPnVuaWNvZGVHcm91cHNbVU5JQ09ERV9HUk9VUF9OVU1CRVIoY2hhcmFjdGVyKV07CisgIGlmIChvZmZzZXQpIHJldHVybiBnZXRUZXh0VGFibGVJdGVtKHRhYmxlLCBvZmZzZXQpOworICByZXR1cm4gTlVMTDsKK30KKworc3RhdGljIGlubGluZSBjb25zdCBVbmljb2RlUGxhbmVFbnRyeSAqCitnZXRVbmljb2RlUGxhbmVFbnRyeSAoVGV4dFRhYmxlICp0YWJsZSwgd2NoYXJfdCBjaGFyYWN0ZXIpIHsKKyAgY29uc3QgVW5pY29kZUdyb3VwRW50cnkgKmdyb3VwID0gZ2V0VW5pY29kZUdyb3VwRW50cnkodGFibGUsIGNoYXJhY3Rlcik7CisKKyAgaWYgKGdyb3VwKSB7CisgICAgVGV4dFRhYmxlT2Zmc2V0IG9mZnNldCA9IGdyb3VwLT5wbGFuZXNbVU5JQ09ERV9QTEFORV9OVU1CRVIoY2hhcmFjdGVyKV07CisgICAgaWYgKG9mZnNldCkgcmV0dXJuIGdldFRleHRUYWJsZUl0ZW0odGFibGUsIG9mZnNldCk7CisgIH0KKworICByZXR1cm4gTlVMTDsKK30KKworc3RhdGljIGlubGluZSBjb25zdCBVbmljb2RlUm93RW50cnkgKgorZ2V0VW5pY29kZVJvd0VudHJ5IChUZXh0VGFibGUgKnRhYmxlLCB3Y2hhcl90IGNoYXJhY3RlcikgeworICBjb25zdCBVbmljb2RlUGxhbmVFbnRyeSAqcGxhbmUgPSBnZXRVbmljb2RlUGxhbmVFbnRyeSh0YWJsZSwgY2hhcmFjdGVyKTsKKworICBpZiAocGxhbmUpIHsKKyAgICBUZXh0VGFibGVPZmZzZXQgb2Zmc2V0ID0gcGxhbmUtPnJvd3NbVU5JQ09ERV9ST1dfTlVNQkVSKGNoYXJhY3RlcildOworICAgIGlmIChvZmZzZXQpIHJldHVybiBnZXRUZXh0VGFibGVJdGVtKHRhYmxlLCBvZmZzZXQpOworICB9CisKKyAgcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBpbmxpbmUgY29uc3QgdW5zaWduZWQgY2hhciAqCitnZXRVbmljb2RlQ2VsbCAoVGV4dFRhYmxlICp0YWJsZSwgd2NoYXJfdCBjaGFyYWN0ZXIpIHsKKyAgY29uc3QgVW5pY29kZVJvd0VudHJ5ICpyb3cgPSBnZXRVbmljb2RlUm93RW50cnkodGFibGUsIGNoYXJhY3Rlcik7CisKKyAgaWYgKHJvdykgeworICAgIHVuc2lnbmVkIGludCBjZWxsTnVtYmVyID0gVU5JQ09ERV9DRUxMX05VTUJFUihjaGFyYWN0ZXIpOworICAgIGlmIChCSVRNQVNLX1RFU1Qocm93LT5jZWxsRGVmaW5lZCwgY2VsbE51bWJlcikpIHJldHVybiAmcm93LT5jZWxsc1tjZWxsTnVtYmVyXTsKKyAgfQorCisgIHJldHVybiBOVUxMOworfQorCit2b2lkCitzZXRUcnlCYXNlQ2hhcmFjdGVyIChUZXh0VGFibGUgKnRhYmxlLCB1bnNpZ25lZCBjaGFyIHllcykgeworICB0YWJsZS0+b3B0aW9ucy50cnlCYXNlQ2hhcmFjdGVyID0geWVzOworfQorCitzdGF0aWMgaW50CitzZWFyY2hUZXh0VGFibGVBbGlhcyAoY29uc3Qgdm9pZCAqdGFyZ2V0LCBjb25zdCB2b2lkICplbGVtZW50KSB7CisgIGNvbnN0IHdjaGFyX3QgKnJlZmVyZW5jZSA9IHRhcmdldDsKKyAgY29uc3QgVGV4dFRhYmxlQWxpYXNFbnRyeSAqYWxpYXMgPSBlbGVtZW50OworCisgIGlmICgqcmVmZXJlbmNlIDwgYWxpYXMtPmZyb20pIHJldHVybiAtMTsKKyAgaWYgKCpyZWZlcmVuY2UgPiBhbGlhcy0+ZnJvbSkgcmV0dXJuIDE7CisgIHJldHVybiAwOworfQorCitjb25zdCBUZXh0VGFibGVBbGlhc0VudHJ5ICoKK2xvY2F0ZVRleHRUYWJsZUFsaWFzICh3Y2hhcl90IGNoYXJhY3RlciwgY29uc3QgVGV4dFRhYmxlQWxpYXNFbnRyeSAqYXJyYXksIHNpemVfdCBjb3VudCkgeworICBjb25zdCBUZXh0VGFibGVBbGlhc0VudHJ5ICphbGlhcyA9IGJzZWFyY2goCisgICAgJmNoYXJhY3RlciwgYXJyYXksIGNvdW50LCBzaXplb2YoKmFycmF5KSwgc2VhcmNoVGV4dFRhYmxlQWxpYXMKKyAgKTsKKworICBpZiAoYWxpYXMpIHJldHVybiBhbGlhczsKKyAgcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBjb25zdCBUZXh0VGFibGVBbGlhc0VudHJ5ICoKK2ZpbmRUZXh0VGFibGVBbGlhcyAoVGV4dFRhYmxlICp0YWJsZSwgd2NoYXJfdCBjaGFyYWN0ZXIpIHsKKyAgY29uc3QgVGV4dFRhYmxlSGVhZGVyICpoZWFkZXIgPSB0YWJsZS0+aGVhZGVyLmZpZWxkczsKKworICByZXR1cm4gbG9jYXRlVGV4dFRhYmxlQWxpYXMoY2hhcmFjdGVyLCBnZXRUZXh0VGFibGVJdGVtKHRhYmxlLCBoZWFkZXItPmFsaWFzQXJyYXkpLCBoZWFkZXItPmFsaWFzQ291bnQpOworfQorCitzdGF0aWMgaW50CitnZXREb3RzRm9yQWxpYXNlZENoYXJhY3RlciAoVGV4dFRhYmxlICp0YWJsZSwgd2NoYXJfdCAqY2hhcmFjdGVyLCB1bnNpZ25lZCBjaGFyICpkb3RzKSB7CisgIHVuc2lnbmVkIGludCBpdGVyYXRpb25MaW1pdCA9IDBYMTA7CisgIHdjaGFyX3QgY2hhcmFjdGVyRW5jb3VudGVyZWRbaXRlcmF0aW9uTGltaXRdOworICB1bnNpZ25lZCBpbnQgaXRlcmF0aW9uTnVtYmVyID0gMDsKKworICB3aGlsZSAoaXRlcmF0aW9uTnVtYmVyIDwgaXRlcmF0aW9uTGltaXQpIHsKKyAgICBpZiAod21lbWNocihjaGFyYWN0ZXJFbmNvdW50ZXJlZCwgKmNoYXJhY3RlciwgaXRlcmF0aW9uTnVtYmVyKSkgYnJlYWs7CisgICAgY2hhcmFjdGVyRW5jb3VudGVyZWRbaXRlcmF0aW9uTnVtYmVyKytdID0gKmNoYXJhY3RlcjsKKyAgICBjb25zdCBVbmljb2RlUm93RW50cnkgKnJvdyA9IGdldFVuaWNvZGVSb3dFbnRyeSh0YWJsZSwgKmNoYXJhY3Rlcik7CisKKyAgICBpZiAocm93KSB7CisgICAgICB1bnNpZ25lZCBpbnQgY2VsbE51bWJlciA9IFVOSUNPREVfQ0VMTF9OVU1CRVIoKmNoYXJhY3Rlcik7CisKKyAgICAgIGlmIChCSVRNQVNLX1RFU1Qocm93LT5jZWxsRGVmaW5lZCwgY2VsbE51bWJlcikpIHsKKyAgICAgICAgKmRvdHMgPSByb3ctPmNlbGxzW2NlbGxOdW1iZXJdOworICAgICAgICByZXR1cm4gMTsKKyAgICAgIH0KKworICAgICAgaWYgKEJJVE1BU0tfVEVTVChyb3ctPmNlbGxBbGlhc2VkLCBjZWxsTnVtYmVyKSkgeworICAgICAgICBjb25zdCBUZXh0VGFibGVBbGlhc0VudHJ5ICphbGlhcyA9IGZpbmRUZXh0VGFibGVBbGlhcyh0YWJsZSwgKmNoYXJhY3Rlcik7CisKKyAgICAgICAgaWYgKGFsaWFzKSB7CisgICAgICAgICAgKmNoYXJhY3RlciA9IGFsaWFzLT50bzsKKyAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgfQorICAgIH0KKworICAgIGJyZWFrOworICB9CisKKyAgcmV0dXJuIDA7Cit9CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgVGV4dFRhYmxlICpjb25zdCB0YWJsZTsKKyAgdW5zaWduZWQgY2hhciBkb3RzOworfSBTZXRCcmFpbGxlUmVwcmVzZW50YXRpb25EYXRhOworCitzdGF0aWMgaW50CitzZXRCcmFpbGxlUmVwcmVzZW50YXRpb24gKHdjaGFyX3QgY2hhcmFjdGVyLCB2b2lkICpkYXRhKSB7CisgIFNldEJyYWlsbGVSZXByZXNlbnRhdGlvbkRhdGEgKnNiciA9IGRhdGE7CisgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmNlbGwgPSBnZXRVbmljb2RlQ2VsbChzYnItPnRhYmxlLCBjaGFyYWN0ZXIpOworCisgIGlmIChjZWxsKSB7CisgICAgc2JyLT5kb3RzID0gKmNlbGw7CisgICAgcmV0dXJuIDE7CisgIH0KKworICByZXR1cm4gMDsKK30KKwordW5zaWduZWQgY2hhcgorY29udmVydENoYXJhY3RlclRvRG90cyAoVGV4dFRhYmxlICp0YWJsZSwgd2NoYXJfdCBjaGFyYWN0ZXIpIHsKKyAgdWludDMyX3Qgcm93ID0gY2hhcmFjdGVyICYgflVOSUNPREVfQ0VMTF9NQVNLOworCisgIHN3aXRjaCAocm93KSB7CisjaWYgV0NIQVJfTUFYID49IFVJTlQxNl9NQVgKKyAgICBjYXNlIDBYRjAwMDogeworICAgICAgd2ludF90IHdjID0gY29udmVydENoYXJUb1djaGFyKGNoYXJhY3RlciAmIFVOSUNPREVfQ0VMTF9NQVNLKTsKKyAgICAgIGlmICh3YyA9PSBXRU9GKSBicmVhazsKKyAgICAgIGNoYXJhY3RlciA9IHdjOworICAgIH0KKyAgICAvKiBmYWxsIHRocm91Z2ggKi8KKyNlbmRpZiAvKiBXQ0hBUl9NQVggPj0gVUlOVDE2X01BWCAqLworCisgICAgZGVmYXVsdDogeworICAgICAgeworICAgICAgICB1bnNpZ25lZCBjaGFyIGRvdHM7CisgICAgICAgIGlmIChnZXREb3RzRm9yQWxpYXNlZENoYXJhY3Rlcih0YWJsZSwgJmNoYXJhY3RlciwgJmRvdHMpKSByZXR1cm4gZG90czsKKyAgICAgIH0KKworICAgICAgaWYgKGNoYXJhY3RlciA9PSBVTklDT0RFX1JFUExBQ0VNRU5UX0NIQVJBQ1RFUikgYnJlYWs7CisKKyAgICAgIGlmICh0YWJsZS0+b3B0aW9ucy50cnlCYXNlQ2hhcmFjdGVyKSB7CisgICAgICAgIFNldEJyYWlsbGVSZXByZXNlbnRhdGlvbkRhdGEgc2JyID0geworICAgICAgICAgIC50YWJsZSA9IHRhYmxlLAorICAgICAgICAgIC5kb3RzID0gMAorICAgICAgICB9OworCisgICAgICAgIGlmIChoYW5kbGVCZXN0Q2hhcmFjdGVyKGNoYXJhY3Rlciwgc2V0QnJhaWxsZVJlcHJlc2VudGF0aW9uLCAmc2JyKSkgeworICAgICAgICAgIHJldHVybiBzYnIuZG90czsKKyAgICAgICAgfQorICAgICAgfQorCisgICAgICBicmVhazsKKyAgICB9CisgIH0KKworICBpZiAocm93ID09IFVOSUNPREVfQlJBSUxMRV9ST1cpIHsKKyAgICByZXR1cm4gY2hhcmFjdGVyICYgVU5JQ09ERV9DRUxMX01BU0s7CisgIH0KKworICB7CisgICAgY29uc3QgdW5zaWduZWQgY2hhciAqY2VsbCA9IHRhYmxlLT5jZWxscy5yZXBsYWNlbWVudENoYXJhY3RlcjsKKyAgICBpZiAoY2VsbCkgcmV0dXJuICpjZWxsOworICB9CisKKyAgcmV0dXJuIEJSTF9ET1RfMSB8IEJSTF9ET1RfMiB8IEJSTF9ET1RfMyB8IEJSTF9ET1RfNCB8IEJSTF9ET1RfNSB8IEJSTF9ET1RfNiB8IEJSTF9ET1RfNyB8IEJSTF9ET1RfODsKK30KKword2NoYXJfdAorY29udmVydERvdHNUb0NoYXJhY3RlciAoVGV4dFRhYmxlICp0YWJsZSwgdW5zaWduZWQgY2hhciBkb3RzKSB7CisgIGNvbnN0IFRleHRUYWJsZUhlYWRlciAqaGVhZGVyID0gdGFibGUtPmhlYWRlci5maWVsZHM7CisgIGlmIChCSVRNQVNLX1RFU1QoaGVhZGVyLT5pbnB1dENoYXJhY3RlckRlZmluZWQsIGRvdHMpKSByZXR1cm4gaGVhZGVyLT5pbnB1dENoYXJhY3RlcnNbZG90c107CisgIHJldHVybiBVTklDT0RFX1JFUExBQ0VNRU5UX0NIQVJBQ1RFUjsKK30KKword2NoYXJfdAorY29udmVydElucHV0VG9DaGFyYWN0ZXIgKHVuc2lnbmVkIGNoYXIgZG90cykgeworICBzd2l0Y2ggKHByZWZzLmJyYWlsbGVUeXBpbmdNb2RlKSB7CisgICAgY2FzZSBCUkxfVFlQSU5HX1RFWFQ6CisgICAgICByZXR1cm4gY29udmVydERvdHNUb0NoYXJhY3Rlcih0ZXh0VGFibGUsIGRvdHMpOworCisgICAgZGVmYXVsdDoKKyAgICAgIGxvZ01lc3NhZ2UoTE9HX1dBUk5JTkcsICJ1bmtub3duIGJyYWlsbGUgdHlwaW5nIG1vZGU6ICV1IiwgcHJlZnMuYnJhaWxsZVR5cGluZ01vZGUpOworICAgICAgLyogZmFsbCB0aHJvdWdoICovCisgICAgY2FzZSBCUkxfVFlQSU5HX0RPVFM6CisgICAgICByZXR1cm4gVU5JQ09ERV9CUkFJTExFX1JPVyB8IGRvdHM7CisgIH0KK30KKworaW50CityZXBsYWNlVGV4dFRhYmxlIChjb25zdCBjaGFyICpkaXJlY3RvcnksIGNvbnN0IGNoYXIgKm5hbWUpIHsKKyAgVGV4dFRhYmxlICpuZXdUYWJsZSA9IE5VTEw7CisKKyAgaWYgKCpuYW1lKSB7CisgICAgY2hhciAqcGF0aDsKKworICAgIGlmICgocGF0aCA9IG1ha2VUZXh0VGFibGVQYXRoKGRpcmVjdG9yeSwgbmFtZSkpKSB7CisgICAgICBsb2dNZXNzYWdlKExPR19ERUJVRywgImNvbXBpbGluZyB0ZXh0IHRhYmxlOiAlcyIsIHBhdGgpOworCisgICAgICBpZiAoIShuZXdUYWJsZSA9IGNvbXBpbGVUZXh0VGFibGUocGF0aCkpKSB7CisgICAgICAgIGxvZ01lc3NhZ2UoTE9HX0VSUiwgIiVzOiAlcyIsIGdldHRleHQoImNhbm5vdCBjb21waWxlIHRleHQgdGFibGUiKSwgcGF0aCk7CisgICAgICB9CisKKyAgICAgIGZyZWUocGF0aCk7CisgICAgfQorICB9IGVsc2UgeworICAgIG5ld1RhYmxlID0gJmludGVybmFsVGV4dFRhYmxlOworICB9CisKKyAgaWYgKG5ld1RhYmxlKSB7CisgICAgVGV4dFRhYmxlICpvbGRUYWJsZSA9IHRleHRUYWJsZTsKKworICAgIGxvY2tUZXh0VGFibGUoKTsKKyAgICAgIHRleHRUYWJsZSA9IG5ld1RhYmxlOworICAgIHVubG9ja1RleHRUYWJsZSgpOworCisgICAgZGVzdHJveVRleHRUYWJsZShvbGRUYWJsZSk7CisgICAgcmV0dXJuIDE7CisgIH0KKworICBsb2dNZXNzYWdlKExPR19FUlIsICIlczogJXMiLCBnZXR0ZXh0KCJjYW5ub3QgbG9hZCB0ZXh0IHRhYmxlIiksIG5hbWUpOworICByZXR1cm4gMDsKK30KKworc2l6ZV90CitnZXRUZXh0VGFibGVSb3dzTWFzayAoVGV4dFRhYmxlICp0YWJsZSwgdWludDhfdCAqbWFzaywgc2l6ZV90IHNpemUpIHsKKyAgc2l6ZV90IHJlc3VsdCA9IDA7CisgIG1lbXNldChtYXNrLCAwLCBzaXplKTsKKworICBmb3IgKHVuc2lnbmVkIGludCBncm91cE51bWJlcj0wOyBncm91cE51bWJlcjxVTklDT0RFX0dST1VQX0NPVU5UOyBncm91cE51bWJlcis9MSkgeworICAgIFRleHRUYWJsZU9mZnNldCBncm91cE9mZnNldCA9IHRhYmxlLT5oZWFkZXIuZmllbGRzLT51bmljb2RlR3JvdXBzW2dyb3VwTnVtYmVyXTsKKworICAgIGlmIChncm91cE9mZnNldCkgeworICAgICAgY29uc3QgVW5pY29kZUdyb3VwRW50cnkgKmdyb3VwID0gZ2V0VGV4dFRhYmxlSXRlbSh0YWJsZSwgZ3JvdXBPZmZzZXQpOworCisgICAgICBmb3IgKHVuc2lnbmVkIGludCBwbGFuZU51bWJlcj0wOyBwbGFuZU51bWJlcjxVTklDT0RFX1BMQU5FU19QRVJfR1JPVVA7IHBsYW5lTnVtYmVyKz0xKSB7CisgICAgICAgIFRleHRUYWJsZU9mZnNldCBwbGFuZU9mZnNldCA9IGdyb3VwLT5wbGFuZXNbcGxhbmVOdW1iZXJdOworCisgICAgICAgIGlmIChwbGFuZU9mZnNldCkgeworICAgICAgICAgIGNvbnN0IFVuaWNvZGVQbGFuZUVudHJ5ICpwbGFuZSA9IGdldFRleHRUYWJsZUl0ZW0odGFibGUsIHBsYW5lT2Zmc2V0KTsKKworICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IHJvd051bWJlcj0wOyByb3dOdW1iZXI8VU5JQ09ERV9ST1dTX1BFUl9QTEFORTsgcm93TnVtYmVyKz0xKSB7CisgICAgICAgICAgICBUZXh0VGFibGVPZmZzZXQgcm93T2Zmc2V0ID0gcGxhbmUtPnJvd3Nbcm93TnVtYmVyXTsKKworICAgICAgICAgICAgaWYgKHJvd09mZnNldCkgeworICAgICAgICAgICAgICB1aW50MzJfdCByb3cgPSBVTklDT0RFX0NIQVJBQ1RFUihncm91cE51bWJlciwgcGxhbmVOdW1iZXIsIHJvd051bWJlciwgMCkgPj4gVU5JQ09ERV9ST1dfU0hJRlQ7CisgICAgICAgICAgICAgIHVpbnQzMl90IGluZGV4ID0gcm93IC8gODsKKyAgICAgICAgICAgICAgaWYgKGluZGV4ID49IHNpemUpIGdvdG8gZG9uZTsKKyAgICAgICAgICAgICAgbWFza1tpbmRleF0gfD0gMSA8PCAocm93ICUgOCk7CisgICAgICAgICAgICAgIHJlc3VsdCA9IGluZGV4ICsgMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9CisgIH0KKworZG9uZToKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworaW50CitnZXRUZXh0VGFibGVSb3dDZWxscyAoVGV4dFRhYmxlICp0YWJsZSwgdWludDMyX3Qgcm93SW5kZXgsIHVpbnQ4X3QgKmNlbGxzLCB1aW50OF90ICpkZWZpbmVkKSB7CisgIHdjaGFyX3QgY2hhcmFjdGVyID0gcm93SW5kZXggPDwgVU5JQ09ERV9ST1dfU0hJRlQ7CisgIGNvbnN0IFVuaWNvZGVSb3dFbnRyeSAqcm93ID0gZ2V0VW5pY29kZVJvd0VudHJ5KHRhYmxlLCBjaGFyYWN0ZXIpOworICBpZiAoIXJvdykgcmV0dXJuIDA7CisKKyAgaW50IG1hc2tJbmRleCA9IC0xOworICB1aW50OF90IG1hc2tCaXQgPSAwOworCisgIGZvciAodW5zaWduZWQgaW50IGNlbGxOdW1iZXI9MDsgY2VsbE51bWJlcjxVTklDT0RFX0NFTExTX1BFUl9ST1c7IGNlbGxOdW1iZXIrPTEpIHsKKyAgICB1bnNpZ25lZCBjaGFyICpjZWxsID0gJmNlbGxzW2NlbGxOdW1iZXJdOworICAgICpjZWxsID0gMDsKKworICAgIGlmICghbWFza0JpdCkgeworICAgICAgZGVmaW5lZFsrK21hc2tJbmRleF0gPSAwOworICAgICAgbWFza0JpdCA9IDE7CisgICAgfQorCisgICAgaWYgKEJJVE1BU0tfVEVTVChyb3ctPmNlbGxEZWZpbmVkLCBjZWxsTnVtYmVyKSkgeworICAgICAgKmNlbGwgPSByb3ctPmNlbGxzW2NlbGxOdW1iZXJdOworICAgICAgZGVmaW5lZFttYXNrSW5kZXhdIHw9IG1hc2tCaXQ7CisgICAgfSBlbHNlIGlmIChCSVRNQVNLX1RFU1Qocm93LT5jZWxsQWxpYXNlZCwgY2VsbE51bWJlcikpIHsKKyAgICAgIHdjaGFyX3Qgd2MgPSBjaGFyYWN0ZXIgfCAoY2VsbE51bWJlciA8PCBVTklDT0RFX0NFTExfU0hJRlQpOworICAgICAgdW5zaWduZWQgY2hhciBkb3RzOworCisgICAgICBpZiAoZ2V0RG90c0ZvckFsaWFzZWRDaGFyYWN0ZXIodGFibGUsICZ3YywgJmRvdHMpKSB7CisgICAgICAgICpjZWxsID0gZG90czsKKyAgICAgICAgZGVmaW5lZFttYXNrSW5kZXhdIHw9IG1hc2tCaXQ7CisgICAgICB9CisgICAgfQorCisgICAgbWFza0JpdCA8PD0gMTsKKyAgfQorCisgIHJldHVybiAxOworfQpkaWZmIC0tZ2l0IGEvUHJvZ3JhbXMvdHVuZS5jIGIvUHJvZ3JhbXMvdHVuZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhmMDY5Y2EKLS0tIC9kZXYvbnVsbAorKysgYi9Qcm9ncmFtcy90dW5lLmMKQEAgLTAsMCArMSw1MjggQEAKKy8qCisgKiBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorICogICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorICoKKyAqIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorICoKKyAqIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyAqLworCisjaW5jbHVkZSAicHJvbG9ndWUuaCIKKworI2luY2x1ZGUgPHN0cmluZy5oPgorCisjaW5jbHVkZSAibG9nLmgiCisjaW5jbHVkZSAicGFyYW1ldGVycy5oIgorI2luY2x1ZGUgInRocmVhZC5oIgorI2luY2x1ZGUgImFzeW5jX2hhbmRsZS5oIgorI2luY2x1ZGUgImFzeW5jX2FsYXJtLmgiCisjaW5jbHVkZSAiYXN5bmNfZXZlbnQuaCIKKyNpbmNsdWRlICJhc3luY193YWl0LmgiCisjaW5jbHVkZSAicHJvZ3JhbS5oIgorI2luY2x1ZGUgInR1bmUuaCIKKyNpbmNsdWRlICJub3Rlcy5oIgorCitzdGF0aWMgaW50IHR1bmVJbml0aWFsaXplZCA9IDA7CitzdGF0aWMgQXN5bmNIYW5kbGUgdHVuZURldmljZUNsb3NlVGltZXIgPSBOVUxMOworc3RhdGljIGludCBvcGVuRXJyb3JMZXZlbCA9IExPR19FUlI7CisKK3N0YXRpYyBjb25zdCBOb3RlTWV0aG9kcyAqbm90ZU1ldGhvZHMgPSBOVUxMOworc3RhdGljIE5vdGVEZXZpY2UgKm5vdGVEZXZpY2UgPSBOVUxMOworCitzdGF0aWMgaW50CitmbHVzaE5vdGVEZXZpY2UgKHZvaWQpIHsKKyAgaWYgKCFub3RlRGV2aWNlKSByZXR1cm4gMTsKKyAgcmV0dXJuIG5vdGVNZXRob2RzLT5mbHVzaChub3RlRGV2aWNlKTsKK30KKworc3RhdGljIHZvaWQKK2Nsb3NlVHVuZURldmljZSAodm9pZCkgeworICBpZiAodHVuZURldmljZUNsb3NlVGltZXIpIHsKKyAgICBhc3luY0NhbmNlbFJlcXVlc3QodHVuZURldmljZUNsb3NlVGltZXIpOworICAgIHR1bmVEZXZpY2VDbG9zZVRpbWVyID0gTlVMTDsKKyAgfQorCisgIGlmIChub3RlRGV2aWNlKSB7CisgICAgbm90ZU1ldGhvZHMtPmRlc3RydWN0KG5vdGVEZXZpY2UpOworICAgIG5vdGVEZXZpY2UgPSBOVUxMOworICB9Cit9CisKK0FTWU5DX0FMQVJNX0NBTExCQUNLKGhhbmRsZVR1bmVEZXZpY2VDbG9zZVRpbWVvdXQpIHsKKyAgaWYgKHR1bmVEZXZpY2VDbG9zZVRpbWVyKSB7CisgICAgYXN5bmNEaXNjYXJkSGFuZGxlKHR1bmVEZXZpY2VDbG9zZVRpbWVyKTsKKyAgICB0dW5lRGV2aWNlQ2xvc2VUaW1lciA9IE5VTEw7CisgIH0KKworICBjbG9zZVR1bmVEZXZpY2UoKTsKK30KKworc3RhdGljIGludAorb3BlblR1bmVEZXZpY2UgKHZvaWQpIHsKKyAgY29uc3QgaW50IHRpbWVvdXQgPSBUVU5FX0RFVklDRV9DTE9TRV9ERUxBWTsKKworICBpZiAobm90ZURldmljZSkgeworICAgIGFzeW5jUmVzZXRBbGFybUluKHR1bmVEZXZpY2VDbG9zZVRpbWVyLCB0aW1lb3V0KTsKKyAgICByZXR1cm4gMTsKKyAgfQorCisgIGlmIChub3RlTWV0aG9kcykgeworICAgIGlmICgobm90ZURldmljZSA9IG5vdGVNZXRob2RzLT5jb25zdHJ1Y3Qob3BlbkVycm9yTGV2ZWwpKSAhPSBOVUxMKSB7CisgICAgICBhc3luY05ld1JlbGF0aXZlQWxhcm0oJnR1bmVEZXZpY2VDbG9zZVRpbWVyLCB0aW1lb3V0LCBoYW5kbGVUdW5lRGV2aWNlQ2xvc2VUaW1lb3V0LCBOVUxMKTsKKyAgICAgIHJldHVybiAxOworICAgIH0KKyAgfQorCisgIHJldHVybiAwOworfQorCitzdGF0aWMgY29uc3QgTm90ZUVsZW1lbnQgKmN1cnJlbnRseVBsYXlpbmdOb3RlcyA9IE5VTEw7CitzdGF0aWMgY29uc3QgVG9uZUVsZW1lbnQgKmN1cnJlbnRseVBsYXlpbmdUb25lcyA9IE5VTEw7CisKK3R5cGVkZWYgdW5zaWduZWQgY2hhciBUdW5lU3luY2hyb25pemF0aW9uTW9uaXRvcjsKKwordHlwZWRlZiBlbnVtIHsKKyAgVFVORV9SRVFfU0VUX0RFVklDRSwKKyAgVFVORV9SRVFfUExBWV9OT1RFUywKKyAgVFVORV9SRVFfUExBWV9UT05FUywKKyAgVFVORV9SRVFfV0FJVCwKKyAgVFVORV9SRVFfU1lOQ0hST05JWkUKK30gVHVuZVJlcXVlc3RUeXBlOworCit0eXBlZGVmIHN0cnVjdCB7CisgIFR1bmVSZXF1ZXN0VHlwZSB0eXBlOworCisgIHVuaW9uIHsKKyAgICBzdHJ1Y3QgeworICAgICAgY29uc3QgTm90ZU1ldGhvZHMgKm1ldGhvZHM7CisgICAgfSBzZXREZXZpY2U7CisKKyAgICBzdHJ1Y3QgeworICAgICAgY29uc3QgTm90ZUVsZW1lbnQgKnR1bmU7CisgICAgfSBwbGF5Tm90ZXM7CisKKyAgICBzdHJ1Y3QgeworICAgICAgY29uc3QgVG9uZUVsZW1lbnQgKnR1bmU7CisgICAgfSBwbGF5VG9uZXM7CisKKyAgICBzdHJ1Y3QgeworICAgICAgaW50IHRpbWU7CisgICAgfSB3YWl0OworCisgICAgc3RydWN0IHsKKyAgICAgIFR1bmVTeW5jaHJvbml6YXRpb25Nb25pdG9yICptb25pdG9yOworICAgIH0gc3luY2hyb25pemU7CisgIH0gcGFyYW1ldGVyczsKK30gVHVuZVJlcXVlc3Q7CisKK3N0YXRpYyB2b2lkCitoYW5kbGVUdW5lUmVxdWVzdF9zZXREZXZpY2UgKGNvbnN0IE5vdGVNZXRob2RzICptZXRob2RzKSB7CisgIGlmIChtZXRob2RzICE9IG5vdGVNZXRob2RzKSB7CisgICAgY2xvc2VUdW5lRGV2aWNlKCk7CisgICAgbm90ZU1ldGhvZHMgPSBtZXRob2RzOworICB9Cit9CisKK3N0YXRpYyB2b2lkCitoYW5kbGVUdW5lUmVxdWVzdF9wbGF5Tm90ZXMgKGNvbnN0IE5vdGVFbGVtZW50ICp0dW5lKSB7CisgIHdoaWxlICh0dW5lLT5kdXJhdGlvbikgeworICAgIGlmICghb3BlblR1bmVEZXZpY2UoKSkgcmV0dXJuOworICAgIGlmICghbm90ZU1ldGhvZHMtPm5vdGUobm90ZURldmljZSwgdHVuZS0+ZHVyYXRpb24sIHR1bmUtPm5vdGUpKSByZXR1cm47CisgICAgdHVuZSArPSAxOworICB9CisKKyAgZmx1c2hOb3RlRGV2aWNlKCk7Cit9CisKK3N0YXRpYyB2b2lkCitoYW5kbGVUdW5lUmVxdWVzdF9wbGF5VG9uZXMgKGNvbnN0IFRvbmVFbGVtZW50ICp0dW5lKSB7CisgIHdoaWxlICh0dW5lLT5kdXJhdGlvbikgeworICAgIGlmICghb3BlblR1bmVEZXZpY2UoKSkgcmV0dXJuOworICAgIGlmICghbm90ZU1ldGhvZHMtPnRvbmUobm90ZURldmljZSwgdHVuZS0+ZHVyYXRpb24sIHR1bmUtPmZyZXF1ZW5jeSkpIHJldHVybjsKKyAgICB0dW5lICs9IDE7CisgIH0KKworICBmbHVzaE5vdGVEZXZpY2UoKTsKK30KKworc3RhdGljIHZvaWQKK2hhbmRsZVR1bmVSZXF1ZXN0X3dhaXQgKGludCB0aW1lKSB7CisgIGFzeW5jV2FpdCh0aW1lKTsKK30KKworc3RhdGljIHZvaWQKK2hhbmRsZVR1bmVSZXF1ZXN0X3N5bmNocm9uaXplIChUdW5lU3luY2hyb25pemF0aW9uTW9uaXRvciAqbW9uaXRvcikgeworICAqbW9uaXRvciA9IDE7Cit9CisKK3N0YXRpYyB2b2lkCitoYW5kbGVUdW5lUmVxdWVzdCAoVHVuZVJlcXVlc3QgKnJlcSkgeworICBpZiAocmVxKSB7CisgICAgc3dpdGNoIChyZXEtPnR5cGUpIHsKKyAgICAgIGNhc2UgVFVORV9SRVFfU0VUX0RFVklDRToKKyAgICAgICAgaGFuZGxlVHVuZVJlcXVlc3Rfc2V0RGV2aWNlKHJlcS0+cGFyYW1ldGVycy5zZXREZXZpY2UubWV0aG9kcyk7CisgICAgICAgIGJyZWFrOworCisgICAgICBjYXNlIFRVTkVfUkVRX1BMQVlfTk9URVM6IHsKKyAgICAgICAgY29uc3QgTm90ZUVsZW1lbnQgKnR1bmUgPSByZXEtPnBhcmFtZXRlcnMucGxheU5vdGVzLnR1bmU7CisKKyAgICAgICAgY3VycmVudGx5UGxheWluZ05vdGVzID0gdHVuZTsKKyAgICAgICAgaGFuZGxlVHVuZVJlcXVlc3RfcGxheU5vdGVzKHR1bmUpOworICAgICAgICBjdXJyZW50bHlQbGF5aW5nTm90ZXMgPSBOVUxMOworCisgICAgICAgIGJyZWFrOworICAgICAgfQorCisgICAgICBjYXNlIFRVTkVfUkVRX1BMQVlfVE9ORVM6IHsKKyAgICAgICAgY29uc3QgVG9uZUVsZW1lbnQgKnR1bmUgPSByZXEtPnBhcmFtZXRlcnMucGxheVRvbmVzLnR1bmU7CisKKyAgICAgICAgY3VycmVudGx5UGxheWluZ1RvbmVzID0gdHVuZTsKKyAgICAgICAgaGFuZGxlVHVuZVJlcXVlc3RfcGxheVRvbmVzKHR1bmUpOworICAgICAgICBjdXJyZW50bHlQbGF5aW5nVG9uZXMgPSBOVUxMOworCisgICAgICAgIGJyZWFrOworICAgICAgfQorCisgICAgICBjYXNlIFRVTkVfUkVRX1dBSVQ6CisgICAgICAgIGhhbmRsZVR1bmVSZXF1ZXN0X3dhaXQocmVxLT5wYXJhbWV0ZXJzLndhaXQudGltZSk7CisgICAgICAgIGJyZWFrOworCisgICAgICBjYXNlIFRVTkVfUkVRX1NZTkNIUk9OSVpFOgorICAgICAgICBoYW5kbGVUdW5lUmVxdWVzdF9zeW5jaHJvbml6ZShyZXEtPnBhcmFtZXRlcnMuc3luY2hyb25pemUubW9uaXRvcik7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGZyZWUocmVxKTsKKyAgfSBlbHNlIHsKKyAgICBjbG9zZVR1bmVEZXZpY2UoKTsKKyAgfQorfQorCisjaWZkZWYgR09UX1BUSFJFQURTCit0eXBlZGVmIGVudW0geworICBUVU5FX1RIUkVBRF9OT05FLAorICBUVU5FX1RIUkVBRF9TVEFSVElORywKKyAgVFVORV9USFJFQURfRkFJTEVELAorCisgIFRVTkVfVEhSRUFEX1JVTk5JTkcsCisgIFRVTkVfVEhSRUFEX1NUT1BQSU5HLAorICBUVU5FX1RIUkVBRF9TVE9QUEVECit9IFR1bmVUaHJlYWRTdGF0ZTsKKworc3RhdGljIFR1bmVUaHJlYWRTdGF0ZSB0dW5lVGhyZWFkU3RhdGUgPSBUVU5FX1RIUkVBRF9OT05FOworc3RhdGljIHB0aHJlYWRfdCB0dW5lVGhyZWFkSWRlbnRpZmllcjsKK3N0YXRpYyBBc3luY0V2ZW50ICp0dW5lUmVxdWVzdEV2ZW50ID0gTlVMTDsKK3N0YXRpYyBBc3luY0V2ZW50ICp0dW5lTWVzc2FnZUV2ZW50ID0gTlVMTDsKKworc3RhdGljIHZvaWQKK3NldFR1bmVUaHJlYWRTdGF0ZSAoVHVuZVRocmVhZFN0YXRlIG5ld1N0YXRlKSB7CisgIFR1bmVUaHJlYWRTdGF0ZSBvbGRTdGF0ZSA9IHR1bmVUaHJlYWRTdGF0ZTsKKworICBsb2dNZXNzYWdlKExPR19ERUJVRywgInR1bmUgdGhyZWFkIHN0YXRlIGNoYW5nZTogJWQgLT4gJWQiLCBvbGRTdGF0ZSwgbmV3U3RhdGUpOworICB0dW5lVGhyZWFkU3RhdGUgPSBuZXdTdGF0ZTsKK30KKworQVNZTkNfQ09ORElUSU9OX1RFU1RFUih0ZXN0VHVuZVRocmVhZFN0YXJ0ZWQpIHsKKyAgcmV0dXJuIHR1bmVUaHJlYWRTdGF0ZSAhPSBUVU5FX1RIUkVBRF9TVEFSVElORzsKK30KKworQVNZTkNfQ09ORElUSU9OX1RFU1RFUih0ZXN0VHVuZVRocmVhZFN0b3BwaW5nKSB7CisgIHJldHVybiB0dW5lVGhyZWFkU3RhdGUgPT0gVFVORV9USFJFQURfU1RPUFBJTkc7Cit9CisKK0FTWU5DX0NPTkRJVElPTl9URVNURVIodGVzdFR1bmVUaHJlYWRTdG9wcGVkKSB7CisgIHJldHVybiB0dW5lVGhyZWFkU3RhdGUgPT0gVFVORV9USFJFQURfU1RPUFBFRDsKK30KKwordHlwZWRlZiBlbnVtIHsKKyAgVFVORV9NU0dfU0VUX1NUQVRFCit9IFR1bmVNZXNzYWdlVHlwZTsKKwordHlwZWRlZiBzdHJ1Y3QgeworICBUdW5lTWVzc2FnZVR5cGUgdHlwZTsKKworICB1bmlvbiB7CisgICAgc3RydWN0IHsKKyAgICAgIFR1bmVUaHJlYWRTdGF0ZSBzdGF0ZTsKKyAgICB9IHNldFN0YXRlOworICB9IHBhcmFtZXRlcnM7Cit9IFR1bmVNZXNzYWdlOworCitzdGF0aWMgdm9pZAoraGFuZGxlVHVuZU1lc3NhZ2UgKFR1bmVNZXNzYWdlICptc2cpIHsKKyAgc3dpdGNoIChtc2ctPnR5cGUpIHsKKyAgICBjYXNlIFRVTkVfTVNHX1NFVF9TVEFURToKKyAgICAgIHNldFR1bmVUaHJlYWRTdGF0ZShtc2ctPnBhcmFtZXRlcnMuc2V0U3RhdGUuc3RhdGUpOworICAgICAgYnJlYWs7CisgIH0KKworICBmcmVlKG1zZyk7Cit9CisKK0FTWU5DX0VWRU5UX0NBTExCQUNLKGhhbmRsZVR1bmVNZXNzYWdlRXZlbnQpIHsKKyAgVHVuZU1lc3NhZ2UgKm1zZyA9IHBhcmFtZXRlcnMtPnNpZ25hbERhdGE7CisKKyAgaWYgKG1zZykgaGFuZGxlVHVuZU1lc3NhZ2UobXNnKTsKK30KKworc3RhdGljIGludAorc2VuZFR1bmVNZXNzYWdlIChUdW5lTWVzc2FnZSAqbXNnKSB7CisgIHJldHVybiBhc3luY1NpZ25hbEV2ZW50KHR1bmVNZXNzYWdlRXZlbnQsIG1zZyk7Cit9CisKK3N0YXRpYyBUdW5lTWVzc2FnZSAqCituZXdUdW5lTWVzc2FnZSAoVHVuZU1lc3NhZ2VUeXBlIHR5cGUpIHsKKyAgVHVuZU1lc3NhZ2UgKm1zZzsKKworICBpZiAoKG1zZyA9IG1hbGxvYyhzaXplb2YoKm1zZykpKSkgeworICAgIG1lbXNldChtc2csIDAsIHNpemVvZigqbXNnKSk7CisgICAgbXNnLT50eXBlID0gdHlwZTsKKyAgICByZXR1cm4gbXNnOworICB9IGVsc2UgeworICAgIGxvZ01hbGxvY0Vycm9yKCk7CisgIH0KKworICByZXR1cm4gTlVMTDsKK30KKworc3RhdGljIHZvaWQKK3NlbmRUdW5lVGhyZWFkU3RhdGUgKFR1bmVUaHJlYWRTdGF0ZSBzdGF0ZSkgeworICBUdW5lTWVzc2FnZSAqbXNnOworCisgIGlmICgobXNnID0gbmV3VHVuZU1lc3NhZ2UoVFVORV9NU0dfU0VUX1NUQVRFKSkpIHsKKyAgICBtc2ctPnBhcmFtZXRlcnMuc2V0U3RhdGUuc3RhdGUgPSBzdGF0ZTsKKyAgICBpZiAoIXNlbmRUdW5lTWVzc2FnZShtc2cpKSBmcmVlKG1zZyk7CisgIH0KK30KKworc3RhdGljIHZvaWQKK2ZpbmlzaFR1bmVSZXF1ZXN0X3N0b3AgKHZvaWQpIHsKKyAgc2V0VHVuZVRocmVhZFN0YXRlKFRVTkVfVEhSRUFEX1NUT1BQSU5HKTsKK30KKworc3RhdGljIHZvaWQKK2ZpbmlzaFR1bmVSZXF1ZXN0X3N5bmNocm9uaXplICh2b2lkKSB7CisgIHNlbmRUdW5lTWVzc2FnZShOVUxMKTsKK30KKworQVNZTkNfRVZFTlRfQ0FMTEJBQ0soaGFuZGxlVHVuZVJlcXVlc3RFdmVudCkgeworICBUdW5lUmVxdWVzdCAqcmVxID0gcGFyYW1ldGVycy0+c2lnbmFsRGF0YTsKKyAgdm9pZCAoKmZpbmlzaCkgKHZvaWQpID0gTlVMTDsKKworICBpZiAocmVxKSB7CisgICAgc3dpdGNoIChyZXEtPnR5cGUpIHsKKyAgICAgIGNhc2UgVFVORV9SRVFfU1lOQ0hST05JWkU6CisgICAgICAgIGZpbmlzaCA9IGZpbmlzaFR1bmVSZXF1ZXN0X3N5bmNocm9uaXplOworICAgICAgICBicmVhazsKKworICAgICAgZGVmYXVsdDoKKyAgICAgICAgYnJlYWs7CisgICAgfQorICB9IGVsc2UgeworICAgIGZpbmlzaCA9IGZpbmlzaFR1bmVSZXF1ZXN0X3N0b3A7CisgIH0KKworICBoYW5kbGVUdW5lUmVxdWVzdChyZXEpOworICBpZiAoZmluaXNoKSBmaW5pc2goKTsKK30KKworVEhSRUFEX0ZVTkNUSU9OKHJ1blR1bmVUaHJlYWQpIHsKKyAgaWYgKCh0dW5lUmVxdWVzdEV2ZW50ID0gYXN5bmNOZXdFdmVudChoYW5kbGVUdW5lUmVxdWVzdEV2ZW50LCBOVUxMKSkpIHsKKyAgICBzZW5kVHVuZVRocmVhZFN0YXRlKFRVTkVfVEhSRUFEX1JVTk5JTkcpOworICAgIGFzeW5jV2FpdEZvcih0ZXN0VHVuZVRocmVhZFN0b3BwaW5nLCBOVUxMKTsKKworICAgIGFzeW5jRGlzY2FyZEV2ZW50KHR1bmVSZXF1ZXN0RXZlbnQpOworICAgIHR1bmVSZXF1ZXN0RXZlbnQgPSBOVUxMOworICB9CisKKyAgc2VuZFR1bmVUaHJlYWRTdGF0ZShUVU5FX1RIUkVBRF9TVE9QUEVEKTsKKyAgcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBpbnQKK3N0YXJ0VHVuZVRocmVhZCAodm9pZCkgeworICBpZiAodHVuZVRocmVhZFN0YXRlID09IFRVTkVfVEhSRUFEX05PTkUpIHsKKyAgICBzZXRUdW5lVGhyZWFkU3RhdGUoVFVORV9USFJFQURfU1RBUlRJTkcpOworCisgICAgaWYgKCh0dW5lTWVzc2FnZUV2ZW50ID0gYXN5bmNOZXdFdmVudChoYW5kbGVUdW5lTWVzc2FnZUV2ZW50LCBOVUxMKSkpIHsKKyAgICAgIGludCBjcmVhdGlvbkVycm9yID0gY3JlYXRlVGhyZWFkKCJ0dW5lLXRocmVhZCIsICZ0dW5lVGhyZWFkSWRlbnRpZmllciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIHJ1blR1bmVUaHJlYWQsIE5VTEwpOworCisgICAgICBpZiAoIWNyZWF0aW9uRXJyb3IpIHsKKyAgICAgICAgYXN5bmNXYWl0Rm9yKHRlc3RUdW5lVGhyZWFkU3RhcnRlZCwgTlVMTCk7CisgICAgICAgIGlmICh0dW5lVGhyZWFkU3RhdGUgPT0gVFVORV9USFJFQURfUlVOTklORykgcmV0dXJuIDE7CisgICAgICB9IGVsc2UgeworICAgICAgICBsb2dBY3Rpb25FcnJvcihjcmVhdGlvbkVycm9yLCAidHVuZSB0aHJlYWQgY3JlYXRpb24iKTsKKyAgICAgICAgc2V0VHVuZVRocmVhZFN0YXRlKFRVTkVfVEhSRUFEX0ZBSUxFRCk7CisgICAgICB9CisKKyAgICAgIGFzeW5jRGlzY2FyZEV2ZW50KHR1bmVNZXNzYWdlRXZlbnQpOworICAgICAgdHVuZU1lc3NhZ2VFdmVudCA9IE5VTEw7CisgICAgfQorICB9CisKKyAgcmV0dXJuIHR1bmVUaHJlYWRTdGF0ZSA9PSBUVU5FX1RIUkVBRF9SVU5OSU5HOworfQorI2VuZGlmIC8qIEdPVF9QVEhSRUFEUyAqLworCitzdGF0aWMgaW50CitzZW5kVHVuZVJlcXVlc3QgKFR1bmVSZXF1ZXN0ICpyZXEpIHsKKyNpZmRlZiBHT1RfUFRIUkVBRFMKKyAgaWYgKHN0YXJ0VHVuZVRocmVhZCgpKSB7CisgICAgcmV0dXJuIGFzeW5jU2lnbmFsRXZlbnQodHVuZVJlcXVlc3RFdmVudCwgcmVxKTsKKyAgfQorI2VuZGlmIC8qIEdPVF9QVEhSRUFEUyAqLworCisgIGhhbmRsZVR1bmVSZXF1ZXN0KHJlcSk7CisgIHJldHVybiAxOworfQorCitzdGF0aWMgdm9pZAorZXhpdFR1bmVzICh2b2lkICpkYXRhKSB7CisgIHNlbmRUdW5lUmVxdWVzdChOVUxMKTsKKworI2lmZGVmIEdPVF9QVEhSRUFEUworICBpZiAodHVuZVRocmVhZFN0YXRlID49IFRVTkVfVEhSRUFEX1JVTk5JTkcpIHsKKyAgICBhc3luY1dhaXRGb3IodGVzdFR1bmVUaHJlYWRTdG9wcGVkLCBOVUxMKTsKKyAgfQorCisgIHR1bmVUaHJlYWRTdGF0ZSA9IFRVTkVfVEhSRUFEX05PTkU7CisjZW5kaWYgLyogR09UX1BUSFJFQURTICovCisKKyAgdHVuZUluaXRpYWxpemVkID0gMDsKK30KKyAKK3N0YXRpYyBUdW5lUmVxdWVzdCAqCituZXdUdW5lUmVxdWVzdCAoVHVuZVJlcXVlc3RUeXBlIHR5cGUpIHsKKyAgVHVuZVJlcXVlc3QgKnJlcTsKKworICBpZiAoIXR1bmVJbml0aWFsaXplZCkgeworICAgIHR1bmVJbml0aWFsaXplZCA9IDE7CisgICAgb25Qcm9ncmFtRXhpdCgidHVuZXMiLCBleGl0VHVuZXMsIE5VTEwpOworICB9CisKKyAgaWYgKChyZXEgPSBtYWxsb2Moc2l6ZW9mKCpyZXEpKSkpIHsKKyAgICBtZW1zZXQocmVxLCAwLCBzaXplb2YoKnJlcSkpOworICAgIHJlcS0+dHlwZSA9IHR5cGU7CisgICAgcmV0dXJuIHJlcTsKKyAgfSBlbHNlIHsKKyAgICBsb2dNYWxsb2NFcnJvcigpOworICB9CisKKyAgcmV0dXJuIE5VTEw7Cit9CisKK2ludAordHVuZVNldERldmljZSAoVHVuZURldmljZSBkZXZpY2UpIHsKKyAgY29uc3QgTm90ZU1ldGhvZHMgKm1ldGhvZHM7CisKKyAgc3dpdGNoIChkZXZpY2UpIHsKKyAgICBkZWZhdWx0OgorICAgICAgcmV0dXJuIDA7CisKKyNpZmRlZiBIQVZFX0JFRVBfU1VQUE9SVAorICAgIGNhc2UgdGRCZWVwZXI6CisgICAgICBtZXRob2RzID0gJmJlZXBOb3RlTWV0aG9kczsKKyAgICAgIGJyZWFrOworI2VuZGlmIC8qIEhBVkVfQkVFUF9TVVBQT1JUICovCisKKyNpZmRlZiBIQVZFX1BDTV9TVVBQT1JUCisgICAgY2FzZSB0ZFBjbToKKyAgICAgIG1ldGhvZHMgPSAmcGNtTm90ZU1ldGhvZHM7CisgICAgICBicmVhazsKKyNlbmRpZiAvKiBIQVZFX1BDTV9TVVBQT1JUICovCisKKyNpZmRlZiBIQVZFX01JRElfU1VQUE9SVAorICAgIGNhc2UgdGRNaWRpOgorICAgICAgbWV0aG9kcyA9ICZtaWRpTm90ZU1ldGhvZHM7CisgICAgICBicmVhazsKKyNlbmRpZiAvKiBIQVZFX01JRElfU1VQUE9SVCAqLworCisjaWZkZWYgSEFWRV9GTV9TVVBQT1JUCisgICAgY2FzZSB0ZEZtOgorICAgICAgbWV0aG9kcyA9ICZmbU5vdGVNZXRob2RzOworICAgICAgYnJlYWs7CisjZW5kaWYgLyogSEFWRV9GTV9TVVBQT1JUICovCisgIH0KKworICB7CisgICAgVHVuZVJlcXVlc3QgKnJlcTsKKworICAgIGlmICgocmVxID0gbmV3VHVuZVJlcXVlc3QoVFVORV9SRVFfU0VUX0RFVklDRSkpKSB7CisgICAgICByZXEtPnBhcmFtZXRlcnMuc2V0RGV2aWNlLm1ldGhvZHMgPSBtZXRob2RzOworICAgICAgaWYgKCFzZW5kVHVuZVJlcXVlc3QocmVxKSkgZnJlZShyZXEpOworICAgIH0KKyAgfQorCisgIHJldHVybiAxOworfQorCit2b2lkCit0dW5lUGxheU5vdGVzIChjb25zdCBOb3RlRWxlbWVudCAqdHVuZSkgeworICBpZiAodHVuZSAhPSBjdXJyZW50bHlQbGF5aW5nTm90ZXMpIHsKKyAgICBUdW5lUmVxdWVzdCAqcmVxOworCisgICAgaWYgKChyZXEgPSBuZXdUdW5lUmVxdWVzdChUVU5FX1JFUV9QTEFZX05PVEVTKSkpIHsKKyAgICAgIHJlcS0+cGFyYW1ldGVycy5wbGF5Tm90ZXMudHVuZSA9IHR1bmU7CisgICAgICBpZiAoIXNlbmRUdW5lUmVxdWVzdChyZXEpKSBmcmVlKHJlcSk7CisgICAgfQorICB9Cit9CisKK3ZvaWQKK3R1bmVQbGF5VG9uZXMgKGNvbnN0IFRvbmVFbGVtZW50ICp0dW5lKSB7CisgIGlmICh0dW5lICE9IGN1cnJlbnRseVBsYXlpbmdUb25lcykgeworICAgIFR1bmVSZXF1ZXN0ICpyZXE7CisKKyAgICBpZiAoKHJlcSA9IG5ld1R1bmVSZXF1ZXN0KFRVTkVfUkVRX1BMQVlfVE9ORVMpKSkgeworICAgICAgcmVxLT5wYXJhbWV0ZXJzLnBsYXlUb25lcy50dW5lID0gdHVuZTsKKyAgICAgIGlmICghc2VuZFR1bmVSZXF1ZXN0KHJlcSkpIGZyZWUocmVxKTsKKyAgICB9CisgIH0KK30KKwordm9pZAordHVuZVdhaXQgKGludCB0aW1lKSB7CisgIFR1bmVSZXF1ZXN0ICpyZXE7CisKKyAgaWYgKChyZXEgPSBuZXdUdW5lUmVxdWVzdChUVU5FX1JFUV9XQUlUKSkpIHsKKyAgICByZXEtPnBhcmFtZXRlcnMud2FpdC50aW1lID0gdGltZTsKKyAgICBpZiAoIXNlbmRUdW5lUmVxdWVzdChyZXEpKSBmcmVlKHJlcSk7CisgIH0KK30KKworQVNZTkNfQ09ORElUSU9OX1RFU1RFUih0ZXN0VHVuZVN5bmNocm9uaXphdGlvbk1vbml0b3IpIHsKKyAgVHVuZVN5bmNocm9uaXphdGlvbk1vbml0b3IgKm1vbml0b3IgPSBkYXRhOworCisgIHJldHVybiAhISptb25pdG9yOworfQorCit2b2lkCit0dW5lU3luY2hyb25pemUgKHZvaWQpIHsKKyAgVHVuZVJlcXVlc3QgKnJlcTsKKworICBpZiAoKHJlcSA9IG5ld1R1bmVSZXF1ZXN0KFRVTkVfUkVRX1NZTkNIUk9OSVpFKSkpIHsKKyAgICBUdW5lU3luY2hyb25pemF0aW9uTW9uaXRvciBtb25pdG9yID0gMDsKKyAgICByZXEtPnBhcmFtZXRlcnMuc3luY2hyb25pemUubW9uaXRvciA9ICZtb25pdG9yOworCisgICAgaWYgKHNlbmRUdW5lUmVxdWVzdChyZXEpKSB7CisgICAgICBhc3luY1dhaXRGb3IodGVzdFR1bmVTeW5jaHJvbml6YXRpb25Nb25pdG9yLCAmbW9uaXRvcik7CisgICAgfSBlbHNlIHsKKyAgICAgIGZyZWUocmVxKTsKKyAgICB9CisgIH0KK30KKwordm9pZAorc3VwcHJlc3NUdW5lRGV2aWNlT3BlbkVycm9ycyAodm9pZCkgeworICBvcGVuRXJyb3JMZXZlbCA9IExPR19ERUJVRzsKK30KZGlmZiAtLWdpdCBhL1Byb2dyYW1zL3R1bmVfYnVpbGRlci5jIGIvUHJvZ3JhbXMvdHVuZV9idWlsZGVyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2Y4ZjFkZAotLS0gL2Rldi9udWxsCisrKyBiL1Byb2dyYW1zL3R1bmVfYnVpbGRlci5jCkBAIC0wLDAgKzEsNzg4IEBACisvKgorICogQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyAqICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyAqCisgKiBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorICoKKyAqIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyAqCisgKiBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisgKi8KKworI2luY2x1ZGUgInByb2xvZ3VlLmgiCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPGN0eXBlLmg+CisjaW5jbHVkZSA8bGltaXRzLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKworI2luY2x1ZGUgImxvZy5oIgorI2luY2x1ZGUgInR1bmVfYnVpbGRlci5oIgorI2luY2x1ZGUgIm5vdGVzLmgiCisjaW5jbHVkZSAidXRmOC5oIgorCit0eXBlZGVmIHVuc2lnbmVkIGludCBUdW5lTnVtYmVyOworCit0eXBlZGVmIHN0cnVjdCB7CisgIGNvbnN0IGNoYXIgKm5hbWU7CisgIFR1bmVOdW1iZXIgbWluaW11bTsKKyAgVHVuZU51bWJlciBtYXhpbXVtOworICBUdW5lTnVtYmVyIGN1cnJlbnQ7Cit9IFR1bmVQYXJhbWV0ZXI7CisKK3N0cnVjdCBUdW5lQnVpbGRlclN0cnVjdCB7CisgIFR1bmVTdGF0dXMgc3RhdHVzOworCisgIHN0cnVjdCB7CisgICAgVG9uZUVsZW1lbnQgKmFycmF5OworICAgIHVuc2lnbmVkIGludCBzaXplOworICAgIHVuc2lnbmVkIGludCBjb3VudDsKKyAgfSB0b25lczsKKworICBzaWduZWQgY2hhciBhY2NpZGVudGFsc1tOT1RFU19QRVJfU0NBTEVdOworICBUdW5lUGFyYW1ldGVyIGR1cmF0aW9uOworICBUdW5lUGFyYW1ldGVyIG5vdGU7CisgIFR1bmVQYXJhbWV0ZXIgb2N0YXZlOworICBUdW5lUGFyYW1ldGVyIHBlcmNlbnRhZ2U7CisgIFR1bmVQYXJhbWV0ZXIgdGVtcG87CisKKyAgVHVuZU51bWJlciBkdXJhdGlvbk11bHRpcGxpZXI7CisgIFR1bmVOdW1iZXIgZHVyYXRpb25EaXZpc29yOworCisgIHN0cnVjdCB7CisgICAgY29uc3Qgd2NoYXJfdCAqdGV4dDsKKyAgICBjb25zdCBjaGFyICpuYW1lOworICAgIHVuc2lnbmVkIGludCBpbmRleDsKKyAgfSBzb3VyY2U7Cit9OworCitzdGF0aWMgY29uc3Qgd2NoYXJfdCAqbm90ZUxldHRlcnMgPSBXU19DKCJjZGVmZ2FiIik7CitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBub3RlT2Zmc2V0c1tdID0gezAsIDIsIDQsIDUsIDcsIDksIDExfTsKK3N0YXRpYyBjb25zdCBzaWduZWQgY2hhciBzY2FsZUFjY2lkZW50YWxzW10gPSB7MCwgMiwgNCwgLTEsIDEsIDMsIDV9Oworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWNjaWRlbnRhbFRhYmxlW10gPSB7MywgMCwgNCwgMSwgNSwgMiwgNn07CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgY29uc3Qgd2NoYXJfdCAqbmFtZTsKKyAgc2lnbmVkIGNoYXIgYWNjaWRlbnRhbHM7Cit9IE1vZGVFbnRyeTsKKworc3RhdGljIGNvbnN0IE1vZGVFbnRyeSBtb2RlVGFibGVbXSA9IHsKKyAgey5uYW1lPVdTX0MoIm1ham9yIiksIC5hY2NpZGVudGFscz0wfSwKKyAgey5uYW1lPVdTX0MoIm1pbm9yIiksIC5hY2NpZGVudGFscz0tM30sCisKKyAgey5uYW1lPVdTX0MoImlvbmlhbiIpLCAuYWNjaWRlbnRhbHM9MH0sCisgIHsubmFtZT1XU19DKCJkb3JpYW4iKSwgLmFjY2lkZW50YWxzPS0yfSwKKyAgey5uYW1lPVdTX0MoInBocnlnaWFuIiksIC5hY2NpZGVudGFscz0tNH0sCisgIHsubmFtZT1XU19DKCJseWRpYW4iKSwgLmFjY2lkZW50YWxzPTF9LAorICB7Lm5hbWU9V1NfQygibWl4b2x5ZGlhbiIpLCAuYWNjaWRlbnRhbHM9LTF9LAorICB7Lm5hbWU9V1NfQygiYWVvbGlhbiIpLCAuYWNjaWRlbnRhbHM9LTN9LAorICB7Lm5hbWU9V1NfQygibG9jcmlhbiIpLCAuYWNjaWRlbnRhbHM9LTV9LAorfTsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIG1vZGVDb3VudCA9IEFSUkFZX0NPVU5UKG1vZGVUYWJsZSk7CisKK3N0YXRpYyB2b2lkCitsb2dTeW50YXhFcnJvciAoVHVuZUJ1aWxkZXIgKnRiLCBjb25zdCBjaGFyICptZXNzYWdlKSB7CisgIHRiLT5zdGF0dXMgPSBUVU5FX1NUQVRVU19TWU5UQVg7CisKKyAgbG9nTWVzc2FnZShMT0dfRVJSLCAidHVuZSBlcnJvcjogJXNbJXVdOiAlczogJSIgUFJJd3MsCisgICAgICAgICAgICAgdGItPnNvdXJjZS5uYW1lLCB0Yi0+c291cmNlLmluZGV4LAorICAgICAgICAgICAgIG1lc3NhZ2UsIHRiLT5zb3VyY2UudGV4dCk7Cit9CisKK2ludAorYWRkVG9uZSAoVHVuZUJ1aWxkZXIgKnRiLCBjb25zdCBUb25lRWxlbWVudCAqdG9uZSkgeworICBpZiAodGItPnRvbmVzLmNvdW50ID09IHRiLT50b25lcy5zaXplKSB7CisgICAgdW5zaWduZWQgaW50IG5ld1NpemUgPSB0Yi0+dG9uZXMuc2l6ZT8gKHRiLT50b25lcy5zaXplIDw8IDEpOiAxOworICAgIFRvbmVFbGVtZW50ICpuZXdBcnJheTsKKworICAgIGlmICghKG5ld0FycmF5ID0gcmVhbGxvYyh0Yi0+dG9uZXMuYXJyYXksIEFSUkFZX1NJWkUobmV3QXJyYXksIG5ld1NpemUpKSkpIHsKKyAgICAgIHRiLT5zdGF0dXMgPSBUVU5FX1NUQVRVU19GQVRBTDsKKyAgICAgIGxvZ01hbGxvY0Vycm9yKCk7CisgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICB0Yi0+dG9uZXMuYXJyYXkgPSBuZXdBcnJheTsKKyAgICB0Yi0+dG9uZXMuc2l6ZSA9IG5ld1NpemU7CisgIH0KKworICB0Yi0+dG9uZXMuYXJyYXlbdGItPnRvbmVzLmNvdW50KytdID0gKnRvbmU7CisgIHJldHVybiAxOworfQorCitpbnQKK2FkZE5vdGUgKFR1bmVCdWlsZGVyICp0YiwgdW5zaWduZWQgY2hhciBub3RlLCBpbnQgZHVyYXRpb24pIHsKKyAgaWYgKCFkdXJhdGlvbikgcmV0dXJuIDE7CisKKyAgVG9uZUVsZW1lbnQgdG9uZSA9IFRPTkVfUExBWShkdXJhdGlvbiwgZ2V0Tm90ZUZyZXF1ZW5jeShub3RlKSk7CisgIHJldHVybiBhZGRUb25lKHRiLCAmdG9uZSk7Cit9CisKK3N0YXRpYyBpbnQKK3BhcnNlTnVtYmVyICgKKyAgVHVuZUJ1aWxkZXIgKnRiLAorICBUdW5lTnVtYmVyICpudW1iZXIsIGNvbnN0IHdjaGFyX3QgKipvcGVyYW5kLCBpbnQgcmVxdWlyZWQsCisgIGNvbnN0IFR1bmVOdW1iZXIgbWluaW11bSwgY29uc3QgVHVuZU51bWJlciBtYXhpbXVtLAorICBjb25zdCBjaGFyICpuYW1lCispIHsKKyAgY29uc3Qgd2NoYXJfdCAqY29uc3Qgc3RhcnQgPSAqb3BlcmFuZDsKKyAgdW5zaWduZWQgbG9uZyB2YWx1ZSA9IDA7CisgIGNvbnN0IGNoYXIgKnByb2JsZW0gPSAiaW52YWxpZCI7CisKKyAgd2hpbGUgKCoqb3BlcmFuZCkgeworICAgIGlmICghdmFsdWUgJiYgKCpvcGVyYW5kID4gc3RhcnQpKSBnb3RvIFBST0JMRU1fRU5DT1VOVEVSRUQ7CisKKyAgICBsb25nIGludCBkaWdpdCA9ICoqb3BlcmFuZCAtIFdDX0MoJzAnKTsKKyAgICBpZiAoZGlnaXQgPCAwKSBicmVhazsKKyAgICBpZiAoZGlnaXQgPiA5KSBicmVhazsKKworICAgIHZhbHVlICo9IDEwOworICAgIHZhbHVlICs9IGRpZ2l0OworICAgIGlmICh2YWx1ZSA+IFVJTlRfTUFYKSBnb3RvIFBST0JMRU1fRU5DT1VOVEVSRUQ7CisKKyAgICAqb3BlcmFuZCArPSAxOworICB9CisKKyAgaWYgKCpvcGVyYW5kID4gc3RhcnQpIHsKKyAgICBpZiAodmFsdWUgPCBtaW5pbXVtKSBnb3RvIFBST0JMRU1fRU5DT1VOVEVSRUQ7CisgICAgaWYgKHZhbHVlID4gbWF4aW11bSkgZ290byBQUk9CTEVNX0VOQ09VTlRFUkVEOworICAgICpudW1iZXIgPSB2YWx1ZTsKKyAgfSBlbHNlIGlmIChyZXF1aXJlZCkgeworICAgIHByb2JsZW0gPSAibWlzc2luZyI7CisgICAgZ290byBQUk9CTEVNX0VOQ09VTlRFUkVEOworICB9CisKKyAgcmV0dXJuIDE7CisKK1BST0JMRU1fRU5DT1VOVEVSRUQ6CisgIGlmIChuYW1lKSB7CisgICAgY2hhciBtZXNzYWdlWzBYODBdOworICAgIHNucHJpbnRmKG1lc3NhZ2UsIHNpemVvZihtZXNzYWdlKSwgIiVzICVzIiwgcHJvYmxlbSwgbmFtZSk7CisgICAgbG9nU3ludGF4RXJyb3IodGIsIG1lc3NhZ2UpOworICB9CisKKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK3BhcnNlUGFyYW1ldGVyICgKKyAgVHVuZUJ1aWxkZXIgKnRiLCBUdW5lUGFyYW1ldGVyICpwYXJhbWV0ZXIsCisgIGNvbnN0IHdjaGFyX3QgKipvcGVyYW5kLCBpbnQgcmVxdWlyZWQKKykgeworICByZXR1cm4gcGFyc2VOdW1iZXIodGIsICZwYXJhbWV0ZXItPmN1cnJlbnQsIG9wZXJhbmQsIHJlcXVpcmVkLAorICAgICAgICAgICAgICAgICAgICAgcGFyYW1ldGVyLT5taW5pbXVtLCBwYXJhbWV0ZXItPm1heGltdW0sIHBhcmFtZXRlci0+bmFtZSk7Cit9CisKK3N0YXRpYyBpbnQKK3BhcnNlT3B0aW9uYWxQYXJhbWV0ZXIgKFR1bmVCdWlsZGVyICp0YiwgVHVuZVBhcmFtZXRlciAqcGFyYW1ldGVyLCBjb25zdCB3Y2hhcl90ICoqb3BlcmFuZCkgeworICByZXR1cm4gcGFyc2VQYXJhbWV0ZXIodGIsIHBhcmFtZXRlciwgb3BlcmFuZCwgMCk7Cit9CisKK3N0YXRpYyBpbnQKK3BhcnNlUmVxdWlyZWRQYXJhbWV0ZXIgKFR1bmVCdWlsZGVyICp0YiwgVHVuZVBhcmFtZXRlciAqcGFyYW1ldGVyLCBjb25zdCB3Y2hhcl90ICoqb3BlcmFuZCkgeworICByZXR1cm4gcGFyc2VQYXJhbWV0ZXIodGIsIHBhcmFtZXRlciwgb3BlcmFuZCwgMSk7Cit9CisKK3N0YXRpYyBpbnQKK3BhcnNlUGVyY2VudGFnZSAoVHVuZUJ1aWxkZXIgKnRiLCBjb25zdCB3Y2hhcl90ICoqb3BlcmFuZCkgeworICByZXR1cm4gcGFyc2VSZXF1aXJlZFBhcmFtZXRlcih0YiwgJnRiLT5wZXJjZW50YWdlLCBvcGVyYW5kKTsKK30KKworc3RhdGljIGludAorcGFyc2VUZW1wbyAoVHVuZUJ1aWxkZXIgKnRiLCBjb25zdCB3Y2hhcl90ICoqb3BlcmFuZCkgeworICByZXR1cm4gcGFyc2VSZXF1aXJlZFBhcmFtZXRlcih0YiwgJnRiLT50ZW1wbywgb3BlcmFuZCk7Cit9CisKK3N0YXRpYyB2b2lkCitzZXRDdXJyZW50RHVyYXRpb24gKFR1bmVCdWlsZGVyICp0YikgeworICB0Yi0+ZHVyYXRpb24uY3VycmVudCA9ICg2MDAwMCAqIHRiLT5kdXJhdGlvbk11bHRpcGxpZXIpIC8gKHRiLT50ZW1wby5jdXJyZW50ICogdGItPmR1cmF0aW9uRGl2aXNvcik7Cit9CisKK3N0YXRpYyBpbnQKK3BhcnNlRHVyYXRpb24gKFR1bmVCdWlsZGVyICp0YiwgY29uc3Qgd2NoYXJfdCAqKm9wZXJhbmQsIGludCAqZHVyYXRpb24pIHsKKyAgaWYgKCoqb3BlcmFuZCA9PSAnQCcpIHsKKyAgICAqb3BlcmFuZCArPSAxOworICAgIGlmICghcGFyc2VSZXF1aXJlZFBhcmFtZXRlcih0YiwgJnRiLT5kdXJhdGlvbiwgb3BlcmFuZCkpIHJldHVybiAwOworICB9IGVsc2UgeworICAgIGNvbnN0IHdjaGFyX3QgKmR1cmF0aW9uT3BlcmFuZCA9ICpvcGVyYW5kOworCisgICAgVHVuZU51bWJlciBtdWx0aXBsaWVyOworICAgIFR1bmVOdW1iZXIgZGl2aXNvcjsKKworICAgIGlmICgqKm9wZXJhbmQgPT0gJyonKSB7CisgICAgICAqb3BlcmFuZCArPSAxOworCisgICAgICBpZiAoIXBhcnNlTnVtYmVyKHRiLCAmbXVsdGlwbGllciwgb3BlcmFuZCwgMSwgMSwgMTYsICJkdXJhdGlvbiBtdWx0aXBsaWVyIikpIHsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgIG11bHRpcGxpZXIgPSAxOworICAgIH0KKworICAgIGlmICgqKm9wZXJhbmQgPT0gJy8nKSB7CisgICAgICAqb3BlcmFuZCArPSAxOworCisgICAgICBpZiAoIXBhcnNlTnVtYmVyKHRiLCAmZGl2aXNvciwgb3BlcmFuZCwgMSwgMSwgMTI4LCAiZHVyYXRpb24gZGl2aXNvciIpKSB7CisgICAgICAgIHJldHVybiAwOworICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICBkaXZpc29yID0gMTsKKyAgICB9CisKKyAgICBpZiAoKm9wZXJhbmQgIT0gZHVyYXRpb25PcGVyYW5kKSB7CisgICAgICB0Yi0+ZHVyYXRpb25NdWx0aXBsaWVyID0gbXVsdGlwbGllcjsKKyAgICAgIHRiLT5kdXJhdGlvbkRpdmlzb3IgPSBkaXZpc29yOworICAgICAgdGItPmR1cmF0aW9uLmN1cnJlbnQgPSAwOworICAgIH0KKworICAgIGlmICghdGItPmR1cmF0aW9uLmN1cnJlbnQpIHNldEN1cnJlbnREdXJhdGlvbih0Yik7CisgIH0KKyAgKmR1cmF0aW9uID0gdGItPmR1cmF0aW9uLmN1cnJlbnQ7CisKKyAgeworICAgIGludCBpbmNyZW1lbnQgPSAqZHVyYXRpb247CisKKyAgICB3aGlsZSAoKipvcGVyYW5kID09ICcuJykgeworICAgICAgKmR1cmF0aW9uICs9IChpbmNyZW1lbnQgLz0gMik7CisgICAgICAqb3BlcmFuZCArPSAxOworICAgIH0KKyAgfQorCisgIHJldHVybiAxOworfQorCitzdGF0aWMgVHVuZU51bWJlcgordG9PY3RhdmUgKFR1bmVOdW1iZXIgbm90ZSkgeworICByZXR1cm4gbm90ZSAvIE5PVEVTX1BFUl9PQ1RBVkU7Cit9CisKK3N0YXRpYyB2b2lkCitzZXRDdXJyZW50T2N0YXZlIChUdW5lQnVpbGRlciAqdGIpIHsKKyAgdGItPm9jdGF2ZS5jdXJyZW50ID0gdG9PY3RhdmUodGItPm5vdGUuY3VycmVudCk7Cit9CisKK3N0YXRpYyB2b2lkCitzZXRBY2NpZGVudGFscyAoVHVuZUJ1aWxkZXIgKnRiLCBpbnQgYWNjaWRlbnRhbHMpIHsKKyAgaW50IHF1b3RpZW50ID0gYWNjaWRlbnRhbHMgLyBOT1RFU19QRVJfU0NBTEU7CisgIGludCByZW1haW5kZXIgPSBhY2NpZGVudGFscyAlIE5PVEVTX1BFUl9TQ0FMRTsKKworICBmb3IgKHVuc2lnbmVkIGludCBpbmRleD0wOyBpbmRleDxBUlJBWV9DT1VOVCh0Yi0+YWNjaWRlbnRhbHMpOyBpbmRleCs9MSkgeworICAgIHRiLT5hY2NpZGVudGFsc1tpbmRleF0gPSBxdW90aWVudDsKKyAgfQorCisgIHdoaWxlIChyZW1haW5kZXIgPiAwKSB7CisgICAgdGItPmFjY2lkZW50YWxzW2FjY2lkZW50YWxUYWJsZVstLXJlbWFpbmRlcl1dICs9IDE7CisgIH0KKworICB3aGlsZSAocmVtYWluZGVyIDwgMCkgeworICAgIHRiLT5hY2NpZGVudGFsc1thY2NpZGVudGFsVGFibGVbTk9URVNfUEVSX1NDQUxFICsgcmVtYWluZGVyKytdXSAtPSAxOworICB9Cit9CisKK3N0YXRpYyBpbnQKK3BhcnNlTm90ZUxldHRlciAodW5zaWduZWQgY2hhciAqaW5kZXgsIGNvbnN0IHdjaGFyX3QgKipvcGVyYW5kKSB7CisgIGNvbnN0IHdjaGFyX3QgKmxldHRlciA9IHdjc2Nocihub3RlTGV0dGVycywgKipvcGVyYW5kKTsKKworICBpZiAoIWxldHRlcikgcmV0dXJuIDA7CisgIGlmICghKmxldHRlcikgcmV0dXJuIDA7CisKKyAgKmluZGV4ID0gbGV0dGVyIC0gbm90ZUxldHRlcnM7CisgICpvcGVyYW5kICs9IDE7CisgIHJldHVybiAxOworfQorCitzdGF0aWMgaW50CitwYXJzZU1vZGUgKFR1bmVCdWlsZGVyICp0YiwgaW50ICphY2NpZGVudGFscywgY29uc3Qgd2NoYXJfdCAqKm9wZXJhbmQpIHsKKyAgY29uc3Qgd2NoYXJfdCAqZnJvbSA9ICpvcGVyYW5kOworICBpZiAoIWlzYWxwaGEoKmZyb20pKSByZXR1cm4gMTsKKworICBjb25zdCB3Y2hhcl90ICp0byA9IGZyb207CisgIHdoaWxlIChpc2FscGhhKCorK3RvKSk7CisgIHVuc2lnbmVkIGludCBsZW5ndGggPSB0byAtIGZyb207CisKKyAgY29uc3QgTW9kZUVudHJ5ICptb2RlID0gTlVMTDsKKyAgY29uc3QgTW9kZUVudHJ5ICpjdXJyZW50ID0gbW9kZVRhYmxlOworICBjb25zdCBNb2RlRW50cnkgKmVuZCA9IGN1cnJlbnQgKyBtb2RlQ291bnQ7CisKKyAgd2hpbGUgKGN1cnJlbnQgPCBlbmQpIHsKKyAgICBpZiAod2NzbmNtcChjdXJyZW50LT5uYW1lLCBmcm9tLCBsZW5ndGgpID09IDApIHsKKyAgICAgIGlmIChtb2RlKSB7CisgICAgICAgIGxvZ1N5bnRheEVycm9yKHRiLCAiYW1iaWd1b3VzIG1vZGUiKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgICB9CisKKyAgICAgIG1vZGUgPSBjdXJyZW50OworICAgIH0KKworICAgIGN1cnJlbnQgKz0gMTsKKyAgfQorCisgIGlmICghbW9kZSkgeworICAgIGxvZ1N5bnRheEVycm9yKHRiLCAidW5yZWNvZ25pemVkIG1vZGUiKTsKKyAgICByZXR1cm4gMDsKKyAgfQorCisgICphY2NpZGVudGFscyArPSBtb2RlLT5hY2NpZGVudGFsczsKKyAgKm9wZXJhbmQgPSB0bzsKKyAgcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQKK3BhcnNlS2V5IChUdW5lQnVpbGRlciAqdGIsIGNvbnN0IHdjaGFyX3QgKipvcGVyYW5kKSB7CisgIGludCBub3RlU3BlY2lmaWVkID0gMDsKKyAgaW50IGFjY2lkZW50YWxzOworCisgIHsKKyAgICB1bnNpZ25lZCBjaGFyIGluZGV4OworCisgICAgaWYgKHBhcnNlTm90ZUxldHRlcigmaW5kZXgsIG9wZXJhbmQpKSB7CisgICAgICBub3RlU3BlY2lmaWVkID0gMTsKKyAgICAgIGFjY2lkZW50YWxzID0gc2NhbGVBY2NpZGVudGFsc1tpbmRleF07CisgICAgICBpZiAoIXBhcnNlTW9kZSh0YiwgJmFjY2lkZW50YWxzLCBvcGVyYW5kKSkgcmV0dXJuIDA7CisgICAgfQorICB9CisKKyAgaWYgKCFub3RlU3BlY2lmaWVkKSB7CisgICAgVHVuZU51bWJlciBjb3VudCA9IDA7CisgICAgaW50IGluY3JlbWVudCA9IDE7CisKKyAgICBpZiAoIXBhcnNlTnVtYmVyKHRiLCAmY291bnQsIG9wZXJhbmQsIDAsIDEsIE5PVEVTX1BFUl9PQ1RBVkUtMSwgImFjY2lkZW50YWwgY291bnQiKSkgeworICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgaW50IGhhdmVDb3VudCA9IGNvdW50ICE9IDA7CisgICAgd2NoYXJfdCBhY2NpZGVudGFsID0gKipvcGVyYW5kOworCisgICAgc3dpdGNoIChhY2NpZGVudGFsKSB7CisgICAgICBjYXNlICctJzoKKyAgICAgICAgaW5jcmVtZW50ID0gLWluY3JlbWVudDsKKyAgICAgICAgLyogZmFsbCB0aHJvdWdoICovCisgICAgICBjYXNlICcrJzoKKyAgICAgICAgaWYgKGhhdmVDb3VudCkgeworICAgICAgICAgICpvcGVyYW5kICs9IDE7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgZG8geworICAgICAgICAgICAgY291bnQgKz0gMTsKKyAgICAgICAgICB9IHdoaWxlICgqKysqb3BlcmFuZCA9PSBhY2NpZGVudGFsKTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKworICAgICAgZGVmYXVsdDoKKyAgICAgICAgaWYgKCFoYXZlQ291bnQpIGJyZWFrOworICAgICAgICBsb2dTeW50YXhFcnJvcih0YiwgImFjY2lkZW50YWwgbm90IHNwZWNpZmllZCIpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBhY2NpZGVudGFscyA9IGluY3JlbWVudCAqIGNvdW50OworICB9CisKK2xvZ01lc3NhZ2UoTE9HX05PVElDRSwgImNjYz0lZCIsIGFjY2lkZW50YWxzKTsKKyAgc2V0QWNjaWRlbnRhbHModGIsIGFjY2lkZW50YWxzKTsKKyAgcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQKK3BhcnNlTm90ZSAoVHVuZUJ1aWxkZXIgKnRiLCBjb25zdCB3Y2hhcl90ICoqb3BlcmFuZCwgdW5zaWduZWQgY2hhciAqbm90ZSkgeworICBpbnQgbm90ZU51bWJlcjsKKworICBpZiAoKipvcGVyYW5kID09ICdyJykgeworICAgICpvcGVyYW5kICs9IDE7CisgICAgbm90ZU51bWJlciA9IDA7CisgIH0gZWxzZSBpZiAoKipvcGVyYW5kID09ICdtJykgeworICAgICpvcGVyYW5kICs9IDE7CisgICAgVHVuZVBhcmFtZXRlciBwYXJhbWV0ZXIgPSB0Yi0+bm90ZTsKKyAgICBpZiAoIXBhcnNlUmVxdWlyZWRQYXJhbWV0ZXIodGIsICZwYXJhbWV0ZXIsIG9wZXJhbmQpKSByZXR1cm4gMDsKKyAgICBub3RlTnVtYmVyID0gcGFyYW1ldGVyLmN1cnJlbnQ7CisgIH0gZWxzZSB7CisgICAgdW5zaWduZWQgY2hhciBub3RlSW5kZXg7CisgICAgaWYgKCFwYXJzZU5vdGVMZXR0ZXIoJm5vdGVJbmRleCwgb3BlcmFuZCkpIHJldHVybiAwOworCisgICAgY29uc3Qgd2NoYXJfdCAqb2N0YXZlT3BlcmFuZCA9ICpvcGVyYW5kOworICAgIFR1bmVQYXJhbWV0ZXIgb2N0YXZlID0gdGItPm9jdGF2ZTsKKyAgICBpZiAoIXBhcnNlT3B0aW9uYWxQYXJhbWV0ZXIodGIsICZvY3RhdmUsIG9wZXJhbmQpKSByZXR1cm4gMDsKKworICAgIGludCBvY3RhdmVTcGVjaWZpZWQgPSAqb3BlcmFuZCAhPSBvY3RhdmVPcGVyYW5kOworICAgIGlmIChvY3RhdmVTcGVjaWZpZWQpIG9jdGF2ZS5jdXJyZW50ICs9IDE7CisKKyAgICBub3RlTnVtYmVyID0gKG9jdGF2ZS5jdXJyZW50ICogTk9URVNfUEVSX09DVEFWRSkgKyBub3RlT2Zmc2V0c1tub3RlSW5kZXhdOworICAgIGludCBkZWZhdWx0QWNjaWRlbnRhbHMgPSB0Yi0+YWNjaWRlbnRhbHNbbm90ZUluZGV4XTsKKworICAgIGlmICghb2N0YXZlU3BlY2lmaWVkKSB7CisgICAgICBpbnQgYWRqdXN0T2N0YXZlID0gMDsKKyAgICAgIFR1bmVOdW1iZXIgcHJldmlvdXNOb3RlID0gdGItPm5vdGUuY3VycmVudDsKKyAgICAgIFR1bmVOdW1iZXIgY3VycmVudE5vdGUgPSBub3RlTnVtYmVyOworCisgICAgICBpZiAoY3VycmVudE5vdGUgPCBwcmV2aW91c05vdGUpIHsKKyAgICAgICAgY3VycmVudE5vdGUgKz0gTk9URVNfUEVSX09DVEFWRTsKKyAgICAgICAgaWYgKChjdXJyZW50Tm90ZSAtIHByZXZpb3VzTm90ZSkgPD0gMykgYWRqdXN0T2N0YXZlID0gMTsKKyAgICAgIH0gZWxzZSBpZiAoY3VycmVudE5vdGUgPiBwcmV2aW91c05vdGUpIHsKKyAgICAgICAgY3VycmVudE5vdGUgLT0gTk9URVNfUEVSX09DVEFWRTsKKyAgICAgICAgaWYgKChwcmV2aW91c05vdGUgLSBjdXJyZW50Tm90ZSkgPD0gMykgYWRqdXN0T2N0YXZlID0gMTsKKyAgICAgIH0KKworICAgICAgaWYgKGFkanVzdE9jdGF2ZSkgbm90ZU51bWJlciA9IGN1cnJlbnROb3RlOworICAgIH0KKworICAgIHRiLT5ub3RlLmN1cnJlbnQgPSBub3RlTnVtYmVyOworICAgIHNldEN1cnJlbnRPY3RhdmUodGIpOworCisgICAgeworICAgICAgd2NoYXJfdCBhY2NpZGVudGFsID0gKipvcGVyYW5kOworCisgICAgICBzd2l0Y2ggKGFjY2lkZW50YWwpIHsKKyAgICAgICAgeworICAgICAgICAgIGludCBpbmNyZW1lbnQ7CisKKyAgICAgICAgY2FzZSAnKyc6CisgICAgICAgICAgaW5jcmVtZW50ID0gMTsKKyAgICAgICAgICBnb3RvIGRvQWNjaWRlbnRhbDsKKworICAgICAgICBjYXNlICctJzoKKyAgICAgICAgICBpbmNyZW1lbnQgPSAtMTsKKyAgICAgICAgICBnb3RvIGRvQWNjaWRlbnRhbDsKKworICAgICAgICBkb0FjY2lkZW50YWw6CisgICAgICAgICAgZG8geworICAgICAgICAgICAgbm90ZU51bWJlciArPSBpbmNyZW1lbnQ7CisgICAgICAgICAgfSB3aGlsZSAoKisrKm9wZXJhbmQgPT0gYWNjaWRlbnRhbCk7CisKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGNhc2UgJz0nOgorICAgICAgICAgICpvcGVyYW5kICs9IDE7CisgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICBub3RlTnVtYmVyICs9IGRlZmF1bHRBY2NpZGVudGFsczsKKyAgICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICB9CisKKyAgICBpZiAobm90ZU51bWJlciA8IGdldExvd2VzdE5vdGUoKSkgeworICAgICAgbG9nU3ludGF4RXJyb3IodGIsICJub3RlIHRvbyBsb3ciKTsKKyAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIGlmIChub3RlTnVtYmVyID4gZ2V0SGlnaGVzdE5vdGUoKSkgeworICAgICAgbG9nU3ludGF4RXJyb3IodGIsICJub3RlIHRvbyBoaWdoIik7CisgICAgICByZXR1cm4gMDsKKyAgICB9CisgIH0KKworICAqbm90ZSA9IG5vdGVOdW1iZXI7CisgIHJldHVybiAxOworfQorCitzdGF0aWMgaW50CitwYXJzZVRvbmUgKFR1bmVCdWlsZGVyICp0YiwgY29uc3Qgd2NoYXJfdCAqKm9wZXJhbmQpIHsKKyAgd2hpbGUgKDEpIHsKKyAgICB0Yi0+c291cmNlLnRleHQgPSAqb3BlcmFuZDsKKyAgICB1bnNpZ25lZCBjaGFyIG5vdGU7CisKKyAgICB7CisgICAgICBjb25zdCB3Y2hhcl90ICpub3RlT3BlcmFuZCA9ICpvcGVyYW5kOworICAgICAgaWYgKCFwYXJzZU5vdGUodGIsIG9wZXJhbmQsICZub3RlKSkgcmV0dXJuICpvcGVyYW5kID09IG5vdGVPcGVyYW5kOworICAgIH0KKworICAgIGludCBkdXJhdGlvbjsKKyAgICBpZiAoIXBhcnNlRHVyYXRpb24odGIsIG9wZXJhbmQsICZkdXJhdGlvbikpIHJldHVybiAwOworCisgICAgaWYgKG5vdGUpIHsKKyAgICAgIGludCBvbkR1cmF0aW9uID0gKGR1cmF0aW9uICogdGItPnBlcmNlbnRhZ2UuY3VycmVudCkgLyAxMDA7CisgICAgICBpZiAoIWFkZE5vdGUodGIsIG5vdGUsIG9uRHVyYXRpb24pKSByZXR1cm4gMDsKKyAgICAgIGR1cmF0aW9uIC09IG9uRHVyYXRpb247CisgICAgfQorCisgICAgaWYgKCFhZGROb3RlKHRiLCAwLCBkdXJhdGlvbikpIHJldHVybiAwOworICB9CisKKyAgcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQKK3BhcnNlQ29tbWFuZCAoVHVuZUJ1aWxkZXIgKnRiLCBjb25zdCB3Y2hhcl90ICpvcGVyYW5kKSB7CisgIHRiLT5zb3VyY2UudGV4dCA9IG9wZXJhbmQ7CisKKyAgc3dpdGNoICgqb3BlcmFuZCkgeworICAgIGNhc2UgJ2snOgorICAgICAgb3BlcmFuZCArPSAxOworICAgICAgaWYgKCFwYXJzZUtleSh0YiwgJm9wZXJhbmQpKSByZXR1cm4gMDsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSAncCc6CisgICAgICBvcGVyYW5kICs9IDE7CisgICAgICBpZiAoIXBhcnNlUGVyY2VudGFnZSh0YiwgJm9wZXJhbmQpKSByZXR1cm4gMDsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSAndCc6CisgICAgICBvcGVyYW5kICs9IDE7CisgICAgICBpZiAoIXBhcnNlVGVtcG8odGIsICZvcGVyYW5kKSkgcmV0dXJuIDA7CisgICAgICBicmVhazsKKworICAgIGRlZmF1bHQ6CisgICAgICBpZiAoIXBhcnNlVG9uZSh0YiwgJm9wZXJhbmQpKSByZXR1cm4gMDsKKyAgICAgIGJyZWFrOworICB9CisKKyAgaWYgKCpvcGVyYW5kKSB7CisgICAgbG9nU3ludGF4RXJyb3IodGIsICJleHRyYSBkYXRhIik7CisgICAgcmV0dXJuIDA7CisgIH0KKworICByZXR1cm4gMTsKK30KKworaW50CitwYXJzZVR1bmVUZXh0IChUdW5lQnVpbGRlciAqdGIsIGNvbnN0IHdjaGFyX3QgKnRleHQpIHsKKyAgdGItPnNvdXJjZS50ZXh0ID0gdGV4dDsKKworICB3Y2hhcl90IGJ1ZmZlclt3Y3NsZW4odGV4dCkgKyAxXTsKKyAgd2NzY3B5KGJ1ZmZlciwgdGV4dCk7CisKKyAgc3RhdGljIGNvbnN0IHdjaGFyX3QgKmRlbGltaXRlcnMgPSBXU19DKCIgXHRcclxuIik7CisgIHdjaGFyX3QgKnN0cmluZyA9IGJ1ZmZlcjsKKyAgd2NoYXJfdCAqb3BlcmFuZDsKKworI2lmICFkZWZpbmVkKF9fTUlOR1czMl9fKSAmJiAhZGVmaW5lZChfX01TRE9TX18pCisgIHdjaGFyX3QgKm5leHQ7CisjZW5kaWYgLyogX19NSU5HVzMyX18gKi8KKworICB3aGlsZSAoKG9wZXJhbmQgPSB3Y3N0b2soc3RyaW5nLCBkZWxpbWl0ZXJzCisjaWZuZGVmIF9fTUlOR1czMl9fCisgICAgICAgICAgICAgICAgICAgICAgICAgICAsICZuZXh0CisjZW5kaWYgLyogX19NSU5HVzMyX18gKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgKSkpIHsKKyAgICBpZiAoKm9wZXJhbmQgPT0gJyMnKSBicmVhazsKKyAgICBpZiAoIXBhcnNlQ29tbWFuZCh0Yiwgb3BlcmFuZCkpIHJldHVybiAwOworICAgIHN0cmluZyA9IE5VTEw7CisgIH0KKworICByZXR1cm4gMTsKK30KKworaW50CitwYXJzZVR1bmVTdHJpbmcgKFR1bmVCdWlsZGVyICp0YiwgY29uc3QgY2hhciAqc3RyaW5nKSB7CisgIGNvbnN0IHNpemVfdCBzaXplID0gc3RybGVuKHN0cmluZykgKyAxOworICB3Y2hhcl90IGNoYXJhY3RlcnNbc2l6ZV07CisKKyAgY29uc3QgY2hhciAqYnl0ZSA9IHN0cmluZzsKKyAgd2NoYXJfdCAqY2hhcmFjdGVyID0gY2hhcmFjdGVyczsKKworICBjb252ZXJ0VXRmOFRvV2NoYXJzKCZieXRlLCAmY2hhcmFjdGVyLCBzaXplKTsKKworICByZXR1cm4gcGFyc2VUdW5lVGV4dCh0YiwgY2hhcmFjdGVycyk7Cit9CisKK1RvbmVFbGVtZW50ICoKK2dldFR1bmUgKFR1bmVCdWlsZGVyICp0YikgeworICBpZiAodGItPnN0YXR1cyA9PSBUVU5FX1NUQVRVU19PSykgeworICAgIHVuc2lnbmVkIGludCBjb3VudCA9IHRiLT50b25lcy5jb3VudDsKKyAgICBUb25lRWxlbWVudCAqdHVuZTsKKworICAgIGlmICgodHVuZSA9IG1hbGxvYyhBUlJBWV9TSVpFKHR1bmUsIChjb3VudCArIDEpKSkpKSB7CisgICAgICBtZW1jcHkodHVuZSwgdGItPnRvbmVzLmFycmF5LCBBUlJBWV9TSVpFKHR1bmUsIGNvdW50KSk7CisKKyAgICAgIHN0YXRpYyBjb25zdCBUb25lRWxlbWVudCB0b25lID0gVE9ORV9TVE9QKCk7CisgICAgICB0dW5lW2NvdW50XSA9IHRvbmU7CisKKyAgICAgIHJldHVybiB0dW5lOworICAgIH0gZWxzZSB7CisgICAgICBsb2dNYWxsb2NFcnJvcigpOworICAgIH0KKyAgfQorCisgIHJldHVybiBOVUxMOworfQorCitUdW5lU3RhdHVzCitnZXRUdW5lU3RhdHVzIChUdW5lQnVpbGRlciAqdGIpIHsKKyAgcmV0dXJuIHRiLT5zdGF0dXM7Cit9CisKK3ZvaWQKK3NldFR1bmVTb3VyY2VOYW1lIChUdW5lQnVpbGRlciAqdGIsIGNvbnN0IGNoYXIgKm5hbWUpIHsKKyAgdGItPnNvdXJjZS5uYW1lID0gbmFtZTsKK30KKwordm9pZAorc2V0VHVuZVNvdXJjZUluZGV4IChUdW5lQnVpbGRlciAqdGIsIHVuc2lnbmVkIGludCBpbmRleCkgeworICB0Yi0+c291cmNlLmluZGV4ID0gaW5kZXg7Cit9CisKK3ZvaWQKK2luY3JlbWVudFR1bmVTb3VyY2VJbmRleCAoVHVuZUJ1aWxkZXIgKnRiKSB7CisgIHRiLT5zb3VyY2UuaW5kZXggKz0gMTsKK30KKworc3RhdGljIGlubGluZSB2b2lkCitzZXRQYXJhbWV0ZXIgKAorICBUdW5lUGFyYW1ldGVyICpwYXJhbWV0ZXIsIGNvbnN0IGNoYXIgKm5hbWUsCisgIFR1bmVOdW1iZXIgbWluaW11bSwgVHVuZU51bWJlciBtYXhpbXVtLCBUdW5lTnVtYmVyIGN1cnJlbnQKKykgeworICBwYXJhbWV0ZXItPm5hbWUgPSBuYW1lOworICBwYXJhbWV0ZXItPm1pbmltdW0gPSBtaW5pbXVtOworICBwYXJhbWV0ZXItPm1heGltdW0gPSBtYXhpbXVtOworICBwYXJhbWV0ZXItPmN1cnJlbnQgPSBjdXJyZW50OworfQorCit2b2lkCityZXNldFR1bmVCdWlsZGVyIChUdW5lQnVpbGRlciAqdGIpIHsKKyAgdGItPnN0YXR1cyA9IFRVTkVfU1RBVFVTX09LOworCisgIHRiLT50b25lcy5jb3VudCA9IDA7CisKKyAgc2V0UGFyYW1ldGVyKCZ0Yi0+ZHVyYXRpb24sICJub3RlIGR1cmF0aW9uIiwgMSwgVUlOVDE2X01BWCwgMCk7CisgIHNldFBhcmFtZXRlcigmdGItPm5vdGUsICJNSURJIG5vdGUgbnVtYmVyIiwgZ2V0TG93ZXN0Tm90ZSgpLCBnZXRIaWdoZXN0Tm90ZSgpLCBOT1RFX01JRERMRV9DK25vdGVPZmZzZXRzWzJdKTsKKyAgc2V0UGFyYW1ldGVyKCZ0Yi0+b2N0YXZlLCAib2N0YXZlIG51bWJlciIsIDAsIDksIDApOworICBzZXRQYXJhbWV0ZXIoJnRiLT5wZXJjZW50YWdlLCAicGVyY2VudGFnZSIsIDEsIDEwMCwgODApOworICBzZXRQYXJhbWV0ZXIoJnRiLT50ZW1wbywgInRlbXBvIiwgNDAsIFVJTlQ4X01BWCwgKDYwICogMikpOworCisgIHRiLT5kdXJhdGlvbk11bHRpcGxpZXIgPSAxOworICB0Yi0+ZHVyYXRpb25EaXZpc29yID0gMTsKKworICBzZXRBY2NpZGVudGFscyh0YiwgMCk7CisgIHNldEN1cnJlbnRPY3RhdmUodGIpOworCisgIHRiLT5zb3VyY2UudGV4dCA9IFdTX0MoIiIpOworICB0Yi0+c291cmNlLm5hbWUgPSAiIjsKKyAgdGItPnNvdXJjZS5pbmRleCA9IDA7Cit9CisKK1R1bmVCdWlsZGVyICoKK25ld1R1bmVCdWlsZGVyICh2b2lkKSB7CisgIFR1bmVCdWlsZGVyICp0YjsKKworICBpZiAoKHRiID0gbWFsbG9jKHNpemVvZigqdGIpKSkpIHsKKyAgICBtZW1zZXQodGIsIDAsIHNpemVvZigqdGIpKTsKKworICAgIHRiLT50b25lcy5hcnJheSA9IE5VTEw7CisgICAgdGItPnRvbmVzLnNpemUgPSAwOworCisgICAgcmVzZXRUdW5lQnVpbGRlcih0Yik7CisgICAgcmV0dXJuIHRiOworICB9IGVsc2UgeworICAgIGxvZ01hbGxvY0Vycm9yKCk7CisgIH0KKworICByZXR1cm4gTlVMTDsKK30KKwordm9pZAorZGVzdHJveVR1bmVCdWlsZGVyIChUdW5lQnVpbGRlciAqdGIpIHsKKyAgaWYgKHRiLT50b25lcy5hcnJheSkgZnJlZSh0Yi0+dG9uZXMuYXJyYXkpOworICBmcmVlKHRiKTsKK30KKworQkVHSU5fVVNBR0VfTk9URVModHVuZUJ1aWxkZXJVc2FnZU5vdGVzKQorICAiQSBjb21tYW5kIGdyb3VwIGlzIHplcm8gb3IgbW9yZSBjb21tYW5kcyBzZXBhcmF0ZWQgZnJvbSBvbmUgYW5vdGhlciBieSB3aGl0ZXNwYWNlLiIsCisgICJBIG51bWJlciBzaWduIFsjXSBhdCB0aGUgYmVnaW5uaW5nIG9yIGFmdGVyIHdoaXRlc3BhY2UgYmVnaW5zIGEgY29tbWVudC4iLAorICAiIiwKKyAgIkVhY2ggY29tbWFuZCBpcyBhIGxldHRlciBpbW1lZGlhdGVseSBmb2xsb3dlZCBieSBpdHMgcGFyYW1ldGVyKHMpLiIsCisgICJJbiB0aGUgZm9sbG93aW5nIGRlc2NyaXB0aW9ucywiLAorICAiPGFuZ2xlIGJyYWNrZXRzPiBhcmUgdXNlZCB0byBzaG93IHRoYXQgYSBwYXJhbWV0ZXIgaXMgcmVxdWlyZWQiLAorICAiYW5kIFtzcXVhcmUgYnJhY2tldHNdIGFyZSB1c2VkIHRvIHNob3cgdGhhdCBpdCdzIG9wdGlvbmFsLiIsCisgICJXaGlsZSBhIGNvbW1hbmQgZG9lc24ndCBjb250YWluIGFueSBzcGFjZXMsIHNvbWUgb2YgdGhlIGRlc2NyaXB0aW9ucyBpbmNsdWRlIHRoZW0gZm9yIGNsYXJpdHkuIiwKKyAgIldoZW4gdGhlcmUgaXMgYSBjaG9pY2UsIHtjdXJseSBicmFja2V0c30gY29tYmluZWQgd2l0aCB2ZXJ0aWNhbCBiYXIgW3xdIHNlcGFyYXRvcnMgYXJlIHVzZWQuIiwKKyAgIlRoZXNlIGNvbW1hbmRzIGFyZSByZWNvZ25pemVkOiIsCisgICIgIGEtZyAgdGhlIHNldmVuIHN0YW5kYXJkIG5vdGUgbGV0dGVycyIsCisgICIgIGsgICAgY2hhbmdlIHRoZSBrZXkiLAorICAiICBtICAgIGEgTUlESSBub3RlIG51bWJlciIsCisgICIgIHAgICAgY2hhbmdlIHRoZSBub3RlIHBlcmlvZCIsCisgICIgIHIgICAgYSByZXN0IiwKKyAgIiAgdCAgICBjaGFuZ2UgdGhlIHRlbXBvIiwKKyAgIiIsCisgICJBIG5vdGUgY29tbWFuZCBiZWdpbnMgd2l0aCBhbnkgb2YgdGhlIHNldmVuIHN0YW5kYXJkIG5vdGUgbGV0dGVycyAoYSwgYiwgYywgZCwgZSwgZiwgZykuIiwKKyAgIkl0cyBnZW5lcmFsIHN5bnRheCBpczoiLAorICAiIiwKKyAgIiAgPGxldHRlcj4gW29jdGF2ZV0gW2FjY2lkZW50YWxdIFtkdXJhdGlvbl0iLAorICAiIiwKKyAgIlRoZSBtPG51bWJlcj5bZHVyYXRpb25dIGNvbW1hbmQgc3BlY2lmaWVzIGEgbm90ZSBieSBpdHMgTUlESSBudW1iZXIuIiwKKyAgIlRoZSBudW1iZXIgbXVzdCBiZSB3aXRoaW4gdGhlIHJhbmdlIDEgdGhyb3VnaCAxMjcuIiwKKyAgIk1JREkgc3RhbmRzIGZvciBNdXNpY2FsIEluc3RydW1lbnQgRGlnaXRhbCBJbnRlcmZhY2UuIiwKKyAgIkl0IHNwZWNpZmllcyB0aGF0IE1pZGRsZS1DIGlzIG5vdGUgNjAsICIsCisgICJ0aGF0IGEgaGlnaGVyIG51bWJlciByZXByZXNlbnRzIGEgaGlnaGVyIHBpdGNoLCIsCisgICJhbmQgdGhhdCBhZGphY2VudCBudW1iZXJzIHJlcHJlc2VudCBub3RlcyB0aGF0IGRpZmZlciBpbiBwaXRjaCBieSAxIHNlbWl0b25lLiIsCisgICIiLAorICAiVGhlIHJbZHVyYXRpb25dIGNvbW1hbmQgc3BlY2lmaWVzIGEgcmVzdCAtIHRoZSBtdXNpY2FsIHdheSBvZiBzYXlpbmcgXCJubyBub3RlXCIuIiwKKyAgIiIsCisgICJPY3RhdmVzIGFyZSBudW1iZXJlZCBhY2NvcmRpbmcgdG8gSW50ZXJuYXRpb25hbCBQaXRjaCBOb3RhdGlvbiwiLAorICAic28gdGhlIHNjYWxlIHN0YXJ0aW5nIHdpdGggTWlkZGxlLUMgaXMgb2N0YXZlIDQuIiwKKyAgIk9jdGF2ZXMgMCB0aHJvdWdoIDkgbWF5IGJlIHNwZWNpZmllZCwgYWx0aG91Z2ggbm90ZXMgYWJvdmUgZzkgY2FuJ3QgYmUgcGxheWVkICh0aGlzIGlzIGEgTUlESSBsaW1pdGF0aW9uKS4iLAorICAiSWYgdGhlIG9jdGF2ZSBvZiB0aGUgZmlyc3Qgbm90ZSBvZiB0aGUgdHVuZSBpc24ndCBzcGVjaWZpZWQgdGhlbiBvY3RhdmUgNCBpcyBhc3N1bWVkLiIsCisgICJJZiBpdCBpc24ndCBzcGVjaWZpZWQgZm9yIGFueSBvdGhlciBub3RlIHRoZW4gdGhlIHRlY2huaXF1ZSB1c2VkIGluIGJyYWlsbGUgbXVzaWMgaXMgdXNlZC4iLAorICAiTm9ybWFsbHksIHRoZSBvY3RhdmUgb2YgdGhlIHByZXZpb3VzIG5vdGUgaXMgYXNzdW1lZC4iLAorICAiSWYsIGhvd2V2ZXIsIHRoZSBub3RlIGluIGFuIGFkamFjZW50IG9jdGF2ZSBpcyB0aHJlZSBzZW1pdG9uZXMgb3IgbGVzcyBhd2F5IGZyb20gdGhlIHByZXZpb3VzIG9uZSB0aGVuIHRoZSBuZXcgb2N0YXZlIGlzIGFzc3VtZWQuIiwKKyAgIiIsCisgICJJZiB0aGUgYWNjaWRlbnRhbCAoc2hhcnAsIGZsYXQsIG9yIG5hdHVyYWwpIGlzbid0IHNwZWNpZmllZCB0aGVuIHRoZSBvbmUgZGVmaW5lZCBieSB0aGUgY3VycmVudCBrZXkgaXMgYXNzdW1lZC4iLAorICAiSXQgbWF5IGJlIHNwZWNpZmllZCBhcyIsCisgICJhIHBsdXMgc2lnbiBbK10gZm9yIHNoYXJwLCIsCisgICJhIG1pbnVzIHNpZ24gWy1dIGZvciBmbGF0LCIsCisgICJvciBhbiBlcXVhbCBzaWduIFs9XSBmb3IgbmF0dXJhbC4iLAorICAiTW9yZSB0aGFuIG9uZSBzaGFycCBvciBmbGF0ICgrIG9yIC0pIG1heSBiZSBzcGVjaWZpZWQuIiwKKyAgIiIsCisgICJJZiB0aGUgZHVyYXRpb24gb2YgYSBudG9lIGlzbid0IHNwZWNpZmllZCB0aGVuIHRoZSBkdXJhdGlvbiBvZiB0aGUgcHJldmlvdXMgbm90ZSBpcyBhc3N1bWVkLiIsCisgICJJZiB0aGUgZHVyYXRpb24gb2YgdGhlIGZpcnN0IG5vdGUgaXNuJ3Qgc3BlY2lmaWVkIHRoZW4gdGhlIGxlbmd0aCBvZiBvbmUgYmVhdCBhdCB0aGUgZGVmYXVsdCB0ZW1wbyBpcyBhc3N1bWVkLiIsCisgICJBIGR1cmF0aW9uIG1heSBiZSBzcGVjaWZpZWQgaW4gdHdvIHdheXM6IiwKKyAgIiIsCisgICJAPG51bWJlcj46IiwKKyAgIkl0IG1heSBiZSBleHBsaWNpdGx5IHNldCBieSBwcmVmaXhpbmcgdGhlIG51bWJlciBvZiBtaWxsaXNlY29uZHMgd2l0aCBhbiBhdCBzaWduIFtAXS4iLAorICAiIiwKKyAgIlsqPG11bHRpcGxpZXI+XSBbLzxkaXZpc29yPl06IiwKKyAgIkl0IG1heSBiZSBjYWxjdWxhdGVkIGJ5IGFwcGx5aW5nIGEgbXVsdGlwbGllciBhbmQvb3IgYSBkaXZpc29yLCBpbiB0aGF0IG9yZGVyLCB0byB0aGUgbGVuZ3RoIG9mIG9uZSBiZWF0IGF0IHRoZSBjdXJyZW50IHRlbXBvLiIsCisgICJUaGUgbXVsdGlwbGllciBpcyBhIG51bWJlciBwcmVmaXhlZCB3aXRoIGFuIGFzdGVyaXNrIFsqXSBhbmQgbXVzdCBiZSB3aXRoaW4gdGhlIHJhbmdlIDEgdGhyb3VnaCAxNi4iLAorICAiVGhlIGRpdmlzb3IgaXMgYSBudW1iZXIgcHJlZml4ZWQgd2l0aCBhIHNsYXNoIFsvXSBhbmQgbXVzdCBiZSB3aXRoaW4gdGhlIHJhbmdlIDEgdGhyb3VnaCAxMjguIiwKKyAgIkJvdGggZGVmYXVsdCB0byAxLiIsCisgICIiLAorICAiQm90aCB3YXlzIG9mIHNwZWNpZnlpbmcgdGhlIGR1cmF0aW9uIGFsbG93IGFueSBudW1iZXIgb2YgZG90cyBbLl0gdG8gYmUgYXBwZW5kZWQuIiwKKyAgIlRoZXNlIGRvdHMgbW9kaWZ5IHRoZSBkdXJhdGlvbiBvZiB0aGUgbm90ZSBpbiB0aGUgc2FtZSB3YXkgdGhhdCBhZGRpbmcgZG90cyB0byBhIG5vdGUgZG9lcyBpbiBwcmludCAoYW5kIGJyYWlsbGUpIG11c2ljLiIsCisgICJGb3IgZXhhbXBsZToiLAorICAiQXQgYSB0ZW1wbyBvZiAxMjAgKGJlYXRzIHBlciBtaW51dGUpLCBhIHdob2xlIG5vdGUgKDQgYmVhdHMpIGhhcyBhIGR1cmF0aW9uIG9mIDIgc2Vjb25kcy4gU286IiwKKyAgIiAgI2RvdHMgIHNlY29uZHMgIGJlYXRzIiwKKyAgIiAgICAwICAgICAyICAgICAgIDQiLAorICAiICAgIDEgICAgIDMgICAgICAgNiIsCisgICIgICAgMiAgICAgMy41ICAgICA3IiwKKyAgIiAgICAzICAgICAzLjc1ICAgIDcrMS8yIiwKKyAgIiAgIGV0YyIsCisgICIiLAorICAiVGhlIGsgY29tbWFuZCBjaGFuZ2VzIHRoZSBrZXkuIiwKKyAgIlRoZSBpbml0aWFsIGtleSBpcyBDIE1ham9yLCBpLmUuIGl0IGhhcyBubyBhY2NpZGVudGFscy4iLAorICAiVGhpcyBjb21tYW5kIGhhcyB0d28gZm9ybXM6IiwKKyAgIiIsCisgICJrPHJvb3Q+W21vZGVdOiIsCisgICJUaGUgcm9vdCBub3RlIG11c3QgYmUgb25lIG9mIHRoZSBzZXZlbiBzdGFuZGFyZCBub3RlIGxldHRlcnMgKGEsIGIsIGMsIGQsIGUsIGYsIGcpLiIsCisgICJUaGUgbW9kZSBtYXkgYWxzbyBiZSBzcGVjaWZpZWQuIiwKKyAgIkFueSBVbmFtYmlndW91cyBhYmJyZXZpYXRpb24gb2YgaXRzIG5hbWUgbWF5IGJlIHVzZWQuIiwKKyAgIlRoZSByZWNvZ25pemVkIG1vZGUgbmFtZXMgYXJlOiIsCisgICJtYWpvciwiLAorICAibWlub3IsIiwKKyAgImlvbmlhbiwiLAorICAiZG9yaWFuLCIsCisgICJwaHJ5Z2lhbiwiLAorICAibHlkaWFuLCIsCisgICJtaXhvbHlkaWFuLCIsCisgICJhZW9saWFuLCIsCisgICJsb2NyaWFuLiIsCisgICIiLAorICAia1tjb3VudF08YWNjaWRlbnRhbD46IiwKKyAgIlRoZSBrZXkgbWF5IGFsc28gYmUgaW1wbGllZCBieSBzcGVjaWZ5aW5nIGhvdyBtYW55IGFjY2lkZW50YWxzIChzaGFycHMgb3IgZmxhdHMpIGl0IGhhcy4iLAorICAiVGhlIGNvdW50IG11c3QgYmUgYSBudW1iZXIgd2l0aGluIHRoZSByYW5nZSAxIHRocm91Z2ggMTIgKHRoZSBudW1iZXIgb2Ygc2VtaXRvbmVzIHdpdGhpbiBhIHNjYWxlKS4iLAorICAiVGhlIGFjY2lkZW50YWwgbXVzdCBiZSBlaXRoZXIgYSBwbHVzIHNpZ24gWytdIGZvciBzaGFycCBvciBhIG1pbnVzIHNpZ24gWy1dIGZvciBmbGF0LiIsCisgICJJZiB0aGUgY291bnQgaXMgc3BlY2lmaWVkIHRoZW4gdGhlcmUgbXVzdCBiZSBvbmUgYWNjaWRlbnRhbCBpbmRpY2F0b3IuIiwKKyAgIklmIGl0IGlzbid0IHNwZWNpZmllZCB0aGVuIG1vcmUgdGhhbiBvbmUgYWNjaWRlbnRhbCBpbmRpY2F0b3IgbWF5IGJlIHNwZWNpZmllZC4iLAorICAiIiwKKyAgIlRoZSBwPG51bWJlcj4gY29tbWFuZCBjaGFuZ2VzIHRoZSBub3RlIHBlcmlvZCAtIHRoZSBhbW91bnQgb2YgdGltZSB3aXRoaW4gaXRzIGR1cmF0aW9uIHRoYXQgYSBub3RlIGlzIG9uLiIsCisgICJJdCdzIGEgcGVyY2VudGFnZSwgYW5kIG11c3QgYmUgd2l0aGluIHRoZSByYW5nZSAxIHRocm91Z2ggMTAwLiIsCisgICJUaGUgaW5pdGlhbCBub3RlIHBlcmlvZCBpcyA4MCBwZXJjZW50LiIsCisgICIiLAorICAiVGhlIHQ8bnVtYmVyPiBjb21tYW5kIGNoYW5nZXMgdGhlIHRlbXBvIChzcGVlZCkuIiwKKyAgIkl0J3MgdGhlIG51bWJlciBvZiBiZWF0cyBwZXIgbWludXRlLCBhbmQgbXVzdCBiZSB3aXRoaW4gdGhlIHJhbmdlIDQwIHRocm91Z2ggMjU1LiIsCisgICJUaGUgaW5pdGlhbCB0ZW1wbyBpcyAxMjAgYmVhdHMgcGVyIG1pbnV0ZS4iLAorRU5EX1VTQUdFX05PVEVTCmRpZmYgLS1naXQgYS9Qcm9ncmFtcy90dW5lX3V0aWxzLmMgYi9Qcm9ncmFtcy90dW5lX3V0aWxzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWIxZmUxYQotLS0gL2Rldi9udWxsCisrKyBiL1Byb2dyYW1zL3R1bmVfdXRpbHMuYwpAQCAtMCwwICsxLDE1NyBAQAorLyoKKyAqIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisgKiAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisgKgorICogQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKKyNpbmNsdWRlICJwcm9sb2d1ZS5oIgorCisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKyNpbmNsdWRlICJsb2cuaCIKKyNpbmNsdWRlICJ0dW5lLmgiCisjaW5jbHVkZSAidHVuZV91dGlscy5oIgorI2luY2x1ZGUgInR1bmVfdHlwZXMuaCIKKyNpbmNsdWRlICJtaWRpLmgiCisjaW5jbHVkZSAicGFyc2UuaCIKKyNpbmNsdWRlICJwcmVmcy5oIgorCitzdGF0aWMgY29uc3QgY2hhciAqdHVuZURldmljZU5hbWVzW10gPSB7CisgICJiZWVwZXIiLAorICAicGNtIiwKKyAgIm1pZGkiLAorICAiZm0iLAorICBOVUxMCit9OworCitjb25zdCBjaGFyICoKK2dldFR1bmVEZXZpY2VOYW1lIChUdW5lRGV2aWNlIGRldmljZSkgeworICByZXR1cm4gdHVuZURldmljZU5hbWVzW2RldmljZV07Cit9CisKK2ludAorcGFyc2VUdW5lRGV2aWNlIChjb25zdCBjaGFyICpzZXR0aW5nKSB7CisgIGlmIChzZXR0aW5nICYmICpzZXR0aW5nKSB7CisgICAgdW5zaWduZWQgaW50IGRldmljZTsKKworICAgIGlmICghdmFsaWRhdGVDaG9pY2UoJmRldmljZSwgc2V0dGluZywgdHVuZURldmljZU5hbWVzKSkgeworICAgICAgbG9nTWVzc2FnZShMT0dfRVJSLCAiJXM6ICVzIiwgImludmFsaWQgdHVuZSBkZXZpY2UiLCBzZXR0aW5nKTsKKyAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIHByZWZzLnR1bmVEZXZpY2UgPSBkZXZpY2U7CisgIH0KKworICByZXR1cm4gMTsKK30KKworaW50CitzZXRUdW5lRGV2aWNlICh2b2lkKSB7CisgIHVuc2lnbmVkIGNoYXIgZGV2aWNlID0gcHJlZnMudHVuZURldmljZTsKKworICBpZiAoIXR1bmVTZXREZXZpY2UoZGV2aWNlKSkgeworICAgIGxvZ01lc3NhZ2UoTE9HX0VSUiwgInVuc3VwcG9ydGVkIHR1bmUgZGV2aWNlOiAlcyIsIGdldFR1bmVEZXZpY2VOYW1lKGRldmljZSkpOworICAgIHJldHVybiAwOworICB9CisKKyAgcmV0dXJuIDE7Cit9CisKK2ludAorcGFyc2VUdW5lVm9sdW1lIChjb25zdCBjaGFyICpzZXR0aW5nKSB7CisgIGlmIChzZXR0aW5nICYmICpzZXR0aW5nKSB7CisgICAgc3RhdGljIGNvbnN0IGludCBtaW5pbXVtID0gMDsKKyAgICBzdGF0aWMgY29uc3QgaW50IG1heGltdW0gPSAxMDA7CisgICAgaW50IHZvbHVtZTsKKworICAgIGlmICghdmFsaWRhdGVJbnRlZ2VyKCZ2b2x1bWUsIHNldHRpbmcsICZtaW5pbXVtLCAmbWF4aW11bSkpIHsKKyAgICAgIGxvZ01lc3NhZ2UoTE9HX0VSUiwgIiVzOiAlcyIsICJpbnZhbGlkIHZvbHVtZSBwZXJjZW50YWdlIiwgc2V0dGluZyk7CisgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBzd2l0Y2ggKHByZWZzLnR1bmVEZXZpY2UpIHsKKyAgICAgIGNhc2UgdGRQY206CisgICAgICAgIHByZWZzLnBjbVZvbHVtZSA9IHZvbHVtZTsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGNhc2UgdGRNaWRpOgorICAgICAgICBwcmVmcy5taWRpVm9sdW1lID0gdm9sdW1lOworICAgICAgICBicmVhazsKKworICAgICAgY2FzZSB0ZEZtOgorICAgICAgICBwcmVmcy5mbVZvbHVtZSA9IHZvbHVtZTsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgfQorCisgIHJldHVybiAxOworfQorCisjaWZkZWYgSEFWRV9NSURJX1NVUFBPUlQKK3N0YXRpYyBpbnQKK3ZhbGlkYXRlTWlkaUluc3RydW1lbnQgKHVuc2lnbmVkIGNoYXIgKnZhbHVlLCBjb25zdCBjaGFyICpzdHJpbmcpIHsKKyAgc2l6ZV90IHN0cmluZ0xlbmd0aCA9IHN0cmxlbihzdHJpbmcpOworICB1bnNpZ25lZCBjaGFyIGluc3RydW1lbnQ7CisgIGZvciAoaW5zdHJ1bWVudD0wOyBpbnN0cnVtZW50PG1pZGlJbnN0cnVtZW50Q291bnQ7ICsraW5zdHJ1bWVudCkgeworICAgIGNvbnN0IGNoYXIgKmNvbXBvbmVudCA9IG1pZGlJbnN0cnVtZW50VGFibGVbaW5zdHJ1bWVudF07CisgICAgc2l6ZV90IGNvbXBvbmVudExlZnQgPSBzdHJsZW4oY29tcG9uZW50KTsKKyAgICBjb25zdCBjaGFyICp3b3JkID0gc3RyaW5nOworICAgIHNpemVfdCB3b3JkTGVmdCA9IHN0cmluZ0xlbmd0aDsKKyAgICB7CisgICAgICBjb25zdCBjaGFyICpkZWxpbWl0ZXIgPSBtZW1jaHIoY29tcG9uZW50LCAnKCcsIGNvbXBvbmVudExlZnQpOworICAgICAgaWYgKGRlbGltaXRlcikgY29tcG9uZW50TGVmdCA9IGRlbGltaXRlciAtIGNvbXBvbmVudDsKKyAgICB9CisgICAgd2hpbGUgKDEpIHsKKyAgICAgIHdoaWxlICgqY29tcG9uZW50ID09ICcgJykgY29tcG9uZW50KyssIGNvbXBvbmVudExlZnQtLTsKKyAgICAgIGlmICgoY29tcG9uZW50TGVmdCA9PSAwKSAhPSAod29yZExlZnQgPT0gMCkpIGJyZWFrOyAKKyAgICAgIGlmICghY29tcG9uZW50TGVmdCkgeworICAgICAgICAqdmFsdWUgPSBpbnN0cnVtZW50OworICAgICAgICByZXR1cm4gMTsKKyAgICAgIH0KKyAgICAgIHsKKyAgICAgICAgc2l6ZV90IHdvcmRMZW5ndGggPSB3b3JkTGVmdDsKKyAgICAgICAgc2l6ZV90IGNvbXBvbmVudExlbmd0aCA9IGNvbXBvbmVudExlZnQ7CisgICAgICAgIGNvbnN0IGNoYXIgKmRlbGltaXRlcjsKKyAgICAgICAgaWYgKChkZWxpbWl0ZXIgPSBtZW1jaHIod29yZCwgJy0nLCB3b3JkTGVmdCkpKSB3b3JkTGVuZ3RoID0gZGVsaW1pdGVyIC0gd29yZDsKKyAgICAgICAgaWYgKChkZWxpbWl0ZXIgPSBtZW1jaHIoY29tcG9uZW50LCAnICcsIGNvbXBvbmVudExlZnQpKSkgY29tcG9uZW50TGVuZ3RoID0gZGVsaW1pdGVyIC0gY29tcG9uZW50OworICAgICAgICBpZiAoc3RybmNhc2VjbXAod29yZCwgY29tcG9uZW50LCB3b3JkTGVuZ3RoKSAhPSAwKSBicmVhazsKKyAgICAgICAgd29yZCArPSB3b3JkTGVuZ3RoOyB3b3JkTGVmdCAtPSB3b3JkTGVuZ3RoOworICAgICAgICBpZiAoKndvcmQpIHdvcmQrKywgd29yZExlZnQtLTsKKyAgICAgICAgY29tcG9uZW50ICs9IGNvbXBvbmVudExlbmd0aDsgY29tcG9uZW50TGVmdCAtPSBjb21wb25lbnRMZW5ndGg7CisgICAgICB9CisgICAgfQorICB9CisgIHJldHVybiAwOworfQorCitpbnQKK3BhcnNlVHVuZUluc3RydW1lbnQgKGNvbnN0IGNoYXIgKnNldHRpbmcpIHsKKyAgaWYgKHNldHRpbmcgJiYgKnNldHRpbmcpIHsKKyAgICB1bnNpZ25lZCBjaGFyIGluc3RydW1lbnQ7CisKKyAgICBpZiAoIXZhbGlkYXRlTWlkaUluc3RydW1lbnQoJmluc3RydW1lbnQsIHNldHRpbmcpKSB7CisgICAgICBsb2dNZXNzYWdlKExPR19FUlIsICIlczogJXMiLCAiaW52YWxpZCBtdXNpY2FsIGluc3RydW1lbnQiLCBzZXR0aW5nKTsKKyAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIHByZWZzLm1pZGlJbnN0cnVtZW50ID0gaW5zdHJ1bWVudDsKKyAgfQorCisgIHJldHVybiAxOworfQorI2VuZGlmIC8qIEhBVkVfTUlESV9TVVBQT1JUICovCmRpZmYgLS1naXQgYS9Qcm9ncmFtcy91bmljb2RlLmMgYi9Qcm9ncmFtcy91bmljb2RlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjBkYzFjMwotLS0gL2Rldi9udWxsCisrKyBiL1Byb2dyYW1zL3VuaWNvZGUuYwpAQCAtMCwwICsxLDQwMCBAQAorLyoKKyAqIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisgKiAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisgKgorICogQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKKyNpbmNsdWRlICJwcm9sb2d1ZS5oIgorCisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKyNpbmNsdWRlICJsb2cuaCIKKyNpbmNsdWRlICJ1bmljb2RlLmgiCisjaW5jbHVkZSAiYXNjaWkuaCIKKworI2lmZGVmIEhBVkVfSUNVCisjaW5jbHVkZSA8dW5pY29kZS91dmVyc2lvbi5oPgorI2luY2x1ZGUgPHVuaWNvZGUvdWNoYXIuaD4KKworI2lmZGVmIEhBVkVfVU5JQ09ERV9VTk9STTJfSAorI2luY2x1ZGUgPHVuaWNvZGUvdW5vcm0yLmg+CisjZWxzZSAvKiB1bm9ybSAqLworI2luY2x1ZGUgPHVuaWNvZGUvdW5vcm0uaD4KKyNlbmRpZiAvKiB1bm9ybSAqLworCitzdGF0aWMgaW50Citpc1VjaGFyQ29tcGF0aWJsZSAod2NoYXJfdCBjaGFyYWN0ZXIpIHsKKyAgVUNoYXIgdWMgPSBjaGFyYWN0ZXI7CisgIHJldHVybiB1YyA9PSBjaGFyYWN0ZXI7Cit9CisKK3N0YXRpYyBpbnQKK2dldE5hbWUgKHdjaGFyX3QgY2hhcmFjdGVyLCBjaGFyICpidWZmZXIsIHNpemVfdCBzaXplLCBVQ2hhck5hbWVDaG9pY2UgY2hvaWNlKSB7CisgIFVFcnJvckNvZGUgZXJyb3IgPSBVX1pFUk9fRVJST1I7CisgIHVfY2hhck5hbWUoY2hhcmFjdGVyLCBjaG9pY2UsIGJ1ZmZlciwgc2l6ZSwgJmVycm9yKTsKKyAgcmV0dXJuIFVfU1VDQ0VTUyhlcnJvcikgJiYgKmJ1ZmZlcjsKK30KKworc3RhdGljIGludAorZ2V0QnlOYW1lICh3Y2hhcl90ICpjaGFyYWN0ZXIsIGNvbnN0IGNoYXIgKm5hbWUsIFVDaGFyTmFtZUNob2ljZSBjaG9pY2UpIHsKKyAgVUVycm9yQ29kZSBlcnJvciA9IFVfWkVST19FUlJPUjsKKyAgVUNoYXIgdWMgPSB1X2NoYXJGcm9tTmFtZShjaG9pY2UsIG5hbWUsICZlcnJvcik7CisgIGlmICghVV9TVUNDRVNTKGVycm9yKSkgcmV0dXJuIDA7CisKKyAgKmNoYXJhY3RlciA9IHVjOworICByZXR1cm4gMTsKK30KKworc3RhdGljIGludAorbmV4dEJhc2VDaGFyYWN0ZXIgKGNvbnN0IFVDaGFyICoqY3VycmVudCwgY29uc3QgVUNoYXIgKmVuZCkgeworICBkbyB7CisgICAgaWYgKCpjdXJyZW50ID09IGVuZCkgcmV0dXJuIDA7CisgIH0gd2hpbGUgKHVfZ2V0Q29tYmluaW5nQ2xhc3MoKigqY3VycmVudCkrKykpOworCisgIHJldHVybiAxOworfQorI2VuZGlmIC8qIEhBVkVfSUNVICovCisKKyNpZmRlZiBIQVZFX0lDT05WX0gKKyNpbmNsdWRlIDxpY29udi5oPgorI2VuZGlmIC8qIEhBVkVfSUNPTlZfSCAqLworCitpbnQKK2dldENoYXJhY3Rlck5hbWUgKHdjaGFyX3QgY2hhcmFjdGVyLCBjaGFyICpidWZmZXIsIHNpemVfdCBzaXplKSB7CisjaWZkZWYgSEFWRV9JQ1UKKyAgcmV0dXJuIGdldE5hbWUoY2hhcmFjdGVyLCBidWZmZXIsIHNpemUsIFVfRVhURU5ERURfQ0hBUl9OQU1FKTsKKyNlbHNlIC8qIEhBVkVfSUNVICovCisgIHJldHVybiAwOworI2VuZGlmIC8qIEhBVkVfSUNVICovCit9CisKK2ludAorZ2V0Q2hhcmFjdGVyQnlOYW1lICh3Y2hhcl90ICpjaGFyYWN0ZXIsIGNvbnN0IGNoYXIgKm5hbWUpIHsKKyNpZmRlZiBIQVZFX0lDVQorICByZXR1cm4gZ2V0QnlOYW1lKGNoYXJhY3RlciwgbmFtZSwgVV9FWFRFTkRFRF9DSEFSX05BTUUpOworI2Vsc2UgLyogSEFWRV9JQ1UgKi8KKyAgcmV0dXJuIDA7CisjZW5kaWYgLyogSEFWRV9JQ1UgKi8KK30KKworaW50CitnZXRDaGFyYWN0ZXJBbGlhcyAod2NoYXJfdCBjaGFyYWN0ZXIsIGNoYXIgKmJ1ZmZlciwgc2l6ZV90IHNpemUpIHsKKyNpZmRlZiBIQVZFX0lDVQorICByZXR1cm4gZ2V0TmFtZShjaGFyYWN0ZXIsIGJ1ZmZlciwgc2l6ZSwgVV9DSEFSX05BTUVfQUxJQVMpOworI2Vsc2UgLyogSEFWRV9JQ1UgKi8KKyAgcmV0dXJuIDA7CisjZW5kaWYgLyogSEFWRV9JQ1UgKi8KK30KKworaW50CitnZXRDaGFyYWN0ZXJCeUFsaWFzICh3Y2hhcl90ICpjaGFyYWN0ZXIsIGNvbnN0IGNoYXIgKmFsaWFzKSB7CisjaWZkZWYgSEFWRV9JQ1UKKyAgcmV0dXJuIGdldEJ5TmFtZShjaGFyYWN0ZXIsIGFsaWFzLCBVX0NIQVJfTkFNRV9BTElBUyk7CisjZWxzZSAvKiBIQVZFX0lDVSAqLworICByZXR1cm4gMDsKKyNlbmRpZiAvKiBIQVZFX0lDVSAqLworfQorCitpbnQKK2dldENoYXJhY3RlcldpZHRoICh3Y2hhcl90IGNoYXJhY3RlcikgeworI2lmIGRlZmluZWQoSEFWRV9XQ1dJRFRIKQorICByZXR1cm4gd2N3aWR0aChjaGFyYWN0ZXIpOworI2VsaWYgZGVmaW5lZChIQVZFX0lDVSkKKyAgVUNoYXJDYXRlZ29yeSBjYXRlZ29yeSA9IHVfZ2V0SW50UHJvcGVydHlWYWx1ZShjaGFyYWN0ZXIsIFVDSEFSX0dFTkVSQUxfQ0FURUdPUlkpOworICBVRWFzdEFzaWFuV2lkdGggd2lkdGggPSB1X2dldEludFByb3BlcnR5VmFsdWUoY2hhcmFjdGVyLCBVQ0hBUl9FQVNUX0FTSUFOX1dJRFRIKTsKKworICBpZiAoY2hhcmFjdGVyID09IDApIHJldHVybiAwOworICBpZiAoY2F0ZWdvcnkgPT0gVV9DT05UUk9MX0NIQVIpIHJldHVybiAtMTsKKworICBpZiAoY2F0ZWdvcnkgPT0gVV9OT05fU1BBQ0lOR19NQVJLKSByZXR1cm4gMDsKKyAgaWYgKGNhdGVnb3J5ID09IFVfRU5DTE9TSU5HX01BUkspIHJldHVybiAwOworCisgIC8qIEhhbmd1bCBKYW1vIG1lZGlhbCB2b3dlbHMgYW5kIGZpbmFsIGNvbnNvbmFudHMgKi8KKyAgaWYgKChjaGFyYWN0ZXIgPj0gMFgxMTYwKSAmJiAoY2hhcmFjdGVyIDw9IDBYMTFGRikgJiYgKGNhdGVnb3J5ID09IFVfT1RIRVJfTEVUVEVSKSkgcmV0dXJuIDA7CisKKyAgLyogICovCisgIGlmIChjaGFyYWN0ZXIgPT0gMFhBRCkgcmV0dXJuIDE7IC8qIHNvZnQgaHlwaGVuICovCisgIGlmIChjYXRlZ29yeSA9PSBVX0ZPUk1BVF9DSEFSKSByZXR1cm4gMDsKKworICBpZiAod2lkdGggPT0gVV9FQV9GVUxMV0lEVEgpIHJldHVybiAyOworICBpZiAod2lkdGggPT0gVV9FQV9IQUxGV0lEVEgpIHJldHVybiAxOworCisgIGlmICh3aWR0aCA9PSBVX0VBX1dJREUpIHJldHVybiAyOworICBpZiAod2lkdGggPT0gVV9FQV9OQVJST1cpIHJldHVybiAxOworCisgIGlmICh3aWR0aCA9PSBVX0VBX0FNQklHVU9VUykgeworICAgIC8qIENKSyBVbmlmaWVkIElkZW9ncmFwaHMgYmxvY2sgKi8KKyAgICBpZiAoKGNoYXJhY3RlciA+PSAwWDRFMDApICYmIChjaGFyYWN0ZXIgPD0gMFg5RkZGKSkgcmV0dXJuIDI7CisKKyAgICAvKiBDSksgVW5pZmllZCBJZGVvZ3JhcGhzIEV4dGVybnNpb24gQSBibG9jayAqLworICAgIGlmICgoY2hhcmFjdGVyID49IDBYMzQwMCkgJiYgKGNoYXJhY3RlciA8PSAwWDREQkYpKSByZXR1cm4gMjsKKworICAgIC8qIENKSyBDb21wYXRpYmlsaXR5IElkZW9ncmFwaHMgYmxvY2sgKi8KKyAgICBpZiAoKGNoYXJhY3RlciA+PSAwWEY5MDApICYmIChjaGFyYWN0ZXIgPD0gMFhGQUZGKSkgcmV0dXJuIDI7CisKKyAgICAvKiBTdXBwbGVtZW50YXJ5IElkZW9ncmFwaGljIFBsYW5lICovCisgIC8vaWYgKChjaGFyYWN0ZXIgPj0gMFgyMDAwMCkgJiYgKGNoYXJhY3RlciA8PSAwWDJGRkZGKSkgcmV0dXJuIDI7CisKKyAgICAvKiBUZXJ0aWFyeSBJZGVvZ3JhcGhpYyBQbGFuZSAqLworICAvL2lmICgoY2hhcmFjdGVyID49IDBYMzAwMDApICYmIChjaGFyYWN0ZXIgPD0gMFgzRkZGRikpIHJldHVybiAyOworICB9CisKKyAgaWYgKGNhdGVnb3J5ID09IFVfVU5BU1NJR05FRCkgcmV0dXJuIC0xOworICByZXR1cm4gMTsKKyNlbHNlIC8qIGNoYXJhY3RlciB3aWR0aCAqLworICBpZiAoY2hhcmFjdGVyID09IEFTQ0lJX05VTCkgcmV0dXJuIDA7CisgIGlmIChjaGFyYWN0ZXIgPT0gQVNDSUlfREVMKSByZXR1cm4gLTE7CisgIGlmICghKGNoYXJhY3RlciAmIDBYNjApKSByZXR1cm4gLTE7CisgIHJldHVybiAxOworI2VuZGlmIC8qIGNoYXJhY3RlciB3aWR0aCAqLworfQorCitpbnQKK2lzQnJhaWxsZUNoYXJhY3RlciAod2NoYXJfdCBjaGFyYWN0ZXIpIHsKKyAgcmV0dXJuIChjaGFyYWN0ZXIgJiB+VU5JQ09ERV9DRUxMX01BU0spID09IFVOSUNPREVfQlJBSUxMRV9ST1c7Cit9CisKK2ludAoraXNJZGVvZ3JhcGhpY0NoYXJhY3RlciAod2NoYXJfdCBjaGFyYWN0ZXIpIHsKKyNpZmRlZiBIQVZFX0lDVQorICBpZiAodV9oYXNCaW5hcnlQcm9wZXJ0eShjaGFyYWN0ZXIsIFVDSEFSX0lERU9HUkFQSElDKSkgcmV0dXJuIDE7CisjZW5kaWYgLyogSEFWRV9JQ1UgKi8KKworICByZXR1cm4gMDsKK30KKworaW50Citpc0Vtb2ppU2VxdWVuY2UgKGNvbnN0IHdjaGFyX3QgKmNoYXJhY3RlcnMsIHNpemVfdCBjb3VudCkgeworI2lmZGVmIEhBVkVfSUNVCisgIGNvbnN0IHdjaGFyX3QgKmNoYXJhY3RlciA9IGNoYXJhY3RlcnM7CisgIGNvbnN0IHdjaGFyX3QgKmVuZCA9IGNoYXJhY3RlciArIGNvdW50OworCisgIHdoaWxlIChjaGFyYWN0ZXIgPCBlbmQpIHsKKyAgICAjaWYgVV9JQ1VfVkVSU0lPTl9NQUpPUl9OVU0gPj0gNTcKKyAgICBpZiAodV9oYXNCaW5hcnlQcm9wZXJ0eSgqY2hhcmFjdGVyLCBVQ0hBUl9FTU9KSSkpIHsKKyAgICAgIGlmICh1X2hhc0JpbmFyeVByb3BlcnR5KCpjaGFyYWN0ZXIsIFVDSEFSX0VNT0pJX1BSRVNFTlRBVElPTikpIHsKKyAgICAgICAgcmV0dXJuIDE7CisgICAgICB9CisgICAgfQorICAgICNlbmRpZiAvKiBVX0lDVV9WRVJTSU9OX01BSk9SX05VTSA+PSA1NyAqLworCisgICAgY2hhcmFjdGVyICs9IDE7CisgIH0KKyNlbmRpZiAvKiBIQVZFX0lDVSAqLworCisgIHJldHVybiAwOworfQorCit3Y2hhcl90CitnZXRSZXBsYWNlbWVudENoYXJhY3RlciAodm9pZCkgeworI2lmZGVmIEhBVkVfV0NIQVJfSAorIHJldHVybiBVTklDT0RFX1JFUExBQ0VNRU5UX0NIQVJBQ1RFUjsKKyNlbHNlIC8qIEhBVkVfV0NIQVJfSCAqLworIHJldHVybiBBU0NJSV9TVUI7CisjZW5kaWYgLyogSEFWRV9XQ0hBUl9IICovCit9CisKK2ludAorY29tcG9zZUNoYXJhY3RlcnMgKAorICBzaXplX3QgKmxlbmd0aCwgY29uc3Qgd2NoYXJfdCAqY2hhcmFjdGVycywKKyAgd2NoYXJfdCAqYnVmZmVyLCB1bnNpZ25lZCBpbnQgKm1hcAorKSB7CisjaWZkZWYgSEFWRV9JQ1UKKyAgaWYgKCpsZW5ndGggPCAyKSByZXR1cm4gMDsKKworICBVQ2hhciBzb3VyY2VbKmxlbmd0aF07CisgIFVDaGFyIHRhcmdldFsqbGVuZ3RoXTsKKyAgaW50MzJfdCBjb3VudDsKKworICB7CisgICAgY29uc3Qgd2NoYXJfdCAqc3JjID0gY2hhcmFjdGVyczsKKyAgICBjb25zdCB3Y2hhcl90ICplbmQgPSBzcmMgKyAqbGVuZ3RoOworICAgIFVDaGFyICp0cmcgPSBzb3VyY2U7CisKKyAgICB3aGlsZSAoc3JjIDwgZW5kKSB7CisgICAgICAqdHJnKysgPSAqc3JjKys7CisgICAgfQorICB9CisKKyAgeworICAgIFVFcnJvckNvZGUgZXJyb3IgPSBVX1pFUk9fRVJST1I7CisKKyNpZmRlZiBIQVZFX1VOSUNPREVfVU5PUk0yX0gKKyAgICBzdGF0aWMgY29uc3QgVU5vcm1hbGl6ZXIyICpub3JtYWxpemVyID0gTlVMTDsKKworICAgIGlmICghbm9ybWFsaXplcikgeworICAgICAgbm9ybWFsaXplciA9IHVub3JtMl9nZXRORkNJbnN0YW5jZSgmZXJyb3IpOworICAgICAgaWYgKCFVX1NVQ0NFU1MoZXJyb3IpKSByZXR1cm4gMDsKKyAgICB9CisKKyAgICBjb3VudCA9IHVub3JtMl9ub3JtYWxpemUobm9ybWFsaXplciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlLCBBUlJBWV9DT1VOVChzb3VyY2UpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXQsIEFSUkFZX0NPVU5UKHRhcmdldCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZlcnJvcik7CisjZWxzZSAvKiB1bm9ybSAqLworICAgIGNvdW50ID0gdW5vcm1fbm9ybWFsaXplKHNvdXJjZSwgQVJSQVlfQ09VTlQoc291cmNlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBVTk9STV9ORkMsIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0LCBBUlJBWV9DT1VOVCh0YXJnZXQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICZlcnJvcik7CisjZW5kaWYgLyogdW5vcm0gKi8KKworICAgIGlmICghVV9TVUNDRVNTKGVycm9yKSkgcmV0dXJuIDA7CisgIH0KKworICBpZiAoY291bnQgPT0gKmxlbmd0aCkgeworICAgIGlmIChtZW1jbXAoc291cmNlLCB0YXJnZXQsICgqbGVuZ3RoICogc2l6ZW9mKHNvdXJjZVswXSkpKSA9PSAwKSB7CisgICAgICByZXR1cm4gMDsKKyAgICB9CisgIH0KKworICB7CisgICAgY29uc3QgVUNoYXIgKnNyYyA9IHNvdXJjZTsKKyAgICBjb25zdCBVQ2hhciAqc3JjRW5kID0gc3JjICsgQVJSQVlfQ09VTlQoc291cmNlKTsKKyAgICBjb25zdCBVQ2hhciAqdHJnID0gdGFyZ2V0OworICAgIGNvbnN0IFVDaGFyICp0cmdFbmQgPSB0YXJnZXQgKyBjb3VudDsKKyAgICB3Y2hhcl90ICpvdXQgPSBidWZmZXI7CisKKyAgICB3aGlsZSAodHJnIDwgdHJnRW5kKSB7CisgICAgICBpZiAoIW5leHRCYXNlQ2hhcmFjdGVyKCZzcmMsIHNyY0VuZCkpIHJldHVybiAwOworICAgICAgaWYgKG1hcCkgKm1hcCsrID0gc3JjIC0gc291cmNlIC0gMTsKKyAgICAgICpvdXQrKyA9ICp0cmcrKzsKKyAgICB9CisKKyAgICBpZiAobmV4dEJhc2VDaGFyYWN0ZXIoJnNyYywgc3JjRW5kKSkgcmV0dXJuIDA7CisgICAgaWYgKG1hcCkgKm1hcCA9IHNyYyAtIHNvdXJjZTsKKyAgfQorCisgICpsZW5ndGggPSBjb3VudDsKKyAgcmV0dXJuIDE7CisjZWxzZSAvKiBIQVZFX0lDVSAqLworICByZXR1cm4gMDsKKyNlbmRpZiAvKiBIQVZFX0lDVSAqLworfQorCitzaXplX3QKK2RlY29tcG9zZUNoYXJhY3RlciAoCisgIHdjaGFyX3QgY2hhcmFjdGVyLCB3Y2hhcl90ICpidWZmZXIsIHNpemVfdCBsZW5ndGgKKykgeworI2lmZGVmIEhBVkVfSUNVCisgIGlmIChpc1VjaGFyQ29tcGF0aWJsZShjaGFyYWN0ZXIpKSB7CisgICAgVUNoYXIgc291cmNlWzFdID0ge2NoYXJhY3Rlcn07CisgICAgVUNoYXIgdGFyZ2V0W2xlbmd0aF07CisgICAgaW50MzJfdCBjb3VudDsKKworICAgIHsKKyAgICAgIFVFcnJvckNvZGUgZXJyb3IgPSBVX1pFUk9fRVJST1I7CisKKyNpZmRlZiBIQVZFX1VOSUNPREVfVU5PUk0yX0gKKyAgICAgIHN0YXRpYyBjb25zdCBVTm9ybWFsaXplcjIgKm5vcm1hbGl6ZXIgPSBOVUxMOworCisgICAgICBpZiAoIW5vcm1hbGl6ZXIpIHsKKyAgICAgICAgbm9ybWFsaXplciA9IHVub3JtMl9nZXRORkRJbnN0YW5jZSgmZXJyb3IpOworICAgICAgICBpZiAoIVVfU1VDQ0VTUyhlcnJvcikpIHJldHVybiAwOworICAgICAgfQorCisgICAgICBjb3VudCA9IHVub3JtMl9ub3JtYWxpemUobm9ybWFsaXplciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2UsIEFSUkFZX0NPVU5UKHNvdXJjZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0LCBBUlJBWV9DT1VOVCh0YXJnZXQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZlcnJvcik7CisjZWxzZSAvKiB1bm9ybSAqLworICAgICAgY291bnQgPSB1bm9ybV9ub3JtYWxpemUoc291cmNlLCBBUlJBWV9DT1VOVChzb3VyY2UpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVU5PUk1fTkZELCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0LCBBUlJBWV9DT1VOVCh0YXJnZXQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmVycm9yKTsKKyNlbmRpZiAvKiB1bm9ybSAqLworCisgICAgICBpZiAoIVVfU1VDQ0VTUyhlcnJvcikpIHJldHVybiAwOworICAgIH0KKworICAgIHsKKyAgICAgIGNvbnN0IFVDaGFyICp0cmcgPSB0YXJnZXQ7CisgICAgICBjb25zdCBVQ2hhciAqZW5kID0gdGFyZ2V0ICsgY291bnQ7CisgICAgICB3Y2hhcl90ICpvdXQgPSBidWZmZXI7CisKKyAgICAgIHdoaWxlICh0cmcgPCBlbmQpIHsKKyAgICAgICAgKm91dCsrID0gKnRyZysrOworICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBjb3VudDsKKyAgfQorI2VuZGlmIC8qIEhBVkVfSUNVICovCisKKyAgcmV0dXJuIDA7Cit9CisKK3djaGFyX3QKK2dldEJhc2VDaGFyYWN0ZXIgKHdjaGFyX3QgY2hhcmFjdGVyKSB7CisgIHdjaGFyX3QgZGVjb21wb3NlZFswWDEwXTsKKyAgc2l6ZV90IGNvdW50ID0gZGVjb21wb3NlQ2hhcmFjdGVyKGNoYXJhY3RlciwgZGVjb21wb3NlZCwgc2l6ZW9mKGRlY29tcG9zZWQpKTsKKyAgaWYgKGNvdW50KSByZXR1cm4gZGVjb21wb3NlZFswXTsKKyAgcmV0dXJuIDA7Cit9CisKK3djaGFyX3QKK2dldFRyYW5zbGl0ZXJhdGVkQ2hhcmFjdGVyICh3Y2hhcl90IGNoYXJhY3RlcikgeworI2lmZGVmIEhBVkVfSUNPTlZfSAorICBzdGF0aWMgaWNvbnZfdCBoYW5kbGUgPSBOVUxMOworICBpZiAoIWhhbmRsZSkgaGFuZGxlID0gaWNvbnZfb3BlbigiQVNDSUkvL1RSQU5TTElUIiwgIldDSEFSX1QiKTsKKworICBpZiAoaGFuZGxlICE9IChpY29udl90KS0xKSB7CisgICAgY2hhciAqaW5wdXRBZGRyZXNzID0gKGNoYXIgKikmY2hhcmFjdGVyOworICAgIHNpemVfdCBpbnB1dFNpemUgPSBzaXplb2YoY2hhcmFjdGVyKTsKKyAgICBzaXplX3Qgb3V0cHV0U2l6ZSA9IDBYMTA7CisgICAgY2hhciBvdXRwdXRCdWZmZXJbb3V0cHV0U2l6ZV07CisgICAgY2hhciAqb3V0cHV0QWRkcmVzcyA9IG91dHB1dEJ1ZmZlcjsKKworICAgIGlmIChpY29udihoYW5kbGUsICZpbnB1dEFkZHJlc3MsICZpbnB1dFNpemUsICZvdXRwdXRBZGRyZXNzLCAmb3V0cHV0U2l6ZSkgIT0gKHNpemVfdCktMSkgeworICAgICAgaWYgKChvdXRwdXRBZGRyZXNzIC0gb3V0cHV0QnVmZmVyKSA9PSAxKSB7CisgICAgICAgIHdjaGFyX3QgcmVzdWx0ID0gb3V0cHV0QnVmZmVyWzBdICYgMFhGRjsKKworICAgICAgICBpZiAocmVzdWx0ICE9IGNoYXJhY3RlcikgeworICAgICAgICAgIGlmIChyZXN1bHQgPT0gV0NfQygnPycpKSB7CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgfQorICAgIH0KKyAgfQorI2VuZGlmIC8qIEhBVkVfSUNPTlZfSCAqLworCisgIHJldHVybiAwOworfQorCitpbnQKK2hhbmRsZUJlc3RDaGFyYWN0ZXIgKHdjaGFyX3QgY2hhcmFjdGVyLCBDaGFyYWN0ZXJIYW5kbGVyIGhhbmRsZUNoYXJhY3Rlciwgdm9pZCAqZGF0YSkgeworICBpZiAoaXNCcmFpbGxlQ2hhcmFjdGVyKGNoYXJhY3RlcikpIHJldHVybiAwOworCisgIHR5cGVkZWYgd2NoYXJfdCBDaGFyYWN0ZXJUcmFuc2xhdG9yICh3Y2hhcl90IGNoYXJhY3Rlcik7CisgIHN0YXRpYyBDaGFyYWN0ZXJUcmFuc2xhdG9yICpjb25zdCBjaGFyYWN0ZXJUcmFuc2xhdG9yc1tdID0geworICAgIGdldEJhc2VDaGFyYWN0ZXIsCisgICAgZ2V0VHJhbnNsaXRlcmF0ZWRDaGFyYWN0ZXIsCisgICAgTlVMTAorICB9OworCisgIENoYXJhY3RlclRyYW5zbGF0b3IgKmNvbnN0ICp0cmFuc2xhdGVDaGFyYWN0ZXIgPSBjaGFyYWN0ZXJUcmFuc2xhdG9yczsKKyAgd2hpbGUgKCFoYW5kbGVDaGFyYWN0ZXIoY2hhcmFjdGVyLCBkYXRhKSkgeworICAgIGlmICghKnRyYW5zbGF0ZUNoYXJhY3RlcikgcmV0dXJuIDA7CisKKyAgICB7CisgICAgICB3Y2hhcl90IGFsdGVybmF0ZSA9ICgqdHJhbnNsYXRlQ2hhcmFjdGVyKyspKGNoYXJhY3Rlcik7CisgICAgICBpZiAoYWx0ZXJuYXRlKSBjaGFyYWN0ZXIgPSBhbHRlcm5hdGU7CisgICAgfQorICB9CisKKyAgcmV0dXJuIDE7Cit9CmRpZmYgLS1naXQgYS9Qcm9ncmFtcy91cGRhdGUuYyBiL1Byb2dyYW1zL3VwZGF0ZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc3NDdkYTAKLS0tIC9kZXYvbnVsbAorKysgYi9Qcm9ncmFtcy91cGRhdGUuYwpAQCAtMCwwICsxLDE0MDcgQEAKKy8qCisgKiBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorICogICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorICoKKyAqIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorICoKKyAqIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyAqLworCisjaW5jbHVkZSAicHJvbG9ndWUuaCIKKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKyNpbmNsdWRlICJwYXJhbWV0ZXJzLmgiCisjaW5jbHVkZSAibG9nLmgiCisjaW5jbHVkZSAiYWxlcnQuaCIKKyNpbmNsdWRlICJyZXBvcnQuaCIKKyNpbmNsdWRlICJzdHJmbXQuaCIKKyNpbmNsdWRlICJ1cGRhdGUuaCIKKyNpbmNsdWRlICJhc3luY19oYW5kbGUuaCIKKyNpbmNsdWRlICJhc3luY19hbGFybS5oIgorI2luY2x1ZGUgInRpbWluZy5oIgorI2luY2x1ZGUgInVuaWNvZGUuaCIKKyNpbmNsdWRlICJjaGFyc2V0LmgiCisjaW5jbHVkZSAidHRiLmgiCisjaW5jbHVkZSAiYXRiLmgiCisjaW5jbHVkZSAiYnJsX2RvdHMuaCIKKyNpbmNsdWRlICJzcGsuaCIKKyNpbmNsdWRlICJzY3IuaCIKKyNpbmNsdWRlICJzY3Jfc3BlY2lhbC5oIgorI2luY2x1ZGUgInNjcl91dGlscy5oIgorI2luY2x1ZGUgInByZWZzLmgiCisjaW5jbHVkZSAic3RhdHVzLmgiCisjaW5jbHVkZSAiYmxpbmsuaCIKKyNpbmNsdWRlICJyb3V0aW5nLmgiCisjaW5jbHVkZSAiYXBpX2NvbnRyb2wuaCIKKyNpbmNsdWRlICJjb3JlLmgiCisKK3N0YXRpYyB2b2lkCitvdmVybGF5QXR0cmlidXRlc1VuZGVybGluZSAodW5zaWduZWQgY2hhciAqY2VsbCwgdW5zaWduZWQgY2hhciBhdHRyaWJ1dGVzKSB7CisgIHVuc2lnbmVkIGNoYXIgZG90czsKKworICBzd2l0Y2ggKGF0dHJpYnV0ZXMpIHsKKyAgICBjYXNlIFNDUl9DT0xPVVJfRkdfREFSS19HUkVZIHwgU0NSX0NPTE9VUl9CR19CTEFDSzoKKyAgICBjYXNlIFNDUl9DT0xPVVJfRkdfTElHSFRfR1JFWSB8IFNDUl9DT0xPVVJfQkdfQkxBQ0s6CisgICAgY2FzZSBTQ1JfQ09MT1VSX0ZHX0xJR0hUX0dSRVkgfCBTQ1JfQ09MT1VSX0JHX0JMVUU6CisgICAgY2FzZSBTQ1JfQ09MT1VSX0ZHX0JMQUNLIHwgU0NSX0NPTE9VUl9CR19DWUFOOgorICAgICAgcmV0dXJuOworCisgICAgY2FzZSBTQ1JfQ09MT1VSX0ZHX0JMQUNLIHwgU0NSX0NPTE9VUl9CR19MSUdIVF9HUkVZOgorICAgICAgZG90cyA9IEJSTF9ET1RfNyB8IEJSTF9ET1RfODsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBTQ1JfQ09MT1VSX0ZHX1dISVRFIHwgU0NSX0NPTE9VUl9CR19CTEFDSzoKKyAgICBkZWZhdWx0OgorICAgICAgZG90cyA9IEJSTF9ET1RfODsKKyAgICAgIGJyZWFrOworICB9CisKKyAgeworICAgIEJsaW5rRGVzY3JpcHRvciAqYmxpbmsgPSAmYXR0cmlidXRlc1VuZGVybGluZUJsaW5rRGVzY3JpcHRvcjsKKworICAgIHJlcXVpcmVCbGlua0Rlc2NyaXB0b3IoYmxpbmspOworICAgIGlmIChpc0JsaW5rVmlzaWJsZShibGluaykpICpjZWxsIHw9IGRvdHM7CisgIH0KK30KKworc3RhdGljIHZvaWQKK3JlYWRCcmFpbGxlV2luZG93IChTY3JlZW5DaGFyYWN0ZXIgKmNoYXJhY3RlcnMsIHNpemVfdCBjb3VudCkgeworICBpbnQgc2NyZWVuQ29sdW1ucyA9IE1JTih0ZXh0Q291bnQsIHNjci5jb2xzLXNlcy0+d2lueCk7CisgIGludCBzY3JlZW5Sb3dzID0gTUlOKGJybC50ZXh0Um93cywgc2NyLnJvd3Mtc2VzLT53aW55KTsKKworICBpZiAocHJlZnMud29yZFdyYXApIHsKKyAgICBpbnQgbGVuZ3RoID0gZ2V0V29yZFdyYXBMZW5ndGgoc2VzLT53aW55LCBzZXMtPndpbngsIHNjcmVlbkNvbHVtbnMpOworICAgIGlmIChsZW5ndGggPCBzY3JlZW5Db2x1bW5zKSBzY3JlZW5Db2x1bW5zID0gbGVuZ3RoOworICB9CisKKyAgaWYgKHNjcmVlbkNvbHVtbnMgPiAwKSB7CisgICAgcmVhZFNjcmVlbihzZXMtPndpbngsIHNlcy0+d2lueSwgc2NyZWVuQ29sdW1ucywgc2NyZWVuUm93cywgY2hhcmFjdGVycyk7CisgIH0KKworICBpZiAoc2NyZWVuQ29sdW1ucyA8IHRleHRDb3VudCkgeworICAgIC8qIFdlIGdvdCBhIHJlY3Rhbmd1bGFyIHBpZWNlIG9mIHRleHQgd2l0aCByZWFkU2NyZWVuIGJ1dCB0aGUgZGlzcGxheQorICAgICAqIGlzIGluIGFuIG9mZi1yaWdodCBwb3NpdGlvbiB3aXRoIHNvbWUgY2VsbHMgYXQgdGhlIGVuZCBibGFuaworICAgICAqIHNvIHdlJ2xsIGluc2VydCB0aGVzZSBjZWxscyBhbmQgYmxhbmsgdGhlbS4KKyAgICAgKi8KKworICAgIHsKKyAgICAgIGludCBsYXN0Um93ID0gc2NyZWVuUm93cyAtIDE7CisgICAgICBjb25zdCBTY3JlZW5DaGFyYWN0ZXIgKnNvdXJjZSA9IGNoYXJhY3RlcnMgKyAobGFzdFJvdyAqIHNjcmVlbkNvbHVtbnMpOworICAgICAgU2NyZWVuQ2hhcmFjdGVyICp0YXJnZXQgPSBjaGFyYWN0ZXJzICsgKGxhc3RSb3cgKiB0ZXh0Q291bnQpOworICAgICAgc2l6ZV90IHNpemUgPSBzY3JlZW5Db2x1bW5zICogc2l6ZW9mKCp0YXJnZXQpOworCisgICAgICB3aGlsZSAoc291cmNlID4gY2hhcmFjdGVycykgeworICAgICAgICBtZW1tb3ZlKHRhcmdldCwgc291cmNlLCBzaXplKTsKKyAgICAgICAgc291cmNlIC09IHNjcmVlbkNvbHVtbnM7CisgICAgICAgIHRhcmdldCAtPSB0ZXh0Q291bnQ7CisgICAgICB9CisgICAgfQorCisgICAgeworICAgICAgU2NyZWVuQ2hhcmFjdGVyICpyb3cgPSBjaGFyYWN0ZXJzICsgc2NyZWVuQ29sdW1uczsKKyAgICAgIGNvbnN0IFNjcmVlbkNoYXJhY3RlciAqZW5kID0gY2hhcmFjdGVycyArIChzY3JlZW5Sb3dzICogdGV4dENvdW50KTsKKyAgICAgIHNpemVfdCBjb3VudCA9IHRleHRDb3VudCAtIHNjcmVlbkNvbHVtbnM7CisKKyAgICAgIHdoaWxlIChyb3cgPCBlbmQpIHsKKyAgICAgICAgY2xlYXJTY3JlZW5DaGFyYWN0ZXJzKHJvdywgY291bnQpOworICAgICAgICByb3cgKz0gdGV4dENvdW50OworICAgICAgfQorICAgIH0KKyAgfQorCisgIGlmIChzY3JlZW5Sb3dzIDwgYnJsLnRleHRSb3dzKSB7CisgICAgY2xlYXJTY3JlZW5DaGFyYWN0ZXJzKAorICAgICAgY2hhcmFjdGVycyArIChzY3JlZW5Sb3dzICogdGV4dENvdW50KSwKKyAgICAgIChicmwudGV4dFJvd3MgLSBzY3JlZW5Sb3dzKSAqIHRleHRDb3VudAorICAgICk7CisgIH0KK30KKwordHlwZWRlZiB2b2lkIFNjcmVlbkNoYXJhY3RlclRyYW5zbGF0b3IgKAorICBjb25zdCBTY3JlZW5DaGFyYWN0ZXIgKmNoYXJhY3RlciwgdW5zaWduZWQgY2hhciAqY2VsbCwgd2NoYXJfdCAqdGV4dAorKTsKKworc3RhdGljIHZvaWQKK3RyYW5zbGF0ZVNjcmVlbkNoYXJhY3Rlcl90ZXh0ICgKKyAgY29uc3QgU2NyZWVuQ2hhcmFjdGVyICpjaGFyYWN0ZXIsIHVuc2lnbmVkIGNoYXIgKmNlbGwsIHdjaGFyX3QgKnRleHQKKykgeworICAqY2VsbCA9IGNvbnZlcnRDaGFyYWN0ZXJUb0RvdHModGV4dFRhYmxlLCBjaGFyYWN0ZXItPnRleHQpOworICAqdGV4dCA9IGNoYXJhY3Rlci0+dGV4dDsKKworICB7CisgICAgY29uc3QgdW5zaWduZWQgY2hhciBkb3RzID0gQlJMX0RPVF83IHwgQlJMX0RPVF84OworCisgICAgaWYgKCpjZWxsICYgZG90cykgeworICAgICAgaWYgKGlzU2l4RG90Q29tcHV0ZXJCcmFpbGxlKCkpIHsKKyAgICAgICAgKmNlbGwgJj0gfmRvdHM7CisgICAgICB9CisgICAgfQorICB9CisKKyAgaWYgKHByZWZzLnNob3dBdHRyaWJ1dGVzKSB7CisgICAgb3ZlcmxheUF0dHJpYnV0ZXNVbmRlcmxpbmUoY2VsbCwgY2hhcmFjdGVyLT5hdHRyaWJ1dGVzKTsKKyAgfQorCisgIHsKKyAgICBCbGlua0Rlc2NyaXB0b3IgKmJsaW5rID0gJnVwcGVyY2FzZUxldHRlcnNCbGlua0Rlc2NyaXB0b3I7CisKKyAgICBpZiAoaXNCbGlua0VuYWJsZWQoYmxpbmspKSB7CisgICAgICBpZiAoaXN3dXBwZXIoY2hhcmFjdGVyLT50ZXh0KSkgeworICAgICAgICByZXF1aXJlQmxpbmtEZXNjcmlwdG9yKGJsaW5rKTsKKyAgICAgICAgaWYgKCFpc0JsaW5rVmlzaWJsZShibGluaykpICpjZWxsID0gMDsKKyAgICAgIH0KKyAgICB9CisgIH0KK30KKworc3RhdGljIHZvaWQKK3RyYW5zbGF0ZVNjcmVlbkNoYXJhY3Rlcl9hdHRyaWJ1dGVzICgKKyAgY29uc3QgU2NyZWVuQ2hhcmFjdGVyICpjaGFyYWN0ZXIsIHVuc2lnbmVkIGNoYXIgKmNlbGwsIHdjaGFyX3QgKnRleHQKKykgeworICAqdGV4dCA9IFVOSUNPREVfQlJBSUxMRV9ST1cgfCAoKmNlbGwgPSBjb252ZXJ0QXR0cmlidXRlc1RvRG90cyhhdHRyaWJ1dGVzVGFibGUsIGNoYXJhY3Rlci0+YXR0cmlidXRlcykpOworfQorCitzdGF0aWMgdm9pZAordHJhbnNsYXRlQnJhaWxsZVdpbmRvdyAoCisgIGNvbnN0IFNjcmVlbkNoYXJhY3RlciAqY2hhcmFjdGVycywgd2NoYXJfdCAqdGV4dEJ1ZmZlcgorKSB7CisgIFNjcmVlbkNoYXJhY3RlclRyYW5zbGF0b3IgKnRyYW5zbGF0ZVNjcmVlbkNoYXJhY3RlciA9CisgICAgc2VzLT5kaXNwbGF5TW9kZT8KKyAgICB0cmFuc2xhdGVTY3JlZW5DaGFyYWN0ZXJfYXR0cmlidXRlczoKKyAgICB0cmFuc2xhdGVTY3JlZW5DaGFyYWN0ZXJfdGV4dDsKKworICBmb3IgKHVuc2lnbmVkIGludCByb3c9MDsgcm93PGJybC50ZXh0Um93czsgcm93Kz0xKSB7CisgICAgY29uc3QgU2NyZWVuQ2hhcmFjdGVyICpjaGFyYWN0ZXIgPSAmY2hhcmFjdGVyc1tyb3cgKiB0ZXh0Q291bnRdOworICAgIGNvbnN0IFNjcmVlbkNoYXJhY3RlciAqZW5kID0gY2hhcmFjdGVyICsgdGV4dENvdW50OworCisgICAgdW5zaWduZWQgaW50IHN0YXJ0ID0gKHJvdyAqIGJybC50ZXh0Q29sdW1ucykgKyB0ZXh0U3RhcnQ7CisgICAgdW5zaWduZWQgY2hhciAqY2VsbCA9ICZicmwuYnVmZmVyW3N0YXJ0XTsKKyAgICB3Y2hhcl90ICp0ZXh0ID0gJnRleHRCdWZmZXJbc3RhcnRdOworCisgICAgd2hpbGUgKGNoYXJhY3RlciA8IGVuZCkgeworICAgICAgdHJhbnNsYXRlU2NyZWVuQ2hhcmFjdGVyKGNoYXJhY3RlcisrLCBjZWxsKyssIHRleHQrKyk7CisgICAgfQorICB9Cit9CisKK2ludCBpc0NvbnRyYWN0ZWQgPSAwOworaW50IGNvbnRyYWN0ZWRUcmFjayA9IDA7CisKK3N0YXRpYyB2b2lkCitjb25zdHJ1Y3RDb250cmFjdGlvbkNhY2hlIChDb250cmFjdGlvbkNhY2hlICpjYWNoZSkgeworICBjYWNoZS0+aW5wdXQuY2hhcmFjdGVycyA9IE5VTEw7CisgIGNhY2hlLT5pbnB1dC5zaXplID0gMDsKKyAgY2FjaGUtPmlucHV0LmNvdW50ID0gMDsKKworICBjYWNoZS0+b3V0cHV0LmNlbGxzID0gTlVMTDsKKyAgY2FjaGUtPm91dHB1dC5zaXplID0gMDsKKyAgY2FjaGUtPm91dHB1dC5jb3VudCA9IDA7CisKKyAgY2FjaGUtPm9mZnNldHMuYXJyYXkgPSBOVUxMOworICBjYWNoZS0+b2Zmc2V0cy5zaXplID0gMDsKKyAgY2FjaGUtPm9mZnNldHMuY291bnQgPSAwOworfQorCitzdGF0aWMgdm9pZAorY29uc3RydWN0QnJhaWxsZVJvd0Rlc2NyaXB0b3IgKEJyYWlsbGVSb3dEZXNjcmlwdG9yICpicmQpIHsKKyAgY29uc3RydWN0Q29udHJhY3Rpb25DYWNoZSgmYnJkLT5jb250cmFjdGVkLmNhY2hlKTsKKyAgYnJkLT5jb250cmFjdGVkLmxlbmd0aCA9IDA7CisgIGJyZC0+Y29udHJhY3RlZC5vZmZzZXRzLmFycmF5ID0gTlVMTDsKKyAgYnJkLT5jb250cmFjdGVkLm9mZnNldHMuc2l6ZSA9IDA7Cit9CisKK0JyYWlsbGVSb3dEZXNjcmlwdG9yICoKK2dldEJyYWlsbGVSb3dEZXNjcmlwdG9yICh1bnNpZ25lZCBpbnQgcm93KSB7CisgIGlmIChyb3cgPj0gYnJsLnJvd0Rlc2NyaXB0b3JzLnNpemUpIHsKKyAgICBzaXplX3QgbmV3U2l6ZSA9IHJvdyArIDE7CisKKyAgICBCcmFpbGxlUm93RGVzY3JpcHRvciAqbmV3QXJyYXkgPSByZWFsbG9jKAorICAgICAgYnJsLnJvd0Rlc2NyaXB0b3JzLmFycmF5LAorICAgICAgQVJSQVlfU0laRShicmwucm93RGVzY3JpcHRvcnMuYXJyYXksIG5ld1NpemUpCisgICAgKTsKKworICAgIGlmICghbmV3QXJyYXkpIHsKKyAgICAgIGxvZ01hbGxvY0Vycm9yKCk7CisgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICB3aGlsZSAoYnJsLnJvd0Rlc2NyaXB0b3JzLnNpemUgPCBuZXdTaXplKSB7CisgICAgICBCcmFpbGxlUm93RGVzY3JpcHRvciAqYnJkID0gJm5ld0FycmF5W2JybC5yb3dEZXNjcmlwdG9ycy5zaXplKytdOworICAgICAgY29uc3RydWN0QnJhaWxsZVJvd0Rlc2NyaXB0b3IoYnJkKTsKKyAgICB9CisKKyAgICBicmwucm93RGVzY3JpcHRvcnMuYXJyYXkgPSBuZXdBcnJheTsKKyAgfQorCisgIHJldHVybiAmYnJsLnJvd0Rlc2NyaXB0b3JzLmFycmF5W3Jvd107Cit9CisKK3N0YXRpYyBpbnQKK2Vuc3VyZUNvbnRyYWN0ZWRPZmZzZXRzU2l6ZSAoQnJhaWxsZVJvd0Rlc2NyaXB0b3IgKmJyZCwgc2l6ZV90IHNpemUpIHsKKyAgaWYgKCsrc2l6ZSA+IGJyZC0+Y29udHJhY3RlZC5vZmZzZXRzLnNpemUpIHsKKyAgICBzaXplX3QgbmV3U2l6ZSA9IDE7CisgICAgd2hpbGUgKG5ld1NpemUgPCBzaXplKSBuZXdTaXplIDw8PSAxOworCisgICAgaW50ICpuZXdBcnJheWV0cyA9IHJlYWxsb2MoCisgICAgICBicmQtPmNvbnRyYWN0ZWQub2Zmc2V0cy5hcnJheSwKKyAgICAgIEFSUkFZX1NJWkUoYnJkLT5jb250cmFjdGVkLm9mZnNldHMuYXJyYXksIG5ld1NpemUpCisgICAgKTsKKworICAgIGlmICghbmV3QXJyYXlldHMpIHsKKyAgICAgIGxvZ01hbGxvY0Vycm9yKCk7CisgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBicmQtPmNvbnRyYWN0ZWQub2Zmc2V0cy5hcnJheSA9IG5ld0FycmF5ZXRzOworICAgIGJyZC0+Y29udHJhY3RlZC5vZmZzZXRzLnNpemUgPSBuZXdTaXplOworICB9CisKKyAgcmV0dXJuIDE7Cit9CisKK2ludAorZ2V0Q3Vyc29yT2Zmc2V0Rm9yQ29udHJhY3RpbmcgKHZvaWQpIHsKKyAgaWYgKHNjci5wb3N5ICE9IHNlcy0+d2lueSkgcmV0dXJuIENUQl9OT19DVVJTT1I7CisgIGlmIChzY3IucG9zeCA8IHNlcy0+d2lueCkgcmV0dXJuIENUQl9OT19DVVJTT1I7CisgIHJldHVybiBzY3IucG9zeCAtIHNlcy0+d2lueDsKK30KKworc3RhdGljIGludAorY29udHJhY3RTY3JlZW5Sb3cgKEJyYWlsbGVSb3dEZXNjcmlwdG9yICpicmQsIHVuc2lnbmVkIGludCBzY3JlZW5Sb3csIHVuc2lnbmVkIGNoYXIgKmNlbGxzLCB1bnNpZ25lZCBpbnQgY2VsbENvdW50KSB7CisgIGludCBpc0N1cnNvclJvdyA9IHNjci5wb3N5ID09IHNlcy0+d2lueTsKKworICBpbnQgaW5wdXRMZW5ndGggPSBzY3IuY29scyAtIHNlcy0+d2lueDsKKyAgd2NoYXJfdCBpbnB1dFRleHRbaW5wdXRMZW5ndGhdOworICBpbnQgb3V0cHV0TGVuZ3RoID0gY2VsbENvdW50OworCisgIFNjcmVlbkNoYXJhY3RlciBpbnB1dENoYXJhY3RlcnNbaW5wdXRMZW5ndGhdOworICByZWFkU2NyZWVuKHNlcy0+d2lueCwgc2NyZWVuUm93LCBpbnB1dExlbmd0aCwgMSwgaW5wdXRDaGFyYWN0ZXJzKTsKKworICBmb3IgKGludCBpPTA7IGk8aW5wdXRMZW5ndGg7IGkrPTEpIHsKKyAgICBpbnB1dFRleHRbaV0gPSBpbnB1dENoYXJhY3RlcnNbaV0udGV4dDsKKyAgfQorCisgIGVuc3VyZUNvbnRyYWN0ZWRPZmZzZXRzU2l6ZShicmQsIGlucHV0TGVuZ3RoKTsKKyAgaW50ICpvZmZzZXRzQXJyYXkgPSBicmQtPmNvbnRyYWN0ZWQub2Zmc2V0cy5hcnJheTsKKworICBjb250cmFjdFRleHQoCisgICAgY29udHJhY3Rpb25UYWJsZSwgJmJyZC0+Y29udHJhY3RlZC5jYWNoZSwKKyAgICBpbnB1dFRleHQsICZpbnB1dExlbmd0aCwKKyAgICBjZWxscywgJm91dHB1dExlbmd0aCwKKyAgICBvZmZzZXRzQXJyYXksIGdldEN1cnNvck9mZnNldEZvckNvbnRyYWN0aW5nKCkKKyAgKTsKKworICB7CisgICAgaW50IGlucHV0RW5kID0gaW5wdXRMZW5ndGg7CisKKyAgICBpZiAoY29udHJhY3RlZFRyYWNrICYmIGlzQ3Vyc29yUm93KSB7CisgICAgICBpZiAob3V0cHV0TGVuZ3RoID09IGNlbGxDb3VudCkgeworICAgICAgICBpbnQgaW5wdXRJbmRleCA9IGlucHV0RW5kOworCisgICAgICAgIHdoaWxlIChpbnB1dEluZGV4KSB7CisgICAgICAgICAgaW50IG9mZnNldCA9IG9mZnNldHNBcnJheVstLWlucHV0SW5kZXhdOworCisgICAgICAgICAgaWYgKG9mZnNldCAhPSBDVEJfTk9fT0ZGU0VUKSB7CisgICAgICAgICAgICBpZiAob2Zmc2V0ICE9IG91dHB1dExlbmd0aCkgYnJlYWs7CisgICAgICAgICAgICBpbnB1dEVuZCA9IGlucHV0SW5kZXg7CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICB9CisKKyAgICAgIGlmIChzY3IucG9zeCA+PSAoc2VzLT53aW54ICsgaW5wdXRFbmQpKSB7CisgICAgICAgIGludCBvZmZzZXQgPSAwOworICAgICAgICBpbnQgbGVuZ3RoID0gc2NyLmNvbHMgLSBzZXMtPndpbng7CisgICAgICAgIGludCBvblNwYWNlID0gMDsKKworICAgICAgICB3aGlsZSAob2Zmc2V0IDwgbGVuZ3RoKSB7CisgICAgICAgICAgaWYgKChpc3dzcGFjZShpbnB1dENoYXJhY3RlcnNbb2Zmc2V0XS50ZXh0KSAhPSAwKSAhPSBvblNwYWNlKSB7CisgICAgICAgICAgICBpZiAob25TcGFjZSkgYnJlYWs7CisgICAgICAgICAgICBvblNwYWNlID0gMTsKKyAgICAgICAgICB9CisKKyAgICAgICAgICBvZmZzZXQgKz0gMTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICgob2Zmc2V0ICs9IHNlcy0+d2lueCkgPiBzY3IucG9zeCkgeworICAgICAgICAgIHNlcy0+d2lueCA9IHNjci5wb3N4OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgIHNlcy0+d2lueCA9IG9mZnNldDsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiAwOworICAgICAgfQorICAgIH0KKyAgfQorCisgIGlmIChzZXMtPmRpc3BsYXlNb2RlIHx8IHByZWZzLnNob3dBdHRyaWJ1dGVzKSB7CisgICAgaW50IG91dHB1dE9mZnNldCA9IDA7CisgICAgdW5zaWduZWQgY2hhciBhdHRyaWJ1dGVzID0gMDsKKyAgICB1bnNpZ25lZCBjaGFyIGF0dHJpYnV0ZXNCdWZmZXJbb3V0cHV0TGVuZ3RoXTsKKworICAgIGZvciAoaW50IGlucHV0T2Zmc2V0PTA7IGlucHV0T2Zmc2V0PGlucHV0TGVuZ3RoOyBpbnB1dE9mZnNldCs9MSkgeworICAgICAgaW50IG9mZnNldCA9IG9mZnNldHNBcnJheVtpbnB1dE9mZnNldF07CisKKyAgICAgIGlmIChvZmZzZXQgIT0gQ1RCX05PX09GRlNFVCkgeworICAgICAgICB3aGlsZSAob3V0cHV0T2Zmc2V0IDwgb2Zmc2V0KSBhdHRyaWJ1dGVzQnVmZmVyW291dHB1dE9mZnNldCsrXSA9IGF0dHJpYnV0ZXM7CisgICAgICAgIGF0dHJpYnV0ZXMgPSAwOworICAgICAgfQorCisgICAgICBhdHRyaWJ1dGVzIHw9IGlucHV0Q2hhcmFjdGVyc1tpbnB1dE9mZnNldF0uYXR0cmlidXRlczsKKyAgICB9CisKKyAgICB3aGlsZSAob3V0cHV0T2Zmc2V0IDwgb3V0cHV0TGVuZ3RoKSB7CisgICAgICBhdHRyaWJ1dGVzQnVmZmVyW291dHB1dE9mZnNldCsrXSA9IGF0dHJpYnV0ZXM7CisgICAgfQorCisgICAgaWYgKHNlcy0+ZGlzcGxheU1vZGUpIHsKKyAgICAgIGZvciAodW5zaWduZWQgaW50IGk9MDsgaTxvdXRwdXRMZW5ndGg7IGkrPTEpIHsKKyAgICAgICAgY2VsbHNbaV0gPSBjb252ZXJ0QXR0cmlidXRlc1RvRG90cyhhdHRyaWJ1dGVzVGFibGUsIGF0dHJpYnV0ZXNCdWZmZXJbaV0pOworICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICBmb3IgKHVuc2lnbmVkIGludCBpPTA7IGk8b3V0cHV0TGVuZ3RoOyBpKz0xKSB7CisgICAgICAgIG92ZXJsYXlBdHRyaWJ1dGVzVW5kZXJsaW5lKCZjZWxsc1tpXSwgYXR0cmlidXRlc0J1ZmZlcltpXSk7CisgICAgICB9CisgICAgfQorICB9CisKKyAgYnJkLT5jb250cmFjdGVkLmxlbmd0aCA9IGlucHV0TGVuZ3RoOworICByZXR1cm4gMTsKK30KKworc3RhdGljIGludAorZ2VuZXJhdGVDb250cmFjdGVkQnJhaWxsZSAod2NoYXJfdCAqdGV4dCkgeworICB1bnNpZ25lZCBpbnQgYnJhaWxsZVJvdyA9IDA7CisgIHVuc2lnbmVkIGNoYXIgKmNlbGxzID0gJmJybC5idWZmZXJbdGV4dFN0YXJ0XTsKKyAgdGV4dCArPSB0ZXh0U3RhcnQ7CisKKyAgd2hpbGUgKGJyYWlsbGVSb3cgPCBicmwudGV4dFJvd3MpIHsKKyAgICB1bnNpZ25lZCBpbnQgc2NyZWVuUm93ID0gYnJhaWxsZVJvdyArIHNlcy0+d2lueTsKKyAgICBpZiAoc2NyZWVuUm93ID49IHNjci5yb3dzKSBicmVhazsKKworICAgIEJyYWlsbGVSb3dEZXNjcmlwdG9yICpicmQgPSBnZXRCcmFpbGxlUm93RGVzY3JpcHRvcihicmFpbGxlUm93KTsKKyAgICBpZiAoIWNvbnRyYWN0U2NyZWVuUm93KGJyZCwgc2NyZWVuUm93LCBjZWxscywgdGV4dENvdW50KSkgcmV0dXJuIDA7CisKKyAgICBmb3IgKHVuc2lnbmVkIGludCBpPTA7IGk8dGV4dENvdW50OyBpKz0xKSB7CisgICAgICB0ZXh0W2ldID0gVU5JQ09ERV9CUkFJTExFX1JPVyB8IGNlbGxzW2ldOworICAgIH0KKworICAgIGNlbGxzICs9IGJybC50ZXh0Q29sdW1uczsKKyAgICB0ZXh0ICs9IGJybC50ZXh0Q29sdW1uczsKKyAgICBicmFpbGxlUm93ICs9IDE7CisgIH0KKworICB3aGlsZSAoYnJhaWxsZVJvdyA8IGJybC50ZXh0Um93cykgeworICAgIG1lbXNldChjZWxscywgMCwgdGV4dENvdW50KTsKKyAgICB3bWVtc2V0KHRleHQsIFdDX0MoJyAnKSwgdGV4dENvdW50KTsKKworICAgIGNlbGxzICs9IGJybC50ZXh0Q29sdW1uczsKKyAgICB0ZXh0ICs9IGJybC50ZXh0Q29sdW1uczsKKyAgICBicmFpbGxlUm93ICs9IDE7CisgIH0KKworICByZXR1cm4gMTsKK30KKworc3RhdGljIGludAorY2hlY2tTY3JlZW5Qb2ludGVyICh2b2lkKSB7CisgIGludCBtb3ZlZCA9IDA7CisgIGludCBjb2x1bW4sIHJvdzsKKworICBpZiAocHJlZnMudHJhY2tTY3JlZW5Qb2ludGVyICYmIGdldFNjcmVlblBvaW50ZXIoJmNvbHVtbiwgJnJvdykpIHsKKyAgICBpZiAoY29sdW1uICE9IHNlcy0+cHRyeCkgeworICAgICAgaWYgKHNlcy0+cHRyeCA+PSAwKSBtb3ZlZCA9IDE7CisgICAgICBzZXMtPnB0cnggPSBjb2x1bW47CisgICAgfQorCisgICAgaWYgKHJvdyAhPSBzZXMtPnB0cnkpIHsKKyAgICAgIGlmIChzZXMtPnB0cnkgPj0gMCkgbW92ZWQgPSAxOworICAgICAgc2VzLT5wdHJ5ID0gcm93OworICAgIH0KKworICAgIGlmIChtb3ZlZCkgeworICAgICAgaWYgKGNvbHVtbiA8IHNlcy0+d2lueCkgeworICAgICAgICBzZXMtPndpbnggPSBjb2x1bW47CisgICAgICB9IGVsc2UgaWYgKGNvbHVtbiA+PSAoaW50KShzZXMtPndpbnggKyB0ZXh0Q291bnQpKSB7CisgICAgICAgIHNlcy0+d2lueCA9IGNvbHVtbiArIDEgLSB0ZXh0Q291bnQ7CisgICAgICB9CisKKyAgICAgIGlmIChyb3cgPCBzZXMtPndpbnkpIHsKKyAgICAgICAgc2VzLT53aW55ID0gcm93OworICAgICAgfSBlbHNlIGlmIChyb3cgPj0gKGludCkoc2VzLT53aW55ICsgYnJsLnRleHRSb3dzKSkgeworICAgICAgICBzZXMtPndpbnkgPSByb3cgKyAxIC0gYnJsLnRleHRSb3dzOworICAgICAgfQorICAgIH0KKyAgfSBlbHNlIHsKKyAgICBzZXMtPnB0cnggPSBzZXMtPnB0cnkgPSAtMTsKKyAgfQorCisgIHJldHVybiBtb3ZlZDsKK30KKworc3RhdGljIHZvaWQKK2hpZ2hsaWdodEJyYWlsbGVXaW5kb3dMb2NhdGlvbiAodm9pZCkgeworICBpZiAocHJlZnMuaGlnaGxpZ2h0QnJhaWxsZVdpbmRvd0xvY2F0aW9uKSB7CisgICAgaW50IGxlZnQgPSBzZXMtPndpbng7CisgICAgaW50IHJpZ2h0ID0gbGVmdDsKKworICAgIGludCB0b3AgPSBzZXMtPndpbnk7CisgICAgaW50IGJvdHRvbSA9IHRvcDsKKworICAgIGlmICghcHJlZnMuc2hvd0F0dHJpYnV0ZXMpIHsKKyAgICAgIGlmICgocmlnaHQgKz0gdGV4dENvdW50KSA+IHNjci5jb2xzKSByaWdodCA9IHNjci5jb2xzOworICAgICAgcmlnaHQgLT0gMTsKKworICAgICAgaWYgKChib3R0b20gKz0gYnJsLnRleHRSb3dzKSA+IHNjci5yb3dzKSBib3R0b20gPSBzY3Iucm93czsKKyAgICAgIGJvdHRvbSAtPSAxOworICAgIH0KKworICAgIGhpZ2hsaWdodFNjcmVlblJlZ2lvbihsZWZ0LCByaWdodCwgdG9wLCBib3R0b20pOworICB9Cit9CisKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGN1cnNvclN0eWxlc1tdID0geworICBbY3NCb3R0b21Eb3RzXSA9IChCUkxfRE9UXzcgfCBCUkxfRE9UXzgpLAorICBbY3NBbGxEb3RzXSA9IEJSTF9ET1RTX0FMTCwKKyAgW2NzTG93ZXJMZWZ0RG90XSA9IChCUkxfRE9UXzcpLAorICBbY3NMb3dlclJpZ2h0RG90XSA9IChCUkxfRE9UXzgpLAorICBbY3NOb0RvdHNdID0gKDApCit9OworCit1bnNpZ25lZCBjaGFyCitnZXRDdXJzb3JEb3RzIChjb25zdCB1bnNpZ25lZCBjaGFyICpzZXR0aW5nKSB7CisgIGlmICgqc2V0dGluZyA+PSBBUlJBWV9DT1VOVChjdXJzb3JTdHlsZXMpKSByZXR1cm4gMDsKKyAgcmV0dXJuIGN1cnNvclN0eWxlc1sqc2V0dGluZ107Cit9CisKK2ludAorc2V0Q3Vyc29yRG90cyAodW5zaWduZWQgY2hhciAqc2V0dGluZywgdW5zaWduZWQgY2hhciBkb3RzKSB7CisgIGZvciAodW5zaWduZWQgY2hhciBzdHlsZT0wOyBzdHlsZTxBUlJBWV9DT1VOVChjdXJzb3JTdHlsZXMpOyBzdHlsZSs9MSkgeworICAgIGlmIChkb3RzID09IGN1cnNvclN0eWxlc1tzdHlsZV0pIHsKKyAgICAgICpzZXR0aW5nID0gc3R5bGU7CisgICAgICByZXR1cm4gMTsKKyAgICB9CisgIH0KKworICByZXR1cm4gMDsKK30KKwordW5zaWduZWQgY2hhcgorZ2V0U2NyZWVuQ3Vyc29yRG90cyAodm9pZCkgeworICByZXR1cm4gZ2V0Q3Vyc29yRG90cygmcHJlZnMuc2NyZWVuQ3Vyc29yU3R5bGUpOworfQorCitpbnQKK3NldFNjcmVlbkN1cnNvckRvdHMgKHVuc2lnbmVkIGNoYXIgZG90cykgeworICByZXR1cm4gc2V0Q3Vyc29yRG90cygmcHJlZnMuc2NyZWVuQ3Vyc29yU3R5bGUsIGRvdHMpOworfQorCit1bnNpZ25lZCBjaGFyCitnZXRTcGVlY2hDdXJzb3JEb3RzICh2b2lkKSB7CisgIHJldHVybiBnZXRDdXJzb3JEb3RzKCZwcmVmcy5zcGVlY2hDdXJzb3JTdHlsZSk7Cit9CisKK2ludAorc2V0U3BlZWNoQ3Vyc29yRG90cyAodW5zaWduZWQgY2hhciBkb3RzKSB7CisgIHJldHVybiBzZXRDdXJzb3JEb3RzKCZwcmVmcy5zcGVlY2hDdXJzb3JTdHlsZSwgZG90cyk7Cit9CisKK3Vuc2lnbmVkIGNoYXIKK21hcEN1cnNvckRvdHMgKHVuc2lnbmVkIGNoYXIgZG90cykgeworICBpZiAoIWhhc0VpZ2h0RG90Q2VsbHMoJmJybCkpIHsKKyAgICBicmxSZW1hcERvdCgmZG90cywgQlJMX0RPVF83LCBCUkxfRE9UXzMpOworICAgIGJybFJlbWFwRG90KCZkb3RzLCBCUkxfRE9UXzgsIEJSTF9ET1RfNik7CisgIH0KKworICByZXR1cm4gZG90czsKK30KKworc3RhdGljIGludAorZ2V0U2NyZWVuQ3Vyc29yUG9zaXRpb24gKGludCB4LCBpbnQgeSkgeworICBpZiAoeSA8IHNlcy0+d2lueSkgcmV0dXJuIEJSTF9OT19DVVJTT1I7CisgIGlmICh5ID49IHNjci5yb3dzKSByZXR1cm4gQlJMX05PX0NVUlNPUjsKKyAgaWYgKHkgPj0gKGludCkoc2VzLT53aW55ICsgYnJsLnRleHRSb3dzKSkgcmV0dXJuIEJSTF9OT19DVVJTT1I7CisKKyAgaWYgKHggPCBzZXMtPndpbngpIHJldHVybiBCUkxfTk9fQ1VSU09SOworICBpZiAoeCA+PSBzY3IuY29scykgcmV0dXJuIEJSTF9OT19DVVJTT1I7CisKKyAgaW50IHJvd0luZGV4ID0geSAtIHNlcy0+d2lueTsKKyAgaW50IHJvd1Bvc2l0aW9uID0gKHJvd0luZGV4ICogYnJsLnRleHRDb2x1bW5zKSArIHRleHRTdGFydDsKKworICBpZiAoaXNDb250cmFjdGVkKSB7CisgICAgQnJhaWxsZVJvd0Rlc2NyaXB0b3IgKmJyZCA9IGdldEJyYWlsbGVSb3dEZXNjcmlwdG9yKHJvd0luZGV4KTsKKyAgICBpZiAoIWJyZCkgcmV0dXJuIEJSTF9OT19DVVJTT1I7CisKKyAgICBpbnQgKm9mZnNldHMgPSBicmQtPmNvbnRyYWN0ZWQub2Zmc2V0cy5hcnJheTsKKyAgICBpZiAoIW9mZnNldHMpIHJldHVybiBCUkxfTk9fQ1VSU09SOworCisgICAgeCAtPSBzZXMtPndpbng7CisgICAgaWYgKHggPj0gYnJkLT5jb250cmFjdGVkLmxlbmd0aCkgcmV0dXJuIEJSTF9OT19DVVJTT1I7CisKKyAgICB3aGlsZSAoeCA+PSAwKSB7CisgICAgICBpbnQgb2Zmc2V0ID0gb2Zmc2V0c1t4XTsKKworICAgICAgaWYgKG9mZnNldCAhPSBDVEJfTk9fT0ZGU0VUKSB7CisgICAgICAgIGlmIChvZmZzZXQgPCB0ZXh0Q291bnQpIHJldHVybiByb3dQb3NpdGlvbiArIG9mZnNldDsKKyAgICAgICAgYnJlYWs7CisgICAgICB9CisKKyAgICAgIHggLT0gMTsKKyAgICB9CisgIH0gZWxzZSBpZiAoeCA8IChpbnQpKHNlcy0+d2lueCArIHRleHRDb3VudCkpIHsKKyAgICByZXR1cm4gcm93UG9zaXRpb24gKyAoeCAtIHNlcy0+d2lueCk7CisgIH0KKworICByZXR1cm4gQlJMX05PX0NVUlNPUjsKK30KKworc3RhdGljIGludAord3JpdGVTdGF0dXNDZWxscyAodm9pZCkgeworICBpZiAoYnJhaWxsZS0+d3JpdGVTdGF0dXMpIHsKKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpmaWVsZHMgPSBwcmVmcy5zdGF0dXNGaWVsZHM7CisgICAgdW5zaWduZWQgaW50IGxlbmd0aCA9IGdldFN0YXR1c0ZpZWxkc0xlbmd0aChmaWVsZHMpOworCisgICAgaWYgKGxlbmd0aCA+IDApIHsKKyAgICAgIHVuc2lnbmVkIGludCBjb3VudCA9IGJybC5zdGF0dXNDb2x1bW5zICogYnJsLnN0YXR1c1Jvd3M7CisgICAgICBpZiAoY291bnQgPCBsZW5ndGgpIGNvdW50ID0gbGVuZ3RoOworICAgICAgdW5zaWduZWQgY2hhciBjZWxsc1tjb3VudF07CisKKyAgICAgIG1lbXNldChjZWxscywgMCwgY291bnQpOworICAgICAgcmVuZGVyU3RhdHVzRmllbGRzKGZpZWxkcywgY2VsbHMpOworICAgICAgaWYgKCFicmFpbGxlLT53cml0ZVN0YXR1cygmYnJsLCBjZWxscykpIHJldHVybiAwOworICAgIH0gZWxzZSBpZiAoIWNsZWFyU3RhdHVzQ2VsbHMoJmJybCkpIHsKKyAgICAgIHJldHVybiAwOworICAgIH0KKyAgfQorCisgIHJldHVybiAxOworfQorCitzdGF0aWMgaW5saW5lIGNoYXIKK2dldFNjcmVlbkN1cnNvclRyYWNraW5nQ2hhcmFjdGVyICh2b2lkKSB7CisgIHJldHVybiBzZXMtPnRyYWNrU2NyZWVuQ3Vyc29yPyAndCc6ICcgJzsKK30KKworc3RhdGljIGlubGluZSBjaGFyCitnZXRTY3JlZW5DdXJzb3JWaXNpYmlsaXR5Q2hhcmFjdGVyICh2b2lkKSB7CisgIHJldHVybiBwcmVmcy5zaG93U2NyZWVuQ3Vyc29yPyAnYyc6ICcgJzsKK30KKworc3RhdGljIGlubGluZSBjaGFyCitnZXRBdHRyaWJ1dGVzVW5kZXJsaW5lVmlzaWJpbGl0eUNoYXJhY3RlciAodm9pZCkgeworICByZXR1cm4gcHJlZnMuc2hvd0F0dHJpYnV0ZXM/ICd1JzogJyAnOworfQorCitzdGF0aWMgaW5saW5lIGNoYXIKK2dldFNwZWNpYWxTY3JlZW5DaGFyYWN0ZXIgKHZvaWQpIHsKKyAgaWYgKGlzU3BlY2lhbFNjcmVlbihTQ1JfRlJPWkVOKSkgcmV0dXJuICdmJzsKKyAgaWYgKGlzU3BlY2lhbFNjcmVlbihTQ1JfSEVMUCkpIHJldHVybiAnaCc7CisgIGlmIChpc1NwZWNpYWxTY3JlZW4oU0NSX01FTlUpKSByZXR1cm4gJ20nOworICByZXR1cm4gJyAnOworfQorCitzdGF0aWMgaW5saW5lIGNoYXIKK2dldEJyYWlsbGVWYXJpYW50Q2hhcmFjdGVyICh2b2lkKSB7CisgIHJldHVybiBzZXMtPmRpc3BsYXlNb2RlPyAnYSc6CisgICAgICAgICBpc0NvbnRyYWN0ZWRCcmFpbGxlKCk/ICdjJzoKKyAgICAgICAgIGlzU2l4RG90Q29tcHV0ZXJCcmFpbGxlKCk/ICc2JzogJzgnOworfQorCitzdGF0aWMgaW5saW5lIGNoYXIKK2dldEJyYWlsbGVLZXlib2FyZENoYXJhY3RlciAodm9pZCkgeworICBpZiAoIXByZWZzLmJyYWlsbGVLZXlib2FyZEVuYWJsZWQpIHJldHVybiAnZCc7CisgIGlmIChwcmVmcy5icmFpbGxlVHlwaW5nTW9kZSkgcmV0dXJuICdiJzsKKyAgcmV0dXJuICcgJzsKK30KKworc3RhdGljIGlubGluZSBjaGFyCitnZXRTcGVlY2hDdXJzb3JWaXNpYmlsaXR5Q2hhcmFjdGVyICh2b2lkKSB7CisgIHJldHVybiBwcmVmcy5zaG93U3BlZWNoQ3Vyc29yPyAncyc6ICcgJzsKK30KKworc3RhdGljIGludAorcmVuZGVySW5mb0xpbmUgKHZvaWQpIHsKKyAgYnJsLmN1cnNvciA9IEJSTF9OT19DVVJTT1I7CisKKyAgc3RhdGljIGNvbnN0IGNoYXIgbW9kZVtdID0gImluZm8iOworICBpZiAoIXNldFN0YXR1c1RleHQoJmJybCwgbW9kZSkpIHJldHVybiAwOworCisgIC8qIFdlIG11c3QgYmUgY2FyZWZ1bC4gU29tZSBkaXNwbGF5cyAoZS5nLiBCcmFpbGxlIExpdGUgMTgpCisgICAqIGFyZSB2ZXJ5IHNtYWxsLCBhbmQgb3RoZXJzIChlLmcuIEJvb2t3b3JtKSBhcmUgZXZlbiBzbWFsbGVyLgorICAgKiBBbHNvLCBzb21lIGRpc3BsYXlzIChlLmcuIEJyYWlsbGUgTWUpIGhhdmUgb25seSBzaXggZG90cyBwZXIgY2VsbC4KKyAgICovCisgIGNvbnN0IHNpemVfdCBzaXplID0gYnJsLnRleHRDb2x1bW5zICogYnJsLnRleHRSb3dzOworICBpbnQgY29tcGFjdCA9IChzaXplIDwgMjIpICYmIGhhc0VpZ2h0RG90Q2VsbHMoJmJybCk7CisKKyAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgY29tcGFjdEZpZWxkc1tdID0geworICAgIHNmQ3Vyc29yQW5kV2luZG93Q29sdW1uMiwgc2ZDdXJzb3JBbmRXaW5kb3dSb3cyLCBzZlN0YXRlRG90cywgc2ZFbmQKKyAgfTsKKworICBzdGF0aWMgdW5zaWduZWQgaW50IGNvbXBhY3RMZW5ndGggPSAwOworICBpZiAoIWNvbXBhY3RMZW5ndGgpIGNvbXBhY3RMZW5ndGggPSBnZXRTdGF0dXNGaWVsZHNMZW5ndGgoY29tcGFjdEZpZWxkcyk7CisgIHVuc2lnbmVkIGNoYXIgY29tcGFjdENlbGxzW2NvbXBhY3RMZW5ndGhdOworCisgIHNpemVfdCBsZW5ndGg7CisgIGNoYXIgdGV4dFtzaXplICsgMV07CisgIFNUUl9CRUdJTih0ZXh0LCBzaXplb2YodGV4dCkpOworCisgIGlmIChjb21wYWN0KSB7CisgICAgbWVtc2V0KGNvbXBhY3RDZWxscywgMCwgY29tcGFjdExlbmd0aCk7CisgICAgcmVuZGVyU3RhdHVzRmllbGRzKGNvbXBhY3RGaWVsZHMsIGNvbXBhY3RDZWxscyk7CisKKyAgICB7CisgICAgICB1bnNpZ25lZCBpbnQgY291bnRlciA9IGNvbXBhY3RMZW5ndGg7CisgICAgICB3aGlsZSAoY291bnRlci0tKSBTVFJfUFJJTlRGKCJ4Iik7CisgICAgfQorICB9IGVsc2UgeworICAgIFNUUl9QUklOVEYoCisgICAgICAiJTAyZDolMDJkICUwMmQ6JTAyZCIsCisgICAgICBTQ1JfQ09MVU1OX05VTUJFUihzZXMtPndpbngpLCBTQ1JfUk9XX05VTUJFUihzZXMtPndpbnkpLAorICAgICAgU0NSX0NPTFVNTl9OVU1CRVIoc2NyLnBvc3gpLCBTQ1JfUk9XX05VTUJFUihzY3IucG9zeSkKKyAgICApOworICB9CisKKyAgU1RSX1BSSU5URigKKyAgICAiICUwMmQgJWMlYyVjJWMlYyVjJWMiLAorICAgIHNjci5udW1iZXIsIAorICAgIGdldFNjcmVlbkN1cnNvclRyYWNraW5nQ2hhcmFjdGVyKCksCisgICAgZ2V0U2NyZWVuQ3Vyc29yVmlzaWJpbGl0eUNoYXJhY3RlcigpLAorICAgIGdldEF0dHJpYnV0ZXNVbmRlcmxpbmVWaXNpYmlsaXR5Q2hhcmFjdGVyKCksCisgICAgZ2V0U3BlZWNoQ3Vyc29yVmlzaWJpbGl0eUNoYXJhY3RlcigpLAorICAgIGdldFNwZWNpYWxTY3JlZW5DaGFyYWN0ZXIoKSwKKyAgICBnZXRCcmFpbGxlVmFyaWFudENoYXJhY3RlcigpLAorICAgIGdldEJyYWlsbGVLZXlib2FyZENoYXJhY3RlcigpCisgICk7CisKKyAgaWYgKChTVFJfTEVOR1RIICsgNikgPD0gc2l6ZSkgeworICAgIFRpbWVGb3JtYXR0aW5nRGF0YSBmbXQ7CisgICAgZ2V0VGltZUZvcm1hdHRpbmdEYXRhKCZmbXQpOworCisgICAgU1RSX1BSSU5URigiICIpOworICAgIFNUUl9GT1JNQVQoZm9ybWF0QnJhaWxsZVRpbWUsICZmbXQpOworCisgICAgaWYgKHByZWZzLnNob3dTZWNvbmRzKSB7CisgICAgICBzY2hlZHVsZVVwZGF0ZUluKCJpbmZvIGNsb2NrIHNlY29uZCIsIG1pbGxpc2Vjb25kc1RpbGxOZXh0U2Vjb25kKCZmbXQudmFsdWUpKTsKKyAgICB9IGVsc2UgeworICAgICAgc2NoZWR1bGVVcGRhdGVJbigiaW5mbyBjbG9jayBtaW51dGUiLCBtaWxsaXNlY29uZHNUaWxsTmV4dE1pbnV0ZSgmZm10LnZhbHVlKSk7CisgICAgfQorICB9CisKKyAgbGVuZ3RoID0gU1RSX0xFTkdUSDsKKyAgU1RSX0VORDsKKworICBpZiAobGVuZ3RoID4gc2l6ZSkgbGVuZ3RoID0gc2l6ZTsKKyAgd2NoYXJfdCBjaGFyYWN0ZXJzW2xlbmd0aF07CisKKyAgeworICAgIHVuc2lnbmVkIGludCB0aHJlc2hvbGQgPSBjb21wYWN0PyBjb21wYWN0TGVuZ3RoOiAwOworCisgICAgZm9yICh1bnNpZ25lZCBpbnQgaT0wOyBpPGxlbmd0aDsgaSs9MSkgeworICAgICAgd2ludF90IGNoYXJhY3RlcjsKKworICAgICAgaWYgKGkgPCB0aHJlc2hvbGQpIHsKKyAgICAgICAgY2hhcmFjdGVyID0gVU5JQ09ERV9CUkFJTExFX1JPVyB8IGNvbXBhY3RDZWxsc1tpXTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIGNoYXJhY3RlciA9IGNvbnZlcnRDaGFyVG9XY2hhcih0ZXh0W2ldKTsKKyAgICAgICAgaWYgKGNoYXJhY3RlciA9PSBXRU9GKSBjaGFyYWN0ZXIgPSBXQ19DKCc/Jyk7CisgICAgICB9CisKKyAgICAgIGNoYXJhY3RlcnNbaV0gPSBjaGFyYWN0ZXI7CisgICAgfQorICB9CisKKyAgcmV0dXJuIHdyaXRlQnJhaWxsZUNoYXJhY3RlcnMobW9kZSwgY2hhcmFjdGVycywgbGVuZ3RoKTsKK30KKworc3RhdGljIGludAorc2F2ZVNjcmVlbkNoYXJhY3RlcnMgKAorICBTY3JlZW5DaGFyYWN0ZXIgKipidWZmZXIsIHNpemVfdCAqc2l6ZSwKKyAgY29uc3QgU2NyZWVuQ2hhcmFjdGVyICpjaGFyYWN0ZXJzLCBzaXplX3QgY291bnQKKykgeworICBzaXplX3QgbmV3U2l6ZSA9IGNvdW50ICogc2l6ZW9mKCpjaGFyYWN0ZXJzKTsKKworICBpZiAobmV3U2l6ZSA+ICpzaXplKSB7CisgICAgU2NyZWVuQ2hhcmFjdGVyICpuZXdCdWZmZXIgPSBtYWxsb2MobmV3U2l6ZSk7CisKKyAgICBpZiAoIW5ld0J1ZmZlcikgeworICAgICAgbG9nTWFsbG9jRXJyb3IoKTsKKyAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIGlmICgqYnVmZmVyKSBmcmVlKCpidWZmZXIpOworICAgICpidWZmZXIgPSBuZXdCdWZmZXI7CisgICAgKnNpemUgPSBuZXdTaXplOworICB9CisKKyAgbWVtY3B5KCpidWZmZXIsIGNoYXJhY3RlcnMsIG5ld1NpemUpOworICByZXR1cm4gMTsKK30KKworc3RhdGljIHZvaWQKK2NoZWNrU2NyZWVuU2Nyb2xsIChpbnQgdHJhY2spIHsKKyAgY29uc3QgaW50IHJvd0NvdW50ID0gMzsKKworICBzdGF0aWMgaW50IG9sZFNjcmVlbiA9IC0xOworICBzdGF0aWMgaW50IG9sZFJvdyA9IC0xOworICBzdGF0aWMgaW50IG9sZFdpZHRoID0gMDsKKyAgc3RhdGljIHNpemVfdCBvbGRTaXplID0gMDsKKyAgc3RhdGljIFNjcmVlbkNoYXJhY3RlciAqb2xkQ2hhcmFjdGVycyA9IE5VTEw7CisKKyAgaW50IG5ld1NjcmVlbiA9IHNjci5udW1iZXI7CisgIGludCBuZXdXaWR0aCA9IHNjci5jb2xzOworICBzaXplX3QgbmV3Q291bnQgPSBuZXdXaWR0aCAqIHJvd0NvdW50OworICBTY3JlZW5DaGFyYWN0ZXIgbmV3Q2hhcmFjdGVyc1tuZXdDb3VudF07CisKKyAgaW50IG5ld1JvdyA9IHNlcy0+d2lueTsKKyAgaW50IG5ld1RvcCA9IG5ld1JvdyAtIChyb3dDb3VudCAtIDEpOworCisgIGlmIChuZXdUb3AgPCAwKSB7CisgICAgbmV3Q291bnQgPSAwOworICB9IGVsc2UgeworICAgIHJlYWRTY3JlZW5Sb3dzKG5ld1RvcCwgbmV3V2lkdGgsIHJvd0NvdW50LCBuZXdDaGFyYWN0ZXJzKTsKKworICAgIGlmICh0cmFjayAmJiBwcmVmcy50cmFja1NjcmVlblNjcm9sbCAmJiBvbGRDaGFyYWN0ZXJzICYmCisgICAgICAgIChuZXdTY3JlZW4gPT0gb2xkU2NyZWVuKSAmJiAobmV3V2lkdGggPT0gb2xkV2lkdGgpICYmCisgICAgICAgIChuZXdSb3cgPT0gb2xkUm93KSkgeworICAgICAgd2hpbGUgKG5ld1RvcCA+IDApIHsKKyAgICAgICAgaWYgKChzY3IucG9zeSA+PSBuZXdUb3ApICYmIChzY3IucG9zeSA8PSBuZXdSb3cpKSBicmVhazsKKworICAgICAgICBpZiAoaXNTYW1lUm93KG9sZENoYXJhY3RlcnMsIG5ld0NoYXJhY3RlcnMsIG5ld0NvdW50LCBpc1NhbWVDaGFyYWN0ZXIpKSB7CisgICAgICAgICAgaWYgKG5ld1JvdyAhPSBzZXMtPndpbnkpIHsKKyAgICAgICAgICAgIHNlcy0+d2lueSA9IG5ld1JvdzsKKyAgICAgICAgICAgIGFsZXJ0KEFMRVJUX1NDUk9MTF9VUCk7CisgICAgICAgICAgfQorCisgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICByZWFkU2NyZWVuUm93cygtLW5ld1RvcCwgbmV3V2lkdGgsIHJvd0NvdW50LCBuZXdDaGFyYWN0ZXJzKTsKKyAgICAgICAgbmV3Um93IC09IDE7CisgICAgICB9CisgICAgfQorICB9CisKKyAgaWYgKHNhdmVTY3JlZW5DaGFyYWN0ZXJzKCZvbGRDaGFyYWN0ZXJzLCAmb2xkU2l6ZSwgbmV3Q2hhcmFjdGVycywgbmV3Q291bnQpKSB7CisgICAgb2xkU2NyZWVuID0gbmV3U2NyZWVuOworICAgIG9sZFJvdyA9IHNlcy0+d2lueTsKKyAgICBvbGRXaWR0aCA9IG5ld1dpZHRoOworICB9Cit9CisKK3N0YXRpYyBpbnQgb2xkd2lueDsKK3N0YXRpYyBpbnQgb2xkd2lueTsKKworI2lmZGVmIEVOQUJMRV9TUEVFQ0hfU1VQUE9SVAorc3RhdGljIGludCB3YXNBdXRvc3BlYWtpbmc7CisKK3ZvaWQKK2F1dG9zcGVhayAoQXV0b3NwZWFrTW9kZSBtb2RlKSB7CisgIHN0YXRpYyBpbnQgb2xkU2NyZWVuID0gLTE7CisgIHN0YXRpYyBpbnQgb2xkWCA9IC0xOworICBzdGF0aWMgaW50IG9sZFkgPSAtMTsKKyAgc3RhdGljIGludCBvbGRXaWR0aCA9IDA7CisgIHN0YXRpYyBTY3JlZW5DaGFyYWN0ZXIgKm9sZENoYXJhY3RlcnMgPSBOVUxMOworICBzdGF0aWMgc2l6ZV90IG9sZFNpemUgPSAwOworICBzdGF0aWMgaW50IGN1cnNvckFzc3VtZWRTdGFibGUgPSAwOworCisgIGludCBuZXdTY3JlZW4gPSBzY3IubnVtYmVyOworICBpbnQgbmV3WCA9IHNjci5wb3N4OworICBpbnQgbmV3WSA9IHNjci5wb3N5OworICBpbnQgbmV3V2lkdGggPSBzY3IuY29sczsKKyAgU2NyZWVuQ2hhcmFjdGVyIG5ld0NoYXJhY3RlcnNbbmV3V2lkdGhdOworCisgIHJlYWRTY3JlZW5Sb3coc2VzLT53aW55LCBuZXdXaWR0aCwgbmV3Q2hhcmFjdGVycyk7CisKKyAgaWYgKCFzcGsudHJhY2suaXNBY3RpdmUpIHsKKyAgICBjb25zdCBTY3JlZW5DaGFyYWN0ZXIgKmNoYXJhY3RlcnMgPSBuZXdDaGFyYWN0ZXJzOworICAgIGludCBjb2x1bW4gPSAwOworICAgIGludCBjb3VudCA9IG5ld1dpZHRoOworICAgIGNvbnN0IGNoYXIgKnJlYXNvbiA9IE5VTEw7CisgICAgaW50IGluZGVudCA9IDA7CisKKyAgICBpZiAobW9kZSA9PSBBVVRPU1BFQUtfRk9SQ0UpIHsKKyAgICAgIHJlYXNvbiA9ICJjdXJyZW50IGxpbmUiOworICAgIH0gZWxzZSBpZiAoIW9sZENoYXJhY3RlcnMpIHsKKyAgICAgIHJlYXNvbiA9ICJpbml0aWFsIGxpbmUiOworICAgICAgY291bnQgPSAwOworICAgIH0gZWxzZSBpZiAoKG5ld1NjcmVlbiAhPSBvbGRTY3JlZW4pIHx8IChzZXMtPndpbnkgIT0gb2xkd2lueSkgfHwgKG5ld1dpZHRoICE9IG9sZFdpZHRoKSkgeworICAgICAgaWYgKCFwcmVmcy5hdXRvc3BlYWtTZWxlY3RlZExpbmUpIGNvdW50ID0gMDsKKyAgICAgIHJlYXNvbiA9ICJsaW5lIHNlbGVjdGVkIjsKKyAgICAgIGlmIChwcmVmcy5hdXRvc3BlYWtMaW5lSW5kZW50KSBpbmRlbnQgPSAxOworICAgIH0gZWxzZSB7CisgICAgICBpbnQgb25TY3JlZW4gPSAobmV3WCA+PSAwKSAmJiAobmV3WCA8IG5ld1dpZHRoKTsKKworICAgICAgaWYgKCFpc1NhbWVSb3cobmV3Q2hhcmFjdGVycywgb2xkQ2hhcmFjdGVycywgbmV3V2lkdGgsIGlzU2FtZVRleHQpKSB7CisgICAgICAgIGlmICgobmV3WSA9PSBzZXMtPndpbnkpICYmIChuZXdZID09IG9sZFkpICYmIG9uU2NyZWVuKSB7CisgICAgICAgICAgLyogU29tZXRpbWVzIHRoZSBjdXJzb3IgbW92ZXMgYWZ0ZXIgdGhlIHNjcmVlbiBjb250ZW50IGhhcyBiZWVuCisgICAgICAgICAgICogdXBkYXRlZC4gTWFrZSBzdXJlIHdlIGRvbid0IHJhY2UgYWhlYWQgb2Ygc3VjaCBhIGN1cnNvciBtb3ZlCisgICAgICAgICAgICogYmVmb3JlIGFzc3VtaW5nIHRoYXQgaXQgaXMgYWN0dWFsbHkgc3RhYmxlLgorICAgICAgICAgICAqLworCSAgaWYgKChuZXdYID09IG9sZFgpICYmICFjdXJzb3JBc3N1bWVkU3RhYmxlKSB7CisJICAgIHNjaGVkdWxlVXBkYXRlKCJhdXRvc3BlYWsgY3Vyc29yIHN0YWJpbGl0eSBjaGVjayIpOworCSAgICBjdXJzb3JBc3N1bWVkU3RhYmxlID0gMTsKKwkgICAgcmV0dXJuOworCSAgfQorCisgICAgICAgICAgaWYgKChuZXdYID09IG9sZFgpICYmCisgICAgICAgICAgICAgIGlzU2FtZVJvdyhuZXdDaGFyYWN0ZXJzLCBvbGRDaGFyYWN0ZXJzLCBuZXdYLCBpc1NhbWVUZXh0KSkgeworICAgICAgICAgICAgaW50IG9sZExlbmd0aCA9IG9sZFdpZHRoOworICAgICAgICAgICAgaW50IG5ld0xlbmd0aCA9IG5ld1dpZHRoOworICAgICAgICAgICAgaW50IHggPSBuZXdYOworCisgICAgICAgICAgICB3aGlsZSAob2xkTGVuZ3RoID4gb2xkWCkgeworICAgICAgICAgICAgICBpZiAoIWlzd3NwYWNlKG9sZENoYXJhY3RlcnNbb2xkTGVuZ3RoLTFdLnRleHQpKSBicmVhazsKKyAgICAgICAgICAgICAgb2xkTGVuZ3RoIC09IDE7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAob2xkTGVuZ3RoIDwgb2xkV2lkdGgpIG9sZExlbmd0aCArPSAxOworCisgICAgICAgICAgICB3aGlsZSAobmV3TGVuZ3RoID4gbmV3WCkgeworICAgICAgICAgICAgICBpZiAoIWlzd3NwYWNlKG5ld0NoYXJhY3RlcnNbbmV3TGVuZ3RoLTFdLnRleHQpKSBicmVhazsKKyAgICAgICAgICAgICAgbmV3TGVuZ3RoIC09IDE7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAobmV3TGVuZ3RoIDwgbmV3V2lkdGgpIG5ld0xlbmd0aCArPSAxOworCisgICAgICAgICAgICB3aGlsZSAoMSkgeworICAgICAgICAgICAgICBpbnQgZG9uZSA9IDE7CisKKyAgICAgICAgICAgICAgaWYgKHggPCBuZXdMZW5ndGgpIHsKKyAgICAgICAgICAgICAgICBpZiAoaXNTYW1lUm93KG5ld0NoYXJhY3RlcnMreCwgb2xkQ2hhcmFjdGVycytvbGRYLCBuZXdXaWR0aC14LCBpc1NhbWVUZXh0KSkgeworICAgICAgICAgICAgICAgICAgY29sdW1uID0gbmV3WDsKKyAgICAgICAgICAgICAgICAgIGNvdW50ID0gcHJlZnMuYXV0b3NwZWFrSW5zZXJ0ZWRDaGFyYWN0ZXJzPyAoeCAtIG5ld1gpOiAwOworICAgICAgICAgICAgICAgICAgcmVhc29uID0gImNoYXJhY3RlcnMgaW5zZXJ0ZWQgYWZ0ZXIgY3Vyc29yIjsKKyAgICAgICAgICAgICAgICAgIGdvdG8gYXV0b3NwZWFrOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGRvbmUgPSAwOworICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgaWYgKHggPCBvbGRMZW5ndGgpIHsKKyAgICAgICAgICAgICAgICBpZiAoaXNTYW1lUm93KG5ld0NoYXJhY3RlcnMrbmV3WCwgb2xkQ2hhcmFjdGVycyt4LCBvbGRXaWR0aC14LCBpc1NhbWVUZXh0KSkgeworICAgICAgICAgICAgICAgICAgY2hhcmFjdGVycyA9IG9sZENoYXJhY3RlcnM7CisgICAgICAgICAgICAgICAgICBjb2x1bW4gPSBvbGRYOworICAgICAgICAgICAgICAgICAgY291bnQgPSBwcmVmcy5hdXRvc3BlYWtEZWxldGVkQ2hhcmFjdGVycz8gKHggLSBvbGRYKTogMDsKKyAgICAgICAgICAgICAgICAgIHJlYXNvbiA9ICJjaGFyYWN0ZXJzIGRlbGV0ZWQgYWZ0ZXIgY3Vyc29yIjsKKyAgICAgICAgICAgICAgICAgIGdvdG8gYXV0b3NwZWFrOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGRvbmUgPSAwOworICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgaWYgKGRvbmUpIGJyZWFrOworICAgICAgICAgICAgICB4ICs9IDE7CisgICAgICAgICAgICB9CisgICAgICAgICAgfQorCisgICAgICAgICAgaWYgKG9sZFggPCAwKSBvbGRYID0gMDsKKyAgICAgICAgICBpZiAoKG5ld1ggPiBvbGRYKSAmJgorICAgICAgICAgICAgICBpc1NhbWVSb3cobmV3Q2hhcmFjdGVycywgb2xkQ2hhcmFjdGVycywgb2xkWCwgaXNTYW1lVGV4dCkgJiYKKyAgICAgICAgICAgICAgaXNTYW1lUm93KG5ld0NoYXJhY3RlcnMrbmV3WCwgb2xkQ2hhcmFjdGVycytvbGRYLCBuZXdXaWR0aC1uZXdYLCBpc1NhbWVUZXh0KSkgeworICAgICAgICAgICAgY29sdW1uID0gb2xkWDsKKyAgICAgICAgICAgIGNvdW50ID0gbmV3WCAtIG9sZFg7CisKKyAgICAgICAgICAgIGlmIChwcmVmcy5hdXRvc3BlYWtDb21wbGV0ZWRXb3JkcykgeworICAgICAgICAgICAgICBpbnQgbGFzdCA9IGNvbHVtbiArIGNvdW50IC0gMTsKKworICAgICAgICAgICAgICBpZiAoaXN3c3BhY2UoY2hhcmFjdGVyc1tsYXN0XS50ZXh0KSkgeworICAgICAgICAgICAgICAgIGludCBmaXJzdCA9IGNvbHVtbjsKKworICAgICAgICAgICAgICAgIHdoaWxlIChmaXJzdCA+IDApIHsKKyAgICAgICAgICAgICAgICAgIGlmIChpc3dzcGFjZShjaGFyYWN0ZXJzWy0tZmlyc3RdLnRleHQpKSB7CisgICAgICAgICAgICAgICAgICAgIGZpcnN0ICs9IDE7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGlmIChmaXJzdCA8IGNvbHVtbikgeworICAgICAgICAgICAgICAgICAgd2hpbGUgKGxhc3QgPj0gZmlyc3QpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFpc3dzcGFjZShjaGFyYWN0ZXJzW2xhc3RdLnRleHQpKSBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgbGFzdCAtPSAxOworICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICBpZiAoKytsYXN0ID4gZmlyc3QpIHsKKyAgICAgICAgICAgICAgICAgICAgY29sdW1uID0gZmlyc3Q7CisgICAgICAgICAgICAgICAgICAgIGNvdW50ID0gKGxhc3QgKyAxKSAtIGZpcnN0OworICAgICAgICAgICAgICAgICAgICByZWFzb24gPSAid29yZCBpbnNlcnRlZCI7CisgICAgICAgICAgICAgICAgICAgIGdvdG8gYXV0b3NwZWFrOworICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIXByZWZzLmF1dG9zcGVha0luc2VydGVkQ2hhcmFjdGVycykgY291bnQgPSAwOworICAgICAgICAgICAgcmVhc29uID0gImNoYXJhY3RlcnMgaW5zZXJ0ZWQgYmVmb3JlIGN1cnNvciI7CisgICAgICAgICAgICBnb3RvIGF1dG9zcGVhazsKKyAgICAgICAgICB9CisKKyAgICAgICAgICBpZiAob2xkWCA+PSBvbGRXaWR0aCkgb2xkWCA9IG9sZFdpZHRoIC0gMTsKKyAgICAgICAgICBpZiAoKG5ld1ggPCBvbGRYKSAmJgorICAgICAgICAgICAgICBpc1NhbWVSb3cobmV3Q2hhcmFjdGVycywgb2xkQ2hhcmFjdGVycywgbmV3WCwgaXNTYW1lVGV4dCkgJiYKKyAgICAgICAgICAgICAgaXNTYW1lUm93KG5ld0NoYXJhY3RlcnMrbmV3WCwgb2xkQ2hhcmFjdGVycytvbGRYLCBvbGRXaWR0aC1vbGRYLCBpc1NhbWVUZXh0KSkgeworICAgICAgICAgICAgY2hhcmFjdGVycyA9IG9sZENoYXJhY3RlcnM7CisgICAgICAgICAgICBjb2x1bW4gPSBuZXdYOworICAgICAgICAgICAgY291bnQgPSBwcmVmcy5hdXRvc3BlYWtEZWxldGVkQ2hhcmFjdGVycz8gKG9sZFggLSBuZXdYKTogMDsKKyAgICAgICAgICAgIHJlYXNvbiA9ICJjaGFyYWN0ZXJzIGRlbGV0ZWQgYmVmb3JlIGN1cnNvciI7CisgICAgICAgICAgICBnb3RvIGF1dG9zcGVhazsKKyAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICB3aGlsZSAobmV3Q2hhcmFjdGVyc1tjb2x1bW5dLnRleHQgPT0gb2xkQ2hhcmFjdGVyc1tjb2x1bW5dLnRleHQpICsrY29sdW1uOworICAgICAgICB3aGlsZSAobmV3Q2hhcmFjdGVyc1tjb3VudC0xXS50ZXh0ID09IG9sZENoYXJhY3RlcnNbY291bnQtMV0udGV4dCkgLS1jb3VudDsKKyAgICAgICAgY291bnQgLT0gY29sdW1uOworICAgICAgICBpZiAoIXByZWZzLmF1dG9zcGVha1JlcGxhY2VkQ2hhcmFjdGVycykgY291bnQgPSAwOworICAgICAgICByZWFzb24gPSAiY2hhcmFjdGVycyByZXBsYWNlZCI7CisgICAgICB9IGVsc2UgaWYgKChuZXdZID09IHNlcy0+d2lueSkgJiYgKChuZXdYICE9IG9sZFgpIHx8IChuZXdZICE9IG9sZFkpKSAmJiBvblNjcmVlbikgeworICAgICAgICBjb2x1bW4gPSBuZXdYOworICAgICAgICBjb3VudCA9IHByZWZzLmF1dG9zcGVha1NlbGVjdGVkQ2hhcmFjdGVyPyAxOiAwOworICAgICAgICByZWFzb24gPSAiY2hhcmFjdGVyIHNlbGVjdGVkIjsKKworICAgICAgICBpZiAocHJlZnMuYXV0b3NwZWFrQ29tcGxldGVkV29yZHMpIHsKKyAgICAgICAgICBpZiAoKG5ld1ggPiBvbGRYKSAmJiAoY29sdW1uID49IDIpKSB7CisgICAgICAgICAgICBpbnQgbGVuZ3RoID0gbmV3V2lkdGg7CisKKyAgICAgICAgICAgIHdoaWxlIChsZW5ndGggPiAwKSB7CisgICAgICAgICAgICAgIGlmICghaXN3c3BhY2UoY2hhcmFjdGVyc1stLWxlbmd0aF0udGV4dCkpIHsKKyAgICAgICAgICAgICAgICBsZW5ndGggKz0gMTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoKGxlbmd0aCArIDEpID09IGNvbHVtbikgeworICAgICAgICAgICAgICBpbnQgZmlyc3QgPSBsZW5ndGggLSAxOworCisgICAgICAgICAgICAgIHdoaWxlIChmaXJzdCA+IDApIHsKKyAgICAgICAgICAgICAgICBpZiAoaXN3c3BhY2UoY2hhcmFjdGVyc1stLWZpcnN0XS50ZXh0KSkgeworICAgICAgICAgICAgICAgICAgZmlyc3QgKz0gMTsKKyAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgIGlmICgobGVuZ3RoIC09IGZpcnN0KSA+IDApIHsKKyAgICAgICAgICAgICAgICBjb2x1bW4gPSBmaXJzdDsKKyAgICAgICAgICAgICAgICBjb3VudCA9IGxlbmd0aCArIDE7CisgICAgICAgICAgICAgICAgcmVhc29uID0gIndvcmQgYXBwZW5kZWQiOworICAgICAgICAgICAgICAgIGdvdG8gYXV0b3NwZWFrOworICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICB9IGVsc2UgeworICAgICAgICBjb3VudCA9IDA7CisgICAgICB9CisgICAgfQorCisgIGF1dG9zcGVhazoKKyAgICBpZiAobW9kZSA9PSBBVVRPU1BFQUtfU0lMRU5UKSBjb3VudCA9IDA7CisKKyAgICBjaGFyYWN0ZXJzICs9IGNvbHVtbjsKKyAgICBpbnQgaW50ZXJydXB0ID0gMTsKKworICAgIGlmIChpbmRlbnQpIHsKKyAgICAgIGlmIChzcGVha0luZGVudChjaGFyYWN0ZXJzLCBjb3VudCwgMCkpIHsKKyAgICAgICAgaW50ZXJydXB0ID0gMDsKKyAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoY291bnQgJiYgKHNjci5xdWFsaXR5ID49IGF1dG9zcGVha01pbmltdW1TY3JlZW5Db250ZW50UXVhbGl0eSkpIHsKKyAgICAgIGlmICghcmVhc29uKSByZWFzb24gPSAidW5rbm93biByZWFzb24iOworCisgICAgICBsb2dNZXNzYWdlKExPR19DQVRFR09SWShTUEVFQ0hfRVZFTlRTKSwKKyAgICAgICAgImF1dG9zcGVhazogJXM6IFslZCwlZF0gJWQuJWQiLAorICAgICAgICByZWFzb24sIHNlcy0+d2lueCwgc2VzLT53aW55LCBjb2x1bW4sIGNvdW50CisgICAgICApOworCisgICAgICBzcGVha0NoYXJhY3RlcnMoY2hhcmFjdGVycywgY291bnQsIDAsIGludGVycnVwdCk7CisgICAgfQorICB9CisKKyAgaWYgKHNhdmVTY3JlZW5DaGFyYWN0ZXJzKCZvbGRDaGFyYWN0ZXJzLCAmb2xkU2l6ZSwgbmV3Q2hhcmFjdGVycywgbmV3V2lkdGgpKSB7CisgICAgb2xkU2NyZWVuID0gbmV3U2NyZWVuOworICAgIG9sZFggPSBuZXdYOworICAgIG9sZFkgPSBuZXdZOworICAgIG9sZFdpZHRoID0gbmV3V2lkdGg7CisgICAgY3Vyc29yQXNzdW1lZFN0YWJsZSA9IDA7CisgIH0KK30KKwordm9pZAorc3VwcHJlc3NBdXRvc3BlYWsgKHZvaWQpIHsKKyAgaWYgKGlzQXV0b3NwZWFrQWN0aXZlKCkpIHsKKyAgICBhdXRvc3BlYWsoQVVUT1NQRUFLX1NJTEVOVCk7CisgICAgb2xkd2lueCA9IHNlcy0+d2lueDsKKyAgICBvbGR3aW55ID0gc2VzLT53aW55OworICB9Cit9CisjZW5kaWYgLyogRU5BQkxFX1NQRUVDSF9TVVBQT1JUICovCisKK3ZvaWQKK3JlcG9ydEJyYWlsbGVXaW5kb3dNb3ZlZCAodm9pZCkgeworICBjb25zdCBCcmFpbGxlV2luZG93TW92ZWRSZXBvcnQgZGF0YSA9IHsKKyAgICAuc2NyZWVuID0geworICAgICAgLmNvbHVtbiA9IHNlcy0+d2lueCwKKyAgICAgIC5yb3cgPSBzZXMtPndpbnkKKyAgICB9LAorCisgICAgLnRleHQgPSB7CisgICAgICAuY291bnQgPSB0ZXh0Q291bnQKKyAgICB9CisgIH07CisKKyAgcmVwb3J0KFJFUE9SVF9CUkFJTExFX1dJTkRPV19NT1ZFRCwgJmRhdGEpOworfQorCitpbnQKK3dyaXRlQnJhaWxsZVdpbmRvdyAoQnJhaWxsZURpc3BsYXkgKmJybCwgY29uc3Qgd2NoYXJfdCAqdGV4dCwgdW5zaWduZWQgY2hhciBxdWFsaXR5KSB7CisgIHsKKyAgICBjb25zdCBCcmFpbGxlV2luZG93VXBkYXRlZFJlcG9ydCBkYXRhID0geworICAgICAgLmNlbGxzID0gJmJybC0+YnVmZmVyW3RleHRTdGFydF0sCisgICAgICAuY291bnQgPSB0ZXh0Q291bnQKKyAgICB9OworCisgICAgcmVwb3J0KFJFUE9SVF9CUkFJTExFX1dJTkRPV19VUERBVEVELCAmZGF0YSk7CisgIH0KKworICBicmwtPnF1YWxpdHkgPSBxdWFsaXR5OworICByZXR1cm4gYnJhaWxsZS0+d3JpdGVXaW5kb3coYnJsLCB0ZXh0KTsKK30KKworc3RhdGljIHZvaWQKK2RvVXBkYXRlICh2b2lkKSB7CisgIGxvZ01lc3NhZ2UoTE9HX0NBVEVHT1JZKFVQREFURV9FVkVOVFMpLCAic3RhcnRpbmciKTsKKyAgdW5yZXF1aXJlQWxsQmxpbmtEZXNjcmlwdG9ycygpOworICByZWZyZXNoU2NyZWVuKCk7CisgIHVwZGF0ZVNlc3Npb25BdHRyaWJ1dGVzKCk7CisgIGFwaS5mbHVzaE91dHB1dCgpOworCisgIGlmIChzY3IudW5yZWFkYWJsZSkgeworICAgIGxvZ01lc3NhZ2UoTE9HX0NBVEVHT1JZKFVQREFURV9FVkVOVFMpLCAic2NyZWVuIHVucmVhZGFibGU6ICVzIiwgc2NyLnVucmVhZGFibGUpOworICB9IGVsc2UgeworICAgIGxvZ01lc3NhZ2UoTE9HX0NBVEVHT1JZKFVQREFURV9FVkVOVFMpLCAic2NyZWVuOiAjJWQgJWR4JWQgWyVkLCVkXSIsCisgICAgICAgICAgICAgICBzY3IubnVtYmVyLCBzY3IuY29scywgc2NyLnJvd3MsIHNjci5wb3N4LCBzY3IucG9zeSk7CisgIH0KKworICBpZiAob3B0X3JlbGVhc2VEZXZpY2UpIHsKKyAgICBpZiAoc2NyLnVucmVhZGFibGUpIHsKKyAgICAgIGlmIChjYW5CcmFpbGxlKCkpIHsKKyAgICAgICAgbG9nTWVzc2FnZShMT0dfREVCVUcsICJzdXNwZW5kaW5nIGJyYWlsbGUgZHJpdmVyIik7CisgICAgICAgIHdyaXRlU3RhdHVzQ2VsbHMoKTsKKyAgICAgICAgd3JpdGVCcmFpbGxlVGV4dCgid3JuIiwgc2NyLnVucmVhZGFibGUpOworICAgICAgICBhcGkuc3VzcGVuZERyaXZlcigpOworICAgICAgICBicmwuaXNTdXNwZW5kZWQgPSAxOworICAgICAgICBsb2dNZXNzYWdlKExPR19ERUJVRywgImJyYWlsbGUgZHJpdmVyIHN1c3BlbmRlZCIpOworICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICBpZiAoYnJsLmlzU3VzcGVuZGVkKSB7CisgICAgICAgIGxvZ01lc3NhZ2UoTE9HX0RFQlVHLCAicmVzdW1pbmcgYnJhaWxsZSBkcml2ZXIiKTsKKyAgICAgICAgZm9yZ2V0RGV2aWNlcygpOworICAgICAgICBicmwuaXNTdXNwZW5kZWQgPSAhYXBpLnJlc3VtZURyaXZlcigpOworCisgICAgICAgIGlmIChicmwuaXNTdXNwZW5kZWQpIHsKKyAgICAgICAgICBsb2dNZXNzYWdlKExPR19ERUJVRywgImJyYWlsbGUgZHJpdmVyIG5vdCByZXN1bWVkIik7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgbG9nTWVzc2FnZShMT0dfREVCVUcsICJicmFpbGxlIGRyaXZlciByZXN1bWVkIik7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9CisgIH0KKworICBpbnQgc2NyZWVuUG9pbnRlckhhc01vdmVkID0gMDsKKyAgaW50IHRyYWNrU2NyZWVuU2Nyb2xsID0gMDsKKworICBpZiAoc2VzLT50cmFja1NjcmVlbkN1cnNvcikgeworI2lmZGVmIEVOQUJMRV9TUEVFQ0hfU1VQUE9SVAorICAgIGlmICghc3BrLnRyYWNrLmlzQWN0aXZlKQorI2VuZGlmIC8qIEVOQUJMRV9TUEVFQ0hfU1VQUE9SVCAqLworICAgIHsKKyAgICAgIC8qIElmIHNjcmVlbiBjdXJzb3IgbW92ZXMgd2hpbGUgYmxpbmtpbmcgaXMgb24gKi8KKyAgICAgIGlmIChwcmVmcy5ibGlua2luZ1NjcmVlbkN1cnNvcikgeworICAgICAgICBpZiAoc2NyLnBvc3kgIT0gc2VzLT50cmt5KSB7CisgICAgICAgICAgLyogdHVybiBvZmYgY3Vyc29yIHRvIHNlZSB3aGF0J3MgdW5kZXIgaXQgd2hpbGUgY2hhbmdpbmcgbGluZXMgKi8KKyAgICAgICAgICBzZXRCbGlua1N0YXRlKCZzY3JlZW5DdXJzb3JCbGlua0Rlc2NyaXB0b3IsIDApOworICAgICAgICB9IGVsc2UgaWYgKHNjci5wb3N4ICE9IHNlcy0+dHJreCkgeworICAgICAgICAgIC8qIHR1cm4gb24gY3Vyc29yIHRvIHNlZSBpdCBtb3Zpbmcgb24gdGhlIGxpbmUgKi8KKyAgICAgICAgICBzZXRCbGlua1N0YXRlKCZzY3JlZW5DdXJzb3JCbGlua0Rlc2NyaXB0b3IsIDEpOworICAgICAgICB9CisgICAgICB9CisKKyAgICAgIC8qIElmIHRoZSBjdXJzb3IgbW92ZXMgaW4gY3Vyc29yIHRyYWNraW5nIG1vZGU6ICovCisgICAgICBpZiAoIWlzUm91dGluZygpKSB7CisgICAgICAgIGlmICgoc2NyLnBvc3ggIT0gc2VzLT50cmt4KSB8fCAoc2NyLnBvc3kgIT0gc2VzLT50cmt5KSkgeworICAgICAgICAgIGludCBvbGR4ID0gc2VzLT53aW54OworICAgICAgICAgIGludCBvbGR5ID0gc2VzLT53aW55OworICAgICAgICAgIHRyYWNrU2NyZWVuQ3Vyc29yKDApOworCisgICAgICAgICAgbG9nTWVzc2FnZShMT0dfQ0FURUdPUlkoQ1VSU09SX1RSQUNLSU5HKSwKKyAgICAgICAgICAgICAgICAgICAgICJzY3I9JXUgY3NyPVsldSwldV0tPlsldSwldV0gd2luPVsldSwldV0tPlsldSwldV0iLAorICAgICAgICAgICAgICAgICAgICAgc2NyLm51bWJlciwKKyAgICAgICAgICAgICAgICAgICAgIHNlcy0+dHJreCwgc2VzLT50cmt5LCBzY3IucG9zeCwgc2NyLnBvc3ksCisgICAgICAgICAgICAgICAgICAgICBvbGR4LCBvbGR5LCBzZXMtPndpbngsIHNlcy0+d2lueSk7CisKKyAgICAgICAgICBzZXMtPnNwa3ggPSBzZXMtPnRya3ggPSBzY3IucG9zeDsKKyAgICAgICAgICBzZXMtPnNwa3kgPSBzZXMtPnRya3kgPSBzY3IucG9zeTsKKyAgICAgICAgfSBlbHNlIGlmIChjaGVja1NjcmVlblBvaW50ZXIoKSkgeworICAgICAgICAgIHNjcmVlblBvaW50ZXJIYXNNb3ZlZCA9IDE7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgdHJhY2tTY3JlZW5TY3JvbGwgPSAxOworICAgICAgICB9CisgICAgICB9CisgICAgfQorICB9IGVsc2UgeworICAgIHRyYWNrU2NyZWVuU2Nyb2xsID0gMTsKKyAgfQorCisgIGNoZWNrU2NyZWVuU2Nyb2xsKHRyYWNrU2NyZWVuU2Nyb2xsKTsKKworI2lmZGVmIEVOQUJMRV9TUEVFQ0hfU1VQUE9SVAorICBpZiAoc3BrLmNhbkF1dG9zcGVhaykgeworICAgIGludCBpc0F1dG9zcGVha2luZyA9IGlzQXV0b3NwZWFrQWN0aXZlKCk7CisKKyAgICBpZiAoaXNBdXRvc3BlYWtpbmcpIHsKKyAgICAgIGF1dG9zcGVhayh3YXNBdXRvc3BlYWtpbmc/IEFVVE9TUEVBS19DSEFOR0VTOiBBVVRPU1BFQUtfRk9SQ0UpOworICAgIH0gZWxzZSBpZiAod2FzQXV0b3NwZWFraW5nKSB7CisgICAgICBtdXRlU3BlZWNoKCZzcGssICJhdXRvc3BlYWsgZGlzYWJsZWQiKTsKKyAgICB9CisKKyAgICB3YXNBdXRvc3BlYWtpbmcgPSBpc0F1dG9zcGVha2luZzsKKyAgfQorI2VuZGlmIC8qIEVOQUJMRV9TUEVFQ0hfU1VQUE9SVCAqLworCisgIC8qIFRoZXJlIGFyZSBhIGZldyB0aGluZ3MgdG8gdGFrZSBjYXJlIG9mIGlmIHRoZSBkaXNwbGF5IGhhcyBtb3ZlZC4gKi8KKyAgaWYgKChzZXMtPndpbnggIT0gb2xkd2lueCkgfHwgKHNlcy0+d2lueSAhPSBvbGR3aW55KSkgeworICAgIGlmICghc2NyZWVuUG9pbnRlckhhc01vdmVkKSBoaWdobGlnaHRCcmFpbGxlV2luZG93TG9jYXRpb24oKTsKKworICAgIC8qIEF0dHJpYnV0ZXMgYXJlIGJsaW5raW5nLgorICAgICAqIFdlIGNvdWxkIGNoZWNrIHRvIHNlZSBpZiB3ZSBjaGFuZ2VkIHNjcmVlbiwgYnV0IHRoYXQgZG9lc24ndAorICAgICAqIHJlYWxseSBtYXR0ZXIuLi4gdGhpcyBpcyBtYWlubHkgZm9yIHdoZW4geW91IGFyZSBodW50aW5nIHVwL2Rvd24KKyAgICAgKiBmb3IgdGhlIGxpbmUgd2l0aCBhdHRyaWJ1dGVzLgorICAgICAqLworICAgIHNldEJsaW5rU3RhdGUoJmF0dHJpYnV0ZXNVbmRlcmxpbmVCbGlua0Rlc2NyaXB0b3IsIDEpOworICAgIC8qIHByb2JsZW06IHRoaXMgc3RpbGwgZG9lc24ndCBoZWxwIHdoZW4gdGhlIGJyYWlsbGUgd2luZG93IGlzCisgICAgICogc3RhdGlvbm5hcnkgYW5kIHRoZSBhdHRyaWJ1dGVzIHRoZW1zZWx2ZXMgYXJlIG1vdmluZworICAgICAqIChleGFtcGxlOiB0aW4pLgorICAgICAqLworCisgICAgaWYgKChzZXMtPnNwa3kgPCBzZXMtPndpbnkpIHx8IChzZXMtPnNwa3kgPj0gKHNlcy0+d2lueSArIGJybC50ZXh0Um93cykpKSBzZXMtPnNwa3kgPSBzZXMtPndpbnk7CisgICAgaWYgKChzZXMtPnNwa3ggPCBzZXMtPndpbngpIHx8IChzZXMtPnNwa3ggPj0gKHNlcy0+d2lueCArIHRleHRDb3VudCkpKSBzZXMtPnNwa3ggPSBzZXMtPndpbng7CisKKyAgICBvbGR3aW54ID0gc2VzLT53aW54OworICAgIG9sZHdpbnkgPSBzZXMtPndpbnk7CisgIH0KKworICBpZiAoIWJybC5pc09mZmxpbmUgJiYgY2FuQnJhaWxsZSgpKSB7CisgICAgYXBpLmNsYWltRHJpdmVyKCk7CisKKyAgICBpZiAoaW5mb01vZGUpIHsKKyAgICAgIGlmICghcmVuZGVySW5mb0xpbmUoKSkgYnJsLmhhc0ZhaWxlZCA9IDE7CisgICAgfSBlbHNlIHsKKyAgICAgIGNvbnN0IHVuc2lnbmVkIGludCB3aW5kb3dMZW5ndGggPSBicmwudGV4dENvbHVtbnMgKiBicmwudGV4dFJvd3M7CisgICAgICBtZW1zZXQoYnJsLmJ1ZmZlciwgMCwgd2luZG93TGVuZ3RoKTsKKworICAgICAgd2NoYXJfdCB0ZXh0QnVmZmVyW3dpbmRvd0xlbmd0aF07CisgICAgICB3bWVtc2V0KHRleHRCdWZmZXIsIFdDX0MoJyAnKSwgd2luZG93TGVuZ3RoKTsKKworICAgICAgdW5zaWduZWQgaW50IHRleHRMZW5ndGggPSB0ZXh0Q291bnQgKiBicmwudGV4dFJvd3M7CisgICAgICBpc0NvbnRyYWN0ZWQgPSBpc0NvbnRyYWN0aW5nKCk7CisKKyAgICAgIGlmIChpc0NvbnRyYWN0ZWQpIHsKKyAgICAgICAgd2hpbGUgKDEpIHsKKyAgICAgICAgICBpbnQgZ2VuZXJhdGVkID0gZ2VuZXJhdGVDb250cmFjdGVkQnJhaWxsZSh0ZXh0QnVmZmVyKTsKKyAgICAgICAgICBjb250cmFjdGVkVHJhY2sgPSAwOworICAgICAgICAgIGlmIChnZW5lcmF0ZWQpIGJyZWFrOworICAgICAgICB9CisgICAgICB9IGVsc2UgeworICAgICAgICBTY3JlZW5DaGFyYWN0ZXIgY2hhcmFjdGVyc1t0ZXh0TGVuZ3RoXTsKKyAgICAgICAgcmVhZEJyYWlsbGVXaW5kb3coY2hhcmFjdGVycywgQVJSQVlfQ09VTlQoY2hhcmFjdGVycykpOworICAgICAgICB0cmFuc2xhdGVCcmFpbGxlV2luZG93KGNoYXJhY3RlcnMsIHRleHRCdWZmZXIpOworICAgICAgfQorCisgICAgICBpZiAoKGJybC5jdXJzb3IgPSBnZXRTY3JlZW5DdXJzb3JQb3NpdGlvbihzY3IucG9zeCwgc2NyLnBvc3kpKSAhPSBCUkxfTk9fQ1VSU09SKSB7CisgICAgICAgIGlmIChzaG93U2NyZWVuQ3Vyc29yKCkpIHsKKyAgICAgICAgICBCbGlua0Rlc2NyaXB0b3IgKmJsaW5rID0gJnNjcmVlbkN1cnNvckJsaW5rRGVzY3JpcHRvcjsKKyAgICAgICAgICByZXF1aXJlQmxpbmtEZXNjcmlwdG9yKGJsaW5rKTsKKworICAgICAgICAgIGlmIChpc0JsaW5rVmlzaWJsZShibGluaykpIHsKKyAgICAgICAgICAgIGJybC5idWZmZXJbYnJsLmN1cnNvcl0gfD0gbWFwQ3Vyc29yRG90cyhnZXRTY3JlZW5DdXJzb3JEb3RzKCkpOworICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgfQorCisgICAgICBpZiAocHJlZnMuc2hvd1NwZWVjaEN1cnNvcikgeworICAgICAgICBpbnQgcG9zaXRpb24gPSBnZXRTY3JlZW5DdXJzb3JQb3NpdGlvbihzZXMtPnNwa3gsIHNlcy0+c3BreSk7CisKKyAgICAgICAgaWYgKHBvc2l0aW9uICE9IEJSTF9OT19DVVJTT1IpIHsKKyAgICAgICAgICBpZiAocG9zaXRpb24gIT0gYnJsLmN1cnNvcikgeworICAgICAgICAgICAgQmxpbmtEZXNjcmlwdG9yICpibGluayA9ICZzcGVlY2hDdXJzb3JCbGlua0Rlc2NyaXB0b3I7CisgICAgICAgICAgICByZXF1aXJlQmxpbmtEZXNjcmlwdG9yKGJsaW5rKTsKKworICAgICAgICAgICAgaWYgKGlzQmxpbmtWaXNpYmxlKGJsaW5rKSkgeworICAgICAgICAgICAgICBicmwuYnVmZmVyW3Bvc2l0aW9uXSB8PSBtYXBDdXJzb3JEb3RzKGdldFNwZWVjaEN1cnNvckRvdHMoKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICB9CisKKyAgICAgIGlmIChzdGF0dXNDb3VudCA+IDApIHsKKyAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqZmllbGRzID0gcHJlZnMuc3RhdHVzRmllbGRzOworICAgICAgICB1bnNpZ25lZCBpbnQgbGVuZ3RoID0gZ2V0U3RhdHVzRmllbGRzTGVuZ3RoKGZpZWxkcyk7CisKKyAgICAgICAgaWYgKGxlbmd0aCA+IDApIHsKKyAgICAgICAgICB1bnNpZ25lZCBjaGFyIGNlbGxzW2xlbmd0aF07CisgICAgICAgICAgbWVtc2V0KGNlbGxzLCAwLCBsZW5ndGgpOworICAgICAgICAgIHJlbmRlclN0YXR1c0ZpZWxkcyhmaWVsZHMsIGNlbGxzKTsKKyAgICAgICAgICBmaWxsRG90c1JlZ2lvbih0ZXh0QnVmZmVyLCBicmwuYnVmZmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1c1N0YXJ0LCBzdGF0dXNDb3VudCwgYnJsLnRleHRDb2x1bW5zLCBicmwudGV4dFJvd3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgY2VsbHMsIGxlbmd0aCk7CisgICAgICAgIH0KKworICAgICAgICBmaWxsU3RhdHVzU2VwYXJhdG9yKHRleHRCdWZmZXIsIGJybC5idWZmZXIpOworICAgICAgfQorCisgICAgICBpZiAoISh3cml0ZVN0YXR1c0NlbGxzKCkgJiYgd3JpdGVCcmFpbGxlV2luZG93KCZicmwsIHRleHRCdWZmZXIsIHNjci5xdWFsaXR5KSkpIGJybC5oYXNGYWlsZWQgPSAxOworICAgIH0KKworICAgIGFwaS5yZWxlYXNlRHJpdmVyKCk7CisgIH0KKworICByZXNldEFsbEJsaW5rRGVzY3JpcHRvcnMoKTsKKyAgbG9nTWVzc2FnZShMT0dfQ0FURUdPUlkoVVBEQVRFX0VWRU5UUyksICJmaW5pc2hlZCIpOworfQorCitzdGF0aWMgdm9pZCBzZXRVcGRhdGVBbGFybSAodm9pZCk7CitzdGF0aWMgQXN5bmNIYW5kbGUgdXBkYXRlQWxhcm07CitzdGF0aWMgaW50IHVwZGF0ZVN1c3BlbmRDb3VudDsKKworc3RhdGljIFRpbWVWYWx1ZSB1cGRhdGVUaW1lOworc3RhdGljIFRpbWVWYWx1ZSBlYXJsaWVzdFRpbWU7CisKK3N0YXRpYyB2b2lkCitlbmZvcmNlRWFybGllc3RUaW1lICh2b2lkKSB7CisgIGlmIChjb21wYXJlVGltZVZhbHVlcygmdXBkYXRlVGltZSwgJmVhcmxpZXN0VGltZSkgPCAwKSB7CisgICAgdXBkYXRlVGltZSA9IGVhcmxpZXN0VGltZTsKKyAgfQorfQorCitzdGF0aWMgdm9pZAorc2V0VXBkYXRlRGVsYXkgKGludCBkZWxheSkgeworICBnZXRNb25vdG9uaWNUaW1lKCZlYXJsaWVzdFRpbWUpOworICBhZGp1c3RUaW1lVmFsdWUoJmVhcmxpZXN0VGltZSwgZGVsYXkpOworICBlbmZvcmNlRWFybGllc3RUaW1lKCk7Cit9CisKK3N0YXRpYyB2b2lkCitzZXRVcGRhdGVUaW1lIChpbnQgZGVsYXksIGNvbnN0IFRpbWVWYWx1ZSAqZnJvbSwgaW50IGlmRWFybGllcikgeworICBUaW1lVmFsdWUgdGltZTsKKworICBpZiAoZnJvbSkgeworICAgIHRpbWUgPSAqZnJvbTsKKyAgfSBlbHNlIHsKKyAgICBnZXRNb25vdG9uaWNUaW1lKCZ0aW1lKTsKKyAgfQorCisgIGFkanVzdFRpbWVWYWx1ZSgmdGltZSwgZGVsYXkpOworCisgIGlmICghaWZFYXJsaWVyIHx8IChtaWxsaXNlY29uZHNCZXR3ZWVuKCZ1cGRhdGVUaW1lLCAmdGltZSkgPCAwKSkgeworICAgIHVwZGF0ZVRpbWUgPSB0aW1lOworICAgIGVuZm9yY2VFYXJsaWVzdFRpbWUoKTsKKyAgfQorfQorCit2b2lkCitzY2hlZHVsZVVwZGF0ZUluIChjb25zdCBjaGFyICpyZWFzb24sIGludCBkZWxheSkgeworICBzZXRVcGRhdGVUaW1lKGRlbGF5LCBOVUxMLCAxKTsKKyAgaWYgKHVwZGF0ZUFsYXJtKSBhc3luY1Jlc2V0QWxhcm1Ubyh1cGRhdGVBbGFybSwgJnVwZGF0ZVRpbWUpOworICBsb2dNZXNzYWdlKExPR19DQVRFR09SWShVUERBVEVfRVZFTlRTKSwgInNjaGVkdWxlZDogJXMiLCByZWFzb24pOworfQorCit2b2lkCitzY2hlZHVsZVVwZGF0ZSAoY29uc3QgY2hhciAqcmVhc29uKSB7CisgIHNjaGVkdWxlVXBkYXRlSW4ocmVhc29uLCAwKTsKK30KKworQVNZTkNfQUxBUk1fQ0FMTEJBQ0soaGFuZGxlVXBkYXRlQWxhcm0pIHsKKyAgYXN5bmNEaXNjYXJkSGFuZGxlKHVwZGF0ZUFsYXJtKTsKKyAgdXBkYXRlQWxhcm0gPSBOVUxMOworCisgIHN1c3BlbmRVcGRhdGVzKCk7CisgIHNldFVwZGF0ZVRpbWUoKHBvbGxTY3JlZW4oKT8gU0NSRUVOX1VQREFURV9QT0xMX0lOVEVSVkFMOiAoU0VDU19QRVJfREFZICogTVNFQ1NfUEVSX1NFQykpLAorICAgICAgICAgICAgICAgIHBhcmFtZXRlcnMtPm5vdywgMCk7CisKKyAgeworICAgIGludCBvbGRDb2x1bW4gPSBzZXMtPndpbng7CisgICAgaW50IG9sZFJvdyA9IHNlcy0+d2lueTsKKworICAgIGRvVXBkYXRlKCk7CisKKyAgICBpZiAoKHNlcy0+d2lueCAhPSBvbGRDb2x1bW4pIHx8IChzZXMtPndpbnkgIT0gb2xkUm93KSkgeworICAgICAgcmVwb3J0QnJhaWxsZVdpbmRvd01vdmVkKCk7CisgICAgfQorICB9CisKKyAgc2V0VXBkYXRlRGVsYXkoTUFYKChicmwud3JpdGVEZWxheSArIDEpLCBVUERBVEVfU0NIRURVTEVfREVMQVkpKTsKKyAgYnJsLndyaXRlRGVsYXkgPSAwOworCisgIHJlc3VtZVVwZGF0ZXMoMCk7Cit9CisKK3N0YXRpYyB2b2lkCitzZXRVcGRhdGVBbGFybSAodm9pZCkgeworICBpZiAoIXVwZGF0ZVN1c3BlbmRDb3VudCAmJiAhdXBkYXRlQWxhcm0pIHsKKyAgICBhc3luY05ld0Fic29sdXRlQWxhcm0oJnVwZGF0ZUFsYXJtLCAmdXBkYXRlVGltZSwgaGFuZGxlVXBkYXRlQWxhcm0sIE5VTEwpOworICB9Cit9CisKK3N0YXRpYyBSZXBvcnRMaXN0ZW5lckluc3RhbmNlICp1cGRhdGVCcmFpbGxlRGV2aWNlT25saW5lTGlzdGVuZXIgPSBOVUxMOworCitSRVBPUlRfTElTVEVORVIoaGFuZGxlVXBkYXRlQnJhaWxsZURldmljZU9ubGluZSkgeworICBzY2hlZHVsZVVwZGF0ZSgiYnJhaWxsZSBvbmxpbmUiKTsKK30KKwordm9pZAorYmVnaW5VcGRhdGVzICh2b2lkKSB7CisgIGxvZ01lc3NhZ2UoTE9HX0NBVEVHT1JZKFVQREFURV9FVkVOVFMpLCAiYmVnaW4iKTsKKworICBzZXRVcGRhdGVEZWxheSgwKTsKKyAgc2V0VXBkYXRlVGltZSgwLCBOVUxMLCAwKTsKKworICB1cGRhdGVBbGFybSA9IE5VTEw7CisgIHVwZGF0ZVN1c3BlbmRDb3VudCA9IDA7CisKKyAgb2xkd2lueCA9IC0xOworICBvbGR3aW55ID0gLTE7CisKKyNpZmRlZiBFTkFCTEVfU1BFRUNIX1NVUFBPUlQKKyAgd2FzQXV0b3NwZWFraW5nID0gMDsKKyNlbmRpZiAvKiBFTkFCTEVfU1BFRUNIX1NVUFBPUlQgKi8KKworICB1cGRhdGVCcmFpbGxlRGV2aWNlT25saW5lTGlzdGVuZXIgPSByZWdpc3RlclJlcG9ydExpc3RlbmVyKFJFUE9SVF9CUkFJTExFX0RFVklDRV9PTkxJTkUsIGhhbmRsZVVwZGF0ZUJyYWlsbGVEZXZpY2VPbmxpbmUsIE5VTEwpOworfQorCit2b2lkCitzdXNwZW5kVXBkYXRlcyAodm9pZCkgeworICBpZiAodXBkYXRlQWxhcm0pIHsKKyAgICBhc3luY0NhbmNlbFJlcXVlc3QodXBkYXRlQWxhcm0pOworICAgIHVwZGF0ZUFsYXJtID0gTlVMTDsKKyAgfQorCisgIHVwZGF0ZVN1c3BlbmRDb3VudCArPSAxOworICBsb2dNZXNzYWdlKExPR19DQVRFR09SWShVUERBVEVfRVZFTlRTKSwgInN1c3BlbmQ6ICV1IiwgdXBkYXRlU3VzcGVuZENvdW50KTsKK30KKwordm9pZAorcmVzdW1lVXBkYXRlcyAoaW50IHJlZnJlc2gpIHsKKyAgaWYgKCEtLXVwZGF0ZVN1c3BlbmRDb3VudCkgeworICAgIHNldFVwZGF0ZUFsYXJtKCk7CisgICAgaWYgKHJlZnJlc2gpIHNjaGVkdWxlVXBkYXRlKCJ1cGRhdGVzIHJlc3VtZWQiKTsKKyAgfQorCisgIGxvZ01lc3NhZ2UoTE9HX0NBVEVHT1JZKFVQREFURV9FVkVOVFMpLCAicmVzdW1lOiAldSIsIHVwZGF0ZVN1c3BlbmRDb3VudCk7Cit9CmRpZmYgLS1naXQgYS9Qcm9ncmFtcy91cGRhdGUuaCBiL1Byb2dyYW1zL3VwZGF0ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ5MDdjZGQKLS0tIC9kZXYvbnVsbAorKysgYi9Qcm9ncmFtcy91cGRhdGUuaApAQCAtMCwwICsxLDUzIEBACisvKgorICogQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyAqICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyAqCisgKiBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorICoKKyAqIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyAqCisgKiBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisgKi8KKworI2lmbmRlZiBCUkxUVFlfSU5DTFVERURfVVBEQVRFCisjZGVmaW5lIEJSTFRUWV9JTkNMVURFRF9VUERBVEUKKworI2luY2x1ZGUgImJybF90eXBlcy5oIgorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmIC8qIF9fY3BsdXNwbHVzICovCisKK2V4dGVybiBpbnQgd3JpdGVCcmFpbGxlV2luZG93IChCcmFpbGxlRGlzcGxheSAqYnJsLCBjb25zdCB3Y2hhcl90ICp0ZXh0LCB1bnNpZ25lZCBjaGFyIHF1YWxpdHkpOworZXh0ZXJuIHZvaWQgcmVwb3J0QnJhaWxsZVdpbmRvd01vdmVkICh2b2lkKTsKKworZXh0ZXJuIHZvaWQgc2NoZWR1bGVVcGRhdGUgKGNvbnN0IGNoYXIgKnJlYXNvbik7CitleHRlcm4gdm9pZCBzY2hlZHVsZVVwZGF0ZUluIChjb25zdCBjaGFyICpyZWFzb24sIGludCBkZWxheSk7CisKK2V4dGVybiB2b2lkIGJlZ2luVXBkYXRlcyAodm9pZCk7CitleHRlcm4gdm9pZCBzdXNwZW5kVXBkYXRlcyAodm9pZCk7CitleHRlcm4gdm9pZCByZXN1bWVVcGRhdGVzIChpbnQgcmVmcmVzaCk7CisKKyNpZmRlZiBFTkFCTEVfU1BFRUNIX1NVUFBPUlQKK3R5cGVkZWYgZW51bSB7CisgIEFVVE9TUEVBS19TSUxFTlQsCisgIEFVVE9TUEVBS19DSEFOR0VTLAorICBBVVRPU1BFQUtfRk9SQ0UKK30gQXV0b3NwZWFrTW9kZTsKKworZXh0ZXJuIHZvaWQgYXV0b3NwZWFrIChBdXRvc3BlYWtNb2RlIG1vZGUpOworZXh0ZXJuIHZvaWQgc3VwcHJlc3NBdXRvc3BlYWsgKHZvaWQpOworI2VuZGlmIC8qIEVOQUJMRV9TUEVFQ0hfU1VQUE9SVCAqLworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZiAvKiBfX2NwbHVzcGx1cyAqLworCisjZW5kaWYgLyogQlJMVFRZX0lOQ0xVREVEX1VQREFURSAqLwpkaWZmIC0tZ2l0IGEvUHJvZ3JhbXMvdXNiLmMgYi9Qcm9ncmFtcy91c2IuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMmI4OWFhCi0tLSAvZGV2L251bGwKKysrIGIvUHJvZ3JhbXMvdXNiLmMKQEAgLTAsMCArMSwxNzg4IEBACisvKgorICogQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyAqICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyAqCisgKiBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorICoKKyAqIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyAqCisgKiBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisgKi8KKworI2luY2x1ZGUgInByb2xvZ3VlLmgiCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8ZmNudGwuaD4KKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorCisjaWZkZWYgSEFWRV9SRUdFWF9ICisjaW5jbHVkZSA8cmVnZXguaD4KKyNlbmRpZiAvKiBIQVZFX1JFR0VYX0ggKi8KKworI2luY2x1ZGUgImxvZy5oIgorI2luY2x1ZGUgInN0cmZtdC5oIgorI2luY2x1ZGUgInBhcmFtZXRlcnMuaCIKKyNpbmNsdWRlICJiaXRmaWVsZC5oIgorI2luY2x1ZGUgImJpdG1hc2suaCIKKyNpbmNsdWRlICJwYXJzZS5oIgorI2luY2x1ZGUgImZpbGUuaCIKKyNpbmNsdWRlICJ1dGY4LmgiCisjaW5jbHVkZSAiZGV2aWNlLmgiCisjaW5jbHVkZSAidGltaW5nLmgiCisjaW5jbHVkZSAiYXN5bmNfaGFuZGxlLmgiCisjaW5jbHVkZSAiYXN5bmNfd2FpdC5oIgorI2luY2x1ZGUgImFzeW5jX2FsYXJtLmgiCisjaW5jbHVkZSAiaW9fbWlzYy5oIgorI2luY2x1ZGUgImlvX3VzYi5oIgorI2luY2x1ZGUgInVzYl9pbnRlcm5hbC5oIgorI2luY2x1ZGUgInVzYl9kZXZpY2VzLmgiCisjaW5jbHVkZSAidXNiX3NlcmlhbC5oIgorCitzc2l6ZV90Cit1c2JDb250cm9sUmVhZCAoCisgIFVzYkRldmljZSAqZGV2aWNlLAorICB1aW50OF90IHJlY2lwaWVudCwKKyAgdWludDhfdCB0eXBlLAorICB1aW50OF90IHJlcXVlc3QsCisgIHVpbnQxNl90IHZhbHVlLAorICB1aW50MTZfdCBpbmRleCwKKyAgdm9pZCAqYnVmZmVyLAorICB1aW50MTZfdCBsZW5ndGgsCisgIGludCB0aW1lb3V0CispIHsKKyAgcmV0dXJuIHVzYkNvbnRyb2xUcmFuc2ZlcihkZXZpY2UsIFVzYkNvbnRyb2xEaXJlY3Rpb25fSW5wdXQsIHJlY2lwaWVudCwgdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0LCB2YWx1ZSwgaW5kZXgsIGJ1ZmZlciwgbGVuZ3RoLCB0aW1lb3V0KTsKK30KKworc3NpemVfdAordXNiQ29udHJvbFdyaXRlICgKKyAgVXNiRGV2aWNlICpkZXZpY2UsCisgIHVpbnQ4X3QgcmVjaXBpZW50LAorICB1aW50OF90IHR5cGUsCisgIHVpbnQ4X3QgcmVxdWVzdCwKKyAgdWludDE2X3QgdmFsdWUsCisgIHVpbnQxNl90IGluZGV4LAorICBjb25zdCB2b2lkICpidWZmZXIsCisgIHVpbnQxNl90IGxlbmd0aCwKKyAgaW50IHRpbWVvdXQKKykgeworICByZXR1cm4gdXNiQ29udHJvbFRyYW5zZmVyKGRldmljZSwgVXNiQ29udHJvbERpcmVjdGlvbl9PdXRwdXQsIHJlY2lwaWVudCwgdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0LCB2YWx1ZSwgaW5kZXgsICh2b2lkICopYnVmZmVyLCBsZW5ndGgsIHRpbWVvdXQpOworfQorCitzc2l6ZV90Cit1c2JHZXREZXNjcmlwdG9yICgKKyAgVXNiRGV2aWNlICpkZXZpY2UsCisgIHVuc2lnbmVkIGNoYXIgdHlwZSwKKyAgdW5zaWduZWQgY2hhciBudW1iZXIsCisgIHVuc2lnbmVkIGludCBpbmRleCwKKyAgVXNiRGVzY3JpcHRvciAqZGVzY3JpcHRvciwKKyAgaW50IHRpbWVvdXQKKykgeworICByZXR1cm4gdXNiQ29udHJvbFJlYWQoZGV2aWNlLCBVc2JDb250cm9sUmVjaXBpZW50X0RldmljZSwgVXNiQ29udHJvbFR5cGVfU3RhbmRhcmQsCisgICAgICAgICAgICAgICAgICAgICAgICBVc2JTdGFuZGFyZFJlcXVlc3RfR2V0RGVzY3JpcHRvciwgKHR5cGUgPDwgOCkgfCBudW1iZXIsIGluZGV4LAorICAgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRvci0+Ynl0ZXMsIHNpemVvZihkZXNjcmlwdG9yLT5ieXRlcyksIHRpbWVvdXQpOworfQorCitpbnQKK3VzYkdldERldmljZURlc2NyaXB0b3IgKAorICBVc2JEZXZpY2UgKmRldmljZSwKKyAgVXNiRGV2aWNlRGVzY3JpcHRvciAqZGVzY3JpcHRvcgorKSB7CisgIFVzYkRlc2NyaXB0b3IgZGVzYzsKKyAgaW50IHNpemUgPSB1c2JHZXREZXNjcmlwdG9yKGRldmljZSwgVXNiRGVzY3JpcHRvclR5cGVfRGV2aWNlLCAwLCAwLCAmZGVzYywgMTAwMCk7CisKKyAgaWYgKHNpemUgIT0gLTEpIHsKKyAgICAqZGVzY3JpcHRvciA9IGRlc2MuZGV2aWNlOworICB9CisKKyAgcmV0dXJuIHNpemU7Cit9CisKK2ludAordXNiR2V0TGFuZ3VhZ2UgKAorICBVc2JEZXZpY2UgKmRldmljZSwKKyAgdWludDE2X3QgKmxhbmd1YWdlLAorICBpbnQgdGltZW91dAorKSB7CisgIFVzYkRlc2NyaXB0b3IgZGVzY3JpcHRvcjsKKyAgc3NpemVfdCBzaXplID0gdXNiR2V0RGVzY3JpcHRvcihkZXZpY2UsIFVzYkRlc2NyaXB0b3JUeXBlX1N0cmluZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIDAsICZkZXNjcmlwdG9yLCB0aW1lb3V0KTsKKworICBpZiAoc2l6ZSAhPSAtMSkgeworICAgIGlmIChzaXplID49IDQpIHsKKyAgICAgICpsYW5ndWFnZSA9IGdldExpdHRsZUVuZGlhbjE2KGRlc2NyaXB0b3Iuc3RyaW5nLndEYXRhWzBdKTsKKyAgICAgIGxvZ01lc3NhZ2UoTE9HX0NBVEVHT1JZKFVTQl9JTyksICJVU0IgbGFuZ3VhZ2U6ICUwMlgiLCAqbGFuZ3VhZ2UpOworICAgICAgcmV0dXJuIDE7CisgICAgfSBlbHNlIHsKKyAgICAgIGxvZ01lc3NhZ2UoTE9HX0VSUiwgIlVTQiBsYW5ndWFnZSBjb2RlIHN0cmluZyB0b28gc2hvcnQ6ICUiUFJJc3NpemUsIHNpemUpOworICAgICAgZXJybm8gPSBFSU87CisgICAgfQorICB9IGVsc2UgeworICAgIGxvZ01lc3NhZ2UoTE9HX0VSUiwgIlVTQiBsYW5ndWFnZSBjb2RlIHN0cmluZyByZWFkIGVycm9yIik7CisgIH0KKworICByZXR1cm4gMDsKK30KKworY2hhciAqCit1c2JEZWNvZGVTdHJpbmcgKGNvbnN0IFVzYlN0cmluZ0Rlc2NyaXB0b3IgKmRlc2NyaXB0b3IpIHsKKyAgc2l6ZV90IGNvdW50ID0gKGRlc2NyaXB0b3ItPmJMZW5ndGggLSAyKSAvIHNpemVvZihkZXNjcmlwdG9yLT53RGF0YVswXSk7CisgIGNoYXIgYnVmZmVyWyhjb3VudCAqIFVURjhfTEVOX01BWCkgKyAxXTsKKworICBjb25zdCB1aW50MTZfdCAqc291cmNlID0gZGVzY3JpcHRvci0+d0RhdGE7CisgIGNvbnN0IHVpbnQxNl90ICplbmQgPSBzb3VyY2UgKyBjb3VudDsKKyAgY2hhciAqdGFyZ2V0ID0gYnVmZmVyOworCisgIHdoaWxlIChzb3VyY2UgPCBlbmQpIHsKKyAgICBzaXplX3QgbGVuZ3RoID0gY29udmVydFdjaGFyVG9VdGY4KGdldExpdHRsZUVuZGlhbjE2KCpzb3VyY2UrKyksIHRhcmdldCk7CisKKyAgICB0YXJnZXQgKz0gbGVuZ3RoOworICB9CisgICp0YXJnZXQgPSAwOworCisgIHsKKyAgICBjaGFyICpzdHJpbmcgPSBzdHJkdXAoYnVmZmVyKTsKKworICAgIGlmICghc3RyaW5nKSBsb2dNYWxsb2NFcnJvcigpOworICAgIHJldHVybiBzdHJpbmc7CisgIH0KK30KKworY2hhciAqCit1c2JHZXRTdHJpbmcgKAorICBVc2JEZXZpY2UgKmRldmljZSwKKyAgdW5zaWduZWQgY2hhciBudW1iZXIsCisgIGludCB0aW1lb3V0CispIHsKKyAgVXNiRGVzY3JpcHRvciBkZXNjcmlwdG9yOworCisgIGlmICghZGV2aWNlLT5sYW5ndWFnZSkgeworICAgIGlmICghdXNiR2V0TGFuZ3VhZ2UoZGV2aWNlLCAmZGV2aWNlLT5sYW5ndWFnZSwgdGltZW91dCkpIHsKKyAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgfQorCisgIGlmICh1c2JHZXREZXNjcmlwdG9yKGRldmljZSwgVXNiRGVzY3JpcHRvclR5cGVfU3RyaW5nLAorICAgICAgICAgICAgICAgICAgICAgICBudW1iZXIsIGRldmljZS0+bGFuZ3VhZ2UsCisgICAgICAgICAgICAgICAgICAgICAgICZkZXNjcmlwdG9yLCB0aW1lb3V0KSA9PSAtMSkgeworICAgIGxvZ01lc3NhZ2UoTE9HX0VSUiwgIlVTQiBzdHJpbmcgcmVhZCBlcnJvcjogJXUiLCBudW1iZXIpOworICAgIHJldHVybiBOVUxMOworICB9CisKKyAgcmV0dXJuIHVzYkRlY29kZVN0cmluZygmZGVzY3JpcHRvci5zdHJpbmcpOworfQorCitjaGFyICoKK3VzYkdldE1hbnVmYWN0dXJlciAoVXNiRGV2aWNlICpkZXZpY2UsIGludCB0aW1lb3V0KSB7CisgIHJldHVybiB1c2JHZXRTdHJpbmcoZGV2aWNlLCBkZXZpY2UtPmRlc2NyaXB0b3IuaU1hbnVmYWN0dXJlciwgdGltZW91dCk7Cit9CisKK2NoYXIgKgordXNiR2V0UHJvZHVjdCAoVXNiRGV2aWNlICpkZXZpY2UsIGludCB0aW1lb3V0KSB7CisgIHJldHVybiB1c2JHZXRTdHJpbmcoZGV2aWNlLCBkZXZpY2UtPmRlc2NyaXB0b3IuaVByb2R1Y3QsIHRpbWVvdXQpOworfQorCitjaGFyICoKK3VzYkdldFNlcmlhbE51bWJlciAoVXNiRGV2aWNlICpkZXZpY2UsIGludCB0aW1lb3V0KSB7CisgIHJldHVybiB1c2JHZXRTdHJpbmcoZGV2aWNlLCBkZXZpY2UtPmRlc2NyaXB0b3IuaVNlcmlhbE51bWJlciwgdGltZW91dCk7Cit9CisKK3N0YXRpYyBzaXplX3QKK3VzYkZvcm1hdExvZ1NldHVwUGFja2V0IChjaGFyICpidWZmZXIsIHNpemVfdCBzaXplLCBjb25zdCB2b2lkICpkYXRhKSB7CisgIGNvbnN0IFVzYlNldHVwUGFja2V0ICpzZXR1cCA9IGRhdGE7CisgIHNpemVfdCBsZW5ndGg7CisgIFNUUl9CRUdJTihidWZmZXIsIHNpemUpOworCisgIFNUUl9QUklOVEYoInNldHVwIHBhY2tldDogVHlwOiUwMlggUmVxOiUwMlggVmFsOiUwNFggSWR4OiUwNFggTGVuOiUwNFgiLAorICAgICAgICAgICAgIHNldHVwLT5iUmVxdWVzdFR5cGUsIHNldHVwLT5iUmVxdWVzdCwKKyAgICAgICAgICAgICBnZXRMaXR0bGVFbmRpYW4xNihzZXR1cC0+d1ZhbHVlKSwKKyAgICAgICAgICAgICBnZXRMaXR0bGVFbmRpYW4xNihzZXR1cC0+d0luZGV4KSwKKyAgICAgICAgICAgICBnZXRMaXR0bGVFbmRpYW4xNihzZXR1cC0+d0xlbmd0aCkpOworCisgIGxlbmd0aCA9IFNUUl9MRU5HVEg7CisgIFNUUl9FTkQ7CisgIHJldHVybiBsZW5ndGg7Cit9CisKK3ZvaWQKK3VzYkxvZ1NldHVwUGFja2V0IChjb25zdCBVc2JTZXR1cFBhY2tldCAqc2V0dXApIHsKKyAgbG9nRGF0YShMT0dfQ0FURUdPUlkoVVNCX0lPKSwgdXNiRm9ybWF0TG9nU2V0dXBQYWNrZXQsIHNldHVwKTsKK30KKwordm9pZAordXNiTWFrZVNldHVwUGFja2V0ICgKKyAgVXNiU2V0dXBQYWNrZXQgKnNldHVwLAorICB1aW50OF90IGRpcmVjdGlvbiwKKyAgdWludDhfdCByZWNpcGllbnQsCisgIHVpbnQ4X3QgdHlwZSwKKyAgdWludDhfdCByZXF1ZXN0LAorICB1aW50MTZfdCB2YWx1ZSwKKyAgdWludDE2X3QgaW5kZXgsCisgIHVpbnQxNl90IGxlbmd0aAorKSB7CisgIHNldHVwLT5iUmVxdWVzdFR5cGUgPSBkaXJlY3Rpb24gfCByZWNpcGllbnQgfCB0eXBlOworICBzZXR1cC0+YlJlcXVlc3QgPSByZXF1ZXN0OworICBwdXRMaXR0bGVFbmRpYW4xNigmc2V0dXAtPndWYWx1ZSwgdmFsdWUpOworICBwdXRMaXR0bGVFbmRpYW4xNigmc2V0dXAtPndJbmRleCwgaW5kZXgpOworICBwdXRMaXR0bGVFbmRpYW4xNigmc2V0dXAtPndMZW5ndGgsIGxlbmd0aCk7CisgIHVzYkxvZ1NldHVwUGFja2V0KHNldHVwKTsKK30KKwordm9pZAordXNiTG9nRW5kcG9pbnREYXRhICgKKyAgVXNiRW5kcG9pbnQgKmVuZHBvaW50LCBjb25zdCBjaGFyICpsYWJlbCwKKyAgY29uc3Qgdm9pZCAqZGF0YSwgc2l6ZV90IHNpemUKKykgeworICBsb2dCeXRlcyhMT0dfQ0FURUdPUlkoVVNCX0lPKSwgImVuZHBvaW50ICUwMlggJXMiLCBkYXRhLCBzaXplLAorICAgICAgICAgICBlbmRwb2ludC0+ZGVzY3JpcHRvci0+YkVuZHBvaW50QWRkcmVzcywgbGFiZWwpOworfQorCit2b2lkCit1c2JMb2dTdHJpbmcgKAorICBVc2JEZXZpY2UgKmRldmljZSwKKyAgdW5zaWduZWQgY2hhciBudW1iZXIsCisgIGNvbnN0IGNoYXIgKmxhYmVsCispIHsKKyAgaWYgKG51bWJlcikgeworICAgIGNoYXIgKnN0cmluZyA9IHVzYkdldFN0cmluZyhkZXZpY2UsIG51bWJlciwgMTAwMCk7CisgICAgaWYgKHN0cmluZykgeworICAgICAgbG9nTWVzc2FnZShMT0dfSU5GTywgIlVTQjogJXM6ICVzIiwgbGFiZWwsIHN0cmluZyk7CisgICAgICBmcmVlKHN0cmluZyk7CisgICAgfQorICB9Cit9CisKK2ludAordXNiU3RyaW5nRXF1YWxzIChjb25zdCBjaGFyICpyZWZlcmVuY2UsIGNvbnN0IGNoYXIgKnZhbHVlKSB7CisgIHJldHVybiBzdHJjbXAocmVmZXJlbmNlLCB2YWx1ZSkgPT0gMDsKK30KKworaW50Cit1c2JTdHJpbmdNYXRjaGVzIChjb25zdCBjaGFyICpyZWZlcmVuY2UsIGNvbnN0IGNoYXIgKnZhbHVlKSB7CisgIGludCBvayA9IDA7CisKKyNpZmRlZiBSRUdfRVhURU5ERUQKKyAgcmVnZXhfdCBleHByZXNzaW9uOworCisgIGlmIChyZWdjb21wKCZleHByZXNzaW9uLCB2YWx1ZSwgUkVHX0VYVEVOREVEfFJFR19OT1NVQikgPT0gMCkgeworICAgIGlmIChyZWdleGVjKCZleHByZXNzaW9uLCByZWZlcmVuY2UsIDAsIE5VTEwsIDApID09IDApIHsKKyAgICAgIG9rID0gMTsKKyAgICB9CisKKyAgICByZWdmcmVlKCZleHByZXNzaW9uKTsKKyAgfQorI2VuZGlmIC8qIFJFR19FWFRFTkRFRCAqLworCisgIHJldHVybiBvazsKK30KKworaW50Cit1c2JWZXJpZnlTdHJpbmcgKAorICBVc2JEZXZpY2UgKmRldmljZSwKKyAgVXNiU3RyaW5nVmVyaWZpZXIgdmVyaWZ5LAorICB1bnNpZ25lZCBjaGFyIGluZGV4LAorICBjb25zdCBjaGFyICp2YWx1ZQorKSB7CisgIGludCBvayA9IDA7CisgIGlmICghKHZhbHVlICYmICp2YWx1ZSkpIHJldHVybiAxOworCisgIGlmIChpbmRleCkgeworICAgIGNoYXIgKnJlZmVyZW5jZSA9IHVzYkdldFN0cmluZyhkZXZpY2UsIGluZGV4LCAxMDAwKTsKKyAgICBpZiAocmVmZXJlbmNlKSB7CisgICAgICBpZiAodmVyaWZ5KHJlZmVyZW5jZSwgdmFsdWUpKSBvayA9IDE7CisgICAgICBmcmVlKHJlZmVyZW5jZSk7CisgICAgfQorICB9CisgIHJldHVybiBvazsKK30KKworaW50Cit1c2JWZXJpZnlNYW51ZmFjdHVyZXJOYW1lIChVc2JEZXZpY2UgKmRldmljZSwgY29uc3QgY2hhciAqZVJlZ0V4cCkgeworICByZXR1cm4gdXNiVmVyaWZ5U3RyaW5nKGRldmljZSwgdXNiU3RyaW5nTWF0Y2hlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICBkZXZpY2UtPmRlc2NyaXB0b3IuaU1hbnVmYWN0dXJlciwgZVJlZ0V4cCk7Cit9CisKK2ludAordXNiVmVyaWZ5UHJvZHVjdERlc2NyaXB0aW9uIChVc2JEZXZpY2UgKmRldmljZSwgY29uc3QgY2hhciAqZVJlZ0V4cCkgeworICByZXR1cm4gdXNiVmVyaWZ5U3RyaW5nKGRldmljZSwgdXNiU3RyaW5nTWF0Y2hlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICBkZXZpY2UtPmRlc2NyaXB0b3IuaVByb2R1Y3QsIGVSZWdFeHApOworfQorCitpbnQKK3VzYlZlcmlmeVNlcmlhbE51bWJlciAoVXNiRGV2aWNlICpkZXZpY2UsIGNvbnN0IGNoYXIgKnN0cmluZykgeworICByZXR1cm4gdXNiVmVyaWZ5U3RyaW5nKGRldmljZSwgdXNiU3RyaW5nRXF1YWxzLAorICAgICAgICAgICAgICAgICAgICAgICAgIGRldmljZS0+ZGVzY3JpcHRvci5pU2VyaWFsTnVtYmVyLCBzdHJpbmcpOworfQorCitpbnQKK3VzYlBhcnNlVmVuZG9ySWRlbnRpZmllciAodWludDE2X3QgKmlkZW50aWZpZXIsIGNvbnN0IGNoYXIgKnN0cmluZykgeworICBpZiAoc3RyaW5nICYmICpzdHJpbmcpIHsKKyAgICB1bnNpZ25lZCBpbnQgdmFsdWU7CisKKyAgICBpZiAoaXNVbnNpZ25lZEludGVnZXIoJnZhbHVlLCBzdHJpbmcpKSB7CisgICAgICBpZiAoKHZhbHVlID4gMCkgJiYgKHZhbHVlIDw9IFVJTlQxNl9NQVgpKSB7CisgICAgICAgICppZGVudGlmaWVyID0gdmFsdWU7CisgICAgICAgIHJldHVybiAxOworICAgICAgfQorICAgIH0KKworICAgIGxvZ01lc3NhZ2UoTE9HX1dBUk5JTkcsICJpbnZhbGlkIFVTQiB2ZW5kb3IgaWRlbnRpZmllcjogJXMiLCBzdHJpbmcpOworICAgIHJldHVybiAwOworICB9CisKKyAgKmlkZW50aWZpZXIgPSAwOworICByZXR1cm4gMTsKK30KKworaW50Cit1c2JWZXJpZnlWZW5kb3JJZGVudGlmaWVyIChjb25zdCBVc2JEZXZpY2VEZXNjcmlwdG9yICpkZXNjcmlwdG9yLCB1aW50MTZfdCBpZGVudGlmaWVyKSB7CisgIGlmICghaWRlbnRpZmllcikgcmV0dXJuIDE7CisgIHJldHVybiBpZGVudGlmaWVyID09IGdldExpdHRsZUVuZGlhbjE2KGRlc2NyaXB0b3ItPmlkVmVuZG9yKTsKK30KKworaW50Cit1c2JQYXJzZVByb2R1Y3RJZGVudGlmaWVyICh1aW50MTZfdCAqaWRlbnRpZmllciwgY29uc3QgY2hhciAqc3RyaW5nKSB7CisgIGlmIChzdHJpbmcgJiYgKnN0cmluZykgeworICAgIHVuc2lnbmVkIGludCB2YWx1ZTsKKworICAgIGlmIChpc1Vuc2lnbmVkSW50ZWdlcigmdmFsdWUsIHN0cmluZykpIHsKKyAgICAgIGlmICgodmFsdWUgPiAwKSAmJiAodmFsdWUgPD0gVUlOVDE2X01BWCkpIHsKKyAgICAgICAgKmlkZW50aWZpZXIgPSB2YWx1ZTsKKyAgICAgICAgcmV0dXJuIDE7CisgICAgICB9CisgICAgfQorCisgICAgbG9nTWVzc2FnZShMT0dfV0FSTklORywgImludmFsaWQgVVNCIHByb2R1Y3QgaWRlbnRpZmllcjogJXMiLCBzdHJpbmcpOworICAgIHJldHVybiAwOworICB9CisKKyAgKmlkZW50aWZpZXIgPSAwOworICByZXR1cm4gMTsKK30KKworaW50Cit1c2JWZXJpZnlQcm9kdWN0SWRlbnRpZmllciAoY29uc3QgVXNiRGV2aWNlRGVzY3JpcHRvciAqZGVzY3JpcHRvciwgdWludDE2X3QgaWRlbnRpZmllcikgeworICBpZiAoIWlkZW50aWZpZXIpIHJldHVybiAxOworICByZXR1cm4gaWRlbnRpZmllciA9PSBnZXRMaXR0bGVFbmRpYW4xNihkZXNjcmlwdG9yLT5pZFByb2R1Y3QpOworfQorCitzdGF0aWMgaW50Cit1c2JWZXJpZnlTdHJpbmdzICgKKyAgVXNiRGV2aWNlICpkZXZpY2UsCisgIGNvbnN0IGNoYXIgKmNvbnN0ICpzdHJpbmdzLAorICB1bnNpZ25lZCBjaGFyIG51bWJlcgorKSB7CisgIGlmICghc3RyaW5ncykgcmV0dXJuIDE7CisgIGlmICghbnVtYmVyKSByZXR1cm4gMDsKKworICBjaGFyICpzdHJpbmcgPSB1c2JHZXRTdHJpbmcoZGV2aWNlLCBudW1iZXIsIDEwMDApOworICBpbnQgbWF0Y2hlZCA9IDA7CisKKyAgaWYgKHN0cmluZykgeworICAgIHdoaWxlICgqc3RyaW5ncykgeworICAgICAgaWYgKHN0cmNtcCgqc3RyaW5ncywgc3RyaW5nKSA9PSAwKSB7CisgICAgICAgIG1hdGNoZWQgPSAxOworICAgICAgICBicmVhazsKKyAgICAgIH0KKworICAgICAgc3RyaW5ncyArPSAxOworICAgIH0KKworICAgIGZyZWUoc3RyaW5nKTsKKyAgfQorCisgIHJldHVybiBtYXRjaGVkOworfQorCitjb25zdCBVc2JEZXZpY2VEZXNjcmlwdG9yICoKK3VzYkRldmljZURlc2NyaXB0b3IgKFVzYkRldmljZSAqZGV2aWNlKSB7CisgIHJldHVybiAmZGV2aWNlLT5kZXNjcmlwdG9yOworfQorCitpbnQKK3VzYkdldENvbmZpZ3VyYXRpb24gKAorICBVc2JEZXZpY2UgKmRldmljZSwKKyAgdW5zaWduZWQgY2hhciAqY29uZmlndXJhdGlvbgorKSB7CisgIHNzaXplX3Qgc2l6ZSA9IHVzYkNvbnRyb2xSZWFkKGRldmljZSwgVXNiQ29udHJvbFJlY2lwaWVudF9EZXZpY2UsIFVzYkNvbnRyb2xUeXBlX1N0YW5kYXJkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVc2JTdGFuZGFyZFJlcXVlc3RfR2V0Q29uZmlndXJhdGlvbiwgMCwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlndXJhdGlvbiwgc2l6ZW9mKCpjb25maWd1cmF0aW9uKSwgMTAwMCk7CisgIGlmIChzaXplICE9IC0xKSByZXR1cm4gMTsKKyAgbG9nTWVzc2FnZShMT0dfV0FSTklORywgIlVTQiBzdGFuZGFyZCByZXF1ZXN0IG5vdCBzdXBwb3J0ZWQ6IGdldCBjb25maWd1cmF0aW9uIik7CisgIHJldHVybiAwOworfQorCitzdGF0aWMgdm9pZAordXNiRGVhbGxvY2F0ZUNvbmZpZ3VyYXRpb25EZXNjcmlwdG9yIChVc2JEZXZpY2UgKmRldmljZSkgeworICBpZiAoZGV2aWNlLT5jb25maWd1cmF0aW9uKSB7CisgICAgZnJlZShkZXZpY2UtPmNvbmZpZ3VyYXRpb24pOworICAgIGRldmljZS0+Y29uZmlndXJhdGlvbiA9IE5VTEw7CisgIH0KK30KKworY29uc3QgVXNiQ29uZmlndXJhdGlvbkRlc2NyaXB0b3IgKgordXNiQ29uZmlndXJhdGlvbkRlc2NyaXB0b3IgKAorICBVc2JEZXZpY2UgKmRldmljZQorKSB7CisgIGlmICghZGV2aWNlLT5jb25maWd1cmF0aW9uKSB7CisgICAgdW5zaWduZWQgY2hhciBjdXJyZW50OworCisgICAgaWYgKGRldmljZS0+ZGVzY3JpcHRvci5iTnVtQ29uZmlndXJhdGlvbnMgPCAyKSB7CisgICAgICBjdXJyZW50ID0gMTsKKyAgICB9IGVsc2UgaWYgKCF1c2JHZXRDb25maWd1cmF0aW9uKGRldmljZSwgJmN1cnJlbnQpKSB7CisgICAgICBjdXJyZW50ID0gMDsKKyAgICB9CisKKyAgICBpZiAoY3VycmVudCkgeworICAgICAgVXNiRGVzY3JpcHRvciBkZXNjcmlwdG9yOworICAgICAgdW5zaWduZWQgY2hhciBudW1iZXI7CisKKyAgICAgIGZvciAobnVtYmVyPTA7IG51bWJlcjxkZXZpY2UtPmRlc2NyaXB0b3IuYk51bUNvbmZpZ3VyYXRpb25zOyBudW1iZXIrKykgeworICAgICAgICBpbnQgc2l6ZSA9IHVzYkdldERlc2NyaXB0b3IoZGV2aWNlLCBVc2JEZXNjcmlwdG9yVHlwZV9Db25maWd1cmF0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtYmVyLCAwLCAmZGVzY3JpcHRvciwgMTAwMCk7CisgICAgICAgIGlmIChzaXplID09IC0xKSB7CisgICAgICAgICAgbG9nTWVzc2FnZShMT0dfV0FSTklORywgIlVTQiBjb25maWd1cmF0aW9uIGRlc2NyaXB0b3Igbm90IHJlYWRhYmxlOiAlZCIsIG51bWJlcik7CisgICAgICAgIH0gZWxzZSBpZiAoZGVzY3JpcHRvci5jb25maWd1cmF0aW9uLmJDb25maWd1cmF0aW9uVmFsdWUgPT0gY3VycmVudCkgeworICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICB9CisKKyAgICAgIGlmIChudW1iZXIgPCBkZXZpY2UtPmRlc2NyaXB0b3IuYk51bUNvbmZpZ3VyYXRpb25zKSB7CisgICAgICAgIGludCBsZW5ndGggPSBnZXRMaXR0bGVFbmRpYW4xNihkZXNjcmlwdG9yLmNvbmZpZ3VyYXRpb24ud1RvdGFsTGVuZ3RoKTsKKyAgICAgICAgVXNiRGVzY3JpcHRvciAqZGVzY3JpcHRvcnM7CisKKyAgICAgICAgaWYgKChkZXNjcmlwdG9ycyA9IG1hbGxvYyhsZW5ndGgpKSkgeworICAgICAgICAgIHNzaXplX3Qgc2l6ZTsKKworICAgICAgICAgIGlmIChsZW5ndGggPiBzaXplb2YoZGVzY3JpcHRvcikpIHsKKyAgICAgICAgICAgIHNpemUgPSB1c2JDb250cm9sUmVhZChkZXZpY2UsIFVzYkNvbnRyb2xSZWNpcGllbnRfRGV2aWNlLCBVc2JDb250cm9sVHlwZV9TdGFuZGFyZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVc2JTdGFuZGFyZFJlcXVlc3RfR2V0RGVzY3JpcHRvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoVXNiRGVzY3JpcHRvclR5cGVfQ29uZmlndXJhdGlvbiA8PCA4KSB8IG51bWJlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCBkZXNjcmlwdG9ycywgbGVuZ3RoLCAxMDAwKTsKKyAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgbWVtY3B5KGRlc2NyaXB0b3JzLCAmZGVzY3JpcHRvciwgKHNpemUgPSBsZW5ndGgpKTsKKyAgICAgICAgICB9CisKKyAgICAgICAgICBpZiAoc2l6ZSAhPSAtMSkgeworICAgICAgICAgICAgZGV2aWNlLT5jb25maWd1cmF0aW9uID0gJmRlc2NyaXB0b3JzLT5jb25maWd1cmF0aW9uOworICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBmcmVlKGRlc2NyaXB0b3JzKTsKKyAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgbG9nU3lzdGVtRXJyb3IoIlVTQiBjb25maWd1cmF0aW9uIGRlc2NyaXB0b3IgYWxsb2NhdGUiKTsKKyAgICAgICAgfQorICAgICAgfSBlbHNlIHsKKyAgICAgICAgbG9nTWVzc2FnZShMT0dfRVJSLCAiVVNCIGNvbmZpZ3VyYXRpb24gZGVzY3JpcHRvciBub3QgZm91bmQ6ICVkIiwgY3VycmVudCk7CisgICAgICB9CisgICAgfQorICB9CisKKyAgcmV0dXJuIGRldmljZS0+Y29uZmlndXJhdGlvbjsKK30KKworaW50Cit1c2JDb25maWd1cmVEZXZpY2UgKAorICBVc2JEZXZpY2UgKmRldmljZSwKKyAgdW5zaWduZWQgY2hhciBjb25maWd1cmF0aW9uCispIHsKKyAgdXNiQ2xvc2VJbnRlcmZhY2UoZGV2aWNlKTsKKworICBpZiAodXNiU2V0Q29uZmlndXJhdGlvbihkZXZpY2UsIGNvbmZpZ3VyYXRpb24pKSB7CisgICAgdXNiRGVhbGxvY2F0ZUNvbmZpZ3VyYXRpb25EZXNjcmlwdG9yKGRldmljZSk7CisgICAgcmV0dXJuIDE7CisgIH0KKworICB7CisgICAgY29uc3QgVXNiQ29uZmlndXJhdGlvbkRlc2NyaXB0b3IgKmRlc2NyaXB0b3IgPSB1c2JDb25maWd1cmF0aW9uRGVzY3JpcHRvcihkZXZpY2UpOworCisgICAgaWYgKGRlc2NyaXB0b3IpCisgICAgICBpZiAoZGVzY3JpcHRvci0+YkNvbmZpZ3VyYXRpb25WYWx1ZSA9PSBjb25maWd1cmF0aW9uKQorICAgICAgICByZXR1cm4gMTsKKyAgfQorCisgIHJldHVybiAwOworfQorCitpbnQKK3VzYk5leHREZXNjcmlwdG9yICgKKyAgVXNiRGV2aWNlICpkZXZpY2UsCisgIGNvbnN0IFVzYkRlc2NyaXB0b3IgKipkZXNjcmlwdG9yCispIHsKKyAgaWYgKCpkZXNjcmlwdG9yKSB7CisgICAgY29uc3QgVXNiRGVzY3JpcHRvciAqbmV4dCA9IChVc2JEZXNjcmlwdG9yICopJigqZGVzY3JpcHRvciktPmJ5dGVzWygqZGVzY3JpcHRvciktPmhlYWRlci5iTGVuZ3RoXTsKKyAgICBjb25zdCBVc2JEZXNjcmlwdG9yICpmaXJzdCA9IChVc2JEZXNjcmlwdG9yICopZGV2aWNlLT5jb25maWd1cmF0aW9uOworICAgIHVuc2lnbmVkIGludCBsZW5ndGggPSBnZXRMaXR0bGVFbmRpYW4xNihmaXJzdC0+Y29uZmlndXJhdGlvbi53VG90YWxMZW5ndGgpOworCisgICAgaWYgKCgmbmV4dC0+Ynl0ZXNbMF0gLSAmZmlyc3QtPmJ5dGVzWzBdKSA+PSBsZW5ndGgpIHJldHVybiAwOworICAgIGlmICgoJm5leHQtPmJ5dGVzW25leHQtPmhlYWRlci5iTGVuZ3RoXSAtICZmaXJzdC0+Ynl0ZXNbMF0pID4gbGVuZ3RoKSByZXR1cm4gMDsKKworICAgICpkZXNjcmlwdG9yID0gbmV4dDsKKyAgfSBlbHNlIGlmICh1c2JDb25maWd1cmF0aW9uRGVzY3JpcHRvcihkZXZpY2UpKSB7CisgICAgKmRlc2NyaXB0b3IgPSAoVXNiRGVzY3JpcHRvciAqKWRldmljZS0+Y29uZmlndXJhdGlvbjsKKyAgfSBlbHNlIHsKKyAgICByZXR1cm4gMDsKKyAgfQorCisgIHJldHVybiAxOworfQorCitjb25zdCBVc2JJbnRlcmZhY2VEZXNjcmlwdG9yICoKK3VzYkludGVyZmFjZURlc2NyaXB0b3IgKAorICBVc2JEZXZpY2UgKmRldmljZSwKKyAgdW5zaWduZWQgY2hhciBpbnRlcmZhY2UsCisgIHVuc2lnbmVkIGNoYXIgYWx0ZXJuYXRpdmUKKykgeworICBjb25zdCBVc2JEZXNjcmlwdG9yICpkZXNjcmlwdG9yID0gTlVMTDsKKworICB3aGlsZSAodXNiTmV4dERlc2NyaXB0b3IoZGV2aWNlLCAmZGVzY3JpcHRvcikpIHsKKyAgICBpZiAoZGVzY3JpcHRvci0+aW50ZXJmYWNlLmJEZXNjcmlwdG9yVHlwZSA9PSBVc2JEZXNjcmlwdG9yVHlwZV9JbnRlcmZhY2UpIHsKKyAgICAgIGlmIChkZXNjcmlwdG9yLT5pbnRlcmZhY2UuYkludGVyZmFjZU51bWJlciA9PSBpbnRlcmZhY2UpIHsKKyAgICAgICAgaWYgKGRlc2NyaXB0b3ItPmludGVyZmFjZS5iQWx0ZXJuYXRlU2V0dGluZyA9PSBhbHRlcm5hdGl2ZSkgeworICAgICAgICAgIHJldHVybiAmZGVzY3JpcHRvci0+aW50ZXJmYWNlOworICAgICAgICB9CisgICAgICB9CisgICAgfQorICB9CisKKyAgbG9nTWVzc2FnZShMT0dfV0FSTklORywgIlVTQjogaW50ZXJmYWNlIGRlc2NyaXB0b3Igbm90IGZvdW5kOiAlZC4lZCIsIGludGVyZmFjZSwgYWx0ZXJuYXRpdmUpOworICBlcnJubyA9IEVOT0VOVDsKKyAgcmV0dXJuIE5VTEw7Cit9CisKK3Vuc2lnbmVkIGludAordXNiQWx0ZXJuYXRpdmVDb3VudCAoCisgIFVzYkRldmljZSAqZGV2aWNlLAorICB1bnNpZ25lZCBjaGFyIGludGVyZmFjZQorKSB7CisgIHVuc2lnbmVkIGludCBjb3VudCA9IDA7CisgIGNvbnN0IFVzYkRlc2NyaXB0b3IgKmRlc2NyaXB0b3IgPSBOVUxMOworCisgIHdoaWxlICh1c2JOZXh0RGVzY3JpcHRvcihkZXZpY2UsICZkZXNjcmlwdG9yKSkgeworICAgIGlmIChkZXNjcmlwdG9yLT5pbnRlcmZhY2UuYkRlc2NyaXB0b3JUeXBlID09IFVzYkRlc2NyaXB0b3JUeXBlX0ludGVyZmFjZSkgeworICAgICAgaWYgKGRlc2NyaXB0b3ItPmludGVyZmFjZS5iSW50ZXJmYWNlTnVtYmVyID09IGludGVyZmFjZSkgeworICAgICAgICBjb3VudCArPSAxOworICAgICAgfQorICAgIH0KKyAgfQorCisgIHJldHVybiBjb3VudDsKK30KKworY29uc3QgVXNiRW5kcG9pbnREZXNjcmlwdG9yICoKK3VzYkVuZHBvaW50RGVzY3JpcHRvciAoCisgIFVzYkRldmljZSAqZGV2aWNlLAorICB1bnNpZ25lZCBjaGFyIGVuZHBvaW50QWRkcmVzcworKSB7CisgIGNvbnN0IFVzYkRlc2NyaXB0b3IgKmRlc2NyaXB0b3IgPSBOVUxMOworICBkZXZpY2UtPnNjcmF0Y2guZW5kcG9pbnRJbnRlcmZhY2VEZXNjcmlwdG9yID0gTlVMTDsKKworICB3aGlsZSAodXNiTmV4dERlc2NyaXB0b3IoZGV2aWNlLCAmZGVzY3JpcHRvcikpIHsKKyAgICBpZiAoZGVzY3JpcHRvci0+aGVhZGVyLmJEZXNjcmlwdG9yVHlwZSA9PSBVc2JEZXNjcmlwdG9yVHlwZV9JbnRlcmZhY2UpIHsKKyAgICAgIGRldmljZS0+c2NyYXRjaC5lbmRwb2ludEludGVyZmFjZURlc2NyaXB0b3IgPSAmZGVzY3JpcHRvci0+aW50ZXJmYWNlOworICAgICAgY29udGludWU7CisgICAgfQorCisgICAgaWYgKGRlc2NyaXB0b3ItPmhlYWRlci5iRGVzY3JpcHRvclR5cGUgPT0gVXNiRGVzY3JpcHRvclR5cGVfRW5kcG9pbnQpIHsKKyAgICAgIGlmIChkZXNjcmlwdG9yLT5lbmRwb2ludC5iRW5kcG9pbnRBZGRyZXNzID09IGVuZHBvaW50QWRkcmVzcykgeworICAgICAgICByZXR1cm4gJmRlc2NyaXB0b3ItPmVuZHBvaW50OworICAgICAgfQorICAgIH0KKyAgfQorCisgIGxvZ01lc3NhZ2UoTE9HX1dBUk5JTkcsICJVU0I6IGVuZHBvaW50IGRlc2NyaXB0b3Igbm90IGZvdW5kOiAlMDJYIiwgZW5kcG9pbnRBZGRyZXNzKTsKKyAgZXJybm8gPSBFTk9FTlQ7CisgIHJldHVybiBOVUxMOworfQorCitzdGF0aWMgdm9pZAordXNiQ2FuY2VsSW5wdXRNb25pdG9yIChVc2JFbmRwb2ludCAqZW5kcG9pbnQpIHsKKyAgaWYgKGVuZHBvaW50LT5kaXJlY3Rpb24uaW5wdXQucGlwZS5tb25pdG9yKSB7CisgICAgYXN5bmNDYW5jZWxSZXF1ZXN0KGVuZHBvaW50LT5kaXJlY3Rpb24uaW5wdXQucGlwZS5tb25pdG9yKTsKKyAgICBlbmRwb2ludC0+ZGlyZWN0aW9uLmlucHV0LnBpcGUubW9uaXRvciA9IE5VTEw7CisgIH0KK30KKworc3RhdGljIGlubGluZSBpbnQKK3VzYkhhdmVJbnB1dFBpcGUgKFVzYkVuZHBvaW50ICplbmRwb2ludCkgeworICByZXR1cm4gZW5kcG9pbnQtPmRpcmVjdGlvbi5pbnB1dC5waXBlLm91dHB1dCAhPSBJTlZBTElEX0ZJTEVfREVTQ1JJUFRPUjsKK30KKworc3RhdGljIGlubGluZSBpbnQKK3VzYkhhdmVJbnB1dEVycm9yIChVc2JFbmRwb2ludCAqZW5kcG9pbnQpIHsKKyAgcmV0dXJuIGVuZHBvaW50LT5kaXJlY3Rpb24uaW5wdXQucGlwZS5pbnB1dCA9PSBJTlZBTElEX0ZJTEVfREVTQ1JJUFRPUjsKK30KKwordm9pZAordXNiU2V0RW5kcG9pbnRJbnB1dEVycm9yIChVc2JFbmRwb2ludCAqZW5kcG9pbnQsIGludCBlcnJvcikgeworICBpZiAoIXVzYkhhdmVJbnB1dEVycm9yKGVuZHBvaW50KSkgeworICAgIGVuZHBvaW50LT5kaXJlY3Rpb24uaW5wdXQucGlwZS5lcnJvciA9IGVycm9yOworICAgIGNsb3NlRmlsZSgmZW5kcG9pbnQtPmRpcmVjdGlvbi5pbnB1dC5waXBlLmlucHV0KTsKKyAgfQorfQorCitzdGF0aWMgaW50Cit1c2JTZXRJbnB1dEVycm9yICh2b2lkICppdGVtLCB2b2lkICpkYXRhKSB7CisgIFVzYkVuZHBvaW50ICplbmRwb2ludCA9IGl0ZW07CisgIGNvbnN0IGludCAqZXJyb3IgPSBkYXRhOworCisgIGlmICh1c2JIYXZlSW5wdXRQaXBlKGVuZHBvaW50KSkgeworICAgIHVzYlNldEVuZHBvaW50SW5wdXRFcnJvcihlbmRwb2ludCwgKmVycm9yKTsKKyAgfQorCisgIHJldHVybiAwOworfQorCit2b2lkCit1c2JTZXREZXZpY2VJbnB1dEVycm9yIChVc2JEZXZpY2UgKmRldmljZSwgaW50IGVycm9yKSB7CisgIHByb2Nlc3NRdWV1ZShkZXZpY2UtPmVuZHBvaW50cywgdXNiU2V0SW5wdXRFcnJvciwgJmVycm9yKTsKK30KKworaW50Cit1c2JFbnF1ZXVlSW5wdXQgKFVzYkVuZHBvaW50ICplbmRwb2ludCwgY29uc3Qgdm9pZCAqYnVmZmVyLCBzaXplX3QgbGVuZ3RoKSB7CisgIGlmICh1c2JIYXZlSW5wdXRFcnJvcihlbmRwb2ludCkpIHsKKyAgICBlcnJubyA9IEVJTzsKKyAgICByZXR1cm4gMDsKKyAgfQorCisgIHJldHVybiB3cml0ZUZpbGUoZW5kcG9pbnQtPmRpcmVjdGlvbi5pbnB1dC5waXBlLmlucHV0LCBidWZmZXIsIGxlbmd0aCkgIT0gLTE7Cit9CisKK3ZvaWQKK3VzYkRlc3Ryb3lJbnB1dFBpcGUgKFVzYkVuZHBvaW50ICplbmRwb2ludCkgeworICB1c2JDYW5jZWxJbnB1dE1vbml0b3IoZW5kcG9pbnQpOworICBjbG9zZUZpbGUoJmVuZHBvaW50LT5kaXJlY3Rpb24uaW5wdXQucGlwZS5pbnB1dCk7CisgIGNsb3NlRmlsZSgmZW5kcG9pbnQtPmRpcmVjdGlvbi5pbnB1dC5waXBlLm91dHB1dCk7Cit9CisKK2ludAordXNiTWFrZUlucHV0UGlwZSAoVXNiRW5kcG9pbnQgKmVuZHBvaW50KSB7CisgIGlmICh1c2JIYXZlSW5wdXRQaXBlKGVuZHBvaW50KSkgcmV0dXJuIDE7CisKKyAgaWYgKGNyZWF0ZUFub255bW91c1BpcGUoJmVuZHBvaW50LT5kaXJlY3Rpb24uaW5wdXQucGlwZS5pbnB1dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJmVuZHBvaW50LT5kaXJlY3Rpb24uaW5wdXQucGlwZS5vdXRwdXQpKSB7CisgICAgc2V0Q2xvc2VPbkV4ZWMoZW5kcG9pbnQtPmRpcmVjdGlvbi5pbnB1dC5waXBlLmlucHV0LCAxKTsKKyAgICBzZXRDbG9zZU9uRXhlYyhlbmRwb2ludC0+ZGlyZWN0aW9uLmlucHV0LnBpcGUub3V0cHV0LCAxKTsKKworICAgIGlmIChzZXRCbG9ja2luZ0lvKGVuZHBvaW50LT5kaXJlY3Rpb24uaW5wdXQucGlwZS5vdXRwdXQsIDApKSB7CisgICAgICByZXR1cm4gMTsKKyAgICB9CisgIH0KKworICB1c2JEZXN0cm95SW5wdXRQaXBlKGVuZHBvaW50KTsKKyAgcmV0dXJuIDA7Cit9CisKK2ludAordXNiTW9uaXRvcklucHV0UGlwZSAoCisgIFVzYkRldmljZSAqZGV2aWNlLCB1bnNpZ25lZCBjaGFyIGVuZHBvaW50TnVtYmVyLAorICBBc3luY01vbml0b3JDYWxsYmFjayAqY2FsbGJhY2ssIHZvaWQgKmRhdGEKKykgeworICBVc2JFbmRwb2ludCAqZW5kcG9pbnQgPSB1c2JHZXRJbnB1dEVuZHBvaW50KGRldmljZSwgZW5kcG9pbnROdW1iZXIpOworCisgIGlmIChlbmRwb2ludCkgeworICAgIGlmICh1c2JIYXZlSW5wdXRQaXBlKGVuZHBvaW50KSkgeworICAgICAgdXNiQ2FuY2VsSW5wdXRNb25pdG9yKGVuZHBvaW50KTsKKyAgICAgIGlmICghY2FsbGJhY2spIHJldHVybiAxOworCisgICAgICBpZiAoYXN5bmNNb25pdG9yRmlsZUlucHV0KCZlbmRwb2ludC0+ZGlyZWN0aW9uLmlucHV0LnBpcGUubW9uaXRvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kcG9pbnQtPmRpcmVjdGlvbi5pbnB1dC5waXBlLm91dHB1dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2ssIGRhdGEpKSB7CisgICAgICAgIHJldHVybiAxOworICAgICAgfQorICAgIH0KKyAgfQorCisgIHJldHVybiAwOworfQorCitzdGF0aWMgdm9pZAordXNiRGVhbGxvY2F0ZUVuZHBvaW50ICh2b2lkICppdGVtLCB2b2lkICpkYXRhKSB7CisgIFVzYkVuZHBvaW50ICplbmRwb2ludCA9IGl0ZW07CisKKyAgc3dpdGNoIChVU0JfRU5EUE9JTlRfRElSRUNUSU9OKGVuZHBvaW50LT5kZXNjcmlwdG9yKSkgeworICAgIGNhc2UgVXNiRW5kcG9pbnREaXJlY3Rpb25fSW5wdXQ6CisgICAgICBpZiAoZW5kcG9pbnQtPmRpcmVjdGlvbi5pbnB1dC5wZW5kaW5nLmFsYXJtKSB7CisgICAgICAgIGFzeW5jQ2FuY2VsUmVxdWVzdChlbmRwb2ludC0+ZGlyZWN0aW9uLmlucHV0LnBlbmRpbmcuYWxhcm0pOworICAgICAgICBlbmRwb2ludC0+ZGlyZWN0aW9uLmlucHV0LnBlbmRpbmcuYWxhcm0gPSBOVUxMOworICAgICAgfQorCisgICAgICBpZiAoZW5kcG9pbnQtPmRpcmVjdGlvbi5pbnB1dC5wZW5kaW5nLnJlcXVlc3RzKSB7CisgICAgICAgIGRlYWxsb2NhdGVRdWV1ZShlbmRwb2ludC0+ZGlyZWN0aW9uLmlucHV0LnBlbmRpbmcucmVxdWVzdHMpOworICAgICAgICBlbmRwb2ludC0+ZGlyZWN0aW9uLmlucHV0LnBlbmRpbmcucmVxdWVzdHMgPSBOVUxMOworICAgICAgfQorCisgICAgICBpZiAoZW5kcG9pbnQtPmRpcmVjdGlvbi5pbnB1dC5jb21wbGV0ZWQucmVxdWVzdCkgeworICAgICAgICBmcmVlKGVuZHBvaW50LT5kaXJlY3Rpb24uaW5wdXQuY29tcGxldGVkLnJlcXVlc3QpOworICAgICAgICBlbmRwb2ludC0+ZGlyZWN0aW9uLmlucHV0LmNvbXBsZXRlZC5yZXF1ZXN0ID0gTlVMTDsKKyAgICAgIH0KKworICAgICAgYnJlYWs7CisKKyAgICBkZWZhdWx0OgorICAgICAgYnJlYWs7CisgIH0KKworICBpZiAoZW5kcG9pbnQtPmV4dGVuc2lvbikgeworICAgIHVzYkRlYWxsb2NhdGVFbmRwb2ludEV4dGVuc2lvbihlbmRwb2ludC0+ZXh0ZW5zaW9uKTsKKyAgICBlbmRwb2ludC0+ZXh0ZW5zaW9uID0gTlVMTDsKKyAgfQorCisgIHN3aXRjaCAoVVNCX0VORFBPSU5UX0RJUkVDVElPTihlbmRwb2ludC0+ZGVzY3JpcHRvcikpIHsKKyAgICBjYXNlIFVzYkVuZHBvaW50RGlyZWN0aW9uX0lucHV0OgorICAgICAgdXNiRGVzdHJveUlucHV0UGlwZShlbmRwb2ludCk7CisgICAgICBicmVhazsKKworICAgIGRlZmF1bHQ6CisgICAgICBicmVhazsKKyAgfQorCisgIGZyZWUoZW5kcG9pbnQpOworfQorCitzdGF0aWMgaW50Cit1c2JUZXN0RW5kcG9pbnQgKGNvbnN0IHZvaWQgKml0ZW0sIHZvaWQgKmRhdGEpIHsKKyAgY29uc3QgVXNiRW5kcG9pbnQgKmVuZHBvaW50ID0gaXRlbTsKKyAgY29uc3QgdW5zaWduZWQgY2hhciAqZW5kcG9pbnRBZGRyZXNzID0gZGF0YTsKKyAgcmV0dXJuIGVuZHBvaW50LT5kZXNjcmlwdG9yLT5iRW5kcG9pbnRBZGRyZXNzID09ICplbmRwb2ludEFkZHJlc3M7Cit9CisKK1VzYkVuZHBvaW50ICoKK3VzYkdldEVuZHBvaW50IChVc2JEZXZpY2UgKmRldmljZSwgdW5zaWduZWQgY2hhciBlbmRwb2ludEFkZHJlc3MpIHsKKyAgVXNiRW5kcG9pbnQgKmVuZHBvaW50ID0gZmluZEl0ZW0oZGV2aWNlLT5lbmRwb2ludHMsIHVzYlRlc3RFbmRwb2ludCwgJmVuZHBvaW50QWRkcmVzcyk7CisgIGlmIChlbmRwb2ludCkgcmV0dXJuIGVuZHBvaW50OworICBjb25zdCBVc2JFbmRwb2ludERlc2NyaXB0b3IgKmRlc2NyaXB0b3IgPSB1c2JFbmRwb2ludERlc2NyaXB0b3IoZGV2aWNlLCBlbmRwb2ludEFkZHJlc3MpOworCisgIGlmIChkZXNjcmlwdG9yKSB7CisgICAgeworICAgICAgY29uc3QgY2hhciAqZGlyZWN0aW9uOworICAgICAgY29uc3QgY2hhciAqdHJhbnNmZXI7CisKKyAgICAgIHN3aXRjaCAoVVNCX0VORFBPSU5UX0RJUkVDVElPTihkZXNjcmlwdG9yKSkgeworICAgICAgICBkZWZhdWx0OiAgICAgICAgICAgICAgICAgICAgICAgICAgZGlyZWN0aW9uID0gIj8iOyAgIGJyZWFrOworICAgICAgICBjYXNlIFVzYkVuZHBvaW50RGlyZWN0aW9uX0lucHV0OiAgZGlyZWN0aW9uID0gImluIjsgIGJyZWFrOworICAgICAgICBjYXNlIFVzYkVuZHBvaW50RGlyZWN0aW9uX091dHB1dDogZGlyZWN0aW9uID0gIm91dCI7IGJyZWFrOworICAgICAgfQorCisgICAgICBzd2l0Y2ggKFVTQl9FTkRQT0lOVF9UUkFOU0ZFUihkZXNjcmlwdG9yKSkgeworICAgICAgICBkZWZhdWx0OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zZmVyID0gIj8iOyAgIGJyZWFrOworICAgICAgICBjYXNlIFVzYkVuZHBvaW50VHJhbnNmZXJfQ29udHJvbDogICAgIHRyYW5zZmVyID0gImN0bCI7IGJyZWFrOworICAgICAgICBjYXNlIFVzYkVuZHBvaW50VHJhbnNmZXJfSXNvY2hyb25vdXM6IHRyYW5zZmVyID0gImlzbyI7IGJyZWFrOworICAgICAgICBjYXNlIFVzYkVuZHBvaW50VHJhbnNmZXJfQnVsazogICAgICAgIHRyYW5zZmVyID0gImJsayI7IGJyZWFrOworICAgICAgICBjYXNlIFVzYkVuZHBvaW50VHJhbnNmZXJfSW50ZXJydXB0OiAgIHRyYW5zZmVyID0gImludCI7IGJyZWFrOworICAgICAgfQorCisgICAgICBsb2dNZXNzYWdlKExPR19DQVRFR09SWShVU0JfSU8pLAorICAgICAgICAiZXB0PSUwMlggZGlyPSVzIHhmcj0lcyBwa3Q9JWQgaXZsPSVkbXMiLAorICAgICAgICBkZXNjcmlwdG9yLT5iRW5kcG9pbnRBZGRyZXNzLAorICAgICAgICBkaXJlY3Rpb24sIHRyYW5zZmVyLAorICAgICAgICBnZXRMaXR0bGVFbmRpYW4xNihkZXNjcmlwdG9yLT53TWF4UGFja2V0U2l6ZSksCisgICAgICAgIGRlc2NyaXB0b3ItPmJJbnRlcnZhbAorICAgICAgKTsKKyAgICB9CisKKyAgICBpZiAoKGVuZHBvaW50ID0gbWFsbG9jKHNpemVvZigqZW5kcG9pbnQpKSkpIHsKKyAgICAgIG1lbXNldChlbmRwb2ludCwgMCwgc2l6ZW9mKCplbmRwb2ludCkpOworCisgICAgICBlbmRwb2ludC0+ZGV2aWNlID0gZGV2aWNlOworICAgICAgZW5kcG9pbnQtPmludGVyZmFjZSA9IGRldmljZS0+c2NyYXRjaC5lbmRwb2ludEludGVyZmFjZURlc2NyaXB0b3I7CisgICAgICBlbmRwb2ludC0+ZGVzY3JpcHRvciA9IGRlc2NyaXB0b3I7CisgICAgICBlbmRwb2ludC0+ZXh0ZW5zaW9uID0gTlVMTDsKKyAgICAgIGVuZHBvaW50LT5wcmVwYXJlID0gTlVMTDsKKworICAgICAgc3dpdGNoIChVU0JfRU5EUE9JTlRfRElSRUNUSU9OKGVuZHBvaW50LT5kZXNjcmlwdG9yKSkgeworICAgICAgICBjYXNlIFVzYkVuZHBvaW50RGlyZWN0aW9uX0lucHV0OgorICAgICAgICAgIGVuZHBvaW50LT5kaXJlY3Rpb24uaW5wdXQucGVuZGluZy5yZXF1ZXN0cyA9IE5VTEw7CisgICAgICAgICAgZW5kcG9pbnQtPmRpcmVjdGlvbi5pbnB1dC5wZW5kaW5nLmFsYXJtID0gTlVMTDsKKyAgICAgICAgICBlbmRwb2ludC0+ZGlyZWN0aW9uLmlucHV0LnBlbmRpbmcuZGVsYXkgPSAwOworCisgICAgICAgICAgZW5kcG9pbnQtPmRpcmVjdGlvbi5pbnB1dC5jb21wbGV0ZWQucmVxdWVzdCA9IE5VTEw7CisgICAgICAgICAgZW5kcG9pbnQtPmRpcmVjdGlvbi5pbnB1dC5jb21wbGV0ZWQuYnVmZmVyID0gTlVMTDsKKyAgICAgICAgICBlbmRwb2ludC0+ZGlyZWN0aW9uLmlucHV0LmNvbXBsZXRlZC5sZW5ndGggPSAwOworCisgICAgICAgICAgZW5kcG9pbnQtPmRpcmVjdGlvbi5pbnB1dC5waXBlLmlucHV0ID0gSU5WQUxJRF9GSUxFX0RFU0NSSVBUT1I7CisgICAgICAgICAgZW5kcG9pbnQtPmRpcmVjdGlvbi5pbnB1dC5waXBlLm91dHB1dCA9IElOVkFMSURfRklMRV9ERVNDUklQVE9SOworICAgICAgICAgIGVuZHBvaW50LT5kaXJlY3Rpb24uaW5wdXQucGlwZS5tb25pdG9yID0gTlVMTDsKKyAgICAgICAgICBlbmRwb2ludC0+ZGlyZWN0aW9uLmlucHV0LnBpcGUuZXJyb3IgPSAwOworCisgICAgICAgICAgYnJlYWs7CisgICAgICB9CisKKyAgICAgIGlmICh1c2JBbGxvY2F0ZUVuZHBvaW50RXh0ZW5zaW9uKGVuZHBvaW50KSkgeworICAgICAgICBpZiAoZW5xdWV1ZUl0ZW0oZGV2aWNlLT5lbmRwb2ludHMsIGVuZHBvaW50KSkgeworICAgICAgICAgIGlmIChkZXZpY2UtPmRpc2FibGVFbmRwb2ludFJlc2V0KSB7CisgICAgICAgICAgICBsb2dNZXNzYWdlKExPR19DQVRFR09SWShVU0JfSU8pLCAiZW5kcG9pbnQgcmVzZXQgZGlzYWJsZWQiKTsKKyAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgdXNiQ2xlYXJIYWx0KGRldmljZSwgZW5kcG9pbnQtPmRlc2NyaXB0b3ItPmJFbmRwb2ludEFkZHJlc3MpOworICAgICAgICAgIH0KKworICAgICAgICAgIGlmICghZW5kcG9pbnQtPnByZXBhcmUgfHwgZW5kcG9pbnQtPnByZXBhcmUoZW5kcG9pbnQpKSByZXR1cm4gZW5kcG9pbnQ7CisgICAgICAgICAgZGVsZXRlSXRlbShkZXZpY2UtPmVuZHBvaW50cywgZW5kcG9pbnQpOworICAgICAgICB9CisKKyAgICAgICAgdXNiRGVhbGxvY2F0ZUVuZHBvaW50RXh0ZW5zaW9uKGVuZHBvaW50LT5leHRlbnNpb24pOworICAgICAgICB1c2JEZXN0cm95SW5wdXRQaXBlKGVuZHBvaW50KTsKKyAgICAgIH0KKworICAgICAgZnJlZShlbmRwb2ludCk7CisgICAgfQorICB9CisKKyAgcmV0dXJuIE5VTEw7Cit9CisKK1VzYkVuZHBvaW50ICoKK3VzYkdldElucHV0RW5kcG9pbnQgKFVzYkRldmljZSAqZGV2aWNlLCB1bnNpZ25lZCBjaGFyIGVuZHBvaW50TnVtYmVyKSB7CisgIHJldHVybiB1c2JHZXRFbmRwb2ludChkZXZpY2UsIGVuZHBvaW50TnVtYmVyfFVzYkVuZHBvaW50RGlyZWN0aW9uX0lucHV0KTsKK30KKworVXNiRW5kcG9pbnQgKgordXNiR2V0T3V0cHV0RW5kcG9pbnQgKFVzYkRldmljZSAqZGV2aWNlLCB1bnNpZ25lZCBjaGFyIGVuZHBvaW50TnVtYmVyKSB7CisgIHJldHVybiB1c2JHZXRFbmRwb2ludChkZXZpY2UsIGVuZHBvaW50TnVtYmVyfFVzYkVuZHBvaW50RGlyZWN0aW9uX091dHB1dCk7Cit9CisKK3N0YXRpYyBpbnQKK3VzYkZpbmlzaEVuZHBvaW50ICh2b2lkICppdGVtLCB2b2lkICpkYXRhKSB7CisgIFVzYkVuZHBvaW50ICplbmRwb2ludCA9IGl0ZW07CisKKyAgc3dpdGNoIChVU0JfRU5EUE9JTlRfRElSRUNUSU9OKGVuZHBvaW50LT5kZXNjcmlwdG9yKSkgeworICAgIGNhc2UgVXNiRW5kcG9pbnREaXJlY3Rpb25fSW5wdXQ6CisgICAgICBpZiAoZW5kcG9pbnQtPmRpcmVjdGlvbi5pbnB1dC5wZW5kaW5nLnJlcXVlc3RzKSB7CisgICAgICAgIGRlbGV0ZUVsZW1lbnRzKGVuZHBvaW50LT5kaXJlY3Rpb24uaW5wdXQucGVuZGluZy5yZXF1ZXN0cyk7CisgICAgICB9CisgICAgICBicmVhazsKKworICAgIGRlZmF1bHQ6CisgICAgICBicmVhazsKKyAgfQorCisgIHJldHVybiAwOworfQorCitzdGF0aWMgdm9pZAordXNiUmVtb3ZlRW5kcG9pbnRzIChVc2JEZXZpY2UgKmRldmljZSwgaW50IGZpbmFsKSB7CisgIGlmIChkZXZpY2UtPmVuZHBvaW50cykgeworICAgIHByb2Nlc3NRdWV1ZShkZXZpY2UtPmVuZHBvaW50cywgdXNiRmluaXNoRW5kcG9pbnQsIE5VTEwpOworICAgIGRlbGV0ZUVsZW1lbnRzKGRldmljZS0+ZW5kcG9pbnRzKTsKKworICAgIGlmIChmaW5hbCkgeworICAgICAgZGVhbGxvY2F0ZVF1ZXVlKGRldmljZS0+ZW5kcG9pbnRzKTsKKyAgICAgIGRldmljZS0+ZW5kcG9pbnRzID0gTlVMTDsKKyAgICB9CisgIH0KK30KKworc3RhdGljIHZvaWQKK3VzYkRlYWxsb2NhdGVJbnB1dEZpbHRlciAodm9pZCAqaXRlbSwgdm9pZCAqZGF0YSkgeworICBVc2JJbnB1dEZpbHRlckVudHJ5ICplbnRyeSA9IGl0ZW07CisgIGZyZWUoZW50cnkpOworfQorCitpbnQKK3VzYkFkZElucHV0RmlsdGVyIChVc2JEZXZpY2UgKmRldmljZSwgVXNiSW5wdXRGaWx0ZXIgKmZpbHRlcikgeworICBVc2JJbnB1dEZpbHRlckVudHJ5ICplbnRyeTsKKworICBpZiAoKGVudHJ5ID0gbWFsbG9jKHNpemVvZigqZW50cnkpKSkpIHsKKyAgICBtZW1zZXQoZW50cnksIDAsIHNpemVvZigqZW50cnkpKTsKKyAgICBlbnRyeS0+ZmlsdGVyID0gZmlsdGVyOworCisgICAgaWYgKGVucXVldWVJdGVtKGRldmljZS0+aW5wdXRGaWx0ZXJzLCBlbnRyeSkpIHJldHVybiAxOworCisgICAgZnJlZShlbnRyeSk7CisgIH0KKworICByZXR1cm4gMDsKK30KKworc3RhdGljIGludAordXNiQXBwbHlJbnB1dEZpbHRlciAodm9pZCAqaXRlbSwgdm9pZCAqZGF0YSkgeworICBVc2JJbnB1dEZpbHRlckVudHJ5ICplbnRyeSA9IGl0ZW07CisKKyAgcmV0dXJuICFlbnRyeS0+ZmlsdGVyKGRhdGEpOworfQorCitpbnQKK3VzYkFwcGx5SW5wdXRGaWx0ZXJzIChVc2JFbmRwb2ludCAqZW5kcG9pbnQsIHZvaWQgKmJ1ZmZlciwgc2l6ZV90IHNpemUsIHNzaXplX3QgKmxlbmd0aCkgeworICBRdWV1ZSAqZmlsdGVycyA9IGVuZHBvaW50LT5kZXZpY2UtPmlucHV0RmlsdGVyczsKKworICBpZiAoZ2V0UXVldWVTaXplKGZpbHRlcnMpID09IDApIHsKKyAgICB1c2JMb2dFbmRwb2ludERhdGEoZW5kcG9pbnQsICJpbnB1dCIsIGJ1ZmZlciwgKmxlbmd0aCk7CisgIH0gZWxzZSB7CisgICAgdXNiTG9nRW5kcG9pbnREYXRhKGVuZHBvaW50LCAidW5maWx0ZXJlZCBpbnB1dCIsIGJ1ZmZlciwgKmxlbmd0aCk7CisKKyAgICBVc2JJbnB1dEZpbHRlckRhdGEgZGF0YSA9IHsKKyAgICAgIC5idWZmZXIgPSBidWZmZXIsCisgICAgICAuc2l6ZSA9IHNpemUsCisgICAgICAubGVuZ3RoID0gKmxlbmd0aAorICAgIH07CisKKyAgICBpZiAocHJvY2Vzc1F1ZXVlKGZpbHRlcnMsIHVzYkFwcGx5SW5wdXRGaWx0ZXIsICZkYXRhKSkgeworICAgICAgZXJybm8gPSBFSU87CisgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICAqbGVuZ3RoID0gZGF0YS5sZW5ndGg7CisgICAgdXNiTG9nRW5kcG9pbnREYXRhKGVuZHBvaW50LCAiZmlsdGVyZWQgaW5wdXQiLCBidWZmZXIsICpsZW5ndGgpOworICB9CisKKyAgcmV0dXJuIDE7Cit9CisKK3ZvaWQKK3VzYkNsb3NlSW50ZXJmYWNlICgKKyAgVXNiRGV2aWNlICpkZXZpY2UKKykgeworICB1c2JSZW1vdmVFbmRwb2ludHMoZGV2aWNlLCAwKTsKKworICBpZiAoZGV2aWNlLT5pbnRlcmZhY2UpIHsKKyAgICB1c2JSZWxlYXNlSW50ZXJmYWNlKGRldmljZSwgZGV2aWNlLT5pbnRlcmZhY2UtPmJJbnRlcmZhY2VOdW1iZXIpOworICAgIGRldmljZS0+aW50ZXJmYWNlID0gTlVMTDsKKyAgfQorfQorCitpbnQKK3VzYk9wZW5JbnRlcmZhY2UgKAorICBVc2JEZXZpY2UgKmRldmljZSwKKyAgdW5zaWduZWQgY2hhciBpbnRlcmZhY2UsCisgIHVuc2lnbmVkIGNoYXIgYWx0ZXJuYXRpdmUKKykgeworICBjb25zdCBVc2JJbnRlcmZhY2VEZXNjcmlwdG9yICpkZXNjcmlwdG9yID0gdXNiSW50ZXJmYWNlRGVzY3JpcHRvcihkZXZpY2UsIGludGVyZmFjZSwgYWx0ZXJuYXRpdmUpOworICBpZiAoIWRlc2NyaXB0b3IpIHJldHVybiAwOworICBpZiAoZGVzY3JpcHRvciA9PSBkZXZpY2UtPmludGVyZmFjZSkgcmV0dXJuIDE7CisKKyAgaWYgKGRldmljZS0+aW50ZXJmYWNlKSB7CisgICAgaWYgKGRldmljZS0+aW50ZXJmYWNlLT5iSW50ZXJmYWNlTnVtYmVyICE9IGludGVyZmFjZSkgeworICAgICAgdXNiQ2xvc2VJbnRlcmZhY2UoZGV2aWNlKTsKKyAgICB9CisgIH0KKworICBpZiAoIWRldmljZS0+aW50ZXJmYWNlKSB7CisgICAgaWYgKCF1c2JDbGFpbUludGVyZmFjZShkZXZpY2UsIGludGVyZmFjZSkpIHsKKyAgICAgIHJldHVybiAwOworICAgIH0KKyAgfQorCisgIGlmICh1c2JBbHRlcm5hdGl2ZUNvdW50KGRldmljZSwgaW50ZXJmYWNlKSA9PSAxKSBnb3RvIGRvbmU7CisKKyAgeworICAgIHVuc2lnbmVkIGNoYXIgcmVzcG9uc2VbMV07CisgICAgc3NpemVfdCBzaXplID0gdXNiQ29udHJvbFJlYWQoZGV2aWNlLCBVc2JDb250cm9sUmVjaXBpZW50X0ludGVyZmFjZSwgVXNiQ29udHJvbFR5cGVfU3RhbmRhcmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVXNiU3RhbmRhcmRSZXF1ZXN0X0dldEludGVyZmFjZSwgMCwgaW50ZXJmYWNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlLCBzaXplb2YocmVzcG9uc2UpLCAxMDAwKTsKKworICAgIGlmIChzaXplICE9IC0xKSB7CisgICAgICBpZiAocmVzcG9uc2VbMF0gPT0gYWx0ZXJuYXRpdmUpIGdvdG8gZG9uZTsKKyAgICB9IGVsc2UgeworICAgICAgbG9nTWVzc2FnZShMT0dfV0FSTklORywgIlVTQiBzdGFuZGFyZCByZXF1ZXN0IG5vdCBzdXBwb3J0ZWQ6IGdldCBpbnRlcmZhY2UiKTsKKyAgICB9CisgIH0KKworICBpZiAodXNiU2V0QWx0ZXJuYXRpdmUoZGV2aWNlLCBpbnRlcmZhY2UsIGFsdGVybmF0aXZlKSkgZ290byBkb25lOworICBpZiAoIWRldmljZS0+aW50ZXJmYWNlKSB1c2JSZWxlYXNlSW50ZXJmYWNlKGRldmljZSwgaW50ZXJmYWNlKTsKKyAgcmV0dXJuIDA7CisKK2RvbmU6CisgIGRldmljZS0+aW50ZXJmYWNlID0gZGVzY3JpcHRvcjsKKyAgcmV0dXJuIDE7Cit9CisKK3ZvaWQKK3VzYkNsb3NlRGV2aWNlIChVc2JEZXZpY2UgKmRldmljZSkgeworICBpZiAoZGV2aWNlLT5zZXJpYWwub3BlcmF0aW9ucykgeworICAgIGNvbnN0IFVzYlNlcmlhbE9wZXJhdGlvbnMgKnVzbyA9IGRldmljZS0+c2VyaWFsLm9wZXJhdGlvbnM7CisgICAgaWYgKHVzby0+ZGlzYWJsZUFkYXB0ZXIpIHVzby0+ZGlzYWJsZUFkYXB0ZXIoZGV2aWNlKTsKKyAgfQorCisgIHVzYkNsb3NlSW50ZXJmYWNlKGRldmljZSk7CisgIHVzYlJlbW92ZUVuZHBvaW50cyhkZXZpY2UsIDEpOworCisgIGlmIChkZXZpY2UtPmlucHV0RmlsdGVycykgeworICAgIGRlYWxsb2NhdGVRdWV1ZShkZXZpY2UtPmlucHV0RmlsdGVycyk7CisgICAgZGV2aWNlLT5pbnB1dEZpbHRlcnMgPSBOVUxMOworICB9CisKKyAgaWYgKGRldmljZS0+c2VyaWFsLmRhdGEpIHsKKyAgICBkZXZpY2UtPnNlcmlhbC5vcGVyYXRpb25zLT5kZXN0cm95RGF0YShkZXZpY2UtPnNlcmlhbC5kYXRhKTsKKyAgICBkZXZpY2UtPnNlcmlhbC5kYXRhID0gTlVMTDsKKyAgfQorCisgIGlmIChkZXZpY2UtPmV4dGVuc2lvbikgeworICAgIHVzYkRlYWxsb2NhdGVEZXZpY2VFeHRlbnNpb24oZGV2aWNlLT5leHRlbnNpb24pOworICAgIGRldmljZS0+ZXh0ZW5zaW9uID0gTlVMTDsKKyAgfQorCisgIHVzYkRlYWxsb2NhdGVDb25maWd1cmF0aW9uRGVzY3JpcHRvcihkZXZpY2UpOworICBmcmVlKGRldmljZSk7Cit9CisKK3N0YXRpYyBVc2JEZXZpY2UgKgordXNiT3BlbkRldmljZSAoVXNiRGV2aWNlRXh0ZW5zaW9uICpleHRlbnNpb24pIHsKKyAgVXNiRGV2aWNlICpkZXZpY2U7CisKKyAgaWYgKChkZXZpY2UgPSBtYWxsb2Moc2l6ZW9mKCpkZXZpY2UpKSkpIHsKKyAgICBtZW1zZXQoZGV2aWNlLCAwLCBzaXplb2YoKmRldmljZSkpOworICAgIGRldmljZS0+ZXh0ZW5zaW9uID0gZXh0ZW5zaW9uOworICAgIGRldmljZS0+c2VyaWFsLm9wZXJhdGlvbnMgPSBOVUxMOworICAgIGRldmljZS0+c2VyaWFsLmRhdGEgPSBOVUxMOworICAgIGRldmljZS0+cmVzZXREZXZpY2UgPSAwOworICAgIGRldmljZS0+ZGlzYWJsZUVuZHBvaW50UmVzZXQgPSAwOworCisgICAgaWYgKChkZXZpY2UtPmVuZHBvaW50cyA9IG5ld1F1ZXVlKHVzYkRlYWxsb2NhdGVFbmRwb2ludCwgTlVMTCkpKSB7CisgICAgICBpZiAoKGRldmljZS0+aW5wdXRGaWx0ZXJzID0gbmV3UXVldWUodXNiRGVhbGxvY2F0ZUlucHV0RmlsdGVyLCBOVUxMKSkpIHsKKyAgICAgICAgaWYgKHVzYlJlYWREZXZpY2VEZXNjcmlwdG9yKGRldmljZSkpIHsKKyAgICAgICAgICBpZiAoZGV2aWNlLT5kZXNjcmlwdG9yLmJEZXNjcmlwdG9yVHlwZSA9PSBVc2JEZXNjcmlwdG9yVHlwZV9EZXZpY2UpIHsKKyAgICAgICAgICAgIGlmIChkZXZpY2UtPmRlc2NyaXB0b3IuYkxlbmd0aCA9PSBVc2JEZXNjcmlwdG9yU2l6ZV9EZXZpY2UpIHsKKyAgICAgICAgICAgICAgcmV0dXJuIGRldmljZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBkZWFsbG9jYXRlUXVldWUoZGV2aWNlLT5pbnB1dEZpbHRlcnMpOworICAgICAgfQorCisgICAgICB1c2JSZW1vdmVFbmRwb2ludHMoZGV2aWNlLCAxKTsKKyAgICB9CisgICAgZnJlZShkZXZpY2UpOworICB9CisKKyAgbG9nU3lzdGVtRXJyb3IoIlVTQiBkZXZpY2Ugb3BlbiIpOworICByZXR1cm4gTlVMTDsKK30KKworVXNiRGV2aWNlICoKK3VzYlRlc3REZXZpY2UgKFVzYkRldmljZUV4dGVuc2lvbiAqZXh0ZW5zaW9uLCBVc2JEZXZpY2VDaG9vc2VyICpjaG9vc2VyLCBVc2JDaG9vc2VDaGFubmVsRGF0YSAqZGF0YSkgeworICBVc2JEZXZpY2UgKmRldmljZTsKKworICBpZiAoKGRldmljZSA9IHVzYk9wZW5EZXZpY2UoZXh0ZW5zaW9uKSkpIHsKKyAgICBsb2dNZXNzYWdlKExPR19DQVRFR09SWShVU0JfSU8pLAorICAgICAgInRlc3RpbmcgZGV2aWNlOiB2ZW5kb3I9JTA0WCBwcm9kdWN0PSUwNFgiLAorICAgICAgZ2V0TGl0dGxlRW5kaWFuMTYoZGV2aWNlLT5kZXNjcmlwdG9yLmlkVmVuZG9yKSwKKyAgICAgIGdldExpdHRsZUVuZGlhbjE2KGRldmljZS0+ZGVzY3JpcHRvci5pZFByb2R1Y3QpCisgICAgKTsKKworICAgIGlmIChjaG9vc2VyKGRldmljZSwgZGF0YSkpIHsKKyAgICAgIHVzYkxvZ1N0cmluZyhkZXZpY2UsIGRldmljZS0+ZGVzY3JpcHRvci5pTWFudWZhY3R1cmVyLCAiTWFudWZhY3R1cmVyIE5hbWUiKTsKKyAgICAgIHVzYkxvZ1N0cmluZyhkZXZpY2UsIGRldmljZS0+ZGVzY3JpcHRvci5pUHJvZHVjdCwgIlByb2R1Y3QgRGVzY3JpcHRpb24iKTsKKyAgICAgIHVzYkxvZ1N0cmluZyhkZXZpY2UsIGRldmljZS0+ZGVzY3JpcHRvci5pU2VyaWFsTnVtYmVyLCAiU2VyaWFsIE51bWJlciIpOworICAgICAgcmV0dXJuIGRldmljZTsKKyAgICB9CisKKyAgICBlcnJubyA9IEVOT0VOVDsKKyAgICBkZXZpY2UtPmV4dGVuc2lvbiA9IE5VTEw7CisgICAgdXNiQ2xvc2VEZXZpY2UoZGV2aWNlKTsKKyAgfQorCisgIHJldHVybiBOVUxMOworfQorCit2b2lkCit1c2JMb2dJbnB1dFByb2JsZW0gKFVzYkVuZHBvaW50ICplbmRwb2ludCwgY29uc3QgY2hhciAqcHJvYmxlbSkgeworICBsb2dNZXNzYWdlKExPR19XQVJOSU5HLCAiVVNCIGlucHV0OiAlczogRXB0OiUwMlgiLAorICAgICAgICAgICAgIHByb2JsZW0sIGVuZHBvaW50LT5kZXNjcmlwdG9yLT5iRW5kcG9pbnRBZGRyZXNzKTsKK30KKworc3RhdGljIHZvaWQKK3VzYkRlYWxsb2NhdGVQZW5kaW5nSW5wdXRSZXF1ZXN0ICh2b2lkICppdGVtLCB2b2lkICpkYXRhKSB7CisgIHZvaWQgKnJlcXVlc3QgPSBpdGVtOworICBVc2JFbmRwb2ludCAqZW5kcG9pbnQgPSBkYXRhOworICB1c2JDYW5jZWxSZXF1ZXN0KGVuZHBvaW50LT5kZXZpY2UsIHJlcXVlc3QpOworfQorCitzdGF0aWMgRWxlbWVudCAqCit1c2JBZGRQZW5kaW5nSW5wdXRSZXF1ZXN0IChVc2JFbmRwb2ludCAqZW5kcG9pbnQpIHsKKyAgdm9pZCAqcmVxdWVzdCA9IHVzYlN1Ym1pdFJlcXVlc3QoZW5kcG9pbnQtPmRldmljZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kcG9pbnQtPmRlc2NyaXB0b3ItPmJFbmRwb2ludEFkZHJlc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldExpdHRsZUVuZGlhbjE2KGVuZHBvaW50LT5kZXNjcmlwdG9yLT53TWF4UGFja2V0U2l6ZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZHBvaW50KTsKKworICBpZiAocmVxdWVzdCkgeworICAgIEVsZW1lbnQgKmVsZW1lbnQgPSBlbnF1ZXVlSXRlbShlbmRwb2ludC0+ZGlyZWN0aW9uLmlucHV0LnBlbmRpbmcucmVxdWVzdHMsIHJlcXVlc3QpOworCisgICAgaWYgKGVsZW1lbnQpIHJldHVybiBlbGVtZW50OworICAgIHVzYkNhbmNlbFJlcXVlc3QoZW5kcG9pbnQtPmRldmljZSwgcmVxdWVzdCk7CisgIH0KKworICByZXR1cm4gTlVMTDsKK30KKworc3RhdGljIHZvaWQKK3VzYkVuc3VyZVBlbmRpbmdJbnB1dFJlcXVlc3RzIChVc2JFbmRwb2ludCAqZW5kcG9pbnQsIGludCBjb3VudCkgeworICBpbnQgbGltaXQgPSBVU0JfSU5QVVRfSU5URVJSVVBUX1JFUVVFU1RTX01BWElNVU07CisgIGlmICgoY291bnQgPCAxKSB8fCAoY291bnQgPiBsaW1pdCkpIGNvdW50ID0gbGltaXQ7CisgIGVuZHBvaW50LT5kaXJlY3Rpb24uaW5wdXQucGVuZGluZy5kZWxheSA9IDA7CisKKyAgd2hpbGUgKGdldFF1ZXVlU2l6ZShlbmRwb2ludC0+ZGlyZWN0aW9uLmlucHV0LnBlbmRpbmcucmVxdWVzdHMpIDwgY291bnQpIHsKKyAgICBpZiAoIXVzYkFkZFBlbmRpbmdJbnB1dFJlcXVlc3QoZW5kcG9pbnQpKSB7CisgICAgICBicmVhazsKKyAgICB9CisgIH0KK30KKworQVNZTkNfQUxBUk1fQ0FMTEJBQ0sodXNiSGFuZGxlU2NoZWR1bGVQZW5kaW5nSW5wdXRSZXF1ZXN0KSB7CisgIFVzYkVuZHBvaW50ICplbmRwb2ludCA9IHBhcmFtZXRlcnMtPmRhdGE7CisKKyAgYXN5bmNEaXNjYXJkSGFuZGxlKGVuZHBvaW50LT5kaXJlY3Rpb24uaW5wdXQucGVuZGluZy5hbGFybSk7CisgIGVuZHBvaW50LT5kaXJlY3Rpb24uaW5wdXQucGVuZGluZy5hbGFybSA9IE5VTEw7CisKKyAgdXNiQWRkUGVuZGluZ0lucHV0UmVxdWVzdChlbmRwb2ludCk7Cit9CisKK3N0YXRpYyB2b2lkCit1c2JTY2hlZHVsZVBlbmRpbmdJbnB1dFJlcXVlc3QgKFVzYkVuZHBvaW50ICplbmRwb2ludCkgeworICBpZiAoIWVuZHBvaW50LT5kaXJlY3Rpb24uaW5wdXQucGVuZGluZy5hbGFybSkgeworICAgIGludCAqZGVsYXkgPSAmZW5kcG9pbnQtPmRpcmVjdGlvbi5pbnB1dC5wZW5kaW5nLmRlbGF5OworCisgICAgaWYgKCEqZGVsYXkpICpkZWxheSA9IDE7CisgICAgKmRlbGF5ID0gTUlOKCpkZWxheSwgVVNCX0lOUFVUX0lOVEVSUlVQVF9ERUxBWV9NQVhJTVVNKTsKKworICAgIGFzeW5jTmV3UmVsYXRpdmVBbGFybSgmZW5kcG9pbnQtPmRpcmVjdGlvbi5pbnB1dC5wZW5kaW5nLmFsYXJtLCAqZGVsYXksCisgICAgICAgICAgICAgICAgICAgICAgICAgIHVzYkhhbmRsZVNjaGVkdWxlUGVuZGluZ0lucHV0UmVxdWVzdCwgZW5kcG9pbnQpOworCisgICAgKmRlbGF5ICs9IDE7CisgIH0KK30KKworaW50Cit1c2JIYW5kbGVJbnB1dFJlc3BvbnNlIChVc2JFbmRwb2ludCAqZW5kcG9pbnQsIGNvbnN0IHZvaWQgKmJ1ZmZlciwgc2l6ZV90IGxlbmd0aCkgeworICBpbnQgcmVxdWVzdHNMZWZ0ID0gZ2V0UXVldWVTaXplKGVuZHBvaW50LT5kaXJlY3Rpb24uaW5wdXQucGVuZGluZy5yZXF1ZXN0cyk7CisKKyAgaWYgKGxlbmd0aCA+IDApIHsKKyAgICBpZiAoIXVzYkVucXVldWVJbnB1dChlbmRwb2ludCwgYnVmZmVyLCBsZW5ndGgpKSB7CisgICAgICB1c2JMb2dJbnB1dFByb2JsZW0oZW5kcG9pbnQsICJkYXRhIG5vdCBlbnF1ZXVlZCIpOworICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgdXNiRW5zdXJlUGVuZGluZ0lucHV0UmVxdWVzdHMoZW5kcG9pbnQsIHJlcXVlc3RzTGVmdCsyKTsKKyAgICByZXR1cm4gMTsKKyAgfQorCisgIGlmIChyZXF1ZXN0c0xlZnQgPT0gMCkgeworICAgIHVzYlNjaGVkdWxlUGVuZGluZ0lucHV0UmVxdWVzdChlbmRwb2ludCk7CisgIH0KKworICByZXR1cm4gMTsKK30KKwordm9pZAordXNiQmVnaW5JbnB1dCAoCisgIFVzYkRldmljZSAqZGV2aWNlLAorICB1bnNpZ25lZCBjaGFyIGVuZHBvaW50TnVtYmVyCispIHsKKyAgVXNiRW5kcG9pbnQgKmVuZHBvaW50ID0gdXNiR2V0SW5wdXRFbmRwb2ludChkZXZpY2UsIGVuZHBvaW50TnVtYmVyKTsKKworICBpZiAoZW5kcG9pbnQpIHsKKyAgICBpZiAoIWVuZHBvaW50LT5kaXJlY3Rpb24uaW5wdXQucGVuZGluZy5yZXF1ZXN0cykgeworICAgICAgaWYgKChlbmRwb2ludC0+ZGlyZWN0aW9uLmlucHV0LnBlbmRpbmcucmVxdWVzdHMgPSBuZXdRdWV1ZSh1c2JEZWFsbG9jYXRlUGVuZGluZ0lucHV0UmVxdWVzdCwgTlVMTCkpKSB7CisgICAgICAgIHNldFF1ZXVlRGF0YShlbmRwb2ludC0+ZGlyZWN0aW9uLmlucHV0LnBlbmRpbmcucmVxdWVzdHMsIGVuZHBvaW50KTsKKyAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoZW5kcG9pbnQtPmRpcmVjdGlvbi5pbnB1dC5wZW5kaW5nLnJlcXVlc3RzKSB7CisgICAgICB1c2JFbnN1cmVQZW5kaW5nSW5wdXRSZXF1ZXN0cyhlbmRwb2ludCwgMCk7CisgICAgfQorICB9Cit9CisKK3N0YXRpYyBpbnQKK3VzYkdldFBvbGxJbnRlcnZhbCAoVXNiRW5kcG9pbnQgKmVuZHBvaW50KSB7CisgIGludCBpbnRlcnZhbCA9IGVuZHBvaW50LT5kZXNjcmlwdG9yLT5iSW50ZXJ2YWw7CisKKyAgaWYgKGludGVydmFsID4gMCkgeworICAgIGlmIChnZXRMaXR0bGVFbmRpYW4xNihlbmRwb2ludC0+ZGV2aWNlLT5kZXNjcmlwdG9yLmJjZFVTQikgPj0gVXNiU3BlY2lmaWNhdGlvblZlcnNpb25fMl8wKSB7CisgICAgICBpbnRlcnZhbCA9ICgxIDw8IChpbnRlcnZhbCAtIDEpKSAvIDg7CisgICAgfQorICB9CisKKyAgcmV0dXJuIGludGVydmFsOworfQorCitpbnQKK3VzYkF3YWl0SW5wdXQgKAorICBVc2JEZXZpY2UgKmRldmljZSwKKyAgdW5zaWduZWQgY2hhciBlbmRwb2ludE51bWJlciwKKyAgaW50IHRpbWVvdXQKKykgeworICBVc2JFbmRwb2ludCAqZW5kcG9pbnQ7CisgIGludCByZXRyeUludGVydmFsOworCisgIGlmICghKGVuZHBvaW50ID0gdXNiR2V0SW5wdXRFbmRwb2ludChkZXZpY2UsIGVuZHBvaW50TnVtYmVyKSkpIHsKKyAgICByZXR1cm4gMDsKKyAgfQorCisgIGlmICh1c2JIYXZlSW5wdXRQaXBlKGVuZHBvaW50KSkgeworICAgIGlmICh1c2JIYXZlSW5wdXRFcnJvcihlbmRwb2ludCkpIHsKKyAgICAgIGVycm5vID0gZW5kcG9pbnQtPmRpcmVjdGlvbi5pbnB1dC5waXBlLmVycm9yOworICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgcmV0dXJuIGF3YWl0RmlsZUlucHV0KGVuZHBvaW50LT5kaXJlY3Rpb24uaW5wdXQucGlwZS5vdXRwdXQsIHRpbWVvdXQpOworICB9CisKKyAgaWYgKGVuZHBvaW50LT5kaXJlY3Rpb24uaW5wdXQuY29tcGxldGVkLnJlcXVlc3QpIHsKKyAgICByZXR1cm4gMTsKKyAgfQorCisgIGlmICghdGltZW91dCkgeworICAgIGVycm5vID0gRUFHQUlOOworICAgIHJldHVybiAwOworICB9CisKKyAgcmV0cnlJbnRlcnZhbCA9IHVzYkdldFBvbGxJbnRlcnZhbChlbmRwb2ludCk7CisgIHJldHJ5SW50ZXJ2YWwgPSBNQVgoVVNCX0lOUFVUX0FXQUlUX1JFVFJZX0lOVEVSVkFMX01JTklNVU0sIHJldHJ5SW50ZXJ2YWwpOworCisgIGlmICghKGVuZHBvaW50LT5kaXJlY3Rpb24uaW5wdXQucGVuZGluZy5yZXF1ZXN0cyAmJiBnZXRRdWV1ZVNpemUoZW5kcG9pbnQtPmRpcmVjdGlvbi5pbnB1dC5wZW5kaW5nLnJlcXVlc3RzKSkpIHsKKyAgICBpbnQgc2l6ZSA9IGdldExpdHRsZUVuZGlhbjE2KGVuZHBvaW50LT5kZXNjcmlwdG9yLT53TWF4UGFja2V0U2l6ZSk7CisgICAgdW5zaWduZWQgY2hhciAqYnVmZmVyID0gbWFsbG9jKHNpemUpOworCisgICAgaWYgKGJ1ZmZlcikgeworICAgICAgVGltZVBlcmlvZCBwZXJpb2Q7CisgICAgICBzdGFydFRpbWVQZXJpb2QoJnBlcmlvZCwgdGltZW91dCk7CisKKyAgICAgIHdoaWxlICgxKSB7CisgICAgICAgIHNzaXplX3QgY291bnQgPSB1c2JSZWFkRW5kcG9pbnQoZGV2aWNlLCBlbmRwb2ludE51bWJlciwgYnVmZmVyLCBzaXplLCAyMCk7CisKKyAgICAgICAgaWYgKGNvdW50ICE9IC0xKSB7CisgICAgICAgICAgaWYgKGNvdW50KSB7CisgICAgICAgICAgICBlbmRwb2ludC0+ZGlyZWN0aW9uLmlucHV0LmNvbXBsZXRlZC5yZXF1ZXN0ID0gYnVmZmVyOworICAgICAgICAgICAgZW5kcG9pbnQtPmRpcmVjdGlvbi5pbnB1dC5jb21wbGV0ZWQuYnVmZmVyID0gYnVmZmVyOworICAgICAgICAgICAgZW5kcG9pbnQtPmRpcmVjdGlvbi5pbnB1dC5jb21wbGV0ZWQubGVuZ3RoID0gY291bnQ7CisgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgICB9CisKKyAgICAgICAgICBlcnJubyA9IEVBR0FJTjsKKyAgICAgICAgfQorCisjaWZkZWYgRVRJTUVET1VUCisgICAgICAgIGlmIChlcnJubyA9PSBFVElNRURPVVQpIGVycm5vID0gRUFHQUlOOworI2VuZGlmIC8qIEVUSU1FRE9VVCAqLworCisgICAgICAgIGlmIChlcnJubyAhPSBFQUdBSU4pIGJyZWFrOworICAgICAgICBpZiAoYWZ0ZXJUaW1lUGVyaW9kKCZwZXJpb2QsIE5VTEwpKSBicmVhazsKKyAgICAgICAgYXN5bmNXYWl0KHJldHJ5SW50ZXJ2YWwpOworICAgICAgfQorCisgICAgICBmcmVlKGJ1ZmZlcik7CisgICAgfSBlbHNlIHsKKyAgICAgIGxvZ01hbGxvY0Vycm9yKCk7CisgICAgfQorCisgICAgcmV0dXJuIDA7CisgIH0KKworICB7CisgICAgVGltZVBlcmlvZCBwZXJpb2Q7CisgICAgc3RhcnRUaW1lUGVyaW9kKCZwZXJpb2QsIHRpbWVvdXQpOworCisgICAgd2hpbGUgKDEpIHsKKyAgICAgIFVzYlJlc3BvbnNlIHJlc3BvbnNlOworICAgICAgdm9pZCAqcmVxdWVzdDsKKworICAgICAgd2hpbGUgKCEocmVxdWVzdCA9IHVzYlJlYXBSZXNwb25zZShkZXZpY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZHBvaW50TnVtYmVyIHwgVXNiRW5kcG9pbnREaXJlY3Rpb25fSW5wdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZyZXNwb25zZSwgMCkpKSB7CisgICAgICAgIGlmIChlcnJubyAhPSBFQUdBSU4pIHJldHVybiAwOworICAgICAgICBpZiAoYWZ0ZXJUaW1lUGVyaW9kKCZwZXJpb2QsIE5VTEwpKSByZXR1cm4gMDsKKyAgICAgICAgYXN5bmNXYWl0KHJldHJ5SW50ZXJ2YWwpOworICAgICAgfQorCisgICAgICB1c2JBZGRQZW5kaW5nSW5wdXRSZXF1ZXN0KGVuZHBvaW50KTsKKyAgICAgIGRlbGV0ZUl0ZW0oZW5kcG9pbnQtPmRpcmVjdGlvbi5pbnB1dC5wZW5kaW5nLnJlcXVlc3RzLCByZXF1ZXN0KTsKKworICAgICAgaWYgKHJlc3BvbnNlLmNvdW50ID4gMCkgeworICAgICAgICBlbmRwb2ludC0+ZGlyZWN0aW9uLmlucHV0LmNvbXBsZXRlZC5yZXF1ZXN0ID0gcmVxdWVzdDsKKyAgICAgICAgZW5kcG9pbnQtPmRpcmVjdGlvbi5pbnB1dC5jb21wbGV0ZWQuYnVmZmVyID0gcmVzcG9uc2UuYnVmZmVyOworICAgICAgICBlbmRwb2ludC0+ZGlyZWN0aW9uLmlucHV0LmNvbXBsZXRlZC5sZW5ndGggPSByZXNwb25zZS5jb3VudDsKKyAgICAgICAgcmV0dXJuIDE7CisgICAgICB9CisKKyAgICAgIGZyZWUocmVxdWVzdCk7CisgICAgfQorICB9Cit9CisKK3NzaXplX3QKK3VzYlJlYWREYXRhICgKKyAgVXNiRGV2aWNlICpkZXZpY2UsCisgIHVuc2lnbmVkIGNoYXIgZW5kcG9pbnROdW1iZXIsCisgIHZvaWQgKmJ1ZmZlciwKKyAgc2l6ZV90IGxlbmd0aCwKKyAgaW50IGluaXRpYWxUaW1lb3V0LAorICBpbnQgc3Vic2VxdWVudFRpbWVvdXQKKykgeworICBVc2JFbmRwb2ludCAqZW5kcG9pbnQgPSB1c2JHZXRJbnB1dEVuZHBvaW50KGRldmljZSwgZW5kcG9pbnROdW1iZXIpOworCisgIGlmIChlbmRwb2ludCkgeworICAgIHVuc2lnbmVkIGNoYXIgKmJ5dGVzID0gYnVmZmVyOworICAgIHVuc2lnbmVkIGNoYXIgKnRhcmdldCA9IGJ5dGVzOworCisgICAgaWYgKHVzYkhhdmVJbnB1dFBpcGUoZW5kcG9pbnQpKSB7CisgICAgICBpZiAodXNiSGF2ZUlucHV0RXJyb3IoZW5kcG9pbnQpKSB7CisgICAgICAgIGVycm5vID0gZW5kcG9pbnQtPmRpcmVjdGlvbi5pbnB1dC5waXBlLmVycm9yOworICAgICAgICBlbmRwb2ludC0+ZGlyZWN0aW9uLmlucHV0LnBpcGUuZXJyb3IgPSBFQUdBSU47CisgICAgICAgIHJldHVybiAtMTsKKyAgICAgIH0KKworICAgICAgcmV0dXJuIHJlYWRGaWxlKGVuZHBvaW50LT5kaXJlY3Rpb24uaW5wdXQucGlwZS5vdXRwdXQsIGJ1ZmZlciwgbGVuZ3RoLCBpbml0aWFsVGltZW91dCwgc3Vic2VxdWVudFRpbWVvdXQpOworICAgIH0KKworICAgIHdoaWxlIChsZW5ndGggPiAwKSB7CisgICAgICBpbnQgdGltZW91dCA9ICh0YXJnZXQgIT0gYnl0ZXMpPyBzdWJzZXF1ZW50VGltZW91dDoKKyAgICAgICAgICAgICAgICAgICAgaW5pdGlhbFRpbWVvdXQ/IGluaXRpYWxUaW1lb3V0OgorICAgICAgICAgICAgICAgICAgICBVU0JfSU5QVVRfUkVBRF9JTklUSUFMX1RJTUVPVVRfREVGQVVMVDsKKworICAgICAgaWYgKCF1c2JBd2FpdElucHV0KGRldmljZSwgZW5kcG9pbnROdW1iZXIsIHRpbWVvdXQpKSB7CisgICAgICAgIGlmIChlcnJubyA9PSBFQUdBSU4pIGJyZWFrOworICAgICAgICByZXR1cm4gLTE7CisgICAgICB9CisKKyAgICAgIHsKKyAgICAgICAgc2l6ZV90IGNvdW50ID0gZW5kcG9pbnQtPmRpcmVjdGlvbi5pbnB1dC5jb21wbGV0ZWQubGVuZ3RoOworCisgICAgICAgIGlmIChsZW5ndGggPCBjb3VudCkgY291bnQgPSBsZW5ndGg7CisgICAgICAgIG1lbWNweSh0YXJnZXQsIGVuZHBvaW50LT5kaXJlY3Rpb24uaW5wdXQuY29tcGxldGVkLmJ1ZmZlciwgY291bnQpOworCisgICAgICAgIGlmICgoZW5kcG9pbnQtPmRpcmVjdGlvbi5pbnB1dC5jb21wbGV0ZWQubGVuZ3RoIC09IGNvdW50KSkgeworICAgICAgICAgIGVuZHBvaW50LT5kaXJlY3Rpb24uaW5wdXQuY29tcGxldGVkLmJ1ZmZlciArPSBjb3VudDsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICBlbmRwb2ludC0+ZGlyZWN0aW9uLmlucHV0LmNvbXBsZXRlZC5idWZmZXIgPSBOVUxMOworICAgICAgICAgIGZyZWUoZW5kcG9pbnQtPmRpcmVjdGlvbi5pbnB1dC5jb21wbGV0ZWQucmVxdWVzdCk7CisgICAgICAgICAgZW5kcG9pbnQtPmRpcmVjdGlvbi5pbnB1dC5jb21wbGV0ZWQucmVxdWVzdCA9IE5VTEw7CisgICAgICAgIH0KKworICAgICAgICB0YXJnZXQgKz0gY291bnQ7CisgICAgICAgIGxlbmd0aCAtPSBjb3VudDsKKyAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gdGFyZ2V0IC0gYnl0ZXM7CisgIH0KKworICByZXR1cm4gLTE7Cit9CisKK3NzaXplX3QKK3VzYldyaXRlRGF0YSAoCisgIFVzYkRldmljZSAqZGV2aWNlLAorICB1bnNpZ25lZCBjaGFyIGVuZHBvaW50TnVtYmVyLAorICBjb25zdCB2b2lkICpkYXRhLAorICBzaXplX3QgbGVuZ3RoLAorICBpbnQgdGltZW91dAorKSB7CisgIFVzYkVuZHBvaW50ICplbmRwb2ludCA9IHVzYkdldE91dHB1dEVuZHBvaW50KGRldmljZSwgZW5kcG9pbnROdW1iZXIpOworCisgIGlmIChlbmRwb2ludCkgeworICAgIGNvbnN0IHVpbnQxNl90IHNpemUgPSBnZXRMaXR0bGVFbmRpYW4xNihlbmRwb2ludC0+ZGVzY3JpcHRvci0+d01heFBhY2tldFNpemUpOworICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmZyb20gPSBkYXRhOworICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmNvbnN0IGVuZCA9IGZyb20gKyBsZW5ndGg7CisKKyAgICB3aGlsZSAoZnJvbSA8IGVuZCkgeworICAgICAgc2l6ZV90IGNvdW50ID0gTUlOKChlbmQgLSBmcm9tKSwgc2l6ZSk7CisgICAgICBzc2l6ZV90IHJlc3VsdCA9IHVzYldyaXRlRW5kcG9pbnQoZGV2aWNlLCBlbmRwb2ludE51bWJlciwgZnJvbSwgY291bnQsIHRpbWVvdXQpOworCisgICAgICBpZiAocmVzdWx0ID09IC0xKSByZXR1cm4gcmVzdWx0OworICAgICAgZnJvbSArPSByZXN1bHQ7CisgICAgfQorCisgICAgcmV0dXJuIGxlbmd0aDsKKyAgfQorCisgIHJldHVybiAtMTsKK30KKworc3RhdGljIGludAordXNiUHJlcGFyZUNoYW5uZWwgKFVzYkNoYW5uZWwgKmNoYW5uZWwpIHsKKyAgY29uc3QgVXNiQ2hhbm5lbERlZmluaXRpb24gKmRlZmluaXRpb24gPSBjaGFubmVsLT5kZWZpbml0aW9uOworICBVc2JEZXZpY2UgKmRldmljZSA9IGNoYW5uZWwtPmRldmljZTsKKworICBkZXZpY2UtPnJlc2V0RGV2aWNlID0gZGVmaW5pdGlvbi0+cmVzZXREZXZpY2U7CisgIGRldmljZS0+ZGlzYWJsZUVuZHBvaW50UmVzZXQgPSBkZWZpbml0aW9uLT5kaXNhYmxlRW5kcG9pbnRSZXNldDsKKworICBpZiAoZGVmaW5pdGlvbi0+ZGlzYWJsZUF1dG9zdXNwZW5kKSB7CisgICAgbG9nTWVzc2FnZShMT0dfQ0FURUdPUlkoVVNCX0lPKSwgImRpc2FibGluZyBhdXRvc3VzcGVuZCIpOworICAgIHVzYkRpc2FibGVBdXRvc3VzcGVuZChkZXZpY2UpOworICB9CisKKyAgaWYgKGRldmljZS0+cmVzZXREZXZpY2UpIHsKKyAgICB1c2JSZXNldERldmljZShkZXZpY2UpOworICB9CisKKyAgaWYgKHVzYkNvbmZpZ3VyZURldmljZShkZXZpY2UsIGRlZmluaXRpb24tPmNvbmZpZ3VyYXRpb24pKSB7CisgICAgaWYgKHVzYk9wZW5JbnRlcmZhY2UoZGV2aWNlLCBkZWZpbml0aW9uLT5pbnRlcmZhY2UsIGRlZmluaXRpb24tPmFsdGVybmF0aXZlKSkgeworICAgICAgaW50IG9rID0gMTsKKworICAgICAgaWYgKG9rKSB7CisgICAgICAgIGlmICghdXNiU2V0U2VyaWFsT3BlcmF0aW9ucyhkZXZpY2UpKSB7CisgICAgICAgICAgb2sgPSAwOworICAgICAgICB9IGVsc2UgaWYgKGRldmljZS0+c2VyaWFsLm9wZXJhdGlvbnMpIHsKKyAgICAgICAgICBsb2dNZXNzYWdlKExPR19DQVRFR09SWShVU0JfSU8pLCAic2VyaWFsIGFkYXB0ZXI6ICVzIiwKKyAgICAgICAgICAgICAgICAgICAgIGRldmljZS0+c2VyaWFsLm9wZXJhdGlvbnMtPm5hbWUpOworICAgICAgICB9CisgICAgICB9CisKKyAgICAgIGlmIChvaykgeworICAgICAgICBpZiAoZGV2aWNlLT5zZXJpYWwub3BlcmF0aW9ucykgeworICAgICAgICAgIGlmIChkZXZpY2UtPnNlcmlhbC5vcGVyYXRpb25zLT5lbmFibGVBZGFwdGVyKSB7CisgICAgICAgICAgICBpZiAoIWRldmljZS0+c2VyaWFsLm9wZXJhdGlvbnMtPmVuYWJsZUFkYXB0ZXIoZGV2aWNlKSkgeworICAgICAgICAgICAgICBvayA9IDA7CisgICAgICAgICAgICB9CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICB9CisKKyAgICAgIGlmIChvaykgeworICAgICAgICBpZiAoZGVmaW5pdGlvbi0+c2VyaWFsKSB7CisgICAgICAgICAgaWYgKCF1c2JTZXRTZXJpYWxQYXJhbWV0ZXJzKGRldmljZSwgZGVmaW5pdGlvbi0+c2VyaWFsKSkgeworICAgICAgICAgICAgb2sgPSAwOworICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgfQorCisgICAgICBpZiAob2spIHsKKyAgICAgICAgaWYgKGRlZmluaXRpb24tPmlucHV0RW5kcG9pbnQpIHsKKyAgICAgICAgICBVc2JFbmRwb2ludCAqZW5kcG9pbnQgPSB1c2JHZXRJbnB1dEVuZHBvaW50KGRldmljZSwgZGVmaW5pdGlvbi0+aW5wdXRFbmRwb2ludCk7CisKKyAgICAgICAgICBpZiAoIWVuZHBvaW50KSB7CisgICAgICAgICAgICBvayA9IDA7CisgICAgICAgICAgfSBlbHNlIGlmICgoVVNCX0VORFBPSU5UX1RSQU5TRkVSKGVuZHBvaW50LT5kZXNjcmlwdG9yKSA9PSBVc2JFbmRwb2ludFRyYW5zZmVyX0ludGVycnVwdCkgfHwKKyAgICAgICAgICAgICAgICAgICAgIHVzYkhhdmVJbnB1dFBpcGUoZW5kcG9pbnQpKSB7CisgICAgICAgICAgICB1c2JCZWdpbklucHV0KGRldmljZSwgZGVmaW5pdGlvbi0+aW5wdXRFbmRwb2ludCk7CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICB9CisKKyAgICAgIGlmIChvaykgeworICAgICAgICBpZiAoZGVmaW5pdGlvbi0+b3V0cHV0RW5kcG9pbnQpIHsKKyAgICAgICAgICBVc2JFbmRwb2ludCAqZW5kcG9pbnQgPSB1c2JHZXRPdXRwdXRFbmRwb2ludChkZXZpY2UsIGRlZmluaXRpb24tPm91dHB1dEVuZHBvaW50KTsKKworICAgICAgICAgIGlmICghZW5kcG9pbnQpIHsKKyAgICAgICAgICAgIG9rID0gMDsKKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgIH0KKworICAgICAgaWYgKG9rKSByZXR1cm4gMTsKKyAgICAgIHVzYkNsb3NlSW50ZXJmYWNlKGRldmljZSk7CisgICAgfQorICB9CisKKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK3VzYlZlcmlmeUludGVyZmFjZSAoVXNiRGV2aWNlICpkZXZpY2UsIGNvbnN0IFVzYkNoYW5uZWxEZWZpbml0aW9uICpkZWZpbml0aW9uKSB7CisgIGNvbnN0IFVzYkludGVyZmFjZURlc2NyaXB0b3IgKmludGVyZmFjZSA9IHVzYkludGVyZmFjZURlc2NyaXB0b3IoZGV2aWNlLCBkZWZpbml0aW9uLT5pbnRlcmZhY2UsIGRlZmluaXRpb24tPmFsdGVybmF0aXZlKTsKKyAgaWYgKCFpbnRlcmZhY2UpIHJldHVybiAwOworCisgIEJJVE1BU0soZW5kcG9pbnRzLCAwWDEwMCwgY2hhcik7CisgIEJJVE1BU0tfWkVSTyhlbmRwb2ludHMpOworCisgIHsKKyAgICBjb25zdCBVc2JEZXNjcmlwdG9yICpkZXNjcmlwdG9yID0gKGNvbnN0IFVzYkRlc2NyaXB0b3IgKilpbnRlcmZhY2U7CisKKyAgICB3aGlsZSAodXNiTmV4dERlc2NyaXB0b3IoZGV2aWNlLCAmZGVzY3JpcHRvcikpIHsKKyAgICAgIHVpbnQ4X3QgdHlwZSA9IGRlc2NyaXB0b3ItPmhlYWRlci5iRGVzY3JpcHRvclR5cGU7CisgICAgICBpZiAodHlwZSA9PSBVc2JEZXNjcmlwdG9yVHlwZV9JbnRlcmZhY2UpIGJyZWFrOworICAgICAgaWYgKHR5cGUgIT0gVXNiRGVzY3JpcHRvclR5cGVfRW5kcG9pbnQpIGNvbnRpbnVlOworICAgICAgQklUTUFTS19TRVQoZW5kcG9pbnRzLCBkZXNjcmlwdG9yLT5lbmRwb2ludC5iRW5kcG9pbnRBZGRyZXNzKTsKKyAgICB9CisgIH0KKworICBpZiAoZGVmaW5pdGlvbi0+aW5wdXRFbmRwb2ludCkgeworICAgIGlmICghQklUTUFTS19URVNUKGVuZHBvaW50cywgKGRlZmluaXRpb24tPmlucHV0RW5kcG9pbnQgfCBVc2JFbmRwb2ludERpcmVjdGlvbl9JbnB1dCkpKSB7CisgICAgICByZXR1cm4gMDsKKyAgICB9CisgIH0KKworICBpZiAoZGVmaW5pdGlvbi0+b3V0cHV0RW5kcG9pbnQpIHsKKyAgICBpZiAoIUJJVE1BU0tfVEVTVChlbmRwb2ludHMsIChkZWZpbml0aW9uLT5vdXRwdXRFbmRwb2ludCB8IFVzYkVuZHBvaW50RGlyZWN0aW9uX091dHB1dCkpKSB7CisgICAgICByZXR1cm4gMDsKKyAgICB9CisgIH0KKworICByZXR1cm4gMTsKK30KKworc3RydWN0IFVzYkNob29zZUNoYW5uZWxEYXRhU3RydWN0IHsKKyAgY29uc3QgVXNiQ2hhbm5lbERlZmluaXRpb24gKmRlZmluaXRpb247CisKKyAgY29uc3QgY2hhciAqc2VyaWFsTnVtYmVyOworICB1aW50MTZfdCB2ZW5kb3JJZGVudGlmaWVyOworICB1aW50MTZfdCBwcm9kdWN0SWRlbnRpZmllcjsKKyAgdW5zaWduZWQgZ2VuZXJpY0RldmljZXM6MTsKK307CisKK3N0YXRpYyBpbnQKK3VzYkNob29zZUNoYW5uZWwgKFVzYkRldmljZSAqZGV2aWNlLCBVc2JDaG9vc2VDaGFubmVsRGF0YSAqZGF0YSkgeworICBjb25zdCBVc2JEZXZpY2VEZXNjcmlwdG9yICpkZXNjcmlwdG9yID0gJmRldmljZS0+ZGVzY3JpcHRvcjsKKyAgbG9nQnl0ZXMoTE9HX0NBVEVHT1JZKFVTQl9JTyksICJkZXZpY2UgZGVzY3JpcHRvciIsIGRlc2NyaXB0b3IsIHNpemVvZigqZGVzY3JpcHRvcikpOworCisgIGlmICghKGRlc2NyaXB0b3ItPmlNYW51ZmFjdHVyZXIgfHwgZGVzY3JpcHRvci0+aVByb2R1Y3QgfHwgZGVzY3JpcHRvci0+aVNlcmlhbE51bWJlcikpIHsKKyAgICBVc2JEZXZpY2VEZXNjcmlwdG9yIGFjdHVhbERlc2NyaXB0b3I7CisgICAgc3NpemVfdCByZXN1bHQgPSB1c2JHZXREZXZpY2VEZXNjcmlwdG9yKGRldmljZSwgJmFjdHVhbERlc2NyaXB0b3IpOworCisgICAgaWYgKHJlc3VsdCA9PSBVc2JEZXNjcmlwdG9yU2l6ZV9EZXZpY2UpIHsKKyAgICAgIGRldmljZS0+ZGVzY3JpcHRvciA9IGFjdHVhbERlc2NyaXB0b3I7CisKKyAgICAgIGxvZ0J5dGVzKExPR19DQVRFR09SWShVU0JfSU8pLAorICAgICAgICAidXNpbmcgYWN0dWFsIGRldmljZSBkZXNjcmlwdG9yIiwKKyAgICAgICAgZGVzY3JpcHRvciwgc2l6ZW9mKCpkZXNjcmlwdG9yKQorICAgICAgKTsKKyAgICB9CisgIH0KKworICB7CisgICAgdWludDE2X3QgdmVuZG9yID0gZ2V0TGl0dGxlRW5kaWFuMTYoZGVzY3JpcHRvci0+aWRWZW5kb3IpOworICAgIHVpbnQxNl90IHByb2R1Y3QgPSBnZXRMaXR0bGVFbmRpYW4xNihkZXNjcmlwdG9yLT5pZFByb2R1Y3QpOworCisgICAgY29uc3QgY2hhciAqY29uc3QgKmRyaXZlcnMgPSB1c2JHZXREcml2ZXJDb2Rlcyh2ZW5kb3IsIHByb2R1Y3QpOworICAgIGlmICghZHJpdmVycykgcmV0dXJuIDA7CisgIH0KKworICBmb3IgKGNvbnN0IFVzYkNoYW5uZWxEZWZpbml0aW9uICpkZWZpbml0aW9uID0gZGF0YS0+ZGVmaW5pdGlvbjsKKyAgICAgICBkZWZpbml0aW9uLT52ZW5kb3I7IGRlZmluaXRpb24rPTEpIHsKKyAgICBpZiAoZGVmaW5pdGlvbi0+dmVyc2lvbiAmJiAoZGVmaW5pdGlvbi0+dmVyc2lvbiAhPSBnZXRMaXR0bGVFbmRpYW4xNihkZXNjcmlwdG9yLT5iY2RVU0IpKSkgY29udGludWU7CisgICAgaWYgKCFVU0JfSVNfUFJPRFVDVChkZXNjcmlwdG9yLCBkZWZpbml0aW9uLT52ZW5kb3IsIGRlZmluaXRpb24tPnByb2R1Y3QpKSBjb250aW51ZTsKKworICAgIGlmICghZGF0YS0+Z2VuZXJpY0RldmljZXMpIHsKKyAgICAgIGNvbnN0IFVzYlNlcmlhbEFkYXB0ZXIgKmFkYXB0ZXIgPSB1c2JGaW5kU2VyaWFsQWRhcHRlcihkZXNjcmlwdG9yKTsKKyAgICAgIGlmIChhZGFwdGVyICYmIGFkYXB0ZXItPmdlbmVyaWMpIGNvbnRpbnVlOworICAgIH0KKworICAgIGlmICghdXNiVmVyaWZ5VmVuZG9ySWRlbnRpZmllcihkZXNjcmlwdG9yLCBkYXRhLT52ZW5kb3JJZGVudGlmaWVyKSkgY29udGludWU7CisgICAgaWYgKCF1c2JWZXJpZnlQcm9kdWN0SWRlbnRpZmllcihkZXNjcmlwdG9yLCBkYXRhLT5wcm9kdWN0SWRlbnRpZmllcikpIGNvbnRpbnVlOworICAgIGlmICghdXNiVmVyaWZ5U2VyaWFsTnVtYmVyKGRldmljZSwgZGF0YS0+c2VyaWFsTnVtYmVyKSkgY29udGludWU7CisKKyAgICBpZiAoIXVzYlZlcmlmeVN0cmluZ3MoZGV2aWNlLCBkZWZpbml0aW9uLT5tYW51ZmFjdHVyZXJzLCBkZXNjcmlwdG9yLT5pTWFudWZhY3R1cmVyKSkgY29udGludWU7CisgICAgaWYgKCF1c2JWZXJpZnlTdHJpbmdzKGRldmljZSwgZGVmaW5pdGlvbi0+cHJvZHVjdHMsIGRlc2NyaXB0b3ItPmlQcm9kdWN0KSkgY29udGludWU7CisKKyAgICBpZiAoZGVmaW5pdGlvbi0+dmVyaWZ5SW50ZXJmYWNlKSB7CisgICAgICBpZiAoIXVzYkNvbmZpZ3VyZURldmljZShkZXZpY2UsIGRlZmluaXRpb24tPmNvbmZpZ3VyYXRpb24pKSBjb250aW51ZTsKKyAgICAgIGlmICghdXNiVmVyaWZ5SW50ZXJmYWNlKGRldmljZSwgZGVmaW5pdGlvbikpIGNvbnRpbnVlOworICAgIH0KKworICAgIGRhdGEtPmRlZmluaXRpb24gPSBkZWZpbml0aW9uOworICAgIHJldHVybiAxOworICB9CisKKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBVc2JDaGFubmVsICoKK3VzYk5ld0NoYW5uZWwgKFVzYkNob29zZUNoYW5uZWxEYXRhICpkYXRhKSB7CisgIFVzYkNoYW5uZWwgKmNoYW5uZWw7CisKKyAgaWYgKChjaGFubmVsID0gbWFsbG9jKHNpemVvZigqY2hhbm5lbCkpKSkgeworICAgIG1lbXNldChjaGFubmVsLCAwLCBzaXplb2YoKmNoYW5uZWwpKTsKKworICAgIGlmICgoY2hhbm5lbC0+ZGV2aWNlID0gdXNiRmluZERldmljZSh1c2JDaG9vc2VDaGFubmVsLCBkYXRhKSkpIHsKKyAgICAgIGNoYW5uZWwtPmRlZmluaXRpb24gPSBkYXRhLT5kZWZpbml0aW9uOworICAgICAgcmV0dXJuIGNoYW5uZWw7CisgICAgfQorCisgICAgZnJlZShjaGFubmVsKTsKKyAgfSBlbHNlIHsKKyAgICBsb2dNYWxsb2NFcnJvcigpOworICB9CisKKyAgcmV0dXJuIE5VTEw7Cit9CisKK3R5cGVkZWYgZW51bSB7CisgIFVTQl9QQVJNX1NFUklBTF9OVU1CRVIsCisgIFVTQl9QQVJNX1ZFTkRPUl9JREVOVElGSUVSLAorICBVU0JfUEFSTV9QUk9EVUNUX0lERU5USUZJRVIsCisgIFVTQl9QQVJNX0dFTkVSSUNfREVWSUNFUworfSBVc2JEZXZpY2VQYXJhbWV0ZXI7CisKK3N0YXRpYyBjb25zdCBjaGFyICpjb25zdCB1c2JEZXZpY2VQYXJhbWV0ZXJOYW1lc1tdID0geworICAic2VyaWFsTnVtYmVyIiwKKyAgInZlbmRvcklkZW50aWZpZXIiLAorICAicHJvZHVjdElkZW50aWZpZXIiLAorICAiZ2VuZXJpY0RldmljZXMiLAorICBOVUxMCit9OworCitzdGF0aWMgY2hhciAqKgordXNiR2V0RGV2aWNlUGFyYW1ldGVycyAoY29uc3QgY2hhciAqaWRlbnRpZmllcikgeworICBpZiAoIWlkZW50aWZpZXIpIGlkZW50aWZpZXIgPSAiIjsKKyAgcmV0dXJuIGdldERldmljZVBhcmFtZXRlcnModXNiRGV2aWNlUGFyYW1ldGVyTmFtZXMsIGlkZW50aWZpZXIpOworfQorCitVc2JDaGFubmVsICoKK3VzYk9wZW5DaGFubmVsIChjb25zdCBVc2JDaGFubmVsRGVmaW5pdGlvbiAqZGVmaW5pdGlvbnMsIGNvbnN0IGNoYXIgKmlkZW50aWZpZXIpIHsKKyAgVXNiQ2hhbm5lbCAqY2hhbm5lbCA9IE5VTEw7CisgIGNoYXIgKipwYXJhbWV0ZXJzID0gdXNiR2V0RGV2aWNlUGFyYW1ldGVycyhpZGVudGlmaWVyKTsKKworICBpZiAocGFyYW1ldGVycykgeworICAgIGludCBvayA9IDE7CisKKyAgICBVc2JDaG9vc2VDaGFubmVsRGF0YSBjaG9vc2UgPSB7CisgICAgICAuZGVmaW5pdGlvbiA9IGRlZmluaXRpb25zLAorICAgICAgLnNlcmlhbE51bWJlciA9IHBhcmFtZXRlcnNbVVNCX1BBUk1fU0VSSUFMX05VTUJFUl0KKyAgICB9OworCisgICAgaWYgKCF1c2JQYXJzZVZlbmRvcklkZW50aWZpZXIoJmNob29zZS52ZW5kb3JJZGVudGlmaWVyLCBwYXJhbWV0ZXJzW1VTQl9QQVJNX1ZFTkRPUl9JREVOVElGSUVSXSkpIG9rID0gMDsKKyAgICBpZiAoIXVzYlBhcnNlUHJvZHVjdElkZW50aWZpZXIoJmNob29zZS5wcm9kdWN0SWRlbnRpZmllciwgcGFyYW1ldGVyc1tVU0JfUEFSTV9QUk9EVUNUX0lERU5USUZJRVJdKSkgb2sgPSAwOworCisgICAgeworICAgICAgY29uc3QgY2hhciAqcGFyYW1ldGVyID0gcGFyYW1ldGVyc1tVU0JfUEFSTV9HRU5FUklDX0RFVklDRVNdOworCisgICAgICBpZiAoIShwYXJhbWV0ZXIgJiYgKnBhcmFtZXRlcikpIHsKKyAgICAgICAgY2hvb3NlLmdlbmVyaWNEZXZpY2VzID0gMTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIHVuc2lnbmVkIGludCBmbGFnOworCisgICAgICAgIGlmICh2YWxpZGF0ZVllc05vKCZmbGFnLCBwYXJhbWV0ZXIpKSB7CisgICAgICAgICAgY2hvb3NlLmdlbmVyaWNEZXZpY2VzID0gZmxhZzsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICBsb2dNZXNzYWdlKExPR19XQVJOSU5HLCAiaW52YWxpZCBnZW5lcmljIGRldmljZXMgb3B0aW9uOiAlcyIsIHBhcmFtZXRlcik7CisgICAgICAgICAgb2sgPSAwOworICAgICAgICB9CisgICAgICB9CisgICAgfQorCisgICAgaWYgKG9rKSB7CisgICAgICBpZiAoIShjaGFubmVsID0gdXNiTmV3Q2hhbm5lbCgmY2hvb3NlKSkpIHsKKyAgICAgICAgbG9nTWVzc2FnZShMT0dfQ0FURUdPUlkoVVNCX0lPKSwgImRldmljZSBub3QgZm91bmQlcyVzIiwKKyAgICAgICAgICAgICAgICAgICAoKmlkZW50aWZpZXI/ICI6ICI6ICIiKSwgaWRlbnRpZmllcik7CisgICAgICB9CisgICAgfQorCisgICAgZGVhbGxvY2F0ZVN0cmluZ3MocGFyYW1ldGVycyk7CisgIH0KKworICBpZiAoY2hhbm5lbCkgeworICAgIGlmICh1c2JQcmVwYXJlQ2hhbm5lbChjaGFubmVsKSkgeworICAgICAgcmV0dXJuIGNoYW5uZWw7CisgICAgfQorCisgICAgdXNiQ2xvc2VDaGFubmVsKGNoYW5uZWwpOworICB9CisKKyAgcmV0dXJuIE5VTEw7Cit9CisKK3ZvaWQKK3VzYkNsb3NlQ2hhbm5lbCAoVXNiQ2hhbm5lbCAqY2hhbm5lbCkgeworICB1c2JDbG9zZURldmljZShjaGFubmVsLT5kZXZpY2UpOworICBmcmVlKGNoYW5uZWwpOworfQorCitjb25zdCBjaGFyICoKK3VzYk1ha2VDaGFubmVsSWRlbnRpZmllciAoVXNiQ2hhbm5lbCAqY2hhbm5lbCwgY2hhciAqYnVmZmVyLCBzaXplX3Qgc2l6ZSkgeworICBVc2JEZXZpY2UgKmRldmljZSA9IGNoYW5uZWwtPmRldmljZTsKKworICBVc2JEZXZpY2VEZXNjcmlwdG9yIGRlc2NyaXB0b3I7CisgIGlmICghdXNiR2V0RGV2aWNlRGVzY3JpcHRvcihkZXZpY2UsICZkZXNjcmlwdG9yKSkgcmV0dXJuIE5VTEw7CisKKyAgc2l6ZV90IGxlbmd0aDsKKyAgU1RSX0JFR0lOKGJ1ZmZlciwgc2l6ZSk7CisgIFNUUl9QUklOVEYoIiVzJWMiLCBVU0JfREVWSUNFX1FVQUxJRklFUiwgUEFSQU1FVEVSX1FVQUxJRklFUl9DSEFSQUNURVIpOworCisgIHsKKyAgICB1aW50MTZfdCB2ZW5kb3JJZGVudGlmaWVyID0gZ2V0TGl0dGxlRW5kaWFuMTYoZGVzY3JpcHRvci5pZFZlbmRvcik7CisKKyAgICBpZiAodmVuZG9ySWRlbnRpZmllcikgeworICAgICAgU1RSX1BSSU5URigKKyAgICAgICAgIiVzJWMwWCUwNFglYyIsCisgICAgICAgIHVzYkRldmljZVBhcmFtZXRlck5hbWVzW1VTQl9QQVJNX1ZFTkRPUl9JREVOVElGSUVSXSwKKyAgICAgICAgUEFSQU1FVEVSX0FTU0lHTk1FTlRfQ0hBUkFDVEVSLAorICAgICAgICB2ZW5kb3JJZGVudGlmaWVyLAorICAgICAgICBERVZJQ0VfUEFSQU1FVEVSX1NFUEFSQVRPUgorICAgICAgKTsKKyAgICB9CisgIH0KKworICB7CisgICAgdWludDE2X3QgcHJvZHVjdElkZW50aWZpZXIgPSBnZXRMaXR0bGVFbmRpYW4xNihkZXNjcmlwdG9yLmlkUHJvZHVjdCk7CisKKyAgICBpZiAocHJvZHVjdElkZW50aWZpZXIpIHsKKyAgICAgIFNUUl9QUklOVEYoCisgICAgICAgICIlcyVjMFglMDRYJWMiLAorICAgICAgICB1c2JEZXZpY2VQYXJhbWV0ZXJOYW1lc1tVU0JfUEFSTV9QUk9EVUNUX0lERU5USUZJRVJdLAorICAgICAgICBQQVJBTUVURVJfQVNTSUdOTUVOVF9DSEFSQUNURVIsCisgICAgICAgIHByb2R1Y3RJZGVudGlmaWVyLAorICAgICAgICBERVZJQ0VfUEFSQU1FVEVSX1NFUEFSQVRPUgorICAgICAgKTsKKyAgICB9CisgIH0KKworICB7CisgICAgY2hhciAqc2VyaWFsTnVtYmVyID0gdXNiR2V0U2VyaWFsTnVtYmVyKGRldmljZSwgMTAwMCk7CisKKyAgICBpZiAoc2VyaWFsTnVtYmVyKSB7CisgICAgICBpZiAoIXN0cmNocihzZXJpYWxOdW1iZXIsIERFVklDRV9QQVJBTUVURVJfU0VQQVJBVE9SKSkgeworICAgICAgICBTVFJfUFJJTlRGKAorICAgICAgICAgICIlcyVjJXMlYyIsCisgICAgICAgICAgdXNiRGV2aWNlUGFyYW1ldGVyTmFtZXNbVVNCX1BBUk1fU0VSSUFMX05VTUJFUl0sCisgICAgICAgICAgUEFSQU1FVEVSX0FTU0lHTk1FTlRfQ0hBUkFDVEVSLAorICAgICAgICAgIHNlcmlhbE51bWJlciwKKyAgICAgICAgICBERVZJQ0VfUEFSQU1FVEVSX1NFUEFSQVRPUgorICAgICAgICApOworICAgICAgfQorCisgICAgICBmcmVlKHNlcmlhbE51bWJlcik7CisgICAgfQorICB9CisKKyAgbGVuZ3RoID0gU1RSX0xFTkdUSDsKKyAgU1RSX0VORDsKKworICB7CisgICAgY2hhciAqbGFzdCA9ICZidWZmZXJbbGVuZ3RoXSAtIDE7CisgICAgaWYgKCpsYXN0ID09IERFVklDRV9QQVJBTUVURVJfU0VQQVJBVE9SKSAqbGFzdCA9IDA7CisgIH0KKworICByZXR1cm4gYnVmZmVyOworfQorCitzdGF0aWMgaW50Cit1c2JDb21wYXJlRGV2aWNlRW50cmllcyAoY29uc3Qgdm9pZCAqZWxlbWVudDEsIGNvbnN0IHZvaWQgKmVsZW1lbnQyKSB7CisgIGNvbnN0IFVzYkRldmljZUVudHJ5ICplbnRyeTEgPSBlbGVtZW50MTsKKyAgY29uc3QgVXNiRGV2aWNlRW50cnkgKmVudHJ5MiA9IGVsZW1lbnQyOworCisgIGlmIChlbnRyeTEtPnZlbmRvcklkZW50aWZpZXIgPCBlbnRyeTItPnZlbmRvcklkZW50aWZpZXIpIHJldHVybiAtMTsKKyAgaWYgKGVudHJ5MS0+dmVuZG9ySWRlbnRpZmllciA+IGVudHJ5Mi0+dmVuZG9ySWRlbnRpZmllcikgcmV0dXJuIDE7CisKKyAgaWYgKGVudHJ5MS0+cHJvZHVjdElkZW50aWZpZXIgPCBlbnRyeTItPnByb2R1Y3RJZGVudGlmaWVyKSByZXR1cm4gLTE7CisgIGlmIChlbnRyeTEtPnByb2R1Y3RJZGVudGlmaWVyID4gZW50cnkyLT5wcm9kdWN0SWRlbnRpZmllcikgcmV0dXJuIDE7CisKKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK3VzYlNlYXJjaERldmljZUVudHJ5IChjb25zdCB2b2lkICp0YXJnZXQsIGNvbnN0IHZvaWQgKmVsZW1lbnQpIHsKKyAgY29uc3QgVXNiRGV2aWNlRW50cnkgKmVudHJ5MSA9IHRhcmdldDsKKyAgY29uc3QgVXNiRGV2aWNlRW50cnkgKmVudHJ5MiA9IGVsZW1lbnQ7CisgIHJldHVybiB1c2JDb21wYXJlRGV2aWNlRW50cmllcyhlbnRyeTEsIGVudHJ5Mik7Cit9CisKK2NvbnN0IGNoYXIgKmNvbnN0ICoKK3VzYkdldERyaXZlckNvZGVzICh1aW50MTZfdCB2ZW5kb3IsIHVpbnQxNl90IHByb2R1Y3QpIHsKKyAgY29uc3QgVXNiRGV2aWNlRW50cnkgdGFyZ2V0ID0geworICAgIC52ZW5kb3JJZGVudGlmaWVyID0gdmVuZG9yLAorICAgIC5wcm9kdWN0SWRlbnRpZmllciA9IHByb2R1Y3QKKyAgfTsKKworICBjb25zdCBVc2JEZXZpY2VFbnRyeSAqZW50cnkgPSBic2VhcmNoKCZ0YXJnZXQsIHVzYkRldmljZVRhYmxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzYkRldmljZUNvdW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZih1c2JEZXZpY2VUYWJsZVswXSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNiU2VhcmNoRGV2aWNlRW50cnkpOworCisgIHJldHVybiBlbnRyeT8gZW50cnktPmRyaXZlckNvZGVzOiBOVUxMOworfQorCitpbnQKK2lzVXNiRGV2aWNlSWRlbnRpZmllciAoY29uc3QgY2hhciAqKmlkZW50aWZpZXIpIHsKKyAgcmV0dXJuIGhhc1F1YWxpZmllcihpZGVudGlmaWVyLCBVU0JfREVWSUNFX1FVQUxJRklFUik7Cit9CmRpZmYgLS1naXQgYS9Qcm9ncmFtcy91c2JfYWRhcHRlcnMuYyBiL1Byb2dyYW1zL3VzYl9hZGFwdGVycy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU1OGZlMWUKLS0tIC9kZXYvbnVsbAorKysgYi9Qcm9ncmFtcy91c2JfYWRhcHRlcnMuYwpAQCAtMCwwICsxLDE4MCBAQAorLyoKKyAqIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisgKiAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisgKgorICogQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKKyNpbmNsdWRlICJwcm9sb2d1ZS5oIgorCisjaW5jbHVkZSAidXNiX2FkYXB0ZXJzLmgiCisKK2NvbnN0IFVzYlNlcmlhbEFkYXB0ZXIgdXNiU2VyaWFsQWRhcHRlclRhYmxlW10gPSB7CisgIHsgLyogQWxiYXRyb3NzLCBDZWJyYSwgSElNUyBTeW5jQnJhaWxsZSwgSGFuZHlUZWNoIEZUREksIEhlZG8gTW9iaWxMaW5lLCBNRFYgKi8KKyAgICAudmVuZG9yPTBYMDQwMywgLnByb2R1Y3Q9MFg2MDAxLAorICAgIC5nZW5lcmljID0gMSwKKyAgICAub3BlcmF0aW9ucyA9ICZ1c2JTZXJpYWxPcGVyYXRpb25zX0ZURElfRlQ4VTIzMkFNCisgIH0sCisKKyAgeyAvKiBEb3RQYWQgKi8KKyAgICAudmVuZG9yPTBYMDQwMywgLnByb2R1Y3Q9MFg2MDEwLAorICAgIC5nZW5lcmljID0gMSwKKyAgICAub3BlcmF0aW9ucyA9ICZ1c2JTZXJpYWxPcGVyYXRpb25zX0ZURElfRlQyMzJCTQorICB9LAorCisgIHsgLyogSGVkbyBNb2JpbExpbmUgKi8KKyAgICAudmVuZG9yPTBYMDQwMywgLnByb2R1Y3Q9MFhERTU4LAorICAgIC5vcGVyYXRpb25zID0gJnVzYlNlcmlhbE9wZXJhdGlvbnNfRlRESV9GVDIzMkJNCisgIH0sCisKKyAgeyAvKiBIZWRvIFByb2ZpTGluZSAqLworICAgIC52ZW5kb3I9MFgwNDAzLCAucHJvZHVjdD0wWERFNTksCisgICAgLm9wZXJhdGlvbnMgPSAmdXNiU2VyaWFsT3BlcmF0aW9uc19GVERJX0ZUMjMyQk0KKyAgfSwKKworICB7IC8qIFBhcGVubWVpZXIgRlRESSAqLworICAgIC52ZW5kb3I9MFgwNDAzLCAucHJvZHVjdD0wWEYyMDgsCisgICAgLm9wZXJhdGlvbnMgPSAmdXNiU2VyaWFsT3BlcmF0aW9uc19GVERJX0ZUMjMyQk0KKyAgfSwKKworICB7IC8qIEJhdW0gVmFyaW80MCAoNDAgY2VsbHMpICovCisgICAgLnZlbmRvcj0wWDA0MDMsIC5wcm9kdWN0PTBYRkU3MCwKKyAgICAub3BlcmF0aW9ucyA9ICZ1c2JTZXJpYWxPcGVyYXRpb25zX0ZURElfRlQyMzJCTQorICB9LAorCisgIHsgLyogQmF1bSBQb2NrZXRWYXJpbyAoMjQgY2VsbHMpICovCisgICAgLnZlbmRvcj0wWDA0MDMsIC5wcm9kdWN0PTBYRkU3MSwKKyAgICAub3BlcmF0aW9ucyA9ICZ1c2JTZXJpYWxPcGVyYXRpb25zX0ZURElfRlQyMzJCTQorICB9LAorCisgIHsgLyogQmF1bSBTdXBlclZhcmlvIDQwICg0MCBjZWxscykgKi8KKyAgICAudmVuZG9yPTBYMDQwMywgLnByb2R1Y3Q9MFhGRTcyLAorICAgIC5vcGVyYXRpb25zID0gJnVzYlNlcmlhbE9wZXJhdGlvbnNfRlRESV9GVDIzMkJNCisgIH0sCisKKyAgeyAvKiBCYXVtIFN1cGVyVmFyaW8gMzIgKDMyIGNlbGxzKSAqLworICAgIC52ZW5kb3I9MFgwNDAzLCAucHJvZHVjdD0wWEZFNzMsCisgICAgLm9wZXJhdGlvbnMgPSAmdXNiU2VyaWFsT3BlcmF0aW9uc19GVERJX0ZUMjMyQk0KKyAgfSwKKworICB7IC8qIEJhdW0gU3VwZXJWYXJpbyA2NCAoNjQgY2VsbHMpICovCisgICAgLnZlbmRvcj0wWDA0MDMsIC5wcm9kdWN0PTBYRkU3NCwKKyAgICAub3BlcmF0aW9ucyA9ICZ1c2JTZXJpYWxPcGVyYXRpb25zX0ZURElfRlQyMzJCTQorICB9LAorCisgIHsgLyogQmF1bSBTdXBlclZhcmlvIDgwICg4MCBjZWxscykgKi8KKyAgICAudmVuZG9yPTBYMDQwMywgLnByb2R1Y3Q9MFhGRTc1LAorICAgIC5vcGVyYXRpb25zID0gJnVzYlNlcmlhbE9wZXJhdGlvbnNfRlRESV9GVDIzMkJNCisgIH0sCisKKyAgeyAvKiBCYXVtIFZhcmlvUHJvIDgwICg4MCBjZWxscykgKi8KKyAgICAudmVuZG9yPTBYMDQwMywgLnByb2R1Y3Q9MFhGRTc2LAorICAgIC5vcGVyYXRpb25zID0gJnVzYlNlcmlhbE9wZXJhdGlvbnNfRlRESV9GVDIzMkJNCisgIH0sCisKKyAgeyAvKiBCYXVtIFZhcmlvUHJvIDY0ICg2NCBjZWxscykgKi8KKyAgICAudmVuZG9yPTBYMDQwMywgLnByb2R1Y3Q9MFhGRTc3LAorICAgIC5vcGVyYXRpb25zID0gJnVzYlNlcmlhbE9wZXJhdGlvbnNfRlRESV9GVDIzMkJNCisgIH0sCisKKyAgeyAvKiBCYXVtIFZhcmlvUHJvIDQwICg0MCBjZWxscykgKi8KKyAgICAudmVuZG9yPTBYMDkwNCwgLnByb2R1Y3Q9MFgyMDAwLAorICAgIC5vcGVyYXRpb25zID0gJnVzYlNlcmlhbE9wZXJhdGlvbnNfRlRESV9GVDIzMkJNCisgIH0sCisKKyAgeyAvKiBCYXVtIEVjb1ZhcmlvIDI0ICgyNCBjZWxscykgKi8KKyAgICAudmVuZG9yPTBYMDkwNCwgLnByb2R1Y3Q9MFgyMDAxLAorICAgIC5vcGVyYXRpb25zID0gJnVzYlNlcmlhbE9wZXJhdGlvbnNfRlRESV9GVDIzMkJNCisgIH0sCisKKyAgeyAvKiBCYXVtIEVjb1ZhcmlvIDQwICg0MCBjZWxscykgKi8KKyAgICAudmVuZG9yPTBYMDkwNCwgLnByb2R1Y3Q9MFgyMDAyLAorICAgIC5vcGVyYXRpb25zID0gJnVzYlNlcmlhbE9wZXJhdGlvbnNfRlRESV9GVDIzMkJNCisgIH0sCisKKyAgeyAvKiBCYXVtIFZhcmlvQ29ubmVjdCA0MCAoNDAgY2VsbHMpICovCisgICAgLnZlbmRvcj0wWDA5MDQsIC5wcm9kdWN0PTBYMjAwNywKKyAgICAub3BlcmF0aW9ucyA9ICZ1c2JTZXJpYWxPcGVyYXRpb25zX0ZURElfRlQyMzJCTQorICB9LAorCisgIHsgLyogQmF1bSBWYXJpb0Nvbm5lY3QgMzIgKDMyIGNlbGxzKSAqLworICAgIC52ZW5kb3I9MFgwOTA0LCAucHJvZHVjdD0wWDIwMDgsCisgICAgLm9wZXJhdGlvbnMgPSAmdXNiU2VyaWFsT3BlcmF0aW9uc19GVERJX0ZUMjMyQk0KKyAgfSwKKworICB7IC8qIEJhdW0gVmFyaW9Db25uZWN0IDI0ICgyNCBjZWxscykgKi8KKyAgICAudmVuZG9yPTBYMDkwNCwgLnByb2R1Y3Q9MFgyMDA5LAorICAgIC5vcGVyYXRpb25zID0gJnVzYlNlcmlhbE9wZXJhdGlvbnNfRlRESV9GVDIzMkJNCisgIH0sCisKKyAgeyAvKiBCYXVtIFZhcmlvQ29ubmVjdCA2NCAoNjQgY2VsbHMpICovCisgICAgLnZlbmRvcj0wWDA5MDQsIC5wcm9kdWN0PTBYMjAxMCwKKyAgICAub3BlcmF0aW9ucyA9ICZ1c2JTZXJpYWxPcGVyYXRpb25zX0ZURElfRlQyMzJCTQorICB9LAorCisgIHsgLyogQmF1bSBWYXJpb0Nvbm5lY3QgODAgKDgwIGNlbGxzKSAqLworICAgIC52ZW5kb3I9MFgwOTA0LCAucHJvZHVjdD0wWDIwMTEsCisgICAgLm9wZXJhdGlvbnMgPSAmdXNiU2VyaWFsT3BlcmF0aW9uc19GVERJX0ZUMjMyQk0KKyAgfSwKKworICB7IC8qIEJhdW0gRWNvVmFyaW8gMzIgKDMyIGNlbGxzKSAqLworICAgIC52ZW5kb3I9MFgwOTA0LCAucHJvZHVjdD0wWDIwMTQsCisgICAgLm9wZXJhdGlvbnMgPSAmdXNiU2VyaWFsT3BlcmF0aW9uc19GVERJX0ZUMjMyQk0KKyAgfSwKKworICB7IC8qIEJhdW0gRWNvVmFyaW8gNjQgKDY0IGNlbGxzKSAqLworICAgIC52ZW5kb3I9MFgwOTA0LCAucHJvZHVjdD0wWDIwMTUsCisgICAgLm9wZXJhdGlvbnMgPSAmdXNiU2VyaWFsT3BlcmF0aW9uc19GVERJX0ZUMjMyQk0KKyAgfSwKKworICB7IC8qIEJhdW0gRWNvVmFyaW8gODAgKDgwIGNlbGxzKSAqLworICAgIC52ZW5kb3I9MFgwOTA0LCAucHJvZHVjdD0wWDIwMTYsCisgICAgLm9wZXJhdGlvbnMgPSAmdXNiU2VyaWFsT3BlcmF0aW9uc19GVERJX0ZUMjMyQk0KKyAgfSwKKworICB7IC8qIEJhdW0gUmVmcmVzaGFicmFpbGxlIDE4ICgxOCBjZWxscykgKi8KKyAgICAudmVuZG9yPTBYMDkwNCwgLnByb2R1Y3Q9MFgzMDAwLAorICAgIC5vcGVyYXRpb25zID0gJnVzYlNlcmlhbE9wZXJhdGlvbnNfRlRESV9GVDIzMkJNCisgIH0sCisKKyAgeyAvKiBIYW5keVRlY2ggR29IdWJzICovCisgICAgLnZlbmRvcj0wWDA5MjEsIC5wcm9kdWN0PTBYMTIwMCwKKyAgICAub3BlcmF0aW9ucyA9ICZ1c2JTZXJpYWxPcGVyYXRpb25zX0JlbGtpbgorICB9LAorCisgIHsgLyogQnJhaWxsZU1lbW8gUG9ja2V0LCBTZWlrYSBCcmFpbGxlRGlzcGxheSAqLworICAgIC52ZW5kb3I9MFgxMEM0LCAucHJvZHVjdD0wWEVBNjAsCisgICAgLmdlbmVyaWMgPSAxLAorICAgIC5vcGVyYXRpb25zID0gJnVzYlNlcmlhbE9wZXJhdGlvbnNfQ1AyMTAxCisgIH0sCisKKyAgeyAvKiBTZWlrYSBOb3RlVGFrZXIgKi8KKyAgICAudmVuZG9yPTBYMTBDNCwgLnByb2R1Y3Q9MFhFQTgwLAorICAgIC5nZW5lcmljID0gMSwKKyAgICAub3BlcmF0aW9ucyA9ICZ1c2JTZXJpYWxPcGVyYXRpb25zX0NQMjExMAorICB9LAorCisgIHsgLyogQ2FudXRlICovCisgICAgLnZlbmRvcj0wWDE2QzAsIC5wcm9kdWN0PTBYMDVFMSwKKyAgICAub3BlcmF0aW9ucyA9ICZ1c2JTZXJpYWxPcGVyYXRpb25zX0NEQ19BQ00KKyAgfSwKKworICB7IC8qIE5MUyBlUmVhZGVyIFpvb21heCAqLworICAgIC52ZW5kb3I9MFgxQTg2LCAucHJvZHVjdD0wWDc1MjMsCisgICAgLmdlbmVyaWMgPSAxLAorICAgIC5vcGVyYXRpb25zID0gJnVzYlNlcmlhbE9wZXJhdGlvbnNfQ0gzNDEKKyAgfSwKK307CisKK2NvbnN0IHNpemVfdCB1c2JTZXJpYWxBZGFwdGVyQ291bnQgPSBBUlJBWV9DT1VOVCh1c2JTZXJpYWxBZGFwdGVyVGFibGUpOwpkaWZmIC0tZ2l0IGEvUHJvZ3JhbXMvdXNiX2FkYXB0ZXJzLmggYi9Qcm9ncmFtcy91c2JfYWRhcHRlcnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYTg3MzBlCi0tLSAvZGV2L251bGwKKysrIGIvUHJvZ3JhbXMvdXNiX2FkYXB0ZXJzLmgKQEAgLTAsMCArMSwzNSBAQAorLyoKKyAqIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisgKiAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisgKgorICogQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKKyNpZm5kZWYgQlJMVFRZX0lOQ0xVREVEX1VTQl9BREFQVEVSUworI2RlZmluZSBCUkxUVFlfSU5DTFVERURfVVNCX0FEQVBURVJTCisKKyNpbmNsdWRlICJ1c2Jfc2VyaWFsLmgiCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYgLyogX19jcGx1c3BsdXMgKi8KKworZXh0ZXJuIGNvbnN0IFVzYlNlcmlhbEFkYXB0ZXIgdXNiU2VyaWFsQWRhcHRlclRhYmxlW107CitleHRlcm4gY29uc3Qgc2l6ZV90IHVzYlNlcmlhbEFkYXB0ZXJDb3VudDsKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYgLyogX19jcGx1c3BsdXMgKi8KKworI2VuZGlmIC8qIEJSTFRUWV9JTkNMVURFRF9VU0JfQURBUFRFUlMgKi8KZGlmZiAtLWdpdCBhL1Byb2dyYW1zL3VzYl9hbmRyb2lkLmMgYi9Qcm9ncmFtcy91c2JfYW5kcm9pZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUwOTViM2QKLS0tIC9kZXYvbnVsbAorKysgYi9Qcm9ncmFtcy91c2JfYW5kcm9pZC5jCkBAIC0wLDAgKzEsOTc2IEBACisvKgorICogQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyAqICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyAqCisgKiBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorICoKKyAqIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyAqCisgKiBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisgKi8KKworI2luY2x1ZGUgInByb2xvZ3VlLmgiCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8c3lzL2lvY3RsLmg+CisjaW5jbHVkZSA8bGludXgvdXNiZGV2aWNlX2ZzLmg+CisKKyNpbmNsdWRlICJsb2cuaCIKKyNpbmNsdWRlICJiaXRmaWVsZC5oIgorI2luY2x1ZGUgInF1ZXVlLmgiCisKKyNpbmNsdWRlICJpb191c2IuaCIKKyNpbmNsdWRlICJ1c2JfaW50ZXJuYWwuaCIKKyNpbmNsdWRlICJzeXN0ZW1famF2YS5oIgorCisjZGVmaW5lIEpBVkFfT0JKX1VTQihuYW1lKSAiYW5kcm9pZC9oYXJkd2FyZS91c2IvVXNiIiBuYW1lCisjZGVmaW5lIEpBVkFfT0JKX1VTQl9ERVZJQ0UgSkFWQV9PQkpfVVNCKCJEZXZpY2UiKQorI2RlZmluZSBKQVZBX09CSl9VU0JfSU5URVJGQUNFIEpBVkFfT0JKX1VTQigiSW50ZXJmYWNlIikKKyNkZWZpbmUgSkFWQV9PQkpfVVNCX0VORFBPSU5UIEpBVkFfT0JKX1VTQigiRW5kcG9pbnQiKQorI2RlZmluZSBKQVZBX09CSl9VU0JfQ09OTkVDVElPTiBKQVZBX09CSl9VU0IoIkRldmljZUNvbm5lY3Rpb24iKQorCisjZGVmaW5lIEpBVkFfU0lHX1VTQl9ERVZJQ0UgSkFWQV9TSUdfT0JKRUNUKEpBVkFfT0JKX1VTQl9ERVZJQ0UpCisjZGVmaW5lIEpBVkFfU0lHX1VTQl9JTlRFUkZBQ0UgSkFWQV9TSUdfT0JKRUNUKEpBVkFfT0JKX1VTQl9JTlRFUkZBQ0UpCisjZGVmaW5lIEpBVkFfU0lHX1VTQl9FTkRQT0lOVCBKQVZBX1NJR19PQkpFQ1QoSkFWQV9PQkpfVVNCX0VORFBPSU5UKQorI2RlZmluZSBKQVZBX1NJR19VU0JfQ09OTkVDVElPTiBKQVZBX1NJR19PQkpFQ1QoSkFWQV9PQkpfVVNCX0NPTk5FQ1RJT04pCisKK3R5cGVkZWYgc3RydWN0IHsKKyAgSk5JRW52ICplbnY7CisgIGpvYmplY3QgZGV2aWNlOworICBVc2JEZXZpY2VEZXNjcmlwdG9yIGRlc2NyaXB0b3I7Cit9IFVzYkhvc3REZXZpY2U7CisKK3N0YXRpYyBRdWV1ZSAqdXNiSG9zdERldmljZXMgPSBOVUxMOworCitzdHJ1Y3QgVXNiRGV2aWNlRXh0ZW5zaW9uU3RydWN0IHsKKyAgY29uc3QgVXNiSG9zdERldmljZSAqaG9zdDsKKyAgam9iamVjdCBjb25uZWN0aW9uOworICBqb2JqZWN0IGludGVyZmFjZTsKKworICBpbnQgZmlsZURlc2NyaXB0b3I7Cit9OworCitzdHJ1Y3QgVXNiRW5kcG9pbnRFeHRlbnNpb25TdHJ1Y3QgeworICBVc2JFbmRwb2ludCAqZW5kcG9pbnQ7CisgIGpvYmplY3Qgb2JqZWN0OworfTsKKworc3RhdGljIGpjbGFzcyB1c2JIZWxwZXJDbGFzcyA9IE5VTEw7CitzdGF0aWMgamNsYXNzIHVzYkRldmljZUNsYXNzID0gTlVMTDsKK3N0YXRpYyBqY2xhc3MgdXNiSW50ZXJmYWNlQ2xhc3MgPSBOVUxMOworc3RhdGljIGpjbGFzcyB1c2JDb25uZWN0aW9uQ2xhc3MgPSBOVUxMOworCitzdGF0aWMgaW50Cit1c2JGaW5kSGVscGVyQ2xhc3MgKEpOSUVudiAqZW52KSB7CisgIHJldHVybiBmaW5kSmF2YUNsYXNzKGVudiwgJnVzYkhlbHBlckNsYXNzLCBKQVZBX09CSl9CUkxUVFkoIlVzYkhlbHBlciIpKTsKK30KKworc3RhdGljIGpvYmplY3QKK3VzYkdldERldmljZUl0ZXJhdG9yIChKTklFbnYgKmVudikgeworICBpZiAodXNiRmluZEhlbHBlckNsYXNzKGVudikpIHsKKyAgICBzdGF0aWMgam1ldGhvZElEIG1ldGhvZCA9IDA7CisKKyAgICBpZiAoZmluZEphdmFTdGF0aWNNZXRob2QoZW52LCAmbWV0aG9kLCB1c2JIZWxwZXJDbGFzcywgImdldERldmljZUl0ZXJhdG9yIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSkFWQV9TSUdfTUVUSE9EKEpBVkFfU0lHX0lURVJBVE9SLCApKSkgeworICAgICAgam9iamVjdCBpdGVyYXRvciA9ICgqZW52KS0+Q2FsbFN0YXRpY09iamVjdE1ldGhvZChlbnYsIHVzYkhlbHBlckNsYXNzLCBtZXRob2QpOworCisgICAgICBpZiAoaXRlcmF0b3IpIHJldHVybiBpdGVyYXRvcjsKKyAgICAgIGNsZWFySmF2YUV4Y2VwdGlvbihlbnYsIDEpOworICAgICAgZXJybm8gPSBFSU87CisgICAgfQorICB9CisKKyAgcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBqb2JqZWN0Cit1c2JHZXROZXh0RGV2aWNlIChKTklFbnYgKmVudiwgam9iamVjdCBpdGVyYXRvcikgeworICBpZiAodXNiRmluZEhlbHBlckNsYXNzKGVudikpIHsKKyAgICBzdGF0aWMgam1ldGhvZElEIG1ldGhvZCA9IDA7CisKKyAgICBpZiAoZmluZEphdmFTdGF0aWNNZXRob2QoZW52LCAmbWV0aG9kLCB1c2JIZWxwZXJDbGFzcywgImdldE5leHREZXZpY2UiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKQVZBX1NJR19NRVRIT0QoSkFWQV9TSUdfVVNCX0RFVklDRSwgSkFWQV9TSUdfSVRFUkFUT1IpKSkgeworICAgICAgam9iamVjdCBkZXZpY2UgPSAoKmVudiktPkNhbGxTdGF0aWNPYmplY3RNZXRob2QoZW52LCB1c2JIZWxwZXJDbGFzcywgbWV0aG9kLCBpdGVyYXRvcik7CisKKyAgICAgIGlmIChkZXZpY2UpIHJldHVybiBkZXZpY2U7CisgICAgICBjbGVhckphdmFFeGNlcHRpb24oZW52LCAxKTsKKyAgICB9CisgIH0KKworICByZXR1cm4gTlVMTDsKK30KKworc3RhdGljIGpvYmplY3QKK3VzYkdldERldmljZUludGVyZmFjZSAoSk5JRW52ICplbnYsIGpvYmplY3QgZGV2aWNlLCBqaW50IGlkZW50aWZpZXIpIHsKKyAgaWYgKHVzYkZpbmRIZWxwZXJDbGFzcyhlbnYpKSB7CisgICAgc3RhdGljIGptZXRob2RJRCBtZXRob2QgPSAwOworCisgICAgaWYgKGZpbmRKYXZhU3RhdGljTWV0aG9kKGVudiwgJm1ldGhvZCwgdXNiSGVscGVyQ2xhc3MsICJnZXREZXZpY2VJbnRlcmZhY2UiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKQVZBX1NJR19NRVRIT0QoSkFWQV9TSUdfVVNCX0lOVEVSRkFDRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpBVkFfU0lHX1VTQl9ERVZJQ0UgLy8gZGV2aWNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKQVZBX1NJR19JTlQgLy8gaWRlbnRpZmllcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApKSkgeworICAgICAgam9iamVjdCBpbnRlcmZhY2UgPSAoKmVudiktPkNhbGxTdGF0aWNPYmplY3RNZXRob2QoZW52LCB1c2JIZWxwZXJDbGFzcywgbWV0aG9kLCBkZXZpY2UsIGlkZW50aWZpZXIpOworCisgICAgICBpZiAoaW50ZXJmYWNlKSByZXR1cm4gaW50ZXJmYWNlOworICAgICAgY2xlYXJKYXZhRXhjZXB0aW9uKGVudiwgMSk7CisgICAgICBlcnJubyA9IEVJTzsKKyAgICB9CisgIH0KKworICByZXR1cm4gTlVMTDsKK30KKworc3RhdGljIGpvYmplY3QKK3VzYkdldEludGVyZmFjZUVuZHBvaW50IChKTklFbnYgKmVudiwgam9iamVjdCBpbnRlcmZhY2UsIGppbnQgYWRkcmVzcykgeworICBpZiAodXNiRmluZEhlbHBlckNsYXNzKGVudikpIHsKKyAgICBzdGF0aWMgam1ldGhvZElEIG1ldGhvZCA9IDA7CisKKyAgICBpZiAoZmluZEphdmFTdGF0aWNNZXRob2QoZW52LCAmbWV0aG9kLCB1c2JIZWxwZXJDbGFzcywgImdldEludGVyZmFjZUVuZHBvaW50IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSkFWQV9TSUdfTUVUSE9EKEpBVkFfU0lHX1VTQl9FTkRQT0lOVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpBVkFfU0lHX1VTQl9JTlRFUkZBQ0UgLy8gaW50ZXJmYWNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKQVZBX1NJR19JTlQgLy8gYWRkcmVzcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApKSkgeworICAgICAgam9iamVjdCBlbmRwb2ludCA9ICgqZW52KS0+Q2FsbFN0YXRpY09iamVjdE1ldGhvZChlbnYsIHVzYkhlbHBlckNsYXNzLCBtZXRob2QsIGludGVyZmFjZSwgYWRkcmVzcyk7CisKKyAgICAgIGlmIChlbmRwb2ludCkgcmV0dXJuIGVuZHBvaW50OworICAgICAgY2xlYXJKYXZhRXhjZXB0aW9uKGVudiwgMSk7CisgICAgICBlcnJubyA9IEVJTzsKKyAgICB9CisgIH0KKworICByZXR1cm4gTlVMTDsKK30KKworc3RhdGljIGpvYmplY3QKK3VzYk9wZW5EZXZpY2VDb25uZWN0aW9uIChKTklFbnYgKmVudiwgam9iamVjdCBkZXZpY2UpIHsKKyAgbG9nTWVzc2FnZShMT0dfQ0FURUdPUlkoVVNCX0lPKSwgIm9wZW5pbmcgZGV2aWNlIGNvbm5lY3Rpb24iKTsKKworICBpZiAodXNiRmluZEhlbHBlckNsYXNzKGVudikpIHsKKyAgICBzdGF0aWMgam1ldGhvZElEIG1ldGhvZCA9IDA7CisKKyAgICBpZiAoZmluZEphdmFTdGF0aWNNZXRob2QoZW52LCAmbWV0aG9kLCB1c2JIZWxwZXJDbGFzcywgIm9wZW5EZXZpY2VDb25uZWN0aW9uIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSkFWQV9TSUdfTUVUSE9EKEpBVkFfU0lHX1VTQl9DT05ORUNUSU9OLCBKQVZBX1NJR19VU0JfREVWSUNFKSkpIHsKKyAgICAgIGpvYmplY3QgY29ubmVjdGlvbiA9ICgqZW52KS0+Q2FsbFN0YXRpY09iamVjdE1ldGhvZChlbnYsIHVzYkhlbHBlckNsYXNzLCBtZXRob2QsIGRldmljZSk7CisKKyAgICAgIGlmICghY2xlYXJKYXZhRXhjZXB0aW9uKGVudiwgMSkpIHsKKyAgICAgICAgaWYgKGNvbm5lY3Rpb24pIHsKKyAgICAgICAgICByZXR1cm4gY29ubmVjdGlvbjsKKyAgICAgICAgfQorICAgICAgfQorCisgICAgICBlcnJubyA9IEVJTzsKKyAgICB9CisgIH0KKworICByZXR1cm4gTlVMTDsKK30KKworc3RhdGljIGludAordXNiRmluZERldmljZUNsYXNzIChKTklFbnYgKmVudikgeworICByZXR1cm4gZmluZEphdmFDbGFzcyhlbnYsICZ1c2JEZXZpY2VDbGFzcywgSkFWQV9PQkpfVVNCX0RFVklDRSk7Cit9CisKK3N0YXRpYyBpbnQKK3VzYkdldEludERldmljZVByb3BlcnR5ICgKKyAgSk5JRW52ICplbnYsIGppbnQgKnZhbHVlLAorICBqb2JqZWN0IGRldmljZSwgY29uc3QgY2hhciAqbWV0aG9kTmFtZSwgam1ldGhvZElEICptZXRob2RJZGVudGlmaWVyCispIHsKKyAgaWYgKHVzYkZpbmREZXZpY2VDbGFzcyhlbnYpKSB7CisgICAgaWYgKGZpbmRKYXZhSW5zdGFuY2VNZXRob2QoZW52LCBtZXRob2RJZGVudGlmaWVyLCB1c2JEZXZpY2VDbGFzcywgbWV0aG9kTmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKQVZBX1NJR19NRVRIT0QoSkFWQV9TSUdfSU5ULCApKSkgeworICAgICAgaWYgKCFjbGVhckphdmFFeGNlcHRpb24oZW52LCAxKSkgeworICAgICAgICAqdmFsdWUgPSAoKmVudiktPkNhbGxJbnRNZXRob2QoZW52LCBkZXZpY2UsICptZXRob2RJZGVudGlmaWVyKTsKKyAgICAgICAgcmV0dXJuIDE7CisgICAgICB9CisKKyAgICAgIGVycm5vID0gRUlPOworICAgIH0KKyAgfQorCisgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50Cit1c2JHZXREZXZpY2VWZW5kb3IgKEpOSUVudiAqZW52LCBqb2JqZWN0IGRldmljZSwgVXNiRGV2aWNlRGVzY3JpcHRvciAqZGVzY3JpcHRvcikgeworICBzdGF0aWMgam1ldGhvZElEIG1ldGhvZCA9IDA7CisKKyAgamludCB2ZW5kb3I7CisgIGludCBvayA9IHVzYkdldEludERldmljZVByb3BlcnR5KGVudiwgJnZlbmRvciwgZGV2aWNlLCAiZ2V0VmVuZG9ySWQiLCAmbWV0aG9kKTsKKworICBpZiAob2spIHB1dExpdHRsZUVuZGlhbjE2KCZkZXNjcmlwdG9yLT5pZFZlbmRvciwgdmVuZG9yKTsKKyAgcmV0dXJuIG9rOworfQorCitzdGF0aWMgaW50Cit1c2JHZXREZXZpY2VQcm9kdWN0IChKTklFbnYgKmVudiwgam9iamVjdCBkZXZpY2UsIFVzYkRldmljZURlc2NyaXB0b3IgKmRlc2NyaXB0b3IpIHsKKyAgc3RhdGljIGptZXRob2RJRCBtZXRob2QgPSAwOworCisgIGppbnQgcHJvZHVjdDsKKyAgaW50IG9rID0gdXNiR2V0SW50RGV2aWNlUHJvcGVydHkoZW52LCAmcHJvZHVjdCwgZGV2aWNlLCAiZ2V0UHJvZHVjdElkIiwgJm1ldGhvZCk7CisKKyAgaWYgKG9rKSBwdXRMaXR0bGVFbmRpYW4xNigmZGVzY3JpcHRvci0+aWRQcm9kdWN0LCBwcm9kdWN0KTsKKyAgcmV0dXJuIG9rOworfQorCitzdGF0aWMgaW50Cit1c2JHZXREZXZpY2VDbGFzcyAoSk5JRW52ICplbnYsIGpvYmplY3QgZGV2aWNlLCBVc2JEZXZpY2VEZXNjcmlwdG9yICpkZXNjcmlwdG9yKSB7CisgIHN0YXRpYyBqbWV0aG9kSUQgbWV0aG9kID0gMDsKKworICBqaW50IGNsYXNzOworICBpbnQgb2sgPSB1c2JHZXRJbnREZXZpY2VQcm9wZXJ0eShlbnYsICZjbGFzcywgZGV2aWNlLCAiZ2V0RGV2aWNlQ2xhc3MiLCAmbWV0aG9kKTsKKworICBpZiAob2spIGRlc2NyaXB0b3ItPmJEZXZpY2VDbGFzcyA9IGNsYXNzOworICByZXR1cm4gb2s7Cit9CisKK3N0YXRpYyBpbnQKK3VzYkdldERldmljZVN1YmNsYXNzIChKTklFbnYgKmVudiwgam9iamVjdCBkZXZpY2UsIFVzYkRldmljZURlc2NyaXB0b3IgKmRlc2NyaXB0b3IpIHsKKyAgc3RhdGljIGptZXRob2RJRCBtZXRob2QgPSAwOworCisgIGppbnQgc3ViY2xhc3M7CisgIGludCBvayA9IHVzYkdldEludERldmljZVByb3BlcnR5KGVudiwgJnN1YmNsYXNzLCBkZXZpY2UsICJnZXREZXZpY2VTdWJjbGFzcyIsICZtZXRob2QpOworCisgIGlmIChvaykgZGVzY3JpcHRvci0+YkRldmljZVN1YkNsYXNzID0gc3ViY2xhc3M7CisgIHJldHVybiBvazsKK30KKworc3RhdGljIGludAordXNiR2V0RGV2aWNlUHJvdG9jb2wgKEpOSUVudiAqZW52LCBqb2JqZWN0IGRldmljZSwgVXNiRGV2aWNlRGVzY3JpcHRvciAqZGVzY3JpcHRvcikgeworICBzdGF0aWMgam1ldGhvZElEIG1ldGhvZCA9IDA7CisKKyAgamludCBwcm90b2NvbDsKKyAgaW50IG9rID0gdXNiR2V0SW50RGV2aWNlUHJvcGVydHkoZW52LCAmcHJvdG9jb2wsIGRldmljZSwgImdldERldmljZVByb3RvY29sIiwgJm1ldGhvZCk7CisKKyAgaWYgKG9rKSBkZXNjcmlwdG9yLT5iRGV2aWNlUHJvdG9jb2wgPSBwcm90b2NvbDsKKyAgcmV0dXJuIG9rOworfQorCitzdGF0aWMgaW50Cit1c2JGaW5kSW50ZXJmYWNlQ2xhc3MgKEpOSUVudiAqZW52KSB7CisgIHJldHVybiBmaW5kSmF2YUNsYXNzKGVudiwgJnVzYkludGVyZmFjZUNsYXNzLCBKQVZBX09CSl9VU0JfSU5URVJGQUNFKTsKK30KKworc3RhdGljIGludAordXNiR2V0SW50ZXJmYWNlSWRlbnRpZmllciAoSk5JRW52ICplbnYsIHVpbnQ4X3QgKmlkZW50aWZpZXIsIGpvYmplY3QgaW50ZXJmYWNlKSB7CisgIGlmICh1c2JGaW5kSW50ZXJmYWNlQ2xhc3MoZW52KSkgeworICAgIHN0YXRpYyBqbWV0aG9kSUQgbWV0aG9kID0gMDsKKworICAgIGlmIChmaW5kSmF2YUluc3RhbmNlTWV0aG9kKGVudiwgJm1ldGhvZCwgdXNiSW50ZXJmYWNlQ2xhc3MsICJnZXRJZCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSkFWQV9TSUdfTUVUSE9EKEpBVkFfU0lHX0lOVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApKSkgeworICAgICAgamludCByZXN1bHQgPSAoKmVudiktPkNhbGxJbnRNZXRob2QoZW52LCBpbnRlcmZhY2UsIG1ldGhvZCk7CisKKyAgICAgIGlmICghY2xlYXJKYXZhRXhjZXB0aW9uKGVudiwgMSkpIHsKKyAgICAgICAgKmlkZW50aWZpZXIgPSByZXN1bHQ7CisgICAgICAgIHJldHVybiAxOworICAgICAgfQorCisgICAgICBlcnJubyA9IEVJTzsKKyAgICB9CisgIH0KKworICByZXR1cm4gMDsKK30KKworc3RhdGljIGludAordXNiRmluZENvbm5lY3Rpb25DbGFzcyAoSk5JRW52ICplbnYpIHsKKyAgcmV0dXJuIGZpbmRKYXZhQ2xhc3MoZW52LCAmdXNiQ29ubmVjdGlvbkNsYXNzLCBKQVZBX09CSl9VU0JfQ09OTkVDVElPTik7Cit9CisKK3N0YXRpYyBpbnQKK3VzYkRvQ2xhaW1JbnRlcmZhY2UgKEpOSUVudiAqZW52LCBqb2JqZWN0IGNvbm5lY3Rpb24sIGpvYmplY3QgaW50ZXJmYWNlKSB7CisgIGlmICh1c2JGaW5kQ29ubmVjdGlvbkNsYXNzKGVudikpIHsKKyAgICBzdGF0aWMgam1ldGhvZElEIG1ldGhvZCA9IDA7CisKKyAgICBpZiAoZmluZEphdmFJbnN0YW5jZU1ldGhvZChlbnYsICZtZXRob2QsIHVzYkNvbm5lY3Rpb25DbGFzcywgImNsYWltSW50ZXJmYWNlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKQVZBX1NJR19NRVRIT0QoSkFWQV9TSUdfQk9PTEVBTiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSkFWQV9TSUdfVVNCX0lOVEVSRkFDRSAvLyBpbnRlcmZhY2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSkFWQV9TSUdfQk9PTEVBTiAvLyBmb3JjZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkpKSB7CisgICAgICBqYm9vbGVhbiByZXN1bHQgPSAoKmVudiktPkNhbGxCb29sZWFuTWV0aG9kKGVudiwgY29ubmVjdGlvbiwgbWV0aG9kLCBpbnRlcmZhY2UsIEpOSV9UUlVFKTsKKworICAgICAgaWYgKGNsZWFySmF2YUV4Y2VwdGlvbihlbnYsIDEpKSB7CisgICAgICAgIGVycm5vID0gRUlPOworICAgICAgfSBlbHNlIGlmIChyZXN1bHQpIHsKKyAgICAgICAgcmV0dXJuIDE7CisgICAgICB9IGVsc2UgeworICAgICAgICBsb2dTeXN0ZW1FcnJvcigiVVNCIGNsYWltIGludGVyZmFjZSIpOworICAgICAgfQorICAgIH0KKyAgfQorCisgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50Cit1c2JEb1JlbGVhc2VJbnRlcmZhY2UgKEpOSUVudiAqZW52LCBqb2JqZWN0IGNvbm5lY3Rpb24sIGpvYmplY3QgaW50ZXJmYWNlKSB7CisgIGlmICh1c2JGaW5kQ29ubmVjdGlvbkNsYXNzKGVudikpIHsKKyAgICBzdGF0aWMgam1ldGhvZElEIG1ldGhvZCA9IDA7CisKKyAgICBpZiAoZmluZEphdmFJbnN0YW5jZU1ldGhvZChlbnYsICZtZXRob2QsIHVzYkNvbm5lY3Rpb25DbGFzcywgInJlbGVhc2VJbnRlcmZhY2UiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpBVkFfU0lHX01FVEhPRChKQVZBX1NJR19CT09MRUFOLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKQVZBX1NJR19VU0JfSU5URVJGQUNFIC8vIGludGVyZmFjZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkpKSB7CisgICAgICBqYm9vbGVhbiByZXN1bHQgPSAoKmVudiktPkNhbGxCb29sZWFuTWV0aG9kKGVudiwgY29ubmVjdGlvbiwgbWV0aG9kLCBpbnRlcmZhY2UpOworCisgICAgICBpZiAoY2xlYXJKYXZhRXhjZXB0aW9uKGVudiwgMSkpIHsKKyAgICAgICAgZXJybm8gPSBFSU87CisgICAgICB9IGVsc2UgaWYgKHJlc3VsdCkgeworICAgICAgICByZXR1cm4gMTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIGxvZ1N5c3RlbUVycm9yKCJVU0IgcmVsZWFzZSBpbnRlcmZhY2UiKTsKKyAgICAgIH0KKyAgICB9CisgIH0KKworICByZXR1cm4gMDsKK30KKworc3RhdGljIGludAordXNiRG9Db250cm9sVHJhbnNmZXIgKAorICBKTklFbnYgKmVudiwgam9iamVjdCBjb25uZWN0aW9uLAorICBpbnQgdHlwZSwgaW50IHJlcXVlc3QsIGludCB2YWx1ZSwgaW50IGluZGV4LAorICBqYnl0ZUFycmF5IGJ1ZmZlciwgaW50IGxlbmd0aCwgaW50IHRpbWVvdXQKKykgeworICBpZiAodXNiRmluZENvbm5lY3Rpb25DbGFzcyhlbnYpKSB7CisgICAgc3RhdGljIGptZXRob2RJRCBtZXRob2QgPSAwOworCisgICAgaWYgKGZpbmRKYXZhSW5zdGFuY2VNZXRob2QoZW52LCAmbWV0aG9kLCB1c2JDb25uZWN0aW9uQ2xhc3MsICJjb250cm9sVHJhbnNmZXIiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpBVkFfU0lHX01FVEhPRChKQVZBX1NJR19JTlQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpBVkFfU0lHX0lOVCAvLyB0eXBlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpBVkFfU0lHX0lOVCAvLyByZXF1ZXN0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpBVkFfU0lHX0lOVCAvLyB2YWx1ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKQVZBX1NJR19JTlQgLy8gaW5kZXgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSkFWQV9TSUdfQVJSQVkoSkFWQV9TSUdfQllURSkgLy8gYnVmZmVyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpBVkFfU0lHX0lOVCAvLyBsZW5ndGgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSkFWQV9TSUdfSU5UIC8vIHRpbWVvdXQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApKSkgeworICAgICAgamludCByZXN1bHQgPSAoKmVudiktPkNhbGxJbnRNZXRob2QoZW52LCBjb25uZWN0aW9uLCBtZXRob2QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlLCByZXF1ZXN0LCB2YWx1ZSwgaW5kZXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXIsIGxlbmd0aCwgdGltZW91dCk7CisKKyAgICAgIGlmICghY2xlYXJKYXZhRXhjZXB0aW9uKGVudiwgMSkpIHJldHVybiByZXN1bHQ7CisgICAgICBlcnJubyA9IEVJTzsKKyAgICB9CisgIH0KKworICByZXR1cm4gLTE7Cit9CisKK3N0YXRpYyBpbnQKK3VzYkRvQnVsa1RyYW5zZmVyICgKKyAgSk5JRW52ICplbnYsIGpvYmplY3QgY29ubmVjdGlvbiwgam9iamVjdCBlbmRwb2ludCwKKyAgamJ5dGVBcnJheSBidWZmZXIsIGludCBsZW5ndGgsIGludCB0aW1lb3V0CispIHsKKyAgaWYgKHVzYkZpbmRDb25uZWN0aW9uQ2xhc3MoZW52KSkgeworICAgIHN0YXRpYyBqbWV0aG9kSUQgbWV0aG9kID0gMDsKKworICAgIGlmIChmaW5kSmF2YUluc3RhbmNlTWV0aG9kKGVudiwgJm1ldGhvZCwgdXNiQ29ubmVjdGlvbkNsYXNzLCAiYnVsa1RyYW5zZmVyIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKQVZBX1NJR19NRVRIT0QoSkFWQV9TSUdfSU5ULAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKQVZBX1NJR19VU0JfRU5EUE9JTlQgLy8gZW5kcG9pbnQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSkFWQV9TSUdfQVJSQVkoSkFWQV9TSUdfQllURSkgLy8gYnVmZmVyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpBVkFfU0lHX0lOVCAvLyBsZW5ndGgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSkFWQV9TSUdfSU5UIC8vIHRpbWVvdXQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApKSkgeworICAgICAgamludCByZXN1bHQgPSAoKmVudiktPkNhbGxJbnRNZXRob2QoZW52LCBjb25uZWN0aW9uLCBtZXRob2QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmRwb2ludCwgYnVmZmVyLCBsZW5ndGgsIHRpbWVvdXQpOworCisgICAgICBpZiAoIWNsZWFySmF2YUV4Y2VwdGlvbihlbnYsIDEpKSByZXR1cm4gcmVzdWx0OworICAgICAgZXJybm8gPSBFSU87CisgICAgfQorICB9CisKKyAgcmV0dXJuIC0xOworfQorCitzdGF0aWMgdm9pZAordXNiQ2xvc2VEZXZpY2VDb25uZWN0aW9uIChKTklFbnYgKmVudiwgam9iamVjdCBjb25uZWN0aW9uKSB7CisgIGlmICh1c2JGaW5kQ29ubmVjdGlvbkNsYXNzKGVudikpIHsKKyAgICBzdGF0aWMgam1ldGhvZElEIG1ldGhvZCA9IDA7CisKKyAgICBpZiAoZmluZEphdmFJbnN0YW5jZU1ldGhvZChlbnYsICZtZXRob2QsIHVzYkNvbm5lY3Rpb25DbGFzcywgImNsb3NlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKQVZBX1NJR19NRVRIT0QoSkFWQV9TSUdfVk9JRCwgKSkpIHsKKyAgICAgICgqZW52KS0+Q2FsbFZvaWRNZXRob2QoZW52LCBjb25uZWN0aW9uLCBtZXRob2QpOworICAgICAgY2xlYXJKYXZhRXhjZXB0aW9uKGVudiwgMSk7CisgICAgfQorICB9Cit9CisKK3N0YXRpYyBpbnQKK3VzYk9wZW5Db25uZWN0aW9uIChVc2JEZXZpY2VFeHRlbnNpb24gKmRldngpIHsKKyAgaWYgKGRldngtPmNvbm5lY3Rpb24pIHJldHVybiAxOworCisgIHsKKyAgICBjb25zdCBVc2JIb3N0RGV2aWNlICpob3N0ID0gZGV2eC0+aG9zdDsKKyAgICBqb2JqZWN0IGNvbm5lY3Rpb24gPSB1c2JPcGVuRGV2aWNlQ29ubmVjdGlvbihob3N0LT5lbnYsIGhvc3QtPmRldmljZSk7CisKKyAgICBpZiAoY29ubmVjdGlvbikgeworICAgICAgZGV2eC0+Y29ubmVjdGlvbiA9ICgqaG9zdC0+ZW52KS0+TmV3R2xvYmFsUmVmKGhvc3QtPmVudiwgY29ubmVjdGlvbik7CisKKyAgICAgICgqaG9zdC0+ZW52KS0+RGVsZXRlTG9jYWxSZWYoaG9zdC0+ZW52LCBjb25uZWN0aW9uKTsKKyAgICAgIGNvbm5lY3Rpb24gPSBOVUxMOworCisgICAgICBpZiAoZGV2eC0+Y29ubmVjdGlvbikgcmV0dXJuIDE7CisgICAgICBsb2dNYWxsb2NFcnJvcigpOworICAgICAgY2xlYXJKYXZhRXhjZXB0aW9uKGhvc3QtPmVudiwgMCk7CisgICAgfQorICB9CisKKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK3VzYkdldEZpbGVEZXNjcmlwdG9yIChVc2JEZXZpY2VFeHRlbnNpb24gKmRldngpIHsKKyAgaWYgKGRldngtPmZpbGVEZXNjcmlwdG9yICE9IElOVkFMSURfRklMRV9ERVNDUklQVE9SKSByZXR1cm4gMTsKKyAgSk5JRW52ICplbnYgPSBkZXZ4LT5ob3N0LT5lbnY7CisKKyAgaWYgKHVzYkZpbmRDb25uZWN0aW9uQ2xhc3MoZW52KSkgeworICAgIHN0YXRpYyBqbWV0aG9kSUQgbWV0aG9kID0gMDsKKworICAgIGlmIChmaW5kSmF2YUluc3RhbmNlTWV0aG9kKGVudiwgJm1ldGhvZCwgdXNiQ29ubmVjdGlvbkNsYXNzLCAiZ2V0RmlsZURlc2NyaXB0b3IiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpBVkFfU0lHX01FVEhPRChKQVZBX1NJR19JTlQsICkpKSB7CisgICAgICBqaW50IGZpbGVEZXNjcmlwdG9yID0gKCplbnYpLT5DYWxsSW50TWV0aG9kKGVudiwgZGV2eC0+Y29ubmVjdGlvbiwgbWV0aG9kKTsKKworICAgICAgaWYgKCFjbGVhckphdmFFeGNlcHRpb24oZW52LCAxKSkgeworICAgICAgICBkZXZ4LT5maWxlRGVzY3JpcHRvciA9IGZpbGVEZXNjcmlwdG9yOworICAgICAgICByZXR1cm4gMTsKKyAgICAgIH0KKyAgICB9CisgIH0KKworICBlcnJubyA9IEVJTzsKKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkCit1c2JVbnNldEludGVyZmFjZSAoVXNiRGV2aWNlRXh0ZW5zaW9uICpkZXZ4KSB7CisgIGlmIChkZXZ4LT5pbnRlcmZhY2UpIHsKKyAgICBKTklFbnYgKmVudiA9IGRldngtPmhvc3QtPmVudjsKKworICAgICgqZW52KS0+RGVsZXRlR2xvYmFsUmVmKGVudiwgZGV2eC0+aW50ZXJmYWNlKTsKKyAgICBkZXZ4LT5pbnRlcmZhY2UgPSBOVUxMOworICB9Cit9CisKK3N0YXRpYyBpbnQKK3VzYlNldEludGVyZmFjZSAoVXNiRGV2aWNlRXh0ZW5zaW9uICpkZXZ4LCB1aW50OF90IGlkZW50aWZpZXIpIHsKKyAgSk5JRW52ICplbnYgPSBkZXZ4LT5ob3N0LT5lbnY7CisKKyAgaWYgKGRldngtPmludGVyZmFjZSkgeworICAgIHVpbnQ4X3QgaWQ7CisKKyAgICBpZiAoIXVzYkdldEludGVyZmFjZUlkZW50aWZpZXIoZW52LCAmaWQsIGRldngtPmludGVyZmFjZSkpIHJldHVybiAwOworICAgIGlmIChpZCA9PSBpZGVudGlmaWVyKSByZXR1cm4gMTsKKyAgfQorCisgIHsKKyAgICBqb2JqZWN0IGludGVyZmFjZSA9IHVzYkdldERldmljZUludGVyZmFjZShlbnYsIGRldngtPmhvc3QtPmRldmljZSwgaWRlbnRpZmllcik7CisKKyAgICBpZiAoaW50ZXJmYWNlKSB7CisgICAgICB1c2JVbnNldEludGVyZmFjZShkZXZ4KTsKKyAgICAgIGRldngtPmludGVyZmFjZSA9ICgqZW52KS0+TmV3R2xvYmFsUmVmKGVudiwgaW50ZXJmYWNlKTsKKworICAgICAgKCplbnYpLT5EZWxldGVMb2NhbFJlZihlbnYsIGludGVyZmFjZSk7CisgICAgICBpbnRlcmZhY2UgPSBOVUxMOworCisgICAgICBpZiAoZGV2eC0+aW50ZXJmYWNlKSByZXR1cm4gMTsKKyAgICAgIGxvZ01hbGxvY0Vycm9yKCk7CisgICAgfQorICB9CisKKyAgcmV0dXJuIDA7Cit9CisKK2ludAordXNiRGlzYWJsZUF1dG9zdXNwZW5kIChVc2JEZXZpY2UgKmRldmljZSkgeworICBsb2dVbnN1cHBvcnRlZEZ1bmN0aW9uKCk7CisgIHJldHVybiAwOworfQorCitpbnQKK3VzYlNldENvbmZpZ3VyYXRpb24gKFVzYkRldmljZSAqZGV2aWNlLCB1bnNpZ25lZCBjaGFyIGNvbmZpZ3VyYXRpb24pIHsKKyAgbG9nTWVzc2FnZShMT0dfQ0FURUdPUlkoVVNCX0lPKSwgInNldHRpbmcgY29uZmlndXJhdGlvbjogJXUiLCBjb25maWd1cmF0aW9uKTsKKyAgaWYgKGNvbmZpZ3VyYXRpb24gPT0gMSkgcmV0dXJuIDE7CisKKyAgbG9nVW5zdXBwb3J0ZWRGdW5jdGlvbigpOworICByZXR1cm4gMDsKK30KKworaW50Cit1c2JDbGFpbUludGVyZmFjZSAoVXNiRGV2aWNlICpkZXZpY2UsIHVuc2lnbmVkIGNoYXIgaW50ZXJmYWNlKSB7CisgIFVzYkRldmljZUV4dGVuc2lvbiAqZGV2eCA9IGRldmljZS0+ZXh0ZW5zaW9uOworCisgIGxvZ01lc3NhZ2UoTE9HX0NBVEVHT1JZKFVTQl9JTyksICJjbGFpbWluZyBpbnRlcmZhY2U6ICV1IiwgaW50ZXJmYWNlKTsKKworICBpZiAodXNiU2V0SW50ZXJmYWNlKGRldngsIGludGVyZmFjZSkpIHsKKyAgICBpZiAodXNiT3BlbkNvbm5lY3Rpb24oZGV2eCkpIHsKKyAgICAgIGlmICh1c2JEb0NsYWltSW50ZXJmYWNlKGRldngtPmhvc3QtPmVudiwgZGV2eC0+Y29ubmVjdGlvbiwgZGV2eC0+aW50ZXJmYWNlKSkgeworICAgICAgICByZXR1cm4gMTsKKyAgICAgIH0KKyAgICB9CisgIH0KKworICByZXR1cm4gMDsKK30KKworaW50Cit1c2JSZWxlYXNlSW50ZXJmYWNlIChVc2JEZXZpY2UgKmRldmljZSwgdW5zaWduZWQgY2hhciBpbnRlcmZhY2UpIHsKKyAgVXNiRGV2aWNlRXh0ZW5zaW9uICpkZXZ4ID0gZGV2aWNlLT5leHRlbnNpb247CisKKyAgbG9nTWVzc2FnZShMT0dfQ0FURUdPUlkoVVNCX0lPKSwgInJlbGVhc2luZyBpbnRlcmZhY2U6ICV1IiwgaW50ZXJmYWNlKTsKKworICBpZiAodXNiU2V0SW50ZXJmYWNlKGRldngsIGludGVyZmFjZSkpIHsKKyAgICBpZiAodXNiT3BlbkNvbm5lY3Rpb24oZGV2eCkpIHsKKyAgICAgIGlmICh1c2JEb1JlbGVhc2VJbnRlcmZhY2UoZGV2eC0+aG9zdC0+ZW52LCBkZXZ4LT5jb25uZWN0aW9uLCBkZXZ4LT5pbnRlcmZhY2UpKSB7CisgICAgICAgIHJldHVybiAxOworICAgICAgfQorICAgIH0KKyAgfQorCisgIHJldHVybiAwOworfQorCitpbnQKK3VzYlNldEFsdGVybmF0aXZlICgKKyAgVXNiRGV2aWNlICpkZXZpY2UsCisgIHVuc2lnbmVkIGNoYXIgaW50ZXJmYWNlLAorICB1bnNpZ25lZCBjaGFyIGFsdGVybmF0aXZlCispIHsKKyAgbG9nTWVzc2FnZShMT0dfQ0FURUdPUlkoVVNCX0lPKSwgInNldHRpbmcgYWx0ZXJuYXRpdmU6ICV1WyV1XSIsIGludGVyZmFjZSwgYWx0ZXJuYXRpdmUpOworICBpZiAoYWx0ZXJuYXRpdmUgPT0gMCkgcmV0dXJuIDE7CisKKyAgbG9nVW5zdXBwb3J0ZWRGdW5jdGlvbigpOworICByZXR1cm4gMDsKK30KKworaW50Cit1c2JSZXNldERldmljZSAoVXNiRGV2aWNlICpkZXZpY2UpIHsKKyAgVXNiRGV2aWNlRXh0ZW5zaW9uICpkZXZ4ID0gZGV2aWNlLT5leHRlbnNpb247CisKKyAgbG9nTWVzc2FnZShMT0dfQ0FURUdPUlkoVVNCX0lPKSwgInJlc2V0IGRldmljZSIpOworCisgIGlmICh1c2JHZXRGaWxlRGVzY3JpcHRvcihkZXZ4KSkgeworICAgIHVuc2lnbmVkIGludCBhcmcgPSAwOworICAgIGlmIChpb2N0bChkZXZ4LT5maWxlRGVzY3JpcHRvciwgVVNCREVWRlNfUkVTRVQsICZhcmcpICE9IC0xKSByZXR1cm4gMTsKKyAgICBsb2dTeXN0ZW1FcnJvcigiVVNCIGRldmljZSByZXNldCIpOworICB9CisKKyAgcmV0dXJuIDA7Cit9CisKK2ludAordXNiQ2xlYXJIYWx0IChVc2JEZXZpY2UgKmRldmljZSwgdW5zaWduZWQgY2hhciBlbmRwb2ludEFkZHJlc3MpIHsKKyAgVXNiRGV2aWNlRXh0ZW5zaW9uICpkZXZ4ID0gZGV2aWNlLT5leHRlbnNpb247CisKKyAgbG9nTWVzc2FnZShMT0dfQ0FURUdPUlkoVVNCX0lPKSwgImNsZWFyIGhhbHQ6ICUwMlgiLCBlbmRwb2ludEFkZHJlc3MpOworCisgIGlmICh1c2JHZXRGaWxlRGVzY3JpcHRvcihkZXZ4KSkgeworICAgIHVuc2lnbmVkIGludCBhcmcgPSBlbmRwb2ludEFkZHJlc3M7CisgICAgaWYgKGlvY3RsKGRldngtPmZpbGVEZXNjcmlwdG9yLCBVU0JERVZGU19DTEVBUl9IQUxULCAmYXJnKSAhPSAtMSkgcmV0dXJuIDE7CisgICAgbG9nU3lzdGVtRXJyb3IoIlVTQiBlbmRwb2ludCBjbGVhciIpOworICB9CisKKyAgcmV0dXJuIDA7Cit9CisKK3NzaXplX3QKK3VzYkNvbnRyb2xUcmFuc2ZlciAoCisgIFVzYkRldmljZSAqZGV2aWNlLAorICB1aW50OF90IGRpcmVjdGlvbiwKKyAgdWludDhfdCByZWNpcGllbnQsCisgIHVpbnQ4X3QgdHlwZSwKKyAgdWludDhfdCByZXF1ZXN0LAorICB1aW50MTZfdCB2YWx1ZSwKKyAgdWludDE2X3QgaW5kZXgsCisgIHZvaWQgKmJ1ZmZlciwKKyAgdWludDE2X3QgbGVuZ3RoLAorICBpbnQgdGltZW91dAorKSB7CisgIHNzaXplX3QgcmVzdWx0ID0gLTE7CisgIFVzYkRldmljZUV4dGVuc2lvbiAqZGV2eCA9IGRldmljZS0+ZXh0ZW5zaW9uOworCisgIGlmICh1c2JPcGVuQ29ubmVjdGlvbihkZXZ4KSkgeworICAgIGNvbnN0IFVzYkhvc3REZXZpY2UgKmhvc3QgPSBkZXZ4LT5ob3N0OworICAgIGpieXRlQXJyYXkgYnl0ZXMgPSAoKmhvc3QtPmVudiktPk5ld0J5dGVBcnJheShob3N0LT5lbnYsIGxlbmd0aCk7CisKKyAgICBpZiAoYnl0ZXMpIHsKKyAgICAgIGlmIChkaXJlY3Rpb24gPT0gVXNiQ29udHJvbERpcmVjdGlvbl9PdXRwdXQpIHsKKyAgICAgICAgKCpob3N0LT5lbnYpLT5TZXRCeXRlQXJyYXlSZWdpb24oaG9zdC0+ZW52LCBieXRlcywgMCwgbGVuZ3RoLCBidWZmZXIpOworICAgICAgICBpZiAobGVuZ3RoKSBsb2dCeXRlcyhMT0dfQ0FURUdPUlkoVVNCX0lPKSwgImNvbnRyb2wgb3V0cHV0IiwgYnVmZmVyLCBsZW5ndGgpOworICAgICAgfQorCisgICAgICByZXN1bHQgPSB1c2JEb0NvbnRyb2xUcmFuc2Zlcihob3N0LT5lbnYsIGRldngtPmNvbm5lY3Rpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXJlY3Rpb24gfCByZWNpcGllbnQgfCB0eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdCwgdmFsdWUsIGluZGV4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnl0ZXMsIGxlbmd0aCwgdGltZW91dCk7CisKKyAgICAgIGlmIChkaXJlY3Rpb24gPT0gVXNiQ29udHJvbERpcmVjdGlvbl9JbnB1dCkgeworICAgICAgICBpZiAocmVzdWx0ID4gMCkgeworICAgICAgICAgICgqaG9zdC0+ZW52KS0+R2V0Qnl0ZUFycmF5UmVnaW9uKGhvc3QtPmVudiwgYnl0ZXMsIDAsIHJlc3VsdCwgYnVmZmVyKTsKKyAgICAgICAgICBsb2dCeXRlcyhMT0dfQ0FURUdPUlkoVVNCX0lPKSwgImNvbnRyb2wgaW5wdXQiLCBidWZmZXIsIHJlc3VsdCk7CisgICAgICAgIH0KKyAgICAgIH0KKworICAgICAgKCpob3N0LT5lbnYpLT5EZWxldGVMb2NhbFJlZihob3N0LT5lbnYsIGJ5dGVzKTsKKyAgICB9IGVsc2UgeworICAgICAgbG9nTWFsbG9jRXJyb3IoKTsKKyAgICB9CisgIH0KKworICBpZiAocmVzdWx0ID09IC0xKSBsb2dTeXN0ZW1FcnJvcigiVVNCIGNvbnRyb2wgdHJhbnNmZXIiKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCAqCit1c2JTdWJtaXRSZXF1ZXN0ICgKKyAgVXNiRGV2aWNlICpkZXZpY2UsCisgIHVuc2lnbmVkIGNoYXIgZW5kcG9pbnRBZGRyZXNzLAorICB2b2lkICpidWZmZXIsCisgIHNpemVfdCBsZW5ndGgsCisgIHZvaWQgKmNvbnRleHQKKykgeworICBsb2dVbnN1cHBvcnRlZEZ1bmN0aW9uKCk7CisgIHJldHVybiBOVUxMOworfQorCitpbnQKK3VzYkNhbmNlbFJlcXVlc3QgKFVzYkRldmljZSAqZGV2aWNlLCB2b2lkICpyZXF1ZXN0KSB7CisgIGxvZ1Vuc3VwcG9ydGVkRnVuY3Rpb24oKTsKKyAgcmV0dXJuIDA7Cit9CisKK3ZvaWQgKgordXNiUmVhcFJlc3BvbnNlICgKKyAgVXNiRGV2aWNlICpkZXZpY2UsCisgIHVuc2lnbmVkIGNoYXIgZW5kcG9pbnRBZGRyZXNzLAorICBVc2JSZXNwb25zZSAqcmVzcG9uc2UsCisgIGludCB3YWl0CispIHsKKyAgbG9nVW5zdXBwb3J0ZWRGdW5jdGlvbigpOworICByZXR1cm4gTlVMTDsKK30KKworaW50Cit1c2JNb25pdG9ySW5wdXRFbmRwb2ludCAoCisgIFVzYkRldmljZSAqZGV2aWNlLCB1bnNpZ25lZCBjaGFyIGVuZHBvaW50TnVtYmVyLAorICBBc3luY01vbml0b3JDYWxsYmFjayAqY2FsbGJhY2ssIHZvaWQgKmRhdGEKKykgeworICByZXR1cm4gMDsKK30KKworc3NpemVfdAordXNiUmVhZEVuZHBvaW50ICgKKyAgVXNiRGV2aWNlICpkZXZpY2UsCisgIHVuc2lnbmVkIGNoYXIgZW5kcG9pbnROdW1iZXIsCisgIHZvaWQgKmJ1ZmZlciwKKyAgc2l6ZV90IGxlbmd0aCwKKyAgaW50IHRpbWVvdXQKKykgeworICBzc2l6ZV90IHJlc3VsdCA9IC0xOworICBVc2JFbmRwb2ludCAqZW5kcG9pbnQgPSB1c2JHZXRJbnB1dEVuZHBvaW50KGRldmljZSwgZW5kcG9pbnROdW1iZXIpOworCisgIGxvZ01lc3NhZ2UoTE9HX0NBVEVHT1JZKFVTQl9JTyksICJyZWFkaW5nIGVuZHBvaW50OiAldSIsIGVuZHBvaW50TnVtYmVyKTsKKworICBpZiAoZW5kcG9pbnQpIHsKKyAgICBVc2JEZXZpY2VFeHRlbnNpb24gKmRldnggPSBkZXZpY2UtPmV4dGVuc2lvbjsKKworICAgIGlmICh1c2JPcGVuQ29ubmVjdGlvbihkZXZ4KSkgeworICAgICAgY29uc3QgVXNiSG9zdERldmljZSAqaG9zdCA9IGRldngtPmhvc3Q7CisgICAgICBKTklFbnYgKmVudiA9IGhvc3QtPmVudjsKKyAgICAgIGpieXRlQXJyYXkgYnl0ZXMgPSAoKmVudiktPk5ld0J5dGVBcnJheShlbnYsIGxlbmd0aCk7CisKKyAgICAgIGlmIChieXRlcykgeworICAgICAgICBVc2JFbmRwb2ludEV4dGVuc2lvbiAqZXB0eCA9IGVuZHBvaW50LT5leHRlbnNpb247CisKKyAgICAgICAgcmVzdWx0ID0gdXNiRG9CdWxrVHJhbnNmZXIoZW52LCBkZXZ4LT5jb25uZWN0aW9uLCBlcHR4LT5vYmplY3QsIGJ5dGVzLCBsZW5ndGgsIHRpbWVvdXQpOworICAgICAgICBpZiAocmVzdWx0ID4gMCkgKCplbnYpLT5HZXRCeXRlQXJyYXlSZWdpb24oZW52LCBieXRlcywgMCwgcmVzdWx0LCBidWZmZXIpOworCisgICAgICAgICgqZW52KS0+RGVsZXRlTG9jYWxSZWYoZW52LCBieXRlcyk7CisgICAgICB9IGVsc2UgeworICAgICAgICBsb2dNYWxsb2NFcnJvcigpOworICAgICAgICBjbGVhckphdmFFeGNlcHRpb24oZW52LCAwKTsKKyAgICAgIH0KKyAgICB9CisgIH0KKworICBpZiAocmVzdWx0ID49IDApIHsKKyAgICBpZiAoIXVzYkFwcGx5SW5wdXRGaWx0ZXJzKGVuZHBvaW50LCBidWZmZXIsIGxlbmd0aCwgJnJlc3VsdCkpIHsKKyAgICAgIGVycm5vID0gRUlPOworICAgICAgcmVzdWx0ID0gLTE7CisgICAgfQorICB9CisKKyAgaWYgKHJlc3VsdCA9PSAtMSkgeworICAgIGlmIChlcnJubyA9PSBFVElNRURPVVQpIGVycm5vID0gRUFHQUlOOworICAgIGlmIChlcnJubyAhPSBFQUdBSU4pIGxvZ1N5c3RlbUVycm9yKCJVU0IgYnVsayByZWFkIik7CisgIH0KKworICByZXR1cm4gcmVzdWx0OworfQorCitzc2l6ZV90Cit1c2JXcml0ZUVuZHBvaW50ICgKKyAgVXNiRGV2aWNlICpkZXZpY2UsCisgIHVuc2lnbmVkIGNoYXIgZW5kcG9pbnROdW1iZXIsCisgIGNvbnN0IHZvaWQgKmJ1ZmZlciwKKyAgc2l6ZV90IGxlbmd0aCwKKyAgaW50IHRpbWVvdXQKKykgeworICBzc2l6ZV90IHJlc3VsdCA9IC0xOworICBVc2JFbmRwb2ludCAqZW5kcG9pbnQgPSB1c2JHZXRPdXRwdXRFbmRwb2ludChkZXZpY2UsIGVuZHBvaW50TnVtYmVyKTsKKworICBpZiAoZW5kcG9pbnQpIHsKKyAgICBVc2JEZXZpY2VFeHRlbnNpb24gKmRldnggPSBkZXZpY2UtPmV4dGVuc2lvbjsKKworICAgIHVzYkxvZ0VuZHBvaW50RGF0YShlbmRwb2ludCwgIm91dHB1dCIsIGJ1ZmZlciwgbGVuZ3RoKTsKKworICAgIGlmICh1c2JPcGVuQ29ubmVjdGlvbihkZXZ4KSkgeworICAgICAgY29uc3QgVXNiSG9zdERldmljZSAqaG9zdCA9IGRldngtPmhvc3Q7CisgICAgICBKTklFbnYgKmVudiA9IGhvc3QtPmVudjsKKyAgICAgIGpieXRlQXJyYXkgYnl0ZXMgPSAoKmVudiktPk5ld0J5dGVBcnJheShlbnYsIGxlbmd0aCk7CisKKyAgICAgIGlmIChieXRlcykgeworICAgICAgICBVc2JFbmRwb2ludEV4dGVuc2lvbiAqZXB0eCA9IGVuZHBvaW50LT5leHRlbnNpb247CisKKyAgICAgICAgKCplbnYpLT5TZXRCeXRlQXJyYXlSZWdpb24oZW52LCBieXRlcywgMCwgbGVuZ3RoLCBidWZmZXIpOworICAgICAgICByZXN1bHQgPSB1c2JEb0J1bGtUcmFuc2ZlcihlbnYsIGRldngtPmNvbm5lY3Rpb24sIGVwdHgtPm9iamVjdCwgYnl0ZXMsIGxlbmd0aCwgdGltZW91dCk7CisKKyAgICAgICAgKCplbnYpLT5EZWxldGVMb2NhbFJlZihlbnYsIGJ5dGVzKTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIGxvZ01hbGxvY0Vycm9yKCk7CisgICAgICAgIGNsZWFySmF2YUV4Y2VwdGlvbihlbnYsIDApOworICAgICAgfQorICAgIH0KKyAgfQorCisgIGlmIChyZXN1bHQgPT0gLTEpIGxvZ1N5c3RlbUVycm9yKCJVU0IgYnVsayB3cml0ZSIpOworICByZXR1cm4gcmVzdWx0OworfQorCitpbnQKK3VzYlJlYWREZXZpY2VEZXNjcmlwdG9yIChVc2JEZXZpY2UgKmRldmljZSkgeworICBkZXZpY2UtPmRlc2NyaXB0b3IgPSBkZXZpY2UtPmV4dGVuc2lvbi0+aG9zdC0+ZGVzY3JpcHRvcjsKKyAgcmV0dXJuIDE7Cit9CisKK2ludAordXNiQWxsb2NhdGVFbmRwb2ludEV4dGVuc2lvbiAoVXNiRW5kcG9pbnQgKmVuZHBvaW50KSB7CisgIFVzYkRldmljZSAqZGV2aWNlID0gZW5kcG9pbnQtPmRldmljZTsKKyAgY29uc3QgVXNiSW50ZXJmYWNlRGVzY3JpcHRvciAqaW50ZXJmYWNlID0gZW5kcG9pbnQtPmludGVyZmFjZTsKKworICBVc2JEZXZpY2VFeHRlbnNpb24gKmRldnggPSBkZXZpY2UtPmV4dGVuc2lvbjsKKyAgY29uc3QgVXNiSG9zdERldmljZSAqaG9zdCA9IGRldngtPmhvc3Q7CisgIEpOSUVudiAqZW52ID0gaG9zdC0+ZW52OworCisgIGlmICh1c2JTZXRJbnRlcmZhY2UoZGV2eCwgaW50ZXJmYWNlLT5iSW50ZXJmYWNlTnVtYmVyKSkgeworICAgIGpvYmplY3QgbG9jYWxSZWZlcmVuY2UgPSB1c2JHZXRJbnRlcmZhY2VFbmRwb2ludChlbnYsIGRldngtPmludGVyZmFjZSwgZW5kcG9pbnQtPmRlc2NyaXB0b3ItPmJFbmRwb2ludEFkZHJlc3MpOworCisgICAgaWYgKGxvY2FsUmVmZXJlbmNlKSB7CisgICAgICBqb2JqZWN0IGdsb2JhbFJlZmVyZW5jZSA9ICgqZW52KS0+TmV3R2xvYmFsUmVmKGVudiwgbG9jYWxSZWZlcmVuY2UpOworCisgICAgICAoKmVudiktPkRlbGV0ZUxvY2FsUmVmKGVudiwgbG9jYWxSZWZlcmVuY2UpOworICAgICAgbG9jYWxSZWZlcmVuY2UgPSBOVUxMOworCisgICAgICBpZiAoZ2xvYmFsUmVmZXJlbmNlKSB7CisgICAgICAgIFVzYkVuZHBvaW50RXh0ZW5zaW9uICplcHR4ID0gbWFsbG9jKHNpemVvZigqZXB0eCkpOworCisgICAgICAgIGlmIChlcHR4KSB7CisgICAgICAgICAgbWVtc2V0KGVwdHgsIDAsIHNpemVvZigqZXB0eCkpOworICAgICAgICAgIGVwdHgtPmVuZHBvaW50ID0gZW5kcG9pbnQ7CisgICAgICAgICAgZXB0eC0+b2JqZWN0ID0gZ2xvYmFsUmVmZXJlbmNlOworCisgICAgICAgICAgZW5kcG9pbnQtPmV4dGVuc2lvbiA9IGVwdHg7CisgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgbG9nTWFsbG9jRXJyb3IoKTsKKyAgICAgICAgfQorCisgICAgICAgICgqZW52KS0+RGVsZXRlR2xvYmFsUmVmKGVudiwgZ2xvYmFsUmVmZXJlbmNlKTsKKyAgICAgICAgZ2xvYmFsUmVmZXJlbmNlID0gTlVMTDsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIGxvZ01hbGxvY0Vycm9yKCk7CisgICAgICAgIGNsZWFySmF2YUV4Y2VwdGlvbihlbnYsIDApOworICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICBsb2dNZXNzYWdlKExPR19FUlIsICJjb3VsZG4ndCBnZXQgZW5kcG9pbnQgb2JqZWN0Iik7CisgICAgICBlcnJubyA9IEVJTzsKKyAgICB9CisgIH0gZWxzZSB7CisgICAgZXJybm8gPSBFTk9TWVM7CisgIH0KKworICByZXR1cm4gMDsKK30KKwordm9pZAordXNiRGVhbGxvY2F0ZUVuZHBvaW50RXh0ZW5zaW9uIChVc2JFbmRwb2ludEV4dGVuc2lvbiAqZXB0eCkgeworICBVc2JFbmRwb2ludCAqZW5kcG9pbnQgPSBlcHR4LT5lbmRwb2ludDsKKyAgVXNiRGV2aWNlICpkZXZpY2UgPSBlbmRwb2ludC0+ZGV2aWNlOworICBVc2JEZXZpY2VFeHRlbnNpb24gKmRldnggPSBkZXZpY2UtPmV4dGVuc2lvbjsKKyAgY29uc3QgVXNiSG9zdERldmljZSAqaG9zdCA9IGRldngtPmhvc3Q7CisgIEpOSUVudiAqZW52ID0gaG9zdC0+ZW52OworCisgIGlmIChlcHR4LT5vYmplY3QpIHsKKyAgICAoKmVudiktPkRlbGV0ZUdsb2JhbFJlZihlbnYsIGVwdHgtPm9iamVjdCk7CisgICAgZXB0eC0+b2JqZWN0ID0gTlVMTDsKKyAgfQorCisgIGZyZWUoZXB0eCk7Cit9CisKK3ZvaWQKK3VzYkRlYWxsb2NhdGVEZXZpY2VFeHRlbnNpb24gKFVzYkRldmljZUV4dGVuc2lvbiAqZGV2eCkgeworICB1c2JVbnNldEludGVyZmFjZShkZXZ4KTsKKworICBpZiAoZGV2eC0+Y29ubmVjdGlvbikgeworICAgIGNvbnN0IFVzYkhvc3REZXZpY2UgKmhvc3QgPSBkZXZ4LT5ob3N0OworCisgICAgdXNiQ2xvc2VEZXZpY2VDb25uZWN0aW9uKGhvc3QtPmVudiwgZGV2eC0+Y29ubmVjdGlvbik7CisgICAgKCpob3N0LT5lbnYpLT5EZWxldGVHbG9iYWxSZWYoaG9zdC0+ZW52LCBkZXZ4LT5jb25uZWN0aW9uKTsKKyAgICBkZXZ4LT5jb25uZWN0aW9uID0gTlVMTDsKKyAgfQorCisgIGZyZWUoZGV2eCk7Cit9CisKK3N0YXRpYyB2b2lkCit1c2JEZWFsbG9jYXRlSG9zdERldmljZSAodm9pZCAqaXRlbSwgdm9pZCAqZGF0YSkgeworICBVc2JIb3N0RGV2aWNlICpob3N0ID0gaXRlbTsKKworICAoKmhvc3QtPmVudiktPkRlbGV0ZUdsb2JhbFJlZihob3N0LT5lbnYsIGhvc3QtPmRldmljZSk7CisgIGZyZWUoaG9zdCk7Cit9CisKK3N0YXRpYyBpbnQKK3VzYkFkZEhvc3REZXZpY2UgKEpOSUVudiAqZW52LCBqb2JqZWN0IGRldmljZSkgeworICBVc2JIb3N0RGV2aWNlICpob3N0OworCisgIGlmICgoaG9zdCA9IG1hbGxvYyhzaXplb2YoKmhvc3QpKSkpIHsKKyAgICBtZW1zZXQoaG9zdCwgMCwgc2l6ZW9mKCpob3N0KSk7CisgICAgaG9zdC0+ZW52ID0gZW52OworCisgICAgaG9zdC0+ZGVzY3JpcHRvci5iTGVuZ3RoID0gVXNiRGVzY3JpcHRvclNpemVfRGV2aWNlOworICAgIGhvc3QtPmRlc2NyaXB0b3IuYkRlc2NyaXB0b3JUeXBlID0gVXNiRGVzY3JpcHRvclR5cGVfRGV2aWNlOworICAgIGhvc3QtPmRlc2NyaXB0b3IuYk51bUNvbmZpZ3VyYXRpb25zID0gMTsKKworICAgIGlmICgoaG9zdC0+ZGV2aWNlID0gKCpob3N0LT5lbnYpLT5OZXdHbG9iYWxSZWYoaG9zdC0+ZW52LCBkZXZpY2UpKSkgeworICAgICAgaWYgKHVzYkdldERldmljZVZlbmRvcihob3N0LT5lbnYsIGhvc3QtPmRldmljZSwgJmhvc3QtPmRlc2NyaXB0b3IpKSB7CisgICAgICAgIGlmICh1c2JHZXREZXZpY2VQcm9kdWN0KGhvc3QtPmVudiwgaG9zdC0+ZGV2aWNlLCAmaG9zdC0+ZGVzY3JpcHRvcikpIHsKKyAgICAgICAgICBpZiAodXNiR2V0RGV2aWNlQ2xhc3MoaG9zdC0+ZW52LCBob3N0LT5kZXZpY2UsICZob3N0LT5kZXNjcmlwdG9yKSkgeworICAgICAgICAgICAgaWYgKHVzYkdldERldmljZVN1YmNsYXNzKGhvc3QtPmVudiwgaG9zdC0+ZGV2aWNlLCAmaG9zdC0+ZGVzY3JpcHRvcikpIHsKKyAgICAgICAgICAgICAgaWYgKHVzYkdldERldmljZVByb3RvY29sKGhvc3QtPmVudiwgaG9zdC0+ZGV2aWNlLCAmaG9zdC0+ZGVzY3JpcHRvcikpIHsKKyAgICAgICAgICAgICAgICBpZiAoZW5xdWV1ZUl0ZW0odXNiSG9zdERldmljZXMsIGhvc3QpKSB7CisgICAgICAgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgIH0KKworICAgICAgKCpob3N0LT5lbnYpLT5EZWxldGVHbG9iYWxSZWYoaG9zdC0+ZW52LCBob3N0LT5kZXZpY2UpOworICAgIH0KKworICAgIGZyZWUoaG9zdCk7CisgIH0gZWxzZSB7CisgICAgbG9nTWFsbG9jRXJyb3IoKTsKKyAgfQorCisgIHJldHVybiAwOworfQorCit0eXBlZGVmIHN0cnVjdCB7CisgIFVzYkRldmljZUNob29zZXIgKmNob29zZXI7CisgIHZvaWQgKmRhdGE7CisgIFVzYkRldmljZSAqZGV2aWNlOworfSBVc2JUZXN0SG9zdERldmljZURhdGE7CisKK3N0YXRpYyBpbnQKK3VzYlRlc3RIb3N0RGV2aWNlICh2b2lkICppdGVtLCB2b2lkICpkYXRhKSB7CisgIGNvbnN0IFVzYkhvc3REZXZpY2UgKmhvc3QgPSBpdGVtOworICBVc2JUZXN0SG9zdERldmljZURhdGEgKnRlc3QgPSBkYXRhOworICBVc2JEZXZpY2VFeHRlbnNpb24gKmRldng7CisKKyAgaWYgKChkZXZ4ID0gbWFsbG9jKHNpemVvZigqZGV2eCkpKSkgeworICAgIG1lbXNldChkZXZ4LCAwLCBzaXplb2YoKmRldngpKTsKKyAgICBkZXZ4LT5ob3N0ID0gaG9zdDsKKyAgICBkZXZ4LT5jb25uZWN0aW9uID0gTlVMTDsKKyAgICBkZXZ4LT5pbnRlcmZhY2UgPSBOVUxMOworICAgIGRldngtPmZpbGVEZXNjcmlwdG9yID0gSU5WQUxJRF9GSUxFX0RFU0NSSVBUT1I7CisKKyAgICBpZiAoKHRlc3QtPmRldmljZSA9IHVzYlRlc3REZXZpY2UoZGV2eCwgdGVzdC0+Y2hvb3NlciwgdGVzdC0+ZGF0YSkpKSByZXR1cm4gMTsKKworICAgIHVzYkRlYWxsb2NhdGVEZXZpY2VFeHRlbnNpb24oZGV2eCk7CisgIH0gZWxzZSB7CisgICAgbG9nTWFsbG9jRXJyb3IoKTsKKyAgfQorCisgIHJldHVybiAwOworfQorCitVc2JEZXZpY2UgKgordXNiRmluZERldmljZSAoVXNiRGV2aWNlQ2hvb3NlciAqY2hvb3NlciwgVXNiQ2hvb3NlQ2hhbm5lbERhdGEgKmRhdGEpIHsKKyAgaWYgKCF1c2JIb3N0RGV2aWNlcykgeworICAgIGludCBvayA9IDA7CisKKyAgICBpZiAoKHVzYkhvc3REZXZpY2VzID0gbmV3UXVldWUodXNiRGVhbGxvY2F0ZUhvc3REZXZpY2UsIE5VTEwpKSkgeworICAgICAgSk5JRW52ICplbnYgPSBnZXRKYXZhTmF0aXZlSW50ZXJmYWNlKCk7CisKKyAgICAgIGlmIChlbnYpIHsKKyAgICAgICAgam9iamVjdCBpdGVyYXRvciA9IHVzYkdldERldmljZUl0ZXJhdG9yKGVudik7CisKKyAgICAgICAgaWYgKGl0ZXJhdG9yKSB7CisgICAgICAgICAgam9iamVjdCBkZXZpY2U7CisKKyAgICAgICAgICBvayA9IDE7CisgICAgICAgICAgd2hpbGUgKChkZXZpY2UgPSB1c2JHZXROZXh0RGV2aWNlKGVudiwgaXRlcmF0b3IpKSkgeworICAgICAgICAgICAgaW50IGFkZGVkID0gdXNiQWRkSG9zdERldmljZShlbnYsIGRldmljZSk7CisgICAgICAgICAgICAoKmVudiktPkRlbGV0ZUxvY2FsUmVmKGVudiwgZGV2aWNlKTsKKworICAgICAgICAgICAgaWYgKCFhZGRlZCkgeworICAgICAgICAgICAgICBvayA9IDA7CisgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgIH0KKworICAgICAgICAgICgqZW52KS0+RGVsZXRlTG9jYWxSZWYoZW52LCBpdGVyYXRvcik7CisgICAgICAgIH0KKyAgICAgIH0KKworICAgICAgaWYgKCFvaykgeworICAgICAgICBkZWFsbG9jYXRlUXVldWUodXNiSG9zdERldmljZXMpOworICAgICAgICB1c2JIb3N0RGV2aWNlcyA9IE5VTEw7CisgICAgICB9CisgICAgfQorICB9CisKKyAgaWYgKHVzYkhvc3REZXZpY2VzKSB7CisgICAgVXNiVGVzdEhvc3REZXZpY2VEYXRhIHRlc3QgPSB7CisgICAgICAuY2hvb3NlciA9IGNob29zZXIsCisgICAgICAuZGF0YSA9IGRhdGEsCisgICAgICAuZGV2aWNlID0gTlVMTAorICAgIH07CisKKyAgICBpZiAocHJvY2Vzc1F1ZXVlKHVzYkhvc3REZXZpY2VzLCB1c2JUZXN0SG9zdERldmljZSwgJnRlc3QpKSByZXR1cm4gdGVzdC5kZXZpY2U7CisgIH0KKworICByZXR1cm4gTlVMTDsKK30KKwordm9pZAordXNiRm9yZ2V0RGV2aWNlcyAodm9pZCkgeworICBpZiAodXNiSG9zdERldmljZXMpIHsKKyAgICBkZWFsbG9jYXRlUXVldWUodXNiSG9zdERldmljZXMpOworICAgIHVzYkhvc3REZXZpY2VzID0gTlVMTDsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvUHJvZ3JhbXMvdXNiX2JlbGtpbi5jIGIvUHJvZ3JhbXMvdXNiX2JlbGtpbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFjYjU4ODUKLS0tIC9kZXYvbnVsbAorKysgYi9Qcm9ncmFtcy91c2JfYmVsa2luLmMKQEAgLTAsMCArMSwxNDIgQEAKKy8qCisgKiBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorICogICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorICoKKyAqIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorICoKKyAqIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyAqLworCisjaW5jbHVkZSAicHJvbG9ndWUuaCIKKworI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisKKyNpbmNsdWRlICJsb2cuaCIKKyNpbmNsdWRlICJ1c2Jfc2VyaWFsLmgiCisjaW5jbHVkZSAidXNiX2JlbGtpbi5oIgorCitzdGF0aWMgaW50Cit1c2JTZXRBdHRyaWJ1dGVfQmVsa2luIChVc2JEZXZpY2UgKmRldmljZSwgdW5zaWduZWQgY2hhciByZXF1ZXN0LCB1bnNpZ25lZCBpbnQgdmFsdWUsIHVuc2lnbmVkIGludCBpbmRleCkgeworICBsb2dNZXNzYWdlKExPR19DQVRFR09SWShTRVJJQUxfSU8pLCAiQmVsa2luIHJlcXVlc3Q6ICUwMlggJTA0WCAlMDRYIiwgcmVxdWVzdCwgdmFsdWUsIGluZGV4KTsKKyAgcmV0dXJuIHVzYkNvbnRyb2xXcml0ZShkZXZpY2UsIFVzYkNvbnRyb2xSZWNpcGllbnRfRGV2aWNlLCBVc2JDb250cm9sVHlwZV9WZW5kb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdCwgdmFsdWUsIGluZGV4LCBOVUxMLCAwLCAxMDAwKSAhPSAtMTsKK30KKworc3RhdGljIGludAordXNiU2V0QmF1ZF9CZWxraW4gKFVzYkRldmljZSAqZGV2aWNlLCB1bnNpZ25lZCBpbnQgYmF1ZCkgeworICBjb25zdCB1bnNpZ25lZCBpbnQgYmFzZSA9IDIzMDQwMDsKKyAgaWYgKGJhc2UgJSBiYXVkKSB7CisgICAgbG9nVW5zdXBwb3J0ZWRCYXVkKGJhdWQpOworICAgIGVycm5vID0gRUlOVkFMOworICAgIHJldHVybiAwOworICB9CisgIHJldHVybiB1c2JTZXRBdHRyaWJ1dGVfQmVsa2luKGRldmljZSwgMCwgYmFzZS9iYXVkLCAwKTsKK30KKworc3RhdGljIGludAordXNiU2V0Rmxvd0NvbnRyb2xfQmVsa2luIChVc2JEZXZpY2UgKmRldmljZSwgU2VyaWFsRmxvd0NvbnRyb2wgZmxvdykgeworICB1bnNpZ25lZCBpbnQgdmFsdWUgPSAwOworI2RlZmluZSBCRUxLSU5fRkxPVyhmcm9tLHRvKSBpZiAoKGZsb3cgJiAoZnJvbSkpID09IChmcm9tKSkgZmxvdyAmPSB+KGZyb20pLCB2YWx1ZSB8PSAodG8pCisgIEJFTEtJTl9GTE9XKFNFUklBTF9GTE9XX09VVFBVVF9DVFMsIDBYMDAwMSk7CisgIEJFTEtJTl9GTE9XKFNFUklBTF9GTE9XX09VVFBVVF9EU1IsIDBYMDAwMik7CisgIEJFTEtJTl9GTE9XKFNFUklBTF9GTE9XX0lOUFVUX0RTUiAsIDBYMDAwNCk7CisgIEJFTEtJTl9GTE9XKFNFUklBTF9GTE9XX0lOUFVUX0RUUiAsIDBYMDAwOCk7CisgIEJFTEtJTl9GTE9XKFNFUklBTF9GTE9XX0lOUFVUX1JUUyAsIDBYMDAxMCk7CisgIEJFTEtJTl9GTE9XKFNFUklBTF9GTE9XX09VVFBVVF9SVFMsIDBYMDAyMCk7CisgIEJFTEtJTl9GTE9XKFNFUklBTF9GTE9XX09VVFBVVF9YT04sIDBYMDA4MCk7CisgIEJFTEtJTl9GTE9XKFNFUklBTF9GTE9XX0lOUFVUX1hPTiAsIDBYMDEwMCk7CisjdW5kZWYgQkVMS0lOX0ZMT1cKKyAgaWYgKGZsb3cpIHsKKyAgICBsb2dVbnN1cHBvcnRlZEZsb3dDb250cm9sKGZsb3cpOworICB9CisgIHJldHVybiB1c2JTZXRBdHRyaWJ1dGVfQmVsa2luKGRldmljZSwgMTYsIHZhbHVlLCAwKTsKK30KKworc3RhdGljIGludAordXNiU2V0RGF0YUJpdHNfQmVsa2luIChVc2JEZXZpY2UgKmRldmljZSwgdW5zaWduZWQgaW50IGJpdHMpIHsKKyAgaWYgKChiaXRzIDwgNSkgfHwgKGJpdHMgPiA4KSkgeworICAgIGxvZ1Vuc3VwcG9ydGVkRGF0YUJpdHMoYml0cyk7CisgICAgZXJybm8gPSBFSU5WQUw7CisgICAgcmV0dXJuIDA7CisgIH0KKyAgcmV0dXJuIHVzYlNldEF0dHJpYnV0ZV9CZWxraW4oZGV2aWNlLCAyLCBiaXRzLTUsIDApOworfQorCitzdGF0aWMgaW50Cit1c2JTZXRTdG9wQml0c19CZWxraW4gKFVzYkRldmljZSAqZGV2aWNlLCBTZXJpYWxTdG9wQml0cyBiaXRzKSB7CisgIHVuc2lnbmVkIGludCB2YWx1ZTsKKyAgc3dpdGNoIChiaXRzKSB7CisgICAgY2FzZSBTRVJJQUxfU1RPUF8xOiB2YWx1ZSA9IDA7IGJyZWFrOworICAgIGNhc2UgU0VSSUFMX1NUT1BfMjogdmFsdWUgPSAxOyBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgbG9nVW5zdXBwb3J0ZWRTdG9wQml0cyhiaXRzKTsKKyAgICAgIGVycm5vID0gRUlOVkFMOworICAgICAgcmV0dXJuIDA7CisgIH0KKyAgcmV0dXJuIHVzYlNldEF0dHJpYnV0ZV9CZWxraW4oZGV2aWNlLCAxLCB2YWx1ZSwgMCk7Cit9CisKK3N0YXRpYyBpbnQKK3VzYlNldFBhcml0eV9CZWxraW4gKFVzYkRldmljZSAqZGV2aWNlLCBTZXJpYWxQYXJpdHkgcGFyaXR5KSB7CisgIHVuc2lnbmVkIGludCB2YWx1ZTsKKyAgc3dpdGNoIChwYXJpdHkpIHsKKyAgICBjYXNlIFNFUklBTF9QQVJJVFlfU1BBQ0U6IHZhbHVlID0gNDsgYnJlYWs7CisgICAgY2FzZSBTRVJJQUxfUEFSSVRZX09ERDogICB2YWx1ZSA9IDI7IGJyZWFrOworICAgIGNhc2UgU0VSSUFMX1BBUklUWV9FVkVOOiAgdmFsdWUgPSAxOyBicmVhazsKKyAgICBjYXNlIFNFUklBTF9QQVJJVFlfTUFSSzogIHZhbHVlID0gMzsgYnJlYWs7CisgICAgY2FzZSBTRVJJQUxfUEFSSVRZX05PTkU6ICB2YWx1ZSA9IDA7IGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICBsb2dVbnN1cHBvcnRlZFBhcml0eShwYXJpdHkpOworICAgICAgZXJybm8gPSBFSU5WQUw7CisgICAgICByZXR1cm4gMDsKKyAgfQorICByZXR1cm4gdXNiU2V0QXR0cmlidXRlX0JlbGtpbihkZXZpY2UsIDMsIHZhbHVlLCAwKTsKK30KKworc3RhdGljIGludAordXNiU2V0RGF0YUZvcm1hdF9CZWxraW4gKFVzYkRldmljZSAqZGV2aWNlLCB1bnNpZ25lZCBpbnQgZGF0YUJpdHMsIFNlcmlhbFN0b3BCaXRzIHN0b3BCaXRzLCBTZXJpYWxQYXJpdHkgcGFyaXR5KSB7CisgIGlmICh1c2JTZXREYXRhQml0c19CZWxraW4oZGV2aWNlLCBkYXRhQml0cykpCisgICAgaWYgKHVzYlNldFN0b3BCaXRzX0JlbGtpbihkZXZpY2UsIHN0b3BCaXRzKSkKKyAgICAgIGlmICh1c2JTZXRQYXJpdHlfQmVsa2luKGRldmljZSwgcGFyaXR5KSkKKyAgICAgICAgcmV0dXJuIDE7CisgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50Cit1c2JTZXREdHJTdGF0ZV9CZWxraW4gKFVzYkRldmljZSAqZGV2aWNlLCBpbnQgc3RhdGUpIHsKKyAgaWYgKChzdGF0ZSA8IDApIHx8IChzdGF0ZSA+IDEpKSB7CisgICAgbG9nTWVzc2FnZShMT0dfV0FSTklORywgIlVuc3VwcG9ydGVkIEJlbGtpbiBEVFIgc3RhdGU6ICVkIiwgc3RhdGUpOworICAgIGVycm5vID0gRUlOVkFMOworICAgIHJldHVybiAwOworICB9CisgIHJldHVybiB1c2JTZXRBdHRyaWJ1dGVfQmVsa2luKGRldmljZSwgMTAsIHN0YXRlLCAwKTsKK30KKworc3RhdGljIGludAordXNiU2V0UnRzU3RhdGVfQmVsa2luIChVc2JEZXZpY2UgKmRldmljZSwgaW50IHN0YXRlKSB7CisgIGlmICgoc3RhdGUgPCAwKSB8fCAoc3RhdGUgPiAxKSkgeworICAgIGxvZ01lc3NhZ2UoTE9HX1dBUk5JTkcsICJVbnN1cHBvcnRlZCBCZWxraW4gUlRTIHN0YXRlOiAlZCIsIHN0YXRlKTsKKyAgICBlcnJubyA9IEVJTlZBTDsKKyAgICByZXR1cm4gMDsKKyAgfQorICByZXR1cm4gdXNiU2V0QXR0cmlidXRlX0JlbGtpbihkZXZpY2UsIDExLCBzdGF0ZSwgMCk7Cit9CisKK2NvbnN0IFVzYlNlcmlhbE9wZXJhdGlvbnMgdXNiU2VyaWFsT3BlcmF0aW9uc19CZWxraW4gPSB7CisgIC5uYW1lID0gIkJlbGtpbiIsCisgIC5zZXRCYXVkID0gdXNiU2V0QmF1ZF9CZWxraW4sCisgIC5zZXREYXRhRm9ybWF0ID0gdXNiU2V0RGF0YUZvcm1hdF9CZWxraW4sCisgIC5zZXRGbG93Q29udHJvbCA9IHVzYlNldEZsb3dDb250cm9sX0JlbGtpbiwKKyAgLnNldER0clN0YXRlID0gdXNiU2V0RHRyU3RhdGVfQmVsa2luLAorICAuc2V0UnRzU3RhdGUgPSB1c2JTZXRSdHNTdGF0ZV9CZWxraW4KK307CmRpZmYgLS1naXQgYS9Qcm9ncmFtcy91c2JfYmVsa2luLmggYi9Qcm9ncmFtcy91c2JfYmVsa2luLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGVkYzQ5YgotLS0gL2Rldi9udWxsCisrKyBiL1Byb2dyYW1zL3VzYl9iZWxraW4uaApAQCAtMCwwICsxLDMwIEBACisvKgorICogQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyAqICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyAqCisgKiBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorICoKKyAqIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyAqCisgKiBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisgKi8KKworI2lmbmRlZiBCUkxUVFlfSU5DTFVERURfVVNCX0JFTEtJTgorI2RlZmluZSBCUkxUVFlfSU5DTFVERURfVVNCX0JFTEtJTgorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmIC8qIF9fY3BsdXNwbHVzICovCisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmIC8qIF9fY3BsdXNwbHVzICovCisKKyNlbmRpZiAvKiBCUkxUVFlfSU5DTFVERURfVVNCX0JFTEtJTiAqLwpkaWZmIC0tZ2l0IGEvUHJvZ3JhbXMvdXNiX2JzZC5oIGIvUHJvZ3JhbXMvdXNiX2JzZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUzYzliODMKLS0tIC9kZXYvbnVsbAorKysgYi9Qcm9ncmFtcy91c2JfYnNkLmgKQEAgLTAsMCArMSwzNjUgQEAKKy8qCisgKiBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorICogICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorICoKKyAqIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorICoKKyAqIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyAqLworCisjaW5jbHVkZSA8bGltaXRzLmg+CisKKyNpbmNsdWRlICJsb2cuaCIKKworc3RydWN0IFVzYkRldmljZUV4dGVuc2lvblN0cnVjdCB7CisgIGNoYXIgKnBhdGg7CisgIGludCBmaWxlOworICBpbnQgdGltZW91dDsKK307CisKK3N0cnVjdCBVc2JFbmRwb2ludEV4dGVuc2lvblN0cnVjdCB7CisgIGludCBmaWxlOworICBpbnQgdGltZW91dDsKK307CisKK3N0YXRpYyBpbnQKK3VzYlNldFRpbWVvdXQgKGludCBmaWxlLCBpbnQgbmV3LCBpbnQgKm9sZCkgeworICBpZiAoIW9sZCB8fCAobmV3ICE9ICpvbGQpKSB7CisgICAgaW50IGFyZyA9IG5ldzsKKyAgICBpZiAoaW9jdGwoZmlsZSwgVVNCX1NFVF9USU1FT1VULCAmYXJnKSA9PSAtMSkgeworICAgICAgbG9nU3lzdGVtRXJyb3IoIlVTQiB0aW1lb3V0IHNldCIpOworICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIGlmIChvbGQpICpvbGQgPSBuZXc7CisgIH0KKyAgcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQKK3VzYlNldFNob3J0VHJhbnNmZXJzIChpbnQgZmlsZSwgaW50IGFyZykgeworICBpZiAoaW9jdGwoZmlsZSwgVVNCX1NFVF9TSE9SVF9YRkVSLCAmYXJnKSAhPSAtMSkgcmV0dXJuIDE7CisgIGxvZ1N5c3RlbUVycm9yKCJVU0Igc2V0IHNob3J0IHRyYW5zZmVycyIpOworICByZXR1cm4gMDsKK30KKworaW50Cit1c2JEaXNhYmxlQXV0b3N1c3BlbmQgKFVzYkRldmljZSAqZGV2aWNlKSB7CisgIGxvZ1Vuc3VwcG9ydGVkRnVuY3Rpb24oKTsKKyAgcmV0dXJuIDA7Cit9CisKK2ludAordXNiU2V0Q29uZmlndXJhdGlvbiAoVXNiRGV2aWNlICpkZXZpY2UsIHVuc2lnbmVkIGNoYXIgY29uZmlndXJhdGlvbikgeworICBVc2JEZXZpY2VFeHRlbnNpb24gKmRldnggPSBkZXZpY2UtPmV4dGVuc2lvbjsKKyAgaW50IGFyZyA9IGNvbmZpZ3VyYXRpb247CisgIGlmIChpb2N0bChkZXZ4LT5maWxlLCBVU0JfU0VUX0NPTkZJRywgJmFyZykgIT0gLTEpIHJldHVybiAxOworICBsb2dTeXN0ZW1FcnJvcigiVVNCIGNvbmZpZ3VyYXRpb24gc2V0Iik7CisgIHJldHVybiAwOworfQorCitpbnQKK3VzYkNsYWltSW50ZXJmYWNlIChVc2JEZXZpY2UgKmRldmljZSwgdW5zaWduZWQgY2hhciBpbnRlcmZhY2UpIHsKKyAgcmV0dXJuIDE7CisvKgorICBsb2dVbnN1cHBvcnRlZEZ1bmN0aW9uKCk7CisgIHJldHVybiAwOworKi8KK30KKworaW50Cit1c2JSZWxlYXNlSW50ZXJmYWNlIChVc2JEZXZpY2UgKmRldmljZSwgdW5zaWduZWQgY2hhciBpbnRlcmZhY2UpIHsKKyAgcmV0dXJuIDE7CisvKgorICBsb2dVbnN1cHBvcnRlZEZ1bmN0aW9uKCk7CisgIHJldHVybiAwOworKi8KK30KKworaW50Cit1c2JTZXRBbHRlcm5hdGl2ZSAoCisgIFVzYkRldmljZSAqZGV2aWNlLAorICB1bnNpZ25lZCBjaGFyIGludGVyZmFjZSwKKyAgdW5zaWduZWQgY2hhciBhbHRlcm5hdGl2ZQorKSB7CisgIFVzYkRldmljZUV4dGVuc2lvbiAqZGV2eCA9IGRldmljZS0+ZXh0ZW5zaW9uOworICBzdHJ1Y3QgdXNiX2FsdF9pbnRlcmZhY2UgYXJnOworICBtZW1zZXQoJmFyZywgMCwgc2l6ZW9mKGFyZykpOworICBhcmcudWFpX2ludGVyZmFjZV9pbmRleCA9IGludGVyZmFjZTsKKyAgYXJnLnVhaV9hbHRfbm8gPSBhbHRlcm5hdGl2ZTsKKyAgaWYgKGlvY3RsKGRldngtPmZpbGUsIFVTQl9TRVRfQUxUSU5URVJGQUNFLCAmYXJnKSAhPSAtMSkgcmV0dXJuIDE7CisgIGxvZ1N5c3RlbUVycm9yKCJVU0IgYWx0ZXJuYXRpdmUgc2V0Iik7CisgIHJldHVybiAwOworfQorCitpbnQKK3VzYlJlc2V0RGV2aWNlIChVc2JEZXZpY2UgKmRldmljZSkgeworICBsb2dVbnN1cHBvcnRlZEZ1bmN0aW9uKCk7CisgIHJldHVybiAwOworfQorCitpbnQKK3VzYkNsZWFySGFsdCAoVXNiRGV2aWNlICpkZXZpY2UsIHVuc2lnbmVkIGNoYXIgZW5kcG9pbnRBZGRyZXNzKSB7CisgIGxvZ1Vuc3VwcG9ydGVkRnVuY3Rpb24oKTsKKyAgcmV0dXJuIDA7Cit9CisKK3NzaXplX3QKK3VzYkNvbnRyb2xUcmFuc2ZlciAoCisgIFVzYkRldmljZSAqZGV2aWNlLAorICB1aW50OF90IGRpcmVjdGlvbiwKKyAgdWludDhfdCByZWNpcGllbnQsCisgIHVpbnQ4X3QgdHlwZSwKKyAgdWludDhfdCByZXF1ZXN0LAorICB1aW50MTZfdCB2YWx1ZSwKKyAgdWludDE2X3QgaW5kZXgsCisgIHZvaWQgKmJ1ZmZlciwKKyAgdWludDE2X3QgbGVuZ3RoLAorICBpbnQgdGltZW91dAorKSB7CisgIFVzYkRldmljZUV4dGVuc2lvbiAqZGV2eCA9IGRldmljZS0+ZXh0ZW5zaW9uOworICBzdHJ1Y3QgdXNiX2N0bF9yZXF1ZXN0IGFyZzsKKyAgbWVtc2V0KCZhcmcsIDAsIHNpemVvZihhcmcpKTsKKyAgYXJnLnVjcl9yZXF1ZXN0LmJtUmVxdWVzdFR5cGUgPSBkaXJlY3Rpb24gfCByZWNpcGllbnQgfCB0eXBlOworICBhcmcudWNyX3JlcXVlc3QuYlJlcXVlc3QgPSByZXF1ZXN0OworICBVU0VUVyhhcmcudWNyX3JlcXVlc3Qud1ZhbHVlLCB2YWx1ZSk7CisgIFVTRVRXKGFyZy51Y3JfcmVxdWVzdC53SW5kZXgsIGluZGV4KTsKKyAgVVNFVFcoYXJnLnVjcl9yZXF1ZXN0LndMZW5ndGgsIGxlbmd0aCk7CisgIGFyZy51Y3JfZGF0YSA9IGJ1ZmZlcjsKKyAgYXJnLnVjcl9mbGFncyA9IFVTQkRfU0hPUlRfWEZFUl9PSzsKKyAgaWYgKHVzYlNldFRpbWVvdXQoZGV2eC0+ZmlsZSwgdGltZW91dCwgJmRldngtPnRpbWVvdXQpKSB7CisgICAgaWYgKGlvY3RsKGRldngtPmZpbGUsIFVTQl9ET19SRVFVRVNULCAmYXJnKSAhPSAtMSkgcmV0dXJuIGFyZy51Y3JfYWN0bGVuOworICAgIGxvZ1N5c3RlbUVycm9yKCJVU0IgY29udHJvbCB0cmFuc2ZlciIpOworICB9CisgIHJldHVybiAtMTsKK30KKwordm9pZCAqCit1c2JTdWJtaXRSZXF1ZXN0ICgKKyAgVXNiRGV2aWNlICpkZXZpY2UsCisgIHVuc2lnbmVkIGNoYXIgZW5kcG9pbnRBZGRyZXNzLAorICB2b2lkICpidWZmZXIsCisgIHNpemVfdCBsZW5ndGgsCisgIHZvaWQgKmNvbnRleHQKKykgeworICBsb2dVbnN1cHBvcnRlZEZ1bmN0aW9uKCk7CisgIHJldHVybiBOVUxMOworfQorCitpbnQKK3VzYkNhbmNlbFJlcXVlc3QgKFVzYkRldmljZSAqZGV2aWNlLCB2b2lkICpyZXF1ZXN0KSB7CisgIGxvZ1Vuc3VwcG9ydGVkRnVuY3Rpb24oKTsKKyAgcmV0dXJuIDA7Cit9CisKK3ZvaWQgKgordXNiUmVhcFJlc3BvbnNlICgKKyAgVXNiRGV2aWNlICpkZXZpY2UsCisgIHVuc2lnbmVkIGNoYXIgZW5kcG9pbnRBZGRyZXNzLAorICBVc2JSZXNwb25zZSAqcmVzcG9uc2UsCisgIGludCB3YWl0CispIHsKKyAgbG9nVW5zdXBwb3J0ZWRGdW5jdGlvbigpOworICByZXR1cm4gTlVMTDsKK30KKworaW50Cit1c2JNb25pdG9ySW5wdXRFbmRwb2ludCAoCisgIFVzYkRldmljZSAqZGV2aWNlLCB1bnNpZ25lZCBjaGFyIGVuZHBvaW50TnVtYmVyLAorICBBc3luY01vbml0b3JDYWxsYmFjayAqY2FsbGJhY2ssIHZvaWQgKmRhdGEKKykgeworICByZXR1cm4gMDsKK30KKworc3NpemVfdAordXNiUmVhZEVuZHBvaW50ICgKKyAgVXNiRGV2aWNlICpkZXZpY2UsCisgIHVuc2lnbmVkIGNoYXIgZW5kcG9pbnROdW1iZXIsCisgIHZvaWQgKmJ1ZmZlciwKKyAgc2l6ZV90IGxlbmd0aCwKKyAgaW50IHRpbWVvdXQKKykgeworICBzc2l6ZV90IGNvdW50ID0gLTE7CisgIFVzYkVuZHBvaW50ICplbmRwb2ludCA9IHVzYkdldElucHV0RW5kcG9pbnQoZGV2aWNlLCBlbmRwb2ludE51bWJlcik7CisgIGlmIChlbmRwb2ludCkgeworICAgIFVzYkVuZHBvaW50RXh0ZW5zaW9uICplcHR4ID0gZW5kcG9pbnQtPmV4dGVuc2lvbjsKKyAgICBpZiAodXNiU2V0VGltZW91dChlcHR4LT5maWxlLCB0aW1lb3V0LCAmZXB0eC0+dGltZW91dCkpIHsKKyAgICAgIGlmICgoY291bnQgPSByZWFkKGVwdHgtPmZpbGUsIGJ1ZmZlciwgbGVuZ3RoKSkgIT0gLTEpIHsKKyAgICAgICAgaWYgKCF1c2JBcHBseUlucHV0RmlsdGVycyhlbmRwb2ludCwgYnVmZmVyLCBsZW5ndGgsICZjb3VudCkpIHsKKyAgICAgICAgICBlcnJubyA9IEVJTzsKKyAgICAgICAgICBjb3VudCA9IC0xOworICAgICAgICB9CisgICAgICB9IGVsc2UgaWYgKGVycm5vICE9IEVUSU1FRE9VVCkgeworICAgICAgICBsb2dTeXN0ZW1FcnJvcigiVVNCIGVuZHBvaW50IHJlYWQiKTsKKyAgICAgIH0KKyAgICB9CisgIH0KKyAgcmV0dXJuIGNvdW50OworfQorCitzc2l6ZV90Cit1c2JXcml0ZUVuZHBvaW50ICgKKyAgVXNiRGV2aWNlICpkZXZpY2UsCisgIHVuc2lnbmVkIGNoYXIgZW5kcG9pbnROdW1iZXIsCisgIGNvbnN0IHZvaWQgKmJ1ZmZlciwKKyAgc2l6ZV90IGxlbmd0aCwKKyAgaW50IHRpbWVvdXQKKykgeworICBVc2JFbmRwb2ludCAqZW5kcG9pbnQgPSB1c2JHZXRPdXRwdXRFbmRwb2ludChkZXZpY2UsIGVuZHBvaW50TnVtYmVyKTsKKyAgaWYgKGVuZHBvaW50KSB7CisgICAgVXNiRW5kcG9pbnRFeHRlbnNpb24gKmVwdHggPSBlbmRwb2ludC0+ZXh0ZW5zaW9uOworICAgIGlmICh1c2JTZXRUaW1lb3V0KGVwdHgtPmZpbGUsIHRpbWVvdXQsICZlcHR4LT50aW1lb3V0KSkgeworICAgICAgc3NpemVfdCBjb3VudCA9IHdyaXRlKGVwdHgtPmZpbGUsIGJ1ZmZlciwgbGVuZ3RoKTsKKyAgICAgIGlmIChjb3VudCAhPSAtMSkgcmV0dXJuIGNvdW50OworICAgICAgbG9nU3lzdGVtRXJyb3IoIlVTQiBlbmRwb2ludCB3cml0ZSIpOworICAgIH0KKyAgfQorICByZXR1cm4gLTE7Cit9CisKK2ludAordXNiUmVhZERldmljZURlc2NyaXB0b3IgKFVzYkRldmljZSAqZGV2aWNlKSB7CisgIFVzYkRldmljZUV4dGVuc2lvbiAqZGV2eCA9IGRldmljZS0+ZXh0ZW5zaW9uOworICBpZiAoaW9jdGwoZGV2eC0+ZmlsZSwgVVNCX0dFVF9ERVZJQ0VfREVTQywgJmRldmljZS0+ZGVzY3JpcHRvcikgIT0gLTEpIHsKKyAgICByZXR1cm4gMTsKKyAgfQorICBsb2dTeXN0ZW1FcnJvcigiVVNCIGRldmljZSBkZXNjcmlwdG9yIHJlYWQiKTsKKyAgcmV0dXJuIDA7Cit9CisKK2ludAordXNiQWxsb2NhdGVFbmRwb2ludEV4dGVuc2lvbiAoVXNiRW5kcG9pbnQgKmVuZHBvaW50KSB7CisgIFVzYkRldmljZUV4dGVuc2lvbiAqZGV2eCA9IGVuZHBvaW50LT5kZXZpY2UtPmV4dGVuc2lvbjsKKyAgVXNiRW5kcG9pbnRFeHRlbnNpb24gKmVwdHg7CisKKyAgaWYgKChlcHR4ID0gbWFsbG9jKHNpemVvZigqZXB0eCkpKSkgeworICAgIGNvbnN0IGNoYXIgKnByZWZpeCA9IGRldngtPnBhdGg7CisgICAgY29uc3QgY2hhciAqZG90ID0gc3RyY2hyKHByZWZpeCwgJy4nKTsKKyAgICBpbnQgbGVuZ3RoID0gZG90PyAoZG90IC0gcHJlZml4KTogc3RybGVuKHByZWZpeCk7CisgICAgY2hhciBwYXRoW1BBVEhfTUFYKzFdOworICAgIGludCBmbGFncyA9IE9fUkRXUjsKKworICAgIHNucHJpbnRmKHBhdGgsIHNpemVvZihwYXRoKSwgVVNCX0VORFBPSU5UX1BBVEhfRk9STUFULAorICAgICAgICAgICAgIGxlbmd0aCwgcHJlZml4LCBVU0JfRU5EUE9JTlRfTlVNQkVSKGVuZHBvaW50LT5kZXNjcmlwdG9yKSk7CisKKyAgICBzd2l0Y2ggKFVTQl9FTkRQT0lOVF9ESVJFQ1RJT04oZW5kcG9pbnQtPmRlc2NyaXB0b3IpKSB7CisgICAgICBjYXNlIFVzYkVuZHBvaW50RGlyZWN0aW9uX0lucHV0IDogZmxhZ3MgPSBPX1JET05MWTsgYnJlYWs7CisgICAgICBjYXNlIFVzYkVuZHBvaW50RGlyZWN0aW9uX091dHB1dDogZmxhZ3MgPSBPX1dST05MWTsgYnJlYWs7CisgICAgfQorCisgICAgaWYgKChlcHR4LT5maWxlID0gb3BlbihwYXRoLCBmbGFncykpICE9IC0xKSB7CisgICAgICBpZiAoKChmbGFncyAmIE9fQUNDTU9ERSkgIT0gT19SRE9OTFkpIHx8IAorICAgICAgICAgIHVzYlNldFNob3J0VHJhbnNmZXJzKGVwdHgtPmZpbGUsIDEpKSB7CisgICAgICAgIGVwdHgtPnRpbWVvdXQgPSAtMTsKKworICAgICAgICBlbmRwb2ludC0+ZXh0ZW5zaW9uID0gZXB0eDsKKyAgICAgICAgcmV0dXJuIDE7CisgICAgICB9CisKKyAgICAgIGNsb3NlKGVwdHgtPmZpbGUpOworICAgIH0KKworICAgIGZyZWUoZXB0eCk7CisgIH0KKworICByZXR1cm4gMDsKK30KKwordm9pZAordXNiRGVhbGxvY2F0ZUVuZHBvaW50RXh0ZW5zaW9uIChVc2JFbmRwb2ludEV4dGVuc2lvbiAqZXB0eCkgeworICBpZiAoZXB0eC0+ZmlsZSAhPSAtMSkgeworICAgIGNsb3NlKGVwdHgtPmZpbGUpOworICAgIGVwdHgtPmZpbGUgPSAtMTsKKyAgfQorCisgIGZyZWUoZXB0eCk7Cit9CisKK3ZvaWQKK3VzYkRlYWxsb2NhdGVEZXZpY2VFeHRlbnNpb24gKFVzYkRldmljZUV4dGVuc2lvbiAqZGV2eCkgeworICBpZiAoZGV2eC0+ZmlsZSAhPSAtMSkgeworICAgIGNsb3NlKGRldngtPmZpbGUpOworICAgIGRldngtPmZpbGUgPSAtMTsKKyAgfQorCisgIGZyZWUoZGV2eC0+cGF0aCk7CisgIGZyZWUoZGV2eCk7Cit9CisKK1VzYkRldmljZSAqCit1c2JGaW5kRGV2aWNlIChVc2JEZXZpY2VDaG9vc2VyICpjaG9vc2VyLCBVc2JDaG9vc2VDaGFubmVsRGF0YSAqZGF0YSkgeworICBVc2JEZXZpY2UgKmRldmljZSA9IE5VTEw7CisgIGludCBidXNOdW1iZXIgPSAwOworICB3aGlsZSAoMSkgeworICAgIGNoYXIgYnVzUGF0aFtQQVRIX01BWCsxXTsKKyAgICBpbnQgYnVzOworICAgIHNucHJpbnRmKGJ1c1BhdGgsIHNpemVvZihidXNQYXRoKSwgIi9kZXYvdXNiJWQiLCBidXNOdW1iZXIpOworICAgIGlmICgoYnVzID0gb3BlbihidXNQYXRoLCBPX1JET05MWSkpICE9IC0xKSB7CisgICAgICBpbnQgZGV2aWNlTnVtYmVyOworICAgICAgZm9yIChkZXZpY2VOdW1iZXI9MTsgZGV2aWNlTnVtYmVyPFVTQl9NQVhfREVWSUNFUzsgZGV2aWNlTnVtYmVyKyspIHsKKyAgICAgICAgc3RydWN0IHVzYl9kZXZpY2VfaW5mbyBpbmZvOworICAgICAgICBtZW1zZXQoJmluZm8sIDAsIHNpemVvZihpbmZvKSk7CisgICAgICAgIGluZm8udWRpX2FkZHIgPSBkZXZpY2VOdW1iZXI7CisgICAgICAgIGlmIChpb2N0bChidXMsIFVTQl9ERVZJQ0VJTkZPLCAmaW5mbykgIT0gLTEpIHsKKyAgICAgICAgICBzdGF0aWMgY29uc3QgY2hhciAqZHJpdmVyID0gInVnZW4iOworICAgICAgICAgIGNvbnN0IGNoYXIgKmRldmljZU5hbWUgPSBpbmZvLnVkaV9kZXZuYW1lc1swXTsKKworICAgICAgICAgIGxvZ01lc3NhZ2UoTE9HX0NBVEVHT1JZKFVTQl9JTyksICJkZXZpY2UgWyVkLCVkXTogdmVuZG9yPSVzIHByb2R1Y3Q9JXMiLAorICAgICAgICAgICAgICAgICAgICAgYnVzTnVtYmVyLCBkZXZpY2VOdW1iZXIsIGluZm8udWRpX3ZlbmRvciwgaW5mby51ZGlfcHJvZHVjdCk7CisgICAgICAgICAgeworICAgICAgICAgICAgaW50IG5hbWVOdW1iZXI7CisgICAgICAgICAgICBmb3IgKG5hbWVOdW1iZXI9MDsgbmFtZU51bWJlcjxVU0JfTUFYX0RFVk5BTUVTOyBuYW1lTnVtYmVyKyspIHsKKyAgICAgICAgICAgICAgY29uc3QgY2hhciAqbmFtZSA9IGluZm8udWRpX2Rldm5hbWVzW25hbWVOdW1iZXJdOworICAgICAgICAgICAgICBpZiAoKm5hbWUpCisgICAgICAgICAgICAgICAgbG9nTWVzc2FnZShMT0dfQ0FURUdPUlkoVVNCX0lPKSwgIm5hbWUgJWQ6ICVzIiwgbmFtZU51bWJlciwgbmFtZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgfQorCisgICAgICAgICAgaWYgKHN0cm5jbXAoZGV2aWNlTmFtZSwgZHJpdmVyLCBzdHJsZW4oZHJpdmVyKSkgPT0gMCkgeworICAgICAgICAgICAgY2hhciBkZXZpY2VQYXRoW1BBVEhfTUFYKzFdOworICAgICAgICAgICAgc25wcmludGYoZGV2aWNlUGF0aCwgc2l6ZW9mKGRldmljZVBhdGgpLCBVU0JfQ09OVFJPTF9QQVRIX0ZPUk1BVCwgZGV2aWNlTmFtZSk7CisKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgVXNiRGV2aWNlRXh0ZW5zaW9uICpkZXZ4OworICAgICAgICAgICAgICBpZiAoKGRldnggPSBtYWxsb2Moc2l6ZW9mKCpkZXZ4KSkpKSB7CisgICAgICAgICAgICAgICAgaWYgKChkZXZ4LT5wYXRoID0gc3RyZHVwKGRldmljZVBhdGgpKSkgeworICAgICAgICAgICAgICAgICAgaWYgKChkZXZ4LT5maWxlID0gb3BlbihkZXZ4LT5wYXRoLCBPX1JEV1IpKSAhPSAtMSkgeworICAgICAgICAgICAgICAgICAgICBkZXZ4LT50aW1lb3V0ID0gLTE7CisgICAgICAgICAgICAgICAgICAgIGlmICgoZGV2aWNlID0gdXNiVGVzdERldmljZShkZXZ4LCBjaG9vc2VyLCBkYXRhKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICBjbG9zZShidXMpOworICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBkZXZpY2U7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgY2xvc2UoZGV2eC0+ZmlsZSk7CisgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICBmcmVlKGRldngtPnBhdGgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBmcmVlKGRldngpOworICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgaWYgKGVycm5vICE9IEVOWElPKSB7CisgICAgICAgICAgbG9nU3lzdGVtRXJyb3IoIlVTQiBkZXZpY2UgcXVlcnkiKTsKKyAgICAgICAgfQorICAgICAgfQorICAgICAgY2xvc2UoYnVzKTsKKyAgICB9IGVsc2UgaWYgKGVycm5vID09IEVOT0VOVCkgeworICAgICAgYnJlYWs7CisgICAgfSBlbHNlIGlmIChlcnJubyAhPSBFTlhJTykgeworICAgICAgbG9nU3lzdGVtRXJyb3IoIlVTQiBidXMgb3BlbiIpOworICAgIH0KKyAgICBidXNOdW1iZXIrKzsKKyAgfQorICByZXR1cm4gZGV2aWNlOworfQorCit2b2lkCit1c2JGb3JnZXREZXZpY2VzICh2b2lkKSB7Cit9CmRpZmYgLS1naXQgYS9Qcm9ncmFtcy91c2JfY2RjX2FjbS5jIGIvUHJvZ3JhbXMvdXNiX2NkY19hY20uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MDE5ODZiCi0tLSAvZGV2L251bGwKKysrIGIvUHJvZ3JhbXMvdXNiX2NkY19hY20uYwpAQCAtMCwwICsxLDM0NCBAQAorLyoKKyAqIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisgKiAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisgKgorICogQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKKyNpbmNsdWRlICJwcm9sb2d1ZS5oIgorCisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKworI2luY2x1ZGUgImxvZy5oIgorI2luY2x1ZGUgInN0cmZtdC5oIgorI2luY2x1ZGUgInVzYl9zZXJpYWwuaCIKKyNpbmNsdWRlICJ1c2JfY2RjX2FjbS5oIgorI2luY2x1ZGUgInVzYl9pbnRlcm5hbC5oIgorI2luY2x1ZGUgImJpdGZpZWxkLmgiCisKK3N0cnVjdCBVc2JTZXJpYWxEYXRhU3RydWN0IHsKKyAgVXNiRGV2aWNlICpkZXZpY2U7CisgIGNvbnN0IFVzYkludGVyZmFjZURlc2NyaXB0b3IgKmludGVyZmFjZTsKKyAgY29uc3QgVXNiRW5kcG9pbnREZXNjcmlwdG9yICplbmRwb2ludDsKKworICBVU0JfQ0RDX0FDTV9MaW5lQ29kaW5nIGxpbmVDb2Rpbmc7Cit9OworCitzdGF0aWMgaW50Cit1c2JHZXRQYXJhbWV0ZXJzX0NEQ19BQ00gKFVzYkRldmljZSAqZGV2aWNlLCB1aW50OF90IHJlcXVlc3QsIHVpbnQxNl90IHZhbHVlLCB2b2lkICpkYXRhLCB1aW50MTZfdCBzaXplKSB7CisgIFVzYlNlcmlhbERhdGEgKnVzZCA9IHVzYkdldFNlcmlhbERhdGEoZGV2aWNlKTsKKworICBzc2l6ZV90IHJlc3VsdCA9IHVzYkNvbnRyb2xSZWFkKGRldmljZSwKKyAgICBVc2JDb250cm9sUmVjaXBpZW50X0ludGVyZmFjZSwgVXNiQ29udHJvbFR5cGVfQ2xhc3MsCisgICAgcmVxdWVzdCwgdmFsdWUsIHVzZC0+aW50ZXJmYWNlLT5iSW50ZXJmYWNlTnVtYmVyLAorICAgIGRhdGEsIHNpemUsIDEwMDAKKyAgKTsKKworICByZXR1cm4gcmVzdWx0ICE9IC0xOworfQorCitzdGF0aWMgaW50Cit1c2JHZXRQYXJhbWV0ZXJfQ0RDX0FDTSAoVXNiRGV2aWNlICpkZXZpY2UsIHVpbnQ4X3QgcmVxdWVzdCwgdm9pZCAqZGF0YSwgdWludDE2X3Qgc2l6ZSkgeworICByZXR1cm4gdXNiR2V0UGFyYW1ldGVyc19DRENfQUNNKGRldmljZSwgcmVxdWVzdCwgMCwgZGF0YSwgc2l6ZSk7Cit9CisKK3N0YXRpYyBpbnQKK3VzYlNldFBhcmFtZXRlcnNfQ0RDX0FDTSAoVXNiRGV2aWNlICpkZXZpY2UsIHVpbnQ4X3QgcmVxdWVzdCwgdWludDE2X3QgdmFsdWUsIGNvbnN0IHZvaWQgKmRhdGEsIHVpbnQxNl90IHNpemUpIHsKKyAgVXNiU2VyaWFsRGF0YSAqdXNkID0gdXNiR2V0U2VyaWFsRGF0YShkZXZpY2UpOworCisgIHNzaXplX3QgcmVzdWx0ID0gdXNiQ29udHJvbFdyaXRlKGRldmljZSwKKyAgICBVc2JDb250cm9sUmVjaXBpZW50X0ludGVyZmFjZSwgVXNiQ29udHJvbFR5cGVfQ2xhc3MsCisgICAgcmVxdWVzdCwgdmFsdWUsIHVzZC0+aW50ZXJmYWNlLT5iSW50ZXJmYWNlTnVtYmVyLAorICAgIGRhdGEsIHNpemUsIDEwMDAKKyAgKTsKKworICByZXR1cm4gcmVzdWx0ICE9IC0xOworfQorCitzdGF0aWMgaW50Cit1c2JTZXRQYXJhbWV0ZXJfQ0RDX0FDTSAoVXNiRGV2aWNlICpkZXZpY2UsIHVpbnQ4X3QgcmVxdWVzdCwgdWludDE2X3QgdmFsdWUpIHsKKyAgcmV0dXJuIHVzYlNldFBhcmFtZXRlcnNfQ0RDX0FDTShkZXZpY2UsIHJlcXVlc3QsIHZhbHVlLCBOVUxMLCAwKTsKK30KKworc3RhdGljIGludAordXNiU2V0Q29udHJvbExpbmVzX0NEQ19BQ00gKFVzYkRldmljZSAqZGV2aWNlLCB1aW50MTZfdCBsaW5lcykgeworICByZXR1cm4gdXNiU2V0UGFyYW1ldGVyX0NEQ19BQ00oZGV2aWNlLCBVU0JfQ0RDX0FDTV9DVExfU2V0Q29udHJvbExpbmVTdGF0ZSwgbGluZXMpOworfQorCitzdGF0aWMgdm9pZAordXNiTG9nTGluZUNvZGluZ19DRENfQUNNIChjb25zdCBVU0JfQ0RDX0FDTV9MaW5lQ29kaW5nICpsaW5lQ29kaW5nKSB7CisgIGNoYXIgbG9nWzBYODBdOworCisgIFNUUl9CRUdJTihsb2csIHNpemVvZihsb2cpKTsKKyAgU1RSX1BSSU5URigiQ0RDIEFDTSBsaW5lIGNvZGluZzoiKTsKKworICB7IC8vIGJhdWQgKGJpdHMgcGVyIHNlY29uZCkKKyAgICB1aW50MzJfdCBiYXVkID0gZ2V0TGl0dGxlRW5kaWFuMzIobGluZUNvZGluZy0+ZHdEVEVSYXRlKTsKKyAgICBTVFJfUFJJTlRGKCIgQmF1ZDolIiBQUkl1MzIsIGJhdWQpOworICB9CisKKyAgeyAvLyBudW1iZXIgb2YgZGF0YSBiaXRzCisgICAgU1RSX1BSSU5URigiIERhdGE6JXUiLCBsaW5lQ29kaW5nLT5iRGF0YUJpdHMpOworICB9CisKKyAgeyAvLyBudW1iZXIgb2Ygc3RvcCBiaXRzCisgICAgY29uc3QgY2hhciAqYml0czsKKworI2RlZmluZSBVU0JfQ0RDX0FDTV9TVE9QKHZhbHVlLG5hbWUpIFwKK2Nhc2UgVVNCX0NEQ19BQ01fU1RPUF8jI3ZhbHVlOiBiaXRzID0gI25hbWU7IGJyZWFrOworICAgIHN3aXRjaCAobGluZUNvZGluZy0+YkNoYXJGb3JtYXQpIHsKKyAgICAgIFVTQl9DRENfQUNNX1NUT1AoMSAgLCAxICApCisgICAgICBVU0JfQ0RDX0FDTV9TVE9QKDFfNSwgMS41KQorICAgICAgVVNCX0NEQ19BQ01fU1RPUCgyICAsIDIgICkKKyAgICAgIGRlZmF1bHQ6IGJpdHMgPSAiPyI7IGJyZWFrOworICAgIH0KKyN1bmRlZiBVU0JfQ0RDX0FDTV9TVE9QCisKKyAgICBTVFJfUFJJTlRGKCIgU3RvcDolcyIsIGJpdHMpOworICB9CisKKyAgeyAvLyB0eXBlIG9mIHBhcml0eQorICAgIGNvbnN0IGNoYXIgKnBhcml0eTsKKworI2RlZmluZSBVU0JfQ0RDX0FDTV9QQVJJVFkodmFsdWUsbmFtZSkgXAorY2FzZSBVU0JfQ0RDX0FDTV9QQVJJVFlfIyN2YWx1ZTogcGFyaXR5ID0gI25hbWU7IGJyZWFrOworICAgIHN3aXRjaCAobGluZUNvZGluZy0+YlBhcml0eVR5cGUpIHsKKyAgICAgIFVTQl9DRENfQUNNX1BBUklUWShOT05FICwgbm9uZSApCisgICAgICBVU0JfQ0RDX0FDTV9QQVJJVFkoT0REICAsIG9kZCAgKQorICAgICAgVVNCX0NEQ19BQ01fUEFSSVRZKEVWRU4gLCBldmVuICkKKyAgICAgIFVTQl9DRENfQUNNX1BBUklUWShNQVJLICwgbWFyayApCisgICAgICBVU0JfQ0RDX0FDTV9QQVJJVFkoU1BBQ0UsIHNwYWNlKQorICAgICAgZGVmYXVsdDogcGFyaXR5ID0gIj8iOyBicmVhazsKKyAgICB9CisjdW5kZWYgVVNCX0NEQ19BQ01fUEFSSVRZCisKKyAgICBTVFJfUFJJTlRGKCIgUGFyaXR5OiVzIiwgcGFyaXR5KTsKKyAgfQorCisgIFNUUl9FTkQ7CisgIGxvZ01lc3NhZ2UoTE9HX0NBVEVHT1JZKFNFUklBTF9JTyksICIlcyIsIGxvZyk7Cit9CisKK3N0YXRpYyBpbnQKK3VzYlNldExpbmVQcm9wZXJ0aWVzX0NEQ19BQ00gKFVzYkRldmljZSAqZGV2aWNlLCB1bnNpZ25lZCBpbnQgYmF1ZCwgdW5zaWduZWQgaW50IGRhdGFCaXRzLCBTZXJpYWxTdG9wQml0cyBzdG9wQml0cywgU2VyaWFsUGFyaXR5IHBhcml0eSkgeworICBVU0JfQ0RDX0FDTV9MaW5lQ29kaW5nIGxpbmVDb2Rpbmc7CisgIG1lbXNldCgmbGluZUNvZGluZywgMCwgc2l6ZW9mKGxpbmVDb2RpbmcpKTsKKworICBwdXRMaXR0bGVFbmRpYW4zMigmbGluZUNvZGluZy5kd0RURVJhdGUsIGJhdWQpOworCisgIHN3aXRjaCAoZGF0YUJpdHMpIHsKKyAgICBjYXNlICA1OgorICAgIGNhc2UgIDY6CisgICAgY2FzZSAgNzoKKyAgICBjYXNlICA4OgorICAgIGNhc2UgMTY6CisgICAgICBsaW5lQ29kaW5nLmJEYXRhQml0cyA9IGRhdGFCaXRzOworICAgICAgYnJlYWs7CisKKyAgICBkZWZhdWx0OgorICAgICAgbG9nVW5zdXBwb3J0ZWREYXRhQml0cyhkYXRhQml0cyk7CisgICAgICBlcnJubyA9IEVJTlZBTDsKKyAgICAgIHJldHVybiAwOworICB9CisKKyAgc3dpdGNoIChzdG9wQml0cykgeworICAgIGNhc2UgU0VSSUFMX1NUT1BfMToKKyAgICAgIGxpbmVDb2RpbmcuYkNoYXJGb3JtYXQgPSBVU0JfQ0RDX0FDTV9TVE9QXzE7CisgICAgICBicmVhazsKKworICAgIGNhc2UgU0VSSUFMX1NUT1BfMV81OgorICAgICAgbGluZUNvZGluZy5iQ2hhckZvcm1hdCA9IFVTQl9DRENfQUNNX1NUT1BfMV81OworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNFUklBTF9TVE9QXzI6CisgICAgICBsaW5lQ29kaW5nLmJDaGFyRm9ybWF0ID0gVVNCX0NEQ19BQ01fU1RPUF8yOworICAgICAgYnJlYWs7CisKKyAgICBkZWZhdWx0OgorICAgICAgbG9nVW5zdXBwb3J0ZWRTdG9wQml0cyhzdG9wQml0cyk7CisgICAgICBlcnJubyA9IEVJTlZBTDsKKyAgICAgIHJldHVybiAwOworICB9CisKKyAgc3dpdGNoIChwYXJpdHkpIHsKKyAgICBjYXNlIFNFUklBTF9QQVJJVFlfTk9ORToKKyAgICAgIGxpbmVDb2RpbmcuYlBhcml0eVR5cGUgPSBVU0JfQ0RDX0FDTV9QQVJJVFlfTk9ORTsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBTRVJJQUxfUEFSSVRZX09ERDoKKyAgICAgIGxpbmVDb2RpbmcuYlBhcml0eVR5cGUgPSBVU0JfQ0RDX0FDTV9QQVJJVFlfT0REOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNFUklBTF9QQVJJVFlfRVZFTjoKKyAgICAgIGxpbmVDb2RpbmcuYlBhcml0eVR5cGUgPSBVU0JfQ0RDX0FDTV9QQVJJVFlfRVZFTjsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBTRVJJQUxfUEFSSVRZX01BUks6CisgICAgICBsaW5lQ29kaW5nLmJQYXJpdHlUeXBlID0gVVNCX0NEQ19BQ01fUEFSSVRZX01BUks7CisgICAgICBicmVhazsKKworICAgIGNhc2UgU0VSSUFMX1BBUklUWV9TUEFDRToKKyAgICAgIGxpbmVDb2RpbmcuYlBhcml0eVR5cGUgPSBVU0JfQ0RDX0FDTV9QQVJJVFlfU1BBQ0U7CisgICAgICBicmVhazsKKworICAgIGRlZmF1bHQ6CisgICAgICBsb2dVbnN1cHBvcnRlZFBhcml0eShwYXJpdHkpOworICAgICAgZXJybm8gPSBFSU5WQUw7CisgICAgICByZXR1cm4gMDsKKyAgfQorCisgIHsKKyAgICBVc2JTZXJpYWxEYXRhICp1c2QgPSB1c2JHZXRTZXJpYWxEYXRhKGRldmljZSk7CisgICAgVVNCX0NEQ19BQ01fTGluZUNvZGluZyAqb2xkQ29kaW5nID0gJnVzZC0+bGluZUNvZGluZzsKKworICAgIGlmIChtZW1jbXAoJmxpbmVDb2RpbmcsIG9sZENvZGluZywgc2l6ZW9mKGxpbmVDb2RpbmcpKSAhPSAwKSB7CisgICAgICBpZiAoIXVzYlNldFBhcmFtZXRlcnNfQ0RDX0FDTShkZXZpY2UsIFVTQl9DRENfQUNNX0NUTF9TZXRMaW5lQ29kaW5nLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmxpbmVDb2RpbmcsIHNpemVvZihsaW5lQ29kaW5nKSkpIHsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgICB9CisKKyAgICAgICpvbGRDb2RpbmcgPSBsaW5lQ29kaW5nOworICAgICAgdXNiTG9nTGluZUNvZGluZ19DRENfQUNNKCZsaW5lQ29kaW5nKTsKKyAgICB9CisgIH0KKworICByZXR1cm4gMTsKK30KKworc3RhdGljIGludAordXNiU2V0Rmxvd0NvbnRyb2xfQ0RDX0FDTSAoVXNiRGV2aWNlICpkZXZpY2UsIFNlcmlhbEZsb3dDb250cm9sIGZsb3cpIHsKKyAgaWYgKGZsb3cpIHsKKyAgICBsb2dVbnN1cHBvcnRlZEZsb3dDb250cm9sKGZsb3cpOworICAgIGVycm5vID0gRUlOVkFMOworICAgIHJldHVybiAwOworICB9CisKKyAgcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBjb25zdCBVc2JJbnRlcmZhY2VEZXNjcmlwdG9yICoKK3VzYkZpbmRDb21tdW5pY2F0aW9uSW50ZXJmYWNlIChVc2JEZXZpY2UgKmRldmljZSkgeworICBjb25zdCBVc2JEZXNjcmlwdG9yICpkZXNjcmlwdG9yID0gTlVMTDsKKworICB3aGlsZSAodXNiTmV4dERlc2NyaXB0b3IoZGV2aWNlLCAmZGVzY3JpcHRvcikpIHsKKyAgICBpZiAoZGVzY3JpcHRvci0+aGVhZGVyLmJEZXNjcmlwdG9yVHlwZSA9PSBVc2JEZXNjcmlwdG9yVHlwZV9JbnRlcmZhY2UpIHsKKyAgICAgIGlmIChkZXNjcmlwdG9yLT5pbnRlcmZhY2UuYkludGVyZmFjZUNsYXNzID09IDBYMDIpIHsKKyAgICAgICAgcmV0dXJuICZkZXNjcmlwdG9yLT5pbnRlcmZhY2U7CisgICAgICB9CisgICAgfQorICB9CisKKyAgbG9nTWVzc2FnZShMT0dfV0FSTklORywgIlVTQjogY29tbXVuaWNhdGlvbiBpbnRlcmZhY2UgZGVzY3JpcHRvciBub3QgZm91bmQiKTsKKyAgZXJybm8gPSBFTk9FTlQ7CisgIHJldHVybiBOVUxMOworfQorCitzdGF0aWMgY29uc3QgVXNiRW5kcG9pbnREZXNjcmlwdG9yICoKK3VzYkZpbmRJbnRlcnJ1cHRJbnB1dEVuZHBvaW50IChVc2JEZXZpY2UgKmRldmljZSwgY29uc3QgVXNiSW50ZXJmYWNlRGVzY3JpcHRvciAqaW50ZXJmYWNlKSB7CisgIGNvbnN0IFVzYkRlc2NyaXB0b3IgKmRlc2NyaXB0b3IgPSAoY29uc3QgVXNiRGVzY3JpcHRvciAqKWludGVyZmFjZTsKKworICB3aGlsZSAodXNiTmV4dERlc2NyaXB0b3IoZGV2aWNlLCAmZGVzY3JpcHRvcikpIHsKKyAgICBpZiAoZGVzY3JpcHRvci0+aGVhZGVyLmJEZXNjcmlwdG9yVHlwZSA9PSBVc2JEZXNjcmlwdG9yVHlwZV9JbnRlcmZhY2UpIGJyZWFrOworCisgICAgaWYgKGRlc2NyaXB0b3ItPmhlYWRlci5iRGVzY3JpcHRvclR5cGUgPT0gVXNiRGVzY3JpcHRvclR5cGVfRW5kcG9pbnQpIHsKKyAgICAgIGlmIChVU0JfRU5EUE9JTlRfRElSRUNUSU9OKCZkZXNjcmlwdG9yLT5lbmRwb2ludCkgPT0gVXNiRW5kcG9pbnREaXJlY3Rpb25fSW5wdXQpIHsKKyAgICAgICAgaWYgKFVTQl9FTkRQT0lOVF9UUkFOU0ZFUigmZGVzY3JpcHRvci0+ZW5kcG9pbnQpID09IFVzYkVuZHBvaW50VHJhbnNmZXJfSW50ZXJydXB0KSB7CisgICAgICAgICAgcmV0dXJuICZkZXNjcmlwdG9yLT5lbmRwb2ludDsKKyAgICAgICAgfQorICAgICAgfQorICAgIH0KKyAgfQorCisgIGxvZ01lc3NhZ2UoTE9HX1dBUk5JTkcsICJVU0I6IGludGVycnVwdCBpbnB1dCBlbmRwb2ludCBkZXNjcmlwdG9yIG5vdCBmb3VuZCIpOworICBlcnJubyA9IEVOT0VOVDsKKyAgcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBpbnQKK3VzYk1ha2VEYXRhX0NEQ19BQ00gKFVzYkRldmljZSAqZGV2aWNlLCBVc2JTZXJpYWxEYXRhICoqc2VyaWFsRGF0YSkgeworICBVc2JTZXJpYWxEYXRhICp1c2Q7CisKKyAgaWYgKCh1c2QgPSBtYWxsb2Moc2l6ZW9mKCp1c2QpKSkpIHsKKyAgICBtZW1zZXQodXNkLCAwLCBzaXplb2YoKnVzZCkpOworICAgIHVzZC0+ZGV2aWNlID0gZGV2aWNlOworCisgICAgaWYgKCh1c2QtPmludGVyZmFjZSA9IHVzYkZpbmRDb21tdW5pY2F0aW9uSW50ZXJmYWNlKGRldmljZSkpKSB7CisgICAgICB1bnNpZ25lZCBjaGFyIGludGVyZmFjZU51bWJlciA9IHVzZC0+aW50ZXJmYWNlLT5iSW50ZXJmYWNlTnVtYmVyOworCisgICAgICBpZiAodXNiQ2xhaW1JbnRlcmZhY2UoZGV2aWNlLCBpbnRlcmZhY2VOdW1iZXIpKSB7CisgICAgICAgIGlmICh1c2JTZXRBbHRlcm5hdGl2ZShkZXZpY2UsIHVzZC0+aW50ZXJmYWNlLT5iSW50ZXJmYWNlTnVtYmVyLCB1c2QtPmludGVyZmFjZS0+YkFsdGVybmF0ZVNldHRpbmcpKSB7CisgICAgICAgICAgaWYgKCh1c2QtPmVuZHBvaW50ID0gdXNiRmluZEludGVycnVwdElucHV0RW5kcG9pbnQoZGV2aWNlLCB1c2QtPmludGVyZmFjZSkpKSB7CisgICAgICAgICAgICB1c2JCZWdpbklucHV0KGRldmljZSwgVVNCX0VORFBPSU5UX05VTUJFUih1c2QtPmVuZHBvaW50KSk7CisgICAgICAgICAgICAqc2VyaWFsRGF0YSA9IHVzZDsKKyAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHVzYlJlbGVhc2VJbnRlcmZhY2UoZGV2aWNlLCBpbnRlcmZhY2VOdW1iZXIpOworICAgICAgfQorICAgIH0KKworICAgIGZyZWUodXNkKTsKKyAgfSBlbHNlIHsKKyAgICBsb2dNYWxsb2NFcnJvcigpOworICB9CisKKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkCit1c2JEZXN0cm95RGF0YV9DRENfQUNNIChVc2JTZXJpYWxEYXRhICp1c2QpIHsKKyAgdXNiUmVsZWFzZUludGVyZmFjZSh1c2QtPmRldmljZSwgdXNkLT5pbnRlcmZhY2UtPmJJbnRlcmZhY2VOdW1iZXIpOworICBmcmVlKHVzZCk7Cit9CisKK3N0YXRpYyBpbnQKK3VzYkVuYWJsZUFkYXB0ZXJfQ0RDX0FDTSAoVXNiRGV2aWNlICpkZXZpY2UpIHsKKyAgVXNiU2VyaWFsRGF0YSAqdXNkID0gdXNiR2V0U2VyaWFsRGF0YShkZXZpY2UpOworCisgIGlmICghdXNiU2V0Q29udHJvbExpbmVzX0NEQ19BQ00oZGV2aWNlLCAwKSkgcmV0dXJuIDA7CisgIGlmICghdXNiU2V0Q29udHJvbExpbmVzX0NEQ19BQ00oZGV2aWNlLCBVU0JfQ0RDX0FDTV9MSU5FX0RUUikpIHJldHVybiAwOworCisgIHsKKyAgICBVU0JfQ0RDX0FDTV9MaW5lQ29kaW5nICpsaW5lQ29kaW5nID0gJnVzZC0+bGluZUNvZGluZzsKKworICAgIGlmICghdXNiR2V0UGFyYW1ldGVyX0NEQ19BQ00oZGV2aWNlLCBVU0JfQ0RDX0FDTV9DVExfR2V0TGluZUNvZGluZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lQ29kaW5nLCBzaXplb2YoKmxpbmVDb2RpbmcpKSkgeworICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgdXNiTG9nTGluZUNvZGluZ19DRENfQUNNKGxpbmVDb2RpbmcpOworICB9CisKKyAgcmV0dXJuIDE7Cit9CisKK3N0YXRpYyB2b2lkCit1c2JEaXNhYmxlQWRhcHRlcl9DRENfQUNNIChVc2JEZXZpY2UgKmRldmljZSkgeworICB1c2JTZXRDb250cm9sTGluZXNfQ0RDX0FDTShkZXZpY2UsIDApOworfQorCitjb25zdCBVc2JTZXJpYWxPcGVyYXRpb25zIHVzYlNlcmlhbE9wZXJhdGlvbnNfQ0RDX0FDTSA9IHsKKyAgLm5hbWUgPSAiQ0RDX0FDTSIsCisKKyAgLm1ha2VEYXRhID0gdXNiTWFrZURhdGFfQ0RDX0FDTSwKKyAgLmRlc3Ryb3lEYXRhID0gdXNiRGVzdHJveURhdGFfQ0RDX0FDTSwKKworICAuc2V0TGluZVByb3BlcnRpZXMgPSB1c2JTZXRMaW5lUHJvcGVydGllc19DRENfQUNNLAorICAuc2V0Rmxvd0NvbnRyb2wgPSB1c2JTZXRGbG93Q29udHJvbF9DRENfQUNNLAorCisgIC5lbmFibGVBZGFwdGVyID0gdXNiRW5hYmxlQWRhcHRlcl9DRENfQUNNLAorICAuZGlzYWJsZUFkYXB0ZXIgPSB1c2JEaXNhYmxlQWRhcHRlcl9DRENfQUNNCit9OwpkaWZmIC0tZ2l0IGEvUHJvZ3JhbXMvdXNiX2NkY19hY20uaCBiL1Byb2dyYW1zL3VzYl9jZGNfYWNtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWMwOTczOAotLS0gL2Rldi9udWxsCisrKyBiL1Byb2dyYW1zL3VzYl9jZGNfYWNtLmgKQEAgLTAsMCArMSw2NiBAQAorLyoKKyAqIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisgKiAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisgKgorICogQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKKyNpZm5kZWYgQlJMVFRZX0lOQ0xVREVEX1VTQl9DRENfQUNNCisjZGVmaW5lIEJSTFRUWV9JTkNMVURFRF9VU0JfQ0RDX0FDTQorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmIC8qIF9fY3BsdXNwbHVzICovCisKK3R5cGVkZWYgZW51bSB7CisgIFVTQl9DRENfQUNNX0NUTF9TZXRDb21tRmVhdHVyZSAgICAgID0gMFgwMiwKKyAgVVNCX0NEQ19BQ01fQ1RMX0dldENvbW1GZWF0dXJlICAgICAgPSAwWDAzLAorICBVU0JfQ0RDX0FDTV9DVExfQ2xlYXJDb21tRmVhdHVyZSAgICA9IDBYMDQsCisgIFVTQl9DRENfQUNNX0NUTF9TZXRMaW5lQ29kaW5nICAgICAgID0gMFgyMCwKKyAgVVNCX0NEQ19BQ01fQ1RMX0dldExpbmVDb2RpbmcgICAgICAgPSAwWDIxLAorICBVU0JfQ0RDX0FDTV9DVExfU2V0Q29udHJvbExpbmVTdGF0ZSA9IDBYMjIsCisgIFVTQl9DRENfQUNNX0NUTF9TZW5kQnJlYWsgICAgICAgICAgID0gMFgyMworfSBVU0JfQ0RDX0FDTV9Db250cm9sUmVxdWVzdDsKKwordHlwZWRlZiBlbnVtIHsKKyAgVVNCX0NEQ19BQ01fTElORV9EVFIgPSAwWDAxLAorICBVU0JfQ0RDX0FDTV9MSU5FX1JUUyA9IDBYMDIKK30gVVNCX0NEQ19BQ01fQ29udHJvbExpbmU7CisKK3R5cGVkZWYgZW51bSB7CisgIFVTQl9DRENfQUNNX1NUT1BfMSwKKyAgVVNCX0NEQ19BQ01fU1RPUF8xXzUsCisgIFVTQl9DRENfQUNNX1NUT1BfMgorfSBVU0JfQ0RDX0FDTV9TdG9wQml0czsKKwordHlwZWRlZiBlbnVtIHsKKyAgVVNCX0NEQ19BQ01fUEFSSVRZX05PTkUsCisgIFVTQl9DRENfQUNNX1BBUklUWV9PREQsCisgIFVTQl9DRENfQUNNX1BBUklUWV9FVkVOLAorICBVU0JfQ0RDX0FDTV9QQVJJVFlfTUFSSywKKyAgVVNCX0NEQ19BQ01fUEFSSVRZX1NQQUNFCit9IFVTQl9DRENfQUNNX1Bhcml0eTsKKwordHlwZWRlZiBzdHJ1Y3QgeworICB1aW50MzJfdCBkd0RURVJhdGU7IC8qIHRyYW5zbWlzc2lvbiByYXRlIC0gYml0cyBwZXIgc2Vjb25kICovCisgIHVpbnQ4X3QgYkNoYXJGb3JtYXQ7IC8qIG51bWJlciBvZiBzdG9wIGJpdHMgKi8KKyAgdWludDhfdCBiUGFyaXR5VHlwZTsgLyogdHlwZSBvZiBwYXJpdHkgKi8KKyAgdWludDhfdCBiRGF0YUJpdHM7IC8qIG51bWJlciBvZiBkYXRhIGJpdHMgLSA1LDYsNyw4LDE2ICovCit9IFBBQ0tFRCBVU0JfQ0RDX0FDTV9MaW5lQ29kaW5nOworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZiAvKiBfX2NwbHVzcGx1cyAqLworCisjZW5kaWYgLyogQlJMVFRZX0lOQ0xVREVEX1VTQl9DRENfQUNNICovCmRpZmYgLS1naXQgYS9Qcm9ncmFtcy91c2JfY2gzNDEuYyBiL1Byb2dyYW1zL3VzYl9jaDM0MS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVhNTNjNDkKLS0tIC9kZXYvbnVsbAorKysgYi9Qcm9ncmFtcy91c2JfY2gzNDEuYwpAQCAtMCwwICsxLDYzOSBAQAorLyoKKyAqIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisgKiAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisgKgorICogQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKKyNpbmNsdWRlICJwcm9sb2d1ZS5oIgorCisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKworI2luY2x1ZGUgImxvZy5oIgorI2luY2x1ZGUgInVzYl9zZXJpYWwuaCIKKyNpbmNsdWRlICJ1c2JfY2gzNDEuaCIKKworc3RydWN0IFVzYlNlcmlhbERhdGFTdHJ1Y3QgeworICBjaGFyIHZlcnNpb25bMl07CisKKyAgc3RydWN0IHsKKyAgICB1aW50OF90IHByZXNjYWxlcjsKKyAgICB1aW50OF90IGRpdmlzb3I7CisgIH0gYmF1ZDsKKworICBzdHJ1Y3QgeworICAgIHVpbnQ4X3QgbGNyMTsKKyAgICB1aW50OF90IGxjcjI7CisgICAgdWludDhfdCBsc3I7CisgIH0gbGluZTsKKworICBzdHJ1Y3QgeworICAgIHVpbnQ4X3QgbWNyOworICAgIHVpbnQ4X3QgbXNyOworICAgIHVpbnQ4X3QgZmxvdzsKKyAgfSBtb2RlbTsKK307CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgdWludDE2X3QgZmFjdG9yOworICB1aW50OF90IGZsYWdzOworfSBDSDM0MV9QcmVzY2FsZXJFbnRyeTsKKworc3RhdGljIGNvbnN0IENIMzQxX1ByZXNjYWxlckVudHJ5IENIMzQxX3ByZXNjYWxlclRhYmxlW10gPSB7CisgIHsgLmZhY3RvciA9IDAwMDAxLCAvLyAxCisgICAgLmZsYWdzID0gVVNCX0NIMzQxX1BTRl9CWVBBU1NfMnggfCBVU0JfQ0gzNDFfUFNGX0JZUEFTU184eCB8IFVTQl9DSDM0MV9QU0ZfQllQQVNTXzY0eAorICB9LAorCisgIHsgLmZhY3RvciA9IDAwMDAyLCAvLyAyCisgICAgLmZsYWdzID0gVVNCX0NIMzQxX1BTRl9CWVBBU1NfOHggfCBVU0JfQ0gzNDFfUFNGX0JZUEFTU182NHgKKyAgfSwKKworICB7IC5mYWN0b3IgPSAwMDAxMCwgLy8gOAorICAgIC5mbGFncyA9IFVTQl9DSDM0MV9QU0ZfQllQQVNTXzJ4IHwgVVNCX0NIMzQxX1BTRl9CWVBBU1NfNjR4CisgIH0sCisKKyAgeyAuZmFjdG9yID0gMDAwMjAsIC8vIDE2CisgICAgLmZsYWdzID0gVVNCX0NIMzQxX1BTRl9CWVBBU1NfNjR4CisgIH0sCisKKyAgeyAuZmFjdG9yID0gMDAxMDAsIC8vIDY0CisgICAgLmZsYWdzID0gVVNCX0NIMzQxX1BTRl9CWVBBU1NfMnggfCBVU0JfQ0gzNDFfUFNGX0JZUEFTU184eAorICB9LAorCisgIHsgLmZhY3RvciA9IDAwMjAwLCAvLyAxMjgKKyAgICAuZmxhZ3MgPSBVU0JfQ0gzNDFfUFNGX0JZUEFTU184eAorICB9LAorCisgIHsgLmZhY3RvciA9IDAxMDAwLCAvLyA1MTIKKyAgICAuZmxhZ3MgPSBVU0JfQ0gzNDFfUFNGX0JZUEFTU18yeAorICB9LAorCisgIHsgLmZhY3RvciA9IDAyMDAwLCAvLyAxMDI0CisgICAgLmZsYWdzID0gMAorICB9LAorfTsKKworc3RhdGljIGNvbnN0IHVpbnQ4X3QgQ0gzNDFfcHJlc2NhbGVyQ09VTlQgPSBBUlJBWV9DT1VOVChDSDM0MV9wcmVzY2FsZXJUYWJsZSk7CisKK3N0YXRpYyBpbnQKK3VzYkNvbnRyb2xSZWFkX0NIMzQxICgKKyAgVXNiRGV2aWNlICpkZXZpY2UsIHVpbnQ4X3QgcmVxdWVzdCwKKyAgdWludDE2X3QgdmFsdWUsIHVpbnQxNl90IGluZGV4LAorICB1bnNpZ25lZCBjaGFyICpidWZmZXIsIHNpemVfdCBzaXplCispIHsKKyAgbG9nTWVzc2FnZShMT0dfQ0FURUdPUlkoU0VSSUFMX0lPKSwKKyAgICAiQ0gzNDEgY29udHJvbCByZWFkOiAlMDJYICUwNFggJTA0WCIsCisgICAgcmVxdWVzdCwgdmFsdWUsIGluZGV4CisgICk7CisKKyAgc3NpemVfdCByZXN1bHQgPSB1c2JDb250cm9sUmVhZChkZXZpY2UsCisgICAgVVNCX0NIMzQxX0NPTlRST0xfUkVDSVBJRU5ULCBVU0JfQ0gzNDFfQ09OVFJPTF9UWVBFLAorICAgIHJlcXVlc3QsIHZhbHVlLCBpbmRleCwgYnVmZmVyLCBzaXplLAorICAgIFVTQl9DSDM0MV9DT05UUk9MX1RJTUVPVVQKKyAgKTsKKworICBpZiAocmVzdWx0ID09IC0xKSByZXR1cm4gMDsKKyAgbG9nQnl0ZXMoTE9HX0NBVEVHT1JZKFNFUklBTF9JTyksICJDSDM0MSBjb250cm9sIHJlc3BvbnNlIiwgYnVmZmVyLCByZXN1bHQpOworICBpZiAocmVzdWx0ID09IHNpemUpIHJldHVybiAxOworCisgIGxvZ01lc3NhZ2UoTE9HX1dBUk5JTkcsCisgICAgInNob3J0IENIMzQxIGNvbnRyb2wgcmVzcG9uc2U6ICUiUFJJc2l6ZSIgPCAlIlBSSXNzaXplLAorICAgIHJlc3VsdCwgc2l6ZQorICApOworCisgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50Cit1c2JSZWFkUmVnaXN0ZXJzX0NIMzQxICgKKyAgVXNiRGV2aWNlICpkZXZpY2UsCisgIHVpbnQ4X3QgcmVnaXN0ZXIxLCB1aW50OF90ICp2YWx1ZTEsCisgIHVpbnQ4X3QgcmVnaXN0ZXIyLCB1aW50OF90ICp2YWx1ZTIKKykgeworICB1bnNpZ25lZCBjaGFyIGJ1ZmZlclsyXTsKKworICBpbnQgb2sgPSB1c2JDb250cm9sUmVhZF9DSDM0MSgKKyAgICBkZXZpY2UsIFVTQl9DSDM0MV9SRVFfUkVBRF9SRUdJU1RFUlMsCisgICAgKHJlZ2lzdGVyMiA8PCA4KSB8IHJlZ2lzdGVyMSwKKyAgICAwLCBidWZmZXIsIHNpemVvZihidWZmZXIpCisgICk7CisKKyAgaWYgKG9rKSB7CisgICAgKnZhbHVlMSA9IGJ1ZmZlclswXTsKKyAgICAqdmFsdWUyID0gYnVmZmVyWzFdOworICB9CisKKyAgcmV0dXJuIG9rOworfQorCitzdGF0aWMgaW50Cit1c2JSZWFkUmVnaXN0ZXJfQ0gzNDEgKFVzYkRldmljZSAqZGV2aWNlLCB1aW50OF90IHJlZ2lzdGVyMSwgdWludDhfdCAqdmFsdWUxKSB7CisgIHVpbnQ4X3QgcmVnaXN0ZXIyID0gcmVnaXN0ZXIxOworICB1aW50OF90IHZhbHVlMjsKKyAgcmV0dXJuIHVzYlJlYWRSZWdpc3RlcnNfQ0gzNDEoZGV2aWNlLCByZWdpc3RlcjEsIHZhbHVlMSwgcmVnaXN0ZXIyLCAmdmFsdWUyKTsKK30KKworc3RhdGljIGludAordXNiQ29udHJvbFdyaXRlX0NIMzQxICgKKyAgVXNiRGV2aWNlICpkZXZpY2UsIHVpbnQ4X3QgcmVxdWVzdCwKKyAgdWludDE2X3QgdmFsdWUsIHVpbnQxNl90IGluZGV4CispIHsKKyAgbG9nTWVzc2FnZShMT0dfQ0FURUdPUlkoU0VSSUFMX0lPKSwKKyAgICAiQ0gzNDEgY29udHJvbCB3cml0ZTogJTAyWCAlMDRYICUwNFgiLAorICAgIHJlcXVlc3QsIHZhbHVlLCBpbmRleAorICApOworCisgIHNzaXplX3QgcmVzdWx0ID0gdXNiQ29udHJvbFdyaXRlKGRldmljZSwKKyAgICBVU0JfQ0gzNDFfQ09OVFJPTF9SRUNJUElFTlQsIFVTQl9DSDM0MV9DT05UUk9MX1RZUEUsCisgICAgcmVxdWVzdCwgdmFsdWUsIGluZGV4LCBOVUxMLCAwLAorICAgIFVTQl9DSDM0MV9DT05UUk9MX1RJTUVPVVQKKyAgKTsKKworICByZXR1cm4gcmVzdWx0ICE9IC0xOworfQorCitzdGF0aWMgaW50Cit1c2JXcml0ZVJlZ2lzdGVyc19DSDM0MSAoCisgIFVzYkRldmljZSAqZGV2aWNlLAorICB1aW50OF90IHJlZ2lzdGVyMSwgdWludDhfdCB2YWx1ZTEsCisgIHVpbnQ4X3QgcmVnaXN0ZXIyLCB1aW50OF90IHZhbHVlMgorKSB7CisgIHJldHVybiB1c2JDb250cm9sV3JpdGVfQ0gzNDEoCisgICAgZGV2aWNlLCBVU0JfQ0gzNDFfUkVRX1dSSVRFX1JFR0lTVEVSUywKKyAgICAocmVnaXN0ZXIyIDw8IDgpIHwgcmVnaXN0ZXIxLAorICAgICh2YWx1ZTIgPDwgOCkgfCB2YWx1ZTEKKyAgKTsKK30KKworc3RhdGljIGludAordXNiV3JpdGVSZWdpc3Rlcl9DSDM0MSAoVXNiRGV2aWNlICpkZXZpY2UsIHVpbnQ4X3QgcmVnaXN0ZXIxLCB1aW50OF90IHZhbHVlMSkgeworICByZXR1cm4gdXNiV3JpdGVSZWdpc3RlcnNfQ0gzNDEoZGV2aWNlLCByZWdpc3RlcjEsIHZhbHVlMSwgcmVnaXN0ZXIxLCB2YWx1ZTEpOworfQorCitzdGF0aWMgdm9pZAordXNiTG9nVmVyc2lvbl9DSDM0MSAoY29uc3QgVXNiU2VyaWFsRGF0YSAqdXNkKSB7CisgIGxvZ0J5dGVzKExPR19DQVRFR09SWShTRVJJQUxfSU8pLAorICAgICJDSDM0MSB2ZXJzaW9uIiwgdXNkLT52ZXJzaW9uLCBzaXplb2YodXNkLT52ZXJzaW9uKQorICApOworfQorCitzdGF0aWMgaW50Cit1c2JSZWFkVmVyc2lvbl9DSDM0MSAoVXNiRGV2aWNlICpkZXZpY2UpIHsKKyAgVXNiU2VyaWFsRGF0YSAqdXNkID0gdXNiR2V0U2VyaWFsRGF0YShkZXZpY2UpOworICBjb25zdCBzaXplX3Qgc2l6ZSA9IHNpemVvZih1c2QtPnZlcnNpb24pOworICB1bnNpZ25lZCBjaGFyIHZlcnNpb25bc2l6ZV07CisKKyAgaW50IG9rID0gdXNiQ29udHJvbFJlYWRfQ0gzNDEoCisgICAgZGV2aWNlLCBVU0JfQ0gzNDFfUkVRX1JFQURfVkVSU0lPTiwgMCwgMCwgdmVyc2lvbiwgc2l6ZQorICApOworCisgIGlmIChvaykgeworICAgIG1lbWNweSh1c2QtPnZlcnNpb24sIHZlcnNpb24sIHNpemUpOworICAgIHVzYkxvZ1ZlcnNpb25fQ0gzNDEodXNkKTsKKyAgfQorCisgIHJldHVybiBvazsKK30KKworc3RhdGljIHZvaWQKK3VzYkxvZ1N0YXR1c19DSDM0MSAoY29uc3QgVXNiU2VyaWFsRGF0YSAqdXNkKSB7CisgIGxvZ01lc3NhZ2UoTE9HX0NBVEVHT1JZKFNFUklBTF9JTyksCisgICAgIkNIMzQxIHN0YXR1czogTVNSOiUwMlggTFNSOiUwMlgiLAorICAgIHVzZC0+bW9kZW0ubXNyLCB1c2QtPmxpbmUubHNyCisgICk7Cit9CisKK3N0YXRpYyBpbnQKK3VzYlJlYWRTdGF0dXNfQ0gzNDEgKFVzYkRldmljZSAqZGV2aWNlKSB7CisgIFVzYlNlcmlhbERhdGEgKnVzZCA9IHVzYkdldFNlcmlhbERhdGEoZGV2aWNlKTsKKworICBpbnQgb2sgPSB1c2JSZWFkUmVnaXN0ZXJzX0NIMzQxKGRldmljZSwKKyAgICBVU0JfQ0gzNDFfUkVHX01TUiwgJnVzZC0+bW9kZW0ubXNyLAorICAgIFVTQl9DSDM0MV9SRUdfTFNSLCAmdXNkLT5saW5lLmxzcgorICApOworCisgIGlmIChvaykgeworICAgIHVzZC0+bW9kZW0ubXNyIF49IFVJTlQ4X01BWDsKKyAgICB1c2QtPmxpbmUubHNyIF49IFVJTlQ4X01BWDsKKyAgICB1c2JMb2dTdGF0dXNfQ0gzNDEodXNkKTsKKyAgfQorCisgIHJldHVybiBvazsKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nCit1c2JUcmFuc2Zvcm1WYWx1ZV9DSDM0MSAodWludDE2X3QgZmFjdG9yLCB1bnNpZ25lZCBsb25nIHZhbHVlKSB7CisgIHJldHVybiAoKCgyVUwgKiBVU0JfQ0gzNDFfRlJFUVVFTkNZKSAvIChmYWN0b3IgKiB2YWx1ZSkpICsgMVVMKSAvIDJVTDsKK30KKworc3RhdGljIHVuc2lnbmVkIGludAordXNiQ2FsY3VsYXRlQmF1ZF9DSDM0MSAodWludDhfdCBwcmVzY2FsZXIsIHVpbnQ4X3QgZGl2aXNvcikgeworICBjb25zdCBDSDM0MV9QcmVzY2FsZXJFbnRyeSAqcHMgPSBDSDM0MV9wcmVzY2FsZXJUYWJsZTsKKyAgY29uc3QgQ0gzNDFfUHJlc2NhbGVyRW50cnkgKmNvbnN0IGVuZCA9IHBzICsgQ0gzNDFfcHJlc2NhbGVyQ09VTlQ7CisKKyAgd2hpbGUgKHBzIDwgZW5kKSB7CisgICAgaWYgKHBzLT5mbGFncyA9PSBwcmVzY2FsZXIpIHsKKyAgICAgIHJldHVybiB1c2JUcmFuc2Zvcm1WYWx1ZV9DSDM0MSgKKyAgICAgICAgcHMtPmZhY3RvciwgKFVTQl9DSDM0MV9ESVZJU09SX01JTlVFTkQgLSBkaXZpc29yKQorICAgICAgKTsKKyAgICB9CisKKyAgICBwcyArPSAxOworICB9CisKKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkCit1c2JMb2dCYXVkX0NIMzQxIChjb25zdCBVc2JTZXJpYWxEYXRhICp1c2QpIHsKKyAgdW5zaWduZWQgaW50IGJhdWQgPSB1c2JDYWxjdWxhdGVCYXVkX0NIMzQxKAorICAgIHVzZC0+YmF1ZC5wcmVzY2FsZXIsIHVzZC0+YmF1ZC5kaXZpc29yCisgICk7CisKKyAgbG9nTWVzc2FnZShMT0dfQ0FURUdPUlkoU0VSSUFMX0lPKSwKKyAgICAiQ0gzNDEgYmF1ZDogUFM6JTAyWCBESVY6JTAyWCBCYXVkOiV1IiwKKyAgICB1c2QtPmJhdWQucHJlc2NhbGVyLCB1c2QtPmJhdWQuZGl2aXNvciwgYmF1ZAorICApOworfQorCitzdGF0aWMgaW50Cit1c2JSZWFkQmF1ZF9DSDM0MSAoVXNiRGV2aWNlICpkZXZpY2UpIHsKKyAgVXNiU2VyaWFsRGF0YSAqdXNkID0gdXNiR2V0U2VyaWFsRGF0YShkZXZpY2UpOworCisgIGludCBvayA9IHVzYlJlYWRSZWdpc3RlcnNfQ0gzNDEoZGV2aWNlLAorICAgIFVTQl9DSDM0MV9SRUdfUFJFU0NBTEVSLCAmdXNkLT5iYXVkLnByZXNjYWxlciwKKyAgICBVU0JfQ0gzNDFfUkVHX0RJVklTT1IsICZ1c2QtPmJhdWQuZGl2aXNvcgorICApOworCisgIGlmIChvaykgdXNiTG9nQmF1ZF9DSDM0MSh1c2QpOworICByZXR1cm4gb2s7Cit9CisKK3N0YXRpYyBpbnQKK3VzYkdldEJhdWRQYXJhbWV0ZXJzICgKKyAgdW5zaWduZWQgaW50IHdhbnRlZCwgdW5zaWduZWQgaW50ICphY3R1YWwsCisgIHVpbnQ4X3QgKnByZXNjYWxlciwgdWludDhfdCAqZGl2aXNvcgorKSB7CisgIGNvbnN0IENIMzQxX1ByZXNjYWxlckVudHJ5ICpwcyA9IENIMzQxX3ByZXNjYWxlclRhYmxlOworICBjb25zdCBDSDM0MV9QcmVzY2FsZXJFbnRyeSAqY29uc3QgZW5kID0gcHMgKyBDSDM0MV9wcmVzY2FsZXJDT1VOVDsKKworICBjb25zdCBpbnQgTk9UX0ZPVU5EID0gLTE7CisgIGludCBuZWFyZXN0RGVsdGEgPSBOT1RfRk9VTkQ7CisKKyAgd2hpbGUgKHBzIDwgZW5kKSB7CisgICAgdW5zaWduZWQgbG9uZyBwc0Rpdmlzb3IgPSB1c2JUcmFuc2Zvcm1WYWx1ZV9DSDM0MShwcy0+ZmFjdG9yLCB3YW50ZWQpOworCisgICAgaWYgKHBzRGl2aXNvciA8ICgocHMtPmZhY3RvciA9PSAxKT8gOTogVVNCX0NIMzQxX0RJVklTT1JfTUlOSU1VTSkpIHsKKyAgICAgIGJyZWFrOworICAgIH0KKworICAgIGlmIChwc0Rpdmlzb3IgPD0gVVNCX0NIMzQxX0RJVklTT1JfTUFYSU1VTSkgeworICAgICAgdW5zaWduZWQgaW50IGJhdWQgPSB1c2JUcmFuc2Zvcm1WYWx1ZV9DSDM0MShwcy0+ZmFjdG9yLCBwc0Rpdmlzb3IpOworICAgICAgaW50IGRlbHRhID0gYmF1ZCAtIHdhbnRlZDsKKyAgICAgIGlmIChkZWx0YSA8IDApIGRlbHRhID0gLWRlbHRhOworCisgICAgICBpZiAoKG5lYXJlc3REZWx0YSA9PSBOT1RfRk9VTkQpIHx8IChkZWx0YSA8PSBuZWFyZXN0RGVsdGEpKSB7CisgICAgICAgIG5lYXJlc3REZWx0YSA9IGRlbHRhOworICAgICAgICAqYWN0dWFsID0gYmF1ZDsKKyAgICAgICAgKnByZXNjYWxlciA9IHBzLT5mbGFnczsKKyAgICAgICAgKmRpdmlzb3IgPSBVU0JfQ0gzNDFfRElWSVNPUl9NSU5VRU5EIC0gcHNEaXZpc29yOworICAgICAgfQorICAgIH0KKworICAgIHBzICs9IDE7CisgIH0KKworICByZXR1cm4gbmVhcmVzdERlbHRhICE9IE5PVF9GT1VORDsKK30KKworc3RhdGljIGludAordXNiU2V0QmF1ZF9DSDM0MSAoVXNiRGV2aWNlICpkZXZpY2UsIHVuc2lnbmVkIGludCBiYXVkKSB7CisgIGlmICgoYmF1ZCA8IFVTQl9DSDM0MV9CQVVEX01JTklNVU0pIHx8IChiYXVkID4gVVNCX0NIMzQxX0JBVURfTUFYSU1VTSkpIHsKKyAgICBsb2dVbnN1cHBvcnRlZEJhdWQoYmF1ZCk7CisgICAgcmV0dXJuIDA7CisgIH0KKworICB1bnNpZ25lZCBpbnQgYWN0dWFsOworICB1aW50OF90IHByZXNjYWxlcjsKKyAgdWludDhfdCBkaXZpc29yOworCisgIGlmICghdXNiR2V0QmF1ZFBhcmFtZXRlcnMoYmF1ZCwgJmFjdHVhbCwgJnByZXNjYWxlciwgJmRpdmlzb3IpKSB7CisgICAgcmV0dXJuIDA7CisgIH0KKworICBVc2JTZXJpYWxEYXRhICp1c2QgPSB1c2JHZXRTZXJpYWxEYXRhKGRldmljZSk7CisgIGlmICgocHJlc2NhbGVyID09IHVzZC0+YmF1ZC5wcmVzY2FsZXIpICYmIChkaXZpc29yID09IHVzZC0+YmF1ZC5kaXZpc29yKSkgcmV0dXJuIDE7CisKKyAgbG9nTWVzc2FnZShMT0dfQ0FURUdPUlkoU0VSSUFMX0lPKSwKKyAgICAiY2hhbmdpbmcgQ0gzNDEgYmF1ZDogJXUgLT4gJXUiLAorICAgIGJhdWQsIGFjdHVhbAorICApOworCisgIGludCBvayA9IHVzYldyaXRlUmVnaXN0ZXJzX0NIMzQxKGRldmljZSwKKyAgICBVU0JfQ0gzNDFfUkVHX1BSRVNDQUxFUiwgKHByZXNjYWxlciB8IFVTQl9DSDM0MV9QU0ZfTk9fV0FJVCksCisgICAgVVNCX0NIMzQxX1JFR19ESVZJU09SLCBkaXZpc29yCisgICk7CisKKyAgaWYgKG9rKSB7CisgICAgdXNkLT5iYXVkLnByZXNjYWxlciA9IHByZXNjYWxlcjsKKyAgICB1c2QtPmJhdWQuZGl2aXNvciA9IGRpdmlzb3I7CisgIH0KKworICByZXR1cm4gb2s7Cit9CisKK3N0YXRpYyB2b2lkCit1c2JMb2dMaW5lQ29udHJvbF9DSDM0MSAoY29uc3QgVXNiU2VyaWFsRGF0YSAqdXNkKSB7CisgIGxvZ01lc3NhZ2UoTE9HX0NBVEVHT1JZKFNFUklBTF9JTyksCisgICAgIkNIMzQxIGxpbmUgY29udHJvbDogTENSMTolMDJYIExDUjI6JTAyWCIsCisgICAgdXNkLT5saW5lLmxjcjEsIHVzZC0+bGluZS5sY3IyCisgICk7Cit9CisKK3N0YXRpYyBpbnQKK3VzYlJlYWRMaW5lQ29udHJvbF9DSDM0MSAoVXNiRGV2aWNlICpkZXZpY2UpIHsKKyAgVXNiU2VyaWFsRGF0YSAqdXNkID0gdXNiR2V0U2VyaWFsRGF0YShkZXZpY2UpOworCisgIGludCBvayA9IHVzYlJlYWRSZWdpc3RlcnNfQ0gzNDEoZGV2aWNlLAorICAgIFVTQl9DSDM0MV9SRUdfTENSMSwgJnVzZC0+bGluZS5sY3IxLAorICAgIFVTQl9DSDM0MV9SRUdfTENSMiwgJnVzZC0+bGluZS5sY3IyCisgICk7CisKKyAgaWYgKG9rKSB1c2JMb2dMaW5lQ29udHJvbF9DSDM0MSh1c2QpOworICByZXR1cm4gb2s7Cit9CisKK3N0YXRpYyBpbnQKK3VzYldyaXRlTGluZUNvbnRyb2xfQ0gzNDEgKFVzYkRldmljZSAqZGV2aWNlKSB7CisgIFVzYlNlcmlhbERhdGEgKnVzZCA9IHVzYkdldFNlcmlhbERhdGEoZGV2aWNlKTsKKworICByZXR1cm4gdXNiV3JpdGVSZWdpc3RlcnNfQ0gzNDEoZGV2aWNlLAorICAgIFVTQl9DSDM0MV9SRUdfTENSMSwgdXNkLT5saW5lLmxjcjEsCisgICAgVVNCX0NIMzQxX1JFR19MQ1IyLCB1c2QtPmxpbmUubGNyMgorICApOworfQorCitzdGF0aWMgaW50Cit1c2JVcGRhdGVMQ1IxX0NIMzQxIChVc2JTZXJpYWxEYXRhICp1c2QsIHVpbnQ4X3QgbWFzaywgdWludDhfdCB2YWx1ZSkgeworICByZXR1cm4gdXNiVXBkYXRlQnl0ZSgmdXNkLT5saW5lLmxjcjEsIG1hc2ssIHZhbHVlKTsKK30KKworc3RhdGljIGludAordXNiVXBkYXRlRGF0YUJpdHNfQ0gzNDEgKFVzYlNlcmlhbERhdGEgKnVzZCwgdW5zaWduZWQgaW50IGRhdGFCaXRzKSB7CisgIGNvbnN0IHVpbnQ4X3QgbWFzayA9IFVTQl9DSDM0MV9MQ1IxX0RBVEFfQklUU19NQVNLOworICB1aW50OF90IHZhbHVlOworCisgIHN3aXRjaCAoZGF0YUJpdHMpIHsKKyAgICBjYXNlIDU6IHZhbHVlID0gVVNCX0NIMzQxX0xDUjFfREFUQV9CSVRTXzU7IGJyZWFrOworICAgIGNhc2UgNjogdmFsdWUgPSBVU0JfQ0gzNDFfTENSMV9EQVRBX0JJVFNfNjsgYnJlYWs7CisgICAgY2FzZSA3OiB2YWx1ZSA9IFVTQl9DSDM0MV9MQ1IxX0RBVEFfQklUU183OyBicmVhazsKKyAgICBjYXNlIDg6IHZhbHVlID0gVVNCX0NIMzQxX0xDUjFfREFUQV9CSVRTXzg7IGJyZWFrOworCisgICAgZGVmYXVsdDoKKyAgICAgIGxvZ1Vuc3VwcG9ydGVkRGF0YUJpdHMoZGF0YUJpdHMpOworICAgICAgcmV0dXJuIDA7CisgIH0KKworICByZXR1cm4gdXNiVXBkYXRlTENSMV9DSDM0MSh1c2QsIG1hc2ssIHZhbHVlKTsKK30KKworc3RhdGljIGludAordXNiVXBkYXRlU3RvcEJpdHNfQ0gzNDEgKFVzYlNlcmlhbERhdGEgKnVzZCwgU2VyaWFsU3RvcEJpdHMgc3RvcEJpdHMpIHsKKyAgY29uc3QgdWludDhfdCBtYXNrID0gVVNCX0NIMzQxX0xDUjFfU1RPUF9CSVRTX01BU0s7CisgIHVpbnQ4X3QgdmFsdWU7CisKKyAgc3dpdGNoIChzdG9wQml0cykgeworICAgIGNhc2UgU0VSSUFMX1NUT1BfMToKKyAgICAgIHZhbHVlID0gVVNCX0NIMzQxX0xDUjFfU1RPUF9CSVRTXzE7CisgICAgICBicmVhazsKKworICAgIGNhc2UgU0VSSUFMX1NUT1BfMjoKKyAgICAgIHZhbHVlID0gVVNCX0NIMzQxX0xDUjFfU1RPUF9CSVRTXzI7CisgICAgICBicmVhazsKKworICAgIGRlZmF1bHQ6CisgICAgICBsb2dVbnN1cHBvcnRlZFN0b3BCaXRzKHN0b3BCaXRzKTsKKyAgICAgIHJldHVybiAwOworICB9CisKKyAgcmV0dXJuIHVzYlVwZGF0ZUxDUjFfQ0gzNDEodXNkLCBtYXNrLCB2YWx1ZSk7Cit9CisKK3N0YXRpYyBpbnQKK3VzYlVwZGF0ZVBhcml0eV9DSDM0MSAoVXNiU2VyaWFsRGF0YSAqdXNkLCBTZXJpYWxQYXJpdHkgcGFyaXR5KSB7CisgIGNvbnN0IHVpbnQ4X3QgbWFzayA9IFVTQl9DSDM0MV9MQ1IxX1BBUklUWV9NQVNLOworICB1aW50OF90IHZhbHVlOworCisgIHN3aXRjaCAocGFyaXR5KSB7CisgICAgY2FzZSBTRVJJQUxfUEFSSVRZX05PTkU6CisgICAgICB2YWx1ZSA9IFVTQl9DSDM0MV9MQ1IxX1BBUklUWV9OT05FOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNFUklBTF9QQVJJVFlfRVZFTjoKKyAgICAgIHZhbHVlID0gVVNCX0NIMzQxX0xDUjFfUEFSSVRZX0VWRU47CisgICAgICBicmVhazsKKworICAgIGNhc2UgU0VSSUFMX1BBUklUWV9PREQ6CisgICAgICB2YWx1ZSA9IFVTQl9DSDM0MV9MQ1IxX1BBUklUWV9PREQ7CisgICAgICBicmVhazsKKworICAgIGNhc2UgU0VSSUFMX1BBUklUWV9TUEFDRToKKyAgICAgIHZhbHVlID0gVVNCX0NIMzQxX0xDUjFfUEFSSVRZX1NQQUNFOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNFUklBTF9QQVJJVFlfTUFSSzoKKyAgICAgIHZhbHVlID0gVVNCX0NIMzQxX0xDUjFfUEFSSVRZX01BUks7CisgICAgICBicmVhazsKKworICAgIGRlZmF1bHQ6CisgICAgICBsb2dVbnN1cHBvcnRlZFBhcml0eShwYXJpdHkpOworICAgICAgcmV0dXJuIDA7CisgIH0KKworICByZXR1cm4gdXNiVXBkYXRlTENSMV9DSDM0MSh1c2QsIG1hc2ssIHZhbHVlKTsKK30KKworc3RhdGljIGludAordXNiU2V0RGF0YUZvcm1hdF9DSDM0MSAoVXNiRGV2aWNlICpkZXZpY2UsIHVuc2lnbmVkIGludCBkYXRhQml0cywgU2VyaWFsU3RvcEJpdHMgc3RvcEJpdHMsIFNlcmlhbFBhcml0eSBwYXJpdHkpIHsKKyAgVXNiU2VyaWFsRGF0YSAqdXNkID0gdXNiR2V0U2VyaWFsRGF0YShkZXZpY2UpOworCisgIGludCBjaGFuZ2VkID0gMDsKKyAgaWYgKHVzYlVwZGF0ZURhdGFCaXRzX0NIMzQxKHVzZCwgZGF0YUJpdHMpKSBjaGFuZ2VkID0gMTsKKyAgaWYgKHVzYlVwZGF0ZVN0b3BCaXRzX0NIMzQxKHVzZCwgc3RvcEJpdHMpKSBjaGFuZ2VkID0gMTsKKyAgaWYgKHVzYlVwZGF0ZVBhcml0eV9DSDM0MSh1c2QsIHBhcml0eSkpIGNoYW5nZWQgPSAxOworCisgIGlmICghY2hhbmdlZCkgcmV0dXJuIDE7CisgIHJldHVybiB1c2JXcml0ZUxpbmVDb250cm9sX0NIMzQxKGRldmljZSk7Cit9CisKK3N0YXRpYyB2b2lkCit1c2JMb2dGbG93Q29udHJvbF9DSDM0MSAoY29uc3QgVXNiU2VyaWFsRGF0YSAqdXNkKSB7CisgIGxvZ01lc3NhZ2UoTE9HX0NBVEVHT1JZKFNFUklBTF9JTyksCisgICAgIkNIMzQxIGZsb3cgY29udHJvbDogJTAyWCIsCisgICAgdXNkLT5tb2RlbS5mbG93CisgICk7Cit9CisKK3N0YXRpYyBpbnQKK3VzYlJlYWRGbG93Q29udHJvbF9DSDM0MSAoVXNiRGV2aWNlICpkZXZpY2UpIHsKKyAgVXNiU2VyaWFsRGF0YSAqdXNkID0gdXNiR2V0U2VyaWFsRGF0YShkZXZpY2UpOworCisgIGludCBvayA9IHVzYlJlYWRSZWdpc3Rlcl9DSDM0MShkZXZpY2UsCisgICAgVVNCX0NIMzQxX1JFR19GTE9XLCAmdXNkLT5tb2RlbS5mbG93CisgICk7CisKKyAgaWYgKG9rKSB1c2JMb2dGbG93Q29udHJvbF9DSDM0MSh1c2QpOworICByZXR1cm4gb2s7Cit9CisKK3N0YXRpYyBpbnQKK3VzYldyaXRlRmxvd0NvbnRyb2xfQ0gzNDEgKFVzYkRldmljZSAqZGV2aWNlKSB7CisgIFVzYlNlcmlhbERhdGEgKnVzZCA9IHVzYkdldFNlcmlhbERhdGEoZGV2aWNlKTsKKyAgcmV0dXJuIHVzYldyaXRlUmVnaXN0ZXJfQ0gzNDEoZGV2aWNlLCBVU0JfQ0gzNDFfUkVHX0ZMT1csIHVzZC0+bW9kZW0uZmxvdyk7Cit9CisKK3N0YXRpYyBpbnQKK3VzYlNldEZsb3dDb250cm9sX0NIMzQxIChVc2JEZXZpY2UgKmRldmljZSwgU2VyaWFsRmxvd0NvbnRyb2wgZmxvd0NvbnRyb2wpIHsKKyAgdWludDhfdCB2YWx1ZTsKKworICBzd2l0Y2ggKGZsb3dDb250cm9sKSB7CisgICAgY2FzZSBTRVJJQUxfRkxPV19OT05FOgorICAgICAgdmFsdWUgPSAwOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNFUklBTF9GTE9XX0hBUkRXQVJFOgorICAgICAgdmFsdWUgPSBVU0JfQ0gzNDFfRkxPV19SVFNDVFM7CisgICAgICBicmVhazsKKworICAgIGRlZmF1bHQ6CisgICAgICBsb2dVbnN1cHBvcnRlZEZsb3dDb250cm9sKGZsb3dDb250cm9sKTsKKyAgICAgIHJldHVybiAwOworICB9CisKKyAgVXNiU2VyaWFsRGF0YSAqdXNkID0gdXNiR2V0U2VyaWFsRGF0YShkZXZpY2UpOworICBpZiAodmFsdWUgPT0gdXNkLT5tb2RlbS5mbG93KSByZXR1cm4gMTsKKworICB1c2QtPm1vZGVtLmZsb3cgPSB2YWx1ZTsKKyAgcmV0dXJuIHVzYldyaXRlRmxvd0NvbnRyb2xfQ0gzNDEoZGV2aWNlKTsKK30KKworc3RhdGljIGludAordXNiV3JpdGVNb2RlbUNvbnRyb2xfQ0gzNDEgKFVzYkRldmljZSAqZGV2aWNlKSB7CisgIFVzYlNlcmlhbERhdGEgKnVzZCA9IHVzYkdldFNlcmlhbERhdGEoZGV2aWNlKTsKKworICByZXR1cm4gdXNiQ29udHJvbFdyaXRlX0NIMzQxKAorICAgIGRldmljZSwgVVNCX0NIMzQxX1JFUV9XUklURV9NQ1IsIH51c2QtPm1vZGVtLm1jciwgMAorICApOworfQorCitzdGF0aWMgaW50Cit1c2JJbml0aWFsaXplU2VyaWFsX0NIMzQxIChVc2JEZXZpY2UgKmRldmljZSkgeworICByZXR1cm4gdXNiQ29udHJvbFdyaXRlX0NIMzQxKGRldmljZSwgVVNCX0NIMzQxX1JFUV9JTklUSUFMSVpFX1NFUklBTCwgMCwgMCk7Cit9CisKK3N0YXRpYyBpbnQKK3VzYkluaXRpYWxpemVCYXVkX0NIMzQxIChVc2JEZXZpY2UgKmRldmljZSkgeworICBpZiAoIXVzYlJlYWRCYXVkX0NIMzQxKGRldmljZSkpIHJldHVybiAwOworICByZXR1cm4gdXNiU2V0QmF1ZF9DSDM0MShkZXZpY2UsIFNFUklBTF9ERUZBVUxUX0JBVUQpOworfQorCitzdGF0aWMgaW50Cit1c2JJbml0aWFsaXplTGluZUNvbnRyb2xfQ0gzNDEgKFVzYkRldmljZSAqZGV2aWNlKSB7CisgIGlmICghdXNiUmVhZExpbmVDb250cm9sX0NIMzQxKGRldmljZSkpIHJldHVybiAwOworICBVc2JTZXJpYWxEYXRhICp1c2QgPSB1c2JHZXRTZXJpYWxEYXRhKGRldmljZSk7CisKKyAgdWludDhfdCBvbGRMQ1IxID0gdXNkLT5saW5lLmxjcjE7CisgIHVpbnQ4X3Qgb2xkTENSMiA9IHVzZC0+bGluZS5sY3IyOworCisgIHVzZC0+bGluZS5sY3IxIHw9IFVTQl9DSDM0MV9MQ1IxX1JFQ0VJVkVfRU5BQkxFOworICB1c2QtPmxpbmUubGNyMSB8PSBVU0JfQ0gzNDFfTENSMV9UUkFOU01JVF9FTkFCTEU7CisKKyAgdXNiVXBkYXRlRGF0YUJpdHNfQ0gzNDEodXNkLCBTRVJJQUxfREVGQVVMVF9EQVRBX0JJVFMpOworICB1c2JVcGRhdGVTdG9wQml0c19DSDM0MSh1c2QsIFNFUklBTF9ERUZBVUxUX1NUT1BfQklUUyk7CisgIHVzYlVwZGF0ZVBhcml0eV9DSDM0MSh1c2QsIFNFUklBTF9ERUZBVUxUX1BBUklUWSk7CisKKyAgaWYgKCh1c2QtPmxpbmUubGNyMSA9PSBvbGRMQ1IxKSAmJiAodXNkLT5saW5lLmxjcjIgPT0gb2xkTENSMikpIHJldHVybiAxOworICByZXR1cm4gdXNiV3JpdGVMaW5lQ29udHJvbF9DSDM0MShkZXZpY2UpOworfQorCitzdGF0aWMgaW50Cit1c2JJbml0aWFsaXplRmxvd0NvbnRyb2xfQ0gzNDEgKFVzYkRldmljZSAqZGV2aWNlKSB7CisgIGlmICghdXNiUmVhZEZsb3dDb250cm9sX0NIMzQxKGRldmljZSkpIHJldHVybiAwOworICByZXR1cm4gdXNiU2V0Rmxvd0NvbnRyb2xfQ0gzNDEoZGV2aWNlLCBTRVJJQUxfREVGQVVMVF9GTE9XX0NPTlRST0wpOworfQorCitzdGF0aWMgaW50Cit1c2JJbml0aWFsaXplTW9kZW1Db250cm9sX0NIMzQxIChVc2JEZXZpY2UgKmRldmljZSkgeworICBVc2JTZXJpYWxEYXRhICp1c2QgPSB1c2JHZXRTZXJpYWxEYXRhKGRldmljZSk7CisgIHVzZC0+bW9kZW0ubWNyID0gMDsKKyAgcmV0dXJuIHVzYldyaXRlTW9kZW1Db250cm9sX0NIMzQxKGRldmljZSk7Cit9CisKK3N0YXRpYyBpbnQKK3VzYkVuYWJsZUFkYXB0ZXJfQ0gzNDEgKFVzYkRldmljZSAqZGV2aWNlKSB7CisgIHR5cGVkZWYgaW50IEZ1bmN0aW9uIChVc2JEZXZpY2UgKmRldmljZSk7CisKKyAgc3RhdGljIEZ1bmN0aW9uICpjb25zdCBmdW5jdGlvbnNbXSA9IHsKKyAgICAmdXNiUmVhZFZlcnNpb25fQ0gzNDEsIC8vIHNob3VsZCBiZSBmaXJzdAorICAgICZ1c2JJbml0aWFsaXplU2VyaWFsX0NIMzQxLAorICAgICZ1c2JJbml0aWFsaXplQmF1ZF9DSDM0MSwKKyAgICAmdXNiSW5pdGlhbGl6ZUxpbmVDb250cm9sX0NIMzQxLAorICAgICZ1c2JJbml0aWFsaXplRmxvd0NvbnRyb2xfQ0gzNDEsCisgICAgJnVzYkluaXRpYWxpemVNb2RlbUNvbnRyb2xfQ0gzNDEsCisgICAgJnVzYlJlYWRTdGF0dXNfQ0gzNDEsCisgICAgTlVMTCAvLyBtdXN0IGJlIGxhc3QKKyAgfTsKKworICBGdW5jdGlvbiAqY29uc3QgKmZ1bmN0aW9uID0gZnVuY3Rpb25zOworCisgIHdoaWxlICgqZnVuY3Rpb24pIHsKKyAgICBpZiAoISgqZnVuY3Rpb24pKGRldmljZSkpIHJldHVybiAwOworICAgIGZ1bmN0aW9uICs9IDE7CisgIH0KKworICByZXR1cm4gMTsKK30KKworc3RhdGljIGludAordXNiTWFrZURhdGFfQ0gzNDEgKFVzYkRldmljZSAqZGV2aWNlLCBVc2JTZXJpYWxEYXRhICoqc2VyaWFsRGF0YSkgeworICBVc2JTZXJpYWxEYXRhICp1c2Q7CisKKyAgaWYgKCh1c2QgPSBtYWxsb2Moc2l6ZW9mKCp1c2QpKSkpIHsKKyAgICBtZW1zZXQodXNkLCAwLCBzaXplb2YoKnVzZCkpOworICAgICpzZXJpYWxEYXRhID0gdXNkOworICAgIHJldHVybiAxOworICB9IGVsc2UgeworICAgIGxvZ01hbGxvY0Vycm9yKCk7CisgIH0KKworICByZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQKK3VzYkRlc3Ryb3lEYXRhX0NIMzQxIChVc2JTZXJpYWxEYXRhICp1c2QpIHsKKyAgZnJlZSh1c2QpOworfQorCitjb25zdCBVc2JTZXJpYWxPcGVyYXRpb25zIHVzYlNlcmlhbE9wZXJhdGlvbnNfQ0gzNDEgPSB7CisgIC5uYW1lID0gIkNIMzQxIiwgICAgIAorCisgIC5tYWtlRGF0YSA9IHVzYk1ha2VEYXRhX0NIMzQxLCAgICAgCisgIC5kZXN0cm95RGF0YSA9IHVzYkRlc3Ryb3lEYXRhX0NIMzQxLCAgICAgCisKKyAgLmVuYWJsZUFkYXB0ZXIgPSB1c2JFbmFibGVBZGFwdGVyX0NIMzQxLCAgICAgCisgIC5zZXRCYXVkID0gdXNiU2V0QmF1ZF9DSDM0MSwKKyAgLnNldERhdGFGb3JtYXQgPSB1c2JTZXREYXRhRm9ybWF0X0NIMzQxLAorICAuc2V0Rmxvd0NvbnRyb2wgPSB1c2JTZXRGbG93Q29udHJvbF9DSDM0MSwKK307CmRpZmYgLS1naXQgYS9Qcm9ncmFtcy91c2JfY2gzNDEuaCBiL1Byb2dyYW1zL3VzYl9jaDM0MS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRkMTdkYjYKLS0tIC9kZXYvbnVsbAorKysgYi9Qcm9ncmFtcy91c2JfY2gzNDEuaApAQCAtMCwwICsxLDExMiBAQAorLyoKKyAqIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisgKiAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisgKgorICogQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKKyNpZm5kZWYgQlJMVFRZX0lOQ0xVREVEX1VTQl9DSDM0MQorI2RlZmluZSBCUkxUVFlfSU5DTFVERURfVVNCX0NIMzQxCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYgLyogX19jcGx1c3BsdXMgKi8KKworI2RlZmluZSBVU0JfQ0gzNDFfQ09OVFJPTF9UWVBFIFVzYkNvbnRyb2xUeXBlX1ZlbmRvcgorI2RlZmluZSBVU0JfQ0gzNDFfQ09OVFJPTF9SRUNJUElFTlQgVXNiQ29udHJvbFJlY2lwaWVudF9EZXZpY2UKKyNkZWZpbmUgVVNCX0NIMzQxX0NPTlRST0xfVElNRU9VVCAxMDAwCisKK3R5cGVkZWYgZW51bSB7CisgIFVTQl9DSDM0MV9SRVFfUkVBRF9WRVJTSU9OICAgICAgPSAwWDVGLAorICBVU0JfQ0gzNDFfUkVRX1JFQURfUkVHSVNURVJTICAgID0gMFg5NSwKKyAgVVNCX0NIMzQxX1JFUV9XUklURV9SRUdJU1RFUlMgICA9IDBYOUEsCisgIFVTQl9DSDM0MV9SRVFfSU5JVElBTElaRV9TRVJJQUwgPSAwWEExLAorICBVU0JfQ0gzNDFfUkVRX1dSSVRFX01DUiAgICAgICAgID0gMFhBNCwKK30gVVNCX0NIMzQxX0NvbnRyb2xSZXF1ZXN0OworCit0eXBlZGVmIGVudW0geworICBVU0JfQ0gzNDFfUkVHX0JSRUFLICAgICA9IDBYMDUsCisgIFVTQl9DSDM0MV9SRUdfTVNSICAgICAgID0gMFgwNiwKKyAgVVNCX0NIMzQxX1JFR19MU1IgICAgICAgPSAwWDA3LAorICBVU0JfQ0gzNDFfUkVHX1BSRVNDQUxFUiA9IDBYMTIsCisgIFVTQl9DSDM0MV9SRUdfRElWSVNPUiAgID0gMFgxMywKKyAgVVNCX0NIMzQxX1JFR19CUFNfTU9EICAgPSAwWDE0LAorICBVU0JfQ0gzNDFfUkVHX0xDUjEgICAgICA9IDBYMTgsCisgIFVTQl9DSDM0MV9SRUdfTENSMiAgICAgID0gMFgyNSwKKyAgVVNCX0NIMzQxX1JFR19GTE9XICAgICAgPSAwWDI3LAorfSBVU0JfQ0gzNDFfUmVnaXN0ZXI7CisKKyNkZWZpbmUgVVNCX0NIMzQxX0ZSRVFVRU5DWSAxMjAwMDAwMAorI2RlZmluZSBVU0JfQ0gzNDFfQkFVRF9NSU5JTVVNIDQ2CisjZGVmaW5lIFVTQl9DSDM0MV9CQVVEX01BWElNVU0gMjAwMDAwMAorCit0eXBlZGVmIGVudW0geworICBVU0JfQ0gzNDFfUFNGX0JZUEFTU184eCAgPSAwWDAxLAorICBVU0JfQ0gzNDFfUFNGX0JZUEFTU182NHggPSAwWDAyLAorICBVU0JfQ0gzNDFfUFNGX0JZUEFTU18yeCAgPSAwWDA0LAorICBVU0JfQ0gzNDFfUFNGX05PX1dBSVQgICAgPSAwWDgwLCAvLyBkb24ndCB3YWl0IHRpbGwgdGhlcmUgYXJlIDMyIGJ5dGVzCit9IFVTQl9DSDM0MV9QcmVzY2FsZXJGbGFnczsKKworI2RlZmluZSBVU0JfQ0gzNDFfRElWSVNPUl9NSU5JTVVNICAgMgorI2RlZmluZSBVU0JfQ0gzNDFfRElWSVNPUl9NQVhJTVVNIDI1NgorI2RlZmluZSBVU0JfQ0gzNDFfRElWSVNPUl9NSU5VRU5EIDI1NgorCit0eXBlZGVmIGVudW0geworICBVU0JfQ0gzNDFfTENSMV9SRUNFSVZFX0VOQUJMRSAgPSAwWDgwLAorICBVU0JfQ0gzNDFfTENSMV9UUkFOU01JVF9FTkFCTEUgPSAwWDQwLAorCisgIFVTQl9DSDM0MV9MQ1IxX1BBUl9CSVRfU1RJQ0sgICA9IDBYMjAsIC8vIG1hcmsvc3BhY2UgbW9kaWZpZXIKKyAgVVNCX0NIMzQxX0xDUjFfUEFSX0JJVF9FVkVOICAgID0gMFgxMCwKKyAgVVNCX0NIMzQxX0xDUjFfUEFSX0JJVF9FTkFCTEUgID0gMFgwOCwKKworICBVU0JfQ0gzNDFfTENSMV9TVE9QX0JJVFNfMSAgICAgPSAwWDAwLAorICBVU0JfQ0gzNDFfTENSMV9TVE9QX0JJVFNfMiAgICAgPSAwWDA0LAorCisgIFVTQl9DSDM0MV9MQ1IxX0RBVEFfQklUU181ICAgICA9IDBYMDAsCisgIFVTQl9DSDM0MV9MQ1IxX0RBVEFfQklUU182ICAgICA9IDBYMDEsCisgIFVTQl9DSDM0MV9MQ1IxX0RBVEFfQklUU183ICAgICA9IDBYMDIsCisgIFVTQl9DSDM0MV9MQ1IxX0RBVEFfQklUU184ICAgICA9IDBYMDMsCisKKyAgVVNCX0NIMzQxX0xDUjFfREFUQV9CSVRTX01BU0sgID0gMFgwMywKKyAgVVNCX0NIMzQxX0xDUjFfU1RPUF9CSVRTX01BU0sgID0gVVNCX0NIMzQxX0xDUjFfU1RPUF9CSVRTXzEgfCBVU0JfQ0gzNDFfTENSMV9TVE9QX0JJVFNfMiwKKworICBVU0JfQ0gzNDFfTENSMV9QQVJJVFlfTUFTSyAgPSBVU0JfQ0gzNDFfTENSMV9QQVJfQklUX0VOQUJMRSB8IFVTQl9DSDM0MV9MQ1IxX1BBUl9CSVRfRVZFTiB8IFVTQl9DSDM0MV9MQ1IxX1BBUl9CSVRfU1RJQ0ssCisgIFVTQl9DSDM0MV9MQ1IxX1BBUklUWV9OT05FICA9IDBYMDAsCisgIFVTQl9DSDM0MV9MQ1IxX1BBUklUWV9PREQgICA9IFVTQl9DSDM0MV9MQ1IxX1BBUl9CSVRfRU5BQkxFLAorICBVU0JfQ0gzNDFfTENSMV9QQVJJVFlfRVZFTiAgPSBVU0JfQ0gzNDFfTENSMV9QQVJfQklUX0VOQUJMRSB8IFVTQl9DSDM0MV9MQ1IxX1BBUl9CSVRfRVZFTiwKKyAgVVNCX0NIMzQxX0xDUjFfUEFSSVRZX01BUksgID0gVVNCX0NIMzQxX0xDUjFfUEFSX0JJVF9FTkFCTEUgfCBVU0JfQ0gzNDFfTENSMV9QQVJfQklUX1NUSUNLLAorICBVU0JfQ0gzNDFfTENSMV9QQVJJVFlfU1BBQ0UgPSBVU0JfQ0gzNDFfTENSMV9QQVJfQklUX0VOQUJMRSB8IFVTQl9DSDM0MV9MQ1IxX1BBUl9CSVRfU1RJQ0sgfCBVU0JfQ0gzNDFfTENSMV9QQVJfQklUX0VWRU4sCit9IFVTQl9DSDM0MV9MaW5lQ29udHJvbEZsYWdzMTsKKwordHlwZWRlZiBlbnVtIHsKKyAgVVNCX0NIMzQxX01DUl9EVFIgPSAwWDIwLCAvLyBkYXRhIHRlcm1pbmFsIHJlYWR5CisgIFVTQl9DSDM0MV9NQ1JfUlRTID0gMFg0MCwgLy8gcmVxdWVzdCB0byBzZW5kCit9IFVTQl9DSDM0MV9Nb2RlbUNvbnRyb2xGbGFnczsKKwordHlwZWRlZiBlbnVtIHsKKyAgVVNCX0NIMzQxX01TUl9DVFMgPSAwWDAxLCAvLyBjbGVhciB0byBzZW5kCisgIFVTQl9DSDM0MV9NU1JfRFNSID0gMFgwMiwgLy8gZGF0YSBzZXQgcmVhZHkKKyAgVVNCX0NIMzQxX01TUl9SSSAgPSAwWDA0LCAvLyByaW5nIGluZGljYXRvcgorICBVU0JfQ0gzNDFfTVNSX0RDRCA9IDBYMDgsIC8vIGRhdGEgY2FycmllciBkZXRlY3QKK30gVVNCX0NIMzQxX01vZGVtU3RhdHVzRmxhZ3M7CisKK3R5cGVkZWYgZW51bSB7CisgIFVTQl9DSDM0MV9GTE9XX1JUU0NUUyA9IDBYMDEsIC8vIGhhcmR3YXJlIGZsb3cgY29udHJvbAorfSBVU0JfQ0gzNDFfRmxvd0NvbnRyb2xGbGFnczsKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYgLyogX19jcGx1c3BsdXMgKi8KKworI2VuZGlmIC8qIEJSTFRUWV9JTkNMVURFRF9VU0JfQ0gzNDEgKi8KZGlmZiAtLWdpdCBhL1Byb2dyYW1zL3VzYl9jcDIxMDEuYyBiL1Byb2dyYW1zL3VzYl9jcDIxMDEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xODBkY2FmCi0tLSAvZGV2L251bGwKKysrIGIvUHJvZ3JhbXMvdXNiX2NwMjEwMS5jCkBAIC0wLDAgKzEsNDA1IEBACisvKgorICogQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyAqICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyAqCisgKiBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorICoKKyAqIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyAqCisgKiBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisgKi8KKworI2luY2x1ZGUgInByb2xvZ3VlLmgiCisKKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorCisjaW5jbHVkZSAibG9nLmgiCisjaW5jbHVkZSAidXNiX3NlcmlhbC5oIgorI2luY2x1ZGUgInVzYl9jcDIxMDEuaCIKKyNpbmNsdWRlICJiaXRmaWVsZC5oIgorCitzdGF0aWMgc2l6ZV90Cit1c2JHZXRQcm9wZXJ0eV9DUDIxMDEgKFVzYkRldmljZSAqZGV2aWNlLCB1aW50OF90IHJlcXVlc3QsIHZvaWQgKmRhdGEsIHNpemVfdCBsZW5ndGgpIHsKKyAgc3NpemVfdCByZXN1bHQ7CisKKyAgbG9nTWVzc2FnZShMT0dfQ0FURUdPUlkoU0VSSUFMX0lPKSwgImdldHRpbmcgQ1AyMTAxIHByb3BlcnR5OiAlMDJYIiwgcmVxdWVzdCk7CisgIHJlc3VsdCA9IHVzYkNvbnRyb2xSZWFkKGRldmljZSwgVXNiQ29udHJvbFJlY2lwaWVudF9JbnRlcmZhY2UsIFVzYkNvbnRyb2xUeXBlX1ZlbmRvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdCwgMCwgMCwgZGF0YSwgbGVuZ3RoLCAxMDAwKTsKKyAgaWYgKHJlc3VsdCA9PSAtMSkgcmV0dXJuIDA7CisKKyAgaWYgKHJlc3VsdCA8IGxlbmd0aCkgeworICAgIHVuc2lnbmVkIGNoYXIgKmJ5dGVzID0gZGF0YTsKKyAgICBtZW1zZXQoJmJ5dGVzW3Jlc3VsdF0sIDAsIGxlbmd0aC1yZXN1bHQpOworICB9CisKKyAgbG9nQnl0ZXMoTE9HX0NBVEVHT1JZKFNFUklBTF9JTyksICJDUDIxMDEgcHJvcGVydHkgaW5wdXQiLCBkYXRhLCByZXN1bHQpOworICByZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgaW50Cit1c2JTZXRDb21wbGV4UHJvcGVydHlfQ1AyMTAxICgKKyAgVXNiRGV2aWNlICpkZXZpY2UsCisgIHVpbnQ4X3QgcmVxdWVzdCwgdWludDE2X3QgdmFsdWUsCisgIGNvbnN0IHZvaWQgKmRhdGEsIHNpemVfdCBsZW5ndGgKKykgeworICBsb2dNZXNzYWdlKExPR19DQVRFR09SWShTRVJJQUxfSU8pLCAic2V0dGluZyBDUDIxMDEgcHJvcGVydHk6ICUwMlggJTA0WCIsIHJlcXVlc3QsIHZhbHVlKTsKKyAgaWYgKGxlbmd0aCkgbG9nQnl0ZXMoTE9HX0NBVEVHT1JZKFNFUklBTF9JTyksICJDUDIxMDEgcHJvcGVydHkgb3V0cHV0IiwgZGF0YSwgbGVuZ3RoKTsKKworICByZXR1cm4gdXNiQ29udHJvbFdyaXRlKGRldmljZSwgVXNiQ29udHJvbFJlY2lwaWVudF9JbnRlcmZhY2UsIFVzYkNvbnRyb2xUeXBlX1ZlbmRvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0LCB2YWx1ZSwgMCwgZGF0YSwgbGVuZ3RoLCAxMDAwKSAhPSAtMTsKK30KKworc3RhdGljIGludAordXNiU2V0U2ltcGxlUHJvcGVydHlfQ1AyMTAxIChVc2JEZXZpY2UgKmRldmljZSwgdWludDhfdCByZXF1ZXN0LCB1aW50MTZfdCB2YWx1ZSkgeworICByZXR1cm4gdXNiU2V0Q29tcGxleFByb3BlcnR5X0NQMjEwMShkZXZpY2UsIHJlcXVlc3QsIHZhbHVlLCBOVUxMLCAwKTsKK30KKworc3RhdGljIGludAordXNiVmVyaWZ5QmF1ZFJhdGVfQ1AyMTAxIChVc2JEZXZpY2UgKmRldmljZSwgVVNCX0NQMjEwMV9CYXVkUmF0ZSBleHBlY3RlZCkgeworICBVU0JfQ1AyMTAxX0JhdWRSYXRlIGFjdHVhbDsKKyAgc3NpemVfdCByZXN1bHQ7CisKKyAgbG9nTWVzc2FnZShMT0dfQ0FURUdPUlkoU0VSSUFMX0lPKSwgInZlcmlmeWluZyBDUDIxMDEgYmF1ZCByYXRlIik7CisgIHJlc3VsdCA9IHVzYkdldFByb3BlcnR5X0NQMjEwMShkZXZpY2UsIFVTQl9DUDIxMDFfQ1RMX0dldEJhdWRSYXRlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmFjdHVhbCwgc2l6ZW9mKGFjdHVhbCkpOworCisgIGlmIChyZXN1bHQgPT0gLTEpIHsKKyAgICBsb2dNZXNzYWdlKExPR19XQVJOSU5HLCAidW5hYmxlIHRvIGdldCBDUDIxMDEgYmF1ZCByYXRlOiAlcyIsIHN0cmVycm9yKGVycm5vKSk7CisgIH0gZWxzZSBpZiAocmVzdWx0ICE9IHNpemVvZihhY3R1YWwpKSB7CisgICAgbG9nTWVzc2FnZShMT0dfV0FSTklORywgInVuZXhwZWN0ZWQgQ1AyMTAxIGJhdWQgcmF0ZSBzaXplOiAlZCIsIChpbnQpcmVzdWx0KTsKKyAgfSBlbHNlIGlmIChnZXRMaXR0bGVFbmRpYW4zMihhY3R1YWwpICE9IGV4cGVjdGVkKSB7CisgICAgbG9nTWVzc2FnZShMT0dfV0FSTklORywKKyAgICAgICAgICAgICAgICJ1bmV4cGVjdGVkIENQMjEwMSBiYXVkIHJhdGUgdmFsdWU6IgorICAgICAgICAgICAgICAgIiBFeHBlY3RlZDolIlBSSXUzMiAiIEFjdHVhbDolIlBSSXUzMiwKKyAgICAgICAgICAgICAgIGV4cGVjdGVkLCBnZXRMaXR0bGVFbmRpYW4zMihhY3R1YWwpKTsKKyAgfSBlbHNlIHsKKyAgICByZXR1cm4gMTsKKyAgfQorCisgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50Cit1c2JWZXJpZnlCYXVkRGl2aXNvcl9DUDIxMDEgKFVzYkRldmljZSAqZGV2aWNlLCBVU0JfQ1AyMTAxX0JhdWREaXZpc29yIGV4cGVjdGVkKSB7CisgIFVTQl9DUDIxMDFfQmF1ZERpdmlzb3IgYWN0dWFsOworICBzc2l6ZV90IHJlc3VsdDsKKworICBsb2dNZXNzYWdlKExPR19DQVRFR09SWShTRVJJQUxfSU8pLCAidmVyaWZ5aW5nIENQMjEwMSBiYXVkIGRpdmlzb3IiKTsKKyAgcmVzdWx0ID0gdXNiR2V0UHJvcGVydHlfQ1AyMTAxKGRldmljZSwgVVNCX0NQMjEwMV9DVExfR2V0QmF1ZERpdmlzb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmYWN0dWFsLCBzaXplb2YoYWN0dWFsKSk7CisKKyAgaWYgKHJlc3VsdCA9PSAtMSkgeworICAgIGxvZ01lc3NhZ2UoTE9HX1dBUk5JTkcsICJ1bmFibGUgdG8gZ2V0IENQMjEwMSBiYXVkIGRpdmlzb3I6ICVzIiwgc3RyZXJyb3IoZXJybm8pKTsKKyAgfSBlbHNlIGlmIChyZXN1bHQgIT0gc2l6ZW9mKGFjdHVhbCkpIHsKKyAgICBsb2dNZXNzYWdlKExPR19XQVJOSU5HLCAidW5leHBlY3RlZCBDUDIxMDEgYmF1ZCBkaXZpc29yIHNpemU6ICVkIiwgKGludClyZXN1bHQpOworICB9IGVsc2UgaWYgKGdldExpdHRsZUVuZGlhbjE2KGFjdHVhbCkgIT0gZXhwZWN0ZWQpIHsKKyAgICBsb2dNZXNzYWdlKExPR19XQVJOSU5HLAorICAgICAgICAgICAgICAgInVuZXhwZWN0ZWQgQ1AyMTAxIGJhdWQgZGl2aXNvciB2YWx1ZTogRXhwZWN0ZWQ6JXUgQWN0dWFsOiV1IiwKKyAgICAgICAgICAgICAgIGV4cGVjdGVkLCBnZXRMaXR0bGVFbmRpYW4xNihhY3R1YWwpKTsKKyAgfSBlbHNlIHsKKyAgICByZXR1cm4gMTsKKyAgfQorCisgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50Cit1c2JWZXJpZnlCYXVkX0NQMjEwMSAoVXNiRGV2aWNlICpkZXZpY2UsIFVTQl9DUDIxMDFfQmF1ZFJhdGUgcmF0ZSwgVVNCX0NQMjEwMV9CYXVkRGl2aXNvciBkaXZpc29yKSB7CisgIGlmICghdXNiVmVyaWZ5QmF1ZFJhdGVfQ1AyMTAxKGRldmljZSwgcmF0ZSkpIHJldHVybiAwOworICBpZiAoIXVzYlZlcmlmeUJhdWREaXZpc29yX0NQMjEwMShkZXZpY2UsIGRpdmlzb3IpKSByZXR1cm4gMDsKKyAgcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQKK3VzYlNldEJhdWRfQ1AyMTAxIChVc2JEZXZpY2UgKmRldmljZSwgdW5zaWduZWQgaW50IGJhdWQpIHsKKyAgVVNCX0NQMjEwMV9CYXVkRGl2aXNvciBkaXZpc29yID0gVVNCX0NQMjEwMV9CQVVEX0JBU0UgLyBiYXVkOworCisgIGlmICgoYmF1ZCAqIGRpdmlzb3IpICE9IFVTQl9DUDIxMDFfQkFVRF9CQVNFKSB7CisgICAgbG9nVW5zdXBwb3J0ZWRCYXVkKGJhdWQpOworICAgIGVycm5vID0gRUlOVkFMOworICAgIHJldHVybiAwOworICB9CisKKyAgeworICAgIFVTQl9DUDIxMDFfQmF1ZFJhdGUgcmF0ZTsKKworICAgIGxvZ01lc3NhZ2UoTE9HX0NBVEVHT1JZKFNFUklBTF9JTyksICJzZXR0aW5nIENQMjEwMSBiYXVkIHJhdGU6ICV1IiwgYmF1ZCk7CisgICAgcHV0TGl0dGxlRW5kaWFuMzIoJnJhdGUsIGJhdWQpOworCisgICAgaWYgKCF1c2JTZXRDb21wbGV4UHJvcGVydHlfQ1AyMTAxKGRldmljZSwgVVNCX0NQMjEwMV9DVExfU2V0QmF1ZFJhdGUsIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZyYXRlLCBzaXplb2YocmF0ZSkpKSB7CisgICAgICBsb2dNZXNzYWdlKExPR19XQVJOSU5HLCAidW5hYmxlIHRvIHNldCBDUDIxMDEgYmF1ZCByYXRlOiAlcyIsIHN0cmVycm9yKGVycm5vKSk7CisgICAgfSBlbHNlIGlmICh1c2JWZXJpZnlCYXVkX0NQMjEwMShkZXZpY2UsIGJhdWQsIGRpdmlzb3IpKSB7CisgICAgICByZXR1cm4gMTsKKyAgICB9CisgIH0KKworICB7CisgICAgbG9nTWVzc2FnZShMT0dfQ0FURUdPUlkoU0VSSUFMX0lPKSwgInNldHRpbmcgQ1AyMTAxIGJhdWQgZGl2aXNvcjogJXUiLCBkaXZpc29yKTsKKworICAgIGlmICghdXNiU2V0U2ltcGxlUHJvcGVydHlfQ1AyMTAxKGRldmljZSwgVVNCX0NQMjEwMV9DVExfU2V0QmF1ZERpdmlzb3IsIGRpdmlzb3IpKSB7CisgICAgICBsb2dNZXNzYWdlKExPR19XQVJOSU5HLCAidW5hYmxlIHRvIHNldCBDUDIxMDEgYmF1ZCBkaXZpc29yOiAlcyIsIHN0cmVycm9yKGVycm5vKSk7CisgICAgfSBlbHNlIGlmICh1c2JWZXJpZnlCYXVkX0NQMjEwMShkZXZpY2UsIGJhdWQsIGRpdmlzb3IpKSB7CisgICAgICByZXR1cm4gMTsKKyAgICB9CisgIH0KKworICByZXR1cm4gMDsKK30KKworc3RhdGljIGludAordXNiU2V0TW9kZW1TdGF0ZV9DUDIxMDEgKFVzYkRldmljZSAqZGV2aWNlLCBpbnQgc3RhdGUsIGludCBzaGlmdCwgY29uc3QgY2hhciAqbmFtZSkgeworICBpZiAoKHN0YXRlIDwgMCkgfHwgKHN0YXRlID4gMSkpIHsKKyAgICBsb2dNZXNzYWdlKExPR19XQVJOSU5HLCAidW5zdXBwb3J0ZWQgQ1AyMTAxICVzIHN0YXRlOiAlZCIsIG5hbWUsIHN0YXRlKTsKKyAgICBlcnJubyA9IEVJTlZBTDsKKyAgICByZXR1cm4gMDsKKyAgfQorCisgIGxvZ01lc3NhZ2UoTE9HX0NBVEVHT1JZKFNFUklBTF9JTyksCisgICAgICAgICAgICAgInNldHRpbmcgQ1AyMTAxICVzIHN0YXRlOiAlcyIsCisgICAgICAgICAgICAgbmFtZSwgKHN0YXRlPyAiaGlnaCI6ICJsb3ciKSk7CisKKyAgcmV0dXJuIHVzYlNldFNpbXBsZVByb3BlcnR5X0NQMjEwMShkZXZpY2UsIFVTQl9DUDIxMDFfQ1RMX1NldE1vZGVtSGFuZFNoYWtpbmcsICgoMSA8PCAoc2hpZnQgKyA4KSkgfCAoc3RhdGUgPDwgc2hpZnQpKSk7Cit9CisKK3N0YXRpYyBpbnQKK3VzYlNldER0clN0YXRlX0NQMjEwMSAoVXNiRGV2aWNlICpkZXZpY2UsIGludCBzdGF0ZSkgeworICByZXR1cm4gdXNiU2V0TW9kZW1TdGF0ZV9DUDIxMDEoZGV2aWNlLCBzdGF0ZSwgMCwgIkRUUiIpOworfQorCitzdGF0aWMgaW50Cit1c2JTZXRSdHNTdGF0ZV9DUDIxMDEgKFVzYkRldmljZSAqZGV2aWNlLCBpbnQgc3RhdGUpIHsKKyAgcmV0dXJuIHVzYlNldE1vZGVtU3RhdGVfQ1AyMTAxKGRldmljZSwgc3RhdGUsIDEsICJSVFMiKTsKK30KKworc3RhdGljIGludAordXNiVmVyaWZ5Rmxvd0NvbnRyb2xfQ1AyMTAxIChVc2JEZXZpY2UgKmRldmljZSwgY29uc3QgVVNCX0NQMjEwMV9GbG93Q29udHJvbCAqZXhwZWN0ZWQsIHNpemVfdCBzaXplKSB7CisgIFVTQl9DUDIxMDFfRmxvd0NvbnRyb2wgYWN0dWFsOworICBzc2l6ZV90IHJlc3VsdDsKKworICBsb2dNZXNzYWdlKExPR19DQVRFR09SWShTRVJJQUxfSU8pLCAidmVyaWZ5aW5nIENQMjEwMSBmbG93IGNvbnRyb2wiKTsKKyAgcmVzdWx0ID0gdXNiR2V0UHJvcGVydHlfQ1AyMTAxKGRldmljZSwgVVNCX0NQMjEwMV9DVExfR2V0Rmxvd0NvbnRyb2wsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmYWN0dWFsLCBzaXplb2YoYWN0dWFsKSk7CisKKyAgaWYgKHJlc3VsdCA9PSAtMSkgeworICAgIGxvZ01lc3NhZ2UoTE9HX1dBUk5JTkcsICJ1bmFibGUgdG8gZ2V0IENQMjEwMSBmbG93IGNvbnRyb2w6ICVzIiwgc3RyZXJyb3IoZXJybm8pKTsKKyAgfSBlbHNlIGlmIChyZXN1bHQgIT0gc2l6ZSkgeworICAgIGxvZ01lc3NhZ2UoTE9HX1dBUk5JTkcsICJ1bmV4cGVjdGVkIENQMjEwMSBmbG93IGNvbnRyb2wgc2l6ZTogJWQiLCAoaW50KXJlc3VsdCk7CisgIH0gZWxzZSBpZiAobWVtY21wKCZhY3R1YWwsIGV4cGVjdGVkLCBzaXplKSAhPSAwKSB7CisgICAgbG9nTWVzc2FnZShMT0dfV0FSTklORywgInVuZXhwZWN0ZWQgQ1AyMTAxIGZsb3cgY29udHJvbCBkYXRhIik7CisgICAgbG9nQnl0ZXMoTE9HX1dBUk5JTkcsICJleHBlY3RlZCBmbG93IGNvbnRyb2wiLCBleHBlY3RlZCwgc2l6ZSk7CisgICAgbG9nQnl0ZXMoTE9HX1dBUk5JTkcsICJhY3R1YWwgZmxvdyBjb250cm9sIiwgJmFjdHVhbCwgc2l6ZSk7CisgIH0gZWxzZSB7CisgICAgcmV0dXJuIDE7CisgIH0KKworICByZXR1cm4gMDsKK30KKworc3RhdGljIGludAordXNiU2V0Rmxvd0NvbnRyb2xfQ1AyMTAxIChVc2JEZXZpY2UgKmRldmljZSwgU2VyaWFsRmxvd0NvbnRyb2wgZmxvdykgeworICBVU0JfQ1AyMTAxX0Zsb3dDb250cm9sIG9sZFNldHRpbmdzOworICBVU0JfQ1AyMTAxX0Zsb3dDb250cm9sIG5ld1NldHRpbmdzOworICBzaXplX3Qgc2l6ZTsKKworICBsb2dNZXNzYWdlKExPR19DQVRFR09SWShTRVJJQUxfSU8pLCAiZ2V0dGluZyBDUDIxMDEgZmxvdyBjb250cm9sIik7CisgIHNpemUgPSB1c2JHZXRQcm9wZXJ0eV9DUDIxMDEoZGV2aWNlLCBVU0JfQ1AyMTAxX0NUTF9HZXRGbG93Q29udHJvbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmb2xkU2V0dGluZ3MsIHNpemVvZihvbGRTZXR0aW5ncykpOworCisgIGlmICghc2l6ZSkgeworICAgIGxvZ01lc3NhZ2UoTE9HX1dBUk5JTkcsICJ1bmFibGUgdG8gZ2V0IENQMjEwMSBmbG93IGNvbnRyb2wiKTsKKyAgICByZXR1cm4gMDsKKyAgfQorCisgIG5ld1NldHRpbmdzID0gb2xkU2V0dGluZ3M7CisgIG5ld1NldHRpbmdzLmhhbmRzaGFrZU9wdGlvbnMgPSBnZXRMaXR0bGVFbmRpYW4zMihuZXdTZXR0aW5ncy5oYW5kc2hha2VPcHRpb25zKTsKKyAgbmV3U2V0dGluZ3MuZGF0YUZsb3dPcHRpb25zID0gZ2V0TGl0dGxlRW5kaWFuMzIobmV3U2V0dGluZ3MuZGF0YUZsb3dPcHRpb25zKTsKKworICBuZXdTZXR0aW5ncy5oYW5kc2hha2VPcHRpb25zICY9IH5VU0JfQ1AyMTAxX0ZMT1dfSFNPX0RUUl9NQVNLOworICBuZXdTZXR0aW5ncy5oYW5kc2hha2VPcHRpb25zIHw9IFVTQl9DUDIxMDFfRkxPV19IU09fRFRSX0FDVElWRTsKKworICBpZiAoZmxvdyAmIFNFUklBTF9GTE9XX09VVFBVVF9DVFMpIHsKKyAgICBmbG93ICY9IH5TRVJJQUxfRkxPV19PVVRQVVRfQ1RTOworICAgIG5ld1NldHRpbmdzLmhhbmRzaGFrZU9wdGlvbnMgfD0gVVNCX0NQMjEwMV9GTE9XX0hTT19DVFNfSU5URVJQUkVUOworICB9IGVsc2UgeworICAgIG5ld1NldHRpbmdzLmhhbmRzaGFrZU9wdGlvbnMgJj0gflVTQl9DUDIxMDFfRkxPV19IU09fQ1RTX0lOVEVSUFJFVDsKKyAgfQorCisgIGlmIChmbG93ICYgU0VSSUFMX0ZMT1dfT1VUUFVUX1JUUykgeworICAgIGZsb3cgJj0gflNFUklBTF9GTE9XX09VVFBVVF9SVFM7CisgICAgbmV3U2V0dGluZ3MuZGF0YUZsb3dPcHRpb25zICY9IH5VU0JfQ1AyMTAxX0ZMT1dfREZPX1JUU19NQVNLOworICAgIG5ld1NldHRpbmdzLmRhdGFGbG93T3B0aW9ucyB8PSBVU0JfQ1AyMTAxX0ZMT1dfREZPX1JUU19YTVRfQUNUSVZFOworICB9IGVsc2UgeworICAgIG5ld1NldHRpbmdzLmRhdGFGbG93T3B0aW9ucyAmPSB+VVNCX0NQMjEwMV9GTE9XX0RGT19SVFNfTUFTSzsKKyAgICBuZXdTZXR0aW5ncy5kYXRhRmxvd09wdGlvbnMgfD0gVVNCX0NQMjEwMV9GTE9XX0RGT19SVFNfQUNUSVZFOworICB9CisKKyAgaWYgKGZsb3cgJiBTRVJJQUxfRkxPV19PVVRQVVRfWE9OKSB7CisgICAgZmxvdyAmPSB+U0VSSUFMX0ZMT1dfT1VUUFVUX1hPTjsKKyAgICBuZXdTZXR0aW5ncy5kYXRhRmxvd09wdGlvbnMgfD0gVVNCX0NQMjEwMV9GTE9XX0RGT19BVVRPX1RSQU5TTUlUOworICB9IGVsc2UgeworICAgIG5ld1NldHRpbmdzLmRhdGFGbG93T3B0aW9ucyAmPSB+VVNCX0NQMjEwMV9GTE9XX0RGT19BVVRPX1RSQU5TTUlUOworICB9CisKKyAgaWYgKGZsb3cgJiBTRVJJQUxfRkxPV19JTlBVVF9YT04pIHsKKyAgICBmbG93ICY9IH5TRVJJQUxfRkxPV19JTlBVVF9YT047CisgICAgbmV3U2V0dGluZ3MuZGF0YUZsb3dPcHRpb25zIHw9IFVTQl9DUDIxMDFfRkxPV19ERk9fQVVUT19SRUNFSVZFOworICB9IGVsc2UgeworICAgIG5ld1NldHRpbmdzLmRhdGFGbG93T3B0aW9ucyAmPSB+VVNCX0NQMjEwMV9GTE9XX0RGT19BVVRPX1JFQ0VJVkU7CisgIH0KKworICBwdXRMaXR0bGVFbmRpYW4zMigmbmV3U2V0dGluZ3MuaGFuZHNoYWtlT3B0aW9ucywgbmV3U2V0dGluZ3MuaGFuZHNoYWtlT3B0aW9ucyk7CisgIHB1dExpdHRsZUVuZGlhbjMyKCZuZXdTZXR0aW5ncy5kYXRhRmxvd09wdGlvbnMsIG5ld1NldHRpbmdzLmRhdGFGbG93T3B0aW9ucyk7CisKKyAgaWYgKGZsb3cpIHsKKyAgICBsb2dVbnN1cHBvcnRlZEZsb3dDb250cm9sKGZsb3cpOworICAgIGVycm5vID0gRUlOVkFMOworICAgIHJldHVybiAwOworICB9CisKKyAgaWYgKG1lbWNtcCgmbmV3U2V0dGluZ3MsICZvbGRTZXR0aW5ncywgc2l6ZSkgPT0gMCkgeworICAgIGxvZ01lc3NhZ2UoTE9HX0NBVEVHT1JZKFNFUklBTF9JTyksICJDUDIxMDEgZmxvdyBjb250cm9sIHVuY2hhbmdlZCIpOworICB9CisKKyAgbG9nTWVzc2FnZShMT0dfQ0FURUdPUlkoU0VSSUFMX0lPKSwgInNldHRpbmcgQ1AyMTAxIGZsb3cgY29udHJvbCIpOworCisgIGlmICghdXNiU2V0Q29tcGxleFByb3BlcnR5X0NQMjEwMShkZXZpY2UsIFVTQl9DUDIxMDFfQ1RMX1NldEZsb3dDb250cm9sLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm5ld1NldHRpbmdzLCBzaXplKSkgeworICAgIGxvZ01lc3NhZ2UoTE9HX1dBUk5JTkcsICJ1bmFibGUgdG8gc2V0IENQMjEwMSBmbG93IGNvbnRyb2w6ICVzIiwgc3RyZXJyb3IoZXJybm8pKTsKKyAgfSBlbHNlIGlmICh1c2JWZXJpZnlGbG93Q29udHJvbF9DUDIxMDEoZGV2aWNlLCAmbmV3U2V0dGluZ3MsIHNpemUpKSB7CisgICAgcmV0dXJuIDE7CisgIH0KKworICByZXR1cm4gMDsKK30KKworc3RhdGljIGludAordXNiVmVyaWZ5TGluZUNvbnRyb2xfQ1AyMTAxIChVc2JEZXZpY2UgKmRldmljZSwgVVNCX0NQMjEwMV9MaW5lQ29udHJvbCBleHBlY3RlZCkgeworICBVU0JfQ1AyMTAxX0xpbmVDb250cm9sIGFjdHVhbDsKKyAgc3NpemVfdCByZXN1bHQ7CisKKyAgbG9nTWVzc2FnZShMT0dfQ0FURUdPUlkoU0VSSUFMX0lPKSwgInZlcmlmeWluZyBDUDIxMDEgbGluZSBjb250cm9sIik7CisgIHJlc3VsdCA9IHVzYkdldFByb3BlcnR5X0NQMjEwMShkZXZpY2UsIFVTQl9DUDIxMDFfQ1RMX0dldExpbmVDb250cm9sLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmFjdHVhbCwgc2l6ZW9mKGFjdHVhbCkpOworCisgIGlmIChyZXN1bHQgPT0gLTEpIHsKKyAgICBsb2dNZXNzYWdlKExPR19XQVJOSU5HLCAidW5hYmxlIHRvIGdldCBDUDIxMDEgbGluZSBjb250cm9sOiAlcyIsIHN0cmVycm9yKGVycm5vKSk7CisgIH0gZWxzZSBpZiAocmVzdWx0ICE9IHNpemVvZihhY3R1YWwpKSB7CisgICAgbG9nTWVzc2FnZShMT0dfV0FSTklORywgInVuZXhwZWN0ZWQgQ1AyMTAxIGxpbmUgY29udHJvbCBzaXplOiAlZCIsIChpbnQpcmVzdWx0KTsKKyAgfSBlbHNlIGlmIChnZXRMaXR0bGVFbmRpYW4xNihhY3R1YWwpICE9IGV4cGVjdGVkKSB7CisgICAgbG9nTWVzc2FnZShMT0dfV0FSTklORywKKyAgICAgICAgICAgICAgICJ1bmV4cGVjdGVkIENQMjEwMSBsaW5lIGNvbnRyb2wgdmFsdWU6IEV4cGVjdGVkOjBYJTA0WCBBY3R1YWw6MFglMDRYIiwKKyAgICAgICAgICAgICAgIGV4cGVjdGVkLCBnZXRMaXR0bGVFbmRpYW4xNihhY3R1YWwpKTsKKyAgfSBlbHNlIHsKKyAgICByZXR1cm4gMTsKKyAgfQorCisgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50Cit1c2JTZXREYXRhRm9ybWF0X0NQMjEwMSAoVXNiRGV2aWNlICpkZXZpY2UsIHVuc2lnbmVkIGludCBkYXRhQml0cywgU2VyaWFsU3RvcEJpdHMgc3RvcEJpdHMsIFNlcmlhbFBhcml0eSBwYXJpdHkpIHsKKyAgaW50IG9rID0gMTsKKyAgVVNCX0NQMjEwMV9MaW5lQ29udHJvbCBsaW5lQ29udHJvbCA9IDA7CisKKyAgeworICAgIFVTQl9DUDIxMDFfTGluZUNvbnRyb2wgdmFsdWU7CisKKyAgICBpZiAoKGRhdGFCaXRzID49IFVTQl9DUDIxMDFfREFUQV9NSU5JTVVNKSAmJgorICAgICAgICAoZGF0YUJpdHMgPD0gVVNCX0NQMjEwMV9EQVRBX01BWElNVU0pKSB7CisgICAgICB2YWx1ZSA9IGRhdGFCaXRzOworICAgIH0gZWxzZSB7CisgICAgICBsb2dVbnN1cHBvcnRlZERhdGFCaXRzKGRhdGFCaXRzKTsKKyAgICAgIG9rID0gMDsKKyAgICAgIHZhbHVlID0gODsKKyAgICB9CisKKyAgICBsaW5lQ29udHJvbCB8PSB2YWx1ZSA8PCBVU0JfQ1AyMTAxX0RBVEFfU0hJRlQ7CisgIH0KKworICB7CisgICAgVVNCX0NQMjEwMV9MaW5lQ29udHJvbCB2YWx1ZTsKKworICAgIHN3aXRjaCAocGFyaXR5KSB7CisgICAgICBjYXNlIFNFUklBTF9QQVJJVFlfTk9ORTogIHZhbHVlID0gVVNCX0NQMjEwMV9QQVJJVFlfTk9ORTsgIGJyZWFrOworICAgICAgY2FzZSBTRVJJQUxfUEFSSVRZX09ERDogICB2YWx1ZSA9IFVTQl9DUDIxMDFfUEFSSVRZX09ERDsgICBicmVhazsKKyAgICAgIGNhc2UgU0VSSUFMX1BBUklUWV9FVkVOOiAgdmFsdWUgPSBVU0JfQ1AyMTAxX1BBUklUWV9FVkVOOyAgYnJlYWs7CisgICAgICBjYXNlIFNFUklBTF9QQVJJVFlfTUFSSzogIHZhbHVlID0gVVNCX0NQMjEwMV9QQVJJVFlfTUFSSzsgIGJyZWFrOworICAgICAgY2FzZSBTRVJJQUxfUEFSSVRZX1NQQUNFOiB2YWx1ZSA9IFVTQl9DUDIxMDFfUEFSSVRZX1NQQUNFOyBicmVhazsKKworICAgICAgZGVmYXVsdDoKKyAgICAgICAgbG9nVW5zdXBwb3J0ZWRQYXJpdHkocGFyaXR5KTsKKyAgICAgICAgb2sgPSAwOworICAgICAgICB2YWx1ZSA9IFVTQl9DUDIxMDFfUEFSSVRZX05PTkU7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGxpbmVDb250cm9sIHw9IHZhbHVlIDw8IFVTQl9DUDIxMDFfUEFSSVRZX1NISUZUOworICB9CisKKyAgeworICAgIFVTQl9DUDIxMDFfTGluZUNvbnRyb2wgdmFsdWU7CisKKyAgICBzd2l0Y2ggKHN0b3BCaXRzKSB7CisgICAgICBjYXNlIFNFUklBTF9TVE9QXzE6ICAgdmFsdWUgPSBVU0JfQ1AyMTAxX1NUT1BfMTsgICBicmVhazsKKyAgICAgIGNhc2UgU0VSSUFMX1NUT1BfMV81OiB2YWx1ZSA9IFVTQl9DUDIxMDFfU1RPUF8xXzU7IGJyZWFrOworICAgICAgY2FzZSBTRVJJQUxfU1RPUF8yOiAgIHZhbHVlID0gVVNCX0NQMjEwMV9TVE9QXzI7ICAgYnJlYWs7CisKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIGxvZ1Vuc3VwcG9ydGVkU3RvcEJpdHMoc3RvcEJpdHMpOworICAgICAgICBvayA9IDA7CisgICAgICAgIHZhbHVlID0gVVNCX0NQMjEwMV9TVE9QXzE7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGxpbmVDb250cm9sIHw9IHZhbHVlIDw8IFVTQl9DUDIxMDFfU1RPUF9TSElGVDsKKyAgfQorCisgIGlmIChvaykgeworICAgIGxvZ01lc3NhZ2UoTE9HX0NBVEVHT1JZKFNFUklBTF9JTyksICJzZXR0aW5nIENQMjEwMSBsaW5lIGNvbnRyb2w6IDBYJTA0WCIsIGxpbmVDb250cm9sKTsKKworICAgIGlmICghdXNiU2V0U2ltcGxlUHJvcGVydHlfQ1AyMTAxKGRldmljZSwgVVNCX0NQMjEwMV9DVExfU2V0TGluZUNvbnRyb2wsIGxpbmVDb250cm9sKSkgeworICAgICAgbG9nTWVzc2FnZShMT0dfV0FSTklORywgInVuYWJsZSB0byBzZXQgQ1AyMTAxIGxpbmUgY29udHJvbDogJTBYMDRYIiwgbGluZUNvbnRyb2wpOworICAgIH0gZWxzZSBpZiAodXNiVmVyaWZ5TGluZUNvbnRyb2xfQ1AyMTAxKGRldmljZSwgbGluZUNvbnRyb2wpKSB7CisgICAgICByZXR1cm4gMTsKKyAgICB9CisgIH0KKworICBlcnJubyA9IEVJTlZBTDsKKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK3VzYlNldEludGVyZmFjZVN0YXRlX0NQMjEwMSAoVXNiRGV2aWNlICpkZXZpY2UsIGludCBzdGF0ZSkgeworICBsb2dNZXNzYWdlKExPR19DQVRFR09SWShTRVJJQUxfSU8pLAorICAgICAgICAgICAgICJzZXR0aW5nIENQMjEwMSBpbnRlcmZhY2Ugc3RhdGU6ICVzIiwKKyAgICAgICAgICAgICAoc3RhdGU/ICJlbmFibGVkIjogImRpc2FibGVkIikpOworCisgIHJldHVybiB1c2JTZXRTaW1wbGVQcm9wZXJ0eV9DUDIxMDEoZGV2aWNlLCBVU0JfQ1AyMTAxX0NUTF9FbmFibGVJbnRlcmZhY2UsIHN0YXRlKTsKK30KKworc3RhdGljIGludAordXNiRW5hYmxlQWRhcHRlcl9DUDIxMDEgKFVzYkRldmljZSAqZGV2aWNlKSB7CisgIGlmICghdXNiU2V0SW50ZXJmYWNlU3RhdGVfQ1AyMTAxKGRldmljZSwgMCkpIHJldHVybiAwOworICBpZiAoIXVzYlNldEludGVyZmFjZVN0YXRlX0NQMjEwMShkZXZpY2UsIDEpKSByZXR1cm4gMDsKKworICByZXR1cm4gMTsKK30KKworY29uc3QgVXNiU2VyaWFsT3BlcmF0aW9ucyB1c2JTZXJpYWxPcGVyYXRpb25zX0NQMjEwMSA9IHsKKyAgLm5hbWUgPSAiQ1AyMTAxIiwgICAgIAorICAuc2V0QmF1ZCA9IHVzYlNldEJhdWRfQ1AyMTAxLAorICAuc2V0RGF0YUZvcm1hdCA9IHVzYlNldERhdGFGb3JtYXRfQ1AyMTAxLAorICAuc2V0Rmxvd0NvbnRyb2wgPSB1c2JTZXRGbG93Q29udHJvbF9DUDIxMDEsCisgIC5zZXREdHJTdGF0ZSA9IHVzYlNldER0clN0YXRlX0NQMjEwMSwKKyAgLnNldFJ0c1N0YXRlID0gdXNiU2V0UnRzU3RhdGVfQ1AyMTAxLAorICAuZW5hYmxlQWRhcHRlciA9IHVzYkVuYWJsZUFkYXB0ZXJfQ1AyMTAxCit9OwpkaWZmIC0tZ2l0IGEvUHJvZ3JhbXMvdXNiX2NwMjEwMS5oIGIvUHJvZ3JhbXMvdXNiX2NwMjEwMS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFkNWY3MTAKLS0tIC9kZXYvbnVsbAorKysgYi9Qcm9ncmFtcy91c2JfY3AyMTAxLmgKQEAgLTAsMCArMSwxNjEgQEAKKy8qCisgKiBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorICogICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorICoKKyAqIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorICoKKyAqIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyAqLworCisjaWZuZGVmIEJSTFRUWV9JTkNMVURFRF9VU0JfQ1AyMTAxCisjZGVmaW5lIEJSTFRUWV9JTkNMVURFRF9VU0JfQ1AyMTAxCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYgLyogX19jcGx1c3BsdXMgKi8KKwordHlwZWRlZiBlbnVtIHsKKyAgVVNCX0NQMjEwMV9DVExfRW5hYmxlSW50ZXJmYWNlICAgICAgICA9IDB4MDAsCisgIFVTQl9DUDIxMDFfQ1RMX1NldEJhdWREaXZpc29yICAgICAgICAgPSAweDAxLAorICBVU0JfQ1AyMTAxX0NUTF9HZXRCYXVkRGl2aXNvciAgICAgICAgID0gMHgwMiwKKyAgVVNCX0NQMjEwMV9DVExfU2V0TGluZUNvbnRyb2wgICAgICAgICA9IDB4MDMsCisgIFVTQl9DUDIxMDFfQ1RMX0dldExpbmVDb250cm9sICAgICAgICAgPSAweDA0LAorICBVU0JfQ1AyMTAxX0NUTF9TZXRCcmVhayAgICAgICAgICAgICAgID0gMHgwNSwKKyAgVVNCX0NQMjEwMV9DVExfU2VuZEltbWVkaWF0ZUNoYXJhY3RlciA9IDB4MDYsCisgIFVTQl9DUDIxMDFfQ1RMX1NldE1vZGVtSGFuZFNoYWtpbmcgICAgPSAweDA3LAorICBVU0JfQ1AyMTAxX0NUTF9HZXRNb2RlbVN0YXR1cyAgICAgICAgID0gMHgwOCwKKyAgVVNCX0NQMjEwMV9DVExfU2V0WG9uICAgICAgICAgICAgICAgICA9IDB4MDksCisgIFVTQl9DUDIxMDFfQ1RMX1NldFhvZmYgICAgICAgICAgICAgICAgPSAweDBBLAorICBVU0JfQ1AyMTAxX0NUTF9TZXRFdmVudE1hc2sgICAgICAgICAgID0gMHgwQiwKKyAgVVNCX0NQMjEwMV9DVExfR2V0RXZlbnRNYXNrICAgICAgICAgICA9IDB4MEMsCisgIFVTQl9DUDIxMDFfQ1RMX1NldFNwZWNpYWxDaGFyYWN0ZXIgICAgPSAweDBELAorICBVU0JfQ1AyMTAxX0NUTF9HZXRTcGVjaWFsQ2hhcmFjdGVycyAgID0gMHgwRSwKKyAgVVNCX0NQMjEwMV9DVExfR2V0UHJvcGVydGllcyAgICAgICAgICA9IDB4MEYsCisgIFVTQl9DUDIxMDFfQ1RMX0dldFNlcmlhbFN0YXR1cyAgICAgICAgPSAweDEwLAorICBVU0JfQ1AyMTAxX0NUTF9SZXNldCAgICAgICAgICAgICAgICAgID0gMHgxMSwKKyAgVVNCX0NQMjEwMV9DVExfUHVyZ2UgICAgICAgICAgICAgICAgICA9IDB4MTIsCisgIFVTQl9DUDIxMDFfQ1RMX1NldEZsb3dDb250cm9sICAgICAgICAgPSAweDEzLAorICBVU0JfQ1AyMTAxX0NUTF9HZXRGbG93Q29udHJvbCAgICAgICAgID0gMHgxNCwKKyAgVVNCX0NQMjEwMV9DVExfRW1iZWRFdmVudHMgICAgICAgICAgICA9IDB4MTUsCisgIFVTQl9DUDIxMDFfQ1RMX0dldEV2ZW50U3RhdGUgICAgICAgICAgPSAweDE2LAorICBVU0JfQ1AyMTAxX0NUTF9TZXRTcGVjaWFsQ2hhcmFjdGVycyAgID0gMHgxOSwKKyAgVVNCX0NQMjEwMV9DVExfR2V0QmF1ZFJhdGUgICAgICAgICAgICA9IDB4MUQsCisgIFVTQl9DUDIxMDFfQ1RMX1NldEJhdWRSYXRlICAgICAgICAgICAgPSAweDFFLAorICBVU0JfQ1AyMTAxX0NUTF9WZW5kb3JTcGVjaWZpYyAgICAgICAgID0gMHhGRgorfSBVU0JfQ1AyMTAxX0NvbnRyb2xSZXF1ZXN0OworCit0eXBlZGVmIHVpbnQzMl90IFVTQl9DUDIxMDFfQmF1ZFJhdGU7Cit0eXBlZGVmIHVpbnQxNl90IFVTQl9DUDIxMDFfQmF1ZERpdmlzb3I7CisjZGVmaW5lIFVTQl9DUDIxMDFfQkFVRF9CQVNFIDBYMzg0MDAwCisKK3R5cGVkZWYgdWludDE2X3QgVVNCX0NQMjEwMV9MaW5lQ29udHJvbDsKKyNkZWZpbmUgVVNCX0NQMjEwMV9TVE9QX1NISUZUIDAKKyNkZWZpbmUgVVNCX0NQMjEwMV9TVE9QX1dJRFRIIDQKKyNkZWZpbmUgVVNCX0NQMjEwMV9QQVJJVFlfU0hJRlQgNAorI2RlZmluZSBVU0JfQ1AyMTAxX1BBUklUWV9XSURUSCA0CisjZGVmaW5lIFVTQl9DUDIxMDFfREFUQV9TSElGVCA4CisjZGVmaW5lIFVTQl9DUDIxMDFfREFUQV9XSURUSCA4CisjZGVmaW5lIFVTQl9DUDIxMDFfREFUQV9NSU5JTVVNIDUKKyNkZWZpbmUgVVNCX0NQMjEwMV9EQVRBX01BWElNVU0gOAorCisKK3R5cGVkZWYgZW51bSB7CisgIFVTQl9DUDIxMDFfU1RPUF8xLAorICBVU0JfQ1AyMTAxX1NUT1BfMV81LAorICBVU0JfQ1AyMTAxX1NUT1BfMgorfSBVU0JfQ1AyMTAxX1N0b3BCaXRzOworCit0eXBlZGVmIGVudW0geworICBVU0JfQ1AyMTAxX1BBUklUWV9OT05FLAorICBVU0JfQ1AyMTAxX1BBUklUWV9PREQsCisgIFVTQl9DUDIxMDFfUEFSSVRZX0VWRU4sCisgIFVTQl9DUDIxMDFfUEFSSVRZX01BUkssCisgIFVTQl9DUDIxMDFfUEFSSVRZX1NQQUNFCit9IFVTQl9DUDIxMDFfUGFyaXR5OworCit0eXBlZGVmIHN0cnVjdCB7CisgIHVpbnQzMl90IGhhbmRzaGFrZU9wdGlvbnM7CisgIHVpbnQzMl90IGRhdGFGbG93T3B0aW9uczsKKyAgdWludDMyX3QgeG9uVGhyZXNob2xkOworICB1aW50MzJfdCB4b2ZmVGhyZXNob2xkOworfSBQQUNLRUQgVVNCX0NQMjEwMV9GbG93Q29udHJvbDsKKwordHlwZWRlZiBlbnVtIHsKKyAgVVNCX0NQMjEwMV9GTE9XX0hTT19EVFJfTUFTSyAgICAgICA9IDBYMDAwMDAwMDMsIC8vIERUUiBsaW5lIHVzYWdlCisgIFVTQl9DUDIxMDFfRkxPV19IU09fRFRSX0lOQUNUSVZFICAgPSAwWDAwMDAwMDAwLCAvLyBEVFIgaXMgaGVsZCBpbmFjdGl2ZQorICBVU0JfQ1AyMTAxX0ZMT1dfSFNPX0RUUl9BQ1RJVkUgICAgID0gMFgwMDAwMDAwMSwgLy8gRFRSIGlzIGhlbGQgYWN0aXZlCisgIFVTQl9DUDIxMDFfRkxPV19IU09fRFRSX0NPTlRST0xMRUQgPSAwWDAwMDAwMDAyLCAvLyBEVFIgaXMgY29udHJvbGxlZAorCisgIFVTQl9DUDIxMDFfRkxPV19IU09fQ1RTX0lOVEVSUFJFVCAgPSAwWDAwMDAwMDA4LCAvLyBDVFMgaXMgaW50ZXJwcmV0ZWQKKyAgVVNCX0NQMjEwMV9GTE9XX0hTT19EU1JfSU5URVJQUkVUICA9IDBYMDAwMDAwMTAsIC8vIERTUiBpcyBpbnRlcnByZXRlZAorICBVU0JfQ1AyMTAxX0ZMT1dfSFNPX0RDRF9JTlRFUlBSRVQgID0gMFgwMDAwMDAyMCwgLy8gRENEIGlzIGludGVycHJldGVkCisgIFVTQl9DUDIxMDFfRkxPV19IU09fRFNSX0RJU0NBUkQgICAgPSAwWDAwMDAwMDQwICAvLyBEU1IgbG93IGRpc2NhcmRzIGRhdGEKK30gVVNCX0NQMjEwMV9Db250cm9sSGFuZHNoYWtlOworCit0eXBlZGVmIGVudW0geworICBVU0JfQ1AyMTAxX0ZMT1dfREZPX0FVVE9fVFJBTlNNSVQgICA9IDBYMDAwMDAwMDEsIC8vIHJlc3BvbmQgdG8gWE9OL1hPRkYgZnJvbSBkZXZpY2UKKyAgVVNCX0NQMjEwMV9GTE9XX0RGT19BVVRPX1JFQ0VJVkUgICAgPSAwWDAwMDAwMDAyLCAvLyBzZW5kIFhPTi9YT0ZGIHRvIGRldmljZQorICBVU0JfQ1AyMTAxX0ZMT1dfREZPX0VSUk9SX0NIQVJBQ1RFUiA9IDBYMDAwMDAwMDQsIC8vIGVuYWJsZSBpbnNlcnRpb24gb2YgZXJyb3Igc3BlY2lhbC1jaGFyYWN0ZXIKKyAgVVNCX0NQMjEwMV9GTE9XX0RGT19TVFJJUF9OVUxTICAgICAgPSAwWDAwMDAwMDA4LCAvLyBkaXNjYXJkIHJlY2VpdmVkIE5VTCBjaGFyYWN0ZXJzCisgIFVTQl9DUDIxMDFfRkxPV19ERk9fQlJFQUtfQ0hBUkFDVEVSID0gMFgwMDAwMDAxMCwgLy8gZW5hYmxlIGluc2VydGlvbiBvZiBicmVhayBzcGVjaWFsLWNoYXJhY3RlcgorCisgIFVTQl9DUDIxMDFfRkxPV19ERk9fUlRTX01BU0sgICAgICAgID0gMFgwMDAwMDBDMCwgLy8gUlRTIGxpbmUgdXNhZ2UKKyAgVVNCX0NQMjEwMV9GTE9XX0RGT19SVFNfSU5BQ1RJVkUgICAgPSAwWDAwMDAwMDAwLCAvLyBSVFMgaXMgc3RhdGljYWxseSBpbmFjdGl2ZQorICBVU0JfQ1AyMTAxX0ZMT1dfREZPX1JUU19BQ1RJVkUgICAgICA9IDBYMDAwMDAwNDAsIC8vIFJUUyBpcyBzdGF0aWNhbGx5IGFjdGl2ZQorICBVU0JfQ1AyMTAxX0ZMT1dfREZPX1JUU19SQ1ZfRkxPVyAgICA9IDBYMDAwMDAwODAsIC8vIFJUUyBpcyB1c2VkIGZvciByZWNlaXZlIGZsb3cgY29udHJvbAorICBVU0JfQ1AyMTAxX0ZMT1dfREZPX1JUU19YTVRfQUNUSVZFICA9IDBYMDAwMDAwQzAsIC8vIFJUUyBzaWduYWxzIHRyYW5zbWl0IGFjdGl2ZQorCisgIFVTQl9DUDIxMDFfRkxPV19ERk9fQVVUT19SQ1ZfQUxXQVlTID0gMFg4MDAwMDAwMCAgLy8gc2VuZCBYT04vWE9GRiB0byBkZXZpY2UgZXZlbiB3aGVuIHN1c3BlbmRlZAorfSBVU0JfQ1AyMTAxX0Zsb3dSZXBsYWNlOworCit0eXBlZGVmIHN0cnVjdCB7CisgIHVpbnQ4X3QgZW9mOyAgIC8vIGluZGljYXRlcyBlbmQtb2YtZmlsZSBvbiBpbnB1dAorICB1aW50OF90IGVycm9yOyAvLyBpbnNlcnRlZCB3aGVuIGFuIGVycm9yIGlzIGRldGVjdGVkCisgIHVpbnQ4X3QgYnJrICA7IC8vIGluc2VydGVkIHdoZW4gYSBicmVhayBpcyBkZXRlY3RlZAorICB1aW50OF90IGV2ZW50OyAvLyBzZXRzIGJpdCAyIG9mIHRoZSBldmVudC1vY2N1cnJlZCBtYXNrCisgIHVpbnQ4X3QgeG9uOyAgIC8vIHNlbnQgdG8gcmVzdW1lIGlucHV0CisgIHVpbnQ4X3QgeG9mZjsgIC8vIHNlbnQgdG8gc3VzcGVuZCBpbnB1dAorfSBQQUNLRUQgVVNCX0NQMjEwMV9TcGVjaWFsQ2hhcmFjdGVyczsKKwordHlwZWRlZiBzdHJ1Y3QgeworICB1aW50MzJfdCBlcnJvcnM7CisgIHVpbnQzMl90IGhvbGRSZWFzb25zOworICB1aW50MzJfdCBpbnB1dENvdW50OworICB1aW50MzJfdCBvdXRwdXRDb3VudDsKKyAgdWludDhfdCBlb2ZSZWNlaXZlZDsKKyAgdWludDhfdCB3YWl0Rm9ySW1tZWRpYXRlOworICB1aW50OF90IHJlc2VydmVkOworfSBQQUNLRUQgVVNCX0NQMjEwMV9TZXJpYWxTdGF0dXM7CisKK3R5cGVkZWYgZW51bSB7CisgIFVTQl9DUDIxMDFfU1NfRVJSX0JSRUFLX1NJR05BTCAgICAgPSAwWDAwMDAwMDAxLAorICBVU0JfQ1AyMTAxX1NTX0VSUl9GUkFNSU5HX0VSUk9SICAgID0gMFgwMDAwMDAwMiwKKyAgVVNCX0NQMjEwMV9TU19FUlJfSEFSRFdBUkVfT1ZFUlJVTiA9IDBYMDAwMDAwMDQsCisgIFVTQl9DUDIxMDFfU1NfRVJSX1FVRVVFX09WRVJSVU4gICAgPSAwWDAwMDAwMDA4LAorICBVU0JfQ1AyMTAxX1NTX0VSUl9QQVJJVFlfRVJST1IgICAgID0gMFgwMDAwMDAxMAorfSBVU0JfQ1AyMTAxX1NlcmlhbEVycm9yOworCit0eXBlZGVmIGVudW0geworICBVU0JfQ1AyMTAxX1NTX0hMRF9YTVRfQ1RTX1dBSVQgID0gMFgwMDAwMDAwMSwKKyAgVVNCX0NQMjEwMV9TU19ITERfWE1UX0RTUl9XQUlUICA9IDBYMDAwMDAwMDIsCisgIFVTQl9DUDIxMDFfU1NfSExEX1hNVF9EQ0RfV0FJVCAgPSAwWDAwMDAwMDA0LAorICBVU0JfQ1AyMTAxX1NTX0hMRF9YTVRfWE9OX1dBSVQgID0gMFgwMDAwMDAwOCwKKyAgVVNCX0NQMjEwMV9TU19ITERfWE1UX1hPRkZfU0VOVCA9IDBYMDAwMDAwMTAsCisgIFVTQl9DUDIxMDFfU1NfSExEX1hNVF9CUktfV0FJVCAgPSAwWDAwMDAwMDIwLAorICBVU0JfQ1AyMTAxX1NTX0hMRF9SQ1ZfRFNSX1dBSVQgID0gMFgwMDAwMDA0MCwKK30gVVNCX0NQMjEwMV9Ib2xkUmVhc29uOworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZiAvKiBfX2NwbHVzcGx1cyAqLworCisjZW5kaWYgLyogQlJMVFRZX0lOQ0xVREVEX1VTQl9DUDIxMDEgKi8KZGlmZiAtLWdpdCBhL1Byb2dyYW1zL3VzYl9jcDIxMTAuYyBiL1Byb2dyYW1zL3VzYl9jcDIxMTAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NTdmZjc3Ci0tLSAvZGV2L251bGwKKysrIGIvUHJvZ3JhbXMvdXNiX2NwMjExMC5jCkBAIC0wLDAgKzEsMjE3IEBACisvKgorICogQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyAqICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyAqCisgKiBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorICoKKyAqIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyAqCisgKiBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisgKi8KKworI2luY2x1ZGUgInByb2xvZ3VlLmgiCisKKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorCisjaW5jbHVkZSAibG9nLmgiCisjaW5jbHVkZSAidXNiX3NlcmlhbC5oIgorI2luY2x1ZGUgInVzYl9jcDIxMTAuaCIKKyNpbmNsdWRlICJ1c2JfaGlkLmgiCisjaW5jbHVkZSAiYml0ZmllbGQuaCIKKwordHlwZWRlZiBlbnVtIHsKKyAgVVNCX0NQMjExMF9QQVJJVFlfTk9ORSwKKyAgVVNCX0NQMjExMF9QQVJJVFlfRVZFTiwKKyAgVVNCX0NQMjExMF9QQVJJVFlfT0RELAorICBVU0JfQ1AyMTEwX1BBUklUWV9NQVJLLAorICBVU0JfQ1AyMTEwX1BBUklUWV9TUEFDRQorfSBVU0JfQ1AyMTEwX1Bhcml0eTsKKwordHlwZWRlZiBlbnVtIHsKKyAgVVNCX0NQMjExMF9GTE9XX05PTkUsCisgIFVTQl9DUDIxMTBfRkxPV19IQVJEV0FSRQorfSBVU0JfQ1AyMTEwX0Zsb3dDb250cm9sOworCit0eXBlZGVmIGVudW0geworICBVU0JfQ1AyMTEwX0RBVEFfNSwKKyAgVVNCX0NQMjExMF9EQVRBXzYsCisgIFVTQl9DUDIxMTBfREFUQV83LAorICBVU0JfQ1AyMTEwX0RBVEFfOAorfSBVU0JfQ1AyMTEwX0RhdGFCaXRzOworCit0eXBlZGVmIGVudW0geworICBVU0JfQ1AyMTEwX1NUT1BfU0hPUlQsCisgIFVTQl9DUDIxMTBfU1RPUF9MT05HCit9IFVTQl9DUDIxMTBfU3RvcEJpdHM7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgdWludDhfdCByZXBvcnRJZGVudGlmaWVyOworICB1aW50MzJfdCBiYXVkUmF0ZTsKKyAgdWludDhfdCBwYXJpdHk7CisgIHVpbnQ4X3QgZmxvd0NvbnRyb2w7CisgIHVpbnQ4X3QgZGF0YUJpdHM7CisgIHVpbnQ4X3Qgc3RvcEJpdHM7Cit9IFBBQ0tFRCBVU0JfQ1AyMTEwX1VhcnRDb25maWd1cmF0aW9uUmVwb3J0OworCitzdGF0aWMgaW50Cit1c2JJbnB1dEZpbHRlcl9DUDIxMTAgKFVzYklucHV0RmlsdGVyRGF0YSAqZGF0YSkgeworICByZXR1cm4gdXNiU2tpcEluaXRpYWxCeXRlcyhkYXRhLCAxKTsKK30KKworc3RhdGljIGludAordXNiU2V0UmVwb3J0X0NQMjExMCAoVXNiRGV2aWNlICpkZXZpY2UsIGNvbnN0IHZvaWQgKnJlcG9ydCwgc2l6ZV90IHNpemUpIHsKKyAgY29uc3QgdW5zaWduZWQgY2hhciAqYnl0ZXMgPSByZXBvcnQ7CisgIHNzaXplX3QgcmVzdWx0ID0gdXNiSGlkU2V0UmVwb3J0KGRldmljZSwgMCwgYnl0ZXNbMF0sIHJlcG9ydCwgc2l6ZSwgMTAwMCk7CisgIHJldHVybiByZXN1bHQgIT0gLTE7Cit9CisKK3N0YXRpYyBpbnQKK3VzYlNldExpbmVDb25maWd1cmF0aW9uX0NQMjExMCAoVXNiRGV2aWNlICpkZXZpY2UsIHVuc2lnbmVkIGludCBiYXVkLCB1bnNpZ25lZCBpbnQgZGF0YUJpdHMsIFNlcmlhbFN0b3BCaXRzIHN0b3BCaXRzLCBTZXJpYWxQYXJpdHkgcGFyaXR5LCBTZXJpYWxGbG93Q29udHJvbCBmbG93Q29udHJvbCkgeworICBVU0JfQ1AyMTEwX1VhcnRDb25maWd1cmF0aW9uUmVwb3J0IHJlcG9ydDsKKworICBtZW1zZXQoJnJlcG9ydCwgMCwgc2l6ZW9mKHJlcG9ydCkpOworICByZXBvcnQucmVwb3J0SWRlbnRpZmllciA9IDBYNTA7CisKKyAgaWYgKChiYXVkID49IDMwMCkgJiYgKGJhdWQgPD0gNTAwMDAwKSkgeworICAgIHB1dEJpZ0VuZGlhbjMyKCZyZXBvcnQuYmF1ZFJhdGUsIGJhdWQpOworICB9IGVsc2UgeworICAgIGxvZ1Vuc3VwcG9ydGVkQmF1ZChiYXVkKTsKKyAgICBlcnJubyA9IEVJTlZBTDsKKyAgICByZXR1cm4gMDsKKyAgfQorCisgIHN3aXRjaCAoZGF0YUJpdHMpIHsKKyAgICBjYXNlIDU6CisgICAgICByZXBvcnQuZGF0YUJpdHMgPSBVU0JfQ1AyMTEwX0RBVEFfNTsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSA2OgorICAgICAgcmVwb3J0LmRhdGFCaXRzID0gVVNCX0NQMjExMF9EQVRBXzY7CisgICAgICBicmVhazsKKworICAgIGNhc2UgNzoKKyAgICAgIHJlcG9ydC5kYXRhQml0cyA9IFVTQl9DUDIxMTBfREFUQV83OworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIDg6CisgICAgICByZXBvcnQuZGF0YUJpdHMgPSBVU0JfQ1AyMTEwX0RBVEFfODsKKyAgICAgIGJyZWFrOworCisgICAgZGVmYXVsdDoKKyAgICAgIGxvZ1Vuc3VwcG9ydGVkRGF0YUJpdHMoZGF0YUJpdHMpOworICAgICAgZXJybm8gPSBFSU5WQUw7CisgICAgICByZXR1cm4gMDsKKyAgfQorCisgIGlmIChzdG9wQml0cyA9PSBTRVJJQUxfU1RPUF8xKSB7CisgICAgcmVwb3J0LnN0b3BCaXRzID0gVVNCX0NQMjExMF9TVE9QX1NIT1JUOworICB9IGVsc2UgaWYgKHN0b3BCaXRzID09ICgoZGF0YUJpdHMgPiA1KT8gU0VSSUFMX1NUT1BfMjogU0VSSUFMX1NUT1BfMV81KSkgeworICAgIHJlcG9ydC5zdG9wQml0cyA9IFVTQl9DUDIxMTBfU1RPUF9MT05HOworICB9IGVsc2UgeworICAgIGxvZ1Vuc3VwcG9ydGVkU3RvcEJpdHMoc3RvcEJpdHMpOworICAgIGVycm5vID0gRUlOVkFMOworICAgIHJldHVybiAwOworICB9CisKKyAgc3dpdGNoIChwYXJpdHkpIHsKKyAgICBjYXNlIFNFUklBTF9QQVJJVFlfTk9ORToKKyAgICAgIHJlcG9ydC5wYXJpdHkgPSBVU0JfQ1AyMTEwX1BBUklUWV9OT05FOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNFUklBTF9QQVJJVFlfT0REOgorICAgICAgcmVwb3J0LnBhcml0eSA9IFVTQl9DUDIxMTBfUEFSSVRZX09ERDsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBTRVJJQUxfUEFSSVRZX0VWRU46CisgICAgICByZXBvcnQucGFyaXR5ID0gVVNCX0NQMjExMF9QQVJJVFlfRVZFTjsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBTRVJJQUxfUEFSSVRZX01BUks6CisgICAgICByZXBvcnQucGFyaXR5ID0gVVNCX0NQMjExMF9QQVJJVFlfTUFSSzsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBTRVJJQUxfUEFSSVRZX1NQQUNFOgorICAgICAgcmVwb3J0LnBhcml0eSA9IFVTQl9DUDIxMTBfUEFSSVRZX1NQQUNFOworICAgICAgYnJlYWs7CisKKyAgICBkZWZhdWx0OgorICAgICAgbG9nVW5zdXBwb3J0ZWRQYXJpdHkocGFyaXR5KTsKKyAgICAgIGVycm5vID0gRUlOVkFMOworICAgICAgcmV0dXJuIDA7CisgIH0KKworICBzd2l0Y2ggKGZsb3dDb250cm9sKSB7CisgICAgY2FzZSBTRVJJQUxfRkxPV19OT05FOgorICAgICAgcmVwb3J0LmZsb3dDb250cm9sID0gVVNCX0NQMjExMF9GTE9XX05PTkU7CisgICAgICBicmVhazsKKworICAgIGNhc2UgU0VSSUFMX0ZMT1dfSEFSRFdBUkU6CisgICAgICByZXBvcnQuZmxvd0NvbnRyb2wgPSBVU0JfQ1AyMTEwX0ZMT1dfSEFSRFdBUkU7CisgICAgICBicmVhazsKKworICAgIGRlZmF1bHQ6CisgICAgICBsb2dVbnN1cHBvcnRlZEZsb3dDb250cm9sKGZsb3dDb250cm9sKTsKKyAgICAgIGVycm5vID0gRUlOVkFMOworICAgICAgcmV0dXJuIDA7CisgIH0KKworICByZXR1cm4gdXNiU2V0UmVwb3J0X0NQMjExMChkZXZpY2UsICZyZXBvcnQsIHNpemVvZihyZXBvcnQpKTsKK30KKworc3RhdGljIGludAordXNiU2V0VWFydFN0YXR1c19DUDIxMTAgKFVzYkRldmljZSAqZGV2aWNlLCB1bnNpZ25lZCBjaGFyIHN0YXR1cykgeworICBjb25zdCB1bnNpZ25lZCBjaGFyIHJlcG9ydFtdID0gezBYNDEsIHN0YXR1c307CisgIHJldHVybiB1c2JTZXRSZXBvcnRfQ1AyMTEwKGRldmljZSwgcmVwb3J0LCBzaXplb2YocmVwb3J0KSk7Cit9CisKK3N0YXRpYyBpbnQKK3VzYkVuYWJsZUFkYXB0ZXJfQ1AyMTEwIChVc2JEZXZpY2UgKmRldmljZSkgeworICBpZiAodXNiU2V0VWFydFN0YXR1c19DUDIxMTAoZGV2aWNlLCAwWDAxKSkgeworICAgIHJldHVybiAxOworICB9CisKKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzc2l6ZV90Cit1c2JXcml0ZURhdGFfQ1AyMTEwIChVc2JEZXZpY2UgKmRldmljZSwgY29uc3Qgdm9pZCAqZGF0YSwgc2l6ZV90IHNpemUpIHsKKyAgY29uc3QgdW5zaWduZWQgY2hhciAqZmlyc3QgPSBkYXRhOworICBjb25zdCB1bnNpZ25lZCBjaGFyICpuZXh0ID0gZmlyc3Q7CisKKyAgd2hpbGUgKHNpemUpIHsKKyAgICB1bnNpZ25lZCBjaGFyIHJlcG9ydFswWDQwXTsKKyAgICBzaXplX3QgY291bnQgPSBzaXplb2YocmVwb3J0KSAtIDE7CisKKyAgICBpZiAoY291bnQgPiBzaXplKSBjb3VudCA9IHNpemU7CisgICAgcmVwb3J0WzBdID0gY291bnQ7CisgICAgbWVtY3B5KCZyZXBvcnRbMV0sIG5leHQsIGNvdW50KTsKKworICAgIHsKKyAgICAgIHNzaXplX3QgcmVzdWx0ID0gdXNiV3JpdGVFbmRwb2ludChkZXZpY2UsIDIsIHJlcG9ydCwgY291bnQrMSwgMTAwMCk7CisgICAgICBpZiAocmVzdWx0ID09IC0xKSByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIG5leHQgKz0gY291bnQ7CisgICAgc2l6ZSAtPSBjb3VudDsKKyAgfQorCisgIHJldHVybiBuZXh0IC0gZmlyc3Q7Cit9CisKK2NvbnN0IFVzYlNlcmlhbE9wZXJhdGlvbnMgdXNiU2VyaWFsT3BlcmF0aW9uc19DUDIxMTAgPSB7CisgIC5uYW1lID0gIkNQMjExMCIsCisKKyAgLnNldExpbmVDb25maWd1cmF0aW9uID0gJnVzYlNldExpbmVDb25maWd1cmF0aW9uX0NQMjExMCwKKworICAuZW5hYmxlQWRhcHRlciA9IHVzYkVuYWJsZUFkYXB0ZXJfQ1AyMTEwLAorICAuaW5wdXRGaWx0ZXIgPSB1c2JJbnB1dEZpbHRlcl9DUDIxMTAsCisgIC53cml0ZURhdGEgPSB1c2JXcml0ZURhdGFfQ1AyMTEwCit9OwpkaWZmIC0tZ2l0IGEvUHJvZ3JhbXMvdXNiX2NwMjExMC5oIGIvUHJvZ3JhbXMvdXNiX2NwMjExMC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRmNDQxYWUKLS0tIC9kZXYvbnVsbAorKysgYi9Qcm9ncmFtcy91c2JfY3AyMTEwLmgKQEAgLTAsMCArMSwzMCBAQAorLyoKKyAqIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisgKiAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisgKgorICogQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKKyNpZm5kZWYgQlJMVFRZX0lOQ0xVREVEX1VTQl9DUDIxMTAKKyNkZWZpbmUgQlJMVFRZX0lOQ0xVREVEX1VTQl9DUDIxMTAKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZiAvKiBfX2NwbHVzcGx1cyAqLworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZiAvKiBfX2NwbHVzcGx1cyAqLworCisjZW5kaWYgLyogQlJMVFRZX0lOQ0xVREVEX1VTQl9DUDIxMTAgKi8KZGlmZiAtLWdpdCBhL1Byb2dyYW1zL3VzYl9kYXJ3aW4uYyBiL1Byb2dyYW1zL3VzYl9kYXJ3aW4uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMzU5NzFlCi0tLSAvZGV2L251bGwKKysrIGIvUHJvZ3JhbXMvdXNiX2Rhcndpbi5jCkBAIC0wLDAgKzEsODM2IEBACisvKgorICogQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyAqICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyAqCisgKiBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorICoKKyAqIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyAqCisgKiBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisgKi8KKworI2luY2x1ZGUgInByb2xvZ3VlLmgiCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8bWFjaC9tYWNoLmg+CisjaW5jbHVkZSA8SU9LaXQvSU9LaXRMaWIuaD4KKyNpbmNsdWRlIDxJT0tpdC9JT0NGUGx1Z0luLmg+CisjaW5jbHVkZSA8SU9LaXQvdXNiL0lPVVNCTGliLmg+CisKKyNpbmNsdWRlICJsb2cuaCIKKyNpbmNsdWRlICJpb191c2IuaCIKKyNpbmNsdWRlICJ1c2JfaW50ZXJuYWwuaCIKKyNpbmNsdWRlICJzeXN0ZW1fZGFyd2luLmgiCisKK3R5cGVkZWYgc3RydWN0IHsKKyAgVXNiRW5kcG9pbnQgKmVuZHBvaW50OworICB2b2lkICpjb250ZXh0OworICB2b2lkICpidWZmZXI7CisgIHNpemVfdCBsZW5ndGg7CisKKyAgSU9SZXR1cm4gcmVzdWx0OworICBzc2l6ZV90IGNvdW50OworfSBVc2JBc3luY2hyb25vdXNSZXF1ZXN0OworCitzdHJ1Y3QgVXNiRGV2aWNlRXh0ZW5zaW9uU3RydWN0IHsKKyAgSU9VU0JEZXZpY2VJbnRlcmZhY2UxODIgKipkZXZpY2U7CisgIHVuc2lnbmVkIGRldmljZU9wZW5lZDoxOworCisgIElPVVNCSW50ZXJmYWNlSW50ZXJmYWNlMTkwICoqaW50ZXJmYWNlOworICB1bnNpZ25lZCBpbnRlcmZhY2VPcGVuZWQ6MTsKKyAgVUludDggcGlwZUNvdW50OworCisgIENGUnVuTG9vcFNvdXJjZVJlZiBydW5sb29wU291cmNlOworfTsKKworc3RydWN0IFVzYkVuZHBvaW50RXh0ZW5zaW9uU3RydWN0IHsKKyAgVXNiRW5kcG9pbnQgKmVuZHBvaW50OworICBRdWV1ZSAqY29tcGxldGVkUmVxdWVzdHM7CisKKyAgVUludDggcGlwZU51bWJlcjsKKyAgVUludDggZW5kcG9pbnROdW1iZXI7CisgIFVJbnQ4IHRyYW5zZmVyRGlyZWN0aW9uOworICBVSW50OCB0cmFuc2Zlck1vZGU7CisgIFVJbnQ4IHBvbGxJbnRlcnZhbDsKKyAgVUludDE2IHBhY2tldFNpemU7Cit9OworCitzdGF0aWMgdm9pZAorc2V0VXNiRXJyb3IgKGxvbmcgaW50IHJlc3VsdCwgY29uc3QgY2hhciAqYWN0aW9uKSB7CisgIHN3aXRjaCAocmVzdWx0KSB7CisgICAgZGVmYXVsdDogc2V0RGFyd2luU3lzdGVtRXJyb3IocmVzdWx0KTsgYnJlYWs7CisKKyAgLy9NQVBfREFSV0lOX0VSUk9SKGtJT1VTQlVua25vd25QaXBlRXJyLCApCisgIC8vTUFQX0RBUldJTl9FUlJPUihrSU9VU0JUb29NYW55UGlwZXNFcnIsICkKKyAgLy9NQVBfREFSV0lOX0VSUk9SKGtJT1VTQk5vQXN5bmNQb3J0RXJyLCApCisgIC8vTUFQX0RBUldJTl9FUlJPUihrSU9VU0JOb3RFbm91Z2hQaXBlc0VyciwgKQorICAvL01BUF9EQVJXSU5fRVJST1Ioa0lPVVNCTm90RW5vdWdoUG93ZXJFcnIsICkKKyAgLy9NQVBfREFSV0lOX0VSUk9SKGtJT1VTQkVuZHBvaW50Tm90Rm91bmQsICkKKyAgLy9NQVBfREFSV0lOX0VSUk9SKGtJT1VTQkNvbmZpZ05vdEZvdW5kLCApCisgICAgTUFQX0RBUldJTl9FUlJPUihrSU9VU0JUcmFuc2FjdGlvblRpbWVvdXQsIEVUSU1FRE9VVCkKKyAgLy9NQVBfREFSV0lOX0VSUk9SKGtJT1VTQlRyYW5zYWN0aW9uUmV0dXJuZWQsICkKKyAgLy9NQVBfREFSV0lOX0VSUk9SKGtJT1VTQlBpcGVTdGFsbGVkLCApCisgIC8vTUFQX0RBUldJTl9FUlJPUihrSU9VU0JJbnRlcmZhY2VOb3RGb3VuZCwgKQorICAvL01BUF9EQVJXSU5fRVJST1Ioa0lPVVNCTG93TGF0ZW5jeUJ1ZmZlck5vdFByZXZpb3VzbHlBbGxvY2F0ZWQsICkKKyAgLy9NQVBfREFSV0lOX0VSUk9SKGtJT1VTQkxvd0xhdGVuY3lGcmFtZUxpc3ROb3RQcmV2aW91c2x5QWxsb2NhdGVkLCApCisgIC8vTUFQX0RBUldJTl9FUlJPUihrSU9VU0JIaWdoU3BlZWRTcGxpdEVycm9yLCApCisgIC8vTUFQX0RBUldJTl9FUlJPUihrSU9VU0JMaW5rRXJyLCApCisgIC8vTUFQX0RBUldJTl9FUlJPUihrSU9VU0JOb3RTZW50MkVyciwgKQorICAvL01BUF9EQVJXSU5fRVJST1Ioa0lPVVNCTm90U2VudDFFcnIsICkKKyAgLy9NQVBfREFSV0lOX0VSUk9SKGtJT1VTQkJ1ZmZlclVuZGVycnVuRXJyLCApCisgIC8vTUFQX0RBUldJTl9FUlJPUihrSU9VU0JCdWZmZXJPdmVycnVuRXJyLCApCisgIC8vTUFQX0RBUldJTl9FUlJPUihrSU9VU0JSZXNlcnZlZDJFcnIsICkKKyAgLy9NQVBfREFSV0lOX0VSUk9SKGtJT1VTQlJlc2VydmVkMUVyciwgKQorICAvL01BUF9EQVJXSU5fRVJST1Ioa0lPVVNCV3JvbmdQSURFcnIsICkKKyAgLy9NQVBfREFSV0lOX0VSUk9SKGtJT1VTQlBJRENoZWNrRXJyLCApCisgIC8vTUFQX0RBUldJTl9FUlJPUihrSU9VU0JEYXRhVG9nZ2xlRXJyLCApCisgIC8vTUFQX0RBUldJTl9FUlJPUihrSU9VU0JCaXRzdHVmRXJyLCApCisgIC8vTUFQX0RBUldJTl9FUlJPUihrSU9VU0JDUkNFcnIsICkKKyAgfQorCisgIGlmIChhY3Rpb24pIHsKKyAgICBsb2dNZXNzYWdlKExPR19XQVJOSU5HLCAiRGFyd2luIGVycm9yIDBYJWxYLiIsIHJlc3VsdCk7CisgICAgbG9nU3lzdGVtRXJyb3IoYWN0aW9uKTsKKyAgfQorfQorCitzdGF0aWMgaW50CitvcGVuRGV2aWNlIChVc2JEZXZpY2UgKmRldmljZSwgaW50IHNlaXplKSB7CisgIFVzYkRldmljZUV4dGVuc2lvbiAqZGV2eCA9IGRldmljZS0+ZXh0ZW5zaW9uOworICBJT1JldHVybiByZXN1bHQ7CisKKyAgaWYgKCFkZXZ4LT5kZXZpY2VPcGVuZWQpIHsKKyAgICBjb25zdCBjaGFyICphY3Rpb24gPSAib3BlbmVkIjsKKyAgICBpbnQgbGV2ZWwgPSBMT0dfSU5GTzsKKworICAgIHJlc3VsdCA9ICgqZGV2eC0+ZGV2aWNlKS0+VVNCRGV2aWNlT3BlbihkZXZ4LT5kZXZpY2UpOworICAgIGlmIChyZXN1bHQgIT0ga0lPUmV0dXJuU3VjY2VzcykgeworICAgICAgc2V0VXNiRXJyb3IocmVzdWx0LCAiVVNCIGRldmljZSBvcGVuIik7CisgICAgICBpZiAoKHJlc3VsdCAhPSBrSU9SZXR1cm5FeGNsdXNpdmVBY2Nlc3MpIHx8ICFzZWl6ZSkgcmV0dXJuIDA7CisKKyAgICAgIHJlc3VsdCA9ICgqZGV2eC0+ZGV2aWNlKS0+VVNCRGV2aWNlT3BlblNlaXplKGRldngtPmRldmljZSk7CisgICAgICBpZiAocmVzdWx0ICE9IGtJT1JldHVyblN1Y2Nlc3MpIHsKKyAgICAgICAgc2V0VXNiRXJyb3IocmVzdWx0LCAiVVNCIGRldmljZSBzZWl6ZSIpOworICAgICAgICByZXR1cm4gMDsKKyAgICAgIH0KKworICAgICAgYWN0aW9uID0gInNlaXplZCI7CisgICAgICBsZXZlbCA9IExPR19OT1RJQ0U7CisgICAgfQorCisgICAgbG9nTWVzc2FnZShsZXZlbCwgIlVTQiBkZXZpY2UgJXM6IHZlbmRvcj0lMDRYIHByb2R1Y3Q9JTA0WCIsCisgICAgICAgICAgICAgICBhY3Rpb24sIGRldmljZS0+ZGVzY3JpcHRvci5pZFZlbmRvciwgZGV2aWNlLT5kZXNjcmlwdG9yLmlkUHJvZHVjdCk7CisgICAgZGV2eC0+ZGV2aWNlT3BlbmVkID0gMTsKKyAgfQorCisgIHJldHVybiAxOworfQorCitzdGF0aWMgaW50Cit1bnNldEludGVyZmFjZSAoVXNiRGV2aWNlRXh0ZW5zaW9uICpkZXZ4KSB7CisgIGludCBvayA9IDE7CisKKyAgaWYgKGRldngtPmludGVyZmFjZSkgeworICAgIElPUmV0dXJuIHJlc3VsdDsKKworICAgIGlmIChkZXZ4LT5pbnRlcmZhY2VPcGVuZWQpIHsKKyAgICAgIGlmIChkZXZ4LT5ydW5sb29wU291cmNlKSB7CisgICAgICAgIHsKKyAgICAgICAgICBpbnQgcGlwZTsKKyAgICAgICAgICBmb3IgKHBpcGU9MTsgcGlwZTw9ZGV2eC0+cGlwZUNvdW50OyArK3BpcGUpIHsKKyAgICAgICAgICAgIHJlc3VsdCA9ICgqZGV2eC0+aW50ZXJmYWNlKS0+QWJvcnRQaXBlKGRldngtPmludGVyZmFjZSwgcGlwZSk7CisgICAgICAgICAgICBpZiAocmVzdWx0ICE9IGtJT1JldHVyblN1Y2Nlc3MpIHsKKyAgICAgICAgICAgICAgc2V0VXNiRXJyb3IocmVzdWx0LCAiVVNCIHBpcGUgYWJvcnQiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICByZW1vdmVSdW5Mb29wU291cmNlKGRldngtPnJ1bmxvb3BTb3VyY2UpOworICAgICAgfQorCisgICAgICByZXN1bHQgPSAoKmRldngtPmludGVyZmFjZSktPlVTQkludGVyZmFjZUNsb3NlKGRldngtPmludGVyZmFjZSk7CisgICAgICBpZiAocmVzdWx0ICE9IGtJT1JldHVyblN1Y2Nlc3MpIHsKKyAgICAgICAgc2V0VXNiRXJyb3IocmVzdWx0LCAiVVNCIGludGVyZmFjZSBjbG9zZSIpOworICAgICAgICBvayA9IDA7CisgICAgICB9CisgICAgICBkZXZ4LT5pbnRlcmZhY2VPcGVuZWQgPSAwOworICAgIH0KKworICAgICgqZGV2eC0+aW50ZXJmYWNlKS0+UmVsZWFzZShkZXZ4LT5pbnRlcmZhY2UpOworICAgIGRldngtPmludGVyZmFjZSA9IE5VTEw7CisgIH0KKworICByZXR1cm4gb2s7Cit9CisKK3N0YXRpYyBpbnQKK2lzSW50ZXJmYWNlIChJT1VTQkludGVyZmFjZUludGVyZmFjZTE5MCAqKmludGVyZmFjZSwgVUludDggbnVtYmVyKSB7CisgIElPUmV0dXJuIHJlc3VsdDsKKyAgVUludDggbnVtOworCisgIHJlc3VsdCA9ICgqaW50ZXJmYWNlKS0+R2V0SW50ZXJmYWNlTnVtYmVyKGludGVyZmFjZSwgJm51bSk7CisgIGlmIChyZXN1bHQgIT0ga0lPUmV0dXJuU3VjY2VzcykgeworICAgIHNldFVzYkVycm9yKHJlc3VsdCwgIlVTQiBpbnRlcmZhY2UgbnVtYmVyIHF1ZXJ5Iik7CisgIH0gZWxzZSBpZiAobnVtID09IG51bWJlcikgeworICAgIHJldHVybiAxOworICB9CisKKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK3NldEludGVyZmFjZSAoVXNiRGV2aWNlRXh0ZW5zaW9uICpkZXZ4LCBVSW50OCBudW1iZXIpIHsKKyAgaW50IGZvdW5kID0gMDsKKyAgSU9SZXR1cm4gcmVzdWx0OworICBpb19pdGVyYXRvcl90IGl0ZXJhdG9yID0gMDsKKworICBpZiAoZGV2eC0+aW50ZXJmYWNlKQorICAgIGlmIChpc0ludGVyZmFjZShkZXZ4LT5pbnRlcmZhY2UsIG51bWJlcikpCisgICAgICByZXR1cm4gMTsKKworICB7CisgICAgSU9VU0JGaW5kSW50ZXJmYWNlUmVxdWVzdCByZXF1ZXN0OworCisgICAgcmVxdWVzdC5iSW50ZXJmYWNlQ2xhc3MgPSBrSU9VU0JGaW5kSW50ZXJmYWNlRG9udENhcmU7CisgICAgcmVxdWVzdC5iSW50ZXJmYWNlU3ViQ2xhc3MgPSBrSU9VU0JGaW5kSW50ZXJmYWNlRG9udENhcmU7CisgICAgcmVxdWVzdC5iSW50ZXJmYWNlUHJvdG9jb2wgPSBrSU9VU0JGaW5kSW50ZXJmYWNlRG9udENhcmU7CisgICAgcmVxdWVzdC5iQWx0ZXJuYXRlU2V0dGluZyA9IGtJT1VTQkZpbmRJbnRlcmZhY2VEb250Q2FyZTsKKworICAgIHJlc3VsdCA9ICgqZGV2eC0+ZGV2aWNlKS0+Q3JlYXRlSW50ZXJmYWNlSXRlcmF0b3IoZGV2eC0+ZGV2aWNlLCAmcmVxdWVzdCwgJml0ZXJhdG9yKTsKKyAgfQorCisgIGlmICgocmVzdWx0ID09IGtJT1JldHVyblN1Y2Nlc3MpICYmIGl0ZXJhdG9yKSB7CisgICAgaW9fc2VydmljZV90IHNlcnZpY2U7CisKKyAgICB3aGlsZSAoKHNlcnZpY2UgPSBJT0l0ZXJhdG9yTmV4dChpdGVyYXRvcikpKSB7CisgICAgICBJT0NGUGx1Z0luSW50ZXJmYWNlICoqcGx1Z2luID0gTlVMTDsKKyAgICAgIFNJbnQzMiBzY29yZTsKKworICAgICAgcmVzdWx0ID0gSU9DcmVhdGVQbHVnSW5JbnRlcmZhY2VGb3JTZXJ2aWNlKHNlcnZpY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga0lPVVNCSW50ZXJmYWNlVXNlckNsaWVudFR5cGVJRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrSU9DRlBsdWdJbkludGVyZmFjZUlELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZwbHVnaW4sICZzY29yZSk7CisgICAgICBJT09iamVjdFJlbGVhc2Uoc2VydmljZSk7CisgICAgICBzZXJ2aWNlID0gMDsKKworICAgICAgaWYgKChyZXN1bHQgPT0ga0lPUmV0dXJuU3VjY2VzcykgJiYgcGx1Z2luKSB7CisgICAgICAgIElPVVNCSW50ZXJmYWNlSW50ZXJmYWNlMTkwICoqaW50ZXJmYWNlID0gTlVMTDsKKworICAgICAgICByZXN1bHQgPSAoKnBsdWdpbiktPlF1ZXJ5SW50ZXJmYWNlKHBsdWdpbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDRlVVSURHZXRVVUlEQnl0ZXMoa0lPVVNCSW50ZXJmYWNlSW50ZXJmYWNlSUQxOTApLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChMUFZPSUQpJmludGVyZmFjZSk7CisgICAgICAgICgqcGx1Z2luKS0+UmVsZWFzZShwbHVnaW4pOworICAgICAgICBwbHVnaW4gPSBOVUxMOworCisgICAgICAgIGlmICgocmVzdWx0ID09IGtJT1JldHVyblN1Y2Nlc3MpICYmIGludGVyZmFjZSkgeworICAgICAgICAgIGlmIChpc0ludGVyZmFjZShpbnRlcmZhY2UsIG51bWJlcikpIHsKKyAgICAgICAgICAgIHVuc2V0SW50ZXJmYWNlKGRldngpOworICAgICAgICAgICAgZGV2eC0+aW50ZXJmYWNlID0gaW50ZXJmYWNlOworICAgICAgICAgICAgZm91bmQgPSAxOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgfQorCisgICAgICAgICAgKCppbnRlcmZhY2UpLT5SZWxlYXNlKGludGVyZmFjZSk7CisgICAgICAgICAgaW50ZXJmYWNlID0gTlVMTDsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICBzZXRVc2JFcnJvcihyZXN1bHQsICJVU0IgaW50ZXJmYWNlIGludGVyZmFjZSBjcmVhdGUiKTsKKyAgICAgICAgfQorICAgICAgfSBlbHNlIHsKKyAgICAgICAgc2V0VXNiRXJyb3IocmVzdWx0LCAiVVNCIGludGVyZmFjZSBzZXJ2aWNlIHBsdWdpbiBjcmVhdGUiKTsKKyAgICAgIH0KKyAgICB9CisgICAgaWYgKCFmb3VuZCkgbG9nTWVzc2FnZShMT0dfRVJSLCAiVVNCIGludGVyZmFjZSBub3QgZm91bmQ6ICVkIiwgbnVtYmVyKTsKKworICAgIElPT2JqZWN0UmVsZWFzZShpdGVyYXRvcik7CisgICAgaXRlcmF0b3IgPSAwOworICB9IGVsc2UgeworICAgIHNldFVzYkVycm9yKHJlc3VsdCwgIlVTQiBpbnRlcmZhY2UgaXRlcmF0b3IgY3JlYXRlIik7CisgIH0KKworICByZXR1cm4gZm91bmQ7Cit9CisKK3N0YXRpYyB2b2lkCit1c2JBc3luY2hyb25vdXNSZXF1ZXN0Q2FsbGJhY2sgKHZvaWQgKmNvbnRleHQsIElPUmV0dXJuIHJlc3VsdCwgdm9pZCAqYXJnKSB7CisgIFVzYkFzeW5jaHJvbm91c1JlcXVlc3QgKnJlcXVlc3QgPSBjb250ZXh0OworICBVc2JFbmRwb2ludCAqZW5kcG9pbnQgPSByZXF1ZXN0LT5lbmRwb2ludDsKKyAgVXNiRW5kcG9pbnRFeHRlbnNpb24gKmVwdHggPSBlbmRwb2ludC0+ZXh0ZW5zaW9uOworCisgIHJlcXVlc3QtPnJlc3VsdCA9IHJlc3VsdDsKKyAgcmVxdWVzdC0+Y291bnQgPSAoaW50cHRyX3QpYXJnOworCisgIGlmICghZW5xdWV1ZUl0ZW0oZXB0eC0+Y29tcGxldGVkUmVxdWVzdHMsIHJlcXVlc3QpKSB7CisgICAgbG9nU3lzdGVtRXJyb3IoIlVTQiBjb21wbGV0ZWQgcmVxdWVzdCBlbnF1ZXVlIik7CisgICAgZnJlZShyZXF1ZXN0KTsKKyAgfQorfQorCitpbnQKK3VzYkRpc2FibGVBdXRvc3VzcGVuZCAoVXNiRGV2aWNlICpkZXZpY2UpIHsKKyAgbG9nVW5zdXBwb3J0ZWRGdW5jdGlvbigpOworICByZXR1cm4gMDsKK30KKworaW50Cit1c2JTZXRDb25maWd1cmF0aW9uIChVc2JEZXZpY2UgKmRldmljZSwgdW5zaWduZWQgY2hhciBjb25maWd1cmF0aW9uKSB7CisgIFVzYkRldmljZUV4dGVuc2lvbiAqZGV2eCA9IGRldmljZS0+ZXh0ZW5zaW9uOworCisgIGlmIChvcGVuRGV2aWNlKGRldmljZSwgMSkpIHsKKyAgICBVSW50OCBhcmcgPSBjb25maWd1cmF0aW9uOworICAgIElPUmV0dXJuIHJlc3VsdCA9ICgqZGV2eC0+ZGV2aWNlKS0+U2V0Q29uZmlndXJhdGlvbihkZXZ4LT5kZXZpY2UsIGFyZyk7CisgICAgaWYgKHJlc3VsdCA9PSBrSU9SZXR1cm5TdWNjZXNzKSByZXR1cm4gMTsKKyAgICBzZXRVc2JFcnJvcihyZXN1bHQsICJVU0IgY29uZmlndXJhdGlvbiBzZXQiKTsKKyAgfQorCisgIHJldHVybiAwOworfQorCitpbnQKK3VzYkNsYWltSW50ZXJmYWNlIChVc2JEZXZpY2UgKmRldmljZSwgdW5zaWduZWQgY2hhciBpbnRlcmZhY2UpIHsKKyAgVXNiRGV2aWNlRXh0ZW5zaW9uICpkZXZ4ID0gZGV2aWNlLT5leHRlbnNpb247CisgIElPUmV0dXJuIHJlc3VsdDsKKworICBpZiAoc2V0SW50ZXJmYWNlKGRldngsIGludGVyZmFjZSkpIHsKKyAgICBpZiAoZGV2eC0+aW50ZXJmYWNlT3BlbmVkKSByZXR1cm4gMTsKKworICAgIHJlc3VsdCA9ICgqZGV2eC0+aW50ZXJmYWNlKS0+VVNCSW50ZXJmYWNlT3BlbihkZXZ4LT5pbnRlcmZhY2UpOworICAgIGlmIChyZXN1bHQgPT0ga0lPUmV0dXJuU3VjY2VzcykgeworICAgICAgcmVzdWx0ID0gKCpkZXZ4LT5pbnRlcmZhY2UpLT5HZXROdW1FbmRwb2ludHMoZGV2eC0+aW50ZXJmYWNlLCAmZGV2eC0+cGlwZUNvdW50KTsKKyAgICAgIGlmIChyZXN1bHQgPT0ga0lPUmV0dXJuU3VjY2VzcykgeworICAgICAgICBkZXZ4LT5pbnRlcmZhY2VPcGVuZWQgPSAxOworICAgICAgICByZXR1cm4gMTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIHNldFVzYkVycm9yKHJlc3VsdCwgIlVTQiBwaXBlIGNvdW50IHF1ZXJ5Iik7CisgICAgICB9CisKKyAgICAgICgqZGV2eC0+aW50ZXJmYWNlKS0+VVNCSW50ZXJmYWNlQ2xvc2UoZGV2eC0+aW50ZXJmYWNlKTsKKyAgICB9IGVsc2UgeworICAgICAgc2V0VXNiRXJyb3IocmVzdWx0LCAiVVNCIGludGVyZmFjZSBvcGVuIik7CisgICAgfQorICB9CisKKyAgcmV0dXJuIDA7Cit9CisKK2ludAordXNiUmVsZWFzZUludGVyZmFjZSAoVXNiRGV2aWNlICpkZXZpY2UsIHVuc2lnbmVkIGNoYXIgaW50ZXJmYWNlKSB7CisgIFVzYkRldmljZUV4dGVuc2lvbiAqZGV2eCA9IGRldmljZS0+ZXh0ZW5zaW9uOworICByZXR1cm4gc2V0SW50ZXJmYWNlKGRldngsIGludGVyZmFjZSkgJiYgdW5zZXRJbnRlcmZhY2UoZGV2eCk7Cit9CisKK2ludAordXNiU2V0QWx0ZXJuYXRpdmUgKAorICBVc2JEZXZpY2UgKmRldmljZSwKKyAgdW5zaWduZWQgY2hhciBpbnRlcmZhY2UsCisgIHVuc2lnbmVkIGNoYXIgYWx0ZXJuYXRpdmUKKykgeworICBVc2JEZXZpY2VFeHRlbnNpb24gKmRldnggPSBkZXZpY2UtPmV4dGVuc2lvbjsKKworICBpZiAoc2V0SW50ZXJmYWNlKGRldngsIGludGVyZmFjZSkpIHsKKyAgICBJT1JldHVybiByZXN1bHQ7CisgICAgVUludDggYXJnOworCisgICAgcmVzdWx0ID0gKCpkZXZ4LT5pbnRlcmZhY2UpLT5HZXRBbHRlcm5hdGVTZXR0aW5nKGRldngtPmludGVyZmFjZSwgJmFyZyk7CisgICAgaWYgKHJlc3VsdCA9PSBrSU9SZXR1cm5TdWNjZXNzKSB7CisgICAgICBpZiAoYXJnID09IGFsdGVybmF0aXZlKSByZXR1cm4gMTsKKworICAgICAgYXJnID0gYWx0ZXJuYXRpdmU7CisgICAgICByZXN1bHQgPSAoKmRldngtPmludGVyZmFjZSktPlNldEFsdGVybmF0ZUludGVyZmFjZShkZXZ4LT5pbnRlcmZhY2UsIGFyZyk7CisgICAgICBpZiAocmVzdWx0ID09IGtJT1JldHVyblN1Y2Nlc3MpIHJldHVybiAxOworICAgICAgc2V0VXNiRXJyb3IocmVzdWx0LCAiVVNCIGFsdGVybmF0aXZlIHNldCIpOworICAgIH0gZWxzZSB7CisgICAgICBzZXRVc2JFcnJvcihyZXN1bHQsICJVU0IgYWx0ZXJuYXRpdmUgZ2V0Iik7CisgICAgfQorICB9CisKKyAgcmV0dXJuIDA7Cit9CisKK2ludAordXNiUmVzZXREZXZpY2UgKFVzYkRldmljZSAqZGV2aWNlKSB7CisgIGxvZ1Vuc3VwcG9ydGVkRnVuY3Rpb24oKTsKKyAgcmV0dXJuIDA7Cit9CisKK2ludAordXNiQ2xlYXJIYWx0IChVc2JEZXZpY2UgKmRldmljZSwgdW5zaWduZWQgY2hhciBlbmRwb2ludEFkZHJlc3MpIHsKKyAgVXNiRGV2aWNlRXh0ZW5zaW9uICpkZXZ4ID0gZGV2aWNlLT5leHRlbnNpb247CisgIFVzYkVuZHBvaW50ICplbmRwb2ludDsKKworICBpZiAoKGVuZHBvaW50ID0gdXNiR2V0RW5kcG9pbnQoZGV2aWNlLCBlbmRwb2ludEFkZHJlc3MpKSkgeworICAgIFVzYkVuZHBvaW50RXh0ZW5zaW9uICplcHR4ID0gZW5kcG9pbnQtPmV4dGVuc2lvbjsKKyAgICBJT1JldHVybiByZXN1bHQ7CisKKyAgICByZXN1bHQgPSAoKmRldngtPmludGVyZmFjZSktPkNsZWFyUGlwZVN0YWxsQm90aEVuZHMoZGV2eC0+aW50ZXJmYWNlLCBlcHR4LT5waXBlTnVtYmVyKTsKKyAgICBpZiAocmVzdWx0ID09IGtJT1JldHVyblN1Y2Nlc3MpIHJldHVybiAxOworICAgIHNldFVzYkVycm9yKHJlc3VsdCwgIlVTQiBlbmRwb2ludCBjbGVhciIpOworICB9CisKKyAgcmV0dXJuIDA7Cit9CisKK3NzaXplX3QKK3VzYkNvbnRyb2xUcmFuc2ZlciAoCisgIFVzYkRldmljZSAqZGV2aWNlLAorICB1aW50OF90IGRpcmVjdGlvbiwKKyAgdWludDhfdCByZWNpcGllbnQsCisgIHVpbnQ4X3QgdHlwZSwKKyAgdWludDhfdCByZXF1ZXN0LAorICB1aW50MTZfdCB2YWx1ZSwKKyAgdWludDE2X3QgaW5kZXgsCisgIHZvaWQgKmJ1ZmZlciwKKyAgdWludDE2X3QgbGVuZ3RoLAorICBpbnQgdGltZW91dAorKSB7CisgIFVzYkRldmljZUV4dGVuc2lvbiAqZGV2eCA9IGRldmljZS0+ZXh0ZW5zaW9uOworICBJT1JldHVybiByZXN1bHQ7CisgIElPVVNCRGV2UmVxdWVzdFRPIGFyZzsKKworICBhcmcuYm1SZXF1ZXN0VHlwZSA9IGRpcmVjdGlvbiB8IHJlY2lwaWVudCB8IHR5cGU7CisgIGFyZy5iUmVxdWVzdCA9IHJlcXVlc3Q7CisgIGFyZy53VmFsdWUgPSB2YWx1ZTsKKyAgYXJnLndJbmRleCA9IGluZGV4OworICBhcmcud0xlbmd0aCA9IGxlbmd0aDsKKworICBhcmcucERhdGEgPSBidWZmZXI7CisgIGFyZy5ub0RhdGFUaW1lb3V0ID0gdGltZW91dDsKKyAgYXJnLmNvbXBsZXRpb25UaW1lb3V0ID0gdGltZW91dDsKKworICByZXN1bHQgPSAoKmRldngtPmRldmljZSktPkRldmljZVJlcXVlc3RUTyhkZXZ4LT5kZXZpY2UsICZhcmcpOworICBpZiAocmVzdWx0ID09IGtJT1JldHVyblN1Y2Nlc3MpIHJldHVybiBhcmcud0xlbkRvbmU7CisgIHNldFVzYkVycm9yKHJlc3VsdCwgIlVTQiBjb250cm9sIHRyYW5zZmVyIik7CisgIHJldHVybiAtMTsKK30KKwordm9pZCAqCit1c2JTdWJtaXRSZXF1ZXN0ICgKKyAgVXNiRGV2aWNlICpkZXZpY2UsCisgIHVuc2lnbmVkIGNoYXIgZW5kcG9pbnRBZGRyZXNzLAorICB2b2lkICpidWZmZXIsCisgIHNpemVfdCBsZW5ndGgsCisgIHZvaWQgKmNvbnRleHQKKykgeworICBVc2JEZXZpY2VFeHRlbnNpb24gKmRldnggPSBkZXZpY2UtPmV4dGVuc2lvbjsKKyAgVXNiRW5kcG9pbnQgKmVuZHBvaW50OworCisgIGlmICgoZW5kcG9pbnQgPSB1c2JHZXRFbmRwb2ludChkZXZpY2UsIGVuZHBvaW50QWRkcmVzcykpKSB7CisgICAgVXNiRW5kcG9pbnRFeHRlbnNpb24gKmVwdHggPSBlbmRwb2ludC0+ZXh0ZW5zaW9uOworICAgIElPUmV0dXJuIHJlc3VsdDsKKyAgICBVc2JBc3luY2hyb25vdXNSZXF1ZXN0ICpyZXF1ZXN0OworCisgICAgaWYgKCFkZXZ4LT5ydW5sb29wU291cmNlKSB7CisgICAgICByZXN1bHQgPSAoKmRldngtPmludGVyZmFjZSktPkNyZWF0ZUludGVyZmFjZUFzeW5jRXZlbnRTb3VyY2UoZGV2eC0+aW50ZXJmYWNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZkZXZ4LT5ydW5sb29wU291cmNlKTsKKyAgICAgIGlmIChyZXN1bHQgIT0ga0lPUmV0dXJuU3VjY2VzcykgeworICAgICAgICBzZXRVc2JFcnJvcihyZXN1bHQsICJVU0IgaW50ZXJmYWNlIGV2ZW50IHNvdXJjZSBjcmVhdGUiKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICB9CisKKyAgICAgIGFkZFJ1bkxvb3BTb3VyY2UoZGV2eC0+cnVubG9vcFNvdXJjZSk7CisgICAgfQorCisgICAgaWYgKChyZXF1ZXN0ID0gbWFsbG9jKHNpemVvZigqcmVxdWVzdCkgKyBsZW5ndGgpKSkgeworICAgICAgcmVxdWVzdC0+ZW5kcG9pbnQgPSBlbmRwb2ludDsKKyAgICAgIHJlcXVlc3QtPmNvbnRleHQgPSBjb250ZXh0OworICAgICAgcmVxdWVzdC0+YnVmZmVyID0gKHJlcXVlc3QtPmxlbmd0aCA9IGxlbmd0aCk/IChyZXF1ZXN0ICsgMSk6IE5VTEw7CisKKyAgICAgIHN3aXRjaCAoZXB0eC0+dHJhbnNmZXJEaXJlY3Rpb24pIHsKKyAgICAgICAgY2FzZSBrVVNCSW46CisgICAgICAgICAgcmVzdWx0ID0gKCpkZXZ4LT5pbnRlcmZhY2UpLT5SZWFkUGlwZUFzeW5jKGRldngtPmludGVyZmFjZSwgZXB0eC0+cGlwZU51bWJlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdC0+YnVmZmVyLCByZXF1ZXN0LT5sZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzYkFzeW5jaHJvbm91c1JlcXVlc3RDYWxsYmFjaywgcmVxdWVzdCk7CisgICAgICAgICAgaWYgKHJlc3VsdCA9PSBrSU9SZXR1cm5TdWNjZXNzKSByZXR1cm4gcmVxdWVzdDsKKyAgICAgICAgICBzZXRVc2JFcnJvcihyZXN1bHQsICJVU0IgZW5kcG9pbnQgYXN5bmNocm9ub3VzIHJlYWQiKTsKKyAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIGtVU0JPdXQ6CisgICAgICAgICAgaWYgKHJlcXVlc3QtPmJ1ZmZlcikgbWVtY3B5KHJlcXVlc3QtPmJ1ZmZlciwgYnVmZmVyLCBsZW5ndGgpOworICAgICAgICAgIHJlc3VsdCA9ICgqZGV2eC0+aW50ZXJmYWNlKS0+V3JpdGVQaXBlQXN5bmMoZGV2eC0+aW50ZXJmYWNlLCBlcHR4LT5waXBlTnVtYmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdC0+YnVmZmVyLCByZXF1ZXN0LT5sZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2JBc3luY2hyb25vdXNSZXF1ZXN0Q2FsbGJhY2ssIHJlcXVlc3QpOworICAgICAgICAgIGlmIChyZXN1bHQgPT0ga0lPUmV0dXJuU3VjY2VzcykgcmV0dXJuIHJlcXVlc3Q7CisgICAgICAgICAgc2V0VXNiRXJyb3IocmVzdWx0LCAiVVNCIGVuZHBvaW50IGFzeW5jaHJvbm91cyB3cml0ZSIpOworICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgbG9nTWVzc2FnZShMT0dfRVJSLCAiVVNCIGVuZHBvaW50IGRpcmVjdGlvbiBub3Qgc3VwcHBvcnRlZDogJWQiLAorICAgICAgICAgICAgICAgICAgICAgZXB0eC0+dHJhbnNmZXJEaXJlY3Rpb24pOworICAgICAgICAgIGVycm5vID0gRU5PU1lTOworICAgICAgICAgIGJyZWFrOworICAgICAgfQorCisgICAgICBmcmVlKHJlcXVlc3QpOworICAgIH0gZWxzZSB7CisgICAgICBsb2dTeXN0ZW1FcnJvcigiVVNCIGFzeW5jaHJvbm91cyByZXF1ZXN0IGFsbG9jYXRlIik7CisgICAgfQorICB9CisKKyAgcmV0dXJuIE5VTEw7Cit9CisKK2ludAordXNiQ2FuY2VsUmVxdWVzdCAoVXNiRGV2aWNlICpkZXZpY2UsIHZvaWQgKnJlcXVlc3QpIHsKKyAgbG9nVW5zdXBwb3J0ZWRGdW5jdGlvbigpOworICByZXR1cm4gMDsKK30KKwordm9pZCAqCit1c2JSZWFwUmVzcG9uc2UgKAorICBVc2JEZXZpY2UgKmRldmljZSwKKyAgdW5zaWduZWQgY2hhciBlbmRwb2ludEFkZHJlc3MsCisgIFVzYlJlc3BvbnNlICpyZXNwb25zZSwKKyAgaW50IHdhaXQKKykgeworICBVc2JFbmRwb2ludCAqZW5kcG9pbnQ7CisKKyAgaWYgKChlbmRwb2ludCA9IHVzYkdldEVuZHBvaW50KGRldmljZSwgZW5kcG9pbnRBZGRyZXNzKSkpIHsKKyAgICBVc2JFbmRwb2ludEV4dGVuc2lvbiAqZXB0eCA9IGVuZHBvaW50LT5leHRlbnNpb247CisgICAgVXNiQXN5bmNocm9ub3VzUmVxdWVzdCAqcmVxdWVzdDsKKworICAgIHdoaWxlICghKHJlcXVlc3QgPSBkZXF1ZXVlSXRlbShlcHR4LT5jb21wbGV0ZWRSZXF1ZXN0cykpKSB7CisgICAgICBzd2l0Y2ggKGV4ZWN1dGVSdW5Mb29wKCh3YWl0PyA2MDogMCkpKSB7CisgICAgICAgIGNhc2Uga0NGUnVuTG9vcFJ1blRpbWVkT3V0OgorICAgICAgICAgIGlmICh3YWl0KSBjb250aW51ZTsKKyAgICAgICAgY2FzZSBrQ0ZSdW5Mb29wUnVuRmluaXNoZWQ6CisgICAgICAgICAgZXJybm8gPSBFQUdBSU47CisgICAgICAgICAgZ290byBub25lOworCisgICAgICAgIGNhc2Uga0NGUnVuTG9vcFJ1blN0b3BwZWQ6CisgICAgICAgIGNhc2Uga0NGUnVuTG9vcFJ1bkhhbmRsZWRTb3VyY2U6CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgY29udGludWU7CisgICAgICB9CisgICAgfQorCisgICAgcmVzcG9uc2UtPmNvbnRleHQgPSByZXF1ZXN0LT5jb250ZXh0OworICAgIHJlc3BvbnNlLT5idWZmZXIgPSByZXF1ZXN0LT5idWZmZXI7CisgICAgcmVzcG9uc2UtPnNpemUgPSByZXF1ZXN0LT5sZW5ndGg7CisKKyAgICBpZiAocmVxdWVzdC0+cmVzdWx0ID09IGtJT1JldHVyblN1Y2Nlc3MpIHsKKyAgICAgIHJlc3BvbnNlLT5lcnJvciA9IDA7CisgICAgICByZXNwb25zZS0+Y291bnQgPSByZXF1ZXN0LT5jb3VudDsKKworICAgICAgaWYgKCF1c2JBcHBseUlucHV0RmlsdGVycyhlbmRwb2ludCwgcmVzcG9uc2UtPmJ1ZmZlciwgcmVzcG9uc2UtPnNpemUsICZyZXNwb25zZS0+Y291bnQpKSB7CisgICAgICAgIHJlc3BvbnNlLT5lcnJvciA9IEVJTzsKKyAgICAgICAgcmVzcG9uc2UtPmNvdW50ID0gLTE7CisgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgIHNldFVzYkVycm9yKHJlcXVlc3QtPnJlc3VsdCwgIlVTQiBhc3luY2hyb25vdXMgcmVzcG9uc2UiKTsKKyAgICAgIHJlc3BvbnNlLT5lcnJvciA9IGVycm5vOworICAgICAgcmVzcG9uc2UtPmNvdW50ID0gLTE7CisgICAgfQorCisgICAgcmV0dXJuIHJlcXVlc3Q7CisgIH0KKworbm9uZToKKyAgcmV0dXJuIE5VTEw7Cit9CisKK2ludAordXNiTW9uaXRvcklucHV0RW5kcG9pbnQgKAorICBVc2JEZXZpY2UgKmRldmljZSwgdW5zaWduZWQgY2hhciBlbmRwb2ludE51bWJlciwKKyAgQXN5bmNNb25pdG9yQ2FsbGJhY2sgKmNhbGxiYWNrLCB2b2lkICpkYXRhCispIHsKKyAgcmV0dXJuIDA7Cit9CisKK3NzaXplX3QKK3VzYlJlYWRFbmRwb2ludCAoCisgIFVzYkRldmljZSAqZGV2aWNlLAorICB1bnNpZ25lZCBjaGFyIGVuZHBvaW50TnVtYmVyLAorICB2b2lkICpidWZmZXIsCisgIHNpemVfdCBsZW5ndGgsCisgIGludCB0aW1lb3V0CispIHsKKyAgVXNiRGV2aWNlRXh0ZW5zaW9uICpkZXZ4ID0gZGV2aWNlLT5leHRlbnNpb247CisgIFVzYkVuZHBvaW50ICplbmRwb2ludDsKKworICBpZiAoKGVuZHBvaW50ID0gdXNiR2V0SW5wdXRFbmRwb2ludChkZXZpY2UsIGVuZHBvaW50TnVtYmVyKSkpIHsKKyAgICBVc2JFbmRwb2ludEV4dGVuc2lvbiAqZXB0eCA9IGVuZHBvaW50LT5leHRlbnNpb247CisgICAgSU9SZXR1cm4gcmVzdWx0OworICAgIFVJbnQzMiBjb3VudDsKKyAgICBpbnQgc3RhbGxlZCA9IDA7CisKKyAgcmVhZDoKKyAgICBjb3VudCA9IGxlbmd0aDsKKyAgICByZXN1bHQgPSAoKmRldngtPmludGVyZmFjZSktPlJlYWRQaXBlVE8oZGV2eC0+aW50ZXJmYWNlLCBlcHR4LT5waXBlTnVtYmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXIsICZjb3VudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGltZW91dCwgdGltZW91dCk7CisKKyAgICBzd2l0Y2ggKHJlc3VsdCkgeworICAgICAgY2FzZSBrSU9SZXR1cm5TdWNjZXNzOgorICAgICAgICB7CisgICAgICAgICAgc3NpemVfdCBhY3R1YWwgPSBjb3VudDsKKworICAgICAgICAgIGlmICh1c2JBcHBseUlucHV0RmlsdGVycyhlbmRwb2ludCwgYnVmZmVyLCBsZW5ndGgsICZhY3R1YWwpKSByZXR1cm4gYWN0dWFsOworICAgICAgICB9CisKKyAgICAgICAgZXJybm8gPSBFSU87CisgICAgICAgIGJyZWFrOworCisgICAgICBjYXNlIGtJT1VTQlRyYW5zYWN0aW9uVGltZW91dDoKKyAgICAgICAgZXJybm8gPSBFQUdBSU47CisgICAgICAgIGJyZWFrOworCisgICAgICBjYXNlIGtJT1VTQlBpcGVTdGFsbGVkOgorICAgICAgICBpZiAoIXN0YWxsZWQpIHsKKyAgICAgICAgICByZXN1bHQgPSAoKmRldngtPmludGVyZmFjZSktPkNsZWFyUGlwZVN0YWxsQm90aEVuZHMoZGV2eC0+aW50ZXJmYWNlLCBlcHR4LT5waXBlTnVtYmVyKTsKKyAgICAgICAgICBpZiAocmVzdWx0ID09IGtJT1JldHVyblN1Y2Nlc3MpIHsKKyAgICAgICAgICAgIHN0YWxsZWQgPSAxOworICAgICAgICAgICAgZ290byByZWFkOworICAgICAgICAgIH0KKworICAgICAgICAgIHNldFVzYkVycm9yKHJlc3VsdCwgIlVTQiBzdGFsbCBjbGVhciIpOworICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIHNldFVzYkVycm9yKHJlc3VsdCwgIlVTQiBlbmRwb2ludCByZWFkIik7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgfQorCisgIHJldHVybiAtMTsKK30KKworc3NpemVfdAordXNiV3JpdGVFbmRwb2ludCAoCisgIFVzYkRldmljZSAqZGV2aWNlLAorICB1bnNpZ25lZCBjaGFyIGVuZHBvaW50TnVtYmVyLAorICBjb25zdCB2b2lkICpidWZmZXIsCisgIHNpemVfdCBsZW5ndGgsCisgIGludCB0aW1lb3V0CispIHsKKyAgVXNiRGV2aWNlRXh0ZW5zaW9uICpkZXZ4ID0gZGV2aWNlLT5leHRlbnNpb247CisgIFVzYkVuZHBvaW50ICplbmRwb2ludDsKKworICBpZiAoKGVuZHBvaW50ID0gdXNiR2V0T3V0cHV0RW5kcG9pbnQoZGV2aWNlLCBlbmRwb2ludE51bWJlcikpKSB7CisgICAgVXNiRW5kcG9pbnRFeHRlbnNpb24gKmVwdHggPSBlbmRwb2ludC0+ZXh0ZW5zaW9uOworICAgIElPUmV0dXJuIHJlc3VsdDsKKworICAgIHJlc3VsdCA9ICgqZGV2eC0+aW50ZXJmYWNlKS0+V3JpdGVQaXBlVE8oZGV2eC0+aW50ZXJmYWNlLCBlcHR4LT5waXBlTnVtYmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQgKilidWZmZXIsIGxlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVvdXQsIHRpbWVvdXQpOworICAgIGlmIChyZXN1bHQgPT0ga0lPUmV0dXJuU3VjY2VzcykgcmV0dXJuIGxlbmd0aDsKKyAgICBzZXRVc2JFcnJvcihyZXN1bHQsICJVU0IgZW5kcG9pbnQgd3JpdGUiKTsKKyAgfQorCisgIHJldHVybiAtMTsKK30KKworaW50Cit1c2JSZWFkRGV2aWNlRGVzY3JpcHRvciAoVXNiRGV2aWNlICpkZXZpY2UpIHsKKyAgVXNiRGV2aWNlRXh0ZW5zaW9uICpkZXZ4ID0gZGV2aWNlLT5leHRlbnNpb247CisgIElPUmV0dXJuIHJlc3VsdDsKKworICB7CisgICAgdWludDhfdCBzcGVlZDsKKyAgICBpZiAoKHJlc3VsdCA9ICgqZGV2eC0+ZGV2aWNlKS0+R2V0RGV2aWNlU3BlZWQoZGV2eC0+ZGV2aWNlLCAmc3BlZWQpKSAhPSBrSU9SZXR1cm5TdWNjZXNzKSBnb3RvIGVycm9yOworICAgIHN3aXRjaCAoc3BlZWQpIHsKKyAgICAgIGRlZmF1bHQgICAgICAgICAgICAgICAgIDogZGV2aWNlLT5kZXNjcmlwdG9yLmJjZFVTQiA9IDBYMDAwMDsgYnJlYWs7CisgICAgICBjYXNlIGtVU0JEZXZpY2VTcGVlZExvdyA6IGRldmljZS0+ZGVzY3JpcHRvci5iY2RVU0IgPSBrVVNCUmVsMTA7IGJyZWFrOworICAgICAgY2FzZSBrVVNCRGV2aWNlU3BlZWRGdWxsOiBkZXZpY2UtPmRlc2NyaXB0b3IuYmNkVVNCID0ga1VTQlJlbDExOyBicmVhazsKKyAgICAgIGNhc2Uga1VTQkRldmljZVNwZWVkSGlnaDogZGV2aWNlLT5kZXNjcmlwdG9yLmJjZFVTQiA9IGtVU0JSZWwyMDsgYnJlYWs7CisgICAgfQorICB9CisKKyAgaWYgKChyZXN1bHQgPSAoKmRldngtPmRldmljZSktPkdldERldmljZUNsYXNzKGRldngtPmRldmljZSwgJmRldmljZS0+ZGVzY3JpcHRvci5iRGV2aWNlQ2xhc3MpKSAhPSBrSU9SZXR1cm5TdWNjZXNzKSBnb3RvIGVycm9yOworICBpZiAoKHJlc3VsdCA9ICgqZGV2eC0+ZGV2aWNlKS0+R2V0RGV2aWNlU3ViQ2xhc3MoZGV2eC0+ZGV2aWNlLCAmZGV2aWNlLT5kZXNjcmlwdG9yLmJEZXZpY2VTdWJDbGFzcykpICE9IGtJT1JldHVyblN1Y2Nlc3MpIGdvdG8gZXJyb3I7CisgIGlmICgocmVzdWx0ID0gKCpkZXZ4LT5kZXZpY2UpLT5HZXREZXZpY2VQcm90b2NvbChkZXZ4LT5kZXZpY2UsICZkZXZpY2UtPmRlc2NyaXB0b3IuYkRldmljZVByb3RvY29sKSkgIT0ga0lPUmV0dXJuU3VjY2VzcykgZ290byBlcnJvcjsKKworICBpZiAoKHJlc3VsdCA9ICgqZGV2eC0+ZGV2aWNlKS0+R2V0RGV2aWNlVmVuZG9yKGRldngtPmRldmljZSwgJmRldmljZS0+ZGVzY3JpcHRvci5pZFZlbmRvcikpICE9IGtJT1JldHVyblN1Y2Nlc3MpIGdvdG8gZXJyb3I7CisgIGlmICgocmVzdWx0ID0gKCpkZXZ4LT5kZXZpY2UpLT5HZXREZXZpY2VQcm9kdWN0KGRldngtPmRldmljZSwgJmRldmljZS0+ZGVzY3JpcHRvci5pZFByb2R1Y3QpKSAhPSBrSU9SZXR1cm5TdWNjZXNzKSBnb3RvIGVycm9yOworICBpZiAoKHJlc3VsdCA9ICgqZGV2eC0+ZGV2aWNlKS0+R2V0RGV2aWNlUmVsZWFzZU51bWJlcihkZXZ4LT5kZXZpY2UsICZkZXZpY2UtPmRlc2NyaXB0b3IuYmNkRGV2aWNlKSkgIT0ga0lPUmV0dXJuU3VjY2VzcykgZ290byBlcnJvcjsKKworICBpZiAoKHJlc3VsdCA9ICgqZGV2eC0+ZGV2aWNlKS0+VVNCR2V0TWFudWZhY3R1cmVyU3RyaW5nSW5kZXgoZGV2eC0+ZGV2aWNlLCAmZGV2aWNlLT5kZXNjcmlwdG9yLmlNYW51ZmFjdHVyZXIpKSAhPSBrSU9SZXR1cm5TdWNjZXNzKSBnb3RvIGVycm9yOworICBpZiAoKHJlc3VsdCA9ICgqZGV2eC0+ZGV2aWNlKS0+VVNCR2V0UHJvZHVjdFN0cmluZ0luZGV4KGRldngtPmRldmljZSwgJmRldmljZS0+ZGVzY3JpcHRvci5pUHJvZHVjdCkpICE9IGtJT1JldHVyblN1Y2Nlc3MpIGdvdG8gZXJyb3I7CisgIGlmICgocmVzdWx0ID0gKCpkZXZ4LT5kZXZpY2UpLT5VU0JHZXRTZXJpYWxOdW1iZXJTdHJpbmdJbmRleChkZXZ4LT5kZXZpY2UsICZkZXZpY2UtPmRlc2NyaXB0b3IuaVNlcmlhbE51bWJlcikpICE9IGtJT1JldHVyblN1Y2Nlc3MpIGdvdG8gZXJyb3I7CisKKyAgaWYgKChyZXN1bHQgPSAoKmRldngtPmRldmljZSktPkdldE51bWJlck9mQ29uZmlndXJhdGlvbnMoZGV2eC0+ZGV2aWNlLCAmZGV2aWNlLT5kZXNjcmlwdG9yLmJOdW1Db25maWd1cmF0aW9ucykpICE9IGtJT1JldHVyblN1Y2Nlc3MpIGdvdG8gZXJyb3I7CisgIGRldmljZS0+ZGVzY3JpcHRvci5iTWF4UGFja2V0U2l6ZTAgPSAwOworCisgIGRldmljZS0+ZGVzY3JpcHRvci5iTGVuZ3RoID0gVXNiRGVzY3JpcHRvclNpemVfRGV2aWNlOworICBkZXZpY2UtPmRlc2NyaXB0b3IuYkRlc2NyaXB0b3JUeXBlID0gVXNiRGVzY3JpcHRvclR5cGVfRGV2aWNlOworICByZXR1cm4gMTsKKworZXJyb3I6CisgIHNldFVzYkVycm9yKHJlc3VsdCwgIlVTQiBkZXZpY2UgZGVzY3JpcHRvciByZWFkIik7CisgIHJldHVybiAwOworfQorCitpbnQKK3VzYkFsbG9jYXRlRW5kcG9pbnRFeHRlbnNpb24gKFVzYkVuZHBvaW50ICplbmRwb2ludCkgeworICBVc2JEZXZpY2VFeHRlbnNpb24gKmRldnggPSBlbmRwb2ludC0+ZGV2aWNlLT5leHRlbnNpb247CisgIFVzYkVuZHBvaW50RXh0ZW5zaW9uICplcHR4OworCisgIGlmICgoZXB0eCA9IG1hbGxvYyhzaXplb2YoKmVwdHgpKSkpIHsKKyAgICBpZiAoKGVwdHgtPmNvbXBsZXRlZFJlcXVlc3RzID0gbmV3UXVldWUoTlVMTCwgTlVMTCkpKSB7CisgICAgICBJT1JldHVybiByZXN1bHQ7CisgICAgICB1bnNpZ25lZCBjaGFyIG51bWJlciA9IFVTQl9FTkRQT0lOVF9OVU1CRVIoZW5kcG9pbnQtPmRlc2NyaXB0b3IpOworICAgICAgdW5zaWduZWQgY2hhciBkaXJlY3Rpb24gPSBVU0JfRU5EUE9JTlRfRElSRUNUSU9OKGVuZHBvaW50LT5kZXNjcmlwdG9yKTsKKworICAgICAgZm9yIChlcHR4LT5waXBlTnVtYmVyPTE7IGVwdHgtPnBpcGVOdW1iZXI8PWRldngtPnBpcGVDb3VudDsgKytlcHR4LT5waXBlTnVtYmVyKSB7CisgICAgICAgIHJlc3VsdCA9ICgqZGV2eC0+aW50ZXJmYWNlKS0+R2V0UGlwZVByb3BlcnRpZXMoZGV2eC0+aW50ZXJmYWNlLCBlcHR4LT5waXBlTnVtYmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZlcHR4LT50cmFuc2ZlckRpcmVjdGlvbiwgJmVwdHgtPmVuZHBvaW50TnVtYmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZlcHR4LT50cmFuc2Zlck1vZGUsICZlcHR4LT5wYWNrZXRTaXplLCAmZXB0eC0+cG9sbEludGVydmFsKTsKKyAgICAgICAgaWYgKHJlc3VsdCA9PSBrSU9SZXR1cm5TdWNjZXNzKSB7CisgICAgICAgICAgaWYgKChlcHR4LT5lbmRwb2ludE51bWJlciA9PSBudW1iZXIpICYmCisgICAgICAgICAgICAgICgoKGVwdHgtPnRyYW5zZmVyRGlyZWN0aW9uID09IGtVU0JJbikgJiYgKGRpcmVjdGlvbiA9PSBVc2JFbmRwb2ludERpcmVjdGlvbl9JbnB1dCkpIHx8CisgICAgICAgICAgICAgICAoKGVwdHgtPnRyYW5zZmVyRGlyZWN0aW9uID09IGtVU0JPdXQpICYmIChkaXJlY3Rpb24gPT0gVXNiRW5kcG9pbnREaXJlY3Rpb25fT3V0cHV0KSkpKSB7CisgICAgICAgICAgICBsb2dNZXNzYWdlKExPR19DQVRFR09SWShVU0JfSU8pLCAiZXB0PSUwMlggLT4gcGlwPSVkIChudW09JWQgZGlyPSVkIHhmcj0lZCBpbnQ9JWQgcGt0PSVkKSIsCisgICAgICAgICAgICAgICAgICAgICAgIGVuZHBvaW50LT5kZXNjcmlwdG9yLT5iRW5kcG9pbnRBZGRyZXNzLCBlcHR4LT5waXBlTnVtYmVyLAorICAgICAgICAgICAgICAgICAgICAgICBlcHR4LT5lbmRwb2ludE51bWJlciwgZXB0eC0+dHJhbnNmZXJEaXJlY3Rpb24sIGVwdHgtPnRyYW5zZmVyTW9kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgZXB0eC0+cG9sbEludGVydmFsLCBlcHR4LT5wYWNrZXRTaXplKTsKKworICAgICAgICAgICAgZXB0eC0+ZW5kcG9pbnQgPSBlbmRwb2ludDsKKyAgICAgICAgICAgIGVuZHBvaW50LT5leHRlbnNpb24gPSBlcHR4OworICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgIHNldFVzYkVycm9yKHJlc3VsdCwgIlVTQiBwaXBlIHByb3BlcnRpZXMgcXVlcnkiKTsKKyAgICAgICAgfQorICAgICAgfQorCisgICAgICBlcnJubyA9IEVJTzsKKyAgICAgIGxvZ01lc3NhZ2UoTE9HX0VSUiwgIlVTQiBwaXBlIG5vdCBmb3VuZDogZXB0PSUwMlgiLAorICAgICAgICAgICAgICAgICBlbmRwb2ludC0+ZGVzY3JpcHRvci0+YkVuZHBvaW50QWRkcmVzcyk7CisKKyAgICAgIGRlYWxsb2NhdGVRdWV1ZShlcHR4LT5jb21wbGV0ZWRSZXF1ZXN0cyk7CisgICAgfSBlbHNlIHsKKyAgICAgIGxvZ1N5c3RlbUVycm9yKCJVU0IgY29tcGxldGVkIHJlcXVlc3QgcXVldWUgYWxsb2NhdGUiKTsKKyAgICB9CisKKyAgICBmcmVlKGVwdHgpOworICB9IGVsc2UgeworICAgIGxvZ1N5c3RlbUVycm9yKCJVU0IgZW5kcG9pbnQgZXh0ZW5zaW9uIGFsbG9jYXRlIik7CisgIH0KKworICByZXR1cm4gMDsKK30KKwordm9pZAordXNiRGVhbGxvY2F0ZUVuZHBvaW50RXh0ZW5zaW9uIChVc2JFbmRwb2ludEV4dGVuc2lvbiAqZXB0eCkgeworICBpZiAoZXB0eC0+Y29tcGxldGVkUmVxdWVzdHMpIHsKKyAgICBkZWFsbG9jYXRlUXVldWUoZXB0eC0+Y29tcGxldGVkUmVxdWVzdHMpOworICAgIGVwdHgtPmNvbXBsZXRlZFJlcXVlc3RzID0gTlVMTDsKKyAgfQorCisgIGZyZWUoZXB0eCk7Cit9CisKK3ZvaWQKK3VzYkRlYWxsb2NhdGVEZXZpY2VFeHRlbnNpb24gKFVzYkRldmljZUV4dGVuc2lvbiAqZGV2eCkgeworICBJT1JldHVybiByZXN1bHQ7CisKKyAgdW5zZXRJbnRlcmZhY2UoZGV2eCk7CisKKyAgaWYgKGRldngtPmRldmljZU9wZW5lZCkgeworICAgIHJlc3VsdCA9ICgqZGV2eC0+ZGV2aWNlKS0+VVNCRGV2aWNlQ2xvc2UoZGV2eC0+ZGV2aWNlKTsKKyAgICBpZiAocmVzdWx0ICE9IGtJT1JldHVyblN1Y2Nlc3MpIHNldFVzYkVycm9yKHJlc3VsdCwgIlVTQiBkZXZpY2UgY2xvc2UiKTsKKyAgICBkZXZ4LT5kZXZpY2VPcGVuZWQgPSAwOworICB9CisKKyAgKCpkZXZ4LT5kZXZpY2UpLT5SZWxlYXNlKGRldngtPmRldmljZSk7CisgIGRldngtPmRldmljZSA9IE5VTEw7CisKKyAgZnJlZShkZXZ4KTsKK30KKworVXNiRGV2aWNlICoKK3VzYkZpbmREZXZpY2UgKFVzYkRldmljZUNob29zZXIgKmNob29zZXIsIFVzYkNob29zZUNoYW5uZWxEYXRhICpkYXRhKSB7CisgIFVzYkRldmljZSAqZGV2aWNlID0gTlVMTDsKKyAga2Vybl9yZXR1cm5fdCBrZXJuZWxSZXN1bHQ7CisgIElPUmV0dXJuIGlvUmVzdWx0OworICBtYWNoX3BvcnRfdCBwb3J0OworCisgIGtlcm5lbFJlc3VsdCA9IElPTWFzdGVyUG9ydChNQUNIX1BPUlRfTlVMTCwgJnBvcnQpOworICBpZiAoa2VybmVsUmVzdWx0ID09IEtFUk5fU1VDQ0VTUykgeworICAgIENGTXV0YWJsZURpY3Rpb25hcnlSZWYgZGljdGlvbmFyeTsKKworICAgIGlmICgoZGljdGlvbmFyeSA9IElPU2VydmljZU1hdGNoaW5nKGtJT1VTQkRldmljZUNsYXNzTmFtZSkpKSB7CisgICAgICBpb19pdGVyYXRvcl90IGl0ZXJhdG9yID0gMDsKKworICAgICAga2VybmVsUmVzdWx0ID0gSU9TZXJ2aWNlR2V0TWF0Y2hpbmdTZXJ2aWNlcyhwb3J0LCBkaWN0aW9uYXJ5LCAmaXRlcmF0b3IpOworICAgICAgZGljdGlvbmFyeSA9IE5VTEw7CisKKyAgICAgIGlmICgoa2VybmVsUmVzdWx0ID09IEtFUk5fU1VDQ0VTUykgJiYgaXRlcmF0b3IpIHsKKyAgICAgICAgaW9fc2VydmljZV90IHNlcnZpY2U7CisKKyAgICAgICAgd2hpbGUgKChzZXJ2aWNlID0gSU9JdGVyYXRvck5leHQoaXRlcmF0b3IpKSkgeworICAgICAgICAgIElPQ0ZQbHVnSW5JbnRlcmZhY2UgKipwbHVnaW4gPSBOVUxMOworICAgICAgICAgIFNJbnQzMiBzY29yZTsKKworICAgICAgICAgIGlvUmVzdWx0ID0gSU9DcmVhdGVQbHVnSW5JbnRlcmZhY2VGb3JTZXJ2aWNlKHNlcnZpY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga0lPVVNCRGV2aWNlVXNlckNsaWVudFR5cGVJRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrSU9DRlBsdWdJbkludGVyZmFjZUlELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZwbHVnaW4sICZzY29yZSk7CisgICAgICAgICAgSU9PYmplY3RSZWxlYXNlKHNlcnZpY2UpOworICAgICAgICAgIHNlcnZpY2UgPSAwOworCisgICAgICAgICAgaWYgKChpb1Jlc3VsdCA9PSBrSU9SZXR1cm5TdWNjZXNzKSAmJiBwbHVnaW4pIHsKKyAgICAgICAgICAgIElPVVNCRGV2aWNlSW50ZXJmYWNlMTgyICoqaW50ZXJmYWNlID0gTlVMTDsKKworICAgICAgICAgICAgaW9SZXN1bHQgPSAoKnBsdWdpbiktPlF1ZXJ5SW50ZXJmYWNlKHBsdWdpbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDRlVVSURHZXRVVUlEQnl0ZXMoa0lPVVNCRGV2aWNlSW50ZXJmYWNlSUQxODIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChMUFZPSUQpJmludGVyZmFjZSk7CisgICAgICAgICAgICAoKnBsdWdpbiktPlJlbGVhc2UocGx1Z2luKTsKKyAgICAgICAgICAgIHBsdWdpbiA9IE5VTEw7CisKKyAgICAgICAgICAgIGlmICgoaW9SZXN1bHQgPT0ga0lPUmV0dXJuU3VjY2VzcykgJiYgaW50ZXJmYWNlKSB7CisgICAgICAgICAgICAgIFVzYkRldmljZUV4dGVuc2lvbiAqZGV2eDsKKworICAgICAgICAgICAgICBpZiAoKGRldnggPSBtYWxsb2Moc2l6ZW9mKCpkZXZ4KSkpKSB7CisgICAgICAgICAgICAgICAgZGV2eC0+ZGV2aWNlID0gaW50ZXJmYWNlOworICAgICAgICAgICAgICAgIGRldngtPmRldmljZU9wZW5lZCA9IDA7CisKKyAgICAgICAgICAgICAgICBkZXZ4LT5pbnRlcmZhY2UgPSBOVUxMOworICAgICAgICAgICAgICAgIGRldngtPmludGVyZmFjZU9wZW5lZCA9IDA7CisKKyAgICAgICAgICAgICAgICBkZXZ4LT5ydW5sb29wU291cmNlID0gTlVMTDsKKworICAgICAgICAgICAgICAgIGlmICgoZGV2aWNlID0gdXNiVGVzdERldmljZShkZXZ4LCBjaG9vc2VyLCBkYXRhKSkpIGJyZWFrOworICAgICAgICAgICAgICAgIGZyZWUoZGV2eCk7CisgICAgICAgICAgICAgICAgZGV2eCA9IE5VTEw7CisgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgbG9nU3lzdGVtRXJyb3IoIlVTQiBkZXZpY2UgZXh0ZW5zaW9uIGFsbG9jYXRlIik7CisgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAoKmludGVyZmFjZSktPlJlbGVhc2UoaW50ZXJmYWNlKTsKKyAgICAgICAgICAgICAgaW50ZXJmYWNlID0gTlVMTDsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgIHNldFVzYkVycm9yKGlvUmVzdWx0LCAiVVNCIGRldmljZSBpbnRlcmZhY2UgY3JlYXRlIik7CisgICAgICAgICAgICB9CisgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHNldFVzYkVycm9yKGlvUmVzdWx0LCAiVVNCIGRldmljZSBzZXJ2aWNlIHBsdWdpbiBjcmVhdGUiKTsKKyAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBJT09iamVjdFJlbGVhc2UoaXRlcmF0b3IpOworICAgICAgICBpdGVyYXRvciA9IDA7CisgICAgICB9IGVsc2UgeworICAgICAgICBzZXRVc2JFcnJvcihrZXJuZWxSZXN1bHQsICJVU0IgZGV2aWNlIGl0ZXJhdG9yIGNyZWF0ZSIpOworICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICBsb2dNZXNzYWdlKExPR19FUlIsICJVU0IgZGV2aWNlIG1hdGNoaW5nIGRpY3Rpb25hcnkgY3JlYXRlIGVycm9yLiIpOworICAgIH0KKworICAgIG1hY2hfcG9ydF9kZWFsbG9jYXRlKG1hY2hfdGFza19zZWxmKCksIHBvcnQpOworICB9IGVsc2UgeworICAgIHNldFVzYkVycm9yKGtlcm5lbFJlc3VsdCwgIkRhcndpbiBtYXN0ZXIgcG9ydCBjcmVhdGUiKTsKKyAgfQorCisgIHJldHVybiBkZXZpY2U7Cit9CisKK3ZvaWQKK3VzYkZvcmdldERldmljZXMgKHZvaWQpIHsKK30KZGlmZiAtLWdpdCBhL1Byb2dyYW1zL3VzYl9kZXZpY2VzLmMgYi9Qcm9ncmFtcy91c2JfZGV2aWNlcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM3MmY4NmUKLS0tIC9kZXYvbnVsbAorKysgYi9Qcm9ncmFtcy91c2JfZGV2aWNlcy5jCkBAIC0wLDAgKzEsNTQxIEBACisvKgorICogQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyAqICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyAqCisgKiBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorICoKKyAqIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyAqCisgKiBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisgKi8KKworI2luY2x1ZGUgInVzYl9kZXZpY2VzLmgiCisKKyNkZWZpbmUgVVNCX0RFVklDRV9FTlRSWSh2ZW5kb3IscHJvZHVjdCwuLi4pIHsgXAorICAudmVuZG9ySWRlbnRpZmllciA9IHZlbmRvciwgXAorICAucHJvZHVjdElkZW50aWZpZXIgPSBwcm9kdWN0LCBcCisgIC5kcml2ZXJDb2RlcyA9IE5VTExfVEVSTUlOQVRFRF9TVFJJTkdfQVJSQVkoX19WQV9BUkdTX18pIFwKK30KKworY29uc3QgVXNiRGV2aWNlRW50cnkgdXNiRGV2aWNlVGFibGVbXSA9IHsKKy8vIEJFR0lOX1VTQl9CUkFJTExFX0RFVklDRVMKKworLy8gRGV2aWNlOiAwNDAzOjYwMDEKKy8vIEdlbmVyaWMgSWRlbnRpZmllcgorLy8gVmVuZG9yOiBGdXR1cmUgVGVjaG5vbG9neSBEZXZpY2VzIEludGVybmF0aW9uYWwsIEx0ZC4KKy8vIFByb2R1Y3Q6IEZUMjMyIFVTQi1TZXJpYWwgKFVBUlQpIElDCisvLyBBbGJhdHJvc3MgW2FsbCBtb2RlbHNdCisvLyBDZWJyYSBbYWxsIG1vZGVsc10KKy8vIEhJTVMgW1N5bmMgQnJhaWxsZV0KKy8vIEhhbmR5VGVjaCBbRlRESSBjaGlwXQorLy8gSGVkbyBbTW9iaWxMaW5lXQorLy8gTURWIFthbGwgbW9kZWxzXQorVVNCX0RFVklDRV9FTlRSWSgwWDA0MDMsIDBYNjAwMSwgImF0IiwgImNlIiwgImhkIiwgImhtIiwgImh0IiwgIm1kIiksCisKKy8vIERldmljZTogMDQwMzo2MDEwCisvLyBHZW5lcmljIElkZW50aWZpZXIKKy8vIFZlbmRvcjogRnV0dXJlIFRlY2hub2xvZ3kgRGV2aWNlcyBJbnRlcm5hdGlvbmFsLCBMdGQKKy8vIFByb2R1Y3Q6IEZUMjIzMkMvRC9IIER1YWwgVUFSVC9GSUZPIElDCisvLyBEb3RQYWQgW2FsbCBtb2RlbHNdCitVU0JfREVWSUNFX0VOVFJZKDBYMDQwMywgMFg2MDEwLCAiZHAiKSwKKworLy8gRGV2aWNlOiAwNDAzOkRFNTgKKy8vIEhlZG8gW01vYmlsTGluZV0KK1VTQl9ERVZJQ0VfRU5UUlkoMFgwNDAzLCAwWERFNTgsICJoZCIpLAorCisvLyBEZXZpY2U6IDA0MDM6REU1OQorLy8gSGVkbyBbUHJvZmlMaW5lXQorVVNCX0RFVklDRV9FTlRSWSgwWDA0MDMsIDBYREU1OSwgImhkIiksCisKKy8vIERldmljZTogMDQwMzpGMjA4CisvLyBQYXBlbm1laWVyIFthbGwgbW9kZWxzXQorVVNCX0RFVklDRV9FTlRSWSgwWDA0MDMsIDBYRjIwOCwgInBtIiksCisKKy8vIERldmljZTogMDQwMzpGRTcwCisvLyBCYXVtIFtWYXJpbyA0MCAoNDAgY2VsbHMpXQorVVNCX0RFVklDRV9FTlRSWSgwWDA0MDMsIDBYRkU3MCwgImJtIiksCisKKy8vIERldmljZTogMDQwMzpGRTcxCisvLyBCYXVtIFtQb2NrZXRWYXJpbyAoMjQgY2VsbHMpXQorVVNCX0RFVklDRV9FTlRSWSgwWDA0MDMsIDBYRkU3MSwgImJtIiksCisKKy8vIERldmljZTogMDQwMzpGRTcyCisvLyBCYXVtIFtTdXBlclZhcmlvIDQwICg0MCBjZWxscyldCitVU0JfREVWSUNFX0VOVFJZKDBYMDQwMywgMFhGRTcyLCAiYm0iKSwKKworLy8gRGV2aWNlOiAwNDAzOkZFNzMKKy8vIEJhdW0gW1N1cGVyVmFyaW8gMzIgKDMyIGNlbGxzKV0KK1VTQl9ERVZJQ0VfRU5UUlkoMFgwNDAzLCAwWEZFNzMsICJibSIpLAorCisvLyBEZXZpY2U6IDA0MDM6RkU3NAorLy8gQmF1bSBbU3VwZXJWYXJpbyA2NCAoNjQgY2VsbHMpXQorVVNCX0RFVklDRV9FTlRSWSgwWDA0MDMsIDBYRkU3NCwgImJtIiksCisKKy8vIERldmljZTogMDQwMzpGRTc1CisvLyBCYXVtIFtTdXBlclZhcmlvIDgwICg4MCBjZWxscyldCitVU0JfREVWSUNFX0VOVFJZKDBYMDQwMywgMFhGRTc1LCAiYm0iKSwKKworLy8gRGV2aWNlOiAwNDAzOkZFNzYKKy8vIEJhdW0gW1ZhcmlvUHJvIDgwICg4MCBjZWxscyldCitVU0JfREVWSUNFX0VOVFJZKDBYMDQwMywgMFhGRTc2LCAiYm0iKSwKKworLy8gRGV2aWNlOiAwNDAzOkZFNzcKKy8vIEJhdW0gW1ZhcmlvUHJvIDY0ICg2NCBjZWxscyldCitVU0JfREVWSUNFX0VOVFJZKDBYMDQwMywgMFhGRTc3LCAiYm0iKSwKKworLy8gRGV2aWNlOiAwNDUyOjAxMDAKKy8vIE1ldGVjIFthbGwgbW9kZWxzXQorVVNCX0RFVklDRV9FTlRSWSgwWDA0NTIsIDBYMDEwMCwgIm10IiksCisKKy8vIERldmljZTogMDQ1RTo5MzBBCisvLyBISU1TIFtCcmFpbGxlIFNlbnNlIChVU0IgMS4xKV0KKy8vIEhJTVMgW0JyYWlsbGUgU2Vuc2UgKFVTQiAyLjApXQorLy8gSElNUyBbQnJhaWxsZSBTZW5zZSBVMiAoVVNCIDIuMCldCitVU0JfREVWSUNFX0VOVFJZKDBYMDQ1RSwgMFg5MzBBLCAiaG0iKSwKKworLy8gRGV2aWNlOiAwNDVFOjkzMEIKKy8vIEhJTVMgW0JyYWlsbGUgRWRnZSBhbmQgUUJyYWlsbGVYTF0KK1VTQl9ERVZJQ0VfRU5UUlkoMFgwNDVFLCAwWDkzMEIsICJobSIpLAorCisvLyBEZXZpY2U6IDA0ODM6QTFEMworLy8gQmF1bSBbT3JiaXQgUmVhZGVyIDIwICgyMCBjZWxscyldCitVU0JfREVWSUNFX0VOVFJZKDBYMDQ4MywgMFhBMUQzLCAiYm0iKSwKKworLy8gRGV2aWNlOiAwNDgzOkEzNjYKKy8vIEJhdW0gW09yYml0IFJlYWRlciA0MCAoNDAgY2VsbHMpXQorVVNCX0RFVklDRV9FTlRSWSgwWDA0ODMsIDBYQTM2NiwgImJtIiksCisKKy8vIERldmljZTogMDZCMDowMDAxCisvLyBBbHZhIFtTYXRlbGxpdGUgKDVubildCitVU0JfREVWSUNFX0VOVFJZKDBYMDZCMCwgMFgwMDAxLCAiYWwiKSwKKworLy8gRGV2aWNlOiAwNzk4OjAwMDEKKy8vIFZveWFnZXIgW2FsbCBtb2RlbHNdCitVU0JfREVWSUNFX0VOVFJZKDBYMDc5OCwgMFgwMDAxLCAidm8iKSwKKworLy8gRGV2aWNlOiAwNzk4OjA2MDAKKy8vIEFsdmEgW1ZveWFnZXIgUHJvdG9jb2wgQ29udmVydGVyXQorVVNCX0RFVklDRV9FTlRSWSgwWDA3OTgsIDBYMDYwMCwgImFsIiksCisKKy8vIERldmljZTogMDc5ODowNjI0CisvLyBBbHZhIFtCQzYyNF0KK1VTQl9ERVZJQ0VfRU5UUlkoMFgwNzk4LCAwWDA2MjQsICJhbCIpLAorCisvLyBEZXZpY2U6IDA3OTg6MDY0MAorLy8gQWx2YSBbQkM2NDBdCitVU0JfREVWSUNFX0VOVFJZKDBYMDc5OCwgMFgwNjQwLCAiYWwiKSwKKworLy8gRGV2aWNlOiAwNzk4OjA2ODAKKy8vIEFsdmEgW0JDNjgwXQorVVNCX0RFVklDRV9FTlRSWSgwWDA3OTgsIDBYMDY4MCwgImFsIiksCisKKy8vIERldmljZTogMDkwNDoxMDE2CisvLyBGcmFua0F1ZGlvZGF0YSBbQjJLODQgKGJlZm9yZSBmaXJtd2FyZSBpbnN0YWxsYXRpb24pXQorVVNCX0RFVklDRV9FTlRSWSgwWDA5MDQsIDBYMTAxNiwgImZhIiksCisKKy8vIERldmljZTogMDkwNDoxMDE3CisvLyBGcmFua0F1ZGlvZGF0YSBbQjJLODQgKGFmdGVyIGZpcm13YXJlIGluc3RhbGxhdGlvbildCitVU0JfREVWSUNFX0VOVFJZKDBYMDkwNCwgMFgxMDE3LCAiZmEiKSwKKworLy8gRGV2aWNlOiAwOTA0OjIwMDAKKy8vIEJhdW0gW1ZhcmlvUHJvIDQwICg0MCBjZWxscyldCitVU0JfREVWSUNFX0VOVFJZKDBYMDkwNCwgMFgyMDAwLCAiYm0iKSwKKworLy8gRGV2aWNlOiAwOTA0OjIwMDEKKy8vIEJhdW0gW0Vjb1ZhcmlvIDI0ICgyNCBjZWxscyldCitVU0JfREVWSUNFX0VOVFJZKDBYMDkwNCwgMFgyMDAxLCAiYm0iKSwKKworLy8gRGV2aWNlOiAwOTA0OjIwMDIKKy8vIEJhdW0gW0Vjb1ZhcmlvIDQwICg0MCBjZWxscyldCitVU0JfREVWSUNFX0VOVFJZKDBYMDkwNCwgMFgyMDAyLCAiYm0iKSwKKworLy8gRGV2aWNlOiAwOTA0OjIwMDcKKy8vIEJhdW0gW1ZhcmlvQ29ubmVjdCA0MCAoNDAgY2VsbHMpXQorVVNCX0RFVklDRV9FTlRSWSgwWDA5MDQsIDBYMjAwNywgImJtIiksCisKKy8vIERldmljZTogMDkwNDoyMDA4CisvLyBCYXVtIFtWYXJpb0Nvbm5lY3QgMzIgKDMyIGNlbGxzKV0KK1VTQl9ERVZJQ0VfRU5UUlkoMFgwOTA0LCAwWDIwMDgsICJibSIpLAorCisvLyBEZXZpY2U6IDA5MDQ6MjAwOQorLy8gQmF1bSBbVmFyaW9Db25uZWN0IDI0ICgyNCBjZWxscyldCitVU0JfREVWSUNFX0VOVFJZKDBYMDkwNCwgMFgyMDA5LCAiYm0iKSwKKworLy8gRGV2aWNlOiAwOTA0OjIwMTAKKy8vIEJhdW0gW1ZhcmlvQ29ubmVjdCA2NCAoNjQgY2VsbHMpXQorVVNCX0RFVklDRV9FTlRSWSgwWDA5MDQsIDBYMjAxMCwgImJtIiksCisKKy8vIERldmljZTogMDkwNDoyMDExCisvLyBCYXVtIFtWYXJpb0Nvbm5lY3QgODAgKDgwIGNlbGxzKV0KK1VTQl9ERVZJQ0VfRU5UUlkoMFgwOTA0LCAwWDIwMTEsICJibSIpLAorCisvLyBEZXZpY2U6IDA5MDQ6MjAxNAorLy8gQmF1bSBbRWNvVmFyaW8gMzIgKDMyIGNlbGxzKV0KK1VTQl9ERVZJQ0VfRU5UUlkoMFgwOTA0LCAwWDIwMTQsICJibSIpLAorCisvLyBEZXZpY2U6IDA5MDQ6MjAxNQorLy8gQmF1bSBbRWNvVmFyaW8gNjQgKDY0IGNlbGxzKV0KK1VTQl9ERVZJQ0VfRU5UUlkoMFgwOTA0LCAwWDIwMTUsICJibSIpLAorCisvLyBEZXZpY2U6IDA5MDQ6MjAxNgorLy8gQmF1bSBbRWNvVmFyaW8gODAgKDgwIGNlbGxzKV0KK1VTQl9ERVZJQ0VfRU5UUlkoMFgwOTA0LCAwWDIwMTYsICJibSIpLAorCisvLyBEZXZpY2U6IDA5MDQ6MzAwMAorLy8gQmF1bSBbUmVmcmVzaGFicmFpbGxlIDE4ICgxOCBjZWxscyldCitVU0JfREVWSUNFX0VOVFJZKDBYMDkwNCwgMFgzMDAwLCAiYm0iKSwKKworLy8gRGV2aWNlOiAwOTA0OjMwMDEKKy8vIEJhdW0gW09yYml0IGluIFJlZnJlc2hhYnJhaWxsZSBFbXVsYXRpb24gTW9kZSAoMTggY2VsbHMpXQorLy8gQmF1bSBbUmVmcmVzaGFicmFpbGxlIDE4ICgxOCBjZWxscyldCitVU0JfREVWSUNFX0VOVFJZKDBYMDkwNCwgMFgzMDAxLCAiYm0iKSwKKworLy8gRGV2aWNlOiAwOTA0OjQwMDQKKy8vIEJhdW0gW1Byb250byEgVjMgMTggKDE4IGNlbGxzKV0KK1VTQl9ERVZJQ0VfRU5UUlkoMFgwOTA0LCAwWDQwMDQsICJibSIpLAorCisvLyBEZXZpY2U6IDA5MDQ6NDAwNQorLy8gQmF1bSBbUHJvbnRvISBWMyA0MCAoNDAgY2VsbHMpXQorVVNCX0RFVklDRV9FTlRSWSgwWDA5MDQsIDBYNDAwNSwgImJtIiksCisKKy8vIERldmljZTogMDkwNDo0MDA3CisvLyBCYXVtIFtQcm9udG8hIFY0IDE4ICgxOCBjZWxscyldCitVU0JfREVWSUNFX0VOVFJZKDBYMDkwNCwgMFg0MDA3LCAiYm0iKSwKKworLy8gRGV2aWNlOiAwOTA0OjQwMDgKKy8vIEJhdW0gW1Byb250byEgVjQgNDAgKDQwIGNlbGxzKV0KK1VTQl9ERVZJQ0VfRU5UUlkoMFgwOTA0LCAwWDQwMDgsICJibSIpLAorCisvLyBEZXZpY2U6IDA5MDQ6NjAwMQorLy8gQmF1bSBbU3VwZXJWYXJpbzIgNDAgKDQwIGNlbGxzKV0KK1VTQl9ERVZJQ0VfRU5UUlkoMFgwOTA0LCAwWDYwMDEsICJibSIpLAorCisvLyBEZXZpY2U6IDA5MDQ6NjAwMgorLy8gQmF1bSBbUG9ja2V0VmFyaW8yICgyNCBjZWxscyldCitVU0JfREVWSUNFX0VOVFJZKDBYMDkwNCwgMFg2MDAyLCAiYm0iKSwKKworLy8gRGV2aWNlOiAwOTA0OjYwMDMKKy8vIEJhdW0gW1N1cGVyVmFyaW8yIDMyICgzMiBjZWxscyldCitVU0JfREVWSUNFX0VOVFJZKDBYMDkwNCwgMFg2MDAzLCAiYm0iKSwKKworLy8gRGV2aWNlOiAwOTA0OjYwMDQKKy8vIEJhdW0gW1N1cGVyVmFyaW8yIDY0ICg2NCBjZWxscyldCitVU0JfREVWSUNFX0VOVFJZKDBYMDkwNCwgMFg2MDA0LCAiYm0iKSwKKworLy8gRGV2aWNlOiAwOTA0OjYwMDUKKy8vIEJhdW0gW1N1cGVyVmFyaW8yIDgwICg4MCBjZWxscyldCitVU0JfREVWSUNFX0VOVFJZKDBYMDkwNCwgMFg2MDA1LCAiYm0iKSwKKworLy8gRGV2aWNlOiAwOTA0OjYwMDYKKy8vIEJhdW0gW0JyYWlsbGlhbnQyIDQwICg0MCBjZWxscyldCitVU0JfREVWSUNFX0VOVFJZKDBYMDkwNCwgMFg2MDA2LCAiYm0iKSwKKworLy8gRGV2aWNlOiAwOTA0OjYwMDcKKy8vIEJhdW0gW0JyYWlsbGlhbnQyIDI0ICgyNCBjZWxscyldCitVU0JfREVWSUNFX0VOVFJZKDBYMDkwNCwgMFg2MDA3LCAiYm0iKSwKKworLy8gRGV2aWNlOiAwOTA0OjYwMDgKKy8vIEJhdW0gW0JyYWlsbGlhbnQyIDMyICgzMiBjZWxscyldCitVU0JfREVWSUNFX0VOVFJZKDBYMDkwNCwgMFg2MDA4LCAiYm0iKSwKKworLy8gRGV2aWNlOiAwOTA0OjYwMDkKKy8vIEJhdW0gW0JyYWlsbGlhbnQyIDY0ICg2NCBjZWxscyldCitVU0JfREVWSUNFX0VOVFJZKDBYMDkwNCwgMFg2MDA5LCAiYm0iKSwKKworLy8gRGV2aWNlOiAwOTA0OjYwMEEKKy8vIEJhdW0gW0JyYWlsbGlhbnQyIDgwICg4MCBjZWxscyldCitVU0JfREVWSUNFX0VOVFJZKDBYMDkwNCwgMFg2MDBBLCAiYm0iKSwKKworLy8gRGV2aWNlOiAwOTA0OjYwMTEKKy8vIEJhdW0gW1ZhcmlvQ29ubmVjdCAyNCAoMjQgY2VsbHMpXQorVVNCX0RFVklDRV9FTlRSWSgwWDA5MDQsIDBYNjAxMSwgImJtIiksCisKKy8vIERldmljZTogMDkwNDo2MDEyCisvLyBCYXVtIFtWYXJpb0Nvbm5lY3QgMzIgKDMyIGNlbGxzKV0KK1VTQl9ERVZJQ0VfRU5UUlkoMFgwOTA0LCAwWDYwMTIsICJibSIpLAorCisvLyBEZXZpY2U6IDA5MDQ6NjAxMworLy8gQmF1bSBbVmFyaW9Db25uZWN0IDQwICg0MCBjZWxscyldCitVU0JfREVWSUNFX0VOVFJZKDBYMDkwNCwgMFg2MDEzLCAiYm0iKSwKKworLy8gRGV2aWNlOiAwOTA0OjYxMDEKKy8vIEJhdW0gW1ZhcmlvVWx0cmEgMjAgKDIwIGNlbGxzKV0KK1VTQl9ERVZJQ0VfRU5UUlkoMFgwOTA0LCAwWDYxMDEsICJibSIpLAorCisvLyBEZXZpY2U6IDA5MDQ6NjEwMgorLy8gQmF1bSBbVmFyaW9VbHRyYSA0MCAoNDAgY2VsbHMpXQorVVNCX0RFVklDRV9FTlRSWSgwWDA5MDQsIDBYNjEwMiwgImJtIiksCisKKy8vIERldmljZTogMDkwNDo2MTAzCisvLyBCYXVtIFtWYXJpb1VsdHJhIDMyICgzMiBjZWxscyldCitVU0JfREVWSUNFX0VOVFJZKDBYMDkwNCwgMFg2MTAzLCAiYm0iKSwKKworLy8gRGV2aWNlOiAwOTIxOjEyMDAKKy8vIEhhbmR5VGVjaCBbR29IdWJzIGNoaXBdCitVU0JfREVWSUNFX0VOVFJZKDBYMDkyMSwgMFgxMjAwLCAiaHQiKSwKKworLy8gRGV2aWNlOiAwRjRFOjAxMDAKKy8vIEZyZWVkb21TY2llbnRpZmljIFtGb2N1cyAxXQorVVNCX0RFVklDRV9FTlRSWSgwWDBGNEUsIDBYMDEwMCwgImZzIiksCisKKy8vIERldmljZTogMEY0RTowMTExCisvLyBGcmVlZG9tU2NpZW50aWZpYyBbUEFDIE1hdGVdCitVU0JfREVWSUNFX0VOVFJZKDBYMEY0RSwgMFgwMTExLCAiZnMiKSwKKworLy8gRGV2aWNlOiAwRjRFOjAxMTIKKy8vIEZyZWVkb21TY2llbnRpZmljIFtGb2N1cyAyXQorVVNCX0RFVklDRV9FTlRSWSgwWDBGNEUsIDBYMDExMiwgImZzIiksCisKKy8vIERldmljZTogMEY0RTowMTE0CisvLyBGcmVlZG9tU2NpZW50aWZpYyBbRm9jdXMgMytdCitVU0JfREVWSUNFX0VOVFJZKDBYMEY0RSwgMFgwMTE0LCAiZnMiKSwKKworLy8gRGV2aWNlOiAxMEM0OkVBNjAKKy8vIEdlbmVyaWMgSWRlbnRpZmllcgorLy8gVmVuZG9yOiBDeWduYWwgSW50ZWdyYXRlZCBQcm9kdWN0cywgSW5jLgorLy8gUHJvZHVjdDogQ1AyMTB4IFVBUlQgQnJpZGdlIC8gbXlBVlIgbXlTbWFydFVTQiBsaWdodAorLy8gQnJhaWxsZU1lbW8gW1BvY2tldF0KKy8vIFNlaWthIFtCcmFpbGxlIERpc3BsYXldCitVU0JfREVWSUNFX0VOVFJZKDBYMTBDNCwgMFhFQTYwLCAibW0iLCAic2siKSwKKworLy8gRGV2aWNlOiAxMEM0OkVBODAKKy8vIEdlbmVyaWMgSWRlbnRpZmllcgorLy8gVmVuZG9yOiBDeWduYWwgSW50ZWdyYXRlZCBQcm9kdWN0cywgSW5jLgorLy8gUHJvZHVjdDogQ1AyMTB4IFVBUlQgQnJpZGdlCisvLyBTZWlrYSBbTm90ZSBUYWtlcl0KK1VTQl9ERVZJQ0VfRU5UUlkoMFgxMEM0LCAwWEVBODAsICJzayIpLAorCisvLyBEZXZpY2U6IDExNDg6MDMwMQorLy8gQnJhaWxsZU1lbW8gW1NtYXJ0XQorVVNCX0RFVklDRV9FTlRSWSgwWDExNDgsIDBYMDMwMSwgIm1tIiksCisKKy8vIERldmljZTogMTIwOTpBQkMwCisvLyBJbmNlcHRvciBbYWxsIG1vZGVsc10KK1VTQl9ERVZJQ0VfRU5UUlkoMFgxMjA5LCAwWEFCQzAsICJpYyIpLAorCisvLyBEZXZpY2U6IDE2QzA6MDVFMQorLy8gQ2FudXRlIFthbGwgbW9kZWxzXQorVVNCX0RFVklDRV9FTlRSWSgwWDE2QzAsIDBYMDVFMSwgImNuIiksCisKKy8vIERldmljZTogMUE4Njo3NTIzCisvLyBHZW5lcmljIElkZW50aWZpZXIKKy8vIFZlbmRvcjogSmlhbmdzdSBRaW5IZW5nLCBMdGQuCisvLyBQcm9kdWN0OiBDSDM0MSBVU0IgQnJpZGdlIENvbnRyb2xsZXIKKy8vIEJhdW0gW05MUyBlUmVhZGVyIFpvb21heCAoMjAgY2VsbHMpXQorVVNCX0RFVklDRV9FTlRSWSgwWDFBODYsIDBYNzUyMywgImJtIiksCisKKy8vIERldmljZTogMUM3MTpDMDA0CisvLyBCcmFpbGxlTm90ZSBbSHVtYW5XYXJlIEFQRVhdCitVU0JfREVWSUNFX0VOVFJZKDBYMUM3MSwgMFhDMDA0LCAiYm4iKSwKKworLy8gRGV2aWNlOiAxQzcxOkMwMDUKKy8vIEh1bWFuV2FyZSBbQnJhaWxsaWFudCBCSSAzMi80MCwgQnJhaWxsaWFudCBCIDgwIChzZXJpYWwgcHJvdG9jb2wpXQorVVNCX0RFVklDRV9FTlRSWSgwWDFDNzEsIDBYQzAwNSwgImh3IiksCisKKy8vIERldmljZTogMUM3MTpDMDA2CisvLyBIdW1hbldhcmUgW25vbi1Ub3VjaCBtb2RlbHMgKEhJRCBwcm90b2NvbCldCitVU0JfREVWSUNFX0VOVFJZKDBYMUM3MSwgMFhDMDA2LCAiaHciKSwKKworLy8gRGV2aWNlOiAxQzcxOkMwMEEKKy8vIEh1bWFuV2FyZSBbQnJhaWxsZU5vdGUgVG91Y2ggKEhJRCBwcm90b2NvbCldCitVU0JfREVWSUNFX0VOVFJZKDBYMUM3MSwgMFhDMDBBLCAiaHciKSwKKworLy8gRGV2aWNlOiAxQzcxOkMwMjEKKy8vIEh1bWFuV2FyZSBbQnJhaWxsaWFudCBCSSAxNCAoc2VyaWFsIHByb3RvY29sKV0KK1VTQl9ERVZJQ0VfRU5UUlkoMFgxQzcxLCAwWEMwMjEsICJodyIpLAorCisvLyBEZXZpY2U6IDFDNzE6QzEwMQorLy8gSHVtYW5XYXJlIFtBUEggQ2hhbWVsZW9uIDIwIChISUQgcHJvdG9jb2wsIGZpcm13YXJlIDEuMCldCisvLyBIdW1hbldhcmUgW0FQSCBDaGFtZWxlb24gMjAgKEhJRCBwcm90b2NvbCwgZmlybXdhcmUgMS4xKV0KK1VTQl9ERVZJQ0VfRU5UUlkoMFgxQzcxLCAwWEMxMDEsICJodyIpLAorCisvLyBEZXZpY2U6IDFDNzE6QzEwNAorLy8gSHVtYW5XYXJlIFtBUEggQ2hhbWVsZW9uIDIwIChzZXJpYWwgcHJvdG9jb2wpXQorVVNCX0RFVklDRV9FTlRSWSgwWDFDNzEsIDBYQzEwNCwgImh3IiksCisKKy8vIERldmljZTogMUM3MTpDMTExCisvLyBIdW1hbldhcmUgW0FQSCBNYW50aXMgUTQwIChISUQgcHJvdG9jb2wsIGZpcm13YXJlIDEuMCldCisvLyBIdW1hbldhcmUgW0FQSCBNYW50aXMgUTQwIChISUQgcHJvdG9jb2wsIGZpcm13YXJlIDEuMSldCitVU0JfREVWSUNFX0VOVFJZKDBYMUM3MSwgMFhDMTExLCAiaHciKSwKKworLy8gRGV2aWNlOiAxQzcxOkMxMTQKKy8vIEh1bWFuV2FyZSBbQVBIIE1hbnRpcyBRNDAgKHNlcmlhbCBwcm90b2NvbCldCitVU0JfREVWSUNFX0VOVFJZKDBYMUM3MSwgMFhDMTE0LCAiaHciKSwKKworLy8gRGV2aWNlOiAxQzcxOkMxMjEKKy8vIEh1bWFuV2FyZSBbSHVtYW53YXJlIEJyYWlsbGVPbmUgKEhJRCBwcm90b2NvbCwgZmlybXdhcmUgMS4wKV0KKy8vIEh1bWFuV2FyZSBbSHVtYW53YXJlIEJyYWlsbGVPbmUgKEhJRCBwcm90b2NvbCwgZmlybXdhcmUgMS4xKV0KK1VTQl9ERVZJQ0VfRU5UUlkoMFgxQzcxLCAwWEMxMjEsICJodyIpLAorCisvLyBEZXZpY2U6IDFDNzE6QzEyNAorLy8gSHVtYW5XYXJlIFtIdW1hbndhcmUgQnJhaWxsZU9uZSAoc2VyaWFsIHByb3RvY29sKV0KK1VTQl9ERVZJQ0VfRU5UUlkoMFgxQzcxLCAwWEMxMjQsICJodyIpLAorCisvLyBEZXZpY2U6IDFDNzE6QzEzMQorLy8gSHVtYW5XYXJlIFtIdW1hbndhcmUgQnJhaWxsaWFudCBCSSA0MFggKEhJRCBwcm90b2NvbCwgZmlybXdhcmUgMS4wKV0KKy8vIEh1bWFuV2FyZSBbSHVtYW53YXJlIEJyYWlsbGlhbnQgQkkgNDBYIChISUQgcHJvdG9jb2wsIGZpcm13YXJlIDEuMSldCitVU0JfREVWSUNFX0VOVFJZKDBYMUM3MSwgMFhDMTMxLCAiaHciKSwKKworLy8gRGV2aWNlOiAxQzcxOkMxNDEKKy8vIEh1bWFuV2FyZSBbSHVtYW53YXJlIEJyYWlsbGlhbnQgQkkgMjBYIChISUQgcHJvdG9jb2wsIGZpcm13YXJlIDEuMCldCisvLyBIdW1hbldhcmUgW0h1bWFud2FyZSBCcmFpbGxpYW50IEJJIDIwWCAoSElEIHByb3RvY29sLCBmaXJtd2FyZSAxLjEpXQorVVNCX0RFVklDRV9FTlRSWSgwWDFDNzEsIDBYQzE0MSwgImh3IiksCisKKy8vIERldmljZTogMUM3MTpDRTAxCisvLyBIdW1hbldhcmUgW05MUyBlUmVhZGVyIChISUQgcHJvdG9jb2wsIGZpcm13YXJlIDEuMCldCisvLyBIdW1hbldhcmUgW05MUyBlUmVhZGVyIChISUQgcHJvdG9jb2wsIGZpcm13YXJlIDEuMSldCitVU0JfREVWSUNFX0VOVFJZKDBYMUM3MSwgMFhDRTAxLCAiaHciKSwKKworLy8gRGV2aWNlOiAxQzcxOkNFMDQKKy8vIEh1bWFuV2FyZSBbTkxTIGVSZWFkZXIgKHNlcmlhbCBwcm90b2NvbCldCitVU0JfREVWSUNFX0VOVFJZKDBYMUM3MSwgMFhDRTA0LCAiaHciKSwKKworLy8gRGV2aWNlOiAxRkU0OjAwMDMKKy8vIEhhbmR5VGVjaCBbVVNCLUhJRCBhZGFwdGVyXQorVVNCX0RFVklDRV9FTlRSWSgwWDFGRTQsIDBYMDAwMywgImh0IiksCisKKy8vIERldmljZTogMUZFNDowMDQ0CisvLyBIYW5keVRlY2ggW0Vhc3kgQnJhaWxsZSAoSElEKV0KK1VTQl9ERVZJQ0VfRU5UUlkoMFgxRkU0LCAwWDAwNDQsICJodCIpLAorCisvLyBEZXZpY2U6IDFGRTQ6MDA1NAorLy8gSGFuZHlUZWNoIFtBY3RpdmUgQnJhaWxsZV0KK1VTQl9ERVZJQ0VfRU5UUlkoMFgxRkU0LCAwWDAwNTQsICJodCIpLAorCisvLyBEZXZpY2U6IDFGRTQ6MDA1NQorLy8gSGFuZHlUZWNoIFtDb25uZWN0IEJyYWlsbGUgNDBdCitVU0JfREVWSUNFX0VOVFJZKDBYMUZFNCwgMFgwMDU1LCAiaHQiKSwKKworLy8gRGV2aWNlOiAxRkU0OjAwNjEKKy8vIEhhbmR5VGVjaCBbQWN0aWxpbm9dCitVU0JfREVWSUNFX0VOVFJZKDBYMUZFNCwgMFgwMDYxLCAiaHQiKSwKKworLy8gRGV2aWNlOiAxRkU0OjAwNjQKKy8vIEhhbmR5VGVjaCBbQWN0aXZlIFN0YXIgNDBdCitVU0JfREVWSUNFX0VOVFJZKDBYMUZFNCwgMFgwMDY0LCAiaHQiKSwKKworLy8gRGV2aWNlOiAxRkU0OjAwNzQKKy8vIEhhbmR5VGVjaCBbQnJhaWxsZSBTdGFyIDQwIChISUQpXQorVVNCX0RFVklDRV9FTlRSWSgwWDFGRTQsIDBYMDA3NCwgImh0IiksCisKKy8vIERldmljZTogMUZFNDowMDgxCisvLyBIYW5keVRlY2ggW0Jhc2ljIEJyYWlsbGUgMTZdCitVU0JfREVWSUNFX0VOVFJZKDBYMUZFNCwgMFgwMDgxLCAiaHQiKSwKKworLy8gRGV2aWNlOiAxRkU0OjAwODIKKy8vIEhhbmR5VGVjaCBbQmFzaWMgQnJhaWxsZSAyMF0KK1VTQl9ERVZJQ0VfRU5UUlkoMFgxRkU0LCAwWDAwODIsICJodCIpLAorCisvLyBEZXZpY2U6IDFGRTQ6MDA4MworLy8gSGFuZHlUZWNoIFtCYXNpYyBCcmFpbGxlIDMyXQorVVNCX0RFVklDRV9FTlRSWSgwWDFGRTQsIDBYMDA4MywgImh0IiksCisKKy8vIERldmljZTogMUZFNDowMDg0CisvLyBIYW5keVRlY2ggW0Jhc2ljIEJyYWlsbGUgNDBdCitVU0JfREVWSUNFX0VOVFJZKDBYMUZFNCwgMFgwMDg0LCAiaHQiKSwKKworLy8gRGV2aWNlOiAxRkU0OjAwODYKKy8vIEhhbmR5VGVjaCBbQmFzaWMgQnJhaWxsZSA2NF0KK1VTQl9ERVZJQ0VfRU5UUlkoMFgxRkU0LCAwWDAwODYsICJodCIpLAorCisvLyBEZXZpY2U6IDFGRTQ6MDA4NworLy8gSGFuZHlUZWNoIFtCYXNpYyBCcmFpbGxlIDgwXQorVVNCX0RFVklDRV9FTlRSWSgwWDFGRTQsIDBYMDA4NywgImh0IiksCisKKy8vIERldmljZTogMUZFNDowMDhBCisvLyBIYW5keVRlY2ggW0Jhc2ljIEJyYWlsbGUgNDhdCitVU0JfREVWSUNFX0VOVFJZKDBYMUZFNCwgMFgwMDhBLCAiaHQiKSwKKworLy8gRGV2aWNlOiAxRkU0OjAwOEIKKy8vIEhhbmR5VGVjaCBbQmFzaWMgQnJhaWxsZSAxNjBdCitVU0JfREVWSUNFX0VOVFJZKDBYMUZFNCwgMFgwMDhCLCAiaHQiKSwKKworLy8gRGV2aWNlOiAxRkU0OjAwQTQKKy8vIEhhbmR5VGVjaCBbQWN0aXZhdG9yXQorVVNCX0RFVklDRV9FTlRSWSgwWDFGRTQsIDBYMDBBNCwgImh0IiksCisKKy8vIERldmljZTogNDI0MjowMDAxCisvLyBQZWdhc3VzIFthbGwgbW9kZWxzXQorVVNCX0RFVklDRV9FTlRSWSgwWDQyNDIsIDBYMDAwMSwgInBnIiksCisKKy8vIERldmljZTogQzI1MToxMTIyCisvLyBFdXJvQnJhaWxsZSBbRXN5cyAodmVyc2lvbiA8IDMuMCwgbm8gU0QgY2FyZCldCitVU0JfREVWSUNFX0VOVFJZKDBYQzI1MSwgMFgxMTIyLCAiZXUiKSwKKworLy8gRGV2aWNlOiBDMjUxOjExMjMKKy8vIEV1cm9CcmFpbGxlIFtyZXNlcnZlZF0KK1VTQl9ERVZJQ0VfRU5UUlkoMFhDMjUxLCAwWDExMjMsICJldSIpLAorCisvLyBEZXZpY2U6IEMyNTE6MTEyNAorLy8gRXVyb0JyYWlsbGUgW0VzeXMgKHZlcnNpb24gPCAzLjAsIHdpdGggU0QgY2FyZCldCitVU0JfREVWSUNFX0VOVFJZKDBYQzI1MSwgMFgxMTI0LCAiZXUiKSwKKworLy8gRGV2aWNlOiBDMjUxOjExMjUKKy8vIEV1cm9CcmFpbGxlIFtyZXNlcnZlZF0KK1VTQl9ERVZJQ0VfRU5UUlkoMFhDMjUxLCAwWDExMjUsICJldSIpLAorCisvLyBEZXZpY2U6IEMyNTE6MTEyNgorLy8gRXVyb0JyYWlsbGUgW0VzeXMgKHZlcnNpb24gPj0gMy4wLCBubyBTRCBjYXJkKV0KK1VTQl9ERVZJQ0VfRU5UUlkoMFhDMjUxLCAwWDExMjYsICJldSIpLAorCisvLyBEZXZpY2U6IEMyNTE6MTEyNworLy8gRXVyb0JyYWlsbGUgW3Jlc2VydmVkXQorVVNCX0RFVklDRV9FTlRSWSgwWEMyNTEsIDBYMTEyNywgImV1IiksCisKKy8vIERldmljZTogQzI1MToxMTI4CisvLyBFdXJvQnJhaWxsZSBbRXN5cyAodmVyc2lvbiA+PSAzLjAsIHdpdGggU0QgY2FyZCldCitVU0JfREVWSUNFX0VOVFJZKDBYQzI1MSwgMFgxMTI4LCAiZXUiKSwKKworLy8gRGV2aWNlOiBDMjUxOjExMjkKKy8vIEV1cm9CcmFpbGxlIFtyZXNlcnZlZF0KK1VTQl9ERVZJQ0VfRU5UUlkoMFhDMjUxLCAwWDExMjksICJldSIpLAorCisvLyBEZXZpY2U6IEMyNTE6MTEyQQorLy8gRXVyb0JyYWlsbGUgW3Jlc2VydmVkXQorVVNCX0RFVklDRV9FTlRSWSgwWEMyNTEsIDBYMTEyQSwgImV1IiksCisKKy8vIERldmljZTogQzI1MToxMTJCCisvLyBFdXJvQnJhaWxsZSBbcmVzZXJ2ZWRdCitVU0JfREVWSUNFX0VOVFJZKDBYQzI1MSwgMFgxMTJCLCAiZXUiKSwKKworLy8gRGV2aWNlOiBDMjUxOjExMkMKKy8vIEV1cm9CcmFpbGxlIFtyZXNlcnZlZF0KK1VTQl9ERVZJQ0VfRU5UUlkoMFhDMjUxLCAwWDExMkMsICJldSIpLAorCisvLyBEZXZpY2U6IEMyNTE6MTEyRAorLy8gRXVyb0JyYWlsbGUgW3Jlc2VydmVkXQorVVNCX0RFVklDRV9FTlRSWSgwWEMyNTEsIDBYMTEyRCwgImV1IiksCisKKy8vIERldmljZTogQzI1MToxMTJFCisvLyBFdXJvQnJhaWxsZSBbcmVzZXJ2ZWRdCitVU0JfREVWSUNFX0VOVFJZKDBYQzI1MSwgMFgxMTJFLCAiZXUiKSwKKworLy8gRGV2aWNlOiBDMjUxOjExMkYKKy8vIEV1cm9CcmFpbGxlIFtyZXNlcnZlZF0KK1VTQl9ERVZJQ0VfRU5UUlkoMFhDMjUxLCAwWDExMkYsICJldSIpLAorCisvLyBEZXZpY2U6IEMyNTE6MTEzMAorLy8gRXVyb0JyYWlsbGUgW0VzeXRpbWUgKGZpcm13YXJlIDEuMDMsIDIwMTQtMDMtMzEpXQorLy8gRXVyb0JyYWlsbGUgW0VzeXRpbWVdCitVU0JfREVWSUNFX0VOVFJZKDBYQzI1MSwgMFgxMTMwLCAiZXUiKSwKKworLy8gRGV2aWNlOiBDMjUxOjExMzEKKy8vIEV1cm9CcmFpbGxlIFtyZXNlcnZlZF0KK1VTQl9ERVZJQ0VfRU5UUlkoMFhDMjUxLCAwWDExMzEsICJldSIpLAorCisvLyBEZXZpY2U6IEMyNTE6MTEzMgorLy8gRXVyb0JyYWlsbGUgW3Jlc2VydmVkXQorVVNCX0RFVklDRV9FTlRSWSgwWEMyNTEsIDBYMTEzMiwgImV1IiksCisKKy8vIEVORF9VU0JfQlJBSUxMRV9ERVZJQ0VTCit9OworCitjb25zdCB1aW50MTZfdCB1c2JEZXZpY2VDb3VudCA9IEFSUkFZX0NPVU5UKHVzYkRldmljZVRhYmxlKTsKKwpkaWZmIC0tZ2l0IGEvUHJvZ3JhbXMvdXNiX2RldmljZXMuaCBiL1Byb2dyYW1zL3VzYl9kZXZpY2VzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDUyYzIwYgotLS0gL2Rldi9udWxsCisrKyBiL1Byb2dyYW1zL3VzYl9kZXZpY2VzLmgKQEAgLTAsMCArMSw0MSBAQAorLyoKKyAqIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisgKiAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisgKgorICogQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKKyNpZm5kZWYgQlJMVFRZX0lOQ0xVREVEX1VTQl9ERVZJQ0VTCisjZGVmaW5lIEJSTFRUWV9JTkNMVURFRF9VU0JfREVWSUNFUworCisjaW5jbHVkZSAicHJvbG9ndWUuaCIKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZiAvKiBfX2NwbHVzcGx1cyAqLworCit0eXBlZGVmIHN0cnVjdCB7CisgIGNvbnN0IGNoYXIgKmNvbnN0ICpkcml2ZXJDb2RlczsKKyAgdWludDE2X3QgdmVuZG9ySWRlbnRpZmllcjsKKyAgdWludDE2X3QgcHJvZHVjdElkZW50aWZpZXI7Cit9IFVzYkRldmljZUVudHJ5OworCitleHRlcm4gY29uc3QgVXNiRGV2aWNlRW50cnkgdXNiRGV2aWNlVGFibGVbXTsKK2V4dGVybiBjb25zdCB1aW50MTZfdCB1c2JEZXZpY2VDb3VudDsKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYgLyogX19jcGx1c3BsdXMgKi8KKworI2VuZGlmIC8qIEJSTFRUWV9JTkNMVURFRF9VU0JfREVWSUNFUyAqLwpkaWZmIC0tZ2l0IGEvUHJvZ3JhbXMvdXNiX2ZyZWVic2QuYyBiL1Byb2dyYW1zL3VzYl9mcmVlYnNkLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTczNTljZAotLS0gL2Rldi9udWxsCisrKyBiL1Byb2dyYW1zL3VzYl9mcmVlYnNkLmMKQEAgLTAsMCArMSwzNCBAQAorLyoKKyAqIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisgKiAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisgKgorICogQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKKyNpbmNsdWRlICJwcm9sb2d1ZS5oIgorCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVkZSA8c3lzL2lvY3RsLmg+CisjaW5jbHVkZSA8c3lzL3BhcmFtLmg+CisjaW5jbHVkZSA8ZGV2L3VzYi91c2IuaD4KKworI2luY2x1ZGUgImlvX3VzYi5oIgorI2luY2x1ZGUgInVzYl9pbnRlcm5hbC5oIgorCisjZGVmaW5lIFVTQl9DT05UUk9MX1BBVEhfRk9STUFUICIvZGV2LyVzIgorI2RlZmluZSBVU0JfRU5EUE9JTlRfUEFUSF9GT1JNQVQgIiUuKnMuJWQiCisjaW5jbHVkZSAidXNiX2JzZC5oIgpkaWZmIC0tZ2l0IGEvUHJvZ3JhbXMvdXNiX2Z0ZGkuYyBiL1Byb2dyYW1zL3VzYl9mdGRpLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWMwZjM3YQotLS0gL2Rldi9udWxsCisrKyBiL1Byb2dyYW1zL3VzYl9mdGRpLmMKQEAgLTAsMCArMSwyMTMgQEAKKy8qCisgKiBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorICogICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorICoKKyAqIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorICoKKyAqIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyAqLworCisjaW5jbHVkZSAicHJvbG9ndWUuaCIKKworI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisKKyNpbmNsdWRlICJsb2cuaCIKKyNpbmNsdWRlICJ1c2Jfc2VyaWFsLmgiCisjaW5jbHVkZSAidXNiX2Z0ZGkuaCIKKworc3RhdGljIGludAordXNiSW5wdXRGaWx0ZXJfRlRESSAoVXNiSW5wdXRGaWx0ZXJEYXRhICpkYXRhKSB7CisgIHJldHVybiB1c2JTa2lwSW5pdGlhbEJ5dGVzKGRhdGEsIDIpOworfQorCitzdGF0aWMgaW50Cit1c2JTZXRBdHRyaWJ1dGVfRlRESSAoVXNiRGV2aWNlICpkZXZpY2UsIHVuc2lnbmVkIGNoYXIgcmVxdWVzdCwgdW5zaWduZWQgaW50IHZhbHVlLCB1bnNpZ25lZCBpbnQgaW5kZXgpIHsKKyAgbG9nTWVzc2FnZShMT0dfQ0FURUdPUlkoU0VSSUFMX0lPKSwgIkZUREkgcmVxdWVzdDogJTAyWCAlMDRYICUwNFgiLCByZXF1ZXN0LCB2YWx1ZSwgaW5kZXgpOworICByZXR1cm4gdXNiQ29udHJvbFdyaXRlKGRldmljZSwgVXNiQ29udHJvbFJlY2lwaWVudF9EZXZpY2UsIFVzYkNvbnRyb2xUeXBlX1ZlbmRvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0LCB2YWx1ZSwgaW5kZXgsIE5VTEwsIDAsIDEwMDApICE9IC0xOworfQorCitzdGF0aWMgaW50Cit1c2JTZXRCYXVkX0ZUREkgKFVzYkRldmljZSAqZGV2aWNlLCB1bnNpZ25lZCBpbnQgZGl2aXNvcikgeworICByZXR1cm4gdXNiU2V0QXR0cmlidXRlX0ZUREkoZGV2aWNlLCAzLCBkaXZpc29yJjBYRkZGRiwgZGl2aXNvcj4+MFgxMCk7Cit9CisKK3N0YXRpYyBpbnQKK3VzYlNldEJhdWRfRlRESV9TSU8gKFVzYkRldmljZSAqZGV2aWNlLCB1bnNpZ25lZCBpbnQgYmF1ZCkgeworICB1bnNpZ25lZCBpbnQgZGl2aXNvcjsKKyAgc3dpdGNoIChiYXVkKSB7CisgICAgY2FzZSAgICAzMDA6IGRpdmlzb3IgPSAwOyBicmVhazsKKyAgICBjYXNlICAgIDYwMDogZGl2aXNvciA9IDE7IGJyZWFrOworICAgIGNhc2UgICAxMjAwOiBkaXZpc29yID0gMjsgYnJlYWs7CisgICAgY2FzZSAgIDI0MDA6IGRpdmlzb3IgPSAzOyBicmVhazsKKyAgICBjYXNlICAgNDgwMDogZGl2aXNvciA9IDQ7IGJyZWFrOworICAgIGNhc2UgICA5NjAwOiBkaXZpc29yID0gNTsgYnJlYWs7CisgICAgY2FzZSAgMTkyMDA6IGRpdmlzb3IgPSA2OyBicmVhazsKKyAgICBjYXNlICAzODQwMDogZGl2aXNvciA9IDc7IGJyZWFrOworICAgIGNhc2UgIDU3NjAwOiBkaXZpc29yID0gODsgYnJlYWs7CisgICAgY2FzZSAxMTUyMDA6IGRpdmlzb3IgPSA5OyBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgbG9nVW5zdXBwb3J0ZWRCYXVkKGJhdWQpOworICAgICAgZXJybm8gPSBFSU5WQUw7CisgICAgICByZXR1cm4gMDsKKyAgfQorICByZXR1cm4gdXNiU2V0QmF1ZF9GVERJKGRldmljZSwgZGl2aXNvcik7Cit9CisKK3N0YXRpYyBpbnQKK3VzYlNldEJhdWRfRlRESV9GVDhVMjMyQU0gKFVzYkRldmljZSAqZGV2aWNlLCB1bnNpZ25lZCBpbnQgYmF1ZCkgeworICBpZiAoYmF1ZCA+IDMwMDAwMDApIHsKKyAgICBsb2dVbnN1cHBvcnRlZEJhdWQoYmF1ZCk7CisgICAgZXJybm8gPSBFSU5WQUw7CisgICAgcmV0dXJuIDA7CisgIH0KKyAgeworICAgIGNvbnN0IHVuc2lnbmVkIGludCBiYXNlID0gNDgwMDAwMDA7CisgICAgdW5zaWduZWQgaW50IGVpZ2h0aHMgPSBiYXNlIC8gMiAvIGJhdWQ7CisgICAgdW5zaWduZWQgaW50IGRpdmlzb3I7CisgICAgaWYgKChlaWdodGhzICYgMDcpID09IDcpIGVpZ2h0aHMrKzsKKyAgICBkaXZpc29yID0gZWlnaHRocyA+PiAzOworICAgIGRpdmlzb3IgfD0gKGVpZ2h0aHMgJiAwNCk/IDBYNDAwMDoKKyAgICAgICAgICAgICAgIChlaWdodGhzICYgMDIpPyAwWDgwMDA6CisgICAgICAgICAgICAgICAoZWlnaHRocyAmIDAxKT8gMFhDMDAwOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDBYMDAwMDsKKyAgICBpZiAoZGl2aXNvciA9PSAxKSBkaXZpc29yID0gMDsKKyAgICByZXR1cm4gdXNiU2V0QmF1ZF9GVERJKGRldmljZSwgZGl2aXNvcik7CisgIH0KK30KKworc3RhdGljIGludAordXNiU2V0QmF1ZF9GVERJX0ZUMjMyQk0gKFVzYkRldmljZSAqZGV2aWNlLCB1bnNpZ25lZCBpbnQgYmF1ZCkgeworICBpZiAoYmF1ZCA+IDMwMDAwMDApIHsKKyAgICBsb2dVbnN1cHBvcnRlZEJhdWQoYmF1ZCk7CisgICAgZXJybm8gPSBFSU5WQUw7CisgICAgcmV0dXJuIDA7CisgIH0KKyAgeworICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIG1hc2tbOF0gPSB7MDAsIDAzLCAwMiwgMDQsIDAxLCAwNSwgMDYsIDA3fTsKKyAgICBjb25zdCB1bnNpZ25lZCBpbnQgYmFzZSA9IDQ4MDAwMDAwOworICAgIGNvbnN0IHVuc2lnbmVkIGludCBlaWdodGhzID0gYmFzZSAvIDIgLyBiYXVkOworICAgIHVuc2lnbmVkIGludCBkaXZpc29yID0gKGVpZ2h0aHMgPj4gMykgfCAobWFza1tlaWdodGhzICYgMDddIDw8IDE0KTsKKyAgICBpZiAoZGl2aXNvciA9PSAxKSB7CisgICAgICBkaXZpc29yID0gMDsKKyAgICB9IGVsc2UgaWYgKGRpdmlzb3IgPT0gMFg0MDAxKSB7CisgICAgICBkaXZpc29yID0gMTsKKyAgICB9CisgICAgcmV0dXJuIHVzYlNldEJhdWRfRlRESShkZXZpY2UsIGRpdmlzb3IpOworICB9Cit9CisKK3N0YXRpYyBpbnQKK3VzYlNldEZsb3dDb250cm9sX0ZUREkgKFVzYkRldmljZSAqZGV2aWNlLCBTZXJpYWxGbG93Q29udHJvbCBmbG93KSB7CisgIHVuc2lnbmVkIGludCBpbmRleCA9IDA7CisjZGVmaW5lIEZURElfRkxPVyhmcm9tLHRvKSBpZiAoKGZsb3cgJiAoZnJvbSkpID09IChmcm9tKSkgZmxvdyAmPSB+KGZyb20pLCBpbmRleCB8PSAodG8pCisgIEZURElfRkxPVyhTRVJJQUxfRkxPV19PVVRQVVRfQ1RTfFNFUklBTF9GTE9XX0lOUFVUX1JUUywgMFgwMTAwKTsKKyAgRlRESV9GTE9XKFNFUklBTF9GTE9XX09VVFBVVF9EU1J8U0VSSUFMX0ZMT1dfSU5QVVRfRFRSLCAwWDAyMDApOworICBGVERJX0ZMT1coU0VSSUFMX0ZMT1dfT1VUUFVUX1hPTnxTRVJJQUxfRkxPV19JTlBVVF9YT04sIDBYMDQwMCk7CisjdW5kZWYgRlRESV9GTE9XCisgIGlmIChmbG93KSB7CisgICAgbG9nVW5zdXBwb3J0ZWRGbG93Q29udHJvbChmbG93KTsKKyAgfQorICByZXR1cm4gdXNiU2V0QXR0cmlidXRlX0ZUREkoZGV2aWNlLCAyLCAoKGluZGV4ICYgMFgwNDAwKT8gMFgxMzExOiAwKSwgaW5kZXgpOworfQorCitzdGF0aWMgaW50Cit1c2JTZXREYXRhRm9ybWF0X0ZUREkgKFVzYkRldmljZSAqZGV2aWNlLCB1bnNpZ25lZCBpbnQgZGF0YUJpdHMsIFNlcmlhbFN0b3BCaXRzIHN0b3BCaXRzLCBTZXJpYWxQYXJpdHkgcGFyaXR5KSB7CisgIGludCBvayA9IDE7CisgIHVuc2lnbmVkIGludCB2YWx1ZSA9IGRhdGFCaXRzICYgMFhGRjsKKyAgaWYgKGRhdGFCaXRzICE9IHZhbHVlKSB7CisgICAgbG9nVW5zdXBwb3J0ZWREYXRhQml0cyhkYXRhQml0cyk7CisgICAgb2sgPSAwOworICB9CisgIHN3aXRjaCAocGFyaXR5KSB7CisgICAgY2FzZSBTRVJJQUxfUEFSSVRZX05PTkU6ICB2YWx1ZSB8PSAwWDAwMDsgYnJlYWs7CisgICAgY2FzZSBTRVJJQUxfUEFSSVRZX09ERDogICB2YWx1ZSB8PSAwWDEwMDsgYnJlYWs7CisgICAgY2FzZSBTRVJJQUxfUEFSSVRZX0VWRU46ICB2YWx1ZSB8PSAwWDIwMDsgYnJlYWs7CisgICAgY2FzZSBTRVJJQUxfUEFSSVRZX01BUks6ICB2YWx1ZSB8PSAwWDMwMDsgYnJlYWs7CisgICAgY2FzZSBTRVJJQUxfUEFSSVRZX1NQQUNFOiB2YWx1ZSB8PSAwWDQwMDsgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgIGxvZ1Vuc3VwcG9ydGVkUGFyaXR5KHBhcml0eSk7CisgICAgICBvayA9IDA7CisgICAgICBicmVhazsKKyAgfQorICBzd2l0Y2ggKHN0b3BCaXRzKSB7CisgICAgY2FzZSBTRVJJQUxfU1RPUF8xOiB2YWx1ZSB8PSAwWDAwMDA7IGJyZWFrOworICAgIGNhc2UgU0VSSUFMX1NUT1BfMjogdmFsdWUgfD0gMFgxMDAwOyBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgbG9nVW5zdXBwb3J0ZWRTdG9wQml0cyhzdG9wQml0cyk7CisgICAgICBvayA9IDA7CisgICAgICBicmVhazsKKyAgfQorICBpZiAoIW9rKSB7CisgICAgZXJybm8gPSBFSU5WQUw7CisgICAgcmV0dXJuIDA7CisgIH0KKyAgcmV0dXJuIHVzYlNldEF0dHJpYnV0ZV9GVERJKGRldmljZSwgNCwgdmFsdWUsIDApOworfQorCitzdGF0aWMgaW50Cit1c2JTZXRNb2RlbVN0YXRlX0ZUREkgKFVzYkRldmljZSAqZGV2aWNlLCBpbnQgc3RhdGUsIGludCBzaGlmdCwgY29uc3QgY2hhciAqbmFtZSkgeworICBpZiAoKHN0YXRlIDwgMCkgfHwgKHN0YXRlID4gMSkpIHsKKyAgICBsb2dNZXNzYWdlKExPR19XQVJOSU5HLCAiVW5zdXBwb3J0ZWQgRlRESSAlcyBzdGF0ZTogJWQiLCBuYW1lLCBzdGF0ZSk7CisgICAgZXJybm8gPSBFSU5WQUw7CisgICAgcmV0dXJuIDA7CisgIH0KKyAgcmV0dXJuIHVzYlNldEF0dHJpYnV0ZV9GVERJKGRldmljZSwgMSwgKCgxIDw8IChzaGlmdCArIDgpKSB8IChzdGF0ZSA8PCBzaGlmdCkpLCAwKTsKK30KKworc3RhdGljIGludAordXNiU2V0RHRyU3RhdGVfRlRESSAoVXNiRGV2aWNlICpkZXZpY2UsIGludCBzdGF0ZSkgeworICByZXR1cm4gdXNiU2V0TW9kZW1TdGF0ZV9GVERJKGRldmljZSwgc3RhdGUsIDAsICJEVFIiKTsKK30KKworc3RhdGljIGludAordXNiU2V0UnRzU3RhdGVfRlRESSAoVXNiRGV2aWNlICpkZXZpY2UsIGludCBzdGF0ZSkgeworICByZXR1cm4gdXNiU2V0TW9kZW1TdGF0ZV9GVERJKGRldmljZSwgc3RhdGUsIDEsICJSVFMiKTsKK30KKworY29uc3QgVXNiU2VyaWFsT3BlcmF0aW9ucyB1c2JTZXJpYWxPcGVyYXRpb25zX0ZURElfU0lPID0geworICAubmFtZSA9ICJGVERJX1NJTyIsCisKKyAgLnNldEJhdWQgPSB1c2JTZXRCYXVkX0ZURElfU0lPLAorICAuc2V0RGF0YUZvcm1hdCA9IHVzYlNldERhdGFGb3JtYXRfRlRESSwKKyAgLnNldEZsb3dDb250cm9sID0gdXNiU2V0Rmxvd0NvbnRyb2xfRlRESSwKKworICAuc2V0RHRyU3RhdGUgPSB1c2JTZXREdHJTdGF0ZV9GVERJLAorICAuc2V0UnRzU3RhdGUgPSB1c2JTZXRSdHNTdGF0ZV9GVERJCit9OworCitjb25zdCBVc2JTZXJpYWxPcGVyYXRpb25zIHVzYlNlcmlhbE9wZXJhdGlvbnNfRlRESV9GVDhVMjMyQU0gPSB7CisgIC5uYW1lID0gIkZURElfRlQ4VTIzMkFNIiwKKworICAuc2V0QmF1ZCA9IHVzYlNldEJhdWRfRlRESV9GVDhVMjMyQU0sCisgIC5zZXREYXRhRm9ybWF0ID0gdXNiU2V0RGF0YUZvcm1hdF9GVERJLAorICAuc2V0Rmxvd0NvbnRyb2wgPSB1c2JTZXRGbG93Q29udHJvbF9GVERJLAorCisgIC5zZXREdHJTdGF0ZSA9IHVzYlNldER0clN0YXRlX0ZUREksCisgIC5zZXRSdHNTdGF0ZSA9IHVzYlNldFJ0c1N0YXRlX0ZUREksCisKKyAgLmlucHV0RmlsdGVyID0gdXNiSW5wdXRGaWx0ZXJfRlRESQorfTsKKworY29uc3QgVXNiU2VyaWFsT3BlcmF0aW9ucyB1c2JTZXJpYWxPcGVyYXRpb25zX0ZURElfRlQyMzJCTSA9IHsKKyAgLm5hbWUgPSAiRlRESV9GVDIzMkJNIiwKKworICAuc2V0QmF1ZCA9IHVzYlNldEJhdWRfRlRESV9GVDIzMkJNLAorICAuc2V0RGF0YUZvcm1hdCA9IHVzYlNldERhdGFGb3JtYXRfRlRESSwKKyAgLnNldEZsb3dDb250cm9sID0gdXNiU2V0Rmxvd0NvbnRyb2xfRlRESSwKKworICAuc2V0RHRyU3RhdGUgPSB1c2JTZXREdHJTdGF0ZV9GVERJLAorICAuc2V0UnRzU3RhdGUgPSB1c2JTZXRSdHNTdGF0ZV9GVERJLAorCisgIC5pbnB1dEZpbHRlciA9IHVzYklucHV0RmlsdGVyX0ZUREkKK307CmRpZmYgLS1naXQgYS9Qcm9ncmFtcy91c2JfZnRkaS5oIGIvUHJvZ3JhbXMvdXNiX2Z0ZGkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMTJmZWM3Ci0tLSAvZGV2L251bGwKKysrIGIvUHJvZ3JhbXMvdXNiX2Z0ZGkuaApAQCAtMCwwICsxLDMwIEBACisvKgorICogQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyAqICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyAqCisgKiBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorICoKKyAqIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyAqCisgKiBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisgKi8KKworI2lmbmRlZiBCUkxUVFlfSU5DTFVERURfVVNCX0ZUREkKKyNkZWZpbmUgQlJMVFRZX0lOQ0xVREVEX1VTQl9GVERJCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYgLyogX19jcGx1c3BsdXMgKi8KKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYgLyogX19jcGx1c3BsdXMgKi8KKworI2VuZGlmIC8qIEJSTFRUWV9JTkNMVURFRF9VU0JfRlRESSAqLwpkaWZmIC0tZ2l0IGEvUHJvZ3JhbXMvdXNiX2dydWIuYyBiL1Byb2dyYW1zL3VzYl9ncnViLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDU2NDkzOAotLS0gL2Rldi9udWxsCisrKyBiL1Byb2dyYW1zL3VzYl9ncnViLmMKQEAgLTAsMCArMSwxNzggQEAKKy8qCisgKiBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorICogICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorICoKKyAqIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorICoKKyAqIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyAqLworCisjaW5jbHVkZSAicHJvbG9ndWUuaCIKKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKworI2luY2x1ZGUgImxvZy5oIgorI2luY2x1ZGUgImlvX3VzYi5oIgorI2luY2x1ZGUgInVzYl9pbnRlcm5hbC5oIgorCitpbnQKK3VzYkRpc2FibGVBdXRvc3VzcGVuZCAoVXNiRGV2aWNlICpkZXZpY2UpIHsKKyAgbG9nVW5zdXBwb3J0ZWRGdW5jdGlvbigpOworICByZXR1cm4gMDsKK30KKworaW50Cit1c2JTZXRDb25maWd1cmF0aW9uIChVc2JEZXZpY2UgKmRldmljZSwgdW5zaWduZWQgY2hhciBjb25maWd1cmF0aW9uKSB7CisgIGxvZ1Vuc3VwcG9ydGVkRnVuY3Rpb24oKTsKKyAgcmV0dXJuIDA7Cit9CisKK2ludAordXNiQ2xhaW1JbnRlcmZhY2UgKFVzYkRldmljZSAqZGV2aWNlLCB1bnNpZ25lZCBjaGFyIGludGVyZmFjZSkgeworICBsb2dVbnN1cHBvcnRlZEZ1bmN0aW9uKCk7CisgIHJldHVybiAwOworfQorCitpbnQKK3VzYlJlbGVhc2VJbnRlcmZhY2UgKFVzYkRldmljZSAqZGV2aWNlLCB1bnNpZ25lZCBjaGFyIGludGVyZmFjZSkgeworICBsb2dVbnN1cHBvcnRlZEZ1bmN0aW9uKCk7CisgIHJldHVybiAwOworfQorCitpbnQKK3VzYlNldEFsdGVybmF0aXZlICgKKyAgVXNiRGV2aWNlICpkZXZpY2UsCisgIHVuc2lnbmVkIGNoYXIgaW50ZXJmYWNlLAorICB1bnNpZ25lZCBjaGFyIGFsdGVybmF0aXZlCispIHsKKyAgbG9nVW5zdXBwb3J0ZWRGdW5jdGlvbigpOworICByZXR1cm4gMDsKK30KKworaW50Cit1c2JSZXNldERldmljZSAoVXNiRGV2aWNlICpkZXZpY2UpIHsKKyAgbG9nVW5zdXBwb3J0ZWRGdW5jdGlvbigpOworICByZXR1cm4gMDsKK30KKworaW50Cit1c2JDbGVhckhhbHQgKFVzYkRldmljZSAqZGV2aWNlLCB1bnNpZ25lZCBjaGFyIGVuZHBvaW50QWRkcmVzcykgeworICBsb2dVbnN1cHBvcnRlZEZ1bmN0aW9uKCk7CisgIHJldHVybiAwOworfQorCitzc2l6ZV90Cit1c2JDb250cm9sVHJhbnNmZXIgKAorICBVc2JEZXZpY2UgKmRldmljZSwKKyAgdWludDhfdCBkaXJlY3Rpb24sCisgIHVpbnQ4X3QgcmVjaXBpZW50LAorICB1aW50OF90IHR5cGUsCisgIHVpbnQ4X3QgcmVxdWVzdCwKKyAgdWludDE2X3QgdmFsdWUsCisgIHVpbnQxNl90IGluZGV4LAorICB2b2lkICpidWZmZXIsCisgIHVpbnQxNl90IGxlbmd0aCwKKyAgaW50IHRpbWVvdXQKKykgeworICBsb2dVbnN1cHBvcnRlZEZ1bmN0aW9uKCk7CisgIHJldHVybiAtMTsKK30KKwordm9pZCAqCit1c2JTdWJtaXRSZXF1ZXN0ICgKKyAgVXNiRGV2aWNlICpkZXZpY2UsCisgIHVuc2lnbmVkIGNoYXIgZW5kcG9pbnRBZGRyZXNzLAorICB2b2lkICpidWZmZXIsCisgIHNpemVfdCBsZW5ndGgsCisgIHZvaWQgKmNvbnRleHQKKykgeworICBsb2dVbnN1cHBvcnRlZEZ1bmN0aW9uKCk7CisgIHJldHVybiBOVUxMOworfQorCitpbnQKK3VzYkNhbmNlbFJlcXVlc3QgKFVzYkRldmljZSAqZGV2aWNlLCB2b2lkICpyZXF1ZXN0KSB7CisgIGxvZ1Vuc3VwcG9ydGVkRnVuY3Rpb24oKTsKKyAgcmV0dXJuIDA7Cit9CisKK3ZvaWQgKgordXNiUmVhcFJlc3BvbnNlICgKKyAgVXNiRGV2aWNlICpkZXZpY2UsCisgIHVuc2lnbmVkIGNoYXIgZW5kcG9pbnRBZGRyZXNzLAorICBVc2JSZXNwb25zZSAqcmVzcG9uc2UsCisgIGludCB3YWl0CispIHsKKyAgbG9nVW5zdXBwb3J0ZWRGdW5jdGlvbigpOworICByZXR1cm4gTlVMTDsKK30KKworaW50Cit1c2JNb25pdG9ySW5wdXRFbmRwb2ludCAoCisgIFVzYkRldmljZSAqZGV2aWNlLCB1bnNpZ25lZCBjaGFyIGVuZHBvaW50TnVtYmVyLAorICBBc3luY01vbml0b3JDYWxsYmFjayAqY2FsbGJhY2ssIHZvaWQgKmRhdGEKKykgeworICByZXR1cm4gMDsKK30KKworc3NpemVfdAordXNiUmVhZEVuZHBvaW50ICgKKyAgVXNiRGV2aWNlICpkZXZpY2UsCisgIHVuc2lnbmVkIGNoYXIgZW5kcG9pbnROdW1iZXIsCisgIHZvaWQgKmJ1ZmZlciwKKyAgc2l6ZV90IGxlbmd0aCwKKyAgaW50IHRpbWVvdXQKKykgeworICBsb2dVbnN1cHBvcnRlZEZ1bmN0aW9uKCk7CisgIHJldHVybiAtMTsKK30KKworc3NpemVfdAordXNiV3JpdGVFbmRwb2ludCAoCisgIFVzYkRldmljZSAqZGV2aWNlLAorICB1bnNpZ25lZCBjaGFyIGVuZHBvaW50TnVtYmVyLAorICBjb25zdCB2b2lkICpidWZmZXIsCisgIHNpemVfdCBsZW5ndGgsCisgIGludCB0aW1lb3V0CispIHsKKyAgbG9nVW5zdXBwb3J0ZWRGdW5jdGlvbigpOworICByZXR1cm4gLTE7Cit9CisKK2ludAordXNiUmVhZERldmljZURlc2NyaXB0b3IgKFVzYkRldmljZSAqZGV2aWNlKSB7CisgIGxvZ1Vuc3VwcG9ydGVkRnVuY3Rpb24oKTsKKyAgcmV0dXJuIDA7Cit9CisKK2ludAordXNiQWxsb2NhdGVFbmRwb2ludEV4dGVuc2lvbiAoVXNiRW5kcG9pbnQgKmVuZHBvaW50KSB7CisgIHJldHVybiAxOworfQorCit2b2lkCit1c2JEZWFsbG9jYXRlRW5kcG9pbnRFeHRlbnNpb24gKFVzYkVuZHBvaW50RXh0ZW5zaW9uICplcHR4KSB7Cit9CisKK3ZvaWQKK3VzYkRlYWxsb2NhdGVEZXZpY2VFeHRlbnNpb24gKFVzYkRldmljZUV4dGVuc2lvbiAqZGV2eCkgeworfQorCitVc2JEZXZpY2UgKgordXNiRmluZERldmljZSAoVXNiRGV2aWNlQ2hvb3NlciAqY2hvb3NlciwgVXNiQ2hvb3NlQ2hhbm5lbERhdGEgKmRhdGEpIHsKKyAgcmV0dXJuIE5VTEw7Cit9CisKK3ZvaWQKK3VzYkZvcmdldERldmljZXMgKHZvaWQpIHsKK30KZGlmZiAtLWdpdCBhL1Byb2dyYW1zL3VzYl9oaWQuYyBiL1Byb2dyYW1zL3VzYl9oaWQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYWQwMDNlCi0tLSAvZGV2L251bGwKKysrIGIvUHJvZ3JhbXMvdXNiX2hpZC5jCkBAIC0wLDAgKzEsMTU3IEBACisvKgorICogQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyAqICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyAqCisgKiBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorICoKKyAqIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyAqCisgKiBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisgKi8KKworI2luY2x1ZGUgInByb2xvZ3VlLmgiCisKKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorCisjaW5jbHVkZSAibG9nLmgiCisjaW5jbHVkZSAiaW9fdXNiLmgiCisjaW5jbHVkZSAidXNiX2hpZC5oIgorI2luY2x1ZGUgImJpdGZpZWxkLmgiCisKK2NvbnN0IFVzYkhpZERlc2NyaXB0b3IgKgordXNiSGlkRGVzY3JpcHRvciAoVXNiRGV2aWNlICpkZXZpY2UpIHsKKyAgY29uc3QgVXNiRGVzY3JpcHRvciAqZGVzY3JpcHRvciA9IE5VTEw7CisKKyAgd2hpbGUgKHVzYk5leHREZXNjcmlwdG9yKGRldmljZSwgJmRlc2NyaXB0b3IpKSB7CisgICAgaWYgKGRlc2NyaXB0b3ItPmhlYWRlci5iRGVzY3JpcHRvclR5cGUgPT0gVXNiRGVzY3JpcHRvclR5cGVfSElEKSB7CisgICAgICByZXR1cm4gJmRlc2NyaXB0b3ItPmhpZDsKKyAgICB9CisgIH0KKworICBsb2dNZXNzYWdlKExPR19XQVJOSU5HLCAiVVNCOiBISUQgZGVzY3JpcHRvciBub3QgZm91bmQiKTsKKyAgZXJybm8gPSBFTk9FTlQ7CisgIHJldHVybiBOVUxMOworfQorCitIaWRJdGVtc0Rlc2NyaXB0b3IgKgordXNiSGlkR2V0SXRlbXMgKAorICBVc2JEZXZpY2UgKmRldmljZSwKKyAgdW5zaWduZWQgY2hhciBpbnRlcmZhY2UsCisgIHVuc2lnbmVkIGNoYXIgbnVtYmVyLAorICBpbnQgdGltZW91dAorKSB7CisgIGNvbnN0IFVzYkhpZERlc2NyaXB0b3IgKmhpZCA9IHVzYkhpZERlc2NyaXB0b3IoZGV2aWNlKTsKKworICBpZiAoaGlkKSB7CisgICAgaWYgKG51bWJlciA8IGhpZC0+Yk51bURlc2NyaXB0b3JzKSB7CisgICAgICBjb25zdCBVc2JDbGFzc0Rlc2NyaXB0b3IgKmRlc2NyaXB0b3IgPSAmaGlkLT5kZXNjcmlwdG9yc1tudW1iZXJdOworICAgICAgdWludDE2X3QgbGVuZ3RoID0gZ2V0TGl0dGxlRW5kaWFuMTYoZGVzY3JpcHRvci0+d0Rlc2NyaXB0b3JMZW5ndGgpOworCisgICAgICBIaWRJdGVtc0Rlc2NyaXB0b3IgKml0ZW1zOworICAgICAgc2l6ZV90IHNpemUgPSBzaXplb2YoKml0ZW1zKTsKKyAgICAgIHNpemUgKz0gbGVuZ3RoOworCisgICAgICBpZiAoKGl0ZW1zID0gbWFsbG9jKHNpemUpKSkgeworICAgICAgICBzc2l6ZV90IHJlc3VsdCA9IHVzYkNvbnRyb2xSZWFkKAorICAgICAgICAgIGRldmljZSwgVXNiQ29udHJvbFJlY2lwaWVudF9JbnRlcmZhY2UsIFVzYkNvbnRyb2xUeXBlX1N0YW5kYXJkLAorICAgICAgICAgIFVzYlN0YW5kYXJkUmVxdWVzdF9HZXREZXNjcmlwdG9yLAorICAgICAgICAgIChkZXNjcmlwdG9yLT5iRGVzY3JpcHRvclR5cGUgPDwgOCkgfCBpbnRlcmZhY2UsCisgICAgICAgICAgbnVtYmVyLCBpdGVtcy0+Ynl0ZXMsIGxlbmd0aCwgdGltZW91dAorICAgICAgICApOworCisgICAgICAgIGlmIChyZXN1bHQgIT0gLTEpIHsKKyAgICAgICAgICBtZW1zZXQoaXRlbXMsIDAsIHNpemVvZigqaXRlbXMpKTsKKyAgICAgICAgICBpdGVtcy0+Y291bnQgPSByZXN1bHQ7CisgICAgICAgICAgcmV0dXJuIGl0ZW1zOworICAgICAgICB9CisKKyAgICAgICAgZnJlZShpdGVtcyk7CisgICAgICB9IGVsc2UgeworICAgICAgICBsb2dNYWxsb2NFcnJvcigpOworICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICBsb2dNZXNzYWdlKExPR19XQVJOSU5HLAorICAgICAgICAiVVNCIHJlcG9ydCBkZXNjcmlwdG9yIG5vdCBmb3VuZDogJXVbJXVdIiwKKyAgICAgICAgaW50ZXJmYWNlLCBudW1iZXIKKyAgICAgICk7CisgICAgfQorICB9CisKKyAgcmV0dXJuIE5VTEw7Cit9CisKK3NzaXplX3QKK3VzYkhpZEdldFJlcG9ydCAoCisgIFVzYkRldmljZSAqZGV2aWNlLAorICB1bnNpZ25lZCBjaGFyIGludGVyZmFjZSwKKyAgSGlkUmVwb3J0SWRlbnRpZmllciBpZGVudGlmaWVyLAorICB1bnNpZ25lZCBjaGFyICpidWZmZXIsCisgIHVpbnQxNl90IHNpemUsCisgIGludCB0aW1lb3V0CispIHsKKyAgcmV0dXJuIHVzYkNvbnRyb2xSZWFkKGRldmljZSwKKyAgICBVc2JDb250cm9sUmVjaXBpZW50X0ludGVyZmFjZSwgVXNiQ29udHJvbFR5cGVfQ2xhc3MsCisgICAgVXNiSGlkUmVxdWVzdF9HZXRSZXBvcnQsCisgICAgKFVzYkhpZFJlcG9ydFR5cGVfSW5wdXQgPDwgOCkgfCBpZGVudGlmaWVyLCBpbnRlcmZhY2UsCisgICAgYnVmZmVyLCBzaXplLCB0aW1lb3V0CisgICk7Cit9CisKK3NzaXplX3QKK3VzYkhpZFNldFJlcG9ydCAoCisgIFVzYkRldmljZSAqZGV2aWNlLAorICB1bnNpZ25lZCBjaGFyIGludGVyZmFjZSwKKyAgSGlkUmVwb3J0SWRlbnRpZmllciBpZGVudGlmaWVyLAorICBjb25zdCB1bnNpZ25lZCBjaGFyICpkYXRhLAorICB1aW50MTZfdCBsZW5ndGgsCisgIGludCB0aW1lb3V0CispIHsKKyAgcmV0dXJuIHVzYkNvbnRyb2xXcml0ZShkZXZpY2UsCisgICAgVXNiQ29udHJvbFJlY2lwaWVudF9JbnRlcmZhY2UsIFVzYkNvbnRyb2xUeXBlX0NsYXNzLAorICAgIFVzYkhpZFJlcXVlc3RfU2V0UmVwb3J0LAorICAgIChVc2JIaWRSZXBvcnRUeXBlX091dHB1dCA8PCA4KSB8IGlkZW50aWZpZXIsIGludGVyZmFjZSwKKyAgICBkYXRhLCBsZW5ndGgsIHRpbWVvdXQKKyAgKTsKK30KKworc3NpemVfdAordXNiSGlkR2V0RmVhdHVyZSAoCisgIFVzYkRldmljZSAqZGV2aWNlLAorICB1bnNpZ25lZCBjaGFyIGludGVyZmFjZSwKKyAgSGlkUmVwb3J0SWRlbnRpZmllciBpZGVudGlmaWVyLAorICB1bnNpZ25lZCBjaGFyICpidWZmZXIsCisgIHVpbnQxNl90IHNpemUsCisgIGludCB0aW1lb3V0CispIHsKKyAgcmV0dXJuIHVzYkNvbnRyb2xSZWFkKGRldmljZSwKKyAgICBVc2JDb250cm9sUmVjaXBpZW50X0ludGVyZmFjZSwgVXNiQ29udHJvbFR5cGVfQ2xhc3MsCisgICAgVXNiSGlkUmVxdWVzdF9HZXRSZXBvcnQsCisgICAgKFVzYkhpZFJlcG9ydFR5cGVfRmVhdHVyZSA8PCA4KSB8IGlkZW50aWZpZXIsIGludGVyZmFjZSwKKyAgICBidWZmZXIsIHNpemUsIHRpbWVvdXQKKyAgKTsKK30KKworc3NpemVfdAordXNiSGlkU2V0RmVhdHVyZSAoCisgIFVzYkRldmljZSAqZGV2aWNlLAorICB1bnNpZ25lZCBjaGFyIGludGVyZmFjZSwKKyAgSGlkUmVwb3J0SWRlbnRpZmllciBpZGVudGlmaWVyLAorICBjb25zdCB1bnNpZ25lZCBjaGFyICpkYXRhLAorICB1aW50MTZfdCBsZW5ndGgsCisgIGludCB0aW1lb3V0CispIHsKKyAgcmV0dXJuIHVzYkNvbnRyb2xXcml0ZShkZXZpY2UsCisgICAgVXNiQ29udHJvbFJlY2lwaWVudF9JbnRlcmZhY2UsIFVzYkNvbnRyb2xUeXBlX0NsYXNzLAorICAgIFVzYkhpZFJlcXVlc3RfU2V0UmVwb3J0LAorICAgIChVc2JIaWRSZXBvcnRUeXBlX0ZlYXR1cmUgPDwgOCkgfCBpZGVudGlmaWVyLCBpbnRlcmZhY2UsCisgICAgZGF0YSwgbGVuZ3RoLCB0aW1lb3V0CisgICk7Cit9CmRpZmYgLS1naXQgYS9Qcm9ncmFtcy91c2JfaW50ZXJuYWwuaCBiL1Byb2dyYW1zL3VzYl9pbnRlcm5hbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNiZDM1MjEKLS0tIC9kZXYvbnVsbAorKysgYi9Qcm9ncmFtcy91c2JfaW50ZXJuYWwuaApAQCAtMCwwICsxLDE3NSBAQAorLyoKKyAqIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisgKiAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisgKgorICogQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKKyNpZm5kZWYgQlJMVFRZX0lOQ0xVREVEX1VTQl9JTlRFUk5BTAorI2RlZmluZSBCUkxUVFlfSU5DTFVERURfVVNCX0lOVEVSTkFMCisKKyNpbmNsdWRlICJ1c2JfdHlwZXMuaCIKKyNpbmNsdWRlICJxdWV1ZS5oIgorI2luY2x1ZGUgImFzeW5jX2lvLmgiCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYgLyogX19jcGx1c3BsdXMgKi8KKwordHlwZWRlZiBzdHJ1Y3QgeworICBVc2JJbnB1dEZpbHRlciAqZmlsdGVyOworfSBVc2JJbnB1dEZpbHRlckVudHJ5OworCit0eXBlZGVmIHN0cnVjdCBVc2JEZXZpY2VFeHRlbnNpb25TdHJ1Y3QgVXNiRGV2aWNlRXh0ZW5zaW9uOwordHlwZWRlZiBzdHJ1Y3QgVXNiRW5kcG9pbnRTdHJ1Y3QgVXNiRW5kcG9pbnQ7Cit0eXBlZGVmIHN0cnVjdCBVc2JFbmRwb2ludEV4dGVuc2lvblN0cnVjdCBVc2JFbmRwb2ludEV4dGVuc2lvbjsKKworc3RydWN0IFVzYkVuZHBvaW50U3RydWN0IHsKKyAgVXNiRGV2aWNlICpkZXZpY2U7CisgIGNvbnN0IFVzYkludGVyZmFjZURlc2NyaXB0b3IgKmludGVyZmFjZTsKKyAgY29uc3QgVXNiRW5kcG9pbnREZXNjcmlwdG9yICpkZXNjcmlwdG9yOworICBVc2JFbmRwb2ludEV4dGVuc2lvbiAqZXh0ZW5zaW9uOworICBpbnQgKCpwcmVwYXJlKSAoVXNiRW5kcG9pbnQgKmVuZHBvaW50KTsKKworICB1bmlvbiB7CisgICAgc3RydWN0IHsKKyAgICAgIHN0cnVjdCB7CisgICAgICAgIFF1ZXVlICpyZXF1ZXN0czsKKyAgICAgICAgQXN5bmNIYW5kbGUgYWxhcm07CisgICAgICAgIGludCBkZWxheTsKKyAgICAgIH0gcGVuZGluZzsKKworICAgICAgc3RydWN0IHsKKyAgICAgICAgdm9pZCAqcmVxdWVzdDsKKyAgICAgICAgdW5zaWduZWQgY2hhciAqYnVmZmVyOworICAgICAgICBzaXplX3QgbGVuZ3RoOworICAgICAgfSBjb21wbGV0ZWQ7CisKKyAgICAgIHN0cnVjdCB7CisgICAgICAgIEZpbGVEZXNjcmlwdG9yIGlucHV0OworICAgICAgICBGaWxlRGVzY3JpcHRvciBvdXRwdXQ7CisgICAgICAgIEFzeW5jSGFuZGxlIG1vbml0b3I7CisgICAgICAgIGludCBlcnJvcjsKKyAgICAgIH0gcGlwZTsKKyAgICB9IGlucHV0OworCisgICAgc3RydWN0IHsKKyAgICAgIGNoYXIgc3RydWN0TWF5Tm90QmVFbXB0eTsKKyAgICB9IG91dHB1dDsKKyAgfSBkaXJlY3Rpb247Cit9OworCitzdHJ1Y3QgVXNiRGV2aWNlU3RydWN0IHsKKyAgVXNiRGV2aWNlRGVzY3JpcHRvciBkZXNjcmlwdG9yOworICBVc2JEZXZpY2VFeHRlbnNpb24gKmV4dGVuc2lvbjsKKworICBzdHJ1Y3QgeworICAgIGNvbnN0IFVzYlNlcmlhbE9wZXJhdGlvbnMgKm9wZXJhdGlvbnM7CisgICAgVXNiU2VyaWFsRGF0YSAqZGF0YTsKKyAgfSBzZXJpYWw7CisKKyAgVXNiQ29uZmlndXJhdGlvbkRlc2NyaXB0b3IgKmNvbmZpZ3VyYXRpb247CisgIGNvbnN0IFVzYkludGVyZmFjZURlc2NyaXB0b3IgKmludGVyZmFjZTsKKyAgUXVldWUgKmVuZHBvaW50czsKKyAgUXVldWUgKmlucHV0RmlsdGVyczsKKworICB1aW50MTZfdCBsYW5ndWFnZTsKKyAgdW5zaWduZWQgY2hhciByZXNldERldmljZToxOworICB1bnNpZ25lZCBjaGFyIGRpc2FibGVFbmRwb2ludFJlc2V0OjE7CisKKyAgc3RydWN0IHsKKyAgICBjb25zdCBVc2JJbnRlcmZhY2VEZXNjcmlwdG9yICplbmRwb2ludEludGVyZmFjZURlc2NyaXB0b3I7CisgIH0gc2NyYXRjaDsKK307CisKK2V4dGVybiBVc2JEZXZpY2UgKnVzYlRlc3REZXZpY2UgKAorICBVc2JEZXZpY2VFeHRlbnNpb24gKmV4dGVuc2lvbiwKKyAgVXNiRGV2aWNlQ2hvb3NlciAqY2hvb3NlciwKKyAgVXNiQ2hvb3NlQ2hhbm5lbERhdGEgKmRhdGEKKyk7CitleHRlcm4gVXNiRW5kcG9pbnQgKnVzYkdldEVuZHBvaW50IChVc2JEZXZpY2UgKmRldmljZSwgdW5zaWduZWQgY2hhciBlbmRwb2ludEFkZHJlc3MpOworZXh0ZXJuIFVzYkVuZHBvaW50ICp1c2JHZXRJbnB1dEVuZHBvaW50IChVc2JEZXZpY2UgKmRldmljZSwgdW5zaWduZWQgY2hhciBlbmRwb2ludE51bWJlcik7CitleHRlcm4gVXNiRW5kcG9pbnQgKnVzYkdldE91dHB1dEVuZHBvaW50IChVc2JEZXZpY2UgKmRldmljZSwgdW5zaWduZWQgY2hhciBlbmRwb2ludE51bWJlcik7CitleHRlcm4gaW50IHVzYkFwcGx5SW5wdXRGaWx0ZXJzIChVc2JFbmRwb2ludCAqZW5kcG9pbnQsIHZvaWQgKmJ1ZmZlciwgc2l6ZV90IHNpemUsIHNzaXplX3QgKmxlbmd0aCk7CisKK2V4dGVybiB2b2lkIHVzYkxvZ0lucHV0UHJvYmxlbSAoVXNiRW5kcG9pbnQgKmVuZHBvaW50LCBjb25zdCBjaGFyICpwcm9ibGVtKTsKK2V4dGVybiBpbnQgdXNiSGFuZGxlSW5wdXRSZXNwb25zZSAoVXNiRW5kcG9pbnQgKmVuZHBvaW50LCBjb25zdCB2b2lkICpidWZmZXIsIHNpemVfdCBsZW5ndGgpOworCitleHRlcm4gaW50IHVzYlNldFNlcmlhbE9wZXJhdGlvbnMgKFVzYkRldmljZSAqZGV2aWNlKTsKKworZXh0ZXJuIGludCB1c2JTZXRDb25maWd1cmF0aW9uIChVc2JEZXZpY2UgKmRldmljZSwgdW5zaWduZWQgY2hhciBjb25maWd1cmF0aW9uKTsKKworZXh0ZXJuIGludCB1c2JDbGFpbUludGVyZmFjZSAoVXNiRGV2aWNlICpkZXZpY2UsIHVuc2lnbmVkIGNoYXIgaW50ZXJmYWNlKTsKKworZXh0ZXJuIGludCB1c2JSZWxlYXNlSW50ZXJmYWNlIChVc2JEZXZpY2UgKmRldmljZSwgdW5zaWduZWQgY2hhciBpbnRlcmZhY2UpOworCitleHRlcm4gaW50IHVzYlNldEFsdGVybmF0aXZlICgKKyAgVXNiRGV2aWNlICpkZXZpY2UsCisgIHVuc2lnbmVkIGNoYXIgaW50ZXJmYWNlLAorICB1bnNpZ25lZCBjaGFyIGFsdGVybmF0aXZlCispOworCitleHRlcm4gaW50IHVzYk1ha2VJbnB1dFBpcGUgKFVzYkVuZHBvaW50ICplbmRwb2ludCk7CitleHRlcm4gdm9pZCB1c2JEZXN0cm95SW5wdXRQaXBlIChVc2JFbmRwb2ludCAqZW5kcG9pbnQpOworZXh0ZXJuIGludCB1c2JFbnF1ZXVlSW5wdXQgKFVzYkVuZHBvaW50ICplbmRwb2ludCwgY29uc3Qgdm9pZCAqYnVmZmVyLCBzaXplX3QgbGVuZ3RoKTsKKworZXh0ZXJuIHZvaWQgdXNiU2V0RW5kcG9pbnRJbnB1dEVycm9yIChVc2JFbmRwb2ludCAqZW5kcG9pbnQsIGludCBlcnJvcik7CitleHRlcm4gdm9pZCB1c2JTZXREZXZpY2VJbnB1dEVycm9yIChVc2JEZXZpY2UgKmRldmljZSwgaW50IGVycm9yKTsKKworZXh0ZXJuIGludCB1c2JNb25pdG9ySW5wdXRQaXBlICgKKyAgVXNiRGV2aWNlICpkZXZpY2UsIHVuc2lnbmVkIGNoYXIgZW5kcG9pbnROdW1iZXIsCisgIEFzeW5jTW9uaXRvckNhbGxiYWNrICpjYWxsYmFjaywgdm9pZCAqZGF0YQorKTsKKworZXh0ZXJuIHNzaXplX3QgdXNiQ29udHJvbFRyYW5zZmVyICgKKyAgVXNiRGV2aWNlICpkZXZpY2UsCisgIHVpbnQ4X3QgZGlyZWN0aW9uLAorICB1aW50OF90IHJlY2lwaWVudCwKKyAgdWludDhfdCB0eXBlLAorICB1aW50OF90IHJlcXVlc3QsCisgIHVpbnQxNl90IHZhbHVlLAorICB1aW50MTZfdCBpbmRleCwKKyAgdm9pZCAqYnVmZmVyLAorICB1aW50MTZfdCBsZW5ndGgsCisgIGludCB0aW1lb3V0CispOworCitleHRlcm4gaW50IHVzYlJlYWREZXZpY2VEZXNjcmlwdG9yIChVc2JEZXZpY2UgKmRldmljZSk7CitleHRlcm4gaW50IHVzYkFsbG9jYXRlRW5kcG9pbnRFeHRlbnNpb24gKFVzYkVuZHBvaW50ICplbmRwb2ludCk7CitleHRlcm4gdm9pZCB1c2JEZWFsbG9jYXRlRW5kcG9pbnRFeHRlbnNpb24gKFVzYkVuZHBvaW50RXh0ZW5zaW9uICplcHR4KTsKK2V4dGVybiB2b2lkIHVzYkRlYWxsb2NhdGVEZXZpY2VFeHRlbnNpb24gKFVzYkRldmljZUV4dGVuc2lvbiAqZGV2eCk7CisKK2V4dGVybiB2b2lkIHVzYkxvZ1NldHVwUGFja2V0IChjb25zdCBVc2JTZXR1cFBhY2tldCAqc2V0dXApOworCitleHRlcm4gdm9pZCB1c2JNYWtlU2V0dXBQYWNrZXQgKAorICBVc2JTZXR1cFBhY2tldCAqc2V0dXAsCisgIHVpbnQ4X3QgZGlyZWN0aW9uLAorICB1aW50OF90IHJlY2lwaWVudCwKKyAgdWludDhfdCB0eXBlLAorICB1aW50OF90IHJlcXVlc3QsCisgIHVpbnQxNl90IHZhbHVlLAorICB1aW50MTZfdCBpbmRleCwKKyAgdWludDE2X3QgbGVuZ3RoCispOworCitleHRlcm4gdm9pZCB1c2JMb2dFbmRwb2ludERhdGEgKAorICBVc2JFbmRwb2ludCAqZW5kcG9pbnQsIGNvbnN0IGNoYXIgKmxhYmVsLAorICBjb25zdCB2b2lkICpkYXRhLCBzaXplX3Qgc2l6ZQorKTsKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYgLyogX19jcGx1c3BsdXMgKi8KKworI2VuZGlmIC8qIEJSTFRUWV9JTkNMVURFRF9VU0JfSU5URVJOQUwgKi8KZGlmZiAtLWdpdCBhL1Byb2dyYW1zL3VzYl9rZnJlZWJzZC5jIGIvUHJvZ3JhbXMvdXNiX2tmcmVlYnNkLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzA2M2VhZQotLS0gL2Rldi9udWxsCisrKyBiL1Byb2dyYW1zL3VzYl9rZnJlZWJzZC5jCkBAIC0wLDAgKzEsMzkgQEAKKy8qCisgKiBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorICogICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorICoKKyAqIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorICoKKyAqIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyAqLworCisjaW5jbHVkZSAicHJvbG9ndWUuaCIKKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxmY250bC5oPgorI2luY2x1ZGUgPHN5cy9pb2N0bC5oPgorI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgorCisjaWZkZWYgSEFWRV9MRUdBQ1lfREVWX1VTQl9VU0JfSAorI2luY2x1ZGUgPGxlZ2FjeS9kZXYvdXNiL3VzYi5oPgorI2Vsc2UgLyogSEFWRV9MRUdBQ1lfREVWX1VTQl9VU0JfSCAqLworI2luY2x1ZGUgPGRldi91c2IvdXNiLmg+CisjZW5kaWYgLyogSEFWRV9MRUdBQ1lfREVWX1VTQl9VU0JfSCAqLworCisjaW5jbHVkZSAiaW9fdXNiLmgiCisjaW5jbHVkZSAidXNiX2ludGVybmFsLmgiCisKKyNkZWZpbmUgVVNCX0NPTlRST0xfUEFUSF9GT1JNQVQgIi9kZXYvJXMiCisjZGVmaW5lIFVTQl9FTkRQT0lOVF9QQVRIX0ZPUk1BVCAiJS4qcy4lZCIKKyNpbmNsdWRlICJ1c2JfYnNkLmgiCmRpZmYgLS1naXQgYS9Qcm9ncmFtcy91c2JfbGlidXNiLTEuMC5jIGIvUHJvZ3JhbXMvdXNiX2xpYnVzYi0xLjAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMGI4Y2U5Ci0tLSAvZGV2L251bGwKKysrIGIvUHJvZ3JhbXMvdXNiX2xpYnVzYi0xLjAuYwpAQCAtMCwwICsxLDQ5NyBAQAorLyoKKyAqIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisgKiAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisgKgorICogQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKKyNpbmNsdWRlICJwcm9sb2d1ZS5oIgorCisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxsaWJ1c2IuaD4KKworI2luY2x1ZGUgImxvZy5oIgorI2luY2x1ZGUgImlvX3VzYi5oIgorI2luY2x1ZGUgInVzYl9pbnRlcm5hbC5oIgorI2luY2x1ZGUgImJpdGZpZWxkLmgiCisKK3N0cnVjdCBVc2JEZXZpY2VFeHRlbnNpb25TdHJ1Y3QgeworICBsaWJ1c2JfZGV2aWNlICpkZXZpY2U7CisgIGxpYnVzYl9kZXZpY2VfaGFuZGxlICpoYW5kbGU7Cit9OworCitzdGF0aWMgbGlidXNiX2NvbnRleHQgKnVzYkNvbnRleHQgPSBOVUxMOworc3RhdGljIGxpYnVzYl9kZXZpY2UgKip1c2JEZXZpY2VMaXN0ID0gTlVMTDsKK3N0YXRpYyBpbnQgdXNiRGV2aWNlQ291bnQgPSAwOworCitzdGF0aWMgaW50Cit1c2JUb0Vycm5vIChlbnVtIGxpYnVzYl9lcnJvciBlcnJvcikgeworICBzd2l0Y2ggKGVycm9yKSB7CisgICAgY2FzZSBMSUJVU0JfRVJST1JfSU86CisgICAgICByZXR1cm4gRUlPOworCisgICAgY2FzZSBMSUJVU0JfRVJST1JfSU5WQUxJRF9QQVJBTToKKyAgICAgIHJldHVybiBFSU5WQUw7CisKKyAgICBjYXNlIExJQlVTQl9FUlJPUl9BQ0NFU1M6CisgICAgICByZXR1cm4gRUFDQ0VTOworCisgICAgY2FzZSBMSUJVU0JfRVJST1JfTk9fREVWSUNFOgorICAgICAgcmV0dXJuIEVOT0RFVjsKKworICAgIGNhc2UgTElCVVNCX0VSUk9SX05PVF9GT1VORDoKKyAgICAgIHJldHVybiBFTk9FTlQ7CisKKyAgICBjYXNlIExJQlVTQl9FUlJPUl9CVVNZOgorICAgICAgcmV0dXJuIEVCVVNZOworCisgICAgY2FzZSBMSUJVU0JfRVJST1JfVElNRU9VVDoKKyAgICAgIHJldHVybiBFQUdBSU47CisKKyNpZmRlZiBFTVNHU0laRQorICAgIGNhc2UgTElCVVNCX0VSUk9SX09WRVJGTE9XOgorICAgICAgcmV0dXJuIEVNU0dTSVpFOworI2VuZGlmIC8qIEVNU0dTSVpFICovCisKKyAgICBjYXNlIExJQlVTQl9FUlJPUl9QSVBFOgorICAgICAgcmV0dXJuIEVQSVBFOworCisgICAgY2FzZSBMSUJVU0JfRVJST1JfSU5URVJSVVBURUQ6CisgICAgICByZXR1cm4gRUlOVFI7CisKKyAgICBjYXNlIExJQlVTQl9FUlJPUl9OT19NRU06CisgICAgICByZXR1cm4gRU5PTUVNOworCisgICAgY2FzZSBMSUJVU0JfRVJST1JfTk9UX1NVUFBPUlRFRDoKKyAgICAgIHJldHVybiBFTk9TWVM7CisKKyAgICBkZWZhdWx0OgorICAgICAgbG9nTWVzc2FnZShMT0dfQ0FURUdPUlkoVVNCX0lPKSwgInVuc3VwcG9ydGVkIGxpYnVzYjEgZXJyb3IgY29kZTogJWQiLCBlcnJvcik7CisgICAgY2FzZSBMSUJVU0JfRVJST1JfT1RIRVI6CisgICAgICByZXR1cm4gRUlPOworICB9Cit9CisKK3N0YXRpYyB2b2lkCit1c2JTZXRFcnJubyAoZW51bSBsaWJ1c2JfZXJyb3IgZXJyb3IsIGNvbnN0IGNoYXIgKmFjdGlvbikgeworICBlcnJubyA9IHVzYlRvRXJybm8oZXJyb3IpOworICBpZiAoYWN0aW9uKSBsb2dTeXN0ZW1FcnJvcihhY3Rpb24pOworfQorCitzdGF0aWMgaW50Cit1c2JHZXRIYW5kbGUgKFVzYkRldmljZUV4dGVuc2lvbiAqZGV2eCkgeworICBpZiAoIWRldngtPmhhbmRsZSkgeworICAgIGludCByZXN1bHQ7CisKKyAgICBpZiAoKHJlc3VsdCA9IGxpYnVzYl9vcGVuKGRldngtPmRldmljZSwgJmRldngtPmhhbmRsZSkpICE9IExJQlVTQl9TVUNDRVNTKSB7CisgICAgICB1c2JTZXRFcnJubyhyZXN1bHQsICJsaWJ1c2Jfb3BlbiIpOworICAgICAgcmV0dXJuIDA7CisgICAgfQorICB9CisKKyAgcmV0dXJuIDE7Cit9CisKK2ludAordXNiRGlzYWJsZUF1dG9zdXNwZW5kIChVc2JEZXZpY2UgKmRldmljZSkgeworICBsb2dVbnN1cHBvcnRlZEZ1bmN0aW9uKCk7CisgIHJldHVybiAwOworfQorCitpbnQKK3VzYlNldENvbmZpZ3VyYXRpb24gKFVzYkRldmljZSAqZGV2aWNlLCB1bnNpZ25lZCBjaGFyIGNvbmZpZ3VyYXRpb24pIHsKKyAgVXNiRGV2aWNlRXh0ZW5zaW9uICpkZXZ4ID0gZGV2aWNlLT5leHRlbnNpb247CisKKyAgaWYgKHVzYkdldEhhbmRsZShkZXZ4KSkgeworICAgIGludCByZXN1bHQ7CisKKyAgICBsb2dNZXNzYWdlKExPR19DQVRFR09SWShVU0JfSU8pLCAic2V0dGluZyBjb25maWd1cmF0aW9uOiAldSIsIGNvbmZpZ3VyYXRpb24pOworICAgIHJlc3VsdCA9IGxpYnVzYl9zZXRfY29uZmlndXJhdGlvbihkZXZ4LT5oYW5kbGUsIGNvbmZpZ3VyYXRpb24pOworICAgIGlmIChyZXN1bHQgPT0gTElCVVNCX1NVQ0NFU1MpIHJldHVybiAxOworICAgIHVzYlNldEVycm5vKHJlc3VsdCwgImxpYnVzYl9zZXRfY29uZmlndXJhdGlvbiIpOworICB9CisKKyAgcmV0dXJuIDA7Cit9CisKK2ludAordXNiQ2xhaW1JbnRlcmZhY2UgKFVzYkRldmljZSAqZGV2aWNlLCB1bnNpZ25lZCBjaGFyIGludGVyZmFjZSkgeworICBVc2JEZXZpY2VFeHRlbnNpb24gKmRldnggPSBkZXZpY2UtPmV4dGVuc2lvbjsKKworICBpZiAodXNiR2V0SGFuZGxlKGRldngpKSB7CisgICAgaW50IGRldGFjaGVkID0gMDsKKyAgICBpbnQgcmVzdWx0OworCisgICAgbG9nTWVzc2FnZShMT0dfQ0FURUdPUlkoVVNCX0lPKSwgImNsYWltaW5nIGludGVyZmFjZTogJXUiLCBpbnRlcmZhY2UpOworCisgICAgd2hpbGUgKDEpIHsKKyAgICAgIHJlc3VsdCA9IGxpYnVzYl9jbGFpbV9pbnRlcmZhY2UoZGV2eC0+aGFuZGxlLCBpbnRlcmZhY2UpOworICAgICAgaWYgKHJlc3VsdCA9PSBMSUJVU0JfU1VDQ0VTUykgcmV0dXJuIDE7CisKKyAgICAgIGlmIChyZXN1bHQgIT0gTElCVVNCX0VSUk9SX0JVU1kpICBicmVhazsKKyAgICAgIGlmIChkZXRhY2hlZCkgYnJlYWs7CisKKyAgICAgIGxvZ01lc3NhZ2UoTE9HX1dBUk5JTkcsICJVU0IgaW50ZXJmYWNlIGluIHVzZTogJXUiLCBpbnRlcmZhY2UpOworICAgICAgcmVzdWx0ID0gbGlidXNiX2RldGFjaF9rZXJuZWxfZHJpdmVyKGRldngtPmhhbmRsZSwgaW50ZXJmYWNlKTsKKworICAgICAgaWYgKHJlc3VsdCA9PSBMSUJVU0JfU1VDQ0VTUykgeworICAgICAgICBsb2dNZXNzYWdlKExPR19XQVJOSU5HLCAiVVNCIGludGVyZmFjZSBkZXRhY2hlZDogJXUiLCBpbnRlcmZhY2UpOworICAgICAgICBkZXRhY2hlZCA9IDE7CisgICAgICAgIGNvbnRpbnVlOworICAgICAgfQorCisgICAgICByZXN1bHQgPSBMSUJVU0JfRVJST1JfQlVTWTsKKyAgICAgIGJyZWFrOworICAgIH0KKworICAgIHVzYlNldEVycm5vKHJlc3VsdCwgImxpYnVzYl9jbGFpbV9pbnRlcmZhY2UiKTsKKyAgfQorCisgIHJldHVybiAwOworfQorCitpbnQKK3VzYlJlbGVhc2VJbnRlcmZhY2UgKFVzYkRldmljZSAqZGV2aWNlLCB1bnNpZ25lZCBjaGFyIGludGVyZmFjZSkgeworICBVc2JEZXZpY2VFeHRlbnNpb24gKmRldnggPSBkZXZpY2UtPmV4dGVuc2lvbjsKKworICBpZiAodXNiR2V0SGFuZGxlKGRldngpKSB7CisgICAgaW50IHJlc3VsdDsKKworICAgIGxvZ01lc3NhZ2UoTE9HX0NBVEVHT1JZKFVTQl9JTyksICJyZWxlYXNpbmcgaW50ZXJmYWNlOiAldSIsIGludGVyZmFjZSk7CisgICAgcmVzdWx0ID0gbGlidXNiX3JlbGVhc2VfaW50ZXJmYWNlKGRldngtPmhhbmRsZSwgaW50ZXJmYWNlKTsKKyAgICBpZiAocmVzdWx0ID09IExJQlVTQl9TVUNDRVNTKSByZXR1cm4gMTsKKyAgICB1c2JTZXRFcnJubyhyZXN1bHQsICJsaWJ1c2JfcmVsZWFzZV9pbnRlcmZhY2UiKTsKKyAgfQorCisgIHJldHVybiAwOworfQorCitpbnQKK3VzYlNldEFsdGVybmF0aXZlICgKKyAgVXNiRGV2aWNlICpkZXZpY2UsCisgIHVuc2lnbmVkIGNoYXIgaW50ZXJmYWNlLAorICB1bnNpZ25lZCBjaGFyIGFsdGVybmF0aXZlCispIHsKKyAgVXNiRGV2aWNlRXh0ZW5zaW9uICpkZXZ4ID0gZGV2aWNlLT5leHRlbnNpb247CisKKyAgaWYgKHVzYkdldEhhbmRsZShkZXZ4KSkgeworICAgIGludCByZXN1bHQ7CisKKyAgICBsb2dNZXNzYWdlKExPR19DQVRFR09SWShVU0JfSU8pLCAic2V0dGluZyBhbHRlcm5hdGl2ZTogJXVbJXVdIiwgaW50ZXJmYWNlLCBhbHRlcm5hdGl2ZSk7CisgICAgcmVzdWx0ID0gbGlidXNiX3NldF9pbnRlcmZhY2VfYWx0X3NldHRpbmcoZGV2eC0+aGFuZGxlLCBpbnRlcmZhY2UsIGFsdGVybmF0aXZlKTsKKyAgICBpZiAocmVzdWx0ID09IExJQlVTQl9TVUNDRVNTKSByZXR1cm4gMTsKKyAgICB1c2JTZXRFcnJubyhyZXN1bHQsICJsaWJ1c2Jfc2V0X2ludGVyZmFjZV9hbHRfc2V0dGluZyIpOworICB9CisKKyAgcmV0dXJuIDA7Cit9CisKK2ludAordXNiUmVzZXREZXZpY2UgKFVzYkRldmljZSAqZGV2aWNlKSB7CisgIFVzYkRldmljZUV4dGVuc2lvbiAqZGV2eCA9IGRldmljZS0+ZXh0ZW5zaW9uOworCisgIGlmICh1c2JHZXRIYW5kbGUoZGV2eCkpIHsKKyAgICBsb2dNZXNzYWdlKExPR19DQVRFR09SWShVU0JfSU8pLCAicmVzZXQgZGV2aWNlIik7CisgICAgaW50IHJlc3VsdCA9IGxpYnVzYl9yZXNldF9kZXZpY2UoZGV2eC0+aGFuZGxlKTsKKyAgICBpZiAocmVzdWx0ID09IExJQlVTQl9TVUNDRVNTKSByZXR1cm4gMTsKKyAgICB1c2JTZXRFcnJubyhyZXN1bHQsICJsaWJ1c2JfcmVzZXRfZGV2aWNlIik7CisgIH0KKworICByZXR1cm4gMDsKK30KKworaW50Cit1c2JDbGVhckhhbHQgKFVzYkRldmljZSAqZGV2aWNlLCB1bnNpZ25lZCBjaGFyIGVuZHBvaW50QWRkcmVzcykgeworICBVc2JEZXZpY2VFeHRlbnNpb24gKmRldnggPSBkZXZpY2UtPmV4dGVuc2lvbjsKKworICBpZiAodXNiR2V0SGFuZGxlKGRldngpKSB7CisgICAgbG9nTWVzc2FnZShMT0dfQ0FURUdPUlkoVVNCX0lPKSwgImNsZWFyIGhhbHQ6ICUwMlgiLCBlbmRwb2ludEFkZHJlc3MpOworICAgIGludCByZXN1bHQgPSBsaWJ1c2JfY2xlYXJfaGFsdChkZXZ4LT5oYW5kbGUsIGVuZHBvaW50QWRkcmVzcyk7CisgICAgaWYgKHJlc3VsdCA9PSBMSUJVU0JfU1VDQ0VTUykgcmV0dXJuIDE7CisgICAgdXNiU2V0RXJybm8ocmVzdWx0LCAibGlidXNiX2NsZWFyX2hhbHQiKTsKKyAgfQorCisgIHJldHVybiAwOworfQorCitzc2l6ZV90Cit1c2JDb250cm9sVHJhbnNmZXIgKAorICBVc2JEZXZpY2UgKmRldmljZSwKKyAgdWludDhfdCBkaXJlY3Rpb24sCisgIHVpbnQ4X3QgcmVjaXBpZW50LAorICB1aW50OF90IHR5cGUsCisgIHVpbnQ4X3QgcmVxdWVzdCwKKyAgdWludDE2X3QgdmFsdWUsCisgIHVpbnQxNl90IGluZGV4LAorICB2b2lkICpidWZmZXIsCisgIHVpbnQxNl90IGxlbmd0aCwKKyAgaW50IHRpbWVvdXQKKykgeworICBVc2JEZXZpY2VFeHRlbnNpb24gKmRldnggPSBkZXZpY2UtPmV4dGVuc2lvbjsKKworICBpZiAodXNiR2V0SGFuZGxlKGRldngpKSB7CisgICAgVXNiU2V0dXBQYWNrZXQgc2V0dXA7CisgICAgaW50IHJlc3VsdDsKKworICAgIHVzYk1ha2VTZXR1cFBhY2tldCgmc2V0dXAsIGRpcmVjdGlvbiwgcmVjaXBpZW50LCB0eXBlLCByZXF1ZXN0LCB2YWx1ZSwgaW5kZXgsIGxlbmd0aCk7CisKKyAgICBpZiAoZGlyZWN0aW9uID09IFVzYkNvbnRyb2xEaXJlY3Rpb25fT3V0cHV0KSB7CisgICAgICBpZiAobGVuZ3RoKSBsb2dCeXRlcyhMT0dfQ0FURUdPUlkoVVNCX0lPKSwgImNvbnRyb2wgb3V0cHV0IiwgYnVmZmVyLCBsZW5ndGgpOworICAgIH0KKworICAgIHJlc3VsdCA9IGxpYnVzYl9jb250cm9sX3RyYW5zZmVyKGRldngtPmhhbmRsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXR1cC5iUmVxdWVzdFR5cGUsIHNldHVwLmJSZXF1ZXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldExpdHRsZUVuZGlhbjE2KHNldHVwLndWYWx1ZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0TGl0dGxlRW5kaWFuMTYoc2V0dXAud0luZGV4KSwgYnVmZmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldExpdHRsZUVuZGlhbjE2KHNldHVwLndMZW5ndGgpLCB0aW1lb3V0KTsKKworICAgIGlmIChyZXN1bHQgPj0gMCkgeworICAgICAgaWYgKGRpcmVjdGlvbiA9PSBVc2JDb250cm9sRGlyZWN0aW9uX0lucHV0KSB7CisgICAgICAgIGxvZ0J5dGVzKExPR19DQVRFR09SWShVU0JfSU8pLCAiY29udHJvbCBpbnB1dCIsIGJ1ZmZlciwgcmVzdWx0KTsKKyAgICAgIH0KKworICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICB1c2JTZXRFcnJubyhyZXN1bHQsICIiKTsKKyAgfQorCisgIHJldHVybiAtMTsKK30KKwordm9pZCAqCit1c2JTdWJtaXRSZXF1ZXN0ICgKKyAgVXNiRGV2aWNlICpkZXZpY2UsCisgIHVuc2lnbmVkIGNoYXIgZW5kcG9pbnRBZGRyZXNzLAorICB2b2lkICpidWZmZXIsCisgIHNpemVfdCBsZW5ndGgsCisgIHZvaWQgKmNvbnRleHQKKykgeworICBsb2dVbnN1cHBvcnRlZEZ1bmN0aW9uKCk7CisgIHJldHVybiBOVUxMOworfQorCitpbnQKK3VzYkNhbmNlbFJlcXVlc3QgKFVzYkRldmljZSAqZGV2aWNlLCB2b2lkICpyZXF1ZXN0KSB7CisgIGxvZ1Vuc3VwcG9ydGVkRnVuY3Rpb24oKTsKKyAgcmV0dXJuIDA7Cit9CisKK3ZvaWQgKgordXNiUmVhcFJlc3BvbnNlICgKKyAgVXNiRGV2aWNlICpkZXZpY2UsCisgIHVuc2lnbmVkIGNoYXIgZW5kcG9pbnRBZGRyZXNzLAorICBVc2JSZXNwb25zZSAqcmVzcG9uc2UsCisgIGludCB3YWl0CispIHsKKyAgbG9nVW5zdXBwb3J0ZWRGdW5jdGlvbigpOworICByZXR1cm4gTlVMTDsKK30KKworaW50Cit1c2JNb25pdG9ySW5wdXRFbmRwb2ludCAoCisgIFVzYkRldmljZSAqZGV2aWNlLCB1bnNpZ25lZCBjaGFyIGVuZHBvaW50TnVtYmVyLAorICBBc3luY01vbml0b3JDYWxsYmFjayAqY2FsbGJhY2ssIHZvaWQgKmRhdGEKKykgeworICByZXR1cm4gMDsKK30KKworc3NpemVfdAordXNiUmVhZEVuZHBvaW50ICgKKyAgVXNiRGV2aWNlICpkZXZpY2UsCisgIHVuc2lnbmVkIGNoYXIgZW5kcG9pbnROdW1iZXIsCisgIHZvaWQgKmJ1ZmZlciwKKyAgc2l6ZV90IGxlbmd0aCwKKyAgaW50IHRpbWVvdXQKKykgeworICBVc2JEZXZpY2VFeHRlbnNpb24gKmRldnggPSBkZXZpY2UtPmV4dGVuc2lvbjsKKworICBpZiAodXNiR2V0SGFuZGxlKGRldngpKSB7CisgICAgVXNiRW5kcG9pbnQgKmVuZHBvaW50OworCisgICAgaWYgKChlbmRwb2ludCA9IHVzYkdldElucHV0RW5kcG9pbnQoZGV2aWNlLCBlbmRwb2ludE51bWJlcikpKSB7CisgICAgICBjb25zdCBVc2JFbmRwb2ludERlc2NyaXB0b3IgKmRlc2NyaXB0b3IgPSBlbmRwb2ludC0+ZGVzY3JpcHRvcjsKKyAgICAgIFVzYkVuZHBvaW50VHJhbnNmZXIgdHJhbnNmZXIgPSBVU0JfRU5EUE9JTlRfVFJBTlNGRVIoZGVzY3JpcHRvcik7CisgICAgICBpbnQgYWN0dWFsX2xlbmd0aDsKKyAgICAgIGludCByZXN1bHQ7CisKKyAgICAgIHN3aXRjaCAodHJhbnNmZXIpIHsKKyAgICAgICAgY2FzZSBVc2JFbmRwb2ludFRyYW5zZmVyX0J1bGs6CisgICAgICAgICAgcmVzdWx0ID0gbGlidXNiX2J1bGtfdHJhbnNmZXIoZGV2eC0+aGFuZGxlLCBkZXNjcmlwdG9yLT5iRW5kcG9pbnRBZGRyZXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlciwgbGVuZ3RoLCAmYWN0dWFsX2xlbmd0aCwgdGltZW91dCk7CisgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBVc2JFbmRwb2ludFRyYW5zZmVyX0ludGVycnVwdDoKKyAgICAgICAgICByZXN1bHQgPSBsaWJ1c2JfaW50ZXJydXB0X3RyYW5zZmVyKGRldngtPmhhbmRsZSwgZGVzY3JpcHRvci0+YkVuZHBvaW50QWRkcmVzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlciwgbGVuZ3RoLCAmYWN0dWFsX2xlbmd0aCwgdGltZW91dCk7CisgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICBsb2dNZXNzYWdlKExPR19FUlIsICJVU0IgZW5kcG9pbnQgaW5wdXQgdHJhbnNmZXIgbm90IHN1cHBvcnRlZDogMFglMDJYIiwgdHJhbnNmZXIpOworICAgICAgICAgIHJlc3VsdCA9IExJQlVTQl9FUlJPUl9OT1RfU1VQUE9SVEVEOworICAgICAgICAgIGJyZWFrOworICAgICAgfQorCisgICAgICBpZiAocmVzdWx0ID09IExJQlVTQl9TVUNDRVNTKSB7CisgICAgICAgIHNzaXplX3QgY291bnQgPSBhY3R1YWxfbGVuZ3RoOworCisgICAgICAgIGlmICh1c2JBcHBseUlucHV0RmlsdGVycyhlbmRwb2ludCwgYnVmZmVyLCBsZW5ndGgsICZjb3VudCkpIHJldHVybiBjb3VudDsKKyAgICAgICAgcmVzdWx0ID0gTElCVVNCX0VSUk9SX0lPOworICAgICAgfQorCisgICAgICB1c2JTZXRFcnJubyhyZXN1bHQsIE5VTEwpOworICAgIH0KKyAgfQorCisgIGlmIChlcnJubyAhPSBFQUdBSU4pIGxvZ1N5c3RlbUVycm9yKCJVU0IgZW5kcG9pbnQgcmVhZCIpOworICByZXR1cm4gLTE7Cit9CisKK3NzaXplX3QKK3VzYldyaXRlRW5kcG9pbnQgKAorICBVc2JEZXZpY2UgKmRldmljZSwKKyAgdW5zaWduZWQgY2hhciBlbmRwb2ludE51bWJlciwKKyAgY29uc3Qgdm9pZCAqYnVmZmVyLAorICBzaXplX3QgbGVuZ3RoLAorICBpbnQgdGltZW91dAorKSB7CisgIFVzYkRldmljZUV4dGVuc2lvbiAqZGV2eCA9IGRldmljZS0+ZXh0ZW5zaW9uOworCisgIGlmICh1c2JHZXRIYW5kbGUoZGV2eCkpIHsKKyAgICBVc2JFbmRwb2ludCAqZW5kcG9pbnQ7CisKKyAgICBpZiAoKGVuZHBvaW50ID0gdXNiR2V0T3V0cHV0RW5kcG9pbnQoZGV2aWNlLCBlbmRwb2ludE51bWJlcikpKSB7CisgICAgICBjb25zdCBVc2JFbmRwb2ludERlc2NyaXB0b3IgKmRlc2NyaXB0b3IgPSBlbmRwb2ludC0+ZGVzY3JpcHRvcjsKKyAgICAgIFVzYkVuZHBvaW50VHJhbnNmZXIgdHJhbnNmZXIgPSBVU0JfRU5EUE9JTlRfVFJBTlNGRVIoZGVzY3JpcHRvcik7CisgICAgICBpbnQgYWN0dWFsX2xlbmd0aDsKKyAgICAgIGludCByZXN1bHQ7CisKKyAgICAgIHN3aXRjaCAodHJhbnNmZXIpIHsKKyAgICAgICAgY2FzZSBVc2JFbmRwb2ludFRyYW5zZmVyX0J1bGs6CisgICAgICAgICAgcmVzdWx0ID0gbGlidXNiX2J1bGtfdHJhbnNmZXIoZGV2eC0+aGFuZGxlLCBkZXNjcmlwdG9yLT5iRW5kcG9pbnRBZGRyZXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2b2lkICopYnVmZmVyLCBsZW5ndGgsICZhY3R1YWxfbGVuZ3RoLCB0aW1lb3V0KTsKKyAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIFVzYkVuZHBvaW50VHJhbnNmZXJfSW50ZXJydXB0OgorICAgICAgICAgIHJlc3VsdCA9IGxpYnVzYl9pbnRlcnJ1cHRfdHJhbnNmZXIoZGV2eC0+aGFuZGxlLCBkZXNjcmlwdG9yLT5iRW5kcG9pbnRBZGRyZXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQgKilidWZmZXIsIGxlbmd0aCwgJmFjdHVhbF9sZW5ndGgsIHRpbWVvdXQpOworICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgbG9nTWVzc2FnZShMT0dfRVJSLCAiVVNCIGVuZHBvaW50IG91dHB1dCB0cmFuc2ZlciBub3Qgc3VwcG9ydGVkOiAwWCUwMlgiLCB0cmFuc2Zlcik7CisgICAgICAgICAgcmVzdWx0ID0gTElCVVNCX0VSUk9SX05PVF9TVVBQT1JURUQ7CisgICAgICAgICAgYnJlYWs7CisgICAgICB9CisKKyAgICAgIGlmIChyZXN1bHQgPT0gTElCVVNCX1NVQ0NFU1MpIHJldHVybiBhY3R1YWxfbGVuZ3RoOworICAgICAgdXNiU2V0RXJybm8ocmVzdWx0LCBOVUxMKTsKKyAgICB9CisgIH0KKworICBsb2dTeXN0ZW1FcnJvcigiVVNCIGVuZHBvaW50IHdyaXRlIik7CisgIHJldHVybiAtMTsKK30KKworaW50Cit1c2JSZWFkRGV2aWNlRGVzY3JpcHRvciAoVXNiRGV2aWNlICpkZXZpY2UpIHsKKyAgVXNiRGV2aWNlRXh0ZW5zaW9uICpkZXZ4ID0gZGV2aWNlLT5leHRlbnNpb247CisgIHN0cnVjdCBsaWJ1c2JfZGV2aWNlX2Rlc2NyaXB0b3IgZGVzY3JpcHRvcjsKKyAgaW50IHJlc3VsdDsKKworICBpZiAoKHJlc3VsdCA9IGxpYnVzYl9nZXRfZGV2aWNlX2Rlc2NyaXB0b3IoZGV2eC0+ZGV2aWNlLCAmZGVzY3JpcHRvcikpID09IExJQlVTQl9TVUNDRVNTKSB7CisgICAgbWVtY3B5KCZkZXZpY2UtPmRlc2NyaXB0b3IsICZkZXNjcmlwdG9yLCBVc2JEZXNjcmlwdG9yU2l6ZV9EZXZpY2UpOworICAgIHJldHVybiAxOworICB9IGVsc2UgeworICAgIHVzYlNldEVycm5vKHJlc3VsdCwgImxpYnVzYl9nZXRfZGV2aWNlX2Rlc2NyaXB0b3IiKTsKKyAgfQorCisgIHJldHVybiAwOworfQorCitpbnQKK3VzYkFsbG9jYXRlRW5kcG9pbnRFeHRlbnNpb24gKFVzYkVuZHBvaW50ICplbmRwb2ludCkgeworICByZXR1cm4gMTsKK30KKwordm9pZAordXNiRGVhbGxvY2F0ZUVuZHBvaW50RXh0ZW5zaW9uIChVc2JFbmRwb2ludEV4dGVuc2lvbiAqZXB0eCkgeworfQorCit2b2lkCit1c2JEZWFsbG9jYXRlRGV2aWNlRXh0ZW5zaW9uIChVc2JEZXZpY2VFeHRlbnNpb24gKmRldngpIHsKKyAgaWYgKGRldngtPmhhbmRsZSkgbGlidXNiX2Nsb3NlKGRldngtPmhhbmRsZSk7CisgIGxpYnVzYl91bnJlZl9kZXZpY2UoZGV2eC0+ZGV2aWNlKTsKKyAgZnJlZShkZXZ4KTsKK30KKworVXNiRGV2aWNlICoKK3VzYkZpbmREZXZpY2UgKFVzYkRldmljZUNob29zZXIgKmNob29zZXIsIFVzYkNob29zZUNoYW5uZWxEYXRhICpkYXRhKSB7CisgIGludCByZXN1bHQ7CisgIFVzYkRldmljZUV4dGVuc2lvbiAqZGV2eDsKKworICBpZiAoIXVzYkNvbnRleHQpIHsKKyAgICBpZiAoKHJlc3VsdCA9IGxpYnVzYl9pbml0KCZ1c2JDb250ZXh0KSkgIT0gTElCVVNCX1NVQ0NFU1MpIHsKKyAgICAgIHVzYlNldEVycm5vKHJlc3VsdCwgImxpYnVzYl9pbml0Iik7CisgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgIH0KKworICBpZiAoIXVzYkRldmljZUxpc3QpIHsKKyAgICBzc2l6ZV90IGNvdW50OworCisgICAgaWYgKChjb3VudCA9IGxpYnVzYl9nZXRfZGV2aWNlX2xpc3QodXNiQ29udGV4dCwgJnVzYkRldmljZUxpc3QpKSA8IDApIHsKKyAgICAgIHVzYlNldEVycm5vKGNvdW50LCAibGlidXNiX2dldF9kZXZpY2VfbGlzdCIpOworICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgdXNiRGV2aWNlQ291bnQgPSBjb3VudDsKKyAgfQorCisgIGlmICgoZGV2eCA9IG1hbGxvYyhzaXplb2YoKmRldngpKSkpIHsKKyAgICBsaWJ1c2JfZGV2aWNlICoqbGlidXNiRGV2aWNlID0gdXNiRGV2aWNlTGlzdDsKKyAgICBpbnQgZGV2aWNlQ291bnQgPSB1c2JEZXZpY2VDb3VudDsKKworICAgIHdoaWxlIChkZXZpY2VDb3VudCkgeworICAgICAgZGV2aWNlQ291bnQgLT0gMTsKKyAgICAgIGRldngtPmRldmljZSA9ICpsaWJ1c2JEZXZpY2UrKzsKKyAgICAgIGxpYnVzYl9yZWZfZGV2aWNlKGRldngtPmRldmljZSk7CisKKyAgICAgIGRldngtPmhhbmRsZSA9IE5VTEw7CisKKyAgICAgIHsKKyAgICAgICAgVXNiRGV2aWNlICpkZXZpY2UgPSB1c2JUZXN0RGV2aWNlKGRldngsIGNob29zZXIsIGRhdGEpOworICAgICAgICBpZiAoZGV2aWNlKSByZXR1cm4gZGV2aWNlOworICAgICAgfQorCisgICAgICBsaWJ1c2JfdW5yZWZfZGV2aWNlKGRldngtPmRldmljZSk7CisgICAgfQorCisgICAgZnJlZShkZXZ4KTsKKyAgfSBlbHNlIHsKKyAgICBsb2dNYWxsb2NFcnJvcigpOworICB9CisKKyAgcmV0dXJuIE5VTEw7Cit9CisKK3ZvaWQKK3VzYkZvcmdldERldmljZXMgKHZvaWQpIHsKKyAgaWYgKHVzYkRldmljZUxpc3QpIHsKKyAgICBsaWJ1c2JfZnJlZV9kZXZpY2VfbGlzdCh1c2JEZXZpY2VMaXN0LCAxKTsKKyAgICB1c2JEZXZpY2VMaXN0ID0gTlVMTDsKKyAgfQorCisgIHVzYkRldmljZUNvdW50ID0gMDsKK30KZGlmZiAtLWdpdCBhL1Byb2dyYW1zL3VzYl9saWJ1c2IuYyBiL1Byb2dyYW1zL3VzYl9saWJ1c2IuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYWE0ZDMzCi0tLSAvZGV2L251bGwKKysrIGIvUHJvZ3JhbXMvdXNiX2xpYnVzYi5jCkBAIC0wLDAgKzEsNDQyIEBACisvKgorICogQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyAqICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyAqCisgKiBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorICoKKyAqIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyAqCisgKiBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisgKi8KKworI2luY2x1ZGUgInByb2xvZ3VlLmgiCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8dXNiLmg+CisKKyNpbmNsdWRlICJsb2cuaCIKKyNpbmNsdWRlICJpb191c2IuaCIKKyNpbmNsdWRlICJ1c2JfaW50ZXJuYWwuaCIKKyNpbmNsdWRlICJiaXRmaWVsZC5oIgorCisjaWZkZWYgX19NSU5HVzMyX18KKyNpZm5kZWYgRVRJTUVET1VUCisjZGVmaW5lIEVUSU1FRE9VVCAxMTYKKyNlbmRpZiAvKiBFVElNRURPVVQgKi8KKyNlbmRpZiAvKiBfX01JTkdXMzJfXyAqLworCitzdHJ1Y3QgVXNiRGV2aWNlRXh0ZW5zaW9uU3RydWN0IHsKKyAgc3RydWN0IHVzYl9kZXZfaGFuZGxlICpoYW5kbGU7Cit9OworCitpbnQKK3VzYkRpc2FibGVBdXRvc3VzcGVuZCAoVXNiRGV2aWNlICpkZXZpY2UpIHsKKyAgbG9nVW5zdXBwb3J0ZWRGdW5jdGlvbigpOworICByZXR1cm4gMDsKK30KKworaW50Cit1c2JTZXRDb25maWd1cmF0aW9uIChVc2JEZXZpY2UgKmRldmljZSwgdW5zaWduZWQgY2hhciBjb25maWd1cmF0aW9uKSB7CisgIFVzYkRldmljZUV4dGVuc2lvbiAqZGV2eCA9IGRldmljZS0+ZXh0ZW5zaW9uOworICBpbnQgcmVzdWx0OworCisgIGxvZ01lc3NhZ2UoTE9HX0NBVEVHT1JZKFVTQl9JTyksICJzZXR0aW5nIGNvbmZpZ3VyYXRpb246ICV1IiwgY29uZmlndXJhdGlvbik7CisgIHJlc3VsdCA9IHVzYl9zZXRfY29uZmlndXJhdGlvbihkZXZ4LT5oYW5kbGUsIGNvbmZpZ3VyYXRpb24pOworICBpZiAocmVzdWx0ID49IDApIHJldHVybiAxOworCisgIGVycm5vID0gLXJlc3VsdDsKKyAgbG9nU3lzdGVtRXJyb3IoIlVTQiBjb25maWd1cmF0aW9uIHNldCIpOworICByZXR1cm4gMDsKK30KKworaW50Cit1c2JDbGFpbUludGVyZmFjZSAoVXNiRGV2aWNlICpkZXZpY2UsIHVuc2lnbmVkIGNoYXIgaW50ZXJmYWNlKSB7CisgIFVzYkRldmljZUV4dGVuc2lvbiAqZGV2eCA9IGRldmljZS0+ZXh0ZW5zaW9uOworICBpbnQgZGV0YWNoZWQgPSAwOworICBpbnQgcmVzdWx0OworCisgIGxvZ01lc3NhZ2UoTE9HX0NBVEVHT1JZKFVTQl9JTyksICJjbGFpbWluZyBpbnRlcmZhY2U6ICV1IiwgaW50ZXJmYWNlKTsKKworICB3aGlsZSAoMSkgeworICAgIGNoYXIgZHJpdmVyWzBYMTAwXTsKKworICAgIHJlc3VsdCA9IHVzYl9jbGFpbV9pbnRlcmZhY2UoZGV2eC0+aGFuZGxlLCBpbnRlcmZhY2UpOworICAgIGlmIChyZXN1bHQgPj0gMCkgcmV0dXJuIDE7CisKKyAgICBpZiAocmVzdWx0ICE9IC1FQlVTWSkgYnJlYWs7CisgICAgaWYgKGRldGFjaGVkKSBicmVhazsKKworI2lmZGVmIExJQlVTQl9IQVNfR0VUX0RSSVZFUl9OUAorICAgIHJlc3VsdCA9IHVzYl9nZXRfZHJpdmVyX25wKGRldngtPmhhbmRsZSwgaW50ZXJmYWNlLCBkcml2ZXIsIHNpemVvZihkcml2ZXIpKTsKKworICAgIGlmIChyZXN1bHQgPCAwKQorI2VuZGlmIC8qIExJQlVTQl9IQVNfR0VUX0RSSVZFUl9OUCAqLworCisgICAgeworICAgICAgc3RyY3B5KGRyaXZlciwgInVua25vd24iKTsKKyAgICB9CisKKyAgICBsb2dNZXNzYWdlKExPR19XQVJOSU5HLCAiVVNCIGludGVyZmFjZSBpbiB1c2U6ICV1ICglcykiLCBpbnRlcmZhY2UsIGRyaXZlcik7CisKKyAgICBpZiAoc3RyY21wKGRyaXZlciwgInVzYmZzIikgPT0gMCkgeworICAgICAgcmVzdWx0ID0gLUVCVVNZOworICAgICAgYnJlYWs7CisgICAgfQorCisjaWZkZWYgTElCVVNCX0hBU19ERVRBQ0hfS0VSTkVMX0RSSVZFUl9OUAorICAgIGxvZ01lc3NhZ2UoTE9HX0NBVEVHT1JZKFVTQl9JTyksICJkZXRhY2hpbmcga2VybmVsIGRyaXZlcjogJXUgKCVzKSIsCisgICAgICAgICAgICAgICBpbnRlcmZhY2UsIGRyaXZlcik7CisKKyAgICByZXN1bHQgPSB1c2JfZGV0YWNoX2tlcm5lbF9kcml2ZXJfbnAoZGV2eC0+aGFuZGxlLCBpbnRlcmZhY2UpOworCisgICAgaWYgKHJlc3VsdCA+PSAwKSB7CisgICAgICBsb2dNZXNzYWdlKExPR19DQVRFR09SWShVU0JfSU8pLCAiZGV0YWNoZWQga2VybmVsIGRyaXZlcjogJXUgKCVzKSIsCisgICAgICAgICAgICAgICAgIGludGVyZmFjZSwgZHJpdmVyKTsKKworICAgICAgZGV0YWNoZWQgPSAxOworICAgICAgY29udGludWU7CisgICAgfQorCisgICAgcmVzdWx0ID0gLUVCVVNZOworI2VuZGlmIC8qIExJQlVTQl9IQVNfREVUQUNIX0tFUk5FTF9EUklWRVJfTlAgKi8KKworICAgIGJyZWFrOworICB9CisKKyAgZXJybm8gPSAtcmVzdWx0OworICBsb2dTeXN0ZW1FcnJvcigiVVNCIGludGVyZmFjZSBjbGFpbSIpOworICByZXR1cm4gMDsKK30KKworaW50Cit1c2JSZWxlYXNlSW50ZXJmYWNlIChVc2JEZXZpY2UgKmRldmljZSwgdW5zaWduZWQgY2hhciBpbnRlcmZhY2UpIHsKKyAgVXNiRGV2aWNlRXh0ZW5zaW9uICpkZXZ4ID0gZGV2aWNlLT5leHRlbnNpb247CisgIGludCByZXN1bHQ7CisKKyAgbG9nTWVzc2FnZShMT0dfQ0FURUdPUlkoVVNCX0lPKSwgInJlbGVhc2luZyBpbnRlcmZhY2U6ICV1IiwgaW50ZXJmYWNlKTsKKyAgcmVzdWx0ID0gdXNiX3JlbGVhc2VfaW50ZXJmYWNlKGRldngtPmhhbmRsZSwgaW50ZXJmYWNlKTsKKyAgaWYgKHJlc3VsdCA+PSAwKSByZXR1cm4gMTsKKworICBlcnJubyA9IC1yZXN1bHQ7CisgIGxvZ1N5c3RlbUVycm9yKCJVU0IgaW50ZXJmYWNlIHJlbGVhc2UiKTsKKyAgcmV0dXJuIDA7Cit9CisKK2ludAordXNiU2V0QWx0ZXJuYXRpdmUgKAorICBVc2JEZXZpY2UgKmRldmljZSwKKyAgdW5zaWduZWQgY2hhciBpbnRlcmZhY2UsCisgIHVuc2lnbmVkIGNoYXIgYWx0ZXJuYXRpdmUKKykgeworICBVc2JEZXZpY2VFeHRlbnNpb24gKmRldnggPSBkZXZpY2UtPmV4dGVuc2lvbjsKKyAgaW50IHJlc3VsdDsKKworICBsb2dNZXNzYWdlKExPR19DQVRFR09SWShVU0JfSU8pLCAic2V0dGluZyBhbHRlcm5hdGl2ZTogJXVbJXVdIiwgaW50ZXJmYWNlLCBhbHRlcm5hdGl2ZSk7CisgIHJlc3VsdCA9IHVzYl9zZXRfYWx0aW50ZXJmYWNlKGRldngtPmhhbmRsZSwgYWx0ZXJuYXRpdmUpOworICBpZiAocmVzdWx0ID49IDApIHJldHVybiAxOworCisgIGVycm5vID0gLXJlc3VsdDsKKyAgbG9nU3lzdGVtRXJyb3IoIlVTQiBhbHRlcm5hdGl2ZSBzZXQiKTsKKyAgcmV0dXJuIDA7Cit9CisKK2ludAordXNiUmVzZXREZXZpY2UgKFVzYkRldmljZSAqZGV2aWNlKSB7CisgIGxvZ01lc3NhZ2UoTE9HX0NBVEVHT1JZKFVTQl9JTyksICJyZXNldCBkZXZpY2UiKTsKKworICBVc2JEZXZpY2VFeHRlbnNpb24gKmRldnggPSBkZXZpY2UtPmV4dGVuc2lvbjsKKyAgaW50IHJlc3VsdCA9IHVzYl9yZXNldChkZXZ4LT5oYW5kbGUpOworICBpZiAocmVzdWx0ID49IDApIHJldHVybiAxOworCisgIGVycm5vID0gLXJlc3VsdDsKKyAgbG9nU3lzdGVtRXJyb3IoIlVTQiBkZXZpY2UgcmVzZXQiKTsKKyAgcmV0dXJuIDA7Cit9CisKK2ludAordXNiQ2xlYXJIYWx0IChVc2JEZXZpY2UgKmRldmljZSwgdW5zaWduZWQgY2hhciBlbmRwb2ludEFkZHJlc3MpIHsKKyAgbG9nTWVzc2FnZShMT0dfQ0FURUdPUlkoVVNCX0lPKSwgImNsZWFyIGhhbHQ6ICUwMlgiLCBlbmRwb2ludEFkZHJlc3MpOworCisgIFVzYkRldmljZUV4dGVuc2lvbiAqZGV2eCA9IGRldmljZS0+ZXh0ZW5zaW9uOworICBpbnQgcmVzdWx0ID0gdXNiX2NsZWFyX2hhbHQoZGV2eC0+aGFuZGxlLCBlbmRwb2ludEFkZHJlc3MpOworICBpZiAocmVzdWx0ID49IDApIHJldHVybiAxOworCisgIGVycm5vID0gLXJlc3VsdDsKKyAgbG9nU3lzdGVtRXJyb3IoIlVTQiBlbmRwb2ludCBjbGVhciIpOworICByZXR1cm4gMDsKK30KKworc3NpemVfdAordXNiQ29udHJvbFRyYW5zZmVyICgKKyAgVXNiRGV2aWNlICpkZXZpY2UsCisgIHVpbnQ4X3QgZGlyZWN0aW9uLAorICB1aW50OF90IHJlY2lwaWVudCwKKyAgdWludDhfdCB0eXBlLAorICB1aW50OF90IHJlcXVlc3QsCisgIHVpbnQxNl90IHZhbHVlLAorICB1aW50MTZfdCBpbmRleCwKKyAgdm9pZCAqYnVmZmVyLAorICB1aW50MTZfdCBsZW5ndGgsCisgIGludCB0aW1lb3V0CispIHsKKyAgVXNiRGV2aWNlRXh0ZW5zaW9uICpkZXZ4ID0gZGV2aWNlLT5leHRlbnNpb247CisgIFVzYlNldHVwUGFja2V0IHNldHVwOworICBpbnQgcmVzdWx0OworCisgIHVzYk1ha2VTZXR1cFBhY2tldCgmc2V0dXAsIGRpcmVjdGlvbiwgcmVjaXBpZW50LCB0eXBlLCByZXF1ZXN0LCB2YWx1ZSwgaW5kZXgsIGxlbmd0aCk7CisKKyAgaWYgKGRpcmVjdGlvbiA9PSBVc2JDb250cm9sRGlyZWN0aW9uX091dHB1dCkgeworICAgIGlmIChsZW5ndGgpIGxvZ0J5dGVzKExPR19DQVRFR09SWShVU0JfSU8pLCAiY29udHJvbCBvdXRwdXQiLCBidWZmZXIsIGxlbmd0aCk7CisgIH0KKworICByZXN1bHQgPSB1c2JfY29udHJvbF9tc2coZGV2eC0+aGFuZGxlLCBzZXR1cC5iUmVxdWVzdFR5cGUsIHNldHVwLmJSZXF1ZXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0TGl0dGxlRW5kaWFuMTYoc2V0dXAud1ZhbHVlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldExpdHRsZUVuZGlhbjE2KHNldHVwLndJbmRleCksIGJ1ZmZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldExpdHRsZUVuZGlhbjE2KHNldHVwLndMZW5ndGgpLCB0aW1lb3V0KTsKKworICBpZiAocmVzdWx0ID49IDApIHsKKyAgICBpZiAoZGlyZWN0aW9uID09IFVzYkNvbnRyb2xEaXJlY3Rpb25fSW5wdXQpIHsKKyAgICAgIGxvZ0J5dGVzKExPR19DQVRFR09SWShVU0JfSU8pLCAiY29udHJvbCBpbnB1dCIsIGJ1ZmZlciwgcmVzdWx0KTsKKyAgICB9CisKKyAgICByZXR1cm4gcmVzdWx0OworICB9CisKKyAgZXJybm8gPSAtcmVzdWx0OworICBsb2dTeXN0ZW1FcnJvcigiVVNCIGNvbnRyb2wgdHJhbnNmZXIiKTsKKyAgcmV0dXJuIC0xOworfQorCit2b2lkICoKK3VzYlN1Ym1pdFJlcXVlc3QgKAorICBVc2JEZXZpY2UgKmRldmljZSwKKyAgdW5zaWduZWQgY2hhciBlbmRwb2ludEFkZHJlc3MsCisgIHZvaWQgKmJ1ZmZlciwKKyAgc2l6ZV90IGxlbmd0aCwKKyAgdm9pZCAqZGF0YQorKSB7CisgIGxvZ1Vuc3VwcG9ydGVkRnVuY3Rpb24oKTsKKyAgcmV0dXJuIE5VTEw7Cit9CisKK2ludAordXNiQ2FuY2VsUmVxdWVzdCAoVXNiRGV2aWNlICpkZXZpY2UsIHZvaWQgKnJlcXVlc3QpIHsKKyAgbG9nVW5zdXBwb3J0ZWRGdW5jdGlvbigpOworICByZXR1cm4gMDsKK30KKwordm9pZCAqCit1c2JSZWFwUmVzcG9uc2UgKAorICBVc2JEZXZpY2UgKmRldmljZSwKKyAgdW5zaWduZWQgY2hhciBlbmRwb2ludEFkZHJlc3MsCisgIFVzYlJlc3BvbnNlICpyZXNwb25zZSwKKyAgaW50IHdhaXQKKykgeworICBsb2dVbnN1cHBvcnRlZEZ1bmN0aW9uKCk7CisgIHJldHVybiBOVUxMOworfQorCitpbnQKK3VzYk1vbml0b3JJbnB1dEVuZHBvaW50ICgKKyAgVXNiRGV2aWNlICpkZXZpY2UsIHVuc2lnbmVkIGNoYXIgZW5kcG9pbnROdW1iZXIsCisgIEFzeW5jTW9uaXRvckNhbGxiYWNrICpjYWxsYmFjaywgdm9pZCAqZGF0YQorKSB7CisgIHJldHVybiAwOworfQorCitzc2l6ZV90Cit1c2JSZWFkRW5kcG9pbnQgKAorICBVc2JEZXZpY2UgKmRldmljZSwKKyAgdW5zaWduZWQgY2hhciBlbmRwb2ludE51bWJlciwKKyAgdm9pZCAqYnVmZmVyLAorICBzaXplX3QgbGVuZ3RoLAorICBpbnQgdGltZW91dAorKSB7CisgIFVzYkRldmljZUV4dGVuc2lvbiAqZGV2eCA9IGRldmljZS0+ZXh0ZW5zaW9uOworICBVc2JFbmRwb2ludCAqZW5kcG9pbnQ7CisKKyAgaWYgKChlbmRwb2ludCA9IHVzYkdldElucHV0RW5kcG9pbnQoZGV2aWNlLCBlbmRwb2ludE51bWJlcikpKSB7CisgICAgY29uc3QgVXNiRW5kcG9pbnREZXNjcmlwdG9yICpkZXNjcmlwdG9yID0gZW5kcG9pbnQtPmRlc2NyaXB0b3I7CisgICAgVXNiRW5kcG9pbnRUcmFuc2ZlciB0cmFuc2ZlciA9IFVTQl9FTkRQT0lOVF9UUkFOU0ZFUihkZXNjcmlwdG9yKTsKKyAgICBzc2l6ZV90IHJlc3VsdCA9IC0xOworCisgICAgc3dpdGNoICh0cmFuc2ZlcikgeworICAgICAgY2FzZSBVc2JFbmRwb2ludFRyYW5zZmVyX0J1bGs6CisgICAgICAgIHJlc3VsdCA9IHVzYl9idWxrX3JlYWQoZGV2eC0+aGFuZGxlLCBkZXNjcmlwdG9yLT5iRW5kcG9pbnRBZGRyZXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlciwgbGVuZ3RoLCB0aW1lb3V0KTsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGNhc2UgVXNiRW5kcG9pbnRUcmFuc2Zlcl9JbnRlcnJ1cHQ6CisgICAgICAgIHJlc3VsdCA9IHVzYl9pbnRlcnJ1cHRfcmVhZChkZXZ4LT5oYW5kbGUsIGRlc2NyaXB0b3ItPmJFbmRwb2ludEFkZHJlc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXIsIGxlbmd0aCwgdGltZW91dCk7CisgICAgICAgIGJyZWFrOworCisgICAgICBkZWZhdWx0OgorICAgICAgICBsb2dNZXNzYWdlKExPR19FUlIsICJVU0IgZW5kcG9pbnQgaW5wdXQgdHJhbnNmZXIgbm90IHN1cHBvcnRlZDogMFglMDJYIiwgdHJhbnNmZXIpOworICAgICAgICByZXN1bHQgPSAtRU5PU1lTOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBpZiAocmVzdWx0ID49IDApIHsKKyAgICAgIGlmICghdXNiQXBwbHlJbnB1dEZpbHRlcnMoZW5kcG9pbnQsIGJ1ZmZlciwgbGVuZ3RoLCAmcmVzdWx0KSkgeworICAgICAgICByZXN1bHQgPSAtRUlPOworICAgICAgfQorICAgIH0KKworICAgIGlmIChyZXN1bHQgPj0gMCkgcmV0dXJuIHJlc3VsdDsKKyAgICBlcnJubyA9IC1yZXN1bHQ7CisgIH0KKworI2lmZGVmIEVUSU1FRE9VVAorICBpZiAoZXJybm8gPT0gRVRJTUVET1VUKSBlcnJubyA9IEVBR0FJTjsKKyNlbmRpZiAvKiBFVElNRURPVVQgKi8KKworICBpZiAoZXJybm8gIT0gRUFHQUlOKSBsb2dTeXN0ZW1FcnJvcigiVVNCIGVuZHBvaW50IHJlYWQiKTsKKyAgcmV0dXJuIC0xOworfQorCitzc2l6ZV90Cit1c2JXcml0ZUVuZHBvaW50ICgKKyAgVXNiRGV2aWNlICpkZXZpY2UsCisgIHVuc2lnbmVkIGNoYXIgZW5kcG9pbnROdW1iZXIsCisgIGNvbnN0IHZvaWQgKmJ1ZmZlciwKKyAgc2l6ZV90IGxlbmd0aCwKKyAgaW50IHRpbWVvdXQKKykgeworICBVc2JEZXZpY2VFeHRlbnNpb24gKmRldnggPSBkZXZpY2UtPmV4dGVuc2lvbjsKKyAgVXNiRW5kcG9pbnQgKmVuZHBvaW50OworCisgIGlmICgoZW5kcG9pbnQgPSB1c2JHZXRPdXRwdXRFbmRwb2ludChkZXZpY2UsIGVuZHBvaW50TnVtYmVyKSkpIHsKKyAgICBjb25zdCBVc2JFbmRwb2ludERlc2NyaXB0b3IgKmRlc2NyaXB0b3IgPSBlbmRwb2ludC0+ZGVzY3JpcHRvcjsKKyAgICBVc2JFbmRwb2ludFRyYW5zZmVyIHRyYW5zZmVyID0gVVNCX0VORFBPSU5UX1RSQU5TRkVSKGRlc2NyaXB0b3IpOworICAgIGludCByZXN1bHQgPSAtMTsKKworICAgIHVzYkxvZ0VuZHBvaW50RGF0YShlbmRwb2ludCwgIm91dHB1dCIsIGJ1ZmZlciwgbGVuZ3RoKTsKKworICAgIHN3aXRjaCAodHJhbnNmZXIpIHsKKyAgICAgIGNhc2UgVXNiRW5kcG9pbnRUcmFuc2Zlcl9CdWxrOgorICAgICAgICByZXN1bHQgPSB1c2JfYnVsa193cml0ZShkZXZ4LT5oYW5kbGUsIGRlc2NyaXB0b3ItPmJFbmRwb2ludEFkZHJlc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFyICopYnVmZmVyLCBsZW5ndGgsIHRpbWVvdXQpOworICAgICAgICBicmVhazsKKworICAgICAgY2FzZSBVc2JFbmRwb2ludFRyYW5zZmVyX0ludGVycnVwdDoKKyAgICAgICAgcmVzdWx0ID0gdXNiX2ludGVycnVwdF93cml0ZShkZXZ4LT5oYW5kbGUsIGRlc2NyaXB0b3ItPmJFbmRwb2ludEFkZHJlc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYXIgKilidWZmZXIsIGxlbmd0aCwgdGltZW91dCk7CisgICAgICAgIGJyZWFrOworCisgICAgICBkZWZhdWx0OgorICAgICAgICBsb2dNZXNzYWdlKExPR19FUlIsICJVU0IgZW5kcG9pbnQgb3V0cHV0IHRyYW5zZmVyIG5vdCBzdXBwb3J0ZWQ6IDBYJTAyWCIsIHRyYW5zZmVyKTsKKyAgICAgICAgcmVzdWx0ID0gLUVOT1NZUzsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgaWYgKHJlc3VsdCA+PSAwKSByZXR1cm4gcmVzdWx0OworICAgIGVycm5vID0gLXJlc3VsdDsKKyAgfQorCisgIGxvZ1N5c3RlbUVycm9yKCJVU0IgZW5kcG9pbnQgd3JpdGUiKTsKKyAgcmV0dXJuIC0xOworfQorCitpbnQKK3VzYlJlYWREZXZpY2VEZXNjcmlwdG9yIChVc2JEZXZpY2UgKmRldmljZSkgeworICBVc2JEZXZpY2VFeHRlbnNpb24gKmRldnggPSBkZXZpY2UtPmV4dGVuc2lvbjsKKyAgbWVtY3B5KCZkZXZpY2UtPmRlc2NyaXB0b3IsICZ1c2JfZGV2aWNlKGRldngtPmhhbmRsZSktPmRlc2NyaXB0b3IsIFVzYkRlc2NyaXB0b3JTaXplX0RldmljZSk7CisgIHJldHVybiAxOworfQorCitpbnQKK3VzYkFsbG9jYXRlRW5kcG9pbnRFeHRlbnNpb24gKFVzYkVuZHBvaW50ICplbmRwb2ludCkgeworICByZXR1cm4gMTsKK30KKwordm9pZAordXNiRGVhbGxvY2F0ZUVuZHBvaW50RXh0ZW5zaW9uIChVc2JFbmRwb2ludEV4dGVuc2lvbiAqZXB0eCkgeworfQorCit2b2lkCit1c2JEZWFsbG9jYXRlRGV2aWNlRXh0ZW5zaW9uIChVc2JEZXZpY2VFeHRlbnNpb24gKmRldngpIHsKKyAgaWYgKGRldngtPmhhbmRsZSkgeworICAgIHVzYl9jbG9zZShkZXZ4LT5oYW5kbGUpOworICAgIGRldngtPmhhbmRsZSA9IE5VTEw7CisgIH0KKworICBmcmVlKGRldngpOworfQorCitVc2JEZXZpY2UgKgordXNiRmluZERldmljZSAoVXNiRGV2aWNlQ2hvb3NlciAqY2hvb3NlciwgVXNiQ2hvb3NlQ2hhbm5lbERhdGEgKmRhdGEpIHsKKyAgVXNiRGV2aWNlICpkZXZpY2UgPSBOVUxMOworICBpbnQgcmVzdWx0OworCisgIHsKKyAgICBzdGF0aWMgaW50IGluaXRpYWxpemVkID0gMDsKKyAgICBpZiAoIWluaXRpYWxpemVkKSB7CisgICAgICB1c2JfaW5pdCgpOworICAgICAgaW5pdGlhbGl6ZWQgPSAxOworICAgIH0KKyAgfQorCisgIGlmICgocmVzdWx0ID0gdXNiX2ZpbmRfYnVzc2VzKCkpID49IDApIHsKKyAgICBpZiAoKHJlc3VsdCA9IHVzYl9maW5kX2RldmljZXMoKSkgPj0gMCkgeworICAgICAgc3RydWN0IHVzYl9idXMgKmJ1cyA9IHVzYl9nZXRfYnVzc2VzKCk7CisKKyAgICAgIGlmIChidXMpIHsKKyAgICAgICAgc3RydWN0IHVzYl9idXMgKmJ1czAgPSBidXM7CisKKyAgICAgICAgZG8geworICAgICAgICAgIHN0cnVjdCB1c2JfZGV2aWNlICpkZXYgPSBidXMtPmRldmljZXM7CisKKyAgICAgICAgICBpZiAoZGV2KSB7CisgICAgICAgICAgICBzdHJ1Y3QgdXNiX2RldmljZSAqZGV2MCA9IGRldjsKKworICAgICAgICAgICAgZG8geworICAgICAgICAgICAgICBVc2JEZXZpY2VFeHRlbnNpb24gKmRldng7CisKKyAgICAgICAgICAgICAgaWYgKChkZXZ4ID0gbWFsbG9jKHNpemVvZigqZGV2eCkpKSkgeworICAgICAgICAgICAgICAgIGlmICgoZGV2eC0+aGFuZGxlID0gdXNiX29wZW4oZGV2KSkpIHsKKyAgICAgICAgICAgICAgICAgIGlmICgoZGV2aWNlID0gdXNiVGVzdERldmljZShkZXZ4LCBjaG9vc2VyLCBkYXRhKSkpIHJldHVybiBkZXZpY2U7CisKKyAgICAgICAgICAgICAgICAgIHVzYl9jbG9zZShkZXZ4LT5oYW5kbGUpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICBsb2dNZXNzYWdlKExPR19FUlIsICJVU0Igb3BlbiBlcnJvcjogdmVuZG9yPSVYIHByb2R1Y3Q9JVgiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRMaXR0bGVFbmRpYW4xNihkZXYtPmRlc2NyaXB0b3IuaWRWZW5kb3IpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRMaXR0bGVFbmRpYW4xNihkZXYtPmRlc2NyaXB0b3IuaWRQcm9kdWN0KSk7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgZnJlZShkZXZ4KTsKKyAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBsb2dTeXN0ZW1FcnJvcigiVVNCIGRldmljZSBleHRlbnNpb24gYWxsb2NhdGUiKTsKKyAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgIGlmICgoZGV2ID0gZGV2LT5uZXh0KSA9PSBkZXYwKSBkZXYgPSBOVUxMOworICAgICAgICAgICAgfSB3aGlsZSAoZGV2KTsKKyAgICAgICAgICB9CisKKyAgICAgICAgICBpZiAoKGJ1cyA9IGJ1cy0+bmV4dCkgPT0gYnVzMCkgYnVzID0gTlVMTDsKKyAgICAgICAgfSB3aGlsZSAoYnVzKTsKKyAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgZXJybm8gPSAtcmVzdWx0OworICAgICAgbG9nU3lzdGVtRXJyb3IoIlVTQiBkZXZpY2VzIGZpbmQiKTsKKyAgICB9CisgIH0gZWxzZSB7CisgICAgZXJybm8gPSAtcmVzdWx0OworICAgIGxvZ1N5c3RlbUVycm9yKCJVU0IgYnVzc2VzIGZpbmQiKTsKKyAgfQorCisgIHJldHVybiBkZXZpY2U7Cit9CisKK3ZvaWQKK3VzYkZvcmdldERldmljZXMgKHZvaWQpIHsKK30KZGlmZiAtLWdpdCBhL1Byb2dyYW1zL3VzYl9saW51eC5jIGIvUHJvZ3JhbXMvdXNiX2xpbnV4LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzRhNzE3OAotLS0gL2Rldi9udWxsCisrKyBiL1Byb2dyYW1zL3VzYl9saW51eC5jCkBAIC0wLDAgKzEsMTU3MSBAQAorLyoKKyAqIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisgKiAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisgKgorICogQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKKyNpbmNsdWRlICJwcm9sb2d1ZS5oIgorCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxjdHlwZS5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8ZGlyZW50Lmg+CisjaW5jbHVkZSA8ZmNudGwuaD4KKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorI2luY2x1ZGUgPHN5cy92ZnMuaD4KKyNpbmNsdWRlIDxzeXMvaW9jdGwuaD4KKyNpbmNsdWRlIDxsaW51eC91c2JkZXZpY2VfZnMuaD4KKworI2lmbmRlZiBVU0JERVZGU19ESVNDT05ORUNUCisjZGVmaW5lIFVTQkRFVkZTX0RJU0NPTk5FQ1QgX0lPKCdVJywgMjIpCisjZW5kaWYgLyogVVNCREVWRlNfRElTQ09OTkVDVCAqLworCisjaWZuZGVmIFVTQkRFVkZTX0NPTk5FQ1QKKyNkZWZpbmUgVVNCREVWRlNfQ09OTkVDVCBfSU8oJ1UnLCAyMykKKyNlbmRpZiAvKiBVU0JERVZGU19DT05ORUNUICovCisKKyNpbmNsdWRlICJsb2cuaCIKKyNpbmNsdWRlICJwYXJhbWV0ZXJzLmgiCisjaW5jbHVkZSAiYml0ZmllbGQuaCIKKyNpbmNsdWRlICJzdHJmbXQuaCIKKyNpbmNsdWRlICJmaWxlLmgiCisjaW5jbHVkZSAicGFyc2UuaCIKKyNpbmNsdWRlICJ0aW1pbmcuaCIKKyNpbmNsdWRlICJhc3luY19oYW5kbGUuaCIKKyNpbmNsdWRlICJhc3luY193YWl0LmgiCisjaW5jbHVkZSAiYXN5bmNfYWxhcm0uaCIKKyNpbmNsdWRlICJhc3luY19pby5oIgorI2luY2x1ZGUgImFzeW5jX3NpZ25hbC5oIgorI2luY2x1ZGUgIm1udHB0LmgiCisjaW5jbHVkZSAiaW9fdXNiLmgiCisjaW5jbHVkZSAidXNiX2ludGVybmFsLmgiCisKK3R5cGVkZWYgc3RydWN0IHsKKyAgY2hhciAqc3lzZnNQYXRoOworICBjaGFyICp1c2Jmc1BhdGg7CisgIFVzYkRldmljZURlc2NyaXB0b3IgdXNiRGVzY3JpcHRvcjsKK30gVXNiSG9zdERldmljZTsKKworc3RhdGljIFF1ZXVlICp1c2JIb3N0RGV2aWNlcyA9IE5VTEw7CisKK3N0cnVjdCBVc2JEZXZpY2VFeHRlbnNpb25TdHJ1Y3QgeworICBjb25zdCBVc2JIb3N0RGV2aWNlICpob3N0OworICBpbnQgdXNiZnNGaWxlOworICBBc3luY0hhbmRsZSB1c2Jmc01vbml0b3JIYW5kbGU7Cit9OworCitzdHJ1Y3QgVXNiRW5kcG9pbnRFeHRlbnNpb25TdHJ1Y3QgeworICBRdWV1ZSAqY29tcGxldGVkUmVxdWVzdHM7CisKKyAgc3RydWN0IHsKKyAgICBzdHJ1Y3QgeworICAgICAgQXN5bmNIYW5kbGUgaGFuZGxlOworICAgICAgaW50IG51bWJlcjsKKyAgICB9IHNpZ25hbDsKKyAgfSBtb25pdG9yOworfTsKKworc3RhdGljIGludAordXNiT3BlblVzYmZzRmlsZSAoVXNiRGV2aWNlRXh0ZW5zaW9uICpkZXZ4KSB7CisgIGlmIChkZXZ4LT51c2Jmc0ZpbGUgPT0gLTEpIHsKKyAgICBpbnQgb3BlbkZsYWdzID0gT19SRFdSOworCisgICAgI2lmZGVmIE9fQ0xPRVhFQworICAgIG9wZW5GbGFncyB8PSBPX0NMT0VYRUM7CisgICAgI2VuZGlmIC8qIE9fQ0xPRVhFQyAqLworCisgICAgaWYgKChkZXZ4LT51c2Jmc0ZpbGUgPSBvcGVuKGRldngtPmhvc3QtPnVzYmZzUGF0aCwgb3BlbkZsYWdzKSkgPT0gLTEpIHsKKyAgICAgIGxvZ01lc3NhZ2UoTE9HX0VSUiwgIlVTQkZTIG9wZW4gZXJyb3I6ICVzOiAlcyIsCisgICAgICAgICAgICAgICAgIGRldngtPmhvc3QtPnVzYmZzUGF0aCwgc3RyZXJyb3IoZXJybm8pKTsKKyAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIGxvZ01lc3NhZ2UoTE9HX0NBVEVHT1JZKFVTQl9JTyksICJ1c2JmcyBmaWxlIG9wZW5lZDogJXMgZmQ9JWQiLAorICAgICAgICAgICAgICAgZGV2eC0+aG9zdC0+dXNiZnNQYXRoLCBkZXZ4LT51c2Jmc0ZpbGUpOworICB9CisKKyAgcmV0dXJuIDE7Cit9CisKK3N0YXRpYyB2b2lkCit1c2JDbG9zZVVzYmZzRmlsZSAoVXNiRGV2aWNlRXh0ZW5zaW9uICpkZXZ4KSB7CisgIGlmIChkZXZ4LT51c2Jmc0ZpbGUgIT0gLTEpIHsKKyAgICBjbG9zZShkZXZ4LT51c2Jmc0ZpbGUpOworICAgIGRldngtPnVzYmZzRmlsZSA9IC0xOworICB9Cit9CisKK2ludAordXNiRGlzYWJsZUF1dG9zdXNwZW5kIChVc2JEZXZpY2UgKmRldmljZSkgeworICBVc2JEZXZpY2VFeHRlbnNpb24gKmRldnggPSBkZXZpY2UtPmV4dGVuc2lvbjsKKyAgaW50IG9rID0gMDsKKworICBpZiAoZGV2eC0+aG9zdC0+c3lzZnNQYXRoKSB7CisgICAgY2hhciAqcGF0aCA9IG1ha2VQYXRoKGRldngtPmhvc3QtPnN5c2ZzUGF0aCwgInBvd2VyL2F1dG9zdXNwZW5kIik7CisKKyAgICBpZiAocGF0aCkgeworICAgICAgaW50IG9wZW5GbGFncyA9IE9fV1JPTkxZOworCisgICAgICAjaWZkZWYgT19DTE9FWEVDCisgICAgICBvcGVuRmxhZ3MgfD0gT19DTE9FWEVDOworICAgICAgI2VuZGlmIC8qIE9fQ0xPRVhFQyAqLworCisgICAgICBpbnQgZmlsZSA9IG9wZW4ocGF0aCwgb3BlbkZsYWdzKTsKKworICAgICAgaWYgKGZpbGUgIT0gLTEpIHsKKyAgICAgICAgc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IHZhbHVlc1tdID0geyItMSIsICIwIiwgTlVMTH07CisgICAgICAgIGNvbnN0IGNoYXIgKmNvbnN0ICp2YWx1ZSA9IHZhbHVlczsKKworICAgICAgICB3aGlsZSAoKnZhbHVlKSB7CisgICAgICAgICAgc2l6ZV90IGxlbmd0aCA9IHN0cmxlbigqdmFsdWUpOworICAgICAgICAgIHNzaXplX3QgcmVzdWx0ID0gd3JpdGUoZmlsZSwgKnZhbHVlLCBsZW5ndGgpOworCisgICAgICAgICAgaWYgKHJlc3VsdCAhPSAtMSkgeworICAgICAgICAgICAgb2sgPSAxOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgfQorCisgICAgICAgICAgaWYgKGVycm5vICE9IEVJTlZBTCkgeworICAgICAgICAgICAgbG9nTWVzc2FnZShMT0dfRVJSLCAid3JpdGUgZXJyb3I6ICVzOiAlcyIsIHBhdGgsIHN0cmVycm9yKGVycm5vKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICB9CisKKyAgICAgICAgICArK3ZhbHVlOworICAgICAgICB9CisKKyAgICAgICAgY2xvc2UoZmlsZSk7CisgICAgICB9IGVsc2UgeworICAgICAgICBsb2dNZXNzYWdlKChlcnJubyA9PSBFTk9FTlQpPyBMT0dfQ0FURUdPUlkoVVNCX0lPKTogTE9HX0VSUiwKKyAgICAgICAgICAgICAgICAgICAib3BlbiBlcnJvcjogJXM6ICVzIiwgcGF0aCwgc3RyZXJyb3IoZXJybm8pKTsKKyAgICAgIH0KKworICAgICAgZnJlZShwYXRoKTsKKyAgICB9CisgIH0KKworICByZXR1cm4gb2s7Cit9CisKK3N0YXRpYyBjaGFyICoKK3VzYkdldERyaXZlciAoVXNiRGV2aWNlICpkZXZpY2UsIHVuc2lnbmVkIGNoYXIgaW50ZXJmYWNlKSB7CisgIFVzYkRldmljZUV4dGVuc2lvbiAqZGV2eCA9IGRldmljZS0+ZXh0ZW5zaW9uOworCisgIGlmICh1c2JPcGVuVXNiZnNGaWxlKGRldngpKSB7CisgICAgc3RydWN0IHVzYmRldmZzX2dldGRyaXZlciBhcmc7CisKKyAgICBtZW1zZXQoJmFyZywgMCwgc2l6ZW9mKGFyZykpOworICAgIGFyZy5pbnRlcmZhY2UgPSBpbnRlcmZhY2U7CisKKyAgICBpZiAoaW9jdGwoZGV2eC0+dXNiZnNGaWxlLCBVU0JERVZGU19HRVREUklWRVIsICZhcmcpICE9IC0xKSB7CisgICAgICBjaGFyICpuYW1lID0gc3RyZHVwKGFyZy5kcml2ZXIpOworICAgICAgaWYgKG5hbWUpIHJldHVybiBuYW1lOworICAgICAgbG9nTWFsbG9jRXJyb3IoKTsKKyAgICB9IGVsc2UgeworICAgICAgbG9nU3lzdGVtRXJyb3IoIlVTQiBnZXQgZHJpdmVyIG5hbWUiKTsKKyAgICB9CisgIH0KKworICByZXR1cm4gTlVMTDsKK30KKworc3RhdGljIGludAordXNiQ29udHJvbERyaXZlciAoCisgIFVzYkRldmljZSAqZGV2aWNlLAorICB1bnNpZ25lZCBjaGFyIGludGVyZmFjZSwKKyAgaW50IGNvZGUsCisgIHZvaWQgKmRhdGEKKykgeworICBVc2JEZXZpY2VFeHRlbnNpb24gKmRldnggPSBkZXZpY2UtPmV4dGVuc2lvbjsKKworICBpZiAodXNiT3BlblVzYmZzRmlsZShkZXZ4KSkgeworICAgIHN0cnVjdCB1c2JkZXZmc19pb2N0bCBhcmc7CisKKyAgICBtZW1zZXQoJmFyZywgMCwgc2l6ZW9mKGFyZykpOworICAgIGFyZy5pZm5vID0gaW50ZXJmYWNlOworICAgIGFyZy5pb2N0bF9jb2RlID0gY29kZTsKKyAgICBhcmcuZGF0YSA9IGRhdGE7CisKKyAgICBpZiAoaW9jdGwoZGV2eC0+dXNiZnNGaWxlLCBVU0JERVZGU19JT0NUTCwgJmFyZykgIT0gLTEpIHJldHVybiAxOworICAgIGxvZ1N5c3RlbUVycm9yKCJVU0IgZHJpdmVyIGNvbnRyb2wiKTsKKyAgfQorCisgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50Cit1c2JEaXNjb25uZWN0RHJpdmVyIChVc2JEZXZpY2UgKmRldmljZSwgdW5zaWduZWQgY2hhciBpbnRlcmZhY2UpIHsKKyNpZmRlZiBVU0JERVZGU19ESVNDT05ORUNUCisgIGxvZ01lc3NhZ2UoTE9HX0NBVEVHT1JZKFVTQl9JTyksICJkaXNjb25uZWN0aW5nIGtlcm5lbCBkcml2ZXI6IEludDoldSIsIGludGVyZmFjZSk7CisgIGlmICh1c2JDb250cm9sRHJpdmVyKGRldmljZSwgaW50ZXJmYWNlLCBVU0JERVZGU19ESVNDT05ORUNULCBOVUxMKSkgcmV0dXJuIDE7CisjZWxzZSAvKiBVU0JERVZGU19ESVNDT05ORUNUICovCisgIGVycm5vID0gRU5PU1lTOworI2VuZGlmIC8qIFVTQkRFVkZTX0RJU0NPTk5FQ1QgKi8KKworICBsb2dTeXN0ZW1FcnJvcigiVVNBQiBkcml2ZXIgZGlzY29ubmVjdCIpOworICByZXR1cm4gMDsKK30KKworc3RhdGljIGludAordXNiRGlzY29ubmVjdEludGVyZmFjZSAoVXNiRGV2aWNlICpkZXZpY2UsIHVuc2lnbmVkIGNoYXIgaW50ZXJmYWNlKSB7CisgIGNoYXIgKmRyaXZlciA9IHVzYkdldERyaXZlcihkZXZpY2UsIGludGVyZmFjZSk7CisKKyAgaWYgKGRyaXZlcikgeworICAgIGludCBpc1VzYmZzID0gc3RyY21wKGRyaXZlciwgInVzYmZzIikgPT0gMDsKKworICAgIGxvZ01lc3NhZ2UoTE9HX1dBUk5JTkcsICJVU0IgaW50ZXJmYWNlIGluIHVzZTogJXUgKCVzKSIsIGludGVyZmFjZSwgZHJpdmVyKTsKKyAgICBmcmVlKGRyaXZlcik7CisKKyAgICBpZiAoaXNVc2JmcykgeworICAgICAgbG9nUG9zc2libGVDYXVzZSgiYW5vdGhlciAiIFBBQ0tBR0VfVEFSTkFNRSAiIHByb2Nlc3MgbWF5IGJlIGFjY2Vzc2luZyB0aGUgc2FtZSBkZXZpY2UiKTsKKyAgICAgIGxvZ1Bvc3NpYmxlQ2F1c2UoInRoZSBkZXZpY2UgbWF5IGJlIGF0dGFjaGVkIHRvIGEgdmlydHVhbCBtYWNoaW5lIHJ1bm5pbmcgb24gdGhpcyBob3N0Iik7CisgICAgICBlcnJubyA9IEVCVVNZOworICAgIH0gZWxzZSBpZiAodXNiRGlzY29ubmVjdERyaXZlcihkZXZpY2UsIGludGVyZmFjZSkpIHsKKyAgICAgIHJldHVybiAxOworICAgIH0KKyAgfQorCisgIHJldHVybiAwOworfQorCitpbnQKK3VzYlNldENvbmZpZ3VyYXRpb24gKFVzYkRldmljZSAqZGV2aWNlLCB1bnNpZ25lZCBjaGFyIGNvbmZpZ3VyYXRpb24pIHsKKyAgVXNiRGV2aWNlRXh0ZW5zaW9uICpkZXZ4ID0gZGV2aWNlLT5leHRlbnNpb247CisKKyAgbG9nTWVzc2FnZShMT0dfQ0FURUdPUlkoVVNCX0lPKSwgInNldHRpbmcgY29uZmlndXJhdGlvbjogJXUiLCBjb25maWd1cmF0aW9uKTsKKworICBpZiAodXNiT3BlblVzYmZzRmlsZShkZXZ4KSkgeworICAgIHVuc2lnbmVkIGludCBhcmcgPSBjb25maWd1cmF0aW9uOworCisgICAgaWYgKGlvY3RsKGRldngtPnVzYmZzRmlsZSwgVVNCREVWRlNfU0VUQ09ORklHVVJBVElPTiwgJmFyZykgIT0gLTEpIHJldHVybiAxOworICAgIGxvZ1N5c3RlbUVycm9yKCJVU0IgY29uZmlndXJhdGlvbiBzZXQiKTsKKyAgfQorCisgIHJldHVybiAwOworfQorCitpbnQKK3VzYkNsYWltSW50ZXJmYWNlIChVc2JEZXZpY2UgKmRldmljZSwgdW5zaWduZWQgY2hhciBpbnRlcmZhY2UpIHsKKyAgVXNiRGV2aWNlRXh0ZW5zaW9uICpkZXZ4ID0gZGV2aWNlLT5leHRlbnNpb247CisKKyAgbG9nTWVzc2FnZShMT0dfQ0FURUdPUlkoVVNCX0lPKSwgImNsYWltaW5nIGludGVyZmFjZTogJXUiLCBpbnRlcmZhY2UpOworCisgIGlmICh1c2JPcGVuVXNiZnNGaWxlKGRldngpKSB7CisgICAgaW50IGRpc2Nvbm5lY3RlZCA9IDA7CisKKyAgICB3aGlsZSAoMSkgeworICAgICAgdW5zaWduZWQgaW50IGFyZyA9IGludGVyZmFjZTsKKworICAgICAgaWYgKGlvY3RsKGRldngtPnVzYmZzRmlsZSwgVVNCREVWRlNfQ0xBSU1JTlRFUkZBQ0UsICZhcmcpICE9IC0xKSByZXR1cm4gMTsKKyAgICAgIGlmIChlcnJubyAhPSBFQlVTWSkgYnJlYWs7CisgICAgICBpZiAoZGlzY29ubmVjdGVkKSBicmVhazsKKworICAgICAgaWYgKCF1c2JEaXNjb25uZWN0SW50ZXJmYWNlKGRldmljZSwgaW50ZXJmYWNlKSkgeworICAgICAgICBlcnJubyA9IEVCVVNZOworICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICAgIGRpc2Nvbm5lY3RlZCA9IDE7CisgICAgfQorCisgICAgbG9nU3lzdGVtRXJyb3IoIlVTQiBpbnRlcmZhY2UgY2xhaW0iKTsKKyAgfQorCisgIHJldHVybiAwOworfQorCitpbnQKK3VzYlJlbGVhc2VJbnRlcmZhY2UgKFVzYkRldmljZSAqZGV2aWNlLCB1bnNpZ25lZCBjaGFyIGludGVyZmFjZSkgeworICBVc2JEZXZpY2VFeHRlbnNpb24gKmRldnggPSBkZXZpY2UtPmV4dGVuc2lvbjsKKworICBsb2dNZXNzYWdlKExPR19DQVRFR09SWShVU0JfSU8pLCAicmVsZWFzaW5nIGludGVyZmFjZTogJXUiLCBpbnRlcmZhY2UpOworCisgIGlmICh1c2JPcGVuVXNiZnNGaWxlKGRldngpKSB7CisgICAgdW5zaWduZWQgaW50IGFyZyA9IGludGVyZmFjZTsKKyAgICBpZiAoaW9jdGwoZGV2eC0+dXNiZnNGaWxlLCBVU0JERVZGU19SRUxFQVNFSU5URVJGQUNFLCAmYXJnKSAhPSAtMSkgcmV0dXJuIDE7CisgICAgaWYgKGVycm5vID09IEVOT0RFVikgcmV0dXJuIDE7CisgICAgbG9nU3lzdGVtRXJyb3IoIlVTQiBpbnRlcmZhY2UgcmVsZWFzZSIpOworICB9CisKKyAgcmV0dXJuIDA7Cit9CisKK2ludAordXNiU2V0QWx0ZXJuYXRpdmUgKAorICBVc2JEZXZpY2UgKmRldmljZSwKKyAgdW5zaWduZWQgY2hhciBpbnRlcmZhY2UsCisgIHVuc2lnbmVkIGNoYXIgYWx0ZXJuYXRpdmUKKykgeworICBVc2JEZXZpY2VFeHRlbnNpb24gKmRldnggPSBkZXZpY2UtPmV4dGVuc2lvbjsKKworICBsb2dNZXNzYWdlKExPR19DQVRFR09SWShVU0JfSU8pLCAic2V0dGluZyBhbHRlcm5hdGl2ZTogJXVbJXVdIiwgaW50ZXJmYWNlLCBhbHRlcm5hdGl2ZSk7CisKKyAgaWYgKHVzYk9wZW5Vc2Jmc0ZpbGUoZGV2eCkpIHsKKyAgICBzdHJ1Y3QgdXNiZGV2ZnNfc2V0aW50ZXJmYWNlIGFyZzsKKworICAgIG1lbXNldCgmYXJnLCAwLCBzaXplb2YoYXJnKSk7CisgICAgYXJnLmludGVyZmFjZSA9IGludGVyZmFjZTsKKyAgICBhcmcuYWx0c2V0dGluZyA9IGFsdGVybmF0aXZlOworCisgICAgaWYgKGlvY3RsKGRldngtPnVzYmZzRmlsZSwgVVNCREVWRlNfU0VUSU5URVJGQUNFLCAmYXJnKSAhPSAtMSkgcmV0dXJuIDE7CisgICAgbG9nU3lzdGVtRXJyb3IoIlVTQiBhbHRlcm5hdGl2ZSBzZXQiKTsKKyAgfQorCisgIHJldHVybiAwOworfQorCitpbnQKK3VzYlJlc2V0RGV2aWNlIChVc2JEZXZpY2UgKmRldmljZSkgeworICBVc2JEZXZpY2VFeHRlbnNpb24gKmRldnggPSBkZXZpY2UtPmV4dGVuc2lvbjsKKworICBsb2dNZXNzYWdlKExPR19DQVRFR09SWShVU0JfSU8pLCAicmVzZXQgZGV2aWNlIik7CisKKyAgaWYgKHVzYk9wZW5Vc2Jmc0ZpbGUoZGV2eCkpIHsKKyAgICB1bnNpZ25lZCBpbnQgYXJnID0gMDsKKworICAgIGlmIChpb2N0bChkZXZ4LT51c2Jmc0ZpbGUsIFVTQkRFVkZTX1JFU0VULCAmYXJnKSAhPSAtMSkgcmV0dXJuIDE7CisgICAgbG9nU3lzdGVtRXJyb3IoIlVTQiBkZXZpY2UgcmVzZXQiKTsKKyAgfQorCisgIHJldHVybiAwOworfQorCitpbnQKK3VzYkNsZWFySGFsdCAoVXNiRGV2aWNlICpkZXZpY2UsIHVuc2lnbmVkIGNoYXIgZW5kcG9pbnRBZGRyZXNzKSB7CisgIFVzYkRldmljZUV4dGVuc2lvbiAqZGV2eCA9IGRldmljZS0+ZXh0ZW5zaW9uOworCisgIGxvZ01lc3NhZ2UoTE9HX0NBVEVHT1JZKFVTQl9JTyksICJjbGVhciBoYWx0OiAlMDJYIiwgZW5kcG9pbnRBZGRyZXNzKTsKKworICBpZiAodXNiT3BlblVzYmZzRmlsZShkZXZ4KSkgeworICAgIHVuc2lnbmVkIGludCBhcmcgPSBlbmRwb2ludEFkZHJlc3M7CisKKyAgICBpZiAoaW9jdGwoZGV2eC0+dXNiZnNGaWxlLCBVU0JERVZGU19DTEVBUl9IQUxULCAmYXJnKSAhPSAtMSkgcmV0dXJuIDE7CisgICAgbG9nU3lzdGVtRXJyb3IoIlVTQiBlbmRwb2ludCBjbGVhciIpOworICB9CisKKyAgcmV0dXJuIDA7Cit9CisKK3NzaXplX3QKK3VzYkNvbnRyb2xUcmFuc2ZlciAoCisgIFVzYkRldmljZSAqZGV2aWNlLAorICB1aW50OF90IGRpcmVjdGlvbiwKKyAgdWludDhfdCByZWNpcGllbnQsCisgIHVpbnQ4X3QgdHlwZSwKKyAgdWludDhfdCByZXF1ZXN0LAorICB1aW50MTZfdCB2YWx1ZSwKKyAgdWludDE2X3QgaW5kZXgsCisgIHZvaWQgKmJ1ZmZlciwKKyAgdWludDE2X3QgbGVuZ3RoLAorICBpbnQgdGltZW91dAorKSB7CisgIFVzYkRldmljZUV4dGVuc2lvbiAqZGV2eCA9IGRldmljZS0+ZXh0ZW5zaW9uOworCisgIGlmICh1c2JPcGVuVXNiZnNGaWxlKGRldngpKSB7CisgICAgVXNiU2V0dXBQYWNrZXQgc2V0dXA7CisgICAgc3RydWN0IHVzYmRldmZzX2N0cmx0cmFuc2ZlciBhcmc7CisKKyAgICB1c2JNYWtlU2V0dXBQYWNrZXQoJnNldHVwLCBkaXJlY3Rpb24sIHJlY2lwaWVudCwgdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdCwgdmFsdWUsIGluZGV4LCBsZW5ndGgpOworCisgICAgbWVtc2V0KCZhcmcsIDAsIHNpemVvZihhcmcpKTsKKyAgICBhcmcuYlJlcXVlc3RUeXBlID0gc2V0dXAuYlJlcXVlc3RUeXBlOworICAgIGFyZy5iUmVxdWVzdCA9IHNldHVwLmJSZXF1ZXN0OworICAgIGFyZy53VmFsdWUgPSBnZXRMaXR0bGVFbmRpYW4xNihzZXR1cC53VmFsdWUpOworICAgIGFyZy53SW5kZXggPSBnZXRMaXR0bGVFbmRpYW4xNihzZXR1cC53SW5kZXgpOworICAgIGFyZy53TGVuZ3RoID0gZ2V0TGl0dGxlRW5kaWFuMTYoc2V0dXAud0xlbmd0aCk7CisgICAgYXJnLmRhdGEgPSBidWZmZXI7CisgICAgYXJnLnRpbWVvdXQgPSB0aW1lb3V0OworCisgICAgaWYgKGRpcmVjdGlvbiA9PSBVc2JDb250cm9sRGlyZWN0aW9uX091dHB1dCkgeworICAgICAgaWYgKGxlbmd0aCkgbG9nQnl0ZXMoTE9HX0NBVEVHT1JZKFVTQl9JTyksICJjb250cm9sIG91dHB1dCIsIGJ1ZmZlciwgbGVuZ3RoKTsKKyAgICB9CisKKyAgICB7CisgICAgICBzc2l6ZV90IGNvdW50ID0gaW9jdGwoZGV2eC0+dXNiZnNGaWxlLCBVU0JERVZGU19DT05UUk9MLCAmYXJnKTsKKworICAgICAgaWYgKGNvdW50ICE9IC0xKSB7CisgICAgICAgIGlmIChkaXJlY3Rpb24gPT0gVXNiQ29udHJvbERpcmVjdGlvbl9JbnB1dCkgeworICAgICAgICAgIGxvZ0J5dGVzKExPR19DQVRFR09SWShVU0JfSU8pLCAiY29udHJvbCBpbnB1dCIsIGJ1ZmZlciwgY291bnQpOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIGNvdW50OworICAgICAgfQorCisgICAgICBsb2dTeXN0ZW1FcnJvcigiVVNCIGNvbnRyb2wgdHJhbnNmZXIiKTsKKyAgICB9CisgIH0KKworICByZXR1cm4gLTE7Cit9CisKK3N0YXRpYyBVc2JFbmRwb2ludCAqCit1c2JSZWFwVVJCIChVc2JEZXZpY2UgKmRldmljZSwgaW50IHdhaXQpIHsKKyAgVXNiRGV2aWNlRXh0ZW5zaW9uICpkZXZ4ID0gZGV2aWNlLT5leHRlbnNpb247CisKKyAgaWYgKHVzYk9wZW5Vc2Jmc0ZpbGUoZGV2eCkpIHsKKyAgICBzdHJ1Y3QgdXNiZGV2ZnNfdXJiICp1cmI7CisKKyAgICBpZiAoaW9jdGwoZGV2eC0+dXNiZnNGaWxlLAorICAgICAgICAgICAgICB3YWl0PyBVU0JERVZGU19SRUFQVVJCOiBVU0JERVZGU19SRUFQVVJCTkRFTEFZLAorICAgICAgICAgICAgICAmdXJiKSAhPSAtMSkgeworICAgICAgaWYgKHVyYikgeworICAgICAgICBVc2JFbmRwb2ludCAqZW5kcG9pbnQ7CisKKyAgICAgICAgaWYgKChlbmRwb2ludCA9IHVzYkdldEVuZHBvaW50KGRldmljZSwgdXJiLT5lbmRwb2ludCkpKSB7CisgICAgICAgICAgVXNiRW5kcG9pbnRFeHRlbnNpb24gKmVwdHggPSBlbmRwb2ludC0+ZXh0ZW5zaW9uOworCisgICAgICAgICAgaWYgKGVucXVldWVJdGVtKGVwdHgtPmNvbXBsZXRlZFJlcXVlc3RzLCB1cmIpKSByZXR1cm4gZW5kcG9pbnQ7CisgICAgICAgICAgbG9nU3lzdGVtRXJyb3IoIlVTQiBjb21wbGV0ZWQgcmVxdWVzdCBlbnF1ZXVlIik7CisgICAgICAgICAgZnJlZSh1cmIpOworICAgICAgICB9CisgICAgICB9IGVsc2UgeworICAgICAgICBlcnJubyA9IEVBR0FJTjsKKyAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgaWYgKHdhaXQgfHwgKGVycm5vICE9IEVBR0FJTikpIGxvZ1N5c3RlbUVycm9yKCJVU0IgVVJCIHJlYXAiKTsKKyAgICB9CisgIH0KKworICByZXR1cm4gTlVMTDsKK30KKwordHlwZWRlZiBzdHJ1Y3QgeworICBjb25zdCBzdHJ1Y3QgdXNiZGV2ZnNfdXJiICp1cmI7CisgIGNvbnN0IGNoYXIgKmFjdGlvbjsKK30gVXNiRm9ybWF0VXJiRGF0YTsKKworc3RhdGljIHNpemVfdAordXNiRm9ybWF0VVJCIChjaGFyICpidWZmZXIsIHNpemVfdCBzaXplLCBjb25zdCB2b2lkICpkYXRhKSB7CisgIGNvbnN0IFVzYkZvcm1hdFVyYkRhdGEgKmZ1ZCA9IGRhdGE7CisgIGNvbnN0IHN0cnVjdCB1c2JkZXZmc191cmIgKnVyYiA9IGZ1ZC0+dXJiOworICBzaXplX3QgbGVuZ3RoOworCisgIFNUUl9CRUdJTihidWZmZXIsIHNpemUpOworICBTVFJfUFJJTlRGKCIlcyBVUkI6IiwgZnVkLT5hY3Rpb24pOworCisgIFNUUl9QUklOVEYoIiBBZHI6JXAiLCB1cmIpOworICBTVFJfUFJJTlRGKCIgRXB0OiUwMlgiLCB1cmItPmVuZHBvaW50KTsKKworICBTVFJfUFJJTlRGKCIgVHlwOiV1IiwgdXJiLT50eXBlKTsKKyAgeworICAgIHN0YXRpYyBjb25zdCBjaGFyICpjb25zdCB0eXBlc1tdID0geworICAgICAgW1VTQkRFVkZTX1VSQl9UWVBFX0NPTlRST0xdID0gImN0bCIsCisgICAgICBbVVNCREVWRlNfVVJCX1RZUEVfQlVMS10gPSAiYmxrIiwKKyAgICAgIFtVU0JERVZGU19VUkJfVFlQRV9JTlRFUlJVUFRdID0gImludCIsCisgICAgICBbVVNCREVWRlNfVVJCX1RZUEVfSVNPXSA9ICJpc28iCisgICAgfTsKKworICAgIGlmICh1cmItPnR5cGUgPCBBUlJBWV9DT1VOVCh0eXBlcykpIHsKKyAgICAgIGNvbnN0IGNoYXIgKnR5cGUgPSB0eXBlc1t1cmItPnR5cGVdOworICAgICAgaWYgKHR5cGUpIFNUUl9QUklOVEYoIiglcykiLCB0eXBlKTsKKyAgICB9CisgIH0KKworICBTVFJfUFJJTlRGKCIgRmxnOiUwMlgiLCB1cmItPmZsYWdzKTsKKyAgeworICAgIHR5cGVkZWYgc3RydWN0IHsKKyAgICAgIHVuc2lnbmVkIGNoYXIgYml0OworICAgICAgY29uc3QgY2hhciAqbmFtZTsKKyAgICB9IFVyYkZsYWdFbnRyeTsKKworICAgIHN0YXRpYyBjb25zdCBVcmJGbGFnRW50cnkgdXJiRmxhZ1RhYmxlW10gPSB7CisjaWZkZWYgVVNCREVWRlNfVVJCX1NIT1JUX05PVF9PSworICAgICAgeyAuYml0ID0gVVNCREVWRlNfVVJCX1NIT1JUX05PVF9PSywKKyAgICAgICAgLm5hbWUgPSAic3BkIgorICAgICAgfSwKKyNlbmRpZiAvKiBVU0JERVZGU19VUkJfU0hPUlRfTk9UX09LICovCisKKyNpZmRlZiBVU0JERVZGU19VUkJfSVNPX0FTQVAKKyAgICAgIHsgLmJpdCA9IFVTQkRFVkZTX1VSQl9JU09fQVNBUCwKKyAgICAgICAgLm5hbWUgPSAiaXNhIgorICAgICAgfSwKKyNlbmRpZiAvKiBVU0JERVZGU19VUkJfSVNPX0FTQVAgKi8KKworI2lmZGVmIFVTQkRFVkZTX1VSQl9CVUxLX0NPTlRJTlVBVElPTgorICAgICAgeyAuYml0ID0gVVNCREVWRlNfVVJCX0JVTEtfQ09OVElOVUFUSU9OLAorICAgICAgICAubmFtZSA9ICJia2MiCisgICAgICB9LAorI2VuZGlmIC8qIFVTQkRFVkZTX1VSQl9CVUxLX0NPTlRJTlVBVElPTiAqLworCisjaWZkZWYgVVNCREVWRlNfVVJCX05PX0ZTQlIKKyAgICAgIHsgLmJpdCA9IFVTQkRFVkZTX1VSQl9OT19GU0JSLAorICAgICAgICAubmFtZSA9ICJub2YiCisgICAgICB9LAorI2VuZGlmIC8qIFVTQkRFVkZTX1VSQl9OT19GU0JSICovCisKKyNpZmRlZiBVU0JERVZGU19VUkJfWkVST19QQUNLRVQKKyAgICAgIHsgLmJpdCA9IFVTQkRFVkZTX1VSQl9aRVJPX1BBQ0tFVCwKKyAgICAgICAgLm5hbWUgPSAienBrIgorICAgICAgfSwKKyNlbmRpZiAvKiBVU0JERVZGU19VUkJfWkVST19QQUNLRVQgKi8KKworI2lmZGVmIFVTQkRFVkZTX1VSQl9OT19JTlRFUlJVUFQKKyAgICAgIHsgLmJpdCA9IFVTQkRFVkZTX1VSQl9OT19JTlRFUlJVUFQsCisgICAgICAgIC5uYW1lID0gIm5vaSIKKyAgICAgIH0sCisjZW5kaWYgLyogVVNCREVWRlNfVVJCX05PX0lOVEVSUlVQVCAqLworCisgICAgICB7IC5iaXQ9MCwgLm5hbWU9TlVMTCB9CisgICAgfTsKKworICAgIGludCBmaXJzdCA9IDE7CisgICAgY29uc3QgVXJiRmxhZ0VudHJ5ICpmbGFnID0gdXJiRmxhZ1RhYmxlOworCisgICAgd2hpbGUgKGZsYWctPmJpdCkgeworICAgICAgaWYgKHVyYi0+ZmxhZ3MgJiBmbGFnLT5iaXQpIHsKKyAgICAgICAgU1RSX1BSSU5URigiJWMlcyIsIChmaXJzdD8gJygnOiAnLCcpLCBmbGFnLT5uYW1lKTsKKyAgICAgICAgZmlyc3QgPSAwOworICAgICAgfQorCisgICAgICBmbGFnICs9IDE7CisgICAgfQorCisgICAgaWYgKCFmaXJzdCkgU1RSX1BSSU5URigiKSIpOworICB9CisKKyAgU1RSX1BSSU5URigiIEJ1ZjolcCIsIHVyYi0+YnVmZmVyKTsKKyAgU1RSX1BSSU5URigiIFNpejolZCIsIHVyYi0+YnVmZmVyX2xlbmd0aCk7CisgIFNUUl9QUklOVEYoIiBMZW46JWQiLCB1cmItPmFjdHVhbF9sZW5ndGgpOworICBTVFJfUFJJTlRGKCIgU2lnOiVkIiwgdXJiLT5zaWducik7CisKKyAgeworICAgIGludCBlcnJvciA9IHVyYi0+c3RhdHVzOworICAgIFNUUl9QUklOVEYoIiBFcnI6JWQiLCBlcnJvcik7CisKKyAgICBpZiAoZXJyb3IpIHsKKyAgICAgIGlmIChlcnJvciA8IDApIGVycm9yID0gLWVycm9yOworICAgICAgU1RSX1BSSU5URigiKCVzKSIsIHN0cmVycm9yKGVycm9yKSk7CisgICAgfQorICB9CisKKyAgbGVuZ3RoID0gU1RSX0xFTkdUSDsKKyAgU1RSX0VORDsKKyAgcmV0dXJuIGxlbmd0aDsKK30KKworc3RhdGljIHZvaWQKK3VzYkxvZ1VSQiAoY29uc3Qgc3RydWN0IHVzYmRldmZzX3VyYiAqdXJiLCBjb25zdCBjaGFyICphY3Rpb24pIHsKKyAgY29uc3QgVXNiRm9ybWF0VXJiRGF0YSBmdWQgPSB7CisgICAgLnVyYiA9IHVyYiwKKyAgICAuYWN0aW9uID0gYWN0aW9uCisgIH07CisKKyAgbG9nRGF0YShMT0dfQ0FURUdPUlkoVVNCX0lPKSwgdXNiRm9ybWF0VVJCLCAmZnVkKTsKK30KKworc3RhdGljIHN0cnVjdCB1c2JkZXZmc191cmIgKgordXNiTWFrZVVSQiAoCisgIGNvbnN0IFVzYkVuZHBvaW50RGVzY3JpcHRvciAqZW5kcG9pbnQsCisgIHZvaWQgKmJ1ZmZlciwKKyAgc2l6ZV90IGxlbmd0aCwKKyAgdm9pZCAqY29udGV4dAorKSB7CisgIHN0cnVjdCB1c2JkZXZmc191cmIgKnVyYjsKKworICBpZiAoKHVyYiA9IG1hbGxvYyhzaXplb2YoKnVyYikgKyBsZW5ndGgpKSkgeworICAgIG1lbXNldCh1cmIsIDAsIHNpemVvZigqdXJiKSk7CisgICAgdXJiLT5lbmRwb2ludCA9IGVuZHBvaW50LT5iRW5kcG9pbnRBZGRyZXNzOworICAgIHVyYi0+ZmxhZ3MgPSAwOworICAgIHVyYi0+c2lnbnIgPSAwOworICAgIHVyYi0+dXNlcmNvbnRleHQgPSBjb250ZXh0OworCisgICAgaWYgKCEodXJiLT5idWZmZXJfbGVuZ3RoID0gbGVuZ3RoKSkgeworICAgICAgdXJiLT5idWZmZXIgPSBOVUxMOworICAgIH0gZWxzZSB7CisgICAgICB1cmItPmJ1ZmZlciA9IHVyYiArIDE7CisgICAgICBpZiAoYnVmZmVyKSBtZW1jcHkodXJiLT5idWZmZXIsIGJ1ZmZlciwgbGVuZ3RoKTsKKyAgICB9CisKKyAgICBzd2l0Y2ggKFVTQl9FTkRQT0lOVF9UUkFOU0ZFUihlbmRwb2ludCkpIHsKKyAgICAgIGNhc2UgVXNiRW5kcG9pbnRUcmFuc2Zlcl9Db250cm9sOgorICAgICAgICB1cmItPnR5cGUgPSBVU0JERVZGU19VUkJfVFlQRV9DT05UUk9MOworICAgICAgICBicmVhazsKKworICAgICAgY2FzZSBVc2JFbmRwb2ludFRyYW5zZmVyX0lzb2Nocm9ub3VzOgorICAgICAgICB1cmItPnR5cGUgPSBVU0JERVZGU19VUkJfVFlQRV9JU087CisgICAgICAgIGJyZWFrOworCisgICAgICBjYXNlIFVzYkVuZHBvaW50VHJhbnNmZXJfSW50ZXJydXB0OgorICAgICAgICB1cmItPnR5cGUgPSBVU0JERVZGU19VUkJfVFlQRV9JTlRFUlJVUFQ7CisgICAgICAgIGJyZWFrOworCisgICAgICBjYXNlIFVzYkVuZHBvaW50VHJhbnNmZXJfQnVsazoKKyAgICAgICAgdXJiLT50eXBlID0gVVNCREVWRlNfVVJCX1RZUEVfQlVMSzsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgcmV0dXJuIHVyYjsKKyAgfSBlbHNlIHsKKyAgICBsb2dNYWxsb2NFcnJvcigpOworICB9CisKKyAgcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBpbnQKK3VzYlN1Ym1pdFVSQiAoc3RydWN0IHVzYmRldmZzX3VyYiAqdXJiLCBVc2JFbmRwb2ludCAqZW5kcG9pbnQpIHsKKyAgY29uc3QgVXNiRW5kcG9pbnREZXNjcmlwdG9yICpkZXNjcmlwdG9yID0gZW5kcG9pbnQtPmRlc2NyaXB0b3I7CisgIFVzYkRldmljZSAqZGV2aWNlID0gZW5kcG9pbnQtPmRldmljZTsKKyAgVXNiRGV2aWNlRXh0ZW5zaW9uICpkZXZ4ID0gZGV2aWNlLT5leHRlbnNpb247CisKKyAgd2hpbGUgKDEpIHsKKyAgICB1c2JMb2dVUkIodXJiLCAic3VibWl0dGluZyIpOworCisgICAgaWYgKCh1cmItPmVuZHBvaW50ICYgVXNiRW5kcG9pbnREaXJlY3Rpb25fTWFzaykgPT0gVXNiRW5kcG9pbnREaXJlY3Rpb25fT3V0cHV0KSB7CisgICAgICBsb2dCeXRlcyhMT0dfQ0FURUdPUlkoVVNCX0lPKSwgIlVSQiBvdXRwdXQiLCB1cmItPmJ1ZmZlciwgdXJiLT5idWZmZXJfbGVuZ3RoKTsKKyAgICB9CisKKyAgICBpZiAoaW9jdGwoZGV2eC0+dXNiZnNGaWxlLCBVU0JERVZGU19TVUJNSVRVUkIsIHVyYikgIT0gLTEpIHsKKyAgICAgIGxvZ01lc3NhZ2UoTE9HX0NBVEVHT1JZKFVTQl9JTyksICJVUkIgc3VibWl0dGVkIik7CisgICAgICByZXR1cm4gMTsKKyAgICB9CisKKyAgICBpZiAoKGVycm5vID09IEVJTlZBTCkgJiYKKyAgICAgICAgKFVTQl9FTkRQT0lOVF9UUkFOU0ZFUihkZXNjcmlwdG9yKSA9PSBVc2JFbmRwb2ludFRyYW5zZmVyX0ludGVycnVwdCkgJiYKKyAgICAgICAgKHVyYi0+dHlwZSA9PSBVU0JERVZGU19VUkJfVFlQRV9CVUxLKSkgeworICAgICAgbG9nTWVzc2FnZShMT0dfQ0FURUdPUlkoVVNCX0lPKSwgImNoYW5naW5nIFVSQiB0eXBlIGZyb20gYnVsayB0byBpbnRlcnJ1cHQiKTsKKyAgICAgIHVyYi0+dHlwZSA9IFVTQkRFVkZTX1VSQl9UWVBFX0lOVEVSUlVQVDsKKyAgICAgIGNvbnRpbnVlOworICAgIH0KKworICAgIC8qIFVIQ0kgc3VwcG9ydCByZXR1cm5zIEVOWElPIGlmIGEgVVJCIGlzIGFscmVhZHkgc3VibWl0dGVkLiAqLworICAgIGxvZ1N5c3RlbUVycm9yKCJVU0IgVVJCIHN1Ym1pdCIpOworICAgIHJldHVybiAwOworICB9Cit9CisKK3ZvaWQgKgordXNiU3VibWl0UmVxdWVzdCAoCisgIFVzYkRldmljZSAqZGV2aWNlLAorICB1bnNpZ25lZCBjaGFyIGVuZHBvaW50QWRkcmVzcywKKyAgdm9pZCAqYnVmZmVyLAorICBzaXplX3QgbGVuZ3RoLAorICB2b2lkICpjb250ZXh0CispIHsKKyAgVXNiRGV2aWNlRXh0ZW5zaW9uICpkZXZ4ID0gZGV2aWNlLT5leHRlbnNpb247CisKKyAgaWYgKHVzYk9wZW5Vc2Jmc0ZpbGUoZGV2eCkpIHsKKyAgICBVc2JFbmRwb2ludCAqZW5kcG9pbnQ7CisKKyAgICBpZiAoKGVuZHBvaW50ID0gdXNiR2V0RW5kcG9pbnQoZGV2aWNlLCBlbmRwb2ludEFkZHJlc3MpKSkgeworICAgICAgVXNiRW5kcG9pbnRFeHRlbnNpb24gKmVwdHggPSBlbmRwb2ludC0+ZXh0ZW5zaW9uOworICAgICAgc3RydWN0IHVzYmRldmZzX3VyYiAqdXJiOworCisgICAgICBpZiAoKHVyYiA9IHVzYk1ha2VVUkIoZW5kcG9pbnQtPmRlc2NyaXB0b3IsIGJ1ZmZlciwgbGVuZ3RoLCBjb250ZXh0KSkpIHsKKyAgICAgICAgdXJiLT5hY3R1YWxfbGVuZ3RoID0gMDsKKyAgICAgICAgdXJiLT5zaWduciA9IGVwdHgtPm1vbml0b3Iuc2lnbmFsLm51bWJlcjsKKworICAgICAgICBpZiAodXNiU3VibWl0VVJCKHVyYiwgZW5kcG9pbnQpKSB7CisgICAgICAgICAgcmV0dXJuIHVyYjsKKyAgICAgICAgfQorCisgICAgICAgIGZyZWUodXJiKTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIGxvZ1N5c3RlbUVycm9yKCJVU0IgVVJCIGFsbG9jYXRlIik7CisgICAgICB9CisgICAgfQorICB9CisKKyAgcmV0dXJuIE5VTEw7Cit9CisKK2ludAordXNiQ2FuY2VsUmVxdWVzdCAoVXNiRGV2aWNlICpkZXZpY2UsIHZvaWQgKnJlcXVlc3QpIHsKKyAgVXNiRGV2aWNlRXh0ZW5zaW9uICpkZXZ4ID0gZGV2aWNlLT5leHRlbnNpb247CisKKyAgaWYgKHVzYk9wZW5Vc2Jmc0ZpbGUoZGV2eCkpIHsKKyAgICBpbnQgcmVhcCA9IDE7CisKKyAgICBpZiAoaW9jdGwoZGV2eC0+dXNiZnNGaWxlLCBVU0JERVZGU19ESVNDQVJEVVJCLCByZXF1ZXN0KSA9PSAtMSkgeworICAgICAgaWYgKGVycm5vID09IEVOT0RFVikgeworICAgICAgICByZWFwID0gMDsKKyAgICAgIH0gZWxzZSBpZiAoZXJybm8gIT0gRUlOVkFMKSB7CisgICAgICAgIGxvZ1N5c3RlbUVycm9yKCJVU0IgVVJCIGRpc2NhcmQiKTsKKyAgICAgIH0KKyAgICB9CisgICAgCisgICAgeworICAgICAgc3RydWN0IHVzYmRldmZzX3VyYiAqdXJiID0gcmVxdWVzdDsKKyAgICAgIFVzYkVuZHBvaW50ICplbmRwb2ludDsKKworICAgICAgaWYgKChlbmRwb2ludCA9IHVzYkdldEVuZHBvaW50KGRldmljZSwgdXJiLT5lbmRwb2ludCkpKSB7CisgICAgICAgIFVzYkVuZHBvaW50RXh0ZW5zaW9uICplcHR4ID0gZW5kcG9pbnQtPmV4dGVuc2lvbjsKKyAgICAgICAgaW50IGZvdW5kID0gMTsKKworICAgICAgICB3aGlsZSAoIWRlbGV0ZUl0ZW0oZXB0eC0+Y29tcGxldGVkUmVxdWVzdHMsIHJlcXVlc3QpKSB7CisgICAgICAgICAgaWYgKCFyZWFwKSBicmVhazsKKworICAgICAgICAgIGlmICghdXNiUmVhcFVSQihkZXZpY2UsIDApKSB7CisgICAgICAgICAgICBmb3VuZCA9IDA7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZiAoZm91bmQpIHsKKyAgICAgICAgICBmcmVlKHJlcXVlc3QpOworICAgICAgICAgIHJldHVybiAxOworICAgICAgICB9CisKKyAgICAgICAgbG9nTWVzc2FnZShMT0dfRVJSLCAiVVNCIHJlcXVlc3Qgbm90IGZvdW5kOiB1cmI9JXAgZXB0PSUwMlgiLAorICAgICAgICAgICAgICAgICAgIHVyYiwgdXJiLT5lbmRwb2ludCk7CisgICAgICB9CisgICAgfQorICB9CisKKyAgcmV0dXJuIDA7Cit9CisKK3ZvaWQgKgordXNiUmVhcFJlc3BvbnNlICgKKyAgVXNiRGV2aWNlICpkZXZpY2UsCisgIHVuc2lnbmVkIGNoYXIgZW5kcG9pbnRBZGRyZXNzLAorICBVc2JSZXNwb25zZSAqcmVzcG9uc2UsCisgIGludCB3YWl0CispIHsKKyAgVXNiRW5kcG9pbnQgKmVuZHBvaW50OworCisgIGlmICgoZW5kcG9pbnQgPSB1c2JHZXRFbmRwb2ludChkZXZpY2UsIGVuZHBvaW50QWRkcmVzcykpKSB7CisgICAgVXNiRW5kcG9pbnRFeHRlbnNpb24gKmVwdHggPSBlbmRwb2ludC0+ZXh0ZW5zaW9uOworICAgIHN0cnVjdCB1c2JkZXZmc191cmIgKnVyYjsKKworICAgIHdoaWxlICghKHVyYiA9IGRlcXVldWVJdGVtKGVwdHgtPmNvbXBsZXRlZFJlcXVlc3RzKSkpIHsKKyAgICAgIGlmICghdXNiUmVhcFVSQihkZXZpY2UsIHdhaXQpKSByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICB1c2JMb2dVUkIodXJiLCAicmVhcGVkIik7CisKKyAgICByZXNwb25zZS0+Y29udGV4dCA9IHVyYi0+dXNlcmNvbnRleHQ7CisgICAgcmVzcG9uc2UtPmJ1ZmZlciA9IHVyYi0+YnVmZmVyOworICAgIHJlc3BvbnNlLT5zaXplID0gdXJiLT5idWZmZXJfbGVuZ3RoOworCisgICAgaWYgKChyZXNwb25zZS0+ZXJyb3IgPSB1cmItPnN0YXR1cykpIHsKKyAgICAgIGlmIChyZXNwb25zZS0+ZXJyb3IgPCAwKSByZXNwb25zZS0+ZXJyb3IgPSAtcmVzcG9uc2UtPmVycm9yOworICAgICAgZXJybm8gPSByZXNwb25zZS0+ZXJyb3I7CisgICAgICBsb2dTeXN0ZW1FcnJvcigiVVNCIFVSQiBzdGF0dXMiKTsKKyAgICAgIHJlc3BvbnNlLT5jb3VudCA9IC0xOworICAgIH0gZWxzZSB7CisgICAgICByZXNwb25zZS0+Y291bnQgPSB1cmItPmFjdHVhbF9sZW5ndGg7CisKKyAgICAgIHN3aXRjaCAoVVNCX0VORFBPSU5UX0RJUkVDVElPTihlbmRwb2ludC0+ZGVzY3JpcHRvcikpIHsKKyAgICAgICAgY2FzZSBVc2JFbmRwb2ludERpcmVjdGlvbl9JbnB1dDoKKyAgICAgICAgICBpZiAoIXVzYkFwcGx5SW5wdXRGaWx0ZXJzKGVuZHBvaW50LCByZXNwb25zZS0+YnVmZmVyLCByZXNwb25zZS0+c2l6ZSwgJnJlc3BvbnNlLT5jb3VudCkpIHsKKyAgICAgICAgICAgIHJlc3BvbnNlLT5lcnJvciA9IEVJTzsKKyAgICAgICAgICAgIHJlc3BvbnNlLT5jb3VudCA9IC0xOworICAgICAgICAgIH0KKyAgICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gdXJiOworICB9CisKKyAgcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBzc2l6ZV90Cit1c2JCdWxrVHJhbnNmZXIgKAorICBVc2JFbmRwb2ludCAqZW5kcG9pbnQsCisgIHZvaWQgKmJ1ZmZlciwKKyAgc2l6ZV90IGxlbmd0aCwKKyAgaW50IHRpbWVvdXQKKykgeworICBVc2JEZXZpY2VFeHRlbnNpb24gKmRldnggPSBlbmRwb2ludC0+ZGV2aWNlLT5leHRlbnNpb247CisKKyAgaWYgKHVzYk9wZW5Vc2Jmc0ZpbGUoZGV2eCkpIHsKKyAgICBzdHJ1Y3QgdXNiZGV2ZnNfYnVsa3RyYW5zZmVyIGFyZzsKKworICAgIG1lbXNldCgmYXJnLCAwLCBzaXplb2YoYXJnKSk7CisgICAgYXJnLmVwID0gZW5kcG9pbnQtPmRlc2NyaXB0b3ItPmJFbmRwb2ludEFkZHJlc3M7CisgICAgYXJnLmRhdGEgPSBidWZmZXI7CisgICAgYXJnLmxlbiA9IGxlbmd0aDsKKyAgICBhcmcudGltZW91dCA9IHRpbWVvdXQ7CisKKyAgICB7CisgICAgICBpbnQgY291bnQgPSBpb2N0bChkZXZ4LT51c2Jmc0ZpbGUsIFVTQkRFVkZTX0JVTEssICZhcmcpOworICAgICAgaWYgKGNvdW50ICE9IC0xKSByZXR1cm4gY291bnQ7CisgICAgICBpZiAoVVNCX0VORFBPSU5UX0RJUkVDVElPTihlbmRwb2ludC0+ZGVzY3JpcHRvcikgPT0gVXNiRW5kcG9pbnREaXJlY3Rpb25fSW5wdXQpCisgICAgICAgIGlmIChlcnJubyA9PSBFVElNRURPVVQpCisgICAgICAgICAgZXJybm8gPSBFQUdBSU47CisgICAgICBpZiAoZXJybm8gIT0gRUFHQUlOKSBsb2dTeXN0ZW1FcnJvcigiVVNCIGJ1bGsgdHJhbnNmZXIiKTsKKyAgICB9CisgIH0KKworICByZXR1cm4gLTE7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgdXNiZGV2ZnNfdXJiICoKK3VzYkludGVycnVwdFRyYW5zZmVyICgKKyAgVXNiRW5kcG9pbnQgKmVuZHBvaW50LAorICB2b2lkICpidWZmZXIsCisgIHNpemVfdCBsZW5ndGgsCisgIGludCB0aW1lb3V0CispIHsKKyAgVXNiRGV2aWNlICpkZXZpY2UgPSBlbmRwb2ludC0+ZGV2aWNlOworICBzdHJ1Y3QgdXNiZGV2ZnNfdXJiICp1cmIgPSB1c2JTdWJtaXRSZXF1ZXN0KGRldmljZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmRwb2ludC0+ZGVzY3JpcHRvci0+YkVuZHBvaW50QWRkcmVzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXIsIGxlbmd0aCwgTlVMTCk7CisKKyAgaWYgKHVyYikgeworICAgIFVzYkVuZHBvaW50RXh0ZW5zaW9uICplcHR4ID0gZW5kcG9pbnQtPmV4dGVuc2lvbjsKKyAgICBpbnQgcmV0cnlJbnRlcnZhbCA9IGVuZHBvaW50LT5kZXNjcmlwdG9yLT5iSW50ZXJ2YWwgKyAxOworICAgIFRpbWVQZXJpb2QgcGVyaW9kOworCisgICAgaWYgKHRpbWVvdXQpIHN0YXJ0VGltZVBlcmlvZCgmcGVyaW9kLCB0aW1lb3V0KTsKKworICAgIGRvIHsKKyAgICAgIGlmICh1c2JSZWFwVVJCKGRldmljZSwgMCkgJiYKKyAgICAgICAgICBkZWxldGVJdGVtKGVwdHgtPmNvbXBsZXRlZFJlcXVlc3RzLCB1cmIpKSB7CisgICAgICAgIGlmICghdXJiLT5zdGF0dXMpIHJldHVybiB1cmI7CisgICAgICAgIGlmICgoZXJybm8gPSB1cmItPnN0YXR1cykgPCAwKSBlcnJubyA9IC1lcnJubzsKKyAgICAgICAgZnJlZSh1cmIpOworICAgICAgICBicmVhazsKKyAgICAgIH0KKworICAgICAgaWYgKCF0aW1lb3V0IHx8IGFmdGVyVGltZVBlcmlvZCgmcGVyaW9kLCBOVUxMKSkgeworICAgICAgICB1c2JDYW5jZWxSZXF1ZXN0KGRldmljZSwgdXJiKTsKKyAgICAgICAgZXJybm8gPSBFVElNRURPVVQ7CisgICAgICAgIGJyZWFrOworICAgICAgfQorCisgICAgICBhc3luY1dhaXQocmV0cnlJbnRlcnZhbCk7CisgICAgfSB3aGlsZSAoMSk7CisgIH0KKworICByZXR1cm4gTlVMTDsKK30KKworaW50Cit1c2JNb25pdG9ySW5wdXRFbmRwb2ludCAoCisgIFVzYkRldmljZSAqZGV2aWNlLCB1bnNpZ25lZCBjaGFyIGVuZHBvaW50TnVtYmVyLAorICBBc3luY01vbml0b3JDYWxsYmFjayAqY2FsbGJhY2ssIHZvaWQgKmRhdGEKKykgeworICByZXR1cm4gdXNiTW9uaXRvcklucHV0UGlwZShkZXZpY2UsIGVuZHBvaW50TnVtYmVyLCBjYWxsYmFjaywgZGF0YSk7Cit9CisKK3NzaXplX3QKK3VzYlJlYWRFbmRwb2ludCAoCisgIFVzYkRldmljZSAqZGV2aWNlLAorICB1bnNpZ25lZCBjaGFyIGVuZHBvaW50TnVtYmVyLAorICB2b2lkICpidWZmZXIsCisgIHNpemVfdCBsZW5ndGgsCisgIGludCB0aW1lb3V0CispIHsKKyAgc3NpemVfdCBjb3VudCA9IC0xOworICBVc2JFbmRwb2ludCAqZW5kcG9pbnQ7CisKKyAgbG9nTWVzc2FnZShMT0dfQ0FURUdPUlkoVVNCX0lPKSwgInJlYWRpbmcgZW5kcG9pbnQ6ICV1IiwgZW5kcG9pbnROdW1iZXIpOworCisgIGlmICgoZW5kcG9pbnQgPSB1c2JHZXRJbnB1dEVuZHBvaW50KGRldmljZSwgZW5kcG9pbnROdW1iZXIpKSkgeworICAgIFVzYkVuZHBvaW50VHJhbnNmZXIgdHJhbnNmZXIgPSBVU0JfRU5EUE9JTlRfVFJBTlNGRVIoZW5kcG9pbnQtPmRlc2NyaXB0b3IpOworCisgICAgc3dpdGNoICh0cmFuc2ZlcikgeworICAgICAgY2FzZSBVc2JFbmRwb2ludFRyYW5zZmVyX0ludGVycnVwdDoKKyAgICAgICAgaWYgKCFMSU5VWF9VU0JfSU5QVVRfVFJFQVRfSU5URVJSVVBUX0FTX0JVTEspIHsKKyAgICAgICAgICBzdHJ1Y3QgdXNiZGV2ZnNfdXJiICp1cmIgPSB1c2JJbnRlcnJ1cHRUcmFuc2ZlcihlbmRwb2ludCwgTlVMTCwgbGVuZ3RoLCB0aW1lb3V0KTsKKworICAgICAgICAgIGlmICh1cmIpIHsKKyAgICAgICAgICAgIGNvdW50ID0gdXJiLT5hY3R1YWxfbGVuZ3RoOworICAgICAgICAgICAgaWYgKGNvdW50ID4gbGVuZ3RoKSBjb3VudCA9IGxlbmd0aDsKKyAgICAgICAgICAgIG1lbWNweShidWZmZXIsIHVyYi0+YnVmZmVyLCBjb3VudCk7CisgICAgICAgICAgICBmcmVlKHVyYik7CisgICAgICAgICAgfQorCisgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgLyogZmFsbCB0aHJvdWdoICovCisKKyAgICAgIGNhc2UgVXNiRW5kcG9pbnRUcmFuc2Zlcl9CdWxrOgorICAgICAgICBjb3VudCA9IHVzYkJ1bGtUcmFuc2ZlcihlbmRwb2ludCwgYnVmZmVyLCBsZW5ndGgsIHRpbWVvdXQpOworICAgICAgICBicmVhazsKKworICAgICAgZGVmYXVsdDoKKyAgICAgICAgbG9nTWVzc2FnZShMT0dfRVJSLCAiVVNCIGlucHV0IHRyYW5zZmVyIG5vdCBzdXBwb3J0ZWQ6ICVkIiwgdHJhbnNmZXIpOworICAgICAgICBlcnJubyA9IEVOT1NZUzsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgaWYgKGNvdW50ICE9IC0xKSB7CisgICAgICBpZiAoIXVzYkFwcGx5SW5wdXRGaWx0ZXJzKGVuZHBvaW50LCBidWZmZXIsIGxlbmd0aCwgJmNvdW50KSkgeworICAgICAgICBlcnJubyA9IEVJTzsKKyAgICAgICAgY291bnQgPSAtMTsKKyAgICAgIH0KKyAgICB9CisgIH0KKworICByZXR1cm4gY291bnQ7Cit9CisKK3NzaXplX3QKK3VzYldyaXRlRW5kcG9pbnQgKAorICBVc2JEZXZpY2UgKmRldmljZSwKKyAgdW5zaWduZWQgY2hhciBlbmRwb2ludE51bWJlciwKKyAgY29uc3Qgdm9pZCAqYnVmZmVyLAorICBzaXplX3QgbGVuZ3RoLAorICBpbnQgdGltZW91dAorKSB7CisgIFVzYkVuZHBvaW50ICplbmRwb2ludDsKKworICBpZiAoKGVuZHBvaW50ID0gdXNiR2V0T3V0cHV0RW5kcG9pbnQoZGV2aWNlLCBlbmRwb2ludE51bWJlcikpKSB7CisgICAgVXNiRW5kcG9pbnRUcmFuc2ZlciB0cmFuc2ZlciA9IFVTQl9FTkRQT0lOVF9UUkFOU0ZFUihlbmRwb2ludC0+ZGVzY3JpcHRvcik7CisKKyAgICB1c2JMb2dFbmRwb2ludERhdGEoZW5kcG9pbnQsICJvdXRwdXQiLCBidWZmZXIsIGxlbmd0aCk7CisKKyAgICBzd2l0Y2ggKHRyYW5zZmVyKSB7CisgICAgICBjYXNlIFVzYkVuZHBvaW50VHJhbnNmZXJfSW50ZXJydXB0OgorICAgICAgY2FzZSBVc2JFbmRwb2ludFRyYW5zZmVyX0J1bGs6CisgICAgICAgIHJldHVybiB1c2JCdWxrVHJhbnNmZXIoZW5kcG9pbnQsICh2b2lkICopYnVmZmVyLCBsZW5ndGgsIHRpbWVvdXQpOworLyoKKyAgICAgIGNhc2UgVXNiRW5kcG9pbnRUcmFuc2Zlcl9JbnRlcnJ1cHQ6IHsKKyAgICAgICAgc3RydWN0IHVzYmRldmZzX3VyYiAqdXJiID0gdXNiSW50ZXJydXB0VHJhbnNmZXIoZW5kcG9pbnQsICh2b2lkICopYnVmZmVyLCBsZW5ndGgsIHRpbWVvdXQpOworCisgICAgICAgIGlmICh1cmIpIHsKKyAgICAgICAgICBzc2l6ZV90IGNvdW50ID0gdXJiLT5hY3R1YWxfbGVuZ3RoOworICAgICAgICAgIGZyZWUodXJiKTsKKyAgICAgICAgICByZXR1cm4gY291bnQ7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgICB9CisqLworICAgICAgZGVmYXVsdDoKKyAgICAgICAgbG9nTWVzc2FnZShMT0dfRVJSLCAiVVNCIG91dHB1dCB0cmFuc2ZlciBub3Qgc3VwcG9ydGVkOiAlZCIsIHRyYW5zZmVyKTsKKyAgICAgICAgZXJybm8gPSBFTk9TWVM7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgfQorICByZXR1cm4gLTE7Cit9CisKK2ludAordXNiUmVhZERldmljZURlc2NyaXB0b3IgKFVzYkRldmljZSAqZGV2aWNlKSB7CisgIGRldmljZS0+ZGVzY3JpcHRvciA9IGRldmljZS0+ZXh0ZW5zaW9uLT5ob3N0LT51c2JEZXNjcmlwdG9yOworICByZXR1cm4gMTsKK30KKworc3RhdGljIGludAordXNiSGFuZGxlSW5wdXRVUkIgKFVzYkVuZHBvaW50ICplbmRwb2ludCwgc3RydWN0IHVzYmRldmZzX3VyYiAqdXJiKSB7CisgIGRlbGV0ZUl0ZW0oZW5kcG9pbnQtPmRpcmVjdGlvbi5pbnB1dC5wZW5kaW5nLnJlcXVlc3RzLCB1cmIpOworCisgIGlmICh1cmItPmFjdHVhbF9sZW5ndGggPCAwKSB7CisgICAgdXNiTG9nSW5wdXRQcm9ibGVtKGVuZHBvaW50LCAiZGF0YSBub3QgYXZhaWxhYmxlIik7CisgICAgcmV0dXJuIDA7CisgIH0KKworICByZXR1cm4gdXNiSGFuZGxlSW5wdXRSZXNwb25zZShlbmRwb2ludCwgdXJiLT5idWZmZXIsIHVyYi0+YWN0dWFsX2xlbmd0aCk7Cit9CisKK3N0YXRpYyB2b2lkCit1c2JJbml0aWFsaXplU2lnbmFsTW9uaXRvciAoVXNiRW5kcG9pbnRFeHRlbnNpb24gKmVwdHgpIHsKKyAgZXB0eC0+bW9uaXRvci5zaWduYWwuaGFuZGxlID0gTlVMTDsKKyAgZXB0eC0+bW9uaXRvci5zaWduYWwubnVtYmVyID0gMDsKK30KKworc3RhdGljIHZvaWQKK3VzYlN0b3BTaWduYWxNb25pdG9yIChVc2JFbmRwb2ludEV4dGVuc2lvbiAqZXB0eCkgeworICBpZiAoZXB0eC0+bW9uaXRvci5zaWduYWwuaGFuZGxlKSB7CisgICAgYXN5bmNDYW5jZWxSZXF1ZXN0KGVwdHgtPm1vbml0b3Iuc2lnbmFsLmhhbmRsZSk7CisgICAgZXB0eC0+bW9uaXRvci5zaWduYWwuaGFuZGxlID0gTlVMTDsKKyAgfQorCisgIGlmIChlcHR4LT5tb25pdG9yLnNpZ25hbC5udW1iZXIpIHsKKyAgICBhc3luY1JlbGlucXVpc2hTaWduYWxOdW1iZXIoZXB0eC0+bW9uaXRvci5zaWduYWwubnVtYmVyKTsKKyAgICBlcHR4LT5tb25pdG9yLnNpZ25hbC5udW1iZXIgPSAwOworICB9Cit9CisKK0FTWU5DX1NJR05BTF9DQUxMQkFDSyh1c2JIYW5kbGVJbnB1dFNpZ25hbCkgeworICBVc2JFbmRwb2ludCAqZW5kcG9pbnQgPSBwYXJhbWV0ZXJzLT5kYXRhOworICBVc2JFbmRwb2ludEV4dGVuc2lvbiAqZXB0eCA9IGVuZHBvaW50LT5leHRlbnNpb247CisKKyAgd2hpbGUgKDEpIHsKKyAgICBVc2JSZXNwb25zZSByZXNwb25zZTsKKyAgICBzdHJ1Y3QgdXNiZGV2ZnNfdXJiICp1cmIgPSB1c2JSZWFwUmVzcG9uc2UoZW5kcG9pbnQtPmRldmljZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kcG9pbnQtPmRlc2NyaXB0b3ItPmJFbmRwb2ludEFkZHJlc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZyZXNwb25zZSwgMCk7CisKKyAgICBpZiAoIXVyYikgcmV0dXJuIDE7CisKKyAgICB7CisgICAgICBpbnQgaGFuZGxlZCA9IDA7CisKKyAgICAgIGlmICghcmVzcG9uc2UuZXJyb3IpIHsKKyAgICAgICAgdXJiLT5hY3R1YWxfbGVuZ3RoID0gcmVzcG9uc2UuY291bnQ7CisgICAgICAgIGlmICh1c2JIYW5kbGVJbnB1dFVSQihlbmRwb2ludCwgdXJiKSkgaGFuZGxlZCA9IDE7CisgICAgICB9IGVsc2UgeworICAgICAgICBlcnJubyA9IHJlc3BvbnNlLmVycm9yOworICAgICAgfQorCisgICAgICBpZiAoIWhhbmRsZWQpIHsKKyAgICAgICAgdXNiU2V0RW5kcG9pbnRJbnB1dEVycm9yKGVuZHBvaW50LCBlcnJubyk7CisgICAgICAgIHVzYlN0b3BTaWduYWxNb25pdG9yKGVwdHgpOworICAgICAgfQorCisgICAgICBmcmVlKHVyYik7CisgICAgICBpZiAoIWhhbmRsZWQpIHJldHVybiAwOworICAgIH0KKyAgfQorfQorCitzdGF0aWMgaW50Cit1c2JTdGFydFNpZ25hbE1vbml0b3IgKFVzYkVuZHBvaW50ICplbmRwb2ludCkgeworICBVc2JFbmRwb2ludEV4dGVuc2lvbiAqZXB0eCA9IGVuZHBvaW50LT5leHRlbnNpb247CisKKyAgaWYgKChlcHR4LT5tb25pdG9yLnNpZ25hbC5udW1iZXIgPSBhc3luY09idGFpblNpZ25hbE51bWJlcigpKSkgeworICAgIGlmIChhc3luY01vbml0b3JTaWduYWwoJmVwdHgtPm1vbml0b3Iuc2lnbmFsLmhhbmRsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGVwdHgtPm1vbml0b3Iuc2lnbmFsLm51bWJlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzYkhhbmRsZUlucHV0U2lnbmFsLCBlbmRwb2ludCkpIHsKKyAgICAgIGxvZ01lc3NhZ2UoTE9HX0NBVEVHT1JZKFVTQl9JTyksCisgICAgICAgICAgICAgICAgICJzaWduYWwgbW9uaXRvciBzdGFydGVkOiBFcHQ6JTAyWCBTaWc6JWQiLAorICAgICAgICAgICAgICAgICBlbmRwb2ludC0+ZGVzY3JpcHRvci0+YkVuZHBvaW50QWRkcmVzcywKKyAgICAgICAgICAgICAgICAgZXB0eC0+bW9uaXRvci5zaWduYWwubnVtYmVyKTsKKyAgICAgIHJldHVybiAxOworICAgIH0gZWxzZSB7CisgICAgICB1c2JMb2dJbnB1dFByb2JsZW0oZW5kcG9pbnQsICJtb25pdG9yIG5vdCByZWdpc3RlcmVkIik7CisgICAgfQorCisgICAgYXN5bmNSZWxpbnF1aXNoU2lnbmFsTnVtYmVyKGVwdHgtPm1vbml0b3Iuc2lnbmFsLm51bWJlcik7CisgIH0gZWxzZSB7CisgICAgdXNiTG9nSW5wdXRQcm9ibGVtKGVuZHBvaW50LCAic2lnbmFsIG51bWJlciBub3Qgb2J0YWluZWQiKTsKKyAgfQorCisgIHJldHVybiAwOworfQorCitzdGF0aWMgdm9pZAordXNiSW5pdGlhbGl6ZVVzYmZzTW9uaXRvciAoVXNiRGV2aWNlRXh0ZW5zaW9uICpkZXZ4KSB7CisgIGRldngtPnVzYmZzTW9uaXRvckhhbmRsZSA9IE5VTEw7Cit9CisKK3N0YXRpYyB2b2lkCit1c2JTdG9wVXNiZnNNb25pdG9yIChVc2JEZXZpY2VFeHRlbnNpb24gKmRldngpIHsKKyAgaWYgKGRldngtPnVzYmZzTW9uaXRvckhhbmRsZSkgeworICAgIGFzeW5jQ2FuY2VsUmVxdWVzdChkZXZ4LT51c2Jmc01vbml0b3JIYW5kbGUpOworICAgIGRldngtPnVzYmZzTW9uaXRvckhhbmRsZSA9IE5VTEw7CisgIH0KK30KKworc3RhdGljIGludAordXNiSGFuZGxlQ29tcGxldGVkSW5wdXRSZXF1ZXN0IChVc2JFbmRwb2ludCAqZW5kcG9pbnQsIHN0cnVjdCB1c2JkZXZmc191cmIgKnVyYikgeworICBzc2l6ZV90IGNvdW50ID0gdXJiLT5hY3R1YWxfbGVuZ3RoOworICBpbnQgZXJyb3IgPSB1cmItPnN0YXR1czsKKworICBpZiAoIWVycm9yKSB7CisgICAgaWYgKHVzYkFwcGx5SW5wdXRGaWx0ZXJzKGVuZHBvaW50LCB1cmItPmJ1ZmZlciwgdXJiLT5idWZmZXJfbGVuZ3RoLCAmY291bnQpKSB7CisgICAgICB1cmItPmFjdHVhbF9sZW5ndGggPSBjb3VudDsKKworICAgICAgaWYgKHVzYkhhbmRsZUlucHV0VVJCKGVuZHBvaW50LCB1cmIpKSB7CisgICAgICAgIHJldHVybiAxOworICAgICAgfQorICAgIH0KKyAgfSBlbHNlIHsKKyAgICBpZiAoZXJyb3IgPCAwKSBlcnJvciA9IC1lcnJvcjsKKyAgICBlcnJubyA9IGVycm9yOworICAgIGxvZ1N5c3RlbUVycm9yKCJVU0IgVVJCIHN0YXR1cyIpOworICB9CisKKyAgcmV0dXJuIDA7Cit9CisKK0FTWU5DX01PTklUT1JfQ0FMTEJBQ0sodXNiSGFuZGxlQ29tcGxldGVkSW5wdXRSZXF1ZXN0cykgeworICBVc2JEZXZpY2UgKmRldmljZSA9IHBhcmFtZXRlcnMtPmRhdGE7CisgIFVzYkVuZHBvaW50ICplbmRwb2ludDsKKworICB7CisgICAgaW50IGVycm9yID0gcGFyYW1ldGVycy0+ZXJyb3I7CisKKyAgICBpZiAoZXJyb3IpIHsKKyAgICAgIGxvZ0FjdGlvbkVycm9yKGVycm9yLCAiVVNCRlMgbW9uaXRvciIpOworICAgICAgdXNiU2V0RGV2aWNlSW5wdXRFcnJvcihkZXZpY2UsIGVycm9yKTsKKyAgICAgIHJldHVybiAwOworICAgIH0KKyAgfQorCisgIHdoaWxlICgoZW5kcG9pbnQgPSB1c2JSZWFwVVJCKGRldmljZSwgMCkpKSB7CisgICAgVXNiRW5kcG9pbnRFeHRlbnNpb24gKmVwdHggPSBlbmRwb2ludC0+ZXh0ZW5zaW9uOworCisgICAgd2hpbGUgKDEpIHsKKyAgICAgIHN0cnVjdCB1c2JkZXZmc191cmIgKnVyYiA9IGRlcXVldWVJdGVtKGVwdHgtPmNvbXBsZXRlZFJlcXVlc3RzKTsKKyAgICAgIGlmICghdXJiKSBicmVhazsKKyAgICAgIHVzYkxvZ1VSQih1cmIsICJyZWFwZWQiKTsKKworICAgICAgaW50IGhhbmRsZWQgPSB1c2JIYW5kbGVDb21wbGV0ZWRJbnB1dFJlcXVlc3QoZW5kcG9pbnQsIHVyYik7CisgICAgICBpbnQgZXJyb3IgPSBlcnJubzsKKyAgICAgIGZyZWUodXJiKTsKKworICAgICAgaWYgKCFoYW5kbGVkKSB7CisgICAgICAgIHVzYlNldEVuZHBvaW50SW5wdXRFcnJvcihlbmRwb2ludCwgZXJyb3IpOworICAgICAgICByZXR1cm4gMDsKKyAgICAgIH0KKyAgICB9CisgIH0KKworICBpZiAoZXJybm8gPT0gRUFHQUlOKSByZXR1cm4gMTsKKyAgdXNiU2V0RGV2aWNlSW5wdXRFcnJvcihkZXZpY2UsIGVycm5vKTsKKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK3VzYlN0YXJ0VXNiZnNNb25pdG9yIChVc2JEZXZpY2UgKmRldmljZSkgeworICBVc2JEZXZpY2VFeHRlbnNpb24gKmRldnggPSBkZXZpY2UtPmV4dGVuc2lvbjsKKworICBpZiAoZGV2eC0+dXNiZnNNb25pdG9ySGFuZGxlKSByZXR1cm4gMTsKKworICBpZiAodXNiT3BlblVzYmZzRmlsZShkZXZ4KSkgeworICAgIGlmIChhc3luY01vbml0b3JGaWxlT3V0cHV0KCZkZXZ4LT51c2Jmc01vbml0b3JIYW5kbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGV2eC0+dXNiZnNGaWxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzYkhhbmRsZUNvbXBsZXRlZElucHV0UmVxdWVzdHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGV2aWNlKSkgeworICAgICAgbG9nTWVzc2FnZShMT0dfQ0FURUdPUlkoVVNCX0lPKSwgIlVTQkZTIG1vbml0b3Igc3RhcnRlZCIpOworICAgICAgcmV0dXJuIDE7CisgICAgfSBlbHNlIHsKKyAgICAgIGxvZ01lc3NhZ2UoTE9HX0VSUiwgIlVTQkZTIG1vbml0b3IgZXJyb3I6ICVzOiAlcyIsCisgICAgICAgICAgICAgICAgIGRldngtPmhvc3QtPnVzYmZzUGF0aCwgc3RyZXJyb3IoZXJybm8pKTsKKyAgICB9CisgIH0KKworICByZXR1cm4gMDsKK30KKworc3RhdGljIGludAordXNiUHJlcGFyZUlucHV0RW5kcG9pbnQgKFVzYkVuZHBvaW50ICplbmRwb2ludCkgeworICBVc2JEZXZpY2UgKmRldmljZSA9IGVuZHBvaW50LT5kZXZpY2U7CisKKyAgaWYgKExJTlVYX1VTQl9JTlBVVF9QSVBFX0RJU0FCTEUpIHJldHVybiAxOworCisgIHN3aXRjaCAoVVNCX0VORFBPSU5UX1RSQU5TRkVSKGVuZHBvaW50LT5kZXNjcmlwdG9yKSkgeworICAgIGNhc2UgVXNiRW5kcG9pbnRUcmFuc2Zlcl9CdWxrOgorICAgIGNhc2UgVXNiRW5kcG9pbnRUcmFuc2Zlcl9JbnRlcnJ1cHQ6CisgICAgICBicmVhazsKKworICAgIGRlZmF1bHQ6CisgICAgICByZXR1cm4gMTsKKyAgfQorCisgIGlmICh1c2JNYWtlSW5wdXRQaXBlKGVuZHBvaW50KSkgeworICAgIGludCBtb25pdG9yU3RhcnRlZCA9IExJTlVYX1VTQl9JTlBVVF9VU0VfU0lHTkFMX01PTklUT1I/CisgICAgICAgICAgICAgICAgICAgICAgICAgdXNiU3RhcnRTaWduYWxNb25pdG9yKGVuZHBvaW50KToKKyAgICAgICAgICAgICAgICAgICAgICAgICB1c2JTdGFydFVzYmZzTW9uaXRvcihkZXZpY2UpOworCisgICAgaWYgKG1vbml0b3JTdGFydGVkKSB7CisgICAgICByZXR1cm4gMTsKKyAgICB9IGVsc2UgeworICAgICAgdXNiTG9nSW5wdXRQcm9ibGVtKGVuZHBvaW50LCAibW9uaXRvciBub3Qgc3RhcnRlZCIpOworICAgIH0KKworICAgIHVzYkRlc3Ryb3lJbnB1dFBpcGUoZW5kcG9pbnQpOworICB9IGVsc2UgeworICAgIHVzYkxvZ0lucHV0UHJvYmxlbShlbmRwb2ludCwgInBpcGUgbm90IGNyZWF0ZWQiKTsKKyAgfQorCisgIHJldHVybiAwOworfQorCitpbnQKK3VzYkFsbG9jYXRlRW5kcG9pbnRFeHRlbnNpb24gKFVzYkVuZHBvaW50ICplbmRwb2ludCkgeworICBVc2JFbmRwb2ludEV4dGVuc2lvbiAqZXB0eDsKKworICBpZiAoKGVwdHggPSBtYWxsb2Moc2l6ZW9mKCplcHR4KSkpKSB7CisgICAgbWVtc2V0KGVwdHgsIDAsIHNpemVvZigqZXB0eCkpOworICAgIHVzYkluaXRpYWxpemVTaWduYWxNb25pdG9yKGVwdHgpOworCisgICAgaWYgKChlcHR4LT5jb21wbGV0ZWRSZXF1ZXN0cyA9IG5ld1F1ZXVlKE5VTEwsIE5VTEwpKSkgeworICAgICAgc3dpdGNoIChVU0JfRU5EUE9JTlRfRElSRUNUSU9OKGVuZHBvaW50LT5kZXNjcmlwdG9yKSkgeworICAgICAgICBjYXNlIFVzYkVuZHBvaW50RGlyZWN0aW9uX0lucHV0OgorICAgICAgICAgIGVuZHBvaW50LT5wcmVwYXJlID0gdXNiUHJlcGFyZUlucHV0RW5kcG9pbnQ7CisgICAgICAgICAgYnJlYWs7CisgICAgICB9CisKKyAgICAgIGVuZHBvaW50LT5leHRlbnNpb24gPSBlcHR4OworICAgICAgcmV0dXJuIDE7CisgICAgfSBlbHNlIHsKKyAgICAgIGxvZ1N5c3RlbUVycm9yKCJVU0IgZW5kcG9pbnQgY29tcGxldGVkIHJlcXVlc3QgcXVldWUgYWxsb2NhdGUiKTsKKyAgICB9CisKKyAgICBmcmVlKGVwdHgpOworICB9IGVsc2UgeworICAgIGxvZ1N5c3RlbUVycm9yKCJVU0IgZW5kcG9pbnQgZXh0ZW5zaW9uIGFsbG9jYXRlIik7CisgIH0KKworICByZXR1cm4gMDsKK30KKwordm9pZAordXNiRGVhbGxvY2F0ZUVuZHBvaW50RXh0ZW5zaW9uIChVc2JFbmRwb2ludEV4dGVuc2lvbiAqZXB0eCkgeworICB1c2JTdG9wU2lnbmFsTW9uaXRvcihlcHR4KTsKKworICBpZiAoZXB0eC0+Y29tcGxldGVkUmVxdWVzdHMpIHsKKyAgICBkZWFsbG9jYXRlUXVldWUoZXB0eC0+Y29tcGxldGVkUmVxdWVzdHMpOworICAgIGVwdHgtPmNvbXBsZXRlZFJlcXVlc3RzID0gTlVMTDsKKyAgfQorCisgIGZyZWUoZXB0eCk7Cit9CisKK3ZvaWQKK3VzYkRlYWxsb2NhdGVEZXZpY2VFeHRlbnNpb24gKFVzYkRldmljZUV4dGVuc2lvbiAqZGV2eCkgeworICB1c2JTdG9wVXNiZnNNb25pdG9yKGRldngpOworICB1c2JDbG9zZVVzYmZzRmlsZShkZXZ4KTsKKyAgZnJlZShkZXZ4KTsKK30KKworc3RhdGljIHZvaWQKK3VzYkRlYWxsb2NhdGVIb3N0RGV2aWNlICh2b2lkICppdGVtLCB2b2lkICpkYXRhKSB7CisgIFVzYkhvc3REZXZpY2UgKmhvc3QgPSBpdGVtOworCisgIGlmIChob3N0LT5zeXNmc1BhdGgpIGZyZWUoaG9zdC0+c3lzZnNQYXRoKTsKKyAgaWYgKGhvc3QtPnVzYmZzUGF0aCkgZnJlZShob3N0LT51c2Jmc1BhdGgpOworICBmcmVlKGhvc3QpOworfQorCit0eXBlZGVmIHN0cnVjdCB7CisgIFVzYkRldmljZUNob29zZXIgKmNob29zZXI7CisgIFVzYkNob29zZUNoYW5uZWxEYXRhICpkYXRhOworICBVc2JEZXZpY2UgKmRldmljZTsKK30gVXNiVGVzdEhvc3REZXZpY2VEYXRhOworCitzdGF0aWMgaW50Cit1c2JUZXN0SG9zdERldmljZSAodm9pZCAqaXRlbSwgdm9pZCAqZGF0YSkgeworICBjb25zdCBVc2JIb3N0RGV2aWNlICpob3N0ID0gaXRlbTsKKyAgVXNiVGVzdEhvc3REZXZpY2VEYXRhICp0ZXN0ID0gZGF0YTsKKyAgVXNiRGV2aWNlRXh0ZW5zaW9uICpkZXZ4OworCisgIGlmICgoZGV2eCA9IG1hbGxvYyhzaXplb2YoKmRldngpKSkpIHsKKyAgICBtZW1zZXQoZGV2eCwgMCwgc2l6ZW9mKCpkZXZ4KSk7CisgICAgZGV2eC0+aG9zdCA9IGhvc3Q7CisgICAgZGV2eC0+dXNiZnNGaWxlID0gLTE7CisgICAgdXNiSW5pdGlhbGl6ZVVzYmZzTW9uaXRvcihkZXZ4KTsKKworICAgIGlmICgodGVzdC0+ZGV2aWNlID0gdXNiVGVzdERldmljZShkZXZ4LCB0ZXN0LT5jaG9vc2VyLCB0ZXN0LT5kYXRhKSkpIHJldHVybiAxOworCisgICAgdXNiRGVhbGxvY2F0ZURldmljZUV4dGVuc2lvbihkZXZ4KTsKKyAgfSBlbHNlIHsKKyAgICBsb2dNYWxsb2NFcnJvcigpOworICB9CisKKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjaGFyICoKK3VzYk1ha2VTeXNmc1BhdGggKGNvbnN0IGNoYXIgKnVzYmZzUGF0aCkgeworICBjb25zdCBjaGFyICp0YWlsID0gdXNiZnNQYXRoICsgc3RybGVuKHVzYmZzUGF0aCk7CisKKyAgeworICAgIGludCBjb3VudCA9IDA7CisgICAgd2hpbGUgKDEpIHsKKyAgICAgIGlmICh0YWlsID09IHVzYmZzUGF0aCkgcmV0dXJuIDA7CisgICAgICBpZiAoIWlzUGF0aFNlcGFyYXRvcigqLS10YWlsKSkgY29udGludWU7CisgICAgICBpZiAoKytjb3VudCA9PSAyKSBicmVhazsKKyAgICB9CisgIH0KKworICB7CisgICAgdW5zaWduZWQgaW50IGJ1czsKKyAgICB1bnNpZ25lZCBpbnQgZGV2aWNlOworICAgIGNoYXIgZXh0cmE7CisgICAgaW50IGNvdW50ID0gc3NjYW5mKHRhaWwsICIvJXUvJXUlYyIsICZidXMsICZkZXZpY2UsICZleHRyYSk7CisKKyAgICBpZiAoY291bnQgPT0gMikgeworICAgICAgdW5zaWduZWQgaW50IG1pbm9yID0gKChidXMgLSAxKSA8PCA3KSB8IChkZXZpY2UgLSAxKTsKKworICAgICAgc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IGZvcm1hdHNbXSA9IHsKKyAgICAgICAgIi9zeXMvZGV2L2NoYXIvMTg5OiU0JHUlMSRuJTIkdSUzJHUiLAorICAgICAgICAiL3N5cy9jbGFzcy91c2JfZGV2aWNlL3VzYmRldiUyJHUuJTMkdS9kZXZpY2UlMSRuIiwKKyAgICAgICAgIi9zeXMvY2xhc3MvdXNiX2VuZHBvaW50L3VzYmRldiUyJHUuJTMkdV9lcDAwL2RldmljZSUxJG4iLAorICAgICAgICBOVUxMCisgICAgICB9OworICAgICAgY29uc3QgY2hhciAqY29uc3QgKmZvcm1hdCA9IGZvcm1hdHM7CisKKyAgICAgIHdoaWxlICgqZm9ybWF0KSB7CisgICAgICAgIGludCBsZW5ndGg7CisgICAgICAgIGNoYXIgcGF0aFtzdHJsZW4oKmZvcm1hdCkgKyAoMiAqIDBYMTApICsgMV07CisKKyAgICAgICAgc25wcmludGYocGF0aCwgc2l6ZW9mKHBhdGgpLCAqZm9ybWF0LCAmbGVuZ3RoLCBidXMsIGRldmljZSwgbWlub3IpOworICAgICAgICBwYXRoW2xlbmd0aF0gPSAwOworCisgICAgICAgIGlmIChhY2Nlc3MocGF0aCwgRl9PSykgIT0gLTEpIHsKKyAgICAgICAgICBjaGFyICpzeXNmc1BhdGggPSBzdHJkdXAocGF0aCk7CisgICAgICAgICAgaWYgKCFzeXNmc1BhdGgpIGxvZ1N5c3RlbUVycm9yKCJzdHJkdXAiKTsKKyAgICAgICAgICByZXR1cm4gc3lzZnNQYXRoOworICAgICAgICB9CisKKyAgICAgICAgZm9ybWF0ICs9IDE7CisgICAgICB9CisgICAgfQorICB9CisKKyAgcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBpbnQKK3VzYlJlYWRIb3N0RGV2aWNlRGVzY3JpcHRvciAoVXNiSG9zdERldmljZSAqaG9zdCkgeworICBpbnQgb2sgPSAwOworICBpbnQgZmlsZSA9IC0xOworICBpbnQgc3lzZnMgPSAwOworCisgIGlmIChmaWxlID09IC0xKSB7CisgICAgaWYgKGhvc3QtPnN5c2ZzUGF0aCkgeworICAgICAgY2hhciAqcGF0aDsKKworICAgICAgaWYgKChwYXRoID0gbWFrZVBhdGgoaG9zdC0+c3lzZnNQYXRoLCAiZGVzY3JpcHRvcnMiKSkpIHsKKyAgICAgICAgaW50IG9wZW5GbGFncyA9IE9fUkRPTkxZOworCisgICAgICAgICNpZmRlZiBPX0NMT0VYRUMKKyAgICAgICAgb3BlbkZsYWdzIHw9IE9fQ0xPRVhFQzsKKyAgICAgICAgI2VuZGlmIC8qIE9fQ0xPRVhFQyAqLworCisgICAgICAgIGlmICgoZmlsZSA9IG9wZW4ocGF0aCwgb3BlbkZsYWdzKSkgIT0gLTEpIHsKKyAgICAgICAgICBzeXNmcyA9IDE7CisgICAgICAgIH0KKworICAgICAgICBmcmVlKHBhdGgpOworICAgICAgfQorICAgIH0KKyAgfQorCisgIGlmIChmaWxlID09IC0xKSB7CisgICAgaW50IG9wZW5GbGFncyA9IE9fUkRPTkxZOworCisgICAgI2lmZGVmIE9fQ0xPRVhFQworICAgIG9wZW5GbGFncyB8PSBPX0NMT0VYRUM7CisgICAgI2VuZGlmIC8qIE9fQ0xPRVhFQyAqLworCisgICAgZmlsZSA9IG9wZW4oaG9zdC0+dXNiZnNQYXRoLCBvcGVuRmxhZ3MpOworICB9CisKKyAgaWYgKGZpbGUgIT0gLTEpIHsKKyAgICBpbnQgY291bnQgPSByZWFkKGZpbGUsICZob3N0LT51c2JEZXNjcmlwdG9yLCBVc2JEZXNjcmlwdG9yU2l6ZV9EZXZpY2UpOworCisgICAgaWYgKGNvdW50ID09IC0xKSB7CisgICAgICBsb2dTeXN0ZW1FcnJvcigiVVNCIGRldmljZSBkZXNjcmlwdG9yIHJlYWQiKTsKKyAgICB9IGVsc2UgaWYgKGNvdW50ICE9IFVzYkRlc2NyaXB0b3JTaXplX0RldmljZSkgeworICAgICAgbG9nTWVzc2FnZShMT0dfRVJSLCAiVVNCIHNob3J0IGRldmljZSBkZXNjcmlwdG9yOiAlZCIsIGNvdW50KTsKKyAgICB9IGVsc2UgeworICAgICAgb2sgPSAxOworCisgICAgICBpZiAoIXN5c2ZzKSB7CisgICAgICAgIGhvc3QtPnVzYkRlc2NyaXB0b3IuYmNkVVNCID0gZ2V0TGl0dGxlRW5kaWFuMTYoaG9zdC0+dXNiRGVzY3JpcHRvci5iY2RVU0IpOworICAgICAgICBob3N0LT51c2JEZXNjcmlwdG9yLmlkVmVuZG9yID0gZ2V0TGl0dGxlRW5kaWFuMTYoaG9zdC0+dXNiRGVzY3JpcHRvci5pZFZlbmRvcik7CisgICAgICAgIGhvc3QtPnVzYkRlc2NyaXB0b3IuaWRQcm9kdWN0ID0gZ2V0TGl0dGxlRW5kaWFuMTYoaG9zdC0+dXNiRGVzY3JpcHRvci5pZFByb2R1Y3QpOworICAgICAgICBob3N0LT51c2JEZXNjcmlwdG9yLmJjZERldmljZSA9IGdldExpdHRsZUVuZGlhbjE2KGhvc3QtPnVzYkRlc2NyaXB0b3IuYmNkRGV2aWNlKTsKKyAgICAgIH0KKyAgICB9CisKKyAgICBjbG9zZShmaWxlKTsKKyAgfQorCisgIHJldHVybiBvazsKK30KKworc3RhdGljIGludAordXNiQWRkSG9zdERldmljZSAoY29uc3QgY2hhciAqcGF0aCkgeworICBpbnQgb2sgPSAwOworICBVc2JIb3N0RGV2aWNlICpob3N0OworCisgIGlmICgoaG9zdCA9IG1hbGxvYyhzaXplb2YoKmhvc3QpKSkpIHsKKyAgICBpZiAoKGhvc3QtPnVzYmZzUGF0aCA9IHN0cmR1cChwYXRoKSkpIHsKKyAgICAgIGhvc3QtPnN5c2ZzUGF0aCA9IHVzYk1ha2VTeXNmc1BhdGgoaG9zdC0+dXNiZnNQYXRoKTsKKworICAgICAgaWYgKCF1c2JSZWFkSG9zdERldmljZURlc2NyaXB0b3IoaG9zdCkpIHsKKyAgICAgICAgb2sgPSAxOworICAgICAgfSBlbHNlIGlmIChlbnF1ZXVlSXRlbSh1c2JIb3N0RGV2aWNlcywgaG9zdCkpIHsKKyAgICAgICAgcmV0dXJuIDE7CisgICAgICB9CisKKyAgICAgIGlmIChob3N0LT5zeXNmc1BhdGgpIGZyZWUoaG9zdC0+c3lzZnNQYXRoKTsKKyAgICAgIGZyZWUoaG9zdC0+dXNiZnNQYXRoKTsKKyAgICB9IGVsc2UgeworICAgICAgbG9nU3lzdGVtRXJyb3IoInN0cmR1cCIpOworICAgIH0KKworICAgIGZyZWUoaG9zdCk7CisgIH0gZWxzZSB7CisgICAgbG9nTWFsbG9jRXJyb3IoKTsKKyAgfQorCisgIHJldHVybiBvazsKK30KKworc3RhdGljIGludAordXNiQWRkSG9zdERldmljZXMgKGNvbnN0IGNoYXIgKnJvb3QpIHsKKyAgaW50IG9rID0gMDsKKyAgc2l6ZV90IHJvb3RMZW5ndGggPSBzdHJsZW4ocm9vdCk7CisgIERJUiAqZGlyZWN0b3J5OworCisgIGlmICgoZGlyZWN0b3J5ID0gb3BlbmRpcihyb290KSkpIHsKKyAgICBzdHJ1Y3QgZGlyZW50ICplbnRyeTsKKworICAgIG9rID0gMTsKKyAgICB3aGlsZSAoKGVudHJ5ID0gcmVhZGRpcihkaXJlY3RvcnkpKSkgeworICAgICAgc2l6ZV90IG5hbWVMZW5ndGggPSBzdHJsZW4oZW50cnktPmRfbmFtZSk7CisgICAgICBzdHJ1Y3Qgc3RhdCBzdGF0dXM7CisgICAgICBjaGFyIHBhdGhbcm9vdExlbmd0aCArIDEgKyBuYW1lTGVuZ3RoICsgMV07CisKKyAgICAgIGlmIChzdHJzcG4oZW50cnktPmRfbmFtZSwgIjAxMjM0NTY3ODkiKSAhPSBuYW1lTGVuZ3RoKSBjb250aW51ZTsKKyAgICAgIHNucHJpbnRmKHBhdGgsIHNpemVvZihwYXRoKSwgIiVzLyVzIiwgcm9vdCwgZW50cnktPmRfbmFtZSk7CisgICAgICBpZiAoc3RhdChwYXRoLCAmc3RhdHVzKSA9PSAtMSkgY29udGludWU7CisKKyAgICAgIGlmIChTX0lTRElSKHN0YXR1cy5zdF9tb2RlKSkgeworICAgICAgICBpZiAoIXVzYkFkZEhvc3REZXZpY2VzKHBhdGgpKSBvayA9IDA7CisgICAgICB9IGVsc2UgaWYgKFNfSVNSRUcoc3RhdHVzLnN0X21vZGUpIHx8IFNfSVNDSFIoc3RhdHVzLnN0X21vZGUpKSB7CisgICAgICAgIGlmICghdXNiQWRkSG9zdERldmljZShwYXRoKSkgb2sgPSAwOworICAgICAgfQorCisgICAgICBpZiAoIW9rKSBicmVhazsKKyAgICB9CisKKyAgICBjbG9zZWRpcihkaXJlY3RvcnkpOworICB9CisKKyAgcmV0dXJuIG9rOworfQorCit0eXBlZGVmIGludCAoKkZpbGVTeXN0ZW1WZXJpZmllcikgKGNvbnN0IGNoYXIgKnBhdGgpOworCit0eXBlZGVmIHN0cnVjdCB7CisgIGNvbnN0IGNoYXIgKnBhdGg7CisgIEZpbGVTeXN0ZW1WZXJpZmllciB2ZXJpZnk7Cit9IEZpbGVTeXN0ZW1DYW5kaWRhdGU7CisKK3N0YXRpYyBpbnQKK3VzYlZlcmlmeUZpbGVTeXN0ZW0gKGNvbnN0IGNoYXIgKnBhdGgsIGxvbmcgdHlwZSkgeworICBzdHJ1Y3Qgc3RhdGZzIHN0YXR1czsKKyAgaWYgKHN0YXRmcyhwYXRoLCAmc3RhdHVzKSAhPSAtMSkgeworICAgIGlmIChzdGF0dXMuZl90eXBlID09IHR5cGUpIHJldHVybiAxOworICB9CisgIHJldHVybiAwOworfQorCitzdGF0aWMgY2hhciAqCit1c2JHZXRGaWxlU3lzdGVtIChjb25zdCBjaGFyICp0eXBlLCBjb25zdCBGaWxlU3lzdGVtQ2FuZGlkYXRlICpjYW5kaWRhdGVzLCBNb3VudFBvaW50VGVzdGVyIHRlc3QsIEZpbGVTeXN0ZW1WZXJpZmllciB2ZXJpZnkpIHsKKyAgaWYgKGNhbmRpZGF0ZXMpIHsKKyAgICBjb25zdCBGaWxlU3lzdGVtQ2FuZGlkYXRlICpjYW5kaWRhdGUgPSBjYW5kaWRhdGVzOworCisgICAgd2hpbGUgKGNhbmRpZGF0ZS0+cGF0aCkgeworICAgICAgbG9nTWVzc2FnZShMT0dfQ0FURUdPUlkoVVNCX0lPKSwKKyAgICAgICAgICAgICAgICAgIlVTQkZTIHJvb3QgY2FuZGlkYXRlOiAlczogJXMiLAorICAgICAgICAgICAgICAgICB0eXBlLCBjYW5kaWRhdGUtPnBhdGgpOworCisgICAgICBpZiAoY2FuZGlkYXRlLT52ZXJpZnkoY2FuZGlkYXRlLT5wYXRoKSkgeworICAgICAgICBjaGFyICpwYXRoID0gc3RyZHVwKGNhbmRpZGF0ZS0+cGF0aCk7CisgICAgICAgIGlmIChwYXRoKSByZXR1cm4gcGF0aDsKKyAgICAgICAgbG9nTWFsbG9jRXJyb3IoKTsKKyAgICAgIH0KKworICAgICAgY2FuZGlkYXRlICs9IDE7CisgICAgfQorICB9CisKKyAgaWYgKHRlc3QpIHsKKyAgICBjaGFyICpwYXRoID0gZmluZE1vdW50UG9pbnQodGVzdCk7CisgICAgaWYgKHBhdGgpIHJldHVybiBwYXRoOworICB9CisKKyAgaWYgKHZlcmlmeSkgeworICAgIGNoYXIgKmRpcmVjdG9yeSA9IG1ha2VXcml0YWJsZVBhdGgodHlwZSk7CisKKyAgICBpZiAoZGlyZWN0b3J5KSB7CisgICAgICBpZiAoZW5zdXJlRGlyZWN0b3J5KGRpcmVjdG9yeSwgMCkpIHsKKyAgICAgICAgaWYgKHZlcmlmeShkaXJlY3RvcnkpKSByZXR1cm4gZGlyZWN0b3J5OworCisgICAgICAgIHsKKyAgICAgICAgICBjb25zdCBjaGFyICpzdHJpbmdzW10gPSB7UEFDS0FHRV9UQVJOQU1FLCAiLSIsIHR5cGV9OworICAgICAgICAgIGNoYXIgKm5hbWUgPSBqb2luU3RyaW5ncyhzdHJpbmdzLCBBUlJBWV9DT1VOVChzdHJpbmdzKSk7CisgICAgICAgICAgaWYgKG1ha2VNb3VudFBvaW50KGRpcmVjdG9yeSwgbmFtZSwgdHlwZSkpIHJldHVybiBkaXJlY3Rvcnk7CisgICAgICAgIH0KKyAgICAgIH0KKworICAgICAgZnJlZShkaXJlY3RvcnkpOworICAgIH0KKyAgfQorCisgIHJldHVybiBOVUxMOworfQorCitzdGF0aWMgaW50Cit1c2JWZXJpZnlEaXJlY3RvcnkgKGNvbnN0IGNoYXIgKnBhdGgpIHsKKyAgaWYgKGFjY2VzcyhwYXRoLCBGX09LKSAhPSAtMSkgcmV0dXJuIDE7CisgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50Cit1c2JWZXJpZnlVc2JmcyAoY29uc3QgY2hhciAqcGF0aCkgeworICByZXR1cm4gdXNiVmVyaWZ5RmlsZVN5c3RlbShwYXRoLCBVU0JERVZJQ0VfU1VQRVJfTUFHSUMpOworfQorCitzdGF0aWMgaW50Cit1c2JUZXN0VXNiZnMgKGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IGNoYXIgKnR5cGUpIHsKKyAgaWYgKChzdHJjbXAodHlwZSwgInVzYmRldmZzIikgPT0gMCkgfHwKKyAgICAgIChzdHJjbXAodHlwZSwgInVzYmZzIikgPT0gMCkpIHsKKyAgICBpZiAodXNiVmVyaWZ5VXNiZnMocGF0aCkpIHsKKyAgICAgIHJldHVybiAxOworICAgIH0KKyAgfQorICByZXR1cm4gMDsKK30KKworc3RhdGljIGNoYXIgKgordXNiR2V0VXNiZnMgKHZvaWQpIHsKKyAgc3RhdGljIGNvbnN0IEZpbGVTeXN0ZW1DYW5kaWRhdGUgdXNiZnNDYW5kaWRhdGVzW10gPSB7CisgICAgey5wYXRoPSIvZGV2L2J1cy91c2IiLCAudmVyaWZ5PXVzYlZlcmlmeURpcmVjdG9yeX0sCisgICAgey5wYXRoPSIvcHJvYy9idXMvdXNiIiwgLnZlcmlmeT11c2JWZXJpZnlVc2Jmc30sCisgICAgey5wYXRoPU5VTEwsIC52ZXJpZnk9TlVMTH0KKyAgfTsKKworICByZXR1cm4gdXNiR2V0RmlsZVN5c3RlbSgidXNiZnMiLCB1c2Jmc0NhbmRpZGF0ZXMsIHVzYlRlc3RVc2JmcywgdXNiVmVyaWZ5VXNiZnMpOworfQorCitVc2JEZXZpY2UgKgordXNiRmluZERldmljZSAoVXNiRGV2aWNlQ2hvb3NlciAqY2hvb3NlciwgVXNiQ2hvb3NlQ2hhbm5lbERhdGEgKmRhdGEpIHsKKyAgaWYgKCF1c2JIb3N0RGV2aWNlcykgeworICAgIGludCBvayA9IDA7CisKKyAgICBpZiAoKHVzYkhvc3REZXZpY2VzID0gbmV3UXVldWUodXNiRGVhbGxvY2F0ZUhvc3REZXZpY2UsIE5VTEwpKSkgeworICAgICAgY2hhciAqcm9vdDsKKworICAgICAgaWYgKChyb290ID0gdXNiR2V0VXNiZnMoKSkpIHsKKyAgICAgICAgbG9nTWVzc2FnZShMT0dfQ0FURUdPUlkoVVNCX0lPKSwgIlVTQkZTIHJvb3Q6ICVzIiwgcm9vdCk7CisgICAgICAgIGlmICh1c2JBZGRIb3N0RGV2aWNlcyhyb290KSkgb2sgPSAxOworCisgICAgICAgIGZyZWUocm9vdCk7CisgICAgICB9IGVsc2UgeworICAgICAgICBsb2dNZXNzYWdlKExPR19DQVRFR09SWShVU0JfSU8pLCAiVVNCRlMgbm90IG1vdW50ZWQiKTsKKyAgICAgIH0KKworICAgICAgaWYgKCFvaykgeworICAgICAgICBkZWFsbG9jYXRlUXVldWUodXNiSG9zdERldmljZXMpOworICAgICAgICB1c2JIb3N0RGV2aWNlcyA9IE5VTEw7CisgICAgICB9CisgICAgfQorICB9CisKKyAgaWYgKHVzYkhvc3REZXZpY2VzKSB7CisgICAgVXNiVGVzdEhvc3REZXZpY2VEYXRhIHRlc3QgPSB7CisgICAgICAuY2hvb3NlciA9IGNob29zZXIsCisgICAgICAuZGF0YSA9IGRhdGEsCisgICAgICAuZGV2aWNlID0gTlVMTAorICAgIH07CisKKyAgICBpZiAocHJvY2Vzc1F1ZXVlKHVzYkhvc3REZXZpY2VzLCB1c2JUZXN0SG9zdERldmljZSwgJnRlc3QpKSByZXR1cm4gdGVzdC5kZXZpY2U7CisgIH0KKworICByZXR1cm4gTlVMTDsKK30KKwordm9pZAordXNiRm9yZ2V0RGV2aWNlcyAodm9pZCkgeworICBpZiAodXNiSG9zdERldmljZXMpIHsKKyAgICBkZWFsbG9jYXRlUXVldWUodXNiSG9zdERldmljZXMpOworICAgIHVzYkhvc3REZXZpY2VzID0gTlVMTDsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvUHJvZ3JhbXMvdXNiX25ldGJzZC5jIGIvUHJvZ3JhbXMvdXNiX25ldGJzZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc1ODBmYTYKLS0tIC9kZXYvbnVsbAorKysgYi9Qcm9ncmFtcy91c2JfbmV0YnNkLmMKQEAgLTAsMCArMSwzNCBAQAorLyoKKyAqIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisgKiAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisgKgorICogQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKKyNpbmNsdWRlICJwcm9sb2d1ZS5oIgorCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVkZSA8c3lzL2lvY3RsLmg+CisjaW5jbHVkZSA8c3lzL3BhcmFtLmg+CisjaW5jbHVkZSA8ZGV2L3VzYi91c2IuaD4KKworI2luY2x1ZGUgImlvX3VzYi5oIgorI2luY2x1ZGUgInVzYl9pbnRlcm5hbC5oIgorCisjZGVmaW5lIFVTQl9DT05UUk9MX1BBVEhfRk9STUFUICIvZGV2LyVzLjAwIgorI2RlZmluZSBVU0JfRU5EUE9JTlRfUEFUSF9GT1JNQVQgIiUuKnMuJTAyZCIKKyNpbmNsdWRlICJ1c2JfYnNkLmgiCmRpZmYgLS1naXQgYS9Qcm9ncmFtcy91c2Jfbm9uZS5jIGIvUHJvZ3JhbXMvdXNiX25vbmUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNTY0OTM4Ci0tLSAvZGV2L251bGwKKysrIGIvUHJvZ3JhbXMvdXNiX25vbmUuYwpAQCAtMCwwICsxLDE3OCBAQAorLyoKKyAqIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisgKiAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisgKgorICogQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKKyNpbmNsdWRlICJwcm9sb2d1ZS5oIgorCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorCisjaW5jbHVkZSAibG9nLmgiCisjaW5jbHVkZSAiaW9fdXNiLmgiCisjaW5jbHVkZSAidXNiX2ludGVybmFsLmgiCisKK2ludAordXNiRGlzYWJsZUF1dG9zdXNwZW5kIChVc2JEZXZpY2UgKmRldmljZSkgeworICBsb2dVbnN1cHBvcnRlZEZ1bmN0aW9uKCk7CisgIHJldHVybiAwOworfQorCitpbnQKK3VzYlNldENvbmZpZ3VyYXRpb24gKFVzYkRldmljZSAqZGV2aWNlLCB1bnNpZ25lZCBjaGFyIGNvbmZpZ3VyYXRpb24pIHsKKyAgbG9nVW5zdXBwb3J0ZWRGdW5jdGlvbigpOworICByZXR1cm4gMDsKK30KKworaW50Cit1c2JDbGFpbUludGVyZmFjZSAoVXNiRGV2aWNlICpkZXZpY2UsIHVuc2lnbmVkIGNoYXIgaW50ZXJmYWNlKSB7CisgIGxvZ1Vuc3VwcG9ydGVkRnVuY3Rpb24oKTsKKyAgcmV0dXJuIDA7Cit9CisKK2ludAordXNiUmVsZWFzZUludGVyZmFjZSAoVXNiRGV2aWNlICpkZXZpY2UsIHVuc2lnbmVkIGNoYXIgaW50ZXJmYWNlKSB7CisgIGxvZ1Vuc3VwcG9ydGVkRnVuY3Rpb24oKTsKKyAgcmV0dXJuIDA7Cit9CisKK2ludAordXNiU2V0QWx0ZXJuYXRpdmUgKAorICBVc2JEZXZpY2UgKmRldmljZSwKKyAgdW5zaWduZWQgY2hhciBpbnRlcmZhY2UsCisgIHVuc2lnbmVkIGNoYXIgYWx0ZXJuYXRpdmUKKykgeworICBsb2dVbnN1cHBvcnRlZEZ1bmN0aW9uKCk7CisgIHJldHVybiAwOworfQorCitpbnQKK3VzYlJlc2V0RGV2aWNlIChVc2JEZXZpY2UgKmRldmljZSkgeworICBsb2dVbnN1cHBvcnRlZEZ1bmN0aW9uKCk7CisgIHJldHVybiAwOworfQorCitpbnQKK3VzYkNsZWFySGFsdCAoVXNiRGV2aWNlICpkZXZpY2UsIHVuc2lnbmVkIGNoYXIgZW5kcG9pbnRBZGRyZXNzKSB7CisgIGxvZ1Vuc3VwcG9ydGVkRnVuY3Rpb24oKTsKKyAgcmV0dXJuIDA7Cit9CisKK3NzaXplX3QKK3VzYkNvbnRyb2xUcmFuc2ZlciAoCisgIFVzYkRldmljZSAqZGV2aWNlLAorICB1aW50OF90IGRpcmVjdGlvbiwKKyAgdWludDhfdCByZWNpcGllbnQsCisgIHVpbnQ4X3QgdHlwZSwKKyAgdWludDhfdCByZXF1ZXN0LAorICB1aW50MTZfdCB2YWx1ZSwKKyAgdWludDE2X3QgaW5kZXgsCisgIHZvaWQgKmJ1ZmZlciwKKyAgdWludDE2X3QgbGVuZ3RoLAorICBpbnQgdGltZW91dAorKSB7CisgIGxvZ1Vuc3VwcG9ydGVkRnVuY3Rpb24oKTsKKyAgcmV0dXJuIC0xOworfQorCit2b2lkICoKK3VzYlN1Ym1pdFJlcXVlc3QgKAorICBVc2JEZXZpY2UgKmRldmljZSwKKyAgdW5zaWduZWQgY2hhciBlbmRwb2ludEFkZHJlc3MsCisgIHZvaWQgKmJ1ZmZlciwKKyAgc2l6ZV90IGxlbmd0aCwKKyAgdm9pZCAqY29udGV4dAorKSB7CisgIGxvZ1Vuc3VwcG9ydGVkRnVuY3Rpb24oKTsKKyAgcmV0dXJuIE5VTEw7Cit9CisKK2ludAordXNiQ2FuY2VsUmVxdWVzdCAoVXNiRGV2aWNlICpkZXZpY2UsIHZvaWQgKnJlcXVlc3QpIHsKKyAgbG9nVW5zdXBwb3J0ZWRGdW5jdGlvbigpOworICByZXR1cm4gMDsKK30KKwordm9pZCAqCit1c2JSZWFwUmVzcG9uc2UgKAorICBVc2JEZXZpY2UgKmRldmljZSwKKyAgdW5zaWduZWQgY2hhciBlbmRwb2ludEFkZHJlc3MsCisgIFVzYlJlc3BvbnNlICpyZXNwb25zZSwKKyAgaW50IHdhaXQKKykgeworICBsb2dVbnN1cHBvcnRlZEZ1bmN0aW9uKCk7CisgIHJldHVybiBOVUxMOworfQorCitpbnQKK3VzYk1vbml0b3JJbnB1dEVuZHBvaW50ICgKKyAgVXNiRGV2aWNlICpkZXZpY2UsIHVuc2lnbmVkIGNoYXIgZW5kcG9pbnROdW1iZXIsCisgIEFzeW5jTW9uaXRvckNhbGxiYWNrICpjYWxsYmFjaywgdm9pZCAqZGF0YQorKSB7CisgIHJldHVybiAwOworfQorCitzc2l6ZV90Cit1c2JSZWFkRW5kcG9pbnQgKAorICBVc2JEZXZpY2UgKmRldmljZSwKKyAgdW5zaWduZWQgY2hhciBlbmRwb2ludE51bWJlciwKKyAgdm9pZCAqYnVmZmVyLAorICBzaXplX3QgbGVuZ3RoLAorICBpbnQgdGltZW91dAorKSB7CisgIGxvZ1Vuc3VwcG9ydGVkRnVuY3Rpb24oKTsKKyAgcmV0dXJuIC0xOworfQorCitzc2l6ZV90Cit1c2JXcml0ZUVuZHBvaW50ICgKKyAgVXNiRGV2aWNlICpkZXZpY2UsCisgIHVuc2lnbmVkIGNoYXIgZW5kcG9pbnROdW1iZXIsCisgIGNvbnN0IHZvaWQgKmJ1ZmZlciwKKyAgc2l6ZV90IGxlbmd0aCwKKyAgaW50IHRpbWVvdXQKKykgeworICBsb2dVbnN1cHBvcnRlZEZ1bmN0aW9uKCk7CisgIHJldHVybiAtMTsKK30KKworaW50Cit1c2JSZWFkRGV2aWNlRGVzY3JpcHRvciAoVXNiRGV2aWNlICpkZXZpY2UpIHsKKyAgbG9nVW5zdXBwb3J0ZWRGdW5jdGlvbigpOworICByZXR1cm4gMDsKK30KKworaW50Cit1c2JBbGxvY2F0ZUVuZHBvaW50RXh0ZW5zaW9uIChVc2JFbmRwb2ludCAqZW5kcG9pbnQpIHsKKyAgcmV0dXJuIDE7Cit9CisKK3ZvaWQKK3VzYkRlYWxsb2NhdGVFbmRwb2ludEV4dGVuc2lvbiAoVXNiRW5kcG9pbnRFeHRlbnNpb24gKmVwdHgpIHsKK30KKwordm9pZAordXNiRGVhbGxvY2F0ZURldmljZUV4dGVuc2lvbiAoVXNiRGV2aWNlRXh0ZW5zaW9uICpkZXZ4KSB7Cit9CisKK1VzYkRldmljZSAqCit1c2JGaW5kRGV2aWNlIChVc2JEZXZpY2VDaG9vc2VyICpjaG9vc2VyLCBVc2JDaG9vc2VDaGFubmVsRGF0YSAqZGF0YSkgeworICByZXR1cm4gTlVMTDsKK30KKwordm9pZAordXNiRm9yZ2V0RGV2aWNlcyAodm9pZCkgeworfQpkaWZmIC0tZ2l0IGEvUHJvZ3JhbXMvdXNiX29wZW5ic2QuYyBiL1Byb2dyYW1zL3VzYl9vcGVuYnNkLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzU4MGZhNgotLS0gL2Rldi9udWxsCisrKyBiL1Byb2dyYW1zL3VzYl9vcGVuYnNkLmMKQEAgLTAsMCArMSwzNCBAQAorLyoKKyAqIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisgKiAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisgKgorICogQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKKyNpbmNsdWRlICJwcm9sb2d1ZS5oIgorCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVkZSA8c3lzL2lvY3RsLmg+CisjaW5jbHVkZSA8c3lzL3BhcmFtLmg+CisjaW5jbHVkZSA8ZGV2L3VzYi91c2IuaD4KKworI2luY2x1ZGUgImlvX3VzYi5oIgorI2luY2x1ZGUgInVzYl9pbnRlcm5hbC5oIgorCisjZGVmaW5lIFVTQl9DT05UUk9MX1BBVEhfRk9STUFUICIvZGV2LyVzLjAwIgorI2RlZmluZSBVU0JfRU5EUE9JTlRfUEFUSF9GT1JNQVQgIiUuKnMuJTAyZCIKKyNpbmNsdWRlICJ1c2JfYnNkLmgiCmRpZmYgLS1naXQgYS9Qcm9ncmFtcy91c2Jfc2VyaWFsLmMgYi9Qcm9ncmFtcy91c2Jfc2VyaWFsLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMThhOTZlZAotLS0gL2Rldi9udWxsCisrKyBiL1Byb2dyYW1zL3VzYl9zZXJpYWwuYwpAQCAtMCwwICsxLDIyMCBAQAorLyoKKyAqIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisgKiAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisgKgorICogQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKKyNpbmNsdWRlICJwcm9sb2d1ZS5oIgorCisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKworI2luY2x1ZGUgImxvZy5oIgorI2luY2x1ZGUgInByb2dyYW0uaCIKKyNpbmNsdWRlICJ1c2JfaW50ZXJuYWwuaCIKKyNpbmNsdWRlICJ1c2Jfc2VyaWFsLmgiCisjaW5jbHVkZSAidXNiX2FkYXB0ZXJzLmgiCisjaW5jbHVkZSAiYml0ZmllbGQuaCIKKworc3RhdGljIHZvaWQKK3VzYkxvZ1NlcmlhbFByb2JsZW0gKFVzYkRldmljZSAqZGV2aWNlLCBjb25zdCBjaGFyICpwcm9ibGVtKSB7CisgIGxvZ01lc3NhZ2UoTE9HX0NBVEVHT1JZKFNFUklBTF9JTyksCisgICAgIiVzOiBWZW5kb3I6JTA0WCBQcm9kdWN0OiUwNFgiLAorICAgIHByb2JsZW0sCisgICAgZ2V0TGl0dGxlRW5kaWFuMTYoZGV2aWNlLT5kZXNjcmlwdG9yLmlkVmVuZG9yKSwKKyAgICBnZXRMaXR0bGVFbmRpYW4xNihkZXZpY2UtPmRlc2NyaXB0b3IuaWRQcm9kdWN0KQorICApOworfQorCitpbnQKK3VzYlNraXBJbml0aWFsQnl0ZXMgKFVzYklucHV0RmlsdGVyRGF0YSAqZGF0YSwgdW5zaWduZWQgaW50IGNvdW50KSB7CisgIGlmIChkYXRhLT5sZW5ndGggPiBjb3VudCkgeworICAgIHVuc2lnbmVkIGNoYXIgKmJ1ZmZlciA9IGRhdGEtPmJ1ZmZlcjsKKyAgICBtZW1tb3ZlKGJ1ZmZlciwgYnVmZmVyK2NvdW50LCBkYXRhLT5sZW5ndGgtPWNvdW50KTsKKyAgfSBlbHNlIHsKKyAgICBkYXRhLT5sZW5ndGggPSAwOworICB9CisKKyAgcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBjb25zdCBVc2JTZXJpYWxBZGFwdGVyICoqdXNiU2VyaWFsQWRhcHRlcnMgPSBOVUxMOworCitzdGF0aWMgaW50Cit1c2JDb21wYXJlU2VyaWFsQWRhcHRlcnMgKGNvbnN0IFVzYlNlcmlhbEFkYXB0ZXIgKmFkYXB0ZXIxLCBjb25zdCBVc2JTZXJpYWxBZGFwdGVyICphZGFwdGVyMikgeworICBpZiAoYWRhcHRlcjEtPnZlbmRvciA8IGFkYXB0ZXIyLT52ZW5kb3IpIHJldHVybiAtMTsKKyAgaWYgKGFkYXB0ZXIxLT52ZW5kb3IgPiBhZGFwdGVyMi0+dmVuZG9yKSByZXR1cm4gMTsKKworICBpZiAoYWRhcHRlcjEtPnByb2R1Y3QgPCBhZGFwdGVyMi0+cHJvZHVjdCkgcmV0dXJuIC0xOworICBpZiAoYWRhcHRlcjEtPnByb2R1Y3QgPiBhZGFwdGVyMi0+cHJvZHVjdCkgcmV0dXJuIDE7CisKKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK3VzYlNvcnRTZXJpYWxBZGFwdGVycyAoY29uc3Qgdm9pZCAqZWxlbWVudDEsIGNvbnN0IHZvaWQgKmVsZW1lbnQyKSB7CisgIGNvbnN0IFVzYlNlcmlhbEFkYXB0ZXIgKmNvbnN0ICphZGFwdGVyMSA9IGVsZW1lbnQxOworICBjb25zdCBVc2JTZXJpYWxBZGFwdGVyICpjb25zdCAqYWRhcHRlcjIgPSBlbGVtZW50MjsKKworICByZXR1cm4gdXNiQ29tcGFyZVNlcmlhbEFkYXB0ZXJzKCphZGFwdGVyMSwgKmFkYXB0ZXIyKTsKK30KKworc3RhdGljIGludAordXNiU2VhcmNoU2VyaWFsQWRhcHRlciAoY29uc3Qgdm9pZCAqdGFyZ2V0LCBjb25zdCB2b2lkICplbGVtZW50KSB7CisgIGNvbnN0IFVzYlNlcmlhbEFkYXB0ZXIgKmNvbnN0ICphZGFwdGVyID0gZWxlbWVudDsKKworICByZXR1cm4gdXNiQ29tcGFyZVNlcmlhbEFkYXB0ZXJzKHRhcmdldCwgKmFkYXB0ZXIpOworfQorCitzdGF0aWMgY29uc3QgVXNiU2VyaWFsQWRhcHRlciAqCit1c2JHZXRTZXJpYWxBZGFwdGVyICh1aW50MTZfdCB2ZW5kb3IsIHVpbnQxNl90IHByb2R1Y3QpIHsKKyAgY29uc3QgVXNiU2VyaWFsQWRhcHRlciB0YXJnZXQgPSB7CisgICAgLnZlbmRvciA9IHZlbmRvciwKKyAgICAucHJvZHVjdCA9IHByb2R1Y3QKKyAgfTsKKworICBjb25zdCBVc2JTZXJpYWxBZGFwdGVyICpjb25zdCAqYWRhcHRlciA9IGJzZWFyY2goJnRhcmdldCwgdXNiU2VyaWFsQWRhcHRlcnMsIHVzYlNlcmlhbEFkYXB0ZXJDb3VudCwgc2l6ZW9mKCp1c2JTZXJpYWxBZGFwdGVycyksIHVzYlNlYXJjaFNlcmlhbEFkYXB0ZXIpOworCisgIHJldHVybiBhZGFwdGVyPyAqYWRhcHRlcjogTlVMTDsKK30KKworY29uc3QgVXNiU2VyaWFsQWRhcHRlciAqCit1c2JGaW5kU2VyaWFsQWRhcHRlciAoY29uc3QgVXNiRGV2aWNlRGVzY3JpcHRvciAqZGVzY3JpcHRvcikgeworICBpZiAoIXVzYlNlcmlhbEFkYXB0ZXJzKSB7CisgICAgY29uc3QgVXNiU2VyaWFsQWRhcHRlciAqKmFkYXB0ZXJzOworCisgICAgaWYgKCEoYWRhcHRlcnMgPSBtYWxsb2ModXNiU2VyaWFsQWRhcHRlckNvdW50ICogc2l6ZW9mKCphZGFwdGVycykpKSkgeworICAgICAgbG9nTWFsbG9jRXJyb3IoKTsKKyAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIHsKKyAgICAgIGNvbnN0IFVzYlNlcmlhbEFkYXB0ZXIgKnNvdXJjZSA9IHVzYlNlcmlhbEFkYXB0ZXJUYWJsZTsKKyAgICAgIGNvbnN0IFVzYlNlcmlhbEFkYXB0ZXIgKmVuZCA9IHNvdXJjZSArIHVzYlNlcmlhbEFkYXB0ZXJDb3VudDsKKyAgICAgIGNvbnN0IFVzYlNlcmlhbEFkYXB0ZXIgKip0YXJnZXQgPSBhZGFwdGVyczsKKworICAgICAgd2hpbGUgKHNvdXJjZSA8IGVuZCkgKnRhcmdldCsrID0gc291cmNlKys7CisgICAgICBxc29ydChhZGFwdGVycywgdXNiU2VyaWFsQWRhcHRlckNvdW50LCBzaXplb2YoKmFkYXB0ZXJzKSwgdXNiU29ydFNlcmlhbEFkYXB0ZXJzKTsKKyAgICB9CisKKyAgICB1c2JTZXJpYWxBZGFwdGVycyA9IGFkYXB0ZXJzOworICAgIHJlZ2lzdGVyUHJvZ3JhbU1lbW9yeSgic29ydGVkLXVzYi1zZXJpYWwtYWRhcHRlcnMiLCAmdXNiU2VyaWFsQWRhcHRlcnMpOworICB9CisKKyAgeworICAgIHVpbnQxNl90IHZlbmRvciA9IGdldExpdHRsZUVuZGlhbjE2KGRlc2NyaXB0b3ItPmlkVmVuZG9yKTsKKyAgICB1aW50MTZfdCBwcm9kdWN0ID0gZ2V0TGl0dGxlRW5kaWFuMTYoZGVzY3JpcHRvci0+aWRQcm9kdWN0KTsKKyAgICBjb25zdCBVc2JTZXJpYWxBZGFwdGVyICphZGFwdGVyID0gdXNiR2V0U2VyaWFsQWRhcHRlcih2ZW5kb3IsIHByb2R1Y3QpOworCisgICAgaWYgKCFhZGFwdGVyKSBhZGFwdGVyID0gdXNiR2V0U2VyaWFsQWRhcHRlcih2ZW5kb3IsIDApOworICAgIHJldHVybiBhZGFwdGVyOworICB9Cit9CisKK2ludAordXNiU2V0U2VyaWFsT3BlcmF0aW9ucyAoVXNiRGV2aWNlICpkZXZpY2UpIHsKKyAgaWYgKCFkZXZpY2UtPnNlcmlhbC5vcGVyYXRpb25zKSB7CisgICAgY29uc3QgVXNiU2VyaWFsT3BlcmF0aW9ucyAqdXNvID0gTlVMTDsKKworICAgIHsKKyAgICAgIGNvbnN0IFVzYlNlcmlhbEFkYXB0ZXIgKmFkYXB0ZXIgPSB1c2JGaW5kU2VyaWFsQWRhcHRlcigmZGV2aWNlLT5kZXNjcmlwdG9yKTsKKworICAgICAgaWYgKGFkYXB0ZXIpIHsKKyAgICAgICAgaWYgKCh1c28gPSBhZGFwdGVyLT5vcGVyYXRpb25zKSkgeworICAgICAgICAgIFVzYklucHV0RmlsdGVyICpmaWx0ZXIgPSB1c28tPmlucHV0RmlsdGVyOworICAgICAgICAgCisgICAgICAgICAgaWYgKGZpbHRlciAmJiAhdXNiQWRkSW5wdXRGaWx0ZXIoZGV2aWNlLCBmaWx0ZXIpKSByZXR1cm4gMDsKKyAgICAgICAgfQorICAgICAgfQorICAgIH0KKworICAgIGlmICghdXNvKSB7CisgICAgICBpZiAoZGV2aWNlLT5kZXNjcmlwdG9yLmJEZXZpY2VDbGFzcyA9PSAwWDAyKSB7CisgICAgICAgIHVzbyA9ICZ1c2JTZXJpYWxPcGVyYXRpb25zX0NEQ19BQ007CisgICAgICB9CisgICAgfQorCisgICAgaWYgKHVzbykgeworICAgICAgbG9nTWVzc2FnZShMT0dfQ0FURUdPUlkoU0VSSUFMX0lPKSwgIlVTQiBhZGFwdGVyOiAlcyIsIHVzby0+bmFtZSk7CisgICAgICBVc2JTZXJpYWxEYXRhICp1c2QgPSBOVUxMOworCisgICAgICBpZiAodXNvLT5tYWtlRGF0YSkgeworICAgICAgICBpZiAoIXVzby0+bWFrZURhdGEoZGV2aWNlLCAmdXNkKSkgeworICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CisgICAgICB9CisKKyAgICAgIGRldmljZS0+c2VyaWFsLm9wZXJhdGlvbnMgPSB1c287CisgICAgICBkZXZpY2UtPnNlcmlhbC5kYXRhID0gdXNkOworICAgIH0KKyAgfQorCisgIHJldHVybiAxOworfQorCitjb25zdCBVc2JTZXJpYWxPcGVyYXRpb25zICoKK3VzYkdldFNlcmlhbE9wZXJhdGlvbnMgKFVzYkRldmljZSAqZGV2aWNlKSB7CisgIHJldHVybiBkZXZpY2UtPnNlcmlhbC5vcGVyYXRpb25zOworfQorCitVc2JTZXJpYWxEYXRhICoKK3VzYkdldFNlcmlhbERhdGEgKFVzYkRldmljZSAqZGV2aWNlKSB7CisgIHJldHVybiBkZXZpY2UtPnNlcmlhbC5kYXRhOworfQorCitpbnQKK3VzYlNldFNlcmlhbFBhcmFtZXRlcnMgKFVzYkRldmljZSAqZGV2aWNlLCBjb25zdCBTZXJpYWxQYXJhbWV0ZXJzICpwYXJhbWV0ZXJzKSB7CisgIGludCBvayA9IDA7CisgIGNvbnN0IFVzYlNlcmlhbE9wZXJhdGlvbnMgKnNlcmlhbCA9IHVzYkdldFNlcmlhbE9wZXJhdGlvbnMoZGV2aWNlKTsKKworICBpZiAoIXNlcmlhbCkgeworICAgIHVzYkxvZ1NlcmlhbFByb2JsZW0oZGV2aWNlLCAibm8gc2VyaWFsIG9wZXJhdGlvbnMiKTsKKyAgICBlcnJubyA9IEVOT1NZUzsKKyAgfSBlbHNlIGlmIChzZXJpYWwtPnNldExpbmVDb25maWd1cmF0aW9uKSB7CisgICAgb2sgPSBzZXJpYWwtPnNldExpbmVDb25maWd1cmF0aW9uKAorICAgICAgZGV2aWNlLCBwYXJhbWV0ZXJzLT5iYXVkLAorICAgICAgcGFyYW1ldGVycy0+ZGF0YUJpdHMsIHBhcmFtZXRlcnMtPnN0b3BCaXRzLAorICAgICAgcGFyYW1ldGVycy0+cGFyaXR5LCBwYXJhbWV0ZXJzLT5mbG93Q29udHJvbAorICAgICk7CisgIH0gZWxzZSBpZiAoc2VyaWFsLT5zZXRMaW5lUHJvcGVydGllcykgeworICAgIG9rID0gc2VyaWFsLT5zZXRMaW5lUHJvcGVydGllcygKKyAgICAgIGRldmljZSwgcGFyYW1ldGVycy0+YmF1ZCwKKyAgICAgIHBhcmFtZXRlcnMtPmRhdGFCaXRzLCBwYXJhbWV0ZXJzLT5zdG9wQml0cywKKyAgICAgIHBhcmFtZXRlcnMtPnBhcml0eQorICAgICk7CisgIH0gZWxzZSB7CisgICAgb2sgPSAxOworCisgICAgaWYgKCFzZXJpYWwtPnNldEJhdWQpIHsKKyAgICAgIHVzYkxvZ1NlcmlhbFByb2JsZW0oZGV2aWNlLCAic2V0dGluZyBiYXVkIGlzIG5vdCBzdXBwb3J0ZWQiKTsKKyAgICB9IGVsc2UgaWYgKCFzZXJpYWwtPnNldEJhdWQoZGV2aWNlLCBwYXJhbWV0ZXJzLT5iYXVkKSkgeworICAgICAgb2sgPSAwOworICAgIH0KKworICAgIGlmICghc2VyaWFsLT5zZXREYXRhRm9ybWF0KSB7CisgICAgICB1c2JMb2dTZXJpYWxQcm9ibGVtKGRldmljZSwgInNldHRpbmcgZGF0YSBmb3JtYXQgaXMgbm90IHN1cHBvcnRlZCIpOworICAgIH0gZWxzZSBpZiAoIXNlcmlhbC0+c2V0RGF0YUZvcm1hdChkZXZpY2UsIHBhcmFtZXRlcnMtPmRhdGFCaXRzLCBwYXJhbWV0ZXJzLT5zdG9wQml0cywgcGFyYW1ldGVycy0+cGFyaXR5KSkgeworICAgICAgb2sgPSAwOworICAgIH0KKworICAgIGlmICghc2VyaWFsLT5zZXRGbG93Q29udHJvbCkgeworICAgICAgdXNiTG9nU2VyaWFsUHJvYmxlbShkZXZpY2UsICJzZXR0aW5nIGZsb3cgY29udHJvbCBpcyBub3Qgc3VwcG9ydGVkIik7CisgICAgfSBlbHNlIGlmICghc2VyaWFsLT5zZXRGbG93Q29udHJvbChkZXZpY2UsIHBhcmFtZXRlcnMtPmZsb3dDb250cm9sKSkgeworICAgICAgb2sgPSAwOworICAgIH0KKyAgfQorCisgIHJldHVybiBvazsKK30KZGlmZiAtLWdpdCBhL1Byb2dyYW1zL3VzYl9zZXJpYWwuaCBiL1Byb2dyYW1zL3VzYl9zZXJpYWwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOTg4NmZjCi0tLSAvZGV2L251bGwKKysrIGIvUHJvZ3JhbXMvdXNiX3NlcmlhbC5oCkBAIC0wLDAgKzEsNjIgQEAKKy8qCisgKiBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorICogICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorICoKKyAqIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorICoKKyAqIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyAqLworCisjaWZuZGVmIEJSTFRUWV9JTkNMVURFRF9VU0JfU0VSSUFMCisjZGVmaW5lIEJSTFRUWV9JTkNMVURFRF9VU0JfU0VSSUFMCisKKyNpbmNsdWRlICJpb191c2IuaCIKKyNpbmNsdWRlICJpb19sb2cuaCIKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZiAvKiBfX2NwbHVzcGx1cyAqLworCit0eXBlZGVmIHN0cnVjdCB7CisgIGNvbnN0IFVzYlNlcmlhbE9wZXJhdGlvbnMgKm9wZXJhdGlvbnM7CisgIHVpbnQxNl90IHZlbmRvcjsKKyAgdWludDE2X3QgcHJvZHVjdDsKKyAgdW5zaWduZWQgZ2VuZXJpYzoxOworfSBVc2JTZXJpYWxBZGFwdGVyOworCitleHRlcm4gY29uc3QgVXNiU2VyaWFsQWRhcHRlciAqdXNiRmluZFNlcmlhbEFkYXB0ZXIgKGNvbnN0IFVzYkRldmljZURlc2NyaXB0b3IgKmRlc2NyaXB0b3IpOworZXh0ZXJuIGNvbnN0IFVzYlNlcmlhbE9wZXJhdGlvbnMgdXNiU2VyaWFsT3BlcmF0aW9uc19DRENfQUNNOworZXh0ZXJuIGNvbnN0IFVzYlNlcmlhbE9wZXJhdGlvbnMgdXNiU2VyaWFsT3BlcmF0aW9uc19CZWxraW47CitleHRlcm4gY29uc3QgVXNiU2VyaWFsT3BlcmF0aW9ucyB1c2JTZXJpYWxPcGVyYXRpb25zX0NIMzQxOworZXh0ZXJuIGNvbnN0IFVzYlNlcmlhbE9wZXJhdGlvbnMgdXNiU2VyaWFsT3BlcmF0aW9uc19DUDIxMDE7CitleHRlcm4gY29uc3QgVXNiU2VyaWFsT3BlcmF0aW9ucyB1c2JTZXJpYWxPcGVyYXRpb25zX0NQMjExMDsKK2V4dGVybiBjb25zdCBVc2JTZXJpYWxPcGVyYXRpb25zIHVzYlNlcmlhbE9wZXJhdGlvbnNfRlRESV9TSU87CitleHRlcm4gY29uc3QgVXNiU2VyaWFsT3BlcmF0aW9ucyB1c2JTZXJpYWxPcGVyYXRpb25zX0ZURElfRlQ4VTIzMkFNOworZXh0ZXJuIGNvbnN0IFVzYlNlcmlhbE9wZXJhdGlvbnMgdXNiU2VyaWFsT3BlcmF0aW9uc19GVERJX0ZUMjMyQk07CisKK2V4dGVybiBVc2JTZXJpYWxEYXRhICp1c2JHZXRTZXJpYWxEYXRhIChVc2JEZXZpY2UgKmRldmljM2UpOworZXh0ZXJuIGludCB1c2JTa2lwSW5pdGlhbEJ5dGVzIChVc2JJbnB1dEZpbHRlckRhdGEgKmRhdGEsIHVuc2lnbmVkIGludCBjb3VudCk7CisKK3N0YXRpYyBpbmxpbmUgaW50Cit1c2JVcGRhdGVCeXRlICh1aW50OF90ICpieXRlLCB1aW50OF90IG1hc2ssIHVpbnQ4X3QgdmFsdWUpIHsKKyAgaWYgKCgqYnl0ZSAmIG1hc2spID09IHZhbHVlKSByZXR1cm4gMDsKKworICAqYnl0ZSAmPSB+bWFzazsKKyAgKmJ5dGUgfD0gdmFsdWU7CisgIHJldHVybiAxOworfQorCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZiAvKiBfX2NwbHVzcGx1cyAqLworCisjZW5kaWYgLyogQlJMVFRZX0lOQ0xVREVEX1VTQl9TRVJJQUwgKi8KZGlmZiAtLWdpdCBhL1Byb2dyYW1zL3VzYl9zb2xhcmlzLmMgYi9Qcm9ncmFtcy91c2Jfc29sYXJpcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg5ODQ2MTQKLS0tIC9kZXYvbnVsbAorKysgYi9Qcm9ncmFtcy91c2Jfc29sYXJpcy5jCkBAIC0wLDAgKzEsNjQ5IEBACisvKgorICogQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyAqICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyAqCisgKiBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorICoKKyAqIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyAqCisgKiBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisgKi8KKworI2luY2x1ZGUgInByb2xvZ3VlLmgiCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0cmluZ3MuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPGRpcmVudC5oPgorI2luY2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVkZSA8c3lzL2FzeW5jaC5oPgorI2luY2x1ZGUgPHN5cy91c2IvY2xpZW50cy91Z2VuL3VzYl91Z2VuLmg+CisKKyNpbmNsdWRlICJsb2cuaCIKKyNpbmNsdWRlICJpb191c2IuaCIKKyNpbmNsdWRlICJ1c2JfaW50ZXJuYWwuaCIKKworc3RydWN0IFVzYkRldmljZUV4dGVuc2lvblN0cnVjdCB7CisgIGNoYXIgKnBhdGg7CisgIGludCBkYXRhOworICBpbnQgc3RhdHVzOworCisgIHVuc2lnbmVkIGNoYXIgY29uZmlndXJhdGlvbjsKKyAgdW5zaWduZWQgY2hhciBpbnRlcmZhY2U7CisgIHVuc2lnbmVkIGNoYXIgYWx0ZXJuYXRpdmU7Cit9OworCitzdHJ1Y3QgVXNiRW5kcG9pbnRFeHRlbnNpb25TdHJ1Y3QgeworICBRdWV1ZSAqcmVxdWVzdHM7CisKKyAgY2hhciAqbmFtZTsKKyAgaW50IGRhdGE7CisgIGludCBzdGF0dXM7Cit9OworCit0eXBlZGVmIHN0cnVjdCB7CisgIGFpb19yZXN1bHRfdCByZXN1bHQ7IC8qIG11c3QgYmUgZmlyc3QgZm9yIGFpb3dhaXQoKSAqLworCisgIFVzYkVuZHBvaW50ICplbmRwb2ludDsKKworICB2b2lkICpjb250ZXh0OworICB2b2lkICpidWZmZXI7CisgIHNpemVfdCBsZW5ndGg7Cit9IFVzYkFzeW5jaHJvbm91c1JlcXVlc3Q7CisKK3N0YXRpYyBpbnQKK3VzYk9wZW5TdGF0dXNGaWxlIChjb25zdCBjaGFyICpwYXRoLCBpbnQgKnN0YXR1cykgeworICBpZiAoKCpzdGF0dXMgPSBvcGVuKHBhdGgsIE9fUkRPTkxZKSkgIT0gLTEpIHJldHVybiAxOworICBsb2dTeXN0ZW1FcnJvcigiVVNCIHN0YXR1cyBmaWxlIG9wZW4iKTsKKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK3VzYk9wZW5FbmRwb2ludEZpbGVzICgKKyAgY29uc3QgY2hhciAqZGV2aWNlLAorICBjb25zdCBjaGFyICplbmRwb2ludCwKKyAgaW50ICpkYXRhLAorICBpbnQgKnN0YXR1cywKKyAgaW50IGZsYWdzCispIHsKKyAgc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IHN1ZmZpeCA9ICJzdGF0IjsKKyAgY2hhciBwYXRoW3N0cmxlbihkZXZpY2UpICsgMSArIHN0cmxlbihlbmRwb2ludCkgKyBzdHJsZW4oc3VmZml4KSArIDFdOworCisgIHNwcmludGYocGF0aCwgIiVzLyVzIiwgZGV2aWNlLCBlbmRwb2ludCk7CisgIGlmICgoKmRhdGEgPSBvcGVuKHBhdGgsIGZsYWdzKSkgIT0gLTEpIHsKKyAgICBzdHJjYXQocGF0aCwgc3VmZml4KTsKKyAgICBpZiAodXNiT3BlblN0YXR1c0ZpbGUocGF0aCwgc3RhdHVzKSkgeworICAgICAgcmV0dXJuIDE7CisgICAgfSBlbHNlIHsKKyAgICAgIGxvZ1N5c3RlbUVycm9yKCJVU0IgZW5kcG9pbnQgc3RhdHVzIG9wZW4iKTsKKyAgICB9CisKKyAgICBjbG9zZSgqZGF0YSk7CisgICAgKmRhdGEgPSAtMTsKKyAgfSBlbHNlIHsKKyAgICBsb2dTeXN0ZW1FcnJvcigiVVNCIGVuZHBvaW50IGRhdGEgb3BlbiIpOworICB9CisKKyAgcmV0dXJuIDA7Cit9CisKK2ludAordXNiRGlzYWJsZUF1dG9zdXNwZW5kIChVc2JEZXZpY2UgKmRldmljZSkgeworICBsb2dVbnN1cHBvcnRlZEZ1bmN0aW9uKCk7CisgIHJldHVybiAwOworfQorCitpbnQKK3VzYlNldENvbmZpZ3VyYXRpb24gKFVzYkRldmljZSAqZGV2aWNlLCB1bnNpZ25lZCBjaGFyIGNvbmZpZ3VyYXRpb24pIHsKKyAgVXNiRGV2aWNlRXh0ZW5zaW9uICpkZXZ4ID0gZGV2aWNlLT5leHRlbnNpb247CisgIGRldngtPmNvbmZpZ3VyYXRpb24gPSBjb25maWd1cmF0aW9uOworICByZXR1cm4gMTsKK30KKworaW50Cit1c2JDbGFpbUludGVyZmFjZSAoVXNiRGV2aWNlICpkZXZpY2UsIHVuc2lnbmVkIGNoYXIgaW50ZXJmYWNlKSB7CisgIFVzYkRldmljZUV4dGVuc2lvbiAqZGV2eCA9IGRldmljZS0+ZXh0ZW5zaW9uOworICBkZXZ4LT5pbnRlcmZhY2UgPSBpbnRlcmZhY2U7CisgIGRldngtPmFsdGVybmF0aXZlID0gMDsKKyAgcmV0dXJuIDE7Cit9CisKK2ludAordXNiUmVsZWFzZUludGVyZmFjZSAoVXNiRGV2aWNlICpkZXZpY2UsIHVuc2lnbmVkIGNoYXIgaW50ZXJmYWNlKSB7CisgIHJldHVybiAxOworfQorCitpbnQKK3VzYlNldEFsdGVybmF0aXZlICgKKyAgVXNiRGV2aWNlICpkZXZpY2UsCisgIHVuc2lnbmVkIGNoYXIgaW50ZXJmYWNlLAorICB1bnNpZ25lZCBjaGFyIGFsdGVybmF0aXZlCispIHsKKyAgVXNiRGV2aWNlRXh0ZW5zaW9uICpkZXZ4ID0gZGV2aWNlLT5leHRlbnNpb247CisgIGRldngtPmludGVyZmFjZSA9IGludGVyZmFjZTsKKyAgZGV2eC0+YWx0ZXJuYXRpdmUgPSBhbHRlcm5hdGl2ZTsKKyAgcmV0dXJuIDE7Cit9CisKK2ludAordXNiUmVzZXREZXZpY2UgKFVzYkRldmljZSAqZGV2aWNlKSB7CisgIGxvZ1Vuc3VwcG9ydGVkRnVuY3Rpb24oKTsKKyAgcmV0dXJuIDA7Cit9CisKK2ludAordXNiQ2xlYXJIYWx0IChVc2JEZXZpY2UgKmRldmljZSwgdW5zaWduZWQgY2hhciBlbmRwb2ludEFkZHJlc3MpIHsKKyAgbG9nVW5zdXBwb3J0ZWRGdW5jdGlvbigpOworICByZXR1cm4gMDsKK30KKworc3NpemVfdAordXNiQ29udHJvbFRyYW5zZmVyICgKKyAgVXNiRGV2aWNlICpkZXZpY2UsCisgIHVpbnQ4X3QgZGlyZWN0aW9uLAorICB1aW50OF90IHJlY2lwaWVudCwKKyAgdWludDhfdCB0eXBlLAorICB1aW50OF90IHJlcXVlc3QsCisgIHVpbnQxNl90IHZhbHVlLAorICB1aW50MTZfdCBpbmRleCwKKyAgdm9pZCAqYnVmZmVyLAorICB1aW50MTZfdCBsZW5ndGgsCisgIGludCB0aW1lb3V0CispIHsKKyAgVXNiRGV2aWNlRXh0ZW5zaW9uICpkZXZ4ID0gZGV2aWNlLT5leHRlbnNpb247CisgIFVzYlNldHVwUGFja2V0IHNldHVwOworCisgIHNldHVwLmJSZXF1ZXN0VHlwZSA9IGRpcmVjdGlvbiB8IHJlY2lwaWVudCB8IHR5cGU7CisgIHNldHVwLmJSZXF1ZXN0ID0gcmVxdWVzdDsKKyAgcHV0TGl0dGxlRW5kaWFuMTYoJnNldHVwLndWYWx1ZSwgdmFsdWUpOworICBwdXRMaXR0bGVFbmRpYW4xNigmc2V0dXAud0luZGV4LCBpbmRleCk7CisgIHB1dExpdHRsZUVuZGlhbjE2KCZzZXR1cC53TGVuZ3RoLCBsZW5ndGgpOworCisgIHN3aXRjaCAoZGlyZWN0aW9uKSB7CisgICAgY2FzZSBVc2JDb250cm9sRGlyZWN0aW9uX0lucHV0OiB7CisgICAgICBzaXplX3Qgc2l6ZSA9IHNpemVvZihzZXR1cCk7CisgICAgICBzc2l6ZV90IGNvdW50OworCisgICAgICBpZiAoKGNvdW50ID0gd3JpdGUoZGV2eC0+ZGF0YSwgJnNldHVwLCBzaXplKSkgPT0gLTEpIHsKKyAgICAgICAgbG9nU3lzdGVtRXJyb3IoIlVTQiBjb250cm9sIHJlcXVlc3QiKTsKKyAgICAgIH0gZWxzZSBpZiAoY291bnQgIT0gc2l6ZSkgeworICAgICAgICBsb2dNZXNzYWdlKExPR19FUlIsICJVU0IgdHJ1bmNhdGVkIGNvbnRyb2wgcmVxdWVzdDogJWQgPCAlZCIsIGNvdW50LCBzaXplKTsKKyAgICAgICAgZXJybm8gPSBFSU87CisgICAgICB9IGVsc2UgaWYgKChjb3VudCA9IHJlYWQoZGV2eC0+ZGF0YSwgYnVmZmVyLCBsZW5ndGgpKSA9PSAtMSkgeworICAgICAgICBsb2dTeXN0ZW1FcnJvcigiVVNCIGNvbnRyb2wgcmVhZCIpOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgcmV0dXJuIGNvdW50OworICAgICAgfQorICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBVc2JDb250cm9sRGlyZWN0aW9uX091dHB1dDogeworICAgICAgdW5zaWduZWQgY2hhciBwYWNrZXRbc2l6ZW9mKHNldHVwKSArIGxlbmd0aF07CisgICAgICBzaXplX3Qgc2l6ZSA9IDA7CisgICAgICBzc2l6ZV90IGNvdW50OworCisgICAgICBtZW1jcHkoJnBhY2tldFtzaXplXSwgJnNldHVwLCBzaXplb2Yoc2V0dXApKTsKKyAgICAgIHNpemUgKz0gc2l6ZW9mKHNldHVwKTsKKworICAgICAgbWVtY3B5KCZwYWNrZXRbc2l6ZV0sIGJ1ZmZlciwgbGVuZ3RoKTsKKyAgICAgIHNpemUgKz0gbGVuZ3RoOworCisgICAgICBpZiAoKGNvdW50ID0gd3JpdGUoZGV2eC0+ZGF0YSwgcGFja2V0LCBzaXplKSkgPT0gLTEpIHsKKyAgICAgICAgbG9nU3lzdGVtRXJyb3IoIlVTQiBjb250cm9sIHdyaXRlIik7CisgICAgICB9IGVsc2UgaWYgKGNvdW50ICE9IHNpemUpIHsKKyAgICAgICAgbG9nTWVzc2FnZShMT0dfRVJSLCAiVVNCIHRydW5jYXRlZCBjb250cm9sIHdyaXRlOiAlZCA8ICVkIiwgY291bnQsIHNpemUpOworICAgICAgICBlcnJubyA9IEVJTzsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIHJldHVybiBzaXplOworICAgICAgfQorICAgICAgYnJlYWs7CisgICAgfQorCisgICAgZGVmYXVsdDoKKyAgICAgIGxvZ01lc3NhZ2UoTE9HX0VSUiwgIlVTQiB1bnN1cHBvcnRlZCBjb250cm9sIGRpcmVjdGlvbjogJTAyWCIsIGRpcmVjdGlvbik7CisgICAgICBlcnJubyA9IEVOT1NZUzsKKyAgICAgIGJyZWFrOworICB9CisKKyAgcmV0dXJuIC0xOworfQorCit2b2lkICoKK3VzYlN1Ym1pdFJlcXVlc3QgKAorICBVc2JEZXZpY2UgKmRldmljZSwKKyAgdW5zaWduZWQgY2hhciBlbmRwb2ludEFkZHJlc3MsCisgIHZvaWQgKmJ1ZmZlciwKKyAgc2l6ZV90IGxlbmd0aCwKKyAgdm9pZCAqY29udGV4dAorKSB7CisgIFVzYkVuZHBvaW50ICplbmRwb2ludDsKKworICBpZiAoKGVuZHBvaW50ID0gdXNiR2V0RW5kcG9pbnQoZGV2aWNlLCBlbmRwb2ludEFkZHJlc3MpKSkgeworICAgIFVzYkVuZHBvaW50RXh0ZW5zaW9uICplcHR4ID0gZW5kcG9pbnQtPmV4dGVuc2lvbjsKKyAgICBVc2JBc3luY2hyb25vdXNSZXF1ZXN0ICpyZXF1ZXN0OworCisgICAgaWYgKChyZXF1ZXN0ID0gbWFsbG9jKHNpemVvZigqcmVxdWVzdCkgKyBsZW5ndGgpKSkgeworICAgICAgVXNiRW5kcG9pbnREaXJlY3Rpb24gZGlyZWN0aW9uID0gVVNCX0VORFBPSU5UX0RJUkVDVElPTihlbmRwb2ludC0+ZGVzY3JpcHRvcik7CisKKyAgICAgIHJlcXVlc3QtPmVuZHBvaW50ID0gZW5kcG9pbnQ7CisgICAgICByZXF1ZXN0LT5jb250ZXh0ID0gY29udGV4dDsKKyAgICAgIHJlcXVlc3QtPmJ1ZmZlciA9IChyZXF1ZXN0LT5sZW5ndGggPSBsZW5ndGgpPyAocmVxdWVzdCArIDEpOiBOVUxMOworICAgICAgcmVxdWVzdC0+cmVzdWx0LmFpb19yZXR1cm4gPSBBSU9fSU5QUk9HUkVTUzsKKworICAgICAgc3dpdGNoIChkaXJlY3Rpb24pIHsKKyAgICAgICAgY2FzZSBVc2JFbmRwb2ludERpcmVjdGlvbl9JbnB1dDoKKyAgICAgICAgICBpZiAoYWlvcmVhZChlcHR4LT5kYXRhLCByZXF1ZXN0LT5idWZmZXIsIHJlcXVlc3QtPmxlbmd0aCwgMCwgU0VFS19DVVIsICZyZXF1ZXN0LT5yZXN1bHQpICE9IC0xKSByZXR1cm4gcmVxdWVzdDsKKyAgICAgICAgICBsb2dTeXN0ZW1FcnJvcigiVVNCIGFzeW5jaHJvbm91cyByZWFkIik7CisgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBVc2JFbmRwb2ludERpcmVjdGlvbl9PdXRwdXQ6CisgICAgICAgICAgaWYgKHJlcXVlc3QtPmJ1ZmZlcikgbWVtY3B5KHJlcXVlc3QtPmJ1ZmZlciwgYnVmZmVyLCBsZW5ndGgpOworICAgICAgICAgIGlmIChhaW93cml0ZShlcHR4LT5kYXRhLCByZXF1ZXN0LT5idWZmZXIsIHJlcXVlc3QtPmxlbmd0aCwgMCwgU0VFS19DVVIsICZyZXF1ZXN0LT5yZXN1bHQpICE9IC0xKSByZXR1cm4gcmVxdWVzdDsKKyAgICAgICAgICBsb2dTeXN0ZW1FcnJvcigiVVNCIGFzeW5jaHJvbm91cyB3cml0ZSIpOworICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgbG9nTWVzc2FnZShMT0dfRVJSLCAiVVNCIHVuc3VwcG9ydGVkIGFzeW5jaHJvbm91cyBkaXJlY3Rpb246ICUwMlgiLCBkaXJlY3Rpb24pOworICAgICAgICAgIGVycm5vID0gRU5PU1lTOworICAgICAgICAgIGJyZWFrOworICAgICAgfQorCisgICAgICBmcmVlKHJlcXVlc3QpOworICAgIH0gZWxzZSB7CisgICAgICBsb2dTeXN0ZW1FcnJvcigiVVNCIGFzeW5jaHJvbm91cyByZXF1ZXN0IGFsbG9jYXRlIik7CisgICAgfQorICB9CisKKyAgcmV0dXJuIE5VTEw7Cit9CisKK2ludAordXNiQ2FuY2VsUmVxdWVzdCAoVXNiRGV2aWNlICpkZXZpY2UsIHZvaWQgKnJlcXVlc3QpIHsKKyAgVXNiQXN5bmNocm9ub3VzUmVxdWVzdCAqcmVxID0gcmVxdWVzdDsKKyAgVXNiRW5kcG9pbnQgKmVuZHBvaW50ID0gcmVxLT5lbmRwb2ludDsKKyAgVXNiRW5kcG9pbnRFeHRlbnNpb24gKmVwdHggPSBlbmRwb2ludC0+ZXh0ZW5zaW9uOworCisgIGlmICghZGVsZXRlSXRlbShlcHR4LT5yZXF1ZXN0cywgcmVxKSkgeworICAgIGlmIChhaW9jYW5jZWwoJnJlcS0+cmVzdWx0KSA9PSAtMSkgeworICAgICAgaWYgKChlcnJubyAhPSBFSU5WQUwpICYmIChlcnJubyAhPSBFQUNDRVMpKSB7CisgICAgICAgIGxvZ1N5c3RlbUVycm9yKCJVU0IgYXN5bmNocm9ub3VzIGNhbmNlbCIpOworICAgICAgICByZXR1cm4gMDsKKyAgICAgIH0KKyAgICB9CisgIH0KKworICBmcmVlKHJlcXVlc3QpOworICByZXR1cm4gMTsKK30KKwordm9pZCAqCit1c2JSZWFwUmVzcG9uc2UgKAorICBVc2JEZXZpY2UgKmRldmljZSwKKyAgdW5zaWduZWQgY2hhciBlbmRwb2ludEFkZHJlc3MsCisgIFVzYlJlc3BvbnNlICpyZXNwb25zZSwKKyAgaW50IHdhaXQKKykgeworICBVc2JFbmRwb2ludCAqZW5kcG9pbnQ7CisKKyAgaWYgKChlbmRwb2ludCA9IHVzYkdldEVuZHBvaW50KGRldmljZSwgZW5kcG9pbnRBZGRyZXNzKSkpIHsKKyAgICBVc2JFbmRwb2ludEV4dGVuc2lvbiAqZXB0eCA9IGVuZHBvaW50LT5leHRlbnNpb247CisgICAgc3RydWN0IHRpbWV2YWwgdGltZW91dDsKKyAgICBVc2JBc3luY2hyb25vdXNSZXF1ZXN0ICpyZXF1ZXN0OworCisgICAgdGltZW91dC50dl9zZWMgPSAwOworICAgIHRpbWVvdXQudHZfdXNlYyA9IDA7CisKKyAgICB3aGlsZSAoIShyZXF1ZXN0ID0gZGVxdWV1ZUl0ZW0oZXB0eC0+cmVxdWVzdHMpKSkgeworICAgICAgYWlvX3Jlc3VsdF90ICpyZXN1bHQ7CisKKyAgICBkb1dhaXQ6CisgICAgICBpZiAoKGludCkocmVzdWx0ID0gYWlvd2FpdCh3YWl0PyBOVUxMOiAmdGltZW91dCkpID09IC0xKSB7CisgICAgICAgIGlmIChlcnJubyA9PSBFSU5UUikgZ290byBkb1dhaXQ7CisKKyAgICAgICAgaWYgKGVycm5vICE9IEVJTlZBTCkgeworICAgICAgICAgIGxvZ1N5c3RlbUVycm9yKCJVU0IgYXN5bmNocm9ub3VzIHdhaXQiKTsKKyAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorCisgICAgICAgIHJlc3VsdCA9IE5VTEw7CisgICAgICB9CisKKyAgICAgIGlmICghcmVzdWx0KSB7CisgICAgICAgIGVycm5vID0gRUFHQUlOOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgIH0KKworICAgICAgcmVxdWVzdCA9IChVc2JBc3luY2hyb25vdXNSZXF1ZXN0ICopcmVzdWx0OworICAgICAgeworICAgICAgICBVc2JFbmRwb2ludCAqZXAgPSByZXF1ZXN0LT5lbmRwb2ludDsKKyAgICAgICAgVXNiRW5kcG9pbnRFeHRlbnNpb24gKmVweCA9IGVwLT5leHRlbnNpb247CisgICAgICAgIGlmICghZW5xdWV1ZUl0ZW0oZXB4LT5yZXF1ZXN0cywgcmVxdWVzdCkpIHsKKyAgICAgICAgICBsb2dTeXN0ZW1FcnJvcigiVVNCIGFzeW5jaHJvbm91cyBlbnF1ZXVlIik7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9CisKKyAgICByZXNwb25zZS0+Y29udGV4dCA9IHJlcXVlc3QtPmNvbnRleHQ7CisgICAgcmVzcG9uc2UtPmJ1ZmZlciA9IHJlcXVlc3QtPmJ1ZmZlcjsKKyAgICByZXNwb25zZS0+c2l6ZSA9IHJlcXVlc3QtPmxlbmd0aDsKKyAgICByZXNwb25zZS0+Y291bnQgPSByZXF1ZXN0LT5yZXN1bHQuYWlvX3JldHVybjsKKyAgICByZXNwb25zZS0+ZXJyb3IgPSByZXF1ZXN0LT5yZXN1bHQuYWlvX2Vycm5vOworCisgICAgaWYgKHJlc3BvbnNlLT5jb3VudCA9PSAtMSkgeworICAgICAgZXJybm8gPSByZXNwb25zZS0+ZXJyb3I7CisgICAgICBsb2dTeXN0ZW1FcnJvcigiVVNCIGFzeW5jaHJvbm91cyBjb21wbGV0aW9uIik7CisgICAgfSBlbHNlIHsKKyAgICAgIHN3aXRjaCAoVVNCX0VORFBPSU5UX0RJUkVDVElPTihlbmRwb2ludC0+ZGVzY3JpcHRvcikpIHsKKyAgICAgICAgY2FzZSBVc2JFbmRwb2ludERpcmVjdGlvbl9JbnB1dDoKKyAgICAgICAgICBpZiAoIXVzYkFwcGx5SW5wdXRGaWx0ZXJzKGVuZHBvaW50LCByZXNwb25zZS0+YnVmZmVyLCByZXNwb25zZS0+c2l6ZSwgJnJlc3BvbnNlLT5jb3VudCkpIHsKKyAgICAgICAgICAgIHJlc3BvbnNlLT5lcnJvciA9IEVJTzsKKyAgICAgICAgICAgIHJlc3BvbnNlLT5jb3VudCA9IC0xOworICAgICAgICAgIH0KKyAgICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gcmVxdWVzdDsKKyAgfQorCisgIHJldHVybiBOVUxMOworfQorCitpbnQKK3VzYk1vbml0b3JJbnB1dEVuZHBvaW50ICgKKyAgVXNiRGV2aWNlICpkZXZpY2UsIHVuc2lnbmVkIGNoYXIgZW5kcG9pbnROdW1iZXIsCisgIEFzeW5jTW9uaXRvckNhbGxiYWNrICpjYWxsYmFjaywgdm9pZCAqZGF0YQorKSB7CisgIHJldHVybiAwOworfQorCitzc2l6ZV90Cit1c2JSZWFkRW5kcG9pbnQgKAorICBVc2JEZXZpY2UgKmRldmljZSwKKyAgdW5zaWduZWQgY2hhciBlbmRwb2ludE51bWJlciwKKyAgdm9pZCAqYnVmZmVyLAorICBzaXplX3QgbGVuZ3RoLAorICBpbnQgdGltZW91dAorKSB7CisgIFVzYkVuZHBvaW50ICplbmRwb2ludDsKKworICBpZiAoKGVuZHBvaW50ID0gdXNiR2V0SW5wdXRFbmRwb2ludChkZXZpY2UsIGVuZHBvaW50TnVtYmVyKSkpIHsKKyAgICBVc2JFbmRwb2ludEV4dGVuc2lvbiAqZXB0eCA9IGVuZHBvaW50LT5leHRlbnNpb247CisgICAgc3NpemVfdCBjb3VudDsKKworICBkb1JlYWQ6CisgICAgaWYgKChjb3VudCA9IHJlYWQoZXB0eC0+ZGF0YSwgYnVmZmVyLCBsZW5ndGgpKSA9PSAtMSkgeworICAgICAgaWYgKGVycm5vID09IEVJTlRSKSBnb3RvIGRvUmVhZDsKKyAgICAgIGxvZ1N5c3RlbUVycm9yKCJVU0IgZW5kcG9pbnQgcmVhZCIpOworICAgIH0gZWxzZSBpZiAoIXVzYkFwcGx5SW5wdXRGaWx0ZXJzKGVuZHBvaW50LCBidWZmZXIsIGxlbmd0aCwgJmNvdW50KSkgeworICAgICAgZXJybm8gPSBFSU87CisgICAgfSBlbHNlIGlmICghY291bnQpIHsKKyAgICAgIGVycm5vID0gRUFHQUlOOworICAgIH0gZWxzZSB7CisgICAgICByZXR1cm4gY291bnQ7CisgICAgfQorICB9CisKKyAgcmV0dXJuIC0xOworfQorCitzc2l6ZV90Cit1c2JXcml0ZUVuZHBvaW50ICgKKyAgVXNiRGV2aWNlICpkZXZpY2UsCisgIHVuc2lnbmVkIGNoYXIgZW5kcG9pbnROdW1iZXIsCisgIGNvbnN0IHZvaWQgKmJ1ZmZlciwKKyAgc2l6ZV90IGxlbmd0aCwKKyAgaW50IHRpbWVvdXQKKykgeworICBVc2JFbmRwb2ludCAqZW5kcG9pbnQ7CisKKyAgaWYgKChlbmRwb2ludCA9IHVzYkdldE91dHB1dEVuZHBvaW50KGRldmljZSwgZW5kcG9pbnROdW1iZXIpKSkgeworICAgIFVzYkVuZHBvaW50RXh0ZW5zaW9uICplcHR4ID0gZW5kcG9pbnQtPmV4dGVuc2lvbjsKKyAgICBzc2l6ZV90IGNvdW50OworCisgIGRvV3JpdGU6CisgICAgaWYgKChjb3VudCA9IHdyaXRlKGVwdHgtPmRhdGEsIGJ1ZmZlciwgbGVuZ3RoKSkgPT0gLTEpIHsKKyAgICAgIGlmIChlcnJubyA9PSBFSU5UUikgZ290byBkb1dyaXRlOworICAgICAgbG9nU3lzdGVtRXJyb3IoIlVTQiBlbmRwb2ludCB3cml0ZSIpOworICAgIH0gZWxzZSBpZiAoY291bnQgIT0gbGVuZ3RoKSB7CisgICAgICBsb2dNZXNzYWdlKExPR19FUlIsICJVU0IgdHJ1bmNhdGVkIGVuZHBvaW50IHdyaXRlOiAlZCA8ICVkIiwgY291bnQsIGxlbmd0aCk7CisgICAgICBlcnJubyA9IEVJTzsKKyAgICB9IGVsc2UgeworICAgICAgcmV0dXJuIGNvdW50OworICAgIH0KKyAgfQorCisgIHJldHVybiAtMTsKK30KKworaW50Cit1c2JSZWFkRGV2aWNlRGVzY3JpcHRvciAoVXNiRGV2aWNlICpkZXZpY2UpIHsKKyAgaW50IGNvdW50ID0gdXNiR2V0RGV2aWNlRGVzY3JpcHRvcihkZXZpY2UsICZkZXZpY2UtPmRlc2NyaXB0b3IpOworCisgIGlmIChjb3VudCA9PSBVc2JEZXNjcmlwdG9yU2l6ZV9EZXZpY2UpIHsKKyAgICByZXR1cm4gMTsKKyAgfQorCisgIGlmIChjb3VudCAhPSAtMSkgeworICAgIGxvZ01lc3NhZ2UoTE9HX0VSUiwgIlVTQiBzaG9ydCBkZXZpY2UgZGVzY3JpcHRvciAoJWQpLiIsIGNvdW50KTsKKyAgICBlcnJubyA9IEVJTzsKKyAgfQorCisgIHJldHVybiAwOworfQorCitpbnQKK3VzYkFsbG9jYXRlRW5kcG9pbnRFeHRlbnNpb24gKFVzYkVuZHBvaW50ICplbmRwb2ludCkgeworICBVc2JEZXZpY2UgKmRldmljZSA9IGVuZHBvaW50LT5kZXZpY2U7CisgIFVzYkRldmljZUV4dGVuc2lvbiAqZGV2eCA9IGRldmljZS0+ZXh0ZW5zaW9uOworICBVc2JFbmRwb2ludEV4dGVuc2lvbiAqZXB0eDsKKworICBpZiAoKGVwdHggPSBtYWxsb2Moc2l6ZW9mKCplcHR4KSkpKSB7CisgICAgaWYgKChlcHR4LT5yZXF1ZXN0cyA9IG5ld1F1ZXVlKE5VTEwsIE5VTEwpKSkgeworICAgICAgaW50IGZsYWdzOworICAKKyAgICAgIHsKKyAgICAgICAgY2hhciBuYW1lWzBYODBdOworICAgICAgICBpbnQgbGVuZ3RoID0gMDsKKyAgCisgICAgICAgIGlmIChkZXZ4LT5jb25maWd1cmF0aW9uICE9IDEpIHsKKyAgICAgICAgICBpbnQgY291bnQ7CisgICAgICAgICAgc3ByaW50ZigmbmFtZVtsZW5ndGhdLCAiY2ZnJWQlbiIsIGRldngtPmNvbmZpZ3VyYXRpb24sICZjb3VudCk7CisgICAgICAgICAgbGVuZ3RoICs9IGNvdW50OworICAgICAgICB9CisgIAorICAgICAgICB7CisgICAgICAgICAgaW50IGNvdW50OworICAgICAgICAgIHNwcmludGYoJm5hbWVbbGVuZ3RoXSwgImlmJWQlbiIsIGRldngtPmludGVyZmFjZSwgJmNvdW50KTsKKyAgICAgICAgICBsZW5ndGggKz0gY291bnQ7CisgICAgICAgIH0KKyAgCisgICAgICAgIGlmIChkZXZ4LT5hbHRlcm5hdGl2ZSAhPSAwKSB7CisgICAgICAgICAgaW50IGNvdW50OworICAgICAgICAgIHNwcmludGYoJm5hbWVbbGVuZ3RoXSwgIi4lZCVuIiwgZGV2eC0+YWx0ZXJuYXRpdmUsICZjb3VudCk7CisgICAgICAgICAgbGVuZ3RoICs9IGNvdW50OworICAgICAgICB9CisgIAorICAgICAgICB7CisgICAgICAgICAgY29uc3QgVXNiRW5kcG9pbnREZXNjcmlwdG9yICpkZXNjcmlwdG9yID0gZW5kcG9pbnQtPmRlc2NyaXB0b3I7CisgICAgICAgICAgVXNiRW5kcG9pbnREaXJlY3Rpb24gZGlyZWN0aW9uID0gVVNCX0VORFBPSU5UX0RJUkVDVElPTihkZXNjcmlwdG9yKTsKKyAgICAgICAgICBjb25zdCBjaGFyICpwcmVmaXg7CisgIAorICAgICAgICAgIHN3aXRjaCAoZGlyZWN0aW9uKSB7CisgICAgICAgICAgICBjYXNlIFVzYkVuZHBvaW50RGlyZWN0aW9uX0lucHV0OgorICAgICAgICAgICAgICBwcmVmaXggPSAiaW4iOworICAgICAgICAgICAgICBmbGFncyA9IE9fUkRPTkxZOworICAgICAgICAgICAgICBicmVhazsKKyAgCisgICAgICAgICAgICBjYXNlIFVzYkVuZHBvaW50RGlyZWN0aW9uX091dHB1dDoKKyAgICAgICAgICAgICAgcHJlZml4ID0gIm91dCI7CisgICAgICAgICAgICAgIGZsYWdzID0gT19XUk9OTFk7CisgICAgICAgICAgICAgIGJyZWFrOworICAKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgIGxvZ01lc3NhZ2UoTE9HX0VSUiwgIlVTQiB1bnN1cHBvcnRlZCBlbmRwb2ludCBkaXJlY3Rpb246ICUwMlgiLCBkaXJlY3Rpb24pOworICAgICAgICAgICAgICBnb3RvIG5hbWVFcnJvcjsKKyAgICAgICAgICB9CisgIAorICAgICAgICAgIHsKKyAgICAgICAgICAgIGludCBjb3VudDsKKyAgICAgICAgICAgIHNwcmludGYoJm5hbWVbbGVuZ3RoXSwgIiVzJWQlbiIsIHByZWZpeCwgVVNCX0VORFBPSU5UX05VTUJFUihkZXNjcmlwdG9yKSwgJmNvdW50KTsKKyAgICAgICAgICAgIGxlbmd0aCArPSBjb3VudDsKKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgCisgICAgICAgIGVwdHgtPm5hbWUgPSBzdHJkdXAobmFtZSk7CisgICAgICB9CisgIAorICAgICAgaWYgKGVwdHgtPm5hbWUpIHsKKyAgICAgICAgaWYgKHVzYk9wZW5FbmRwb2ludEZpbGVzKGRldngtPnBhdGgsIGVwdHgtPm5hbWUsICZlcHR4LT5kYXRhLCAmZXB0eC0+c3RhdHVzLCAgZmxhZ3MpKSB7CisgICAgICAgICAgZW5kcG9pbnQtPmV4dGVuc2lvbiA9IGVwdHg7CisgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgIH0KKyAgCisgICAgICAgIGZyZWUoZXB0eC0+bmFtZSk7CisgICAgICB9CisgICAgbmFtZUVycm9yOgorCisgICAgICBkZWFsbG9jYXRlUXVldWUoZXB0eC0+cmVxdWVzdHMpOworICAgIH0KKworICAgIGZyZWUoZXB0eCk7CisgIH0KKworICByZXR1cm4gMDsKK30KKwordm9pZAordXNiRGVhbGxvY2F0ZUVuZHBvaW50RXh0ZW5zaW9uIChVc2JFbmRwb2ludEV4dGVuc2lvbiAqZXB0eCkgeworICBpZiAoZXB0eC0+c3RhdHVzICE9IC0xKSB7CisgICAgY2xvc2UoZXB0eC0+c3RhdHVzKTsKKyAgICBlcHR4LT5zdGF0dXMgPSAtMTsKKyAgfQorCisgIGlmIChlcHR4LT5kYXRhICE9IC0xKSB7CisgICAgY2xvc2UoZXB0eC0+ZGF0YSk7CisgICAgZXB0eC0+ZGF0YSA9IC0xOworICB9CisKKyAgaWYgKGVwdHgtPm5hbWUpIHsKKyAgICBmcmVlKGVwdHgtPm5hbWUpOworICAgIGVwdHgtPm5hbWUgPSBOVUxMOworICB9CisKKyAgaWYgKGVwdHgtPnJlcXVlc3RzKSB7CisgICAgZGVhbGxvY2F0ZVF1ZXVlKGVwdHgtPnJlcXVlc3RzKTsKKyAgICBlcHR4LT5yZXF1ZXN0cyA9IE5VTEw7CisgIH0KKworICBmcmVlKGVwdHgpOworfQorCit2b2lkCit1c2JEZWFsbG9jYXRlRGV2aWNlRXh0ZW5zaW9uIChVc2JEZXZpY2VFeHRlbnNpb24gKmRldngpIHsKKyAgaWYgKGRldngtPnN0YXR1cyAhPSAtMSkgeworICAgIGNsb3NlKGRldngtPnN0YXR1cyk7CisgICAgZGV2eC0+c3RhdHVzID0gLTE7CisgIH0KKworICBpZiAoZGV2eC0+ZGF0YSAhPSAtMSkgeworICAgIGNsb3NlKGRldngtPmRhdGEpOworICAgIGRldngtPmRhdGEgPSAtMTsKKyAgfQorCisgIGlmIChkZXZ4LT5wYXRoKSB7CisgICAgZnJlZShkZXZ4LT5wYXRoKTsKKyAgICBkZXZ4LT5wYXRoID0gTlVMTDsKKyAgfQorCisgIGZyZWUoZGV2eCk7Cit9CisKK1VzYkRldmljZSAqCit1c2JGaW5kRGV2aWNlIChVc2JEZXZpY2VDaG9vc2VyICpjaG9vc2VyLCBVc2JDaG9vc2VDaGFubmVsRGF0YSAqZGF0YSkgeworICBVc2JEZXZpY2UgKmRldmljZSA9IE5VTEw7CisgIHN0YXRpYyBjb25zdCBjaGFyICpjb25zdCByb290UGF0aCA9ICIvZGV2L3VzYiI7CisgIGludCByb290TGVuZ3RoID0gc3RybGVuKHJvb3RQYXRoKTsKKyAgRElSICpyb290RGlyZWN0b3J5OworCisgIGlmICgocm9vdERpcmVjdG9yeSA9IG9wZW5kaXIocm9vdFBhdGgpKSkgeworICAgIHN0cnVjdCBkaXJlbnQgKmRldmljZUVudHJ5OworCisgICAgd2hpbGUgKChkZXZpY2VFbnRyeSA9IHJlYWRkaXIocm9vdERpcmVjdG9yeSkpKSB7CisgICAgICBjb25zdCBjaGFyICpkZXZpY2VOYW1lID0gZGV2aWNlRW50cnktPmRfbmFtZTsKKyAgICAgIGludCBkZXZpY2VMZW5ndGggPSBzdHJsZW4oZGV2aWNlTmFtZSk7CisKKyAgICAgIHsKKyAgICAgICAgdW5zaWduZWQgaW50IHZlbmRvcjsKKyAgICAgICAgdW5zaWduZWQgaW50IHByb2R1Y3Q7CisgICAgICAgIGludCBsZW5ndGg7CisgICAgICAgIGlmIChzc2NhbmYoZGV2aWNlTmFtZSwgIiV4LiV4JW4iLCAmdmVuZG9yLCAmcHJvZHVjdCwgJmxlbmd0aCkgPCAyKSBjb250aW51ZTsKKyAgICAgICAgaWYgKGxlbmd0aCAhPSBkZXZpY2VMZW5ndGgpIGNvbnRpbnVlOworICAgICAgfQorCisgICAgICBkZXZpY2VMZW5ndGggKz0gcm9vdExlbmd0aCArIDE7CisgICAgICB7CisgICAgICAgIGNoYXIgZGV2aWNlUGF0aFtkZXZpY2VMZW5ndGggKyAxXTsKKyAgICAgICAgRElSICpkZXZpY2VEaXJlY3Rvcnk7CisKKyAgICAgICAgc3ByaW50ZihkZXZpY2VQYXRoLCAiJXMvJXMiLCByb290UGF0aCwgZGV2aWNlTmFtZSk7CisgICAgICAgIGlmICgoZGV2aWNlRGlyZWN0b3J5ID0gb3BlbmRpcihkZXZpY2VQYXRoKSkpIHsKKyAgICAgICAgICBzdHJ1Y3QgZGlyZW50ICppbnN0YW5jZUVudHJ5OworCisgICAgICAgICAgd2hpbGUgKChpbnN0YW5jZUVudHJ5ID0gcmVhZGRpcihkZXZpY2VEaXJlY3RvcnkpKSkgeworICAgICAgICAgICAgY29uc3QgY2hhciAqaW5zdGFuY2VOYW1lID0gaW5zdGFuY2VFbnRyeS0+ZF9uYW1lOworICAgICAgICAgICAgaW50IGluc3RhbmNlTGVuZ3RoID0gc3RybGVuKGluc3RhbmNlTmFtZSk7CisKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgdW5zaWduZWQgaW50IG51bWJlcjsKKyAgICAgICAgICAgICAgaW50IGxlbmd0aDsKKyAgICAgICAgICAgICAgaWYgKHNzY2FuZihpbnN0YW5jZU5hbWUsICIldSVuIiwgJm51bWJlciwgJmxlbmd0aCkgPCAxKSBjb250aW51ZTsKKyAgICAgICAgICAgICAgaWYgKGxlbmd0aCAhPSBpbnN0YW5jZUxlbmd0aCkgY29udGludWU7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGluc3RhbmNlTGVuZ3RoICs9IGRldmljZUxlbmd0aCArIDE7CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGNoYXIgaW5zdGFuY2VQYXRoW2luc3RhbmNlTGVuZ3RoICsgMV07CisgICAgICAgICAgICAgIFVzYkRldmljZUV4dGVuc2lvbiAqZGV2eDsKKworICAgICAgICAgICAgICBzcHJpbnRmKGluc3RhbmNlUGF0aCwgIiVzLyVzIiwgZGV2aWNlUGF0aCwgaW5zdGFuY2VOYW1lKTsKKyAgICAgICAgICAgICAgaWYgKChkZXZ4ID0gbWFsbG9jKHNpemVvZigqZGV2eCkpKSkgeworICAgICAgICAgICAgICAgIGlmICgoZGV2eC0+cGF0aCA9IHN0cmR1cChpbnN0YW5jZVBhdGgpKSkgeworICAgICAgICAgICAgICAgICAgaWYgKHVzYk9wZW5FbmRwb2ludEZpbGVzKGRldngtPnBhdGgsICJjbnRybDAiLCAmZGV2eC0+ZGF0YSwgJmRldngtPnN0YXR1cywgT19SRFdSKSkgeworICAgICAgICAgICAgICAgICAgICBpZiAoKGRldmljZSA9IHVzYlRlc3REZXZpY2UoZGV2eCwgY2hvb3NlciwgZGF0YSkpKSBicmVhazsKKworICAgICAgICAgICAgICAgICAgICBjbG9zZShkZXZ4LT5zdGF0dXMpOworICAgICAgICAgICAgICAgICAgICBjbG9zZShkZXZ4LT5kYXRhKTsKKyAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgZnJlZShkZXZ4LT5wYXRoKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBmcmVlKGRldngpOworICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgfQorCisgICAgICAgICAgY2xvc2VkaXIoZGV2aWNlRGlyZWN0b3J5KTsKKyAgICAgICAgfQorICAgICAgfQorCisgICAgICBpZiAoZGV2aWNlKSBicmVhazsKKyAgICB9CisKKyAgICBjbG9zZWRpcihyb290RGlyZWN0b3J5KTsKKyAgfQorCisgIHJldHVybiBkZXZpY2U7Cit9CisKK3ZvaWQKK3VzYkZvcmdldERldmljZXMgKHZvaWQpIHsKK30KZGlmZiAtLWdpdCBhL1Byb2dyYW1zL3VzYl93aW51c2IuYyBiL1Byb2dyYW1zL3VzYl93aW51c2IuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZTJkMTRhCi0tLSAvZGV2L251bGwKKysrIGIvUHJvZ3JhbXMvdXNiX3dpbnVzYi5jCkBAIC0wLDAgKzEsMTc3IEBACisvKgorICogQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyAqICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyAqCisgKiBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorICoKKyAqIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyAqCisgKiBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisgKi8KKworI2luY2x1ZGUgInByb2xvZ3VlLmgiCisKKyNpbmNsdWRlIDxlcnJuby5oPgorCisjaW5jbHVkZSAibG9nLmgiCisjaW5jbHVkZSAiaW9fdXNiLmgiCisjaW5jbHVkZSAidXNiX2ludGVybmFsLmgiCisKK2ludAordXNiRGlzYWJsZUF1dG9zdXNwZW5kIChVc2JEZXZpY2UgKmRldmljZSkgeworICBsb2dVbnN1cHBvcnRlZEZ1bmN0aW9uKCk7CisgIHJldHVybiAwOworfQorCitpbnQKK3VzYlNldENvbmZpZ3VyYXRpb24gKFVzYkRldmljZSAqZGV2aWNlLCB1bnNpZ25lZCBjaGFyIGNvbmZpZ3VyYXRpb24pIHsKKyAgbG9nVW5zdXBwb3J0ZWRGdW5jdGlvbigpOworICByZXR1cm4gMDsKK30KKworaW50Cit1c2JDbGFpbUludGVyZmFjZSAoVXNiRGV2aWNlICpkZXZpY2UsIHVuc2lnbmVkIGNoYXIgaW50ZXJmYWNlKSB7CisgIGxvZ1Vuc3VwcG9ydGVkRnVuY3Rpb24oKTsKKyAgcmV0dXJuIDA7Cit9CisKK2ludAordXNiUmVsZWFzZUludGVyZmFjZSAoVXNiRGV2aWNlICpkZXZpY2UsIHVuc2lnbmVkIGNoYXIgaW50ZXJmYWNlKSB7CisgIGxvZ1Vuc3VwcG9ydGVkRnVuY3Rpb24oKTsKKyAgcmV0dXJuIDA7Cit9CisKK2ludAordXNiU2V0QWx0ZXJuYXRpdmUgKAorICBVc2JEZXZpY2UgKmRldmljZSwKKyAgdW5zaWduZWQgY2hhciBpbnRlcmZhY2UsCisgIHVuc2lnbmVkIGNoYXIgYWx0ZXJuYXRpdmUKKykgeworICBsb2dVbnN1cHBvcnRlZEZ1bmN0aW9uKCk7CisgIHJldHVybiAwOworfQorCitpbnQKK3VzYlJlc2V0RGV2aWNlIChVc2JEZXZpY2UgKmRldmljZSkgeworICBsb2dVbnN1cHBvcnRlZEZ1bmN0aW9uKCk7CisgIHJldHVybiAwOworfQorCitpbnQKK3VzYkNsZWFySGFsdCAoVXNiRGV2aWNlICpkZXZpY2UsIHVuc2lnbmVkIGNoYXIgZW5kcG9pbnRBZGRyZXNzKSB7CisgIGxvZ1Vuc3VwcG9ydGVkRnVuY3Rpb24oKTsKKyAgcmV0dXJuIDA7Cit9CisKK3NzaXplX3QKK3VzYkNvbnRyb2xUcmFuc2ZlciAoCisgIFVzYkRldmljZSAqZGV2aWNlLAorICB1aW50OF90IGRpcmVjdGlvbiwKKyAgdWludDhfdCByZWNpcGllbnQsCisgIHVpbnQ4X3QgdHlwZSwKKyAgdWludDhfdCByZXF1ZXN0LAorICB1aW50MTZfdCB2YWx1ZSwKKyAgdWludDE2X3QgaW5kZXgsCisgIHZvaWQgKmJ1ZmZlciwKKyAgdWludDE2X3QgbGVuZ3RoLAorICBpbnQgdGltZW91dAorKSB7CisgIGxvZ1Vuc3VwcG9ydGVkRnVuY3Rpb24oKTsKKyAgcmV0dXJuIC0xOworfQorCit2b2lkICoKK3VzYlN1Ym1pdFJlcXVlc3QgKAorICBVc2JEZXZpY2UgKmRldmljZSwKKyAgdW5zaWduZWQgY2hhciBlbmRwb2ludEFkZHJlc3MsCisgIHZvaWQgKmJ1ZmZlciwKKyAgc2l6ZV90IGxlbmd0aCwKKyAgdm9pZCAqY29udGV4dAorKSB7CisgIGxvZ1Vuc3VwcG9ydGVkRnVuY3Rpb24oKTsKKyAgcmV0dXJuIE5VTEw7Cit9CisKK2ludAordXNiQ2FuY2VsUmVxdWVzdCAoVXNiRGV2aWNlICpkZXZpY2UsIHZvaWQgKnJlcXVlc3QpIHsKKyAgbG9nVW5zdXBwb3J0ZWRGdW5jdGlvbigpOworICByZXR1cm4gMDsKK30KKwordm9pZCAqCit1c2JSZWFwUmVzcG9uc2UgKAorICBVc2JEZXZpY2UgKmRldmljZSwKKyAgdW5zaWduZWQgY2hhciBlbmRwb2ludEFkZHJlc3MsCisgIFVzYlJlc3BvbnNlICpyZXNwb25zZSwKKyAgaW50IHdhaXQKKykgeworICBsb2dVbnN1cHBvcnRlZEZ1bmN0aW9uKCk7CisgIHJldHVybiBOVUxMOworfQorCitpbnQKK3VzYk1vbml0b3JJbnB1dEVuZHBvaW50ICgKKyAgVXNiRGV2aWNlICpkZXZpY2UsIHVuc2lnbmVkIGNoYXIgZW5kcG9pbnROdW1iZXIsCisgIEFzeW5jTW9uaXRvckNhbGxiYWNrICpjYWxsYmFjaywgdm9pZCAqZGF0YQorKSB7CisgIHJldHVybiAwOworfQorCitzc2l6ZV90Cit1c2JSZWFkRW5kcG9pbnQgKAorICBVc2JEZXZpY2UgKmRldmljZSwKKyAgdW5zaWduZWQgY2hhciBlbmRwb2ludE51bWJlciwKKyAgdm9pZCAqYnVmZmVyLAorICBzaXplX3QgbGVuZ3RoLAorICBpbnQgdGltZW91dAorKSB7CisgIGxvZ1Vuc3VwcG9ydGVkRnVuY3Rpb24oKTsKKyAgcmV0dXJuIC0xOworfQorCitzc2l6ZV90Cit1c2JXcml0ZUVuZHBvaW50ICgKKyAgVXNiRGV2aWNlICpkZXZpY2UsCisgIHVuc2lnbmVkIGNoYXIgZW5kcG9pbnROdW1iZXIsCisgIGNvbnN0IHZvaWQgKmJ1ZmZlciwKKyAgc2l6ZV90IGxlbmd0aCwKKyAgaW50IHRpbWVvdXQKKykgeworICBsb2dVbnN1cHBvcnRlZEZ1bmN0aW9uKCk7CisgIHJldHVybiAtMTsKK30KKworaW50Cit1c2JSZWFkRGV2aWNlRGVzY3JpcHRvciAoVXNiRGV2aWNlICpkZXZpY2UpIHsKKyAgbG9nVW5zdXBwb3J0ZWRGdW5jdGlvbigpOworICByZXR1cm4gMDsKK30KKworaW50Cit1c2JBbGxvY2F0ZUVuZHBvaW50RXh0ZW5zaW9uIChVc2JFbmRwb2ludCAqZW5kcG9pbnQpIHsKKyAgcmV0dXJuIDE7Cit9CisKK3ZvaWQKK3VzYkRlYWxsb2NhdGVFbmRwb2ludEV4dGVuc2lvbiAoVXNiRW5kcG9pbnRFeHRlbnNpb24gKmVwdHgpIHsKK30KKwordm9pZAordXNiRGVhbGxvY2F0ZURldmljZUV4dGVuc2lvbiAoVXNiRGV2aWNlRXh0ZW5zaW9uICpkZXZ4KSB7Cit9CisKK1VzYkRldmljZSAqCit1c2JGaW5kRGV2aWNlIChVc2JEZXZpY2VDaG9vc2VyICpjaG9vc2VyLCBVc2JDaG9vc2VDaGFubmVsRGF0YSAqZGF0YSkgeworICByZXR1cm4gTlVMTDsKK30KKwordm9pZAordXNiRm9yZ2V0RGV2aWNlcyAodm9pZCkgeworfQpkaWZmIC0tZ2l0IGEvUHJvZ3JhbXMvdXRmOC5jIGIvUHJvZ3JhbXMvdXRmOC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZkZTcwMzAKLS0tIC9kZXYvbnVsbAorKysgYi9Qcm9ncmFtcy91dGY4LmMKQEAgLTAsMCArMSwyOTAgQEAKKy8qCisgKiBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorICogICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorICoKKyAqIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorICoKKyAqIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyAqLworCisjaW5jbHVkZSAicHJvbG9ndWUuaCIKKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKyNpbmNsdWRlICJsb2cuaCIKKyNpbmNsdWRlICJ1dGY4LmgiCisjaW5jbHVkZSAidW5pY29kZS5oIgorCit3Y2hhcl90ICoKK2FsbG9jYXRlQ2hhcmFjdGVycyAoc2l6ZV90IGNvdW50KSB7CisgIHsKKyAgICB3Y2hhcl90ICpjaGFyYWN0ZXJzID0gbWFsbG9jKGNvdW50ICogc2l6ZW9mKCpjaGFyYWN0ZXJzKSk7CisgICAgaWYgKGNoYXJhY3RlcnMpIHJldHVybiBjaGFyYWN0ZXJzOworICB9CisKKyAgbG9nTWFsbG9jRXJyb3IoKTsKKyAgcmV0dXJuIE5VTEw7Cit9CisKK3NpemVfdAorY29udmVydENvZGVwb2ludFRvVXRmOCAodWludDMyX3QgY29kZXBvaW50LCBVdGY4QnVmZmVyIHV0ZjgpIHsKKyAgc2l6ZV90IGxlbmd0aCA9IDA7CisKKyAgaWYgKCEoY29kZXBvaW50ICYgfjBYN0YpKSB7CisgICAgdXRmOFtsZW5ndGgrK10gPSBjb2RlcG9pbnQ7CisgIH0gZWxzZSB7CisgICAgY2hhciAqZW5kID0gJnV0ZjhbMl07CisKKyAgICB7CisgICAgICB1aW50MzJfdCB2YWx1ZSA9IGNvZGVwb2ludDsKKyAgICAgIHVpbnQzMl90IG1hc2sgPSB+KCgxIDw8IDExKSAtIDEpOworCisgICAgICB3aGlsZSAoKHZhbHVlICY9IG1hc2spKSB7CisgICAgICAgIG1hc2sgPDw9IDU7CisgICAgICAgIGVuZCArPSAxOworICAgICAgfQorCisgICAgICBsZW5ndGggPSBlbmQgLSB1dGY4OworICAgIH0KKworICAgIHsKKyAgICAgIHVpbnQzMl90IHZhbHVlID0gY29kZXBvaW50OworCisgICAgICBkbyB7CisgICAgICAgICotLWVuZCA9ICh2YWx1ZSAmIDBYM0YpIHwgMFg4MDsKKyAgICAgICAgdmFsdWUgPj49IDY7CisgICAgICB9IHdoaWxlIChlbmQgPiB1dGY4KTsKKyAgICB9CisKKyAgICAqZW5kIHw9IH4oKDEgPDwgKDggLSBsZW5ndGgpKSAtIDEpOworICB9CisKKyAgdXRmOFtsZW5ndGhdID0gMDsKKyAgcmV0dXJuIGxlbmd0aDsKK30KKworaW50Citjb252ZXJ0VXRmOFRvQ29kZXBvaW50ICh1aW50MzJfdCAqY29kZXBvaW50LCBjb25zdCBjaGFyICoqdXRmOCwgc2l6ZV90ICp1dGZzKSB7CisgIGludCBvayA9IDA7CisgIHVpbnQzMl90IGNwID0gMDsKKworICBpbnQgZmlyc3QgPSAxOworICBpbnQgc3RhdGUgPSAwOworCisgIHdoaWxlICgqdXRmcykgeworICAgIHVuc2lnbmVkIGNoYXIgYnl0ZSA9ICooKnV0ZjgpKys7CisgICAgKnV0ZnMgLT0gMTsKKworICAgIGlmICghKGJ5dGUgJiAwWDgwKSkgeworICAgICAgaWYgKCFmaXJzdCkgZ290byB1bmV4cGVjdGVkOworICAgICAgY3AgPSBieXRlOworICAgICAgb2sgPSAxOworICAgICAgYnJlYWs7CisgICAgfQorCisgICAgaWYgKCEoYnl0ZSAmIDBYNDApKSB7CisgICAgICBpZiAoZmlyc3QpIGJyZWFrOworICAgICAgY3AgPSAoY3AgPDwgNikgfCAoYnl0ZSAmIDBYM0YpOworCisgICAgICBpZiAoIS0tc3RhdGUpIHsKKyAgICAgICAgb2sgPSAxOworICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgaWYgKCFmaXJzdCkgZ290byB1bmV4cGVjdGVkOworCisgICAgICBzdGF0ZSA9IDE7CisgICAgICB1aW50OF90IGJpdCA9IDBYMjA7CisKKyAgICAgIHdoaWxlIChieXRlICYgYml0KSB7CisgICAgICAgIGlmICghKGJpdCA+Pj0gMSkpIGJyZWFrOworICAgICAgICBzdGF0ZSArPSAxOworICAgICAgfQorCisgICAgICBjcCA9IGJ5dGUgJiAoKDEgPDwgKDYgLSBzdGF0ZSkpIC0gMSk7CisgICAgfQorCisgICAgZmlyc3QgPSAwOworICB9CisKKyAgd2hpbGUgKCp1dGZzKSB7CisgICAgaWYgKCgqKnV0ZjggJiAwWEMwKSAhPSAwWDgwKSBicmVhazsKKyAgICBvayA9IDA7CisKKyAgICAqdXRmOCArPSAxOworICAgICp1dGZzIC09IDE7CisgIH0KKworICBpZiAoIW9rKSBnb3RvIGVycm9yOworICAqY29kZXBvaW50ID0gY3A7CisgIHJldHVybiAxOworCit1bmV4cGVjdGVkOgorICAqdXRmOCAtPSAxOworICAqdXRmcyArPSAxOworZXJyb3I6CisgIHJldHVybiAwOworfQorCitzaXplX3QKK2NvbnZlcnRXY2hhclRvVXRmOCAod2NoYXJfdCBjaGFyYWN0ZXIsIFV0ZjhCdWZmZXIgdXRmOCkgeworICByZXR1cm4gY29udmVydENvZGVwb2ludFRvVXRmOChjaGFyYWN0ZXIsIHV0ZjgpOworfQorCit3aW50X3QKK2NvbnZlcnRVdGY4VG9XY2hhciAoY29uc3QgY2hhciAqKnV0ZjgsIHNpemVfdCAqdXRmcykgeworICB1aW50MzJfdCBjb2RlcG9pbnQ7CisgIGludCBvayA9IGNvbnZlcnRVdGY4VG9Db2RlcG9pbnQoJmNvZGVwb2ludCwgdXRmOCwgdXRmcyk7CisgIGlmICghb2spIHJldHVybiBXRU9GOworCisgIGlmIChjb2RlcG9pbnQgPiBXQ0hBUl9NQVgpIGNvZGVwb2ludCA9IFVOSUNPREVfUkVQTEFDRU1FTlRfQ0hBUkFDVEVSOworICByZXR1cm4gY29kZXBvaW50OworfQorCit2b2lkCitjb252ZXJ0VXRmOFRvV2NoYXJzIChjb25zdCBjaGFyICoqdXRmOCwgd2NoYXJfdCAqKmNoYXJhY3RlcnMsIHNpemVfdCBjb3VudCkgeworICB3aGlsZSAoKip1dGY4ICYmIChjb3VudCA+IDEpKSB7CisgICAgc2l6ZV90IHV0ZnMgPSBVVEY4X0xFTl9NQVg7CisgICAgd2ludF90IGNoYXJhY3RlciA9IGNvbnZlcnRVdGY4VG9XY2hhcih1dGY4LCAmdXRmcyk7CisKKyAgICBpZiAoY2hhcmFjdGVyID09IFdFT0YpIGJyZWFrOworICAgICooKmNoYXJhY3RlcnMpKysgPSBjaGFyYWN0ZXI7CisgICAgY291bnQgLT0gMTsKKyAgfQorCisgIGlmIChjb3VudCkgKipjaGFyYWN0ZXJzID0gMDsKK30KKworc2l6ZV90CittYWtlVXRmOEZyb21XY2hhcnMgKGNvbnN0IHdjaGFyX3QgKmNoYXJhY3RlcnMsIHVuc2lnbmVkIGludCBjb3VudCwgY2hhciAqYnVmZmVyLCBzaXplX3Qgc2l6ZSkgeworICBjaGFyICpieXRlID0gYnVmZmVyOworICBjb25zdCBjaGFyICplbmQgPSBieXRlICsgc2l6ZTsKKworICBmb3IgKHVuc2lnbmVkIGludCBpPTA7IGk8Y291bnQ7IGkrPTEpIHsKKyAgICBVdGY4QnVmZmVyIHV0Zjg7CisgICAgc2l6ZV90IHV0ZnMgPSBjb252ZXJ0V2NoYXJUb1V0ZjgoY2hhcmFjdGVyc1tpXSwgdXRmOCk7CisKKyAgICBjaGFyICpuZXh0ID0gYnl0ZSArIHV0ZnM7CisgICAgaWYgKG5leHQgPj0gZW5kKSBicmVhazsKKworICAgIG1lbWNweShieXRlLCB1dGY4LCB1dGZzKTsKKyAgICBieXRlID0gbmV4dDsKKyAgfQorCisgICpieXRlID0gMDsKKyAgcmV0dXJuIGJ5dGUgLSBidWZmZXI7Cit9CisKK2NoYXIgKgorZ2V0VXRmOEZyb21XY2hhcnMgKGNvbnN0IHdjaGFyX3QgKmNoYXJhY3RlcnMsIHVuc2lnbmVkIGludCBjb3VudCwgc2l6ZV90ICpsZW5ndGgpIHsKKyAgc2l6ZV90IHNpemUgPSAoY291bnQgKiBVVEY4X0xFTl9NQVgpICsgMTsKKyAgY2hhciBidWZmZXJbc2l6ZV07CisgIHNpemVfdCBsZW4gPSBtYWtlVXRmOEZyb21XY2hhcnMoY2hhcmFjdGVycywgY291bnQsIGJ1ZmZlciwgc2l6ZSk7CisgIGNoYXIgKnRleHQgPSBzdHJkdXAoYnVmZmVyKTsKKworICBpZiAoIXRleHQpIHsKKyAgICBsb2dNYWxsb2NFcnJvcigpOworICB9IGVsc2UgaWYgKGxlbmd0aCkgeworICAgICpsZW5ndGggPSBsZW47CisgIH0KKworICByZXR1cm4gdGV4dDsKK30KKworc2l6ZV90CittYWtlV2NoYXJzRnJvbVV0ZjggKGNvbnN0IGNoYXIgKnRleHQsIHdjaGFyX3QgKmNoYXJhY3RlcnMsIHNpemVfdCBzaXplKSB7CisgIHNpemVfdCBsZW5ndGggPSBzdHJsZW4odGV4dCk7CisgIHNpemVfdCBjb3VudCA9IDA7CisKKyAgd2hpbGUgKGxlbmd0aCA+IDApIHsKKyAgICBjb25zdCBjaGFyICp1dGY4ID0gdGV4dDsKKyAgICBzaXplX3QgdXRmcyA9IGxlbmd0aDsKKyAgICB3aW50X3QgY2hhcmFjdGVyID0gY29udmVydFV0ZjhUb1djaGFyKCZ1dGY4LCAmdXRmcyk7CisKKyAgICBpZiAoY2hhcmFjdGVyID09IFdFT0YpIGJyZWFrOworICAgIGlmICghY2hhcmFjdGVyKSBicmVhazsKKworICAgIGlmIChjaGFyYWN0ZXJzKSB7CisgICAgICBpZiAoY291bnQgPT0gc2l6ZSkgYnJlYWs7CisgICAgICBjaGFyYWN0ZXJzW2NvdW50XSA9IGNoYXJhY3RlcjsKKyAgICB9CisKKyAgICBjb3VudCArPSAxOworICAgIHRleHQgPSB1dGY4OworICAgIGxlbmd0aCA9IHV0ZnM7CisgIH0KKworICBpZiAoY2hhcmFjdGVycyAmJiAoY291bnQgPCBzaXplKSkgY2hhcmFjdGVyc1tjb3VudF0gPSAwOworICByZXR1cm4gY291bnQ7Cit9CisKK3NpemVfdAorY291bnRVdGY4Q2hhcmFjdGVycyAoY29uc3QgY2hhciAqdGV4dCkgeworICByZXR1cm4gbWFrZVdjaGFyc0Zyb21VdGY4KHRleHQsIE5VTEwsIDApOworfQorCitpbnQKK3dyaXRlVXRmOENoYXJhY3RlciAoRklMRSAqc3RyZWFtLCB3Y2hhcl90IGNoYXJhY3RlcikgeworICBVdGY4QnVmZmVyIHV0Zjg7CisgIHNpemVfdCB1dGZzID0gY29udmVydFdjaGFyVG9VdGY4KGNoYXJhY3RlciwgdXRmOCk7CisKKyAgaWYgKHV0ZnMpIHsKKyAgICBpZiAoZndyaXRlKHV0ZjgsIDEsIHV0ZnMsIHN0cmVhbSkgPT0gdXRmcykgeworICAgICAgcmV0dXJuIDE7CisgICAgfSBlbHNlIHsKKyAgICAgIGxvZ1N5c3RlbUVycm9yKCJmd3JpdGUiKTsKKyAgICB9CisgIH0gZWxzZSB7CisgICAgbG9nQnl0ZXMoTE9HX0VSUiwgImludmFsaWQgVW5pY29kZSBjaGFyYWN0ZXIiLCAmY2hhcmFjdGVyLCBzaXplb2YoY2hhcmFjdGVyKSk7CisgIH0KKworICByZXR1cm4gMDsKK30KKworaW50Cit3cml0ZVV0ZjhDaGFyYWN0ZXJzIChGSUxFICpzdHJlYW0sIGNvbnN0IHdjaGFyX3QgKmNoYXJhY3RlcnMsIHNpemVfdCBjb3VudCkgeworICBjb25zdCB3Y2hhcl90ICpjaGFyYWN0ZXIgPSBjaGFyYWN0ZXJzOworICBjb25zdCB3Y2hhcl90ICplbmQgPSBjaGFyYWN0ZXIgKyBjb3VudDsKKworICB3aGlsZSAoY2hhcmFjdGVyIDwgZW5kKSB7CisgICAgaWYgKCF3cml0ZVV0ZjhDaGFyYWN0ZXIoc3RyZWFtLCAqY2hhcmFjdGVyKyspKSB7CisgICAgICByZXR1cm4gMDsKKyAgICB9CisgIH0KKworICByZXR1cm4gMTsKK30KKworaW50Cit3cml0ZVV0ZjhCeXRlT3JkZXJNYXJrIChGSUxFICpzdHJlYW0pIHsKKyNpZiBVTklDT0RFX0JZVEVfT1JERVJfTUFSSyA8PSBXQ0hBUl9NQVgKKyAgaWYgKCF3cml0ZVV0ZjhDaGFyYWN0ZXIoc3RyZWFtLCBVTklDT0RFX0JZVEVfT1JERVJfTUFSSykpIHsKKyAgICByZXR1cm4gMDsKKyAgfQorI2VuZGlmIC8qIFVOSUNPREVfQllURV9PUkRFUl9NQVJLIDw9IFdDSEFSX01BWCAqLworCisgIHJldHVybiAxOworfQorCitpbnQKK2lzQ2hhcnNldFVURjggKGNvbnN0IGNoYXIgKm5hbWUpIHsKKyAgeworICAgIGNvbnN0IGNoYXIgKnN1YnN0cmluZyA9ICJ1dGYiOworICAgIHNpemVfdCBsZW5ndGggPSBzdHJsZW4oc3Vic3RyaW5nKTsKKyAgICBpZiAoc3RybmNhc2VjbXAobmFtZSwgc3Vic3RyaW5nLCBsZW5ndGgpICE9IDApIHJldHVybiAwOworICAgIG5hbWUgKz0gbGVuZ3RoOworICAgIGlmICgqbmFtZSA9PSAnLScpIG5hbWUgKz0gMTsKKyAgfQorCisgIHJldHVybiBzdHJjbXAobmFtZSwgIjgiKSA9PSAwOworfQpkaWZmIC0tZ2l0IGEvUHJvZ3JhbXMvdmFyaWFibGVzLmMgYi9Qcm9ncmFtcy92YXJpYWJsZXMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOGVkYzJhCi0tLSAvZGV2L251bGwKKysrIGIvUHJvZ3JhbXMvdmFyaWFibGVzLmMKQEAgLTAsMCArMSwzNDcgQEAKKy8qCisgKiBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorICogICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorICoKKyAqIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorICoKKyAqIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyAqLworCisjaW5jbHVkZSAicHJvbG9ndWUuaCIKKworI2luY2x1ZGUgPHN0cmluZy5oPgorCisjaW5jbHVkZSAibG9nLmgiCisjaW5jbHVkZSAic3RyZm10LmgiCisjaW5jbHVkZSAidmFyaWFibGVzLmgiCisjaW5jbHVkZSAicXVldWUuaCIKKyNpbmNsdWRlICJ1dGY4LmgiCisKK3R5cGVkZWYgc3RydWN0IHsKKyAgY29uc3Qgd2NoYXJfdCAqY2hhcmFjdGVyczsKKyAgaW50IGxlbmd0aDsKK30gQ2hhcmFjdGVyU3RyaW5nOworCitzdGF0aWMgdm9pZAoraW5pdGlhbGl6ZUNoYXJhY3RlclN0cmluZyAoQ2hhcmFjdGVyU3RyaW5nICpzdHJpbmcpIHsKKyAgc3RyaW5nLT5jaGFyYWN0ZXJzID0gV1NfQygiXDAiKTsKKyAgc3RyaW5nLT5sZW5ndGggPSAwOworfQorCitzdGF0aWMgdm9pZAorY2xlYXJDaGFyYWN0ZXJTdHJpbmcgKENoYXJhY3RlclN0cmluZyAqc3RyaW5nKSB7CisgIGlmIChzdHJpbmctPmxlbmd0aCA+IDApIGZyZWUoKHZvaWQgKilzdHJpbmctPmNoYXJhY3RlcnMpOworICBpbml0aWFsaXplQ2hhcmFjdGVyU3RyaW5nKHN0cmluZyk7Cit9CisKK3N0YXRpYyBpbnQKK3NldENoYXJhY3RlclN0cmluZyAoQ2hhcmFjdGVyU3RyaW5nICpzdHJpbmcsIGNvbnN0IHdjaGFyX3QgKmNoYXJhY3RlcnMsIGludCBsZW5ndGgpIHsKKyAgaWYgKCFsZW5ndGgpIHsKKyAgICBjbGVhckNoYXJhY3RlclN0cmluZyhzdHJpbmcpOworICB9IGVsc2UgeworICAgIHdjaGFyX3QgKm5ld0NoYXJhY3RlcnM7CisKKyAgICBpZiAoIShuZXdDaGFyYWN0ZXJzID0gbWFsbG9jKEFSUkFZX1NJWkUobmV3Q2hhcmFjdGVycywgKGxlbmd0aCArIDEpKSkpKSB7CisgICAgICBsb2dNYWxsb2NFcnJvcigpOworICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgd21lbWNweShuZXdDaGFyYWN0ZXJzLCBjaGFyYWN0ZXJzLCBsZW5ndGgpOworICAgIG5ld0NoYXJhY3RlcnNbbGVuZ3RoXSA9IFdDX0MoJ1wwJyk7CisKKyAgICBjbGVhckNoYXJhY3RlclN0cmluZyhzdHJpbmcpOworICAgIHN0cmluZy0+Y2hhcmFjdGVycyA9IG5ld0NoYXJhY3RlcnM7CisgICAgc3RyaW5nLT5sZW5ndGggPSBsZW5ndGg7CisgIH0KKworICByZXR1cm4gMTsKK30KKworc3RhdGljIHZvaWQKK2dldENoYXJhY3RlclN0cmluZyAoY29uc3QgQ2hhcmFjdGVyU3RyaW5nICpzdHJpbmcsIGNvbnN0IHdjaGFyX3QgKipjaGFyYWN0ZXJzLCBpbnQgKmxlbmd0aCkgeworICAqY2hhcmFjdGVycyA9IHN0cmluZy0+Y2hhcmFjdGVyczsKKyAgKmxlbmd0aCA9IHN0cmluZy0+bGVuZ3RoOworfQorCitzdHJ1Y3QgVmFyaWFibGVTdHJ1Y3QgeworICBDaGFyYWN0ZXJTdHJpbmcgbmFtZTsKKyAgQ2hhcmFjdGVyU3RyaW5nIHZhbHVlOworfTsKKworc3RydWN0IFZhcmlhYmxlTmVzdGluZ0xldmVsU3RydWN0IHsKKyAgY29uc3QgY2hhciAqbmFtZTsKKyAgVmFyaWFibGVOZXN0aW5nTGV2ZWwgKnByZXZpb3VzOworICBRdWV1ZSAqdmFyaWFibGVzOworICB1bnNpZ25lZCBpbnQgcmVmZXJlbmNlczsKK307CisKK1ZhcmlhYmxlTmVzdGluZ0xldmVsICoKK2NsYWltVmFyaWFibGVOZXN0aW5nTGV2ZWwgKFZhcmlhYmxlTmVzdGluZ0xldmVsICp2bmwpIHsKKyAgdm5sLT5yZWZlcmVuY2VzICs9IDE7CisgIHJldHVybiB2bmw7Cit9CisKK3N0YXRpYyB2b2lkCitkZWFsbG9jYXRlVmFyaWFibGUgKHZvaWQgKml0ZW0sIHZvaWQgKmRhdGEpIHsKKyAgVmFyaWFibGUgKnZhcmlhYmxlID0gaXRlbTsKKworICBjbGVhckNoYXJhY3RlclN0cmluZygmdmFyaWFibGUtPm5hbWUpOworICBjbGVhckNoYXJhY3RlclN0cmluZygmdmFyaWFibGUtPnZhbHVlKTsKKyAgZnJlZSh2YXJpYWJsZSk7Cit9CisKK1ZhcmlhYmxlTmVzdGluZ0xldmVsICoKK25ld1ZhcmlhYmxlTmVzdGluZ0xldmVsIChWYXJpYWJsZU5lc3RpbmdMZXZlbCAqcHJldmlvdXMsIGNvbnN0IGNoYXIgKm5hbWUpIHsKKyAgVmFyaWFibGVOZXN0aW5nTGV2ZWwgKnZubDsKKworICBpZiAoKHZubCA9IG1hbGxvYyhzaXplb2YoKnZubCkpKSkgeworICAgIG1lbXNldCh2bmwsIDAsIHNpemVvZigqdm5sKSk7CisgICAgdm5sLT5uYW1lID0gbmFtZTsKKyAgICB2bmwtPnJlZmVyZW5jZXMgPSAwOworCisgICAgaWYgKCh2bmwtPnZhcmlhYmxlcyA9IG5ld1F1ZXVlKGRlYWxsb2NhdGVWYXJpYWJsZSwgTlVMTCkpKSB7CisgICAgICBpZiAoKHZubC0+cHJldmlvdXMgPSBwcmV2aW91cykpIGNsYWltVmFyaWFibGVOZXN0aW5nTGV2ZWwocHJldmlvdXMpOworICAgICAgcmV0dXJuIHZubDsKKyAgICB9CisKKyAgICBmcmVlKHZubCk7CisgIH0gZWxzZSB7CisgICAgbG9nTWFsbG9jRXJyb3IoKTsKKyAgfQorCisgIHJldHVybiBOVUxMOworfQorCitzdGF0aWMgdm9pZAorZGVzdHJveVZhcmlhYmxlTmVzdGluZ0xldmVsIChWYXJpYWJsZU5lc3RpbmdMZXZlbCAqdm5sKSB7CisgIGRlYWxsb2NhdGVRdWV1ZSh2bmwtPnZhcmlhYmxlcyk7CisgIGZyZWUodm5sKTsKK30KKworVmFyaWFibGVOZXN0aW5nTGV2ZWwgKgorcmVtb3ZlVmFyaWFibGVOZXN0aW5nTGV2ZWwgKFZhcmlhYmxlTmVzdGluZ0xldmVsICp2bmwpIHsKKyAgVmFyaWFibGVOZXN0aW5nTGV2ZWwgKnByZXZpb3VzID0gdm5sLT5wcmV2aW91czsKKyAgaWYgKCEtLXZubC0+cmVmZXJlbmNlcykgZGVzdHJveVZhcmlhYmxlTmVzdGluZ0xldmVsKHZubCk7CisgIHJldHVybiBwcmV2aW91czsKK30KKwordm9pZAorcmVsZWFzZVZhcmlhYmxlTmVzdGluZ0xldmVsIChWYXJpYWJsZU5lc3RpbmdMZXZlbCAqdm5sKSB7CisgIHdoaWxlICh2bmwgJiYgIS0tdm5sLT5yZWZlcmVuY2VzKSB7CisgICAgVmFyaWFibGVOZXN0aW5nTGV2ZWwgKnByZXZpb3VzID0gdm5sLT5wcmV2aW91czsKKyAgICBkZXN0cm95VmFyaWFibGVOZXN0aW5nTGV2ZWwodm5sKTsKKyAgICB2bmwgPSBwcmV2aW91czsKKyAgfQorfQorCitzdGF0aWMgdm9pZAorbGlzdFZhcmlhYmxlTGluZSAoY29uc3QgY2hhciAqbGluZSkgeworICBsb2dNZXNzYWdlKExPR19OT1RJQ0UsICIlcyIsIGxpbmUpOworfQorCitzdGF0aWMgaW50CitsaXN0VmFyaWFibGUgKHZvaWQgKml0ZW0sIHZvaWQgKmRhdGEpIHsKKyAgY29uc3QgVmFyaWFibGUgKnZhcmlhYmxlID0gaXRlbTsKKworICBjaGFyIGxpbmVbMFgxMDBdOworICBTVFJfQkVHSU4obGluZSwgc2l6ZW9mKGxpbmUpKTsKKworICBTVFJfUFJJTlRGKCJ2YXJpYWJsZTogIik7CisgIFNUUl9QUklOVEYoIiUuKiIgUFJJd3MsIHZhcmlhYmxlLT5uYW1lLmxlbmd0aCwgdmFyaWFibGUtPm5hbWUuY2hhcmFjdGVycyk7CisgIFNUUl9QUklOVEYoIiA9ICIpOworICBTVFJfUFJJTlRGKCIlLioiIFBSSXdzLCB2YXJpYWJsZS0+dmFsdWUubGVuZ3RoLCB2YXJpYWJsZS0+dmFsdWUuY2hhcmFjdGVycyk7CisKKyAgU1RSX0VORDsKKyAgbGlzdFZhcmlhYmxlTGluZShsaW5lKTsKKworICByZXR1cm4gMDsKK30KKwordm9pZAorbGlzdFZhcmlhYmxlcyAoVmFyaWFibGVOZXN0aW5nTGV2ZWwgKmZyb20pIHsKKyAgbGlzdFZhcmlhYmxlTGluZSgiYmVnaW4gdmFyaWFibGUgbGlzdGluZyIpOworCisgIHdoaWxlIChmcm9tKSB7CisgICAgeworICAgICAgY2hhciBoZWFkZXJbMFgxMDBdOworICAgICAgU1RSX0JFR0lOKGhlYWRlciwgc2l6ZW9mKGhlYWRlcikpOworCisgICAgICBTVFJfUFJJTlRGKCJ2YXJpYWJsZSBuZXN0aW5nIGxldmVsOiIpOworICAgICAgaWYgKGZyb20tPm5hbWUpIFNUUl9QUklOVEYoIiAlcyIsIGZyb20tPm5hbWUpOworICAgICAgaWYgKGZyb20tPnJlZmVyZW5jZXMgIT0gMSkgU1RSX1BSSU5URigiIFJlZnM6JXUiLCBmcm9tLT5yZWZlcmVuY2VzKTsKKworICAgICAgU1RSX0VORDsKKyAgICAgIGxpc3RWYXJpYWJsZUxpbmUoaGVhZGVyKTsKKyAgICB9CisKKyAgICBwcm9jZXNzUXVldWUoZnJvbS0+dmFyaWFibGVzLCBsaXN0VmFyaWFibGUsIE5VTEwpOworICAgIGZyb20gPSBmcm9tLT5wcmV2aW91czsKKyAgfQorCisgIGxpc3RWYXJpYWJsZUxpbmUoImVuZCB2YXJpYWJsZSBsaXN0aW5nIik7Cit9CisKK3N0YXRpYyBpbnQKK3Rlc3RWYXJpYWJsZU5hbWUgKGNvbnN0IHZvaWQgKml0ZW0sIHZvaWQgKmRhdGEpIHsKKyAgY29uc3QgVmFyaWFibGUgKnZhcmlhYmxlID0gaXRlbTsKKyAgY29uc3QgQ2hhcmFjdGVyU3RyaW5nICprZXkgPSBkYXRhOworCisgIGlmICh2YXJpYWJsZS0+bmFtZS5sZW5ndGggPT0ga2V5LT5sZW5ndGgpIHsKKyAgICBpZiAod21lbWNtcCh2YXJpYWJsZS0+bmFtZS5jaGFyYWN0ZXJzLCBrZXktPmNoYXJhY3RlcnMsIGtleS0+bGVuZ3RoKSA9PSAwKSB7CisgICAgICByZXR1cm4gMTsKKyAgICB9CisgIH0KKworICByZXR1cm4gMDsKK30KKworc3RhdGljIFZhcmlhYmxlICoKK2ZpbmRWYXJpYWJsZSAoVmFyaWFibGVOZXN0aW5nTGV2ZWwgKnZubCwgY29uc3Qgd2NoYXJfdCAqbmFtZSwgaW50IGxlbmd0aCwgaW50IGNyZWF0ZSkgeworICBWYXJpYWJsZSAqdmFyaWFibGU7CisKKyAgeworICAgIENoYXJhY3RlclN0cmluZyBrZXkgPSB7CisgICAgICAuY2hhcmFjdGVycyA9IG5hbWUsCisgICAgICAubGVuZ3RoID0gbGVuZ3RoCisgICAgfTsKKworICAgIGlmICgodmFyaWFibGUgPSBmaW5kSXRlbSh2bmwtPnZhcmlhYmxlcywgdGVzdFZhcmlhYmxlTmFtZSwgJmtleSkpKSByZXR1cm4gdmFyaWFibGU7CisgIH0KKworICBpZiAoY3JlYXRlKSB7CisgICAgaWYgKCh2YXJpYWJsZSA9IG1hbGxvYyhzaXplb2YoKnZhcmlhYmxlKSkpKSB7CisgICAgICBtZW1zZXQodmFyaWFibGUsIDAsIHNpemVvZigqdmFyaWFibGUpKTsKKyAgICAgIGluaXRpYWxpemVDaGFyYWN0ZXJTdHJpbmcoJnZhcmlhYmxlLT5uYW1lKTsKKyAgICAgIGluaXRpYWxpemVDaGFyYWN0ZXJTdHJpbmcoJnZhcmlhYmxlLT52YWx1ZSk7CisKKyAgICAgIGlmIChzZXRDaGFyYWN0ZXJTdHJpbmcoJnZhcmlhYmxlLT5uYW1lLCBuYW1lLCBsZW5ndGgpKSB7CisgICAgICAgIGlmIChlbnF1ZXVlSXRlbSh2bmwtPnZhcmlhYmxlcywgdmFyaWFibGUpKSB7CisgICAgICAgICAgcmV0dXJuIHZhcmlhYmxlOworICAgICAgICB9CisKKyAgICAgICAgY2xlYXJDaGFyYWN0ZXJTdHJpbmcoJnZhcmlhYmxlLT5uYW1lKTsKKyAgICAgIH0KKworICAgICAgZnJlZSh2YXJpYWJsZSk7CisgICAgfSBlbHNlIHsKKyAgICAgIGxvZ01hbGxvY0Vycm9yKCk7CisgICAgfQorICB9CisKKyAgcmV0dXJuIE5VTEw7Cit9CisKK2NvbnN0IFZhcmlhYmxlICoKK2ZpbmRSZWFkYWJsZVZhcmlhYmxlIChWYXJpYWJsZU5lc3RpbmdMZXZlbCAqdm5sLCBjb25zdCB3Y2hhcl90ICpuYW1lLCBpbnQgbGVuZ3RoKSB7CisgIHdoaWxlICh2bmwpIHsKKyAgICBWYXJpYWJsZSAqdmFyaWFibGUgPSBmaW5kVmFyaWFibGUodm5sLCBuYW1lLCBsZW5ndGgsIDApOworICAgIGlmICh2YXJpYWJsZSkgcmV0dXJuIHZhcmlhYmxlOworICAgIHZubCA9IHZubC0+cHJldmlvdXM7CisgIH0KKworICByZXR1cm4gTlVMTDsKK30KKworVmFyaWFibGUgKgorZmluZFdyaXRhYmxlVmFyaWFibGUgKFZhcmlhYmxlTmVzdGluZ0xldmVsICp2bmwsIGNvbnN0IHdjaGFyX3QgKm5hbWUsIGludCBsZW5ndGgpIHsKKyAgcmV0dXJuIGZpbmRWYXJpYWJsZSh2bmwsIG5hbWUsIGxlbmd0aCwgMSk7Cit9CisKK3ZvaWQKK2RlbGV0ZVZhcmlhYmxlcyAoVmFyaWFibGVOZXN0aW5nTGV2ZWwgKnZubCkgeworICBkZWxldGVFbGVtZW50cyh2bmwtPnZhcmlhYmxlcyk7Cit9CisKK2ludAorc2V0VmFyaWFibGUgKFZhcmlhYmxlICp2YXJpYWJsZSwgY29uc3Qgd2NoYXJfdCAqdmFsdWUsIGludCBsZW5ndGgpIHsKKyAgcmV0dXJuIHNldENoYXJhY3RlclN0cmluZygmdmFyaWFibGUtPnZhbHVlLCB2YWx1ZSwgbGVuZ3RoKTsKK30KKwordm9pZAorZ2V0VmFyaWFibGVOYW1lIChjb25zdCBWYXJpYWJsZSAqdmFyaWFibGUsIGNvbnN0IHdjaGFyX3QgKipjaGFyYWN0ZXJzLCBpbnQgKmxlbmd0aCkgeworICBnZXRDaGFyYWN0ZXJTdHJpbmcoJnZhcmlhYmxlLT5uYW1lLCBjaGFyYWN0ZXJzLCBsZW5ndGgpOworfQorCit2b2lkCitnZXRWYXJpYWJsZVZhbHVlIChjb25zdCBWYXJpYWJsZSAqdmFyaWFibGUsIGNvbnN0IHdjaGFyX3QgKipjaGFyYWN0ZXJzLCBpbnQgKmxlbmd0aCkgeworICBnZXRDaGFyYWN0ZXJTdHJpbmcoJnZhcmlhYmxlLT52YWx1ZSwgY2hhcmFjdGVycywgbGVuZ3RoKTsKK30KKworaW50CitzZXRTdHJpbmdWYXJpYWJsZSAoVmFyaWFibGVOZXN0aW5nTGV2ZWwgKnZubCwgY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqdmFsdWUpIHsKKyAgc2l6ZV90IG5hbWVMZW5ndGggPSBjb3VudFV0ZjhDaGFyYWN0ZXJzKG5hbWUpOworICB3Y2hhcl90IG5hbWVCdWZmZXJbbmFtZUxlbmd0aCArIDFdOworCisgIHNpemVfdCB2YWx1ZUxlbmd0aCA9IGNvdW50VXRmOENoYXJhY3RlcnModmFsdWUpOworICB3Y2hhcl90IHZhbHVlQnVmZmVyW3ZhbHVlTGVuZ3RoICsgMV07CisKKyAgeworICAgIGNvbnN0IGNoYXIgKnV0ZjggPSBuYW1lOworICAgIHdjaGFyX3QgKndjID0gbmFtZUJ1ZmZlcjsKKyAgICBjb252ZXJ0VXRmOFRvV2NoYXJzKCZ1dGY4LCAmd2MsIEFSUkFZX0NPVU5UKG5hbWVCdWZmZXIpKTsKKyAgfQorCisgIHsKKyAgICBjb25zdCBjaGFyICp1dGY4ID0gdmFsdWU7CisgICAgd2NoYXJfdCAqd2MgPSB2YWx1ZUJ1ZmZlcjsKKyAgICBjb252ZXJ0VXRmOFRvV2NoYXJzKCZ1dGY4LCAmd2MsIEFSUkFZX0NPVU5UKHZhbHVlQnVmZmVyKSk7CisgIH0KKworICBWYXJpYWJsZSAqdmFyaWFibGUgPSBmaW5kVmFyaWFibGUodm5sLCBuYW1lQnVmZmVyLCBuYW1lTGVuZ3RoLCAxKTsKKworICBpZiAodmFyaWFibGUpIHsKKyAgICBpZiAoc2V0VmFyaWFibGUodmFyaWFibGUsIHZhbHVlQnVmZmVyLCB2YWx1ZUxlbmd0aCkpIHsKKyAgICAgIHJldHVybiAxOworICAgIH0KKyAgfQorCisgIHJldHVybiAwOworfQorCitpbnQKK3NldFN0cmluZ1ZhcmlhYmxlcyAoVmFyaWFibGVOZXN0aW5nTGV2ZWwgKnZubCwgY29uc3QgVmFyaWFibGVJbml0aWFsaXplciAqaW5pdGlhbGl6ZXJzKSB7CisgIGlmIChpbml0aWFsaXplcnMpIHsKKyAgICBjb25zdCBWYXJpYWJsZUluaXRpYWxpemVyICppbml0aWFsaXplciA9IGluaXRpYWxpemVyczsKKyAgICAgCisgICAgd2hpbGUgKGluaXRpYWxpemVyLT5uYW1lKSB7CisgICAgICBpZiAoIXNldFN0cmluZ1ZhcmlhYmxlKHZubCwgaW5pdGlhbGl6ZXItPm5hbWUsIGluaXRpYWxpemVyLT52YWx1ZSkpIHJldHVybiAwOworICAgICAgaW5pdGlhbGl6ZXIgKz0gMTsKKyAgICB9CisgIH0KKworICByZXR1cm4gMTsKK30KKworVmFyaWFibGVOZXN0aW5nTGV2ZWwgKgorZ2V0R2xvYmFsVmFyaWFibGVzIChpbnQgY3JlYXRlKSB7CisgIHN0YXRpYyBWYXJpYWJsZU5lc3RpbmdMZXZlbCAqZ2xvYmFsVmFyaWFibGVzID0gTlVMTDsKKworICBpZiAoIWdsb2JhbFZhcmlhYmxlcykgeworICAgIFZhcmlhYmxlTmVzdGluZ0xldmVsICp2bmw7CisKKyAgICBpZiAoISh2bmwgPSBuZXdWYXJpYWJsZU5lc3RpbmdMZXZlbChOVUxMLCAiZ2xvYmFsIikpKSB7CisgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICBjbGFpbVZhcmlhYmxlTmVzdGluZ0xldmVsKHZubCk7CisgICAgZ2xvYmFsVmFyaWFibGVzID0gdm5sOworICB9CisKKyAgcmV0dXJuIGdsb2JhbFZhcmlhYmxlczsKK30KKworaW50CitzZXRHbG9iYWxWYXJpYWJsZSAoY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqdmFsdWUpIHsKKyAgVmFyaWFibGVOZXN0aW5nTGV2ZWwgKnZubCA9IGdldEdsb2JhbFZhcmlhYmxlcygxKTsKKyAgaWYgKCF2bmwpIHJldHVybiAwOworICByZXR1cm4gc2V0U3RyaW5nVmFyaWFibGUodm5sLCBuYW1lLCB2YWx1ZSk7Cit9CmRpZmYgLS1naXQgYS9Qcm9ncmFtcy94YnJsYXBpLmMgYi9Qcm9ncmFtcy94YnJsYXBpLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjdmMGVlZgotLS0gL2Rldi9udWxsCisrKyBiL1Byb2dyYW1zL3hicmxhcGkuYwpAQCAtMCwwICsxLDEwNzkgQEAKKy8qCisgKiBYQnJsQVBJIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgdGlua2VyaW5nIHdpdGggWCBmb3IgcHJvcGVyIEJybEFQSSBiZWhhdmlvcgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwMy0yMDIzIGJ5IFNhbXVlbCBUaGliYXVsdCA8U2FtdWVsLlRoaWJhdWx0QGVucy1seW9uLm9yZz4KKyAqCisgKiBYQnJsQVBJIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgKgorICogV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorICovCisKKy8qIENvbXBpbGUgd2l0aDoKKyAqIGdjYyAtTzMgLVdhbGwgeGJybGFwaS5jIC1ML3Vzci9YMTFSNi9saWIgLWxicmxhcGkgLWxYMTEgLW8geGJybGFwaQorICovCisKKyNpbmNsdWRlICJwcm9sb2d1ZS5oIgorCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRhcmcuaD4KKyNpbmNsdWRlIDxzaWduYWwuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworI2lmZGVmIEhBVkVfTEFOR0lORk9fSAorI2luY2x1ZGUgPGxhbmdpbmZvLmg+CisjZW5kaWYgLyogSEFWRV9MQU5HSU5GT19IICovCisKKyNpZmRlZiBIQVZFX1NZU19TRUxFQ1RfSAorI2luY2x1ZGUgPHN5cy9zZWxlY3QuaD4KKyNlbHNlIC8qIEhBVkVfU1lTX1NFTEVDVF9IICovCisjaW5jbHVkZSA8c3lzL3RpbWUuaD4KKyNlbmRpZiAvKiBIQVZFX1NZU19TRUxFQ1RfSCAqLworCisjaWZkZWYgSEFWRV9JQ09OVl9ICisjaW5jbHVkZSA8aWNvbnYuaD4KKyNlbmRpZiAvKiBIQVZFX0lDT05WX0ggKi8KKworI2luY2x1ZGUgPFgxMS9YLmg+CisjaW5jbHVkZSA8WDExL1hsaWIuaD4KKyNpbmNsdWRlIDxYMTEvWGF0b20uaD4KKyNpbmNsdWRlIDxYMTEvWEtCbGliLmg+CisjaW5jbHVkZSA8WDExL2tleXN5bS5oPgorCisjdW5kZWYgQ0FOX1NJTVVMQVRFX0tFWV9QUkVTU0VTCisjaWYgZGVmaW5lZChIQVZFX1gxMV9FWFRFTlNJT05TX1hURVNUX0gpICYmIGRlZmluZWQoSEFWRV9YMTFfRVhURU5TSU9OU19YS0JfSCkKKyNpbmNsdWRlIDxYMTEvZXh0ZW5zaW9ucy9YVGVzdC5oPgorI2RlZmluZSBDQU5fU0lNVUxBVEVfS0VZX1BSRVNTRVMKKyNlbHNlIC8qIEhBVkVfWDExX0VYVEVOU0lPTlNfWFRFU1RfSCAmJiBIQVZFX1gxMV9FWFRFTlNJT05TX1hLQl9IICovCisjd2FybmluZyBrZXkgcHJlc3Mgc2ltdWxhdGlvbiBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgYnVpbGQgLSBjaGVjayB0aGF0IGxpYnh0c3QgaGFzIGJlZW4gaW5zdGFsbGVkCisjZW5kaWYgLyogSEFWRV9YMTFfRVhURU5TSU9OU19YVEVTVF9IICYmIEhBVkVfWDExX0VYVEVOU0lPTlNfWEtCX0ggKi8KKworI2luY2x1ZGUgInhzZWwuaCIKKworI2RlZmluZSBCUkxBUElfTk9fREVQUkVDQVRFRAorI2luY2x1ZGUgImJybGFwaS5oIgorCisjaW5jbHVkZSAiY21kbGluZS5oIgorCisjZGVmaW5lIGRlYnVnZihmbXQsIC4uLikgZG8geyBpZiAodmVyYm9zZSkgZnByaW50ZihzdGRlcnIsIGZtdCwgIyMgX19WQV9BUkdTX18pOyB9IHdoaWxlICgwKQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBvcHRpb24gaGFuZGxpbmcKKyAqLworCitzdGF0aWMgY2hhciAqYXV0aDsKK3N0YXRpYyBjaGFyICpob3N0Oworc3RhdGljIGNoYXIgKnhEaXNwbGF5Oworc3RhdGljIGludCBub19kYWVtb247CitzdGF0aWMgaW50IHF1aWV0Oworc3RhdGljIGludCB2ZXJib3NlOworc3RhdGljIGludCB4a2JfbWFqb3Jfb3Bjb2RlOworCitzdGF0aWMgaW50IGJybGFwaV9mZDsKKworc3RhdGljIHZvaWQgKmNsaXBib2FyZERhdGE7CisKK0JFR0lOX09QVElPTl9UQUJMRShwcm9ncmFtT3B0aW9ucykKKyAgeyAud29yZCA9ICJicmxhcGkiLAorICAgIC5sZXR0ZXIgPSAnYicsCisgICAgLmFyZ3VtZW50ID0gc3RydGV4dCgiW2hvc3RdWzpwb3J0XSIpLAorICAgIC5zZXR0aW5nLnN0cmluZyA9ICZob3N0LAorICAgIC5kZXNjcmlwdGlvbiA9IHN0cnRleHQoIkJybEFQSSBob3N0IGFuZC9vciBwb3J0IHRvIGNvbm5lY3QgdG8iKQorICB9LAorCisgIHsgLndvcmQgPSAiYXV0aCIsCisgICAgLmxldHRlciA9ICdhJywKKyAgICAuYXJndW1lbnQgPSBzdHJ0ZXh0KCJzY2hlbWUrLi4uIiksCisgICAgLnNldHRpbmcuc3RyaW5nID0gJmF1dGgsCisgICAgLmRlc2NyaXB0aW9uID0gc3RydGV4dCgiQnJsQVBJIGF1dGhvcml6YXRpb24vYXV0aGVudGljYXRpb24gc2NoZW1lcyIpCisgIH0sCisKKyAgeyAud29yZCA9ICJkaXNwbGF5IiwKKyAgICAubGV0dGVyID0gJ2QnLAorICAgIC5hcmd1bWVudCA9IHN0cnRleHQoImRpc3BsYXkiKSwKKyAgICAuc2V0dGluZy5zdHJpbmcgPSAmeERpc3BsYXksCisgICAgLmRlc2NyaXB0aW9uID0gc3RydGV4dCgiWCBkaXNwbGF5IHRvIGNvbm5lY3QgdG8iKQorICB9LAorCisgIHsgLndvcmQgPSAicXVpZXQiLAorICAgIC5sZXR0ZXIgPSAncScsCisgICAgLnNldHRpbmcuZmxhZyA9ICZxdWlldCwKKyAgICAuZGVzY3JpcHRpb24gPSBzdHJ0ZXh0KCJEbyBub3Qgd3JpdGUgYW55IHRleHQgdG8gdGhlIGJyYWlsbGUgZGV2aWNlIikKKyAgfSwKKworICB7IC53b3JkID0gInZlcmJvc2UiLAorICAgIC5sZXR0ZXIgPSAndicsCisgICAgLnNldHRpbmcuZmxhZyA9ICZ2ZXJib3NlLAorICAgIC5kZXNjcmlwdGlvbiA9IHN0cnRleHQoIldyaXRlIGRlYnVnZ2luZyBvdXRwdXQgdG8gc3Rkb3V0IikKKyAgfSwKKworICB7IC53b3JkID0gIm5vLWRhZW1vbiIsCisgICAgLmxldHRlciA9ICduJywKKyAgICAuc2V0dGluZy5mbGFnID0gJm5vX2RhZW1vbiwKKyAgICAuZGVzY3JpcHRpb24gPSBzdHJ0ZXh0KCJSZW1haW4gYSBmb3JlZ3JvdW5kIHByb2Nlc3MiKQorICB9LAorRU5EX09QVElPTl9UQUJMRShwcm9ncmFtT3B0aW9ucykKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogZXJyb3IgaGFuZGxpbmcKKyAqLworCitzdGF0aWMgdm9pZCBhcGlfY2xlYW5FeGl0KHZvaWQpIHsKKyAgaWYgKGJybGFwaV9mZD49MCkKKyAgeworICAgIGNsb3NlKGJybGFwaV9mZCk7CisgICAgYnJsYXBpX2ZkPS0xOworICB9Cit9CisKKy8qIGR1bXBzIGVycm9ycyB3aGljaCBhcmUgZmF0YWwgdG8gYnJsYXBpIG9ubHkgKi8KK3N0YXRpYyB2b2lkIGZhdGFsX2JybGFwaV9lcnJubyhjb25zdCBjaGFyICptc2csIGNvbnN0IGNoYXIgKmZtdCwgLi4uKSB7CisgIGJybGFwaV9wZXJyb3IobXNnKTsKKyAgaWYgKGZtdCkgeworICAgIHZhX2xpc3QgdmE7CisgICAgdmFfc3RhcnQodmEsZm10KTsKKyAgICB2ZnByaW50ZihzdGRlcnIsZm10LHZhKTsKKyAgICB2YV9lbmQodmEpOworICB9CisgIGFwaV9jbGVhbkV4aXQoKTsKK30KKworc3RhdGljIHZvaWQgZXhjZXB0aW9uX2hhbmRsZXIoaW50IGVycm9yLCBicmxhcGlfcGFja2V0VHlwZV90IHR5cGUsIGNvbnN0IHZvaWQgKnBhY2tldCwgc2l6ZV90IHNpemUpIHsKKyAgY2hhciBzdHJbMFgxMDBdOworICBicmxhcGlfc3RyZXhjZXB0aW9uKHN0ciwwWDEwMCwgZXJyb3IsIHR5cGUsIHBhY2tldCwgc2l6ZSk7CisgIGZwcmludGYoc3RkZXJyLCAieGJybGFwaTogQnJsQVBJIGV4Y2VwdGlvbjogJXNcbkRpc2Nvbm5lY3RpbmcgZnJvbSBicmxhcGlcbiIsIHN0cik7CisgIGFwaV9jbGVhbkV4aXQoKTsKK30KKworLyogZHVtcHMgZXJyb3JzIHdoaWNoIGFyZSBmYXRhbCB0byB0aGUgd2hvbGUgeGJybGFwaSAqLworc3RhdGljIHZvaWQgZmF0YWxfZXJybm8oY29uc3QgY2hhciAqbXNnLCBjb25zdCBjaGFyICpmbXQsIC4uLikgeworICBwZXJyb3IobXNnKTsKKyAgaWYgKGZtdCkgeworICAgIHZhX2xpc3QgdmE7CisgICAgdmFfc3RhcnQodmEsZm10KTsKKyAgICB2ZnByaW50ZihzdGRlcnIsZm10LHZhKTsKKyAgICB2YV9lbmQodmEpOworICB9CisgIGV4aXQoUFJPR19FWElUX0ZBVEFMKTsKK30KKworc3RhdGljIHZvaWQgZmF0YWwoY29uc3QgY2hhciAqZm10LCAuLi4pIHsKKyAgaWYgKGZtdCkgeworICAgIHZhX2xpc3QgdmE7CisgICAgdmFfc3RhcnQodmEsZm10KTsKKyAgICB2ZnByaW50ZihzdGRlcnIsZm10LHZhKTsKKyAgICB2YV9lbmQodmEpOworICB9CisgIGV4aXQoUFJPR19FWElUX0ZBVEFMKTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogYnJsYXBpIGhhbmRsaW5nCisgKi8KKworCisjaWZuZGVmIE1JTgorI2RlZmluZSBNSU4oYSwgYikgKCgoYSkgPCAoYikpPyAoYSk6IChiKSkKKyNlbmRpZiAvKiBNSU4gKi8KKworc3RhdGljIHZvaWQgY2xpcGJvYXJkQ29udGVudENoYW5nZWQoYnJsYXBpX3BhcmFtX3QgcGFyYW1ldGVyLCBicmxhcGlfcGFyYW1fc3VicGFyYW1fdCBzdWJwYXJhbSwgYnJsYXBpX3BhcmFtX2ZsYWdzX3QgZmxhZ3MsIHZvaWQgKnByaXYsIGNvbnN0IHZvaWQgKmRhdGEsIHNpemVfdCBsZW4pOworCitzdGF0aWMgaW50IHRvYnJsdHR5X2luaXQoY2hhciAqYXV0aCwgY2hhciAqaG9zdCkgeworICBicmxhcGlfY29ubmVjdGlvblNldHRpbmdzX3Qgc2V0dGluZ3M7CisgIHVuc2lnbmVkIGludCB4LHk7CisgIHNldHRpbmdzLmhvc3Q9aG9zdDsKKyAgc2V0dGluZ3MuYXV0aD1hdXRoOworICBzdGF0aWMgaW50IGhhZF9zdWNjZWVkZWQ7CisgIGJybGFwaV9wYXJhbV9jbGllbnRQcmlvcml0eV90IHByaW9yaXR5OworICBicmxhcGlfcGFyYW1fcmV0YWluRG90c190IGRvdHM7CisKKyAgaWYgKChicmxhcGlfZmQgPSBicmxhcGlfb3BlbkNvbm5lY3Rpb24oJnNldHRpbmdzLCZzZXR0aW5ncykpPDApCisgIHsKKyAgICBpZiAoIWhhZF9zdWNjZWVkZWQpCisgICAgeworICAgICAgLyogVGhpcyBpcyB0aGUgZmlyc3QgYXR0ZW1wdCB0byBjb25uZWN0IHRvIEJSTFRUWSwgYW5kIGl0IGZhaWxlZC4KKyAgICAgICAqIFJldHVybiB0aGUgZXJyb3IgaW1tZWRpYXRlbHkgdG8gdGhlIHVzZXIsIHRvIHByb3ZpZGUgZmVlZGJhY2sgdG8gdXNlcnMKKyAgICAgICAqIHJ1bm5pbmcgeGJybGFwaSBieSBoYW5kLCBidXQgbm90IGZpbGwgbG9ncywgZWF0IGJhdHRlcnksIHNwYW0KKyAgICAgICAqIDEyNy4wLjAuMSB3aXRoIHJlY29ubmVjdGlvbiBhdHRlbXB0cy4KKyAgICAgICAqLworICAgICAgZmF0YWxfYnJsYXBpX2Vycm5vKCJvcGVuQ29ubmVjdGlvbiIsZ2V0dGV4dCgiY2Fubm90IGNvbm5lY3QgdG8gYnJhaWxsZSBkZXZpY2VzIGRhZW1vbiBicmx0dHkgYXQgJXNcbiIpLHNldHRpbmdzLmhvc3QpOworICAgICAgZXhpdChQUk9HX0VYSVRfRkFUQUwpOworICAgIH0KKyAgICByZXR1cm4gMDsKKyAgfQorICAvKiBXZSBhY2hpZXZlZCBjb25uZWN0aW5nIHRvIEJSTFRUWS4gIElmIEJSTFRUWSBkaWVzIGxhdGVyIG9uLCB3ZSB3aWxsCisgICAqIHNpbGVudGx5IHRyeSB0byByZWNvbm5lY3QgdG8gaXQuICAqLworICBoYWRfc3VjY2VlZGVkID0gMTsKKworICBpZiAoYnJsYXBpX2dldERpc3BsYXlTaXplKCZ4LCZ5KTwwKQorICB7CisgICAgZmF0YWxfYnJsYXBpX2Vycm5vKCJnZXREaXNwbGF5U2l6ZSIsTlVMTCk7CisgICAgcmV0dXJuIDA7CisgIH0KKworICBpZiAoeCA9PSAwKQorICB7CisgICAgLyogQnJhaWxsZSBkZXZpY2Ugbm90IGluaXRpYWxpemVkIHlldCAqLworICAgIGFwaV9jbGVhbkV4aXQoKTsKKyAgICByZXR1cm4gMDsKKyAgfQorCisgIGJybGFwaV9zZXRFeGNlcHRpb25IYW5kbGVyKGV4Y2VwdGlvbl9oYW5kbGVyKTsKKworICAvKiBPdXIgb3V0cHV0IGlzIHJlYWxseSBub3QgdmVyeSBpbnRlcmVzdGluZyAqLworICBwcmlvcml0eSA9IDEwOworICBicmxhcGlfc2V0UGFyYW1ldGVyKEJSTEFQSV9QQVJBTV9DTElFTlRfUFJJT1JJVFksIDAsIEJSTEFQSV9QQVJBTUZfTE9DQUwsICZwcmlvcml0eSwgc2l6ZW9mKHByaW9yaXR5KSk7CisKKyAgLyogV2UgcHJlZmVyIHRvIGdldCB0cmFuc2xhdGVkIGtleXByZXNzZXMgKi8KKyAgZG90cyA9IDA7CisgIGJybGFwaV9zZXRQYXJhbWV0ZXIoQlJMQVBJX1BBUkFNX1JFVEFJTl9ET1RTLCAwLCBCUkxBUElfUEFSQU1GX0xPQ0FMLCAmZG90cywgc2l6ZW9mKGRvdHMpKTsKKworICAvKiBYIGFscmVhZHkgaGFzIHNvbWUgY2xpcGJvYXJkIGNvbnRlbnQgKi8KKyAgaWYgKGNsaXBib2FyZERhdGEpCisgICAgYnJsYXBpX3NldFBhcmFtZXRlcihCUkxBUElfUEFSQU1fQ0xJUEJPQVJEX0NPTlRFTlQsIDAsIEJSTEFQSV9QQVJBTUZfR0xPQkFMLCBjbGlwYm9hcmREYXRhLCBzdHJsZW4oY2xpcGJvYXJkRGF0YSkpOworCisgIC8qIFdlIHdhbnQgdG8gbW9uaXRvciBjbGlwYm9hcmQgY2hhbmdlcyAqLworICBicmxhcGlfd2F0Y2hQYXJhbWV0ZXIoQlJMQVBJX1BBUkFNX0NMSVBCT0FSRF9DT05URU5ULCAwLCBCUkxBUElfUEFSQU1GX0dMT0JBTCwgY2xpcGJvYXJkQ29udGVudENoYW5nZWQsIE5VTEwsIE5VTEwsIDApOworCisgIHJldHVybiAxOworfQorCitzdGF0aWMgaW50IGdldFhWVG5iKHZvaWQpOworCitzdGF0aWMgdm9pZCBnZXRWVCh2b2lkKSB7CisgIGNoYXIgKnBhdGggPSBnZXRlbnYoIldJTkRPV1BBVEgiKTsKKyAgY2hhciAqdnRuciA9IGdldGVudigiWERHX1ZUTlIiKTsKKyAgaW50IHZ0bm8gPSAtMTsKKyAgaWYgKCFwYXRoICYmICF2dG5yKQorICAgIC8qIFdvcmthcm91bmQgZm9yIG9sZCB4aW5pdC94ZG0vZ2RtL2tkbSAqLworICAgIHZ0bm8gPSBnZXRYVlRuYigpOworCisgIGlmIChwYXRoIHx8IHZ0bnIgfHwgdnRubyA9PSAtMSkgeworICAgIGlmIChicmxhcGlfZW50ZXJUdHlNb2RlV2l0aFBhdGgoTlVMTCwwLE5VTEwpPDApCisgICAgeworICAgICAgZmF0YWxfYnJsYXBpX2Vycm5vKCJnZVR0eVBhdGgiLGdldHRleHQoImNhbm5vdCBnZXQgdHR5XG4iKSk7CisgICAgICByZXR1cm47CisgICAgfQorICB9IGVsc2UgeworICAgIGlmIChicmxhcGlfZW50ZXJUdHlNb2RlKHZ0bm8sTlVMTCk8MCkKKyAgICB7CisgICAgICBmYXRhbF9icmxhcGlfZXJybm8oImVudGVyVHR5TW9kZSIsZ2V0dGV4dCgiY2Fubm90IGdldCB0dHkgJWRcbiIpLHZ0bm8pOworICAgICAgcmV0dXJuOworICAgIH0KKyAgfQorCisgIGlmIChicmxhcGlfaWdub3JlQWxsS2V5cygpPDApCisgIHsKKyAgICBmYXRhbF9icmxhcGlfZXJybm8oImlnbm9yZUFsbEtleXMiLGdldHRleHQoImNhbm5vdCBpZ25vcmUga2V5c1xuIikpOworICAgIHJldHVybjsKKyAgfQorI2lmZGVmIENBTl9TSU1VTEFURV9LRVlfUFJFU1NFUworICAvKiBBbGwgWCBrZXlzeW1zIHdpdGggYW55IG1vZGlmaWVyICovCisgIGJybGFwaV9rZXlDb2RlX3QgY21kID0gQlJMQVBJX0tFWV9UWVBFX1NZTTsKKyAgaWYgKGJybGFwaV9hY2NlcHRLZXlzKGJybGFwaV9yYW5nZVR5cGVfdHlwZSwgJmNtZCwgMSkpCisgIHsKKyAgICBmYXRhbF9icmxhcGlfZXJybm8oImFjY2VwdEtleXMiLE5VTEwpOworICAgIHJldHVybjsKKyAgfQorICBjbWQgPSBCUkxBUElfS0VZX1RZUEVfQ01EIHwgQlJMQVBJX0tFWV9DTURfU0hJRlQ7CisgIGlmIChicmxhcGlfYWNjZXB0S2V5cyhicmxhcGlfcmFuZ2VUeXBlX2tleSwgJmNtZCwgMSkpCisgIHsKKyAgICBmYXRhbF9icmxhcGlfZXJybm8oImFjY2VwdEtleXMiLE5VTEwpOworICAgIHJldHVybjsKKyAgfQorICBjbWQgPSBCUkxBUElfS0VZX1RZUEVfQ01EIHwgQlJMQVBJX0tFWV9DTURfVVBQRVI7CisgIGlmIChicmxhcGlfYWNjZXB0S2V5cyhicmxhcGlfcmFuZ2VUeXBlX2tleSwgJmNtZCwgMSkpCisgIHsKKyAgICBmYXRhbF9icmxhcGlfZXJybm8oImFjY2VwdEtleXMiLE5VTEwpOworICAgIHJldHVybjsKKyAgfQorICBjbWQgPSBCUkxBUElfS0VZX1RZUEVfQ01EIHwgQlJMQVBJX0tFWV9DTURfQ09OVFJPTDsKKyAgaWYgKGJybGFwaV9hY2NlcHRLZXlzKGJybGFwaV9yYW5nZVR5cGVfa2V5LCAmY21kLCAxKSkKKyAgeworICAgIGZhdGFsX2JybGFwaV9lcnJubygiYWNjZXB0S2V5cyIsTlVMTCk7CisgICAgcmV0dXJuOworICB9CisgIGNtZCA9IEJSTEFQSV9LRVlfVFlQRV9DTUQgfCBCUkxBUElfS0VZX0NNRF9NRVRBOworICBpZiAoYnJsYXBpX2FjY2VwdEtleXMoYnJsYXBpX3JhbmdlVHlwZV9rZXksICZjbWQsIDEpKQorICB7CisgICAgZmF0YWxfYnJsYXBpX2Vycm5vKCJhY2NlcHRLZXlzIixOVUxMKTsKKyAgICByZXR1cm47CisgIH0KKyNlbmRpZiAvKiBDQU5fU0lNVUxBVEVfS0VZX1BSRVNTRVMgKi8KK30KKworc3RhdGljIGNoYXIgKmxhc3RfbmFtZTsKKworc3RhdGljIHZvaWQgYXBpX3NldExhc3ROYW1lKHZvaWQpIHsKKyAgaWYgKCFsYXN0X25hbWUpIHJldHVybjsKKyAgaWYgKGJybGFwaV93cml0ZVRleHQoMCxsYXN0X25hbWUpPDApIHsKKyAgICBicmxhcGlfcGVycm9yKCJ3cml0ZVRleHQiKTsKKyAgICBmcHJpbnRmKHN0ZGVycixnZXR0ZXh0KCJ4YnJsYXBpOiBjYW5ub3Qgd3JpdGUgd2luZG93IG5hbWUgJXNcbiIpLGxhc3RfbmFtZSk7CisgIH0KK30KKworc3RhdGljIHZvaWQgYXBpX3NldE5hbWUoY29uc3QgY2hhciAqd21fbmFtZSkgeworICBpZiAoYnJsYXBpX2ZkPDApIHJldHVybjsKKworICBkZWJ1Z2YoIiVzIGdvdCBmb2N1c1xuIix3bV9uYW1lKTsKKyAgaWYgKGxhc3RfbmFtZSkgeworICAgIGlmICghc3RyY21wKHdtX25hbWUsbGFzdF9uYW1lKSkgcmV0dXJuOworICAgIGZyZWUobGFzdF9uYW1lKTsKKyAgfQorICBpZiAoIShsYXN0X25hbWU9c3RyZHVwKHdtX25hbWUpKSkgZmF0YWxfZXJybm8oInN0cmR1cCh3bV9uYW1lKSIsTlVMTCk7CisgIGFwaV9zZXRMYXN0TmFtZSgpOworfQorCitzdGF0aWMgaW50IGxhc3Rfd2luOworCitzdGF0aWMgdm9pZCBhcGlfc2V0TGFzdEZvY3VzKHZvaWQpCit7CisgIGlmIChicmxhcGlfc2V0Rm9jdXMobGFzdF93aW4pPDApCisgICAgZmF0YWxfYnJsYXBpX2Vycm5vKCJzZXRGb2N1cyIsZ2V0dGV4dCgiY2Fubm90IHNldCBmb2N1cyB0byAlIzAxMHhcbiIpLGxhc3Rfd2luKTsKK30KKworc3RhdGljIHZvaWQgYXBpX3NldEZvY3VzKGludCB3aW4pIHsKKyAgaWYgKGJybGFwaV9mZDwwKSByZXR1cm47CisgIGRlYnVnZigiJSMwMTB4ICglZCkgZ290IGZvY3VzXG4iLHdpbix3aW4pOworICBsYXN0X3dpbiA9IHdpbjsKKyAgYXBpX3NldExhc3RGb2N1cygpOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBYIGhhbmRsaW5nCisgKi8KKworc3RhdGljIGNvbnN0IGNoYXIgKlhkaXNwbGF5Oworc3RhdGljIERpc3BsYXkgKmRweTsKKworc3RhdGljIFdpbmRvdyBjdXJXaW5kb3c7CitzdGF0aWMgQXRvbSBuZXRXbU5hbWVBdG9tLCB1dGY4U3RyaW5nQXRvbTsKKworc3RhdGljIFhTZWxEYXRhIHhzZWxEYXRhOworCitzdGF0aWMgdm9sYXRpbGUgc2lnX2F0b21pY190IGdyYWJGYWlsZWQ7CisKKyNpZmRlZiBIQVZFX0lDT05WX0gKK2ljb252X3QgdXRmOENvbnYgPSAoaWNvbnZfdCkoLTEpOworI2VuZGlmIC8qIEhBVkVfSUNPTlZfSCAqLworCisjZGVmaW5lIFdJTkhBU0hCSVRTIDEyCisKK3N0YXRpYyBzdHJ1Y3Qgd2luZG93IHsKKyAgV2luZG93IHdpbjsKKyAgV2luZG93IHJvb3Q7CisgIGNoYXIgKndtX25hbWU7CisgIHN0cnVjdCB3aW5kb3cgKm5leHQ7Cit9ICp3aW5kb3dzWygxPDxXSU5IQVNIQklUUyldOworCisjZGVmaW5lIFdJTkhBU0god2luKSB3aW5kb3dzWyh3aW4pPj4oMzItV0lOSEFTSEJJVFMpXih3aW4mKCgxPDxXSU5IQVNIQklUUyktMSkpXQorCitzdGF0aWMgdm9pZCBhZGRfd2luZG93KFdpbmRvdyB3aW4sIFdpbmRvdyByb290LCBjaGFyICp3bV9uYW1lKSB7CisgIHN0cnVjdCB3aW5kb3cgKmN1cjsKKyAgaWYgKCEoY3VyPW1hbGxvYyhzaXplb2Yoc3RydWN0IHdpbmRvdykpKSkKKyAgICBmYXRhbF9lcnJubygibWFsbG9jKHN0cnVjdCB3aW5kb3cpIixOVUxMKTsKKyAgY3VyLT53aW49d2luOworICBjdXItPndtX25hbWU9d21fbmFtZTsKKyAgY3VyLT5yb290PXJvb3Q7CisgIGN1ci0+bmV4dD1XSU5IQVNIKHdpbik7CisgIFdJTkhBU0god2luKT1jdXI7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgd2luZG93ICp3aW5kb3dfb2ZfV2luZG93KFdpbmRvdyB3aW4pIHsKKyAgc3RydWN0IHdpbmRvdyAqY3VyOworICBmb3IgKGN1cj1XSU5IQVNIKHdpbik7IGN1ciAmJiBjdXItPndpbiE9d2luOyBjdXI9Y3VyLT5uZXh0KTsKKyAgcmV0dXJuIGN1cjsKK30KKworc3RhdGljIGludCBpc1Jvb3RXaW5kb3cgKFdpbmRvdyB3aW4pIHsKKyAgaWYgKHdpbiA9PSBQb2ludGVyUm9vdCkgcmV0dXJuIDE7CisKKyAgeworICAgIGludCBjb3VudCA9IFNjcmVlbkNvdW50KGRweSk7CisgICAgIAorICAgIGZvciAoaW50IGluZGV4PTA7IGluZGV4PGNvdW50OyBpbmRleCs9MSkgeworICAgICAgaWYgKFJvb3RXaW5kb3coZHB5LCBpbmRleCkgPT0gd2luKSB7CisgICAgICAgIHJldHVybiAxOworICAgICAgfQorICAgIH0KKyAgfQorCisgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50IGRlbF93aW5kb3coV2luZG93IHdpbikgeworICBzdHJ1Y3Qgd2luZG93ICoqcHJlZDsKKyAgc3RydWN0IHdpbmRvdyAqY3VyOworCisgIGZvciAocHJlZD0mV0lOSEFTSCh3aW4pOyBjdXIgPSAqcHJlZCwgY3VyICYmIGN1ci0+d2luIT13aW47IHByZWQ9JmN1ci0+bmV4dCk7CisKKyAgaWYgKGN1cikgeworICAgICpwcmVkPWN1ci0+bmV4dDsKKyAgICBmcmVlKGN1ci0+d21fbmFtZSk7CisgICAgZnJlZShjdXIpOworICAgIHJldHVybiAwOworICB9IGVsc2UgcmV0dXJuIC0xOworfQorCitzdGF0aWMgaW50IEVycm9ySGFuZGxlcihEaXNwbGF5ICpkcHksIFhFcnJvckV2ZW50ICpldikgeworICBjaGFyIGJ1ZmZlclsxMjhdOworICBpZiAoZXYtPmVycm9yX2NvZGU9PUJhZFdpbmRvdykgeworICAgIGdyYWJGYWlsZWQ9MTsKKyAgICByZXR1cm4gMDsKKyAgfQorI2lmZGVmIENBTl9TSU1VTEFURV9LRVlfUFJFU1NFUworICBpZiAoZXYtPnJlcXVlc3RfY29kZSA9PSB4a2JfbWFqb3Jfb3Bjb2RlICYmIGV2LT5taW5vcl9jb2RlID09IFhfa2JTZXRNYXApIHsKKyAgICAvKiBTZXJ2ZXIgcmVmdXNlZCBvdXIgWGtiIHJlbWFwcGluZyByZXF1ZXN0LCBwcm9iYWJseSB0aGUgYnVnZ3kgdmVyc2lvbiAyMSwgaWdub3JlIGVycm9yICovCisgICAgZnByaW50ZihzdGRlcnIsZ2V0dGV4dCgieGJybGFwaTogc2VydmVyIHJlZnVzZWQgb3VyIG1hcHBpbmcgcmVxdWVzdCwgY291bGQgbm90IHN5bnRoZXNpemUga2V5XG4iKSk7CisgICAgcmV0dXJuIDA7CisgIH0KKyNlbmRpZgorICBpZiAoWEdldEVycm9yVGV4dChkcHksIGV2LT5lcnJvcl9jb2RlLCBidWZmZXIsIHNpemVvZihidWZmZXIpKSkKKyAgICBmYXRhbCgiWEdldEVycm9yVGV4dCIpOworICBmcHJpbnRmKHN0ZGVycixnZXR0ZXh0KCJ4YnJsYXBpOiBYIEVycm9yICVkLCAlcyBvbiBkaXNwbGF5ICVzXG4iKSwgZXYtPnR5cGUsIGJ1ZmZlciwgWERpc3BsYXlOYW1lKFhkaXNwbGF5KSk7CisgIGZwcmludGYoc3RkZXJyLGdldHRleHQoInhicmxhcGk6IHJlc291cmNlICUjMDEwbHgsIHJlcSAldToldVxuIiksZXYtPnJlc291cmNlaWQsZXYtPnJlcXVlc3RfY29kZSxldi0+bWlub3JfY29kZSk7CisgIGV4aXQoUFJPR19FWElUX0ZBVEFMKTsKK30KKworc3RhdGljIGludCBnZXRYVlRuYih2b2lkKSB7CisgIFdpbmRvdyByb290OworICBBdG9tIHByb3BlcnR5OworICBBdG9tIGFjdHVhbF90eXBlOworICBpbnQgYWN0dWFsX2Zvcm1hdDsKKyAgdW5zaWduZWQgbG9uZyBuaXRlbXM7CisgIHVuc2lnbmVkIGxvbmcgYnl0ZXNfYWZ0ZXI7CisgIHVuc2lnbmVkIGNoYXIgKmJ1ZjsKKyAgaW50IHZ0ID0gLTE7CisKKyAgcm9vdD1EZWZhdWx0Um9vdFdpbmRvdyhkcHkpOworCisgIGlmICgocHJvcGVydHk9WEludGVybkF0b20oZHB5LCJYRnJlZTg2X1ZUIixGYWxzZSkpPT1Ob25lKSB7CisgICAgZnByaW50ZihzdGRlcnIsZ2V0dGV4dCgieGJybGFwaTogbm8gWEZyZWU4Nl9WVCBhdG9tXG4iKSk7CisgICAgcmV0dXJuIC0xOworICB9CisKKyAgaWYgKFhHZXRXaW5kb3dQcm9wZXJ0eShkcHkscm9vdCxwcm9wZXJ0eSwwLDEsRmFsc2UsQW55UHJvcGVydHlUeXBlLAorICAgICZhY3R1YWxfdHlwZSwgJmFjdHVhbF9mb3JtYXQsICZuaXRlbXMsICZieXRlc19hZnRlciwgJmJ1ZikpIHsKKyAgICBmcHJpbnRmKHN0ZGVycixnZXR0ZXh0KCJ4YnJsYXBpOiBjYW5ub3QgZ2V0IHJvb3Qgd2luZG93IFhGcmVlODZfVlQgcHJvcGVydHlcbiIpKTsKKyAgICByZXR1cm4gLTE7CisgIH0KKworICBpZiAobml0ZW1zPDEpIHsKKyAgICBmcHJpbnRmKHN0ZGVyciwgZ2V0dGV4dCgieGJybGFwaTogbm8gaXRlbXMgZm9yIFZUIG51bWJlclxuIikpOworICAgIGdvdG8gb3V0OworICB9CisgIGlmIChuaXRlbXM+MSkKKyAgICBmcHJpbnRmKHN0ZGVycixnZXR0ZXh0KCJ4YnJsYXBpOiBtb3JlIHRoYW4gb25lIGl0ZW0gZm9yIFZUIG51bWJlclxuIikpOworICBzd2l0Y2ggKGFjdHVhbF90eXBlKSB7CisgIGNhc2UgWEFfQ0FSRElOQUw6CisgIGNhc2UgWEFfSU5URUdFUjoKKyAgY2FzZSBYQV9XSU5ET1c6CisgICAgc3dpdGNoIChhY3R1YWxfZm9ybWF0KSB7CisgICAgY2FzZSA4OiAgdnQgPSAoKih1aW50OF90ICopYnVmKTsgYnJlYWs7CisgICAgY2FzZSAxNjogdnQgPSAoKih1aW50MTZfdCAqKWJ1Zik7IGJyZWFrOworICAgIGNhc2UgMzI6IHZ0ID0gKCoodWludDMyX3QgKilidWYpOyBicmVhazsKKyAgICBkZWZhdWx0OiBmcHJpbnRmKHN0ZGVyciwgZ2V0dGV4dCgieGJybGFwaTogYmFkIGZvcm1hdCBmb3IgVlQgbnVtYmVyXG4iKSk7IGdvdG8gb3V0OworICAgIH0KKyAgICBicmVhazsKKyAgZGVmYXVsdDogZnByaW50ZihzdGRlcnIsIGdldHRleHQoInhicmxhcGk6IGJhZCB0eXBlIGZvciBWVCBudW1iZXJcbiIpKTsgZ290byBvdXQ7CisgIH0KK291dDoKKyAgaWYgKCFYRnJlZShidWYpKSBmYXRhbCgiWEZyZWUoVlRub2J1ZikiKTsKKyAgcmV0dXJuIHZ0OworfQorCitzdGF0aWMgaW50IGdyYWJXaW5kb3coV2luZG93IHdpbixpbnQgbGV2ZWwpIHsKKyNpZmRlZiBERUJVRworICBjaGFyIHNwYWNlc1tsZXZlbCsxXTsKKyNlbmRpZiAvKiBERUJVRyAqLworCisgIGdyYWJGYWlsZWQ9MDsKKyAgaWYgKCFYU2VsZWN0SW5wdXQoZHB5LHdpbixQcm9wZXJ0eUNoYW5nZU1hc2t8Rm9jdXNDaGFuZ2VNYXNrfFN1YnN0cnVjdHVyZU5vdGlmeU1hc2spIHx8IGdyYWJGYWlsZWQpCisgICAgcmV0dXJuIDA7CisKKyNpZmRlZiBERUJVRworICBtZW1zZXQoc3BhY2VzLCcgJyxsZXZlbCk7CisgIHNwYWNlc1tsZXZlbF09J1wwJzsKKyAgZGVidWdmKCIlc2dyYWJiZWQgJSMwMTBseFxuIixzcGFjZXMsd2luKTsKKyNlbmRpZiAvKiBERUJVRyAqLworICByZXR1cm4gMTsKK30KKworc3RhdGljIGNoYXIgKmdldFdpbmRvd1RpdGxlKFdpbmRvdyB3aW4pIHsKKyAgaW50IHdtX25hbWVfc2l6ZT0zMjsKKyAgQXRvbSBhY3R1YWxfdHlwZTsKKyAgaW50IGFjdHVhbF9mb3JtYXQ7CisgIHVuc2lnbmVkIGxvbmcgbml0ZW1zLGJ5dGVzX2FmdGVyOworICB1bnNpZ25lZCBjaGFyICp3bV9uYW1lPU5VTEw7CisgIGNoYXIgKnJldDsKKworICBkbyB7CisgICAgaWYgKFhHZXRXaW5kb3dQcm9wZXJ0eShkcHksd2luLG5ldFdtTmFtZUF0b20sMCx3bV9uYW1lX3NpemUsRmFsc2UsCisJLypYQV9TVFJJTkcqL0FueVByb3BlcnR5VHlwZSwmYWN0dWFsX3R5cGUsJmFjdHVhbF9mb3JtYXQsJm5pdGVtcywmYnl0ZXNfYWZ0ZXIsCisJJndtX25hbWUpKSB7CisgICAgICB3bV9uYW1lID0gTlVMTDsKKyAgICAgIGJyZWFrOyAvKiB3aW5kb3cgZGlzYXBwZWFyZWQgb3Igbm90IGF2YWlsYWJsZSAqLworICAgIH0KKyAgICB3bV9uYW1lX3NpemUrPWJ5dGVzX2FmdGVyOworICAgIGlmICghYnl0ZXNfYWZ0ZXIpIGJyZWFrOworICAgIGlmICghWEZyZWUod21fbmFtZSkpIGZhdGFsKCJ0ZW1wb19YRnJlZSh3bV9uYW1lKSIpOworICB9IHdoaWxlICgxKTsKKyAgaWYgKCF3bV9uYW1lKSBkbyB7CisgICAgaWYgKFhHZXRXaW5kb3dQcm9wZXJ0eShkcHksd2luLFhBX1dNX05BTUUsMCx3bV9uYW1lX3NpemUsRmFsc2UsCisJLypYQV9TVFJJTkcqL0FueVByb3BlcnR5VHlwZSwmYWN0dWFsX3R5cGUsJmFjdHVhbF9mb3JtYXQsJm5pdGVtcywmYnl0ZXNfYWZ0ZXIsCisJJndtX25hbWUpKQorICAgICAgcmV0dXJuIE5VTEw7IC8qIHdpbmRvdyBkaXNhcHBlYXJlZCAqLworICAgIGlmICh3bV9uYW1lX3NpemUgPj0gbml0ZW1zICsgMSkgYnJlYWs7CisgICAgd21fbmFtZV9zaXplICs9IGJ5dGVzX2FmdGVyICsgMTsKKyAgICBpZiAoIVhGcmVlKHdtX25hbWUpKSBmYXRhbCgidGVtcG9fWEZyZWUod21fbmFtZSkiKTsKKyAgfSB3aGlsZSAoMSk7CisgIGlmIChhY3R1YWxfdHlwZT09Tm9uZSkgeworICAgIFhGcmVlKHdtX25hbWUpOworICAgIHJldHVybiBOVUxMOworICB9CisgIHdtX25hbWVbbml0ZW1zKytdID0gMDsKKyAgcmV0ID0gc3RyZHVwKChjaGFyICopIHdtX25hbWUpOworICBYRnJlZSh3bV9uYW1lKTsKKyAgZGVidWdmKCJ0eXBlICVsZCBuYW1lICVzIGxlbiAlbGRcbiIsYWN0dWFsX3R5cGUscmV0LG5pdGVtcyk7CisjaWZkZWYgSEFWRV9JQ09OVl9ICisgIHsKKyAgICBpZiAoYWN0dWFsX3R5cGUgPT0gdXRmOFN0cmluZ0F0b20gJiYgdXRmOENvbnYgIT0gKGljb252X3QpKC0xKSkgeworICAgICAgY2hhciAqcmV0MjsKKyAgICAgIHNpemVfdCBpbnB1dF9zaXplLCBvdXRwdXRfc2l6ZTsKKyAgICAgIGNoYXIgKmlucHV0LCAqb3V0cHV0OworCisgICAgICBpbnB1dF9zaXplID0gbml0ZW1zOworICAgICAgaW5wdXQgPSByZXQ7CisgICAgICBvdXRwdXRfc2l6ZSA9IG5pdGVtcyAqIE1CX0NVUl9NQVg7CisgICAgICBvdXRwdXQgPSByZXQyID0gbWFsbG9jKG91dHB1dF9zaXplKTsKKyAgICAgIGlmIChpY29udih1dGY4Q29udiwgJmlucHV0LCAmaW5wdXRfc2l6ZSwgJm91dHB1dCwgJm91dHB1dF9zaXplKSA9PSAtMSkgeworCWZyZWUocmV0Mik7CisgICAgICB9IGVsc2UgeworCWZyZWUocmV0KTsKKwlyZXQgPSByZWFsbG9jKHJldDIsIG5pdGVtcyAqIE1CX0NVUl9NQVggLSBvdXRwdXRfc2l6ZSk7CisJZGVidWdmKCItPiAlc1xuIixyZXQpOworICAgICAgfQorICAgIH0KKyAgfQorI2VuZGlmIC8qIEhBVkVfSUNPTlZfSCAqLworICByZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGdyYWJXaW5kb3dzKFdpbmRvdyB3aW4saW50IGxldmVsKSB7CisgIFdpbmRvdyByb290LHBhcmVudCwqY2hpbGRyZW47CisgIHVuc2lnbmVkIGludCBuY2hpbGRyZW4saTsKKyAgaW50IHJlcz0xOworCisgIGlmICghZ3JhYldpbmRvdyh3aW4sbGV2ZWwpKSByZXR1cm4gMTsgLyogd2luZG93IGRpc2FwcGVhcmVkICovCisKKyAgaWYgKCFYUXVlcnlUcmVlKGRweSx3aW4sJnJvb3QsJnBhcmVudCwmY2hpbGRyZW4sJm5jaGlsZHJlbikpIHJldHVybiAwOworCisgIGFkZF93aW5kb3cod2luLHJvb3QsZ2V0V2luZG93VGl0bGUod2luKSk7CisKKyAgaWYgKCFjaGlsZHJlbikgcmV0dXJuIDE7CisKKyAgZm9yIChpPTA7aTxuY2hpbGRyZW47aSsrKQorICAgIGlmIChjaGlsZHJlbltpXSAmJiAhZ3JhYldpbmRvd3MoY2hpbGRyZW5baV0sbGV2ZWwrMSkpIHsKKyAgICAgIHJlcz0wOworICAgICAgYnJlYWs7CisgICAgfQorCisgIGlmICghWEZyZWUoY2hpbGRyZW4pKSBmYXRhbCgiWEZyZWUoY2hpbGRyZW4pIik7CisgIHJldHVybiByZXM7Cit9CisKK3N0YXRpYyB2b2lkIHNldE5hbWUoY29uc3Qgc3RydWN0IHdpbmRvdyAqd2luZG93KSB7CisgIGlmICghd2luZG93LT53bV9uYW1lKSB7CisgICAgaWYgKHdpbmRvdy0+d2luIT13aW5kb3ctPnJvb3QpCisgICAgICBhcGlfc2V0TmFtZSgid2luZG93IHdpdGhvdXQgbmFtZSIpOworICB9IGVsc2UgYXBpX3NldE5hbWUod2luZG93LT53bV9uYW1lKTsKK30KKworc3RhdGljIHZvaWQgc2V0Rm9jdXMoV2luZG93IHdpbikgeworICBjdXJXaW5kb3c9d2luOworICBhcGlfc2V0Rm9jdXMoKHVpbnQzMl90KXdpbik7CisKKyAgaWYgKCFxdWlldCkgeworICAgIHN0cnVjdCB3aW5kb3cgKndpbmRvdyA9IHdpbmRvd19vZl9XaW5kb3cod2luKTsKKworICAgIGlmICh3aW5kb3cpIHsKKyAgICAgIHNldE5hbWUod2luZG93KTsKKyAgICB9IGVsc2UgeworICAgICAgZnByaW50ZihzdGRlcnIsIGdldHRleHQoInhicmxhcGk6IGRpZG4ndCBncmFiIHdpbmRvdyAlIzAxMGx4IGJ1dCBnb3QgZm9jdXNcbiIpLCB3aW4pOworICAgICAgYXBpX3NldE5hbWUoaXNSb290V2luZG93KHdpbik/ICJyb290IHdpbmRvdyI6ICJ1bm5hbWVkIHdpbmRvdyIpOworICAgIH0KKyAgfQorfQorCisjaWZkZWYgQ0FOX1NJTVVMQVRFX0tFWV9QUkVTU0VTCitzdGF0aWMgaW50IHRyeU1vZGlmaWVycyhLZXlDb2RlIGtleWNvZGUsIHVuc2lnbmVkIGludCAqbW9kaWZpZXJzLCB1bnNpZ25lZCBpbnQgbW9kaWZpZXJzX3RyeSwgS2V5U3ltIGtleXN5bSkgeworICBLZXlTeW0ga2V5c3ltUmV0OworICB1bnNpZ25lZCBpbnQgbW9kaWZpZXJzUmV0OworICBpZiAoIVhrYkxvb2t1cEtleVN5bShkcHksIGtleWNvZGUsIG1vZGlmaWVyc190cnksICZtb2RpZmllcnNSZXQsICZrZXlzeW1SZXQpKQorICAgIHJldHVybiAwOworICBpZiAoa2V5c3ltUmV0ICE9IGtleXN5bSkKKyAgICByZXR1cm4gMDsKKyAgKm1vZGlmaWVycyB8PSBtb2RpZmllcnNfdHJ5OworICByZXR1cm4gMTsKK30KKworc3RhdGljIHZvaWQgaWdub3JlU2VydmVyS2V5cyh2b2lkKSB7CisgIGJybGFwaV9yYW5nZV90IHJhbmdlID0geworICAgIC5maXJzdCA9IEJSTEFQSV9LRVlfRkxHKENvbnRyb2xNYXNrfE1vZDFNYXNrKSwKKyAgICAubGFzdCAgPSBCUkxBUElfS0VZX0ZMRyhDb250cm9sTWFza3xNb2QxTWFzayl8fkJSTEFQSV9LRVlfRkxBR1NfTUFTSywKKyAgfTsKKyAgaWYgKGJybGFwaV9pZ25vcmVLZXlSYW5nZXMoJnJhbmdlLCAxKSkKKyAgeworICAgIGZhdGFsX2JybGFwaV9lcnJubygiaWdub3JlS2V5UmFuZ2VzIixOVUxMKTsKKyAgICByZXR1cm47CisgIH0KK30KKyNlbmRpZiAvKiBDQU5fU0lNVUxBVEVfS0VZX1BSRVNTRVMgKi8KKworc3RhdGljIHZvaWQgY2xpcGJvYXJkQ29udGVudENoYW5nZWQoYnJsYXBpX3BhcmFtX3QgcGFyYW1ldGVyLCBicmxhcGlfcGFyYW1fc3VicGFyYW1fdCBzdWJwYXJhbSwgYnJsYXBpX3BhcmFtX2ZsYWdzX3QgZmxhZ3MsIHZvaWQgKnByaXYsIGNvbnN0IHZvaWQgKmRhdGEsIHNpemVfdCBsZW4pIHsKKyAgZnJlZShjbGlwYm9hcmREYXRhKTsKKyAgY2xpcGJvYXJkRGF0YSA9IHN0cm5kdXAoZGF0YSwgbGVuKTsKKyAgZGVidWdmKCJuZXcgY2xpcGJvYXJkIGNvbnRlbnQgZnJvbSBCcmxBUEk6ICclcydcbiIsIChjb25zdCBjaGFyICopIGNsaXBib2FyZERhdGEpOworICBpZiAoZHB5KQorICAgIFhTZWxTZXQoZHB5LCAmeHNlbERhdGEpOworfQorCitzdGF0aWMgdm9pZCBYQ2xpcGJvYXJkQ29udGVudENoYW5nZWQoY29uc3QgY2hhciAqZGF0YSwgdW5zaWduZWQgbG9uZyBzaXplKSB7CisgIGZyZWUoY2xpcGJvYXJkRGF0YSk7CisgIGlmIChkYXRhKSB7CisgICAgY2xpcGJvYXJkRGF0YSA9IHN0cm5kdXAoZGF0YSwgc2l6ZSk7CisgICAgYnJsYXBpX3NldFBhcmFtZXRlcihCUkxBUElfUEFSQU1fQ0xJUEJPQVJEX0NPTlRFTlQsIDAsIEJSTEFQSV9QQVJBTUZfR0xPQkFMLCBjbGlwYm9hcmREYXRhLCBzaXplKTsKKyAgICBkZWJ1Z2YoIm5ldyBjbGlwYm9hcmQgY29udGVudCBmcm9tIFg6ICclcydcbiIsIChjb25zdCBjaGFyICopIGNsaXBib2FyZERhdGEpOworICB9IGVsc2UKKyAgICBjbGlwYm9hcmREYXRhID0gTlVMTDsKK30KKworCitzdGF0aWMgdm9pZCB0b1hfZihjb25zdCBjaGFyICpkaXNwbGF5KSB7CisgIFdpbmRvdyByb290OworICBYRXZlbnQgZXY7CisgIGludCBpOworICBpbnQgWF9mZDsKKyAgZmRfc2V0IHJlYWRmZHM7CisgIGludCBtYXhmZDsKKyNpZmRlZiBDQU5fU0lNVUxBVEVfS0VZX1BSRVNTRVMKKyAgaW50IHJlczsKKyAgYnJsYXBpX2tleUNvZGVfdCBjb2RlOworICB1bnNpZ25lZCBpbnQga2V5c3ltLCBrZXljb2RlLCBtb2RpZmllcnMsIG5leHRfbW9kaWZpZXJzID0gMDsKKyAgQm9vbCBoYXZlWFRlc3Q7CisgIGludCBldmVudEJhc2UsIGVycm9yQmFzZSwgbWFqb3JWZXJzaW9uLCBtaW5vclZlcnNpb247CisgIFhrYkRlc2NQdHIgeGtiID0gTlVMTDsKKyAgWGtiTWFwQ2hhbmdlc1JlYyBjaGFuZ2VzID0geyAuY2hhbmdlZCA9IFhrYktleVR5cGVzTWFza3xYa2JLZXlTeW1zTWFzayB9OworICBpbnQgb25lR3JvdXBUeXBlW1hrYk51bUtiZEdyb3Vwc10gPSB7IFhrYk9uZUxldmVsSW5kZXggfTsKKyAgU3RhdHVzIHN0YXR1czsKKyAgaW50IGxhc3RfcmVtYXBfa2V5Y29kZSA9IC0xLCByZW1hcF9rZXljb2RlOworI2VuZGlmIC8qIENBTl9TSU1VTEFURV9LRVlfUFJFU1NFUyAqLworCisgIFhkaXNwbGF5ID0gZGlzcGxheTsKKyAgaWYgKCFYZGlzcGxheSkgWGRpc3BsYXk9Z2V0ZW52KCJESVNQTEFZIik7CisgIGlmICghKGRweT1YT3BlbkRpc3BsYXkoWGRpc3BsYXkpKSkgZmF0YWwoZ2V0dGV4dCgiY2Fubm90IGNvbm5lY3QgdG8gZGlzcGxheSAlc1xuIiksWGRpc3BsYXkpOworCisgIGlmICghWFNldEVycm9ySGFuZGxlcihFcnJvckhhbmRsZXIpKSBmYXRhbChnZXR0ZXh0KCJzdHJhbmdlIG9sZCBlcnJvciBoYW5kbGVyXG4iKSk7CisKKyNpZmRlZiBDQU5fU0lNVUxBVEVfS0VZX1BSRVNTRVMKKyAgaGF2ZVhUZXN0ID0gWFRlc3RRdWVyeUV4dGVuc2lvbihkcHksICZldmVudEJhc2UsICZlcnJvckJhc2UsICZtYWpvclZlcnNpb24sICZtaW5vclZlcnNpb24pOworCisgIHsKKyAgICBpbnQgZm9vOworICAgIGludCBtYWpvciA9IFhrYk1ham9yVmVyc2lvbiwgbWlub3IgPSBYa2JNaW5vclZlcnNpb247CisgICAgaWYgKCFYa2JMaWJyYXJ5VmVyc2lvbigmbWFqb3IsICZtaW5vcikpCisgICAgICBmYXRhbChnZXR0ZXh0KCJJbmNvbXBhdGlibGUgWEtCIGxpYnJhcnlcbiIpKTsKKyAgICBpZiAoIVhrYlF1ZXJ5RXh0ZW5zaW9uKGRweSwgJmZvbywgJmZvbywgJmZvbywgJm1ham9yLCAmbWlub3IpKQorICAgICAgZmF0YWwoZ2V0dGV4dCgiSW5jb21wYXRpYmxlIFhLQiBzZXJ2ZXIgc3VwcG9ydFxuIikpOworICAgIGlmICghWFF1ZXJ5RXh0ZW5zaW9uKGRweSwgIlhLRVlCT0FSRCIsICZ4a2JfbWFqb3Jfb3Bjb2RlLCAmZm9vLCAmZm9vKSkKKyAgICAgIGZhdGFsKGdldHRleHQoIkNvdWxkIG5vdCBnZXQgWEtCIG1ham9yIG9wY29kZVxuIikpOworICB9CisjZW5kaWYgLyogQ0FOX1NJTVVMQVRFX0tFWV9QUkVTU0VTICovCisKKyAgWFNlbEluaXQoZHB5LCAmeHNlbERhdGEpOworCisgIGlmIChjbGlwYm9hcmREYXRhKQorICAgIFhTZWxTZXQoZHB5LCAmeHNlbERhdGEpOworCisgIFhfZmQgPSBYQ29ubmVjdGlvbk51bWJlcihkcHkpOworCisgIGlmIChicmxhcGlfZmQ+PTApCisgIHsKKyAgICBnZXRWVCgpOworI2lmZGVmIENBTl9TSU1VTEFURV9LRVlfUFJFU1NFUworICAgIGlnbm9yZVNlcnZlcktleXMoKTsKKyNlbmRpZiAvKiBDQU5fU0lNVUxBVEVfS0VZX1BSRVNTRVMgKi8KKyAgfQorICBuZXRXbU5hbWVBdG9tID0gWEludGVybkF0b20oZHB5LCJfTkVUX1dNX05BTUUiLEZhbHNlKTsKKyAgdXRmOFN0cmluZ0F0b20gPSBYSW50ZXJuQXRvbShkcHksIlVURjhfU1RSSU5HIixGYWxzZSk7CisKKyNpZiBkZWZpbmVkKEhBVkVfTkxfTEFOR0lORk8pICYmIGRlZmluZWQoSEFWRV9JQ09OVl9IKQorICB7CisgICAgY2hhciAqbG9jYWxDaGFyc2V0ID0gbmxfbGFuZ2luZm8oQ09ERVNFVCk7CisgICAgaWYgKHN0cmNtcChsb2NhbENoYXJzZXQsICJVVEYtOCIpKSB7CisgICAgICBjaGFyIGJ1ZltzdHJsZW4obG9jYWxDaGFyc2V0KSArIDEwICsgMV07CisgICAgICBzbnByaW50ZihidWYsIHNpemVvZihidWYpLCAiJXMvL1RSQU5TTElUIiwgbG9jYWxDaGFyc2V0KTsKKyAgICAgIGlmICgodXRmOENvbnYgPSBpY29udl9vcGVuKGJ1ZiwgIlVURi04IikpID09IChpY29udl90KSgtMSkpCisgICAgICAgIHV0ZjhDb252ID0gaWNvbnZfb3Blbihsb2NhbENoYXJzZXQsICJVVEYtOCIpOworICAgIH0KKyAgfQorI2VuZGlmIC8qIGRlZmluZWQoSEFWRV9OTF9MQU5HSU5GTykgJiYgZGVmaW5lZChIQVZFX0lDT05WX0gpICovCisKKyAgZm9yIChpPTA7aTxTY3JlZW5Db3VudChkcHkpO2krKykgeworICAgIHJvb3Q9Um9vdFdpbmRvdyhkcHksaSk7CisgICAgaWYgKCFncmFiV2luZG93cyhyb290LDApKSBmYXRhbChnZXR0ZXh0KCJjYW5ub3QgZ3JhYiB3aW5kb3dzIG9uIHNjcmVlbiAlZFxuIiksaSk7CisgIH0KKworICB7CisgICAgV2luZG93IHdpbjsKKyAgICBpbnQgcmV2ZXJ0X3RvOworICAgIGlmICghWEdldElucHV0Rm9jdXMoZHB5LCZ3aW4sJnJldmVydF90bykpCisgICAgICBmYXRhbChnZXR0ZXh0KCJmYWlsZWQgdG8gZ2V0IGZpcnN0IGZvY3VzXG4iKSk7CisgICAgc2V0Rm9jdXMod2luKTsKKyAgfQorICB3aGlsZSgxKSB7CisgICAgc3RydWN0IHRpbWV2YWwgdGltZW91dD17LnR2X3NlYz0xLC50dl91c2VjPTB9OworICAgIFhGbHVzaChkcHkpOworICAgIEZEX1pFUk8oJnJlYWRmZHMpOworICAgIGlmIChicmxhcGlfZmQ+PTApCisgICAgICBGRF9TRVQoYnJsYXBpX2ZkLCAmcmVhZGZkcyk7CisgICAgRkRfU0VUKFhfZmQsICZyZWFkZmRzKTsKKyAgICBtYXhmZCA9IGJybGFwaV9mZD49MCAmJiBYX2ZkPGJybGFwaV9mZCA/IGJybGFwaV9mZCsxIDogWF9mZCsxOworICAgIC8qIFRyeSB0byByZWNvbm5lY3QgdG8gYnJsYXBpIGV2ZXJ5IHNlY29uZCB3aGlsZSBkaXNjb25uZWN0ZWQgKi8KKyAgICBpZiAoc2VsZWN0KG1heGZkLCZyZWFkZmRzLE5VTEwsTlVMTCxicmxhcGlfZmQ8PTA/JnRpbWVvdXQ6TlVMTCk8MCkKKyAgICAgIGZhdGFsX2Vycm5vKCJzZWxlY3QiLE5VTEwpOworICAgIGlmIChGRF9JU1NFVChYX2ZkLCZyZWFkZmRzKSkKKworICAgIHdoaWxlIChYUGVuZGluZyhkcHkpKSB7CisgICAgICBpZiAoKGk9WE5leHRFdmVudChkcHksJmV2KSkpCisJZmF0YWwoIlhOZXh0RXZlbnQ6ICVkXG4iLGkpOworCisgICAgICBpZiAoIVhTZWxQcm9jZXNzKGRweSwgJnhzZWxEYXRhLCAmZXYsIGNsaXBib2FyZERhdGEsIFhDbGlwYm9hcmRDb250ZW50Q2hhbmdlZCkpCisgICAgICBzd2l0Y2ggKGV2LnR5cGUpIHsKKyAgICAgIC8qIGZvY3VzIGV2ZW50cyAqLworICAgICAgY2FzZSBGb2N1c0luOgorCXN3aXRjaCAoZXYueGZvY3VzLmRldGFpbCkgeworCWNhc2UgTm90aWZ5QW5jZXN0b3I6CisJY2FzZSBOb3RpZnlJbmZlcmlvcjoKKwljYXNlIE5vdGlmeU5vbmxpbmVhcjoKKwljYXNlIE5vdGlmeVBvaW50ZXJSb290OgorCWNhc2UgTm90aWZ5RGV0YWlsTm9uZToKKwkgIHNldEZvY3VzKGV2Lnhmb2N1cy53aW5kb3cpOyBicmVhazsKKwl9IGJyZWFrOworICAgICAgY2FzZSBGb2N1c091dDoKKwkvKiBpZ25vcmUKKwlzd2l0Y2ggKGV2Lnhmb2N1cy5kZXRhaWwpIHsKKwljYXNlIE5vdGlmeUFuY2VzdG9yOgorCWNhc2UgTm90aWZ5SW5mZXJpb3I6CisJY2FzZSBOb3RpZnlOb25saW5lYXI6CisJY2FzZSBOb3RpZnlQb2ludGVyUm9vdDoKKwljYXNlIE5vdGlmeURldGFpbE5vbmU6CisJcHJpbnRmKCJ3aW4gJSMwMTBseCBsb3N0IGZvY3VzXG4iLGV2Lnhmb2N1cy53aW5kb3cpOworCWJyZWFrOworCX0KKwkqLworCWJyZWFrOworCisgICAgICAvKiBjcmVhdGUgJiBkZXN0cm95IGV2ZW50cyAqLworICAgICAgY2FzZSBDcmVhdGVOb3RpZnk6IHsKKyAgICAgIC8qIHRoZXJlJ3MgYSByYWNlIGNvbmRpdGlvbiBoZXJlIDogYSB3aW5kb3cgbWF5IGdldCB0aGUgZm9jdXMgb3IgY2hhbmdlCisgICAgICAgKiBpdHMgdGl0bGUgYmV0d2VlbiBpdCBpcyBjcmVhdGVkIGFuZCB3ZSBhY2hpZXZlIFhTZWxlY3RJbnB1dCBvbiBpdCAqLworCVdpbmRvdyB3aW4gPSBldi54Y3JlYXRld2luZG93LndpbmRvdzsKKwlzdHJ1Y3Qgd2luZG93ICp3aW5kb3c7CisJaWYgKCFncmFiV2luZG93KHdpbiwwKSkgYnJlYWs7IC8qIHdpbmRvdyBhbHJlYWR5IGRpc2FwcGVhcmVkICEgKi8KKwlkZWJ1Z2YoIndpbiAlIzAxMGx4IGNyZWF0ZWRcbiIsd2luKTsKKwlpZiAoISh3aW5kb3cgPSB3aW5kb3dfb2ZfV2luZG93KGV2LnhjcmVhdGV3aW5kb3cucGFyZW50KSkpIHsKKwkgIGZwcmludGYoc3RkZXJyLGdldHRleHQoInhicmxhcGk6IGRpZG4ndCBncmFiIHBhcmVudCBvZiAlIzAxMGx4XG4iKSx3aW4pOworCSAgYWRkX3dpbmRvdyh3aW4sTm9uZSxnZXRXaW5kb3dUaXRsZSh3aW4pKTsKKwl9IGVsc2UgYWRkX3dpbmRvdyh3aW4sd2luZG93LT5yb290LGdldFdpbmRvd1RpdGxlKHdpbikpOworICAgICAgfSBicmVhazsKKyAgICAgIGNhc2UgRGVzdHJveU5vdGlmeToKKwlkZWJ1Z2YoIndpbiAlIzAxMGx4IGRlc3Ryb3llZFxuIixldi54ZGVzdHJveXdpbmRvdy53aW5kb3cpOworCWlmIChkZWxfd2luZG93KGV2LnhkZXN0cm95d2luZG93LndpbmRvdykpCisJICBkZWJ1Z2YoImRlc3Ryb3k6IGRpZG4ndCBncmFiIHdpbmRvdyAlIzAxMGx4XG4iLGV2LnhkZXN0cm95d2luZG93LndpbmRvdyk7CisJYnJlYWs7CisKKyAgICAgIC8qIFByb3BlcnR5IGNoYW5nZTogV01fTkFNRSA/ICovCisgICAgICBjYXNlIFByb3BlcnR5Tm90aWZ5OgorCWlmIChldi54cHJvcGVydHkuYXRvbT09WEFfV01fTkFNRSB8fAorCSAgICAobmV0V21OYW1lQXRvbSAhPSBOb25lICYmIGV2Lnhwcm9wZXJ0eS5hdG9tID09IG5ldFdtTmFtZUF0b20pKSB7CisJICBXaW5kb3cgd2luID0gZXYueHByb3BlcnR5LndpbmRvdzsKKwkgIGRlYnVnZigiV01fTkFNRSBwcm9wZXJ0eSBvZiAlIzAxMGx4IGNoYW5nZWRcbiIsd2luKTsKKwkgIHN0cnVjdCB3aW5kb3cgKndpbmRvdzsKKwkgIGlmICghKHdpbmRvdz13aW5kb3dfb2ZfV2luZG93KHdpbikpKSB7CisJICAgIGZwcmludGYoc3RkZXJyLGdldHRleHQoInhicmxhcGk6IGRpZG4ndCBncmFiIHdpbmRvdyAlIzAxMGx4XG4iKSx3aW4pOworCSAgICBhZGRfd2luZG93KHdpbixOb25lLGdldFdpbmRvd1RpdGxlKHdpbikpOworCSAgfSBlbHNlIHsKKwkgICAgaWYgKHdpbmRvdy0+d21fbmFtZSkKKwkgICAgICBpZiAoIVhGcmVlKHdpbmRvdy0+d21fbmFtZSkpIGZhdGFsKGdldHRleHQoIlhGcmVlKHdtX25hbWUpIGZvciBjaGFuZ2UiKSk7CisJICAgIGlmICgod2luZG93LT53bV9uYW1lPWdldFdpbmRvd1RpdGxlKHdpbikpKSB7CisJICAgICAgaWYgKCFxdWlldCAmJiB3aW49PWN1cldpbmRvdykKKwkJYXBpX3NldE5hbWUod2luZG93LT53bV9uYW1lKTsKKwkgICAgfSBlbHNlIGZwcmludGYoc3RkZXJyLGdldHRleHQoInhicmxhcGk6IHdpbmRvdyAlIzAxMGx4IGNoYW5nZWQgdG8gTlVMTCBuYW1lXG4iKSx3aW4pOworCSAgfQorCX0KKwlicmVhazsKKyAgICAgIGNhc2UgTWFwcGluZ05vdGlmeToKKwlYUmVmcmVzaEtleWJvYXJkTWFwcGluZygmZXYueG1hcHBpbmcpOworCWJyZWFrOworICAgICAgLyogaWdub3JlZCBldmVudHMgKi8KKyAgICAgIGNhc2UgVW5tYXBOb3RpZnk6CisgICAgICBjYXNlIE1hcE5vdGlmeToKKyAgICAgIGNhc2UgTWFwUmVxdWVzdDoKKyAgICAgIGNhc2UgUmVwYXJlbnROb3RpZnk6CisgICAgICBjYXNlIENvbmZpZ3VyZU5vdGlmeToKKyAgICAgIGNhc2UgR3Jhdml0eU5vdGlmeToKKyAgICAgIGNhc2UgQ29uZmlndXJlUmVxdWVzdDoKKyAgICAgIGNhc2UgQ2lyY3VsYXRlTm90aWZ5OgorICAgICAgY2FzZSBDaXJjdWxhdGVSZXF1ZXN0OgorICAgICAgY2FzZSBDbGllbnRNZXNzYWdlOgorCWJyZWFrOworCisgICAgICAvKiAic2hvdWxkbid0IGhhcHBlbiIgZXZlbnRzICovCisgICAgICBkZWZhdWx0OiBmcHJpbnRmKHN0ZGVycixnZXR0ZXh0KCJ4YnJsYXBpOiB1bmhhbmRsZWQgZXZlbnQgdHlwZTogJWRcbiIpLGV2LnR5cGUpOyBicmVhazsKKyAgICAgIH0KKyAgICB9CisgICAgaWYgKGJybGFwaV9mZD49MCkgeworI2lmZGVmIENBTl9TSU1VTEFURV9LRVlfUFJFU1NFUworICAgICBpZiAoaGF2ZVhUZXN0ICYmIEZEX0lTU0VUKGJybGFwaV9mZCwmcmVhZGZkcykpIHsKKyAgICAgIHdoaWxlICgoKHJlcyA9IGJybGFwaV9yZWFkS2V5KDAsICZjb2RlKSk9PTEpKSB7CisJc3dpdGNoIChjb2RlICYgQlJMQVBJX0tFWV9UWVBFX01BU0spIHsKKwkgIGNhc2UgQlJMQVBJX0tFWV9UWVBFX0NNRDoKKwkgICAgc3dpdGNoIChjb2RlICYgQlJMQVBJX0tFWV9DT0RFX01BU0spIHsKKyAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBtb2RpZmllcjsKKworICAgICAgICAgICAgICBjYXNlIEJSTEFQSV9LRVlfQ01EX1NISUZUOgorICAgICAgICAgICAgICAgIG1vZGlmaWVyID0gU2hpZnRNYXNrOworICAgICAgICAgICAgICAgIGdvdG8gZG9Nb2RpZmllcjsKKworICAgICAgICAgICAgICBjYXNlIEJSTEFQSV9LRVlfQ01EX1VQUEVSOgorICAgICAgICAgICAgICAgIG1vZGlmaWVyID0gTG9ja01hc2s7CisgICAgICAgICAgICAgICAgZ290byBkb01vZGlmaWVyOworCisgICAgICAgICAgICAgIGNhc2UgQlJMQVBJX0tFWV9DTURfQ09OVFJPTDoKKyAgICAgICAgICAgICAgICBtb2RpZmllciA9IENvbnRyb2xNYXNrOworICAgICAgICAgICAgICAgIGdvdG8gZG9Nb2RpZmllcjsKKworICAgICAgICAgICAgICBjYXNlIEJSTEFQSV9LRVlfQ01EX01FVEE6CisgICAgICAgICAgICAgICAgbW9kaWZpZXIgPSBNb2QxTWFzazsKKyAgICAgICAgICAgICAgICBnb3RvIGRvTW9kaWZpZXI7CisKKyAgICAgICAgICAgICAgZG9Nb2RpZmllcjoKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKGNvZGUgJiBCUkxBUElfS0VZX0ZMR19UT0dHTEVfTUFTSykgeworICAgICAgICAgICAgICAgICAgY2FzZSAwOgorICAgICAgICAgICAgICAgICAgICBuZXh0X21vZGlmaWVycyBePSBtb2RpZmllcjsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICAgIGNhc2UgQlJMQVBJX0tFWV9GTEdfVE9HR0xFX09OOgorICAgICAgICAgICAgICAgICAgICBuZXh0X21vZGlmaWVycyB8PSBtb2RpZmllcjsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICAgIGNhc2UgQlJMQVBJX0tFWV9GTEdfVE9HR0xFX09GRjoKKyAgICAgICAgICAgICAgICAgICAgbmV4dF9tb2RpZmllcnMgJj0gfm1vZGlmaWVyOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgIGNhc2UgQlJMQVBJX0tFWV9GTEdfVE9HR0xFX09OIHwgQlJMQVBJX0tFWV9GTEdfVE9HR0xFX09GRjoKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIH0KKworCSAgICAgIGRlZmF1bHQ6CisJCWZwcmludGYoc3RkZXJyLCAieGJybGFwaTogJXM6ICUiIEJSTEFQSV9QUkl4S0VZQ09ERSAiXG4iLAorCQkJZ2V0dGV4dCgidW5leHBlY3RlZCBjbWQiKSwgY29kZSk7CisJCWJyZWFrOworCSAgICB9CisJICAgIGJyZWFrOworCSAgY2FzZSBCUkxBUElfS0VZX1RZUEVfU1lNOgorCSAgICBtb2RpZmllcnMgPSAoKGNvZGUgJiBCUkxBUElfS0VZX0ZMQUdTX01BU0spID4+IEJSTEFQSV9LRVlfRkxBR1NfU0hJRlQpICYgMHhGRjsKKwkgICAga2V5c3ltID0gY29kZSAmIEJSTEFQSV9LRVlfQ09ERV9NQVNLOworCSAgICBrZXljb2RlID0gWEtleXN5bVRvS2V5Y29kZShkcHksa2V5c3ltKTsKKwkgICAgcmVtYXBfa2V5Y29kZSA9IC0xOworCSAgICBpZiAoa2V5Y29kZSA9PSBOb1N5bWJvbCkgeworCSAgICAgIGRlYnVnZihnZXR0ZXh0KCJ4YnJsYXBpOiBDb3VsZG4ndCB0cmFuc2xhdGUga2V5c3ltICUwOFggdG8ga2V5Y29kZS5cbiIpLGtleXN5bSk7CisJICAgICAgZ290byBuZWVkUmVtYXA7CisJICAgIH0KKworCSAgICB7CisJICAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCB0cnlUYWJsZVtdID0geworCQkwLAorCQlTaGlmdE1hc2ssCisJCU1vZDJNYXNrLAorCQlNb2QzTWFzaywKKwkJTW9kNE1hc2ssCisJCU1vZDVNYXNrLAorCQlTaGlmdE1hc2t8TW9kMk1hc2ssCisJCVNoaWZ0TWFza3xNb2QzTWFzaywKKwkJU2hpZnRNYXNrfE1vZDRNYXNrLAorCQlTaGlmdE1hc2t8TW9kNU1hc2ssCisJCTAKKwkgICAgICB9OworCSAgICAgIGNvbnN0IHVuc2lnbmVkIGludCAqdHJ5ID0gdHJ5VGFibGU7CisKKwkgICAgICBkbyB7CisJCWlmICh0cnlNb2RpZmllcnMoa2V5Y29kZSwgJm1vZGlmaWVycywgKnRyeSwga2V5c3ltKSkgZ290byBmb3VuZE1vZGlmaWVyczsKKwkgICAgICB9IHdoaWxlICgqKyt0cnkpOworCisJICAgICAgZGVidWdmKGdldHRleHQoInhicmxhcGk6IENvdWxkbid0IGZpbmQgbW9kaWZpZXJzIHRvIGFwcGx5IHRvICVkIGZvciBnZXR0aW5nIGtleXN5bSAlMDhYXG4iKSxrZXljb2RlLGtleXN5bSk7CisJICAgIH0KKworCSAgbmVlZFJlbWFwOgorCSAgICB7CisJICAgICAgLyogVHJ5IHRvZmluZCBhbiB1bmFzc2lnbmVkIGtleWNvZGUgdG8gcmVtYXAgaXQgdGVtcG9yYXJpbHkgdG8gdGhlIHJlcXVlc3RlZCBrZXlzeW0uICovCisJICAgICAgeGtiID0gWGtiR2V0TWFwKGRweSxYa2JLZXlUeXBlc01hc2t8WGtiS2V5U3ltc01hc2ssWGtiVXNlQ29yZUtiZCk7CisJICAgICAgLyogU3RhcnQgZnJvbSBiaWcga2V5Y29kZXMsIHVzdWFsbHkgdW5hc3NpZ25lZC4gKi8KKwkgICAgICBmb3IgKGkgPSB4a2ItPm1heF9rZXlfY29kZTsKKwkJICAgaSA+PSB4a2ItPm1pbl9rZXlfY29kZSAmJiAoWGtiS2V5TnVtR3JvdXBzKHhrYixpKSAhPSAwIHx8IGkgPT0gbGFzdF9yZW1hcF9rZXljb2RlKTsKKwkJICAgaS0tKQorCQk7CisJICAgICAgaWYgKGkgPCB4a2ItPm1pbl9rZXlfY29kZSkgeworCQlmcHJpbnRmKHN0ZGVycixnZXR0ZXh0KCJ4YnJsYXBpOiBDb3VsZG4ndCBmaW5kIGEga2V5Y29kZSB0byByZW1hcCBmb3Igc2ltdWxhdGluZyB1bmJvdW5kIGtleXN5bSAlMDhYXG4iKSxrZXlzeW0pOworCQlnb3RvIGFib3J0UmVtYXA7CisJICAgICAgfQorCSAgICAgIHJlbWFwX2tleWNvZGUgPSBrZXljb2RlID0gaTsKKwkgICAgICBuZXh0X21vZGlmaWVycyA9IG1vZGlmaWVycyA9IDA7CisKKwkgICAgICAvKiBSZW1hcCB0aGlzIGtleWNvZGUuICovCisJICAgICAgY2hhbmdlcy5maXJzdF9rZXlfc3ltID0ga2V5Y29kZTsKKwkgICAgICBjaGFuZ2VzLm51bV9rZXlfc3ltcyA9IDE7CisJICAgICAgaWYgKChzdGF0dXMgPSBYa2JDaGFuZ2VUeXBlc09mS2V5KHhrYixrZXljb2RlLDEsWGtiR3JvdXAxTWFzayxvbmVHcm91cFR5cGUsJmNoYW5nZXMpKSkgeworCQlkZWJ1Z2YoIkVycm9yIHdoaWxlIGNoYW5naW5nIGNsaWVudCBrZXltYXA6ICVkXG4iLCBzdGF0dXMpOworCQlnb3RvIGFib3J0UmVtYXA7CisJICAgICAgfQorCSAgICAgIFhrYktleVN5bUVudHJ5KHhrYixrZXljb2RlLDAsMCkgPSBrZXlzeW07CisJICAgICAgaWYgKCFYa2JDaGFuZ2VNYXAoZHB5LHhrYiwmY2hhbmdlcykpIHsKKwkJZGVidWdmKCJFcnJvciB3aGlsZSBjaGFuZ2luZyBzZXJ2ZXIga2V5bWFwXG4iKTsKKwkJZ290byBhYm9ydFJlbWFwOworCSAgICAgIH0KKwkgICAgICBYa2JGcmVlS2V5Ym9hcmQoeGtiLDAsVHJ1ZSk7CisJICAgICAgZGVidWdmKCJSZW1hcHBlZCBrZXljb2RlICVkIHRvIGtleXN5bSAlMDhYXG4iLGtleWNvZGUsa2V5c3ltKTsKKwkgICAgfQorCisJICBmb3VuZE1vZGlmaWVyczoKKwkgICAgZGVidWdmKCJrZXkgJTA4WDogKCVkLCV4LCV4KVxuIiwga2V5c3ltLCBrZXljb2RlLCBuZXh0X21vZGlmaWVycywgbW9kaWZpZXJzKTsKKwkgICAgbW9kaWZpZXJzIHw9IG5leHRfbW9kaWZpZXJzOworCSAgICBuZXh0X21vZGlmaWVycyA9IDA7CisJICAgIGlmIChtb2RpZmllcnMpCisJICAgICAgWGtiTG9ja01vZGlmaWVycyhkcHksIFhrYlVzZUNvcmVLYmQsIG1vZGlmaWVycywgbW9kaWZpZXJzKTsKKwkgICAgWFRlc3RGYWtlS2V5RXZlbnQoZHB5LGtleWNvZGUsVHJ1ZSwxKTsKKwkgICAgWFRlc3RGYWtlS2V5RXZlbnQoZHB5LGtleWNvZGUsRmFsc2UsMSk7CisJICAgIGlmIChtb2RpZmllcnMpCisJICAgICAgWGtiTG9ja01vZGlmaWVycyhkcHksIFhrYlVzZUNvcmVLYmQsIG1vZGlmaWVycywgMCk7CisKKwkgICAgLyogUmVtb3ZlIHByZXZpb3VzIGtleWNvZGUgbWFwcGluZyAqLworCSAgICBpZiAobGFzdF9yZW1hcF9rZXljb2RlICE9IC0xKSB7CisJICAgICAgLyogTm90ZTogc2luY2UgWDExIGlzIGFzeW5jaHJvbm91cywgd2Ugc2hvdWxkIG5vdCBpbW1lZGlhdGVseQorCSAgICAgICAqIHVubWFwIHRoZSBqdXN0LW1hcHBlZCBrZXljb2RlLCBvdGhlcndpc2Ugd2hlbiB0aGUgY2xpZW50CisJICAgICAgICogZXZlbnR1YWxseSBnZXRzIHRvIHJlYWQgdGhlIG5ldyBYa2Igc3RhdGUgZnJvbSB0aGUgc2VydmVyLAorCSAgICAgICAqIHRoZSBrZXkgbWlnaHQgaGF2ZSBiZWVuIHN5bnRoZXNpemVkIGFuZCB0aGUga2V5Y29kZSB1bm1hcHBlZAorCSAgICAgICAqIGFscmVhZHkuIFdlIGp1c3QgaG9wZSB0aGUgdXNlciBkb2VzIG5vdCB0eXBlIHRvbyBmYXN0IGZvciB0aGUKKwkgICAgICAgKiBhcHBsaWNhdGlvbiB0byBjYXRjaCB1cC4gKi8KKwkgICAgICB4a2IgPSBYa2JHZXRNYXAoZHB5LFhrYktleVR5cGVzTWFza3xYa2JLZXlTeW1zTWFzayxYa2JVc2VDb3JlS2JkKTsKKwkgICAgICBjaGFuZ2VzLmZpcnN0X2tleV9zeW0gPSBsYXN0X3JlbWFwX2tleWNvZGU7CisJICAgICAgY2hhbmdlcy5udW1fa2V5X3N5bXMgPSAxOworCSAgICAgIGlmICgoc3RhdHVzID0gWGtiQ2hhbmdlVHlwZXNPZktleSh4a2IsbGFzdF9yZW1hcF9rZXljb2RlLDAsWGtiR3JvdXAxTWFzayxOVUxMLCZjaGFuZ2VzKSkpIHsKKwkJZGVidWdmKCJPb3BzLCBlcnJvciB3aGlsZSByZXN0b3JpbmcgY2xpZW50IGtleW1hcDogJWRcbiIsIHN0YXR1cyk7CisJICAgICAgfSBlbHNlIHsKKwkJWGtiQ2hhbmdlTWFwKGRweSx4a2IsJmNoYW5nZXMpOworCQlkZWJ1Z2YoInJlc3RvcmVkIGxhc3Qga2V5Y29kZSAlZFxuIiwgbGFzdF9yZW1hcF9rZXljb2RlKTsKKwkgICAgICB9CisJICAgICAgWGtiRnJlZUtleWJvYXJkKHhrYiwwLFRydWUpOworCSAgICB9CisJICAgIFhGbHVzaChkcHkpOworCSAgICBsYXN0X3JlbWFwX2tleWNvZGUgPSByZW1hcF9rZXljb2RlOworCSAgICBicmVhazsKKworCSAgYWJvcnRSZW1hcDoKKwkgICAgWGtiRnJlZUtleWJvYXJkKHhrYiwgMCwgVHJ1ZSk7CisJICAgIHhrYiA9IE5VTEw7CisJICAgIGJyZWFrOworCisJICBkZWZhdWx0OgorCSAgICBmcHJpbnRmKHN0ZGVyciwgInhicmxhcGk6ICVzOiAlIiBCUkxBUElfUFJJeEtFWUNPREUgIlxuIiwKKwkJICAgIGdldHRleHQoInVuZXhwZWN0ZWQgYmxvY2sgdHlwZSIpLCBjb2RlKTsKKwkgICAgbmV4dF9tb2RpZmllcnMgPSAwOworCSAgICBicmVhazsKKwl9CisgICAgICB9CisgICAgICBpZiAocmVzPDApCisJZmF0YWxfYnJsYXBpX2Vycm5vKCJicmxhcGlfcmVhZEtleSIsTlVMTCk7CisgICAgIH0KKyNlbmRpZiAvKiBDQU5fU0lNVUxBVEVfS0VZX1BSRVNTRVMgKi8KKyAgICB9IGVsc2UgeworICAgICAgLyogVHJ5IHRvIHJlY29ubmVjdCAqLworICAgICAgaWYgKHRvYnJsdHR5X2luaXQoYXV0aCxob3N0KSkKKyAgICAgIHsKKwlnZXRWVCgpOworI2lmZGVmIENBTl9TSU1VTEFURV9LRVlfUFJFU1NFUworCWlnbm9yZVNlcnZlcktleXMoKTsKKyNlbmRpZiAvKiBDQU5fU0lNVUxBVEVfS0VZX1BSRVNTRVMgKi8KKwlhcGlfc2V0TGFzdE5hbWUoKTsKKwlhcGlfc2V0TGFzdEZvY3VzKCk7CisgICAgICB9CisgICAgfQorICB9Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIG1haW4KKyAqLworCitzdGF0aWMgdm9pZCB0ZXJtX2hhbmRsZXIoaW50IGZvbykgeworICBhcGlfY2xlYW5FeGl0KCk7CisgIGV4aXQoUFJPR19FWElUX1NVQ0NFU1MpOworfQorCitpbnQKK21haW4gKGludCBhcmdjLCBjaGFyICphcmd2W10pIHsKKyAgeworICAgIGNvbnN0IENvbW1hbmRMaW5lRGVzY3JpcHRvciBkZXNjcmlwdG9yID0geworICAgICAgLm9wdGlvbnMgPSAmcHJvZ3JhbU9wdGlvbnMsCisgICAgICAuYXBwbGljYXRpb25OYW1lID0gInhicmxhcGkiLAorCisgICAgICAudXNhZ2UgPSB7CisgICAgICAgIC5wdXJwb3NlID0gc3RydGV4dCgiQXVnbWVudCBhbiBYIHNlc3Npb24gYnkgc3VwcG9ydGluZyBpbnB1dCB0eXBlZCBvbiB0aGUgYnJhaWxsZSBkZXZpY2UsIHNob3dpbmcgdGhlIHRpdGxlIG9mIHRoZSBmb2N1c2VkIHdpbmRvdyBvbiB0aGUgYnJhaWxsZSBkaXNwbGF5LCBhbmQgc3dpdGNoaW5nIGJyYWlsbGUgZm9jdXMgdG8gaXQuIiksCisgICAgICB9CisgICAgfTsKKworICAgIFBST0NFU1NfT1BUSU9OUyhkZXNjcmlwdG9yLCBhcmdjLCBhcmd2KTsKKyAgfQorCisgIHNpZ25hbChTSUdURVJNLHRlcm1faGFuZGxlcik7CisgIHNpZ25hbChTSUdJTlQsdGVybV9oYW5kbGVyKTsKKyNpZmRlZiBTSUdIVVAKKyAgc2lnbmFsKFNJR0hVUCx0ZXJtX2hhbmRsZXIpOworI2VuZGlmIC8qIFNJR0hVUCAqLworI2lmZGVmIFNJR1FVSVQKKyAgc2lnbmFsKFNJR1FVSVQsdGVybV9oYW5kbGVyKTsKKyNlbmRpZiAvKiBTSUdRVUlUICovCisjaWZkZWYgU0lHUElQRQorICBzaWduYWwoU0lHUElQRSx0ZXJtX2hhbmRsZXIpOworI2VuZGlmIC8qIFNJR1BJUEUgKi8KKworICB0b2JybHR0eV9pbml0KGF1dGgsaG9zdCk7CisKKyAgaWYgKCFub19kYWVtb24pIHsKKyAgICBwaWRfdCBjaGlsZCA9IGZvcmsoKTsKKyAgICBpZiAoY2hpbGQgPT0gLTEpCisgICAgICBmYXRhbF9lcnJubygiZmFpbGVkIHRvIGZvcmsiLCBOVUxMKTsKKworICAgIGlmIChjaGlsZCkKKyAgICAgIGV4aXQoUFJPR19FWElUX1NVQ0NFU1MpOworCisgICAgaWYgKHNldHNpZCgpID09IC0xKQorICAgICAgZmF0YWxfZXJybm8oImZhaWxlZCB0byBjcmVhdGUgYmFja2dyb3VuZCBzZXNzaW9uIiwgTlVMTCk7CisgIH0KKworICB0b1hfZih4RGlzcGxheSk7CisKKyAgcmV0dXJuIFBST0dfRVhJVF9TVUNDRVNTOworfQpkaWZmIC0tZ2l0IGEvUHJvZ3JhbXMveHNlbC5jIGIvUHJvZ3JhbXMveHNlbC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUwOWQ3YjMKLS0tIC9kZXYvbnVsbAorKysgYi9Qcm9ncmFtcy94c2VsLmMKQEAgLTAsMCArMSwxMTggQEAKKy8qCisgKiBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorICogICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDE5LTIwMjMgYnkgU2FtdWVsIFRoaWJhdWx0IDxTYW11ZWwuVGhpYmF1bHRAZW5zLWx5b24ub3JnPgorICoKKyAqIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorICoKKyAqIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyAqLworCisjaW5jbHVkZSAicHJvbG9ndWUuaCIKKworI2luY2x1ZGUgPHN0cmluZy5oPgorCisjaW5jbHVkZSAieHNlbC5oIgorI2luY2x1ZGUgPFgxMS9YYXRvbS5oPgorCisjaWZkZWYgSEFWRV9YMTFfRVhURU5TSU9OU19YRklYRVNfSAorI2luY2x1ZGUgPFgxMS9leHRlbnNpb25zL1hmaXhlcy5oPgorI2Vsc2UgLyogSEFWRV9YMTFfRVhURU5TSU9OU19YRklYRVNfSCAqLworI3dhcm5pbmcgY2xpcGJvYXJkIHRyYWNraW5nIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBidWlsZCAtIGNoZWNrIHRoYXQgbGlieGZpeGVzIGhhcyBiZWVuIGluc3RhbGxlZAorI2VuZGlmIC8qIEhBVkVfWDExX0VYVEVOU0lPTlNfWEZJWEVTX0ggKi8KKworLyogVE9ETzogZ2V0IGluaXRpYWwgY2xpcGJvYXJkIHZhbHVlIG9uIHN0YXJ0dXAgKi8KKwordm9pZCBYU2VsSW5pdChEaXNwbGF5ICpkcHksIFhTZWxEYXRhICpkYXRhKSB7CisgIGRhdGEtPnNlbCA9IFhJbnRlcm5BdG9tKGRweSwgIkNMSVBCT0FSRCIsIEZhbHNlKTsKKyAgZGF0YS0+c2VsUHJvcCA9IFhJbnRlcm5BdG9tKGRweSwgIkJSTFRUWV9DTElQQk9BUkQiLCBGYWxzZSk7CisgIGRhdGEtPmluY3IgPSBYSW50ZXJuQXRvbShkcHksICJJTkNSIiwgRmFsc2UpOworICBkYXRhLT51dGY4ID0gWEludGVybkF0b20oZHB5LCJVVEY4X1NUUklORyIsRmFsc2UpOworICBkYXRhLT50YXJnZXRzQXRvbSA9IFhJbnRlcm5BdG9tKGRweSwiVEFSR0VUUyIsRmFsc2UpOworICBkYXRhLT5zZWxXaW5kb3cgPSBYQ3JlYXRlU2ltcGxlV2luZG93KGRweSwgUm9vdFdpbmRvdyhkcHksIERlZmF1bHRTY3JlZW4oZHB5KSksIC0xMCwgLTEwLCAxLCAxLCAwLCAwLCAwKTsKKworI2lmZGVmIEhBVkVfWDExX0VYVEVOU0lPTlNfWEZJWEVTX0gKKyAgZGF0YS0+aGF2ZVhmaXhlcyA9IFhGaXhlc1F1ZXJ5RXh0ZW5zaW9uKGRweSwgJmRhdGEtPnhmaXhlc0V2ZW50QmFzZSwgJmRhdGEtPnhmaXhlc0Vycm9yQmFzZSk7CisgIGlmIChkYXRhLT5oYXZlWGZpeGVzKSB7CisgICAgWEZpeGVzU2VsZWN0U2VsZWN0aW9uSW5wdXQoZHB5LCBkYXRhLT5zZWxXaW5kb3csIGRhdGEtPnNlbCwgWEZpeGVzU2V0U2VsZWN0aW9uT3duZXJOb3RpZnlNYXNrKTsKKyAgfQorI2VuZGlmIC8qIEhBVkVfWDExX0VYVEVOU0lPTlNfWEZJWEVTX0ggKi8KKworfQorCit2b2lkIFhTZWxTZXQoRGlzcGxheSAqZHB5LCBYU2VsRGF0YSAqZGF0YSkgeworICBYU2V0U2VsZWN0aW9uT3duZXIoZHB5LCBkYXRhLT5zZWwsIGRhdGEtPnNlbFdpbmRvdywgQ3VycmVudFRpbWUpOworICBYRmx1c2goZHB5KTsKK30KKworaW50IFhTZWxQcm9jZXNzKERpc3BsYXkgKmRweSwgWFNlbERhdGEgKmRhdGEsIFhFdmVudCAqZXYsIGNvbnN0IGNoYXIgKmNvbnRlbnQsIFhTZWxVcGRhdGUgdXBkYXRlKSB7CisjaWZkZWYgSEFWRV9YMTFfRVhURU5TSU9OU19YRklYRVNfSAorICBpZiAoZGF0YS0+aGF2ZVhmaXhlcyAmJiBldi0+dHlwZSA9PSBkYXRhLT54Zml4ZXNFdmVudEJhc2UgKyBYRml4ZXNTZWxlY3Rpb25Ob3RpZnkpIHsKKyAgICBYRml4ZXNTZWxlY3Rpb25Ob3RpZnlFdmVudCAqeGZFdmVudCA9IChYRml4ZXNTZWxlY3Rpb25Ob3RpZnlFdmVudCAqKSBldjsKKyAgICBpZiAoeGZFdmVudC0+c3VidHlwZSA9PSBYRml4ZXNTZXRTZWxlY3Rpb25Pd25lck5vdGlmeSAmJgorCXhmRXZlbnQtPnNlbGVjdGlvbiA9PSBkYXRhLT5zZWwgJiYKKwl4ZkV2ZW50LT5vd25lciAhPSBOb25lICYmCisJeGZFdmVudC0+b3duZXIgIT0gZGF0YS0+c2VsV2luZG93KSB7CisgICAgICAvKiBUT0RPOiB1c2UgVEFSR0VUUyB0byBzdXBwb3J0IG5vbi11dGY4IGNsaWVudHMgKi8KKyAgICAgIFhDb252ZXJ0U2VsZWN0aW9uKGRweSwgZGF0YS0+c2VsLCBkYXRhLT51dGY4LCBkYXRhLT5zZWxQcm9wLCBkYXRhLT5zZWxXaW5kb3csIHhmRXZlbnQtPnNlbGVjdGlvbl90aW1lc3RhbXApOworICAgIH0KKyAgICByZXR1cm4gMTsKKyAgfSBlbHNlCisjZW5kaWYgLyogSEFWRV9YMTFfRVhURU5TSU9OU19YRklYRVNfSCAqLworCisgIHN3aXRjaCAoZXYtPnR5cGUpIHsKKyAgICBjYXNlIFNlbGVjdGlvbk5vdGlmeToKKyAgICAgIGlmIChldi0+eHNlbGVjdGlvbi5wcm9wZXJ0eSAhPSBOb25lKSB7CisJQXRvbSB0eXBlOworCWludCBmb3JtYXQ7CisJdW5zaWduZWQgbG9uZyBuaXRlbXMsIHNpemUsIGlnbm9yZTsKKwl1bnNpZ25lZCBjaGFyICpwcm9wX3JldDsKKwlYR2V0V2luZG93UHJvcGVydHkoZHB5LCBkYXRhLT5zZWxXaW5kb3csIGRhdGEtPnNlbFByb3AsIDAsIDAsIEZhbHNlLCBBbnlQcm9wZXJ0eVR5cGUsICZ0eXBlLCAmZm9ybWF0LCAmbml0ZW1zLCAmc2l6ZSwgJnByb3BfcmV0KTsKKwlYRnJlZShwcm9wX3JldCk7CisJaWYgKHR5cGUgPT0gZGF0YS0+aW5jcikgeworCSAgLy8gbGFyZ2UgZGF0YSwgYnV0IElOQ1Igbm90IHN1cHBvcnRlZCB5ZXQKKwl9IGVsc2UgaWYgKHNpemUgIT0gMCkgeworCSAgWEdldFdpbmRvd1Byb3BlcnR5KGRweSwgZGF0YS0+c2VsV2luZG93LCBkYXRhLT5zZWxQcm9wLCAwLCBzaXplLCBGYWxzZSwgQW55UHJvcGVydHlUeXBlLCAmdHlwZSwgJmZvcm1hdCwgJm5pdGVtcywgJmlnbm9yZSwgJnByb3BfcmV0KTsKKworCSAgdXBkYXRlKChjaGFyKikgcHJvcF9yZXQsIHNpemUpOworCisJICBYRnJlZShwcm9wX3JldCk7CisJICBYRGVsZXRlUHJvcGVydHkoZHB5LCBkYXRhLT5zZWxXaW5kb3csIGRhdGEtPnNlbFByb3ApOworCX0KKyAgICAgIH0KKyAgICAgIHJldHVybiAxOworICAgIGNhc2UgU2VsZWN0aW9uQ2xlYXI6CisgICAgICB1cGRhdGUoTlVMTCwgMCk7CisgICAgICByZXR1cm4gMTsKKyAgICBjYXNlIFNlbGVjdGlvblJlcXVlc3Q6IHsKKyAgICAgIFhTZWxlY3Rpb25FdmVudCBzZXY7CisgICAgICBYU2VsZWN0aW9uUmVxdWVzdEV2ZW50ICpzcmV2ID0gKFhTZWxlY3Rpb25SZXF1ZXN0RXZlbnQqKSZldi0+eHNlbGVjdGlvbnJlcXVlc3Q7CisgICAgICBpZiAoY29udGVudCAmJiBzcmV2LT50YXJnZXQgPT0gZGF0YS0+dXRmOCkgeworCVhDaGFuZ2VQcm9wZXJ0eShkcHksIHNyZXYtPnJlcXVlc3Rvciwgc3Jldi0+cHJvcGVydHksIGRhdGEtPnV0ZjgsIDgsIFByb3BNb2RlUmVwbGFjZSwgKHVuc2lnbmVkIGNoYXIqKSBjb250ZW50LCBzdHJsZW4oY29udGVudCkpOworCXNldi5wcm9wZXJ0eSA9IHNyZXYtPnByb3BlcnR5OworICAgICAgfSBlbHNlIGlmIChzcmV2LT50YXJnZXQgPT0gZGF0YS0+dGFyZ2V0c0F0b20pIHsKKwlBdG9tIHRhcmdldHNbXSA9IHsgZGF0YS0+dGFyZ2V0c0F0b20sIGRhdGEtPnV0ZjggfTsKKwlYQ2hhbmdlUHJvcGVydHkoZHB5LCBzcmV2LT5yZXF1ZXN0b3IsIHNyZXYtPnByb3BlcnR5LCBYQV9BVE9NLCAzMiwgUHJvcE1vZGVSZXBsYWNlLCAodW5zaWduZWQgY2hhciopIHRhcmdldHMsIHNpemVvZih0YXJnZXRzKS9zaXplb2YoKnRhcmdldHMpKTsKKwlzZXYucHJvcGVydHkgPSBzcmV2LT5wcm9wZXJ0eTsKKyAgICAgIH0gZWxzZSB7CisJc2V2LnByb3BlcnR5ID0gTm9uZTsKKyAgICAgIH0KKyAgICAgIHNldi50eXBlID0gU2VsZWN0aW9uTm90aWZ5OworICAgICAgc2V2LnJlcXVlc3RvciA9IHNyZXYtPnJlcXVlc3RvcjsKKyAgICAgIHNldi5zZWxlY3Rpb24gPSBzcmV2LT5zZWxlY3Rpb247CisgICAgICBzZXYudGFyZ2V0ID0gc3Jldi0+dGFyZ2V0OworICAgICAgc2V2LnRpbWUgPSBzcmV2LT50aW1lOworICAgICAgWFNlbmRFdmVudChkcHksIHNyZXYtPnJlcXVlc3RvciwgVHJ1ZSwgTm9FdmVudE1hc2ssIChYRXZlbnQgKikgJnNldik7CisgICAgICByZXR1cm4gMTsKKyAgICB9CisgIH0KKyAgcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9SRUFETUUgYi9SRUFETUUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjI2OGFkNAotLS0gL2Rldi9udWxsCisrKyBiL1JFQURNRQpAQCAtMCwwICsxLDMyMSBAQAorQlJMVFRZIGlzIGEgYmFja2dyb3VuZCBwcm9jZXNzIChkYWVtb24pIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIExpbnV4L1VuaXgKK2NvbnNvbGUgKHdoZW4gaW4gdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlCitkaXNwbGF5LgorCitWZXJzaW9uIDYuNiwgSnVsIDIwMjMKKworQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorCitXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisKK0JSTFRUWSBpcyBmcmVlIHNvZnR3YXJlLiBJdCBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisKK0JSTFRUWSBpcyBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK1tMR1BMXSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTAorZm9yIGRldGFpbHMuIFZlcnNpb24gMi4xIChvciBhbnkgbGF0ZXIgdmVyc2lvbikgb2YgdGhlIExHUEwgbWF5IGJlIHVzZWQgd2hlbiAKK3JlZGlzdHJpYnV0aW5nIGFuZC9vciBtb2RpZnlpbmcgdGhpcyBzb2Z0d2FyZS4gVGhpcyBzdGF0ZW1lbnQgYXBwbGllcyB0byBhbGwgCit0aGUgZmlsZXMgY29udGFpbmVkIHdpdGhpbiB0aGlzIGRpcmVjdG9yeSBzdHJ1Y3R1cmUuCisKK1RoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieTogRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPgorCitUaGUgbWVtYmVycyBvZiBUaGUgQlJMVFRZIFRlYW0gYXJlOgorCisgICBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+CisgICBNYXJpbyBMYW5nIDxtbGFuZ0BkZWx5c2lkLm9yZz4KKyAgIE5pY29sYXMgUGl0cmUgPG5pY29AZmx1eG5pYy5uZXQ+CisgICBTdMOpcGhhbmUgRG95b24gPHMuZG95b25AdmlkZW90cm9uLmNhPgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0NvbnRhY3RpbmcgVXMKKz09PT09PT09PT09PT0KKworV2UgcmVjb21tZW5kIHRoYXQgeW91IGNvbnRhY3QgdXMgdmlhIEJSTFRUWSdzIG1haWxpbmcgbGlzdC4gWW91IGNhbiBwb3N0IHRvIHRoZQorbGlzdCBieSBzZW5kaW5nIGFuIGUtbWFpbCB0byA8QlJMVFRZQGJybHR0eS5hcHA+LiBUbyBzdWJzY3JpYmUsIGdvIHRvIHRoZSBsaXN0J3MKK0luZm9ybWF0aW9uIFBhZ2UgYXQgW2h0dHA6Ly9icmx0dHkuYXBwL21haWxtYW4vbGlzdGluZm8vYnJsdHR5XS4KKworSWYgeW91IGhhdmUgYW55IGludGVyZXN0IGluIEJSTFRUWSwgcGxlYXNlIGRyb3AgdXMgYSBub3RlLiBXZSdyZSBpbnRlcmVzdGVkIGluCitrbm93aW5nIHdobyBCUkxUVFkncyB1c2VycyBhcmUuIEV2ZW4gaWYgYWxsIGdvZXMgd2VsbCBhbmQgeW91IGhhdmUgbm8gcHJvYmxlbXMKK3dpdGggdGhpcyBwYWNrYWdlLCBwbGVhc2UgbGV0IHVzIGtub3cgeW91J3JlIHRoZXJlLCBhbmQgdGVsbCB1cyB3aGljaCBicmFuZCBvZgorZGlzcGxheSB5b3UgdXNlLiBJZiB5b3UgaGF2ZSBwcm9ibGVtcywgd2UnbGwgYmUgaGFwcHkgdG8gaGVscC4gQWxsIHlvdXIKK2NvbW1lbnRzLCBzdWdnZXN0aW9ucywgY3JpdGljaXNtcywgcXVlc3Rpb25zLCBhbmQgY29udHJpYnV0aW9ucyBhcmUgd2VsY29tZSEKKworV2Ugb2ZmZXIgYSBzcGVjaWFsIGludml0YXRpb24gdG8gdGhlIGRldmVsb3BlcnMgb2YgYnJhaWxsZSBkaXNwbGF5cy4gSXQncyBvdXIKK2dvYWwgdG8gc3VwcG9ydCBhcyBtYW55IG1vZGVscyBhcyBwb3NzaWJsZSB3aXRoaW4gdGhlIExpbnV4L1VuaXggZW52aXJvbm1lbnQuCitXaGlsZSB3ZSBhbHdheXMgZG8gYXMgbXVjaCBhcyB3ZSBjYW4gdG93YXJkIHRoaXMgZW5kLCB3ZSdkIGJlIGV2ZW4gbW9yZQorZWZmZWN0aXZlIHdpdGggeW91ciBoZWxwLiBUaGUgbW9zdCBpbXBvcnRhbnQgdGhpbmcgd2UgbmVlZCBpcyB0aGUgZGV0YWlscworcmVnYXJkaW5nIHRoZSBjb21tdW5pY2F0aW9uIHByb3RvY29sKHMpIG9mIHlvdXIgYnJhaWxsZSBkaXNwbGF5KHMpLiBJZiB5b3UKK3ByZWZlciB0byBjb250YWN0IHVzIHByaXZhdGVseSBmb3IgdGhpcyBzb3J0IG9mIHRoaW5nIHRoZW4gd2UgaW52aXRlIHlvdSB0bworc2VuZCBlLW1haWwgdG8gYW55IG1lbWJlcihzKSBvZiBUaGUgQlJMVFRZIFRlYW0gKHNlZSBhYm92ZSkuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworSW50cm9kdWN0aW9uIGZvciBUaG9zZSBOZXcgdG8gUmVmcmVzaGFibGUgQnJhaWxsZQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitUaGVyZSBhcmUgdHdvIGNvbW1vbiB3YXlzIGluIHdoaWNoIGJsaW5kIHBlb3BsZSBhY2Nlc3MgY29tcHV0ZXJzLiAKKworVGhlIGZpcnN0LCBhbmQgbW9yZSB3aWRlbHkga25vd24sIGlzIHN5bnRoZXNpemVkIHNwZWVjaC4gV2hpbGUgaGF2aW5nIG1hbnkKK2FkdmFudGFnZXMsIGUuZy4gc3BlZWQgZm9yIHJlYWRpbmcgcGxhaW4gdGV4dCwgc3BlZWNoIGRvZXMgaGF2ZSBpdHMgZHJhd2JhY2tzLgorU3BlZWNoIG91dHB1dCBnZW5lcmFsbHkgZ2l2ZXMgbGl0dGxlIGluZm9ybWF0aW9uIGFib3V0IGZvcm1hdHRpbmcsIG1ha2luZwordGFibGVzLCBzcHJlYWRzaGVldHMsIGV0Yy4gZGlmZmljdWx0IHRvIHVzZS4gSXQgY2FuIGFsc28gYmUgZGlmZmljdWx0IHRvIHVzZQorc3BlZWNoIG91dHB1dCB3aXRoIHBhcnRpY3VsYXJseSB0ZWNobmljYWwgbWF0ZXJpYWwgY29udGFpbmluZyBsb3RzIG9mIHN5bWJvbHMKKyh0aG91Z2ggbWFueSBkZXRlcm1pbmVkIHBlb3BsZSBkbyB1c2UgaXQgZm9yIHN1Y2ggdGhpbmdzKS4KKworVGhlIG90aGVyIHNvbHV0aW9uLCB3aGljaCBhdHRlbXB0cyB0byBhbnN3ZXIgc29tZSBvZiB0aGVzZSBwcm9ibGVtcywgaXMgQnJhaWxsZQorb3V0cHV0LiBBIHNvZnQgKG9yIHJlZnJlc2hhYmxlKSBCcmFpbGxlIGRpc3BsYXkgdHlwaWNhbGx5IGNvbnNpc3RzIG9mIGEgc2luZ2xlCitsaW5lIG9mIDIwLCA0MCBvciA4MCBjaGFyYWN0ZXJzLCBlYWNoIG1hZGUgdXAgb2YgYSBtYXRyaXggb2YgZm91ciByb3dzIGFuZCB0d28KK2NvbHVtbnMgb2YgZG90cy4gRWFjaCBkb3QgaXMgaW5kaXZpZHVhbGx5IGRyaXZlbiBieSBhIHNlcGFyYXRlIG1vdG9yLCBtYWtpbmcKK3RoZSB3aG9sZSBhc3NlbWJseSBleHRyZW1lbHkgZXhwZW5zaXZlLgorCitBIHNvZnQgQnJhaWxsZSBkaXNwbGF5IGlzIGNvbm5lY3RlZCB0byB0aGUgUEMgYnkgYSBzZXJpYWwsIHBhcmFsbGVsLCBvciBVU0IKK3BvcnQuIFNvZnR3YXJlIG9uIHRoZSBQQyBkcml2ZXMgdGhlIGRpc3BsYXksIHJlcHJvZHVjaW5nIGEgcmVjdGFuZ2xlIG9mIHRoZQorc2NyZWVuIGltYWdlICh3aGljaCB3ZSBzaGFsbCBjYWxsIHRoZSB3aW5kb3cpIGluIEJyYWlsbGUuIEJ1dHRvbnMgb24gdGhlCitCcmFpbGxlIGRpc3BsYXkgaXRzZWxmIGFyZSB1c2VkIHRvIHNlbmQgc2lnbmFscyBiYWNrIHRvIHRoZSBzb2Z0d2FyZSwKK2luc3RydWN0aW5nIGl0IHRvIG1vdmUgdGhlIHdpbmRvdyBhcm91bmQgdGhlIHNjcmVlbiwgb3IgdG8gcGVyZm9ybSBzb21lIG90aGVyCitzcGVjaWFsaXplZCBmdW5jdGlvbi4KKworVXNpbmcgYSBzb2Z0IEJyYWlsbGUgZGlzcGxheSB3aXRoIGEgNDAtIG9yIDgwLWNoYXJhY3RlciBsaW5lLCBpdCBpcyBxdWl0ZSBlYXN5Citmb3IgYSBibGluZCB1c2VyIHRvIGFwcHJlY2lhdGUgdGhlIGZvcm1hdCBvZiBpbmZvcm1hdGlvbiBvbiB0aGUgc2NyZWVuLCBhcyB3ZWxsCithcyB0byByZWFkIGFuZCBlZGl0IG9uLWxpbmUgQnJhaWxsZSBkb2N1bWVudHMgKGEgY29uY2VwdCBub3Qgd2lkZWx5IGVub3VnaAordXRpbGl6ZWQpLgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0ludHJvZHVjdGlvbiB0byBCUkxUVFkKKz09PT09PT09PT09PT09PT09PT09PT0KKworV2hpbGUgc29mdCBCcmFpbGxlIGRpc3BsYXlzIGhhdmUgYmVlbiB1c2VkIGZvciBtYW55IHllYXJzIHVuZGVyIE1TLURPUywgYW5kIGFyZQorbm93IGJlaW5nIHVzZWQgdW5kZXIgV2luZG93cywgaXQgc2VlbXMgdGhhdCB0aGV5IGhhdmVuJ3QgYmVlbiB1c2VkIG9uIFVuaXgKK2NvbnNvbGVzIHRvbyBtdWNoLiBUaGlzIGNvdWxkIHdlbGwgYmUgYmVjYXVzZSBibGluZCBwZW9wbGUgaGF2ZSBiZWVuIGFibGUgdG8KK2FjY2VzcyBVbml4IHN5c3RlbXMgdGhyb3VnaCBhY2Nlc3NpYmxlIHRlcm1pbmFscy4gV2l0aCB0aGUgYWR2ZW50IG9mIFBDLWJhc2VkCitVbml4IHN5c3RlbXMsIGUuZy4gTGludXgsIHRoZSBuZWVkIGhhcyBiZWNvbWUgZXZpZGVudC4KKworQlJMVFRZIGF0dGVtcHRzIHRvIGZpbGwgdGhpcyBnYXAuIEl0IHJ1bnMgYXMgYSBiYWNrZ3JvdW5kIHByb2Nlc3MsIHBvc3NpYmx5CitzdGFydGVkIGF0IGJvb3QtdGltZSwgYW5kIGFsbG93cyBhIHJlZnJlc2hhYmxlIEJyYWlsbGUgdXNlciB0byBhY2Nlc3MgdGV4dCBtb2RlCithcHBsaWNhdGlvbnMgZGlyZWN0bHkgZnJvbSBhIFVuaXggY29uc29sZS4gU2luY2UgQlJMVFRZIHJ1bnMgYXMgYSBiYWNrZ3JvdW5kCitwcm9jZXNzLCBpdCBnaXZlcyB0aGUgdXNlciBjb21wbGV0ZSBmcmVlZG9tIG9mIGNob2ljZSByZWdhcmRpbmcgYXBwbGljYXRpb25zCithbmQgZGV2ZWxvcG1lbnQgdG9vbHMuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworRmVhdHVyZXMKKz09PT09PT09CisKKyogIEZ1bGwgaW1wbGVtZW50YXRpb24gb2YgdGhlIHVzdWFsIHNjcmVlbiByZXZpZXcgZmFjaWxpdGllcy4KKyogIENob2ljZSBiZXR3ZWVuIGBibG9jaycsIGB1bmRlcmxpbmUnLCBvciBgbm8nIGN1cnNvci4KKyogIE9wdGlvbmFsIGB1bmRlcmxpbmUnIHRvIGluZGljYXRlIHNwZWNpYWxseSBoaWdobGlnaHRlZCB0ZXh0LgorKiAgT3B0aW9uYWwgdXNlIG9mIGBibGlua2luZycgKHJhdGVzIGluZGl2aWR1YWxseSBzZXR0YWJsZSkgZm9yIGN1cnNvciwgc3BlY2lhbCBoaWdobGlnaHRpbmcgdW5kZXJsaW5lLAorICAgYW5kL29yIGNhcGl0YWwgbGV0dGVycy4KKyogIFNjcmVlbiBmcmVlemluZyBmb3IgbGVpc3VyZWx5IHJldmlldy4KKyogIGBJbnRlbGxpZ2VudCcgY3Vyc29yIHJvdXRpbmcsIGFsbG93aW5nIGVhc3kgZmV0Y2hpbmcgb2YgY3Vyc29yIHdpdGhpbiB0ZXh0CisgICBlZGl0b3JzLCB3ZWIgYnJvd3NlcnMsIGV0Yy4sIHdpdGhvdXQgbW92aW5nIG9uZXMgaGFuZHMgZnJvbSB0aGUgQnJhaWxsZQorICAgZGlzcGxheS4KKyogIEEgY3V0ICYgcGFzdGUgZnVuY3Rpb24gd2hpY2ggaXMgcGFydGljdWxhcmx5IHVzZWZ1bCBmb3IgY29weWluZyBsb25nIGZpbGUKKyAgIG5hbWVzLCBjb3B5aW5nIHRleHQgYmV0d2VlbiB2aXJ0dWFsIHRlcm1pbmFscywgZW50ZXJpbmcgY29tcGxpY2F0ZWQKKyAgIGNvbW1hbmRzLCBldGMuCisqICBUYWJsZSBkcml2ZW4gaW4tbGluZSBjb250cmFjdGVkIGJyYWlsbGUgKEVuZ2xpc2ggYW5kIEZyZW5jaCBwcm92aWRlZCkuCisqICBTdXBwb3J0IGZvciBtdWx0aXBsZSBicmFpbGxlIGNvZGVzLgorKiAgQWJpbGl0eSB0byBpZGVudGlmeSBhbiB1bmtub3duIGNoYXJhY3Rlci4KKyogIEFiaWxpdHkgdG8gaW5zcGVjdCBjaGFyYWN0ZXIgaGlnaGxpZ2h0aW5nLgorKiAgQW4gb24tbGluZSBoZWxwIGZhY2lsaXR5LgorKiAgQSBwcmVmZXJlbmNlcyBtZW51LgorKiAgQmFzaWMgc3BlZWNoIHN1cHBvcnQuCisqICBNb2R1bGFyIGRlc2lnbiBhbGxvd2luZyByZWxhdGl2ZWx5IGVhc3kgYWRkaXRpb24gb2YgZHJpdmVycyBmb3Igb3RoZXIKKyAgIEJyYWlsbGUgZGlzcGxheXMsIG9yIGV2ZW4gKGhvcGVmdWxseSkgcG9ydGluZyB0byBvdGhlciBVbml4LWxpa2UgcGxhdGZvcm1zLgorKiAgQW4gYXBwbGljYXRpb24gcHJvZ3JhbW1pbmcgaW50ZXJmYWNlLgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0N1cnJlbnRseSBTdXBwb3J0ZWQgSGFyZHdhcmUKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworQlJMVFRZIGhhcyBiZWVuIHRlc3RlZCBvbjoKKworKiAgYSB2YXJpZXR5IG9mIEludGVsLWJhc2VkIFBDcyAoZGVza3RvcHMsIHNlcnZlcnMsIGxhcHRvcHMsIFBEQXMpIAorKiAgYW4gQWxwaGEgd29ya3N0YXRpb24KKyogIGEgU3Ryb25nQVJNIGJhc2VkIE5ldHdpbmRlcgorKiAgc2V2ZXJhbCBMaW51eCBrZXJuZWxzICgxLjIuMTMgYW5kIGJleW9uZCkKKyogIGFsbCBtYWpvciBMaW51eCBkaXN0cmlidXRpb25zIChpbmNsdWRpbmcgUmVkIEhhdCwgRmVkb3JhLCBEZWJpYW4sIFVidW50dSwgU2xhY2t3YXJlLCBTdVNFKQorKiAgU29sYXJpcy9TcGFyYyAocmVsZWFzZSA3IGFuZCBiZXlvbmQpCisqICBTb2xhcmlzL0ludGVsIChyZWxlYXNlIDkgYW5kIGJleW9uZCkKKyogIE9wZW5CU0QvSW50ZWwgKHJlbGVhc2UgMy40IGFuZCBiZXlvbmQpCisqICBGcmVlQlNEL0ludGVsIChyZWxlYXNlIDUuMSBhbmQgYmV5b25kKQorKiAgTmV0QlNEL0ludGVsIChyZWxlYXNlIDEuNiBhbmQgYmV5b25kKQorKiAgV2luZG93cyA5NS85OC9YUAorKiAgTVMtRE9TCisqICBNYWMgT1MgWCAoaW4gY29uanVuY3Rpb24gd2l0aCBhIHN1cHBsaWVkIHBhdGNoIGZvciB0aGUgc2NyZWVuIHByb2dyYW0pCisqICBBbmRyb2lkL0FSTSAoNC4wIGFuZCBiZXlvbmQpCisKK1RoZSBmb2xsb3dpbmcgYnJhaWxsZSBkaXNwbGF5cyBhcmUgc3VwcG9ydGVkOgorCistICBBbGJhdHJvc3MgWzQ2LzgwXQorLSAgQWx2YSBbQUJUKDNubiksIERlbHBoaSg0bm4pLCBTYXRlbGxpdGUoNW5uKSwgQnJhaWxsZSBTeXN0ZW0gNDAsCisgICAgICAgICBCcmFpbGxlIENvbnRyb2xsZXIgNjQwLzY4MCwgRWFzeSBMaW5rIDEyXQorLSAgQmF1bSBbQnJhaWxsZUNvbm5lY3QgMTIvMjQvMzIvNDAvNjQvODAsIEJyYWlsbGlhbnQgMjQvMzIvNDAvNjQvODAsIENvbm55IDEyLAorICAgICAgICAgRE04MCBQbHVzLCBFY29WYXJpbyAyNC8zMi80MC82NC84MCwgSW5rYSwgTkxTIGVSZWFkZXIgWm9vbWF4LAorICAgICAgICAgT3JiaXQgUmVhZGVyIDIwLzQwLCBQb2NrZXRWYXJpbyAyNCwgUHJvbnRvISBWMyAxOC80MCwgUHJvbnRvISBWNCAxOC80MCwKKyAgICAgICAgIFJCVCA0MC84MCwgUmVmcmVzaGFicmFpbGxlIDE4LCBTdXBlclZhcmlvIDMyLzQwLzY0LzgwLCBWYXJpbyA0MC84MCwKKyAgICAgICAgIFZhcmlvQ29ubmVjdCAxMi8yNC8zMi80MC82NC84MCwgVmFyaW9Qcm8gNDAvNjQvODAsIFZhcmlvVWx0cmEgMjAvMzIvNDBdCistICBCcmFpbENvbW0gW0lJSV0KKy0gIEJyYWlsbGVMaXRlIFsxOC80MC9NMjAvTTQwXQorLSAgQnJhaWxsZU1lbW8gW1BvY2tldCAoMTYpLCBTbWFydCAoMTYpLCAzMiwgNDBdCistICBCcmFpbGxlTm90ZSBbMTgvMzIsIEFwZXhdCistICBCcmF1ZGkKKy0gIEJybEFQSQorLSAgQ2FudXRlIFszNjAgKDQweDkpXQorLSAgQ2VicmEgWzIwLzQwLzYwLzgwLzEwMC8xMjAvMTQwXQorLSAgQ29tYmlCcmFpbGxlIFsyNS80NS84NV0KKy0gIERvdFBhZAorLSAgRWNvQnJhaWxsZSBbMjAvNDAvODBdCistICBFdXJvQnJhaWxsZSBbQXplckJyYWlsbGUsIENsaW8sIEVzeXMsIElyaXMsIE5vdGVCcmFpbGxlLCBTY3JpYmFdCistICBGcmFua0F1ZGlvZGF0YSBbQjJLODRdCistICBGcmVlZG9tU2NpZW50aWZpYyBbRm9jdXMgMSA0NC83MC84NCwgRm9jdXMgMiA0MC84MCwgRm9jdXMgQmx1ZSAxNC80MC84MCwKKyAgICAgICAgICAgICAgICAgICAgICBQQUMgTWF0ZSAyMC80MF0KKy0gIEhhbmR5VGVjaCBbTW9kdWxhciAyMC80MC84MCwgTW9kdWxhciBFdm9sdXRpb24gNjQvODgsIE1vZHVsYXIgQ29ubmVjdCA4OCwKKyAgICAgICAgICAgICAgQWN0aXZlIEJyYWlsbGUsIEFjdGl2ZSBCcmFpbGxlIFMsIEFjdGl2ZSBTdGFyIDQwLAorICAgICAgICAgICAgICBBY3RpbGlubywgQWN0aXZhdG9yLAorICAgICAgICAgICAgICBCYXNpYyBCcmFpbGxlIDE2LzIwLzMyLzQwLzQ4LzY0LzgwLCBCcmFpbGxpbm8sCisgICAgICAgICAgICAgIEJyYWlsbGUgV2F2ZSwgRWFzeSBCcmFpbGxlLCBCcmFpbGxlIFN0YXIgNDAvODAsCisgICAgICAgICAgICAgIENvbm5lY3QgQnJhaWxsZSA0MCwgQm9va3dvcm1dCistICBIZWRvIFtQcm9maUxpbmUsIE1vYmlsTGluZV0KKy0gIEhJTVMgW0JyYWlsbGUgU2Vuc2UsIFN5bmNCcmFpbGxlLCBCcmFpbGxlIEVkZ2UsCisgICAgICAgICBTbWFydCBCZWV0bGUsIFFCcmFpbGxlWExdCistICBIdW1hbldhcmUgW0JyYWlsbGlhbnQgQkkgMTQvMzIvNDAsIEJyYWlsbGlhbnQgQkkgMjBYLzQwWCwKKyAgICAgICAgICAgICAgQnJhaWxsaWFudCBCIDgwLCBCcmFpbGxlTm90ZSBUb3VjaCwgQnJhaWxsZU9uZSwKKyAgICAgICAgICAgICAgQVBIIENoYW1lbGVvbiAyMCwgQVBIIE1hbnRpcyBRNDAsIE5MUyBlUmVhZGVyXQorLSAgSW5jZXB0b3IgW0JyYWlsbGVNZSAoMjApXQorLSAgSXJpcworLSAgTGliYnJhaWxsZQorLSAgTG9nVGV4dCBbMzJdCistICBNRFYgW01CMjA4LCBNQjI0OCwgTUI0MDhMLCBNQjQwOEwrLCBMaWxsaSBCbHVdCistICBNZXRlYyBbQkQtNDBdCistICBNaW5pQnJhaWxsZSBbMjBdCistICBNdWx0aUJyYWlsbGUgW01CMTI1Q1IsIE1CMTQ1Q1IsIE1CMTg1Q1JdCistICBOaW5lUG9pbnQKKy0gIFBhcGVubWVpZXIgW0NvbXBhY3QgNDg2LCBDb21wYWN0L1RpbnksIElCIDgwIENSIFNvZnQsIDJEIExpdGUgKHBsdXMpLAorICAgICAgICAgICAgICAgMkQgU2NyZWVuIFNvZnQsIEVMIDgwLCBFTCAyRCA0MC82Ni84MCwgRUwgNDAvNjYvNzAvODAgUywKKyAgICAgICAgICAgICAgIEVMIDQwLzYwLzgwIEMsIEVMIDJEIDgwIFMsIEVMIDQwIFAsIEVMIDgwIElJLCBFbGJhIDIwLzMyLAorICAgICAgICAgICAgICAgVHJpbyA0MC9FbGJhMjAvRWxiYTMyLCBMaXZlIDIwLzQwXQorLSAgUGVnYXN1cyBbMjAvMjcvNDAvODBdCistICBTZWlrYSBbMy80LzUgKDQwKSwgODAsIE1pbmkgKDE2KV0KKy0gIFRlY2huaUJyYWlsbGUKKy0gIFRTSSBbTmF2aWdhdG9yIDIwLzQwLzgwLCBQb3dlckJyYWlsbGUgNDAvNjUvODBdCistICBWaWRlb0JyYWlsbGUgWzQwXQorLSAgVmlzaW9CcmFpbGxlIFsyMC80MF0KKy0gIFZveWFnZXIgWzQ0LzcwLCBQYXJ0MjMyIChzZXJpYWwgYWRhcHRlciksIEJyYWlsbGVQZW4vRWFzeUxpbmtdCisKK1RoZSBmb2xsb3dpbmcgc3BlZWNoIHN5bnRoZXNpemVycyBhcmUgc3VwcG9ydGVkOgorCistICBBbHZhIFtEZWxwaGkoNG5uKV0KKy0gIEFuZHJvaWQgW3RleHQgdG8gc3BlZWNoIGVuZ2luZV0KKy0gIEJyYWlsbGVMaXRlCistICBDb21iaUJyYWlsbGUKKy0gIGVTcGVhayBbdGV4dCB0byBzcGVlY2ggZW5naW5lXQorLSAgZVNwZWFrLU5HIFt0ZXh0IHRvIHNwZWVjaCBlbmdpbmVdCistICBFeHRlcm5hbFNwZWVjaCBbcnVucyAvdXNyL2xvY2FsL2Jpbi9leHRlcm5hbHNwZWVjaF0KKy0gIEZlc3RpdmFsIFt0ZXh0IHRvIHNwZWVjaCBlbmdpbmVdCistICBGZXN0aXZhbExpdGUgW3RleHQgdG8gc3BlZWNoIGVuZ2luZV0KKy0gIEdlbmVyaWNTYXkgW3BpcGVzIHRvIC91c3IvbG9jYWwvYmluL3NheV0KKy0gIE1pa3JvcHVoZSBbdGV4dCB0byBzcGVlY2ggZW5naW5lXQorLSAgU3BlZWNoRGlzcGF0Y2hlciBbdGV4dCB0byBzcGVlY2ggc2VydmVyXQorLSAgU3dpZnQgW3RleHQgdG8gc3BlZWNoIGVuZ2luZV0KKy0gIFRoZXRhIFt0ZXh0IHRvIHNwZWVjaCBlbmdpbmVdCistICBWaWFWb2ljZSBbdGV4dCB0byBzcGVlY2ggZW5naW5lXQorCitUaGUgYWJpbGl0eSB0byBhZGQgYSBuZXcgQnJhaWxsZSBkaXNwbGF5IGRlcGVuZHMgb24gdGhlIGxldmVsIG9mIGNvb3BlcmF0aW9uCitmcm9tIGl0cyBtYW51ZmFjdHVyZXIgaW4gcHJvdmlkaW5nIHByb2dyYW1taW5nIGluZm9ybWF0aW9uLgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0xheW91dCBvZiB0aGUgQXJjaGl2ZQorPT09PT09PT09PT09PT09PT09PT09CisKK0JSTFRUWSBpcyBkaXN0cmlidXRlZCBhcyBhIHNpbmdsZSBHTlUgY29tcHJlc3NlZCB0YXIgZmlsZSBuYW1lZAorCisgICBicmx0dHktPHJlbGVhc2U+LnRhci5negorCit3aGVyZSBgPHJlbGVhc2U+JyBpcyB0aGUgcmVsZWFzZSBudW1iZXIuIFdoZW4gdGhlIGFyY2hpdmUgaXMgdW5wYWNrZWQsIHRoZXJlCitzaG91bGQgYmUgYSBzdWJkaXJlY3RvcnkgY2FsbGVkIGBEb2N1bWVudHMnIHdoaWNoIGNvbnRhaW5zIGFsbCBvZiB0aGUgZ2VuZXJhbCBCUkxUVFkKK2RvY3VtZW50YXRpb24gaW5jbHVkaW5nIHRoZSBtYW51YWwgaW4gdmFyaW91cyBmb3JtYXRzLCBhbmQgdGhlIGxpc3Qgb2YKK0ZyZXF1ZW50bHkgQXNrZWQgUXVlc3Rpb25zIChGQVEpLgorCitUaGUgc291cmNlIGZpbGVzIGZvciB0aGUgbWFpbiwgZGV2aWNlLWluZGVwZW5kZW50IGNvcmUgb2YgQlJMVFRZIGFyZSBpbiB0aGUKK3RvcC1sZXZlbCBkaXJlY3RvcnkuIFRoZXJlIGlzIG9uZSBzdWJkaXJlY3RvcnkgZm9yIGVhY2ggQnJhaWxsZSBkaXNwbGF5IHR5cGUsCitjb250YWluaW5nIGRpc3BsYXktc3BlY2lmaWMgc291cmNlIGZpbGVzIGFuZCBkb2N1bWVudGF0aW9uLgorCitGaW5hbGx5LCBzb21lIEJyYWlsbGUgZGVmaW5pdGlvbiB0YWJsZXMsIGFsb25nIHdpdGggdG9vbHMgdG8gbWFuaXB1bGF0ZSB0aGVtLAorYXJlIGF2YWlsYWJsZSBpbiB0aGUgYFRhYmxlcycgc3ViZGlyZWN0b3J5LgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0J1aWxkaW5nIHRoZSBQYWNrYWdlCis9PT09PT09PT09PT09PT09PT09PQorCitCdWlsZGluZyBCUkxUVFkgaXMgYSBmb3VyIHN0ZXAgcHJvY2Vzcy4gVGhlIGZpcnN0IGlzIHRvIHJ1biBgLi9hdXRvZ2VuYCB0bworc2V0dXAgeW91ciBidWlsZCBlbnZpcm9tZW50IGZvciB0aGUgZmlyc3QgdGltZS4gWW91IHR5cGljYWxseSBvbmx5IG5lZWQgdG8gZG8KK3RoaXMgb25jZS4gVGhlIHNlY29uZCBpcyB0byBydW4gYC4vY29uZmlndXJlJyB0byBwcmVwYXJlIHRoZSBidWlsZCBlbnZpcm9ubWVudAorZm9yIHlvdXIgb3BlcmF0aW5nIHN5c3RlbSwgYW5kIHRvIGN1c3RvbWl6ZSBpdCBmb3IgeW91ciBwYXJ0aWN1bGFyIHJlcXVpcmVtZW50LgorVGhlIHRoaXJkIGlzIHRvIHJ1biBgbWFrZScgdG8gY29tcGlsZSBhbmQgbGluayBCUkxUVFkgYW5kIGl0cyBkcml2ZXJzLiBUaGUKK2ZvdXJ0aCBpcyB0byBydW4gYG1ha2UgaW5zdGFsbCcgdG8gY29weSBhbGwgdGhlIG5lZWRlZCBmaWxlcyBpbnRvIHRoZWlyIHByb3BlcgorbG9jYXRpb25zLgorCisgICAgLi9hdXRvZ2VuCisgICAgLi9jb25maWd1cmUKKyAgICBtYWtlCisgICAgbWFrZSBpbnN0YWxsCisKK0JlZm9yZSBjb25maWd1cmluZyBCUkxUVFksIHlvdSBtYXkgd2lzaCB0byBjaGVjayBvdXQgd2hhdCBjaG9pY2VzIHlvdSBoYXZlCityZWdhcmRpbmcgaXRzIGN1c3RvbWl6YXRpb24uIEludm9raW5nIGAuL2NvbmZpZ3VyZSAtLWhlbHAnIHdpbGwgc2hvdyB5b3Ugd2hhdAorb3B0aW9ucyBhcmUgYXZhaWxhYmxlLiBBbHRob3VnaCB0aGUgZGVmYXVsdHMgYXJlIGFkZXF1YXRlIGZvciBtb3N0IGVudmlyb25tZW50cworYW5kIHJlcXVpcmVtZW50cywgYW5kIGFsdGhvdWdoIG1hbnkgdGhpbmdzIGNhbiBiZSBzcGVjaWZpZWQgYXQgcnVuLXRpbWUsIHRoZXJlCithcmUgYSBjb3VwbGUgb2YgY29uZmlndXJhdGlvbiBvcHRpb25zIHdvcnRoIG1lbnRpb25pbmcgaGVyZS4gVG8gYnVpbGQgQlJMVFRZCit3aXRoIGEgc3BlY2lmaWMgZHJpdmVyIGJ1aWx0LWluICh1c3VhbGx5IG9ubHkgbmVjZXNzYXJ5IHdoZW4gcHJlcGFyaW5nIEJSTFRUWQorZm9yIHVzZSBvbiBhIGJvb3QgZGlzayksIHVzZSB0aGUgYC0td2l0aC1icmFpbGxlLWRyaXZlcj0nIG9wdGlvbi4gVG8gc2V0IHRoZQorZGVmYXVsdCBkZXZpY2UgdG8gdGhlIG9uZSB3aGljaCB5b3VyIGRpc3BsYXkgaXMgdXN1YWxseSBjb25uZWN0ZWQgdG8sIHVzZSB0aGUKK2AtLXdpdGgtYnJhaWxsZS1kZXZpY2U9JyBvcHRpb24uCisKK0ZvciBpbmZvcm1hdGlvbiBzcGVjaWZpYyB0byBhIHBhcnRpY3VsYXIgZHJpdmVyLCBwbGVhc2Ugc2VlIHRoZSBgUkVBRE1FJyBmaWxlCitpbiB0aGUgY29ycmVzcG9uZGluZyBzdWJkaXJlY3RvcnkuIEZpbmFsbHksIHNlZSB0aGUgYERvY3VtZW50cycgc3ViZGlyZWN0b3J5Citmb3IgdGhlIG1hbnVhbCBhcyB3ZWxsIGFzIGEgZmV3IG90aGVyIGludGVyZXN0aW5nIGxpdGVyYXJ5IGNyZWF0aW9ucy4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitSZWRIYXQgUGFja2FnZSBNYW5hZ2VyCis9PT09PT09PT09PT09PT09PT09PT09CisKK0JSTFRUWSBpcyBhbHNvIGRpc3RyaWJ1dGVkIGluIHRoZSBSUE0gKFJlZEhhdCBQYWNrYWdlIE1hbmFnZXIpIGZvcm1hdC4gVGhlIAorZm9sbG93aW5nIGZpbGVzIGFyZSBhdmFpbGFibGU6CisKKyAgICBicmx0dHktPHJlbGVhc2U+LTx2ZXJzaW9uPi5zcmMucnBtCisgICAgYnJsdHR5LTxyZWxlYXNlPi08dmVyc2lvbj4uaTM4Ni5ycG0KKworVG8gYnVpbGQgYW5kIGluc3RhbGwgQlJMVFRZIGZyb20gc2NyYXRjaDoKKworICAgIERvd25sb2FkIHRoZSAuc3JjLnJwbSBmaWxlLgorICAgIEluc3RhbGwgdGhlIHNvdXJjZSB3aXRoOiAgIHJwbSAtaXZoIGJybHR0eS08cmVsZWFzZT4tPHZlcnNpb24+LnNyYy5ycG0KKyAgICBCdWlsZCBhbmQgaW5zdGFsbCBpdCB3aXRoOiBycG0gLWJpIGJybHR0eS08cmVsZWFzZT4tPHZlcnNpb24+CisKK0lmIHlvdXIgc3lzdGVtIGlzIGFuIHg4NiB0aGVuIHlvdSBkb24ndCBuZWVkIHRvIGJlIGNvbmNlcm5lZCB3aXRoIGJ1aWxkaW5nCitCUkxUVFkgc2luY2Ugd2UgcHJvdmlkZSBwcmVidWlsdCBiaW5hcmllcyBmb3IgdGhlc2UgcGxhdGZvcm1zLiBKdXN0IGRvOgorCisgICAgRG93bmxvYWQgdGhlIC5pMzg2LnJwbSBmaWxlLgorICAgIEluc3RhbGwgb3IgdXBncmFkZSBpdCB3aXRoOiBycG0gLVV2aCBicmx0dHktPHJlbGVhc2U+LTx2ZXJzaW9uPi5pMzg2LnJwbQorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0V4ZWN1dGluZyBCUkxUVFkKKz09PT09PT09PT09PT09PT0KKworSWYgeW91IGNvbXBpbGVkIEJSTFRUWSB3aXRoIGEgYnJhaWxsZSBkcml2ZXIgYnVpbHQtaW4sIHNpbXBseSBpbnZva2luZyBgYnJsdHR5Jworc2hvdWxkIHN0YXJ0IGl0IHdpdGggYWxsIGRlZmF1bHRzLiBBbHRlcm5hdGl2ZWx5LCB5b3UgbWlnaHQgbmVlZCB0byBzcGVjaWZ5IGEKK0JyYWlsbGUgZHJpdmVyIHdpdGggdGhlIGAtYicgb3B0aW9uLiBgYnJsdHR5IC1oJyBkaXNwbGF5cyBhIGJyaWVmIHN1bW1hcnkgb2YKK2FsbCBhdmFpbGFibGUgb3B0aW9ucy4KKworWW91IG1heSB1c2UgYSBjb25maWd1cmF0aW9uIGZpbGUgZm9yIG1vc3Qgb3B0aW9ucyBhcyB3ZWxsLiBTZWUgdGhlIGV4YW1wbGUKK2NvbmZpZ3VyYXRpb24gZmlsZSBgYnJsdHR5LmNvbmYnIGluIHRoZSBgRG9jdW1lbnRzJyBzdWJkaXJlY3RvcnkuCisKK0FuZCBkb24ndCBmb3JnZXQgdG8gcmV2aWV3IHRoZSBub3RlcyBmb3IgeW91ciBCcmFpbGxlIGRpc3BsYXkuIFNlZSB0aGUgYFJFQURNRScKK2ZpbGUgaW4gaXRzIGRyaXZlcidzIHN1YmRpcmVjdG9yeS4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvVGFibGVzLmJyYWlsbGViYWNrL1JFQURNRSBiL1RhYmxlcy5icmFpbGxlYmFjay9SRUFETUUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWQyZGJiNwotLS0gL2Rldi9udWxsCisrKyBiL1RhYmxlcy5icmFpbGxlYmFjay9SRUFETUUKQEAgLTAsMCArMSw1OSBAQAorRGV2aWNlIGRyaXZlcnMKKz09PT09PT09PT09PT09CisKK3wgRGV2aWNlIG1hcmtldGluZyBuYW1lICAgICAgICAgfCBCcmx0dHkgZHJpdmVyIGNvZGUgfCBEZXZpY2UgbmFtZSBwYXR0ZXJuIHwgS2V5IHRhYmxlICAgICAgICAgIHwKK3wgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tLS0tIHwKK3wgSGFycG8gQnJhaWxsZVBlbiAgICAgICAgICAgICAgfCB2byAgICAgICAgICAgICAgICAgfCBFTDEyLSAgICAgICAgICAgICAgIHwgdm8vYnAua3RiICAgICAgICAgIHwKK3wgRXVyb2JyYWlsbGUgRXN5cyAgICAgICAgICAgICAgfCBldSAgICAgICAgICAgICAgICAgfCBFc3lzLSAgICAgICAgICAgICAgIHwgZXUvZXN5cy1zbWFsbC5rdGIgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgIHwgZXUvZXN5cy1tZWRpdW0ua3RiIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgIHwgZXUvZXN5cy1sYXJnZS5rdGIgIHwKK3wgRnJlZWRvbSBTY2llbnRpZmljIEZvY3VzIEJsdWUgfCBmcyAgICAgICAgICAgICAgICAgfCBGb2N1cyA0MCBCVCAgICAgICAgIHwgZnMvZm9jdXNfc21hbGwua3RiIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgfCBGb2N1cyAxNCBCVCAgICAgICAgIHwgZnMvZm9jdXNfc21hbGwua3RiIHwKK3wgSHVtYW53YXJlIEJyYWlsbGlhbnQgICAgICAgICAgfCBodyAgICAgICAgICAgICAgICAgfCBCcmFpbGxpYW50IEJUICAgICAgIHwgaHcvbWIxLmt0YiAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgIHwgaHcvbWIyLmt0YiAgICAgICAgIHwKK3wgSElNUyAgICAgICAgICAgICAgICAgICAgICAgICAgfCBobSAgICAgICAgICAgICAgICAgfCBIYW5zb25lICAgICAgICAgICAgIHwgWzFdICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgfCBIYW5zb25lWEwgICAgICAgICAgIHwgWzFdICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgfCBCcmFpbGxlU2Vuc2UgICAgICAgIHwgaG0vcXdlcnR5Lmt0YiAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgIHwgaG0vcGFuLmt0YiAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgIHwgaG0vc2Nyb2xsLmt0YiAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgfCBCcmFpbGxlRURHRSAgICAgICAgIHwgaG0vZWRnZS5rdGIgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgfCBTbWFydEJlZXRsZSAgICAgICAgIHwgaG0vYmVldGxlLmt0YiAgICAgIHwKK3wgQVBIIFJlZnJlc2hhYnJhaWxsZSAgICAgICAgICAgfCBibSAgICAgICAgICAgICAgICAgfCBSZWZyZXNoYWJyYWlsbGUgICAgIHwgYm0vcmIua3RiICAgICAgICAgIHwKK3wgQmF1bSBWYXJpb0Nvbm5lY3QgICAgICAgICAgICAgfCBibSAgICAgICAgICAgICAgICAgfCBWYXJpb0Nvbm5lY3QgICAgICAgIHwgYm0vZGVmYXVsdC5rdGIgWzJdIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgIHwgYm0vY29ubmVjdC5rdGIgICAgIHwKK3wgQmF1bSBWYXJpb1VsdHJhICAgICAgICAgICAgICAgfCBibSAgICAgICAgICAgICAgICAgfCBWYXJpb1VsdHJhICAgICAgICAgIHwgYm0vZGVmYXVsdC5rdGIgWzJdIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgIHwgYm0vdWx0cmEua3RiICAgICAgIHwKK3wgUGFwZW5tZWllciBCcmFpbGxleCBUcmlvICAgICAgfCBwbSAgICAgICAgICAgICAgICAgfCBicmFpbGxleCB0cmlvICAgICAgIHwgcG0vdHJpby5rdGIgICAgICAgIHwKK3wgQWx2YSBCQzY0MC9CQzY4MCAgICAgICAgICAgICAgfCBhbCAgICAgICAgICAgICAgICAgfCBBbHZhIEJDICAgICAgICAgICAgIHwgYWwvYmM2NDAua3RiICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgIHwgYWwvYmM2ODAua3RiICAgICAgIHwKK3wgSGFuZHlUZWNoICAgICAgICAgICAgICAgICAgICAgfCBodCAgICAgICAgICAgICAgICAgfCBCcmFpbGxlIFdhdmUgICAgICAgIHwgaHQvd2F2ZS5rdGIgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgfCBCUlcgICAgICAgICAgICAgICAgIHwgaHQvd2F2ZS5rdGIgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgfCBCcmFpbGxpbm8gICAgICAgICAgIHwgaHQvYnJsbi5rdGIgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgfCBCTDIgICAgICAgICAgICAgICAgIHwgaHQvYnJsbi5rdGIgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgfCBCcmFpbGxlIFN0YXIgNDAgICAgIHwgaHQvYnM0MC5rdGIgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgfCBCUzQgICAgICAgICAgICAgICAgIHwgaHQvYnM0MC5rdGIgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgfCBFYXN5IEJyYWlsbGUgICAgICAgIHwgaHQvZWFzeS5rdGIgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgfCBFQlIgICAgICAgICAgICAgICAgIHwgaHQvZWFzeS5rdGIgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgfCBBY3RpdmUgQnJhaWxsZSAgICAgIHwgaHQvYWI0MC5rdGIgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgfCBBQjQgICAgICAgICAgICAgICAgIHwgaHQvYWI0MC5rdGIgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgfCBCYXNpYyBCcmFpbGxlICAgICAgIHwgaHQvYmIua3RiICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgfCBCQjMgICAgICAgICAgICAgICAgIHwgaHQvYmIua3RiICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgfCBCQjQgICAgICAgICAgICAgICAgIHwgaHQvYmIua3RiICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgfCBCQjYgICAgICAgICAgICAgICAgIHwgaHQvYmIua3RiICAgICAgICAgIHwKK3wgU2Vpa2EgTWluaSBOb3RlIFRha2VyICAgICAgICAgfCBzayAgICAgICAgICAgICAgICAgfCBUU00gICAgICAgICAgICAgICAgIHwgc2svbnRrLmt0YiAgICAgICAgIHwKK3wgU2Vpa2EgQnJhaWxsZSBEaXNwbGF5ICAgICAgICAgfCBzayAgICAgICAgICAgICAgICAgfCBUUzUgICAgICAgICAgICAgICAgIHwgc2svYmRwLmt0YiAgICAgICAgIHwKKworWzFdIFVua25vd247IG5lZWQgdG8gdmVyaWZ5LiBQcm9iYWJseSB1c2luZyB0aGUgc2FtZSBrZXkgdGFibGVzIGFzIEJyYWlsbGVTZW5zZS4KK1syXSBVc2VkIGR1cmluZyBpbml0aWFsIHByb2JlIGZvciBCYXVtIGRldmljZXMuCisKK0xhc3QgdXBkYXRlZCBiYXNlZCBvbiBCcmx0dHkgNS40IGtleSB0YWJsZXMuCisKK05vdGVzCis9PT09PQorfCBISU1TIGRyaXZlciB8IGJyYWlsbGUua3RpIHwgY29tbW9uLmt0aSB8IGYxNC5rdGkgfCBmMTgua3RpIHwgbGVmdC5rdGkgfCBwYW4ua3RpIHwgcXdlcnR5Lmt0aSB8IHJpZ2h0Lmt0aSB8IHNjcm9sbC5rdGkgfAorfCAtLS0tLS0tLS0tLSB8IC0tLS0tLS0tLS0tIHwgLS0tLS0tLS0tLSB8IC0tLS0tLS0gfCAtLS0tLS0tIHwgLS0tLS0tLS0gfCAtLS0tLS0tIHwgLS0tLS0tLS0tLSB8IC0tLS0tLS0tLSB8IC0tLS0tLS0tLS0gfAorfCBiZWV0bGUua3RiICB8IFggICAgICAgICAgIHwgWCAgICAgICAgICB8IFggICAgICAgfCAgICAgICAgIHwgICAgICAgICAgfCBYICAgICAgIHwgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgfAorfCBlZGdlLmt0YiAgICB8IFggICAgICAgICAgIHwgWCAgICAgICAgICB8ICAgICAgICAgfCBYICAgICAgIHwgWCAgICAgICAgfCAgICAgICAgIHwgICAgICAgICAgICB8IFggICAgICAgICB8IFggICAgICAgICAgfAorfCBwYW4ua3RiICAgICB8IFggICAgICAgICAgIHwgWCAgICAgICAgICB8IFggICAgICAgfCAgICAgICAgIHwgICAgICAgICAgfCBYICAgICAgIHwgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgfAorfCBxd2VydHkua3RiICB8ICAgICAgICAgICAgIHwgWCAgICAgICAgICB8ICAgICAgICAgfCAgICAgICAgIHwgICAgICAgICAgfCAgICAgICAgIHwgWCAgICAgICAgICB8ICAgICAgICAgICB8IFggICAgICAgICAgfAorfCBzY3JvbGwua3RiICB8IFggICAgICAgICAgIHwgWCAgICAgICAgICB8IFggICAgICAgfCAgICAgICAgIHwgWCAgICAgICAgfCAgICAgICAgIHwgICAgICAgICAgICB8ICAgICAgICAgICB8IFggICAgICAgICAgfApkaWZmIC0tZ2l0IGEvVGFibGVzLmJyYWlsbGViYWNrL2FsL2FidF9iYXNpYy5rdGkgYi9UYWJsZXMuYnJhaWxsZWJhY2svYWwvYWJ0X2Jhc2ljLmt0aQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NzYxYjczCi0tLSAvZGV2L251bGwKKysrIGIvVGFibGVzLmJyYWlsbGViYWNrL2FsL2FidF9iYXNpYy5rdGkKQEAgLTAsMCArMSw5NyBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorIyAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyMKKyMgQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorIworIyBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorIworIyBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisjIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyMgbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisjCisjIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMgVGhpcyBrZXkgc3VidGFibGUgaXMgZm9yIEFsdmEgbW9kZWxzIHdoaWNoIGhhdmUgdGhlIGJhc2ljIEFCVC9EZWxwaGkga2V5cy4KK25vdGUgVGhlIHR3byBsb25nIGtleXMgYXJlIG5hbWVkIExlZnQgYW5kIFJpZ2h0Lgorbm90ZSBUaGUgc21hbGwga2V5cyBpbW1lZGlhdGVseSB0byB0aGVpciBsZWZ0IGFuZCByaWdodCBhcmUgbmFtZWQgVXAgYW5kIERvd24uCitub3RlIFRoZSB0aHJlZSBzbWFsbCBrZXlzIGF0IHRoZSBsZWZ0IGFyZSBuYW1lZCBQcm9nLCBIb21lLCBhbmQgQ3Vyc29yLgorCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIERlZmF1bHQgQmluZGluZ3MgIworIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworYmluZCAhTGVmdCBGV0lOTFQKK2JpbmQgIVJpZ2h0IEZXSU5SVAorYmluZCBIb21lKyFMZWZ0IExOQkVHCitiaW5kIEhvbWUrIVJpZ2h0IExORU5ECitiaW5kIEN1cnNvcishTGVmdCBIV0lOTFQKK2JpbmQgQ3Vyc29yKyFSaWdodCBIV0lOUlQKK2JpbmQgUHJvZyshTGVmdCBDSFJMVAorYmluZCBQcm9nKyFSaWdodCBDSFJSVAorCitiaW5kICFVcCBMTlVQCitiaW5kICFEb3duIExORE4KK2JpbmQgSG9tZSBUT1BfTEVGVAorYmluZCBIb21lKyFVcCBUT1AKK2JpbmQgSG9tZSshRG93biBCT1QKK2JpbmQgQ3Vyc29yKyFVcCBBVFRSVVAKK2JpbmQgQ3Vyc29yKyFEb3duIEFUVFJETgorYmluZCBIb21lK0N1cnNvcishVXAgUFJESUZMTgorYmluZCBIb21lK0N1cnNvcishRG93biBOWERJRkxOCitiaW5kIFByb2crSG9tZSshVXAgUFJQUk9NUFQKKworYmluZCBIb21lK0N1cnNvciBDU1JUUksKK2JpbmQgQ3Vyc29yIFJFVFVSTgorCitiaW5kICFSb3V0aW5nS2V5MSBST1VURQorYmluZCBQcm9nK0hvbWUrIVJvdXRpbmdLZXkxIERFU0NDSEFSCitiaW5kIEhvbWUrQ3Vyc29yKyFSb3V0aW5nS2V5MSBTRVRMRUZUCisKK2JpbmQgUHJvZyshUm91dGluZ0tleTEgQ0xJUF9ORVcKK2JpbmQgSG9tZSshUm91dGluZ0tleTEgQ09QWV9SRUNUCitiaW5kIFByb2crSG9tZSshRG93biBQQVNURQorCitiaW5kIFByb2cgSEVMUAorYmluZCBQcm9nK0hvbWUgRElTUE1ECitiaW5kIFByb2crQ3Vyc29yIFBSRUZNRU5VCitiaW5kIFByb2crIVVwIElORk8KK2JpbmQgUHJvZyshRG93biBGUkVFWkUKKworYmluZCAhU3RhdHVzMUEgQ0FQQkxJTksKK2JpbmQgIVN0YXR1czFCIENTUlZJUworYmluZCAhU3RhdHVzMUMgQ1NSQkxJTksKK2JpbmQgQ3Vyc29yKyFTdGF0dXMxQSBTSVhET1RTCitiaW5kIEN1cnNvcishU3RhdHVzMUIgQ1NSU0laRQorYmluZCBDdXJzb3IrIVN0YXR1czFDIFNMSURFV0lOCisKK2JpbmQgSG9tZStDdXJzb3IrIUxlZnQgTVVURQorYmluZCBIb21lK0N1cnNvcishUmlnaHQgU0FZX0xJTkUKK2JpbmQgUHJvZytIb21lKyFMZWZ0IFJFU1RBUlRTUEVFQ0gKK2JpbmQgUHJvZytIb21lKyFSaWdodCBTQVlfQkVMT1cKKworCisjIyMjIyMjIyMjIyMjIyMjIworIyBNZW51IEJpbmRpbmdzICMKKyMjIyMjIyMjIyMjIyMjIyMjCisKK2NvbnRleHQgbWVudQorCitiaW5kICFVcCBNRU5VX1BSRVZfSVRFTQorYmluZCAhRG93biBNRU5VX05FWFRfSVRFTQorYmluZCBIb21lKyFVcCBNRU5VX0ZJUlNUX0lURU0KK2JpbmQgSG9tZSshRG93biBNRU5VX0xBU1RfSVRFTQorCitiaW5kICFMZWZ0IEZXSU5MVAorYmluZCAhUmlnaHQgRldJTlJUCitiaW5kIEhvbWUrIUxlZnQgUFJFRkxPQUQKK2JpbmQgSG9tZSshUmlnaHQgUFJFRlNBVkUKKworYmluZCBQcm9nIFBSRUZNRU5VCitiaW5kIEhvbWUgTUVOVV9QUkVWX1NFVFRJTkcKK2JpbmQgQ3Vyc29yIE1FTlVfTkVYVF9TRVRUSU5HCmRpZmYgLS1naXQgYS9UYWJsZXMuYnJhaWxsZWJhY2svYWwvYWJ0X2V4dHJhLmt0aSBiL1RhYmxlcy5icmFpbGxlYmFjay9hbC9hYnRfZXh0cmEua3RpCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJlYzU1NmQKLS0tIC9kZXYvbnVsbAorKysgYi9UYWJsZXMuYnJhaWxsZWJhY2svYWwvYWJ0X2V4dHJhLmt0aQpAQCAtMCwwICsxLDIxIEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisjICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorIworIyBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisjCisjIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisjCisjIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyMgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorIyBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyMKKyMgV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworIworIyBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIyBUaGlzIGtleSBzdWJ0YWJsZSBpcyBmb3IgQWx2YSBtb2RlbHMgd2hpY2ggaGF2ZSB0aGUgZXh0cmEgQUJUL0RlbHBoaSBrZXlzLgorbm90ZSBUaGUgdGhyZWUgc21hbGwga2V5cyBhdCB0aGUgcmlnaHQgYXJlIG5hbWVkIEN1cnNvcjIsIEhvbWUyLCBhbmQgUHJvZzIuCisKZGlmZiAtLWdpdCBhL1RhYmxlcy5icmFpbGxlYmFjay9hbC9hYnRfbGFyZ2Uua3RiIGIvVGFibGVzLmJyYWlsbGViYWNrL2FsL2FidF9sYXJnZS5rdGIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDgzZWNjZAotLS0gL2Rldi9udWxsCisrKyBiL1RhYmxlcy5icmFpbGxlYmFjay9hbC9hYnRfbGFyZ2Uua3RiCkBAIC0wLDAgKzEsMjYgQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyMgICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisjCisjIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyMKKyMgQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCit0aXRsZSBBbHZhIEFCVCAzODAgLyBEZWxwaGkgNDgwCisKK2NvbnRleHQgZGVmYXVsdAoraW5jbHVkZSBhYnRfYmFzaWMua3RpCisKK2NvbnRleHQgZGVmYXVsdAoraW5jbHVkZSBhYnRfZXh0cmEua3RpCisKZGlmZiAtLWdpdCBhL1RhYmxlcy5icmFpbGxlYmFjay9hbC9hYnRfc21hbGwua3RiIGIvVGFibGVzLmJyYWlsbGViYWNrL2FsL2FidF9zbWFsbC5rdGIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTA4MGQ5NAotLS0gL2Rldi9udWxsCisrKyBiL1RhYmxlcy5icmFpbGxlYmFjay9hbC9hYnRfc21hbGwua3RiCkBAIC0wLDAgKzEsMjMgQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyMgICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisjCisjIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyMKKyMgQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCit0aXRsZSBBbHZhIEFCVCAzMjAsMzQwIC8gRGVscGhpIDQyMCw0NDAKKworY29udGV4dCBkZWZhdWx0CitpbmNsdWRlIGFidF9iYXNpYy5rdGkKKwpkaWZmIC0tZ2l0IGEvVGFibGVzLmJyYWlsbGViYWNrL2FsL2JjLWV0b3VjaC5rdGkgYi9UYWJsZXMuYnJhaWxsZWJhY2svYWwvYmMtZXRvdWNoLmt0aQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNDNmNmU3Ci0tLSAvZGV2L251bGwKKysrIGIvVGFibGVzLmJyYWlsbGViYWNrL2FsL2JjLWV0b3VjaC5rdGkKQEAgLTAsMCArMSwyMyBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorIyAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyMKKyMgQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorIworIyBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorIworIyBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisjIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyMgbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisjCisjIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK25vdGUgVGhlcmUgYXJlIGZvdXIgRVRvdWNoIGtleXMsIHR3byBhdCBlYWNoIGVuZCBvZiB0aGUgdGV4dCBjZWxsIGFyZWEuCitub3RlICogRWFjaCBpcyBzdWJuYW1lZCBhY2NvcmRpbmcgdG8gdGhlIHNpZGUgaXQncyBvbiAoTGVmdCwgUmlnaHQpLAorbm90ZSAqIGFuZCBhY2NvcmRpbmcgdG8gaXRzIHBvc2l0aW9uIG9uIHRoYXQgc2lkZSAoUmVhciwgRnJvbnQpLgorbm90ZSAqIFRoZSB0d28gUmVhciBrZXlzIGFyZSBpZGVudGlmaWVkIGJ5IHR3byB2ZXJ0aWNhbCBiYXJzLgorbm90ZSAqIFRoZSB0d28gRnJvbnQga2V5cyBhcmUgaWRlbnRpZmllZCBieSBvbmUgaG9yaXpvbnRhbCBiYXIuCmRpZmYgLS1naXQgYS9UYWJsZXMuYnJhaWxsZWJhY2svYWwvYmMtc21hcnRwYWQua3RpIGIvVGFibGVzLmJyYWlsbGViYWNrL2FsL2JjLXNtYXJ0cGFkLmt0aQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OTg0NGMyCi0tLSAvZGV2L251bGwKKysrIGIvVGFibGVzLmJyYWlsbGViYWNrL2FsL2JjLXNtYXJ0cGFkLmt0aQpAQCAtMCwwICsxLDEwNyBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorIyAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyMKKyMgQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorIworIyBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorIworIyBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisjIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyMgbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisjCisjIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK25vdGUgKiBUaGUgb3V0ZXIga2V5IG9uIHRoZSBsZWZ0LCBpZGVudGlmaWVkIGJ5IHRocmVlIGhvcml6b250YWwgYmFycywgaXMgc3VibmFtZWQgRjEuCitub3RlICogVGhlIGlubmVyIGtleSBvbiB0aGUgbGVmdCwgaWRlbnRpZmllZCBieSBvbmUgaG9yaXpvbnRhbCBiYXIsIGlzIHN1Ym5hbWVkIEYyLgorbm90ZSAqIFRoZSBpbm5lciBrZXkgb24gdGhlIHJpZ2h0LCBpZGVudGlmaWVkIGJ5IG9uZSB2ZXJ0aWNhbCBiYXIsIGlzIHN1Ym5hbWVkIEYzLgorbm90ZSAqIFRoZSBvdXRlciBrZXkgb24gdGhlIHJpZ2h0LCBpZGVudGlmaWVkIGJ5IHRocmVlIHZlcnRpY2FsIGJhcnMsIGlzIHN1Ym5hbWVkIEY0Lgorbm90ZSAqIFRoZSBrZXlzIGluIHRoZSBtaWRkbGUgZm9ybSBhIGZpdmUtd2F5IGRpcmVjdGlvbmFsIHBhZDoKK25vdGUgKyBUaGUgcm91bmQga2V5IGluIHRoZSBtaWRkbGUgaXMgc3VibmFtZWQgRW50ZXIuCitub3RlICsgVGhlIHNob3J0LCB0aGluIGtleXMgdGhhdCBmb3JtIGEgc3F1YXJlIGFyb3VuZCBpdCBhcmUgc3VibmFtZWQgTGVmdCwgUmlnaHQsIFVwLCBhbmQgRG93bi4KKworCisjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBEZWZhdWx0IEJpbmRpbmdzICMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK2JpbmQgU21hcnRwYWRMZWZ0IEtFWV9DVVJTT1JfTEVGVAorYmluZCBTbWFydHBhZFJpZ2h0IEtFWV9DVVJTT1JfUklHSFQKK2JpbmQgU21hcnRwYWRVcCBLRVlfQ1VSU09SX1VQCitiaW5kIFNtYXJ0cGFkRG93biBLRVlfQ1VSU09SX0RPV04KK2JpbmQgU21hcnRwYWRFbnRlciBQQVNURQorCisjT3ZlcnJpZGRlbiBieSBCcmFpbGxlYmFjaworI2JpbmQgU21hcnRwYWRGMiBUSU1FCisKK2JpbmQgU21hcnRwYWRGMStTbWFydHBhZExlZnQgU1dJVENIVlRfUFJFVgorYmluZCBTbWFydHBhZEYxK1NtYXJ0cGFkUmlnaHQgU1dJVENIVlRfTkVYVAorYmluZCBTbWFydHBhZEYxK1NtYXJ0cGFkRW50ZXIgS0VZX0lOU0VSVAorYmluZCBTbWFydHBhZEYxKyFSb3V0aW5nS2V5MSBTV0lUQ0hWVAorCitiaW5kIFNtYXJ0cGFkRjIrU21hcnRwYWRVcCBLRVlfUEFHRV9VUAorYmluZCBTbWFydHBhZEYyK1NtYXJ0cGFkRG93biBLRVlfUEFHRV9ET1dOCitiaW5kIFNtYXJ0cGFkRjIrU21hcnRwYWRMZWZ0IEtFWV9IT01FCitiaW5kIFNtYXJ0cGFkRjIrU21hcnRwYWRSaWdodCBLRVlfRU5ECitiaW5kIFNtYXJ0cGFkRjIrU21hcnRwYWRFbnRlciBLRVlfREVMRVRFCitiaW5kIFNtYXJ0cGFkRjIrIVJvdXRpbmdLZXkxIEtFWV9GVU5DVElPTgorCitiaW5kIFNtYXJ0cGFkRjMrU21hcnRwYWRGNCBNVVRFCisKK2JpbmQgU21hcnRwYWRGMytTbWFydHBhZFJpZ2h0IFNBWV9MSU5FCitiaW5kIFNtYXJ0cGFkRjMrU21hcnRwYWRVcCBTQVlfQUJPVkUKK2JpbmQgU21hcnRwYWRGMytTbWFydHBhZERvd24gU0FZX0JFTE9XCitiaW5kIFNtYXJ0cGFkRjMrU21hcnRwYWRFbnRlciBTUEtIT01FCisKK2JpbmQgU21hcnRwYWRGNCtTbWFydHBhZExlZnQgU0FZX1NMT1dFUgorYmluZCBTbWFydHBhZEY0K1NtYXJ0cGFkUmlnaHQgU0FZX0ZBU1RFUgorYmluZCBTbWFydHBhZEY0K1NtYXJ0cGFkRG93biBTQVlfU09GVEVSCitiaW5kIFNtYXJ0cGFkRjQrU21hcnRwYWRVcCBTQVlfTE9VREVSCitiaW5kIFNtYXJ0cGFkRjQrU21hcnRwYWRFbnRlciBBVVRPU1BFQUsKKworYmluZCBTbWFydHBhZEYxK1NtYXJ0cGFkRjIrU21hcnRwYWRFbnRlciBSRVNUQVJUQlJMCitiaW5kIFNtYXJ0cGFkRjMrU21hcnRwYWRGNCtTbWFydHBhZEVudGVyIFJFU1RBUlRTUEVFQ0gKKworCisjIyMjIyMjIyMjIyMjIyMjIworIyBNZW51IEJpbmRpbmdzICMKKyMjIyMjIyMjIyMjIyMjIyMjCisKKyNVbnVzZWQgYnkgQnJhaWxsZWJhY2sKKyNjb250ZXh0IG1lbnUKKworI2JpbmQgU21hcnRwYWRGMSBQUkVGTUVOVQorI2JpbmQgU21hcnRwYWRGMiBNRU5VX1BSRVZfTEVWRUwKKyNiaW5kIFNtYXJ0cGFkRjQgUFJFRkxPQUQKKworI2JpbmQgU21hcnRwYWRVcCBNRU5VX1BSRVZfSVRFTQorI2JpbmQgU21hcnRwYWREb3duIE1FTlVfTkVYVF9JVEVNCisjYmluZCBTbWFydHBhZExlZnQgTUVOVV9QUkVWX1NFVFRJTkcKKyNiaW5kIFNtYXJ0cGFkUmlnaHQgTUVOVV9ORVhUX1NFVFRJTkcKKyNiaW5kIFNtYXJ0cGFkRW50ZXIgUFJFRlNBVkUKKworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQnJhaWxsZUJhY2sgQmluZGluZ3MgIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMgQmFjayBrZXkKK2JpbmQgU21hcnRwYWRGMSBLRVlfRlVOQ1RJT04rMTA4CisjIEhvbWUga2V5CitiaW5kIFNtYXJ0cGFkRjIgS0VZX0ZVTkNUSU9OKzEwOQorIyBSZWNlbnQgYXBwcyBrZXkKK2JpbmQgU21hcnRwYWRGMyBLRVlfRlVOQ1RJT04rMTEwCisjIE5vdGlmaWNhdGlvbnMgYmFyCitiaW5kIFNtYXJ0cGFkRjQgS0VZX0ZVTkNUSU9OKzExMQorCisjIEFjdGl2YXRlIGN1cnJlbnRseSBmb2N1c2VkIGl0ZW0uCitiaW5kIFNtYXJ0cGFkRW50ZXIgUk9VVEUrMTI3CisKKyMgTG9uZyBwcmVzcyBjdXJyZW50bHkgZm9jdXNlZCBpdGVtLiBUaGlzIGRpc3BsYXkgaGFuZGxlcyBhdXRvLXJlcGVhdCBvbiBpdHMKKyMgb3duIHNvIHdlIGNhbid0IHVzZSBsb25nIHByZXNzIG9mIFNtYXJ0cGFkRW50ZXIgZm9yIHRoaXMgY29tbWFuZC4KK2JpbmQgVGh1bWJIb21lK1NtYXJ0cGFkRW50ZXIgUk9VVEUrMjU1CisKZGlmZiAtLWdpdCBhL1RhYmxlcy5icmFpbGxlYmFjay9hbC9iYy10aHVtYi5rdGkgYi9UYWJsZXMuYnJhaWxsZWJhY2svYWwvYmMtdGh1bWIua3RpCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIxMDNmYWMKLS0tIC9kZXYvbnVsbAorKysgYi9UYWJsZXMuYnJhaWxsZWJhY2svYWwvYmMtdGh1bWIua3RpCkBAIC0wLDAgKzEsMjMgQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyMgICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisjCisjIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyMKKyMgQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitub3RlICogVGhlIEhvbWUga2V5IGlzIGlkZW50aWZpZWQgYnkgYSB2ZXJ0aWNhbCBiYXIgaW4gdGhlIG1pZGRsZS4KK25vdGUgKiBUaGUgTGVmdCBrZXkgaXMgaWRlbnRpZmllZCBieSBhIHZlcnRpY2FsIGJhciBuZWFyIGl0cyBsZWZ0IGVkZ2UuCitub3RlICogVGhlIFJpZ2h0IGtleSBpcyBpZGVudGlmaWVkIGJ5IGEgdmVydGljYWwgYmFyIG5lYXIgaXRzIHJpZ2h0IGVkZ2UuCitub3RlICogVGhlIFVwIGtleSBpcyBpZGVudGlmaWVkIGJ5IGEgaG9yaXpvbnRhbCBiYXIgYWxvbmcgaXRzIHRvcCBlZGdlLgorbm90ZSAqIFRoZSBEb3duIGtleSBpcyBpZGVudGlmaWVkIGJ5IGEgaG9yaXpvbnRhbCBiYXIgYWxvbmcgaXRzIGJvdHRvbSBlZGdlLgpkaWZmIC0tZ2l0IGEvVGFibGVzLmJyYWlsbGViYWNrL2FsL2JjLmt0aSBiL1RhYmxlcy5icmFpbGxlYmFjay9hbC9iYy5rdGkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2U5YTQxMwotLS0gL2Rldi9udWxsCisrKyBiL1RhYmxlcy5icmFpbGxlYmFjay9hbC9iYy5rdGkKQEAgLTAsMCArMSwxMjcgQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyMgICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisjCisjIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyMKKyMgQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBEZWZhdWx0IEJpbmRpbmdzICMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK2JpbmQgRVRvdWNoTGVmdFJlYXIrRVRvdWNoUmlnaHRSZWFyIEhFTFAKK2JpbmQgRVRvdWNoTGVmdFJlYXIrRVRvdWNoUmlnaHRGcm9udCBMRUFSTgorYmluZCBFVG91Y2hMZWZ0RnJvbnQrRVRvdWNoUmlnaHRSZWFyIElORk8KK2JpbmQgRVRvdWNoTGVmdEZyb250K0VUb3VjaFJpZ2h0RnJvbnQgUFJFRk1FTlUKKworYmluZCBUaHVtYlVwKyFUaHVtYkRvd24gQ1NSVFJLK29uCitiaW5kIFRodW1iRG93bishVGh1bWJVcCBDU1JUUksrb2ZmCitiaW5kIFRodW1iSG9tZSBSRVRVUk4KK2JpbmQgVGh1bWJMZWZ0K1RodW1iUmlnaHQgQ1NSSk1QX1ZFUlQKKworYmluZCBUaHVtYlVwIExOVVAKK2JpbmQgVGh1bWJEb3duIExORE4KK2JpbmQgVGh1bWJMZWZ0IEZXSU5MVAorYmluZCBUaHVtYlJpZ2h0IEZXSU5SVAorCitiaW5kIFRodW1iSG9tZStUaHVtYlVwIFBSRElGTE4KK2JpbmQgVGh1bWJIb21lK1RodW1iRG93biBOWERJRkxOCitiaW5kIFRodW1iSG9tZStUaHVtYkxlZnQgRldJTkxUU0tJUAorYmluZCBUaHVtYkhvbWUrVGh1bWJSaWdodCBGV0lOUlRTS0lQCisKK2JpbmQgVGh1bWJMZWZ0K1RodW1iVXAgVE9QX0xFRlQKK2JpbmQgVGh1bWJMZWZ0K1RodW1iRG93biBCT1RfTEVGVAorYmluZCBUaHVtYlJpZ2h0K1RodW1iVXAgQVRUUlVQCitiaW5kIFRodW1iUmlnaHQrVGh1bWJEb3duIEFUVFJETgorCitiaW5kIEVUb3VjaExlZnRSZWFyK1RodW1iVXAgUFJQUk9NUFQKK2JpbmQgRVRvdWNoTGVmdFJlYXIrVGh1bWJEb3duIE5YUFJPTVBUCitiaW5kIEVUb3VjaExlZnRGcm9udCtUaHVtYlVwIFBSUEdSUEgKK2JpbmQgRVRvdWNoTGVmdEZyb250K1RodW1iRG93biBOWFBHUlBICitiaW5kIEVUb3VjaFJpZ2h0UmVhcitUaHVtYlVwIFBSU0VBUkNICitiaW5kIEVUb3VjaFJpZ2h0UmVhcitUaHVtYkRvd24gTlhTRUFSQ0gKKworYmluZCBFVG91Y2hMZWZ0UmVhciBMTkJFRworYmluZCBFVG91Y2hSaWdodFJlYXIgTE5FTkQKK2JpbmQgRVRvdWNoTGVmdEZyb250IENIUkxUCitiaW5kIEVUb3VjaFJpZ2h0RnJvbnQgQ0hSUlQKKworYmluZCBSb3V0aW5nS2V5MSBST1VURQorCitiaW5kIEVUb3VjaExlZnRSZWFyK0VUb3VjaExlZnRGcm9udCtSb3V0aW5nS2V5MSBERVNDQ0hBUgorYmluZCBSb3V0aW5nS2V5MSshUm91dGluZ0tleTEgQ0xJUF9DT1BZCitiaW5kIEVUb3VjaExlZnRSZWFyK1JvdXRpbmdLZXkxIENMSVBfTkVXCitiaW5kIEVUb3VjaExlZnRGcm9udCtSb3V0aW5nS2V5MSBDTElQX0FERAorYmluZCBFVG91Y2hSaWdodFJlYXIrUm91dGluZ0tleTEgQ09QWV9MSU5FCitiaW5kIEVUb3VjaFJpZ2h0RnJvbnQrUm91dGluZ0tleTEgQ09QWV9SRUNUCitiaW5kIEVUb3VjaFJpZ2h0UmVhcitFVG91Y2hSaWdodEZyb250IFBBU1RFCisKK2JpbmQgVGh1bWJMZWZ0K1JvdXRpbmdLZXkxIFBSSU5ERU5UCitiaW5kIFRodW1iUmlnaHQrUm91dGluZ0tleTEgTlhJTkRFTlQKK2JpbmQgVGh1bWJVcCtSb3V0aW5nS2V5MSBQUkRJRkNIQVIKK2JpbmQgVGh1bWJEb3duK1JvdXRpbmdLZXkxIE5YRElGQ0hBUgorYmluZCBUaHVtYkhvbWUrUm91dGluZ0tleTEgU0VUTEVGVAorCitiaW5kIEVUb3VjaExlZnRSZWFyK0VUb3VjaExlZnRGcm9udCtFVG91Y2hSaWdodFJlYXIgRlJFRVpFCitiaW5kIEVUb3VjaExlZnRSZWFyK0VUb3VjaFJpZ2h0UmVhcitFVG91Y2hSaWdodEZyb250IERJU1BNRAorCitiaW5kIFRodW1iTGVmdCtFVG91Y2hMZWZ0UmVhciBDU1JWSVMKK2JpbmQgVGh1bWJMZWZ0K0VUb3VjaExlZnRGcm9udCBBVFRSVklTCitiaW5kIFRodW1iTGVmdCtFVG91Y2hSaWdodEZyb250IFNJWERPVFMKKworbWFwIERvdDEgRE9UMQorbWFwIERvdDIgRE9UMgorbWFwIERvdDMgRE9UMworbWFwIERvdDQgRE9UNAorbWFwIERvdDUgRE9UNQorbWFwIERvdDYgRE9UNgorbWFwIERvdDcgRE9UNworbWFwIERvdDggRE9UOAorbWFwIFNwYWNlIFNQQUNFCittYXAgQ29udHJvbCBDT05UUk9MCittYXAgQWx0IE1FVEEKK2JpbmQgRW50ZXIgS0VZX0VOVEVSCitiaW5kIFdpbmRvd3MgS0VZX0VTQ0FQRQorCithc3NpZ24gY2hvcmQgU3BhY2UrCitpbmNsdWRlIC4uL2Nob3Jkcy5rdGkKKworCisjIyMjIyMjIyMjIyMjIyMjIworIyBNZW51IEJpbmRpbmdzICMKKyMjIyMjIyMjIyMjIyMjIyMjCisKKyNVbnVzZWQgYnkgQnJhaWxsZWJhY2sKKyNjb250ZXh0IG1lbnUKKworI2JpbmQgVGh1bWJMZWZ0IEZXSU5MVAorI2JpbmQgVGh1bWJSaWdodCBGV0lOUlQKKyNiaW5kIFRodW1iVXAgTUVOVV9QUkVWX0lURU0KKyNiaW5kIFRodW1iRG93biBNRU5VX05FWFRfSVRFTQorI2JpbmQgRVRvdWNoTGVmdFJlYXIgTUVOVV9GSVJTVF9JVEVNCisjYmluZCBFVG91Y2hMZWZ0RnJvbnQgTUVOVV9MQVNUX0lURU0KKyNiaW5kIEVUb3VjaFJpZ2h0UmVhciBNRU5VX1BSRVZfU0VUVElORworI2JpbmQgRVRvdWNoUmlnaHRGcm9udCBNRU5VX05FWFRfU0VUVElORworCitiaW5kIFRodW1iSG9tZSBQUkVGTUVOVQorYmluZCBFVG91Y2hMZWZ0UmVhcitFVG91Y2hMZWZ0RnJvbnQgUFJFRkxPQUQKK2JpbmQgRVRvdWNoUmlnaHRSZWFyK0VUb3VjaFJpZ2h0RnJvbnQgUFJFRlNBVkUKKworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQnJhaWxsZUJhY2sgQmluZGluZ3MgIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK2Fzc2lnbiBjaG9yZCBTcGFjZQoraW5jbHVkZSAuLi9hbmRyb2lkLWNob3Jkcy5rdGkKZGlmZiAtLWdpdCBhL1RhYmxlcy5icmFpbGxlYmFjay9hbC9iYzY0MC5rdGIgYi9UYWJsZXMuYnJhaWxsZWJhY2svYWwvYmM2NDAua3RiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUwMjIwMTIKLS0tIC9kZXYvbnVsbAorKysgYi9UYWJsZXMuYnJhaWxsZWJhY2svYWwvYmM2NDAua3RiCkBAIC0wLDAgKzEsMzAgQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyMgICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisjCisjIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyMKKyMgQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCit0aXRsZSBBbHZhIEJDNjQwLCBCQzYyNAorCitpbmNsdWRlIGJjLWV0b3VjaC5rdGkKKworbm90ZSBUaGVyZSdzIGEgU21hcnRwYWQgaW4gZnJvbnQgb2YgdGhlIHRleHQgY2VsbCBhcmVhLgoraW5jbHVkZSBiYy1zbWFydHBhZC5rdGkKKworbm90ZSBUaGUgZml2ZSBUaHVtYiBrZXlzIG9uIHRoZSBmcm9udCwgZnJvbSBsZWZ0IHRvIHJpZ2h0LCBhcmUgc3VibmFtZWQ6Citub3RlICogTGVmdCwgVXAsIEhvbWUsIERvd24sIFJpZ2h0LgoraW5jbHVkZSBiYy10aHVtYi5rdGkKKworaW5jbHVkZSBiYy5rdGkKZGlmZiAtLWdpdCBhL1RhYmxlcy5icmFpbGxlYmFjay9hbC9iYzY4MC5rdGIgYi9UYWJsZXMuYnJhaWxsZWJhY2svYWwvYmM2ODAua3RiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjliYjlkMzcKLS0tIC9kZXYvbnVsbAorKysgYi9UYWJsZXMuYnJhaWxsZWJhY2svYWwvYmM2ODAua3RiCkBAIC0wLDAgKzEsMzIgQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyMgICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisjCisjIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyMKKyMgQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCit0aXRsZSBBbHZhIEJDNjgwCisKK2luY2x1ZGUgYmMtZXRvdWNoLmt0aQorCitub3RlIFRoZXJlIGFyZSB0d28gU21hcnRwYWRzIGluIGZyb250IG9mIHRoZSB0ZXh0IGNlbGwgYXJlYS4KK2luY2x1ZGUgYmMtc21hcnRwYWQua3RpCisKK25vdGUgVGhlcmUncyBhIGdyb3VwIG9mIGZpdmUgVGh1bWIga2V5cyBhdCBlYWNoIGVuZCBvZiB0aGUgZnJvbnQuCitub3RlICogVGhlIG91dGVyIGtleSBvZiBlYWNoIGdyb3VwIGlzIHN1Ym5hbWVkIEhvbWUuCitub3RlICogVGhlIGZvdXIgaW5uZXIga2V5cyBvZiBlYWNoIGdyb3VwLCBmcm9tIGxlZnQgdG8gcmlnaHQsIGFyZSBzdWJuYW1lZDoKK25vdGUgKiBMZWZ0LCBVcCwgRG93biwgUmlnaHQuCitpbmNsdWRlIGJjLXRodW1iLmt0aQorCitpbmNsdWRlIGJjLmt0aQpkaWZmIC0tZ2l0IGEvVGFibGVzLmJyYWlsbGViYWNrL2FsL2VsLmt0YiBiL1RhYmxlcy5icmFpbGxlYmFjay9hbC9lbC5rdGIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDA1NTRlNwotLS0gL2Rldi9udWxsCisrKyBiL1RhYmxlcy5icmFpbGxlYmFjay9hbC9lbC5rdGIKQEAgLTAsMCArMSwyMSBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorIyAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyMKKyMgQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorIworIyBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorIworIyBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisjIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyMgbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisjCisjIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK3RpdGxlIE9wdGVsZWMgRWFzeUxpbmsgMTIgVG91Y2gKKworaW5jbHVkZSAuLi9icC9hbGwua3RpCmRpZmYgLS1naXQgYS9UYWJsZXMuYnJhaWxsZWJhY2svYWwvc2F0X2NvbW1vbi5rdGkgYi9UYWJsZXMuYnJhaWxsZWJhY2svYWwvc2F0X2NvbW1vbi5rdGkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTY0MGQyMgotLS0gL2Rldi9udWxsCisrKyBiL1RhYmxlcy5icmFpbGxlYmFjay9hbC9zYXRfY29tbW9uLmt0aQpAQCAtMCwwICsxLDk4IEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisjICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorIworIyBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisjCisjIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisjCisjIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyMgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorIyBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyMKKyMgV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworIworIyBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIyBUaGlzIGtleSBzdWJ0YWJsZSBpcyBmb3IgQWx2YSBtb2RlbHMgd2hpY2ggaGF2ZSB0aGUgYmFzaWMgU2F0ZWxsaXRlIGtleXMuCitub3RlIFRoZSB0d28gbG9uZywgZmxhdCBrZXlzIGFyZSBuYW1lZCBVcCBhbmQgRG93bi4KK25vdGUgVGhlIHR3byBsb25nLCBiZW50IGtleXMgYXJlIG5hbWVkIExlZnQgYW5kIFJpZ2h0Lgorbm90ZSBUaGUgdHdvIHJvdW5kIGtleXMgYXJlIG5hbWVkIEhvbWUgYW5kIEN1cnNvci4KK25vdGUgVGhlIHJvdyBvZiBrZXlzIGltbWVkaWF0ZWx5IGJlaGluZCB0aGUgYnJhaWxsZSBjZWxscyBpcyBuYW1lZCBSb3V0aW5nS2V5MSwKK25vdGUgKiBhbmQgdGhlIHJvdyBvZiBrZXlzIGZ1cnRoZXIgYmFjayBpcyBuYW1lZCBSb3V0aW5nS2V5Mi4KK25vdGUgVGhlIGtleXBhZCBhdCB0aGUgbGVmdCBzaWRlIG9mIHRoZSB0b3AgaXMgbmFtZWQgU3BlZWNoUGFkLAorbm90ZSAqIGFuZCB0aGUgb25lIGF0IHRoZSByaWdodCBzaWRlIG9mIHRoZSB0b3AgaXMgbmFtZWQgTmF2UGFkLgorbm90ZSAqIFRoZXkgY2FuIGJlIHN3YXBwZWQgdmlhIHRoZSBpbnRlcm5hbCBtZW51Lgorbm90ZSAqIFRoZSBmb3VyIGlubmVyIGtleXMgb2YgZWFjaCBhcmUgc3VibmFtZWQgTGVmdCwgUmlnaHQsIFVwLCBhbmQgRG93bi4KK25vdGUgKiBUaGUgdHdvIG91dGVyIGtleXMgb2YgZWFjaCBhcmUgc3VibmFtZWQgRjEgYW5kIEYyLgorCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIERlZmF1bHQgQmluZGluZ3MgIworIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworbm90ZSBFbnRlciB0aGUgaW50ZXJuYWwgbWVudSBieSBwcmVzc2luZzoKK25vdGUgKiBTcGVlY2hQYWRGMSArIFNwZWVjaFBhZEYyICsgTmF2UGFkRjEgKyBOYXZQYWRGMgorYmluZCBTcGVlY2hQYWRGMStTcGVlY2hQYWRGMitOYXZQYWRGMStOYXZQYWRGMiBOT09QCisKK2luY2x1ZGUgc2F0X3NwZWVjaC5rdGkKK2luY2x1ZGUgc2F0X25hdi5rdGkKKworYmluZCAhVXAgTE5VUAorYmluZCAhRG93biBMTkROCitiaW5kIEhvbWUrIVVwIFRPUF9MRUZUCitiaW5kIEhvbWUrIURvd24gQk9UX0xFRlQKK2JpbmQgQ3Vyc29yKyFVcCBUT1AKK2JpbmQgQ3Vyc29yKyFEb3duIEJPVAorCitiaW5kICFMZWZ0IEZXSU5MVAorYmluZCAhUmlnaHQgRldJTlJUCitiaW5kIEhvbWUrIUxlZnQgTE5CRUcKK2JpbmQgSG9tZSshUmlnaHQgTE5FTkQKK2JpbmQgQ3Vyc29yKyFMZWZ0IEZXSU5MVFNLSVAKK2JpbmQgQ3Vyc29yKyFSaWdodCBGV0lOUlRTS0lQCisKK2JpbmQgUm91dGluZ0tleTEgUk9VVEUKK2JpbmQgUm91dGluZ0tleTIgREVTQ0NIQVIKKworYmluZCBSb3V0aW5nS2V5MSshUm91dGluZ0tleTEgQ0xJUF9DT1BZCitiaW5kIFJvdXRpbmdLZXkyKyFSb3V0aW5nS2V5MiBDTElQX0FQUEVORAorCitiaW5kIEhvbWUrIVJvdXRpbmdLZXkyIFNFVE1BUksKK2JpbmQgSG9tZSshUm91dGluZ0tleTEgR09UT01BUksKK2JpbmQgQ3Vyc29yKyFSb3V0aW5nS2V5MiBQUklOREVOVAorYmluZCBDdXJzb3IrIVJvdXRpbmdLZXkxIE5YSU5ERU5UCisKK2JpbmQgIVN0YXR1czFBIENTUlZJUworYmluZCAhU3RhdHVzMkEgU0tQSURMTlMKK2JpbmQgIVN0YXR1czFCIEFUVFJWSVMKK2JpbmQgIVN0YXR1czJCIERJU1BNRAorYmluZCAhU3RhdHVzMUMgQ0FQQkxJTksKK2JpbmQgIVN0YXR1czJDIFNLUEJMTktXSU5TCisKK2JpbmQgSG9tZSBCQUNLCitiaW5kIEN1cnNvciBIT01FCitiaW5kIEhvbWUrQ3Vyc29yIENTUlRSSworCisKKyMjIyMjIyMjIyMjIyMjIyMjCisjIE1lbnUgQmluZGluZ3MgIworIyMjIyMjIyMjIyMjIyMjIyMKKworY29udGV4dCBtZW51CisKK2JpbmQgIVVwIE1FTlVfUFJFVl9JVEVNCitiaW5kICFEb3duIE1FTlVfTkVYVF9JVEVNCitiaW5kIEhvbWUrIVVwIE1FTlVfRklSU1RfSVRFTQorYmluZCBIb21lKyFEb3duIE1FTlVfTEFTVF9JVEVNCisKK2JpbmQgIUxlZnQgRldJTkxUCitiaW5kICFSaWdodCBGV0lOUlQKK2JpbmQgSG9tZSshTGVmdCBQUkVGTE9BRAorYmluZCBIb21lKyFSaWdodCBQUkVGU0FWRQorCitiaW5kIEhvbWUgTUVOVV9QUkVWX1NFVFRJTkcKK2JpbmQgQ3Vyc29yIE1FTlVfTkVYVF9TRVRUSU5HCitiaW5kIEhvbWUrQ3Vyc29yIFBSRUZNRU5VCmRpZmYgLS1naXQgYS9UYWJsZXMuYnJhaWxsZWJhY2svYWwvc2F0X2xhcmdlLmt0YiBiL1RhYmxlcy5icmFpbGxlYmFjay9hbC9zYXRfbGFyZ2Uua3RiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNiZTc3MGMKLS0tIC9kZXYvbnVsbAorKysgYi9UYWJsZXMuYnJhaWxsZWJhY2svYWwvc2F0X2xhcmdlLmt0YgpAQCAtMCwwICsxLDIyIEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisjICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorIworIyBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisjCisjIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisjCisjIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyMgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorIyBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyMKKyMgV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworIworIyBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKwordGl0bGUgQWx2YSBTYXRlbGxpdGUgNTcwLDU4NAorCitpbmNsdWRlIHNhdF90dW1ibGVycy5rdGkKK2luY2x1ZGUgc2F0X2NvbW1vbi5rdGkKZGlmZiAtLWdpdCBhL1RhYmxlcy5icmFpbGxlYmFjay9hbC9zYXRfbmF2Lmt0aSBiL1RhYmxlcy5icmFpbGxlYmFjay9hbC9zYXRfbmF2Lmt0aQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZDAyNzlkCi0tLSAvZGV2L251bGwKKysrIGIvVGFibGVzLmJyYWlsbGViYWNrL2FsL3NhdF9uYXYua3RpCkBAIC0wLDAgKzEsNTMgQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyMgICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisjCisjIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyMKKyMgQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjIFRoaXMga2V5IHN1YnRhYmxlIGlzIGZvciB0aGUgQWx2YSBTYXRlbGxpdGUgbmF2IGtleXBhZC4KKworYmluZCBOYXZQYWRGMSshVXAgUFJESUZMTgorYmluZCBOYXZQYWRGMSshRG93biBOWERJRkxOCitiaW5kIE5hdlBhZEYyKyFVcCBBVFRSVVAKK2JpbmQgTmF2UGFkRjIrIURvd24gQVRUUkROCisKK2JpbmQgTmF2UGFkRjErIUxlZnQgQ0hSTFQKK2JpbmQgTmF2UGFkRjErIVJpZ2h0IENIUlJUCitiaW5kIE5hdlBhZEYyKyFMZWZ0IEhXSU5MVAorYmluZCBOYXZQYWRGMishUmlnaHQgSFdJTlJUCisKK2JpbmQgTmF2UGFkRjErIVJvdXRpbmdLZXkxIENMSVBfTkVXCitiaW5kIE5hdlBhZEYxKyFSb3V0aW5nS2V5MiBDTElQX0FERAorYmluZCBOYXZQYWRGMishUm91dGluZ0tleTEgQ09QWV9SRUNUCitiaW5kIE5hdlBhZEYyKyFSb3V0aW5nS2V5MiBDT1BZX0xJTkUKKworYmluZCBOYXZQYWRMZWZ0IFBSRUZNRU5VCitiaW5kIE5hdlBhZFJpZ2h0IElORk8KK2JpbmQgTmF2UGFkRjErTmF2UGFkTGVmdCBGUkVFWkUKK2JpbmQgTmF2UGFkRjErTmF2UGFkUmlnaHQgU0lYRE9UUworYmluZCBOYXZQYWRGMitOYXZQYWRMZWZ0IFBBU1RFCitiaW5kIE5hdlBhZEYyK05hdlBhZFJpZ2h0IENTUkpNUF9WRVJUCisKK2JpbmQgTmF2UGFkVXAgUFJQUk9NUFQKK2JpbmQgTmF2UGFkRG93biBOWFBST01QVAorYmluZCBOYXZQYWRGMStOYXZQYWRVcCBQUlBHUlBICitiaW5kIE5hdlBhZEYxK05hdlBhZERvd24gTlhQR1JQSAorYmluZCBOYXZQYWRGMitOYXZQYWRVcCBQUlNFQVJDSAorYmluZCBOYXZQYWRGMitOYXZQYWREb3duIE5YU0VBUkNICisKK2JpbmQgTmF2UGFkRjEgSEVMUAorYmluZCBOYXZQYWRGMiBMRUFSTgorYmluZCBOYXZQYWRGMStOYXZQYWRGMiBSRVNUQVJUQlJMCisKZGlmZiAtLWdpdCBhL1RhYmxlcy5icmFpbGxlYmFjay9hbC9zYXRfc21hbGwua3RiIGIvVGFibGVzLmJyYWlsbGViYWNrL2FsL3NhdF9zbWFsbC5rdGIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGE3MTk0YQotLS0gL2Rldi9udWxsCisrKyBiL1RhYmxlcy5icmFpbGxlYmFjay9hbC9zYXRfc21hbGwua3RiCkBAIC0wLDAgKzEsMjEgQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyMgICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisjCisjIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyMKKyMgQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCit0aXRsZSBBbHZhIFNhdGVsbGl0ZSA1NDQKKworaW5jbHVkZSBzYXRfY29tbW9uLmt0aQpkaWZmIC0tZ2l0IGEvVGFibGVzLmJyYWlsbGViYWNrL2FsL3NhdF9zcGVlY2gua3RpIGIvVGFibGVzLmJyYWlsbGViYWNrL2FsL3NhdF9zcGVlY2gua3RpCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIyNDhlODMKLS0tIC9kZXYvbnVsbAorKysgYi9UYWJsZXMuYnJhaWxsZWJhY2svYWwvc2F0X3NwZWVjaC5rdGkKQEAgLTAsMCArMSwzNCBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorIyAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyMKKyMgQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorIworIyBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorIworIyBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisjIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyMgbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisjCisjIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMgVGhpcyBrZXkgc3VidGFibGUgaXMgZm9yIHRoZSBBbHZhIFNhdGVsbGl0ZSBzcGVlY2gga2V5cGFkLgorCitiaW5kIFNwZWVjaFBhZExlZnQgTVVURQorYmluZCBTcGVlY2hQYWRSaWdodCBTQVlfTElORQorYmluZCBTcGVlY2hQYWRVcCBTQVlfQUJPVkUKK2JpbmQgU3BlZWNoUGFkRG93biBTQVlfQkVMT1cKKworYmluZCBTcGVlY2hQYWRGMitTcGVlY2hQYWRMZWZ0IFNBWV9TTE9XRVIKK2JpbmQgU3BlZWNoUGFkRjIrU3BlZWNoUGFkUmlnaHQgU0FZX0ZBU1RFUgorYmluZCBTcGVlY2hQYWRGMitTcGVlY2hQYWREb3duIFNBWV9TT0ZURVIKK2JpbmQgU3BlZWNoUGFkRjIrU3BlZWNoUGFkVXAgU0FZX0xPVURFUgorCitiaW5kIFNwZWVjaFBhZEYxIFNQS0hPTUUKK2JpbmQgU3BlZWNoUGFkRjIgQVVUT1NQRUFLCitiaW5kIFNwZWVjaFBhZEYxK1NwZWVjaFBhZEYyIFJFU1RBUlRTUEVFQ0gKKwpkaWZmIC0tZ2l0IGEvVGFibGVzLmJyYWlsbGViYWNrL2FsL3NhdF90dW1ibGVycy5rdGkgYi9UYWJsZXMuYnJhaWxsZWJhY2svYWwvc2F0X3R1bWJsZXJzLmt0aQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZjAyMWZiCi0tLSAvZGV2L251bGwKKysrIGIvVGFibGVzLmJyYWlsbGViYWNrL2FsL3NhdF90dW1ibGVycy5rdGkKQEAgLTAsMCArMSwyNiBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorIyAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyMKKyMgQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorIworIyBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorIworIyBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisjIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyMgbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisjCisjIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMgVGhpcyBrZXkgc3VidGFibGUgaXMgZm9yIEFsdmEgU2F0ZWxsaXRlIG1vZGVscyB3aGljaCBoYXZlIHR1bWJsZXIga2V5cy4KK25vdGUgVGhlIHR3byB0aHJlZS1wb3NpdGlvbiwgc2xpZGluZyBrZXlzIGFyZSBuYW1lZCBMZWZ0VHVtYmxlciBhbmQgUmlnaHRUdW1ibGVyLgorCitiaW5kIExlZnRUdW1ibGVyTGVmdCBDSFJMVAorYmluZCBMZWZ0VHVtYmxlclJpZ2h0IENIUlJUCitiaW5kIFJpZ2h0VHVtYmxlckxlZnQgTE5CRUcgICAgIAorYmluZCBSaWdodFR1bWJsZXJSaWdodCBMTkVORAorCmRpZmYgLS1naXQgYS9UYWJsZXMuYnJhaWxsZWJhY2svYWwvdm95YWdlci5rdGIgYi9UYWJsZXMuYnJhaWxsZWJhY2svYWwvdm95YWdlci5rdGIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTc0MDkwZAotLS0gL2Rldi9udWxsCisrKyBiL1RhYmxlcy5icmFpbGxlYmFjay9hbC92b3lhZ2VyLmt0YgpAQCAtMCwwICsxLDIxIEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisjICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorIworIyBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisjCisjIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisjCisjIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyMgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorIyBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyMKKyMgV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworIworIyBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKwordGl0bGUgVm95YWdlciBQcm90b2NvbCBDb252ZXJ0ZXIKKworaW5jbHVkZSAuLi92by9hbGwua3RpCmRpZmYgLS1naXQgYS9UYWJsZXMuYnJhaWxsZWJhY2svYW5kcm9pZC1jaG9yZHMtZ29vZ2xlLmt0aSBiL1RhYmxlcy5icmFpbGxlYmFjay9hbmRyb2lkLWNob3Jkcy1nb29nbGUua3RpCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZiMTE4OWQKLS0tIC9kZXYvbnVsbAorKysgYi9UYWJsZXMuYnJhaWxsZWJhY2svYW5kcm9pZC1jaG9yZHMtZ29vZ2xlLmt0aQpAQCAtMCwwICsxLDE0MSBAQAorIyBUaGlzIGlzIGdvb2dsZSdzIHVuaWZpZWQgc2hvcnRjdXRzIGZvciBicmFpbGxlIGRpc3BsYXlzLgorIyBEZXZpY2VzIHdpdGhvdXQgYnJhaWxsZSBkb3Qga2V5cyBzaG91bGQgZGVmaW5lIHRoZSBzaG9ydGN1dHMgYmFzZWQgb24gdGhlIGtleXMgdGhleSBoYXZlLgorIworIyBjaG9yZDEtY2hvcmQ1LCBjaG9yZDcgYXJlIHJlcXVpcmVkCisjIGNob3JkNiBpcyBjdXJyZW50bHkgdW51c2VkCisjIGNob3JkOCBpcyBvcHRpb25hbAorIyBDVVNUT01fS0VZIGFyZSB1c2VkIGZvciBhbmRyb2lkIG9ubHkgYW5kIHN0YXJ0IGZyb20gS0VZX0ZVTkNUSU9OKzEwMC4KKyMKKyMgU3BhY2UgKyAxMyBpcyB0aGUgcG93ZXItb2ZmIGNob3JkIGZvciBCcmFpbGxlUGVuLCBhbmQgc28gU3BhY2UgKyAxMzc4IGFsc28gaGFzCisjIHRoZSBlZmZlY3Qgb2YgYmVpbmcgYSBwb3dlci1vZmYgY2hvcmQsIHNvIHdlIGF2b2lkIHVzaW5nIHRoYXQuCisjCisjIGNob3JkIGlzIFNwYWNlIGJ5IGRlZmF1bHQsIGJ1dCBjYW4gYmUgY3VzdG9taXplZCBmb3IgZGV2aWNlcyB3aXRob3V0IFNwYWNlLgorIyBjaG9yZDcgYW5kIGNob3JkOCBjYW4gYmUgY3VzdG9taXplZCBmb3IgZGV2aWNlcyB0aGF0IGhhdmUgb25seSBzaXggaW5wdXQKKyMgZG90czsgb3RoZXJ3aXNlLCB0aGV5IHdpbGwgYmUgc2V0IGJ5IGRlZmF1bHQgdG8gRG90NyBhbmQgRG90OC4KKworCisjIE5leHQgaXRlbQorYmluZCBce2Nob3JkNH0rXHtjaG9yZDV9K1x7Y2hvcmQ4fSBLRVlfRlVOQ1RJT04rMTAwCisjIFByZXZpb3VzIGl0ZW0KK2JpbmQgXHtjaG9yZDF9K1x7Y2hvcmQyfStce2Nob3JkN30gS0VZX0ZVTkNUSU9OKzEwMQorIyBOZXh0IGxpbmUKK2JpbmQgXHtjaG9yZH0rXHtjaG9yZDR9IEtFWV9GVU5DVElPTisxMDIKKyMgUHJldmlvdXMgbGluZQorYmluZCBce2Nob3JkfStce2Nob3JkMX0gS0VZX0ZVTkNUSU9OKzEwMworIyBTY3JvbGwgZm9yd2FyZAorYmluZCBce2Nob3JkMX0rXHtjaG9yZDN9K1x7Y2hvcmQ1fStce2Nob3JkOH0gS0VZX0ZVTkNUSU9OKzEwNAorIyBTY3JvbGwgYmFja3dhcmQKK2JpbmQgXHtjaG9yZDJ9K1x7Y2hvcmQ0fStce2Nob3JkNn0rXHtjaG9yZDd9IEtFWV9GVU5DVElPTisxMDUKKyMgVG9wIG9mIHRoZSBwYWdlCitiaW5kIFx7Y2hvcmR9K1x7Y2hvcmQxfStce2Nob3JkMn0rXHtjaG9yZDN9IEtFWV9GVU5DVElPTisxMDYKKyMgQm90dG9tIG9mIHRoZSBwYWdlCitiaW5kIFx7Y2hvcmR9K1x7Y2hvcmQ0fStce2Nob3JkNX0rXHtjaG9yZDZ9IEtFWV9GVU5DVElPTisxMDcKKyMgQmFjayBrZXkKK2JpbmQgXHtjaG9yZH0rXHtjaG9yZDF9K1x7Y2hvcmQyfSBLRVlfRlVOQ1RJT04rMTA4CisjIEhvbWUga2V5CitiaW5kIFx7Y2hvcmR9K1x7Y2hvcmQxfStce2Nob3JkMn0rXHtjaG9yZDV9IEtFWV9GVU5DVElPTisxMDkKKyMgUmVjZW50IGFwcHMga2V5CitiaW5kIFx7Y2hvcmR9K1x7Y2hvcmQxfStce2Nob3JkMn0rXHtjaG9yZDN9K1x7Y2hvcmQ1fSBLRVlfRlVOQ1RJT04rMTEwCisjIE5vdGlmaWNhdGlvbnMgYmFyCitiaW5kIFx7Y2hvcmR9K1x7Y2hvcmQxfStce2Nob3JkM30rXHtjaG9yZDR9K1x7Y2hvcmQ1fSBLRVlfRlVOQ1RJT04rMTExCisjIEtleWJvYXJkIGhlbHAKK2JpbmQgXHtjaG9yZDF9K1x7Y2hvcmQzfStce2Nob3JkN30rXHtjaG9yZDh9IEtFWV9GVU5DVElPTisxMTIKKyMgTmV4dCBoZWFkaW5nCitiaW5kIFx7Y2hvcmQxfStce2Nob3JkMn0rXHtjaG9yZDV9K1x7Y2hvcmQ4fSBLRVlfRlVOQ1RJT04rMTEzCisjIFByZXZpb3VzIGhlYWRpbmcKK2JpbmQgXHtjaG9yZDF9K1x7Y2hvcmQyfStce2Nob3JkNX0rXHtjaG9yZDd9IEtFWV9GVU5DVElPTisxMTQKKyMgTmV4dCBjb250cm9sCitiaW5kIFx7Y2hvcmQxfStce2Nob3JkNH0rXHtjaG9yZDh9IEtFWV9GVU5DVElPTisxMTUKKyMgUHJldmlvdXMgY29udHJvbAorYmluZCBce2Nob3JkMX0rXHtjaG9yZDR9K1x7Y2hvcmQ3fSBLRVlfRlVOQ1RJT04rMTE2CisjIE5leHQgbGluaworYmluZCBce2Nob3JkMX0rXHtjaG9yZDJ9K1x7Y2hvcmQzfStce2Nob3JkOH0gS0VZX0ZVTkNUSU9OKzExNworIyBQcmV2aW91cyBsaW5rCitiaW5kIFx7Y2hvcmQxfStce2Nob3JkMn0rXHtjaG9yZDN9K1x7Y2hvcmQ3fSBLRVlfRlVOQ1RJT04rMTE4CisjIEluY3JlbWVudGFsIFNlYXJjaAorYmluZCBce2Nob3JkfStce2Nob3JkM30rXHtjaG9yZDR9IEtFWV9GVU5DVElPTisxMTkKKyMgRWRpdCBjdXN0b20gbGFiZWwKK2JpbmQgXHtjaG9yZH0rXHtjaG9yZDF9K1x7Y2hvcmQzfStce2Nob3JkNH0rXHtjaG9yZDh9IEtFWV9GVU5DVElPTisxMjAKKyMgU3dpdGNoIHRvIG5leHQgaW5wdXQgbGFuZ3VhZ2UKK2JpbmQgXHtjaG9yZDJ9K1x7Y2hvcmQ0fStce2Nob3JkN30rXHtjaG9yZDh9IEtFWV9GVU5DVElPTisxMjEKKyMgU3dpdGNoIHRvIG5leHQgb3V0cHV0IGxhbmd1YWdlCitiaW5kIFx7Y2hvcmQxfStce2Nob3JkM30rXHtjaG9yZDV9K1x7Y2hvcmQ3fStce2Nob3JkOH0gS0VZX0ZVTkNUSU9OKzEyMgorIyBCcmFpbGxlIGRpc3BsYXkgU2V0dGluZ3MKK2JpbmQgXHtjaG9yZDF9K1x7Y2hvcmQyfStce2Nob3JkN30rXHtjaG9yZDh9IEtFWV9GVU5DVElPTisxMjMKKyMgVGFsa0JhY2sgU2V0dGluZ3MKK2JpbmQgXHtjaG9yZDJ9K1x7Y2hvcmQzfStce2Nob3JkNH0rXHtjaG9yZDV9K1x7Y2hvcmQ3fStce2Nob3JkOH0gS0VZX0ZVTkNUSU9OKzEyNAorIyBRdWljayBTZXR0aW5ncworYmluZCBce2Nob3JkfStce2Nob3JkMX0rXHtjaG9yZDJ9K1x7Y2hvcmQzfStce2Nob3JkNH0rXHtjaG9yZDV9IEtFWV9GVU5DVElPTisxMjUKKyMgQWxsIGFwcHMKK2JpbmQgXHtjaG9yZH0rXHtjaG9yZDF9K1x7Y2hvcmQyfStce2Nob3JkM30rXHtjaG9yZDR9IEtFWV9GVU5DVElPTisxMjYKKyMgT3BlbiBUYWtsQmFjayBNZW51CitiaW5kIFx7Y2hvcmR9K1x7Y2hvcmQxfStce2Nob3JkM30rXHtjaG9yZDR9IEtFWV9GVU5DVElPTisxMjcKKyMgRGVsZXRlIHdoaWxlIGVkaXRpbmcuCitiaW5kIFx7Y2hvcmQ3fSBLRVlfRlVOQ1RJT04rMTI4CisjIEVudGVyIHdoaWxlIGVkaXRpbmcuCitpZlZhciBjaG9yZDggYmluZCBce2Nob3JkOH0gS0VZX0ZVTkNUSU9OKzEyOQorIyBUdXJuIG9mZiBicmFpbGxlIGRpc3BsYXkKK2JpbmQgXHtjaG9yZDF9K1x7Y2hvcmQyfStce2Nob3JkM30rXHtjaG9yZDR9K1x7Y2hvcmQ1fStce2Nob3JkNn0rXHtjaG9yZDd9K1x7Y2hvcmQ4fSBLRVlfRlVOQ1RJT04rMTMwCisjIFByZXZpb3VzIGNoYXJhY3RlcgorYmluZCBce2Nob3JkfStce2Nob3JkM30gS0VZX0ZVTkNUSU9OKzEzMQorIyBOZXh0IGNoYXJhY3RlcgorYmluZCBce2Nob3JkfStce2Nob3JkNn0gS0VZX0ZVTkNUSU9OKzEzMgorIyBQcmV2aW91cyB3b3JkCitiaW5kIFx7Y2hvcmR9K1x7Y2hvcmQyfSBLRVlfRlVOQ1RJT04rMTMzCisjIE5leHQgd29yZAorYmluZCBce2Nob3JkfStce2Nob3JkNX0gS0VZX0ZVTkNUSU9OKzEzNAorIyBQcmV2aW91cyB3aW5kb3cKK2JpbmQgXHtjaG9yZDJ9K1x7Y2hvcmQ0fStce2Nob3JkNX0rXHtjaG9yZDZ9K1x7Y2hvcmQ3fSBLRVlfRlVOQ1RJT04rMTM1CisjIE5leHQgd2luZG93CitiaW5kIFx7Y2hvcmQyfStce2Nob3JkNH0rXHtjaG9yZDV9K1x7Y2hvcmQ2fStce2Nob3JkOH0gS0VZX0ZVTkNUSU9OKzEzNgorIyBEZWxldGUgYSB3b3JkCitiaW5kIFx7Y2hvcmR9K1x7Y2hvcmQyfStce2Nob3JkN30gS0VZX0ZVTkNUSU9OKzEzNworIyBUb2dnbGUgdm9pY2UgZmVlZGJhY2sgKG11dGUvdW5tdXRlKQorYmluZCBce2Nob3JkMX0rXHtjaG9yZDN9K1x7Y2hvcmQ0fStce2Nob3JkN30rXHtjaG9yZDh9IEtFWV9GVU5DVElPTisxMzgKKyMgUHJldmlvdXMgcmVhZGluZyBjb250cm9sCitiaW5kIFx7Y2hvcmQyfStce2Nob3JkM30rXHtjaG9yZDd9IEtFWV9GVU5DVElPTisxMzkKKyMgTmV4dCByZWFkaW5nIGNvbnRyb2wKK2JpbmQgXHtjaG9yZDV9K1x7Y2hvcmQ2fStce2Nob3JkOH0gS0VZX0ZVTkNUSU9OKzE0MAorIyBNb3ZlIG5hdmlnYXRpb24gZm9jdXMgYmFja3dhcmQgb3IgYWRqdXN0IHJlYWRpbmcgY29udHJvbCB1cAorYmluZCBce2Nob3JkM30rXHtjaG9yZDd9IEtFWV9GVU5DVElPTisxNDEKKyMgTW92ZSBuYXZpZ2F0aW9uIGZvY3VzIGZvcndhcmQgb3IgYWRqdXN0IHJlYWRpbmcgY29udHJvbCBkb3duCitiaW5kIFx7Y2hvcmQ2fStce2Nob3JkOH0gS0VZX0ZVTkNUSU9OKzE0MgorIyBTd2l0Y2ggZ3JhZGUKK2JpbmQgXHtjaG9yZH0rXHtjaG9yZDF9K1x7Y2hvcmQyfStce2Nob3JkNH0rXHtjaG9yZDV9IEtFWV9GVU5DVElPTisxNDMKKyMgTG9uZyBwcmVzcyBjdXJyZW50CitiaW5kIFx7Y2hvcmR9K1x7Y2hvcmQ4fSBLRVlfRlVOQ1RJT04rMTQ0CisjIFN0b3AgcmVhZGluZworYmluZCBce2Nob3JkN30rXHtjaG9yZDh9IEtFWV9GVU5DVElPTisxNDUKKyMgQ3V0CitiaW5kIFx7Y2hvcmR9K1x7Y2hvcmQxfStce2Nob3JkM30rXHtjaG9yZDR9K1x7Y2hvcmQ2fStce2Nob3JkOH0gS0VZX0ZVTkNUSU9OKzE0NgorIyBDb3B5CitiaW5kIFx7Y2hvcmR9K1x7Y2hvcmQxfStce2Nob3JkNH0rXHtjaG9yZDh9IEtFWV9GVU5DVElPTisxNDcKKyMgUGFzdGUKK2JpbmQgXHtjaG9yZH0rXHtjaG9yZDF9K1x7Y2hvcmQyfStce2Nob3JkM30rXHtjaG9yZDZ9K1x7Y2hvcmQ4fSBLRVlfRlVOQ1RJT04rMTQ4CisjIFNlbGVjdCBhbGwKK2JpbmQgXHtjaG9yZH0rXHtjaG9yZDF9K1x7Y2hvcmQyfStce2Nob3JkM30rXHtjaG9yZDR9K1x7Y2hvcmQ1fStce2Nob3JkNn0rXHtjaG9yZDh9IEtFWV9GVU5DVElPTisxNDkKKyMgU2VsZWN0IHByZXZpb3VzIGNoYXJhY3RlcgorYmluZCBce2Nob3JkfStce2Nob3JkM30rXHtjaG9yZDh9IEtFWV9GVU5DVElPTisxNTAKKyMgU2VsZWN0IE5leHQgQ2hhcmFjdGVyCitiaW5kIFx7Y2hvcmR9K1x7Y2hvcmQ2fStce2Nob3JkOH0gS0VZX0ZVTkNUSU9OKzE1MQorIyBTZWxlY3QgcHJldmlvdXMgd29yZAorYmluZCBce2Nob3JkfStce2Nob3JkMn0rXHtjaG9yZDh9IEtFWV9GVU5DVElPTisxNTIKKyMgU2VsZWN0IG5leHQgd29yZAorYmluZCBce2Nob3JkfStce2Nob3JkNX0rXHtjaG9yZDh9IEtFWV9GVU5DVElPTisxNTMKKyMgU2VsZWN0IGN1cnJlbnQgdG8gc3RhcnQKK2JpbmQgXHtjaG9yZH0rXHtjaG9yZDF9K1x7Y2hvcmQyfStce2Nob3JkM30rXHtjaG9yZDh9IEtFWV9GVU5DVElPTisxNTkKKyMgU2VsZWN0IGN1cnJlbnQgdG8gZW5kCitiaW5kIFx7Y2hvcmR9K1x7Y2hvcmQ0fStce2Nob3JkNX0rXHtjaG9yZDZ9K1x7Y2hvcmQ4fSBLRVlfRlVOQ1RJT04rMTYwCisKKyMgQXMgdGhlIHRleHQgc2VsZWN0aW9uIGZvciBsaW5lIGdyYW51bGFyaXR5IG1vdmVtZW50IGRvZXMgbm90IHdvcmssCisjIHdlIG1hc2sgb2ZmIHRoZSBhY3Rpb24gb2Ygc2VsZWN0aW5nIHRleHQgYnkgbGluZS4KKyMgU2VsZWN0IHByZXZpb3VzIGxpbmUKKyMgYmluZCBce2Nob3JkfStce2Nob3JkMX0rXHtjaG9yZDh9IEtFWV9GVU5DVElPTisxNTQKKyMgU2VsZWN0IG5leHQgbGluZQorIyBiaW5kIFx7Y2hvcmR9K1x7Y2hvcmQ0fStce2Nob3JkOH0gS0VZX0ZVTkNUSU9OKzE1NQorIyBUb2dnbGUgYXV0byBzY3JvbGwKK2JpbmQgXHtjaG9yZH0rXHtjaG9yZDF9K1x7Y2hvcmQyfStce2Nob3JkNH0rXHtjaG9yZDV9K1x7Y2hvcmQ2fSBLRVlfRlVOQ1RJT04rMTU2CisjIFBsYXkgb3IgcGF1c2UgbWVkaWEKK2JpbmQgXHtjaG9yZH0rXHtjaG9yZDd9K1x7Y2hvcmQ4fSBLRVlfRlVOQ1RJT04rMTU3CisjIFN3aXRjaCB0byBuZXh0IGlucHV0IG1ldGhvZAorYmluZCBce2Nob3JkfStce2Nob3JkMX0rXHtjaG9yZDN9K1x7Y2hvcmQ4fSBLRVlfRlVOQ1RJT04rMTU4CmRpZmYgLS1naXQgYS9UYWJsZXMuYnJhaWxsZWJhY2svYW5kcm9pZC1jaG9yZHMua3RpIGIvVGFibGVzLmJyYWlsbGViYWNrL2FuZHJvaWQtY2hvcmRzLmt0aQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MDQ5N2E5Ci0tLSAvZGV2L251bGwKKysrIGIvVGFibGVzLmJyYWlsbGViYWNrL2FuZHJvaWQtY2hvcmRzLmt0aQpAQCAtMCwwICsxLDg4IEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisjICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorIworIyBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisjCisjIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisjCisjIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyMgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorIyBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyMKKyMgV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworIworIyBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworYXNzaWduIHByZWZpeCBce2Nob3JkfURvdDcrRG90OAorI092ZXJyaWRkZW4gYnkgQnJhaWxsZUJhY2suCisjYmluZCBce3ByZWZpeH0rRG90MStEb3QyK0RvdDMrRG90NCtEb3Q1K0RvdDYgR1VJX0JSTF9BQ1RJT05TCisKK2JpbmQgXHtwcmVmaXh9K1x7YX0gVFhUU0VMX0FMTAorYmluZCBce3ByZWZpeH0rRG90NCBUWFRTRUxfQ0xFQVIKK2JpbmQgXHtwcmVmaXh9K1x7Y30gSE9TVF9DT1BZCitiaW5kIFx7cHJlZml4fStce3Z9IEhPU1RfUEFTVEUKK2JpbmQgXHtwcmVmaXh9K1x7eH0gSE9TVF9DVVQKKworI092ZXJyaWRkZW4gYnkgQnJhaWxsZUJhY2suCisjYmluZCBce3ByZWZpeH0rXHtifSBHVUlfQkFDSworYmluZCBce3ByZWZpeH0rXHtofSBHVUlfSE9NRQorI092ZXJyaWRkZW4gYnkgQnJhaWxsZUJhY2suCisjYmluZCBce3ByZWZpeH0rXHtpfSBJTkRJQ0FUT1JTCisjT3ZlcnJpZGRlbiBieSBCcmFpbGxlQmFjay4KKyNiaW5kIFx7cHJlZml4fStce219IEdVSV9BUFBfTUVOVQorYmluZCBce3ByZWZpeH0rXHtufSBHVUlfQVBQX0FMRVJUUworI092ZXJyaWRkZW4gYnkgQnJhaWxsZUJhY2suCisjYmluZCBce3ByZWZpeH0rXHtvfSBHVUlfREVWX09QVElPTlMKK2JpbmQgXHtwcmVmaXh9K1x7cn0gR1VJX0FQUF9MSVNUCitiaW5kIFx7cHJlZml4fStce3N9IEdVSV9ERVZfU0VUVElOR1MKKyNPdmVycmlkZGVuIGJ5IEJyYWlsbGVCYWNrLgorI2JpbmQgXHtwcmVmaXh9K1x7dH0gR1VJX1RJVExFCisKK2JpbmQgXHtwcmVmaXh9K0RvdDMrRG90NiBHVUlfQVJFQV9BQ1RWCitiaW5kIFx7cHJlZml4fStEb3QzIEdVSV9BUkVBX1BSRVYKK2JpbmQgXHtwcmVmaXh9K0RvdDYgR1VJX0FSRUFfTkVYVAorCitiaW5kIFx7cHJlZml4fStEb3QyIEdVSV9JVEVNX1BSRVYKK2JpbmQgXHtwcmVmaXh9K0RvdDUgR1VJX0lURU1fTkVYVAorCitiaW5kIFx7cHJlZml4fStEb3QyK0RvdDMgR1VJX0lURU1fRlJTVAorYmluZCBce3ByZWZpeH0rRG90NStEb3Q2IEdVSV9JVEVNX0xBU1QKKworI1VudXNlZCBieSBCcmFpbGxlYmFjaworI2JpbmQgXHtwcmVmaXh9K0RvdDIrRG90NSBDT05URVhUK2Nocm9tZQorI2NvbnRleHQgY2hyb21lIFdlYiBQYWdlIE5hdmlnYXRpb24KKyNiaW5kIERvdDcrRG90OCBDT05URVhUK2RlZmF1bHQKKworc3VwZXJpbXBvc2UgbWV0YQorbWFwIERvdDEgRE9UMQorbWFwIERvdDIgRE9UMgorbWFwIERvdDMgRE9UMworbWFwIERvdDQgRE9UNAorbWFwIERvdDUgRE9UNQorbWFwIERvdDYgRE9UNgorbWFwIERvdDcgRE9UNworbWFwIERvdDggRE9UOAorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQnJhaWxsZUJhY2sgQmluZGluZ3MgIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMgY2hvcmQgaXMgU3BhY2UgYnkgZGVmYXVsdCwgYnV0IGNhbiBiZSBjdXN0b21pemVkIGZvciBkZXZpY2VzIHdpdGhvdXQgU3BhY2UuCisjCisjIGNob3JkNyBhbmQgY2hvcmQ4IGNhbiBiZSBjdXN0b21pemVkIGZvciBkZXZpY2VzIHRoYXQgaGF2ZSBvbmx5IHNpeCBpbnB1dAorIyBkb3RzOyBvdGhlcndpc2UsIHRoZXkgd2lsbCBiZSBzZXQgYnkgZGVmYXVsdCB0byBEb3Q3IGFuZCBEb3Q4LgorCithc3NpZ25EZWZhdWx0IGNob3JkIFNwYWNlCithc3NpZ24gY2hvcmQxIERvdDEKK2Fzc2lnbiBjaG9yZDIgRG90MgorYXNzaWduIGNob3JkMyBEb3QzCithc3NpZ24gY2hvcmQ0IERvdDQKK2Fzc2lnbiBjaG9yZDUgRG90NQorYXNzaWduIGNob3JkNiBEb3Q2Cithc3NpZ25EZWZhdWx0IGNob3JkNyBEb3Q3Cithc3NpZ25EZWZhdWx0IGNob3JkOCBEb3Q4CisKK2luY2x1ZGUgYW5kcm9pZC1jaG9yZHMtZ29vZ2xlLmt0aQpkaWZmIC0tZ2l0IGEvVGFibGVzLmJyYWlsbGViYWNrL2JtL05MU19ab29tYXgua3RiIGIvVGFibGVzLmJyYWlsbGViYWNrL2JtL05MU19ab29tYXgua3RiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM0ZjEyZjYKLS0tIC9kZXYvbnVsbAorKysgYi9UYWJsZXMuYnJhaWxsZWJhY2svYm0vTkxTX1pvb21heC5rdGIKQEAgLTAsMCArMSwxMDcgQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyMgICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisjCisjIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyMKKyMgQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCit0aXRsZSBOTFMgZVJlYWRlciBab29tYXgKKworbm90ZSBBbiBlaWdodC1kb3Qgc3RhbmRhcmQgYnJhaWxsZSBrZXlib2FyZCBpcyBhbG9uZyB0aGUgYmFjayBlZGdlIG9mIHRoZSB0b3AuCitub3RlICogRnJvbSBsZWZ0IHRvIHJpZ2h0LCBpdHMga2V5cyBhcmU6IERvdDcsIERvdDMsIERvdDIsIERvdDEsIERvdDQsIERvdDUsIERvdDYsIERvdDguCitub3RlICogVGhlIFNwYWNlIGtleSBpcyBpbiBiZXR3ZWVuIERvdDEgYW5kIERvdDQuCisKK25vdGUgVGhlIHR3byByb3VuZCBrZXlzIGF0IGVhY2ggZW5kIG9mIHRoZSBmcm9udCBhcmUgc3lzdGVtIGtleXMuIEZyb20gbGVmdCB0byByaWdodDoKK25vdGUgKiB0aGUgdHdvIG9uIHRoZSBsZWZ0IGFyZSBTMSBhbmQgUzIsIGFuZCB0aGUgdHdvIG9uIHRoZSByaWdodCBhcmUgUzMgYW5kIFM0LgorCithc3NpZ24gc3BhY2UgU3BhY2UKK2luY2x1ZGUgbmF2cGFkLmt0aQorbm90ZSBUaGVyZSdzIGEgcmVjdGFuZ3VsYXIga2V5IG9uIGVpdGhlciBzaWRlIG9mIHRoZSBuYXZpZ2F0aW9uIHBhZC4KK25vdGUgKiBUaGUgb25lIHRvIHRoZSBsZWZ0IGlzIG5hbWVkIEJMLCBhbmQgdGhlIG9uZSB0byB0aGUgcmlnaHQgaXMgbmFtZWQgQlIuCisKK2JpbmQgQkwgS0VZX0JBQ0tTUEFDRQorYmluZCBCTCtSb3V0aW5nS2V5IFNFVExFRlQKKworbWFwIFMxIEdVSQorbWFwIFMyIENPTlRST0wKK21hcCBTMyBNRVRBCittYXAgUzQgQUxUR1IKKworYmluZCBTMSBIRUxQCitiaW5kIFMyIFRJTUUKK2JpbmQgUzMgSU5GTworYmluZCBTNCBMRUFSTgorCitiaW5kIEJMK1NlbGVjdCBQUkVGTUVOVQorYmluZCBCTCtVcCBQUkVGTE9BRAorYmluZCBCTCtEb3duIFBSRUZTQVZFCisKK2JpbmQgQkwrTGVmdCBQUk5CV0lOCitiaW5kIEJMK1JpZ2h0IE5YTkJXSU4KKworYmluZCBTZWxlY3QrTGVmdCBGV0lOTFRTS0lQCitiaW5kIFNlbGVjdCtSaWdodCBGV0lOUlRTS0lQCisKK2JpbmQgTGVmdCtVcCBUT1BfTEVGVAorYmluZCBMZWZ0K0Rvd24gQk9UX0xFRlQKKworYmluZCBSaWdodCtVcCBUT1AKK2JpbmQgUmlnaHQrRG93biBCT1QKKworYmluZCBTMStVcCBBVFRSVVAKK2JpbmQgUzErRG93biBBVFRSRE4KKworYmluZCBTMitVcCBQUkRJRkxOCitiaW5kIFMyK0Rvd24gTlhESUZMTgorCitiaW5kIFMzK1VwIFBSUFJPTVBUCitiaW5kIFMzK0Rvd24gTlhQUk9NUFQKKworYmluZCBTNCtVcCBQUlBHUlBICitiaW5kIFM0K0Rvd24gTlhQR1JQSAorCitiaW5kIFMxK0xlZnQgTE5CRUcKK2JpbmQgUzErUmlnaHQgTE5FTkQKKworYmluZCBTMitMZWZ0IENIUkxUCitiaW5kIFMyK1JpZ2h0IENIUlJUCisKK2JpbmQgUzMrTGVmdCBIV0lOTFQKK2JpbmQgUzMrUmlnaHQgSFdJTlJUCisKK2JpbmQgUzQrTGVmdCBQUlNFQVJDSAorYmluZCBTNCtSaWdodCBOWFNFQVJDSAorCitiaW5kIFMxK1JvdXRpbmdLZXkgUFJESUZDSEFSCitiaW5kIFMyK1JvdXRpbmdLZXkgTlhESUZDSEFSCisKK2JpbmQgUzMrUm91dGluZ0tleSBQUklOREVOVAorYmluZCBTNCtSb3V0aW5nS2V5IE5YSU5ERU5UCisKK2JpbmQgU2VsZWN0K1MxIEFUVFJWSVMKK2JpbmQgU2VsZWN0K1MyIENTUlZJUworYmluZCBTZWxlY3QrUzMgQ1NSVFJLCitiaW5kIFNlbGVjdCtTNCBTSVhET1RTCisKK2JpbmQgQkwrUzMgRElTUE1ECitiaW5kIEJMK1M0IEZSRUVaRQorCitiaW5kIExlZnQrUmlnaHQgUEFTVEUKK2JpbmQgUzIrUzMgQ1NSSk1QX1ZFUlQKKworaW5jbHVkZSBkaXNwbGF5Ni5rdGkKK2luY2x1ZGUgcm91dGluZzYua3RpCisKK2Fzc2lnbiBzcGVlY2ggQkwrCitpbmNsdWRlIC4uL3NwZWVjaC5rdGkKZGlmZiAtLWdpdCBhL1RhYmxlcy5icmFpbGxlYmFjay9ibS9iMmcua3RiIGIvVGFibGVzLmJyYWlsbGViYWNrL2JtL2IyZy5rdGIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYThiODc2YwotLS0gL2Rldi9udWxsCisrKyBiL1RhYmxlcy5icmFpbGxlYmFjay9ibS9iMmcua3RiCkBAIC0wLDAgKzEsNDcgQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyMgICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisjCisjIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyMKKyMgQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCit0aXRsZSBOQlAgQjJHCisKK25vdGUgUHJlc3MgU3BhY2Ugd2hpbGUgaG9sZGluZyBCYWNrd2FyZCB0byBzd2l0Y2ggdG8gbmF2aWdhdGlvbiBtb2RlLgorbm90ZSBJbiBuYXZpZ2F0aW9uIG1vZGU6IEJhY2t3YXJkIGlzIEYxLCBGb3J3YXJkIGlzIEY0LCBEb3RzMS02IGFyZSBkaXNwbGF5IGtleXMgMS02LCBEb3Q3IGlzIEYyLCBEb3Q4IGlzIEYzLgorbm90ZSBQcmVzcyBTcGFjZSB3aGlsZSBob2xkaW5nIEZvcndhcmQgdG8gc3dpdGNoIHRvIGtleWJvYXJkIG1vZGUuCitub3RlIEluIGtleWJvYXJkIG1vZGU6IEJhY2t3YXJkIGlzIEI5LCBGb3J3YXJkIGlzIEIxMCwgU3BhY2UgaXMgQjExLgorCitpbmNsdWRlIGQ2Lmt0aQoraW5jbHVkZSByb3V0aW5nNi5rdGkKKworYmluZCBGMSBGV0lOTFQKK2JpbmQgRjQgRldJTlJUCisKK2JpbmQgQjkgRldJTkxUCitiaW5kIEIxMCBGV0lOUlQKKworYXNzaWduIHNwYWNlIEIxMQorYXNzaWduIHByZXNzIFNlbGVjdAoraW5jbHVkZSBuYXZwYWQua3RpCisKK2JpbmQgQjkrUm91dGluZ0tleSBTRVRMRUZUCitiaW5kIEIxMCtSb3V0aW5nS2V5IFNXSVRDSFZUCisKK2JpbmQgQjExK1VwIFRPUAorYmluZCBCMTErRG93biBCT1QKK2JpbmQgQjExK0xlZnQgRldJTkxUU0tJUAorYmluZCBCMTErUmlnaHQgRldJTlJUU0tJUAorYmluZCBCMTErU2VsZWN0IFBBU1RFCisKZGlmZiAtLWdpdCBhL1RhYmxlcy5icmFpbGxlYmFjay9ibS9iOWIxMC5rdGkgYi9UYWJsZXMuYnJhaWxsZWJhY2svYm0vYjliMTAua3RpCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg4MjBiNWMKLS0tIC9kZXYvbnVsbAorKysgYi9UYWJsZXMuYnJhaWxsZWJhY2svYm0vYjliMTAua3RpCkBAIC0wLDAgKzEsMzQgQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyMgICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisjCisjIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyMKKyMgQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitub3RlIEI5IGFuZCBCMTAgYXJlIHRoZSBrZXlzIGltbWVkaWF0ZWx5IHRvIHRoZSBsZWZ0IGFuZCByaWdodCBvZiB0aGUgam95c3RpY2suCisKK21hcCBCOSBTUEFDRQorYXNzaWduIHNwYWNlIEIxMAoraW5jbHVkZSBqb3lzdGljay5rdGkKK2JpbmQgQjkrUm91dGluZ0tleSBTRVRMRUZUCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBCcmFpbGxlQmFjayBCaW5kaW5ncyAjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworYXNzaWduIGNob3JkIEI5CitpbmNsdWRlIC4uL2FuZHJvaWQtY2hvcmRzLmt0aQorCithc3NpZ24gY2hvcmQgQjEwCitpbmNsdWRlIC4uL2FuZHJvaWQtY2hvcmRzLmt0aQpkaWZmIC0tZ2l0IGEvVGFibGVzLmJyYWlsbGViYWNrL2JtL2I5YjExYjEwLmt0aSBiL1RhYmxlcy5icmFpbGxlYmFjay9ibS9iOWIxMWIxMC5rdGkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjU5ZjdlYQotLS0gL2Rldi9udWxsCisrKyBiL1RhYmxlcy5icmFpbGxlYmFjay9ibS9iOWIxMWIxMC5rdGkKQEAgLTAsMCArMSwzOCBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorIyAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyMKKyMgQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorIworIyBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorIworIyBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisjIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyMgbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisjCisjIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK25vdGUgQjkgYW5kIEIxMCBhcmUgdGhlIGtleXMgaW1tZWRpYXRlbHkgdG8gdGhlIGxlZnQgYW5kIHJpZ2h0IG9mIHRoZSBqb3lzdGljay4KK25vdGUgKiBJZiBlaXRoZXIgb3IgYm90aCBhcmUgdXNlZCBpbiBhIGNvbWJpbmF0aW9uIHRoYXQgaW5jbHVkZXMgYXQgbGVhc3QKK25vdGUgKiBvbmUgb2YgdGhlIERvdDEtNiBrZXlzIHdoaWxlIHRoZSBkZXZpY2UgaXMgaW4gOC1kb3QgYnJhaWxsZSBtb2RlCitub3RlICogdGhlbiB0aGV5IGJlY29tZSB0aGUgRG90NyBhbmQgRG90OCBrZXlzLgorbm90ZSBCMTEgaXMgdGhlIGtleSBiZXR3ZWVuIHRoZSBEb3QxIGFuZCBEb3Q0IGtleXMuCisKK2JpbmQgQjkgS0VZX0JBQ0tTUEFDRQorYmluZCBCMTAgS0VZX0VOVEVSCisKK2Fzc2lnbiBzcGFjZSBCMTEKK2luY2x1ZGUgam95c3RpY2sua3RpCitiaW5kIEI5K1JvdXRpbmdLZXkgU0VUTEVGVAorYmluZCBCMTArUm91dGluZ0tleSBTV0lUQ0hWVAorCitiaW5kIEIxMStVcCBUT1AKK2JpbmQgQjExK0Rvd24gQk9UCitiaW5kIEIxMStMZWZ0IEZXSU5MVFNLSVAKK2JpbmQgQjExK1JpZ2h0IEZXSU5SVFNLSVAKK2JpbmQgQjExK1ByZXNzIFBBU1RFCisKZGlmZiAtLWdpdCBhL1RhYmxlcy5icmFpbGxlYmFjay9ibS9jb21tYW5kLmt0aSBiL1RhYmxlcy5icmFpbGxlYmFjay9ibS9jb21tYW5kLmt0aQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MmJkZDBiCi0tLSAvZGV2L251bGwKKysrIGIvVGFibGVzLmJyYWlsbGViYWNrL2JtL2NvbW1hbmQua3RpCkBAIC0wLDAgKzEsMzYgQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyMgICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisjCisjIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyMKKyMgQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjIFRoaXMga2V5IHN1YnRhYmxlIGlzIGZvciBCYXVtIGRpc3BsYXlzIHdoaWNoIGhhdmUgY29tbWFuZCBrZXlzLgorbm90ZSBUaGUgY29tbWFuZCBrZXlzIGFyZSBpbiB0aGUgbWlkZGxlLCBqdXN0IGJlaGluZCB0aGUgY3Vyc29yIHJvdXRpbmcga2V5cywKK25vdGUgYW5kLCBmcm9tIGxlZnQgdG8gcmlnaHQsIGFyZSBuYW1lZCBDb21tYW5kMSB0aHJvdWdoIENvbW1hbmQ3LgorCittYXAgQ29tbWFuZDQgU1BBQ0UKK21hcCBDb21tYW5kMyBET1QxCittYXAgQ29tbWFuZDIgRE9UMgorbWFwIENvbW1hbmQxIERPVDMKK21hcCBDb21tYW5kNSBET1Q0CittYXAgQ29tbWFuZDYgRE9UNQorbWFwIENvbW1hbmQ3IERPVDYKKworYmluZCBDb21tYW5kNCtDb21tYW5kNSBLRVlfRU5URVIKK2JpbmQgQ29tbWFuZDQrQ29tbWFuZDIgS0VZX0JBQ0tTUEFDRQorYmluZCBDb21tYW5kNCtDb21tYW5kNiBLRVlfVEFCCitiaW5kIENvbW1hbmQ0K0NvbW1hbmQxIEtFWV9DVVJTT1JfTEVGVAorYmluZCBDb21tYW5kNCtDb21tYW5kNyBLRVlfQ1VSU09SX1JJR0hUCisKZGlmZiAtLWdpdCBhL1RhYmxlcy5icmFpbGxlYmFjay9ibS9jb25uZWN0Lmt0YiBiL1RhYmxlcy5icmFpbGxlYmFjay9ibS9jb25uZWN0Lmt0YgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNGU1YzViCi0tLSAvZGV2L251bGwKKysrIGIvVGFibGVzLmJyYWlsbGViYWNrL2JtL2Nvbm5lY3Qua3RiCkBAIC0wLDAgKzEsMjMgQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyMgICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisjCisjIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyMKKyMgQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCit0aXRsZSBCYXVtIFZhcmlvQ29ubmVjdCAvIEhXRyBCcmFpbGxlQ29ubmVjdAorCitpbmNsdWRlIGRpc3BsYXk2Lmt0aQoraW5jbHVkZSByb3V0aW5nNi5rdGkKK2luY2x1ZGUgYjliMTAua3RpCmRpZmYgLS1naXQgYS9UYWJsZXMuYnJhaWxsZWJhY2svYm0vY29ubnkua3RiIGIvVGFibGVzLmJyYWlsbGViYWNrL2JtL2Nvbm55Lmt0YgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZmMyZjAzCi0tLSAvZGV2L251bGwKKysrIGIvVGFibGVzLmJyYWlsbGViYWNrL2JtL2Nvbm55Lmt0YgpAQCAtMCwwICsxLDIzIEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisjICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorIworIyBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisjCisjIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisjCisjIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyMgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorIyBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyMKKyMgV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworIworIyBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKwordGl0bGUgQmF1bSBDb25ueQorCitpbmNsdWRlIGRpc3BsYXk2Lmt0aQoraW5jbHVkZSByb3V0aW5nNi5rdGkKK2luY2x1ZGUgYjliMTFiMTAua3RpCmRpZmYgLS1naXQgYS9UYWJsZXMuYnJhaWxsZWJhY2svYm0vZDYua3RpIGIvVGFibGVzLmJyYWlsbGViYWNrL2JtL2Q2Lmt0aQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44M2RhNDg5Ci0tLSAvZGV2L251bGwKKysrIGIvVGFibGVzLmJyYWlsbGViYWNrL2JtL2Q2Lmt0aQpAQCAtMCwwICsxLDg2IEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisjICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorIworIyBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisjCisjIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisjCisjIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyMgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorIyBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyMKKyMgV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworIworIyBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworYmluZCBEaXNwbGF5MiBGV0lOTFQKK2JpbmQgRGlzcGxheTUgRldJTlJUCisKK2JpbmQgRGlzcGxheTErRGlzcGxheTMgQ0hSTFQKK2JpbmQgRGlzcGxheTQrRGlzcGxheTYgQ0hSUlQKKworYmluZCBEaXNwbGF5MStEaXNwbGF5MitEaXNwbGF5MyBMTkJFRworYmluZCBEaXNwbGF5NCtEaXNwbGF5NStEaXNwbGF5NiBMTkVORAorCitiaW5kIERpc3BsYXk0IExOVVAKK2JpbmQgRGlzcGxheTYgTE5ETgorCitiaW5kIERpc3BsYXkxK0Rpc3BsYXk0IFRPUAorYmluZCBEaXNwbGF5MytEaXNwbGF5NiBCT1QKKworYmluZCBEaXNwbGF5MitEaXNwbGF5NCBUT1BfTEVGVAorYmluZCBEaXNwbGF5MitEaXNwbGF5NiBCT1RfTEVGVAorCitiaW5kIERpc3BsYXk1K0Rpc3BsYXk0IFBSRElGTE4KK2JpbmQgRGlzcGxheTUrRGlzcGxheTYgTlhESUZMTgorCitiaW5kIERpc3BsYXkyK0Rpc3BsYXkxIEFUVFJVUAorYmluZCBEaXNwbGF5MitEaXNwbGF5MyBBVFRSRE4KKworYmluZCBEaXNwbGF5MitEaXNwbGF5NStEaXNwbGF5MStEaXNwbGF5NCBQUlBST01QVAorYmluZCBEaXNwbGF5MitEaXNwbGF5NStEaXNwbGF5MytEaXNwbGF5NiBOWFBST01QVAorCitiaW5kIERpc3BsYXkyK0Rpc3BsYXk1K0Rpc3BsYXk0IFBSUEdSUEgKK2JpbmQgRGlzcGxheTIrRGlzcGxheTUrRGlzcGxheTYgTlhQR1JQSAorCitiaW5kIERpc3BsYXkyK0Rpc3BsYXk0K0Rpc3BsYXk2K0Rpc3BsYXkxIFBSU0VBUkNICitiaW5kIERpc3BsYXkyK0Rpc3BsYXk0K0Rpc3BsYXk2K0Rpc3BsYXkzIE5YU0VBUkNICisKK2JpbmQgRGlzcGxheTEgQ1NSVFJLK29uCitiaW5kIERpc3BsYXkzIENTUlRSSytvZmYKKworYmluZCBEaXNwbGF5MStEaXNwbGF5NiBCQUNLCisKK2JpbmQgRGlzcGxheTIrRGlzcGxheTQrRGlzcGxheTYgSE9NRQorYmluZCBEaXNwbGF5MStEaXNwbGF5MytEaXNwbGF5NSBTUEtIT01FCisKK2JpbmQgRGlzcGxheTErRGlzcGxheTMrRGlzcGxheTQrRGlzcGxheTYgQ1NSSk1QX1ZFUlQKK2JpbmQgRGlzcGxheTIrRGlzcGxheTUgSU5GTworCitiaW5kIERpc3BsYXkxK0Rpc3BsYXk0K0Rpc3BsYXk1IERJU1BNRAorYmluZCBEaXNwbGF5MStEaXNwbGF5NSBUSU1FCitiaW5kIERpc3BsYXkxK0Rpc3BsYXkyK0Rpc3BsYXk0IEZSRUVaRQorYmluZCBEaXNwbGF5MStEaXNwbGF5MitEaXNwbGF5NSBIRUxQCitiaW5kIERpc3BsYXkxK0Rpc3BsYXkzK0Rpc3BsYXk0IFBSRUZNRU5VCitiaW5kIERpc3BsYXkxK0Rpc3BsYXkyK0Rpc3BsYXkzK0Rpc3BsYXk0IFBBU1RFCitiaW5kIERpc3BsYXkxK0Rpc3BsYXkyK0Rpc3BsYXkzK0Rpc3BsYXk1IFBSRUZMT0FECitiaW5kIERpc3BsYXkyK0Rpc3BsYXkzK0Rpc3BsYXk0IFJFU1RBUlRTUEVFQ0gKK2JpbmQgRGlzcGxheTIrRGlzcGxheTMrRGlzcGxheTQrRGlzcGxheTUgQVRUUlZJUworYmluZCBEaXNwbGF5MitEaXNwbGF5NCtEaXNwbGF5NStEaXNwbGF5NiBQUkVGU0FWRQorCitiaW5kIERpc3BsYXkyK0Rpc3BsYXkzK0Rpc3BsYXk1IFNJWERPVFMrb24KK2JpbmQgRGlzcGxheTIrRGlzcGxheTMrRGlzcGxheTYgU0lYRE9UUytvZmYKKworYmluZCBEaXNwbGF5MStEaXNwbGF5NCtEaXNwbGF5NStEaXNwbGF5NiBMRUFSTgorYmluZCBEaXNwbGF5MStEaXNwbGF5MitEaXNwbGF5MytEaXNwbGF5NiBTV0lUQ0hWVF9ORVhUCitiaW5kIERpc3BsYXkzK0Rpc3BsYXk0K0Rpc3BsYXk1K0Rpc3BsYXk2IFNXSVRDSFZUX1BSRVYKKworYmluZCBEaXNwbGF5MytEaXNwbGF5NCBNVVRFCitiaW5kIERpc3BsYXkzK0Rpc3BsYXk1IFNBWV9MSU5FCitiaW5kIERpc3BsYXkzK0Rpc3BsYXk1K0Rpc3BsYXk0IFNBWV9BQk9WRQorYmluZCBEaXNwbGF5MytEaXNwbGF5NStEaXNwbGF5NiBTQVlfQkVMT1cKK2JpbmQgRGlzcGxheTMrRGlzcGxheTQrRGlzcGxheTYgQVVUT1NQRUFLCisKZGlmZiAtLWdpdCBhL1RhYmxlcy5icmFpbGxlYmFjay9ibS9kZWZhdWx0Lmt0YiBiL1RhYmxlcy5icmFpbGxlYmFjay9ibS9kZWZhdWx0Lmt0YgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MWJkY2U1Ci0tLSAvZGV2L251bGwKKysrIGIvVGFibGVzLmJyYWlsbGViYWNrL2JtL2RlZmF1bHQua3RiCkBAIC0wLDAgKzEsMjMgQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyMgICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisjCisjIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyMKKyMgQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCit0aXRsZSBCYXVtIChkZWZhdWx0KQorCitpbmNsdWRlIGRpc3BsYXk2Lmt0aQoraW5jbHVkZSByb3V0aW5nNi5rdGkKK2luY2x1ZGUgYjliMTAua3RpCmRpZmYgLS1naXQgYS9UYWJsZXMuYnJhaWxsZWJhY2svYm0vZGlzcGxheTYua3RpIGIvVGFibGVzLmJyYWlsbGViYWNrL2JtL2Rpc3BsYXk2Lmt0aQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOGNlZThjCi0tLSAvZGV2L251bGwKKysrIGIvVGFibGVzLmJyYWlsbGViYWNrL2JtL2Rpc3BsYXk2Lmt0aQpAQCAtMCwwICsxLDI0IEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisjICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorIworIyBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisjCisjIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisjCisjIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyMgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorIyBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyMKKyMgV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworIworIyBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworbm90ZSBUaGVyZSBhcmUgdGhyZWUgZGlzcGxheSBrZXlzIGF0IGVhY2ggZW5kIG9mIHRoZSBicmFpbGxlIGNlbGxzLgorbm90ZSAqIEZyb20gdG9wIHRvIGJvdHRvbToKK25vdGUgKyBUaGUgdGhyZWUgYXQgdGhlIGxlZnQgYXJlIG5hbWVkIERpc3BsYXkxLCBEaXNwbGF5MiwgYW5kIERpc3BsYXkzLgorbm90ZSArIFRoZSB0aHJlZSBhdCB0aGUgcmlnaHQgYXJlIG5hbWVkIERpc3BsYXk0LCBEaXNwbGF5NSwgYW5kIERpc3BsYXk2LgorCitpbmNsdWRlIGQ2Lmt0aQpkaWZmIC0tZ2l0IGEvVGFibGVzLmJyYWlsbGViYWNrL2JtL2Rpc3BsYXk3Lmt0aSBiL1RhYmxlcy5icmFpbGxlYmFjay9ibS9kaXNwbGF5Ny5rdGkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjFiNmVjYgotLS0gL2Rldi9udWxsCisrKyBiL1RhYmxlcy5icmFpbGxlYmFjay9ibS9kaXNwbGF5Ny5rdGkKQEAgLTAsMCArMSw2NiBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorIyAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyMKKyMgQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorIworIyBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorIworIyBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisjIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyMgbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisjCisjIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMgVGhpcyBrZXkgc3VidGFibGUgaXMgZm9yIEJhdW0gZGlzcGxheXMgd2hpY2ggaGF2ZSA3IGRpc3BsYXkga2V5cy4KK25vdGUgVGhlIGRpc3BsYXkga2V5cyBhcmUgYXQgYm90aCBlbmRzIG9mIHRoZSB0ZXh0IGNlbGwgYXJlYSwganVzdCBhYm92ZSBpdC4KK25vdGUgKiBUaGUgdHdvIGF0IHRoZSBsZWZ0IGFyZSBuYW1lZCBEaXNwbGF5MSBhbmQgRGlzcGxheTIuCitub3RlICogVGhlIGxhcmdlIGtleSBhdCB0aGUgcmlnaHQgaXMgbmFtZWQgRGlzcGxheTUuCitub3RlICogVGhlIHR3byBpbW1lZGlhdGVseSB0byBpdHMgbGVmdCBhcmUgbmFtZWQgRGlzcGxheTMgYW5kIERpc3BsYXk0Lgorbm90ZSAqIFRoZSB0d28gaW1tZWRpYXRlbHkgdG8gaXRzIHJpZ2h0IGFyZSBuYW1lZCBEaXNwbGF5NiBhbmQgRGlzcGxheTcuCisKK2JpbmQgRGlzcGxheTUgUkVUVVJOCitiaW5kIERpc3BsYXkzIExOVVAKK2JpbmQgRGlzcGxheTQgTE5ETgorYmluZCBEaXNwbGF5NiBGV0lOTFQKK2JpbmQgRGlzcGxheTcgRldJTlJUCisKK2JpbmQgRGlzcGxheTEgVE9QX0xFRlQKK2JpbmQgRGlzcGxheTIgQk9UX0xFRlQKKworYmluZCBEaXNwbGF5NStEaXNwbGF5MyBQUkRJRkxOCitiaW5kIERpc3BsYXk1K0Rpc3BsYXk0IE5YRElGTE4KK2JpbmQgRGlzcGxheTUrRGlzcGxheTYgQVRUUlVQCitiaW5kIERpc3BsYXk1K0Rpc3BsYXk3IEFUVFJETgorCitiaW5kIERpc3BsYXkyK0Rpc3BsYXk1IEZSRUVaRQorYmluZCBEaXNwbGF5MitEaXNwbGF5MyBQUlBST01QVAorYmluZCBEaXNwbGF5MitEaXNwbGF5NCBOWFBST01QVAorYmluZCBEaXNwbGF5MitEaXNwbGF5NiBQUlBHUlBICitiaW5kIERpc3BsYXkyK0Rpc3BsYXk3IE5YUEdSUEgKKworYmluZCBEaXNwbGF5MStEaXNwbGF5NSBDU1JUUksKK2JpbmQgRGlzcGxheTErRGlzcGxheTMgRElTUE1ECitiaW5kIERpc3BsYXkxK0Rpc3BsYXk0IFNJWERPVFMKK2JpbmQgRGlzcGxheTErRGlzcGxheTYgQVRUUlZJUworYmluZCBEaXNwbGF5MStEaXNwbGF5NyBDU1JWSVMKKworYmluZCBEaXNwbGF5MStEaXNwbGF5MitEaXNwbGF5NSBBVVRPU1BFQUsKK2JpbmQgRGlzcGxheTErRGlzcGxheTIrRGlzcGxheTMgTVVURQorYmluZCBEaXNwbGF5MStEaXNwbGF5MitEaXNwbGF5NCBTQVlfTElORQorYmluZCBEaXNwbGF5MStEaXNwbGF5MitEaXNwbGF5NiBTQVlfQUJPVkUKK2JpbmQgRGlzcGxheTErRGlzcGxheTIrRGlzcGxheTcgU0FZX0JFTE9XCisKK2JpbmQgRGlzcGxheTErRGlzcGxheTIgSEVMUAorYmluZCBEaXNwbGF5MytEaXNwbGF5NCBMRUFSTgorYmluZCBEaXNwbGF5NitEaXNwbGF5NyBQUkVGTUVOVQorYmluZCBEaXNwbGF5MytEaXNwbGF5NiBQUkVGTE9BRAorYmluZCBEaXNwbGF5NCtEaXNwbGF5NyBQUkVGU0FWRQorCitiaW5kIERpc3BsYXk1K0Rpc3BsYXkzK0Rpc3BsYXk2IENTUkpNUF9WRVJUCitiaW5kIERpc3BsYXk1K0Rpc3BsYXk0K0Rpc3BsYXk3IFBBU1RFCisKZGlmZiAtLWdpdCBhL1RhYmxlcy5icmFpbGxlYmFjay9ibS9kbTgwcC5rdGIgYi9UYWJsZXMuYnJhaWxsZWJhY2svYm0vZG04MHAua3RiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI1ZDk0MWEKLS0tIC9kZXYvbnVsbAorKysgYi9UYWJsZXMuYnJhaWxsZWJhY2svYm0vZG04MHAua3RiCkBAIC0wLDAgKzEsMjIgQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyMgICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisjCisjIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyMKKyMgQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCit0aXRsZSBCYXVtIERNIDgwIFBsdXMKKworaW5jbHVkZSBkaXNwbGF5Ny5rdGkKK2luY2x1ZGUgcm91dGluZzcua3RpCmRpZmYgLS1naXQgYS9UYWJsZXMuYnJhaWxsZWJhY2svYm0vZW11bGF0ZTYua3RpIGIvVGFibGVzLmJyYWlsbGViYWNrL2JtL2VtdWxhdGU2Lmt0aQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYjMwNWQ3Ci0tLSAvZGV2L251bGwKKysrIGIvVGFibGVzLmJyYWlsbGViYWNrL2JtL2VtdWxhdGU2Lmt0aQpAQCAtMCwwICsxLDIxIEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisjICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorIworIyBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisjCisjIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisjCisjIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyMgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorIyBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyMKKyMgV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworIworIyBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworbm90ZSBBbnkgZGlzcGxheSBrZXkgY29tYmluYXRpb24gY2FuIGJlIGVtdWxhdGVkIGJ5IGhvbGRpbmcgXHtwcmVzc30KK25vdGUgKiB3aGlsZSB0eXBpbmcgdGhlIGNvcnJlc3BvbmRpbmcgY29tYmluYXRpb24gb2YgZG90cyAxLTYuCitpbmNsdWRlIGQ2Lmt0aQpkaWZmIC0tZ2l0IGEvVGFibGVzLmJyYWlsbGViYWNrL2JtL2Zyb250MTAua3RpIGIvVGFibGVzLmJyYWlsbGViYWNrL2JtL2Zyb250MTAua3RpCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNlZDA0YmYKLS0tIC9kZXYvbnVsbAorKysgYi9UYWJsZXMuYnJhaWxsZWJhY2svYm0vZnJvbnQxMC5rdGkKQEAgLTAsMCArMSw2MyBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorIyAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyMKKyMgQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorIworIyBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorIworIyBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisjIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyMgbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisjCisjIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMgVGhpcyBrZXkgc3VidGFibGUgaXMgZm9yIEJhdW0gZGlzcGxheXMgd2hpY2ggaGF2ZSAxMCBmcm9udCBrZXlzLgorbm90ZSBUaGUga2V5cyBpbiB0aGUgdXBwZXIgcm93IG9uIHRoZSBmcm9udCBhcmUgbmFtZWQ6Citub3RlICogRnJvbnQxLCBGcm9udDMsIEZyb250NSwgRnJvbnQ3LCBGcm9udDkuCitub3RlIFRoZSBrZXlzIGluIHRoZSBsb3dlciByb3cgb24gdGhlIGZyb250IGFyZSBuYW1lZDoKK25vdGUgKiBGcm9udDIsIEZyb250NCwgRnJvbnQ2LCBGcm9udDgsIEZyb250MTAuCitub3RlIFRoZSBrZXlzIGluIHRoZSB1cHBlciByb3cgb24gdGhlIGJhY2sgYXJlIG5hbWVkOgorbm90ZSAqIEJhY2sxLCBCYWNrMywgQmFjazUsIEJhY2s3LCBCYWNrOS4KK25vdGUgVGhlIGtleXMgaW4gdGhlIGxvd2VyIHJvdyBvbiB0aGUgYmFjayBhcmUgbmFtZWQ6Citub3RlICogQmFjazIsIEJhY2s0LCBCYWNrNiwgQmFjazgsIEJhY2sxMC4KKworYmluZCBGcm9udDEgTE5VUAorYmluZCBGcm9udDIgTE5ETgorCitiaW5kIEZyb250MyBMTlVQCitiaW5kIEZyb250NCBMTkROCisKK2JpbmQgRnJvbnQ1IExOVVAKK2JpbmQgRnJvbnQ2IExORE4KKworYmluZCBGcm9udDcgTE5VUAorYmluZCBGcm9udDggTE5ETgorCitiaW5kIEZyb250OSBMTlVQCitiaW5kIEZyb250MTAgTE5ETgorCitiaW5kIEZyb250NStGcm9udDEgVE9QX0xFRlQKK2JpbmQgRnJvbnQ1K0Zyb250MiBCT1RfTEVGVAorYmluZCBGcm9udDYrRnJvbnQxIFRPUAorYmluZCBGcm9udDYrRnJvbnQyIEJPVAorCitiaW5kIEZyb250NStGcm9udDMgUFJQUk9NUFQKK2JpbmQgRnJvbnQ1K0Zyb250NCBOWFBST01QVAorYmluZCBGcm9udDYrRnJvbnQzIFBSUEdSUEgKK2JpbmQgRnJvbnQ2K0Zyb250NCBOWFBHUlBICisKKyNiaW5kIEZyb250NStGcm9udDcgTE5VUAorI2JpbmQgRnJvbnQ1K0Zyb250OCBMTkROCisjYmluZCBGcm9udDYrRnJvbnQ3IExOVVAKKyNiaW5kIEZyb250NitGcm9udDggTE5ETgorCitiaW5kIEZyb250NStGcm9udDkgUFJESUZMTgorYmluZCBGcm9udDUrRnJvbnQxMCBOWERJRkxOCitiaW5kIEZyb250NitGcm9udDkgQVRUUlVQCitiaW5kIEZyb250NitGcm9udDEwIEFUVFJETgorCmRpZmYgLS1naXQgYS9UYWJsZXMuYnJhaWxsZWJhY2svYm0vZnJvbnQ2Lmt0aSBiL1RhYmxlcy5icmFpbGxlYmFjay9ibS9mcm9udDYua3RpCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkwZGFhNWIKLS0tIC9kZXYvbnVsbAorKysgYi9UYWJsZXMuYnJhaWxsZWJhY2svYm0vZnJvbnQ2Lmt0aQpAQCAtMCwwICsxLDI4IEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisjICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorIworIyBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisjCisjIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisjCisjIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyMgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorIyBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyMKKyMgV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworIworIyBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIyBUaGlzIGtleSBzdWJ0YWJsZSBpcyBmb3IgQmF1bSBkaXNwbGF5cyB3aGljaCBoYXZlIDYgZnJvbnQga2V5cy4KK25vdGUgVGhlIGtleXMgaW4gdGhlIHVwcGVyIHJvdyBvbiB0aGUgZnJvbnQgYXJlIG5hbWVkOgorbm90ZSAqIEZyb250MSwgRnJvbnQzLCBGcm9udDUuCitub3RlIFRoZSBrZXlzIGluIHRoZSBsb3dlciByb3cgb24gdGhlIGZyb250IGFyZSBuYW1lZDoKK25vdGUgKiBGcm9udDIsIEZyb250NCwgRnJvbnQ2Lgorbm90ZSBUaGUga2V5cyBpbiB0aGUgdXBwZXIgcm93IG9uIHRoZSBiYWNrIGFyZSBuYW1lZDoKK25vdGUgKiBCYWNrMSwgQmFjazMsIEJhY2s1Lgorbm90ZSBUaGUga2V5cyBpbiB0aGUgbG93ZXIgcm93IG9uIHRoZSBiYWNrIGFyZSBuYW1lZDoKK25vdGUgKiBCYWNrMiwgQmFjazQsIEJhY2s2LgorCmRpZmYgLS1naXQgYS9UYWJsZXMuYnJhaWxsZWJhY2svYm0vaG9yaXpvbnRhbC5rdGkgYi9UYWJsZXMuYnJhaWxsZWJhY2svYm0vaG9yaXpvbnRhbC5rdGkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjQyOTk1YgotLS0gL2Rldi9udWxsCisrKyBiL1RhYmxlcy5icmFpbGxlYmFjay9ibS9ob3Jpem9udGFsLmt0aQpAQCAtMCwwICsxLDM5IEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisjICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorIworIyBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisjCisjIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisjCisjIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyMgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorIyBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyMKKyMgV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworIworIyBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIyBUaGlzIGtleSBzdWJ0YWJsZSBpcyBmb3IgQmF1bSBkaXNwbGF5cyB3aGljaCBoYXZlIGhvcml6b250YWwgc2Vuc29ycy4KKworYmluZCAhSG9yaXpvbnRhbFNlbnNvciBST1VURQorCitiaW5kIERpc3BsYXkxKyFIb3Jpem9udGFsU2Vuc29yIENMSVBfTkVXCitiaW5kIERpc3BsYXkyKyFIb3Jpem9udGFsU2Vuc29yIENMSVBfQURECitiaW5kIERpc3BsYXk0KyFIb3Jpem9udGFsU2Vuc29yIENPUFlfTElORQorYmluZCBEaXNwbGF5NSshSG9yaXpvbnRhbFNlbnNvciBDT1BZX1JFQ1QKKworYmluZCBEaXNwbGF5MyshSG9yaXpvbnRhbFNlbnNvciBERVNDQ0hBUgorYmluZCBEaXNwbGF5NishSG9yaXpvbnRhbFNlbnNvciBTRVRMRUZUCisKK2JpbmQgRGlzcGxheTIrRGlzcGxheTErIUhvcml6b250YWxTZW5zb3IgUFJJTkRFTlQKK2JpbmQgRGlzcGxheTIrRGlzcGxheTMrIUhvcml6b250YWxTZW5zb3IgTlhJTkRFTlQKKworYmluZCBEaXNwbGF5NStEaXNwbGF5NCshSG9yaXpvbnRhbFNlbnNvciBQUkRJRkNIQVIKK2JpbmQgRGlzcGxheTUrRGlzcGxheTYrIUhvcml6b250YWxTZW5zb3IgTlhESUZDSEFSCisKK2JpbmQgRGlzcGxheTErRGlzcGxheTMrIUhvcml6b250YWxTZW5zb3IgU0VUTUFSSworYmluZCBEaXNwbGF5NCtEaXNwbGF5NishSG9yaXpvbnRhbFNlbnNvciBHT1RPTUFSSworCmRpZmYgLS1naXQgYS9UYWJsZXMuYnJhaWxsZWJhY2svYm0vaW5rYS5rdGIgYi9UYWJsZXMuYnJhaWxsZWJhY2svYm0vaW5rYS5rdGIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDg5MjQwZgotLS0gL2Rldi9udWxsCisrKyBiL1RhYmxlcy5icmFpbGxlYmFjay9ibS9pbmthLmt0YgpAQCAtMCwwICsxLDI5IEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisjICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorIworIyBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisjCisjIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisjCisjIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyMgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorIyBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyMKKyMgV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworIworIyBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKwordGl0bGUgQmF1bSBJbmthCisKK2luY2x1ZGUgZGlzcGxheTYua3RpCitpbmNsdWRlIGhvcml6b250YWwua3RpCitpbmNsdWRlIHZlcnRpY2FsLmt0aQorCitub3RlIFRoZSBzd2l0Y2hlcyBhcmUgb2ZmIHdoZW4gdG8gdGhlIGxlZnQgYW5kIG9uIHdoZW4gdG8gdGhlIHJpZ2h0Lgorbm90ZSAqIFN3aXRjaDEgKHVwcGVyLWxlZnQpOiBkaXNhYmxlIGFsbCBzZW5zb3JzLgorbm90ZSAqIFN3aXRjaDIgKGxvd2VyLWxlZnQpOiBzY2FsZWQgdmVydGljYWwgc2Vuc29yIGxpbmUgc2VsZWN0aW9uLgorbm90ZSAqIFN3aXRjaDMgKHVwcGVyLXJpZ2h0KTogc2hvdyBzZWxlY3RlZCBob3Jpem9udGFsIHNlbnNvciAoYWxsIGRvdHMgcmFpc2VkKS4KK25vdGUgKiBTd2l0Y2g0IChsb3dlci1yaWdodCk6IGVuYWJsZSBicmFpbGxlIGtleWJvYXJkLgpkaWZmIC0tZ2l0IGEvVGFibGVzLmJyYWlsbGViYWNrL2JtL2pveXN0aWNrLmt0aSBiL1RhYmxlcy5icmFpbGxlYmFjay9ibS9qb3lzdGljay5rdGkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTkwZjE3MAotLS0gL2Rldi9udWxsCisrKyBiL1RhYmxlcy5icmFpbGxlYmFjay9ibS9qb3lzdGljay5rdGkKQEAgLTAsMCArMSwyMSBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorIyAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyMKKyMgQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorIworIyBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorIworIyBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisjIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyMgbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisjCisjIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK2Fzc2lnbkRlZmF1bHQgcHJlc3MgUHJlc3MKK25vdGUgVGhlIGZpdmUgam95c3RpY2sgbW90aW9ucyBhcmUgbmFtZWQgTGVmdCwgUmlnaHQsIFVwLCBEb3duLCBhbmQgXHtwcmVzc30uCitpbmNsdWRlIGtleWJvYXJkLmt0aQpkaWZmIC0tZ2l0IGEvVGFibGVzLmJyYWlsbGViYWNrL2JtL2tleWJvYXJkLmt0aSBiL1RhYmxlcy5icmFpbGxlYmFjay9ibS9rZXlib2FyZC5rdGkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWVjMzFkYwotLS0gL2Rldi9udWxsCisrKyBiL1RhYmxlcy5icmFpbGxlYmFjay9ibS9rZXlib2FyZC5rdGkKQEAgLTAsMCArMSw4NCBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorIyAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyMKKyMgQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorIworIyBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorIworIyBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisjIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyMgbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisjCisjIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK21hcCBEb3QxIERPVDEKK21hcCBEb3QyIERPVDIKK21hcCBEb3QzIERPVDMKK21hcCBEb3Q0IERPVDQKK21hcCBEb3Q1IERPVDUKK21hcCBEb3Q2IERPVDYKK21hcCBEb3Q3IERPVDcKK21hcCBEb3Q4IERPVDgKK21hcCBce3NwYWNlfSBTUEFDRQorCithc3NpZ24gY2hvcmQgXHtzcGFjZX0rCitpbmNsdWRlIC4uL2Nob3Jkcy5rdGkKKworYmluZCBce3ByZXNzfSBSRVRVUk4KK2luY2x1ZGUgLi4vbmF2Lmt0aQorCitpZktleSBSb3V0aW5nS2V5CitiaW5kIFx7c3BhY2V9K1JvdXRpbmdLZXkgS0VZX0ZVTkNUSU9OCitiaW5kIFx7c3BhY2V9K1JvdXRpbmdLZXkrIVJvdXRpbmdLZXkgQ0xJUF9BUFBFTkQKKworYmluZCBSb3V0aW5nS2V5K1x7cHJlc3N9IERFU0NDSEFSCitiaW5kIFJvdXRpbmdLZXkrTGVmdCBDTElQX05FVworYmluZCBSb3V0aW5nS2V5K1VwIENMSVBfQURECitiaW5kIFJvdXRpbmdLZXkrUmlnaHQgQ09QWV9MSU5FCitiaW5kIFJvdXRpbmdLZXkrRG93biBDT1BZX1JFQ1QKK2VuZElmCisKKworIyMjIyMjIyMjIyMjIyMjIyMKKyMgTWVudSBCaW5kaW5ncyAjCisjIyMjIyMjIyMjIyMjIyMjIworCisjVW51c2VkIGJ5IEJyYWlsbGViYWNrCisjY29udGV4dCBtZW51CisKKyNiaW5kIFx7cHJlc3N9IFBSRUZNRU5VCisjYmluZCBVcCBNRU5VX1BSRVZfSVRFTQorI2JpbmQgRG93biBNRU5VX05FWFRfSVRFTQorI2JpbmQgTGVmdCBNRU5VX1BSRVZfU0VUVElORworI2JpbmQgUmlnaHQgTUVOVV9ORVhUX1NFVFRJTkcKKworI2JpbmQgXHtzcGFjZX0gTUVOVV9QUkVWX0xFVkVMCisjYmluZCBce3NwYWNlfStce3ByZXNzfSBQUkVGU0FWRQorI2JpbmQgXHtzcGFjZX0rVXAgTUVOVV9GSVJTVF9JVEVNCisjYmluZCBce3NwYWNlfStEb3duIE1FTlVfTEFTVF9JVEVNCisjYmluZCBce3NwYWNlfStMZWZ0IEZXSU5MVAorI2JpbmQgXHtzcGFjZX0rUmlnaHQgRldJTlJUCisKKyNjb250ZXh0IGRlZmF1bHQKKworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQnJhaWxsZUJhY2sgQmluZGluZ3MgIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK2Fzc2lnbiBjaG9yZCBTcGFjZQoraW5jbHVkZSAuLi9hbmRyb2lkLWNob3Jkcy5rdGkKKworIyBBY3RpdmF0ZSB0aGUgY3VycmVudGx5IGZvY3VzZWQgaXRlbS4KK2JpbmQgUHJlc3MgUk9VVEUrMTI3CisKKyMgTG9uZyBwcmVzcyB0aGUgY3VycmVudGx5IGZvY3VzZWQgaXRlbQorIyAoVGhlIGpveXN0aWNrIHByZXNzLCBhdCBsZWFzdCBvbiB0aGUgUmVmcmVzaGFicmFpbGxlLCB3aWxsIG5vdCBzZW5kCisjIGEga2V5IGRvd24gYXQga2V5IHByZXNzLCBidXQgaW5zdGVhZCB0aGUgZG93bi91cCBwYWlyIGFyZSBzZW50CisjIGluIHF1aWNrIHN1Y2Nlc3Npb24gd2hlbiB0aGUga2V5IGlzIHJlbGVhc2VkLikKK2JpbmQgRG90NitQcmVzcyBST1VURSsyNTUKZGlmZiAtLWdpdCBhL1RhYmxlcy5icmFpbGxlYmFjay9ibS9uYXZwYWQua3RpIGIvVGFibGVzLmJyYWlsbGViYWNrL2JtL25hdnBhZC5rdGkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGIyZjY1MgotLS0gL2Rldi9udWxsCisrKyBiL1RhYmxlcy5icmFpbGxlYmFjay9ibS9uYXZwYWQua3RpCkBAIC0wLDAgKzEsMjEgQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyMgICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisjCisjIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyMKKyMgQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCithc3NpZ25EZWZhdWx0IHByZXNzIFNlbGVjdAorbm90ZSBUaGUgZml2ZSBuYXZpZ2F0aW9uIHBhZCBrZXlzIGFyZSBuYW1lZCBMZWZ0LCBSaWdodCwgVXAsIERvd24sIGFuZCBce3ByZXNzfS4KK2luY2x1ZGUga2V5Ym9hcmQua3RpCmRpZmYgLS1naXQgYS9UYWJsZXMuYnJhaWxsZWJhY2svYm0vb3JiaXQua3RiIGIvVGFibGVzLmJyYWlsbGViYWNrL2JtL29yYml0Lmt0YgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNmRlMjIwCi0tLSAvZGV2L251bGwKKysrIGIvVGFibGVzLmJyYWlsbGViYWNrL2JtL29yYml0Lmt0YgpAQCAtMCwwICsxLDM1IEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisjICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorIworIyBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisjCisjIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisjCisjIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyMgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorIyBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyMKKyMgV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworIworIyBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKwordGl0bGUgT3JiaXQgUmVhZGVyCisKK25vdGUgQSBzaXgtZG90IHN0YW5kYXJkIGJyYWlsbGUga2V5Ym9hcmQgaXMgYWxvbmcgdGhlIGJhY2sgZWRnZSBvZiB0aGUgdG9wLgorbm90ZSAqIEZyb20gbGVmdCB0byByaWdodCwgaXRzIGtleXMgYXJlOiBEb3QzLCBEb3QyLCBEb3QxIC0gRG90NCwgRG90NSwgRG90Ni4KK25vdGUgVGhlcmUncyBhIGZpdmUta2V5IG5hdmlnYXRpb24gcGFkIGluIGJldHdlZW4gRG90MSBhbmQgRG90NC4KK25vdGUgU3BhY2UgaXMgdGhlIGxvbmcga2V5IGluIHRoZSBtaWRkbGUsIGp1c3QgaW4gZnJvbnQgb2YgdGhlIG5hdmlnYXRpb24gcGFkLgorbm90ZSBEb3Q3IGFuZCBEb3Q4IGFyZSB0aGUga2V5cyBpbW1lZGlhdGVseSB0byB0aGUgbGVmdCBhbmQgcmlnaHQgb2YgU3BhY2UuCisKK2Fzc2lnbiBzcGFjZSBTcGFjZQoraW5jbHVkZSBuYXZwYWQua3RpCisKK2Fzc2lnbiBwcmVzcyBTZWxlY3QKK2luY2x1ZGUgZW11bGF0ZTYua3RpCitpbmNsdWRlIHJvdXRpbmcua3RpCisKK25vdGUgVGhlIHJvY2tlciB0byB0aGUgbGVmdCBvZiB0aGUgYnJhaWxsZSBjZWxscyBlbXVsYXRlcyB0aGUgRGlzcGxheTIga2V5LAorbm90ZSAqIGFuZCB0aGUgb25lIHRvIHRoZWlyIHJpZ2h0IGVtdWxhdGVzIHRoZSBEaXNwbGF5NSBrZXkuCmRpZmYgLS1naXQgYS9UYWJsZXMuYnJhaWxsZWJhY2svYm0vcHJvLmt0YiBiL1RhYmxlcy5icmFpbGxlYmFjay9ibS9wcm8ua3RiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZmZTdlZTAKLS0tIC9kZXYvbnVsbAorKysgYi9UYWJsZXMuYnJhaWxsZWJhY2svYm0vcHJvLmt0YgpAQCAtMCwwICsxLDI0IEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisjICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorIworIyBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisjCisjIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisjCisjIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyMgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorIyBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyMKKyMgV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworIworIyBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKwordGl0bGUgQmF1bSBWYXJpbyBQcm8KKworaW5jbHVkZSBkaXNwbGF5Ni5rdGkKK2luY2x1ZGUgd2hlZWxzLmt0aQoraW5jbHVkZSBzdGF0dXMua3RpCitpbmNsdWRlIHJvdXRpbmc2Lmt0aQpkaWZmIC0tZ2l0IGEvVGFibGVzLmJyYWlsbGViYWNrL2JtL3Byb250by5rdGIgYi9UYWJsZXMuYnJhaWxsZWJhY2svYm0vcHJvbnRvLmt0YgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOGFhNDg5Ci0tLSAvZGV2L251bGwKKysrIGIvVGFibGVzLmJyYWlsbGViYWNrL2JtL3Byb250by5rdGIKQEAgLTAsMCArMSwyMyBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorIyAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyMKKyMgQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorIworIyBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorIworIyBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisjIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyMgbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisjCisjIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK3RpdGxlIEJhdW0gUHJvbnRvIQorCitpbmNsdWRlIGRpc3BsYXk2Lmt0aQoraW5jbHVkZSByb3V0aW5nNi5rdGkKK2luY2x1ZGUgYjliMTAua3RpCmRpZmYgLS1naXQgYS9UYWJsZXMuYnJhaWxsZWJhY2svYm0vcHYua3RiIGIvVGFibGVzLmJyYWlsbGViYWNrL2JtL3B2Lmt0YgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YjY0YTQ2Ci0tLSAvZGV2L251bGwKKysrIGIvVGFibGVzLmJyYWlsbGViYWNrL2JtL3B2Lmt0YgpAQCAtMCwwICsxLDIzIEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisjICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorIworIyBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisjCisjIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisjCisjIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyMgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorIyBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyMKKyMgV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworIworIyBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKwordGl0bGUgQmF1bSBQb2NrZXRWYXJpbworCitpbmNsdWRlIGRpc3BsYXk2Lmt0aQoraW5jbHVkZSByb3V0aW5nNi5rdGkKK2luY2x1ZGUgYjliMTAua3RpCmRpZmYgLS1naXQgYS9UYWJsZXMuYnJhaWxsZWJhY2svYm0vcmIua3RiIGIvVGFibGVzLmJyYWlsbGViYWNrL2JtL3JiLmt0YgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YThhNGE0Ci0tLSAvZGV2L251bGwKKysrIGIvVGFibGVzLmJyYWlsbGViYWNrL2JtL3JiLmt0YgpAQCAtMCwwICsxLDQxIEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisjICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorIworIyBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisjCisjIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisjCisjIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyMgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorIyBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyMKKyMgV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworIworIyBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKwordGl0bGUgQVBIIFJlZnJlc2hhYnJhaWxsZQorCitub3RlIEI5IGlzIHRoZSBsb25nIGtleSBpbiB0aGUgbWlkZGxlLCBqdXN0IGluIGZyb250IG9mIHRoZSBqb3lzdGljay4KK25vdGUgRG90NyBhbmQgRG90OCBhcmUgdGhlIGtleXMgaW1tZWRpYXRlbHkgdG8gdGhlIGxlZnQgYW5kIHJpZ2h0IG9mIEI5Lgorbm90ZSBCMTAgaXMgdGhlIG5hcnJvdyBrZXkgYmV0d2VlbiBhbmQganVzdCBiZWhpbmQgdGhlIHNpeC1kb3Qga2V5Ym9hcmQuCisKK2Fzc2lnbiBwcmVzcyBQcmVzcworaW5jbHVkZSBlbXVsYXRlNi5rdGkKK2luY2x1ZGUgcm91dGluZzYua3RpCisKK2Fzc2lnbiBzcGFjZSBCOQoraW5jbHVkZSBqb3lzdGljay5rdGkKKworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQnJhaWxsZUJhY2sgQmluZGluZ3MgIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK2Fzc2lnbiBjaG9yZCBCOQoraW5jbHVkZSAuLi9hbmRyb2lkLWNob3Jkcy5rdGkKKworYXNzaWduIGNob3JkIEIxMAoraW5jbHVkZSAuLi9hbmRyb2lkLWNob3Jkcy5rdGkKZGlmZiAtLWdpdCBhL1RhYmxlcy5icmFpbGxlYmFjay9ibS9yb3V0aW5nLmt0aSBiL1RhYmxlcy5icmFpbGxlYmFjay9ibS9yb3V0aW5nLmt0aQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MDg2ZGQyCi0tLSAvZGV2L251bGwKKysrIGIvVGFibGVzLmJyYWlsbGViYWNrL2JtL3JvdXRpbmcua3RpCkBAIC0wLDAgKzEsMzAgQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyMgICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisjCisjIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyMKKyMgQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitub3RlIFJvdXRpbmdLZXkgcmVmZXJzIHRvIGFueSBvZiB0aGUga2V5cyBpbW1lZGlhdGVseSBiZWhpbmQgdGhlIGJyYWlsbGUgY2VsbHMuCisKKyNPdmVycmlkZGVuIGJ5IEJyYWlsbGVCYWNrLgorI2JpbmQgUm91dGluZ0tleSBST1VURQorCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBCcmFpbGxlQmFjayBCaW5kaW5ncyAjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIyBST1VURSsxMjggaXMgYSBsb25nLXByZXNzIG9uIHRoZSByb3V0aW5nIGtleS4KK2JpbmQgUm91dGluZ0tleSBST1VURTpST1VURSsxMjgKZGlmZiAtLWdpdCBhL1RhYmxlcy5icmFpbGxlYmFjay9ibS9yb3V0aW5nNi5rdGkgYi9UYWJsZXMuYnJhaWxsZWJhY2svYm0vcm91dGluZzYua3RpCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMzMmIzNjYKLS0tIC9kZXYvbnVsbAorKysgYi9UYWJsZXMuYnJhaWxsZWJhY2svYm0vcm91dGluZzYua3RpCkBAIC0wLDAgKzEsNDQgQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyMgICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisjCisjIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyMKKyMgQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjIFRoaXMga2V5IHN1YnRhYmxlIGlzIGZvciBCYXVtIGRpc3BsYXlzIHdoaWNoIGhhdmUgcm91dGluZyBrZXlzIGFuZCA2IGRpc3BsYXkga2V5cy4KKworaW5jbHVkZSByb3V0aW5nLmt0aQorCitiaW5kIERpc3BsYXkxK1JvdXRpbmdLZXkgQ0xJUF9ORVcKK2JpbmQgRGlzcGxheTIrUm91dGluZ0tleSBDTElQX0FERAorYmluZCBEaXNwbGF5NCtSb3V0aW5nS2V5IENPUFlfTElORQorYmluZCBEaXNwbGF5NStSb3V0aW5nS2V5IENPUFlfUkVDVAorCitiaW5kIFJvdXRpbmdLZXkrIVJvdXRpbmdLZXkgQ0xJUF9DT1BZCitiaW5kIERpc3BsYXkyK1JvdXRpbmdLZXkrIVJvdXRpbmdLZXkgQ0xJUF9BUFBFTkQKKworYmluZCBEaXNwbGF5MytSb3V0aW5nS2V5IERFU0NDSEFSCitiaW5kIERpc3BsYXk2K1JvdXRpbmdLZXkgU0VUTEVGVAorCitiaW5kIERpc3BsYXkyK0Rpc3BsYXkxK1JvdXRpbmdLZXkgUFJJTkRFTlQKK2JpbmQgRGlzcGxheTIrRGlzcGxheTMrUm91dGluZ0tleSBOWElOREVOVAorCitiaW5kIERpc3BsYXk1K0Rpc3BsYXk0K1JvdXRpbmdLZXkgUFJESUZDSEFSCitiaW5kIERpc3BsYXk1K0Rpc3BsYXk2K1JvdXRpbmdLZXkgTlhESUZDSEFSCisKK2JpbmQgRGlzcGxheTErRGlzcGxheTMrUm91dGluZ0tleSBTRVRNQVJLCitiaW5kIERpc3BsYXk0K0Rpc3BsYXk2K1JvdXRpbmdLZXkgR09UT01BUksKKworYmluZCBEaXNwbGF5NCtEaXNwbGF5NStEaXNwbGF5NitSb3V0aW5nS2V5IFNXSVRDSFZUCisKZGlmZiAtLWdpdCBhL1RhYmxlcy5icmFpbGxlYmFjay9ibS9yb3V0aW5nNy5rdGkgYi9UYWJsZXMuYnJhaWxsZWJhY2svYm0vcm91dGluZzcua3RpCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRiZWI2NDAKLS0tIC9kZXYvbnVsbAorKysgYi9UYWJsZXMuYnJhaWxsZWJhY2svYm0vcm91dGluZzcua3RpCkBAIC0wLDAgKzEsMzkgQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyMgICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisjCisjIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyMKKyMgQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjIFRoaXMga2V5IHN1YnRhYmxlIGlzIGZvciBCYXVtIGRpc3BsYXlzIHdoaWNoIGhhdmUgcm91dGluZyBrZXlzIGFuZCA3IGRpc3BsYXkga2V5cy4KKworaW5jbHVkZSByb3V0aW5nLmt0aQorCitiaW5kIERpc3BsYXk1KyFSb3V0aW5nS2V5IERFU0NDSEFSCisKK2JpbmQgRGlzcGxheTMrIVJvdXRpbmdLZXkgQ0xJUF9ORVcKK2JpbmQgRGlzcGxheTQrIVJvdXRpbmdLZXkgQ0xJUF9BREQKK2JpbmQgRGlzcGxheTYrIVJvdXRpbmdLZXkgQ09QWV9MSU5FCitiaW5kIERpc3BsYXk3KyFSb3V0aW5nS2V5IENPUFlfUkVDVAorCitiaW5kIERpc3BsYXk1K0Rpc3BsYXkzKyFSb3V0aW5nS2V5IFBSSU5ERU5UCitiaW5kIERpc3BsYXk1K0Rpc3BsYXk0KyFSb3V0aW5nS2V5IE5YSU5ERU5UCisKK2JpbmQgRGlzcGxheTUrRGlzcGxheTYrIVJvdXRpbmdLZXkgUFJESUZDSEFSCitiaW5kIERpc3BsYXk1K0Rpc3BsYXk3KyFSb3V0aW5nS2V5IE5YRElGQ0hBUgorCitiaW5kIERpc3BsYXkxKyFSb3V0aW5nS2V5IFNFVE1BUksKK2JpbmQgRGlzcGxheTIrIVJvdXRpbmdLZXkgR09UT01BUksKK2JpbmQgRGlzcGxheTErRGlzcGxheTIrIVJvdXRpbmdLZXkgU0VUTEVGVAorCmRpZmYgLS1naXQgYS9UYWJsZXMuYnJhaWxsZWJhY2svYm0vc3RhdHVzLmt0aSBiL1RhYmxlcy5icmFpbGxlYmFjay9ibS9zdGF0dXMua3RpCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRmMGI0NjYKLS0tIC9kZXYvbnVsbAorKysgYi9UYWJsZXMuYnJhaWxsZWJhY2svYm0vc3RhdHVzLmt0aQpAQCAtMCwwICsxLDM0IEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisjICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorIworIyBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisjCisjIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisjCisjIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyMgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorIyBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyMKKyMgV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworIworIyBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIyBUaGlzIGtleSBzdWJ0YWJsZSBpcyBmb3IgQmF1bSBkaXNwbGF5cyB3aGljaCBoYXZlIGEgc3RhdHVzIG1vZHVsZS4KK25vdGUgVGhlIGxhcmdlciBjb250cm9scyBvbiB0aGUgc3RhdHVzIG1vZHVsZSwgZnJvbSBsZWZ0IHRvIHJpZ2h0LAorbm90ZSBhcmUgbmFtZWQgU3RhdHVzQnV0dG9uMSB0aHJvdWdoIFN0YXR1c0J1dHRvbjQuCitub3RlIFRoZSBzbWFsbGVyIGNvbnRyb2xzIG9uIHRoZSBzdGF0dXMgbW9kdWxlLCBmcm9tIGxlZnQgdG8gcmlnaHQsCitub3RlIGFyZSBuYW1lZCBTdGF0dXNLZXkxIHRocm91Z2ggU3RhdHVzS2V5NC4KKworYmluZCBTdGF0dXNCdXR0b24xIEhFTFAKK2JpbmQgU3RhdHVzQnV0dG9uMiBMRUFSTgorYmluZCBTdGF0dXNCdXR0b24zIElORk8KK2JpbmQgU3RhdHVzQnV0dG9uNCBQUkVGTUVOVQorCitiaW5kIFN0YXR1c0tleTEgQ1NSVklTCitiaW5kIFN0YXR1c0tleTIgQVRUUlZJUworYmluZCBTdGF0dXNLZXkzIEZSRUVaRQorYmluZCBTdGF0dXNLZXk0IFNJWERPVFMKKwpkaWZmIC0tZ2l0IGEvVGFibGVzLmJyYWlsbGViYWNrL2JtL3N2Lmt0YiBiL1RhYmxlcy5icmFpbGxlYmFjay9ibS9zdi5rdGIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDJhM2MzZgotLS0gL2Rldi9udWxsCisrKyBiL1RhYmxlcy5icmFpbGxlYmFjay9ibS9zdi5rdGIKQEAgLTAsMCArMSwyMiBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorIyAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyMKKyMgQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorIworIyBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorIworIyBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisjIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyMgbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisjCisjIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK3RpdGxlIEJhdW0gU3VwZXJWYXJpbyAvIEhXRyBCcmFpbGxpYW50CisKK2luY2x1ZGUgZGlzcGxheTYua3RpCitpbmNsdWRlIHJvdXRpbmc2Lmt0aQpkaWZmIC0tZ2l0IGEvVGFibGVzLmJyYWlsbGViYWNrL2JtL3VsdHJhLmt0YiBiL1RhYmxlcy5icmFpbGxlYmFjay9ibS91bHRyYS5rdGIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmYxMjFlNwotLS0gL2Rldi9udWxsCisrKyBiL1RhYmxlcy5icmFpbGxlYmFjay9ibS91bHRyYS5rdGIKQEAgLTAsMCArMSwyMyBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorIyAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyMKKyMgQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorIworIyBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorIworIyBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisjIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyMgbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisjCisjIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK3RpdGxlIEJhdW0gVmFyaW9VbHRyYQorCitpbmNsdWRlIGRpc3BsYXk2Lmt0aQoraW5jbHVkZSByb3V0aW5nNi5rdGkKK2luY2x1ZGUgYjliMTAua3RpCmRpZmYgLS1naXQgYS9UYWJsZXMuYnJhaWxsZWJhY2svYm0vdjQwLmt0YiBiL1RhYmxlcy5icmFpbGxlYmFjay9ibS92NDAua3RiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIxNzU3YzAKLS0tIC9kZXYvbnVsbAorKysgYi9UYWJsZXMuYnJhaWxsZWJhY2svYm0vdjQwLmt0YgpAQCAtMCwwICsxLDIyIEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisjICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorIworIyBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisjCisjIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisjCisjIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyMgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorIyBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyMKKyMgV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworIworIyBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKwordGl0bGUgQmF1bSBWYXJpbyA0MAorCitpbmNsdWRlIGRpc3BsYXk2Lmt0aQoraW5jbHVkZSByb3V0aW5nNi5rdGkKZGlmZiAtLWdpdCBhL1RhYmxlcy5icmFpbGxlYmFjay9ibS92ODAua3RiIGIvVGFibGVzLmJyYWlsbGViYWNrL2JtL3Y4MC5rdGIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTVlODg0ZgotLS0gL2Rldi9udWxsCisrKyBiL1RhYmxlcy5icmFpbGxlYmFjay9ibS92ODAua3RiCkBAIC0wLDAgKzEsMjQgQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyMgICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisjCisjIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyMKKyMgQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCit0aXRsZSBCYXVtIFZhcmlvIDgwCisKK2luY2x1ZGUgZGlzcGxheTYua3RpCitpbmNsdWRlIGNvbW1hbmQua3RpCitpbmNsdWRlIGZyb250MTAua3RpCitpbmNsdWRlIHJvdXRpbmc2Lmt0aQpkaWZmIC0tZ2l0IGEvVGFibGVzLmJyYWlsbGViYWNrL2JtL3ZlcnRpY2FsLmt0aSBiL1RhYmxlcy5icmFpbGxlYmFjay9ibS92ZXJ0aWNhbC5rdGkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmI4MTYzZgotLS0gL2Rldi9udWxsCisrKyBiL1RhYmxlcy5icmFpbGxlYmFjay9ibS92ZXJ0aWNhbC5rdGkKQEAgLTAsMCArMSwyNCBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorIyAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyMKKyMgQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorIworIyBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorIworIyBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisjIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyMgbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisjCisjIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMgVGhpcyBrZXkgc3VidGFibGUgaXMgZm9yIEJhdW0gZGlzcGxheXMgd2hpY2ggaGF2ZSB2ZXJ0aWNhbCBzZW5zb3JzLgorCitiaW5kICFMZWZ0U2Vuc29yIEdPVE9MSU5FK3RvbGVmdAorYmluZCAhUmlnaHRTZW5zb3IgR09UT0xJTkUKK2JpbmQgIVNjYWxlZExlZnRTZW5zb3IgR09UT0xJTkUrdG9sZWZ0K3NjYWxlZAorYmluZCAhU2NhbGVkUmlnaHRTZW5zb3IgR09UT0xJTkUrc2NhbGVkCmRpZmYgLS1naXQgYS9UYWJsZXMuYnJhaWxsZWJhY2svYm0vdmsua3RiIGIvVGFibGVzLmJyYWlsbGViYWNrL2JtL3ZrLmt0YgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMmFmZjE4Ci0tLSAvZGV2L251bGwKKysrIGIvVGFibGVzLmJyYWlsbGViYWNrL2JtL3ZrLmt0YgpAQCAtMCwwICsxLDQyIEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisjICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorIworIyBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisjCisjIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisjCisjIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyMgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorIyBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyMKKyMgV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworIworIyBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKwordGl0bGUgQmF1bSAodmFyaW9rZXlzPXllcykKKworYmluZCBEaXNwbGF5MiBGV0lOTFQKK2JpbmQgRGlzcGxheTUgRldJTlJUCisKK2JpbmQgRGlzcGxheTEgTE5VUAorYmluZCBEaXNwbGF5MyBMTkROCisKK2JpbmQgRGlzcGxheTQgS0VZX0NVUlNPUl9VUAorYmluZCBEaXNwbGF5NiBLRVlfQ1VSU09SX0RPV04KKworYmluZCBEaXNwbGF5MStEaXNwbGF5MyBIT01FCitiaW5kIERpc3BsYXkyK0Rpc3BsYXkxIFRPUF9MRUZUCitiaW5kIERpc3BsYXkyK0Rpc3BsYXkzIEJPVF9MRUZUCisKK2JpbmQgRGlzcGxheTErRGlzcGxheTQgUFJFRk1FTlUKK2JpbmQgRGlzcGxheTErRGlzcGxheTIrRGlzcGxheTQgRlJFRVpFCitiaW5kIERpc3BsYXkxK0Rpc3BsYXkyK0Rpc3BsYXk1IEhFTFAKK2JpbmQgRGlzcGxheTIrRGlzcGxheTQgSU5GTworYmluZCBEaXNwbGF5MitEaXNwbGF5MytEaXNwbGF5NCtEaXNwbGF5NSBDU1JUUksKK2JpbmQgRGlzcGxheTErRGlzcGxheTMrRGlzcGxheTYgQVRUUlZJUworYmluZCBEaXNwbGF5MStEaXNwbGF5MitEaXNwbGF5MytEaXNwbGF5NiBESVNQTUQKKworaW5jbHVkZSByb3V0aW5nNi5rdGkKZGlmZiAtLWdpdCBhL1RhYmxlcy5icmFpbGxlYmFjay9ibS93aGVlbHMua3RpIGIvVGFibGVzLmJyYWlsbGViYWNrL2JtL3doZWVscy5rdGkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYThhMzVlMAotLS0gL2Rldi9udWxsCisrKyBiL1RhYmxlcy5icmFpbGxlYmFjay9ibS93aGVlbHMua3RpCkBAIC0wLDAgKzEsMzggQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyMgICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisjCisjIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyMKKyMgQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjIFRoaXMga2V5IHN1YnRhYmxlIGlzIGZvciBCYXVtIGRpc3BsYXlzIHdoaWNoIGhhdmUgd2hlZWxzLgorbm90ZSBUaGUgd2hlZWxzIG9uIHRoZSBkaXNwbGF5IG1vZHVsZSBhcmUgaWRlbnRpZmllZCBieSB0aGVpciBvcmRpbmFsIHBvc2l0aW9uCitub3RlIChmaXJzdCB0aHJvdWdoIGZvdXJ0aCkgZnJvbSB0aGUgbGVmdC4KKworYmluZCAhRmlyc3RXaGVlbFVwIExOVVAKK2JpbmQgIUZpcnN0V2hlZWxEb3duIExORE4KK2JpbmQgIUZpcnN0V2hlZWxQcmVzcyBIT01FCisKK2JpbmQgIVNlY29uZFdoZWVsVXAgTE5VUAorYmluZCAhU2Vjb25kV2hlZWxEb3duIExORE4KK2JpbmQgIVNlY29uZFdoZWVsUHJlc3MgSE9NRQorCitiaW5kICFUaGlyZFdoZWVsVXAgTE5VUAorYmluZCAhVGhpcmRXaGVlbERvd24gTE5ETgorYmluZCAhVGhpcmRXaGVlbFByZXNzIEhPTUUKKworYmluZCAhRm91cnRoV2hlZWxVcCBMTlVQCitiaW5kICFGb3VydGhXaGVlbERvd24gTE5ETgorYmluZCAhRm91cnRoV2hlZWxQcmVzcyBIT01FCisKZGlmZiAtLWdpdCBhL1RhYmxlcy5icmFpbGxlYmFjay9icC9hbGwua3RpIGIvVGFibGVzLmJyYWlsbGViYWNrL2JwL2FsbC5rdGkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGVhZWExMwotLS0gL2Rldi9udWxsCisrKyBiL1RhYmxlcy5icmFpbGxlYmFjay9icC9hbGwua3RpCkBAIC0wLDAgKzEsMjExIEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisjICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorIworIyBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisjCisjIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisjCisjIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyMgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorIyBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyMKKyMgV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworIworIyBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworbm90ZSBUaGUgc2l4IHJvdW5kIGtleXMgbmVhciB0aGUgYmFjayBhcmUgYSBicmFpbGxlIGtleWJvYXJkLgorbm90ZSBGcm9tIGxlZnQgdG8gcmlnaHQsIHRoZXkncmUgbmFtZWQ6IERvdDMsIERvdDIsIERvdDEsIERvdDQsIERvdDUsIERvdDYuCitub3RlIEZyb20gbGVmdCB0byByaWdodCwgdGhlIHRocmVlIGxvbmcgZnVuY3Rpb24ga2V5cyBhcmUgbmFtZWQ6IFNoaWZ0LCBTcGFjZSwgQ29udHJvbC4KK25vdGUgVGhpcyB0YWJsZSBtYXBzIFNoaWZ0IHRvIERvdDcsIGFuZCBDb250cm9sIHRvIERvdDguCitub3RlIFRoZSBqb3lzdGljayBiZXR3ZWVuIHRoZSBkb3QgYW5kIGZ1bmN0aW9uIGtleXMgaGFzIGZpdmUgcG9zaXRpb25zIG5hbWVkOiBVcCwgRG93biwgTGVmdCwgUmlnaHQsIEVudGVyLgorbm90ZSBUaGUgcm91bmQgc2Nyb2xsIGtleXMgYXQgZWl0aGVyIGVuZCBvZiB0aGUgYnJhaWxsZSBkaXNwbGF5IGFyZSBuYW1lZDogTGVmdCwgUmlnaHQuCisKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgRGVmYXVsdCBCaW5kaW5ncyAjCisjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjT3ZlcnJpZGRlbiBieSBCcmFpbGxlQmFjay4KKyNpZktleSBSb3V0aW5nS2V5IGJpbmQgUm91dGluZ0tleSBST1VURQorCitiaW5kIFNjcm9sbExlZnQrU2Nyb2xsUmlnaHQgSE9NRQorYmluZCBTY3JvbGxMZWZ0IEZXSU5MVAorYmluZCBTY3JvbGxSaWdodCBGV0lOUlQKK2JpbmQgU2Nyb2xsTGVmdCtTcGFjZSBMTlVQCitiaW5kIFNjcm9sbFJpZ2h0K1NwYWNlIExORE4KK2JpbmQgU2Nyb2xsTGVmdCtTaGlmdCBGV0lOTFRTS0lQCitiaW5kIFNjcm9sbFJpZ2h0K0NvbnRyb2wgRldJTlJUU0tJUAorCitiaW5kIFNjcm9sbExlZnQrSm95c3RpY2tFbnRlciBTRVRMRUZUCitiaW5kIFNjcm9sbExlZnQrSm95c3RpY2tMZWZ0IENIUkxUCitiaW5kIFNjcm9sbExlZnQrSm95c3RpY2tSaWdodCBDSFJSVAorYmluZCBTY3JvbGxMZWZ0K0pveXN0aWNrVXAgUFJESUZMTgorYmluZCBTY3JvbGxMZWZ0K0pveXN0aWNrRG93biBOWERJRkxOCisKK2JpbmQgU2Nyb2xsUmlnaHQrSm95c3RpY2tFbnRlciBERVNDQ0hBUgorYmluZCBTY3JvbGxSaWdodCtKb3lzdGlja0xlZnQgSFdJTkxUCitiaW5kIFNjcm9sbFJpZ2h0K0pveXN0aWNrUmlnaHQgSFdJTlJUCitiaW5kIFNjcm9sbFJpZ2h0K0pveXN0aWNrVXAgQVRUUlVQCitiaW5kIFNjcm9sbFJpZ2h0K0pveXN0aWNrRG93biBBVFRSRE4KKworYmluZCBTY3JvbGxMZWZ0K1Njcm9sbFJpZ2h0K0pveXN0aWNrRW50ZXIgQkFDSworYmluZCBTY3JvbGxMZWZ0K1Njcm9sbFJpZ2h0K0pveXN0aWNrTGVmdCBQUlBHUlBICitiaW5kIFNjcm9sbExlZnQrU2Nyb2xsUmlnaHQrSm95c3RpY2tSaWdodCBOWFBHUlBICitiaW5kIFNjcm9sbExlZnQrU2Nyb2xsUmlnaHQrSm95c3RpY2tVcCBQUlBST01QVAorYmluZCBTY3JvbGxMZWZ0K1Njcm9sbFJpZ2h0K0pveXN0aWNrRG93biBOWFBST01QVAorCitiaW5kIFNoaWZ0K0pveXN0aWNrRW50ZXIgQ1NSSk1QX1ZFUlQKK2JpbmQgU2hpZnQrSm95c3RpY2tMZWZ0IExOQkVHCitiaW5kIFNoaWZ0K0pveXN0aWNrUmlnaHQgTE5FTkQKK2JpbmQgU2hpZnQrSm95c3RpY2tVcCBUT1AKK2JpbmQgU2hpZnQrSm95c3RpY2tEb3duIEJPVAorCitiaW5kIENvbnRyb2wrSm95c3RpY2tMZWZ0IENMSVBfTkVXCitiaW5kIENvbnRyb2wrSm95c3RpY2tVcCBDTElQX0FERAorYmluZCBDb250cm9sK0pveXN0aWNrUmlnaHQgQ09QWV9MSU5FCitiaW5kIENvbnRyb2wrSm95c3RpY2tEb3duIENPUFlfUkVDVAorYmluZCBDb250cm9sK0pveXN0aWNrRW50ZXIgUEFTVEUKKworYmluZCBEb3QxK0pveXN0aWNrRW50ZXIgRElTUE1ECitiaW5kIERvdDErSm95c3RpY2tMZWZ0IERJU1BNRCtvZmYKK2JpbmQgRG90MStKb3lzdGlja1JpZ2h0IERJU1BNRCtvbgorYmluZCBEb3QxK0RvdDIrSm95c3RpY2tFbnRlciBTS1BCTE5LV0lOUworYmluZCBEb3QxK0RvdDIrSm95c3RpY2tMZWZ0IFNLUEJMTktXSU5TK29mZgorYmluZCBEb3QxK0RvdDIrSm95c3RpY2tSaWdodCBTS1BCTE5LV0lOUytvbgorYmluZCBEb3QxK0RvdDQrSm95c3RpY2tFbnRlciBDU1JWSVMKK2JpbmQgRG90MStEb3Q0K0pveXN0aWNrTGVmdCBDU1JWSVMrb2ZmCitiaW5kIERvdDErRG90NCtKb3lzdGlja1JpZ2h0IENTUlZJUytvbgorYmluZCBEb3QxK0RvdDIrRG90NCtKb3lzdGlja0VudGVyIEZSRUVaRQorYmluZCBEb3QxK0RvdDIrRG90NStKb3lzdGlja0VudGVyIEhFTFAKK2JpbmQgRG90MitEb3Q0K0pveXN0aWNrRW50ZXIgU0tQSURMTlMKK2JpbmQgRG90MitEb3Q0K0pveXN0aWNrTGVmdCBTS1BJRExOUytvZmYKK2JpbmQgRG90MitEb3Q0K0pveXN0aWNrUmlnaHQgU0tQSURMTlMrb24KK2JpbmQgRG90MStEb3QyK0RvdDMrSm95c3RpY2tFbnRlciBMRUFSTgorYmluZCBEb3QxK0RvdDIrRG90MytEb3Q0K0pveXN0aWNrRW50ZXIgUFJFRk1FTlUKK2JpbmQgRG90MStEb3QyK0RvdDMrRG90NCtKb3lzdGlja0xlZnQgUFJFRkxPQUQKK2JpbmQgRG90MStEb3QyK0RvdDMrRG90NCtKb3lzdGlja1JpZ2h0IFBSRUZTQVZFCitiaW5kIERvdDIrRG90MytEb3Q0K0pveXN0aWNrRW50ZXIgSU5GTworYmluZCBEb3QyK0RvdDMrRG90NCtEb3Q1K0pveXN0aWNrRW50ZXIgQ1NSVFJLCitiaW5kIERvdDIrRG90MytEb3Q0K0RvdDUrSm95c3RpY2tMZWZ0IENTUlRSSytvZmYKK2JpbmQgRG90MitEb3QzK0RvdDQrRG90NStKb3lzdGlja1JpZ2h0IENTUlRSSytvbgorYmluZCBEb3QxK0RvdDMrRG90NitKb3lzdGlja0VudGVyIEFUVFJWSVMKK2JpbmQgRG90MStEb3QzK0RvdDYrSm95c3RpY2tMZWZ0IEFUVFJWSVMrb2ZmCitiaW5kIERvdDErRG90MytEb3Q2K0pveXN0aWNrUmlnaHQgQVRUUlZJUytvbgorYmluZCBEb3QyK0RvdDQrRG90NStEb3Q2K0pveXN0aWNrRW50ZXIgU0xJREVXSU4KK2JpbmQgRG90MitEb3Q0K0RvdDUrRG90NitKb3lzdGlja0xlZnQgU0xJREVXSU4rb2ZmCitiaW5kIERvdDIrRG90NCtEb3Q1K0RvdDYrSm95c3RpY2tSaWdodCBTTElERVdJTitvbgorYmluZCBEb3QyK0RvdDMrRG90NStKb3lzdGlja0VudGVyIFNJWERPVFMrb24KK2JpbmQgRG90MitEb3QzK0RvdDYrSm95c3RpY2tFbnRlciBTSVhET1RTK29mZgorCittYXAgRG90MSBET1QxCittYXAgRG90MiBET1QyCittYXAgRG90MyBET1QzCittYXAgRG90NCBET1Q0CittYXAgRG90NSBET1Q1CittYXAgRG90NiBET1Q2CittYXAgU2hpZnQgRE9UNworbWFwIENvbnRyb2wgRE9UOAorbWFwIFNwYWNlIFNQQUNFCisKK2JpbmQgU3BhY2UrU2hpZnQgS0VZX0JBQ0tTUEFDRQorYmluZCBTcGFjZStDb250cm9sIEtFWV9FTlRFUgorYmluZCBTcGFjZStTaGlmdCtDb250cm9sIEtFWV9FU0NBUEUKKworYmluZCBTcGFjZStEb3QxIEtFWV9DVVJTT1JfTEVGVAorYmluZCBTcGFjZStEb3Q0IEtFWV9DVVJTT1JfUklHSFQKK2JpbmQgU3BhY2UrRG90MiBLRVlfQ1VSU09SX1VQCitiaW5kIFNwYWNlK0RvdDUgS0VZX0NVUlNPUl9ET1dOCitiaW5kIFNwYWNlK0RvdDMgS0VZX1BBR0VfVVAKK2JpbmQgU3BhY2UrRG90NiBLRVlfUEFHRV9ET1dOCisKK2JpbmQgU3BhY2UrRG90MStEb3QyIEtFWV9CQUNLU1BBQ0UKK2JpbmQgU3BhY2UrRG90MStEb3Q0K0RvdDUgS0VZX0RFTEVURQorYmluZCBTcGFjZStEb3QxK0RvdDUgS0VZX0VORAorYmluZCBTcGFjZStEb3QxK0RvdDIrRG90NSBLRVlfSE9NRQorYmluZCBTcGFjZStEb3QyK0RvdDQgS0VZX0lOU0VSVAorYmluZCBTcGFjZStEb3QxK0RvdDIrRG90MytEb3Q1IEtFWV9FTlRFUgorYmluZCBTcGFjZStEb3QyK0RvdDMrRG90NCtEb3Q1IEtFWV9UQUIKK2JpbmQgU3BhY2UrRG90MStEb3QzK0RvdDQrRG90NiBLRVlfRVNDQVBFCisKK2JpbmQgSm95c3RpY2tFbnRlciBST1VURQorYmluZCBKb3lzdGlja0xlZnQgS0VZX0NVUlNPUl9MRUZUCitiaW5kIEpveXN0aWNrUmlnaHQgS0VZX0NVUlNPUl9SSUdIVAorYmluZCBKb3lzdGlja1VwIEtFWV9DVVJTT1JfVVAKK2JpbmQgSm95c3RpY2tEb3duIEtFWV9DVVJTT1JfRE9XTgorCitiaW5kIFNwYWNlK0pveXN0aWNrRW50ZXIgS0VZX0lOU0VSVAorYmluZCBTcGFjZStKb3lzdGlja0xlZnQgS0VZX0hPTUUKK2JpbmQgU3BhY2UrSm95c3RpY2tSaWdodCBLRVlfRU5ECitiaW5kIFNwYWNlK0pveXN0aWNrVXAgS0VZX1BBR0VfVVAKK2JpbmQgU3BhY2UrSm95c3RpY2tEb3duIEtFWV9QQUdFX0RPV04KKworYmluZCBTcGFjZStTaGlmdCtEb3QxIEtFWV9GVU5DVElPTiswCitiaW5kIFNwYWNlK1NoaWZ0K0RvdDErRG90MiBLRVlfRlVOQ1RJT04rMQorYmluZCBTcGFjZStTaGlmdCtEb3QxK0RvdDQgS0VZX0ZVTkNUSU9OKzIKK2JpbmQgU3BhY2UrU2hpZnQrRG90MStEb3Q0K0RvdDUgS0VZX0ZVTkNUSU9OKzMKK2JpbmQgU3BhY2UrU2hpZnQrRG90MStEb3Q1IEtFWV9GVU5DVElPTis0CitiaW5kIFNwYWNlK1NoaWZ0K0RvdDErRG90MitEb3Q0IEtFWV9GVU5DVElPTis1CitiaW5kIFNwYWNlK1NoaWZ0K0RvdDErRG90MitEb3Q0K0RvdDUgS0VZX0ZVTkNUSU9OKzYKK2JpbmQgU3BhY2UrU2hpZnQrRG90MStEb3QyK0RvdDUgS0VZX0ZVTkNUSU9OKzcKK2JpbmQgU3BhY2UrU2hpZnQrRG90MitEb3Q0IEtFWV9GVU5DVElPTis4CitiaW5kIFNwYWNlK1NoaWZ0K0RvdDIrRG90NCtEb3Q1IEtFWV9GVU5DVElPTis5CitiaW5kIFNwYWNlK1NoaWZ0K0RvdDErRG90MyBLRVlfRlVOQ1RJT04rMTAKK2JpbmQgU3BhY2UrU2hpZnQrRG90MStEb3QyK0RvdDMgS0VZX0ZVTkNUSU9OKzExCitiaW5kIFNwYWNlK1NoaWZ0K0RvdDErRG90MytEb3Q0IEtFWV9GVU5DVElPTisxMgorYmluZCBTcGFjZStTaGlmdCtEb3QxK0RvdDMrRG90NCtEb3Q1IEtFWV9GVU5DVElPTisxMworYmluZCBTcGFjZStTaGlmdCtEb3QxK0RvdDMrRG90NSBLRVlfRlVOQ1RJT04rMTQKK2JpbmQgU3BhY2UrU2hpZnQrRG90MStEb3QyK0RvdDMrRG90NCBLRVlfRlVOQ1RJT04rMTUKK2JpbmQgU3BhY2UrU2hpZnQrRG90MStEb3QyK0RvdDMrRG90NCtEb3Q1IEtFWV9GVU5DVElPTisxNgorYmluZCBTcGFjZStTaGlmdCtEb3QxK0RvdDIrRG90MytEb3Q1IEtFWV9GVU5DVElPTisxNworYmluZCBTcGFjZStTaGlmdCtEb3QyK0RvdDMrRG90NCBLRVlfRlVOQ1RJT04rMTgKK2JpbmQgU3BhY2UrU2hpZnQrRG90MitEb3QzK0RvdDQrRG90NSBLRVlfRlVOQ1RJT04rMTkKKworYmluZCBTcGFjZStDb250cm9sK0RvdDEgU1dJVENIVlQrMAorYmluZCBTcGFjZStDb250cm9sK0RvdDErRG90MiBTV0lUQ0hWVCsxCitiaW5kIFNwYWNlK0NvbnRyb2wrRG90MStEb3Q0IFNXSVRDSFZUKzIKK2JpbmQgU3BhY2UrQ29udHJvbCtEb3QxK0RvdDQrRG90NSBTV0lUQ0hWVCszCitiaW5kIFNwYWNlK0NvbnRyb2wrRG90MStEb3Q1IFNXSVRDSFZUKzQKK2JpbmQgU3BhY2UrQ29udHJvbCtEb3QxK0RvdDIrRG90NCBTV0lUQ0hWVCs1CitiaW5kIFNwYWNlK0NvbnRyb2wrRG90MStEb3QyK0RvdDQrRG90NSBTV0lUQ0hWVCs2CitiaW5kIFNwYWNlK0NvbnRyb2wrRG90MStEb3QyK0RvdDUgU1dJVENIVlQrNworYmluZCBTcGFjZStDb250cm9sK0RvdDIrRG90NCBTV0lUQ0hWVCs4CitiaW5kIFNwYWNlK0NvbnRyb2wrRG90MitEb3Q0K0RvdDUgU1dJVENIVlQrOQorYmluZCBTcGFjZStDb250cm9sK0RvdDErRG90MyBTV0lUQ0hWVCsxMAorYmluZCBTcGFjZStDb250cm9sK0RvdDErRG90MitEb3QzIFNXSVRDSFZUKzExCitiaW5kIFNwYWNlK0NvbnRyb2wrRG90MStEb3QzK0RvdDQgU1dJVENIVlQrMTIKK2JpbmQgU3BhY2UrQ29udHJvbCtEb3QxK0RvdDMrRG90NCtEb3Q1IFNXSVRDSFZUKzEzCitiaW5kIFNwYWNlK0NvbnRyb2wrRG90MStEb3QzK0RvdDUgU1dJVENIVlQrMTQKK2JpbmQgU3BhY2UrQ29udHJvbCtEb3QxK0RvdDIrRG90MytEb3Q0IFNXSVRDSFZUKzE1CitiaW5kIFNwYWNlK0NvbnRyb2wrRG90MStEb3QyK0RvdDMrRG90NCtEb3Q1IFNXSVRDSFZUKzE2CitiaW5kIFNwYWNlK0NvbnRyb2wrRG90MStEb3QyK0RvdDMrRG90NSBTV0lUQ0hWVCsxNworYmluZCBTcGFjZStDb250cm9sK0RvdDIrRG90MytEb3Q0IFNXSVRDSFZUKzE4CitiaW5kIFNwYWNlK0NvbnRyb2wrRG90MitEb3QzK0RvdDQrRG90NSBTV0lUQ0hWVCsxOQorCisKKyMjIyMjIyMjIyMjIyMjIyMjCisjIE1lbnUgQmluZGluZ3MgIworIyMjIyMjIyMjIyMjIyMjIyMKKworI1VudXNlZCBieSBCcmFpbGxlYmFjaworI2NvbnRleHQgbWVudQorI2JpbmQgSm95c3RpY2tVcCBNRU5VX1BSRVZfSVRFTQorI2JpbmQgSm95c3RpY2tEb3duIE1FTlVfTkVYVF9JVEVNCisjYmluZCBKb3lzdGlja0xlZnQgTUVOVV9QUkVWX1NFVFRJTkcKKyNiaW5kIEpveXN0aWNrUmlnaHQgTUVOVV9ORVhUX1NFVFRJTkcKKyNiaW5kIEpveXN0aWNrRW50ZXIgUFJFRlNBVkUKKworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQnJhaWxsZUJhY2sgQmluZGluZ3MgIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK2Fzc2lnbiBjaG9yZDcgU2hpZnQKK2Fzc2lnbiBjaG9yZDggQ29udHJvbAorCitpbmNsdWRlIC4uL2FuZHJvaWQtY2hvcmRzLmt0aQorCisjIFJPVVRFKzEyOCBpcyBhIGxvbmctcHJlc3Mgb24gdGhlIHJvdXRpbmcga2V5LgorYmluZCBSb3V0aW5nS2V5IFJPVVRFOlJPVVRFKzEyOApkaWZmIC0tZ2l0IGEvVGFibGVzLmJyYWlsbGViYWNrL2Nob3Jkcy5rdGkgYi9UYWJsZXMuYnJhaWxsZWJhY2svY2hvcmRzLmt0aQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYmZkNjVmCi0tLSAvZGV2L251bGwKKysrIGIvVGFibGVzLmJyYWlsbGViYWNrL2Nob3Jkcy5rdGkKQEAgLTAsMCArMSwxOTQgQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyMgICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisjCisjIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyMKKyMgQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCithc3NpZ24gYSBEb3QxCithc3NpZ24gYiBEb3QxK0RvdDIKK2Fzc2lnbiBjIERvdDErRG90NAorYXNzaWduIGQgRG90MStEb3Q0K0RvdDUKK2Fzc2lnbiBlIERvdDErRG90NQorYXNzaWduIGYgRG90MStEb3QyK0RvdDQKK2Fzc2lnbiBnIERvdDErRG90MitEb3Q0K0RvdDUKK2Fzc2lnbiBoIERvdDErRG90MitEb3Q1Cithc3NpZ24gaSBEb3QyK0RvdDQKK2Fzc2lnbiBqIERvdDIrRG90NCtEb3Q1Cithc3NpZ24gayBEb3QxK0RvdDMKK2Fzc2lnbiBsIERvdDErRG90MitEb3QzCithc3NpZ24gbSBEb3QxK0RvdDMrRG90NAorYXNzaWduIG4gRG90MStEb3QzK0RvdDQrRG90NQorYXNzaWduIG8gRG90MStEb3QzK0RvdDUKK2Fzc2lnbiBwIERvdDErRG90MitEb3QzK0RvdDQKK2Fzc2lnbiBxIERvdDErRG90MitEb3QzK0RvdDQrRG90NQorYXNzaWduIHIgRG90MStEb3QyK0RvdDMrRG90NQorYXNzaWduIHMgRG90MitEb3QzK0RvdDQKK2Fzc2lnbiB0IERvdDIrRG90MytEb3Q0K0RvdDUKK2Fzc2lnbiB1IERvdDErRG90MytEb3Q2Cithc3NpZ24gdiBEb3QxK0RvdDIrRG90MytEb3Q2Cithc3NpZ24gdyBEb3QyK0RvdDQrRG90NStEb3Q2Cithc3NpZ24geCBEb3QxK0RvdDMrRG90NCtEb3Q2Cithc3NpZ24geSBEb3QxK0RvdDMrRG90NCtEb3Q1K0RvdDYKK2Fzc2lnbiB6IERvdDErRG90MytEb3Q1K0RvdDYKKworYXNzaWduIHRvZ2dsZU9mZiBEb3Q3Cithc3NpZ24gdG9nZ2xlT24gRG90OAorCisjT3ZlcnJpZGRlbiBieSBCcmFpbGxlQmFjay4KKyNiZWdpblZhcmlhYmxlcworI2Fzc2lnbiB0b2dnbGVLZXlzIFx7Y2hvcmR9XHtifQorI2Fzc2lnbiB0b2dnbGVDb21tYW5kIFNLUEJMTktXSU5TCisjaW5jbHVkZSB0b2dnbGUua3RpCisjZW5kVmFyaWFibGVzCisKK2JlZ2luVmFyaWFibGVzCithc3NpZ24gdG9nZ2xlS2V5cyBce2Nob3JkfVx7Y30KK2Fzc2lnbiB0b2dnbGVDb21tYW5kIENTUlZJUworaW5jbHVkZSB0b2dnbGUua3RpCitlbmRWYXJpYWJsZXMKKworYmVnaW5WYXJpYWJsZXMKK2Fzc2lnbiB0b2dnbGVLZXlzIFx7Y2hvcmR9XHtkfQorYXNzaWduIHRvZ2dsZUNvbW1hbmQgRElTUE1ECitpbmNsdWRlIHRvZ2dsZS5rdGkKK2VuZFZhcmlhYmxlcworCitiZWdpblZhcmlhYmxlcworYXNzaWduIHRvZ2dsZUtleXMgXHtjaG9yZH1ce2Z9Cithc3NpZ24gdG9nZ2xlQ29tbWFuZCBGUkVFWkUKK2luY2x1ZGUgdG9nZ2xlLmt0aQorZW5kVmFyaWFibGVzCisKK2JlZ2luVmFyaWFibGVzCithc3NpZ24gdG9nZ2xlS2V5cyBce2Nob3JkfVx7Z30KK2Fzc2lnbiB0b2dnbGVDb21tYW5kIENPTlRSQUNURUQKK2luY2x1ZGUgdG9nZ2xlLmt0aQorZW5kVmFyaWFibGVzCisKKyNPdmVycmlkZGVuIGJ5IEJyYWlsbGVCYWNrLgorI2JpbmQgXHtjaG9yZH1ce2h9IEhFTFAKKworYmVnaW5WYXJpYWJsZXMKK2Fzc2lnbiB0b2dnbGVLZXlzIFx7Y2hvcmR9XHtpfQorYXNzaWduIHRvZ2dsZUNvbW1hbmQgU0tQSURMTlMKK2luY2x1ZGUgdG9nZ2xlLmt0aQorZW5kVmFyaWFibGVzCisKKyNPdmVycmlkZGVuIGJ5IEJyYWlsbGVCYWNrLgorI2JpbmQgXHtjaG9yZH1ce2x9IExFQVJOCisKKyNPdmVycmlkZGVuIGJ5IEJyYWlsbGVCYWNrLgorI2JpbmQgXHtjaG9yZH1ce3B9IFBSRUZNRU5VCitiaW5kIFx7Y2hvcmR9XHtwfStce3RvZ2dsZU9mZn0gUFJFRkxPQUQKK2JpbmQgXHtjaG9yZH1ce3B9K1x7dG9nZ2xlT259IFBSRUZTQVZFCitiaW5kIFx7Y2hvcmR9XHtwfStce3RvZ2dsZU9mZn0rXHt0b2dnbGVPbn0gUFJFRlJFU0VUCisKKyNPdmVycmlkZGVuIGJ5IEJyYWlsbGVCYWNrLgorI2JlZ2luVmFyaWFibGVzCisjYXNzaWduIHRvZ2dsZUtleXMgXHtjaG9yZH1ce3J9CisjYXNzaWduIHRvZ2dsZUNvbW1hbmQgQVVUT1JFUEVBVAorI2luY2x1ZGUgdG9nZ2xlLmt0aQorI2VuZFZhcmlhYmxlcworCisjYmluZCBce2Nob3JkfVx7c30gSU5GTworCitiZWdpblZhcmlhYmxlcworYXNzaWduIHRvZ2dsZUtleXMgXHtjaG9yZH1ce3R9Cithc3NpZ24gdG9nZ2xlQ29tbWFuZCBDU1JUUksKK2luY2x1ZGUgdG9nZ2xlLmt0aQorZW5kVmFyaWFibGVzCisKK2JlZ2luVmFyaWFibGVzCithc3NpZ24gdG9nZ2xlS2V5cyBce2Nob3JkfVx7dX0KK2Fzc2lnbiB0b2dnbGVDb21tYW5kIEFUVFJWSVMKK2luY2x1ZGUgdG9nZ2xlLmt0aQorZW5kVmFyaWFibGVzCisKK2JpbmQgXHtjaG9yZH1ce3Z9IENTUkpNUF9WRVJUCitiaW5kIFx7Y2hvcmR9XHt2fStce3RvZ2dsZU9mZn0gU1dJVENIVlRfUFJFVgorYmluZCBce2Nob3JkfVx7dn0rXHt0b2dnbGVPbn0gU1dJVENIVlRfTkVYVAorCisjT3ZlcnJpZGRlbiBieSBCcmFpbGxlQmFjay4KKyNiZWdpblZhcmlhYmxlcworI2Fzc2lnbiB0b2dnbGVLZXlzIFx7Y2hvcmR9XHt3fQorI2Fzc2lnbiB0b2dnbGVDb21tYW5kIFNMSURFV0lOCisjaW5jbHVkZSB0b2dnbGUua3RpCisjZW5kVmFyaWFibGVzCisKK2JpbmQgXHtjaG9yZH1ce3h9IFBBU1RFCitiaW5kIFx7Y2hvcmR9XHt4fStce3RvZ2dsZU9mZn0gQ0xJUF9SRVNUT1JFCitiaW5kIFx7Y2hvcmR9XHt4fStce3RvZ2dsZU9ufSBDTElQX1NBVkUKKworYmluZCBce2Nob3JkfURvdDIrRG90MytEb3Q1IENPTVBCUkw2K29uCitiaW5kIFx7Y2hvcmR9RG90MitEb3QzK0RvdDYgQ09NUEJSTDYrb2ZmCisKK2JpbmQgXHtjaG9yZH1Eb3QxK0RvdDMrXHt0b2dnbGVPZmZ9IEJSTEtCRCtvZmYKK2JpbmQgXHtjaG9yZH1Eb3QxK0RvdDMrXHt0b2dnbGVPbn0gQlJMS0JEK29uCisKKyNPdmVycmlkZGVuIGJ5IEJyYWlsbGVCYWNrLgorI2JpbmQgXHtjaG9yZH1Eb3Q0K0RvdDYrXHt0b2dnbGVPZmZ9IEJSTFVDRE9UUytvZmYKKyNPdmVycmlkZGVuIGJ5IEJyYWlsbGVCYWNrLgorI2JpbmQgXHtjaG9yZH1Eb3Q0K0RvdDYrXHt0b2dnbGVPbn0gQlJMVUNET1RTK29uCisKKyNPdmVycmlkZGVuIGJ5IEJyYWlsbGVCYWNrLgorI2JpbmQgXHtjaG9yZH1Eb3QzIEtFWV9DVVJTT1JfTEVGVAorI092ZXJyaWRkZW4gYnkgQnJhaWxsZUJhY2suCisjYmluZCBce2Nob3JkfURvdDYgS0VZX0NVUlNPUl9SSUdIVAorI092ZXJyaWRkZW4gYnkgQnJhaWxsZUJhY2suCisjYmluZCBce2Nob3JkfURvdDIgS0VZX0hPTUUKKyNPdmVycmlkZGVuIGJ5IEJyYWlsbGVCYWNrLgorI2JpbmQgXHtjaG9yZH1Eb3Q1IEtFWV9FTkQKKyNPdmVycmlkZGVuIGJ5IEJyYWlsbGVCYWNrLgorI2JpbmQgXHtjaG9yZH1Eb3QxIEtFWV9DVVJTT1JfVVAKKyNPdmVycmlkZGVuIGJ5IEJyYWlsbGVCYWNrLgorI2JpbmQgXHtjaG9yZH1Eb3Q0IEtFWV9DVVJTT1JfRE9XTgorCitiaW5kIFx7Y2hvcmR9RG90MitEb3QzIEtFWV9QQUdFX1VQCitiaW5kIFx7Y2hvcmR9RG90NStEb3Q2IEtFWV9QQUdFX0RPV04KKyNPdmVycmlkZGVuIGJ5IEJyYWlsbGVCYWNrLgorI2JpbmQgXHtjaG9yZH1Eb3Q0K0RvdDUgS0VZX1RBQgorCitiaW5kIFx7Y2hvcmR9RG90MitEb3Q1K0RvdDYgS0VZX0RFTEVURQorYmluZCBce2Nob3JkfURvdDIrRG90NiBLRVlfRVNDQVBFCitiaW5kIFx7Y2hvcmR9RG90MytEb3Q1IEtFWV9JTlNFUlQKKworYmluZCBce2Nob3JkfURvdDErRG90OCBHVUkKK2JpbmQgXHtjaG9yZH1Eb3Q0K0RvdDggU0hJRlQKK2JpbmQgXHtjaG9yZH1Eb3QyK0RvdDggTUVUQQorYmluZCBce2Nob3JkfURvdDUrRG90OCBBTFRHUgorYmluZCBce2Nob3JkfURvdDMrRG90OCBDT05UUk9MCisjT3ZlcnJpZGRlbiBieSBCcmFpbGxlQmFjay4KKyNiaW5kIFx7Y2hvcmR9RG90NitEb3Q4IFVQUEVSCitiaW5kIFx7Y2hvcmR9RG90NytEb3Q4IFVOU1RJQ0sKKworaWZOb3RWYXIgbm9VbmNob3JkZWQKK2Fzc2lnbkRlZmF1bHQgY29tbWFuZERvdDcgS0VZX0JBQ0tTUEFDRQorYXNzaWduRGVmYXVsdCBjb21tYW5kRG90OCBLRVlfRU5URVIKKworYmluZCBEb3Q3IFx7Y29tbWFuZERvdDd9CitiaW5kIERvdDggXHtjb21tYW5kRG90OH0KKworYmluZCBce2Nob3JkfURvdDcgUEFTU0RPVFMrZG90NworYmluZCBce2Nob3JkfURvdDggUEFTU0RPVFMrZG90OAorCisjVW51c2VkIGJ5IEJyYWlsbGVCYWNrLgorI2luY2x1ZGUgbWVudS5rdGkKK2VuZElmCisKKyNEb250IGtvbncgd2h5IGl0J3Mgbm90IHJ1bm5pbmcgaW50byBpdCwgYnV0IGN1cnJlbnRseSBicmx0dHkgdXNlZCBieSBicmFpbGxlCisjZGlzcGxheSBpbiBBQVMgb25seSBzbyBjb21tZW50IGl0IG91dC4KKyNpZlBsYXRmb3JtIGFuZHJvaWQKK2luY2x1ZGUgYW5kcm9pZC1jaG9yZHMua3RpCisjZW5kaWYKZGlmZiAtLWdpdCBhL1RhYmxlcy5icmFpbGxlYmFjay9ldS9hbGwudHh0IGIvVGFibGVzLmJyYWlsbGViYWNrL2V1L2FsbC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTM1ZGJjNAotLS0gL2Rldi9udWxsCisrKyBiL1RhYmxlcy5icmFpbGxlYmFjay9ldS9hbGwudHh0CkBAIC0wLDAgKzEsMjggQEAKK0hlbHA6IEV1cm9CcmFpbGxlCisgICAgICBEcml2ZXIgZGV2ZWxvcHBlZCBieSBZYW5uaWNrIFBMQVNTSUFSRCBhbmQgT2xpdmllciBCRVJUCisKK1RvIGVudGVyIGluIHRoZSBMZWFybi1Nb2RlLCBwcmVzcyAjK0wgKG9uIG5vdGVicmFpbGxlL2NsaW8pLCBBbHBoYStMOCAoZm9yIAorU2NyaWJhKSBvciBMZXZlbDErTDcgKG9uIElyaXMgLSBMZXZlbDEgbWF5IGJlIHBlcmZvcm1lZCBieSBwcmVzc2luZyAKK0ZHK0ZCIHNpbXVsdGFuZW91c2x5KS4KK0ZvciBFc3lzIHB1dCBMZWZ0Sm95c3RpY2sgaW4gdGhlICJSaWdodCIgcG9zaXRpb24gYW5kIFJpZ2h0Sm95c3RpY2sgaW4gdGhlIAorIlVwIiBwb3NpdGlvbi4KKworVXNpbmcgQ3V0IEFuZCBQYXN0ZQorLS0tLS0tLS0tLS0tLS0tLS0tLQorCVRvIGJlZ2luIGEgYmxvY2ssIHByZXNzICIqRSIgb3IgQmV0YStMMSBvciBMYXllcjIrTDEgZGVwZW5kaW5nIG9uIHlvdXIKK2JyYWlsbGUgZGlzcGxheSBhbmQgdGhlbiBjbGljayBvbiB0aGUgY2VsbCB3aGVyZSB5b3Ugd2FudCB0byBzdGFydCB0aGUgYmxvY2suCitUbyBlbmQgYSBibG9jayBwcmVzcyAiKk0iIG9yIEJldGErTDkgb3IgTGF5ZXIyK2w4IGRlcGVuZGluZyBvbiB5b3VyIGJyYWlsbGUgCitkaXNwbGF5LCBhbmQgY2xpY2sgb24gdGhlIGNlbGwgd2hlcmUgeW91IHdhbnQgdG8gZW5kIHRoZSBibG9jay4gCitXaGVuIHlvdSBkbyB0aGlzLCB0aGUgYmxvY2sgaXMgY29waWVkIGludG8gdGhlIEJSTFRUWSBjbGlwYm9hcmQsIHdhaXRpbmcgdG8gCitiZSBwYXN0ZWQgYW55d2hlcmUgeW91IHdhbnQuIFRvIHBhc3RlIGEgYmxvY2ssCitwcmVzcyB0aGUgIipMIiBvciBCZXRhK0w4IG9yIExheWVyMitMNyBkZXBlbmRpbmcgb24geW91ciBicmFpbGxlIGRpc3BsYXkuIAorQSBzZXBhcmF0ZSBoZWxwIGZpbGUgZm9yIGVhY2ggbW9kZWwgd2lsbCBiZSBjcmVhdGVkIHNvb24uCisKK05vdGUKKy0tLS0KK1BsZWFzZSBub3RlIHRoYXQgdGhlIFJFQURNRSBmaWxlIGNvbnRhaW5zIGFsc28gdmVyc2lvbiBpbmZvcm1hdGlvbiBhbmQKK2NvcHlyaWdodCBub3RpY2UsIHNvIGlmIHlvdSBmaW5kIGEgYnVnIHRoYXQgd2FzIG5vdCBsaXN0ZWQgb3V0IGluIHRoZSBSRUFETUUKK2ZpbGUsIGZlZWwgZnJlZSB0byBzZW5kIGFuIGUtbWFpbCB0byBtZSAoeWFuQG1pc3RpZ3JpLm9yZyksIGJlY2F1c2UgaXQncworaGFyZCB0byB0ZXN0IGFsbCBwb3NzaWJsZSBmdW5jdGlvbnMsIGV2ZW4gaWYgSSB1c2UgdGhlIGRyaXZlciAxMCBob3VycyBhIGRheS4gCisKK1RoYW5rIHlvdS4KZGlmZiAtLWdpdCBhL1RhYmxlcy5icmFpbGxlYmFjay9ldS9icmFpbGxlLmt0aSBiL1RhYmxlcy5icmFpbGxlYmFjay9ldS9icmFpbGxlLmt0aQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OWExOWIzCi0tLSAvZGV2L251bGwKKysrIGIvVGFibGVzLmJyYWlsbGViYWNrL2V1L2JyYWlsbGUua3RpCkBAIC0wLDAgKzEsNzcgQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyMgICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisjCisjIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyMKKyMgQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitub3RlIFRoZSBlaWdodCBkb3Qga2V5cyBvZiB0aGUgYnJhaWxsZSBrZXlib2FyZCBhcmUgYmVoaW5kIHRoZSBjdXJzb3Igcm91dGluZyBrZXlzLgorbm90ZSBGcm9tIGxlZnQgdG8gcmlnaHQsIHRoZXkgYXJlOiBEb3Q3LCBEb3QzLCBEb3QyLCBEb3QxLCBEb3Q0LCBEb3Q1LCBEb3Q2LCBEb3Q4Lgorbm90ZSBUaGUgdHdvIGtleXMgb2YgdGhlIGJyYWlsbGUga2V5Ym9hcmQgaW4gZnJvbnQgb2YgdGhlIGJyYWlsbGUgY2VsbHMsIGZyb20gbGVmdCB0byByaWdodCwgYXJlOiBCYWNrc3BhY2UsIFNwYWNlLgorCittYXAgRG90MSBET1QxCittYXAgRG90MiBET1QyCittYXAgRG90MyBET1QzCittYXAgRG90NCBET1Q0CittYXAgRG90NSBET1Q1CittYXAgRG90NiBET1Q2CittYXAgRG90NyBET1Q3CittYXAgRG90OCBET1Q4CisKK21hcCBTcGFjZSBTUEFDRQorYmluZCBCYWNrc3BhY2UgS0VZX0JBQ0tTUEFDRQorYmluZCBCYWNrc3BhY2UrU3BhY2UgS0VZX0VOVEVSCisKK2JpbmQgU3BhY2UrRG90NyBTSElGVAorYmluZCBTcGFjZStEb3Q4IE1FVEEKK2JpbmQgU3BhY2UrRG90NytEb3Q4IENPTlRST0wKKworYmluZCBTcGFjZStEb3QyK0RvdDUrRG90NiBLRVlfVEFCCitiaW5kIFNwYWNlK0RvdDIrRG90MytEb3Q2IEtFWV9UQUIrc2hpZnQKKworI092ZXJyaWRkZW4gYnkgQnJhaWxsZUJhY2suCisjYmluZCBTcGFjZStEb3Q0IEtFWV9DVVJTT1JfVVAKKyNiaW5kIFNwYWNlK0RvdDYgS0VZX0NVUlNPUl9ET1dOCisjYmluZCBTcGFjZStEb3QyIEtFWV9DVVJTT1JfTEVGVAorI2JpbmQgU3BhY2UrRG90NSBLRVlfQ1VSU09SX1JJR0hUCisKK2JpbmQgU3BhY2UrRG90MStEb3QzIEtFWV9QQUdFX1VQCitiaW5kIFNwYWNlK0RvdDQrRG90NiBLRVlfUEFHRV9ET1dOCisKKyNiaW5kIFNwYWNlK0RvdDErRG90MitEb3QzIEtFWV9IT01FCisjYmluZCBTcGFjZStEb3Q0K0RvdDUrRG90NiBLRVlfRU5ECisKK2JpbmQgU3BhY2UrRG90MytEb3Q2IEtFWV9ERUxFVEUKK2JpbmQgU3BhY2UrRG90MStEb3QyK0RvdDQrRG90NSBLRVlfRVNDQVBFCitiaW5kIFNwYWNlK0RvdDErRG90MytEb3Q1IEtFWV9JTlNFUlQKKworYmluZCBCYWNrc3BhY2UrRG90MSBLRVlfRlVOQ1RJT04rMAorYmluZCBCYWNrc3BhY2UrRG90MStEb3QyIEtFWV9GVU5DVElPTisxCitiaW5kIEJhY2tzcGFjZStEb3QxK0RvdDQgS0VZX0ZVTkNUSU9OKzIKK2JpbmQgQmFja3NwYWNlK0RvdDErRG90NCtEb3Q1IEtFWV9GVU5DVElPTiszCitiaW5kIEJhY2tzcGFjZStEb3QxK0RvdDUgS0VZX0ZVTkNUSU9OKzQKK2JpbmQgQmFja3NwYWNlK0RvdDErRG90MitEb3Q0IEtFWV9GVU5DVElPTis1CitiaW5kIEJhY2tzcGFjZStEb3QxK0RvdDIrRG90NCtEb3Q1IEtFWV9GVU5DVElPTis2CitiaW5kIEJhY2tzcGFjZStEb3QxK0RvdDIrRG90NSBLRVlfRlVOQ1RJT04rNworYmluZCBCYWNrc3BhY2UrRG90MitEb3Q0IEtFWV9GVU5DVElPTis4CitiaW5kIEJhY2tzcGFjZStEb3QyK0RvdDQrRG90NSBLRVlfRlVOQ1RJT04rOQorYmluZCBCYWNrc3BhY2UrRG90MStEb3QzIEtFWV9GVU5DVElPTisxMAorYmluZCBCYWNrc3BhY2UrRG90MStEb3QyK0RvdDMgS0VZX0ZVTkNUSU9OKzExCisKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEJyYWlsbGVCYWNrIEJpbmRpbmdzICMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitpbmNsdWRlIC4uL2FuZHJvaWQtY2hvcmRzLmt0aQpkaWZmIC0tZ2l0IGEvVGFibGVzLmJyYWlsbGViYWNrL2V1L2NsaW8ua3RiIGIvVGFibGVzLmJyYWlsbGViYWNrL2V1L2NsaW8ua3RiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE0YTI0NTYKLS0tIC9kZXYvbnVsbAorKysgYi9UYWJsZXMuYnJhaWxsZWJhY2svZXUvY2xpby5rdGIKQEAgLTAsMCArMSwxMDIgQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyMgICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisjCisjIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyMKKyMgQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCit0aXRsZSBFdXJvQnJhaWxsZSBBemVyQnJhaWxsZSwgQ2xpbywgTm90ZUJyYWlsbGUsIFB1cGlCcmFpbGxlLCBTY3JpYmEKKworaW5jbHVkZSBicmFpbGxlLmt0aQorCitiaW5kICFTdGFyIENPTlRFWFQrYWx0MQorYmluZCAhU2hhcnAgQ09OVEVYVCthbHQyCitiaW5kICFSb3V0aW5nS2V5IFJPVVRFCisKK2JpbmQgIVVwIEtFWV9DVVJTT1JfVVAKK2JpbmQgIUxlZnQgS0VZX0NVUlNPUl9MRUZUCitiaW5kICFSaWdodCBLRVlfQ1VSU09SX1JpZ2h0CitiaW5kICFEb3duIEtFWV9DVVJTT1JfRE9XTgorCitiaW5kICFGaXZlIEhPTUUKK2JpbmQgIU9uZSBUT1BfTEVGVAorYmluZCAhU2V2ZW4gQk9UX0xFRlQKK2JpbmQgIVRocmVlIFBSRElGTE4KK2JpbmQgIU5pbmUgTlhESUZMTgorYmluZCAhWmVybyBDU1JUUksKKworYmluZCAhQSBGUkVFWkUKKworYmluZCAhRSBGV0lOTFQKK2JpbmQgIUYgTE5VUAorYmluZCAhRyBQUlBST01QVAorYmluZCAhSCBQUkVGTUVOVQorYmluZCAhSSBJTkZPCitiaW5kICFLIE5YUFJPTVBUCitiaW5kICFMIExORE4KK2JpbmQgIU0gRldJTlJUCisKKworY29udGV4dCBhbHQxCitiaW5kICFTdGFyIENPTlRFWFQrZGVmYXVsdAorCitiaW5kICFEb3duIENTUlRSSworYmluZCAhUmlnaHQgVFVORVMKKworYmluZCAhRSBDT05URVhUK0NMSVBfTkVXCitiaW5kICFGIENPTlRFWFQrQ0xJUF9BREQKK2JpbmQgIUcgQ1NSVklTCitiaW5kICFLIENPTlRFWFQrQ09QWV9SRUNUCitiaW5kICFMIFBBU1RFCitiaW5kICFNIENPTlRFWFQrQ09QWV9MSU5FCisKKworY29udGV4dCBhbHQyCitiaW5kICFTaGFycCBDT05URVhUK2RlZmF1bHQKKworYmluZCAhTGVmdCBMTkJFRworYmluZCAhUmlnaHQgTE5FTkQKK2JpbmQgIVVwIEhPTUUKK2JpbmQgIURvd24gQkFDSworCitiaW5kICFPbmUgTEVBUk4KK2JpbmQgIVRocmVlIFRPUF9MRUZUCitiaW5kICFOaW5lIEJPVF9MRUZUCisKK2JpbmQgIUEgRElTUE1ECisKK2JpbmQgIUUgVE9QX0xFRlQKK2JpbmQgIUcgUFJTRUFSQ0gKK2JpbmQgIUggSEVMUAorYmluZCAhSyBOWFNFQVJDSAorYmluZCAhTCBMRUFSTgorYmluZCAhTSBCT1RfTEVGVAorCisKK2NvbnRleHQgQ0xJUF9ORVcKK2JpbmQgIVJvdXRpbmdLZXkgQ0xJUF9ORVcKKworCitjb250ZXh0IENMSVBfQURECitiaW5kICFSb3V0aW5nS2V5IENMSVBfQURECisKKworY29udGV4dCBDT1BZX1JFQ1QKK2JpbmQgIVJvdXRpbmdLZXkgQ09QWV9SRUNUCisKKworY29udGV4dCBDT1BZX0xJTkUKK2JpbmQgIVJvdXRpbmdLZXkgQ09QWV9MSU5FCisKKwpkaWZmIC0tZ2l0IGEvVGFibGVzLmJyYWlsbGViYWNrL2V1L2NvbW1vbi5rdGkgYi9UYWJsZXMuYnJhaWxsZWJhY2svZXUvY29tbW9uLmt0aQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNGY2NzQ4Ci0tLSAvZGV2L251bGwKKysrIGIvVGFibGVzLmJyYWlsbGViYWNrL2V1L2NvbW1vbi5rdGkKQEAgLTAsMCArMSwyMCBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorIyAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyMKKyMgQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorIworIyBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorIworIyBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisjIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyMgbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisjCisjIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK2luY2x1ZGUgYnJhaWxsZS5rdGkKK2luY2x1ZGUgcm91dGluZy5rdGkKZGlmZiAtLWdpdCBhL1RhYmxlcy5icmFpbGxlYmFjay9ldS9lc3lzX2xhcmdlLmt0YiBiL1RhYmxlcy5icmFpbGxlYmFjay9ldS9lc3lzX2xhcmdlLmt0YgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NTk0ZmU3Ci0tLSAvZGV2L251bGwKKysrIGIvVGFibGVzLmJyYWlsbGViYWNrL2V1L2VzeXNfbGFyZ2Uua3RiCkBAIC0wLDAgKzEsMjUgQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyMgICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisjCisjIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyMKKyMgQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCit0aXRsZSBFdXJvQnJhaWxsZSBFc3lzIDgwCisKK2luY2x1ZGUgY29tbW9uLmt0aQoraW5jbHVkZSBqb3lzdGlja3Mua3RpCitpbmNsdWRlIHN3MTIua3RpCitpbmNsdWRlIHN3MzQua3RpCitpbmNsdWRlIHN3NTYua3RpCmRpZmYgLS1naXQgYS9UYWJsZXMuYnJhaWxsZWJhY2svZXUvZXN5c19tZWRpdW0ua3RiIGIvVGFibGVzLmJyYWlsbGViYWNrL2V1L2VzeXNfbWVkaXVtLmt0YgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NThlNjE4Ci0tLSAvZGV2L251bGwKKysrIGIvVGFibGVzLmJyYWlsbGViYWNrL2V1L2VzeXNfbWVkaXVtLmt0YgpAQCAtMCwwICsxLDI0IEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisjICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorIworIyBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisjCisjIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisjCisjIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyMgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorIyBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyMKKyMgV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworIworIyBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKwordGl0bGUgRXVyb0JyYWlsbGUgRXN5cyA0MCw2NAorCitpbmNsdWRlIGNvbW1vbi5rdGkKK2luY2x1ZGUgam95c3RpY2tzLmt0aQoraW5jbHVkZSBzdzEyLmt0aQoraW5jbHVkZSBzdzM0Lmt0aQpkaWZmIC0tZ2l0IGEvVGFibGVzLmJyYWlsbGViYWNrL2V1L2VzeXNfc21hbGwua3RiIGIvVGFibGVzLmJyYWlsbGViYWNrL2V1L2VzeXNfc21hbGwua3RiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZhYzRhMmQKLS0tIC9kZXYvbnVsbAorKysgYi9UYWJsZXMuYnJhaWxsZWJhY2svZXUvZXN5c19zbWFsbC5rdGIKQEAgLTAsMCArMSwyMyBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorIyAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyMKKyMgQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorIworIyBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorIworIyBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisjIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyMgbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisjCisjIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK3RpdGxlIEV1cm9CcmFpbGxlIEVzeXMgMTIsMjQKKworaW5jbHVkZSBjb21tb24ua3RpCitpbmNsdWRlIGpveXN0aWNrcy5rdGkKK2luY2x1ZGUgc3cxMi5rdGkKZGlmZiAtLWdpdCBhL1RhYmxlcy5icmFpbGxlYmFjay9ldS9lc3l0aW1lLmt0YiBiL1RhYmxlcy5icmFpbGxlYmFjay9ldS9lc3l0aW1lLmt0YgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMWZkNjhhCi0tLSAvZGV2L251bGwKKysrIGIvVGFibGVzLmJyYWlsbGViYWNrL2V1L2VzeXRpbWUua3RiCkBAIC0wLDAgKzEsMTI2IEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisjICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorIworIyBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisjCisjIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisjCisjIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyMgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorIyBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyMKKyMgV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworIworIyBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKwordGl0bGUgRXVyb0JyYWlsbGUgRXN5dGltZQorCitpbmNsdWRlIGNvbW1vbi5rdGkKKworbm90ZSBUaGUgZm91ciBrZXlzIGJlbG93IHRoZSBsZWZ0IGpveXN0aWNrLCBmcm9tIHRvcCB0byBib3R0b20sIGFyZToKK25vdGUgKiBMMSwgRXNjYXBlLCBUYWIsIFNoaWZ0Lgorbm90ZSBUaGUgZm91ciBrZXlzIGJlbG93IHRoZSByaWdodCBqb3lzdGljaywgZnJvbSB0b3AgdG8gYm90dG9tLCBhcmU6Citub3RlICogTDgsIEluc2VydCwgQWx0LCBDb250cm9sLgorbm90ZSBTb21lIGtleSBjb21iaW5hdGlvbnMgaGF2ZSBiZWVuIHJlc2VydmVkIGZvciBpbnRlcm5hbCB1c2U6Citub3RlICsgTGVmdEpveXN0aWNrRG93bjogdGhlIEFsdCBrZXkKK25vdGUgKyBMZWZ0Sm95c3RpY2tQcmVzczogdGhlIEFsdCBrZXkgcHJlc3NlZCB0d2ljZSBpbiBhIHJvdworbm90ZSArIExlZnRKb3lzdGlja0Rvd24gKyBSaWdodEpveXN0aWNrKFJpZ2h0L0xlZnQpOiBlbmFibGUvZGlzYWJsZSBicmFpbGxlIGZ1bmN0aW9ucworbm90ZSArIExlZnRKb3lzdGlja0Rvd24gKyBSaWdodEpveXN0aWNrKFVwL0Rvd24pOiBzd2l0Y2ggdG8gaW50ZXJuYWwvZXh0ZXJuYWwgKEVzeXRpbWUvUEMpIFVTQiBpbnRlcmZhY2UKK25vdGUgKyBMZWZ0Sm95c3RpY2tEb3duICsgTDEgKyBFc2NhcGU6IHN3aXRjaCB0byBzaW5nbGUtaGFuZCBicmFpbGxlIGtleWJvYXJkIDEKK25vdGUgKyBMZWZ0Sm95c3RpY2tEb3duICsgU2hpZnQgKyBUYWI6IHN3aXRjaCB0byBzaW5nbGUtaGFuZCBicmFpbGxlIGtleWJvYXJkIDIKK25vdGUgKyBMZWZ0Sm95c3RpY2tEb3duICsgSW5zZXJ0ICsgTDg6IHN3aXRjaCB0byBzdGFuZGFyZCAodHdvLWhhbmQpIGJyYWlsbGUga2V5Ym9hcmQKK25vdGUgKyBSaWdodEpveXN0aWNrUHJlc3M6IHRoZSBFbnRlciBrZXkKK25vdGUgKyBSaWdodEpveXN0aWNrKGxlZnQvcmlnaHQvdXAvZG93bik6IHRoZSBBcnJvdyBMZWZ0L1JpZ2h0L1VwL0Rvd24ga2V5CisKK2JpbmQgTDErTDggSE9NRQorYmluZCBMZWZ0Sm95c3RpY2tQcmVzcytSaWdodEpveXN0aWNrUHJlc3MgQkFDSworCitiaW5kIEwxIEZXSU5MVAorYmluZCBMOCBGV0lOUlQKKworYmluZCBMZWZ0Sm95c3RpY2tMZWZ0IExOVVAKK2JpbmQgTGVmdEpveXN0aWNrUmlnaHQgTE5ETgorYmluZCBMZWZ0Sm95c3RpY2tVcCBDU1JUUksKK2JpbmQgTGVmdEpveXN0aWNrRG93biBOT09QICMgaW50ZXJuYWw6IHRoZSBBbHQga2V5CitiaW5kIExlZnRKb3lzdGlja1ByZXNzIE5PT1AgIyBpbnRlcm5hbDogdGhlIEFsdCBrZXkgcHJlc3NlZCB0d2ljZSBpbiBhIHJvdworCitiaW5kIFJpZ2h0Sm95c3RpY2tMZWZ0IE5PT1AgIyBpbnRlcm5hbDogdGhlIEFycm93IExlZnQga2V5CitiaW5kIFJpZ2h0Sm95c3RpY2tSaWdodCBOT09QICMgaW50ZXJuYWw6IHRoZSBBcnJvdyBSaWdodCBrZXkKK2JpbmQgUmlnaHRKb3lzdGlja1VwIE5PT1AgIyBpbnRlcm5hbDogdGhlIEFycm93IFVwIGtleQorYmluZCBSaWdodEpveXN0aWNrRG93biBOT09QICMgaW50ZXJuYWw6IHRoZSBBcnJvdyBEb3duIGtleQorYmluZCBSaWdodEpveXN0aWNrUHJlc3MgTk9PUCAjIGludGVybmFsOiB0aGUgRW50ZXIga2V5CisKK2JpbmQgTGVmdEpveXN0aWNrTGVmdCtSaWdodEpveXN0aWNrUHJlc3MgVE9QCitiaW5kIExlZnRKb3lzdGlja0xlZnQrUmlnaHRKb3lzdGlja0xlZnQgUFJQUk9NUFQKK2JpbmQgTGVmdEpveXN0aWNrTGVmdCtSaWdodEpveXN0aWNrUmlnaHQgUFJQR1JQSAorYmluZCBMZWZ0Sm95c3RpY2tMZWZ0K1JpZ2h0Sm95c3RpY2tVcCBQUkRJRkxOCitiaW5kIExlZnRKb3lzdGlja0xlZnQrUmlnaHRKb3lzdGlja0Rvd24gQVRUUlVQCisKK2JpbmQgTGVmdEpveXN0aWNrUmlnaHQrUmlnaHRKb3lzdGlja1ByZXNzIEJPVAorYmluZCBMZWZ0Sm95c3RpY2tSaWdodCtSaWdodEpveXN0aWNrTGVmdCBOWFBST01QVAorYmluZCBMZWZ0Sm95c3RpY2tSaWdodCtSaWdodEpveXN0aWNrUmlnaHQgTlhQR1JQSAorYmluZCBMZWZ0Sm95c3RpY2tSaWdodCtSaWdodEpveXN0aWNrVXAgTlhESUZMTgorYmluZCBMZWZ0Sm95c3RpY2tSaWdodCtSaWdodEpveXN0aWNrRG93biBBVFRSRE4KKworYmluZCBMZWZ0Sm95c3RpY2tVcCtSaWdodEpveXN0aWNrUHJlc3MgRElTUE1ECitiaW5kIExlZnRKb3lzdGlja1VwK1JpZ2h0Sm95c3RpY2tMZWZ0IENTUlZJUworYmluZCBMZWZ0Sm95c3RpY2tVcCtSaWdodEpveXN0aWNrUmlnaHQgQVRUUlZJUworYmluZCBMZWZ0Sm95c3RpY2tVcCtSaWdodEpveXN0aWNrVXAgU0lYRE9UUytvbgorYmluZCBMZWZ0Sm95c3RpY2tVcCtSaWdodEpveXN0aWNrRG93biBTSVhET1RTK29mZgorCitiaW5kIExlZnRKb3lzdGlja0Rvd24rUmlnaHRKb3lzdGlja1ByZXNzIElORk8KK2JpbmQgTGVmdEpveXN0aWNrRG93bitSaWdodEpveXN0aWNrTGVmdCBOT09QICMgaW50ZXJuYWw6IGRpc2FibGUgYnJhaWxsZSBmdW5jdGlvbnMKK2JpbmQgTGVmdEpveXN0aWNrRG93bitSaWdodEpveXN0aWNrUmlnaHQgTk9PUCAjIGludGVybmFsOiBlbmFibGUgYnJhaWxsZSBmdW5jdGlvbnMKK2JpbmQgTGVmdEpveXN0aWNrRG93bitSaWdodEpveXN0aWNrVXAgTk9PUCAjIGludGVybmFsOiBzd2l0Y2ggdG8gaW50ZXJuYWwgKEVzeXRpbWUpIFVTQiBpbnRlcmZhY2UKK2JpbmQgTGVmdEpveXN0aWNrRG93bitSaWdodEpveXN0aWNrRG93biBOT09QICMgaW50ZXJuYWw6IHN3aXRjaCB0byBleHRlcm5hbCAoUEMpIFVTQiBpbnRlcmZhY2UKKworYmluZCBMZWZ0Sm95c3RpY2tQcmVzcytSaWdodEpveXN0aWNrTGVmdCBOT09QCitiaW5kIExlZnRKb3lzdGlja1ByZXNzK1JpZ2h0Sm95c3RpY2tSaWdodCBOT09QCitiaW5kIExlZnRKb3lzdGlja1ByZXNzK1JpZ2h0Sm95c3RpY2tVcCBOT09QCitiaW5kIExlZnRKb3lzdGlja1ByZXNzK1JpZ2h0Sm95c3RpY2tEb3duIE5PT1AKKworYmluZCBMZWZ0Sm95c3RpY2tQcmVzcytSb3V0aW5nS2V5MSBTRVRMRUZUCitiaW5kIExlZnRKb3lzdGlja0xlZnQrUm91dGluZ0tleTEgUFJESUZDSEFSCitiaW5kIExlZnRKb3lzdGlja1JpZ2h0K1JvdXRpbmdLZXkxIE5YRElGQ0hBUgorYmluZCBMZWZ0Sm95c3RpY2tVcCtSb3V0aW5nS2V5MSBQUklOREVOVAorYmluZCBMZWZ0Sm95c3RpY2tEb3duK1JvdXRpbmdLZXkxIE5YSU5ERU5UCisKK2JpbmQgUmlnaHRKb3lzdGlja1ByZXNzK1JvdXRpbmdLZXkxIERFU0NDSEFSCitiaW5kIFJpZ2h0Sm95c3RpY2tMZWZ0K1JvdXRpbmdLZXkxIENMSVBfTkVXCitiaW5kIFJpZ2h0Sm95c3RpY2tVcCtSb3V0aW5nS2V5MSBDTElQX0FERAorYmluZCBSaWdodEpveXN0aWNrUmlnaHQrUm91dGluZ0tleTEgQ09QWV9MSU5FCitiaW5kIFJpZ2h0Sm95c3RpY2tEb3duK1JvdXRpbmdLZXkxIENPUFlfUkVDVAorCitiaW5kIEwxK0xlZnRKb3lzdGlja1ByZXNzIFRJTUUKK2JpbmQgTDErTGVmdEpveXN0aWNrTGVmdCBDSFJMVAorYmluZCBMMStMZWZ0Sm95c3RpY2tSaWdodCBDSFJSVAorYmluZCBMMStMZWZ0Sm95c3RpY2tVcCBQUlNFQVJDSAorYmluZCBMMStMZWZ0Sm95c3RpY2tEb3duIE5YU0VBUkNICisKK2JpbmQgTDgrTGVmdEpveXN0aWNrUHJlc3MgQ1NSSk1QX1ZFUlQKK2JpbmQgTDgrTGVmdEpveXN0aWNrTGVmdCBGV0lOTFRTS0lQCitiaW5kIEw4K0xlZnRKb3lzdGlja1JpZ2h0IEZXSU5SVFNLSVAKK2JpbmQgTDgrTGVmdEpveXN0aWNrVXAgTE5CRUcKK2JpbmQgTDgrTGVmdEpveXN0aWNrRG93biBMTkVORAorCitiaW5kIEwxK1JpZ2h0Sm95c3RpY2tQcmVzcyBQUkVGTUVOVQorYmluZCBMMStSaWdodEpveXN0aWNrTGVmdCBQUkVGTE9BRAorYmluZCBMMStSaWdodEpveXN0aWNrUmlnaHQgUFJFRlNBVkUKK2JpbmQgTDErUmlnaHRKb3lzdGlja1VwIEhFTFAKK2JpbmQgTDErUmlnaHRKb3lzdGlja0Rvd24gTEVBUk4KKworYmluZCBMOCtSaWdodEpveXN0aWNrUHJlc3MgUEFTVEUKK2JpbmQgTDgrUmlnaHRKb3lzdGlja0xlZnQgQ0xJUF9SRVNUT1JFCitiaW5kIEw4K1JpZ2h0Sm95c3RpY2tSaWdodCBDTElQX1NBVkUKK2JpbmQgTDgrUmlnaHRKb3lzdGlja1VwIEZSRUVaRQorYmluZCBMOCtSaWdodEpveXN0aWNrRG93biBBVVRPUkVQRUFUCisKK2NvbnRleHQgbWVudQorYmluZCBMOCtSaWdodEpveXN0aWNrVXAgTUVOVV9QUkVWX0lURU0KK2JpbmQgTDgrUmlnaHRKb3lzdGlja0Rvd24gTUVOVV9ORVhUX0lURU0KK2JpbmQgTDgrUmlnaHRKb3lzdGlja0xlZnQgTUVOVV9QUkVWX1NFVFRJTkcKK2JpbmQgTDgrUmlnaHRKb3lzdGlja1JpZ2h0IE1FTlVfTkVYVF9TRVRUSU5HCitiaW5kIEw4K1JpZ2h0Sm95c3RpY2tQcmVzcyBNRU5VX1BSRVZfTEVWRUwKZGlmZiAtLWdpdCBhL1RhYmxlcy5icmFpbGxlYmFjay9ldS9pcmlzLmt0YiBiL1RhYmxlcy5icmFpbGxlYmFjay9ldS9pcmlzLmt0YgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNmVkYzVmCi0tLSAvZGV2L251bGwKKysrIGIvVGFibGVzLmJyYWlsbGViYWNrL2V1L2lyaXMua3RiCkBAIC0wLDAgKzEsODggQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyMgICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisjCisjIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyMKKyMgQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCit0aXRsZSBFdXJvQnJhaWxsZSBJcmlzCisKK2luY2x1ZGUgY29tbW9uLmt0aQorbm90ZSBUaGUgTWVudSBrZXkgaXMgdGhlIHNtYWxsLCByb3VuZCBidXR0b24gdG8gdGhlIGxlZnQgb2YgdGhlIGN1cnNvciByb3V0aW5nIGtleXMuCitub3RlIFRoZSBaIGtleSBpcyB0aGUgc21hbGwsIHJvdW5kIGJ1dHRvbiB0byB0aGUgcmlnaHQgb2YgdGhlIGN1cnNvciByb3V0aW5nIGtleXMuCisKK2JpbmQgRG93bitMZWZ0IENPTlRFWFQrYWx0MQorYmluZCBEb3duK1JpZ2h0IENPTlRFWFQrYWx0MgorCitiaW5kIEwxIEZXSU5MVAorYmluZCBMMiBMTlVQCitiaW5kIEwzIFBSUFJPTVBUCitiaW5kIEw0IFBSRUZNRU5VCitiaW5kIEw1IElORk8KK2JpbmQgTDYgTlhQUk9NUFQKK2JpbmQgTDcgTE5ETgorYmluZCBMOCBGV0lOUlQKK2JpbmQgTGVmdCBLRVlfQ1VSU09SX0xFRlQKK2JpbmQgUmlnaHQgS0VZX0NVUlNPUl9SSUdIVAorYmluZCBVcCBLRVlfQ1VSU09SX1VQCitiaW5kIERvd24gS0VZX0NVUlNPUl9ET1dOCitiaW5kIEwxK0wyIFRPUF9MRUZUCitiaW5kIEwzK0w0IEZSRUVaRQorYmluZCBMNitMNyBIT01FCitiaW5kIEw3K0w4IEJPVF9MRUZUCitiaW5kIEwxK0wyK0wzK0w0IFJFU1RBUlRCUkwKK2JpbmQgTDUrTDYrTDcrTDggUkVTVEFSVFNQRUVDSAorCisKK2NvbnRleHQgYWx0MQorYmluZCBMMSBUT1BfTEVGVAorYmluZCBMMyBQUlNFQVJDSAorYmluZCBMNCBIRUxQCitiaW5kIEw1IExFQVJOCitiaW5kIEw2IE5YU0VBUkNICitiaW5kIEw4IEJPVF9MRUZUCitiaW5kIExlZnQgTE5CRUcKK2JpbmQgUmlnaHQgTE5FTkQKK2JpbmQgVXAgSE9NRQorYmluZCBEb3duIEJBQ0sKKworCitjb250ZXh0IGFsdDIKK2JpbmQgTDEgQ09OVEVYVCtDTElQX05FVworYmluZCBMMiBDT05URVhUK0NMSVBfQURECitiaW5kIEwzIENTUlZJUworYmluZCBMNiBDT05URVhUK0NPUFlfUkVDVAorYmluZCBMNyBQQVNURQorYmluZCBMOCBDT05URVhUK0NPUFlfTElORQorYmluZCBVcCBQUkVGTUVOVQorYmluZCBEb3duIENTUlRSSworYmluZCBSaWdodCBUVU5FUworCisKK2NvbnRleHQgQ0xJUF9ORVcKK2JpbmQgUm91dGluZ0tleTEgQ0xJUF9ORVcKKworCitjb250ZXh0IENMSVBfQURECitiaW5kIFJvdXRpbmdLZXkxIENMSVBfQURECisKKworY29udGV4dCBDT1BZX1JFQ1QKK2JpbmQgUm91dGluZ0tleTEgQ09QWV9SRUNUCisKKworY29udGV4dCBDT1BZX0xJTkUKK2JpbmQgUm91dGluZ0tleTEgQ09QWV9MSU5FCisKKwpkaWZmIC0tZ2l0IGEvVGFibGVzLmJyYWlsbGViYWNrL2V1L2pveXN0aWNrcy5rdGkgYi9UYWJsZXMuYnJhaWxsZWJhY2svZXUvam95c3RpY2tzLmt0aQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYmI2NTlmCi0tLSAvZGV2L251bGwKKysrIGIvVGFibGVzLmJyYWlsbGViYWNrL2V1L2pveXN0aWNrcy5rdGkKQEAgLTAsMCArMSw2NCBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorIyAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyMKKyMgQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorIworIyBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorIworIyBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisjIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyMgbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisjCisjIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK25vdGUgVGhlIGpveXN0aWNrcyBhcmUgdGhlIHNtYWxsLCByb3VuZCwgZml2ZS13YXkgKGxlZnQsIHJpZ2h0LCB1cCwgZG93biwgcHJlc3MpIGNvbnRyb2xzIHRvIHRoZSBsZWZ0IGFuZCByaWdodCBvZiB0aGUgY3Vyc29yIHJvdXRpbmcga2V5cy4KKworYmluZCBSaWdodEpveXN0aWNrUHJlc3MgSE9NRQorYmluZCBSaWdodEpveXN0aWNrTGVmdCBGV0lOTFQKK2JpbmQgUmlnaHRKb3lzdGlja1JpZ2h0IEZXSU5SVAorYmluZCBSaWdodEpveXN0aWNrVXAgTE5VUAorYmluZCBSaWdodEpveXN0aWNrRG93biBMTkROCisKK2JpbmQgTGVmdEpveXN0aWNrTGVmdCBQUlBST01QVAorYmluZCBMZWZ0Sm95c3RpY2tSaWdodCBOWFBST01QVAorYmluZCBMZWZ0Sm95c3RpY2tVcCBUT1BfTEVGVAorYmluZCBMZWZ0Sm95c3RpY2tEb3duIEJPVF9MRUZUCisKK2JpbmQgTGVmdEpveXN0aWNrRG93bitSaWdodEpveXN0aWNrTGVmdCBDT05URVhUK0NMSVBfTkVXCitiaW5kIExlZnRKb3lzdGlja0Rvd24rUmlnaHRKb3lzdGlja1VwIENPTlRFWFQrQ0xJUF9BREQKK2JpbmQgTGVmdEpveXN0aWNrRG93bitSaWdodEpveXN0aWNrRG93biBDT05URVhUK0NPUFlfUkVDVAorYmluZCBMZWZ0Sm95c3RpY2tEb3duK1JpZ2h0Sm95c3RpY2tSaWdodCBDT05URVhUK0NPUFlfTElORQorYmluZCBMZWZ0Sm95c3RpY2tEb3duK1JpZ2h0Sm95c3RpY2tQcmVzcyBQQVNURQorCitiaW5kIExlZnRKb3lzdGlja0xlZnQrUmlnaHRKb3lzdGlja1ByZXNzIFNBWV9MSU5FCitiaW5kIExlZnRKb3lzdGlja0xlZnQrUmlnaHRKb3lzdGlja1VwIFNBWV9BQk9WRQorYmluZCBMZWZ0Sm95c3RpY2tMZWZ0K1JpZ2h0Sm95c3RpY2tEb3duIFNBWV9CRUxPVworYmluZCBMZWZ0Sm95c3RpY2tMZWZ0K1JpZ2h0Sm95c3RpY2tMZWZ0IFNBWV9TT0ZURVIKK2JpbmQgTGVmdEpveXN0aWNrTGVmdCtSaWdodEpveXN0aWNrUmlnaHQgU0FZX0xPVURFUgorCitiaW5kIExlZnRKb3lzdGlja1JpZ2h0K1JpZ2h0Sm95c3RpY2tVcCBMRUFSTgorYmluZCBMZWZ0Sm95c3RpY2tSaWdodCtSaWdodEpveXN0aWNrRG93biBIRUxQCisKKworY29udGV4dCBDTElQX05FVworYmluZCBSb3V0aW5nS2V5MSBDTElQX05FVworCisKK2NvbnRleHQgQ0xJUF9BREQKK2JpbmQgUm91dGluZ0tleTEgQ0xJUF9BREQKKworCitjb250ZXh0IENPUFlfUkVDVAorYmluZCBSb3V0aW5nS2V5MSBDT1BZX1JFQ1QKKworCitjb250ZXh0IENPUFlfTElORQorYmluZCBSb3V0aW5nS2V5MSBDT1BZX0xJTkUKKworCitjb250ZXh0IGRlZmF1bHQKZGlmZiAtLWdpdCBhL1RhYmxlcy5icmFpbGxlYmFjay9ldS9yb3V0aW5nLmt0aSBiL1RhYmxlcy5icmFpbGxlYmFjay9ldS9yb3V0aW5nLmt0aQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMGMwNTRiCi0tLSAvZGV2L251bGwKKysrIGIvVGFibGVzLmJyYWlsbGViYWNrL2V1L3JvdXRpbmcua3RpCkBAIC0wLDAgKzEsMzMgQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyMgICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisjCisjIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyMKKyMgQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitub3RlIFRoZSBjdXJzb3Igcm91dGluZyBrZXlzIGFyZSB0aGUgc21hbGwsIHJvdW5kIGJ1dHRvbnMganVzdCBiZWhpbmQgdGhlIGJyYWlsbGUgY2VsbHMuCitub3RlIFJvdXRpbmdLZXkxIG1lYW5zIHByZXNzaW5nIGEgY3Vyc29yIHJvdXRpbmcga2V5IG9uY2UgKGEgc2luZ2xlIGNsaWNrKS4KK25vdGUgUm91dGluZ0tleTIgbWVhbnMgcHJlc3NpbmcgYSBjdXJzb3Igcm91dGluZyBrZXkgdHdpY2UgcXVpY2tseSAoYSBkb3VibGUgY2xpY2spLgorCisjT3ZlcnJpZGRlbiBieSBCcmFpbGxlQmFjay4KKyNiaW5kIFJvdXRpbmdLZXkxIFJPVVRFCitiaW5kIFJvdXRpbmdLZXkyIERFU0NDSEFSCisKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEJyYWlsbGVCYWNrIEJpbmRpbmdzICMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjIFJPVVRFKzEyOCBpcyBhIGxvbmctcHJlc3Mgb24gdGhlIHJvdXRpbmcga2V5LgorYmluZCBSb3V0aW5nS2V5MSBST1VURTpST1VURSsxMjgKZGlmZiAtLWdpdCBhL1RhYmxlcy5icmFpbGxlYmFjay9ldS9zdzEyLmt0aSBiL1RhYmxlcy5icmFpbGxlYmFjay9ldS9zdzEyLmt0aQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYzM5MTM0Ci0tLSAvZGV2L251bGwKKysrIGIvVGFibGVzLmJyYWlsbGViYWNrL2V1L3N3MTIua3RpCkBAIC0wLDAgKzEsMzUgQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyMgICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisjCisjIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyMKKyMgQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitub3RlIFRoZSBzd2l0Y2hlcyBhcmUgdGhyZWUtd2F5IChsZWZ0LCByaWdodCwgcHJlc3MpIGNvbnRyb2xzIG9uIHRoZSBmcm9udCBzdXJmYWNlLgorbm90ZSBTd2l0Y2gxIGlzIHRoZSBsZWZ0IG91dGVyIHN3aXRjaC4KK25vdGUgU3dpdGNoMiBpcyB0aGUgcmlnaHQgb3V0ZXIgc3dpdGNoLgorCitiaW5kIFN3aXRjaDFMZWZ0IEZXSU5MVAorYmluZCBTd2l0Y2gxUmlnaHQgRldJTlJUCisKK2JpbmQgTGVmdEpveXN0aWNrTGVmdCtTd2l0Y2gxTGVmdCtTd2l0Y2gxUmlnaHQgTVVURQorYmluZCBMZWZ0Sm95c3RpY2tMZWZ0K1N3aXRjaDFMZWZ0IFNBWV9TTE9XRVIKK2JpbmQgTGVmdEpveXN0aWNrTGVmdCtTd2l0Y2gxUmlnaHQgU0FZX0ZBU1RFUgorCitiaW5kIExlZnRKb3lzdGlja1JpZ2h0K1N3aXRjaDFMZWZ0IExOQkVHCitiaW5kIExlZnRKb3lzdGlja1JpZ2h0K1N3aXRjaDFSaWdodCBMTkVORAorCitiaW5kIExlZnRKb3lzdGlja1JpZ2h0K1N3aXRjaDFMZWZ0K1N3aXRjaDFSaWdodCBQUkVGTUVOVQorYmluZCBMZWZ0Sm95c3RpY2tSaWdodCtTd2l0Y2gyTGVmdCtTd2l0Y2gyUmlnaHQgQ1NSVFJLCisKZGlmZiAtLWdpdCBhL1RhYmxlcy5icmFpbGxlYmFjay9ldS9zdzM0Lmt0aSBiL1RhYmxlcy5icmFpbGxlYmFjay9ldS9zdzM0Lmt0aQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMGVkOTY2Ci0tLSAvZGV2L251bGwKKysrIGIvVGFibGVzLmJyYWlsbGViYWNrL2V1L3N3MzQua3RpCkBAIC0wLDAgKzEsMjEgQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyMgICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisjCisjIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyMKKyMgQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitub3RlIFN3aXRjaDMgaXMgdGhlIGxlZnQgaW5uZXIgc3dpdGNoLgorbm90ZSBTd2l0Y2g0IGlzIHRoZSByaWdodCBpbm5lciBzd2l0Y2guCisKZGlmZiAtLWdpdCBhL1RhYmxlcy5icmFpbGxlYmFjay9ldS9zdzU2Lmt0aSBiL1RhYmxlcy5icmFpbGxlYmFjay9ldS9zdzU2Lmt0aQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYzQzYWEyCi0tLSAvZGV2L251bGwKKysrIGIvVGFibGVzLmJyYWlsbGViYWNrL2V1L3N3NTYua3RpCkBAIC0wLDAgKzEsMjEgQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyMgICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisjCisjIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyMKKyMgQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitub3RlIFN3aXRjaDUgaXMgYmV0d2VlbiBTd2l0Y2gxIGFuZCBTd2l0Y2gzLgorbm90ZSBTd2l0Y2g2IGlzIGJldHdlZW4gU3dpdGNoMiBhbmQgU3dpdGNoNC4KKwpkaWZmIC0tZ2l0IGEvVGFibGVzLmJyYWlsbGViYWNrL2ZzL2J1bXBlcnMua3RpIGIvVGFibGVzLmJyYWlsbGViYWNrL2ZzL2J1bXBlcnMua3RpCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ3YmZjOGUKLS0tIC9kZXYvbnVsbAorKysgYi9UYWJsZXMuYnJhaWxsZWJhY2svZnMvYnVtcGVycy5rdGkKQEAgLTAsMCArMSw1NCBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorIyAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyMKKyMgQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorIworIyBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorIworIyBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisjIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyMgbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisjCisjIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMgVGhpcyBrZXkgc3VidGFibGUgaXMgZm9yIEZyZWVkb21TY2llbnRpZmljIGRpc3BsYXlzIHdoaWNoIGhhdmUgYnVtcGVyIGJhcnMuCisKK25vdGUgVGhlIGxlZnQgYW5kIHJpZ2h0IGJ1bXBlcnMgYXJlIGxvbmcsIHVwL2Rvd24sIHJvY2tlciBiYXJzLgorbm90ZSAqIE5ld2VyIG1vZGVscyByZWZlciB0byB0aGVtIGFzIHBhbm5pbmcgcm9ja2Vycy4KK25vdGUgKiBPbiBzb21lIG1vZGVscywgZWFjaCBidW1wZXIgaXMgYSBwYWlyIG9mIHNob3J0ZXIgYmFycy4KKworYmluZCBMZWZ0QnVtcGVyVXAgRldJTkxUCitiaW5kIExlZnRCdW1wZXJEb3duIEZXSU5SVAorYmluZCBSaWdodEJ1bXBlclVwIEZXSU5MVAorYmluZCBSaWdodEJ1bXBlckRvd24gRldJTlJUCisKK2JpbmQgTGVmdEJ1bXBlclVwK1BhbkxlZnQgQ0hSTFQKK2JpbmQgTGVmdEJ1bXBlckRvd24rUGFuTGVmdCBDSFJSVAorYmluZCBSaWdodEJ1bXBlclVwK1BhbkxlZnQgSFdJTkxUCitiaW5kIFJpZ2h0QnVtcGVyRG93bitQYW5MZWZ0IEhXSU5SVAorCitiaW5kIExlZnRCdW1wZXJVcCtMZWZ0U2VsZWN0b3IgRldJTkxUU0tJUAorYmluZCBMZWZ0QnVtcGVyRG93bitMZWZ0U2VsZWN0b3IgRldJTlJUU0tJUAorYmluZCBSaWdodEJ1bXBlclVwK0xlZnRTZWxlY3RvciBQUk5CV0lOCitiaW5kIFJpZ2h0QnVtcGVyRG93bitMZWZ0U2VsZWN0b3IgTlhOQldJTgorCitiaW5kIExlZnRCdW1wZXJVcCtSaWdodFNlbGVjdG9yIFBSUFJPTVBUCitiaW5kIExlZnRCdW1wZXJEb3duK1JpZ2h0U2VsZWN0b3IgTlhQUk9NUFQKK2JpbmQgUmlnaHRCdW1wZXJVcCtSaWdodFNlbGVjdG9yIFBSUEdSUEgKK2JpbmQgUmlnaHRCdW1wZXJEb3duK1JpZ2h0U2VsZWN0b3IgTlhQR1JQSAorCitiaW5kIExlZnRCdW1wZXJVcCtQYW5SaWdodCBGUkVFWkUrb24KK2JpbmQgTGVmdEJ1bXBlckRvd24rUGFuUmlnaHQgRlJFRVpFK29mZgorYmluZCBSaWdodEJ1bXBlclVwK1BhblJpZ2h0IERJU1BNRCtvbgorYmluZCBSaWdodEJ1bXBlckRvd24rUGFuUmlnaHQgRElTUE1EK29mZgorCitiaW5kIExlZnRCdW1wZXJVcCtSb3V0aW5nS2V5IFBSRElGQ0hBUgorYmluZCBMZWZ0QnVtcGVyRG93bitSb3V0aW5nS2V5IE5YRElGQ0hBUgorYmluZCBSaWdodEJ1bXBlclVwK1JvdXRpbmdLZXkgUFJJTkRFTlQKK2JpbmQgUmlnaHRCdW1wZXJEb3duK1JvdXRpbmdLZXkgTlhJTkRFTlQKKwpkaWZmIC0tZ2l0IGEvVGFibGVzLmJyYWlsbGViYWNrL2ZzL2NvbW1vbi5rdGkgYi9UYWJsZXMuYnJhaWxsZWJhY2svZnMvY29tbW9uLmt0aQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZjIwOWVlCi0tLSAvZGV2L251bGwKKysrIGIvVGFibGVzLmJyYWlsbGViYWNrL2ZzL2NvbW1vbi5rdGkKQEAgLTAsMCArMSw3OCBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorIyAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyMKKyMgQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorIworIyBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorIworIyBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisjIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyMgbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisjCisjIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK2JpbmQgTGVmdFx7bmF2S2V5VHlwZX1QcmVzcyBMTkJFRworYmluZCBSaWdodFx7bmF2S2V5VHlwZX1QcmVzcyBMTkVORAorCitiaW5kIExlZnRTZWxlY3RvciBCQUNLOlRPUF9MRUZUCitiaW5kIFJpZ2h0U2VsZWN0b3IgSE9NRTpCT1RfTEVGVAorYmluZCBMZWZ0U2VsZWN0b3IrUmlnaHRTZWxlY3RvciBQQVNURQorCitiaW5kIFBhbkxlZnQgRldJTkxUCitiaW5kIFBhblJpZ2h0IEZXSU5SVAorYmluZCBQYW5MZWZ0K1BhblJpZ2h0IENTUkpNUF9WRVJUCisKK2JpbmQgTGVmdFNlbGVjdG9yK1BhbkxlZnQgVE9QX0xFRlQKK2JpbmQgTGVmdFNlbGVjdG9yK1BhblJpZ2h0IEJPVF9MRUZUCisKK2JpbmQgUmlnaHRTZWxlY3RvcitQYW5MZWZ0IFRPUAorYmluZCBSaWdodFNlbGVjdG9yK1BhblJpZ2h0IEJPVAorCitiaW5kICFMZWZ0XHtuYXZLZXlUeXBlfVVwIExOVVAKK2JpbmQgIUxlZnRce25hdktleVR5cGV9RG93biBMTkROCisKK2JpbmQgIVJpZ2h0XHtuYXZLZXlUeXBlfVVwIEZXSU5MVAorYmluZCAhUmlnaHRce25hdktleVR5cGV9RG93biBGV0lOUlQKKworYmluZCBMZWZ0XHtuYXZLZXlUeXBlfVByZXNzKyFMZWZ0XHtuYXZLZXlUeXBlfVVwIFBSRElGTE4KK2JpbmQgTGVmdFx7bmF2S2V5VHlwZX1QcmVzcyshTGVmdFx7bmF2S2V5VHlwZX1Eb3duIE5YRElGTE4KKworYmluZCBSaWdodFx7bmF2S2V5VHlwZX1QcmVzcyshUmlnaHRce25hdktleVR5cGV9VXAgQ0hSTFQKK2JpbmQgUmlnaHRce25hdktleVR5cGV9UHJlc3MrIVJpZ2h0XHtuYXZLZXlUeXBlfURvd24gQ0hSUlQKKworYmluZCBQYW5MZWZ0KyFMZWZ0XHtuYXZLZXlUeXBlfVVwIFBSUFJPTVBUCitiaW5kIFBhbkxlZnQrIUxlZnRce25hdktleVR5cGV9RG93biBOWFBST01QVAorCitiaW5kIFBhblJpZ2h0KyFMZWZ0XHtuYXZLZXlUeXBlfVVwIFBSUEdSUEgKK2JpbmQgUGFuUmlnaHQrIUxlZnRce25hdktleVR5cGV9RG93biBOWFBHUlBICisKK2JpbmQgTGVmdFNlbGVjdG9yKyFMZWZ0XHtuYXZLZXlUeXBlfVVwIEFUVFJVUAorYmluZCBMZWZ0U2VsZWN0b3IrIUxlZnRce25hdktleVR5cGV9RG93biBBVFRSRE4KKworYmluZCBSaWdodFNlbGVjdG9yKyFMZWZ0XHtuYXZLZXlUeXBlfVVwIFBSU0VBUkNICitiaW5kIFJpZ2h0U2VsZWN0b3IrIUxlZnRce25hdktleVR5cGV9RG93biBOWFNFQVJDSAorCisKKyNPdmVycmlkZGVuIGJ5IEJyYWlsbGVCYWNrLgorI2JpbmQgUm91dGluZ0tleSBST1VURQorYmluZCBMZWZ0XHtuYXZLZXlUeXBlfVByZXNzK1JvdXRpbmdLZXkgU0VUTEVGVAorYmluZCBSaWdodFx7bmF2S2V5VHlwZX1QcmVzcytSb3V0aW5nS2V5IERFU0NDSEFSCisKK2JpbmQgUm91dGluZ0tleSshUm91dGluZ0tleSBDTElQX0NPUFkKK2JpbmQgUGFuTGVmdCtSb3V0aW5nS2V5IENMSVBfTkVXCitiaW5kIFBhblJpZ2h0K1JvdXRpbmdLZXkgQ09QWV9SRUNUCitiaW5kIExlZnRTZWxlY3RvcitSb3V0aW5nS2V5IENMSVBfQURECitiaW5kIFJpZ2h0U2VsZWN0b3IrUm91dGluZ0tleSBDT1BZX0xJTkUKKworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQnJhaWxsZUJhY2sgQmluZGluZ3MgIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMgUk9VVEUrMTI4IGlzIGEgbG9uZy1wcmVzcyBvbiB0aGUgcm91dGluZyBrZXkuCitiaW5kIFJvdXRpbmdLZXkgUk9VVEU6Uk9VVEUrMTI4CmRpZmYgLS1naXQgYS9UYWJsZXMuYnJhaWxsZWJhY2svZnMvZm9jdXMua3RpIGIvVGFibGVzLmJyYWlsbGViYWNrL2ZzL2ZvY3VzLmt0aQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYmRiZDBmCi0tLSAvZGV2L251bGwKKysrIGIvVGFibGVzLmJyYWlsbGViYWNrL2ZzL2ZvY3VzLmt0aQpAQCAtMCwwICsxLDUyIEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisjICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorIworIyBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisjCisjIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisjCisjIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyMgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorIyBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyMKKyMgV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworIworIyBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIyBUaGlzIGtleSBzdWJ0YWJsZSBpcyBmb3IgYWxsIEZyZWVkb21TY2llbnRpZmljIEZvY3VzIGRpc3BsYXlzLgorCitub3RlIFRoaXMgZGVzY3JpcHRpb24gaXMgZ2VuZXJhbCBiZWNhdXNlIHRoZSBrZXkgbGF5b3V0IGRpZmZlcnMgZnJvbSBtb2RlbCB0byBtb2RlbC4KKworbm90ZSBUaGVyZSBpcyBhIHJvdXRpbmcga2V5IGltbWVkaWF0ZWx5IGJlaGluZCBlYWNoIGJyYWlsbGUgY2VsbC4KK25vdGUgKiBTb21lIG1vZGVscyBoYXZlIGEgbmF2cm93IGtleSBpbW1lZGlhdGVseSBiZWhpbmQgZWFjaCByb3V0aW5nIGtleS4KK25vdGUgKiBPbiBvdGhlcnMsIGEgbmF2cm93IGtleSBjYW4gYmUgZW11bGF0ZWQgYnkgbG9uZy1wcmVzc2luZyB0aGUgY29ycmVzcG9uZGluZyByb3V0aW5nIGtleS4KKworbm90ZSBUaGVyZSBhcmUgdHdvIE5hdiBjb250cm9scyAtIG9uZSBhdCBlYWNoIGVuZCBvZiB0aGUgYnJhaWxsZSBjZWxscy4KK25vdGUgKiBFYWNoIGhhcyB0aHJlZSBhY3Rpb25zOiBVcCwgRG93biwgYW5kIFByZXNzLgorbm90ZSAqIE9uIG5ld2VyIG1vZGVscywgZWFjaCBpcyBhIHJvY2tlciBjb21iaW5lZCB3aXRoIGEgYnV0dG9uLgorbm90ZSAqIE9uIG9sZGVyIG1vZGVscywgZWFjaCBpcyBhIHdoZWVsIHRoYXQgY2FuIGJlIGJvdGggcm9sbGVkIGFuZCBwcmVzc2VkLgorCitub3RlIFRoZSBrZXlzIG9uIHRoZSBmcm9udCwgZnJvbSBsZWZ0IHRvIHJpZ2h0LCBhcmU6Citub3RlICogXHtmcm9udEtleXNMZWZ0fSAtIFx7ZnJvbnRLZXlzUmlnaHR9LgorCitub3RlIFRoZSBsZWZ0IGFuZCByaWdodCBwYW4ga2V5cyBhcmUgc2hvcnQgYmFycy4KK25vdGUgKiBPbiBzb21lIG1vZGVscywgZWFjaCBoYXMgYSByYWlzZWQgZG91YmxlLWFycm93LgorCitub3RlIFRoZSBsZWZ0IGFuZCByaWdodCBzZWxlY3RvcnMgYXJlIHJvdW5kLgorbm90ZSAqIE9uIG9sZGVyIG1vZGVscywgdGhleSdyZSBrbm93biBhcyBHREYgKEdlbmVyYWwgRGlzcGxheSBGdW5jdGlvbikga2V5cy4KKworYXNzaWduIG5hdktleVR5cGUgTmF2CitpbmNsdWRlIGNvbW1vbi5rdGkKK2luY2x1ZGUga2V5Ym9hcmQua3RpCitpbmNsdWRlIHNwZWVjaC5rdGkKKworYmluZCBOYXZyb3dLZXkgREVTQ0NIQVIKK2JpbmQgUGFuTGVmdCtOYXZyb3dLZXkgUFJJTkRFTlQKK2JpbmQgUGFuUmlnaHQrTmF2cm93S2V5IE5YSU5ERU5UCitiaW5kIExlZnRTZWxlY3RvcitOYXZyb3dLZXkgUFJESUZDSEFSCitiaW5kIFJpZ2h0U2VsZWN0b3IrTmF2cm93S2V5IE5YRElGQ0hBUgorYmluZCBOYXZyb3dLZXkrIU5hdnJvd0tleSBDTElQX0FQUEVORAorCmRpZmYgLS1naXQgYS9UYWJsZXMuYnJhaWxsZWJhY2svZnMvZm9jdXMxLmt0YiBiL1RhYmxlcy5icmFpbGxlYmFjay9mcy9mb2N1czEua3RiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdjZjk0ZjUKLS0tIC9kZXYvbnVsbAorKysgYi9UYWJsZXMuYnJhaWxsZWJhY2svZnMvZm9jdXMxLmt0YgpAQCAtMCwwICsxLDI0IEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisjICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorIworIyBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisjCisjIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisjCisjIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyMgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorIyBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyMKKyMgV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworIworIyBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKwordGl0bGUgRnJlZWRvbVNjaWVudGlmaWMgRm9jdXMxIChvcmlnaW5hbCkKKworYXNzaWduIGZyb250S2V5c0xlZnQgcGFuXHNsZWZ0LFxzbGVmdFxzc2VsZWN0b3IsXHNsZWZ0XHNzaGlmdAorYXNzaWduIGZyb250S2V5c1JpZ2h0IHJpZ2h0XHNzaGlmdCxcc3JpZ2h0XHNzZWxlY3Rvcixcc3BhblxzcmlnaHQKKworaW5jbHVkZSBmb2N1cy5rdGkKZGlmZiAtLWdpdCBhL1RhYmxlcy5icmFpbGxlYmFjay9mcy9mb2N1czE0Lmt0YiBiL1RhYmxlcy5icmFpbGxlYmFjay9mcy9mb2N1czE0Lmt0YgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMWQ1OTY0Ci0tLSAvZGV2L251bGwKKysrIGIvVGFibGVzLmJyYWlsbGViYWNrL2ZzL2ZvY3VzMTQua3RiCkBAIC0wLDAgKzEsMjUgQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyMgICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisjCisjIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyMKKyMgQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCit0aXRsZSBGcmVlZG9tU2NpZW50aWZpYyBGb2N1cyAxNAorCithc3NpZ24gZnJvbnRLZXlzTGVmdCBsZWZ0XHNzZWxlY3Rvcixcc2xlZnRcc3JvY2tlcixcc3BhblxzbGVmdCxcc2xlZnRcc3NoaWZ0Cithc3NpZ24gZnJvbnRLZXlzUmlnaHQgcmlnaHRcc3NoaWZ0LFxzcGFuXHNyaWdodCxcc3JpZ2h0XHNyb2NrZXIsXHNyaWdodFxzc2VsZWN0b3IKKworaW5jbHVkZSBmb2N1cy5rdGkKK2luY2x1ZGUgcm9ja2Vycy5rdGkKZGlmZiAtLWdpdCBhL1RhYmxlcy5icmFpbGxlYmFjay9mcy9mb2N1czQwLmt0YiBiL1RhYmxlcy5icmFpbGxlYmFjay9mcy9mb2N1czQwLmt0YgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YWRiN2E0Ci0tLSAvZGV2L251bGwKKysrIGIvVGFibGVzLmJyYWlsbGViYWNrL2ZzL2ZvY3VzNDAua3RiCkBAIC0wLDAgKzEsMjUgQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyMgICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisjCisjIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyMKKyMgQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCit0aXRsZSBGcmVlZG9tU2NpZW50aWZpYyBGb2N1cyA0MAorCithc3NpZ24gZnJvbnRLZXlzTGVmdCBwYW5cc2xlZnQsXHNsZWZ0XHNyb2NrZXIsXHNsZWZ0XHNzZWxlY3Rvcixcc2xlZnRcc3NoaWZ0Cithc3NpZ24gZnJvbnRLZXlzUmlnaHQgcmlnaHRcc3NoaWZ0LFxzcmlnaHRcc3NlbGVjdG9yLFxzcmlnaHRcc3JvY2tlcixcc3BhblxzcmlnaHQKKworaW5jbHVkZSBmb2N1cy5rdGkKK2luY2x1ZGUgcm9ja2Vycy5rdGkKZGlmZiAtLWdpdCBhL1RhYmxlcy5icmFpbGxlYmFjay9mcy9mb2N1czgwLmt0YiBiL1RhYmxlcy5icmFpbGxlYmFjay9mcy9mb2N1czgwLmt0YgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZmU5MmMyCi0tLSAvZGV2L251bGwKKysrIGIvVGFibGVzLmJyYWlsbGViYWNrL2ZzL2ZvY3VzODAua3RiCkBAIC0wLDAgKzEsMjYgQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyMgICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisjCisjIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyMKKyMgQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCit0aXRsZSBGcmVlZG9tU2NpZW50aWZpYyBGb2N1cyA4MAorCithc3NpZ24gZnJvbnRLZXlzTGVmdCBwYW5cc2xlZnQsXHNsZWZ0XHNyb2NrZXIsXHNsZWZ0XHNzZWxlY3Rvcixcc2xlZnRcc2J1bXBlcixcc2xlZnRcc3NoaWZ0Cithc3NpZ24gZnJvbnRLZXlzUmlnaHQgcmlnaHRcc3NoaWZ0LFxzcmlnaHRcc2J1bXBlcixcc3JpZ2h0XHNzZWxlY3Rvcixcc3JpZ2h0XHNyb2NrZXIsXHNwYW5cc3JpZ2h0CisKK2luY2x1ZGUgZm9jdXMua3RpCitpbmNsdWRlIHJvY2tlcnMua3RpCitpbmNsdWRlIGJ1bXBlcnMua3RpCmRpZmYgLS1naXQgYS9UYWJsZXMuYnJhaWxsZWJhY2svZnMva2V5Ym9hcmQua3RpIGIvVGFibGVzLmJyYWlsbGViYWNrL2ZzL2tleWJvYXJkLmt0aQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MzBmY2JhCi0tLSAvZGV2L251bGwKKysrIGIvVGFibGVzLmJyYWlsbGViYWNrL2ZzL2tleWJvYXJkLmt0aQpAQCAtMCwwICsxLDU1IEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisjICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorIworIyBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisjCisjIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisjCisjIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyMgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorIyBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyMKKyMgV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworIworIyBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworbm90ZSBBbiBlaWdodC1kb3QsIFBlcmtpbnMtc3R5bGUsIGJyYWlsbGUga2V5Ym9hcmQgaXMgbmVhciB0aGUgcmVhciBvZiB0aGUgdG9wLgorbm90ZSAqIEl0cyBrZXlzLCBGcm9tIGxlZnQgdG8gcmlnaHQsIGFyZTogRG90NywgRG90MywgRG90MiwgRG90MSAtIERvdDQsIERvdDUsIERvdDYsIERvdDguCitub3RlICogVGhlIHNwYWNlIGJhciBpcyBpbiBmcm9udCBvZiB0aGUgYnJhaWxsZSBjZWxscy4KK25vdGUgKiBPbiBzb21lIG1vZGVscywgdGhlIGVpZ2h0IGRvdCBrZXlzIGFyZSBpbiBhIHN0cmFpZ2h0IGxpbmUKK25vdGUgKiBiZWhpbmQgdGhlIHNwYWNlIGJhciBidXQgaW4gZnJvbnQgb2YgdGhlIGJyYWlsbGUgY2VsbHMuCisKK25vdGUgVGhlIGxlZnQgYW5kIHJpZ2h0IHNoaWZ0IGtleXMgYXJlIHNxdWFyaXNoLgorbm90ZSAqIE9uIHNvbWUgbW9kZWxzLCB0aGV5J3JlIGF0IHRoZSBjZW50ZXIgb2YgdGhlIGZyb250Lgorbm90ZSAqIE9uIG90aGVycywgdGhleSdyZSBvbiBlaXRoZXIgc2lkZSBvZiB0aGUgc3BhY2UgYmFyLgorCittYXAgRG90MSBET1QxCittYXAgRG90MiBET1QyCittYXAgRG90MyBET1QzCittYXAgRG90NCBET1Q0CittYXAgRG90NSBET1Q1CittYXAgRG90NiBET1Q2CittYXAgRG90NyBET1Q3CittYXAgRG90OCBET1Q4CisKK21hcCBTcGFjZSBTUEFDRQorbWFwIExlZnRTaGlmdCBDT05UUk9MCittYXAgUmlnaHRTaGlmdCBNRVRBCisKK2Fzc2lnbiBjaG9yZCBTcGFjZSsKK2luY2x1ZGUgLi4vY2hvcmRzLmt0aQorCitiaW5kIFNwYWNlK1JvdXRpbmdLZXkgS0VZX0ZVTkNUSU9OCitiaW5kIExlZnRTaGlmdCtSb3V0aW5nS2V5IFNFVExFRlQKK2JpbmQgUmlnaHRTaGlmdCtSb3V0aW5nS2V5IFNXSVRDSFZUCisKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEJyYWlsbGVCYWNrIEJpbmRpbmdzICMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCithc3NpZ24gY2hvcmQgU3BhY2UKK2luY2x1ZGUgLi4vYW5kcm9pZC1jaG9yZHMua3RpCmRpZmYgLS1naXQgYS9UYWJsZXMuYnJhaWxsZWJhY2svZnMvcGFjbWF0ZS5rdGIgYi9UYWJsZXMuYnJhaWxsZWJhY2svZnMvcGFjbWF0ZS5rdGIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTQ1OWZjNQotLS0gL2Rldi9udWxsCisrKyBiL1RhYmxlcy5icmFpbGxlYmFjay9mcy9wYWNtYXRlLmt0YgpAQCAtMCwwICsxLDQ2IEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisjICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorIworIyBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisjCisjIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisjCisjIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyMgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorIyBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyMKKyMgV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworIworIyBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKwordGl0bGUgRnJlZWRvbVNjaWVudGlmaWMgUEFDIE1hdGUKKworbm90ZSBUaGUgcmVhciByb3cgb2YgY3Vyc29yIHJvdXRpbmcga2V5cyBpcyBhY3R1YWxseSBhIHNldCBvZiBuYXZpZ2F0aW9uIGtleXMuCitub3RlIFRoZSAxMCBtaWRkbGUga2V5cyAoNSBvbiBlYWNoIHNpZGUgb2YgdGhlIGNlbnRlcikgYXJlIHNwZWNpYWwuCitub3RlIFRoZSB0d28gb3V0ZXIgb25lcyBhcmUgbmFtZWQgTGVmdFNlbGVjdG9yIGFuZCBSaWdodFNlbGVjdG9yLgorbm90ZSBUaGUgZWlnaHQgaW5uZXIgb25lcyBhcmUgbmFtZWQgSG90MSB0aHJvdWdoIEhvdDguCitub3RlIFRoZSBQYW5MZWZ0IGtleSBpcyBhbnkga2V5IHRvIHRoZSBsZWZ0IG9mIHRoZSBzcGVjaWFsIGtleXMuCitub3RlIFRoZSBQYW5SaWdodCBrZXkgaXMgYW55IGtleSB0byB0aGUgcmlnaHQgb2YgdGhlIHNwZWNpYWwga2V5cy4KKworYmluZCBIb3QxIFNLUElETE5TCitiaW5kIFJpZ2h0U2VsZWN0b3IrSG90MSBTS1BCTE5LV0lOUworYmluZCBIb3QyIERJU1BNRAorYmluZCBSaWdodFNlbGVjdG9yK0hvdDIgQVRUUlZJUworYmluZCBIb3QzIENTUlRSSworYmluZCBSaWdodFNlbGVjdG9yK0hvdDMgQ1NSVklTCitiaW5kIEhvdDQgU0lYRE9UUworYmluZCBSaWdodFNlbGVjdG9yK0hvdDQgQVVUT1JFUEVBVAorYmluZCBIb3Q1IEhFTFAKK2JpbmQgUmlnaHRTZWxlY3RvcitIb3Q1IEZSRUVaRQorYmluZCBIb3Q2IExFQVJOCitiaW5kIFJpZ2h0U2VsZWN0b3IrSG90NiBQUkVGTE9BRAorYmluZCBIb3Q3IFBSRUZNRU5VCitiaW5kIFJpZ2h0U2VsZWN0b3IrSG90NyBQUkVGU0FWRQorYmluZCBIb3Q4IElORk8KK2JpbmQgUmlnaHRTZWxlY3RvcitIb3Q4IENTUkpNUF9WRVJUCisKK2Fzc2lnbiBuYXZLZXlUeXBlIFdoZWVsCitpbmNsdWRlIGNvbW1vbi5rdGkKZGlmZiAtLWdpdCBhL1RhYmxlcy5icmFpbGxlYmFjay9mcy9yb2NrZXJzLmt0aSBiL1RhYmxlcy5icmFpbGxlYmFjay9mcy9yb2NrZXJzLmt0aQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MDUwZTk3Ci0tLSAvZGV2L251bGwKKysrIGIvVGFibGVzLmJyYWlsbGViYWNrL2ZzL3JvY2tlcnMua3RpCkBAIC0wLDAgKzEsNTggQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyMgICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisjCisjIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyMKKyMgQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjIFRoaXMga2V5IHN1YnRhYmxlIGlzIGZvciBGcmVlZG9tU2NpZW50aWZpYyBkaXNwbGF5cyB3aGljaCBoYXZlIHJvY2tlcnMuCisKK25vdGUgVGhlIGxlZnQgYW5kIHJpZ2h0IHJvY2tlcnMgYXJlIHNob3J0LCB1cC9kb3duLCByb2NrZXIga2V5cy4KKworYmluZCBMZWZ0Um9ja2VyVXAgS0VZX0NVUlNPUl9VUAorYmluZCBMZWZ0Um9ja2VyRG93biBLRVlfQ1VSU09SX0RPV04KKworYmluZCBMZWZ0Um9ja2VyVXArUGFuTGVmdCBLRVlfQ1VSU09SX0xFRlQKK2JpbmQgTGVmdFJvY2tlckRvd24rUGFuTGVmdCBLRVlfQ1VSU09SX1JJR0hUCisKK2JpbmQgTGVmdFJvY2tlclVwK0xlZnRTZWxlY3RvciBLRVlfSE9NRQorYmluZCBMZWZ0Um9ja2VyRG93bitMZWZ0U2VsZWN0b3IgS0VZX0VORAorCitiaW5kIExlZnRSb2NrZXJVcCtSaWdodFNlbGVjdG9yIEtFWV9QQUdFX1VQCitiaW5kIExlZnRSb2NrZXJEb3duK1JpZ2h0U2VsZWN0b3IgS0VZX1BBR0VfRE9XTgorCitiaW5kIExlZnRSb2NrZXJVcCtQYW5SaWdodCBDU1JUUksrb2ZmCitiaW5kIExlZnRSb2NrZXJEb3duK1BhblJpZ2h0IENTUlRSSytvbgorCitiaW5kIFJpZ2h0Um9ja2VyVXAgTE5VUAorYmluZCBSaWdodFJvY2tlckRvd24gTE5ETgorCitiaW5kIFJpZ2h0Um9ja2VyVXArUGFuTGVmdCBMTkJFRworYmluZCBSaWdodFJvY2tlckRvd24rUGFuTGVmdCBMTkVORAorCitiaW5kIFJpZ2h0Um9ja2VyVXArTGVmdFNlbGVjdG9yIFBSU0VBUkNICitiaW5kIFJpZ2h0Um9ja2VyRG93bitMZWZ0U2VsZWN0b3IgTlhTRUFSQ0gKKworYmluZCBSaWdodFJvY2tlclVwK1JpZ2h0U2VsZWN0b3IgQVRUUlVQCitiaW5kIFJpZ2h0Um9ja2VyRG93bitSaWdodFNlbGVjdG9yIEFUVFJETgorCitiaW5kIFJpZ2h0Um9ja2VyVXArUGFuUmlnaHQgU0lYRE9UUytvZmYKK2JpbmQgUmlnaHRSb2NrZXJEb3duK1BhblJpZ2h0IFNJWERPVFMrb24KKworYmluZCBSaWdodFJvY2tlclVwK1JvdXRpbmdLZXkgU0VUTUFSSworYmluZCBSaWdodFJvY2tlckRvd24rUm91dGluZ0tleSBHT1RPTUFSSworCitiaW5kIExlZnRSb2NrZXJVcCtSaWdodFJvY2tlclVwIElORk8KK2JpbmQgTGVmdFJvY2tlckRvd24rUmlnaHRSb2NrZXJEb3duIFRJTUUKKwpkaWZmIC0tZ2l0IGEvVGFibGVzLmJyYWlsbGViYWNrL2ZzL3NwZWVjaC5rdGkgYi9UYWJsZXMuYnJhaWxsZWJhY2svZnMvc3BlZWNoLmt0aQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYmRkODIwCi0tLSAvZGV2L251bGwKKysrIGIvVGFibGVzLmJyYWlsbGViYWNrL2ZzL3NwZWVjaC5rdGkKQEAgLTAsMCArMSw1MyBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorIyAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyMKKyMgQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorIworIyBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorIworIyBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisjIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyMgbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisjCisjIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK2JpbmQgUGFuTGVmdCtTcGFjZSBTUEVBS19DVVJSX0NIQVI6REVTQ19DVVJSX0NIQVIKK2JpbmQgUGFuTGVmdCtMZWZ0U2hpZnQgU1BFQUtfUFJFVl9DSEFSCitiaW5kIFBhbkxlZnQrUmlnaHRTaGlmdCBTUEVBS19ORVhUX0NIQVIKK2JpbmQgUGFuTGVmdCtMZWZ0U2hpZnQrU3BhY2UgU1BFQUtfRlJTVF9DSEFSCitiaW5kIFBhbkxlZnQrUmlnaHRTaGlmdCtTcGFjZSBTUEVBS19MQVNUX0NIQVIKKworYmluZCBMZWZ0U2VsZWN0b3IrU3BhY2UgU1BFQUtfQ1VSUl9XT1JEOlNQRUxMX0NVUlJfV09SRAorYmluZCBMZWZ0U2VsZWN0b3IrTGVmdFNoaWZ0IFNQRUFLX1BSRVZfV09SRAorYmluZCBMZWZ0U2VsZWN0b3IrUmlnaHRTaGlmdCBTUEVBS19ORVhUX1dPUkQKK2JpbmQgTGVmdFNlbGVjdG9yK0xlZnRTaGlmdCtTcGFjZSBTUEVBS19DVVJSX0xPQ04KK2JpbmQgTGVmdFNlbGVjdG9yK1JpZ2h0U2hpZnQrU3BhY2UgUk9VVEVfQ1VSUl9MT0NOCisKK2JpbmQgUmlnaHRTZWxlY3RvcitTcGFjZSBTUEVBS19DVVJSX0xJTkUKK2JpbmQgUmlnaHRTZWxlY3RvcitMZWZ0U2hpZnQgU1BFQUtfUFJFVl9MSU5FCitiaW5kIFJpZ2h0U2VsZWN0b3IrUmlnaHRTaGlmdCBTUEVBS19ORVhUX0xJTkUKK2JpbmQgUmlnaHRTZWxlY3RvcitMZWZ0U2hpZnQrU3BhY2UgU1BFQUtfRlJTVF9MSU5FCitiaW5kIFJpZ2h0U2VsZWN0b3IrUmlnaHRTaGlmdCtTcGFjZSBTUEVBS19MQVNUX0xJTkUKKworYmluZCBQYW5SaWdodCtTcGFjZSBBVVRPU1BFQUsKK2JpbmQgUGFuUmlnaHQrTGVmdFNoaWZ0IE1VVEUKK2JpbmQgUGFuUmlnaHQrUmlnaHRTaGlmdCBTQVlfTElORQorCitiaW5kIFBhblJpZ2h0K0xlZnRTaGlmdCtTcGFjZSBTQVlfQUJPVkUKK2JpbmQgUGFuUmlnaHQrUmlnaHRTaGlmdCtTcGFjZSBTQVlfQkVMT1cKK2JpbmQgUGFuUmlnaHQrTGVmdFNoaWZ0K1JpZ2h0U2hpZnQrU3BhY2UgU0FZX0FMTAorCitiaW5kIFNwYWNlK0xlZnRce25hdktleVR5cGV9RG93biBTQVlfU09GVEVSCitiaW5kIFNwYWNlK0xlZnRce25hdktleVR5cGV9VXAgU0FZX0xvdWRlcgorCitiaW5kIExlZnRTaGlmdCtMZWZ0XHtuYXZLZXlUeXBlfURvd24gU0FZX1NMT1dFUgorYmluZCBMZWZ0U2hpZnQrTGVmdFx7bmF2S2V5VHlwZX1VcCBTQVlfRkFTVEVSCisKK2JpbmQgUmlnaHRTaGlmdCtMZWZ0XHtuYXZLZXlUeXBlfURvd24gU0FZX0xPV0VSCitiaW5kIFJpZ2h0U2hpZnQrTGVmdFx7bmF2S2V5VHlwZX1VcCBTQVlfSElHSEVSCisKZGlmZiAtLWdpdCBhL1RhYmxlcy5icmFpbGxlYmFjay9oaWQvSElELmt0YiBiL1RhYmxlcy5icmFpbGxlYmFjay9oaWQvSElELmt0YgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YjYyZDM5Ci0tLSAvZGV2L251bGwKKysrIGIvVGFibGVzLmJyYWlsbGViYWNrL2hpZC9ISUQua3RiCkBAIC0wLDAgKzEsMzYgQEAKK3RpdGxlIEdlbmVyaWMgSElEIEJyYWlsbGUgRGlzcGxheQorbm90ZSBUaGVzZSBmaWxlcyBtdXN0IGJlIHBsYWNlZCBpbiBhIGRpcmVjdG9yeSBuYW1lZCAnaGlkJyB0byBiZSBsb2FkZWQgcHJvcGVybHkgYnkgYnJsdHR5CisKK2luY2x1ZGUgLi4vY2hvcmRzLmt0aQorCitiaW5kIFJvdXRpbmdLZXkgUk9VVEU6Uk9VVEUrMTI4CittYXAgU3BhY2UgU1BBQ0UKKworbm90ZSBQYW5uaW5nIGFuZCBSb2NrZXIga2V5cworbm90ZSAgICAgUGFuTGVmdC9Sb2NrZXJVcCBtb3ZlIHRoZSBCcmFpbGxlIGNlbGwgd2luZG93IGxlZnQKK25vdGUgICAgIFBhblJpZ2h0L1JvY2tlckRvd24gbW92ZSB0aGUgQnJhaWxsZSBjZWxsIHdpbmRvdyByaWdodAorYXNzaWduIHBhbkxlZnQgUGFuTGVmdAorYmluZCBce3BhbkxlZnR9IEZXSU5MVAorYXNzaWduIHBhblJpZ2h0IFBhblJpZ2h0CitiaW5kIFx7cGFuUmlnaHR9IEZXSU5SVAorYXNzaWduIHJvY2tlclVwIFJvY2tlclVwCitiaW5kIFx7cm9ja2VyVXB9IEZXSU5MVAorYXNzaWduIHJvY2tlckRvd24gUm9ja2VyRG93bgorYmluZCBce3JvY2tlckRvd259IEZXSU5SVAorCitub3RlIEQtUGFkCitub3RlICAgICBEUGFkTGVmdCBtb3ZlcyB0byBwcmV2aW91cyBpdGVtLCBEUGFkUmlnaHQgbW92ZXMgdG8gbmV4dCBpdGVtCitub3RlICAgICBEUGFkVXAgbW92ZXMgdXAgYSBsaW5lLCBEUGFkRG93biBtb3ZlcyBkb3duIGEgbGluZQorbm90ZSAgICAgRFBhZENlbnRlciBpcyBLRVlfRU5URVIKK2Fzc2lnbiBkcGFkTGVmdCBEUGFkTGVmdAorYmluZCBce2RwYWRMZWZ0fSBDSFJMVAorYXNzaWduIGRwYWRSaWdodCBEUGFkUmlnaHQKK2JpbmQgXHtkcGFkUmlnaHR9IENIUlJUCithc3NpZ24gZHBhZExlZnQgRFBhZFVwCitiaW5kIFx7ZHBhZExlZnR9IExOVVAKK2Fzc2lnbiBkcGFkUmlnaHQgRFBhZERvd24KK2JpbmQgXHtkcGFkUmlnaHR9IExORE4KK2Fzc2lnbiBkcGFkQ2VudGVyIERQYWRDZW50ZXIKK2JpbmQgXHtkcGFkQ2VudGVyfSBLRVlfRU5URVIKKworaW5jbHVkZSAuLi9hbmRyb2lkLWNob3Jkcy5rdGkKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9UYWJsZXMuYnJhaWxsZWJhY2svaG0vYmVldGxlLmt0YiBiL1RhYmxlcy5icmFpbGxlYmFjay9obS9iZWV0bGUua3RiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjExYjRkOGUKLS0tIC9kZXYvbnVsbAorKysgYi9UYWJsZXMuYnJhaWxsZWJhY2svaG0vYmVldGxlLmt0YgpAQCAtMCwwICsxLDI0IEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisjICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorIworIyBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisjCisjIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisjCisjIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyMgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorIyBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyMKKyMgV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworIworIyBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKwordGl0bGUgSElNUyBTbWFydCBCZWV0bGUKKworaW5jbHVkZSBjb21tb24ua3RpCitpbmNsdWRlIGJyYWlsbGUua3RpCitpbmNsdWRlIGYxNC5rdGkKK2luY2x1ZGUgcGFuLmt0aQpkaWZmIC0tZ2l0IGEvVGFibGVzLmJyYWlsbGViYWNrL2htL2JyYWlsbGUua3RpIGIvVGFibGVzLmJyYWlsbGViYWNrL2htL2JyYWlsbGUua3RpCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVjNjdkMjcKLS0tIC9kZXYvbnVsbAorKysgYi9UYWJsZXMuYnJhaWxsZWJhY2svaG0vYnJhaWxsZS5rdGkKQEAgLTAsMCArMSw0NCBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorIyAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyMKKyMgQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorIworIyBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorIworIyBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisjIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyMgbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisjCisjIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK21hcCBEb3QxIERPVDEKK21hcCBEb3QyIERPVDIKK21hcCBEb3QzIERPVDMKK21hcCBEb3Q0IERPVDQKK21hcCBEb3Q1IERPVDUKK21hcCBEb3Q2IERPVDYKK21hcCBEb3Q3IERPVDcKK21hcCBEb3Q4IERPVDgKK21hcCBTcGFjZSBTUEFDRQorCithc3NpZ25EZWZhdWx0IG1ldGFNb2RpZmllciBGMgorbWFwIFx7bWV0YU1vZGlmaWVyfSBNRVRBCisKK2Fzc2lnbkRlZmF1bHQgY29udHJvbE1vZGlmaWVyIEYzCittYXAgXHtjb250cm9sTW9kaWZpZXJ9IENPTlRST0wKKworYXNzaWduIGNob3JkIFNwYWNlKworaW5jbHVkZSAuLi9jaG9yZHMua3RpCisKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEJyYWlsbGVCYWNrIEJpbmRpbmdzICMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCithc3NpZ24gY2hvcmQgU3BhY2UKK2luY2x1ZGUgLi4vYW5kcm9pZC1jaG9yZHMua3RpCmRpZmYgLS1naXQgYS9UYWJsZXMuYnJhaWxsZWJhY2svaG0vY29tbW9uLmt0aSBiL1RhYmxlcy5icmFpbGxlYmFjay9obS9jb21tb24ua3RpCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA5OTcyY2UKLS0tIC9kZXYvbnVsbAorKysgYi9UYWJsZXMuYnJhaWxsZWJhY2svaG0vY29tbW9uLmt0aQpAQCAtMCwwICsxLDI4IEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisjICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorIworIyBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisjCisjIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisjCisjIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyMgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorIyBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyMKKyMgV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworIworIyBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworI092ZXJyaWRkZW4gYnkgQnJhaWxsZUJhY2suCisjYmluZCBSb3V0aW5nS2V5IFJPVVRFCisKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEJyYWlsbGVCYWNrIEJpbmRpbmdzICMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjIFJPVVRFKzEyOCBpcyBhIGxvbmctcHJlc3Mgb24gdGhlIHJvdXRpbmcga2V5LgorYmluZCBSb3V0aW5nS2V5IFJPVVRFOlJPVVRFKzEyOApkaWZmIC0tZ2l0IGEvVGFibGVzLmJyYWlsbGViYWNrL2htL2NvbnRleHRzLmt0aSBiL1RhYmxlcy5icmFpbGxlYmFjay9obS9jb250ZXh0cy5rdGkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGUyZjRhYgotLS0gL2Rldi9udWxsCisrKyBiL1RhYmxlcy5icmFpbGxlYmFjay9obS9jb250ZXh0cy5rdGkKQEAgLTAsMCArMSw0MyBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorIyAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyMKKyMgQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorIworIyBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorIworIyBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisjIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyMgbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisjCisjIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgUm91dGluZyBLZXkgQWx0ZXJuYXRpdmVzICMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworY29udGV4dCBDTElQX05FVworYmluZCAhUm91dGluZ0tleSBDTElQX05FVworCitjb250ZXh0IENMSVBfQURECitiaW5kICFSb3V0aW5nS2V5IENMSVBfQURECisKK2NvbnRleHQgQ09QWV9MSU5FCitiaW5kICFSb3V0aW5nS2V5IENPUFlfTElORQorCitjb250ZXh0IENPUFlfUkVDVAorYmluZCAhUm91dGluZ0tleSBDT1BZX1JFQ1QKKworY29udGV4dCBTRVRMRUZUCitiaW5kICFSb3V0aW5nS2V5IFNFVExFRlQKKworY29udGV4dCBERVNDQ0hBUgorYmluZCAhUm91dGluZ0tleSBERVNDQ0hBUgorCitjb250ZXh0IEtFWV9GVU5DVElPTgorYmluZCBSb3V0aW5nS2V5IEtFWV9GVU5DVElPTgorCmRpZmYgLS1naXQgYS9UYWJsZXMuYnJhaWxsZWJhY2svaG0vZWRnZS5rdGIgYi9UYWJsZXMuYnJhaWxsZWJhY2svaG0vZWRnZS5rdGIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWJjMzc0ZAotLS0gL2Rldi9udWxsCisrKyBiL1RhYmxlcy5icmFpbGxlYmFjay9obS9lZGdlLmt0YgpAQCAtMCwwICsxLDQ0IEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisjICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorIworIyBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisjCisjIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisjCisjIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyMgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorIyBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyMKKyMgV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworIworIyBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKwordGl0bGUgSElNUyBCcmFpbGxlIEVkZ2UgYW5kIFFCcmFpbGxlWEwKKworaW5jbHVkZSBjb21tb24ua3RpCitpbmNsdWRlIHNjcm9sbC5rdGkKK2luY2x1ZGUgbGVmdC5rdGkKK2luY2x1ZGUgcmlnaHQua3RpCitpbmNsdWRlIGYxOC5rdGkKK2luY2x1ZGUgY29udGV4dHMua3RpCisKK2Fzc2lnbiBtZXRhTW9kaWZpZXIgRjQKK2Fzc2lnbiBjb250cm9sTW9kaWZpZXIgRjUKK2luY2x1ZGUgYnJhaWxsZS5rdGkKKworCitjb250ZXh0IFBSRElGQ0hBUgorYmluZCBSb3V0aW5nS2V5IFBSRElGQ0hBUgorCitjb250ZXh0IE5YRElGQ0hBUgorYmluZCBSb3V0aW5nS2V5IE5YRElGQ0hBUgorCitjb250ZXh0IFBSSU5ERU5UCitiaW5kIFJvdXRpbmdLZXkgUFJJTkRFTlQKKworY29udGV4dCBOWElOREVOVAorYmluZCBSb3V0aW5nS2V5IE5YSU5ERU5UCisKZGlmZiAtLWdpdCBhL1RhYmxlcy5icmFpbGxlYmFjay9obS9mMTQua3RpIGIvVGFibGVzLmJyYWlsbGViYWNrL2htL2YxNC5rdGkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjI0NThmYwotLS0gL2Rldi9udWxsCisrKyBiL1RhYmxlcy5icmFpbGxlYmFjay9obS9mMTQua3RpCkBAIC0wLDAgKzEsMzggQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyMgICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisjCisjIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyMKKyMgQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitiaW5kIEY0IFJFVFVSTgorYmluZCBGMStGNCBDT05URVhUK0tFWV9GVU5DVElPTgorYmluZCBGMitGMyBDU1JKTVBfVkVSVAorCitiaW5kIEYyIExOVVAKK2JpbmQgRjMgTE5ETgorCitiaW5kIEYxK0YyIEZXSU5MVFNLSVAKK2JpbmQgRjMrRjQgRldJTlJUU0tJUAorCitiaW5kIEYxK0YzK0Y0IENPTlRFWFQrQ0xJUF9ORVcKK2JpbmQgRjIrRjMrRjQgQ09OVEVYVCtDTElQX0FERAorYmluZCBGMStGMitGMyBDT05URVhUK0NPUFlfTElORQorYmluZCBGMStGMitGNCBDT05URVhUK0NPUFlfUkVDVAorYmluZCBGMStGMitGMytGNCBQQVNURQorCitiaW5kIEYxK0YzIENPTlRFWFQrU0VUTEVGVAorYmluZCBGMitGNCBDT05URVhUK0RFU0NDSEFSCisKK2luY2x1ZGUgY29udGV4dHMua3RpCmRpZmYgLS1naXQgYS9UYWJsZXMuYnJhaWxsZWJhY2svaG0vZjE4Lmt0aSBiL1RhYmxlcy5icmFpbGxlYmFjay9obS9mMTgua3RpCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA4ZmM2MmEKLS0tIC9kZXYvbnVsbAorKysgYi9UYWJsZXMuYnJhaWxsZWJhY2svaG0vZjE4Lmt0aQpAQCAtMCwwICsxLDQxIEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisjICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorIworIyBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisjCisjIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisjCisjIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyMgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorIyBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyMKKyMgV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworIworIyBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworYmluZCBGMSBQUlBST01QVAorYmluZCBGMiBOWFBST01QVAorYmluZCBGMyBQUlBHUlBICitiaW5kIEY0IE5YUEdSUEgKKworYmluZCBGNSBMRUFSTgorYmluZCBGNiBUSU1FCitiaW5kIEY3IENIUkxUCitiaW5kIEY4IENIUlJUCisKK2JpbmQgU3BhY2UrRjEgQlJMS0JECitiaW5kIFNwYWNlK0YyIEJSTFVDRE9UUworYmluZCBTcGFjZStGMyBTS1BJRExOUworYmluZCBTcGFjZStGNCBDT05URVhUK0tFWV9GVU5DVElPTgorCitiaW5kIFNwYWNlK0Y1IENPTlRFWFQrU1dJVENIVlQKK2JpbmQgU3BhY2UrRjYgU0tQQkxOS1dJTlMKK2JpbmQgU3BhY2UrRjcgQVRUUlZJUworYmluZCBTcGFjZStGOCBDU1JWSVMKKworY29udGV4dCBTV0lUQ0hWVAorYmluZCBSb3V0aW5nS2V5IFNXSVRDSFZUCisKZGlmZiAtLWdpdCBhL1RhYmxlcy5icmFpbGxlYmFjay9obS9mbmtleS5rdGkgYi9UYWJsZXMuYnJhaWxsZWJhY2svaG0vZm5rZXkua3RpCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdhMmMyNmQKLS0tIC9kZXYvbnVsbAorKysgYi9UYWJsZXMuYnJhaWxsZWJhY2svaG0vZm5rZXkua3RpCkBAIC0wLDAgKzEsNDkgQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyMgICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisjCisjIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyMKKyMgQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitub3RlIEZ1bmN0aW9uIEtleSBCaW5kaW5ncworbm90ZSArIEZ1bmN0aW9uLWI6IHNraXAgYmxhbmsgd2luZG93cyBvbi9vZmYKK25vdGUgKyBGdW5jdGlvbi1jOiBjdXJzb3Igc2hvdy9oaWRlCitub3RlICsgRnVuY3Rpb24tZDogZGlzcGxheSBtb2RlIGF0dHJpYnV0ZXMvdGV4dAorbm90ZSArIEZ1bmN0aW9uLWY6IHNjcmVlbiBpbWFnZSBmcm96ZW4vdW5mcm96ZW4KK25vdGUgKyBGdW5jdGlvbi1oOiBoZWxwIHNjcmVlbiBlbnRlci9sZWF2ZQorbm90ZSArIEZ1bmN0aW9uLWk6IHNraXAgaWRlbnRpY2FsIGxpbmVzIG9uL29mZgorbm90ZSArIEZ1bmN0aW9uLWw6IGxlYXJuIG1vZGUgZW50ZXIvbGVhdmUKK25vdGUgKyBGdW5jdGlvbi1wOiBwcmVmZXJlbmNlcyBtZW51IGVudGVyL2xlYXZlCitub3RlICsgRnVuY3Rpb24tczogc3RhdHVzIGxpbmUgZW50ZXIvbGVhdmUKK25vdGUgKyBGdW5jdGlvbi10OiBjdXJzb3IgdHJhY2tpbmcgb24vb2ZmCitub3RlICsgRnVuY3Rpb24tdTogaGlnaGxpZ2h0IHVuZGVybGluZSBvbi9vZmYKK25vdGUgKyBGdW5jdGlvbi12OiBicmluZyBjdXJzb3IgdG8gY3VycmVudCBsaW5lCitub3RlICsgRnVuY3Rpb24tdzogc2xpZGluZyB3aW5kb3cgb24vb2ZmCisKK2hpZGUgb24KK2Fzc2lnbiBmdW5jdGlvbiBGMitTcGFjZQorYmluZCBce2Z1bmN0aW9ufStEb3QxK0RvdDIgU0tQQkxOS1dJTlMKK2JpbmQgXHtmdW5jdGlvbn0rRG90MStEb3Q0IENTUlZJUworYmluZCBce2Z1bmN0aW9ufStEb3QxK0RvdDQrRG90NSBESVNQTUQKK2JpbmQgXHtmdW5jdGlvbn0rRG90MStEb3QyK0RvdDQgRlJFRVpFCitiaW5kIFx7ZnVuY3Rpb259K0RvdDErRG90MitEb3Q1IEhFTFAKK2JpbmQgXHtmdW5jdGlvbn0rRG90MitEb3Q0IFNLUElETE5TCitiaW5kIFx7ZnVuY3Rpb259K0RvdDErRG90MitEb3QzIExFQVJOCitiaW5kIFx7ZnVuY3Rpb259K0RvdDErRG90MitEb3QzK0RvdDQgUFJFRk1FTlUKK2JpbmQgXHtmdW5jdGlvbn0rRG90MitEb3QzK0RvdDQgSU5GTworYmluZCBce2Z1bmN0aW9ufStEb3QyK0RvdDMrRG90NCtEb3Q1IENTUlRSSworYmluZCBce2Z1bmN0aW9ufStEb3QxK0RvdDMrRG90NiBBVFRSVklTCitiaW5kIFx7ZnVuY3Rpb259K0RvdDErRG90MitEb3QzK0RvdDYgQ1NSSk1QX1ZFUlQKK2JpbmQgXHtmdW5jdGlvbn0rRG90MitEb3Q0K0RvdDUrRG90NiBTTElERVdJTgoraGlkZSBvZmYKZGlmZiAtLWdpdCBhL1RhYmxlcy5icmFpbGxlYmFjay9obS9sZWZ0Lmt0aSBiL1RhYmxlcy5icmFpbGxlYmFjay9obS9sZWZ0Lmt0aQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMjYyMWQ0Ci0tLSAvZGV2L251bGwKKysrIGIvVGFibGVzLmJyYWlsbGViYWNrL2htL2xlZnQua3RpCkBAIC0wLDAgKzEsMzIgQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyMgICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisjCisjIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyMKKyMgQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitiaW5kIExlZnRQYWRMZWZ0K0xlZnRQYWRSaWdodCBDU1JKTVBfVkVSVAorYmluZCBMZWZ0UGFkVXArTGVmdFBhZERvd24gQ09OVEVYVCtTRVRMRUZUCisKK2JpbmQgTGVmdFBhZFVwIEFUVFJVUAorYmluZCBMZWZ0UGFkRG93biBBVFRSRE4KK2JpbmQgTGVmdFBhZExlZnQgUFJTRUFSQ0gKK2JpbmQgTGVmdFBhZFJpZ2h0IE5YU0VBUkNICisKK2JpbmQgTGVmdFBhZExlZnQrTGVmdFBhZFVwIENPTlRFWFQrUFJESUZDSEFSCitiaW5kIExlZnRQYWRMZWZ0K0xlZnRQYWREb3duIENPTlRFWFQrTlhESUZDSEFSCisKK2JpbmQgTGVmdFBhZFJpZ2h0K0xlZnRQYWRVcCBDT05URVhUK1BSSU5ERU5UCitiaW5kIExlZnRQYWRSaWdodCtMZWZ0UGFkRG93biBDT05URVhUK05YSU5ERU5UCisKZGlmZiAtLWdpdCBhL1RhYmxlcy5icmFpbGxlYmFjay9obS9sZXR0ZXJzLmt0aSBiL1RhYmxlcy5icmFpbGxlYmFjay9obS9sZXR0ZXJzLmt0aQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYzc4MjZhCi0tLSAvZGV2L251bGwKKysrIGIvVGFibGVzLmJyYWlsbGViYWNrL2htL2xldHRlcnMua3RpCkBAIC0wLDAgKzEsNDQgQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyMgICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisjCisjIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyMKKyMgQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitiaW5kIFx7a2V5c31Eb3QxIFBBU1NET1RTXHtmbGFnc30rZG90MQorYmluZCBce2tleXN9RG90MStEb3QyIFBBU1NET1RTXHtmbGFnc30rZG90MStkb3QyCitiaW5kIFx7a2V5c31Eb3QxK0RvdDQgUEFTU0RPVFNce2ZsYWdzfStkb3QxK2RvdDQKK2JpbmQgXHtrZXlzfURvdDErRG90NCtEb3Q1IFBBU1NET1RTXHtmbGFnc30rZG90MStkb3Q0K2RvdDUKK2JpbmQgXHtrZXlzfURvdDErRG90NSBQQVNTRE9UU1x7ZmxhZ3N9K2RvdDErZG90NQorYmluZCBce2tleXN9RG90MStEb3QyK0RvdDQgUEFTU0RPVFNce2ZsYWdzfStkb3QxK2RvdDIrZG90NAorYmluZCBce2tleXN9RG90MStEb3QyK0RvdDQrRG90NSBQQVNTRE9UU1x7ZmxhZ3N9K2RvdDErZG90Mitkb3Q0K2RvdDUKK2JpbmQgXHtrZXlzfURvdDErRG90MitEb3Q1IFBBU1NET1RTXHtmbGFnc30rZG90MStkb3QyK2RvdDUKK2JpbmQgXHtrZXlzfURvdDIrRG90NCBQQVNTRE9UU1x7ZmxhZ3N9K2RvdDIrZG90NAorYmluZCBce2tleXN9RG90MitEb3Q0K0RvdDUgUEFTU0RPVFNce2ZsYWdzfStkb3QyK2RvdDQrZG90NQorYmluZCBce2tleXN9RG90MStEb3QzIFBBU1NET1RTXHtmbGFnc30rZG90MStkb3QzCitiaW5kIFx7a2V5c31Eb3QxK0RvdDIrRG90MyBQQVNTRE9UU1x7ZmxhZ3N9K2RvdDErZG90Mitkb3QzCitiaW5kIFx7a2V5c31Eb3QxK0RvdDMrRG90NCBQQVNTRE9UU1x7ZmxhZ3N9K2RvdDErZG90Mytkb3Q0CitiaW5kIFx7a2V5c31Eb3QxK0RvdDMrRG90NCtEb3Q1IFBBU1NET1RTXHtmbGFnc30rZG90MStkb3QzK2RvdDQrZG90NQorYmluZCBce2tleXN9RG90MStEb3QzK0RvdDUgUEFTU0RPVFNce2ZsYWdzfStkb3QxK2RvdDMrZG90NQorYmluZCBce2tleXN9RG90MStEb3QyK0RvdDMrRG90NCBQQVNTRE9UU1x7ZmxhZ3N9K2RvdDErZG90Mitkb3QzK2RvdDQKK2JpbmQgXHtrZXlzfURvdDErRG90MitEb3QzK0RvdDQrRG90NSBQQVNTRE9UU1x7ZmxhZ3N9K2RvdDErZG90Mitkb3QzK2RvdDQrZG90NQorYmluZCBce2tleXN9RG90MStEb3QyK0RvdDMrRG90NSBQQVNTRE9UU1x7ZmxhZ3N9K2RvdDErZG90Mitkb3QzK2RvdDUKK2JpbmQgXHtrZXlzfURvdDIrRG90MytEb3Q0IFBBU1NET1RTXHtmbGFnc30rZG90Mitkb3QzK2RvdDQKK2JpbmQgXHtrZXlzfURvdDIrRG90MytEb3Q0K0RvdDUgUEFTU0RPVFNce2ZsYWdzfStkb3QyK2RvdDMrZG90NCtkb3Q1CitiaW5kIFx7a2V5c31Eb3QxK0RvdDMrRG90NiBQQVNTRE9UU1x7ZmxhZ3N9K2RvdDErZG90Mytkb3Q2CitiaW5kIFx7a2V5c31Eb3QxK0RvdDIrRG90MytEb3Q2IFBBU1NET1RTXHtmbGFnc30rZG90MStkb3QyK2RvdDMrZG90NgorYmluZCBce2tleXN9RG90MitEb3Q0K0RvdDUrRG90NiBQQVNTRE9UU1x7ZmxhZ3N9K2RvdDIrZG90NCtkb3Q1K2RvdDYKK2JpbmQgXHtrZXlzfURvdDErRG90MytEb3Q0K0RvdDYgUEFTU0RPVFNce2ZsYWdzfStkb3QxK2RvdDMrZG90NCtkb3Q2CitiaW5kIFx7a2V5c31Eb3QxK0RvdDMrRG90NCtEb3Q1K0RvdDYgUEFTU0RPVFNce2ZsYWdzfStkb3QxK2RvdDMrZG90NCtkb3Q1K2RvdDYKK2JpbmQgXHtrZXlzfURvdDErRG90MytEb3Q1K0RvdDYgUEFTU0RPVFNce2ZsYWdzfStkb3QxK2RvdDMrZG90NStkb3Q2CmRpZmYgLS1naXQgYS9UYWJsZXMuYnJhaWxsZWJhY2svaG0vcGFuLmt0YiBiL1RhYmxlcy5icmFpbGxlYmFjay9obS9wYW4ua3RiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcxZDZmMGMKLS0tIC9kZXYvbnVsbAorKysgYi9UYWJsZXMuYnJhaWxsZWJhY2svaG0vcGFuLmt0YgpAQCAtMCwwICsxLDI0IEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisjICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorIworIyBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisjCisjIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisjCisjIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyMgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorIyBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyMKKyMgV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworIworIyBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKwordGl0bGUgSElNUyBCcmFpbGxlIFNlbnNlICh3aXRoIHR3byBzY3JvbGwga2V5cykKKworaW5jbHVkZSBjb21tb24ua3RpCitpbmNsdWRlIGJyYWlsbGUua3RpCitpbmNsdWRlIGYxNC5rdGkKK2luY2x1ZGUgcGFuLmt0aQpkaWZmIC0tZ2l0IGEvVGFibGVzLmJyYWlsbGViYWNrL2htL3Bhbi5rdGkgYi9UYWJsZXMuYnJhaWxsZWJhY2svaG0vcGFuLmt0aQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYjkxN2Q3Ci0tLSAvZGV2L251bGwKKysrIGIvVGFibGVzLmJyYWlsbGViYWNrL2htL3Bhbi5rdGkKQEAgLTAsMCArMSw0MCBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorIyAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyMKKyMgQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorIworIyBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorIworIyBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisjIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyMgbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisjCisjIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK2JpbmQgQmFja3dhcmQgRldJTkxUCitiaW5kIEZvcndhcmQgRldJTlJUCitiaW5kIEJhY2t3YXJkK0ZvcndhcmQgTE5CRUcKKworYmluZCBGMStCYWNrd2FyZCBQUlBST01QVAorYmluZCBGMStGb3J3YXJkIE5YUFJPTVBUCisKK2JpbmQgRjIrQmFja3dhcmQgUFJESUZMTgorYmluZCBGMitGb3J3YXJkIE5YRElGTE4KKworYmluZCBGMytCYWNrd2FyZCBBVFRSVVAKK2JpbmQgRjMrRm9yd2FyZCBBVFRSRE4KKworYmluZCBGNCtCYWNrd2FyZCBQUlBHUlBICitiaW5kIEY0K0ZvcndhcmQgTlhQR1JQSAorCitiaW5kIEYxK0YyK0JhY2t3YXJkIFRPUF9MRUZUCitiaW5kIEYxK0YyK0ZvcndhcmQgQk9UX0xFRlQKKworYmluZCBGMytGNCtCYWNrd2FyZCBDSFJMVAorYmluZCBGMytGNCtGb3J3YXJkIENIUlJUCisKZGlmZiAtLWdpdCBhL1RhYmxlcy5icmFpbGxlYmFjay9obS9xd2VydHkua3RiIGIvVGFibGVzLmJyYWlsbGViYWNrL2htL3F3ZXJ0eS5rdGIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTY0NmExOAotLS0gL2Rldi9udWxsCisrKyBiL1RhYmxlcy5icmFpbGxlYmFjay9obS9xd2VydHkua3RiCkBAIC0wLDAgKzEsMjMgQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyMgICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisjCisjIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyMKKyMgQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCit0aXRsZSBISU1TIEJyYWlsbGUgU2Vuc2UgKHdpdGggUVdFUlRZIGtleWJvYXJkKQorCitpbmNsdWRlIGNvbW1vbi5rdGkKK2luY2x1ZGUgc2Nyb2xsLmt0aQoraW5jbHVkZSBxd2VydHkua3RpCmRpZmYgLS1naXQgYS9UYWJsZXMuYnJhaWxsZWJhY2svaG0vcXdlcnR5Lmt0aSBiL1RhYmxlcy5icmFpbGxlYmFjay9obS9xd2VydHkua3RpCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYxZTFjYzUKLS0tIC9kZXYvbnVsbAorKysgYi9UYWJsZXMuYnJhaWxsZWJhY2svaG0vcXdlcnR5Lmt0aQpAQCAtMCwwICsxLDE1NiBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorIyAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyMKKyMgQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorIworIyBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorIworIyBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisjIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyMgbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisjCisjIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK2luY2x1ZGUgZm5rZXkua3RpCitoaWRlIG9uCisKK2JpbmQgRG90NyBLRVlfQkFDS1NQQUNFCitiaW5kIERvdDggS0VZX0VOVEVSCisKK2JpbmQgU3BhY2UrRG90MStEb3QzK0RvdDYgVVBQRVIKK2JpbmQgU3BhY2UrRG90MStEb3QzK0RvdDQgTUVUQQorCitiaW5kIFNwYWNlK0RvdDErRG90NSBLRVlfRVNDQVBFCitiaW5kIFNwYWNlK0RvdDIrRG90NCBLRVlfSU5TRVJUCitiaW5kIFNwYWNlK0RvdDErRG90NCtEb3Q1IEtFWV9ERUxFVEUKKworYmluZCBGMitEb3QxK0RvdDIrRG90MytEb3Q0K0RvdDggS0VZX0lOU0VSVCtjb250cm9sCitiaW5kIEYxK0RvdDErRG90MitEb3QzK0RvdDQrRG90OCBLRVlfSU5TRVJUK3NoaWZ0K2NvbnRyb2wKKworYmluZCBTcGFjZStEb3Q0K0RvdDUgS0VZX1RBQgorYmluZCBTcGFjZStEb3QxK0RvdDIgS0VZX1RBQitzaGlmdAorYmluZCBTcGFjZStEb3QxK0RvdDIrRG90OCBLRVlfVEFCK2NvbnRyb2wKK2JpbmQgRjIrRjMgS0VZX1RBQittZXRhCitiaW5kIEYxK0YyK0YzIEtFWV9UQUIrc2hpZnQrbWV0YQorCitiaW5kIFNwYWNlK0RvdDErRG90MyBLRVlfSE9NRQorYmluZCBTcGFjZStEb3Q0K0RvdDYgS0VZX0VORAorCitiaW5kIFNwYWNlK0RvdDErRG90MitEb3QzIEtFWV9IT01FK2NvbnRyb2wKK2JpbmQgU3BhY2UrRG90NCtEb3Q1K0RvdDYgS0VZX0VORCtjb250cm9sCisKK2JpbmQgU3BhY2UrRG90MStEb3QyK0RvdDYgS0VZX1BBR0VfVVAKK2JpbmQgU3BhY2UrRG90MytEb3Q0K0RvdDUgS0VZX1BBR0VfRE9XTgorCitiaW5kIFNwYWNlK0RvdDErRG90MitEb3Q2K0RvdDggS0VZX1BBR0VfVVArY29udHJvbAorYmluZCBTcGFjZStEb3QzK0RvdDQrRG90NStEb3Q4IEtFWV9QQUdFX0RPV04rY29udHJvbAorCitiaW5kIFNwYWNlK0RvdDEgS0VZX0NVUlNPUl9VUAorYmluZCBTcGFjZStEb3Q0IEtFWV9DVVJTT1JfRE9XTgorCitiaW5kIFNwYWNlK1JpZ2h0U2Nyb2xsVXAgS0VZX0NVUlNPUl9VUCtzaGlmdAorYmluZCBTcGFjZStSaWdodFNjcm9sbERvd24gS0VZX0NVUlNPUl9ET1dOK3NoaWZ0CisKK2JpbmQgU3BhY2UrRG90MitEb3QzIEtFWV9DVVJTT1JfVVArY29udHJvbAorYmluZCBTcGFjZStEb3Q1K0RvdDYgS0VZX0NVUlNPUl9ET1dOK2NvbnRyb2wKKworYmluZCBGMStTcGFjZStEb3QyK0RvdDMrRG90OCBLRVlfQ1VSU09SX1VQK3NoaWZ0K2NvbnRyb2wKK2JpbmQgRjErU3BhY2UrRG90NStEb3Q2K0RvdDggS0VZX0NVUlNPUl9ET1dOK3NoaWZ0K2NvbnRyb2wKKworYmluZCBEb3QyK0RvdDMrRG90NyBLRVlfQ1VSU09SX1VQK21ldGEKK2JpbmQgRG90NStEb3Q2K0RvdDcgS0VZX0NVUlNPUl9ET1dOK21ldGEKKworYmluZCBGMStEb3QyK0RvdDMrRG90NyBLRVlfQ1VSU09SX1VQK3NoaWZ0K21ldGEKK2JpbmQgRjErRG90NStEb3Q2K0RvdDcgS0VZX0NVUlNPUl9ET1dOK3NoaWZ0K21ldGEKKworYmluZCBTcGFjZStEb3QzIEtFWV9DVVJTT1JfTEVGVAorYmluZCBTcGFjZStEb3Q2IEtFWV9DVVJTT1JfUklHSFQKKworYmluZCBTcGFjZStEb3QyIEtFWV9DVVJTT1JfTEVGVCtjb250cm9sCitiaW5kIFNwYWNlK0RvdDUgS0VZX0NVUlNPUl9SSUdIVCtjb250cm9sCisKK2JpbmQgRjErU3BhY2UrRG90MitEb3Q4IEtFWV9DVVJTT1JfTEVGVCtzaGlmdCtjb250cm9sCitiaW5kIEYxK1NwYWNlK0RvdDUrRG90OCBLRVlfQ1VSU09SX1JJR0hUK3NoaWZ0K2NvbnRyb2wKKworYmluZCBEb3QyK0RvdDcgS0VZX0NVUlNPUl9MRUZUK21ldGEKK2JpbmQgRG90NStEb3Q3IEtFWV9DVVJTT1JfUklHSFQrbWV0YQorCitiaW5kIEYxK0RvdDIrRG90NyBLRVlfQ1VSU09SX0xFRlQrc2hpZnQrbWV0YQorYmluZCBGMStEb3Q1K0RvdDcgS0VZX0NVUlNPUl9SSUdIVCtzaGlmdCttZXRhCisKK2JpbmQgU3BhY2UrRG90MStEb3QyK0RvdDUgS0VZX0ZVTkNUSU9OKzAKK2JpbmQgRjQrU3BhY2UrRG90MStEb3QyIEtFWV9GVU5DVElPTisxCitiaW5kIEY0K0RvdDErRG90MitEb3Q0K0RvdDggS0VZX0ZVTkNUSU9OKzIKK2JpbmQgRjMrRG90NyBLRVlfRlVOQ1RJT04rMworYmluZCBGMitEb3Q3IEtFWV9GVU5DVElPTis0CitiaW5kIEY0K0RvdDcgS0VZX0ZVTkNUSU9OKzUKK2JpbmQgRjQrU3BhY2UgS0VZX0ZVTkNUSU9OKzYKK2JpbmQgRjQrRG90OCBLRVlfRlVOQ1RJT04rNworYmluZCBEb3QzK0RvdDQrRG90NStEb3Q2K0RvdDcgS0VZX0ZVTkNUSU9OKzgKK2JpbmQgU3BhY2UrRG90MStEb3QzK0RvdDUgS0VZX0ZVTkNUSU9OKzkKK2JpbmQgRG90MStEb3Q0K0RvdDUrRG90NitEb3Q3IEtFWV9GVU5DVElPTisxMAorYmluZCBGNCtEb3QxK0RvdDIrRG90NCtEb3Q1K0RvdDggS0VZX0ZVTkNUSU9OKzExCisKK2JpbmQgRjErRG90NyBLRVlfRlVOQ1RJT04rNStzaGlmdAorYmluZCBGMStTcGFjZSBLRVlfRlVOQ1RJT04rNitzaGlmdAorYmluZCBGMStEb3Q4IEtFWV9GVU5DVElPTis3K3NoaWZ0CitiaW5kIEYxK0Y0IEtFWV9GVU5DVElPTis5K21ldGEKKworbWFwIFNwYWNlIFNQQUNFCittYXAgRG90MSBkb3QxCittYXAgRG90MiBkb3QyCittYXAgRG90MyBkb3QzCittYXAgRG90NCBkb3Q0CittYXAgRG90NSBkb3Q1CittYXAgRG90NiBkb3Q2CisKK2JpbmQgU3BhY2UrRG90NytEb3Q0IFBBU1NET1RTK2RvdDQKK2JpbmQgU3BhY2UrRG90NytEb3QyK0RvdDQrRG90NiBQQVNTRE9UUytkb3QyK2RvdDQrZG90NgorYmluZCBTcGFjZStEb3Q3K0RvdDErRG90MitEb3Q1K0RvdDYgUEFTU0RPVFMrZG90MStkb3QyK2RvdDUrZG90NgorYmluZCBTcGFjZStEb3Q3K0RvdDIrRG90MytEb3Q0K0RvdDUrRG90NiBQQVNTRE9UUytkb3QyK2RvdDMrZG90NCtkb3Q1K2RvdDYKK2JpbmQgU3BhY2UrRG90NytEb3Q0K0RvdDUgUEFTU0RPVFMrZG90NCtkb3Q1CisKK2JlZ2luVmFyaWFibGVzCithc3NpZ24ga2V5cworYXNzaWduIGZsYWdzCitpbmNsdWRlIGxldHRlcnMua3RpCitlbmRWYXJpYWJsZXMKKworYmVnaW5WYXJpYWJsZXMKK2Fzc2lnbiBrZXlzIFNwYWNlK0RvdDcrCithc3NpZ24gZmxhZ3MgK3NoaWZ0CitpbmNsdWRlIGxldHRlcnMua3RpCitlbmRWYXJpYWJsZXMKKworYmVnaW5WYXJpYWJsZXMKK2Fzc2lnbiBrZXlzIEYxK0RvdDcrCithc3NpZ24gZmxhZ3MgK3NoaWZ0K21ldGEKK2luY2x1ZGUgbGV0dGVycy5rdGkKK2VuZFZhcmlhYmxlcworCitiZWdpblZhcmlhYmxlcworYXNzaWduIGtleXMgRG90NysKKyMgdGhlc2UgY29uZmxpY3Qgd2l0aCBzaGlmdGVkIGxldHRlcnMKKyNhc3NpZ24gZmxhZ3MgK21ldGEKK2Fzc2lnbiBmbGFncyArc2hpZnQKK2luY2x1ZGUgbGV0dGVycy5rdGkKK2VuZFZhcmlhYmxlcworCitiZWdpblZhcmlhYmxlcworYXNzaWduIGtleXMgRG90OCsKK2Fzc2lnbiBmbGFncyArY29udHJvbAoraW5jbHVkZSBsZXR0ZXJzLmt0aQorZW5kVmFyaWFibGVzCisKK2JlZ2luVmFyaWFibGVzCithc3NpZ24ga2V5cyBGMSsKK2Fzc2lnbiBmbGFncyArZ3VpCitpbmNsdWRlIGxldHRlcnMua3RpCitlbmRWYXJpYWJsZXMKKworaGlkZSBvZmYKZGlmZiAtLWdpdCBhL1RhYmxlcy5icmFpbGxlYmFjay9obS9yaWdodC5rdGkgYi9UYWJsZXMuYnJhaWxsZWJhY2svaG0vcmlnaHQua3RpCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY1NjgzMTYKLS0tIC9kZXYvbnVsbAorKysgYi9UYWJsZXMuYnJhaWxsZWJhY2svaG0vcmlnaHQua3RpCkBAIC0wLDAgKzEsMzIgQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyMgICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisjCisjIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyMKKyMgQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitiaW5kIFJpZ2h0UGFkVXAgUFJESUZMTgorYmluZCBSaWdodFBhZERvd24gTlhESUZMTgorYmluZCBSaWdodFBhZExlZnQgRldJTkxUU0tJUAorYmluZCBSaWdodFBhZFJpZ2h0IEZXSU5SVFNLSVAKKworYmluZCBSaWdodFBhZExlZnQrUmlnaHRQYWRVcCBDT05URVhUK0NMSVBfTkVXCitiaW5kIFJpZ2h0UGFkTGVmdCtSaWdodFBhZERvd24gQ09OVEVYVCtDTElQX0FERAorCitiaW5kIFJpZ2h0UGFkUmlnaHQrUmlnaHRQYWRVcCBDT05URVhUK0NPUFlfTElORQorYmluZCBSaWdodFBhZFJpZ2h0K1JpZ2h0UGFkRG93biBDT05URVhUK0NPUFlfUkVDVAorYmluZCBSaWdodFBhZExlZnQrUmlnaHRQYWRSaWdodCBQQVNURQorCitiaW5kIFJpZ2h0UGFkVXArUmlnaHRQYWREb3duIENPTlRFWFQrREVTQ0NIQVIKKwpkaWZmIC0tZ2l0IGEvVGFibGVzLmJyYWlsbGViYWNrL2htL3Njcm9sbC5rdGIgYi9UYWJsZXMuYnJhaWxsZWJhY2svaG0vc2Nyb2xsLmt0YgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNDZiNTc0Ci0tLSAvZGV2L251bGwKKysrIGIvVGFibGVzLmJyYWlsbGViYWNrL2htL3Njcm9sbC5rdGIKQEAgLTAsMCArMSwyNCBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorIyAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyMKKyMgQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorIworIyBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorIworIyBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisjIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyMgbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisjCisjIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK3RpdGxlIEhJTVMgQnJhaWxsZSBTZW5zZSAod2l0aCBmb3VyIHNjcm9sbCBrZXlzKQorCitpbmNsdWRlIGNvbW1vbi5rdGkKK2luY2x1ZGUgYnJhaWxsZS5rdGkKK2luY2x1ZGUgZjE0Lmt0aQoraW5jbHVkZSBzY3JvbGwua3RpCmRpZmYgLS1naXQgYS9UYWJsZXMuYnJhaWxsZWJhY2svaG0vc2Nyb2xsLmt0aSBiL1RhYmxlcy5icmFpbGxlYmFjay9obS9zY3JvbGwua3RpCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlkZGMwOTEKLS0tIC9kZXYvbnVsbAorKysgYi9UYWJsZXMuYnJhaWxsZWJhY2svaG0vc2Nyb2xsLmt0aQpAQCAtMCwwICsxLDcxIEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisjICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorIworIyBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisjCisjIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisjCisjIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyMgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorIyBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyMKKyMgV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworIworIyBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworCisjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBEZWZhdWx0IEJpbmRpbmdzICMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK2JpbmQgTGVmdFNjcm9sbFVwIExOVVAKK2JpbmQgTGVmdFNjcm9sbERvd24gTE5ETgorCitiaW5kIFJpZ2h0U2Nyb2xsVXAgRldJTkxUCitiaW5kIFJpZ2h0U2Nyb2xsRG93biBGV0lOUlQKKworYmluZCBMZWZ0U2Nyb2xsVXArTGVmdFNjcm9sbERvd24gTE5CRUcKK2JpbmQgUmlnaHRTY3JvbGxVcCtSaWdodFNjcm9sbERvd24gUkVUVVJOCisKK2JpbmQgTGVmdFNjcm9sbFVwK1JpZ2h0U2Nyb2xsVXAgQ1NSVFJLCitiaW5kIExlZnRTY3JvbGxVcCtSaWdodFNjcm9sbERvd24gU0lYRE9UUworYmluZCBMZWZ0U2Nyb2xsRG93bitSaWdodFNjcm9sbFVwIEZSRUVaRQorYmluZCBMZWZ0U2Nyb2xsRG93bitSaWdodFNjcm9sbERvd24gRElTUE1ECisKK2JpbmQgTGVmdFNjcm9sbFVwK0xlZnRTY3JvbGxEb3duK1JpZ2h0U2Nyb2xsVXAgVE9QCitiaW5kIExlZnRTY3JvbGxVcCtMZWZ0U2Nyb2xsRG93bitSaWdodFNjcm9sbERvd24gQk9UCisKK2JpbmQgUmlnaHRTY3JvbGxVcCtSaWdodFNjcm9sbERvd24rTGVmdFNjcm9sbFVwIElORk8KK2JpbmQgUmlnaHRTY3JvbGxVcCtSaWdodFNjcm9sbERvd24rTGVmdFNjcm9sbERvd24gUFJFRk1FTlUKKworYmluZCBMZWZ0U2Nyb2xsVXArTGVmdFNjcm9sbERvd24rUmlnaHRTY3JvbGxVcCtSaWdodFNjcm9sbERvd24gSEVMUAorCisKKyMjIyMjIyMjIyMjIyMjIyMjCisjIE1lbnUgQmluZGluZ3MgIworIyMjIyMjIyMjIyMjIyMjIyMKKworY29udGV4dCBtZW51CisKK2JpbmQgTGVmdFNjcm9sbFVwIE1FTlVfUFJFVl9JVEVNCitiaW5kIExlZnRTY3JvbGxEb3duIE1FTlVfTkVYVF9JVEVNCisKK2JpbmQgUmlnaHRTY3JvbGxVcCBNRU5VX1BSRVZfU0VUVElORworYmluZCBSaWdodFNjcm9sbERvd24gTUVOVV9ORVhUX1NFVFRJTkcKKworYmluZCBMZWZ0U2Nyb2xsVXArTGVmdFNjcm9sbERvd24gRldJTkxUCitiaW5kIFJpZ2h0U2Nyb2xsVXArUmlnaHRTY3JvbGxEb3duIEZXSU5SVAorCitiaW5kIExlZnRTY3JvbGxVcCtSaWdodFNjcm9sbFVwIE1FTlVfRklSU1RfSVRFTQorYmluZCBMZWZ0U2Nyb2xsRG93bitSaWdodFNjcm9sbERvd24gTUVOVV9MQVNUX0lURU0KKworYmluZCBMZWZ0U2Nyb2xsVXArTGVmdFNjcm9sbERvd24rUmlnaHRTY3JvbGxVcCBQUkVGTE9BRAorYmluZCBMZWZ0U2Nyb2xsVXArTGVmdFNjcm9sbERvd24rUmlnaHRTY3JvbGxEb3duIFBSRUZTQVZFCisKK2JpbmQgUmlnaHRTY3JvbGxVcCtSaWdodFNjcm9sbERvd24rTGVmdFNjcm9sbFVwIE1FTlVfUFJFVl9MRVZFTAorYmluZCBSaWdodFNjcm9sbFVwK1JpZ2h0U2Nyb2xsRG93bitMZWZ0U2Nyb2xsRG93biBQUkVGTUVOVQorCisKZGlmZiAtLWdpdCBhL1RhYmxlcy5icmFpbGxlYmFjay9obS9zeW5jLmt0YiBiL1RhYmxlcy5icmFpbGxlYmFjay9obS9zeW5jLmt0YgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZTY1ZTdkCi0tLSAvZGV2L251bGwKKysrIGIvVGFibGVzLmJyYWlsbGViYWNrL2htL3N5bmMua3RiCkBAIC0wLDAgKzEsMjcgQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyMgICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisjCisjIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyMKKyMgQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCit0aXRsZSBISU1TIFN5bmNCcmFpbGxlCisKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgRGVmYXVsdCBCaW5kaW5ncyAjCisjIyMjIyMjIyMjIyMjIyMjIyMjIworCitpbmNsdWRlIGNvbW1vbi5rdGkKK2luY2x1ZGUgc2Nyb2xsLmt0aQpkaWZmIC0tZ2l0IGEvVGFibGVzLmJyYWlsbGViYWNrL2h0L2FiLmt0YiBiL1RhYmxlcy5icmFpbGxlYmFjay9odC9hYi5rdGIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmI0ODRiYQotLS0gL2Rldi9udWxsCisrKyBiL1RhYmxlcy5icmFpbGxlYmFjay9odC9hYi5rdGIKQEAgLTAsMCArMSwyMSBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorIyAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyMKKyMgQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorIworIyBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorIworIyBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisjIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyMgbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisjCisjIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK3RpdGxlIEhhbmR5VGVjaCBBY3RpdmUgQnJhaWxsZQorCitpbmNsdWRlIGFiLmt0aQpkaWZmIC0tZ2l0IGEvVGFibGVzLmJyYWlsbGViYWNrL2h0L2FiLmt0aSBiL1RhYmxlcy5icmFpbGxlYmFjay9odC9hYi5rdGkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGY3NjhmNgotLS0gL2Rldi9udWxsCisrKyBiL1RhYmxlcy5icmFpbGxlYmFjay9odC9hYi5rdGkKQEAgLTAsMCArMSwyMyBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorIyAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyMKKyMgQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorIworIyBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorIworIyBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisjIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyMgbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisjCisjIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMgS2V5IHN1YnRhYmxlIGZvciBIYW5keVRlY2ggQWN0aXZlIEJyYWlsbGUKKworYmluZCBCMStCNCtTcGFjZUxlZnQgVE9VQ0hfTkFWCisKK2luY2x1ZGUgYnMua3RpCmRpZmYgLS1naXQgYS9UYWJsZXMuYnJhaWxsZWJhY2svaHQvYWJfcy5rdGIgYi9UYWJsZXMuYnJhaWxsZWJhY2svaHQvYWJfcy5rdGIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTYyZTQwMgotLS0gL2Rldi9udWxsCisrKyBiL1RhYmxlcy5icmFpbGxlYmFjay9odC9hYl9zLmt0YgpAQCAtMCwwICsxLDIyIEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisjICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorIworIyBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisjCisjIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisjCisjIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyMgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorIyBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyMKKyMgV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworIworIyBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKwordGl0bGUgSGFuZHlUZWNoIEFjdGl2ZSBCcmFpbGxlIFMKKworaW5jbHVkZSBhYi5rdGkKK2luY2x1ZGUgam95c3RpY2sua3RpCmRpZmYgLS1naXQgYS9UYWJsZXMuYnJhaWxsZWJhY2svaHQvYWM0Lmt0YiBiL1RhYmxlcy5icmFpbGxlYmFjay9odC9hYzQua3RiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNjMWQ2ZGEKLS0tIC9kZXYvbnVsbAorKysgYi9UYWJsZXMuYnJhaWxsZWJhY2svaHQvYWM0Lmt0YgpAQCAtMCwwICsxLDUzIEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisjICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorIworIyBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisjCisjIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisjCisjIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyMgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorIyBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyMKKyMgV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworIworIyBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKwordGl0bGUgSGFuZHlUZWNoIEFjdGl2YXRvcgorCitiaW5kIEIxK0I0K1NwYWNlTGVmdCBUT1VDSF9OQVYKKworaW5jbHVkZSBqb3lzdGljay5rdGkKKworYmluZCBTcGFjZUxlZnQrUm91dGluZ0tleSBQUklOREVOVAorYmluZCBTcGFjZVJpZ2h0K1JvdXRpbmdLZXkgTlhJTkRFTlQKKworI092ZXJyaWRkZW4gYnkgQnJhaWxsZUJhY2suCisjYmluZCBTcGFjZUxlZnQgRldJTkxUCisjYmluZCBTcGFjZVJpZ2h0IEZXSU5SVAorI2JpbmQgU3BhY2VMZWZ0K1NwYWNlUmlnaHQgUEFTVEUKKworI2JpbmQgQjErU3BhY2VMZWZ0IExOQkVHCisjYmluZCBCMStTcGFjZVJpZ2h0IExORU5ECisjYmluZCBCMitTcGFjZUxlZnQgVE9QCisjYmluZCBCMitTcGFjZVJpZ2h0IEJPVAorI2JpbmQgQjMrU3BhY2VMZWZ0IEhXSU5MVAorI2JpbmQgQjMrU3BhY2VSaWdodCBIV0lOUlQKKyNiaW5kIEI2K1NwYWNlTGVmdCBDSFJMVAorI2JpbmQgQjYrU3BhY2VSaWdodCBDSFJSVAorI2JpbmQgQjIrQjMrU3BhY2VMZWZ0IE1VVEUKKyNiaW5kIEIyK0IzK1NwYWNlUmlnaHQgU0FZX0xJTkUKKworaW5jbHVkZSBkb3RzLmt0aQorCisjYXNzaWduIGJyYWlsbGVPbiBCMStCOCtTcGFjZVJpZ2h0CisjYXNzaWduIGJyYWlsbGVPZmYgQjErQjgrU3BhY2VMZWZ0Cithc3NpZ24gc3BhY2UgU3BhY2VMZWZ0Cithc3NpZ24gZW50ZXIgU3BhY2VSaWdodAoraW5jbHVkZSBpbnB1dC5rdGkKKworaW5jbHVkZSAuLi9ibS9kaXNwbGF5Ni5rdGkKK2luY2x1ZGUgLi4vYm0vcm91dGluZzYua3RpCmRpZmYgLS1naXQgYS9UYWJsZXMuYnJhaWxsZWJhY2svaHQvYWxvLmt0YiBiL1RhYmxlcy5icmFpbGxlYmFjay9odC9hbG8ua3RiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk0MTQwYTkKLS0tIC9kZXYvbnVsbAorKysgYi9UYWJsZXMuYnJhaWxsZWJhY2svaHQvYWxvLmt0YgpAQCAtMCwwICsxLDI0IEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisjICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorIworIyBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisjCisjIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisjCisjIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyMgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorIyBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyMKKyMgV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworIworIyBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKwordGl0bGUgSGFuZHlUZWNoIEFjdGlsaW5vCisKK2JpbmQgQjErQjQrU3BhY2VMZWZ0IFRPVUNIX05BVgorCitpbmNsdWRlIGpveXN0aWNrLmt0aQoraW5jbHVkZSBicy5rdGkKZGlmZiAtLWdpdCBhL1RhYmxlcy5icmFpbGxlYmFjay9odC9hczQwLmt0YiBiL1RhYmxlcy5icmFpbGxlYmFjay9odC9hczQwLmt0YgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZDY0ZmUzCi0tLSAvZGV2L251bGwKKysrIGIvVGFibGVzLmJyYWlsbGViYWNrL2h0L2FzNDAua3RiCkBAIC0wLDAgKzEsMjMgQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyMgICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisjCisjIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyMKKyMgQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCit0aXRsZSBIYW5keVRlY2ggQWN0aXZlIFN0YXIgNDAKKworYmluZCBCMStCNCtTcGFjZUxlZnQgVE9VQ0hfTkFWCisKK2luY2x1ZGUgYnMua3RpCmRpZmYgLS1naXQgYS9UYWJsZXMuYnJhaWxsZWJhY2svaHQvYmIua3RiIGIvVGFibGVzLmJyYWlsbGViYWNrL2h0L2JiLmt0YgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MmE0YWUyCi0tLSAvZGV2L251bGwKKysrIGIvVGFibGVzLmJyYWlsbGViYWNrL2h0L2JiLmt0YgpAQCAtMCwwICsxLDIyIEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisjICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorIworIyBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisjCisjIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisjCisjIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyMgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorIyBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyMKKyMgV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworIworIyBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKwordGl0bGUgSGFuZHlUZWNoIEJhc2ljIEJyYWlsbGUKKworaW5jbHVkZSAuLi9ibS9kaXNwbGF5Ni5rdGkKK2luY2x1ZGUgLi4vYm0vcm91dGluZzYua3RpCmRpZmYgLS1naXQgYS9UYWJsZXMuYnJhaWxsZWJhY2svaHQvYmJwLmt0YiBiL1RhYmxlcy5icmFpbGxlYmFjay9odC9iYnAua3RiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY5ODQ1MWQKLS0tIC9kZXYvbnVsbAorKysgYi9UYWJsZXMuYnJhaWxsZWJhY2svaHQvYmJwLmt0YgpAQCAtMCwwICsxLDIxIEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisjICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorIworIyBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisjCisjIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisjCisjIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyMgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorIyBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyMKKyMgV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworIworIyBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKwordGl0bGUgSGFuZHlUZWNoIEJhc2ljIEJyYWlsbGUgUGx1cworCitpbmNsdWRlIGJzLmt0aQpkaWZmIC0tZ2l0IGEvVGFibGVzLmJyYWlsbGViYWNrL2h0L2Jrd20ua3RiIGIvVGFibGVzLmJyYWlsbGViYWNrL2h0L2Jrd20ua3RiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA2NjhhOGEKLS0tIC9kZXYvbnVsbAorKysgYi9UYWJsZXMuYnJhaWxsZWJhY2svaHQvYmt3bS5rdGIKQEAgLTAsMCArMSw2MSBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorIyAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyMKKyMgQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorIworIyBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorIworIyBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisjIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyMgbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisjCisjIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK3RpdGxlIEhhbmR5VGVjaCBCb29rd29ybQorCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIERlZmF1bHQgQmluZGluZ3MgIworIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworYmluZCBCYWNrd2FyZCBGV0lOTFQKK2JpbmQgRm9yd2FyZCBGV0lOUlQKK2JpbmQgRXNjYXBlIENTUlRSSworYmluZCBFc2NhcGUrQmFja3dhcmQgQkFDSworYmluZCBFc2NhcGUrRm9yd2FyZCBESVNQTUQKK2JpbmQgRW50ZXIgUk9VVEUKK2JpbmQgRW50ZXIrQmFja3dhcmQgTE5VUAorYmluZCBFbnRlcitGb3J3YXJkIExORE4KK2JpbmQgRXNjYXBlK0VudGVyIFBSRUZNRU5VCitiaW5kIEVzY2FwZStFbnRlcitCYWNrd2FyZCBMTkJFRworYmluZCBFc2NhcGUrRW50ZXIrRm9yd2FyZCBMTkVORAorYmluZCBCYWNrd2FyZCtGb3J3YXJkIEhFTFAKK2JpbmQgQmFja3dhcmQrRm9yd2FyZCtFc2NhcGUgQ1NSU0laRQorYmluZCBCYWNrd2FyZCtGb3J3YXJkK0VudGVyIEZSRUVaRQorCisKKyMjIyMjIyMjIyMjIyMjIyMjCisjIE1lbnUgQmluZGluZ3MgIworIyMjIyMjIyMjIyMjIyMjIyMKKworY29udGV4dCBtZW51CisKK2JpbmQgQmFja3dhcmQgRldJTkxUCitiaW5kIEZvcndhcmQgRldJTlJUCitiaW5kIEVzY2FwZSBQUkVGTE9BRAorYmluZCBFc2NhcGUrQmFja3dhcmQgTUVOVV9QUkVWX1NFVFRJTkcKK2JpbmQgRXNjYXBlK0ZvcndhcmQgTUVOVV9ORVhUX1NFVFRJTkcKK2JpbmQgRW50ZXIgUFJFRk1FTlUKK2JpbmQgRW50ZXIrQmFja3dhcmQgTUVOVV9QUkVWX0lURU0KK2JpbmQgRW50ZXIrRm9yd2FyZCBNRU5VX05FWFRfSVRFTQorYmluZCBFc2NhcGUrRW50ZXIgUFJFRlNBVkUKK2JpbmQgRXNjYXBlK0VudGVyK0JhY2t3YXJkIE1FTlVfRklSU1RfSVRFTQorYmluZCBFc2NhcGUrRW50ZXIrRm9yd2FyZCBNRU5VX0xBU1RfSVRFTQorYmluZCBCYWNrd2FyZCtGb3J3YXJkIE5PT1AKK2JpbmQgQmFja3dhcmQrRm9yd2FyZCtFc2NhcGUgTk9PUAorYmluZCBCYWNrd2FyZCtGb3J3YXJkK0VudGVyIE5PT1AKZGlmZiAtLWdpdCBhL1RhYmxlcy5icmFpbGxlYmFjay9odC9icmxuLmt0YiBiL1RhYmxlcy5icmFpbGxlYmFjay9odC9icmxuLmt0YgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNGFmNjEyCi0tLSAvZGV2L251bGwKKysrIGIvVGFibGVzLmJyYWlsbGViYWNrL2h0L2JybG4ua3RiCkBAIC0wLDAgKzEsMjEgQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyMgICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisjCisjIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyMKKyMgQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCit0aXRsZSBIYW5keVRlY2ggQnJhaWxsaW5vCisKK2luY2x1ZGUgYnMua3RpCmRpZmYgLS1naXQgYS9UYWJsZXMuYnJhaWxsZWJhY2svaHQvYnMua3RpIGIvVGFibGVzLmJyYWlsbGViYWNrL2h0L2JzLmt0aQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOGEyNzU0Ci0tLSAvZGV2L251bGwKKysrIGIvVGFibGVzLmJyYWlsbGViYWNrL2h0L2JzLmt0aQpAQCAtMCwwICsxLDcwIEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisjICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorIworIyBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisjCisjIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisjCisjIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyMgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorIyBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyMKKyMgV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworIworIyBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIyBLZXkgc3VidGFibGUgZm9yIEhhbmR5VGVjaCBCcmFpbGxlIFN0YXIKKworI092ZXJyaWRkZW4gYnkgQnJhaWxsZUJhY2sKKyNiaW5kIFJvdXRpbmdLZXkgUk9VVEUKK2JpbmQgUm91dGluZ0tleSshUm91dGluZ0tleSBDTElQX0NPUFkKKworYmluZCBTcGFjZUxlZnQrUm91dGluZ0tleSBQUklOREVOVAorYmluZCBTcGFjZVJpZ2h0K1JvdXRpbmdLZXkgTlhJTkRFTlQKKworYmluZCBTcGFjZUxlZnQgRldJTkxUCitiaW5kIFNwYWNlUmlnaHQgRldJTlJUCitiaW5kIFNwYWNlTGVmdCtTcGFjZVJpZ2h0IFBBU1RFCisKK2JpbmQgQjErU3BhY2VMZWZ0IExOQkVHCitiaW5kIEIxK1NwYWNlUmlnaHQgTE5FTkQKK2JpbmQgQjIrU3BhY2VMZWZ0IFRPUAorYmluZCBCMitTcGFjZVJpZ2h0IEJPVAorYmluZCBCMytTcGFjZUxlZnQgSFdJTkxUCitiaW5kIEIzK1NwYWNlUmlnaHQgSFdJTlJUCitiaW5kIEI2K1NwYWNlTGVmdCBDSFJMVAorYmluZCBCNitTcGFjZVJpZ2h0IENIUlJUCitiaW5kIEIyK0IzK1NwYWNlTGVmdCBNVVRFCitiaW5kIEIyK0IzK1NwYWNlUmlnaHQgU0FZX0xJTkUKKworaW5jbHVkZSBkb3RzLmt0aQoraW5jbHVkZSByb2NrZXJzLmt0aQorCithc3NpZ24gYnJhaWxsZU9uIEIxK0I4K1NwYWNlUmlnaHQKK2Fzc2lnbiBicmFpbGxlT2ZmIEIxK0I4K1NwYWNlTGVmdAorYXNzaWduIHNwYWNlIFNwYWNlTGVmdAorYXNzaWduIGVudGVyIFNwYWNlUmlnaHQKK2luY2x1ZGUgaW5wdXQua3RpCisKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEJyYWlsbGVCYWNrIEJpbmRpbmdzICMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjIFJPVVRFKzEyOCBpcyBhIGxvbmctcHJlc3Mgb24gdGhlIHJvdXRpbmcga2V5LgorYmluZCBSb3V0aW5nS2V5IFJPVVRFOlJPVVRFKzEyOAorCithc3NpZ24gc3BhY2UgU3BhY2VMZWZ0CitpbmNsdWRlIGRvdHMua3RpCisKK2Fzc2lnbiBzcGFjZSBTcGFjZVJpZ2h0CitpbmNsdWRlIGRvdHMua3RpCisKK2Fzc2lnbiBzcGFjZSBTcGFjZUxlZnQKK2luY2x1ZGUgaW5wdXQua3RpCisKK2Fzc2lnbiBzcGFjZSBTcGFjZVJpZ2h0CitpbmNsdWRlIGlucHV0Lmt0aQpkaWZmIC0tZ2l0IGEvVGFibGVzLmJyYWlsbGViYWNrL2h0L2JzNDAua3RiIGIvVGFibGVzLmJyYWlsbGViYWNrL2h0L2JzNDAua3RiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc1ZmFkZmEKLS0tIC9kZXYvbnVsbAorKysgYi9UYWJsZXMuYnJhaWxsZWJhY2svaHQvYnM0MC5rdGIKQEAgLTAsMCArMSwyMSBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorIyAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyMKKyMgQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorIworIyBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorIworIyBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisjIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyMgbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisjCisjIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK3RpdGxlIEhhbmR5VGVjaCBCcmFpbGxlIFN0YXIgNDAKKworaW5jbHVkZSBicy5rdGkKZGlmZiAtLWdpdCBhL1RhYmxlcy5icmFpbGxlYmFjay9odC9iczgwLmt0YiBiL1RhYmxlcy5icmFpbGxlYmFjay9odC9iczgwLmt0YgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMzY1MTVlCi0tLSAvZGV2L251bGwKKysrIGIvVGFibGVzLmJyYWlsbGViYWNrL2h0L2JzODAua3RiCkBAIC0wLDAgKzEsMjIgQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyMgICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisjCisjIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyMKKyMgQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCit0aXRsZSBIYW5keVRlY2ggQnJhaWxsZSBTdGFyIDgwCisKK2luY2x1ZGUgYnMua3RpCitpbmNsdWRlIGtleXBhZC5rdGkKZGlmZiAtLWdpdCBhL1RhYmxlcy5icmFpbGxlYmFjay9odC9jYjQwLmt0YiBiL1RhYmxlcy5icmFpbGxlYmFjay9odC9jYjQwLmt0YgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kOTY3MmQ1Ci0tLSAvZGV2L251bGwKKysrIGIvVGFibGVzLmJyYWlsbGViYWNrL2h0L2NiNDAua3RiCkBAIC0wLDAgKzEsMjEgQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyMgICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisjCisjIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyMKKyMgQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCit0aXRsZSBIYW5keVRlY2ggQ29ubmVjdCBCcmFpbGxlIDQwCisKK2luY2x1ZGUgYnMua3RpCmRpZmYgLS1naXQgYS9UYWJsZXMuYnJhaWxsZWJhY2svaHQvZG90cy5rdGkgYi9UYWJsZXMuYnJhaWxsZWJhY2svaHQvZG90cy5rdGkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTIwNjQ1ZgotLS0gL2Rldi9udWxsCisrKyBiL1RhYmxlcy5icmFpbGxlYmFjay9odC9kb3RzLmt0aQpAQCAtMCwwICsxLDgzIEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisjICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorIworIyBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisjCisjIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisjCisjIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyMgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorIyBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyMKKyMgV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworIworIyBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIyBLZXkgc3VidGFibGUgZm9yIEhhbmR5VGVjaCBicmFpbGxlIGRvdCBrZXlzCisKKyNPdmVycmlkZGVuIGJ5IEJyYWlsbGVCYWNrLgorI2JpbmQgQjEgSE9NRQorI2JpbmQgQjIgVE9QX0xFRlQKKyNiaW5kIEIzIEJBQ0sKKyNiaW5kIEI0IExOVVAKKyNiaW5kIEI1IExORE4KKyNiaW5kIEIxK0I0IFBSUEdSUEgKKyNiaW5kIEIxK0I1IE5YUEdSUEgKKyNiaW5kIEIyK0I0IFBSUFJPTVBUCisjYmluZCBCMitCNSBOWFBST01QVAorI2JpbmQgQjMrQjQgUFJTRUFSQ0gKKyNiaW5kIEIzK0I1IE5YU0VBUkNICisjYmluZCBCNCtCNSBMRUFSTgorI2JpbmQgQjYrQjQgQVRUUlVQCisjYmluZCBCNitCNSBBVFRSRE4KKyNiaW5kIEI3K0I0IFdJTlVQCisjYmluZCBCNytCNSBXSU5ETgorI2JpbmQgQjgrQjQgUFJESUZMTgorI2JpbmQgQjgrQjUgTlhESUZMTgorI2JpbmQgQjggSEVMUAorI2JpbmQgQjgrQjEgQ1NSVFJLCisjYmluZCBCOCtCMiBDU1JWSVMKKyNiaW5kIEI4K0IzIEFUVFJWSVMKKyNiaW5kIEI4K0I2IEZSRUVaRQorI2JpbmQgQjgrQjcgVFVORVMKKyNiaW5kIEI3IFNJWERPVFMKKyNiaW5kIEI3K0IxIFBSRUZNRU5VCisjYmluZCBCNytCMiBQUkVGTE9BRAorI2JpbmQgQjcrQjMgUFJFRlNBVkUKKyNiaW5kIEI3K0I2IElORk8KKyNiaW5kIEI2IERJU1BNRAorI2JpbmQgQjYrQjEgU0tQSURMTlMKKyNiaW5kIEI2K0IyIFNLUEJMTktXSU5TCisjYmluZCBCNitCMyBTTElERVdJTgorCisjYmluZCBCMitCMytCNStCNiBUSU1FCisKK2JpbmQgQjErUm91dGluZ0tleSBTRVRMRUZUCitiaW5kIEIyK1JvdXRpbmdLZXkgREVTQ0NIQVIKK2JpbmQgQjMrUm91dGluZ0tleSBDTElQX0FERAorYmluZCBCNCtSb3V0aW5nS2V5IENMSVBfTkVXCitiaW5kIEI1K1JvdXRpbmdLZXkgQ09QWV9SRUNUCitiaW5kIEI2K1JvdXRpbmdLZXkgQ09QWV9MSU5FCitiaW5kIEI3K1JvdXRpbmdLZXkgU0VUTUFSSworYmluZCBCOCtSb3V0aW5nS2V5IEdPVE9NQVJLCisKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEJyYWlsbGVCYWNrIEJpbmRpbmdzICMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjIE5lZWRzIHRvIG1hdGNoIHVwIHdpdGggaW5wdXQua3RpCithc3NpZ24gY2hvcmQgXHtzcGFjZX0KK2Fzc2lnbiBjaG9yZDEgQjQKK2Fzc2lnbiBjaG9yZDIgQjMKK2Fzc2lnbiBjaG9yZDMgQjIKK2Fzc2lnbiBjaG9yZDQgQjUKK2Fzc2lnbiBjaG9yZDUgQjYKK2Fzc2lnbiBjaG9yZDYgQjcKK2Fzc2lnbiBjaG9yZDcgQjEKK2Fzc2lnbiBjaG9yZDggQjgKKworaW5jbHVkZSAuLi9hbmRyb2lkLWNob3Jkcy1nb29nbGUua3RpCmRpZmYgLS1naXQgYS9UYWJsZXMuYnJhaWxsZWJhY2svaHQvZWFzeS5rdGIgYi9UYWJsZXMuYnJhaWxsZWJhY2svaHQvZWFzeS5rdGIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzYyZmUyOQotLS0gL2Rldi9udWxsCisrKyBiL1RhYmxlcy5icmFpbGxlYmFjay9odC9lYXN5Lmt0YgpAQCAtMCwwICsxLDUyIEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisjICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorIworIyBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisjCisjIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisjCisjIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyMgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorIyBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyMKKyMgV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworIworIyBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKwordGl0bGUgSGFuZHlUZWNoIEVhc3kgQnJhaWxsZQorCitiaW5kIExlZnQgRldJTkxUCitiaW5kIFJpZ2h0IEZXSU5SVAorCisjT3ZlcnJpZGRlbiBieSBCcmFpbGxlQmFjay4KKyNiaW5kIFJvdXRpbmdLZXkgUk9VVEUKK2JpbmQgUm91dGluZ0tleSshUm91dGluZ0tleSBDTElQX0NPUFkKKworYmluZCBMZWZ0K1JvdXRpbmdLZXkgUFJJTkRFTlQKK2JpbmQgUmlnaHQrUm91dGluZ0tleSBOWElOREVOVAorCitiaW5kIExlZnQrUmlnaHQgUEFTVEUKKworYmluZCBCMStMZWZ0IExOQkVHCitiaW5kIEIxK1JpZ2h0IExORU5ECitiaW5kIEIyK0xlZnQgVE9QCitiaW5kIEIyK1JpZ2h0IEJPVAorYmluZCBCMytMZWZ0IEhXSU5MVAorYmluZCBCMytSaWdodCBIV0lOUlQKK2JpbmQgQjYrTGVmdCBDSFJMVAorYmluZCBCNitSaWdodCBDSFJSVAorYmluZCBCMitCMytMZWZ0IE1VVEUKK2JpbmQgQjIrQjMrUmlnaHQgU0FZX0xJTkUKKworaW5jbHVkZSBkb3RzLmt0aQorCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBCcmFpbGxlQmFjayBCaW5kaW5ncyAjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIyBST1VURSsxMjggaXMgYSBsb25nLXByZXNzIG9uIHRoZSByb3V0aW5nIGtleS4KK2JpbmQgUm91dGluZ0tleSBST1VURTpST1VURSsxMjgKZGlmZiAtLWdpdCBhL1RhYmxlcy5icmFpbGxlYmFjay9odC9pbnB1dC5rdGkgYi9UYWJsZXMuYnJhaWxsZWJhY2svaHQvaW5wdXQua3RpCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhiODE0MmUKLS0tIC9kZXYvbnVsbAorKysgYi9UYWJsZXMuYnJhaWxsZWJhY2svaHQvaW5wdXQua3RpCkBAIC0wLDAgKzEsMzkgQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyMgICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisjCisjIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyMKKyMgQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjIFVudXNlZCBieSBCcmFpbGxlIGRpc3BsYXkKKyMgY29udGV4dCBicmFpbGxlIEJyYWlsbGUgSW5wdXQgTW9kZQorbWFwIEI0IERPVDEKK21hcCBCMyBET1QyCittYXAgQjIgRE9UMworbWFwIEI1IERPVDQKK21hcCBCNiBET1Q1CittYXAgQjcgRE9UNgorbWFwIEIxIERPVDcKK21hcCBCOCBET1Q4CitiaW5kIFx7c3BhY2V9IFBBU1NET1RTCitiaW5kIFx7ZW50ZXJ9IEtFWV9FTlRFUgorYmluZCBce3NwYWNlfStCMSBLRVlfQkFDS1NQQUNFCittYXAgXHtzcGFjZX0gQ09OVFJPTAorbWFwIFx7ZW50ZXJ9IE1FVEEKK2JpbmQgXHticmFpbGxlT2ZmfSBDT05URVhUK2RlZmF1bHQKKworIyBVbnVzZWQgYnkgQnJhaWxsZSBkaXNwbGF5CisjIGNvbnRleHQgZGVmYXVsdAorYmluZCBce2JyYWlsbGVPbn0gQ09OVEVYVCticmFpbGxlCitiaW5kIFx7YnJhaWxsZU9mZn0gQ09OVEVYVCtkZWZhdWx0CmRpZmYgLS1naXQgYS9UYWJsZXMuYnJhaWxsZWJhY2svaHQvam95c3RpY2sua3RpIGIvVGFibGVzLmJyYWlsbGViYWNrL2h0L2pveXN0aWNrLmt0aQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NGMzZjJjCi0tLSAvZGV2L251bGwKKysrIGIvVGFibGVzLmJyYWlsbGViYWNrL2h0L2pveXN0aWNrLmt0aQpAQCAtMCwwICsxLDI3IEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisjICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorIworIyBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisjCisjIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisjCisjIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyMgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorIyBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyMKKyMgV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworIworIyBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIyBLZXkgc3VidGFibGUgZm9yIEhhbmR5VGVjaDogQWN0aWxpbm8sIEFjdGl2YXRvcgorCitiaW5kIExlZnQgS0VZX0NVUlNPUl9MRUZUCitiaW5kIFJpZ2h0IEtFWV9DVVJTT1JfUklHSFQKK2JpbmQgVXAgS0VZX0NVUlNPUl9VUAorYmluZCBEb3duIEtFWV9DVVJTT1JfRE9XTgorYmluZCBBY3Rpb24gS0VZX0VOVEVSCisKKwpkaWZmIC0tZ2l0IGEvVGFibGVzLmJyYWlsbGViYWNrL2h0L2tleXBhZC5rdGkgYi9UYWJsZXMuYnJhaWxsZWJhY2svaHQva2V5cGFkLmt0aQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOGUzN2Q2Ci0tLSAvZGV2L251bGwKKysrIGIvVGFibGVzLmJyYWlsbGViYWNrL2h0L2tleXBhZC5rdGkKQEAgLTAsMCArMSwxMDQgQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyMgICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisjCisjIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyMKKyMgQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjIEtleSBzdWJ0YWJsZSBmb3IgSGFuZHlUZWNoIGtleXBhZCBrZXlzCitub3RlIFRoZSAxNi1rZXkgcGFkIGlzIGFycmFuZ2VkIGluIGZvdXIgY29sdW1ucyBhbmQgZm91ciByb3dzLgorbm90ZSAqIFRoZSBrZXlzIGluIHRoZSBmaXJzdCAodG9wKSByb3cgYXJlIG5hbWVkOiBCOSwgT25lLCBUd28sIFRocmVlLgorbm90ZSAqIFRoZSBrZXlzIGluIHRoZSBzZWNvbmQgcm93IGFyZSBuYW1lZDogQjEwLCBGb3VyLCBGaXZlLCBTaXguCitub3RlICogVGhlIGtleXMgaW4gdGhlIHRoaXJkIHJvdyBhcmUgbmFtZWQ6IEIxMSwgU2V2ZW4sIEVpZ2h0LCBOaW5lLgorbm90ZSAqIFRoZSBrZXlzIGluIHRoZSBmb3VydGggKGJvdHRvbSkgcm93IGFyZSBuYW1lZDogQjEyLCBCMTMsIFplcm8sIEIxNC4KKworYmluZCBCOSBTQVlfQUJPVkUKK2JpbmQgQjEwIFNBWV9MSU5FCitiaW5kIEIxMSBTQVlfQkVMT1cKK2JpbmQgQjEyIE1VVEUKK2JpbmQgWmVybyBTUEtIT01FCitiaW5kIEIxMyBTV0lUQ0hWVF9QUkVWCitiaW5kIEIxNCBTV0lUQ0hWVF9ORVhUCitiaW5kIEVpZ2h0IE1FTlVfUFJFVl9JVEVNCitiaW5kIE5pbmUgTUVOVV9GSVJTVF9JVEVNCitiaW5kIEZvdXIgTUVOVV9QUkVWX1NFVFRJTkcKK2JpbmQgRml2ZSBQUkVGU0FWRQorYmluZCBTaXggTUVOVV9ORVhUX1NFVFRJTkcKK2JpbmQgT25lIFBSRUZNRU5VCitiaW5kIFR3byBNRU5VX05FWFRfSVRFTQorYmluZCBUaHJlZSBNRU5VX0xBU1RfSVRFTQorCitiaW5kIFplcm8rU2V2ZW4gS0VZX0hPTUUKK2JpbmQgWmVybytFaWdodCBLRVlfQ1VSU09SX1VQCitiaW5kIFplcm8rTmluZSBLRVlfUEFHRV9VUAorYmluZCBaZXJvK0ZvdXIgS0VZX0NVUlNPUl9MRUZUCitiaW5kIFplcm8rU2l4IEtFWV9DVVJTT1JfUklHSFQKK2JpbmQgWmVybytPbmUgS0VZX0VORAorYmluZCBaZXJvK1R3byBLRVlfQ1VSU09SX0RPV04KK2JpbmQgWmVybytUaHJlZSBLRVlfUEFHRV9ET1dOCitiaW5kIFplcm8rQjEzIEtFWV9JTlNFUlQKK2JpbmQgWmVybytCMTQgS0VZX0RFTEVURQorCitiaW5kIEI5K09uZSBTRVRNQVJLKzAKK2JpbmQgQjkrVHdvIFNFVE1BUksrMQorYmluZCBCOStUaHJlZSBTRVRNQVJLKzIKK2JpbmQgQjkrRm91ciBTRVRNQVJLKzMKK2JpbmQgQjkrRml2ZSBTRVRNQVJLKzQKK2JpbmQgQjkrU2l4IFNFVE1BUksrNQorYmluZCBCOStTZXZlbiBTRVRNQVJLKzYKK2JpbmQgQjkrRWlnaHQgU0VUTUFSSys3CitiaW5kIEI5K05pbmUgU0VUTUFSSys4CitiaW5kIEI5K1plcm8gU0VUTUFSSys5CitiaW5kIEI5K0IxMyBTRVRNQVJLKzEwCitiaW5kIEI5K0IxNCBTRVRNQVJLKzExCisKK2JpbmQgQjEwK09uZSBHT1RPTUFSSyswCitiaW5kIEIxMCtUd28gR09UT01BUksrMQorYmluZCBCMTArVGhyZWUgR09UT01BUksrMgorYmluZCBCMTArRm91ciBHT1RPTUFSSyszCitiaW5kIEIxMCtGaXZlIEdPVE9NQVJLKzQKK2JpbmQgQjEwK1NpeCBHT1RPTUFSSys1CitiaW5kIEIxMCtTZXZlbiBHT1RPTUFSSys2CitiaW5kIEIxMCtFaWdodCBHT1RPTUFSSys3CitiaW5kIEIxMCtOaW5lIEdPVE9NQVJLKzgKK2JpbmQgQjEwK1plcm8gR09UT01BUksrOQorYmluZCBCMTArQjEzIEdPVE9NQVJLKzEwCitiaW5kIEIxMCtCMTQgR09UT01BUksrMTEKKworYmluZCBCMTErT25lIFNXSVRDSFZUKzAKK2JpbmQgQjExK1R3byBTV0lUQ0hWVCsxCitiaW5kIEIxMStUaHJlZSBTV0lUQ0hWVCsyCitiaW5kIEIxMStGb3VyIFNXSVRDSFZUKzMKK2JpbmQgQjExK0ZpdmUgU1dJVENIVlQrNAorYmluZCBCMTErU2l4IFNXSVRDSFZUKzUKK2JpbmQgQjExK1NldmVuIFNXSVRDSFZUKzYKK2JpbmQgQjExK0VpZ2h0IFNXSVRDSFZUKzcKK2JpbmQgQjExK05pbmUgU1dJVENIVlQrOAorYmluZCBCMTErWmVybyBTV0lUQ0hWVCs5CitiaW5kIEIxMStCMTMgU1dJVENIVlQrMTAKK2JpbmQgQjExK0IxNCBTV0lUQ0hWVCsxMQorCitiaW5kIEIxMitPbmUgS0VZX0ZVTkNUSU9OKzAKK2JpbmQgQjEyK1R3byBLRVlfRlVOQ1RJT04rMQorYmluZCBCMTIrVGhyZWUgS0VZX0ZVTkNUSU9OKzIKK2JpbmQgQjEyK0ZvdXIgS0VZX0ZVTkNUSU9OKzMKK2JpbmQgQjEyK0ZpdmUgS0VZX0ZVTkNUSU9OKzQKK2JpbmQgQjEyK1NpeCBLRVlfRlVOQ1RJT04rNQorYmluZCBCMTIrU2V2ZW4gS0VZX0ZVTkNUSU9OKzYKK2JpbmQgQjEyK0VpZ2h0IEtFWV9GVU5DVElPTis3CitiaW5kIEIxMitOaW5lIEtFWV9GVU5DVElPTis4CitiaW5kIEIxMitaZXJvIEtFWV9GVU5DVElPTis5CitiaW5kIEIxMitCMTMgS0VZX0ZVTkNUSU9OKzEwCitiaW5kIEIxMitCMTQgS0VZX0ZVTkNUSU9OKzExCisKZGlmZiAtLWdpdCBhL1RhYmxlcy5icmFpbGxlYmFjay9odC9tYzg4Lmt0YiBiL1RhYmxlcy5icmFpbGxlYmFjay9odC9tYzg4Lmt0YgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OTVhNDMxCi0tLSAvZGV2L251bGwKKysrIGIvVGFibGVzLmJyYWlsbGViYWNrL2h0L21jODgua3RiCkBAIC0wLDAgKzEsMjIgQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyMgICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisjCisjIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyMKKyMgQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCit0aXRsZSBIYW5keVRlY2ggTW9kdWxhciBDb25uZWN0IDg4CisKK2luY2x1ZGUgbWUua3RpCitpbmNsdWRlIGtleXBhZC5rdGkKZGlmZiAtLWdpdCBhL1RhYmxlcy5icmFpbGxlYmFjay9odC9tZGxyLmt0YiBiL1RhYmxlcy5icmFpbGxlYmFjay9odC9tZGxyLmt0YgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYjFiMjVkCi0tLSAvZGV2L251bGwKKysrIGIvVGFibGVzLmJyYWlsbGViYWNrL2h0L21kbHIua3RiCkBAIC0wLDAgKzEsNDggQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyMgICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisjCisjIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyMKKyMgQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCit0aXRsZSBIYW5keVRlY2ggTW9kdWxhcgorCitiaW5kIFJvdXRpbmdLZXkgUk9VVEUKK2JpbmQgUm91dGluZ0tleSshUm91dGluZ0tleSBDTElQX0NPUFkKKworYmluZCBMZWZ0K1JvdXRpbmdLZXkgUFJJTkRFTlQKK2JpbmQgUmlnaHQrUm91dGluZ0tleSBOWElOREVOVAorCitiaW5kIExlZnQgRldJTkxUCitiaW5kIFJpZ2h0IEZXSU5SVAorYmluZCBMZWZ0K1JpZ2h0IFBBU1RFCisKK2JpbmQgQjErTGVmdCBMTkJFRworYmluZCBCMStSaWdodCBMTkVORAorYmluZCBCMitMZWZ0IFRPUAorYmluZCBCMitSaWdodCBCT1QKK2JpbmQgQjMrTGVmdCBIV0lOTFQKK2JpbmQgQjMrUmlnaHQgSFdJTlJUCitiaW5kIEI2K0xlZnQgQ0hSTFQKK2JpbmQgQjYrUmlnaHQgQ0hSUlQKK2JpbmQgQjIrQjMrTGVmdCBNVVRFCitiaW5kIEIyK0IzK1JpZ2h0IFNBWV9MSU5FCisKK2JpbmQgU3RhdHVzMSBIRUxQCitiaW5kIFN0YXR1czIgUFJFRk1FTlUKK2JpbmQgU3RhdHVzMyBJTkZPCitiaW5kIFN0YXR1czQgRlJFRVpFCisKK2luY2x1ZGUgZG90cy5rdGkKK2luY2x1ZGUga2V5cGFkLmt0aQpkaWZmIC0tZ2l0IGEvVGFibGVzLmJyYWlsbGViYWNrL2h0L21lLmt0aSBiL1RhYmxlcy5icmFpbGxlYmFjay9odC9tZS5rdGkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODk2YjQ1NwotLS0gL2Rldi9udWxsCisrKyBiL1RhYmxlcy5icmFpbGxlYmFjay9odC9tZS5rdGkKQEAgLTAsMCArMSw0NiBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorIyAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyMKKyMgQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorIworIyBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorIworIyBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisjIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyMgbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisjCisjIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMgS2V5IHN1YnRhYmxlIGZvciBIYW5keVRlY2ggTW9kdWxhciBFdm9sdXRpb24KKworYmluZCBMZWZ0IEZXSU5MVAorYmluZCBSaWdodCBGV0lOUlQKK2luY2x1ZGUgcm9ja2Vycy5rdGkKKworYmluZCBSb3V0aW5nS2V5IFJPVVRFCitiaW5kIFJvdXRpbmdLZXkrIVJvdXRpbmdLZXkgQ0xJUF9DT1BZCisKK2JpbmQgTGVmdCtSb3V0aW5nS2V5IFBSSU5ERU5UCitiaW5kIFJpZ2h0K1JvdXRpbmdLZXkgTlhJTkRFTlQKKworYmluZCBMZWZ0K1JpZ2h0IFBBU1RFCisKK2JpbmQgQjErTGVmdCBMTkJFRworYmluZCBCMStSaWdodCBMTkVORAorYmluZCBCMitMZWZ0IFRPUAorYmluZCBCMitSaWdodCBCT1QKK2JpbmQgQjMrTGVmdCBIV0lOTFQKK2JpbmQgQjMrUmlnaHQgSFdJTlJUCitiaW5kIEI2K0xlZnQgQ0hSTFQKK2JpbmQgQjYrUmlnaHQgQ0hSUlQKK2JpbmQgQjIrQjMrTGVmdCBNVVRFCitiaW5kIEIyK0IzK1JpZ2h0IFNBWV9MSU5FCisKK2JpbmQgQjErQjQrTGVmdCBUT1VDSF9OQVYKKworaW5jbHVkZSBkb3RzLmt0aQpkaWZmIC0tZ2l0IGEvVGFibGVzLmJyYWlsbGViYWNrL2h0L21lNjQua3RiIGIvVGFibGVzLmJyYWlsbGViYWNrL2h0L21lNjQua3RiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU3NWY0ZWIKLS0tIC9kZXYvbnVsbAorKysgYi9UYWJsZXMuYnJhaWxsZWJhY2svaHQvbWU2NC5rdGIKQEAgLTAsMCArMSwyMSBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorIyAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyMKKyMgQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorIworIyBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorIworIyBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisjIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyMgbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisjCisjIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK3RpdGxlIEhhbmR5VGVjaCBNb2R1bGFyIEV2b2x1dGlvbiA2NAorCitpbmNsdWRlIG1lLmt0aQpkaWZmIC0tZ2l0IGEvVGFibGVzLmJyYWlsbGViYWNrL2h0L21lODgua3RiIGIvVGFibGVzLmJyYWlsbGViYWNrL2h0L21lODgua3RiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVmMWI1NzkKLS0tIC9kZXYvbnVsbAorKysgYi9UYWJsZXMuYnJhaWxsZWJhY2svaHQvbWU4OC5rdGIKQEAgLTAsMCArMSwyMiBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorIyAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyMKKyMgQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorIworIyBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorIworIyBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisjIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyMgbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisjCisjIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK3RpdGxlIEhhbmR5VGVjaCBNb2R1bGFyIEV2b2x1dGlvbiA4OAorCitpbmNsdWRlIG1lLmt0aQoraW5jbHVkZSBrZXlwYWQua3RpCmRpZmYgLS1naXQgYS9UYWJsZXMuYnJhaWxsZWJhY2svaHQvcm9ja2Vycy5rdGkgYi9UYWJsZXMuYnJhaWxsZWJhY2svaHQvcm9ja2Vycy5rdGkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2ZmMjQxMAotLS0gL2Rldi9udWxsCisrKyBiL1RhYmxlcy5icmFpbGxlYmFjay9odC9yb2NrZXJzLmt0aQpAQCAtMCwwICsxLDY4IEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisjICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorIworIyBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisjCisjIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisjCisjIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyMgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorIyBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyMKKyMgV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworIworIyBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIyBLZXkgc3VidGFibGUgZm9yIEhhbmR5VGVjaCByb2NrZXIga2V5cworCitiaW5kIExlZnRSb2NrZXJUb3AgS0VZX0NVUlNPUl9VUAorYmluZCBMZWZ0Um9ja2VyQm90dG9tIEtFWV9DVVJTT1JfRE9XTgorYmluZCBSaWdodFJvY2tlclRvcCBMTlVQCitiaW5kIFJpZ2h0Um9ja2VyQm90dG9tIExORE4KK2JpbmQgTGVmdFJvY2tlclRvcCtMZWZ0Um9ja2VyQm90dG9tIEZXSU5MVAorYmluZCBSaWdodFJvY2tlclRvcCtSaWdodFJvY2tlckJvdHRvbSBGV0lOUlQKK2JpbmQgTGVmdFJvY2tlclRvcCtMZWZ0Um9ja2VyQm90dG9tK1JpZ2h0Um9ja2VyVG9wK1JpZ2h0Um9ja2VyQm90dG9tIEhPTUUKK2JpbmQgTGVmdFJvY2tlclRvcCtMZWZ0Um9ja2VyQm90dG9tK0IzIEhPTUUKK2JpbmQgUmlnaHRSb2NrZXJUb3ArUmlnaHRSb2NrZXJCb3R0b20rQjYgSE9NRQorYmluZCBSaWdodFJvY2tlclRvcCtSaWdodFJvY2tlckJvdHRvbStMZWZ0Um9ja2VyVG9wIFRPUF9MRUZUCitiaW5kIFJpZ2h0Um9ja2VyVG9wK1JpZ2h0Um9ja2VyQm90dG9tK0I1IFRPUF9MRUZUCitiaW5kIExlZnRSb2NrZXJUb3ArQjMgVE9QX0xFRlQKK2JpbmQgUmlnaHRSb2NrZXJUb3ArUmlnaHRSb2NrZXJCb3R0b20rTGVmdFJvY2tlckJvdHRvbSBCT1RfTEVGVAorYmluZCBSaWdodFJvY2tlclRvcCtSaWdodFJvY2tlckJvdHRvbStCNyBCT1RfTEVGVAorYmluZCBMZWZ0Um9ja2VyQm90dG9tK0IzIEJPVF9MRUZUCitiaW5kIExlZnRSb2NrZXJUb3ArTGVmdFJvY2tlckJvdHRvbStSaWdodFJvY2tlclRvcCBUT1AKK2JpbmQgTGVmdFJvY2tlclRvcCtMZWZ0Um9ja2VyQm90dG9tK0I0IFRPUAorYmluZCBSaWdodFJvY2tlclRvcCtCNiBUT1AKK2JpbmQgTGVmdFJvY2tlclRvcCtMZWZ0Um9ja2VyQm90dG9tK1JpZ2h0Um9ja2VyQm90dG9tIEJPVAorYmluZCBMZWZ0Um9ja2VyVG9wK0xlZnRSb2NrZXJCb3R0b20rQjIgQk9UCitiaW5kIFJpZ2h0Um9ja2VyQm90dG9tK0I2IEJPVAorYmluZCBMZWZ0Um9ja2VyVG9wK1JpZ2h0Um9ja2VyVG9wIFBSRElGTE4KK2JpbmQgTGVmdFJvY2tlclRvcCtCNCBQUkRJRkxOCitiaW5kIFJpZ2h0Um9ja2VyVG9wK0I1IFBSRElGTE4KK2JpbmQgTGVmdFJvY2tlclRvcCtSaWdodFJvY2tlckJvdHRvbSBOWERJRkxOCitiaW5kIExlZnRSb2NrZXJUb3ArQjIgTlhESUZMTgorYmluZCBSaWdodFJvY2tlckJvdHRvbStCNSBOWERJRkxOCitiaW5kIExlZnRSb2NrZXJCb3R0b20rUmlnaHRSb2NrZXJUb3AgQVRUUlVQCitiaW5kIExlZnRSb2NrZXJCb3R0b20rQjQgQVRUUlVQCitiaW5kIFJpZ2h0Um9ja2VyVG9wK0I3IEFUVFJVUAorYmluZCBMZWZ0Um9ja2VyQm90dG9tK1JpZ2h0Um9ja2VyQm90dG9tIEFUVFJETgorYmluZCBMZWZ0Um9ja2VyQm90dG9tK0IyIEFUVFJETgorYmluZCBSaWdodFJvY2tlckJvdHRvbStCNyBBVFRSRE4KKworYmluZCBMZWZ0Um9ja2VyVG9wK1JvdXRpbmdLZXkgQ0xJUF9ORVcKK2JpbmQgTGVmdFJvY2tlclRvcCtMZWZ0Um9ja2VyQm90dG9tK1JvdXRpbmdLZXkgS0VZX0ZVTkNUSU9OCitiaW5kIExlZnRSb2NrZXJCb3R0b20rUm91dGluZ0tleSBDTElQX0FERAorYmluZCBSaWdodFJvY2tlclRvcCtSb3V0aW5nS2V5IENPUFlfTElORQorYmluZCBSaWdodFJvY2tlclRvcCtSaWdodFJvY2tlckJvdHRvbStSb3V0aW5nS2V5IFNXSVRDSFZUCitiaW5kIFJpZ2h0Um9ja2VyQm90dG9tK1JvdXRpbmdLZXkgQ09QWV9SRUNUCisKKworY29udGV4dCBtZW51CitiaW5kIFJpZ2h0Um9ja2VyVG9wIE1FTlVfUFJFVl9JVEVNCitiaW5kIFJpZ2h0Um9ja2VyQm90dG9tIE1FTlVfTkVYVF9JVEVNCitiaW5kIExlZnRSb2NrZXJUb3AgTUVOVV9QUkVWX1NFVFRJTkcKK2JpbmQgTGVmdFJvY2tlckJvdHRvbSBNRU5VX05FWFRfU0VUVElORworCmRpZmYgLS1naXQgYS9UYWJsZXMuYnJhaWxsZWJhY2svaHQvd2F2ZS5rdGIgYi9UYWJsZXMuYnJhaWxsZWJhY2svaHQvd2F2ZS5rdGIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDdhMGIwYQotLS0gL2Rldi9udWxsCisrKyBiL1RhYmxlcy5icmFpbGxlYmFjay9odC93YXZlLmt0YgpAQCAtMCwwICsxLDQ5IEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisjICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorIworIyBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisjCisjIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisjCisjIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyMgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorIyBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyMKKyMgV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworIworIyBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKwordGl0bGUgSGFuZHlUZWNoIEJyYWlsbGUgV2F2ZQorCitiaW5kIExlZnQgRldJTkxUCitiaW5kIFJpZ2h0IEZXSU5SVAorCisjT3ZlcnJpZGRlbiBieSBCcmFpbGxlQmFjay4KKyNiaW5kIFJvdXRpbmdLZXkgUk9VVEUKK2JpbmQgUm91dGluZ0tleSshUm91dGluZ0tleSBDTElQX0NPUFkKKworYmluZCBMZWZ0K1JvdXRpbmdLZXkgUFJJTkRFTlQKK2JpbmQgUmlnaHQrUm91dGluZ0tleSBOWElOREVOVAorCitiaW5kIExlZnQrUmlnaHQgUEFTVEUKKworaW5jbHVkZSBkb3RzLmt0aQorCitiaW5kIEVzY2FwZStTcGFjZStSZXR1cm4gSU5GTworCithc3NpZ24gYnJhaWxsZU9uIEIxK0I4K1JpZ2h0Cithc3NpZ24gYnJhaWxsZU9mZiBCMStCOCtMZWZ0Cithc3NpZ24gc3BhY2UgU3BhY2UKK2Fzc2lnbiBlbnRlciBSZXR1cm4KK2luY2x1ZGUgaW5wdXQua3RpCisKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEJyYWlsbGVCYWNrIEJpbmRpbmdzICMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjIFJPVVRFKzEyOCBpcyBhIGxvbmctcHJlc3Mgb24gdGhlIHJvdXRpbmcga2V5LgorYmluZCBSb3V0aW5nS2V5IFJPVVRFOlJPVVRFKzEyOApkaWZmIC0tZ2l0IGEvVGFibGVzLmJyYWlsbGViYWNrL2h3L0I4MC5rdGIgYi9UYWJsZXMuYnJhaWxsZWJhY2svaHcvQjgwLmt0YgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MWJiMjA1Ci0tLSAvZGV2L251bGwKKysrIGIvVGFibGVzLmJyYWlsbGViYWNrL2h3L0I4MC5rdGIKQEAgLTAsMCArMSwyMiBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorIyAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyMKKyMgQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorIworIyBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorIworIyBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisjIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyMgbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisjCisjIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK3RpdGxlIEh1bWFuV2FyZSBCcmFpbGxpYW50IEIgODAKKworaW5jbHVkZSB0aHVtYi5rdGkKK2luY2x1ZGUgY29tbWFuZC5rdGkKZGlmZiAtLWdpdCBhL1RhYmxlcy5icmFpbGxlYmFjay9ody9CSTE0Lmt0YiBiL1RhYmxlcy5icmFpbGxlYmFjay9ody9CSTE0Lmt0YgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMWYyYTAzCi0tLSAvZGV2L251bGwKKysrIGIvVGFibGVzLmJyYWlsbGViYWNrL2h3L0JJMTQua3RiCkBAIC0wLDAgKzEsMjQgQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyMgICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisjCisjIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyMKKyMgQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCit0aXRsZSBIdW1hbldhcmUgQnJhaWxsaWFudCBCSSAxNAorCitpbmNsdWRlIHRodW1iLmt0aQoraW5jbHVkZSBicmFpbGxlLmt0aQoraW5jbHVkZSBqb3lzdGljay5rdGkKK2luY2x1ZGUgcm91dGluZy5rdGkKZGlmZiAtLWdpdCBhL1RhYmxlcy5icmFpbGxlYmFjay9ody9CSTIwWC5rdGIgYi9UYWJsZXMuYnJhaWxsZWJhY2svaHcvQkkyMFgua3RiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI0ZTcxMDcKLS0tIC9kZXYvbnVsbAorKysgYi9UYWJsZXMuYnJhaWxsZWJhY2svaHcvQkkyMFgua3RiCkBAIC0wLDAgKzEsMjMgQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyMgICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisjCisjIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyMKKyMgQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCit0aXRsZSBIdW1hbldhcmUgQnJhaWxsaWFudCBCSSAyMFgKKworaW5jbHVkZSB0aHVtYi5rdGkKK2luY2x1ZGUgYnJhaWxsZS5rdGkKK2luY2x1ZGUgcm91dGluZy5rdGkKZGlmZiAtLWdpdCBhL1RhYmxlcy5icmFpbGxlYmFjay9ody9CSTMyLmt0YiBiL1RhYmxlcy5icmFpbGxlYmFjay9ody9CSTMyLmt0YgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZDU0NTQwCi0tLSAvZGV2L251bGwKKysrIGIvVGFibGVzLmJyYWlsbGViYWNrL2h3L0JJMzIua3RiCkBAIC0wLDAgKzEsMjMgQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyMgICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisjCisjIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyMKKyMgQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCit0aXRsZSBIdW1hbldhcmUgQnJhaWxsaWFudCBCSSAzMgorCitpbmNsdWRlIHRodW1iLmt0aQoraW5jbHVkZSBicmFpbGxlLmt0aQoraW5jbHVkZSBjb21tYW5kLmt0aQpkaWZmIC0tZ2l0IGEvVGFibGVzLmJyYWlsbGViYWNrL2h3L0JJNDAua3RiIGIvVGFibGVzLmJyYWlsbGViYWNrL2h3L0JJNDAua3RiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIwNmFjYmYKLS0tIC9kZXYvbnVsbAorKysgYi9UYWJsZXMuYnJhaWxsZWJhY2svaHcvQkk0MC5rdGIKQEAgLTAsMCArMSwyMyBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorIyAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyMKKyMgQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorIworIyBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorIworIyBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisjIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyMgbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisjCisjIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK3RpdGxlIEh1bWFuV2FyZSBCcmFpbGxpYW50IEJJIDQwCisKK2luY2x1ZGUgdGh1bWIua3RpCitpbmNsdWRlIGJyYWlsbGUua3RpCitpbmNsdWRlIGNvbW1hbmQua3RpCmRpZmYgLS1naXQgYS9UYWJsZXMuYnJhaWxsZWJhY2svaHcvQkk0MFgua3RiIGIvVGFibGVzLmJyYWlsbGViYWNrL2h3L0JJNDBYLmt0YgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NTdmZmNiCi0tLSAvZGV2L251bGwKKysrIGIvVGFibGVzLmJyYWlsbGViYWNrL2h3L0JJNDBYLmt0YgpAQCAtMCwwICsxLDIzIEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisjICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorIworIyBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisjCisjIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisjCisjIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyMgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorIyBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyMKKyMgV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworIworIyBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKwordGl0bGUgSHVtYW5XYXJlIEJyYWlsbGlhbnQgQkkgNDBYCisKK2luY2x1ZGUgdGh1bWIua3RpCitpbmNsdWRlIGJyYWlsbGUua3RpCitpbmNsdWRlIGNvbW1hbmQua3RpCmRpZmYgLS1naXQgYS9UYWJsZXMuYnJhaWxsZWJhY2svaHcvQzIwLmt0YiBiL1RhYmxlcy5icmFpbGxlYmFjay9ody9DMjAua3RiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcwNmFjMjgKLS0tIC9kZXYvbnVsbAorKysgYi9UYWJsZXMuYnJhaWxsZWJhY2svaHcvQzIwLmt0YgpAQCAtMCwwICsxLDIzIEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisjICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorIworIyBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisjCisjIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisjCisjIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyMgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorIyBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyMKKyMgV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworIworIyBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKwordGl0bGUgQVBIIENoYW1lbGVvbiAyMAorCitpbmNsdWRlIHRodW1iLmt0aQoraW5jbHVkZSBicmFpbGxlLmt0aQoraW5jbHVkZSByb3V0aW5nLmt0aQpkaWZmIC0tZ2l0IGEvVGFibGVzLmJyYWlsbGViYWNrL2h3L000MC5rdGIgYi9UYWJsZXMuYnJhaWxsZWJhY2svaHcvTTQwLmt0YgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNWU1YmU5Ci0tLSAvZGV2L251bGwKKysrIGIvVGFibGVzLmJyYWlsbGViYWNrL2h3L000MC5rdGIKQEAgLTAsMCArMSwyMiBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorIyAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyMKKyMgQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorIworIyBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorIworIyBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisjIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyMgbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisjCisjIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK3RpdGxlIEFQSCBNYW50aXMgUTQwCisKK2luY2x1ZGUgdGh1bWIua3RpCitpbmNsdWRlIHJvdXRpbmcua3RpCmRpZmYgLS1naXQgYS9UYWJsZXMuYnJhaWxsZWJhY2svaHcvTkxTLmt0YiBiL1RhYmxlcy5icmFpbGxlYmFjay9ody9OTFMua3RiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMxYTQxYWEKLS0tIC9kZXYvbnVsbAorKysgYi9UYWJsZXMuYnJhaWxsZWJhY2svaHcvTkxTLmt0YgpAQCAtMCwwICsxLDIzIEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisjICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorIworIyBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisjCisjIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisjCisjIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyMgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorIyBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyMKKyMgV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworIworIyBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKwordGl0bGUgTkxTIGVSZWFkZXIKKworaW5jbHVkZSB0aHVtYi5rdGkKK2luY2x1ZGUgYnJhaWxsZS5rdGkKK2luY2x1ZGUgcm91dGluZy5rdGkKZGlmZiAtLWdpdCBhL1RhYmxlcy5icmFpbGxlYmFjay9ody9icmFpbGxlLmt0aSBiL1RhYmxlcy5icmFpbGxlYmFjay9ody9icmFpbGxlLmt0aQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MmY3ZjlkCi0tLSAvZGV2L251bGwKKysrIGIvVGFibGVzLmJyYWlsbGViYWNrL2h3L2JyYWlsbGUua3RpCkBAIC0wLDAgKzEsNDggQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyMgICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisjCisjIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyMKKyMgQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitub3RlIFRoZXJlJ3MgYW4gZWlnaHQta2V5IGJyYWlsbGUga2V5Ym9hcmQgbmVhciB0aGUgYmFjayBvZiB0aGUgdG9wLgorbm90ZSAqIEZyb20gbGVmdCB0byByaWdodCwgaXRzIGtleXMgYXJlOiBEb3Q3LCBEb3QzLCBEb3QyLCBEb3QxLCBEb3Q0LCBEb3Q1LCBEb3Q2LCBEb3Q4LgorCithc3NpZ24gY2hvcmQgU3BhY2UrCitpbmNsdWRlIC4uL2Nob3Jkcy5rdGkKKworbWFwIERvdDEgRE9UMQorbWFwIERvdDIgRE9UMgorbWFwIERvdDMgRE9UMworbWFwIERvdDQgRE9UNAorbWFwIERvdDUgRE9UNQorbWFwIERvdDYgRE9UNgorbWFwIERvdDcgRE9UNworbWFwIERvdDggRE9UOAorbWFwIFNwYWNlIFNQQUNFCittYXAgVGh1bWJMZWZ0IE1FVEEKK21hcCBUaHVtYlJpZ2h0IENPTlRST0wKKworYmluZCBTcGFjZStSb3V0aW5nS2V5IEtFWV9GVU5DVElPTgorYmluZCBUaHVtYkxlZnQrU3BhY2UrUm91dGluZ0tleSBLRVlfRlVOQ1RJT04rbWV0YQorYmluZCBUaHVtYlJpZ2h0K1NwYWNlK1JvdXRpbmdLZXkgS0VZX0ZVTkNUSU9OK2NvbnRyb2wKK2JpbmQgVGh1bWJMZWZ0K1RodW1iUmlnaHQrU3BhY2UrUm91dGluZ0tleSBLRVlfRlVOQ1RJT04rbWV0YStjb250cm9sCisKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEJyYWlsbGVCYWNrIEJpbmRpbmdzICMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCithc3NpZ24gY2hvcmQgU3BhY2UKK2luY2x1ZGUgLi4vYW5kcm9pZC1jaG9yZHMua3RpCmRpZmYgLS1naXQgYS9UYWJsZXMuYnJhaWxsZWJhY2svaHcvY29tbWFuZC5rdGkgYi9UYWJsZXMuYnJhaWxsZWJhY2svaHcvY29tbWFuZC5rdGkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDAwMjllYwotLS0gL2Rldi9udWxsCisrKyBiL1RhYmxlcy5icmFpbGxlYmFjay9ody9jb21tYW5kLmt0aQpAQCAtMCwwICsxLDIwIEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisjICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorIworIyBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisjCisjIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisjCisjIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyMgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorIyBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyMKKyMgV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworIworIyBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworaW5jbHVkZSAuLi9ibS9kaXNwbGF5Ni5rdGkKK2luY2x1ZGUgLi4vYm0vcm91dGluZzYua3RpCmRpZmYgLS1naXQgYS9UYWJsZXMuYnJhaWxsZWJhY2svaHcvam95c3RpY2sua3RpIGIvVGFibGVzLmJyYWlsbGViYWNrL2h3L2pveXN0aWNrLmt0aQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMTBjNzRjCi0tLSAvZGV2L251bGwKKysrIGIvVGFibGVzLmJyYWlsbGViYWNrL2h3L2pveXN0aWNrLmt0aQpAQCAtMCwwICsxLDg4IEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisjICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorIworIyBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisjCisjIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisjCisjIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyMgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorIyBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyMKKyMgV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworIworIyBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworbm90ZSBUaGVyZSdzIGEgZml2ZS13YXkgam95c3RpY2sgYmV0d2VlbiB0aGUgRG90MSBhbmQgRG90NCBrZXlzLgorbm90ZSAqIFRoZSBmb3VyIGRpcmVjdGlvbnMgYXJlIGludHVpdGl2ZWx5IG5hbWVkOiBVcCwgRG93biwgTGVmdCwgUmlnaHQuCitub3RlICogUHJlc3NpbmcgdGhlIGpveXN0aWNrIGlzIG5hbWVkOiBBY3Rpb24uCisKK2JpbmQgVXAgTE5VUAorYmluZCBEb3duIExORE4KK2JpbmQgTGVmdCBGV0lOTFQKK2JpbmQgUmlnaHQgRldJTlJUCitiaW5kIEFjdGlvbiBIT01FCisKK2JpbmQgRG90MStVcCBUT1AKK2JpbmQgRG90MStEb3duIEJPVAorYmluZCBEb3QxK0xlZnQgTE5CRUcKK2JpbmQgRG90MStSaWdodCBMTkVORAorYmluZCBEb3QxK0FjdGlvbiBCQUNLCisKK2JpbmQgRG90MitVcCBLRVlfQ1VSU09SX1VQCitiaW5kIERvdDIrRG93biBLRVlfQ1VSU09SX0RPV04KK2JpbmQgRG90MitMZWZ0IEtFWV9DVVJTT1JfTEVGVAorYmluZCBEb3QyK1JpZ2h0IEtFWV9DVVJTT1JfUklHSFQKK2JpbmQgRG90MitBY3Rpb24gS0VZX0RFTEVURQorCitiaW5kIERvdDMrVXAgS0VZX1BBR0VfVVAKK2JpbmQgRG90MytEb3duIEtFWV9QQUdFX0RPV04KK2JpbmQgRG90MytMZWZ0IEtFWV9IT01FCitiaW5kIERvdDMrUmlnaHQgS0VZX0VORAorYmluZCBEb3QzK0FjdGlvbiBLRVlfSU5TRVJUCisKK2JpbmQgRG90NCtVcCBQUlBST01QVAorYmluZCBEb3Q0K0Rvd24gTlhQUk9NUFQKK2JpbmQgRG90NCtMZWZ0IFBSUEdSUEgKK2JpbmQgRG90NCtSaWdodCBOWFBHUlBICitiaW5kIERvdDQrQWN0aW9uIENTUlRSSworCitiaW5kIERvdDUrVXAgUFJESUZMTgorYmluZCBEb3Q1K0Rvd24gTlhESUZMTgorYmluZCBEb3Q1K0xlZnQgRldJTkxUU0tJUAorYmluZCBEb3Q1K1JpZ2h0IEZXSU5SVFNLSVAKK2JpbmQgRG90NStBY3Rpb24gQ1NSVklTCisKK2JpbmQgRG90NitVcCBBVFRSVVAKK2JpbmQgRG90NitEb3duIEFUVFJETgorYmluZCBEb3Q2K0xlZnQgQ0hSTFQKK2JpbmQgRG90NitSaWdodCBDSFJSVAorYmluZCBEb3Q2K0FjdGlvbiBBVFRSVklTCisKK2JpbmQgRG90NytVcCBTQVlfQUJPVkUKK2JpbmQgRG90NytEb3duIFNBWV9CRUxPVworYmluZCBEb3Q3K0xlZnQgTVVURQorYmluZCBEb3Q3K1JpZ2h0IFNBWV9MSU5FCitiaW5kIERvdDcrQWN0aW9uIEFVVE9TUEVBSworCitiaW5kIERvdDgrVXAgU0FZX0xPVURFUgorYmluZCBEb3Q4K0Rvd24gU0FZX1NPRlRFUgorYmluZCBEb3Q4K0xlZnQgU0FZX1NMT1dFUgorYmluZCBEb3Q4K1JpZ2h0IFNBWV9GQVNURVIKK2JpbmQgRG90OCtBY3Rpb24gU1BLSE9NRQorCitiaW5kIFJvdXRpbmdLZXkrVXAgUFJJTkRFTlQKK2JpbmQgUm91dGluZ0tleStEb3duIE5YSU5ERU5UCitiaW5kIFJvdXRpbmdLZXkrTGVmdCBQUkRJRkNIQVIKK2JpbmQgUm91dGluZ0tleStSaWdodCBOWERJRkNIQVIKK2JpbmQgUm91dGluZ0tleStBY3Rpb24gREVTQ0NIQVIKKworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQnJhaWxsZUJhY2sgQmluZGluZ3MgIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCitiaW5kIEFjdGlvbiBST1VURTpST1VURSsxMjcKK2JpbmQgRG90NitBY3Rpb24gUk9VVEU6Uk9VVEUrMjU1CmRpZmYgLS1naXQgYS9UYWJsZXMuYnJhaWxsZWJhY2svaHcvb25lLmt0YiBiL1RhYmxlcy5icmFpbGxlYmFjay9ody9vbmUua3RiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRlMDBjMjcKLS0tIC9kZXYvbnVsbAorKysgYi9UYWJsZXMuYnJhaWxsZWJhY2svaHcvb25lLmt0YgpAQCAtMCwwICsxLDIzIEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisjICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorIworIyBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisjCisjIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisjCisjIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyMgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorIyBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyMKKyMgV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworIworIyBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKwordGl0bGUgSHVtYW5XYXJlIEJyYWlsbGVPbmUKKworaW5jbHVkZSB0aHVtYi5rdGkKK2luY2x1ZGUgYnJhaWxsZS5rdGkKK2luY2x1ZGUgcm91dGluZy5rdGkKZGlmZiAtLWdpdCBhL1RhYmxlcy5icmFpbGxlYmFjay9ody9yb3V0aW5nLmt0aSBiL1RhYmxlcy5icmFpbGxlYmFjay9ody9yb3V0aW5nLmt0aQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mODhiYzQ3Ci0tLSAvZGV2L251bGwKKysrIGIvVGFibGVzLmJyYWlsbGViYWNrL2h3L3JvdXRpbmcua3RpCkBAIC0wLDAgKzEsMjEgQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyMgICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisjCisjIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyMKKyMgQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitub3RlIFJvdXRpbmdLZXkgcmVmZXJzIHRvIGFueSBvZiB0aGUga2V5cyBpbW1lZGlhdGVseSBiZWhpbmQgdGhlIGJyYWlsbGUgY2VsbHMuCisKK2JpbmQgUm91dGluZ0tleSBST1VURQpkaWZmIC0tZ2l0IGEvVGFibGVzLmJyYWlsbGViYWNrL2h3L3RodW1iLmt0aSBiL1RhYmxlcy5icmFpbGxlYmFjay9ody90aHVtYi5rdGkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGFlMjE4NgotLS0gL2Rldi9udWxsCisrKyBiL1RhYmxlcy5icmFpbGxlYmFjay9ody90aHVtYi5rdGkKQEAgLTAsMCArMSw2OCBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorIyAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyMKKyMgQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorIworIyBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorIworIyBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisjIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyMgbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisjCisjIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK2Fzc2lnbkRlZmF1bHQgcHJldmlvdXMgVGh1bWJQcmV2aW91cworYXNzaWduRGVmYXVsdCBsZWZ0IFRodW1iTGVmdAorYXNzaWduRGVmYXVsdCByaWdodCBUaHVtYlJpZ2h0Cithc3NpZ25EZWZhdWx0IG5leHQgVGh1bWJOZXh0CisKK25vdGUgVGhlcmUgYXJlIGZvdXIgcmVjdGFuZ3VsYXIgdGh1bWIga2V5cyBvbiB0aGUgZnJvbnQuIEZyb20gbGVmdCB0byByaWdodDoKK25vdGUgKiBUaGUgb3V0ZXIgb25lcyBhcmUgbmFtZWQgVGh1bWJQcmV2aW91cyBhbmQgVGh1bWJOZXh0Lgorbm90ZSAqIFRoZSBpbm5lciBvbmVzIGFyZSBuYW1lZCBUaHVtYkxlZnQgYW5kIFRodW1iUmlnaHQuCitub3RlICogU29tZSBtb2RlbHMgaGF2ZSBhIHJvdW5kIGtleSBpbiB0aGUgbWlkZGxlIC0gaXQncyB0aGUgaW50ZXJuYWwgbWVudSBrZXkuCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIERlZmF1bHQgQmluZGluZ3MgIworIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworYmluZCBUaHVtYkxlZnQrVGh1bWJSaWdodCBIT01FCitiaW5kIFx7bGVmdH0gRldJTkxUCitiaW5kIFx7cmlnaHR9IEZXSU5SVAorYmluZCBce3ByZXZpb3VzfSBMTlVQCitiaW5kIFx7bmV4dH0gTE5ETgorCitiaW5kIFx7bGVmdH0rXHtwcmV2aW91c30gVE9QX0xFRlQKK2JpbmQgXHtsZWZ0fStce25leHR9IEJPVF9MRUZUCitiaW5kIFx7cmlnaHR9K1x7cHJldmlvdXN9IFBSRElGTE4KK2JpbmQgXHtyaWdodH0rXHtuZXh0fSBOWERJRkxOCisKK2JpbmQgVGh1bWJQcmV2aW91cytSb3V0aW5nS2V5IENMSVBfTkVXCitiaW5kIFRodW1iTGVmdCtSb3V0aW5nS2V5IENMSVBfQURECitiaW5kIFx7cmlnaHR9K1JvdXRpbmdLZXkgQ09QWV9MSU5FCitiaW5kIFx7bmV4dH0rUm91dGluZ0tleSBDT1BZX1JFQ1QKK2JpbmQgVGh1bWJQcmV2aW91cytUaHVtYk5leHQgUEFTVEUKKworCisjIyMjIyMjIyMjIyMjIyMjIworIyBNZW51IEJpbmRpbmdzICMKKyMjIyMjIyMjIyMjIyMjIyMjCisKK2NvbnRleHQgbWVudQorCitiaW5kIFx7bGVmdH0gRldJTkxUCitiaW5kIFx7cmlnaHR9IEZXSU5SVAorYmluZCBce3ByZXZpb3VzfSBNRU5VX1BSRVZfSVRFTQorYmluZCBce25leHR9IE1FTlVfTkVYVF9JVEVNCitiaW5kIFx7bGVmdH0rXHtwcmV2aW91c30gTUVOVV9GSVJTVF9JVEVNCitiaW5kIFx7bGVmdH0rXHtuZXh0fSBNRU5VX0xBU1RfSVRFTQorYmluZCBce3JpZ2h0fStce3ByZXZpb3VzfSBNRU5VX1BSRVZfU0VUVElORworYmluZCBce3JpZ2h0fStce25leHR9IE1FTlVfTkVYVF9TRVRUSU5HCitiaW5kIFRodW1iTGVmdCtUaHVtYlJpZ2h0IFBSRUZNRU5VCitiaW5kIFRodW1iTGVmdCtUaHVtYlJpZ2h0K1RodW1iUHJldmlvdXMgUFJFRkxPQUQKK2JpbmQgVGh1bWJMZWZ0K1RodW1iUmlnaHQrVGh1bWJOZXh0IFBSRUZTQVZFCisKZGlmZiAtLWdpdCBhL1RhYmxlcy5icmFpbGxlYmFjay9ody90aHVtYl9sZWdhY3kua3RpIGIvVGFibGVzLmJyYWlsbGViYWNrL2h3L3RodW1iX2xlZ2FjeS5rdGkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzRiMGNmMgotLS0gL2Rldi9udWxsCisrKyBiL1RhYmxlcy5icmFpbGxlYmFjay9ody90aHVtYl9sZWdhY3kua3RpCkBAIC0wLDAgKzEsMjcgQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyMgICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisjCisjIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyMKKyMgQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjIElmIHlvdSdkIGxpa2UgdG8gaGF2ZSB0aGUgb2xkIChwcmUtNi40KSB0aHVtYiBrZXkgYmluZGluZ3MgdGhlbgorIyBjb3B5IHRoaXMgZmlsZSBpbnRvIHRoZSB1c2VyIGN1c3RvbWl6YXRpb25zIGRpcmVjdG9yeSBsaWtlIHRoaXM6CisjIGNwIHRodW1iX2xlZ2FjeS5rdGkgL2V0Yy94ZGcvYnJsdHR5L3RodW1iLmt0aQorCithc3NpZ24gcHJldmlvdXMgVGh1bWJMZWZ0Cithc3NpZ24gbGVmdCBUaHVtYlByZXZpb3VzCithc3NpZ24gcmlnaHQgVGh1bWJOZXh0Cithc3NpZ24gbmV4dCBUaHVtYlJpZ2h0CitpbmNsdWRlIHRodW1iLmt0aQpkaWZmIC0tZ2l0IGEvVGFibGVzLmJyYWlsbGViYWNrL2h3L3RvdWNoLmt0YiBiL1RhYmxlcy5icmFpbGxlYmFjay9ody90b3VjaC5rdGIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjBlOTRmNAotLS0gL2Rldi9udWxsCisrKyBiL1RhYmxlcy5icmFpbGxlYmFjay9ody90b3VjaC5rdGIKQEAgLTAsMCArMSwyMyBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorIyAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyMKKyMgQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorIworIyBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorIworIyBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisjIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyMgbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisjCisjIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK3RpdGxlIEh1bWFuV2FyZSBCcmFpbGxlTm90ZSBUb3VjaAorCitpbmNsdWRlIHRodW1iLmt0aQoraW5jbHVkZSBicmFpbGxlLmt0aQoraW5jbHVkZSByb3V0aW5nLmt0aQpkaWZmIC0tZ2l0IGEvVGFibGVzLmJyYWlsbGViYWNrL21lbnUua3RpIGIvVGFibGVzLmJyYWlsbGViYWNrL21lbnUua3RpCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc4MzJmYzgKLS0tIC9kZXYvbnVsbAorKysgYi9UYWJsZXMuYnJhaWxsZWJhY2svbWVudS5rdGkKQEAgLTAsMCArMSwzMiBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorIyAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyMKKyMgQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorIworIyBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorIworIyBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisjIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyMgbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisjCisjIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK2NvbnRleHQgbWVudQorCitiaW5kIERvdDEgTUVOVV9QUkVWX0lURU0KK2JpbmQgRG90NCBNRU5VX05FWFRfSVRFTQorCitiaW5kIERvdDIgTUVOVV9GSVJTVF9JVEVNCitiaW5kIERvdDUgTUVOVV9MQVNUX0lURU0KKworYmluZCBEb3QzIE1FTlVfUFJFVl9TRVRUSU5HCitiaW5kIERvdDYgTUVOVV9ORVhUX1NFVFRJTkcKKworYmluZCBEb3Q3IE1FTlVfUFJFVl9MRVZFTAorYmluZCBEb3Q4IFBSRUZNRU5VCisKZGlmZiAtLWdpdCBhL1RhYmxlcy5icmFpbGxlYmFjay9uYXYua3RpIGIvVGFibGVzLmJyYWlsbGViYWNrL25hdi5rdGkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTRhZDY5NQotLS0gL2Rldi9udWxsCisrKyBiL1RhYmxlcy5icmFpbGxlYmFjay9uYXYua3RpCkBAIC0wLDAgKzEsODggQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyMgICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisjCisjIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyMKKyMgQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitiaW5kIFVwIExOVVAKK2JpbmQgRG93biBMTkROCitiaW5kIExlZnQgRldJTkxUCitiaW5kIFJpZ2h0IEZXSU5SVAorCitiaW5kIERvdDQrVXAgVE9QCitiaW5kIERvdDQrRG93biBCT1QKK2JpbmQgRG90NCtMZWZ0IExOQkVHCitiaW5kIERvdDQrUmlnaHQgTE5FTkQKKworYmluZCBEb3Q1K1VwIFBSRElGTE4KK2JpbmQgRG90NStEb3duIE5YRElGTE4KK2JpbmQgRG90NStMZWZ0IEZXSU5MVFNLSVAKK2JpbmQgRG90NStSaWdodCBGV0lOUlRTS0lQCisKK2JpbmQgRG90NitVcCBBVFRSVVAKK2JpbmQgRG90NitEb3duIEFUVFJETgorYmluZCBEb3Q2K0xlZnQgQ0hSTFQKK2JpbmQgRG90NitSaWdodCBDSFJSVAorCitCaW5kIERvdDQrRG90NitVcCBQUlBHUlBICitCaW5kIERvdDQrRG90NitEb3duIE5YUEdSUEgKK0JpbmQgRG90NCtEb3Q2K0xlZnQgUFJQUk9NUFQKK0JpbmQgRG90NCtEb3Q2K1JpZ2h0IE5YUFJPTVBUCisKK0JpbmQgRG90NCtEb3Q1K0RvdDYrVXAgUFJFRk1FTlUKK0JpbmQgRG90NCtEb3Q1K0RvdDYrRG93biBUSU1FCitCaW5kIERvdDQrRG90NStEb3Q2K0xlZnQgUFJFRkxPQUQKK0JpbmQgRG90NCtEb3Q1K0RvdDYrUmlnaHQgUFJFRlNBVkUKKworQmluZCBEb3Q0K0RvdDUrVXAgRlJFRVpFCitCaW5kIERvdDQrRG90NStEb3duIERJU1BNRAorQmluZCBEb3Q0K0RvdDUrTGVmdCBDT01QQlJMNgorQmluZCBEb3Q0K0RvdDUrUmlnaHQgQ09OVFJBQ1RFRAorCitCaW5kIERvdDUrRG90NitVcCBQUlNFQVJDSAorQmluZCBEb3Q1K0RvdDYrRG93biBOWFNFQVJDSAorQmluZCBEb3Q1K0RvdDYrTGVmdCBTV0lUQ0hWVF9QUkVWCitCaW5kIERvdDUrRG90NitSaWdodCBTV0lUQ0hWVF9ORVhUCisKK2JpbmQgRG90MStVcCBLRVlfQ1VSU09SX1VQCitiaW5kIERvdDErRG93biBLRVlfQ1VSU09SX0RPV04KK2JpbmQgRG90MStMZWZ0IEtFWV9DVVJTT1JfTEVGVAorYmluZCBEb3QxK1JpZ2h0IEtFWV9DVVJTT1JfUklHSFQKKworYmluZCBEb3QyK1VwIEtFWV9QQUdFX1VQCitiaW5kIERvdDIrRG93biBLRVlfUEFHRV9ET1dOCitiaW5kIERvdDIrTGVmdCBLRVlfSE9NRQorYmluZCBEb3QyK1JpZ2h0IEtFWV9FTkQKKworYmluZCBEb3QzK1VwIEtFWV9FU0NBUEUKK2JpbmQgRG90MytEb3duIEtFWV9UQUIKK2JpbmQgRG90MytMZWZ0IEtFWV9ERUxFVEUKK2JpbmQgRG90MytSaWdodCBLRVlfSU5TRVJUCisKK2JpbmQgRG90MStEb3QyK1VwIFNBWV9BQk9WRQorYmluZCBEb3QxK0RvdDIrRG93biBTQVlfQkVMT1cKK2JpbmQgRG90MStEb3QyK0xlZnQgTVVURQorYmluZCBEb3QxK0RvdDIrUmlnaHQgU0FZX0xJTkUKKworYmluZCBEb3QyK0RvdDMrVXAgU0FZX0xPVURFUgorYmluZCBEb3QyK0RvdDMrRG93biBTQVlfU09GVEVSCitiaW5kIERvdDIrRG90MytMZWZ0IFNBWV9TTE9XRVIKK2JpbmQgRG90MitEb3QzK1JpZ2h0IFNBWV9GQVNURVIKKworYmluZCBEb3QxK0RvdDMrVXAgQVVUT1NQRUFLCitiaW5kIERvdDErRG90MytEb3duIFNQS0hPTUUKK2JpbmQgRG90MStEb3QzK0xlZnQgU1BFQUtfSU5ERU5UCitiaW5kIERvdDErRG90MytSaWdodCBTQVlfQUxMCisKZGlmZiAtLWdpdCBhL1RhYmxlcy5icmFpbGxlYmFjay9wbS8yZF9sLmt0YiBiL1RhYmxlcy5icmFpbGxlYmFjay9wbS8yZF9sLmt0YgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41M2I4ZjRmCi0tLSAvZGV2L251bGwKKysrIGIvVGFibGVzLmJyYWlsbGViYWNrL3BtLzJkX2wua3RiCkBAIC0wLDAgKzEsMjIgQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyMgICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisjCisjIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyMKKyMgQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCit0aXRsZSBQYXBlbm1laWVyIEJyYWlsbGVYIDJEIExpdGUgKHBsdXMpCisKK2Fzc2lnbiBzdGF0dXNLZXlzIDEzCitpbmNsdWRlIGZyb250OS5rdGkKZGlmZiAtLWdpdCBhL1RhYmxlcy5icmFpbGxlYmFjay9wbS8yZF9zLmt0YiBiL1RhYmxlcy5icmFpbGxlYmFjay9wbS8yZF9zLmt0YgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMDViZjZkCi0tLSAvZGV2L251bGwKKysrIGIvVGFibGVzLmJyYWlsbGViYWNrL3BtLzJkX3Mua3RiCkBAIC0wLDAgKzEsMjIgQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyMgICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisjCisjIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyMKKyMgQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCit0aXRsZSBQYXBlbm1laWVyIEJyYWlsbGVYIDJEIFNjcmVlbiBTb2Z0CisKK2Fzc2lnbiBzdGF0dXNLZXlzIDIyCitpbmNsdWRlIGZyb250MTMua3RpCmRpZmYgLS1naXQgYS9UYWJsZXMuYnJhaWxsZWJhY2svcG0vYmFyLmt0aSBiL1RhYmxlcy5icmFpbGxlYmFjay9wbS9iYXIua3RpCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjllOGJlNjEKLS0tIC9kZXYvbnVsbAorKysgYi9UYWJsZXMuYnJhaWxsZWJhY2svcG0vYmFyLmt0aQpAQCAtMCwwICsxLDk4IEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisjICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorIworIyBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisjCisjIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisjCisjIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyMgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorIyBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyMKKyMgV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworIworIyBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIyBUaGlzIGtleSBzdWJ0YWJsZSBpcyBmb3IgUGFwZW5tZWllciBkaXNwbGF5cyB3aGljaCBoYXZlIGFuIEVhc3kgQWNjZXNzIEJhci4KKworbm90ZSBUaGUgbG9uZyBrZXkgb24gdGhlIGZyb250IGlzIHRoZSBFYXN5IEFjY2VzcyBCYXIuCisKK2lmVmFyIGhhc1NpbmdsZVN0ZXBCYXIKKyAgbm90ZSAqIEl0IGNhbiBvbmx5IGJlIG1vdmVkIG9uZSBzdGVwIGluIGVhY2ggZGlyZWN0aW9uIChsZWZ0LCByaWdodCwgdXAsIGRvd24pLgorICBub3RlICogVG8gZW11bGF0ZSB0aGUgc2Vjb25kIHN0ZXAsIGFsc28gcHJlc3MgYW55IG9mIHRoZSBsb3dlciByb3V0aW5nIGtleXMKKyAgbm90ZSAqICh0aG9zZSBpbiB0aGUgcm93IGp1c3QgYmVoaW5kIHRoZSB0ZXh0IGNlbGxzKS4KK2Vsc2UKKyAgbm90ZSAqIEl0IGNhbiBiZSBtb3ZlZCB0d28gc3RlcHMgaW4gZWFjaCBkaXJlY3Rpb24gKGxlZnQsIHJpZ2h0LCB1cCwgZG93bikuCitlbmRJZgorCitiaW5kIEJhclVwMSBMTlVQCitiaW5kIEJhckRvd24xIExORE4KK2JpbmQgQmFyTGVmdDEgRldJTkxUCitiaW5kIEJhclJpZ2h0MSBGV0lOUlQKKworYmluZCBCYXJVcDIgVE9QCitiaW5kIEJhckRvd24yIEJPVAorYmluZCBCYXJMZWZ0MiBMTkJFRworYmluZCBCYXJSaWdodDIgTE5FTkQKKworaGlkZSBvbgorYmluZCBCYXJVcDErQmFyVXAyIFRPUAorYmluZCBCYXJEb3duMStCYXJEb3duMiBCT1QKK2JpbmQgQmFyTGVmdDErQmFyTGVmdDIgTE5CRUcKK2JpbmQgQmFyUmlnaHQxK0JhclJpZ2h0MiBMTkVORAoraGlkZSBvZmYKKworaW5jbHVkZSByb3V0aW5nLmt0aQorCitpZk5vdFZhciBoYXNTaW5nbGVTdGVwQmFyCisgIGJpbmQgQmFyVXAxK1JvdXRpbmdLZXkxIFBSSU5ERU5UCisgIGJpbmQgQmFyRG93bjErUm91dGluZ0tleTEgTlhJTkRFTlQKKyAgYmluZCBCYXJMZWZ0MStSb3V0aW5nS2V5MSBDTElQX0FERAorICBiaW5kIEJhclJpZ2h0MStSb3V0aW5nS2V5MSBDT1BZX0xJTkUKKworICBiaW5kIEJhclVwMitSb3V0aW5nS2V5MSBTRVRMRUZUCisgIGJpbmQgQmFyRG93bjIrUm91dGluZ0tleTEgREVTQ0NIQVIKKyAgYmluZCBCYXJMZWZ0MitSb3V0aW5nS2V5MSBDTElQX05FVworICBiaW5kIEJhclJpZ2h0MitSb3V0aW5nS2V5MSBDT1BZX1JFQ1QKKworICBoaWRlIG9uCisgIGJpbmQgQmFyVXAxK0JhclVwMitSb3V0aW5nS2V5MSBTRVRMRUZUCisgIGJpbmQgQmFyRG93bjErQmFyRG93bjIrUm91dGluZ0tleTEgREVTQ0NIQVIKKyAgYmluZCBCYXJMZWZ0MStCYXJMZWZ0MitSb3V0aW5nS2V5MSBDTElQX05FVworICBiaW5kIEJhclJpZ2h0MStCYXJSaWdodDIrUm91dGluZ0tleTEgQ09QWV9SRUNUCisgIGhpZGUgb2ZmCitlbmRJZgorCithc3NpZ24gdG9nZ2xlT2ZmIEJhckxlZnQxCithc3NpZ24gdG9nZ2xlT24gQmFyUmlnaHQxCitpbmNsdWRlIHN0YXR1c1x7c3RhdHVzS2V5c30ua3RpCisKK2luY2x1ZGUga2V5cy5rdGkKKworaWZLZXkgUm91dGluZ0tleTIKK2VuZElmCisKK2lmS2V5IFN0YXR1c0tleTIgYmluZCAhU3RhdHVzS2V5MiBHT1RPTElORQorCisKK2NvbnRleHQgbWVudQorYmluZCBCYXJVcDEgTUVOVV9QUkVWX0lURU0KK2JpbmQgQmFyRG93bjEgTUVOVV9ORVhUX0lURU0KK2JpbmQgQmFyVXAyIE1FTlVfRklSU1RfSVRFTQorYmluZCBCYXJEb3duMiBNRU5VX0xBU1RfSVRFTQorYmluZCBCYXJMZWZ0MSBNRU5VX1BSRVZfU0VUVElORworYmluZCBCYXJSaWdodDEgTUVOVV9ORVhUX1NFVFRJTkcKK2JpbmQgQmFyTGVmdDIgUFJFRkxPQUQKK2JpbmQgQmFyUmlnaHQyIFBSRUZTQVZFCisKK2hpZGUgb24KK2JpbmQgQmFyVXAxK0JhclVwMiBNRU5VX0ZJUlNUX0lURU0KK2JpbmQgQmFyRG93bjErQmFyRG93bjIgTUVOVV9MQVNUX0lURU0KK2JpbmQgQmFyTGVmdDErQmFyTGVmdDIgUFJFRkxPQUQKK2JpbmQgQmFyUmlnaHQxK0JhclJpZ2h0MiBQUkVGU0FWRQoraGlkZSBvZmYKKworCmRpZmYgLS1naXQgYS9UYWJsZXMuYnJhaWxsZWJhY2svcG0vYy5rdGIgYi9UYWJsZXMuYnJhaWxsZWJhY2svcG0vYy5rdGIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWFlMDAzOQotLS0gL2Rldi9udWxsCisrKyBiL1RhYmxlcy5icmFpbGxlYmFjay9wbS9jLmt0YgpAQCAtMCwwICsxLDIyIEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisjICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorIworIyBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisjCisjIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisjCisjIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyMgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorIyBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyMKKyMgV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworIworIyBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKwordGl0bGUgUGFwZW5tZWllciBCcmFpbGxlWCBDb21wYWN0L1RpbnkKKworYXNzaWduIHN0YXR1c0tleXMgMAoraW5jbHVkZSBmcm9udDkua3RpCmRpZmYgLS1naXQgYS9UYWJsZXMuYnJhaWxsZWJhY2svcG0vY180ODYua3RiIGIvVGFibGVzLmJyYWlsbGViYWNrL3BtL2NfNDg2Lmt0YgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40Mzg3MTgyCi0tLSAvZGV2L251bGwKKysrIGIvVGFibGVzLmJyYWlsbGViYWNrL3BtL2NfNDg2Lmt0YgpAQCAtMCwwICsxLDIyIEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisjICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorIworIyBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisjCisjIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisjCisjIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyMgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorIyBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyMKKyMgV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworIworIyBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKwordGl0bGUgUGFwZW5tZWllciBCcmFpbGxlWCBDb21wYWN0IDQ4NgorCithc3NpZ24gc3RhdHVzS2V5cyAwCitpbmNsdWRlIGZyb250OS5rdGkKZGlmZiAtLWdpdCBhL1RhYmxlcy5icmFpbGxlYmFjay9wbS9lbDJkXzgwcy5rdGIgYi9UYWJsZXMuYnJhaWxsZWJhY2svcG0vZWwyZF84MHMua3RiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJiMDU1NDAKLS0tIC9kZXYvbnVsbAorKysgYi9UYWJsZXMuYnJhaWxsZWJhY2svcG0vZWwyZF84MHMua3RiCkBAIC0wLDAgKzEsMjIgQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyMgICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisjCisjIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyMKKyMgQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCit0aXRsZSBQYXBlbm1laWVyIEJyYWlsbGVYIEVMMkQtODBzCisKK2Fzc2lnbiBzdGF0dXNLZXlzIDIwCitpbmNsdWRlIGJhci5rdGkKZGlmZiAtLWdpdCBhL1RhYmxlcy5icmFpbGxlYmFjay9wbS9lbDQwYy5rdGIgYi9UYWJsZXMuYnJhaWxsZWJhY2svcG0vZWw0MGMua3RiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgxZjMwM2YKLS0tIC9kZXYvbnVsbAorKysgYi9UYWJsZXMuYnJhaWxsZWJhY2svcG0vZWw0MGMua3RiCkBAIC0wLDAgKzEsMjMgQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyMgICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisjCisjIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyMKKyMgQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCit0aXRsZSBQYXBlbm1laWVyIEJyYWlsbGVYIEVMNDBjCisKK2Fzc2lnbiBoYXNTaW5nbGVTdGVwQmFyCithc3NpZ24gc3RhdHVzS2V5cyAwCitpbmNsdWRlIGJhci5rdGkKZGlmZiAtLWdpdCBhL1RhYmxlcy5icmFpbGxlYmFjay9wbS9lbDQwcy5rdGIgYi9UYWJsZXMuYnJhaWxsZWJhY2svcG0vZWw0MHMua3RiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjljNzQzYTQKLS0tIC9kZXYvbnVsbAorKysgYi9UYWJsZXMuYnJhaWxsZWJhY2svcG0vZWw0MHMua3RiCkBAIC0wLDAgKzEsMjIgQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyMgICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisjCisjIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyMKKyMgQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCit0aXRsZSBQYXBlbm1laWVyIEJyYWlsbGVYIEVMNDBzCisKK2Fzc2lnbiBzdGF0dXNLZXlzIDAKK2luY2x1ZGUgYmFyLmt0aQpkaWZmIC0tZ2l0IGEvVGFibGVzLmJyYWlsbGViYWNrL3BtL2VsNjBjLmt0YiBiL1RhYmxlcy5icmFpbGxlYmFjay9wbS9lbDYwYy5rdGIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjllOGM5NwotLS0gL2Rldi9udWxsCisrKyBiL1RhYmxlcy5icmFpbGxlYmFjay9wbS9lbDYwYy5rdGIKQEAgLTAsMCArMSwyMyBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorIyAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyMKKyMgQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorIworIyBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorIworIyBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisjIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyMgbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisjCisjIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK3RpdGxlIFBhcGVubWVpZXIgQnJhaWxsZVggRUw2MGMKKworYXNzaWduIGhhc1NpbmdsZVN0ZXBCYXIKK2Fzc2lnbiBzdGF0dXNLZXlzIDAKK2luY2x1ZGUgYmFyLmt0aQpkaWZmIC0tZ2l0IGEvVGFibGVzLmJyYWlsbGViYWNrL3BtL2VsNjZzLmt0YiBiL1RhYmxlcy5icmFpbGxlYmFjay9wbS9lbDY2cy5rdGIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzNjZmI2MQotLS0gL2Rldi9udWxsCisrKyBiL1RhYmxlcy5icmFpbGxlYmFjay9wbS9lbDY2cy5rdGIKQEAgLTAsMCArMSwyMiBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorIyAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyMKKyMgQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorIworIyBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorIworIyBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisjIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyMgbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisjCisjIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK3RpdGxlIFBhcGVubWVpZXIgQnJhaWxsZVggRUw2NnMKKworYXNzaWduIHN0YXR1c0tleXMgMAoraW5jbHVkZSBiYXIua3RpCmRpZmYgLS1naXQgYS9UYWJsZXMuYnJhaWxsZWJhY2svcG0vZWw3MHMua3RiIGIvVGFibGVzLmJyYWlsbGViYWNrL3BtL2VsNzBzLmt0YgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OTQ2NzEzCi0tLSAvZGV2L251bGwKKysrIGIvVGFibGVzLmJyYWlsbGViYWNrL3BtL2VsNzBzLmt0YgpAQCAtMCwwICsxLDIyIEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisjICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorIworIyBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisjCisjIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisjCisjIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyMgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorIyBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyMKKyMgV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworIworIyBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKwordGl0bGUgUGFwZW5tZWllciBCcmFpbGxlWCBFTDcwcworCithc3NpZ24gc3RhdHVzS2V5cyAwCitpbmNsdWRlIGJhci5rdGkKZGlmZiAtLWdpdCBhL1RhYmxlcy5icmFpbGxlYmFjay9wbS9lbDgwX2lpLmt0YiBiL1RhYmxlcy5icmFpbGxlYmFjay9wbS9lbDgwX2lpLmt0YgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mODVkMjI5Ci0tLSAvZGV2L251bGwKKysrIGIvVGFibGVzLmJyYWlsbGViYWNrL3BtL2VsODBfaWkua3RiCkBAIC0wLDAgKzEsMjIgQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyMgICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisjCisjIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyMKKyMgQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCit0aXRsZSBQYXBlbm1laWVyIEJyYWlsbGVYIEVMODAtSUkKKworYXNzaWduIHN0YXR1c0tleXMgMgoraW5jbHVkZSBiYXIua3RpCmRpZmYgLS1naXQgYS9UYWJsZXMuYnJhaWxsZWJhY2svcG0vZWw4MGMua3RiIGIvVGFibGVzLmJyYWlsbGViYWNrL3BtL2VsODBjLmt0YgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZWNiYWI5Ci0tLSAvZGV2L251bGwKKysrIGIvVGFibGVzLmJyYWlsbGViYWNrL3BtL2VsODBjLmt0YgpAQCAtMCwwICsxLDIzIEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisjICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorIworIyBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisjCisjIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisjCisjIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyMgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorIyBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyMKKyMgV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworIworIyBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKwordGl0bGUgUGFwZW5tZWllciBCcmFpbGxlWCBFTDgwYworCithc3NpZ24gaGFzU2luZ2xlU3RlcEJhcgorYXNzaWduIHN0YXR1c0tleXMgMAoraW5jbHVkZSBiYXIua3RpCmRpZmYgLS1naXQgYS9UYWJsZXMuYnJhaWxsZWJhY2svcG0vZWw4MHMua3RiIGIvVGFibGVzLmJyYWlsbGViYWNrL3BtL2VsODBzLmt0YgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NGI2MWJjCi0tLSAvZGV2L251bGwKKysrIGIvVGFibGVzLmJyYWlsbGViYWNrL3BtL2VsODBzLmt0YgpAQCAtMCwwICsxLDIyIEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisjICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorIworIyBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisjCisjIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisjCisjIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyMgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorIyBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyMKKyMgV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworIworIyBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKwordGl0bGUgUGFwZW5tZWllciBCcmFpbGxlWCBFTDgwcworCithc3NpZ24gc3RhdHVzS2V5cyAwCitpbmNsdWRlIGJhci5rdGkKZGlmZiAtLWdpdCBhL1RhYmxlcy5icmFpbGxlYmFjay9wbS9lbF8yZF80MC5rdGIgYi9UYWJsZXMuYnJhaWxsZWJhY2svcG0vZWxfMmRfNDAua3RiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEyYjNiODMKLS0tIC9kZXYvbnVsbAorKysgYi9UYWJsZXMuYnJhaWxsZWJhY2svcG0vZWxfMmRfNDAua3RiCkBAIC0wLDAgKzEsMjMgQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyMgICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisjCisjIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyMKKyMgQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCit0aXRsZSBQYXBlbm1laWVyIEJyYWlsbGVYIEVMIDJELTQwCisKK2Fzc2lnbiBzdGF0dXNLZXlzIDEzCitpbmNsdWRlIGJhci5rdGkKK2luY2x1ZGUgc3dpdGNoZXMua3RpCmRpZmYgLS1naXQgYS9UYWJsZXMuYnJhaWxsZWJhY2svcG0vZWxfMmRfNjYua3RiIGIvVGFibGVzLmJyYWlsbGViYWNrL3BtL2VsXzJkXzY2Lmt0YgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZTJlM2FmCi0tLSAvZGV2L251bGwKKysrIGIvVGFibGVzLmJyYWlsbGViYWNrL3BtL2VsXzJkXzY2Lmt0YgpAQCAtMCwwICsxLDIzIEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisjICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorIworIyBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisjCisjIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisjCisjIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyMgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorIyBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyMKKyMgV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworIworIyBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKwordGl0bGUgUGFwZW5tZWllciBCcmFpbGxlWCBFTCAyRC02NgorCithc3NpZ24gc3RhdHVzS2V5cyAxMworaW5jbHVkZSBiYXIua3RpCitpbmNsdWRlIHN3aXRjaGVzLmt0aQpkaWZmIC0tZ2l0IGEvVGFibGVzLmJyYWlsbGViYWNrL3BtL2VsXzJkXzgwLmt0YiBiL1RhYmxlcy5icmFpbGxlYmFjay9wbS9lbF8yZF84MC5rdGIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2E1ZWNhOQotLS0gL2Rldi9udWxsCisrKyBiL1RhYmxlcy5icmFpbGxlYmFjay9wbS9lbF8yZF84MC5rdGIKQEAgLTAsMCArMSwyMyBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorIyAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyMKKyMgQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorIworIyBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorIworIyBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisjIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyMgbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisjCisjIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK3RpdGxlIFBhcGVubWVpZXIgQnJhaWxsZVggRUwgMkQtODAKKworYXNzaWduIHN0YXR1c0tleXMgMjAKK2luY2x1ZGUgYmFyLmt0aQoraW5jbHVkZSBzd2l0Y2hlcy5rdGkKZGlmZiAtLWdpdCBhL1RhYmxlcy5icmFpbGxlYmFjay9wbS9lbF80MF9wLmt0YiBiL1RhYmxlcy5icmFpbGxlYmFjay9wbS9lbF80MF9wLmt0YgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MjE0Njg4Ci0tLSAvZGV2L251bGwKKysrIGIvVGFibGVzLmJyYWlsbGViYWNrL3BtL2VsXzQwX3Aua3RiCkBAIC0wLDAgKzEsMjQgQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyMgICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisjCisjIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyMKKyMgQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCit0aXRsZSBQYXBlbm1laWVyIEJyYWlsbGVYIEVMIDQwIFAKKworYXNzaWduIG5vUmlnaHRLZXkKK2Fzc2lnbiBzdGF0dXNLZXlzIDAKK2luY2x1ZGUgYmFyLmt0aQoraW5jbHVkZSBzd2l0Y2hlcy5rdGkKZGlmZiAtLWdpdCBhL1RhYmxlcy5icmFpbGxlYmFjay9wbS9lbF84MC5rdGIgYi9UYWJsZXMuYnJhaWxsZWJhY2svcG0vZWxfODAua3RiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE5NTNkZGQKLS0tIC9kZXYvbnVsbAorKysgYi9UYWJsZXMuYnJhaWxsZWJhY2svcG0vZWxfODAua3RiCkBAIC0wLDAgKzEsMjMgQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyMgICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisjCisjIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyMKKyMgQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCit0aXRsZSBQYXBlbm1laWVyIEJyYWlsbGVYIEVMIDgwCisKK2Fzc2lnbiBzdGF0dXNLZXlzIDIKK2luY2x1ZGUgYmFyLmt0aQoraW5jbHVkZSBzd2l0Y2hlcy5rdGkKZGlmZiAtLWdpdCBhL1RhYmxlcy5icmFpbGxlYmFjay9wbS9lbGJfdHJfMjAua3RiIGIvVGFibGVzLmJyYWlsbGViYWNrL3BtL2VsYl90cl8yMC5rdGIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDFkY2JkNAotLS0gL2Rldi9udWxsCisrKyBiL1RhYmxlcy5icmFpbGxlYmFjay9wbS9lbGJfdHJfMjAua3RiCkBAIC0wLDAgKzEsMjIgQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyMgICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisjCisjIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyMKKyMgQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCit0aXRsZSBQYXBlbm1laWVyIEJyYWlsbGVYIEVsYmEgKFRyaW8gMjApCisKK2Fzc2lnbiBzdGF0dXNLZXlzIDAKK2luY2x1ZGUgYmFyLmt0aQpkaWZmIC0tZ2l0IGEvVGFibGVzLmJyYWlsbGViYWNrL3BtL2VsYl90cl8zMi5rdGIgYi9UYWJsZXMuYnJhaWxsZWJhY2svcG0vZWxiX3RyXzMyLmt0YgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOGJjMzcwCi0tLSAvZGV2L251bGwKKysrIGIvVGFibGVzLmJyYWlsbGViYWNrL3BtL2VsYl90cl8zMi5rdGIKQEAgLTAsMCArMSwyMiBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorIyAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyMKKyMgQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorIworIyBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorIworIyBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisjIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyMgbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisjCisjIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK3RpdGxlIFBhcGVubWVpZXIgQnJhaWxsZVggRWxiYSAoVHJpbyAzMikKKworYXNzaWduIHN0YXR1c0tleXMgMAoraW5jbHVkZSBiYXIua3RpCmRpZmYgLS1naXQgYS9UYWJsZXMuYnJhaWxsZWJhY2svcG0vZWxiYV8yMC5rdGIgYi9UYWJsZXMuYnJhaWxsZWJhY2svcG0vZWxiYV8yMC5rdGIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGRhZDBhMQotLS0gL2Rldi9udWxsCisrKyBiL1RhYmxlcy5icmFpbGxlYmFjay9wbS9lbGJhXzIwLmt0YgpAQCAtMCwwICsxLDI0IEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisjICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorIworIyBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisjCisjIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisjCisjIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyMgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorIyBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyMKKyMgV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworIworIyBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKwordGl0bGUgUGFwZW5tZWllciBCcmFpbGxlWCBFbGJhIDIwCisKK2Fzc2lnbiBrZXlFbXVsYXRpb24KK2Fzc2lnbiBzdGF0dXNLZXlzIDAKK2luY2x1ZGUgYmFyLmt0aQoraW5jbHVkZSBzd2l0Y2hlcy5rdGkKZGlmZiAtLWdpdCBhL1RhYmxlcy5icmFpbGxlYmFjay9wbS9lbGJhXzMyLmt0YiBiL1RhYmxlcy5icmFpbGxlYmFjay9wbS9lbGJhXzMyLmt0YgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMDZjMzVhCi0tLSAvZGV2L251bGwKKysrIGIvVGFibGVzLmJyYWlsbGViYWNrL3BtL2VsYmFfMzIua3RiCkBAIC0wLDAgKzEsMjQgQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyMgICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisjCisjIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyMKKyMgQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCit0aXRsZSBQYXBlbm1laWVyIEJyYWlsbGVYIEVsYmEgMzIKKworYXNzaWduIGtleUVtdWxhdGlvbgorYXNzaWduIHN0YXR1c0tleXMgMAoraW5jbHVkZSBiYXIua3RpCitpbmNsdWRlIHN3aXRjaGVzLmt0aQpkaWZmIC0tZ2l0IGEvVGFibGVzLmJyYWlsbGViYWNrL3BtL2Zyb250MTMua3RpIGIvVGFibGVzLmJyYWlsbGViYWNrL3BtL2Zyb250MTMua3RpCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgzZDAzMmYKLS0tIC9kZXYvbnVsbAorKysgYi9UYWJsZXMuYnJhaWxsZWJhY2svcG0vZnJvbnQxMy5rdGkKQEAgLTAsMCArMSwxNTEgQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyMgICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisjCisjIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyMKKyMgQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjIFRoaXMga2V5IHN1YnRhYmxlIGlzIGZvciBQYXBlbm1laWVyIGRpc3BsYXlzIHdoaWNoIGhhdmUgMTMgZnJvbnQga2V5cy4KK25vdGUgVGhlcmUgYXJlIDEzIGtleXMgb24gdGhlIGZyb250Lgorbm90ZSAqIFRoZSByZWN0YW5ndWxhciBrZXkgYXQgdGhlIGNlbnRlciBpcyBuYW1lZCBTaGlmdC4KK25vdGUgKiBUaGUgc3F1YXJlIGtleXMgaW1tZWRpYXRlbHkgdG8gaXRzIGxlZnQgYW5kIHJpZ2h0IGFyZSBuYW1lZCBIb21lIGFuZCBFbmQuCitub3RlICogVGhlIGxlZnQgYW5kIHJpZ2h0IGJhcnMgYXJlIG5hbWVkIFVwIGFuZCBEb3duLgorbm90ZSAqIFRoZSBmb3VyIHNxdWFyZSBrZXlzIGF0IHRoZSB2ZXJ5IGxlZnQgYXJlIG5hbWVkOiBEb3Q3LCBEb3QzLCBEb3QyLCBEb3QxLgorbm90ZSAqIFRoZSBmb3VyIHNxdWFyZSBrZXlzIGF0IHRoZSB2ZXJ5IHJpZ2h0IGFyZSBuYW1lZDogRG90NCwgRG90NSwgRG90NiwgRG90OC4KKworYmluZCAhU2hpZnQgSE9NRQorYmluZCAhSG9tZSBUT1AKK2JpbmQgIUVuZCBCT1QKK2JpbmQgIVVwIExOVVAKK2JpbmQgIURvd24gTE5ETgorYmluZCBEb3QxIFBSRElGTE4KK2JpbmQgRG90NCBOWERJRkxOCitiaW5kIERvdDIgQVRUUlVQCitiaW5kIERvdDUgQVRUUkROCitiaW5kIERvdDMgUFJQR1JQSAorYmluZCBEb3Q2IE5YUEdSUEgKK2JpbmQgRG90NyBQUlBST01QVAorYmluZCBEb3Q4IE5YUFJPTVBUCisKK2JpbmQgRG90MStEb3QyIFdJTlVQCitiaW5kIERvdDQrRG90NSBXSU5ETgorYmluZCBEb3QzK0RvdDcgUFJTRUFSQ0gKK2JpbmQgRG90NitEb3Q4IE5YU0VBUkNICisKK2JpbmQgRG90MStEb3QyKyFSb3V0aW5nS2V5MSBQUkRJRkNIQVIKK2JpbmQgRG90NCtEb3Q1KyFSb3V0aW5nS2V5MSBOWERJRkNIQVIKK2JpbmQgRG90MytEb3Q3KyFSb3V0aW5nS2V5MSBQUklOREVOVAorYmluZCBEb3Q2K0RvdDgrIVJvdXRpbmdLZXkxIE5YSU5ERU5UCisKK2JpbmQgRG90MSshVXAgRldJTkxUCitiaW5kIERvdDErIURvd24gRldJTlJUCitiaW5kIERvdDErIUhvbWUgVE9QX0xFRlQKK2JpbmQgRG90MSshRW5kIEJPVF9MRUZUCisKK2JpbmQgRG90NCshVXAgSFdJTkxUCitiaW5kIERvdDQrIURvd24gSFdJTlJUCitiaW5kIERvdDQrIUhvbWUgQ0hSTFQKK2JpbmQgRG90NCshRW5kIENIUlJUCisKK2JpbmQgRG90MSshU2hpZnQgTE5CRUcKK2JpbmQgRG90NCshU2hpZnQgTE5FTkQKKworYmluZCBEb3QxKyFSb3V0aW5nS2V5MSBTRVRMRUZUCitiaW5kIERvdDQrIVJvdXRpbmdLZXkxIERFU0NDSEFSCisKK2JpbmQgRG90MishU2hpZnQgS0VZX1RBQgorYmluZCBEb3QyKyFIb21lIEtFWV9DVVJTT1JfTEVGVAorYmluZCBEb3QyKyFFbmQgS0VZX0NVUlNPUl9SSUdIVAorYmluZCBEb3QyKyFVcCBLRVlfQ1VSU09SX1VQCitiaW5kIERvdDIrIURvd24gS0VZX0NVUlNPUl9ET1dOCitiaW5kIERvdDIrIVJvdXRpbmdLZXkxIEtFWV9GVU5DVElPTgorCitiaW5kIERvdDUrIVNoaWZ0IEtFWV9JTlNFUlQKK2JpbmQgRG90NSshSG9tZSBLRVlfSE9NRQorYmluZCBEb3Q1KyFFbmQgS0VZX0VORAorYmluZCBEb3Q1KyFVcCBLRVlfUEFHRV9VUAorYmluZCBEb3Q1KyFEb3duIEtFWV9QQUdFX0RPV04KK2JpbmQgRG90NSshUm91dGluZ0tleTEgU1dJVENIVlQKKworYmluZCBEb3Q2KyFTaGlmdCBVTlNUSUNLCitiaW5kIERvdDYrIUhvbWUgTUVUQQorYmluZCBEb3Q2KyFFbmQgR1VJCitiaW5kIERvdDYrIVVwIFNISUZUCitiaW5kIERvdDYrIURvd24gQ09OVFJPTAorCitiaW5kIERvdDcrIVNoaWZ0IFNQS0hPTUUKK2JpbmQgRG90NyshSG9tZSBTQVlfQUJPVkUKK2JpbmQgRG90NyshRW5kIFNBWV9CRUxPVworYmluZCBEb3Q3KyFVcCBNVVRFCitiaW5kIERvdDcrIURvd24gU0FZX0xJTkUKKworYmluZCBEb3Q4KyFTaGlmdCBSRVNUQVJUU1BFRUNICitiaW5kIERvdDgrIUhvbWUgU0FZX1NMT1dFUgorYmluZCBEb3Q4KyFFbmQgU0FZX0ZBU1RFUgorYmluZCBEb3Q4KyFVcCBTQVlfU09GVEVSCitiaW5kIERvdDgrIURvd24gU0FZX0xPVURFUgorCitiaW5kIERvdDcrIVJvdXRpbmdLZXkxIENMSVBfTkVXCitiaW5kIERvdDMrIVJvdXRpbmdLZXkxIENMSVBfQURECitiaW5kIERvdDYrIVJvdXRpbmdLZXkxIENPUFlfTElORQorYmluZCBEb3Q4KyFSb3V0aW5nS2V5MSBDT1BZX1JFQ1QKKworYmluZCBEb3QxK0RvdDIrRG90MytEb3Q3IFRJTUUKKworaW5jbHVkZSByb3V0aW5nLmt0aQorCithc3NpZ24gdG9nZ2xlT2ZmIERvdDcKK2Fzc2lnbiB0b2dnbGVPbiBEb3Q4CitpbmNsdWRlIHN0YXR1c1x7c3RhdHVzS2V5c30ua3RpCisKKworYmluZCBEb3QyK0RvdDMrIVNoaWZ0IENPTlRFWFQrZGVmYXVsdAorYmluZCBEb3QyK0RvdDMrIUhvbWUgQ09OVEVYVCtjaG9yZHMKK2JpbmQgRG90MitEb3QzKyFFbmQgQ09OVEVYVCticmFpbGxlCisKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQ2hvcmQgSW5wdXQgTW9kZSAjCisjIyMjIyMjIyMjIyMjIyMjIyMjIworCitjb250ZXh0IGNob3JkcyBDaG9yZGVkIENvbW1hbmRzIE1vZGUKKworYXNzaWduIG5vVW5jaG9yZGVkCithc3NpZ24gY2hvcmQKK2luY2x1ZGUgLi4vY2hvcmRzLmt0aQoraW5jbHVkZSAuLi9tZW51Lmt0aQorCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQnJhaWxsZSBJbnB1dCBNb2RlICMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworY29udGV4dCBicmFpbGxlIEJyYWlsbGUgSW5wdXQgTW9kZQorCittYXAgRG90MSBET1QxCittYXAgRG90MiBET1QyCittYXAgRG90MyBET1QzCittYXAgRG90NCBET1Q0CittYXAgRG90NSBET1Q1CittYXAgRG90NiBET1Q2CittYXAgRG90NyBET1Q3CittYXAgRG90OCBET1Q4CisKK2JpbmQgRG90MyshU2hpZnQgS0VZX0VTQ0FQRQorYmluZCBEb3QzKyFIb21lIEtFWV9CQUNLU1BBQ0UKK2JpbmQgRG90MyshRW5kIEtFWV9ERUxFVEUKK2JpbmQgRG90MyshVXAgS0VZX0VOVEVSCitiaW5kIERvdDMrIURvd24gUEFTU0RPVFMKKworCmRpZmYgLS1naXQgYS9UYWJsZXMuYnJhaWxsZWJhY2svcG0vZnJvbnQ5Lmt0aSBiL1RhYmxlcy5icmFpbGxlYmFjay9wbS9mcm9udDkua3RpCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUyM2ViZjkKLS0tIC9kZXYvbnVsbAorKysgYi9UYWJsZXMuYnJhaWxsZWJhY2svcG0vZnJvbnQ5Lmt0aQpAQCAtMCwwICsxLDYxIEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisjICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorIworIyBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisjCisjIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisjCisjIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyMgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorIyBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyMKKyMgV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworIworIyBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIyBUaGlzIGtleSBzdWJ0YWJsZSBpcyBmb3IgUGFwZW5tZWllciBkaXNwbGF5cyB3aGljaCBoYXZlIDkgZnJvbnQga2V5cy4KKworYmluZCAhSG9tZSBIT01FCitiaW5kICFVcCBXSU5VUAorYmluZCAhRG93biBXSU5ETgorYmluZCAhQmFja3dhcmQgTE5VUAorYmluZCAhRm9yd2FyZCBMTkROCitiaW5kIEN1cnNvciBIV0lOTFQKK2JpbmQgQnJhaWxsZSBIV0lOUlQKK2JpbmQgRnVuY3Rpb24gRldJTkxUCitiaW5kIEF0dHJpYnV0ZSBGV0lOUlQKKworYmluZCBGdW5jdGlvbishSG9tZSBMTkJFRworYmluZCBBdHRyaWJ1dGUrIUhvbWUgTE5FTkQKK2JpbmQgQ3Vyc29yKyFIb21lIENIUkxUCitiaW5kIEJyYWlsbGUrIUhvbWUgQ0hSUlQKKworYmluZCBGdW5jdGlvbishVXAgUFJESUZMTgorYmluZCBBdHRyaWJ1dGUrIVVwIEFUVFJVUAorYmluZCBDdXJzb3IrIVVwIFBSUEdSUEgKK2JpbmQgQnJhaWxsZSshVXAgUFJTRUFSQ0gKK2JpbmQgRnVuY3Rpb24rIURvd24gTlhESUZMTgorYmluZCBBdHRyaWJ1dGUrIURvd24gQVRUUkROCitiaW5kIEN1cnNvcishRG93biBOWFBHUlBICitiaW5kIEJyYWlsbGUrIURvd24gTlhTRUFSQ0gKKworYmluZCBGdW5jdGlvbishQmFja3dhcmQgVE9QX0xFRlQKK2JpbmQgQXR0cmlidXRlKyFCYWNrd2FyZCBUT1AKK2JpbmQgRnVuY3Rpb24rIUZvcndhcmQgQk9UX0xFRlQKK2JpbmQgQXR0cmlidXRlKyFGb3J3YXJkIEJPVAorCitiaW5kIEZ1bmN0aW9uKyFSb3V0aW5nS2V5MSBDTElQX05FVworYmluZCBBdHRyaWJ1dGUrIVJvdXRpbmdLZXkxIENPUFlfUkVDVAorYmluZCBDdXJzb3IrIVJvdXRpbmdLZXkxIFBSSU5ERU5UCitiaW5kIEJyYWlsbGUrIVJvdXRpbmdLZXkxIE5YSU5ERU5UCisKK2JpbmQgRnVuY3Rpb24rQXR0cmlidXRlIFBBU1RFCisKK2luY2x1ZGUgcm91dGluZy5rdGkKKworYXNzaWduIHRvZ2dsZU9mZiBGdW5jdGlvbgorYXNzaWduIHRvZ2dsZU9uIEF0dHJpYnV0ZQoraW5jbHVkZSBzdGF0dXNce3N0YXR1c0tleXN9Lmt0aQpkaWZmIC0tZ2l0IGEvVGFibGVzLmJyYWlsbGViYWNrL3BtL2liXzgwLmt0YiBiL1RhYmxlcy5icmFpbGxlYmFjay9wbS9pYl84MC5rdGIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjM3M2FhYgotLS0gL2Rldi9udWxsCisrKyBiL1RhYmxlcy5icmFpbGxlYmFjay9wbS9pYl84MC5rdGIKQEAgLTAsMCArMSwyMiBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorIyAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyMKKyMgQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorIworIyBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorIworIyBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisjIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyMgbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisjCisjIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK3RpdGxlIFBhcGVubWVpZXIgQnJhaWxsZVggSUIgODAgQ1IgU29mdAorCithc3NpZ24gc3RhdHVzS2V5cyA0CitpbmNsdWRlIGZyb250OS5rdGkKZGlmZiAtLWdpdCBhL1RhYmxlcy5icmFpbGxlYmFjay9wbS9rZXlib2FyZC5rdGkgYi9UYWJsZXMuYnJhaWxsZWJhY2svcG0va2V5Ym9hcmQua3RpCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjliMDhmNDYKLS0tIC9kZXYvbnVsbAorKysgYi9UYWJsZXMuYnJhaWxsZWJhY2svcG0va2V5Ym9hcmQua3RpCkBAIC0wLDAgKzEsNTkgQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyMgICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisjCisjIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyMKKyMgQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjIFRoaXMga2V5IHN1YnRhYmxlIGlzIGZvciBQYXBlbm1laWVyIGRpc3BsYXlzIHdoaWNoIGhhdmUgYSBicmFpbGxlIGtleWJvYXJkLgorCittYXAgRG90MSBET1QxCittYXAgRG90MiBET1QyCittYXAgRG90MyBET1QzCittYXAgRG90NCBET1Q0CittYXAgRG90NSBET1Q1CittYXAgRG90NiBET1Q2CittYXAgRG90NyBET1Q3CittYXAgRG90OCBET1Q4CisKK21hcCBMZWZ0U3BhY2UgU1BBQ0UKK21hcCBSaWdodFNwYWNlIFNQQUNFCittYXAgTGVmdFRodW1iIENPTlRST0wKK21hcCBSaWdodFRodW1iIE1FVEEKKworYXNzaWduIGNob3JkIFNwYWNlKworaW5jbHVkZSAuLi9jaG9yZHMua3RpCithc3NpZ24gbm9VbmNob3JkZWQKKworaGlkZSBvbgorYXNzaWduIGNob3JkIExlZnRTcGFjZSsKK2luY2x1ZGUgLi4vY2hvcmRzLmt0aQorCithc3NpZ24gY2hvcmQgUmlnaHRTcGFjZSsKK2luY2x1ZGUgLi4vY2hvcmRzLmt0aQoraGlkZSBvZmYKKworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQnJhaWxsZUJhY2sgQmluZGluZ3MgIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK2Fzc2lnbiBjaG9yZCBMZWZ0U3BhY2UKK2luY2x1ZGUgLi4vYW5kcm9pZC1jaG9yZHMua3RpCisKK2Fzc2lnbiBjaG9yZCBSaWdodFNwYWNlCitpbmNsdWRlIC4uL2FuZHJvaWQtY2hvcmRzLmt0aQorCithc3NpZ24gY2hvcmQgU3BhY2UKK2luY2x1ZGUgLi4vYW5kcm9pZC1jaG9yZHMua3RpCmRpZmYgLS1naXQgYS9UYWJsZXMuYnJhaWxsZWJhY2svcG0va2V5cy5rdGkgYi9UYWJsZXMuYnJhaWxsZWJhY2svcG0va2V5cy5rdGkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDBjMzQ5MQotLS0gL2Rldi9udWxsCisrKyBiL1RhYmxlcy5icmFpbGxlYmFjay9wbS9rZXlzLmt0aQpAQCAtMCwwICsxLDExNCBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorIyAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyMKKyMgQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorIworIyBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorIworIyBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisjIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyMgbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisjCisjIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMgVGhpcyBrZXkgc3VidGFibGUgaXMgZm9yIFBhcGVubWVpZXIgZGlzcGxheXMgd2hpY2ggaGF2ZSBrZXlzLgorCitpZlZhciBrZXlFbXVsYXRpb24KKyAgbm90ZSBUaGUgbGVmdCBhbmQgcmlnaHQga2V5cyBhcmUgZW11bGF0ZWQuIEVudGVyIGtleSBlbXVsYXRpb24gbW9kZSBieQorICBub3RlICogcHJlc3NpbmcgVGh1bWIxICsgVGh1bWIyIChMZWZ0IFdpbmRvd3MgKyBSaWdodCBXaW5kb3dzKS4gVGhlbiBwcmVzczoKKyAgbm90ZSArIExlZnQgS2V5IFJlYXI6IExlZnQgVGh1bWIgKExlZnQgV2luZG93cykKKyAgbm90ZSArIExlZnQgS2V5IEZyb250OiBTcGFjZSArIExlZnQgVGh1bWIgKENvbnRleHQgKyBMZWZ0IFdpbmRvd3MpCisgIG5vdGUgKyBSaWdodCBLZXkgUmVhcjogUmlnaHQgVGh1bWIgKFJpZ2h0IFdpbmRvd3MpCisgIG5vdGUgKyBSaWdodCBLZXkgRnJvbnQ6IFNwYWNlICsgUmlnaHQgVGh1bWIgKENvbnRleHQgKyBSaWdodCBXaW5kb3dzKQorZWxzZQorICBpZlZhciBub1JpZ2h0S2V5CisgICAgbm90ZSBUaGUgcm9ja2VyIGF0IHRoZSBsZWZ0IHNpZGUgb2YgdGhlIHRvcCB0aGF0IGRvZXNuJ3Qgc3RheSB3aGVuIHByZXNzZWQKKyAgICBub3RlICogaXMgbmFtZWQgdGhlIExlZnQgS2V5LgorICBlbHNlCisgICAgbm90ZSBUaGUgcm9ja2VycyBhdCBlYWNoIHNpZGUgb2YgdGhlIHRvcCB0aGF0IGRvbid0IHN0YXkgd2hlbiBwcmVzc2VkCisgICAgbm90ZSAqIGFyZSBuYW1lZCB0aGUgTGVmdCBhbmQgUmlnaHQgS2V5LgorICBlbmRJZgorZW5kSWYKKworYmluZCBMZWZ0S2V5UmVhciBCQUNLCitiaW5kIExlZnRLZXlGcm9udCBIT01FCisKK2JpbmQgTGVmdEtleVJlYXIrQmFyTGVmdDEgRElTUE1ECitiaW5kIExlZnRLZXlSZWFyK0JhclJpZ2h0MSBDU1JUUksKK2JpbmQgTGVmdEtleVJlYXIrQmFyVXAxIFNJWERPVFMKK2JpbmQgTGVmdEtleVJlYXIrQmFyRG93bjEgUEFTVEUKKworYmluZCBMZWZ0S2V5UmVhcitCYXJMZWZ0MiBBVFRSVklTCitiaW5kIExlZnRLZXlSZWFyK0JhclJpZ2h0MiBDU1JWSVMKK2JpbmQgTGVmdEtleVJlYXIrQmFyVXAyIENBUEJMSU5LCitiaW5kIExlZnRLZXlSZWFyK0JhckRvd24yIENTUkpNUF9WRVJUCisKK2hpZGUgb24KK2JpbmQgTGVmdEtleVJlYXIrQmFyTGVmdDErQmFyTGVmdDIgQVRUUlZJUworYmluZCBMZWZ0S2V5UmVhcitCYXJSaWdodDErQmFyUmlnaHQyIENTUlZJUworYmluZCBMZWZ0S2V5UmVhcitCYXJVcDErQmFyVXAyIENBUEJMSU5LCitiaW5kIExlZnRLZXlSZWFyK0JhckRvd24xK0JhckRvd24yIENTUkpNUF9WRVJUCitoaWRlIG9mZgorCitiaW5kIExlZnRLZXlGcm9udCtCYXJMZWZ0MSBJTkZPCitiaW5kIExlZnRLZXlGcm9udCtCYXJSaWdodDEgUFJFRk1FTlUKK2JpbmQgTGVmdEtleUZyb250K0JhclVwMSBBVVRPU1BFQUsKK2JpbmQgTGVmdEtleUZyb250K0JhckRvd24xIEFVVE9SRVBFQVQKKworYmluZCBMZWZ0S2V5RnJvbnQrQmFyTGVmdDIgUFJFRkxPQUQKK2JpbmQgTGVmdEtleUZyb250K0JhclJpZ2h0MiBQUkVGU0FWRQorYmluZCBMZWZ0S2V5RnJvbnQrQmFyVXAyIFJFU1RBUlRCUkwKK2JpbmQgTGVmdEtleUZyb250K0JhckRvd24yIEZSRUVaRQorCitoaWRlIG9uCitiaW5kIExlZnRLZXlGcm9udCtCYXJMZWZ0MStCYXJMZWZ0MiBQUkVGTE9BRAorYmluZCBMZWZ0S2V5RnJvbnQrQmFyUmlnaHQxK0JhclJpZ2h0MiBQUkVGU0FWRQorYmluZCBMZWZ0S2V5RnJvbnQrQmFyVXAxK0JhclVwMiBSRVNUQVJUQlJMCitiaW5kIExlZnRLZXlGcm9udCtCYXJEb3duMStCYXJEb3duMiBGUkVFWkUKK2hpZGUgb2ZmCisKK2lmTm90VmFyIG5vUmlnaHRLZXkKKyAgYmluZCBSaWdodEtleVJlYXIgSEVMUAorICBiaW5kIFJpZ2h0S2V5RnJvbnQgTEVBUk4KKworICBiaW5kIFJpZ2h0S2V5UmVhcitCYXJMZWZ0MSBNVVRFCisgIGJpbmQgUmlnaHRLZXlSZWFyK0JhclJpZ2h0MSBTQVlfTElORQorICBiaW5kIFJpZ2h0S2V5UmVhcitCYXJVcDEgU0FZX0FCT1ZFCisgIGJpbmQgUmlnaHRLZXlSZWFyK0JhckRvd24xIFNBWV9CRUxPVworCisgIGJpbmQgUmlnaHRLZXlSZWFyK0JhckxlZnQyIFNBWV9TTE9XRVIKKyAgYmluZCBSaWdodEtleVJlYXIrQmFyUmlnaHQyIFNBWV9GQVNURVIKKyAgYmluZCBSaWdodEtleVJlYXIrQmFyVXAyIFNBWV9MT1VERVIKKyAgYmluZCBSaWdodEtleVJlYXIrQmFyRG93bjIgU0FZX1NPRlRFUgorCisgIGhpZGUgb24KKyAgYmluZCBSaWdodEtleVJlYXIrQmFyTGVmdDErQmFyTGVmdDIgU0FZX1NMT1dFUgorICBiaW5kIFJpZ2h0S2V5UmVhcitCYXJSaWdodDErQmFyUmlnaHQyIFNBWV9GQVNURVIKKyAgYmluZCBSaWdodEtleVJlYXIrQmFyVXAxK0JhclVwMiBTQVlfTE9VREVSCisgIGJpbmQgUmlnaHRLZXlSZWFyK0JhckRvd24xK0JhckRvd24yIFNBWV9TT0ZURVIKKyAgaGlkZSBvZmYKKworICBiaW5kIFJpZ2h0S2V5RnJvbnQrQmFyTGVmdDEgU0tQSURMTlMKKyAgYmluZCBSaWdodEtleUZyb250K0JhclJpZ2h0MSBTS1BCTE5LV0lOUworICBiaW5kIFJpZ2h0S2V5RnJvbnQrQmFyVXAxIFNQS0hPTUUKKyAgYmluZCBSaWdodEtleUZyb250K0JhckRvd24xIFRVTkVTCisKKyAgYmluZCBSaWdodEtleUZyb250K0JhclVwMiBSRVNUQVJUU1BFRUNICisgIGJpbmQgUmlnaHRLZXlGcm9udCtCYXJSaWdodDIgU0xJREVXSU4KKworICBoaWRlIG9uCisgIGJpbmQgUmlnaHRLZXlGcm9udCtCYXJVcDErQmFyVXAyIFJFU1RBUlRTUEVFQ0gKKyAgYmluZCBSaWdodEtleUZyb250K0JhclJpZ2h0MStCYXJSaWdodDIgU0xJREVXSU4KKyAgaGlkZSBvZmYKKworICBiaW5kIExlZnRLZXlSZWFyK1JvdXRpbmdLZXkxIENMSVBfTkVXCisgIGJpbmQgTGVmdEtleUZyb250K1JvdXRpbmdLZXkxIENMSVBfQURECisgIGJpbmQgUmlnaHRLZXlSZWFyK1JvdXRpbmdLZXkxIENPUFlfTElORQorICBiaW5kIFJpZ2h0S2V5RnJvbnQrUm91dGluZ0tleTEgQ09QWV9SRUNUCitlbmRJZgorCmRpZmYgLS1naXQgYS9UYWJsZXMuYnJhaWxsZWJhY2svcG0vbGl2ZS5rdGIgYi9UYWJsZXMuYnJhaWxsZWJhY2svcG0vbGl2ZS5rdGIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2FlM2RhOAotLS0gL2Rldi9udWxsCisrKyBiL1RhYmxlcy5icmFpbGxlYmFjay9wbS9saXZlLmt0YgpAQCAtMCwwICsxLDI0IEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisjICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorIworIyBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisjCisjIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisjCisjIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyMgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorIyBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyMKKyMgV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworIworIyBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKwordGl0bGUgUGFwZW5tZWllciBCcmFpbGxlWCBMaXZlCisKK2Fzc2lnbiBoYXNTaW5nbGVTdGVwQmFyCithc3NpZ24gc3RhdHVzS2V5cyAwCitpbmNsdWRlIGJhci5rdGkKK2luY2x1ZGUga2V5Ym9hcmQua3RpCmRpZmYgLS1naXQgYS9UYWJsZXMuYnJhaWxsZWJhY2svcG0vcm91dGluZy5rdGkgYi9UYWJsZXMuYnJhaWxsZWJhY2svcG0vcm91dGluZy5rdGkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjRiOWMyZgotLS0gL2Rldi9udWxsCisrKyBiL1RhYmxlcy5icmFpbGxlYmFjay9wbS9yb3V0aW5nLmt0aQpAQCAtMCwwICsxLDM1IEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisjICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorIworIyBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMiBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisjCisjIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisjCisjIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyMgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorIyBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyMKKyMgV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworIworIyBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIyBUaGlzIGtleSBzdWJ0YWJsZSBpcyBmb3IgUGFwZW5tZWllciBkaXNwbGF5cyB3aGljaCBoYXZlIHByaW1hcnkgcm91dGluZyBrZXlzLgorCitub3RlIFJvdXRpbmdLZXkxIHJlZmVycyB0byB0aGUgcm93IG9mIGtleXMganVzdCBiZWhpbmQgdGhlIHRleHQgY2VsbHMuCisjT3ZlcnJpZGRlbiBieSBCcmFpbGxlQmFjay4KKyNiaW5kIFJvdXRpbmdLZXkxIFJPVVRFCisKK2lmS2V5IFJvdXRpbmdLZXkyCisgIG5vdGUgUm91dGluZ0tleTIgcmVmZXJzIHRvIHRoZSByb3cgb2Yga2V5cyBiZWhpbmQgdGhlIFJvdXRpbmdLZXkxIHJvdy4KKyAgYmluZCBSb3V0aW5nS2V5MiBERVNDQ0hBUgorZW5kSWYKKworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQnJhaWxsZUJhY2sgQmluZGluZ3MgIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK2JpbmQgUm91dGluZ0tleTEgUk9VVEU6Uk9VVEUrMTI4CmRpZmYgLS1naXQgYS9UYWJsZXMuYnJhaWxsZWJhY2svcG0vc3RhdHVzMC5rdGkgYi9UYWJsZXMuYnJhaWxsZWJhY2svcG0vc3RhdHVzMC5rdGkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWE4Zjk4YQotLS0gL2Rldi9udWxsCisrKyBiL1RhYmxlcy5icmFpbGxlYmFjay9wbS9zdGF0dXMwLmt0aQpAQCAtMCwwICsxLDIwIEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisjICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorIworIyBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisjCisjIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisjCisjIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyMgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorIyBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyMKKyMgV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworIworIyBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIyBUaGlzIGtleSBzdWJ0YWJsZSBpcyBmb3IgUGFwZW5tZWllciBkaXNwbGF5cyB3aGljaCBoYXZlIG5vIHN0YXR1cyBrZXlzLgorCmRpZmYgLS1naXQgYS9UYWJsZXMuYnJhaWxsZWJhY2svcG0vc3RhdHVzMTMua3RpIGIvVGFibGVzLmJyYWlsbGViYWNrL3BtL3N0YXR1czEzLmt0aQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZDRhMThkCi0tLSAvZGV2L251bGwKKysrIGIvVGFibGVzLmJyYWlsbGViYWNrL3BtL3N0YXR1czEzLmt0aQpAQCAtMCwwICsxLDUxIEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisjICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorIworIyBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisjCisjIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisjCisjIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyMgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorIyBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyMKKyMgV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworIworIyBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIyBUaGlzIGtleSBzdWJ0YWJsZSBpcyBmb3IgUGFwZW5tZWllciBkaXNwbGF5cyB3aGljaCBoYXZlIDEzIHN0YXR1cyBrZXlzLgorbm90ZSBUaGUga2V5cyB0byB0aGUgbGVmdCBvZiB0aGUgc3RhdHVzIGNlbGxzIGFyZSBuYW1lZCBTdGF0dXMuMSB0aHJvdWdoIFN0YXR1cy4xMy4KKworYmluZCAhU3RhdHVzLjEgSEVMUAorYmluZCAhU3RhdHVzLjIgTEVBUk4KK2JpbmQgIVN0YXR1cy4zIENTUkpNUF9WRVJUCitiaW5kICFTdGF0dXMuNCBJTkZPCitiaW5kICFTdGF0dXMuNSBCQUNLCisKK2Fzc2lnbiB0b2dnbGVLZXlzIFN0YXR1cy42Cithc3NpZ24gdG9nZ2xlQ29tbWFuZCBDU1JUUksKK2luY2x1ZGUgLi4vdG9nZ2xlLmt0aQorCithc3NpZ24gdG9nZ2xlS2V5cyBTdGF0dXMuNworYXNzaWduIHRvZ2dsZUNvbW1hbmQgRElTUE1ECitpbmNsdWRlIC4uL3RvZ2dsZS5rdGkKKworYXNzaWduIHRvZ2dsZUtleXMgU3RhdHVzLjgKK2Fzc2lnbiB0b2dnbGVDb21tYW5kIEZSRUVaRQoraW5jbHVkZSAuLi90b2dnbGUua3RpCisKK2JpbmQgIVN0YXR1cy45IFBSRUZNRU5VCisKK2Fzc2lnbiB0b2dnbGVLZXlzIFN0YXR1cy4xMAorYXNzaWduIHRvZ2dsZUNvbW1hbmQgQ1NSVklTCitpbmNsdWRlIC4uL3RvZ2dsZS5rdGkKKworYXNzaWduIHRvZ2dsZUtleXMgU3RhdHVzLjExCithc3NpZ24gdG9nZ2xlQ29tbWFuZCBBVFRSVklTCitpbmNsdWRlIC4uL3RvZ2dsZS5rdGkKKworYmluZCAhU3RhdHVzLjEyIFRJTUUKK2JpbmQgIVN0YXR1cy4xMyBQQVNURQpkaWZmIC0tZ2l0IGEvVGFibGVzLmJyYWlsbGViYWNrL3BtL3N0YXR1czIua3RpIGIvVGFibGVzLmJyYWlsbGViYWNrL3BtL3N0YXR1czIua3RpCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIyYjIwYWIKLS0tIC9kZXYvbnVsbAorKysgYi9UYWJsZXMuYnJhaWxsZWJhY2svcG0vc3RhdHVzMi5rdGkKQEAgLTAsMCArMSwyMyBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorIyAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyMKKyMgQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorIworIyBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorIworIyBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisjIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyMgbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisjCisjIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMgVGhpcyBrZXkgc3VidGFibGUgaXMgZm9yIFBhcGVubWVpZXIgZGlzcGxheXMgd2hpY2ggaGF2ZSAyIHN0YXR1cyBrZXlzLgorbm90ZSBUaGUga2V5cyBiZWhpbmQgdGhlIHN0YXR1cyBjZWxscyBhcmUgbmFtZWQgU3RhdHVzLjEgYW5kIFN0YXR1cy4yLgorCitiaW5kICFTdGF0dXMuMSBIRUxQCitiaW5kICFTdGF0dXMuMiBMRUFSTgpkaWZmIC0tZ2l0IGEvVGFibGVzLmJyYWlsbGViYWNrL3BtL3N0YXR1czIwLmt0aSBiL1RhYmxlcy5icmFpbGxlYmFjay9wbS9zdGF0dXMyMC5rdGkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjBkYzlhNQotLS0gL2Rldi9udWxsCisrKyBiL1RhYmxlcy5icmFpbGxlYmFjay9wbS9zdGF0dXMyMC5rdGkKQEAgLTAsMCArMSw3MSBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorIyAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyMKKyMgQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorIworIyBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorIworIyBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisjIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyMgbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisjCisjIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMgVGhpcyBrZXkgc3VidGFibGUgaXMgZm9yIFBhcGVubWVpZXIgZGlzcGxheXMgd2hpY2ggaGF2ZSAyMCBzdGF0dXMga2V5cy4KK25vdGUgVGhlIGtleXMgdG8gdGhlIGxlZnQgb2YgdGhlIHN0YXR1cyBjZWxscyBhcmUgbmFtZWQgU3RhdHVzLjEgdGhyb3VnaCBTdGF0dXMuMjAuCisKK2JpbmQgIVN0YXR1cy4xIEhFTFAKK2JpbmQgIVN0YXR1cy4yIExFQVJOCitiaW5kICFTdGF0dXMuMyBDU1JKTVBfVkVSVAorYmluZCAhU3RhdHVzLjQgSU5GTworYmluZCAhU3RhdHVzLjUgQkFDSworCithc3NpZ24gdG9nZ2xlS2V5cyBTdGF0dXMuNgorYXNzaWduIHRvZ2dsZUNvbW1hbmQgQ1NSVFJLCitpbmNsdWRlIC4uL3RvZ2dsZS5rdGkKKworYXNzaWduIHRvZ2dsZUtleXMgU3RhdHVzLjcKK2Fzc2lnbiB0b2dnbGVDb21tYW5kIERJU1BNRAoraW5jbHVkZSAuLi90b2dnbGUua3RpCisKK2Fzc2lnbiB0b2dnbGVLZXlzIFN0YXR1cy44Cithc3NpZ24gdG9nZ2xlQ29tbWFuZCBGUkVFWkUKK2luY2x1ZGUgLi4vdG9nZ2xlLmt0aQorCitiaW5kICFTdGF0dXMuOSBQUkVGTE9BRAorYmluZCAhU3RhdHVzLjEwIFBSRUZNRU5VCitiaW5kICFTdGF0dXMuMTEgUFJFRlNBVkUKKworYXNzaWduIHRvZ2dsZUtleXMgU3RhdHVzLjEyCithc3NpZ24gdG9nZ2xlQ29tbWFuZCBDU1JWSVMKK2luY2x1ZGUgLi4vdG9nZ2xlLmt0aQorCithc3NpZ24gdG9nZ2xlS2V5cyBTdGF0dXMuMTMKK2Fzc2lnbiB0b2dnbGVDb21tYW5kIEFUVFJWSVMKK2luY2x1ZGUgLi4vdG9nZ2xlLmt0aQorCithc3NpZ24gdG9nZ2xlS2V5cyBTdGF0dXMuMTQKK2Fzc2lnbiB0b2dnbGVDb21tYW5kIFNLUElETE5TCitpbmNsdWRlIC4uL3RvZ2dsZS5rdGkKKworYXNzaWduIHRvZ2dsZUtleXMgU3RhdHVzLjE1Cithc3NpZ24gdG9nZ2xlQ29tbWFuZCBTSVhET1RTCitpbmNsdWRlIC4uL3RvZ2dsZS5rdGkKKworYmluZCBTdGF0dXMuMTYgUkVTVEFSVEJSTAorCithc3NpZ24gdG9nZ2xlS2V5cyBTdGF0dXMuMTcKK2Fzc2lnbiB0b2dnbGVDb21tYW5kIEFVVE9TUEVBSworaW5jbHVkZSAuLi90b2dnbGUua3RpCisKK2Fzc2lnbiB0b2dnbGVLZXlzIFN0YXR1cy4xOAorYXNzaWduIHRvZ2dsZUNvbW1hbmQgQVVUT1JFUEVBVAoraW5jbHVkZSAuLi90b2dnbGUua3RpCisKK2JpbmQgU3RhdHVzLjE5IFRJTUUKK2JpbmQgIVN0YXR1cy4yMCBQQVNURQpkaWZmIC0tZ2l0IGEvVGFibGVzLmJyYWlsbGViYWNrL3BtL3N0YXR1czIyLmt0aSBiL1RhYmxlcy5icmFpbGxlYmFjay9wbS9zdGF0dXMyMi5rdGkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjQ5NmYzYwotLS0gL2Rldi9udWxsCisrKyBiL1RhYmxlcy5icmFpbGxlYmFjay9wbS9zdGF0dXMyMi5rdGkKQEAgLTAsMCArMSw3NiBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorIyAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyMKKyMgQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorIworIyBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorIworIyBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisjIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyMgbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisjCisjIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMgVGhpcyBrZXkgc3VidGFibGUgaXMgZm9yIFBhcGVubWVpZXIgZGlzcGxheXMgd2hpY2ggaGF2ZSAyMiBzdGF0dXMga2V5cy4KK25vdGUgVGhlIGtleXMgdG8gdGhlIGxlZnQgb2YgdGhlIHN0YXR1cyBjZWxscyBhcmUgbmFtZWQgU3RhdHVzLjEgdGhyb3VnaCBTdGF0dXMuMjIuCisKK2JpbmQgIVN0YXR1cy4xIEhFTFAKK2JpbmQgIVN0YXR1cy4yIExFQVJOCitiaW5kICFTdGF0dXMuMyBDU1JKTVBfVkVSVAorYmluZCAhU3RhdHVzLjQgSU5GTworYmluZCAhU3RhdHVzLjUgQkFDSworCithc3NpZ24gdG9nZ2xlS2V5cyBTdGF0dXMuNgorYXNzaWduIHRvZ2dsZUNvbW1hbmQgQ1NSVFJLCitpbmNsdWRlIC4uL3RvZ2dsZS5rdGkKKworYXNzaWduIHRvZ2dsZUtleXMgU3RhdHVzLjcKK2Fzc2lnbiB0b2dnbGVDb21tYW5kIERJU1BNRAoraW5jbHVkZSAuLi90b2dnbGUua3RpCisKK2Fzc2lnbiB0b2dnbGVLZXlzIFN0YXR1cy44Cithc3NpZ24gdG9nZ2xlQ29tbWFuZCBGUkVFWkUKK2luY2x1ZGUgLi4vdG9nZ2xlLmt0aQorCitiaW5kICFTdGF0dXMuOSBQUkVGTE9BRAorYmluZCAhU3RhdHVzLjEwIFBSRUZNRU5VCitiaW5kICFTdGF0dXMuMTEgUFJFRlNBVkUKKworYXNzaWduIHRvZ2dsZUtleXMgU3RhdHVzLjEyCithc3NpZ24gdG9nZ2xlQ29tbWFuZCBDU1JWSVMKK2luY2x1ZGUgLi4vdG9nZ2xlLmt0aQorCithc3NpZ24gdG9nZ2xlS2V5cyBTdGF0dXMuMTMKK2Fzc2lnbiB0b2dnbGVDb21tYW5kIEFUVFJWSVMKK2luY2x1ZGUgLi4vdG9nZ2xlLmt0aQorCithc3NpZ24gdG9nZ2xlS2V5cyBTdGF0dXMuMTQKK2Fzc2lnbiB0b2dnbGVDb21tYW5kIFNLUElETE5TCitpbmNsdWRlIC4uL3RvZ2dsZS5rdGkKKworYXNzaWduIHRvZ2dsZUtleXMgU3RhdHVzLjE1Cithc3NpZ24gdG9nZ2xlQ29tbWFuZCBTSVhET1RTCitpbmNsdWRlIC4uL3RvZ2dsZS5rdGkKKworYmluZCAhU3RhdHVzLjE2IFJFU1RBUlRCUkwKK2JpbmQgIVN0YXR1cy4xNyBSRVNUQVJUU1BFRUNICisKK2Fzc2lnbiB0b2dnbGVLZXlzIFN0YXR1cy4xOAorYXNzaWduIHRvZ2dsZUNvbW1hbmQgQVVUT1NQRUFLCitpbmNsdWRlIC4uL3RvZ2dsZS5rdGkKKworYXNzaWduIHRvZ2dsZUtleXMgU3RhdHVzLjE5Cithc3NpZ24gdG9nZ2xlQ29tbWFuZCBBVVRPUkVQRUFUCitpbmNsdWRlIC4uL3RvZ2dsZS5rdGkKKworYXNzaWduIHRvZ2dsZUtleXMgU3RhdHVzLjIwCithc3NpZ24gdG9nZ2xlQ29tbWFuZCBCUkxVQ0RPVFMKK2luY2x1ZGUgLi4vdG9nZ2xlLmt0aQorCitiaW5kICFTdGF0dXMuMjEgVElNRQorYmluZCAhU3RhdHVzLjIyIFBBU1RFCmRpZmYgLS1naXQgYS9UYWJsZXMuYnJhaWxsZWJhY2svcG0vc3RhdHVzNC5rdGkgYi9UYWJsZXMuYnJhaWxsZWJhY2svcG0vc3RhdHVzNC5rdGkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjdiM2ZhMQotLS0gL2Rldi9udWxsCisrKyBiL1RhYmxlcy5icmFpbGxlYmFjay9wbS9zdGF0dXM0Lmt0aQpAQCAtMCwwICsxLDI1IEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisjICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorIworIyBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisjCisjIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisjCisjIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyMgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorIyBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyMKKyMgV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworIworIyBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIyBUaGlzIGtleSBzdWJ0YWJsZSBpcyBmb3IgUGFwZW5tZWllciBkaXNwbGF5cyB3aGljaCBoYXZlIDQgc3RhdHVzIGtleXMuCitub3RlIFRoZSBrZXlzIGJlaGluZCB0aGUgc3RhdHVzIGNlbGxzIGFyZSBuYW1lZCBTdGF0dXMuMSB0aHJvdWdoIFN0YXR1cy40LgorCitiaW5kICFTdGF0dXMuMSBIRUxQCitiaW5kICFTdGF0dXMuMiBMRUFSTgorYmluZCAhU3RhdHVzLjMgQ1NSSk1QX1ZFUlQKK2JpbmQgIVN0YXR1cy40IElORk8KZGlmZiAtLWdpdCBhL1RhYmxlcy5icmFpbGxlYmFjay9wbS9zd2l0Y2hlcy5rdGkgYi9UYWJsZXMuYnJhaWxsZWJhY2svcG0vc3dpdGNoZXMua3RpCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY3NGNkYWMKLS0tIC9kZXYvbnVsbAorKysgYi9UYWJsZXMuYnJhaWxsZWJhY2svcG0vc3dpdGNoZXMua3RpCkBAIC0wLDAgKzEsMTY0IEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisjICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorIworIyBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisjCisjIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisjCisjIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyMgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorIyBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyMKKyMgV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworIworIyBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIyBUaGlzIGtleSBzdWJ0YWJsZSBpcyBmb3IgUGFwZW5tZWllciBkaXNwbGF5cyB3aGljaCBoYXZlIHN3aXRjaGVzLgorCitpZlZhciBrZXlFbXVsYXRpb24KKyAgbm90ZSBUaGUgbGVmdCBhbmQgcmlnaHQgc3dpdGNoZXMgYXJlIGVtdWxhdGVkLiBFbnRlciBrZXkgZW11bGF0aW9uIG1vZGUgYnkKKyAgbm90ZSAqIHByZXNzaW5nIFRodW1iMSArIFRodW1iMiAoTGVmdCBXaW5kb3dzICsgUmlnaHQgV2luZG93cykuIFRoZW4gcHJlc3M6CisgIG5vdGUgKyBMZWZ0IFN3aXRjaCBSZWFyOiBEb3QgMSAoZikKKyAgbm90ZSArIExlZnQgU3dpdGNoIENlbnRlcjogRG90IDIgKGQpCisgIG5vdGUgKyBMZWZ0IFN3aXRjaCBGcm9udDogRG90IDMgKHMpCisgIG5vdGUgKyBSaWdodCBTd2l0Y2ggUmVhcjogRG90IDQgKGopCisgIG5vdGUgKyBSaWdodCBTd2l0Y2ggQ2VudGVyOiBEb3QgNSAoaykKKyAgbm90ZSArIFJpZ2h0IFN3aXRjaCBGcm9udDogRG90IDYgKGwpCisgIG5vdGUgKyBjZW50ZXIgYm90aCBzd2l0Y2hlczogRG90IDcgKGEpCitlbHNlCisgIG5vdGUgVGhlIHJvY2tlcnMgYXQgZWFjaCBzaWRlIG9mIHRoZSB0b3AgdGhhdCBzdGF5IHdoZW4gcHJlc3NlZAorICBub3RlICogYXJlIG5hbWVkIHRoZSBMZWZ0IGFuZCBSaWdodCBTd2l0Y2guCitlbmRJZgorCitjb250ZXh0IHN3aXRjaGVzUmVhckNlbnRlciBBZHZhbmNlZCBWZXJ0aWNhbCBOYXZpZ2F0aW9uIChsZWZ0IHN3aXRjaCByZWFyKQorCitiaW5kIEJhclVwMSBQUkRJRkxOCitiaW5kIEJhckRvd24xIE5YRElGTE4KK2JpbmQgQmFyVXAyIEFUVFJVUAorYmluZCBCYXJEb3duMiBBVFRSRE4KK2JpbmQgQmFyTGVmdDEgUFJQUk9NUFQKK2JpbmQgQmFyUmlnaHQxIE5YUFJPTVBUCitiaW5kIEJhckxlZnQyIFBSUEdSUEgKK2JpbmQgQmFyUmlnaHQyIE5YUEdSUEgKKworaGlkZSBvbgorYmluZCBCYXJVcDErQmFyVXAyIEFUVFJVUAorYmluZCBCYXJEb3duMStCYXJEb3duMiBBVFRSRE4KK2JpbmQgQmFyTGVmdDErQmFyTGVmdDIgUFJQR1JQSAorYmluZCBCYXJSaWdodDErQmFyUmlnaHQyIE5YUEdSUEgKK2hpZGUgb2ZmCisKKworY29udGV4dCBzd2l0Y2hlc0Zyb250Q2VudGVyIFNwZWNpYWxpemVkIE5hdmlnYXRpb24gKGxlZnQgc3dpdGNoIGZyb250KQorCitiaW5kIEJhclVwMSBQUlNFQVJDSAorYmluZCBCYXJEb3duMSBOWFNFQVJDSAorYmluZCBCYXJVcDIgSEVMUAorYmluZCBCYXJEb3duMiBMRUFSTgorYmluZCBCYXJMZWZ0MSBDSFJMVAorYmluZCBCYXJSaWdodDEgQ0hSUlQKK2JpbmQgQmFyTGVmdDIgSFdJTkxUCitiaW5kIEJhclJpZ2h0MiBIV0lOUlQKKworaGlkZSBvbgorYmluZCBCYXJVcDErQmFyVXAyIEhFTFAKK2JpbmQgQmFyRG93bjErQmFyRG93bjIgTEVBUk4KK2JpbmQgQmFyTGVmdDErQmFyTGVmdDIgSFdJTkxUCitiaW5kIEJhclJpZ2h0MStCYXJSaWdodDIgSFdJTlJUCitoaWRlIG9mZgorCisKK2NvbnRleHQgc3dpdGNoZXNDZW50ZXJSZWFyIENvbnRlbnQtYmFzZWQgTmF2aWdhdGlvbiAocmlnaHQgc3dpdGNoIHJlYXIpCisKK2JpbmQgQmFyVXAxIEtFWV9DVVJTT1JfVVAKK2JpbmQgQmFyRG93bjEgS0VZX0NVUlNPUl9ET1dOCitiaW5kIEJhclVwMiBLRVlfUEFHRV9VUAorYmluZCBCYXJEb3duMiBLRVlfUEFHRV9ET1dOCitiaW5kIEJhckxlZnQxIEZXSU5MVCtyb3V0ZQorYmluZCBCYXJSaWdodDEgRldJTlJUK3JvdXRlCitiaW5kIEJhckxlZnQyIExOQkVHK3JvdXRlCitiaW5kIEJhclJpZ2h0MiBMTkVORCtyb3V0ZQorCitoaWRlIG9uCitiaW5kIEJhclVwMStCYXJVcDIgS0VZX1BBR0VfVVAKK2JpbmQgQmFyRG93bjErQmFyRG93bjIgS0VZX1BBR0VfRE9XTgorYmluZCBCYXJMZWZ0MStCYXJMZWZ0MiBMTkJFRytyb3V0ZQorYmluZCBCYXJSaWdodDErQmFyUmlnaHQyIExORU5EK3JvdXRlCitoaWRlIG9mZgorCisKK2NvbnRleHQgc3dpdGNoZXNDZW50ZXJGcm9udCBGdW5jdGlvbiBLZXkgRW11bGF0aW9uIChyaWdodCBzd2l0Y2ggZnJvbnQpCisKK2JpbmQgQmFyVXAxIEtFWV9DVVJTT1JfVVAKK2JpbmQgQmFyRG93bjEgS0VZX0NVUlNPUl9ET1dOCitiaW5kIEJhclVwMiBLRVlfUEFHRV9VUAorYmluZCBCYXJEb3duMiBLRVlfUEFHRV9ET1dOCitiaW5kIEJhckxlZnQxIEtFWV9DVVJTT1JfTEVGVAorYmluZCBCYXJSaWdodDEgS0VZX0NVUlNPUl9SSUdIVAorYmluZCBCYXJMZWZ0MiBLRVlfSE9NRQorYmluZCBCYXJSaWdodDIgS0VZX0VORAorCitoaWRlIG9uCitiaW5kIEJhclVwMStCYXJVcDIgS0VZX1BBR0VfVVAKK2JpbmQgQmFyRG93bjErQmFyRG93bjIgS0VZX1BBR0VfRE9XTgorYmluZCBCYXJMZWZ0MStCYXJMZWZ0MiBLRVlfSE9NRQorYmluZCBCYXJSaWdodDErQmFyUmlnaHQyIEtFWV9FTkQKK2hpZGUgb2ZmCisKKworY29udGV4dCBzd2l0Y2hlc1JlYXJSZWFyIFVudXNlZCAobGVmdCBzd2l0Y2ggcmVhciwgcmlnaHQgc3dpdGNoIHJlYXIpCisKKworY29udGV4dCBzd2l0Y2hlc1JlYXJGcm9udCBVbnVzZWQgKGxlZnQgc3dpdGNoIHJlYXIsIHJpZ2h0IHN3aXRjaCBmcm9udCkKKworCitjb250ZXh0IHN3aXRjaGVzRnJvbnRSZWFyIFVudXNlZCAobGVmdCBzd2l0Y2ggZnJvbnQsIHJpZ2h0IHN3aXRjaCByZWFyKQorCisKK2NvbnRleHQgc3dpdGNoZXNGcm9udEZyb250IFVudXNlZCAobGVmdCBzd2l0Y2ggZnJvbnQsIHJpZ2h0IHN3aXRjaCBmcm9udCkKKworCitjb250ZXh0IHN3aXRjaGVzUmVhckNlbnRlcgoraG90a2V5IExlZnRTd2l0Y2hSZWFyIE5PT1AgQ09OVEVYVCtkZWZhdWx0Citob3RrZXkgUmlnaHRTd2l0Y2hSZWFyIENPTlRFWFQrc3dpdGNoZXNSZWFyUmVhciBOT09QCitob3RrZXkgUmlnaHRTd2l0Y2hGcm9udCBDT05URVhUK3N3aXRjaGVzUmVhckZyb250IE5PT1AKKworY29udGV4dCBzd2l0Y2hlc0Zyb250Q2VudGVyCitob3RrZXkgTGVmdFN3aXRjaEZyb250IE5PT1AgQ09OVEVYVCtkZWZhdWx0Citob3RrZXkgUmlnaHRTd2l0Y2hSZWFyIENPTlRFWFQrc3dpdGNoZXNGcm9udFJlYXIgTk9PUAoraG90a2V5IFJpZ2h0U3dpdGNoRnJvbnQgQ09OVEVYVCtzd2l0Y2hlc0Zyb250RnJvbnQgTk9PUAorCitjb250ZXh0IHN3aXRjaGVzQ2VudGVyUmVhcgoraG90a2V5IFJpZ2h0U3dpdGNoUmVhciBOT09QIENPTlRFWFQrZGVmYXVsdAoraG90a2V5IExlZnRTd2l0Y2hSZWFyIENPTlRFWFQrc3dpdGNoZXNSZWFyUmVhciBOT09QCitob3RrZXkgTGVmdFN3aXRjaEZyb250IENPTlRFWFQrc3dpdGNoZXNGcm9udFJlYXIgTk9PUAorCitjb250ZXh0IHN3aXRjaGVzQ2VudGVyRnJvbnQKK2hvdGtleSBSaWdodFN3aXRjaEZyb250IE5PT1AgQ09OVEVYVCtkZWZhdWx0Citob3RrZXkgTGVmdFN3aXRjaFJlYXIgQ09OVEVYVCtzd2l0Y2hlc1JlYXJGcm9udCBOT09QCitob3RrZXkgTGVmdFN3aXRjaEZyb250IENPTlRFWFQrc3dpdGNoZXNGcm9udEZyb250IE5PT1AKKworY29udGV4dCBzd2l0Y2hlc1JlYXJSZWFyCitob3RrZXkgTGVmdFN3aXRjaFJlYXIgTk9PUCBDT05URVhUK3N3aXRjaGVzQ2VudGVyUmVhcgoraG90a2V5IFJpZ2h0U3dpdGNoUmVhciBOT09QIENPTlRFWFQrc3dpdGNoZXNSZWFyQ2VudGVyCisKK2NvbnRleHQgc3dpdGNoZXNSZWFyRnJvbnQKK2hvdGtleSBMZWZ0U3dpdGNoUmVhciBOT09QIENPTlRFWFQrc3dpdGNoZXNDZW50ZXJGcm9udAoraG90a2V5IFJpZ2h0U3dpdGNoRnJvbnQgTk9PUCBDT05URVhUK3N3aXRjaGVzUmVhckNlbnRlcgorCitjb250ZXh0IHN3aXRjaGVzRnJvbnRSZWFyCitob3RrZXkgTGVmdFN3aXRjaEZyb250IE5PT1AgQ09OVEVYVCtzd2l0Y2hlc0NlbnRlclJlYXIKK2hvdGtleSBSaWdodFN3aXRjaFJlYXIgTk9PUCBDT05URVhUK3N3aXRjaGVzRnJvbnRDZW50ZXIKKworY29udGV4dCBzd2l0Y2hlc0Zyb250RnJvbnQKK2hvdGtleSBMZWZ0U3dpdGNoRnJvbnQgTk9PUCBDT05URVhUK3N3aXRjaGVzQ2VudGVyRnJvbnQKK2hvdGtleSBSaWdodFN3aXRjaEZyb250IE5PT1AgQ09OVEVYVCtzd2l0Y2hlc0Zyb250Q2VudGVyCisKK2NvbnRleHQgZGVmYXVsdAoraG90a2V5IExlZnRTd2l0Y2hSZWFyIENPTlRFWFQrc3dpdGNoZXNSZWFyQ2VudGVyIE5PT1AKK2hvdGtleSBMZWZ0U3dpdGNoRnJvbnQgQ09OVEVYVCtzd2l0Y2hlc0Zyb250Q2VudGVyIE5PT1AKK2hvdGtleSBSaWdodFN3aXRjaFJlYXIgQ09OVEVYVCtzd2l0Y2hlc0NlbnRlclJlYXIgTk9PUAoraG90a2V5IFJpZ2h0U3dpdGNoRnJvbnQgQ09OVEVYVCtzd2l0Y2hlc0NlbnRlckZyb250IE5PT1AKZGlmZiAtLWdpdCBhL1RhYmxlcy5icmFpbGxlYmFjay9wbS90cmlvLmt0YiBiL1RhYmxlcy5icmFpbGxlYmFjay9wbS90cmlvLmt0YgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNzAyNTU2Ci0tLSAvZGV2L251bGwKKysrIGIvVGFibGVzLmJyYWlsbGViYWNrL3BtL3RyaW8ua3RiCkBAIC0wLDAgKzEsMjMgQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyMgICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisjCisjIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyMKKyMgQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCit0aXRsZSBQYXBlbm1laWVyIEJyYWlsbGVYIFRyaW8KKworYXNzaWduIHN0YXR1c0tleXMgMAoraW5jbHVkZSBiYXIua3RpCitpbmNsdWRlIGtleWJvYXJkLmt0aQpkaWZmIC0tZ2l0IGEvVGFibGVzLmJyYWlsbGViYWNrL3NrL2JkcC5rdGIgYi9UYWJsZXMuYnJhaWxsZWJhY2svc2svYmRwLmt0YgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMDBlNzk1Ci0tLSAvZGV2L251bGwKKysrIGIvVGFibGVzLmJyYWlsbGViYWNrL3NrL2JkcC5rdGIKQEAgLTAsMCArMSwxOTUgQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyMgICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisjCisjIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyMKKyMgQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCit0aXRsZSBTZWlrYSBCcmFpbGxlIERpc3BsYXlzCisKK25vdGUgVGhlIHJvdW5kIGtleXMgdG8gdGhlIGxlZnQvcmlnaHQgb2YgdGhlIGJyYWlsbGUgY2VsbHMgYXJlIG5hbWVkIEsxIGFuZCBLOC4KK25vdGUgVGhlIGxlZnQvcmlnaHQgZW5kcyBvZiB0aGUgbGVmdCByb2NrZXIgYXJlIG5hbWVkIEsyIGFuZCBLMy4KK25vdGUgVGhlIGxvbmcga2V5cyB0byB0aGUgbGVmdC9yaWdodCBvZiB0aGUgY2VudGVyIGFyZSBuYW1lZCBLNCBhbmQgSzUuCitub3RlIFRoZSBsZWZ0L3JpZ2h0IGVuZHMgb2YgdGhlIHJpZ2h0IHJvY2tlciBhcmUgbmFtZWQgSzYgYW5kIEs3LgorCisjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBEZWZhdWx0IEJpbmRpbmdzICMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK2JpbmQgIVJvdXRpbmdLZXkgUk9VVEUKKworYmluZCBLMSBGV0lOTFQKK2JpbmQgSzggRldJTlJUCisKK2JpbmQgSzIgTE5VUAorYmluZCBLMyBMTkROCisjT3ZlcnJpZGRlbiBieSBCcmFpbGxlQmFjaworI2JpbmQgSzIrSzMgTE5CRUcKKworI092ZXJyaWRkZW4gYnkgQnJhaWxsZUJhY2sKKyNiaW5kIEs2IEZXSU5MVFNLSVAKKyNPdmVycmlkZGVuIGJ5IEJyYWlsbGVCYWNrCisjYmluZCBLNyBGV0lOUlRTS0lQCisjT3ZlcnJpZGRlbiBieSBCcmFpbGxlQmFjaworI2JpbmQgSzYrSzcgUEFTVEUKKworYmluZCBLNCBDU1JUUksKK2JpbmQgSzUgUkVUVVJOCisjT3ZlcnJpZGRlbiBieSBCcmFpbGxlQmFjaworI2JpbmQgSzQrSzUgQ1NSSk1QX1ZFUlQKKworYmluZCBLNitLMiBUT1BfTEVGVAorYmluZCBLNitLMyBCT1RfTEVGVAorYmluZCBLNytLMiBUT1AKK2JpbmQgSzcrSzMgQk9UCisKK2JpbmQgSzQrSzIgQVRUUlVQCitiaW5kIEs0K0szIEFUVFJETgorI092ZXJyaWRkZW4gYnkgQnJhaWxsZUJhY2sKKyNiaW5kIEs1K0syIFBSRElGTE4KKyNPdmVycmlkZGVuIGJ5IEJyYWlsbGVCYWNrCisjYmluZCBLNStLMyBOWERJRkxOCisjT3ZlcnJpZGRlbiBieSBCcmFpbGxlQmFjaworI2JpbmQgSzQrSzYgUFJQUk9NUFQKKyNPdmVycmlkZGVuIGJ5IEJyYWlsbGVCYWNrCisjYmluZCBLNCtLNyBOWFBST01QVAorI092ZXJyaWRkZW4gYnkgQnJhaWxsZUJhY2sKKyNiaW5kIEs1K0s2IFBSUEdSUEgKKyNPdmVycmlkZGVuIGJ5IEJyYWlsbGVCYWNrCisjYmluZCBLNStLNyBOWFBHUlBICisKK2JpbmQgSzErSzgrSzIgQ09OVEVYVCtQUklOREVOVAorYmluZCBLMStLOCtLMyBDT05URVhUK05YSU5ERU5UCitiaW5kIEsxK0s4K0s0IENPTlRFWFQrU0VUTEVGVAorYmluZCBLMStLOCtLNSBDT05URVhUK0RFU0NDSEFSCitiaW5kIEsxK0s4K0s2IENPTlRFWFQrUFJESUZDSEFSCitiaW5kIEsxK0s4K0s3IENPTlRFWFQrTlhESUZDSEFSCisKK2JpbmQgSzErSzgrSzIrSzYgQ09OVEVYVCtDTElQX05FVworYmluZCBLMStLOCtLMitLNyBDT05URVhUK0NMSVBfQURECitiaW5kIEsxK0s4K0szK0s2IENPTlRFWFQrQ09QWV9MSU5FCitiaW5kIEsxK0s4K0szK0s3IENPTlRFWFQrQ09QWV9SRUNUCisKK2JpbmQgSzErSzIgSEVMUAorI092ZXJyaWRkZW4gYnkgQnJhaWxsZUJhY2sKKyNiaW5kIEsxK0szIExFQVJOCitiaW5kIEsxK0s0IFBSRUZMT0FECitiaW5kIEsxK0s1IFBSRUZTQVZFCitiaW5kIEsxK0s2IFBSRUZNRU5VCitiaW5kIEsxK0s3IElORk8KKworYmluZCBLOCtLMiBESVNQTUQKK2JpbmQgSzgrSzMgRlJFRVpFCitiaW5kIEs4K0s2IFNJWERPVFMKK2JpbmQgSzgrSzcgU0tQSURMTlMKKworCisjIyMjIyMjIyMjIyMjIyMjIworIyBNZW51IEJpbmRpbmdzICMKKyMjIyMjIyMjIyMjIyMjIyMjCisKKyNVbnVzZWQgYnkgQnJhaWxsZWJhY2sKKyNjb250ZXh0IG1lbnUKKworI2JpbmQgSzEgRldJTkxUCisjYmluZCBLOCBGV0lOUlQKKworI2JpbmQgSzIgTUVOVV9QUkVWX0lURU0KKyNiaW5kIEszIE1FTlVfTkVYVF9JVEVNCisKKyNiaW5kIEs2IE1FTlVfUFJFVl9TRVRUSU5HCisjYmluZCBLNyBNRU5VX05FWFRfU0VUVElORworCisjYmluZCBLNCBNRU5VX0ZJUlNUX0lURU0KKyNiaW5kIEs1IE1FTlVfTEFTVF9JVEVNCisKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBSb3V0aW5nIEtleSBBbHRlcm5hdGl2ZXMgIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjVW51c2VkIGJ5IEJyYWlsbGViYWNrCisjY29udGV4dCBDTElQX05FVworI2JpbmQgIVJvdXRpbmdLZXkgQ0xJUF9ORVcKKworI2NvbnRleHQgQ0xJUF9BREQKKyNiaW5kICFSb3V0aW5nS2V5IENMSVBfQURECisKKyNjb250ZXh0IENPUFlfTElORQorI2JpbmQgIVJvdXRpbmdLZXkgQ09QWV9MSU5FCisKKyNjb250ZXh0IENPUFlfUkVDVAorI2JpbmQgIVJvdXRpbmdLZXkgQ09QWV9SRUNUCisKKyNjb250ZXh0IFNFVExFRlQKKyNiaW5kICFSb3V0aW5nS2V5IFNFVExFRlQKKworI2NvbnRleHQgREVTQ0NIQVIKKyNiaW5kICFSb3V0aW5nS2V5IERFU0NDSEFSCisKKyNjb250ZXh0IFBSSU5ERU5UCisjYmluZCAhUm91dGluZ0tleSBQUklOREVOVAorCisjY29udGV4dCBOWElOREVOVAorI2JpbmQgIVJvdXRpbmdLZXkgTlhJTkRFTlQKKworI2NvbnRleHQgUFJESUZDSEFSCisjYmluZCAhUm91dGluZ0tleSBQUkRJRkNIYXIKKworI2NvbnRleHQgTlhESUZDSEFSCisjYmluZCAhUm91dGluZ0tleSBOWERJRkNIYXIKKworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQnJhaWxsZUJhY2sgQmluZGluZ3MgIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMgVE9ETzogQWRkIG1vcmUgZ29vZ2xlJ3MgY3VzdG9taXplZCBzaG9ydGN1dHMKKyMgTG9uZyBwcmVzcyBjdXJyZW50bHkgZm9jdXNlZCBpdGVtCitiaW5kIEsyK0szK0s2K0s3IFJPVVRFKzI1NQorIyBCYWNrIGtleQorYmluZCBLMitLMyBLRVlfRVNDQVBFCisjIEhvbWUga2V5CitiaW5kIEs0K0s1IEtFWV9GVU5DVElPTisxMDkKKyMgUmVjZW50IGFwcHMga2V5CitiaW5kIEs2K0s3IEtFWV9GVU5DVElPTisxMTAKKyMgTm90aWZpY2F0aW9ucyBiYXIKK2JpbmQgSzIrSzQgS0VZX0ZVTkNUSU9OKzExMQorIyBTY3JvbGwgYmFja3dhcmRzCitiaW5kIEszK0s2IFdJTlVQCisjIFNjcm9sbCBmb3J3YXJkcworYmluZCBLMytLNyBXSU5ETgorIyBQcmV2aW91cyBlbGVtZW50CitiaW5kIEs2IENIUkxUCisjIE5leHQgZWxlbWVudAorYmluZCBLNyBDSFJSVAorIyBLZXlib2FyZCBoZWxwCitiaW5kIEsxK0szIExFQVJOCisjIE5leHQgaGVhZGluZworYmluZCBLNStLNyBLRVlfRlVOQ1RJT04rMTEzCisjIFByZXZpb3VzIGhlYWRpbmcKK2JpbmQgSzUrSzYgS0VZX0ZVTkNUSU9OKzExNAorIyBOZXh0IGNvbnRyb2wKK2JpbmQgSzQrSzcgS0VZX0ZVTkNUSU9OKzExNQorIyBQcmV2aW91cyBjb250cm9sCitiaW5kIEs0K0s2IEtFWV9GVU5DVElPTisxMTYKKyMgTmV4dCBsaW5rCitiaW5kIEs1K0szIEtFWV9GVU5DVElPTisxMTcKKyMgUHJldmlvdXMgbGluaworYmluZCBLNStLMiBLRVlfRlVOQ1RJT04rMTE4CisjIFRvcCBpdGVtIGluIHZpZXcKK2JpbmQgSzIrSzYgVE9QCisjIEJvdHRvbSBpdGVtIGluIHZpZXcKK2JpbmQgSzIrSzcgQk9UCisjIEluY3JlbWVudGFsIHNlYXJjaCBtYXBwaW5nIG9taXR0ZWQgc2luY2Ugbm8gYnJhaWxsZSBpbnB1dCBrZXlib2FyZApkaWZmIC0tZ2l0IGEvVGFibGVzLmJyYWlsbGViYWNrL3NrL250ay5rdGIgYi9UYWJsZXMuYnJhaWxsZWJhY2svc2svbnRrLmt0YgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZGFmNWMyCi0tLSAvZGV2L251bGwKKysrIGIvVGFibGVzLmJyYWlsbGViYWNrL3NrL250ay5rdGIKQEAgLTAsMCArMSwxNzMgQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyMgICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisjCisjIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyMKKyMgQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCit0aXRsZSBTZWlrYSBOb3RlIFRha2VycworCisjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBEZWZhdWx0IEJpbmRpbmdzICMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK2JpbmQgTGVmdEpveXN0aWNrUHJlc3MgSEVMUAorYmluZCBSaWdodEpveXN0aWNrUHJlc3MgTEVBUk4KKworYmluZCBMZWZ0QnV0dG9uK1JpZ2h0QnV0dG9uIEhPTUUKK2JpbmQgTGVmdEJ1dHRvbiBGV0lOTFQKK2JpbmQgUmlnaHRCdXR0b24gRldJTlJUCisKK2JpbmQgTGVmdEpveXN0aWNrVXAgdG9wCitiaW5kIExlZnRKb3lzdGlja0Rvd24gQk9UCitiaW5kIExlZnRKb3lzdGlja0xlZnQgTE5CRUcKK2JpbmQgTGVmdEpveXN0aWNrUmlnaHQgTE5FTkQKKworYmluZCBSaWdodEpveXN0aWNrVXAgTE5VUAorYmluZCBSaWdodEpveXN0aWNrRG93biBMTkROCitiaW5kIFJpZ2h0Sm95c3RpY2tMZWZ0IENIUkxUCitiaW5kIFJpZ2h0Sm95c3RpY2tSaWdodCBDSFJSVAorCitiaW5kIExlZnRKb3lzdGlja0xlZnQrUmlnaHRKb3lzdGlja1VwIEFUVFJVUAorYmluZCBMZWZ0Sm95c3RpY2tMZWZ0K1JpZ2h0Sm95c3RpY2tEb3duIEFUVFJETgorYmluZCBMZWZ0Sm95c3RpY2tSaWdodCtSaWdodEpveXN0aWNrVXAgUFJESUZMTgorYmluZCBMZWZ0Sm95c3RpY2tSaWdodCtSaWdodEpveXN0aWNrRG93biBOWERJRkxOCitiaW5kIExlZnRKb3lzdGlja1VwK1JpZ2h0Sm95c3RpY2tVcCBQUlBST01QVAorYmluZCBMZWZ0Sm95c3RpY2tVcCtSaWdodEpveXN0aWNrRG93biBOWFBST01QVAorYmluZCBMZWZ0Sm95c3RpY2tEb3duK1JpZ2h0Sm95c3RpY2tVcCBQUlBHUlBICitiaW5kIExlZnRKb3lzdGlja0Rvd24rUmlnaHRKb3lzdGlja0Rvd24gTlhQR1JQSAorCitiaW5kIExlZnRKb3lzdGlja0xlZnQrUmlnaHRKb3lzdGlja0xlZnQgSFdJTkxUCitiaW5kIExlZnRKb3lzdGlja0xlZnQrUmlnaHRKb3lzdGlja1JpZ2h0IEhXSU5SVAorYmluZCBMZWZ0Sm95c3RpY2tSaWdodCtSaWdodEpveXN0aWNrTGVmdCBGV0lOTFRTS0lQCitiaW5kIExlZnRKb3lzdGlja1JpZ2h0K1JpZ2h0Sm95c3RpY2tSaWdodCBGV0lOUlRTS0lQCitiaW5kIExlZnRKb3lzdGlja1VwK1JpZ2h0Sm95c3RpY2tMZWZ0IFBSU0VBUkNICitiaW5kIExlZnRKb3lzdGlja1VwK1JpZ2h0Sm95c3RpY2tSaWdodCBOWFNFQVJDSAorYmluZCBMZWZ0Sm95c3RpY2tEb3duK1JpZ2h0Sm95c3RpY2tMZWZ0IEJBQ0sKK2JpbmQgTGVmdEpveXN0aWNrRG93bitSaWdodEpveXN0aWNrUmlnaHQgQ1NSSk1QX1ZFUlQKKworYmluZCBMZWZ0Sm95c3RpY2tQcmVzcytSaWdodEpveXN0aWNrVXAgSU5GTworYmluZCBMZWZ0Sm95c3RpY2tQcmVzcytSaWdodEpveXN0aWNrRG93biBQUkVGTUVOVQorYmluZCBMZWZ0Sm95c3RpY2tQcmVzcytSaWdodEpveXN0aWNrTGVmdCBQUkVGTE9BRAorYmluZCBMZWZ0Sm95c3RpY2tQcmVzcytSaWdodEpveXN0aWNrUmlnaHQgUFJFRlNBVkUKKworYmluZCBSb3V0aW5nS2V5IFJPVVRFCitiaW5kIExlZnRCdXR0b24rUm91dGluZ0tleSBTRVRMRUZUCitiaW5kIFJpZ2h0QnV0dG9uK1JvdXRpbmdLZXkgREVTQ0NIQVIKKworYmluZCBSaWdodEpveXN0aWNrVXArUm91dGluZ0tleSBQUklOREVOVAorYmluZCBSaWdodEpveXN0aWNrRG93bitSb3V0aW5nS2V5IE5YSU5ERU5UCitiaW5kIFJpZ2h0Sm95c3RpY2tMZWZ0K1JvdXRpbmdLZXkgUFJESUZDSEFSCitiaW5kIFJpZ2h0Sm95c3RpY2tSaWdodCtSb3V0aW5nS2V5IE5YRElGQ0hBUgorCitiaW5kIExlZnRKb3lzdGlja1ByZXNzK1JvdXRpbmdLZXkgU0VUTUFSSworYmluZCBSaWdodEpveXN0aWNrUHJlc3MrUm91dGluZ0tleSBHT1RPTUFSSworCitiaW5kIExlZnRKb3lzdGlja1ByZXNzK1JpZ2h0Sm95c3RpY2tQcmVzcyBQQVNURQorYmluZCBSb3V0aW5nS2V5K1JvdXRpbmdLZXkgQ0xJUF9DT1BZCitiaW5kIExlZnRKb3lzdGlja1VwK1JvdXRpbmdLZXkrUm91dGluZ0tleSBDTElQX0FQUEVORAorYmluZCBMZWZ0Sm95c3RpY2tMZWZ0K1JvdXRpbmdLZXkgQ0xJUF9ORVcKK2JpbmQgTGVmdEpveXN0aWNrVXArUm91dGluZ0tleSBDTElQX0FERAorYmluZCBMZWZ0Sm95c3RpY2tSaWdodCtSb3V0aW5nS2V5IENPUFlfTElORQorYmluZCBMZWZ0Sm95c3RpY2tEb3duK1JvdXRpbmdLZXkgQ09QWV9SRUNUCisKK2Fzc2lnbiBjaG9yZCBTcGFjZSsKK2luY2x1ZGUgLi4vY2hvcmRzLmt0aQorCittYXAgRG90MSBET1QxCittYXAgRG90MiBET1QyCittYXAgRG90MyBET1QzCittYXAgRG90NCBET1Q0CittYXAgRG90NSBET1Q1CittYXAgRG90NiBET1Q2CittYXAgRG90NyBET1Q3CittYXAgRG90OCBET1Q4CisjT3ZlcnJpZGRlbiBieSBCcmFpbGxlQmFjay4KKyNtYXAgQmFja3NwYWNlIE1FVEEKK21hcCBTcGFjZSBTUEFDRQorCitiaW5kIFNwYWNlK0xlZnRKb3lzdGlja1VwIEtFWV9QQUdFX1VQCitiaW5kIFNwYWNlK0xlZnRKb3lzdGlja0Rvd24gS0VZX1BBR0VfRE9XTgorYmluZCBTcGFjZStMZWZ0Sm95c3RpY2tMZWZ0IEtFWV9IT01FCitiaW5kIFNwYWNlK0xlZnRKb3lzdGlja1JpZ2h0IEtFWV9FTkQKK2JpbmQgU3BhY2UrTGVmdEpveXN0aWNrUHJlc3MgS0VZX0lOU0VSVAorCitiaW5kIFNwYWNlK1JpZ2h0Sm95c3RpY2tVcCBLRVlfQ1VSU09SX1VQCitiaW5kIFNwYWNlK1JpZ2h0Sm95c3RpY2tEb3duIEtFWV9DVVJTT1JfRE9XTgorYmluZCBTcGFjZStSaWdodEpveXN0aWNrTGVmdCBLRVlfQ1VSU09SX0xFRlQKK2JpbmQgU3BhY2UrUmlnaHRKb3lzdGlja1JpZ2h0IEtFWV9DVVJTT1JfUklHSFQKK2JpbmQgU3BhY2UrUmlnaHRKb3lzdGlja1ByZXNzIEtFWV9ERUxFVEUKKworYmluZCBTcGFjZStSb3V0aW5nS2V5IEtFWV9GVU5DVElPTgorYmluZCBCYWNrc3BhY2UrUm91dGluZ0tleSBTV0lUQ0hWVAorCitiaW5kIEJhY2tzcGFjZStMZWZ0Sm95c3RpY2tVcCBTQVlfTE9VREVSCitiaW5kIEJhY2tzcGFjZStMZWZ0Sm95c3RpY2tEb3duIFNBWV9TT0ZURVIKK2JpbmQgQmFja3NwYWNlK0xlZnRKb3lzdGlja0xlZnQgU0FZX1NMT1dFUgorYmluZCBCYWNrc3BhY2UrTGVmdEpveXN0aWNrUmlnaHQgU0FZX0ZBU1RFUgorYmluZCBCYWNrc3BhY2UrTGVmdEpveXN0aWNrUHJlc3MgQVVUT1NQRUFLCisKK2JpbmQgQmFja3NwYWNlK1JpZ2h0Sm95c3RpY2tVcCBTQVlfQUJPVkUKK2JpbmQgQmFja3NwYWNlK1JpZ2h0Sm95c3RpY2tEb3duIFNBWV9CRUxPVworYmluZCBCYWNrc3BhY2UrUmlnaHRKb3lzdGlja0xlZnQgTVVURQorYmluZCBCYWNrc3BhY2UrUmlnaHRKb3lzdGlja1JpZ2h0IFNBWV9MSU5FCitiaW5kIEJhY2tzcGFjZStSaWdodEpveXN0aWNrUHJlc3MgU1BLSE9NRQorCisKKyMjIyMjIyMjIyMjIyMjIyMjCisjIE1lbnUgQmluZGluZ3MgIworIyMjIyMjIyMjIyMjIyMjIyMKKworI1VudXNlZCBieSBCcmFpbGxlQmFjay4KKyNjb250ZXh0IG1lbnUKKworI2JpbmQgUmlnaHRKb3lzdGlja1ByZXNzIFBSRUZNRU5VCisjYmluZCBSaWdodEpveXN0aWNrVXAgTUVOVV9QUkVWX0lURU0KKyNiaW5kIFJpZ2h0Sm95c3RpY2tEb3duIE1FTlVfTkVYVF9JVEVNCisjYmluZCBSaWdodEpveXN0aWNrTGVmdCBNRU5VX1BSRVZfU0VUVElORworI2JpbmQgUmlnaHRKb3lzdGlja1JpZ2h0IE1FTlVfTkVYVF9TRVRUSU5HCisKKyNiaW5kIExlZnRKb3lzdGlja1VwIE1FTlVfRklSU1RfSVRFTQorI2JpbmQgTGVmdEpveXN0aWNrRG93biBNRU5VX0xBU1RfSVRFTQorI2JpbmQgTGVmdEpveXN0aWNrTGVmdCBQUkVGTE9BRAorI2JpbmQgTGVmdEpveXN0aWNrUmlnaHQgUFJFRlNBVkUKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEJyYWlsbGVCYWNrIEJpbmRpbmdzICMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjIEFjdGl2YXRlIGN1cnJlbnRseSBmb2N1c2VkIGl0ZW0KK2JpbmQgTGVmdEpveXN0aWNrUHJlc3MgUk9VVEUrMTI3CitiaW5kIFJpZ2h0Sm95c3RpY2tQcmVzcyBST1VURSsxMjcKKworIyBMb25nIHByZXNzIGN1cnJlbnRseSBmb2N1c2VkIGl0ZW0KK2JpbmQgU3BhY2UrTGVmdEpveXN0aWNrUHJlc3MgUk9VVEUrMjU1CitiaW5kIFNwYWNlK1JpZ2h0Sm95c3RpY2tQcmVzcyBST1VURSsyNTUKKworIyBMb25nIHByZXNzIGl0ZW0gYXQgcm91dGluZyBrZXkuCitiaW5kIFNwYWNlK1JvdXRpbmdLZXkgUk9VVEUrMTI4CisKK21hcCBCYWNrc3BhY2UgU1BBQ0UKK2JpbmQgQmFja3NwYWNlK1NwYWNlIFNQQUNFCisKK2luY2x1ZGUgLi4vYW5kcm9pZC1jaG9yZHMua3RpCisKK2Fzc2lnbiBjaG9yZCBTcGFjZQoraW5jbHVkZSAuLi9hbmRyb2lkLWNob3Jkcy5rdGkKKworYXNzaWduIGNob3JkIEJhY2tzcGFjZQoraW5jbHVkZSAuLi9hbmRyb2lkLWNob3Jkcy5rdGkKKworYXNzaWduIGNob3JkIFNwYWNlK0JhY2tzcGFjZQoraW5jbHVkZSAuLi9hbmRyb2lkLWNob3Jkcy5rdGkKZGlmZiAtLWdpdCBhL1RhYmxlcy5icmFpbGxlYmFjay9zcGVlY2gua3RpIGIvVGFibGVzLmJyYWlsbGViYWNrL3NwZWVjaC5rdGkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTY3ZjFhMQotLS0gL2Rldi9udWxsCisrKyBiL1RhYmxlcy5icmFpbGxlYmFjay9zcGVlY2gua3RpCkBAIC0wLDAgKzEsNTcgQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyMgICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisjCisjIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyMKKyMgQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitiaW5kIFx7c3BlZWNofURvdDEgQVVUT1NQRUFLK29uCitiaW5kIFx7c3BlZWNofURvdDIgTVVURQorYmluZCBce3NwZWVjaH1Eb3QzIEFVVE9TUEVBSytvZmYKK2JpbmQgXHtzcGVlY2h9RG90NyBTUEVBS19DVVJSX0xPQ04KKworYmluZCBce3NwZWVjaH1Eb3Q0IFNBWV9BQk9WRQorYmluZCBce3NwZWVjaH1Eb3Q1IFNBWV9MSU5FCitiaW5kIFx7c3BlZWNofURvdDYgU0FZX0JFTE9XCitiaW5kIFx7c3BlZWNofURvdDggU0FZX0FMTAorCitiaW5kIFx7c3BlZWNofURvdDErRG90NCBTUEVBS19QUkVWX0xJTkUKK2JpbmQgXHtzcGVlY2h9RG90MStEb3Q1IFNQRUFLX0NVUlJfTElORQorYmluZCBce3NwZWVjaH1Eb3QxK0RvdDYgU1BFQUtfTkVYVF9MSU5FCitiaW5kIFx7c3BlZWNofURvdDErRG90OCBTUEVBS19JTkRFTlQKKworYmluZCBce3NwZWVjaH1Eb3QyK0RvdDQgU1BFQUtfUFJFVl9XT1JECitiaW5kIFx7c3BlZWNofURvdDIrRG90NSBTUEVBS19DVVJSX1dPUkQKK2JpbmQgXHtzcGVlY2h9RG90MitEb3Q2IFNQRUFLX05FWFRfV09SRAorYmluZCBce3NwZWVjaH1Eb3QyK0RvdDggU1BFTExfQ1VSUl9XT1JECisKK2JpbmQgXHtzcGVlY2h9RG90MytEb3Q0IFNQRUFLX1BSRVZfQ0hBUgorYmluZCBce3NwZWVjaH1Eb3QzK0RvdDUgU1BFQUtfQ1VSUl9DSEFSCitiaW5kIFx7c3BlZWNofURvdDMrRG90NiBTUEVBS19ORVhUX0NIQVIKK2JpbmQgXHtzcGVlY2h9RG90MytEb3Q4IERFU0NfQ1VSUl9DSEFSCisKK2JpbmQgXHtzcGVlY2h9RG90NytEb3Q0IFNQRUFLX0ZSU1RfTElORQorYmluZCBce3NwZWVjaH1Eb3Q3K0RvdDUgU1BFQUtfRlJTVF9DSEFSCitiaW5kIFx7c3BlZWNofURvdDcrRG90NiBTUEVBS19MQVNUX0NIQVIKK2JpbmQgXHtzcGVlY2h9RG90NytEb3Q4IFNQRUFLX0xBU1RfTElORQorCitiaW5kIFx7c3BlZWNofVNwYWNlK0RvdDEgU0FZX1NPRlRFUgorYmluZCBce3NwZWVjaH1TcGFjZStEb3Q0IFNBWV9MT1VERVIKK2JpbmQgXHtzcGVlY2h9U3BhY2UrRG90MiBTQVlfU0xPV0VSCitiaW5kIFx7c3BlZWNofVNwYWNlK0RvdDUgU0FZX0ZBU1RFUgorYmluZCBce3NwZWVjaH1TcGFjZStEb3QzIFNBWV9MT1dFUgorYmluZCBce3NwZWVjaH1TcGFjZStEb3Q2IFNBWV9ISUdIRVIKK2JpbmQgXHtzcGVlY2h9U3BhY2UrRG90NyBST1VURV9DVVJSX0xPQ04KK2JpbmQgXHtzcGVlY2h9U3BhY2UrRG90OCBSRVRVUk4KKwpkaWZmIC0tZ2l0IGEvVGFibGVzLmJyYWlsbGViYWNrL3RvZ2dsZS5rdGkgYi9UYWJsZXMuYnJhaWxsZWJhY2svdG9nZ2xlLmt0aQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NTYxNWQ5Ci0tLSAvZGV2L251bGwKKysrIGIvVGFibGVzLmJyYWlsbGViYWNrL3RvZ2dsZS5rdGkKQEAgLTAsMCArMSwyMSBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorIyAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyMKKyMgQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorIworIyBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorIworIyBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisjIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyMgbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisjCisjIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK2JpbmQgXHt0b2dnbGVLZXlzfSBce3RvZ2dsZUNvbW1hbmR9CitiaW5kIFx7dG9nZ2xlS2V5c30rXHt0b2dnbGVPbn0gXHt0b2dnbGVDb21tYW5kfStvbgorYmluZCBce3RvZ2dsZUtleXN9K1x7dG9nZ2xlT2ZmfSBce3RvZ2dsZUNvbW1hbmR9K29mZgpkaWZmIC0tZ2l0IGEvVGFibGVzLmJyYWlsbGViYWNrL3ZvL2JwLmt0YiBiL1RhYmxlcy5icmFpbGxlYmFjay92by9icC5rdGIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGY2Y2VhYgotLS0gL2Rldi9udWxsCisrKyBiL1RhYmxlcy5icmFpbGxlYmFjay92by9icC5rdGIKQEAgLTAsMCArMSwyMSBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorIyAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyMKKyMgQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorIworIyBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorIworIyBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisjIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyMgbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisjCisjIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK3RpdGxlIEJyYWlsbGUgUGVuIDEyCisKK2luY2x1ZGUgLi4vYnAvYWxsLmt0aQpkaWZmIC0tZ2l0IGEvVGFibGVzLy5naXRpZ25vcmUgYi9UYWJsZXMvLmdpdGlnbm9yZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZWYwM2M2Ci0tLSAvZGV2L251bGwKKysrIGIvVGFibGVzLy5naXRpZ25vcmUKQEAgLTAsMCArMSBAQAorL1Byb2ZpbGVzLwpkaWZmIC0tZ2l0IGEvVGFibGVzL0F0dHJpYnV0ZXMvaW52bGVmdF9yaWdodC5hdGIgYi9UYWJsZXMvQXR0cmlidXRlcy9pbnZsZWZ0X3JpZ2h0LmF0YgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYWExNGFiCi0tLSAvZGV2L251bGwKKysrIGIvVGFibGVzL0F0dHJpYnV0ZXMvaW52bGVmdF9yaWdodC5hdGIKQEAgLTAsMCArMSwyOCBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorIyAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyMKKyMgQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorIworIyBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorIworIyBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisjIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyMgbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisjCisjIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMgQlJMVFRZIEF0dHJpYnV0ZXMgVGFibGUgLSBpbnZlcnNlIGZvcmVncm91bmQgY29sb3VyIGluIHRoZSBsZWZ0IGNvbHVtbiBhbmQgYmFja2dyb3VuZCBjb2xvdXIgaW4gdGhlIHJpZ2h0IGNvbHVtbgorCitkb3QgMSB+ZmctYmx1ZQorZG90IDIgfmZnLWdyZWVuCitkb3QgMyB+ZmctcmVkCitkb3QgNyB+ZmctYnJpZ2h0Citkb3QgNCA9YmctYmx1ZQorZG90IDUgPWJnLWdyZWVuCitkb3QgNiA9YmctcmVkCitkb3QgOCA9YmxpbmsKZGlmZiAtLWdpdCBhL1RhYmxlcy9BdHRyaWJ1dGVzL2xlZnRfcmlnaHQuYXRiIGIvVGFibGVzL0F0dHJpYnV0ZXMvbGVmdF9yaWdodC5hdGIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDRkN2RjMAotLS0gL2Rldi9udWxsCisrKyBiL1RhYmxlcy9BdHRyaWJ1dGVzL2xlZnRfcmlnaHQuYXRiCkBAIC0wLDAgKzEsMjggQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyMgICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisjCisjIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyMKKyMgQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjIEJSTFRUWSBBdHRyaWJ1dGVzIFRhYmxlIC0gZm9yZWdyb3VuZCBjb2xvdXIgaW4gdGhlIGxlZnQgY29sdW1uIGFuZCBiYWNrZ3JvdW5kIGNvbG91ciBpbiB0aGUgcmlnaHQgY29sdW1uCisKK2RvdCAxID1mZy1ibHVlCitkb3QgMiA9ZmctZ3JlZW4KK2RvdCAzID1mZy1yZWQKK2RvdCA3ID1mZy1icmlnaHQKK2RvdCA0ID1iZy1ibHVlCitkb3QgNSA9YmctZ3JlZW4KK2RvdCA2ID1iZy1yZWQKK2RvdCA4ID1ibGluawpkaWZmIC0tZ2l0IGEvVGFibGVzL0F0dHJpYnV0ZXMvdXBwZXJfbG93ZXIuYXRiIGIvVGFibGVzL0F0dHJpYnV0ZXMvdXBwZXJfbG93ZXIuYXRiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEyMDAxM2YKLS0tIC9kZXYvbnVsbAorKysgYi9UYWJsZXMvQXR0cmlidXRlcy91cHBlcl9sb3dlci5hdGIKQEAgLTAsMCArMSwyOCBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorIyAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyMKKyMgQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorIworIyBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorIworIyBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisjIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyMgbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisjCisjIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMgQlJMVFRZIEF0dHJpYnV0ZXMgVGFibGUgLSBmb3JlZ3JvdW5kIGNvbG91ciBpbiB0aGUgdXBwZXIgc3F1YXJlIGFuZCBiYWNrZ3JvdW5kIGNvbG91ciBpbiB0aGUgbG93ZXIgc3F1YXJlCisKK2RvdCAxID1mZy1yZWQKK2RvdCA0ID1mZy1ncmVlbgorZG90IDIgPWZnLWJsdWUKK2RvdCA1ID1mZy1icmlnaHQKK2RvdCAzID1iZy1yZWQKK2RvdCA2ID1iZy1ncmVlbgorZG90IDcgPWJnLWJsdWUKK2RvdCA4ID1ibGluawpkaWZmIC0tZ2l0IGEvVGFibGVzL0NvbnRyYWN0aW9uL2FmLmN0YiBiL1RhYmxlcy9Db250cmFjdGlvbi9hZi5jdGIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTlhNTg2OAotLS0gL2Rldi9udWxsCisrKyBiL1RhYmxlcy9Db250cmFjdGlvbi9hZi5jdGIKQEAgLTAsMCArMSw3NyBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorIyAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyMKKyMgQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorIworIyBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorIworIyBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisjIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyMgbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisjCisjIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMgQlJMVFRZIENvbnRyYWN0aW9uIFRhYmxlIC0gQWZyaWthYW5zIChjb250cmFjdGVkKQorIworIyBTYW11ZWwgVGhpYmF1bHQgPHNhbXVlbC50aGliYXVsdEBlbnMtbHlvbi5vcmc+CisjIAorIyBUaGlzIHRhYmxlIGlzIGJhc2VkIG9uIHRoZSBVbmVzY28gcmVwb3J0IG9uIHRoZSBwcm9ncmVzcyBvZiB1bmlmaWNhdGlvbiBvZgorIyBicmFpbGxlIHdyaXRpbmcgwqvCoEwnw4lDUklUVVJFIEJSQUlMTEUgREFOUyBMRSBNT05ERcKgwrssIGJ5IFNpciBDbHV0aGEKKyMgTUFDS0VOWklFOiBodHRwOi8vdW5lc2RvYy51bmVzY28ub3JnL2ltYWdlcy8wMDEzLzAwMTM1Mi8xMzUyNTFmby5wZGYKKyMgVGhlIGRvY3VtZW50IGlzIGRhdGVkIDE5NTQsIHNvIHRoaXMgdGFibGUgbWF5IGJlIHF1aXRlIG91dGRhdGVkLgorCitpbmNsdWRlIGxldHRlcnMtbGF0aW4uY3RpCisKK2Fsd2F5cyBhYSAyCithbHdheXMgYWFuIDEyNgorYWx3YXlzIGFsIDEyNDYKK2Fsd2F5cyBhbiAxMjM0NgorYWx3YXlzIGJ5IDM1NgorYWx3YXlzIGRldXIgMjU2CithbHdheXMgZGllIDIzNDYKK2Fsd2F5cyBlZSAxNTYKK2Fsd2F5cyBlZSAyMworYWx3YXlzIGVpIDE0NgorYWx3YXlzIGVsIDM0NTYKK2Fsd2F5cyBlbiAyNgorYWx3YXlzIGVyIDEyNDU2CithbHdheXMgZ2UgMTIzNDU2CithbHdheXMgaWUgMTQ1NgorYWx3YXlzIGlnIDEyMzQ1CithbHdheXMgaW4gMzUKK2Fsd2F5cyBtZXQgMjM0NTYKK2Fsd2F5cyBvZSAyNDYKK2Fsd2F5cyBvZiAxMjM1NgorYWx3YXlzIG9uIDI1CithbHdheXMgb28gMjM1NgorYWx3YXlzIG91IDEyNTYKK2Fsd2F5cyBzayAxNgorYWx3YXlzIHN0IDM0CithbHdheXMgdGUgMjM1CithbHdheXMgdWkgMzQ1CithbHdheXMgd2FzIDM0NgorYWx3YXlzIC0gMzYKK2Fsd2F5cyAsIDIKK2Fsd2F5cyA7IDIzCithbHdheXMgOiAyNQorYWx3YXlzICEgMjM1CithbHdheXMgPyAyMzYKK2Fsd2F5cyAvIDM0CithbHdheXMgLiAyNTYKK2Fsd2F5cyAnIDMKK2Fsd2F5cyAiIDIzNgorYWx3YXlzICIgMzU2CithbHdheXMgKCAyMzU2CithbHdheXMgKSAyMzU2CithbHdheXMgKiAzNS0zNQorYWx3YXlzIF4gNDUKK251bXNpZ24gMzQ1NgorY2Fwc2lnbiA2CisKKyMgaW5saW5lIGNvbnRyYWN0aW9uIG9mIGVtb2ppIGRlc2NyaXB0aW9ucworZW1vamkgYWYKZGlmZiAtLWdpdCBhL1RhYmxlcy9Db250cmFjdGlvbi9hbS5jdGIgYi9UYWJsZXMvQ29udHJhY3Rpb24vYW0uY3RiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMwNThjZWYKLS0tIC9kZXYvbnVsbAorKysgYi9UYWJsZXMvQ29udHJhY3Rpb24vYW0uY3RiCkBAIC0wLDAgKzEsMzA0IEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisjICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorIworIyBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisjCisjIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisjCisjIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyMgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorIyBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyMKKyMgV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworIworIyBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIyBCUkxUVFkgQ29udHJhY3Rpb24gVGFibGUgLSBBbWhhcmljICh1bmNvbnRyYWN0ZWQpCisjCisjIFNhbXVlbCBUaGliYXVsdCA8c2FtdWVsLnRoaWJhdWx0QGVucy1seW9uLm9yZz4KKyMgCisjIFRoaXMgdGFibGUgaXMgYmFzZWQgb24gdGhlIFVuZXNjbyByZXBvcnQgb24gdGhlIHByb2dyZXNzIG9mIHVuaWZpY2F0aW9uIG9mCisjIGJyYWlsbGUgd3JpdGluZyDCq8KgTCfDiUNSSVRVUkUgQlJBSUxMRSBEQU5TIExFIE1PTkRFwqDCuywgYnkgU2lyIENsdXRoYQorIyBNQUNLRU5aSUU6IGh0dHA6Ly91bmVzZG9jLnVuZXNjby5vcmcvaW1hZ2VzLzAwMTMvMDAxMzUyLzEzNTI1MWZvLnBkZgorIyBUaGUgZG9jdW1lbnQgaXMgZGF0ZWQgMTk1NCwgc28gdGhpcyB0YWJsZSBtYXkgYmUgcXVpdGUgb3V0ZGF0ZWQuCisKK2Fsd2F5cyDhiIAgMTI1CQkJRVRISU9QSUMgU1lMTEFCTEUgSEEKK2Fsd2F5cyDhiIEgMTI1LTEzNgkJRVRISU9QSUMgU1lMTEFCTEUgSFUKK2Fsd2F5cyDhiIIgMTI1LTI0CQkJRVRISU9QSUMgU1lMTEFCTEUgSEkKK2Fsd2F5cyDhiIMgMTI1LTEJCQlFVEhJT1BJQyBTWUxMQUJMRSBIQUEKK2Fsd2F5cyDhiIQgMTI1LTE1CQkJRVRISU9QSUMgU1lMTEFCTEUgSEVFCithbHdheXMg4YiFIDUJCQlFVEhJT1BJQyBTWUxMQUJMRSBIRQorYWx3YXlzIOGIhiAxMjUtMTM1CQlFVEhJT1BJQyBTWUxMQUJMRSBITworYWx3YXlzIOGIiCAxMjMJCQlFVEhJT1BJQyBTWUxMQUJMRSBMQQorYWx3YXlzIOGIiSAxMjMtMTM2CQlFVEhJT1BJQyBTWUxMQUJMRSBMVQorYWx3YXlzIOGIiiAxMjMtMjQJCQlFVEhJT1BJQyBTWUxMQUJMRSBMSQorYWx3YXlzIOGIiyAxMjMtMQkJCUVUSElPUElDIFNZTExBQkxFIExBQQorYWx3YXlzIOGIjCAxMjMtMTUJCQlFVEhJT1BJQyBTWUxMQUJMRSBMRUUKK2Fsd2F5cyDhiI0gNDU2CQkJRVRISU9QSUMgU1lMTEFCTEUgTEUKK2Fsd2F5cyDhiI4gMTIzLTEzNQkJRVRISU9QSUMgU1lMTEFCTEUgTE8KK2Fsd2F5cyDhiJAgMTI1CQkJRVRISU9QSUMgU1lMTEFCTEUgSEhBCithbHdheXMg4YiRIDEyNS0xMzYJCUVUSElPUElDIFNZTExBQkxFIEhIVQorYWx3YXlzIOGIkiAxMjUtMjQJCQlFVEhJT1BJQyBTWUxMQUJMRSBISEkKK2Fsd2F5cyDhiJMgMTI1LTEJCQlFVEhJT1BJQyBTWUxMQUJMRSBISEFBCithbHdheXMg4YiUIDEyNS0xNQkJCUVUSElPUElDIFNZTExBQkxFIEhIRUUKK2Fsd2F5cyDhiJUgNQkJCUVUSElPUElDIFNZTExBQkxFIEhIRQorYWx3YXlzIOGIliAxMjUtMTM1CQlFVEhJT1BJQyBTWUxMQUJMRSBISE8KK2Fsd2F5cyDhiJggMTM0CQkJRVRISU9QSUMgU1lMTEFCTEUgTUEKK2Fsd2F5cyDhiJkgMTM0LTEzNgkJRVRISU9QSUMgU1lMTEFCTEUgTVUKK2Fsd2F5cyDhiJogMTM0LTI0CQkJRVRISU9QSUMgU1lMTEFCTEUgTUkKK2Fsd2F5cyDhiJsgMTM0LTEJCQlFVEhJT1BJQyBTWUxMQUJMRSBNQUEKK2Fsd2F5cyDhiJwgMTM0LTE1CQkJRVRISU9QSUMgU1lMTEFCTEUgTUVFCithbHdheXMg4YidIDIzCQkJRVRISU9QSUMgU1lMTEFCTEUgTUUKK2Fsd2F5cyDhiJ4gMTM0LTEzNQkJRVRISU9QSUMgU1lMTEFCTEUgTU8KK2Fsd2F5cyDhiKAgNi0yMzQJCQlFVEhJT1BJQyBTWUxMQUJMRSBTWkEKK2Fsd2F5cyDhiKEgNi0yMzQtMTM2CQlFVEhJT1BJQyBTWUxMQUJMRSBTWlUKK2Fsd2F5cyDhiKIgNi0yMzQtMjQJCUVUSElPUElDIFNZTExBQkxFIFNaSQorYWx3YXlzIOGIoyA2LTIzNC0xCQlFVEhJT1BJQyBTWUxMQUJMRSBTWkFBCithbHdheXMg4YikIDYtMjM0LTE1CQlFVEhJT1BJQyBTWUxMQUJMRSBTWkVFCithbHdheXMg4YilIDYtNTYJCQlFVEhJT1BJQyBTWUxMQUJMRSBTWkUKK2Fsd2F5cyDhiKYgNi0yMzQtMTM1CQlFVEhJT1BJQyBTWUxMQUJMRSBTWk8KK2Fsd2F5cyDhiKggMTIzNQkJCUVUSElPUElDIFNZTExBQkxFIFJBCithbHdheXMg4YipIDEyMzUtMTM2CQlFVEhJT1BJQyBTWUxMQUJMRSBSVQorYWx3YXlzIOGIqiAxMjM1LTI0CQlFVEhJT1BJQyBTWUxMQUJMRSBSSQorYWx3YXlzIOGIqyAxMjM1LTEJCQlFVEhJT1BJQyBTWUxMQUJMRSBSQUEKK2Fsd2F5cyDhiKwgMTIzNS0xNQkJRVRISU9QSUMgU1lMTEFCTEUgUkVFCithbHdheXMg4YitIDEyNTYJCQlFVEhJT1BJQyBTWUxMQUJMRSBSRQorYWx3YXlzIOGIriAxMjM1LTEzNQkJRVRISU9QSUMgU1lMTEFCTEUgUk8KK2Fsd2F5cyDhiLAgMjM0CQkJRVRISU9QSUMgU1lMTEFCTEUgU0EKK2Fsd2F5cyDhiLEgMjM0LTEzNgkJRVRISU9QSUMgU1lMTEFCTEUgU1UKK2Fsd2F5cyDhiLIgMjM0LTI0CQkJRVRISU9QSUMgU1lMTEFCTEUgU0kKK2Fsd2F5cyDhiLMgMjM0LTEJCQlFVEhJT1BJQyBTWUxMQUJMRSBTQUEKK2Fsd2F5cyDhiLQgMjM0LTE1CQkJRVRISU9QSUMgU1lMTEFCTEUgU0VFCithbHdheXMg4Yi1IDU2CQkJRVRISU9QSUMgU1lMTEFCTEUgU0UKK2Fsd2F5cyDhiLYgMjM0LTEzNQkJRVRISU9QSUMgU1lMTEFCTEUgU08KK2Fsd2F5cyDhiLggMTQ2CQkJRVRISU9QSUMgU1lMTEFCTEUgU0hBCithbHdheXMg4Yi5IDE0Ni0xMzYJCUVUSElPUElDIFNZTExBQkxFIFNIVQorYWx3YXlzIOGIuiAxNDYtMjQJCQlFVEhJT1BJQyBTWUxMQUJMRSBTSEkKK2Fsd2F5cyDhiLsgMTQ2LTEJCQlFVEhJT1BJQyBTWUxMQUJMRSBTSEFBCithbHdheXMg4Yi8IDE0Ni0xNQkJCUVUSElPUElDIFNZTExBQkxFIFNIRUUKK2Fsd2F5cyDhiL0gMTU2CQkJRVRISU9QSUMgU1lMTEFCTEUgU0hFCithbHdheXMg4Yi+IDE0Ni0xMzUJCUVUSElPUElDIFNZTExBQkxFIFNITworYWx3YXlzIOGJgCAxMjM0NQkJCUVUSElPUElDIFNZTExBQkxFIFFBCithbHdheXMg4YmBIDEyMzQ1LTEzNgkJRVRISU9QSUMgU1lMTEFCTEUgUVUKK2Fsd2F5cyDhiYIgMTIzNDUtMjQJCUVUSElPUElDIFNZTExBQkxFIFFJCithbHdheXMg4YmDIDEyMzQ1LTEJCUVUSElPUElDIFNZTExBQkxFIFFBQQorYWx3YXlzIOGJhCAxMjM0NS0xNQkJRVRISU9QSUMgU1lMTEFCTEUgUUVFCithbHdheXMg4YmFIDQ2CQkJRVRISU9QSUMgU1lMTEFCTEUgUUUKK2Fsd2F5cyDhiYYgMTIzNDUtMTM1CQlFVEhJT1BJQyBTWUxMQUJMRSBRTworYWx3YXlzIOGJiCAxMjQ1Ni0xMjM0NQkJRVRISU9QSUMgU1lMTEFCTEUgUVdBCithbHdheXMg4YmKIDEyNDU2LTEyMzQ1LTEzNglFVEhJT1BJQyBTWUxMQUJMRSBRV0kKK2Fsd2F5cyDhiYsgMTI0NTYtMTIzNDUtMQkJRVRISU9QSUMgU1lMTEFCTEUgUVdBQQorYWx3YXlzIOGJjCAxMjQ1Ni0xMjM0NS0xNQkJRVRISU9QSUMgU1lMTEFCTEUgUVdFRQorYWx3YXlzIOGJjSAxMjQ1Ni0xMjM0NS0yNAkJRVRISU9QSUMgU1lMTEFCTEUgUVdFCithbHdheXMg4YmgIDEyCQkJRVRISU9QSUMgU1lMTEFCTEUgQkEKK2Fsd2F5cyDhiaEgMTItMTM2CQkJRVRISU9QSUMgU1lMTEFCTEUgQlUKK2Fsd2F5cyDhiaIgMTItMjQJCQlFVEhJT1BJQyBTWUxMQUJMRSBCSQorYWx3YXlzIOGJoyAxMi0xCQkJRVRISU9QSUMgU1lMTEFCTEUgQkFBCithbHdheXMg4YmkIDEyLTE1CQkJRVRISU9QSUMgU1lMTEFCTEUgQkVFCithbHdheXMg4YmlIDQ1CQkJRVRISU9QSUMgU1lMTEFCTEUgQkUKK2Fsd2F5cyDhiaYgMTItMTM1CQkJRVRISU9QSUMgU1lMTEFCTEUgQk8KK2Fsd2F5cyDhibAgMjM0NQkJCUVUSElPUElDIFNZTExBQkxFIFRBCithbHdheXMg4YmxIDIzNDUtMTM2CQlFVEhJT1BJQyBTWUxMQUJMRSBUVQorYWx3YXlzIOGJsiAyMzQ1LTI0CQlFVEhJT1BJQyBTWUxMQUJMRSBUSQorYWx3YXlzIOGJsyAyMzQ1LTEJCQlFVEhJT1BJQyBTWUxMQUJMRSBUQUEKK2Fsd2F5cyDhibQgMjM0NS0xNQkJRVRISU9QSUMgU1lMTEFCTEUgVEVFCithbHdheXMg4Ym1IDIJCQlFVEhJT1BJQyBTWUxMQUJMRSBURQorYWx3YXlzIOGJtiAyMzQ1LTEzNQkJRVRISU9QSUMgU1lMTEFCTEUgVE8KK2Fsd2F5cyDhibggMTYJCQlFVEhJT1BJQyBTWUxMQUJMRSBDQQorYWx3YXlzIOGJuSAxNi0xMzYJCQlFVEhJT1BJQyBTWUxMQUJMRSBDVQorYWx3YXlzIOGJuiAxNi0yNAkJCUVUSElPUElDIFNZTExBQkxFIENJCithbHdheXMg4Ym7IDE2LTEJCQlFVEhJT1BJQyBTWUxMQUJMRSBDQUEKK2Fsd2F5cyDhibwgMTYtMTUJCQlFVEhJT1BJQyBTWUxMQUJMRSBDRUUKK2Fsd2F5cyDhib0gMjUJCQlFVEhJT1BJQyBTWUxMQUJMRSBDRQorYWx3YXlzIOGJviAxNi0xMzUJCQlFVEhJT1BJQyBTWUxMQUJMRSBDTworYWx3YXlzIOGKgCAxMjUJCQlFVEhJT1BJQyBTWUxMQUJMRSBYQQorYWx3YXlzIOGKgSAxMjUtMTM2CQlFVEhJT1BJQyBTWUxMQUJMRSBYVQorYWx3YXlzIOGKgiAxMjUtMjQJCQlFVEhJT1BJQyBTWUxMQUJMRSBYSQorYWx3YXlzIOGKgyAxMjUtMQkJCUVUSElPUElDIFNZTExBQkxFIFhBQQorYWx3YXlzIOGKhCAxMjUtMTUJCQlFVEhJT1BJQyBTWUxMQUJMRSBYRUUKK2Fsd2F5cyDhioUgNQkJCUVUSElPUElDIFNZTExBQkxFIFhFCithbHdheXMg4YqGIDEyNS0xMzUJCUVUSElPUElDIFNZTExBQkxFIFhPCithbHdheXMg4YqIIDEyNDU2LTEyNQkJRVRISU9QSUMgU1lMTEFCTEUgWFdBCithbHdheXMg4YqKIDEyNDU2LTEyNS0xMzYJCUVUSElPUElDIFNZTExBQkxFIFhXSQorYWx3YXlzIOGKiyAxMjQ1Ni0xMjUtMQkJRVRISU9QSUMgU1lMTEFCTEUgWFdBQQorYWx3YXlzIOGKjCAxMjQ1Ni0xMjUtMTUJCUVUSElPUElDIFNZTExBQkxFIFhXRUUKK2Fsd2F5cyDhio0gMTI0NTYtMTI1LTI0CQlFVEhJT1BJQyBTWUxMQUJMRSBYV0UKK2Fsd2F5cyDhipAgMTM0NQkJCUVUSElPUElDIFNZTExBQkxFIE5BCithbHdheXMg4YqRIDEzNDUtMTM2CQlFVEhJT1BJQyBTWUxMQUJMRSBOVQorYWx3YXlzIOGKkiAxMzQ1LTI0CQlFVEhJT1BJQyBTWUxMQUJMRSBOSQorYWx3YXlzIOGKkyAxMzQ1LTEJCQlFVEhJT1BJQyBTWUxMQUJMRSBOQUEKK2Fsd2F5cyDhipQgMTM0NS0xNQkJRVRISU9QSUMgU1lMTEFCTEUgTkVFCithbHdheXMg4YqVIDEyNDYJCQlFVEhJT1BJQyBTWUxMQUJMRSBORQorYWx3YXlzIOGKliAxMzQ1LTEzNQkJRVRISU9QSUMgU1lMTEFCTEUgTk8KK2Fsd2F5cyDhipggMzQ2CQkJRVRISU9QSUMgU1lMTEFCTEUgTllBCithbHdheXMg4YqZIDM0Ni0xMzYJCUVUSElPUElDIFNZTExBQkxFIE5ZVQorYWx3YXlzIOGKmiAzNDYtMjQJCQlFVEhJT1BJQyBTWUxMQUJMRSBOWUkKK2Fsd2F5cyDhipsgMzQ2LTEJCQlFVEhJT1BJQyBTWUxMQUJMRSBOWUFBCithbHdheXMg4YqcIDM0Ni0xNQkJCUVUSElPUElDIFNZTExBQkxFIE5ZRUUKK2Fsd2F5cyDhip0gMjYJCQlFVEhJT1BJQyBTWUxMQUJMRSBOWUUKK2Fsd2F5cyDhip4gMzQ2LTEzNQkJRVRISU9QSUMgU1lMTEFCTEUgTllPCithbHdheXMg4YqgIDMJCQlFVEhJT1BJQyBTWUxMQUJMRSBHTE9UVEFMIEEKK2Fsd2F5cyDhiqEgMy0xMzYJCQlFVEhJT1BJQyBTWUxMQUJMRSBHTE9UVEFMIFUKK2Fsd2F5cyDhiqIgMy0yNAkJCUVUSElPUElDIFNZTExBQkxFIEdMT1RUQUwgSQorYWx3YXlzIOGKoyAzLTEJCQlFVEhJT1BJQyBTWUxMQUJMRSBHTE9UVEFMIEFBCithbHdheXMg4YqkIDMtMTUJCQlFVEhJT1BJQyBTWUxMQUJMRSBHTE9UVEFMIEVFCithbHdheXMg4YqlIDM0CQkJRVRISU9QSUMgU1lMTEFCTEUgR0xPVFRBTCBFCithbHdheXMg4YqmIDMtMTM1CQkJRVRISU9QSUMgU1lMTEFCTEUgR0xPVFRBTCBPCithbHdheXMg4YqoIDEzCQkJRVRISU9QSUMgU1lMTEFCTEUgS0EKK2Fsd2F5cyDhiqkgMTMtMTM2CQkJRVRISU9QSUMgU1lMTEFCTEUgS1UKK2Fsd2F5cyDhiqogMTMtMjQJCQlFVEhJT1BJQyBTWUxMQUJMRSBLSQorYWx3YXlzIOGKqyAxMy0xCQkJRVRISU9QSUMgU1lMTEFCTEUgS0FBCithbHdheXMg4YqsIDEzLTE1CQkJRVRISU9QSUMgU1lMTEFCTEUgS0VFCithbHdheXMg4YqtIDM1CQkJRVRISU9QSUMgU1lMTEFCTEUgS0UKK2Fsd2F5cyDhiq4gMTMtMTM1CQkJRVRISU9QSUMgU1lMTEFCTEUgS08KK2Fsd2F5cyDhirAgMTI0NTYtMTMJCUVUSElPUElDIFNZTExBQkxFIEtXQQorYWx3YXlzIOGKsiAxMjQ1Ni0xMy0xMzYJCUVUSElPUElDIFNZTExBQkxFIEtXSQorYWx3YXlzIOGKsyAxMjQ1Ni0xMy0xCQlFVEhJT1BJQyBTWUxMQUJMRSBLV0FBCithbHdheXMg4Yq0IDEyNDU2LTEzLTE1CQlFVEhJT1BJQyBTWUxMQUJMRSBLV0VFCithbHdheXMg4Yq1IDEyNDU2LTEzLTI0CQlFVEhJT1BJQyBTWUxMQUJMRSBLV0UKK2Fsd2F5cyDhirggMTM0NgkJCUVUSElPUElDIFNZTExBQkxFIEtYQQorYWx3YXlzIOGKuSAxMzQ2LTEzNgkJRVRISU9QSUMgU1lMTEFCTEUgS1hVCithbHdheXMg4Yq6IDEzNDYtMjQJCUVUSElPUElDIFNZTExBQkxFIEtYSQorYWx3YXlzIOGKuyAxMzQ2LTEJCQlFVEhJT1BJQyBTWUxMQUJMRSBLWEFBCithbHdheXMg4Yq8IDEzNDYtMTUJCUVUSElPUElDIFNZTExBQkxFIEtYRUUKK2Fsd2F5cyDhir0gMTIzNDU2CQkJRVRISU9QSUMgU1lMTEFCTEUgS1hFCithbHdheXMg4Yq+IDEzNDYtMTM1CQlFVEhJT1BJQyBTWUxMQUJMRSBLWE8KK2Fsd2F5cyDhi4ggMjQ1NgkJCUVUSElPUElDIFNZTExBQkxFIFdBCithbHdheXMg4YuJIDI0NTYtMTM2CQlFVEhJT1BJQyBTWUxMQUJMRSBXVQorYWx3YXlzIOGLiiAyNDU2LTI0CQlFVEhJT1BJQyBTWUxMQUJMRSBXSQorYWx3YXlzIOGLiyAyNDU2LTEJCQlFVEhJT1BJQyBTWUxMQUJMRSBXQUEKK2Fsd2F5cyDhi4wgMjQ1Ni0xNQkJRVRISU9QSUMgU1lMTEFCTEUgV0VFCithbHdheXMg4YuNIDI0NgkJCUVUSElPUElDIFNZTExBQkxFIFdFCithbHdheXMg4YuOIDI0NTYtMTM1CQlFVEhJT1BJQyBTWUxMQUJMRSBXTworYWx3YXlzIOGLkCAzCQkJRVRISU9QSUMgU1lMTEFCTEUgUEhBUllOR0VBTCBBCithbHdheXMg4YuRIDMtMTM2CQkJRVRISU9QSUMgU1lMTEFCTEUgUEhBUllOR0VBTCBVCithbHdheXMg4YuSIDMtMjQJCQlFVEhJT1BJQyBTWUxMQUJMRSBQSEFSWU5HRUFMIEkKK2Fsd2F5cyDhi5MgMy0xCQkJRVRISU9QSUMgU1lMTEFCTEUgUEhBUllOR0VBTCBBQQorYWx3YXlzIOGLlCAzLTE1CQkJRVRISU9QSUMgU1lMTEFCTEUgUEhBUllOR0VBTCBFRQorYWx3YXlzIOGLlSAzNAkJCUVUSElPUElDIFNZTExBQkxFIFBIQVJZTkdFQUwgRQorYWx3YXlzIOGLliAzLTEzNQkJCUVUSElPUElDIFNZTExBQkxFIFBIQVJZTkdFQUwgTworYWx3YXlzIOGLmCAxMzU2CQkJRVRISU9QSUMgU1lMTEFCTEUgWkEKK2Fsd2F5cyDhi5kgMTM1Ni0xMzYJCUVUSElPUElDIFNZTExBQkxFIFpVCithbHdheXMg4YuaIDEzNTYtMjQJCUVUSElPUElDIFNZTExBQkxFIFpJCithbHdheXMg4YubIDEzNTYtMQkJCUVUSElPUElDIFNZTExBQkxFIFpBQQorYWx3YXlzIOGLnCAxMzU2LTE1CQlFVEhJT1BJQyBTWUxMQUJMRSBaRUUKK2Fsd2F5cyDhi50gMjM0NgkJCUVUSElPUElDIFNZTExBQkxFIFpFCithbHdheXMg4YueIDEzNTYtMTM1CQlFVEhJT1BJQyBTWUxMQUJMRSBaTworYWx3YXlzIOGLoCAzNTYJCQlFVEhJT1BJQyBTWUxMQUJMRSBaSEEKK2Fsd2F5cyDhi6EgMzU2LTEzNgkJRVRISU9QSUMgU1lMTEFCTEUgWkhVCithbHdheXMg4YuiIDM1Ni0yNAkJCUVUSElPUElDIFNZTExBQkxFIFpISQorYWx3YXlzIOGLoyAzNTYtMQkJCUVUSElPUElDIFNZTExBQkxFIFpIQUEKK2Fsd2F5cyDhi6QgMzU2LTE1CQkJRVRISU9QSUMgU1lMTEFCTEUgWkhFRQorYWx3YXlzIOGLpSAyMzYJCQlFVEhJT1BJQyBTWUxMQUJMRSBaSEUKK2Fsd2F5cyDhi6YgMzU2LTEzNQkJRVRISU9QSUMgU1lMTEFCTEUgWkhPCithbHdheXMg4YuoIDEzNDU2CQkJRVRISU9QSUMgU1lMTEFCTEUgWUEKK2Fsd2F5cyDhi6kgMTM0NTYtMTM2CQlFVEhJT1BJQyBTWUxMQUJMRSBZVQorYWx3YXlzIOGLqiAxMzQ1Ni0yNAkJRVRISU9QSUMgU1lMTEFCTEUgWUkKK2Fsd2F5cyDhi6sgMTM0NTYtMQkJRVRISU9QSUMgU1lMTEFCTEUgWUFBCithbHdheXMg4YusIDEzNDU2LTE1CQlFVEhJT1BJQyBTWUxMQUJMRSBZRUUKK2Fsd2F5cyDhi60gMTIzNgkJCUVUSElPUElDIFNZTExBQkxFIFlFCithbHdheXMg4YuuIDEzNDU2LTEzNQkJRVRISU9QSUMgU1lMTEFCTEUgWU8KK2Fsd2F5cyDhi7AgMTQ1CQkJRVRISU9QSUMgU1lMTEFCTEUgREEKK2Fsd2F5cyDhi7EgMTQ1LTEzNgkJRVRISU9QSUMgU1lMTEFCTEUgRFUKK2Fsd2F5cyDhi7IgMTQ1LTI0CQkJRVRISU9QSUMgU1lMTEFCTEUgREkKK2Fsd2F5cyDhi7MgMTQ1LTEJCQlFVEhJT1BJQyBTWUxMQUJMRSBEQUEKK2Fsd2F5cyDhi7QgMTQ1LTE1CQkJRVRISU9QSUMgU1lMTEFCTEUgREVFCithbHdheXMg4Yu1IDE0NTYJCQlFVEhJT1BJQyBTWUxMQUJMRSBERQorYWx3YXlzIOGLtiAxNDUtMTM1CQlFVEhJT1BJQyBTWUxMQUJMRSBETworYWx3YXlzIOGMgCAyNDUJCQlFVEhJT1BJQyBTWUxMQUJMRSBKQQorYWx3YXlzIOGMgSAyNDUtMTM2CQlFVEhJT1BJQyBTWUxMQUJMRSBKVQorYWx3YXlzIOGMgiAyNDUtMjQJCQlFVEhJT1BJQyBTWUxMQUJMRSBKSQorYWx3YXlzIOGMgyAyNDUtMQkJCUVUSElPUElDIFNZTExBQkxFIEpBQQorYWx3YXlzIOGMhCAyNDUtMTUJCQlFVEhJT1BJQyBTWUxMQUJMRSBKRUUKK2Fsd2F5cyDhjIUgMTI2CQkJRVRISU9QSUMgU1lMTEFCTEUgSkUKK2Fsd2F5cyDhjIYgMjQ1LTEzNQkJRVRISU9QSUMgU1lMTEFCTEUgSk8KK2Fsd2F5cyDhjIggMTI0NQkJCUVUSElPUElDIFNZTExBQkxFIEdBCithbHdheXMg4YyJIDEyNDUtMTM2CQlFVEhJT1BJQyBTWUxMQUJMRSBHVQorYWx3YXlzIOGMiiAxMjQ1LTI0CQlFVEhJT1BJQyBTWUxMQUJMRSBHSQorYWx3YXlzIOGMiyAxMjQ1LTEJCQlFVEhJT1BJQyBTWUxMQUJMRSBHQUEKK2Fsd2F5cyDhjIwgMTI0NS0xNQkJRVRISU9QSUMgU1lMTEFCTEUgR0VFCithbHdheXMg4YyNIDIzNTYJCQlFVEhJT1BJQyBTWUxMQUJMRSBHRQorYWx3YXlzIOGMjiAxMjQ1LTEzNQkJRVRISU9QSUMgU1lMTEFCTEUgR08KK2Fsd2F5cyDhjJAgMTI0NTYJCQlFVEhJT1BJQyBTWUxMQUJMRSBHV0EKK2Fsd2F5cyDhjJIgMTI0NTYtMTI0NS0xMzYJCUVUSElPUElDIFNZTExBQkxFIEdXSQorYWx3YXlzIOGMkyAxMjQ1Ni0xMjQ1LTEJCUVUSElPUElDIFNZTExBQkxFIEdXQUEKK2Fsd2F5cyDhjJQgMTI0NTYtMTI0NS0xNQkJRVRISU9QSUMgU1lMTEFCTEUgR1dFRQorYWx3YXlzIOGMlSAxMjQ1Ni0xMjQ1LTI0CQlFVEhJT1BJQyBTWUxMQUJMRSBHV0UKK2Fsd2F5cyDhjKAgMjM0NTYJCQlFVEhJT1BJQyBTWUxMQUJMRSBUSEEKK2Fsd2F5cyDhjKEgMjM0NTYtMTM2CQlFVEhJT1BJQyBTWUxMQUJMRSBUSFUKK2Fsd2F5cyDhjKIgMjM0NTYtMjQJCUVUSElPUElDIFNZTExBQkxFIFRISQorYWx3YXlzIOGMoyAyMzQ1Ni0xCQlFVEhJT1BJQyBTWUxMQUJMRSBUSEFBCithbHdheXMg4YykIDIzNDU2LTE1CQlFVEhJT1BJQyBTWUxMQUJMRSBUSEVFCithbHdheXMg4YylIDEyMzU2CQkJRVRISU9QSUMgU1lMTEFCTEUgVEhFCithbHdheXMg4YymIDIzNDU2LTEzNQkJRVRISU9QSUMgU1lMTEFCTEUgVEhPCithbHdheXMg4YyoIDE0CQkJRVRISU9QSUMgU1lMTEFCTEUgQ0hBCithbHdheXMg4YypIDE0LTEzNgkJCUVUSElPUElDIFNZTExBQkxFIENIVQorYWx3YXlzIOGMqiAxNC0yNAkJCUVUSElPUElDIFNZTExBQkxFIENISQorYWx3YXlzIOGMqyAxNC0xCQkJRVRISU9QSUMgU1lMTEFCTEUgQ0hBQQorYWx3YXlzIOGMrCAxNC0xNQkJCUVUSElPUElDIFNZTExBQkxFIENIRUUKK2Fsd2F5cyDhjK0gMzYJCQlFVEhJT1BJQyBTWUxMQUJMRSBDSEUKK2Fsd2F5cyDhjK4gMTQtMTM1CQkJRVRISU9QSUMgU1lMTEFCTEUgQ0hPCithbHdheXMg4YywIDIzNQkJCUVUSElPUElDIFNZTExBQkxFIFBIQQorYWx3YXlzIOGMsSAyMzUtMTM2CQlFVEhJT1BJQyBTWUxMQUJMRSBQSFUKK2Fsd2F5cyDhjLIgMjM1LTI0CQkJRVRISU9QSUMgU1lMTEFCTEUgUEhJCithbHdheXMg4YyzIDIzNS0xCQkJRVRISU9QSUMgU1lMTEFCTEUgUEhBQQorYWx3YXlzIOGMtCAyMzUtMTUJCQlFVEhJT1BJQyBTWUxMQUJMRSBQSEVFCithbHdheXMg4Yy1IDM0NTYJCQlFVEhJT1BJQyBTWUxMQUJMRSBQSEUKK2Fsd2F5cyDhjLYgMjM1LTEzNQkJRVRISU9QSUMgU1lMTEFCTEUgUEhPCithbHdheXMg4Yy4IDEyMzQ2CQkJRVRISU9QSUMgU1lMTEFCTEUgVFNBCithbHdheXMg4Yy5IDEyMzQ2LTEzNgkJRVRISU9QSUMgU1lMTEFCTEUgVFNVCithbHdheXMg4Yy6IDEyMzQ2LTI0CQlFVEhJT1BJQyBTWUxMQUJMRSBUU0kKK2Fsd2F5cyDhjLsgMTIzNDYtMQkJRVRISU9QSUMgU1lMTEFCTEUgVFNBQQorYWx3YXlzIOGMvCAxMjM0Ni0xNQkJRVRISU9QSUMgU1lMTEFCTEUgVFNFRQorYWx3YXlzIOGMvSAzNDUJCQlFVEhJT1BJQyBTWUxMQUJMRSBUU0UKK2Fsd2F5cyDhjL4gMTIzNDYtMTM1CQlFVEhJT1BJQyBTWUxMQUJMRSBUU08KK2Fsd2F5cyDhjYAgMTIzNDYJCQlFVEhJT1BJQyBTWUxMQUJMRSBUWkEKK2Fsd2F5cyDhjYEgMTIzNDYtMTM2CQlFVEhJT1BJQyBTWUxMQUJMRSBUWlUKK2Fsd2F5cyDhjYIgMTIzNDYtMjQJCUVUSElPUElDIFNZTExBQkxFIFRaSQorYWx3YXlzIOGNgyAxMjM0Ni0xCQlFVEhJT1BJQyBTWUxMQUJMRSBUWkFBCithbHdheXMg4Y2EIDEyMzQ2LTE1CQlFVEhJT1BJQyBTWUxMQUJMRSBUWkVFCithbHdheXMg4Y2FIDM0NQkJCUVUSElPUElDIFNZTExBQkxFIFRaRQorYWx3YXlzIOGNhiAxMjM0Ni0xMzUJCUVUSElPUElDIFNZTExBQkxFIFRaTworYWx3YXlzIOGNiCAxMjQJCQlFVEhJT1BJQyBTWUxMQUJMRSBGQQorYWx3YXlzIOGNiSAxMjQtMTM2CQlFVEhJT1BJQyBTWUxMQUJMRSBGVQorYWx3YXlzIOGNiiAxMjQtMjQJCQlFVEhJT1BJQyBTWUxMQUJMRSBGSQorYWx3YXlzIOGNiyAxMjQtMQkJCUVUSElPUElDIFNZTExBQkxFIEZBQQorYWx3YXlzIOGNjCAxMjQtMTUJCQlFVEhJT1BJQyBTWUxMQUJMRSBGRUUKK2Fsd2F5cyDhjY0gNAkJCUVUSElPUElDIFNZTExBQkxFIEZFCithbHdheXMg4Y2OIDEyNC0xMzUJCUVUSElPUElDIFNZTExBQkxFIEZPCithbHdheXMg4Y2QIDEyMzQJCQlFVEhJT1BJQyBTWUxMQUJMRSBQQQorYWx3YXlzIOGNkSAxMjM0LTEzNgkJRVRISU9QSUMgU1lMTEFCTEUgUFUKK2Fsd2F5cyDhjZIgMTIzNC0yNAkJRVRISU9QSUMgU1lMTEFCTEUgUEkKK2Fsd2F5cyDhjZMgMTIzNC0xCQkJRVRISU9QSUMgU1lMTEFCTEUgUEFBCithbHdheXMg4Y2UIDEyMzQtMTUJCUVUSElPUElDIFNZTExBQkxFIFBFRQorYWx3YXlzIOGNlSA2CQkJRVRISU9QSUMgU1lMTEFCTEUgUEUKK2Fsd2F5cyDhjZYgMTIzNC0xMzUJCUVUSElPUElDIFNZTExBQkxFIFBPCithbHdheXMg4Y2hIDAJCQlFVEhJT1BJQyBXT1JEU1BBQ0UKK2Fsd2F5cyDhjaIgMjU2CQkJRVRISU9QSUMgRlVMTCBTVE9QCithbHdheXMg4Y2jIDIJCQlFVEhJT1BJQyBDT01NQQorYWx3YXlzIOGNpCAyMwkJCUVUSElPUElDIFNFTUlDT0xPTgorYWx3YXlzIOGNpSAyNQkJCUVUSElPUElDIENPTE9OCithbHdheXMg4Y2nIDIzNgkJCUVUSElPUElDIFFVRVNUSU9OIE1BUksKK2Fsd2F5cyDhjakgMTYJCQlFVEhJT1BJQyBESUdJVCBPTkUKK2Fsd2F5cyDhjaogMTI2CQkJRVRISU9QSUMgRElHSVQgVFdPCithbHdheXMg4Y2rIDE0NgkJCUVUSElPUElDIERJR0lUIFRIUkVFCithbHdheXMg4Y2sIDE0NTYJCQlFVEhJT1BJQyBESUdJVCBGT1VSCithbHdheXMg4Y2tIDE1NgkJCUVUSElPUElDIERJR0lUIEZJVkUKK2Fsd2F5cyDhja4gMTI0NgkJCUVUSElPUElDIERJR0lUIFNJWAorYWx3YXlzIOGNryAxMjQ1NgkJCUVUSElPUElDIERJR0lUIFNFVkVOCithbHdheXMg4Y2wIDEyNTYJCQlFVEhJT1BJQyBESUdJVCBFSUdIVAorYWx3YXlzIOGNsSAyNDYJCQlFVEhJT1BJQyBESUdJVCBOSU5FCithbHdheXMg4Y2yIDE2LTM0NTYJCUVUSElPUElDIE5VTUJFUiBURU4KK2Fsd2F5cyDhjbMgMTI2LTM0NTYJCUVUSElPUElDIE5VTUJFUiBUV0VOVFkKK2Fsd2F5cyDhjbQgMTQ2LTM0NTYJCUVUSElPUElDIE5VTUJFUiBUSElSVFkKK2Fsd2F5cyDhjbUgMTQ1Ni0zNDU2CQlFVEhJT1BJQyBOVU1CRVIgRk9SVFkKK2Fsd2F5cyDhjbYgMTU2LTM0NTYJCUVUSElPUElDIE5VTUJFUiBGSUZUWQorYWx3YXlzIOGNtyAxMjQ2LTM0NTYJCUVUSElPUElDIE5VTUJFUiBTSVhUWQorYWx3YXlzIOGNuCAxMjQ1Ni0zNDU2CQlFVEhJT1BJQyBOVU1CRVIgU0VWRU5UWQorYWx3YXlzIOGNuSAxMjU2LTM0NTYJCUVUSElPUElDIE5VTUJFUiBFSUdIVFkKK2Fsd2F5cyDhjbogMjQ2LTM0NTYJCUVUSElPUElDIE5VTUJFUiBOSU5FVFkKK2Fsd2F5cyDhjbsgMTYtMzQ1Ni0zNDU2CQlFVEhJT1BJQyBOVU1CRVIgSFVORFJFRAorYWx3YXlzIOGNvCAxNi0zNDU2LTM0NTYtMzQ1Ni0zNDU2CUVUSElPUElDIE5VTUJFUiBURU4gVEhPVVNBTkQKZGlmZiAtLWdpdCBhL1RhYmxlcy9Db250cmFjdGlvbi9jb3VudHJpZXMuY3RpIGIvVGFibGVzL0NvbnRyYWN0aW9uL2NvdW50cmllcy5jdGkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjQ5NmI2NwotLS0gL2Rldi9udWxsCisrKyBiL1RhYmxlcy9Db250cmFjdGlvbi9jb3VudHJpZXMuY3RpCkBAIC0wLDAgKzEsMjYxIEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisjICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorIworIyBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisjCisjIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisjCisjIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyMgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorIyBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyMKKyMgV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworIworIyBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIyBzaG93IGFueSAid29yZCIgd2hpY2ggY29udGFpbnMgYSBjb3VudHJ5IGNvZGUgaW4gOC1kb3QgY29tcHV0ZXIgYnJhaWxsZS4KK2xpdGVyYWwgLmFkIEFuZG9ycmEKK2xpdGVyYWwgLmFlIFVuaXRlZCBBcmFiIEVtaXJhdGVzCitsaXRlcmFsIC5hZiBBZmdoYW5pc3RhbgorbGl0ZXJhbCAuYWcgQW50aWd1YSBhbmQgQmFyYnVkYQorbGl0ZXJhbCAuYWkgQW5ndWlsbGEKK2xpdGVyYWwgLmFsIEFsYmFuaWEKK2xpdGVyYWwgLmFtIEFybWVuaWEKK2xpdGVyYWwgLmFuIE5ldGhlcmxhbmRzIEFudGlsbGVzCitsaXRlcmFsIC5hbyBBbmdvbGEKK2xpdGVyYWwgLmFxIEFudGFyY3RpY2EKK2xpdGVyYWwgLmFyIEFyZ2VudGluYQorbGl0ZXJhbCAuYXMgQW1lcmljYW4gU2Ftb2EKK2xpdGVyYWwgLmF0IEF1c3RyaWEKK2xpdGVyYWwgLmF1IEF1c3RyYWxpYQorbGl0ZXJhbCAuYXcgQXJ1YmEKK2xpdGVyYWwgLmF6IEF6ZXJiYWlqYW4KK2xpdGVyYWwgLmJhIEJvc25pYS1IZXJ6ZWdvdmluYQorbGl0ZXJhbCAuYmIgQmFyYmFkb3MKK2xpdGVyYWwgLmJkIEJhbmdsYWRlc2gKK2xpdGVyYWwgLmJlIEJlbGdpdW0KK2xpdGVyYWwgLmJmIEJ1cmtpbmEgRmFzbworbGl0ZXJhbCAuYmcgQnVsZ2FyaWEKK2xpdGVyYWwgLmJoIEJhaHJhaW4KK2xpdGVyYWwgLmJpIEJ1cnVuZGkKK2xpdGVyYWwgLmJqIEJlbmluCitsaXRlcmFsIC5ibSBCZXJtdWRhCitsaXRlcmFsIC5ibiBCcnVuZWkgRGFydXNzYWxhbQorbGl0ZXJhbCAuYm8gQm9saXZpYQorbGl0ZXJhbCAuYnIgQnJhemlsCitsaXRlcmFsIC5icyBCYWhhbWFzCitsaXRlcmFsIC5idCBCaHV0YW4KK2xpdGVyYWwgLmJ2IEJvdXZldCBJc2xhbmQKK2xpdGVyYWwgLmJ3IEJvdHN3YW5hCitsaXRlcmFsIC5ieSBCZWxhcnVzCitsaXRlcmFsIC5ieiBCZWxpemUKK2xpdGVyYWwgLmNhIENhbmFkYQorbGl0ZXJhbCAuY2MgQ29jb3MgKEtlZWxpbmcpIElzbGFuZHMKK2xpdGVyYWwgLmNkIFRoZSBEZW1vY3JhdGljIFJlcHVibGljIG9mIFRoZSBDb25nbworbGl0ZXJhbCAuY2YgQ2VudHJhbCBBZnJpY2FuIFJlcHVibGljCitsaXRlcmFsIC5jZyBDb25nbworbGl0ZXJhbCAuY2ggU3dpdHplcmxhbmQKK2xpdGVyYWwgLmNpIEl2b3J5IENvYXN0CitsaXRlcmFsIC5jayBDb29rIElzbGFuZHMKK2xpdGVyYWwgLmNsIENoaWxlCitsaXRlcmFsIC5jbSBDYW1lcm9vbgorbGl0ZXJhbCAuY24gQ2hpbmEKK2xpdGVyYWwgLmNvIENvbG9tYmlhCitsaXRlcmFsIC5jciBDb3N0YSBSaWNhCitsaXRlcmFsIC5jdSBDdWJhCitsaXRlcmFsIC5jdiBDYXBlIFZlcmRlCitsaXRlcmFsIC5jeCBDaHJpc3RtYXMgSXNsYW5kCitsaXRlcmFsIC5jeSBDeXBydXMKK2xpdGVyYWwgLmN6IEN6ZWNoIFJlcHVibGljCitsaXRlcmFsIC5kZSBHZXJtYW55CitsaXRlcmFsIC5kaiBEamlib3V0aQorbGl0ZXJhbCAuZGsgRGVubWFyaworbGl0ZXJhbCAuZG0gRG9taW5pY2EKK2xpdGVyYWwgLmRvIERvbWluaWNhbiBSZXB1YmxpYworbGl0ZXJhbCAuZHogQWxnZXJpYQorbGl0ZXJhbCAuZWMgRWN1YWRvcgorbGl0ZXJhbCAuZWUgRXN0b25pYQorbGl0ZXJhbCAuZWcgRWd5cHQKK2xpdGVyYWwgLmVoIFdlc3Rlcm4gU2FoYXJhCitsaXRlcmFsIC5lciBFcml0cmVhCitsaXRlcmFsIC5lcyBTcGFpbgorbGl0ZXJhbCAuZXQgRXRoaW9waWEKK2xpdGVyYWwgLmZpIEZpbmxhbmQKK2xpdGVyYWwgLmZqIEZpamkKK2xpdGVyYWwgLmZrIEZhbGtsYW5kIElzbGFuZHMgKE1hbHZpbmFzKQorbGl0ZXJhbCAuZm0gTWljcm9uZXNpYQorbGl0ZXJhbCAuZm8gRmFyb2UgSXNsYW5kcworbGl0ZXJhbCAuZnIgRnJhbmNlCitsaXRlcmFsIC5nYSBHYWJvbgorbGl0ZXJhbCAuZ2IgVW5pdGVkIEtpbmdkb20KK2xpdGVyYWwgLmdkIEdyZW5hZGEKK2xpdGVyYWwgLmdlIEdlb3JnaWEKK2xpdGVyYWwgLmdmIEZyZW5jaCBHdWlhbmEKK2xpdGVyYWwgLmdoIEdoYW5hCitsaXRlcmFsIC5naSBHaWJyYWx0YXIKK2xpdGVyYWwgLmdsIEdyZWVubGFuZAorbGl0ZXJhbCAuZ20gR2FtYmlhCitsaXRlcmFsIC5nbiBHdWluZWEKK2xpdGVyYWwgLmdwIEd1YWRlbG91cGUgKEZyLikKK2xpdGVyYWwgLmdxIEVxdWF0b3JpYWwgR3VpbmVhCitsaXRlcmFsIC5nciBHcmVlY2UKK2xpdGVyYWwgLmdzIFNvdXRoIEdlb3JnaWEgQW5kIFRoZSBTb3V0aCBTYW5kd2ljaCBJc2xhbmRzCitsaXRlcmFsIC5ndCBHdWF0ZW1hbGEKK2xpdGVyYWwgLmd1IEd1YW0gKFUuUy4pCitsaXRlcmFsIC5ndyBHdWluZWEtQmlzc2F1CitsaXRlcmFsIC5neSBHdXlhbmEKK2xpdGVyYWwgLmhrIEhvbmcgS29uZworbGl0ZXJhbCAuaG0gSGVhcmQgSXNsYW5kIEFuZCBNY2RvbmFsZCBJc2xhbmRzCitsaXRlcmFsIC5obiBIb25kdXJhcworbGl0ZXJhbCAuaHIgQ3JvYXRpYQorbGl0ZXJhbCAuaHQgSGFpdGkKK2xpdGVyYWwgLmh1IEh1bmdhcnkKK2xpdGVyYWwgLmlkIEluZG9uZXNpYQorbGl0ZXJhbCAuaWUgSXJlbGFuZAorbGl0ZXJhbCAuaWwgSXNyYWVsCitsaXRlcmFsIC5pbSBJc2xlIG9mIE1hbgorbGl0ZXJhbCAuaW4gSW5kaWEKK2xpdGVyYWwgLmlvIEJyaXRpc2ggSW5kaWFuIE9jZWFuIFRlcnJpdG9yeQorbGl0ZXJhbCAuaXEgSXJhcQorbGl0ZXJhbCAuaXIgSXJhbgorbGl0ZXJhbCAuaXMgSWNlbGFuZAorbGl0ZXJhbCAuaXQgSXRhbHkKK2xpdGVyYWwgLmptIEphbWFpY2EKK2xpdGVyYWwgLmpvIEpvcmRhbgorbGl0ZXJhbCAuanAgSmFwYW4KK2xpdGVyYWwgLmtlIEtlbnlhCitsaXRlcmFsIC5rZyBLeXJneXpzdGFuCitsaXRlcmFsIC5raCBDYW1ib2RpYQorbGl0ZXJhbCAua2kgS2lyaWJhdGkKK2xpdGVyYWwgLmttIENvbW9yb3MKK2xpdGVyYWwgLmtuIFNhaW50IEtpdHRzIGFuZCBOZXZpcworbGl0ZXJhbCAua3AgS29yZWEgKE5vcnRoKQorbGl0ZXJhbCAua3IgS29yZWEgKFNvdXRoKQorbGl0ZXJhbCAua3cgS3V3YWl0CitsaXRlcmFsIC5reSBDYXltYW4gSXNsYW5kcworbGl0ZXJhbCAua3ogS2F6YWtzdGFuCitsaXRlcmFsIC5sYSBMYW8gUGVvcGxlJ3MgRGVtb2NyYXRpYyBSZXB1YmxpYworbGl0ZXJhbCAubGIgTGViYW5vbgorbGl0ZXJhbCAubGMgU2FpbnQgTHVjaWEKK2xpdGVyYWwgLmxpIExpZWNodGVuc3RlaW4KK2xpdGVyYWwgLmxrIFNyaSBMYW5rYQorbGl0ZXJhbCAubHIgTGliZXJpYQorbGl0ZXJhbCAubHMgTGVzb3RobworbGl0ZXJhbCAubHQgTGl0aHVhbmlhCitsaXRlcmFsIC5sdSBMdXhlbWJvdXJnCitsaXRlcmFsIC5sdiBMYXR2aWEKK2xpdGVyYWwgLmx5IExpYnlhbiBBcmFiIEphbWFoaXJpeWEKK2xpdGVyYWwgLm1hIE1vcm9jY28KK2xpdGVyYWwgLm1jIE1vbmFjbworbGl0ZXJhbCAubWQgTW9sZG92YQorbGl0ZXJhbCAubWcgTWFkYWdhc2NhcgorbGl0ZXJhbCAubWggTWFyc2hhbGwgSXNsYW5kcworbGl0ZXJhbCAubWsgTWFjZWRvbmlhCitsaXRlcmFsIC5tbCBNYWxpCitsaXRlcmFsIC5tbSBNeWFubWFyCitsaXRlcmFsIC5tbiBNb25nb2xpYQorbGl0ZXJhbCAubW8gTWFjYXUKK2xpdGVyYWwgLm1wIE5vcnRoZXJuIE1hcmlhbmEgSXNsYW5kcworbGl0ZXJhbCAubXEgTWFydGluaXF1ZQorbGl0ZXJhbCAubXIgTWF1cml0YW5pYQorbGl0ZXJhbCAubXMgTW9udHNlcnJhdAorbGl0ZXJhbCAubXQgTWFsdGEKK2xpdGVyYWwgLm11IE1hdXJpdGl1cworbGl0ZXJhbCAubXYgTWFsZGl2ZXMKK2xpdGVyYWwgLm13IE1hbGF3aQorbGl0ZXJhbCAubXggTWV4aWNvCitsaXRlcmFsIC5teSBNYWxheXNpYQorbGl0ZXJhbCAubXogTW96YW1iaXF1ZQorbGl0ZXJhbCAubmEgTmFtaWJpYQorbGl0ZXJhbCAubmMgTmV3IENhbGVkb25pYSAoRnIuKQorbGl0ZXJhbCAubmUgTmlnZXIKK2xpdGVyYWwgLm5mIE5vcmZvbGsgSXNsYW5kCitsaXRlcmFsIC5uZyBOaWdlcmlhCitsaXRlcmFsIC5uaSBOaWNhcmFndWEKK2xpdGVyYWwgLm5sIE5ldGhlcmxhbmRzCitsaXRlcmFsIC5ubyBOb3J3YXkKK2xpdGVyYWwgLm5wIE5lcGFsCitsaXRlcmFsIC5uciBOYXVydQorbGl0ZXJhbCAubnUgTml1ZQorbGl0ZXJhbCAubnogTmV3IFplYWxhbmQKK2xpdGVyYWwgLm9tIE9tYW4KK2xpdGVyYWwgLnBhIFBhbmFtYQorbGl0ZXJhbCAucGUgUGVydQorbGl0ZXJhbCAucGYgUG9seW5lc2lhIChGci4pCitsaXRlcmFsIC5wZyBQYXB1YSBOZXcgR3VpbmVhCitsaXRlcmFsIC5waCBQaGlsaXBwaW5lcworbGl0ZXJhbCAucGsgUGFraXN0YW4KK2xpdGVyYWwgLnBsIFBvbGFuZAorbGl0ZXJhbCAucG0gU2FpbnQgUGllcnJlIGFuZCBNaXF1ZWxvbgorbGl0ZXJhbCAucG4gUGl0Y2Fpcm4KK2xpdGVyYWwgLnByIFB1ZXJ0byBSaWNvIChVLlMuKQorbGl0ZXJhbCAucHMgUGFsZXN0aW5pYW4gVGVycml0b3J5LCBPY2N1cGllZAorbGl0ZXJhbCAucHQgUG9ydHVnYWwKK2xpdGVyYWwgLnB3IFBhbGF1CitsaXRlcmFsIC5weSBQYXJhZ3VheQorbGl0ZXJhbCAucWEgUWF0YXIKK2xpdGVyYWwgLnJlIFJldW5pb24gKEZyLikKK2xpdGVyYWwgLnJvIFJvbWFuaWEKK2xpdGVyYWwgLnJ1IFJ1c3NpYQorbGl0ZXJhbCAucncgUndhbmRhCitsaXRlcmFsIC5zYSBTYXVkaSBBcmFiaWEKK2xpdGVyYWwgLnNiIFNvbG9tb24gSXNsYW5kcworbGl0ZXJhbCAuc2MgU2V5Y2hlbGxlcworbGl0ZXJhbCAuc2QgU3VkYW4KK2xpdGVyYWwgLnNlIFN3ZWRlbgorbGl0ZXJhbCAuc2cgU2luZ2Fwb3JlCitsaXRlcmFsIC5zaCBTYWludCBIZWxlbmEKK2xpdGVyYWwgLnNpIFNsb3ZlbmlhCitsaXRlcmFsIC5zaiBTdmFsYmFyZCBhbmQgSmFuIE1heWVuCitsaXRlcmFsIC5zayBTbG92YWtpYQorbGl0ZXJhbCAuc2wgU2llcnJhIExlb25lCitsaXRlcmFsIC5zbSBTYW4gTWFyaW5vCitsaXRlcmFsIC5zbiBTZW5lZ2FsCitsaXRlcmFsIC5zbyBTb21hbGlhCitsaXRlcmFsIC5zciBTdXJpbmFtZQorbGl0ZXJhbCAuc3QgU2FvIFRvbWUgQW5kIFByaW5jaXBlCitsaXRlcmFsIC5zdSBVLlMuUy5SLgorbGl0ZXJhbCAuc3YgRWwgU2FsdmFkb3IKK2xpdGVyYWwgLnN5IFN5cmlhbiBBcmFiIFJlcHVibGljCitsaXRlcmFsIC5zeiBTd2F6aWxhbmQKK2xpdGVyYWwgLnRjIFR1cmtzIEFuZCBDYWljb3MgSXNsYW5kcworbGl0ZXJhbCAudGQgQ2hhZAorbGl0ZXJhbCAudGYgRnJlbmNoIFNvdXRoZXJuIFRlcnJpdG9yaWVzCitsaXRlcmFsIC50ZyBUb2dvCitsaXRlcmFsIC50aCBUaGFpbGFuZAorbGl0ZXJhbCAudGogVGFqaWtpc3RhbgorbGl0ZXJhbCAudGsgVG9rZWxhdQorbGl0ZXJhbCAudG0gVHVya21lbmlzdGFuCitsaXRlcmFsIC50biBUdW5pc2lhCitsaXRlcmFsIC50byBUb25nYQorbGl0ZXJhbCAudHAgRWFzdCBUaW1vcgorbGl0ZXJhbCAudHIgVHVya2V5CitsaXRlcmFsIC50dCBUcmluaWRhZCBhbmQgVG9iYWdvCitsaXRlcmFsIC50diBUdXZhbHUKK2xpdGVyYWwgLnR3IFRhaXdhbgorbGl0ZXJhbCAudHogVGFuemFuaWEKK2xpdGVyYWwgLnVhIFVrcmFpbmUKK2xpdGVyYWwgLnVnIFVnYW5kYQorbGl0ZXJhbCAudWsgVW5pdGVkIEtpbmdkb20KK2xpdGVyYWwgLnVtIFVuaXRlZCBTdGF0ZXMgTWlub3IgT3V0bHlpbmcgSXNsYW5kcworbGl0ZXJhbCAudXMgVW5pdGVkIFN0YXRlcworbGl0ZXJhbCAudXkgVXJ1Z3VheQorbGl0ZXJhbCAudXogVXpiZWtpc3RhbgorbGl0ZXJhbCAudmEgSG9seSBTZWUgKFZhdGljYW4gQ2l0eSBTdGF0ZSkKK2xpdGVyYWwgLnZjIFN0LiBWaW5jZW50IGFuZCB0aGUgR3JlbmFkaW5lcworbGl0ZXJhbCAudmUgVmVuZXp1ZWxhCitsaXRlcmFsIC52ZyBWaXJnaW4gSXNsYW5kcywgQnJpdGlzaAorbGl0ZXJhbCAudmkgVmlyZ2luIElzbGFuZHMsIFUuUy4KK2xpdGVyYWwgLnZuIFZpZXRuYW0KK2xpdGVyYWwgLnZ1IFZhbnVhdHUKK2xpdGVyYWwgLndmIFdhbGxpcyBhbmQgRnV0dW5hCitsaXRlcmFsIC53cyBTYW1vYQorbGl0ZXJhbCAueWUgWWVtZW4KK2xpdGVyYWwgLnl0IE1heW90dGUKK2xpdGVyYWwgLnl1IFl1Z29zbGF2aWEKK2xpdGVyYWwgLnphIFNvdXRoIEFmcmljYQorbGl0ZXJhbCAuem0gWmFtYmlhCitsaXRlcmFsIC56dyBaaW1iYWJ3ZQpkaWZmIC0tZ2l0IGEvVGFibGVzL0NvbnRyYWN0aW9uL2RlLTE5OTguY3RiIGIvVGFibGVzL0NvbnRyYWN0aW9uL2RlLTE5OTguY3RiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdmMGNiNDEKLS0tIC9kZXYvbnVsbAorKysgYi9UYWJsZXMvQ29udHJhY3Rpb24vZGUtMTk5OC5jdGIKQEAgLTAsMCArMSwxNTIxIEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisjICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorIworIyBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisjCisjIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisjCisjIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyMgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorIyBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyMKKyMgV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworIworIyBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIyBCUkxUVFkgQ29udHJhY3Rpb24gVGFibGUgLSBHZXJtYW4gKGNvbnRyYWN0ZWQgLSAxOTk4IHN0YW5kYXJkKQorIyBDcmVhdGVkIGJ5IE1hcmlvIExhbmcgPG1sYW5nQGRlbHlzaWQub3JnPi4KKworaW5jbHVkZSBkZS1nMS5jdGIKKworY2xhc3MgZSBlCitjbGFzcyBnIGcKK2NsYXNzIGggaAorY2xhc3MgbSBtCitjbGFzcyBuIG4KK2NsYXNzIHIgcgorY2xhc3MgaGlsbW5yc3UgaGlsbW5yc3UKK2NsYXNzIGwgbAorY2xhc3MgbG5yIGxucgorY2xhc3Mgc3Qgc3QKK2NsYXNzIGtvbnNvbmFudCBiY2RmZ2hqa2xtbnBxcnN0dnd4eXoKKworIyBBdXNuYWhtZW4gZsO8ciBWb2thbGdydXBwZW4gYXVzIGRlLWcxLmN0YgorYmVmb3JlIGUgYWx3YXlzIGFydGVyaSAzNTYtMjM0NS0xMjQ1Ni0yNAorYWx3YXlzIGJhcnJpZXIgMTItMzU2LTEyMzUtMjQtMTI0NTYgc2hvdWxkbid0IHVzZSB0aGUgaWUtY29udHJhY3Rpb24KK2Fsd2F5cyBiYW5raWVyIDEyLTIzNS0xMy0yNC0xMjQ1NiBzaG91bGRuJ3QgdXNlIHRoZSBpZS1jb250cmFjdGlvbgorbWlkZW5kd29yZCBpZWxsIDI0LTE1LTEyMzQ1IHNob3VsZG4ndCB1c2UgdGhlIGllLWNvbnRyYWN0aW9uCithbHdheXMgaW5kaWVuIDM1LTE0NS0yNC0xNCBzaG91bGRuJ3QgdXNlIHRoZSBpZS1jb250cmFjdGlvbgorYWx3YXlzIGthcnJpZXIgMTMtMzU2LTEyMzUtMjQtMTI0NTYKK2Fsd2F5cyBtZWRpZW4gMTM0LTE1LTE0NS0yNC0xNCBzaG91bGRuJ3QgdXNlIHRoZSBpZS1jb250cmFjdGlvbgorYWx3YXlzIHByb3ByaWV0IDEyMzQ1LTEyMzQtMTIzNS0yNC0xNS0yMzQ1IHByb3ByaWV0w6RyIHNob3VsZG4ndCB1c2UgdGhlIGllLWNvbnRyYWN0aW9uCitlbmR3b3JkIHNlcmllIDIzNC0xMjQ1Ni0yNC0xNQorYWx3YXlzIHNwZXppZXMgMjM0LTEyMzQtMTUtMTM1Ni0yNC0xMjM0NTYgc2hvdWxkbid0IHVzZSB0aGUgaWUtY29udHJhY3Rpb24KKworaW5jbHVkZSBkZS13b3J0LmN0aQorCisjIER1ZSB0byB0aGVpciBsb3cgdXNhZ2UgZnJlcXVlbmN5IGluIHR5cGljYWwgZ2VybWFuIHRleHQgdGhlIGxldHRlcnMKKyMgYywgcSwgeCBhbmQgeSBhcmUgcmV1c2VkIGZvciB0aGUgZW4tLCBsbC0sIGV4L21tL25pcy0gYW5kIGVsLWNvbnRyYWN0aW9ucy4KKyMgVGhlcmVmb3JlIHRoZXkgbmVlZCBhIHByb2NlZGluZyBsZXRzaWduIHRvIGRpc2FtYmlndWF0ZSB0aGVtLgorYWx3YXlzIGMgNi0xNAorYWx3YXlzIEMgNi0xNAorYWx3YXlzIHEgNi0xMjM0NQorYWx3YXlzIFEgNi0xMjM0NQorYWx3YXlzIHggNi0xMzQ2CithbHdheXMgWCA2LTEzNDYKK2Fsd2F5cyB5IDYtMTM0NTYKK2Fsd2F5cyBZIDYtMTM0NTYKKworIyBMYXV0Z3J1cHBlbmvDvHJ6dW5nZW4KK21pZGVuZHdvcmQgYWNoIDU2CitiZWdtaWR3b3JkIGFsIDI1CitiZWdtaWR3b3JkIDogNi0yNQorYmVnbWlkd29yZCBhbiAyMzUKK2JlZ21pZHdvcmQgYXIgMzU2CitiZWdtaWR3b3JkIGJlIDIzCittaWRlbmR3b3JkIGJldWxlIDEyLTEyNi0xMjMtMTUKK21pZGVuZHdvcmQgYmV1bGVuIDEyLTEyNi0xMjMtMTQKK2JlZm9yZSBnIGFsd2F5cyBiZXUgMTItMTI2CithbHdheXMgYmVsbCAyMy0xMjM0NSB0YWJlbGxlIHNob3VsZCB1c2UgdGhlIGxsLWNvbnRyYWN0aW9uCittaWRlbmR3b3JkIGNrIDQ2CittaWR3b3JkIGVoIDIzNTYKK2Fsd2F5cyBrb2hsZSA9CithbHdheXMga29obGVuIDEzLTEzNS0xMjUtMTIzLTE0CithbHdheXMga29obGVpbnRvcGYgMTMtMTM1LTEyNS0xMjMtMTI0Ni0yMzQ1LTEzNS0xMjM0LTEyNAorYWx3YXlzIGtvaGxlaW50w7ZwZiAxMy0xMzUtMTI1LTEyMy0xMjQ2LTIzNDUtMjQ2LTEyMzQtMTI0CitiZWZvcmUgZyBhbHdheXMga29obGVpbmxhIDEzLTEzNS0xMjUtMTIzLTEyNDYtMTIzLTEKK2JlZm9yZSBlIGFsd2F5cyBrb2hsZXVsIDEzLTEzNS0xMjUtMTIzLTEyNi0xMjMg4qCo4qCF4qCV4qCT4qCH4qCj4qCH4qCJCithbHdheXMgZWluIDEyNDYKK2Fsd2F5cyBlaW5uZW4gMTUtMzUtMTM0NS0xNCDioKjioK/ioJPioIzioI7ioJHioJTioJ3ioInioI7ioKnioKYg4qCo4qCv4qCT4qCM4qCO4qCR4qCU4qCd4qCJ4qCe4qC34qCP4qC74qCB4qCe4qCl4qCXIOKgqOKgp+KgiuKgteKgkeKglOKgneKgieKgjeKglOKgiuKgvuKguworYWx3YXlzIGxhdGVpbmlzY2ggMTIzLTEtMjM0NS0xNDYtMTM0NS0yNC0xNTYgc2hvdWxkbid0IHVzZSB0aGUgZWluLWNvbnRyYWN0aW9uCithbHdheXMgZWwgMTM0NTYKK2JlZ21pZHdvcmQgZWxpbmVhbCAxNS0xMjMtMzUtMTUtMjUKK2VuZHdvcmQgZWxpbmVhbCAxNS0xMjMtMzUtMTUtMS0xMjMKK2Fsd2F5cyBlbGVpc3QgMTUtMTIzLTE0Ni0yMzQ1NgorYWx3YXlzIGVtIDEyMzU2CithbHdheXMgZW1hY2ggMTUtMTM0LTU2CitiZWZvcmUgZSBhbHdheXMgZW1hY2hzIDEyMzU2LTU2LTIzNCBTeXN0ZW1hY2hzZQorYWx3YXlzIGVuIDE0CithbHdheXMgZGVudW56IDE0NS0xNS0xMzQ1LTI1Ni0xMzU2IHNob3VsZG4ndCB1c2UgdGhlIGVuLWNvbnRyYWN0aW9uCithbHdheXMgZXIgMTI0NTYKK2Fsd2F5cyBkZXJlZmVyZW56aWVyIDE0NS0xNS0xMjM1LTE1LTEyNC0xMjQ1Ni0xNC0xMzU2LTM0Ni0xMjM1IHNob3VsZG4ndCB1c2UgdGhlIGVyLWNvbnRyYWN0aW9uCithbHdheXMgZGVyZWd1bGllciAxNDUtMTUtMTIzNS0xNS0xMjQ1LTEzNi0xMjMtMzQ2LTEyMzUgc2hvdWxkbid0IHVzZSB0aGUgZXItY29udHJhY3Rpb24KK2Fsd2F5cyBlcyAxMjM0NTYKK2Fsd2F5cyBnZSAxMjM0NgorcHJmd29yZCBnZWhlIDEyNDUtMjM1Ni0xNQorcHJmd29yZCBnZWhlbiAxMjQ1LTIzNTYtMTQKK3ByZndvcmQgZ2VoZW5kIDEyNDUtMjM1Ni0xNC0xNDUKK3ByZndvcmQgZ2VoZW5kZSAxMjQ1LTIzNTYtMTQtMTQ1LTE1CitwcmZ3b3JkIGdlaGVuZGVtIDEyNDUtMjM1Ni0xNC0xNDUtMTIzNTYKK3ByZndvcmQgZ2VoZW5kZW4gMTI0NS0yMzU2LTE0LTE0NS0xNAorcHJmd29yZCBnZWhlbmRlciAxMjQ1LTIzNTYtMTQtMTQ1LTEyNDU2CitwcmZ3b3JkIGdlaGVuZGVzIDEyNDUtMjM1Ni0xNC0xNDUtMTIzNDU2CitiZWZvcmUga29uc29uYW50IGFsd2F5cyBnZWggMTI0NS0yMzU2CithbHdheXMgdW1nZWh1bmcgMTM2LTEzNC0xMjQ1LTIzNTYtMTM2IHNob3VsZG4ndCB1c2UgdGhlIGdlLWNvbnRyYWN0aW9uCitiZWZvcmUga29uc29uYW50IGFsd2F5cyBiZWwgMTItMTM0NTYgw5xiZWxrZWl0IHNob3VsZG4ndCB1c2UgdGhlIGJlLWNvbnRyYWN0aW9uCit3b3JkIGJlbCAxMi0xMzQ1NgorYmVmb3JlIGtvbnNvbmFudCBhbHdheXMgYmVtIDEyLTEyMzU2CitiZWZvcmUga29uc29uYW50IGFsd2F5cyBiZW4gMTItMTQKK2JlZm9yZSBrb25zb25hbnQgYWx3YXlzIGJlciAxMi0xMjQ1NgorYmVmb3JlIGtvbnNvbmFudCBhbHdheXMgZ2VsIDEyNDUtMTM0NTYga2xpbmdlbHRvbiBzaG91bGRuJ3QgdXNlIHRoZSBnZS1jb250cmFjdGlvbgorYmVmb3JlIGtvbnNvbmFudCBhbHdheXMgZ2VuIDEyNDUtMTQKK2JlZ3dvcmQgbHVuZ2VuIDEyMy0yNTYtMTI0NS0xNCBzaG91bGRuJ3QgdXNlIHRoZSBnZS1jb250cmFjdGlvbgorYmVnd29yZCBtYWdlbiAxMzQtMS0xMjQ1LTE0IHNob3VsZG4ndCB1c2UgdGhlIGdlLWNvbnRyYWN0aW9uCitiZWZvcmUga29uc29uYW50IGFsd2F5cyB0ZW4gMjM0NS0xNAorYWx3YXlzIGVsZWZhbnQgMTM0NTYtMTUtMTI0LTIzNS0yMzQ1CitiZWZvcmUga29uc29uYW50IGFsd2F5cyB0ZXIgMjM0NS0xMjQ1NgorYWx3YXlzIGfDvHRlciAxMjQ1LTEyNTYtMjM0NS0xMjQ1NiBzaG91bGQgdXNlIHRoZSBlci1jb250cmFjdGlvbgorYWx3YXlzIGfDvHRlcmVnZWwgMTI0NS0xMjU2LTIzNi0xMjM1LTE1LTEyNDUtMTM0NTYKK2Fsd2F5cyBnw7x0ZXJpY2h0IDEyNDUtMTI1Ni0yMzYtMi0zNDU2CittaWRlbmR3b3JkIGljaCAzNDU2CittaWRlbmR3b3JkIGlnIDQ1CithbHdheXMgaW4gMzUKKworbWlkZW5kd29yZCBsaWNoIDQ1NgorYWx3YXlzIGxpY2h0Ym9nZW4gMTIzLTM0NTYtMjM0NS0xMi0xMzUtMTI0NS0xNCBzaG91bGRuJ3QgdXNlIHRoZSBsaWNoLWNvbnRyYWN0aW9uCithbHdheXMgbGljaHRuYWhyIDEyMy0zNDU2LTIzNDUtMTM0NS0xLTEyNS0xMjM1IHNob3VsZG4ndCB1c2UgdGhlIGxpY2gtY29udHJhY3Rpb24KK2Fsd2F5cyBsaWNodHNjaCAxMjMtMzQ1Ni0yMzQ1LTE1NgorYWx3YXlzIGJvZGVubGljaHQgMTItMTM1LTE0NS0xNC0xMjMtMzQ1Ni0yMzQ1IHNob3VsZG4ndCB1c2UgdGhlIGxpY2gtY29udHJhY3Rpb24KK2JlZ3dvcmQgc2VlID0KK2JlZ3dvcmQgbmV1c2VlIDEzNDUtMTI2LTIzNC0xNS0xNQorI2JlZm9yZSBrb25zb25hbnQgYWx3YXlzIHNlZW4gMjM0LTE1LTE0Cit3b3JkIHNlZWxlIDIzNC0xNS0xMzQ1Ni0xNQorc3Vmd29yZCBzZWVsZW4gMjM0LTE1LTEzNDU2LTE0CithbHdheXMgc2VlbGlzY2ggMjM0LTE1LTEzNDU2LTI0LTE1Ngord29yZCB0ZWVyIDIzNDUtMTUtMTI0NTYKK3N1ZndvcmQgdGVlcmFydGlnIDIzNDUtMTUtMTI0NTYtMzU2LTIzNDUtNDUKK2JlZm9yZSBrb25zb25hbnQgYmVnd29yZCB0ZWVyIDIzNDUtMTUtMTI0NTYKK3dvcmQgdGVlcmUgMjM0NS0xNS0xMjQ1Ni0xNQord29yZCB0ZWVyZW4gMjM0NS0xNS0xMjQ1Ni0xNAord29yZCB0ZWVyZW5kIDIzNDUtMTUtMTI0NTYtMTQtMTQ1Cit3b3JkIHRlZXJlbmRlIDIzNDUtMTUtMTI0NTYtMTQtMTQ1LTE1Cit3b3JkIHRlZXJlbmRlbSAyMzQ1LTE1LTEyNDU2LTE0LTE0NS0xMjM1Ngord29yZCB0ZWVyZW5kZW4gMjM0NS0xNS0xMjQ1Ni0xNC0xNDUtMTQKK3dvcmQgdGVlcmVuZGVyIDIzNDUtMTUtMTI0NTYtMTQtMTQ1LTEyNDU2Cit3b3JkIHRlZXJlbmRlcyAyMzQ1LTE1LTEyNDU2LTE0LTE0NS0xMjM0NTYKK3dvcmQgdGVlcnVuZyAyMzQ1LTE1LTEyNDU2LTEzNgord29yZCB0ZWVydW5nZW4gMjM0NS0xNS0xMjQ1Ni0xMzYtMTQKK2Fsd2F5cyB0ZWVsaWNoIDIzNDUtMTUtMTUtNDU2IHNob3VsZG4ndCB1c2UgdGhlIGVsLWNvbnRyYWN0aW9uCithbHdheXMgdGVlbMO2ZmZlbCAyMzQ1LTE1LTE1LTEyMy0yNDYtMTI0LTEyNC0xMzQ1NiBzaG91bGRuJ3QgdXNlIHRoZSBlbC1jb250cmFjdGlvbgorYWx3YXlzIHRlZW1hc2NoaW4gMjM0NS0xNS0xNS0xMzQtMTU2IHNob3VsZG4ndCB1c2UgdGhlIGVtLWNvbnRyYWN0aW9uCithbHdheXMgdGVlc2llYiAyMzQ1LTE1LTE1LTIzNC0zNDYtMTIgc2hvdWxkbid0IHVzZSB0aGUgZXMtY29udHJhY3Rpb24KK21pZGVuZHdvcmQgbGwgMTIzNDUKK2Fsd2F5cyBob2xsYW5kIDEyNS0xMzUtMTIzLTEyMy0yMzUtMTQ1IHNob3VsZG4ndCB1c2UgdGhlIGxsLWNvbnRyYWN0aW9uCithbHdheXMgaG9sbMOkbmRlciAxMjUtMTM1LTEyMy0xMjMtMzQ1LTEzNDUtMTQ1LTEyNDU2IHNob3VsZG4ndCB1c2UgdGhlIGxsLWNvbnRyYWN0aW9uCithbHdheXMgaG9sbGFlbmRlciAxMjUtMTM1LTEyMy0xMjMtMzQ1LTEzNDUtMTQ1LTEyNDU2IHNob3VsZG4ndCB1c2UgdGhlIGxsLWNvbnRyYWN0aW9uCittaWRlbmR3b3JkIG1tIDEzNDYKK2Fsd2F5cyB3dXJtID0gd3VybW1pdHRlbCBzaG91bGRuJ3QgdXNlIHRoZSBtbS1jb250cmFjdGlvbgorYmVnbWlkd29yZCBvciAyNgorCithbHdheXMgc2NoYW9zIDIzNC0xNDU2LTEtMTM1LTIzNAorYWZ0ZXIga29uc29uYW50IG1pZHdvcmQgc3MgPQorYWZ0ZXIga29uc29uYW50IG1pZGVuZHdvcmQgc3NhdHogMjM0LTIzNC0xMzU2CithZnRlciBrb25zb25hbnQgbWlkZW5kd29yZCBzc8OkdHogMjM0LTUtMjM0LTEzNTYKK2FmdGVyIGtvbnNvbmFudCBtaWRlbmR3b3JkIHNzYWV0eiAyMzQtNS0yMzQtMTM1NgorYWZ0ZXIga29uc29uYW50IG1pZHdvcmQgc3NjaCAyMzQtMTU2CithbHdheXMgc3NjaGljaHQgMjM0LTE1Ni0zNDU2LTIzNDUKK2Fsd2F5cyBzc2NobGFnIDIzNC0xNTYtMTI0NQorYWx3YXlzIHNzY2hsw6RnIDIzNC01LTE1Ni0xMjQ1CithbHdheXMgc3NjaGxhZWcgMjM0LTUtMTU2LTEyNDUKK2Fsd2F5cyBzc2NobGllw58gMjM0LTE1Ni0yMzQ2CithbHdheXMgc3NjaG11Y2sgMjM0LTE1Ni0xMzQtMTM2LTQ2CithbHdheXMgc3NjaG51ciAyMzQtMTU2LTEzNDUtMTM2LTEyMzUgc2hvdWxkbid0IHVzZSB0aGUgbnVyLWNvbnRyYWN0aW9uCithbHdheXMgc3NjaG9vbCAyMzQtMjM0LTE0NTYtMTM1LTEzNS0xMjMgZm9yZWlnbiB3b3JkLCBzY2gtY29udHJhY3Rpb24gbm90IGFsbG93ZWQKK2Fsd2F5cyBzc2NocmVpYiAyMzQtMTU2LTEyCithbHdheXMgc3NjaHJpZWIgMjM0LTItMTU2CithbHdheXMgc3NjaHJpZnQgMjM0LTE1Ni0yMzQ1CithbHdheXMgc3NjaHdpZXJpZyAyMzQtMTU2LTQ1CithbHdheXMgc3NlbGJzdCAyMzQtMjM0LTIzNDU2CithbHdheXMgc3NlbGJzdMOkbmQgMjM0LTIzNC0xMzQ1Ni0xMi01LTIzNDU2IHNob3VsZG4ndCB1c2UgdGhlIHNlbGJzdC1jb250cmFjdGlvbgorYWx3YXlzIHNzZWxic3RhZW5kIDIzNC0yMzQtMTM0NTYtMTItNS0yMzQ1NiBzaG91bGRuJ3QgdXNlIHRoZSBzZWxic3QtY29udHJhY3Rpb24KK2FmdGVyIGtvbnNvbmFudCBhbHdheXMgc3NldHogMjM0LTItMTUKK2FmdGVyIGtvbnNvbmFudCBtaWRlbmR3b3JkIHNzZXNhbSAyMzQtMjM0LTEyMzQ1Ni0xLTEzNCBzaG91bGRuJ3QgdXNlIHRoZSBzYW0tY29udHJhY3Rpb24KK2Fsd2F5cyBzc2ljaGVyIDIzNC0yMzQtMzQ1Ni0xMjQ1NgorYWZ0ZXIga29uc29uYW50IGFsd2F5cyBzc2l0eiAyMzQtMi0yNAorYWx3YXlzIHNzb2xjaCAyMzQtMjM0LTE0NTYKK2FmdGVyIGtvbnNvbmFudCBtaWRlbmR3b3JkIHNzb2xsIDIzNC0yLTIzNAorYWx3YXlzIHNzb25kZXJuIDIzNC0yMzQtMTM0NQorYWx3YXlzIHNzb3ppYWwgMjM0LTIzNC0xMjMKK2Fsd2F5cyBlc3BpZWwgMTUtMi0zNDYKK2Fsd2F5cyBzc3BpZWwgMjM0LTItMzQ2CithbHdheXMgZXNwcmFjaCAxNS0yMzQtMTIzNAorYWx3YXlzIHNzcHJhY2ggMjM0LTIzNC0xMjM0CithbHdheXMgc3NwcsOkY2ggMjM0LTUtMjM0LTEyMzQKK2Fsd2F5cyBzc3ByYWVjaCAyMzQtNS0yMzQtMTIzNAorYWx3YXlzIGVzcHJlY2ggMTUtMi0yMzQ2CithbHdheXMgc3NwcmVjaCAyMzQtMi0yMzQ2CithZnRlciBrb25zb25hbnQgbWlkZW5kd29yZCBzc3QgMjM0LTIzNDU2CithbHdheXMgc3N0YWF0IDIzNC0yMzQ1Ni0yMzQ1CithZnRlciBrb25zb25hbnQgbWlkZW5kd29yZCBzc3RhbmQgMjM0LTItMjM0NTYKK2FmdGVyIGtvbnNvbmFudCBtaWRlbmR3b3JkIHNzdMOkbmQgMjM0LTUtMjM0NTYKK2FmdGVyIGtvbnNvbmFudCBtaWRlbmR3b3JkIHNzdGFlbmQgMjM0LTUtMjM0NTYKK2FmdGVyIGtvbnNvbmFudCBtaWRlbmR3b3JkIHNzdGVsbCAyMzQtMi0xMzQ1NgorYWx3YXlzIHNzdGVpZ2VyIDIzNC0yMzQ1Ni0xNDYtMTI0NS0xMjQ1NgorYmVmb3JlIGUgYWx3YXlzIHNzdHVuZCAyMzQtMjM0NTYtMjU2LTE0NSBzaG91bGRuJ3QgdXNlIHRoZSB1bmQtY29udHJhY3Rpb24KK21pZGVuZHdvcmQgc3MgMjM0NgorCittaWRlbmR3b3JkIHRlIDIzNgorc3Vmd29yZCBhdGVtIDEtMjM0NS0xMjM1NiBzaG91bGRuJ3QgdXNlIHRoZSB0ZS1jb250cmFjdGlvbgorYWx3YXlzIHVuIDI1NgorCittaWRlbmR3b3JkIHRlaSAyMzQ1LTE0NgorCithbHdheXMgYWxsIDEtMTIzNDUKK2Fsd2F5cyBlbGwgMTUtMTIzNDUKK2Fsd2F5cyBlbW0gMTUtMTM0NgorYWx3YXlzIGVzY2ggMTUtMTU2CithbHdheXMgZXNzIDE1LTIzNDYKK2Fsd2F5cyBlc3QgMTUtMjM0NTYKKworZW5kd29yZCB0ZWwgMjM0NS0xMzQ1NgorYWx3YXlzIHNjaGVpdGVsIDE1Ni0xNDYtMjM0NS0xMzQ1NiBzaG91bGRuJ3QgdXNlIHRoZSB0ZS1jb250cmFjdGlvbgorYmVnd29yZCBiZXR0ZWwgMTItMTUtMjM0NS0yMzQ1LTEzNDU2IHNob3VsZG4ndCB1c2UgdGhlIHRlLWNvbnRyYWN0aW9uCitlbmR3b3JkIHRlbG4gMjM0NS0xMzQ1Ni0xMzQ1CitlbmR3b3JkIHRlbHMgMjM0NS0xMzQ1Ni0yMzQKK2VuZHdvcmQgdGVtIDIzNDUtMTIzNTYKK2VuZHdvcmQgdGVuZSAyMzQ1LTE0LTE1CithbHdheXMgdHRlbiAyMzQ1LTIzNDUtMTQgc2hvdWxkbid0IHVzZSB0aGUgdGUtY29udHJhY3Rpb24KK2Fsd2F5cyB0dGVyIDIzNDUtMjM0NS0xMjQ1NiBzaG91bGRuJ3QgdXNlIHRoZSB0ZS1jb250cmFjdGlvbgorYWx3YXlzIGRhdGVuIDE0NS0xLTIzNDUtMTQgCithbHdheXMga2FydGVuIDEzLTM1Ni0yMzQ1LTE0CittaWRlbmR3b3JkIG1hdGVuIDEzNC0xLTIzNDUtMTQgc2hvdWxkbid0IHVzZSB0aGUgdGUtY29udHJhY3Rpb24KK2VuZHdvcmQgdGVuZW0gMjM0NS0xNC0xMjM1NgorZW5kd29yZCB0ZW5lbiAyMzQ1LTE0LTE0CitlbmR3b3JkIHRlbmVyIDIzNDUtMTQtMTI0NTYKK2VuZHdvcmQgYmVuZXMgMTItMTQtMTIzNDU2CitlbmR3b3JkIHRlbmVzIDIzNDUtMTQtMTIzNDU2CitlbmR3b3JkIHRlbnMgMjM0NS0xNC0yMzQKK2VuZHdvcmQgdGVyIDIzNDUtMTI0NTYKK2VuZHdvcmQgdGVyZSAyMzQ1LTEyNDU2LTE1CitlbmR3b3JkIHRlcmVtIDIzNDUtMTI0NTYtMTIzNTYKK2VuZHdvcmQgdGVyZW4gMjM0NS0xMjQ1Ni0xNAorZW5kd29yZCB0ZXJlcyAyMzQ1LTEyNDU2LTEyMzQ1NgorZW5kd29yZCB0ZXJzIDIzNDUtMTI0NTYtMjM0CithbHdheXMgbGl0ZXIgMTIzLTI0LTIzNDUtMTI0NTYKK2VuZHdvcmQgdGVybiAyMzQ1LTEyNDU2LTEzNDUKK2VuZHdvcmQgdGVzIDIzNDUtMTIzNDU2CisKK2VuZHdvcmQgYmVsIDEyLTEzNDU2IHNob3VsZG4ndCB1c2UgdGhlIGJlLWNvbnRyYWN0aW9uCitlbmR3b3JkIGJlbG4gMTItMTM0NTYtMTM0NSBzaG91bGRuJ3QgdXNlIHRoZSBiZS1jb250cmFjdGlvbgorZW5kd29yZCBiZWxucyAxMi0xMzQ1Ni0xMzQ1LTIzNCBzaG91bGRuJ3QgdXNlIHRoZSBiZS1jb250cmFjdGlvbgorZW5kd29yZCBiZWxzIDEyLTEzNDU2LTIzNCBzaG91bGRuJ3QgdXNlIHRoZSBiZS1jb250cmFjdGlvbgorbWlkd29yZCBiZWxsw6RuZyAxMi0xMzQ1Ni01LTEyMy0xMjQ1IGthYmVsbMOkbmdlIHNob3VsZG4ndCB1c2UgdGhlIGxsLWNvbnRyYWN0aW9uCittaWR3b3JkIGJlbGxhZW5nIDEyLTEzNDU2LTUtMTIzLTEyNDUKK21pZGVuZHdvcmQgYmVsdW5nIDEyLTEzNDU2LTEzNgorYmVmb3JlIHN0IG1pZGVuZHdvcmQgYmVsdW5ncyAxMi0xMzQ1Ni0xMzYtMjM0CithbHdheXMgYmVsdmVkZXIgMTItMTM0NTYtMTIzNi0xNS0xNDUtMTI0NTYgc2hvdWxkbid0IHVzZSB0aGUgYmUtY29udHJhY3Rpb24KK2Fsd2F5cyB3aXJiZWwgMjQ1Ni0yNC0xMjM1LTEyLTEzNDU2IHNob3VsZG4ndCB1c2UgdGhlIGJlLWNvbnRyYWN0aW9uCitlbmR3b3JkIGJlbiAxMi0xNCBzaG91bGRuJ3QgdXNlIHRoZSBiZS1jb250cmFjdGlvbgorZW5kd29yZCBiZW5kIDEyLTE0LTE0NSBzaG91bGRuJ3QgdXNlIHRoZSBiZS1jb250cmFjdGlvbgorZW5kd29yZCBiZW5kZSAxMi0xNC0xNDUtMTUgc2hvdWxkbid0IHVzZSB0aGUgYmUtY29udHJhY3Rpb24KK2VuZHdvcmQgYmVuZGVtIDEyLTE0LTE0NS0xMjM1NiBzaG91bGRuJ3QgdXNlIHRoZSBiZS1jb250cmFjdGlvbgorZW5kd29yZCBiZW5kZW4gMTItMTQtMTQ1LTE0IHNob3VsZG4ndCB1c2UgdGhlIGJlLWNvbnRyYWN0aW9uCitlbmR3b3JkIGJlbmRlciAxMi0xNC0xNDUtMTI0NTYgc2hvdWxkbid0IHVzZSB0aGUgYmUtY29udHJhY3Rpb24KK2VuZHdvcmQgYmVuZGVzIDEyLTE0LTE0NS0xMjM0NTYgc2hvdWxkbid0IHVzZSB0aGUgYmUtY29udHJhY3Rpb24KK2VuZHdvcmQgYmVuZW0gMTItMTQtMTIzNTYgc2hvdWxkbid0IHVzZSB0aGUgYmUtY29udHJhY3Rpb24KK2VuZHdvcmQgYmVuZW4gMTItMTQtMTQgc2hvdWxkbid0IHVzZSB0aGUgYmUtY29udHJhY3Rpb24KK2VuZHdvcmQgYmVucyAxMi0xNC0yMzQgc2hvdWxkbid0IHVzZSB0aGUgYmUtY29udHJhY3Rpb24KK2VuZHdvcmQgYmVyIDEyLTEyNDU2IHNob3VsZG4ndCB1c2UgdGhlIGJlLWNvbnRyYWN0aW9uCitlbmR3b3JkIGJlcmVpIDEyLTEyNDU2LTE0NiBzaG91bGRuJ3QgdXNlIHRoZSBiZS1jb250cmFjdGlvbgorZW5kd29yZCBiZXJlaWVuIDEyLTEyNDU2LTE0Ni0xNCBzaG91bGRuJ3QgdXNlIHRoZSBiZS1jb250cmFjdGlvbgorZW5kd29yZCBiZXJpbiAxMi0xMjQ1Ni0zNSBzaG91bGRuJ3QgdXNlIHRoZSBiZS1jb250cmFjdGlvbgorZW5kd29yZCBiZXJpbm5lbiAxMi0xMjQ1Ni0zNS0xMzQ1LTE0IHNob3VsZG4ndCB1c2UgdGhlIGJlLWNvbnRyYWN0aW9uCitlbmR3b3JkIGJlcm4gMTItMTI0NTYtMTM0NSBzaG91bGRuJ3QgdXNlIHRoZSBiZS1jb250cmFjdGlvbgorZW5kd29yZCBiZXJzIDEyLTEyNDU2LTIzNCBzaG91bGRuJ3QgdXNlIHRoZSBiZS1jb250cmFjdGlvbgorYWx3YXlzIG9iZXIgMTM1LTEyLTEyNDU2IHNob3VsZG4ndCB1c2UgdGhlIGJlLWNvbnRyYWN0aW9uCitlbmR3b3JkIGJlcyAxMi0xMjM0NTYgc2hvdWxkbid0IHVzZSB0aGUgYmUtY29udHJhY3Rpb24KKworYWx3YXlzIGJlZ2VoIDIzLTEyNDUtMjM1NiBzaG91bGRuJ3QgdXNlIHRoZSBnZS1jb250cmFjdGlvbgorYWx3YXlzIGdldHJpZWJlZ2Vow6R1cyAxMjM0Ni0yMzQ1LTEyMzUtMzQ2LTIzLTEyMzQ2LTEyNS0zNC0yMzQgc2hvdWxkbid0IHVzZSB0aGUgZWgtY29udHJhY3Rpb24KK2Fsd2F5cyBnZXRyaWViZWdlaGFldXMgMTIzNDYtMjM0NS0xMjM1LTM0Ni0yMy0xMjM0Ni0xMjUtMzQtMjM0IHNob3VsZG4ndCB1c2UgdGhlIGVoLWNvbnRyYWN0aW9uCithbHdheXMgdW1nZWh0IDEzNi0xMzQtMTI0NS0yMzU2LTIzNDUgc2hvdWxkbid0IHVzZSB0aGUgZ2UtY29udHJhY3Rpb24KK2Fsd2F5cyBnZWlnIDEyNDUtMTQ2LTEyNDUgc2hvdWxkIHVzZSB0aGUgZWktY29udHJhY3Rpb24KK2Fsd2F5cyBnZWlzZWwgMTI0NS0xNDYtMjM0LTEzNDU2IHNob3VsZG4ndCB1c2UgdGhlIGdlLWNvbnRyYWN0aW9uCithbHdheXMgZ2Vpc3QgMTI0NS0xNDYtMjM0NTYKK3ByZndvcmQgZ2VsIDEyNDUtMTM0NTYgc2hvdWxkbid0IHVzZSB0aGUgZ2UtY29udHJhY3Rpb24KK21pZGVuZHdvcmQgZ2VsaGFmdCAxMjQ1LTEzNDU2LTEyNS0xMjQKK21pZHdvcmQgZ2VsbMOkbmcgMTI0NS0xMzQ1Ni01LTEyMy0xMjQ1CittaWR3b3JkIGdlbGxhZW5nIDEyNDUtMTM0NTYtNS0xMjMtMTI0NQorcHJmd29yZCBnZWxuIDEyNDUtMTM0NTYtMTM0NQorcHJmd29yZCBnZWxucyAxMjQ1LTEzNDU2LTEzNDUtMjM0CitwcmZ3b3JkIGdlbHMgMTI0NS0xMzQ1Ni0yMzQKK21pZGVuZHdvcmQgZ2VsdW5nIDEyNDUtMTM0NTYtMTM2CitiZWZvcmUgc3QgbWlkZW5kd29yZCBnZWx1bmdzIDEyNDUtMTM0NTYtMTM2LTIzNAorcHJmd29yZCBnZW4gMTI0NS0xNCBzaG91bGRuJ3QgdXNlIHRoZSBnZS1jb250cmFjdGlvbgorbWlkZW5kd29yZCBnZW5kIDEyNDUtMTQtMTQ1IHNob3VsZG4ndCB1c2UgdGhlIGdlLWNvbnRyYWN0aW9uCitlbmR3b3JkIGdlbnMgMTI0NS0xNC0yMzQgc2hvdWxkbid0IHVzZSB0aGUgZ2UtY29udHJhY3Rpb24KK21pZGVuZHdvcmQgZ2VyIDEyNDUtMTI0NTYgc2hvdWxkIHVzZSBlci1jb250cmFjdGlvbiBpZiBub3QgcGFydCBvZiBhIHdvcmQgaW50cm8KK2JlZm9yZSByIGJlZ3dvcmQgYWJnZSAxLTEyLTEyMzQ2CitiZWZvcmUgciBiZWd3b3JkIGFuZ2UgMjM1LTEyMzQ2Cit3b3JkIGFuZ2VyIDIzNS0xMjQ1LTEyNDU2Cit3b3JkIGFuZ2VybiAyMzUtMTI0NS0xMjQ1Ni0xMzQ1Cit3b3JkIGFuZ2VycyAyMzUtMTI0NS0xMjQ1Ni0yMzQKK2JlZ3dvcmQgdW5hbmdlIDI1Ni0yMzUtMTIzNDYKK2JlZ21pZHdvcmQgYXVmZ2VyIDItMTYtMTIzNDYtMTIzNQorYmVnbWlkd29yZCBhdXNnZXIgMzQtMTIzNDYtMTIzNQorYmVmb3JlIHIgYmVnbWlkd29yZCBlaW5nZSAxMjQ2LTEyMzQ2CitiZWd3b3JkIHVuZ2VyIDI1Ni0xMjM0Ni0xMjM1CitzdWZ3b3JkIHVuZ2VyZWNodCAyNTYtMTIzNDYtMTIzNS0yMzQ1CithbHdheXMgZ2VyaWViZW4gMTIzNDYtMTIzNS0zNDYtMTItMTQgc2hvdWxkIHVzZSB0aGUgZ2UtY29udHJhY3Rpb24KK3N1ZndvcmQgenVnZSAyLTEzNTYtMTIzNDYKK2VuZHdvcmQgZ2VzIDEyNDUtMTIzNDU2IHNob3VsZG4ndCB1c2UgdGhlIGdlLWNvbnRyYWN0aW9uCithbHdheXMgc2llZ2VzIDIzNC0zNDYtMTI0NS0xMjM0NTYKK2Fsd2F5cyB0YWdlc2xpY2h0IDIzNDUtMS0xMjQ1LTEyMzQ1Ni0xMjMtMzQ1Ni0yMzQ1IHNob3VkbG4ndCB1c2UgdGhlIGdlLSBub3IgbGljaC1jb250cmFjdGlvbgorYWx3YXlzIGV1dGhhbmFzaWUgMTI2LTIzNDUtMTI1LTIzNS0xLTIzNC0zNDYKK2Fsd2F5cyBhbnRhc2llIDIzNS0yMzQ1LTEtMjM0LTM0NgorZW5kd29yZCBhbnRhc2llbiAyMzUtMjM0NS0xLTIzNC0yNC0xNAorbWlkZW5kd29yZCBpZW4gMjQtMTQgc2hvdWxkbid0IHVzZSB0aGUgaWUtY29udHJhY3Rpb24KK2Fsd2F5cyBlcnNjaGllbiAxMjQ1Ni0xNTYtMzQ2LTEzNDUKK3ByZndvcmQgaW5kdXN0cmllbiAzNS0xNDUtMTM2LTIzNDU2LTEyMzUtMjQtMTQKK2JlZm9yZSBuIGFsd2F5cyBpbmR1c3RyaWUgMzUtMTQ1LTEzNi0yMzQ1Ni0xMjM1LTM0NiBpbmR1c3RyaWVuYXRpb24gc2hvdWxkbid0IHVzZSB0aGUgZW4tY29udHJhY3Rpb24KK2JlZ21pZHdvcmQgYW5vbWFsIDIzNS0xMzUtMTM0LTI1IHNob3VsZG4ndCB1c2UgdGhlIG1hbC1jb250cmFjdGlvbgorZW5kd29yZCBhbm9tYWwgMjM1LTEzNS0xMzQtMS0xMjMgc2hvdWxkbid0IHVzZSB0aGUgbWFsLWNvbnRyYWN0aW9uCittaWRlbmR3b3JkIGllbmUgMzQ2LTEzNDUtMTUgc2hvdWxkIHVzZSB0aGUgaWUtY29udHJhY3Rpb24KK21pZGVuZHdvcmQgaWVuZW4gMzQ2LTEzNDUtMTQgc2hvdWxkIHVzZSB0aGUgaWUtY29udHJhY3Rpb24KK2VuZHdvcmQgdGVsIDIzNDUtMTM0NTYgc2hvdWxkIHVzZSB0aGUgZWwtY29udHJhY3Rpb24KK2VuZHdvcmQgdGVuIDIzNDUtMTQgc2hvdWxkIHVzZSB0aGUgZW4tY29udHJhY3Rpb24KK2VuZHdvcmQgdGVyIDIzNDUtMTI0NTYgc2hvdWxkIHVzZSB0aGUgZXItY29udHJhY3Rpb24KK2VuZHdvcmQgdGVzIDIzNDUtMTIzNDU2IHNob3VsZCB1c2UgdGhlIGVzLWNvbnRyYWN0aW9uCithbHdheXMgdHJpZ3JhcGggPSBzaG91bGRuJ3QgdXNlIHRoZSBpZy1jb250cmFjdGlvbgorCisjIFZvcnNpbGJlbmvDvHJ6dW5nZW4KK2JlZ3dvcmQgYXVzIDM0CitiZWd3b3JkIGVudCAyMzQ2Cit3b3JkIGVudGVyIDE0LTIzNDUtMTI0NTYgc2hvdWxkbid0IHVzZSB0aGUgZW50LWNvbnRyYWN0aW9uCitiZWd3b3JkIGV4IDEzNDYKK2JlZ3dvcmQgcHJvIDEyMzQ1CitiZWd3b3JkIHZlciAzNgord29yZCB2ZXJiIDEyMzYtMTI0NTYtMTIKK3dvcmQgdmVycyAxMjM2LTEyNDU2LTIzNAorCitiZWd3b3JkIGF1c3BpeiAxNi0yMzQtMTIzNC0yNC0xMzU2IHNob3VsZG4ndCB1c2UgdGhlIGF1cy1jb250cmFjdGlvbgord29yZCBlbnRlIDE0LTIzNiBzaG91bGRuJ3QgdXNlIHRoZSBlbnQtY29udHJhY3Rpb24KK3N1ZndvcmQgZW50ZW4gMTQtMjM0NS0xNCBzaG91bGRuJ3QgdXNlIHRoZSBlbnQtY29udHJhY3Rpb24KK3dvcmQgZW50Y2hlbiAxNC0yMzQ1LTE0NTYtMTQKK2JlZ3dvcmQgdmVyYW5kYSAxMjM2LTEyNDU2LTIzNi0xNDUtMSBzaG91bGRuJ3QgdXNlIHRoZSB2ZXItY29udHJhY3Rpb24KK2JlZ3dvcmQgdmVydGlrYWwgMTIzNi0xMjQ1Ni0yMzQ1LTI0LTEzLTI1IHNob3VsZG4ndCB1c2UgdGhlIHZlci1jb250cmFjdGlvbgord29yZCB2ZXJ0aWthbCAxMjM2LTEyNDU2LTIzNDUtMjQtMTMtMS0xMjMgc2hvdWxkbid0IHVzZSB0aGUgdmVyLWNvbnRyYWN0aW9uCisKKyMgTmFjaHNpbGJlbmvDvHJ6dW5nZW4KK2VuZHdvcmQgZmFsbHMgMTI0CittaWRlbmR3b3JkIGhlaXQgMTI1CitiZWZvcmUgcyBtaWR3b3JkIGhlaXRzIDEyNS0yMzQKK21pZGVuZHdvcmQga2VpdCAxMworYmVmb3JlIHMgbWlkd29yZCBrZWl0cyAxMy0yMzQKK21pZGVuZHdvcmQgbWFsIDEzNAorc3Vmd29yZCBnZW1hbCAxMjM0Ni0xMzQtMjUgZ2VtYWx0IHNob3VsZG4ndCB1c2UgdGhlIG1hbC1jb250cmFjdGlvbgorbWlkZW5kd29yZCBuaXMgMTM0NgorYWx3YXlzIG5pc2llciAxMzQ1LTI0LTIzNC0zNDYtMTIzNSB0ZWNobmlzaWVydW5nIHNob3VsZG4ndCB1c2UgLW5pcworbWlkZW5kd29yZCBzYW0gMjM0Ngorc3Vmd29yZCBiaXNhbSA9CithbHdheXMgYmlzY2hvZnNhbXQgMTItMjQtMTU2LTEzNS0xMjQtMjM0LTEtMTM0LTIzNDUgc2hvdWxkbid0IHVzZSB0aGUgc2FtLWNvbnRyYWN0aW9uCittaWRlbmR3b3JkIHNjaGFmdCAxNTYKK21pZGVuZHdvcmQgdW5nIDEzNgorYWx3YXlzIGRzY2h1bmdlbCA2LTE0NS0xNTYtMjU2LTEyNDUtMTM0NTYgc2hvdWxkbid0IHVzZSB0aGUgdW5nLWNvbnRyYWN0aW9uCittaWRlbmR3b3JkIHRlcnVuZyAyMzQ1LTEyNDU2LTEzNgorYmVmb3JlIGNzdCBtaWR3b3JkIHVuZ3MgMTM2LTIzNCBCaW5kdW5nc2NoYXJha3RlciwgUmVnaWVydW5nc2NoZWYKK21pZGVuZHdvcmQgd8OkcnRzIDI0NTYKKworbWlkZW5kd29yZCBhdGlvbiA1LTEzNDUKK2Fsd2F5cyBpbmR1c3RyaWVuYXRpb24gMzUtMTQ1LTEzNi0yMzQ1Ni0xMjM1LTM0Ni0xMzQ1LTUtMTM0NQorYmVmb3JlIHMgbWlkd29yZCBhdGlvbnMgNS0xMzQ1LTIzNAorbWlkZW5kd29yZCBhdGl2IDUtMTIzNgorYWZ0ZXIgc3QgYWx3YXlzIGlvbiAyNDUKK2Fsd2F5cyByZWxpZ2lvbiAxMjM1LTEzNDU2LTQ1LTI0NQorYWZ0ZXIgc3QgYmVmb3JlIHN0IGFsd2F5cyBpb25zIDI0NS0yMzQKK2Fsd2F5cyBhY3Rpb24gMS02LTE0LTIzNDUtMjQ1CittaWR3b3JkIGlvbnN0cmljaHQgMjQ1LTIzNC0yMzQ1LTEyMzUtMzQ1Ni0yMzQ1CitlbmR3b3JkIGlzbXVzIDUtMjQKK21pZGVuZHdvcmQgaXN0aXNjaCA1LTE1NgorZW5kd29yZCBuaXNtdXMgMTM0NS01LTI0IHNob3VsZG4ndCB1c2UgdGhlIG5pcy1jb250cmFjdGlvbgorbWlkZW5kd29yZCBuaXN0aXNjaCAxMzQ1LTUtMTU2CittaWRlbmR3b3JkIGl0w6R0IDUtMzQ1CittaWRlbmR3b3JkIGl0YWV0IDUtMzQ1CitiZWZvcmUgcyBtaWR3b3JkIGl0w6R0cyA1LTM0NS0yMzQKK2JlZm9yZSBzIG1pZHdvcmQgaXRhZXRzIDUtMzQ1LTIzNAorbWlkZW5kd29yZCBtaXTDpHQgMTM0LTUtMzQ1IHNob3VsZG4ndCB1c2UgdGhlIG1pdC1jb250cmFjdGlvbgorCitzdWZ3b3JkIGFuaXMgMjM1LTI0LTIzNCBzaG91bGRuJ3QgdXNlIHRoZSBuaXMtY29udHJhY3Rpb24KK2JlZm9yZSBzdCBtaWR3b3JkIGF0aW9ucyA1LTEzNDUtMjM0CitzdWZ3b3JkIGJhcnNjaGFmdCAxMi0zNTYtMTU2LTEtMTI0LTIzNDUgc2hvdWxkbid0IHVzZSB0aGUgc2hhZnQtY29udHJhY3Rpb24KK2Fsd2F5cyBibHVtZW5zYW1lbiAxMi0xMjMtMTM2LTEzNC0xNC0yMzQtMS0xMzQtMTQgc2hvdWxkbid0IHVzZSB0aGUgc2FtLWNvbnRyYWN0aW9uCitwcmZ3b3JkIGRlemltYWwgPSBpZiB3ZSB1c2UgdGhlIG1hbC1jb250cmFjdGlvbiBoZXJlLCB3ZSBnZXQgYSBuZXcgd29yZCBkZXppbQorYmVnbWlkd29yZCBkZXppbWFsIDE0NS0xNS0xMzU2LTI0LTEzNC0yNQorc3Vmd29yZCBzbWFsbCAyMzQtMTM0LTEtMTIzNDUgc2hvdWxkbid0IHVzZSB0aGUgbWFsLWNvbnRyYWN0aW9uCit3b3JkIGJlYXVmb3J0IDEyLTE1LTE2LTEyNC0yNi0yMzQ1IHNob3VsZG4ndCB1c2UgdGhlIGF1Zi1jb250cmFjdGlvbgorc3Vmd29yZCBlcmhlaXRlciAxMjQ1Ni0xMjUtMTQ2LTIzNDUtMTI0NTYgc2hvdWxkbid0IHVzZSB0aGUgaGVpdC1jb250cmFjdGlvbgorcHJmd29yZCBmb3JtYWwgMTI0LTI2LTEzNC0xLTEyMyBzaG91bGRuJ3QgdXNlIHRoZSBtYWwtY29udHJhY3Rpb24KK2JlZ3dvcmQgZm9ybWFsIDEyNC0yNi0xMzQtMjUgc2hvdWxkbid0IHVzZSB0aGUgbWFsLWNvbnRyYWN0aW9uCit3b3JkIGZpcm5pcyA9IHNob3VsZG4ndCB1c2UgdGhlIG5pcy1jb250cmFjdGlvbgorYmVnd29yZCBnZXNhbSAxMjM0Ni0yMzQtMS0xMzQgc2hvdWxkbid0IHVzZSB0aGUgc2FtLWNvbnRyYWN0aW9uCithbHdheXMgaGVycnNjaGFmdCAxMjM1LTEyMzUtMTU2LTEtMTI0LTIzNDUgY2FuIG5vdCB1c2UgdGhlIHNoYWZ0LWNvbnRyYWN0aW9uCithbHdheXMgaG9oZWl0IDEyNS0xMzUtMTI1LTE0Ni0yMzQ1IHNob3VsZG4ndCB1c2UgdGhlIGhlaXQtY29udHJhY3Rpb24KK2Fsd2F5cyBrdWhkdW5nIDEzLTEzNi0xMjUtMTQ1LTI1Ni0xMjQ1IHNob3VsZG4ndCB1c2UgdGhlIHVuZy1jb250cmFjdGlvbgorYWx3YXlzIGh1bmdlciAxMjUtMjU2LTEyNDUtMTI0NTYgc2hvdWxkbid0IHVzZSB0aGUgdW5nLWNvbnRyYWN0aW9uCitiZWZvcmUgZyBiZWd3b3JkIGx1biAxMjMtMjU2IHNob3VsZG4ndCB1c2UgdGhlIHVuZy1jb250cmFjdGlvbgorcHJmd29yZCBtYXhpbWFsID0gc2hvdWxkbid0IHVzZSB0aGUgbWFsLWNvbnRyYWN0aW9uCitiZWdtaWR3b3JkIG1heGltYWwgMTM0LTEtNi0xMzQ2LTI0LTEzNC0yNSBzaG91bGRuJ3QgdXNlIHRoZSBtYWwtY29udHJhY3Rpb24KK2Fsd2F5cyB0ZW5uaXMgMjM0NS0xNC0xMzQ1LTI0LTIzNCBzaG91bGRuJ3QgdXNlIHRoZSBuaXMtY29udHJhY3Rpb24KK21pZGVuZHdvcmQgdW5nc2NoYXJha3RlciAxMzYtMjM0LTE0NTYtMTMKK2JlZm9yZSBzdCBtaWRlbmR3b3JkIHVuZ3MgMTM2LTIzNCBzaG91bGRuJ3QgdXNlIHRoZSBzcy9zdC1jb250cmFjdGlvbgorbWlkZW5kd29yZCB6dW5nIDEzNTYtMTM2IGF1c2VpbmFuZGVyc2V0enVuZyBzaG91bGRuJ3QgdXNlIHRoZSB6dS1jb250cmFjdGlvbgorYmVnd29yZCB6dW5nIDEzNTYtMjU2LTEyNDUgc2hvdWxkbid0IHVzZSB0aGUgdW5nLWNvbnRyYWN0aW9uCisKKyMgRWluZm9ybWlnZSBLw7xyenVuZ2VuLCBudXIgYWxsZWluc3RlaGVuZAord29yZCBhbHMgMTQ2Cit3b3JkIGF1Y2ggMzQKK3dvcmQgZXUgPQord29yZCBkYXMgMTQ1Cit3b3JkIGRhc3MgMjM0Ngord29yZCBkZW4gMTUKK3dvcmQgZGVyIDEyMzUKK3dvcmQgZGVzIDMKK3dvcmQgZGllIDM0Ngord29yZCBpaG0gMjM2Cit3b3JkIGltIDM2IG5vdCBhbGxvd2VkIHdoZW4gdXNlZCBpbiBoeXBoZW5hdGVkIHdvcmRzIGxpa2UgSGFucy1pbS1HbMO8Y2stR2Vmw7xobAorYWZ0ZXIgbGV0dGVyIGxpdGVyYWwgLWltLQord29yZCBpc3QgMjM0NTYKK3dvcmQga2FubiAxMword29yZCBsw6Rzc3QgMTIzCit3b3JkIGxhZXNzdCAxMjMKK3dvcmQgbWFuIDEzNAord29yZCBvZGVyIDEzNQord29yZCBzY2hvbiAxNTYKK3dvcmQgc2ljaCAxNAord29yZCBzaWUgMjM0Cit3b3JkIHdhcyAyNDU2CisKKyMgRWluZm9ybWlnZSBLw7xyenVuZ2VuLCBhbGxlaW5zdGVoZW5kIG9kZXIgaW4gV29ydHZlcmJpbmR1bmdlbgord29yZCBhYmVyIDEKK2Fsd2F5cyBhYmVyIDItMQorYWx3YXlzIGFiZXJkZWVuIDEtMTItMTI0NTYtMTQ1LTE1LTE1LTEzNDUKK21pZHdvcmQgYWJlcmVjaCAxLTIzLTEyMzUtMTUtMTQ1NgorbWlkZW5kd29yZCBhYmVyZWljaCAxLTIzLTEyMzUtMTQ2LTE0NTYKK21pZGVuZHdvcmQgYWJlcmljaHQgMS0yMy0yLTM0NTYKK2JlZ21pZHdvcmQgYWJlcmthbm4gMS0xMi0xMjQ1Ni0xMy0yMzUtMTM0NQorYWx3YXlzIGFiZXJrZW5uIDEtMTItMTI0NTYtMTMtMTQtMTM0NQorYmVnbWlkd29yZCBhYmVybnQgMS0xMi0xMjQ1Ni0xMzQ1LTIzNDUKK3ByZndvcmQgYWJlcm50ZSAxLTEyLTEyNDU2LTEzNDUtMjM2CitwcmZ3b3JkIGFiZXJudGVzdCAxLTEyLTEyNDU2LTEzNDUtMjM2LTIzNDU2CitwcmZ3b3JkIGFiZXJudGV0IDEtMTItMTI0NTYtMTM0NS0yMzYtMjM0NQorcHJmd29yZCBhYmVybnRldGUgMS0xMi0xMjQ1Ni0xMzQ1LTIzNi0yMzYKK3ByZndvcmQgYWJlcm50ZXRlbiAxLTEyLTEyNDU2LTEzNDUtMjM2LTIzNDUtMTQKK3ByZndvcmQgYWJlcm50ZXRlc3QgMS0xMi0xMjQ1Ni0xMzQ1LTIzNi0yMzYtMjM0NTYKK3ByZndvcmQgYWJlcm50ZXRldCAxLTEyLTEyNDU2LTEzNDUtMjM2LTIzNi0yMzQ1CithbHdheXMgYWJlcnJhbnMgMS0xMi0xMjQ1Ni0xMjM1LTIzNS0yMzQKK2Fsd2F5cyBhYmVycmF0aW8gMS0xMi0xMjQ1Ni0xMjM1LTEtMjM0NS0yNC0xMzUKK2Fsd2F5cyBhYmVycmF0aW9uIDEtMTItMTI0NTYtMTIzNS01LTEzNDUKK2Fsd2F5cyBhYmVycmllciAxLTEyLTEyNDU2LTEyMzUtMzQ2LTEyMzUKK2Fsd2F5cyBhYmVyemllaCAxLTEyLTEyNDU2LTEzNTYtMzQ2LTEyNQorYWx3YXlzIGFhYmVyZyAxLTEtMTItMTI0NTYtMTI0NQorYWx3YXlzIGNhYmVybmV0IDYtMTQtMS0xMi0xMjQ1Ni0xMzQ1LTE1LTIzNDUKK3N1ZndvcmQgZmFiZXIgMTI0LTEtMTItMTI0NTYKK21pZHdvcmQgZ2FiZXIgMTI0NS0xLTIzLTEyMzUKK2Fsd2F5cyBnYWJlcmVjaHQgMTI0NS0xLTIzLTEyMzUtMjM0NQorYWx3YXlzIGdhYmVyZWdlbCAxMjQ1LTEtMjMtMTIzNS0xNS0xMjQ1LTEzNDU2CitzdWZ3b3JkIGhhYmVyIDEyNS0xLTEyLTEyNDU2CithbHdheXMgcGhhcm1hYmVyYXQgMTIzNC0xMjUtMzU2LTEzNC0xLTIzLTEyMzUtMS0yMzQ1CithbHdheXMgc2NoYWJlciAxNTYtMS0xMi0xMjQ1NgorYWx3YXlzIGVpc3NjaGFiZXIgMTQ2LTIzNC0xNTYtMS0xMi0xMjQ1NgorYWx3YXlzIG1ha2FiZXIgMTM0LTEtMTMtMS0xMi0xMjQ1NgorYWx3YXlzIGthbmRlbGFiZXIgMTMtMjM1LTE0NS0xMzQ1Ni0xLTEyLTEyNDU2CithbHdheXMgbGFiZXIgMTIzLTEtMTItMTI0NTYKK2Fsd2F5cyBhbm5hYmVyZyAyMzUtMTM0NS0xLTEyLTEyNDU2LTEyNDUKK2Fsd2F5cyBhcmFiZXIgMzU2LTEtMTItMTI0NTYKK2Fsd2F5cyBncmFiZXIgMTI0NS0xMjM1LTEtMTItMTI0NTYKK2Fsd2F5cyB0cmFiZXIgMjM0NS0xMjM1LTEtMTItMTI0NTYKK2JlZ21pZHdvcmQgdGFiZXJuIDIzNDUtMS0xMi0xMjQ1Ni0xMzQ1CithbHdheXMgd2FiZXIgMjQ1Ni0xLTEyLTEyNDU2CithbHdheXMgYmVyZ3phYmVybiAxMi0xMjQ1Ni0xMjQ1LTEzNTYtMS0xMi0xMjQ1Ni0xMzQ1CisKK3dvcmQgYXVmIDE2CithbHdheXMgYXVmIDItMTYKK2JlZm9yZSBnIGFsd2F5cyBhdWZ3aWUgMi0xNi0yNDU2LTM0NiBhdWZ3aWVnZWxuL2F1ZndpZWdsZXIvYXVmd2llZ3N0IHNob3VsZG4ndCB1c2UgdGhlIHdpZS1jb250cmFjdGlvbgorYmVmb3JlIHMgYWx3YXlzIGF1ZndpZSAyLTE2LTI0NTYtMzQ2CitiZWd3b3JkIGF1Znp1Y2sgMi0xNi0xMzU2LTEzNi00NgorYmVmb3JlIGtvbnNvbmFudCBhbHdheXMgYXVmenVnIDItMTYtMTM1Ni0xMzYtMTI0NQorYWx3YXlzIGF1Znp1Z3N0dXJtIDItMTYtMTM1Ni0xMzYtMTI0NS0yMzQtMjM0NS0xMzYtMTIzNS0xMzQgc2hvdWxkbid0IHVzZSB6dS1jb250cmFjdGlvbiBhbmQgc3QtY29udHJhY3Rpb24KK2JlZm9yZSBtIGFsd2F5cyBhdWZ6dWdzdMO8ciAyLTE2LTEzNTYtMTM2LTEyNDUtMjM0LTIzNDUtMTI1Ni0xMjM1IHNob3VsZG4ndCB1c2UgenUtY29udHJhY3Rpb24gYW5kIHN0LWNvbnRyYWN0aW9uCithbHdheXMgYXVmenVnc3TDvHIgMi0xNi0xMzU2LTEzNi0xMjQ1LTIzNC0yMzQ1LTEyNTYtMTIzNSBzaG91bGRuJ3QgdXNlIHp1LWNvbnRyYWN0aW9uIGFuZCBzdC1jb250cmFjdGlvbgorcHJmd29yZCBsYXVmIDEyMy0xNi0xMjQKK3ByZndvcmQgbGF1ZmUgMTIzLTE2LTEyNC0xNQorcHJmd29yZCBsYXVmZW4gMTIzLTE2LTEyNC0xNAorcHJmd29yZCBsYXVmZW5kIDEyMy0xNi0xMjQtMTQtMTQ1CitwcmZ3b3JkIGxhdWZlbmRlIDEyMy0xNi0xMjQtMTQtMTQ1LTE1CitwcmZ3b3JkIGxhdWZlbmRlbSAxMjMtMTYtMTI0LTE0LTE0NS0xMjM1NgorcHJmd29yZCBsYXVmZW5kZW4gMTIzLTE2LTEyNC0xNC0xNDUtMTQKK3ByZndvcmQgbGF1ZmVuZGVyIDEyMy0xNi0xMjQtMTQtMTQ1LTEyNDU2CitwcmZ3b3JkIGxhdWZlbmRlcyAxMjMtMTYtMTI0LTE0LTE0NS0xMjM0NTYKK3ByZndvcmQgbGF1ZmVucyAxMjMtMTYtMTI0LTE0LTIzNAorcHJmd29yZCBsYXVmZXMgMTIzLTE2LTEyNC0xMjM0NTYKK3ByZndvcmQgbGF1ZnMgMTIzLTE2LTEyNC0yMzQKK3ByZndvcmQgbGF1ZnN0IDEyMy0xNi0xMjQtMjM0NTYKK3ByZndvcmQgbGF1ZnQgMTIzLTE2LTEyNC0yMzQ1CithbHdheXMgc2NobGF1ZiAxNTYtMTIzLTE2LTEyNCBzaG91bGRuJ3QgdXNlIHRoZSBhdWYtY29udHJhY3Rpb24KK2Fsd2F5cyBhYmdlbGF1ZiAxLTEyLTEyMzQ2LTEyMy0xNi0xMjQKK2Fsd2F5cyBha2t1bGF1ZiAxLTEzLTEzLTEzNi0xMjMtMTYtMTI0CithbHdheXMgYXVmbGF1ZiAyLTE2LTEyMy0xNi0xMjQKK2Fsd2F5cyBkdXJjaGxhdWYgMi0xNDU2LTEyMy0xNi0xMjQKK2JlZ3dvcmQgdmVybGF1ZiAzNi0xMjMtMTYtMTI0IHNob3VsZG4ndCB1c2UgdGhlIGF1Zi1jb250cmFjdGlvbgorbWlkZW5kd29yZCB2ZXJsYXVmIDEyMzYtMTI0NTYtMTIzLTE2LTEyNCBzaG91bGRuJ3QgdXNlIHRoZSBhdWYtY29udHJhY3Rpb24KKword29yZCBiZWkgMTIKK2Fsd2F5cyBiZWkgMi0xMgorYWx3YXlzIGJlaXp1bmcgMTItMTQ2LTEzNTYtMTM2IHNob3VsZG4ndCB1c2UgdGhlIGJlaS1jb250cmFjdGlvbgorYWx3YXlzIGJlacOfIDEyLTE0Ni02LTIzNDYgc2hvdWxkbid0IHVzZSB0aGUgYmVpLWNvbnRyYWN0aW9uCitlbmR3b3JkIGJlaW4gMTItMTI0NiBzaG91bGRuJ3QgdXNlIHRoZSBiZWktY29udHJhY3Rpb24KK2VuZHdvcmQgYmVpbmUgMTItMTI0Ni0xNSBzaG91bGRuJ3QgdXNlIHRoZSBiZWktY29udHJhY3Rpb24KK2VuZHdvcmQgYmVpbmVuIDEyLTEyNDYtMTQgc2hvdWxkbid0IHVzZSB0aGUgYmVpLWNvbnRyYWN0aW9uCitlbmR3b3JkIGJlaW5lcyAxMi0xMjQ2LTEyMzQ1NiBzaG91bGRuJ3QgdXNlIHRoZSBiZWktY29udHJhY3Rpb24KK2VuZHdvcmQgYmVpbnMgMTItMTI0Ni0yMzQgc2hvdWxkbid0IHVzZSB0aGUgYmVpLWNvbnRyYWN0aW9uCitiZWZvcmUgdCBhbHdheXMgYmVpbmhhbCAyMy0zNS0xMjUtMjUgc2hvdWxkbid0IHVzZSB0aGUgYmVpLWNvbnRyYWN0aW9uCithbHdheXMgYmVpbmhhbHRlciAxMi0xMjQ2LTEyNS0yNS0yMzQ1LTEyNDU2IHNob3VsZCB1c2UgdGhlIGVpLWNvbnRyYWN0aW9uCithbHdheXMgZGFybWJlaW4gMTQ1LTM1Ni0xMzQtMTItMTI0NgorYWx3YXlzIGdhYmVpbnZlbnQgMTI0NS0xLTIzLTM1LTEyMzYtMTQtMjM0NSDDnGJlcmdhYmVpbnZlbnRhciBzaG91bGRuJ3QgdXNlIHRoZSBiZWktY29udHJhY3Rpb24KK2Fsd2F5cyBrcmV1emJlaW4gMTMtMTIzNS0xMjYtMTM1Ni0xMi0xMjQ2CithbHdheXMgc2NoaWVuYmVpbiAxNTYtMzQ2LTEzNDUtMTItMTI0NgorYWx3YXlzIHNjaGzDvHNzZWxiZWluIDE1Ni0xMjMtMTI1Ni0yMzQ2LTEzNDU2LTEyLTEyNDYgc2hvdWxkbid0IHVzZSB0aGUgYmVpLWNvbnRyYWN0aW9uCisKK3dvcmQgZGVtIDEyMzU2CithbHdheXMgZGVtIDItMTIzNTYKK2VuZHdvcmQgZGVtIDE0NS0xMjM1NiBzaG91bGRuJ3QgdXNlIHRoZSBkZW0tY29udHJhY3Rpb24KK2Fsd2F5cyBhdcOfZXJkZW0gMTYtNi0yMzQ2LTEyNDU2LTItMTIzNTYKK2Fsd2F5cyBkZW1hc2sgPSBkZW1hc2tpZXJ0IHNob3VsZG4ndCB1c2UgdGhlIGRlbS1jb250cmFjdGlvbgorYWx3YXlzIGRlbWlsaXQgPSBzaG91bGRuJ3QgdXNlIHRoZSBkZW0tY29udHJhY3Rpb24KK2Fsd2F5cyBkZW1vbnN0ciAxNDUtMTIzNTYtMTM1LTEzNDUtMjM0NTYtMTIzNSBzaG91bGRuJ3QgdXNlIHRoZSBkZW0tY29udHJhY3Rpb24KK3dvcmQgZGVtbyAxNDUtMTIzNTYtMTM1IHNob3VsZG4ndCB1c2UgdGhlIGRlbS1jb250cmFjdGlvbgord29yZCBkZW1vcyAxNDUtMTIzNTYtMTM1LTIzNCBzaG91bGRuJ3QgdXNlIHRoZSBkZW0tY29udHJhY3Rpb24KKword29yZCBkdXJjaCAxNDU2CithbHdheXMgZHVyY2ggMi0xNDU2CitzdWZ3b3JkIGR1cmNoenVjayAyLTE0NTYtMTM1Ni0xMzYtNDYgc2hvdWxkbid0IHVzZSB0aGUgenUtY29udHJhY3Rpb24KK3dvcmQgZHVyY2h6dWcgMi0xNDU2LTEzNTYtMTM2LTEyNDUgc2hvdWxkbid0IHVzZSB0aGUgenUtY29udHJhY3Rpb24KK3dvcmQgZHVyY2h6dWdlcyAyLTE0NTYtMTM1Ni0xMzYtMTI0NS0xMjM0NTYgc2hvdWxkbid0IHVzZSB0aGUgenUtY29udHJhY3Rpb24KK3N1ZndvcmQgZHVyY2h6dWdzIDItMTQ1Ni0xMzU2LTEzNi0xMjQ1LTIzNCBzaG91bGRuJ3QgdXNlIHRoZSB6dS1jb250cmFjdGlvbgorI2JlZ3dvcmQgZHVyY2hlaW5hbmRlcmdlcmF0IDE0NTYtMi0xMjQ2LTEyMzQ2LTEyMzUtMS0yMzQ1CithbHdheXMgenVnZXJhdCAyLTEzNTYtMTIzNDYtMTIzNS0xLTIzNDUgc2hvdWxkbid0IHVzZSB0aGUgZXItY29udHJhY3Rpb24KKword29yZCBmw7xyIDEyNAorYWx3YXlzIGbDvHIgMi0xMjQKK2Fsd2F5cyBmw7xyc3QgMTI0LTEyNTYtMTIzNS0yMzQ1NiBzaG91bGRuJ3QgdXNlIHRoZSBmw7xyLWNvbnRyYWN0aW9uCisKK3dvcmQgZ2VnZW4gMTI0NQorYWx3YXlzIGdlZ2VuIDItMTI0NQorcHJmd29yZCBnZWdlbnp1ZyAyLTEyNDUtMTM1Ni0xMzYtMTI0NQorcHJmd29yZCBnZWdlbnp1Z2UgMi0xMjQ1LTEzNTYtMTM2LTEyMzQ2CitwcmZ3b3JkIGdlZ2VuenVnZXMgMi0xMjQ1LTEzNTYtMTM2LTEyNDUtMTIzNDU2CitwcmZ3b3JkIGdlZ2VuenVncyAyLTEyNDUtMTM1Ni0xMzYtMTI0NS0yMzQKK2JlZm9yZSBnIHN1ZndvcmQgZ2VnZW56dW4gMi0xMjQ1LTEzNTYtMjU2CisKK3dvcmQgZ2V3ZXNlbiAxMjM0NgorYWx3YXlzIGdld2VzZW4gMi0xMjM0NgorYWx3YXlzIGbDvHJzb3JnZXdlc2VuIDItMTI0LTIzNC0yNi0xMjM0Ni0yNDU2LTEyMzQ1Ni0xNCBzaG91bGRuJ3QgdXNlIHRoZSBnZXdlc2VuLWNvbnRyYWN0aW9uCisKK3dvcmQgaW1tZXIgMTM0NgorYWx3YXlzIGltbWVyIDItMTM0NgorYWx3YXlzIGltbWVyc2lvbiAyNC0xMzQ2LTEyNDU2LTIzNC0yNDUgc2hvdWxkbid0IHVzZSB0aGUgaW1tZXItY29udHJhY3Rpb24KK2Fsd2F5cyBpbW1lcnNpdiAyNC0xMzQ2LTEyNDU2LTIzNC0yNC0xMjM2CithbHdheXMgZmxpbW1lciAxMjQtMTIzLTI0LTEzNDYtMTI0NTYKK2Fsd2F5cyB3aW1tZXIgMjQ1Ni0yNC0xMzQ2LTEyNDU2IHNob3VsZG4ndCB1c2UgdGhlIGltbWVyLWNvbnRyYWN0aW9uCithbHdheXMgemltbWVyIDEzNTYtMjQtMTM0Ni0xMjQ1NiBzaG91bGRuJ3QgdXNlIHRoZSBpbW1lci1jb250cmFjdGlvbgorCit3b3JkIGpldHp0IDI0NQorYWx3YXlzIGpldHp0IDItMjQ1CisKK3dvcmQgbWVociAyMzU2CithbHdheXMgbWVociAyLTIzNTYKKword29yZCBtaXQgMjM0NQorYWx3YXlzIG1pdCAyLTIzNDUKKword29yZCBuaWNodCAxMzQ1Cit3b3JkIG4gNi0xMzQ1CithbHdheXMgbmljaHQgMi0xMzQ1CithbHdheXMgbmljaHR6dWdow7ZyIDItMTM0NS0xMzU2LTEzNi0xMjQ1LTEyNS0yNDYtMTIzNQorYWx3YXlzIG5pY2h0enVjayAyLTEzNDUtMTM1Ni0xMzYtNDYKKword29yZCBzbyAxMjM0CithbHdheXMgc28gMi0xMjM0CitlbmR3b3JkIHNvbiA9CithbHdheXMgY3Vyc29yID0gc2hvdWxkbid0IHVzZSB0aGUgc28tY29udHJhY3Rpb24KK2JlZ3dvcmQJCWFic29sCQk9CitiZWd3b3JkCQlhYnNvcmIJCT0KK2JlZ3dvcmQJCWFic29ycAkJPQorYWx3YXlzCQlhZHNvcmJpZXIJMS0xNDUtMjM0LTI2LTEyLTM0Ni0xMjM1CithbHdheXMJCWFlcm9zb2wJCTEtMTI0NTYtMTM1LTIzNC0xMzUtMTIzCithbHdheXMJCWFtdHNvYmVyCTEtMTM0LTIzNDUtMjM0LTEzNS0xMi0xMjQ1NgorYWx3YXlzCQlhbnRocm9wb3NvCTIzNS0yMzQ1LTEyNS0xMjM1LTEzNS0xMjM0LTEzNS0yMzQtMTM1CithbHdheXMJCWNocm9tb3NvbQkxNDU2LTEyMzUtMTM1LTEzNC0xMzUtMjM0LTEzNS0xMzQgc2hvdWxkbid0IHVzZSB0aGUgc28tY29udHJhY3Rpb24KK2Fsd2F5cwkJaXNvCQk9CithbHdheXMJCWtvbnNvbgkJPQorYmVnbWlkd29yZAlzZW5zb3IJCTIzNC0xNC0yMzQtMjYKK2VuZHdvcmQJCXNlbnNvcgkJMjM0LTE0LTIzNC0xMzUtMTIzNQorZW5kd29yZAkJc2Vuc29yCQkyMzQtMTQtMjM0LTEzNS0xMjM1CithbHdheXMJCXNvY2tlbAkJMjM0LTEzNS00Ni0xMzQ1Ngord29yZAkJc29kYQkJPQorYWx3YXlzCQlzb2ZmaXppZXIJMjM0LTEzNS0xMjQtMTI0LTI0LTEzNTYtMzQ2LTEyMzUKK2Fsd2F5cwkJc29mdAkJPQorYWx3YXlzCQlzb2xkYXQJCT0KK2VuZHdvcmQJCXNvbG8JCT0KK2Fsd2F5cwkJc29tbWVyCQkyMzQtMTM1LTEzNDYtMTI0NTYKK2JlZm9yZSBrb25zb25hbnQgYWx3YXlzCXNvbiA9CithbHdheXMJCXNvbm9ncmEJCT0KK2Fsd2F5cwkJc29ubgkJPQorYWx3YXlzCQlzb25zdAkJMjM0LTEzNS0xMzQ1LTIzNDU2CithbHdheXMJCXNvcmllbnRpZXIJMjM0LTI2LTI0LTE0LTIzNDUtMzQ2LTEyMzUKK2JlZm9yZSBrb25zb25hbnQgYWx3YXlzCXNvcgkJMjM0LTI2CithbHdheXMJCXNvdXJjZQkJPQorc3Vmd29yZAkJc291dGgJCT0KK2Fsd2F5cwkJc293amV0CQk9CithbHdheXMJCXNvemlvbG8JCT0KK21pZHdvcmQgdW5nc29wdCAxMzYtMjM0LTEzNS0xMjM0LTIzNDUgQWJlbmRnZXN0YWx0dW5nc29wdGlvbiBzaG91bGRuJ3QgdXNlIHRoZSBzby1jb250cmFjdGlvbgorCit3b3JkIMO8YmVyIDEyNTYKK3dvcmQgdWViZXIgMTI1NgorYWx3YXlzIMO8YmVyIDItMTI1NgorYWx3YXlzIMO8YmVyenVjaHQgMi0xMjU2LTEzNTYtMTM2LTE0NTYtMjM0NQorYWx3YXlzIMO8YmVyenVjayAyLTEyNTYtMTM1Ni0xMzYtNDYKK3ByZndvcmQgw7xiZXJ6dWcgMi0xMjU2LTEzNTYtMTM2LTEyNDUKK3ByZndvcmQgw7xiZXJ6dWdlcyAyLTEyNTYtMTM1Ni0xMzYtMTI0NS0xMjM0NTYKK2JlZm9yZSBrb25zb25hbnQgYWx3YXlzIMO8YmVyenVnIDItMTI1Ni0xMzU2LTEzNi0xMjQ1CithbHdheXMgw7xiZXJsYXVmIDItMTI1Ni0xMjMtMTYtMTI0CisKK3dvcmQgdW5kIDEzNgorYWx3YXlzIHVuZCAyLTEzNgorc3Vmd29yZCBnZXN1bmQgMTIzNDYtMjM0LTI1Ni0xNDUKK3ByZndvcmQgaHVuZCAxMjUtMjU2LTE0NSBzaG91bGRuJ3QgdXNlIHRoZSB1bmQtY29udHJhY3Rpb24KK2Fsd2F5cyBodW5kZSAxMjUtMjU2LTE0NS0xNSBzaG91bGRuJ3QgdXNlIHRoZSB1bmQtY29udHJhY3Rpb24KK2Fsd2F5cyBodW5kZXJ0IDEyNS0yNTYtMTQ1LTEyNDU2LTIzNDUgc2hvdWxkbid0IHVzZSB0aGUgdW5kLWNvbnRyYWN0aW9uCitwcmZ3b3JkIGh1bmRlcnRlIDEyNS0yNTYtMTQ1LTEyNDU2LTIzNiBzaG91bGRuJ3QgdXNlIHRoZSB1bmQtY29udHJhY3Rpb24KK3ByZndvcmQgaHVuZGVuIDEyNS0yNTYtMTQ1LTE0IHNob3VsZG4ndCB1c2UgdGhlIHVuZC1jb250cmFjdGlvbgorcHJmd29yZCBodW5kZXMgMTI1LTI1Ni0xNDUtMTIzNDU2IHNob3VsZG4ndCB1c2UgdGhlIHVuZC1jb250cmFjdGlvbgorYWx3YXlzIGt1bmQgMTMtMjU2LTE0NSBzaG91bGRuJ3QgdXNlIHRoZSB1bmQtY29udHJhY3Rpb24KK2Fsd2F5cyBtdW5kIDEzNC0yNTYtMTQ1IHNob3VsZG4ndCB1c2UgdGhlIHVuZC1jb250cmFjdGlvbgorYWx3YXlzIHJ1bmRmdW5rIDEyMzUtMjU2LTE0NS0xMjQtMjU2LTEzIHNob3VsZG4ndCB1c2UgdGhlIHVuZC1jb250cmFjdGlvbgorc3Vmd29yZCBzY2hydW5kIDE1Ni0xMjM1LTI1Ni0xNDUKK2Fsd2F5cyB3dW5kIDI0NTYtMjU2LTE0NSBzaG91bGRuJ3QgdXNlIHRoZSB1bmQtY29udHJhY3Rpb24KKword29yZCB1bnRlciAyNTYKK2Fsd2F5cyB1bnRlciAyLTI1Ngorc3Vmd29yZCBrdW50ZXIgMTMtMjU2LTIzNDUtMTI0NTYgc2hvdWxkbid0IHVzZSB0aGUgdW50ZXItY29udHJhY3Rpb24KK3N1ZndvcmQga3VudGVyYnVudGVyIDEzLTI1Ni0yMzQ1LTEyNDU2LTEyLTI1Ni0yMzQ1LTEyNDU2CitzdWZ3b3JkIG11bnRlciAxMzQtMjU2LTIzNDUtMTI0NTYgc2hvdWxkbid0IHVzZSB0aGUgdW50ZXItY29udHJhY3Rpb24KK3N1ZndvcmQgdW50ZXJlaW5hbmRlciAyNTYtMi0xMjQ2CithbHdheXMgdmlydXMgPQorCit3b3JkIHZvbGwgMTIzNDUKK2Fsd2F5cyB2b2xsIDItMTIzNDUKK3ByZndvcmQgdm9sbHp1ZyAyLTEyMzQ1LTEzNTYtMTM2LTEyNDUKK3ByZndvcmQgdm9sbHp1Z2UgMi0xMjM0NS0xMzU2LTEzNi0xMjM0NgorcHJmd29yZCB2b2xsenVnZXMgMi0xMjM0NS0xMzU2LTEzNi0xMjQ1LTEyMzQ1NgorYWx3YXlzIHZvbGx6dWdzIDItMTIzNDUtMTM1Ni0xMzYtMTI0NS0yMzQKKword29yZCB2b24gMTIzNgorYWx3YXlzIHZvbiAyLTEyMzYKKword29yZCB2b3IgMjYKK2Fsd2F5cyB2b3IgMi0yNgorYWx3YXlzIHZvcnp1Z3MgMi0yNi0xMzU2LTEzNi0xMjQ1LTIzNAorYWx3YXlzIHZvcnp1Z3N0aW1tZW4gMi0yNi0xMzU2LTEzNi0xMjQ1LTIzNDU2LTI0LTEzNDYtMTQKK2Fsd2F5cyBmYXZvcml0IDEyNC0xLTEyMzYtMjYtMjQtMjM0NSBzaG91bGRuJ3QgdXNlIHRoZSB2b3ItY29udHJhY3Rpb24KKword29yZCB3aWUgMTI2CithbHdheXMgd2llIDItMTI2CithbHdheXMgendpZWJlbCAxMzU2LTI0NTYtMzQ2LTEyLTEzNDU2IHNob3VsZG4ndCB1c2UgdGhlIHdpZS1jb250cmFjdGlvbgorCit3b3JkIHp1IDEzNTYKK2Fsd2F5cyB6dSAyLTEzNTYKK2Fsd2F5cyB6dWdlbnRsYXN0IDEzNTYtMTM2LTEyNDUtMTQtMjM0NS0xMjMtMS0yMzQ1NiBzaG91bGRuJ3QgdXNlIHRoZSB6dS0gbm9yIGdlLWNvbnRyYWN0aW9uCit3b3JkIGluZGVtIDM1LTItMTIzNTYKK3dvcmQgdHJvdHpkZW0gMjM0NS0xMzU2LTItMTIzNTYKK3dvcmQgenVkZW0gMTM1Ni0yLTEyMzU2CithbHdheXMgenVjaHQgMTM1Ni0xMzYtMTQ1Ni0yMzQ1IHNob3VsZG4ndCB1c2UgdGhlIHp1LWNvbnRyYWN0aW9uCithbHdheXMgenVjayAxMzU2LTEzNi00NiBzaG91bGRuJ3QgdXNlIHRoZSB6dS1jb250cmFjdGlvbgorYmVmb3JlIGcgYWx3YXlzIHp1ZyA9CitlbmR3b3JkIHp1ZyA9CitlbmR3b3JkIHp1Z2VzIDEzNTYtMTM2LTEyNDUtMTIzNDU2CisKKyMgRWluZm9ybWlnZSBLw7xyenVuZ2VuLCBhbGxlaW5zdGVoZW5kIG9kZXIgYW0gV29ydGFuZmFuZworc3Vmd29yZCBpaHIgMjQKK3N1ZndvcmQgc2VpbiAyNDYKK3dvcmQgd2FyIDM1Ngord29yZCB3YXJlbiAzNTYtMTQKK3dvcmQgd2Fyc3QgMzU2LTIzNDU2Cit3b3JkIHdhcnQgMzU2LTIzNDUKK3dvcmQgd2FyJ3MgMzU2LTYtMjM0Cit3b3JkIHfDpHIgNS0zNTYKK3dvcmQgd8OkcmUgNS0zNTYtMTUKK3dvcmQgd8OkcmVuIDUtMzU2LTE0Cit3b3JkIHfDpHJlc3QgNS0zNTYtMTUtMjM0NTYKK3dvcmQgd8OkcmV0IDUtMzU2LTE1LTIzNDUKK3dvcmQgd8OkcnN0IDUtMzU2LTIzNDU2Cit3b3JkIHfDpHJ0IDUtMzU2LTIzNDUKK3dvcmQgd8OkcidzIDUtMzU2LTYtMjM0CisKKyMgRWluZm9ybWlnZSBLw7xyenVuZ2VuLCBhbGxlaW5zdGVoZW5kLCBtaXQgRW5kdW5nZW4gb2RlciBpbiBXb3J0dmVyYmluZHVuZ2VuCithbHdheXMgaGF0dCAxMjUKK2Fsd2F5cyBow6R0dCAzNDUKK2Fsd2F5cyBoYWV0dCAzNDUKK2Fsd2F5cyB3ZWxjaCAxMzQ1NgorCit3b3JkIGFkb25pcyA9IHNob3VsZG4ndCB1c2UgdGhlIG5pcy1jb250cmFjdGlvbgorYWx3YXlzIGFrdHVlbGwgMS0xMy0yMzQ1LTEzNi0xNS0xMjM0NSBzaG91bGQgdXNlIHRoZSBsbC1jb250cmFjdGlvbgorYWx3YXlzIGFsbCAxLTEyMzQ1CitzdWZ3b3JkIGFsbGUgMS0xNQorYWx3YXlzIGFsbGVnb3IgMS0xMjM0NS0xNS0xMjQ1LTI2IEFsbGVnb3JpZSBzaG91bGRuJ3QgdXNlIHRoZSBhZS1jb250cmFjdGlvbgorYWx3YXlzIGFsbGVpbiAxLTEyNDYKK3dvcmQgYWxsZW0gMS0xMjM1NgorYWx3YXlzIGFsbGVuIDEtMTQKK2Fsd2F5cyBhbGxlciAxLTEyNDU2CithbHdheXMgYWxsZXJnIDEtMTIzNDUtMTI0NTYtMTI0NSBBbGxlcmdpa2VyCit3b3JkIGFsbGVzIDEtMTIzNDU2CithbHdheXMgYWxsZXNhbXQgMS0xMjM0NS0xNS0yMzQtMS0xMzQtMjM0NSBzaG91bGRuJ3QgdXNlIHRoZSBlcy1jb250cmFjdGlvbgorYWx3YXlzIGFscGhhYmV0IDI1LTEyMzQtMTI1LTEtMTItMTUtMjM0NSBzaG91bGRuJ3QgdXNlIHRoZSBoYWItY29udHJhY3Rpb24KK3dvcmQgYWxzbyAxLTEzNQorYWx3YXlzIGFuZGVyIDItMTI0NTYKK2Fsd2F5cyB3YW5kZXIgMjQ1Ni0yMzUtMTQ1LTEyNDU2IHdhbmRlcm4gc2hvdWxkbid0IHVzZSB0aGUgYW5kZXItY29udHJhY3Rpb24KK3N1ZndvcmQgemFuZGVyIDEzNTYtMjM1LTE0NS0xMjQ1NgorYWx3YXlzIMOkbmRlciA1LTEyNDU2CithbHdheXMgYWLDpG5kZXIgMS0xMi01LTEyNDU2CithbHdheXMgYsOkbmRlciAxMi0zNDUtMTM0NS0xNDUtMTI0NTYgc2hvdWxkbid0IHVzZSB0aGUgw6RuZGVyLWNvbnRyYWN0aW9uCithbHdheXMgYWVuZGVyIDUtMTI0NTYKK2Fsd2F5cyBhcmJlaXQgMzU2LTEyCitiZWZvcmUgcyBhbHdheXMgYXJiZWl0cyAzNTYtMTItMjM0CithbHdheXMgYXJiZW4gMzU2LTEyLTE0CithbHdheXMga2F1ZiAxMy0xNi0xMjQKK2JlZ3dvcmQgYXVzc3ByZWNoIDE2LTItMjM0NgorbWlkZW5kd29yZCBhdXNzcHJlY2ggMTYtMjM0LTItMjM0NgorbWlkZW5kd29yZCBhdXNzdGVsbCAxNi0yMzQtMi0xMzQ1NgorYWx3YXlzIGF1c3RyYWxpIDE2LTIzNDU2LTEyMzUtMjUtMjQgc2hvdWxkbid0IHVzZSB0aGUgYXVzLWNvbnRyYWN0aW9uCithbHdheXMgYXVzdHJpYSAxNi0yMzQ1Ni0xMjM1LTI0LTEgc2hvdWxkbid0IHVzZSB0aGUgYXVzLWNvbnRyYWN0aW9uCisjYmVnd29yZCDDpHXDnyA1LTM0IEZJWE1FOiBob3cgdG8gZGVhbCB3aXRoIMOkdcOfZXJzdD8KKworYWx3YXlzIMOkaG5saWNoIDM0NS00NTYKK2Fsd2F5cyBhZWhubGljaCAzNDUtNDU2CisKK3dvcmQgYmFsc2FtIDEyLTI1LTIzNC0xLTEzNAord29yZCBiZWVuIDEyLTE1LTE1LTEzNDUgZW5nbGlzaCB3b3JkIHNob3VsZG4ndCB1c2UgYmUtIG9yIGVuLWNvbnRyYWN0aW9uCithbHdheXMgYmVlcmUgMTItMTUtMTUtMTIzNS0xNQorYWx3YXlzIGJlZXJlbiAxMi0xNS0xNS0xMjM1LTE0CithbHdheXMgYmVociAxMi0yMzU2LTEyMzUgZW50YmVocmVuCitiZWd3b3JkIGJlaWQgMTItMTQ1IGJlaWRlcnNlaXRzCithbHdheXMgYmVyZyAxMi0xMjQ1Ni0xMjQ1IHNob3VsZG4ndCB1c2UgdGhlIGJlLWNvbnRyYWN0aW9uCithbHdheXMgYmVyZ2UgMTItMTI0NTYtMTIzNDYgc2hvdWxkbid0IHVzZSB0aGUgYmUtY29udHJhY3Rpb24KK2Fsd2F5cyBiZXJnZW4gMTItMTI0NTYtMTI0NS0xNCBzaG91bGRuJ3QgdXNlIHRoZSBiZS1jb250cmFjdGlvbgorYWx3YXlzIGJlcmdlciAxMi0xMjQ1Ni0xMjQ1LTEyNDU2IHNob3VsZG4ndCB1c2UgdGhlIGJlLWNvbnRyYWN0aW9uCithbHdheXMgYmVyZ2VzIDEyLTEyNDU2LTEyNDUtMTIzNDU2IHNob3VsZG4ndCB1c2UgdGhlIGJlLWNvbnRyYWN0aW9uCithbHdheXMgYmVzb25kZXIgMjMKK2Fsd2F5cyBiZXNzZXIgMjM0LTIzNAorY29udHJhY3Rpb24gc3MKK3dvcmQgYmVpbSAxMi0xMzQKK2NvbnRyYWN0aW9uIGJtCit3b3JkIGJpcyAxMi0yMzQKK3N1ZndvcmQgYmlzaGVyIDEyLTIzNC0xMjUtMTI0NTYKK3N1ZndvcmQgYmlzbGFuZyAxMi0yMzQ1LTEyMy0xMjQ1CitzdWZ3b3JkIGJpc3dlaWwgMTItMjM0LTI0NTYtMTQ2LTEyMworYWx3YXlzIGJpc29uID0KKworYWx3YXlzIGJpc3QgMTItMjM0NTYKK2Fsd2F5cyBiaXN0dW0gMTItMjQtMjM0NTYtMTM2LTEzNCBzaG91bGRuJ3QgdXNlIHRoZSBiaXN0LWNvbnRyYWN0aW9uCithbHdheXMgYmxlaWIgMTItMTIKK2NvbnRyYWN0aW9uIGJiCithbHdheXMgYmxpbmQgMTItMTIzCitjb250cmFjdGlvbiBibAorYWx3YXlzIGJyYXVjaCAyLTM0CithbHdheXMgYnLDpHVjaCA1LTM0CithbHdheXMgYnJhZXVjaCA1LTM0CithbHdheXMgYnJpZWYgMTItMTI0Citjb250cmFjdGlvbiBiZgorYWx3YXlzIGJyaW5nIDEyLTEyNDUKK2NvbnRyYWN0aW9uIGJnCisKK2Fsd2F5cyBjaGFyYWt0ZXIgMTQ1Ni0xMworc3Vmd29yZCBjaG9yIDE0NTYtMTM1LTEyMzUgc2hvdWxkbid0IHVzZSB0aGUgb3ItY29udHJhY3Rpb24KK2Fsd2F5cyBjb21wdXQgNi0xNC0xMzUtMTM0LTEyMzQtMTM2LTIzNDUgY29tcHV0ZXIgc2hvdWxkIHVzZSB0aGUgZXItY29udHJhY3Rpb24KKworYWx3YXlzIGRhYmVpIDE0NS0xMgorY29udHJhY3Rpb24gZGIKK2Fsd2F5cyBkYWR1cmNoIDE0NS0xNDUKK2NvbnRyYWN0aW9uIGRkCithbHdheXMgZGFmw7xyIDE0NS0xMjQKK2NvbnRyYWN0aW9uIGRmCithbHdheXMgZGFnZWdlbiAxNDUtMTI0NQorY29udHJhY3Rpb24gZGcKK2Fsd2F5cyBkYWhlciAxNDUtMTI1Citjb250cmFjdGlvbiBkaAorYWx3YXlzIGRhbWl0IDE0NS0xMzQKK2NvbnRyYWN0aW9uIGRtCithbHdheXMgZGFuayAxNDUtMTMKK2NvbnRyYWN0aW9uIGRrCithbHdheXMgZGF2b24gMTQ1LTEyMzYKK2NvbnRyYWN0aW9uIGR2CithbHdheXMgZGF6dSAxNDUtMTM1NgorY29udHJhY3Rpb24gZHoKK2Fsd2F5cyBkYXp1YmxlaWIgMTQ1LTEtMi0xMzU2LTEyLTEyIHNob3VsZG4ndCB1c2UgdGhlIGRhenUtY29udHJhY3Rpb24KK2Fsd2F5cyBkYXp1bWFsIDE0NS0xLTItMTM1Ni0xMzQKK2Fsd2F5cyBkZXV0ZW4gMTQ1LTEyNi0yMzQ1LTE0IHNob3VsZG4ndCB1c2UgdGhlIHRlLWNvbnRyYWN0aW9uCithbHdheXMgZGVhbCA9IGRlYWxlcgord29yZCBkZWkgPSBBZ251cyBEZWkKK2Fsd2F5cyBkZW1va3JhdCAxNDUtMjM0NQorY29udHJhY3Rpb24gZHQKK3dvcmQgZGVuZW4gMTUtMTQKK3dvcmQgZG5pc3RlciAxNDUtMTM0NS0yNC0yMzQtMjM0NS0xMjQ1NiBzaG91bGRuJ3QgdXNlIHRoZSBuaXMtY29udHJhY3Rpb24KK3dvcmQgZGVubiAxNDUtMTM0NQord29yZCBkZW5uc2Nob24gMTQ1LTEzNDUtMTU2LTEzNS0xMzQ1CithbHdheXMgZGVzc2VuIDE0NS0yMzQ2CithbHdheXMgZGV1dHNjaCAxNDUtMTU2Cit3b3JkIGRpZW0gMTQ1LTI0LTEyMzU2IHdlIHNob3VsZG4ndCB1c2UgdGhlIGllLWNvbnRyYWN0aW9uIGhlcmUKK3dvcmQgZGllc2UgMzQ2LTE1Cit3b3JkIGRpZXNlbiAzNDYtMTQKK3dvcmQgZGllc2VyIDM0Ni0xMjQ1Ngord29yZCBkaWVzZXMgMzQ2LTEyMzQ1Ngorc3Vmd29yZCBkaWVzbWFsIDM0Ni0xMzQKK3dvcmQgZGlyIDE0NS0xMjM1Cit3b3JkIGRvY2ggMTQ1LTE0NTYKK2Fsd2F5cyBkcnVjayAxNDUtNDYKK2Fsd2F5cyBkcsO8Y2sgNS0xNDUtNDYKK2Fsd2F5cyBkw7xyZiAyLTE0NQorCithbHdheXMgZWJlbiAxNS0xMi0xNAord29yZCBlYmVuc28gMTUtMTM1Citjb250cmFjdGlvbiBlbworc3Vmd29yZCBlaGVtYWwgMTUtMTI1LTE1LTEzNAord29yZCBlaSA2LTE0NgorYWx3YXlzIGVpZ2VuIDE0Ni0xMjQ1LTE0IEVpZ2VubnV0eiBzaG91bGRuJ3QgdXNlIHRoZSBnZS1jb250cmFjdGlvbgorYWx3YXlzIGVpbmFuZGVyIDItMTI0Ngord29yZCBlbiAxNS0xMzQ1IGVuIHBhc3NhbnQKK2Fsd2F5cyBlbmlnIDE0LTQ1CithbHdheXMgZXJrZW5uIDEyNDU2LTEzLTE0LTEzNDUKK3N1ZndvcmQgZXR3YSAxNS0xCitjb250cmFjdGlvbiBlYQord29yZCBldHdhcyAyMzQ1LTI0NTYKK2NvbnRyYWN0aW9uIHR3CisKK2Fsd2F5cyBmYWhyIDItMTIzNQorYWx3YXlzIGZhaHJ0c3N0IDItMTIzNS0yMzQ1LTIzNC0yMzQ1NiBzaG91bGRuJ3QgdXNlIHRoZSBzcy1jb250cmFjdGlvbgorYWx3YXlzIGZhaHJ0c3N0ZWxsIDItMTIzNS0yMzQ1LTIzNC0yLTEzNDU2CithbHdheXMgZsOkaHIgNS0xMjM1CithbHdheXMgZmFlaHIgNS0xMjM1CithbHdheXMgZmFsbCAxMjQtMTIzNDUKK2Fsd2F5cyBmw6RsbCA1LTEyNC0xMjM0NQorYWx3YXlzIGZhZWxsIDUtMTI0LTEyMzQ1CithbHdheXMgZmVydGlnIDEyNC00NQorYWx3YXlzIGZlc3QgMTI0LTE1LTIzNDU2IHNob3VsZCB1c2UgdGhlIHN0LWNvbnRyYWN0aW9uCithbHdheXMgZmlsbSA9CithbHdheXMgZm9sZ2VuIDEyNC0xMzUtMTIzLTEyNDUtMTQgc2hvdWxkbid0IHVzZSB0aGUgZ2UtY29udHJhY3Rpb24KK2Fsd2F5cyBmcmFnIDEyNC0xMjM1Citjb250cmFjdGlvbiBmcgorYWx3YXlzIGZyYWdpbCA9CithbHdheXMgZnJhZ21lbnQgMTI0LTEyMzUtMS0xMjQ1LTEzNC0xNC0yMzQ1CithbHdheXMgZnJldW5kIDEyNC0xNDUKK2NvbnRyYWN0aW9uIGZkCithbHdheXMgZsO8aHIgMTI0LTEyNQorY29udHJhY3Rpb24gZmgKK2Fsd2F5cyBmw7xyY2h0IDEyNC0xMjU2LTEyMzUtMTQ1Ni0yMzQ1IHNob3VsZG4ndCB1c2UgdGhlIGbDvHItY29udHJhY3Rpb24KKworYWx3YXlzIGdhbnogMTI0NS0xMzU2Citjb250cmFjdGlvbiBnegorYWx3YXlzIGfDpG56IDUtMTI0NS0xMzU2CithbHdheXMgZ2FlbnogNS0xMjQ1LTEzNTYKK2Fsd2F5cyBnYXJuaXNvbiAxMjQ1LTM1Ni0xMzQ1LTI0LTIzNC0xMzUtMTM0NSBzaG91bGRuJ3QgdXNlIHRoZSBuaXMtY29udHJhY3Rpb24KK3dvcmQgZ2VnZW5kIDEyMzQ2LTEyNDUtMTQtMTQ1IHNob3VsZG4ndCB1c2UgdGhlIGdlZ2VuLWNvbnRyYWN0aW9uCithbHdheXMgZ2VnZW7DvGJlciAxMjQ1LTEyNTYKK2NvbnRyYWN0aW9uIGfDvAorYWx3YXlzIGdlZ2Vud2FydCAxMjQ1LTI0NTYKK2NvbnRyYWN0aW9uIGd3CithbHdheXMgZ2VnZW53w6RydCA1LTEyNDUtMjQ1NgorYWx3YXlzIGdlZ2Vud2FlcnQgNS0xMjQ1LTI0NTYKK2Fsd2F5cyBnZWxiIDEyNDUtMTM0NTYtMTIgc2hvdWxkIHVzZSB0aGUgZWwtY29udHJhY3Rpb24KK2Fsd2F5cyBnZWxkIDEyNDUtMTM0NTYtMTQ1IHNob3VsZCB1c2UgdGhlIGVsLWNvbnRyYWN0aW9uCithbHdheXMgZ2VsZWdlbiAxMjQ1LTEyNDUKK2NvbnRyYWN0aW9uIGdnCitiZWd3b3JkIGdlbHQgMTI0NS0xMzQ1Ni0yMzQ1IGdlbHRlbiBzaG91bGRuJ3QgdXNlIHRoZSBnZS1jb250cmFjdGlvbgorcHJmd29yZCBnZW5lIDEyNDUtMTQtMTUKK3ByZndvcmQgZ2VuZW0gMTI0NS0xNC0xMjM1NgorcHJmd29yZCBnZW5lbiAxMjQ1LTE0LTE0CitwcmZ3b3JkIGdlbmVyIDEyNDUtMTQtMTI0NTYKK3ByZndvcmQgZ2VuZXMgMTI0NS0xNC0xMjM0NTYKK2Fsd2F5cyBnZW9ncmEgPSBHZW9ncmFwaGllIHNob3VsZG4ndCB1c2UgdGhlIGdlLWNvbnRyYWN0aW9uCitwcmZ3b3JkIGdlcm4gMTI0NS0xMjQ1Ni0xMzQ1CittaWRlbmR3b3JkIGdlcmxpY2ggMTI0NS0xMjQ1Ni00NTYgYsO8cmdlcmxpY2ggc2hvdWxkbid0IHVzZSB0aGUgZ2UtY29udHJhY3Rpb24KK2Fsd2F5cyBnZXJuIDEyNDUtMTI0NTYtMTM0NSB3ZSBzaG91bGRuJ3QgdXNlIHRoZSBnZS1jb250cmFjdGlvbiBoZXJlCithbHdheXMgZ2VzY2jDpGZ0IDEyNDUtMTI0CithbHdheXMgZ2VzY2hhZWZ0IDEyNDUtMTI0Citjb250cmFjdGlvbiBnZgorYWx3YXlzIGdlc2VsbHNjaGFmdCAxMjQ1LTE1NgorYWx3YXlzIGdld29yZGVuIDEyMzQ2LTI0NTYKK2Fsd2F5cyBnaWJ0IDEyNDUtMTIKK2NvbnRyYWN0aW9uIGdiCithbHdheXMgZ2xlaWNoIDEyNDUtMTQ1NgorYWx3YXlzIGdsw7xjayAxMjQ1LTQ2CithbHdheXMgZ3Jvw58gMTI0NS0yMzQ2Citjb250cmFjdGlvbiBnw58KK2Fsd2F5cyBncsO2w58gNS0xMjQ1LTIzNDYKK2Fsd2F5cyBncnVuZCAxMjQ1LTE0NQorY29udHJhY3Rpb24gZ2QKK2Fsd2F5cyBncsO8bmQgNS0xMjQ1LTE0NQorYWx3YXlzIGdyw7xuZG9ubmVycyAxMjQ1LTEyMzUtMTI1Ni0xMzQ1LTE0NS0xMzUtMTM0NS0xMzQ1LTEyNDU2LTIzNCBncsO8bmRvbm5lcnN0YWcgc2hvdWxkbid0IHVzZSB0aGUgZ3LDvG5kLWNvbnRyYWN0aW9uCithbHdheXMgaGFiIDItMTI1CithbHdheXMgaGFmdCAxMjUtMTI0Citjb250cmFjdGlvbiBoZgorYWx3YXlzIGjDpGZ0IDUtMTI1LTEyNAorYWx3YXlzIGhhZWZ0IDUtMTI1LTEyNAord29yZCBoYWluID0KK2Fsd2F5cyBoYW1idXJnZXIgMTI1LTEtMTM0LTEyLTEzNi0xMjM1LTEyNDUtMTI0NTYgc2hvdWxkbid0IHVzZSB0aGUgZ2UtY29udHJhY3Rpb24KK2Fsd2F5cyBoYW5kIDEyNS0xNDUKK2Fsd2F5cyBow6RuZCA1LTEyNS0xNDUKK2Fsd2F5cyBoYWVuZCA1LTEyNS0xNDUKK2Fsd2F5cyBoYWx0ZW4gMTI1LTI1LTIzNDUtMTQgc2hvdWxkbid0IHVzZSB0aGUgdGUtY29udHJhY3Rpb24KK2Fsd2F5cyBoYXN0IDEyNS0yMzQ1NgorYWx3YXlzIGhhdCAxMjUtMjM0NQorY29udHJhY3Rpb24gaHQKK3dvcmQgaGF0dGVzdCAxMjUtMTUtMjM0NTYgc2hvdWxkbid0IHVzZSB0aGUgZXMtY29udHJhY3Rpb24KK3dvcmQgaGF0dHJpY2sgMTI1LTEtMjM0NS0yMzQ1LTI0LTQ2IHNob3VsZG4ndCB1c2UgdGhlIGhhdHQtY29udHJhY3Rpb24KK2Fsd2F5cyBoYXVwdCAxMjUtMTIzNAorY29udHJhY3Rpb24gaHAKK2Fsd2F5cyBow6R1cHQgNS0xMjUtMTIzNAorYWx3YXlzIGhlcnIgMTIzNS0xMjM1Citjb250cmFjdGlvbiBycgorYWx3YXlzIGhpZXIgMTI1LTEyMzUKK2NvbnRyYWN0aW9uIGhyCithbHdheXMgaGllcmFyIDEyNS0yNC0xMjQ1Ni0zNTYgaGllcmFyY2hpZQorYWx3YXlzIGhvZmYgMTI0LTEyNAorY29udHJhY3Rpb24gZmYKKword29yZCBpY2ggMzQ1Ngorc3Vmd29yZCBpaG4gMjQtMTI1CithbHdheXMgaW50ZXIgMzUtMjM0NS0xMjQ1NgorYWx3YXlzIGludGVyZXNzIDItMzUKK2Fsd2F5cyBpcmdlbmQgMjQtMTI0NSBpcmdlbmRldHdhcworY29udHJhY3Rpb24gaWcKKworYWx3YXlzIGphaHIgMjQ1LTEyMzUKK2NvbnRyYWN0aW9uIGpyCithbHdheXMgasOkaHIgNS0yNDUtMTIzNQorYWx3YXlzIGphZWhyIDUtMjQ1LTEyMzUKK2Fsd2F5cyBqYWhyaHVuZGVydCAyNDUtMTI1Citjb250cmFjdGlvbiBqaAorYWx3YXlzIGphaHJ0YXVzZW5kIDI0NS0yMzQ1Citjb250cmFjdGlvbiBqdAorYWx3YXlzIGphaHJ6ZWhudCAyNDUtMTM1NgorY29udHJhY3Rpb24ganoKK3N1ZndvcmQgamVkIDI0NS0xNDUKK3dvcmQgamVkb2NoIDI0NS0xNDU2CitzdWZ3b3JkIGpldHppZyAyNDUtNDUKK2Fsd2F5cyBqb2hhbm5pc2JlcmcgMjQ1LTEzNS0xMjUtMjM1LTEzNDUtMjQtMjM0LTEyLTEyNDU2LTEyNDUgc2hvdWxkbid0IHVzZSB0aGUgbmlzLWNvbnRyYWN0aW9uCithbHdheXMganVuZyAyNDUtMjU2LTEyNDUgc2hvdWxkbid0IHVzZSB0aGUgdW5nLWNvbnRyYWN0aW9uCisKK3dvcmQga2FubnN0IDEzLTIzNDU2CithbHdheXMga2FwaXRhbCAxMy0xMjM0Citjb250cmFjdGlvbiBrcAorYWx3YXlzIGthcGl0w6RsIDUtMTMtMTIzNAorYWx3YXlzIGthcGl0YWVsIDUtMTMtMTIzNAorYWx3YXlzIGtsZW1tIDEzLTEyMy0xNS0xMzQ2IGVpbmdla2xlbW10IHNob3VsZG4ndCB1c2UgdGhlIGVtLWNvbnRyYWN0aW9uCithbHdheXMga25vY2ggMTMtMTM0NS0xMzUtMTQ1NiBLbm9jaGVuIHNob3VsZG4ndCB1c2UgdGhlIG5vY2gtY29udHJhY3Rpb24KK2Fsd2F5cyBrb21tIDEzLTEzNDYKK2NvbnRyYWN0aW9uIGt4CithbHdheXMgYWtrb21tb2QgMS0xMy0xMy0xMzUtMTM0Ni0xMzUtMTQ1IHNob3VsZG4ndCB1c2UgdGhlIGtvbW0tY29udHJhY3Rpb24KK2Fsd2F5cyBrw7ZtbSA1LTEzLTEzNDYKK2Fsd2F5cyBrb25udCAxMy0yMzQ1Citjb250cmFjdGlvbiBrdAorYWx3YXlzIGvDtm5uIDItMTMKKworYWx3YXlzIGtyYWZ0IDEzLTEyNAorY29udHJhY3Rpb24ga2YKK2Fsd2F5cyBrcsOkZnQgNS0xMy0xMjQKK2Fsd2F5cyBrcmFlZnQgNS0xMy0xMjQKKworYWx3YXlzIGt1bHR1cmVsbCAxMy0xMzYtMTIzLTIzNDUtMTM2LTEyMzUtMTUtMTIzNDUgc2hvdWxkIHVzZSB0aGUgbGwtY29udHJhY3Rpb24KKworYWx3YXlzIGt1cnogMTMtMTM1NgorY29udHJhY3Rpb24ga3oKK2Fsd2F5cyBrw7xyeiA1LTEzLTEzNTYKKworYWx3YXlzIGxhbmcgMTIzLTEyNDUKK2NvbnRyYWN0aW9uIGxnCitiZWZvcmUgZyBzdWZ3b3JkIHNjaGxhbiAxNTYtMTIzLTIzNSBzaG91bGRuJ3QgdXNlIHRoZSBsYW5nLWNvbnRyYWN0aW9uCitzdWZ3b3JkIHNjaGxhbmdlbiAxNTYtMTIzLTIzNS0xMjQ1LTE0CitiZWZvcmUgZyBhbHdheXMgd2FydGVzY2hsYW4gMjQ1Ni0zNTYtMjM2LTE1Ni0xMjMtMjM1CithbHdheXMgbMOkbmcgNS0xMjMtMTI0NQorYWx3YXlzIGxhZW5nIDUtMTIzLTEyNDUKK2Fsd2F5cyBqYWhyZWxhbmcgMjQ1LTEyMzUtMTUtMTIzLTEyNDUgc2hvdWxkbid0IHVzZSB0aGUgZWwtY29udHJhY3Rpb24KK2Fsd2F5cyBqYWhyaHVuZGVydGVsYW5nIDI0NS0xMjUtMTUtMTIzLTEyNDUgc2hvdWxkbid0IHVzZSB0aGUgZWwtY29udHJhY3Rpb24KK2Fsd2F5cyBqYWhyemVobnRlbGFuZyAyNDUtMTM1Ni0xNS0xMjMtMTI0NSBzaG91bGRuJ3QgdXNlIHRoZSBlbC1jb250cmFjdGlvbgorYWx3YXlzIGphaHJ0YXVzZW5kZWxhbmcgMjQ1LTIzNDUtMTUtMTIzLTEyNDUgc2hvdWxkbid0IHVzZSB0aGUgZWwtY29udHJhY3Rpb24KK2JlZm9yZSBzIGFsd2F5cyBqYWhyZXMgMjQ1LTEyMzUtMTIzNDU2CitiZWZvcmUgZyBhbHdheXMgamFocmVzdGEgMjQ1LTEyMzUtMTIzNDU2LTIzNDUtMQorYWx3YXlzIGxhbmdvYmFyZCAxMjMtMjM1LTEyNDUtMTM1LTEyLTM1Ni0xNDUgc2hvdWxkbid0IHVzZSB0aGUgbGFuZy1jb250cmFjdGlvbgorYWx3YXlzIGxhc3MgMi0xMjMKK2Fsd2F5cyBsw6RzcyA1LTEyMworYWx3YXlzIGxhZXNzIDUtMTIzCitzdWZ3b3JkIGJsYXNzIDEyLTEyMy0xLTIzNDYKK3N1ZndvcmQgYmxhc3N0IDEyLTEyMy0xLTIzNC0yMzQ1NgorYWx3YXlzIGNsYXNzID0gc2hvdWxkbid0IHVzZSB0aGUgbGFzcy1jb250cmFjdGlvbgorYmVmb3JlIHMgYWx3YXlzIGdsYXMgPQorc3Vmd29yZCBrbGFzcyAxMy0xMjMtMS0yMzQ2IHNob3VsZG4ndCB1c2UgdGhlIGxhc3MtY29udHJhY3Rpb24KK2Fsd2F5cyBsYXNzaXN0IDEyMy0xLTIzNDYtMjQtMjM0NTYKK2Fsd2F5cyBsYWljaCAxMjMtMS0yNC0xNDU2IHNob3VsZG4ndCB1c2UgdGhlIGljaC1jb250cmFjdGlvbgorYWx3YXlzIGxhc2FnbmUgPSBzaG91bGRuJ3QgdXNlIHRoZSBzYWctY29udHJhY3Rpb24KK2Fsd2F5cyBsYXNzbyAxMjMtMS0yMzQ2LTEzNSBzaG91bGRuJ3QgdXNlIHRoZSBsYXNzLWNvbnRyYWN0aW9uCithbHdheXMgbMOkbmQgPQorYWx3YXlzIGxhZW5kID0KK2Fsd2F5cyBsZWIgMTIzLTEyCitjb250cmFjdGlvbiBsYgorYWx3YXlzIGtsZWJlYmFuZCAxMy0xMjMtMTUtMjMtMTItMjM1LTE0NSBzaG91bGRuJ3QgdXNlIHRoZSBsZWItY29udHJhY3Rpb24KK2Fsd2F5cyBrbGViZWLDpG5kZXIgMTMtMTIzLTE1LTIzLTEyLTM0NS0xMzQ1LTE0NS0xMjQ1NiBzaG91bGRuJ3QgdXNlIHRoZSBsZWItIG5vciDDpG5kZXItY29udHJhY3Rpb24KK2Fsd2F5cyBsZWljaHQgMTIzLTE0NTYKK2Fsd2F5cyBsZXR6dCAxMjMtMjM0NQorY29udHJhY3Rpb24gbHQKK2Fsd2F5cyBsaWViIDEyMy0zNDYtMTIKKworYWx3YXlzIG1hbm4gMTM0LTEzNDUKK2NvbnRyYWN0aW9uIG1uCithbHdheXMgbcOkbm4gNS0xMzQtMTM0NQorYWx3YXlzIG1hZW5uIDUtMTM0LTEzNDUKK3dvcmQgbWFubmEgPSBzaG91bGRuJ3QgdXNlIHRoZSBtYW5uLWNvbnRyYWN0aW9uCithbHdheXMgbWFubmVxdWluIDEzNC0yMzUtMTM0NS0xNS02LTEyMzQ1LTM1IHNob3VsZG4ndCB1c2UgdGhlIG1hbm4tY29udHJhY3Rpb24KK2Fsd2F5cyBtYXNjaGluIDEzNC0xNTYKK2Fsd2F5cyBtYXRlcmlhbCAxMzQtMTIzCitjb250cmFjdGlvbiBtbAorYWx3YXlzIG1hdGVyaWVsbCAxMzQtMTIzNDUKK3dvcmQgbWlyIDEzNC0xMjM1CithbHdheXMgbWl0dGVsIDEzNC0yMzQ1Citjb250cmFjdGlvbiBtdAorYWx3YXlzIG1vbGRhd2llbiAxMzQtMTM1LTEyMy0xNDUtMS0yNDU2LTI0LTE0IHNob3VsZG4ndCB1c2UgdGhlIHdpZS1jb250cmFjdGlvbgorc3Vmd29yZCBtb29yID0gc2hvdWxkbid0IHVzZSB0aGUgb3ItY29udHJhY3Rpb24KK2Fsd2F5cyBtw7ZjaHRlIDE0NTYtMTUKK3dvcmQgbcO2Y2h0ZW4gMTQ1Ni0xNAorYWx3YXlzIG3DtmcgMi0yNDYKK2Fsd2F5cyBtw7ZnbGljaCAxMzQtNDU2CithbHdheXMgbXVzaWsgMTM0LTEzCitjb250cmFjdGlvbiBtaworYWx3YXlzIG11c3MgMTM0LTIzNDYKK2Fsd2F5cyBtw7xzcyAyLTEzNAorCit3b3JkIG5hY2hkZW0gMTM0NS0xNDUKK2Fsd2F5cyBuYWhtIDEzNDUtMTM0IEFubmFobWUKK2NvbnRyYWN0aW9uIG5tCithbHdheXMgbmF0dXIgMTM0NS0yMzQ1Citjb250cmFjdGlvbiBudAorYWx3YXlzIG5hdMO8cmxpY2ggMTM0NS00NTYKK2Fsd2F5cyBuw6RjaHN0IDEzNDUtMjM0NTYKK2Fsd2F5cyBuYWVjaHN0IDEzNDUtMjM0NTYKK2Fsd2F5cyBuZWhtIDEzNDUtMTI1Citjb250cmFjdGlvbiBuaAorZW5kd29yZCBuaXNjaCAxMzQ1LTI0LTE1NiBzaG91bGRuJ3QgdXNlIHRoZSBuaXMtY29udHJhY3Rpb24KK2VuZHdvcmQgbmlzY2hlIDEzNDUtMjQtMTU2LTE1IHNob3VsZG4ndCB1c2UgdGhlIG5pcy1jb250cmFjdGlvbgorZW5kd29yZCBuaXNjaGVuIDEzNDUtMjQtMTU2LTE0IHNob3VsZG4ndCB1c2UgdGhlIG5pcy1jb250cmFjdGlvbgorZW5kd29yZCBuaXNjaGVyIDEzNDUtMjQtMTU2LTEyNDU2IHNob3VsZG4ndCB1c2UgdGhlIG5pcy1jb250cmFjdGlvbgorZW5kd29yZCBuaXNjaGVzIDEzNDUtMjQtMTU2LTEyMzQ1NiBzaG91bGRuJ3QgdXNlIHRoZSBuaXMtY29udHJhY3Rpb24KK2Fsd2F5cyBuaWNodGlnIDEzNDUtNDUKK2Fsd2F5cyBuaWNodHMgMTM0NS0yMzQKK2NvbnRyYWN0aW9uIG5zCithbHdheXMgbmljaHRzZWhlbmQgMi0xMzQ1LTIzNC0yMzU2LTE0LTE0NSBzaG91bGRuJ3QgdXNlIHRoZSBuaWNodHMtY29udHJhY3Rpb24KK2Fsd2F5cyBuaWNodHNjaHdpbW0gMi0xMzQ1LTE1Ni0yNDU2LTI0LTEzNDYgc2hvdWxkbid0IHVzZSB0aGUgbmljaHRzLWNvbnRyYWN0aW9uCithbHdheXMgbm9jaCAxMzQ1LTE0NTYKK2Fsd2F5cyBub21tZW4gMTM0NS0xMzQ2Citjb250cmFjdGlvbiBueAorYWx3YXlzIGdlbm9tbWVuIDEyMzQ2LTEzNDUtMTM0NgorbWlkZW5kd29yZCBhdWdlbm9tbWVuIDE2LTEyMzQ2LTEzNDUtMTM0NgorYWx3YXlzIGVpZ2Vub21tZW4gMTQ2LTEyMzQ2LTEzNDUtMTM0NgorYWx3YXlzIG5vdHdlbmRpZyAxMzQ1LTI0NTYKK2NvbnRyYWN0aW9uIG53CitiZWdtaWR3b3JkIG5vcm1hbCAxMzQ1LTI2LTEzNC0yNSBzaG91bGRuJ3QgdXNlIHRoZSBtYWwtY29udHJhY3Rpb24KK3ByZndvcmQgbm9ybWFsIDEzNDUtMjYtMTM0LTEtMTIzIHNob3VsZG4ndCB1c2UgdGhlIG1hbC1jb250cmFjdGlvbgorYWx3YXlzIGFuaW0gMjM1LTI0LTEzNCBhbmltYWwgc2hvdWxkbid0IHVzZSB0aGUgbWFsLWNvbnRyYWN0aW9uCithbHdheXMgbnVyIDEzNDUtMTIzNQorY29udHJhY3Rpb24gbnIKK2Fsd2F5cyBudXR6IDEzNDUtMTM1NgorY29udHJhY3Rpb24gbnoKK2Fsd2F5cyBuw7x0eiA1LTEzNDUtMTM1NgorCitzdWZ3b3JkIG9obmUgMTM1LTE1Citjb250cmFjdGlvbiBvZQorCithbHdheXMgw7ZmZmVudGxpY2ggMjQ2LTQ1NgorCithbHdheXMgcGFhciA9IHNob3VsZG4ndCB1c2UgdGhlIGFyLWNvbnRyYWN0aW9uCithbHdheXMgcGFyYWdyYXBoIDEyMzQtMTI0NQorY29udHJhY3Rpb24gcGcKK2Fsd2F5cyBwZXJzb24gMTIzNC0xMzQ1Citjb250cmFjdGlvbiBwbgorYWx3YXlzIHBoaWxvc29waCAxMjM0LTEyNQorY29udHJhY3Rpb24gcGgKK2Fsd2F5cyBwbGF0eiAxMjM0LTEzNTYKK2Fsd2F5cyBwbMOkdHogNS0xMjM0LTEzNTYKK2Fsd2F5cyBwbGFldHogNS0xMjM0LTEzNTYKK2Fsd2F5cyBwbMO2dHpsaWNoIDEyMzQtNDU2CithbHdheXMgcGxvZXR6bGljaCAxMjM0LTQ1NgorYWx3YXlzIHBvbGl0aWsgMTIzNC0xMworY29udHJhY3Rpb24gcGsKK2Fsd2F5cyBwb2xpdGlzY2ggMTIzNC0xNTYKK2Fsd2F5cyBwdW5rdCAxMjM0LTIzNDUKK2NvbnRyYWN0aW9uIHB0CisKK2Fsd2F5cyByZWNodCAxMjM1LTIzNDUKK2NvbnRyYWN0aW9uIHJ0CitiZWZvcmUgcyBhbHdheXMgcmVjaHRzIDEyMzUtMjM0NS0yMzQKK2Fsd2F5cyByZWdpZXIgMTIzNS0xMjQ1Citjb250cmFjdGlvbiByZworYmVmb3JlIHMgYWx3YXlzIHJlZ2llcnVuZ3MgMTIzNS0xMjQ1LTEzNi0yMzQKK2Fsd2F5cyByZWhhYmlsaXQgMTIzNS0xMjUKK2NvbnRyYWN0aW9uIHJoCithbHdheXMgcmVwdWJsaWsgMTIzNS0xMworY29udHJhY3Rpb24gcmsKK3N1ZndvcmQgcmVzdCAxMjM1LTE1LTIzNDU2IHNob3VsZCB1c2UgdGhlIHN0LWNvbnRyYWN0aW9uCithbHdheXMgcmljaHQgMi0zNDU2CithbHdheXMgcsO8Y2sgMTIzNS00NgorYWx3YXlzIHJ1ZWNrIDEyMzUtNDYKKworYWx3YXlzIHNhZyAyMzQtMTI0NQorY29udHJhY3Rpb24gc2cKK2Fsd2F5cyBzYWFsID0gc2hvdWxkbid0IHVzZSB0aGUgYWwtY29udHJhY3Rpb24KK3dvcmQgc2FtZW4gMjM0LTEtMTM0LTE0IHNob3VsZG4ndCB1c2UgdGhlIHNhbS1jb250cmFjdGlvbgorYWx3YXlzIHNhdHogMjM0LTEzNTYKK2NvbnRyYWN0aW9uIHN6CithbHdheXMgc8OkdHogNS0yMzQtMTM1NgorYWx3YXlzIHNhZXR6IDUtMjM0LTEzNTYKK2Fsd2F5cyBzY2hudXIgMTU2LTEzNDUtMTM2LTEyMzUgc2hvdWxkbid0IHVzZSB0aGUgbnVyLWNvbnRyYWN0aW9uCithbHdheXMgc2Nob29sIDIzNC0xNDU2LTEzNS0xMzUtMTIzIGZvcmVpZ24gd29yZCwgc2NoLWNvbnRyYWN0aW9uIG5vdCBhbGxvd2VkCithbHdheXMgc2NobGFnIDE1Ni0xMjQ1CithbHdheXMgc2NobMOkZyA1LTE1Ni0xMjQ1CithbHdheXMgc2NobGFlZyA1LTE1Ni0xMjQ1CithbHdheXMgc2NobGllw58gMTU2LTIzNDYKK2Fsd2F5cyBzY2hyZWliIDE1Ni0xMgorYWx3YXlzIHNjaHJpZnQgMTU2LTIzNDUKK2Fsd2F5cyBzY2hyaWViIDItMTU2CithbHdheXMgc2Nod2llcmlnIDE1Ni00NQorYWx3YXlzIHNjaHdpbGx0IDE1Ni0yNDU2LTI0LTEyMzQ1LTIzNDUgc2hvdWxkbid0IHVzZSB0aGUgd2lsbC1jb250cmFjdGlvbgorYWx3YXlzIHNjaHdvbGwgMTU2LTI0NTYtMTM1LTEyMzQ1IGdlc2Nod29sbGVuIHNob3VsZG4ndCB1c2UgdGhlIHdvbGwtY29udHJhY3Rpb24KK3dvcmQgc2VociAyMzQtMTIzNQorc3Vmd29yZCB2ZXJzZWhyIDM2LTIzNC0xMjM1CitzdWZ3b3JkIHVudmVyc2VociAyNTYtMTIzNi0xMjQ1Ni0yMzQtMTIzNQorYWx3YXlzIHNlbGJzdCAyMzQtMjM0NTYKK2Fsd2F5cyBzZWxic3TDpG5kaWcgMjM0LTEzNDU2LTEyLTUtMjM0NTYtNDUgc2hvdWxkbid0IHVzZSB0aGUgc2VsYnN0LWNvbnRyYWN0aW9uCithbHdheXMgc2VsYnN0YWVuZGlnIDIzNC0xMzQ1Ni0xMi01LTIzNDU2LTQ1IHNob3VsZG4ndCB1c2UgdGhlIHNlbGJzdC1jb250cmFjdGlvbgorYWx3YXlzIHNldHogMi0xNQorc3Vmd29yZCBzZXNhbSAyMzQtMTIzNDU2LTEtMTM0IHNob3VsZG4ndCB1c2UgdGhlIHNhbS1jb250cmFjdGlvbgord29yZCBzaW5kIDIzNC0xNDUKK2NvbnRyYWN0aW9uIHNkCithbHdheXMgZ2VzaW5kZSAxMjM0Ni0yMzQtMzUtMTQ1LTE1CithbHdheXMgZ2VzaW5kZWwgMTIzNDYtMjM0LTM1LTE0NS0xMzQ1NgorYWx3YXlzIGdlc2luZGVzIDEyMzQ2LTIzNC0zNS0xNDUtMTIzNDU2CithbHdheXMgZ2VzaW5kZXN0IDEyMzQ2LTIzNC0zNS0xNDUtMTUtMjM0NTYKKworYWx3YXlzIHNpdHogMi0yNAorYWx3YXlzIHNpdHpiZWluIDItMjQtMTItMTI0NiBzaG91bGRuJ3QgdXNlIHRoZSBiZWktY29udHJhY3Rpb24KK2Fsd2F5cyBzb2xjaCAyMzQtMTQ1NgorYWx3YXlzIHNvbGwgMi0yMzQKK2Fsd2F5cyBzb25kZXJuIDIzNC0xMzQ1Citjb250cmFjdGlvbiBzbgorYWx3YXlzIHNvemlhbCAyMzQtMTIzCitjb250cmFjdGlvbiBzbAorYWx3YXlzIHNwaWVsIDItMzQ2CithbHdheXMgc3ByYWNoIDIzNC0xMjM0Citjb250cmFjdGlvbiBzcAorYWx3YXlzIHNwcsOkY2ggNS0yMzQtMTIzNAorYWx3YXlzIHNwcmFlY2ggNS0yMzQtMTIzNAorYWx3YXlzIHNwcmVjaCAyLTIzNDYKK2Fsd2F5cyBzdGFhdCAyMzQ1Ni0yMzQ1CithbHdheXMgc3RhbmQgMi0yMzQ1NgorYWx3YXlzIHN0YW5kYXJkIDIzNDU2LTIzNS0xNDUtMzU2LTE0NSBzaG91bGRuJ3QgdXNlIHRoZSBzdGFuZC1jb250cmFjdGlvbgorYWx3YXlzIHN0w6RuZCA1LTIzNDU2CithbHdheXMgc3RhZW5kIDUtMjM0NTYKK2Fsd2F5cyBzdGVsbCAyLTEzNDU2CithbHdheXMgc3N0ZWxsIDIzNC0yLTEzNDU2IHNob3VsZG4ndCB1c2UgdGhlIHNzLWNvbnRyYWN0aW9uCit3b3JkIHN0ZXRzIDIzNDU2LTIzNAorYWx3YXlzIHN0cmFoaWVyIDIzNDU2LTEyMzUtMS0xMjUtMzQ2LTEyMzUgYWJzdHJhaGllcmVuCisKK3dvcmQgdGFpZ2EgPSBzaG91bGRuJ3QgdXNlIHRoZSBpZy1jb250cmFjdGlvbgorYWx3YXlzIHTDpHRlciAyMzQ1LTM0NS0yMzQ1LTEyNDU2IHNob3VsZG4ndCB1c2UgdGhlIGVyLWNvbnRyYWN0aW9uCithbHdheXMgdGVjaG5payAyMzQ1LTEzCitjb250cmFjdGlvbiB0aworYWx3YXlzIHN0ZWNobmlrIDIzNC0yMzQ1LTEzCithbHdheXMgdGVjaG5pc2NoIDIzNDUtMTU2CithbHdheXMgc3RlY2huaXNjaCAyMzQtMjM0NS0xNTYKK3N1ZndvcmQgdGVzdCAyMzQ1LTE1LTIzNDU2IHNob3VsZG4ndCB1c2UgdGhlIGVzLWNvbnRyYWN0aW9uCitzdWZ3b3JkIHTDtnJpY2h0IDIzNDUtMjQ2LTEyMzUtMzQ1Ni0yMzQ1IHNob3VsZG4ndCB1c2UgdGhlIHJpY2h0LWNvbnRyYWN0aW9uCitzdWZ3b3JkIHRvZXJpY2h0IDIzNDUtMjQ2LTEyMzUtMzQ1Ni0yMzQ1IHNob3VsZG4ndCB1c2UgdGhlIHJpY2h0LWNvbnRyYWN0aW9uCithbHdheXMgdHJhZyAyMzQ1LTEyNDUKK2NvbnRyYWN0aW9uIHRnCithbHdheXMgdHLDpGcgNS0yMzQ1LTEyNDUKK2Fsd2F5cyB0cmFpbiA9IHRyYWluaW5nIHNob3VsZG4ndCB1c2UgdGhlIGZpcnN0IHBvc3NpYmxlIGluLWNvbnRyYWN0aW9uCithbHdheXMgdHJlZmYgMjM0NS0xMjQKK2NvbnRyYWN0aW9uIHRmCithbHdheXMgdHJpbml0cm8gPSBzaG91bGRuJ3QgdXNlIHRoZSBpbi1jb250cmFjdGlvbgorYWx3YXlzIHRyb3R6IDIzNDUtMTM1NgorY29udHJhY3Rpb24gdHoKK2Fsd2F5cyB0csO8YiA9IHRyw7xiZXIgc2hvdWxkbid0IHVzZSB0aGUgw7xiZXItY29udHJhY3Rpb24KKworYWx3YXlzIHVuYmVpcnIgMjU2LTIzLTI0LTEyMzUtMTIzNSB1bmJlaXJydCBzaG91bGRuJ3QgdXNlIHRoZSBiZWktY29udHJhY3Rpb24KK3N1ZndvcmQgdW5kZXIgMjU2LTE0NS0xMjQ1NiBzaG91bGRuJ3QgdXNlIHRoZSB1bmQtY29udHJhY3Rpb24KKword29yZCDDvGJlcmhhdXB0IDEyNTYtMTI1Cit3b3JkIHVlYmVyaGF1cHQgMTI1Ni0xMjUKK2Fsd2F5cyDDvGJyaWcgMTI1Ni00NQorCithbHdheXMgdmVyaMOkbHRuaXMgMTIzNi0xMjUKK2NvbnRyYWN0aW9uIHZoCithbHdheXMgdmVyaGFlbHRuaXMgMTIzNi0xMjUKK2Fsd2F5cyB2aWVsIDEyMzYtMTIzCitjb250cmFjdGlvbiB2bAord29yZCB2aWVsbGVpY2h0IDEyMzYtMjM0NQorYWx3YXlzIHZvbGsgMTIzNi0xMworY29udHJhY3Rpb24gdmsKK2Fsd2F5cyB2w7ZsayA1LTEyMzYtMTMKK3dvcmQgdm9tIDEyMzYtMTM0Citjb250cmFjdGlvbiB2bQorCithbHdheXMgd2FociAyNDU2LTEyNQorY29udHJhY3Rpb24gd2gKK2Fsd2F5cyB3w6RociA1LTI0NTYtMTI1CithbHdheXMgd8OkaHJlbmQgMzQ1LTE0NQorY29udHJhY3Rpb24gw6RkCithbHdheXMgd2FlaHJlbmQgMzQ1LTE0NQorc3Vmd29yZCB3YXJtIDI0NTYtMzU2LTEzNCBzaG91bGRuJ3QgdXNlIHRoZSB3YXItY29udHJhY3Rpb24KK2Fsd2F5cyB3ZWcgMjQ1Ni0xMjQ1Citjb250cmFjdGlvbiB3ZworYWx3YXlzIHdlaXMgMi0xNDYgQW53ZWlzdW5nCithbHdheXMgendlaXNjaGljaHQgMTM1Ni0yNDU2LTE0Ni0xNTYtMzQ1Ni0yMzQ1IHNob3VsZG4ndCB1c2UgdGhlIHdlaXMtY29udHJhY3Rpb24KK2Fsd2F5cyB3ZWl0IDI0NTYtMjM0NQorYmVmb3JlIGtvbnNvbmFudCBiZWd3b3JkIHp3ZWl0IDEzNTYtMjQ1Ni0xNDYtMjM0NSBzaG91bGRuJ3QgdXNlIHRoZSB3ZWl0LWNvbnRyYWN0aW9uCithbHdheXMgd2VuaWcgMjQ1Ni00NQorc3Vmd29yZCB3ZW5uIDI0NTYtMTM0NQorY29udHJhY3Rpb24gd24KK2Fsd2F5cyB3ZXJkIDItMjQ1NgorYWx3YXlzIHdlc2VudGxpY2ggMjQ1Ni00NTYKK2Fsd2F5cyB3aWVnZW5kIDI0NTYtMzQ2LTEyNDUtMTQtMTQ1IHNob3VsZG4ndCB1c2UgdGhlIHdpZS1jb250cmFjdGlvbgorYWx3YXlzIHdpZWRlciAzNDYtMTQ1CithbHdheXMgd2llbiAyNDU2LTM0Ni0xMzQ1IHNob3VsZG4ndCB1c2UgdGhlIHdpZS1jb250cmFjdGlvbgorYWx3YXlzIHdpbGwgMjQ1Ni0xMjM0NQorYWx3YXlzIHdpbGxpYW0gMjQ1Ni0yNC0xMjM0NS0yNC0xLTEzNAord29yZCB3aXIgMjQ1Ni0xMjM1Cit3b3JkIHdpcmQgMjQ1Ni0xNDUKK2Fsd2F5cyB3aXJrIDI0NTYtMTMKK2NvbnRyYWN0aW9uIHdrCit3b3JkIHdpcnN0IDI0NTYtMjM0NTYKK2Fsd2F5cyB3aXJ0c2NoYWZ0IDI0NTYtMTU2CithbHdheXMgd2lzcyAyNDU2LTIzNDYKK2NvbnRyYWN0aW9uIHfDnword29yZCBzd2lzcyAyMzQtMjQ1Ni0yNC0yMzQ2IHNob3VsZG4ndCB1c2UgdGhlIHdpc3MtY29udHJhY3Rpb24KK2Fsd2F5cyB3b2hsIDI0NTYtMTIzCitjb250cmFjdGlvbiB3bAorYWx3YXlzIHdvbGwgMi0xMzUKK3dvcmQgV29sbGUgMjQ1Ni0xMzUtMTIzNDUtMTUgc2hvdWxkbid0IHVzZSB0aGUgd29sbC1jb250cmFjdGlvbgorYWx3YXlzIHdvbGxmYWQgMjQ1Ni0xMzUtMTIzNDUtMTI0LTEtMTQ1IHNob3VsZG4ndCB1c2UgdGhlIHdvbGwtY29udHJhY3Rpb24KK2Fsd2F5cyBiYXVtd29sbCAxMi0xNi0xMzQtMjQ1Ni0xMzUtMTIzNDUgc2hvdWxkbid0IHVzZSB0aGUgd29sbC1jb250cmFjdGlvbgord29yZCB3b3JkZW4gMTM1LTE0CitzdWZ3b3JkIHd1cmQgMTM2CitzdWZ3b3JkIHfDvHJkIDEyNTYKKworYWx3YXlzIHlvdW5nIDYtMTM0NTYtMTM1LTEzNi0xMzQ1LTEyNDUgc2hvdWxkbid0IHVzZSB0aGUgdS1jb250cmFjdGlvbgorCithbHdheXMgemFobCAxMzU2LTEyMworY29udHJhY3Rpb24gemwKK2Fsd2F5cyB6w6RobCA1LTEzNTYtMTIzCithbHdheXMgemVpdCAxMzU2LTIzNDUKK2NvbnRyYWN0aW9uIHp0CitiZWZvcmUgc3QgbWlkZW5kd29yZCB6dWcgPQord29yZCB6dW0gMTM1Ni0xMzQKK3dvcmQgenVuw6RjaHN0IDEzNTYtMTM0NQord29yZCB6dW5hZWNoc3QgMTM1Ni0xMzQ1Cit3b3JkIHp1ciAxMzU2LTEyMzUKK3N1ZndvcmQgenVyc2NoYXUgMTM1Ni0xMjM1LTE1Ni0xNgorc3Vmd29yZCB6dXLDvGNrIDEzNTYtNDYKK3N1ZndvcmQgenVydWVjayAxMzU2LTQ2CithbHdheXMgenVzYW1tZW4gMTM1Ni0yMzQKK2Fsd2F5cyB6d2lzY2hlbiAxMzU2LTI0NTYKK2NvbnRyYWN0aW9uIHp3CisKKyMgZXhjZXB0aW9ucworYWx3YXlzIGFhY2hlbiAxLTEtMTQ1Ni0xNCBzaG91bGRuJ3QgdXNlIHRoZSBhY2gtY29udHJhY3Rpb24KK2Fsd2F5cyBhYmJhdWYgMS0xMi0xMi0xNi0xMjQgQWJiYXVmb3J0c2Nocml0dCwgQWJiYXVmcm9udAorc3Vmd29yZCBhYmVuZCAxLTEyLTE0LTE0NQorYWx3YXlzIGFiZW50ZXVlciAxLTEyLTE0LTIzNDUtMTI2LTEyNDU2CithbHdheXMgYWJlbnRldXJlciAxLTEyLTE0LTIzNDUtMTI2LTEyMzUtMTI0NTYKK2Fsd2F5cyBhYmVya2FubiAxLTEyLTEyNDU2LTEzLTIzNS0xMzQ1IHNob3VsZG4ndCB1c2UgdGhlIGFiZXItY29udHJhY3Rpb24KK2Fsd2F5cyBhYmVya2VubiAxLTEyLTEyNDU2LTEzLTE0LTEzNDUgc2hvdWxkbid0IHVzZSB0aGUgYWJlci1jb250cmFjdGlvbgorYmVnd29yZCBhYmVybnQgMS0xMi0xMjQ1Ni0xMzQ1LTIzNDUgc2hvdWxkbid0IHVzZSB0aGUgYWJlci1jb250cmFjdGlvbgorYWx3YXlzIGFiZ2FiZW4gMS0xMi0xMjQ1LTEtMTItMTQgc2hvdWxkbid0IHVzZSB0aGUgYmUtY29udHJhY3Rpb24KK2JlZ3dvcmQgYXVzZ2FiZW4gMzQtMTI0NS0xLTEyLTE0IHNob3VsZG4ndCB1c2UgdGhlIGJlLWNvbnRyYWN0aW9uCitzdWZ3b3JkIGFibGFnZXJhdW0gMS0xMi0xMjMtMS0xMjM0Ni0xMjM1LTE2LTEzNAorYWx3YXlzIGFibGFnZXLDpHVtIDEtMTItMTIzLTEtMTIzNDYtMTIzNS0zNC0xMzQKK2Fsd2F5cyBhYmxhZ2VyYWV1bSAxLTEyLTEyMy0xLTEyMzQ2LTEyMzUtMzQtMTM0CithbHdheXMgYWJsYXVmIDEtMTItMTIzLTE2LTEyNCBzaG91bGRuJ3QgdXNlIHRoZSBhdWYtY29udHJhY3Rpb24KK2Fsd2F5cyBhYmzDtnNlc3VtbSAxLTEyLTEyMy0yNDYtMjM0LTE1LTIzNC0xMzYtMTM0NiBzaG91bGRuJ3QgdXNlIHRoZSBlcy1jb250cmFjdGlvbgorYWx3YXlzIGFibG9lc2VzdW1tIDEtMTItMTIzLTI0Ni0yMzQtMTUtMjM0LTEzNi0xMzQ2IHNob3VsZG4ndCB1c2UgdGhlIGVzLWNvbnRyYWN0aW9uCithbHdheXMgYWJub3JtaXTDpHQgMS0xMi0xMzQ1LTI2LTEzNC01LTM0NSBzaG91bGRuJ3QgdXNlIHRoZSBtaXQtY29udHJhY3Rpb24KK2Fsd2F5cyBhYm5vcm1pdGFldCAxLTEyLTEzNDUtMjYtMTM0LTUtMzQ1IHNob3VsZG4ndCB1c2UgdGhlIG1pdC1jb250cmFjdGlvbgorYWx3YXlzIGFicnVuZCAxLTEyLTEyMzUtMjU2LTE0NSBzaG91bGRuJ3QgdXNlIHRoZSB1bmQtY29udHJhY3Rpb24KK2JlZ3dvcmQgYWJzY2hpZWRzIDEtMTItMTU2LTM0Ni0xNDUtMjM0IEFic2NoaWVkc3NjaG1lcnoKK2Fsd2F5cyBhY2h0ZWNrIDEtMTQ1Ni0yMzQ1LTE1LTQ2IHNob3VsZG4ndCB1c2UgdGhlIHRlLWNvbnRyYWN0aW9uCithbHdheXMgYXNvY2lhIDEtMjM0LTEzNS02LTE0LTI0LTEgYXNvY2lhY2nDs24gc2hvdWxkbid0IHVzZSB0aGUgc28tY29udHJhY3Rpb24KK2Fsd2F5cyBhZnJpa2FyZWZlciAxLTEyNC0xMjM1LTI0LTEzLTEtMTIzNS0xNS0xMjQtMTI0NTYgc2hvdWxkbid0IHVzZSB0aGUgYXItY29udHJhY3Rpb24KK3N1ZndvcmQgYWdlbnQgMS0xMjQ1LTE0LTIzNDUgc2hvdWxkbid0IHVzZSB0aGUgZ2UtY29udHJhY3Rpb24KK2Fsd2F5cyBha2FkZW0gMS0xMy0xLTE0NS0xMjM1NiBzaG91bGRuJ3QgdXNlIHRoZSBkZW0tY29udHJhY3Rpb24KK3N1ZndvcmQgYWt0ZW4gMS0xMy0yMzQ1LTE0IHNob3VsZG4ndCB1c2UgdGhlIHRlLWNvbnRyYWN0aW9uCithbHdheXMgYWt0ZXVyIDEtMTMtMjM0NS0xMjYtMTIzNSBzaG91bGRuJ3QgdXNlIHRoZSB0ZS1jb250cmFjdGlvbgorYWx3YXlzIGluZ2VuaWV1ciAzNS0xMjQ1LTE0LTI0LTEyNi0xMjM1CithbHdheXMgaW50ZXJpZXVyIDM1LTIzNDUtMTI0NTYtMjQtMTI2LTEyMzUKK2Fsd2F5cyBwb3J0ZXVyIDEyMzQtMjYtMjM0NS0xMjYtMTIzNQorYWx3YXlzIGFsYXJtIDI1LTM1Ni0xMzQgQWxhcm1tZWxkdW5nIHNob3VsZG4ndCB1c2UgdGhlIG1tLWNvbnRyYWN0aW9uCithbHdheXMgYWxiZXJuIDI1LTEyLTEyNDU2LTEzNDUgc2hvdWxkbid0IHVzZSB0aGUgYmUtY29udHJhY3Rpb24KK2Fsd2F5cyBhbGJlcnQgMjUtMTItMTI0NTYtMjM0NSBzaG91bGRuJ3QgdXNlIHRoZSBiZS1jb250cmFjdGlvbgorYWx3YXlzIGFsZXhhbmRlciAyNS0xNS02LTEzNDYtMjM1LTE0NS0xMjQ1NiBzaG91bGRuJ3QgdXNlIHRoZSBhbmRlci1jb250cmFjdGlvbgorYWx3YXlzIGFsZ2VyaWVyIDI1LTEyNDUtMTI0NTYtMjQtMTI0NTYgc2hvdWxkbid0IHVzZSB0aGUgaWUtY29udHJhY3Rpb24KK3N1ZndvcmQgYWxsZWUgMS0xMjM0NS0xNS0xNSBzaG91bGRuJ3QgdXNlIHRoZSBhbGxlLWNvbnRyYWN0aW9uCitwcmZ3b3JkIGFsbGVlbiAxLTEyMzQ1LTE1LTE0IHNob3VsZG4ndCB1c2UgdGhlIGFsbGUtY29udHJhY3Rpb24KK2Fsd2F5cyBiYXVtYWxsZWUgMTItMTYtMTM0LTEtMTIzNDUtMTUtMTUgc2hvdWxkbid0IHVzZSB0aGUgbWFsLWNvbnRyYWN0aW9uIGFuZCBhbGxlLWNvbnRyYWN0aW9uCithbHdheXMgYmF1bWFsbGVlbiAxMi0xNi0xMzQtMS0xMjM0NS0xNS0xNCBzaG91bGRuJ3QgdXNlIHRoZSBtYWwtY29udHJhY3Rpb24gYW5kIGFsbGUtY29udHJhY3Rpb24KK2JlZm9yZSBzdCBhbHdheXMgYWxsdGFncyAxLTEyMzQ1LTIzNDUtMS0xMjQ1LTIzNAorYmVnd29yZCBhbG0gMjUtMTM0CitiZWd3b3JkIGFsdGVyIDI1LTIzNDUtMTI0NTYKK2Fsd2F5cyBhbWF0ZXVyIDEtMTM0LTEtMjM0NS0xMjYtMTIzNSBzaG91bGQgdXNlIHRoZSBldS1jb250cmFjdGlvbgorYmVmb3JlIHIgYWx3YXlzIGFtZXJpa2EgMS0xMzQtMTI0NTYtMjQtMTMtMQorYWx3YXlzIGFtdHNjaGluZXMgMS0xMzQtMjM0NS0yMzQtMTQ1Ni0zNS0xMjM0NTYgc2hvdWxkbid0IHVzZSB0aGUgc2NoLWNvbnRyYWN0aW9uCithbHdheXMgYW10c3N0dWIgMS0xMzQtMjM0NS0yMzQtMjM0NTYtMTM2LTEyIHNob3VsZG4ndCB1c2UgdGhlIHNzLWNvbnRyYWN0aW9uCithbHdheXMgYW5kYWx1c2llciAyMzUtMTQ1LTI1LTEzNi0yMzQtMjQtMTI0NTYgc2hvdWxkbid0IHVzZSB0aGUgaWUtY29udHJhY3Rpb24KK21pZGVuZHdvcmQgYW5lYmVsIDEtMTM0NS0xNS0xMi0xMzQ1NiBBbmRyb21lZGFuZWJlbCBzaG91bGRuJ3QgdXNlIHRoZSBhbi1jb250cmFjdGlvbgorYmVmb3JlIHN0IGFsd2F5cyBhbmZhbmdzIDIzNS0xMjQtMjM1LTEyNDUtMjM0CitiZWZvcmUgc3QgYWx3YXlzIGFuZ3JpZmZzIDIzNS0xMjQ1LTEyMzUtMjQtMTI0LTEyNC0yMzQKK2Fsd2F5cyBhbmtsYWdlIDIzNS0xMy0xMjMtMS0xMjM0NiBBbmtsYWdlcmVkZSBzaG91bGRuJ3QgdXNlIHRoZSBlci1jb250cmFjdGlvbgorYWx3YXlzIGFua2xhbmcgMjM1LTEzLTEyMy0yMzUtMTI0NSBzaG91bGRuJ3QgdXNlIHRoZSBsYW5nLWNvbnRyYWN0aW9uCithbHdheXMgYW5rbMOkbmcgMjM1LTEzLTEyMy0zNDUtMTM0NS0xMjQ1IHNob3VsZG4ndCB1c2UgdGhlIGzDpG5nLWNvbnRyYWN0aW9uCitiZWd3b3JkIGFubGFnZW4gMjM1LTEyMy0xLTEyNDUtMTQKK2Fsd2F5cyBhbmxhdWYgMjM1LTEyMy0xNi0xMjQgc2hvdWxkbid0IHVzZSB0aGUgYXVmLWNvbnRyYWN0aW9uCitiZWZvcmUgbSBhbHdheXMgYW5sZWloZSAyMzUtMTIzLTE0Ni0xMjUtMTUgQW5sZWloZW1hcmt0IHNob3VsZG4ndCB1c2UgdGhlIGVtLWNvbnRyYWN0aW9uCitiZWZvcmUgbSBhbHdheXMgZmlsbSA9CitjbGFzcyBlZ24gZWduCitiZWZvcmUgZWduIGJlZ3dvcmQgYW50aSAyMzUtMjM0NS0yNAorYWx3YXlzIGFudGljaHJpc3QgMjM1LTIzNDUtMjQtMTQ1Ni0xMjM1LTI0LTIzNDU2IHNob3VsZG4ndCB1c2UgdGhlIGljaC1jb250cmFjdGlvbgorYWx3YXlzIGFuw6RzdGggMjM1LTM0NS0yMzQtMjM0NS0xMjUgQW7DpHN0aGVzaWUKK2JlZ3dvcmQgYXJtZWUgMzU2LTEzNC0xNS0xNQord29yZCBhcm1lZW4gMzU2LTEzNC0xNS0xNAorCithbHdheXMgYXVnZW4gMTYtMTI0NS0xNCBzaG91bGRuJ3QgdXNlIHRoZSBnZS1jb250cmFjdGlvbgorbWlkZW5kd29yZCBhdXN0YXVzY2ggMTYtMjM0LTIzNDUtMTYtMTU2IHNob3VsZG4ndCB1c2UgdGhlIHN0LWNvbnRyYWN0aW9uCithbHdheXMgYmVpbHN0ZWluIDEyLTE0Ni0xMjMtMjM0NTYtMTI0NiBzaG91bGRuJ3QgdXNlIHRoZSBiZWktY29udHJhY3Rpb24KK3dvcmQgYmVpbiAxMi0xMjQ2IHNob3VsZG4ndCB1c2UgdGhlIGJlaS1jb250cmFjdGlvbgord29yZCBiZWluZSAxMi0xMjQ2LTE1IHNob3VsZG4ndCB1c2UgdGhlIGJlaS1jb250cmFjdGlvbgord29yZCBiZWluZW4gMTItMTI0Ni0xNCBzaG91bGRuJ3QgdXNlIHRoZSBiZWktY29udHJhY3Rpb24KK3dvcmQgYmVpbmVzIDEyLTEyNDYtMTIzNDU2IHNob3VsZG4ndCB1c2UgdGhlIGJlaS1jb250cmFjdGlvbgorYWx3YXlzIGJhdWZvcm0gMTItMTYtMTI0LTI2LTEzNCBzaG91bGRuJ3QgdXNlIHRoZSBhdWYtY29udHJhY3Rpb24KK2Fsd2F5cyBiZXRldWVyIDIzLTIzNDUtMTI2LTEyNDU2IHNob3VsZG4ndCB1c2UgdGhlIHRlLWNvbnRyYWN0aW9uCithbHdheXMgYmV1dGUgMTItMTI2LTIzNiBzaG91bGQgdXNlIHRoZSBldS1jb250cmFjdGlvbgorYWx3YXlzIGJldXRlbCAxMi0xMjYtMjM0NS0xMzQ1NiBzaG91bGQgdXNlIHRoZSBldS1jb250cmFjdGlvbgorYWx3YXlzIGJzc3kgMTItMjM0LTIzNC02LTEzNDU2IHNob3VsZG4ndCB1c2UgdGhlIHNzLWNvbnRyYWN0aW9uCithbHdheXMgYnVuZGVzIDEyLTI1Ni0xNDUtMTIzNDU2IHNob3VsZG4ndCB1c2UgdGhlIHVuZC1jb250cmFjdGlvbgorcHJmd29yZCBjaGVtaWthbGllIDE0NTYtMTIzNTYtMjQtMTMtMjUtMjQtMTUKK2Fsd2F5cyBkb25uZXJzdGFnIDE0NS0xMzUtMTM0NS0xMzQ1LTEyNDU2LTIzNC0yMzQ1LTEtMTI0NSBzaG91bGRuJ3QgdXNlIHRoZSBzdC1jb250cmFjdGlvbgorYmVmb3JlIGcgYWx3YXlzIHNhbXN0YWcgPQorZW5kd29yZCBzdGFnID0gc2hvdWxkbid0IHVzZSB0aGUgc3QtY29udHJhY3Rpb24KK2VuZHdvcmQgc3RhZ2UgMjM0LTIzNDUtMS0xMjM0NgorZW5kd29yZCBzdGFnZXMgMjM0LTIzNDUtMS0xMjQ1LTEyMzQ1Ngorc3Vmd29yZCBlaGVpbnN0aXR1dCAxNS0xMjUtMTUtMzUtMjM0NTYtMjQtMjM0NS0xMzYtMjM0NQorYmVnd29yZCBlaGVsZXUgMTUtMTI1LTE1LTEyMy0xMjYKK2JlZm9yZSBnIGJlZ3dvcmQgZWhlcmluIDE1LTEyNS0xNS0xMjM1LTM1IEVoZXJpbmcoZSkgc2hvdWxkbid0IHVzZSB0aGUgZXItY29udHJhY3Rpb24KK21pZHdvcmQgZWhpbGZzID0gQW5hbHlzZWhpbGZzbWl0dGVsIHNob3VsZG4ndCB1c2UgdGhlIGVoLWNvbnRyYWN0aW9uCithbHdheXMgZWludGVyIDE1LTM1LTIzNDUtMTI0NTYgc2hvdWxkbid0IHVzZSB0aGUgZWluLWNvbnRyYWN0aW9uCittaWRlbmR3b3JkIGVtZXRob2QgPSBBbmFseXNlbWV0aG9kZSBzaG91bGRuJ3QgdXNlIHRoZSBlaC1jb250cmFjdGlvbgorbWlkZW5kd29yZCBlbm9ybSAxNS0xMzQ1LTI2LTEzNCBBdXNzcHJhY2hlbm9ybSBzaG91bGRuJ3QgdXNlIHRoZSBlbi1jb250cmFjdGlvbiAKK2Fsd2F5cyBlbXVza2VsIDE1LTEzNC0xMzYtMjM0LTEzLTEzNDU2IHNob3VsZG4ndCB1c2UgdGhlIGVtLWNvbnRyYWN0aW9uCithbHdheXMgZXNjaGF0b2xvZyAxMjM0NTYtMTQ1Ni0xLTIzNDUtMTM1LTEyMy0xMzUtMTI0NSBzaG91bGRuJ3QgdXNlIHRoZSBzY2gtY29udHJhY3Rpb24KK2Fsd2F5cyBlc3RoZXIgMTIzNDU2LTIzNDUtMTI1LTEyNDU2IHNob3VsZG4ndCB1c2UgdGhlIHN0LWNvbnRyYWN0aW9uCithbHdheXMgw6RzdGhlIDM0NS0yMzQtMjM0NS0xMjUtMTUgw6RzdGhldGlzY2gKK21pZGVuZHdvcmQgZXJlY2h0IDE1LTEyMzUtMjM0NQorbWlkZW5kd29yZCBlcmljaHQgMTUtMi0zNDU2CithbHdheXMgZXJlcHVibGlrIDE1LTEyMzUtMTMKK21pZGVuZHdvcmQgZW1hbm4gMTUtMTM0LTEzNDUKK21pZGVuZHdvcmQgZW3DpGRjaGVuIDE1LTEzNC0zNDUtMTQ1LTE0NTYtMTQKK21pZGVuZHdvcmQgZW1hZWRjaGVuIDE1LTEzNC0zNDUtMTQ1LTE0NTYtMTQKK21pZGVuZHdvcmQgZW3DpG5uIDE1LTUtMTM0LTEzNDUKK21pZGVuZHdvcmQgZW1hZW5uIDE1LTUtMTM0LTEzNDUKK21pZGVuZHdvcmQgZXN0YW5kIDE1LTItMjM0NTYKK21pZHdvcmQgZXN0ZWxsIDE1LTItMTM0NTYKK2Fsd2F5cyBmb3VuZCAxMjQtMTM1LTI1Ni0xNDUgRm91bmRhdGlvbiBzaG91bGRuJ3QgdXNlIHRoZSB1bmQtY29udHJhY3Rpb24KK2JlZ3dvcmQgZ8OkbnNlID0KK3dvcmQgZ8OkbnNlbiAxMjQ1LTM0NS0xMzQ1LTIzNC0xNAorc3Vmd29yZCBnw6Ruc2VyaWNoIDEyNDUtMzQ1LTEzNDUtMjM0LTEyNDU2LTM0NTYKK2Fsd2F5cyBnZWJlbiAxMjM0Ni0xMi0xNAorYWx3YXlzIGdlYnVuZGVuIDEyMzQ2LTEyLTI1Ni0xNDUtMTQgc2hvdWxkbid0IHVzZSB0aGUgdW5kLWNvbnRyYWN0aW9uCithbHdheXMgZ2VpZXIgMTI0NS0xNDYtMTI0NTYgc2hvdWxkIHVzZSB0aGUgZWktY29udHJhY3Rpb24KK2Fsd2F5cyBnZWlsIDEyNDUtMTQ2LTEyMyBzaG91bGRuJ3QgdXNlIHRoZSBnZS1jb250cmFjdGlvbgorbWlkZW5kd29yZCBnZWluZ2FuZyAxMjQ1LTEyNDYtMTI0NS0yMzUtMTI0NQorbWlkZW5kd29yZCBnZWluZ8OkbiAxMjQ1LTEyNDYtMTI0NS0zNDUtMTM0NQorYWx3YXlzIGdlbHVuZ2VuIDEyMzQ2LTEyMy0yNTYtMTI0NS0xNAorYWx3YXlzIGdlbmVyYXQgMTI0NS0xNC0xMjQ1Ni0xLTIzNDUKK2Fsd2F5cyBnZW5lcmllciAxMjQ1LTE0LTEyNDU2LTM0Ni0xMjM1CithbHdheXMgZ2Vyw6R0IDEyMzQ2LTEyMzUtMzQ1LTIzNDUgc2hvdWxkIHVzZSB0aGUgZ2UtY29udHJhY3Rpb24KK2Fsd2F5cyBnZXJhZXQgMTIzNDYtMTIzNS0zNDUtMjM0NSBzaG91bGQgdXNlIHRoZSBnZS1jb250cmFjdGlvbgorYWx3YXlzIGdlcsOkdXNjaCAxMjM0Ni0xMjM1LTM0LTE1NiBzaG91bGQgdXNlIHRoZSBnZS1jb250cmFjdGlvbgorYWx3YXlzIGdlcmFldXNjaCAxMjM0Ni0xMjM1LTM0LTE1NiBzaG91bGQgdXNlIHRoZSBnZS1jb250cmFjdGlvbgorYWx3YXlzIGdlcmVjaHQgMTIzNDYtMTIzNS0yMzQ1CithbHdheXMgZ2VyaWNodCAxMjM0Ni0yLTM0NTYKK2JlZ3dvcmQgZ2VybWFuIDEyNDUtMTI0NTYtMTM0LTIzNSBzaG91bGRuJ3QgdXNlIHRoZSBnZS1jb250cmFjdGlvbgorYWx3YXlzIGdld2llc2VuIDEyMzQ2LTI0NTYtMzQ2LTIzNC0xNCBzaG91bGRuJ3QgdXNlIHRoZSB3aWUtY29udHJhY3Rpb24KK3ByZndvcmQgaGFsbGVuIDEyNS0xLTEyMzQ1LTE0IHNob3VsZG4ndCB1c2UgdGhlIGFsbGVuLWNvbnRyYWN0aW9uCithbHdheXMgaGF1ZiAxMjUtMTYtMTI0IHNob3VsZG4ndCB1c2UgdGhlIGF1Zi1jb250cmFjdGlvbgorYWx3YXlzIGhvdGVsIDEyNS0xMzUtMjM0NS0xMzQ1NiBzaG91bGRuJ3QgdXNlIHRoZSB0ZS1jb250cmFjdGlvbgorYWx3YXlzIGluc3RhbGxlciAzNS0yMzQ1Ni0xLTEyMzQ1LTEyNDU2IHNob3VsZG4ndCB1c2UgdGhlIGFsbGVyLWNvbnRyYWN0aW9uCithbHdheXMgaW50ZXJuZXQgMzUtMjM0NS0xMjQ1Ni0xMzQ1LTE1LTIzNDUgc2hvdWxkbid0IHVzZSB0aGUgdGUtY29udHJhY3Rpb24KK2Fsd2F5cyBpbnRlcnZpZXcgMzUtMjM0NS0xMjQ1Ni0xMjM2LTI0LTE1LTI0NTYgc2hvdWxkbid0IHVzZSB0aGUgaWUtY29udHJhY3Rpb24KK2FmdGVyIHN0IGFsd2F5cyBpb25zdHJpZWIgMjQ1LTIzNC0yMzQ1LTEyMzUtMzQ2LTEyCithZnRlciBzdCBhbHdheXMgaW9uc3RydXBwIDI0NS0yMzQtMjM0NS0xMjM1LTEzNi0xMjM0LTEyMzQKK2Fsd2F5cyBqdWJlbCAyNDUtMTM2LTEyLTEzNDU2IHNob3VsZG4ndCB1c2UgdGhlIGJlLWNvbnRyYWN0aW9uCithbHdheXMga2FmZmVlID0KK2VuZHdvcmQga2FmZmVlcyAxMy0xLTEyNC0xMjQtMTUtMTIzNDU2CithbHdheXMga29tcG9uaXN0IDEzLTEzNS0xMzQtMTIzNC0xMzUtMTM0NS0yNC0yMzQ1NiBzaG91bGRuJ3QgdXNlIHRoZSBuaXMtY29udHJhY3Rpb24KK2Fsd2F5cyBsZXNlbGFtcCAxMjMtMTIzNDU2LTE1LTEyMy0xLTEzNC0xMjM0IHNob3VsZG4ndCB1c2UgdGhlIGVsLWNvbnRyYWN0aW9uCithbHdheXMgbGllY2h0ZW5zdGVpbiAxMjMtMzQ2LTE0NTYtMjM0NS0xNC0yMzQ1Ni0xMjQ2IHNob3VsZG4ndCB1c2UgdGhlIHRlLWNvbnRyYWN0aW9uCitwcmZ3b3JkIGxpbmllIDEyMy0zNS0yNC0xNSBzaG91bGRuJ3QgdXNlIHRoZSBpZS1jb250cmFjdGlvbgorYWx3YXlzIHJpY2h0bGluaSAyLTM0NTYtMTIzLTM1LTI0CitwcmZ3b3JkIG1hdGVyaWUgMTM0LTEtMjM0NS0xMjQ1Ni0yNC0xNSBzaG91bGRuJ3QgdXNlIHRoZSBpZS1jb250cmFjdGlvbgorYWx3YXlzIG1ldGFsbGVuIDEzNC0xNS0yMzQ1LTEtMTIzNDUtMTQgc2hvdWxkbid0IHVzZSB0aGUgYWxsZW4tY29udHJhY3Rpb24KK2Fsd2F5cyByZWdlbCAxMjM1LTE1LTEyNDUtMTM0NTYKK2Fsd2F5cyByZWxlYXNlID0gc2hvdWxkbid0IHVzZSB0aGUgZWwtY29udHJhY3Rpb24KK2Fsd2F5cyByb2JvdGVyIDEyMzUtMTM1LTEyLTEzNS0yMzQ1LTEyNDU2IHNob3VsZG4ndCB1c2UgdGhlIHRlLWNvbnRyYWN0aW9uCithbHdheXMgcm91bmQgMTIzNS0xMzUtMjU2LTE0NSBzaG91bGRuJ3QgdXNlIHRoZSB1bmQtY29udHJhY3Rpb24KK3N1ZndvcmQgcnVuZCAxMjM1LTI1Ni0xNDUgc2hvdWxkbid0IHVzZSB0aGUgdW5kLWNvbnRyYWN0aW9uCit3b3JkIHLDpHNvbiA9IHNob3VsZG4ndCB1c2UgdGhlIHNvLWNvbnRyYWN0aW9uCithbHdheXMgZMO2c2NoZW4gMTQ1LTI0Ni0yMzQtMTQ1Ni0xNCBzaG91bGRuJ3QgdXNlIHRoZSBzY2gtY29udHJhY3Rpb24KK2Fsd2F5cyBmw7xzc2NoZW4gMTI0LTEyNTYtMjM0Ni0xNDU2LTE0CithbHdheXMgaMOkc2NoZW4gMTI1LTM0NS0yMzQtMTQ1Ni0xNCBzaG91bGRuJ3QgdXNlIHRoZSBzY2gtY29udHJhY3Rpb24KK2Fsd2F5cyBow7ZzY2hlbiAxMjUtMjQ2LTIzNC0xNDU2LTE0IHNob3VsZCB1c2UgdGhlIGNoLWNvbnRyYWN0aW9uCithbHdheXMgd29sbGjDtnNjaGVuIDI0NTYtMTM1LTEyMzQ1LTEyNS0yNDYtMjM0LTE0NTYtMTQgc2hvdWxkbid0IHVzZSB0aGUgd29sbC1jb250cmFjdGlvbgorYWx3YXlzIGvDvHNzY2hlbiAxMy0xMjU2LTIzNDYtMTQ1Ni0xNCBzaG91bGRuJ3QgdXNlIHRoZSBzY2gtY29udHJhY3Rpb24KK2Fsd2F5cyBtw7ZzY2hlbiAxMzQtMjQ2LTIzNC0xNDU2LTE0IHNob3VsZCB1c2UgdGhlIGNoLWNvbnRyYWN0aW9uCit3b3JkIHLDtnNjaGVuIDEyMzUtMjQ2LTIzNC0xNDU2LTE0IHNob3VsZCB1c2UgdGhlIGNoLWNvbnRyYWN0aW9uCitiZWd3b3JkIHJvc2FybyA9IHNob3VsZG4ndCB1c2UgdGhlIGFyLWNvbnRyYWN0aW9uCittaWRlbmR3b3JkIHNhbW1lbCAyMzQtMS0xMzQ2LTEzNDU2IHNob3VsZG4ndCB1c2UgdGhlIHNhbS1jb250cmFjdGlvbgorbWlkZW5kd29yZCBzYW1tbCAyMzQtMS0xMzQ2LTEyMyBzaG91bGRuJ3QgdXNlIHRoZSBzYW0tY29udHJhY3Rpb24KK2VuZHdvcmQgc2NoZWYgMjM0LTE0NTYtMTUtMTI0CitlbmR3b3JkIHNjaGVmaW4gMjM0LTE0NTYtMTUtMTI0LTM1CitlbmR3b3JkIHNjaGVmaW5zIDIzNC0xNDU2LTE1LTEyNC0zNS0yMzQKK2VuZHdvcmQgc2NoZWZpbm5lbiAyMzQtMTQ1Ni0xNS0xMjQtMzUtMTM0NS0xNAorZW5kd29yZCBzY2hlZnMgMjM0LTE0NTYtMTUtMTI0LTIzNAorZW5kd29yZCBlc2NoZWYgMTIzNDU2LTE0NTYtMTUtMTI0CitlbmR3b3JkIGVzY2hlZmluIDEyMzQ1Ni0xNDU2LTE1LTEyNC0zNQorZW5kd29yZCBlc2NoZWZpbnMgMTIzNDU2LTE0NTYtMTUtMTI0LTM1LTIzNAorZW5kd29yZCBlc2NoZWZpbm5lbiAxMjM0NTYtMTQ1Ni0xNS0xMjQtMzUtMTM0NS0xNAorZW5kd29yZCBlc2NoZWZzIDEyMzQ1Ni0xNDU2LTE1LTEyNC0yMzQKK2Fsd2F5cyBzY2h1ZWxlciAxNTYtMTI1Ni0xMjMtMTI0NTYgc2hvdWxkIHVzZSB0aGUgdWUtc3ltYm9sCithbHdheXMgc2Nod3VuZyAxNTYtMjQ1Ni0yNTYtMTI0NSBzaG91bGRuJ3QgdXNlIHRoZSB1bmctY29udHJhY3Rpb24KK2Fsd2F5cyBzZXB0ZW1iZXIgMjM0LTE1LTEyMzQtMjM0NS0xMjM1Ni0xMi0xMjQ1NiBzaG91bGQgdXNlIHRoZSBlbS1jb250cmFjdGlvbgorYWx3YXlzIGRlemVtYmVyIDE0NS0xNS0xMzU2LTEyMzU2LTEyLTEyNDU2IHNob3VsZG4ndCB1c2UgdGhlIGJlLWNvbnRyYWN0aW9uCitiZWZvcmUgcyBhbHdheXMgc2ljaHRzIDIzNC0zNDU2LTIzNDUtMjM0IEFuc2ljaHRzc2FjaGUgc2hvdWxkbid0IHVzZSB0aGUgc3MtY29udHJhY3Rpb24KK2Fsd2F5cyBzaWxiZXIgMjM0LTI0LTEyMy0xMi0xMjQ1NiBzaG91bGRuJ3QgdXNlIHRoZSBiZS1jb250cmFjdGlvbgorYWx3YXlzIHNwcnVuZyAyMzQtMTIzNC0xMjM1LTI1Ni0xMjQ1IHNob3VsZG4ndCB1c2UgdGhlIHVuZy1jb250cmFjdGlvbgorYWx3YXlzIHNzaXR6IDIzNC0yLTI0IHNob3VsZG4ndCB1c2UgdGhlIHNzLWNvbnRyYWN0aW9uCithbHdheXMgc3Nvbm50YWcgPQorYWx3YXlzIHNzcGllbCAyMzQtMi0zNDYKK2Fsd2F5cyBzc3ByYWNoIDIzNC0yMzQtMTIzNAorYWx3YXlzIHNzdGFuZCAyMzQtMi0yMzQ1NgorbWlkZW5kd29yZCBzdGl0ZWwgMjM0LTIzNDUtMjQtMjM0NS0xMzQ1NgorYWx3YXlzIHN0dWRpZW4gMjM0NTYtMTM2LTE0NS0yNC0xNCBzaG91bGRuJ3QgdXNlIHRoZSBpZS1jb250cmFjdGlvbgorYWx3YXlzIHN0dW5kZSAyMzQ1Ni0yNTYtMTQ1LTE1IHNob3VsZG4ndCB1c2UgdGhlIHVuZC1jb250cmFjdGlvbgorYWx3YXlzIHN0dW5kZW4gMjM0NTYtMjU2LTE0NS0xNAorYWx3YXlzIGVzeXN0ZW0gMTUtMjM0LTYtMTM0NTYtMjM0NTYtMTIzNTYgc2hvdWxkbid0IHVzZSB0aGUgZXMtY29udHJhY3Rpb24KK2Fsd2F5cyBzdHVyeiAyMzQ1Ni0xMzYtMTIzNS0xMzU2IEFic3R1cnp1cnNhY2hlIHNob3VsZG4ndCB1c2UgdGhlIHp1LWNvbnRyYWN0aW9uCithbHdheXMgdGFnZXNzdMOkdCAyMzQ1LTEtMTI0NS0xMjM0NTYtMjM0NTYtMzQ1LTIzNDUgc2hvdWxkbid0IHVzZSB0aGUgc3MtY29udHJhY3Rpb24KK2Fsd2F5cyB0YWdlc3N0YWV0IDIzNDUtMS0xMjQ1LTEyMzQ1Ni0yMzQ1Ni0zNDUtMjM0NSBzaG91bGRuJ3QgdXNlIHRoZSBzcy1jb250cmFjdGlvbgorYWx3YXlzIHRlYW0gPSBzaG91bGRuJ3QgdXNlIHRoZSB0ZS1jb250cmFjdGlvbgorbWlkZW5kd29yZCB0ZXJtaW4gMjM0NS0xMjQ1Ni0xMzQtMzUgc2hvdWxkbid0IHVzZSB0aGUgdGUtY29udHJhY3Rpb24KK2Fsd2F5cyB3YWdlbiAyNDU2LTEtMTI0NS0xNCBzaG91bGRuJ3QgdXNlIHRoZSBnZS1jb250cmFjdGlvbgorYWx3YXlzIHdlaWJlciAyNDU2LTE0Ni0xMi0xMjQ1NiBzaG91bGRuJ3QgdXNlIHRoZSBiZS1jb250cmFjdGlvbgorc3Vmd29yZCB2ZXJidW5kIDM2LTEyLTI1Ni0xNDUgc2hvdWxkbid0IHVzZSB0aGUgdW5kLWNvbnRyYWN0aW9uCittaWRlbmR3b3JkIHZlcmJ1bmQgMTIzNi0xMjQ1Ni0xMi0yNTYtMTQ1IHNob3VsZG4ndCB1c2UgdGhlIHVuZC1jb250cmFjdGlvbgorbWlkd29yZCB2ZXJzYW1tIDEyMzYtMTI0NTYtMjM0LTEtMTM0NiBzaG91bGRuJ3QgdXNlIHRoZSBzYW0tY29udHJhY3Rpb24KK2Fsd2F5cyB2aWVydGVsIDEyMzYtMzQ2LTEyMzUtMjM0NS0xMzQ1NiBzaG91bGRuJ3QgdXNlIHRoZSB0ZS1jb250cmFjdGlvbgorYmVmb3JlIGcgYWx3YXlzIHplaXRzdGEgMTM1Ni0yMzQ1LTIzNC0yMzQ1LTEKK2JlZ3dvcmQgemlvbiA9IHppb25pc3Qgc2hvdWxkbid0IHVzZSB0aGUgbmlzLWNvbnRyYWN0aW9uCithbHdheXMgenVnYW50ZW5uIDEzNTYtMTM2LTEyNDUtMjM1LTIzNDUtMTQtMTM0NQorYWx3YXlzIHp3ZWlzZWl0IDEzNTYtMjQ1Ni0xNDYtMjM0LTE0Ni0yMzQ1CithbHdheXMgendlaXN0YWF0IDEzNTYtMjQ1Ni0xNDYtMjM0NTYtMjM0NSBzaG91bGRuJ3QgdXNlIHRoZSB3ZWlzLWNvbnRyYWN0aW9uCisKK21pZGVuZHdvcmQgaGVpdHN0w6R0aWcgMTI1LTIzNC0yMzQ1LTM0NS0yMzQ1LTQ1IGdlbGVnZW5oZWl0c3TDpHRpZ2tlaXQgc2hvdWxkbid0IHVzZSB0aGUgc3QtY29udHJhY3Rpb24KK2JlZ21pZHdvcmQgYWRtaXJhbCAxLTE0NS0xMzQtMjQtMTIzNS0yNQorYmVnbWlkd29yZCBhc3RyYWwgMS0yMzQ1Ni0xMjM1LTI1CitiZWZvcmUgbSBzdWZ3b3JkIGF0b20gPQorYmVnbWlkd29yZCBiaWZva2FsIDEyLTI0LTEyNC0xMzUtMTMtMjUKKyNiZWdtaWR3b3JkIGJyYWNoaWFsIDEyLTEyMzUtNTYtMjQtMjUKK2JlZ21pZHdvcmQgYnJvbmNoaWFsIDEyLTEyMzUtMTM1LTEzNDUtMTQ1Ni0yNC0yNSBicm9uY2hpYWxseW1waGtub3RlbiBzaG91bGRuJ3QgdXNlIHRoZSBsbC1jb250cmFjdGlvbgorYmVnd29yZCBnZW5lcmFsIDEyNDUtMTQtMTI0NTYtMjUKK2JlZ21pZHdvcmQga29sb25pYWwgMTMtMTM1LTEyMy0xMzUtMTM0NS0yNC0yNQorYmVnbWlkd29yZCB6ZW50cmFsIDEzNTYtMTQtMjM0NS0xMjM1LTI1IHplbnRyYWxsYWdlcgorYWx3YXlzIHNjaGFsbCAxNTYtMS0xMjM0NSBzY2hhbGxlbiBzaG91bGRuJ3QgdXNlIHRoZSBhbGxlbi1jb250cmFjdGlvbgorYWx3YXlzIGhlcnp1bHRyYSAxMjUtMTI0NTYtMTM1Ni0xMzYtMTIzLTIzNDUtMTIzNS0xIHNob3VsZG4ndCB1c2UgdGhlIHp1LWNvbnRyYWN0aW9uCithbHdheXMgbWl0dGFnZXNzZW4gMTM0LTI0LTIzNDUtMjM0NS0xLTEyNDUtMTUtMjM0Ni0xNAorYWx3YXlzIHNuYWtlc2tpbiAyMzQtMTM0NS0xLTEzLTE1LTIzNC0xMy0zNQorCisjIGNvdW50cmllcworYWx3YXlzIGTDpG5lbWFyayAxNDUtMzQ1LTEzNDUtMTUtMTM0LTM1Ni0xMyBzaG91bGRuJ3QgdXNlIHRoZSBlbS1jb250cmFjdGlvbgorYWx3YXlzIGRhZW5lbWFyayAxNDUtMzQ1LTEzNDUtMTUtMTM0LTM1Ni0xMyBzaG91bGRuJ3QgdXNlIHRoZSBlbS1jb250cmFjdGlvbgorCisjIG5hbWVzCit3b3JkIGFuZ2VsYSAyMzUtMTI0NS0xMzQ1Ni0xIHNob3VsZG4ndCB1c2UgdGhlIGdlLWNvbnRyYWN0aW9uCit3b3JkIGFuZ2VsZXMgMjM1LTEyNDUtMTM0NTYtMTIzNDU2IHNob3VsZG4ndCB1c2UgdGhlIGdlLWNvbnRyYWN0aW9uCit3b3JkIGFuZ2VsaWthIDIzNS0xMjQ1LTEzNDU2LTI0LTEzLTEgc2hvdWxkbid0IHVzZSB0aGUgZ2UtY29udHJhY3Rpb24KK3dvcmQgYW5nZWxpbmEgMjM1LTEyNDUtMTM0NTYtMzUtMSBzaG91bGRuJ3QgdXNlIHRoZSBnZS1jb250cmFjdGlvbgord29yZCBhbmdlbG8gMjM1LTEyNDUtMTM0NTYtMTM1IHNob3VsZG4ndCB1c2UgdGhlIGdlLWNvbnRyYWN0aW9uCithbHdheXMgZGFuaWVsIDE0NS0yMzUtMjQtMTM0NTYgc2hvdWxkbid0IHVzZSB0aGUgaWUtY29udHJhY3Rpb24KK2Fsd2F5cyBnZXJsaW5kIDEyNDUtMTI0NTYtMTIzLTM1LTE0NSBzaG91bGQgdXNlIHRoZSBlci1jb250cmFjdGlvbgorYWx3YXlzIHNvbHZlaWcgMjM0LTEzNS0xMjMtMTIzNS0xNDYtMTI0NSBzaG91bGRuJ3QgdXNlIHRoZSBzby1jb250cmFjdGlvbgorCisjIFRPRE86CisjIDgtUHVua3RlLVBsYW4KKworIyBpbmxpbmUgY29udHJhY3Rpb24gb2YgZW1vamkgZGVzY3JpcHRpb25zCitlbW9qaSBkZQpkaWZmIC0tZ2l0IGEvVGFibGVzL0NvbnRyYWN0aW9uL2RlLTIwMTUuY3RiIGIvVGFibGVzL0NvbnRyYWN0aW9uL2RlLTIwMTUuY3RiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRjYmVjZjcKLS0tIC9kZXYvbnVsbAorKysgYi9UYWJsZXMvQ29udHJhY3Rpb24vZGUtMjAxNS5jdGIKQEAgLTAsMCArMSwxNTI5IEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisjICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorIworIyBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisjCisjIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisjCisjIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyMgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorIyBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyMKKyMgV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworIworIyBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIyBCUkxUVFkgQ29udHJhY3Rpb24gVGFibGUgLSBHZXJtYW4gKGNvbnRyYWN0ZWQgLSAyMDE1IHN0YW5kYXJkKQorIyBDcmVhdGVkIGJ5IE1hcmlvIExhbmcgPG1sYW5nQGRlbHlzaWQub3JnPi4KKworaW5jbHVkZSBkZS1nMS5jdGIKKworY2xhc3MgZSBlCitjbGFzcyBnIGcKK2NsYXNzIGggaAorY2xhc3MgaSBpCitjbGFzcyBtIG0KK2NsYXNzIG4gbgorY2xhc3MgciByCitjbGFzcyBoaWxtbnJzdSBoaWxtbnJzdQorY2xhc3MgbCBsCitjbGFzcyBsbnIgbG5yCitjbGFzcyBzdCBzdAorY2xhc3Mga29uc29uYW50IGJjZGZnaGprbG1ucHFyc3R2d3h5egorCitpbmNsdWRlIGRlLXdvcnQuY3RpCitiZWZvcmUgZSBhbHdheXMgYXVzbMO2c2UgMTYtMjM0LTEyMy0yNDYtMjM0LTE1CitiZWZvcmUgZSBhbHdheXMgYXVzcmVpc2UgMTYtMjM0LTEyMzUtMTQ2LTIzNC0xNQorYmVmb3JlIGhpbG1ucnN1IGFsd2F5cyBhdXNuYWhtZSAxNi0yMzQtMTM0NS0xMzQtMTUKK3ByZndvcmQgYXVzbmFobWVuIDE2LTIzNC0xMzQ1LTEzNC0xNAorYmVmb3JlIGhpbG1ucnN1IGFsd2F5cyBhdXNzYWdlIDE2LTIzNC0yMzQtMTI0NS0xNQorcHJmd29yZCBhdXNzYWdlbiAxNi0yMzQtMjM0LTEyNDUtMTQKK2JlZm9yZSBrb25zb25hbnQgYWx3YXlzIGF1c3NhZ2VuIDE2LTIzNC0yMzQtMTI0NS0xNAorcHJmd29yZCBhdXNzYWdlbmQgMTYtMjM0LTIzNC0xMjQ1LTE0LTE0NQorcHJmd29yZCBhdXNzYWdlbmRlIDE2LTIzNC0yMzQtMTI0NS0xNC0xNDUtMTUKK3ByZndvcmQgYXVzc2FnZW5kZW0gMTYtMjM0LTIzNC0xMjQ1LTE0LTE0NS0xMjM1NgorcHJmd29yZCBhdXNzYWdlbmRlbiAxNi0yMzQtMjM0LTEyNDUtMTQtMTQ1LTE0CitwcmZ3b3JkIGF1c3NhZ2VuZGVyIDE2LTIzNC0yMzQtMTI0NS0xNC0xNDUtMTI0NTYKK3ByZndvcmQgYXVzc2FnZW5kZXMgMTYtMjM0LTIzNC0xMjQ1LTE0LTE0NS0xMjM0NTYKK2Fsd2F5cyBhdXNzYWdlbmtsYXNzIDE2LTIzNC0yMzQtMTI0NS0xNC0xMy0xMjMtMS0yMzQ2CitiZWZvcmUgZyBhbHdheXMgYXVzc2FnZW5rbMOkbiAxNi0yMzQtMjM0LTEyNDUtMTQtMTMtMTIzLTM0NS0xMzQ1CisKKworYmVmb3JlIHMgYWx3YXlzIGF1cyAxNi0yMzQKKworIyBBdXNuYWhtZW4gZsO8ciBWb2thbGdydXBwZW4gYXVzIGRlLWcxLmN0YgorYmVmb3JlIGUgYWx3YXlzIGFydGVyaSAzNTYtMjM0NS0xMjQ1Ni0yNAorYWx3YXlzIGJhcnJpZXIgMTItMzU2LTEyMzUtMjQtMTI0NTYgc2hvdWxkbid0IHVzZSB0aGUgaWUtY29udHJhY3Rpb24KK2Fsd2F5cyBiYW5raWVyIDEyLTIzNS0xMy0yNC0xMjQ1NiBzaG91bGRuJ3QgdXNlIHRoZSBpZS1jb250cmFjdGlvbgorbWlkZW5kd29yZCBpZWxsIDI0LTE1LTEyMzQ1IHNob3VsZG4ndCB1c2UgdGhlIGllLWNvbnRyYWN0aW9uCithbHdheXMgaW5kaWVuIDM1LTE0NS0yNC0xNCBzaG91bGRuJ3QgdXNlIHRoZSBpZS1jb250cmFjdGlvbgorYWx3YXlzIGthcnJpZXIgMTMtMzU2LTEyMzUtMjQtMTI0NTYKK2Fsd2F5cyBtZWRpZW4gMTM0LTE1LTE0NS0yNC0xNCBzaG91bGRuJ3QgdXNlIHRoZSBpZS1jb250cmFjdGlvbgorYWx3YXlzIHByb3ByaWV0IDEyMzQ1LTEyMzQtMTIzNS0yNC0xNS0yMzQ1IHByb3ByaWV0w6RyIHNob3VsZG4ndCB1c2UgdGhlIGllLWNvbnRyYWN0aW9uCitlbmR3b3JkIHNlcmllIDIzNC0xMjQ1Ni0yNC0xNQorYWx3YXlzIHNwZXppZXMgMjM0LTEyMzQtMTUtMTM1Ni0yNC0xMjM0NTYgc2hvdWxkbid0IHVzZSB0aGUgaWUtY29udHJhY3Rpb24KK2Fsd2F5cyB0cmFnw7ZkaWUgPQorYWx3YXlzIHRyYWfDtmRpZW4gMjM0NS0xMjM1LTEtMTI0NS0yNDYtMTQ1LTI0LTE0CisKKyMgRHVlIHRvIHRoZWlyIGxvdyB1c2FnZSBmcmVxdWVuY3kgaW4gdHlwaWNhbCBnZXJtYW4gdGV4dCB0aGUgbGV0dGVycworIyBjLCBxLCB4IGFuZCB5IGFyZSByZXVzZWQgZm9yIHRoZSBlbi0sIGxsLSwgZXgvbW0vbmlzLSBhbmQgZWwtY29udHJhY3Rpb25zLgorIyBUaGVyZWZvcmUgdGhleSBuZWVkIGEgcHJvY2VkaW5nIGxldHNpZ24gdG8gZGlzYW1iaWd1YXRlIHRoZW0uCithbHdheXMgYyA2LTE0CithbHdheXMgQyA2LTE0CithbHdheXMgcSA2LTEyMzQ1CithbHdheXMgUSA2LTEyMzQ1CithbHdheXMgeCA2LTEzNDYKK2Fsd2F5cyBYIDYtMTM0NgorYWx3YXlzIHkgNi0xMzQ1NgorYWx3YXlzIFkgNi0xMzQ1NgorCisjIExhdXRncnVwcGVua8O8cnp1bmdlbgorbWlkZW5kd29yZCBhY2ggNTYKK2JlZ21pZHdvcmQgYWwgMjUKK2JlZ21pZHdvcmQgOiA2LTI1CitiZWdtaWR3b3JkIGFuIDIzNQorYmVnbWlkd29yZCBhciAzNTYKK2JlZ21pZHdvcmQgYmUgMjMKK21pZGVuZHdvcmQgYmV1bGUgMTItMTI2LTEyMy0xNQorbWlkZW5kd29yZCBiZXVsZW4gMTItMTI2LTEyMy0xNAorYmVmb3JlIGcgYWx3YXlzIGJldSAxMi0xMjYKK2Fsd2F5cyBiZWxsIDIzLTEyMzQ1IHRhYmVsbGUgc2hvdWxkIHVzZSB0aGUgbGwtY29udHJhY3Rpb24KK21pZGVuZHdvcmQgY2sgNDYKK21pZHdvcmQgZWggMjM1NgorYWx3YXlzIGtvaGxlID0KK2Fsd2F5cyBrb2hsZW4gMTMtMTM1LTEyNS0xMjMtMTQKK2Fsd2F5cyBrb2hsZWludG9wZiAxMy0xMzUtMTI1LTEyMy0xMjQ2LTIzNDUtMTM1LTEyMzQtMTI0CithbHdheXMga29obGVpbnTDtnBmIDEzLTEzNS0xMjUtMTIzLTEyNDYtMjM0NS0yNDYtMTIzNC0xMjQKK2JlZm9yZSBnIGFsd2F5cyBrb2hsZWlubGEgMTMtMTM1LTEyNS0xMjMtMTI0Ni0xMjMtMQorYmVmb3JlIGUgYWx3YXlzIGtvaGxldWwgMTMtMTM1LTEyNS0xMjMtMTI2LTEyMyDioKjioIXioJXioJPioIfioKPioIfioIkKK2Fsd2F5cyBlaW4gMTI0NgorYWx3YXlzIGVpbm5lbiAxNS0zNS0xMzQ1LTE0IOKgqOKgr+Kgk+KgjOKgjuKgkeKglOKgneKgieKgjuKgqeKgpiDioKjioK/ioJPioIzioI7ioJHioJTioJ3ioInioJ7ioLfioI/ioLvioIHioJ7ioKXioJcg4qCo4qCn4qCK4qC14qCR4qCU4qCd4qCJ4qCN4qCU4qCK4qC+4qC7CithbHdheXMgbGF0ZWluaXNjaCAxMjMtMS0yMzQ1LTE0Ni0xMzQ1LTI0LTE1NiBzaG91bGRuJ3QgdXNlIHRoZSBlaW4tY29udHJhY3Rpb24KK2Fsd2F5cyBlbCAxMzQ1NgorYmVnbWlkd29yZCBlbGluZWFsIDE1LTEyMy0zNS0xNS0yNQorZW5kd29yZCBlbGluZWFsIDE1LTEyMy0zNS0xNS0xLTEyMworYWx3YXlzIGVsZWlzdCAxNS0xMjMtMTQ2LTIzNDU2CithbHdheXMgZW0gMTIzNTYKK2Fsd2F5cyBlbWFjaCAxNS0xMzQtNTYKK2JlZm9yZSBlIGFsd2F5cyBlbWFjaHMgMTIzNTYtNTYtMjM0IFN5c3RlbWFjaHNlCithbHdheXMgZW4gMTQKK2Fsd2F5cyBkZW51bnogMTQ1LTE1LTEzNDUtMjU2LTEzNTYgc2hvdWxkbid0IHVzZSB0aGUgZW4tY29udHJhY3Rpb24KK2Fsd2F5cyBlciAxMjQ1NgorYWx3YXlzIGRlcmVmZXJlbnppZXIgMTQ1LTE1LTEyMzUtMTUtMTI0LTEyNDU2LTE0LTEzNTYtMzQ2LTEyMzUgc2hvdWxkbid0IHVzZSB0aGUgZXItY29udHJhY3Rpb24KK2Fsd2F5cyBkZXJlZ3VsaWVyIDE0NS0xNS0xMjM1LTE1LTEyNDUtMTM2LTEyMy0zNDYtMTIzNSBzaG91bGRuJ3QgdXNlIHRoZSBlci1jb250cmFjdGlvbgorYWx3YXlzIGVzIDEyMzQ1NgorYWx3YXlzIGdlIDEyMzQ2CitwcmZ3b3JkIGdlaGUgMTI0NS0yMzU2LTE1CitwcmZ3b3JkIGdlaGVuIDEyNDUtMjM1Ni0xNAorcHJmd29yZCBnZWhlbmQgMTI0NS0yMzU2LTE0LTE0NQorcHJmd29yZCBnZWhlbmRlIDEyNDUtMjM1Ni0xNC0xNDUtMTUKK3ByZndvcmQgZ2VoZW5kZW0gMTI0NS0yMzU2LTE0LTE0NS0xMjM1NgorcHJmd29yZCBnZWhlbmRlbiAxMjQ1LTIzNTYtMTQtMTQ1LTE0CitwcmZ3b3JkIGdlaGVuZGVyIDEyNDUtMjM1Ni0xNC0xNDUtMTI0NTYKK3ByZndvcmQgZ2VoZW5kZXMgMTI0NS0yMzU2LTE0LTE0NS0xMjM0NTYKK2JlZm9yZSBrb25zb25hbnQgYWx3YXlzIGdlaCAxMjQ1LTIzNTYKK2Fsd2F5cyB1bWdlaHVuZyAxMzYtMTM0LTEyNDUtMjM1Ni0xMzYgc2hvdWxkbid0IHVzZSB0aGUgZ2UtY29udHJhY3Rpb24KK2JlZm9yZSBrb25zb25hbnQgYWx3YXlzIGJlbCAxMi0xMzQ1NiDDnGJlbGtlaXQgc2hvdWxkbid0IHVzZSB0aGUgYmUtY29udHJhY3Rpb24KK3dvcmQgYmVsIDEyLTEzNDU2CitiZWZvcmUga29uc29uYW50IGFsd2F5cyBiZW0gMTItMTIzNTYKK2JlZm9yZSBrb25zb25hbnQgYWx3YXlzIGJlbiAxMi0xNAorYmVmb3JlIGtvbnNvbmFudCBhbHdheXMgYmVyIDEyLTEyNDU2CitiZWZvcmUga29uc29uYW50IGFsd2F5cyBnZWwgMTI0NS0xMzQ1NiBrbGluZ2VsdG9uIHNob3VsZG4ndCB1c2UgdGhlIGdlLWNvbnRyYWN0aW9uCitiZWZvcmUga29uc29uYW50IGFsd2F5cyBnZW4gMTI0NS0xNAorYmVnd29yZCBsdW5nZW4gMTIzLTI1Ni0xMjQ1LTE0IHNob3VsZG4ndCB1c2UgdGhlIGdlLWNvbnRyYWN0aW9uCitiZWd3b3JkIG1hZ2VuIDEzNC0xLTEyNDUtMTQgc2hvdWxkbid0IHVzZSB0aGUgZ2UtY29udHJhY3Rpb24KK2JlZm9yZSBrb25zb25hbnQgYWx3YXlzIHRlbiAyMzQ1LTE0CithbHdheXMgZWxlZmFudCAxMzQ1Ni0xNS0xMjQtMjM1LTIzNDUKK2JlZm9yZSBrb25zb25hbnQgYWx3YXlzIHRlciAyMzQ1LTEyNDU2CithbHdheXMgZ8O8dGVyIDEyNDUtMTI1Ni0yMzQ1LTEyNDU2IHNob3VsZCB1c2UgdGhlIGVyLWNvbnRyYWN0aW9uCithbHdheXMgZ8O8dGVyZWdlbCAxMjQ1LTEyNTYtMjM2LTEyMzUtMTUtMTI0NS0xMzQ1NgorYWx3YXlzIGfDvHRlcmljaHQgMTI0NS0xMjU2LTIzNi0yLTM0NTYKK21pZGVuZHdvcmQgaWNoIDM0NTYKK21pZGVuZHdvcmQgaWcgNDUKK2Fsd2F5cyBpbiAzNQorCittaWRlbmR3b3JkIGxpY2ggNDU2CithbHdheXMgbGljaHRib2dlbiAxMjMtMzQ1Ni0yMzQ1LTEyLTEzNS0xMjQ1LTE0IHNob3VsZG4ndCB1c2UgdGhlIGxpY2gtY29udHJhY3Rpb24KK2Fsd2F5cyBsaWNodG5haHIgMTIzLTM0NTYtMjM0NS0xMzQ1LTEtMTI1LTEyMzUgc2hvdWxkbid0IHVzZSB0aGUgbGljaC1jb250cmFjdGlvbgorYWx3YXlzIGxpY2h0c2NoIDEyMy0zNDU2LTIzNDUtMTU2CithbHdheXMgYm9kZW5saWNodCAxMi0xMzUtMTQ1LTE0LTEyMy0zNDU2LTIzNDUgc2hvdWxkbid0IHVzZSB0aGUgbGljaC1jb250cmFjdGlvbgorYmVnd29yZCBzZWUgPQorYmVnd29yZCBuZXVzZWUgMTM0NS0xMjYtMjM0LTE1LTE1CisjYmVmb3JlIGtvbnNvbmFudCBhbHdheXMgc2VlbiAyMzQtMTUtMTQKK3dvcmQgc2VlbGUgMjM0LTE1LTEzNDU2LTE1CitzdWZ3b3JkIHNlZWxlbiAyMzQtMTUtMTM0NTYtMTQKK2Fsd2F5cyBzZWVsaXNjaCAyMzQtMTUtMTM0NTYtMjQtMTU2Cit3b3JkIHRlZXIgMjM0NS0xNS0xMjQ1Ngorc3Vmd29yZCB0ZWVyYXJ0aWcgMjM0NS0xNS0xMjQ1Ni0zNTYtMjM0NS00NQorYmVmb3JlIGtvbnNvbmFudCBiZWd3b3JkIHRlZXIgMjM0NS0xNS0xMjQ1Ngord29yZCB0ZWVyZSAyMzQ1LTE1LTEyNDU2LTE1Cit3b3JkIHRlZXJlbiAyMzQ1LTE1LTEyNDU2LTE0Cit3b3JkIHRlZXJlbmQgMjM0NS0xNS0xMjQ1Ni0xNC0xNDUKK3dvcmQgdGVlcmVuZGUgMjM0NS0xNS0xMjQ1Ni0xNC0xNDUtMTUKK3dvcmQgdGVlcmVuZGVtIDIzNDUtMTUtMTI0NTYtMTQtMTQ1LTEyMzU2Cit3b3JkIHRlZXJlbmRlbiAyMzQ1LTE1LTEyNDU2LTE0LTE0NS0xNAord29yZCB0ZWVyZW5kZXIgMjM0NS0xNS0xMjQ1Ni0xNC0xNDUtMTI0NTYKK3dvcmQgdGVlcmVuZGVzIDIzNDUtMTUtMTI0NTYtMTQtMTQ1LTEyMzQ1Ngord29yZCB0ZWVydW5nIDIzNDUtMTUtMTI0NTYtMTM2Cit3b3JkIHRlZXJ1bmdlbiAyMzQ1LTE1LTEyNDU2LTEzNi0xNAorYWx3YXlzIHRlZWxpY2ggMjM0NS0xNS0xNS00NTYgc2hvdWxkbid0IHVzZSB0aGUgZWwtY29udHJhY3Rpb24KK2Fsd2F5cyB0ZWVsw7ZmZmVsIDIzNDUtMTUtMTUtMTIzLTI0Ni0xMjQtMTI0LTEzNDU2IHNob3VsZG4ndCB1c2UgdGhlIGVsLWNvbnRyYWN0aW9uCithbHdheXMgdGVlbWFzY2hpbiAyMzQ1LTE1LTE1LTEzNC0xNTYgc2hvdWxkbid0IHVzZSB0aGUgZW0tY29udHJhY3Rpb24KK2Fsd2F5cyB0ZWVzaWViIDIzNDUtMTUtMTUtMjM0LTM0Ni0xMiBzaG91bGRuJ3QgdXNlIHRoZSBlcy1jb250cmFjdGlvbgorbWlkZW5kd29yZCBsbCAxMjM0NQorYWx3YXlzIGhvbGxhbmQgMTI1LTEzNS0xMjMtMTIzLTIzNS0xNDUgc2hvdWxkbid0IHVzZSB0aGUgbGwtY29udHJhY3Rpb24KK2Fsd2F5cyBob2xsw6RuZGVyIDEyNS0xMzUtMTIzLTEyMy0zNDUtMTM0NS0xNDUtMTI0NTYgc2hvdWxkbid0IHVzZSB0aGUgbGwtY29udHJhY3Rpb24KK2Fsd2F5cyBob2xsYWVuZGVyIDEyNS0xMzUtMTIzLTEyMy0zNDUtMTM0NS0xNDUtMTI0NTYgc2hvdWxkbid0IHVzZSB0aGUgbGwtY29udHJhY3Rpb24KK21pZGVuZHdvcmQgbW0gMTM0NgorYWx3YXlzIHd1cm0gPSB3dXJtbWl0dGVsIHNob3VsZG4ndCB1c2UgdGhlIG1tLWNvbnRyYWN0aW9uCitiZWdtaWR3b3JkIG9yIDI2CisKK2Fsd2F5cyBzY2hhb3MgMjM0LTE0NTYtMS0xMzUtMjM0CithZnRlciBrb25zb25hbnQgbWlkd29yZCBzcyA9CithZnRlciBrb25zb25hbnQgbWlkZW5kd29yZCBzc2F0eiAyMzQtMjM0LTEzNTYKK2FmdGVyIGtvbnNvbmFudCBtaWRlbmR3b3JkIHNzw6R0eiAyMzQtNS0yMzQtMTM1NgorYWZ0ZXIga29uc29uYW50IG1pZGVuZHdvcmQgc3NhZXR6IDIzNC01LTIzNC0xMzU2CithZnRlciBrb25zb25hbnQgbWlkd29yZCBzc2NoIDIzNC0xNTYKK2Fsd2F5cyBzc2NoaWNodCAyMzQtMTU2LTM0NTYtMjM0NQorYWx3YXlzIHNzY2hsYWcgMjM0LTE1Ni0xMjQ1CithbHdheXMgc3NjaGzDpGcgMjM0LTUtMTU2LTEyNDUKK2Fsd2F5cyBzc2NobGFlZyAyMzQtNS0xNTYtMTI0NQorYWx3YXlzIHNzY2hsaWXDnyAyMzQtMTU2LTIzNDYKK2Fsd2F5cyBzc2NobXVjayAyMzQtMTU2LTEzNC0xMzYtNDYKK2Fsd2F5cyBzc2NobnVyIDIzNC0xNTYtMTM0NS0xMzYtMTIzNSBzaG91bGRuJ3QgdXNlIHRoZSBudXItY29udHJhY3Rpb24KK2Fsd2F5cyBzc2Nob29sIDIzNC0yMzQtMTQ1Ni0xMzUtMTM1LTEyMyBmb3JlaWduIHdvcmQsIHNjaC1jb250cmFjdGlvbiBub3QgYWxsb3dlZAorYWx3YXlzIHNzY2hyZWliIDIzNC0xNTYtMTIKK2Fsd2F5cyBzc2NocmllYiAyMzQtMi0xNTYKK2Fsd2F5cyBzc2NocmlmdCAyMzQtMTU2LTIzNDUKK2Fsd2F5cyBzc2Nod2llcmlnIDIzNC0xNTYtNDUKK2Fsd2F5cyBzc2VsYnN0IDIzNC0yMzQtMjM0NTYKK2Fsd2F5cyBzc2VsYnN0w6RuZCAyMzQtMjM0LTEzNDU2LTEyLTUtMjM0NTYgc2hvdWxkbid0IHVzZSB0aGUgc2VsYnN0LWNvbnRyYWN0aW9uCithbHdheXMgc3NlbGJzdGFlbmQgMjM0LTIzNC0xMzQ1Ni0xMi01LTIzNDU2IHNob3VsZG4ndCB1c2UgdGhlIHNlbGJzdC1jb250cmFjdGlvbgorYWZ0ZXIga29uc29uYW50IGFsd2F5cyBzc2V0eiAyMzQtMi0xNQorYWZ0ZXIga29uc29uYW50IG1pZGVuZHdvcmQgc3Nlc2FtIDIzNC0yMzQtMTIzNDU2LTEtMTM0IHNob3VsZG4ndCB1c2UgdGhlIHNhbS1jb250cmFjdGlvbgorYWx3YXlzIHNzaWNoZXIgMjM0LTIzNC0zNDU2LTEyNDU2CithZnRlciBrb25zb25hbnQgYWx3YXlzIHNzaXR6IDIzNC0yLTI0CithbHdheXMgc3NvbGNoIDIzNC0yMzQtMTQ1NgorYWZ0ZXIga29uc29uYW50IG1pZGVuZHdvcmQgc3NvbGwgMjM0LTItMjM0CithbHdheXMgc3NvbmRlcm4gMjM0LTIzNC0xMzQ1CithbHdheXMgc3NvemlhbCAyMzQtMjM0LTEyMworYWx3YXlzIGVzcGllbCAxNS0yLTM0NgorYWx3YXlzIHNzcGllbCAyMzQtMi0zNDYKK2Fsd2F5cyBlc3ByYWNoIDE1LTIzNC0xMjM0CithbHdheXMgc3NwcmFjaCAyMzQtMjM0LTEyMzQKK2Fsd2F5cyBzc3Byw6RjaCAyMzQtNS0yMzQtMTIzNAorYWx3YXlzIHNzcHJhZWNoIDIzNC01LTIzNC0xMjM0CithbHdheXMgZXNwcmVjaCAxNS0yLTIzNDYKK2Fsd2F5cyBzc3ByZWNoIDIzNC0yLTIzNDYKK2FmdGVyIGtvbnNvbmFudCBtaWRlbmR3b3JkIHNzdCAyMzQtMjM0NTYKK2Fsd2F5cyBzc3RhYXQgMjM0LTIzNDU2LTIzNDUKK2FmdGVyIGtvbnNvbmFudCBtaWRlbmR3b3JkIHNzdGFuZCAyMzQtMi0yMzQ1NgorYWZ0ZXIga29uc29uYW50IG1pZGVuZHdvcmQgc3N0w6RuZCAyMzQtNS0yMzQ1NgorYWZ0ZXIga29uc29uYW50IG1pZGVuZHdvcmQgc3N0YWVuZCAyMzQtNS0yMzQ1NgorYWZ0ZXIga29uc29uYW50IG1pZGVuZHdvcmQgc3N0ZWxsIDIzNC0yLTEzNDU2CithbHdheXMgc3N0ZWlnZXIgMjM0LTIzNDU2LTE0Ni0xMjQ1LTEyNDU2CitiZWZvcmUgZSBhbHdheXMgc3N0dW5kIDIzNC0yMzQ1Ni0yNTYtMTQ1IHNob3VsZG4ndCB1c2UgdGhlIHVuZC1jb250cmFjdGlvbgorbWlkZW5kd29yZCBzcyAyMzQ2CisKK21pZGVuZHdvcmQgdGUgMjM2CitzdWZ3b3JkIGF0ZW0gMS0yMzQ1LTEyMzU2IHNob3VsZG4ndCB1c2UgdGhlIHRlLWNvbnRyYWN0aW9uCithbHdheXMgdW4gMjU2CisKK21pZGVuZHdvcmQgdGVpIDIzNDUtMTQ2CisKK2Fsd2F5cyBhbGwgMS0xMjM0NQorYWx3YXlzIGVsbCAxNS0xMjM0NQorYWx3YXlzIGVtbSAxNS0xMzQ2CithbHdheXMgZXNjaCAxNS0xNTYKK2Fsd2F5cyBlc3MgMTUtMjM0NgorYWx3YXlzIGVzdCAxNS0yMzQ1NgorCitlbmR3b3JkIHRlbCAyMzQ1LTEzNDU2CithbHdheXMgc2NoZWl0ZWwgMTU2LTE0Ni0yMzQ1LTEzNDU2IHNob3VsZG4ndCB1c2UgdGhlIHRlLWNvbnRyYWN0aW9uCitiZWd3b3JkIGJldHRlbCAxMi0xNS0yMzQ1LTIzNDUtMTM0NTYgc2hvdWxkbid0IHVzZSB0aGUgdGUtY29udHJhY3Rpb24KK2VuZHdvcmQgdGVsbiAyMzQ1LTEzNDU2LTEzNDUKK2VuZHdvcmQgdGVscyAyMzQ1LTEzNDU2LTIzNAorZW5kd29yZCB0ZW0gMjM0NS0xMjM1NgorZW5kd29yZCB0ZW5lIDIzNDUtMTQtMTUKK2Fsd2F5cyB0dGVuIDIzNDUtMjM0NS0xNCBzaG91bGRuJ3QgdXNlIHRoZSB0ZS1jb250cmFjdGlvbgorYWx3YXlzIHR0ZXIgMjM0NS0yMzQ1LTEyNDU2IHNob3VsZG4ndCB1c2UgdGhlIHRlLWNvbnRyYWN0aW9uCithbHdheXMgZGF0ZW4gMTQ1LTEtMjM0NS0xNCAKK2Fsd2F5cyBrYXJ0ZW4gMTMtMzU2LTIzNDUtMTQKK21pZGVuZHdvcmQgbWF0ZW4gMTM0LTEtMjM0NS0xNCBzaG91bGRuJ3QgdXNlIHRoZSB0ZS1jb250cmFjdGlvbgorZW5kd29yZCB0ZW5lbSAyMzQ1LTE0LTEyMzU2CitlbmR3b3JkIHRlbmVuIDIzNDUtMTQtMTQKK2VuZHdvcmQgdGVuZXIgMjM0NS0xNC0xMjQ1NgorZW5kd29yZCBiZW5lcyAxMi0xNC0xMjM0NTYKK2VuZHdvcmQgdGVuZXMgMjM0NS0xNC0xMjM0NTYKK2VuZHdvcmQgdGVucyAyMzQ1LTE0LTIzNAorZW5kd29yZCB0ZXIgMjM0NS0xMjQ1NgorZW5kd29yZCB0ZXJlIDIzNDUtMTI0NTYtMTUKK2VuZHdvcmQgdGVyZW0gMjM0NS0xMjQ1Ni0xMjM1NgorZW5kd29yZCB0ZXJlbiAyMzQ1LTEyNDU2LTE0CitlbmR3b3JkIHRlcmVzIDIzNDUtMTI0NTYtMTIzNDU2CitlbmR3b3JkIHRlcnMgMjM0NS0xMjQ1Ni0yMzQKK2Fsd2F5cyBsaXRlciAxMjMtMjQtMjM0NS0xMjQ1NgorZW5kd29yZCB0ZXJuIDIzNDUtMTI0NTYtMTM0NQorZW5kd29yZCB0ZXMgMjM0NS0xMjM0NTYKKworZW5kd29yZCBiZWwgMTItMTM0NTYgc2hvdWxkbid0IHVzZSB0aGUgYmUtY29udHJhY3Rpb24KK2VuZHdvcmQgYmVsbiAxMi0xMzQ1Ni0xMzQ1IHNob3VsZG4ndCB1c2UgdGhlIGJlLWNvbnRyYWN0aW9uCitlbmR3b3JkIGJlbG5zIDEyLTEzNDU2LTEzNDUtMjM0IHNob3VsZG4ndCB1c2UgdGhlIGJlLWNvbnRyYWN0aW9uCitlbmR3b3JkIGJlbHMgMTItMTM0NTYtMjM0IHNob3VsZG4ndCB1c2UgdGhlIGJlLWNvbnRyYWN0aW9uCittaWR3b3JkIGJlbGzDpG5nIDEyLTEzNDU2LTUtMTIzLTEyNDUga2FiZWxsw6RuZ2Ugc2hvdWxkbid0IHVzZSB0aGUgbGwtY29udHJhY3Rpb24KK21pZHdvcmQgYmVsbGFlbmcgMTItMTM0NTYtNS0xMjMtMTI0NQorbWlkZW5kd29yZCBiZWx1bmcgMTItMTM0NTYtMTM2CitiZWZvcmUgc3QgbWlkZW5kd29yZCBiZWx1bmdzIDEyLTEzNDU2LTEzNi0yMzQKK2Fsd2F5cyBiZWx2ZWRlciAxMi0xMzQ1Ni0xMjM2LTE1LTE0NS0xMjQ1NiBzaG91bGRuJ3QgdXNlIHRoZSBiZS1jb250cmFjdGlvbgorYWx3YXlzIHdpcmJlbCAyNDU2LTI0LTEyMzUtMTItMTM0NTYgc2hvdWxkbid0IHVzZSB0aGUgYmUtY29udHJhY3Rpb24KK2VuZHdvcmQgYmVuIDEyLTE0IHNob3VsZG4ndCB1c2UgdGhlIGJlLWNvbnRyYWN0aW9uCitlbmR3b3JkIGJlbmQgMTItMTQtMTQ1IHNob3VsZG4ndCB1c2UgdGhlIGJlLWNvbnRyYWN0aW9uCitlbmR3b3JkIGJlbmRlIDEyLTE0LTE0NS0xNSBzaG91bGRuJ3QgdXNlIHRoZSBiZS1jb250cmFjdGlvbgorZW5kd29yZCBiZW5kZW0gMTItMTQtMTQ1LTEyMzU2IHNob3VsZG4ndCB1c2UgdGhlIGJlLWNvbnRyYWN0aW9uCitlbmR3b3JkIGJlbmRlbiAxMi0xNC0xNDUtMTQgc2hvdWxkbid0IHVzZSB0aGUgYmUtY29udHJhY3Rpb24KK2VuZHdvcmQgYmVuZGVyIDEyLTE0LTE0NS0xMjQ1NiBzaG91bGRuJ3QgdXNlIHRoZSBiZS1jb250cmFjdGlvbgorZW5kd29yZCBiZW5kZXMgMTItMTQtMTQ1LTEyMzQ1NiBzaG91bGRuJ3QgdXNlIHRoZSBiZS1jb250cmFjdGlvbgorZW5kd29yZCBiZW5lbSAxMi0xNC0xMjM1NiBzaG91bGRuJ3QgdXNlIHRoZSBiZS1jb250cmFjdGlvbgorZW5kd29yZCBiZW5lbiAxMi0xNC0xNCBzaG91bGRuJ3QgdXNlIHRoZSBiZS1jb250cmFjdGlvbgorZW5kd29yZCBiZW5zIDEyLTE0LTIzNCBzaG91bGRuJ3QgdXNlIHRoZSBiZS1jb250cmFjdGlvbgorZW5kd29yZCBiZXIgMTItMTI0NTYgc2hvdWxkbid0IHVzZSB0aGUgYmUtY29udHJhY3Rpb24KK2VuZHdvcmQgYmVyZWkgMTItMTI0NTYtMTQ2IHNob3VsZG4ndCB1c2UgdGhlIGJlLWNvbnRyYWN0aW9uCitlbmR3b3JkIGJlcmVpZW4gMTItMTI0NTYtMTQ2LTE0IHNob3VsZG4ndCB1c2UgdGhlIGJlLWNvbnRyYWN0aW9uCitlbmR3b3JkIGJlcmluIDEyLTEyNDU2LTM1IHNob3VsZG4ndCB1c2UgdGhlIGJlLWNvbnRyYWN0aW9uCitlbmR3b3JkIGJlcmlubmVuIDEyLTEyNDU2LTM1LTEzNDUtMTQgc2hvdWxkbid0IHVzZSB0aGUgYmUtY29udHJhY3Rpb24KK2VuZHdvcmQgYmVybiAxMi0xMjQ1Ni0xMzQ1IHNob3VsZG4ndCB1c2UgdGhlIGJlLWNvbnRyYWN0aW9uCitlbmR3b3JkIGJlcnMgMTItMTI0NTYtMjM0IHNob3VsZG4ndCB1c2UgdGhlIGJlLWNvbnRyYWN0aW9uCithbHdheXMgb2JlciAxMzUtMTItMTI0NTYgc2hvdWxkbid0IHVzZSB0aGUgYmUtY29udHJhY3Rpb24KK2VuZHdvcmQgYmVzIDEyLTEyMzQ1NiBzaG91bGRuJ3QgdXNlIHRoZSBiZS1jb250cmFjdGlvbgorCithbHdheXMgYmVnZWggMjMtMTI0NS0yMzU2IHNob3VsZG4ndCB1c2UgdGhlIGdlLWNvbnRyYWN0aW9uCithbHdheXMgZ2V0cmllYmVnZWjDpHVzIDEyMzQ2LTIzNDUtMTIzNS0zNDYtMjMtMTIzNDYtMTI1LTM0LTIzNCBzaG91bGRuJ3QgdXNlIHRoZSBlaC1jb250cmFjdGlvbgorYWx3YXlzIGdldHJpZWJlZ2VoYWV1cyAxMjM0Ni0yMzQ1LTEyMzUtMzQ2LTIzLTEyMzQ2LTEyNS0zNC0yMzQgc2hvdWxkbid0IHVzZSB0aGUgZWgtY29udHJhY3Rpb24KK2Fsd2F5cyB1bWdlaHQgMTM2LTEzNC0xMjQ1LTIzNTYtMjM0NSBzaG91bGRuJ3QgdXNlIHRoZSBnZS1jb250cmFjdGlvbgorYWx3YXlzIGdlaWcgMTI0NS0xNDYtMTI0NSBzaG91bGQgdXNlIHRoZSBlaS1jb250cmFjdGlvbgorYWx3YXlzIGdlaXNlbCAxMjQ1LTE0Ni0yMzQtMTM0NTYgc2hvdWxkbid0IHVzZSB0aGUgZ2UtY29udHJhY3Rpb24KK2Fsd2F5cyBnZWlzdCAxMjQ1LTE0Ni0yMzQ1NgorcHJmd29yZCBnZWwgMTI0NS0xMzQ1NiBzaG91bGRuJ3QgdXNlIHRoZSBnZS1jb250cmFjdGlvbgorbWlkZW5kd29yZCBnZWxoYWZ0IDEyNDUtMTM0NTYtMTI1LTEyNAorbWlkd29yZCBnZWxsw6RuZyAxMjQ1LTEzNDU2LTUtMTIzLTEyNDUKK21pZHdvcmQgZ2VsbGFlbmcgMTI0NS0xMzQ1Ni01LTEyMy0xMjQ1CitwcmZ3b3JkIGdlbG4gMTI0NS0xMzQ1Ni0xMzQ1CitwcmZ3b3JkIGdlbG5zIDEyNDUtMTM0NTYtMTM0NS0yMzQKK3ByZndvcmQgZ2VscyAxMjQ1LTEzNDU2LTIzNAorbWlkZW5kd29yZCBnZWx1bmcgMTI0NS0xMzQ1Ni0xMzYKK2JlZm9yZSBzdCBtaWRlbmR3b3JkIGdlbHVuZ3MgMTI0NS0xMzQ1Ni0xMzYtMjM0CitwcmZ3b3JkIGdlbiAxMjQ1LTE0IHNob3VsZG4ndCB1c2UgdGhlIGdlLWNvbnRyYWN0aW9uCittaWRlbmR3b3JkIGdlbmQgMTI0NS0xNC0xNDUgc2hvdWxkbid0IHVzZSB0aGUgZ2UtY29udHJhY3Rpb24KK2VuZHdvcmQgZ2VucyAxMjQ1LTE0LTIzNCBzaG91bGRuJ3QgdXNlIHRoZSBnZS1jb250cmFjdGlvbgorbWlkZW5kd29yZCBnZXIgMTI0NS0xMjQ1NiBzaG91bGQgdXNlIGVyLWNvbnRyYWN0aW9uIGlmIG5vdCBwYXJ0IG9mIGEgd29yZCBpbnRybworYmVmb3JlIHIgYmVnd29yZCBhYmdlIDEtMTItMTIzNDYKK2JlZm9yZSByIGJlZ3dvcmQgYW5nZSAyMzUtMTIzNDYKK3dvcmQgYW5nZXIgMjM1LTEyNDUtMTI0NTYKK3dvcmQgYW5nZXJuIDIzNS0xMjQ1LTEyNDU2LTEzNDUKK3dvcmQgYW5nZXJzIDIzNS0xMjQ1LTEyNDU2LTIzNAorYmVnd29yZCB1bmFuZ2UgMjU2LTIzNS0xMjM0NgorYmVnbWlkd29yZCBhdWZnZXIgMi0xNi0xMjM0Ni0xMjM1CitiZWdtaWR3b3JkIGF1c2dlciAxNi0yMzQtMTIzNDYtMTIzNQorYmVmb3JlIHIgYmVnbWlkd29yZCBlaW5nZSAxMjQ2LTEyMzQ2CitiZWd3b3JkIHVuZ2VyIDI1Ni0xMjM0Ni0xMjM1CitzdWZ3b3JkIHVuZ2VyZWNodCAyNTYtMTIzNDYtMTIzNS0yMzQ1CithbHdheXMgZ2VyaWViZW4gMTIzNDYtMTIzNS0zNDYtMTItMTQgc2hvdWxkIHVzZSB0aGUgZ2UtY29udHJhY3Rpb24KK3N1ZndvcmQgenVnZSAyLTEzNTYtMTIzNDYKK2VuZHdvcmQgZ2VzIDEyNDUtMTIzNDU2IHNob3VsZG4ndCB1c2UgdGhlIGdlLWNvbnRyYWN0aW9uCithbHdheXMgc2llZ2VzIDIzNC0zNDYtMTI0NS0xMjM0NTYKK2Fsd2F5cyB0YWdlc2xpY2h0IDIzNDUtMS0xMjQ1LTEyMzQ1Ni0xMjMtMzQ1Ni0yMzQ1IHNob3VkbG4ndCB1c2UgdGhlIGdlLSBub3IgbGljaC1jb250cmFjdGlvbgorYWx3YXlzIGV1dGhhbmFzaWUgMTI2LTIzNDUtMTI1LTIzNS0xLTIzNC0zNDYKK2Fsd2F5cyBhbnRhc2llIDIzNS0yMzQ1LTEtMjM0LTM0NgorZW5kd29yZCBhbnRhc2llbiAyMzUtMjM0NS0xLTIzNC0yNC0xNAorbWlkZW5kd29yZCBpZW4gMjQtMTQgc2hvdWxkbid0IHVzZSB0aGUgaWUtY29udHJhY3Rpb24KK2Fsd2F5cyBlcnNjaGllbiAxMjQ1Ni0xNTYtMzQ2LTEzNDUKK3ByZndvcmQgaW5kdXN0cmllbiAzNS0xNDUtMTM2LTIzNDU2LTEyMzUtMjQtMTQKK2JlZm9yZSBuIGFsd2F5cyBpbmR1c3RyaWUgMzUtMTQ1LTEzNi0yMzQ1Ni0xMjM1LTM0NiBpbmR1c3RyaWVuYXRpb24gc2hvdWxkbid0IHVzZSB0aGUgZW4tY29udHJhY3Rpb24KK2JlZ21pZHdvcmQgYW5vbWFsIDIzNS0xMzUtMTM0LTI1IHNob3VsZG4ndCB1c2UgdGhlIG1hbC1jb250cmFjdGlvbgorZW5kd29yZCBhbm9tYWwgMjM1LTEzNS0xMzQtMS0xMjMgc2hvdWxkbid0IHVzZSB0aGUgbWFsLWNvbnRyYWN0aW9uCittaWRlbmR3b3JkIGllbmUgMzQ2LTEzNDUtMTUgc2hvdWxkIHVzZSB0aGUgaWUtY29udHJhY3Rpb24KK21pZGVuZHdvcmQgaWVuZW4gMzQ2LTEzNDUtMTQgc2hvdWxkIHVzZSB0aGUgaWUtY29udHJhY3Rpb24KK2VuZHdvcmQgdGVsIDIzNDUtMTM0NTYgc2hvdWxkIHVzZSB0aGUgZWwtY29udHJhY3Rpb24KK2VuZHdvcmQgdGVuIDIzNDUtMTQgc2hvdWxkIHVzZSB0aGUgZW4tY29udHJhY3Rpb24KK2VuZHdvcmQgdGVyIDIzNDUtMTI0NTYgc2hvdWxkIHVzZSB0aGUgZXItY29udHJhY3Rpb24KK2VuZHdvcmQgdGVzIDIzNDUtMTIzNDU2IHNob3VsZCB1c2UgdGhlIGVzLWNvbnRyYWN0aW9uCithbHdheXMgdHJpZ3JhcGggPSBzaG91bGRuJ3QgdXNlIHRoZSBpZy1jb250cmFjdGlvbgorCisjIFZvcnNpbGJlbmvDvHJ6dW5nZW4KK2JlZ3dvcmQgZW50IDIzNDYKK3dvcmQgZW50ZXIgMTQtMjM0NS0xMjQ1NiBzaG91bGRuJ3QgdXNlIHRoZSBlbnQtY29udHJhY3Rpb24KK2JlZ3dvcmQgZXggMTM0NgorYmVnd29yZCBwcm8gMTIzNDUKK2JlZ3dvcmQgdmVyIDM2Cit3b3JkIHZlcmIgMTIzNi0xMjQ1Ni0xMgord29yZCB2ZXJzIDEyMzYtMTI0NTYtMjM0CisKKyNiZWd3b3JkIGF1c3BpeiAxNi0yMzQtMTIzNC0yNC0xMzU2IHNob3VsZG4ndCB1c2UgdGhlIGF1cy1jb250cmFjdGlvbgord29yZCBlbnRlIDE0LTIzNiBzaG91bGRuJ3QgdXNlIHRoZSBlbnQtY29udHJhY3Rpb24KK3N1ZndvcmQgZW50ZW4gMTQtMjM0NS0xNCBzaG91bGRuJ3QgdXNlIHRoZSBlbnQtY29udHJhY3Rpb24KK3dvcmQgZW50Y2hlbiAxNC0yMzQ1LTE0NTYtMTQKK2JlZ3dvcmQgdmVyYW5kYSAxMjM2LTEyNDU2LTIzNi0xNDUtMSBzaG91bGRuJ3QgdXNlIHRoZSB2ZXItY29udHJhY3Rpb24KK2JlZ3dvcmQgdmVydGlrYWwgMTIzNi0xMjQ1Ni0yMzQ1LTI0LTEzLTI1IHNob3VsZG4ndCB1c2UgdGhlIHZlci1jb250cmFjdGlvbgord29yZCB2ZXJ0aWthbCAxMjM2LTEyNDU2LTIzNDUtMjQtMTMtMS0xMjMgc2hvdWxkbid0IHVzZSB0aGUgdmVyLWNvbnRyYWN0aW9uCisKKyMgTmFjaHNpbGJlbmvDvHJ6dW5nZW4KK2VuZHdvcmQgZmFsbHMgMTI0CittaWRlbmR3b3JkIGhlaXQgMTI1CitiZWZvcmUgcyBtaWR3b3JkIGhlaXRzIDEyNS0yMzQKK21pZGVuZHdvcmQga2VpdCAxMworYmVmb3JlIHMgbWlkd29yZCBrZWl0cyAxMy0yMzQKK2VuZHdvcmQgbWFsIDEzNAorc3Vmd29yZCBnZW1hbCAxMjM0Ni0xMzQtMjUgZ2VtYWx0IHNob3VsZG4ndCB1c2UgdGhlIG1hbC1jb250cmFjdGlvbgorbWlkZW5kd29yZCBuaXMgMTM0NgorYWx3YXlzIG5pc2llciAxMzQ1LTI0LTIzNC0zNDYtMTIzNSB0ZWNobmlzaWVydW5nIHNob3VsZG4ndCB1c2UgLW5pcworbWlkZW5kd29yZCBzYW0gMjM0Ngorc3Vmd29yZCBiaXNhbSA9CithbHdheXMgYmlzY2hvZnNhbXQgMTItMjQtMTU2LTEzNS0xMjQtMjM0LTEtMTM0LTIzNDUgc2hvdWxkbid0IHVzZSB0aGUgc2FtLWNvbnRyYWN0aW9uCittaWRlbmR3b3JkIHNjaGFmdCAxNTYKK21pZGVuZHdvcmQgdW5nIDEzNgorYWx3YXlzIGRzY2h1bmdlbCA2LTE0NS0xNTYtMjU2LTEyNDUtMTM0NTYgc2hvdWxkbid0IHVzZSB0aGUgdW5nLWNvbnRyYWN0aW9uCittaWRlbmR3b3JkIHRlcnVuZyAyMzQ1LTEyNDU2LTEzNgorYmVmb3JlIGNzdCBtaWR3b3JkIHVuZ3MgMTM2LTIzNCBCaW5kdW5nc2NoYXJha3RlciwgUmVnaWVydW5nc2NoZWYKKworZW5kd29yZCB3w6RydHMgMjQ1NgorCittaWRlbmR3b3JkIGF0aW9uIDUtMTM0NQorYWx3YXlzIGluZHVzdHJpZW5hdGlvbiAzNS0xNDUtMTM2LTIzNDU2LTEyMzUtMzQ2LTEzNDUtNS0xMzQ1CitiZWZvcmUgcyBtaWR3b3JkIGF0aW9ucyA1LTEzNDUtMjM0CittaWRlbmR3b3JkIGF0aXYgNS0xMjM2CisjYWx3YXlzIHJlbGlnaW9uIDEyMzUtMTM0NTYtNDUtMjQ1CitlbmR3b3JkIGlzbXVzIDUtMjQKK21pZGVuZHdvcmQgaXN0aXNjaCA1LTE1NgorZW5kd29yZCBuaXNtdXMgMTM0NS01LTI0IHNob3VsZG4ndCB1c2UgdGhlIG5pcy1jb250cmFjdGlvbgorbWlkZW5kd29yZCBuaXN0aXNjaCAxMzQ1LTUtMTU2CittaWRlbmR3b3JkIGl0w6R0IDUtMzQ1CittaWRlbmR3b3JkIGl0YWV0IDUtMzQ1CitiZWZvcmUgcyBtaWR3b3JkIGl0w6R0cyA1LTM0NS0yMzQKK2JlZm9yZSBzIG1pZHdvcmQgaXRhZXRzIDUtMzQ1LTIzNAorbWlkZW5kd29yZCBtaXTDpHQgMTM0LTUtMzQ1IHNob3VsZG4ndCB1c2UgdGhlIG1pdC1jb250cmFjdGlvbgorCitzdWZ3b3JkIGFuaXMgMjM1LTI0LTIzNCBzaG91bGRuJ3QgdXNlIHRoZSBuaXMtY29udHJhY3Rpb24KK2JlZm9yZSBzdCBtaWR3b3JkIGF0aW9ucyA1LTEzNDUtMjM0CitzdWZ3b3JkIGJhcnNjaGFmdCAxMi0zNTYtMTU2LTEtMTI0LTIzNDUgc2hvdWxkbid0IHVzZSB0aGUgc2hhZnQtY29udHJhY3Rpb24KK2Fsd2F5cyBibHVtZW5zYW1lbiAxMi0xMjMtMTM2LTEzNC0xNC0yMzQtMS0xMzQtMTQgc2hvdWxkbid0IHVzZSB0aGUgc2FtLWNvbnRyYWN0aW9uCitwcmZ3b3JkIGRlemltYWwgPSBpZiB3ZSB1c2UgdGhlIG1hbC1jb250cmFjdGlvbiBoZXJlLCB3ZSBnZXQgYSBuZXcgd29yZCBkZXppbQorYmVnbWlkd29yZCBkZXppbWFsIDE0NS0xNS0xMzU2LTI0LTEzNC0yNQorc3Vmd29yZCBzbWFsbCAyMzQtMTM0LTEtMTIzNDUgc2hvdWxkbid0IHVzZSB0aGUgbWFsLWNvbnRyYWN0aW9uCit3b3JkIGJlYXVmb3J0IDEyLTE1LTE2LTEyNC0yNi0yMzQ1IHNob3VsZG4ndCB1c2UgdGhlIGF1Zi1jb250cmFjdGlvbgorc3Vmd29yZCBlcmhlaXRlciAxMjQ1Ni0xMjUtMTQ2LTIzNDUtMTI0NTYgc2hvdWxkbid0IHVzZSB0aGUgaGVpdC1jb250cmFjdGlvbgorcHJmd29yZCBmb3JtYWwgMTI0LTI2LTEzNC0xLTEyMyBzaG91bGRuJ3QgdXNlIHRoZSBtYWwtY29udHJhY3Rpb24KK2JlZ3dvcmQgZm9ybWFsIDEyNC0yNi0xMzQtMjUgc2hvdWxkbid0IHVzZSB0aGUgbWFsLWNvbnRyYWN0aW9uCit3b3JkIGZpcm5pcyA9IHNob3VsZG4ndCB1c2UgdGhlIG5pcy1jb250cmFjdGlvbgorYmVnd29yZCBnZXNhbSAxMjM0Ni0yMzQtMS0xMzQgc2hvdWxkbid0IHVzZSB0aGUgc2FtLWNvbnRyYWN0aW9uCithbHdheXMgaGVycnNjaGFmdCAxMjM1LTEyMzUtMTU2LTEtMTI0LTIzNDUgY2FuIG5vdCB1c2UgdGhlIHNoYWZ0LWNvbnRyYWN0aW9uCithbHdheXMgaG9oZWl0IDEyNS0xMzUtMTI1LTE0Ni0yMzQ1IHNob3VsZG4ndCB1c2UgdGhlIGhlaXQtY29udHJhY3Rpb24KK2Fsd2F5cyBrdWhkdW5nIDEzLTEzNi0xMjUtMTQ1LTI1Ni0xMjQ1IHNob3VsZG4ndCB1c2UgdGhlIHVuZy1jb250cmFjdGlvbgorYWx3YXlzIGh1bmdlciAxMjUtMjU2LTEyNDUtMTI0NTYgc2hvdWxkbid0IHVzZSB0aGUgdW5nLWNvbnRyYWN0aW9uCitiZWZvcmUgZyBiZWd3b3JkIGx1biAxMjMtMjU2IHNob3VsZG4ndCB1c2UgdGhlIHVuZy1jb250cmFjdGlvbgorcHJmd29yZCBtYXhpbWFsID0gc2hvdWxkbid0IHVzZSB0aGUgbWFsLWNvbnRyYWN0aW9uCitiZWdtaWR3b3JkIG1heGltYWwgMTM0LTEtNi0xMzQ2LTI0LTEzNC0yNSBzaG91bGRuJ3QgdXNlIHRoZSBtYWwtY29udHJhY3Rpb24KK2Fsd2F5cyB0ZW5uaXMgMjM0NS0xNC0xMzQ1LTI0LTIzNCBzaG91bGRuJ3QgdXNlIHRoZSBuaXMtY29udHJhY3Rpb24KK21pZGVuZHdvcmQgdW5nc2NoYXJha3RlciAxMzYtMjM0LTE0NTYtMTMKK2JlZm9yZSBzdCBtaWRlbmR3b3JkIHVuZ3MgMTM2LTIzNCBzaG91bGRuJ3QgdXNlIHRoZSBzcy9zdC1jb250cmFjdGlvbgorbWlkZW5kd29yZCB6dW5nIDEzNTYtMTM2IGF1c2VpbmFuZGVyc2V0enVuZyBzaG91bGRuJ3QgdXNlIHRoZSB6dS1jb250cmFjdGlvbgorYmVnd29yZCB6dW5nIDEzNTYtMjU2LTEyNDUgc2hvdWxkbid0IHVzZSB0aGUgdW5nLWNvbnRyYWN0aW9uCisKKyMgRWluZm9ybWlnZSBLw7xyenVuZ2VuLCBudXIgYWxsZWluc3RlaGVuZAord29yZCBhbHMgMTQ2Cit3b3JkIGF1Y2ggMzQKK3dvcmQgZXUgPQord29yZCBkYXMgMTQ1Cit3b3JkIGRhc3MgMjM0Ngord29yZCBkZW4gMTUKK3dvcmQgZGVyIDEyMzUKK3dvcmQgZGVzIDMKK3dvcmQgZGllIDM0Ngord29yZCBpaG0gMjM2Cit3b3JkIGltIDM2IG5vdCBhbGxvd2VkIHdoZW4gdXNlZCBpbiBoeXBoZW5hdGVkIHdvcmRzIGxpa2UgSGFucy1pbS1HbMO8Y2stR2Vmw7xobAorYWZ0ZXIgbGV0dGVyIGxpdGVyYWwgLWltLQord29yZCBpc3QgMjM0NTYKK3dvcmQga2FubiAxMword29yZCBsw6Rzc3QgMTIzCit3b3JkIGxhZXNzdCAxMjMKK3dvcmQgbWFuIDEzNAord29yZCBvZGVyIDEzNQord29yZCBzY2hvbiAxNTYKK3dvcmQgc2ljaCAxNAord29yZCBzaWUgMjM0Cit3b3JkIHdhcyAyNDU2CisKKyMgRWluZm9ybWlnZSBLw7xyenVuZ2VuLCBhbGxlaW5zdGVoZW5kIG9kZXIgaW4gV29ydHZlcmJpbmR1bmdlbgord29yZCBhYmVyIDEKK2Fsd2F5cyBhYmVyIDItMQorYWx3YXlzIGFiZXJkZWVuIDEtMTItMTI0NTYtMTQ1LTE1LTE1LTEzNDUKK21pZHdvcmQgYWJlcmVjaCAxLTIzLTEyMzUtMTUtMTQ1NgorbWlkZW5kd29yZCBhYmVyZWljaCAxLTIzLTEyMzUtMTQ2LTE0NTYKK21pZGVuZHdvcmQgYWJlcmljaHQgMS0yMy0yLTM0NTYKK2JlZ21pZHdvcmQgYWJlcmthbm4gMS0xMi0xMjQ1Ni0xMy0yMzUtMTM0NQorYWx3YXlzIGFiZXJrZW5uIDEtMTItMTI0NTYtMTMtMTQtMTM0NQorYmVnbWlkd29yZCBhYmVybnQgMS0xMi0xMjQ1Ni0xMzQ1LTIzNDUKK3ByZndvcmQgYWJlcm50ZSAxLTEyLTEyNDU2LTEzNDUtMjM2CitwcmZ3b3JkIGFiZXJudGVzdCAxLTEyLTEyNDU2LTEzNDUtMjM2LTIzNDU2CitwcmZ3b3JkIGFiZXJudGV0IDEtMTItMTI0NTYtMTM0NS0yMzYtMjM0NQorcHJmd29yZCBhYmVybnRldGUgMS0xMi0xMjQ1Ni0xMzQ1LTIzNi0yMzYKK3ByZndvcmQgYWJlcm50ZXRlbiAxLTEyLTEyNDU2LTEzNDUtMjM2LTIzNDUtMTQKK3ByZndvcmQgYWJlcm50ZXRlc3QgMS0xMi0xMjQ1Ni0xMzQ1LTIzNi0yMzYtMjM0NTYKK3ByZndvcmQgYWJlcm50ZXRldCAxLTEyLTEyNDU2LTEzNDUtMjM2LTIzNi0yMzQ1CithbHdheXMgYWJlcnJhbnMgMS0xMi0xMjQ1Ni0xMjM1LTIzNS0yMzQKK2Fsd2F5cyBhYmVycmF0aW8gMS0xMi0xMjQ1Ni0xMjM1LTEtMjM0NS0yNC0xMzUKK2Fsd2F5cyBhYmVycmF0aW9uIDEtMTItMTI0NTYtMTIzNS01LTEzNDUKK2Fsd2F5cyBhYmVycmllciAxLTEyLTEyNDU2LTEyMzUtMzQ2LTEyMzUKK2Fsd2F5cyBhYmVyemllaCAxLTEyLTEyNDU2LTEzNTYtMzQ2LTEyNQorYWx3YXlzIGFhYmVyZyAxLTEtMTItMTI0NTYtMTI0NQorYWx3YXlzIGNhYmVybmV0IDYtMTQtMS0xMi0xMjQ1Ni0xMzQ1LTE1LTIzNDUKK3N1ZndvcmQgZmFiZXIgMTI0LTEtMTItMTI0NTYKK21pZHdvcmQgZ2FiZXIgMTI0NS0xLTIzLTEyMzUKK2Fsd2F5cyBnYWJlcmVjaHQgMTI0NS0xLTIzLTEyMzUtMjM0NQorYWx3YXlzIGdhYmVyZWdlbCAxMjQ1LTEtMjMtMTIzNS0xNS0xMjQ1LTEzNDU2CitzdWZ3b3JkIGhhYmVyIDEyNS0xLTEyLTEyNDU2CithbHdheXMgcGhhcm1hYmVyYXQgMTIzNC0xMjUtMzU2LTEzNC0xLTIzLTEyMzUtMS0yMzQ1CithbHdheXMgc2NoYWJlciAxNTYtMS0xMi0xMjQ1NgorYWx3YXlzIGVpc3NjaGFiZXIgMTQ2LTIzNC0xNTYtMS0xMi0xMjQ1NgorYWx3YXlzIG1ha2FiZXIgMTM0LTEtMTMtMS0xMi0xMjQ1NgorYWx3YXlzIGthbmRlbGFiZXIgMTMtMjM1LTE0NS0xMzQ1Ni0xLTEyLTEyNDU2CithbHdheXMgbGFiZXIgMTIzLTEtMTItMTI0NTYKK2Fsd2F5cyBhbm5hYmVyZyAyMzUtMTM0NS0xLTEyLTEyNDU2LTEyNDUKK2Fsd2F5cyBhcmFiZXIgMzU2LTEtMTItMTI0NTYKK2Fsd2F5cyBncmFiZXIgMTI0NS0xMjM1LTEtMTItMTI0NTYKK2Fsd2F5cyB0cmFiZXIgMjM0NS0xMjM1LTEtMTItMTI0NTYKK2JlZ21pZHdvcmQgdGFiZXJuIDIzNDUtMS0xMi0xMjQ1Ni0xMzQ1CithbHdheXMgd2FiZXIgMjQ1Ni0xLTEyLTEyNDU2CithbHdheXMgYmVyZ3phYmVybiAxMi0xMjQ1Ni0xMjQ1LTEzNTYtMS0xMi0xMjQ1Ni0xMzQ1CisKK3dvcmQgYXVmIDE2CithbHdheXMgYXVmIDItMTYKK2JlZm9yZSBnIGFsd2F5cyBhdWZ3aWUgMi0xNi0yNDU2LTM0NiBhdWZ3aWVnZWxuL2F1ZndpZWdsZXIvYXVmd2llZ3N0IHNob3VsZG4ndCB1c2UgdGhlIHdpZS1jb250cmFjdGlvbgorYmVmb3JlIHMgYWx3YXlzIGF1ZndpZSAyLTE2LTI0NTYtMzQ2CitiZWd3b3JkIGF1Znp1Y2sgMi0xNi0xMzU2LTEzNi00NgorYmVmb3JlIGtvbnNvbmFudCBhbHdheXMgYXVmenVnIDItMTYtMTM1Ni0xMzYtMTI0NQorYWx3YXlzIGF1Znp1Z3N0dXJtIDItMTYtMTM1Ni0xMzYtMTI0NS0yMzQtMjM0NS0xMzYtMTIzNS0xMzQgc2hvdWxkbid0IHVzZSB6dS1jb250cmFjdGlvbiBhbmQgc3QtY29udHJhY3Rpb24KK2JlZm9yZSBtIGFsd2F5cyBhdWZ6dWdzdMO8ciAyLTE2LTEzNTYtMTM2LTEyNDUtMjM0LTIzNDUtMTI1Ni0xMjM1IHNob3VsZG4ndCB1c2UgenUtY29udHJhY3Rpb24gYW5kIHN0LWNvbnRyYWN0aW9uCithbHdheXMgYXVmenVnc3TDvHIgMi0xNi0xMzU2LTEzNi0xMjQ1LTIzNC0yMzQ1LTEyNTYtMTIzNSBzaG91bGRuJ3QgdXNlIHp1LWNvbnRyYWN0aW9uIGFuZCBzdC1jb250cmFjdGlvbgorcHJmd29yZCBsYXVmIDEyMy0xNi0xMjQKK3ByZndvcmQgbGF1ZmUgMTIzLTE2LTEyNC0xNQorcHJmd29yZCBsYXVmZW4gMTIzLTE2LTEyNC0xNAorcHJmd29yZCBsYXVmZW5kIDEyMy0xNi0xMjQtMTQtMTQ1CitwcmZ3b3JkIGxhdWZlbmRlIDEyMy0xNi0xMjQtMTQtMTQ1LTE1CitwcmZ3b3JkIGxhdWZlbmRlbSAxMjMtMTYtMTI0LTE0LTE0NS0xMjM1NgorcHJmd29yZCBsYXVmZW5kZW4gMTIzLTE2LTEyNC0xNC0xNDUtMTQKK3ByZndvcmQgbGF1ZmVuZGVyIDEyMy0xNi0xMjQtMTQtMTQ1LTEyNDU2CitwcmZ3b3JkIGxhdWZlbmRlcyAxMjMtMTYtMTI0LTE0LTE0NS0xMjM0NTYKK3ByZndvcmQgbGF1ZmVucyAxMjMtMTYtMTI0LTE0LTIzNAorcHJmd29yZCBsYXVmZXMgMTIzLTE2LTEyNC0xMjM0NTYKK3ByZndvcmQgbGF1ZnMgMTIzLTE2LTEyNC0yMzQKK3ByZndvcmQgbGF1ZnN0IDEyMy0xNi0xMjQtMjM0NTYKK3ByZndvcmQgbGF1ZnQgMTIzLTE2LTEyNC0yMzQ1CithbHdheXMgc2NobGF1ZiAxNTYtMTIzLTE2LTEyNCBzaG91bGRuJ3QgdXNlIHRoZSBhdWYtY29udHJhY3Rpb24KK2Fsd2F5cyBhYmZyYWdlcmF0ZSAxLTEyLTEyNC0xMjM1LTEtMTIzNDYtMTIzNS0xLTIzNiBzaG91bGRuJ3QgdXNlIHRoZSBlci1jb250cmFjdGlvbgorYWx3YXlzIGFiZnJhZ2VyYXRlbiAxLTEyLTEyNC0xMjM1LTEtMTIzNDYtMTIzNS0xLTIzNDUtMTQKK2Fsd2F5cyBhYmdlbGF1ZiAxLTEyLTEyMzQ2LTEyMy0xNi0xMjQKK2Fsd2F5cyBha2t1bGF1ZiAxLTEzLTEzLTEzNi0xMjMtMTYtMTI0CithbHdheXMgYXVmbGF1ZiAyLTE2LTEyMy0xNi0xMjQKK2Fsd2F5cyBkdXJjaGxhdWYgMi0xNDU2LTEyMy0xNi0xMjQKK2JlZ3dvcmQgdmVybGF1ZiAzNi0xMjMtMTYtMTI0IHNob3VsZG4ndCB1c2UgdGhlIGF1Zi1jb250cmFjdGlvbgorbWlkZW5kd29yZCB2ZXJsYXVmIDEyMzYtMTI0NTYtMTIzLTE2LTEyNCBzaG91bGRuJ3QgdXNlIHRoZSBhdWYtY29udHJhY3Rpb24KKword29yZCBiZWkgMTIKK2Fsd2F5cyBiZWkgMi0xMgorYWx3YXlzIGJlaXp1bmcgMTItMTQ2LTEzNTYtMTM2IHNob3VsZG4ndCB1c2UgdGhlIGJlaS1jb250cmFjdGlvbgorYWx3YXlzIGJlacOfIDEyLTE0Ni02LTIzNDYgc2hvdWxkbid0IHVzZSB0aGUgYmVpLWNvbnRyYWN0aW9uCitlbmR3b3JkIGJlaW4gMTItMTI0NiBzaG91bGRuJ3QgdXNlIHRoZSBiZWktY29udHJhY3Rpb24KK2VuZHdvcmQgYmVpbmUgMTItMTI0Ni0xNSBzaG91bGRuJ3QgdXNlIHRoZSBiZWktY29udHJhY3Rpb24KK2VuZHdvcmQgYmVpbmVuIDEyLTEyNDYtMTQgc2hvdWxkbid0IHVzZSB0aGUgYmVpLWNvbnRyYWN0aW9uCitlbmR3b3JkIGJlaW5lcyAxMi0xMjQ2LTEyMzQ1NiBzaG91bGRuJ3QgdXNlIHRoZSBiZWktY29udHJhY3Rpb24KK2VuZHdvcmQgYmVpbnMgMTItMTI0Ni0yMzQgc2hvdWxkbid0IHVzZSB0aGUgYmVpLWNvbnRyYWN0aW9uCitiZWZvcmUgdCBhbHdheXMgYmVpbmhhbCAyMy0zNS0xMjUtMjUgc2hvdWxkbid0IHVzZSB0aGUgYmVpLWNvbnRyYWN0aW9uCithbHdheXMgYmVpbmhhbHRlciAxMi0xMjQ2LTEyNS0yNS0yMzQ1LTEyNDU2IHNob3VsZCB1c2UgdGhlIGVpLWNvbnRyYWN0aW9uCithbHdheXMgZGFybWJlaW4gMTQ1LTM1Ni0xMzQtMTItMTI0NgorYWx3YXlzIGdhYmVpbnZlbnQgMTI0NS0xLTIzLTM1LTEyMzYtMTQtMjM0NSDDnGJlcmdhYmVpbnZlbnRhciBzaG91bGRuJ3QgdXNlIHRoZSBiZWktY29udHJhY3Rpb24KK2Fsd2F5cyBrcmV1emJlaW4gMTMtMTIzNS0xMjYtMTM1Ni0xMi0xMjQ2CithbHdheXMgc2NoaWVuYmVpbiAxNTYtMzQ2LTEzNDUtMTItMTI0NgorYWx3YXlzIHNjaGzDvHNzZWxiZWluIDE1Ni0xMjMtMTI1Ni0yMzQ2LTEzNDU2LTEyLTEyNDYgc2hvdWxkbid0IHVzZSB0aGUgYmVpLWNvbnRyYWN0aW9uCisKK3dvcmQgZGVtIDEyMzU2CithbHdheXMgZGVtIDItMTIzNTYKK2VuZHdvcmQgZGVtIDE0NS0xMjM1NiBzaG91bGRuJ3QgdXNlIHRoZSBkZW0tY29udHJhY3Rpb24KK2Fsd2F5cyBhdcOfZXJkZW0gMTYtNi0yMzQ2LTEyNDU2LTItMTIzNTYKK2Fsd2F5cyBkZW1hc2sgPSBkZW1hc2tpZXJ0IHNob3VsZG4ndCB1c2UgdGhlIGRlbS1jb250cmFjdGlvbgorYWx3YXlzIGRlbWlsaXQgPSBzaG91bGRuJ3QgdXNlIHRoZSBkZW0tY29udHJhY3Rpb24KK2Fsd2F5cyBkZW1vbnN0ciAxNDUtMTIzNTYtMTM1LTEzNDUtMjM0NTYtMTIzNSBzaG91bGRuJ3QgdXNlIHRoZSBkZW0tY29udHJhY3Rpb24KK3dvcmQgZGVtbyAxNDUtMTIzNTYtMTM1IHNob3VsZG4ndCB1c2UgdGhlIGRlbS1jb250cmFjdGlvbgord29yZCBkZW1vcyAxNDUtMTIzNTYtMTM1LTIzNCBzaG91bGRuJ3QgdXNlIHRoZSBkZW0tY29udHJhY3Rpb24KKword29yZCBkdXJjaCAxNDU2CithbHdheXMgZHVyY2ggMi0xNDU2CitzdWZ3b3JkIGR1cmNoenVjayAyLTE0NTYtMTM1Ni0xMzYtNDYgc2hvdWxkbid0IHVzZSB0aGUgenUtY29udHJhY3Rpb24KK3dvcmQgZHVyY2h6dWcgMi0xNDU2LTEzNTYtMTM2LTEyNDUgc2hvdWxkbid0IHVzZSB0aGUgenUtY29udHJhY3Rpb24KK3dvcmQgZHVyY2h6dWdlcyAyLTE0NTYtMTM1Ni0xMzYtMTI0NS0xMjM0NTYgc2hvdWxkbid0IHVzZSB0aGUgenUtY29udHJhY3Rpb24KK3N1ZndvcmQgZHVyY2h6dWdzIDItMTQ1Ni0xMzU2LTEzNi0xMjQ1LTIzNCBzaG91bGRuJ3QgdXNlIHRoZSB6dS1jb250cmFjdGlvbgorI2JlZ3dvcmQgZHVyY2hlaW5hbmRlcmdlcmF0IDE0NTYtMi0xMjQ2LTEyMzQ2LTEyMzUtMS0yMzQ1CithbHdheXMgenVnZXJhdCAyLTEzNTYtMTIzNDYtMTIzNS0xLTIzNDUgc2hvdWxkbid0IHVzZSB0aGUgZXItY29udHJhY3Rpb24KKword29yZCBmw7xyIDEyNAorYWx3YXlzIGbDvHIgMi0xMjQKK2Fsd2F5cyBmw7xyc3QgMTI0LTEyNTYtMTIzNS0yMzQ1NiBzaG91bGRuJ3QgdXNlIHRoZSBmw7xyLWNvbnRyYWN0aW9uCisKK3dvcmQgZ2VnZW4gMTI0NQorYWx3YXlzIGdlZ2VuIDItMTI0NQorcHJmd29yZCBnZWdlbnp1ZyAyLTEyNDUtMTM1Ni0xMzYtMTI0NQorcHJmd29yZCBnZWdlbnp1Z2UgMi0xMjQ1LTEzNTYtMTM2LTEyMzQ2CitwcmZ3b3JkIGdlZ2VuenVnZXMgMi0xMjQ1LTEzNTYtMTM2LTEyNDUtMTIzNDU2CitwcmZ3b3JkIGdlZ2VuenVncyAyLTEyNDUtMTM1Ni0xMzYtMTI0NS0yMzQKK2JlZm9yZSBnIHN1ZndvcmQgZ2VnZW56dW4gMi0xMjQ1LTEzNTYtMjU2CisKK3dvcmQgZ2V3ZXNlbiAxMjM0NgorYWx3YXlzIGdld2VzZW4gMi0xMjM0NgorYWx3YXlzIGbDvHJzb3JnZXdlc2VuIDItMTI0LTIzNC0yNi0xMjM0Ni0yNDU2LTEyMzQ1Ni0xNCBzaG91bGRuJ3QgdXNlIHRoZSBnZXdlc2VuLWNvbnRyYWN0aW9uCisKK3dvcmQgaW1tZXIgMTM0NgorYWx3YXlzIGltbWVyIDItMTM0NgorYWx3YXlzIGltbWVyc2lvbiAyNC0xMzQ2LTEyNDU2LTIzNC0yNC0xMzUtMTM0NSBzaG91bGRuJ3QgdXNlIHRoZSBpbW1lci1jb250cmFjdGlvbgorYWx3YXlzIGltbWVyc2l2IDI0LTEzNDYtMTI0NTYtMjM0LTI0LTEyMzYKK2Fsd2F5cyBmbGltbWVyIDEyNC0xMjMtMjQtMTM0Ni0xMjQ1NgorYWx3YXlzIHdpbW1lciAyNDU2LTI0LTEzNDYtMTI0NTYgc2hvdWxkbid0IHVzZSB0aGUgaW1tZXItY29udHJhY3Rpb24KK2Fsd2F5cyB6aW1tZXIgMTM1Ni0yNC0xMzQ2LTEyNDU2IHNob3VsZG4ndCB1c2UgdGhlIGltbWVyLWNvbnRyYWN0aW9uCisKK3dvcmQgamV0enQgMjQ1CithbHdheXMgamV0enQgMi0yNDUKKword29yZCBtZWhyIDIzNTYKK2Fsd2F5cyBtZWhyIDItMjM1NgorCit3b3JkIG1pdCAyMzQ1CithbHdheXMgbWl0IDItMjM0NQorCit3b3JkIG5pY2h0IDEzNDUKK3dvcmQgbiA2LTEzNDUKK2Fsd2F5cyBuaWNodCAyLTEzNDUKK2Fsd2F5cyBuaWNodHp1Z2jDtnIgMi0xMzQ1LTEzNTYtMTM2LTEyNDUtMTI1LTI0Ni0xMjM1CithbHdheXMgbmljaHR6dWNrIDItMTM0NS0xMzU2LTEzNi00NgorCit3b3JkIHNvIDEyMzQKK2Fsd2F5cyBzbyAyLTEyMzQKK2VuZHdvcmQgc29uID0KK2Fsd2F5cyBjdXJzb3IgPSBzaG91bGRuJ3QgdXNlIHRoZSBzby1jb250cmFjdGlvbgorYmVnd29yZAkJYWJzb2wJCT0KK2JlZ3dvcmQJCWFic29yYgkJPQorYmVnd29yZAkJYWJzb3JwCQk9CithbHdheXMJCWFkc29yYmllcgkxLTE0NS0yMzQtMjYtMTItMzQ2LTEyMzUKK2Fsd2F5cwkJYWVyb3NvbAkJMS0xMjQ1Ni0xMzUtMjM0LTEzNS0xMjMKK2Fsd2F5cwkJYW10c29iZXIJMS0xMzQtMjM0NS0yMzQtMTM1LTEyLTEyNDU2CithbHdheXMJCWFudGhyb3Bvc28JMjM1LTIzNDUtMTI1LTEyMzUtMTM1LTEyMzQtMTM1LTIzNC0xMzUKK2Fsd2F5cwkJY2hyb21vc29tCTE0NTYtMTIzNS0xMzUtMTM0LTEzNS0yMzQtMTM1LTEzNCBzaG91bGRuJ3QgdXNlIHRoZSBzby1jb250cmFjdGlvbgorYWx3YXlzCQlpc28JCT0KK2Fsd2F5cwkJa29uc29uCQk9CitiZWdtaWR3b3JkCXNlbnNvcgkJMjM0LTE0LTIzNC0yNgorZW5kd29yZAkJc2Vuc29yCQkyMzQtMTQtMjM0LTEzNS0xMjM1CitlbmR3b3JkCQlzZW5zb3IJCTIzNC0xNC0yMzQtMTM1LTEyMzUKK2Fsd2F5cwkJc29ja2VsCQkyMzQtMTM1LTQ2LTEzNDU2Cit3b3JkCQlzb2RhCQk9CithbHdheXMJCXNvZmZpemllcgkyMzQtMTM1LTEyNC0xMjQtMjQtMTM1Ni0zNDYtMTIzNQorYWx3YXlzCQlzb2Z0CQk9CithbHdheXMJCXNvbGRhdAkJPQorZW5kd29yZAkJc29sbwkJPQorYWx3YXlzCQlzb21tZXIJCTIzNC0xMzUtMTM0Ni0xMjQ1NgorYmVmb3JlIGtvbnNvbmFudCBhbHdheXMJc29uID0KK2Fsd2F5cwkJc29ub2dyYQkJPQorYWx3YXlzCQlzb25uCQk9CithbHdheXMJCXNvbnN0CQkyMzQtMTM1LTEzNDUtMjM0NTYKK2Fsd2F5cwkJc29yaWVudGllcgkyMzQtMjYtMjQtMTQtMjM0NS0zNDYtMTIzNQorYmVmb3JlIGtvbnNvbmFudCBhbHdheXMJc29yCQkyMzQtMjYKK2Fsd2F5cwkJc291cmNlCQk9CitzdWZ3b3JkCQlzb3V0aAkJPQorYWx3YXlzCQlzb3dqZXQJCT0KK2Fsd2F5cwkJc296aW9sbwkJPQorbWlkd29yZCB1bmdzb3B0IDEzNi0yMzQtMTM1LTEyMzQtMjM0NSBBYmVuZGdlc3RhbHR1bmdzb3B0aW9uIHNob3VsZG4ndCB1c2UgdGhlIHNvLWNvbnRyYWN0aW9uCisKK3dvcmQgw7xiZXIgMTI1Ngord29yZCB1ZWJlciAxMjU2CithbHdheXMgw7xiZXIgMi0xMjU2CithbHdheXMgw7xiZXJ6dWNodCAyLTEyNTYtMTM1Ni0xMzYtMTQ1Ni0yMzQ1CithbHdheXMgw7xiZXJ6dWNrIDItMTI1Ni0xMzU2LTEzNi00NgorcHJmd29yZCDDvGJlcnp1ZyAyLTEyNTYtMTM1Ni0xMzYtMTI0NQorcHJmd29yZCDDvGJlcnp1Z2VzIDItMTI1Ni0xMzU2LTEzNi0xMjQ1LTEyMzQ1NgorYmVmb3JlIGtvbnNvbmFudCBhbHdheXMgw7xiZXJ6dWcgMi0xMjU2LTEzNTYtMTM2LTEyNDUKK2Fsd2F5cyDDvGJlcmxhdWYgMi0xMjU2LTEyMy0xNi0xMjQKKword29yZCB1bmQgMTM2CithbHdheXMgdW5kIDItMTM2CitzdWZ3b3JkIGdlc3VuZCAxMjM0Ni0yMzQtMjU2LTE0NQorcHJmd29yZCBodW5kIDEyNS0yNTYtMTQ1IHNob3VsZG4ndCB1c2UgdGhlIHVuZC1jb250cmFjdGlvbgorYWx3YXlzIGh1bmRlIDEyNS0yNTYtMTQ1LTE1IHNob3VsZG4ndCB1c2UgdGhlIHVuZC1jb250cmFjdGlvbgorYWx3YXlzIGh1bmRlcnQgMTI1LTI1Ni0xNDUtMTI0NTYtMjM0NSBzaG91bGRuJ3QgdXNlIHRoZSB1bmQtY29udHJhY3Rpb24KK3ByZndvcmQgaHVuZGVydGUgMTI1LTI1Ni0xNDUtMTI0NTYtMjM2IHNob3VsZG4ndCB1c2UgdGhlIHVuZC1jb250cmFjdGlvbgorcHJmd29yZCBodW5kZW4gMTI1LTI1Ni0xNDUtMTQgc2hvdWxkbid0IHVzZSB0aGUgdW5kLWNvbnRyYWN0aW9uCitwcmZ3b3JkIGh1bmRlcyAxMjUtMjU2LTE0NS0xMjM0NTYgc2hvdWxkbid0IHVzZSB0aGUgdW5kLWNvbnRyYWN0aW9uCithbHdheXMga3VuZCAxMy0yNTYtMTQ1IHNob3VsZG4ndCB1c2UgdGhlIHVuZC1jb250cmFjdGlvbgorYWx3YXlzIG11bmQgMTM0LTI1Ni0xNDUgc2hvdWxkbid0IHVzZSB0aGUgdW5kLWNvbnRyYWN0aW9uCithbHdheXMgcnVuZGZ1bmsgMTIzNS0yNTYtMTQ1LTEyNC0yNTYtMTMgc2hvdWxkbid0IHVzZSB0aGUgdW5kLWNvbnRyYWN0aW9uCitzdWZ3b3JkIHNjaHJ1bmQgMTU2LTEyMzUtMjU2LTE0NQorYWx3YXlzIHd1bmQgMjQ1Ni0yNTYtMTQ1IHNob3VsZG4ndCB1c2UgdGhlIHVuZC1jb250cmFjdGlvbgorCit3b3JkIHVudGVyIDI1NgorYWx3YXlzIHVudGVyIDItMjU2CitzdWZ3b3JkIGt1bnRlciAxMy0yNTYtMjM0NS0xMjQ1NiBzaG91bGRuJ3QgdXNlIHRoZSB1bnRlci1jb250cmFjdGlvbgorc3Vmd29yZCBrdW50ZXJidW50ZXIgMTMtMjU2LTIzNDUtMTI0NTYtMTItMjU2LTIzNDUtMTI0NTYKK3N1ZndvcmQgbXVudGVyIDEzNC0yNTYtMjM0NS0xMjQ1NiBzaG91bGRuJ3QgdXNlIHRoZSB1bnRlci1jb250cmFjdGlvbgorYWx3YXlzIHZpcnVzID0KKword29yZCB2b2xsIDEyMzQ1CithbHdheXMgdm9sbCAyLTEyMzQ1CitwcmZ3b3JkIHZvbGx6dWcgMi0xMjM0NS0xMzU2LTEzNi0xMjQ1CitwcmZ3b3JkIHZvbGx6dWdlIDItMTIzNDUtMTM1Ni0xMzYtMTIzNDYKK3ByZndvcmQgdm9sbHp1Z2VzIDItMTIzNDUtMTM1Ni0xMzYtMTI0NS0xMjM0NTYKK2Fsd2F5cyB2b2xsenVncyAyLTEyMzQ1LTEzNTYtMTM2LTEyNDUtMjM0CisKK3dvcmQgdm9uIDEyMzYKK2Fsd2F5cyB2b24gMi0xMjM2CisKK3dvcmQgdm9yIDI2CithbHdheXMgdm9yIDItMjYKK2Fsd2F5cyB2b3J6dWdzIDItMjYtMTM1Ni0xMzYtMTI0NS0yMzQKK2Fsd2F5cyB2b3J6dWdzdGltbWUgMi0yNi0xMzU2LTEzNi0xMjQ1LTIzNDU2LTI0LTEzNDYtMTUKK2Fsd2F5cyB2b3J6dWdzdGltbWVuIDItMjYtMTM1Ni0xMzYtMTI0NS0yMzQ1Ni0yNC0xMzQ2LTE0CithbHdheXMgZmF2b3JpdCAxMjQtMS0xMjM2LTI2LTI0LTIzNDUgc2hvdWxkbid0IHVzZSB0aGUgdm9yLWNvbnRyYWN0aW9uCisKK3dvcmQgd2llIDEyNgorYWx3YXlzIHdpZSAyLTEyNgorYWx3YXlzIHp3aWViZWwgMTM1Ni0yNDU2LTM0Ni0xMi0xMzQ1NiBzaG91bGRuJ3QgdXNlIHRoZSB3aWUtY29udHJhY3Rpb24KKword29yZCB6dSAxMzU2CithbHdheXMgenUgMi0xMzU2CithbHdheXMgenVnZW50bGFzdCAxMzU2LTEzNi0xMjQ1LTE0LTIzNDUtMTIzLTEtMjM0NTYgc2hvdWxkbid0IHVzZSB0aGUgenUtIG5vciBnZS1jb250cmFjdGlvbgord29yZCBpbmRlbSAzNS0yLTEyMzU2Cit3b3JkIHRyb3R6ZGVtIDIzNDUtMTM1Ni0yLTEyMzU2Cit3b3JkIHp1ZGVtIDEzNTYtMi0xMjM1NgorYWx3YXlzIHp1Y2h0IDEzNTYtMTM2LTE0NTYtMjM0NSBzaG91bGRuJ3QgdXNlIHRoZSB6dS1jb250cmFjdGlvbgorYWx3YXlzIHp1Y2sgMTM1Ni0xMzYtNDYgc2hvdWxkbid0IHVzZSB0aGUgenUtY29udHJhY3Rpb24KK2JlZm9yZSBnIGFsd2F5cyB6dWcgPQorZW5kd29yZCB6dWcgPQorZW5kd29yZCB6dWdlcyAxMzU2LTEzNi0xMjQ1LTEyMzQ1NgorCisjIEVpbmZvcm1pZ2UgS8O8cnp1bmdlbiwgYWxsZWluc3RlaGVuZCBvZGVyIGFtIFdvcnRhbmZhbmcKK2JlZm9yZSBlIHN1ZndvcmQgaWhyIDI0CitiZWZvcmUgaSBzdWZ3b3JkIGlociAyNAorYmVmb3JlIGUgc3Vmd29yZCBzZWluIDI0NgorYmVmb3JlIGkgc3Vmd29yZCBzZWluIDI0Ngord29yZCB3YXIgMzU2Cit3b3JkIHdhcmVuIDM1Ni0xNAord29yZCB3YXJzdCAzNTYtMjM0NTYKK3dvcmQgd2FydCAzNTYtMjM0NQord29yZCB3YXIncyAzNTYtNi0yMzQKK3dvcmQgd8OkciA1LTM1Ngord29yZCB3w6RyZSA1LTM1Ni0xNQord29yZCB3w6RyZW4gNS0zNTYtMTQKK3dvcmQgd8OkcmVzdCA1LTM1Ni0xNS0yMzQ1Ngord29yZCB3w6RyZXQgNS0zNTYtMTUtMjM0NQord29yZCB3w6Ryc3QgNS0zNTYtMjM0NTYKK3dvcmQgd8OkcnQgNS0zNTYtMjM0NQord29yZCB3w6RyJ3MgNS0zNTYtNi0yMzQKKworIyBFaW5mb3JtaWdlIEvDvHJ6dW5nZW4sIGFsbGVpbnN0ZWhlbmQsIG1pdCBFbmR1bmdlbiBvZGVyIGluIFdvcnR2ZXJiaW5kdW5nZW4KK2Fsd2F5cyBoYXR0IDEyNQorYWx3YXlzIGjDpHR0IDM0NQorYWx3YXlzIGhhZXR0IDM0NQorYWx3YXlzIHdlbGNoIDEzNDU2CisKK3dvcmQgYWRvbmlzID0gc2hvdWxkbid0IHVzZSB0aGUgbmlzLWNvbnRyYWN0aW9uCithbHdheXMgYWt0dWVsbCAxLTEzLTIzNDUtMTM2LTE1LTEyMzQ1IHNob3VsZCB1c2UgdGhlIGxsLWNvbnRyYWN0aW9uCithbHdheXMgYWxsIDEtMTIzNDUKK3N1ZndvcmQgYWxsZSAxLTE1CithbHdheXMgYWxsZWdvciAxLTEyMzQ1LTE1LTEyNDUtMjYgQWxsZWdvcmllIHNob3VsZG4ndCB1c2UgdGhlIGFlLWNvbnRyYWN0aW9uCithbHdheXMgYWxsZWluIDEtMTI0Ngord29yZCBhbGxlbSAxLTEyMzU2CithbHdheXMgYWxsZW4gMS0xNAorYWx3YXlzIGFsbGVyIDEtMTI0NTYKK2Fsd2F5cyBhbGxlcmcgMS0xMjM0NS0xMjQ1Ni0xMjQ1IEFsbGVyZ2lrZXIKK3dvcmQgYWxsZXMgMS0xMjM0NTYKK2Fsd2F5cyBhbGxlc2FtdCAxLTEyMzQ1LTE1LTIzNC0xLTEzNC0yMzQ1IHNob3VsZG4ndCB1c2UgdGhlIGVzLWNvbnRyYWN0aW9uCithbHdheXMgYWxwaGFiZXQgMjUtMTIzNC0xMjUtMS0xMi0xNS0yMzQ1IHNob3VsZG4ndCB1c2UgdGhlIGhhYi1jb250cmFjdGlvbgord29yZCBhbHNvIDEtMTM1CithbHdheXMgYW5kZXIgMi0xMjQ1NgorYWx3YXlzIHdhbmRlciAyNDU2LTIzNS0xNDUtMTI0NTYgd2FuZGVybiBzaG91bGRuJ3QgdXNlIHRoZSBhbmRlci1jb250cmFjdGlvbgorc3Vmd29yZCB6YW5kZXIgMTM1Ni0yMzUtMTQ1LTEyNDU2CithbHdheXMgw6RuZGVyIDUtMTI0NTYKK2Fsd2F5cyBhYsOkbmRlciAxLTEyLTUtMTI0NTYKK2Fsd2F5cyBiw6RuZGVyIDEyLTM0NS0xMzQ1LTE0NS0xMjQ1NiBzaG91bGRuJ3QgdXNlIHRoZSDDpG5kZXItY29udHJhY3Rpb24KK2Fsd2F5cyBhZW5kZXIgNS0xMjQ1NgorYWx3YXlzIGFyYmVpdCAzNTYtMTIKK2JlZm9yZSBzIGFsd2F5cyBhcmJlaXRzIDM1Ni0xMi0yMzQKK2Fsd2F5cyBhcmJlbiAzNTYtMTItMTQKK2Fsd2F5cyBrYXVmIDEzLTE2LTEyNAorYWx3YXlzIGF1c3N0IDE2LTIzNC0yMzQ1NiBzaG91bGRuJ3QgdXNlIHRoZSBzcy1jb250cmFjdGlvbgorYWx3YXlzIGF1c3N0ZWxsIDE2LTIzNC0yLTEzNDU2CithbHdheXMgYXVzc3RhbmQgMTYtMjM0LTItMjM0NTYKK2Fsd2F5cyBhdXNzdMOkbmQgMTYtMjM0LTUtMjM0NTYKKworYWx3YXlzIGF1c3RyYWxpIDE2LTIzNDU2LTEyMzUtMjUtMjQgYXVzdHJhbGllciBzaG91bGRuJ3QgdXNlIHRoZSBpZS1jb250cmFjdGlvbgorYWx3YXlzIGxvdGF1c3RyYWxpbiAxMjMtMTM1LTIzNDUtMTYtMjM0NTYtMTIzNS0yNS0zNQorCithbHdheXMgw6RobmxpY2ggMzQ1LTQ1NgorYWx3YXlzIGFlaG5saWNoIDM0NS00NTYKKword29yZCBiYWxzYW0gMTItMjUtMjM0LTEtMTM0Cit3b3JkIGJlZW4gMTItMTUtMTUtMTM0NSBlbmdsaXNoIHdvcmQgc2hvdWxkbid0IHVzZSBiZS0gb3IgZW4tY29udHJhY3Rpb24KK2Fsd2F5cyBiZWVyZSAxMi0xNS0xNS0xMjM1LTE1CithbHdheXMgYmVlcmVuIDEyLTE1LTE1LTEyMzUtMTQKK2Fsd2F5cyBiZWhyIDEyLTIzNTYtMTIzNSBlbnRiZWhyZW4KK2JlZ3dvcmQgYmVpZCAxMi0xNDUgYmVpZGVyc2VpdHMKK2Fsd2F5cyBiZXJnIDEyLTEyNDU2LTEyNDUgc2hvdWxkbid0IHVzZSB0aGUgYmUtY29udHJhY3Rpb24KK2Fsd2F5cyBiZXJnZSAxMi0xMjQ1Ni0xMjM0NiBzaG91bGRuJ3QgdXNlIHRoZSBiZS1jb250cmFjdGlvbgorYWx3YXlzIGJlcmdlbiAxMi0xMjQ1Ni0xMjQ1LTE0IHNob3VsZG4ndCB1c2UgdGhlIGJlLWNvbnRyYWN0aW9uCithbHdheXMgYmVyZ2VyIDEyLTEyNDU2LTEyNDUtMTI0NTYgc2hvdWxkbid0IHVzZSB0aGUgYmUtY29udHJhY3Rpb24KK2Fsd2F5cyBiZXJnZXMgMTItMTI0NTYtMTI0NS0xMjM0NTYgc2hvdWxkbid0IHVzZSB0aGUgYmUtY29udHJhY3Rpb24KK2Fsd2F5cyBiZXNvbmRlciAyMworYWx3YXlzIGJlc3NlciAyMzQtMjM0Citjb250cmFjdGlvbiBzcword29yZCBiZWltIDEyLTEzNAorY29udHJhY3Rpb24gYm0KK3dvcmQgYmlzIDEyLTIzNAorc3Vmd29yZCBiaXNoZXIgMTItMjM0LTEyNS0xMjQ1Ngorc3Vmd29yZCBiaXNsYW5nIDEyLTIzNDUtMTIzLTEyNDUKK3N1ZndvcmQgYmlzd2VpbCAxMi0yMzQtMjQ1Ni0xNDYtMTIzCithbHdheXMgYmlzb24gPQorCithbHdheXMgYmlzdCAxMi0yMzQ1NgorYWx3YXlzIGJpc3R1bSAxMi0yNC0yMzQ1Ni0xMzYtMTM0IHNob3VsZG4ndCB1c2UgdGhlIGJpc3QtY29udHJhY3Rpb24KK2Fsd2F5cyBibGVpYiAxMi0xMgorY29udHJhY3Rpb24gYmIKK2Fsd2F5cyBicmF1Y2ggMi0zNAorYWx3YXlzIGJyw6R1Y2ggNS0zNAorYWx3YXlzIGJyYWV1Y2ggNS0zNAorYWx3YXlzIGJyaWVmIDEyLTEyNAorY29udHJhY3Rpb24gYmYKK2Fsd2F5cyBicmluZyAxMi0xMjQ1Citjb250cmFjdGlvbiBiZworCithbHdheXMgY2hhcmFrdGVyIDE0NTYtMTMKK3N1ZndvcmQgY2hvciAxNDU2LTEzNS0xMjM1IHNob3VsZG4ndCB1c2UgdGhlIG9yLWNvbnRyYWN0aW9uCithbHdheXMgY29tcHV0IDYtMTQtMTM1LTEzNC0xMjM0LTEzNi0yMzQ1IGNvbXB1dGVyIHNob3VsZCB1c2UgdGhlIGVyLWNvbnRyYWN0aW9uCisKK2Fsd2F5cyBkYWJlaSAxNDUtMTIKK2NvbnRyYWN0aW9uIGRiCithbHdheXMgZGFkdXJjaCAxNDUtMTQ1Citjb250cmFjdGlvbiBkZAorYWx3YXlzIGRhZsO8ciAxNDUtMTI0Citjb250cmFjdGlvbiBkZgorYWx3YXlzIGRhZ2VnZW4gMTQ1LTEyNDUKK2NvbnRyYWN0aW9uIGRnCithbHdheXMgZGFoZXIgMTQ1LTEyNQorY29udHJhY3Rpb24gZGgKK2Fsd2F5cyBkYW1pdCAxNDUtMTM0Citjb250cmFjdGlvbiBkbQorYWx3YXlzIGRhbmsgMTQ1LTEzCitjb250cmFjdGlvbiBkaworYWx3YXlzIGRhdm9uIDE0NS0xMjM2Citjb250cmFjdGlvbiBkdgorYWx3YXlzIGRhenUgMTQ1LTEzNTYKK2NvbnRyYWN0aW9uIGR6CithbHdheXMgZGF6dWJsZWliIDE0NS0xLTItMTM1Ni0xMi0xMiBzaG91bGRuJ3QgdXNlIHRoZSBkYXp1LWNvbnRyYWN0aW9uCithbHdheXMgZGF6dW1hbCAxNDUtMS0yLTEzNTYtMTM0CithbHdheXMgZGV1dGVuIDE0NS0xMjYtMjM0NS0xNCBzaG91bGRuJ3QgdXNlIHRoZSB0ZS1jb250cmFjdGlvbgorYWx3YXlzIGRlYWwgPSBkZWFsZXIKK3dvcmQgZGVpID0gQWdudXMgRGVpCithbHdheXMgZGVtb2tyYXQgMTQ1LTIzNDUKK2NvbnRyYWN0aW9uIGR0Cit3b3JkIGRlbmVuIDE1LTE0Cit3b3JkIGRuaXN0ZXIgMTQ1LTEzNDUtMjQtMjM0LTIzNDUtMTI0NTYgc2hvdWxkbid0IHVzZSB0aGUgbmlzLWNvbnRyYWN0aW9uCit3b3JkIGRlbm4gMTQ1LTEzNDUKK3dvcmQgZGVubnNjaG9uIDE0NS0xMzQ1LTE1Ni0xMzUtMTM0NQorYWx3YXlzIGRlc3NlbiAxNDUtMjM0NgorYWx3YXlzIGRldXRzY2ggMTQ1LTE1Ngord29yZCBkaWVtIDE0NS0yNC0xMjM1NiB3ZSBzaG91bGRuJ3QgdXNlIHRoZSBpZS1jb250cmFjdGlvbiBoZXJlCit3b3JkIGRpZXNlIDM0Ni0xNQord29yZCBkaWVzZW4gMzQ2LTE0Cit3b3JkIGRpZXNlciAzNDYtMTI0NTYKK3dvcmQgZGllc2VzIDM0Ni0xMjM0NTYKK3N1ZndvcmQgZGllc21hbCAzNDYtMTM0Cit3b3JkIGRpciAxNDUtMTIzNQord29yZCBkb2NoIDE0NS0xNDU2CithbHdheXMgZHJ1Y2sgMTQ1LTQ2CithbHdheXMgZHLDvGNrIDUtMTQ1LTQ2CithbHdheXMgZMO8cmYgMi0xNDUKKworYWx3YXlzIGViZW4gMTUtMTItMTQKK3dvcmQgZWJlbnNvIDE1LTEzNQorY29udHJhY3Rpb24gZW8KK3N1ZndvcmQgZWhlbWFsIDE1LTEyNS0xNS0xMzQKK3dvcmQgZWkgNi0xNDYKK2Fsd2F5cyBlaWdlbiAxNDYtMTI0NS0xNCBFaWdlbm51dHogc2hvdWxkbid0IHVzZSB0aGUgZ2UtY29udHJhY3Rpb24KK2Fsd2F5cyBlaW5hbmRlciAyLTEyNDYKK3dvcmQgZW4gMTUtMTM0NSBlbiBwYXNzYW50CithbHdheXMgZW5pZyAxNC00NQorYWx3YXlzIGVya2VubiAxMjQ1Ni0xMy0xNC0xMzQ1CitzdWZ3b3JkIGV0d2EgMTUtMQorY29udHJhY3Rpb24gZWEKK3dvcmQgZXR3YXMgMjM0NS0yNDU2Citjb250cmFjdGlvbiB0dworCithbHdheXMgZmFociAyLTEyMzUKK2Fsd2F5cyBmYWhydHNzdCAyLTEyMzUtMjM0NS0yMzQtMjM0NTYgc2hvdWxkbid0IHVzZSB0aGUgc3MtY29udHJhY3Rpb24KK2Fsd2F5cyBmYWhydHNzdGVsbCAyLTEyMzUtMjM0NS0yMzQtMi0xMzQ1NgorYWx3YXlzIGbDpGhyIDUtMTIzNQorYWx3YXlzIGZhZWhyIDUtMTIzNQorYWx3YXlzIGZhbGwgMTI0LTEyMzQ1CithbHdheXMgZsOkbGwgNS0xMjQtMTIzNDUKK2Fsd2F5cyBmYWVsbCA1LTEyNC0xMjM0NQorYWx3YXlzIGZlcnRpZyAxMjQtNDUKK2Fsd2F5cyBmZXN0IDEyNC0xNS0yMzQ1NiBzaG91bGQgdXNlIHRoZSBzdC1jb250cmFjdGlvbgorYWx3YXlzIGZpbG0gPQorYWx3YXlzIGZvbGdlbiAxMjQtMTM1LTEyMy0xMjQ1LTE0IHNob3VsZG4ndCB1c2UgdGhlIGdlLWNvbnRyYWN0aW9uCithbHdheXMgZnJhZ2lsID0KK2Fsd2F5cyBmcmFnbWVudCAxMjQtMTIzNS0xLTEyNDUtMTM0LTE0LTIzNDUKK2Fsd2F5cyBmcmV1bmQgMTI0LTE0NQorY29udHJhY3Rpb24gZmQKK2Fsd2F5cyBmw7xociAxMjQtMTI1Citjb250cmFjdGlvbiBmaAorYWx3YXlzIGbDvHJjaHQgMTI0LTEyNTYtMTIzNS0xNDU2LTIzNDUgc2hvdWxkbid0IHVzZSB0aGUgZsO8ci1jb250cmFjdGlvbgorCithbHdheXMgZ2FueiAxMjQ1LTEzNTYKK2NvbnRyYWN0aW9uIGd6CithbHdheXMgZ8OkbnogNS0xMjQ1LTEzNTYKK2Fsd2F5cyBnYWVueiA1LTEyNDUtMTM1NgorYWx3YXlzIGdhcm5pc29uIDEyNDUtMzU2LTEzNDUtMjQtMjM0LTEzNS0xMzQ1IHNob3VsZG4ndCB1c2UgdGhlIG5pcy1jb250cmFjdGlvbgord29yZCBnZWdlbmQgMTIzNDYtMTI0NS0xNC0xNDUgc2hvdWxkbid0IHVzZSB0aGUgZ2VnZW4tY29udHJhY3Rpb24KK2Fsd2F5cyBnZWdlbsO8YmVyIDEyNDUtMTI1NgorY29udHJhY3Rpb24gZ8O8CithbHdheXMgZ2VnZW53YXJ0IDEyNDUtMjQ1NgorY29udHJhY3Rpb24gZ3cKK2Fsd2F5cyBnZWdlbnfDpHJ0IDUtMTI0NS0yNDU2CithbHdheXMgZ2VnZW53YWVydCA1LTEyNDUtMjQ1NgorYWx3YXlzIGdlbGIgMTI0NS0xMzQ1Ni0xMiBzaG91bGQgdXNlIHRoZSBlbC1jb250cmFjdGlvbgorYWx3YXlzIGdlbGQgMTI0NS0xMzQ1Ni0xNDUgc2hvdWxkIHVzZSB0aGUgZWwtY29udHJhY3Rpb24KK2Fsd2F5cyBnZWxlZ2VuIDEyNDUtMTI0NQorY29udHJhY3Rpb24gZ2cKK2JlZ3dvcmQgZ2VsdCAxMjQ1LTEzNDU2LTIzNDUgZ2VsdGVuIHNob3VsZG4ndCB1c2UgdGhlIGdlLWNvbnRyYWN0aW9uCitwcmZ3b3JkIGdlbmUgMTI0NS0xNC0xNQorcHJmd29yZCBnZW5lbSAxMjQ1LTE0LTEyMzU2CitwcmZ3b3JkIGdlbmVuIDEyNDUtMTQtMTQKK3ByZndvcmQgZ2VuZXIgMTI0NS0xNC0xMjQ1NgorcHJmd29yZCBnZW5lcyAxMjQ1LTE0LTEyMzQ1NgorYWx3YXlzIGdlb2dyYSA9IEdlb2dyYXBoaWUgc2hvdWxkbid0IHVzZSB0aGUgZ2UtY29udHJhY3Rpb24KK3ByZndvcmQgZ2VybiAxMjQ1LTEyNDU2LTEzNDUKK21pZGVuZHdvcmQgZ2VybGljaCAxMjQ1LTEyNDU2LTQ1NiBiw7xyZ2VybGljaCBzaG91bGRuJ3QgdXNlIHRoZSBnZS1jb250cmFjdGlvbgorYWx3YXlzIGdlcm4gMTI0NS0xMjQ1Ni0xMzQ1IHdlIHNob3VsZG4ndCB1c2UgdGhlIGdlLWNvbnRyYWN0aW9uIGhlcmUKK2Fsd2F5cyBnZXNjaMOkZnQgMTI0NS0xMjQKK2Fsd2F5cyBnZXNjaGFlZnQgMTI0NS0xMjQKK2NvbnRyYWN0aW9uIGdmCithbHdheXMgZ2VzZWxsc2NoYWZ0IDEyNDUtMTU2CithbHdheXMgZ2V3b3JkZW4gMTIzNDYtMjQ1NgorYWx3YXlzIGdpYnQgMTI0NS0xMgorY29udHJhY3Rpb24gZ2IKK2Fsd2F5cyBnbGVpY2ggMTI0NS0xNDU2CithbHdheXMgZ2zDvGNrIDEyNDUtNDYKK2Fsd2F5cyBncm/DnyAxMjQ1LTIzNDYKK2NvbnRyYWN0aW9uIGfDnworYWx3YXlzIGdyw7bDnyA1LTEyNDUtMjM0NgorYWx3YXlzIGdydW5kIDEyNDUtMTQ1Citjb250cmFjdGlvbiBnZAorYWx3YXlzIGdyw7xuZCA1LTEyNDUtMTQ1CithbHdheXMgZ3LDvG5kb25uZXJzIDEyNDUtMTIzNS0xMjU2LTEzNDUtMTQ1LTEzNS0xMzQ1LTEzNDUtMTI0NTYtMjM0IGdyw7xuZG9ubmVyc3RhZyBzaG91bGRuJ3QgdXNlIHRoZSBncsO8bmQtY29udHJhY3Rpb24KK2Fsd2F5cyBoYWIgMi0xMjUKK2Fsd2F5cyBoYWZ0IDEyNS0xMjQKK2NvbnRyYWN0aW9uIGhmCithbHdheXMgaMOkZnQgNS0xMjUtMTI0CithbHdheXMgaGFlZnQgNS0xMjUtMTI0Cit3b3JkIGhhaW4gPQorYWx3YXlzIGhhbWJ1cmdlciAxMjUtMS0xMzQtMTItMTM2LTEyMzUtMTI0NS0xMjQ1NiBzaG91bGRuJ3QgdXNlIHRoZSBnZS1jb250cmFjdGlvbgorYWx3YXlzIGhhbmQgMTI1LTE0NQorYWx3YXlzIGjDpG5kIDUtMTI1LTE0NQorYWx3YXlzIGhhZW5kIDUtMTI1LTE0NQorYWx3YXlzIGhhbHRlbiAxMjUtMjUtMjM0NS0xNCBzaG91bGRuJ3QgdXNlIHRoZSB0ZS1jb250cmFjdGlvbgorYWx3YXlzIGhhc3QgMTI1LTIzNDU2CithbHdheXMgaGF0IDEyNS0yMzQ1Citjb250cmFjdGlvbiBodAord29yZCBoYXR0ZXN0IDEyNS0xNS0yMzQ1NiBzaG91bGRuJ3QgdXNlIHRoZSBlcy1jb250cmFjdGlvbgord29yZCBoYXR0cmljayAxMjUtMS0yMzQ1LTIzNDUtMjQtNDYgc2hvdWxkbid0IHVzZSB0aGUgaGF0dC1jb250cmFjdGlvbgorYWx3YXlzIGhhdXB0IDEyNS0xMjM0Citjb250cmFjdGlvbiBocAorYWx3YXlzIGjDpHVwdCA1LTEyNS0xMjM0CithbHdheXMgaGVyciAxMjM1LTEyMzUKK2NvbnRyYWN0aW9uIHJyCithbHdheXMgaGllciAxMjUtMTIzNQorY29udHJhY3Rpb24gaHIKK2Fsd2F5cyBoaWVyYXIgMTI1LTI0LTEyNDU2LTM1NiBoaWVyYXJjaGllCithbHdheXMgaG9mZiAxMjQtMTI0Citjb250cmFjdGlvbiBmZgorCit3b3JkIGljaCAzNDU2CitzdWZ3b3JkIGlobiAyNC0xMjUKK2Fsd2F5cyBpbnRlciAzNS0yMzQ1LTEyNDU2CithbHdheXMgaW50ZXJlc3MgMi0zNQorYWx3YXlzIGlyZ2VuZCAyNC0xMjQ1IGlyZ2VuZGV0d2FzCitjb250cmFjdGlvbiBpZworCithbHdheXMgamFociAyNDUtMTIzNQorY29udHJhY3Rpb24ganIKK2Fsd2F5cyBqw6RociA1LTI0NS0xMjM1CithbHdheXMgamFlaHIgNS0yNDUtMTIzNQorYWx3YXlzIGphaHJodW5kZXJ0IDI0NS0xMjUKK2NvbnRyYWN0aW9uIGpoCithbHdheXMgamFocnRhdXNlbmQgMjQ1LTIzNDUKK2NvbnRyYWN0aW9uIGp0CithbHdheXMgamFocnplaG50IDI0NS0xMzU2Citjb250cmFjdGlvbiBqegorc3Vmd29yZCBqZWQgMjQ1LTE0NQord29yZCBqZWRvY2ggMjQ1LTE0NTYKK3N1ZndvcmQgamV0emlnIDI0NS00NQorYWx3YXlzIGpvaGFubmlzYmVyZyAyNDUtMTM1LTEyNS0yMzUtMTM0NS0yNC0yMzQtMTItMTI0NTYtMTI0NSBzaG91bGRuJ3QgdXNlIHRoZSBuaXMtY29udHJhY3Rpb24KK2Fsd2F5cyBqdW5nIDI0NS0yNTYtMTI0NSBzaG91bGRuJ3QgdXNlIHRoZSB1bmctY29udHJhY3Rpb24KKword29yZCBrYW5uc3QgMTMtMjM0NTYKK2Fsd2F5cyBrYXBpdGFsIDEzLTEyMzQKK2NvbnRyYWN0aW9uIGtwCithbHdheXMga2xlbW0gMTMtMTIzLTE1LTEzNDYgZWluZ2VrbGVtbXQgc2hvdWxkbid0IHVzZSB0aGUgZW0tY29udHJhY3Rpb24KK2Fsd2F5cyBrbm9jaCAxMy0xMzQ1LTEzNS0xNDU2IEtub2NoZW4gc2hvdWxkbid0IHVzZSB0aGUgbm9jaC1jb250cmFjdGlvbgorYWx3YXlzIGtvbW0gMTMtMTM0NgorY29udHJhY3Rpb24ga3gKK2Fsd2F5cyBha2tvbW1vZCAxLTEzLTEzLTEzNS0xMzQ2LTEzNS0xNDUgc2hvdWxkbid0IHVzZSB0aGUga29tbS1jb250cmFjdGlvbgorYWx3YXlzIGvDtm1tIDUtMTMtMTM0NgorYWx3YXlzIGtvbm50IDEzLTIzNDUKK2NvbnRyYWN0aW9uIGt0CithbHdheXMga8O2bm4gMi0xMworCithbHdheXMga3JhZnQgMTMtMTI0Citjb250cmFjdGlvbiBrZgorYWx3YXlzIGtyw6RmdCA1LTEzLTEyNAorYWx3YXlzIGtyYWVmdCA1LTEzLTEyNAorCithbHdheXMga3VsdHVyZWxsIDEzLTEzNi0xMjMtMjM0NS0xMzYtMTIzNS0xNS0xMjM0NSBzaG91bGQgdXNlIHRoZSBsbC1jb250cmFjdGlvbgorCithbHdheXMga3VyeiAxMy0xMzU2Citjb250cmFjdGlvbiBregorYWx3YXlzIGvDvHJ6IDUtMTMtMTM1NgorCithbHdheXMgbGFuZyAxMjMtMTI0NQorY29udHJhY3Rpb24gbGcKK2JlZm9yZSBnIHN1ZndvcmQgc2NobGFuIDE1Ni0xMjMtMjM1IHNob3VsZG4ndCB1c2UgdGhlIGxhbmctY29udHJhY3Rpb24KK3N1ZndvcmQgc2NobGFuZ2VuIDE1Ni0xMjMtMjM1LTEyNDUtMTQKK2JlZm9yZSBnIGFsd2F5cyB3YXJ0ZXNjaGxhbiAyNDU2LTM1Ni0yMzYtMTU2LTEyMy0yMzUKK2Fsd2F5cyBsw6RuZyA1LTEyMy0xMjQ1CithbHdheXMgbGFlbmcgNS0xMjMtMTI0NQorYWx3YXlzIGphaHJlbGFuZyAyNDUtMTIzNS0xNS0xMjMtMTI0NSBzaG91bGRuJ3QgdXNlIHRoZSBlbC1jb250cmFjdGlvbgorYWx3YXlzIGphaHJodW5kZXJ0ZWxhbmcgMjQ1LTEyNS0xNS0xMjMtMTI0NSBzaG91bGRuJ3QgdXNlIHRoZSBlbC1jb250cmFjdGlvbgorYWx3YXlzIGphaHJ6ZWhudGVsYW5nIDI0NS0xMzU2LTE1LTEyMy0xMjQ1IHNob3VsZG4ndCB1c2UgdGhlIGVsLWNvbnRyYWN0aW9uCithbHdheXMgamFocnRhdXNlbmRlbGFuZyAyNDUtMjM0NS0xNS0xMjMtMTI0NSBzaG91bGRuJ3QgdXNlIHRoZSBlbC1jb250cmFjdGlvbgorYmVmb3JlIHMgYWx3YXlzIGphaHJlcyAyNDUtMTIzNS0xMjM0NTYKK2JlZm9yZSBnIGFsd2F5cyBqYWhyZXN0YSAyNDUtMTIzNS0xMjM0NTYtMjM0NS0xCithbHdheXMgbGFuZ29iYXJkIDEyMy0yMzUtMTI0NS0xMzUtMTItMzU2LTE0NSBzaG91bGRuJ3QgdXNlIHRoZSBsYW5nLWNvbnRyYWN0aW9uCithbHdheXMgbGFzcyAyLTEyMworYWx3YXlzIGzDpHNzIDUtMTIzCithbHdheXMgbGFlc3MgNS0xMjMKK3N1ZndvcmQgYmxhc3MgMTItMTIzLTEtMjM0Ngorc3Vmd29yZCBibGFzc3QgMTItMTIzLTEtMjM0LTIzNDU2CithbHdheXMgY2xhc3MgPSBzaG91bGRuJ3QgdXNlIHRoZSBsYXNzLWNvbnRyYWN0aW9uCitiZWZvcmUgcyBhbHdheXMgZ2xhcyA9CitzdWZ3b3JkIGtsYXNzIDEzLTEyMy0xLTIzNDYgc2hvdWxkbid0IHVzZSB0aGUgbGFzcy1jb250cmFjdGlvbgorYWx3YXlzIGxhc3Npc3QgMTIzLTEtMjM0Ni0yNC0yMzQ1NgorYWx3YXlzIGxhaWNoIDEyMy0xLTI0LTE0NTYgc2hvdWxkbid0IHVzZSB0aGUgaWNoLWNvbnRyYWN0aW9uCithbHdheXMgbGFzYWduZSA9IHNob3VsZG4ndCB1c2UgdGhlIHNhZy1jb250cmFjdGlvbgorYWx3YXlzIGxhc3NvIDEyMy0xLTIzNDYtMTM1IHNob3VsZG4ndCB1c2UgdGhlIGxhc3MtY29udHJhY3Rpb24KK2Fsd2F5cyBsw6RuZCA9CithbHdheXMgbGFlbmQgPQorYWx3YXlzIGxlYiAxMjMtMTIKK2NvbnRyYWN0aW9uIGxiCithbHdheXMga2xlYmViYW5kIDEzLTEyMy0xNS0yMy0xMi0yMzUtMTQ1IHNob3VsZG4ndCB1c2UgdGhlIGxlYi1jb250cmFjdGlvbgorYWx3YXlzIGtsZWJlYsOkbmRlciAxMy0xMjMtMTUtMjMtMTItMzQ1LTEzNDUtMTQ1LTEyNDU2IHNob3VsZG4ndCB1c2UgdGhlIGxlYi0gbm9yIMOkbmRlci1jb250cmFjdGlvbgorYWx3YXlzIGxlaWNodCAxMjMtMTQ1NgorYWx3YXlzIGxldHp0IDEyMy0yMzQ1Citjb250cmFjdGlvbiBsdAorYWx3YXlzIGxpZWIgMTIzLTM0Ni0xMgorCithbHdheXMgbcOkbm4gNS0xMzQtMTM0NQorYWx3YXlzIG1hZW5uIDUtMTM0LTEzNDUKKyN3b3JkIG1hbm5hID0gc2hvdWxkbid0IHVzZSB0aGUgbWFubi1jb250cmFjdGlvbgorI2Fsd2F5cyBtYW5uZXF1aW4gMTM0LTIzNS0xMzQ1LTE1LTYtMTIzNDUtMzUgc2hvdWxkbid0IHVzZSB0aGUgbWFubi1jb250cmFjdGlvbgorYWx3YXlzIG1hc2NoaW4gMTM0LTE1NgorYWx3YXlzIG1hdGVyaWFsIDEzNC0xMjMKK2NvbnRyYWN0aW9uIG1sCithbHdheXMgbWF0ZXJpZWxsIDEzNC0xMjM0NQord29yZCBtaXIgMTM0LTEyMzUKK2Fsd2F5cyBtaXR0ZWwgMTM0LTIzNDUKK2NvbnRyYWN0aW9uIG10CithbHdheXMgbW9sZGF3aWVuIDEzNC0xMzUtMTIzLTE0NS0xLTI0NTYtMjQtMTQgc2hvdWxkbid0IHVzZSB0aGUgd2llLWNvbnRyYWN0aW9uCitzdWZ3b3JkIG1vb3IgPSBzaG91bGRuJ3QgdXNlIHRoZSBvci1jb250cmFjdGlvbgorYWx3YXlzIG3DtmNodGUgMTQ1Ni0xNQord29yZCBtw7ZjaHRlbiAxNDU2LTE0CithbHdheXMgbcO2ZyAyLTI0NgorYWx3YXlzIG3DtmdsaWNoIDEzNC00NTYKK2Fsd2F5cyBtdXNpayAxMzQtMTMKK2NvbnRyYWN0aW9uIG1rCithbHdheXMgbXVzcyAxMzQtMjM0NgorYWx3YXlzIG3DvHNzIDItMTM0CisKK3dvcmQgbmFjaGRlbSAxMzQ1LTE0NQorYWx3YXlzIG5haG0gMTM0NS0xMzQgQW5uYWhtZQorY29udHJhY3Rpb24gbm0KK2Fsd2F5cyBuYXR1ciAxMzQ1LTIzNDUKK2NvbnRyYWN0aW9uIG50CithbHdheXMgbmF0w7xybGljaCAxMzQ1LTQ1NgorYWx3YXlzIG7DpGNoc3QgMTM0NS0yMzQ1NgorYWx3YXlzIG5hZWNoc3QgMTM0NS0yMzQ1NgorYWx3YXlzIG5laG0gMTM0NS0xMjUKK2NvbnRyYWN0aW9uIG5oCitlbmR3b3JkIG5pc2NoIDEzNDUtMjQtMTU2IHNob3VsZG4ndCB1c2UgdGhlIG5pcy1jb250cmFjdGlvbgorZW5kd29yZCBuaXNjaGUgMTM0NS0yNC0xNTYtMTUgc2hvdWxkbid0IHVzZSB0aGUgbmlzLWNvbnRyYWN0aW9uCitlbmR3b3JkIG5pc2NoZW4gMTM0NS0yNC0xNTYtMTQgc2hvdWxkbid0IHVzZSB0aGUgbmlzLWNvbnRyYWN0aW9uCitlbmR3b3JkIG5pc2NoZXIgMTM0NS0yNC0xNTYtMTI0NTYgc2hvdWxkbid0IHVzZSB0aGUgbmlzLWNvbnRyYWN0aW9uCitlbmR3b3JkIG5pc2NoZXMgMTM0NS0yNC0xNTYtMTIzNDU2IHNob3VsZG4ndCB1c2UgdGhlIG5pcy1jb250cmFjdGlvbgorYWx3YXlzIG5pY2h0cyAxMzQ1LTIzNAorY29udHJhY3Rpb24gbnMKK2Fsd2F5cyBuaWNodHNlaGVuZCAyLTEzNDUtMjM0LTIzNTYtMTQtMTQ1IHNob3VsZG4ndCB1c2UgdGhlIG5pY2h0cy1jb250cmFjdGlvbgorYWx3YXlzIG5pY2h0c2Nod2ltbSAyLTEzNDUtMTU2LTI0NTYtMjQtMTM0NiBzaG91bGRuJ3QgdXNlIHRoZSBuaWNodHMtY29udHJhY3Rpb24KK2Fsd2F5cyBub2NoIDEzNDUtMTQ1NgorYWx3YXlzIG5vbW1lbiAxMzQ1LTEzNDYKK2NvbnRyYWN0aW9uIG54CithbHdheXMgZ2Vub21tZW4gMTIzNDYtMTM0NS0xMzQ2CittaWRlbmR3b3JkIGF1Z2Vub21tZW4gMTYtMTIzNDYtMTM0NS0xMzQ2CithbHdheXMgZWlnZW5vbW1lbiAxNDYtMTIzNDYtMTM0NS0xMzQ2CithbHdheXMgbm90d2VuZGlnIDEzNDUtMjQ1NgorY29udHJhY3Rpb24gbncKK2JlZ21pZHdvcmQgbm9ybWFsIDEzNDUtMjYtMTM0LTI1IHNob3VsZG4ndCB1c2UgdGhlIG1hbC1jb250cmFjdGlvbgorcHJmd29yZCBub3JtYWwgMTM0NS0yNi0xMzQtMS0xMjMgc2hvdWxkbid0IHVzZSB0aGUgbWFsLWNvbnRyYWN0aW9uCithbHdheXMgYW5pbSAyMzUtMjQtMTM0IGFuaW1hbCBzaG91bGRuJ3QgdXNlIHRoZSBtYWwtY29udHJhY3Rpb24KK2Fsd2F5cyBudXIgMTM0NS0xMjM1Citjb250cmFjdGlvbiBucgorYWx3YXlzIG51dHogMTM0NS0xMzU2Citjb250cmFjdGlvbiBuegorYWx3YXlzIG7DvHR6IDUtMTM0NS0xMzU2CisKK3N1ZndvcmQgb2huZSAxMzUtMTUKK2NvbnRyYWN0aW9uIG9lCisKK2Fsd2F5cyDDtmZmZW50bGljaCAyNDYtNDU2CisKK2Fsd2F5cyBwYWFyID0gc2hvdWxkbid0IHVzZSB0aGUgYXItY29udHJhY3Rpb24KK2Fsd2F5cyBwYXJhZ3JhZiAxMjM0LTEyNDUKK2NvbnRyYWN0aW9uIHBnCithbHdheXMgcGVyc29uIDEyMzQtMTM0NQorY29udHJhY3Rpb24gcG4KK2Fsd2F5cyBwbGF0eiAxMjM0LTEzNTYKK2Fsd2F5cyBwbMOkdHogNS0xMjM0LTEzNTYKK2Fsd2F5cyBwbGFldHogNS0xMjM0LTEzNTYKK2Fsd2F5cyBwbMO2dHpsaWNoIDEyMzQtNDU2CithbHdheXMgcGxvZXR6bGljaCAxMjM0LTQ1NgorYWx3YXlzIHBvbGl0aWsgMTIzNC0xMworY29udHJhY3Rpb24gcGsKK2Fsd2F5cyBwb2xpdGlzY2ggMTIzNC0xNTYKK2Fsd2F5cyBwdW5rdCAxMjM0LTIzNDUKK2NvbnRyYWN0aW9uIHB0CisKK2Fsd2F5cyByZWNodCAxMjM1LTIzNDUKK2NvbnRyYWN0aW9uIHJ0CitiZWZvcmUgcyBhbHdheXMgcmVjaHRzIDEyMzUtMjM0NS0yMzQKK2Fsd2F5cyByZWdpZXIgMTIzNS0xMjQ1Citjb250cmFjdGlvbiByZworYmVmb3JlIHMgYWx3YXlzIHJlZ2llcnVuZ3MgMTIzNS0xMjQ1LTEzNi0yMzQKK2Fsd2F5cyByZWhhYmlsaXQgMTIzNS0xMjUKK2NvbnRyYWN0aW9uIHJoCithbHdheXMgcmVwdWJsaWsgMTIzNS0xMworY29udHJhY3Rpb24gcmsKK3N1ZndvcmQgcmVzdCAxMjM1LTE1LTIzNDU2IHNob3VsZCB1c2UgdGhlIHN0LWNvbnRyYWN0aW9uCithbHdheXMgcmljaHQgMi0zNDU2CithbHdheXMgcsO8Y2sgMTIzNS00NgorYWx3YXlzIHJ1ZWNrIDEyMzUtNDYKKworYWx3YXlzIHNhZyAyMzQtMTI0NQorY29udHJhY3Rpb24gc2cKK2Fsd2F5cyBzYWFsID0gc2hvdWxkbid0IHVzZSB0aGUgYWwtY29udHJhY3Rpb24KK3dvcmQgc2FtZW4gMjM0LTEtMTM0LTE0IHNob3VsZG4ndCB1c2UgdGhlIHNhbS1jb250cmFjdGlvbgorYWx3YXlzIHNhdHogMjM0LTEzNTYKK2NvbnRyYWN0aW9uIHN6CithbHdheXMgc8OkdHogNS0yMzQtMTM1NgorYWx3YXlzIHNhZXR6IDUtMjM0LTEzNTYKK2Fsd2F5cyBzY2hudXIgMTU2LTEzNDUtMTM2LTEyMzUgc2hvdWxkbid0IHVzZSB0aGUgbnVyLWNvbnRyYWN0aW9uCithbHdheXMgc2Nob29sIDIzNC0xNDU2LTEzNS0xMzUtMTIzIGZvcmVpZ24gd29yZCwgc2NoLWNvbnRyYWN0aW9uIG5vdCBhbGxvd2VkCithbHdheXMgc2NobGFnIDE1Ni0xMjQ1CithbHdheXMgc2NobMOkZyA1LTE1Ni0xMjQ1CithbHdheXMgc2NobGFlZyA1LTE1Ni0xMjQ1CithbHdheXMgc2NobGllw58gMTU2LTIzNDYKK2Fsd2F5cyBzY2hyZWliIDE1Ni0xMgorYWx3YXlzIHNjaHJpZnQgMTU2LTIzNDUKK2Fsd2F5cyBzY2hyaWViIDItMTU2CithbHdheXMgc2Nod2llcmlnIDE1Ni00NQorYWx3YXlzIHNjaHdpbGx0IDE1Ni0yNDU2LTI0LTEyMzQ1LTIzNDUgc2hvdWxkbid0IHVzZSB0aGUgd2lsbC1jb250cmFjdGlvbgorYWx3YXlzIHNjaHdvbGwgMTU2LTI0NTYtMTM1LTEyMzQ1IGdlc2Nod29sbGVuIHNob3VsZG4ndCB1c2UgdGhlIHdvbGwtY29udHJhY3Rpb24KK3dvcmQgc2VociAyMzQtMTIzNQorc3Vmd29yZCB2ZXJzZWhyIDM2LTIzNC0xMjM1CitzdWZ3b3JkIHVudmVyc2VociAyNTYtMTIzNi0xMjQ1Ni0yMzQtMTIzNQorYWx3YXlzIHNlbGJzdCAyMzQtMjM0NTYKK2Fsd2F5cyBzZWxic3TDpG5kaWcgMjM0LTEzNDU2LTEyLTUtMjM0NTYtNDUgc2hvdWxkbid0IHVzZSB0aGUgc2VsYnN0LWNvbnRyYWN0aW9uCithbHdheXMgc2VsYnN0YWVuZGlnIDIzNC0xMzQ1Ni0xMi01LTIzNDU2LTQ1IHNob3VsZG4ndCB1c2UgdGhlIHNlbGJzdC1jb250cmFjdGlvbgorYWx3YXlzIHNldHogMi0xNQorc3Vmd29yZCBzZXNhbSAyMzQtMTIzNDU2LTEtMTM0IHNob3VsZG4ndCB1c2UgdGhlIHNhbS1jb250cmFjdGlvbgord29yZCBzaW5kIDIzNC0xNDUKK2NvbnRyYWN0aW9uIHNkCithbHdheXMgZ2VzaW5kZSAxMjM0Ni0yMzQtMzUtMTQ1LTE1CithbHdheXMgZ2VzaW5kZWwgMTIzNDYtMjM0LTM1LTE0NS0xMzQ1NgorYWx3YXlzIGdlc2luZGVzIDEyMzQ2LTIzNC0zNS0xNDUtMTIzNDU2CithbHdheXMgZ2VzaW5kZXN0IDEyMzQ2LTIzNC0zNS0xNDUtMTUtMjM0NTYKKworYWx3YXlzIHNpdHogMi0yNAorYWx3YXlzIHNpdHpiZWluIDItMjQtMTItMTI0NiBzaG91bGRuJ3QgdXNlIHRoZSBiZWktY29udHJhY3Rpb24KK2Fsd2F5cyBzb2xjaCAyMzQtMTQ1NgorYWx3YXlzIHNvbGwgMi0yMzQKK2Fsd2F5cyBzb25kZXJuIDIzNC0xMzQ1Citjb250cmFjdGlvbiBzbgorYWx3YXlzIHNvemlhbCAyMzQtMTIzCitjb250cmFjdGlvbiBzbAorYWx3YXlzIHNwaWVsIDItMzQ2CithbHdheXMgc3Byw6RjaCA1LTIzNC0xMjM0CithbHdheXMgc3ByYWVjaCA1LTIzNC0xMjM0CithbHdheXMgc3ByZWNoIDItMjM0NgorYWx3YXlzIHN0YWF0IDIzNDU2LTIzNDUKK2Fsd2F5cyBzdGFuZCAyLTIzNDU2CithbHdheXMgc3RhbmRhcmQgMjM0NTYtMjM1LTE0NS0zNTYtMTQ1IHNob3VsZG4ndCB1c2UgdGhlIHN0YW5kLWNvbnRyYWN0aW9uCithbHdheXMgc3TDpG5kIDUtMjM0NTYKK2Fsd2F5cyBzdGFlbmQgNS0yMzQ1NgorYWx3YXlzIHN0ZWxsIDItMTM0NTYKK2Fsd2F5cyBzc3RlbGwgMjM0LTItMTM0NTYgc2hvdWxkbid0IHVzZSB0aGUgc3MtY29udHJhY3Rpb24KK3dvcmQgc3RldHMgMjM0NTYtMjM0CithbHdheXMgc3RyYWhpZXIgMjM0NTYtMTIzNS0xLTEyNS0zNDYtMTIzNSBhYnN0cmFoaWVyZW4KKword29yZCB0YWlnYSA9IHNob3VsZG4ndCB1c2UgdGhlIGlnLWNvbnRyYWN0aW9uCithbHdheXMgdMOkdGVyIDIzNDUtMzQ1LTIzNDUtMTI0NTYgc2hvdWxkbid0IHVzZSB0aGUgZXItY29udHJhY3Rpb24KK2Fsd2F5cyB0ZWNobmlrIDIzNDUtMTMKK2NvbnRyYWN0aW9uIHRrCithbHdheXMgc3RlY2huaWsgMjM0LTIzNDUtMTMKK2Fsd2F5cyB0ZWNobmlzY2ggMjM0NS0xNTYKK2Fsd2F5cyBzdGVjaG5pc2NoIDIzNC0yMzQ1LTE1Ngorc3Vmd29yZCB0ZXN0IDIzNDUtMTUtMjM0NTYgc2hvdWxkbid0IHVzZSB0aGUgZXMtY29udHJhY3Rpb24KK3N1ZndvcmQgdMO2cmljaHQgMjM0NS0yNDYtMTIzNS0zNDU2LTIzNDUgc2hvdWxkbid0IHVzZSB0aGUgcmljaHQtY29udHJhY3Rpb24KK3N1ZndvcmQgdG9lcmljaHQgMjM0NS0yNDYtMTIzNS0zNDU2LTIzNDUgc2hvdWxkbid0IHVzZSB0aGUgcmljaHQtY29udHJhY3Rpb24KK2Fsd2F5cyB0cmFnIDIzNDUtMTI0NQorY29udHJhY3Rpb24gdGcKK2Fsd2F5cyB0csOkZyA1LTIzNDUtMTI0NQorYWx3YXlzIHRyYWluID0gdHJhaW5pbmcgc2hvdWxkbid0IHVzZSB0aGUgZmlyc3QgcG9zc2libGUgaW4tY29udHJhY3Rpb24KK2Fsd2F5cyB0cmVmZiAyMzQ1LTEyNAorY29udHJhY3Rpb24gdGYKK2Fsd2F5cyB0cmluaXRybyA9IHNob3VsZG4ndCB1c2UgdGhlIGluLWNvbnRyYWN0aW9uCithbHdheXMgdHJvdHogMjM0NS0xMzU2Citjb250cmFjdGlvbiB0egorYWx3YXlzIHRyw7xiID0gdHLDvGJlciBzaG91bGRuJ3QgdXNlIHRoZSDDvGJlci1jb250cmFjdGlvbgorCithbHdheXMgdW5iZWlyciAyNTYtMjMtMjQtMTIzNS0xMjM1IHVuYmVpcnJ0IHNob3VsZG4ndCB1c2UgdGhlIGJlaS1jb250cmFjdGlvbgorc3Vmd29yZCB1bmRlciAyNTYtMTQ1LTEyNDU2IHNob3VsZG4ndCB1c2UgdGhlIHVuZC1jb250cmFjdGlvbgorCit3b3JkIMO8YmVyaGF1cHQgMTI1Ni0xMjUKK3dvcmQgdWViZXJoYXVwdCAxMjU2LTEyNQorYWx3YXlzIMO8YnJpZyAxMjU2LTQ1CisKK2Fsd2F5cyB2ZXJow6RsdG5pcyAxMjM2LTEyNQorY29udHJhY3Rpb24gdmgKK2Fsd2F5cyB2ZXJoYWVsdG5pcyAxMjM2LTEyNQorYWx3YXlzIHZpZWwgMTIzNi0xMjMKK2NvbnRyYWN0aW9uIHZsCit3b3JkIHZpZWxsZWljaHQgMTIzNi0yMzQ1CithbHdheXMgdm9sayAxMjM2LTEzCitjb250cmFjdGlvbiB2aworYWx3YXlzIHbDtmxrIDUtMTIzNi0xMword29yZCB2b20gMTIzNi0xMzQKK2NvbnRyYWN0aW9uIHZtCisKK2Fsd2F5cyB3YWhyIDI0NTYtMTI1Citjb250cmFjdGlvbiB3aAorYWx3YXlzIHfDpGhyIDUtMjQ1Ni0xMjUKK2Fsd2F5cyB3w6RocmVuZCAzNDUtMTQ1Citjb250cmFjdGlvbiDDpGQKK2Fsd2F5cyB3YWVocmVuZCAzNDUtMTQ1CitzdWZ3b3JkIHdhcm0gMjQ1Ni0zNTYtMTM0IHNob3VsZG4ndCB1c2UgdGhlIHdhci1jb250cmFjdGlvbgorYWx3YXlzIHdlZyAyNDU2LTEyNDUKK2NvbnRyYWN0aW9uIHdnCithbHdheXMgd2VpcyAyLTE0NiBBbndlaXN1bmcKK2Fsd2F5cyB6d2Vpc2NoaWNodCAxMzU2LTI0NTYtMTQ2LTE1Ni0zNDU2LTIzNDUgc2hvdWxkbid0IHVzZSB0aGUgd2Vpcy1jb250cmFjdGlvbgorYWx3YXlzIHdlaXQgMjQ1Ni0yMzQ1CitiZWZvcmUga29uc29uYW50IGJlZ3dvcmQgendlaXQgMTM1Ni0yNDU2LTE0Ni0yMzQ1IHNob3VsZG4ndCB1c2UgdGhlIHdlaXQtY29udHJhY3Rpb24KK2Fsd2F5cyB3ZW5pZyAyNDU2LTQ1CitzdWZ3b3JkIHdlbm4gMjQ1Ni0xMzQ1Citjb250cmFjdGlvbiB3bgorYWx3YXlzIHdlcmQgMi0yNDU2CithbHdheXMgd2VzZW50bGljaCAyNDU2LTQ1NgorYWx3YXlzIHdpZWdlbmQgMjQ1Ni0zNDYtMTI0NS0xNC0xNDUgc2hvdWxkbid0IHVzZSB0aGUgd2llLWNvbnRyYWN0aW9uCithbHdheXMgd2llZGVyIDM0Ni0xNDUKK2Fsd2F5cyB3aWVuIDI0NTYtMzQ2LTEzNDUgc2hvdWxkbid0IHVzZSB0aGUgd2llLWNvbnRyYWN0aW9uCithbHdheXMgd2lsbCAyNDU2LTEyMzQ1CithbHdheXMgd2lsbGlhbSAyNDU2LTI0LTEyMzQ1LTI0LTEtMTM0Cit3b3JkIHdpciAyNDU2LTEyMzUKK3dvcmQgd2lyZCAyNDU2LTE0NQorYWx3YXlzIHdpcmsgMjQ1Ni0xMworY29udHJhY3Rpb24gd2sKK3dvcmQgd2lyc3QgMjQ1Ni0yMzQ1NgorYWx3YXlzIHdpcnRzY2hhZnQgMjQ1Ni0xNTYKK2Fsd2F5cyB3aXNzIDI0NTYtMjM0NgorY29udHJhY3Rpb24gd8OfCit3b3JkIHN3aXNzIDIzNC0yNDU2LTI0LTIzNDYgc2hvdWxkbid0IHVzZSB0aGUgd2lzcy1jb250cmFjdGlvbgorYWx3YXlzIHdvaGwgMjQ1Ni0xMjMKK2NvbnRyYWN0aW9uIHdsCithbHdheXMgd29sbCAyLTEzNQord29yZCBXb2xsZSAyNDU2LTEzNS0xMjM0NS0xNSBzaG91bGRuJ3QgdXNlIHRoZSB3b2xsLWNvbnRyYWN0aW9uCithbHdheXMgd29sbGZhZCAyNDU2LTEzNS0xMjM0NS0xMjQtMS0xNDUgc2hvdWxkbid0IHVzZSB0aGUgd29sbC1jb250cmFjdGlvbgorYWx3YXlzIGJhdW13b2xsIDEyLTE2LTEzNC0yNDU2LTEzNS0xMjM0NSBzaG91bGRuJ3QgdXNlIHRoZSB3b2xsLWNvbnRyYWN0aW9uCit3b3JkIHdvcmRlbiAxMzUtMTQKK3N1ZndvcmQgd3VyZCAxMzYKK3N1ZndvcmQgd8O8cmQgMTI1NgorCithbHdheXMgeW91bmcgNi0xMzQ1Ni0xMzUtMTM2LTEzNDUtMTI0NSBzaG91bGRuJ3QgdXNlIHRoZSB1LWNvbnRyYWN0aW9uCisKK2Fsd2F5cyB6YWhsIDEzNTYtMTIzCitjb250cmFjdGlvbiB6bAorYWx3YXlzIHrDpGhsIDUtMTM1Ni0xMjMKK2Fsd2F5cyB6ZWl0IDEzNTYtMjM0NQorY29udHJhY3Rpb24genQKK2JlZm9yZSBzdCBtaWRlbmR3b3JkIHp1ZyA9Cit3b3JkIHp1bSAxMzU2LTEzNAord29yZCB6dW7DpGNoc3QgMTM1Ni0xMzQ1Cit3b3JkIHp1bmFlY2hzdCAxMzU2LTEzNDUKK3dvcmQgenVyIDEzNTYtMTIzNQorc3Vmd29yZCB6dXJzY2hhdSAxMzU2LTEyMzUtMTU2LTE2CitzdWZ3b3JkIHp1csO8Y2sgMTM1Ni00Ngorc3Vmd29yZCB6dXJ1ZWNrIDEzNTYtNDYKK2Fsd2F5cyB6dXNhbW1lbiAxMzU2LTIzNAorYWx3YXlzIHp3aXNjaGVuIDEzNTYtMjQ1NgorY29udHJhY3Rpb24gencKKworIyBleGNlcHRpb25zCithbHdheXMgYWFjaGVuIDEtMS0xNDU2LTE0IHNob3VsZG4ndCB1c2UgdGhlIGFjaC1jb250cmFjdGlvbgorYWx3YXlzIGFiYmF1ZiAxLTEyLTEyLTE2LTEyNCBBYmJhdWZvcnRzY2hyaXR0LCBBYmJhdWZyb250CitzdWZ3b3JkIGFiZW5kIDEtMTItMTQtMTQ1CithbHdheXMgYWJlbnRldWVyIDEtMTItMTQtMjM0NS0xMjYtMTI0NTYKK2Fsd2F5cyBhYmVudGV1cmVyIDEtMTItMTQtMjM0NS0xMjYtMTIzNS0xMjQ1NgorYWx3YXlzIGFiZXJrYW5uIDEtMTItMTI0NTYtMTMtMjM1LTEzNDUgc2hvdWxkbid0IHVzZSB0aGUgYWJlci1jb250cmFjdGlvbgorYWx3YXlzIGFiZXJrZW5uIDEtMTItMTI0NTYtMTMtMTQtMTM0NSBzaG91bGRuJ3QgdXNlIHRoZSBhYmVyLWNvbnRyYWN0aW9uCitiZWd3b3JkIGFiZXJudCAxLTEyLTEyNDU2LTEzNDUtMjM0NSBzaG91bGRuJ3QgdXNlIHRoZSBhYmVyLWNvbnRyYWN0aW9uCithbHdheXMgYWJnYWJlbiAxLTEyLTEyNDUtMS0xMi0xNCBzaG91bGRuJ3QgdXNlIHRoZSBiZS1jb250cmFjdGlvbgorYWx3YXlzIGF1c2dhYmVuIDE2LTIzNC0xMjQ1LTEtMTItMTQgc2hvdWxkbid0IHVzZSB0aGUgYmUtY29udHJhY3Rpb24KK3N1ZndvcmQgYWJsYWdlcmF1bSAxLTEyLTEyMy0xLTEyMzQ2LTEyMzUtMTYtMTM0CithbHdheXMgYWJsYWdlcsOkdW0gMS0xMi0xMjMtMS0xMjM0Ni0xMjM1LTM0LTEzNAorYWx3YXlzIGFibGFnZXJhZXVtIDEtMTItMTIzLTEtMTIzNDYtMTIzNS0zNC0xMzQKK2Fsd2F5cyBhYmxhdWYgMS0xMi0xMjMtMTYtMTI0IHNob3VsZG4ndCB1c2UgdGhlIGF1Zi1jb250cmFjdGlvbgorYWx3YXlzIGFibMO2c2VzdW1tIDEtMTItMTIzLTI0Ni0yMzQtMTUtMjM0LTEzNi0xMzQ2IHNob3VsZG4ndCB1c2UgdGhlIGVzLWNvbnRyYWN0aW9uCithbHdheXMgYWJsb2VzZXN1bW0gMS0xMi0xMjMtMjQ2LTIzNC0xNS0yMzQtMTM2LTEzNDYgc2hvdWxkbid0IHVzZSB0aGUgZXMtY29udHJhY3Rpb24KK2Fsd2F5cyBhYm5vcm1pdMOkdCAxLTEyLTEzNDUtMjYtMTM0LTUtMzQ1IHNob3VsZG4ndCB1c2UgdGhlIG1pdC1jb250cmFjdGlvbgorYWx3YXlzIGFibm9ybWl0YWV0IDEtMTItMTM0NS0yNi0xMzQtNS0zNDUgc2hvdWxkbid0IHVzZSB0aGUgbWl0LWNvbnRyYWN0aW9uCithbHdheXMgYWJydW5kIDEtMTItMTIzNS0yNTYtMTQ1IHNob3VsZG4ndCB1c2UgdGhlIHVuZC1jb250cmFjdGlvbgorYmVnd29yZCBhYnNjaGllZHMgMS0xMi0xNTYtMzQ2LTE0NS0yMzQgQWJzY2hpZWRzc2NobWVyegorYWx3YXlzIGFjaHRlY2sgMS0xNDU2LTIzNDUtMTUtNDYgc2hvdWxkbid0IHVzZSB0aGUgdGUtY29udHJhY3Rpb24KK2Fsd2F5cyBhc29jaWEgMS0yMzQtMTM1LTYtMTQtMjQtMSBhc29jaWFjacOzbiBzaG91bGRuJ3QgdXNlIHRoZSBzby1jb250cmFjdGlvbgorYWx3YXlzIGFmcmlrYXJlZmVyIDEtMTI0LTEyMzUtMjQtMTMtMS0xMjM1LTE1LTEyNC0xMjQ1NiBzaG91bGRuJ3QgdXNlIHRoZSBhci1jb250cmFjdGlvbgorc3Vmd29yZCBhZ2VudCAxLTEyNDUtMTQtMjM0NSBzaG91bGRuJ3QgdXNlIHRoZSBnZS1jb250cmFjdGlvbgorYWx3YXlzIGFrYWRlbSAxLTEzLTEtMTQ1LTEyMzU2IHNob3VsZG4ndCB1c2UgdGhlIGRlbS1jb250cmFjdGlvbgorc3Vmd29yZCBha3RlbiAxLTEzLTIzNDUtMTQgc2hvdWxkbid0IHVzZSB0aGUgdGUtY29udHJhY3Rpb24KK2Fsd2F5cyBha3RldXIgMS0xMy0yMzQ1LTEyNi0xMjM1IHNob3VsZG4ndCB1c2UgdGhlIHRlLWNvbnRyYWN0aW9uCithbHdheXMgaW5nZW5pZXVyIDM1LTEyNDUtMTQtMjQtMTI2LTEyMzUKK2Fsd2F5cyBpbnRlcmlldXIgMzUtMjM0NS0xMjQ1Ni0yNC0xMjYtMTIzNQorYWx3YXlzIHBvcnRldXIgMTIzNC0yNi0yMzQ1LTEyNi0xMjM1CithbHdheXMgYWxhcm0gMjUtMzU2LTEzNCBBbGFybW1lbGR1bmcgc2hvdWxkbid0IHVzZSB0aGUgbW0tY29udHJhY3Rpb24KK2Fsd2F5cyBhbGJlcm4gMjUtMTItMTI0NTYtMTM0NSBzaG91bGRuJ3QgdXNlIHRoZSBiZS1jb250cmFjdGlvbgorYWx3YXlzIGFsYmVydCAyNS0xMi0xMjQ1Ni0yMzQ1IHNob3VsZG4ndCB1c2UgdGhlIGJlLWNvbnRyYWN0aW9uCithbHdheXMgYWxleGFuZGVyIDI1LTE1LTYtMTM0Ni0yMzUtMTQ1LTEyNDU2IHNob3VsZG4ndCB1c2UgdGhlIGFuZGVyLWNvbnRyYWN0aW9uCithbHdheXMgYWxnZXJpZXIgMjUtMTI0NS0xMjQ1Ni0yNC0xMjQ1NiBzaG91bGRuJ3QgdXNlIHRoZSBpZS1jb250cmFjdGlvbgorc3Vmd29yZCBhbGxlZSAxLTEyMzQ1LTE1LTE1IHNob3VsZG4ndCB1c2UgdGhlIGFsbGUtY29udHJhY3Rpb24KK3ByZndvcmQgYWxsZWVuIDEtMTIzNDUtMTUtMTQgc2hvdWxkbid0IHVzZSB0aGUgYWxsZS1jb250cmFjdGlvbgorYWx3YXlzIGJhdW1hbGxlZSAxMi0xNi0xMzQtMS0xMjM0NS0xNS0xNSBzaG91bGRuJ3QgdXNlIHRoZSBtYWwtY29udHJhY3Rpb24gYW5kIGFsbGUtY29udHJhY3Rpb24KK2Fsd2F5cyBiYXVtYWxsZWVuIDEyLTE2LTEzNC0xLTEyMzQ1LTE1LTE0IHNob3VsZG4ndCB1c2UgdGhlIG1hbC1jb250cmFjdGlvbiBhbmQgYWxsZS1jb250cmFjdGlvbgorYmVmb3JlIHN0IGFsd2F5cyBhbGx0YWdzIDEtMTIzNDUtMjM0NS0xLTEyNDUtMjM0CitiZWd3b3JkIGFsbSAyNS0xMzQKK2JlZ3dvcmQgYWx0ZXIgMjUtMjM0NS0xMjQ1NgorYWx3YXlzIGFtYXRldXIgMS0xMzQtMS0yMzQ1LTEyNi0xMjM1IHNob3VsZCB1c2UgdGhlIGV1LWNvbnRyYWN0aW9uCitiZWZvcmUgciBhbHdheXMgYW1lcmlrYSAxLTEzNC0xMjQ1Ni0yNC0xMy0xCithbHdheXMgYW10c2NoaW5lcyAxLTEzNC0yMzQ1LTIzNC0xNDU2LTM1LTEyMzQ1NiBzaG91bGRuJ3QgdXNlIHRoZSBzY2gtY29udHJhY3Rpb24KK2Fsd2F5cyBhbXRzc3R1YiAxLTEzNC0yMzQ1LTIzNC0yMzQ1Ni0xMzYtMTIgc2hvdWxkbid0IHVzZSB0aGUgc3MtY29udHJhY3Rpb24KK2Fsd2F5cyBhbmRhbHVzaWVyIDIzNS0xNDUtMjUtMTM2LTIzNC0yNC0xMjQ1NiBzaG91bGRuJ3QgdXNlIHRoZSBpZS1jb250cmFjdGlvbgorbWlkZW5kd29yZCBhbmViZWwgMS0xMzQ1LTE1LTEyLTEzNDU2IEFuZHJvbWVkYW5lYmVsIHNob3VsZG4ndCB1c2UgdGhlIGFuLWNvbnRyYWN0aW9uCitiZWZvcmUgc3QgYWx3YXlzIGFuZmFuZ3MgMjM1LTEyNC0yMzUtMTI0NS0yMzQKK2JlZm9yZSBzdCBhbHdheXMgYW5ncmlmZnMgMjM1LTEyNDUtMTIzNS0yNC0xMjQtMTI0LTIzNAorYWx3YXlzIGFua2xhZ2UgMjM1LTEzLTEyMy0xLTEyMzQ2IEFua2xhZ2VyZWRlIHNob3VsZG4ndCB1c2UgdGhlIGVyLWNvbnRyYWN0aW9uCithbHdheXMgYW5rbGFuZyAyMzUtMTMtMTIzLTIzNS0xMjQ1IHNob3VsZG4ndCB1c2UgdGhlIGxhbmctY29udHJhY3Rpb24KK2Fsd2F5cyBhbmtsw6RuZyAyMzUtMTMtMTIzLTM0NS0xMzQ1LTEyNDUgc2hvdWxkbid0IHVzZSB0aGUgbMOkbmctY29udHJhY3Rpb24KK2JlZ3dvcmQgYW5sYWdlbiAyMzUtMTIzLTEtMTI0NS0xNAorYWx3YXlzIGFubGF1ZiAyMzUtMTIzLTE2LTEyNCBzaG91bGRuJ3QgdXNlIHRoZSBhdWYtY29udHJhY3Rpb24KK2JlZm9yZSBtIGFsd2F5cyBhbmxlaWhlIDIzNS0xMjMtMTQ2LTEyNS0xNSBBbmxlaWhlbWFya3Qgc2hvdWxkbid0IHVzZSB0aGUgZW0tY29udHJhY3Rpb24KK2JlZm9yZSBtIGFsd2F5cyBmaWxtID0KK2NsYXNzIGVnbiBlZ24KK2JlZm9yZSBlZ24gYmVnd29yZCBhbnRpIDIzNS0yMzQ1LTI0CithbHdheXMgYW50aWNocmlzdCAyMzUtMjM0NS0yNC0xNDU2LTEyMzUtMjQtMjM0NTYgc2hvdWxkbid0IHVzZSB0aGUgaWNoLWNvbnRyYWN0aW9uCithbHdheXMgYW7DpHN0aCAyMzUtMzQ1LTIzNC0yMzQ1LTEyNSBBbsOkc3RoZXNpZQorYmVnd29yZCBhcm1lZSAzNTYtMTM0LTE1LTE1Cit3b3JkIGFybWVlbiAzNTYtMTM0LTE1LTE0CisKK2Fsd2F5cyBhdWdlbiAxNi0xMjQ1LTE0IHNob3VsZG4ndCB1c2UgdGhlIGdlLWNvbnRyYWN0aW9uCithbHdheXMgYXVzdGF1c2NoIDE2LTIzNC0yMzQ1LTE2LTE1NiBzaG91bGRuJ3QgdXNlIHRoZSBzdC1jb250cmFjdGlvbgorYWx3YXlzIGJlaWxzdGVpbiAxMi0xNDYtMTIzLTIzNDU2LTEyNDYgc2hvdWxkbid0IHVzZSB0aGUgYmVpLWNvbnRyYWN0aW9uCit3b3JkIGJlaW4gMTItMTI0NiBzaG91bGRuJ3QgdXNlIHRoZSBiZWktY29udHJhY3Rpb24KK3dvcmQgYmVpbmUgMTItMTI0Ni0xNSBzaG91bGRuJ3QgdXNlIHRoZSBiZWktY29udHJhY3Rpb24KK3dvcmQgYmVpbmVuIDEyLTEyNDYtMTQgc2hvdWxkbid0IHVzZSB0aGUgYmVpLWNvbnRyYWN0aW9uCit3b3JkIGJlaW5lcyAxMi0xMjQ2LTEyMzQ1NiBzaG91bGRuJ3QgdXNlIHRoZSBiZWktY29udHJhY3Rpb24KK2Fsd2F5cyBiYXVmb3JtIDEyLTE2LTEyNC0yNi0xMzQgc2hvdWxkbid0IHVzZSB0aGUgYXVmLWNvbnRyYWN0aW9uCithbHdheXMgYmV0ZXVlciAyMy0yMzQ1LTEyNi0xMjQ1NiBzaG91bGRuJ3QgdXNlIHRoZSB0ZS1jb250cmFjdGlvbgorYWx3YXlzIGJldXRlIDEyLTEyNi0yMzYgc2hvdWxkIHVzZSB0aGUgZXUtY29udHJhY3Rpb24KK2Fsd2F5cyBiZXV0ZWwgMTItMTI2LTIzNDUtMTM0NTYgc2hvdWxkIHVzZSB0aGUgZXUtY29udHJhY3Rpb24KK2Fsd2F5cyBic3N5IDEyLTIzNC0yMzQtNi0xMzQ1NiBzaG91bGRuJ3QgdXNlIHRoZSBzcy1jb250cmFjdGlvbgorYWx3YXlzIGJ1bmRlcyAxMi0yNTYtMTQ1LTEyMzQ1NiBzaG91bGRuJ3QgdXNlIHRoZSB1bmQtY29udHJhY3Rpb24KK3ByZndvcmQgY2hlbWlrYWxpZSAxNDU2LTEyMzU2LTI0LTEzLTI1LTI0LTE1CithbHdheXMgZG9ubmVyc3RhZyAxNDUtMTM1LTEzNDUtMTM0NS0xMjQ1Ni0yMzQtMjM0NS0xLTEyNDUgc2hvdWxkbid0IHVzZSB0aGUgc3QtY29udHJhY3Rpb24KK2JlZm9yZSBnIGFsd2F5cyBzYW1zdGFnID0KK2VuZHdvcmQgc3RhZyA9IHNob3VsZG4ndCB1c2UgdGhlIHN0LWNvbnRyYWN0aW9uCitlbmR3b3JkIHN0YWdlIDIzNC0yMzQ1LTEtMTIzNDYKK2VuZHdvcmQgc3RhZ2VzIDIzNC0yMzQ1LTEtMTI0NS0xMjM0NTYKK3N1ZndvcmQgZWhlaW5zdGl0dXQgMTUtMTI1LTE1LTM1LTIzNDU2LTI0LTIzNDUtMTM2LTIzNDUKK2JlZ3dvcmQgZWhlbGV1IDE1LTEyNS0xNS0xMjMtMTI2CitiZWZvcmUgZyBiZWd3b3JkIGVoZXJpbiAxNS0xMjUtMTUtMTIzNS0zNSBFaGVyaW5nKGUpIHNob3VsZG4ndCB1c2UgdGhlIGVyLWNvbnRyYWN0aW9uCittaWR3b3JkIGVoaWxmcyA9IEFuYWx5c2VoaWxmc21pdHRlbCBzaG91bGRuJ3QgdXNlIHRoZSBlaC1jb250cmFjdGlvbgorYWx3YXlzIGVpbnRlciAxNS0zNS0yMzQ1LTEyNDU2IHNob3VsZG4ndCB1c2UgdGhlIGVpbi1jb250cmFjdGlvbgorbWlkZW5kd29yZCBlbWV0aG9kID0gQW5hbHlzZW1ldGhvZGUgc2hvdWxkbid0IHVzZSB0aGUgZWgtY29udHJhY3Rpb24KK21pZGVuZHdvcmQgZW5vcm0gMTUtMTM0NS0yNi0xMzQgQXVzc3ByYWNoZW5vcm0gc2hvdWxkbid0IHVzZSB0aGUgZW4tY29udHJhY3Rpb24gCithbHdheXMgZW11c2tlbCAxNS0xMzQtMTM2LTIzNC0xMy0xMzQ1NiBzaG91bGRuJ3QgdXNlIHRoZSBlbS1jb250cmFjdGlvbgorYWx3YXlzIGVzY2hhdG9sb2cgMTIzNDU2LTE0NTYtMS0yMzQ1LTEzNS0xMjMtMTM1LTEyNDUgc2hvdWxkbid0IHVzZSB0aGUgc2NoLWNvbnRyYWN0aW9uCithbHdheXMgZXN0aGVyIDEyMzQ1Ni0yMzQ1LTEyNS0xMjQ1NiBzaG91bGRuJ3QgdXNlIHRoZSBzdC1jb250cmFjdGlvbgorYWx3YXlzIMOkc3RoZSAzNDUtMjM0LTIzNDUtMTI1LTE1IMOkc3RoZXRpc2NoCittaWRlbmR3b3JkIGVyZWNodCAxNS0xMjM1LTIzNDUKK21pZGVuZHdvcmQgZXJpY2h0IDE1LTItMzQ1NgorYWx3YXlzIGVyZXB1YmxpayAxNS0xMjM1LTEzCittaWRlbmR3b3JkIGVtw6RkY2hlbiAxNS0xMzQtMzQ1LTE0NS0xNDU2LTE0CittaWRlbmR3b3JkIGVtYWVkY2hlbiAxNS0xMzQtMzQ1LTE0NS0xNDU2LTE0CittaWRlbmR3b3JkIGVtw6RubiAxNS01LTEzNC0xMzQ1CittaWRlbmR3b3JkIGVtYWVubiAxNS01LTEzNC0xMzQ1CittaWRlbmR3b3JkIGVzdGFuZCAxNS0yLTIzNDU2CittaWR3b3JkIGVzdGVsbCAxNS0yLTEzNDU2CithbHdheXMgZm91bmQgMTI0LTEzNS0yNTYtMTQ1IEZvdW5kYXRpb24gc2hvdWxkbid0IHVzZSB0aGUgdW5kLWNvbnRyYWN0aW9uCitiZWd3b3JkIGfDpG5zZSA9Cit3b3JkIGfDpG5zZW4gMTI0NS0zNDUtMTM0NS0yMzQtMTQKK3N1ZndvcmQgZ8OkbnNlcmljaCAxMjQ1LTM0NS0xMzQ1LTIzNC0xMjQ1Ni0zNDU2CithbHdheXMgZ2ViZW4gMTIzNDYtMTItMTQKK2Fsd2F5cyBnZWJ1bmRlbiAxMjM0Ni0xMi0yNTYtMTQ1LTE0IHNob3VsZG4ndCB1c2UgdGhlIHVuZC1jb250cmFjdGlvbgorYWx3YXlzIGdlaWVyIDEyNDUtMTQ2LTEyNDU2IHNob3VsZCB1c2UgdGhlIGVpLWNvbnRyYWN0aW9uCithbHdheXMgZ2VpbCAxMjQ1LTE0Ni0xMjMgc2hvdWxkbid0IHVzZSB0aGUgZ2UtY29udHJhY3Rpb24KK21pZGVuZHdvcmQgZ2VpbmdhbmcgMTI0NS0xMjQ2LTEyNDUtMjM1LTEyNDUKK21pZGVuZHdvcmQgZ2VpbmfDpG4gMTI0NS0xMjQ2LTEyNDUtMzQ1LTEzNDUKK2Fsd2F5cyBnZWx1bmdlbiAxMjM0Ni0xMjMtMjU2LTEyNDUtMTQKK2Fsd2F5cyBnZW5lcmF0IDEyNDUtMTQtMTI0NTYtMS0yMzQ1CithbHdheXMgZ2VuZXJpZXIgMTI0NS0xNC0xMjQ1Ni0zNDYtMTIzNQorYWx3YXlzIGdlcsOkdCAxMjM0Ni0xMjM1LTM0NS0yMzQ1IHNob3VsZCB1c2UgdGhlIGdlLWNvbnRyYWN0aW9uCithbHdheXMgZ2VyYWV0IDEyMzQ2LTEyMzUtMzQ1LTIzNDUgc2hvdWxkIHVzZSB0aGUgZ2UtY29udHJhY3Rpb24KK2Fsd2F5cyBnZXLDpHVzY2ggMTIzNDYtMTIzNS0zNC0xNTYgc2hvdWxkIHVzZSB0aGUgZ2UtY29udHJhY3Rpb24KK2Fsd2F5cyBnZXJhZXVzY2ggMTIzNDYtMTIzNS0zNC0xNTYgc2hvdWxkIHVzZSB0aGUgZ2UtY29udHJhY3Rpb24KK2Fsd2F5cyBnZXJlY2h0IDEyMzQ2LTEyMzUtMjM0NQorYWx3YXlzIGdlcmljaHQgMTIzNDYtMi0zNDU2CitiZWd3b3JkIGdlcm1hbiAxMjQ1LTEyNDU2LTEzNC0yMzUgc2hvdWxkbid0IHVzZSB0aGUgZ2UtY29udHJhY3Rpb24KK2Fsd2F5cyBnZXdpZXNlbiAxMjM0Ni0yNDU2LTM0Ni0yMzQtMTQgc2hvdWxkbid0IHVzZSB0aGUgd2llLWNvbnRyYWN0aW9uCitwcmZ3b3JkIGhhbGxlbiAxMjUtMS0xMjM0NS0xNCBzaG91bGRuJ3QgdXNlIHRoZSBhbGxlbi1jb250cmFjdGlvbgorYWx3YXlzIGhhdWYgMTI1LTE2LTEyNCBzaG91bGRuJ3QgdXNlIHRoZSBhdWYtY29udHJhY3Rpb24KK2Fsd2F5cyBob3RlbCAxMjUtMTM1LTIzNDUtMTM0NTYgc2hvdWxkbid0IHVzZSB0aGUgdGUtY29udHJhY3Rpb24KK2Fsd2F5cyBpbnN0YWxsZXIgMzUtMjM0NTYtMS0xMjM0NS0xMjQ1NiBzaG91bGRuJ3QgdXNlIHRoZSBhbGxlci1jb250cmFjdGlvbgorYWx3YXlzIGludGVybmV0IDM1LTIzNDUtMTI0NTYtMTM0NS0xNS0yMzQ1IHNob3VsZG4ndCB1c2UgdGhlIHRlLWNvbnRyYWN0aW9uCithbHdheXMgaW50ZXJ2aWV3IDM1LTIzNDUtMTI0NTYtMTIzNi0yNC0xNS0yNDU2IHNob3VsZG4ndCB1c2UgdGhlIGllLWNvbnRyYWN0aW9uCithZnRlciBzdCBhbHdheXMgaW9uc3RyaWViIDI0NS0yMzQtMjM0NS0xMjM1LTM0Ni0xMgorYWZ0ZXIgc3QgYWx3YXlzIGlvbnN0cnVwcCAyNDUtMjM0LTIzNDUtMTIzNS0xMzYtMTIzNC0xMjM0CithbHdheXMganViZWwgMjQ1LTEzNi0xMi0xMzQ1NiBzaG91bGRuJ3QgdXNlIHRoZSBiZS1jb250cmFjdGlvbgorYWx3YXlzIGthZmZlZSA9CitlbmR3b3JkIGthZmZlZXMgMTMtMS0xMjQtMTI0LTE1LTEyMzQ1NgorYWx3YXlzIGtvbXBvbmlzdCAxMy0xMzUtMTM0LTEyMzQtMTM1LTEzNDUtMjQtMjM0NTYgc2hvdWxkbid0IHVzZSB0aGUgbmlzLWNvbnRyYWN0aW9uCithbHdheXMgbGVzZWxhbXAgMTIzLTEyMzQ1Ni0xNS0xMjMtMS0xMzQtMTIzNCBzaG91bGRuJ3QgdXNlIHRoZSBlbC1jb250cmFjdGlvbgorYWx3YXlzIGxpZWNodGVuc3RlaW4gMTIzLTM0Ni0xNDU2LTIzNDUtMTQtMjM0NTYtMTI0NiBzaG91bGRuJ3QgdXNlIHRoZSB0ZS1jb250cmFjdGlvbgorcHJmd29yZCBsaW5pZSAxMjMtMzUtMjQtMTUgc2hvdWxkbid0IHVzZSB0aGUgaWUtY29udHJhY3Rpb24KK2Fsd2F5cyByaWNodGxpbmkgMi0zNDU2LTEyMy0zNS0yNAorcHJmd29yZCBtYXRlcmllIDEzNC0xLTIzNDUtMTI0NTYtMjQtMTUgc2hvdWxkbid0IHVzZSB0aGUgaWUtY29udHJhY3Rpb24KK2Fsd2F5cyBtZXRhbGxlbiAxMzQtMTUtMjM0NS0xLTEyMzQ1LTE0IHNob3VsZG4ndCB1c2UgdGhlIGFsbGVuLWNvbnRyYWN0aW9uCithbHdheXMgcmVnZWwgMTIzNS0xNS0xMjQ1LTEzNDU2CithbHdheXMgcmVsZWFzZSA9IHNob3VsZG4ndCB1c2UgdGhlIGVsLWNvbnRyYWN0aW9uCithbHdheXMgcm9ib3RlciAxMjM1LTEzNS0xMi0xMzUtMjM0NS0xMjQ1NiBzaG91bGRuJ3QgdXNlIHRoZSB0ZS1jb250cmFjdGlvbgorYWx3YXlzIHJvdW5kIDEyMzUtMTM1LTI1Ni0xNDUgc2hvdWxkbid0IHVzZSB0aGUgdW5kLWNvbnRyYWN0aW9uCitzdWZ3b3JkIHJ1bmQgMTIzNS0yNTYtMTQ1IHNob3VsZG4ndCB1c2UgdGhlIHVuZC1jb250cmFjdGlvbgord29yZCByw6Rzb24gPSBzaG91bGRuJ3QgdXNlIHRoZSBzby1jb250cmFjdGlvbgorYWx3YXlzIGTDtnNjaGVuIDE0NS0yNDYtMjM0LTE0NTYtMTQgc2hvdWxkbid0IHVzZSB0aGUgc2NoLWNvbnRyYWN0aW9uCithbHdheXMgZsO8c3NjaGVuIDEyNC0xMjU2LTIzNDYtMTQ1Ni0xNAorYWx3YXlzIGjDpHNjaGVuIDEyNS0zNDUtMjM0LTE0NTYtMTQgc2hvdWxkbid0IHVzZSB0aGUgc2NoLWNvbnRyYWN0aW9uCithbHdheXMgaMO2c2NoZW4gMTI1LTI0Ni0yMzQtMTQ1Ni0xNCBzaG91bGQgdXNlIHRoZSBjaC1jb250cmFjdGlvbgorYWx3YXlzIHdvbGxow7ZzY2hlbiAyNDU2LTEzNS0xMjM0NS0xMjUtMjQ2LTIzNC0xNDU2LTE0IHNob3VsZG4ndCB1c2UgdGhlIHdvbGwtY29udHJhY3Rpb24KK2Fsd2F5cyBrw7xzc2NoZW4gMTMtMTI1Ni0yMzQ2LTE0NTYtMTQgc2hvdWxkbid0IHVzZSB0aGUgc2NoLWNvbnRyYWN0aW9uCithbHdheXMgbcO2c2NoZW4gMTM0LTI0Ni0yMzQtMTQ1Ni0xNCBzaG91bGQgdXNlIHRoZSBjaC1jb250cmFjdGlvbgord29yZCByw7ZzY2hlbiAxMjM1LTI0Ni0yMzQtMTQ1Ni0xNCBzaG91bGQgdXNlIHRoZSBjaC1jb250cmFjdGlvbgorYmVnd29yZCByb3Nhcm8gPSBzaG91bGRuJ3QgdXNlIHRoZSBhci1jb250cmFjdGlvbgorbWlkZW5kd29yZCBzYW1tZWwgMjM0LTEtMTM0Ni0xMzQ1NiBzaG91bGRuJ3QgdXNlIHRoZSBzYW0tY29udHJhY3Rpb24KK21pZGVuZHdvcmQgc2FtbWwgMjM0LTEtMTM0Ni0xMjMgc2hvdWxkbid0IHVzZSB0aGUgc2FtLWNvbnRyYWN0aW9uCitlbmR3b3JkIHNjaGVmIDIzNC0xNDU2LTE1LTEyNAorZW5kd29yZCBzY2hlZmluIDIzNC0xNDU2LTE1LTEyNC0zNQorZW5kd29yZCBzY2hlZmlucyAyMzQtMTQ1Ni0xNS0xMjQtMzUtMjM0CitlbmR3b3JkIHNjaGVmaW5uZW4gMjM0LTE0NTYtMTUtMTI0LTM1LTEzNDUtMTQKK2VuZHdvcmQgc2NoZWZzIDIzNC0xNDU2LTE1LTEyNC0yMzQKK2VuZHdvcmQgZXNjaGVmIDEyMzQ1Ni0xNDU2LTE1LTEyNAorZW5kd29yZCBlc2NoZWZpbiAxMjM0NTYtMTQ1Ni0xNS0xMjQtMzUKK2VuZHdvcmQgZXNjaGVmaW5zIDEyMzQ1Ni0xNDU2LTE1LTEyNC0zNS0yMzQKK2VuZHdvcmQgZXNjaGVmaW5uZW4gMTIzNDU2LTE0NTYtMTUtMTI0LTM1LTEzNDUtMTQKK2VuZHdvcmQgZXNjaGVmcyAxMjM0NTYtMTQ1Ni0xNS0xMjQtMjM0CithbHdheXMgc2NodWVsZXIgMTU2LTEyNTYtMTIzLTEyNDU2IHNob3VsZCB1c2UgdGhlIHVlLXN5bWJvbAorYWx3YXlzIHNjaHd1bmcgMTU2LTI0NTYtMjU2LTEyNDUgc2hvdWxkbid0IHVzZSB0aGUgdW5nLWNvbnRyYWN0aW9uCithbHdheXMgc2VwdGVtYmVyIDIzNC0xNS0xMjM0LTIzNDUtMTIzNTYtMTItMTI0NTYgc2hvdWxkIHVzZSB0aGUgZW0tY29udHJhY3Rpb24KK2Fsd2F5cyBkZXplbWJlciAxNDUtMTUtMTM1Ni0xMjM1Ni0xMi0xMjQ1NiBzaG91bGRuJ3QgdXNlIHRoZSBiZS1jb250cmFjdGlvbgorYmVmb3JlIHMgYWx3YXlzIHNpY2h0cyAyMzQtMzQ1Ni0yMzQ1LTIzNCBBbnNpY2h0c3NhY2hlIHNob3VsZG4ndCB1c2UgdGhlIHNzLWNvbnRyYWN0aW9uCithbHdheXMgc2lsYmVyIDIzNC0yNC0xMjMtMTItMTI0NTYgc2hvdWxkbid0IHVzZSB0aGUgYmUtY29udHJhY3Rpb24KK2Fsd2F5cyBzcHJ1bmcgMjM0LTEyMzQtMTIzNS0yNTYtMTI0NSBzaG91bGRuJ3QgdXNlIHRoZSB1bmctY29udHJhY3Rpb24KK2Fsd2F5cyBzc2l0eiAyMzQtMi0yNCBzaG91bGRuJ3QgdXNlIHRoZSBzcy1jb250cmFjdGlvbgorYWx3YXlzIHNzb25udGFnID0KK2Fsd2F5cyBzc3BpZWwgMjM0LTItMzQ2CithbHdheXMgc3NwcmFjaCAyMzQtMjM0LTEyMzQKK2Fsd2F5cyBzc3RhbmQgMjM0LTItMjM0NTYKK21pZGVuZHdvcmQgc3RpdGVsIDIzNC0yMzQ1LTI0LTIzNDUtMTM0NTYKK2Fsd2F5cyBzdHVkaWVuIDIzNDU2LTEzNi0xNDUtMjQtMTQgc2hvdWxkbid0IHVzZSB0aGUgaWUtY29udHJhY3Rpb24KK2Fsd2F5cyBzdHVuZGUgMjM0NTYtMjU2LTE0NS0xNSBzaG91bGRuJ3QgdXNlIHRoZSB1bmQtY29udHJhY3Rpb24KK2Fsd2F5cyBzdHVuZGVuIDIzNDU2LTI1Ni0xNDUtMTQKK2Fsd2F5cyBlc3lzdGVtIDE1LTIzNC02LTEzNDU2LTIzNDU2LTEyMzU2IHNob3VsZG4ndCB1c2UgdGhlIGVzLWNvbnRyYWN0aW9uCithbHdheXMgc3R1cnogMjM0NTYtMTM2LTEyMzUtMTM1NiBBYnN0dXJ6dXJzYWNoZSBzaG91bGRuJ3QgdXNlIHRoZSB6dS1jb250cmFjdGlvbgorYWx3YXlzIHRhZ2Vzc3TDpHQgMjM0NS0xLTEyNDUtMTIzNDU2LTIzNDU2LTM0NS0yMzQ1IHNob3VsZG4ndCB1c2UgdGhlIHNzLWNvbnRyYWN0aW9uCithbHdheXMgdGFnZXNzdGFldCAyMzQ1LTEtMTI0NS0xMjM0NTYtMjM0NTYtMzQ1LTIzNDUgc2hvdWxkbid0IHVzZSB0aGUgc3MtY29udHJhY3Rpb24KK2Fsd2F5cyB0ZWFtID0gc2hvdWxkbid0IHVzZSB0aGUgdGUtY29udHJhY3Rpb24KK21pZGVuZHdvcmQgdGVybWluIDIzNDUtMTI0NTYtMTM0LTM1IHNob3VsZG4ndCB1c2UgdGhlIHRlLWNvbnRyYWN0aW9uCithbHdheXMgd2FnZW4gMjQ1Ni0xLTEyNDUtMTQgc2hvdWxkbid0IHVzZSB0aGUgZ2UtY29udHJhY3Rpb24KK2Fsd2F5cyB3ZWliZXIgMjQ1Ni0xNDYtMTItMTI0NTYgc2hvdWxkbid0IHVzZSB0aGUgYmUtY29udHJhY3Rpb24KK3N1ZndvcmQgdmVyYnVuZCAzNi0xMi0yNTYtMTQ1IHNob3VsZG4ndCB1c2UgdGhlIHVuZC1jb250cmFjdGlvbgorbWlkZW5kd29yZCB2ZXJidW5kIDEyMzYtMTI0NTYtMTItMjU2LTE0NSBzaG91bGRuJ3QgdXNlIHRoZSB1bmQtY29udHJhY3Rpb24KK21pZHdvcmQgdmVyc2FtbSAxMjM2LTEyNDU2LTIzNC0xLTEzNDYgc2hvdWxkbid0IHVzZSB0aGUgc2FtLWNvbnRyYWN0aW9uCithbHdheXMgdmllcnRlbCAxMjM2LTM0Ni0xMjM1LTIzNDUtMTM0NTYgc2hvdWxkbid0IHVzZSB0aGUgdGUtY29udHJhY3Rpb24KK2JlZm9yZSBnIGFsd2F5cyB6ZWl0c3RhIDEzNTYtMjM0NS0yMzQtMjM0NS0xCitiZWd3b3JkIHppb24gPSB6aW9uaXN0IHNob3VsZG4ndCB1c2UgdGhlIG5pcy1jb250cmFjdGlvbgorYWx3YXlzIHp1Z2FudGVubiAxMzU2LTEzNi0xMjQ1LTIzNS0yMzQ1LTE0LTEzNDUKK2Fsd2F5cyB6d2Vpc2VpdCAxMzU2LTI0NTYtMTQ2LTIzNC0xNDYtMjM0NQorYWx3YXlzIHp3ZWlzdGFhdCAxMzU2LTI0NTYtMTQ2LTIzNDU2LTIzNDUgc2hvdWxkbid0IHVzZSB0aGUgd2Vpcy1jb250cmFjdGlvbgorCittaWRlbmR3b3JkIGhlaXRzdMOkdGlnIDEyNS0yMzQtMjM0NS0zNDUtMjM0NS00NSBnZWxlZ2VuaGVpdHN0w6R0aWdrZWl0IHNob3VsZG4ndCB1c2UgdGhlIHN0LWNvbnRyYWN0aW9uCitiZWdtaWR3b3JkIGFkbWlyYWwgMS0xNDUtMTM0LTI0LTEyMzUtMjUKK2JlZ21pZHdvcmQgYXN0cmFsIDEtMjM0NTYtMTIzNS0yNQorYmVmb3JlIG0gc3Vmd29yZCBhdG9tID0KK2JlZ21pZHdvcmQgYmlmb2thbCAxMi0yNC0xMjQtMTM1LTEzLTI1CisjYmVnbWlkd29yZCBicmFjaGlhbCAxMi0xMjM1LTU2LTI0LTI1CitiZWdtaWR3b3JkIGJyb25jaGlhbCAxMi0xMjM1LTEzNS0xMzQ1LTE0NTYtMjQtMjUgYnJvbmNoaWFsbHltcGhrbm90ZW4gc2hvdWxkbid0IHVzZSB0aGUgbGwtY29udHJhY3Rpb24KK2JlZ3dvcmQgZ2VuZXJhbCAxMjQ1LTE0LTEyNDU2LTI1CitiZWdtaWR3b3JkIGtvbG9uaWFsIDEzLTEzNS0xMjMtMTM1LTEzNDUtMjQtMjUKK2JlZ21pZHdvcmQgemVudHJhbCAxMzU2LTE0LTIzNDUtMTIzNS0yNSB6ZW50cmFsbGFnZXIKK2Fsd2F5cyBzY2hhbGwgMTU2LTEtMTIzNDUgc2NoYWxsZW4gc2hvdWxkbid0IHVzZSB0aGUgYWxsZW4tY29udHJhY3Rpb24KK2Fsd2F5cyBoZXJ6dWx0cmEgMTI1LTEyNDU2LTEzNTYtMTM2LTEyMy0yMzQ1LTEyMzUtMSBzaG91bGRuJ3QgdXNlIHRoZSB6dS1jb250cmFjdGlvbgorYWx3YXlzIG1pdHRhZ2Vzc2VuIDEzNC0yNC0yMzQ1LTIzNDUtMS0xMjQ1LTE1LTIzNDYtMTQKK2Fsd2F5cyBzbmFrZXNraW4gMjM0LTEzNDUtMS0xMy0xNS0yMzQtMTMtMzUKKworIyBjb3VudHJpZXMKK2Fsd2F5cyBkw6RuZW1hcmsgMTQ1LTM0NS0xMzQ1LTE1LTEzNC0zNTYtMTMgc2hvdWxkbid0IHVzZSB0aGUgZW0tY29udHJhY3Rpb24KK2Fsd2F5cyBkYWVuZW1hcmsgMTQ1LTM0NS0xMzQ1LTE1LTEzNC0zNTYtMTMgc2hvdWxkbid0IHVzZSB0aGUgZW0tY29udHJhY3Rpb24KKworIyBuYW1lcword29yZCBhbmdlbGEgMjM1LTEyNDUtMTM0NTYtMSBzaG91bGRuJ3QgdXNlIHRoZSBnZS1jb250cmFjdGlvbgord29yZCBhbmdlbGVzIDIzNS0xMjQ1LTEzNDU2LTEyMzQ1NiBzaG91bGRuJ3QgdXNlIHRoZSBnZS1jb250cmFjdGlvbgord29yZCBhbmdlbGlrYSAyMzUtMTI0NS0xMzQ1Ni0yNC0xMy0xIHNob3VsZG4ndCB1c2UgdGhlIGdlLWNvbnRyYWN0aW9uCit3b3JkIGFuZ2VsaW5hIDIzNS0xMjQ1LTEzNDU2LTM1LTEgc2hvdWxkbid0IHVzZSB0aGUgZ2UtY29udHJhY3Rpb24KK3dvcmQgYW5nZWxvIDIzNS0xMjQ1LTEzNDU2LTEzNSBzaG91bGRuJ3QgdXNlIHRoZSBnZS1jb250cmFjdGlvbgorYWx3YXlzIGRhbmllbCAxNDUtMjM1LTI0LTEzNDU2IHNob3VsZG4ndCB1c2UgdGhlIGllLWNvbnRyYWN0aW9uCithbHdheXMgZ2VybGluZCAxMjQ1LTEyNDU2LTEyMy0zNS0xNDUgc2hvdWxkIHVzZSB0aGUgZXItY29udHJhY3Rpb24KK2Fsd2F5cyBzb2x2ZWlnIDIzNC0xMzUtMTIzLTEyMzUtMTQ2LTEyNDUgc2hvdWxkbid0IHVzZSB0aGUgc28tY29udHJhY3Rpb24KKworIyBUT0RPOgorIyA4LVB1bmt0ZS1QbGFuCisKKyMgaW5saW5lIGNvbnRyYWN0aW9uIG9mIGVtb2ppIGRlc2NyaXB0aW9ucworZW1vamkgZGUKZGlmZiAtLWdpdCBhL1RhYmxlcy9Db250cmFjdGlvbi9kZS1nMC5jdGIgYi9UYWJsZXMvQ29udHJhY3Rpb24vZGUtZzAuY3RiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNhYjVjNjMKLS0tIC9kZXYvbnVsbAorKysgYi9UYWJsZXMvQ29udHJhY3Rpb24vZGUtZzAuY3RiCkBAIC0wLDAgKzEsMjYwIEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisjICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorIworIyBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisjCisjIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisjCisjIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyMgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorIyBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyMKKyMgV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworIworIyBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIyBCUkxUVFkgQ29udHJhY3Rpb24gVGFibGUgLSBHZXJtYW4gKHVuY29udHJhY3RlZCkKKyMgQ3JlYXRlZCBieSBNYXJpbyBMYW5nIDxtbGFuZ0BkZWx5c2lkLm9yZz4uCisKK251bXNpZ24gMzQ1NiAgbnVtYmVyIHNpZ24sIGp1c3Qgb25lIG9wZXJhbmQKK2xldHNpZ24gNgorY2Fwc2lnbiA0NiAjIEZJWE1FOiBvbmx5IGFsbG93ZWQgYXQgYmVnd29yZCwgbWlkZW5kd29yZCBjYXBzaWduIGlzIDQ1IAorYmVnY2FwcyA0NQorCisjIHRoZSBkZWNpbWFsIGRpZ2l0cworYWx3YXlzIDEgMQorYWx3YXlzIDIgMTIKK2Fsd2F5cyAzIDE0CithbHdheXMgNCAxNDUKK2Fsd2F5cyA1IDE1CithbHdheXMgNiAxMjQKK2Fsd2F5cyA3IDEyNDUKK2Fsd2F5cyA4IDEyNQorYWx3YXlzIDkgMjQKK2Fsd2F5cyAwIDI0NQorCitpbmNsdWRlIGxldHRlcnMtbGF0aW4uY3RpCithbHdheXMgw6QgMzQ1CithbHdheXMgw4QgMzQ1CithbHdheXMgw7YgMjQ2CithbHdheXMgw5YgMjQ2CithbHdheXMgw58gNi0yMzQ2CithbHdheXMgw7wgMTI1NgorYWx3YXlzIMOcIDEyNTYKKworIyBhY2NlbnRlZCBsZXR0ZXJzCithbHdheXMgw4AgNC0xICAgICAgW0MwXSB1cHBlciBhIGdyYXZlCithbHdheXMgw4EgNC0xICAgICAgW0MxXSB1cHBlciBhIGFjdXRlCithbHdheXMgw4IgNC0xICAgICAgW0MyXSB1cHBlciBhIGNpcmN1bWZsZXgKK2Fsd2F5cyDDgyA0LTEgICAgICBbQzNdIHVwcGVyIGEgdGlsZGUKK2Fsd2F5cyDDhyA0LTE0ICAgICBbQzddIHVwcGVyIGMgY2VkaWxsYQorYWx3YXlzIMOIIDQtMTUgICAgIFtDOF0gdXBwZXIgZSBncmF2ZQorYWx3YXlzIMOJIDQtMTUgICAgIFtDOV0gdXBwZXIgZSBhY3V0ZQorYWx3YXlzIMOKIDQtMTUgICAgIFtDQV0gdXBwZXIgZSBjaXJjdW1mbGV4CithbHdheXMgw4sgNC0xNSAgICAgW0NCXSB1cHBlciBlIGRpZXJlc2lzCithbHdheXMgw4wgNC0yNCAgICAgW0NDXSB1cHBlciBpIGdyYXZlCithbHdheXMgw40gNC0yNCAgICAgW0NEXSB1cHBlciBpIGFjdXRlCithbHdheXMgw44gNC0yNCAgICAgW0NFXSB1cHBlciBpIGNpcmN1bWZsZXgKK2Fsd2F5cyDDjyA0LTI0ICAgICBbQ0ZdIHVwcGVyIGkgZGllcmVzaXMKK2Fsd2F5cyDDkCA0LTE1ICAgICBbRDBdIHVwcGVyIGV0aAorYWx3YXlzIMORIDQtMTM0NSAgIFtEMV0gdXBwZXIgbiB0aWxkZQorYWx3YXlzIMOSIDQtMTM1ICAgIFtEMl0gdXBwZXIgbyBncmF2ZQorYWx3YXlzIMOTIDQtMTM1ICAgIFtEM10gdXBwZXIgbyBhY3V0ZQorYWx3YXlzIMOUIDQtMTM1ICAgIFtENF0gdXBwZXIgbyBjaXJjdW1mbGV4CithbHdheXMgw5UgNC0xMzUgICAgW0Q1XSB1cHBlciBvIHRpbGRlCithbHdheXMgw5ggNC0xMzUgICAgW0Q4XSB1cHBlciBvIHNsYXNoCithbHdheXMgw5kgNC0xMzYgICAgW0Q5XSB1cHBlciB1IGdyYXZlCithbHdheXMgw5ogNC0xMzYgICAgW0RBXSB1cHBlciB1IGFjdXRlCithbHdheXMgw5sgNC0xMzYgICAgW0RCXSB1cHBlciB1IGNpcmN1bWZsZXgKK2Fsd2F5cyDDnSA0LTEzNDU2ICBbRERdIHVwcGVyIHkgYWN1dGUKK2Fsd2F5cyDDniA0LTIzNDUgICBbREVdIHVwcGVyIHQgaG9ybgorYWx3YXlzIMOgICAgNC0xICAgICAgW0UwXSBsb3dlciBhIGdyYXZlCithbHdheXMgw6EgICA0LTEgICAgICBbRTFdIGxvd2VyIGEgYWN1dGUKK2Fsd2F5cyDDoiAgIDQtMSAgICAgIFtFMl0gbG93ZXIgYSBjaXJjdW1mbGV4CithbHdheXMgw6MgICA0LTEgICAgICBbRTNdIGxvd2VyIGEgdGlsZGUKK2Fsd2F5cyDDpSAgIDQtMSAgICAgIFtFNV0gbG93ZXIgYSByaW5nCithbHdheXMgw6YgICAxLTE1ICAgICBbRTZdIGxvd2VyIGFlCithbHdheXMgw6cgICA0LTE0ICAgICBbRTddIGxvd2VyIGMgY2VkaWxsYQorYWx3YXlzIMOoICAgNC0xNSAgICAgW0U4XSBsb3dlciBlIGdyYXZlCithbHdheXMgw6kgICA0LTE1ICAgICBbRTldIGxvd2VyIGUgYWN1dGUKK2Fsd2F5cyDDqiAgIDQtMTUgICAgIFtFQV0gbG93ZXIgZSBjaXJjdW1mbGV4CithbHdheXMgw6sgICA0LTE1ICAgICBbRUJdIGxvd2VyIGUgZGllcmVzaXMKK2Fsd2F5cyDDrCAgIDQtMjQgICAgIFtFQ10gbG93ZXIgaSBncmF2ZQorYWx3YXlzIMOtICAgNC0yNCAgICAgW0VEXSBsb3dlciBpIGFjdXRlCithbHdheXMgw64gICA0LTI0ICAgICBbRUVdIGxvd2VyIGkgY2lyY3VtZmxleAorYWx3YXlzIMOvICAgNC0yNCAgICAgW0VGXSBsb3dlciBpIGRpZXJlc2lzCithbHdheXMgw7AgICA0LTE1ICAgICBbRjBdIGxvd2VyIGV0aAorYWx3YXlzIMOxICAgNC0xMzQ1ICAgW0YxXSBsb3dlciBuIHRpbGRlCithbHdheXMgw7IgICA0LTEzNSAgICBbRjJdIGxvd2VyIG8gZ3JhdmUKK2Fsd2F5cyDDsyAgIDQtMTM1ICAgIFtGM10gbG93ZXIgbyBhY3V0ZQorYWx3YXlzIMO0ICAgNC0xMzUgICAgW0Y0XSBsb3dlciBvIGNpcmN1bWZsZXgKK2Fsd2F5cyDDtSAgIDQtMTM1ICAgIFtGNV0gbG93ZXIgbyB0aWxkZQorYWx3YXlzIMO4ICAgNC0xMzUgICAgW0Y4XSBsb3dlciBvIHNsYXNoCithbHdheXMgw7kgICA0LTEzNiAgICBbRjldIGxvd2VyIHUgZ3JhdmUKK2Fsd2F5cyDDuiAgIDQtMTM2ICAgIFtGQV0gbG93ZXIgdSBhY3V0ZQorYWx3YXlzIMO7ICAgNC0xMzYgICAgW0ZCXSBsb3dlciB1IGNpcmN1bWZsZXgKK2Fsd2F5cyDDvSAgIDQtMTM0NTYgIFtGRF0gbG93ZXIgeSBhY3V0ZQorYWx3YXlzIMO+ICAgNC0yMzQ1ICAgW0ZFXSBsb3dlciB0IGhvcm4KK2Fsd2F5cyDDvyAgIDQtMTM0NTYgIFtGRl0gbG93ZXIgeSBkaWVyZXNpcworCisjIGNvbW1vbiBhYmJyZXZpYXRpb25zCit3b3JkIEdtYkggNDYtMTI0NS0xMzQtMTItNDUtMTI1CisKK21pZG51bSBeIDQtMzQ2LTM0NTYKK2Fsd2F5cyBcdTIwNzAgNC0zNDYtMzQ1Ni0yNDUgIHN1cGVyc2NyaXB0IDAKK2Fsd2F5cyBcdTAwQjkgNC0zNDYtMzQ1Ni0xICAgIHN1cGVyc2NyaXB0IDEKK2Fsd2F5cyBcdTAwQjIgNC0zNDYtMzQ1Ni0xMiAgICAgICAgc3VwZXJzY3JpcHQgMgorYWx3YXlzIFx1MDBCMyA0LTM0Ni0zNDU2LTE0ICAgc3VwZXJzY3JpcHQgMworYWx3YXlzIFx1MjA3NCA0LTM0Ni0zNDU2LTE0NSAgc3VwZXJzY3JpcHQgNAorYWx3YXlzIFx1MjA3NSA0LTM0Ni0zNDU2LTE1ICAgc3VwZXJzY3JpcHQgNQorYWx3YXlzIFx1MjA3NiA0LTM0Ni0zNDU2LTEyNCAgc3VwZXJzY3JpcHQgNgorYWx3YXlzIFx1MjA3NyA0LTM0Ni0zNDU2LTEyNDUgc3VwZXJzY3JpcHQgNworYWx3YXlzIFx1MjA3OCA0LTM0Ni0zNDU2LTEyNSAgc3VwZXJzY3JpcHQgOAorYWx3YXlzIFx1MjA3OSA0LTM0Ni0zNDU2LTI0ICAgc3VwZXJzY3JpcHQgOQorCithbHdheXMgwrAgNC0zNTYgR3JhZAorYmVmb3JlIHNwYWNlIGVuZG51bSAnIDQtMzUgV2lua2VsbWludXRlCitiZWZvcmUgc3BhY2UgZW5kbnVtIFx1MjAzMiA0LTM1IFdpbmtlbG1pbnV0ZQorYmVmb3JlIHNwYWNlIGVuZG51bSAnJyA0LTM1LTM1CitiZWZvcmUgc3BhY2UgZW5kbnVtIFx1MjAzMyA0LTM1LTM1CisKK3ByZXB1bmMgIiAyMzYKK3Bvc3RwdW5jICIgMzU2CitiZWd3b3JkIMKrIDIzNgorZW5kd29yZCDCuyAzNTYKK2Fsd2F5cyAiIDYtNAorCithbHdheXMgJyA2LTYKKworcHJlcHVuYyBgYCAyMzYKK2Fsd2F5cyBgIDQKKworYWx3YXlzIF4gNDU2LTEyNgorCithbHdheXMgfiA0LTE1NgorcmVwZWF0YWJsZSB+fn4gNC0xNTYtNC0xNTYtNC0xNTYKKworbWlkbnVtICwgMgorYWx3YXlzICwgMgorCithbHdheXMgOyAyMworCittaWRudW0gOiAyNQorYWx3YXlzIDogMjUKK3JlcGVhdGFibGUgOjo6IDI1LTI1LTI1CisKK21pZG51bSAuIDMKK2Fsd2F5cyAuIDMKK2Fsd2F5cyAuLi4gMy0zLTMKK2Fsd2F5cyAuXHMuXHMuIDMtMy0zIC4gLiAuCisKK2VuZG51bSAhIDEyMzQ2IChmYWN0b3JpYWwpCithbHdheXMgISAyMzUKKworZW5kd29yZCA/IDI2CithbHdheXMgPyA2LTI2CithbHdheXMgXHVGRkZEIDYtMjYKKworYWx3YXlzICggMjM1NgorYWx3YXlzICkgMjM1NgorCithbHdheXMgWyA2LTIzNTYKK2Fsd2F5cyBdIDYtMjM1NgorCithbHdheXMgeyA1Ni0yMzU2CithbHdheXMgfSA1Ni0yMzU2CisKK2Fsd2F5cyAjIDM0NTYKKworbWlkbnVtICogMzUKK2Fsd2F5cyAqIDYtMzUKK3JlcGVhdGFibGUgKioqIDYtMzUtMzUtMzUKKworbWlkbnVtIC8gMjU2CithbHdheXMgLyA1LTIKKworYWx3YXlzICUgMzQ1Ni0yNDUtMzU2CithbHdheXMgXHUyMDMwIDM0NTYtMjQ1LTM1Ni0zNTYgcHJvbWlsbGUKK2Fsd2F5cyAmIDUtMTM2CisKK2Fsd2F5cyBAIDQtMzQ1CisKK2Fsd2F5cyBcXCAzNDcKKworYWx3YXlzIHwgNi0zNAorCityZXBlYXRhYmxlIFxzIDAKK3JlcGVhdGFibGUgXHQgMAorcmVwZWF0YWJsZSBceGEwIDAgbm8gYnJlYWsgc3BhY2UKKworcmVwZWF0YWJsZSAtLS0gMzYtMzYtMzYKKworYWx3YXlzIF8gNDU2NworcmVwZWF0YWJsZSBfX18gNDU2Ny00NTY3CisKK3JlcGVhdGFibGUgPT09IDYtMjM1Ni0yMzU2LTIzNTYKKworIyB0aGUgaHlwaGVuCittaWRlbmR3b3JkIC0gMzYKK2Fsd2F5cyAtIDYtMzYKKyNyZXBlYXRhYmxlIMKtwq3CrSA2LTM2LTM2LTM2CisKKyMgbWF0aGVtYXRpY2FsIHN5bWJvbHMKK2Fsd2F5cyA8IDUtMTMKK2Fsd2F5cyA9IDQtMjM1NgorYWx3YXlzID4gNDYtMgorbWlkbnVtICsgMjM1CithbHdheXMgKyA2LTIzNQorbWlkbnVtIC0gMzYKK2Fsd2F5cyDDlyA0LTIzNiBNYWwoLUtyZXV6KQorbWlkbnVtIMOXIDIzNiBNYWwoLUtyZXV6KQorbWlkbnVtIMO3IDQ2LTM0IGRpdmlzaW9uIHNpZ24KK2JlZ251bSAkIDI1NgorYWx3YXlzICQgMjU2LTM0NTYKK2Fsd2F5cyDCvCAzNDU2LTEtMTI1Ni0xNDUKK2Fsd2F5cyDCvSAzNDU2LTEtMTI1Ni0xMgorYWx3YXlzIMK+IDM0NTYtMS0xMjU2LTE0CisKKyMgb3RoZXIgc3BlY2lhbCBjaGFyYWN0ZXJzCithbHdheXMgwqkgMjM1Ni02LTE0LTIzNTYgY29weXJpZ2h0CithbHdheXMgwrYgNC0xMjM0LTM0NSBwYXJhZ3JhcGgKK2Fsd2F5cyDCpyA0LTIzNC0zIHNlY3Rpb24KK2Fsd2F5cyDCoiA0LTE0IGNlbnRzCithbHdheXMgwqMgNC0xMjMgcG91bmRzCithbHdheXMgwqUgNC0xMzQ1NiB5ZW4KK2Fsd2F5cyDCtSA0Ni0xMzQgbXUKKworIyBzcGVjaWFsIGNoYXJhY3RlciBzZXF1ZW5jZXMKK2xpdGVyYWwgOi8vIFVSTHMKK2xpdGVyYWwgd3d3LgorCitsaXRlcmFsIC5jb20KK2xpdGVyYWwgLmVkdQorbGl0ZXJhbCAuZ292CitsaXRlcmFsIC5taWwKK2xpdGVyYWwgLm5ldAorbGl0ZXJhbCAub3JnCitpbmNsdWRlIGNvdW50cmllcy5jdGkKKworbGl0ZXJhbCAuZG9jCitsaXRlcmFsIC5odG0KK2xpdGVyYWwgLmh0bWwKK2xpdGVyYWwgLnRleAorbGl0ZXJhbCAudHh0CisKK2xpdGVyYWwgLmdpZgorbGl0ZXJhbCAuanBnCitsaXRlcmFsIC5wbmcKK2xpdGVyYWwgLndhdgorCitsaXRlcmFsIC50YXIKK2xpdGVyYWwgLnppcAorCisjIFdoZW4gYW4gdXBwZXItY2FzZSBsZXR0ZXIgb2NjdXJzIGluc2lkZSBhIGNvbnRyYWN0aW9uLCBmb2xsb3dpbmcgYSBsb3dlci1jYXNlCisjIGxldHRlciwgdGhlIGNvbnRyYWN0aW9uIHNob3VsZCBub3QgYmUgdXNlZC4gRXhhbXBsZSBNY0NhbgorCisjIHdoZW4gYSBkZWNpbWFsIGJlZ2lucyB3aXRoIGEgcGVyaW9kLCBpdCBzaG91bGQgYmUgdHJhbnNsYXRlZCB3aXRoIGEgCisjIG51bWJlciBzaWduIGZvbGxvd2VkIGJ5IGEgZGVjaW1hbCBwb2ludCwgZm9sbG93ZWQgYnkgdGhlIG51bWJlci4KZGlmZiAtLWdpdCBhL1RhYmxlcy9Db250cmFjdGlvbi9kZS1nMS5jdGIgYi9UYWJsZXMvQ29udHJhY3Rpb24vZGUtZzEuY3RiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ1ZDBjOGIKLS0tIC9kZXYvbnVsbAorKysgYi9UYWJsZXMvQ29udHJhY3Rpb24vZGUtZzEuY3RiCkBAIC0wLDAgKzEsODggQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyMgICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisjCisjIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyMKKyMgQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjIEJSTFRUWSBDb250cmFjdGlvbiBUYWJsZSAtIEdlcm1hbiAoYmFzaWMgY29udHJhY3Rpb25zKQorIyBDcmVhdGVkIGJ5IE1hcmlvIExhbmcgPG1sYW5nQGRlbHlzaWQub3JnPi4KKworaW5jbHVkZSBkZS1nMC5jdGIKKworY2xhc3MgY3N0IGNzdAorY2xhc3MgcyBzCitjbGFzcyB0IHQKKworIyBMYXV0Z3J1cHBlbmvDvHJ6dW5nZW4KK2Fsd2F5cyBhdSAxNgorYWx3YXlzIGV1IDEyNgorYWx3YXlzIGVpIDE0NgorYWx3YXlzIGNoIDE0NTYKK2Fsd2F5cyBzY2ggMTU2CithbHdheXMgc3QgMjM0NTYKK21pZGVuZHdvcmQgaWUgMzQ2CithbHdheXMgw6R1IDM0CisKK2JlZm9yZSBzIG1pZGVuZHdvcmQgYXVzIDE2LTIzNAorCithbHdheXMgYmFycmllciA9IHNob3VsZG4ndCB1c2UgdGhlIGllLWNvbnRyYWN0aW9uCithbHdheXMgYmFua2llciA9IHNob3VsZG4ndCB1c2UgdGhlIGllLWNvbnRyYWN0aW9uCithbHdheXMgZmFtaWxpID0gZmFtaWxpZShuKSBzaG91bGRuJ3QgdXNlIHRoZSBpZS1jb250cmFjdGlvbgorZW5kd29yZCBzdHVkaWUgMjM0NTYtMTM2LTE0NS0yNC0xNSBzaG91bGRuJ3QgdXNlIHRoZSBpZS1jb250cmFjdGlvbgorbWlkZW5kd29yZCBpZW4gPSBzaG91bGRuJ3QgdXNlIHRoZSBpZS1jb250cmFjdGlvbgorbWlkZW5kd29yZCBpZWxsID0gc2hvdWxkbid0IHVzZSB0aGUgaWUtY29udHJhY3Rpb24KK2JlZ21pZHdvcmQgZGllbiAxNDUtMzQ2LTEzNDUKK2Fsd2F5cyBpbmRpZW4gPSBzaG91bGRuJ3QgdXNlIHRoZSBpZS1jb250cmFjdGlvbgorbWlkZW5kd29yZCBpZXTDpHQgPQorYWx3YXlzIHNwZXppZXMgPQorYmVmb3JlIGNzdCBtaWR3b3JkIHVuZ3MgPSBCaW5kdW5nc2NoYXJha3RlciwgUmVnaWVydW5nc2NoZWYKKworIyB1bnNvbHZhYmxlIHByb2JsZW1zOgorIyBkaWUgUHJlbWllcmUgdnMuIGljaCBwcmVtaWVyZQorIyBkaWUgUHJlbWllcmVuIHZzLiBzaWUgcHJlbWllcmVuCisKKyMgZXhjZXB0aW9ucword29yZCBha3RpZSA9IHNob3VsZG4ndCB1c2UgdGhlIGllLWNvbnRyYWN0aW9uCithbHdheXMgYWxnZXJpZXIgPSBzaG91bGRuJ3QgdXNlIHRoZSBpZS1jb250cmFjdGlvbgorcHJmd29yZCBhbXBoaWJpZSA9IHNob3VsZG4ndCB1c2UgdGhlIGllLWNvbnRyYWN0aW9uCithbHdheXMgYW10c2NoZWYgMS0xMzQtMjM0NS0yMzQtMTQ1Ni0xNS0xMjQgc2hvdWxkbid0IHVzZSB0aGUgc2NoLWNvbnRyYWN0aW9uCithbHdheXMgYW10c2NoaW5lcyAxLTEzNC0yMzQ1LTIzNC0xNDU2LTI0LTEzNDUtMTUtMjM0IHNob3VsZG4ndCB1c2UgdGhlIHNjaC1jb250cmFjdGlvbgorYWx3YXlzIGFuZGFsdXNpZXIgPSBzaG91bGRuJ3QgdXNlIHRoZSBpZS1jb250cmFjdGlvbgorYWx3YXlzIGFzdGhtYSA9IHNob3VsZG4ndCB1c2UgdGhlIHN0LWNvbnRyYWN0aW9uCitiZWZvcmUgdCBhbHdheXMgYnVuZGVzID0gc2hvdWxkbid0IHVzZSB0aGUgc3QtY29udHJhY3Rpb24KK3ByZndvcmQgY2hlbWlrYWxpZSAxNDU2LTE1LTEzNC0yNC0xMy0xLTEyMy0yNC0xNSBzaG91bGRuJ3QgdXNlIHRoZSBpZS1jb250cmFjdGlvbgorYWx3YXlzIGRpZW5zdGFnIDE0NS0zNDYtMTM0NS0yMzQtMjM0NS0xLTEyNDUgc2hvdWxkbid0IHVzZSB0aGUgc3QtY29udHJhY3Rpb24KK2Fsd2F5cyBkb25uZXJzdGFnID0gc2hvdWxkbid0IHVzZSB0aGUgc3QtY29udHJhY3Rpb24KK2Fsd2F5cyBlc2NoYXRvbG9nIDE1LTIzNC0xNDU2LTEtMjM0NS0xMzUtMTIzLTEzNS0xMjQ1IHNob3VsZG4ndCB1c2UgdGhlIHNjaC1jb250cmFjdGlvbgorYWx3YXlzIGVzdGhlciA9IHNob3VsZG4ndCB1c2UgdGhlIHN0LWNvbnRyYWN0aW9uCitwcmZ3b3JkIGZvbGllID0gc2hvdWxkbid0IHVzZSB0aGUgaWUtY29udHJhY3Rpb24KK3N1ZndvcmQgaG9lciAxMjUtMjQ2LTEyMzUgc2hvdWxkIHVzZSB0aGUgb2Utc3ltYm9sCithbHdheXMgaW50ZXJ2aWV3ID0gc2hvdWxkbid0IHVzZSB0aGUgaWUtY29udHJhY3Rpb24KK2Fsd2F5cyBrb2ZmZWluID0gc2hvdWxkbid0IHVzZSB0aGUgZWktY29udHJhY3Rpb24KK2Fsd2F5cyBsaWxpZSA9IHNob3VsZG4ndCB1c2UgdGhlIGllLWNvbnRyYWN0aW9uCitwcmZ3b3JkIGxpbmllIDEyMy0yNC0xMzQ1LTI0LTE1IHNob3VsZG4ndCB1c2UgdGhlIGllLWNvbnRyYWN0aW9uCitwcmZ3b3JkIG1hdGVyaWUgPSBzaG91bGRuJ3QgdXNlIHRoZSBpZS1jb250cmFjdGlvbgorYWx3YXlzIG1lZGllbiA9IHNob3VsZG4ndCB1c2UgdGhlIGllLWNvbnRyYWN0aW9uCithbHdheXMgbXVzZXVtID0gc2hvdWxkbid0IHVzZSB0aGUgZXUtY29udHJhY3Rpb24KK2Fsd2F5cyBwcm9wcmlldCA9IHByb3ByaWV0w6RyIHNob3VsZG4ndCB1c2UgdGhlIGllLWNvbnRyYWN0aW9uCithbHdheXMgZMO2c2NoZW4gMTQ1LTI0Ni0yMzQtMTQ1Ni0xNS0xMzQ1CithbHdheXMgaMO2c2NoZW4gMTI1LTI0Ni0yMzQtMTQ1Ni0xNS0xMzQ1IHNob3VsZCB1c2UgdGhlIGNoLWNvbnRyYWN0aW9uCit3b3JkIHLDtnNjaGVuIDEyMzUtMjQ2LTIzNC0xNDU2LTE1LTEzNDUgc2hvdWxkIHVzZSB0aGUgY2gtY29udHJhY3Rpb24KK2Fsd2F5cyBzYW1zdGFnID0gc2hvdWxkbid0IHVzZSB0aGUgc3QtY29udHJhY3Rpb24KK3dvcmQgd2lzc3QgPSBzaG91bGRuJ3QgdXNlIHRoZSBzdC1jb250cmFjdGlvbgorYWx3YXlzIHZpZXRuYW0gPSBzaG91bGRuJ3QgdXNlIHRoZSBpZS1jb250cmFjdGlvbgorCisjIG5hbWVzCithbHdheXMgZGFuaWVsID0gc2hvdWxkbid0IHVzZSB0aGUgaWUtY29udHJhY3Rpb24KZGlmZiAtLWdpdCBhL1RhYmxlcy9Db250cmFjdGlvbi9kZS1nMi5jdGIgYi9UYWJsZXMvQ29udHJhY3Rpb24vZGUtZzIuY3RiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZiNGYyNTQKLS0tIC9kZXYvbnVsbAorKysgYi9UYWJsZXMvQ29udHJhY3Rpb24vZGUtZzIuY3RiCkBAIC0wLDAgKzEsMjIgQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyMgICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisjCisjIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyMKKyMgQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjIEJSTFRUWSBDb250cmFjdGlvbiBUYWJsZSAtIEdlcm1hbiAoY29udHJhY3RlZCkKKworaW5jbHVkZSBkZS0xOTk4LmN0YgorCmRpZmYgLS1naXQgYS9UYWJsZXMvQ29udHJhY3Rpb24vZGUtd29ydC5jdGkgYi9UYWJsZXMvQ29udHJhY3Rpb24vZGUtd29ydC5jdGkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODUwMDJhNwotLS0gL2Rldi9udWxsCisrKyBiL1RhYmxlcy9Db250cmFjdGlvbi9kZS13b3J0LmN0aQpAQCAtMCwwICsxLDM2MSBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorIyAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyMKKyMgQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorIworIyBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorIworIyBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisjIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyMgbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisjCisjIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMgQlJMVFRZIENvbnRyYWN0aW9uIFN1YnRhYmxlIC0gR2VybWFuIChjb250cmFjdGVkKQorCithbHdheXMgYWxkZWh5ZCAyNS0xNDUtMTUtMTI1LTYtMTM0NTYtMTQ1CitzdWZ3b3JkIGFscGhhIDI1LTEyMzQtMTI1LTEKK2Fsd2F5cyBhcmh5dGhtID0KKworYmVmb3JlIGhpbG1ucnN1IGFsd2F5cyBhdWZuYWhtZSAyLTE2LTEzNDUtMTM0LTE1CitwcmZ3b3JkIGF1Zm5haG1lbiAyLTE2LTEzNDUtMTM0LTE0CisKK2JlZm9yZSBlIGFsd2F5cyBhYmzDtnNlID0KK2Fsd2F5cyBhYnNvbHZlbnQgMS0xMi0yMzQtMTM1LTEyMy0xMjM2LTE0LTIzNDUKK2JlZ21pZHdvcmQgYW5hY2hyb24gMjM1LTEtMTQ1Ni0xMjM1LTEzNS0xMzQ1CithbHdheXMgYW5hbHlzZSAyMzUtMjUtNi0xMzQ1Ni0yMzQtMTUKK3ByZndvcmQgYW5hbHlzZW4gMjM1LTI1LTYtMTM0NTYtMjM0LTE0CithbHdheXMgYW5hbHlzZW5hdWYgMjM1LTI1LTYtMTM0NTYtMjM0LTE0LTItMTYKK2Fsd2F5cyBhbmFseXNlbmVyZ2ViIDIzNS0yNS02LTEzNDU2LTIzNC0xNC0xMjQ1Ni0xMjM0Ni0xMgorYmVmb3JlIGtvbnNvbmFudCBhbHdheXMgYW5hbHlzZW4gMjM1LTI1LTYtMTM0NTYtMjM0LTE0CithbHdheXMgYXJ0aHJvc2UgMzU2LTIzNDUtMTI1LTEyMzUtMTM1LTIzNC0xNQorcHJmd29yZCBhcnRocm9zZW4gMzU2LTIzNDUtMTI1LTEyMzUtMTM1LTIzNC0xNAorYWx3YXlzIMOkZ3lwdGVuIDM0NS0xMjQ1LTYtMTM0NTYtMTIzNC0yMzQ1LTE0IHNob3VsZG4ndCB1c2UgdGhlIHRlLWNvbnRyYWN0aW9uCithbHdheXMgYWVneXB0ZW4gMzQ1LTEyNDUtNi0xMzQ1Ni0xMjM0LTIzNDUtMTQKK2Fsd2F5cyBhdWZnYWJlbiAyLTE2LTEyNDUtMS0xMi0xNAorcHJmd29yZCBiYWNoZWxvciAxMi0xLTE0NTYtMTM0NTYtMTM1LTEyMzUKK2JlZ21pZHdvcmQgYmFjaGVsb3IgMTItMS0xNDU2LTEzNDU2LTI2CisKK3dvcmQgYmVhdCA9CithbHdheXMgYmVhdGJveCA9CithbHdheXMgYmVhdG11c2lrIDEyLTE1LTEtMjM0NS0xMzQtMTMKK2Fsd2F5cyBiZWF0bmlrID0KK2Fsd2F5cyBiYWNrYmVhdCAxMi0xLTQ2LTEyLTE1LTEtMjM0NQord29yZCBvZmZiZWF0ID0gU2F1ZXJzdG9mZmJlYXRtdW5nCithbHdheXMgcG9wYmVhdCA9CithbHdheXMgcm9ja2JlYXQgMTIzNS0xMzUtNDYtMTItMTUtMS0yMzQ1CisKK2Fsd2F5cyBiZWZ1bmQgMjMtMTI0LTI1Ni0xNDUKK2Fsd2F5cyBiZWljaHQgMTItMTQ2LTE0NTYtMjM0NQorcHJmd29yZCBiZWljaHRlIDEyLTE0Ni0xNDU2LTIzNgorcHJmd29yZCBiZWljaHRlc3QgMTItMTQ2LTE0NTYtMjM2LTIzNDU2CitwcmZ3b3JkIGJlaWNodGV0IDEyLTE0Ni0xNDU2LTIzNi0yMzQ1CitwcmZ3b3JkIGJlaWNodGV0ZSAxMi0xNDYtMTQ1Ni0yMzYtMjM2CitwcmZ3b3JkIGdlYmVpY2h0ZXRlbSAxMjM0Ni0xMi0xNDYtMTQ1Ni0yMzYtMjM0NS0xMjM1NgorcHJmd29yZCBiZWljaHRldGVuIDEyLTE0Ni0xNDU2LTIzNi0yMzQ1LTE0CitwcmZ3b3JkIGdlYmVpY2h0ZXRlciAxMjM0Ni0xMi0xNDYtMTQ1Ni0yMzYtMjM0NS0xMjQ1NgorcHJmd29yZCBnZWJlaWNodGV0ZXMgMTIzNDYtMTItMTQ2LTE0NTYtMjM2LTIzNDUtMTIzNDU2CitwcmZ3b3JkIGJlaWNodGV0ZXN0IDEyLTE0Ni0xNDU2LTIzNi0yMzYtMjM0NTYKK3ByZndvcmQgYmVpY2h0ZXRldCAxMi0xNDYtMTQ1Ni0yMzYtMjM2LTIzNDUKK2VuZHdvcmQgYmV0cmllYmVuIDIzLTIzNDUtMTIzNS0zNDYtMTItMTQKK2Fsd2F5cyBibGF1YmVlciAxMi0xMjMtMTYtMTItMTUtMTUtMTIzNQorYWx3YXlzIGJyb21iZWVyID0KK3ByZndvcmQgYnVuZCAxMi0yNTYtMTQ1CithbHdheXMgYnVyZ3VuZGVyIDEyLTEzNi0xMjM1LTEyNDUtMjU2LTE0NS0xMjQ1NgorI2Fsd2F5cyBjcmFuYmVycnkgNi0xNC0xMjM1LTIzNS0yMy0xMjM1LTEyMzUtNi0xMzQ1NgorYWx3YXlzIGRlYWxlciAxNDUtMTUtMS0xMjMtMTI0NTYKK2Fsd2F5cyBkZWh5ZHIgPQorYWx3YXlzIGRpYWdub3NlID0KK3ByZndvcmQgZGlhZ25vc2VuIDE0NS0yNC0xLTEyNDUtMTM0NS0xMzUtMjM0LTE0CitiZWZvcmUga29uc29uYW50IGFsd2F5cyBkaWFnbm9zZW4gMTQ1LTI0LTEtMTI0NS0xMzQ1LTEzNS0yMzQtMTQKK2Fsd2F5cyBkaWFtYW50IDE0NS0yNC0xLTEzNC0yMzUtMjM0NQorYmVmb3JlIGUgYWx3YXlzIGVpbnJlaXNlIDEyNDYtMTIzNS0xNDYtMjM0LTE1CithbHdheXMgZWlzc3RhdSAxNDYtMjM0LTIzNDU2LTE2IGVpc3N0YXUgZWlzc3RhdWIgZ2xlaXNzdGF1YgorYWx3YXlzIGVycHJlc3NlciAxMjQ1Ni0xMjM0LTEyMzUtMTUtMjM0Ni0xMjQ1NgorYWx3YXlzIGVzdHJhZ29uIDEyMzQ1Ni0yMzQ1LTEyMzUtMS0xMjQ1LTEzNS0xMzQ1ICMgdHJhZz8KK2Fsd2F5cyBldXJvcGEgMTI2LTEyMzUtMTM1LTEyMzQtMQorbWlkZW5kd29yZCBleHByZXNzZXMgMTUtNi0xMzQ2LTEyMzQtMTIzNS0xNS0yMzQ2LTEyMzQ1Ngord29yZCBleHByZXNzZXMgMTM0Ni0xMjM0LTEyMzUtMTUtMjM0Ni0xMjM0NTYKK3N1ZndvcmQgZ2FtbWEgMTI0NS0xLTEzNDYtMQorYmVmb3JlIGhpbG1ucnN1IGFsd2F5cyBnZWLDpHVkZSAxMjM0Ni0xMi0zNC0xNDUtMTUKK3ByZndvcmQgZ2Viw6R1ZGVuIDEyMzQ2LTEyLTM0LTE0NS0xNAorcHJmd29yZCBnZWLDpHVkZXMgMTIzNDYtMTItMzQtMTQ1LTEyMzQ1NgorYmVmb3JlIGhpbG1ucnN1IGFsd2F5cyBnZWJpbmRlIDEyMzQ2LTEyLTM1LTE0NS0xNQorcHJmd29yZCBnZWJpbmRlbiAxMjM0Ni0xMi0zNS0xNDUtMTQKK3ByZndvcmQgZ2ViaW5kZXMgMTIzNDYtMTItMzUtMTQ1LTEyMzQ1Ngorc3Vmd29yZCBnZWjDpHVzZSAxMjM0Ni0xMjUtMzQtMjM0LTE1CitwcmZ3b3JkIGdlaMOkdXNlbiAxMjM0Ni0xMjUtMzQtMjM0LTE0CitwcmZ3b3JkIGdlaMOkdXNlcyAxMjM0Ni0xMjUtMzQtMjM0LTEyMzQ1NgorYWx3YXlzIGdlc3VuZCAxMjM0Ni0yMzQtMjU2LTE0NQorYmVmb3JlIGhpbG1ucnN1IGFsd2F5cyBnZXdpbmRlIDEyMzQ2LTI0NTYtMzUtMTQ1LTE1CithbHdheXMgZ2V3aW5kZWx0IDEyMzQ2LTI0NTYtMzUtMTQ1LTEzNDU2LTIzNDUKK2Fsd2F5cyBnZXdpbmRlbHRlIDEyMzQ2LTI0NTYtMzUtMTQ1LTEzNDU2LTIzNgorYWx3YXlzIGdld2luZGVsdGVtIDEyMzQ2LTI0NTYtMzUtMTQ1LTEzNDU2LTIzNDUtMTIzNTYKK2Fsd2F5cyBnZXdpbmRlbHRlbiAxMjM0Ni0yNDU2LTM1LTE0NS0xMzQ1Ni0yMzQ1LTE0CithbHdheXMgZ2V3aW5kZWx0ZXIgMTIzNDYtMjQ1Ni0zNS0xNDUtMTM0NTYtMjM0NS0xMjQ1NgorYWx3YXlzIGdld2luZGVsdGVzIDEyMzQ2LTI0NTYtMzUtMTQ1LTEzNDU2LTIzNDUtMTIzNDU2CitwcmZ3b3JkIGdld2luZGVuIDEyMzQ2LTI0NTYtMzUtMTQ1LTE0CitwcmZ3b3JkIGdld2luZGVzIDEyMzQ2LTI0NTYtMzUtMTQ1LTEyMzQ1Ngord29yZCBHZXdpbmRlc2NoYWZ0IDEyMzQ2LTI0NTYtMzUtMTQ1LTE1LTE1Ni0xLTEyNC0yMzQ1CitiZWZvcmUgaGlsbW5yc3UgYWx3YXlzIGdlbWVpbmRlIDEyMzQ2LTEzNC0xMjQ2LTE0NS0xNSBnZW1laW5kZXJhdCBzaG91bGRuJ3QgdXNlIHRoZSBlci1jb250cmFjdGlvbgorCitiZWZvcmUgaGlsbW5yc3UgYWx3YXlzIGdlbGF0aW5lIDEyMzQ2LTEyMy0xLTIzNDUtMzUtMTUKK3ByZndvcmQgZ2VsYXRpbmVuIDEyMzQ2LTEyMy0xLTIzNDUtMzUtMTQKKworcHJmd29yZCBnZW1laW5kZW4gMTIzNDYtMTM0LTEyNDYtMTQ1LTE0CitwcmZ3b3JkIGdlbWVpbmRlbmQgMTIzNDYtMTM0LTEyNDYtMTQ1LTE0LTE0NQorcHJmd29yZCBnZW1laW5kZW5kZSAxMjM0Ni0xMzQtMTI0Ni0xNDUtMTQtMTQ1LTE1CitwcmZ3b3JkIGdlbWVpbmRlbmRlbSAxMjM0Ni0xMzQtMTI0Ni0xNDUtMTQtMTQ1LTEyMzU2CitwcmZ3b3JkIGdlbWVpbmRlbmRlbiAxMjM0Ni0xMzQtMTI0Ni0xNDUtMTQtMTQ1LTE0CitwcmZ3b3JkIGdlbWVpbmRlbmRlciAxMjM0Ni0xMzQtMTI0Ni0xNDUtMTQtMTQ1LTEyNDU2CitwcmZ3b3JkIGdlbWVpbmRlbmRlcyAxMjM0Ni0xMzQtMTI0Ni0xNDUtMTQtMTQ1LTEyMzQ1NgorYWx3YXlzIGdlbWVpbmRldXRzY2ggMTIzNDYtMTM0LTEyNDYtMTQ1LTE1NgorYWx3YXlzIGdlbcO8c2UgMTIzNDYtMTM0LTEyNTYtMjM0LTE1CitwcmZ3b3JkIGdlbcO8c2VuIDEyMzQ2LTEzNC0xMjU2LTIzNC0xNAorcHJmd29yZCBnZW3DvHNlcyAxMjM0Ni0xMzQtMTI1Ni0yMzQtMTIzNDU2CithbHdheXMgZ2V0cmVpZGUgMTIzNDYtMjM0NS0xMjM1LTE0Ni0xNDUtMTUKK3ByZndvcmQgZ2V0cmVpZGVuIDEyMzQ2LTIzNDUtMTIzNS0xNDYtMTQ1LTE0CitwcmZ3b3JkIGdldHJlaWRlcyAxMjM0Ni0yMzQ1LTEyMzUtMTQ2LTE0NS0xMjM0NTYKK2Fsd2F5cyBnb3Jnb256b2xhIDEyNDUtMjYtMTI0NS0xMzUtMTM0NS0xMzU2LTEzNS0xMjMtMQorc3Vmd29yZCBnb3R0ZXMgMTI0NS0xMzUtMjM0NS0yMzQ1LTEyMzQ1NgorYWx3YXlzIGdvdHRlc2RpZW5zdCAxMjQ1LTEzNS0yMzQ1LTIzNDUtMTIzNDU2LTE0NS0zNDYtMTM0NS0yMzQ1NgorYWx3YXlzIGdsdWNvc2UgPQorYWx3YXlzIGdsdWtvc2UgPQorYmVmb3JlIHQgYWx3YXlzIGhhYmljaCAxMjUtMS0xMi0zNDU2CitwcmZ3b3JkIGhhaWUgPQorYWx3YXlzIGhhdXN0aWVyIDEyNS0xNi0yMzQtMjM0NS0zNDYtMTIzNQorYWx3YXlzIGhlYWx0aCA9CithbHdheXMgaGVpZGVsYmVlciAxMjUtMTQ2LTE0NS0xMzQ1Ni0xMi0xNS0xNS0xMjM1CitiZWZvcmUgdCBhbHdheXMgaGlsZnMgPQorcHJmd29yZCBoaWxmc3QgMTI1LTI0LTEyMy0xMjQtMjM0NTYKK2Fsd2F5cyBoaW1iZWVyID0KK3N1ZndvcmQgaGlyc2UgPQorc3Vmd29yZCBob2x1bmRlciAxMjUtMTM1LTEyMy0yNTYtMTQ1LTEyNDU2CitzdWZ3b3JkIGhvbHVuZGVyYmVlciAxMjUtMTM1LTEyMy0yNTYtMTQ1LTEyNDU2LTEyLTE1LTE1LTEyMzUKK2Fsd2F5cyBoeXBub3NlID0KK3ByZndvcmQgaHlwbm9zZW4gMTI1LTYtMTM0NTYtMTIzNC0xMzQ1LTEzNS0yMzQtMTQKK2Fsd2F5cyBpbmZhbnRlcmllIDM1LTEyNC0yMzUtMjM0NS0xMjQ1Ni0zNDYKK3ByZndvcmQgaW5mYW50ZXJpZW4gMzUtMTI0LTIzNS0yMzQ1LTEyNDU2LTI0LTE0CitwcmZ3b3JkIGltaXRhdCA9CithbHdheXMgam9oYW5uaXMgMjQ1LTEzNS0xMjUtMjM1LTEzNDUtMjQtMjM0CithbHdheXMgam9oYW5uaXNiZWVyIDI0NS0xMzUtMTI1LTIzNS0xMzQ1LTI0LTIzNC0xMi0xNS0xNS0xMjM1CitiZWZvcmUgbG5yIGFsd2F5cyBrYW1lcmEgMTMtMS0xMzQtMTI0NTYtMQorYmVmb3JlIGtvbnNvbmFudCBhbHdheXMga2FtZXJhbCAxMy0xLTEzNC0xMjQ1Ni0yNQorYWx3YXlzIGthbWVyYWxpYSAxMy0xLTEzNC0xMjQ1Ni0yNS0yNC0xCithbHdheXMga2FtZXJhbGlzbXVzIDEzLTEtMTM0LTEyNDU2LTI1LTUtMjQKK2Fsd2F5cyBrYW1lcmFsaXN0IDEzLTEtMTM0LTEyNDU2LTI1LTI0LTIzNDU2CithbHdheXMga2FtZXJhbGlzdGlzY2ggMTMtMS0xMzQtMTI0NTYtMjUtNS0xNTYKK2JlZm9yZSBoaWxtbnJzdSBhbHdheXMga2FycmllcmUgMTMtMzU2LTEyMzUtMjQtMTI0NTYtMTUKK3ByZndvcmQga2FycmllcmVuIDEzLTM1Ni0xMjM1LTI0LTEyNDU2LTE0CithbHdheXMga2xhc3NlIDEzLTEyMy0xLTIzNDYtMTUKK2Fsd2F5cyBrbGFzc2VuIDEzLTEyMy0xLTIzNDYtMTQKK2Fsd2F5cyBrb3JpYW5kZXIgMTMtMTM1LTEyMzUtMjQtMjM1LTE0NS0xMjQ1NgorYWx3YXlzIGt1cnpiZWluIDEzLTEzNTYtMTItMTQ2LTEzNDUKK3ByZndvcmQga3VyemVpdCAxMy0xMzYtMTIzNS0xMzU2LTE0Ni0yMzQ1CitwcmZ3b3JkIGt1cnplaXRlbiAxMy0xMzYtMTIzNS0xMzU2LTE0Ni0yMzQ1LTE0CithbHdheXMga3VyemVudHJlbiAxMy0xMzYtMTIzNS0xMzU2LTE0LTIzNDUtMTIzNS0xNAorYWx3YXlzIGt1cnplbnRydW0gMTMtMTM2LTEyMzUtMTM1Ni0xNC0yMzQ1LTEyMzUtMTM2LTEzNAorcHJmd29yZCBrdXJ6ZWxsZSAxMy0xMzYtMTIzNS0xMzU2LTE1LTEyMzQ1LTE1CitwcmZ3b3JkIGt1cnplbGxlbiAxMy0xMzYtMTIzNS0xMzU2LTE1LTEyMzQ1LTE0CithbHdheXMga3VyemhhYXIgMTMtMTM1Ni0xMjUtMS0xLTEyMzUKK2Fsd2F5cyBsYXVmd2VyayAxMjMtMTYtMTI0LTI0NTYtMTI0NTYtMTMKK2Fsd2F5cyBsZWl0ZXJpbiAxMjMtMTQ2LTIzNDUtMTI0NTYtMzUKK2Fsd2F5cyBsaW1pdCA9CithbHdheXMgbGlwaXp6YW5lciAxMjMtMjQtMTIzNC0yNC0xMzU2LTEzNTYtMjM1LTEyNDU2CisKK2Fsd2F5cyBtYW50ZWwgMTM0LTIzNS0yMzQ1LTEzNDU2CisKK2JlZm9yZSBoaWxtbnJzdSBhbHdheXMgbWFyaW5lIDEzNC0zNTYtMzUtMTUKK3ByZndvcmQgbWFyaW5lbSAxMzQtMzU2LTM1LTEyMzU2CitwcmZ3b3JkIG1hcmluZW4gMTM0LTM1Ni0zNS0xNAorcHJmd29yZCBtYXJpbmVyIDEzNC0zNTYtMzUtMTI0NTYKK3ByZndvcmQgbWFyaW5lcyAxMzQtMzU2LTM1LTEyMzQ1NgorIyBwZW9wbGUgZnJvbSBzYW4tbWFyaW5vCitwcmZ3b3JkIG1hcmluZXNlIDEzNC0zNTYtMzUtMTIzNDU2LTE1CitwcmZ3b3JkIG1hcmluZXNpbiAxMzQtMzU2LTM1LTEyMzQ1Ni0zNQorcHJmd29yZCBtYXJpbmVzaW5uZW4gMTM0LTM1Ni0zNS0xMjM0NTYtMzUtMTM0NS0xNAorcHJmd29yZCBtYXJpbmVzaXNjaCAxMzQtMzU2LTM1LTEyMzQ1Ni0yNC0xNTYKK3ByZndvcmQgbWFyaW5lc2lzY2hlIDEzNC0zNTYtMzUtMTIzNDU2LTI0LTE1Ni0xNQorcHJmd29yZCBtYXJpbmVzaXNjaGVtIDEzNC0zNTYtMzUtMTIzNDU2LTI0LTE1Ni0xMjM1NgorcHJmd29yZCBtYXJpbmVzaXNjaGVuIDEzNC0zNTYtMzUtMTIzNDU2LTI0LTE1Ni0xNAorcHJmd29yZCBtYXJpbmVzaXNjaGVyIDEzNC0zNTYtMzUtMTIzNDU2LTI0LTE1Ni0xMjQ1NgorcHJmd29yZCBtYXJpbmVzaXNjaGVzIDEzNC0zNTYtMzUtMTIzNDU2LTI0LTE1Ni0xMjM0NTYKKworYWx3YXlzIG1hdHVyYSA9CithbHdheXMgbWF0dXJhbnQgMTM0LTEtMjM0NS0xMzYtMTIzNS0yMzUtMjM0NQorCitiZWZvcmUgcyBhbHdheXMgbWVzcyAxMzQtMTUtMjM0NgorCitwcmZ3b3JkIG1pdHRlIDEzNC0yNC0yMzQ1LTIzNgorcHJmd29yZCBtaXR0ZW4gMTM0LTI0LTIzNDUtMjM0NS0xNAorcHJmd29yZCBtb29yZSA9CitwcmZ3b3JkIG1vb3JlbiAxMzQtMTM1LTEzNS0xMjM1LTE0CitwcmZ3b3JkIG1vb3JlcyAxMzQtMTM1LTEzNS0xMjM1LTEyMzQ1NgorYWx3YXlzIG5hcHBhbGVkZXIgMTM0NS0xLTEyMzQtMTIzNC0xLTEyMy0xNS0xNDUtMTI0NTYKK2JlZ3dvcmQgbmV1cm8gMTM0NS0xMjYtMTIzNS0xMzUKK2Fsd2F5cyBvbHltcGlhID0KKworcHJmd29yZCBvcmdpZSAyNi0xMjQ1LTI0LTE1CitwcmZ3b3JkIG9yZ2llbiAyNi0xMjQ1LTI0LTE0CisKK3N1ZndvcmQgb3J0cyAyNi0yMzQ1LTIzNAorYWx3YXlzIG9ydHNjaGFmdCAyNi0yMzQ1LTE1NgorYWx3YXlzIG9ydHN0ZWluIDI2LTIzNDUtMjM0NTYtMTI0NgorCithbHdheXMgcGFwYWdlaSAxMjM0LTEtMTIzNC0xLTEyNDUtMTQ2CithbHdheXMgcGFwcmlrYSA9CithbHdheXMgcGVzdG9yYWhtIDEyMzQtMTUtMjM0NTYtMTM1LTEyMzUtMS0xMjUtMTM0CitiZWZvcmUgbG5yIGFsd2F5cyBwaXp6YSA9CithbHdheXMgcHJlaXNlbGJlZXIgMTIzNC0xMjM1LTE0Ni0yMzQtMTM0NTYtMTItMTUtMTUtMTIzNQorYmVmb3JlIGhpbG1ucnN1IGFsd2F5cyBwcmVzc2UgMTIzNC0xMjM1LTE1LTIzNDYtMTUKK3ByZndvcmQgcHJlc3NlbiAxMjM0LTEyMzUtMTUtMjM0Ni0xNAorcHJmd29yZCBwcmVzc2VuZCAxMjM0LTEyMzUtMTUtMjM0Ni0xNC0xNDUKK3ByZndvcmQgcHJlc3NlbmRlIDEyMzQtMTIzNS0xNS0yMzQ2LTE0LTE0NS0xNQorcHJmd29yZCBwcmVzc2VuZGVtIDEyMzQtMTIzNS0xNS0yMzQ2LTE0LTE0NS0xMjM1NgorcHJmd29yZCBwcmVzc2VuZGVuIDEyMzQtMTIzNS0xNS0yMzQ2LTE0LTE0NS0xNAorcHJmd29yZCBwcmVzc2VuZGVyIDEyMzQtMTIzNS0xNS0yMzQ2LTE0LTE0NS0xMjQ1NgorcHJmd29yZCBwcmVzc2VuZGVzIDEyMzQtMTIzNS0xNS0yMzQ2LTE0LTE0NS0xMjM0NTYKK2Fsd2F5cyBwcmVzc2VuZHJ1Y2sgMTIzNC0xMjM1LTE1LTIzNDYtMTQtMTQ1LTQ2CitwcmZ3b3JkIHByZXNzZW5zIDEyMzQtMTIzNS0xNS0yMzQ2LTE0LTIzNAorYWx3YXlzIHByZXNzZW50aXNjaCAxMjM0LTEyMzUtMTUtMjM0Ni0xNC0yMzQ1LTI0LTE1NgorYWx3YXlzIHJhc3RhbG9jayAxMjM1LTEtMjM0NTYtMS0xMjMtMTM1LTQ2CitiZWZvcmUgZSBhbHdheXMgcmVpc2UgMTIzNS0xNDYtMjM0LTE1CithbHdheXMgcmVxdWllbSAxMjM1LTE1LTYtMTIzNDUtMjQtMTIzNTYKKworYmVmb3JlIGhpbG1ucnN1IGFsd2F5cyByZXNlcnZlIDEyMzUtMTIzNDU2LTEyNDU2LTEyMzYtMTUKK3ByZndvcmQgcmVzZXJ2ZW4gMTIzNS0xMjM0NTYtMTI0NTYtMTIzNi0xNAorCithbHdheXMgcmhhYmFyYmVyIDEyMzUtMTI1LTEtMTItMS0xMjM1LTEyLTEyNDU2CitwcmZ3b3JkIHJ1bmRlIDEyMzUtMjU2LTE0NS0xNQorcHJmd29yZCBydW5kZW4gMTIzNS0yNTYtMTQ1LTE0CitzdWZ3b3JkIHNhaG5lID0KK2Fsd2F5cyBzYWhuZW1lZXIgPQorYWx3YXlzIHNhbGJlaSAyMzQtMjUtMTItMTQ2CitzdWZ3b3JkIHNhdWYgMjM0LTE2LTEyNAorCithbHdheXMgc2FtcGxlID0KK3ByZndvcmQgc2FtcGxlbiAyMzQtMS0xMzQtMTIzNC0xMjMtMTQKK3ByZndvcmQgc2FtcGxlciAyMzQtMS0xMzQtMTIzNC0xMjMtMTI0NTYKK2Fsd2F5cyBzYW1wbGVybW9kdWwgMjM0LTEtMTM0LTEyMzQtMTIzLTEyNDU2LTEzNC0xMzUtMTQ1LTEzNi0xMjMKK3ByZndvcmQgc2FtcGxlcm4gMjM0LTEtMTM0LTEyMzQtMTIzLTEyNDU2LTEzNDUKK3ByZndvcmQgc2FtcGxlcnMgMjM0LTEtMTM0LTEyMzQtMTIzLTEyNDU2LTIzNAorcHJmd29yZCBzYW1wbGVzIDIzNC0xLTEzNC0xMjM0LTEyMy0xMjM0NTYKKworbWlkZW5kd29yZCBzYW10ID0KK2JlZm9yZSBsIGFsd2F5cyBzYXVuYSAyMzQtMTYtMTM0NS0xCitwcmZ3b3JkIHNvbG9zID0KK3ByZndvcmQgc29saSA9CitiZWZvcmUgbCBhbHdheXMgc2NodWwgMTU2LTEzNi0xMjMKK2Fsd2F5cyBzY2h1bHRlciAxNTYtMTM2LTEyMy0yMzQ1LTEyNDU2IHNob3VsZG4ndCB1c2UgdGhlIHRlLWNvbnRyYWN0aW9uCithbHdheXMgc2NodWx0cmFnw7ZkaWUgMTU2LTEzNi0xMjMtMjM0NS0xMjM1LTEtMTI0NS0yNDYtMTQ1LTI0LTE1CithbHdheXMgc2NodWx0cmFnw7ZkaWVuIDE1Ni0xMzYtMTIzLTIzNDUtMTIzNS0xLTEyNDUtMjQ2LTE0NS0yNC0xNAorYWx3YXlzIHNjaHVsdHJhbnMgMTU2LTEzNi0xMjMtMjM0NS0xMjM1LTIzNS0yMzQgc2NodWx0cmFuc3BvcnQKK2JlZm9yZSBoaWxtbnJzdSBhbHdheXMgc2VlID0KK3N1ZndvcmQgc29sYXIgMjM0LTEzNS0xMjMtMzU2CitwcmZ3b3JkIHNvw59lID0KK3ByZndvcmQgc2/Dn2VuIDIzNC0xMzUtNi0yMzQ2LTE0CithbHdheXMgc291bmQgPQorYWx3YXlzIHNvdW5kc28gMi0xMjM0LTItMTM2LTItMTIzNAorYmVmb3JlIGUgYWx3YXlzIHNwZWlzZSAyMzQtMTIzNC0xNDYtMjM0LTE1CithbHdheXMgdGFiYXNjbyA9CithbHdheXMgdGVhY2hlciAyMzQ1LTE1LTEtMTQ1Ni0xMjQ1NgorYWx3YXlzIHRlYWNoaW5nIDIzNDUtMTUtMS0xNDU2LTM1LTEyNDUKK2JlZm9yZSBsIGFsd2F5cyB0ZWlsIDIzNDUtMTQ2LTEyMworYmVmb3JlIGhpbG1ucnN1IGFsd2F5cyB0ZWlsbmFobWUgMjM0NS0xNDYtMTIzLTEzNDUtMTM0LTE1CitwcmZ3b3JkIHRlaWxuYWhtZW4gMjM0NS0xNDYtMTIzLTEzNDUtMTM0LTE0CithbHdheXMgdGVtcGVyYXR1ciAyMzQ1LTEyMzU2LTEyMzQtMTI0NTYtMS0yMzQ1LTEzNi0xMjM1IHByZWZlciBlbS1jb250cmFjdGlvbiBvdmVyIHRlLWNvbnRyYWN0aW9uCithbHdheXMgdGVtcG8gMjM0NS0xMjM1Ni0xMjM0LTEzNQorcHJmd29yZCB0ZW1wb3JhbCAyMzQ1LTEyMzU2LTEyMzQtMjYtMS0xMjMKK2JlZ21pZHdvcmQgdGVtcG9yYWwgMjM0NS0xMjM1Ni0xMjM0LTI2LTI1CithbHdheXMgdGVtcG9yw6RyIDIzNDUtMTIzNTYtMTIzNC0yNi0zNDUtMTIzNQord29yZCB0ZW1wb3JlIDIzNDUtMTIzNTYtMTIzNC0yNi0xNQorYWx3YXlzIHRoZWF0ZXIgMjM0NS0xMjUtMTUtMS0yMzQ1LTEyNDU2IHNob3VsZG4ndCB1c2UgdGhlIHRlLWNvbnRyYWN0aW9uCithbHdheXMgdHViZXJrdWxvc2UgMjM0NS0xMzYtMTItMTI0NTYtMTMtMTM2LTEyMy0xMzUtMjM0LTE1CitwcmZ3b3JkIHR1YmVya3Vsb3NlbiAyMzQ1LTEzNi0xMi0xMjQ1Ni0xMy0xMzYtMTIzLTEzNS0yMzQtMTQKK2JlZm9yZSBsbnIgYWx3YXlzIHR1bmRyYSAyMzQ1LTI1Ni0xNDUtMTIzNS0xCitzdWZ3b3JkIHVsdHJhID0KK2Fsd2F5cyB1bmdsZWljaCAyNTYtMTI0NS0xNDU2IHNob3VsZG4ndCB1c2UgdGhlIHVuZy1jb250cmFjdGlvbgorYWx3YXlzIHZlZ2V0YXJpZXIgMTIzNi0xNS0xMjM0Ni0yMzQ1LTM1Ni0yNC0xMjQ1NgorYmVmb3JlIGwgYWx3YXlzIHZva2FsIDEyMzYtMTM1LTEzLTI1CithbHdheXMgdsO2bGtlcmt1bmRlIDUtMTIzNi0xMy0xMjQ1Ni0xMy0yNTYtMTQ1LTE1CithbHdheXMgd2FjaHN0dW0gMjQ1Ni01Ni0yMzQtMjM0NS0xMzYtMTM0CithbHdheXMgd2FjaHN0dW1zIDI0NTYtNTYtMjM0LTIzNDUtMTM2LTEzNC0yMzQKKworYmVmb3JlIGxuciBhbHdheXMgeW9nYSA9CithbHdheXMgemllZ2VsIDEzNTYtMzQ2LTEyNDUtMTM0NTYgc2hvdWxkbid0IHVzZSB0aGUgZ2UtY29udHJhY3Rpb24KK2Fsd2F5cyB6dWdiZWdsZWl0ZXIgMTM1Ni0xMzYtMTI0NS0yMy0xMjQ1LTEyMy0xNDYtMjM0NS0xMjQ1NgorYWx3YXlzIHp1Z2tyYWZ0IDEzNTYtMTM2LTEyNDUtMTMtMTI0CithbHdheXMgenVna3LDpGZ0IDEzNTYtMTM2LTEyNDUtNS0xMy0xMjQKK3dvcmQgenVnbWl0dGUgMTM1Ni0xMzYtMTI0NS0xMzQtMjQtMjM0NS0yMzYKK2Fsd2F5cyB6dWd0ZW1wbyAxMzU2LTEzNi0xMjQ1LTIzNDUtMTIzNTYtMTIzNC0xMzUKK2Fsd2F5cyB6d2lsbGluZyAxMzU2LTI0NTYtMjQtMTIzNDUtMzUtMTI0NQorcHJmd29yZCB6d2lsbGluZ2UgMTM1Ni0yNDU2LTI0LTEyMzQ1LTM1LTEyMzQ2CitiZWZvcmUga29uc29uYW50IGFsd2F5cyB6d2lsbGluZ3MgMTM1Ni0yNDU2LTI0LTEyMzQ1LTM1LTEyNDUtMjM0CithbHdheXMgenlwcmVzc2VuIDEzNTYtNi0xMzQ1Ni0xMjM0LTEyMzUtMTUtMjM0Ni0xNAorCisjIERvcHBlbHZva2FsZQorYWx3YXlzIGVyZGJlZXIgMTI0NTYtMTQ1LTEyLTE1LTE1LTEyMzUKK2Fsd2F5cyB3YWxkYmVlciAyNDU2LTI1LTE0NS0xMi0xNS0xNS0xMjM1CithbHdheXMgendlcmdlcmRiZWVyIDEzNTYtMjQ1Ni0xMjQ1Ni0xMjQ1LTEyNDU2LTE0NS0xMi0xNS0xNS0xMjM1CithbHdheXMgZnJpc2JlZSAxMjQtMTIzNS0yNC0yMzQtMTItMTUtMTUKK2Fsd2F5cyBrYWZmZWUgPQorYWx3YXlzIGNvZmZlZSA2LTE0LTEzNS0xMjQtMTI0LTE1LTE1CithbHdheXMgdG9mZmVlIDIzNDUtMTM1LTEyNC0xMjQtMTUtMTUKK2Fsd2F5cyBkcmFnZWUgPQorYWx3YXlzIGJ1bmdlZSAxMi0yNTYtMTI0NS0xNS0xNQorYWx3YXlzIGRvcm90aGVlIDE0NS0yNi0xMzUtMjM0NS0xMjUtMTUtMTUKK2Fsd2F5cyBjaGVlc2UgMTQ1Ni0xNS0xNS0yMzQtMTUKK2Fsd2F5cyBwYXBwbWFzY2hlZSAxMjM0LTEtMTIzNC0xMjM0LTEzNC0xLTE1Ni0xNS0xNQorYWx3YXlzIGtsaXNjaGVlIDEzLTEyMy0yNC0xNTYtMTUtMTUKK2Fsd2F5cyB5YW5rZWUgNi0xMzQ1Ni0yMzUtMTMtMTUtMTUKK3N1ZndvcmQgdGVlbmllIDIzNDUtMTUtMTUtMTM0NS0zNDYKK3N1ZndvcmQgdGVlbmFnZXIgMjM0NS0xNS0xNS0xMzQ1LTEtMTI0NS0xMjQ1NgorYWx3YXlzIGdlbGVlIDEyNDUtMTM0NTYtMTUtMTUKK3ByZndvcmQgZ2VsZWVydGUgMTIzNDYtMTIzLTE1LTE1LTEyMzUtMjM2CithbHdheXMgZ2VsZWVydCAxMjM0Ni0xMjMtMTUtMTUtMTIzNS0yMzQ1CisKK2Fsd2F5cyBzb3VmZmxlZSA9CithbHdheXMgZGVmaWxlZSAxNDUtMTUtMTI0LTI0LTEyMy0xNS0xNQorYWx3YXlzIGtsZWUgPQorYmVnd29yZCB0ZWUgPQorYWx3YXlzIHJlbm9tbWVlIDEyMzUtMTQtMTM1LTEzNDYtMTUtMTUKK2Fsd2F5cyBhcm1lZSAzNTYtMTM0LTE1LTE1CithbHdheXMgcmVzw7xtZWUgMTIzNS0xMjM0NTYtMTI1Ni0xMzQtMTUtMTUKK2Fsd2F5cyBzY2huZWUgMTU2LTEzNDUtMTUtMTUKK2Fsd2F5cyB0cmFpbmVlIDIzNDUtMTIzNS0xLTI0LTEzNDUtMTUtMTUKK2Fsd2F5cyBwcmFsaW5lZSAxMjM0LTEyMzUtMS0xMjMtMzUtMTUtMTUKK2Fsd2F5cyBwb3J0bW9uZWUgMTIzNC0yNi0yMzQ1LTEzNC0xMzUtMTM0NS0xNS0xNQorYWx3YXlzIGthbmFwZWUgMTMtMjM1LTEtMTIzNC0xNS0xNQorYWx3YXlzIHBvcnRlcGVlIDEyMzQtMjYtMjM2LTEyMzQtMTUtMTUKK2Fsd2F5cyBzZXBhcmVlIDIzNC0xNS0xMjM0LTM1Ni0xNS0xNQorYWx3YXlzIHJlZmVyZWUgMTIzNS0xNS0xMjQtMTI0NTYtMTUtMTUKK2Fsd2F5cyBzY2hpa29yZWUgMTU2LTI0LTEzLTI2LTE1LTE1CithbHdheXMgc3ByZWUgMjM0LTEyMzQtMTIzNS0xNS0xNQorYWx3YXlzIGthcnJlZSAxMy0zNTYtMTIzNS0xNS0xNQorYWx3YXlzIHBvcnJlZSAxMjM0LTI2LTEyMzUtMTUtMTUKK2Fsd2F5cyBww7xyZWUgMTIzNC0xMjU2LTEyMzUtMTUtMTUKK2Fsd2F5cyBmcmlrYXNzZWUgMTI0LTEyMzUtMjQtMTMtMS0yMzQ2LTE1LTE1CithbHdheXMgcGxpc3NlZSAxMjM0LTEyMy0yNC0yMzQ2LTE1LTE1CithbHdheXMgdmFyaWV0ZWUgMTIzNi0zNTYtMjQtMTUtMjM0NS0xNS0xNQorYWx3YXlzIGtvbWl0ZWUgPQorYWx3YXlzIHRydXN0ZWUgMjM0NS0xMjM1LTEzNi0yMzQ1Ni0xNS0xNQorYWx3YXlzIGZyb3R0ZWUgMTI0LTEyMzUtMTM1LTIzNDUtMjM0NS0xNS0xNQorYWx3YXlzIHF1ZWVuID0KK2Fsd2F5cyBoYWxsb3dlZW4gMTI1LTEtMTIzNDUtMTM1LTI0NTYtMTUtMTUtMTM0NQorCithbHdheXMgaGF3YWlpID0KK2Fsd2F5cyBhc2NpaSA9CisKK2Fsd2F5cyBib29tID0KK2Fsd2F5cyB2b29kb28gPQorYWx3YXlzIHlhaG9vID0KK2Fsd2F5cyB3YXRlcmxvbyAyNDU2LTEtMjM0NS0xMjQ1Ni0xMjMtMTM1LTEzNQorYWx3YXlzIHNoYW1wb28gPQorYWx3YXlzIHRhdHRvbyA9CithbHdheXMgZGFld29vID0KK2Fsd2F5cyB6b28gPQpkaWZmIC0tZ2l0IGEvVGFibGVzL0NvbnRyYWN0aW9uL2RlLmN0YiBiL1RhYmxlcy9Db250cmFjdGlvbi9kZS5jdGIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZThkZTY1NQotLS0gL2Rldi9udWxsCisrKyBiL1RhYmxlcy9Db250cmFjdGlvbi9kZS5jdGIKQEAgLTAsMCArMSwyMSBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorIyAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyMKKyMgQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorIworIyBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorIworIyBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisjIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyMgbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisjCisjIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMgQlJMVFRZIENvbnRyYWN0aW9uIFRhYmxlIC0gR2VybWFuCisKK2luY2x1ZGUgZGUtZzIuY3RiCmRpZmYgLS1naXQgYS9UYWJsZXMvQ29udHJhY3Rpb24vZW4tdWViLWcxLmN0YiBiL1RhYmxlcy9Db250cmFjdGlvbi9lbi11ZWItZzEuY3RiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZhM2U4YjUKLS0tIC9kZXYvbnVsbAorKysgYi9UYWJsZXMvQ29udHJhY3Rpb24vZW4tdWViLWcxLmN0YgpAQCAtMCwwICsxLDE3MCBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorIyAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyMKKyMgQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorIworIyBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorIworIyBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisjIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyMgbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisjCisjIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMgQlJMVFRZIENvbnRyYWN0aW9uIFRhYmxlIC0gRW5nbGlzaCAoVUVCLCBncmFkZSAxKQorIyBDcmVhdGVkIGJ5IE1pY2hhZWwgQ3VycmFuIDxtaWNrQGt1bGdhbi5uZXQ+CisKKyNUaGlzIGlzIGJ5IG5vIG1lYW5zIGNvbXBsZXRlLCBidXQgYXQgbGVhc3QgYWxsIHRoZSBpbXBvcnRhbnQgYXNjaWkgc3ltYm9scyBhbmQgZ2VuZXJhbCBncmFkZSAyIGNvbnRyYWN0aW9ucyBhcmUgaGVyZS4KKyNJIGFtIHRyeWluZyB0byBjb21wcmVzcyBzcGFjZSBhcyBtdWNoIGFzIHBvc3NpYmxlIHNvIGEgbG90IG9mIHN5bGxhYmxlIGJvdW5kYXJ5IHJ1bGVzIGhhdm4ndCBiZWVuIGluY2x1ZGVkLgorCisjU3BlY2lhbCBzaWducworY2Fwc2lnbiA2CitiZWdjYXBzIDYtNgorZW5kY2FwcyA2LTMKK2xldHNpZ24gNTYKKworI051bWJlcnMKK251bXNpZ24gMzQ1NgorYWx3YXlzIDEgMQorYWx3YXlzIDIgMTIKK2Fsd2F5cyAzIDE0CithbHdheXMgNCAxNDUKK2Fsd2F5cyA1IDE1CithbHdheXMgNiAxMjQKK2Fsd2F5cyA3IDEyNDUKK2Fsd2F5cyA4IDEyNQorYWx3YXlzIDkgMjQKK2Fsd2F5cyAwIDI0NQorbWlkbnVtIC4gMjU2CittaWRudW0gLCAyCittaWRudW0gXHMgNQorCitpbmNsdWRlIGxldHRlcnMtbGF0aW4uY3RpCithbHdheXMgXHMgMCAgCityZXBlYXRhYmxlIFxzXHMgMC0wCithbHdheXMgXHQgNDU2LTIzNDUKKworYWx3YXlzICIgNi0yMzU2CithbHdheXMgJyAzCisKK2Fsd2F5cyAsIDIKK2Fsd2F5cyA7IDIzCithbHdheXMgOiAyNQorYWx3YXlzIC4gMjU2CithbHdheXMgISAyMzUKK2Fsd2F5cyA/IDIzNgorCithbHdheXMgKCA1LTEyNgorYWx3YXlzICkgNS0zNDUKK2Fsd2F5cyBbIDQ2LTEyNgorYWx3YXlzIF0gNDYtMzQ1CithbHdheXMgeyA0NTYtMTI2CithbHdheXMgfSA0NTYtMzQ1CithbHdheXMgPCA0LTEyNgorYWx3YXlzID4gNC0zNDUKKworYWx3YXlzIHwgNDU2LTEyNTYKK2Fsd2F5cyAvIDQ1Ni0zNAorYWx3YXlzIFxcIDQ1Ni0xNgorCithbHdheXMgYCA0Ni0xNgorYWx3YXlzIH4gNC0zNQorYWx3YXlzIEAgNC0xCithbHdheXMgIyA0NTYtMTQ1NgorYWx3YXlzICQgNC0yMzQKK2Fsd2F5cyAlIDQ2LTM1NgorYWx3YXlzIF4gNC0yNgorYWx3YXlzICYgNC0xMjM0NgorYWx3YXlzICogNS0zNQorYWx3YXlzIC0gMzYKK2Fsd2F5cyBfIDQ2LTM2CithbHdheXMgPSA1LTIzNTYKK2Fsd2F5cyArIDUtMjM1CisKKyMgaHR0cDovL3d3dy5icmFpbGxlYXV0aG9yaXR5Lm9yZy91ZWIvc3ltYm9sc19saXN0LnBkZgorYWx3YXlzCVx4QTEJNDUtNTYtMjM1CSMgwqEg4qCY4qCw4qCWCWludmVydGVkIGV4Y2xhbWF0aW9uIG1hcmsgLSAxMy41CithbHdheXMJXHhBMgk0LTE0CSMgwqIg4qCI4qCJCWNlbnQgLSAzLjEwCithbHdheXMJXHhBMwk0LTEyMwkjIMKjIOKgiOKghwlwb3VuZCAoc3RlcmxpbmcpIC0gMy4xMAorYWx3YXlzCVx4QTUJNC0xMzQ1NgkjIMKlIOKgiOKgvQl5ZW4gKEphcGFuKSAtIDMuMTAKK2Fsd2F5cwlceEE3CTQ1LTIzNAkjIMKnIOKgmOKgjglzZWN0aW9uIC0gMy4xOQorYWx3YXlzCVx4QTkJNDUtMTQJIyDCqSDioJjioIkJY29weXJpZ2h0IC0gMy44CithbHdheXMJXHhBRQk0NS0xMjM1CSMgwq4g4qCY4qCXCXJlZ2lzdGVyZWQgLSAzLjgKK2Fsd2F5cwlceEIwCTQ1LTI0NQkjIMKwIOKgmOKgmglkZWdyZWUgLSAzLjExCithbHdheXMJXHhCNgk0NS0xMjM0CSMgwrYg4qCY4qCPCXBhcmFncmFwaCAtIDMuMTkKK2Fsd2F5cwlceEJGCTQ1LTU2LTIzNgkjIMK/IOKgmOKgsOKgpglpbnZlcnRlZCBxdWVzdGlvbiBtYXJrIC0gMTMuNQorYWx3YXlzCVx1MDMwMAk0NS0xNgkjIGAg4qCY4qChCWdyYXZlIGFjY2VudCAoY29tYmluaW5nKSAtIDQuMgorYWx3YXlzCVx1MDMwMQk0NS0zNAkjIMK0IOKgmOKgjAlhY3V0ZSBhY2NlbnQgKGNvbWJpbmluZykgLSA0LjIKK2Fsd2F5cwlcdTAzMDIJNDUtMTQ2CSMgXiDioJjioKkJY2lyY3VtZmxleCBhY2NlbnQgKGNvbWJpbmluZykgLSA0LjIKK2Fsd2F5cwlcdTAzMDMJNDUtMTI0NTYJIyB+IOKgmOKgvQl0aWxkZSAoY29tYmluaW5nKSAtIDQuMgorYWx3YXlzCVx1MDMwOAk0NS0yNQkjIMKoIOKgmOKgkglkaWFlcmVzaXMgKGNvbWJpbmluZykgLSA0LjIKK2Fsd2F5cwlcdTAzMEEJNDUtMTI0NgkjIMuaIOKgmOKgqwlyaW5nIGFib3ZlIChjb21iaW5pbmcpIC0gNC4yCithbHdheXMJXHUwMzI3CTQ1LTEyMzQ2CSMgwrgg4qCY4qCvCWNlZGlsbGEgKGNvbWJpbmluZykgLSA0LjIKK2Fsd2F5cwlcdTIwMTQJNi0zNgkjIOKAlCDioKDioKQJZGFzaCAtIDcuMgorYWx3YXlzCVx1MjAyMAk0LTYtMTQ1NgkjIOKAoCDioIjioKDioLkJZGFnZ2VyIC0gMy4zCithbHdheXMJXHUyMDIxCTQtNi0xMjQ1NgkjIOKAoSDioIjioKDioLsJZG91YmxlIGRhZ2dlciAtIDMuMworYWx3YXlzCVx1MjAyMgk0NTYtMjU2CSMg4oCiIOKguOKgsglidWxsZXQgLSAzLjUKK2Fsd2F5cwlcdTIwQTMJNC0xMjQJIyDigqMg4qCI4qCLCWZyYW5jIChGcmFuY2UpIC0gMy4xMAorYWx3YXlzCVx1MjBBNgk0LTEzNDUJIyDigqYg4qCI4qCdCW5haXJhIChOaWdlcmlhKSAtIDMuMTAKK2Fsd2F5cwlcdTIwQUMJNC0xNQkjIOKCrCDioIjioJEJZXVybyAtIDMuMTAKK2Fsd2F5cwlcdTIxMjIJNDUtMjM0NQkjIOKEoiDioJjioJ4JdHJhZGUgbWFyayAtIDMuOAorYWx3YXlzCVx1MjY0MAk0NS0xMzQ2CSMg4pmAIOKgmOKgrQlmZW1hbGUgKFZlbnVzKSAtIDMuMTYKK2Fsd2F5cwlcdTI2NDIJNDUtMTM0NTYJIyDimYIg4qCY4qC9CW1hbGUgKE1hcnMpIC0gMy4xNgorYWx3YXlzCVx1MzAwMwk1LTIJIyDjgIMg4qCQ4qCCCWRpdHRvIG1hcmsgLSAzLjEyCisKKyMgaHR0cDovL3d3dy5icmFpbGxlYXV0aG9yaXR5Lm9yZy91ZWIvR3VpZGVsaW5lc19mb3JfVGVjaG5pY2FsX01hdGVyaWFsXzIwMDgtMTAucGRmCithbHdheXMJXHgyQgk1LTIzNQkjICsg4qCQ4qCWCXBsdXMKK2Fsd2F5cwlceEIxCTQ1Ni0yMzUJIyDCsSDioLjioJYJcGx1cyBvciBtaW51cyAocGx1cyBvdmVyIG1pbnVzKQorYWx3YXlzCVx4QjcJNS0yNTYJIyDCtyDioJDioLIJbXVsdGlwbGljYXRpb24gKG1pZGRsZSBkb3QpCithbHdheXMJXHhENwk1LTIzNgkjIMOXIOKgkOKgpgltdWx0aXBsaWNhdGlvbiAoY3Jvc3MpCithbHdheXMJXHhGNwk1LTM0CSMgw7cg4qCQ4qCMCWRpdmlzaW9uIChob3Jpem9udGFsIGxpbmUgYmV0d2VlbiBkb3RzKQorYWx3YXlzCVx1MjAzMgkyMzU2CSMg4oCyIOKgtglwcmltZSAoZmVldCwgbWludXRlcykKK2Fsd2F5cwlcdTIwMzMJMjM1Ni0yMzU2CSMg4oCzIOKgtuKgtglkb3VibGUgcHJpbWUgKGluY2hlcywgc2Vjb25kcykKK2Fsd2F5cwlcdTIyMTIJNS0zNgkjIOKIkiDioJDioKQJbWludXMKK2Fsd2F5cwlcdTIyMTMJNDU2LTM2CSMg4oiTIOKguOKgpAltaW51cyBvciBwbHVzIChtaW51cyBvdmVyIHBsdXMpCithbHdheXMJXHUyMjFECTQ1Ni01LTIzNTYJIyDiiJ0g4qC44qCQ4qC2CXByb3BvcnRpb25hbCB0bworYWx3YXlzCVx1MjI0Mwk0NTYtMzUJIyDiiYMg4qC44qCUCWFzeW1wdG9tYXRpY2FsbHkgZXF1YWwgdG8gKHRpbGRlIG92ZXIgaG9yaXpvbnRhbCBsaW5lKQorYWx3YXlzCVx1MjI0NQk1LTQ1Ni0zNQkjIOKJhSDioJDioLjioJQJYXBwcm94aW1hdGVseSBlcXVhbCB0byAodGlsZGUgb3ZlciBlcXVhbHMgc2lnbikKK2Fsd2F5cwlcdTIyNDgJNDUtMzUJIyDiiYgg4qCY4qCUCWFsbW9zdCBlcXVhbCB0byAodGlsZGUgb3ZlciB0aWxkZSkKK2Fsd2F5cwlcdTIyNEYJNDUtNS0yMzU2CSMg4omPIOKgmOKgkOKgtglkaWZmZXJlbmNlIGJldHdlZW4gKGVxdWFscyBzaWduIHdpdGggYnVtcCBpbiB0b3AgYmFyKQorYWx3YXlzCVx1MjI1MQk0Ni01LTIzNTYJIyDiiZEg4qCo4qCQ4qC2CWdlb21ldHJpY2FsbHkgZXF1YWwgdG8gKGVxdWFscyBzaWduIGRvdHRlZCBhYm92ZSBhbmQgYmVsb3cpCithbHdheXMJXHUyMjYwCTUtMjM1Ni00LTE1NgkjIOKJoCDioJDioLbioIjioLEJbm90IGVxdWFsIHRvIChsaW5lIHRocm91Z2ggZXF1YWxzIHNpZ24pCithbHdheXMJXHUyMjYxCTQ1Ni0xMjM0NTYJIyDiiaEg4qC44qC/CWlkZW50aWNhbCB0byAodGhyZWUgaG9yaXpvbnRhbCBsaW5lcykKK2Fsd2F5cwlcdTIyNjQJNDU2LTQtMTI2CSMg4omkIOKguOKgiOKgowlsZXNzIHRoYW4gb3IgZXF1YWwgdG8KK2Fsd2F5cwlcdTIyNjUJNDU2LTQtMzQ1CSMg4omlIOKguOKgiOKgnAlncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8KK2Fsd2F5cwlcdTIyNkEJNDYtNC0xMjYJIyDiiaog4qCo4qCI4qCjCW11Y2ggbGVzcyB0aGFuCithbHdheXMJXHUyMjZCCTQ2LTQtMzQ1CSMg4omrIOKgqOKgiOKgnAltdWNoIGdyZWF0ZXIgdGhhbgorCisjIFRoZSBHcmVlayBsZXR0ZXJzCithbHdheXMJXHUwM0IxCTQ2LTEJIyDOsSDioKjioIEJYWxwaGEKK2Fsd2F5cwlcdTAzQjIJNDYtMTIJIyDOsiDioKjioIMJYmV0YQorYWx3YXlzCVx1MDNCMwk0Ni0xMjQ1CSMgzrMg4qCo4qCbCWdhbW1hCithbHdheXMJXHUwM0I0CTQ2LTE0NQkjIM60IOKgqOKgmQlkZWx0YQorYWx3YXlzCVx1MDNCNQk0Ni0xNQkjIM61IOKgqOKgkQllcHNpbG9uCithbHdheXMJXHUwM0I2CTQ2LTEzNTYJIyDOtiDioKjioLUJemV0YQorYWx3YXlzCVx1MDNCNwk0Ni0xNTYJIyDOtyDioKjioLEJZXRhCithbHdheXMJXHUwM0I4CTQ2LTE0NTYJIyDOuCDioKjioLkJdGhldGEKK2Fsd2F5cwlcdTAzQjkJNDYtMjQJIyDOuSDioKjioIoJaW90YQorYWx3YXlzCVx1MDNCQQk0Ni0xMwkjIM66IOKgqOKghQlrYXBwYQorYWx3YXlzCVx1MDNCQgk0Ni0xMjMJIyDOuyDioKjioIcJbGFtZGEKK2Fsd2F5cwlcdTAzQkMJNDYtMTM0CSMgzrwg4qCo4qCNCW11CithbHdheXMJXHUwM0JECTQ2LTEzNDUJIyDOvSDioKjioJ0JbnUKK2Fsd2F5cwlcdTAzQkUJNDYtMTM0NgkjIM6+IOKgqOKgrQl4aQorYWx3YXlzCVx1MDNCRgk0Ni0xMzUJIyDOvyDioKjioJUJb21pY3JvbgorYWx3YXlzCVx1MDNDMAk0Ni0xMjM0CSMgz4Ag4qCo4qCPCXBpCithbHdheXMJXHUwM0MxCTQ2LTEyMzUJIyDPgSDioKjioJcJcmhvCithbHdheXMJXHUwM0MyCTQ2LTIzNAkjIM+CIOKgqOKgjglmaW5hbCBzaWdtYQorYWx3YXlzCVx1MDNDMwk0Ni0yMzQJIyDPgyDioKjioI4Jc2lnbWEKK2Fsd2F5cwlcdTAzQzQJNDYtMjM0NQkjIM+EIOKgqOKgngl0YXUKK2Fsd2F5cwlcdTAzQzUJNDYtMTM2CSMgz4Ug4qCo4qClCXVwc2lsb24KK2Fsd2F5cwlcdTAzQzYJNDYtMTI0CSMgz4Yg4qCo4qCLCXBoaQorYWx3YXlzCVx1MDNDNwk0Ni0xMjM0NgkjIM+HIOKgqOKgrwljaGkKK2Fsd2F5cwlcdTAzQzgJNDYtMTM0NTYJIyDPiCDioKjioL0JcHNpCithbHdheXMJXHUwM0M5CTQ2LTI0NTYJIyDPiSDioKjioLoJb21lZ2EKKworIyBpbmxpbmUgY29udHJhY3Rpb24gb2YgZW1vamkgZGVzY3JpcHRpb25zCitlbW9qaSBlbgpkaWZmIC0tZ2l0IGEvVGFibGVzL0NvbnRyYWN0aW9uL2VuLXVlYi1nMi5jdGIgYi9UYWJsZXMvQ29udHJhY3Rpb24vZW4tdWViLWcyLmN0YgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NTVhMjczCi0tLSAvZGV2L251bGwKKysrIGIvVGFibGVzL0NvbnRyYWN0aW9uL2VuLXVlYi1nMi5jdGIKQEAgLTAsMCArMSwzMjYgQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyMgICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisjCisjIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyMKKyMgQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjIEJSTFRUWSBDb250cmFjdGlvbiBUYWJsZSAtIEVuZ2xpc2ggKFVFQiwgZ3JhZGUgMikKKyMgQ3JlYXRlZCBieSBNaWNoYWVsIEN1cnJhbiA8bWlja0BrdWxnYW4ubmV0PgorCisjVGhpcyBpcyBieSBubyBtZWFucyBjb21wbGV0ZSwgYnV0IGF0IGxlYXN0IGFsbCB0aGUgaW1wb3J0YW50IGFzY2lpIHN5bWJvbHMgYW5kIGdlbmVyYWwgZ3JhZGUgMiBjb250cmFjdGlvbnMgYXJlIGhlcmUuCisjSSBhbSB0cnlpbmcgdG8gY29tcHJlc3Mgc3BhY2UgYXMgbXVjaCBhcyBwb3NzaWJsZSBzbyBhIGxvdCBvZiBzeWxsYWJsZSBib3VuZGFyeSBydWxlcyBoYXZuJ3QgYmVlbiBpbmNsdWRlZC4KKworI2dldCB0aGUgc2luZ2xlIGNoYXJhY3RlciBkZWZpbml0aW9ucyBmcm9tIHRoZSBncmFkZSAxIHJ1bGVzCitpbmNsdWRlIGVuLXVlYi1nMS5jdGIKKworI0xhcmdlc3QgY29udHJhY3Rpb25zCit3b3JkIGEgPQord29yZCBhYm91dCAxLTEyCitjb250cmFjdGlvbiBhYgord29yZCBhYm92ZSAxLTEyLTEyMzYKK2NvbnRyYWN0aW9uIGFidgorc3Vmd29yZCBhY2NvcmRpbmcgMS0xNAorY29udHJhY3Rpb24gYWMKK3dvcmQgYWNyb3NzIDEtMTQtMTIzNQorY29udHJhY3Rpb24gYWNyCit3b3JkIGFmdGVyIDEtMTI0Citjb250cmFjdGlvbiBhZgorc3Vmd29yZCBhZnRlcndhcmQgMS0xMjQtMjQ1NgorY29udHJhY3Rpb24gYWZ3CitzdWZ3b3JkIGFmdGVybm9vbiAxLTEyNC0xMzQ1Citjb250cmFjdGlvbiBhZm4KK3dvcmQgYWdhaW4gMS0xMjQ1Citjb250cmFjdGlvbiBhZword29yZCBhZ2FpbnN0IDEtMTI0NS0zNAorY29udHJhY3Rpb24gYWdzdAord29yZCBhbG1vc3QgMS0xMjMtMTM0Citjb250cmFjdGlvbiBhbG0KK3dvcmQgYWxyZWFkeSAxLTEyMy0xMjM1Citjb250cmFjdGlvbiBhbHIKK3dvcmQgYWxzbyAxLTEyMworY29udHJhY3Rpb24gYWwKK3dvcmQgYWx0aG91Z2ggMS0xMjMtMTQ1Ngord29yZCBhbHRoID0KK3dvcmQgYWx0b2dldGhlciAxLTEyMy0yMzQ1Citjb250cmFjdGlvbiBhbHQKK3dvcmQgYWx3YXlzIDEtMTIzLTI0NTYKK2NvbnRyYWN0aW9uIGFsdword29yZCBhcyAxMzU2Citjb250cmFjdGlvbiBhcword29yZCBiZSAyMworY29udHJhY3Rpb24gYmUKK3dvcmQgYmVjYXVzZSAyMy0xNAord29yZCBiZWMgPQord29yZCBiZWZvcmUgMjMtMTI0Cit3b3JkIGJlZiA9Cit3b3JkIGJlaGluZCAyMy0xMjUKK3dvcmQgYmVoID0KK3dvcmQgYmVsb3cgMjMtMTIzCit3b3JkIGJlbCA9Cit3b3JkIGJlbmVhdGggMjMtMTM0NQorc3Vmd29yZCBiZXNpZGUgMjMtMjM0CitzdWZ3b3JkIGJlcyA9CitzdWZ3b3JkIGJldHdlZW4gMjMtMjM0NQorc3Vmd29yZCBiZXQgPQord29yZCBiZXlvbmQgMjMtMTM0NTYKK3dvcmQgYmV5ID0KK3N1ZndvcmQgYmxpbmQgMTItMTIzCitjb250cmFjdGlvbiBibAorc3Vmd29yZCBicmFpbGxlIDEyLTEyMzUtMTIzCitjb250cmFjdGlvbiBicmwKK3dvcmQgYnV0IDEyCitjb250cmFjdGlvbiBiCit3b3JkIGNhbiAxNAorY29udHJhY3Rpb24gYworc3Vmd29yZCBjb25jZWl2ZSAyNS0xNC0xMjM2Citjb250cmFjdGlvbiBjb25jdgorc3Vmd29yZCBjb25jZWl2aW5nIDI1LTE0LTEyMzYtMTI0NQorY29udHJhY3Rpb24gY29uY3ZnCit3b3JkIGNvdWxkIDE0LTE0NQorY29udHJhY3Rpb24gY2QKK3dvcmQgY2Fubm90IDQ1Ni0xNAorc3Vmd29yZCBjaGFyYWN0ZXIgNS0xNgord29yZCBjaGlsZHJlbiAxNi0xMzQ1Cit3b3JkIGNobiA9CithbHdheXMgZGF5IDUtMTQ1CithbHdheXMgZGVjZWl2ZSAxNDUtMTQtMTIzNgorY29udHJhY3Rpb24gZGN2CithbHdheXMgZGVjZWl2aW5nIDE0NS0xNC0xMjM2LTEyNDUKK2NvbnRyYWN0aW9uIGRjdmcKK3dvcmQgZGVjbGFyZSAxNDUtMTQtMTIzCitjb250cmFjdGlvbiBkY2wKK3dvcmQgZG8gMTQ1Citjb250cmFjdGlvbiBkCit3b3JkIGVpdGhlciAxNS0yNAorY29udHJhY3Rpb24gZWkKK2xvd3dvcmQgZW5vdWdoIDI2Citjb250cmFjdGlvbiBlbgord29yZCBldmVyeSAxNQorY29udHJhY3Rpb24gZQorYWx3YXlzIGZhdGhlciA1LTEyNAorYWx3YXlzIGZpcnN0IDEyNC0zNAorYWx3YXlzIGZzdCA9Cit3b3JkIGZyb20gMTI0Citjb250cmFjdGlvbiBmCithbHdheXMgZnJpZW5kIDEyNC0xMjM1Citjb250cmFjdGlvbiBmcgord29yZCBnbyAxMjQ1Citjb250cmFjdGlvbiBnCithbHdheXMgZ29vZCAxMjQ1LTE0NQorY29udHJhY3Rpb24gZ2QKK3dvcmQgZ3JlYXQgMTI0NS0xMjM1LTIzNDUKK2NvbnRyYWN0aW9uIGdydAord29yZCBoYWQgNDU2LTEyNQord29yZCBoYXZlIDEyNQorY29udHJhY3Rpb24gaAorYWx3YXlzIGhlcmUgNS0xMjUKK3dvcmQgaGVyc2VsZiAxMjUtMTI0NTYtMTI0Citjb250cmFjdGlvbiBoZXJmCit3b3JkIGhpbSAxMjUtMTM0Citjb250cmFjdGlvbiBobQord29yZCBoaW1zZWxmIDEyNS0xMzQtMTI0Citjb250cmFjdGlvbiBobWYKK2xvd3dvcmQgaGlzIDIzNgord29yZCBpID0KK3N1ZndvcmQgaW1tZWRpYXRlIDI0LTEzNC0xMzQKK2NvbnRyYWN0aW9uIGltbQord29yZCBpdCAxMzQ2Citjb250cmFjdGlvbiB4Cit3b3JkIGl0cyAxMzQ2LTIzNAorY29udHJhY3Rpb24geHMKK3dvcmQgaXRzZWxmIDEzNDYtMTI0Citjb250cmFjdGlvbiB4Zgord29yZCBqdXN0IDI0NQorY29udHJhY3Rpb24gagord29yZCBrbm93bGVkZ2UgMTMKK2NvbnRyYWN0aW9uIGsKK2Fsd2F5cyBrbm93IDUtMTMKK3N1ZndvcmQgbGV0dGVyIDEyMy0xMjM1Citjb250cmFjdGlvbiBscgord29yZCBsaWtlIDEyMworY29udHJhY3Rpb24gbAord29yZCBsaXR0bGUgMTIzLTEyMworY29udHJhY3Rpb24gbGwKK3N1ZndvcmQgbG9yZCA1LTEyMword29yZCBtb3JlIDEzNAorY29udHJhY3Rpb24gbQorc3Vmd29yZCBtb3RoZXIgNS0xMzQKK3N1ZndvcmQgbXVjaCAxMzQtMTYKK2NvbnRyYWN0aW9uIG1jaAord29yZCBtdXN0IDEzNC0zNAorY29udHJhY3Rpb24gbXN0Cit3b3JkIG15c2VsZiAxMzQtMTM0NTYtMTI0Citjb250cmFjdGlvbiBteWYKK3N1ZndvcmQgbmFtZSA1LTEzNDUKK3N1ZndvcmQgbmVjZXNzYXJ5IDEzNDUtMTUtMTQKK2NvbnRyYWN0aW9uIG5lYword29yZCBuZWl0aGVyIDEzNDUtMTUtMjQKK2NvbnRyYWN0aW9uIG5laQord29yZCBub3QgMTM0NQorY29udHJhY3Rpb24gbgord29yZCBvdXJzZWx2ZXMgMTI1Ni0xMjM1LTEyMzYtMjM0Citjb250cmFjdGlvbiBvdXJ2cword29yZCBwYWlkIDEyMzQtMTQ1Citjb250cmFjdGlvbiBwZAord29yZCBwZW9wbGUgMTIzNAorY29udHJhY3Rpb24gcAorYWx3YXlzIHBlcmNlaXZlIDEyMzQtMTI0NTYtMTQtMTIzNgorY29udHJhY3Rpb24gcGVyY3YKK2Fsd2F5cyBwZXJjZWl2aW5nIDEyMzQtMTI0NTYtMTQtMTIzNi0xMjQ1Citjb250cmFjdGlvbiBwZXJjdmcKK3dvcmQgcGVyaGFwcyAxMjM0LTEyNDU2LTEyNQorY29udHJhY3Rpb24gcGVyaAorc3Vmd29yZCBxdWljayAxMjM0NS0xMworY29udHJhY3Rpb24gcWsKK3dvcmQgcXVpdGUgMTIzNDUKK2NvbnRyYWN0aW9uIHEKK2Fsd2F5cyBxdWVzdGlvbiA1LTEyMzQ1Cit3b3JkIHJhdGhlciAxMjM1Citjb250cmFjdGlvbiByCithbHdheXMgcmVjZWl2ZSAxMjM1LTE0LTEyMzYKK2NvbnRyYWN0aW9uIHJjdgorYWx3YXlzIHJlY2VpdmluZyAxMjM1LTE0LTEyMzYtMTI0NQorY29udHJhY3Rpb24gcmN2ZworYWx3YXlzIHJlam9pY2UgMTIzNS0yNDUtMTQKK2NvbnRyYWN0aW9uIHJqYword29yZCBzYWlkIDIzNC0xNDUKK2NvbnRyYWN0aW9uIHNkCit3b3JkIHNoYWxsIDE0NgorY29udHJhY3Rpb24gc2gKK2Fsd2F5cyBzaG91bGQgMTQ2LTE0NQorY29udHJhY3Rpb24gc2hkCit3b3JkIHNvIDIzNAorY29udHJhY3Rpb24gcworYWx3YXlzIHNvbWUgNS0yMzQKK2Fsd2F5cyBzcGlyaXQgNDU2LTIzNAord29yZCBzdGlsbCAzNAorY29udHJhY3Rpb24gc3QKK3dvcmQgc3VjaCAyMzQtMTYKK2NvbnRyYWN0aW9uIHNjaAord29yZCB0aGF0IDIzNDUKK2NvbnRyYWN0aW9uIHQKK3dvcmQgdGhpcyAxNDU2Citjb250cmFjdGlvbiB0aAord29yZCB0aHlzZWxmIDE0NTYtMTM0NTYtMTI0Citjb250cmFjdGlvbiB0aHlmCit3b3JkIHRvZGF5IDIzNDUtMTQ1Citjb250cmFjdGlvbiB0ZAord29yZCB0b21vcnJvdyAyMzQ1LTEzNAorY29udHJhY3Rpb24gdG0KK3dvcmQgdG9uaWdodCAyMzQ1LTEzNDUKK2NvbnRyYWN0aW9uIHRuCit3b3JkIHRoZW1zZWx2ZXMgMjM0Ni0xMzQtMTIzNi0yMzQKK2NvbnRyYWN0aW9uIHRoZW12cworYWx3YXlzIHRoZWlyIDQ1Ni0yMzQ2CithbHdheXMgdGhlcmUgNS0yMzQ2Cit3b3JkIHRoZXNlIDQ1LTIzNDYKK2Fsd2F5cyB0aHJvdWdoIDUtMTQ1NgorYWx3YXlzIHRvZ2V0aGVyIDIzNDUtMTI0NS0xMjM1Citjb250cmFjdGlvbiB0Z3IKK3dvcmQgdGhvc2UgNDUtMTQ1Ngord29yZCB1cG9uIDQ1LTEzNgord29yZCB1cyAxMzYKK2NvbnRyYWN0aW9uIHUKK2Fsd2F5cyB1bmRlciA1LTEzNgord29yZCB2ZXJ5IDEyMzYKK2NvbnRyYWN0aW9uIHYKK2xvd3dvcmQgd2FzIDM1Ngord29yZCB3aGljaCAxNTYKK2NvbnRyYWN0aW9uIHdoCit3b3JkIHdpbGwgMjQ1NgorY29udHJhY3Rpb24gdworbG93d29yZCB3ZXJlIDIzNTYKK2Fsd2F5cyB3aGVyZSA1LTE1NgorYWx3YXlzIHdpdGggMjM0NTYKK2Fsd2F5cyB3b3JkIDQ1LTI0NTYKK3dvcmQgd2hvc2UgNDUtMTU2CithbHdheXMgd29yayA1LTI0NTYKK2Fsd2F5cyB3b3VsZCAyNDU2LTE0NQorY29udHJhY3Rpb24gd2QKK2Fsd2F5cyB3b3JsZCA0NTYtMjQ1Ngord29yZCB5b3UgMTM0NTYKK2NvbnRyYWN0aW9uIHkKK2Fsd2F5cyB5b3VuZyA1LTEzNDU2Cit3b3JkIHlvdXIgMTM0NTYtMTIzNQorY29udHJhY3Rpb24geXIKK3dvcmQgeW91cnMgMTM0NTYtMTIzNS0yMzQKK2NvbnRyYWN0aW9uIHlycword29yZCB5b3Vyc2VsZiAxMzQ1Ni0xMjM1LTEyNAorY29udHJhY3Rpb24geXJmCit3b3JkIHlvdXJzZWx2ZXMgMTM0NTYtMTIzNS0xMjM2LTIzNAorY29udHJhY3Rpb24geXJ2cworCisjU21hbGxlciBjb250cmFjdGlvbnMKK21pZGVuZHdvcmQgYW5jZSA0Ni0xNQorbWlkZW5kd29yZCBlbmNlIDU2LTE1CithbHdheXMgZXZlciA1LTE1CithbHdheXMgZm9yIDEyMzQ1NgorbWlkZW5kd29yZCBmdWwgNTYtMTIzCittaWRlbmR3b3JkIGluZyAzNDYKK21pZGVuZHdvcmQgaXR5IDU2LTEzNDU2CittaWRlbmR3b3JkIGxlc3MgNDYtMjM0CithbHdheXMgbWFueSA0NTYtMTM0CittaWRlbmR3b3JkIG1lbnQgNTYtMjM0NQorbWlkZW5kd29yZCBlbmVzcyAxNS01Ni0yMzQKK21pZGVuZHdvcmQgaW5lc3MgMjQtNTYtMjM0CittaWRlbmR3b3JkIG5lc3MgNTYtMjM0CittaWRlbmR3b3JkIG9uZyA1Ni0xMjQ1CittaWRlbmR3b3JkICBvdW5kIDQ2LTE0NQorbWlkZW5kd29yZCBvdW50IDQ2LTIzNDUKK2Fsd2F5cyBvdWdodCA1LTEyNTYKK2Fsd2F5cyBwYXJ0IDUtMTIzNAorYWx3YXlzIHJpZ2h0IDUtMTIzNQorbWlkZW5kd29yZCBzaW9uIDQ2LTEzNDUKK2Fsd2F5cyB0aGUgMjM0NgorYWx3YXlzIHRpbWUgNS0yMzQ1CittaWRlbmR3b3JkIHRpb24gNTYtMTM0NQorCisjU21hbGxpc3QgY29udHJhY3Rpb25zCithbHdheXMgYW5kIDEyMzQ2CithbHdheXMgYXIgMzQ1CittaWR3b3JkIGJiIDIzCittaWR3b3JkIGNjIDI1CithbHdheXMgY2ggMTYKK21pZHdvcmQgZWEgMgorYWx3YXlzIGVkIDEyNDYKK2Fsd2F5cyBlbiAyNgorYWx3YXlzIGVyIDEyNDU2CittaWR3b3JkIGZmIDIzNQorbWlkd29yZCBnZyAyMzU2CithbHdheXMgZ2ggMTI2CithbHdheXMgaW4gMzUKK3dvcmQgbyA9CithbHdheXMgb2YgMTIzNTYKK2Fsd2F5cyBvbmUgNS0xMzUKK2Fsd2F5cyBvdSAxMjU2CithbHdheXMgb3cgMjQ2CithbHdheXMgc2ggMTQ2CithbHdheXMgc3QgMzQKK2Fsd2F5cyB0aCAxNDU2CithbHdheXMgd2ggMTU2CisKKyNEaXNhbWJpZ3VhdGlvbgorYWx3YXlzIGVhciAxNS0zNDUKKworZW5kd29yZCAnZCAzLTE0NQorZW5kd29yZCAnbGwgMy0xMjMtMTIzCitlbmR3b3JkICdtIDMtMTM0CitlbmR3b3JkICdyZSAzLTEyMzUtMTUKK2VuZHdvcmQgJ3MgMy0yMzQKK2VuZHdvcmQgJ3QgMy0yMzQ1CitlbmR3b3JkICd2ZSAzLTEyMzYtMTUKKworIyBpbmxpbmUgY29udHJhY3Rpb24gb2YgZW1vamkgZGVzY3JpcHRpb25zCitlbW9qaSBlbgpkaWZmIC0tZ2l0IGEvVGFibGVzL0NvbnRyYWN0aW9uL2VuLXVzLWcyLmN0YiBiL1RhYmxlcy9Db250cmFjdGlvbi9lbi11cy1nMi5jdGIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGMyYjBmYwotLS0gL2Rldi9udWxsCisrKyBiL1RhYmxlcy9Db250cmFjdGlvbi9lbi11cy1nMi5jdGIKQEAgLTAsMCArMSwxNTQzIEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisjICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorIworIyBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisjCisjIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisjCisjIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyMgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorIyBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyMKKyMgV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworIworIyBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIyBCUkxUVFkgQ29udHJhY3Rpb24gVGFibGUgLSBFbmdsaXNoIChFQkFFLCBncmFkZSAyKQorIyBDcmVhdGVkIGJ5IEpvaG4gQm95ZXIgPGRpcmVjdG9yQGNocGkub3JnPi4KKworY2xhc3Mgdm93ZWwgYWVpb3V5QUVJT1VZCitjbGFzcyBjb25zb25hbnQgYmNkZmdoamtsbW5wcXJzdHZ3eHpCQ0RGR0hKS0xNTlBRUlNUVldYWgorY2xhc3MgbyBvTworY2xhc3MgYXBvc3Ryb3BoZSAnCisKK251bXNpZ24gMzQ1NiAgbnVtYmVyIHNpZ24sIGp1c3Qgb25lIG9wZXJhbmQKK2xldHNpZ24gNTYKK2NhcHNpZ24gNgorYmVnY2FwcyA2LTYKK2VuZGNhcHMgNi0zCisjIElmIHlvdSBkb24ndCB3YW50IGNhcGl0YWxpemF0aW9uIGNvbW1lbnQgb3V0IHRoZSBwcmVjZWRpbmcgdGhyZWUgbGluZXMuCisKKyMgdGhlIGRlY2ltYWwgZGlnaXRzCithbHdheXMgMSAxCithbHdheXMgMiAxMgorYWx3YXlzIDMgMTQKK2Fsd2F5cyA0IDE0NQorYWx3YXlzIDUgMTUKK2Fsd2F5cyA2IDEyNAorYWx3YXlzIDcgMTI0NQorYWx3YXlzIDggMTI1CithbHdheXMgOSAyNAorYWx3YXlzIDAgMjQ1CisKKyMgdGhlIGxldHRlciBhCitsYXN0bGFyZ2VzaWduIGEgMQorYWx3YXlzIGEgMQorYWx3YXlzIEEgMQorYmVnd29yZCBhLSAxLTM2IGEtZ29pbicKK2JlZ3dvcmQgYS1jb20gMS0zNi0xNC0xMzUtMTM0IGEtY29taW4nIGEtY29taW5nCithbHdheXMgYWJvdXQgMS0xMgorY29udHJhY3Rpb24gYWIKK2Fsd2F5cyBhYm92ZSAxLTEyLTEyMzYKK2NvbnRyYWN0aW9uIGFidgorYWx3YXlzIGFjY29yZGluZyAxLTE0Citjb250cmFjdGlvbiBhYworYWx3YXlzIGFjcm9zcyAxLTE0LTEyMzUKK2NvbnRyYWN0aW9uIGFjcgorYWx3YXlzIGFlID0KK2VuZHdvcmQgYWVkIDEtMTI0Ngord29yZCBhZm9yZXNhaWQgMS0xMjM0NTYtMTUtMjM0LTE0NQorYmVmb3JlIHZvd2VsIGJlZ3dvcmQgYWZ0ZXIgMS0xMjQtMjM0NS0xMjQ1NiBhZnRlcmltYWdlCitzdWZ3b3JkIGFmdGVyIDEtMTI0IGFmdGVyYmlydGgKK2NvbnRyYWN0aW9uIGFmCitzdWZ3b3JkIGFmdGVybm9vbiAxLTEyNC0xMzQ1IGFmdGVybm9vbnMKK2NvbnRyYWN0aW9uIGFmbgorYWx3YXlzIGFmdGVyd2FyZCAxLTEyNC0yNDU2Citjb250cmFjdGlvbiBhZncKK3dvcmQgYWdhaW4gMS0xMjQ1Citjb250cmFjdGlvbiBhZworc3Vmd29yZCBhZydpbiAxLTEyNDUtMy0zNSBhZydpbnN0Cit3b3JkIGFnYWluc3QgMS0xMjQ1LTM0Citjb250cmFjdGlvbiBhZ3N0CitlbmR3b3JkIGFnZXJpZXMgPSBtZXNzYWdlcmllcworZW5kd29yZCBhZ2VyeSA9IHNhdmFnZXJ5CitzdWZ3b3JkIGFpcmVkYWxlID0KK21pZGVuZHdvcmQgYWxseSA2LTEzNDU2Cit3b3JkIGFsbW9zdCAxLTEyMy0xMzQKK2NvbnRyYWN0aW9uIGFsbQord29yZCBhbHJlYWR5IDEtMTIzLTEyMzUKK2NvbnRyYWN0aW9uIGFscgord29yZCBhbHNvIDEtMTIzCitjb250cmFjdGlvbiBhbAord29yZCBhbHRob3VnaCAxLTEyMy0xNDU2Cit3b3JkIGFsdGggPQord29yZCBhbHRvZ2V0aGVyIDEtMTIzLTIzNDUKK2NvbnRyYWN0aW9uIGFsdAord29yZCBhbHdheXMgMS0xMjMtMjQ1NgorY29udHJhY3Rpb24gYWx3CittaWRlbmR3b3JkIGFuY2UgNDYtMTUKK2xhcmdlc2lnbiBhbmQgMTIzNDYKK3N1ZndvcmQgYW5lbW9uZSA9CittaWR3b3JkIGFuZ2ggPSBTaGFuZ2hhaQorYmVnd29yZCBhbnRlbm4gMS0xMzQ1LTIzNDUtMjYtMTM0NSBhbnRlbm5hCitiZWd3b3JkIGFudGVyaW8gMS0xMzQ1LTIzNDUtMTI0NTYtMjQtMTM1IGFudGVyaW9yCit3b3JkIGFudGlnb25lID0KK3dvcmQgYW50aW4gMS0xMzQ1LTIzNDUtMzUgTlkgc3RhdGUgc2VuYXRvciBCZW5qYW1pbiBBbnRpbgord29yZCBhbnRpbnMgMS0xMzQ1LTIzNDUtMzUtMjM0IHRoZSBBbnRpbnMKK3N1ZndvcmQgYW50aW5nIDEtMTM0NS0yMzQ1LTM0NgorYmVnd29yZCBhcXVlZCA9IGFxdWVkdWN0CithbHdheXMgYXIgMzQ1Cit3b3JkIGFyaWdodCAxLTUtMTIzNQorYWx3YXlzIGFydWJiZXIgMS0xMjM1LTEzNi0yMy0xMjQ1NiBpbmRpYXJ1YmJlcgord29yZCBhcyAxMzU2Citjb250cmFjdGlvbiBhcworc3Vmd29yZCBhc3BpZGlzdHJhIDEtMjM0LTEyMzQtMjQtMTQ1LTI0LTM0LTEyMzUtMQorc3Vmd29yZCBhc3NodXIgMS0yMzQtMTQ2LTEzNi0xMjM1CittaWRlbmR3b3JkIGF0aW9uIDYtMTM0NQorc3Vmd29yZCBhdWRpbyA9IGF1ZGlvZmlsZQorbWlkZW5kd29yZCBhdW5kZXIgMS0xMzYtMTM0NS0xNDUtMTI0NTYgc2F1bmRlcnMKK2JlZ3dvcmQgYXV0byA9IGF1dG9mb2N1cworCisjIHRoZSBsZXR0ZXIgYgorYWx3YXlzIGIgMTIKK2Fsd2F5cyBCIDEyCitzdWZ3b3JkIGJhY2hlbG9yZG9tIDEyLTEtMTYtMTUtMTIzLTEzNS0xMjM1LTE0NS0xMzUtMTM0CithbHdheXMgYmFsb25lID0gYWJhbG9uZSBiYWxvbmV5CitiZWd3b3JkIGJhcnRob2xlIDEyLTM0NS0xNDU2LTEzNS0xMjMtMTUgQmFydGhvbGVteQorc3Vmd29yZCBiYXRob3JzZSA9CitzdWZ3b3JkIGJhdHRsZSA9IGJhdHRsZWF4ZQord29yZCBiYXR0bGVkIDEyLTEtMjM0NS0yMzQ1LTEyMy0xMjQ2CitzdWZ3b3JkIGJhdHRsZXIgMTItMS0yMzQ1LTIzNDUtMTIzLTEyNDU2IGJhdHRsZXJzCittaWR3b3JkIGJiIDIzCittaWRlbmR3b3JkIGJibGUgMTItMzQ1NgorbG93d29yZCBiZSAyMworYmVnd29yZCBiZSAyMworc3Vmd29yZCBiZVxzLVxzIDEyLTE1LTM2LTM2Cit3b3JkIGJlYSA9IEJlYXRyaWNlJ3Mgbmlja25hbWUKK2JlZ3dvcmQgYmVhIDEyLTIKK2Fsd2F5cyBiZWFyIDEyLTE1LTM0NQorYmVnd29yZCBiZWF0aWYgMjMtMS0yMzQ1LTI0LTEyNAorYmVnd29yZCBiZWF0aXQgMjMtMS0yMzQ1LTI0LTIzNDUKK2JlZ3dvcmQgYmVhdHIgMjMtMS0yMzQ1LTEyMzUgQmVhdHJpY2UKK2JlZ3dvcmQgYmVjYyAxMi0xNS0yNSBiZWNjYWNjaWEKK2Fsd2F5cyBiZWNrIDEyLTE1LTE0LTEzCithbHdheXMgYmVkIDEyLTEyNDYKK2JlZ3dvcmQgYmVkYSAyMy0xNDUtMSBiZWRhenpsZQorYmVnd29yZCBiZWRlIDIzLTE0NS0xNSBiZWRldmlsCit3b3JkIGJlZGUgMTItMTI0Ni0xNSBiZWRlIChhIG5hbWUpCitiZWd3b3JkIGJlZGkgMjMtMTQ1LTI0IGJlZGl6emVuZWQKK2JlZ3dvcmQgYmVkcmEgMjMtMTQ1LTEyMzUtMSBiZWRyYWdnbGVkCit3b3JkIGJlZSAxMi0xNS0xNQorYmVnd29yZCBiZWUgMTItMTUtMTUKK2Fsd2F5cyBiZWVuIDEyLTE1LTI2CithbHdheXMgYmVlciAxMi0xNS0xMjQ1NgorYmVnd29yZCBiZWZmIDEyLTE1LTIzNSBiZWZmYW5hCit3b3JkIGJlZyA9CitiZWd3b3JkIGJlZ2cgMTItMTUtMjM1Ngord29yZCBiZWdzID0KK2JlZ3dvcmQgYmVpZCA9IEJlaWRlcm1laWVyCitiZWd3b3JkIGJlaWcgPSBiZWlnZQord29yZCBiZWluIDIzLTI0LTEzNDUKK3dvcmQgYmVpbicgMjMtMjQtMTM0NS0zCitzdWZ3b3JkIGJlaWppbmcgMTItMTUtMjQtMjQ1LTM0Ngord29yZCBiZWlydXQgPQorc3Vmd29yZCBiZWxjaCAxMi0xNS0xMjMtMTYKK2JlZ3dvcmQgYmVsZCA9IEJlbGRvbgorYmVnd29yZCBiZWxmID0gYmVsZnJ5LCBiZWxmYXN0CitiZWd3b3JkIGJlbGZvciAxMi0xNS0xMjMtMTIzNDU2IEJlbGZvcmQKK2JlZ3dvcmQgYmVsZyA9IEJlbGdpdW0KK3N1ZndvcmQgYmVsaXR0bGUgMjMtMTIzLTEyMworYmVnd29yZCBiZWxrID0gQmVsa2luCithbHdheXMgYmVsbCA9CitiZWd3b3JkIGJlbG0gPSBCZWxtb250CitzdWZ3b3JkIGJlbHNlbiAxMi0xNS0xMjMtMjM0LTI2IEJlcmdlbi1CZWxzZW4KK2Fsd2F5cyBiZWxzaCAxMi0xNS0xMjMtMTQ2CithbHdheXMgYmVsdCA9CitiZWd3b3JkIGJlbHYgPSBiZWx2ZWRlcmUKK2JlZ3dvcmQgYmVsdyA9IGJlbHdldGhlcgorYWx3YXlzIGJlbiAxMi0yNgord29yZCBiZW5lZmljIDIzLTEzNDUtMTUtMTI0LTI0LTE0CitzdWZ3b3JkIGJlbmVmaWNlbmNlIDIzLTEzNDUtMTUtMTI0LTI0LTE0LTU2LTE1CitzdWZ3b3JkIGJlbmVmaWNlbnQgMjMtMTM0NS0xNS0xMjQtMjQtMTQtMjYtMjM0NQorYmVnd29yZCBiZW5ldiAyMy0xMzQ1LTE1LTEyMzYgYmVuZXZvbGVudAorYmVnd29yZCBiZW5pZyAyMy0xMzQ1LTI0LTEyNDUgYmVuaWduCitiZWd3b3JkIGJlbmlnaCAyMy0xMzQ1LTI0LTEyNiBiZW5pZ2h0ZWQKK2JlZ3dvcmQgYmVudSAyMy0xMzQ1LTEzNiBiZW51bWJlZAorYmVnd29yZCBiZXIgMTItMTI0NTYKK2JlZ3dvcmQgYmVyYSAyMy0xMjM1LTEgYmVyYXRpbmcKK2JlZ3dvcmQgYmVyZSAyMy0xMjM1LTE1IGJlcmVmdAorYmVnd29yZCBiZXJlYSAyMy0xMjM1LTIgYmVyZWF2ZWQKK2JlZ3dvcmQgYmVyZW4gMTItMTI0NTYtMjYgQmVyZW5nYXJpYSwgQmVyZW5pY2UKK2JlZ3dvcmQgYmVyZXMgMTItMTI0NTYtMTUtMjM0IEJlcmVzZm9yZCwgQmVyZXNpbmEKK2JlZ3dvcmQgYmVyaCAyMy0xMjM1LTEyNSBiZXJoeW1lZAorYmVnd29yZCBiZXJpYmIgMjMtMTIzNS0yNC0yMyBiZXJpYmJvbmVkCitiZWd3b3JkIGJlcmluZyAyMy0xMjM1LTM0NiBiZXJpbmdlZCAoYXNzdW1lIEJlcmluZyB3aXRoIG5vIHN1ZmZpeCByZWZlcnMgdG8gdGhlIFNlYSBhbmQgdXNlICJlciIpCitiZWd3b3JkIGJlcm8gMjMtMTIzNS0xMzUgYmVyb2JlZAorYmVnd29yZCBiZXJ1IDIzLTEyMzUtMTM2IGJlcnVmZmxlZAorYWx3YXlzIGJlc3QgMTItMTUtMzQKK2JlZ3dvcmQgYmVzdGEgMjMtMzQtMSBiZXN0YWQgYmVzdGFpbgorc3Vmd29yZCBiZXN0YXIgMjMtMzQtMzQ1CitzdWZ3b3JkIGJlc3RlYWQgMjMtMzQtMi0xNDUKK3N1ZndvcmQgYmVzdGljayAyMy0zNC0yNC0xNC0xMworc3Vmd29yZCBiZXN0aXIgMjMtMzQtMjQtMTIzNQorc3Vmd29yZCBiZXN0b3cgMjMtMzQtMjQ2CitiZWd3b3JkIGJlc3RyIDIzLTM0LTEyMzUgYmVzdHJhZGRsZSBiZXN0cmVhaworYmVnd29yZCBiZXN0dSAyMy0zNC0xMzYgYmVzdHVjayBiZXN0dWRkZWQKK2Fsd2F5cyBiZXRoIDEyLTE1LTE0NTYgQmV0aGFueQorYWx3YXlzIGJldGhlIDEyLTE1LTIzNDYgQmV0aGVsIChIYW5zKSBCZXRoZQorc3Vmd29yZCBiZXRoaW5rIDIzLTE0NTYtMzUtMTMKK3N1ZndvcmQgYmV0aG91Z2h0IDIzLTE0NTYtNS0xMjU2CithbHdheXMgYmV0cyA9CithbHdheXMgYmV0dCA9CitzdWZ3b3JkIGJldHRoZXIgMTItMTUtMjM0NS0yMzQ2LTEyMzUgSXJpc2ggZGlhbGVjdCBmb3IgQmV0dGVyCitzdWZ3b3JkIGJldHogPSBCZXR6CitiZWd3b3JkIGJldSA9IEJldWxhIEJldWxhaAorYmVnd29yZCBiZXVuY2wgMjMtMTM2LTEzNDUtMTQtMTIzIGJldW5jbGVkCitzdWZ3b3JkIGJldiA9IGJldmllcworYmVnd29yZCBiZXZlciAxMi01LTE1IEJldmVybHkgYmV2ZXJhZ2UKK2Fsd2F5cyBiaW8gPQorbWlkZW5kd29yZCBiaW91cyAxMi0yNC0xMjU2LTIzNCBkdWJpb3VzCitqb2lud29yZCBieSAzNTYKK3dvcmQgYnktYW5kLWJ5IDEyLTEzNDU2LTM2LTEyMzQ2LTM2LTEyLTEzNDU2CithbHdheXMgYmVjYXVzZSAyMy0xNAord29yZCBiZWMgPQorYWx3YXlzIGJlZm9yZSAyMy0xMjQKK3dvcmQgYmVmID0KK2Fsd2F5cyBiZWhpbmQgMjMtMTI1Cit3b3JkIGJlaHJpbmcgMTItMTUtMTI1LTEyMzUtMzQ2Cit3b3JkIGJlaCA9Cit3b3JkIGJlbCA9CitiZWd3b3JkIGJlbG4gPSBCZWxuaWNrCitzdWZ3b3JkIGJlbG93IDIzLTEyMworYWx3YXlzIGJlbmVhdGggMjMtMTM0NQorc3Vmd29yZCBiZXJ0aGVhdSAxMi0xMjQ1Ni0xNDU2LTItMTM2CithbHdheXMgYmVzaWRlIDIzLTIzNAord29yZCBiZXMgPQorc3Vmd29yZCBiZXNzID0gQmVzc2llCithbHdheXMgYmV0d2VlbiAyMy0yMzQ1Cit3b3JkIGJldCA9CithbHdheXMgYmV5b25kIDIzLTEzNDU2Cit3b3JkIGJleSA9CitzdWZ3b3JkIGJpbmF0aW9uYWwgMTItMjQtMTM0NS02LTEzNDUtMS0xMjMKK2JlZ3dvcmQgYmlub2QgPSBiaW5vZGFsCitiZWd3b3JkIGJpbm9tID0gYmlub21pYWwKK3N1ZndvcmQgYmxha2UgPSBCbGFrZW5leQord29yZCBibGUgMzQ1NiBhbWlhLSBibGUsIGJ1dCBub3QgYW1pYS0gYmxlbmVzcworbWlkZW5kd29yZCBibGUgMzQ1NgorbWlkZW5kd29yZCBibGVhdSAxMi0xMjMtMi0xMzYgdGFibGVhdQorbWlkZW5kd29yZCBibGVlZCAxMi0xMjMtMTUtMTI0NiBub3NlYmxlZWQKK2Fsd2F5cyBibGVzcyAxMi00Ni0yMzQgam9ibGVzc25lc3MKK2JlZm9yZSB2b3dlbCBhbHdheXMgYmxpbmQgMTItMTIzLTM1LTE0NQorYWx3YXlzIGJsaW5kIDEyLTEyMworY29udHJhY3Rpb24gYmwKK2JlZ3dvcmQgYmx1ZW5vcyA9IGJsdWVub3NlZAorc3Vmd29yZCBib2F0ID0gYm9hdGhvb2sKK3N1ZndvcmQgYm9lbmRlIDEyLTEzNS0yNi0xNDUtMTUgdG93biAoUmVwdWJsaWMgb2YgQ29uZ28pCitzdWZ3b3JkIGJvZXIgPSBib2VyaGFhdmUKK2JlZ3dvcmQgYm9uZWRyIDEyLTUtMTM1LTE0NS0xMjM1IGJvbmVkcnkKK3N1ZndvcmQgYm9uZXNldCAxMi01LTEzNS0yMzQtMTUtMjM0NQorYmVnd29yZCBib3R0bGVub3MgPSBib3R0bGVub3NlIGRvbHBoaW4KK2Fsd2F5cyBicmFpbGxlIDEyLTEyMzUtMTIzCitjb250cmFjdGlvbiBicmwKK3N1ZndvcmQgYnJpZ2hhbSA9CitzdWZ3b3JkIGJ1cmxpbmdhbWUgMTItMTM2LTEyMzUtMTIzLTM0Ni0xLTEzNC0xNQord29yZCBidXQgMTIKK3N1ZndvcmQgYnlzc2hlIDEyLTEzNDU2LTIzNC0xNDYtMTUgUGVyY3kgQnlzc2hlIFNoZWxsZXkKKworIyB0aGUgbGV0dGVyIGMKK2Fsd2F5cyBjIDE0CithbHdheXMgQyAxNAorc3Vmd29yZCBjYWpvbmVzID0KK2JlZ3dvcmQgY2FsY2Vkb24gMTQtMS0xMjMtMTQtMTI0Ni0xMzUtMTM0NSBjYWxjZWRvbnkgY2FsY2Vkb25pZXMKK2JlZ3dvcmQgY2FydCAxNC0zNDUtMjM0NSBjYXJ0aG9yc2UKK3dvcmQgY2FydGhhZ2UgMTQtMzQ1LTE0NTYtMS0xMjQ1LTE1CittaWR3b3JkIGNjaCAxNC0xNgorc3Vmd29yZCBjaGFsY2Vkb24gMTYtMS0xMjMtMTQtMTI0Ni0xMzUtMTM0NSBjaGFsY2Vkb255IGNoYWxjZWRvbmllcworc3Vmd29yZCBjaGVhdCAxNi0yLTIzNDUgQ2hlYXRoYW0KK2Fsd2F5cyBjaGxvciAxNi0xMjMtMTM1LTEyMzUgZGljaGxvcmRpcGhlbnlsZXRoeWxlbmUsIGNobG9yb2Zvcm0KK3N1ZndvcmQgY2hyaXN0bWFzIDE2LTEyMzUtMjQtMzQtMTM0LTEtMjM0IENocmlzdG1hc3RpZGUKK3N1ZndvcmQgY2lib25leWVzID0KK3N1ZndvcmQgY2l0cm9uID0gY2l0cm9uZWxsYQorc3Vmd29yZCBjbGVtZW5jZWF1IDE0LTEyMy0xNS0xMzQtMjYtMTQtMi0xMzYKK3N1ZndvcmQgY2xvdGhlcyAxNC0xMjMtMTM1LTIzNDYtMjM0IGNsb3RoZXNob3JzZQorc3Vmd29yZCBjb2F0ID0gY29hdGhhbmdlcgorc3Vmd29yZCBjb2VkIDE0LTEzNS0xMjQ2CitiZWd3b3JkIGNvZW4gMTQtMTM1LTI2IGNvZW56eW1lIChCYW5hKQorYmVnd29yZCBjb2ZhYyA9IGNvZmFjdG9yCithbHdheXMgY29mb3VuZCAxNC0xMzUtMTI0LTQ2LTE0NQord29yZCBjb2pvbmVzID0KK3N1ZndvcmQgY29sb25lbCA9CitiZWd3b3JkIGNvbSAzNgorc3Vmd29yZCBjb21lZGljIDM2LTEyNDYtMjQtMTQgY29tZWRpY2FsbHkKK2JlZ3dvcmQgY29tZW4gMTQtMTM1LTEzNC0yNiBKb2huIEFtb3MgQ29tZW5pdXMKK3dvcmQgY29taW4gMzYtMjQtMTM0NQorc3Vmd29yZCBjb21pbicgMzYtMjQtMTM0NS0zIGNvbWluJ3MgYW5kIGdvaW4nczsgSSdtLS1jb21pbicgaG9tZQorYmVnd29yZCBjb21pbmdsIDE0LTEzNS0xMzQtMzQ2LTEyMyBjb21pbmdsZQorc3Vmd29yZCBjb21tb24gMzYtMTM0LTEzNS0xMzQ1IGNvbW1vbmVzdAorYmVnd29yZCBjb24gMjUKK3N1ZndvcmQgY29uYW4gPQorc3Vmd29yZCBjb25jZWl2ZSAyNS0xNC0xMjM2Cit3b3JkIGNvbmN2ID0KK3dvcmQgY29uY3ZkID0KK3dvcmQgY29uY3ZyID0KK3dvcmQgY29uY3ZzID0KK3dvcmQgY29uY3ZzdCA9Cit3b3JkIGNvbmN2dGggPQorc3Vmd29yZCBjb25jZWl2aW5nIDI1LTE0LTEyMzYtMTI0NQord29yZCBjb25jdmcgPQord29yZCBjb25jaCAxNC0xMzUtMTM0NS0xNgord29yZCBjb25jaGVzIDE0LTEzNS0xMzQ1LTE2LTE1LTIzNAorc3Vmd29yZCBjb25lIDE0LTUtMTM1Cit3b3JkIGNvbmVkIDE0LTEzNS0xMzQ1LTEyNDYKK3N1ZndvcmQgY29uZWxyYWQgPQorc3Vmd29yZCBjb25leSA9Cit3b3JkIGNvbmllcyA9CitzdWZ3b3JkIGNvbmsgPQord29yZCBjb25zIDE0LTEzNS0xMzQ1LTIzNAorc3Vmd29yZCBjb251bmRydW0gPSAKK3dvcmQgY29ueSA9CitzdWZ3b3JkIGNvcm9uZWwgPQorYWx3YXlzIGNvdWxkIDE0LTE0NQorY29udHJhY3Rpb24gY2QKK3N1ZndvcmQgY293b3JrIDE0LTEzNS01LTI0NTYKK2JlZ3dvcmQgY293cml0ID0gY293cml0ZQorYmVnd29yZCBjb3dyb3QgPSBjb3dyb3RlCittaWR3b3JkIGNjIDI1Cit3b3JkIGNhbiAxNAorYWx3YXlzIGNhbm5vdCA0NTYtMTQKK3dvcmQgY2ggPQorYWx3YXlzIGNoIDE2CithbHdheXMgY2hhcmFjdGVyIDUtMTYKK3N1ZndvcmQgY2hhdGhhbSAxNi0xLTIzNDUtMTI1LTEtMTM0CithbHdheXMgY2hlbW8gMTYtMTUtMTM0LTEzNQord29yZCBjaGlsZCAxNgorYWx3YXlzIGNoaWxkcmVuIDE2LTEzNDUKK3dvcmQgY2huID0KK3N1ZndvcmQgY2hpc2hvbG0gMTYtMjQtMjM0LTEyNS0xMzUtMTIzLTEzNAorc3Vmd29yZCBjbGV2ZXIgMTQtMTIzLTUtMTUgY2xldmVyZXN0CitzdWZ3b3JkIGNyZWRvIDE0LTEyMzUtMTI0Ni0xMzUgY3JlZG9zCitzdWZ3b3JkIGNyb3NzID0gY3Jvc3N0cmVlCisKKyMgdGhlIGxldHRlciBkCithbHdheXMgZCAxNDUKK2Fsd2F5cyBEIDE0NQord29yZCBkJ3lvdSAxNDUtMy0xMzQ1Ni0xMjU2CitiZWd3b3JkIGRhY2hzIDE0NS0xLTE2LTIzNCBkYWNoc2h1bmQKK2JlZ3dvcmQgZGFyZWQgMTQ1LTM0NS0xNS0xNDUgZGFyZWRldmlsCithbHdheXMgZGF5IDUtMTQ1Cit3b3JkIGRheS10by1kYXkgNS0xNDUtMzYtMjM0NS0xMzUtMzYtNS0xNDUKK2JlZ3dvcmQgZGVhY3QgPSBkZWFjdGl2YXRpb24KK2JlZ3dvcmQgZGVhbGwgPSBkZWFsbG9jYXRlCitiZWd3b3JkIGRlY2FyYiAxNDUtMTUtMTQtMzQ1LTEyCithbHdheXMgZGVjZWl2ZSAxNDUtMTQtMTIzNgorY29udHJhY3Rpb24gZGN2Citjb250cmFjdGlvbiBkY3ZkCitjb250cmFjdGlvbiBkY3ZyCitjb250cmFjdGlvbiBkY3ZzCit3b3JkIGRjdnN0ID0KK3dvcmQgZGN2dGggPQorYWx3YXlzIGRlY2VpdmluZyAxNDUtMTQtMTIzNi0xMjQ1Citjb250cmFjdGlvbiBkY3ZnCithbHdheXMgZGVjbGFyZSAxNDUtMTQtMTIzCitjb250cmFjdGlvbiBkY2wKK2NvbnRyYWN0aW9uIGRjbGQKK2NvbnRyYWN0aW9uIGRjbHIKK2NvbnRyYWN0aW9uIGRjbHMKK3dvcmQgZGNsc3QgPQord29yZCBkY2x0aCA9CithbHdheXMgZGVjbGFyaW5nIDE0NS0xNC0xMjMtMTI0NQorY29udHJhY3Rpb24gZGNsZworYmVnd29yZCBkZXJlZiA9IGRlcmVmZXJlbmNpbmcKK2JlZ3dvcmQgZGVyZWcgPSBkZXJlZ3VsYXRpb24KK3dvcmQgZGVzaGFiaWxsZSA9CittaWR3b3JkIGRkIDI1NgorbWlkZW5kd29yZCBkZGFtbiA9CittaWRlbmR3b3JkIGRkYXkgMTQ1LTUtMTQ1IG1pZGRheQorYmVnd29yZCBkZWRpYyAxNDUtMTI0Ni0yNC0xNCBkZWRpY2F0ZWQKK2Fsd2F5cyBkZWR1ID0gbm9uZGVkdWN0aWJsZQorc3Vmd29yZCBkZW5hdGlvbmFsIDE0NS0xNS0xMzQ1LTYtMTM0NS0xLTEyMyBkZW5hdGlvbmFsaXphdGlvbgorYmVnd29yZCBkZW5heiA9IGRlbmF6aWZpY2F0aW9uCitiZWd3b3JkIGRlbm8gPSBkZW5vdGUKK2Fsd2F5cyBkZW5vbSA9CitiZWd3b3JkIGRlbm91IDE0NS0xNS0xMzQ1LTEyNTYgZGVub3VuY2UKK2JlZ3dvcmQgZGVudSA9IGRlbnVuY2lhdGlvbgorYmVnd29yZCBkZXJhID0gZGVyYWlsCitiZWd3b3JkIGRlcmkgMTQ1LTE1LTEyMzUtMjQKK2JlZ3dvcmQgZGVybyA9IGRlcm9nYXRvcnkKK3N1ZndvcmQgZGV3ID0gRGV3aHVyc3QKK2JlZ3dvcmQgZGluZ2ggMTQ1LTM1LTEyNiBkaW5naHkKK2JlZ3dvcmQgZGludSAxNDUtMjQtMTM0NS0xMzYKK2JlZ3dvcmQgZGlzIDI1Ngord29yZCBkaXNjID0KK3dvcmQgZGlzY3MgPQorc3Vmd29yZCBkaXNoIDE0NS0yNC0xNDYKK2JlZ3dvcmQgZGlzaGEgMjU2LTEyNS0xIGRpc2hhYmlsbGUKK2JlZ3dvcmQgZGlzaGFybW9uIDI1Ni0xMjUtMzQ1LTEzNC0xMzUtMTM0NSBkaXNoYXJtb255CitiZWd3b3JkIGRpc2hlYXIgMjU2LTEyNS0xNS0zNDUgZGlzaGVhcnRlbmVkCitiZWd3b3JkIGRpc2hvIDI1Ni0xMjUtMTM1IGRpc2hvbm9yCitiZWd3b3JkIGRpc2hvbmUgMjU2LTEyNS01LTEzNSBkaXNob25lc3QKK2JlZ3dvcmQgZGlzaW4gMjU2LTM1IGRpc2luZ2VudW91cworc3Vmd29yZCBkaXNrID0KK3N1ZndvcmQgZGlzcGlyaXQgMTQ1LTI0LTQ1Ni0yMzQgZGlzcGlyaXRlZAorbWlkd29yZCBkaXN0ID0gY29udHJhZGlzdGluY3Rpb24KK21pZGVuZHdvcmQgZGlzdGljIDE0NS0yNC0zNC0yNC0xNCBNZXRob2Rpc3RpYyBNZXRob2Rpc3RpY2FsCitlbmR3b3JkIGRpc3RzIDE0NS0yNC0zNC0yMzQgTWV0aG9kaXN0cworYmVnd29yZCBkaXN1bCA9IGRpc3VsZmlkZQord29yZCBkbyAxNDUKK2JlZm9yZSBvIGJlZ3dvcmQgZG9nZyA9Cit3b3JkIGRvZ2dvIDE0NS0xMzUtMjM1Ni0xMzUKK2JlZ3dvcmQgZG9uZWdhID0gRG9uZWdhbGVycywgRG9uZWdhbgorYWx3YXlzIGR1bWIgPSBkdW1iYmVsbAorYmVnd29yZCBkdW1ibGUgMTQ1LTEzNi0xMzQtMzQ1NiBkdW1ibGVkb3IKK3N1ZndvcmQgZHVtZnJpZXMgPSBEdW1mcmllc3NoaXJlCisKKyMgdGhlIGxldHRlciBlCithbHdheXMgZSAxNQorYWx3YXlzIEUgMTUKK2Fsd2F5cyBlJ2VuIDE1LTMtMjYgSGFsbG93ZSdlbgorbWlkd29yZCBlYSAyCittaWR3b3JkIGVhYmlsID0gaW50ZXJjaGFuZ2VhYmlsaXR5CithbHdheXMgZWFibGUgMTUtMS0zNDU2CitlbmR3b3JkIGVhYmx5ID0gbm90aWNlYWJseQorbWlkZW5kd29yZCBlYWdlID0gbWlsZWFnZQorc3Vmd29yZCBlYWdsZSA9IGVhZ2xlbm9zZQorc3Vmd29yZCBlYWdsZWQgMTUtMS0xMjQ1LTEyMy0xMjQ2CittaWRlbmR3b3JkIGVhZ2VyIDItMTI0NS0xMjQ1NiBtZWFnZXIKK2Fsd2F5cyBlYWxseSAxNS02LTEzNDU2CittaWRlbmR3b3JkIGVhbmNlIDE1LTQ2LTE1IHZlbmdlYW5jZQorbWlkZW5kd29yZCBlYW5kIDE1LTEyMzQ2IG1lYW5kZXIKK2Fsd2F5cyBlYXRpb24gMTUtNi0xMzQ1CithbHdheXMgZWFyIDE1LTM0NQorc3Vmd29yZCBoaWRlYXcgPSBoaWRlYXdheQorYWx3YXlzIGVkIDEyNDYKK3N1ZndvcmQgZWRhY2lvdXMgMTUtMTQ1LTEtMTQtMjQtMTI1Ni0yMzQgZWRhY2lvdXNuZXNzCithbHdheXMgZWRpYyA9IGVkaWN0IEJlbmVkaWN0CitzdWZ3b3JkIGVkaXRpb24gMTUtMTQ1LTI0LTU2LTEzNDUgZWRpdGlvbnMKK21pZHdvcmQgZWRvIDE1LTE0NS0xMzUKK21pZGVuZHdvcmQgZWRvd24gMTUtMTQ1LTI0Ni0xMzQ1IGZhY2Vkb3duCitzdWZ3b3JkIHRvcnBlZG8gMjM0NS0xMzUtMTIzNS0xMjM0LTEyNDYtMTM1CitzdWZ3b3JkIHR1eGVkbyAyMzQ1LTEzNi0xMzQ2LTEyNDYtMTM1CithbHdheXMgZWRyYXcgPQorYWx3YXlzIGVldmVyIDE1LTE1LTEyMzYtMTI0NTYgQ2hlZXZlcgord29yZCBlaXRoZXIgMTUtMjQKK2NvbnRyYWN0aW9uIGVpCit3b3JkIGVuID0KK2Fsd2F5cyBlbiAyNgorYWx3YXlzIGVuYW1lIDE1LTUtMTM0NQorc3Vmd29yZCBlbmFtZWwgMjYtMS0xMzQtMTUtMTIzIGVuYW1lbGVkCittaWRlbmR3b3JkIGVuY2UgNTYtMTUKK2Fsd2F5cyBlbmNlcGggMjYtMTQtMTUtMTIzNC0xMjUgZWxlY3Ryb2VuY2VwaGFsb2dyYW0KK2JlZ3dvcmQgZW5jeWNsb3BlZGkgMjYtMTQtMTM0NTYtMTQtMTIzLTEzNS0xMjM0LTEyNDYtMjQgZW5jeWNsb3BlZGljCitzdWZ3b3JkIGVuZG93IDI2LTE0NS0yNDYKK2Fsd2F5cyBlbmVjayA9IGJvdHRsZW5lY2sKK21pZGVuZHdvcmQgZW5lc3MgMTUtNTYtMjM0IGNsb3NlbmVzcworYmVnd29yZCBlbm9yID0gZW5vcm1vdXMKK2JlZ3dvcmQgZW5vdSAxNS0xMzQ1LTEyNTYKK2xvd3dvcmQgZW5vdWdoIDI2Cit3b3JkIGVub3VnaCAyNi0xMjU2LTEyNgorc3Vmd29yZCBlbm91Z2hccy1ccyAyNi0xMjU2LTEyNi0zNi0zNgorbWlkZW5kd29yZCBlbnRpbWVudCAyNi0yMzQ1LTI0LTU2LTIzNDUgc2VudGltZW50YWwKK2JlZ3dvcmQgZW51IDE1LTEzNDUtMTM2CitiZWd3b3JkIGVxdWlubyA9IGVxdWlub3gKK2Fsd2F5cyBlciAxMjQ1NgorYmVnd29yZCBlcmEgPQord29yZCBlcmFzIDEyNDU2LTEtMjM0CitiZWd3b3JkIGVyZWMgPSBlcmVjdCAKK2JlZ3dvcmQgZXJvIDE1LTEyMzUtMTM1CitiZWd3b3JkIGVyb2cgMTI0NTYtMTM1LTEyNDUgZXJvZ2Vub3VzCit3b3JkIGVyb3MgMTI0NTYtMTM1LTIzNCBEb3duIEVyb3MsIHVwIE1hcnMhCitzdWZ3b3JkIGVyb3RpYyAxMjQ1Ni0xMzUtMjM0NS0yNC0xNAorbWlkZW5kd29yZCBlcm9vbSA9IHN0b3Jlcm9vbQorYmVnd29yZCBlcnUgPSBlcnVwdAorYmVnd29yZCBlcnVkaSAxMjQ1Ni0xMzYtMTQ1LTI0IGVydWRpdGUKK21pZGVuZHdvcmQgb25lc3F1ZSA9IFJ1bnlvbmVzcXVlcword29yZCBldGhlcmVhbGx5IDE1LTIzNDYtMTIzNS0xNS02LTEzNDU2CithbHdheXMgZXZlciA1LTE1CitzdWZ3b3JkIGV2ZXJzaW9uIDE1LTEyMzYtMTI0NTYtNDYtMTM0NSBldmVyc2lvbnMKK3N1ZndvcmQgZXZlcnQgMTUtMTIzNi0xMjQ1Ni0yMzQ1IGV2ZXJ0ZWQKK3dvcmQgZXZlcnkgMTUKK3N1ZndvcmQgZXllZHJvcCA9IGV5ZWRyb3BwZXIKKworIyB0aGUgbGV0dGVyIGYKK2Fsd2F5cyBmIDEyNAorYWx3YXlzIEYgMTI0CitzdWZ3b3JkIGZhbGNvbiA9IGZhbGNvbmVyCitzdWZ3b3JkIGZhbmRvbSA9CittaWR3b3JkIGZmIDIzNQorYWx3YXlzIGZhdGhlciA1LTEyNAorc3Vmd29yZCBmZWQgMTI0LTEyNDYgZmVkb3JhCithbHdheXMgZmVpbiAxMjQtMTUtMzUgRmVpbmdvbGQKK2Fsd2F5cyBmaXJzdCAxMjQtMzQKK3dvcmQgZnN0ID0KK2Fsd2F5cyBmZXZlciAxMjQtMTUtMTIzNi0xMjQ1NgorYWx3YXlzIGZmb3IgMTI0LTEyMzQ1Ngorc3Vmd29yZCBmaWFuY2UgPQorbGFyZ2VzaWduIGZvciAxMjM0NTYKK2Fsd2F5cyBmb3JlIDEyMzQ1Ni0xNQorYmVnd29yZCBmb3JlbnMgMTIzNDU2LTI2LTIzNCBmb3JlbnNpYworYWx3YXlzIGZvcmV2ZXIgMTIzNDU2LTUtMTUgZm9yZXZlcm1vcmUKK2Fsd2F5cyBmb290ID0KK3N1ZndvcmQgZm9yYmVzIDEyMzQ1Ni0xMi0xNS0yMzQgRm9yYmVzdG93bgord29yZCBmcm9tIDEyNAorYmVmb3JlIHZvd2VsIGFsd2F5cyBmcmllbmQgMTI0LTEyMzUtMjQtMjYtMTQ1CithbHdheXMgZnJpZW5kIDEyNC0xMjM1Citjb250cmFjdGlvbiBmcgord29yZCBmcnVpdHkgPQorbWlkZW5kd29yZCBmdWwgNTYtMTIzCitlbmR3b3JkIGZ1bGwgPQorYWx3YXlzIGZ1bmRlciAxMjQtMTM2LTEzNDUtMTQ1LTEyNDU2CisKKyMgdGhlIGxldHRlciBnCithbHdheXMgZyAxMjQ1CithbHdheXMgRyAxMjQ1Cit3b3JkIGdhaW5zYWlkIDEyNDUtMS0zNS0yMzQtMTQ1CitiZWd3b3JkIGdlbmVhbG9nIDEyNDUtMjYtMTUtMS0xMjMtMTM1LTEyNDUgZ2VuZWFsb2d5CitiZWd3b3JkIGdlbyA9IGdlb2VuZ2luZWVyaW5nCitzdWZ3b3JkIGdlb2ZmIDEyNDUtMTUtMTIzNTYtMTI0IEdlb2ZmcmV5CittaWR3b3JkIGdnIDIzNTYKK2Fsd2F5cyBnaCAxMjYKK2VuZHdvcmQgbmdoYW0gPSBMYW5naGFtCithbHdheXMgZ2hlYWQgMTI0NS0xMjUtMi0xNDUKK2Fsd2F5cyBnaGVhcnQgMTI0NS0xMjUtMTUtMzQ1LTIzNDUKK21pZGVuZHdvcmQgZ2hpbGwgPSBkdW5naGlsbAorbWlkZW5kd29yZCBnaG9mIDEyNDUtMTI1LTEyMzU2IEJlcmdob2ZmZXIKK21pZGVuZHdvcmQgZ2hvcm4gPSBiaWdob3JuCithbHdheXMgZ2hvdXNlIDEyNDUtMTI1LTEyNTYtMjM0LTE1CithbHdheXMgZ2h6ID0gKGdpZ2FoZXJ0eikKK3N1ZndvcmQgZ2luZ29sZCAxMjQ1LTM1LTEyNDUtMTM1LTEyMy0xNDUKK2JlZ3dvcmQgZ2l2ZWEgPSBnaXZlYXdheQorc3Vmd29yZCBnbm9tZSA9IGdub21lZGIKK3dvcmQgZ28gMTI0NQorYmVnd29yZCBnb2F0aCA9IGdvYXRoZXJkCitzdWZ3b3JkIGdvZGRhdWdodGVyIDEyNDUtMTM1LTE0NS0xNDUtMS0xMzYtMTI2LTIzNDUtMTI0NTYKK3N1ZndvcmQgZ29kZGVzcyAxMjQ1LTEzNS0yNTYtMTUtMjM0LTIzNCBnb2RkZXNzc2hpcAorc3Vmd29yZCBnb29kIDEyNDUtMTQ1Citjb250cmFjdGlvbiBnZAorc3Vmd29yZCBnb3NoYXdrID0KK3N1ZndvcmQgZ29zaGVyZCAxMjQ1LTEzNS0yMzQtMTI1LTEyNDU2LTE0NQorbWlkZW5kd29yZCBpbmdyYWQgMzUtMTI0NS0xMjM1LTEtMTQ1IExlbmluZ3JhZCwgU3RhbGluZ3JhZAorYmVnd29yZCBncmFwZWEgPSBncmFwZWFkZQorYmVnd29yZCBncmF2ZWRpID0gZ3JhdmVkaWdnZXIKK2JlZ3dvcmQgZ3JhdmVybyA9IGdyYXZlcm9iYmluZworYWx3YXlzIGdyZWF0IDEyNDUtMTIzNS0yMzQ1Citjb250cmFjdGlvbiBncnQKK3N1ZndvcmQgZ3VhbnRhbmFtZXJhIDEyNDUtMTM2LTEtMTM0NS0yMzQ1LTEtMTM0NS0xLTEzNC0xMjQ1Ni0xCitzdWZ3b3JkIGd1ZXNzID0gZ3Vlc3N0aW1hdGUKK3N1ZndvcmQgZ3VlbmV2ZXIgMTI0NS0xMzYtMjYtMTUtMTIzNi0xMjQ1NiBHdWVuZXZlcmUKK3N1ZndvcmQgZ3VpbmV2ZXIgMTI0NS0xMzYtMzUtMTUtMTIzNi0xMjQ1NiBHdWluZXZlcmUKKworIyB0aGUgbGV0dGVyIGgKK2Fsd2F5cyBoIDEyNQorYWx3YXlzIEggMTI1CithbHdheXMgaGFkIDQ1Ni0xMjUKK2JlZ3dvcmQgaGFkZCAxMjUtMS0yNTYgaGFkZG9jaworc3Vmd29yZCBoYWRlID0gaGFkZWFuCitzdWZ3b3JkIGhhbmRzb21lIDEyNS0xMjM0Ni01LTIzNCBoYW5kc29tZXIKK3N1ZndvcmQgaGFkciA9IGhhZHJpYW4gCit3b3JkIGhhdmUgMTI1CithbHdheXMgaGVhZGQgMTI1LTItMTQ1LTE0NSBoZWFkZHJlc3MKK3N1ZndvcmQgaGVhZG1pc3RyZXNzIDEyNS0yLTE0NS0xMzQtMjQtMzQtMTIzNS0xNS0yMzQtMjM0IGhlYWRtaXN0cmVzc3NoaXAKK3N1ZndvcmQgaGVkZ2Vyb3cgMTI1LTEyNDYtMTI0NS0xNS0xMjM1LTI0NiBoZWRnZXJvdydzCithbHdheXMgaGVyZSA1LTEyNQord29yZCBoZXJlYWZ0ZXIgNS0xMjUtMS0xMjQKK3N1ZndvcmQgaGVyZWZvcmQgMTI1LTEyNDU2LTE1LTEyMzQ1Ni0xNDUKK3dvcmQgaGVyZWluYWZ0ZXIgNS0xMjUtMzUtMS0xMjQKK2Fsd2F5cyBoZXJlZCAxMjUtMTI0NTYtMTI0NgorYWx3YXlzIGhlcmVuIDEyNS0xMjQ1Ni0yNgorbWlkZW5kd29yZCBoZXJlbmNlIDEyNS0xMjQ1Ni01Ni0xNSBhZGhlcmVuY2UKK2Fsd2F5cyBoZXJlciAxMjUtMTI0NTYtMTI0NTYKK2JlZ3dvcmQgaGVyZXMgMTI1LTEyNDU2LTE1LTIzNCBoZXJlc3kKK2Fsd2F5cyBoZXJldCAxMjUtMTI0NTYtMTUtMjM0NQord29yZCBoZXJldG8gNS0xMjUtMjM0NS0xMzUKK3dvcmQgaGVyZXRvZm9yZSA1LTEyNS0yMzQ1LTEzNS0xMjM0NTYtMTUKK3dvcmQgaGVyc2VsZiAxMjUtMTI0NTYtMTI0Cit3b3JkIGhlcmYgPQord29yZCBoaW0gMTI1LTEzNAorY29udHJhY3Rpb24gaG0KK3N1ZndvcmQgaG1tID0KK3dvcmQgaGltc2VsZiAxMjUtMTM0LTEyNAorY29udHJhY3Rpb24gaG1mCitsb3d3b3JkIGhpcyAyMzYKK3N1ZndvcmQgaGlzXHMtXHMgMTI1LTI0LTIzNC0zNi0zNgord29yZCBob2xsb3dhcmUgMTI1LTEzNS0xMjMtMTIzLTEzNS0yNDU2LTM0NS0xNQorc3Vmd29yZCBob3JzZSA9IGhvcnNlcmFkaXNoCit3b3JkIGhvcnNlZCAxMjUtMTM1LTEyMzUtMjM0LTEyNDYKK3N1ZndvcmQgaG9yc2VyIDEyNS0xMzUtMTIzNS0yMzQtMTI0NTYgbmluZS1ob3JzZXJzCitiZWd3b3JkIGhvcnNlcmEgPSBob3JzZXJhY2UKK3N1ZndvcmQgaG91Z2h0b24gMTI1LTEyNTYtMTI2LTIzNDUtMTM1LTEzNDUKK2JlZ3dvcmQgaG91c2VkcmVzIDEyNS0xMjU2LTIzNC0xNS0xNDUtMTIzNS0xNS0yMzQgaG91c2VkcmVzc2VkCitzdWZ3b3JkIGh1bWlkaXN0YXQgMTI1LTEzNi0xMzQtMjQtMTQ1LTI0LTM0LTEtMjM0NQorYWx3YXlzIGh5ZHJvID0KK2JlZ3dvcmQgaHlwc29tZXQgPSBoeXBzb21ldHJpY2FsCisKKyMgdGhlIGxldHRlciBpCit3b3JkIGkgMjQKK2Fsd2F5cyBpIDI0CithbHdheXMgSSAyNAord29yZCBpYnVwcm9mZW4gMjQtMTItMTM2LTEyMzQtMTIzNS0xMjM1Ni0yNgorbWlkZW5kd29yZCBpZXZlciAyNC0xNS0xMjM2LTEyNDU2CithbHdheXMgaW1tZWRpYXRlIDI0LTEzNC0xMzQKK2NvbnRyYWN0aW9uIGltbQorYmVnd29yZCBpbW11bm8gPSBpbW11bm9mbHVvcmVzY2VuY2UKK2xvd3dvcmQgaW4gMzUKK3dvcmQgaW4gPQorYWx3YXlzIGluIDM1CitzdWZ3b3JkIGluXHMtXHMgMjQtMTM0NS0zNi0zNgorYmVnd29yZCBpbmNvbiAzNS0xNC0xMzUtMTM0NSBpbmNvbmdydW91cworYmVnd29yZCBpbmRpcyAzNS0xNDUtMjQtMjM0IGluZGlzdGluY3QKK2JlZ3dvcmQgaW5lcmEgMzUtMTUtMTIzNS0xIGluZXJhZGljYWJsZSwgaW5lcmFzYWJsZSwgaW5lcmFzaWJsZQorYmVnd29yZCBpbmVzcyAzNS0xNS0yMzQtMjM0IGluZXNzZW50aWFsLCBpbmVzc2l2ZQorYWx3YXlzIGluZXNzIDI0LTU2LTIzNAord29yZCBpbmcgMzQ2IHN1Y2ggYXMgYWZ0ZXIgYSBoeXBoZW4KK21pZGVuZHdvcmQgaW5nIDM0NgorbWlkd29yZCBpbmdhbCAzNS0xMjQ1LTEtMTIzIGZhcnRoaW5nYWxlIG1hcnRpbmdhbGUgbmlnaHRpbmdhbGUKK2Fsd2F5cyBpbmdhciAzNS0xMjQ1LTM0NSBXZWluZ2FydGVuCitzdWZ3b3JkIGluZ2hhbSAzNS0xMjQ1LTEyNS0xLTEzNAorbWlkZW5kd29yZCBpbmdpc20gMzUtMTI0NS0yNC0yMzQtMTM0IG1lbmluZ2lzbQorbWlkd29yZCBpbmdpdCAzNS0xMjQ1LTI0LTIzNDUgbWVuaW5naXRpcworbWlkZW5kd29yZCBpbmdpdGUgMzQ2LTI0LTIzNDUtMTUgd3lvbWluZ2l0ZQorYmVnd29yZCBpbmdsZSAzNS0xMjQ1LTEyMy0xNSBpbmdsZW5vb2sKK3N1ZndvcmQgaXNpbmdsYXNzIDI0LTIzNC0zNS0xMjQ1LTEyMy0xLTIzNC0yMzQKK2pvaW53b3JkIGludG8gMzUtMjM1CitzdWZ3b3JkIGlvdSA9CitiZWd3b3JkIGlycmV2ZXJzIDI0LTEyMzUtMTIzNS0xNS0xMjM2LTEyNDU2LTIzNCBpcnJldmVyc2libGUKK2Fsd2F5cyBpc29tZXIgMjQtMjM0LTEzNS0xMzQtMTI0NTYKK3dvcmQgaXQgMTM0Ngord29yZCBpdHMgMTM0Ni0yMzQKK2NvbnRyYWN0aW9uIHhzCit3b3JkIGl0c2VsZiAxMzQ2LTEyNAorY29udHJhY3Rpb24geGYKK21pZGVuZHdvcmQgaXR5IDU2LTEzNDU2CisKKyMgdGhlIGxldHRlciBqCithbHdheXMgaiAyNDUKK2Fsd2F5cyBKIDI0NQorc3Vmd29yZCBqaWhhZCA9IGppaGFkaXMKK2Fsd2F5cyBqb25lIDI0NS01LTEzNSBqb25lc2luZyBKb25ldHRlCit3b3JkIGp1c3QgMjQ1CitiZWd3b3JkIGp1bmdsZXJpIDI0NS0xMzYtMTM0NS0xMjQ1LTEyMy0xNS0xMjM1LTI0IGp1bmdsZXJpZGRlbgorCisjIHRoZSBsZXR0ZXIgaworYWx3YXlzIGsgMTMKK2Fsd2F5cyBLIDEzCitzdWZ3b3JkIGtldHRsZWRydW0gPQorc3Vmd29yZCBraW5yb3NzIDEzLTM1LTEyMzUtMTM1LTIzNC0yMzQgS2lucm9zc3NoaXJlCit3b3JkIGtuZWVkZWVwID0KK2Fsd2F5cyBrbm93IDUtMTMKK3N1ZndvcmQga25vd25vdGhpbmcgNS0xMy0xMzQ1LTEzNS0xNDU2LTM0NiBrbm93bm90aGluZ2lzbQord29yZCBrbm93bGVkZ2UgMTMKK3N1ZndvcmQga251Y2tsZWR1c3QgMTMtMTM0NS0xMzYtMTQtMTMtMTIzLTE1LTE0NS0xMzYtMzQga251Y2tsZWR1c3RlciBrbnVja2xlZHVzdGluZworc3Vmd29yZCBrdXJkaXN0YW4gMTMtMTM2LTEyMzUtMTQ1LTI0LTM0LTEtMTM0NSBLdXJkaXN0YW5pCisKKyMgdGhlIGxldHRlciBsCithbHdheXMgbCAxMjMKK2Fsd2F5cyBMIDEyMworc3Vmd29yZCBsYW1lZHVjayA9CitiZWd3b3JkIGxlYXRoZXJldHQgMTIzLTItMjM0Ni0xMjM1LTE1LTIzNDUtMjM0NSBsZWF0aGVyZXR0ZQorbWlkZW5kd29yZCBsZXNzIDQ2LTIzNAorYWx3YXlzIGxlc3NvbiA9IHVubGVzc29uZWQKK2Fsd2F5cyBsZXR0ZXIgMTIzLTEyMzUKK2NvbnRyYWN0aW9uIGxyCit3b3JkIGxpa2UgMTIzCitiZWd3b3JkIGxpbWVhID0gbGltZWFkZQord29yZCBsaW5nZXJpZSAxMjMtMzUtMTI0NS0xMjQ1Ni0yNC0xNQord29yZCBsaW9uZWwgPQorc3Vmd29yZCBsaXR0bGUgMTIzLTEyMworY29udHJhY3Rpb24gbGwKK2Fsd2F5cyBsb3JkIDUtMTIzCitiZWd3b3JkIGxvcmRvcyA9IGxvcmRvc2lzIGxvcmRvc2VzCitzdWZ3b3JkIGxvcmRvdGljID0KK3N1ZndvcmQgbHVja25vdyAxMjMtMTM2LTE0LTEzLTEzNDUtMjQ2CisKKyMgdGhlIGxldHRlciBtCithbHdheXMgbSAxMzQKK2Fsd2F5cyBNIDEzNAorYmVnd29yZCBtYWhhID0gbWFoYXJhamEsIG1haGFyYW5pCitzdWZ3b3JkIG1haG9uZXkgPSAKK3N1ZndvcmQgbWFpbG9yZGVyIDEzNC0xLTI0LTEyMy0xMzUtMTIzNS0xNDUtMTI0NTYKK2JlZ3dvcmQgbWFuZWF0IDEzNC0xLTEzNDUtMTUtMS0yMzQ1IG1hbmVhdGVyLCBtYW5lYXRpbmcKK2Fsd2F5cyBtYW55IDQ1Ni0xMzQKK2JlZ3dvcmQgbWMgPQorYWx3YXlzIG1lZGljIDEzNC0xMjQ2LTI0LTE0IG1lZGljYXJlCitiZWd3b3JkIG1lbmFnZXIgMTM0LTI2LTEtMTI0NS0xMjQ1NiBtZW5hZ2VyeSBtZW5hZ2VyaWVzCittaWRlbmR3b3JkIG1lbnQgNTYtMjM0NQorbWlkd29yZCBtZW50aCAxMzQtMjYtMTQ1NiBCbHVtZW50aGFsCithbHdheXMgbWVudGlvbiAxMzQtMjYtNTYtMTM0NQorc3Vmd29yZCBtZXJpb25ldGggMTM0LTEyNDU2LTI0LTEzNS0xMzQ1LTE1LTE0NTYgTWVyaW9uZXRoc2hpcmUKK3N1ZndvcmQgbWVzc2FnZXJpZSA9CitzdWZ3b3JkIG1pZGFmdGVybm9vbiAxMzQtMjQtMTQ1LTEtMTI0LTEzNDUKK3N1ZndvcmQgbWlkZG9yc2FsID0KK2Fsd2F5cyBtaWRlYXN0IDEzNC0yNC0xNDUtMTUtMS0zNAorYmVnd29yZCBtaWR3aWZlciA9IG1pZHdpZmVyeQorc3Vmd29yZCBtaWxsaW5lciAxMzQtMjQtMTIzLTEyMy0zNS0xMjQ1Ngord29yZCBtaWxsaW5nIDEzNC0yNC0xMjMtMTIzLTM0Ngorc3Vmd29yZCBtaXNoYWxsb3cgMTM0LTI0LTIzNC0xMjUtMS0xMjMtMTIzLTI0NgorYmVnd29yZCBtaXNoYW5kIDEzNC0yNC0yMzQtMTI1LTEyMzQ2IG1pc2hhbmRsZWQKK2Fsd2F5cyBtaXNoYXAgPQorc3Vmd29yZCBtaXNoZWFyIDEzNC0yNC0yMzQtMTI1LTE1LTM0NSBtaXNoZWFyZAorc3Vmd29yZCBtaXNoaXQgPQorYmVnd29yZCBtaXNzaCAxMzQtMjQtMjM0LTE0NiBtaXNzaGFwZW4KK3N1ZndvcmQgbWlzc2hvb2QgPQorYWx3YXlzIG1pc3RhayA9IG1pc3Rha2UKK3dvcmQgbWlzdG9vayA9CitzdWZ3b3JkIG1pc3RyYWluIDEzNC0yNC0yMzQtMjM0NS0xMjM1LTEtMzUgbWlzdHJhaW5lZAorYmVnd29yZCBtaXN0cmFuID0gbWlzdHJhbnNsYXRpb24KK3N1ZndvcmQgbWlzdHJlYXQgMTM0LTI0LTIzNC0yMzQ1LTEyMzUtMi0yMzQ1CitzdWZ3b3JkIG1pc3RyaWFsID0gbWlzdHJpYWxzCitiZWd3b3JkIG1pc3RydSA9IG1pc3RydXN0CitiZWd3b3JkIG1pc3R5ID0gbWlzdHlwZWQKK3dvcmQgbW9uZXRhcnkgMTM0LTUtMTM1LTIzNDUtMzQ1LTEzNDU2Cit3b3JkIG1vbmdlZXNlID0KK3N1ZndvcmQgbW9uZ29vc2UgPQorc3Vmd29yZCBtb250ZXZlcmRpIDEzNC0xMzUtMTM0NS0yMzQ1LTE1LTEyMzYtMTI0NTYtMTQ1LTI0IE1vbnRldmVyZGkncword29yZCBtb3JlIDEzNAord29yZCBtb3JlJ24gMTM0LTEzNS0xMjM1LTE1LTMtMTM0NQord29yZCBtb3JlJ3MgPQorYWx3YXlzIG1vdGhlciA1LTEzNAorYWx3YXlzIG11Y2ggMTM0LTE2Cit3b3JkIG1jaCA9CitzdWZ3b3JkIG11Y2hhIDEzNC0xMzYtMTYtMSBtdWNoYWNobyBtdWNoYXMKK3N1ZndvcmQgbXVjaG8gMTM0LTEzNi0xNi0xMzUKK3dvcmQgbXVzdCAxMzQtMzQKK3dvcmQgbXN0ID0KK2JlZ3dvcmQgbXVzdGkgMTM0LTM0LTI0IG11c3RpbmVzcword29yZCBtdXN0biAxMzQtMzQtMTM0NSBtdXN0bid0Cit3b3JkIG11c3R5IDEzNC0zNC0xMzQ1NgorYmVnd29yZCBteW8gPSBteW9maWJyb2JsYXN0cword29yZCBteXNlbGYgMTM0LTEzNDU2LTEyNAorY29udHJhY3Rpb24gbXlmCisKKyMgdGhlIGxldHRlciBuCithbHdheXMgbiAxMzQ1CithbHdheXMgTiAxMzQ1CithbHdheXMgbmFtZSA1LTEzNDUKK2Fsd2F5cyBuYW1lZSA9IE1jTmFtZWUKK2Fsd2F5cyBuYW1lbnQgMTM0NS0xLTU2LTIzNDUgdG91cm5hbWVudAorYWx3YXlzIG5hbWVzZSA9CitlbmRudW0gbmQgPSAoc2Vjb25kKQorYWx3YXlzIG5lY2Vzc2FyeSAxMzQ1LTE1LTE0Citjb250cmFjdGlvbiBuZWMKK3dvcmQgbmVpdGhlciAxMzQ1LTE1LTI0Citjb250cmFjdGlvbiBuZWkKK2JlZ3dvcmQgbmVvZiA9IG5lb2Zhc2Npc3QKK21pZGVuZHdvcmQgbmVzcyA1Ni0yMzQKK3N1ZndvcmQgbmV2ZXJzIDEzNDUtMTUtMTIzNi0xMjQ1Ni0yMzQgTG91aXMgTmV2ZXJzCitiZWd3b3JkIG5ldyA9CitiZWd3b3JkIG5ld3MgPSBuZXdzaGF3aworYWx3YXlzIG5pZ2h0aCAxMzQ1LTI0LTEyNi0yMzQ1LTEyNSBuaWdodGhhd2sga25pZ2h0aG9vZAorYmVnd29yZCBub24gPQord29yZCBub25lIDEzNDUtNS0xMzUKK3dvcmQgbm9uZXMgMTM0NS01LTEzNS0yMzQKK3dvcmQgbm9uZXN1Y2ggMTM0NS01LTEzNS0yMzQtMTYKK3dvcmQgbm9uZXRoZWxlc3MgMTM0NS01LTEzNS0yMzQ2LTQ2LTIzNAorYmVnd29yZCBub25yZXZlcnMgMTM0NS0xMzUtMTI0NS0xMjM1LTE1LTEyMzYtMTI0NTYtMjM0IG5vbnJldmVyc2libGUKK3dvcmQgbm9vbmUgMTM0NS0xMzUtNS0xMzUKK2JlZ3dvcmQgbm9zZWRpdiA9IG5vc2VkaXZlCit3b3JkIG5vdCAxMzQ1Cit3b3JkIG5vd2F5cyA9CitzdWZ3b3JkIG5vd2hlcmUgMTM0NS0xMzUtNS0xNTYKK3dvcmQgbm93aXNlID0KK2JlZ3dvcmQgbnV0aCAxMzQ1LTEzNi0yMzQ1LTEyNSBudXRoYXRjaCBudXRob3VzZQord29yZCBudXRoZXIgMTM0NS0xMzYtMjM0Ni0xMjM1IChkaWFsZWN0KQorCisjIHRoZSBsZXR0ZXIgbword29yZCBvIDEzNQorYWx3YXlzIG8gMTM1CithbHdheXMgTyAxMzUKK2JlZ3dvcmQgb2UgPSBPZWRpcHVzCittaWR3b3JkIG9lZCA9IFNjaHJvZWRlcgorYWx3YXlzIG9lbiA9IFBob2VuaXgKK2xhcmdlc2lnbiBvZiAxMjM1NgorbWlkZW5kd29yZCBvZmFyIDEzNS0xMjQtMzQ1IGluc29mYXIKK2Fsd2F5cyBvZm9sZCA9IHR3b2ZvbGQKK21pZHdvcmQgb2ZvciAxMzUtMTIzNDU2IHRoZXJtb2Zvcm0KK3dvcmQgb2xlYWdpbm91cyAxMzUtMTIzLTE1LTEtMTI0NS0zNS0xMjU2LTIzNAorc3Vmd29yZCBvbmVnaW4gMTM1LTEzNDUtMTUtMTI0NS0zNSBFdWdlbmUgT25lZ2luJ3MgZ3JhbmRmYXRoZXIKK2Fsd2F5cyBvbmVzaSA9IEluZG9uZXNpYQorc3Vmd29yZCBvbmVzaWUgNS0xMzUtMjM0LTI0LTE1IChiYWJ5IGNsb3RoaW5nKQorbWlkZW5kd29yZCBvbmVzcyAxMzUtNTYtMjM0CittaWRlbmR3b3JkIG9uZWVyIDEzNS0xMzQ1LTE1LTEyNDU2IHBpb25lZXIKK21pZGVuZHdvcmQgb25lZCAxMzUtMTM0NS0xMjQ2IGhvbmVkCithbHdheXMgb25lIDUtMTM1CithbHdheXMgYWlvbmUgPSB6YWJhaW9uZQorbWlkZW5kd29yZCBtaW9uZSA9IEhlcm1pb25lCitzdWZ3b3JkIG9uZWlyaWMgPQorYWx3YXlzIG9uZW50IDEzNS0xMzQ1LTI2LTIzNDUKK21pZGVuZHdvcmQgb25lb3VzIDEzNS0xMzQ1LTE1LTEyNTYtMjM0IGVycm9uZW91cworYWx3YXlzIG9uZXIgMTM1LTEzNDUtMTI0NTYKK21pZGVuZHdvcmQgb25lc2UgPSBDYW50b25lc2UKK3dvcmQgb25lc2VsZiA1LTEzNS0xMjQKK3dvcmQgb25lZiA9CittaWRlbmR3b3JkIG9uZXNzIDEzNS01Ni0yMzQgRGVhY29uZXNzCittaWRlbmR3b3JkIG9uZXQgPSBwaG9uZXRpY3MgYmF5b25ldAorZW5kd29yZCBvbmV0aCAxMzUtMTM0NS0xNS0xNDU2IGZhc2hpb25ldGgKK2VuZHdvcmQgb25leiA9IE9yZG9uZXoKK21pZGVuZHdvcmQgb25nIDU2LTEyNDUKK21pZGVuZHdvcmQgb25nZW4gMTM1LTEzNDUtMTI0NS0yNiB1bmNvbmdlbmlhbAorbWlkd29yZCBvb2VuIDEzNS0xMzUtMjYgY29uc3RpdG9vZW5jeSAoZGlhbGVjdDogQnVjaGFuKQorYWx3YXlzIG9vbiA9IHNvb25lcgorYmVnd29yZCBvcmFuZ2VhID0gb3JhbmdlYWRlCitiZWd3b3JkIG9yYW5nZXIgPSBvcmFuZ2VyeSwgLWllcworYmVnd29yZCBvcnRob3BlZGkgMTM1LTEyMzUtMTQ1Ni0xMzUtMTIzNC0xMjQ2LTI0IG9ydGhvcGVkaWNzCit3b3JkIG91ID0KK2Fsd2F5cyBvdSAxMjU2CittaWRlbmR3b3JkIG91bmQgNDYtMTQ1CittaWRlbmR3b3JkIG91bnQgNDYtMjM0NQorYWx3YXlzIG91cnNlbHZlcyAxMjU2LTEyMzUtMTIzNi0yMzQKK3dvcmQgb3VydnMgPQord29yZCBvdXQgMTI1NgorYmVnd29yZCBvdXRkaXN0IDEyNTYtMjM0NS0xNDUtMjQtMjM0LTIzNDUgb3V0ZGlzdGFuY2UKK2Fsd2F5cyBvdWdodCA1LTEyNTYKK2JlZ3dvcmQgb3V0aCAxMjU2LTIzNDUtMTI1IG91dGhlbGQKK2JlZ3dvcmQgb3ZlcmVhIDEzNS0xMjM2LTEyNDU2LTE1LTEgb3ZlcmVhdCBvdmVyZWFnZXIgb3ZlcmVhc3kKK2JlZ3dvcmQgb3ZlcmVhciAxMzUtMTIzNi0xMjQ1Ni0xNS0zNDUgb3ZlcmVhcm5lc3QKK2Fsd2F5cyBvdyAyNDYKK3dvcmQgbydjbG9jayAxMzUtMy0xNAorCisjIHRoZSBsZXR0ZXIgcAorYWx3YXlzIHAgMTIzNAorYWx3YXlzIFAgMTIzNAorYWx3YXlzIHBhaWQgMTIzNC0xNDUKK2NvbnRyYWN0aW9uIHBkCitiZWd3b3JkIHBhaW5zdCAxMjM0LTEtMzUtMjM0LTIzNDUgcGFpbnN0YWtlCitiZWd3b3JkIHBhbGluZ2VuIDEyMzQtMS0xMjMtMzUtMTI0NS0yNiBwYWxpbmdlbmVzaXMgKG5ldyBiaXJ0aCkKK3N1ZndvcmQgcGFudGhlciAxMjM0LTEtMTM0NS0yMzQ2LTEyMzUgcGFudGhlcmVzcXVlCithbHdheXMgcGFydCA1LTEyMzQKK2JlZ3dvcmQgcGFydGEgMTIzNC0zNDUtMjM0NS0xIHBhcnRha2UKK2JlZ3dvcmQgcGFydGhlIDEyMzQtMzQ1LTIzNDYgUGFydGhlbm9uLCBQYXJ0aGVuaWEKK3dvcmQgcGFydGh5IDEyMzQtMzQ1LTE0NTYtMTM0NTYgZGltaW51dGl2ZSBvZiBQYXJ0aGVuaWEKK2JlZ3dvcmQgcGFydG8gMTIzNC0zNDUtMjM0NS0xMzUKK2JlZ3dvcmQgcGVhY2VuIDEyMzQtMi0xNC0xNS0xMzQ1IHBlYWNlbmlrCitiZWd3b3JkIHBlZGljIDEyMzQtMTI0Ni0yNC0xNCBwZWRpY3VyZSwgcGVkaWNhYiwgcGVkaWNsZQorYmVnd29yZCBwZWRvIDEyMzQtMTI0Ni0xMzUgcGVkb21ldGVyLCBwZWRvYmFwdGlzdAorc3Vmd29yZCBwZWVibGVzIDEyMzQtMTUtMTUtMzQ1Ni0yMzQgUGVlYmxlc3NoaXJlCit3b3JkIHBlb3BsZSAxMjM0CithbHdheXMgcGVyY2VpdmUgMTIzNC0xMjQ1Ni0xNC0xMjM2Cit3b3JkIHBlcmN2ID0KK3dvcmQgcGVyY3ZkID0KK3dvcmQgcGVyY3ZyID0KK3dvcmQgcGVyY3ZzID0KK3dvcmQgcGVyY3ZzdCA9Cit3b3JkIHBlcmN2dGggPQorYWx3YXlzIHBlcmNlaXZpbmcgMTIzNC0xMjQ1Ni0xNC0xMjM2LTEyNDUKK3dvcmQgcGVyY3ZnID0KK2Fsd2F5cyBwZXJoYXBzIDEyMzQtMTI0NTYtMTI1Cit3b3JkIHBlcmggPQord29yZCBwZXJpbiAxMjM0LTEyNDU2LTM1Cit3b3JkIHBlcmluJ3MgMTIzNC0xMjQ1Ni0zNS0zLTIzNAord29yZCBwZXJpbnMgMTIzNC0xMjQ1Ni0zNS0yMzQKK2JlZ3dvcmQgcGVyc2V2ZXIgMTIzNC0xMjQ1Ni0yMzQtMTUtMTIzNi0xMjQ1NiBwZXJzZXZlcmUKK3N1ZndvcmQgcGV0YXIgMTIzNC0xNS0yMzQ1LTM0NSBwZXRhcmQKK2Fsd2F5cyBwaGVyIDEyMzQtMTI1LTEyNDU2IGN5cGhlcmVkCit3b3JkIHBob25lbWUgPQord29yZCBwaG9uZW1lcyA9Cit3b3JkIHBob25leSA9CitiZWd3b3JkIHBob25lbWkgPSBwaG9uZW1pYworYmVnd29yZCBwaG9zcGhvID0gcGhvc3Bob2ZydWN0b2tpbmFzZQorc3Vmd29yZCBwaWNvdWx0IDEyMzQtMjQtMTQtMTI1Ni0xMjMtMjM0NSBKb2RpIFBpY291bHQsIGFuIGF1dGhvcgorYmVnd29yZCBwaW5lYSAxMjM0LTM1LTE1LTEgcGluZWFwcGxlCit3b3JkIHBpbmVhbCAxMjM0LTM1LTItMTIzCitzdWZ3b3JkIHBpcGVkcmVhbSAxMjM0LTI0LTEyMzQtMTUtMTQ1LTEyMzUtMi0xMzQKK3N1ZndvcmQgcG9sZWF4ID0KK2JlZ3dvcmQgcG9ydGhvID0gcG9ydGhvbGUKK3N1ZndvcmQgcG9ydGhvcyAxMjM0LTEzNS0xMjM1LTE0NTYtMTM1LTIzNCAoRHVtYXMpIFBvcnRob3Nlc3F1ZQorYmVnd29yZCBwb3RoID0gcG90aG9sZSBwb3Rob29rIHBvdGhvdXNlCitzdWZ3b3JkIHBvdGhlciAxMjM0LTEzNS0yMzQ2LTEyMzUKK3N1ZndvcmQgcG90aGVyYiAxMjM0LTEzNS0yMzQ1LTEyNS0xMjQ1Ni0xMgorYmVnd29yZCBwcmUgPQorc3Vmd29yZCBwcmVhY2UgMTIzNC0xMjM1LTItMTQtMTUgb2Jzb2xldGUgZm9yIHByZXNzCithbHdheXMgcHJlYWNoIDEyMzQtMTIzNS0yLTE2CitzdWZ3b3JkIHByZWFrbmVzcyAxMjM0LTEyMzUtMi0xMy01Ni0yMzQKK3dvcmQgcHJlZCAxMjM0LTEyMzUtMTI0NiBsaXF1aWQgcHJlZDogcHJlZG5pc29uZSB0cmFkZSBuYW1lCitzdWZ3b3JkIHByZWRhdG9yIDEyMzQtMTIzNS0xMjQ2LTEtMjM0NS0xMzUtMTIzNQorc3Vmd29yZCBwcmVkZWNlc3NvciAxMjM0LTEyMzUtMTI0Ni0xNS0xNC0xNS0yMzQtMjM0LTEzNS0xMjM1CitiZWd3b3JkIHByZWRpY2F0IDEyMzQtMTIzNS0xMjQ2LTI0LTE0LTEtMjM0NSBwcmVkaWNhdGVkCitzdWZ3b3JkIHByZWRpY2F0aW9uIDEyMzQtMTIzNS0xMjQ2LTI0LTE0LTYtMTM0NQorc3Vmd29yZCBwcmVkaWthbnQgMTIzNC0xMjM1LTEyNDYtMjQtMTMtMS0xMzQ1LTIzNDUKK2JlZ3dvcmQgcHJlZG4gMTIzNC0xMjM1LTEyNDYtMTM0NSBwcmVkbmlzb25lIHByZWRuaXNvbG9uZQorc3Vmd29yZCBwcmVkc29sYW4gMTIzNC0xMjM1LTEyNDYtMjM0LTEzNS0xMjMtMS0xMzQ1CitiZWd3b3JkIHByZWVyID0gcHJlZXJlY3QKK2JlZ3dvcmQgcHJlZnVsZyA9IHByZWZ1bGdlbmNlIHByZWZ1bGdlbnQKK3dvcmQgcHJlbiAxMjM0LTEyMzUtMjYgYSBzdXJuYW1lCitiZWd3b3JkIHByZW5kIDEyMzQtMTIzNS0yNi0xNDUgcHJlbmRlcmdhc3QKK3N1ZndvcmQgcHJlbnNhIDEyMzQtMTIzNS0yNi0yMzQtMQorc3Vmd29yZCBwcmVudCAxMjM0LTEyMzUtMjYtMjM0NQorc3Vmd29yZCBwcmVwc3ljaGVkZWxpYyAxMjM0LTEyMzUtMTUtMTIzNC0yMzQtMTM0NTYtMTYtMTUtMTQ1LTE1LTEyMy0yNC0xNAorYWx3YXlzIHByb2YgPQord29yZCBwcm9mIDEyMzQtMTIzNS0xMjM1Ngorc3Vmd29yZCBwcm9mYW5hdGlvbiAxMjM0LTEyMzUtMTIzNTYtMS0xMzQ1LTYtMTM0NQorc3Vmd29yZCBwcm9mZiAxMjM0LTEyMzUtMTIzNTYtMTI0IHByb2ZmZXIKK2JlZ3dvcmQgcHJvZmxpZ2EgMTIzNC0xMjM1LTEyMzU2LTEyMy0yNC0xMjQ1LTEgcHJvZmxpZ2F0ZSBwcm9mbGlnYWN5Cit3b3JkIHByb2ZzIDEyMzQtMTIzNS0xMjM1Ni0yMzQKK2Fsd2F5cyBwcm9maXQgMTIzNC0xMjM1LTEyMzU2LTI0LTIzNDUKK2JlZ3dvcmQgcHJvdG8gPSBwcm90b2VuY2hhbnRlciAoQ2VydmFudGVzKQorc3Vmd29yZCBwcm91bmlvbiA9IHByb3VuaW9uaXN0CitiZWd3b3JkIHBzeWNoZWQgMTIzNC0yMzQtMTM0NTYtMTYtMTUtMTQ1IHBzeWNoZWRlbGljCit3b3JkIHB1bHNlYXVkaW8gPQorCisjIHRoZSBsZXR0ZXIgcQorYWx3YXlzIHEgMTIzNDUKK2Fsd2F5cyBRIDEyMzQ1CithbHdheXMgcXVpY2sgMTIzNDUtMTMKK2NvbnRyYWN0aW9uIHFrCit3b3JkIHF1aXRlIDEyMzQ1CithbHdheXMgcXVlc3Rpb24gNS0xMjM0NQorCisjIHRoZSBsZXR0ZXIgcgorYWx3YXlzIHIgMTIzNQorYWx3YXlzIFIgMTIzNQorc3Vmd29yZCByYWRpbyA9IHJhZGlvZnJlcXVlbmNpZXMKK3N1ZndvcmQgcmFmdGVyIDEyMzUtMS0xMjQtMjM0NS0xMjQ1Ngord29yZCByYXRoZXIgMTIzNQorYmVnd29yZCByYXRobyA9IHJhdGhvbGUKK3N1ZndvcmQgcmF3ID0gcmF3aGlkZQorZW5kbnVtIHJkID0gKHRoaXJkKQorYmVnd29yZCByZWFiID0gcmVhYnNvcmJlZAorYmVnd29yZCByZWFjYyAxMjM1LTE1LTEtMjUgcmVhY2NlbGVyYXRlCithbHdheXMgcmVhY2ggMTIzNS0yLTE2CitiZWd3b3JkIHJlYWNoaWV2IDEyMzUtMTUtMS0xNi0yNC0xNS0xMjM2IHJlYWNoaWV2aW5nCitiZWd3b3JkIHJlYWNxIDEyMzUtMTUtMS0xNC0xMjM0NSByZWFjcXVpcmUgcmVhY3F1YWludAorYWx3YXlzIHJlYWN0ID0KK2Fsd2F5cyByZWFjdGlvbiAxMjM1LTE1LTEtMTQtNTYtMTM0NQorc3Vmd29yZCByZWFkYXB0ID0KK3dvcmQgcmVhZGQgPQorYmVnd29yZCByZWFkZCAxMjM1LTE1LTEtMjU2IHJlYWRkcmVzc2luZworYmVnd29yZCByZWFkaiA9IHJlYWRqdXN0CitiZWd3b3JkIHJlYWRtID0gcmVhZG1pdAorYmVnd29yZCByZWFkbyA9IHJlYWRvcHRpb24gcmVhZG9ybgorc3Vmd29yZCByZWFkb3V0IDEyMzUtMi0xNDUtMTI1Ni0yMzQ1CitiZWd3b3JkIHJlYWR2ID0gcmVhZHZhbmNlIHJlYWR2b2NhdGUKK2JlZ3dvcmQgcmVhZmYgMTIzNS0xNS0xLTIzNQorYWx3YXlzIHJlYWdlbnQgMTIzNS0xNS0xLTEyNDUtMjYtMjM0NQorYmVnd29yZCByZWFnZyAxMjM1LTE1LTEtMjM1NiByZWFnZ3JlZ2F0ZWQKK2JlZ3dvcmQgcmVhbGlnID0gcmVhbGlnbgorYmVnd29yZCByZWFsbG8gPSByZWFsbG9jYXRlIAorc3Vmd29yZCByZWFsdGVyIDEyMzUtMTUtMS0xMjMtMjM0NS0xMjQ1NiByZWFsdGVyYXRpb24KK2JlZ3dvcmQgcmVhbiA9IHJlYW5hbHl6ZSwgcmVhbmltYXRlCitiZWd3b3JkIHJlYXBwID0gcmVhcHBlYXIKK2JlZ3dvcmQgcmVhc2MgMTIzNS0xNS0xLTIzNC0xNCByZWFzY2VuZAorYmVnd29yZCByZWFzcyAxMjM1LTE1LTEtMjM0LTIzNAorYmVnd29yZCByZWF0dCA9IHJlYXR0YWNoCitiZWd3b3JkIHJlYXUgPSByZWF1dGhvcml6YXRpb24KK2JlZ3dvcmQgcmVhdyA9IHJlYXdha2VuCitiZWd3b3JkIHJlZGF0ID0gcmVkYXRlZAorYmVnd29yZCByZWRlID0KK2JlZ21pZHdvcmQgcmVkZWUgPSB1bnJlZGVlbWFibGUgY29yZWRlZW1lZAorYmVnd29yZCByZWRleSAxMjM1LTEyNDYtMTUtMTM0NTYgcmVkZXllZAorYmVnd29yZCByZWRpID0KK3dvcmQgcmVkbyA9CitiZWd3b3JkIHJlZG9sIDEyMzUtMTI0Ni0xMzUtMTIzIHJlZG9sZW50Cit3b3JkIHJlZG9uZSAxMjM1LTE1LTE0NS01LTEzNQorYmVnd29yZCByZWRvdSAxMjM1LTE1LTE0NS0xMjU2IHJlZG91YmxlIHJlZG91YnQgCitzdWZ3b3JkIHJlZG91bmQgMTIzNS0xNS0xNDUtNDYtMTQ1CithbHdheXMgcmVkdSA9IHJlZHVjZSByZWR1bmRhbnQgcmVkdXBsaWNhdGUKK2Fsd2F5cyByZWR1bCAxMjM1LTEyNDYtMTM2LTEyMyBpbmNyZWR1bG91cworYmVnd29yZCByZWR5ID0gcmVkeWVkCithbHdheXMgcmVjZWl2ZSAxMjM1LTE0LTEyMzYKK2NvbnRyYWN0aW9uIHJjdgorY29udHJhY3Rpb24gcmN2ZAorY29udHJhY3Rpb24gcmN2cgorY29udHJhY3Rpb24gcmN2cword29yZCByY3ZzdCA9Cit3b3JkIHJjdnRoID0KK2Fsd2F5cyByZWNlaXZpbmcgMTIzNS0xNC0xMjM2LTEyNDUKK2NvbnRyYWN0aW9uIHJjdmcKK2JlZ3dvcmQgcmVkaXMgPSByZWRpc3RyaWJ1dGUKK2JlZ3dvcmQgcmVkciA9IHJlZHJlc3MKK2JlZ3dvcmQgcmVkcm8gMTIzNS0xMjQ2LTEyMzUtMTM1IHJlZHJvb3QgcmVkcm9jaworc3Vmd29yZCByZWRyb3ZlID0KK2JlZ3dvcmQgcmVkcnUgMTIzNS0xMjQ2LTEyMzUtMTM2IHJlZHJ1dGhpdGUKK2JlZ3dvcmQgcmVmdWxnID0gcmVmdWxnZW50IHJlZnVnZW5jZQorYWx3YXlzIHJlam9pY2UgMTIzNS0yNDUtMTQKK2NvbnRyYWN0aW9uIHJqYworY29udHJhY3Rpb24gcmpjZAorY29udHJhY3Rpb24gcmpjcgorY29udHJhY3Rpb24gcmpjcword29yZCByamNzdCA9Cit3b3JkIHJqY3RoID0KK2Fsd2F5cyByZWpvaWNpbmcgMTIzNS0yNDUtMTQtMTI0NQorY29udHJhY3Rpb24gcmpjZworc3Vmd29yZCByZWpvbmUgPSByZWpvbmVhZG9yCitzdWZ3b3JkIHJlbmFtaW5nIDEyMzUtMTUtMTM0NS0xLTEzNC0zNDYgcmVuYW1pbmdzCitiZWd3b3JkIHJlbmF0aW9uYWwgMTIzNS0xNS0xMzQ1LTYtMTM0NS0xLTEyMyByZW5hdGlvbmFsaXNlIHJlbmF0aW9uYWxpemF0aW9uCitiZWd3b3JkIHJlbmUgPSByZW5lZ290aWF0ZQorYmVnd29yZCByZW5lZ2FkIDEyMzUtMjYtMTUtMTI0NS0xLTE0NSByZW5lZ2FkZQorc3Vmd29yZCByZW5mcmV3IDEyMzUtMjYtMTI0LTEyMzUtMTUtMjQ1NiBSZW5mcmV3c2hpcmUKK2JlZ3dvcmQgcmVuaSA9IHJlbmlnCitiZWd3b3JkIHJlbm9tID0gcmVub21pbmF0ZQorYmVnd29yZCByZW5vdSAxMjM1LTE1LTEzNDUtMTI1NiByZW5vdW5jZQorc3Vmd29yZCByZW5vd24gMTIzNS0xNS0xMzQ1LTI0Ni0xMzQ1IHJlbm93bmVkCitiZWd3b3JkIHJlbnUgPSByZW51bmNpYXRpb24KK2JlZ3dvcmQgcmVyIDEyMzUtMTUtMTIzNSByZXJlYWQKK2JlZ3dvcmQgcmV2ZXIgMTIzNS0xNS0xMjM2LTEyNDU2IHJldmVyZQorYmVnd29yZCByZXZlcmVuIDEyMzUtNS0xNS0yNiByZXZlcmVudAorc3Vmd29yZCByZXZlcmVuY2UgMTIzNS01LTE1LTU2LTE1IHJldmVyZW5jZQorc3Vmd29yZCByZXZlcmllIDEyMzUtNS0xNS0yNC0xNQorYmVnd29yZCByaCA9IFJoYWRhbWFudGh1cworYWx3YXlzIHJoZWluIDEyMzUtMTI1LTE1LTM1Cit3b3JkIHJpZmxlcnkgPQorYWx3YXlzIHJpZ2h0IDUtMTIzNQorc3Vmd29yZCByb3NlYW5uID0KKworIyB0aGUgbGV0dGVyIHMKK2VuZG51bSBzID0gNDBzIChubyBsZXR0ZXIgc2lnbikKK2Fsd2F5cyBzIDIzNAorYWx3YXlzIFMgMjM0CitiZWd3b3JkIHNhZGRsZW5vcyAyMzQtMS0yNTYtMTIzLTE1LTEzNDUtMTM1LTIzNCBzYWRkbGVub3NlCit3b3JkIHNhaWQgMjM0LTE0NQorY29udHJhY3Rpb24gc2QKK3N1ZndvcmQgc2FsbW9uID0gc2FsbW9uZWxsYQorc3Vmd29yZCBzYXcgPSBzYXdob3JzZQorc3Vmd29yZCBzY2hlaGVyZXphZGUgMjM0LTE2LTE1LTEyNS0xMjQ1Ni0xNS0xMzU2LTEtMTQ1LTE1IGFsdGVybmF0ZSBzcGVsbGluZyBvZiBTY2hlaGVyYXphZGUKK3N1ZndvcmQgc2NyZXcgPSBzY3Jld2hvbGUKK2Fsd2F5cyBzZWRhID0KK3N1ZndvcmQgc2VkYW4gMjM0LTEyNDYtMS0xMzQ1CithbHdheXMgc2VkYXRpb24gMjM0LTE1LTE0NS02LTEzNDUKK2Fsd2F5cyBzZWRhdGl2IDIzNC0xMjQ2LTEtMjM0NS0yNC0xMjM2CithbHdheXMgc2VkaSA9CithbHdheXMgc2VkaW1lbnQgMjM0LTEyNDYtMjQtNTYtMjM0NQorYWx3YXlzIHNlZHUgPQorYmVnd29yZCBzZWR1bCAyMzQtMTI0Ni0xMzYtMTIzIHNlZHVsb3VzCitzdWZ3b3JkIHNlZHVtIDIzNC0xMjQ2LTEzNi0xMzQKK2Fsd2F5cyBzZXZlcmUgMjM0LTE1LTEyMzYtMTI0NTYtMTUgb3ZlcnNldmVyZSBzZXZlcmVseQorYWx3YXlzIHNldmVyZWQgMjM0LTUtMTUtMTI0NiBkaXNzZXZlcmVkCit3b3JkIHNldmVyZXIgMjM0LTE1LTEyMzYtMTI0NTYtMTI0NTYgc2V2ZXJlLXIgKGNvdWxkIGFsc28gYmUgc2V2ZXItZXIpCit3b3JkIHNldmVyZXJzIDIzNC01LTE1LTEyNDU2LTIzNAorYWx3YXlzIHNldmVyaXQgMjM0LTE1LTEyMzYtMTI0NTYtMjQtMjM0NSBzZXZlcml0aWVzCithbHdheXMgc2V2ZXJpdHkgMjM0LTE1LTEyMzYtMTI0NTYtNTYtMTM0NTYKK3dvcmQgc2hhbGwgMTQ2Cit3b3JkIHNoID0KK2Fsd2F5cyBzaCAxNDYKK2Fsd2F5cyBzaGF1cyA9IEluIEdlcm1hbiBuYW1lcword29yZCBzaG9vZmx5IDE0Ni0xMzUtMTM1LTEyNC0xMjMtMTM0NTYgc2hvb2ZseSBwaWUKK3N1ZndvcmQgc2hvcnQgMTQ2LTEzNS0xMjM1LTIzNDUgc2hvcnRob3JuCitzdWZ3b3JkIHNob3Nob25lIDE0Ni0xMzUtMTQ2LTEzNS0xMzQ1LTE1IFNob3Nob25lYW4gbGFuZ3VhZ2UKK2Fsd2F5cyBzaG91bGQgMTQ2LTE0NQord29yZCBzaGQgPQorYWx3YXlzIHNob3VsZGVyIDE0Ni0xMjU2LTEyMy0xNDUtMTI0NTYKK2JlZ3dvcmQgc2lkZSA9IHNpZGVub3RlCitzdWZ3b3JkIHNpZGVkIDIzNC0yNC0xNDUtMTI0Ngorc3Vmd29yZCBzaWRlciAyMzQtMjQtMTQ1LTEyNDU2IHNpZGVyZWFsIHNpZGVyaXRlCitzdWZ3b3JkIHNpbmcgMjM0LTM0NiBzaW5nYWxvbmcKK21pZGVuZHdvcmQgc2lvbiA0Ni0xMzQ1CitiZWd3b3JkIHNrZWRhZGRsIDIzNC0xMy0xNS0xNDUtMS0yNTYtMTIzIHNrZWRhZGRsaW5nCitiZWd3b3JkIHN0ZXZlZG9yIDM0LTE1LTEyMzYtMTI0Ni0xMzUtMTIzNSBzdGV2ZWRvcmluZworbWlkZW5kd29yZCBzdGlvbiAyMzQtNTYtMTM0NQord29yZCBzbWl0aGVyZWVucyAyMzQtMTM0LTI0LTIzNDYtMTIzNS0xNS0yNi0yMzQKK3dvcmQgc28gMjM0CitiZWd3b3JkIHNvbG8gPSBzb2xvZW5zaXMgKGFudGhyb3BvbG9neSkKK2Fsd2F5cyBzb21lIDUtMjM0CittaWRlbmR3b3JkIHNvbWVkIDIzNC0xMzUtMTM0LTEyNDYgcmFuc29tZWQKK2Fsd2F5cyBzb21lciAyMzQtMTM1LTEzNC0xMjQ1NiBzb21lcnNhdWx0IAorYWx3YXlzIHNvbWV0ZXIgMjM0LTEzNS0xMzQtMTUtMjM0NS0xMjQ1NiBnYXNvbWV0ZXIgCithbHdheXMgc29tZXZlciAyMzQtMTM1LTEzNC01LTE1CitzdWZ3b3JkIHNwYXJlcmliIDIzNC0xMjM0LTM0NS0xNS0xMjM1LTI0LTEyCitiZWd3b3JkIHNwZWFrZWFzIDIzNC0xMjM0LTItMTMtMTUtMS0yMzQgc3BlYWtlYXN5CitzdWZ3b3JkIHNwZWVkIDIzNC0xMjM0LTE1LTEyNDYgc3BlZWRvbWV0ZXIKK2Fsd2F5cyBzcGlyaXQgNDU2LTIzNAorYmVnd29yZCBzcHJlYWRlYWdsIDIzNC0xMjM0LTEyMzUtMi0xNDUtMTUtMS0xMjQ1LTEyMyBzcHJlYWRlYWdsZWQKK3N1ZndvcmQgc3F1YWxsID0gc3F1YWxseQorbWlkZW5kd29yZCBzc3dvcmQgMjM0LTIzNC00NS0yNDU2IGNyb3Nzd29yZCAKK2VuZG51bSBzdCAzNCAoZmlyc3QpCit3b3JkIHN0ID0KK3dvcmQgc3QuIDM0LTI1NiBTYWludCBTdHJlZXQKK2Fsd2F5cyBzdCAzNAorYmVnd29yZCBzdGFnaCAzNC0xLTEyNDUtMTI1IHN0YWdob3VuZCBzdGFnaHVudAorYWx3YXlzIHN0aCAyMzQtMTQ1NgorbWlkZW5kd29yZCBzdGhvbGUgMzQtMTI1LTEzNS0xMjMtMTUgYmxhc3Rob2xlCithbHdheXMgc3RoZSAyMzQtMjM0NgorbWlkZW5kd29yZCBzdGhlYWQgMzQtMTI1LTItMTQ1IG1hc3RoZWFkCittaWRlbmR3b3JkIHN0aG9mIDM0LTEyNS0xMjM1NiBXZXN0aG9mZgorYWx3YXlzIHN0aG9vZCAzNC0xMjUtMTM1LTEzNS0xNDUgcHJpZXN0aG9vZAord29yZCBzdGlsbCAzNAorYWx3YXlzIHN0aW1lIDIzNC01LTIzNDUKK21pZGVuZHdvcmQgc3Rvd24gMjM0LTIzNDUtMjQ2LTEzNDUgUGlja3N0b3duCitiZWd3b3JkIHN0eXJvIDM0LTEzNDU2LTEyMzUtMTM1IHN0eXJvZm9hbQorYWx3YXlzIHNoZWFkIDIzNC0xMjUtMi0xNDUKK2Fsd2F5cyBzaGVhcnQgMjM0LTEyNS0xNS0zNDUtMjM0NQorYWx3YXlzIHNob3VzZSAyMzQtMTI1LTEyNTYtMjM0LTE1CithbHdheXMgc3NoID0KK2Fsd2F5cyBzaG9vZCA9Cit3b3JkIHN1Y2ggMjM0LTE2CitlbmR3b3JkIHN1Y2ggMjM0LTE2IG5vbmVzdWNoIHNvbWVzdWNoCitiZWZvcmUgY29uc29uYW50IHN1ZndvcmQgc3VjaCAyMzQtMTYKK3dvcmQgc2NoID0KK3N1ZndvcmQgc2Nob2ZpZWxkIDIzNC0xNi0xMzUtMTI0LTI0LTE1LTEyMy0xNDUKK21pZHdvcmQgc3Rob3VzIDM0LTEyNS0xMjU2LTIzNCBndWVzdGhvdXNlIG9hc3Rob3VzZSBtYXN0aG91c2UKK3N1ZndvcmQgc3RyYXcgMzQtMTIzNS0xLTI0NTYgc3RyYXdoYXQKK2JlZ3dvcmQgc3VwZXJzZWQgMjM0LTEzNi0xMjM0LTEyNDU2LTIzNC0xMjQ2IHN1cGVyc2VkaW5nCithbHdheXMgc3dvcmQgPQorc3Vmd29yZCBzeW1vZW5zIDIzNC0xMzQ1Ni0xMzQtMTM1LTI2LTIzNCAoYW4gYXV0aG9yKQorCisjIHRoZSBsZXR0ZXIgdAorYWx3YXlzIHQgMjM0NQorYWx3YXlzIFQgMjM0NQorc3Vmd29yZCB0YWtlYXdheSA9CitzdWZ3b3JkIHRlYXJvb20gMjM0NS0yLTEyMzUtMTM1LTEzNS0xMzQgdGVhcm9vbXMKK2VuZG51bSB0aCAxNDU2IChmb3VydGgsIGZpZnRoLCAuLi4pCit3b3JkIHRoID0KK2Fsd2F5cyB0aCAxNDU2CithbHdheXMgdGhhbmQgMjM0NS0xMjUtMTIzNDYgc2hvcnRoYW5kCit3b3JkIHRoYXQgMjM0NQorYWx3YXlzIHRoZWFwIDIzNDUtMTI1LTItMTIzNCBhbnRoZWFwCittaWRlbmR3b3JkIHRoZXJlc3F1ZSAyMzQ2LTEyMzUtMTUtMjM0LTEyMzQ1LTEzNi0xNSBXZXJ0aGVyZXNxdWUKK2Fsd2F5cyB0aGlsbCAyMzQ1LTEyNS0yNC0xMjMtMTIzIGFudGhpbGwKK2JlZm9yZSBhcG9zdHJvcGhlIHdvcmQgdGhpcyAxNDU2LTI0LTIzNCB0aGlzJ2xsCit3b3JkIHRoaXMgMTQ1NgorbWlkZW5kd29yZCB0aG9mIDIzNDUtMTI1LTEyMzU2IFJpY2h0aG9mZW4KK21pZGVuZHdvcmQgdGhvbGUgPSBib2x0aG9sZSBidXR0aG9sZSBjYXRob2xlIGtub3Rob2xlCitiZWd3b3JkIHRocmVlZGltIDE0NTYtMTIzNS0xNS0xNS0xNDUtMjQtMTM0IHRocmVlZGltZW5zaW9uYWwKK3dvcmQgdGh5c2VsZiAxNDU2LTEzNDU2LTEyNAord29yZCB0aHlmID0KK2Fsd2F5cyB0bmFtID0KK2pvaW53b3JkIHRvIDIzNQord29yZCB0b2RheSAyMzQ1LTE0NQord29yZCB0by1kYXkgMjM0NS0xNDUKK2NvbnRyYWN0aW9uIHRkCit3b3JkIHRvbW9ycm93IDIzNDUtMTM0Cit3b3JkIHRvLW1vcnJvdyAyMzQ1LTEzNAorY29udHJhY3Rpb24gdG0KK3dvcmQgdG9uaWdodCAyMzQ1LTEzNDUKK3dvcmQgdG8tbmlnaHQgMjM0NS0xMzQ1Citjb250cmFjdGlvbiB0bgorYWx3YXlzIHRoZWFkIDIzNDUtMTI1LTItMTQ1CithbHdheXMgdGhlYXN0IDE0NTYtMTUtMS0zNAorYWx3YXlzIHRoZWFydCAyMzQ1LTEyNS0xNS0zNDUtMjM0NQorYWx3YXlzIHRob3VzZSAyMzQ1LTEyNS0xMjU2LTIzNC0xNQorYWx3YXlzIHRob3VzZWQgMjM0NS0xMjUtMTI1Ni0yMzQtMTI0NiBob3Rob3VzZWQsIHBlbnRob3VzZWQKK2Fsd2F5cyB0aG91c2luZyAyMzQ1LTEyNS0xMjU2LTIzNC0zNDYgaG90aG91c2luZworbGFzdGxhcmdlc2lnbiB0aGUgMjM0Ngord29yZCB0aGVtc2VsdmVzIDIzNDYtMTM0LTEyMzYtMjM0Cit3b3JkIHRoZW12cyAxNDU2LTE1LTEzNC0xMjM2LTIzNAorYWx3YXlzIHRoZWlyIDQ1Ni0yMzQ2CithbHdheXMgdGhlbmNlIDE0NTYtNTYtMTUKK2Fsd2F5cyB0aGVyZSA1LTIzNDYKK3dvcmQgdGhlcmVhZnRlciA1LTIzNDYtMS0xMjQKK3dvcmQgdGhlcmVpbmFmdGVyIDUtMjM0Ni0zNS0xLTEyNAorbWlkZW5kd29yZCB0aGVyZWFsIDIzNDYtMTIzNS0yLTEyMyBldGhlcmVhbAord29yZCB0aGVyZXVwb24gNS0yMzQ2LTQ1LTEzNgorYWx3YXlzIHRoZXJlZCAyMzQ2LTEyMzUtMTI0NgorYWx3YXlzIHRoZXJlciAyMzQ2LTEyMzUtMTI0NTYKK2JlZ3dvcmQgdGhlcmVzIDIzNDYtMTIzNS0xNS0yMzQgdGhlcmVzYSB0aGVyZXNlIAorYWx3YXlzIHRob29kID0KK21pZGVuZHdvcmQgdGlvbiA1Ni0xMzQ1CithbHdheXMgdGltZSA1LTIzNDUKK21pZGVuZHdvcmQgdGltZWQgMTI0NS0yNC0xMzQtMTI0NgorbWlkZW5kd29yZCB0aW1lciAyMzQ1LTI0LTEzNC0xMjQ1NgorbWlkZW5kd29yZCB0aW1ldCA9IGFsdGltZXRlcgord29yZCB0aGVzZSA0NS0yMzQ2CithbHdheXMgdGhyb3VnaCA1LTE0NTYKK2Fsd2F5cyB0b2dldGhlciAyMzQ1LTEyNDUtMTIzNQorY29udHJhY3Rpb24gdGdyCit3b3JkIHRob3NlIDQ1LTE0NTYKK2JlZ3dvcmQgdHJhbnMgPSB0cmFuc3R5cGUKK3N1ZndvcmQgdHJhbnNoaXAgMjM0NS0xMjM1LTEtMTM0NS0xNDYtMjQtMTIzNAorYmVnd29yZCB0cmlub2QgPSB0cmlub2RhbAorYmVnd29yZCB0cmlub20gPSB0cmlub21pYWwKK2JlZ3dvcmQgdHViZW5vcyA9IHR1YmVub3NlZAorc3Vmd29yZCB0dWJlcm9zZSA9CitiZWd3b3JkIHR3ZWVkbGVkIDIzNDUtMjQ1Ni0xNS0xMjQ2LTEyMy0xNS0xNDUgdHdlZWRsZWRlZQorYmVnd29yZCB0eXBlYSA9IHR5cGVhaGVhZAorCisjIHRoZSBsZXR0ZXIgdQorYWx3YXlzIHUgMTM2CithbHdheXMgVSAxMzYKK2JlZ3dvcmQgdW4gPSB1bmFtZWxpb3JhdGVkCitiZWd3b3JkIHVuYiA9IHVuYmxlbWlzaGVkCitiZWd3b3JkIHVuZGVyZWEgNS0xMzYtMTUtMSB1bmRlcmVhdAorYmVnd29yZCB1bmRlcmVhciA1LTEzNi0xNS0zNDUKK2JlZ3dvcmQgdW5kaXMgPSB1bmRpc3R1cmJlZAorYmVnd29yZCB1bmVhID0gdW5lYXRlbiB1bmVhc3kKK2JlZ3dvcmQgdW5lYXIgMTM2LTEzNDUtMTUtMzQ1IHVuZWFydGggdW5lYXJuZWQKK2JlZ3dvcmQgdW5mdWwgPSB1bmZ1bGZpbGxlZAord29yZCB1cG9uIDQ1LTEzNiBEdXBvbnQKK3dvcmQgdXMgMTM2CitzdWZ3b3JkIHVzc2hlciAxMzYtMjM0LTE0Ni0xMjQ1NiBKYW1lcyBVc3NoZXIKK2Fsd2F5cyB1bmRlciA1LTEzNgord29yZCB1bnNhaWQgMTM2LTEzNDUtMjM0LTE0NQorCisjIHRoZSBsZXR0ZXIgdgorYWx3YXlzIHYgMTIzNgorYWx3YXlzIFYgMTIzNgorYmVnd29yZCB2YWluZyAxMjM2LTEtMzUtMTI0NSB2YWluZ2xvcnkKK3dvcmQgdmFuZHlrZSA9Cit3b3JkIHZlcnkgMTIzNgorYmVnd29yZCB2aWNlID0gdmljZXJveQorc3Vmd29yZCB2aWNlbnphIDEyMzYtMjQtMTQtMjYtMTM1Ni0xCitzdWZ3b3JkIHZpZGVvID0gdmlkZW9maWxlCisKKyMgdGhlIGxldHRlciB3CithbHdheXMgdyAyNDU2CithbHdheXMgVyAyNDU2Citsb3d3b3JkIHdhcyAzNTYKK3N1ZndvcmQgd2FzXHMtXHMgMjQ1Ni0xLTIzNC0zNi0zNgord29yZCB3aCA9CithbHdheXMgd2ggMTU2Cit3b3JkIHdoYWRkYXlhIDE1Ni0xLTI1Ni0xLTEzNDU2LTEKK21pZGVuZHdvcmQgd2hhcnQgMjQ1Ni0xMjUtMzQ1LTIzNDUgTmV3aGFydAorYmVmb3JlIGFwb3N0cm9waGUgd29yZCB3aGljaCAxNTYtMjQtMTYgd2hpY2gnbGwKK3dvcmQgd2hpY2ggMTU2CittaWRlbmR3b3JkIHdob3VzZSAyNDU2LTEyNS0xMjU2LTIzNC0xNSBOZXdob3VzZQorYmVnd29yZCB3aWRlYSA9IHdpZGVhd2FrZQord29yZCB3aWtpbmV3cyA9Cit3b3JkIHdpbGwgMjQ1NgorbG93d29yZCB3ZXJlIDIzNTYKK3N1ZndvcmQgd2VyZVxzLVxzIDI0NTYtMTI0NTYtMTUtMzYtMzYKK2Fsd2F5cyB3aGVyZSA1LTE1Ngord29yZCB3aGVyZWFmdGVyIDUtMTU2LTEtMTI0Cit3b3JkIHdoZXJldXBvbiA1LTE1Ni00NS0xMzYKK3dvcmQgd2hlcmV2ZXIgMTU2LTEyNDU2LTUtMTUKK3N1ZndvcmQgd2luZ2F0ZSAyNDU2LTM1LTEyNDUtMS0yMzQ1LTE1CitzdWZ3b3JkIHdpc2VhY3JlID0KK2xhcmdlc2lnbiB3aXRoIDIzNDU2CithbHdheXMgd29yZCA0NS0yNDU2Cit3b3JkIHdob3NlIDQ1LTE1NgorYWx3YXlzIHdvcmsgNS0yNDU2CithbHdheXMgd291bGQgMjQ1Ni0xNDUKK2NvbnRyYWN0aW9uIHdkCithbHdheXMgd29ybGQgNDU2LTI0NTYKKworIyB0aGUgbGV0dGVyIHgKK2Fsd2F5cyB4IDEzNDYKK2Fsd2F5cyBYIDEzNDYKKworIyB0aGUgbGV0dGVyIHkKK2Fsd2F5cyB5IDEzNDU2CithbHdheXMgWSAxMzQ1Ngord29yZCB5b3UgMTM0NTYKK2Fsd2F5cyB5b3VuZyA1LTEzNDU2Cit3b3JkIHlvdXIgMTM0NTYtMTIzNQorY29udHJhY3Rpb24geXIKK3dvcmQgeW91cnMgMTM0NTYtMTIzNS0yMzQKK2NvbnRyYWN0aW9uIHlycword29yZCB5b3Vyc2VsZiAxMzQ1Ni0xMjM1LTEyNAorY29udHJhY3Rpb24geXJmCit3b3JkIHlvdXJzZWx2ZXMgMTM0NTYtMTIzNS0xMjM2LTIzNAorY29udHJhY3Rpb24geXJ2cworCisjIHRoZSBsZXR0ZXIgegorYWx3YXlzIHogMTM1NgorYWx3YXlzIFogMTM1NgorCisjIGhlaW0gKGEgR2VybWFuIHN5bGxhYmxlKSBzaG91bGQgYWx3YXlzIGJlIGxpdGVyYWwKK21pZGVuZHdvcmQgY2hlaW0gPQorbWlkZW5kd29yZCBnaGVpbSA9CittaWRlbmR3b3JkIHNoZWltID0gSGVyZ2VzaGVpbWVyIEd1bmRlcnNoZWltZXIgUnVkaXNoZWltIFdlaW5zaGVpbWVyCittaWRlbmR3b3JkIHRoZWltID0gQWx0aGVpbWVyIChzaWMpCittaWRlbmR3b3JkIHdoZWltID0KK21pZGVuZHdvcmQgc3RoZWltIDM0LTEyNS0xNS0yNC0xMzQgV2VzdGhlaW1lcgorCithbHdheXMgYWdvc29tID0gcGhhZ29zb21lCithbHdheXMgaWJvc29tID0gcmlib3NvbWUKK2Fsd2F5cyBvbW9zb20gPSBjaHJvbW9zb21lCisKKyMgU3lzdMOobWUgSW50ZXJuYXRpb25hbCBQcmVmaXhlcworYmVnd29yZCB5b3R0YSAxMzQ1Ni0xMzUtMjM0NS0yMzQ1LTEgMTBeMjQKK2JlZ3dvcmQgemV0dGEgMTM1Ni0xNS0yMzQ1LTIzNDUtMSAxMF4yMQorIyBiZWd3b3JkIGV4YSAxNS0xMzQ2LTEgMTBeMTgKK2JlZ3dvcmQgcGV0YSAxMjM0LTE1LTIzNDUtMSAxMF4xNQorYmVnd29yZCB0ZXJhIDIzNDUtMTI0NTYtMSAxMF4xMgorYmVnd29yZCBnaWdhIDEyNDUtMjQtMTI0NS0xIDEwXjkKK2JlZ3dvcmQgbWVnYSAxMzQtMTUtMTI0NS0xIDEwXjYKK2JlZ3dvcmQga2lsbyAxMy0yNC0xMjMtMTM1IDEwXjMKK2JlZ3dvcmQgaGVjdG8gMTI1LTE1LTE0LTIzNDUtMTM1IDEwXjIKK2JlZ3dvcmQgZGVjYSAxNDUtMTUtMTQtMSAxMF4xCitiZWd3b3JkIGRlY2kgMTQ1LTE1LTE0LTI0IDEwXi0xCitiZWd3b3JkIGNlbnRpIDE0LTI2LTIzNDUtMjQgMTBeLTIKK2JlZ3dvcmQgbWlsbGkgMTM0LTI0LTEyMy0xMjMtMjQgMTBeLTMKK2JlZ3dvcmQgbWljcm8gMTM0LTI0LTE0LTEyMzUtMTM1IDEwXi02CitiZWd3b3JkIG5hbm8gMTM0NS0xLTEzNDUtMTM1IDEwXi05CitiZWd3b3JkIHBpY28gMTIzNC0yNC0xNC0xMzUgMTBeLTEyCitiZWd3b3JkIGZlbXRvIDEyNC0xNS0xMzQtMjM0NS0xMzUgMTBeLTE1CitiZWd3b3JkIGF0dG8gMS0yMzQ1LTIzNDUtMTM1IDEwXi0xOAorYmVnd29yZCB6ZXB0byAxMzU2LTE1LTEyMzQtMjM0NS0xMzUgMTBeLTIxCitiZWd3b3JkIHlvY3RvIDEzNDU2LTEzNS0xNC0yMzQ1LTEzNSAxMF4tMjQKKword29yZCB0aHogPSB0ZXJhaGVydHoKK3dvcmQgZ2h6ID0gZ2lnYWhlcnR6Cit3b3JkIGNoeiA9IGNlbnRpaGVydHoKKworYmVnd29yZCBhbnRlID0KK2JlZ3dvcmQgYW50aSA9CitiZWd3b3JkIGVuZG8gMjYtMTQ1LTEzNQorYmVnd29yZCBlcGkgPQorYmVnd29yZCBleHRyYSA9CitiZWd3b3JkIGh5cGVyIDEyNS0xMzQ1Ni0xMjM0LTEyNDU2CitiZWd3b3JkIGh5cG8gPQorYmVnd29yZCBpbmZyYSAzNS0xMjQtMTIzNS0xCitiZWd3b3JkIGludGVyIDM1LTIzNDUtMTI0NTYKK2JlZ3dvcmQgaW50cmEgMzUtMjM0NS0xMjM1LTEKK2JlZ3dvcmQgaXNvID0KK2JlZ3dvcmQgbWFjcm8gPQorYmVnd29yZCBtZXRhID0KK2JlZ3dvcmQgbWljcm8gPQorYmVnd29yZCBtb25vID0KK2JlZ3dvcmQgbXVsdGkgPQorYmVnd29yZCBwYXRobyAxMjM0LTEtMTQ1Ni0xMzUKK2JlZ3dvcmQgcGVyaSAxMjM0LTEyNDU2LTI0CitiZWd3b3JkIHBvbHkgPQorYmVnd29yZCBwb3N0IDEyMzQtMTM1LTM0CitiZWd3b3JkIHByZSA9CitiZWd3b3JkIHBzZXVkbyA9CitiZWd3b3JkIHJldHJvID0KKyMgYmVnd29yZCBzZW1pID0gc2VtaW5hcgorYmVnd29yZCBzdWIgPQorYmVnd29yZCBzdXBlciAyMzQtMTM2LTEyMzQtMTI0NTYKK2JlZ3dvcmQgdGV0cmEgPQorYmVnd29yZCB0cmFucyA9CitiZWd3b3JkIHVsdHJhID0KKyMgYmVnd29yZCB1bmkgPQorCisjIG90aGVyIHByZWZpeGVzCitiZWd3b3JkIGVsZWN0cm8gPQorYmVnd29yZCBnYXN0cm8gMTI0NS0xLTM0LTEyMzUtMTM1CitiZWd3b3JkIG5ldXJvID0KK2JlZ3dvcmQgcHN5Y2hvIDEyMzQtMjM0LTEzNDU2LTE2LTEzNQorCitwcmVwdW5jICIgMjM2Citwb3N0cHVuYyAiIDM1NgorYWx3YXlzICIgNQorCitwb3N0cHVuYyAnJyAzNTYKK3Bvc3RwdW5jICcnJyAzLTM1NgorYWx3YXlzICcgMword29yZCAnZW0gPSAKK3dvcmQgJ3RpcyA9Cit3b3JkICd0d2FzID0KK3dvcmQgJ3R3aWxsID0KK2VuZHdvcmQgJ2QgMy0xNDUKK2VuZHdvcmQgJ2xsIDMtMTIzLTEyMworZW5kd29yZCAnbSAzLTEzNAorZW5kd29yZCAncmUgMy0xMjM1LTE1CitlbmR3b3JkICdzIDMtMjM0CitlbmR3b3JkICd0IDMtMjM0NQorZW5kd29yZCAndmUgMy0xMjM2LTE1CisKK3ByZXB1bmMgYGAgMjM2CithbHdheXMgYCA0CisKK21pZG51bSBeIDQ1CithbHdheXMgXiA0NQorCithbHdheXMgfiA0LTE1NgorcmVwZWF0YWJsZSB+fn4gNC0xNTYtNC0xNTYtNC0xNTYKKworbWlkbnVtICwgMgorYWx3YXlzICwgMgorCithbHdheXMgOyAyMworCittaWRudW0gOiAyNQorYWx3YXlzIDogMjUKK3JlcGVhdGFibGUgOjo6IDI1LTI1LTI1CisKK21pZG51bSAuIDQ2CithbHdheXMgLiAyNTYKK2Fsd2F5cyAuLi4gMy0zLTMKK2Fsd2F5cyAuXHMuXHMuIDMtMy0zIC4gLiAuCisKK2Fsd2F5cyAhIDIzNQorYWx3YXlzID8gMjM2CisKK2Fsd2F5cyAoIDIzNTYKK2Fsd2F5cyApIDIzNTYKKworYWx3YXlzIFsgNi0yMzU2CithbHdheXMgXSAyMzU2LTMKKworYWx3YXlzIHsgMjQ2CithbHdheXMgfSAxMjQ1NgorCithbHdheXMgIyA0NTYtMTQ1NgorCittaWRudW0gKiA0LTE2CithbHdheXMgKiAzNS0zNQorcmVwZWF0YWJsZSAqKiogMzUtMzUtMzUtMzUtMzUtMzUKKworbWlkbnVtIC8gMzQKK2Fsd2F5cyAvIDQ1Ni0zNAorCithbHdheXMgJSA0LTI1LTEyMzQKKworYWx3YXlzICYgNC0xMjM0NgorCithbHdheXMgQCA0LTEKKworYWx3YXlzIFxcIDQ1Ni0xNgorCithbHdheXMgfCA0NTYtMTI1NgorCityZXBlYXRhYmxlIFxzIDAgc3BhY2UKK3JlcGVhdGFibGUgXHQgMCBjaGFyYWN0ZXIgdGFidWxhdGlvbgorcmVwZWF0YWJsZSBceGEwIDAgbm8gYnJlYWsgc3BhY2UKKworYWx3YXlzIFx1MDBBOSA0NS0xNCBjb3B5cmlnaHQgc2lnbgorYWx3YXlzIFx1MDBBRSA0NS0xMjM1IHJlZ2lzdGVyZWQgc2lnbgorYWx3YXlzIFx1MjAxNCAzNi0zNiBlbSBkYXNoCithbHdheXMgXHUyMTIyIDQ1LTIzNDUgdHJhZGUgbWFyayBzaWduCisKK2Fsd2F5cyAtY29tID0KK3JlcGVhdGFibGUgLS0tIDM2LTM2LTM2CithbHdheXMgXHMtXHMgMzYtMzYKK2Fsd2F5cyBccy1cc2NvbSAzNi0zNi0xNC0xMzUtMTM0CisKK2Fsd2F5cyBfIDQ2CityZXBlYXRhYmxlIF9fXyA0Ni00Ni00NgorCityZXBlYXRhYmxlID09PSAxMjM0NTYtMTIzNDU2LTEyMzQ1NgorCisjIHRoZSBoeXBoZW4KK2Fsd2F5cyDCrSAzNgorcmVwZWF0YWJsZSDCrcKtwq0gMzYtMzYtMzYKK2Fsd2F5cyBcc8KtXHMgMzYtMzYKK2Fsd2F5cyBcc1x1MjAxNFxzIDM2LTM2CisKKyMgYWNjZW50ZWQgbGV0dGVycworYWx3YXlzIMOAIDYtNC0xICAgICAgW0MwXSB1cHBlciBhIGdyYXZlCithbHdheXMgw4EgNi00LTEgICAgICBbQzFdIHVwcGVyIGEgYWN1dGUKK2Fsd2F5cyDDgiA2LTQtMSAgICAgIFtDMl0gdXBwZXIgYSBjaXJjdW1mbGV4CithbHdheXMgw4MgNi00LTEgICAgICBbQzNdIHVwcGVyIGEgdGlsZGUKK2Fsd2F5cyDDhCA2LTQtMSAgICAgIFtDNF0gdXBwZXIgYSBkaWVyZXNpcworYWx3YXlzIMOFIDYtNC0xICAgICAgW0M1XSB1cHBlciBhIHJpbmcKK2Fsd2F5cyDDhiA2LTEtMTUgICAgIFtDNl0gdXBwZXIgYWUKK2Fsd2F5cyDDhyA2LTQtMTQgICAgIFtDN10gdXBwZXIgYyBjZWRpbGxhCithbHdheXMgw4ggNi00LTE1ICAgICBbQzhdIHVwcGVyIGUgZ3JhdmUKK2Fsd2F5cyDDiSA2LTQtMTUgICAgIFtDOV0gdXBwZXIgZSBhY3V0ZQorYWx3YXlzIMOKIDYtNC0xNSAgICAgW0NBXSB1cHBlciBlIGNpcmN1bWZsZXgKK2Fsd2F5cyDDiyA2LTQtMTUgICAgIFtDQl0gdXBwZXIgZSBkaWVyZXNpcworYWx3YXlzIMOMIDYtNC0yNCAgICAgW0NDXSB1cHBlciBpIGdyYXZlCithbHdheXMgw40gNi00LTI0ICAgICBbQ0RdIHVwcGVyIGkgYWN1dGUKK2Fsd2F5cyDDjiA2LTQtMjQgICAgIFtDRV0gdXBwZXIgaSBjaXJjdW1mbGV4CithbHdheXMgw48gNi00LTI0ICAgICBbQ0ZdIHVwcGVyIGkgZGllcmVzaXMKK2Fsd2F5cyDDkCA2LTQtMTUgICAgIFtEMF0gdXBwZXIgZXRoCithbHdheXMgw5EgNi00LTEzNDUgICBbRDFdIHVwcGVyIG4gdGlsZGUKK2Fsd2F5cyDDkiA2LTQtMTM1ICAgIFtEMl0gdXBwZXIgbyBncmF2ZQorYWx3YXlzIMOTIDYtNC0xMzUgICAgW0QzXSB1cHBlciBvIGFjdXRlCithbHdheXMgw5QgNi00LTEzNSAgICBbRDRdIHVwcGVyIG8gY2lyY3VtZmxleAorYWx3YXlzIMOVIDYtNC0xMzUgICAgW0Q1XSB1cHBlciBvIHRpbGRlCithbHdheXMgw5YgNi00LTEzNSAgICBbRDZdIHVwcGVyIG8gZGllcmVzaXMKK2Fsd2F5cyDDmCA2LTQtMTM1ICAgIFtEOF0gdXBwZXIgbyBzbGFzaAorYWx3YXlzIMOZIDYtNC0xMzYgICAgW0Q5XSB1cHBlciB1IGdyYXZlCithbHdheXMgw5ogNi00LTEzNiAgICBbREFdIHVwcGVyIHUgYWN1dGUKK2Fsd2F5cyDDmyA2LTQtMTM2ICAgIFtEQl0gdXBwZXIgdSBjaXJjdW1mbGV4CithbHdheXMgw5wgNi00LTEzNiAgICBbRENdIHVwcGVyIHUgZGllcmVzaXMKK2Fsd2F5cyDDnSA2LTQtMTM0NTYgIFtERF0gdXBwZXIgeSBhY3V0ZQorYWx3YXlzIMOeIDYtNC0yMzQ1ICAgW0RFXSB1cHBlciB0IGhvcm4KK2Fsd2F5cyDDnyAyMzQtMjM0ICAgIFtERl0gbG93ZXIgc3MKK2Fsd2F5cyDDoCAgIDQtMSAgICAgIFtFMF0gbG93ZXIgYSBncmF2ZQorYWx3YXlzIMOhICAgNC0xICAgICAgW0UxXSBsb3dlciBhIGFjdXRlCithbHdheXMgw6IgICA0LTEgICAgICBbRTJdIGxvd2VyIGEgY2lyY3VtZmxleAorYWx3YXlzIMOjICAgNC0xICAgICAgW0UzXSBsb3dlciBhIHRpbGRlCithbHdheXMgw6QgICA0LTEgICAgICBbRTRdIGxvd2VyIGEgZGllcmVzaXMKK2Fsd2F5cyDDpSAgIDQtMSAgICAgIFtFNV0gbG93ZXIgYSByaW5nCithbHdheXMgw6YgICAxLTE1ICAgICBbRTZdIGxvd2VyIGFlCithbHdheXMgw6cgICA0LTE0ICAgICBbRTddIGxvd2VyIGMgY2VkaWxsYQorYWx3YXlzIMOoICAgNC0xNSAgICAgW0U4XSBsb3dlciBlIGdyYXZlCithbHdheXMgw6kgICA0LTE1ICAgICBbRTldIGxvd2VyIGUgYWN1dGUKK2Fsd2F5cyDDqiAgIDQtMTUgICAgIFtFQV0gbG93ZXIgZSBjaXJjdW1mbGV4CithbHdheXMgw6sgICA0LTE1ICAgICBbRUJdIGxvd2VyIGUgZGllcmVzaXMKK2Fsd2F5cyDDrCAgIDQtMjQgICAgIFtFQ10gbG93ZXIgaSBncmF2ZQorYWx3YXlzIMOtICAgNC0yNCAgICAgW0VEXSBsb3dlciBpIGFjdXRlCithbHdheXMgw64gICA0LTI0ICAgICBbRUVdIGxvd2VyIGkgY2lyY3VtZmxleAorYWx3YXlzIMOvICAgNC0yNCAgICAgW0VGXSBsb3dlciBpIGRpZXJlc2lzCithbHdheXMgw7AgICA0LTE1ICAgICBbRjBdIGxvd2VyIGV0aAorYWx3YXlzIMOxICAgNC0xMzQ1ICAgW0YxXSBsb3dlciBuIHRpbGRlCithbHdheXMgw7IgICA0LTEzNSAgICBbRjJdIGxvd2VyIG8gZ3JhdmUKK2Fsd2F5cyDDsyAgIDQtMTM1ICAgIFtGM10gbG93ZXIgbyBhY3V0ZQorYWx3YXlzIMO0ICAgNC0xMzUgICAgW0Y0XSBsb3dlciBvIGNpcmN1bWZsZXgKK2Fsd2F5cyDDtSAgIDQtMTM1ICAgIFtGNV0gbG93ZXIgbyB0aWxkZQorYWx3YXlzIMO2ICAgNC0xMzUgICAgW0Y2XSBsb3dlciBvIGRpZXJlc2lzCithbHdheXMgw7ggICA0LTEzNSAgICBbRjhdIGxvd2VyIG8gc2xhc2gKK2Fsd2F5cyDDuSAgIDQtMTM2ICAgIFtGOV0gbG93ZXIgdSBncmF2ZQorYWx3YXlzIMO6ICAgNC0xMzYgICAgW0ZBXSBsb3dlciB1IGFjdXRlCithbHdheXMgw7sgICA0LTEzNiAgICBbRkJdIGxvd2VyIHUgY2lyY3VtZmxleAorYWx3YXlzIMO8ICAgNC0xMzYgICAgW0ZDXSBsb3dlciB1IGRpZXJlc2lzCithbHdheXMgw70gICA0LTEzNDU2ICBbRkRdIGxvd2VyIHkgYWN1dGUKK2Fsd2F5cyDDviAgIDQtMjM0NSAgIFtGRV0gbG93ZXIgdCBob3JuCithbHdheXMgw78gICA0LTEzNDU2ICBbRkZdIGxvd2VyIHkgZGllcmVzaXMKKworIyBtYXRoZW1hdGljYWwgc3ltYm9scworYWx3YXlzIDwgMTI2CithbHdheXMgPSAxMjM0NTYKK2Fsd2F5cyA+IDM0NQorbWlkbnVtICsgMzQ2CithbHdheXMgKyAzNDYKK21pZG51bSAtIDM2CithbHdheXMgLSAzNgorYWx3YXlzIMOXIDQ2LTE2IG11bHRpcGxpY2F0aW9uIHNpZ24KK21pZG51bSDDtyA0Ni0zNCBkaXZpc2lvbiBzaWduCitiZWdudW0gJCAyNTYKK2Fsd2F5cyAkIDI1NgorCisjIG90aGVyIHNwZWNpYWwgY2hhcmFjdGVycworYWx3YXlzIMKpIDIzNTYtNi0xNC0yMzU2IGNvcHlyaWdodAorYWx3YXlzIMK2IDQtMTIzNC0zNDUgcGFyYWdyYXBoCithbHdheXMgwqcgNC0yMzQtMyBzZWN0aW9uCithbHdheXMgwrAgNDUtNDYtMTYgZGVncmVlcworYWx3YXlzIMKiIDQtMTQgY2VudHMKK2Fsd2F5cyDCoyA0LTEyMyBwb3VuZHMKK2Fsd2F5cyDCpSA0LTEzNDU2IHllbgorYWx3YXlzIMK1IDQ2LTEzNCBtdQorCisjIHBzZXVkby13b3Jkcword29yZCB1c2VuZXQgPQorCisjIGFiYnJldmlhdGlvbnMKK3dvcmQgYWFycCA9IEFtZXJpY2FuIEFzc29jaWF0aW9uIG9mIFJldGlyZWQgUGVyc29ucworCisjIHNwZWNpYWwgY2hhcmFjdGVyIHNlcXVlbmNlcworbGl0ZXJhbCA6Ly8gVVJMcworbGl0ZXJhbCB3d3cuCisKK2xpdGVyYWwgLmNvbQorbGl0ZXJhbCAuZWR1CitsaXRlcmFsIC5nb3YKK2xpdGVyYWwgLm1pbAorbGl0ZXJhbCAubmV0CitsaXRlcmFsIC5vcmcKK2luY2x1ZGUgY291bnRyaWVzLmN0aQorCitsaXRlcmFsIC5kb2MKK2xpdGVyYWwgLmh0bQorbGl0ZXJhbCAuaHRtbAorbGl0ZXJhbCAudGV4CitsaXRlcmFsIC50eHQKKworbGl0ZXJhbCAuZ2lmCitsaXRlcmFsIC5qcGcKK2xpdGVyYWwgLnBuZworbGl0ZXJhbCAud2F2CisKK2xpdGVyYWwgLnRhcgorbGl0ZXJhbCAuemlwCisKKyMgZCxnLHIscnMscyxzdCx0aCBjb25jZWl2ZSBkZWNlaXZlIGRlY2xhcmUgcGVyY2VpdmUgcmVjZWl2ZSByZWpvaWNlCisjIG4ndCBjb3VsZCBtdXN0IHNob3VsZCB3b3VsZAorCisjIFdoZW4gYW4gdXBwZXItY2FzZSBsZXR0ZXIgb2NjdXJzIGluc2lkZSBhIGNvbnRyYWN0aW9uLCBmb2xsb3dpbmcgYSBsb3dlci1jYXNlCisjIGxldHRlciwgdGhlIGNvbnRyYWN0aW9uIHNob3VsZCBub3QgYmUgdXNlZC4gRXhhbXBsZSBNY0NhbgorCisjIFdpbmRvd3MgbWFpbCBwcm9ncmFtcyB1c2UgYWxsIHNvcnRzIG9mIHdlaXJkIGNoYXJhY3RlcnMgZm9yIGFwb3N0cm9waGVzLiAKKyMgSSB3b3VsZCBwcmVmZXIgdG8gaGF2ZSBhbGwgY2hhcmFjdGVycyBhYm92ZSAxMjYganVzdCBzaG93IHVwIGFzIGEgCisjIGJhY2tzbGFzaCBhbmQgdHdvIGhleCBkaWdpdHMuCisKKyMgcHJvYmxlbXMgd2l0aCBxdW90YXRpb24gbWFya3MgYmVmb3JlIGFuZCBhZnRlciBkYXNoZXM6ICJkaXZpc2lvbiItLWEKKworIyB3aGVuIGEgZGVjaW1hbCBiZWdpbnMgd2l0aCBhIHBlcmlvZCwgaXQgc2hvdWxkIGJlIHRyYW5zbGF0ZWQgd2l0aCBhIAorIyBudW1iZXIgc2lnbiBmb2xsb3dlZCBieSBhIGRlY2ltYWwgcG9pbnQsIGZvbGxvd2VkIGJ5IHRoZSBudW1iZXIuCisKKyMgaW5saW5lIGNvbnRyYWN0aW9uIG9mIGVtb2ppIGRlc2NyaXB0aW9ucworZW1vamkgZW4KZGlmZiAtLWdpdCBhL1RhYmxlcy9Db250cmFjdGlvbi9lbi5jdGIgYi9UYWJsZXMvQ29udHJhY3Rpb24vZW4uY3RiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAzMWQ3ODcKLS0tIC9kZXYvbnVsbAorKysgYi9UYWJsZXMvQ29udHJhY3Rpb24vZW4uY3RiCkBAIC0wLDAgKzEsMjEgQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyMgICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisjCisjIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyMKKyMgQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjIEJSTFRUWSBDb250cmFjdGlvbiBUYWJsZSAtIEVuZ2xpc2gKKworaW5jbHVkZSBlbi11ZWItZzIuY3RiCmRpZmYgLS1naXQgYS9UYWJsZXMvQ29udHJhY3Rpb24vZW5fVVMuY3RiIGIvVGFibGVzL0NvbnRyYWN0aW9uL2VuX1VTLmN0YgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMzE5NTJjCi0tLSAvZGV2L251bGwKKysrIGIvVGFibGVzL0NvbnRyYWN0aW9uL2VuX1VTLmN0YgpAQCAtMCwwICsxLDIxIEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisjICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorIworIyBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisjCisjIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisjCisjIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyMgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorIyBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyMKKyMgV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworIworIyBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIyBCUkxUVFkgQ29udHJhY3Rpb24gVGFibGUgLSBFbmdsaXNoIChVbml0ZWQgU3RhdGVzKQorCitpbmNsdWRlIGVuLXVzLWcyLmN0YgpkaWZmIC0tZ2l0IGEvVGFibGVzL0NvbnRyYWN0aW9uL2VzLmN0YiBiL1RhYmxlcy9Db250cmFjdGlvbi9lcy5jdGIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjhjZTZkZgotLS0gL2Rldi9udWxsCisrKyBiL1RhYmxlcy9Db250cmFjdGlvbi9lcy5jdGIKQEAgLTAsMCArMSwzNTYgQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyMgICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisjCisjIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyMKKyMgQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjIEJSTFRUWSBDb250cmFjdGlvbiBUYWJsZSAtIFNwYW5pc2ggKGdyYWRlIDIpCisjCisjIFNhbXVlbCBUaGliYXVsdCA8c2FtdWVsLnRoaWJhdWx0QGVucy1seW9uLm9yZz4KKyMgCisjIFRoaXMgdGFibGUgaXMgYmFzZWQgb24gdGhlIFVuZXNjbyByZXBvcnQgb24gdGhlIHByb2dyZXNzIG9mIHVuaWZpY2F0aW9uIG9mCisjIGJyYWlsbGUgd3JpdGluZyDCq8KgTCfDiUNSSVRVUkUgQlJBSUxMRSBEQU5TIExFIE1PTkRFwqDCuywgYnkgU2lyIENsdXRoYQorIyBNQUNLRU5aSUU6IGh0dHA6Ly91bmVzZG9jLnVuZXNjby5vcmcvaW1hZ2VzLzAwMTMvMDAxMzUyLzEzNTI1MWZvLnBkZgorIyBUaGUgZG9jdW1lbnQgaXMgZGF0ZWQgMTk1NCwgc28gdGhpcyB0YWJsZSBtYXkgYmUgcXVpdGUgb3V0ZGF0ZWQuCisKK2luY2x1ZGUgbGV0dGVycy1sYXRpbi5jdGkKK2Fsd2F5cyBccyAwCisKK2NsYXNzIHZveSBhZWlvdcOkw6HDqcOtw7PDugorY2xhc3MgY29uIGJjZGZnaGprbG1uw7FwcXJzdHZ3eHoKKworZW5kd29yZCBibGUgMTIKK3dvcmQgYmllbiAxMgorZW5kd29yZCBjaWEgMTQKK3dvcmQgY3VhbCAxNAord29yZCBkZSAxNDUKK3dvcmQgZnXDqSAxMjQKK3dvcmQgZ3JhbmRlIDEyNDUKK3dvcmQgaGEgMTI1Cit3b3JkIHNpIDI0Cit3b3JkIGphbcOhcyAyNDUKK2Fsd2F5cyBhbCAxMworZW5kd29yZCBtZW50ZSAxMzQKK3dvcmQgbWUgMTM0Cit3b3JkIG5vIDEzNDUKK3dvcmQgcG9yIDEyMzQKK2Fsd2F5cyBxdWUgMTIzNDUKK3dvcmQgcmVjacOpbiAxMjM1CitlbmR3b3JkIHNlIDIzNAord29yZCBzZSAyMzQKK2VuZHdvcmQgdGUgMjM0NQord29yZCB0ZSAyMzQ1Cit3b3JkIHN1IDEzNgorZW5kd29yZCBpdm8gMTIzNgord29yZCB2ZXogMTIzNgorYmVmb3JlIHZveSBiZWd3b3JkIGV4IDEzNDYKK21pZGVuZHdvcmQgb24gMTM0Ngord29yZCBzb24gMTM0NgorYmVmb3JlIHZveSBiZWd3b3JkIGludGVyIDEzNDU2Cit3b3JkIGVzdGUgMTM1NgorYWx3YXlzIGFzIDEyMzQ2Cit3b3JkIGxhcyAxMjM0NgorYmVnbWlkd29yZCBsbCAxMjM0NTYKK2VuZHdvcmQgZWxsYSAxMjM0NTYKK3dvcmQgZWxsYSAxMjM0NTYKK2Fsd2F5cyDDoSAxMjM1Ngord29yZCBtw6FzIDEyMzU2CithbHdheXMgw6kgMjM0Ngord29yZCDDqWwgMjM0NgorYWx3YXlzIMO6IDIzNDU2Cit3b3JkIHTDuiAyMzQ1NgorYWx3YXlzIGFyIDE2Cit3b3JkIHBhcmEgMTYKK2JlZ21pZHdvcmQgZW0gMTI2CitlbmR3b3JkIGVudGUgMTI2Cit3b3JkIHNpZW1wcmUgMTI2CithbHdheXMgYW4gMTQ2Cit3b3JkIGFudGUgMTQ2CithbHdheXMgYWQgMTQ1Ngord29yZCBhZGVtw6FzIDE0NTYKK2Fsd2F5cyBvciAxNTYKK3dvcmQgeW8gMTU2CithbHdheXMgZXMgMTI0Ngord29yZCBlcyAxMjQ2CithbHdheXMgw7EgMTI0NTYKK2VuZHdvcmQgYcOxbyAxMjQ1Ngord29yZCBhw7FvIDEyNDU2CitiZWd3b3JkIMOkIDEyNTYKK21pZGVuZHdvcmQgdWUgMTI1Ngord29yZCBwdWVzIDEyNTYKK2Fsd2F5cyBvcyAyNDYKK3dvcmQgbG9zIDI0NgorYmVnbWlkd29yZCBvbSAyNDU2Cit3b3JkIGNvbW8gMjQ1NgorYmVnbWlkd29yZCBhYiAyCithbHdheXMgLCAyCitiZWZvcmUgdm95IGJlZ3dvcmQgc29icmUgMjMKK21pZHdvcmQgYnIgMjMKK2Fsd2F5cyA7IDIzCit3b3JkIHNvYnJlIDIzCitiZWZvcmUgdm95IGJlZ3dvcmQgY29uIDI1CittaWR3b3JkIGNyIDI1CithbHdheXMgOiAyNQord29yZCBjb24gMjUKK2JlZm9yZSB2b3kgYmVnd29yZCBkaXMgMjU2CittaWR3b3JkIGRyIDI1NgorYWx3YXlzIC4gMjU2Cit3b3JkIGRlbCAyNTYKK2JlZ3dvcmQgZW4gMjYKK2Fsd2F5cyA/IDI2CittaWRlbmR3b3JkIGVuIDI2Cit3b3JkIGVuIDI2CitiZWZvcmUgdm95IGJlZ3dvcmQgcHJlIDIzNQorYWx3YXlzICEgMjM1CittaWR3b3JkIHByIDIzNQord29yZCBwZXJvIDIzNQorYmVnbWlkd29yZCBnciAyMzU2CithbHdheXMgKCAyMzU2CithbHdheXMgKSAyMzU2Cit3b3JkIGdyYW4gMjM1NgorYWx3YXlzIGVyIDIzNgorYmVnd29yZCAiIDIzNgord29yZCBoZSAyMzYKK2JlZm9yZSB2b3kgYmVnd29yZCBlbnRyZSAzNTYKK21pZHdvcmQgdHIgMzU2CitlbmR3b3JkICIgMzU2Cit3b3JkIGVudHJlIDM1NgorYmVnbWlkd29yZCBpbiAzNQord29yZCBzaW4gMzUKK2JlZm9yZSB2b3kgYmVnd29yZCByZSAzCittaWRlbmR3b3JkICcgMword29yZCBsYSAzCitiZWZvcmUgdm95IGJlZ3dvcmQgY29tIDM2CittaWR3b3JkIGNsIDM2CithbHdheXMgLSAzNgord29yZCBsbyAzNgorbnVtc2lnbiAzNDU2CitlbmR3b3JkIGnDs24gMzQ1Ngord29yZCBuw7ptZXJvIDM0NTYKK2Fsd2F5cyDDrSAzNAord29yZCBzw60gMzQKK2Fsd2F5cyDDsyAzNDYKK3dvcmQgYXF1ZWwgMzQ2CithbHdheXMgaW0gMzQ1Cit3b3JkIHR1IDM0NQorCisjIHRlcm1pbmF0aW9ucworCitlbmR3b3JkIGFjY2nDs24gMS0zNDU2CitlbmR3b3JkIGVjY2nDs24gMTUtMzQ1NgorZW5kd29yZCBpY2Npw7NuIDI0LTM0NTYKK2VuZHdvcmQgdWNjacOzbiAxMzYtMzQ1NgorZW5kd29yZCBhbmRvIDE0Ni0xNDUKK2VuZHdvcmQgYW5kbyAyNi0xNDUKK2VuZHdvcmQgYWRvIDE0NTYtMTM1CitlbmR3b3JkIGlkbyA0NS0xMzUKKworIyBsb2N1dGlvbnMKKword29yZCBlblxzY29uc2VjdWVuY2lhIDI2LTQ1Ni0yNQord29yZCBlblxzc2VndWlkYSAyNi00NTYtMjM0Cit3b3JkIGVuXHNlZmVjdG8gMjYtNDU2LTE1Cit3b3JkIGVzXHNkZWNpciAyNDYtNDU2LTE0NQord29yZCBub1xzb2JzdGFudGUgMTM0NS00NTYtMTM1Cit3b3JkIHBvY29cc2Fcc3BvY28gMTIzNC00NTYtMTIzNAord29yZCBwb3Jcc2VqZW1wbG8gMTIzNC00NTYtMTUKK3dvcmQgc29icmVcc3RvZG8gMjM0LTQ1Ni0yMzQ1Cit3b3JkIHRhbFxzdmV6IDIzNDUtNDU2LTEyMzYKK3dvcmQgc2luXHNlbWJhcmdvIDIzNC00NTYtMTUKKworIyBzZXZlcmFsIGNlbGxzIHdvcmRzCisKK3dvcmQgYWJham8gMi0yNDUKK3dvcmQgYWNhc28gMS0xNAord29yZCBhY2Npw7NuIDEtMzQ1Ngord29yZCBhY2VyY2EgMS0xNC0xNAord29yZCBhZGVsYW50ZSAxNDU2LTEyMword29yZCBhaG9yYSA0LTEyNQord29yZCBhbGdvIDEzLTEzNQord29yZCBhbGfDum4gMTMtMjM0NTYKK3dvcmQgYWxndW5vIDEzLTEzNDUtMTM1Cit3b3JkIGFsZ3VpZW4gMTMtMTM0NQord29yZCBhbGzDoSA1LTEyMzQ1Ngord29yZCBhbGzDrSAxLTEyMzQ1Ngord29yZCBhbHJlZGVkb3IgMTMtMTU2Cit3b3JkIGFudGVzIDE0Ni0yMzQKK3dvcmQgYW50ZXJpb3IgMTQ2LTIzNDUKK3dvcmQgYW50ZXJpb3JpZGFkIDE0Ni0yMzQ1LTE0NQord29yZCBhbnRlcmlvcm1lbnRlIDE0Ni0yMzQ1LTEzNAord29yZCBhcGVuYXMgMS0xMjM0Cit3b3JkIGFxdWVsbG8gMzQ2LTEzNQord29yZCBhcXXDrSAxLTEyMzQ1Cit3b3JkIGFycmliYSAxNi0xMjM1Cit3b3JkIGF0csOhcyAxLTM1Ngord29yZCBiYWpvIDEyLTI0NQord29yZCBiYXN0YW50ZSAxMi0yMzQ1Cit3b3JkIGJlbGxhIDEyLTEyMzQ1Ngord29yZCBiZWxsZXphIDEyLTEyMzQ1Ni0xMzU2Cit3b3JkIGJyYWlsbGUgNDYtMTItMTIzNS0xMjMKK3dvcmQgYnJldmUgMjMtMTIzNgord29yZCBicmV2ZWRhZCAyMy0xMjM2LTE0NQord29yZCBicmV2ZW1lbnRlIDIzLTEyMzYtMTM0Cit3b3JkIGNhZGEgMTQtMTQ1Ngord29yZCBjZXJjYSAxNC0xNAord29yZCBjYXNpIDE0LTIzNAord29yZCBjaWVnbyAxNC0xMjQ1Cit3b3JkIGNvbmRpY2nDs24gMjUtMTQ1LTM0NTYKK3dvcmQgY29uZGljaW9uYWwgMjUtMTQ1LTM0NTYtMTMKK3dvcmQgY29uZGljaW9uYWxtZW50ZSAyNS0xNDUtMzQ1Ni0xMy0xMzQKK3dvcmQgY29uanVudG8gMjUtMjQ1LTIzNDUKK3dvcmQgY29ubWlnbyAyNS0xMzQKK3dvcmQgY29udGlnbyAyNS0yMzQ1Cit3b3JkIGNvbnNpZ28gMjUtMjM0Cit3b3JkIGNvbnNlY3VlbmNpYSAyNS0yMzQtMTQKK3dvcmQgY29udHJhIDI1LTM1Ngord29yZCBjdWFscXVpZXIgMTQtMTIzNDUKK3dvcmQgY3VhbmRvIDE0LTE0NQord29yZCBjdWFudG8gMTQtMjM0NQord29yZCBjdXlvIDE0LTEzNDU2Cit3b3JkIGRlYmFqbyAxNDUtMTItMjQ1Cit3b3JkIGRlbGFudGUgMTQ1LTEyMzQtMjM0NQord29yZCBkZW3DoXMgMTQ1LTEzNAord29yZCBkZW1hc2lhZG8gMTQ1LTEzNC0xNDUKK3dvcmQgZGVzZGUgMTQ1LTIzNAord29yZCBkZXNwdcOpcyAxNDUtMTIzNAord29yZCBkZXRyw6FzIDE0NS0zNTYKK3dvcmQgZGlmw61jaWwgMTQ1LTEyNAord29yZCBkaWbDrWNpbG1lbnRlIDE0NS0xMjQtMTM0Cit3b3JkIGRpZmljdWx0YWQgMTQ1LTEyNC0yMzQ1Cit3b3JkIGRvbmRlIDE0NS0xNDUKK3dvcmQgZHVyYW50ZSAxNDUtMTM2Cit3b3JkIGVsIDE1Cit3b3JkIGVmZWN0byAxNS0xMjQKK3dvcmQgZWZlY3Rpdm8gMTUtMTI0LTEyMzYKK3dvcmQgZWZlY3RpdmFtZW50ZSAxNS0xMjQtMTIzNi0xMzQKK3dvcmQgZWplbXBsbyAxNS0yNDUKK3dvcmQgZW5jaW1hIDI2LTE0Cit3b3JkIGVudG9uY2VzIDI2LTIzNDUKK3dvcmQgZW50cmV0YW50byAzNTYtMjM0NQord29yZCBlc3RhciAxMjQ2LTEyMzUKK3dvcmQgZXN0YWJhIDEyNDYtMjM0NS0xMgord29yZCBlc3RhYmFuIDEyNDYtMjM0NS0xMi0xNDYKK3dvcmQgZXN0YWRvIDEyNDYtMjM0NS0xNDUKK3dvcmQgw6lzdGUgNS0xMzU2Cit3b3JkIGV4dGVyaW9yIDEzNDYtMjM0NQord29yZCBleHRlcmlvcm1lbnRlIDEzNDYtMjM0NS0xMzQKK3dvcmQgZsOhY2lsIDEyNC0xNAord29yZCBmw6FjaWxtZW50ZSAxMjQtMTQtMTM0Cit3b3JkIGZhY2lsaWRhZCAxMjQtMTQtMTQ1Cit3b3JkIGZhdm9yIDEyNC0xMjM2Cit3b3JkIGZhdm9yYWJsZSAxMjQtMTIzNi0xMgord29yZCBmYXZvcmFibGVtZW50ZSAxMjQtMTIzNi0xMi0xMzQKK3dvcmQgZ2VuZXJhbCAxMjQ1LTEzNDUKK3dvcmQgZ2VuZXJhbGlkYWQgMTI0NS0xMzQ1LTE0NQord29yZCBnZW5lcmFsbWVudGUgMTI0NS0xMzQ1LTEzNAord29yZCBoYWNpYSAxMjUtMTQKK3dvcmQgaGFzdGEgMTI1LTIzNDUKK3dvcmQgaGFiZXIgMTI1LTEyMzUKK3dvcmQgaGFiw61hIDEyNS0xMgord29yZCBoYWLDrWFuIDEyNS0xMi0xNDYKK3dvcmQgaGFiaWRvIDEyNS0xMi0xNDUKK3dvcmQgaGlqbyAxMjUtMjQ1Cit3b3JkIGhlcm1hbm8gMTI1LTEzNAord29yZCBob21icmUgMTI1LTIzCit3b3JkIGhhY2VyIDIzNi0xMjM1Cit3b3JkIGhhY8OtYSAyMzYtMTQKK3dvcmQgaGFjw61hbiAyMzYtMTQtMTQ2Cit3b3JkIGlndWFsIDI0LTEyNDUKK3dvcmQgaWd1YWxkYWQgMjQtMTI0NS0xNDUKK3dvcmQgaWd1YWxtZW50ZSAxNC0xMjQ1LTEzNAord29yZCBpbXBvcnRhbmNpYSAzNDUtMTIzNC0xNAord29yZCBpbXBvcnRhbnRlIDM0NS0xMjM0LTIzNDUKK3dvcmQgaW5mZXJpb3IgMzUtMTI0Cit3b3JkIGluZmVyaW9yaWRhZCAzNS0xMjQtMTQ1Cit3b3JkIGlubWVkaWF0byAzNS0xMzQKK3dvcmQgaW5tZWRpYXRhbWVudGUgMzUtMTM0LTEzNAord29yZCBpbnRlcmlvciAzNS0yMzQ1Cit3b3JkIGludGVsaWdlbmNpYSAzNS0xMjQ1LTE0Cit3b3JkIGpvdmVuIDI0NS0xMjM2Cit3b3JkIGp1bnRvIDI0NS0yMzQ1Cit3b3JkIGp1dmVudHVkIDI0NS0xMjM2LTIzNDUKK3dvcmQgbGUgMTIzCit3b3JkIGxlam9zIDEyMy0yNDUKK3dvcmQgbHVlZ28gMTIzLTEyNTYKK3dvcmQgbWFkcmUgMTM0LTEKK3dvcmQgbWF5b3IgMTM0LTEzNDU2Cit3b3JkIG1lZGlvIDEzNC0xNDUKK3dvcmQgbWVkaWFudGUgMTM0LTE0NS0yMzQ1Cit3b3JkIG1lbm9yIDEzNC0xMzQ1Cit3b3JkIG1lbm9zIDEzNC0yMzQKK3dvcmQgbWllbnRyYXMgMTM0LTM1Ngord29yZCBtaXNtbyAxMzQtMTM0Cit3b3JkIG11Y2hvIDQtMTM0Cit3b3JkIG11amVyIDEzNC0xMzYKK3dvcmQgbXV5IDYtMTM0Cit3b3JkIG5hZGEgMTM0NS0xNDU2Cit3b3JkIG5hZGllIDEzNDUtMTQ1Cit3b3JkIG5pbmfDum4gMTM0NS0xMjQ1Cit3b3JkIG5pbmd1bmEgMTM0NS0xMjQ1LTEKK3dvcmQgbmluZ3VubyAxMzQ1LTEyNDUtMTM1Cit3b3JkIG5pbmd1bmFzIDEzNDUtMTI0NS0xMjM0Ngord29yZCBuaW5ndW5vcyAxMzQtMTI0NS0yNDYKK3dvcmQgbm9zb3Ryb3MgNDUtMTM0NQord29yZCBudWVzdHJvIDU2LTEzNDUKK3dvcmQgbnVldm8gMTM0NS0xMjM2Cit3b3JkIG51bmNhIDEzNDUtMTQKK3dvcmQgbsO6bWVybyAzNDU2Cit3b3JkIG90cm8gMTM1LTM1Ngord29yZCBwYWRyZSAxMjM0LTEKK3dvcmQgcGVxdWXDsW8gMTIzNC0xMjM0NS0xMjQ1Ngord29yZCBwb2NvIDEyMzQtMTQKK3dvcmQgcG9ycXVlIDEyMzQtMTIzNDUKK3dvcmQgcG9ycXXDqSA1LTEyMzQtMTIzNDUKK3dvcmQgcHJvbnRvIDIzNS0yMzQ1Cit3b3JkIHByb3BpbyAyMzUtMTIzNAord29yZCBwcm9waWVkYWQgMjM1LTEyMzQtMTQ1Cit3b3JkIHByb3BpYW1lbnRlIDIzNS0xMjM0LTEzNAord29yZCBxdcOpIDUtMTIzNDUKK3dvcmQgcXVpZW4gMTIzNDUtMTM0NQord29yZCBxdWnDqW4gNS0xMjM0NS0xMzQ1Cit3b3JkIHF1aXrDoSAxMjM0NS0xMzU2Cit3b3JkIHJlY2llbnRlbWVudGUgMTIzNS0yMzQ1LTEzNAord29yZCByZWNpZW50ZSAxMjM1LTIzNDUKK3dvcmQgc2Vnw7puIDIzNC0xMjQ1Cit3b3JkIHNpZG8gMjM0LTE0NQord29yZCBzaW5vIDIzNC0xMzQ1Cit3b3JkIHNpcXVpZXJhIDIzNC0xMjM0NQord29yZCBzb2xvIDIzNC0xMjMKK3dvcmQgc3VzIDIzNC0yMzQKK3dvcmQgc3VwZXJpb3IgMjM0LTEyMzQKK3dvcmQgc3V5byAyMzQtMTM0NTYKK3dvcmQgdGFtYmnDqW4gMjM0NS0xMgord29yZCB0YW1wb2NvIDIzNDUtMTIzNC0xNAord29yZCB0YW50byAyMzQ1LTIzNDUKK3dvcmQgdGVuZXIgMjM0NS0xMjM1Cit3b3JkIHRlbsOtYSAyMzQ1LTEzNDUKK3dvcmQgdGVuw61hbiAyMzQ1LTEzNDUtMTQ2Cit3b3JkIHRlbmlkbyAyMzQ1LTEzNDUtMTQ1Cit3b3JkIHRpZW1wbyAyMzQ1LTEyMzQKK3dvcmQgdG9kYXbDrWEgMjM0NS0xMjM2Cit3b3JkIHRvZG8gMjM0NS0xNDUKK3dvcmQgdMO6IDUtMjM0NQord29yZCB0dXlvIDIzNDUtMTM0NTYKK3dvcmQgw7psdGltbyAyMzQ1Ni0xMjMKK3dvcmQgw7puaWNvIDIzNDU2LTE0Cit3b3JkIMO6bmljYW1lbnRlIDIzNDU2LTE0LTEzNAord29yZCB1c3RlZCAxMzQtMTQ1Cit3b3JkIHZlcmRhZCAxMjM2LTE0NQord29yZCB2ZWNlcyAxMjM2LTE0Cit3b3JkIHZvc290cm9zIDQ1LTEyMzYKK3dvcmQgdnVlc3RybyA1Ni0xMjM2CisKKyMgaW5saW5lIGNvbnRyYWN0aW9uIG9mIGVtb2ppIGRlc2NyaXB0aW9ucworZW1vamkgZXMKZGlmZiAtLWdpdCBhL1RhYmxlcy9Db250cmFjdGlvbi9mci1nMS5jdGIgYi9UYWJsZXMvQ29udHJhY3Rpb24vZnItZzEuY3RiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM4MzYzZTEKLS0tIC9kZXYvbnVsbAorKysgYi9UYWJsZXMvQ29udHJhY3Rpb24vZnItZzEuY3RiCkBAIC0wLDAgKzEsMTM4IEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisjICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorIworIyBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisjCisjIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisjCisjIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyMgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorIyBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyMKKyMgV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworIworIyBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIyBCUkxUVFkgQ29udHJhY3Rpb24gVGFibGUgLSBGcmVuY2ggKHVuY29udHJhY3RlZCkKKworIyBEw6lmaW5pdGlvbnMgcG91ciBjb2RlIGJyYWlsbGUgZnJhbsOnYWlzIGludGVybmF0aW9uYWwgdW5pZmnDqQorIyBQYXIgTmljb2xhcyBQaXRyZSA8bmljb0BmbHV4bmljLm5ldD4KKyMgUsOpZsOpcmVuY2U6IGh0dHA6Ly93d3cuaW5sYi5xYy5jYS9hcHJvcG9zL2MyMDAzdW5pZmljYXRpb25kdWJyYWlsbGUuYXNweAorCitjYXBzaWduIDQ2CQlpbmRpY2F0ZXVyIGRlIG1hanVzY3VsZQorYmVnY2FwcyA0Ni00NgkJc3VjY2Vzc2lvbiBkZSBtYWp1c2N1bGVzCisKK251bXNpZ24gNgkJcHLDqWZpeGUgcG91ciBsZXMgY2hpZmZyZXMKK21pZG51bSBccyAzCQllc3BhY2UgZW50cmUgbGVzIGNoaWZmcmVzCittaWRudW0gLCAyCittaWRudW0gLiAyNTYKK21pZG51bSAtIDM2CittaWRudW0gLyAzNAorbWlkbnVtIDogMjUKK2VuZG51bSAjIDU2LTM0NTYKKworaW5jbHVkZSBsZXR0ZXJzLWxhdGluLmN0aQorCithbHdheXMgw6cgMTIzNDYJCWMgY8OpZGlsbGUKK2Fsd2F5cyDDqSAxMjM0NTYJCWUgYWNjZW50IGFpZ3UKK2Fsd2F5cyDDoCAxMjM1NgkJYSBhY2NlbnQgZ3JhdmUKK2Fsd2F5cyDDqCAyMzQ2CQllIGFjY2VudCBncmF2ZQorYWx3YXlzIMO5IDIzNDU2CQl1IGFjY2VudCBncmF2ZQorYWx3YXlzIMOiIDE2CQlhIGFjY2VudCBjaXJjb25mbGV4ZQorYWx3YXlzIMOqIDEyNgkJZSBhY2NlbnQgY2lyY29uZmxleGUKK2Fsd2F5cyDDriAxNDYJCWkgYWNjZW50IGNpcmNvbmZsZXhlCithbHdheXMgw7QgMTQ1NgkJbyBhY2NlbnQgY2lyY29uZmxleGUKK2Fsd2F5cyDDuyAxNTYJCXUgYWNjZW50IGNpcmNvbmZsZXhlCithbHdheXMgw6sgMTI0NgkJZSB0csOpbWEKK2Fsd2F5cyDDryAxMjQ1NgkJaSB0csOpbWEKK2Fsd2F5cyDDvCAxMjU2CQl1IHRyw6ltYQorYWx3YXlzIG9lIDI0NgkJb2UgbGlnYXR1cgorCithbHdheXMgw4cgMTIzNDYJCUMgY8OpZGlsbGUKK2Fsd2F5cyDDiSAxMjM0NTYJCUUgYWNjZW50IGFpZ3UKK2Fsd2F5cyDDgCAxMjM1NgkJQSBhY2NlbnQgZ3JhdmUKK2Fsd2F5cyDDiCAyMzQ2CQlFIGFjY2VudCBncmF2ZQorYWx3YXlzIMOZIDIzNDU2CQlVIGFjY2VudCBncmF2ZQorYWx3YXlzIMOCIDE2CQlBIGFjY2VudCBjaXJjb25mbGV4ZQorYWx3YXlzIMOKIDEyNgkJRSBhY2NlbnQgY2lyY29uZmxleGUKK2Fsd2F5cyDDjiAxNDYJCUkgYWNjZW50IGNpcmNvbmZsZXhlCithbHdheXMgw5QgMTQ1NgkJTyBhY2NlbnQgY2lyY29uZmxleGUKK2Fsd2F5cyDDmyAxNTYJCVUgYWNjZW50IGNpcmNvbmZsZXhlCithbHdheXMgw4sgMTI0NgkJRSB0csOpbWEKK2Fsd2F5cyDDjyAxMjQ1NgkJSSB0csOpbWEKK2Fsd2F5cyDDnCAxMjU2CQlVIHRyw6ltYQorYWx3YXlzIE9lIDI0NgkJT2UgbGlnYXR1cgorCithbHdheXMgLCAyCQl2aXJndWxlCithbHdheXMgOyAyMwkJcG9pbnQtdmlyZ3VsZQorYWx3YXlzIDogMjUJCWRldXgtcG9pbnRzCithbHdheXMgLiAyNTYJCXBvaW50CithbHdheXMgPyAyNgkJcG9pbnQgZCdpbnRlcnJvZ2F0aW9uCithbHdheXMgISAyMzUJCXBvaW50IGQnZXhjbGFtYXRpb24KK2Fsd2F5cyAiIDIzNTYJCWd1aWxsZW1ldAorYWx3YXlzICggMjM2CQlwYXJlbnRow6hzZSBvdXZyYW50ZQorYWx3YXlzICogMzUJCWFzdMOpcmlzcXVlCithbHdheXMgKSAzNTYJCXBhcmVudGjDqHNlIGZlcm1hbnRlCithbHdheXMgJyAzCQlhcG9zdHJvcGhlCithbHdheXMgLyAzNAkJYmFycmUgb2JsaXF1ZQorYWx3YXlzIEAgMzQ1CQlhcm9iYXMKK2Fsd2F5cyAlIDM0NgkJcG91ciBjZW50CithbHdheXMgLSAzNgkJdHJhaXQgZCd1bmlvbgorYWx3YXlzICMgMzQ1NgkJZGnDqHNlCisKK2Fsd2F5cyAwIDM0NTYJCXrDqXJvCithbHdheXMgMSAxNgkJdW4KK2Fsd2F5cyAyIDEyNgkJZGV1eAorYWx3YXlzIDMgMTQ2CQl0cm9pcworYWx3YXlzIDQgMTQ1NgkJcXVhdHJlCithbHdheXMgNSAxNTYJCWNpbnEKK2Fsd2F5cyA2IDEyNDYJCXNpeAorYWx3YXlzIDcgMTI0NTYJCXNlcHQKK2Fsd2F5cyA4IDEyNTYJCWh1aXQKK2Fsd2F5cyA5IDI0NgkJbmV1ZgorCithbHdheXMgw7cgNi0yNTYJCWRpdmlzw6kgcGFyCithbHdheXMgKyA2LTIzNQkJcGx1cworYWx3YXlzID0gNi0yMzU2CQnDqWdhbAorYWx3YXlzIMOXIDYtMzUJCW11bHRpcGxpw6kgcGFyCithbHdheXMgPCA0Ni0xMjYJCWluZsOpcmlldXIgw6AKK2Fsd2F5cyA+IDQ2LTM0NQkJc3Vww6lyaWV1ciDDoAorCithbHdheXMgwqkgNS0xNAkJY29weXJpZ2h0CithbHdheXMgwrAgNS0xMzUJCWRlZ3LDqQorYWx3YXlzICYgNS0xMjM0NTYJcGVybHXDqHRlIChldCBjb21tZXJjaWFsKQorYWx3YXlzIMKiIDQ1LTE0CQljZW50CithbHdheXMgwqQgNDUtMTUJCWV1cm8KK2Fsd2F5cyDCoyA0NS0xMjMJCWxpdnJlCithbHdheXMgwqcgNDUtMTIzNAlwYXJhZ3JhcGhlCithbHdheXMgJCA0NS0yMzQJCWRvbGxhcgorYWx3YXlzIMKlIDQ1LTEzNDU2CXllbgorYWx3YXlzIMKrIDQ1LTIzNTYJZ3VpbGxlbWV0IGZyYW7Dp2FpcyBvdXZyYW50CithbHdheXMgwrsgMjM1Ni0xMglndWlsbGVtZXQgZnJhbsOnYWlzIGZlcm1hbnQKK2Fsd2F5cyBbIDQ1LTIzNgkJY3JvY2hldCBkcm9pdCBvdXZyYW50CithbHdheXMgXSAzNTYtMTIJCWNyb2NoZXQgZHJvaXQgZmVybWFudAorYWx3YXlzIHsgNi0yMzYJCWFjY29sYWRlIGRlIGdhdWNoZQorYWx3YXlzIH0gMzU2LTMJCWFjY29sYWRlIGRlIGRyb2l0ZQorCithbHdheXMgwrkgNC02LTE2CQlleHBvc2FudCAxCithbHdheXMgwrIgNC02LTEyNglleHBvc2FudCAyCithbHdheXMgwrMgNC02LTE0NglleHBvc2FudCAzCithbHdheXMgwrwgNi0xNi0zNC0xNDU2CXVuIHF1YXJ0CithbHdheXMgwr0gNi0xNi0zNC0xMjYJdW4gZGVtaQorYWx3YXlzIMK+IDYtMTI2LTM0LTE0NTYJdHJvaXMgcXVhcnRzCisKK2Fsd2F5cyBfIDc4CQlzb3VsaWduw6kKKworcmVwZWF0YWJsZSBccyAwCQllc3BhY2VzCityZXBlYXRhYmxlIFx0IDAJCXRhYnVsYXRpb25zCityZXBlYXRhYmxlIFx4YTAgMAkJZXNwYWNlcyBpbnPDqWNhYmxlcworCityZXBlYXRhYmxlIC4uLiAzLTMtMwkJcG9pbnRzIGRlIHN1aXRlCityZXBlYXRhYmxlIC0tLSAzNi0zNi0zNgorcmVwZWF0YWJsZSBfX18gNzgtNzgtNzgKKworYWx3YXlzIFxzLS1ccyAzNi0zNgl0aXJldAorCmRpZmYgLS1naXQgYS9UYWJsZXMvQ29udHJhY3Rpb24vZnItZzIuY3RiIGIvVGFibGVzL0NvbnRyYWN0aW9uL2ZyLWcyLmN0YgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NGE3OGE3Ci0tLSAvZGV2L251bGwKKysrIGIvVGFibGVzL0NvbnRyYWN0aW9uL2ZyLWcyLmN0YgpAQCAtMCwwICsxLDE3OTEgQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyMgICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisjCisjIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyMKKyMgQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjIEJSTFRUWSBDb250cmFjdGlvbiBUYWJsZSAtIEZyZW5jaCAoY29udHJhY3RlZCkKKworIyBBdXRldXI6CisjCisjCU5pY29sYXMgUGl0cmUgPG5pY29AZmx1eG5pYy5uZXQ+CisjCisjIFLDqWbDqXJlbmNlOgorIworIwlJbmRleCBkZSBsJ2FicsOpZ8OpIG9ydGhvZ3JhcGhpcXVlIGZyYW7Dp2FpcyDDqXRlbmR1LCBsZWN0dXJlIGV0IMOpY3JpdHVyZQorIwlSw6l2aXNpb24gMTk5MworIwlTZXJ2aWNlIGRlIHByb2R1Y3Rpb24gQnJhaWxsZSwgSW5zdGl0dXQgTmF6YXJldGggZXQgTG91aXMtQnJhaWxsZQorIwlMb25ndWV1aWwgKFF1w6liZWMpCisKK2luY2x1ZGUgZnItZzEuY3RiCisKKyMjIworIyMjIDEuIEFzc2VtYmxhZ2VzIGRlIGxldHRyZXMgcmVwcsOpc2VudMOpcyBwYXIgdW4gc2V1bCBzeW1ib2xlLAorIyMjICAgIGV0IGZpbmFsZXMgcmVwcsOpc2VudMOpZXMgcGFyIGRldXggb3UgdHJvaXMgc3ltYm9sZXM7CisjIyMKKworbGV0c2lnbiA2CisKK2NsYXNzIHZveSBhZWlvdXnDqcOgw6jDucOiw6rDrsO0w7vDq8Ovw7xBRUlPVVnDicOAw4jDmcOCw4rDi8Ovw7wKK2NsYXNzIGNvbiBiY8OnZGZnaGprbG1ucHFyc3R2d3h6QkPDh0RGR0hKS0xNTlBRUlNUVldYWgorY2xhc3MgYm1wIGJtcEJNUAorCitlbmR3b3JkIGFibGUgNDUKK2Fsd2F5cyBhaSAzNAorZW5kd29yZCBhaXQgMTQ2CitiZWZvcmUgY29uIGFsd2F5cyBhbiAyCitlbmR3b3JkIGFudCAxNDU2CitiZWZvcmUgY29uIGFsd2F5cyBhciA0CitlbmR3b3JkIGFyIDQKK2VuZHdvcmQgYXRpb24gMTYKK2Fsd2F5cyBhdSAxMworCithbHdheXMgYmwgNDUKK2JlZm9yZSB2b3kgYWx3YXlzIGJyIDIzCisKK2Fsd2F5cyBjaCAxMjM1NgorYmVmb3JlIHZveSBhbHdheXMgY2wgMTQ2CitiZWZvcmUgY29uIGJlZ3dvcmQgY29tIDM2CitiZWZvcmUgY29uIGFsd2F5cyBjb24gMjUKK2JlZm9yZSB2b3kgYWx3YXlzIGNyIDI1CisKK2JlZm9yZSBjb24gYmVnd29yZCBkaXMgMjU2CitiZWZvcmUgdm95IGFsd2F5cyBkciAxNDU2CisKK2VuZHdvcmQgZWxsZSA0NTYKK2JlZm9yZSBjb24gYWx3YXlzIGVtIDM0NQorYmVmb3JlIGNvbiBhbHdheXMgZW4gMjYKK2VuZHdvcmQgZW4gMjYKK2VuZHdvcmQgZW50IDEyNgorYmVmb3JlIGNvbiBtaWR3b3JkIGVyIDIzNgorZW5kd29yZCBlciAyMzYKK2JlZ3dvcmQgZXMgMTU2CitlbmR3b3JkIGVzIDE1Ngord29yZCBldSAxNS0xMzYKK2Fsd2F5cyBldSA1CitiZWZvcmUgY29uIGFsd2F5cyBldXIgNDYKK2VuZHdvcmQgZXVyIDQ2CitiZWZvcmUgY29uIGFsd2F5cyBleCAxMzQ2CitlbmR3b3JkIGV6IDEzNTYKKworYmVmb3JlIHZveSBhbHdheXMgZmwgMTI2CitiZWZvcmUgdm95IGFsd2F5cyBmciAxNgorCitiZWZvcmUgdm95IGFsd2F5cyBnbCAzNDUKK2Fsd2F5cyBnbiAyMzU2CitiZWZvcmUgdm95IGFsd2F5cyBnciAxMjQ1NgorCithbHdheXMgaWVuIDI1NgorYWx3YXlzIGlldSA2CitiZWZvcmUgYm1wIGJlZ3dvcmQgaW0gMjQ2CithbHdheXMgaW4gMzUKK2Fsd2F5cyBpb24gMzQ1NgorZW5kd29yZCBpdGlvbiAyNDYKKworYmVmb3JlIHZveSBhZnRlciB2b3kgYWx3YXlzIGxsIDQ1NgorCithbHdheXMgb2kgMjM0NTYKK2JlZm9yZSBjb24gYWx3YXlzIG9tIDI0NTYKK2VuZHdvcmQgb20gMjQ1NgorYmVmb3JlIGNvbiBhbHdheXMgb24gMzQ2CitlbmR3b3JkIG9uIDM0NgorYmVmb3JlIGNvbiBhbHdheXMgb3IgNTYKK2VuZHdvcmQgb3IgNTYKK2Fsd2F5cyBvdSAxMjU2CitiZWZvcmUgY29uIGFsd2F5cyBvdXIgMTIzNDYKK2VuZHdvcmQgb3VyIDEyMzQ2CisKK2JlZm9yZSB2b3kgYWx3YXlzIHBsIDEyNDYKK2JlZm9yZSB2b3kgYWx3YXlzIHByIDIzNQorYmVmb3JlIGNvbiBhbHdheXMgcHJvIDIzNQorCithbHdheXMgcXUgMTIzNDUKK2VuZHdvcmQgcXVlIDEyMzQ1CisKK2JlZm9yZSBjb24gYmVnd29yZCByZSAzCisKK2JlZm9yZSB2b3kgYWZ0ZXIgdm95IGFsd2F5cyBzcyAyMzQ2CisKK2JlZm9yZSB2b3kgYWx3YXlzIHRyIDM1NgorYmVmb3JlIGNvbiBiZWd3b3JkIHRyYW5zIDM1NgorYmVmb3JlIHZveSBhZnRlciB2b3kgYWx3YXlzIHR0IDI0NTYKKworYmVmb3JlIGNvbiBhbHdheXMgdWkgMjMKKworZW5kd29yZCBhYmxlbWVudCA0NS0xMzQKK2VuZHdvcmQgYmlsaXTDqSAxMi0xMjMtMjM0NQorZW5kd29yZCBiaWxpdMOpcyAxMi0xMjMtMjM0NS0yMzQKK2VuZHdvcmQgZWxsZW1lbnQgNDU2LTEzNAorZW5kd29yZCBsb2dpZSAxMjMtMTI0NQorZW5kd29yZCBxdWVtZW50IDEyMzQ1LTEzNAorZW5kd29yZCBxdWVtZW50cyAxMjM0NS0xMzQtMjM0CitlbmR3b3JkIHRlbWVudCAyMzQ1LTEzNAorZW5kd29yZCB0ZW1lbnRzIDIzNDUtMTM0LTIzNAorZW5kd29yZCB0dGVtZW50IDIzNDUtMjM0NS0xMzQKK2VuZHdvcmQgdHRlbWVudHMgMjM0NS0yMzQ1LTEzNC0yMzQKK2VuZHdvcmQgdmVtZW50IDEyMzYtMTM0CitlbmR3b3JkIHZlbWVudHMgMTIzNi0xMzQtMjM0CisKK2JlZm9yZSBjb24gYWx3YXlzIGFpbiAxLTM1CitlbmR3b3JkIGFpbiAxLTM1CitiZWZvcmUgY29uIGFsd2F5cyBvaW4gMTM1LTM1CitlbmR3b3JkIG9pbiAxMzUtMzUKKworYmVmb3JlIGNvbiBiZWd3b3JkIHJlY29tIDMtMzYKK2JlZm9yZSBjb24gYmVnd29yZCByZWRpcyAzLTI1NgorYmVmb3JlIGNvbiBiZWd3b3JkIHJldHJhbnMgMy0zNTYKK2JlZm9yZSBjb24gYmVnd29yZCBpbmNvbSAzNS0zNgorYmVmb3JlIGNvbiBiZWd3b3JkIGluZGlzIDM1LTI1NgorYmVmb3JlIGNvbiBiZWd3b3JkIGludHJhbnMgMzUtMzU2CitiZWd3b3JkIGluZXMgMzUtMTU2CisKK3ByZndvcmQgdGllbnQgMjM0NS0yNTYtMjM0NQorcHJmd29yZCB2aWVudCAxMjM2LTI1Ni0yMzQ1CitlbmR3b3JkIGllbnQgMjQtMTI2Cit3b3JkIGJhbGJ1dGllbnQgMTItMS0xMjMtMTItMTM2LTIzNDUtMjQtMTI2Cit3b3JkIGluaXRpZW50IDM1LTI0LTIzNDUtMjQtMTI2Cit3b3JkIGTDqXZpZW50IDE0NS0xMjM0NTYtMTIzNi0yNC0xMjYKK3dvcmQgZW52aWVudCAxMjM1LTI2LTEyMzYtMjQtMTI2CisKK3N1ZndvcmQgYmxldSA0NS0xNS0xMzYKK2JlZm9yZSBjb24gYWx3YXlzIGJydWkgMTItMTIzNS0yMworZW5kd29yZCBjbGFpdCAxNC0xMjMtMTQ2CitiZWZvcmUgdm95IGFsd2F5cyBjb25jciAxNC0zNDYtMjUKK2VuZHdvcmQgZHJhbnQgMTQ1LTEyMzUtMTQ1NgorYWx3YXlzIGRyw7QgMTQ1LTEyMzUtMTQ1NgorZW5kd29yZCBlbj8gMTUtMTM0NS0yNgorYWx3YXlzIGllbi4gMjQtMjYtMjU2CitiZWZvcmUgdm95IGFsd2F5cyBwcm9wciAyMzUtMTM1LTIzNQorYmVmb3JlIGNvbiBiZWd3b3JkIHJlbiAxMjM1LTI2CithbHdheXMgc3PDqCAyMzQtMjM0LTIzNDYKK3dvcmQgKGVuIDIzNi0xNS0xMzQ1Cit3b3JkIChsYSAyMzYtMTIzLTEKKworIyMjCisjIyMgMi4gTW90cyByZXByw6lzZW50w6lzIHBhciB1biBzZXVsIHN5bWJvbGUKKyMjIworCit3b3JkIGEgMQord29yZCDDoCAxMjM1Ngord29yZCBhaSAzNAord29yZCBhdSAxMword29yZCBhdXggMTMtMTM0Ngord29yZCBiaWVuIDEyCit3b3JkIGJpZW5zIDEyLTIzNAord29yZCBjZSAxNAord29yZCBjZWx1aSAzNgord29yZCBjZXQgMTQ2Cit3b3JkIGRhbnMgMTQ1Ngord29yZCBkZSAxNDUKK3dvcmQgZMOocyAyNTYKK3dvcmQgZHUgMjM2Cit3b3JkIGVsbGUgMTM1Ngord29yZCBlbGxlcyAxMzU2LTIzNAord29yZCBlbiAyNgord29yZCBlc3QgMTU2Cit3b3JkIGV0IDIzNDU2Cit3b3JkIMOpdMOpIDIzNTYKK3dvcmQgw6l0w6lzIDIzNTYtMjM0Cit3b3JkIGZhaXJlIDEyNAord29yZCBncmFuZCAxMjQ1Ngord29yZCBncmFuZHMgMTI0NTYtMjM0Cit3b3JkIGlsIDI0Cit3b3JkIGlscyAyNC0yMzQKK3dvcmQgamUgMjQ1Cit3b3JkIGxhIDMKK3dvcmQgbGUgMTIzCit3b3JkIGxlcyAzNDUKK3dvcmQgbHVpIDM0NTYKK3dvcmQgbWFpcyAxMzQ2Cit3b3JkIG1lIDEzNAord29yZCBtw6ptZSAxMjYKK3dvcmQgbcOqbWVzIDEyNi0yMzQKK3dvcmQgbmUgMTM0NQord29yZCBub3VzIDEzNQord29yZCBvbiAzNDYKK3dvcmQgb3UgMTI1Ngord29yZCBwYXIgMTIzNAord29yZCBwbHVzIDEyNDYKK3dvcmQgcG91ciAxMjM0Ngord29yZCBwdWlzIDIzNQord29yZCBxdWUgMTIzNDUKK3dvcmQgcXVpIDEyNDUKK3dvcmQgcXVvaSAxMjM0NTYKK3dvcmQgcmllbiAxMjM1Cit3b3JkIHJpZW5zIDEyMzUtMjM0Cit3b3JkIHNhbnMgMjM0Ngord29yZCBzZSAyMzQKK3dvcmQgc2kgMzUKK3dvcmQgc29uIDI0Ngord29yZCBzb25zIDI0Ni0yMzQKK3dvcmQgc291cyAzNTYKK3dvcmQgc3VyIDEyNQord29yZCB0ZSAyMzQ1Cit3b3JkIHRvdXMgMjQ1Ngord29yZCB0b3V0IDE2Cit3b3JkIHVuIDEzNgord29yZCB1bnMgMTM2LTIzNAord29yZCB2b3VzIDEyMzYKK3dvcmQgeSAxMzQ1NgorCitiZWd3b3JkIGMnIDE0LTMKK2JlZ3dvcmQgZCcgMTQ1LTMKK2JlZ3dvcmQgaicgMjQ1LTMKK2JlZ3dvcmQgbCcgMTIzLTMKK2JlZ3dvcmQgbScgMTM0LTMKK2JlZ3dvcmQgbicgMTM0NS0zCitiZWd3b3JkIHMnIDIzNC0zCitiZWd3b3JkIHQnIDIzNDUtMworCisjIyMKKyMjIyAzLiBNb3RzIHJlcHLDqXNlbnTDqXMgcGFyIGRldXggb3UgcGx1c2lldXJzIHN5bWJvbGVzCisjIyMKKword29yZCBhYnNvbHUJCTEtMTIKK3dvcmQgYWJzb2x1cwkJMS0xMi0yMzQKK3dvcmQgYWJzb2x1ZQkJMS0xMi0xNQord29yZCBhYnNvbHVlcwkJMS0xMi0xNTYKK3dvcmQgYWJzb2x1bWVudAkJMS0xMi0xMzQKK3dvcmQgYWN0aW9uCQkxLTM0NTYKK3dvcmQgYWN0aW9ucwkJMS0zNDU2LTIzNAord29yZCBhY3Rpb25uYWlyZQkxLTM0NTYtMTIzNQord29yZCBhY3Rpb25uYWlyZXMJMS0zNDU2LTEyMzUtMjM0Cit3b3JkIGFmZmFpcmUJCTEtMTI0LTEyNAord29yZCBhZmZhaXJlcwkJMS0xMjQtMTI0LTIzNAord29yZCBhZmluCQkxLTEyNAord29yZCBhaWxsZXVycwkJMzQtMTM2Cit3b3JkIGFpbnNpCQkxLTI0Cit3b3JkIGFsb3JzCQkxLTEyMword29yZCBhbW91cgkJMS0xMzQKK3dvcmQgYW1vdXJzCQkxLTEzNC0yMzQKK3dvcmQgYW1vdXJldXNlCQkxLTEzNC0yMzQtMTUKK3dvcmQgYW1vdXJldXNlcwkJMS0xMzQtMjM0LTE1Ngord29yZCBhbW91cmV1c2VtZW50CTEtMTM0LTIzNC0xMzQKK3dvcmQgYW1vdXJldXgJCTEtMTM0LTEzNDYKK3dvcmQgYXBwYXJlbW1lbnQJMS0xMjM0LTEzNAord29yZCBhcHBhcmVuY2UJCTEtMTIzNC0xNAord29yZCBhcHBhcmVuY2VzCQkxLTEyMzQtMTQtMjM0Cit3b3JkIGFwcGFyZW50CQkxLTEyMzQKK3dvcmQgYXBwYXJlbnRzCQkxLTEyMzQtMjM0Cit3b3JkIGFwcGFyZW50ZQkJMS0xMjM0LTE1Cit3b3JkIGFwcGFyZW50ZXMJCTEtMTIzNC0xNTYKK3dvcmQgYXByw6hzCQkxLTIzNQord29yZCBhc3NlegkJMS0xMzU2Cit3b3JkIGF0dGVudGlmCQkxLTIzNDUtMTI0Cit3b3JkIGF0dGVudGlmcwkJMS0yMzQ1LTEyNC0yMzQKK3dvcmQgYXR0ZW50aW9uCQkxLTIzNDUKK3dvcmQgYXR0ZW50aW9ucwkJMS0yMzQ1LTIzNAord29yZCBhdHRlbnRpdmUJCTEtMjM0NS0xMjM2Cit3b3JkIGF0dGVudGl2ZXMJCTEtMjM0NS0xMjM2LTIzNAord29yZCBhdHRlbnRpdmVtZW50CTEtMjM0NS0xMjM2LTEzNAord29yZCBhdWN1bgkJMTMtMTQKK3dvcmQgYXVjdW5lCQkxMy0xMzQ1Cit3b3JkIGF1Y3VuZW1lbnQJCTEzLTEzNDUtMTM0Cit3b3JkIGF1cGFyYXZhbnQJCTEzLTEyMzQKK3dvcmQgYXVwcsOocwkJMTMtMjM1Cit3b3JkIGF1cXVlbAkJMTMtMTIzNDUtMTIzCit3b3JkIGF1c3NpCQkxMy0yMzQKK3dvcmQgYXVzc2l0w7R0CQkxMy0yMzQ1Cit3b3JkIGF1dG91cgkJMTMtMTIzNQord29yZCBhdXRyZQkJMTMtMzU2Cit3b3JkIGF1dHJlcwkJMTMtMzU2LTIzNAord29yZCBhdXRyZWZvaXMJCTEzLTEyNAord29yZCBhdXRyZW1lbnQJCTEzLTM1Ni0xMzQKK3dvcmQgYXV4cXVlbGxlcwkJMTMtMTM0Ni0xMjM0NS0xMjMtMTIzLTIzNAord29yZCBhdXhxdWVscwkJMTMtMTM0Ni0xMjM0NS0xMjMtMjM0Cit3b3JkIGF2YW5jZQkJMS0xMjM2LTE0Cit3b3JkIGF2YW5jZXMJCTEtMTIzNi0xNC0yMzQKK3dvcmQgYXZhbmNlbWVudAkJMS0xMjM2LTE0LTEzNAord29yZCBhdmFudAkJMS0xMjM2Cit3b3JkIGF2YW50YWdlCQkxLTEyMzYtMTI0NQord29yZCBhdmFudGFnZXMJCTEtMTIzNi0xMjQ1LTIzNAord29yZCBhdmFudGFnZXVzZQkxLTEyMzYtMTI0NS0yMzQtMTUKK3dvcmQgYXZhbnRhZ2V1c2VzCTEtMTIzNi0xMjQ1LTIzNC0xNTYKK3dvcmQgYXZhbnRhZ2V1c2VtZW50CTEtMTIzNi0xMjQ1LTIzNC0xMzQKK3dvcmQgYXZhbnRhZ2V1eAkJMS0xMjM2LTEyNDUtMTM0Ngord29yZCBhdmVjCQkxLTE0Cit3b3JkIGF2b2lyCQkxLTEyMzUKK3dvcmQgYXZvaXJzCQkxLTEyMzUtMjM0Cit3b3JkIGF5YW50CQkxLTEzNDU2CisKK3dvcmQgYmVhdWNvdXAJCTEyLTE0Cit3b3JkIGJlc29nbmUJCTEyLTIzNTYKK3dvcmQgYmVzb2duZXMJCTEyLTIzNTYtMjM0Cit3b3JkIGJlc29nbmV1c2UJCTEyLTIzNTYtMjM0LTE1Cit3b3JkIGJlc29nbmV1c2VzCQkxMi0yMzU2LTIzNC0xNTYKK3dvcmQgYmVzb2duZXV4CQkxMi0yMzU2LTEzNDYKK3dvcmQgYmVzb2luCQkxMi0zNQord29yZCBiZXNvaW5zCQkxMi0zNS0yMzQKK3dvcmQgYsOqdGUJCTEyLTEyNgord29yZCBiw6p0ZXMJCTEyLTEyNi0yMzQKK3dvcmQgYsOqdGVtZW50CQkxMi0xMjYtMTM0Cit3b3JkIGJpZW5mYWlzYW5jZQkxMi0xMjQtMTQKK3dvcmQgYmllbmZhaXNhbmNlcwkxMi0xMjQtMTQtMjM0Cit3b3JkIGJpZW5mYWl0CQkxMi0xMjQKK3dvcmQgYmllbmZhaXRzCQkxMi0xMjQtMjM0Cit3b3JkIGJpZW5mYWl0ZXVyCTEyLTEyNC00Ngord29yZCBiaWVuZmFpdGV1cnMJMTItMTI0LTQ2LTIzNAord29yZCBiaWVudMO0dAkJMTItMjM0NQord29yZCBiaWVudmVpbGxhbmNlCTEyLTEyMzYtMTQKK3dvcmQgYmllbnZlaWxsYW5jZXMJMTItMTIzNi0xNC0yMzQKK3dvcmQgYmllbnZlaWxsYW50CTEyLTEyMzYKK3dvcmQgYmllbnZlaWxsYW50cwkxMi0xMjM2LTIzNAord29yZCBiaWVudmVpbGxhbnRlCTEyLTEyMzYtMTUKK3dvcmQgYmllbnZlaWxsYW50ZXMJMTItMTIzNi0xNTYKK3dvcmQgYml6YXJyZQkJMTItMTM1Ngord29yZCBiaXphcnJlcwkJMTItMTM1Ni0yMzQKK3dvcmQgYml6YXJyZW1lbnQJMTItMTM1Ni0xMzQKK3dvcmQgYm9uaGV1cgkJMTItMTI1Cit3b3JkIGJvbmhldXJzCQkxMi0xMjUtMjM0Cit3b3JkIGJvbmpvdXIJCTEyLTI0NQord29yZCBib25qb3VycwkJMTItMjQ1LTIzNAord29yZCBib25uZQkJMTItMTM0NQord29yZCBib25uZXMJCTEyLTEzNDUtMjM0Cit3b3JkIGJvbm5lbWVudAkJMTItMTM0NS0xMzQKK3dvcmQgYm9udMOpCQkxMi0xMzUKK3dvcmQgYm9udMOpcwkJMTItMTM1LTIzNAord29yZCBib3VsZXZhcmQJCTEyLTE0NQord29yZCBib3VsZXZhcmRzCQkxMi0xNDUtMjM0Cit3b3JkIGJyYWlsbGUJCTIzLTEyMword29yZCBicmFuY2hhZ2UJCTIzLTEyMzU2LTEyNDUKK3dvcmQgYnJhbmNoYWdlcwkJMjMtMTIzNTYtMTI0NS0yMzQKK3dvcmQgYnJhbmNoZQkJMjMtMTIzNTYKK3dvcmQgYnJhbmNoZXMJCTIzLTEyMzU2LTIzNAord29yZCBicmFuY2hlbWVudAkyMy0xMjM1Ni0xMzQKK3dvcmQgYnJhbmNoZW1lbnRzCTIzLTEyMzU2LTEzNC0yMzQKK3dvcmQgYnJhdmUJCTIzLTEyMzYKK3dvcmQgYnJhdmVzCQkyMy0xMjM2LTIzNAord29yZCBicmF2ZW1lbnQJCTIzLTEyMzYtMTM0Cit3b3JkIGJydWl0CQkyMy0yMzQ1Cit3b3JkIGJydWl0cwkJMjMtMjM0NS0yMzQKK3dvcmQgYnJ1c3F1ZQkJMjMtMTIzNDUKK3dvcmQgYnJ1c3F1ZXMJCTIzLTEyMzQ1LTIzNAord29yZCBicnVzcXVlbWVudAkyMy0xMjM0NS0xMzQKK3dvcmQgYnVkZ2V0CQkxMi0xMjQ1Cit3b3JkIGJ1ZGdldHMJCTEyLTEyNDUtMjM0Cit3b3JkIGJ1ZGfDqXRhaXJlCQkxMi0xMjQ1LTEyMzUKK3dvcmQgYnVkZ8OpdGFpcmVzCTEyLTEyNDUtMTIzNS0yMzQKKword29yZCBjYXJhY3TDqHJlCQkxNC0yMzQ2Cit3b3JkIGNhcmFjdMOocmVzCQkxNC0yMzQ2LTIzNAord29yZCBjYXJhY3TDqXJpc3RpcXVlCTE0LTEyMzQ1Ni0xMjM0NQord29yZCBjYXJhY3TDqXJpc3RpcXVlcwkxNC0xMjM0NTYtMTIzNDUtMjM0Cit3b3JkIGNlY2kJCTE0LTE0Cit3b3JkIGNlbGEJCTE0LTEKK3dvcmQgY2VsbGUJCTE0LTEyMword29yZCBjZWxsZXMJCTE0LTEyMy0yMzQKK3dvcmQgY2VsdWktY2kJCTM2LTM2LTE0LTI0Cit3b3JkIGNlbHVpLWzDoAkJMzYtMzYtMTIzLTEyMzU2Cit3b3JkIGNlcGVuZGFudAkJMTQtMTIzNAord29yZCBjZXJ0YWluCQkxNC0zNQord29yZCBjZXJ0YWlucwkJMTQtMzUtMjM0Cit3b3JkIGNlcnRhaW5lCQkxNC0xMzQ1Cit3b3JkIGNlcnRhaW5lcwkJMTQtMTM0NS0yMzQKK3dvcmQgY2VydGFpbmVtZW50CTE0LTEzNDUtMTM0Cit3b3JkIGNlcnRlcwkJMTQtMjM2Cit3b3JkIGNlcnRpdHVkZQkJMTQtMjM2LTE0NQord29yZCBjZXJ0aXR1ZGVzCQkxNC0yMzYtMTQ1LTIzNAord29yZCBjZXMJCTE0LTIzNAord29yZCBjZXR0ZQkJMTQtMjM0NQord29yZCBjZXV4CQkxNC0xMzQ2Cit3b3JkIGNoYWN1bgkJMTIzNTYtMTQKK3dvcmQgY2hhY3VuZQkJMTIzNTYtMTM0NQord29yZCBjaGFncmluCQkxMjM1Ni0xMjQ1Ngord29yZCBjaGFncmlucwkJMTIzNTYtMTI0NTYtMjM0Cit3b3JkIGNoYWxldXIJCTEyMzU2LTEyMword29yZCBjaGFsZXVycwkJMTIzNTYtMTIzLTIzNAord29yZCBjaGFsZXVyZXVzZQkxMjM1Ni0xMjMtMjM0LTE1Cit3b3JkIGNoYWxldXJldXNlcwkxMjM1Ni0xMjMtMjM0LTE1Ngord29yZCBjaGFsZXVyZXVzZW1lbnQJMTIzNTYtMTIzLTIzNC0xMzQKK3dvcmQgY2hhbGV1cmV1eAkJMTIzNTYtMTIzLTEzNDYKK3dvcmQgY2hhbXAJCTEyMzU2LTEyMzQKK3dvcmQgY2hhbXBzCQkxMjM1Ni0xMjM0LTIzNAord29yZCBjaGFuZ2UJCTEyMzU2LTEyNDUKK3dvcmQgY2hhbmdlcwkJMTIzNTYtMTI0NS0yMzQKK3dvcmQgY2hhbmdlbWVudAkJMTIzNTYtMTI0NS0xMzQKK3dvcmQgY2hhbmdldXIJCTEyMzU2LTEyNDUtNDYKK3dvcmQgY2hhbmdldXJzCQkxMjM1Ni0xMjQ1LTQ2LTIzNAord29yZCBjaGFxdWUJCTEyMzU2LTEyMzQ1Cit3b3JkIGNoYXJpdGFibGUJCTEyMzU2LTIzNDUtNDUKK3dvcmQgY2hhcml0YWJsZXMJCTEyMzU2LTIzNDUtNDUtMjM0Cit3b3JkIGNoYXJpdGFibGVtZW50CTEyMzU2LTIzNDUtNDUtMTM0Cit3b3JkIGNoYXJpdMOpCQkxMjM1Ni0yMzQ1Cit3b3JkIGNoYXJpdMOpcwkJMTIzNTYtMjM0NS0yMzQKK3dvcmQgY2hhdWQJCTEyMzU2LTE0NQord29yZCBjaGF1ZHMJCTEyMzU2LTE0NS0yMzQKK3dvcmQgY2hhdWRlCQkxMjM1Ni0xNDUtMTUKK3dvcmQgY2hhdWRlcwkJMTIzNTYtMTQ1LTE1Ngord29yZCBjaGF1ZGVtZW50CQkxMjM1Ni0xNDUtMTM0Cit3b3JkIGNoZW1pbgkJMTIzNTYtMTM0Cit3b3JkIGNoZW1pbnMJCTEyMzU2LTEzNC0yMzQKK3dvcmQgY2jDqHJlCQkxMjM1Ni0yMzQ2Cit3b3JkIGNow6hyZXMJCTEyMzU2LTIzNDYtMjM0Cit3b3JkIGNow6hyZW1lbnQJCTEyMzU2LTIzNDYtMTM0Cit3b3JkIGNoZXoJCTEyMzU2LTEzNTYKK3dvcmQgY2hpZmZyYWdlCQkxMjM1Ni0xMjQtMTI0NQord29yZCBjaGlmZnJhZ2VzCQkxMjM1Ni0xMjQtMTI0NS0yMzQKK3dvcmQgY2hpZmZyZQkJMTIzNTYtMTI0Cit3b3JkIGNoaWZmcmVzCQkxMjM1Ni0xMjQtMjM0Cit3b3JkIGNob2V1cgkJMTIzNTYtMTIzNQord29yZCBjaG9ldXJzCQkxMjM1Ni0xMjM1LTIzNAord29yZCBjaG9peAkJMTIzNTYtMTM0Ngord29yZCBjaG9zZQkJMTIzNTYtMjM0Cit3b3JkIGNob3NlcwkJMTIzNTYtMjM0LTIzNAord29yZCBjaXJjb25zdGFuY2UJMTQtMjUtMTQKK3dvcmQgY2lyY29uc3RhbmNlcwkxNC0yNS0xNC0yMzQKK3dvcmQgY2lyY29uc3RhbmNpZWwJMTQtMjUtMTQtMTIzCit3b3JkIGNpcmNvbnN0YW5jaWVscwkxNC0yNS0xNC0xMjMtMjM0Cit3b3JkIGNpcmNvbnN0YW5jaWVsbGUJMTQtMjUtMTQtMTIzLTEyMword29yZCBjaXJjb25zdGFuY2llbGxlcwkxNC0yNS0xNC0xMjMtMTIzLTIzNAord29yZCBjaXZpbAkJMTQtMTIzNgord29yZCBjaXZpbHMJCTE0LTEyMzYtMjM0Cit3b3JkIGNpdmlsZQkJMTQtMTIzNi0xNQord29yZCBjaXZpbGVzCQkxNC0xMjM2LTE1Ngord29yZCBjaXZpbGVtZW50CQkxNC0xMjM2LTEzNAord29yZCBjaXZpbGlzYXRpb24JMTQtMTIzNi0xNgord29yZCBjaXZpbGlzYXRpb25zCTE0LTEyMzYtMTYtMjM0Cit3b3JkIGNpdmlsaXTDqQkJMTQtMTIzNi0yMzQ1Cit3b3JkIGNpdmlsaXTDqXMJCTE0LTEyMzYtMjM0NS0yMzQKK3dvcmQgY29ldXIJCTE0LTEyMzUKK3dvcmQgY29ldXJzCQkxNC0xMjM1LTIzNAord29yZCBjb21iaWVuCQkxNC0xMgord29yZCBjb21tZQkJMTQtMTM0Cit3b3JkIGNvbW1lbmNlbWVudAkzNi0xMzQKK3dvcmQgY29tbWVuY2VtZW50cwkzNi0xMzQtMjM0Cit3b3JkIGNvbW1lbnQJCTE0LTI2Cit3b3JkIGNvbW1lbnRhaXJlCTE0LTI2LTEyMzUKK3dvcmQgY29tbWVudGFpcmVzCTE0LTI2LTEyMzUtMjM0Cit3b3JkIGNvbW1lbnRhdGV1cgkxNC0yNi00Ngord29yZCBjb21tZW50YXRldXJzCTE0LTI2LTQ2LTIzNAord29yZCBjb21tdW4JCTM2LTEzNDUKK3dvcmQgY29tbXVucwkJMzYtMTM0NS0yMzQKK3dvcmQgY29tbXVuZQkJMzYtMTM0NS0xNQord29yZCBjb21tdW5lcwkJMzYtMTM0NS0xNTYKK3dvcmQgY29tbXVuYWwJCTM2LTEzNDUtMTIzCit3b3JkIGNvbW11bmFsZQkJMzYtMTM0NS0xMjMtMTUKK3dvcmQgY29tbXVuYWxlcwkJMzYtMTM0NS0xMjMtMTU2Cit3b3JkIGNvbW11bmF1dGFpcmUJMzYtMTM0NS0yMzQ1LTEyMzUKK3dvcmQgY29tbXVuYXV0YWlyZXMJMzYtMTM0NS0yMzQ1LTEyMzUtMjM0Cit3b3JkIGNvbW11bmF1dMOpCQkzNi0xMzQ1LTIzNDUKK3dvcmQgY29tbXVuYXV0w6lzCQkzNi0xMzQ1LTIzNDUtMjM0Cit3b3JkIGNvbW11bmF1eAkJMzYtMTM0NS0xMzQ2Cit3b3JkIGNvbW11bsOpbWVudAkzNi0xMzQ1LTEzNAord29yZCBjb21tdW5pb24JCTM2LTEzNDUtMzQ1Ngord29yZCBjb21tdW5pb25zCQkzNi0xMzQ1LTM0NTYtMjM0Cit3b3JkIGNvbXBsw6ltZW50CQkzNi0xMjQ2LTEzNAord29yZCBjb21wbMOpbWVudHMJMzYtMTI0Ni0xMzQtMjM0Cit3b3JkIGNvbXBsw6ltZW50YWlyZQkzNi0xMjQ2LTEzNC0xMjM1Cit3b3JkIGNvbXBsw6ltZW50YWlyZXMJMzYtMTI0Ni0xMzQtMTIzNS0yMzQKK3dvcmQgY29tcGxldAkJMzYtMTI0Ngord29yZCBjb21wbGV0cwkJMzYtMTI0Ni0yMzQKK3dvcmQgY29tcGzDqHRlCQkzNi0yMzQ1Cit3b3JkIGNvbXBsw6h0ZXMJCTM2LTIzNDUtMjM0Cit3b3JkIGNvbXBsw6h0ZW1lbnQJMzYtMjM0NS0xMzQKK3dvcmQgY29uY2x1c2lvbgkJMjUtMTQKK3dvcmQgY29uY2x1c2lvbnMJMjUtMTQtMjM0Cit3b3JkIGNvbmRpdGlvbgkJMjUtMTQ1Cit3b3JkIGNvbmRpdGlvbnMJCTI1LTE0NS0yMzQKK3dvcmQgY29uZGl0aW9ubmVsCTI1LTE0NS0xMjMKK3dvcmQgY29uZGl0aW9ubmVscwkyNS0xNDUtMTIzLTIzNAord29yZCBjb25kaXRpb25uZWxsZQkyNS0xNDUtMTIzLTEyMword29yZCBjb25kaXRpb25uZWxsZXMJMjUtMTQ1LTEyMy0xMjMtMjM0Cit3b3JkIGNvbmRpdGlvbm5lbGxlbWVudAkyNS0xNDUtMTIzLTEzNAord29yZCBjb25maWFuY2UJCTI1LTEyNC0xNAord29yZCBjb25maWFudAkJMjUtMTI0Cit3b3JkIGNvbmdyw6hzCQkyNS0xMjQ1Ngord29yZCBjb25uYWlzc2FuY2UJMjUtMTM0NS0xNAord29yZCBjb25uYWlzc2FuY2VzCTI1LTEzNDUtMTQtMjM0Cit3b3JkIGNvbm5hw650cmUJCTI1LTEzNDUKK3dvcmQgY29uc2NpZW1tZW50CTI1LTIzNC0xMzQKK3dvcmQgY29uc2NpZW5jZQkJMjUtMjM0LTE0Cit3b3JkIGNvbnNjaWVuY2VzCTI1LTIzNC0xNC0yMzQKK3dvcmQgY29uc2NpZW5jaWV1c2UJMjUtMjM0LTE0LTIzNC0xNQord29yZCBjb25zY2llbmNpZXVzZXMJMjUtMjM0LTE0LTIzNC0xNTYKK3dvcmQgY29uc2NpZW5jaWV1c2VtZW50CTI1LTIzNC0xNC0yMzQtMTM0Cit3b3JkIGNvbnNjaWVuY2lldXgJMjUtMjM0LTE0LTEzNDYKK3dvcmQgY29uc2NpZW50CQkyNS0yMzQKK3dvcmQgY29uc2NpZW50cwkJMjUtMjM0LTIzNAord29yZCBjb25zY2llbnRlCQkyNS0yMzQtMTUKK3dvcmQgY29uc2NpZW50ZXMJMjUtMjM0LTE1Ngord29yZCBjb25zw6lxdWVtbWVudAkxNC0xMjM0NS0xMzQKK3dvcmQgY29uc8OpcXVlbmNlCTE0LTEyMzQ1LTE0Cit3b3JkIGNvbnPDqXF1ZW5jZXMJMTQtMTIzNDUtMTQtMjM0Cit3b3JkIGNvbnPDqXF1ZW50CQkxNC0xMjM0NQord29yZCBjb25zw6lxdWVudHMJMTQtMTIzNDUtMjM0Cit3b3JkIGNvbnPDqXF1ZW50ZQkxNC0xMjM0NS0xNQord29yZCBjb25zw6lxdWVudGVzCTE0LTEyMzQ1LTE1Ngord29yZCBjb25zaWTDqXJhYmxlCTE0LTE0NQord29yZCBjb25zaWTDqXJhYmxlcwkxNC0xNDUtMjM0Cit3b3JkIGNvbnNpZMOpcmFibGVtZW50CTE0LTE0NS0xMzQKK3dvcmQgY29uc2lkw6lyYXRpb24JMTQtMTQ1LTE2Cit3b3JkIGNvbnNpZMOpcmF0aW9ucwkxNC0xNDUtMTYtMjM0Cit3b3JkIGNvbnRyYWlyZQkJMTQtMzU2Cit3b3JkIGNvbnRyYWlyZXMJCTE0LTM1Ni0yMzQKK3dvcmQgY29udHJhaXJlbWVudAkxNC0zNTYtMTM0Cit3b3JkIGNvbnZlcnNhdGlvbgkyNS0xMjM2Cit3b3JkIGNvbnZlcnNhdGlvbnMJMjUtMTIzNi0yMzQKK3dvcmQgY8O0dMOpCQkxNC0xNDU2Cit3b3JkIGPDtHTDqXMJCTE0LTE0NTYtMjM0Cit3b3JkIGNvdXBsZQkJMTQtMTI0Ngord29yZCBjb3VwbGVzCQkxNC0xMjQ2LTIzNAord29yZCBjb3VyYWdlCQkxNC0xMjQ1Cit3b3JkIGNvdXJhZ2V1c2UJCTE0LTEyNDUtMjM0LTE1Cit3b3JkIGNvdXJhZ2V1c2VzCQkxNC0xMjQ1LTIzNC0xNTYKK3dvcmQgY291cmFnZXVzZW1lbnQJMTQtMTI0NS0yMzQtMTM0Cit3b3JkIGNvdXJhZ2V1eAkJMTQtMTI0NS0xMzQ2CisKK3dvcmQgZGFuZ2VyCQkxNDUtMTI0NQord29yZCBkYW5nZXJzCQkxNDUtMTI0NS0yMzQKK3dvcmQgZGFuZ2V1cmV1c2UJMTQ1LTEyNDUtMjM0LTE1Cit3b3JkIGRhbmdldXJldXNlcwkxNDUtMTI0NS0yMzQtMTU2Cit3b3JkIGRhbmdldXJldXNlbWVudAkxNDUtMTI0NS0yMzQtMTM0Cit3b3JkIGRhbmdldXJldXgJCTE0NS0xMjQ1LTEzNDYKK3dvcmQgZGF2YW50YWdlCQkxNDUtMQord29yZCBkZWJvdXQJCTE0NS0xMgord29yZCBkZWRhbnMJCTE0NS0xNDUKK3dvcmQgZGVncsOpCQkxNDUtMTI0NTYKK3dvcmQgZGVncsOpcwkJMTQ1LTEyNDU2LTIzNAord29yZCBkZWhvcnMJCTE0NS0xMjUKK3dvcmQgZMOpasOgCQkxNDUtMjQ1Cit3b3JkIGRlbWFpbgkJMTQ1LTEzNAord29yZCBkZXB1aXMJCTE0NS0xMjM0Cit3b3JkIGRlcm5pZXIJCTE0NS0xMzQ1Cit3b3JkIGRlcm5pZXJzCQkxNDUtMTM0NS0yMzQKK3dvcmQgZGVybmnDqHJlCQkxNDUtMTIzNQord29yZCBkZXJuacOocmVzCQkxNDUtMTIzNS0yMzQKK3dvcmQgZGVybmnDqHJlbWVudAkxNDUtMTIzNS0xMzQKK3dvcmQgZGVycmnDqHJlCQkxNDUtMjM2Cit3b3JkIGRlcnJpw6hyZXMJCTE0NS0yMzYtMjM0Cit3b3JkIGRlcwkJMTQ1LTIzNAord29yZCBkw6lzb3JtYWlzCQkxNDUtMzQKK3dvcmQgZGVzcXVlbHMJCTE0NS0yMzQtMTIzNDUtMTIzLTIzNAord29yZCBkZXNxdWVsbGVzCQkxNDUtMjM0LTEyMzQ1LTEyMy0xMjMtMjM0Cit3b3JkIGRlc3RpbgkJMTQ1LTM1Cit3b3JkIGRlc3RpbnMJCTE0NS0zNS0yMzQKK3dvcmQgZGVzdGluYXRhaXJlCTE0NS0zNS0xMjM1Cit3b3JkIGRlc3RpbmF0YWlyZXMJMTQ1LTM1LTEyMzUtMjM0Cit3b3JkIGRlc3RpbmF0aW9uCTE0NS0zNS0xNgord29yZCBkZXN0aW5hdGlvbnMJMTQ1LTM1LTE2LTIzNAord29yZCBkZXZhbnQJCTE0NS0xMjM2Cit3b3JkIGRldmFudHMJCTE0NS0xMjM2LTIzNAord29yZCBkaWZmw6lyZW1tZW50CTE0NS0zNDUtMTM0Cit3b3JkIGRpZmbDqXJlbmNlCQkxNDUtMjYtMTQKK3dvcmQgZGlmZsOpcmVuY2VzCTE0NS0yNi0xNC0yMzQKK3dvcmQgZGlmZsOpcmVudAkJMTQ1LTI2Cit3b3JkIGRpZmbDqXJlbnRzCQkxNDUtMjYtMjM0Cit3b3JkIGRpZmbDqXJlbnRlCQkxNDUtMjYtMTUKK3dvcmQgZGlmZsOpcmVudGVzCTE0NS0yNi0xNTYKK3dvcmQgZGlmZmljaWxlCQkxNDUtMTI0Cit3b3JkIGRpZmZpY2lsZXMJCTE0NS0xMjQtMjM0Cit3b3JkIGRpZmZpY2lsZW1lbnQJMTQ1LTEyNC0xMzQKK3dvcmQgZGlmZmljdWx0w6kJCTE0NS0xMjQtMjM0NQord29yZCBkaWZmaWN1bHTDqXMJMTQ1LTEyNC0yMzQ1LTIzNAord29yZCBkaWduZQkJMTQ1LTIzNTYKK3dvcmQgZGlnbmVzCQkxNDUtMjM1Ni0yMzQKK3dvcmQgZGlnbmVtZW50CQkxNDUtMjM1Ni0xMzQKK3dvcmQgZGlnbml0YWlyZQkJMTQ1LTIzNTYtMjM0NS0xMjM1Cit3b3JkIGRpZ25pdGFpcmVzCTE0NS0yMzU2LTIzNDUtMTIzNS0yMzQKK3dvcmQgZGlnbml0w6kJCTE0NS0yMzU2LTIzNDUKK3dvcmQgZGlzY291cnMJCTI1Ni0xNAord29yZCBkaXNwb3NpdGlmCQkyNTYtMTIzNC0xMjQKK3dvcmQgZGlzcG9zaXRpZnMJMjU2LTEyMzQtMTI0LTIzNAord29yZCBkaXNwb3NpdGlvbgkyNTYtMTIzNAord29yZCBkaXNwb3NpdGlvbnMJMjU2LTEyMzQtMjM0Cit3b3JkIGRpc3RhbmNlCQkyNTYtMjM0NS0xNAord29yZCBkaXN0YW5jZXMJCTI1Ni0yMzQ1LTE0LTIzNAord29yZCBkaXN0YW50CQkyNTYtMjM0NQord29yZCBkaXN0YW50cwkJMjU2LTIzNDUtMjM0Cit3b3JkIGRpc3RhbnRlCQkyNTYtMjM0NS0xNQord29yZCBkaXN0YW50ZXMJCTI1Ni0yMzQ1LTE1Ngord29yZCBkb25jCQkxNDUtMTQKK3dvcmQgZG9udAkJMTQ1LTIzNDUKK3dvcmQgZG91bGV1cgkJMTQ1LTEyMword29yZCBkb3VsZXVycwkJMTQ1LTEyMy0yMzQKK3dvcmQgZG91bG91cmV1c2UJMTQ1LTEyMy0yMzQtMTUKK3dvcmQgZG91bG91cmV1c2VzCTE0NS0xMjMtMjM0LTE1Ngord29yZCBkb3Vsb3VyZXVzZW1lbnQJMTQ1LTEyMy0yMzQtMTM0Cit3b3JkIGRvdWxvdXJldXgJCTE0NS0xMjMtMTM0Ngord29yZCBkb3V0ZQkJMTQ1LTEyNTYKK3dvcmQgZG91dGVzCQkxNDUtMTI1Ni0yMzQKK3dvcmQgZHVxdWVsCQkxNDUtMTIzNDUtMTIzCisKK3dvcmQgZWZmZWN0aWYJCTE1LTEyNC0xMjQKK3dvcmQgZWZmZWN0aWZzCQkxNS0xMjQtMTI0LTIzNAord29yZCBlZmZlY3RpdmUJCTE1LTEyNC0xMjM2Cit3b3JkIGVmZmVjdGl2ZXMJCTE1LTEyNC0xMjM2LTIzNAord29yZCBlZmZlY3RpdmVtZW50CTE1LTEyNC0xMjM2LTEzNAord29yZCBlZmZldAkJMTUtMTI0Cit3b3JkIGVmZmV0cwkJMTUtMTI0LTIzNAord29yZCDDqWdhbAkJMTIzNDU2LTEyNDUKK3dvcmQgw6lnYWxlCQkxMjM0NTYtMTI0NS0xNQord29yZCDDqWdhbGVzCQkxMjM0NTYtMTI0NS0xNTYKK3dvcmQgw6lnYWxlbWVudAkJMTIzNDU2LTEyNDUtMTM0Cit3b3JkIMOpZ2FsaXRhaXJlCQkxMjM0NTYtMTI0NS0yMzQ1LTEyMzUKK3dvcmQgw6lnYWxpdGFpcmVzCTEyMzQ1Ni0xMjQ1LTIzNDUtMTIzNS0yMzQKK3dvcmQgw6lnYWxpdMOpCQkxMjM0NTYtMTI0NS0yMzQ1Cit3b3JkIMOpZ2FsaXTDqXMJCTEyMzQ1Ni0xMjQ1LTIzNDUtMjM0Cit3b3JkIMOpZ2F1eAkJMTIzNDU2LTEyNDUtMTM0Ngord29yZCDDqWzDqW1lbnQJCTEyMzQ1Ni0xMjMKK3dvcmQgw6lsw6ltZW50cwkJMTIzNDU2LTEyMy0yMzQKK3dvcmQgw6lsw6ltZW50YWlyZQkxMjM0NTYtMTIzLTEyMzUKK3dvcmQgw6lsw6ltZW50YWlyZXMJMTIzNDU2LTEyMy0xMjM1LTIzNAord29yZCBlbmNvcmUJCTI2LTE0Cit3b3JkIGVuZHJvaXQJCTI2LTE0NQord29yZCBlbmRyb2l0cwkJMjYtMTQ1LTIzNAord29yZCDDqW5lcmdpZQkJMTIzNDU2LTEzNDUKK3dvcmQgw6luZXJnaWVzCQkxMjM0NTYtMTM0NS0yMzQKK3dvcmQgw6luZXJnaXF1ZQkJMTIzNDU2LTEzNDUtMTIzNDUKK3dvcmQgw6luZXJnaXF1ZXMJCTEyMzQ1Ni0xMzQ1LTEyMzQ1LTIzNAord29yZCDDqW5lcmdpcXVlbWVudAkxMjM0NTYtMTM0NS0xMjM0NS0xMzQKK3dvcmQgZW5maW4JCTI2LTEyNAord29yZCBlbm51aQkJMjYtMTM0NQord29yZCBlbm51aXMJCTI2LTEzNDUtMjM0Cit3b3JkIGVubnV5ZXVzZQkJMjYtMTM0NS0yMzQtMTUKK3dvcmQgZW5udXlldXNlcwkJMjYtMTM0NS0yMzQtMTU2Cit3b3JkIGVubnV5ZXV4CQkyNi0xMzQ1LTEzNDYKK3dvcmQgZW5xdcOqdGUJCTI2LTEyMzQ1Cit3b3JkIGVucXXDqnRlcwkJMjYtMTIzNDUtMjM0Cit3b3JkIGVucXXDqnRldXIJCTI2LTEyMzQ1LTQ2Cit3b3JkIGVucXXDqnRldXJzCQkyNi0xMjM0NS00Ni0yMzQKK3dvcmQgZW5xdcOqdGV1c2UJCTI2LTEyMzQ1LTIzNC0xNQord29yZCBlbnF1w6p0ZXVzZXMJMjYtMTIzNDUtMjM0LTE1Ngord29yZCBlbnNlbWJsZQkJMjYtMzQ1Cit3b3JkIGVuc2VtYmxlcwkJMjYtMzQ1LTIzNAord29yZCBlbnN1aXRlCQkyNi0yMzQKK3dvcmQgZW50aWVyCQkyNi0yMzQ1Cit3b3JkIGVudGllcnMJCTI2LTIzNDUtMjM0Cit3b3JkIGVudGnDqHJlCQkyNi0xMjM1Cit3b3JkIGVudGnDqHJlcwkJMjYtMTIzNS0yMzQKK3dvcmQgZW50acOocmVtZW50CTI2LTEyMzUtMTM0Cit3b3JkIGVudmlyb24JCTI2LTEyMzYKK3dvcmQgZXNww6hjZQkJMTU2LTEyMzQKK3dvcmQgZXNww6hjZXMJCTE1Ni0xMjM0LTIzNAord29yZCBlc3DDqXJhbmNlCQkxNTYtMTIzNS0xNAord29yZCBlc3DDqXJhbmNlcwkJMTU2LTEyMzUtMTQtMjM0Cit3b3JkIGVzcG9pcgkJMTU2LTEyMzUKK3dvcmQgZXNwb2lycwkJMTU2LTEyMzUtMjM0Cit3b3JkIGVzcHJpdAkJMTUtMjM1Cit3b3JkIGVzcHJpdHMJCTE1LTIzNS0yMzQKK3dvcmQgZXNzZW50aWVsCQkxNTYtMTIzCit3b3JkIGVzc2VudGllbHMJCTE1Ni0xMjMtMjM0Cit3b3JkIGVzc2VudGllbGxlCTE1Ni0xMjMtMTIzCit3b3JkIGVzc2VudGllbGxlcwkxNTYtMTIzLTEyMy0yMzQKK3dvcmQgZXNzZW50aWVsbGVtZW50CTE1Ni0xMjMtMTM0Cit3b3JkIMOpdGFudAkJMTIzNDU2LTIzNDUKK3dvcmQgw6p0cmUJCTEyNi0zNTYKK3dvcmQgw6p0cmVzCQkxMjYtMzU2LTIzNAord29yZCDDqXbDqW5lbWVudAkJMTIzNDU2LTEyMzYKK3dvcmQgw6l2w6luZW1lbnRzCQkxMjM0NTYtMTIzNi0yMzQKK3dvcmQgw6l2ZW50dWFsaXTDqQkxMjM0NTYtMTIzNi0xMjMtMjM0NQord29yZCDDqXZlbnR1YWxpdMOpcwkxMjM0NTYtMTIzNi0xMjMtMjM0NS0yMzQKK3dvcmQgw6l2ZW50dWVsCQkxMjM0NTYtMTIzNi0xMjMKK3dvcmQgw6l2ZW50dWVscwkJMTIzNDU2LTEyMzYtMTIzLTIzNAord29yZCDDqXZlbnR1ZWxsZQkJMTIzNDU2LTEyMzYtMTIzLTEyMword29yZCDDqXZlbnR1ZWxsZXMJMTIzNDU2LTEyMzYtMTIzLTEyMy0yMzQKK3dvcmQgw6l2ZW50dWVsbGVtZW50CTEyMzQ1Ni0xMjM2LTEyMy0xMzQKK3dvcmQgZXhjZWxsZW1tZW50CTEzNDYtMTIzLTEzNAord29yZCBleGNlbGxlbmNlCQkxMzQ2LTEyMy0xNAord29yZCBleGNlbGxlbmNlcwkxMzQ2LTEyMy0xNC0yMzQKK3dvcmQgZXhjZWxsZW50CQkxMzQ2LTEyMword29yZCBleGNlbGxlbnRzCQkxMzQ2LTEyMy0yMzQKK3dvcmQgZXhjZWxsZW50ZQkJMTM0Ni0xMjMtMTUKK3dvcmQgZXhjZWxsZW50ZXMJMTM0Ni0xMjMtMTU2Cit3b3JkIGV4Y8OocwkJMTM0Ni0xNAord29yZCBleGNlc3NpZgkJMTM0Ni0xNC0xMjQKK3dvcmQgZXhjZXNzaWZzCQkxMzQ2LTE0LTEyNC0yMzQKK3dvcmQgZXhjZXNzaXZlCQkxMzQ2LTE0LTEyMzYKK3dvcmQgZXhjZXNzaXZlcwkJMTM0Ni0xNC0xMjM2LTIzNAord29yZCBleGNlc3NpdmVtZW50CTEzNDYtMTQtMTIzNi0xMzQKK3dvcmQgZXhlcmNpY2UJCTEzNDYtMjM2Cit3b3JkIGV4ZXJjaWNlcwkJMTM0Ni0yMzYtMjM0Cit3b3JkIGV4cMOpcmllbmNlCQkxMzQ2LTEyMzQKK3dvcmQgZXhww6lyaWVuY2VzCTEzNDYtMTIzNC0yMzQKK3dvcmQgZXhww6lyaW1lbnRhbAkxMzQ2LTEyMzQtMTIzCit3b3JkIGV4cMOpcmltZW50YWxlCTEzNDYtMTIzNC0xMjMtMTUKK3dvcmQgZXhww6lyaW1lbnRhbGVzCTEzNDYtMTIzNC0xMjMtMTU2Cit3b3JkIGV4cMOpcmltZW50YWxsZW1lbnQJMTM0Ni0xMjM0LTEyMy0xMzQKK3dvcmQgZXhww6lyaW1lbnRhdGV1cgkxMzQ2LTEyMzQtNDYKK3dvcmQgZXhww6lyaW1lbnRhdGV1cnMJMTM0Ni0xMjM0LTQ2LTIzNAord29yZCBleHDDqXJpbWVudGF0aW9uCTEzNDYtMTIzNC0xNgord29yZCBleHDDqXJpbWVudGF0aW9ucwkxMzQ2LTEyMzQtMTYtMjM0Cit3b3JkIGV4cMOpcmltZW50YXV4CTEzNDYtMTIzNC0xMzQ2Cit3b3JkIGV4cGxpY2FibGUJCTEzNDYtMTI0Ni00NQord29yZCBleHBsaWNhYmxlcwkxMzQ2LTEyNDYtNDUtMjM0Cit3b3JkIGV4cGxpY2F0aWYJCTEzNDYtMTI0Ni0xMjQKK3dvcmQgZXhwbGljYXRpZnMJMTM0Ni0xMjQ2LTEyNC0yMzQKK3dvcmQgZXhwbGljYXRpb24JMTM0Ni0xMjQ2Cit3b3JkIGV4cGxpY2F0aW9ucwkxMzQ2LTEyNDYtMjM0Cit3b3JkIGV4cGxpY2F0aXZlCTEzNDYtMTI0Ni0xMjM2Cit3b3JkIGV4cGxpY2F0aXZlcwkxMzQ2LTEyNDYtMTIzNi0yMzQKK3dvcmQgZXhwcmVzc2lmCQkxMzQ2LTIzNS0xMjQKK3dvcmQgZXhwcmVzc2lmcwkJMTM0Ni0yMzUtMTI0LTIzNAord29yZCBleHByZXNzaW9uCQkxMzQ2LTIzNQord29yZCBleHByZXNzaW9ucwkxMzQ2LTIzNS0yMzQKK3dvcmQgZXhwcmVzc2l2ZQkJMTM0Ni0yMzUtMTIzNgord29yZCBleHByZXNzaXZlcwkxMzQ2LTIzNS0xMjM2LTIzNAord29yZCBleHByZXNzaXZlbWVudAkxMzQ2LTIzNS0xMjM2LTEzNAord29yZCBleHTDqXJpZXVyCQkxMzQ2LTIzNDUKK3dvcmQgZXh0w6lyaWV1cnMJCTEzNDYtMjM0NS0yMzQKK3dvcmQgZXh0w6lyaWV1cmUJCTEzNDYtMjM0NS0xNQord29yZCBleHTDqXJpZXVyZXMJMTM0Ni0yMzQ1LTE1Ngord29yZCBleHTDqXJpZXVyZW1lbnQJMTM0Ni0yMzQ1LTEzNAord29yZCBleHRyw6ptZQkJMTM0Ni0zNTYKK3dvcmQgZXh0csOqbWVzCQkxMzQ2LTM1Ni0yMzQKK3dvcmQgZXh0csOqbWVtZW50CTEzNDYtMzU2LTEzNAord29yZCBleHRyw6ltaXTDqQkJMTM0Ni0zNTYtMjM0NQord29yZCBleHRyw6ltaXTDqXMJCTEzNDYtMzU2LTIzNDUtMjM0CisKK3dvcmQgZmFjaWxlCQkxMjQtMTQKK3dvcmQgZmFjaWxlcwkJMTI0LTE0LTIzNAord29yZCBmYWNpbGVtZW50CQkxMjQtMTQtMTM0Cit3b3JkIGZhY2lsaXTDqQkJMTI0LTE0LTIzNDUKK3dvcmQgZmFjaWxpdMOpcwkJMTI0LTE0LTIzNDUtMjM0Cit3b3JkIGZhdWJvdXJnCQkxMjQtMTIKK3dvcmQgZmF1Ym91cmdzCQkxMjQtMTItMjM0Cit3b3JkIGZhdXQJCTEyNC0yMzQ1Cit3b3JkIGZhdXRlCQkxMjQtMjM0NS0xNQord29yZCBmYXV0ZXMJCTEyNC0yMzQ1LTE1LTIzNAord29yZCBmYXV0aWYJCTEyNC0yMzQ1LTEyNAord29yZCBmYXV0aWZzCQkxMjQtMjM0NS0xMjQtMjM0Cit3b3JkIGZhdXRpdmUJCTEyNC0yMzQ1LTEyMzYKK3dvcmQgZmF1dGl2ZXMJCTEyNC0yMzQ1LTEyMzYtMjM0Cit3b3JkIGZhdmV1cgkJMTI0LTEyMzYKK3dvcmQgZmF2ZXVycwkJMTI0LTEyMzYtMjM0Cit3b3JkIGZhdm9yYWJsZQkJMTI0LTEyMzYtNDUKK3dvcmQgZmF2b3JhYmxlcwkJMTI0LTEyMzYtNDUtMjM0Cit3b3JkIGZhdm9yYWJsZW1lbnQJMTI0LTEyMzYtNDUtMTM0Cit3b3JkIGbDqW1pbmluCQkxMjQtMTM0LTM1Cit3b3JkIGbDqW1pbmlucwkJMTI0LTEzNC0zNS0yMzQKK3dvcmQgZsOpbWluaW5lCQkxMjQtMTM0LTEzNDUKK3dvcmQgZsOpbWluaW5lcwkJMTI0LTEzNC0xMzQ1LTIzNAord29yZCBmZW1tZQkJMTI0LTEzNAord29yZCBmZW1tZXMJCTEyNC0xMzQtMjM0Cit3b3JkIGbDqnRlCQkxMjQtMTI2Cit3b3JkIGbDqnRlcwkJMTI0LTEyNi0yMzQKK3dvcmQgZmlkw6hsZQkJMTI0LTE0NQord29yZCBmaWTDqGxlcwkJMTI0LTE0NS0yMzQKK3dvcmQgZmlkw6hsZW1lbnQJCTEyNC0xNDUtMTM0Cit3b3JkIGZpZMOpbGl0w6kJCTEyNC0xNDUtMjM0NQord29yZCBmaWTDqWxpdMOpcwkJMTI0LTE0NS0yMzQ1LTIzNAord29yZCBmaWd1cmF0aWYJCTEyNC0xMjQ1LTEyNAord29yZCBmaWd1cmF0aWZzCQkxMjQtMTI0NS0xMjQtMjM0Cit3b3JkIGZpZ3VyYXRpb24JCTEyNC0xMjQ1LTE2Cit3b3JkIGZpZ3VyYXRpb25zCTEyNC0xMjQ1LTE2LTIzNAord29yZCBmaWd1cmF0aXZlCQkxMjQtMTI0NS0xMjM2Cit3b3JkIGZpZ3VyYXRpdmVzCTEyNC0xMjQ1LTEyMzYtMjM0Cit3b3JkIGZpZ3VyZQkJMTI0LTEyNDUKK3dvcmQgZmlndXJlcwkJMTI0LTEyNDUtMjM0Cit3b3JkIGZpbGxlCQkxMjQtMTIzCit3b3JkIGZpbGxlcwkJMTI0LTEyMy0yMzQKK3dvcmQgZmlscwkJMTI0LTIzNAord29yZCBmb25jdGlvbgkJMTI0LTM0Ngord29yZCBmb25jdGlvbnMJCTEyNC0zNDYtMjM0Cit3b3JkIGZvbmN0aW9ubmFpcmUJMTI0LTM0Ni0xMjM1Cit3b3JkIGZvbmN0aW9ubmFpcmVzCTEyNC0zNDYtMTIzNS0yMzQKK3dvcmQgZm9uY3Rpb25uZWwJMTI0LTM0Ni0xMjMKK3dvcmQgZm9uY3Rpb25uZWxzCTEyNC0zNDYtMTIzLTIzNAord29yZCBmb25jdGlvbm5lbGxlCTEyNC0zNDYtMTIzLTEyMword29yZCBmb25jdGlvbm5lbGxlcwkxMjQtMzQ2LTEyMy0xMjMtMjM0Cit3b3JkIGZvbmN0aW9ubmVtZW50CTEyNC0zNDYtMTM0Cit3b3JkIGZvbmN0aW9ubmVtZW50cwkxMjQtMzQ2LTEzNC0yMzQKK3dvcmQgZm9yY2UJCTEyNC0xMzUKK3dvcmQgZm9yY2VzCQkxMjQtMTM1LTIzNAord29yZCBmb3Jjw6ltZW50CQkxMjQtMTM1LTEzNAord29yZCBmb3J0dW5lCQkxMjQtMTM0NQord29yZCBmb3J0dW5lcwkJMTI0LTEzNDUtMjM0Cit3b3JkIGZyYXRlcm5lbAkJMTI0LTEyMzUtMTIzCit3b3JkIGZyYXRlcm5lbHMJCTEyNC0xMjM1LTEyMy0yMzQKK3dvcmQgZnJhdGVybmVsbGUJMTI0LTEyMzUtMTIzLTEyMword29yZCBmcmF0ZXJuZWxsZXMJMTI0LTEyMzUtMTIzLTEyMy0yMzQKK3dvcmQgZnJhdGVybmVsbGVtZW50CTEyNC0xMjM1LTEyMy0xMzQKK3dvcmQgZnJhdGVybmlzYXRpb24JMTI0LTEyMzUtMTYKK3dvcmQgZnJhdGVybmlzYXRpb25zCTEyNC0xMjM1LTE2LTIzNAord29yZCBmcmF0ZXJuaXTDqQkJMTI0LTEyMzUtMjM0NQord29yZCBmcmF0ZXJuaXTDqXMJMTI0LTEyMzUtMjM0NS0yMzQKK3dvcmQgZnLDqXF1ZW1tZW50CTEyNC0xMjM0NS0xMzQKK3dvcmQgZnLDqXF1ZW5jZQkJMTI0LTEyMzQ1LTE0Cit3b3JkIGZyw6lxdWVuY2VzCQkxMjQtMTIzNDUtMTQtMjM0Cit3b3JkIGZyw6lxdWVudAkJMTI0LTEyMzQ1Cit3b3JkIGZyw6lxdWVudHMJCTEyNC0xMjM0NS0yMzQKK3dvcmQgZnLDqXF1ZW50ZQkJMTI0LTEyMzQ1LTE1Cit3b3JkIGZyw6lxdWVudGVzCQkxMjQtMTIzNDUtMTU2Cit3b3JkIGZyw6lxdWVudGF0aW9uCTEyNC0xMjM0NS0xNgord29yZCBmcsOpcXVlbnRhdGlvbnMJMTI0LTEyMzQ1LTE2LTIzNAord29yZCBmcsOocmUJCTEyNC0xMjM1Cit3b3JkIGZyw6hyZXMJCTEyNC0xMjM1LTIzNAorCit3b3JkIGdhcmRlCQkxMjQ1LTE0NQord29yZCBnYXJkZXMJCTEyNDUtMTQ1LTIzNAord29yZCBnw6luw6lyYWwJCTEyNDUtMTM0NQord29yZCBnw6luw6lyYWxlCQkxMjQ1LTEzNDUtMTUKK3dvcmQgZ8OpbsOpcmFsZXMJCTEyNDUtMTM0NS0xNTYKK3dvcmQgZ8OpbsOpcmFsZW1lbnQJMTI0NS0xMzQ1LTEzNAord29yZCBnw6luw6lyYWxpc2F0aW9uCTEyNDUtMTM0NS0xNgord29yZCBnw6luw6lyYWxpc2F0aW9ucwkxMjQ1LTEzNDUtMTYtMjM0Cit3b3JkIGfDqW7DqXJhbGl0w6kJCTEyNDUtMTM0NS0yMzQ1Cit3b3JkIGfDqW7DqXJhbGl0w6lzCTEyNDUtMTM0NS0yMzQ1LTIzNAord29yZCBnw6luw6lyYXV4CQkxMjQ1LTEzNDUtMTM0Ngord29yZCBnw6luw6lyZXVzZQkJMTI0NS0yMzQtMTUKK3dvcmQgZ8OpbsOpcmV1c2VzCQkxMjQ1LTIzNC0xNTYKK3dvcmQgZ8OpbsOpcmV1c2VtZW50CTEyNDUtMjM0LTEzNAord29yZCBnw6luw6lyZXV4CQkxMjQ1LTEzNDYKK3dvcmQgZ8OpbsOpcm9zaXTDqQkJMTI0NS0yMzQtMjM0NQord29yZCBnw6luw6lyb3NpdMOpcwkxMjQ1LTIzNC0yMzQ1LTIzNAord29yZCBnbG9pcmUJCTEyNDUtMTIzNQord29yZCBnbG9pcmVzCQkxMjQ1LTEyMzUtMjM0Cit3b3JkIGdsb3JpZXVzZQkJMTI0NS0xMjM1LTIzNC0xNQord29yZCBnbG9yaWV1c2VzCQkxMjQ1LTEyMzUtMjM0LTE1Ngord29yZCBnbG9yaWV1c2VtZW50CTEyNDUtMTIzNS0yMzQtMTM0Cit3b3JkIGdsb3JpZXV4CQkxMjQ1LTEyMzUtMTM0Ngord29yZCBnb3V2ZXJuZW1lbnQJMTI0NS0xMjM2Cit3b3JkIGdvdXZlcm5lbWVudHMJMTI0NS0xMjM2LTIzNAord29yZCBnb3V2ZXJuZW1lbnRhbAkxMjQ1LTEyMzYtMTIzCit3b3JkIGdvdXZlcm5lbWVudGFsZQkxMjQ1LTEyMzYtMTIzLTE1Cit3b3JkIGdvdXZlcm5lbWVudGFsZXMJMTI0NS0xMjM2LTEyMy0xNTYKK3dvcmQgZ291dmVybmVtZW50YXV4CTEyNDUtMTIzNi0xMzQ2Cit3b3JkIGdvdXZlcm5ldXIJCTEyNDUtMTIzNi00Ngord29yZCBnb3V2ZXJuZXVycwkxMjQ1LTEyMzYtNDYtMjM0Cit3b3JkIGdyw6JjZQkJMTI0NTYtMTQKK3dvcmQgZ3LDomNlcwkJMTI0NTYtMTQtMjM0Cit3b3JkIGdyYWNpZXVzZQkJMTI0NTYtMTQtMjM0LTE1Cit3b3JkIGdyYWNpZXVzZXMJCTEyNDU2LTE0LTIzNC0xNTYKK3dvcmQgZ3JhY2lldXNlbWVudAkxMjQ1Ni0xNC0yMzQtMTM0Cit3b3JkIGdyYWNpZXV4CQkxMjQ1Ni0xNC0xMzQ2Cit3b3JkIGdyYW5kZQkJMTI0NTYtMTQ1Cit3b3JkIGdyYW5kZXMJCTEyNDU2LTE0NS0yMzQKK3dvcmQgZ3JhbmRlbWVudAkJMTI0NTYtMTQ1LTEzNAord29yZCBncmFuZGV1cgkJMTI0NTYtNDYKK3dvcmQgZ3JhbmRldXJzCQkxMjQ1Ni00Ni0yMzQKK3dvcmQgZ3JhdmUJCTEyNDU2LTEyMzYKK3dvcmQgZ3JhdmVzCQkxMjQ1Ni0xMjM2LTIzNAord29yZCBncmF2ZW1lbnQJCTEyNDU2LTEyMzYtMTM0Cit3b3JkIGdyYXZpdGF0aW9uCTEyNDU2LTEyMzYtMjM0NS0xNgord29yZCBncmF2aXRhdGlvbnMJMTI0NTYtMTIzNi0yMzQ1LTE2LTIzNAord29yZCBncmF2aXTDqQkJMTI0NTYtMTIzNi0yMzQ1Cit3b3JkIGdyYXZpdMOpcwkJMTI0NTYtMTIzNi0yMzQ1LTIzNAord29yZCBncm91cGUJCTEyNDU2LTEyMzQKK3dvcmQgZ3JvdXBlcwkJMTI0NTYtMTIzNC0yMzQKK3dvcmQgZ3JvdXBlbWVudAkJMTI0NTYtMTIzNC0xMzQKK3dvcmQgZ3JvdXBlbWVudHMJMTI0NTYtMTIzNC0xMzQtMjM0Cit3b3JkIGd1w6hyZQkJMTI0NS0yMzQ2Cit3b3JkIGd1ZXJyZQkJMTI0NS0yMzYKK3dvcmQgZ3VlcnJlcwkJMTI0NS0yMzYtMjM0CisKK3dvcmQgaGFiaXR1ZGUJCTEyNS0xMgord29yZCBoYWJpdHVkZXMJCTEyNS0xMi0yMzQKK3dvcmQgaGFiaXR1ZWwJCTEyNS0xMi0xMjMKK3dvcmQgaGFiaXR1ZWxzCQkxMjUtMTItMTIzLTIzNAord29yZCBoYWJpdHVlbGxlCQkxMjUtMTItMTIzLTEyMword29yZCBoYWJpdHVlbGxlcwkxMjUtMTItMTIzLTEyMy0yMzQKK3dvcmQgaGFiaXR1ZWxsZW1lbnQJMTI1LTEyLTEyMy0xMzQKK3dvcmQgaGFzYXJkCQkxMjUtMTQ1Cit3b3JkIGhhc2FyZHMJCTEyNS0xNDUtMjM0Cit3b3JkIGhhc2FyZGV1c2UJCTEyNS0xNDUtMjM0LTE1Cit3b3JkIGhhc2FyZGV1c2VzCTEyNS0xNDUtMjM0LTE1Ngord29yZCBoYXNhcmRldXgJCTEyNS0xNDUtMTM0Ngord29yZCBow6lsYXMJCTEyNS0xMjMKK3dvcmQgaGV1cmUJCTEyNS0xMjM1Cit3b3JkIGhldXJlcwkJMTI1LTEyMzUtMjM0Cit3b3JkIGhldXJldXNlCQkxMjUtMjM0LTE1Cit3b3JkIGhldXJldXNlcwkJMTI1LTIzNC0xNTYKK3dvcmQgaGV1cmV1c2VtZW50CTEyNS0yMzQtMTM0Cit3b3JkIGhldXJldXgJCTEyNS0xMzQ2Cit3b3JkIGhpZXIJCTEyNS0yMzYKK3dvcmQgaGlzdG9pcmUJCTEyNS0yMzQ1Cit3b3JkIGhpc3RvaXJlcwkJMTI1LTIzNDUtMjM0Cit3b3JkIGhpc3RvcmlxdWUJCTEyNS0yMzQ1LTEyMzQ1Cit3b3JkIGhpc3RvcmlxdWVzCTEyNS0yMzQ1LTEyMzQ1LTIzNAord29yZCBoaXN0b3JpcXVlbWVudAkxMjUtMjM0NS0xMjM0NS0xMzQKK3dvcmQgaGl2ZXIJCTEyNS0xMjM2Cit3b3JkIGhpdmVycwkJMTI1LTEyMzYtMjM0Cit3b3JkIGhpdmVybmFsCQkxMjUtMTIzNi0xMjMKK3dvcmQgaGl2ZXJuYXV4CQkxMjUtMTIzNi0xMzQ2Cit3b3JkIGhvbW1hZ2UJCTEyNS0xMjQ1Cit3b3JkIGhvbW1hZ2VzCQkxMjUtMTI0NS0yMzQKK3dvcmQgaG9tbWUJCTEyNS0xMzQKK3dvcmQgaG9tbWVzCQkxMjUtMTM0LTIzNAord29yZCBob25uw6p0ZQkJMTI1LTEyNgord29yZCBob25uw6p0ZXMJCTEyNS0xMjYtMjM0Cit3b3JkIGhvbm7DqnRlbWVudAkxMjUtMTI2LTEzNAord29yZCBob25uw6p0ZXTDqQkJMTI1LTEyNi0yMzQ1Cit3b3JkIGhvbm7DqnRldMOpcwkJMTI1LTEyNi0yMzQ1LTIzNAord29yZCBob25uZXVyCQkxMjUtMTM0NQord29yZCBob25uZXVycwkJMTI1LTEzNDUtMjM0Cit3b3JkIGhvbm9yYWJpbGl0w6kJMTI1LTEzNDUtMTItMTIzLTIzNDUKK3dvcmQgaG9ub3JhYmlsaXTDqXMJMTI1LTEzNDUtMTItMTIzLTIzNDUtMjM0Cit3b3JkIGhvbm9yYWJsZQkJMTI1LTEzNDUtNDUKK3dvcmQgaG9ub3JhYmxlcwkJMTI1LTEzNDUtNDUtMjM0Cit3b3JkIGhvbm9yYWJsZW1lbnQJMTI1LTEzNDUtNDUtMTM0Cit3b3JkIGhvbm9yYWlyZQkJMTI1LTEzNDUtMTIzNQord29yZCBob25vcmFpcmVzCQkxMjUtMTM0NS0xMjM1LTIzNAord29yZCBob3JhaXJlCQkxMjUtMTIzNS0xMjM1Cit3b3JkIGhvcmFpcmVzCQkxMjUtMTIzNS0xMjM1LTIzNAord29yZCBob3Jpem9uCQkxMjUtMTM1Ngord29yZCBob3Jpem9ucwkJMTI1LTEzNTYtMjM0Cit3b3JkIGhvcml6b250YWwJCTEyNS0xMzU2LTEyMword29yZCBob3Jpem9udGFsZQkxMjUtMTM1Ni0xMjMtMTUKK3dvcmQgaG9yaXpvbnRhbGVzCTEyNS0xMzU2LTEyMy0xNTYKK3dvcmQgaG9yaXpvbnRhbGVtZW50CTEyNS0xMzU2LTEyMy0xMzQKK3dvcmQgaG9yaXpvbnRhbGl0w6kJMTI1LTEzNTYtMTIzLTIzNDUKK3dvcmQgaG9yaXpvbnRhbGl0w6lzCTEyNS0xMzU2LTEyMy0yMzQ1LTIzNAord29yZCBob3Jpem9udGF1eAkxMjUtMTM1Ni0xMzQ2Cit3b3JkIGh5cG90aMOoc2UJCTEyNS0xMjM0Cit3b3JkIGh5cG90aMOoc2VzCQkxMjUtMTIzNC0yMzQKK3dvcmQgaHlwb3Row6l0aXF1ZQkxMjUtMTIzNC0xMjM0NQord29yZCBoeXBvdGjDqXRpcXVlcwkxMjUtMTIzNC0xMjM0NS0yMzQKK3dvcmQgaHlwb3Row6l0aXF1ZW1lbnQJMTI1LTEyMzQtMTIzNDUtMTM0Cit3b3JkIGh1bWFpbgkJMTI1LTEzNC0zNQord29yZCBodW1haW5zCQkxMjUtMTM0LTM1LTIzNAord29yZCBodW1haW5lCQkxMjUtMTM0LTEzNDUKK3dvcmQgaHVtYWluZXMJCTEyNS0xMzQtMTM0NS0yMzQKK3dvcmQgaHVtYWluZW1lbnQJMTI1LTEzNC0xMzQ1LTEzNAord29yZCBodW1hbml0YWlyZQkxMjUtMTM0LTEzNDUtMjM0NS0xMjM1Cit3b3JkIGh1bWFuaXRhaXJlcwkxMjUtMTM0LTEzNDUtMjM0NS0xMjM1LTIzNAord29yZCBodW1hbml0w6kJCTEyNS0xMzQtMTM0NS0yMzQ1Cit3b3JkIGh1bWFuaXTDqXMJCTEyNS0xMzQtMTM0NS0yMzQ1LTIzNAorCit3b3JkIGlkw6lhbAkJMjQtMTQ1LTEyMword29yZCBpZMOpYWxlCQkyNC0xNDUtMTIzLTE1Cit3b3JkIGlkw6lhbGVzCQkyNC0xNDUtMTIzLTE1Ngord29yZCBpZMOpYWxlbWVudAkJMjQtMTQ1LTEyMy0xMzQKK3dvcmQgaWTDqWF1eAkJMjQtMTQ1LTEzNDYKK3dvcmQgaWTDqWUJCTI0LTE0NQord29yZCBpZMOpZXMJCTI0LTE0NS0yMzQKK3dvcmQgaW1hZ2UJCTI0LTEyNDUKK3dvcmQgaW1hZ2VzCQkyNC0xMjQ1LTIzNAord29yZCBpbWFnaW5hYmxlCQkyNC0xMjQ1LTQ1Cit3b3JkIGltYWdpbmFibGVzCTI0LTEyNDUtNDUtMjM0Cit3b3JkIGltYWdpbmFpcmUJCTI0LTEyNDUtMTIzNQord29yZCBpbWFnaW5haXJlcwkyNC0xMjQ1LTEyMzUtMjM0Cit3b3JkIGltYWdpbmF0aW9uCTI0LTEyNDUtMTYKK3dvcmQgaW1tw6lkaWF0CQkyNC0xMzQKK3dvcmQgaW1tw6lkaWF0cwkJMjQtMTM0LTIzNAord29yZCBpbW3DqWRpYXRlCQkyNC0xMzQtMTUKK3dvcmQgaW1tw6lkaWF0ZXMJCTI0LTEzNC0xNTYKK3dvcmQgaW1tw6lkaWF0ZW1lbnQJMjQtMTM0LTEzNAord29yZCBpbXByZXNzaW9uCQkyNDYtMjM1Cit3b3JkIGltcHJlc3Npb25zCTI0Ni0yMzUtMjM0Cit3b3JkIGltcHJlc3Npb25uYWJsZQkyNDYtMjM1LTQ1Cit3b3JkIGltcHJlc3Npb25uYWJsZXMJMjQ2LTIzNS00NS0yMzQKK3dvcmQgaW5mw6lyaWV1cgkJMzUtMTI0Cit3b3JkIGluZsOpcmlldXJzCQkzNS0xMjQtMjM0Cit3b3JkIGluZsOpcmlldXJlCQkzNS0xMjQtMTUKK3dvcmQgaW5mw6lyaWV1cmVzCTM1LTEyNC0xNTYKK3dvcmQgaW5mw6lyaWV1cmVtZW50CTM1LTEyNC0xMzQKK3dvcmQgaW5mw6lyaW9yaXTDqQkzNS0xMjQtMjM0NQord29yZCBpbmbDqXJpb3JpdMOpcwkzNS0xMjQtMjM0NS0yMzQKK3dvcmQgaW5xdWlldAkJMzUtMTIzNDUKK3dvcmQgaW5xdWlldHMJCTM1LTEyMzQ1LTIzNAord29yZCBpbnF1acOodGUJCTM1LTIzNDYKK3dvcmQgaW5xdWnDqHRlcwkJMzUtMjM0Ni0yMzQKK3dvcmQgaW5xdWnDqXR1ZGUJCTM1LTEyMzQ1LTE0NQord29yZCBpbnF1acOpdHVkZXMJMzUtMTIzNDUtMTQ1LTIzNAord29yZCBpbnRlbGxpZ2VtbWVudAkzNS0xMjQ1LTEzNAord29yZCBpbnRlbGxpZ2VuY2UJMzUtMTI0NS0xNAord29yZCBpbnRlbGxpZ2VudAkzNS0xMjQ1Cit3b3JkIGludGVsbGlnZW50cwkzNS0xMjQ1LTIzNAord29yZCBpbnRlbGxpZ2VudGUJMzUtMTI0NS0xNQord29yZCBpbnRlbGxpZ2VudGVzCTM1LTEyNDUtMTU2Cit3b3JkIGludMOpcmlldXIJCTM1LTIzNDUKK3dvcmQgaW50w6lyaWV1cnMJCTM1LTIzNDUtMjM0Cit3b3JkIGludMOpcmlldXJlCQkzNS0yMzQ1LTE1Cit3b3JkIGludMOpcmlldXJlcwkzNS0yMzQ1LTE1Ngord29yZCBpbnTDqXJpZXVyZW1lbnQJMzUtMjM0NS0xMzQKKword29yZCBqYWRpcwkJMjQ1LTE0NQord29yZCBqYW1haXMJCTI0NS0xMzQKK3dvcmQgamV1bmUJCTI0NS0xMzQ1Cit3b3JkIGpldW5lcwkJMjQ1LTEzNDUtMjM0Cit3b3JkIGpvdXIJCTI0NS0xMjM1Cit3b3JkIGpvdXJzCQkyNDUtMTIzNS0yMzQKK3dvcmQgam91cm5hbAkJMjQ1LTEyMzUtMTIzCit3b3JkIGpvdXJuYXV4CQkyNDUtMTIzNS0xMzQ2Cit3b3JkIGpveWV1c2UJCTI0NS0yMzQtMTUKK3dvcmQgam95ZXVzZXMJCTI0NS0yMzQtMTU2Cit3b3JkIGpveWV1c2VtZW50CTI0NS0yMzQtMTM0Cit3b3JkIGpveWV1eAkJMjQ1LTEzNDYKK3dvcmQganVnZQkJMjQ1LTEyNDUKK3dvcmQganVnZXMJCTI0NS0xMjQ1LTIzNAord29yZCBqdWdlbWVudAkJMjQ1LTEyNDUtMTM0Cit3b3JkIGp1Z2VtZW50cwkJMjQ1LTEyNDUtMTM0LTIzNAord29yZCBqdXNxdWUJCTI0NS0xMjM0NQord29yZCBqdXN0ZQkJMjQ1LTIzNDUKK3dvcmQganVzdGVzCQkyNDUtMjM0NS0yMzQKK3dvcmQganVzdGVtZW50CQkyNDUtMjM0NS0xMzQKK3dvcmQganVzdGljZQkJMjQ1LTE0CisKK3dvcmQgbGFxdWVsbGUJCTEyMy0xMjMtMTIzCit3b3JkIGxlY3R1cmUJCTEyMy0xMjM1Cit3b3JkIGxlY3R1cmVzCQkxMjMtMTIzNS0yMzQKK3dvcmQgbGVxdWVsCQkxMjMtMTIzCit3b3JkIGxlc3F1ZWxsZXMJCTEyMy0xMjMtMTIzLTIzNAord29yZCBsZXNxdWVscwkJMTIzLTEyMy0yMzQKK3dvcmQgbGV0dHJlCQkxMjMtMzU2Cit3b3JkIGxldHRyZXMJCTEyMy0zNTYtMjM0Cit3b3JkIGxpYsOpcmFsCQkxMjMtMTItMTIzCit3b3JkIGxpYsOpcmFsZQkJMTIzLTEyLTEyMy0xNQord29yZCBsaWLDqXJhbGVzCQkxMjMtMTItMTIzLTE1Ngord29yZCBsaWLDqXJhbGVtZW50CTEyMy0xMi0xMjMtMTM0Cit3b3JkIGxpYsOpcmFsaXTDqQkJMTIzLTEyLTEyMy0yMzQ1Cit3b3JkIGxpYsOpcmFsaXTDqXMJMTIzLTEyLTEyMy0yMzQ1LTIzNAord29yZCBsaWLDqXJhdGV1cgkJMTIzLTEyLTQ2Cit3b3JkIGxpYsOpcmF0ZXVycwkxMjMtMTItNDYtMjM0Cit3b3JkIGxpYsOpcmF0aW9uCQkxMjMtMTItMTYKK3dvcmQgbGliw6lyYXRpb25zCTEyMy0xMi0xNi0yMzQKK3dvcmQgbGliw6lyYXV4CQkxMjMtMTItMTM0Ngord29yZCBsaWJlcnTDqQkJMTIzLTEyLTIzNDUKK3dvcmQgbGliZXJ0w6lzCQkxMjMtMTItMjM0NS0yMzQKK3dvcmQgbGlicmUJCTEyMy0xMgord29yZCBsaWJyZXMJCTEyMy0xMi0yMzQKK3dvcmQgbGlicmVtZW50CQkxMjMtMTItMTM0Cit3b3JkIGxpZ25lCQkxMjMtMjM1Ngord29yZCBsaWduZXMJCTEyMy0yMzU2LTIzNAord29yZCBsaXZyZQkJMTIzLTEyMzYKK3dvcmQgbGl2cmVzCQkxMjMtMTIzNi0yMzQKK3dvcmQgbG9naXF1ZQkJMTIzLTEyNDUtMTIzNDUKK3dvcmQgbG9naXF1ZXMJCTEyMy0xMjQ1LTEyMzQ1LTIzNAord29yZCBsb2dpcXVlbWVudAkxMjMtMTI0NS0xMjM0NS0xMzQKK3dvcmQgbG9pbgkJMTIzLTEzNDUKK3dvcmQgbG9pbnMJCTEyMy0xMzQ1LTIzNAord29yZCBsb2ludGFpbgkJMTIzLTEzNDUtMzUKK3dvcmQgbG9pbnRhaW5zCQkxMjMtMTM0NS0zNS0yMzQKK3dvcmQgbG9pbnRhaW5lCQkxMjMtMTM0NS0xMzQ1Cit3b3JkIGxvaW50YWluZXMJCTEyMy0xMzQ1LTEzNDUtMjM0Cit3b3JkIGxvbmd0ZW1wcwkJMTIzLTIzNDUKK3dvcmQgbG9yc3F1ZQkJMTIzLTEyMzQ1Cit3b3JkIGxvdXJkCQkxMjMtMTQ1Cit3b3JkIGxvdXJkcwkJMTIzLTE0NS0yMzQKK3dvcmQgbG91cmRlCQkxMjMtMTQ1LTE1Cit3b3JkIGxvdXJkZXMJCTEyMy0xNDUtMTU2Cit3b3JkIGxvdXJkZW1lbnQJCTEyMy0xNDUtMTM0Cit3b3JkIGxvdXJkZXVyCQkxMjMtMTQ1LTQ2Cit3b3JkIGxvdXJkZXVycwkJMTIzLTE0NS00Ni0yMzQKK3dvcmQgbHVtacOocmUJCTEyMy0xMzQKK3dvcmQgbHVtacOocmVzCQkxMjMtMTM0LTIzNAord29yZCBsdW1pbmV1c2UJCTEyMy0xMzQtMjM0LTE1Cit3b3JkIGx1bWluZXVzZXMJCTEyMy0xMzQtMjM0LTE1Ngord29yZCBsdW1pbmV1c2VtZW50CTEyMy0xMzQtMjM0LTEzNAord29yZCBsdW1pbmV1eAkJMTIzLTEzNC0xMzQ2Cit3b3JkIGx1bWlub3NpdMOpCQkxMjMtMTM0LTIzNC0yMzQ1Cit3b3JkIGx1bWlub3NpdMOpcwkxMjMtMTM0LTIzNC0yMzQ1LTIzNAorCit3b3JkIG1hZGFtZQkJMTM0LTE0NQord29yZCBtYWRlbW9pc2VsbGUJMTM0LTEzNAord29yZCBtYWduaWZpY2VuY2UJMTM0LTIzNTYtMTQKK3dvcmQgbWFnbmlmaWNlbmNlcwkxMzQtMjM1Ni0xNC0yMzQKK3dvcmQgbWFnbmlmaXF1ZQkJMTM0LTIzNTYKK3dvcmQgbWFnbmlmaXF1ZXMJMTM0LTIzNTYtMjM0Cit3b3JkIG1hZ25pZmlxdWVtZW50CTEzNC0yMzU2LTEzNAord29yZCBtYWludGVuYW50CQkxMzQtMjM0NQord29yZCBtYWxncsOpCQkxMzQtMTI0NTYKK3dvcmQgbWFsaGV1cgkJMTM0LTEyNQord29yZCBtYWxoZXVycwkJMTM0LTEyNS0yMzQKK3dvcmQgbWFsaGV1cmV1c2UJMTM0LTEyNS0yMzQtMTUKK3dvcmQgbWFsaGV1cmV1c2VzCTEzNC0xMjUtMjM0LTE1Ngord29yZCBtYWxoZXVyZXVzZW1lbnQJMTM0LTEyNS0yMzQtMTM0Cit3b3JkIG1hbGhldXJldXgJCTEzNC0xMjUtMTM0Ngord29yZCBtYW5pw6hyZQkJMTM0LTEzNDUKK3dvcmQgbWFuacOocmVzCQkxMzQtMTM0NS0yMzQKK3dvcmQgbWF1dmFpcwkJMTM0LTEyMzYKK3dvcmQgbWF1dmFpc2UJCTEzNC0xMjM2LTE1Cit3b3JkIG1hdXZhaXNlcwkJMTM0LTEyMzYtMTU2Cit3b3JkIG1laWxsZXVyCQkxMzQtMTIzCit3b3JkIG1laWxsZXVycwkJMTM0LTEyMy0yMzQKK3dvcmQgbWVpbGxldXJlCQkxMzQtMTIzLTE1Cit3b3JkIG1laWxsZXVyZXMJCTEzNC0xMjMtMTU2Cit3b3JkIG1lcmNpCQkxMzQtMTQKK3dvcmQgbcOocmUJCTEzNC0yMzQ2Cit3b3JkIG3DqHJlcwkJMTM0LTIzNDYtMjM0Cit3b3JkIG1lcwkJMTM0LTIzNAord29yZCBtZXNkYW1lcwkJMTM0LTE0NS0yMzQKK3dvcmQgbWVzZGVtb2lzZWxsZXMJMTM0LTEzNC0yMzQKK3dvcmQgbWVzc2lldXJzCQkxMzQtMTIzNS0yMzQKK3dvcmQgbWV0dHJlCQkxMzQtMzU2Cit3b3JkIG1pZXV4CQkxMzQtMTM0Ngord29yZCBtaXNzaW9uCQkxMzQtMzQ1Ngord29yZCBtaXNzaW9ucwkJMTM0LTM0NTYtMjM0Cit3b3JkIG1pc3Npb25uYWlyZQkxMzQtMzQ1Ni0xMjM1Cit3b3JkIG1pc3Npb25uYWlyZXMJMTM0LTM0NTYtMTIzNS0yMzQKK3dvcmQgbW9iaWxlCQkxMzQtMTIKK3dvcmQgbW9iaWxlcwkJMTM0LTEyLTIzNAord29yZCBtb2JpbGlzYXRpb24JMTM0LTEyLTE2Cit3b3JkIG1vYmlsaXNhdGlvbnMJMTM0LTEyLTE2LTIzNAord29yZCBtb2JpbGl0w6kJCTEzNC0xMi0yMzQ1Cit3b3JkIG1vYmlsaXTDqXMJCTEzNC0xMi0yMzQ1LTIzNAord29yZCBtb2lucwkJMTM0LTM1Cit3b3JkIG1vbWVudAkJMTM0LTI2Cit3b3JkIG1vbWVudHMJCTEzNC0yNi0yMzQKK3dvcmQgbW9tZW50YW7DqW1lbnQJMTM0LTI2LTEzNAord29yZCBtb25zaWV1cgkJMTM0LTEyMzUKK3dvcmQgbXVsdGlwbGUJCTEzNC0xMjQ2Cit3b3JkIG11bHRpcGxlcwkJMTM0LTEyNDYtMjM0Cit3b3JkIG11bHRpcGxpY2F0ZXVyCTEzNC0xMjQ2LTQ2Cit3b3JkIG11bHRpcGxpY2F0ZXVycwkxMzQtMTI0Ni00Ni0yMzQKK3dvcmQgbXVsdGlwbGljYXRpb24JMTM0LTEyNDYtMTYKK3dvcmQgbXVsdGlwbGljYXRpb25zCTEzNC0xMjQ2LTE2LTIzNAord29yZCBtdWx0aXBsaWNpdMOpCTEzNC0xMjQ2LTIzNDUKK3dvcmQgbXVsdGlwbGljaXTDqXMJMTM0LTEyNDYtMjM0NS0yMzQKK3dvcmQgbXVzaXF1ZQkJMTM0LTEyMzQ1Cit3b3JkIG11c2lxdWVzCQkxMzQtMTIzNDUtMjM0Cit3b3JkIG15c3TDqHJlCQkxMzQtMTM0NTYKK3dvcmQgbXlzdMOocmVzCQkxMzQtMTM0NTYtMjM0Cit3b3JkIG15c3TDqXJpZXVzZQkxMzQtMTM0NTYtMjM0LTE1Cit3b3JkIG15c3TDqXJpZXVzZXMJMTM0LTEzNDU2LTIzNC0xNTYKK3dvcmQgbXlzdMOpcmlldXNlbWVudAkxMzQtMTM0NTYtMjM0LTEzNAord29yZCBteXN0w6lyaWV1eAkJMTM0LTEzNDU2LTEzNDYKKword29yZCBuYWd1w6hyZQkJMTM0NS0xMjQ1Cit3b3JkIG5hdGlvbgkJMTM0NS0xNgord29yZCBuYXRpb25zCQkxMzQ1LTE2LTIzNAord29yZCBuYXRpb25hbAkJMTM0NS0xNi0xMjMKK3dvcmQgbmF0aW9uYWxlCQkxMzQ1LTE2LTEyMy0xNQord29yZCBuYXRpb25hbGVzCQkxMzQ1LTE2LTEyMy0xNTYKK3dvcmQgbmF0aW9uYWxpdMOpCTEzNDUtMTYtMTIzLTIzNDUKK3dvcmQgbmF0aW9uYWxpdMOpcwkxMzQ1LTE2LTEyMy0yMzQ1LTIzNAord29yZCBuYXRpb25hdXgJCTEzNDUtMTYtMTM0Ngord29yZCBuYXR1cmUJCTEzNDUtMjM0NQord29yZCBuYXR1cmVzCQkxMzQ1LTIzNDUtMjM0Cit3b3JkIG5hdHVyZWwJCTEzNDUtMjM0NS0xMjMKK3dvcmQgbmF0dXJlbHMJCTEzNDUtMjM0NS0xMjMtMjM0Cit3b3JkIG5hdHVyZWxsZQkJMTM0NS0yMzQ1LTEyMy0xMjMKK3dvcmQgbmF0dXJlbGxlcwkJMTM0NS0yMzQ1LTEyMy0xMjMtMjM0Cit3b3JkIG5hdHVyZWxsZW1lbnQJMTM0NS0yMzQ1LTEyMy0xMzQKK3dvcmQgbsOpYW5tb2lucwkJMTM0NS0xMzQKK3dvcmQgbsOpY2Vzc2FpcmUJCTEzNDUtMTQKK3dvcmQgbsOpY2Vzc2FpcmVzCTEzNDUtMTQtMjM0Cit3b3JkIG7DqWNlc3NhaXJlbWVudAkxMzQ1LTE0LTEzNAord29yZCBuw6ljZXNzaXTDqQkJMTM0NS0xNC0yMzQ1Cit3b3JkIG7DqWNlc3NpdMOpcwkJMTM0NS0xNC0yMzQ1LTIzNAord29yZCBuw6ljZXNzaXRldXNlCTEzNDUtMTQtMjM0NS0yMzQtMTUKK3dvcmQgbsOpY2Vzc2l0ZXVzZXMJMTM0NS0xNC0yMzQ1LTIzNC0xNTYKK3dvcmQgbsOpY2Vzc2l0ZXV4CTEzNDUtMTQtMjM0NS0xMzQ2Cit3b3JkIG5vbWJyZQkJMTM0NS0xMgord29yZCBub21icmVzCQkxMzQ1LTEyLTIzNAord29yZCBub21icmV1c2UJCTEzNDUtMTItMjM0LTE1Cit3b3JkIG5vbWJyZXVzZXMJCTEzNDUtMTItMjM0LTE1Ngord29yZCBub21icmV1eAkJMTM0NS0xMi0xMzQ2Cit3b3JkIG5vcwkJMTM0NS0yMzQKK3dvcmQgbm90cmUJCTEzNDUtMzU2Cit3b3JkIG7DtHRyZQkJMTM0NS0xNDU2Cit3b3JkIG7DtHRyZXMJCTEzNDUtMTQ1Ni0yMzQKK3dvcmQgbm91dmVhdQkJMTM0NS0xMjM2Cit3b3JkIG5vdXZlYXV4CQkxMzQ1LTEyMzYtMTM0Ngord29yZCBub3V2ZWF1dMOpCQkxMzQ1LTEyMzYtMjM0NQord29yZCBub3V2ZWF1dMOpcwkJMTM0NS0xMjM2LTIzNDUtMjM0Cit3b3JkIG5vdXZlbAkJMTM0NS0xMjMKK3dvcmQgbm91dmVsbGUJCTEzNDUtMTIzLTEyMword29yZCBub3V2ZWxsZXMJCTEzNDUtMTIzLTEyMy0yMzQKK3dvcmQgbm91dmVsbGVtZW50CTEzNDUtMTIzLTEzNAorCit3b3JkIG9iamVjdGlmCQkxMzUtMjQ1LTEyNAord29yZCBvYmplY3RpZnMJCTEzNS0yNDUtMTI0LTIzNAord29yZCBvYmplY3Rpb24JCTEzNS0yNDUtMzQ1Ngord29yZCBvYmplY3Rpb25zCQkxMzUtMjQ1LTM0NTYtMjM0Cit3b3JkIG9iamVjdGl2ZQkJMTM1LTI0NS0xMjM2Cit3b3JkIG9iamVjdGl2ZXMJCTEzNS0yNDUtMTIzNi0yMzQKK3dvcmQgb2JqZWN0aXZlbWVudAkxMzUtMjQ1LTEyMzYtMTM0Cit3b3JkIG9iamVjdGl2aXTDqQkxMzUtMjQ1LTEyMzYtMjM0NQord29yZCBvYmplY3Rpdml0w6lzCTEzNS0yNDUtMTIzNi0yMzQ1LTIzNAord29yZCBvYmpldAkJMTM1LTI0NQord29yZCBvYmpldHMJCTEzNS0yNDUtMjM0Cit3b3JkIG9ic2VydmF0ZXVyCTEzNS0xMi00Ngord29yZCBvYnNlcnZhdGV1cnMJMTM1LTEyLTQ2LTIzNAord29yZCBvYnNlcnZhdGlvbgkxMzUtMTIKK3dvcmQgb2JzZXJ2YXRpb25zCTEzNS0xMi0yMzQKK3dvcmQgb2NjYXNpb24JCTEzNS0xNAord29yZCBvY2Nhc2lvbnMJCTEzNS0xNC0yMzQKK3dvcmQgb2NjYXNpb25uZWwJMTM1LTE0LTEyMword29yZCBvY2Nhc2lvbm5lbHMJMTM1LTE0LTEyMy0yMzQKK3dvcmQgb2NjYXNpb25uZWxsZQkxMzUtMTQtMTIzLTEyMword29yZCBvY2Nhc2lvbm5lbGxlcwkxMzUtMTQtMTIzLTEyMy0yMzQKK3dvcmQgb2NjYXNpb25uZWxsZW1lbnQJMTM1LTE0LTEyMy0xMzQKK3dvcmQgb2V1dnJlCQkyNDYtMTIzNgord29yZCBvZXV2cmVzCQkyNDYtMTIzNi0yMzQKK3dvcmQgb2ZmaWNlCQkxMzUtMTI0Cit3b3JkIG9mZmljZXMJCTEzNS0xMjQtMjM0Cit3b3JkIG9mZmljaWVsCQkxMzUtMTI0LTEyMword29yZCBvZmZpY2llbHMJCTEzNS0xMjQtMTIzLTIzNAord29yZCBvZmZpY2llbGxlCQkxMzUtMTI0LTEyMy0xMjMKK3dvcmQgb2ZmaWNpZWxsZXMJCTEzNS0xMjQtMTIzLTEyMy0yMzQKK3dvcmQgb2ZmaWNpZWxsZW1lbnQJMTM1LTEyNC0xMjMtMTM0Cit3b3JkIG9mZmljaWV1c2UJCTEzNS0xMjQtMjM0LTE1Cit3b3JkIG9mZmljaWV1c2VzCTEzNS0xMjQtMjM0LTE1Ngord29yZCBvZmZpY2lldXNlbWVudAkxMzUtMTI0LTIzNC0xMzQKK3dvcmQgb2ZmaWNpZXV4CQkxMzUtMTI0LTEzNDYKK3dvcmQgb3BpbmlvbgkJMTM1LTEyMzQKK3dvcmQgb3BpbmlvbnMJCTEzNS0xMjM0LTIzNAord29yZCBvcmRpbmFpcmUJCTU2LTE0NQord29yZCBvcmRpbmFpcmVzCQk1Ni0xNDUtMjM0Cit3b3JkIG9yZGluYWlyZW1lbnQJNTYtMTQ1LTEzNAord29yZCBvcmlnaW5haXJlCQkxMzUtMTI0NS0xMjM1Cit3b3JkIG9yaWdpbmFpcmVzCTEzNS0xMjQ1LTEyMzUtMjM0Cit3b3JkIG9yaWdpbmFpcmVtZW50CTEzNS0xMjQ1LTEyMzUtMTM0Cit3b3JkIG9yaWdpbmFsCQkxMzUtMTI0NS0xMjMKK3dvcmQgb3JpZ2luYWxlCQkxMzUtMTI0NS0xMjMtMTUKK3dvcmQgb3JpZ2luYWxlcwkJMTM1LTEyNDUtMTIzLTE1Ngord29yZCBvcmlnaW5hbGVtZW50CTEzNS0xMjQ1LTEyMy0xMzQKK3dvcmQgb3JpZ2luYWxpdMOpCTEzNS0xMjQ1LTEyMy0yMzQ1Cit3b3JkIG9yaWdpbmFsaXTDqXMJMTM1LTEyNDUtMTIzLTIzNDUtMjM0Cit3b3JkIG9yaWdpbmF1eAkJMTM1LTEyNDUtMTM0Ngord29yZCBvcmlnaW5lCQkxMzUtMTI0NQord29yZCBvcmlnaW5lcwkJMTM1LTEyNDUtMjM0Cit3b3JkIG91dHJhZ2UJCTEyNTYtMzU2LTEyNDUKK3dvcmQgb3V0cmFnZXMJCTEyNTYtMzU2LTEyNDUtMjM0Cit3b3JkIG91dHJhZ2V1c2UJCTEyNTYtMzU2LTEyNDUtMjM0LTE1Cit3b3JkIG91dHJhZ2V1c2VzCTEyNTYtMzU2LTEyNDUtMjM0LTE1Ngord29yZCBvdXRyYWdldXNlbWVudAkxMjU2LTM1Ni0xMjQ1LTIzNC0xMzQKK3dvcmQgb3V0cmFnZXV4CQkxMjU2LTM1Ni0xMjQ1LTEzNDYKK3dvcmQgb3V0cmUJCTEyNTYtMzU2Cit3b3JkIG91dnJhZ2UJCTEyNTYtMTI0NQord29yZCBvdXZyYWdlcwkJMTI1Ni0xMjQ1LTIzNAord29yZCBvdXZyaWVyCQkxMjU2LTEyMzYKK3dvcmQgb3V2cmllcnMJCTEyNTYtMTIzNi0yMzQKK3dvcmQgb3V2cmnDqHJlCQkxMjU2LTIzNDYKK3dvcmQgb3V2cmnDqHJlcwkJMTI1Ni0yMzQ2LTIzNAorCit3b3JkIHBhcmZvaXMJCTEyMzQtMTI0Cit3b3JkIHBhcm1pCQkxMjM0LTEzNAord29yZCBwYXJvbGUJCTEyMzQtMTIzNQord29yZCBwYXJvbGVzCQkxMjM0LTEyMzUtMjM0Cit3b3JkIHBhcnRpY3VsYXJpdMOpCTEyMzQtMTIzNS0xMjMtMjM0NQord29yZCBwYXJ0aWN1bGFyaXTDqXMJMTIzNC0xMjM1LTEyMy0yMzQ1LTIzNAord29yZCBwYXJ0aWN1bGllcgkxMjM0LTEyMword29yZCBwYXJ0aWN1bGllcnMJMTIzNC0xMjMtMjM0Cit3b3JkIHBhcnRpY3VsacOocmUJMTIzNC0xMjMtMTIzNQord29yZCBwYXJ0aWN1bGnDqHJlcwkxMjM0LTEyMy0xMjM1LTIzNAord29yZCBwYXJ0aWN1bGnDqHJlbWVudAkxMjM0LTEyMy0xMjM1LTEzNAord29yZCBwYXJ0b3V0CQkxMjM0LTEKK3dvcmQgcGFzCQkxMjM0LTIzNAord29yZCBwYXV2cmUJCTEyMzQtMTIzNgord29yZCBwYXV2cmVzCQkxMjM0LTEyMzYtMjM0Cit3b3JkIHBhdXZyZW1lbnQJCTEyMzQtMTIzNi0xMzQKK3dvcmQgcGF1dnJldMOpCQkxMjM0LTEyMzYtMjM0NQord29yZCBwYXV2cmV0w6lzCQkxMjM0LTEyMzYtMjM0NS0yMzQKK3dvcmQgcGVuZGFudAkJMTIzNC0xNDUKK3dvcmQgcGVuc8OpZQkJMTIzNC0yNgord29yZCBwZW5zw6llcwkJMTIzNC0yNi0yMzQKK3dvcmQgcGVuc2lmCQkxMjM0LTI2LTEyNAord29yZCBwZW5zaWZzCQkxMjM0LTI2LTEyNC0yMzQKK3dvcmQgcGVuc2l2ZQkJMTIzNC0yNi0xMjM2Cit3b3JkIHBlbnNpdmVzCQkxMjM0LTI2LTEyMzYtMjM0Cit3b3JkIHBlbnNpdmVtZW50CTEyMzQtMjYtMTIzNi0xMzQKK3dvcmQgcMOocmUJCTEyMzQtMjM0Ngord29yZCBww6hyZXMJCTEyMzQtMjM0Ni0yMzQKK3dvcmQgcGVyc29ubmFnZQkJMTIzNC0xMzQ1LTEyNDUKK3dvcmQgcGVyc29ubmFnZXMJMTIzNC0xMzQ1LTEyNDUtMjM0Cit3b3JkIHBlcnNvbm5hbGl0w6kJMTIzNC0xMzQ1LTEyMy0yMzQ1Cit3b3JkIHBlcnNvbm5hbGl0w6lzCTEyMzQtMTM0NS0xMjMtMjM0NS0yMzQKK3dvcmQgcGVyc29ubmUJCTEyMzQtMTM0NQord29yZCBwZXJzb25uZXMJCTEyMzQtMTM0NS0yMzQKK3dvcmQgcGVyc29ubmVsCQkxMjM0LTEzNDUtMTIzCit3b3JkIHBlcnNvbm5lbHMJCTEyMzQtMTM0NS0xMjMtMjM0Cit3b3JkIHBlcnNvbm5lbGxlCTEyMzQtMTM0NS0xMjMtMTIzCit3b3JkIHBlcnNvbm5lbGxlcwkxMjM0LTEzNDUtMTIzLTEyMy0yMzQKK3dvcmQgcGVyc29ubmVsbGVtZW50CTEyMzQtMTM0NS0xMjMtMTM0Cit3b3JkIHBldGl0CQkxMjM0LTE1Cit3b3JkIHBldGl0cwkJMTIzNC0xNS0yMzQKK3dvcmQgcGV0aXRlCQkxMjM0LTE1LTE1Cit3b3JkIHBldGl0ZXMJCTEyMzQtMTUtMTU2Cit3b3JkIHBldXBsZQkJMTIzNC0xMjQ2Cit3b3JkIHBldXBsZXMJCTEyMzQtMTI0Ni0yMzQKK3dvcmQgcGV1cGxlbWVudAkJMTIzNC0xMjQ2LTEzNAord29yZCBwZXVwbGVtZW50cwkxMjM0LTEyNDYtMTM0LTIzNAord29yZCBwbGFjZQkJMTI0Ni0xNAord29yZCBwbGFjZXMJCTEyNDYtMTQtMjM0Cit3b3JkIHBsYWNlbWVudAkJMTI0Ni0xNC0xMzQKK3dvcmQgcGxhY2VtZW50cwkJMTI0Ni0xNC0xMzQtMjM0Cit3b3JkIHBsYWlzaXIJCTEyNDYtMTIzNQord29yZCBwbGFpc2lycwkJMTI0Ni0xMjM1LTIzNAord29yZCBwbHVzaWV1cnMJCTEyNDYtMjM0Cit3b3JkIHBsdXTDtHQJCTEyNDYtMjM0NQord29yZCBwb2ludAkJMTIzNC0yMzQ1Cit3b3JkIHBvaW50cwkJMTIzNC0yMzQ1LTIzNAord29yZCBwb2ludGUJCTEyMzQtMjM0NS0xNQord29yZCBwb2ludGVzCQkxMjM0LTIzNDUtMTUtMjM0Cit3b3JkIHBvcHVsYWlyZQkJMTIzNC0xMjM0LTEyMzUKK3dvcmQgcG9wdWxhaXJlcwkJMTIzNC0xMjM0LTEyMzUtMjM0Cit3b3JkIHBvcHVsYWlyZW1lbnQJMTIzNC0xMjM0LTEyMzUtMTM0Cit3b3JkIHBvcHVsYXJpdMOpCQkxMjM0LTEyMzQtMTIzNS0yMzQ1Cit3b3JkIHBvcHVsYXJpdMOpcwkxMjM0LTEyMzQtMTIzNS0yMzQ1LTIzNAord29yZCBwb3B1bGF0aW9uCQkxMjM0LTEyMzQKK3dvcmQgcG9wdWxhdGlvbnMJMTIzNC0xMjM0LTIzNAord29yZCBwb3B1bGV1c2UJCTEyMzQtMTIzNC0yMzQtMTUKK3dvcmQgcG9wdWxldXNlcwkJMTIzNC0xMjM0LTIzNC0xNTYKK3dvcmQgcG9wdWxldXgJCTEyMzQtMTIzNC0xMzQ2Cit3b3JkIHBvc3NpYmlsaXTDqQkxMjM0LTEyLTIzNDUKK3dvcmQgcG9zc2liaWxpdMOpcwkxMjM0LTEyLTIzNDUtMjM0Cit3b3JkIHBvc3NpYmxlCQkxMjM0LTEyCit3b3JkIHBvc3NpYmxlcwkJMTIzNC0xMi0yMzQKK3dvcmQgcG91cnF1b2kJCTEyMzQtMjM0NTYKK3dvcmQgcG91cnRhbnQJCTEyMzQtMTM1Cit3b3JkIHByYXRpY2FibGUJCTIzNS0yMzQ1LTQ1Cit3b3JkIHByYXRpY2FibGVzCTIzNS0yMzQ1LTQ1LTIzNAord29yZCBwcmF0aXF1ZQkJMjM1LTIzNDUKK3dvcmQgcHJhdGlxdWVzCQkyMzUtMjM0NS0yMzQKK3dvcmQgcHJhdGlxdWVtZW50CTIzNS0yMzQ1LTEzNAord29yZCBwcmVtaWVyCQkyMzUtMTM0Cit3b3JkIHByZW1pZXJzCQkyMzUtMTM0LTIzNAord29yZCBwcmVtacOocmUJCTIzNS0xMjM1Cit3b3JkIHByZW1pw6hyZXMJCTIzNS0xMjM1LTIzNAord29yZCBwcmVtacOocmVtZW50CTIzNS0xMjM1LTEzNAord29yZCBwcsOocwkJMjM1LTIzNAord29yZCBwcmVzcXVlCQkyMzUtMTIzNDUKK3dvcmQgcHJldXZlCQkyMzUtMTIzNgord29yZCBwcmV1dmVzCQkyMzUtMTIzNi0yMzQKK3dvcmQgcHJpbWl0aWYJCTIzNS0xMzQtMTI0Cit3b3JkIHByaW1pdGlmcwkJMjM1LTEzNC0xMjQtMjM0Cit3b3JkIHByaW1pdGl2ZQkJMjM1LTEzNC0xMjM2Cit3b3JkIHByaW1pdGl2ZXMJCTIzNS0xMzQtMTIzNi0yMzQKK3dvcmQgcHJpbWl0aXZlbWVudAkyMzUtMTM0LTEyMzYtMTM0Cit3b3JkIHByaW5jaXBhbAkJMjM1LTE0LTEyMword29yZCBwcmluY2lwYWxlCQkyMzUtMTQtMTIzLTE1Cit3b3JkIHByaW5jaXBhbGVzCTIzNS0xNC0xMjMtMTU2Cit3b3JkIHByaW5jaXBhbGVtZW50CTIzNS0xNC0xMjMtMTM0Cit3b3JkIHByaW5jaXBhdXgJCTIzNS0xNC0xMzQ2Cit3b3JkIHByaW5jaXBlCQkyMzUtMTQKK3dvcmQgcHJpbmNpcGVzCQkyMzUtMTQtMjM0Cit3b3JkIHByaXgJCTIzNS0xMzQ2Cit3b3JkIHByb2JhYmlsaXTDqQkyMzUtMTItMjM0NQord29yZCBwcm9iYWJpbGl0w6lzCTIzNS0xMi0yMzQ1LTIzNAord29yZCBwcm9iYWJsZQkJMjM1LTEyCit3b3JkIHByb2JhYmxlcwkJMjM1LTEyLTIzNAord29yZCBwcm9iYWJsZW1lbnQJMjM1LTEyLTEzNAord29yZCBwcm9jaGFpbgkJMjM1LTEyMzU2Cit3b3JkIHByb2NoYWlucwkJMjM1LTEyMzU2LTIzNAord29yZCBwcm9jaGFpbmUJCTIzNS0xMzQ1Cit3b3JkIHByb2NoYWluZXMJCTIzNS0xMzQ1LTIzNAord29yZCBwcm9jaGFpbmVtZW50CTIzNS0xMzQ1LTEzNAord29yZCBwcm9kdWN0ZXVyCQkyMzUtMTQ1LTQ2Cit3b3JkIHByb2R1Y3RldXJzCTIzNS0xNDUtNDYtMjM0Cit3b3JkIHByb2R1Y3RpZgkJMjM1LTE0NS0xMjQKK3dvcmQgcHJvZHVjdGlmcwkJMjM1LTE0NS0xMjQtMjM0Cit3b3JkIHByb2R1Y3Rpb24JCTIzNS0xNDUtMzQ1Ngord29yZCBwcm9kdWN0aW9ucwkyMzUtMTQ1LTM0NTYtMjM0Cit3b3JkIHByb2R1Y3RpdmUJCTIzNS0xNDUtMTIzNgord29yZCBwcm9kdWN0aXZlcwkyMzUtMTQ1LTEyMzYtMjM0Cit3b3JkIHByb2R1Y3RpdmVtZW50CTIzNS0xNDUtMTIzNi0xMzQKK3dvcmQgcHJvZHVjdGl2aXTDqQkyMzUtMTQ1LTEyMzYtMjM0NQord29yZCBwcm9kdWN0aXZpdMOpcwkyMzUtMTQ1LTEyMzYtMjM0NS0yMzQKK3dvcmQgcHJvZHVpdAkJMjM1LTE0NQord29yZCBwcm9kdWl0cwkJMjM1LTE0NS0yMzQKK3dvcmQgcHJvZml0CQkyMzUtMTI0Cit3b3JkIHByb2ZpdHMJCTIzNS0xMjQtMjM0Cit3b3JkIHByb2ZpdGFibGUJCTIzNS0xMjQtNDUKK3dvcmQgcHJvZml0YWJsZXMJMjM1LTEyNC00NS0yMzQKK3dvcmQgcHJvZml0ZXVyCQkyMzUtMTI0LTQ2Cit3b3JkIHByb2ZpdGV1cnMJCTIzNS0xMjQtNDYtMjM0Cit3b3JkIHByb2ZpdGV1c2UJCTIzNS0xMjQtMjM0LTE1Cit3b3JkIHByb2ZpdGV1c2VzCTIzNS0xMjQtMjM0LTE1Ngord29yZCBwcm9ncsOocwkJMjM1LTEyNDU2Cit3b3JkIHByb2dyZXNzaWYJCTIzNS0xMjQ1Ni0xMjQKK3dvcmQgcHJvZ3Jlc3NpZnMJMjM1LTEyNDU2LTEyNC0yMzQKK3dvcmQgcHJvZ3Jlc3Npb24JMjM1LTEyNDU2LTM0NTYKK3dvcmQgcHJvZ3Jlc3Npb25zCTIzNS0xMjQ1Ni0zNDU2LTIzNAord29yZCBwcm9ncmVzc2l2ZQkyMzUtMTI0NTYtMTIzNgord29yZCBwcm9ncmVzc2l2ZXMJMjM1LTEyNDU2LTEyMzYtMjM0Cit3b3JkIHByb2dyZXNzaXZlbWVudAkyMzUtMTI0NTYtMTIzNi0xMzQKK3dvcmQgcHJvamVjdGV1cgkJMjM1LTI0NS00Ngord29yZCBwcm9qZWN0ZXVycwkyMzUtMjQ1LTQ2LTIzNAord29yZCBwcm9qZWN0aW9uCQkyMzUtMjQ1LTM0NTYKK3dvcmQgcHJvamVjdGlvbnMJMjM1LTI0NS0zNDU2LTIzNAord29yZCBwcm9qZXQJCTIzNS0yNDUKK3dvcmQgcHJvamV0cwkJMjM1LTI0NS0yMzQKK3dvcmQgcHJvcG9ydGlvbgkJMjM1LTEyMzQKK3dvcmQgcHJvcG9ydGlvbnMJMjM1LTEyMzQtMjM0Cit3b3JkIHByb3BvcnRpb25uYWxpdMOpCTIzNS0xMjM0LTEyMy0yMzQ1Cit3b3JkIHByb3BvcnRpb25uYWxpdMOpcwkyMzUtMTIzNC0xMjMtMjM0NS0yMzQKK3dvcmQgcHJvcG9ydGlvbm5lbAkyMzUtMTIzNC0xMjMKK3dvcmQgcHJvcG9ydGlvbm5lbHMJMjM1LTEyMzQtMTIzLTIzNAord29yZCBwcm9wb3J0aW9ubmVsbGUJMjM1LTEyMzQtMTIzLTEyMword29yZCBwcm9wb3J0aW9ubmVsbGVzCTIzNS0xMjM0LTEyMy0xMjMtMjM0Cit3b3JkIHByb3BvcnRpb25uZWxsZW1lbnQgMjM1LTEyMzQtMTIzLTEzNAord29yZCBwcm9wb3NpdGlvbgkyMzUtMjQ2Cit3b3JkIHByb3Bvc2l0aW9ucwkyMzUtMjQ2LTIzNAord29yZCBwdWlzcXVlCQkxMjM0LTEyMzQ1Cit3b3JkIHB1aXNzYW5jZQkJMTIzNC0xNAord29yZCBwdWlzc2FuY2VzCQkxMjM0LTE0LTIzNAorCit3b3JkIHF1YWxpdGF0aWYJCTEyMzQ1LTEyMy0yMzQ1LTEyNAord29yZCBxdWFsaXRhdGlmcwkxMjM0NS0xMjMtMjM0NS0xMjQtMjM0Cit3b3JkIHF1YWxpdGF0aXZlCTEyMzQ1LTEyMy0yMzQ1LTEyMzYKK3dvcmQgcXVhbGl0YXRpdmVzCTEyMzQ1LTEyMy0yMzQ1LTEyMzYtMjM0Cit3b3JkIHF1YWxpdGF0aXZlbWVudAkxMjM0NS0xMjMtMjM0NS0xMjM2LTEzNAord29yZCBxdWFsaXTDqQkJMTIzNDUtMTIzLTIzNDUKK3dvcmQgcXVhbGl0w6lzCQkxMjM0NS0xMjMtMjM0NS0yMzQKK3dvcmQgcXVhbmQJCTEyMzQ1LTE0NQord29yZCBxdWFudAkJMTIzNDUtMjM0NQord29yZCBxdWFudGl0YXRpZgkxMjM0NS0yMzQ1LTIzNDUtMTI0Cit3b3JkIHF1YW50aXRhdGlmcwkxMjM0NS0yMzQ1LTIzNDUtMTI0LTIzNAord29yZCBxdWFudGl0YXRpdmUJMTIzNDUtMjM0NS0yMzQ1LTEyMzYKK3dvcmQgcXVhbnRpdGF0aXZlcwkxMjM0NS0yMzQ1LTIzNDUtMTIzNi0yMzQKK3dvcmQgcXVhbnRpdGF0aXZlbWVudAkxMjM0NS0yMzQ1LTIzNDUtMTIzNi0xMzQKK3dvcmQgcXVhbnRpdMOpCQkxMjM0NS0yMzQ1LTIzNDUKK3dvcmQgcXVhbnRpdMOpcwkJMTIzNDUtMjM0NS0yMzQ1LTIzNAord29yZCBxdWVsCQkxMjM0NS0xMjMKK3dvcmQgcXVlbHMJCTEyMzQ1LTEyMy0yMzQKK3dvcmQgcXVlbGxlCQkxMjM0NS0xMjMtMTIzCit3b3JkIHF1ZWxsZXMJCTEyMzQ1LTEyMy0xMjMtMjM0Cit3b3JkIHF1ZWxjb25xdWUJCTEyMzQ1LTE0Cit3b3JkIHF1ZWxjb25xdWVzCTEyMzQ1LTE0LTIzNAord29yZCBxdWVscXVlCQkxMjM0NS0xMjM0NQord29yZCBxdWVscXVlcwkJMTIzNDUtMTIzNDUtMjM0Cit3b3JkIHF1ZWxxdWVmb2lzCTEyMzQ1LTEyNAord29yZCBxdWVzdGlvbgkJMTIzNDUtMzQ1Ngord29yZCBxdWVzdGlvbnMJCTEyMzQ1LTM0NTYtMjM0Cit3b3JkIHF1ZXN0aW9ubmFpcmUJMTIzNDUtMzQ1Ni0xMjM1Cit3b3JkIHF1ZXN0aW9ubmFpcmVzCTEyMzQ1LTM0NTYtMTIzNS0yMzQKK3dvcmQgcXVpY29ucXVlCQkxMjM0NS0zNDYKK3dvcmQgcXVvaXF1ZQkJMTIzNDUtMTUKKword29yZCByYWlzb24JCTEyMzUtMzQ2Cit3b3JkIHJhaXNvbnMJCTEyMzUtMzQ2LTIzNAord29yZCByYWlzb25uYWJsZQkxMjM1LTM0Ni00NQord29yZCByYWlzb25uYWJsZXMJMTIzNS0zNDYtNDUtMjM0Cit3b3JkIHJhaXNvbm5hYmxlbWVudAkxMjM1LTM0Ni00NS0xMzQKK3dvcmQgcmFpc29ubmVtZW50CTEyMzUtMzQ2LTEzNAord29yZCByYWlzb25uZW1lbnRzCTEyMzUtMzQ2LTEzNC0yMzQKK3dvcmQgcmFwcG9ydAkJMTIzNS0xMjM0Cit3b3JkIHJhcHBvcnRzCQkxMjM1LTEyMzQtMjM0Cit3b3JkIHJhcHBvcnRldXIJCTEyMzUtMTIzNC00Ngord29yZCByYXBwb3J0ZXVycwkxMjM1LTEyMzQtNDYtMjM0Cit3b3JkIHJhcmUJCTEyMzUtMTIzNQord29yZCByYXJlcwkJMTIzNS0xMjM1LTIzNAord29yZCByYXJlbWVudAkJMTIzNS0xMjM1LTEzNAord29yZCByYXJldMOpCQkxMjM1LTEyMzUtMjM0NQord29yZCByYXJldMOpcwkJMTIzNS0xMjM1LTIzNDUtMjM0Cit3b3JkIHLDqWFsaXNhYmxlCQkxMjM1LTEyMy00NQord29yZCByw6lhbGlzYWJsZXMJMTIzNS0xMjMtNDUtMjM0Cit3b3JkIHLDqWFsaXNhdGV1cgkxMjM1LTEyMy00Ngord29yZCByw6lhbGlzYXRldXJzCTEyMzUtMTIzLTQ2LTIzNAord29yZCByw6lhbGlzYXRpb24JMTIzNS0xMjMtMTYKK3dvcmQgcsOpYWxpc2F0aW9ucwkxMjM1LTEyMy0xNi0yMzQKK3dvcmQgcsOpYWxpdMOpCQkxMjM1LTEyMy0yMzQ1Cit3b3JkIHLDqWFsaXTDqXMJCTEyMzUtMTIzLTIzNDUtMjM0Cit3b3JkIHLDqWVsCQkxMjM1LTEyMword29yZCByw6llbHMJCTEyMzUtMTIzLTIzNAord29yZCByw6llbGxlCQkxMjM1LTEyMy0xMjMKK3dvcmQgcsOpZWxsZXMJCTEyMzUtMTIzLTEyMy0yMzQKK3dvcmQgcsOpZWxsZW1lbnQJCTEyMzUtMTIzLTEzNAord29yZCByw6lmbGV4aW9uCQkxMjM1LTEyNAord29yZCByw6lmbGV4aW9ucwkJMTIzNS0xMjQtMjM0Cit3b3JkIHJlZ2FyZAkJMTIzNS0xMjQ1Cit3b3JkIHJlZ2FyZHMJCTEyMzUtMTI0NS0yMzQKK3dvcmQgcmVncmV0CQkxMjM1LTEyNDU2Cit3b3JkIHJlZ3JldHMJCTEyMzUtMTI0NTYtMjM0Cit3b3JkIHJlZ3JldHRhYmxlCTEyMzUtMTI0NTYtNDUKK3dvcmQgcmVncmV0dGFibGVzCTEyMzUtMTI0NTYtNDUtMjM0Cit3b3JkIHJlbGF0aWYJCTEyMzUtMjM0NS0xMjQKK3dvcmQgcmVsYXRpZnMJCTEyMzUtMjM0NS0xMjQtMjM0Cit3b3JkIHJlbGF0aW9uCQkxMjM1LTIzNDUKK3dvcmQgcmVsYXRpb25zCQkxMjM1LTIzNDUtMjM0Cit3b3JkIHJlbGF0aXZlCQkxMjM1LTIzNDUtMTIzNgord29yZCByZWxhdGl2ZXMJCTEyMzUtMjM0NS0xMjM2LTIzNAord29yZCByZWxhdGl2ZW1lbnQJMTIzNS0yMzQ1LTEyMzYtMTM0Cit3b3JkIHJlbGF0aXZpdMOpCQkxMjM1LTIzNDUtMTIzNi0yMzQ1Cit3b3JkIHJlbGF0aXZpdMOpcwkxMjM1LTIzNDUtMTIzNi0yMzQ1LTIzNAord29yZCByZW1hcnF1YWJsZQkxMjM1LTEyMzQ1LTQ1Cit3b3JkIHJlbWFycXVhYmxlcwkxMjM1LTEyMzQ1LTQ1LTIzNAord29yZCByZW1hcnF1YWJsZW1lbnQJMTIzNS0xMjM0NS00NS0xMzQKK3dvcmQgcmVtYXJxdWUJCTEyMzUtMTIzNDUKK3dvcmQgcmVtYXJxdWVzCQkxMjM1LTEyMzQ1LTIzNAord29yZCByZW1lcmNpZW1lbnQJMTIzNS0xMzQKK3dvcmQgcmVtZXJjaWVtZW50cwkxMjM1LTEzNC0yMzQKK3dvcmQgcmVuc2VpZ25lbWVudAkxMjM1LTI2Cit3b3JkIHJlbnNlaWduZW1lbnRzCTEyMzUtMjYtMjM0Cit3b3JkIHLDqnZlCQkxMjM1LTEyNgord29yZCByw6p2ZXMJCTEyMzUtMTI2LTIzNAord29yZCByw6p2ZXVyCQkxMjM1LTEyNi00Ngord29yZCByw6p2ZXVycwkJMTIzNS0xMjYtNDYtMjM0Cit3b3JkIHLDqnZldXNlCQkxMjM1LTEyNi0yMzQtMTUKK3dvcmQgcsOqdmV1c2VzCQkxMjM1LTEyNi0yMzQtMTU2Cit3b3JkIHLDqnZldXNlbWVudAkxMjM1LTEyNi0yMzQtMTM0Cit3b3JkIHLDtGxlCQkxMjM1LTE0NTYKK3dvcmQgcsO0bGVzCQkxMjM1LTE0NTYtMjM0Cit3b3JkIHJvdXRlCQkxMjM1LTEyNTYKK3dvcmQgcm91dGVzCQkxMjM1LTEyNTYtMjM0Cit3b3JkIHJ5dGhtZQkJMTIzNS0xMzQ1Ngord29yZCByeXRobWVzCQkxMjM1LTEzNDU2LTIzNAord29yZCByeXRobWlxdWUJCTEyMzUtMTM0NTYtMTIzNDUKK3dvcmQgcnl0aG1pcXVlcwkJMTIzNS0xMzQ1Ni0xMjM0NS0yMzQKK3dvcmQgcnl0aG1pcXVlbWVudAkxMjM1LTEzNDU2LTEyMzQ1LTEzNAorCit3b3JkIHPDqWN1bGFpcmUJCTIzNC0xNC0xMjM1Cit3b3JkIHPDqWN1bGFpcmVzCQkyMzQtMTQtMTIzNS0yMzQKK3dvcmQgc8OpY3VsYWlyZW1lbnQJMjM0LTE0LTEyMzUtMTM0Cit3b3JkIHNlaWduZXVyCQkyMzQtMjM1Ngord29yZCBzZWlnbmV1cnMJCTIzNC0yMzU2LTIzNAord29yZCBzZW1ibGFibGUJCTIzNC0xMgord29yZCBzZW1ibGFibGVzCQkyMzQtMTItMjM0Cit3b3JkIHNlbWJsYWJsZW1lbnQJMjM0LTEyLTEzNAord29yZCBzZW50aW1lbnQJCTIzNC0yMzQ1LTEzNAord29yZCBzZW50aW1lbnRzCQkyMzQtMjM0NS0xMzQtMjM0Cit3b3JkIHNlbnRpbWVudGFsCTIzNC0yMzQ1LTEzNC0xMjMKK3dvcmQgc2VudGltZW50YWxlCTIzNC0yMzQ1LTEzNC0xMjMtMTUKK3dvcmQgc2VudGltZW50YWxlcwkyMzQtMjM0NS0xMzQtMTIzLTE1Ngord29yZCBzZW50aW1lbnRhbGVtZW50CTIzNC0yMzQ1LTEzNC0xMjMtMTM0Cit3b3JkIHNlbnRpbWVudGFsaXTDqQkyMzQtMjM0NS0xMzQtMTIzLTIzNDUKK3dvcmQgc2VudGltZW50YWxpdMOpcwkyMzQtMjM0NS0xMzQtMTIzLTIzNDUtMjM0Cit3b3JkIHNlbnRpbWVudGF1eAkyMzQtMjM0NS0xMzQtMTM0Ngord29yZCBzZXMJCTIzNC0yMzQKK3dvcmQgc2V1bAkJMjM0LTEyMword29yZCBzZXVscwkJMjM0LTEyMy0yMzQKK3dvcmQgc2V1bGUJCTIzNC0xMjMtMTUKK3dvcmQgc2V1bGVzCQkyMzQtMTIzLTE1Ngord29yZCBzZXVsZW1lbnQJCTIzNC0xMjMtMTM0Cit3b3JkIHNpw6hjbGUJCTIzNC0xNAord29yZCBzacOoY2xlcwkJMjM0LTE0LTIzNAord29yZCBzaW1wbGUJCTIzNC0xMjQ2Cit3b3JkIHNpbXBsZXMJCTIzNC0xMjQ2LTIzNAord29yZCBzaW1wbGVtZW50CQkyMzQtMTI0Ni0xMzQKK3dvcmQgc2ltcGxpY2l0w6kJCTIzNC0xMjQ2LTIzNDUKK3dvcmQgc2ltcGxpY2l0w6lzCTIzNC0xMjQ2LTIzNDUtMjM0Cit3b3JkIHNpbXBsaWZpY2F0aW9uCTIzNC0xMjQ2LTE2Cit3b3JkIHNpbXBsaWZpY2F0aW9ucwkyMzQtMTI0Ni0xNi0yMzQKK3dvcmQgc29ldXIJCTIzNC0xMjM1Cit3b3JkIHNvZXVycwkJMjM0LTEyMzUtMjM0Cit3b3JkIHNvaW4JCTIzNC0zNQord29yZCBzb2lucwkJMjM0LTM1LTIzNAord29yZCBzb2xpdGFpcmUJCTIzNC0xMjMtMTIzNQord29yZCBzb2xpdGFpcmVzCQkyMzQtMTIzLTEyMzUtMjM0Cit3b3JkIHNvbGl0YWlyZW1lbnQJMjM0LTEyMy0xMjM1LTEzNAord29yZCBzb2xpdHVkZQkJMjM0LTEyMy0xNDUKK3dvcmQgc29saXR1ZGVzCQkyMzQtMTIzLTE0NS0yMzQKK3dvcmQgc29tbWFpcmUJCTIzNC0yNDU2LTEyMzUKK3dvcmQgc29tbWFpcmVzCQkyMzQtMjQ1Ni0xMjM1LTIzNAord29yZCBzb21tYWlyZW1lbnQJMjM0LTI0NTYtMTIzNS0xMzQKK3dvcmQgc29tbWUJCTIzNC0yNDU2Cit3b3JkIHNvbW1lcwkJMjM0LTI0NTYtMjM0Cit3b3JkIHNvbnQJCTI0Ni0yMzQ1Cit3b3JkIHNvcnRlCQkyMzQtMTM1Cit3b3JkIHNvcnRlcwkJMjM0LTEzNS0yMzQKK3dvcmQgc291ZGFpbgkJMjM0LTE0NQord29yZCBzb3VkYWlucwkJMjM0LTE0NS0yMzQKK3dvcmQgc291ZGFpbmUJCTIzNC0xMzQ1Cit3b3JkIHNvdWRhaW5lcwkJMjM0LTEzNDUtMjM0Cit3b3JkIHNvdWRhaW5lbWVudAkyMzQtMTM0NS0xMzQKK3dvcmQgc291ZGFpbmV0w6kJCTIzNC0xMzQ1LTIzNDUKK3dvcmQgc291ZGFpbmV0w6lzCTIzNC0xMzQ1LTIzNDUtMjM0Cit3b3JkIHNvdWZmcmFuY2UJCTIzNC0xMjQtMTQKK3dvcmQgc291ZmZyYW5jZXMJMjM0LTEyNC0xNC0yMzQKK3dvcmQgc291ZmZyYW50CQkyMzQtMTI0Cit3b3JkIHNvdWZmcmFudHMJCTIzNC0xMjQtMjM0Cit3b3JkIHNvdWZmcmFudGUJCTIzNC0xMjQtMTUKK3dvcmQgc291ZmZyYW50ZXMJMjM0LTEyNC0xNTYKK3dvcmQgc291dmVudAkJMjM0LTEyMzYKK3dvcmQgc3ViamVjdGlmCQkyMzQtMjQ1LTEyNAord29yZCBzdWJqZWN0aWZzCQkyMzQtMjQ1LTEyNC0yMzQKK3dvcmQgc3ViamVjdGl2ZQkJMjM0LTI0NS0xMjM2Cit3b3JkIHN1YmplY3RpdmVzCTIzNC0yNDUtMTIzNi0yMzQKK3dvcmQgc3ViamVjdGl2ZW1lbnQJMjM0LTI0NS0xMjM2LTEzNAord29yZCBzdWJqZWN0aXZpdMOpCTIzNC0yNDUtMTIzNi0yMzQ1Cit3b3JkIHN1YmplY3Rpdml0w6lzCTIzNC0yNDUtMTIzNi0yMzQ1LTIzNAord29yZCBzdWpldAkJMjM0LTI0NQord29yZCBzdWpldHMJCTIzNC0yNDUtMjM0Cit3b3JkIHN1asOpdGlvbgkJMjM0LTI0NS0zNDU2Cit3b3JkIHN1asOpdGlvbnMJCTIzNC0yNDUtMzQ1Ni0yMzQKK3dvcmQgc3Vww6lyaWV1cgkJMjM0LTEyMzQKK3dvcmQgc3Vww6lyaWV1cnMJCTIzNC0xMjM0LTIzNAord29yZCBzdXDDqXJpZXVyZQkJMjM0LTEyMzQtMTUKK3dvcmQgc3Vww6lyaWV1cmVzCTIzNC0xMjM0LTE1Ngord29yZCBzdXDDqXJpZXVyZW1lbnQJMjM0LTEyMzQtMTM0Cit3b3JkIHN1cMOpcmlvcml0w6kJMjM0LTEyMzQtMjM0NQord29yZCBzdXDDqXJpb3JpdMOpcwkyMzQtMTIzNC0yMzQ1LTIzNAord29yZCBzdXJ0b3V0CQkyMzQtMjM0NQord29yZCBzeXN0w6ltYXRpcXVlCTIzNC0xMzQ1Ni0xMjM0NQord29yZCBzeXN0w6ltYXRpcXVlcwkyMzQtMTM0NTYtMTIzNDUtMjM0Cit3b3JkIHN5c3TDqW1hdGlxdWVtZW50CTIzNC0xMzQ1Ni0xMjM0NS0xMzQKK3dvcmQgc3lzdMOobWUJCTIzNC0xMzQ1Ngord29yZCBzeXN0w6htZXMJCTIzNC0xMzQ1Ni0yMzQKKword29yZCB0ZWwJCTIzNDUtMTIzCit3b3JkIHRlbHMJCTIzNDUtMTIzLTIzNAord29yZCB0ZWxsZQkJMjM0NS0xMjMtMTIzCit3b3JkIHRlbGxlcwkJMjM0NS0xMjMtMTIzLTIzNAord29yZCB0ZWxsZW1lbnQJCTIzNDUtMTIzLTEzNAord29yZCB0ZW1wb3JhaXJlCQkyMzQ1LTEyMzQtMTIzNQord29yZCB0ZW1wb3JhaXJlcwkyMzQ1LTEyMzQtMTIzNS0yMzQKK3dvcmQgdGVtcG9yYWlyZW1lbnQJMjM0NS0xMjM0LTEyMzUtMTM0Cit3b3JkIHRlbXBvcmVsCQkyMzQ1LTEyMzQtMTIzCit3b3JkIHRlbXBvcmVscwkJMjM0NS0xMjM0LTEyMy0yMzQKK3dvcmQgdGVtcG9yZWxsZQkJMjM0NS0xMjM0LTEyMy0xMjMKK3dvcmQgdGVtcG9yZWxsZXMJMjM0NS0xMjM0LTEyMy0xMjMtMjM0Cit3b3JkIHRlbXBzCQkyMzQ1LTEyMzQKK3dvcmQgdGVuaXIJCTIzNDUtMTM0NQord29yZCB0ZXJyZQkJMjM0NS0xMjM1Cit3b3JkIHRlcnJlcwkJMjM0NS0xMjM1LTIzNAord29yZCB0ZXMJCTIzNDUtMjM0Cit3b3JkIHTDqnRlCQkyMzQ1LTEyNgord29yZCB0w6p0ZXMJCTIzNDUtMTI2LTIzNAord29yZCB0aMOpb3JpZQkJMjM0NS0xMjUKK3dvcmQgdGjDqW9yaWVzCQkyMzQ1LTEyNS0yMzQKK3dvcmQgdGjDqW9yaXF1ZQkJMjM0NS0xMjUtMTIzNDUKK3dvcmQgdGjDqW9yaXF1ZXMJCTIzNDUtMTI1LTEyMzQ1LTIzNAord29yZCB0aMOpb3JpcXVlbWVudAkyMzQ1LTEyNS0xMjM0NS0xMzQKK3dvcmQgdGl0cmUJCTIzNDUtMzU2Cit3b3JkIHRpdHJlcwkJMjM0NS0zNTYtMjM0Cit3b3JkIHRvdWpvdXJzCQkyMzQ1LTI0NQord29yZCB0b3V0ZQkJMjM0NS0yMzQ1Cit3b3JkIHRvdXRlcwkJMjM0NS0yMzQ1LTIzNAord29yZCB0b3V0ZWZvaXMJCTIzNDUtMTI0Cit3b3JkIHRyYWdpcXVlCQkzNTYtMTI0NQord29yZCB0cmFnaXF1ZXMJCTM1Ni0xMjQ1LTIzNAord29yZCB0cmFnaXF1ZW1lbnQJMzU2LTEyNDUtMTM0Cit3b3JkIHRyYWpldAkJMzU2LTI0NQord29yZCB0cmFqZXRzCQkzNTYtMjQ1LTIzNAord29yZCB0cmFucXVpbGxlCQkzNTYtMTIzNDUKK3dvcmQgdHJhbnF1aWxsZXMJMzU2LTEyMzQ1LTIzNAord29yZCB0cmFucXVpbGxlbWVudAkzNTYtMTIzNDUtMTM0Cit3b3JkIHRyYW5xdWlsbGl0w6kJMzU2LTEyMzQ1LTIzNDUKK3dvcmQgdHJhbnF1aWxsaXTDqXMJMzU2LTEyMzQ1LTIzNDUtMjM0Cit3b3JkIHRyYXZhaWwJCTM1Ni0xMjMKK3dvcmQgdHJhdmFpbGxldXIJMzU2LTEyMy00Ngord29yZCB0cmF2YWlsbGV1cnMJMzU2LTEyMy00Ni0yMzQKK3dvcmQgdHJhdmFpbGxldXNlCTM1Ni0xMjMtMjM0LTE1Cit3b3JkIHRyYXZhaWxsZXVzZXMJMzU2LTEyMy0yMzQtMTU2Cit3b3JkIHRyYXZhdXgJCTM1Ni0xMzQ2Cit3b3JkIHRyYXZlcnMJCTM1Ni0xMjM2Cit3b3JkIHRyw6hzCQkzNTYtMjM0Cit3b3JkIHRyb3AJCTM1Ni0xMjM0Cit3b3JkIHR5cGUJCTIzNDUtMTM0NTYKK3dvcmQgdHlwZXMJCTIzNDUtMTM0NTYtMjM0Cit3b3JkIHR5cGlxdWUJCTIzNDUtMTM0NTYtMTIzNDUKK3dvcmQgdHlwaXF1ZXMJCTIzNDUtMTM0NTYtMTIzNDUtMjM0Cit3b3JkIHR5cGlxdWVtZW50CTIzNDUtMTM0NTYtMTIzNDUtMTM0CisKK3dvcmQgdW5lCQkxMzYtMTM0NQord29yZCB1bmVzCQkxMzYtMTM0NS0yMzQKK3dvcmQgdW5pcXVlCQkxMzYtMTIzNDUKK3dvcmQgdW5pcXVlcwkJMTM2LTEyMzQ1LTIzNAord29yZCB1bmlxdWVtZW50CQkxMzYtMTIzNDUtMTM0Cit3b3JkIHVuaXRhaXJlCQkxMzYtMTM0NS0yMzQ1LTEyMzUKK3dvcmQgdW5pdGFpcmVzCQkxMzYtMTM0NS0yMzQ1LTEyMzUtMjM0Cit3b3JkIHVuaXTDqQkJMTM2LTEzNDUtMjM0NQord29yZCB1bml0w6lzCQkxMzYtMTM0NS0yMzQ1LTIzNAord29yZCB1bml2ZXJzCQkxMzYtMTIzNgord29yZCB1bml2ZXJzYWxpdMOpCTEzNi0xMjM2LTEyMy0yMzQ1Cit3b3JkIHVuaXZlcnNhbGl0w6lzCTEzNi0xMjM2LTEyMy0yMzQ1LTIzNAord29yZCB1bml2ZXJzZWwJCTEzNi0xMjM2LTEyMword29yZCB1bml2ZXJzZWxzCQkxMzYtMTIzNi0xMjMtMjM0Cit3b3JkIHVuaXZlcnNlbGxlCTEzNi0xMjM2LTEyMy0xMjMKK3dvcmQgdW5pdmVyc2VsbGVzCTEzNi0xMjM2LTEyMy0xMjMtMjM0Cit3b3JkIHVuaXZlcnNlbGxlbWVudAkxMzYtMTIzNi0xMjMtMTM0Cit3b3JkIHVuaXZlcnNpdGFpcmUJMTM2LTEyMzYtMjM0NS0xMjM1Cit3b3JkIHVuaXZlcnNpdGFpcmVzCTEzNi0xMjM2LTIzNDUtMTIzNS0yMzQKK3dvcmQgdW5pdmVyc2l0w6kJCTEzNi0xMjM2LTIzNDUKK3dvcmQgdW5pdmVyc2l0w6lzCTEzNi0xMjM2LTIzNDUtMjM0Cit3b3JkIHVzYWdlCQkxMzYtMTI0NQord29yZCB1c2FnZXMJCTEzNi0xMjQ1LTIzNAord29yZCB1dGlsZQkJMTM2LTEyMword29yZCB1dGlsZXMJCTEzNi0xMjMtMjM0Cit3b3JkIHV0aWxlbWVudAkJMTM2LTEyMy0xMzQKK3dvcmQgdXRpbGlzYWJsZQkJMTM2LTEyMy00NQord29yZCB1dGlsaXNhYmxlcwkxMzYtMTIzLTQ1LTIzNAord29yZCB1dGlsaXNhdGV1cgkxMzYtMTIzLTQ2Cit3b3JkIHV0aWxpc2F0ZXVycwkxMzYtMTIzLTQ2LTIzNAord29yZCB1dGlsaXNhdGlvbgkxMzYtMTIzLTE2Cit3b3JkIHV0aWxpc2F0aW9ucwkxMzYtMTIzLTE2LTIzNAord29yZCB1dGlsaXRhaXJlCQkxMzYtMTIzLTIzNDUtMTIzNQord29yZCB1dGlsaXRhaXJlcwkxMzYtMTIzLTIzNDUtMTIzNS0yMzQKK3dvcmQgdXRpbGl0w6kJCTEzNi0xMjMtMjM0NQord29yZCB1dGlsaXTDqXMJCTEzNi0xMjMtMjM0NS0yMzQKKword29yZCB2YWxldXIJCTEyMzYtNDYKK3dvcmQgdmFsZXVycwkJMTIzNi00Ni0yMzQKK3dvcmQgdmVuaXIJCTEyMzYtMTM0NQord29yZCB2w6lyaXRhYmxlCQkxMjM2LTEyMzUKK3dvcmQgdsOpcml0YWJsZXMJCTEyMzYtMTIzNS0yMzQKK3dvcmQgdsOpcml0YWJsZW1lbnQJMTIzNi0xMjM1LTEzNAord29yZCB2w6lyaXTDqQkJMTIzNi0xMjM0NTYKK3dvcmQgdsOpcml0w6lzCQkxMjM2LTEyMzQ1Ni0yMzQKK3dvcmQgdmlldXgJCTEyMzYtMTM0Ngord29yZCB2aWYJCTEyMzYtMTI0Cit3b3JkIHZpZnMJCTEyMzYtMTI0LTIzNAord29yZCB2aXZlCQkxMjM2LTEyMzYKK3dvcmQgdml2ZXMJCTEyMzYtMTIzNi0yMzQKK3dvcmQgdml2ZW1lbnQJCTEyMzYtMTIzNi0xMzQKK3dvcmQgdm9pY2kJCTEyMzYtMTQKK3dvcmQgdm9pbMOgCQkxMjM2LTEyMword29yZCB2b2xvbnRhaXJlCQkxMjM2LTEzNS0xMjM1Cit3b3JkIHZvbG9udGFpcmVzCTEyMzYtMTM1LTEyMzUtMjM0Cit3b3JkIHZvbG9udGFpcmVtZW50CTEyMzYtMTM1LTEyMzUtMTM0Cit3b3JkIHZvbG9udMOpCQkxMjM2LTEzNQord29yZCB2b2xvbnTDqXMJCTEyMzYtMTM1LTIzNAord29yZCB2b2xvbnRpZXJzCQkxMjM2LTM0Ngord29yZCB2b3MJCTEyMzYtMjM0Cit3b3JkIHZvdHJlCQkxMjM2LTM1Ngord29yZCB2w7R0cmUJCTEyMzYtMTQ1Ngord29yZCB2w7R0cmVzCQkxMjM2LTE0NTYtMjM0Cit3b3JkIHZveWFnZQkJMTIzNi0xMjQ1Cit3b3JkIHZveWFnZXMJCTEyMzYtMTI0NS0yMzQKK3dvcmQgdm95YWdldXIJCTEyMzYtMTI0NS00Ngord29yZCB2b3lhZ2V1cnMJCTEyMzYtMTI0NS00Ni0yMzQKK3dvcmQgdm95YWdldXNlCQkxMjM2LTEyNDUtMjM0LTE1Cit3b3JkIHZveWFnZXVzZXMJCTEyMzYtMTI0NS0yMzQtMTU2Cit3b3JkIHZyYWltZW50CQkxMjM2LTEzNAorCisjIyMKKyMjIyA0LiBMb2N1dGlvbnMKKyMjIworCit3b3JkIMOgXHNjYXVzZSAxMjM1Ni00NTYtMTQKK3dvcmQgw6Bcc21lc3VyZSAxMjM1Ni00NTYtMTM0Cit3b3JkIMOgXHNwZWluZSAxMjM1Ni00NTYtMTIzNAord29yZCDDoFxzcGV1XHNwcsOocyAxMjM1Ni00NTYtMTIzNC00NTYtMjM1Cit3b3JkIMOgXHNwcsOpc2VudCAxMjM1Ni00NTYtMjM1Cit3b3JkIMOgXHN0cmF2ZXJzIDEyMzU2LTQ1Ni0zNTYKK3dvcmQgYXVcc2NvbnRyYWlyZSAxMy00NTYtMTQKK3dvcmQgYXUtZGVzc291cyAxMy0zNi0xMjU2Cit3b3JkIGF1LWRlc3N1cyAxMy0zNi0xNDUKK3dvcmQgYXVqb3VyZCdodWkgMTMtMy0xMjUKK3dvcmQgYXV0YW50XHNxdWUgMTMtNDU2LTEyMzQ1Cit3b3JkIGF1dHJlXHNjaG9zZSAxMy00NTYtMTIzNTYKK3dvcmQgYXV0cmVcc3BhcnQgMTMtNDU2LTEyMzQKK3dvcmQgYydlc3Qtw6AtZGlyZSAxNC0zLTE1LTM2LTEyMzU2LTM2LTE0NQord29yZCBkJ2Fib3JkIDE0NS0zLTEKK3dvcmQgZGVcc3N1aXRlIDE0NS00NTYtMjM0Cit3b3JkIGVuXHNtZXN1cmUgMjYtNDU2LTEzNAord29yZCBlblxzcsOpYWxpdMOpIDI2LTQ1Ni0xMjM1Cit3b3JkIGV0XHNjw6l0ZXJhIDE1LTQ1Ni0xNAord29yZCBsYVxzcGx1cGFydCAxMjMtNDU2LTEyNDYKK3dvcmQgbm9uXHNzZXVsZW1lbnQgMTM0NS00NTYtMjM0Cit3b3JkIHBhcmNlXHNxdWUgMTIzNC00NTYtMTIzNDUKK3dvcmQgcGFyXHNjb25zw6lxdWVudCAxMjM0LTQ1Ni0xNAord29yZCBwYXItZGVzc291cyAxMjM0LTM2LTEyNTYKK3dvcmQgcGFyLWRlc3N1cyAxMjM0LTM2LTE0NQord29yZCBwYXJcc2V4ZW1wbGUgMTIzNC00NTYtMTUKK3dvcmQgcGFyXHNzdWl0ZSAxMjM0LTQ1Ni0yMzQKK3dvcmQgcGV1XHPDoFxzcGV1IDEyMzQtNDU2LTEyMzU2LTQ1Ni0xMjM0Cit3b3JkIHBldXQtw6p0cmUgMTIzNC0zNi0xMjYKK3dvcmQgcGx1c1xzdGFyZCAxMjQ2LTQ1Ni0yMzQ1Cit3b3JkIHBsdXNcc3TDtHQgMTI0Ni00NTYtMTQ1Ngord29yZCBwb3VyXHNhaW5zaVxzZGlyZSAxMjM0LTQ1Ni0xLTQ1Ni0xNDUKK3dvcmQgcXVlbHF1ZVxzY2hvc2UgMTIzNDUtNDU2LTEyMzU2Cit3b3JkIHF1ZWxxdWVcc3BhcnQgMTIzNDUtNDU2LTEyMzQKK3dvcmQgcXVlbHF1ZVxzdGVtcHMgMTIzNDUtNDU2LTIzNDUKK3dvcmQgc2Fuc1xzY2Vzc2UgMjM0LTQ1Ni0xNAord29yZCBzYW5zXHNkb3V0ZSAyMzQtNDU2LTE0NQord29yZCB0YW5kaXNcc3F1ZSAyMzQ1LTQ1Ni0xMjM0NQord29yZCB0b3VyXHPDoFxzdG91ciAyMzQ1LTQ1Ni0xMjM1Ni00NTYtMjM0NQord29yZCB0b3V0XHPDoFxzY291cCAxNi00NTYtMTIzNTYtNDU2LTE0Cit3b3JkIHRvdXRcc8OgXHNmYWl0IDE2LTQ1Ni0xMjM1Ni00NTYtMTI0Cit3b3JkIHRyw6hzXHNiaWVuIDM1Ni00NTYtMTIKK3dvcmQgdmlzLcOgLXZpcyAxMjM2LTM2LTEyMzU2LTM2LTEyMzYKKworc3Vmd29yZCBqdXNxdScgMjQ1LTEyMzQ1LTMKK3N1ZndvcmQgbG9yc3F1JyAxMjMtMTIzNDUtMworc3Vmd29yZCBwYXJjZVxzcXUnIDEyMzQtNDU2LTEyMzQ1LTMKKworIyBpbmxpbmUgY29udHJhY3Rpb24gb2YgZW1vamkgZGVzY3JpcHRpb25zCitlbW9qaSBmcgpkaWZmIC0tZ2l0IGEvVGFibGVzL0NvbnRyYWN0aW9uL2ZyLmN0YiBiL1RhYmxlcy9Db250cmFjdGlvbi9mci5jdGIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWU4NTI3ZgotLS0gL2Rldi9udWxsCisrKyBiL1RhYmxlcy9Db250cmFjdGlvbi9mci5jdGIKQEAgLTAsMCArMSwyMSBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorIyAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyMKKyMgQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorIworIyBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorIworIyBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisjIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyMgbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisjCisjIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMgQlJMVFRZIENvbnRyYWN0aW9uIFRhYmxlIC0gRnJlbmNoCisKK2luY2x1ZGUgZnItZzIuY3RiCmRpZmYgLS1naXQgYS9UYWJsZXMvQ29udHJhY3Rpb24vaGEuY3RiIGIvVGFibGVzL0NvbnRyYWN0aW9uL2hhLmN0YgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MWQ4NTAwCi0tLSAvZGV2L251bGwKKysrIGIvVGFibGVzL0NvbnRyYWN0aW9uL2hhLmN0YgpAQCAtMCwwICsxLDQwIEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisjICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorIworIyBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisjCisjIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisjCisjIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyMgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorIyBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyMKKyMgV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworIworIyBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIyBCUkxUVFkgQ29udHJhY3Rpb24gVGFibGUgLSBIYXVzYSAoY29udHJhY3RlZCkKKyMKKyMgU2FtdWVsIFRoaWJhdWx0IDxzYW11ZWwudGhpYmF1bHRAZW5zLWx5b24ub3JnPgorIyAKKyMgVGhpcyB0YWJsZSBpcyBiYXNlZCBvbiB0aGUgVW5lc2NvIHJlcG9ydCBvbiB0aGUgcHJvZ3Jlc3Mgb2YgdW5pZmljYXRpb24gb2YKKyMgYnJhaWxsZSB3cml0aW5nIMKrwqBMJ8OJQ1JJVFVSRSBCUkFJTExFIERBTlMgTEUgTU9OREXCoMK7LCBieSBTaXIgQ2x1dGhhCisjIE1BQ0tFTlpJRTogaHR0cDovL3VuZXNkb2MudW5lc2NvLm9yZy9pbWFnZXMvMDAxMy8wMDEzNTIvMTM1MjUxZm8ucGRmCisjIFRoZSBkb2N1bWVudCBpcyBkYXRlZCAxOTU0LCBzbyB0aGlzIHRhYmxlIG1heSBiZSBxdWl0ZSBvdXRkYXRlZC4KKworaW5jbHVkZSBsZXR0ZXJzLWxhdGluLmN0aQorCithbHdheXMgJ2IgMjMKK2Fsd2F5cyAnZCAxMjQ2CithbHdheXMga3cgMTIzNDUKK2Fsd2F5cyBrJyA0NgorYWx3YXlzIG5nIDM0NgorYWx3YXlzIHQnIDIzNDU2CithbHdheXMgY2ggMTYKK2Fsd2F5cyBzaCAxNDYKK2Fsd2F5cyAneSAzCithbHdheXMgYXUgMjQ2CithbHdheXMgdHMgMzQKZGlmZiAtLWdpdCBhL1RhYmxlcy9Db250cmFjdGlvbi9pZC5jdGIgYi9UYWJsZXMvQ29udHJhY3Rpb24vaWQuY3RiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM2M2Q3ZWYKLS0tIC9kZXYvbnVsbAorKysgYi9UYWJsZXMvQ29udHJhY3Rpb24vaWQuY3RiCkBAIC0wLDAgKzEsNTAgQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyMgICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisjCisjIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyMKKyMgQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjIEJSTFRUWSBDb250cmFjdGlvbiBUYWJsZSAtIEluZG9uZXNpYW4gKGNvbnRyYWN0ZWQpCisjCisjIFNhbXVlbCBUaGliYXVsdCA8c2FtdWVsLnRoaWJhdWx0QGVucy1seW9uLm9yZz4KKyMgCisjIFRoaXMgdGFibGUgaXMgYmFzZWQgb24gdGhlIFVuZXNjbyByZXBvcnQgb24gdGhlIHByb2dyZXNzIG9mIHVuaWZpY2F0aW9uIG9mCisjIGJyYWlsbGUgd3JpdGluZyDCq8KgTCfDiUNSSVRVUkUgQlJBSUxMRSBEQU5TIExFIE1PTkRFwqDCuywgYnkgU2lyIENsdXRoYQorIyBNQUNLRU5aSUU6IGh0dHA6Ly91bmVzZG9jLnVuZXNjby5vcmcvaW1hZ2VzLzAwMTMvMDAxMzUyLzEzNTI1MWZvLnBkZgorIyBUaGUgZG9jdW1lbnQgaXMgZGF0ZWQgMTk1NCwgc28gdGhpcyB0YWJsZSBtYXkgYmUgcXVpdGUgb3V0ZGF0ZWQuCisKK2luY2x1ZGUgbGV0dGVycy1sYXRpbi5jdGkKKworYWx3YXlzIGFpIDM0CithbHdheXMgYXUgMjQ2CithbHdheXMgc2ogMTQ2CithbHdheXMgbmcgMzQ2CithbHdheXMgY2ggMTYKKworYWx3YXlzID8gMjYKKworY2Fwc2lnbiA0NgorCitudW1zaWduIDYKK2Fsd2F5cyAwIDM0NTYKK2Fsd2F5cyAxIDE2CithbHdheXMgMiAxMjYKK2Fsd2F5cyAzIDE0NgorYWx3YXlzIDQgMTQ1NgorYWx3YXlzIDUgMTU2CithbHdheXMgNiAxMjQ2CithbHdheXMgNyAxMjQ1NgorYWx3YXlzIDggMTI1NgorYWx3YXlzIDkgMjQ2CmRpZmYgLS1naXQgYS9UYWJsZXMvQ29udHJhY3Rpb24vaXBhLmN0YiBiL1RhYmxlcy9Db250cmFjdGlvbi9pcGEuY3RiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRhY2E4ZGEKLS0tIC9kZXYvbnVsbAorKysgYi9UYWJsZXMvQ29udHJhY3Rpb24vaXBhLmN0YgpAQCAtMCwwICsxLDIyNSBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorIyAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyMKKyMgQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorIworIyBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorIworIyBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisjIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyMgbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisjCisjIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMgQlJMVFRZIENvbnRyYWN0aW9uIFRhYmxlIC0gSW50ZXJuYXRpb25hbCBQaG9uZXRpYyBBbHBoYWJldAorIworIyBTYW11ZWwgVGhpYmF1bHQgPHNhbXVlbC50aGliYXVsdEBlbnMtbHlvbi5vcmc+CisjIAorIyBUaGlzIGlzIGJhc2VkIG9uIHRoZSBJQ0VCIEJyYWlsbGUgSVBBIERyYWZ0IFRhYmxlLCBOb3YuIDMsIDIwMDUKKworIyAgICAgICAgICAgICAgIFR5cG9ncmFwaGljIERlc2NyaXB0aW9uICAgSVBBIE5vIEFydGljdWxhdG9yeSBEZXNjcmlwdGlvbgorIyBjb25zb25hbnRzCithbHdheXMgcCAxMjM0CQkjIGxvd2VyY2FzZSBwICAgICAgICAgICAgICAgICAgMTAxIHZvaWNlbGVzcyBiaWxhYmlhbCAgICAgICAgICBwbG9zaXZlCithbHdheXMgYiAxMgkJIyBsb3dlcmNhc2UgYiAgICAgICAgICAgICAgICAgIDEwMiB2b2ljZWQgICAgYmlsYWJpYWwgICAgICAgICAgcGxvc2l2ZQorYWx3YXlzIHQgMjM0NQkJIyBsb3dlcmNhc2UgdCAgICAgICAgICAgICAgICAgIDEwMyB2b2ljZWxlc3MgYWx2ZW9sYXIgICAgICAgICAgcGxvc2l2ZQorYWx3YXlzIGQgMTQ1CQkjIGxvd2VyY2FzZSBkICAgICAgICAgICAgICAgICAgMTA0IHZvaWNlZCAgICBhbHZlb2xhciAgICAgICAgICBwbG9zaXZlCithbHdheXMgyoggMjU2LTIzNDUJIyByaWdodC10YWlsIHQgICAgICAgICAgICAgICAgIDEwNSB2b2ljZWxlc3MgcmV0cm9mbGV4ICAgICAgICAgcGxvc2l2ZQorYWx3YXlzIMmWIDI1Ni0xNDUJIyByaWdodC10YWlsIGQgICAgICAgICAgICAgICAgIDEwNiB2b2ljZWQgICAgcmV0cm9mbGV4ICAgICAgICAgcGxvc2l2ZQorYWx3YXlzIGMgMTQJCSMgbG93ZXJjYXNlIGMgICAgICAgICAgICAgICAgICAxMDcgdm9pY2VsZXNzIHBhbGF0YWwgICAgICAgICAgIHBsb3NpdmUKK2Fsd2F5cyDJnyAzNS0yNDUJCSMgYmFycmVkIGRvdGxlc3MgaiAgICAgICAgICAgICAxMDggdm9pY2VkICAgIHBhbGF0YWwgICAgICAgICAgIHBsb3NpdmUKK2Fsd2F5cyBrIDEzCQkjIGxvd2VyY2FzZSBrICAgICAgICAgICAgICAgICAgMTA5IHZvaWNlbGVzcyB2ZWxhciAgICAgICAgICAgICBwbG9zaXZlCithbHdheXMgyaEgMTI0NQkJIyBsb3dlcmNhc2Ugc2NyaXB0IGcgICAgICAgICAgIDExMCB2b2ljZWQgICAgdmVsYXIgICAgICAgICAgICAgcGxvc2l2ZQorYWx3YXlzIGcgMTI0NQkJIyBsb3dlcmNhc2UgZyAgICAgICAgICAgICAgICAgIDExMCB2b2ljZWQgICAgdmVsYXIgICAgICAgICAgICAgcGxvc2l2ZSAoYWx0LiBnbHlwaCkKK2Fsd2F5cyBxIDEyMzQ1CQkjIGxvd2VyY2FzZSBxICAgICAgICAgICAgICAgICAgMTExIHZvaWNlbGVzcyB1dnVsYXIgICAgICAgICAgICBwbG9zaXZlCithbHdheXMgyaIgMzUtMTI0NQkjIHNtYWxsIGNhcGl0YWwgZyAgICAgICAgICAgICAgMTEyIHZvaWNlZCAgICB1dnVsYXIgICAgICAgICAgICBwbG9zaXZlCithbHdheXMgypQgMjMJCSMgZ2xvdHRhbCBzdG9wICAgICAgICAgICAgICAgICAxMTMgZ2xvdHRhbCAgICAgICAgICAgICAgICAgICAgIHBsb3NpdmUKK2Fsd2F5cyBtIDEzNAkJIyBsb3dlcmNhc2UgbSAgICAgICAgICAgICAgICAgIDExNCB2b2ljZWQgICAgYmlsYWJpYWwgICAgICAgICAgbmFzYWwKK2Fsd2F5cyDJsSAyMzUtMTM0CSMgbGVmdC10YWlsIG0gKGF0IHJpZ2h0KSAgICAgICAxMTUgdm9pY2VkICAgIGxhYmlvZGVudGFsICAgICAgIG5hc2FsCithbHdheXMgbiAxMzQ1CQkjIGxvd2VyY2FzZSBuICAgICAgICAgICAgICAgICAgMTE2IHZvaWNlZCAgICBhbHZlb2xhciAgICAgICAgICBuYXNhbAorYWx3YXlzIMmzIDI1Ni0xMzQ1CSMgcmlnaHQtdGFpbCBuICAgICAgICAgICAgICAgICAxMTcgdm9pY2VkICAgIHJldHJvZmxleCAgICAgICAgIG5hc2FsCithbHdheXMgybIgMTIzNDU2CQkjIGxlZnQtdGFpbCBuIChhdCBsZWZ0KSAgICAgICAgMTE4IHZvaWNlZCAgICBwYWxhdGFsICAgICAgICAgICBuYXNhbAorYWx3YXlzIMWLIDEyNDYJCSMgZW5nICAgICAgICAgICAgICAgICAgICAgICAgICAxMTkgdm9pY2VkICAgIHZlbGFyICAgICAgICAgICAgIG5hc2FsCithbHdheXMgybQgMzUtMTM0NQkjIHNtYWxsIGNhcGl0YWwgbiAgICAgICAgICAgICAgMTIwIHZvaWNlZCAgICB1dnVsYXIgICAgICAgICAgICBuYXNhbAorYWx3YXlzIMqZIDM1LTEyCQkjIHNtYWxsIGNhcGl0YWwgYiAgICAgICAgICAgICAgMTIxIHZvaWNlZCAgICBiaWxhYmlhbCAgICAgICAgICB0cmlsbAorYWx3YXlzIHIgMTIzNQkJIyBsb3dlcmNhc2UgciAgICAgICAgICAgICAgICAgIDEyMiB2b2ljZWQgICAgYWx2ZW9sYXIgICAgICAgICAgdHJpbGwKK2Fsd2F5cyDKgCAzNS0xMjM1CSMgc21hbGwgY2FwaXRhbCByICAgICAgICAgICAgICAxMjMgdm9pY2VkICAgIHV2dWxhciAgICAgICAgICAgIHRyaWxsCisjICAgICAgICAgIDIzNS0xMjM2CSMgcmlnaHQtaG9vayB2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmlvZGVudGFsICAgICAgIGZsYXAKK2Fsd2F5cyDJviAyMzUtMTIzNQkjIGZpc2gtaG9vayByICAgICAgICAgICAgICAgICAgMTI0IHZvaWNlZCAgICBhbHZlb2xhciAgICAgICAgICB0YXAKK2Fsd2F5cyDJvSAyNTYtMTIzNQkjIHJpZ2h0LXRhaWwgciAgICAgICAgICAgICAgICAgMTI1IHZvaWNlZCAgICByZXRyb2ZsZXggICAgICAgICBmbGFwCithbHdheXMgybggNDYtMTI0CQkjIHBoaSAgICAgICAgICAgICAgICAgICAgICAgICAgMTI2IHZvaWNlbGVzcyBiaWxhYmlhbCAgICAgICAgICBmcmljYXRpdmUKK2Fsd2F5cyDOsiA0Ni0xMgkJIyBiZXRhICAgICAgICAgICAgICAgICAgICAgICAgIDEyNyB2b2ljZWQgICAgYmlsYWJpYWwgICAgICAgICAgZnJpY2F0aXZlCithbHdheXMgZiAxMjQJCSMgbG93ZXJjYXNlIGYgICAgICAgICAgICAgICAgICAxMjggdm9pY2VsZXNzIGxhYmlvZGVudGFsICAgICAgIGZyaWNhdGl2ZQorYWx3YXlzIHYgMTIzNgkJIyBsb3dlcmNhc2UgdiAgICAgICAgICAgICAgICAgIDEyOSB2b2ljZWQgICAgbGFiaW9kZW50YWwgICAgICAgZnJpY2F0aXZlCithbHdheXMgzrggNDYtMTQ1NgkjIHRoZXRhICAgICAgICAgICAgICAgICAgICAgICAgMTMwIHZvaWNlbGVzcyBkZW50YWwgICAgICAgICAgICBmcmljYXRpdmUKK2Fsd2F5cyDDsCAxMjQ1NgkJIyBlZGggICAgICAgICAgICAgICAgICAgICAgICAgIDEzMSB2b2ljZWQgICAgZGVudGFsICAgICAgICAgICAgZnJpY2F0aXZlCithbHdheXMgcyAyMzQJCSMgbG93ZXJjYXNlIHMgICAgICAgICAgICAgICAgICAxMzIgdm9pY2VsZXNzIGFsdmVvbGFyICAgICAgICAgIGZyaWNhdGl2ZQorYWx3YXlzIHogMTM1NgkJIyBsb3dlcmNhc2UgeiAgICAgICAgICAgICAgICAgIDEzMyB2b2ljZWQgICAgYWx2ZW9sYXIgICAgICAgICAgZnJpY2F0aXZlCithbHdheXMgyoMgMTU2CQkjIGVzaCAgICAgICAgICAgICAgICAgICAgICAgICAgMTM0IHZvaWNlbGVzcyBwb3N0YWx2ZW9sYXIgICAgICBmcmljYXRpdmUKK2Fsd2F5cyDKkiAyMzQ2CQkjIHlvZ2ggICAgICAgICAgICAgICAgICAgICAgICAgMTM1IHZvaWNlZCAgICBwb3N0YWx2ZW9sYXIgICAgICBmcmljYXRpdmUKK2Fsd2F5cyDKgiAyNTYtMjM0CSMgcmlnaHQtdGFpbCBzIChhdCBsZWZ0KSAgICAgICAxMzYgdm9pY2VsZXNzIHJldHJvZmxleCAgICAgICAgIGZyaWNhdGl2ZQorYWx3YXlzIMqQIDI1Ni0xMzU2CSMgcmlnaHQtdGFpbCB6ICAgICAgICAgICAgICAgICAxMzcgdm9pY2VkICAgIHJldHJvZmxleCAgICAgICAgIGZyaWNhdGl2ZQorYWx3YXlzIMOnIDIzNS0xNAkJIyBjIGNlZGlsbGEgICAgICAgICAgICAgICAgICAgIDEzOCB2b2ljZWxlc3MgcGFsYXRhbCAgICAgICAgICAgZnJpY2F0aXZlCithbHdheXMgyp0gMjM2LTI0NQkjIGN1cmx5LXRhaWwgaiAgICAgICAgICAgICAgICAgMTM5IHZvaWNlZCAgICBwYWxhdGFsICAgICAgICAgICBmcmljYXRpdmUKK2Fsd2F5cyB4IDEzNDYJCSMgbG93ZXJjYXNlIHggICAgICAgICAgICAgICAgICAxNDAgdm9pY2VsZXNzIHZlbGFyICAgICAgICAgICAgIGZyaWNhdGl2ZQorYWx3YXlzIMmjIDQ2LTEyNDUJIyBnYW1tYSAgICAgICAgICAgICAgICAgICAgICAgIDE0MSB2b2ljZWQgICAgdmVsYXIgICAgICAgICAgICAgZnJpY2F0aXZlCithbHdheXMgz4cgNDYtMTIzNDYJIyBjaGkgICAgICAgICAgICAgICAgICAgICAgICAgIDE0MiB2b2ljZWxlc3MgdXZ1bGFyICAgICAgICAgICAgZnJpY2F0aXZlCithbHdheXMgyoEgMzUtMzQ1NgkjIGludmVydGVkIHNtYWxsIGNhcGl0YWwgciAgICAgMTQzIHZvaWNlZCAgICB1dnVsYXIgICAgICAgICAgICBmcmljYXRpdmUKK2Fsd2F5cyDEpyAyMzUtMTI1CSMgY3Jvc3NlZCBoICAgICAgICAgICAgICAgICAgICAxNDQgdm9pY2VsZXNzIHBoYXJ5bmdlYWwgICAgICAgIGZyaWNhdGl2ZQorYWx3YXlzIMqVIDIzNS0yMwkJIyByZXZlcnNlZCBnbG90dGFsIHN0b3AgICAgICAgIDE0NSB2b2ljZWQgICAgcGhhcnluZ2VhbCAgICAgICAgZnJpY2F0aXZlCithbHdheXMgaCAxMjUJCSMgbG93ZXJjYXNlIGggICAgICAgICAgICAgICAgICAxNDYgdm9pY2VsZXNzIGdsb3R0YWwgICAgICAgICAgIGZyaWNhdGl2ZQorYWx3YXlzIMmmIDIzNi0xMjUJIyBob29rdG9wIGggICAgICAgICAgICAgICAgICAgIDE0NyB2b2ljZWQgICAgZ2xvdHRhbCAgICAgICAgICAgZnJpY2F0aXZlCithbHdheXMgyawgMjM2LTEyMwkjIGJlbHRlZCBsICAgICAgICAgICAgICAgICAgICAgMTQ4IHZvaWNlbGVzcyBhbHZlb2xhciBsYXRlcmFsICBmcmljYXRpdmUKK2Fsd2F5cyDJriAxMjMtNS0yMzQ2CSMgbC15b2doIGRpZ3JhcGggICAgICAgICAgICAgIDE0OSB2b2ljZWQgICAgYWx2ZW9sYXIgbGF0ZXJhbCAgZnJpY2F0aXZlCithbHdheXMgyosgMjM2LTEyMzYJIyBzY3JpcHQgdiAgICAgICAgICAgICAgICAgICAgIDE1MCB2b2ljZWQgICAgbGFiaW9kZW50YWwgICAgICAgYXBwcm94aW1hbnQKK2Fsd2F5cyDJuSAzNDU2CQkjIHR1cm5lZCByICAgICAgICAgICAgICAgICAgICAgMTUxIHZvaWNlZCAgICAocG9zdClhbHZlb2xhciAgICBhcHByb3hpbWFudAorYWx3YXlzIMm7IDI1Ni0zNDU2CSMgdHVybmVkIHIsIHJpZ2h0IHRhaWwgICAgICAgICAxNTIgdm9pY2VkICAgIHJldHJvZmxleCAgICAgICAgIGFwcHJveGltYW50CithbHdheXMgaiAyNDUJCSMgbG93ZXJjYXNlIGogICAgICAgICAgICAgICAgICAxNTMgdm9pY2VkICAgIHBhbGF0YWwgICAgICAgICAgIGFwcHJveGltYW50CithbHdheXMgybAgMjM2LTEzNAkjIHR1cm5lZCBtLCByaWdodCBsZWcgICAgICAgICAgMTU0IHZvaWNlZCAgICB2ZWxhciAgICAgICAgICAgICBhcHByb3hpbWFudAorYWx3YXlzIGwgMTIzCQkjIGxvd2VyY2FzZSBsICAgICAgICAgICAgICAgICAgMTU1IHZvaWNlZCAgICBhbHZlb2xhciBsYXRlcmFsICBhcHByb3hpbWFudAorYWx3YXlzIMmtIDI1Ni0xMjMJIyByaWdodC10YWlsIGwgICAgICAgICAgICAgICAgIDE1NiB2b2ljZWQgICAgcmV0cm9mbGV4IGxhdGVyYWwgYXBwcm94aWFudAorYWx3YXlzIMqOIDIzNi0xMzQ1NgkjIHR1cm5lZCB5ICAgICAgICAgICAgICAgICAgICAgMTU3IHZvaWNlZCAgICBwYWxhdGFsIGxhdGVyYWwgICBhcHByb3hpbWFudAorYWx3YXlzIMqfIDM1LTEyMwkJIyBzbWFsbCBjYXBpdGFsIGwgICAgICAgICAgICAgIDE1OCB2b2ljZWQgICAgdmVsYXIgbGF0ZXJhbCAgICAgYXBwcm94aW1hbnQKK2Fsd2F5cyDJkyAyMzYtMTIJCSMgaG9va3RvcCBiICAgICAgICAgICAgICAgICAgICAxNjAgdm9pY2VkICAgIGJpbGFiaWFsICAgICAgICAgIGltcGxvc2l2ZQorYWx3YXlzIMmXIDIzNi0xNDUJIyBob29rdG9wIGQgICAgICAgICAgICAgICAgICAgIDE2MiB2b2ljZWQgICAgZGVudGFsL2FsdmVvbGFyICAgaW1wbG9zaXZlCithbHdheXMgyoQgMjM2LTM1LTI0NQkjIGhvb2t0b3AgYmFycmVkIGRvdGxlc3MgaiAgICAxNjQgdm9pY2VkICAgIHBhbGF0YWwgICAgICAgICAgIGltcGxvc2l2ZQorYWx3YXlzIMmgIDIzNi0xMjQ1CSMgaG9va3RvcCBnICAgICAgICAgICAgICAgICAgICAxNjYgdm9pY2VkICAgIHZlbGFyICAgICAgICAgICAgIGltcGxvc2l2ZQorYWx3YXlzIMqbIDIzNi0zNS0xMjQ1CSMgaG9va3RvcCBzbWFsbCBjYXBpdGFsIGcgICAgIDE2OCB2b2ljZWQgICAgdXZ1bGFyICAgICAgICAgICAgaW1wbG9zaXZlCithbHdheXMgyo0gMjM1LTI0NTYJIyB0dXJuZWQgdyAgICAgICAgICAgICAgICAgICAgIDE2OSB2b2ljZWxlc3MgbGFiaWFsLXZlbGFyICAgICAgZnJpY2F0aXZlCithbHdheXMgdyAyNDU2CQkjIGxvd2VyY2FzZSB3ICAgICAgICAgICAgICAgICAgMTcwIHZvaWNlZCAgICBsYWJpYWwtdmVsYXIgICAgICBhcHByb3hpbWFudAorYWx3YXlzIMmlIDI1Ni0xMjUJIyB0dXJuZWQgaCAgICAgICAgICAgICAgICAgICAgIDE3MSB2b2ljZWQgICAgbGFiaWFsLXBhbGF0YWwgICAgYXBwcm94aW1hbnQKK2Fsd2F5cyDKnCAzNS0xMjUJCSMgc21hbGwgY2FwaXRhbCBoICAgICAgICAgICAgICAxNzIgdm9pY2VsZXNzIGVwaWdsb3R0YWwgICAgICAgIGZyaWNhdGl2ZQorYWx3YXlzIMqhIDIzNi0yMwkJIyBiYXJyZWQgZ2xvdHRhbCBzdG9wICAgICAgICAgIDE3MyAgICAgICAgICAgZXBpZ2xvdHRhbCAgICAgICAgcGxvc2l2ZQorYWx3YXlzIMqiIDM1LTIzCQkjIGJhcnJlZCByZXZlcnNlZCBnbG90dGFsIHN0b3AgMTc0IHZvaWNlZCAgICBlcGlnbG90dGFsICAgICAgICBmcmljYXRpdmUKK2Fsd2F5cyDJpyAyMzYtMTI0NgkjIGhvb2tlZCBlbmcgICAgICAgICAgICAgICAgICAgMTc1IHZvaWNlbGVzcyBtdWx0aXBsZS1wbGFjZSAgICBmcmljYXRpdmUKK2Fsd2F5cyDKmCAxMjM0Ni0xMjM0CSMgYnVsbCdzIGV5ZSAgICAgICAgICAgICAgICAgICAxNzYgICAgICAgICAgIGJpbGFiaWFsICAgICAgICAgIGNsaWNrCithbHdheXMgx4AgMTIzNDYtMTQ1NgkjIHBpcGUgICAgICAgICAgICAgICAgICAgICAgICAgMTc3ICAgICAgICAgICBkZW50YWwgICAgICAgICAgICBjbGljaworYWx3YXlzIMeDIDEyMzQ2LTIzNDUJIyBleGNsYW1hdGlvbiBwb2ludCAgICAgICAgICAgIDE3OCAgICAgICAgICAgKHBvc3QtKWFsdmVvbGFyICAgY2xpY2sKK2Fsd2F5cyDHgiAxMjM0Ni0xNTYJIyBkb3VibGUtYmFycmVkIHBpcGUgICAgICAgICAgIDE3OSAgICAgICAgICAgcGFsYXRvYWx2ZW9sYXIgICAgY2xpY2sKK2Fsd2F5cyDHgSAxMjM0Ni0xMjMJIyBkb3VibGUgcGlwZSAgICAgICAgICAgICAgICAgIDE4MCAgICAgICAgICAgYWx2ZW9sYXIgbGF0ZXJhbCAgY2xpY2sKK2Fsd2F5cyDJuiAyMzYtMzQ1NgkjIHR1cm5lZCBsb25nLWxlZyByICAgICAgICAgICAgMTgxIHZvaWNlZCAgICBhbHZlb2xhciBsYXRlcmFsICBmbGFwCithbHdheXMgyZUgMjM2LTE0CQkjIGN1cmx5LXRhaWwgYyAgICAgICAgICAgICAgICAgMTgyIHZvaWNlbGVzcyBhbHZlb2xvcGFsYXRhbCAgICBmcmljYXRpdmUKK2Fsd2F5cyDKkSAyMzYtMTM1NgkjIGN1cmx5LXRhaWwgeiAgICAgICAgICAgICAgICAgMTgzIHZvaWNlZCAgICBhbHZlb2xvcGFsYXRhbCAgICBmcmljYXRpdmUKK2Fsd2F5cyDJqyAyMzUtMTIzCSMgbG93ZXJjYXNlIGwgd2l0aCB0aWxkZSAgICAgICAyMDkgdmVsYXJpemVkIHZvaWNlZCBhbHZlb2xhciAgIGxhdGVyYWwKK2Fsd2F5cyDKoyAxNDUtNS0xMzU2CSMgZC16IGRpZ3JhcGggICAgICAgICAgICAgICAgICAgICB2b2ljZWQgICAgYWx2ZW9sYXIgICAgICAgICAgYWZmcmljYXRlCithbHdheXMgyqQgMTQ1LTUtMjM0NgkjIGQteW9naCBkaWdyYXBoICAgICAgICAgICAgICAgICAgdm9pY2VkICAgIHBvc3RhbHZlb2xhciAgICAgIGFmZnJpY2F0ZQorYWx3YXlzIMqlIDE0NS01LTIzNi0xMzU2CSMgZC1jdXJseS10YWlsLXogZGlncmFwaCAgICAgICAgIHZvaWNlZCAgICBhbHZlb2xvcGFsYXRhbCAgICBhZmZyaWNhdGUKK2Fsd2F5cyDKpiAyMzQ1LTUtMjM0CSMgdC1zIGRpZ3JhcGggICAgICAgICAgICAgICAgICAgICB2b2ljZWxlc3MgYWx2ZW9sYXIgICAgICAgICAgYWZmcmljYXRlCithbHdheXMgyqcgMjM0NS01LTE1NgkjIHQtZXNoIGRpZ3JhcGggICAgICAgICAgICAgICAgICAgdm9pY2VsZXNzIHBvc3RhbHZlb2xhciAgICAgIGFmZnJpY2F0ZQorYWx3YXlzIMqoIDIzNDUtNS0yMzYtMTQJIyB0LWN1cmx5LXRhaWwtYyBkaWdyYXBoICAgICAgICAgdm9pY2VsZXNzIGFsdmVvbG9wYWxhdGFsICAgIGFmZnJpY2F0ZQorCisjIFZveWVscworYWx3YXlzIGkgMjQJCSMgbG93ZXJjYXNlIGkgICAgICAgICAgICAgICAgICAzMDEgY2xvc2UgICAgICBmcm9udCAgICB1bnJvdW5kZWQgdm93ZWwKK2Fsd2F5cyBlIDE1CQkjIGxvd2VyY2FzZSBlICAgICAgICAgICAgICAgICAgMzAyIGNsb3NlLW1pZCAgZnJvbnQgICAgdW5yb3VuZGVkIHZvd2VsCithbHdheXMgyZsgMzQ1CQkjIGVwc2lsb24gICAgICAgICAgICAgICAgICAgICAgMzAzIG9wZW4tbWlkICAgZnJvbnQgICAgdW5yb3VuZGVkIHZvd2VsCithbHdheXMgYSAxCQkjIGxvd2VyY2FzZSBhICAgICAgICAgICAgICAgICAgMzA0IG9wZW4gICAgICAgZnJvbnQgICAgdW5yb3VuZGVkIHZvd2VsCithbHdheXMgyZEgMTYJCSMgc2NyaXB0IGEgICAgICAgICAgICAgICAgICAgICAzMDUgb3BlbiAgICAgICBiYWNrICAgICB1bnJvdW5kZWQgdm93ZWwKK2Fsd2F5cyDJlCAxMjYJCSMgb3BlbiBvICAgICAgICAgICAgICAgICAgICAgICAzMDYgb3Blbi1taWQgICBiYWNrICAgICAgIHJvdW5kZWQgdm93ZWwKK2Fsd2F5cyBvIDEzNQkJIyBsb3dlcmNhc2UgbyAgICAgICAgICAgICAgICAgIDMwNyBjbG9zZS1taWQgIGJhY2sgICAgICAgcm91bmRlZCB2b3dlbAorYWx3YXlzIHUgMTM2CQkjIGxvd2VyY2FzZSB1ICAgICAgICAgICAgICAgICAgMzA4IGNsb3NlICAgICAgYmFjayAgICAgICByb3VuZGVkIHZvd2VsCithbHdheXMgeSAxMzQ1NgkJIyBsb3dlcmNhc2UgeSAgICAgICAgICAgICAgICAgIDMwOSBjbG9zZSAgICAgIGZyb250ICAgICAgcm91bmRlZCB2b3dlbAorYWx3YXlzIMO4IDEyNTYJCSMgc2xhc2hlZCBvICAgICAgICAgICAgICAgICAgICAzMTAgY2xvc2UtbWlkICBmcm9udCAgICAgIHJvdW5kZWQgdm93ZWwKK2Fsd2F5cyDFkyAyNDYJCSMgby1lIGRpZ3JhcGggICAgICAgICAgICAgICAgICAzMTEgb3Blbi1taWQgICBmcm9udCAgICAgIHJvdW5kZWQgdm93ZWwKK2Fsd2F5cyDJtiAzNS0yNDYJCSMgc21hbGwgY2FwaXRhbCBvLWUgZGlncmFwaCAgICAzMTIgb3BlbiAgICAgICBmcm9udCAgICAgIHJvdW5kZWQgdm93ZWwKK2Fsd2F5cyDJkiAyMzUtMTYJCSMgdHVybmVkIHNjcmlwdCBhICAgICAgICAgICAgICAzMTMgb3BlbiAgICAgICBiYWNrICAgICAgIHJvdW5kZWQgdm93ZWwKK2Fsd2F5cyDKjCAzNDYJCSMgdHVybmVkIHYgKGNhcmV0KSAgICAgICAgICAgICAzMTQgb3Blbi1taWQgICBiYWNrICAgICB1bnJvdW5kZWQgdm93ZWwKK2Fsd2F5cyDJpCAyMzUtMTM1CSMgcmFtJ3MgaG9ybnMgICAgICAgICAgICAgICAgICAzMTUgY2xvc2UtbWlkICBiYWNrICAgICB1bnJvdW5kZWQgdm93ZWwKK2Fsd2F5cyDJryAyMzUtMTM2CSMgdHVybmVkIG0gICAgICAgICAgICAgICAgICAgICAzMTYgY2xvc2UgICAgICBiYWNrICAgICB1bnJvdW5kZWQgdm93ZWwKK2Fsd2F5cyDJqCAzNTYtMjQJCSMgYmFycmVkIGkgICAgICAgICAgICAgICAgICAgICAzMTcgY2xvc2UgICAgICBjZW50cmFsICB1bnJvdW5kZWQgdm93ZWwKK2Fsd2F5cyDKiSAzNTYtMTM2CSMgYmFycmVkIHUgICAgICAgICAgICAgICAgICAgICAzMTggY2xvc2UgICAgICBjZW50cmFsICAgIHJvdW5kZWQgdm93ZWwKK2Fsd2F5cyDJqiAzNAkJIyBzbWFsbCBjYXBpdGFsIGkgICAgICAgICAgICAgIDMxOSBuZWFyLWNsb3NlIGZyb250ICAgIHVucm91bmRlZCB2b3dlbAorYWx3YXlzIMqPIDM1LTEzNDU2CSMgc21hbGwgY2FwaXRhbCB5ICAgICAgICAgICAgICAzMjAgbmVhci1jbG9zZSBmcm9udCAgICAgIHJvdW5kZWQgdm93ZWwKK2Fsd2F5cyDKiiAxMjM1NgkJIyB1cHNpbG9uICAgICAgICAgICAgICAgICAgICAgIDMyMSBuZWFyLWNsb3NlIGJhY2sgICAgICAgcm91bmRlZCB2b3dlbAorYWx3YXlzIMmZIDI2CQkjIHNjaHdhICAgICAgICAgICAgICAgICAgICAgICAgMzIyIG1pZCAgICAgICAgY2VudHJhbCAgdW5yb3VuZGVkIHZvd2VsCithbHdheXMgybUgMzU2LTEzNQkjIGJhcnJlZCBvICAgICAgICAgICAgICAgICAgICAgMzIzIGNsb3NlLW1pZCAgY2VudHJhbCAgICByb3VuZGVkIHZvd2VsCithbHdheXMgyZAgMjM1LTEJCSMgdHVybmVkIGEgICAgICAgICAgICAgICAgICAgICAzMjQgbmVhci1vcGVuICBjZW50cmFsICB1bnJvdW5kZWQgdm93ZWwKK2Fsd2F5cyDDpiAxNDYJCSMgYXNoICAgICAgICAgICAgICAgICAgICAgICAgICAzMjUgbmVhci1vcGVuICBmcm9udCAgICB1bnJvdW5kZWQgdm93ZWwKK2Fsd2F5cyDJnCAyMzUtMzQ1CSMgcmV2ZXJzZWQgZXBzaWxvbiAgICAgICAgICAgICAzMjYgb3Blbi1taWQgICBjZW50cmFsICB1bnJvdW5kZWQgdm93ZWwKK2Fsd2F5cyDJmiAyNi01LTEyMzUJIyBzY2h3YSB3aXRoIGhvb2sgICAgICAgICAgICAgMzI3IHJob3RhY2l6ZWQgc2Nod2EKK2Fsd2F5cyDJniAyMzYtMzQ1CSMgY2xvc2VkIHJldmVyc2VkIGVwc2lsb24gICAgICAzOTUgb3Blbi1taWQgICBjZW50cmFsICAgIHJvdW5kZWQgdm93ZWwKK2Fsd2F5cyDJmCAyMzUtMTUJCSMgcmV2ZXJzZWQgZSAgICAgICAgICAgICAgICAgICAzOTcgb3Blbi1taWQgICBjZW50cmFsICB1bnJvdW5kZWQgdm93ZWwKKworYWx3YXlzIMq8IDUtMwkJIyBhcG9zdHJvcGhlICAgICAgICAgICAgICAgICAgIDQwMSBlamVjdGl2ZQorYWx3YXlzICDMpSA2LTEyNDYJCSMgcmluZyBiZWxvdyAgICAgICAgICAgICAgICAgICA0MDIgdm9pY2VsZXNzCithbHdheXMgIMyKIDQtMTI0NgkJIyByaW5nIGFib3ZlICAgICAgICAgICAgICAgICAgIDQwMiB2b2ljZWxlc3MKK2Fsd2F5cyAgzKwgNi0yMzYJCSMgd2VkZ2UgYmVsb3cgICAgICAgICAgICAgICAgICA0MDMgdm9pY2VkCithbHdheXMgyrAgNC0xMjUJCSMgc3VwZXJzY3JpcHQgaCAgICAgICAgICAgICAgICA0MDQgYXNwaXJhdGVkCithbHdheXMgIMykIDYtMjUJCSMgdW1sYXV0IGJlbG93ICAgICAgICAgICAgICAgICA0MDUgYnJlYXRoeSB2b2ljZWQKK2Fsd2F5cyAgzLAgNi0xMjQ1NgkjIHRpbGRlIGJlbG93ICAgICAgICAgICAgICAgICAgNDA2IGNyZWFreSB2b2ljZWQKK2Fsd2F5cyAgzLwgNi0xMjM0NgkjIHNlYWd1bGwgYmVsb3cgICAgICAgICAgICAgICAgNDA3IGxpbmd1b2xhYmlhbAorYWx3YXlzICDMqiA2LTE0NTYJCSMgYnJpZGdlIGJlbG93ICAgICAgICAgICAgICAgICA0MDggZGVudGFsCithbHdheXMgIMy6IDYtMjM1LTE0NTYJIyBpbnZlcnRlZCBicmlkZ2UgYmVsb3cgICAgICAgNDA5IGFwaWNhbAorYWx3YXlzICDMuyA2LTIzNTYJCSMgc3F1YXJlIGJlbG93ICAgICAgICAgICAgICAgICA0MTAgbGFtaW5hbAorYWx3YXlzICDMuSA2LTEzNQkJIyByaWdodCBoYWxmLXJpbmcgYmVsb3cgICAgICAgIDQxMSBtb3JlIHJvdW5kZWQKK2Fsd2F5cyAgzJwgNi0yNDYJCSMgbGVmdCBoYWxmLXJpbmcgYmVsb3cgICAgICAgICA0MTIgbGVzcyByb3VuZGVkCithbHdheXMgIMyfIDYtMzQ2CQkjIHBsdXMgYmVsb3cgICAgICAgICAgICAgICAgICAgNDEzIGFkdmFuY2VkCithbHdheXMgIMygIDYtMzYJCSMgbWludXMgYmVsb3cgICAgICAgICAgICAgICAgICA0MTQgcmV0cmFjdGVkCithbHdheXMgIMyIIDQtMjUJCSMgdW1sYXV0IGFib3ZlICAgICAgICAgICAgICAgICA0MTUgY2VudHJhbGl6ZWQKK2Fsd2F5cyAgzL0gNC0xMzQ2CQkjIG92ZXItY3Jvc3MgYWJvdmUgICAgICAgICAgICAgNDE2IG1pZC1jZW50cmFsaXplZAorYWx3YXlzICDMmCA2LTE1NgkJIyBhZHZhbmNpbmcgc2lnbiBiZWxvdyAgICAgICAgIDQxNyBhZHZhbmNlZCB0b25ndWUgcm9vdAorYWx3YXlzICDMmSA2LTIzNAkJIyByZXRyYWN0aW5nIHNpZ24gYmVsb3cgICAgICAgIDQxOCByZXRyYWN0ZWQgdG9uZ3VlIHJvb3QKK2Fsd2F5cyDLniA1LTEyMzUJCSMgcmlnaHQgaG9vayAgICAgICAgICAgICAgICAgICA0MTkgcmhvdGFjaXplZAorYWx3YXlzIMq3IDQtMjQ1NgkJIyBzdXBlcnNjcmlwdCB3ICAgICAgICAgICAgICAgIDQyMCBsYWJpYWxpemVkCithbHdheXMgyrIgNC0yNDUJCSMgc3VwZXJzY3JpcHQgaiAgICAgICAgICAgICAgICA0MjEgcGFsYXRhbGl6ZWQKK2Fsd2F5cyDLoCA0LTQ2LTEyNDUJIyBzdXBlcnNjcmlwdCBnYW1tYSAgICAgICAgICAgNDIyIHZlbGFyaXplZAorYWx3YXlzIMukIDQtMjM1LTIzCSMgc3VwZXJzY3JpcHQgcmV2ZXJzZWQgZ2xvdHRhbCBzdG9wIDQyMyBwaGFyeW5nZWFsaXplZAorYWx3YXlzICDMgyA0LTEyNDU2CSMgdGlsZWQgYWJvdmUgICAgICAgICAgICAgICAgICA0MjQgbmFzYWxpemVkCithbHdheXMg4oG/IDQtMTM0NQkJIyBzdXBlcnNjcmlwdCBuICAgICAgICAgICAgICAgIDQyNSBuYXNhbCByZWxlYXNlCithbHdheXMgy6EgNC0xMjMJCSMgc3VwZXJzY3JpcHQgbCAgICAgICAgICAgICAgICA0MjYgbGF0ZXJhbCByZWxlYXNlCithbHdheXMgIMyaIDQtMTQ1CQkjIGNvcm5lciBhYm92ZSAgICAgICAgICAgICAgICAgNDI3IG5vIGF1ZGlibGUgcmVsZWFzZQorYWx3YXlzICDMtCA1LTEyNDU2CSMgc3VwZXJpbXBvc2VkIHRpbGRlICAgICAgICAgICA0MjggdmVsYXJpemVkIG9yIHBoYXJ5bmdlYWxpemVkCithbHdheXMgIMydIDYtMzQ1CQkjIHJhaXNpbmcgc2lnbiBiZWxvdyAgICAgICAgICAgNDI5IHJhaXNlZAorYWx3YXlzICDMniA2LTEyNgkJIyBsb3dlcmluZyBzaWduIGJlbG93ICAgICAgICAgIDQzMCBsb3dlcmVkCithbHdheXMgIMypIDYtMjMJCSMgdmVydGljYWwgbGluZSBiZWxvdyAgICAgICAgICA0MzEgc3lsbGFiaWMKK2Fsd2F5cyAgzK8gNi0yMzQ1NgkjIGFyY2ggYmVsb3cgICAgICAgICAgICAgICAgICAgNDMyIG5vbi1zeWxsYWJpYworYWx3YXlzICDNoSA1CQkjIHRvcCB0aWUgYmFyICAgICAgICAgICAgICAgICAgNDMzIGRvdWJsZSBhcnRpY3VsYXRpb24KK2Fsd2F5cyAsIDIJCSMgY29tbWEgICAgICAgICAgICAgICAgICAgICAgICA0OTEgKHB1bmN0dWF0aW9uKQorCithbHdheXMgy4ggNDU2LTEyCQkjIHZlcnRpY2FsIHN0cm9rZSAoc3VwZXJpb3IpICAgNTAxIChwcmltYXJ5KSBzdHJlc3MgbWFyaworYWx3YXlzIMuMIDQ1Ni0yMwkJIyB2ZXJ0aWNhbCBzdHJva2UgKGluZmVyaW9yKSAgIDUwMiBzZWNvbmRhcnkgc3RyZXNzIG1hcmsKK2Fsd2F5cyDLkCAyNQkJIyBsZW5ndGggbWFyayAgICAgICAgICAgICAgICAgIDUwMyBsZW5ndGggbWFyaworYWx3YXlzIMuRIDUtMgkJIyBoYWxmLWxlbmd0aCBtYXJrICAgICAgICAgICAgIDUwNCBoYWxmLWxlbmd0aAorYWx3YXlzICDMhiA0LTEyMzU2CSMgYnJldmUgYWJvdmUgICAgICAgICAgICAgICAgICA1MDUgZXh0cmEtc2hvcnQKK2Fsd2F5cyAuIDMJCSMgcGVyaW9kICAgICAgICAgICAgICAgICAgICAgICA1MDYgc3lsbGFibGUgYnJlYWsKK2Fsd2F5cyB8IDQ1Ni0xMjU2CSMgdmVydGljYWwgbGluZSAgICAgICAgICAgICAgICA1MDcgbWlub3IgKGZvb3QpIGdyb3VwCithbHdheXMg4oCWIDQ1Ni0xMjM0NTYJIyBkb3VibGUgdmVydGljYWwgbGluZSAgICAgICAgIDUwOCBtYWpvciAoaW50b25hdGlvbikgZ3JvdXAKK2Fsd2F5cyDigL8gNDU2LTEyMwkjIGJvdHRvbSB0aWUgYmFyICAgICAgICAgICAgICAgNTA5IGxpbmtpbmcgKGFic2VuY2Ugb2YgYSBicmVhaykKK2Fsd2F5cyDihpcgNDU2LTE0NQkjIHVwd2FyZCBkaWFnb25hbCBhcnJvdyAgICAgICAgNTEwIGdsb2JhbCByaXNlCithbHdheXMg4oaYIDQ1Ni0zNTYJIyBkb3dud2FyZCBkaWFnb25hbCBhcnJvdyAgICAgIDUxMSBnbG9iYWwgZmFsbAorYWx3YXlzICDMiyA0LTYtMzQJCSMgZG91YmxlIGFjdXRlIGFjY2VudCBhYm92ZSAgIDUxMiBleHRyYSBoaWdoIHRvbmUKK2Fsd2F5cyAgzIEgNC0zNAkJIyBhY3V0ZSBhY2NlbnQgYWJvdmUgICAgICAgICAgIDUxMyBoaWdoIHRvbmUKK2Fsd2F5cyAgzIQgNC0xNAkJIyBtYWNyb24gYWJvdmUgICAgICAgICAgICAgICAgIDUxNCBtaWQgdG9uZQorYWx3YXlzICDMgCA0LTE2CQkjIGdyYXZlIGFjY2VudCBhYm92ZSAgICAgICAgICAgNTE1IGxvdyB0b25lCithbHdheXMgIMyPIDQtNi0xNgkJIyBkb3VibGUgZ3JhdmUgYWNjZW50IGFib3ZlICAgNTE2IGV4dHJhIGxvdyB0b25lCithbHdheXMg4oaTIDQ1Ni0yMzQ2CSMgZG93biBhcnJvdyAgICAgICAgICAgICAgICAgICA1MTcgZG93bnN0ZXAKK2Fsd2F5cyDihpEgNDU2LTEyNDYJIyB1cCBhcnJvdyAgICAgICAgICAgICAgICAgICAgIDUxOCB1cHN0ZXAKK2Fsd2F5cyDLpSA0NTYtNC0xNAkjIGV4dHJhLWhpZ2ggdG9uZSBiYXIgKDU1KSAgICA1MTkgZXh0cmEgaGlnaHQgdG9uZQorYWx3YXlzIMumIDQ1Ni0xNAkJIyBoaWdoIHRvbmUgYmFyICg0NCkgICAgICAgICAgIDUyMCBoaWdodCB0b25lCithbHdheXMgy6cgNDU2LTI1CQkjIG1pZCB0b25lIGJhciAoMzMpICAgICAgICAgICAgNTIxIG1pZCB0b25lCithbHdheXMgy6ggNDU2LTM2CQkjIGxvdyB0b25lIGJhciAoMjIpICAgICAgICAgICAgNTIyIGxvdyB0b25lCithbHdheXMgy6kgNDU2LTYtMzYJIyBleHRyYS1sb3cgdG9uZSBiYXIgKDExKSAgICAgNTIzIGV4dHJhIGxvdyB0b25lCithbHdheXMgIMyMIDQtMjM2CQkjIHdlZGdlIGFib3ZlICAgICAgICAgICAgICAgICAgNTI0IHJpc2luZyB0b25lCisjICAgICAgICAgIDQ1Ni0zNAkjIHJpc2luZyB0b25lIGJhciAoMTUpICAgICAgICAgICAgIHJpc2luZyB0b25lCithbHdheXMgIMyCIDQtMTQ2CQkjIGNpcmN1bWZsZXggYWJvdmUgICAgICAgICAgICAgNTI1IGZhbGxpbmcgdG9uZQorIyAgICAgICAgICA0NTYtMTYJIyBmYWxsaW5nIHRvbmUgYmFyICgxNSkgICAgICAgICAgICBmYWxsaW5nIHRvbmUKK2Fsd2F5cyDvhbEgNC0yNAkJIyBtYWNyby1hY3V0ZSBhYm92ZSAgICAgICAgICAgIDUyNiBoaWdoLXJpc2luZyB0b25lCisjICAgICAgICAgIDQ1Ni0yNAkjIGhpZ2gtcmlzaW5nIHRvbmUgYmFyICgzNSkgICAgICAgIGhpZ2gtcmlzaW5nIHRvbmUKK2Fsd2F5cyDvhbIgNC0zNQkJIyBncmF2ZS1tYWNybyBhYm92ZSAgICAgICAgICAgIDUyNyBsb3ctcmlzaW5nIHRvbmUKKyMgICAgICAgICAgNDU2LTM1CSMgbG93LXJpc2luZyB0b25lIGJhciAoMTMpICAgICAgICAgbG93LXJpc2luZyB0b25lCithbHdheXMg74W1IDQtMjU2CQkjIGdyYXZlLWFjdXRlLWdyYXZlIGFib3ZlICAgICAgNTI4IHJpc2luZy1mYWxsaW5nIHRvbmUKKworIyBhbHNvIHVzZWQgZm9yIHN3aXRjaCBpbnRvL291dCBpbnRvL291dCBvZiBwaG9uZXRpYyBjb2RlLgorYWx3YXlzIFsgNDUtMTIzNTYJIyBsZWZ0IHNxdWFyZSBicmFja2V0ICAgICAgICAgIDkwMSBvcGVuaW5nIHBob25ldGljIGJyYWNrZXRzCithbHdheXMgXSA0NS0yMzQ1NgkjIHJpZ2h0IHNxdWFyZSBicmFja2V0ICAgICAgICAgOTAyIGNsb3NpbmcgcGhvbmV0aWMgYnJhY2tldHMKKworYWx3YXlzIC8gNDUtMzQJCSMgc2xhc2ggICAgICAgICAgICAgICAgICAgICAgICAgICAgcGhvbmVtaWMgZW5jbG9zdXJlCithbHdheXMg4oaSIDQ1Ni0xMzUJIyByaWdodHdhcmQgYXJyb3cgICAgICAgICAgICAgICAgICBiZWNvbWVzIChpcyByZWFsaXplZCBhcykKK2Fsd2F5cyAtIDM2CQkjIGh5cGhlbiAoZGFzaCkgICAgICAgICAgICAgICAgICAgIChwdW5jdHVhdGlvbikKKworIyA1NgkJIyBUaGUgZm9sbG93aW5nIHN5bWJvbCBpcyBub24tSVBBIGFuZCBzaG91bGQgYmUgcmVhZCBpbiBhY2NvcmRhbmNlIHdpdGggdGhlIHByaW1hcnkgYnJhaWxsZSBjb2RlIG9mIHRoZSBkb2N1bWVudAorIyA1Ni01NgkJIyBUaGUgZm9sbG93aW5nIHBhc3NhZ2UgaXMgbm9uLUlQQSBhbmQgc2hvdWxkIGJlIHJlYWQgaW4gYWNjb3JkYW5jZSB3aXRoIHRoZSBwcmltYXJ5IGJyYWlsbGUgY29kZSBvZiB0aGUgZG9jdW1lbnQKKyMgNTYtMjMJCSMgVGVybWluYXRlcyBhIHBhc3NhZ2Ugb2Ygbm9uLUlQQSB0ZXh0ZSAob3BlbmVkIGJ5IDU2LTU2KTsgcmV0dXJuIHRvIElQQSBjb2RlCmRpZmYgLS1naXQgYS9UYWJsZXMvQ29udHJhY3Rpb24vamEuY3RiIGIvVGFibGVzL0NvbnRyYWN0aW9uL2phLmN0YgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43M2MwMzg5Ci0tLSAvZGV2L251bGwKKysrIGIvVGFibGVzL0NvbnRyYWN0aW9uL2phLmN0YgpAQCAtMCwwICsxLDQ5MCBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorIyAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyMKKyMgQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorIworIyBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorIworIyBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisjIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyMgbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisjCisjIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMgQlJMVFRZIENvbnRyYWN0aW9uIFRhYmxlIC0gSmFwYW5lc2UgKHVuY29udHJhY3RlZCkKKyMKKyMgQ29weXJpZ2h0IChDKSAyMDA1IGJ5IFN1biBNaWNyb3N5c3RlbXMgSW5jLiwgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgVGFibGUgZ2VuZXJhdGVkIGJ5IEJpbGwgSGFuZW1hbiA8YmlsbGhAZ25vbWUub3JnPgorIyBmb3IgZ25vbWUtYnJhaWxsZSAoY3ZzIG1vZHVsZSBnbm9tZS1icmFpbGxlLCBjdnMuZ25vbWUub3JnKQorIworIyBBZGFwdGVkIGZvciBCUkxUVFkgYnkgU2FtdWVsIFRoaWJhdWx0IDxzYW11ZWwudGhpYmF1bHRAZW5zLWx5b24ub3JnPgorCisjIGthdGFrYW5hCithbHdheXMg44KhIDEKK2Fsd2F5cyDjgqIgMQorYWx3YXlzIOOCpCAxMgorYWx3YXlzIOOCpSAxNAorYWx3YXlzIOOCpiAxNAorYWx3YXlzIOOCpyAxMjQKK2Fsd2F5cyDjgqggMTI0CithbHdheXMg44KqIDI0CithbHdheXMg44KrIDE2CithbHdheXMg44KtIDEyNgorYWx3YXlzIOOCryAxNDYKK2Fsd2F5cyDjgrEgMTI0NgorYWx3YXlzIOOCsyAyNDYKK2Fsd2F5cyDjgrUgMTU2CithbHdheXMg44K3IDEyNTYKK2Fsd2F5cyDjgrkgMTQ1NgorYWx3YXlzIOOCuyAxMjQ1NgorYWx3YXlzIOOCvSAyNDU2CithbHdheXMg44K/IDEzNQorYWx3YXlzIOODgSAxMjM1CithbHdheXMg44OEIDE0MzUKK2Fsd2F5cyDjg4YgMTI0MzUKK2Fsd2F5cyDjg4ggMjQzNQorYWx3YXlzIOODiiAxMworYWx3YXlzIOODiyAxMjMKK2Fsd2F5cyDjg4wgMTQzCithbHdheXMg44ONIDEyNDMKK2Fsd2F5cyDjg44gMjQzCithbHdheXMg44OPIDEzNgorYWx3YXlzIOODkiAxMjM2CithbHdheXMg44OVIDE0MzYKK2Fsd2F5cyDjg5ggMTI0MzYKK2Fsd2F5cyDjg5sgMjQzNgorYWx3YXlzIOODniAxMzU2CithbHdheXMg44OfIDEyMzU2CithbHdheXMg44OgIDE0MzU2CithbHdheXMg44OhIDEyNDM1NgorYWx3YXlzIOODoiAyNDM1NgorYWx3YXlzIOODpCAzNAorYWx3YXlzIOODpiAzNDYKK2Fsd2F5cyDjg6cgMzQ1CithbHdheXMg44OoIDM0NQorYWx3YXlzIOODqSAxNQorYWx3YXlzIOODqiAxMjUKK2Fsd2F5cyDjg6sgMTQ1CithbHdheXMg44OsIDEyNDUKK2Fsd2F5cyDjg60gMjQ1CithbHdheXMg44OvIDMKK2Fsd2F5cyDjg7IgMzUKK2Fsd2F5cyDjg7MgMzU2CithbHdheXMg44ODIDIKK2Fsd2F5cyDjgqwgNS0xNgorYWx3YXlzIOOCriA1LTEyNgorYWx3YXlzIOOCsCA1LTE0NgorYWx3YXlzIOOCsiA1LTEyNDYKK2Fsd2F5cyDjgrQgNS0yNDYKK2Fsd2F5cyDjgrYgNS0xNTYKK2Fsd2F5cyDjgrggNS0xMjU2CithbHdheXMg44K6IDUtMTQ1NgorYWx3YXlzIOOCvCA1LTEyNDU2CithbHdheXMg44K+IDUtMjQ1NgorYWx3YXlzIOODgCA1LTEzNQorYWx3YXlzIOODgiA1LTEyMzUKK2Fsd2F5cyDjg4UgNS0xNDM1CithbHdheXMg44OHIDUtMTI0MzUKK2Fsd2F5cyDjg4kgNS0yNDM1CithbHdheXMg44OQIDUtMTM2CithbHdheXMg44OTIDUtMTIzNgorYWx3YXlzIOODliA1LTE0MzYKK2Fsd2F5cyDjg5kgNS0xMjQzNgorYWx3YXlzIOODnCA1LTI0MzYKK2Fsd2F5cyDjg5EgNi0xMzYKK2Fsd2F5cyDjg5QgNi0xMjM2CithbHdheXMg44OXIDYtMTQzNgorYWx3YXlzIOODmiA2LTEyNDM2CithbHdheXMg44OdIDYtMjQzNgorCisjIGhhbGZ3aWR0aCBjaGFycworYWx3YXlzIO+9piAzNQorYWx3YXlzIO+9sSAxCithbHdheXMg772nIDEKK2Fsd2F5cyDvvbIgMTIKK2Fsd2F5cyDvvaggMTIKK2Fsd2F5cyDvvbMgMTQKK2Fsd2F5cyDvvakgMTQKK2Fsd2F5cyDvvbQgMTI0CithbHdheXMg772qIDEyNAorYWx3YXlzIO+9tSAyNAorYWx3YXlzIO+9qyAyNAorYWx3YXlzIO+9tiAxNgorYWx3YXlzIO+9tyAxMjYKK2Fsd2F5cyDvvbggMTQ2CithbHdheXMg7725IDEyNDYKK2Fsd2F5cyDvvbogMjQ2CithbHdheXMg7727IDE1NgorYWx3YXlzIO+9vCAxMjU2CithbHdheXMg7729IDE0NTYKK2Fsd2F5cyDvvb4gMTI0NTYKK2Fsd2F5cyDvvb8gMjQ1NgorYWx3YXlzIO++gCAxMzUKK2Fsd2F5cyDvvoEgMTIzNQorYWx3YXlzIO+9ryAxNDM1CithbHdheXMg776CIDE0MzUKK2Fsd2F5cyDvvoMgMTI0MzUKK2Fsd2F5cyDvvoQgMjQzNQorYWx3YXlzIO++hSAxMworYWx3YXlzIO++hiAxMjMKK2Fsd2F5cyDvvocgMTQzCithbHdheXMg776IIDEyNDMKK2Fsd2F5cyDvvokgMjQzCithbHdheXMg776KIDEzNgorYWx3YXlzIO++iyAxMjM2CithbHdheXMg776MIDE0MzYKK2Fsd2F5cyDvvo0gMTI0MzYKK2Fsd2F5cyDvvo4gMjQzNgorYWx3YXlzIO++jyAxMzU2CithbHdheXMg776QIDEyMzU2CithbHdheXMg776RIDE0MzU2CithbHdheXMg776SIDEyNDM1NgorYWx3YXlzIO++kyAyNDM1NgorYWx3YXlzIO+9rCAzNAorYWx3YXlzIO++lCAzNAorYWx3YXlzIO+9rSAzNDYKK2Fsd2F5cyDvvpUgMzQ2CithbHdheXMg772uIDM0NQorYWx3YXlzIO++liAzNDUKK2Fsd2F5cyDvvpcgMTUKK2Fsd2F5cyDvvpggMTI1CithbHdheXMg776ZIDE0NQorYWx3YXlzIO++miAxMjQ1CithbHdheXMg776bIDI0NQorYWx3YXlzIO++nCAzCithbHdheXMg776dIDM1NgorCisjIGhpcmVnYW5hCithbHdheXMg44GCIDEKK2Fsd2F5cyDjgYQgMTIKK2Fsd2F5cyDjgYYgMTQKK2Fsd2F5cyDjgYggMTI0CithbHdheXMg44GKIDI0CithbHdheXMg44GLIDE2CithbHdheXMg44GNIDEyNgorYWx3YXlzIOOBjyAxNDYKK2Fsd2F5cyDjgZEgMTI0NgorYWx3YXlzIOOBkyAyNDYKK2Fsd2F5cyDjgZUgMTU2CithbHdheXMg44GXIDEyNTYKK2Fsd2F5cyDjgZkgMTQ1NgorYWx3YXlzIOOBmyAxMjQ1NgorYWx3YXlzIOOBnSAyNDU2CithbHdheXMg44GfIDEzNQorYWx3YXlzIOOBoSAxMjM1CithbHdheXMg44GkIDE0MzUKK2Fsd2F5cyDjgaYgMTI0MzUKK2Fsd2F5cyDjgaggMjQzNQorYWx3YXlzIOOBqiAxMworYWx3YXlzIOOBqyAxMjMKK2Fsd2F5cyDjgawgMTQzCithbHdheXMg44GtIDEyNDMKK2Fsd2F5cyDjga4gMjQzCithbHdheXMg44GvIDEzNgorYWx3YXlzIOOBsiAxMjM2CithbHdheXMg44G1IDE0MzYKK2Fsd2F5cyDjgbggMTI0MzYKK2Fsd2F5cyDjgbsgMjQzNgorYWx3YXlzIOOBviAxMzU2CithbHdheXMg44G/IDEyMzU2CithbHdheXMg44KAIDE0MzU2CithbHdheXMg44KBIDEyNDM1NgorYWx3YXlzIOOCgiAyNDM1NgorYWx3YXlzIOOChCAzNAorYWx3YXlzIOOChiAzNDYKK2Fsd2F5cyDjgoggMzQ1CithbHdheXMg44KJIDE1CithbHdheXMg44KKIDEyNQorYWx3YXlzIOOCiyAxNDUKK2Fsd2F5cyDjgowgMTI0NQorYWx3YXlzIOOCjSAyNDUKK2Fsd2F5cyDjgo8gMworYWx3YXlzIOOCkiAzNQorYWx3YXlzIOOCkyAzNTYKK2Fsd2F5cyDjgaMgMgorYWx3YXlzIOOBjCA1LTE2CithbHdheXMg44GOIDUtMTI2CithbHdheXMg44GQIDUtMTQ2CithbHdheXMg44GSIDUtMTI0NgorYWx3YXlzIOOBlCA1LTI0NgorYWx3YXlzIOOBliA1LTE1NgorYWx3YXlzIOOBmCA1LTEyNTYKK2Fsd2F5cyDjgZogNS0xNDU2CithbHdheXMg44GcIDUtMTI0NTYKK2Fsd2F5cyDjgZ4gNS0yNDU2CithbHdheXMg44GgIDUtMTM1CithbHdheXMg44GiIDUtMTIzNQorYWx3YXlzIOOBpSA1LTE0MzUKK2Fsd2F5cyDjgacgNS0xMjQzNQorYWx3YXlzIOOBqSA1LTI0MzUKK2Fsd2F5cyDjgbAgNS0xMzYKK2Fsd2F5cyDjgbMgNS0xMjM2CithbHdheXMg44G2IDUtMTQzNgorYWx3YXlzIOOBuSA1LTEyNDM2CithbHdheXMg44G8IDUtMjQzNgorYWx3YXlzIOOBsSA2LTEzNgorYWx3YXlzIOOBtCA2LTEyMzYKK2Fsd2F5cyDjgbcgNi0xNDM2CithbHdheXMg44G6IDYtMTI0MzYKK2Fsd2F5cyDjgb0gNi0yNDM2CisKKyMgY2hlY2sgdGhpczogZGlncmFwaCAneW9yaScKK2Fsd2F5cyDjgp8gNDM1LTEyNQorCithbHdheXMg44CCIDI1NgorYWx3YXlzIOOAgSA1NgorYWx3YXlzIO+9pCA1NgorYWx3YXlzIO+9oSAyNTYKK2Fsd2F5cyAiIDM2CithbHdheXMgPyAyNgorYWx3YXlzICEgMjM1CithbHdheXMgKCAyMzU2CithbHdheXMgKSAyMzU2CithbHdheXMgLCA1NgorYWx3YXlzIC4gMjU2CithbHdheXMg44O8IDI1CisKK2Fsd2F5cyDjg7sgNQorYWx3YXlzIOODvyAyNDYtMjYKKworbnVtc2lnbiAzNDU2CisKKyMgWW91LW9uIGZvciB5YSBzdWZmaXgsIHl1LCBldGMuCithbHdheXMg44Kr44OjIDQtMTYKK2Fsd2F5cyDjgrXjg6MgNC0xNTYKK2Fsd2F5cyDjgr/jg6MgNC0xMzUKK2Fsd2F5cyDjg4rjg6MgNC0xMworYWx3YXlzIOODj+ODoyA0LTEzNgorYWx3YXlzIOODnuODoyA0LTEzNTYKK2Fsd2F5cyDjg6njg6MgNC0xNQorYWx3YXlzIOOCrOODoyA0NS0xNgorYWx3YXlzIOOCtuODoyA0NS0xNTYKK2Fsd2F5cyDjg4Djg6MgNDUtMTM1CithbHdheXMg44OQ44OjIDQ1LTEzNgorYWx3YXlzIOODkeODoyA0Ni0xMzYKKworYWx3YXlzIO+9tu+9rCAgIDQtMTYKK2Fsd2F5cyDvvbvvvawgICA0LTE1NgorYWx3YXlzIO++gO+9rCAgIDQtMTM1CithbHdheXMg776F772sICAgNC0xMworYWx3YXlzIO++iu+9rCAgIDQtMTM2CithbHdheXMg776P772sICAgNC0xMzU2CithbHdheXMg776X772sICAgNC0xNQorCithbHdheXMg44GL44KDIDQtMTYKK2Fsd2F5cyDjgZXjgoMgNC0xNTYKK2Fsd2F5cyDjgZ/jgoMgNC0xMzUKK2Fsd2F5cyDjgarjgoMgNC0xMworYWx3YXlzIOOBr+OCgyA0LTEzNgorYWx3YXlzIOOBvuOCgyA0LTEzNTYKK2Fsd2F5cyDjgonjgoMgNC0xNQorYWx3YXlzIOOBjOOCgyA0NS0xNgorYWx3YXlzIOOBluOCgyA0NS0xNTYKK2Fsd2F5cyDjgaDjgoMgNDUtMTM1CithbHdheXMg44Gw44KDIDQ1LTEzNgorYWx3YXlzIOOBseOCgyA0Ni0xMzYKKworYWx3YXlzIOOCr+ODpSA0LTE0NgorYWx3YXlzIOOCueODpSA0LTE0NTYKK2Fsd2F5cyDjg4Tjg6UgNC0xNDM1CithbHdheXMg44OM44OlIDQtMTQzCithbHdheXMg44OV44OlIDQtMTQzNgorYWx3YXlzIOODoOODpSA0LTE0MzU2CithbHdheXMg44Op44OlIDQtMTQ1CithbHdheXMg44Ks44OlIDQ1LTE0NgorYWx3YXlzIOOCtuODpSA0NS0xNDU2CithbHdheXMg44K444OlIDQ1LTE0MzUKK2Fsd2F5cyDjg5Djg6UgNDUtMTQzNgorYWx3YXlzIOODkeODpSA0Ni0xNDM2CisKK2Fsd2F5cyDvvbjvva0gICA0LTE0NgorYWx3YXlzIO+9ve+9rSAgIDQtMTQ1NgorYWx3YXlzIO++gu+9rSAgIDQtMTQzNQorYWx3YXlzIO++h++9rSAgIDQtMTQzCithbHdheXMg776M772tICAgNC0xNDM2CithbHdheXMg776R772tICAgNC0xNDM1NgorYWx3YXlzIO++l++9rSAgIDQtMTQ1CisKK2Fsd2F5cyDjgY/jgoUgNC0xNDYKK2Fsd2F5cyDjgZnjgoUgNC0xNDU2CithbHdheXMg44Gk44KFIDQtMTQzNQorYWx3YXlzIOOBrOOChSA0LTE0MworYWx3YXlzIOOBteOChSA0LTE0MzYKK2Fsd2F5cyDjgoDjgoUgNC0xNDM1NgorYWx3YXlzIOOCieOChSA0LTE0NQorYWx3YXlzIOOBjOOChSA0NS0xNDYKK2Fsd2F5cyDjgZbjgoUgNDUtMTQ1NgorYWx3YXlzIOOBmOOChSA0NS0xNDM1CithbHdheXMg44Gw44KFIDQ1LTE0MzYKK2Fsd2F5cyDjgbHjgoUgNDYtMTQzNgorCithbHdheXMg44Kz44OnIDQtMjQ2CithbHdheXMg44K944OnIDQtMjQ1NgorYWx3YXlzIOODiOODpyA0LTI0MzUKK2Fsd2F5cyDjg47jg6cgNC0yNDMKK2Fsd2F5cyDjg5vjg6cgNC0yNDM2CithbHdheXMg44Oi44OnIDQtMjQzNTYKK2Fsd2F5cyDjg63jg6cgNC0yNDUKK2Fsd2F5cyDjgrTjg6cgNDUtMjQ2CithbHdheXMg44K+44OnIDQ1LTI0NTYKK2Fsd2F5cyDjg4Ljg6cgNDUtMjQzNQorYWx3YXlzIOODnOODpyA0NS0yNDMKK2Fsd2F5cyDjg53jg6cgNDYtMjQzCisKK2Fsd2F5cyDvvbrvva4gICA0LTI0NgorYWx3YXlzIO+9v++9riAgIDQtMjQ1NgorYWx3YXlzIO++hO+9riAgIDQtMjQzNQorYWx3YXlzIO++ie+9riAgIDQtMjQzCithbHdheXMg776O772uICAgNC0yNDM2CithbHdheXMg776T772uICAgNC0yNDM1NgorCithbHdheXMg44GT44KHIDQtMjQ2CithbHdheXMg44Gd44KHIDQtMjQ1NgorYWx3YXlzIOOBqOOChyA0LTI0MzUKK2Fsd2F5cyDjga7jgocgNC0yNDMKK2Fsd2F5cyDjgbvjgocgNC0yNDM2CithbHdheXMg44KC44KHIDQtMjQzNTYKK2Fsd2F5cyDjgo3jgocgNC0yNDUKK2Fsd2F5cyDjgZTjgocgNDUtMjQ2CithbHdheXMg44Ge44KHIDQ1LTI0NTYKK2Fsd2F5cyDjgaLjgocgNDUtMjQzNQorYWx3YXlzIOOBvOOChyA0NS0yNDMKK2Fsd2F5cyDjgb3jgocgNDYtMjQzCisKKyMgdm93ZWwgc3VmZml4IGNvbnRleHRzCisKKyMgeWUKK2Fsd2F5cyDjgqTjgqcgNC0xMjQKK2Fsd2F5cyAg772y772qICA0LTEyNAorYWx3YXlzIOOBhOOBhyA0LTEyNAorCisjIHdpCithbHdheXMg44Km44KjIDM1LTEyCithbHdheXMgIO+9s++9qCAgMzUtMTIKK2Fsd2F5cyDjgYbjgYMgMzUtMTIKKworIyB3ZQorYWx3YXlzIOOCpuOCpyAzNS0xMjQKK2Fsd2F5cyAg772z772qICAzNS0xMjQKK2Fsd2F5cyDjgYbjgYcgMzUtMTI0CisKKyMgd28KK2Fsd2F5cyDjgqbjgqkgMzUtMjQKK2Fsd2F5cyAg772z772rICAzNS0yNAorYWx3YXlzIOOBhuOBiSAzNS0yNAorCisjIHRzYQorYWx3YXlzIOODhOOCoSAyNi0xMzUKK2Fsd2F5cyAg776C772nICAyNi0xMzUKK2Fsd2F5cyDjgaTjgYEgMjYtMTM1CisKKyMgdHNpCithbHdheXMg44OE44KjIDI2LTEyMzUKK2Fsd2F5cyAg776C772oICAyNi0xMjM1CithbHdheXMg44Gk44GDIDI2LTEyMzUKKworIyB0c2UKK2Fsd2F5cyDjg4TjgqcgMjYtMTI0MzUKK2Fsd2F5cyAg776C772qICAyNi0xMjQzNQorYWx3YXlzIOOBpOOBhyAyNi0xMjQzNQorCisjIHRzbworYWx3YXlzIOODhOOCqSAyNi0yNDM1CithbHdheXMgIO++gu+9qyAgMjYtMjQzNQorYWx3YXlzIOOBpOOBiSAyNi0yNDM1CisKKyMgZmEKK2Fsd2F5cyDjg5XjgqEgMjYtMTM2CithbHdheXMgIO++jO+9pyAgMjYtMTM2CithbHdheXMg44G144GBIDI2LTEzNgorCisjIGZpCithbHdheXMg44OV44KjIDI2LTEyMzYKK2Fsd2F5cyAg776M772oICAyNi0xMjM2CithbHdheXMg44G144GDIDI2LTEyMzYKKworIyBmZQorYWx3YXlzIOODleOCpyAyNi0xMjQzNgorYWx3YXlzICDvvozvvaogIDI2LTEyNDM2CithbHdheXMg44G144GHIDI2LTEyNDM2CisKKyMgZm8KK2Fsd2F5cyDjg5XjgqkgMjYtMjQzNgorYWx3YXlzICDvvozvvasgIDI2LTI0MzYKK2Fsd2F5cyDjgbXjgYkgMjYtMjQzNgorCisjIHZhCithbHdheXMg44OW44KhIDI1Ni0xMzYKK2Fsd2F5cyDjgbbjgYEgMjU2LTEzNgorCisjIHZpCithbHdheXMg44OW44KjIDI1Ni0xMjM2CithbHdheXMg44G244GDIDI1Ni0xMjM2CisKKyPCoHZ1IAorYWx3YXlzIOODluOCpSAyLTE0CithbHdheXMg44G244GFIDItMTQKKworIyB2ZQorYWx3YXlzIOODluOCpyAyNTYtMTI0MzYKK2Fsd2F5cyDjgbbjgYcgMjU2LTEyNDM2CisKKyMgdm8KK2Fsd2F5cyDjg5bjgqkgMjU2LTI0MzYKK2Fsd2F5cyDjgbbjgYkgMjU2LTI0MzYKKworIyBzeWUKK2Fsd2F5cyDjgrfjgqcgNC0xMjQ1NgorYWx3YXlzICDvvbzvvaogIDQtMTI0NTYKK2Fsd2F5cyDjgZfjgYcgNC0xMjQ1NgorCisjIGplCithbHdheXMg44K444KnIDQ1LTEyNDU2CithbHdheXMg44GY44GHIDQ1LTEyNDU2CisKKyMgdHllCithbHdheXMg44OB44KnIDQtMTI0MzUKK2Fsd2F5cyAg776B772qICA0LTEyNDM1CithbHdheXMg44Gh44GHIDQtMTI0MzUKKworIyB0eWkKK2Fsd2F5cyDjg4bjgqMgNC0xMjM1CithbHdheXMgIO++g++9qCAgNC0xMjM1CithbHdheXMg44Gm44GDIDQtMTIzNQorCisjIGR5aQorYWx3YXlzIOODh+OCoyAxNC0xMjM1CithbHdheXMg44Gn44GDIDE0LTEyMzUKKworIyB0d3UKK2Fsd2F5cyDjg4jjgqUgMjYtMTQzNQorYWx3YXlzICDvvoTvvakgIDI2LTE0MzUKK2Fsd2F5cyDjgajjgYUgMjYtMTQzNQorCisjIGR3dQorYWx3YXlzIOODieOCpSAyNTYtMTQzNQorYWx3YXlzIOOBqeOBhSAyNTYtMTQzNQorCisjIHR5dQorYWx3YXlzIOODhuODpSA0Ni0xNDM1CithbHdheXMgIO++g++9rSAgNDYtMTQzNQorYWx3YXlzIOOBpuOChSA0Ni0xNDM1CisKKyMgZHl1CithbHdheXMg44OHIDQ1Ni0xNDM1CithbHdheXMg44GnIDQ1Ni0xNDM1CisKKyMga3dhCithbHdheXMg44Kv44KhIDI2LTE2CithbHdheXMgIO+9uO+9pyAgMjYtMTYKK2Fsd2F5cyDjgY/jgYEgMjYtMTYKKworIyBnd2EKK2Fsd2F5cyDjgrDjgqEgMjU2LTE2CithbHdheXMg44GQ44GBIDI1Ni0xNgpkaWZmIC0tZ2l0IGEvVGFibGVzL0NvbnRyYWN0aW9uL2tvLWcwLmN0YiBiL1RhYmxlcy9Db250cmFjdGlvbi9rby1nMC5jdGIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWRjZjlkYwotLS0gL2Rldi9udWxsCisrKyBiL1RhYmxlcy9Db250cmFjdGlvbi9rby1nMC5jdGIKQEAgLTAsMCArMSwxMTYwNSBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorIyAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyMKKyMgQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorIworIyBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorIworIyBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisjIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyMgbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisjCisjIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMgQlJMVFRZIENvbnRyYWN0aW9uIFRhYmxlIC0gS29yZWFuICh1bmNvbnRyYWN0ZWQpCisjCisjIFNhbXVlbCBUaGliYXVsdCA8c2FtdWVsLnRoaWJhdWx0QGVucy1seW9uLm9yZz4KKyMKKyMgVGhpcyBpcyBtaXNzaW5nIENISVRVRVVNKiwgQ0VPTkdDSElFVU1TSU9TLCBQQU5TSU9TLCBZRVNJRVVORywgUklOSElFVUggYW5kCisjIEFSQUVBIGZvciB3aGljaCBJIGNvdWxkbid0IGZpbmQgZG9jdW1lbnRhdGlvbi4gIFBsZWFzZSBjb250YWN0IG1lIHRvIGZpeAorIyBhbnl0aGluZywgYXMgdGhpcyB0YWJsZSB3YXMgZ2VuZXJhdGVkIGZyb20gYSBDIHByb2dyYW0uCisKK2Fsd2F5cyAhIDQ1NgorYWx3YXlzIC0gMzYKK2Fsd2F5cyBudW1zaWduIDM0NTYKKworYWx3YXlzIOGEgCA0CithbHdheXMg4YSBIDQtNAorYWx3YXlzIOGEgiAxNAorYWx3YXlzIOGEgyAyNAorYWx3YXlzIOGEhCAyNC0yNAorYWx3YXlzIOGEhSA1CithbHdheXMg4YSGIDE1CithbHdheXMg4YSHIDQ1CithbHdheXMg4YSIIDQ1LTQ1CithbHdheXMg4YSJIDYKK2Fsd2F5cyDhhIogNi02CithbHdheXMg4YSLIDIzNTYKK2Fsd2F5cyDhhIwgNDYKK2Fsd2F5cyDhhI0gNDYtNDYKK2Fsd2F5cyDhhI4gNTYKK2Fsd2F5cyDhhI8gMTI0CithbHdheXMg4YSQIDEyNQorYWx3YXlzIOGEkSAxNDUKK2Fsd2F5cyDhhJIgMjQ1CithbHdheXMg4YSTIDE0LTQKK2Fsd2F5cyDhhJQgMTQtMTQKK2Fsd2F5cyDhhJUgMTQtMjQKK2Fsd2F5cyDhhJYgMTQtNDUKK2Fsd2F5cyDhhJcgMjQtNAorYWx3YXlzIOGEmCA1LTE0CithbHdheXMg4YSZIDUtNQorYWx3YXlzIOGEmiA1LTI0NQorYWx3YXlzIOGEmyA1CithbHdheXMg4YScIDE1LTQ1CithbHdheXMg4YSdIDE1CithbHdheXMg4YSeIDQ1LTQKK2Fsd2F5cyDhhJ8gNDUtMTQKK2Fsd2F5cyDhhKAgNDUtMjQKK2Fsd2F5cyDhhKEgNDUtNgorYWx3YXlzIOGEoiA0NS02LTQKK2Fsd2F5cyDhhKMgNDUtNi0yNAorYWx3YXlzIOGEpCA0NS02LTQ1CithbHdheXMg4YSlIDQ1LTYtNgorYWx3YXlzIOGEpiA0NS02LTQ2CithbHdheXMg4YSnIDQ1LTQ2CithbHdheXMg4YSoIDQ1LTU2CithbHdheXMg4YSpIDQ1LTEyNQorYWx3YXlzIOGEqiA0NS0xNDUKK2Fsd2F5cyDhhKsgNDUKK2Fsd2F5cyDhhKwgNDUtNDUKK2Fsd2F5cyDhhK0gNi00CithbHdheXMg4YSuIDYtMTQKK2Fsd2F5cyDhhK8gNi0yNAorYWx3YXlzIOGEsCA2LTUKK2Fsd2F5cyDhhLEgNi0xNQorYWx3YXlzIOGEsiA2LTQ1CithbHdheXMg4YSzIDYtNDUtNAorYWx3YXlzIOGEtCA2LTYtNgorYWx3YXlzIOGEtSA2LTIzNTYKK2Fsd2F5cyDhhLYgNi00NgorYWx3YXlzIOGEtyA2LTU2CithbHdheXMg4YS4IDYtMTI0CithbHdheXMg4YS5IDYtMTI1CithbHdheXMg4YS6IDYtMTQ1CithbHdheXMg4YS7IDYtMjQ1CithbHdheXMg4YWBIDQKK2Fsd2F5cyDhhYIgMjQKK2Fsd2F5cyDhhYMgMTUKK2Fsd2F5cyDhhYQgNDUKK2Fsd2F5cyDhhYUgNgorYWx3YXlzIOGFhyAyMzU2LTIzNTYKK2Fsd2F5cyDhhYggNDYKK2Fsd2F5cyDhhYkgNTYKK2Fsd2F5cyDhhYogMTI1CithbHdheXMg4YWLIDE0NQorYWx3YXlzIOGFjSA0Ni0yMzU2CithbHdheXMg4YWSIDU2LTEyNAorYWx3YXlzIOGFkyA1Ni0yNDUKK2Fsd2F5cyDhhZYgMTQ1LTQ1CithbHdheXMg4YWXIDE0NQorYWx3YXlzIOGFmCAyNDUtMjQ1CithbHdheXMg4YWfIDAKK2Fsd2F5cyDhhaAgMAorYWx3YXlzIOGFoSAxMjYKK2Fsd2F5cyDhhaIgMTIzNQorYWx3YXlzIOGFoyAzNDUKK2Fsd2F5cyDhhaQgMzQ1LTEyMzUKK2Fsd2F5cyDhhaUgMjM0CithbHdheXMg4YWmIDEzNDUKK2Fsd2F5cyDhhacgMTU2CithbHdheXMg4YWoIDM0CithbHdheXMg4YWpIDEzNgorYWx3YXlzIOGFqiAxMjM2CithbHdheXMg4YWrIDEyMzYtMTIzNQorYWx3YXlzIOGFrCAxMzQ1NgorYWx3YXlzIOGFrSAzNDYKK2Fsd2F5cyDhha4gMTM0CithbHdheXMg4YWvIDEyMzQKK2Fsd2F5cyDhhbAgMTIzNC0xMjM1CithbHdheXMg4YWxIDEzNC0xMjM1CithbHdheXMg4YWyIDE0NgorYWx3YXlzIOGFsyAyNDYKK2Fsd2F5cyDhhbQgMjQ1NgorYWx3YXlzIOGFtSAxMzUKK2Fsd2F5cyDhhbYgMTI2LTEzNgorYWx3YXlzIOGFtyAxMjYtMTM0CithbHdheXMg4YW4IDM0NS0xMzYKK2Fsd2F5cyDhhbkgMzQ1LTM0NgorYWx3YXlzIOGFuiAyMzQtMTM2CithbHdheXMg4YW7IDIzNC0xMzQKK2Fsd2F5cyDhhbwgMjM0LTI0NgorYWx3YXlzIOGFvSAxNTYtMTM2CithbHdheXMg4YW+IDE1Ni0xMzQKK2Fsd2F5cyDhhb8gMTM2LTIzNAorYWx3YXlzIOGGgCAxMzYtMTM0NQorYWx3YXlzIOGGgSAxMzYtMzQKK2Fsd2F5cyDhhoIgMTM2LTEzNgorYWx3YXlzIOGGgyAxMzYtMTM0CithbHdheXMg4YaEIDM0Ni0zNDUKK2Fsd2F5cyDhhoUgMzQ2LTM0NS0xMjM1CithbHdheXMg4YaGIDM0Ni0xNTYKK2Fsd2F5cyDhhocgMzQ2LTEzNgorYWx3YXlzIOGGiCAzNDYtMTM1CithbHdheXMg4YaJIDEzNC0xMjYKK2Fsd2F5cyDhhoogMTM0LTEyMzUKK2Fsd2F5cyDhhosgMTM0LTIzNC0yNDYKK2Fsd2F5cyDhhowgMTM0LTM0CithbHdheXMg4YaNIDEzNC0xMzQKK2Fsd2F5cyDhho4gMTQ2LTEyNgorYWx3YXlzIOGGjyAxNDYtMjM0CithbHdheXMg4YaQIDE0Ni0xMzQ1CithbHdheXMg4YaRIDE0Ni0xNTYKK2Fsd2F5cyDhhpIgMTQ2LTM0CithbHdheXMg4YaTIDE0Ni0xMzQKK2Fsd2F5cyDhhpQgMTQ2LTEzNQorYWx3YXlzIOGGlSAyNDYtMTM0CithbHdheXMg4YaWIDI0Ni0yNDYKK2Fsd2F5cyDhhpcgMjQ1Ni0xMzQKK2Fsd2F5cyDhhpggMTM1LTEyNgorYWx3YXlzIOGGmSAxMzUtMzQ1CithbHdheXMg4YaaIDEzNS0xMzYKK2Fsd2F5cyDhhpsgMTM1LTEzNAorYWx3YXlzIOGGnCAxMzUtMjQ2CithbHdheXMg4YaoIDEKK2Fsd2F5cyDhhqkgMS0xCithbHdheXMg4YaqIDEtMworYWx3YXlzIOGGqyAyNQorYWx3YXlzIOGGrCAyNS0xMworYWx3YXlzIOGGrSAyNS0zNTYKK2Fsd2F5cyDhhq4gMzUKK2Fsd2F5cyDhhq8gMgorYWx3YXlzIOGGsCAyLTEKK2Fsd2F5cyDhhrEgMi0yNgorYWx3YXlzIOGGsiAyLTEyCithbHdheXMg4YazIDItMworYWx3YXlzIOGGtCAyLTIzNgorYWx3YXlzIOGGtSAyLTI1NgorYWx3YXlzIOGGtiAyLTM1NgorYWx3YXlzIOGGtyAyNgorYWx3YXlzIOGGuCAxMgorYWx3YXlzIOGGuSAxMi0zCithbHdheXMg4Ya6IDMKK2Fsd2F5cyDhhrsgMy0zCithbHdheXMg4Ya8IDIzNTYKK2Fsd2F5cyDhhr0gMTMKK2Fsd2F5cyDhhr4gMjMKK2Fsd2F5cyDhhr8gMjM1CithbHdheXMg4YeAIDIzNgorYWx3YXlzIOGHgSAyNTYKK2Fsd2F5cyDhh4IgMzU2CithbHdheXMg4YeDIDEtMgorYWx3YXlzIOGHhCAxLTMtMQorYWx3YXlzIOGHhSAyNS0xCithbHdheXMg4YeGIDI1LTM1CithbHdheXMg4YeHIDI1LTMKK2Fsd2F5cyDhh4kgMjUtMjM2CithbHdheXMg4YeKIDM1LTEKK2Fsd2F5cyDhh4sgMzUtMgorYWx3YXlzIOGHjCAyLTEtMworYWx3YXlzIOGHjSAyLTI1CithbHdheXMg4YeOIDItMzUKK2Fsd2F5cyDhh48gMi0zNS0zNTYKK2Fsd2F5cyDhh5AgMi0yCithbHdheXMg4YeRIDItMjYtMQorYWx3YXlzIOGHkiAyLTI2LTMKK2Fsd2F5cyDhh5MgMi0xMi0zCithbHdheXMg4YeUIDItMTItMzU2CithbHdheXMg4YeVIDItMTIKK2Fsd2F5cyDhh5YgMi0zLTMKK2Fsd2F5cyDhh5ggMi0yMzUKK2Fsd2F5cyDhh5ogMjYtMQorYWx3YXlzIOGHmyAyNi0yCithbHdheXMg4YecIDI2LTEyCithbHdheXMg4YedIDI2LTMKK2Fsd2F5cyDhh54gMjYtMy0zCithbHdheXMg4YegIDI2LTIzCithbHdheXMg4YehIDI2LTM1NgorYWx3YXlzIOGHoiAyNgorYWx3YXlzIOGHoyAxMi0yCithbHdheXMg4YekIDEyLTI1NgorYWx3YXlzIOGHpSAxMi0zNTYKK2Fsd2F5cyDhh6YgMTIKK2Fsd2F5cyDhh6cgMy0xCithbHdheXMg4YeoIDMtMzUKK2Fsd2F5cyDhh6kgMy0yCithbHdheXMg4YeqIDMtMTIKK2Fsd2F5cyDhh6wgMQorYWx3YXlzIOGHrSAxLTEKK2Fsd2F5cyDhh64gMjM1Ni0yMzU2CithbHdheXMg4YevIDIzNQorYWx3YXlzIOGHsyAyNTYtMTIKK2Fsd2F5cyDhh7QgMjU2CithbHdheXMg4Ye1IDM1Ni0yNQorYWx3YXlzIOGHtiAzNTYtMgorYWx3YXlzIOGHtyAzNTYtMjYKK2Fsd2F5cyDhh7ggMzU2LTEyCithbHdheXMg44SxIDEKK2Fsd2F5cyDjhLIgMS0xCithbHdheXMg44SzIDEtMworYWx3YXlzIOOEtCAyNQorYWx3YXlzIOOEtSAyNS0xMworYWx3YXlzIOOEtiAyNS0zNTYKK2Fsd2F5cyDjhLcgMzUKK2Fsd2F5cyDjhLggMzUtMzUKK2Fsd2F5cyDjhLkgMgorYWx3YXlzIOOEuiAyLTEKK2Fsd2F5cyDjhLsgMi0yNgorYWx3YXlzIOOEvCAyLTEyCithbHdheXMg44S9IDItMworYWx3YXlzIOOEviAyLTIzNgorYWx3YXlzIOOEvyAyLTI1NgorYWx3YXlzIOOFgCAyLTM1NgorYWx3YXlzIOOFgSAyNgorYWx3YXlzIOOFgiAxMgorYWx3YXlzIOOFgyAxMi0xMgorYWx3YXlzIOOFhCAxMi0zCithbHdheXMg44WFIDMKK2Fsd2F5cyDjhYYgMy0zCithbHdheXMg44WHIDIzNTYKK2Fsd2F5cyDjhYggMTMKK2Fsd2F5cyDjhYkgMTMtMTMKK2Fsd2F5cyDjhYogMjMKK2Fsd2F5cyDjhYsgMjM1CithbHdheXMg44WMIDIzNgorYWx3YXlzIOOFjSAyNTYKK2Fsd2F5cyDjhY4gMzU2CithbHdheXMg44WPIDEyNgorYWx3YXlzIOOFkCAxMjM1CithbHdheXMg44WRIDM0NQorYWx3YXlzIOOFkiAzNDUtMTIzNQorYWx3YXlzIOOFkyAyMzQKK2Fsd2F5cyDjhZQgMTM0NQorYWx3YXlzIOOFlSAxNTYKK2Fsd2F5cyDjhZYgMzQKK2Fsd2F5cyDjhZcgMTM2CithbHdheXMg44WYIDEyMzYKK2Fsd2F5cyDjhZkgMTIzNi0xMjM1CithbHdheXMg44WaIDEzNDU2CithbHdheXMg44WbIDM0NgorYWx3YXlzIOOFnCAxMzQKK2Fsd2F5cyDjhZ0gMTIzNAorYWx3YXlzIOOFniAxMjM0LTEyMzUKK2Fsd2F5cyDjhZ8gMTM0LTEyMzUKK2Fsd2F5cyDjhaAgMTQ2CithbHdheXMg44WhIDI0NgorYWx3YXlzIOOFoiAyNDU2CithbHdheXMg44WjIDEzNQorYWx3YXlzIOOFpCAwCithbHdheXMg44WlIDI1LTI1CithbHdheXMg44WmIDI1LTM1CithbHdheXMg44WnIDI1LTMKK2Fsd2F5cyDjhakgMi0xLTMKK2Fsd2F5cyDjhaogMi0zNQorYWx3YXlzIOOFqyAyLTEyLTMKK2Fsd2F5cyDjha4gMjYtMTIKK2Fsd2F5cyDjha8gMjYtMworYWx3YXlzIOOFsSAyNgorYWx3YXlzIOOFsiAxMi0xCithbHdheXMg44WzIDEyLTM1CithbHdheXMg44W0IDEyLTMtMQorYWx3YXlzIOOFtSAxMi0zLTM1CithbHdheXMg44W2IDEyLTEzCithbHdheXMg44W3IDEyLTIzNgorYWx3YXlzIOOFuCAxMgorYWx3YXlzIOOFuSAxMi0xMgorYWx3YXlzIOOFuiAzLTEKK2Fsd2F5cyDjhbsgMy0yNQorYWx3YXlzIOOFvCAzLTM1CithbHdheXMg44W9IDMtMTIKK2Fsd2F5cyDjhb4gMy0xMworYWx3YXlzIOOGgCAyMzU2LTIzNTYKK2Fsd2F5cyDjhoQgMjU2CithbHdheXMg44aFIDM1Ni0zNTYKK2Fsd2F5cyDjhocgMzQ2LTM0NQorYWx3YXlzIOOGiCAzNDYtMzQ1LTEyMzUKK2Fsd2F5cyDjhokgMzQ2LTEzNQorYWx3YXlzIOOGiiAxNDYtMTU2CithbHdheXMg44aLIDE0Ni0zNAorYWx3YXlzIOOGjCAxNDYtMTM1CithbHdheXMg44iAIDEKK2Fsd2F5cyDjiIEgMjUKK2Fsd2F5cyDjiIIgMzUKK2Fsd2F5cyDjiIMgMgorYWx3YXlzIOOIhCAyNgorYWx3YXlzIOOIhSAxMgorYWx3YXlzIOOIhiAzCithbHdheXMg44iHIDIzNTYKK2Fsd2F5cyDjiIggMTMKK2Fsd2F5cyDjiIkgMjMKK2Fsd2F5cyDjiIogMjM1CithbHdheXMg44iLIDIzNgorYWx3YXlzIOOIjCAyNTYKK2Fsd2F5cyDjiI0gMzU2CithbHdheXMg44iOIDEtMTI2CithbHdheXMg44iPIDI1LTEyNgorYWx3YXlzIOOIkCAzNS0xMjYKK2Fsd2F5cyDjiJEgMi0xMjYKK2Fsd2F5cyDjiJIgMjYtMTI2CithbHdheXMg44iTIDEyLTEyNgorYWx3YXlzIOOIlCAzLTEyNgorYWx3YXlzIOOIlSAxMjYKK2Fsd2F5cyDjiJYgMTMtMTI2CithbHdheXMg44iXIDIzLTEyNgorYWx3YXlzIOOImCAyMzUtMTI2CithbHdheXMg44iZIDIzNi0xMjYKK2Fsd2F5cyDjiJogMjU2LTEyNgorYWx3YXlzIOOImyAzNTYtMTI2CithbHdheXMg44icIDEzLTEzNAorYWx3YXlzIOOJoCAxCithbHdheXMg44mhIDI1CithbHdheXMg44miIDM1CithbHdheXMg44mjIDIKK2Fsd2F5cyDjiaQgMjYKK2Fsd2F5cyDjiaUgMTIKK2Fsd2F5cyDjiaYgMworYWx3YXlzIOOJpyAyMzU2CithbHdheXMg44moIDEzCithbHdheXMg44mpIDIzCithbHdheXMg44mqIDIzNQorYWx3YXlzIOOJqyAyMzYKK2Fsd2F5cyDjiawgMjU2CithbHdheXMg44mtIDM1NgorYWx3YXlzIOOJriAxLTEyNgorYWx3YXlzIOOJryAyNS0xMjYKK2Fsd2F5cyDjibAgMzUtMTI2CithbHdheXMg44mxIDItMTI2CithbHdheXMg44myIDI2LTEyNgorYWx3YXlzIOOJsyAxMi0xMjYKK2Fsd2F5cyDjibQgMy0xMjYKK2Fsd2F5cyDjibUgMTI2CithbHdheXMg44m2IDEzLTEyNgorYWx3YXlzIOOJtyAyMy0xMjYKK2Fsd2F5cyDjibggMjM1LTEyNgorYWx3YXlzIOOJuSAyMzYtMTI2CithbHdheXMg44m6IDI1Ni0xMjYKK2Fsd2F5cyDjibsgMzU2LTEyNgorYWx3YXlzIOqwgCA0LTEyNgorYWx3YXlzIOqwgSA0LTEyNi0xCithbHdheXMg6rCCIDQtMTI2LTEtMQorYWx3YXlzIOqwgyA0LTEyNi0xLTMKK2Fsd2F5cyDqsIQgNC0xMjYtMjUKK2Fsd2F5cyDqsIUgNC0xMjYtMjUtMTMKK2Fsd2F5cyDqsIYgNC0xMjYtMjUtMzU2CithbHdheXMg6rCHIDQtMTI2LTM1CithbHdheXMg6rCIIDQtMTI2LTIKK2Fsd2F5cyDqsIkgNC0xMjYtMi0xCithbHdheXMg6rCKIDQtMTI2LTItMjYKK2Fsd2F5cyDqsIsgNC0xMjYtMi0xMgorYWx3YXlzIOqwjCA0LTEyNi0yLTMKK2Fsd2F5cyDqsI0gNC0xMjYtMi0yMzYKK2Fsd2F5cyDqsI4gNC0xMjYtMi0yNTYKK2Fsd2F5cyDqsI8gNC0xMjYtMi0zNTYKK2Fsd2F5cyDqsJAgNC0xMjYtMjYKK2Fsd2F5cyDqsJEgNC0xMjYtMTIKK2Fsd2F5cyDqsJIgNC0xMjYtMTItMworYWx3YXlzIOqwkyA0LTEyNi0zCithbHdheXMg6rCUIDQtMTI2LTMtMworYWx3YXlzIOqwlSA0LTEyNi0yMzU2CithbHdheXMg6rCWIDQtMTI2LTEzCithbHdheXMg6rCXIDQtMTI2LTIzCithbHdheXMg6rCYIDQtMTI2LTIzNQorYWx3YXlzIOqwmSA0LTEyNi0yMzYKK2Fsd2F5cyDqsJogNC0xMjYtMjU2CithbHdheXMg6rCbIDQtMTI2LTM1NgorYWx3YXlzIOqwnCA0LTEyMzUKK2Fsd2F5cyDqsJ0gNC0xMjM1LTEKK2Fsd2F5cyDqsJ4gNC0xMjM1LTEtMQorYWx3YXlzIOqwnyA0LTEyMzUtMS0zCithbHdheXMg6rCgIDQtMTIzNS0yNQorYWx3YXlzIOqwoSA0LTEyMzUtMjUtMTMKK2Fsd2F5cyDqsKIgNC0xMjM1LTI1LTM1NgorYWx3YXlzIOqwoyA0LTEyMzUtMzUKK2Fsd2F5cyDqsKQgNC0xMjM1LTIKK2Fsd2F5cyDqsKUgNC0xMjM1LTItMQorYWx3YXlzIOqwpiA0LTEyMzUtMi0yNgorYWx3YXlzIOqwpyA0LTEyMzUtMi0xMgorYWx3YXlzIOqwqCA0LTEyMzUtMi0zCithbHdheXMg6rCpIDQtMTIzNS0yLTIzNgorYWx3YXlzIOqwqiA0LTEyMzUtMi0yNTYKK2Fsd2F5cyDqsKsgNC0xMjM1LTItMzU2CithbHdheXMg6rCsIDQtMTIzNS0yNgorYWx3YXlzIOqwrSA0LTEyMzUtMTIKK2Fsd2F5cyDqsK4gNC0xMjM1LTEyLTMKK2Fsd2F5cyDqsK8gNC0xMjM1LTMKK2Fsd2F5cyDqsLAgNC0xMjM1LTMtMworYWx3YXlzIOqwsSA0LTEyMzUtMjM1NgorYWx3YXlzIOqwsiA0LTEyMzUtMTMKK2Fsd2F5cyDqsLMgNC0xMjM1LTIzCithbHdheXMg6rC0IDQtMTIzNS0yMzUKK2Fsd2F5cyDqsLUgNC0xMjM1LTIzNgorYWx3YXlzIOqwtiA0LTEyMzUtMjU2CithbHdheXMg6rC3IDQtMTIzNS0zNTYKK2Fsd2F5cyDqsLggNC0zNDUKK2Fsd2F5cyDqsLkgNC0zNDUtMQorYWx3YXlzIOqwuiA0LTM0NS0xLTEKK2Fsd2F5cyDqsLsgNC0zNDUtMS0zCithbHdheXMg6rC8IDQtMzQ1LTI1CithbHdheXMg6rC9IDQtMzQ1LTI1LTEzCithbHdheXMg6rC+IDQtMzQ1LTI1LTM1NgorYWx3YXlzIOqwvyA0LTM0NS0zNQorYWx3YXlzIOqxgCA0LTM0NS0yCithbHdheXMg6rGBIDQtMzQ1LTItMQorYWx3YXlzIOqxgiA0LTM0NS0yLTI2CithbHdheXMg6rGDIDQtMzQ1LTItMTIKK2Fsd2F5cyDqsYQgNC0zNDUtMi0zCithbHdheXMg6rGFIDQtMzQ1LTItMjM2CithbHdheXMg6rGGIDQtMzQ1LTItMjU2CithbHdheXMg6rGHIDQtMzQ1LTItMzU2CithbHdheXMg6rGIIDQtMzQ1LTI2CithbHdheXMg6rGJIDQtMzQ1LTEyCithbHdheXMg6rGKIDQtMzQ1LTEyLTMKK2Fsd2F5cyDqsYsgNC0zNDUtMworYWx3YXlzIOqxjCA0LTM0NS0zLTMKK2Fsd2F5cyDqsY0gNC0zNDUtMjM1NgorYWx3YXlzIOqxjiA0LTM0NS0xMworYWx3YXlzIOqxjyA0LTM0NS0yMworYWx3YXlzIOqxkCA0LTM0NS0yMzUKK2Fsd2F5cyDqsZEgNC0zNDUtMjM2CithbHdheXMg6rGSIDQtMzQ1LTI1NgorYWx3YXlzIOqxkyA0LTM0NS0zNTYKK2Fsd2F5cyDqsZQgNC0zNDUtMTIzNQorYWx3YXlzIOqxlSA0LTM0NS0xMjM1LTEKK2Fsd2F5cyDqsZYgNC0zNDUtMTIzNS0xLTEKK2Fsd2F5cyDqsZcgNC0zNDUtMTIzNS0xLTMKK2Fsd2F5cyDqsZggNC0zNDUtMTIzNS0yNQorYWx3YXlzIOqxmSA0LTM0NS0xMjM1LTI1LTEzCithbHdheXMg6rGaIDQtMzQ1LTEyMzUtMjUtMzU2CithbHdheXMg6rGbIDQtMzQ1LTEyMzUtMzUKK2Fsd2F5cyDqsZwgNC0zNDUtMTIzNS0yCithbHdheXMg6rGdIDQtMzQ1LTEyMzUtMi0xCithbHdheXMg6rGeIDQtMzQ1LTEyMzUtMi0yNgorYWx3YXlzIOqxnyA0LTM0NS0xMjM1LTItMTIKK2Fsd2F5cyDqsaAgNC0zNDUtMTIzNS0yLTMKK2Fsd2F5cyDqsaEgNC0zNDUtMTIzNS0yLTIzNgorYWx3YXlzIOqxoiA0LTM0NS0xMjM1LTItMjU2CithbHdheXMg6rGjIDQtMzQ1LTEyMzUtMi0zNTYKK2Fsd2F5cyDqsaQgNC0zNDUtMTIzNS0yNgorYWx3YXlzIOqxpSA0LTM0NS0xMjM1LTEyCithbHdheXMg6rGmIDQtMzQ1LTEyMzUtMTItMworYWx3YXlzIOqxpyA0LTM0NS0xMjM1LTMKK2Fsd2F5cyDqsaggNC0zNDUtMTIzNS0zLTMKK2Fsd2F5cyDqsakgNC0zNDUtMTIzNS0yMzU2CithbHdheXMg6rGqIDQtMzQ1LTEyMzUtMTMKK2Fsd2F5cyDqsasgNC0zNDUtMTIzNS0yMworYWx3YXlzIOqxrCA0LTM0NS0xMjM1LTIzNQorYWx3YXlzIOqxrSA0LTM0NS0xMjM1LTIzNgorYWx3YXlzIOqxriA0LTM0NS0xMjM1LTI1NgorYWx3YXlzIOqxryA0LTM0NS0xMjM1LTM1NgorYWx3YXlzIOqxsCA0LTIzNAorYWx3YXlzIOqxsSA0LTIzNC0xCithbHdheXMg6rGyIDQtMjM0LTEtMQorYWx3YXlzIOqxsyA0LTIzNC0xLTMKK2Fsd2F5cyDqsbQgNC0yMzQtMjUKK2Fsd2F5cyDqsbUgNC0yMzQtMjUtMTMKK2Fsd2F5cyDqsbYgNC0yMzQtMjUtMzU2CithbHdheXMg6rG3IDQtMjM0LTM1CithbHdheXMg6rG4IDQtMjM0LTIKK2Fsd2F5cyDqsbkgNC0yMzQtMi0xCithbHdheXMg6rG6IDQtMjM0LTItMjYKK2Fsd2F5cyDqsbsgNC0yMzQtMi0xMgorYWx3YXlzIOqxvCA0LTIzNC0yLTMKK2Fsd2F5cyDqsb0gNC0yMzQtMi0yMzYKK2Fsd2F5cyDqsb4gNC0yMzQtMi0yNTYKK2Fsd2F5cyDqsb8gNC0yMzQtMi0zNTYKK2Fsd2F5cyDqsoAgNC0yMzQtMjYKK2Fsd2F5cyDqsoEgNC0yMzQtMTIKK2Fsd2F5cyDqsoIgNC0yMzQtMTItMworYWx3YXlzIOqygyA0LTIzNC0zCithbHdheXMg6rKEIDQtMjM0LTMtMworYWx3YXlzIOqyhSA0LTIzNC0yMzU2CithbHdheXMg6rKGIDQtMjM0LTEzCithbHdheXMg6rKHIDQtMjM0LTIzCithbHdheXMg6rKIIDQtMjM0LTIzNQorYWx3YXlzIOqyiSA0LTIzNC0yMzYKK2Fsd2F5cyDqsoogNC0yMzQtMjU2CithbHdheXMg6rKLIDQtMjM0LTM1NgorYWx3YXlzIOqyjCA0LTEzNDUKK2Fsd2F5cyDqso0gNC0xMzQ1LTEKK2Fsd2F5cyDqso4gNC0xMzQ1LTEtMQorYWx3YXlzIOqyjyA0LTEzNDUtMS0zCithbHdheXMg6rKQIDQtMTM0NS0yNQorYWx3YXlzIOqykSA0LTEzNDUtMjUtMTMKK2Fsd2F5cyDqspIgNC0xMzQ1LTI1LTM1NgorYWx3YXlzIOqykyA0LTEzNDUtMzUKK2Fsd2F5cyDqspQgNC0xMzQ1LTIKK2Fsd2F5cyDqspUgNC0xMzQ1LTItMQorYWx3YXlzIOqyliA0LTEzNDUtMi0yNgorYWx3YXlzIOqylyA0LTEzNDUtMi0xMgorYWx3YXlzIOqymCA0LTEzNDUtMi0zCithbHdheXMg6rKZIDQtMTM0NS0yLTIzNgorYWx3YXlzIOqymiA0LTEzNDUtMi0yNTYKK2Fsd2F5cyDqspsgNC0xMzQ1LTItMzU2CithbHdheXMg6rKcIDQtMTM0NS0yNgorYWx3YXlzIOqynSA0LTEzNDUtMTIKK2Fsd2F5cyDqsp4gNC0xMzQ1LTEyLTMKK2Fsd2F5cyDqsp8gNC0xMzQ1LTMKK2Fsd2F5cyDqsqAgNC0xMzQ1LTMtMworYWx3YXlzIOqyoSA0LTEzNDUtMjM1NgorYWx3YXlzIOqyoiA0LTEzNDUtMTMKK2Fsd2F5cyDqsqMgNC0xMzQ1LTIzCithbHdheXMg6rKkIDQtMTM0NS0yMzUKK2Fsd2F5cyDqsqUgNC0xMzQ1LTIzNgorYWx3YXlzIOqypiA0LTEzNDUtMjU2CithbHdheXMg6rKnIDQtMTM0NS0zNTYKK2Fsd2F5cyDqsqggNC0xNTYKK2Fsd2F5cyDqsqkgNC0xNTYtMQorYWx3YXlzIOqyqiA0LTE1Ni0xLTEKK2Fsd2F5cyDqsqsgNC0xNTYtMS0zCithbHdheXMg6rKsIDQtMTU2LTI1CithbHdheXMg6rKtIDQtMTU2LTI1LTEzCithbHdheXMg6rKuIDQtMTU2LTI1LTM1NgorYWx3YXlzIOqyryA0LTE1Ni0zNQorYWx3YXlzIOqysCA0LTE1Ni0yCithbHdheXMg6rKxIDQtMTU2LTItMQorYWx3YXlzIOqysiA0LTE1Ni0yLTI2CithbHdheXMg6rKzIDQtMTU2LTItMTIKK2Fsd2F5cyDqsrQgNC0xNTYtMi0zCithbHdheXMg6rK1IDQtMTU2LTItMjM2CithbHdheXMg6rK2IDQtMTU2LTItMjU2CithbHdheXMg6rK3IDQtMTU2LTItMzU2CithbHdheXMg6rK4IDQtMTU2LTI2CithbHdheXMg6rK5IDQtMTU2LTEyCithbHdheXMg6rK6IDQtMTU2LTEyLTMKK2Fsd2F5cyDqsrsgNC0xNTYtMworYWx3YXlzIOqyvCA0LTE1Ni0zLTMKK2Fsd2F5cyDqsr0gNC0xNTYtMjM1NgorYWx3YXlzIOqyviA0LTE1Ni0xMworYWx3YXlzIOqyvyA0LTE1Ni0yMworYWx3YXlzIOqzgCA0LTE1Ni0yMzUKK2Fsd2F5cyDqs4EgNC0xNTYtMjM2CithbHdheXMg6rOCIDQtMTU2LTI1NgorYWx3YXlzIOqzgyA0LTE1Ni0zNTYKK2Fsd2F5cyDqs4QgNC0zNAorYWx3YXlzIOqzhSA0LTM0LTEKK2Fsd2F5cyDqs4YgNC0zNC0xLTEKK2Fsd2F5cyDqs4cgNC0zNC0xLTMKK2Fsd2F5cyDqs4ggNC0zNC0yNQorYWx3YXlzIOqziSA0LTM0LTI1LTEzCithbHdheXMg6rOKIDQtMzQtMjUtMzU2CithbHdheXMg6rOLIDQtMzQtMzUKK2Fsd2F5cyDqs4wgNC0zNC0yCithbHdheXMg6rONIDQtMzQtMi0xCithbHdheXMg6rOOIDQtMzQtMi0yNgorYWx3YXlzIOqzjyA0LTM0LTItMTIKK2Fsd2F5cyDqs5AgNC0zNC0yLTMKK2Fsd2F5cyDqs5EgNC0zNC0yLTIzNgorYWx3YXlzIOqzkiA0LTM0LTItMjU2CithbHdheXMg6rOTIDQtMzQtMi0zNTYKK2Fsd2F5cyDqs5QgNC0zNC0yNgorYWx3YXlzIOqzlSA0LTM0LTEyCithbHdheXMg6rOWIDQtMzQtMTItMworYWx3YXlzIOqzlyA0LTM0LTMKK2Fsd2F5cyDqs5ggNC0zNC0zLTMKK2Fsd2F5cyDqs5kgNC0zNC0yMzU2CithbHdheXMg6rOaIDQtMzQtMTMKK2Fsd2F5cyDqs5sgNC0zNC0yMworYWx3YXlzIOqznCA0LTM0LTIzNQorYWx3YXlzIOqznSA0LTM0LTIzNgorYWx3YXlzIOqzniA0LTM0LTI1NgorYWx3YXlzIOqznyA0LTM0LTM1NgorYWx3YXlzIOqzoCA0LTEzNgorYWx3YXlzIOqzoSA0LTEzNi0xCithbHdheXMg6rOiIDQtMTM2LTEtMQorYWx3YXlzIOqzoyA0LTEzNi0xLTMKK2Fsd2F5cyDqs6QgNC0xMzYtMjUKK2Fsd2F5cyDqs6UgNC0xMzYtMjUtMTMKK2Fsd2F5cyDqs6YgNC0xMzYtMjUtMzU2CithbHdheXMg6rOnIDQtMTM2LTM1CithbHdheXMg6rOoIDQtMTM2LTIKK2Fsd2F5cyDqs6kgNC0xMzYtMi0xCithbHdheXMg6rOqIDQtMTM2LTItMjYKK2Fsd2F5cyDqs6sgNC0xMzYtMi0xMgorYWx3YXlzIOqzrCA0LTEzNi0yLTMKK2Fsd2F5cyDqs60gNC0xMzYtMi0yMzYKK2Fsd2F5cyDqs64gNC0xMzYtMi0yNTYKK2Fsd2F5cyDqs68gNC0xMzYtMi0zNTYKK2Fsd2F5cyDqs7AgNC0xMzYtMjYKK2Fsd2F5cyDqs7EgNC0xMzYtMTIKK2Fsd2F5cyDqs7IgNC0xMzYtMTItMworYWx3YXlzIOqzsyA0LTEzNi0zCithbHdheXMg6rO0IDQtMTM2LTMtMworYWx3YXlzIOqztSA0LTEzNi0yMzU2CithbHdheXMg6rO2IDQtMTM2LTEzCithbHdheXMg6rO3IDQtMTM2LTIzCithbHdheXMg6rO4IDQtMTM2LTIzNQorYWx3YXlzIOqzuSA0LTEzNi0yMzYKK2Fsd2F5cyDqs7ogNC0xMzYtMjU2CithbHdheXMg6rO7IDQtMTM2LTM1NgorYWx3YXlzIOqzvCA0LTEyMzYKK2Fsd2F5cyDqs70gNC0xMjM2LTEKK2Fsd2F5cyDqs74gNC0xMjM2LTEtMQorYWx3YXlzIOqzvyA0LTEyMzYtMS0zCithbHdheXMg6rSAIDQtMTIzNi0yNQorYWx3YXlzIOq0gSA0LTEyMzYtMjUtMTMKK2Fsd2F5cyDqtIIgNC0xMjM2LTI1LTM1NgorYWx3YXlzIOq0gyA0LTEyMzYtMzUKK2Fsd2F5cyDqtIQgNC0xMjM2LTIKK2Fsd2F5cyDqtIUgNC0xMjM2LTItMQorYWx3YXlzIOq0hiA0LTEyMzYtMi0yNgorYWx3YXlzIOq0hyA0LTEyMzYtMi0xMgorYWx3YXlzIOq0iCA0LTEyMzYtMi0zCithbHdheXMg6rSJIDQtMTIzNi0yLTIzNgorYWx3YXlzIOq0iiA0LTEyMzYtMi0yNTYKK2Fsd2F5cyDqtIsgNC0xMjM2LTItMzU2CithbHdheXMg6rSMIDQtMTIzNi0yNgorYWx3YXlzIOq0jSA0LTEyMzYtMTIKK2Fsd2F5cyDqtI4gNC0xMjM2LTEyLTMKK2Fsd2F5cyDqtI8gNC0xMjM2LTMKK2Fsd2F5cyDqtJAgNC0xMjM2LTMtMworYWx3YXlzIOq0kSA0LTEyMzYtMjM1NgorYWx3YXlzIOq0kiA0LTEyMzYtMTMKK2Fsd2F5cyDqtJMgNC0xMjM2LTIzCithbHdheXMg6rSUIDQtMTIzNi0yMzUKK2Fsd2F5cyDqtJUgNC0xMjM2LTIzNgorYWx3YXlzIOq0liA0LTEyMzYtMjU2CithbHdheXMg6rSXIDQtMTIzNi0zNTYKK2Fsd2F5cyDqtJggNC0xMjM2LTEyMzUKK2Fsd2F5cyDqtJkgNC0xMjM2LTEyMzUtMQorYWx3YXlzIOq0miA0LTEyMzYtMTIzNS0xLTEKK2Fsd2F5cyDqtJsgNC0xMjM2LTEyMzUtMS0zCithbHdheXMg6rScIDQtMTIzNi0xMjM1LTI1CithbHdheXMg6rSdIDQtMTIzNi0xMjM1LTI1LTEzCithbHdheXMg6rSeIDQtMTIzNi0xMjM1LTI1LTM1NgorYWx3YXlzIOq0nyA0LTEyMzYtMTIzNS0zNQorYWx3YXlzIOq0oCA0LTEyMzYtMTIzNS0yCithbHdheXMg6rShIDQtMTIzNi0xMjM1LTItMQorYWx3YXlzIOq0oiA0LTEyMzYtMTIzNS0yLTI2CithbHdheXMg6rSjIDQtMTIzNi0xMjM1LTItMTIKK2Fsd2F5cyDqtKQgNC0xMjM2LTEyMzUtMi0zCithbHdheXMg6rSlIDQtMTIzNi0xMjM1LTItMjM2CithbHdheXMg6rSmIDQtMTIzNi0xMjM1LTItMjU2CithbHdheXMg6rSnIDQtMTIzNi0xMjM1LTItMzU2CithbHdheXMg6rSoIDQtMTIzNi0xMjM1LTI2CithbHdheXMg6rSpIDQtMTIzNi0xMjM1LTEyCithbHdheXMg6rSqIDQtMTIzNi0xMjM1LTEyLTMKK2Fsd2F5cyDqtKsgNC0xMjM2LTEyMzUtMworYWx3YXlzIOq0rCA0LTEyMzYtMTIzNS0zLTMKK2Fsd2F5cyDqtK0gNC0xMjM2LTEyMzUtMjM1NgorYWx3YXlzIOq0riA0LTEyMzYtMTIzNS0xMworYWx3YXlzIOq0ryA0LTEyMzYtMTIzNS0yMworYWx3YXlzIOq0sCA0LTEyMzYtMTIzNS0yMzUKK2Fsd2F5cyDqtLEgNC0xMjM2LTEyMzUtMjM2CithbHdheXMg6rSyIDQtMTIzNi0xMjM1LTI1NgorYWx3YXlzIOq0syA0LTEyMzYtMTIzNS0zNTYKK2Fsd2F5cyDqtLQgNC0xMzQ1NgorYWx3YXlzIOq0tSA0LTEzNDU2LTEKK2Fsd2F5cyDqtLYgNC0xMzQ1Ni0xLTEKK2Fsd2F5cyDqtLcgNC0xMzQ1Ni0xLTMKK2Fsd2F5cyDqtLggNC0xMzQ1Ni0yNQorYWx3YXlzIOq0uSA0LTEzNDU2LTI1LTEzCithbHdheXMg6rS6IDQtMTM0NTYtMjUtMzU2CithbHdheXMg6rS7IDQtMTM0NTYtMzUKK2Fsd2F5cyDqtLwgNC0xMzQ1Ni0yCithbHdheXMg6rS9IDQtMTM0NTYtMi0xCithbHdheXMg6rS+IDQtMTM0NTYtMi0yNgorYWx3YXlzIOq0vyA0LTEzNDU2LTItMTIKK2Fsd2F5cyDqtYAgNC0xMzQ1Ni0yLTMKK2Fsd2F5cyDqtYEgNC0xMzQ1Ni0yLTIzNgorYWx3YXlzIOq1giA0LTEzNDU2LTItMjU2CithbHdheXMg6rWDIDQtMTM0NTYtMi0zNTYKK2Fsd2F5cyDqtYQgNC0xMzQ1Ni0yNgorYWx3YXlzIOq1hSA0LTEzNDU2LTEyCithbHdheXMg6rWGIDQtMTM0NTYtMTItMworYWx3YXlzIOq1hyA0LTEzNDU2LTMKK2Fsd2F5cyDqtYggNC0xMzQ1Ni0zLTMKK2Fsd2F5cyDqtYkgNC0xMzQ1Ni0yMzU2CithbHdheXMg6rWKIDQtMTM0NTYtMTMKK2Fsd2F5cyDqtYsgNC0xMzQ1Ni0yMworYWx3YXlzIOq1jCA0LTEzNDU2LTIzNQorYWx3YXlzIOq1jSA0LTEzNDU2LTIzNgorYWx3YXlzIOq1jiA0LTEzNDU2LTI1NgorYWx3YXlzIOq1jyA0LTEzNDU2LTM1NgorYWx3YXlzIOq1kCA0LTM0NgorYWx3YXlzIOq1kSA0LTM0Ni0xCithbHdheXMg6rWSIDQtMzQ2LTEtMQorYWx3YXlzIOq1kyA0LTM0Ni0xLTMKK2Fsd2F5cyDqtZQgNC0zNDYtMjUKK2Fsd2F5cyDqtZUgNC0zNDYtMjUtMTMKK2Fsd2F5cyDqtZYgNC0zNDYtMjUtMzU2CithbHdheXMg6rWXIDQtMzQ2LTM1CithbHdheXMg6rWYIDQtMzQ2LTIKK2Fsd2F5cyDqtZkgNC0zNDYtMi0xCithbHdheXMg6rWaIDQtMzQ2LTItMjYKK2Fsd2F5cyDqtZsgNC0zNDYtMi0xMgorYWx3YXlzIOq1nCA0LTM0Ni0yLTMKK2Fsd2F5cyDqtZ0gNC0zNDYtMi0yMzYKK2Fsd2F5cyDqtZ4gNC0zNDYtMi0yNTYKK2Fsd2F5cyDqtZ8gNC0zNDYtMi0zNTYKK2Fsd2F5cyDqtaAgNC0zNDYtMjYKK2Fsd2F5cyDqtaEgNC0zNDYtMTIKK2Fsd2F5cyDqtaIgNC0zNDYtMTItMworYWx3YXlzIOq1oyA0LTM0Ni0zCithbHdheXMg6rWkIDQtMzQ2LTMtMworYWx3YXlzIOq1pSA0LTM0Ni0yMzU2CithbHdheXMg6rWmIDQtMzQ2LTEzCithbHdheXMg6rWnIDQtMzQ2LTIzCithbHdheXMg6rWoIDQtMzQ2LTIzNQorYWx3YXlzIOq1qSA0LTM0Ni0yMzYKK2Fsd2F5cyDqtaogNC0zNDYtMjU2CithbHdheXMg6rWrIDQtMzQ2LTM1NgorYWx3YXlzIOq1rCA0LTEzNAorYWx3YXlzIOq1rSA0LTEzNC0xCithbHdheXMg6rWuIDQtMTM0LTEtMQorYWx3YXlzIOq1ryA0LTEzNC0xLTMKK2Fsd2F5cyDqtbAgNC0xMzQtMjUKK2Fsd2F5cyDqtbEgNC0xMzQtMjUtMTMKK2Fsd2F5cyDqtbIgNC0xMzQtMjUtMzU2CithbHdheXMg6rWzIDQtMTM0LTM1CithbHdheXMg6rW0IDQtMTM0LTIKK2Fsd2F5cyDqtbUgNC0xMzQtMi0xCithbHdheXMg6rW2IDQtMTM0LTItMjYKK2Fsd2F5cyDqtbcgNC0xMzQtMi0xMgorYWx3YXlzIOq1uCA0LTEzNC0yLTMKK2Fsd2F5cyDqtbkgNC0xMzQtMi0yMzYKK2Fsd2F5cyDqtbogNC0xMzQtMi0yNTYKK2Fsd2F5cyDqtbsgNC0xMzQtMi0zNTYKK2Fsd2F5cyDqtbwgNC0xMzQtMjYKK2Fsd2F5cyDqtb0gNC0xMzQtMTIKK2Fsd2F5cyDqtb4gNC0xMzQtMTItMworYWx3YXlzIOq1vyA0LTEzNC0zCithbHdheXMg6raAIDQtMTM0LTMtMworYWx3YXlzIOq2gSA0LTEzNC0yMzU2CithbHdheXMg6raCIDQtMTM0LTEzCithbHdheXMg6raDIDQtMTM0LTIzCithbHdheXMg6raEIDQtMTM0LTIzNQorYWx3YXlzIOq2hSA0LTEzNC0yMzYKK2Fsd2F5cyDqtoYgNC0xMzQtMjU2CithbHdheXMg6raHIDQtMTM0LTM1NgorYWx3YXlzIOq2iCA0LTEyMzQKK2Fsd2F5cyDqtokgNC0xMjM0LTEKK2Fsd2F5cyDqtoogNC0xMjM0LTEtMQorYWx3YXlzIOq2iyA0LTEyMzQtMS0zCithbHdheXMg6raMIDQtMTIzNC0yNQorYWx3YXlzIOq2jSA0LTEyMzQtMjUtMTMKK2Fsd2F5cyDqto4gNC0xMjM0LTI1LTM1NgorYWx3YXlzIOq2jyA0LTEyMzQtMzUKK2Fsd2F5cyDqtpAgNC0xMjM0LTIKK2Fsd2F5cyDqtpEgNC0xMjM0LTItMQorYWx3YXlzIOq2kiA0LTEyMzQtMi0yNgorYWx3YXlzIOq2kyA0LTEyMzQtMi0xMgorYWx3YXlzIOq2lCA0LTEyMzQtMi0zCithbHdheXMg6raVIDQtMTIzNC0yLTIzNgorYWx3YXlzIOq2liA0LTEyMzQtMi0yNTYKK2Fsd2F5cyDqtpcgNC0xMjM0LTItMzU2CithbHdheXMg6raYIDQtMTIzNC0yNgorYWx3YXlzIOq2mSA0LTEyMzQtMTIKK2Fsd2F5cyDqtpogNC0xMjM0LTEyLTMKK2Fsd2F5cyDqtpsgNC0xMjM0LTMKK2Fsd2F5cyDqtpwgNC0xMjM0LTMtMworYWx3YXlzIOq2nSA0LTEyMzQtMjM1NgorYWx3YXlzIOq2niA0LTEyMzQtMTMKK2Fsd2F5cyDqtp8gNC0xMjM0LTIzCithbHdheXMg6ragIDQtMTIzNC0yMzUKK2Fsd2F5cyDqtqEgNC0xMjM0LTIzNgorYWx3YXlzIOq2oiA0LTEyMzQtMjU2CithbHdheXMg6rajIDQtMTIzNC0zNTYKK2Fsd2F5cyDqtqQgNC0xMjM0LTEyMzUKK2Fsd2F5cyDqtqUgNC0xMjM0LTEyMzUtMQorYWx3YXlzIOq2piA0LTEyMzQtMTIzNS0xLTEKK2Fsd2F5cyDqtqcgNC0xMjM0LTEyMzUtMS0zCithbHdheXMg6raoIDQtMTIzNC0xMjM1LTI1CithbHdheXMg6rapIDQtMTIzNC0xMjM1LTI1LTEzCithbHdheXMg6raqIDQtMTIzNC0xMjM1LTI1LTM1NgorYWx3YXlzIOq2qyA0LTEyMzQtMTIzNS0zNQorYWx3YXlzIOq2rCA0LTEyMzQtMTIzNS0yCithbHdheXMg6ratIDQtMTIzNC0xMjM1LTItMQorYWx3YXlzIOq2riA0LTEyMzQtMTIzNS0yLTI2CithbHdheXMg6ravIDQtMTIzNC0xMjM1LTItMTIKK2Fsd2F5cyDqtrAgNC0xMjM0LTEyMzUtMi0zCithbHdheXMg6raxIDQtMTIzNC0xMjM1LTItMjM2CithbHdheXMg6rayIDQtMTIzNC0xMjM1LTItMjU2CithbHdheXMg6razIDQtMTIzNC0xMjM1LTItMzU2CithbHdheXMg6ra0IDQtMTIzNC0xMjM1LTI2CithbHdheXMg6ra1IDQtMTIzNC0xMjM1LTEyCithbHdheXMg6ra2IDQtMTIzNC0xMjM1LTEyLTMKK2Fsd2F5cyDqtrcgNC0xMjM0LTEyMzUtMworYWx3YXlzIOq2uCA0LTEyMzQtMTIzNS0zLTMKK2Fsd2F5cyDqtrkgNC0xMjM0LTEyMzUtMjM1NgorYWx3YXlzIOq2uiA0LTEyMzQtMTIzNS0xMworYWx3YXlzIOq2uyA0LTEyMzQtMTIzNS0yMworYWx3YXlzIOq2vCA0LTEyMzQtMTIzNS0yMzUKK2Fsd2F5cyDqtr0gNC0xMjM0LTEyMzUtMjM2CithbHdheXMg6ra+IDQtMTIzNC0xMjM1LTI1NgorYWx3YXlzIOq2vyA0LTEyMzQtMTIzNS0zNTYKK2Fsd2F5cyDqt4AgNC0xMzQtMTIzNQorYWx3YXlzIOq3gSA0LTEzNC0xMjM1LTEKK2Fsd2F5cyDqt4IgNC0xMzQtMTIzNS0xLTEKK2Fsd2F5cyDqt4MgNC0xMzQtMTIzNS0xLTMKK2Fsd2F5cyDqt4QgNC0xMzQtMTIzNS0yNQorYWx3YXlzIOq3hSA0LTEzNC0xMjM1LTI1LTEzCithbHdheXMg6reGIDQtMTM0LTEyMzUtMjUtMzU2CithbHdheXMg6reHIDQtMTM0LTEyMzUtMzUKK2Fsd2F5cyDqt4ggNC0xMzQtMTIzNS0yCithbHdheXMg6reJIDQtMTM0LTEyMzUtMi0xCithbHdheXMg6reKIDQtMTM0LTEyMzUtMi0yNgorYWx3YXlzIOq3iyA0LTEzNC0xMjM1LTItMTIKK2Fsd2F5cyDqt4wgNC0xMzQtMTIzNS0yLTMKK2Fsd2F5cyDqt40gNC0xMzQtMTIzNS0yLTIzNgorYWx3YXlzIOq3jiA0LTEzNC0xMjM1LTItMjU2CithbHdheXMg6rePIDQtMTM0LTEyMzUtMi0zNTYKK2Fsd2F5cyDqt5AgNC0xMzQtMTIzNS0yNgorYWx3YXlzIOq3kSA0LTEzNC0xMjM1LTEyCithbHdheXMg6reSIDQtMTM0LTEyMzUtMTItMworYWx3YXlzIOq3kyA0LTEzNC0xMjM1LTMKK2Fsd2F5cyDqt5QgNC0xMzQtMTIzNS0zLTMKK2Fsd2F5cyDqt5UgNC0xMzQtMTIzNS0yMzU2CithbHdheXMg6reWIDQtMTM0LTEyMzUtMTMKK2Fsd2F5cyDqt5cgNC0xMzQtMTIzNS0yMworYWx3YXlzIOq3mCA0LTEzNC0xMjM1LTIzNQorYWx3YXlzIOq3mSA0LTEzNC0xMjM1LTIzNgorYWx3YXlzIOq3miA0LTEzNC0xMjM1LTI1NgorYWx3YXlzIOq3myA0LTEzNC0xMjM1LTM1NgorYWx3YXlzIOq3nCA0LTE0NgorYWx3YXlzIOq3nSA0LTE0Ni0xCithbHdheXMg6reeIDQtMTQ2LTEtMQorYWx3YXlzIOq3nyA0LTE0Ni0xLTMKK2Fsd2F5cyDqt6AgNC0xNDYtMjUKK2Fsd2F5cyDqt6EgNC0xNDYtMjUtMTMKK2Fsd2F5cyDqt6IgNC0xNDYtMjUtMzU2CithbHdheXMg6rejIDQtMTQ2LTM1CithbHdheXMg6rekIDQtMTQ2LTIKK2Fsd2F5cyDqt6UgNC0xNDYtMi0xCithbHdheXMg6remIDQtMTQ2LTItMjYKK2Fsd2F5cyDqt6cgNC0xNDYtMi0xMgorYWx3YXlzIOq3qCA0LTE0Ni0yLTMKK2Fsd2F5cyDqt6kgNC0xNDYtMi0yMzYKK2Fsd2F5cyDqt6ogNC0xNDYtMi0yNTYKK2Fsd2F5cyDqt6sgNC0xNDYtMi0zNTYKK2Fsd2F5cyDqt6wgNC0xNDYtMjYKK2Fsd2F5cyDqt60gNC0xNDYtMTIKK2Fsd2F5cyDqt64gNC0xNDYtMTItMworYWx3YXlzIOq3ryA0LTE0Ni0zCithbHdheXMg6rewIDQtMTQ2LTMtMworYWx3YXlzIOq3sSA0LTE0Ni0yMzU2CithbHdheXMg6reyIDQtMTQ2LTEzCithbHdheXMg6rezIDQtMTQ2LTIzCithbHdheXMg6re0IDQtMTQ2LTIzNQorYWx3YXlzIOq3tSA0LTE0Ni0yMzYKK2Fsd2F5cyDqt7YgNC0xNDYtMjU2CithbHdheXMg6re3IDQtMTQ2LTM1NgorYWx3YXlzIOq3uCA0LTI0NgorYWx3YXlzIOq3uSA0LTI0Ni0xCithbHdheXMg6re6IDQtMjQ2LTEtMQorYWx3YXlzIOq3uyA0LTI0Ni0xLTMKK2Fsd2F5cyDqt7wgNC0yNDYtMjUKK2Fsd2F5cyDqt70gNC0yNDYtMjUtMTMKK2Fsd2F5cyDqt74gNC0yNDYtMjUtMzU2CithbHdheXMg6re/IDQtMjQ2LTM1CithbHdheXMg6riAIDQtMjQ2LTIKK2Fsd2F5cyDquIEgNC0yNDYtMi0xCithbHdheXMg6riCIDQtMjQ2LTItMjYKK2Fsd2F5cyDquIMgNC0yNDYtMi0xMgorYWx3YXlzIOq4hCA0LTI0Ni0yLTMKK2Fsd2F5cyDquIUgNC0yNDYtMi0yMzYKK2Fsd2F5cyDquIYgNC0yNDYtMi0yNTYKK2Fsd2F5cyDquIcgNC0yNDYtMi0zNTYKK2Fsd2F5cyDquIggNC0yNDYtMjYKK2Fsd2F5cyDquIkgNC0yNDYtMTIKK2Fsd2F5cyDquIogNC0yNDYtMTItMworYWx3YXlzIOq4iyA0LTI0Ni0zCithbHdheXMg6riMIDQtMjQ2LTMtMworYWx3YXlzIOq4jSA0LTI0Ni0yMzU2CithbHdheXMg6riOIDQtMjQ2LTEzCithbHdheXMg6riPIDQtMjQ2LTIzCithbHdheXMg6riQIDQtMjQ2LTIzNQorYWx3YXlzIOq4kSA0LTI0Ni0yMzYKK2Fsd2F5cyDquJIgNC0yNDYtMjU2CithbHdheXMg6riTIDQtMjQ2LTM1NgorYWx3YXlzIOq4lCA0LTI0NTYKK2Fsd2F5cyDquJUgNC0yNDU2LTEKK2Fsd2F5cyDquJYgNC0yNDU2LTEtMQorYWx3YXlzIOq4lyA0LTI0NTYtMS0zCithbHdheXMg6riYIDQtMjQ1Ni0yNQorYWx3YXlzIOq4mSA0LTI0NTYtMjUtMTMKK2Fsd2F5cyDquJogNC0yNDU2LTI1LTM1NgorYWx3YXlzIOq4myA0LTI0NTYtMzUKK2Fsd2F5cyDquJwgNC0yNDU2LTIKK2Fsd2F5cyDquJ0gNC0yNDU2LTItMQorYWx3YXlzIOq4niA0LTI0NTYtMi0yNgorYWx3YXlzIOq4nyA0LTI0NTYtMi0xMgorYWx3YXlzIOq4oCA0LTI0NTYtMi0zCithbHdheXMg6rihIDQtMjQ1Ni0yLTIzNgorYWx3YXlzIOq4oiA0LTI0NTYtMi0yNTYKK2Fsd2F5cyDquKMgNC0yNDU2LTItMzU2CithbHdheXMg6rikIDQtMjQ1Ni0yNgorYWx3YXlzIOq4pSA0LTI0NTYtMTIKK2Fsd2F5cyDquKYgNC0yNDU2LTEyLTMKK2Fsd2F5cyDquKcgNC0yNDU2LTMKK2Fsd2F5cyDquKggNC0yNDU2LTMtMworYWx3YXlzIOq4qSA0LTI0NTYtMjM1NgorYWx3YXlzIOq4qiA0LTI0NTYtMTMKK2Fsd2F5cyDquKsgNC0yNDU2LTIzCithbHdheXMg6risIDQtMjQ1Ni0yMzUKK2Fsd2F5cyDquK0gNC0yNDU2LTIzNgorYWx3YXlzIOq4riA0LTI0NTYtMjU2CithbHdheXMg6rivIDQtMjQ1Ni0zNTYKK2Fsd2F5cyDquLAgNC0xMzUKK2Fsd2F5cyDquLEgNC0xMzUtMQorYWx3YXlzIOq4siA0LTEzNS0xLTEKK2Fsd2F5cyDquLMgNC0xMzUtMS0zCithbHdheXMg6ri0IDQtMTM1LTI1CithbHdheXMg6ri1IDQtMTM1LTI1LTEzCithbHdheXMg6ri2IDQtMTM1LTI1LTM1NgorYWx3YXlzIOq4tyA0LTEzNS0zNQorYWx3YXlzIOq4uCA0LTEzNS0yCithbHdheXMg6ri5IDQtMTM1LTItMQorYWx3YXlzIOq4uiA0LTEzNS0yLTI2CithbHdheXMg6ri7IDQtMTM1LTItMTIKK2Fsd2F5cyDquLwgNC0xMzUtMi0zCithbHdheXMg6ri9IDQtMTM1LTItMjM2CithbHdheXMg6ri+IDQtMTM1LTItMjU2CithbHdheXMg6ri/IDQtMTM1LTItMzU2CithbHdheXMg6rmAIDQtMTM1LTI2CithbHdheXMg6rmBIDQtMTM1LTEyCithbHdheXMg6rmCIDQtMTM1LTEyLTMKK2Fsd2F5cyDquYMgNC0xMzUtMworYWx3YXlzIOq5hCA0LTEzNS0zLTMKK2Fsd2F5cyDquYUgNC0xMzUtMjM1NgorYWx3YXlzIOq5hiA0LTEzNS0xMworYWx3YXlzIOq5hyA0LTEzNS0yMworYWx3YXlzIOq5iCA0LTEzNS0yMzUKK2Fsd2F5cyDquYkgNC0xMzUtMjM2CithbHdheXMg6rmKIDQtMTM1LTI1NgorYWx3YXlzIOq5iyA0LTEzNS0zNTYKK2Fsd2F5cyDquYwgNC00LTEyNgorYWx3YXlzIOq5jSA0LTQtMTI2LTEKK2Fsd2F5cyDquY4gNC00LTEyNi0xLTEKK2Fsd2F5cyDquY8gNC00LTEyNi0xLTMKK2Fsd2F5cyDquZAgNC00LTEyNi0yNQorYWx3YXlzIOq5kSA0LTQtMTI2LTI1LTEzCithbHdheXMg6rmSIDQtNC0xMjYtMjUtMzU2CithbHdheXMg6rmTIDQtNC0xMjYtMzUKK2Fsd2F5cyDquZQgNC00LTEyNi0yCithbHdheXMg6rmVIDQtNC0xMjYtMi0xCithbHdheXMg6rmWIDQtNC0xMjYtMi0yNgorYWx3YXlzIOq5lyA0LTQtMTI2LTItMTIKK2Fsd2F5cyDquZggNC00LTEyNi0yLTMKK2Fsd2F5cyDquZkgNC00LTEyNi0yLTIzNgorYWx3YXlzIOq5miA0LTQtMTI2LTItMjU2CithbHdheXMg6rmbIDQtNC0xMjYtMi0zNTYKK2Fsd2F5cyDquZwgNC00LTEyNi0yNgorYWx3YXlzIOq5nSA0LTQtMTI2LTEyCithbHdheXMg6rmeIDQtNC0xMjYtMTItMworYWx3YXlzIOq5nyA0LTQtMTI2LTMKK2Fsd2F5cyDquaAgNC00LTEyNi0zLTMKK2Fsd2F5cyDquaEgNC00LTEyNi0yMzU2CithbHdheXMg6rmiIDQtNC0xMjYtMTMKK2Fsd2F5cyDquaMgNC00LTEyNi0yMworYWx3YXlzIOq5pCA0LTQtMTI2LTIzNQorYWx3YXlzIOq5pSA0LTQtMTI2LTIzNgorYWx3YXlzIOq5piA0LTQtMTI2LTI1NgorYWx3YXlzIOq5pyA0LTQtMTI2LTM1NgorYWx3YXlzIOq5qCA0LTQtMTIzNQorYWx3YXlzIOq5qSA0LTQtMTIzNS0xCithbHdheXMg6rmqIDQtNC0xMjM1LTEtMQorYWx3YXlzIOq5qyA0LTQtMTIzNS0xLTMKK2Fsd2F5cyDquawgNC00LTEyMzUtMjUKK2Fsd2F5cyDqua0gNC00LTEyMzUtMjUtMTMKK2Fsd2F5cyDqua4gNC00LTEyMzUtMjUtMzU2CithbHdheXMg6rmvIDQtNC0xMjM1LTM1CithbHdheXMg6rmwIDQtNC0xMjM1LTIKK2Fsd2F5cyDqubEgNC00LTEyMzUtMi0xCithbHdheXMg6rmyIDQtNC0xMjM1LTItMjYKK2Fsd2F5cyDqubMgNC00LTEyMzUtMi0xMgorYWx3YXlzIOq5tCA0LTQtMTIzNS0yLTMKK2Fsd2F5cyDqubUgNC00LTEyMzUtMi0yMzYKK2Fsd2F5cyDqubYgNC00LTEyMzUtMi0yNTYKK2Fsd2F5cyDqubcgNC00LTEyMzUtMi0zNTYKK2Fsd2F5cyDqubggNC00LTEyMzUtMjYKK2Fsd2F5cyDqubkgNC00LTEyMzUtMTIKK2Fsd2F5cyDqubogNC00LTEyMzUtMTItMworYWx3YXlzIOq5uyA0LTQtMTIzNS0zCithbHdheXMg6rm8IDQtNC0xMjM1LTMtMworYWx3YXlzIOq5vSA0LTQtMTIzNS0yMzU2CithbHdheXMg6rm+IDQtNC0xMjM1LTEzCithbHdheXMg6rm/IDQtNC0xMjM1LTIzCithbHdheXMg6rqAIDQtNC0xMjM1LTIzNQorYWx3YXlzIOq6gSA0LTQtMTIzNS0yMzYKK2Fsd2F5cyDquoIgNC00LTEyMzUtMjU2CithbHdheXMg6rqDIDQtNC0xMjM1LTM1NgorYWx3YXlzIOq6hCA0LTQtMzQ1CithbHdheXMg6rqFIDQtNC0zNDUtMQorYWx3YXlzIOq6hiA0LTQtMzQ1LTEtMQorYWx3YXlzIOq6hyA0LTQtMzQ1LTEtMworYWx3YXlzIOq6iCA0LTQtMzQ1LTI1CithbHdheXMg6rqJIDQtNC0zNDUtMjUtMTMKK2Fsd2F5cyDquoogNC00LTM0NS0yNS0zNTYKK2Fsd2F5cyDquosgNC00LTM0NS0zNQorYWx3YXlzIOq6jCA0LTQtMzQ1LTIKK2Fsd2F5cyDquo0gNC00LTM0NS0yLTEKK2Fsd2F5cyDquo4gNC00LTM0NS0yLTI2CithbHdheXMg6rqPIDQtNC0zNDUtMi0xMgorYWx3YXlzIOq6kCA0LTQtMzQ1LTItMworYWx3YXlzIOq6kSA0LTQtMzQ1LTItMjM2CithbHdheXMg6rqSIDQtNC0zNDUtMi0yNTYKK2Fsd2F5cyDqupMgNC00LTM0NS0yLTM1NgorYWx3YXlzIOq6lCA0LTQtMzQ1LTI2CithbHdheXMg6rqVIDQtNC0zNDUtMTIKK2Fsd2F5cyDqupYgNC00LTM0NS0xMi0zCithbHdheXMg6rqXIDQtNC0zNDUtMworYWx3YXlzIOq6mCA0LTQtMzQ1LTMtMworYWx3YXlzIOq6mSA0LTQtMzQ1LTIzNTYKK2Fsd2F5cyDqupogNC00LTM0NS0xMworYWx3YXlzIOq6myA0LTQtMzQ1LTIzCithbHdheXMg6rqcIDQtNC0zNDUtMjM1CithbHdheXMg6rqdIDQtNC0zNDUtMjM2CithbHdheXMg6rqeIDQtNC0zNDUtMjU2CithbHdheXMg6rqfIDQtNC0zNDUtMzU2CithbHdheXMg6rqgIDQtNC0zNDUtMTIzNQorYWx3YXlzIOq6oSA0LTQtMzQ1LTEyMzUtMQorYWx3YXlzIOq6oiA0LTQtMzQ1LTEyMzUtMS0xCithbHdheXMg6rqjIDQtNC0zNDUtMTIzNS0xLTMKK2Fsd2F5cyDquqQgNC00LTM0NS0xMjM1LTI1CithbHdheXMg6rqlIDQtNC0zNDUtMTIzNS0yNS0xMworYWx3YXlzIOq6piA0LTQtMzQ1LTEyMzUtMjUtMzU2CithbHdheXMg6rqnIDQtNC0zNDUtMTIzNS0zNQorYWx3YXlzIOq6qCA0LTQtMzQ1LTEyMzUtMgorYWx3YXlzIOq6qSA0LTQtMzQ1LTEyMzUtMi0xCithbHdheXMg6rqqIDQtNC0zNDUtMTIzNS0yLTI2CithbHdheXMg6rqrIDQtNC0zNDUtMTIzNS0yLTEyCithbHdheXMg6rqsIDQtNC0zNDUtMTIzNS0yLTMKK2Fsd2F5cyDquq0gNC00LTM0NS0xMjM1LTItMjM2CithbHdheXMg6rquIDQtNC0zNDUtMTIzNS0yLTI1NgorYWx3YXlzIOq6ryA0LTQtMzQ1LTEyMzUtMi0zNTYKK2Fsd2F5cyDqurAgNC00LTM0NS0xMjM1LTI2CithbHdheXMg6rqxIDQtNC0zNDUtMTIzNS0xMgorYWx3YXlzIOq6siA0LTQtMzQ1LTEyMzUtMTItMworYWx3YXlzIOq6syA0LTQtMzQ1LTEyMzUtMworYWx3YXlzIOq6tCA0LTQtMzQ1LTEyMzUtMy0zCithbHdheXMg6rq1IDQtNC0zNDUtMTIzNS0yMzU2CithbHdheXMg6rq2IDQtNC0zNDUtMTIzNS0xMworYWx3YXlzIOq6tyA0LTQtMzQ1LTEyMzUtMjMKK2Fsd2F5cyDqurggNC00LTM0NS0xMjM1LTIzNQorYWx3YXlzIOq6uSA0LTQtMzQ1LTEyMzUtMjM2CithbHdheXMg6rq6IDQtNC0zNDUtMTIzNS0yNTYKK2Fsd2F5cyDqursgNC00LTM0NS0xMjM1LTM1NgorYWx3YXlzIOq6vCA0LTQtMjM0CithbHdheXMg6rq9IDQtNC0yMzQtMQorYWx3YXlzIOq6viA0LTQtMjM0LTEtMQorYWx3YXlzIOq6vyA0LTQtMjM0LTEtMworYWx3YXlzIOq7gCA0LTQtMjM0LTI1CithbHdheXMg6ruBIDQtNC0yMzQtMjUtMTMKK2Fsd2F5cyDqu4IgNC00LTIzNC0yNS0zNTYKK2Fsd2F5cyDqu4MgNC00LTIzNC0zNQorYWx3YXlzIOq7hCA0LTQtMjM0LTIKK2Fsd2F5cyDqu4UgNC00LTIzNC0yLTEKK2Fsd2F5cyDqu4YgNC00LTIzNC0yLTI2CithbHdheXMg6ruHIDQtNC0yMzQtMi0xMgorYWx3YXlzIOq7iCA0LTQtMjM0LTItMworYWx3YXlzIOq7iSA0LTQtMjM0LTItMjM2CithbHdheXMg6ruKIDQtNC0yMzQtMi0yNTYKK2Fsd2F5cyDqu4sgNC00LTIzNC0yLTM1NgorYWx3YXlzIOq7jCA0LTQtMjM0LTI2CithbHdheXMg6ruNIDQtNC0yMzQtMTIKK2Fsd2F5cyDqu44gNC00LTIzNC0xMi0zCithbHdheXMg6ruPIDQtNC0yMzQtMworYWx3YXlzIOq7kCA0LTQtMjM0LTMtMworYWx3YXlzIOq7kSA0LTQtMjM0LTIzNTYKK2Fsd2F5cyDqu5IgNC00LTIzNC0xMworYWx3YXlzIOq7kyA0LTQtMjM0LTIzCithbHdheXMg6ruUIDQtNC0yMzQtMjM1CithbHdheXMg6ruVIDQtNC0yMzQtMjM2CithbHdheXMg6ruWIDQtNC0yMzQtMjU2CithbHdheXMg6ruXIDQtNC0yMzQtMzU2CithbHdheXMg6ruYIDQtNC0xMzQ1CithbHdheXMg6ruZIDQtNC0xMzQ1LTEKK2Fsd2F5cyDqu5ogNC00LTEzNDUtMS0xCithbHdheXMg6rubIDQtNC0xMzQ1LTEtMworYWx3YXlzIOq7nCA0LTQtMTM0NS0yNQorYWx3YXlzIOq7nSA0LTQtMTM0NS0yNS0xMworYWx3YXlzIOq7niA0LTQtMTM0NS0yNS0zNTYKK2Fsd2F5cyDqu58gNC00LTEzNDUtMzUKK2Fsd2F5cyDqu6AgNC00LTEzNDUtMgorYWx3YXlzIOq7oSA0LTQtMTM0NS0yLTEKK2Fsd2F5cyDqu6IgNC00LTEzNDUtMi0yNgorYWx3YXlzIOq7oyA0LTQtMTM0NS0yLTEyCithbHdheXMg6rukIDQtNC0xMzQ1LTItMworYWx3YXlzIOq7pSA0LTQtMTM0NS0yLTIzNgorYWx3YXlzIOq7piA0LTQtMTM0NS0yLTI1NgorYWx3YXlzIOq7pyA0LTQtMTM0NS0yLTM1NgorYWx3YXlzIOq7qCA0LTQtMTM0NS0yNgorYWx3YXlzIOq7qSA0LTQtMTM0NS0xMgorYWx3YXlzIOq7qiA0LTQtMTM0NS0xMi0zCithbHdheXMg6rurIDQtNC0xMzQ1LTMKK2Fsd2F5cyDqu6wgNC00LTEzNDUtMy0zCithbHdheXMg6rutIDQtNC0xMzQ1LTIzNTYKK2Fsd2F5cyDqu64gNC00LTEzNDUtMTMKK2Fsd2F5cyDqu68gNC00LTEzNDUtMjMKK2Fsd2F5cyDqu7AgNC00LTEzNDUtMjM1CithbHdheXMg6ruxIDQtNC0xMzQ1LTIzNgorYWx3YXlzIOq7siA0LTQtMTM0NS0yNTYKK2Fsd2F5cyDqu7MgNC00LTEzNDUtMzU2CithbHdheXMg6ru0IDQtNC0xNTYKK2Fsd2F5cyDqu7UgNC00LTE1Ni0xCithbHdheXMg6ru2IDQtNC0xNTYtMS0xCithbHdheXMg6ru3IDQtNC0xNTYtMS0zCithbHdheXMg6ru4IDQtNC0xNTYtMjUKK2Fsd2F5cyDqu7kgNC00LTE1Ni0yNS0xMworYWx3YXlzIOq7uiA0LTQtMTU2LTI1LTM1NgorYWx3YXlzIOq7uyA0LTQtMTU2LTM1CithbHdheXMg6ru8IDQtNC0xNTYtMgorYWx3YXlzIOq7vSA0LTQtMTU2LTItMQorYWx3YXlzIOq7viA0LTQtMTU2LTItMjYKK2Fsd2F5cyDqu78gNC00LTE1Ni0yLTEyCithbHdheXMg6ryAIDQtNC0xNTYtMi0zCithbHdheXMg6ryBIDQtNC0xNTYtMi0yMzYKK2Fsd2F5cyDqvIIgNC00LTE1Ni0yLTI1NgorYWx3YXlzIOq8gyA0LTQtMTU2LTItMzU2CithbHdheXMg6ryEIDQtNC0xNTYtMjYKK2Fsd2F5cyDqvIUgNC00LTE1Ni0xMgorYWx3YXlzIOq8hiA0LTQtMTU2LTEyLTMKK2Fsd2F5cyDqvIcgNC00LTE1Ni0zCithbHdheXMg6ryIIDQtNC0xNTYtMy0zCithbHdheXMg6ryJIDQtNC0xNTYtMjM1NgorYWx3YXlzIOq8iiA0LTQtMTU2LTEzCithbHdheXMg6ryLIDQtNC0xNTYtMjMKK2Fsd2F5cyDqvIwgNC00LTE1Ni0yMzUKK2Fsd2F5cyDqvI0gNC00LTE1Ni0yMzYKK2Fsd2F5cyDqvI4gNC00LTE1Ni0yNTYKK2Fsd2F5cyDqvI8gNC00LTE1Ni0zNTYKK2Fsd2F5cyDqvJAgNC00LTM0CithbHdheXMg6ryRIDQtNC0zNC0xCithbHdheXMg6rySIDQtNC0zNC0xLTEKK2Fsd2F5cyDqvJMgNC00LTM0LTEtMworYWx3YXlzIOq8lCA0LTQtMzQtMjUKK2Fsd2F5cyDqvJUgNC00LTM0LTI1LTEzCithbHdheXMg6ryWIDQtNC0zNC0yNS0zNTYKK2Fsd2F5cyDqvJcgNC00LTM0LTM1CithbHdheXMg6ryYIDQtNC0zNC0yCithbHdheXMg6ryZIDQtNC0zNC0yLTEKK2Fsd2F5cyDqvJogNC00LTM0LTItMjYKK2Fsd2F5cyDqvJsgNC00LTM0LTItMTIKK2Fsd2F5cyDqvJwgNC00LTM0LTItMworYWx3YXlzIOq8nSA0LTQtMzQtMi0yMzYKK2Fsd2F5cyDqvJ4gNC00LTM0LTItMjU2CithbHdheXMg6ryfIDQtNC0zNC0yLTM1NgorYWx3YXlzIOq8oCA0LTQtMzQtMjYKK2Fsd2F5cyDqvKEgNC00LTM0LTEyCithbHdheXMg6ryiIDQtNC0zNC0xMi0zCithbHdheXMg6ryjIDQtNC0zNC0zCithbHdheXMg6rykIDQtNC0zNC0zLTMKK2Fsd2F5cyDqvKUgNC00LTM0LTIzNTYKK2Fsd2F5cyDqvKYgNC00LTM0LTEzCithbHdheXMg6rynIDQtNC0zNC0yMworYWx3YXlzIOq8qCA0LTQtMzQtMjM1CithbHdheXMg6rypIDQtNC0zNC0yMzYKK2Fsd2F5cyDqvKogNC00LTM0LTI1NgorYWx3YXlzIOq8qyA0LTQtMzQtMzU2CithbHdheXMg6rysIDQtNC0xMzYKK2Fsd2F5cyDqvK0gNC00LTEzNi0xCithbHdheXMg6ryuIDQtNC0xMzYtMS0xCithbHdheXMg6ryvIDQtNC0xMzYtMS0zCithbHdheXMg6rywIDQtNC0xMzYtMjUKK2Fsd2F5cyDqvLEgNC00LTEzNi0yNS0xMworYWx3YXlzIOq8siA0LTQtMTM2LTI1LTM1NgorYWx3YXlzIOq8syA0LTQtMTM2LTM1CithbHdheXMg6ry0IDQtNC0xMzYtMgorYWx3YXlzIOq8tSA0LTQtMTM2LTItMQorYWx3YXlzIOq8tiA0LTQtMTM2LTItMjYKK2Fsd2F5cyDqvLcgNC00LTEzNi0yLTEyCithbHdheXMg6ry4IDQtNC0xMzYtMi0zCithbHdheXMg6ry5IDQtNC0xMzYtMi0yMzYKK2Fsd2F5cyDqvLogNC00LTEzNi0yLTI1NgorYWx3YXlzIOq8uyA0LTQtMTM2LTItMzU2CithbHdheXMg6ry8IDQtNC0xMzYtMjYKK2Fsd2F5cyDqvL0gNC00LTEzNi0xMgorYWx3YXlzIOq8viA0LTQtMTM2LTEyLTMKK2Fsd2F5cyDqvL8gNC00LTEzNi0zCithbHdheXMg6r2AIDQtNC0xMzYtMy0zCithbHdheXMg6r2BIDQtNC0xMzYtMjM1NgorYWx3YXlzIOq9giA0LTQtMTM2LTEzCithbHdheXMg6r2DIDQtNC0xMzYtMjMKK2Fsd2F5cyDqvYQgNC00LTEzNi0yMzUKK2Fsd2F5cyDqvYUgNC00LTEzNi0yMzYKK2Fsd2F5cyDqvYYgNC00LTEzNi0yNTYKK2Fsd2F5cyDqvYcgNC00LTEzNi0zNTYKK2Fsd2F5cyDqvYggNC00LTEyMzYKK2Fsd2F5cyDqvYkgNC00LTEyMzYtMQorYWx3YXlzIOq9iiA0LTQtMTIzNi0xLTEKK2Fsd2F5cyDqvYsgNC00LTEyMzYtMS0zCithbHdheXMg6r2MIDQtNC0xMjM2LTI1CithbHdheXMg6r2NIDQtNC0xMjM2LTI1LTEzCithbHdheXMg6r2OIDQtNC0xMjM2LTI1LTM1NgorYWx3YXlzIOq9jyA0LTQtMTIzNi0zNQorYWx3YXlzIOq9kCA0LTQtMTIzNi0yCithbHdheXMg6r2RIDQtNC0xMjM2LTItMQorYWx3YXlzIOq9kiA0LTQtMTIzNi0yLTI2CithbHdheXMg6r2TIDQtNC0xMjM2LTItMTIKK2Fsd2F5cyDqvZQgNC00LTEyMzYtMi0zCithbHdheXMg6r2VIDQtNC0xMjM2LTItMjM2CithbHdheXMg6r2WIDQtNC0xMjM2LTItMjU2CithbHdheXMg6r2XIDQtNC0xMjM2LTItMzU2CithbHdheXMg6r2YIDQtNC0xMjM2LTI2CithbHdheXMg6r2ZIDQtNC0xMjM2LTEyCithbHdheXMg6r2aIDQtNC0xMjM2LTEyLTMKK2Fsd2F5cyDqvZsgNC00LTEyMzYtMworYWx3YXlzIOq9nCA0LTQtMTIzNi0zLTMKK2Fsd2F5cyDqvZ0gNC00LTEyMzYtMjM1NgorYWx3YXlzIOq9niA0LTQtMTIzNi0xMworYWx3YXlzIOq9nyA0LTQtMTIzNi0yMworYWx3YXlzIOq9oCA0LTQtMTIzNi0yMzUKK2Fsd2F5cyDqvaEgNC00LTEyMzYtMjM2CithbHdheXMg6r2iIDQtNC0xMjM2LTI1NgorYWx3YXlzIOq9oyA0LTQtMTIzNi0zNTYKK2Fsd2F5cyDqvaQgNC00LTEyMzYtMTIzNQorYWx3YXlzIOq9pSA0LTQtMTIzNi0xMjM1LTEKK2Fsd2F5cyDqvaYgNC00LTEyMzYtMTIzNS0xLTEKK2Fsd2F5cyDqvacgNC00LTEyMzYtMTIzNS0xLTMKK2Fsd2F5cyDqvaggNC00LTEyMzYtMTIzNS0yNQorYWx3YXlzIOq9qSA0LTQtMTIzNi0xMjM1LTI1LTEzCithbHdheXMg6r2qIDQtNC0xMjM2LTEyMzUtMjUtMzU2CithbHdheXMg6r2rIDQtNC0xMjM2LTEyMzUtMzUKK2Fsd2F5cyDqvawgNC00LTEyMzYtMTIzNS0yCithbHdheXMg6r2tIDQtNC0xMjM2LTEyMzUtMi0xCithbHdheXMg6r2uIDQtNC0xMjM2LTEyMzUtMi0yNgorYWx3YXlzIOq9ryA0LTQtMTIzNi0xMjM1LTItMTIKK2Fsd2F5cyDqvbAgNC00LTEyMzYtMTIzNS0yLTMKK2Fsd2F5cyDqvbEgNC00LTEyMzYtMTIzNS0yLTIzNgorYWx3YXlzIOq9siA0LTQtMTIzNi0xMjM1LTItMjU2CithbHdheXMg6r2zIDQtNC0xMjM2LTEyMzUtMi0zNTYKK2Fsd2F5cyDqvbQgNC00LTEyMzYtMTIzNS0yNgorYWx3YXlzIOq9tSA0LTQtMTIzNi0xMjM1LTEyCithbHdheXMg6r22IDQtNC0xMjM2LTEyMzUtMTItMworYWx3YXlzIOq9tyA0LTQtMTIzNi0xMjM1LTMKK2Fsd2F5cyDqvbggNC00LTEyMzYtMTIzNS0zLTMKK2Fsd2F5cyDqvbkgNC00LTEyMzYtMTIzNS0yMzU2CithbHdheXMg6r26IDQtNC0xMjM2LTEyMzUtMTMKK2Fsd2F5cyDqvbsgNC00LTEyMzYtMTIzNS0yMworYWx3YXlzIOq9vCA0LTQtMTIzNi0xMjM1LTIzNQorYWx3YXlzIOq9vSA0LTQtMTIzNi0xMjM1LTIzNgorYWx3YXlzIOq9viA0LTQtMTIzNi0xMjM1LTI1NgorYWx3YXlzIOq9vyA0LTQtMTIzNi0xMjM1LTM1NgorYWx3YXlzIOq+gCA0LTQtMTM0NTYKK2Fsd2F5cyDqvoEgNC00LTEzNDU2LTEKK2Fsd2F5cyDqvoIgNC00LTEzNDU2LTEtMQorYWx3YXlzIOq+gyA0LTQtMTM0NTYtMS0zCithbHdheXMg6r6EIDQtNC0xMzQ1Ni0yNQorYWx3YXlzIOq+hSA0LTQtMTM0NTYtMjUtMTMKK2Fsd2F5cyDqvoYgNC00LTEzNDU2LTI1LTM1NgorYWx3YXlzIOq+hyA0LTQtMTM0NTYtMzUKK2Fsd2F5cyDqvoggNC00LTEzNDU2LTIKK2Fsd2F5cyDqvokgNC00LTEzNDU2LTItMQorYWx3YXlzIOq+iiA0LTQtMTM0NTYtMi0yNgorYWx3YXlzIOq+iyA0LTQtMTM0NTYtMi0xMgorYWx3YXlzIOq+jCA0LTQtMTM0NTYtMi0zCithbHdheXMg6r6NIDQtNC0xMzQ1Ni0yLTIzNgorYWx3YXlzIOq+jiA0LTQtMTM0NTYtMi0yNTYKK2Fsd2F5cyDqvo8gNC00LTEzNDU2LTItMzU2CithbHdheXMg6r6QIDQtNC0xMzQ1Ni0yNgorYWx3YXlzIOq+kSA0LTQtMTM0NTYtMTIKK2Fsd2F5cyDqvpIgNC00LTEzNDU2LTEyLTMKK2Fsd2F5cyDqvpMgNC00LTEzNDU2LTMKK2Fsd2F5cyDqvpQgNC00LTEzNDU2LTMtMworYWx3YXlzIOq+lSA0LTQtMTM0NTYtMjM1NgorYWx3YXlzIOq+liA0LTQtMTM0NTYtMTMKK2Fsd2F5cyDqvpcgNC00LTEzNDU2LTIzCithbHdheXMg6r6YIDQtNC0xMzQ1Ni0yMzUKK2Fsd2F5cyDqvpkgNC00LTEzNDU2LTIzNgorYWx3YXlzIOq+miA0LTQtMTM0NTYtMjU2CithbHdheXMg6r6bIDQtNC0xMzQ1Ni0zNTYKK2Fsd2F5cyDqvpwgNC00LTM0NgorYWx3YXlzIOq+nSA0LTQtMzQ2LTEKK2Fsd2F5cyDqvp4gNC00LTM0Ni0xLTEKK2Fsd2F5cyDqvp8gNC00LTM0Ni0xLTMKK2Fsd2F5cyDqvqAgNC00LTM0Ni0yNQorYWx3YXlzIOq+oSA0LTQtMzQ2LTI1LTEzCithbHdheXMg6r6iIDQtNC0zNDYtMjUtMzU2CithbHdheXMg6r6jIDQtNC0zNDYtMzUKK2Fsd2F5cyDqvqQgNC00LTM0Ni0yCithbHdheXMg6r6lIDQtNC0zNDYtMi0xCithbHdheXMg6r6mIDQtNC0zNDYtMi0yNgorYWx3YXlzIOq+pyA0LTQtMzQ2LTItMTIKK2Fsd2F5cyDqvqggNC00LTM0Ni0yLTMKK2Fsd2F5cyDqvqkgNC00LTM0Ni0yLTIzNgorYWx3YXlzIOq+qiA0LTQtMzQ2LTItMjU2CithbHdheXMg6r6rIDQtNC0zNDYtMi0zNTYKK2Fsd2F5cyDqvqwgNC00LTM0Ni0yNgorYWx3YXlzIOq+rSA0LTQtMzQ2LTEyCithbHdheXMg6r6uIDQtNC0zNDYtMTItMworYWx3YXlzIOq+ryA0LTQtMzQ2LTMKK2Fsd2F5cyDqvrAgNC00LTM0Ni0zLTMKK2Fsd2F5cyDqvrEgNC00LTM0Ni0yMzU2CithbHdheXMg6r6yIDQtNC0zNDYtMTMKK2Fsd2F5cyDqvrMgNC00LTM0Ni0yMworYWx3YXlzIOq+tCA0LTQtMzQ2LTIzNQorYWx3YXlzIOq+tSA0LTQtMzQ2LTIzNgorYWx3YXlzIOq+tiA0LTQtMzQ2LTI1NgorYWx3YXlzIOq+tyA0LTQtMzQ2LTM1NgorYWx3YXlzIOq+uCA0LTQtMTM0CithbHdheXMg6r65IDQtNC0xMzQtMQorYWx3YXlzIOq+uiA0LTQtMTM0LTEtMQorYWx3YXlzIOq+uyA0LTQtMTM0LTEtMworYWx3YXlzIOq+vCA0LTQtMTM0LTI1CithbHdheXMg6r69IDQtNC0xMzQtMjUtMTMKK2Fsd2F5cyDqvr4gNC00LTEzNC0yNS0zNTYKK2Fsd2F5cyDqvr8gNC00LTEzNC0zNQorYWx3YXlzIOq/gCA0LTQtMTM0LTIKK2Fsd2F5cyDqv4EgNC00LTEzNC0yLTEKK2Fsd2F5cyDqv4IgNC00LTEzNC0yLTI2CithbHdheXMg6r+DIDQtNC0xMzQtMi0xMgorYWx3YXlzIOq/hCA0LTQtMTM0LTItMworYWx3YXlzIOq/hSA0LTQtMTM0LTItMjM2CithbHdheXMg6r+GIDQtNC0xMzQtMi0yNTYKK2Fsd2F5cyDqv4cgNC00LTEzNC0yLTM1NgorYWx3YXlzIOq/iCA0LTQtMTM0LTI2CithbHdheXMg6r+JIDQtNC0xMzQtMTIKK2Fsd2F5cyDqv4ogNC00LTEzNC0xMi0zCithbHdheXMg6r+LIDQtNC0xMzQtMworYWx3YXlzIOq/jCA0LTQtMTM0LTMtMworYWx3YXlzIOq/jSA0LTQtMTM0LTIzNTYKK2Fsd2F5cyDqv44gNC00LTEzNC0xMworYWx3YXlzIOq/jyA0LTQtMTM0LTIzCithbHdheXMg6r+QIDQtNC0xMzQtMjM1CithbHdheXMg6r+RIDQtNC0xMzQtMjM2CithbHdheXMg6r+SIDQtNC0xMzQtMjU2CithbHdheXMg6r+TIDQtNC0xMzQtMzU2CithbHdheXMg6r+UIDQtNC0xMjM0CithbHdheXMg6r+VIDQtNC0xMjM0LTEKK2Fsd2F5cyDqv5YgNC00LTEyMzQtMS0xCithbHdheXMg6r+XIDQtNC0xMjM0LTEtMworYWx3YXlzIOq/mCA0LTQtMTIzNC0yNQorYWx3YXlzIOq/mSA0LTQtMTIzNC0yNS0xMworYWx3YXlzIOq/miA0LTQtMTIzNC0yNS0zNTYKK2Fsd2F5cyDqv5sgNC00LTEyMzQtMzUKK2Fsd2F5cyDqv5wgNC00LTEyMzQtMgorYWx3YXlzIOq/nSA0LTQtMTIzNC0yLTEKK2Fsd2F5cyDqv54gNC00LTEyMzQtMi0yNgorYWx3YXlzIOq/nyA0LTQtMTIzNC0yLTEyCithbHdheXMg6r+gIDQtNC0xMjM0LTItMworYWx3YXlzIOq/oSA0LTQtMTIzNC0yLTIzNgorYWx3YXlzIOq/oiA0LTQtMTIzNC0yLTI1NgorYWx3YXlzIOq/oyA0LTQtMTIzNC0yLTM1NgorYWx3YXlzIOq/pCA0LTQtMTIzNC0yNgorYWx3YXlzIOq/pSA0LTQtMTIzNC0xMgorYWx3YXlzIOq/piA0LTQtMTIzNC0xMi0zCithbHdheXMg6r+nIDQtNC0xMjM0LTMKK2Fsd2F5cyDqv6ggNC00LTEyMzQtMy0zCithbHdheXMg6r+pIDQtNC0xMjM0LTIzNTYKK2Fsd2F5cyDqv6ogNC00LTEyMzQtMTMKK2Fsd2F5cyDqv6sgNC00LTEyMzQtMjMKK2Fsd2F5cyDqv6wgNC00LTEyMzQtMjM1CithbHdheXMg6r+tIDQtNC0xMjM0LTIzNgorYWx3YXlzIOq/riA0LTQtMTIzNC0yNTYKK2Fsd2F5cyDqv68gNC00LTEyMzQtMzU2CithbHdheXMg6r+wIDQtNC0xMjM0LTEyMzUKK2Fsd2F5cyDqv7EgNC00LTEyMzQtMTIzNS0xCithbHdheXMg6r+yIDQtNC0xMjM0LTEyMzUtMS0xCithbHdheXMg6r+zIDQtNC0xMjM0LTEyMzUtMS0zCithbHdheXMg6r+0IDQtNC0xMjM0LTEyMzUtMjUKK2Fsd2F5cyDqv7UgNC00LTEyMzQtMTIzNS0yNS0xMworYWx3YXlzIOq/tiA0LTQtMTIzNC0xMjM1LTI1LTM1NgorYWx3YXlzIOq/tyA0LTQtMTIzNC0xMjM1LTM1CithbHdheXMg6r+4IDQtNC0xMjM0LTEyMzUtMgorYWx3YXlzIOq/uSA0LTQtMTIzNC0xMjM1LTItMQorYWx3YXlzIOq/uiA0LTQtMTIzNC0xMjM1LTItMjYKK2Fsd2F5cyDqv7sgNC00LTEyMzQtMTIzNS0yLTEyCithbHdheXMg6r+8IDQtNC0xMjM0LTEyMzUtMi0zCithbHdheXMg6r+9IDQtNC0xMjM0LTEyMzUtMi0yMzYKK2Fsd2F5cyDqv74gNC00LTEyMzQtMTIzNS0yLTI1NgorYWx3YXlzIOq/vyA0LTQtMTIzNC0xMjM1LTItMzU2CithbHdheXMg64CAIDQtNC0xMjM0LTEyMzUtMjYKK2Fsd2F5cyDrgIEgNC00LTEyMzQtMTIzNS0xMgorYWx3YXlzIOuAgiA0LTQtMTIzNC0xMjM1LTEyLTMKK2Fsd2F5cyDrgIMgNC00LTEyMzQtMTIzNS0zCithbHdheXMg64CEIDQtNC0xMjM0LTEyMzUtMy0zCithbHdheXMg64CFIDQtNC0xMjM0LTEyMzUtMjM1NgorYWx3YXlzIOuAhiA0LTQtMTIzNC0xMjM1LTEzCithbHdheXMg64CHIDQtNC0xMjM0LTEyMzUtMjMKK2Fsd2F5cyDrgIggNC00LTEyMzQtMTIzNS0yMzUKK2Fsd2F5cyDrgIkgNC00LTEyMzQtMTIzNS0yMzYKK2Fsd2F5cyDrgIogNC00LTEyMzQtMTIzNS0yNTYKK2Fsd2F5cyDrgIsgNC00LTEyMzQtMTIzNS0zNTYKK2Fsd2F5cyDrgIwgNC00LTEzNC0xMjM1CithbHdheXMg64CNIDQtNC0xMzQtMTIzNS0xCithbHdheXMg64COIDQtNC0xMzQtMTIzNS0xLTEKK2Fsd2F5cyDrgI8gNC00LTEzNC0xMjM1LTEtMworYWx3YXlzIOuAkCA0LTQtMTM0LTEyMzUtMjUKK2Fsd2F5cyDrgJEgNC00LTEzNC0xMjM1LTI1LTEzCithbHdheXMg64CSIDQtNC0xMzQtMTIzNS0yNS0zNTYKK2Fsd2F5cyDrgJMgNC00LTEzNC0xMjM1LTM1CithbHdheXMg64CUIDQtNC0xMzQtMTIzNS0yCithbHdheXMg64CVIDQtNC0xMzQtMTIzNS0yLTEKK2Fsd2F5cyDrgJYgNC00LTEzNC0xMjM1LTItMjYKK2Fsd2F5cyDrgJcgNC00LTEzNC0xMjM1LTItMTIKK2Fsd2F5cyDrgJggNC00LTEzNC0xMjM1LTItMworYWx3YXlzIOuAmSA0LTQtMTM0LTEyMzUtMi0yMzYKK2Fsd2F5cyDrgJogNC00LTEzNC0xMjM1LTItMjU2CithbHdheXMg64CbIDQtNC0xMzQtMTIzNS0yLTM1NgorYWx3YXlzIOuAnCA0LTQtMTM0LTEyMzUtMjYKK2Fsd2F5cyDrgJ0gNC00LTEzNC0xMjM1LTEyCithbHdheXMg64CeIDQtNC0xMzQtMTIzNS0xMi0zCithbHdheXMg64CfIDQtNC0xMzQtMTIzNS0zCithbHdheXMg64CgIDQtNC0xMzQtMTIzNS0zLTMKK2Fsd2F5cyDrgKEgNC00LTEzNC0xMjM1LTIzNTYKK2Fsd2F5cyDrgKIgNC00LTEzNC0xMjM1LTEzCithbHdheXMg64CjIDQtNC0xMzQtMTIzNS0yMworYWx3YXlzIOuApCA0LTQtMTM0LTEyMzUtMjM1CithbHdheXMg64ClIDQtNC0xMzQtMTIzNS0yMzYKK2Fsd2F5cyDrgKYgNC00LTEzNC0xMjM1LTI1NgorYWx3YXlzIOuApyA0LTQtMTM0LTEyMzUtMzU2CithbHdheXMg64CoIDQtNC0xNDYKK2Fsd2F5cyDrgKkgNC00LTE0Ni0xCithbHdheXMg64CqIDQtNC0xNDYtMS0xCithbHdheXMg64CrIDQtNC0xNDYtMS0zCithbHdheXMg64CsIDQtNC0xNDYtMjUKK2Fsd2F5cyDrgK0gNC00LTE0Ni0yNS0xMworYWx3YXlzIOuAriA0LTQtMTQ2LTI1LTM1NgorYWx3YXlzIOuAryA0LTQtMTQ2LTM1CithbHdheXMg64CwIDQtNC0xNDYtMgorYWx3YXlzIOuAsSA0LTQtMTQ2LTItMQorYWx3YXlzIOuAsiA0LTQtMTQ2LTItMjYKK2Fsd2F5cyDrgLMgNC00LTE0Ni0yLTEyCithbHdheXMg64C0IDQtNC0xNDYtMi0zCithbHdheXMg64C1IDQtNC0xNDYtMi0yMzYKK2Fsd2F5cyDrgLYgNC00LTE0Ni0yLTI1NgorYWx3YXlzIOuAtyA0LTQtMTQ2LTItMzU2CithbHdheXMg64C4IDQtNC0xNDYtMjYKK2Fsd2F5cyDrgLkgNC00LTE0Ni0xMgorYWx3YXlzIOuAuiA0LTQtMTQ2LTEyLTMKK2Fsd2F5cyDrgLsgNC00LTE0Ni0zCithbHdheXMg64C8IDQtNC0xNDYtMy0zCithbHdheXMg64C9IDQtNC0xNDYtMjM1NgorYWx3YXlzIOuAviA0LTQtMTQ2LTEzCithbHdheXMg64C/IDQtNC0xNDYtMjMKK2Fsd2F5cyDrgYAgNC00LTE0Ni0yMzUKK2Fsd2F5cyDrgYEgNC00LTE0Ni0yMzYKK2Fsd2F5cyDrgYIgNC00LTE0Ni0yNTYKK2Fsd2F5cyDrgYMgNC00LTE0Ni0zNTYKK2Fsd2F5cyDrgYQgNC00LTI0NgorYWx3YXlzIOuBhSA0LTQtMjQ2LTEKK2Fsd2F5cyDrgYYgNC00LTI0Ni0xLTEKK2Fsd2F5cyDrgYcgNC00LTI0Ni0xLTMKK2Fsd2F5cyDrgYggNC00LTI0Ni0yNQorYWx3YXlzIOuBiSA0LTQtMjQ2LTI1LTEzCithbHdheXMg64GKIDQtNC0yNDYtMjUtMzU2CithbHdheXMg64GLIDQtNC0yNDYtMzUKK2Fsd2F5cyDrgYwgNC00LTI0Ni0yCithbHdheXMg64GNIDQtNC0yNDYtMi0xCithbHdheXMg64GOIDQtNC0yNDYtMi0yNgorYWx3YXlzIOuBjyA0LTQtMjQ2LTItMTIKK2Fsd2F5cyDrgZAgNC00LTI0Ni0yLTMKK2Fsd2F5cyDrgZEgNC00LTI0Ni0yLTIzNgorYWx3YXlzIOuBkiA0LTQtMjQ2LTItMjU2CithbHdheXMg64GTIDQtNC0yNDYtMi0zNTYKK2Fsd2F5cyDrgZQgNC00LTI0Ni0yNgorYWx3YXlzIOuBlSA0LTQtMjQ2LTEyCithbHdheXMg64GWIDQtNC0yNDYtMTItMworYWx3YXlzIOuBlyA0LTQtMjQ2LTMKK2Fsd2F5cyDrgZggNC00LTI0Ni0zLTMKK2Fsd2F5cyDrgZkgNC00LTI0Ni0yMzU2CithbHdheXMg64GaIDQtNC0yNDYtMTMKK2Fsd2F5cyDrgZsgNC00LTI0Ni0yMworYWx3YXlzIOuBnCA0LTQtMjQ2LTIzNQorYWx3YXlzIOuBnSA0LTQtMjQ2LTIzNgorYWx3YXlzIOuBniA0LTQtMjQ2LTI1NgorYWx3YXlzIOuBnyA0LTQtMjQ2LTM1NgorYWx3YXlzIOuBoCA0LTQtMjQ1NgorYWx3YXlzIOuBoSA0LTQtMjQ1Ni0xCithbHdheXMg64GiIDQtNC0yNDU2LTEtMQorYWx3YXlzIOuBoyA0LTQtMjQ1Ni0xLTMKK2Fsd2F5cyDrgaQgNC00LTI0NTYtMjUKK2Fsd2F5cyDrgaUgNC00LTI0NTYtMjUtMTMKK2Fsd2F5cyDrgaYgNC00LTI0NTYtMjUtMzU2CithbHdheXMg64GnIDQtNC0yNDU2LTM1CithbHdheXMg64GoIDQtNC0yNDU2LTIKK2Fsd2F5cyDrgakgNC00LTI0NTYtMi0xCithbHdheXMg64GqIDQtNC0yNDU2LTItMjYKK2Fsd2F5cyDrgasgNC00LTI0NTYtMi0xMgorYWx3YXlzIOuBrCA0LTQtMjQ1Ni0yLTMKK2Fsd2F5cyDrga0gNC00LTI0NTYtMi0yMzYKK2Fsd2F5cyDrga4gNC00LTI0NTYtMi0yNTYKK2Fsd2F5cyDrga8gNC00LTI0NTYtMi0zNTYKK2Fsd2F5cyDrgbAgNC00LTI0NTYtMjYKK2Fsd2F5cyDrgbEgNC00LTI0NTYtMTIKK2Fsd2F5cyDrgbIgNC00LTI0NTYtMTItMworYWx3YXlzIOuBsyA0LTQtMjQ1Ni0zCithbHdheXMg64G0IDQtNC0yNDU2LTMtMworYWx3YXlzIOuBtSA0LTQtMjQ1Ni0yMzU2CithbHdheXMg64G2IDQtNC0yNDU2LTEzCithbHdheXMg64G3IDQtNC0yNDU2LTIzCithbHdheXMg64G4IDQtNC0yNDU2LTIzNQorYWx3YXlzIOuBuSA0LTQtMjQ1Ni0yMzYKK2Fsd2F5cyDrgbogNC00LTI0NTYtMjU2CithbHdheXMg64G7IDQtNC0yNDU2LTM1NgorYWx3YXlzIOuBvCA0LTQtMTM1CithbHdheXMg64G9IDQtNC0xMzUtMQorYWx3YXlzIOuBviA0LTQtMTM1LTEtMQorYWx3YXlzIOuBvyA0LTQtMTM1LTEtMworYWx3YXlzIOuCgCA0LTQtMTM1LTI1CithbHdheXMg64KBIDQtNC0xMzUtMjUtMTMKK2Fsd2F5cyDrgoIgNC00LTEzNS0yNS0zNTYKK2Fsd2F5cyDrgoMgNC00LTEzNS0zNQorYWx3YXlzIOuChCA0LTQtMTM1LTIKK2Fsd2F5cyDrgoUgNC00LTEzNS0yLTEKK2Fsd2F5cyDrgoYgNC00LTEzNS0yLTI2CithbHdheXMg64KHIDQtNC0xMzUtMi0xMgorYWx3YXlzIOuCiCA0LTQtMTM1LTItMworYWx3YXlzIOuCiSA0LTQtMTM1LTItMjM2CithbHdheXMg64KKIDQtNC0xMzUtMi0yNTYKK2Fsd2F5cyDrgosgNC00LTEzNS0yLTM1NgorYWx3YXlzIOuCjCA0LTQtMTM1LTI2CithbHdheXMg64KNIDQtNC0xMzUtMTIKK2Fsd2F5cyDrgo4gNC00LTEzNS0xMi0zCithbHdheXMg64KPIDQtNC0xMzUtMworYWx3YXlzIOuCkCA0LTQtMTM1LTMtMworYWx3YXlzIOuCkSA0LTQtMTM1LTIzNTYKK2Fsd2F5cyDrgpIgNC00LTEzNS0xMworYWx3YXlzIOuCkyA0LTQtMTM1LTIzCithbHdheXMg64KUIDQtNC0xMzUtMjM1CithbHdheXMg64KVIDQtNC0xMzUtMjM2CithbHdheXMg64KWIDQtNC0xMzUtMjU2CithbHdheXMg64KXIDQtNC0xMzUtMzU2CithbHdheXMg64KYIDE0LTEyNgorYWx3YXlzIOuCmSAxNC0xMjYtMQorYWx3YXlzIOuCmiAxNC0xMjYtMS0xCithbHdheXMg64KbIDE0LTEyNi0xLTMKK2Fsd2F5cyDrgpwgMTQtMTI2LTI1CithbHdheXMg64KdIDE0LTEyNi0yNS0xMworYWx3YXlzIOuCniAxNC0xMjYtMjUtMzU2CithbHdheXMg64KfIDE0LTEyNi0zNQorYWx3YXlzIOuCoCAxNC0xMjYtMgorYWx3YXlzIOuCoSAxNC0xMjYtMi0xCithbHdheXMg64KiIDE0LTEyNi0yLTI2CithbHdheXMg64KjIDE0LTEyNi0yLTEyCithbHdheXMg64KkIDE0LTEyNi0yLTMKK2Fsd2F5cyDrgqUgMTQtMTI2LTItMjM2CithbHdheXMg64KmIDE0LTEyNi0yLTI1NgorYWx3YXlzIOuCpyAxNC0xMjYtMi0zNTYKK2Fsd2F5cyDrgqggMTQtMTI2LTI2CithbHdheXMg64KpIDE0LTEyNi0xMgorYWx3YXlzIOuCqiAxNC0xMjYtMTItMworYWx3YXlzIOuCqyAxNC0xMjYtMworYWx3YXlzIOuCrCAxNC0xMjYtMy0zCithbHdheXMg64KtIDE0LTEyNi0yMzU2CithbHdheXMg64KuIDE0LTEyNi0xMworYWx3YXlzIOuCryAxNC0xMjYtMjMKK2Fsd2F5cyDrgrAgMTQtMTI2LTIzNQorYWx3YXlzIOuCsSAxNC0xMjYtMjM2CithbHdheXMg64KyIDE0LTEyNi0yNTYKK2Fsd2F5cyDrgrMgMTQtMTI2LTM1NgorYWx3YXlzIOuCtCAxNC0xMjM1CithbHdheXMg64K1IDE0LTEyMzUtMQorYWx3YXlzIOuCtiAxNC0xMjM1LTEtMQorYWx3YXlzIOuCtyAxNC0xMjM1LTEtMworYWx3YXlzIOuCuCAxNC0xMjM1LTI1CithbHdheXMg64K5IDE0LTEyMzUtMjUtMTMKK2Fsd2F5cyDrgrogMTQtMTIzNS0yNS0zNTYKK2Fsd2F5cyDrgrsgMTQtMTIzNS0zNQorYWx3YXlzIOuCvCAxNC0xMjM1LTIKK2Fsd2F5cyDrgr0gMTQtMTIzNS0yLTEKK2Fsd2F5cyDrgr4gMTQtMTIzNS0yLTI2CithbHdheXMg64K/IDE0LTEyMzUtMi0xMgorYWx3YXlzIOuDgCAxNC0xMjM1LTItMworYWx3YXlzIOuDgSAxNC0xMjM1LTItMjM2CithbHdheXMg64OCIDE0LTEyMzUtMi0yNTYKK2Fsd2F5cyDrg4MgMTQtMTIzNS0yLTM1NgorYWx3YXlzIOuDhCAxNC0xMjM1LTI2CithbHdheXMg64OFIDE0LTEyMzUtMTIKK2Fsd2F5cyDrg4YgMTQtMTIzNS0xMi0zCithbHdheXMg64OHIDE0LTEyMzUtMworYWx3YXlzIOuDiCAxNC0xMjM1LTMtMworYWx3YXlzIOuDiSAxNC0xMjM1LTIzNTYKK2Fsd2F5cyDrg4ogMTQtMTIzNS0xMworYWx3YXlzIOuDiyAxNC0xMjM1LTIzCithbHdheXMg64OMIDE0LTEyMzUtMjM1CithbHdheXMg64ONIDE0LTEyMzUtMjM2CithbHdheXMg64OOIDE0LTEyMzUtMjU2CithbHdheXMg64OPIDE0LTEyMzUtMzU2CithbHdheXMg64OQIDE0LTM0NQorYWx3YXlzIOuDkSAxNC0zNDUtMQorYWx3YXlzIOuDkiAxNC0zNDUtMS0xCithbHdheXMg64OTIDE0LTM0NS0xLTMKK2Fsd2F5cyDrg5QgMTQtMzQ1LTI1CithbHdheXMg64OVIDE0LTM0NS0yNS0xMworYWx3YXlzIOuDliAxNC0zNDUtMjUtMzU2CithbHdheXMg64OXIDE0LTM0NS0zNQorYWx3YXlzIOuDmCAxNC0zNDUtMgorYWx3YXlzIOuDmSAxNC0zNDUtMi0xCithbHdheXMg64OaIDE0LTM0NS0yLTI2CithbHdheXMg64ObIDE0LTM0NS0yLTEyCithbHdheXMg64OcIDE0LTM0NS0yLTMKK2Fsd2F5cyDrg50gMTQtMzQ1LTItMjM2CithbHdheXMg64OeIDE0LTM0NS0yLTI1NgorYWx3YXlzIOuDnyAxNC0zNDUtMi0zNTYKK2Fsd2F5cyDrg6AgMTQtMzQ1LTI2CithbHdheXMg64OhIDE0LTM0NS0xMgorYWx3YXlzIOuDoiAxNC0zNDUtMTItMworYWx3YXlzIOuDoyAxNC0zNDUtMworYWx3YXlzIOuDpCAxNC0zNDUtMy0zCithbHdheXMg64OlIDE0LTM0NS0yMzU2CithbHdheXMg64OmIDE0LTM0NS0xMworYWx3YXlzIOuDpyAxNC0zNDUtMjMKK2Fsd2F5cyDrg6ggMTQtMzQ1LTIzNQorYWx3YXlzIOuDqSAxNC0zNDUtMjM2CithbHdheXMg64OqIDE0LTM0NS0yNTYKK2Fsd2F5cyDrg6sgMTQtMzQ1LTM1NgorYWx3YXlzIOuDrCAxNC0zNDUtMTIzNQorYWx3YXlzIOuDrSAxNC0zNDUtMTIzNS0xCithbHdheXMg64OuIDE0LTM0NS0xMjM1LTEtMQorYWx3YXlzIOuDryAxNC0zNDUtMTIzNS0xLTMKK2Fsd2F5cyDrg7AgMTQtMzQ1LTEyMzUtMjUKK2Fsd2F5cyDrg7EgMTQtMzQ1LTEyMzUtMjUtMTMKK2Fsd2F5cyDrg7IgMTQtMzQ1LTEyMzUtMjUtMzU2CithbHdheXMg64OzIDE0LTM0NS0xMjM1LTM1CithbHdheXMg64O0IDE0LTM0NS0xMjM1LTIKK2Fsd2F5cyDrg7UgMTQtMzQ1LTEyMzUtMi0xCithbHdheXMg64O2IDE0LTM0NS0xMjM1LTItMjYKK2Fsd2F5cyDrg7cgMTQtMzQ1LTEyMzUtMi0xMgorYWx3YXlzIOuDuCAxNC0zNDUtMTIzNS0yLTMKK2Fsd2F5cyDrg7kgMTQtMzQ1LTEyMzUtMi0yMzYKK2Fsd2F5cyDrg7ogMTQtMzQ1LTEyMzUtMi0yNTYKK2Fsd2F5cyDrg7sgMTQtMzQ1LTEyMzUtMi0zNTYKK2Fsd2F5cyDrg7wgMTQtMzQ1LTEyMzUtMjYKK2Fsd2F5cyDrg70gMTQtMzQ1LTEyMzUtMTIKK2Fsd2F5cyDrg74gMTQtMzQ1LTEyMzUtMTItMworYWx3YXlzIOuDvyAxNC0zNDUtMTIzNS0zCithbHdheXMg64SAIDE0LTM0NS0xMjM1LTMtMworYWx3YXlzIOuEgSAxNC0zNDUtMTIzNS0yMzU2CithbHdheXMg64SCIDE0LTM0NS0xMjM1LTEzCithbHdheXMg64SDIDE0LTM0NS0xMjM1LTIzCithbHdheXMg64SEIDE0LTM0NS0xMjM1LTIzNQorYWx3YXlzIOuEhSAxNC0zNDUtMTIzNS0yMzYKK2Fsd2F5cyDrhIYgMTQtMzQ1LTEyMzUtMjU2CithbHdheXMg64SHIDE0LTM0NS0xMjM1LTM1NgorYWx3YXlzIOuEiCAxNC0yMzQKK2Fsd2F5cyDrhIkgMTQtMjM0LTEKK2Fsd2F5cyDrhIogMTQtMjM0LTEtMQorYWx3YXlzIOuEiyAxNC0yMzQtMS0zCithbHdheXMg64SMIDE0LTIzNC0yNQorYWx3YXlzIOuEjSAxNC0yMzQtMjUtMTMKK2Fsd2F5cyDrhI4gMTQtMjM0LTI1LTM1NgorYWx3YXlzIOuEjyAxNC0yMzQtMzUKK2Fsd2F5cyDrhJAgMTQtMjM0LTIKK2Fsd2F5cyDrhJEgMTQtMjM0LTItMQorYWx3YXlzIOuEkiAxNC0yMzQtMi0yNgorYWx3YXlzIOuEkyAxNC0yMzQtMi0xMgorYWx3YXlzIOuElCAxNC0yMzQtMi0zCithbHdheXMg64SVIDE0LTIzNC0yLTIzNgorYWx3YXlzIOuEliAxNC0yMzQtMi0yNTYKK2Fsd2F5cyDrhJcgMTQtMjM0LTItMzU2CithbHdheXMg64SYIDE0LTIzNC0yNgorYWx3YXlzIOuEmSAxNC0yMzQtMTIKK2Fsd2F5cyDrhJogMTQtMjM0LTEyLTMKK2Fsd2F5cyDrhJsgMTQtMjM0LTMKK2Fsd2F5cyDrhJwgMTQtMjM0LTMtMworYWx3YXlzIOuEnSAxNC0yMzQtMjM1NgorYWx3YXlzIOuEniAxNC0yMzQtMTMKK2Fsd2F5cyDrhJ8gMTQtMjM0LTIzCithbHdheXMg64SgIDE0LTIzNC0yMzUKK2Fsd2F5cyDrhKEgMTQtMjM0LTIzNgorYWx3YXlzIOuEoiAxNC0yMzQtMjU2CithbHdheXMg64SjIDE0LTIzNC0zNTYKK2Fsd2F5cyDrhKQgMTQtMTM0NQorYWx3YXlzIOuEpSAxNC0xMzQ1LTEKK2Fsd2F5cyDrhKYgMTQtMTM0NS0xLTEKK2Fsd2F5cyDrhKcgMTQtMTM0NS0xLTMKK2Fsd2F5cyDrhKggMTQtMTM0NS0yNQorYWx3YXlzIOuEqSAxNC0xMzQ1LTI1LTEzCithbHdheXMg64SqIDE0LTEzNDUtMjUtMzU2CithbHdheXMg64SrIDE0LTEzNDUtMzUKK2Fsd2F5cyDrhKwgMTQtMTM0NS0yCithbHdheXMg64StIDE0LTEzNDUtMi0xCithbHdheXMg64SuIDE0LTEzNDUtMi0yNgorYWx3YXlzIOuEryAxNC0xMzQ1LTItMTIKK2Fsd2F5cyDrhLAgMTQtMTM0NS0yLTMKK2Fsd2F5cyDrhLEgMTQtMTM0NS0yLTIzNgorYWx3YXlzIOuEsiAxNC0xMzQ1LTItMjU2CithbHdheXMg64SzIDE0LTEzNDUtMi0zNTYKK2Fsd2F5cyDrhLQgMTQtMTM0NS0yNgorYWx3YXlzIOuEtSAxNC0xMzQ1LTEyCithbHdheXMg64S2IDE0LTEzNDUtMTItMworYWx3YXlzIOuEtyAxNC0xMzQ1LTMKK2Fsd2F5cyDrhLggMTQtMTM0NS0zLTMKK2Fsd2F5cyDrhLkgMTQtMTM0NS0yMzU2CithbHdheXMg64S6IDE0LTEzNDUtMTMKK2Fsd2F5cyDrhLsgMTQtMTM0NS0yMworYWx3YXlzIOuEvCAxNC0xMzQ1LTIzNQorYWx3YXlzIOuEvSAxNC0xMzQ1LTIzNgorYWx3YXlzIOuEviAxNC0xMzQ1LTI1NgorYWx3YXlzIOuEvyAxNC0xMzQ1LTM1NgorYWx3YXlzIOuFgCAxNC0xNTYKK2Fsd2F5cyDrhYEgMTQtMTU2LTEKK2Fsd2F5cyDrhYIgMTQtMTU2LTEtMQorYWx3YXlzIOuFgyAxNC0xNTYtMS0zCithbHdheXMg64WEIDE0LTE1Ni0yNQorYWx3YXlzIOuFhSAxNC0xNTYtMjUtMTMKK2Fsd2F5cyDrhYYgMTQtMTU2LTI1LTM1NgorYWx3YXlzIOuFhyAxNC0xNTYtMzUKK2Fsd2F5cyDrhYggMTQtMTU2LTIKK2Fsd2F5cyDrhYkgMTQtMTU2LTItMQorYWx3YXlzIOuFiiAxNC0xNTYtMi0yNgorYWx3YXlzIOuFiyAxNC0xNTYtMi0xMgorYWx3YXlzIOuFjCAxNC0xNTYtMi0zCithbHdheXMg64WNIDE0LTE1Ni0yLTIzNgorYWx3YXlzIOuFjiAxNC0xNTYtMi0yNTYKK2Fsd2F5cyDrhY8gMTQtMTU2LTItMzU2CithbHdheXMg64WQIDE0LTE1Ni0yNgorYWx3YXlzIOuFkSAxNC0xNTYtMTIKK2Fsd2F5cyDrhZIgMTQtMTU2LTEyLTMKK2Fsd2F5cyDrhZMgMTQtMTU2LTMKK2Fsd2F5cyDrhZQgMTQtMTU2LTMtMworYWx3YXlzIOuFlSAxNC0xNTYtMjM1NgorYWx3YXlzIOuFliAxNC0xNTYtMTMKK2Fsd2F5cyDrhZcgMTQtMTU2LTIzCithbHdheXMg64WYIDE0LTE1Ni0yMzUKK2Fsd2F5cyDrhZkgMTQtMTU2LTIzNgorYWx3YXlzIOuFmiAxNC0xNTYtMjU2CithbHdheXMg64WbIDE0LTE1Ni0zNTYKK2Fsd2F5cyDrhZwgMTQtMzQKK2Fsd2F5cyDrhZ0gMTQtMzQtMQorYWx3YXlzIOuFniAxNC0zNC0xLTEKK2Fsd2F5cyDrhZ8gMTQtMzQtMS0zCithbHdheXMg64WgIDE0LTM0LTI1CithbHdheXMg64WhIDE0LTM0LTI1LTEzCithbHdheXMg64WiIDE0LTM0LTI1LTM1NgorYWx3YXlzIOuFoyAxNC0zNC0zNQorYWx3YXlzIOuFpCAxNC0zNC0yCithbHdheXMg64WlIDE0LTM0LTItMQorYWx3YXlzIOuFpiAxNC0zNC0yLTI2CithbHdheXMg64WnIDE0LTM0LTItMTIKK2Fsd2F5cyDrhaggMTQtMzQtMi0zCithbHdheXMg64WpIDE0LTM0LTItMjM2CithbHdheXMg64WqIDE0LTM0LTItMjU2CithbHdheXMg64WrIDE0LTM0LTItMzU2CithbHdheXMg64WsIDE0LTM0LTI2CithbHdheXMg64WtIDE0LTM0LTEyCithbHdheXMg64WuIDE0LTM0LTEyLTMKK2Fsd2F5cyDrha8gMTQtMzQtMworYWx3YXlzIOuFsCAxNC0zNC0zLTMKK2Fsd2F5cyDrhbEgMTQtMzQtMjM1NgorYWx3YXlzIOuFsiAxNC0zNC0xMworYWx3YXlzIOuFsyAxNC0zNC0yMworYWx3YXlzIOuFtCAxNC0zNC0yMzUKK2Fsd2F5cyDrhbUgMTQtMzQtMjM2CithbHdheXMg64W2IDE0LTM0LTI1NgorYWx3YXlzIOuFtyAxNC0zNC0zNTYKK2Fsd2F5cyDrhbggMTQtMTM2CithbHdheXMg64W5IDE0LTEzNi0xCithbHdheXMg64W6IDE0LTEzNi0xLTEKK2Fsd2F5cyDrhbsgMTQtMTM2LTEtMworYWx3YXlzIOuFvCAxNC0xMzYtMjUKK2Fsd2F5cyDrhb0gMTQtMTM2LTI1LTEzCithbHdheXMg64W+IDE0LTEzNi0yNS0zNTYKK2Fsd2F5cyDrhb8gMTQtMTM2LTM1CithbHdheXMg64aAIDE0LTEzNi0yCithbHdheXMg64aBIDE0LTEzNi0yLTEKK2Fsd2F5cyDrhoIgMTQtMTM2LTItMjYKK2Fsd2F5cyDrhoMgMTQtMTM2LTItMTIKK2Fsd2F5cyDrhoQgMTQtMTM2LTItMworYWx3YXlzIOuGhSAxNC0xMzYtMi0yMzYKK2Fsd2F5cyDrhoYgMTQtMTM2LTItMjU2CithbHdheXMg64aHIDE0LTEzNi0yLTM1NgorYWx3YXlzIOuGiCAxNC0xMzYtMjYKK2Fsd2F5cyDrhokgMTQtMTM2LTEyCithbHdheXMg64aKIDE0LTEzNi0xMi0zCithbHdheXMg64aLIDE0LTEzNi0zCithbHdheXMg64aMIDE0LTEzNi0zLTMKK2Fsd2F5cyDrho0gMTQtMTM2LTIzNTYKK2Fsd2F5cyDrho4gMTQtMTM2LTEzCithbHdheXMg64aPIDE0LTEzNi0yMworYWx3YXlzIOuGkCAxNC0xMzYtMjM1CithbHdheXMg64aRIDE0LTEzNi0yMzYKK2Fsd2F5cyDrhpIgMTQtMTM2LTI1NgorYWx3YXlzIOuGkyAxNC0xMzYtMzU2CithbHdheXMg64aUIDE0LTEyMzYKK2Fsd2F5cyDrhpUgMTQtMTIzNi0xCithbHdheXMg64aWIDE0LTEyMzYtMS0xCithbHdheXMg64aXIDE0LTEyMzYtMS0zCithbHdheXMg64aYIDE0LTEyMzYtMjUKK2Fsd2F5cyDrhpkgMTQtMTIzNi0yNS0xMworYWx3YXlzIOuGmiAxNC0xMjM2LTI1LTM1NgorYWx3YXlzIOuGmyAxNC0xMjM2LTM1CithbHdheXMg64acIDE0LTEyMzYtMgorYWx3YXlzIOuGnSAxNC0xMjM2LTItMQorYWx3YXlzIOuGniAxNC0xMjM2LTItMjYKK2Fsd2F5cyDrhp8gMTQtMTIzNi0yLTEyCithbHdheXMg64agIDE0LTEyMzYtMi0zCithbHdheXMg64ahIDE0LTEyMzYtMi0yMzYKK2Fsd2F5cyDrhqIgMTQtMTIzNi0yLTI1NgorYWx3YXlzIOuGoyAxNC0xMjM2LTItMzU2CithbHdheXMg64akIDE0LTEyMzYtMjYKK2Fsd2F5cyDrhqUgMTQtMTIzNi0xMgorYWx3YXlzIOuGpiAxNC0xMjM2LTEyLTMKK2Fsd2F5cyDrhqcgMTQtMTIzNi0zCithbHdheXMg64aoIDE0LTEyMzYtMy0zCithbHdheXMg64apIDE0LTEyMzYtMjM1NgorYWx3YXlzIOuGqiAxNC0xMjM2LTEzCithbHdheXMg64arIDE0LTEyMzYtMjMKK2Fsd2F5cyDrhqwgMTQtMTIzNi0yMzUKK2Fsd2F5cyDrhq0gMTQtMTIzNi0yMzYKK2Fsd2F5cyDrhq4gMTQtMTIzNi0yNTYKK2Fsd2F5cyDrhq8gMTQtMTIzNi0zNTYKK2Fsd2F5cyDrhrAgMTQtMTIzNi0xMjM1CithbHdheXMg64axIDE0LTEyMzYtMTIzNS0xCithbHdheXMg64ayIDE0LTEyMzYtMTIzNS0xLTEKK2Fsd2F5cyDrhrMgMTQtMTIzNi0xMjM1LTEtMworYWx3YXlzIOuGtCAxNC0xMjM2LTEyMzUtMjUKK2Fsd2F5cyDrhrUgMTQtMTIzNi0xMjM1LTI1LTEzCithbHdheXMg64a2IDE0LTEyMzYtMTIzNS0yNS0zNTYKK2Fsd2F5cyDrhrcgMTQtMTIzNi0xMjM1LTM1CithbHdheXMg64a4IDE0LTEyMzYtMTIzNS0yCithbHdheXMg64a5IDE0LTEyMzYtMTIzNS0yLTEKK2Fsd2F5cyDrhrogMTQtMTIzNi0xMjM1LTItMjYKK2Fsd2F5cyDrhrsgMTQtMTIzNi0xMjM1LTItMTIKK2Fsd2F5cyDrhrwgMTQtMTIzNi0xMjM1LTItMworYWx3YXlzIOuGvSAxNC0xMjM2LTEyMzUtMi0yMzYKK2Fsd2F5cyDrhr4gMTQtMTIzNi0xMjM1LTItMjU2CithbHdheXMg64a/IDE0LTEyMzYtMTIzNS0yLTM1NgorYWx3YXlzIOuHgCAxNC0xMjM2LTEyMzUtMjYKK2Fsd2F5cyDrh4EgMTQtMTIzNi0xMjM1LTEyCithbHdheXMg64eCIDE0LTEyMzYtMTIzNS0xMi0zCithbHdheXMg64eDIDE0LTEyMzYtMTIzNS0zCithbHdheXMg64eEIDE0LTEyMzYtMTIzNS0zLTMKK2Fsd2F5cyDrh4UgMTQtMTIzNi0xMjM1LTIzNTYKK2Fsd2F5cyDrh4YgMTQtMTIzNi0xMjM1LTEzCithbHdheXMg64eHIDE0LTEyMzYtMTIzNS0yMworYWx3YXlzIOuHiCAxNC0xMjM2LTEyMzUtMjM1CithbHdheXMg64eJIDE0LTEyMzYtMTIzNS0yMzYKK2Fsd2F5cyDrh4ogMTQtMTIzNi0xMjM1LTI1NgorYWx3YXlzIOuHiyAxNC0xMjM2LTEyMzUtMzU2CithbHdheXMg64eMIDE0LTEzNDU2CithbHdheXMg64eNIDE0LTEzNDU2LTEKK2Fsd2F5cyDrh44gMTQtMTM0NTYtMS0xCithbHdheXMg64ePIDE0LTEzNDU2LTEtMworYWx3YXlzIOuHkCAxNC0xMzQ1Ni0yNQorYWx3YXlzIOuHkSAxNC0xMzQ1Ni0yNS0xMworYWx3YXlzIOuHkiAxNC0xMzQ1Ni0yNS0zNTYKK2Fsd2F5cyDrh5MgMTQtMTM0NTYtMzUKK2Fsd2F5cyDrh5QgMTQtMTM0NTYtMgorYWx3YXlzIOuHlSAxNC0xMzQ1Ni0yLTEKK2Fsd2F5cyDrh5YgMTQtMTM0NTYtMi0yNgorYWx3YXlzIOuHlyAxNC0xMzQ1Ni0yLTEyCithbHdheXMg64eYIDE0LTEzNDU2LTItMworYWx3YXlzIOuHmSAxNC0xMzQ1Ni0yLTIzNgorYWx3YXlzIOuHmiAxNC0xMzQ1Ni0yLTI1NgorYWx3YXlzIOuHmyAxNC0xMzQ1Ni0yLTM1NgorYWx3YXlzIOuHnCAxNC0xMzQ1Ni0yNgorYWx3YXlzIOuHnSAxNC0xMzQ1Ni0xMgorYWx3YXlzIOuHniAxNC0xMzQ1Ni0xMi0zCithbHdheXMg64efIDE0LTEzNDU2LTMKK2Fsd2F5cyDrh6AgMTQtMTM0NTYtMy0zCithbHdheXMg64ehIDE0LTEzNDU2LTIzNTYKK2Fsd2F5cyDrh6IgMTQtMTM0NTYtMTMKK2Fsd2F5cyDrh6MgMTQtMTM0NTYtMjMKK2Fsd2F5cyDrh6QgMTQtMTM0NTYtMjM1CithbHdheXMg64elIDE0LTEzNDU2LTIzNgorYWx3YXlzIOuHpiAxNC0xMzQ1Ni0yNTYKK2Fsd2F5cyDrh6cgMTQtMTM0NTYtMzU2CithbHdheXMg64eoIDE0LTM0NgorYWx3YXlzIOuHqSAxNC0zNDYtMQorYWx3YXlzIOuHqiAxNC0zNDYtMS0xCithbHdheXMg64erIDE0LTM0Ni0xLTMKK2Fsd2F5cyDrh6wgMTQtMzQ2LTI1CithbHdheXMg64etIDE0LTM0Ni0yNS0xMworYWx3YXlzIOuHriAxNC0zNDYtMjUtMzU2CithbHdheXMg64evIDE0LTM0Ni0zNQorYWx3YXlzIOuHsCAxNC0zNDYtMgorYWx3YXlzIOuHsSAxNC0zNDYtMi0xCithbHdheXMg64eyIDE0LTM0Ni0yLTI2CithbHdheXMg64ezIDE0LTM0Ni0yLTEyCithbHdheXMg64e0IDE0LTM0Ni0yLTMKK2Fsd2F5cyDrh7UgMTQtMzQ2LTItMjM2CithbHdheXMg64e2IDE0LTM0Ni0yLTI1NgorYWx3YXlzIOuHtyAxNC0zNDYtMi0zNTYKK2Fsd2F5cyDrh7ggMTQtMzQ2LTI2CithbHdheXMg64e5IDE0LTM0Ni0xMgorYWx3YXlzIOuHuiAxNC0zNDYtMTItMworYWx3YXlzIOuHuyAxNC0zNDYtMworYWx3YXlzIOuHvCAxNC0zNDYtMy0zCithbHdheXMg64e9IDE0LTM0Ni0yMzU2CithbHdheXMg64e+IDE0LTM0Ni0xMworYWx3YXlzIOuHvyAxNC0zNDYtMjMKK2Fsd2F5cyDriIAgMTQtMzQ2LTIzNQorYWx3YXlzIOuIgSAxNC0zNDYtMjM2CithbHdheXMg64iCIDE0LTM0Ni0yNTYKK2Fsd2F5cyDriIMgMTQtMzQ2LTM1NgorYWx3YXlzIOuIhCAxNC0xMzQKK2Fsd2F5cyDriIUgMTQtMTM0LTEKK2Fsd2F5cyDriIYgMTQtMTM0LTEtMQorYWx3YXlzIOuIhyAxNC0xMzQtMS0zCithbHdheXMg64iIIDE0LTEzNC0yNQorYWx3YXlzIOuIiSAxNC0xMzQtMjUtMTMKK2Fsd2F5cyDriIogMTQtMTM0LTI1LTM1NgorYWx3YXlzIOuIiyAxNC0xMzQtMzUKK2Fsd2F5cyDriIwgMTQtMTM0LTIKK2Fsd2F5cyDriI0gMTQtMTM0LTItMQorYWx3YXlzIOuIjiAxNC0xMzQtMi0yNgorYWx3YXlzIOuIjyAxNC0xMzQtMi0xMgorYWx3YXlzIOuIkCAxNC0xMzQtMi0zCithbHdheXMg64iRIDE0LTEzNC0yLTIzNgorYWx3YXlzIOuIkiAxNC0xMzQtMi0yNTYKK2Fsd2F5cyDriJMgMTQtMTM0LTItMzU2CithbHdheXMg64iUIDE0LTEzNC0yNgorYWx3YXlzIOuIlSAxNC0xMzQtMTIKK2Fsd2F5cyDriJYgMTQtMTM0LTEyLTMKK2Fsd2F5cyDriJcgMTQtMTM0LTMKK2Fsd2F5cyDriJggMTQtMTM0LTMtMworYWx3YXlzIOuImSAxNC0xMzQtMjM1NgorYWx3YXlzIOuImiAxNC0xMzQtMTMKK2Fsd2F5cyDriJsgMTQtMTM0LTIzCithbHdheXMg64icIDE0LTEzNC0yMzUKK2Fsd2F5cyDriJ0gMTQtMTM0LTIzNgorYWx3YXlzIOuIniAxNC0xMzQtMjU2CithbHdheXMg64ifIDE0LTEzNC0zNTYKK2Fsd2F5cyDriKAgMTQtMTIzNAorYWx3YXlzIOuIoSAxNC0xMjM0LTEKK2Fsd2F5cyDriKIgMTQtMTIzNC0xLTEKK2Fsd2F5cyDriKMgMTQtMTIzNC0xLTMKK2Fsd2F5cyDriKQgMTQtMTIzNC0yNQorYWx3YXlzIOuIpSAxNC0xMjM0LTI1LTEzCithbHdheXMg64imIDE0LTEyMzQtMjUtMzU2CithbHdheXMg64inIDE0LTEyMzQtMzUKK2Fsd2F5cyDriKggMTQtMTIzNC0yCithbHdheXMg64ipIDE0LTEyMzQtMi0xCithbHdheXMg64iqIDE0LTEyMzQtMi0yNgorYWx3YXlzIOuIqyAxNC0xMjM0LTItMTIKK2Fsd2F5cyDriKwgMTQtMTIzNC0yLTMKK2Fsd2F5cyDriK0gMTQtMTIzNC0yLTIzNgorYWx3YXlzIOuIriAxNC0xMjM0LTItMjU2CithbHdheXMg64ivIDE0LTEyMzQtMi0zNTYKK2Fsd2F5cyDriLAgMTQtMTIzNC0yNgorYWx3YXlzIOuIsSAxNC0xMjM0LTEyCithbHdheXMg64iyIDE0LTEyMzQtMTItMworYWx3YXlzIOuIsyAxNC0xMjM0LTMKK2Fsd2F5cyDriLQgMTQtMTIzNC0zLTMKK2Fsd2F5cyDriLUgMTQtMTIzNC0yMzU2CithbHdheXMg64i2IDE0LTEyMzQtMTMKK2Fsd2F5cyDriLcgMTQtMTIzNC0yMworYWx3YXlzIOuIuCAxNC0xMjM0LTIzNQorYWx3YXlzIOuIuSAxNC0xMjM0LTIzNgorYWx3YXlzIOuIuiAxNC0xMjM0LTI1NgorYWx3YXlzIOuIuyAxNC0xMjM0LTM1NgorYWx3YXlzIOuIvCAxNC0xMjM0LTEyMzUKK2Fsd2F5cyDriL0gMTQtMTIzNC0xMjM1LTEKK2Fsd2F5cyDriL4gMTQtMTIzNC0xMjM1LTEtMQorYWx3YXlzIOuIvyAxNC0xMjM0LTEyMzUtMS0zCithbHdheXMg64mAIDE0LTEyMzQtMTIzNS0yNQorYWx3YXlzIOuJgSAxNC0xMjM0LTEyMzUtMjUtMTMKK2Fsd2F5cyDriYIgMTQtMTIzNC0xMjM1LTI1LTM1NgorYWx3YXlzIOuJgyAxNC0xMjM0LTEyMzUtMzUKK2Fsd2F5cyDriYQgMTQtMTIzNC0xMjM1LTIKK2Fsd2F5cyDriYUgMTQtMTIzNC0xMjM1LTItMQorYWx3YXlzIOuJhiAxNC0xMjM0LTEyMzUtMi0yNgorYWx3YXlzIOuJhyAxNC0xMjM0LTEyMzUtMi0xMgorYWx3YXlzIOuJiCAxNC0xMjM0LTEyMzUtMi0zCithbHdheXMg64mJIDE0LTEyMzQtMTIzNS0yLTIzNgorYWx3YXlzIOuJiiAxNC0xMjM0LTEyMzUtMi0yNTYKK2Fsd2F5cyDriYsgMTQtMTIzNC0xMjM1LTItMzU2CithbHdheXMg64mMIDE0LTEyMzQtMTIzNS0yNgorYWx3YXlzIOuJjSAxNC0xMjM0LTEyMzUtMTIKK2Fsd2F5cyDriY4gMTQtMTIzNC0xMjM1LTEyLTMKK2Fsd2F5cyDriY8gMTQtMTIzNC0xMjM1LTMKK2Fsd2F5cyDriZAgMTQtMTIzNC0xMjM1LTMtMworYWx3YXlzIOuJkSAxNC0xMjM0LTEyMzUtMjM1NgorYWx3YXlzIOuJkiAxNC0xMjM0LTEyMzUtMTMKK2Fsd2F5cyDriZMgMTQtMTIzNC0xMjM1LTIzCithbHdheXMg64mUIDE0LTEyMzQtMTIzNS0yMzUKK2Fsd2F5cyDriZUgMTQtMTIzNC0xMjM1LTIzNgorYWx3YXlzIOuJliAxNC0xMjM0LTEyMzUtMjU2CithbHdheXMg64mXIDE0LTEyMzQtMTIzNS0zNTYKK2Fsd2F5cyDriZggMTQtMTM0LTEyMzUKK2Fsd2F5cyDriZkgMTQtMTM0LTEyMzUtMQorYWx3YXlzIOuJmiAxNC0xMzQtMTIzNS0xLTEKK2Fsd2F5cyDriZsgMTQtMTM0LTEyMzUtMS0zCithbHdheXMg64mcIDE0LTEzNC0xMjM1LTI1CithbHdheXMg64mdIDE0LTEzNC0xMjM1LTI1LTEzCithbHdheXMg64meIDE0LTEzNC0xMjM1LTI1LTM1NgorYWx3YXlzIOuJnyAxNC0xMzQtMTIzNS0zNQorYWx3YXlzIOuJoCAxNC0xMzQtMTIzNS0yCithbHdheXMg64mhIDE0LTEzNC0xMjM1LTItMQorYWx3YXlzIOuJoiAxNC0xMzQtMTIzNS0yLTI2CithbHdheXMg64mjIDE0LTEzNC0xMjM1LTItMTIKK2Fsd2F5cyDriaQgMTQtMTM0LTEyMzUtMi0zCithbHdheXMg64mlIDE0LTEzNC0xMjM1LTItMjM2CithbHdheXMg64mmIDE0LTEzNC0xMjM1LTItMjU2CithbHdheXMg64mnIDE0LTEzNC0xMjM1LTItMzU2CithbHdheXMg64moIDE0LTEzNC0xMjM1LTI2CithbHdheXMg64mpIDE0LTEzNC0xMjM1LTEyCithbHdheXMg64mqIDE0LTEzNC0xMjM1LTEyLTMKK2Fsd2F5cyDriasgMTQtMTM0LTEyMzUtMworYWx3YXlzIOuJrCAxNC0xMzQtMTIzNS0zLTMKK2Fsd2F5cyDria0gMTQtMTM0LTEyMzUtMjM1NgorYWx3YXlzIOuJriAxNC0xMzQtMTIzNS0xMworYWx3YXlzIOuJryAxNC0xMzQtMTIzNS0yMworYWx3YXlzIOuJsCAxNC0xMzQtMTIzNS0yMzUKK2Fsd2F5cyDribEgMTQtMTM0LTEyMzUtMjM2CithbHdheXMg64myIDE0LTEzNC0xMjM1LTI1NgorYWx3YXlzIOuJsyAxNC0xMzQtMTIzNS0zNTYKK2Fsd2F5cyDribQgMTQtMTQ2CithbHdheXMg64m1IDE0LTE0Ni0xCithbHdheXMg64m2IDE0LTE0Ni0xLTEKK2Fsd2F5cyDribcgMTQtMTQ2LTEtMworYWx3YXlzIOuJuCAxNC0xNDYtMjUKK2Fsd2F5cyDribkgMTQtMTQ2LTI1LTEzCithbHdheXMg64m6IDE0LTE0Ni0yNS0zNTYKK2Fsd2F5cyDribsgMTQtMTQ2LTM1CithbHdheXMg64m8IDE0LTE0Ni0yCithbHdheXMg64m9IDE0LTE0Ni0yLTEKK2Fsd2F5cyDrib4gMTQtMTQ2LTItMjYKK2Fsd2F5cyDrib8gMTQtMTQ2LTItMTIKK2Fsd2F5cyDrioAgMTQtMTQ2LTItMworYWx3YXlzIOuKgSAxNC0xNDYtMi0yMzYKK2Fsd2F5cyDrioIgMTQtMTQ2LTItMjU2CithbHdheXMg64qDIDE0LTE0Ni0yLTM1NgorYWx3YXlzIOuKhCAxNC0xNDYtMjYKK2Fsd2F5cyDrioUgMTQtMTQ2LTEyCithbHdheXMg64qGIDE0LTE0Ni0xMi0zCithbHdheXMg64qHIDE0LTE0Ni0zCithbHdheXMg64qIIDE0LTE0Ni0zLTMKK2Fsd2F5cyDriokgMTQtMTQ2LTIzNTYKK2Fsd2F5cyDrioogMTQtMTQ2LTEzCithbHdheXMg64qLIDE0LTE0Ni0yMworYWx3YXlzIOuKjCAxNC0xNDYtMjM1CithbHdheXMg64qNIDE0LTE0Ni0yMzYKK2Fsd2F5cyDrio4gMTQtMTQ2LTI1NgorYWx3YXlzIOuKjyAxNC0xNDYtMzU2CithbHdheXMg64qQIDE0LTI0NgorYWx3YXlzIOuKkSAxNC0yNDYtMQorYWx3YXlzIOuKkiAxNC0yNDYtMS0xCithbHdheXMg64qTIDE0LTI0Ni0xLTMKK2Fsd2F5cyDripQgMTQtMjQ2LTI1CithbHdheXMg64qVIDE0LTI0Ni0yNS0xMworYWx3YXlzIOuKliAxNC0yNDYtMjUtMzU2CithbHdheXMg64qXIDE0LTI0Ni0zNQorYWx3YXlzIOuKmCAxNC0yNDYtMgorYWx3YXlzIOuKmSAxNC0yNDYtMi0xCithbHdheXMg64qaIDE0LTI0Ni0yLTI2CithbHdheXMg64qbIDE0LTI0Ni0yLTEyCithbHdheXMg64qcIDE0LTI0Ni0yLTMKK2Fsd2F5cyDrip0gMTQtMjQ2LTItMjM2CithbHdheXMg64qeIDE0LTI0Ni0yLTI1NgorYWx3YXlzIOuKnyAxNC0yNDYtMi0zNTYKK2Fsd2F5cyDriqAgMTQtMjQ2LTI2CithbHdheXMg64qhIDE0LTI0Ni0xMgorYWx3YXlzIOuKoiAxNC0yNDYtMTItMworYWx3YXlzIOuKoyAxNC0yNDYtMworYWx3YXlzIOuKpCAxNC0yNDYtMy0zCithbHdheXMg64qlIDE0LTI0Ni0yMzU2CithbHdheXMg64qmIDE0LTI0Ni0xMworYWx3YXlzIOuKpyAxNC0yNDYtMjMKK2Fsd2F5cyDriqggMTQtMjQ2LTIzNQorYWx3YXlzIOuKqSAxNC0yNDYtMjM2CithbHdheXMg64qqIDE0LTI0Ni0yNTYKK2Fsd2F5cyDriqsgMTQtMjQ2LTM1NgorYWx3YXlzIOuKrCAxNC0yNDU2CithbHdheXMg64qtIDE0LTI0NTYtMQorYWx3YXlzIOuKriAxNC0yNDU2LTEtMQorYWx3YXlzIOuKryAxNC0yNDU2LTEtMworYWx3YXlzIOuKsCAxNC0yNDU2LTI1CithbHdheXMg64qxIDE0LTI0NTYtMjUtMTMKK2Fsd2F5cyDrirIgMTQtMjQ1Ni0yNS0zNTYKK2Fsd2F5cyDrirMgMTQtMjQ1Ni0zNQorYWx3YXlzIOuKtCAxNC0yNDU2LTIKK2Fsd2F5cyDrirUgMTQtMjQ1Ni0yLTEKK2Fsd2F5cyDrirYgMTQtMjQ1Ni0yLTI2CithbHdheXMg64q3IDE0LTI0NTYtMi0xMgorYWx3YXlzIOuKuCAxNC0yNDU2LTItMworYWx3YXlzIOuKuSAxNC0yNDU2LTItMjM2CithbHdheXMg64q6IDE0LTI0NTYtMi0yNTYKK2Fsd2F5cyDrirsgMTQtMjQ1Ni0yLTM1NgorYWx3YXlzIOuKvCAxNC0yNDU2LTI2CithbHdheXMg64q9IDE0LTI0NTYtMTIKK2Fsd2F5cyDrir4gMTQtMjQ1Ni0xMi0zCithbHdheXMg64q/IDE0LTI0NTYtMworYWx3YXlzIOuLgCAxNC0yNDU2LTMtMworYWx3YXlzIOuLgSAxNC0yNDU2LTIzNTYKK2Fsd2F5cyDri4IgMTQtMjQ1Ni0xMworYWx3YXlzIOuLgyAxNC0yNDU2LTIzCithbHdheXMg64uEIDE0LTI0NTYtMjM1CithbHdheXMg64uFIDE0LTI0NTYtMjM2CithbHdheXMg64uGIDE0LTI0NTYtMjU2CithbHdheXMg64uHIDE0LTI0NTYtMzU2CithbHdheXMg64uIIDE0LTEzNQorYWx3YXlzIOuLiSAxNC0xMzUtMQorYWx3YXlzIOuLiiAxNC0xMzUtMS0xCithbHdheXMg64uLIDE0LTEzNS0xLTMKK2Fsd2F5cyDri4wgMTQtMTM1LTI1CithbHdheXMg64uNIDE0LTEzNS0yNS0xMworYWx3YXlzIOuLjiAxNC0xMzUtMjUtMzU2CithbHdheXMg64uPIDE0LTEzNS0zNQorYWx3YXlzIOuLkCAxNC0xMzUtMgorYWx3YXlzIOuLkSAxNC0xMzUtMi0xCithbHdheXMg64uSIDE0LTEzNS0yLTI2CithbHdheXMg64uTIDE0LTEzNS0yLTEyCithbHdheXMg64uUIDE0LTEzNS0yLTMKK2Fsd2F5cyDri5UgMTQtMTM1LTItMjM2CithbHdheXMg64uWIDE0LTEzNS0yLTI1NgorYWx3YXlzIOuLlyAxNC0xMzUtMi0zNTYKK2Fsd2F5cyDri5ggMTQtMTM1LTI2CithbHdheXMg64uZIDE0LTEzNS0xMgorYWx3YXlzIOuLmiAxNC0xMzUtMTItMworYWx3YXlzIOuLmyAxNC0xMzUtMworYWx3YXlzIOuLnCAxNC0xMzUtMy0zCithbHdheXMg64udIDE0LTEzNS0yMzU2CithbHdheXMg64ueIDE0LTEzNS0xMworYWx3YXlzIOuLnyAxNC0xMzUtMjMKK2Fsd2F5cyDri6AgMTQtMTM1LTIzNQorYWx3YXlzIOuLoSAxNC0xMzUtMjM2CithbHdheXMg64uiIDE0LTEzNS0yNTYKK2Fsd2F5cyDri6MgMTQtMTM1LTM1NgorYWx3YXlzIOuLpCAyNC0xMjYKK2Fsd2F5cyDri6UgMjQtMTI2LTEKK2Fsd2F5cyDri6YgMjQtMTI2LTEtMQorYWx3YXlzIOuLpyAyNC0xMjYtMS0zCithbHdheXMg64uoIDI0LTEyNi0yNQorYWx3YXlzIOuLqSAyNC0xMjYtMjUtMTMKK2Fsd2F5cyDri6ogMjQtMTI2LTI1LTM1NgorYWx3YXlzIOuLqyAyNC0xMjYtMzUKK2Fsd2F5cyDri6wgMjQtMTI2LTIKK2Fsd2F5cyDri60gMjQtMTI2LTItMQorYWx3YXlzIOuLriAyNC0xMjYtMi0yNgorYWx3YXlzIOuLryAyNC0xMjYtMi0xMgorYWx3YXlzIOuLsCAyNC0xMjYtMi0zCithbHdheXMg64uxIDI0LTEyNi0yLTIzNgorYWx3YXlzIOuLsiAyNC0xMjYtMi0yNTYKK2Fsd2F5cyDri7MgMjQtMTI2LTItMzU2CithbHdheXMg64u0IDI0LTEyNi0yNgorYWx3YXlzIOuLtSAyNC0xMjYtMTIKK2Fsd2F5cyDri7YgMjQtMTI2LTEyLTMKK2Fsd2F5cyDri7cgMjQtMTI2LTMKK2Fsd2F5cyDri7ggMjQtMTI2LTMtMworYWx3YXlzIOuLuSAyNC0xMjYtMjM1NgorYWx3YXlzIOuLuiAyNC0xMjYtMTMKK2Fsd2F5cyDri7sgMjQtMTI2LTIzCithbHdheXMg64u8IDI0LTEyNi0yMzUKK2Fsd2F5cyDri70gMjQtMTI2LTIzNgorYWx3YXlzIOuLviAyNC0xMjYtMjU2CithbHdheXMg64u/IDI0LTEyNi0zNTYKK2Fsd2F5cyDrjIAgMjQtMTIzNQorYWx3YXlzIOuMgSAyNC0xMjM1LTEKK2Fsd2F5cyDrjIIgMjQtMTIzNS0xLTEKK2Fsd2F5cyDrjIMgMjQtMTIzNS0xLTMKK2Fsd2F5cyDrjIQgMjQtMTIzNS0yNQorYWx3YXlzIOuMhSAyNC0xMjM1LTI1LTEzCithbHdheXMg64yGIDI0LTEyMzUtMjUtMzU2CithbHdheXMg64yHIDI0LTEyMzUtMzUKK2Fsd2F5cyDrjIggMjQtMTIzNS0yCithbHdheXMg64yJIDI0LTEyMzUtMi0xCithbHdheXMg64yKIDI0LTEyMzUtMi0yNgorYWx3YXlzIOuMiyAyNC0xMjM1LTItMTIKK2Fsd2F5cyDrjIwgMjQtMTIzNS0yLTMKK2Fsd2F5cyDrjI0gMjQtMTIzNS0yLTIzNgorYWx3YXlzIOuMjiAyNC0xMjM1LTItMjU2CithbHdheXMg64yPIDI0LTEyMzUtMi0zNTYKK2Fsd2F5cyDrjJAgMjQtMTIzNS0yNgorYWx3YXlzIOuMkSAyNC0xMjM1LTEyCithbHdheXMg64ySIDI0LTEyMzUtMTItMworYWx3YXlzIOuMkyAyNC0xMjM1LTMKK2Fsd2F5cyDrjJQgMjQtMTIzNS0zLTMKK2Fsd2F5cyDrjJUgMjQtMTIzNS0yMzU2CithbHdheXMg64yWIDI0LTEyMzUtMTMKK2Fsd2F5cyDrjJcgMjQtMTIzNS0yMworYWx3YXlzIOuMmCAyNC0xMjM1LTIzNQorYWx3YXlzIOuMmSAyNC0xMjM1LTIzNgorYWx3YXlzIOuMmiAyNC0xMjM1LTI1NgorYWx3YXlzIOuMmyAyNC0xMjM1LTM1NgorYWx3YXlzIOuMnCAyNC0zNDUKK2Fsd2F5cyDrjJ0gMjQtMzQ1LTEKK2Fsd2F5cyDrjJ4gMjQtMzQ1LTEtMQorYWx3YXlzIOuMnyAyNC0zNDUtMS0zCithbHdheXMg64ygIDI0LTM0NS0yNQorYWx3YXlzIOuMoSAyNC0zNDUtMjUtMTMKK2Fsd2F5cyDrjKIgMjQtMzQ1LTI1LTM1NgorYWx3YXlzIOuMoyAyNC0zNDUtMzUKK2Fsd2F5cyDrjKQgMjQtMzQ1LTIKK2Fsd2F5cyDrjKUgMjQtMzQ1LTItMQorYWx3YXlzIOuMpiAyNC0zNDUtMi0yNgorYWx3YXlzIOuMpyAyNC0zNDUtMi0xMgorYWx3YXlzIOuMqCAyNC0zNDUtMi0zCithbHdheXMg64ypIDI0LTM0NS0yLTIzNgorYWx3YXlzIOuMqiAyNC0zNDUtMi0yNTYKK2Fsd2F5cyDrjKsgMjQtMzQ1LTItMzU2CithbHdheXMg64ysIDI0LTM0NS0yNgorYWx3YXlzIOuMrSAyNC0zNDUtMTIKK2Fsd2F5cyDrjK4gMjQtMzQ1LTEyLTMKK2Fsd2F5cyDrjK8gMjQtMzQ1LTMKK2Fsd2F5cyDrjLAgMjQtMzQ1LTMtMworYWx3YXlzIOuMsSAyNC0zNDUtMjM1NgorYWx3YXlzIOuMsiAyNC0zNDUtMTMKK2Fsd2F5cyDrjLMgMjQtMzQ1LTIzCithbHdheXMg64y0IDI0LTM0NS0yMzUKK2Fsd2F5cyDrjLUgMjQtMzQ1LTIzNgorYWx3YXlzIOuMtiAyNC0zNDUtMjU2CithbHdheXMg64y3IDI0LTM0NS0zNTYKK2Fsd2F5cyDrjLggMjQtMzQ1LTEyMzUKK2Fsd2F5cyDrjLkgMjQtMzQ1LTEyMzUtMQorYWx3YXlzIOuMuiAyNC0zNDUtMTIzNS0xLTEKK2Fsd2F5cyDrjLsgMjQtMzQ1LTEyMzUtMS0zCithbHdheXMg64y8IDI0LTM0NS0xMjM1LTI1CithbHdheXMg64y9IDI0LTM0NS0xMjM1LTI1LTEzCithbHdheXMg64y+IDI0LTM0NS0xMjM1LTI1LTM1NgorYWx3YXlzIOuMvyAyNC0zNDUtMTIzNS0zNQorYWx3YXlzIOuNgCAyNC0zNDUtMTIzNS0yCithbHdheXMg642BIDI0LTM0NS0xMjM1LTItMQorYWx3YXlzIOuNgiAyNC0zNDUtMTIzNS0yLTI2CithbHdheXMg642DIDI0LTM0NS0xMjM1LTItMTIKK2Fsd2F5cyDrjYQgMjQtMzQ1LTEyMzUtMi0zCithbHdheXMg642FIDI0LTM0NS0xMjM1LTItMjM2CithbHdheXMg642GIDI0LTM0NS0xMjM1LTItMjU2CithbHdheXMg642HIDI0LTM0NS0xMjM1LTItMzU2CithbHdheXMg642IIDI0LTM0NS0xMjM1LTI2CithbHdheXMg642JIDI0LTM0NS0xMjM1LTEyCithbHdheXMg642KIDI0LTM0NS0xMjM1LTEyLTMKK2Fsd2F5cyDrjYsgMjQtMzQ1LTEyMzUtMworYWx3YXlzIOuNjCAyNC0zNDUtMTIzNS0zLTMKK2Fsd2F5cyDrjY0gMjQtMzQ1LTEyMzUtMjM1NgorYWx3YXlzIOuNjiAyNC0zNDUtMTIzNS0xMworYWx3YXlzIOuNjyAyNC0zNDUtMTIzNS0yMworYWx3YXlzIOuNkCAyNC0zNDUtMTIzNS0yMzUKK2Fsd2F5cyDrjZEgMjQtMzQ1LTEyMzUtMjM2CithbHdheXMg642SIDI0LTM0NS0xMjM1LTI1NgorYWx3YXlzIOuNkyAyNC0zNDUtMTIzNS0zNTYKK2Fsd2F5cyDrjZQgMjQtMjM0CithbHdheXMg642VIDI0LTIzNC0xCithbHdheXMg642WIDI0LTIzNC0xLTEKK2Fsd2F5cyDrjZcgMjQtMjM0LTEtMworYWx3YXlzIOuNmCAyNC0yMzQtMjUKK2Fsd2F5cyDrjZkgMjQtMjM0LTI1LTEzCithbHdheXMg642aIDI0LTIzNC0yNS0zNTYKK2Fsd2F5cyDrjZsgMjQtMjM0LTM1CithbHdheXMg642cIDI0LTIzNC0yCithbHdheXMg642dIDI0LTIzNC0yLTEKK2Fsd2F5cyDrjZ4gMjQtMjM0LTItMjYKK2Fsd2F5cyDrjZ8gMjQtMjM0LTItMTIKK2Fsd2F5cyDrjaAgMjQtMjM0LTItMworYWx3YXlzIOuNoSAyNC0yMzQtMi0yMzYKK2Fsd2F5cyDrjaIgMjQtMjM0LTItMjU2CithbHdheXMg642jIDI0LTIzNC0yLTM1NgorYWx3YXlzIOuNpCAyNC0yMzQtMjYKK2Fsd2F5cyDrjaUgMjQtMjM0LTEyCithbHdheXMg642mIDI0LTIzNC0xMi0zCithbHdheXMg642nIDI0LTIzNC0zCithbHdheXMg642oIDI0LTIzNC0zLTMKK2Fsd2F5cyDrjakgMjQtMjM0LTIzNTYKK2Fsd2F5cyDrjaogMjQtMjM0LTEzCithbHdheXMg642rIDI0LTIzNC0yMworYWx3YXlzIOuNrCAyNC0yMzQtMjM1CithbHdheXMg642tIDI0LTIzNC0yMzYKK2Fsd2F5cyDrja4gMjQtMjM0LTI1NgorYWx3YXlzIOuNryAyNC0yMzQtMzU2CithbHdheXMg642wIDI0LTEzNDUKK2Fsd2F5cyDrjbEgMjQtMTM0NS0xCithbHdheXMg642yIDI0LTEzNDUtMS0xCithbHdheXMg642zIDI0LTEzNDUtMS0zCithbHdheXMg6420IDI0LTEzNDUtMjUKK2Fsd2F5cyDrjbUgMjQtMTM0NS0yNS0xMworYWx3YXlzIOuNtiAyNC0xMzQ1LTI1LTM1NgorYWx3YXlzIOuNtyAyNC0xMzQ1LTM1CithbHdheXMg6424IDI0LTEzNDUtMgorYWx3YXlzIOuNuSAyNC0xMzQ1LTItMQorYWx3YXlzIOuNuiAyNC0xMzQ1LTItMjYKK2Fsd2F5cyDrjbsgMjQtMTM0NS0yLTEyCithbHdheXMg6428IDI0LTEzNDUtMi0zCithbHdheXMg6429IDI0LTEzNDUtMi0yMzYKK2Fsd2F5cyDrjb4gMjQtMTM0NS0yLTI1NgorYWx3YXlzIOuNvyAyNC0xMzQ1LTItMzU2CithbHdheXMg646AIDI0LTEzNDUtMjYKK2Fsd2F5cyDrjoEgMjQtMTM0NS0xMgorYWx3YXlzIOuOgiAyNC0xMzQ1LTEyLTMKK2Fsd2F5cyDrjoMgMjQtMTM0NS0zCithbHdheXMg646EIDI0LTEzNDUtMy0zCithbHdheXMg646FIDI0LTEzNDUtMjM1NgorYWx3YXlzIOuOhiAyNC0xMzQ1LTEzCithbHdheXMg646HIDI0LTEzNDUtMjMKK2Fsd2F5cyDrjoggMjQtMTM0NS0yMzUKK2Fsd2F5cyDrjokgMjQtMTM0NS0yMzYKK2Fsd2F5cyDrjoogMjQtMTM0NS0yNTYKK2Fsd2F5cyDrjosgMjQtMTM0NS0zNTYKK2Fsd2F5cyDrjowgMjQtMTU2CithbHdheXMg646NIDI0LTE1Ni0xCithbHdheXMg646OIDI0LTE1Ni0xLTEKK2Fsd2F5cyDrjo8gMjQtMTU2LTEtMworYWx3YXlzIOuOkCAyNC0xNTYtMjUKK2Fsd2F5cyDrjpEgMjQtMTU2LTI1LTEzCithbHdheXMg646SIDI0LTE1Ni0yNS0zNTYKK2Fsd2F5cyDrjpMgMjQtMTU2LTM1CithbHdheXMg646UIDI0LTE1Ni0yCithbHdheXMg646VIDI0LTE1Ni0yLTEKK2Fsd2F5cyDrjpYgMjQtMTU2LTItMjYKK2Fsd2F5cyDrjpcgMjQtMTU2LTItMTIKK2Fsd2F5cyDrjpggMjQtMTU2LTItMworYWx3YXlzIOuOmSAyNC0xNTYtMi0yMzYKK2Fsd2F5cyDrjpogMjQtMTU2LTItMjU2CithbHdheXMg646bIDI0LTE1Ni0yLTM1NgorYWx3YXlzIOuOnCAyNC0xNTYtMjYKK2Fsd2F5cyDrjp0gMjQtMTU2LTEyCithbHdheXMg646eIDI0LTE1Ni0xMi0zCithbHdheXMg646fIDI0LTE1Ni0zCithbHdheXMg646gIDI0LTE1Ni0zLTMKK2Fsd2F5cyDrjqEgMjQtMTU2LTIzNTYKK2Fsd2F5cyDrjqIgMjQtMTU2LTEzCithbHdheXMg646jIDI0LTE1Ni0yMworYWx3YXlzIOuOpCAyNC0xNTYtMjM1CithbHdheXMg646lIDI0LTE1Ni0yMzYKK2Fsd2F5cyDrjqYgMjQtMTU2LTI1NgorYWx3YXlzIOuOpyAyNC0xNTYtMzU2CithbHdheXMg646oIDI0LTM0CithbHdheXMg646pIDI0LTM0LTEKK2Fsd2F5cyDrjqogMjQtMzQtMS0xCithbHdheXMg646rIDI0LTM0LTEtMworYWx3YXlzIOuOrCAyNC0zNC0yNQorYWx3YXlzIOuOrSAyNC0zNC0yNS0xMworYWx3YXlzIOuOriAyNC0zNC0yNS0zNTYKK2Fsd2F5cyDrjq8gMjQtMzQtMzUKK2Fsd2F5cyDrjrAgMjQtMzQtMgorYWx3YXlzIOuOsSAyNC0zNC0yLTEKK2Fsd2F5cyDrjrIgMjQtMzQtMi0yNgorYWx3YXlzIOuOsyAyNC0zNC0yLTEyCithbHdheXMg6460IDI0LTM0LTItMworYWx3YXlzIOuOtSAyNC0zNC0yLTIzNgorYWx3YXlzIOuOtiAyNC0zNC0yLTI1NgorYWx3YXlzIOuOtyAyNC0zNC0yLTM1NgorYWx3YXlzIOuOuCAyNC0zNC0yNgorYWx3YXlzIOuOuSAyNC0zNC0xMgorYWx3YXlzIOuOuiAyNC0zNC0xMi0zCithbHdheXMg6467IDI0LTM0LTMKK2Fsd2F5cyDrjrwgMjQtMzQtMy0zCithbHdheXMg6469IDI0LTM0LTIzNTYKK2Fsd2F5cyDrjr4gMjQtMzQtMTMKK2Fsd2F5cyDrjr8gMjQtMzQtMjMKK2Fsd2F5cyDrj4AgMjQtMzQtMjM1CithbHdheXMg64+BIDI0LTM0LTIzNgorYWx3YXlzIOuPgiAyNC0zNC0yNTYKK2Fsd2F5cyDrj4MgMjQtMzQtMzU2CithbHdheXMg64+EIDI0LTEzNgorYWx3YXlzIOuPhSAyNC0xMzYtMQorYWx3YXlzIOuPhiAyNC0xMzYtMS0xCithbHdheXMg64+HIDI0LTEzNi0xLTMKK2Fsd2F5cyDrj4ggMjQtMTM2LTI1CithbHdheXMg64+JIDI0LTEzNi0yNS0xMworYWx3YXlzIOuPiiAyNC0xMzYtMjUtMzU2CithbHdheXMg64+LIDI0LTEzNi0zNQorYWx3YXlzIOuPjCAyNC0xMzYtMgorYWx3YXlzIOuPjSAyNC0xMzYtMi0xCithbHdheXMg64+OIDI0LTEzNi0yLTI2CithbHdheXMg64+PIDI0LTEzNi0yLTEyCithbHdheXMg64+QIDI0LTEzNi0yLTMKK2Fsd2F5cyDrj5EgMjQtMTM2LTItMjM2CithbHdheXMg64+SIDI0LTEzNi0yLTI1NgorYWx3YXlzIOuPkyAyNC0xMzYtMi0zNTYKK2Fsd2F5cyDrj5QgMjQtMTM2LTI2CithbHdheXMg64+VIDI0LTEzNi0xMgorYWx3YXlzIOuPliAyNC0xMzYtMTItMworYWx3YXlzIOuPlyAyNC0xMzYtMworYWx3YXlzIOuPmCAyNC0xMzYtMy0zCithbHdheXMg64+ZIDI0LTEzNi0yMzU2CithbHdheXMg64+aIDI0LTEzNi0xMworYWx3YXlzIOuPmyAyNC0xMzYtMjMKK2Fsd2F5cyDrj5wgMjQtMTM2LTIzNQorYWx3YXlzIOuPnSAyNC0xMzYtMjM2CithbHdheXMg64+eIDI0LTEzNi0yNTYKK2Fsd2F5cyDrj58gMjQtMTM2LTM1NgorYWx3YXlzIOuPoCAyNC0xMjM2CithbHdheXMg64+hIDI0LTEyMzYtMQorYWx3YXlzIOuPoiAyNC0xMjM2LTEtMQorYWx3YXlzIOuPoyAyNC0xMjM2LTEtMworYWx3YXlzIOuPpCAyNC0xMjM2LTI1CithbHdheXMg64+lIDI0LTEyMzYtMjUtMTMKK2Fsd2F5cyDrj6YgMjQtMTIzNi0yNS0zNTYKK2Fsd2F5cyDrj6cgMjQtMTIzNi0zNQorYWx3YXlzIOuPqCAyNC0xMjM2LTIKK2Fsd2F5cyDrj6kgMjQtMTIzNi0yLTEKK2Fsd2F5cyDrj6ogMjQtMTIzNi0yLTI2CithbHdheXMg64+rIDI0LTEyMzYtMi0xMgorYWx3YXlzIOuPrCAyNC0xMjM2LTItMworYWx3YXlzIOuPrSAyNC0xMjM2LTItMjM2CithbHdheXMg64+uIDI0LTEyMzYtMi0yNTYKK2Fsd2F5cyDrj68gMjQtMTIzNi0yLTM1NgorYWx3YXlzIOuPsCAyNC0xMjM2LTI2CithbHdheXMg64+xIDI0LTEyMzYtMTIKK2Fsd2F5cyDrj7IgMjQtMTIzNi0xMi0zCithbHdheXMg64+zIDI0LTEyMzYtMworYWx3YXlzIOuPtCAyNC0xMjM2LTMtMworYWx3YXlzIOuPtSAyNC0xMjM2LTIzNTYKK2Fsd2F5cyDrj7YgMjQtMTIzNi0xMworYWx3YXlzIOuPtyAyNC0xMjM2LTIzCithbHdheXMg64+4IDI0LTEyMzYtMjM1CithbHdheXMg64+5IDI0LTEyMzYtMjM2CithbHdheXMg64+6IDI0LTEyMzYtMjU2CithbHdheXMg64+7IDI0LTEyMzYtMzU2CithbHdheXMg64+8IDI0LTEyMzYtMTIzNQorYWx3YXlzIOuPvSAyNC0xMjM2LTEyMzUtMQorYWx3YXlzIOuPviAyNC0xMjM2LTEyMzUtMS0xCithbHdheXMg64+/IDI0LTEyMzYtMTIzNS0xLTMKK2Fsd2F5cyDrkIAgMjQtMTIzNi0xMjM1LTI1CithbHdheXMg65CBIDI0LTEyMzYtMTIzNS0yNS0xMworYWx3YXlzIOuQgiAyNC0xMjM2LTEyMzUtMjUtMzU2CithbHdheXMg65CDIDI0LTEyMzYtMTIzNS0zNQorYWx3YXlzIOuQhCAyNC0xMjM2LTEyMzUtMgorYWx3YXlzIOuQhSAyNC0xMjM2LTEyMzUtMi0xCithbHdheXMg65CGIDI0LTEyMzYtMTIzNS0yLTI2CithbHdheXMg65CHIDI0LTEyMzYtMTIzNS0yLTEyCithbHdheXMg65CIIDI0LTEyMzYtMTIzNS0yLTMKK2Fsd2F5cyDrkIkgMjQtMTIzNi0xMjM1LTItMjM2CithbHdheXMg65CKIDI0LTEyMzYtMTIzNS0yLTI1NgorYWx3YXlzIOuQiyAyNC0xMjM2LTEyMzUtMi0zNTYKK2Fsd2F5cyDrkIwgMjQtMTIzNi0xMjM1LTI2CithbHdheXMg65CNIDI0LTEyMzYtMTIzNS0xMgorYWx3YXlzIOuQjiAyNC0xMjM2LTEyMzUtMTItMworYWx3YXlzIOuQjyAyNC0xMjM2LTEyMzUtMworYWx3YXlzIOuQkCAyNC0xMjM2LTEyMzUtMy0zCithbHdheXMg65CRIDI0LTEyMzYtMTIzNS0yMzU2CithbHdheXMg65CSIDI0LTEyMzYtMTIzNS0xMworYWx3YXlzIOuQkyAyNC0xMjM2LTEyMzUtMjMKK2Fsd2F5cyDrkJQgMjQtMTIzNi0xMjM1LTIzNQorYWx3YXlzIOuQlSAyNC0xMjM2LTEyMzUtMjM2CithbHdheXMg65CWIDI0LTEyMzYtMTIzNS0yNTYKK2Fsd2F5cyDrkJcgMjQtMTIzNi0xMjM1LTM1NgorYWx3YXlzIOuQmCAyNC0xMzQ1NgorYWx3YXlzIOuQmSAyNC0xMzQ1Ni0xCithbHdheXMg65CaIDI0LTEzNDU2LTEtMQorYWx3YXlzIOuQmyAyNC0xMzQ1Ni0xLTMKK2Fsd2F5cyDrkJwgMjQtMTM0NTYtMjUKK2Fsd2F5cyDrkJ0gMjQtMTM0NTYtMjUtMTMKK2Fsd2F5cyDrkJ4gMjQtMTM0NTYtMjUtMzU2CithbHdheXMg65CfIDI0LTEzNDU2LTM1CithbHdheXMg65CgIDI0LTEzNDU2LTIKK2Fsd2F5cyDrkKEgMjQtMTM0NTYtMi0xCithbHdheXMg65CiIDI0LTEzNDU2LTItMjYKK2Fsd2F5cyDrkKMgMjQtMTM0NTYtMi0xMgorYWx3YXlzIOuQpCAyNC0xMzQ1Ni0yLTMKK2Fsd2F5cyDrkKUgMjQtMTM0NTYtMi0yMzYKK2Fsd2F5cyDrkKYgMjQtMTM0NTYtMi0yNTYKK2Fsd2F5cyDrkKcgMjQtMTM0NTYtMi0zNTYKK2Fsd2F5cyDrkKggMjQtMTM0NTYtMjYKK2Fsd2F5cyDrkKkgMjQtMTM0NTYtMTIKK2Fsd2F5cyDrkKogMjQtMTM0NTYtMTItMworYWx3YXlzIOuQqyAyNC0xMzQ1Ni0zCithbHdheXMg65CsIDI0LTEzNDU2LTMtMworYWx3YXlzIOuQrSAyNC0xMzQ1Ni0yMzU2CithbHdheXMg65CuIDI0LTEzNDU2LTEzCithbHdheXMg65CvIDI0LTEzNDU2LTIzCithbHdheXMg65CwIDI0LTEzNDU2LTIzNQorYWx3YXlzIOuQsSAyNC0xMzQ1Ni0yMzYKK2Fsd2F5cyDrkLIgMjQtMTM0NTYtMjU2CithbHdheXMg65CzIDI0LTEzNDU2LTM1NgorYWx3YXlzIOuQtCAyNC0zNDYKK2Fsd2F5cyDrkLUgMjQtMzQ2LTEKK2Fsd2F5cyDrkLYgMjQtMzQ2LTEtMQorYWx3YXlzIOuQtyAyNC0zNDYtMS0zCithbHdheXMg65C4IDI0LTM0Ni0yNQorYWx3YXlzIOuQuSAyNC0zNDYtMjUtMTMKK2Fsd2F5cyDrkLogMjQtMzQ2LTI1LTM1NgorYWx3YXlzIOuQuyAyNC0zNDYtMzUKK2Fsd2F5cyDrkLwgMjQtMzQ2LTIKK2Fsd2F5cyDrkL0gMjQtMzQ2LTItMQorYWx3YXlzIOuQviAyNC0zNDYtMi0yNgorYWx3YXlzIOuQvyAyNC0zNDYtMi0xMgorYWx3YXlzIOuRgCAyNC0zNDYtMi0zCithbHdheXMg65GBIDI0LTM0Ni0yLTIzNgorYWx3YXlzIOuRgiAyNC0zNDYtMi0yNTYKK2Fsd2F5cyDrkYMgMjQtMzQ2LTItMzU2CithbHdheXMg65GEIDI0LTM0Ni0yNgorYWx3YXlzIOuRhSAyNC0zNDYtMTIKK2Fsd2F5cyDrkYYgMjQtMzQ2LTEyLTMKK2Fsd2F5cyDrkYcgMjQtMzQ2LTMKK2Fsd2F5cyDrkYggMjQtMzQ2LTMtMworYWx3YXlzIOuRiSAyNC0zNDYtMjM1NgorYWx3YXlzIOuRiiAyNC0zNDYtMTMKK2Fsd2F5cyDrkYsgMjQtMzQ2LTIzCithbHdheXMg65GMIDI0LTM0Ni0yMzUKK2Fsd2F5cyDrkY0gMjQtMzQ2LTIzNgorYWx3YXlzIOuRjiAyNC0zNDYtMjU2CithbHdheXMg65GPIDI0LTM0Ni0zNTYKK2Fsd2F5cyDrkZAgMjQtMTM0CithbHdheXMg65GRIDI0LTEzNC0xCithbHdheXMg65GSIDI0LTEzNC0xLTEKK2Fsd2F5cyDrkZMgMjQtMTM0LTEtMworYWx3YXlzIOuRlCAyNC0xMzQtMjUKK2Fsd2F5cyDrkZUgMjQtMTM0LTI1LTEzCithbHdheXMg65GWIDI0LTEzNC0yNS0zNTYKK2Fsd2F5cyDrkZcgMjQtMTM0LTM1CithbHdheXMg65GYIDI0LTEzNC0yCithbHdheXMg65GZIDI0LTEzNC0yLTEKK2Fsd2F5cyDrkZogMjQtMTM0LTItMjYKK2Fsd2F5cyDrkZsgMjQtMTM0LTItMTIKK2Fsd2F5cyDrkZwgMjQtMTM0LTItMworYWx3YXlzIOuRnSAyNC0xMzQtMi0yMzYKK2Fsd2F5cyDrkZ4gMjQtMTM0LTItMjU2CithbHdheXMg65GfIDI0LTEzNC0yLTM1NgorYWx3YXlzIOuRoCAyNC0xMzQtMjYKK2Fsd2F5cyDrkaEgMjQtMTM0LTEyCithbHdheXMg65GiIDI0LTEzNC0xMi0zCithbHdheXMg65GjIDI0LTEzNC0zCithbHdheXMg65GkIDI0LTEzNC0zLTMKK2Fsd2F5cyDrkaUgMjQtMTM0LTIzNTYKK2Fsd2F5cyDrkaYgMjQtMTM0LTEzCithbHdheXMg65GnIDI0LTEzNC0yMworYWx3YXlzIOuRqCAyNC0xMzQtMjM1CithbHdheXMg65GpIDI0LTEzNC0yMzYKK2Fsd2F5cyDrkaogMjQtMTM0LTI1NgorYWx3YXlzIOuRqyAyNC0xMzQtMzU2CithbHdheXMg65GsIDI0LTEyMzQKK2Fsd2F5cyDrka0gMjQtMTIzNC0xCithbHdheXMg65GuIDI0LTEyMzQtMS0xCithbHdheXMg65GvIDI0LTEyMzQtMS0zCithbHdheXMg65GwIDI0LTEyMzQtMjUKK2Fsd2F5cyDrkbEgMjQtMTIzNC0yNS0xMworYWx3YXlzIOuRsiAyNC0xMjM0LTI1LTM1NgorYWx3YXlzIOuRsyAyNC0xMjM0LTM1CithbHdheXMg65G0IDI0LTEyMzQtMgorYWx3YXlzIOuRtSAyNC0xMjM0LTItMQorYWx3YXlzIOuRtiAyNC0xMjM0LTItMjYKK2Fsd2F5cyDrkbcgMjQtMTIzNC0yLTEyCithbHdheXMg65G4IDI0LTEyMzQtMi0zCithbHdheXMg65G5IDI0LTEyMzQtMi0yMzYKK2Fsd2F5cyDrkbogMjQtMTIzNC0yLTI1NgorYWx3YXlzIOuRuyAyNC0xMjM0LTItMzU2CithbHdheXMg65G8IDI0LTEyMzQtMjYKK2Fsd2F5cyDrkb0gMjQtMTIzNC0xMgorYWx3YXlzIOuRviAyNC0xMjM0LTEyLTMKK2Fsd2F5cyDrkb8gMjQtMTIzNC0zCithbHdheXMg65KAIDI0LTEyMzQtMy0zCithbHdheXMg65KBIDI0LTEyMzQtMjM1NgorYWx3YXlzIOuSgiAyNC0xMjM0LTEzCithbHdheXMg65KDIDI0LTEyMzQtMjMKK2Fsd2F5cyDrkoQgMjQtMTIzNC0yMzUKK2Fsd2F5cyDrkoUgMjQtMTIzNC0yMzYKK2Fsd2F5cyDrkoYgMjQtMTIzNC0yNTYKK2Fsd2F5cyDrkocgMjQtMTIzNC0zNTYKK2Fsd2F5cyDrkoggMjQtMTIzNC0xMjM1CithbHdheXMg65KJIDI0LTEyMzQtMTIzNS0xCithbHdheXMg65KKIDI0LTEyMzQtMTIzNS0xLTEKK2Fsd2F5cyDrkosgMjQtMTIzNC0xMjM1LTEtMworYWx3YXlzIOuSjCAyNC0xMjM0LTEyMzUtMjUKK2Fsd2F5cyDrko0gMjQtMTIzNC0xMjM1LTI1LTEzCithbHdheXMg65KOIDI0LTEyMzQtMTIzNS0yNS0zNTYKK2Fsd2F5cyDrko8gMjQtMTIzNC0xMjM1LTM1CithbHdheXMg65KQIDI0LTEyMzQtMTIzNS0yCithbHdheXMg65KRIDI0LTEyMzQtMTIzNS0yLTEKK2Fsd2F5cyDrkpIgMjQtMTIzNC0xMjM1LTItMjYKK2Fsd2F5cyDrkpMgMjQtMTIzNC0xMjM1LTItMTIKK2Fsd2F5cyDrkpQgMjQtMTIzNC0xMjM1LTItMworYWx3YXlzIOuSlSAyNC0xMjM0LTEyMzUtMi0yMzYKK2Fsd2F5cyDrkpYgMjQtMTIzNC0xMjM1LTItMjU2CithbHdheXMg65KXIDI0LTEyMzQtMTIzNS0yLTM1NgorYWx3YXlzIOuSmCAyNC0xMjM0LTEyMzUtMjYKK2Fsd2F5cyDrkpkgMjQtMTIzNC0xMjM1LTEyCithbHdheXMg65KaIDI0LTEyMzQtMTIzNS0xMi0zCithbHdheXMg65KbIDI0LTEyMzQtMTIzNS0zCithbHdheXMg65KcIDI0LTEyMzQtMTIzNS0zLTMKK2Fsd2F5cyDrkp0gMjQtMTIzNC0xMjM1LTIzNTYKK2Fsd2F5cyDrkp4gMjQtMTIzNC0xMjM1LTEzCithbHdheXMg65KfIDI0LTEyMzQtMTIzNS0yMworYWx3YXlzIOuSoCAyNC0xMjM0LTEyMzUtMjM1CithbHdheXMg65KhIDI0LTEyMzQtMTIzNS0yMzYKK2Fsd2F5cyDrkqIgMjQtMTIzNC0xMjM1LTI1NgorYWx3YXlzIOuSoyAyNC0xMjM0LTEyMzUtMzU2CithbHdheXMg65KkIDI0LTEzNC0xMjM1CithbHdheXMg65KlIDI0LTEzNC0xMjM1LTEKK2Fsd2F5cyDrkqYgMjQtMTM0LTEyMzUtMS0xCithbHdheXMg65KnIDI0LTEzNC0xMjM1LTEtMworYWx3YXlzIOuSqCAyNC0xMzQtMTIzNS0yNQorYWx3YXlzIOuSqSAyNC0xMzQtMTIzNS0yNS0xMworYWx3YXlzIOuSqiAyNC0xMzQtMTIzNS0yNS0zNTYKK2Fsd2F5cyDrkqsgMjQtMTM0LTEyMzUtMzUKK2Fsd2F5cyDrkqwgMjQtMTM0LTEyMzUtMgorYWx3YXlzIOuSrSAyNC0xMzQtMTIzNS0yLTEKK2Fsd2F5cyDrkq4gMjQtMTM0LTEyMzUtMi0yNgorYWx3YXlzIOuSryAyNC0xMzQtMTIzNS0yLTEyCithbHdheXMg65KwIDI0LTEzNC0xMjM1LTItMworYWx3YXlzIOuSsSAyNC0xMzQtMTIzNS0yLTIzNgorYWx3YXlzIOuSsiAyNC0xMzQtMTIzNS0yLTI1NgorYWx3YXlzIOuSsyAyNC0xMzQtMTIzNS0yLTM1NgorYWx3YXlzIOuStCAyNC0xMzQtMTIzNS0yNgorYWx3YXlzIOuStSAyNC0xMzQtMTIzNS0xMgorYWx3YXlzIOuStiAyNC0xMzQtMTIzNS0xMi0zCithbHdheXMg65K3IDI0LTEzNC0xMjM1LTMKK2Fsd2F5cyDrkrggMjQtMTM0LTEyMzUtMy0zCithbHdheXMg65K5IDI0LTEzNC0xMjM1LTIzNTYKK2Fsd2F5cyDrkrogMjQtMTM0LTEyMzUtMTMKK2Fsd2F5cyDrkrsgMjQtMTM0LTEyMzUtMjMKK2Fsd2F5cyDrkrwgMjQtMTM0LTEyMzUtMjM1CithbHdheXMg65K9IDI0LTEzNC0xMjM1LTIzNgorYWx3YXlzIOuSviAyNC0xMzQtMTIzNS0yNTYKK2Fsd2F5cyDrkr8gMjQtMTM0LTEyMzUtMzU2CithbHdheXMg65OAIDI0LTE0NgorYWx3YXlzIOuTgSAyNC0xNDYtMQorYWx3YXlzIOuTgiAyNC0xNDYtMS0xCithbHdheXMg65ODIDI0LTE0Ni0xLTMKK2Fsd2F5cyDrk4QgMjQtMTQ2LTI1CithbHdheXMg65OFIDI0LTE0Ni0yNS0xMworYWx3YXlzIOuThiAyNC0xNDYtMjUtMzU2CithbHdheXMg65OHIDI0LTE0Ni0zNQorYWx3YXlzIOuTiCAyNC0xNDYtMgorYWx3YXlzIOuTiSAyNC0xNDYtMi0xCithbHdheXMg65OKIDI0LTE0Ni0yLTI2CithbHdheXMg65OLIDI0LTE0Ni0yLTEyCithbHdheXMg65OMIDI0LTE0Ni0yLTMKK2Fsd2F5cyDrk40gMjQtMTQ2LTItMjM2CithbHdheXMg65OOIDI0LTE0Ni0yLTI1NgorYWx3YXlzIOuTjyAyNC0xNDYtMi0zNTYKK2Fsd2F5cyDrk5AgMjQtMTQ2LTI2CithbHdheXMg65ORIDI0LTE0Ni0xMgorYWx3YXlzIOuTkiAyNC0xNDYtMTItMworYWx3YXlzIOuTkyAyNC0xNDYtMworYWx3YXlzIOuTlCAyNC0xNDYtMy0zCithbHdheXMg65OVIDI0LTE0Ni0yMzU2CithbHdheXMg65OWIDI0LTE0Ni0xMworYWx3YXlzIOuTlyAyNC0xNDYtMjMKK2Fsd2F5cyDrk5ggMjQtMTQ2LTIzNQorYWx3YXlzIOuTmSAyNC0xNDYtMjM2CithbHdheXMg65OaIDI0LTE0Ni0yNTYKK2Fsd2F5cyDrk5sgMjQtMTQ2LTM1NgorYWx3YXlzIOuTnCAyNC0yNDYKK2Fsd2F5cyDrk50gMjQtMjQ2LTEKK2Fsd2F5cyDrk54gMjQtMjQ2LTEtMQorYWx3YXlzIOuTnyAyNC0yNDYtMS0zCithbHdheXMg65OgIDI0LTI0Ni0yNQorYWx3YXlzIOuToSAyNC0yNDYtMjUtMTMKK2Fsd2F5cyDrk6IgMjQtMjQ2LTI1LTM1NgorYWx3YXlzIOuToyAyNC0yNDYtMzUKK2Fsd2F5cyDrk6QgMjQtMjQ2LTIKK2Fsd2F5cyDrk6UgMjQtMjQ2LTItMQorYWx3YXlzIOuTpiAyNC0yNDYtMi0yNgorYWx3YXlzIOuTpyAyNC0yNDYtMi0xMgorYWx3YXlzIOuTqCAyNC0yNDYtMi0zCithbHdheXMg65OpIDI0LTI0Ni0yLTIzNgorYWx3YXlzIOuTqiAyNC0yNDYtMi0yNTYKK2Fsd2F5cyDrk6sgMjQtMjQ2LTItMzU2CithbHdheXMg65OsIDI0LTI0Ni0yNgorYWx3YXlzIOuTrSAyNC0yNDYtMTIKK2Fsd2F5cyDrk64gMjQtMjQ2LTEyLTMKK2Fsd2F5cyDrk68gMjQtMjQ2LTMKK2Fsd2F5cyDrk7AgMjQtMjQ2LTMtMworYWx3YXlzIOuTsSAyNC0yNDYtMjM1NgorYWx3YXlzIOuTsiAyNC0yNDYtMTMKK2Fsd2F5cyDrk7MgMjQtMjQ2LTIzCithbHdheXMg65O0IDI0LTI0Ni0yMzUKK2Fsd2F5cyDrk7UgMjQtMjQ2LTIzNgorYWx3YXlzIOuTtiAyNC0yNDYtMjU2CithbHdheXMg65O3IDI0LTI0Ni0zNTYKK2Fsd2F5cyDrk7ggMjQtMjQ1NgorYWx3YXlzIOuTuSAyNC0yNDU2LTEKK2Fsd2F5cyDrk7ogMjQtMjQ1Ni0xLTEKK2Fsd2F5cyDrk7sgMjQtMjQ1Ni0xLTMKK2Fsd2F5cyDrk7wgMjQtMjQ1Ni0yNQorYWx3YXlzIOuTvSAyNC0yNDU2LTI1LTEzCithbHdheXMg65O+IDI0LTI0NTYtMjUtMzU2CithbHdheXMg65O/IDI0LTI0NTYtMzUKK2Fsd2F5cyDrlIAgMjQtMjQ1Ni0yCithbHdheXMg65SBIDI0LTI0NTYtMi0xCithbHdheXMg65SCIDI0LTI0NTYtMi0yNgorYWx3YXlzIOuUgyAyNC0yNDU2LTItMTIKK2Fsd2F5cyDrlIQgMjQtMjQ1Ni0yLTMKK2Fsd2F5cyDrlIUgMjQtMjQ1Ni0yLTIzNgorYWx3YXlzIOuUhiAyNC0yNDU2LTItMjU2CithbHdheXMg65SHIDI0LTI0NTYtMi0zNTYKK2Fsd2F5cyDrlIggMjQtMjQ1Ni0yNgorYWx3YXlzIOuUiSAyNC0yNDU2LTEyCithbHdheXMg65SKIDI0LTI0NTYtMTItMworYWx3YXlzIOuUiyAyNC0yNDU2LTMKK2Fsd2F5cyDrlIwgMjQtMjQ1Ni0zLTMKK2Fsd2F5cyDrlI0gMjQtMjQ1Ni0yMzU2CithbHdheXMg65SOIDI0LTI0NTYtMTMKK2Fsd2F5cyDrlI8gMjQtMjQ1Ni0yMworYWx3YXlzIOuUkCAyNC0yNDU2LTIzNQorYWx3YXlzIOuUkSAyNC0yNDU2LTIzNgorYWx3YXlzIOuUkiAyNC0yNDU2LTI1NgorYWx3YXlzIOuUkyAyNC0yNDU2LTM1NgorYWx3YXlzIOuUlCAyNC0xMzUKK2Fsd2F5cyDrlJUgMjQtMTM1LTEKK2Fsd2F5cyDrlJYgMjQtMTM1LTEtMQorYWx3YXlzIOuUlyAyNC0xMzUtMS0zCithbHdheXMg65SYIDI0LTEzNS0yNQorYWx3YXlzIOuUmSAyNC0xMzUtMjUtMTMKK2Fsd2F5cyDrlJogMjQtMTM1LTI1LTM1NgorYWx3YXlzIOuUmyAyNC0xMzUtMzUKK2Fsd2F5cyDrlJwgMjQtMTM1LTIKK2Fsd2F5cyDrlJ0gMjQtMTM1LTItMQorYWx3YXlzIOuUniAyNC0xMzUtMi0yNgorYWx3YXlzIOuUnyAyNC0xMzUtMi0xMgorYWx3YXlzIOuUoCAyNC0xMzUtMi0zCithbHdheXMg65ShIDI0LTEzNS0yLTIzNgorYWx3YXlzIOuUoiAyNC0xMzUtMi0yNTYKK2Fsd2F5cyDrlKMgMjQtMTM1LTItMzU2CithbHdheXMg65SkIDI0LTEzNS0yNgorYWx3YXlzIOuUpSAyNC0xMzUtMTIKK2Fsd2F5cyDrlKYgMjQtMTM1LTEyLTMKK2Fsd2F5cyDrlKcgMjQtMTM1LTMKK2Fsd2F5cyDrlKggMjQtMTM1LTMtMworYWx3YXlzIOuUqSAyNC0xMzUtMjM1NgorYWx3YXlzIOuUqiAyNC0xMzUtMTMKK2Fsd2F5cyDrlKsgMjQtMTM1LTIzCithbHdheXMg65SsIDI0LTEzNS0yMzUKK2Fsd2F5cyDrlK0gMjQtMTM1LTIzNgorYWx3YXlzIOuUriAyNC0xMzUtMjU2CithbHdheXMg65SvIDI0LTEzNS0zNTYKK2Fsd2F5cyDrlLAgMjQtMjQtMTI2CithbHdheXMg65SxIDI0LTI0LTEyNi0xCithbHdheXMg65SyIDI0LTI0LTEyNi0xLTEKK2Fsd2F5cyDrlLMgMjQtMjQtMTI2LTEtMworYWx3YXlzIOuUtCAyNC0yNC0xMjYtMjUKK2Fsd2F5cyDrlLUgMjQtMjQtMTI2LTI1LTEzCithbHdheXMg65S2IDI0LTI0LTEyNi0yNS0zNTYKK2Fsd2F5cyDrlLcgMjQtMjQtMTI2LTM1CithbHdheXMg65S4IDI0LTI0LTEyNi0yCithbHdheXMg65S5IDI0LTI0LTEyNi0yLTEKK2Fsd2F5cyDrlLogMjQtMjQtMTI2LTItMjYKK2Fsd2F5cyDrlLsgMjQtMjQtMTI2LTItMTIKK2Fsd2F5cyDrlLwgMjQtMjQtMTI2LTItMworYWx3YXlzIOuUvSAyNC0yNC0xMjYtMi0yMzYKK2Fsd2F5cyDrlL4gMjQtMjQtMTI2LTItMjU2CithbHdheXMg65S/IDI0LTI0LTEyNi0yLTM1NgorYWx3YXlzIOuVgCAyNC0yNC0xMjYtMjYKK2Fsd2F5cyDrlYEgMjQtMjQtMTI2LTEyCithbHdheXMg65WCIDI0LTI0LTEyNi0xMi0zCithbHdheXMg65WDIDI0LTI0LTEyNi0zCithbHdheXMg65WEIDI0LTI0LTEyNi0zLTMKK2Fsd2F5cyDrlYUgMjQtMjQtMTI2LTIzNTYKK2Fsd2F5cyDrlYYgMjQtMjQtMTI2LTEzCithbHdheXMg65WHIDI0LTI0LTEyNi0yMworYWx3YXlzIOuViCAyNC0yNC0xMjYtMjM1CithbHdheXMg65WJIDI0LTI0LTEyNi0yMzYKK2Fsd2F5cyDrlYogMjQtMjQtMTI2LTI1NgorYWx3YXlzIOuViyAyNC0yNC0xMjYtMzU2CithbHdheXMg65WMIDI0LTI0LTEyMzUKK2Fsd2F5cyDrlY0gMjQtMjQtMTIzNS0xCithbHdheXMg65WOIDI0LTI0LTEyMzUtMS0xCithbHdheXMg65WPIDI0LTI0LTEyMzUtMS0zCithbHdheXMg65WQIDI0LTI0LTEyMzUtMjUKK2Fsd2F5cyDrlZEgMjQtMjQtMTIzNS0yNS0xMworYWx3YXlzIOuVkiAyNC0yNC0xMjM1LTI1LTM1NgorYWx3YXlzIOuVkyAyNC0yNC0xMjM1LTM1CithbHdheXMg65WUIDI0LTI0LTEyMzUtMgorYWx3YXlzIOuVlSAyNC0yNC0xMjM1LTItMQorYWx3YXlzIOuVliAyNC0yNC0xMjM1LTItMjYKK2Fsd2F5cyDrlZcgMjQtMjQtMTIzNS0yLTEyCithbHdheXMg65WYIDI0LTI0LTEyMzUtMi0zCithbHdheXMg65WZIDI0LTI0LTEyMzUtMi0yMzYKK2Fsd2F5cyDrlZogMjQtMjQtMTIzNS0yLTI1NgorYWx3YXlzIOuVmyAyNC0yNC0xMjM1LTItMzU2CithbHdheXMg65WcIDI0LTI0LTEyMzUtMjYKK2Fsd2F5cyDrlZ0gMjQtMjQtMTIzNS0xMgorYWx3YXlzIOuVniAyNC0yNC0xMjM1LTEyLTMKK2Fsd2F5cyDrlZ8gMjQtMjQtMTIzNS0zCithbHdheXMg65WgIDI0LTI0LTEyMzUtMy0zCithbHdheXMg65WhIDI0LTI0LTEyMzUtMjM1NgorYWx3YXlzIOuVoiAyNC0yNC0xMjM1LTEzCithbHdheXMg65WjIDI0LTI0LTEyMzUtMjMKK2Fsd2F5cyDrlaQgMjQtMjQtMTIzNS0yMzUKK2Fsd2F5cyDrlaUgMjQtMjQtMTIzNS0yMzYKK2Fsd2F5cyDrlaYgMjQtMjQtMTIzNS0yNTYKK2Fsd2F5cyDrlacgMjQtMjQtMTIzNS0zNTYKK2Fsd2F5cyDrlaggMjQtMjQtMzQ1CithbHdheXMg65WpIDI0LTI0LTM0NS0xCithbHdheXMg65WqIDI0LTI0LTM0NS0xLTEKK2Fsd2F5cyDrlasgMjQtMjQtMzQ1LTEtMworYWx3YXlzIOuVrCAyNC0yNC0zNDUtMjUKK2Fsd2F5cyDrla0gMjQtMjQtMzQ1LTI1LTEzCithbHdheXMg65WuIDI0LTI0LTM0NS0yNS0zNTYKK2Fsd2F5cyDrla8gMjQtMjQtMzQ1LTM1CithbHdheXMg65WwIDI0LTI0LTM0NS0yCithbHdheXMg65WxIDI0LTI0LTM0NS0yLTEKK2Fsd2F5cyDrlbIgMjQtMjQtMzQ1LTItMjYKK2Fsd2F5cyDrlbMgMjQtMjQtMzQ1LTItMTIKK2Fsd2F5cyDrlbQgMjQtMjQtMzQ1LTItMworYWx3YXlzIOuVtSAyNC0yNC0zNDUtMi0yMzYKK2Fsd2F5cyDrlbYgMjQtMjQtMzQ1LTItMjU2CithbHdheXMg65W3IDI0LTI0LTM0NS0yLTM1NgorYWx3YXlzIOuVuCAyNC0yNC0zNDUtMjYKK2Fsd2F5cyDrlbkgMjQtMjQtMzQ1LTEyCithbHdheXMg65W6IDI0LTI0LTM0NS0xMi0zCithbHdheXMg65W7IDI0LTI0LTM0NS0zCithbHdheXMg65W8IDI0LTI0LTM0NS0zLTMKK2Fsd2F5cyDrlb0gMjQtMjQtMzQ1LTIzNTYKK2Fsd2F5cyDrlb4gMjQtMjQtMzQ1LTEzCithbHdheXMg65W/IDI0LTI0LTM0NS0yMworYWx3YXlzIOuWgCAyNC0yNC0zNDUtMjM1CithbHdheXMg65aBIDI0LTI0LTM0NS0yMzYKK2Fsd2F5cyDrloIgMjQtMjQtMzQ1LTI1NgorYWx3YXlzIOuWgyAyNC0yNC0zNDUtMzU2CithbHdheXMg65aEIDI0LTI0LTM0NS0xMjM1CithbHdheXMg65aFIDI0LTI0LTM0NS0xMjM1LTEKK2Fsd2F5cyDrloYgMjQtMjQtMzQ1LTEyMzUtMS0xCithbHdheXMg65aHIDI0LTI0LTM0NS0xMjM1LTEtMworYWx3YXlzIOuWiCAyNC0yNC0zNDUtMTIzNS0yNQorYWx3YXlzIOuWiSAyNC0yNC0zNDUtMTIzNS0yNS0xMworYWx3YXlzIOuWiiAyNC0yNC0zNDUtMTIzNS0yNS0zNTYKK2Fsd2F5cyDrlosgMjQtMjQtMzQ1LTEyMzUtMzUKK2Fsd2F5cyDrlowgMjQtMjQtMzQ1LTEyMzUtMgorYWx3YXlzIOuWjSAyNC0yNC0zNDUtMTIzNS0yLTEKK2Fsd2F5cyDrlo4gMjQtMjQtMzQ1LTEyMzUtMi0yNgorYWx3YXlzIOuWjyAyNC0yNC0zNDUtMTIzNS0yLTEyCithbHdheXMg65aQIDI0LTI0LTM0NS0xMjM1LTItMworYWx3YXlzIOuWkSAyNC0yNC0zNDUtMTIzNS0yLTIzNgorYWx3YXlzIOuWkiAyNC0yNC0zNDUtMTIzNS0yLTI1NgorYWx3YXlzIOuWkyAyNC0yNC0zNDUtMTIzNS0yLTM1NgorYWx3YXlzIOuWlCAyNC0yNC0zNDUtMTIzNS0yNgorYWx3YXlzIOuWlSAyNC0yNC0zNDUtMTIzNS0xMgorYWx3YXlzIOuWliAyNC0yNC0zNDUtMTIzNS0xMi0zCithbHdheXMg65aXIDI0LTI0LTM0NS0xMjM1LTMKK2Fsd2F5cyDrlpggMjQtMjQtMzQ1LTEyMzUtMy0zCithbHdheXMg65aZIDI0LTI0LTM0NS0xMjM1LTIzNTYKK2Fsd2F5cyDrlpogMjQtMjQtMzQ1LTEyMzUtMTMKK2Fsd2F5cyDrlpsgMjQtMjQtMzQ1LTEyMzUtMjMKK2Fsd2F5cyDrlpwgMjQtMjQtMzQ1LTEyMzUtMjM1CithbHdheXMg65adIDI0LTI0LTM0NS0xMjM1LTIzNgorYWx3YXlzIOuWniAyNC0yNC0zNDUtMTIzNS0yNTYKK2Fsd2F5cyDrlp8gMjQtMjQtMzQ1LTEyMzUtMzU2CithbHdheXMg65agIDI0LTI0LTIzNAorYWx3YXlzIOuWoSAyNC0yNC0yMzQtMQorYWx3YXlzIOuWoiAyNC0yNC0yMzQtMS0xCithbHdheXMg65ajIDI0LTI0LTIzNC0xLTMKK2Fsd2F5cyDrlqQgMjQtMjQtMjM0LTI1CithbHdheXMg65alIDI0LTI0LTIzNC0yNS0xMworYWx3YXlzIOuWpiAyNC0yNC0yMzQtMjUtMzU2CithbHdheXMg65anIDI0LTI0LTIzNC0zNQorYWx3YXlzIOuWqCAyNC0yNC0yMzQtMgorYWx3YXlzIOuWqSAyNC0yNC0yMzQtMi0xCithbHdheXMg65aqIDI0LTI0LTIzNC0yLTI2CithbHdheXMg65arIDI0LTI0LTIzNC0yLTEyCithbHdheXMg65asIDI0LTI0LTIzNC0yLTMKK2Fsd2F5cyDrlq0gMjQtMjQtMjM0LTItMjM2CithbHdheXMg65auIDI0LTI0LTIzNC0yLTI1NgorYWx3YXlzIOuWryAyNC0yNC0yMzQtMi0zNTYKK2Fsd2F5cyDrlrAgMjQtMjQtMjM0LTI2CithbHdheXMg65axIDI0LTI0LTIzNC0xMgorYWx3YXlzIOuWsiAyNC0yNC0yMzQtMTItMworYWx3YXlzIOuWsyAyNC0yNC0yMzQtMworYWx3YXlzIOuWtCAyNC0yNC0yMzQtMy0zCithbHdheXMg65a1IDI0LTI0LTIzNC0yMzU2CithbHdheXMg65a2IDI0LTI0LTIzNC0xMworYWx3YXlzIOuWtyAyNC0yNC0yMzQtMjMKK2Fsd2F5cyDrlrggMjQtMjQtMjM0LTIzNQorYWx3YXlzIOuWuSAyNC0yNC0yMzQtMjM2CithbHdheXMg65a6IDI0LTI0LTIzNC0yNTYKK2Fsd2F5cyDrlrsgMjQtMjQtMjM0LTM1NgorYWx3YXlzIOuWvCAyNC0yNC0xMzQ1CithbHdheXMg65a9IDI0LTI0LTEzNDUtMQorYWx3YXlzIOuWviAyNC0yNC0xMzQ1LTEtMQorYWx3YXlzIOuWvyAyNC0yNC0xMzQ1LTEtMworYWx3YXlzIOuXgCAyNC0yNC0xMzQ1LTI1CithbHdheXMg65eBIDI0LTI0LTEzNDUtMjUtMTMKK2Fsd2F5cyDrl4IgMjQtMjQtMTM0NS0yNS0zNTYKK2Fsd2F5cyDrl4MgMjQtMjQtMTM0NS0zNQorYWx3YXlzIOuXhCAyNC0yNC0xMzQ1LTIKK2Fsd2F5cyDrl4UgMjQtMjQtMTM0NS0yLTEKK2Fsd2F5cyDrl4YgMjQtMjQtMTM0NS0yLTI2CithbHdheXMg65eHIDI0LTI0LTEzNDUtMi0xMgorYWx3YXlzIOuXiCAyNC0yNC0xMzQ1LTItMworYWx3YXlzIOuXiSAyNC0yNC0xMzQ1LTItMjM2CithbHdheXMg65eKIDI0LTI0LTEzNDUtMi0yNTYKK2Fsd2F5cyDrl4sgMjQtMjQtMTM0NS0yLTM1NgorYWx3YXlzIOuXjCAyNC0yNC0xMzQ1LTI2CithbHdheXMg65eNIDI0LTI0LTEzNDUtMTIKK2Fsd2F5cyDrl44gMjQtMjQtMTM0NS0xMi0zCithbHdheXMg65ePIDI0LTI0LTEzNDUtMworYWx3YXlzIOuXkCAyNC0yNC0xMzQ1LTMtMworYWx3YXlzIOuXkSAyNC0yNC0xMzQ1LTIzNTYKK2Fsd2F5cyDrl5IgMjQtMjQtMTM0NS0xMworYWx3YXlzIOuXkyAyNC0yNC0xMzQ1LTIzCithbHdheXMg65eUIDI0LTI0LTEzNDUtMjM1CithbHdheXMg65eVIDI0LTI0LTEzNDUtMjM2CithbHdheXMg65eWIDI0LTI0LTEzNDUtMjU2CithbHdheXMg65eXIDI0LTI0LTEzNDUtMzU2CithbHdheXMg65eYIDI0LTI0LTE1NgorYWx3YXlzIOuXmSAyNC0yNC0xNTYtMQorYWx3YXlzIOuXmiAyNC0yNC0xNTYtMS0xCithbHdheXMg65ebIDI0LTI0LTE1Ni0xLTMKK2Fsd2F5cyDrl5wgMjQtMjQtMTU2LTI1CithbHdheXMg65edIDI0LTI0LTE1Ni0yNS0xMworYWx3YXlzIOuXniAyNC0yNC0xNTYtMjUtMzU2CithbHdheXMg65efIDI0LTI0LTE1Ni0zNQorYWx3YXlzIOuXoCAyNC0yNC0xNTYtMgorYWx3YXlzIOuXoSAyNC0yNC0xNTYtMi0xCithbHdheXMg65eiIDI0LTI0LTE1Ni0yLTI2CithbHdheXMg65ejIDI0LTI0LTE1Ni0yLTEyCithbHdheXMg65ekIDI0LTI0LTE1Ni0yLTMKK2Fsd2F5cyDrl6UgMjQtMjQtMTU2LTItMjM2CithbHdheXMg65emIDI0LTI0LTE1Ni0yLTI1NgorYWx3YXlzIOuXpyAyNC0yNC0xNTYtMi0zNTYKK2Fsd2F5cyDrl6ggMjQtMjQtMTU2LTI2CithbHdheXMg65epIDI0LTI0LTE1Ni0xMgorYWx3YXlzIOuXqiAyNC0yNC0xNTYtMTItMworYWx3YXlzIOuXqyAyNC0yNC0xNTYtMworYWx3YXlzIOuXrCAyNC0yNC0xNTYtMy0zCithbHdheXMg65etIDI0LTI0LTE1Ni0yMzU2CithbHdheXMg65euIDI0LTI0LTE1Ni0xMworYWx3YXlzIOuXryAyNC0yNC0xNTYtMjMKK2Fsd2F5cyDrl7AgMjQtMjQtMTU2LTIzNQorYWx3YXlzIOuXsSAyNC0yNC0xNTYtMjM2CithbHdheXMg65eyIDI0LTI0LTE1Ni0yNTYKK2Fsd2F5cyDrl7MgMjQtMjQtMTU2LTM1NgorYWx3YXlzIOuXtCAyNC0yNC0zNAorYWx3YXlzIOuXtSAyNC0yNC0zNC0xCithbHdheXMg65e2IDI0LTI0LTM0LTEtMQorYWx3YXlzIOuXtyAyNC0yNC0zNC0xLTMKK2Fsd2F5cyDrl7ggMjQtMjQtMzQtMjUKK2Fsd2F5cyDrl7kgMjQtMjQtMzQtMjUtMTMKK2Fsd2F5cyDrl7ogMjQtMjQtMzQtMjUtMzU2CithbHdheXMg65e7IDI0LTI0LTM0LTM1CithbHdheXMg65e8IDI0LTI0LTM0LTIKK2Fsd2F5cyDrl70gMjQtMjQtMzQtMi0xCithbHdheXMg65e+IDI0LTI0LTM0LTItMjYKK2Fsd2F5cyDrl78gMjQtMjQtMzQtMi0xMgorYWx3YXlzIOuYgCAyNC0yNC0zNC0yLTMKK2Fsd2F5cyDrmIEgMjQtMjQtMzQtMi0yMzYKK2Fsd2F5cyDrmIIgMjQtMjQtMzQtMi0yNTYKK2Fsd2F5cyDrmIMgMjQtMjQtMzQtMi0zNTYKK2Fsd2F5cyDrmIQgMjQtMjQtMzQtMjYKK2Fsd2F5cyDrmIUgMjQtMjQtMzQtMTIKK2Fsd2F5cyDrmIYgMjQtMjQtMzQtMTItMworYWx3YXlzIOuYhyAyNC0yNC0zNC0zCithbHdheXMg65iIIDI0LTI0LTM0LTMtMworYWx3YXlzIOuYiSAyNC0yNC0zNC0yMzU2CithbHdheXMg65iKIDI0LTI0LTM0LTEzCithbHdheXMg65iLIDI0LTI0LTM0LTIzCithbHdheXMg65iMIDI0LTI0LTM0LTIzNQorYWx3YXlzIOuYjSAyNC0yNC0zNC0yMzYKK2Fsd2F5cyDrmI4gMjQtMjQtMzQtMjU2CithbHdheXMg65iPIDI0LTI0LTM0LTM1NgorYWx3YXlzIOuYkCAyNC0yNC0xMzYKK2Fsd2F5cyDrmJEgMjQtMjQtMTM2LTEKK2Fsd2F5cyDrmJIgMjQtMjQtMTM2LTEtMQorYWx3YXlzIOuYkyAyNC0yNC0xMzYtMS0zCithbHdheXMg65iUIDI0LTI0LTEzNi0yNQorYWx3YXlzIOuYlSAyNC0yNC0xMzYtMjUtMTMKK2Fsd2F5cyDrmJYgMjQtMjQtMTM2LTI1LTM1NgorYWx3YXlzIOuYlyAyNC0yNC0xMzYtMzUKK2Fsd2F5cyDrmJggMjQtMjQtMTM2LTIKK2Fsd2F5cyDrmJkgMjQtMjQtMTM2LTItMQorYWx3YXlzIOuYmiAyNC0yNC0xMzYtMi0yNgorYWx3YXlzIOuYmyAyNC0yNC0xMzYtMi0xMgorYWx3YXlzIOuYnCAyNC0yNC0xMzYtMi0zCithbHdheXMg65idIDI0LTI0LTEzNi0yLTIzNgorYWx3YXlzIOuYniAyNC0yNC0xMzYtMi0yNTYKK2Fsd2F5cyDrmJ8gMjQtMjQtMTM2LTItMzU2CithbHdheXMg65igIDI0LTI0LTEzNi0yNgorYWx3YXlzIOuYoSAyNC0yNC0xMzYtMTIKK2Fsd2F5cyDrmKIgMjQtMjQtMTM2LTEyLTMKK2Fsd2F5cyDrmKMgMjQtMjQtMTM2LTMKK2Fsd2F5cyDrmKQgMjQtMjQtMTM2LTMtMworYWx3YXlzIOuYpSAyNC0yNC0xMzYtMjM1NgorYWx3YXlzIOuYpiAyNC0yNC0xMzYtMTMKK2Fsd2F5cyDrmKcgMjQtMjQtMTM2LTIzCithbHdheXMg65ioIDI0LTI0LTEzNi0yMzUKK2Fsd2F5cyDrmKkgMjQtMjQtMTM2LTIzNgorYWx3YXlzIOuYqiAyNC0yNC0xMzYtMjU2CithbHdheXMg65irIDI0LTI0LTEzNi0zNTYKK2Fsd2F5cyDrmKwgMjQtMjQtMTIzNgorYWx3YXlzIOuYrSAyNC0yNC0xMjM2LTEKK2Fsd2F5cyDrmK4gMjQtMjQtMTIzNi0xLTEKK2Fsd2F5cyDrmK8gMjQtMjQtMTIzNi0xLTMKK2Fsd2F5cyDrmLAgMjQtMjQtMTIzNi0yNQorYWx3YXlzIOuYsSAyNC0yNC0xMjM2LTI1LTEzCithbHdheXMg65iyIDI0LTI0LTEyMzYtMjUtMzU2CithbHdheXMg65izIDI0LTI0LTEyMzYtMzUKK2Fsd2F5cyDrmLQgMjQtMjQtMTIzNi0yCithbHdheXMg65i1IDI0LTI0LTEyMzYtMi0xCithbHdheXMg65i2IDI0LTI0LTEyMzYtMi0yNgorYWx3YXlzIOuYtyAyNC0yNC0xMjM2LTItMTIKK2Fsd2F5cyDrmLggMjQtMjQtMTIzNi0yLTMKK2Fsd2F5cyDrmLkgMjQtMjQtMTIzNi0yLTIzNgorYWx3YXlzIOuYuiAyNC0yNC0xMjM2LTItMjU2CithbHdheXMg65i7IDI0LTI0LTEyMzYtMi0zNTYKK2Fsd2F5cyDrmLwgMjQtMjQtMTIzNi0yNgorYWx3YXlzIOuYvSAyNC0yNC0xMjM2LTEyCithbHdheXMg65i+IDI0LTI0LTEyMzYtMTItMworYWx3YXlzIOuYvyAyNC0yNC0xMjM2LTMKK2Fsd2F5cyDrmYAgMjQtMjQtMTIzNi0zLTMKK2Fsd2F5cyDrmYEgMjQtMjQtMTIzNi0yMzU2CithbHdheXMg65mCIDI0LTI0LTEyMzYtMTMKK2Fsd2F5cyDrmYMgMjQtMjQtMTIzNi0yMworYWx3YXlzIOuZhCAyNC0yNC0xMjM2LTIzNQorYWx3YXlzIOuZhSAyNC0yNC0xMjM2LTIzNgorYWx3YXlzIOuZhiAyNC0yNC0xMjM2LTI1NgorYWx3YXlzIOuZhyAyNC0yNC0xMjM2LTM1NgorYWx3YXlzIOuZiCAyNC0yNC0xMjM2LTEyMzUKK2Fsd2F5cyDrmYkgMjQtMjQtMTIzNi0xMjM1LTEKK2Fsd2F5cyDrmYogMjQtMjQtMTIzNi0xMjM1LTEtMQorYWx3YXlzIOuZiyAyNC0yNC0xMjM2LTEyMzUtMS0zCithbHdheXMg65mMIDI0LTI0LTEyMzYtMTIzNS0yNQorYWx3YXlzIOuZjSAyNC0yNC0xMjM2LTEyMzUtMjUtMTMKK2Fsd2F5cyDrmY4gMjQtMjQtMTIzNi0xMjM1LTI1LTM1NgorYWx3YXlzIOuZjyAyNC0yNC0xMjM2LTEyMzUtMzUKK2Fsd2F5cyDrmZAgMjQtMjQtMTIzNi0xMjM1LTIKK2Fsd2F5cyDrmZEgMjQtMjQtMTIzNi0xMjM1LTItMQorYWx3YXlzIOuZkiAyNC0yNC0xMjM2LTEyMzUtMi0yNgorYWx3YXlzIOuZkyAyNC0yNC0xMjM2LTEyMzUtMi0xMgorYWx3YXlzIOuZlCAyNC0yNC0xMjM2LTEyMzUtMi0zCithbHdheXMg65mVIDI0LTI0LTEyMzYtMTIzNS0yLTIzNgorYWx3YXlzIOuZliAyNC0yNC0xMjM2LTEyMzUtMi0yNTYKK2Fsd2F5cyDrmZcgMjQtMjQtMTIzNi0xMjM1LTItMzU2CithbHdheXMg65mYIDI0LTI0LTEyMzYtMTIzNS0yNgorYWx3YXlzIOuZmSAyNC0yNC0xMjM2LTEyMzUtMTIKK2Fsd2F5cyDrmZogMjQtMjQtMTIzNi0xMjM1LTEyLTMKK2Fsd2F5cyDrmZsgMjQtMjQtMTIzNi0xMjM1LTMKK2Fsd2F5cyDrmZwgMjQtMjQtMTIzNi0xMjM1LTMtMworYWx3YXlzIOuZnSAyNC0yNC0xMjM2LTEyMzUtMjM1NgorYWx3YXlzIOuZniAyNC0yNC0xMjM2LTEyMzUtMTMKK2Fsd2F5cyDrmZ8gMjQtMjQtMTIzNi0xMjM1LTIzCithbHdheXMg65mgIDI0LTI0LTEyMzYtMTIzNS0yMzUKK2Fsd2F5cyDrmaEgMjQtMjQtMTIzNi0xMjM1LTIzNgorYWx3YXlzIOuZoiAyNC0yNC0xMjM2LTEyMzUtMjU2CithbHdheXMg65mjIDI0LTI0LTEyMzYtMTIzNS0zNTYKK2Fsd2F5cyDrmaQgMjQtMjQtMTM0NTYKK2Fsd2F5cyDrmaUgMjQtMjQtMTM0NTYtMQorYWx3YXlzIOuZpiAyNC0yNC0xMzQ1Ni0xLTEKK2Fsd2F5cyDrmacgMjQtMjQtMTM0NTYtMS0zCithbHdheXMg65moIDI0LTI0LTEzNDU2LTI1CithbHdheXMg65mpIDI0LTI0LTEzNDU2LTI1LTEzCithbHdheXMg65mqIDI0LTI0LTEzNDU2LTI1LTM1NgorYWx3YXlzIOuZqyAyNC0yNC0xMzQ1Ni0zNQorYWx3YXlzIOuZrCAyNC0yNC0xMzQ1Ni0yCithbHdheXMg65mtIDI0LTI0LTEzNDU2LTItMQorYWx3YXlzIOuZriAyNC0yNC0xMzQ1Ni0yLTI2CithbHdheXMg65mvIDI0LTI0LTEzNDU2LTItMTIKK2Fsd2F5cyDrmbAgMjQtMjQtMTM0NTYtMi0zCithbHdheXMg65mxIDI0LTI0LTEzNDU2LTItMjM2CithbHdheXMg65myIDI0LTI0LTEzNDU2LTItMjU2CithbHdheXMg65mzIDI0LTI0LTEzNDU2LTItMzU2CithbHdheXMg65m0IDI0LTI0LTEzNDU2LTI2CithbHdheXMg65m1IDI0LTI0LTEzNDU2LTEyCithbHdheXMg65m2IDI0LTI0LTEzNDU2LTEyLTMKK2Fsd2F5cyDrmbcgMjQtMjQtMTM0NTYtMworYWx3YXlzIOuZuCAyNC0yNC0xMzQ1Ni0zLTMKK2Fsd2F5cyDrmbkgMjQtMjQtMTM0NTYtMjM1NgorYWx3YXlzIOuZuiAyNC0yNC0xMzQ1Ni0xMworYWx3YXlzIOuZuyAyNC0yNC0xMzQ1Ni0yMworYWx3YXlzIOuZvCAyNC0yNC0xMzQ1Ni0yMzUKK2Fsd2F5cyDrmb0gMjQtMjQtMTM0NTYtMjM2CithbHdheXMg65m+IDI0LTI0LTEzNDU2LTI1NgorYWx3YXlzIOuZvyAyNC0yNC0xMzQ1Ni0zNTYKK2Fsd2F5cyDrmoAgMjQtMjQtMzQ2CithbHdheXMg65qBIDI0LTI0LTM0Ni0xCithbHdheXMg65qCIDI0LTI0LTM0Ni0xLTEKK2Fsd2F5cyDrmoMgMjQtMjQtMzQ2LTEtMworYWx3YXlzIOuahCAyNC0yNC0zNDYtMjUKK2Fsd2F5cyDrmoUgMjQtMjQtMzQ2LTI1LTEzCithbHdheXMg65qGIDI0LTI0LTM0Ni0yNS0zNTYKK2Fsd2F5cyDrmocgMjQtMjQtMzQ2LTM1CithbHdheXMg65qIIDI0LTI0LTM0Ni0yCithbHdheXMg65qJIDI0LTI0LTM0Ni0yLTEKK2Fsd2F5cyDrmoogMjQtMjQtMzQ2LTItMjYKK2Fsd2F5cyDrmosgMjQtMjQtMzQ2LTItMTIKK2Fsd2F5cyDrmowgMjQtMjQtMzQ2LTItMworYWx3YXlzIOuajSAyNC0yNC0zNDYtMi0yMzYKK2Fsd2F5cyDrmo4gMjQtMjQtMzQ2LTItMjU2CithbHdheXMg65qPIDI0LTI0LTM0Ni0yLTM1NgorYWx3YXlzIOuakCAyNC0yNC0zNDYtMjYKK2Fsd2F5cyDrmpEgMjQtMjQtMzQ2LTEyCithbHdheXMg65qSIDI0LTI0LTM0Ni0xMi0zCithbHdheXMg65qTIDI0LTI0LTM0Ni0zCithbHdheXMg65qUIDI0LTI0LTM0Ni0zLTMKK2Fsd2F5cyDrmpUgMjQtMjQtMzQ2LTIzNTYKK2Fsd2F5cyDrmpYgMjQtMjQtMzQ2LTEzCithbHdheXMg65qXIDI0LTI0LTM0Ni0yMworYWx3YXlzIOuamCAyNC0yNC0zNDYtMjM1CithbHdheXMg65qZIDI0LTI0LTM0Ni0yMzYKK2Fsd2F5cyDrmpogMjQtMjQtMzQ2LTI1NgorYWx3YXlzIOuamyAyNC0yNC0zNDYtMzU2CithbHdheXMg65qcIDI0LTI0LTEzNAorYWx3YXlzIOuanSAyNC0yNC0xMzQtMQorYWx3YXlzIOuaniAyNC0yNC0xMzQtMS0xCithbHdheXMg65qfIDI0LTI0LTEzNC0xLTMKK2Fsd2F5cyDrmqAgMjQtMjQtMTM0LTI1CithbHdheXMg65qhIDI0LTI0LTEzNC0yNS0xMworYWx3YXlzIOuaoiAyNC0yNC0xMzQtMjUtMzU2CithbHdheXMg65qjIDI0LTI0LTEzNC0zNQorYWx3YXlzIOuapCAyNC0yNC0xMzQtMgorYWx3YXlzIOuapSAyNC0yNC0xMzQtMi0xCithbHdheXMg65qmIDI0LTI0LTEzNC0yLTI2CithbHdheXMg65qnIDI0LTI0LTEzNC0yLTEyCithbHdheXMg65qoIDI0LTI0LTEzNC0yLTMKK2Fsd2F5cyDrmqkgMjQtMjQtMTM0LTItMjM2CithbHdheXMg65qqIDI0LTI0LTEzNC0yLTI1NgorYWx3YXlzIOuaqyAyNC0yNC0xMzQtMi0zNTYKK2Fsd2F5cyDrmqwgMjQtMjQtMTM0LTI2CithbHdheXMg65qtIDI0LTI0LTEzNC0xMgorYWx3YXlzIOuariAyNC0yNC0xMzQtMTItMworYWx3YXlzIOuaryAyNC0yNC0xMzQtMworYWx3YXlzIOuasCAyNC0yNC0xMzQtMy0zCithbHdheXMg65qxIDI0LTI0LTEzNC0yMzU2CithbHdheXMg65qyIDI0LTI0LTEzNC0xMworYWx3YXlzIOuasyAyNC0yNC0xMzQtMjMKK2Fsd2F5cyDrmrQgMjQtMjQtMTM0LTIzNQorYWx3YXlzIOuatSAyNC0yNC0xMzQtMjM2CithbHdheXMg65q2IDI0LTI0LTEzNC0yNTYKK2Fsd2F5cyDrmrcgMjQtMjQtMTM0LTM1NgorYWx3YXlzIOuauCAyNC0yNC0xMjM0CithbHdheXMg65q5IDI0LTI0LTEyMzQtMQorYWx3YXlzIOuauiAyNC0yNC0xMjM0LTEtMQorYWx3YXlzIOuauyAyNC0yNC0xMjM0LTEtMworYWx3YXlzIOuavCAyNC0yNC0xMjM0LTI1CithbHdheXMg65q9IDI0LTI0LTEyMzQtMjUtMTMKK2Fsd2F5cyDrmr4gMjQtMjQtMTIzNC0yNS0zNTYKK2Fsd2F5cyDrmr8gMjQtMjQtMTIzNC0zNQorYWx3YXlzIOubgCAyNC0yNC0xMjM0LTIKK2Fsd2F5cyDrm4EgMjQtMjQtMTIzNC0yLTEKK2Fsd2F5cyDrm4IgMjQtMjQtMTIzNC0yLTI2CithbHdheXMg65uDIDI0LTI0LTEyMzQtMi0xMgorYWx3YXlzIOubhCAyNC0yNC0xMjM0LTItMworYWx3YXlzIOubhSAyNC0yNC0xMjM0LTItMjM2CithbHdheXMg65uGIDI0LTI0LTEyMzQtMi0yNTYKK2Fsd2F5cyDrm4cgMjQtMjQtMTIzNC0yLTM1NgorYWx3YXlzIOubiCAyNC0yNC0xMjM0LTI2CithbHdheXMg65uJIDI0LTI0LTEyMzQtMTIKK2Fsd2F5cyDrm4ogMjQtMjQtMTIzNC0xMi0zCithbHdheXMg65uLIDI0LTI0LTEyMzQtMworYWx3YXlzIOubjCAyNC0yNC0xMjM0LTMtMworYWx3YXlzIOubjSAyNC0yNC0xMjM0LTIzNTYKK2Fsd2F5cyDrm44gMjQtMjQtMTIzNC0xMworYWx3YXlzIOubjyAyNC0yNC0xMjM0LTIzCithbHdheXMg65uQIDI0LTI0LTEyMzQtMjM1CithbHdheXMg65uRIDI0LTI0LTEyMzQtMjM2CithbHdheXMg65uSIDI0LTI0LTEyMzQtMjU2CithbHdheXMg65uTIDI0LTI0LTEyMzQtMzU2CithbHdheXMg65uUIDI0LTI0LTEyMzQtMTIzNQorYWx3YXlzIOublSAyNC0yNC0xMjM0LTEyMzUtMQorYWx3YXlzIOubliAyNC0yNC0xMjM0LTEyMzUtMS0xCithbHdheXMg65uXIDI0LTI0LTEyMzQtMTIzNS0xLTMKK2Fsd2F5cyDrm5ggMjQtMjQtMTIzNC0xMjM1LTI1CithbHdheXMg65uZIDI0LTI0LTEyMzQtMTIzNS0yNS0xMworYWx3YXlzIOubmiAyNC0yNC0xMjM0LTEyMzUtMjUtMzU2CithbHdheXMg65ubIDI0LTI0LTEyMzQtMTIzNS0zNQorYWx3YXlzIOubnCAyNC0yNC0xMjM0LTEyMzUtMgorYWx3YXlzIOubnSAyNC0yNC0xMjM0LTEyMzUtMi0xCithbHdheXMg65ueIDI0LTI0LTEyMzQtMTIzNS0yLTI2CithbHdheXMg65ufIDI0LTI0LTEyMzQtMTIzNS0yLTEyCithbHdheXMg65ugIDI0LTI0LTEyMzQtMTIzNS0yLTMKK2Fsd2F5cyDrm6EgMjQtMjQtMTIzNC0xMjM1LTItMjM2CithbHdheXMg65uiIDI0LTI0LTEyMzQtMTIzNS0yLTI1NgorYWx3YXlzIOuboyAyNC0yNC0xMjM0LTEyMzUtMi0zNTYKK2Fsd2F5cyDrm6QgMjQtMjQtMTIzNC0xMjM1LTI2CithbHdheXMg65ulIDI0LTI0LTEyMzQtMTIzNS0xMgorYWx3YXlzIOubpiAyNC0yNC0xMjM0LTEyMzUtMTItMworYWx3YXlzIOubpyAyNC0yNC0xMjM0LTEyMzUtMworYWx3YXlzIOubqCAyNC0yNC0xMjM0LTEyMzUtMy0zCithbHdheXMg65upIDI0LTI0LTEyMzQtMTIzNS0yMzU2CithbHdheXMg65uqIDI0LTI0LTEyMzQtMTIzNS0xMworYWx3YXlzIOubqyAyNC0yNC0xMjM0LTEyMzUtMjMKK2Fsd2F5cyDrm6wgMjQtMjQtMTIzNC0xMjM1LTIzNQorYWx3YXlzIOubrSAyNC0yNC0xMjM0LTEyMzUtMjM2CithbHdheXMg65uuIDI0LTI0LTEyMzQtMTIzNS0yNTYKK2Fsd2F5cyDrm68gMjQtMjQtMTIzNC0xMjM1LTM1NgorYWx3YXlzIOubsCAyNC0yNC0xMzQtMTIzNQorYWx3YXlzIOubsSAyNC0yNC0xMzQtMTIzNS0xCithbHdheXMg65uyIDI0LTI0LTEzNC0xMjM1LTEtMQorYWx3YXlzIOubsyAyNC0yNC0xMzQtMTIzNS0xLTMKK2Fsd2F5cyDrm7QgMjQtMjQtMTM0LTEyMzUtMjUKK2Fsd2F5cyDrm7UgMjQtMjQtMTM0LTEyMzUtMjUtMTMKK2Fsd2F5cyDrm7YgMjQtMjQtMTM0LTEyMzUtMjUtMzU2CithbHdheXMg65u3IDI0LTI0LTEzNC0xMjM1LTM1CithbHdheXMg65u4IDI0LTI0LTEzNC0xMjM1LTIKK2Fsd2F5cyDrm7kgMjQtMjQtMTM0LTEyMzUtMi0xCithbHdheXMg65u6IDI0LTI0LTEzNC0xMjM1LTItMjYKK2Fsd2F5cyDrm7sgMjQtMjQtMTM0LTEyMzUtMi0xMgorYWx3YXlzIOubvCAyNC0yNC0xMzQtMTIzNS0yLTMKK2Fsd2F5cyDrm70gMjQtMjQtMTM0LTEyMzUtMi0yMzYKK2Fsd2F5cyDrm74gMjQtMjQtMTM0LTEyMzUtMi0yNTYKK2Fsd2F5cyDrm78gMjQtMjQtMTM0LTEyMzUtMi0zNTYKK2Fsd2F5cyDrnIAgMjQtMjQtMTM0LTEyMzUtMjYKK2Fsd2F5cyDrnIEgMjQtMjQtMTM0LTEyMzUtMTIKK2Fsd2F5cyDrnIIgMjQtMjQtMTM0LTEyMzUtMTItMworYWx3YXlzIOucgyAyNC0yNC0xMzQtMTIzNS0zCithbHdheXMg65yEIDI0LTI0LTEzNC0xMjM1LTMtMworYWx3YXlzIOuchSAyNC0yNC0xMzQtMTIzNS0yMzU2CithbHdheXMg65yGIDI0LTI0LTEzNC0xMjM1LTEzCithbHdheXMg65yHIDI0LTI0LTEzNC0xMjM1LTIzCithbHdheXMg65yIIDI0LTI0LTEzNC0xMjM1LTIzNQorYWx3YXlzIOuciSAyNC0yNC0xMzQtMTIzNS0yMzYKK2Fsd2F5cyDrnIogMjQtMjQtMTM0LTEyMzUtMjU2CithbHdheXMg65yLIDI0LTI0LTEzNC0xMjM1LTM1NgorYWx3YXlzIOucjCAyNC0yNC0xNDYKK2Fsd2F5cyDrnI0gMjQtMjQtMTQ2LTEKK2Fsd2F5cyDrnI4gMjQtMjQtMTQ2LTEtMQorYWx3YXlzIOucjyAyNC0yNC0xNDYtMS0zCithbHdheXMg65yQIDI0LTI0LTE0Ni0yNQorYWx3YXlzIOuckSAyNC0yNC0xNDYtMjUtMTMKK2Fsd2F5cyDrnJIgMjQtMjQtMTQ2LTI1LTM1NgorYWx3YXlzIOuckyAyNC0yNC0xNDYtMzUKK2Fsd2F5cyDrnJQgMjQtMjQtMTQ2LTIKK2Fsd2F5cyDrnJUgMjQtMjQtMTQ2LTItMQorYWx3YXlzIOucliAyNC0yNC0xNDYtMi0yNgorYWx3YXlzIOuclyAyNC0yNC0xNDYtMi0xMgorYWx3YXlzIOucmCAyNC0yNC0xNDYtMi0zCithbHdheXMg65yZIDI0LTI0LTE0Ni0yLTIzNgorYWx3YXlzIOucmiAyNC0yNC0xNDYtMi0yNTYKK2Fsd2F5cyDrnJsgMjQtMjQtMTQ2LTItMzU2CithbHdheXMg65ycIDI0LTI0LTE0Ni0yNgorYWx3YXlzIOucnSAyNC0yNC0xNDYtMTIKK2Fsd2F5cyDrnJ4gMjQtMjQtMTQ2LTEyLTMKK2Fsd2F5cyDrnJ8gMjQtMjQtMTQ2LTMKK2Fsd2F5cyDrnKAgMjQtMjQtMTQ2LTMtMworYWx3YXlzIOucoSAyNC0yNC0xNDYtMjM1NgorYWx3YXlzIOucoiAyNC0yNC0xNDYtMTMKK2Fsd2F5cyDrnKMgMjQtMjQtMTQ2LTIzCithbHdheXMg65ykIDI0LTI0LTE0Ni0yMzUKK2Fsd2F5cyDrnKUgMjQtMjQtMTQ2LTIzNgorYWx3YXlzIOucpiAyNC0yNC0xNDYtMjU2CithbHdheXMg65ynIDI0LTI0LTE0Ni0zNTYKK2Fsd2F5cyDrnKggMjQtMjQtMjQ2CithbHdheXMg65ypIDI0LTI0LTI0Ni0xCithbHdheXMg65yqIDI0LTI0LTI0Ni0xLTEKK2Fsd2F5cyDrnKsgMjQtMjQtMjQ2LTEtMworYWx3YXlzIOucrCAyNC0yNC0yNDYtMjUKK2Fsd2F5cyDrnK0gMjQtMjQtMjQ2LTI1LTEzCithbHdheXMg65yuIDI0LTI0LTI0Ni0yNS0zNTYKK2Fsd2F5cyDrnK8gMjQtMjQtMjQ2LTM1CithbHdheXMg65ywIDI0LTI0LTI0Ni0yCithbHdheXMg65yxIDI0LTI0LTI0Ni0yLTEKK2Fsd2F5cyDrnLIgMjQtMjQtMjQ2LTItMjYKK2Fsd2F5cyDrnLMgMjQtMjQtMjQ2LTItMTIKK2Fsd2F5cyDrnLQgMjQtMjQtMjQ2LTItMworYWx3YXlzIOuctSAyNC0yNC0yNDYtMi0yMzYKK2Fsd2F5cyDrnLYgMjQtMjQtMjQ2LTItMjU2CithbHdheXMg65y3IDI0LTI0LTI0Ni0yLTM1NgorYWx3YXlzIOucuCAyNC0yNC0yNDYtMjYKK2Fsd2F5cyDrnLkgMjQtMjQtMjQ2LTEyCithbHdheXMg65y6IDI0LTI0LTI0Ni0xMi0zCithbHdheXMg65y7IDI0LTI0LTI0Ni0zCithbHdheXMg65y8IDI0LTI0LTI0Ni0zLTMKK2Fsd2F5cyDrnL0gMjQtMjQtMjQ2LTIzNTYKK2Fsd2F5cyDrnL4gMjQtMjQtMjQ2LTEzCithbHdheXMg65y/IDI0LTI0LTI0Ni0yMworYWx3YXlzIOudgCAyNC0yNC0yNDYtMjM1CithbHdheXMg652BIDI0LTI0LTI0Ni0yMzYKK2Fsd2F5cyDrnYIgMjQtMjQtMjQ2LTI1NgorYWx3YXlzIOudgyAyNC0yNC0yNDYtMzU2CithbHdheXMg652EIDI0LTI0LTI0NTYKK2Fsd2F5cyDrnYUgMjQtMjQtMjQ1Ni0xCithbHdheXMg652GIDI0LTI0LTI0NTYtMS0xCithbHdheXMg652HIDI0LTI0LTI0NTYtMS0zCithbHdheXMg652IIDI0LTI0LTI0NTYtMjUKK2Fsd2F5cyDrnYkgMjQtMjQtMjQ1Ni0yNS0xMworYWx3YXlzIOudiiAyNC0yNC0yNDU2LTI1LTM1NgorYWx3YXlzIOudiyAyNC0yNC0yNDU2LTM1CithbHdheXMg652MIDI0LTI0LTI0NTYtMgorYWx3YXlzIOudjSAyNC0yNC0yNDU2LTItMQorYWx3YXlzIOudjiAyNC0yNC0yNDU2LTItMjYKK2Fsd2F5cyDrnY8gMjQtMjQtMjQ1Ni0yLTEyCithbHdheXMg652QIDI0LTI0LTI0NTYtMi0zCithbHdheXMg652RIDI0LTI0LTI0NTYtMi0yMzYKK2Fsd2F5cyDrnZIgMjQtMjQtMjQ1Ni0yLTI1NgorYWx3YXlzIOudkyAyNC0yNC0yNDU2LTItMzU2CithbHdheXMg652UIDI0LTI0LTI0NTYtMjYKK2Fsd2F5cyDrnZUgMjQtMjQtMjQ1Ni0xMgorYWx3YXlzIOudliAyNC0yNC0yNDU2LTEyLTMKK2Fsd2F5cyDrnZcgMjQtMjQtMjQ1Ni0zCithbHdheXMg652YIDI0LTI0LTI0NTYtMy0zCithbHdheXMg652ZIDI0LTI0LTI0NTYtMjM1NgorYWx3YXlzIOudmiAyNC0yNC0yNDU2LTEzCithbHdheXMg652bIDI0LTI0LTI0NTYtMjMKK2Fsd2F5cyDrnZwgMjQtMjQtMjQ1Ni0yMzUKK2Fsd2F5cyDrnZ0gMjQtMjQtMjQ1Ni0yMzYKK2Fsd2F5cyDrnZ4gMjQtMjQtMjQ1Ni0yNTYKK2Fsd2F5cyDrnZ8gMjQtMjQtMjQ1Ni0zNTYKK2Fsd2F5cyDrnaAgMjQtMjQtMTM1CithbHdheXMg652hIDI0LTI0LTEzNS0xCithbHdheXMg652iIDI0LTI0LTEzNS0xLTEKK2Fsd2F5cyDrnaMgMjQtMjQtMTM1LTEtMworYWx3YXlzIOudpCAyNC0yNC0xMzUtMjUKK2Fsd2F5cyDrnaUgMjQtMjQtMTM1LTI1LTEzCithbHdheXMg652mIDI0LTI0LTEzNS0yNS0zNTYKK2Fsd2F5cyDrnacgMjQtMjQtMTM1LTM1CithbHdheXMg652oIDI0LTI0LTEzNS0yCithbHdheXMg652pIDI0LTI0LTEzNS0yLTEKK2Fsd2F5cyDrnaogMjQtMjQtMTM1LTItMjYKK2Fsd2F5cyDrnasgMjQtMjQtMTM1LTItMTIKK2Fsd2F5cyDrnawgMjQtMjQtMTM1LTItMworYWx3YXlzIOudrSAyNC0yNC0xMzUtMi0yMzYKK2Fsd2F5cyDrna4gMjQtMjQtMTM1LTItMjU2CithbHdheXMg652vIDI0LTI0LTEzNS0yLTM1NgorYWx3YXlzIOudsCAyNC0yNC0xMzUtMjYKK2Fsd2F5cyDrnbEgMjQtMjQtMTM1LTEyCithbHdheXMg652yIDI0LTI0LTEzNS0xMi0zCithbHdheXMg652zIDI0LTI0LTEzNS0zCithbHdheXMg6520IDI0LTI0LTEzNS0zLTMKK2Fsd2F5cyDrnbUgMjQtMjQtMTM1LTIzNTYKK2Fsd2F5cyDrnbYgMjQtMjQtMTM1LTEzCithbHdheXMg6523IDI0LTI0LTEzNS0yMworYWx3YXlzIOuduCAyNC0yNC0xMzUtMjM1CithbHdheXMg6525IDI0LTI0LTEzNS0yMzYKK2Fsd2F5cyDrnbogMjQtMjQtMTM1LTI1NgorYWx3YXlzIOuduyAyNC0yNC0xMzUtMzU2CithbHdheXMg6528IDUtMTI2CithbHdheXMg6529IDUtMTI2LTEKK2Fsd2F5cyDrnb4gNS0xMjYtMS0xCithbHdheXMg652/IDUtMTI2LTEtMworYWx3YXlzIOuegCA1LTEyNi0yNQorYWx3YXlzIOuegSA1LTEyNi0yNS0xMworYWx3YXlzIOuegiA1LTEyNi0yNS0zNTYKK2Fsd2F5cyDrnoMgNS0xMjYtMzUKK2Fsd2F5cyDrnoQgNS0xMjYtMgorYWx3YXlzIOuehSA1LTEyNi0yLTEKK2Fsd2F5cyDrnoYgNS0xMjYtMi0yNgorYWx3YXlzIOuehyA1LTEyNi0yLTEyCithbHdheXMg656IIDUtMTI2LTItMworYWx3YXlzIOueiSA1LTEyNi0yLTIzNgorYWx3YXlzIOueiiA1LTEyNi0yLTI1NgorYWx3YXlzIOueiyA1LTEyNi0yLTM1NgorYWx3YXlzIOuejCA1LTEyNi0yNgorYWx3YXlzIOuejSA1LTEyNi0xMgorYWx3YXlzIOuejiA1LTEyNi0xMi0zCithbHdheXMg656PIDUtMTI2LTMKK2Fsd2F5cyDrnpAgNS0xMjYtMy0zCithbHdheXMg656RIDUtMTI2LTIzNTYKK2Fsd2F5cyDrnpIgNS0xMjYtMTMKK2Fsd2F5cyDrnpMgNS0xMjYtMjMKK2Fsd2F5cyDrnpQgNS0xMjYtMjM1CithbHdheXMg656VIDUtMTI2LTIzNgorYWx3YXlzIOueliA1LTEyNi0yNTYKK2Fsd2F5cyDrnpcgNS0xMjYtMzU2CithbHdheXMg656YIDUtMTIzNQorYWx3YXlzIOuemSA1LTEyMzUtMQorYWx3YXlzIOuemiA1LTEyMzUtMS0xCithbHdheXMg656bIDUtMTIzNS0xLTMKK2Fsd2F5cyDrnpwgNS0xMjM1LTI1CithbHdheXMg656dIDUtMTIzNS0yNS0xMworYWx3YXlzIOueniA1LTEyMzUtMjUtMzU2CithbHdheXMg656fIDUtMTIzNS0zNQorYWx3YXlzIOueoCA1LTEyMzUtMgorYWx3YXlzIOueoSA1LTEyMzUtMi0xCithbHdheXMg656iIDUtMTIzNS0yLTI2CithbHdheXMg656jIDUtMTIzNS0yLTEyCithbHdheXMg656kIDUtMTIzNS0yLTMKK2Fsd2F5cyDrnqUgNS0xMjM1LTItMjM2CithbHdheXMg656mIDUtMTIzNS0yLTI1NgorYWx3YXlzIOuepyA1LTEyMzUtMi0zNTYKK2Fsd2F5cyDrnqggNS0xMjM1LTI2CithbHdheXMg656pIDUtMTIzNS0xMgorYWx3YXlzIOueqiA1LTEyMzUtMTItMworYWx3YXlzIOueqyA1LTEyMzUtMworYWx3YXlzIOuerCA1LTEyMzUtMy0zCithbHdheXMg656tIDUtMTIzNS0yMzU2CithbHdheXMg656uIDUtMTIzNS0xMworYWx3YXlzIOueryA1LTEyMzUtMjMKK2Fsd2F5cyDrnrAgNS0xMjM1LTIzNQorYWx3YXlzIOuesSA1LTEyMzUtMjM2CithbHdheXMg656yIDUtMTIzNS0yNTYKK2Fsd2F5cyDrnrMgNS0xMjM1LTM1NgorYWx3YXlzIOuetCA1LTM0NQorYWx3YXlzIOuetSA1LTM0NS0xCithbHdheXMg6562IDUtMzQ1LTEtMQorYWx3YXlzIOuetyA1LTM0NS0xLTMKK2Fsd2F5cyDrnrggNS0zNDUtMjUKK2Fsd2F5cyDrnrkgNS0zNDUtMjUtMTMKK2Fsd2F5cyDrnrogNS0zNDUtMjUtMzU2CithbHdheXMg6567IDUtMzQ1LTM1CithbHdheXMg6568IDUtMzQ1LTIKK2Fsd2F5cyDrnr0gNS0zNDUtMi0xCithbHdheXMg656+IDUtMzQ1LTItMjYKK2Fsd2F5cyDrnr8gNS0zNDUtMi0xMgorYWx3YXlzIOufgCA1LTM0NS0yLTMKK2Fsd2F5cyDrn4EgNS0zNDUtMi0yMzYKK2Fsd2F5cyDrn4IgNS0zNDUtMi0yNTYKK2Fsd2F5cyDrn4MgNS0zNDUtMi0zNTYKK2Fsd2F5cyDrn4QgNS0zNDUtMjYKK2Fsd2F5cyDrn4UgNS0zNDUtMTIKK2Fsd2F5cyDrn4YgNS0zNDUtMTItMworYWx3YXlzIOufhyA1LTM0NS0zCithbHdheXMg65+IIDUtMzQ1LTMtMworYWx3YXlzIOufiSA1LTM0NS0yMzU2CithbHdheXMg65+KIDUtMzQ1LTEzCithbHdheXMg65+LIDUtMzQ1LTIzCithbHdheXMg65+MIDUtMzQ1LTIzNQorYWx3YXlzIOufjSA1LTM0NS0yMzYKK2Fsd2F5cyDrn44gNS0zNDUtMjU2CithbHdheXMg65+PIDUtMzQ1LTM1NgorYWx3YXlzIOufkCA1LTM0NS0xMjM1CithbHdheXMg65+RIDUtMzQ1LTEyMzUtMQorYWx3YXlzIOufkiA1LTM0NS0xMjM1LTEtMQorYWx3YXlzIOufkyA1LTM0NS0xMjM1LTEtMworYWx3YXlzIOuflCA1LTM0NS0xMjM1LTI1CithbHdheXMg65+VIDUtMzQ1LTEyMzUtMjUtMTMKK2Fsd2F5cyDrn5YgNS0zNDUtMTIzNS0yNS0zNTYKK2Fsd2F5cyDrn5cgNS0zNDUtMTIzNS0zNQorYWx3YXlzIOufmCA1LTM0NS0xMjM1LTIKK2Fsd2F5cyDrn5kgNS0zNDUtMTIzNS0yLTEKK2Fsd2F5cyDrn5ogNS0zNDUtMTIzNS0yLTI2CithbHdheXMg65+bIDUtMzQ1LTEyMzUtMi0xMgorYWx3YXlzIOufnCA1LTM0NS0xMjM1LTItMworYWx3YXlzIOufnSA1LTM0NS0xMjM1LTItMjM2CithbHdheXMg65+eIDUtMzQ1LTEyMzUtMi0yNTYKK2Fsd2F5cyDrn58gNS0zNDUtMTIzNS0yLTM1NgorYWx3YXlzIOufoCA1LTM0NS0xMjM1LTI2CithbHdheXMg65+hIDUtMzQ1LTEyMzUtMTIKK2Fsd2F5cyDrn6IgNS0zNDUtMTIzNS0xMi0zCithbHdheXMg65+jIDUtMzQ1LTEyMzUtMworYWx3YXlzIOufpCA1LTM0NS0xMjM1LTMtMworYWx3YXlzIOufpSA1LTM0NS0xMjM1LTIzNTYKK2Fsd2F5cyDrn6YgNS0zNDUtMTIzNS0xMworYWx3YXlzIOufpyA1LTM0NS0xMjM1LTIzCithbHdheXMg65+oIDUtMzQ1LTEyMzUtMjM1CithbHdheXMg65+pIDUtMzQ1LTEyMzUtMjM2CithbHdheXMg65+qIDUtMzQ1LTEyMzUtMjU2CithbHdheXMg65+rIDUtMzQ1LTEyMzUtMzU2CithbHdheXMg65+sIDUtMjM0CithbHdheXMg65+tIDUtMjM0LTEKK2Fsd2F5cyDrn64gNS0yMzQtMS0xCithbHdheXMg65+vIDUtMjM0LTEtMworYWx3YXlzIOufsCA1LTIzNC0yNQorYWx3YXlzIOufsSA1LTIzNC0yNS0xMworYWx3YXlzIOufsiA1LTIzNC0yNS0zNTYKK2Fsd2F5cyDrn7MgNS0yMzQtMzUKK2Fsd2F5cyDrn7QgNS0yMzQtMgorYWx3YXlzIOuftSA1LTIzNC0yLTEKK2Fsd2F5cyDrn7YgNS0yMzQtMi0yNgorYWx3YXlzIOuftyA1LTIzNC0yLTEyCithbHdheXMg65+4IDUtMjM0LTItMworYWx3YXlzIOufuSA1LTIzNC0yLTIzNgorYWx3YXlzIOufuiA1LTIzNC0yLTI1NgorYWx3YXlzIOufuyA1LTIzNC0yLTM1NgorYWx3YXlzIOufvCA1LTIzNC0yNgorYWx3YXlzIOufvSA1LTIzNC0xMgorYWx3YXlzIOufviA1LTIzNC0xMi0zCithbHdheXMg65+/IDUtMjM0LTMKK2Fsd2F5cyDroIAgNS0yMzQtMy0zCithbHdheXMg66CBIDUtMjM0LTIzNTYKK2Fsd2F5cyDroIIgNS0yMzQtMTMKK2Fsd2F5cyDroIMgNS0yMzQtMjMKK2Fsd2F5cyDroIQgNS0yMzQtMjM1CithbHdheXMg66CFIDUtMjM0LTIzNgorYWx3YXlzIOughiA1LTIzNC0yNTYKK2Fsd2F5cyDroIcgNS0yMzQtMzU2CithbHdheXMg66CIIDUtMTM0NQorYWx3YXlzIOugiSA1LTEzNDUtMQorYWx3YXlzIOugiiA1LTEzNDUtMS0xCithbHdheXMg66CLIDUtMTM0NS0xLTMKK2Fsd2F5cyDroIwgNS0xMzQ1LTI1CithbHdheXMg66CNIDUtMTM0NS0yNS0xMworYWx3YXlzIOugjiA1LTEzNDUtMjUtMzU2CithbHdheXMg66CPIDUtMTM0NS0zNQorYWx3YXlzIOugkCA1LTEzNDUtMgorYWx3YXlzIOugkSA1LTEzNDUtMi0xCithbHdheXMg66CSIDUtMTM0NS0yLTI2CithbHdheXMg66CTIDUtMTM0NS0yLTEyCithbHdheXMg66CUIDUtMTM0NS0yLTMKK2Fsd2F5cyDroJUgNS0xMzQ1LTItMjM2CithbHdheXMg66CWIDUtMTM0NS0yLTI1NgorYWx3YXlzIOuglyA1LTEzNDUtMi0zNTYKK2Fsd2F5cyDroJggNS0xMzQ1LTI2CithbHdheXMg66CZIDUtMTM0NS0xMgorYWx3YXlzIOugmiA1LTEzNDUtMTItMworYWx3YXlzIOugmyA1LTEzNDUtMworYWx3YXlzIOugnCA1LTEzNDUtMy0zCithbHdheXMg66CdIDUtMTM0NS0yMzU2CithbHdheXMg66CeIDUtMTM0NS0xMworYWx3YXlzIOugnyA1LTEzNDUtMjMKK2Fsd2F5cyDroKAgNS0xMzQ1LTIzNQorYWx3YXlzIOugoSA1LTEzNDUtMjM2CithbHdheXMg66CiIDUtMTM0NS0yNTYKK2Fsd2F5cyDroKMgNS0xMzQ1LTM1NgorYWx3YXlzIOugpCA1LTE1NgorYWx3YXlzIOugpSA1LTE1Ni0xCithbHdheXMg66CmIDUtMTU2LTEtMQorYWx3YXlzIOugpyA1LTE1Ni0xLTMKK2Fsd2F5cyDroKggNS0xNTYtMjUKK2Fsd2F5cyDroKkgNS0xNTYtMjUtMTMKK2Fsd2F5cyDroKogNS0xNTYtMjUtMzU2CithbHdheXMg66CrIDUtMTU2LTM1CithbHdheXMg66CsIDUtMTU2LTIKK2Fsd2F5cyDroK0gNS0xNTYtMi0xCithbHdheXMg66CuIDUtMTU2LTItMjYKK2Fsd2F5cyDroK8gNS0xNTYtMi0xMgorYWx3YXlzIOugsCA1LTE1Ni0yLTMKK2Fsd2F5cyDroLEgNS0xNTYtMi0yMzYKK2Fsd2F5cyDroLIgNS0xNTYtMi0yNTYKK2Fsd2F5cyDroLMgNS0xNTYtMi0zNTYKK2Fsd2F5cyDroLQgNS0xNTYtMjYKK2Fsd2F5cyDroLUgNS0xNTYtMTIKK2Fsd2F5cyDroLYgNS0xNTYtMTItMworYWx3YXlzIOugtyA1LTE1Ni0zCithbHdheXMg66C4IDUtMTU2LTMtMworYWx3YXlzIOuguSA1LTE1Ni0yMzU2CithbHdheXMg66C6IDUtMTU2LTEzCithbHdheXMg66C7IDUtMTU2LTIzCithbHdheXMg66C8IDUtMTU2LTIzNQorYWx3YXlzIOugvSA1LTE1Ni0yMzYKK2Fsd2F5cyDroL4gNS0xNTYtMjU2CithbHdheXMg66C/IDUtMTU2LTM1NgorYWx3YXlzIOuhgCA1LTM0CithbHdheXMg66GBIDUtMzQtMQorYWx3YXlzIOuhgiA1LTM0LTEtMQorYWx3YXlzIOuhgyA1LTM0LTEtMworYWx3YXlzIOuhhCA1LTM0LTI1CithbHdheXMg66GFIDUtMzQtMjUtMTMKK2Fsd2F5cyDroYYgNS0zNC0yNS0zNTYKK2Fsd2F5cyDroYcgNS0zNC0zNQorYWx3YXlzIOuhiCA1LTM0LTIKK2Fsd2F5cyDroYkgNS0zNC0yLTEKK2Fsd2F5cyDroYogNS0zNC0yLTI2CithbHdheXMg66GLIDUtMzQtMi0xMgorYWx3YXlzIOuhjCA1LTM0LTItMworYWx3YXlzIOuhjSA1LTM0LTItMjM2CithbHdheXMg66GOIDUtMzQtMi0yNTYKK2Fsd2F5cyDroY8gNS0zNC0yLTM1NgorYWx3YXlzIOuhkCA1LTM0LTI2CithbHdheXMg66GRIDUtMzQtMTIKK2Fsd2F5cyDroZIgNS0zNC0xMi0zCithbHdheXMg66GTIDUtMzQtMworYWx3YXlzIOuhlCA1LTM0LTMtMworYWx3YXlzIOuhlSA1LTM0LTIzNTYKK2Fsd2F5cyDroZYgNS0zNC0xMworYWx3YXlzIOuhlyA1LTM0LTIzCithbHdheXMg66GYIDUtMzQtMjM1CithbHdheXMg66GZIDUtMzQtMjM2CithbHdheXMg66GaIDUtMzQtMjU2CithbHdheXMg66GbIDUtMzQtMzU2CithbHdheXMg66GcIDUtMTM2CithbHdheXMg66GdIDUtMTM2LTEKK2Fsd2F5cyDroZ4gNS0xMzYtMS0xCithbHdheXMg66GfIDUtMTM2LTEtMworYWx3YXlzIOuhoCA1LTEzNi0yNQorYWx3YXlzIOuhoSA1LTEzNi0yNS0xMworYWx3YXlzIOuhoiA1LTEzNi0yNS0zNTYKK2Fsd2F5cyDroaMgNS0xMzYtMzUKK2Fsd2F5cyDroaQgNS0xMzYtMgorYWx3YXlzIOuhpSA1LTEzNi0yLTEKK2Fsd2F5cyDroaYgNS0xMzYtMi0yNgorYWx3YXlzIOuhpyA1LTEzNi0yLTEyCithbHdheXMg66GoIDUtMTM2LTItMworYWx3YXlzIOuhqSA1LTEzNi0yLTIzNgorYWx3YXlzIOuhqiA1LTEzNi0yLTI1NgorYWx3YXlzIOuhqyA1LTEzNi0yLTM1NgorYWx3YXlzIOuhrCA1LTEzNi0yNgorYWx3YXlzIOuhrSA1LTEzNi0xMgorYWx3YXlzIOuhriA1LTEzNi0xMi0zCithbHdheXMg66GvIDUtMTM2LTMKK2Fsd2F5cyDrobAgNS0xMzYtMy0zCithbHdheXMg66GxIDUtMTM2LTIzNTYKK2Fsd2F5cyDrobIgNS0xMzYtMTMKK2Fsd2F5cyDrobMgNS0xMzYtMjMKK2Fsd2F5cyDrobQgNS0xMzYtMjM1CithbHdheXMg66G1IDUtMTM2LTIzNgorYWx3YXlzIOuhtiA1LTEzNi0yNTYKK2Fsd2F5cyDrobcgNS0xMzYtMzU2CithbHdheXMg66G4IDUtMTIzNgorYWx3YXlzIOuhuSA1LTEyMzYtMQorYWx3YXlzIOuhuiA1LTEyMzYtMS0xCithbHdheXMg66G7IDUtMTIzNi0xLTMKK2Fsd2F5cyDrobwgNS0xMjM2LTI1CithbHdheXMg66G9IDUtMTIzNi0yNS0xMworYWx3YXlzIOuhviA1LTEyMzYtMjUtMzU2CithbHdheXMg66G/IDUtMTIzNi0zNQorYWx3YXlzIOuigCA1LTEyMzYtMgorYWx3YXlzIOuigSA1LTEyMzYtMi0xCithbHdheXMg66KCIDUtMTIzNi0yLTI2CithbHdheXMg66KDIDUtMTIzNi0yLTEyCithbHdheXMg66KEIDUtMTIzNi0yLTMKK2Fsd2F5cyDrooUgNS0xMjM2LTItMjM2CithbHdheXMg66KGIDUtMTIzNi0yLTI1NgorYWx3YXlzIOuihyA1LTEyMzYtMi0zNTYKK2Fsd2F5cyDrooggNS0xMjM2LTI2CithbHdheXMg66KJIDUtMTIzNi0xMgorYWx3YXlzIOuiiiA1LTEyMzYtMTItMworYWx3YXlzIOuiiyA1LTEyMzYtMworYWx3YXlzIOuijCA1LTEyMzYtMy0zCithbHdheXMg66KNIDUtMTIzNi0yMzU2CithbHdheXMg66KOIDUtMTIzNi0xMworYWx3YXlzIOuijyA1LTEyMzYtMjMKK2Fsd2F5cyDropAgNS0xMjM2LTIzNQorYWx3YXlzIOuikSA1LTEyMzYtMjM2CithbHdheXMg66KSIDUtMTIzNi0yNTYKK2Fsd2F5cyDropMgNS0xMjM2LTM1NgorYWx3YXlzIOuilCA1LTEyMzYtMTIzNQorYWx3YXlzIOuilSA1LTEyMzYtMTIzNS0xCithbHdheXMg66KWIDUtMTIzNi0xMjM1LTEtMQorYWx3YXlzIOuilyA1LTEyMzYtMTIzNS0xLTMKK2Fsd2F5cyDropggNS0xMjM2LTEyMzUtMjUKK2Fsd2F5cyDropkgNS0xMjM2LTEyMzUtMjUtMTMKK2Fsd2F5cyDropogNS0xMjM2LTEyMzUtMjUtMzU2CithbHdheXMg66KbIDUtMTIzNi0xMjM1LTM1CithbHdheXMg66KcIDUtMTIzNi0xMjM1LTIKK2Fsd2F5cyDrop0gNS0xMjM2LTEyMzUtMi0xCithbHdheXMg66KeIDUtMTIzNi0xMjM1LTItMjYKK2Fsd2F5cyDrop8gNS0xMjM2LTEyMzUtMi0xMgorYWx3YXlzIOuioCA1LTEyMzYtMTIzNS0yLTMKK2Fsd2F5cyDroqEgNS0xMjM2LTEyMzUtMi0yMzYKK2Fsd2F5cyDroqIgNS0xMjM2LTEyMzUtMi0yNTYKK2Fsd2F5cyDroqMgNS0xMjM2LTEyMzUtMi0zNTYKK2Fsd2F5cyDroqQgNS0xMjM2LTEyMzUtMjYKK2Fsd2F5cyDroqUgNS0xMjM2LTEyMzUtMTIKK2Fsd2F5cyDroqYgNS0xMjM2LTEyMzUtMTItMworYWx3YXlzIOuipyA1LTEyMzYtMTIzNS0zCithbHdheXMg66KoIDUtMTIzNi0xMjM1LTMtMworYWx3YXlzIOuiqSA1LTEyMzYtMTIzNS0yMzU2CithbHdheXMg66KqIDUtMTIzNi0xMjM1LTEzCithbHdheXMg66KrIDUtMTIzNi0xMjM1LTIzCithbHdheXMg66KsIDUtMTIzNi0xMjM1LTIzNQorYWx3YXlzIOuirSA1LTEyMzYtMTIzNS0yMzYKK2Fsd2F5cyDroq4gNS0xMjM2LTEyMzUtMjU2CithbHdheXMg66KvIDUtMTIzNi0xMjM1LTM1NgorYWx3YXlzIOuisCA1LTEzNDU2CithbHdheXMg66KxIDUtMTM0NTYtMQorYWx3YXlzIOuisiA1LTEzNDU2LTEtMQorYWx3YXlzIOuisyA1LTEzNDU2LTEtMworYWx3YXlzIOuitCA1LTEzNDU2LTI1CithbHdheXMg66K1IDUtMTM0NTYtMjUtMTMKK2Fsd2F5cyDrorYgNS0xMzQ1Ni0yNS0zNTYKK2Fsd2F5cyDrorcgNS0xMzQ1Ni0zNQorYWx3YXlzIOuiuCA1LTEzNDU2LTIKK2Fsd2F5cyDrorkgNS0xMzQ1Ni0yLTEKK2Fsd2F5cyDrorogNS0xMzQ1Ni0yLTI2CithbHdheXMg66K7IDUtMTM0NTYtMi0xMgorYWx3YXlzIOuivCA1LTEzNDU2LTItMworYWx3YXlzIOuivSA1LTEzNDU2LTItMjM2CithbHdheXMg66K+IDUtMTM0NTYtMi0yNTYKK2Fsd2F5cyDror8gNS0xMzQ1Ni0yLTM1NgorYWx3YXlzIOujgCA1LTEzNDU2LTI2CithbHdheXMg66OBIDUtMTM0NTYtMTIKK2Fsd2F5cyDro4IgNS0xMzQ1Ni0xMi0zCithbHdheXMg66ODIDUtMTM0NTYtMworYWx3YXlzIOujhCA1LTEzNDU2LTMtMworYWx3YXlzIOujhSA1LTEzNDU2LTIzNTYKK2Fsd2F5cyDro4YgNS0xMzQ1Ni0xMworYWx3YXlzIOujhyA1LTEzNDU2LTIzCithbHdheXMg66OIIDUtMTM0NTYtMjM1CithbHdheXMg66OJIDUtMTM0NTYtMjM2CithbHdheXMg66OKIDUtMTM0NTYtMjU2CithbHdheXMg66OLIDUtMTM0NTYtMzU2CithbHdheXMg66OMIDUtMzQ2CithbHdheXMg66ONIDUtMzQ2LTEKK2Fsd2F5cyDro44gNS0zNDYtMS0xCithbHdheXMg66OPIDUtMzQ2LTEtMworYWx3YXlzIOujkCA1LTM0Ni0yNQorYWx3YXlzIOujkSA1LTM0Ni0yNS0xMworYWx3YXlzIOujkiA1LTM0Ni0yNS0zNTYKK2Fsd2F5cyDro5MgNS0zNDYtMzUKK2Fsd2F5cyDro5QgNS0zNDYtMgorYWx3YXlzIOujlSA1LTM0Ni0yLTEKK2Fsd2F5cyDro5YgNS0zNDYtMi0yNgorYWx3YXlzIOujlyA1LTM0Ni0yLTEyCithbHdheXMg66OYIDUtMzQ2LTItMworYWx3YXlzIOujmSA1LTM0Ni0yLTIzNgorYWx3YXlzIOujmiA1LTM0Ni0yLTI1NgorYWx3YXlzIOujmyA1LTM0Ni0yLTM1NgorYWx3YXlzIOujnCA1LTM0Ni0yNgorYWx3YXlzIOujnSA1LTM0Ni0xMgorYWx3YXlzIOujniA1LTM0Ni0xMi0zCithbHdheXMg66OfIDUtMzQ2LTMKK2Fsd2F5cyDro6AgNS0zNDYtMy0zCithbHdheXMg66OhIDUtMzQ2LTIzNTYKK2Fsd2F5cyDro6IgNS0zNDYtMTMKK2Fsd2F5cyDro6MgNS0zNDYtMjMKK2Fsd2F5cyDro6QgNS0zNDYtMjM1CithbHdheXMg66OlIDUtMzQ2LTIzNgorYWx3YXlzIOujpiA1LTM0Ni0yNTYKK2Fsd2F5cyDro6cgNS0zNDYtMzU2CithbHdheXMg66OoIDUtMTM0CithbHdheXMg66OpIDUtMTM0LTEKK2Fsd2F5cyDro6ogNS0xMzQtMS0xCithbHdheXMg66OrIDUtMTM0LTEtMworYWx3YXlzIOujrCA1LTEzNC0yNQorYWx3YXlzIOujrSA1LTEzNC0yNS0xMworYWx3YXlzIOujriA1LTEzNC0yNS0zNTYKK2Fsd2F5cyDro68gNS0xMzQtMzUKK2Fsd2F5cyDro7AgNS0xMzQtMgorYWx3YXlzIOujsSA1LTEzNC0yLTEKK2Fsd2F5cyDro7IgNS0xMzQtMi0yNgorYWx3YXlzIOujsyA1LTEzNC0yLTEyCithbHdheXMg66O0IDUtMTM0LTItMworYWx3YXlzIOujtSA1LTEzNC0yLTIzNgorYWx3YXlzIOujtiA1LTEzNC0yLTI1NgorYWx3YXlzIOujtyA1LTEzNC0yLTM1NgorYWx3YXlzIOujuCA1LTEzNC0yNgorYWx3YXlzIOujuSA1LTEzNC0xMgorYWx3YXlzIOujuiA1LTEzNC0xMi0zCithbHdheXMg66O7IDUtMTM0LTMKK2Fsd2F5cyDro7wgNS0xMzQtMy0zCithbHdheXMg66O9IDUtMTM0LTIzNTYKK2Fsd2F5cyDro74gNS0xMzQtMTMKK2Fsd2F5cyDro78gNS0xMzQtMjMKK2Fsd2F5cyDrpIAgNS0xMzQtMjM1CithbHdheXMg66SBIDUtMTM0LTIzNgorYWx3YXlzIOukgiA1LTEzNC0yNTYKK2Fsd2F5cyDrpIMgNS0xMzQtMzU2CithbHdheXMg66SEIDUtMTIzNAorYWx3YXlzIOukhSA1LTEyMzQtMQorYWx3YXlzIOukhiA1LTEyMzQtMS0xCithbHdheXMg66SHIDUtMTIzNC0xLTMKK2Fsd2F5cyDrpIggNS0xMjM0LTI1CithbHdheXMg66SJIDUtMTIzNC0yNS0xMworYWx3YXlzIOukiiA1LTEyMzQtMjUtMzU2CithbHdheXMg66SLIDUtMTIzNC0zNQorYWx3YXlzIOukjCA1LTEyMzQtMgorYWx3YXlzIOukjSA1LTEyMzQtMi0xCithbHdheXMg66SOIDUtMTIzNC0yLTI2CithbHdheXMg66SPIDUtMTIzNC0yLTEyCithbHdheXMg66SQIDUtMTIzNC0yLTMKK2Fsd2F5cyDrpJEgNS0xMjM0LTItMjM2CithbHdheXMg66SSIDUtMTIzNC0yLTI1NgorYWx3YXlzIOukkyA1LTEyMzQtMi0zNTYKK2Fsd2F5cyDrpJQgNS0xMjM0LTI2CithbHdheXMg66SVIDUtMTIzNC0xMgorYWx3YXlzIOukliA1LTEyMzQtMTItMworYWx3YXlzIOuklyA1LTEyMzQtMworYWx3YXlzIOukmCA1LTEyMzQtMy0zCithbHdheXMg66SZIDUtMTIzNC0yMzU2CithbHdheXMg66SaIDUtMTIzNC0xMworYWx3YXlzIOukmyA1LTEyMzQtMjMKK2Fsd2F5cyDrpJwgNS0xMjM0LTIzNQorYWx3YXlzIOuknSA1LTEyMzQtMjM2CithbHdheXMg66SeIDUtMTIzNC0yNTYKK2Fsd2F5cyDrpJ8gNS0xMjM0LTM1NgorYWx3YXlzIOukoCA1LTEyMzQtMTIzNQorYWx3YXlzIOukoSA1LTEyMzQtMTIzNS0xCithbHdheXMg66SiIDUtMTIzNC0xMjM1LTEtMQorYWx3YXlzIOukoyA1LTEyMzQtMTIzNS0xLTMKK2Fsd2F5cyDrpKQgNS0xMjM0LTEyMzUtMjUKK2Fsd2F5cyDrpKUgNS0xMjM0LTEyMzUtMjUtMTMKK2Fsd2F5cyDrpKYgNS0xMjM0LTEyMzUtMjUtMzU2CithbHdheXMg66SnIDUtMTIzNC0xMjM1LTM1CithbHdheXMg66SoIDUtMTIzNC0xMjM1LTIKK2Fsd2F5cyDrpKkgNS0xMjM0LTEyMzUtMi0xCithbHdheXMg66SqIDUtMTIzNC0xMjM1LTItMjYKK2Fsd2F5cyDrpKsgNS0xMjM0LTEyMzUtMi0xMgorYWx3YXlzIOukrCA1LTEyMzQtMTIzNS0yLTMKK2Fsd2F5cyDrpK0gNS0xMjM0LTEyMzUtMi0yMzYKK2Fsd2F5cyDrpK4gNS0xMjM0LTEyMzUtMi0yNTYKK2Fsd2F5cyDrpK8gNS0xMjM0LTEyMzUtMi0zNTYKK2Fsd2F5cyDrpLAgNS0xMjM0LTEyMzUtMjYKK2Fsd2F5cyDrpLEgNS0xMjM0LTEyMzUtMTIKK2Fsd2F5cyDrpLIgNS0xMjM0LTEyMzUtMTItMworYWx3YXlzIOuksyA1LTEyMzQtMTIzNS0zCithbHdheXMg66S0IDUtMTIzNC0xMjM1LTMtMworYWx3YXlzIOuktSA1LTEyMzQtMTIzNS0yMzU2CithbHdheXMg66S2IDUtMTIzNC0xMjM1LTEzCithbHdheXMg66S3IDUtMTIzNC0xMjM1LTIzCithbHdheXMg66S4IDUtMTIzNC0xMjM1LTIzNQorYWx3YXlzIOukuSA1LTEyMzQtMTIzNS0yMzYKK2Fsd2F5cyDrpLogNS0xMjM0LTEyMzUtMjU2CithbHdheXMg66S7IDUtMTIzNC0xMjM1LTM1NgorYWx3YXlzIOukvCA1LTEzNC0xMjM1CithbHdheXMg66S9IDUtMTM0LTEyMzUtMQorYWx3YXlzIOukviA1LTEzNC0xMjM1LTEtMQorYWx3YXlzIOukvyA1LTEzNC0xMjM1LTEtMworYWx3YXlzIOulgCA1LTEzNC0xMjM1LTI1CithbHdheXMg66WBIDUtMTM0LTEyMzUtMjUtMTMKK2Fsd2F5cyDrpYIgNS0xMzQtMTIzNS0yNS0zNTYKK2Fsd2F5cyDrpYMgNS0xMzQtMTIzNS0zNQorYWx3YXlzIOulhCA1LTEzNC0xMjM1LTIKK2Fsd2F5cyDrpYUgNS0xMzQtMTIzNS0yLTEKK2Fsd2F5cyDrpYYgNS0xMzQtMTIzNS0yLTI2CithbHdheXMg66WHIDUtMTM0LTEyMzUtMi0xMgorYWx3YXlzIOuliCA1LTEzNC0xMjM1LTItMworYWx3YXlzIOuliSA1LTEzNC0xMjM1LTItMjM2CithbHdheXMg66WKIDUtMTM0LTEyMzUtMi0yNTYKK2Fsd2F5cyDrpYsgNS0xMzQtMTIzNS0yLTM1NgorYWx3YXlzIOuljCA1LTEzNC0xMjM1LTI2CithbHdheXMg66WNIDUtMTM0LTEyMzUtMTIKK2Fsd2F5cyDrpY4gNS0xMzQtMTIzNS0xMi0zCithbHdheXMg66WPIDUtMTM0LTEyMzUtMworYWx3YXlzIOulkCA1LTEzNC0xMjM1LTMtMworYWx3YXlzIOulkSA1LTEzNC0xMjM1LTIzNTYKK2Fsd2F5cyDrpZIgNS0xMzQtMTIzNS0xMworYWx3YXlzIOulkyA1LTEzNC0xMjM1LTIzCithbHdheXMg66WUIDUtMTM0LTEyMzUtMjM1CithbHdheXMg66WVIDUtMTM0LTEyMzUtMjM2CithbHdheXMg66WWIDUtMTM0LTEyMzUtMjU2CithbHdheXMg66WXIDUtMTM0LTEyMzUtMzU2CithbHdheXMg66WYIDUtMTQ2CithbHdheXMg66WZIDUtMTQ2LTEKK2Fsd2F5cyDrpZogNS0xNDYtMS0xCithbHdheXMg66WbIDUtMTQ2LTEtMworYWx3YXlzIOulnCA1LTE0Ni0yNQorYWx3YXlzIOulnSA1LTE0Ni0yNS0xMworYWx3YXlzIOulniA1LTE0Ni0yNS0zNTYKK2Fsd2F5cyDrpZ8gNS0xNDYtMzUKK2Fsd2F5cyDrpaAgNS0xNDYtMgorYWx3YXlzIOuloSA1LTE0Ni0yLTEKK2Fsd2F5cyDrpaIgNS0xNDYtMi0yNgorYWx3YXlzIOuloyA1LTE0Ni0yLTEyCithbHdheXMg66WkIDUtMTQ2LTItMworYWx3YXlzIOulpSA1LTE0Ni0yLTIzNgorYWx3YXlzIOulpiA1LTE0Ni0yLTI1NgorYWx3YXlzIOulpyA1LTE0Ni0yLTM1NgorYWx3YXlzIOulqCA1LTE0Ni0yNgorYWx3YXlzIOulqSA1LTE0Ni0xMgorYWx3YXlzIOulqiA1LTE0Ni0xMi0zCithbHdheXMg66WrIDUtMTQ2LTMKK2Fsd2F5cyDrpawgNS0xNDYtMy0zCithbHdheXMg66WtIDUtMTQ2LTIzNTYKK2Fsd2F5cyDrpa4gNS0xNDYtMTMKK2Fsd2F5cyDrpa8gNS0xNDYtMjMKK2Fsd2F5cyDrpbAgNS0xNDYtMjM1CithbHdheXMg66WxIDUtMTQ2LTIzNgorYWx3YXlzIOulsiA1LTE0Ni0yNTYKK2Fsd2F5cyDrpbMgNS0xNDYtMzU2CithbHdheXMg66W0IDUtMjQ2CithbHdheXMg66W1IDUtMjQ2LTEKK2Fsd2F5cyDrpbYgNS0yNDYtMS0xCithbHdheXMg66W3IDUtMjQ2LTEtMworYWx3YXlzIOuluCA1LTI0Ni0yNQorYWx3YXlzIOuluSA1LTI0Ni0yNS0xMworYWx3YXlzIOuluiA1LTI0Ni0yNS0zNTYKK2Fsd2F5cyDrpbsgNS0yNDYtMzUKK2Fsd2F5cyDrpbwgNS0yNDYtMgorYWx3YXlzIOulvSA1LTI0Ni0yLTEKK2Fsd2F5cyDrpb4gNS0yNDYtMi0yNgorYWx3YXlzIOulvyA1LTI0Ni0yLTEyCithbHdheXMg66aAIDUtMjQ2LTItMworYWx3YXlzIOumgSA1LTI0Ni0yLTIzNgorYWx3YXlzIOumgiA1LTI0Ni0yLTI1NgorYWx3YXlzIOumgyA1LTI0Ni0yLTM1NgorYWx3YXlzIOumhCA1LTI0Ni0yNgorYWx3YXlzIOumhSA1LTI0Ni0xMgorYWx3YXlzIOumhiA1LTI0Ni0xMi0zCithbHdheXMg66aHIDUtMjQ2LTMKK2Fsd2F5cyDrpoggNS0yNDYtMy0zCithbHdheXMg66aJIDUtMjQ2LTIzNTYKK2Fsd2F5cyDrpoogNS0yNDYtMTMKK2Fsd2F5cyDrposgNS0yNDYtMjMKK2Fsd2F5cyDrpowgNS0yNDYtMjM1CithbHdheXMg66aNIDUtMjQ2LTIzNgorYWx3YXlzIOumjiA1LTI0Ni0yNTYKK2Fsd2F5cyDrpo8gNS0yNDYtMzU2CithbHdheXMg66aQIDUtMjQ1NgorYWx3YXlzIOumkSA1LTI0NTYtMQorYWx3YXlzIOumkiA1LTI0NTYtMS0xCithbHdheXMg66aTIDUtMjQ1Ni0xLTMKK2Fsd2F5cyDrppQgNS0yNDU2LTI1CithbHdheXMg66aVIDUtMjQ1Ni0yNS0xMworYWx3YXlzIOumliA1LTI0NTYtMjUtMzU2CithbHdheXMg66aXIDUtMjQ1Ni0zNQorYWx3YXlzIOummCA1LTI0NTYtMgorYWx3YXlzIOummSA1LTI0NTYtMi0xCithbHdheXMg66aaIDUtMjQ1Ni0yLTI2CithbHdheXMg66abIDUtMjQ1Ni0yLTEyCithbHdheXMg66acIDUtMjQ1Ni0yLTMKK2Fsd2F5cyDrpp0gNS0yNDU2LTItMjM2CithbHdheXMg66aeIDUtMjQ1Ni0yLTI1NgorYWx3YXlzIOumnyA1LTI0NTYtMi0zNTYKK2Fsd2F5cyDrpqAgNS0yNDU2LTI2CithbHdheXMg66ahIDUtMjQ1Ni0xMgorYWx3YXlzIOumoiA1LTI0NTYtMTItMworYWx3YXlzIOumoyA1LTI0NTYtMworYWx3YXlzIOumpCA1LTI0NTYtMy0zCithbHdheXMg66alIDUtMjQ1Ni0yMzU2CithbHdheXMg66amIDUtMjQ1Ni0xMworYWx3YXlzIOumpyA1LTI0NTYtMjMKK2Fsd2F5cyDrpqggNS0yNDU2LTIzNQorYWx3YXlzIOumqSA1LTI0NTYtMjM2CithbHdheXMg66aqIDUtMjQ1Ni0yNTYKK2Fsd2F5cyDrpqsgNS0yNDU2LTM1NgorYWx3YXlzIOumrCA1LTEzNQorYWx3YXlzIOumrSA1LTEzNS0xCithbHdheXMg66auIDUtMTM1LTEtMQorYWx3YXlzIOumryA1LTEzNS0xLTMKK2Fsd2F5cyDrprAgNS0xMzUtMjUKK2Fsd2F5cyDrprEgNS0xMzUtMjUtMTMKK2Fsd2F5cyDrprIgNS0xMzUtMjUtMzU2CithbHdheXMg66azIDUtMTM1LTM1CithbHdheXMg66a0IDUtMTM1LTIKK2Fsd2F5cyDrprUgNS0xMzUtMi0xCithbHdheXMg66a2IDUtMTM1LTItMjYKK2Fsd2F5cyDrprcgNS0xMzUtMi0xMgorYWx3YXlzIOumuCA1LTEzNS0yLTMKK2Fsd2F5cyDrprkgNS0xMzUtMi0yMzYKK2Fsd2F5cyDrprogNS0xMzUtMi0yNTYKK2Fsd2F5cyDrprsgNS0xMzUtMi0zNTYKK2Fsd2F5cyDrprwgNS0xMzUtMjYKK2Fsd2F5cyDrpr0gNS0xMzUtMTIKK2Fsd2F5cyDrpr4gNS0xMzUtMTItMworYWx3YXlzIOumvyA1LTEzNS0zCithbHdheXMg66eAIDUtMTM1LTMtMworYWx3YXlzIOungSA1LTEzNS0yMzU2CithbHdheXMg66eCIDUtMTM1LTEzCithbHdheXMg66eDIDUtMTM1LTIzCithbHdheXMg66eEIDUtMTM1LTIzNQorYWx3YXlzIOunhSA1LTEzNS0yMzYKK2Fsd2F5cyDrp4YgNS0xMzUtMjU2CithbHdheXMg66eHIDUtMTM1LTM1NgorYWx3YXlzIOuniCAxNS0xMjYKK2Fsd2F5cyDrp4kgMTUtMTI2LTEKK2Fsd2F5cyDrp4ogMTUtMTI2LTEtMQorYWx3YXlzIOuniyAxNS0xMjYtMS0zCithbHdheXMg66eMIDE1LTEyNi0yNQorYWx3YXlzIOunjSAxNS0xMjYtMjUtMTMKK2Fsd2F5cyDrp44gMTUtMTI2LTI1LTM1NgorYWx3YXlzIOunjyAxNS0xMjYtMzUKK2Fsd2F5cyDrp5AgMTUtMTI2LTIKK2Fsd2F5cyDrp5EgMTUtMTI2LTItMQorYWx3YXlzIOunkiAxNS0xMjYtMi0yNgorYWx3YXlzIOunkyAxNS0xMjYtMi0xMgorYWx3YXlzIOunlCAxNS0xMjYtMi0zCithbHdheXMg66eVIDE1LTEyNi0yLTIzNgorYWx3YXlzIOunliAxNS0xMjYtMi0yNTYKK2Fsd2F5cyDrp5cgMTUtMTI2LTItMzU2CithbHdheXMg66eYIDE1LTEyNi0yNgorYWx3YXlzIOunmSAxNS0xMjYtMTIKK2Fsd2F5cyDrp5ogMTUtMTI2LTEyLTMKK2Fsd2F5cyDrp5sgMTUtMTI2LTMKK2Fsd2F5cyDrp5wgMTUtMTI2LTMtMworYWx3YXlzIOunnSAxNS0xMjYtMjM1NgorYWx3YXlzIOunniAxNS0xMjYtMTMKK2Fsd2F5cyDrp58gMTUtMTI2LTIzCithbHdheXMg66egIDE1LTEyNi0yMzUKK2Fsd2F5cyDrp6EgMTUtMTI2LTIzNgorYWx3YXlzIOunoiAxNS0xMjYtMjU2CithbHdheXMg66ejIDE1LTEyNi0zNTYKK2Fsd2F5cyDrp6QgMTUtMTIzNQorYWx3YXlzIOunpSAxNS0xMjM1LTEKK2Fsd2F5cyDrp6YgMTUtMTIzNS0xLTEKK2Fsd2F5cyDrp6cgMTUtMTIzNS0xLTMKK2Fsd2F5cyDrp6ggMTUtMTIzNS0yNQorYWx3YXlzIOunqSAxNS0xMjM1LTI1LTEzCithbHdheXMg66eqIDE1LTEyMzUtMjUtMzU2CithbHdheXMg66erIDE1LTEyMzUtMzUKK2Fsd2F5cyDrp6wgMTUtMTIzNS0yCithbHdheXMg66etIDE1LTEyMzUtMi0xCithbHdheXMg66euIDE1LTEyMzUtMi0yNgorYWx3YXlzIOunryAxNS0xMjM1LTItMTIKK2Fsd2F5cyDrp7AgMTUtMTIzNS0yLTMKK2Fsd2F5cyDrp7EgMTUtMTIzNS0yLTIzNgorYWx3YXlzIOunsiAxNS0xMjM1LTItMjU2CithbHdheXMg66ezIDE1LTEyMzUtMi0zNTYKK2Fsd2F5cyDrp7QgMTUtMTIzNS0yNgorYWx3YXlzIOuntSAxNS0xMjM1LTEyCithbHdheXMg66e2IDE1LTEyMzUtMTItMworYWx3YXlzIOuntyAxNS0xMjM1LTMKK2Fsd2F5cyDrp7ggMTUtMTIzNS0zLTMKK2Fsd2F5cyDrp7kgMTUtMTIzNS0yMzU2CithbHdheXMg66e6IDE1LTEyMzUtMTMKK2Fsd2F5cyDrp7sgMTUtMTIzNS0yMworYWx3YXlzIOunvCAxNS0xMjM1LTIzNQorYWx3YXlzIOunvSAxNS0xMjM1LTIzNgorYWx3YXlzIOunviAxNS0xMjM1LTI1NgorYWx3YXlzIOunvyAxNS0xMjM1LTM1NgorYWx3YXlzIOuogCAxNS0zNDUKK2Fsd2F5cyDrqIEgMTUtMzQ1LTEKK2Fsd2F5cyDrqIIgMTUtMzQ1LTEtMQorYWx3YXlzIOuogyAxNS0zNDUtMS0zCithbHdheXMg66iEIDE1LTM0NS0yNQorYWx3YXlzIOuohSAxNS0zNDUtMjUtMTMKK2Fsd2F5cyDrqIYgMTUtMzQ1LTI1LTM1NgorYWx3YXlzIOuohyAxNS0zNDUtMzUKK2Fsd2F5cyDrqIggMTUtMzQ1LTIKK2Fsd2F5cyDrqIkgMTUtMzQ1LTItMQorYWx3YXlzIOuoiiAxNS0zNDUtMi0yNgorYWx3YXlzIOuoiyAxNS0zNDUtMi0xMgorYWx3YXlzIOuojCAxNS0zNDUtMi0zCithbHdheXMg66iNIDE1LTM0NS0yLTIzNgorYWx3YXlzIOuojiAxNS0zNDUtMi0yNTYKK2Fsd2F5cyDrqI8gMTUtMzQ1LTItMzU2CithbHdheXMg66iQIDE1LTM0NS0yNgorYWx3YXlzIOuokSAxNS0zNDUtMTIKK2Fsd2F5cyDrqJIgMTUtMzQ1LTEyLTMKK2Fsd2F5cyDrqJMgMTUtMzQ1LTMKK2Fsd2F5cyDrqJQgMTUtMzQ1LTMtMworYWx3YXlzIOuolSAxNS0zNDUtMjM1NgorYWx3YXlzIOuoliAxNS0zNDUtMTMKK2Fsd2F5cyDrqJcgMTUtMzQ1LTIzCithbHdheXMg66iYIDE1LTM0NS0yMzUKK2Fsd2F5cyDrqJkgMTUtMzQ1LTIzNgorYWx3YXlzIOuomiAxNS0zNDUtMjU2CithbHdheXMg66ibIDE1LTM0NS0zNTYKK2Fsd2F5cyDrqJwgMTUtMzQ1LTEyMzUKK2Fsd2F5cyDrqJ0gMTUtMzQ1LTEyMzUtMQorYWx3YXlzIOuoniAxNS0zNDUtMTIzNS0xLTEKK2Fsd2F5cyDrqJ8gMTUtMzQ1LTEyMzUtMS0zCithbHdheXMg66igIDE1LTM0NS0xMjM1LTI1CithbHdheXMg66ihIDE1LTM0NS0xMjM1LTI1LTEzCithbHdheXMg66iiIDE1LTM0NS0xMjM1LTI1LTM1NgorYWx3YXlzIOuooyAxNS0zNDUtMTIzNS0zNQorYWx3YXlzIOuopCAxNS0zNDUtMTIzNS0yCithbHdheXMg66ilIDE1LTM0NS0xMjM1LTItMQorYWx3YXlzIOuopiAxNS0zNDUtMTIzNS0yLTI2CithbHdheXMg66inIDE1LTM0NS0xMjM1LTItMTIKK2Fsd2F5cyDrqKggMTUtMzQ1LTEyMzUtMi0zCithbHdheXMg66ipIDE1LTM0NS0xMjM1LTItMjM2CithbHdheXMg66iqIDE1LTM0NS0xMjM1LTItMjU2CithbHdheXMg66irIDE1LTM0NS0xMjM1LTItMzU2CithbHdheXMg66isIDE1LTM0NS0xMjM1LTI2CithbHdheXMg66itIDE1LTM0NS0xMjM1LTEyCithbHdheXMg66iuIDE1LTM0NS0xMjM1LTEyLTMKK2Fsd2F5cyDrqK8gMTUtMzQ1LTEyMzUtMworYWx3YXlzIOuosCAxNS0zNDUtMTIzNS0zLTMKK2Fsd2F5cyDrqLEgMTUtMzQ1LTEyMzUtMjM1NgorYWx3YXlzIOuosiAxNS0zNDUtMTIzNS0xMworYWx3YXlzIOuosyAxNS0zNDUtMTIzNS0yMworYWx3YXlzIOuotCAxNS0zNDUtMTIzNS0yMzUKK2Fsd2F5cyDrqLUgMTUtMzQ1LTEyMzUtMjM2CithbHdheXMg66i2IDE1LTM0NS0xMjM1LTI1NgorYWx3YXlzIOuotyAxNS0zNDUtMTIzNS0zNTYKK2Fsd2F5cyDrqLggMTUtMjM0CithbHdheXMg66i5IDE1LTIzNC0xCithbHdheXMg66i6IDE1LTIzNC0xLTEKK2Fsd2F5cyDrqLsgMTUtMjM0LTEtMworYWx3YXlzIOuovCAxNS0yMzQtMjUKK2Fsd2F5cyDrqL0gMTUtMjM0LTI1LTEzCithbHdheXMg66i+IDE1LTIzNC0yNS0zNTYKK2Fsd2F5cyDrqL8gMTUtMjM0LTM1CithbHdheXMg66mAIDE1LTIzNC0yCithbHdheXMg66mBIDE1LTIzNC0yLTEKK2Fsd2F5cyDrqYIgMTUtMjM0LTItMjYKK2Fsd2F5cyDrqYMgMTUtMjM0LTItMTIKK2Fsd2F5cyDrqYQgMTUtMjM0LTItMworYWx3YXlzIOuphSAxNS0yMzQtMi0yMzYKK2Fsd2F5cyDrqYYgMTUtMjM0LTItMjU2CithbHdheXMg66mHIDE1LTIzNC0yLTM1NgorYWx3YXlzIOupiCAxNS0yMzQtMjYKK2Fsd2F5cyDrqYkgMTUtMjM0LTEyCithbHdheXMg66mKIDE1LTIzNC0xMi0zCithbHdheXMg66mLIDE1LTIzNC0zCithbHdheXMg66mMIDE1LTIzNC0zLTMKK2Fsd2F5cyDrqY0gMTUtMjM0LTIzNTYKK2Fsd2F5cyDrqY4gMTUtMjM0LTEzCithbHdheXMg66mPIDE1LTIzNC0yMworYWx3YXlzIOupkCAxNS0yMzQtMjM1CithbHdheXMg66mRIDE1LTIzNC0yMzYKK2Fsd2F5cyDrqZIgMTUtMjM0LTI1NgorYWx3YXlzIOupkyAxNS0yMzQtMzU2CithbHdheXMg66mUIDE1LTEzNDUKK2Fsd2F5cyDrqZUgMTUtMTM0NS0xCithbHdheXMg66mWIDE1LTEzNDUtMS0xCithbHdheXMg66mXIDE1LTEzNDUtMS0zCithbHdheXMg66mYIDE1LTEzNDUtMjUKK2Fsd2F5cyDrqZkgMTUtMTM0NS0yNS0xMworYWx3YXlzIOupmiAxNS0xMzQ1LTI1LTM1NgorYWx3YXlzIOupmyAxNS0xMzQ1LTM1CithbHdheXMg66mcIDE1LTEzNDUtMgorYWx3YXlzIOupnSAxNS0xMzQ1LTItMQorYWx3YXlzIOupniAxNS0xMzQ1LTItMjYKK2Fsd2F5cyDrqZ8gMTUtMTM0NS0yLTEyCithbHdheXMg66mgIDE1LTEzNDUtMi0zCithbHdheXMg66mhIDE1LTEzNDUtMi0yMzYKK2Fsd2F5cyDrqaIgMTUtMTM0NS0yLTI1NgorYWx3YXlzIOupoyAxNS0xMzQ1LTItMzU2CithbHdheXMg66mkIDE1LTEzNDUtMjYKK2Fsd2F5cyDrqaUgMTUtMTM0NS0xMgorYWx3YXlzIOuppiAxNS0xMzQ1LTEyLTMKK2Fsd2F5cyDrqacgMTUtMTM0NS0zCithbHdheXMg66moIDE1LTEzNDUtMy0zCithbHdheXMg66mpIDE1LTEzNDUtMjM1NgorYWx3YXlzIOupqiAxNS0xMzQ1LTEzCithbHdheXMg66mrIDE1LTEzNDUtMjMKK2Fsd2F5cyDrqawgMTUtMTM0NS0yMzUKK2Fsd2F5cyDrqa0gMTUtMTM0NS0yMzYKK2Fsd2F5cyDrqa4gMTUtMTM0NS0yNTYKK2Fsd2F5cyDrqa8gMTUtMTM0NS0zNTYKK2Fsd2F5cyDrqbAgMTUtMTU2CithbHdheXMg66mxIDE1LTE1Ni0xCithbHdheXMg66myIDE1LTE1Ni0xLTEKK2Fsd2F5cyDrqbMgMTUtMTU2LTEtMworYWx3YXlzIOuptCAxNS0xNTYtMjUKK2Fsd2F5cyDrqbUgMTUtMTU2LTI1LTEzCithbHdheXMg66m2IDE1LTE1Ni0yNS0zNTYKK2Fsd2F5cyDrqbcgMTUtMTU2LTM1CithbHdheXMg66m4IDE1LTE1Ni0yCithbHdheXMg66m5IDE1LTE1Ni0yLTEKK2Fsd2F5cyDrqbogMTUtMTU2LTItMjYKK2Fsd2F5cyDrqbsgMTUtMTU2LTItMTIKK2Fsd2F5cyDrqbwgMTUtMTU2LTItMworYWx3YXlzIOupvSAxNS0xNTYtMi0yMzYKK2Fsd2F5cyDrqb4gMTUtMTU2LTItMjU2CithbHdheXMg66m/IDE1LTE1Ni0yLTM1NgorYWx3YXlzIOuqgCAxNS0xNTYtMjYKK2Fsd2F5cyDrqoEgMTUtMTU2LTEyCithbHdheXMg66qCIDE1LTE1Ni0xMi0zCithbHdheXMg66qDIDE1LTE1Ni0zCithbHdheXMg66qEIDE1LTE1Ni0zLTMKK2Fsd2F5cyDrqoUgMTUtMTU2LTIzNTYKK2Fsd2F5cyDrqoYgMTUtMTU2LTEzCithbHdheXMg66qHIDE1LTE1Ni0yMworYWx3YXlzIOuqiCAxNS0xNTYtMjM1CithbHdheXMg66qJIDE1LTE1Ni0yMzYKK2Fsd2F5cyDrqoogMTUtMTU2LTI1NgorYWx3YXlzIOuqiyAxNS0xNTYtMzU2CithbHdheXMg66qMIDE1LTM0CithbHdheXMg66qNIDE1LTM0LTEKK2Fsd2F5cyDrqo4gMTUtMzQtMS0xCithbHdheXMg66qPIDE1LTM0LTEtMworYWx3YXlzIOuqkCAxNS0zNC0yNQorYWx3YXlzIOuqkSAxNS0zNC0yNS0xMworYWx3YXlzIOuqkiAxNS0zNC0yNS0zNTYKK2Fsd2F5cyDrqpMgMTUtMzQtMzUKK2Fsd2F5cyDrqpQgMTUtMzQtMgorYWx3YXlzIOuqlSAxNS0zNC0yLTEKK2Fsd2F5cyDrqpYgMTUtMzQtMi0yNgorYWx3YXlzIOuqlyAxNS0zNC0yLTEyCithbHdheXMg66qYIDE1LTM0LTItMworYWx3YXlzIOuqmSAxNS0zNC0yLTIzNgorYWx3YXlzIOuqmiAxNS0zNC0yLTI1NgorYWx3YXlzIOuqmyAxNS0zNC0yLTM1NgorYWx3YXlzIOuqnCAxNS0zNC0yNgorYWx3YXlzIOuqnSAxNS0zNC0xMgorYWx3YXlzIOuqniAxNS0zNC0xMi0zCithbHdheXMg66qfIDE1LTM0LTMKK2Fsd2F5cyDrqqAgMTUtMzQtMy0zCithbHdheXMg66qhIDE1LTM0LTIzNTYKK2Fsd2F5cyDrqqIgMTUtMzQtMTMKK2Fsd2F5cyDrqqMgMTUtMzQtMjMKK2Fsd2F5cyDrqqQgMTUtMzQtMjM1CithbHdheXMg66qlIDE1LTM0LTIzNgorYWx3YXlzIOuqpiAxNS0zNC0yNTYKK2Fsd2F5cyDrqqcgMTUtMzQtMzU2CithbHdheXMg66qoIDE1LTEzNgorYWx3YXlzIOuqqSAxNS0xMzYtMQorYWx3YXlzIOuqqiAxNS0xMzYtMS0xCithbHdheXMg66qrIDE1LTEzNi0xLTMKK2Fsd2F5cyDrqqwgMTUtMTM2LTI1CithbHdheXMg66qtIDE1LTEzNi0yNS0xMworYWx3YXlzIOuqriAxNS0xMzYtMjUtMzU2CithbHdheXMg66qvIDE1LTEzNi0zNQorYWx3YXlzIOuqsCAxNS0xMzYtMgorYWx3YXlzIOuqsSAxNS0xMzYtMi0xCithbHdheXMg66qyIDE1LTEzNi0yLTI2CithbHdheXMg66qzIDE1LTEzNi0yLTEyCithbHdheXMg66q0IDE1LTEzNi0yLTMKK2Fsd2F5cyDrqrUgMTUtMTM2LTItMjM2CithbHdheXMg66q2IDE1LTEzNi0yLTI1NgorYWx3YXlzIOuqtyAxNS0xMzYtMi0zNTYKK2Fsd2F5cyDrqrggMTUtMTM2LTI2CithbHdheXMg66q5IDE1LTEzNi0xMgorYWx3YXlzIOuquiAxNS0xMzYtMTItMworYWx3YXlzIOuquyAxNS0xMzYtMworYWx3YXlzIOuqvCAxNS0xMzYtMy0zCithbHdheXMg66q9IDE1LTEzNi0yMzU2CithbHdheXMg66q+IDE1LTEzNi0xMworYWx3YXlzIOuqvyAxNS0xMzYtMjMKK2Fsd2F5cyDrq4AgMTUtMTM2LTIzNQorYWx3YXlzIOurgSAxNS0xMzYtMjM2CithbHdheXMg66uCIDE1LTEzNi0yNTYKK2Fsd2F5cyDrq4MgMTUtMTM2LTM1NgorYWx3YXlzIOurhCAxNS0xMjM2CithbHdheXMg66uFIDE1LTEyMzYtMQorYWx3YXlzIOurhiAxNS0xMjM2LTEtMQorYWx3YXlzIOurhyAxNS0xMjM2LTEtMworYWx3YXlzIOuriCAxNS0xMjM2LTI1CithbHdheXMg66uJIDE1LTEyMzYtMjUtMTMKK2Fsd2F5cyDrq4ogMTUtMTIzNi0yNS0zNTYKK2Fsd2F5cyDrq4sgMTUtMTIzNi0zNQorYWx3YXlzIOurjCAxNS0xMjM2LTIKK2Fsd2F5cyDrq40gMTUtMTIzNi0yLTEKK2Fsd2F5cyDrq44gMTUtMTIzNi0yLTI2CithbHdheXMg66uPIDE1LTEyMzYtMi0xMgorYWx3YXlzIOurkCAxNS0xMjM2LTItMworYWx3YXlzIOurkSAxNS0xMjM2LTItMjM2CithbHdheXMg66uSIDE1LTEyMzYtMi0yNTYKK2Fsd2F5cyDrq5MgMTUtMTIzNi0yLTM1NgorYWx3YXlzIOurlCAxNS0xMjM2LTI2CithbHdheXMg66uVIDE1LTEyMzYtMTIKK2Fsd2F5cyDrq5YgMTUtMTIzNi0xMi0zCithbHdheXMg66uXIDE1LTEyMzYtMworYWx3YXlzIOurmCAxNS0xMjM2LTMtMworYWx3YXlzIOurmSAxNS0xMjM2LTIzNTYKK2Fsd2F5cyDrq5ogMTUtMTIzNi0xMworYWx3YXlzIOurmyAxNS0xMjM2LTIzCithbHdheXMg66ucIDE1LTEyMzYtMjM1CithbHdheXMg66udIDE1LTEyMzYtMjM2CithbHdheXMg66ueIDE1LTEyMzYtMjU2CithbHdheXMg66ufIDE1LTEyMzYtMzU2CithbHdheXMg66ugIDE1LTEyMzYtMTIzNQorYWx3YXlzIOuroSAxNS0xMjM2LTEyMzUtMQorYWx3YXlzIOuroiAxNS0xMjM2LTEyMzUtMS0xCithbHdheXMg66ujIDE1LTEyMzYtMTIzNS0xLTMKK2Fsd2F5cyDrq6QgMTUtMTIzNi0xMjM1LTI1CithbHdheXMg66ulIDE1LTEyMzYtMTIzNS0yNS0xMworYWx3YXlzIOurpiAxNS0xMjM2LTEyMzUtMjUtMzU2CithbHdheXMg66unIDE1LTEyMzYtMTIzNS0zNQorYWx3YXlzIOurqCAxNS0xMjM2LTEyMzUtMgorYWx3YXlzIOurqSAxNS0xMjM2LTEyMzUtMi0xCithbHdheXMg66uqIDE1LTEyMzYtMTIzNS0yLTI2CithbHdheXMg66urIDE1LTEyMzYtMTIzNS0yLTEyCithbHdheXMg66usIDE1LTEyMzYtMTIzNS0yLTMKK2Fsd2F5cyDrq60gMTUtMTIzNi0xMjM1LTItMjM2CithbHdheXMg66uuIDE1LTEyMzYtMTIzNS0yLTI1NgorYWx3YXlzIOurryAxNS0xMjM2LTEyMzUtMi0zNTYKK2Fsd2F5cyDrq7AgMTUtMTIzNi0xMjM1LTI2CithbHdheXMg66uxIDE1LTEyMzYtMTIzNS0xMgorYWx3YXlzIOursiAxNS0xMjM2LTEyMzUtMTItMworYWx3YXlzIOursyAxNS0xMjM2LTEyMzUtMworYWx3YXlzIOurtCAxNS0xMjM2LTEyMzUtMy0zCithbHdheXMg66u1IDE1LTEyMzYtMTIzNS0yMzU2CithbHdheXMg66u2IDE1LTEyMzYtMTIzNS0xMworYWx3YXlzIOurtyAxNS0xMjM2LTEyMzUtMjMKK2Fsd2F5cyDrq7ggMTUtMTIzNi0xMjM1LTIzNQorYWx3YXlzIOuruSAxNS0xMjM2LTEyMzUtMjM2CithbHdheXMg66u6IDE1LTEyMzYtMTIzNS0yNTYKK2Fsd2F5cyDrq7sgMTUtMTIzNi0xMjM1LTM1NgorYWx3YXlzIOurvCAxNS0xMzQ1NgorYWx3YXlzIOurvSAxNS0xMzQ1Ni0xCithbHdheXMg66u+IDE1LTEzNDU2LTEtMQorYWx3YXlzIOurvyAxNS0xMzQ1Ni0xLTMKK2Fsd2F5cyDrrIAgMTUtMTM0NTYtMjUKK2Fsd2F5cyDrrIEgMTUtMTM0NTYtMjUtMTMKK2Fsd2F5cyDrrIIgMTUtMTM0NTYtMjUtMzU2CithbHdheXMg66yDIDE1LTEzNDU2LTM1CithbHdheXMg66yEIDE1LTEzNDU2LTIKK2Fsd2F5cyDrrIUgMTUtMTM0NTYtMi0xCithbHdheXMg66yGIDE1LTEzNDU2LTItMjYKK2Fsd2F5cyDrrIcgMTUtMTM0NTYtMi0xMgorYWx3YXlzIOusiCAxNS0xMzQ1Ni0yLTMKK2Fsd2F5cyDrrIkgMTUtMTM0NTYtMi0yMzYKK2Fsd2F5cyDrrIogMTUtMTM0NTYtMi0yNTYKK2Fsd2F5cyDrrIsgMTUtMTM0NTYtMi0zNTYKK2Fsd2F5cyDrrIwgMTUtMTM0NTYtMjYKK2Fsd2F5cyDrrI0gMTUtMTM0NTYtMTIKK2Fsd2F5cyDrrI4gMTUtMTM0NTYtMTItMworYWx3YXlzIOusjyAxNS0xMzQ1Ni0zCithbHdheXMg66yQIDE1LTEzNDU2LTMtMworYWx3YXlzIOuskSAxNS0xMzQ1Ni0yMzU2CithbHdheXMg66ySIDE1LTEzNDU2LTEzCithbHdheXMg66yTIDE1LTEzNDU2LTIzCithbHdheXMg66yUIDE1LTEzNDU2LTIzNQorYWx3YXlzIOuslSAxNS0xMzQ1Ni0yMzYKK2Fsd2F5cyDrrJYgMTUtMTM0NTYtMjU2CithbHdheXMg66yXIDE1LTEzNDU2LTM1NgorYWx3YXlzIOusmCAxNS0zNDYKK2Fsd2F5cyDrrJkgMTUtMzQ2LTEKK2Fsd2F5cyDrrJogMTUtMzQ2LTEtMQorYWx3YXlzIOusmyAxNS0zNDYtMS0zCithbHdheXMg66ycIDE1LTM0Ni0yNQorYWx3YXlzIOusnSAxNS0zNDYtMjUtMTMKK2Fsd2F5cyDrrJ4gMTUtMzQ2LTI1LTM1NgorYWx3YXlzIOusnyAxNS0zNDYtMzUKK2Fsd2F5cyDrrKAgMTUtMzQ2LTIKK2Fsd2F5cyDrrKEgMTUtMzQ2LTItMQorYWx3YXlzIOusoiAxNS0zNDYtMi0yNgorYWx3YXlzIOusoyAxNS0zNDYtMi0xMgorYWx3YXlzIOuspCAxNS0zNDYtMi0zCithbHdheXMg66ylIDE1LTM0Ni0yLTIzNgorYWx3YXlzIOuspiAxNS0zNDYtMi0yNTYKK2Fsd2F5cyDrrKcgMTUtMzQ2LTItMzU2CithbHdheXMg66yoIDE1LTM0Ni0yNgorYWx3YXlzIOusqSAxNS0zNDYtMTIKK2Fsd2F5cyDrrKogMTUtMzQ2LTEyLTMKK2Fsd2F5cyDrrKsgMTUtMzQ2LTMKK2Fsd2F5cyDrrKwgMTUtMzQ2LTMtMworYWx3YXlzIOusrSAxNS0zNDYtMjM1NgorYWx3YXlzIOusriAxNS0zNDYtMTMKK2Fsd2F5cyDrrK8gMTUtMzQ2LTIzCithbHdheXMg66ywIDE1LTM0Ni0yMzUKK2Fsd2F5cyDrrLEgMTUtMzQ2LTIzNgorYWx3YXlzIOussiAxNS0zNDYtMjU2CithbHdheXMg66yzIDE1LTM0Ni0zNTYKK2Fsd2F5cyDrrLQgMTUtMTM0CithbHdheXMg66y1IDE1LTEzNC0xCithbHdheXMg66y2IDE1LTEzNC0xLTEKK2Fsd2F5cyDrrLcgMTUtMTM0LTEtMworYWx3YXlzIOusuCAxNS0xMzQtMjUKK2Fsd2F5cyDrrLkgMTUtMTM0LTI1LTEzCithbHdheXMg66y6IDE1LTEzNC0yNS0zNTYKK2Fsd2F5cyDrrLsgMTUtMTM0LTM1CithbHdheXMg66y8IDE1LTEzNC0yCithbHdheXMg66y9IDE1LTEzNC0yLTEKK2Fsd2F5cyDrrL4gMTUtMTM0LTItMjYKK2Fsd2F5cyDrrL8gMTUtMTM0LTItMTIKK2Fsd2F5cyDrrYAgMTUtMTM0LTItMworYWx3YXlzIOutgSAxNS0xMzQtMi0yMzYKK2Fsd2F5cyDrrYIgMTUtMTM0LTItMjU2CithbHdheXMg662DIDE1LTEzNC0yLTM1NgorYWx3YXlzIOuthCAxNS0xMzQtMjYKK2Fsd2F5cyDrrYUgMTUtMTM0LTEyCithbHdheXMg662GIDE1LTEzNC0xMi0zCithbHdheXMg662HIDE1LTEzNC0zCithbHdheXMg662IIDE1LTEzNC0zLTMKK2Fsd2F5cyDrrYkgMTUtMTM0LTIzNTYKK2Fsd2F5cyDrrYogMTUtMTM0LTEzCithbHdheXMg662LIDE1LTEzNC0yMworYWx3YXlzIOutjCAxNS0xMzQtMjM1CithbHdheXMg662NIDE1LTEzNC0yMzYKK2Fsd2F5cyDrrY4gMTUtMTM0LTI1NgorYWx3YXlzIOutjyAxNS0xMzQtMzU2CithbHdheXMg662QIDE1LTEyMzQKK2Fsd2F5cyDrrZEgMTUtMTIzNC0xCithbHdheXMg662SIDE1LTEyMzQtMS0xCithbHdheXMg662TIDE1LTEyMzQtMS0zCithbHdheXMg662UIDE1LTEyMzQtMjUKK2Fsd2F5cyDrrZUgMTUtMTIzNC0yNS0xMworYWx3YXlzIOutliAxNS0xMjM0LTI1LTM1NgorYWx3YXlzIOutlyAxNS0xMjM0LTM1CithbHdheXMg662YIDE1LTEyMzQtMgorYWx3YXlzIOutmSAxNS0xMjM0LTItMQorYWx3YXlzIOutmiAxNS0xMjM0LTItMjYKK2Fsd2F5cyDrrZsgMTUtMTIzNC0yLTEyCithbHdheXMg662cIDE1LTEyMzQtMi0zCithbHdheXMg662dIDE1LTEyMzQtMi0yMzYKK2Fsd2F5cyDrrZ4gMTUtMTIzNC0yLTI1NgorYWx3YXlzIOutnyAxNS0xMjM0LTItMzU2CithbHdheXMg662gIDE1LTEyMzQtMjYKK2Fsd2F5cyDrraEgMTUtMTIzNC0xMgorYWx3YXlzIOutoiAxNS0xMjM0LTEyLTMKK2Fsd2F5cyDrraMgMTUtMTIzNC0zCithbHdheXMg662kIDE1LTEyMzQtMy0zCithbHdheXMg662lIDE1LTEyMzQtMjM1NgorYWx3YXlzIOutpiAxNS0xMjM0LTEzCithbHdheXMg662nIDE1LTEyMzQtMjMKK2Fsd2F5cyDrraggMTUtMTIzNC0yMzUKK2Fsd2F5cyDrrakgMTUtMTIzNC0yMzYKK2Fsd2F5cyDrraogMTUtMTIzNC0yNTYKK2Fsd2F5cyDrrasgMTUtMTIzNC0zNTYKK2Fsd2F5cyDrrawgMTUtMTIzNC0xMjM1CithbHdheXMg662tIDE1LTEyMzQtMTIzNS0xCithbHdheXMg662uIDE1LTEyMzQtMTIzNS0xLTEKK2Fsd2F5cyDrra8gMTUtMTIzNC0xMjM1LTEtMworYWx3YXlzIOutsCAxNS0xMjM0LTEyMzUtMjUKK2Fsd2F5cyDrrbEgMTUtMTIzNC0xMjM1LTI1LTEzCithbHdheXMg662yIDE1LTEyMzQtMTIzNS0yNS0zNTYKK2Fsd2F5cyDrrbMgMTUtMTIzNC0xMjM1LTM1CithbHdheXMg6620IDE1LTEyMzQtMTIzNS0yCithbHdheXMg6621IDE1LTEyMzQtMTIzNS0yLTEKK2Fsd2F5cyDrrbYgMTUtMTIzNC0xMjM1LTItMjYKK2Fsd2F5cyDrrbcgMTUtMTIzNC0xMjM1LTItMTIKK2Fsd2F5cyDrrbggMTUtMTIzNC0xMjM1LTItMworYWx3YXlzIOutuSAxNS0xMjM0LTEyMzUtMi0yMzYKK2Fsd2F5cyDrrbogMTUtMTIzNC0xMjM1LTItMjU2CithbHdheXMg6627IDE1LTEyMzQtMTIzNS0yLTM1NgorYWx3YXlzIOutvCAxNS0xMjM0LTEyMzUtMjYKK2Fsd2F5cyDrrb0gMTUtMTIzNC0xMjM1LTEyCithbHdheXMg662+IDE1LTEyMzQtMTIzNS0xMi0zCithbHdheXMg662/IDE1LTEyMzQtMTIzNS0zCithbHdheXMg666AIDE1LTEyMzQtMTIzNS0zLTMKK2Fsd2F5cyDrroEgMTUtMTIzNC0xMjM1LTIzNTYKK2Fsd2F5cyDrroIgMTUtMTIzNC0xMjM1LTEzCithbHdheXMg666DIDE1LTEyMzQtMTIzNS0yMworYWx3YXlzIOuuhCAxNS0xMjM0LTEyMzUtMjM1CithbHdheXMg666FIDE1LTEyMzQtMTIzNS0yMzYKK2Fsd2F5cyDrroYgMTUtMTIzNC0xMjM1LTI1NgorYWx3YXlzIOuuhyAxNS0xMjM0LTEyMzUtMzU2CithbHdheXMg666IIDE1LTEzNC0xMjM1CithbHdheXMg666JIDE1LTEzNC0xMjM1LTEKK2Fsd2F5cyDrroogMTUtMTM0LTEyMzUtMS0xCithbHdheXMg666LIDE1LTEzNC0xMjM1LTEtMworYWx3YXlzIOuujCAxNS0xMzQtMTIzNS0yNQorYWx3YXlzIOuujSAxNS0xMzQtMTIzNS0yNS0xMworYWx3YXlzIOuujiAxNS0xMzQtMTIzNS0yNS0zNTYKK2Fsd2F5cyDrro8gMTUtMTM0LTEyMzUtMzUKK2Fsd2F5cyDrrpAgMTUtMTM0LTEyMzUtMgorYWx3YXlzIOuukSAxNS0xMzQtMTIzNS0yLTEKK2Fsd2F5cyDrrpIgMTUtMTM0LTEyMzUtMi0yNgorYWx3YXlzIOuukyAxNS0xMzQtMTIzNS0yLTEyCithbHdheXMg666UIDE1LTEzNC0xMjM1LTItMworYWx3YXlzIOuulSAxNS0xMzQtMTIzNS0yLTIzNgorYWx3YXlzIOuuliAxNS0xMzQtMTIzNS0yLTI1NgorYWx3YXlzIOuulyAxNS0xMzQtMTIzNS0yLTM1NgorYWx3YXlzIOuumCAxNS0xMzQtMTIzNS0yNgorYWx3YXlzIOuumSAxNS0xMzQtMTIzNS0xMgorYWx3YXlzIOuumiAxNS0xMzQtMTIzNS0xMi0zCithbHdheXMg666bIDE1LTEzNC0xMjM1LTMKK2Fsd2F5cyDrrpwgMTUtMTM0LTEyMzUtMy0zCithbHdheXMg666dIDE1LTEzNC0xMjM1LTIzNTYKK2Fsd2F5cyDrrp4gMTUtMTM0LTEyMzUtMTMKK2Fsd2F5cyDrrp8gMTUtMTM0LTEyMzUtMjMKK2Fsd2F5cyDrrqAgMTUtMTM0LTEyMzUtMjM1CithbHdheXMg666hIDE1LTEzNC0xMjM1LTIzNgorYWx3YXlzIOuuoiAxNS0xMzQtMTIzNS0yNTYKK2Fsd2F5cyDrrqMgMTUtMTM0LTEyMzUtMzU2CithbHdheXMg666kIDE1LTE0NgorYWx3YXlzIOuupSAxNS0xNDYtMQorYWx3YXlzIOuupiAxNS0xNDYtMS0xCithbHdheXMg666nIDE1LTE0Ni0xLTMKK2Fsd2F5cyDrrqggMTUtMTQ2LTI1CithbHdheXMg666pIDE1LTE0Ni0yNS0xMworYWx3YXlzIOuuqiAxNS0xNDYtMjUtMzU2CithbHdheXMg666rIDE1LTE0Ni0zNQorYWx3YXlzIOuurCAxNS0xNDYtMgorYWx3YXlzIOuurSAxNS0xNDYtMi0xCithbHdheXMg666uIDE1LTE0Ni0yLTI2CithbHdheXMg666vIDE1LTE0Ni0yLTEyCithbHdheXMg666wIDE1LTE0Ni0yLTMKK2Fsd2F5cyDrrrEgMTUtMTQ2LTItMjM2CithbHdheXMg666yIDE1LTE0Ni0yLTI1NgorYWx3YXlzIOuusyAxNS0xNDYtMi0zNTYKK2Fsd2F5cyDrrrQgMTUtMTQ2LTI2CithbHdheXMg6661IDE1LTE0Ni0xMgorYWx3YXlzIOuutiAxNS0xNDYtMTItMworYWx3YXlzIOuutyAxNS0xNDYtMworYWx3YXlzIOuuuCAxNS0xNDYtMy0zCithbHdheXMg6665IDE1LTE0Ni0yMzU2CithbHdheXMg6666IDE1LTE0Ni0xMworYWx3YXlzIOuuuyAxNS0xNDYtMjMKK2Fsd2F5cyDrrrwgMTUtMTQ2LTIzNQorYWx3YXlzIOuuvSAxNS0xNDYtMjM2CithbHdheXMg666+IDE1LTE0Ni0yNTYKK2Fsd2F5cyDrrr8gMTUtMTQ2LTM1NgorYWx3YXlzIOuvgCAxNS0yNDYKK2Fsd2F5cyDrr4EgMTUtMjQ2LTEKK2Fsd2F5cyDrr4IgMTUtMjQ2LTEtMQorYWx3YXlzIOuvgyAxNS0yNDYtMS0zCithbHdheXMg66+EIDE1LTI0Ni0yNQorYWx3YXlzIOuvhSAxNS0yNDYtMjUtMTMKK2Fsd2F5cyDrr4YgMTUtMjQ2LTI1LTM1NgorYWx3YXlzIOuvhyAxNS0yNDYtMzUKK2Fsd2F5cyDrr4ggMTUtMjQ2LTIKK2Fsd2F5cyDrr4kgMTUtMjQ2LTItMQorYWx3YXlzIOuviiAxNS0yNDYtMi0yNgorYWx3YXlzIOuviyAxNS0yNDYtMi0xMgorYWx3YXlzIOuvjCAxNS0yNDYtMi0zCithbHdheXMg66+NIDE1LTI0Ni0yLTIzNgorYWx3YXlzIOuvjiAxNS0yNDYtMi0yNTYKK2Fsd2F5cyDrr48gMTUtMjQ2LTItMzU2CithbHdheXMg66+QIDE1LTI0Ni0yNgorYWx3YXlzIOuvkSAxNS0yNDYtMTIKK2Fsd2F5cyDrr5IgMTUtMjQ2LTEyLTMKK2Fsd2F5cyDrr5MgMTUtMjQ2LTMKK2Fsd2F5cyDrr5QgMTUtMjQ2LTMtMworYWx3YXlzIOuvlSAxNS0yNDYtMjM1NgorYWx3YXlzIOuvliAxNS0yNDYtMTMKK2Fsd2F5cyDrr5cgMTUtMjQ2LTIzCithbHdheXMg66+YIDE1LTI0Ni0yMzUKK2Fsd2F5cyDrr5kgMTUtMjQ2LTIzNgorYWx3YXlzIOuvmiAxNS0yNDYtMjU2CithbHdheXMg66+bIDE1LTI0Ni0zNTYKK2Fsd2F5cyDrr5wgMTUtMjQ1NgorYWx3YXlzIOuvnSAxNS0yNDU2LTEKK2Fsd2F5cyDrr54gMTUtMjQ1Ni0xLTEKK2Fsd2F5cyDrr58gMTUtMjQ1Ni0xLTMKK2Fsd2F5cyDrr6AgMTUtMjQ1Ni0yNQorYWx3YXlzIOuvoSAxNS0yNDU2LTI1LTEzCithbHdheXMg66+iIDE1LTI0NTYtMjUtMzU2CithbHdheXMg66+jIDE1LTI0NTYtMzUKK2Fsd2F5cyDrr6QgMTUtMjQ1Ni0yCithbHdheXMg66+lIDE1LTI0NTYtMi0xCithbHdheXMg66+mIDE1LTI0NTYtMi0yNgorYWx3YXlzIOuvpyAxNS0yNDU2LTItMTIKK2Fsd2F5cyDrr6ggMTUtMjQ1Ni0yLTMKK2Fsd2F5cyDrr6kgMTUtMjQ1Ni0yLTIzNgorYWx3YXlzIOuvqiAxNS0yNDU2LTItMjU2CithbHdheXMg66+rIDE1LTI0NTYtMi0zNTYKK2Fsd2F5cyDrr6wgMTUtMjQ1Ni0yNgorYWx3YXlzIOuvrSAxNS0yNDU2LTEyCithbHdheXMg66+uIDE1LTI0NTYtMTItMworYWx3YXlzIOuvryAxNS0yNDU2LTMKK2Fsd2F5cyDrr7AgMTUtMjQ1Ni0zLTMKK2Fsd2F5cyDrr7EgMTUtMjQ1Ni0yMzU2CithbHdheXMg66+yIDE1LTI0NTYtMTMKK2Fsd2F5cyDrr7MgMTUtMjQ1Ni0yMworYWx3YXlzIOuvtCAxNS0yNDU2LTIzNQorYWx3YXlzIOuvtSAxNS0yNDU2LTIzNgorYWx3YXlzIOuvtiAxNS0yNDU2LTI1NgorYWx3YXlzIOuvtyAxNS0yNDU2LTM1NgorYWx3YXlzIOuvuCAxNS0xMzUKK2Fsd2F5cyDrr7kgMTUtMTM1LTEKK2Fsd2F5cyDrr7ogMTUtMTM1LTEtMQorYWx3YXlzIOuvuyAxNS0xMzUtMS0zCithbHdheXMg66+8IDE1LTEzNS0yNQorYWx3YXlzIOuvvSAxNS0xMzUtMjUtMTMKK2Fsd2F5cyDrr74gMTUtMTM1LTI1LTM1NgorYWx3YXlzIOuvvyAxNS0xMzUtMzUKK2Fsd2F5cyDrsIAgMTUtMTM1LTIKK2Fsd2F5cyDrsIEgMTUtMTM1LTItMQorYWx3YXlzIOuwgiAxNS0xMzUtMi0yNgorYWx3YXlzIOuwgyAxNS0xMzUtMi0xMgorYWx3YXlzIOuwhCAxNS0xMzUtMi0zCithbHdheXMg67CFIDE1LTEzNS0yLTIzNgorYWx3YXlzIOuwhiAxNS0xMzUtMi0yNTYKK2Fsd2F5cyDrsIcgMTUtMTM1LTItMzU2CithbHdheXMg67CIIDE1LTEzNS0yNgorYWx3YXlzIOuwiSAxNS0xMzUtMTIKK2Fsd2F5cyDrsIogMTUtMTM1LTEyLTMKK2Fsd2F5cyDrsIsgMTUtMTM1LTMKK2Fsd2F5cyDrsIwgMTUtMTM1LTMtMworYWx3YXlzIOuwjSAxNS0xMzUtMjM1NgorYWx3YXlzIOuwjiAxNS0xMzUtMTMKK2Fsd2F5cyDrsI8gMTUtMTM1LTIzCithbHdheXMg67CQIDE1LTEzNS0yMzUKK2Fsd2F5cyDrsJEgMTUtMTM1LTIzNgorYWx3YXlzIOuwkiAxNS0xMzUtMjU2CithbHdheXMg67CTIDE1LTEzNS0zNTYKK2Fsd2F5cyDrsJQgNDUtMTI2CithbHdheXMg67CVIDQ1LTEyNi0xCithbHdheXMg67CWIDQ1LTEyNi0xLTEKK2Fsd2F5cyDrsJcgNDUtMTI2LTEtMworYWx3YXlzIOuwmCA0NS0xMjYtMjUKK2Fsd2F5cyDrsJkgNDUtMTI2LTI1LTEzCithbHdheXMg67CaIDQ1LTEyNi0yNS0zNTYKK2Fsd2F5cyDrsJsgNDUtMTI2LTM1CithbHdheXMg67CcIDQ1LTEyNi0yCithbHdheXMg67CdIDQ1LTEyNi0yLTEKK2Fsd2F5cyDrsJ4gNDUtMTI2LTItMjYKK2Fsd2F5cyDrsJ8gNDUtMTI2LTItMTIKK2Fsd2F5cyDrsKAgNDUtMTI2LTItMworYWx3YXlzIOuwoSA0NS0xMjYtMi0yMzYKK2Fsd2F5cyDrsKIgNDUtMTI2LTItMjU2CithbHdheXMg67CjIDQ1LTEyNi0yLTM1NgorYWx3YXlzIOuwpCA0NS0xMjYtMjYKK2Fsd2F5cyDrsKUgNDUtMTI2LTEyCithbHdheXMg67CmIDQ1LTEyNi0xMi0zCithbHdheXMg67CnIDQ1LTEyNi0zCithbHdheXMg67CoIDQ1LTEyNi0zLTMKK2Fsd2F5cyDrsKkgNDUtMTI2LTIzNTYKK2Fsd2F5cyDrsKogNDUtMTI2LTEzCithbHdheXMg67CrIDQ1LTEyNi0yMworYWx3YXlzIOuwrCA0NS0xMjYtMjM1CithbHdheXMg67CtIDQ1LTEyNi0yMzYKK2Fsd2F5cyDrsK4gNDUtMTI2LTI1NgorYWx3YXlzIOuwryA0NS0xMjYtMzU2CithbHdheXMg67CwIDQ1LTEyMzUKK2Fsd2F5cyDrsLEgNDUtMTIzNS0xCithbHdheXMg67CyIDQ1LTEyMzUtMS0xCithbHdheXMg67CzIDQ1LTEyMzUtMS0zCithbHdheXMg67C0IDQ1LTEyMzUtMjUKK2Fsd2F5cyDrsLUgNDUtMTIzNS0yNS0xMworYWx3YXlzIOuwtiA0NS0xMjM1LTI1LTM1NgorYWx3YXlzIOuwtyA0NS0xMjM1LTM1CithbHdheXMg67C4IDQ1LTEyMzUtMgorYWx3YXlzIOuwuSA0NS0xMjM1LTItMQorYWx3YXlzIOuwuiA0NS0xMjM1LTItMjYKK2Fsd2F5cyDrsLsgNDUtMTIzNS0yLTEyCithbHdheXMg67C8IDQ1LTEyMzUtMi0zCithbHdheXMg67C9IDQ1LTEyMzUtMi0yMzYKK2Fsd2F5cyDrsL4gNDUtMTIzNS0yLTI1NgorYWx3YXlzIOuwvyA0NS0xMjM1LTItMzU2CithbHdheXMg67GAIDQ1LTEyMzUtMjYKK2Fsd2F5cyDrsYEgNDUtMTIzNS0xMgorYWx3YXlzIOuxgiA0NS0xMjM1LTEyLTMKK2Fsd2F5cyDrsYMgNDUtMTIzNS0zCithbHdheXMg67GEIDQ1LTEyMzUtMy0zCithbHdheXMg67GFIDQ1LTEyMzUtMjM1NgorYWx3YXlzIOuxhiA0NS0xMjM1LTEzCithbHdheXMg67GHIDQ1LTEyMzUtMjMKK2Fsd2F5cyDrsYggNDUtMTIzNS0yMzUKK2Fsd2F5cyDrsYkgNDUtMTIzNS0yMzYKK2Fsd2F5cyDrsYogNDUtMTIzNS0yNTYKK2Fsd2F5cyDrsYsgNDUtMTIzNS0zNTYKK2Fsd2F5cyDrsYwgNDUtMzQ1CithbHdheXMg67GNIDQ1LTM0NS0xCithbHdheXMg67GOIDQ1LTM0NS0xLTEKK2Fsd2F5cyDrsY8gNDUtMzQ1LTEtMworYWx3YXlzIOuxkCA0NS0zNDUtMjUKK2Fsd2F5cyDrsZEgNDUtMzQ1LTI1LTEzCithbHdheXMg67GSIDQ1LTM0NS0yNS0zNTYKK2Fsd2F5cyDrsZMgNDUtMzQ1LTM1CithbHdheXMg67GUIDQ1LTM0NS0yCithbHdheXMg67GVIDQ1LTM0NS0yLTEKK2Fsd2F5cyDrsZYgNDUtMzQ1LTItMjYKK2Fsd2F5cyDrsZcgNDUtMzQ1LTItMTIKK2Fsd2F5cyDrsZggNDUtMzQ1LTItMworYWx3YXlzIOuxmSA0NS0zNDUtMi0yMzYKK2Fsd2F5cyDrsZogNDUtMzQ1LTItMjU2CithbHdheXMg67GbIDQ1LTM0NS0yLTM1NgorYWx3YXlzIOuxnCA0NS0zNDUtMjYKK2Fsd2F5cyDrsZ0gNDUtMzQ1LTEyCithbHdheXMg67GeIDQ1LTM0NS0xMi0zCithbHdheXMg67GfIDQ1LTM0NS0zCithbHdheXMg67GgIDQ1LTM0NS0zLTMKK2Fsd2F5cyDrsaEgNDUtMzQ1LTIzNTYKK2Fsd2F5cyDrsaIgNDUtMzQ1LTEzCithbHdheXMg67GjIDQ1LTM0NS0yMworYWx3YXlzIOuxpCA0NS0zNDUtMjM1CithbHdheXMg67GlIDQ1LTM0NS0yMzYKK2Fsd2F5cyDrsaYgNDUtMzQ1LTI1NgorYWx3YXlzIOuxpyA0NS0zNDUtMzU2CithbHdheXMg67GoIDQ1LTM0NS0xMjM1CithbHdheXMg67GpIDQ1LTM0NS0xMjM1LTEKK2Fsd2F5cyDrsaogNDUtMzQ1LTEyMzUtMS0xCithbHdheXMg67GrIDQ1LTM0NS0xMjM1LTEtMworYWx3YXlzIOuxrCA0NS0zNDUtMTIzNS0yNQorYWx3YXlzIOuxrSA0NS0zNDUtMTIzNS0yNS0xMworYWx3YXlzIOuxriA0NS0zNDUtMTIzNS0yNS0zNTYKK2Fsd2F5cyDrsa8gNDUtMzQ1LTEyMzUtMzUKK2Fsd2F5cyDrsbAgNDUtMzQ1LTEyMzUtMgorYWx3YXlzIOuxsSA0NS0zNDUtMTIzNS0yLTEKK2Fsd2F5cyDrsbIgNDUtMzQ1LTEyMzUtMi0yNgorYWx3YXlzIOuxsyA0NS0zNDUtMTIzNS0yLTEyCithbHdheXMg67G0IDQ1LTM0NS0xMjM1LTItMworYWx3YXlzIOuxtSA0NS0zNDUtMTIzNS0yLTIzNgorYWx3YXlzIOuxtiA0NS0zNDUtMTIzNS0yLTI1NgorYWx3YXlzIOuxtyA0NS0zNDUtMTIzNS0yLTM1NgorYWx3YXlzIOuxuCA0NS0zNDUtMTIzNS0yNgorYWx3YXlzIOuxuSA0NS0zNDUtMTIzNS0xMgorYWx3YXlzIOuxuiA0NS0zNDUtMTIzNS0xMi0zCithbHdheXMg67G7IDQ1LTM0NS0xMjM1LTMKK2Fsd2F5cyDrsbwgNDUtMzQ1LTEyMzUtMy0zCithbHdheXMg67G9IDQ1LTM0NS0xMjM1LTIzNTYKK2Fsd2F5cyDrsb4gNDUtMzQ1LTEyMzUtMTMKK2Fsd2F5cyDrsb8gNDUtMzQ1LTEyMzUtMjMKK2Fsd2F5cyDrsoAgNDUtMzQ1LTEyMzUtMjM1CithbHdheXMg67KBIDQ1LTM0NS0xMjM1LTIzNgorYWx3YXlzIOuygiA0NS0zNDUtMTIzNS0yNTYKK2Fsd2F5cyDrsoMgNDUtMzQ1LTEyMzUtMzU2CithbHdheXMg67KEIDQ1LTIzNAorYWx3YXlzIOuyhSA0NS0yMzQtMQorYWx3YXlzIOuyhiA0NS0yMzQtMS0xCithbHdheXMg67KHIDQ1LTIzNC0xLTMKK2Fsd2F5cyDrsoggNDUtMjM0LTI1CithbHdheXMg67KJIDQ1LTIzNC0yNS0xMworYWx3YXlzIOuyiiA0NS0yMzQtMjUtMzU2CithbHdheXMg67KLIDQ1LTIzNC0zNQorYWx3YXlzIOuyjCA0NS0yMzQtMgorYWx3YXlzIOuyjSA0NS0yMzQtMi0xCithbHdheXMg67KOIDQ1LTIzNC0yLTI2CithbHdheXMg67KPIDQ1LTIzNC0yLTEyCithbHdheXMg67KQIDQ1LTIzNC0yLTMKK2Fsd2F5cyDrspEgNDUtMjM0LTItMjM2CithbHdheXMg67KSIDQ1LTIzNC0yLTI1NgorYWx3YXlzIOuykyA0NS0yMzQtMi0zNTYKK2Fsd2F5cyDrspQgNDUtMjM0LTI2CithbHdheXMg67KVIDQ1LTIzNC0xMgorYWx3YXlzIOuyliA0NS0yMzQtMTItMworYWx3YXlzIOuylyA0NS0yMzQtMworYWx3YXlzIOuymCA0NS0yMzQtMy0zCithbHdheXMg67KZIDQ1LTIzNC0yMzU2CithbHdheXMg67KaIDQ1LTIzNC0xMworYWx3YXlzIOuymyA0NS0yMzQtMjMKK2Fsd2F5cyDrspwgNDUtMjM0LTIzNQorYWx3YXlzIOuynSA0NS0yMzQtMjM2CithbHdheXMg67KeIDQ1LTIzNC0yNTYKK2Fsd2F5cyDrsp8gNDUtMjM0LTM1NgorYWx3YXlzIOuyoCA0NS0xMzQ1CithbHdheXMg67KhIDQ1LTEzNDUtMQorYWx3YXlzIOuyoiA0NS0xMzQ1LTEtMQorYWx3YXlzIOuyoyA0NS0xMzQ1LTEtMworYWx3YXlzIOuypCA0NS0xMzQ1LTI1CithbHdheXMg67KlIDQ1LTEzNDUtMjUtMTMKK2Fsd2F5cyDrsqYgNDUtMTM0NS0yNS0zNTYKK2Fsd2F5cyDrsqcgNDUtMTM0NS0zNQorYWx3YXlzIOuyqCA0NS0xMzQ1LTIKK2Fsd2F5cyDrsqkgNDUtMTM0NS0yLTEKK2Fsd2F5cyDrsqogNDUtMTM0NS0yLTI2CithbHdheXMg67KrIDQ1LTEzNDUtMi0xMgorYWx3YXlzIOuyrCA0NS0xMzQ1LTItMworYWx3YXlzIOuyrSA0NS0xMzQ1LTItMjM2CithbHdheXMg67KuIDQ1LTEzNDUtMi0yNTYKK2Fsd2F5cyDrsq8gNDUtMTM0NS0yLTM1NgorYWx3YXlzIOuysCA0NS0xMzQ1LTI2CithbHdheXMg67KxIDQ1LTEzNDUtMTIKK2Fsd2F5cyDrsrIgNDUtMTM0NS0xMi0zCithbHdheXMg67KzIDQ1LTEzNDUtMworYWx3YXlzIOuytCA0NS0xMzQ1LTMtMworYWx3YXlzIOuytSA0NS0xMzQ1LTIzNTYKK2Fsd2F5cyDrsrYgNDUtMTM0NS0xMworYWx3YXlzIOuytyA0NS0xMzQ1LTIzCithbHdheXMg67K4IDQ1LTEzNDUtMjM1CithbHdheXMg67K5IDQ1LTEzNDUtMjM2CithbHdheXMg67K6IDQ1LTEzNDUtMjU2CithbHdheXMg67K7IDQ1LTEzNDUtMzU2CithbHdheXMg67K8IDQ1LTE1NgorYWx3YXlzIOuyvSA0NS0xNTYtMQorYWx3YXlzIOuyviA0NS0xNTYtMS0xCithbHdheXMg67K/IDQ1LTE1Ni0xLTMKK2Fsd2F5cyDrs4AgNDUtMTU2LTI1CithbHdheXMg67OBIDQ1LTE1Ni0yNS0xMworYWx3YXlzIOuzgiA0NS0xNTYtMjUtMzU2CithbHdheXMg67ODIDQ1LTE1Ni0zNQorYWx3YXlzIOuzhCA0NS0xNTYtMgorYWx3YXlzIOuzhSA0NS0xNTYtMi0xCithbHdheXMg67OGIDQ1LTE1Ni0yLTI2CithbHdheXMg67OHIDQ1LTE1Ni0yLTEyCithbHdheXMg67OIIDQ1LTE1Ni0yLTMKK2Fsd2F5cyDrs4kgNDUtMTU2LTItMjM2CithbHdheXMg67OKIDQ1LTE1Ni0yLTI1NgorYWx3YXlzIOuziyA0NS0xNTYtMi0zNTYKK2Fsd2F5cyDrs4wgNDUtMTU2LTI2CithbHdheXMg67ONIDQ1LTE1Ni0xMgorYWx3YXlzIOuzjiA0NS0xNTYtMTItMworYWx3YXlzIOuzjyA0NS0xNTYtMworYWx3YXlzIOuzkCA0NS0xNTYtMy0zCithbHdheXMg67ORIDQ1LTE1Ni0yMzU2CithbHdheXMg67OSIDQ1LTE1Ni0xMworYWx3YXlzIOuzkyA0NS0xNTYtMjMKK2Fsd2F5cyDrs5QgNDUtMTU2LTIzNQorYWx3YXlzIOuzlSA0NS0xNTYtMjM2CithbHdheXMg67OWIDQ1LTE1Ni0yNTYKK2Fsd2F5cyDrs5cgNDUtMTU2LTM1NgorYWx3YXlzIOuzmCA0NS0zNAorYWx3YXlzIOuzmSA0NS0zNC0xCithbHdheXMg67OaIDQ1LTM0LTEtMQorYWx3YXlzIOuzmyA0NS0zNC0xLTMKK2Fsd2F5cyDrs5wgNDUtMzQtMjUKK2Fsd2F5cyDrs50gNDUtMzQtMjUtMTMKK2Fsd2F5cyDrs54gNDUtMzQtMjUtMzU2CithbHdheXMg67OfIDQ1LTM0LTM1CithbHdheXMg67OgIDQ1LTM0LTIKK2Fsd2F5cyDrs6EgNDUtMzQtMi0xCithbHdheXMg67OiIDQ1LTM0LTItMjYKK2Fsd2F5cyDrs6MgNDUtMzQtMi0xMgorYWx3YXlzIOuzpCA0NS0zNC0yLTMKK2Fsd2F5cyDrs6UgNDUtMzQtMi0yMzYKK2Fsd2F5cyDrs6YgNDUtMzQtMi0yNTYKK2Fsd2F5cyDrs6cgNDUtMzQtMi0zNTYKK2Fsd2F5cyDrs6ggNDUtMzQtMjYKK2Fsd2F5cyDrs6kgNDUtMzQtMTIKK2Fsd2F5cyDrs6ogNDUtMzQtMTItMworYWx3YXlzIOuzqyA0NS0zNC0zCithbHdheXMg67OsIDQ1LTM0LTMtMworYWx3YXlzIOuzrSA0NS0zNC0yMzU2CithbHdheXMg67OuIDQ1LTM0LTEzCithbHdheXMg67OvIDQ1LTM0LTIzCithbHdheXMg67OwIDQ1LTM0LTIzNQorYWx3YXlzIOuzsSA0NS0zNC0yMzYKK2Fsd2F5cyDrs7IgNDUtMzQtMjU2CithbHdheXMg67OzIDQ1LTM0LTM1NgorYWx3YXlzIOuztCA0NS0xMzYKK2Fsd2F5cyDrs7UgNDUtMTM2LTEKK2Fsd2F5cyDrs7YgNDUtMTM2LTEtMQorYWx3YXlzIOuztyA0NS0xMzYtMS0zCithbHdheXMg67O4IDQ1LTEzNi0yNQorYWx3YXlzIOuzuSA0NS0xMzYtMjUtMTMKK2Fsd2F5cyDrs7ogNDUtMTM2LTI1LTM1NgorYWx3YXlzIOuzuyA0NS0xMzYtMzUKK2Fsd2F5cyDrs7wgNDUtMTM2LTIKK2Fsd2F5cyDrs70gNDUtMTM2LTItMQorYWx3YXlzIOuzviA0NS0xMzYtMi0yNgorYWx3YXlzIOuzvyA0NS0xMzYtMi0xMgorYWx3YXlzIOu0gCA0NS0xMzYtMi0zCithbHdheXMg67SBIDQ1LTEzNi0yLTIzNgorYWx3YXlzIOu0giA0NS0xMzYtMi0yNTYKK2Fsd2F5cyDrtIMgNDUtMTM2LTItMzU2CithbHdheXMg67SEIDQ1LTEzNi0yNgorYWx3YXlzIOu0hSA0NS0xMzYtMTIKK2Fsd2F5cyDrtIYgNDUtMTM2LTEyLTMKK2Fsd2F5cyDrtIcgNDUtMTM2LTMKK2Fsd2F5cyDrtIggNDUtMTM2LTMtMworYWx3YXlzIOu0iSA0NS0xMzYtMjM1NgorYWx3YXlzIOu0iiA0NS0xMzYtMTMKK2Fsd2F5cyDrtIsgNDUtMTM2LTIzCithbHdheXMg67SMIDQ1LTEzNi0yMzUKK2Fsd2F5cyDrtI0gNDUtMTM2LTIzNgorYWx3YXlzIOu0jiA0NS0xMzYtMjU2CithbHdheXMg67SPIDQ1LTEzNi0zNTYKK2Fsd2F5cyDrtJAgNDUtMTIzNgorYWx3YXlzIOu0kSA0NS0xMjM2LTEKK2Fsd2F5cyDrtJIgNDUtMTIzNi0xLTEKK2Fsd2F5cyDrtJMgNDUtMTIzNi0xLTMKK2Fsd2F5cyDrtJQgNDUtMTIzNi0yNQorYWx3YXlzIOu0lSA0NS0xMjM2LTI1LTEzCithbHdheXMg67SWIDQ1LTEyMzYtMjUtMzU2CithbHdheXMg67SXIDQ1LTEyMzYtMzUKK2Fsd2F5cyDrtJggNDUtMTIzNi0yCithbHdheXMg67SZIDQ1LTEyMzYtMi0xCithbHdheXMg67SaIDQ1LTEyMzYtMi0yNgorYWx3YXlzIOu0myA0NS0xMjM2LTItMTIKK2Fsd2F5cyDrtJwgNDUtMTIzNi0yLTMKK2Fsd2F5cyDrtJ0gNDUtMTIzNi0yLTIzNgorYWx3YXlzIOu0niA0NS0xMjM2LTItMjU2CithbHdheXMg67SfIDQ1LTEyMzYtMi0zNTYKK2Fsd2F5cyDrtKAgNDUtMTIzNi0yNgorYWx3YXlzIOu0oSA0NS0xMjM2LTEyCithbHdheXMg67SiIDQ1LTEyMzYtMTItMworYWx3YXlzIOu0oyA0NS0xMjM2LTMKK2Fsd2F5cyDrtKQgNDUtMTIzNi0zLTMKK2Fsd2F5cyDrtKUgNDUtMTIzNi0yMzU2CithbHdheXMg67SmIDQ1LTEyMzYtMTMKK2Fsd2F5cyDrtKcgNDUtMTIzNi0yMworYWx3YXlzIOu0qCA0NS0xMjM2LTIzNQorYWx3YXlzIOu0qSA0NS0xMjM2LTIzNgorYWx3YXlzIOu0qiA0NS0xMjM2LTI1NgorYWx3YXlzIOu0qyA0NS0xMjM2LTM1NgorYWx3YXlzIOu0rCA0NS0xMjM2LTEyMzUKK2Fsd2F5cyDrtK0gNDUtMTIzNi0xMjM1LTEKK2Fsd2F5cyDrtK4gNDUtMTIzNi0xMjM1LTEtMQorYWx3YXlzIOu0ryA0NS0xMjM2LTEyMzUtMS0zCithbHdheXMg67SwIDQ1LTEyMzYtMTIzNS0yNQorYWx3YXlzIOu0sSA0NS0xMjM2LTEyMzUtMjUtMTMKK2Fsd2F5cyDrtLIgNDUtMTIzNi0xMjM1LTI1LTM1NgorYWx3YXlzIOu0syA0NS0xMjM2LTEyMzUtMzUKK2Fsd2F5cyDrtLQgNDUtMTIzNi0xMjM1LTIKK2Fsd2F5cyDrtLUgNDUtMTIzNi0xMjM1LTItMQorYWx3YXlzIOu0tiA0NS0xMjM2LTEyMzUtMi0yNgorYWx3YXlzIOu0tyA0NS0xMjM2LTEyMzUtMi0xMgorYWx3YXlzIOu0uCA0NS0xMjM2LTEyMzUtMi0zCithbHdheXMg67S5IDQ1LTEyMzYtMTIzNS0yLTIzNgorYWx3YXlzIOu0uiA0NS0xMjM2LTEyMzUtMi0yNTYKK2Fsd2F5cyDrtLsgNDUtMTIzNi0xMjM1LTItMzU2CithbHdheXMg67S8IDQ1LTEyMzYtMTIzNS0yNgorYWx3YXlzIOu0vSA0NS0xMjM2LTEyMzUtMTIKK2Fsd2F5cyDrtL4gNDUtMTIzNi0xMjM1LTEyLTMKK2Fsd2F5cyDrtL8gNDUtMTIzNi0xMjM1LTMKK2Fsd2F5cyDrtYAgNDUtMTIzNi0xMjM1LTMtMworYWx3YXlzIOu1gSA0NS0xMjM2LTEyMzUtMjM1NgorYWx3YXlzIOu1giA0NS0xMjM2LTEyMzUtMTMKK2Fsd2F5cyDrtYMgNDUtMTIzNi0xMjM1LTIzCithbHdheXMg67WEIDQ1LTEyMzYtMTIzNS0yMzUKK2Fsd2F5cyDrtYUgNDUtMTIzNi0xMjM1LTIzNgorYWx3YXlzIOu1hiA0NS0xMjM2LTEyMzUtMjU2CithbHdheXMg67WHIDQ1LTEyMzYtMTIzNS0zNTYKK2Fsd2F5cyDrtYggNDUtMTM0NTYKK2Fsd2F5cyDrtYkgNDUtMTM0NTYtMQorYWx3YXlzIOu1iiA0NS0xMzQ1Ni0xLTEKK2Fsd2F5cyDrtYsgNDUtMTM0NTYtMS0zCithbHdheXMg67WMIDQ1LTEzNDU2LTI1CithbHdheXMg67WNIDQ1LTEzNDU2LTI1LTEzCithbHdheXMg67WOIDQ1LTEzNDU2LTI1LTM1NgorYWx3YXlzIOu1jyA0NS0xMzQ1Ni0zNQorYWx3YXlzIOu1kCA0NS0xMzQ1Ni0yCithbHdheXMg67WRIDQ1LTEzNDU2LTItMQorYWx3YXlzIOu1kiA0NS0xMzQ1Ni0yLTI2CithbHdheXMg67WTIDQ1LTEzNDU2LTItMTIKK2Fsd2F5cyDrtZQgNDUtMTM0NTYtMi0zCithbHdheXMg67WVIDQ1LTEzNDU2LTItMjM2CithbHdheXMg67WWIDQ1LTEzNDU2LTItMjU2CithbHdheXMg67WXIDQ1LTEzNDU2LTItMzU2CithbHdheXMg67WYIDQ1LTEzNDU2LTI2CithbHdheXMg67WZIDQ1LTEzNDU2LTEyCithbHdheXMg67WaIDQ1LTEzNDU2LTEyLTMKK2Fsd2F5cyDrtZsgNDUtMTM0NTYtMworYWx3YXlzIOu1nCA0NS0xMzQ1Ni0zLTMKK2Fsd2F5cyDrtZ0gNDUtMTM0NTYtMjM1NgorYWx3YXlzIOu1niA0NS0xMzQ1Ni0xMworYWx3YXlzIOu1nyA0NS0xMzQ1Ni0yMworYWx3YXlzIOu1oCA0NS0xMzQ1Ni0yMzUKK2Fsd2F5cyDrtaEgNDUtMTM0NTYtMjM2CithbHdheXMg67WiIDQ1LTEzNDU2LTI1NgorYWx3YXlzIOu1oyA0NS0xMzQ1Ni0zNTYKK2Fsd2F5cyDrtaQgNDUtMzQ2CithbHdheXMg67WlIDQ1LTM0Ni0xCithbHdheXMg67WmIDQ1LTM0Ni0xLTEKK2Fsd2F5cyDrtacgNDUtMzQ2LTEtMworYWx3YXlzIOu1qCA0NS0zNDYtMjUKK2Fsd2F5cyDrtakgNDUtMzQ2LTI1LTEzCithbHdheXMg67WqIDQ1LTM0Ni0yNS0zNTYKK2Fsd2F5cyDrtasgNDUtMzQ2LTM1CithbHdheXMg67WsIDQ1LTM0Ni0yCithbHdheXMg67WtIDQ1LTM0Ni0yLTEKK2Fsd2F5cyDrta4gNDUtMzQ2LTItMjYKK2Fsd2F5cyDrta8gNDUtMzQ2LTItMTIKK2Fsd2F5cyDrtbAgNDUtMzQ2LTItMworYWx3YXlzIOu1sSA0NS0zNDYtMi0yMzYKK2Fsd2F5cyDrtbIgNDUtMzQ2LTItMjU2CithbHdheXMg67WzIDQ1LTM0Ni0yLTM1NgorYWx3YXlzIOu1tCA0NS0zNDYtMjYKK2Fsd2F5cyDrtbUgNDUtMzQ2LTEyCithbHdheXMg67W2IDQ1LTM0Ni0xMi0zCithbHdheXMg67W3IDQ1LTM0Ni0zCithbHdheXMg67W4IDQ1LTM0Ni0zLTMKK2Fsd2F5cyDrtbkgNDUtMzQ2LTIzNTYKK2Fsd2F5cyDrtbogNDUtMzQ2LTEzCithbHdheXMg67W7IDQ1LTM0Ni0yMworYWx3YXlzIOu1vCA0NS0zNDYtMjM1CithbHdheXMg67W9IDQ1LTM0Ni0yMzYKK2Fsd2F5cyDrtb4gNDUtMzQ2LTI1NgorYWx3YXlzIOu1vyA0NS0zNDYtMzU2CithbHdheXMg67aAIDQ1LTEzNAorYWx3YXlzIOu2gSA0NS0xMzQtMQorYWx3YXlzIOu2giA0NS0xMzQtMS0xCithbHdheXMg67aDIDQ1LTEzNC0xLTMKK2Fsd2F5cyDrtoQgNDUtMTM0LTI1CithbHdheXMg67aFIDQ1LTEzNC0yNS0xMworYWx3YXlzIOu2hiA0NS0xMzQtMjUtMzU2CithbHdheXMg67aHIDQ1LTEzNC0zNQorYWx3YXlzIOu2iCA0NS0xMzQtMgorYWx3YXlzIOu2iSA0NS0xMzQtMi0xCithbHdheXMg67aKIDQ1LTEzNC0yLTI2CithbHdheXMg67aLIDQ1LTEzNC0yLTEyCithbHdheXMg67aMIDQ1LTEzNC0yLTMKK2Fsd2F5cyDrto0gNDUtMTM0LTItMjM2CithbHdheXMg67aOIDQ1LTEzNC0yLTI1NgorYWx3YXlzIOu2jyA0NS0xMzQtMi0zNTYKK2Fsd2F5cyDrtpAgNDUtMTM0LTI2CithbHdheXMg67aRIDQ1LTEzNC0xMgorYWx3YXlzIOu2kiA0NS0xMzQtMTItMworYWx3YXlzIOu2kyA0NS0xMzQtMworYWx3YXlzIOu2lCA0NS0xMzQtMy0zCithbHdheXMg67aVIDQ1LTEzNC0yMzU2CithbHdheXMg67aWIDQ1LTEzNC0xMworYWx3YXlzIOu2lyA0NS0xMzQtMjMKK2Fsd2F5cyDrtpggNDUtMTM0LTIzNQorYWx3YXlzIOu2mSA0NS0xMzQtMjM2CithbHdheXMg67aaIDQ1LTEzNC0yNTYKK2Fsd2F5cyDrtpsgNDUtMTM0LTM1NgorYWx3YXlzIOu2nCA0NS0xMjM0CithbHdheXMg67adIDQ1LTEyMzQtMQorYWx3YXlzIOu2niA0NS0xMjM0LTEtMQorYWx3YXlzIOu2nyA0NS0xMjM0LTEtMworYWx3YXlzIOu2oCA0NS0xMjM0LTI1CithbHdheXMg67ahIDQ1LTEyMzQtMjUtMTMKK2Fsd2F5cyDrtqIgNDUtMTIzNC0yNS0zNTYKK2Fsd2F5cyDrtqMgNDUtMTIzNC0zNQorYWx3YXlzIOu2pCA0NS0xMjM0LTIKK2Fsd2F5cyDrtqUgNDUtMTIzNC0yLTEKK2Fsd2F5cyDrtqYgNDUtMTIzNC0yLTI2CithbHdheXMg67anIDQ1LTEyMzQtMi0xMgorYWx3YXlzIOu2qCA0NS0xMjM0LTItMworYWx3YXlzIOu2qSA0NS0xMjM0LTItMjM2CithbHdheXMg67aqIDQ1LTEyMzQtMi0yNTYKK2Fsd2F5cyDrtqsgNDUtMTIzNC0yLTM1NgorYWx3YXlzIOu2rCA0NS0xMjM0LTI2CithbHdheXMg67atIDQ1LTEyMzQtMTIKK2Fsd2F5cyDrtq4gNDUtMTIzNC0xMi0zCithbHdheXMg67avIDQ1LTEyMzQtMworYWx3YXlzIOu2sCA0NS0xMjM0LTMtMworYWx3YXlzIOu2sSA0NS0xMjM0LTIzNTYKK2Fsd2F5cyDrtrIgNDUtMTIzNC0xMworYWx3YXlzIOu2syA0NS0xMjM0LTIzCithbHdheXMg67a0IDQ1LTEyMzQtMjM1CithbHdheXMg67a1IDQ1LTEyMzQtMjM2CithbHdheXMg67a2IDQ1LTEyMzQtMjU2CithbHdheXMg67a3IDQ1LTEyMzQtMzU2CithbHdheXMg67a4IDQ1LTEyMzQtMTIzNQorYWx3YXlzIOu2uSA0NS0xMjM0LTEyMzUtMQorYWx3YXlzIOu2uiA0NS0xMjM0LTEyMzUtMS0xCithbHdheXMg67a7IDQ1LTEyMzQtMTIzNS0xLTMKK2Fsd2F5cyDrtrwgNDUtMTIzNC0xMjM1LTI1CithbHdheXMg67a9IDQ1LTEyMzQtMTIzNS0yNS0xMworYWx3YXlzIOu2viA0NS0xMjM0LTEyMzUtMjUtMzU2CithbHdheXMg67a/IDQ1LTEyMzQtMTIzNS0zNQorYWx3YXlzIOu3gCA0NS0xMjM0LTEyMzUtMgorYWx3YXlzIOu3gSA0NS0xMjM0LTEyMzUtMi0xCithbHdheXMg67eCIDQ1LTEyMzQtMTIzNS0yLTI2CithbHdheXMg67eDIDQ1LTEyMzQtMTIzNS0yLTEyCithbHdheXMg67eEIDQ1LTEyMzQtMTIzNS0yLTMKK2Fsd2F5cyDrt4UgNDUtMTIzNC0xMjM1LTItMjM2CithbHdheXMg67eGIDQ1LTEyMzQtMTIzNS0yLTI1NgorYWx3YXlzIOu3hyA0NS0xMjM0LTEyMzUtMi0zNTYKK2Fsd2F5cyDrt4ggNDUtMTIzNC0xMjM1LTI2CithbHdheXMg67eJIDQ1LTEyMzQtMTIzNS0xMgorYWx3YXlzIOu3iiA0NS0xMjM0LTEyMzUtMTItMworYWx3YXlzIOu3iyA0NS0xMjM0LTEyMzUtMworYWx3YXlzIOu3jCA0NS0xMjM0LTEyMzUtMy0zCithbHdheXMg67eNIDQ1LTEyMzQtMTIzNS0yMzU2CithbHdheXMg67eOIDQ1LTEyMzQtMTIzNS0xMworYWx3YXlzIOu3jyA0NS0xMjM0LTEyMzUtMjMKK2Fsd2F5cyDrt5AgNDUtMTIzNC0xMjM1LTIzNQorYWx3YXlzIOu3kSA0NS0xMjM0LTEyMzUtMjM2CithbHdheXMg67eSIDQ1LTEyMzQtMTIzNS0yNTYKK2Fsd2F5cyDrt5MgNDUtMTIzNC0xMjM1LTM1NgorYWx3YXlzIOu3lCA0NS0xMzQtMTIzNQorYWx3YXlzIOu3lSA0NS0xMzQtMTIzNS0xCithbHdheXMg67eWIDQ1LTEzNC0xMjM1LTEtMQorYWx3YXlzIOu3lyA0NS0xMzQtMTIzNS0xLTMKK2Fsd2F5cyDrt5ggNDUtMTM0LTEyMzUtMjUKK2Fsd2F5cyDrt5kgNDUtMTM0LTEyMzUtMjUtMTMKK2Fsd2F5cyDrt5ogNDUtMTM0LTEyMzUtMjUtMzU2CithbHdheXMg67ebIDQ1LTEzNC0xMjM1LTM1CithbHdheXMg67ecIDQ1LTEzNC0xMjM1LTIKK2Fsd2F5cyDrt50gNDUtMTM0LTEyMzUtMi0xCithbHdheXMg67eeIDQ1LTEzNC0xMjM1LTItMjYKK2Fsd2F5cyDrt58gNDUtMTM0LTEyMzUtMi0xMgorYWx3YXlzIOu3oCA0NS0xMzQtMTIzNS0yLTMKK2Fsd2F5cyDrt6EgNDUtMTM0LTEyMzUtMi0yMzYKK2Fsd2F5cyDrt6IgNDUtMTM0LTEyMzUtMi0yNTYKK2Fsd2F5cyDrt6MgNDUtMTM0LTEyMzUtMi0zNTYKK2Fsd2F5cyDrt6QgNDUtMTM0LTEyMzUtMjYKK2Fsd2F5cyDrt6UgNDUtMTM0LTEyMzUtMTIKK2Fsd2F5cyDrt6YgNDUtMTM0LTEyMzUtMTItMworYWx3YXlzIOu3pyA0NS0xMzQtMTIzNS0zCithbHdheXMg67eoIDQ1LTEzNC0xMjM1LTMtMworYWx3YXlzIOu3qSA0NS0xMzQtMTIzNS0yMzU2CithbHdheXMg67eqIDQ1LTEzNC0xMjM1LTEzCithbHdheXMg67erIDQ1LTEzNC0xMjM1LTIzCithbHdheXMg67esIDQ1LTEzNC0xMjM1LTIzNQorYWx3YXlzIOu3rSA0NS0xMzQtMTIzNS0yMzYKK2Fsd2F5cyDrt64gNDUtMTM0LTEyMzUtMjU2CithbHdheXMg67evIDQ1LTEzNC0xMjM1LTM1NgorYWx3YXlzIOu3sCA0NS0xNDYKK2Fsd2F5cyDrt7EgNDUtMTQ2LTEKK2Fsd2F5cyDrt7IgNDUtMTQ2LTEtMQorYWx3YXlzIOu3syA0NS0xNDYtMS0zCithbHdheXMg67e0IDQ1LTE0Ni0yNQorYWx3YXlzIOu3tSA0NS0xNDYtMjUtMTMKK2Fsd2F5cyDrt7YgNDUtMTQ2LTI1LTM1NgorYWx3YXlzIOu3tyA0NS0xNDYtMzUKK2Fsd2F5cyDrt7ggNDUtMTQ2LTIKK2Fsd2F5cyDrt7kgNDUtMTQ2LTItMQorYWx3YXlzIOu3uiA0NS0xNDYtMi0yNgorYWx3YXlzIOu3uyA0NS0xNDYtMi0xMgorYWx3YXlzIOu3vCA0NS0xNDYtMi0zCithbHdheXMg67e9IDQ1LTE0Ni0yLTIzNgorYWx3YXlzIOu3viA0NS0xNDYtMi0yNTYKK2Fsd2F5cyDrt78gNDUtMTQ2LTItMzU2CithbHdheXMg67iAIDQ1LTE0Ni0yNgorYWx3YXlzIOu4gSA0NS0xNDYtMTIKK2Fsd2F5cyDruIIgNDUtMTQ2LTEyLTMKK2Fsd2F5cyDruIMgNDUtMTQ2LTMKK2Fsd2F5cyDruIQgNDUtMTQ2LTMtMworYWx3YXlzIOu4hSA0NS0xNDYtMjM1NgorYWx3YXlzIOu4hiA0NS0xNDYtMTMKK2Fsd2F5cyDruIcgNDUtMTQ2LTIzCithbHdheXMg67iIIDQ1LTE0Ni0yMzUKK2Fsd2F5cyDruIkgNDUtMTQ2LTIzNgorYWx3YXlzIOu4iiA0NS0xNDYtMjU2CithbHdheXMg67iLIDQ1LTE0Ni0zNTYKK2Fsd2F5cyDruIwgNDUtMjQ2CithbHdheXMg67iNIDQ1LTI0Ni0xCithbHdheXMg67iOIDQ1LTI0Ni0xLTEKK2Fsd2F5cyDruI8gNDUtMjQ2LTEtMworYWx3YXlzIOu4kCA0NS0yNDYtMjUKK2Fsd2F5cyDruJEgNDUtMjQ2LTI1LTEzCithbHdheXMg67iSIDQ1LTI0Ni0yNS0zNTYKK2Fsd2F5cyDruJMgNDUtMjQ2LTM1CithbHdheXMg67iUIDQ1LTI0Ni0yCithbHdheXMg67iVIDQ1LTI0Ni0yLTEKK2Fsd2F5cyDruJYgNDUtMjQ2LTItMjYKK2Fsd2F5cyDruJcgNDUtMjQ2LTItMTIKK2Fsd2F5cyDruJggNDUtMjQ2LTItMworYWx3YXlzIOu4mSA0NS0yNDYtMi0yMzYKK2Fsd2F5cyDruJogNDUtMjQ2LTItMjU2CithbHdheXMg67ibIDQ1LTI0Ni0yLTM1NgorYWx3YXlzIOu4nCA0NS0yNDYtMjYKK2Fsd2F5cyDruJ0gNDUtMjQ2LTEyCithbHdheXMg67ieIDQ1LTI0Ni0xMi0zCithbHdheXMg67ifIDQ1LTI0Ni0zCithbHdheXMg67igIDQ1LTI0Ni0zLTMKK2Fsd2F5cyDruKEgNDUtMjQ2LTIzNTYKK2Fsd2F5cyDruKIgNDUtMjQ2LTEzCithbHdheXMg67ijIDQ1LTI0Ni0yMworYWx3YXlzIOu4pCA0NS0yNDYtMjM1CithbHdheXMg67ilIDQ1LTI0Ni0yMzYKK2Fsd2F5cyDruKYgNDUtMjQ2LTI1NgorYWx3YXlzIOu4pyA0NS0yNDYtMzU2CithbHdheXMg67ioIDQ1LTI0NTYKK2Fsd2F5cyDruKkgNDUtMjQ1Ni0xCithbHdheXMg67iqIDQ1LTI0NTYtMS0xCithbHdheXMg67irIDQ1LTI0NTYtMS0zCithbHdheXMg67isIDQ1LTI0NTYtMjUKK2Fsd2F5cyDruK0gNDUtMjQ1Ni0yNS0xMworYWx3YXlzIOu4riA0NS0yNDU2LTI1LTM1NgorYWx3YXlzIOu4ryA0NS0yNDU2LTM1CithbHdheXMg67iwIDQ1LTI0NTYtMgorYWx3YXlzIOu4sSA0NS0yNDU2LTItMQorYWx3YXlzIOu4siA0NS0yNDU2LTItMjYKK2Fsd2F5cyDruLMgNDUtMjQ1Ni0yLTEyCithbHdheXMg67i0IDQ1LTI0NTYtMi0zCithbHdheXMg67i1IDQ1LTI0NTYtMi0yMzYKK2Fsd2F5cyDruLYgNDUtMjQ1Ni0yLTI1NgorYWx3YXlzIOu4tyA0NS0yNDU2LTItMzU2CithbHdheXMg67i4IDQ1LTI0NTYtMjYKK2Fsd2F5cyDruLkgNDUtMjQ1Ni0xMgorYWx3YXlzIOu4uiA0NS0yNDU2LTEyLTMKK2Fsd2F5cyDruLsgNDUtMjQ1Ni0zCithbHdheXMg67i8IDQ1LTI0NTYtMy0zCithbHdheXMg67i9IDQ1LTI0NTYtMjM1NgorYWx3YXlzIOu4viA0NS0yNDU2LTEzCithbHdheXMg67i/IDQ1LTI0NTYtMjMKK2Fsd2F5cyDruYAgNDUtMjQ1Ni0yMzUKK2Fsd2F5cyDruYEgNDUtMjQ1Ni0yMzYKK2Fsd2F5cyDruYIgNDUtMjQ1Ni0yNTYKK2Fsd2F5cyDruYMgNDUtMjQ1Ni0zNTYKK2Fsd2F5cyDruYQgNDUtMTM1CithbHdheXMg67mFIDQ1LTEzNS0xCithbHdheXMg67mGIDQ1LTEzNS0xLTEKK2Fsd2F5cyDruYcgNDUtMTM1LTEtMworYWx3YXlzIOu5iCA0NS0xMzUtMjUKK2Fsd2F5cyDruYkgNDUtMTM1LTI1LTEzCithbHdheXMg67mKIDQ1LTEzNS0yNS0zNTYKK2Fsd2F5cyDruYsgNDUtMTM1LTM1CithbHdheXMg67mMIDQ1LTEzNS0yCithbHdheXMg67mNIDQ1LTEzNS0yLTEKK2Fsd2F5cyDruY4gNDUtMTM1LTItMjYKK2Fsd2F5cyDruY8gNDUtMTM1LTItMTIKK2Fsd2F5cyDruZAgNDUtMTM1LTItMworYWx3YXlzIOu5kSA0NS0xMzUtMi0yMzYKK2Fsd2F5cyDruZIgNDUtMTM1LTItMjU2CithbHdheXMg67mTIDQ1LTEzNS0yLTM1NgorYWx3YXlzIOu5lCA0NS0xMzUtMjYKK2Fsd2F5cyDruZUgNDUtMTM1LTEyCithbHdheXMg67mWIDQ1LTEzNS0xMi0zCithbHdheXMg67mXIDQ1LTEzNS0zCithbHdheXMg67mYIDQ1LTEzNS0zLTMKK2Fsd2F5cyDruZkgNDUtMTM1LTIzNTYKK2Fsd2F5cyDruZogNDUtMTM1LTEzCithbHdheXMg67mbIDQ1LTEzNS0yMworYWx3YXlzIOu5nCA0NS0xMzUtMjM1CithbHdheXMg67mdIDQ1LTEzNS0yMzYKK2Fsd2F5cyDruZ4gNDUtMTM1LTI1NgorYWx3YXlzIOu5nyA0NS0xMzUtMzU2CithbHdheXMg67mgIDQ1LTQ1LTEyNgorYWx3YXlzIOu5oSA0NS00NS0xMjYtMQorYWx3YXlzIOu5oiA0NS00NS0xMjYtMS0xCithbHdheXMg67mjIDQ1LTQ1LTEyNi0xLTMKK2Fsd2F5cyDruaQgNDUtNDUtMTI2LTI1CithbHdheXMg67mlIDQ1LTQ1LTEyNi0yNS0xMworYWx3YXlzIOu5piA0NS00NS0xMjYtMjUtMzU2CithbHdheXMg67mnIDQ1LTQ1LTEyNi0zNQorYWx3YXlzIOu5qCA0NS00NS0xMjYtMgorYWx3YXlzIOu5qSA0NS00NS0xMjYtMi0xCithbHdheXMg67mqIDQ1LTQ1LTEyNi0yLTI2CithbHdheXMg67mrIDQ1LTQ1LTEyNi0yLTEyCithbHdheXMg67msIDQ1LTQ1LTEyNi0yLTMKK2Fsd2F5cyDrua0gNDUtNDUtMTI2LTItMjM2CithbHdheXMg67muIDQ1LTQ1LTEyNi0yLTI1NgorYWx3YXlzIOu5ryA0NS00NS0xMjYtMi0zNTYKK2Fsd2F5cyDrubAgNDUtNDUtMTI2LTI2CithbHdheXMg67mxIDQ1LTQ1LTEyNi0xMgorYWx3YXlzIOu5siA0NS00NS0xMjYtMTItMworYWx3YXlzIOu5syA0NS00NS0xMjYtMworYWx3YXlzIOu5tCA0NS00NS0xMjYtMy0zCithbHdheXMg67m1IDQ1LTQ1LTEyNi0yMzU2CithbHdheXMg67m2IDQ1LTQ1LTEyNi0xMworYWx3YXlzIOu5tyA0NS00NS0xMjYtMjMKK2Fsd2F5cyDrubggNDUtNDUtMTI2LTIzNQorYWx3YXlzIOu5uSA0NS00NS0xMjYtMjM2CithbHdheXMg67m6IDQ1LTQ1LTEyNi0yNTYKK2Fsd2F5cyDrubsgNDUtNDUtMTI2LTM1NgorYWx3YXlzIOu5vCA0NS00NS0xMjM1CithbHdheXMg67m9IDQ1LTQ1LTEyMzUtMQorYWx3YXlzIOu5viA0NS00NS0xMjM1LTEtMQorYWx3YXlzIOu5vyA0NS00NS0xMjM1LTEtMworYWx3YXlzIOu6gCA0NS00NS0xMjM1LTI1CithbHdheXMg67qBIDQ1LTQ1LTEyMzUtMjUtMTMKK2Fsd2F5cyDruoIgNDUtNDUtMTIzNS0yNS0zNTYKK2Fsd2F5cyDruoMgNDUtNDUtMTIzNS0zNQorYWx3YXlzIOu6hCA0NS00NS0xMjM1LTIKK2Fsd2F5cyDruoUgNDUtNDUtMTIzNS0yLTEKK2Fsd2F5cyDruoYgNDUtNDUtMTIzNS0yLTI2CithbHdheXMg67qHIDQ1LTQ1LTEyMzUtMi0xMgorYWx3YXlzIOu6iCA0NS00NS0xMjM1LTItMworYWx3YXlzIOu6iSA0NS00NS0xMjM1LTItMjM2CithbHdheXMg67qKIDQ1LTQ1LTEyMzUtMi0yNTYKK2Fsd2F5cyDruosgNDUtNDUtMTIzNS0yLTM1NgorYWx3YXlzIOu6jCA0NS00NS0xMjM1LTI2CithbHdheXMg67qNIDQ1LTQ1LTEyMzUtMTIKK2Fsd2F5cyDruo4gNDUtNDUtMTIzNS0xMi0zCithbHdheXMg67qPIDQ1LTQ1LTEyMzUtMworYWx3YXlzIOu6kCA0NS00NS0xMjM1LTMtMworYWx3YXlzIOu6kSA0NS00NS0xMjM1LTIzNTYKK2Fsd2F5cyDrupIgNDUtNDUtMTIzNS0xMworYWx3YXlzIOu6kyA0NS00NS0xMjM1LTIzCithbHdheXMg67qUIDQ1LTQ1LTEyMzUtMjM1CithbHdheXMg67qVIDQ1LTQ1LTEyMzUtMjM2CithbHdheXMg67qWIDQ1LTQ1LTEyMzUtMjU2CithbHdheXMg67qXIDQ1LTQ1LTEyMzUtMzU2CithbHdheXMg67qYIDQ1LTQ1LTM0NQorYWx3YXlzIOu6mSA0NS00NS0zNDUtMQorYWx3YXlzIOu6miA0NS00NS0zNDUtMS0xCithbHdheXMg67qbIDQ1LTQ1LTM0NS0xLTMKK2Fsd2F5cyDrupwgNDUtNDUtMzQ1LTI1CithbHdheXMg67qdIDQ1LTQ1LTM0NS0yNS0xMworYWx3YXlzIOu6niA0NS00NS0zNDUtMjUtMzU2CithbHdheXMg67qfIDQ1LTQ1LTM0NS0zNQorYWx3YXlzIOu6oCA0NS00NS0zNDUtMgorYWx3YXlzIOu6oSA0NS00NS0zNDUtMi0xCithbHdheXMg67qiIDQ1LTQ1LTM0NS0yLTI2CithbHdheXMg67qjIDQ1LTQ1LTM0NS0yLTEyCithbHdheXMg67qkIDQ1LTQ1LTM0NS0yLTMKK2Fsd2F5cyDruqUgNDUtNDUtMzQ1LTItMjM2CithbHdheXMg67qmIDQ1LTQ1LTM0NS0yLTI1NgorYWx3YXlzIOu6pyA0NS00NS0zNDUtMi0zNTYKK2Fsd2F5cyDruqggNDUtNDUtMzQ1LTI2CithbHdheXMg67qpIDQ1LTQ1LTM0NS0xMgorYWx3YXlzIOu6qiA0NS00NS0zNDUtMTItMworYWx3YXlzIOu6qyA0NS00NS0zNDUtMworYWx3YXlzIOu6rCA0NS00NS0zNDUtMy0zCithbHdheXMg67qtIDQ1LTQ1LTM0NS0yMzU2CithbHdheXMg67quIDQ1LTQ1LTM0NS0xMworYWx3YXlzIOu6ryA0NS00NS0zNDUtMjMKK2Fsd2F5cyDrurAgNDUtNDUtMzQ1LTIzNQorYWx3YXlzIOu6sSA0NS00NS0zNDUtMjM2CithbHdheXMg67qyIDQ1LTQ1LTM0NS0yNTYKK2Fsd2F5cyDrurMgNDUtNDUtMzQ1LTM1NgorYWx3YXlzIOu6tCA0NS00NS0zNDUtMTIzNQorYWx3YXlzIOu6tSA0NS00NS0zNDUtMTIzNS0xCithbHdheXMg67q2IDQ1LTQ1LTM0NS0xMjM1LTEtMQorYWx3YXlzIOu6tyA0NS00NS0zNDUtMTIzNS0xLTMKK2Fsd2F5cyDrurggNDUtNDUtMzQ1LTEyMzUtMjUKK2Fsd2F5cyDrurkgNDUtNDUtMzQ1LTEyMzUtMjUtMTMKK2Fsd2F5cyDrurogNDUtNDUtMzQ1LTEyMzUtMjUtMzU2CithbHdheXMg67q7IDQ1LTQ1LTM0NS0xMjM1LTM1CithbHdheXMg67q8IDQ1LTQ1LTM0NS0xMjM1LTIKK2Fsd2F5cyDrur0gNDUtNDUtMzQ1LTEyMzUtMi0xCithbHdheXMg67q+IDQ1LTQ1LTM0NS0xMjM1LTItMjYKK2Fsd2F5cyDrur8gNDUtNDUtMzQ1LTEyMzUtMi0xMgorYWx3YXlzIOu7gCA0NS00NS0zNDUtMTIzNS0yLTMKK2Fsd2F5cyDru4EgNDUtNDUtMzQ1LTEyMzUtMi0yMzYKK2Fsd2F5cyDru4IgNDUtNDUtMzQ1LTEyMzUtMi0yNTYKK2Fsd2F5cyDru4MgNDUtNDUtMzQ1LTEyMzUtMi0zNTYKK2Fsd2F5cyDru4QgNDUtNDUtMzQ1LTEyMzUtMjYKK2Fsd2F5cyDru4UgNDUtNDUtMzQ1LTEyMzUtMTIKK2Fsd2F5cyDru4YgNDUtNDUtMzQ1LTEyMzUtMTItMworYWx3YXlzIOu7hyA0NS00NS0zNDUtMTIzNS0zCithbHdheXMg67uIIDQ1LTQ1LTM0NS0xMjM1LTMtMworYWx3YXlzIOu7iSA0NS00NS0zNDUtMTIzNS0yMzU2CithbHdheXMg67uKIDQ1LTQ1LTM0NS0xMjM1LTEzCithbHdheXMg67uLIDQ1LTQ1LTM0NS0xMjM1LTIzCithbHdheXMg67uMIDQ1LTQ1LTM0NS0xMjM1LTIzNQorYWx3YXlzIOu7jSA0NS00NS0zNDUtMTIzNS0yMzYKK2Fsd2F5cyDru44gNDUtNDUtMzQ1LTEyMzUtMjU2CithbHdheXMg67uPIDQ1LTQ1LTM0NS0xMjM1LTM1NgorYWx3YXlzIOu7kCA0NS00NS0yMzQKK2Fsd2F5cyDru5EgNDUtNDUtMjM0LTEKK2Fsd2F5cyDru5IgNDUtNDUtMjM0LTEtMQorYWx3YXlzIOu7kyA0NS00NS0yMzQtMS0zCithbHdheXMg67uUIDQ1LTQ1LTIzNC0yNQorYWx3YXlzIOu7lSA0NS00NS0yMzQtMjUtMTMKK2Fsd2F5cyDru5YgNDUtNDUtMjM0LTI1LTM1NgorYWx3YXlzIOu7lyA0NS00NS0yMzQtMzUKK2Fsd2F5cyDru5ggNDUtNDUtMjM0LTIKK2Fsd2F5cyDru5kgNDUtNDUtMjM0LTItMQorYWx3YXlzIOu7miA0NS00NS0yMzQtMi0yNgorYWx3YXlzIOu7myA0NS00NS0yMzQtMi0xMgorYWx3YXlzIOu7nCA0NS00NS0yMzQtMi0zCithbHdheXMg67udIDQ1LTQ1LTIzNC0yLTIzNgorYWx3YXlzIOu7niA0NS00NS0yMzQtMi0yNTYKK2Fsd2F5cyDru58gNDUtNDUtMjM0LTItMzU2CithbHdheXMg67ugIDQ1LTQ1LTIzNC0yNgorYWx3YXlzIOu7oSA0NS00NS0yMzQtMTIKK2Fsd2F5cyDru6IgNDUtNDUtMjM0LTEyLTMKK2Fsd2F5cyDru6MgNDUtNDUtMjM0LTMKK2Fsd2F5cyDru6QgNDUtNDUtMjM0LTMtMworYWx3YXlzIOu7pSA0NS00NS0yMzQtMjM1NgorYWx3YXlzIOu7piA0NS00NS0yMzQtMTMKK2Fsd2F5cyDru6cgNDUtNDUtMjM0LTIzCithbHdheXMg67uoIDQ1LTQ1LTIzNC0yMzUKK2Fsd2F5cyDru6kgNDUtNDUtMjM0LTIzNgorYWx3YXlzIOu7qiA0NS00NS0yMzQtMjU2CithbHdheXMg67urIDQ1LTQ1LTIzNC0zNTYKK2Fsd2F5cyDru6wgNDUtNDUtMTM0NQorYWx3YXlzIOu7rSA0NS00NS0xMzQ1LTEKK2Fsd2F5cyDru64gNDUtNDUtMTM0NS0xLTEKK2Fsd2F5cyDru68gNDUtNDUtMTM0NS0xLTMKK2Fsd2F5cyDru7AgNDUtNDUtMTM0NS0yNQorYWx3YXlzIOu7sSA0NS00NS0xMzQ1LTI1LTEzCithbHdheXMg67uyIDQ1LTQ1LTEzNDUtMjUtMzU2CithbHdheXMg67uzIDQ1LTQ1LTEzNDUtMzUKK2Fsd2F5cyDru7QgNDUtNDUtMTM0NS0yCithbHdheXMg67u1IDQ1LTQ1LTEzNDUtMi0xCithbHdheXMg67u2IDQ1LTQ1LTEzNDUtMi0yNgorYWx3YXlzIOu7tyA0NS00NS0xMzQ1LTItMTIKK2Fsd2F5cyDru7ggNDUtNDUtMTM0NS0yLTMKK2Fsd2F5cyDru7kgNDUtNDUtMTM0NS0yLTIzNgorYWx3YXlzIOu7uiA0NS00NS0xMzQ1LTItMjU2CithbHdheXMg67u7IDQ1LTQ1LTEzNDUtMi0zNTYKK2Fsd2F5cyDru7wgNDUtNDUtMTM0NS0yNgorYWx3YXlzIOu7vSA0NS00NS0xMzQ1LTEyCithbHdheXMg67u+IDQ1LTQ1LTEzNDUtMTItMworYWx3YXlzIOu7vyA0NS00NS0xMzQ1LTMKK2Fsd2F5cyDrvIAgNDUtNDUtMTM0NS0zLTMKK2Fsd2F5cyDrvIEgNDUtNDUtMTM0NS0yMzU2CithbHdheXMg67yCIDQ1LTQ1LTEzNDUtMTMKK2Fsd2F5cyDrvIMgNDUtNDUtMTM0NS0yMworYWx3YXlzIOu8hCA0NS00NS0xMzQ1LTIzNQorYWx3YXlzIOu8hSA0NS00NS0xMzQ1LTIzNgorYWx3YXlzIOu8hiA0NS00NS0xMzQ1LTI1NgorYWx3YXlzIOu8hyA0NS00NS0xMzQ1LTM1NgorYWx3YXlzIOu8iCA0NS00NS0xNTYKK2Fsd2F5cyDrvIkgNDUtNDUtMTU2LTEKK2Fsd2F5cyDrvIogNDUtNDUtMTU2LTEtMQorYWx3YXlzIOu8iyA0NS00NS0xNTYtMS0zCithbHdheXMg67yMIDQ1LTQ1LTE1Ni0yNQorYWx3YXlzIOu8jSA0NS00NS0xNTYtMjUtMTMKK2Fsd2F5cyDrvI4gNDUtNDUtMTU2LTI1LTM1NgorYWx3YXlzIOu8jyA0NS00NS0xNTYtMzUKK2Fsd2F5cyDrvJAgNDUtNDUtMTU2LTIKK2Fsd2F5cyDrvJEgNDUtNDUtMTU2LTItMQorYWx3YXlzIOu8kiA0NS00NS0xNTYtMi0yNgorYWx3YXlzIOu8kyA0NS00NS0xNTYtMi0xMgorYWx3YXlzIOu8lCA0NS00NS0xNTYtMi0zCithbHdheXMg67yVIDQ1LTQ1LTE1Ni0yLTIzNgorYWx3YXlzIOu8liA0NS00NS0xNTYtMi0yNTYKK2Fsd2F5cyDrvJcgNDUtNDUtMTU2LTItMzU2CithbHdheXMg67yYIDQ1LTQ1LTE1Ni0yNgorYWx3YXlzIOu8mSA0NS00NS0xNTYtMTIKK2Fsd2F5cyDrvJogNDUtNDUtMTU2LTEyLTMKK2Fsd2F5cyDrvJsgNDUtNDUtMTU2LTMKK2Fsd2F5cyDrvJwgNDUtNDUtMTU2LTMtMworYWx3YXlzIOu8nSA0NS00NS0xNTYtMjM1NgorYWx3YXlzIOu8niA0NS00NS0xNTYtMTMKK2Fsd2F5cyDrvJ8gNDUtNDUtMTU2LTIzCithbHdheXMg67ygIDQ1LTQ1LTE1Ni0yMzUKK2Fsd2F5cyDrvKEgNDUtNDUtMTU2LTIzNgorYWx3YXlzIOu8oiA0NS00NS0xNTYtMjU2CithbHdheXMg67yjIDQ1LTQ1LTE1Ni0zNTYKK2Fsd2F5cyDrvKQgNDUtNDUtMzQKK2Fsd2F5cyDrvKUgNDUtNDUtMzQtMQorYWx3YXlzIOu8piA0NS00NS0zNC0xLTEKK2Fsd2F5cyDrvKcgNDUtNDUtMzQtMS0zCithbHdheXMg67yoIDQ1LTQ1LTM0LTI1CithbHdheXMg67ypIDQ1LTQ1LTM0LTI1LTEzCithbHdheXMg67yqIDQ1LTQ1LTM0LTI1LTM1NgorYWx3YXlzIOu8qyA0NS00NS0zNC0zNQorYWx3YXlzIOu8rCA0NS00NS0zNC0yCithbHdheXMg67ytIDQ1LTQ1LTM0LTItMQorYWx3YXlzIOu8riA0NS00NS0zNC0yLTI2CithbHdheXMg67yvIDQ1LTQ1LTM0LTItMTIKK2Fsd2F5cyDrvLAgNDUtNDUtMzQtMi0zCithbHdheXMg67yxIDQ1LTQ1LTM0LTItMjM2CithbHdheXMg67yyIDQ1LTQ1LTM0LTItMjU2CithbHdheXMg67yzIDQ1LTQ1LTM0LTItMzU2CithbHdheXMg67y0IDQ1LTQ1LTM0LTI2CithbHdheXMg67y1IDQ1LTQ1LTM0LTEyCithbHdheXMg67y2IDQ1LTQ1LTM0LTEyLTMKK2Fsd2F5cyDrvLcgNDUtNDUtMzQtMworYWx3YXlzIOu8uCA0NS00NS0zNC0zLTMKK2Fsd2F5cyDrvLkgNDUtNDUtMzQtMjM1NgorYWx3YXlzIOu8uiA0NS00NS0zNC0xMworYWx3YXlzIOu8uyA0NS00NS0zNC0yMworYWx3YXlzIOu8vCA0NS00NS0zNC0yMzUKK2Fsd2F5cyDrvL0gNDUtNDUtMzQtMjM2CithbHdheXMg67y+IDQ1LTQ1LTM0LTI1NgorYWx3YXlzIOu8vyA0NS00NS0zNC0zNTYKK2Fsd2F5cyDrvYAgNDUtNDUtMTM2CithbHdheXMg672BIDQ1LTQ1LTEzNi0xCithbHdheXMg672CIDQ1LTQ1LTEzNi0xLTEKK2Fsd2F5cyDrvYMgNDUtNDUtMTM2LTEtMworYWx3YXlzIOu9hCA0NS00NS0xMzYtMjUKK2Fsd2F5cyDrvYUgNDUtNDUtMTM2LTI1LTEzCithbHdheXMg672GIDQ1LTQ1LTEzNi0yNS0zNTYKK2Fsd2F5cyDrvYcgNDUtNDUtMTM2LTM1CithbHdheXMg672IIDQ1LTQ1LTEzNi0yCithbHdheXMg672JIDQ1LTQ1LTEzNi0yLTEKK2Fsd2F5cyDrvYogNDUtNDUtMTM2LTItMjYKK2Fsd2F5cyDrvYsgNDUtNDUtMTM2LTItMTIKK2Fsd2F5cyDrvYwgNDUtNDUtMTM2LTItMworYWx3YXlzIOu9jSA0NS00NS0xMzYtMi0yMzYKK2Fsd2F5cyDrvY4gNDUtNDUtMTM2LTItMjU2CithbHdheXMg672PIDQ1LTQ1LTEzNi0yLTM1NgorYWx3YXlzIOu9kCA0NS00NS0xMzYtMjYKK2Fsd2F5cyDrvZEgNDUtNDUtMTM2LTEyCithbHdheXMg672SIDQ1LTQ1LTEzNi0xMi0zCithbHdheXMg672TIDQ1LTQ1LTEzNi0zCithbHdheXMg672UIDQ1LTQ1LTEzNi0zLTMKK2Fsd2F5cyDrvZUgNDUtNDUtMTM2LTIzNTYKK2Fsd2F5cyDrvZYgNDUtNDUtMTM2LTEzCithbHdheXMg672XIDQ1LTQ1LTEzNi0yMworYWx3YXlzIOu9mCA0NS00NS0xMzYtMjM1CithbHdheXMg672ZIDQ1LTQ1LTEzNi0yMzYKK2Fsd2F5cyDrvZogNDUtNDUtMTM2LTI1NgorYWx3YXlzIOu9myA0NS00NS0xMzYtMzU2CithbHdheXMg672cIDQ1LTQ1LTEyMzYKK2Fsd2F5cyDrvZ0gNDUtNDUtMTIzNi0xCithbHdheXMg672eIDQ1LTQ1LTEyMzYtMS0xCithbHdheXMg672fIDQ1LTQ1LTEyMzYtMS0zCithbHdheXMg672gIDQ1LTQ1LTEyMzYtMjUKK2Fsd2F5cyDrvaEgNDUtNDUtMTIzNi0yNS0xMworYWx3YXlzIOu9oiA0NS00NS0xMjM2LTI1LTM1NgorYWx3YXlzIOu9oyA0NS00NS0xMjM2LTM1CithbHdheXMg672kIDQ1LTQ1LTEyMzYtMgorYWx3YXlzIOu9pSA0NS00NS0xMjM2LTItMQorYWx3YXlzIOu9piA0NS00NS0xMjM2LTItMjYKK2Fsd2F5cyDrvacgNDUtNDUtMTIzNi0yLTEyCithbHdheXMg672oIDQ1LTQ1LTEyMzYtMi0zCithbHdheXMg672pIDQ1LTQ1LTEyMzYtMi0yMzYKK2Fsd2F5cyDrvaogNDUtNDUtMTIzNi0yLTI1NgorYWx3YXlzIOu9qyA0NS00NS0xMjM2LTItMzU2CithbHdheXMg672sIDQ1LTQ1LTEyMzYtMjYKK2Fsd2F5cyDrva0gNDUtNDUtMTIzNi0xMgorYWx3YXlzIOu9riA0NS00NS0xMjM2LTEyLTMKK2Fsd2F5cyDrva8gNDUtNDUtMTIzNi0zCithbHdheXMg672wIDQ1LTQ1LTEyMzYtMy0zCithbHdheXMg672xIDQ1LTQ1LTEyMzYtMjM1NgorYWx3YXlzIOu9siA0NS00NS0xMjM2LTEzCithbHdheXMg672zIDQ1LTQ1LTEyMzYtMjMKK2Fsd2F5cyDrvbQgNDUtNDUtMTIzNi0yMzUKK2Fsd2F5cyDrvbUgNDUtNDUtMTIzNi0yMzYKK2Fsd2F5cyDrvbYgNDUtNDUtMTIzNi0yNTYKK2Fsd2F5cyDrvbcgNDUtNDUtMTIzNi0zNTYKK2Fsd2F5cyDrvbggNDUtNDUtMTIzNi0xMjM1CithbHdheXMg6725IDQ1LTQ1LTEyMzYtMTIzNS0xCithbHdheXMg6726IDQ1LTQ1LTEyMzYtMTIzNS0xLTEKK2Fsd2F5cyDrvbsgNDUtNDUtMTIzNi0xMjM1LTEtMworYWx3YXlzIOu9vCA0NS00NS0xMjM2LTEyMzUtMjUKK2Fsd2F5cyDrvb0gNDUtNDUtMTIzNi0xMjM1LTI1LTEzCithbHdheXMg672+IDQ1LTQ1LTEyMzYtMTIzNS0yNS0zNTYKK2Fsd2F5cyDrvb8gNDUtNDUtMTIzNi0xMjM1LTM1CithbHdheXMg676AIDQ1LTQ1LTEyMzYtMTIzNS0yCithbHdheXMg676BIDQ1LTQ1LTEyMzYtMTIzNS0yLTEKK2Fsd2F5cyDrvoIgNDUtNDUtMTIzNi0xMjM1LTItMjYKK2Fsd2F5cyDrvoMgNDUtNDUtMTIzNi0xMjM1LTItMTIKK2Fsd2F5cyDrvoQgNDUtNDUtMTIzNi0xMjM1LTItMworYWx3YXlzIOu+hSA0NS00NS0xMjM2LTEyMzUtMi0yMzYKK2Fsd2F5cyDrvoYgNDUtNDUtMTIzNi0xMjM1LTItMjU2CithbHdheXMg676HIDQ1LTQ1LTEyMzYtMTIzNS0yLTM1NgorYWx3YXlzIOu+iCA0NS00NS0xMjM2LTEyMzUtMjYKK2Fsd2F5cyDrvokgNDUtNDUtMTIzNi0xMjM1LTEyCithbHdheXMg676KIDQ1LTQ1LTEyMzYtMTIzNS0xMi0zCithbHdheXMg676LIDQ1LTQ1LTEyMzYtMTIzNS0zCithbHdheXMg676MIDQ1LTQ1LTEyMzYtMTIzNS0zLTMKK2Fsd2F5cyDrvo0gNDUtNDUtMTIzNi0xMjM1LTIzNTYKK2Fsd2F5cyDrvo4gNDUtNDUtMTIzNi0xMjM1LTEzCithbHdheXMg676PIDQ1LTQ1LTEyMzYtMTIzNS0yMworYWx3YXlzIOu+kCA0NS00NS0xMjM2LTEyMzUtMjM1CithbHdheXMg676RIDQ1LTQ1LTEyMzYtMTIzNS0yMzYKK2Fsd2F5cyDrvpIgNDUtNDUtMTIzNi0xMjM1LTI1NgorYWx3YXlzIOu+kyA0NS00NS0xMjM2LTEyMzUtMzU2CithbHdheXMg676UIDQ1LTQ1LTEzNDU2CithbHdheXMg676VIDQ1LTQ1LTEzNDU2LTEKK2Fsd2F5cyDrvpYgNDUtNDUtMTM0NTYtMS0xCithbHdheXMg676XIDQ1LTQ1LTEzNDU2LTEtMworYWx3YXlzIOu+mCA0NS00NS0xMzQ1Ni0yNQorYWx3YXlzIOu+mSA0NS00NS0xMzQ1Ni0yNS0xMworYWx3YXlzIOu+miA0NS00NS0xMzQ1Ni0yNS0zNTYKK2Fsd2F5cyDrvpsgNDUtNDUtMTM0NTYtMzUKK2Fsd2F5cyDrvpwgNDUtNDUtMTM0NTYtMgorYWx3YXlzIOu+nSA0NS00NS0xMzQ1Ni0yLTEKK2Fsd2F5cyDrvp4gNDUtNDUtMTM0NTYtMi0yNgorYWx3YXlzIOu+nyA0NS00NS0xMzQ1Ni0yLTEyCithbHdheXMg676gIDQ1LTQ1LTEzNDU2LTItMworYWx3YXlzIOu+oSA0NS00NS0xMzQ1Ni0yLTIzNgorYWx3YXlzIOu+oiA0NS00NS0xMzQ1Ni0yLTI1NgorYWx3YXlzIOu+oyA0NS00NS0xMzQ1Ni0yLTM1NgorYWx3YXlzIOu+pCA0NS00NS0xMzQ1Ni0yNgorYWx3YXlzIOu+pSA0NS00NS0xMzQ1Ni0xMgorYWx3YXlzIOu+piA0NS00NS0xMzQ1Ni0xMi0zCithbHdheXMg676nIDQ1LTQ1LTEzNDU2LTMKK2Fsd2F5cyDrvqggNDUtNDUtMTM0NTYtMy0zCithbHdheXMg676pIDQ1LTQ1LTEzNDU2LTIzNTYKK2Fsd2F5cyDrvqogNDUtNDUtMTM0NTYtMTMKK2Fsd2F5cyDrvqsgNDUtNDUtMTM0NTYtMjMKK2Fsd2F5cyDrvqwgNDUtNDUtMTM0NTYtMjM1CithbHdheXMg676tIDQ1LTQ1LTEzNDU2LTIzNgorYWx3YXlzIOu+riA0NS00NS0xMzQ1Ni0yNTYKK2Fsd2F5cyDrvq8gNDUtNDUtMTM0NTYtMzU2CithbHdheXMg676wIDQ1LTQ1LTM0NgorYWx3YXlzIOu+sSA0NS00NS0zNDYtMQorYWx3YXlzIOu+siA0NS00NS0zNDYtMS0xCithbHdheXMg676zIDQ1LTQ1LTM0Ni0xLTMKK2Fsd2F5cyDrvrQgNDUtNDUtMzQ2LTI1CithbHdheXMg6761IDQ1LTQ1LTM0Ni0yNS0xMworYWx3YXlzIOu+tiA0NS00NS0zNDYtMjUtMzU2CithbHdheXMg6763IDQ1LTQ1LTM0Ni0zNQorYWx3YXlzIOu+uCA0NS00NS0zNDYtMgorYWx3YXlzIOu+uSA0NS00NS0zNDYtMi0xCithbHdheXMg6766IDQ1LTQ1LTM0Ni0yLTI2CithbHdheXMg6767IDQ1LTQ1LTM0Ni0yLTEyCithbHdheXMg6768IDQ1LTQ1LTM0Ni0yLTMKK2Fsd2F5cyDrvr0gNDUtNDUtMzQ2LTItMjM2CithbHdheXMg676+IDQ1LTQ1LTM0Ni0yLTI1NgorYWx3YXlzIOu+vyA0NS00NS0zNDYtMi0zNTYKK2Fsd2F5cyDrv4AgNDUtNDUtMzQ2LTI2CithbHdheXMg67+BIDQ1LTQ1LTM0Ni0xMgorYWx3YXlzIOu/giA0NS00NS0zNDYtMTItMworYWx3YXlzIOu/gyA0NS00NS0zNDYtMworYWx3YXlzIOu/hCA0NS00NS0zNDYtMy0zCithbHdheXMg67+FIDQ1LTQ1LTM0Ni0yMzU2CithbHdheXMg67+GIDQ1LTQ1LTM0Ni0xMworYWx3YXlzIOu/hyA0NS00NS0zNDYtMjMKK2Fsd2F5cyDrv4ggNDUtNDUtMzQ2LTIzNQorYWx3YXlzIOu/iSA0NS00NS0zNDYtMjM2CithbHdheXMg67+KIDQ1LTQ1LTM0Ni0yNTYKK2Fsd2F5cyDrv4sgNDUtNDUtMzQ2LTM1NgorYWx3YXlzIOu/jCA0NS00NS0xMzQKK2Fsd2F5cyDrv40gNDUtNDUtMTM0LTEKK2Fsd2F5cyDrv44gNDUtNDUtMTM0LTEtMQorYWx3YXlzIOu/jyA0NS00NS0xMzQtMS0zCithbHdheXMg67+QIDQ1LTQ1LTEzNC0yNQorYWx3YXlzIOu/kSA0NS00NS0xMzQtMjUtMTMKK2Fsd2F5cyDrv5IgNDUtNDUtMTM0LTI1LTM1NgorYWx3YXlzIOu/kyA0NS00NS0xMzQtMzUKK2Fsd2F5cyDrv5QgNDUtNDUtMTM0LTIKK2Fsd2F5cyDrv5UgNDUtNDUtMTM0LTItMQorYWx3YXlzIOu/liA0NS00NS0xMzQtMi0yNgorYWx3YXlzIOu/lyA0NS00NS0xMzQtMi0xMgorYWx3YXlzIOu/mCA0NS00NS0xMzQtMi0zCithbHdheXMg67+ZIDQ1LTQ1LTEzNC0yLTIzNgorYWx3YXlzIOu/miA0NS00NS0xMzQtMi0yNTYKK2Fsd2F5cyDrv5sgNDUtNDUtMTM0LTItMzU2CithbHdheXMg67+cIDQ1LTQ1LTEzNC0yNgorYWx3YXlzIOu/nSA0NS00NS0xMzQtMTIKK2Fsd2F5cyDrv54gNDUtNDUtMTM0LTEyLTMKK2Fsd2F5cyDrv58gNDUtNDUtMTM0LTMKK2Fsd2F5cyDrv6AgNDUtNDUtMTM0LTMtMworYWx3YXlzIOu/oSA0NS00NS0xMzQtMjM1NgorYWx3YXlzIOu/oiA0NS00NS0xMzQtMTMKK2Fsd2F5cyDrv6MgNDUtNDUtMTM0LTIzCithbHdheXMg67+kIDQ1LTQ1LTEzNC0yMzUKK2Fsd2F5cyDrv6UgNDUtNDUtMTM0LTIzNgorYWx3YXlzIOu/piA0NS00NS0xMzQtMjU2CithbHdheXMg67+nIDQ1LTQ1LTEzNC0zNTYKK2Fsd2F5cyDrv6ggNDUtNDUtMTIzNAorYWx3YXlzIOu/qSA0NS00NS0xMjM0LTEKK2Fsd2F5cyDrv6ogNDUtNDUtMTIzNC0xLTEKK2Fsd2F5cyDrv6sgNDUtNDUtMTIzNC0xLTMKK2Fsd2F5cyDrv6wgNDUtNDUtMTIzNC0yNQorYWx3YXlzIOu/rSA0NS00NS0xMjM0LTI1LTEzCithbHdheXMg67+uIDQ1LTQ1LTEyMzQtMjUtMzU2CithbHdheXMg67+vIDQ1LTQ1LTEyMzQtMzUKK2Fsd2F5cyDrv7AgNDUtNDUtMTIzNC0yCithbHdheXMg67+xIDQ1LTQ1LTEyMzQtMi0xCithbHdheXMg67+yIDQ1LTQ1LTEyMzQtMi0yNgorYWx3YXlzIOu/syA0NS00NS0xMjM0LTItMTIKK2Fsd2F5cyDrv7QgNDUtNDUtMTIzNC0yLTMKK2Fsd2F5cyDrv7UgNDUtNDUtMTIzNC0yLTIzNgorYWx3YXlzIOu/tiA0NS00NS0xMjM0LTItMjU2CithbHdheXMg67+3IDQ1LTQ1LTEyMzQtMi0zNTYKK2Fsd2F5cyDrv7ggNDUtNDUtMTIzNC0yNgorYWx3YXlzIOu/uSA0NS00NS0xMjM0LTEyCithbHdheXMg67+6IDQ1LTQ1LTEyMzQtMTItMworYWx3YXlzIOu/uyA0NS00NS0xMjM0LTMKK2Fsd2F5cyDrv7wgNDUtNDUtMTIzNC0zLTMKK2Fsd2F5cyDrv70gNDUtNDUtMTIzNC0yMzU2CithbHdheXMg67++IDQ1LTQ1LTEyMzQtMTMKK2Fsd2F5cyDrv78gNDUtNDUtMTIzNC0yMworYWx3YXlzIOyAgCA0NS00NS0xMjM0LTIzNQorYWx3YXlzIOyAgSA0NS00NS0xMjM0LTIzNgorYWx3YXlzIOyAgiA0NS00NS0xMjM0LTI1NgorYWx3YXlzIOyAgyA0NS00NS0xMjM0LTM1NgorYWx3YXlzIOyAhCA0NS00NS0xMjM0LTEyMzUKK2Fsd2F5cyDsgIUgNDUtNDUtMTIzNC0xMjM1LTEKK2Fsd2F5cyDsgIYgNDUtNDUtMTIzNC0xMjM1LTEtMQorYWx3YXlzIOyAhyA0NS00NS0xMjM0LTEyMzUtMS0zCithbHdheXMg7ICIIDQ1LTQ1LTEyMzQtMTIzNS0yNQorYWx3YXlzIOyAiSA0NS00NS0xMjM0LTEyMzUtMjUtMTMKK2Fsd2F5cyDsgIogNDUtNDUtMTIzNC0xMjM1LTI1LTM1NgorYWx3YXlzIOyAiyA0NS00NS0xMjM0LTEyMzUtMzUKK2Fsd2F5cyDsgIwgNDUtNDUtMTIzNC0xMjM1LTIKK2Fsd2F5cyDsgI0gNDUtNDUtMTIzNC0xMjM1LTItMQorYWx3YXlzIOyAjiA0NS00NS0xMjM0LTEyMzUtMi0yNgorYWx3YXlzIOyAjyA0NS00NS0xMjM0LTEyMzUtMi0xMgorYWx3YXlzIOyAkCA0NS00NS0xMjM0LTEyMzUtMi0zCithbHdheXMg7ICRIDQ1LTQ1LTEyMzQtMTIzNS0yLTIzNgorYWx3YXlzIOyAkiA0NS00NS0xMjM0LTEyMzUtMi0yNTYKK2Fsd2F5cyDsgJMgNDUtNDUtMTIzNC0xMjM1LTItMzU2CithbHdheXMg7ICUIDQ1LTQ1LTEyMzQtMTIzNS0yNgorYWx3YXlzIOyAlSA0NS00NS0xMjM0LTEyMzUtMTIKK2Fsd2F5cyDsgJYgNDUtNDUtMTIzNC0xMjM1LTEyLTMKK2Fsd2F5cyDsgJcgNDUtNDUtMTIzNC0xMjM1LTMKK2Fsd2F5cyDsgJggNDUtNDUtMTIzNC0xMjM1LTMtMworYWx3YXlzIOyAmSA0NS00NS0xMjM0LTEyMzUtMjM1NgorYWx3YXlzIOyAmiA0NS00NS0xMjM0LTEyMzUtMTMKK2Fsd2F5cyDsgJsgNDUtNDUtMTIzNC0xMjM1LTIzCithbHdheXMg7ICcIDQ1LTQ1LTEyMzQtMTIzNS0yMzUKK2Fsd2F5cyDsgJ0gNDUtNDUtMTIzNC0xMjM1LTIzNgorYWx3YXlzIOyAniA0NS00NS0xMjM0LTEyMzUtMjU2CithbHdheXMg7ICfIDQ1LTQ1LTEyMzQtMTIzNS0zNTYKK2Fsd2F5cyDsgKAgNDUtNDUtMTM0LTEyMzUKK2Fsd2F5cyDsgKEgNDUtNDUtMTM0LTEyMzUtMQorYWx3YXlzIOyAoiA0NS00NS0xMzQtMTIzNS0xLTEKK2Fsd2F5cyDsgKMgNDUtNDUtMTM0LTEyMzUtMS0zCithbHdheXMg7ICkIDQ1LTQ1LTEzNC0xMjM1LTI1CithbHdheXMg7IClIDQ1LTQ1LTEzNC0xMjM1LTI1LTEzCithbHdheXMg7ICmIDQ1LTQ1LTEzNC0xMjM1LTI1LTM1NgorYWx3YXlzIOyApyA0NS00NS0xMzQtMTIzNS0zNQorYWx3YXlzIOyAqCA0NS00NS0xMzQtMTIzNS0yCithbHdheXMg7ICpIDQ1LTQ1LTEzNC0xMjM1LTItMQorYWx3YXlzIOyAqiA0NS00NS0xMzQtMTIzNS0yLTI2CithbHdheXMg7ICrIDQ1LTQ1LTEzNC0xMjM1LTItMTIKK2Fsd2F5cyDsgKwgNDUtNDUtMTM0LTEyMzUtMi0zCithbHdheXMg7ICtIDQ1LTQ1LTEzNC0xMjM1LTItMjM2CithbHdheXMg7ICuIDQ1LTQ1LTEzNC0xMjM1LTItMjU2CithbHdheXMg7ICvIDQ1LTQ1LTEzNC0xMjM1LTItMzU2CithbHdheXMg7ICwIDQ1LTQ1LTEzNC0xMjM1LTI2CithbHdheXMg7ICxIDQ1LTQ1LTEzNC0xMjM1LTEyCithbHdheXMg7ICyIDQ1LTQ1LTEzNC0xMjM1LTEyLTMKK2Fsd2F5cyDsgLMgNDUtNDUtMTM0LTEyMzUtMworYWx3YXlzIOyAtCA0NS00NS0xMzQtMTIzNS0zLTMKK2Fsd2F5cyDsgLUgNDUtNDUtMTM0LTEyMzUtMjM1NgorYWx3YXlzIOyAtiA0NS00NS0xMzQtMTIzNS0xMworYWx3YXlzIOyAtyA0NS00NS0xMzQtMTIzNS0yMworYWx3YXlzIOyAuCA0NS00NS0xMzQtMTIzNS0yMzUKK2Fsd2F5cyDsgLkgNDUtNDUtMTM0LTEyMzUtMjM2CithbHdheXMg7IC6IDQ1LTQ1LTEzNC0xMjM1LTI1NgorYWx3YXlzIOyAuyA0NS00NS0xMzQtMTIzNS0zNTYKK2Fsd2F5cyDsgLwgNDUtNDUtMTQ2CithbHdheXMg7IC9IDQ1LTQ1LTE0Ni0xCithbHdheXMg7IC+IDQ1LTQ1LTE0Ni0xLTEKK2Fsd2F5cyDsgL8gNDUtNDUtMTQ2LTEtMworYWx3YXlzIOyBgCA0NS00NS0xNDYtMjUKK2Fsd2F5cyDsgYEgNDUtNDUtMTQ2LTI1LTEzCithbHdheXMg7IGCIDQ1LTQ1LTE0Ni0yNS0zNTYKK2Fsd2F5cyDsgYMgNDUtNDUtMTQ2LTM1CithbHdheXMg7IGEIDQ1LTQ1LTE0Ni0yCithbHdheXMg7IGFIDQ1LTQ1LTE0Ni0yLTEKK2Fsd2F5cyDsgYYgNDUtNDUtMTQ2LTItMjYKK2Fsd2F5cyDsgYcgNDUtNDUtMTQ2LTItMTIKK2Fsd2F5cyDsgYggNDUtNDUtMTQ2LTItMworYWx3YXlzIOyBiSA0NS00NS0xNDYtMi0yMzYKK2Fsd2F5cyDsgYogNDUtNDUtMTQ2LTItMjU2CithbHdheXMg7IGLIDQ1LTQ1LTE0Ni0yLTM1NgorYWx3YXlzIOyBjCA0NS00NS0xNDYtMjYKK2Fsd2F5cyDsgY0gNDUtNDUtMTQ2LTEyCithbHdheXMg7IGOIDQ1LTQ1LTE0Ni0xMi0zCithbHdheXMg7IGPIDQ1LTQ1LTE0Ni0zCithbHdheXMg7IGQIDQ1LTQ1LTE0Ni0zLTMKK2Fsd2F5cyDsgZEgNDUtNDUtMTQ2LTIzNTYKK2Fsd2F5cyDsgZIgNDUtNDUtMTQ2LTEzCithbHdheXMg7IGTIDQ1LTQ1LTE0Ni0yMworYWx3YXlzIOyBlCA0NS00NS0xNDYtMjM1CithbHdheXMg7IGVIDQ1LTQ1LTE0Ni0yMzYKK2Fsd2F5cyDsgZYgNDUtNDUtMTQ2LTI1NgorYWx3YXlzIOyBlyA0NS00NS0xNDYtMzU2CithbHdheXMg7IGYIDQ1LTQ1LTI0NgorYWx3YXlzIOyBmSA0NS00NS0yNDYtMQorYWx3YXlzIOyBmiA0NS00NS0yNDYtMS0xCithbHdheXMg7IGbIDQ1LTQ1LTI0Ni0xLTMKK2Fsd2F5cyDsgZwgNDUtNDUtMjQ2LTI1CithbHdheXMg7IGdIDQ1LTQ1LTI0Ni0yNS0xMworYWx3YXlzIOyBniA0NS00NS0yNDYtMjUtMzU2CithbHdheXMg7IGfIDQ1LTQ1LTI0Ni0zNQorYWx3YXlzIOyBoCA0NS00NS0yNDYtMgorYWx3YXlzIOyBoSA0NS00NS0yNDYtMi0xCithbHdheXMg7IGiIDQ1LTQ1LTI0Ni0yLTI2CithbHdheXMg7IGjIDQ1LTQ1LTI0Ni0yLTEyCithbHdheXMg7IGkIDQ1LTQ1LTI0Ni0yLTMKK2Fsd2F5cyDsgaUgNDUtNDUtMjQ2LTItMjM2CithbHdheXMg7IGmIDQ1LTQ1LTI0Ni0yLTI1NgorYWx3YXlzIOyBpyA0NS00NS0yNDYtMi0zNTYKK2Fsd2F5cyDsgaggNDUtNDUtMjQ2LTI2CithbHdheXMg7IGpIDQ1LTQ1LTI0Ni0xMgorYWx3YXlzIOyBqiA0NS00NS0yNDYtMTItMworYWx3YXlzIOyBqyA0NS00NS0yNDYtMworYWx3YXlzIOyBrCA0NS00NS0yNDYtMy0zCithbHdheXMg7IGtIDQ1LTQ1LTI0Ni0yMzU2CithbHdheXMg7IGuIDQ1LTQ1LTI0Ni0xMworYWx3YXlzIOyBryA0NS00NS0yNDYtMjMKK2Fsd2F5cyDsgbAgNDUtNDUtMjQ2LTIzNQorYWx3YXlzIOyBsSA0NS00NS0yNDYtMjM2CithbHdheXMg7IGyIDQ1LTQ1LTI0Ni0yNTYKK2Fsd2F5cyDsgbMgNDUtNDUtMjQ2LTM1NgorYWx3YXlzIOyBtCA0NS00NS0yNDU2CithbHdheXMg7IG1IDQ1LTQ1LTI0NTYtMQorYWx3YXlzIOyBtiA0NS00NS0yNDU2LTEtMQorYWx3YXlzIOyBtyA0NS00NS0yNDU2LTEtMworYWx3YXlzIOyBuCA0NS00NS0yNDU2LTI1CithbHdheXMg7IG5IDQ1LTQ1LTI0NTYtMjUtMTMKK2Fsd2F5cyDsgbogNDUtNDUtMjQ1Ni0yNS0zNTYKK2Fsd2F5cyDsgbsgNDUtNDUtMjQ1Ni0zNQorYWx3YXlzIOyBvCA0NS00NS0yNDU2LTIKK2Fsd2F5cyDsgb0gNDUtNDUtMjQ1Ni0yLTEKK2Fsd2F5cyDsgb4gNDUtNDUtMjQ1Ni0yLTI2CithbHdheXMg7IG/IDQ1LTQ1LTI0NTYtMi0xMgorYWx3YXlzIOyCgCA0NS00NS0yNDU2LTItMworYWx3YXlzIOyCgSA0NS00NS0yNDU2LTItMjM2CithbHdheXMg7IKCIDQ1LTQ1LTI0NTYtMi0yNTYKK2Fsd2F5cyDsgoMgNDUtNDUtMjQ1Ni0yLTM1NgorYWx3YXlzIOyChCA0NS00NS0yNDU2LTI2CithbHdheXMg7IKFIDQ1LTQ1LTI0NTYtMTIKK2Fsd2F5cyDsgoYgNDUtNDUtMjQ1Ni0xMi0zCithbHdheXMg7IKHIDQ1LTQ1LTI0NTYtMworYWx3YXlzIOyCiCA0NS00NS0yNDU2LTMtMworYWx3YXlzIOyCiSA0NS00NS0yNDU2LTIzNTYKK2Fsd2F5cyDsgoogNDUtNDUtMjQ1Ni0xMworYWx3YXlzIOyCiyA0NS00NS0yNDU2LTIzCithbHdheXMg7IKMIDQ1LTQ1LTI0NTYtMjM1CithbHdheXMg7IKNIDQ1LTQ1LTI0NTYtMjM2CithbHdheXMg7IKOIDQ1LTQ1LTI0NTYtMjU2CithbHdheXMg7IKPIDQ1LTQ1LTI0NTYtMzU2CithbHdheXMg7IKQIDQ1LTQ1LTEzNQorYWx3YXlzIOyCkSA0NS00NS0xMzUtMQorYWx3YXlzIOyCkiA0NS00NS0xMzUtMS0xCithbHdheXMg7IKTIDQ1LTQ1LTEzNS0xLTMKK2Fsd2F5cyDsgpQgNDUtNDUtMTM1LTI1CithbHdheXMg7IKVIDQ1LTQ1LTEzNS0yNS0xMworYWx3YXlzIOyCliA0NS00NS0xMzUtMjUtMzU2CithbHdheXMg7IKXIDQ1LTQ1LTEzNS0zNQorYWx3YXlzIOyCmCA0NS00NS0xMzUtMgorYWx3YXlzIOyCmSA0NS00NS0xMzUtMi0xCithbHdheXMg7IKaIDQ1LTQ1LTEzNS0yLTI2CithbHdheXMg7IKbIDQ1LTQ1LTEzNS0yLTEyCithbHdheXMg7IKcIDQ1LTQ1LTEzNS0yLTMKK2Fsd2F5cyDsgp0gNDUtNDUtMTM1LTItMjM2CithbHdheXMg7IKeIDQ1LTQ1LTEzNS0yLTI1NgorYWx3YXlzIOyCnyA0NS00NS0xMzUtMi0zNTYKK2Fsd2F5cyDsgqAgNDUtNDUtMTM1LTI2CithbHdheXMg7IKhIDQ1LTQ1LTEzNS0xMgorYWx3YXlzIOyCoiA0NS00NS0xMzUtMTItMworYWx3YXlzIOyCoyA0NS00NS0xMzUtMworYWx3YXlzIOyCpCA0NS00NS0xMzUtMy0zCithbHdheXMg7IKlIDQ1LTQ1LTEzNS0yMzU2CithbHdheXMg7IKmIDQ1LTQ1LTEzNS0xMworYWx3YXlzIOyCpyA0NS00NS0xMzUtMjMKK2Fsd2F5cyDsgqggNDUtNDUtMTM1LTIzNQorYWx3YXlzIOyCqSA0NS00NS0xMzUtMjM2CithbHdheXMg7IKqIDQ1LTQ1LTEzNS0yNTYKK2Fsd2F5cyDsgqsgNDUtNDUtMTM1LTM1NgorYWx3YXlzIOyCrCA2LTEyNgorYWx3YXlzIOyCrSA2LTEyNi0xCithbHdheXMg7IKuIDYtMTI2LTEtMQorYWx3YXlzIOyCryA2LTEyNi0xLTMKK2Fsd2F5cyDsgrAgNi0xMjYtMjUKK2Fsd2F5cyDsgrEgNi0xMjYtMjUtMTMKK2Fsd2F5cyDsgrIgNi0xMjYtMjUtMzU2CithbHdheXMg7IKzIDYtMTI2LTM1CithbHdheXMg7IK0IDYtMTI2LTIKK2Fsd2F5cyDsgrUgNi0xMjYtMi0xCithbHdheXMg7IK2IDYtMTI2LTItMjYKK2Fsd2F5cyDsgrcgNi0xMjYtMi0xMgorYWx3YXlzIOyCuCA2LTEyNi0yLTMKK2Fsd2F5cyDsgrkgNi0xMjYtMi0yMzYKK2Fsd2F5cyDsgrogNi0xMjYtMi0yNTYKK2Fsd2F5cyDsgrsgNi0xMjYtMi0zNTYKK2Fsd2F5cyDsgrwgNi0xMjYtMjYKK2Fsd2F5cyDsgr0gNi0xMjYtMTIKK2Fsd2F5cyDsgr4gNi0xMjYtMTItMworYWx3YXlzIOyCvyA2LTEyNi0zCithbHdheXMg7IOAIDYtMTI2LTMtMworYWx3YXlzIOyDgSA2LTEyNi0yMzU2CithbHdheXMg7IOCIDYtMTI2LTEzCithbHdheXMg7IODIDYtMTI2LTIzCithbHdheXMg7IOEIDYtMTI2LTIzNQorYWx3YXlzIOyDhSA2LTEyNi0yMzYKK2Fsd2F5cyDsg4YgNi0xMjYtMjU2CithbHdheXMg7IOHIDYtMTI2LTM1NgorYWx3YXlzIOyDiCA2LTEyMzUKK2Fsd2F5cyDsg4kgNi0xMjM1LTEKK2Fsd2F5cyDsg4ogNi0xMjM1LTEtMQorYWx3YXlzIOyDiyA2LTEyMzUtMS0zCithbHdheXMg7IOMIDYtMTIzNS0yNQorYWx3YXlzIOyDjSA2LTEyMzUtMjUtMTMKK2Fsd2F5cyDsg44gNi0xMjM1LTI1LTM1NgorYWx3YXlzIOyDjyA2LTEyMzUtMzUKK2Fsd2F5cyDsg5AgNi0xMjM1LTIKK2Fsd2F5cyDsg5EgNi0xMjM1LTItMQorYWx3YXlzIOyDkiA2LTEyMzUtMi0yNgorYWx3YXlzIOyDkyA2LTEyMzUtMi0xMgorYWx3YXlzIOyDlCA2LTEyMzUtMi0zCithbHdheXMg7IOVIDYtMTIzNS0yLTIzNgorYWx3YXlzIOyDliA2LTEyMzUtMi0yNTYKK2Fsd2F5cyDsg5cgNi0xMjM1LTItMzU2CithbHdheXMg7IOYIDYtMTIzNS0yNgorYWx3YXlzIOyDmSA2LTEyMzUtMTIKK2Fsd2F5cyDsg5ogNi0xMjM1LTEyLTMKK2Fsd2F5cyDsg5sgNi0xMjM1LTMKK2Fsd2F5cyDsg5wgNi0xMjM1LTMtMworYWx3YXlzIOyDnSA2LTEyMzUtMjM1NgorYWx3YXlzIOyDniA2LTEyMzUtMTMKK2Fsd2F5cyDsg58gNi0xMjM1LTIzCithbHdheXMg7IOgIDYtMTIzNS0yMzUKK2Fsd2F5cyDsg6EgNi0xMjM1LTIzNgorYWx3YXlzIOyDoiA2LTEyMzUtMjU2CithbHdheXMg7IOjIDYtMTIzNS0zNTYKK2Fsd2F5cyDsg6QgNi0zNDUKK2Fsd2F5cyDsg6UgNi0zNDUtMQorYWx3YXlzIOyDpiA2LTM0NS0xLTEKK2Fsd2F5cyDsg6cgNi0zNDUtMS0zCithbHdheXMg7IOoIDYtMzQ1LTI1CithbHdheXMg7IOpIDYtMzQ1LTI1LTEzCithbHdheXMg7IOqIDYtMzQ1LTI1LTM1NgorYWx3YXlzIOyDqyA2LTM0NS0zNQorYWx3YXlzIOyDrCA2LTM0NS0yCithbHdheXMg7IOtIDYtMzQ1LTItMQorYWx3YXlzIOyDriA2LTM0NS0yLTI2CithbHdheXMg7IOvIDYtMzQ1LTItMTIKK2Fsd2F5cyDsg7AgNi0zNDUtMi0zCithbHdheXMg7IOxIDYtMzQ1LTItMjM2CithbHdheXMg7IOyIDYtMzQ1LTItMjU2CithbHdheXMg7IOzIDYtMzQ1LTItMzU2CithbHdheXMg7IO0IDYtMzQ1LTI2CithbHdheXMg7IO1IDYtMzQ1LTEyCithbHdheXMg7IO2IDYtMzQ1LTEyLTMKK2Fsd2F5cyDsg7cgNi0zNDUtMworYWx3YXlzIOyDuCA2LTM0NS0zLTMKK2Fsd2F5cyDsg7kgNi0zNDUtMjM1NgorYWx3YXlzIOyDuiA2LTM0NS0xMworYWx3YXlzIOyDuyA2LTM0NS0yMworYWx3YXlzIOyDvCA2LTM0NS0yMzUKK2Fsd2F5cyDsg70gNi0zNDUtMjM2CithbHdheXMg7IO+IDYtMzQ1LTI1NgorYWx3YXlzIOyDvyA2LTM0NS0zNTYKK2Fsd2F5cyDshIAgNi0zNDUtMTIzNQorYWx3YXlzIOyEgSA2LTM0NS0xMjM1LTEKK2Fsd2F5cyDshIIgNi0zNDUtMTIzNS0xLTEKK2Fsd2F5cyDshIMgNi0zNDUtMTIzNS0xLTMKK2Fsd2F5cyDshIQgNi0zNDUtMTIzNS0yNQorYWx3YXlzIOyEhSA2LTM0NS0xMjM1LTI1LTEzCithbHdheXMg7ISGIDYtMzQ1LTEyMzUtMjUtMzU2CithbHdheXMg7ISHIDYtMzQ1LTEyMzUtMzUKK2Fsd2F5cyDshIggNi0zNDUtMTIzNS0yCithbHdheXMg7ISJIDYtMzQ1LTEyMzUtMi0xCithbHdheXMg7ISKIDYtMzQ1LTEyMzUtMi0yNgorYWx3YXlzIOyEiyA2LTM0NS0xMjM1LTItMTIKK2Fsd2F5cyDshIwgNi0zNDUtMTIzNS0yLTMKK2Fsd2F5cyDshI0gNi0zNDUtMTIzNS0yLTIzNgorYWx3YXlzIOyEjiA2LTM0NS0xMjM1LTItMjU2CithbHdheXMg7ISPIDYtMzQ1LTEyMzUtMi0zNTYKK2Fsd2F5cyDshJAgNi0zNDUtMTIzNS0yNgorYWx3YXlzIOyEkSA2LTM0NS0xMjM1LTEyCithbHdheXMg7ISSIDYtMzQ1LTEyMzUtMTItMworYWx3YXlzIOyEkyA2LTM0NS0xMjM1LTMKK2Fsd2F5cyDshJQgNi0zNDUtMTIzNS0zLTMKK2Fsd2F5cyDshJUgNi0zNDUtMTIzNS0yMzU2CithbHdheXMg7ISWIDYtMzQ1LTEyMzUtMTMKK2Fsd2F5cyDshJcgNi0zNDUtMTIzNS0yMworYWx3YXlzIOyEmCA2LTM0NS0xMjM1LTIzNQorYWx3YXlzIOyEmSA2LTM0NS0xMjM1LTIzNgorYWx3YXlzIOyEmiA2LTM0NS0xMjM1LTI1NgorYWx3YXlzIOyEmyA2LTM0NS0xMjM1LTM1NgorYWx3YXlzIOyEnCA2LTIzNAorYWx3YXlzIOyEnSA2LTIzNC0xCithbHdheXMg7ISeIDYtMjM0LTEtMQorYWx3YXlzIOyEnyA2LTIzNC0xLTMKK2Fsd2F5cyDshKAgNi0yMzQtMjUKK2Fsd2F5cyDshKEgNi0yMzQtMjUtMTMKK2Fsd2F5cyDshKIgNi0yMzQtMjUtMzU2CithbHdheXMg7ISjIDYtMjM0LTM1CithbHdheXMg7ISkIDYtMjM0LTIKK2Fsd2F5cyDshKUgNi0yMzQtMi0xCithbHdheXMg7ISmIDYtMjM0LTItMjYKK2Fsd2F5cyDshKcgNi0yMzQtMi0xMgorYWx3YXlzIOyEqCA2LTIzNC0yLTMKK2Fsd2F5cyDshKkgNi0yMzQtMi0yMzYKK2Fsd2F5cyDshKogNi0yMzQtMi0yNTYKK2Fsd2F5cyDshKsgNi0yMzQtMi0zNTYKK2Fsd2F5cyDshKwgNi0yMzQtMjYKK2Fsd2F5cyDshK0gNi0yMzQtMTIKK2Fsd2F5cyDshK4gNi0yMzQtMTItMworYWx3YXlzIOyEryA2LTIzNC0zCithbHdheXMg7ISwIDYtMjM0LTMtMworYWx3YXlzIOyEsSA2LTIzNC0yMzU2CithbHdheXMg7ISyIDYtMjM0LTEzCithbHdheXMg7ISzIDYtMjM0LTIzCithbHdheXMg7IS0IDYtMjM0LTIzNQorYWx3YXlzIOyEtSA2LTIzNC0yMzYKK2Fsd2F5cyDshLYgNi0yMzQtMjU2CithbHdheXMg7IS3IDYtMjM0LTM1NgorYWx3YXlzIOyEuCA2LTEzNDUKK2Fsd2F5cyDshLkgNi0xMzQ1LTEKK2Fsd2F5cyDshLogNi0xMzQ1LTEtMQorYWx3YXlzIOyEuyA2LTEzNDUtMS0zCithbHdheXMg7IS8IDYtMTM0NS0yNQorYWx3YXlzIOyEvSA2LTEzNDUtMjUtMTMKK2Fsd2F5cyDshL4gNi0xMzQ1LTI1LTM1NgorYWx3YXlzIOyEvyA2LTEzNDUtMzUKK2Fsd2F5cyDshYAgNi0xMzQ1LTIKK2Fsd2F5cyDshYEgNi0xMzQ1LTItMQorYWx3YXlzIOyFgiA2LTEzNDUtMi0yNgorYWx3YXlzIOyFgyA2LTEzNDUtMi0xMgorYWx3YXlzIOyFhCA2LTEzNDUtMi0zCithbHdheXMg7IWFIDYtMTM0NS0yLTIzNgorYWx3YXlzIOyFhiA2LTEzNDUtMi0yNTYKK2Fsd2F5cyDshYcgNi0xMzQ1LTItMzU2CithbHdheXMg7IWIIDYtMTM0NS0yNgorYWx3YXlzIOyFiSA2LTEzNDUtMTIKK2Fsd2F5cyDshYogNi0xMzQ1LTEyLTMKK2Fsd2F5cyDshYsgNi0xMzQ1LTMKK2Fsd2F5cyDshYwgNi0xMzQ1LTMtMworYWx3YXlzIOyFjSA2LTEzNDUtMjM1NgorYWx3YXlzIOyFjiA2LTEzNDUtMTMKK2Fsd2F5cyDshY8gNi0xMzQ1LTIzCithbHdheXMg7IWQIDYtMTM0NS0yMzUKK2Fsd2F5cyDshZEgNi0xMzQ1LTIzNgorYWx3YXlzIOyFkiA2LTEzNDUtMjU2CithbHdheXMg7IWTIDYtMTM0NS0zNTYKK2Fsd2F5cyDshZQgNi0xNTYKK2Fsd2F5cyDshZUgNi0xNTYtMQorYWx3YXlzIOyFliA2LTE1Ni0xLTEKK2Fsd2F5cyDshZcgNi0xNTYtMS0zCithbHdheXMg7IWYIDYtMTU2LTI1CithbHdheXMg7IWZIDYtMTU2LTI1LTEzCithbHdheXMg7IWaIDYtMTU2LTI1LTM1NgorYWx3YXlzIOyFmyA2LTE1Ni0zNQorYWx3YXlzIOyFnCA2LTE1Ni0yCithbHdheXMg7IWdIDYtMTU2LTItMQorYWx3YXlzIOyFniA2LTE1Ni0yLTI2CithbHdheXMg7IWfIDYtMTU2LTItMTIKK2Fsd2F5cyDshaAgNi0xNTYtMi0zCithbHdheXMg7IWhIDYtMTU2LTItMjM2CithbHdheXMg7IWiIDYtMTU2LTItMjU2CithbHdheXMg7IWjIDYtMTU2LTItMzU2CithbHdheXMg7IWkIDYtMTU2LTI2CithbHdheXMg7IWlIDYtMTU2LTEyCithbHdheXMg7IWmIDYtMTU2LTEyLTMKK2Fsd2F5cyDshacgNi0xNTYtMworYWx3YXlzIOyFqCA2LTE1Ni0zLTMKK2Fsd2F5cyDshakgNi0xNTYtMjM1NgorYWx3YXlzIOyFqiA2LTE1Ni0xMworYWx3YXlzIOyFqyA2LTE1Ni0yMworYWx3YXlzIOyFrCA2LTE1Ni0yMzUKK2Fsd2F5cyDsha0gNi0xNTYtMjM2CithbHdheXMg7IWuIDYtMTU2LTI1NgorYWx3YXlzIOyFryA2LTE1Ni0zNTYKK2Fsd2F5cyDshbAgNi0zNAorYWx3YXlzIOyFsSA2LTM0LTEKK2Fsd2F5cyDshbIgNi0zNC0xLTEKK2Fsd2F5cyDshbMgNi0zNC0xLTMKK2Fsd2F5cyDshbQgNi0zNC0yNQorYWx3YXlzIOyFtSA2LTM0LTI1LTEzCithbHdheXMg7IW2IDYtMzQtMjUtMzU2CithbHdheXMg7IW3IDYtMzQtMzUKK2Fsd2F5cyDshbggNi0zNC0yCithbHdheXMg7IW5IDYtMzQtMi0xCithbHdheXMg7IW6IDYtMzQtMi0yNgorYWx3YXlzIOyFuyA2LTM0LTItMTIKK2Fsd2F5cyDshbwgNi0zNC0yLTMKK2Fsd2F5cyDshb0gNi0zNC0yLTIzNgorYWx3YXlzIOyFviA2LTM0LTItMjU2CithbHdheXMg7IW/IDYtMzQtMi0zNTYKK2Fsd2F5cyDshoAgNi0zNC0yNgorYWx3YXlzIOyGgSA2LTM0LTEyCithbHdheXMg7IaCIDYtMzQtMTItMworYWx3YXlzIOyGgyA2LTM0LTMKK2Fsd2F5cyDshoQgNi0zNC0zLTMKK2Fsd2F5cyDshoUgNi0zNC0yMzU2CithbHdheXMg7IaGIDYtMzQtMTMKK2Fsd2F5cyDshocgNi0zNC0yMworYWx3YXlzIOyGiCA2LTM0LTIzNQorYWx3YXlzIOyGiSA2LTM0LTIzNgorYWx3YXlzIOyGiiA2LTM0LTI1NgorYWx3YXlzIOyGiyA2LTM0LTM1NgorYWx3YXlzIOyGjCA2LTEzNgorYWx3YXlzIOyGjSA2LTEzNi0xCithbHdheXMg7IaOIDYtMTM2LTEtMQorYWx3YXlzIOyGjyA2LTEzNi0xLTMKK2Fsd2F5cyDshpAgNi0xMzYtMjUKK2Fsd2F5cyDshpEgNi0xMzYtMjUtMTMKK2Fsd2F5cyDshpIgNi0xMzYtMjUtMzU2CithbHdheXMg7IaTIDYtMTM2LTM1CithbHdheXMg7IaUIDYtMTM2LTIKK2Fsd2F5cyDshpUgNi0xMzYtMi0xCithbHdheXMg7IaWIDYtMTM2LTItMjYKK2Fsd2F5cyDshpcgNi0xMzYtMi0xMgorYWx3YXlzIOyGmCA2LTEzNi0yLTMKK2Fsd2F5cyDshpkgNi0xMzYtMi0yMzYKK2Fsd2F5cyDshpogNi0xMzYtMi0yNTYKK2Fsd2F5cyDshpsgNi0xMzYtMi0zNTYKK2Fsd2F5cyDshpwgNi0xMzYtMjYKK2Fsd2F5cyDshp0gNi0xMzYtMTIKK2Fsd2F5cyDshp4gNi0xMzYtMTItMworYWx3YXlzIOyGnyA2LTEzNi0zCithbHdheXMg7IagIDYtMTM2LTMtMworYWx3YXlzIOyGoSA2LTEzNi0yMzU2CithbHdheXMg7IaiIDYtMTM2LTEzCithbHdheXMg7IajIDYtMTM2LTIzCithbHdheXMg7IakIDYtMTM2LTIzNQorYWx3YXlzIOyGpSA2LTEzNi0yMzYKK2Fsd2F5cyDshqYgNi0xMzYtMjU2CithbHdheXMg7IanIDYtMTM2LTM1NgorYWx3YXlzIOyGqCA2LTEyMzYKK2Fsd2F5cyDshqkgNi0xMjM2LTEKK2Fsd2F5cyDshqogNi0xMjM2LTEtMQorYWx3YXlzIOyGqyA2LTEyMzYtMS0zCithbHdheXMg7IasIDYtMTIzNi0yNQorYWx3YXlzIOyGrSA2LTEyMzYtMjUtMTMKK2Fsd2F5cyDshq4gNi0xMjM2LTI1LTM1NgorYWx3YXlzIOyGryA2LTEyMzYtMzUKK2Fsd2F5cyDshrAgNi0xMjM2LTIKK2Fsd2F5cyDshrEgNi0xMjM2LTItMQorYWx3YXlzIOyGsiA2LTEyMzYtMi0yNgorYWx3YXlzIOyGsyA2LTEyMzYtMi0xMgorYWx3YXlzIOyGtCA2LTEyMzYtMi0zCithbHdheXMg7Ia1IDYtMTIzNi0yLTIzNgorYWx3YXlzIOyGtiA2LTEyMzYtMi0yNTYKK2Fsd2F5cyDshrcgNi0xMjM2LTItMzU2CithbHdheXMg7Ia4IDYtMTIzNi0yNgorYWx3YXlzIOyGuSA2LTEyMzYtMTIKK2Fsd2F5cyDshrogNi0xMjM2LTEyLTMKK2Fsd2F5cyDshrsgNi0xMjM2LTMKK2Fsd2F5cyDshrwgNi0xMjM2LTMtMworYWx3YXlzIOyGvSA2LTEyMzYtMjM1NgorYWx3YXlzIOyGviA2LTEyMzYtMTMKK2Fsd2F5cyDshr8gNi0xMjM2LTIzCithbHdheXMg7IeAIDYtMTIzNi0yMzUKK2Fsd2F5cyDsh4EgNi0xMjM2LTIzNgorYWx3YXlzIOyHgiA2LTEyMzYtMjU2CithbHdheXMg7IeDIDYtMTIzNi0zNTYKK2Fsd2F5cyDsh4QgNi0xMjM2LTEyMzUKK2Fsd2F5cyDsh4UgNi0xMjM2LTEyMzUtMQorYWx3YXlzIOyHhiA2LTEyMzYtMTIzNS0xLTEKK2Fsd2F5cyDsh4cgNi0xMjM2LTEyMzUtMS0zCithbHdheXMg7IeIIDYtMTIzNi0xMjM1LTI1CithbHdheXMg7IeJIDYtMTIzNi0xMjM1LTI1LTEzCithbHdheXMg7IeKIDYtMTIzNi0xMjM1LTI1LTM1NgorYWx3YXlzIOyHiyA2LTEyMzYtMTIzNS0zNQorYWx3YXlzIOyHjCA2LTEyMzYtMTIzNS0yCithbHdheXMg7IeNIDYtMTIzNi0xMjM1LTItMQorYWx3YXlzIOyHjiA2LTEyMzYtMTIzNS0yLTI2CithbHdheXMg7IePIDYtMTIzNi0xMjM1LTItMTIKK2Fsd2F5cyDsh5AgNi0xMjM2LTEyMzUtMi0zCithbHdheXMg7IeRIDYtMTIzNi0xMjM1LTItMjM2CithbHdheXMg7IeSIDYtMTIzNi0xMjM1LTItMjU2CithbHdheXMg7IeTIDYtMTIzNi0xMjM1LTItMzU2CithbHdheXMg7IeUIDYtMTIzNi0xMjM1LTI2CithbHdheXMg7IeVIDYtMTIzNi0xMjM1LTEyCithbHdheXMg7IeWIDYtMTIzNi0xMjM1LTEyLTMKK2Fsd2F5cyDsh5cgNi0xMjM2LTEyMzUtMworYWx3YXlzIOyHmCA2LTEyMzYtMTIzNS0zLTMKK2Fsd2F5cyDsh5kgNi0xMjM2LTEyMzUtMjM1NgorYWx3YXlzIOyHmiA2LTEyMzYtMTIzNS0xMworYWx3YXlzIOyHmyA2LTEyMzYtMTIzNS0yMworYWx3YXlzIOyHnCA2LTEyMzYtMTIzNS0yMzUKK2Fsd2F5cyDsh50gNi0xMjM2LTEyMzUtMjM2CithbHdheXMg7IeeIDYtMTIzNi0xMjM1LTI1NgorYWx3YXlzIOyHnyA2LTEyMzYtMTIzNS0zNTYKK2Fsd2F5cyDsh6AgNi0xMzQ1NgorYWx3YXlzIOyHoSA2LTEzNDU2LTEKK2Fsd2F5cyDsh6IgNi0xMzQ1Ni0xLTEKK2Fsd2F5cyDsh6MgNi0xMzQ1Ni0xLTMKK2Fsd2F5cyDsh6QgNi0xMzQ1Ni0yNQorYWx3YXlzIOyHpSA2LTEzNDU2LTI1LTEzCithbHdheXMg7IemIDYtMTM0NTYtMjUtMzU2CithbHdheXMg7IenIDYtMTM0NTYtMzUKK2Fsd2F5cyDsh6ggNi0xMzQ1Ni0yCithbHdheXMg7IepIDYtMTM0NTYtMi0xCithbHdheXMg7IeqIDYtMTM0NTYtMi0yNgorYWx3YXlzIOyHqyA2LTEzNDU2LTItMTIKK2Fsd2F5cyDsh6wgNi0xMzQ1Ni0yLTMKK2Fsd2F5cyDsh60gNi0xMzQ1Ni0yLTIzNgorYWx3YXlzIOyHriA2LTEzNDU2LTItMjU2CithbHdheXMg7IevIDYtMTM0NTYtMi0zNTYKK2Fsd2F5cyDsh7AgNi0xMzQ1Ni0yNgorYWx3YXlzIOyHsSA2LTEzNDU2LTEyCithbHdheXMg7IeyIDYtMTM0NTYtMTItMworYWx3YXlzIOyHsyA2LTEzNDU2LTMKK2Fsd2F5cyDsh7QgNi0xMzQ1Ni0zLTMKK2Fsd2F5cyDsh7UgNi0xMzQ1Ni0yMzU2CithbHdheXMg7Ie2IDYtMTM0NTYtMTMKK2Fsd2F5cyDsh7cgNi0xMzQ1Ni0yMworYWx3YXlzIOyHuCA2LTEzNDU2LTIzNQorYWx3YXlzIOyHuSA2LTEzNDU2LTIzNgorYWx3YXlzIOyHuiA2LTEzNDU2LTI1NgorYWx3YXlzIOyHuyA2LTEzNDU2LTM1NgorYWx3YXlzIOyHvCA2LTM0NgorYWx3YXlzIOyHvSA2LTM0Ni0xCithbHdheXMg7Ie+IDYtMzQ2LTEtMQorYWx3YXlzIOyHvyA2LTM0Ni0xLTMKK2Fsd2F5cyDsiIAgNi0zNDYtMjUKK2Fsd2F5cyDsiIEgNi0zNDYtMjUtMTMKK2Fsd2F5cyDsiIIgNi0zNDYtMjUtMzU2CithbHdheXMg7IiDIDYtMzQ2LTM1CithbHdheXMg7IiEIDYtMzQ2LTIKK2Fsd2F5cyDsiIUgNi0zNDYtMi0xCithbHdheXMg7IiGIDYtMzQ2LTItMjYKK2Fsd2F5cyDsiIcgNi0zNDYtMi0xMgorYWx3YXlzIOyIiCA2LTM0Ni0yLTMKK2Fsd2F5cyDsiIkgNi0zNDYtMi0yMzYKK2Fsd2F5cyDsiIogNi0zNDYtMi0yNTYKK2Fsd2F5cyDsiIsgNi0zNDYtMi0zNTYKK2Fsd2F5cyDsiIwgNi0zNDYtMjYKK2Fsd2F5cyDsiI0gNi0zNDYtMTIKK2Fsd2F5cyDsiI4gNi0zNDYtMTItMworYWx3YXlzIOyIjyA2LTM0Ni0zCithbHdheXMg7IiQIDYtMzQ2LTMtMworYWx3YXlzIOyIkSA2LTM0Ni0yMzU2CithbHdheXMg7IiSIDYtMzQ2LTEzCithbHdheXMg7IiTIDYtMzQ2LTIzCithbHdheXMg7IiUIDYtMzQ2LTIzNQorYWx3YXlzIOyIlSA2LTM0Ni0yMzYKK2Fsd2F5cyDsiJYgNi0zNDYtMjU2CithbHdheXMg7IiXIDYtMzQ2LTM1NgorYWx3YXlzIOyImCA2LTEzNAorYWx3YXlzIOyImSA2LTEzNC0xCithbHdheXMg7IiaIDYtMTM0LTEtMQorYWx3YXlzIOyImyA2LTEzNC0xLTMKK2Fsd2F5cyDsiJwgNi0xMzQtMjUKK2Fsd2F5cyDsiJ0gNi0xMzQtMjUtMTMKK2Fsd2F5cyDsiJ4gNi0xMzQtMjUtMzU2CithbHdheXMg7IifIDYtMTM0LTM1CithbHdheXMg7IigIDYtMTM0LTIKK2Fsd2F5cyDsiKEgNi0xMzQtMi0xCithbHdheXMg7IiiIDYtMTM0LTItMjYKK2Fsd2F5cyDsiKMgNi0xMzQtMi0xMgorYWx3YXlzIOyIpCA2LTEzNC0yLTMKK2Fsd2F5cyDsiKUgNi0xMzQtMi0yMzYKK2Fsd2F5cyDsiKYgNi0xMzQtMi0yNTYKK2Fsd2F5cyDsiKcgNi0xMzQtMi0zNTYKK2Fsd2F5cyDsiKggNi0xMzQtMjYKK2Fsd2F5cyDsiKkgNi0xMzQtMTIKK2Fsd2F5cyDsiKogNi0xMzQtMTItMworYWx3YXlzIOyIqyA2LTEzNC0zCithbHdheXMg7IisIDYtMTM0LTMtMworYWx3YXlzIOyIrSA2LTEzNC0yMzU2CithbHdheXMg7IiuIDYtMTM0LTEzCithbHdheXMg7IivIDYtMTM0LTIzCithbHdheXMg7IiwIDYtMTM0LTIzNQorYWx3YXlzIOyIsSA2LTEzNC0yMzYKK2Fsd2F5cyDsiLIgNi0xMzQtMjU2CithbHdheXMg7IizIDYtMTM0LTM1NgorYWx3YXlzIOyItCA2LTEyMzQKK2Fsd2F5cyDsiLUgNi0xMjM0LTEKK2Fsd2F5cyDsiLYgNi0xMjM0LTEtMQorYWx3YXlzIOyItyA2LTEyMzQtMS0zCithbHdheXMg7Ii4IDYtMTIzNC0yNQorYWx3YXlzIOyIuSA2LTEyMzQtMjUtMTMKK2Fsd2F5cyDsiLogNi0xMjM0LTI1LTM1NgorYWx3YXlzIOyIuyA2LTEyMzQtMzUKK2Fsd2F5cyDsiLwgNi0xMjM0LTIKK2Fsd2F5cyDsiL0gNi0xMjM0LTItMQorYWx3YXlzIOyIviA2LTEyMzQtMi0yNgorYWx3YXlzIOyIvyA2LTEyMzQtMi0xMgorYWx3YXlzIOyJgCA2LTEyMzQtMi0zCithbHdheXMg7ImBIDYtMTIzNC0yLTIzNgorYWx3YXlzIOyJgiA2LTEyMzQtMi0yNTYKK2Fsd2F5cyDsiYMgNi0xMjM0LTItMzU2CithbHdheXMg7ImEIDYtMTIzNC0yNgorYWx3YXlzIOyJhSA2LTEyMzQtMTIKK2Fsd2F5cyDsiYYgNi0xMjM0LTEyLTMKK2Fsd2F5cyDsiYcgNi0xMjM0LTMKK2Fsd2F5cyDsiYggNi0xMjM0LTMtMworYWx3YXlzIOyJiSA2LTEyMzQtMjM1NgorYWx3YXlzIOyJiiA2LTEyMzQtMTMKK2Fsd2F5cyDsiYsgNi0xMjM0LTIzCithbHdheXMg7ImMIDYtMTIzNC0yMzUKK2Fsd2F5cyDsiY0gNi0xMjM0LTIzNgorYWx3YXlzIOyJjiA2LTEyMzQtMjU2CithbHdheXMg7ImPIDYtMTIzNC0zNTYKK2Fsd2F5cyDsiZAgNi0xMjM0LTEyMzUKK2Fsd2F5cyDsiZEgNi0xMjM0LTEyMzUtMQorYWx3YXlzIOyJkiA2LTEyMzQtMTIzNS0xLTEKK2Fsd2F5cyDsiZMgNi0xMjM0LTEyMzUtMS0zCithbHdheXMg7ImUIDYtMTIzNC0xMjM1LTI1CithbHdheXMg7ImVIDYtMTIzNC0xMjM1LTI1LTEzCithbHdheXMg7ImWIDYtMTIzNC0xMjM1LTI1LTM1NgorYWx3YXlzIOyJlyA2LTEyMzQtMTIzNS0zNQorYWx3YXlzIOyJmCA2LTEyMzQtMTIzNS0yCithbHdheXMg7ImZIDYtMTIzNC0xMjM1LTItMQorYWx3YXlzIOyJmiA2LTEyMzQtMTIzNS0yLTI2CithbHdheXMg7ImbIDYtMTIzNC0xMjM1LTItMTIKK2Fsd2F5cyDsiZwgNi0xMjM0LTEyMzUtMi0zCithbHdheXMg7ImdIDYtMTIzNC0xMjM1LTItMjM2CithbHdheXMg7ImeIDYtMTIzNC0xMjM1LTItMjU2CithbHdheXMg7ImfIDYtMTIzNC0xMjM1LTItMzU2CithbHdheXMg7ImgIDYtMTIzNC0xMjM1LTI2CithbHdheXMg7ImhIDYtMTIzNC0xMjM1LTEyCithbHdheXMg7ImiIDYtMTIzNC0xMjM1LTEyLTMKK2Fsd2F5cyDsiaMgNi0xMjM0LTEyMzUtMworYWx3YXlzIOyJpCA2LTEyMzQtMTIzNS0zLTMKK2Fsd2F5cyDsiaUgNi0xMjM0LTEyMzUtMjM1NgorYWx3YXlzIOyJpiA2LTEyMzQtMTIzNS0xMworYWx3YXlzIOyJpyA2LTEyMzQtMTIzNS0yMworYWx3YXlzIOyJqCA2LTEyMzQtMTIzNS0yMzUKK2Fsd2F5cyDsiakgNi0xMjM0LTEyMzUtMjM2CithbHdheXMg7ImqIDYtMTIzNC0xMjM1LTI1NgorYWx3YXlzIOyJqyA2LTEyMzQtMTIzNS0zNTYKK2Fsd2F5cyDsiawgNi0xMzQtMTIzNQorYWx3YXlzIOyJrSA2LTEzNC0xMjM1LTEKK2Fsd2F5cyDsia4gNi0xMzQtMTIzNS0xLTEKK2Fsd2F5cyDsia8gNi0xMzQtMTIzNS0xLTMKK2Fsd2F5cyDsibAgNi0xMzQtMTIzNS0yNQorYWx3YXlzIOyJsSA2LTEzNC0xMjM1LTI1LTEzCithbHdheXMg7ImyIDYtMTM0LTEyMzUtMjUtMzU2CithbHdheXMg7ImzIDYtMTM0LTEyMzUtMzUKK2Fsd2F5cyDsibQgNi0xMzQtMTIzNS0yCithbHdheXMg7Im1IDYtMTM0LTEyMzUtMi0xCithbHdheXMg7Im2IDYtMTM0LTEyMzUtMi0yNgorYWx3YXlzIOyJtyA2LTEzNC0xMjM1LTItMTIKK2Fsd2F5cyDsibggNi0xMzQtMTIzNS0yLTMKK2Fsd2F5cyDsibkgNi0xMzQtMTIzNS0yLTIzNgorYWx3YXlzIOyJuiA2LTEzNC0xMjM1LTItMjU2CithbHdheXMg7Im7IDYtMTM0LTEyMzUtMi0zNTYKK2Fsd2F5cyDsibwgNi0xMzQtMTIzNS0yNgorYWx3YXlzIOyJvSA2LTEzNC0xMjM1LTEyCithbHdheXMg7Im+IDYtMTM0LTEyMzUtMTItMworYWx3YXlzIOyJvyA2LTEzNC0xMjM1LTMKK2Fsd2F5cyDsioAgNi0xMzQtMTIzNS0zLTMKK2Fsd2F5cyDsioEgNi0xMzQtMTIzNS0yMzU2CithbHdheXMg7IqCIDYtMTM0LTEyMzUtMTMKK2Fsd2F5cyDsioMgNi0xMzQtMTIzNS0yMworYWx3YXlzIOyKhCA2LTEzNC0xMjM1LTIzNQorYWx3YXlzIOyKhSA2LTEzNC0xMjM1LTIzNgorYWx3YXlzIOyKhiA2LTEzNC0xMjM1LTI1NgorYWx3YXlzIOyKhyA2LTEzNC0xMjM1LTM1NgorYWx3YXlzIOyKiCA2LTE0NgorYWx3YXlzIOyKiSA2LTE0Ni0xCithbHdheXMg7IqKIDYtMTQ2LTEtMQorYWx3YXlzIOyKiyA2LTE0Ni0xLTMKK2Fsd2F5cyDsiowgNi0xNDYtMjUKK2Fsd2F5cyDsio0gNi0xNDYtMjUtMTMKK2Fsd2F5cyDsio4gNi0xNDYtMjUtMzU2CithbHdheXMg7IqPIDYtMTQ2LTM1CithbHdheXMg7IqQIDYtMTQ2LTIKK2Fsd2F5cyDsipEgNi0xNDYtMi0xCithbHdheXMg7IqSIDYtMTQ2LTItMjYKK2Fsd2F5cyDsipMgNi0xNDYtMi0xMgorYWx3YXlzIOyKlCA2LTE0Ni0yLTMKK2Fsd2F5cyDsipUgNi0xNDYtMi0yMzYKK2Fsd2F5cyDsipYgNi0xNDYtMi0yNTYKK2Fsd2F5cyDsipcgNi0xNDYtMi0zNTYKK2Fsd2F5cyDsipggNi0xNDYtMjYKK2Fsd2F5cyDsipkgNi0xNDYtMTIKK2Fsd2F5cyDsipogNi0xNDYtMTItMworYWx3YXlzIOyKmyA2LTE0Ni0zCithbHdheXMg7IqcIDYtMTQ2LTMtMworYWx3YXlzIOyKnSA2LTE0Ni0yMzU2CithbHdheXMg7IqeIDYtMTQ2LTEzCithbHdheXMg7IqfIDYtMTQ2LTIzCithbHdheXMg7IqgIDYtMTQ2LTIzNQorYWx3YXlzIOyKoSA2LTE0Ni0yMzYKK2Fsd2F5cyDsiqIgNi0xNDYtMjU2CithbHdheXMg7IqjIDYtMTQ2LTM1NgorYWx3YXlzIOyKpCA2LTI0NgorYWx3YXlzIOyKpSA2LTI0Ni0xCithbHdheXMg7IqmIDYtMjQ2LTEtMQorYWx3YXlzIOyKpyA2LTI0Ni0xLTMKK2Fsd2F5cyDsiqggNi0yNDYtMjUKK2Fsd2F5cyDsiqkgNi0yNDYtMjUtMTMKK2Fsd2F5cyDsiqogNi0yNDYtMjUtMzU2CithbHdheXMg7IqrIDYtMjQ2LTM1CithbHdheXMg7IqsIDYtMjQ2LTIKK2Fsd2F5cyDsiq0gNi0yNDYtMi0xCithbHdheXMg7IquIDYtMjQ2LTItMjYKK2Fsd2F5cyDsiq8gNi0yNDYtMi0xMgorYWx3YXlzIOyKsCA2LTI0Ni0yLTMKK2Fsd2F5cyDsirEgNi0yNDYtMi0yMzYKK2Fsd2F5cyDsirIgNi0yNDYtMi0yNTYKK2Fsd2F5cyDsirMgNi0yNDYtMi0zNTYKK2Fsd2F5cyDsirQgNi0yNDYtMjYKK2Fsd2F5cyDsirUgNi0yNDYtMTIKK2Fsd2F5cyDsirYgNi0yNDYtMTItMworYWx3YXlzIOyKtyA2LTI0Ni0zCithbHdheXMg7Iq4IDYtMjQ2LTMtMworYWx3YXlzIOyKuSA2LTI0Ni0yMzU2CithbHdheXMg7Iq6IDYtMjQ2LTEzCithbHdheXMg7Iq7IDYtMjQ2LTIzCithbHdheXMg7Iq8IDYtMjQ2LTIzNQorYWx3YXlzIOyKvSA2LTI0Ni0yMzYKK2Fsd2F5cyDsir4gNi0yNDYtMjU2CithbHdheXMg7Iq/IDYtMjQ2LTM1NgorYWx3YXlzIOyLgCA2LTI0NTYKK2Fsd2F5cyDsi4EgNi0yNDU2LTEKK2Fsd2F5cyDsi4IgNi0yNDU2LTEtMQorYWx3YXlzIOyLgyA2LTI0NTYtMS0zCithbHdheXMg7IuEIDYtMjQ1Ni0yNQorYWx3YXlzIOyLhSA2LTI0NTYtMjUtMTMKK2Fsd2F5cyDsi4YgNi0yNDU2LTI1LTM1NgorYWx3YXlzIOyLhyA2LTI0NTYtMzUKK2Fsd2F5cyDsi4ggNi0yNDU2LTIKK2Fsd2F5cyDsi4kgNi0yNDU2LTItMQorYWx3YXlzIOyLiiA2LTI0NTYtMi0yNgorYWx3YXlzIOyLiyA2LTI0NTYtMi0xMgorYWx3YXlzIOyLjCA2LTI0NTYtMi0zCithbHdheXMg7IuNIDYtMjQ1Ni0yLTIzNgorYWx3YXlzIOyLjiA2LTI0NTYtMi0yNTYKK2Fsd2F5cyDsi48gNi0yNDU2LTItMzU2CithbHdheXMg7IuQIDYtMjQ1Ni0yNgorYWx3YXlzIOyLkSA2LTI0NTYtMTIKK2Fsd2F5cyDsi5IgNi0yNDU2LTEyLTMKK2Fsd2F5cyDsi5MgNi0yNDU2LTMKK2Fsd2F5cyDsi5QgNi0yNDU2LTMtMworYWx3YXlzIOyLlSA2LTI0NTYtMjM1NgorYWx3YXlzIOyLliA2LTI0NTYtMTMKK2Fsd2F5cyDsi5cgNi0yNDU2LTIzCithbHdheXMg7IuYIDYtMjQ1Ni0yMzUKK2Fsd2F5cyDsi5kgNi0yNDU2LTIzNgorYWx3YXlzIOyLmiA2LTI0NTYtMjU2CithbHdheXMg7IubIDYtMjQ1Ni0zNTYKK2Fsd2F5cyDsi5wgNi0xMzUKK2Fsd2F5cyDsi50gNi0xMzUtMQorYWx3YXlzIOyLniA2LTEzNS0xLTEKK2Fsd2F5cyDsi58gNi0xMzUtMS0zCithbHdheXMg7IugIDYtMTM1LTI1CithbHdheXMg7IuhIDYtMTM1LTI1LTEzCithbHdheXMg7IuiIDYtMTM1LTI1LTM1NgorYWx3YXlzIOyLoyA2LTEzNS0zNQorYWx3YXlzIOyLpCA2LTEzNS0yCithbHdheXMg7IulIDYtMTM1LTItMQorYWx3YXlzIOyLpiA2LTEzNS0yLTI2CithbHdheXMg7IunIDYtMTM1LTItMTIKK2Fsd2F5cyDsi6ggNi0xMzUtMi0zCithbHdheXMg7IupIDYtMTM1LTItMjM2CithbHdheXMg7IuqIDYtMTM1LTItMjU2CithbHdheXMg7IurIDYtMTM1LTItMzU2CithbHdheXMg7IusIDYtMTM1LTI2CithbHdheXMg7IutIDYtMTM1LTEyCithbHdheXMg7IuuIDYtMTM1LTEyLTMKK2Fsd2F5cyDsi68gNi0xMzUtMworYWx3YXlzIOyLsCA2LTEzNS0zLTMKK2Fsd2F5cyDsi7EgNi0xMzUtMjM1NgorYWx3YXlzIOyLsiA2LTEzNS0xMworYWx3YXlzIOyLsyA2LTEzNS0yMworYWx3YXlzIOyLtCA2LTEzNS0yMzUKK2Fsd2F5cyDsi7UgNi0xMzUtMjM2CithbHdheXMg7Iu2IDYtMTM1LTI1NgorYWx3YXlzIOyLtyA2LTEzNS0zNTYKK2Fsd2F5cyDsi7ggNi02LTEyNgorYWx3YXlzIOyLuSA2LTYtMTI2LTEKK2Fsd2F5cyDsi7ogNi02LTEyNi0xLTEKK2Fsd2F5cyDsi7sgNi02LTEyNi0xLTMKK2Fsd2F5cyDsi7wgNi02LTEyNi0yNQorYWx3YXlzIOyLvSA2LTYtMTI2LTI1LTEzCithbHdheXMg7Iu+IDYtNi0xMjYtMjUtMzU2CithbHdheXMg7Iu/IDYtNi0xMjYtMzUKK2Fsd2F5cyDsjIAgNi02LTEyNi0yCithbHdheXMg7IyBIDYtNi0xMjYtMi0xCithbHdheXMg7IyCIDYtNi0xMjYtMi0yNgorYWx3YXlzIOyMgyA2LTYtMTI2LTItMTIKK2Fsd2F5cyDsjIQgNi02LTEyNi0yLTMKK2Fsd2F5cyDsjIUgNi02LTEyNi0yLTIzNgorYWx3YXlzIOyMhiA2LTYtMTI2LTItMjU2CithbHdheXMg7IyHIDYtNi0xMjYtMi0zNTYKK2Fsd2F5cyDsjIggNi02LTEyNi0yNgorYWx3YXlzIOyMiSA2LTYtMTI2LTEyCithbHdheXMg7IyKIDYtNi0xMjYtMTItMworYWx3YXlzIOyMiyA2LTYtMTI2LTMKK2Fsd2F5cyDsjIwgNi02LTEyNi0zLTMKK2Fsd2F5cyDsjI0gNi02LTEyNi0yMzU2CithbHdheXMg7IyOIDYtNi0xMjYtMTMKK2Fsd2F5cyDsjI8gNi02LTEyNi0yMworYWx3YXlzIOyMkCA2LTYtMTI2LTIzNQorYWx3YXlzIOyMkSA2LTYtMTI2LTIzNgorYWx3YXlzIOyMkiA2LTYtMTI2LTI1NgorYWx3YXlzIOyMkyA2LTYtMTI2LTM1NgorYWx3YXlzIOyMlCA2LTYtMTIzNQorYWx3YXlzIOyMlSA2LTYtMTIzNS0xCithbHdheXMg7IyWIDYtNi0xMjM1LTEtMQorYWx3YXlzIOyMlyA2LTYtMTIzNS0xLTMKK2Fsd2F5cyDsjJggNi02LTEyMzUtMjUKK2Fsd2F5cyDsjJkgNi02LTEyMzUtMjUtMTMKK2Fsd2F5cyDsjJogNi02LTEyMzUtMjUtMzU2CithbHdheXMg7IybIDYtNi0xMjM1LTM1CithbHdheXMg7IycIDYtNi0xMjM1LTIKK2Fsd2F5cyDsjJ0gNi02LTEyMzUtMi0xCithbHdheXMg7IyeIDYtNi0xMjM1LTItMjYKK2Fsd2F5cyDsjJ8gNi02LTEyMzUtMi0xMgorYWx3YXlzIOyMoCA2LTYtMTIzNS0yLTMKK2Fsd2F5cyDsjKEgNi02LTEyMzUtMi0yMzYKK2Fsd2F5cyDsjKIgNi02LTEyMzUtMi0yNTYKK2Fsd2F5cyDsjKMgNi02LTEyMzUtMi0zNTYKK2Fsd2F5cyDsjKQgNi02LTEyMzUtMjYKK2Fsd2F5cyDsjKUgNi02LTEyMzUtMTIKK2Fsd2F5cyDsjKYgNi02LTEyMzUtMTItMworYWx3YXlzIOyMpyA2LTYtMTIzNS0zCithbHdheXMg7IyoIDYtNi0xMjM1LTMtMworYWx3YXlzIOyMqSA2LTYtMTIzNS0yMzU2CithbHdheXMg7IyqIDYtNi0xMjM1LTEzCithbHdheXMg7IyrIDYtNi0xMjM1LTIzCithbHdheXMg7IysIDYtNi0xMjM1LTIzNQorYWx3YXlzIOyMrSA2LTYtMTIzNS0yMzYKK2Fsd2F5cyDsjK4gNi02LTEyMzUtMjU2CithbHdheXMg7IyvIDYtNi0xMjM1LTM1NgorYWx3YXlzIOyMsCA2LTYtMzQ1CithbHdheXMg7IyxIDYtNi0zNDUtMQorYWx3YXlzIOyMsiA2LTYtMzQ1LTEtMQorYWx3YXlzIOyMsyA2LTYtMzQ1LTEtMworYWx3YXlzIOyMtCA2LTYtMzQ1LTI1CithbHdheXMg7Iy1IDYtNi0zNDUtMjUtMTMKK2Fsd2F5cyDsjLYgNi02LTM0NS0yNS0zNTYKK2Fsd2F5cyDsjLcgNi02LTM0NS0zNQorYWx3YXlzIOyMuCA2LTYtMzQ1LTIKK2Fsd2F5cyDsjLkgNi02LTM0NS0yLTEKK2Fsd2F5cyDsjLogNi02LTM0NS0yLTI2CithbHdheXMg7Iy7IDYtNi0zNDUtMi0xMgorYWx3YXlzIOyMvCA2LTYtMzQ1LTItMworYWx3YXlzIOyMvSA2LTYtMzQ1LTItMjM2CithbHdheXMg7Iy+IDYtNi0zNDUtMi0yNTYKK2Fsd2F5cyDsjL8gNi02LTM0NS0yLTM1NgorYWx3YXlzIOyNgCA2LTYtMzQ1LTI2CithbHdheXMg7I2BIDYtNi0zNDUtMTIKK2Fsd2F5cyDsjYIgNi02LTM0NS0xMi0zCithbHdheXMg7I2DIDYtNi0zNDUtMworYWx3YXlzIOyNhCA2LTYtMzQ1LTMtMworYWx3YXlzIOyNhSA2LTYtMzQ1LTIzNTYKK2Fsd2F5cyDsjYYgNi02LTM0NS0xMworYWx3YXlzIOyNhyA2LTYtMzQ1LTIzCithbHdheXMg7I2IIDYtNi0zNDUtMjM1CithbHdheXMg7I2JIDYtNi0zNDUtMjM2CithbHdheXMg7I2KIDYtNi0zNDUtMjU2CithbHdheXMg7I2LIDYtNi0zNDUtMzU2CithbHdheXMg7I2MIDYtNi0zNDUtMTIzNQorYWx3YXlzIOyNjSA2LTYtMzQ1LTEyMzUtMQorYWx3YXlzIOyNjiA2LTYtMzQ1LTEyMzUtMS0xCithbHdheXMg7I2PIDYtNi0zNDUtMTIzNS0xLTMKK2Fsd2F5cyDsjZAgNi02LTM0NS0xMjM1LTI1CithbHdheXMg7I2RIDYtNi0zNDUtMTIzNS0yNS0xMworYWx3YXlzIOyNkiA2LTYtMzQ1LTEyMzUtMjUtMzU2CithbHdheXMg7I2TIDYtNi0zNDUtMTIzNS0zNQorYWx3YXlzIOyNlCA2LTYtMzQ1LTEyMzUtMgorYWx3YXlzIOyNlSA2LTYtMzQ1LTEyMzUtMi0xCithbHdheXMg7I2WIDYtNi0zNDUtMTIzNS0yLTI2CithbHdheXMg7I2XIDYtNi0zNDUtMTIzNS0yLTEyCithbHdheXMg7I2YIDYtNi0zNDUtMTIzNS0yLTMKK2Fsd2F5cyDsjZkgNi02LTM0NS0xMjM1LTItMjM2CithbHdheXMg7I2aIDYtNi0zNDUtMTIzNS0yLTI1NgorYWx3YXlzIOyNmyA2LTYtMzQ1LTEyMzUtMi0zNTYKK2Fsd2F5cyDsjZwgNi02LTM0NS0xMjM1LTI2CithbHdheXMg7I2dIDYtNi0zNDUtMTIzNS0xMgorYWx3YXlzIOyNniA2LTYtMzQ1LTEyMzUtMTItMworYWx3YXlzIOyNnyA2LTYtMzQ1LTEyMzUtMworYWx3YXlzIOyNoCA2LTYtMzQ1LTEyMzUtMy0zCithbHdheXMg7I2hIDYtNi0zNDUtMTIzNS0yMzU2CithbHdheXMg7I2iIDYtNi0zNDUtMTIzNS0xMworYWx3YXlzIOyNoyA2LTYtMzQ1LTEyMzUtMjMKK2Fsd2F5cyDsjaQgNi02LTM0NS0xMjM1LTIzNQorYWx3YXlzIOyNpSA2LTYtMzQ1LTEyMzUtMjM2CithbHdheXMg7I2mIDYtNi0zNDUtMTIzNS0yNTYKK2Fsd2F5cyDsjacgNi02LTM0NS0xMjM1LTM1NgorYWx3YXlzIOyNqCA2LTYtMjM0CithbHdheXMg7I2pIDYtNi0yMzQtMQorYWx3YXlzIOyNqiA2LTYtMjM0LTEtMQorYWx3YXlzIOyNqyA2LTYtMjM0LTEtMworYWx3YXlzIOyNrCA2LTYtMjM0LTI1CithbHdheXMg7I2tIDYtNi0yMzQtMjUtMTMKK2Fsd2F5cyDsja4gNi02LTIzNC0yNS0zNTYKK2Fsd2F5cyDsja8gNi02LTIzNC0zNQorYWx3YXlzIOyNsCA2LTYtMjM0LTIKK2Fsd2F5cyDsjbEgNi02LTIzNC0yLTEKK2Fsd2F5cyDsjbIgNi02LTIzNC0yLTI2CithbHdheXMg7I2zIDYtNi0yMzQtMi0xMgorYWx3YXlzIOyNtCA2LTYtMjM0LTItMworYWx3YXlzIOyNtSA2LTYtMjM0LTItMjM2CithbHdheXMg7I22IDYtNi0yMzQtMi0yNTYKK2Fsd2F5cyDsjbcgNi02LTIzNC0yLTM1NgorYWx3YXlzIOyNuCA2LTYtMjM0LTI2CithbHdheXMg7I25IDYtNi0yMzQtMTIKK2Fsd2F5cyDsjbogNi02LTIzNC0xMi0zCithbHdheXMg7I27IDYtNi0yMzQtMworYWx3YXlzIOyNvCA2LTYtMjM0LTMtMworYWx3YXlzIOyNvSA2LTYtMjM0LTIzNTYKK2Fsd2F5cyDsjb4gNi02LTIzNC0xMworYWx3YXlzIOyNvyA2LTYtMjM0LTIzCithbHdheXMg7I6AIDYtNi0yMzQtMjM1CithbHdheXMg7I6BIDYtNi0yMzQtMjM2CithbHdheXMg7I6CIDYtNi0yMzQtMjU2CithbHdheXMg7I6DIDYtNi0yMzQtMzU2CithbHdheXMg7I6EIDYtNi0xMzQ1CithbHdheXMg7I6FIDYtNi0xMzQ1LTEKK2Fsd2F5cyDsjoYgNi02LTEzNDUtMS0xCithbHdheXMg7I6HIDYtNi0xMzQ1LTEtMworYWx3YXlzIOyOiCA2LTYtMTM0NS0yNQorYWx3YXlzIOyOiSA2LTYtMTM0NS0yNS0xMworYWx3YXlzIOyOiiA2LTYtMTM0NS0yNS0zNTYKK2Fsd2F5cyDsjosgNi02LTEzNDUtMzUKK2Fsd2F5cyDsjowgNi02LTEzNDUtMgorYWx3YXlzIOyOjSA2LTYtMTM0NS0yLTEKK2Fsd2F5cyDsjo4gNi02LTEzNDUtMi0yNgorYWx3YXlzIOyOjyA2LTYtMTM0NS0yLTEyCithbHdheXMg7I6QIDYtNi0xMzQ1LTItMworYWx3YXlzIOyOkSA2LTYtMTM0NS0yLTIzNgorYWx3YXlzIOyOkiA2LTYtMTM0NS0yLTI1NgorYWx3YXlzIOyOkyA2LTYtMTM0NS0yLTM1NgorYWx3YXlzIOyOlCA2LTYtMTM0NS0yNgorYWx3YXlzIOyOlSA2LTYtMTM0NS0xMgorYWx3YXlzIOyOliA2LTYtMTM0NS0xMi0zCithbHdheXMg7I6XIDYtNi0xMzQ1LTMKK2Fsd2F5cyDsjpggNi02LTEzNDUtMy0zCithbHdheXMg7I6ZIDYtNi0xMzQ1LTIzNTYKK2Fsd2F5cyDsjpogNi02LTEzNDUtMTMKK2Fsd2F5cyDsjpsgNi02LTEzNDUtMjMKK2Fsd2F5cyDsjpwgNi02LTEzNDUtMjM1CithbHdheXMg7I6dIDYtNi0xMzQ1LTIzNgorYWx3YXlzIOyOniA2LTYtMTM0NS0yNTYKK2Fsd2F5cyDsjp8gNi02LTEzNDUtMzU2CithbHdheXMg7I6gIDYtNi0xNTYKK2Fsd2F5cyDsjqEgNi02LTE1Ni0xCithbHdheXMg7I6iIDYtNi0xNTYtMS0xCithbHdheXMg7I6jIDYtNi0xNTYtMS0zCithbHdheXMg7I6kIDYtNi0xNTYtMjUKK2Fsd2F5cyDsjqUgNi02LTE1Ni0yNS0xMworYWx3YXlzIOyOpiA2LTYtMTU2LTI1LTM1NgorYWx3YXlzIOyOpyA2LTYtMTU2LTM1CithbHdheXMg7I6oIDYtNi0xNTYtMgorYWx3YXlzIOyOqSA2LTYtMTU2LTItMQorYWx3YXlzIOyOqiA2LTYtMTU2LTItMjYKK2Fsd2F5cyDsjqsgNi02LTE1Ni0yLTEyCithbHdheXMg7I6sIDYtNi0xNTYtMi0zCithbHdheXMg7I6tIDYtNi0xNTYtMi0yMzYKK2Fsd2F5cyDsjq4gNi02LTE1Ni0yLTI1NgorYWx3YXlzIOyOryA2LTYtMTU2LTItMzU2CithbHdheXMg7I6wIDYtNi0xNTYtMjYKK2Fsd2F5cyDsjrEgNi02LTE1Ni0xMgorYWx3YXlzIOyOsiA2LTYtMTU2LTEyLTMKK2Fsd2F5cyDsjrMgNi02LTE1Ni0zCithbHdheXMg7I60IDYtNi0xNTYtMy0zCithbHdheXMg7I61IDYtNi0xNTYtMjM1NgorYWx3YXlzIOyOtiA2LTYtMTU2LTEzCithbHdheXMg7I63IDYtNi0xNTYtMjMKK2Fsd2F5cyDsjrggNi02LTE1Ni0yMzUKK2Fsd2F5cyDsjrkgNi02LTE1Ni0yMzYKK2Fsd2F5cyDsjrogNi02LTE1Ni0yNTYKK2Fsd2F5cyDsjrsgNi02LTE1Ni0zNTYKK2Fsd2F5cyDsjrwgNi02LTM0CithbHdheXMg7I69IDYtNi0zNC0xCithbHdheXMg7I6+IDYtNi0zNC0xLTEKK2Fsd2F5cyDsjr8gNi02LTM0LTEtMworYWx3YXlzIOyPgCA2LTYtMzQtMjUKK2Fsd2F5cyDsj4EgNi02LTM0LTI1LTEzCithbHdheXMg7I+CIDYtNi0zNC0yNS0zNTYKK2Fsd2F5cyDsj4MgNi02LTM0LTM1CithbHdheXMg7I+EIDYtNi0zNC0yCithbHdheXMg7I+FIDYtNi0zNC0yLTEKK2Fsd2F5cyDsj4YgNi02LTM0LTItMjYKK2Fsd2F5cyDsj4cgNi02LTM0LTItMTIKK2Fsd2F5cyDsj4ggNi02LTM0LTItMworYWx3YXlzIOyPiSA2LTYtMzQtMi0yMzYKK2Fsd2F5cyDsj4ogNi02LTM0LTItMjU2CithbHdheXMg7I+LIDYtNi0zNC0yLTM1NgorYWx3YXlzIOyPjCA2LTYtMzQtMjYKK2Fsd2F5cyDsj40gNi02LTM0LTEyCithbHdheXMg7I+OIDYtNi0zNC0xMi0zCithbHdheXMg7I+PIDYtNi0zNC0zCithbHdheXMg7I+QIDYtNi0zNC0zLTMKK2Fsd2F5cyDsj5EgNi02LTM0LTIzNTYKK2Fsd2F5cyDsj5IgNi02LTM0LTEzCithbHdheXMg7I+TIDYtNi0zNC0yMworYWx3YXlzIOyPlCA2LTYtMzQtMjM1CithbHdheXMg7I+VIDYtNi0zNC0yMzYKK2Fsd2F5cyDsj5YgNi02LTM0LTI1NgorYWx3YXlzIOyPlyA2LTYtMzQtMzU2CithbHdheXMg7I+YIDYtNi0xMzYKK2Fsd2F5cyDsj5kgNi02LTEzNi0xCithbHdheXMg7I+aIDYtNi0xMzYtMS0xCithbHdheXMg7I+bIDYtNi0xMzYtMS0zCithbHdheXMg7I+cIDYtNi0xMzYtMjUKK2Fsd2F5cyDsj50gNi02LTEzNi0yNS0xMworYWx3YXlzIOyPniA2LTYtMTM2LTI1LTM1NgorYWx3YXlzIOyPnyA2LTYtMTM2LTM1CithbHdheXMg7I+gIDYtNi0xMzYtMgorYWx3YXlzIOyPoSA2LTYtMTM2LTItMQorYWx3YXlzIOyPoiA2LTYtMTM2LTItMjYKK2Fsd2F5cyDsj6MgNi02LTEzNi0yLTEyCithbHdheXMg7I+kIDYtNi0xMzYtMi0zCithbHdheXMg7I+lIDYtNi0xMzYtMi0yMzYKK2Fsd2F5cyDsj6YgNi02LTEzNi0yLTI1NgorYWx3YXlzIOyPpyA2LTYtMTM2LTItMzU2CithbHdheXMg7I+oIDYtNi0xMzYtMjYKK2Fsd2F5cyDsj6kgNi02LTEzNi0xMgorYWx3YXlzIOyPqiA2LTYtMTM2LTEyLTMKK2Fsd2F5cyDsj6sgNi02LTEzNi0zCithbHdheXMg7I+sIDYtNi0xMzYtMy0zCithbHdheXMg7I+tIDYtNi0xMzYtMjM1NgorYWx3YXlzIOyPriA2LTYtMTM2LTEzCithbHdheXMg7I+vIDYtNi0xMzYtMjMKK2Fsd2F5cyDsj7AgNi02LTEzNi0yMzUKK2Fsd2F5cyDsj7EgNi02LTEzNi0yMzYKK2Fsd2F5cyDsj7IgNi02LTEzNi0yNTYKK2Fsd2F5cyDsj7MgNi02LTEzNi0zNTYKK2Fsd2F5cyDsj7QgNi02LTEyMzYKK2Fsd2F5cyDsj7UgNi02LTEyMzYtMQorYWx3YXlzIOyPtiA2LTYtMTIzNi0xLTEKK2Fsd2F5cyDsj7cgNi02LTEyMzYtMS0zCithbHdheXMg7I+4IDYtNi0xMjM2LTI1CithbHdheXMg7I+5IDYtNi0xMjM2LTI1LTEzCithbHdheXMg7I+6IDYtNi0xMjM2LTI1LTM1NgorYWx3YXlzIOyPuyA2LTYtMTIzNi0zNQorYWx3YXlzIOyPvCA2LTYtMTIzNi0yCithbHdheXMg7I+9IDYtNi0xMjM2LTItMQorYWx3YXlzIOyPviA2LTYtMTIzNi0yLTI2CithbHdheXMg7I+/IDYtNi0xMjM2LTItMTIKK2Fsd2F5cyDskIAgNi02LTEyMzYtMi0zCithbHdheXMg7JCBIDYtNi0xMjM2LTItMjM2CithbHdheXMg7JCCIDYtNi0xMjM2LTItMjU2CithbHdheXMg7JCDIDYtNi0xMjM2LTItMzU2CithbHdheXMg7JCEIDYtNi0xMjM2LTI2CithbHdheXMg7JCFIDYtNi0xMjM2LTEyCithbHdheXMg7JCGIDYtNi0xMjM2LTEyLTMKK2Fsd2F5cyDskIcgNi02LTEyMzYtMworYWx3YXlzIOyQiCA2LTYtMTIzNi0zLTMKK2Fsd2F5cyDskIkgNi02LTEyMzYtMjM1NgorYWx3YXlzIOyQiiA2LTYtMTIzNi0xMworYWx3YXlzIOyQiyA2LTYtMTIzNi0yMworYWx3YXlzIOyQjCA2LTYtMTIzNi0yMzUKK2Fsd2F5cyDskI0gNi02LTEyMzYtMjM2CithbHdheXMg7JCOIDYtNi0xMjM2LTI1NgorYWx3YXlzIOyQjyA2LTYtMTIzNi0zNTYKK2Fsd2F5cyDskJAgNi02LTEyMzYtMTIzNQorYWx3YXlzIOyQkSA2LTYtMTIzNi0xMjM1LTEKK2Fsd2F5cyDskJIgNi02LTEyMzYtMTIzNS0xLTEKK2Fsd2F5cyDskJMgNi02LTEyMzYtMTIzNS0xLTMKK2Fsd2F5cyDskJQgNi02LTEyMzYtMTIzNS0yNQorYWx3YXlzIOyQlSA2LTYtMTIzNi0xMjM1LTI1LTEzCithbHdheXMg7JCWIDYtNi0xMjM2LTEyMzUtMjUtMzU2CithbHdheXMg7JCXIDYtNi0xMjM2LTEyMzUtMzUKK2Fsd2F5cyDskJggNi02LTEyMzYtMTIzNS0yCithbHdheXMg7JCZIDYtNi0xMjM2LTEyMzUtMi0xCithbHdheXMg7JCaIDYtNi0xMjM2LTEyMzUtMi0yNgorYWx3YXlzIOyQmyA2LTYtMTIzNi0xMjM1LTItMTIKK2Fsd2F5cyDskJwgNi02LTEyMzYtMTIzNS0yLTMKK2Fsd2F5cyDskJ0gNi02LTEyMzYtMTIzNS0yLTIzNgorYWx3YXlzIOyQniA2LTYtMTIzNi0xMjM1LTItMjU2CithbHdheXMg7JCfIDYtNi0xMjM2LTEyMzUtMi0zNTYKK2Fsd2F5cyDskKAgNi02LTEyMzYtMTIzNS0yNgorYWx3YXlzIOyQoSA2LTYtMTIzNi0xMjM1LTEyCithbHdheXMg7JCiIDYtNi0xMjM2LTEyMzUtMTItMworYWx3YXlzIOyQoyA2LTYtMTIzNi0xMjM1LTMKK2Fsd2F5cyDskKQgNi02LTEyMzYtMTIzNS0zLTMKK2Fsd2F5cyDskKUgNi02LTEyMzYtMTIzNS0yMzU2CithbHdheXMg7JCmIDYtNi0xMjM2LTEyMzUtMTMKK2Fsd2F5cyDskKcgNi02LTEyMzYtMTIzNS0yMworYWx3YXlzIOyQqCA2LTYtMTIzNi0xMjM1LTIzNQorYWx3YXlzIOyQqSA2LTYtMTIzNi0xMjM1LTIzNgorYWx3YXlzIOyQqiA2LTYtMTIzNi0xMjM1LTI1NgorYWx3YXlzIOyQqyA2LTYtMTIzNi0xMjM1LTM1NgorYWx3YXlzIOyQrCA2LTYtMTM0NTYKK2Fsd2F5cyDskK0gNi02LTEzNDU2LTEKK2Fsd2F5cyDskK4gNi02LTEzNDU2LTEtMQorYWx3YXlzIOyQryA2LTYtMTM0NTYtMS0zCithbHdheXMg7JCwIDYtNi0xMzQ1Ni0yNQorYWx3YXlzIOyQsSA2LTYtMTM0NTYtMjUtMTMKK2Fsd2F5cyDskLIgNi02LTEzNDU2LTI1LTM1NgorYWx3YXlzIOyQsyA2LTYtMTM0NTYtMzUKK2Fsd2F5cyDskLQgNi02LTEzNDU2LTIKK2Fsd2F5cyDskLUgNi02LTEzNDU2LTItMQorYWx3YXlzIOyQtiA2LTYtMTM0NTYtMi0yNgorYWx3YXlzIOyQtyA2LTYtMTM0NTYtMi0xMgorYWx3YXlzIOyQuCA2LTYtMTM0NTYtMi0zCithbHdheXMg7JC5IDYtNi0xMzQ1Ni0yLTIzNgorYWx3YXlzIOyQuiA2LTYtMTM0NTYtMi0yNTYKK2Fsd2F5cyDskLsgNi02LTEzNDU2LTItMzU2CithbHdheXMg7JC8IDYtNi0xMzQ1Ni0yNgorYWx3YXlzIOyQvSA2LTYtMTM0NTYtMTIKK2Fsd2F5cyDskL4gNi02LTEzNDU2LTEyLTMKK2Fsd2F5cyDskL8gNi02LTEzNDU2LTMKK2Fsd2F5cyDskYAgNi02LTEzNDU2LTMtMworYWx3YXlzIOyRgSA2LTYtMTM0NTYtMjM1NgorYWx3YXlzIOyRgiA2LTYtMTM0NTYtMTMKK2Fsd2F5cyDskYMgNi02LTEzNDU2LTIzCithbHdheXMg7JGEIDYtNi0xMzQ1Ni0yMzUKK2Fsd2F5cyDskYUgNi02LTEzNDU2LTIzNgorYWx3YXlzIOyRhiA2LTYtMTM0NTYtMjU2CithbHdheXMg7JGHIDYtNi0xMzQ1Ni0zNTYKK2Fsd2F5cyDskYggNi02LTM0NgorYWx3YXlzIOyRiSA2LTYtMzQ2LTEKK2Fsd2F5cyDskYogNi02LTM0Ni0xLTEKK2Fsd2F5cyDskYsgNi02LTM0Ni0xLTMKK2Fsd2F5cyDskYwgNi02LTM0Ni0yNQorYWx3YXlzIOyRjSA2LTYtMzQ2LTI1LTEzCithbHdheXMg7JGOIDYtNi0zNDYtMjUtMzU2CithbHdheXMg7JGPIDYtNi0zNDYtMzUKK2Fsd2F5cyDskZAgNi02LTM0Ni0yCithbHdheXMg7JGRIDYtNi0zNDYtMi0xCithbHdheXMg7JGSIDYtNi0zNDYtMi0yNgorYWx3YXlzIOyRkyA2LTYtMzQ2LTItMTIKK2Fsd2F5cyDskZQgNi02LTM0Ni0yLTMKK2Fsd2F5cyDskZUgNi02LTM0Ni0yLTIzNgorYWx3YXlzIOyRliA2LTYtMzQ2LTItMjU2CithbHdheXMg7JGXIDYtNi0zNDYtMi0zNTYKK2Fsd2F5cyDskZggNi02LTM0Ni0yNgorYWx3YXlzIOyRmSA2LTYtMzQ2LTEyCithbHdheXMg7JGaIDYtNi0zNDYtMTItMworYWx3YXlzIOyRmyA2LTYtMzQ2LTMKK2Fsd2F5cyDskZwgNi02LTM0Ni0zLTMKK2Fsd2F5cyDskZ0gNi02LTM0Ni0yMzU2CithbHdheXMg7JGeIDYtNi0zNDYtMTMKK2Fsd2F5cyDskZ8gNi02LTM0Ni0yMworYWx3YXlzIOyRoCA2LTYtMzQ2LTIzNQorYWx3YXlzIOyRoSA2LTYtMzQ2LTIzNgorYWx3YXlzIOyRoiA2LTYtMzQ2LTI1NgorYWx3YXlzIOyRoyA2LTYtMzQ2LTM1NgorYWx3YXlzIOyRpCA2LTYtMTM0CithbHdheXMg7JGlIDYtNi0xMzQtMQorYWx3YXlzIOyRpiA2LTYtMTM0LTEtMQorYWx3YXlzIOyRpyA2LTYtMTM0LTEtMworYWx3YXlzIOyRqCA2LTYtMTM0LTI1CithbHdheXMg7JGpIDYtNi0xMzQtMjUtMTMKK2Fsd2F5cyDskaogNi02LTEzNC0yNS0zNTYKK2Fsd2F5cyDskasgNi02LTEzNC0zNQorYWx3YXlzIOyRrCA2LTYtMTM0LTIKK2Fsd2F5cyDska0gNi02LTEzNC0yLTEKK2Fsd2F5cyDska4gNi02LTEzNC0yLTI2CithbHdheXMg7JGvIDYtNi0xMzQtMi0xMgorYWx3YXlzIOyRsCA2LTYtMTM0LTItMworYWx3YXlzIOyRsSA2LTYtMTM0LTItMjM2CithbHdheXMg7JGyIDYtNi0xMzQtMi0yNTYKK2Fsd2F5cyDskbMgNi02LTEzNC0yLTM1NgorYWx3YXlzIOyRtCA2LTYtMTM0LTI2CithbHdheXMg7JG1IDYtNi0xMzQtMTIKK2Fsd2F5cyDskbYgNi02LTEzNC0xMi0zCithbHdheXMg7JG3IDYtNi0xMzQtMworYWx3YXlzIOyRuCA2LTYtMTM0LTMtMworYWx3YXlzIOyRuSA2LTYtMTM0LTIzNTYKK2Fsd2F5cyDskbogNi02LTEzNC0xMworYWx3YXlzIOyRuyA2LTYtMTM0LTIzCithbHdheXMg7JG8IDYtNi0xMzQtMjM1CithbHdheXMg7JG9IDYtNi0xMzQtMjM2CithbHdheXMg7JG+IDYtNi0xMzQtMjU2CithbHdheXMg7JG/IDYtNi0xMzQtMzU2CithbHdheXMg7JKAIDYtNi0xMjM0CithbHdheXMg7JKBIDYtNi0xMjM0LTEKK2Fsd2F5cyDskoIgNi02LTEyMzQtMS0xCithbHdheXMg7JKDIDYtNi0xMjM0LTEtMworYWx3YXlzIOyShCA2LTYtMTIzNC0yNQorYWx3YXlzIOyShSA2LTYtMTIzNC0yNS0xMworYWx3YXlzIOyShiA2LTYtMTIzNC0yNS0zNTYKK2Fsd2F5cyDskocgNi02LTEyMzQtMzUKK2Fsd2F5cyDskoggNi02LTEyMzQtMgorYWx3YXlzIOySiSA2LTYtMTIzNC0yLTEKK2Fsd2F5cyDskoogNi02LTEyMzQtMi0yNgorYWx3YXlzIOySiyA2LTYtMTIzNC0yLTEyCithbHdheXMg7JKMIDYtNi0xMjM0LTItMworYWx3YXlzIOySjSA2LTYtMTIzNC0yLTIzNgorYWx3YXlzIOySjiA2LTYtMTIzNC0yLTI1NgorYWx3YXlzIOySjyA2LTYtMTIzNC0yLTM1NgorYWx3YXlzIOySkCA2LTYtMTIzNC0yNgorYWx3YXlzIOySkSA2LTYtMTIzNC0xMgorYWx3YXlzIOySkiA2LTYtMTIzNC0xMi0zCithbHdheXMg7JKTIDYtNi0xMjM0LTMKK2Fsd2F5cyDskpQgNi02LTEyMzQtMy0zCithbHdheXMg7JKVIDYtNi0xMjM0LTIzNTYKK2Fsd2F5cyDskpYgNi02LTEyMzQtMTMKK2Fsd2F5cyDskpcgNi02LTEyMzQtMjMKK2Fsd2F5cyDskpggNi02LTEyMzQtMjM1CithbHdheXMg7JKZIDYtNi0xMjM0LTIzNgorYWx3YXlzIOySmiA2LTYtMTIzNC0yNTYKK2Fsd2F5cyDskpsgNi02LTEyMzQtMzU2CithbHdheXMg7JKcIDYtNi0xMjM0LTEyMzUKK2Fsd2F5cyDskp0gNi02LTEyMzQtMTIzNS0xCithbHdheXMg7JKeIDYtNi0xMjM0LTEyMzUtMS0xCithbHdheXMg7JKfIDYtNi0xMjM0LTEyMzUtMS0zCithbHdheXMg7JKgIDYtNi0xMjM0LTEyMzUtMjUKK2Fsd2F5cyDskqEgNi02LTEyMzQtMTIzNS0yNS0xMworYWx3YXlzIOySoiA2LTYtMTIzNC0xMjM1LTI1LTM1NgorYWx3YXlzIOySoyA2LTYtMTIzNC0xMjM1LTM1CithbHdheXMg7JKkIDYtNi0xMjM0LTEyMzUtMgorYWx3YXlzIOySpSA2LTYtMTIzNC0xMjM1LTItMQorYWx3YXlzIOySpiA2LTYtMTIzNC0xMjM1LTItMjYKK2Fsd2F5cyDskqcgNi02LTEyMzQtMTIzNS0yLTEyCithbHdheXMg7JKoIDYtNi0xMjM0LTEyMzUtMi0zCithbHdheXMg7JKpIDYtNi0xMjM0LTEyMzUtMi0yMzYKK2Fsd2F5cyDskqogNi02LTEyMzQtMTIzNS0yLTI1NgorYWx3YXlzIOySqyA2LTYtMTIzNC0xMjM1LTItMzU2CithbHdheXMg7JKsIDYtNi0xMjM0LTEyMzUtMjYKK2Fsd2F5cyDskq0gNi02LTEyMzQtMTIzNS0xMgorYWx3YXlzIOySriA2LTYtMTIzNC0xMjM1LTEyLTMKK2Fsd2F5cyDskq8gNi02LTEyMzQtMTIzNS0zCithbHdheXMg7JKwIDYtNi0xMjM0LTEyMzUtMy0zCithbHdheXMg7JKxIDYtNi0xMjM0LTEyMzUtMjM1NgorYWx3YXlzIOySsiA2LTYtMTIzNC0xMjM1LTEzCithbHdheXMg7JKzIDYtNi0xMjM0LTEyMzUtMjMKK2Fsd2F5cyDskrQgNi02LTEyMzQtMTIzNS0yMzUKK2Fsd2F5cyDskrUgNi02LTEyMzQtMTIzNS0yMzYKK2Fsd2F5cyDskrYgNi02LTEyMzQtMTIzNS0yNTYKK2Fsd2F5cyDskrcgNi02LTEyMzQtMTIzNS0zNTYKK2Fsd2F5cyDskrggNi02LTEzNC0xMjM1CithbHdheXMg7JK5IDYtNi0xMzQtMTIzNS0xCithbHdheXMg7JK6IDYtNi0xMzQtMTIzNS0xLTEKK2Fsd2F5cyDskrsgNi02LTEzNC0xMjM1LTEtMworYWx3YXlzIOySvCA2LTYtMTM0LTEyMzUtMjUKK2Fsd2F5cyDskr0gNi02LTEzNC0xMjM1LTI1LTEzCithbHdheXMg7JK+IDYtNi0xMzQtMTIzNS0yNS0zNTYKK2Fsd2F5cyDskr8gNi02LTEzNC0xMjM1LTM1CithbHdheXMg7JOAIDYtNi0xMzQtMTIzNS0yCithbHdheXMg7JOBIDYtNi0xMzQtMTIzNS0yLTEKK2Fsd2F5cyDsk4IgNi02LTEzNC0xMjM1LTItMjYKK2Fsd2F5cyDsk4MgNi02LTEzNC0xMjM1LTItMTIKK2Fsd2F5cyDsk4QgNi02LTEzNC0xMjM1LTItMworYWx3YXlzIOyThSA2LTYtMTM0LTEyMzUtMi0yMzYKK2Fsd2F5cyDsk4YgNi02LTEzNC0xMjM1LTItMjU2CithbHdheXMg7JOHIDYtNi0xMzQtMTIzNS0yLTM1NgorYWx3YXlzIOyTiCA2LTYtMTM0LTEyMzUtMjYKK2Fsd2F5cyDsk4kgNi02LTEzNC0xMjM1LTEyCithbHdheXMg7JOKIDYtNi0xMzQtMTIzNS0xMi0zCithbHdheXMg7JOLIDYtNi0xMzQtMTIzNS0zCithbHdheXMg7JOMIDYtNi0xMzQtMTIzNS0zLTMKK2Fsd2F5cyDsk40gNi02LTEzNC0xMjM1LTIzNTYKK2Fsd2F5cyDsk44gNi02LTEzNC0xMjM1LTEzCithbHdheXMg7JOPIDYtNi0xMzQtMTIzNS0yMworYWx3YXlzIOyTkCA2LTYtMTM0LTEyMzUtMjM1CithbHdheXMg7JORIDYtNi0xMzQtMTIzNS0yMzYKK2Fsd2F5cyDsk5IgNi02LTEzNC0xMjM1LTI1NgorYWx3YXlzIOyTkyA2LTYtMTM0LTEyMzUtMzU2CithbHdheXMg7JOUIDYtNi0xNDYKK2Fsd2F5cyDsk5UgNi02LTE0Ni0xCithbHdheXMg7JOWIDYtNi0xNDYtMS0xCithbHdheXMg7JOXIDYtNi0xNDYtMS0zCithbHdheXMg7JOYIDYtNi0xNDYtMjUKK2Fsd2F5cyDsk5kgNi02LTE0Ni0yNS0xMworYWx3YXlzIOyTmiA2LTYtMTQ2LTI1LTM1NgorYWx3YXlzIOyTmyA2LTYtMTQ2LTM1CithbHdheXMg7JOcIDYtNi0xNDYtMgorYWx3YXlzIOyTnSA2LTYtMTQ2LTItMQorYWx3YXlzIOyTniA2LTYtMTQ2LTItMjYKK2Fsd2F5cyDsk58gNi02LTE0Ni0yLTEyCithbHdheXMg7JOgIDYtNi0xNDYtMi0zCithbHdheXMg7JOhIDYtNi0xNDYtMi0yMzYKK2Fsd2F5cyDsk6IgNi02LTE0Ni0yLTI1NgorYWx3YXlzIOyToyA2LTYtMTQ2LTItMzU2CithbHdheXMg7JOkIDYtNi0xNDYtMjYKK2Fsd2F5cyDsk6UgNi02LTE0Ni0xMgorYWx3YXlzIOyTpiA2LTYtMTQ2LTEyLTMKK2Fsd2F5cyDsk6cgNi02LTE0Ni0zCithbHdheXMg7JOoIDYtNi0xNDYtMy0zCithbHdheXMg7JOpIDYtNi0xNDYtMjM1NgorYWx3YXlzIOyTqiA2LTYtMTQ2LTEzCithbHdheXMg7JOrIDYtNi0xNDYtMjMKK2Fsd2F5cyDsk6wgNi02LTE0Ni0yMzUKK2Fsd2F5cyDsk60gNi02LTE0Ni0yMzYKK2Fsd2F5cyDsk64gNi02LTE0Ni0yNTYKK2Fsd2F5cyDsk68gNi02LTE0Ni0zNTYKK2Fsd2F5cyDsk7AgNi02LTI0NgorYWx3YXlzIOyTsSA2LTYtMjQ2LTEKK2Fsd2F5cyDsk7IgNi02LTI0Ni0xLTEKK2Fsd2F5cyDsk7MgNi02LTI0Ni0xLTMKK2Fsd2F5cyDsk7QgNi02LTI0Ni0yNQorYWx3YXlzIOyTtSA2LTYtMjQ2LTI1LTEzCithbHdheXMg7JO2IDYtNi0yNDYtMjUtMzU2CithbHdheXMg7JO3IDYtNi0yNDYtMzUKK2Fsd2F5cyDsk7ggNi02LTI0Ni0yCithbHdheXMg7JO5IDYtNi0yNDYtMi0xCithbHdheXMg7JO6IDYtNi0yNDYtMi0yNgorYWx3YXlzIOyTuyA2LTYtMjQ2LTItMTIKK2Fsd2F5cyDsk7wgNi02LTI0Ni0yLTMKK2Fsd2F5cyDsk70gNi02LTI0Ni0yLTIzNgorYWx3YXlzIOyTviA2LTYtMjQ2LTItMjU2CithbHdheXMg7JO/IDYtNi0yNDYtMi0zNTYKK2Fsd2F5cyDslIAgNi02LTI0Ni0yNgorYWx3YXlzIOyUgSA2LTYtMjQ2LTEyCithbHdheXMg7JSCIDYtNi0yNDYtMTItMworYWx3YXlzIOyUgyA2LTYtMjQ2LTMKK2Fsd2F5cyDslIQgNi02LTI0Ni0zLTMKK2Fsd2F5cyDslIUgNi02LTI0Ni0yMzU2CithbHdheXMg7JSGIDYtNi0yNDYtMTMKK2Fsd2F5cyDslIcgNi02LTI0Ni0yMworYWx3YXlzIOyUiCA2LTYtMjQ2LTIzNQorYWx3YXlzIOyUiSA2LTYtMjQ2LTIzNgorYWx3YXlzIOyUiiA2LTYtMjQ2LTI1NgorYWx3YXlzIOyUiyA2LTYtMjQ2LTM1NgorYWx3YXlzIOyUjCA2LTYtMjQ1NgorYWx3YXlzIOyUjSA2LTYtMjQ1Ni0xCithbHdheXMg7JSOIDYtNi0yNDU2LTEtMQorYWx3YXlzIOyUjyA2LTYtMjQ1Ni0xLTMKK2Fsd2F5cyDslJAgNi02LTI0NTYtMjUKK2Fsd2F5cyDslJEgNi02LTI0NTYtMjUtMTMKK2Fsd2F5cyDslJIgNi02LTI0NTYtMjUtMzU2CithbHdheXMg7JSTIDYtNi0yNDU2LTM1CithbHdheXMg7JSUIDYtNi0yNDU2LTIKK2Fsd2F5cyDslJUgNi02LTI0NTYtMi0xCithbHdheXMg7JSWIDYtNi0yNDU2LTItMjYKK2Fsd2F5cyDslJcgNi02LTI0NTYtMi0xMgorYWx3YXlzIOyUmCA2LTYtMjQ1Ni0yLTMKK2Fsd2F5cyDslJkgNi02LTI0NTYtMi0yMzYKK2Fsd2F5cyDslJogNi02LTI0NTYtMi0yNTYKK2Fsd2F5cyDslJsgNi02LTI0NTYtMi0zNTYKK2Fsd2F5cyDslJwgNi02LTI0NTYtMjYKK2Fsd2F5cyDslJ0gNi02LTI0NTYtMTIKK2Fsd2F5cyDslJ4gNi02LTI0NTYtMTItMworYWx3YXlzIOyUnyA2LTYtMjQ1Ni0zCithbHdheXMg7JSgIDYtNi0yNDU2LTMtMworYWx3YXlzIOyUoSA2LTYtMjQ1Ni0yMzU2CithbHdheXMg7JSiIDYtNi0yNDU2LTEzCithbHdheXMg7JSjIDYtNi0yNDU2LTIzCithbHdheXMg7JSkIDYtNi0yNDU2LTIzNQorYWx3YXlzIOyUpSA2LTYtMjQ1Ni0yMzYKK2Fsd2F5cyDslKYgNi02LTI0NTYtMjU2CithbHdheXMg7JSnIDYtNi0yNDU2LTM1NgorYWx3YXlzIOyUqCA2LTYtMTM1CithbHdheXMg7JSpIDYtNi0xMzUtMQorYWx3YXlzIOyUqiA2LTYtMTM1LTEtMQorYWx3YXlzIOyUqyA2LTYtMTM1LTEtMworYWx3YXlzIOyUrCA2LTYtMTM1LTI1CithbHdheXMg7JStIDYtNi0xMzUtMjUtMTMKK2Fsd2F5cyDslK4gNi02LTEzNS0yNS0zNTYKK2Fsd2F5cyDslK8gNi02LTEzNS0zNQorYWx3YXlzIOyUsCA2LTYtMTM1LTIKK2Fsd2F5cyDslLEgNi02LTEzNS0yLTEKK2Fsd2F5cyDslLIgNi02LTEzNS0yLTI2CithbHdheXMg7JSzIDYtNi0xMzUtMi0xMgorYWx3YXlzIOyUtCA2LTYtMTM1LTItMworYWx3YXlzIOyUtSA2LTYtMTM1LTItMjM2CithbHdheXMg7JS2IDYtNi0xMzUtMi0yNTYKK2Fsd2F5cyDslLcgNi02LTEzNS0yLTM1NgorYWx3YXlzIOyUuCA2LTYtMTM1LTI2CithbHdheXMg7JS5IDYtNi0xMzUtMTIKK2Fsd2F5cyDslLogNi02LTEzNS0xMi0zCithbHdheXMg7JS7IDYtNi0xMzUtMworYWx3YXlzIOyUvCA2LTYtMTM1LTMtMworYWx3YXlzIOyUvSA2LTYtMTM1LTIzNTYKK2Fsd2F5cyDslL4gNi02LTEzNS0xMworYWx3YXlzIOyUvyA2LTYtMTM1LTIzCithbHdheXMg7JWAIDYtNi0xMzUtMjM1CithbHdheXMg7JWBIDYtNi0xMzUtMjM2CithbHdheXMg7JWCIDYtNi0xMzUtMjU2CithbHdheXMg7JWDIDYtNi0xMzUtMzU2CithbHdheXMg7JWEIDEyNgorYWx3YXlzIOyVhSAxMjYtMQorYWx3YXlzIOyVhiAxMjYtMS0xCithbHdheXMg7JWHIDEyNi0xLTMKK2Fsd2F5cyDslYggMTI2LTI1CithbHdheXMg7JWJIDEyNi0yNS0xMworYWx3YXlzIOyViiAxMjYtMjUtMzU2CithbHdheXMg7JWLIDEyNi0zNQorYWx3YXlzIOyVjCAxMjYtMgorYWx3YXlzIOyVjSAxMjYtMi0xCithbHdheXMg7JWOIDEyNi0yLTI2CithbHdheXMg7JWPIDEyNi0yLTEyCithbHdheXMg7JWQIDEyNi0yLTMKK2Fsd2F5cyDslZEgMTI2LTItMjM2CithbHdheXMg7JWSIDEyNi0yLTI1NgorYWx3YXlzIOyVkyAxMjYtMi0zNTYKK2Fsd2F5cyDslZQgMTI2LTI2CithbHdheXMg7JWVIDEyNi0xMgorYWx3YXlzIOyVliAxMjYtMTItMworYWx3YXlzIOyVlyAxMjYtMworYWx3YXlzIOyVmCAxMjYtMy0zCithbHdheXMg7JWZIDEyNi0yMzU2CithbHdheXMg7JWaIDEyNi0xMworYWx3YXlzIOyVmyAxMjYtMjMKK2Fsd2F5cyDslZwgMTI2LTIzNQorYWx3YXlzIOyVnSAxMjYtMjM2CithbHdheXMg7JWeIDEyNi0yNTYKK2Fsd2F5cyDslZ8gMTI2LTM1NgorYWx3YXlzIOyVoCAxMjM1CithbHdheXMg7JWhIDEyMzUtMQorYWx3YXlzIOyVoiAxMjM1LTEtMQorYWx3YXlzIOyVoyAxMjM1LTEtMworYWx3YXlzIOyVpCAxMjM1LTI1CithbHdheXMg7JWlIDEyMzUtMjUtMTMKK2Fsd2F5cyDslaYgMTIzNS0yNS0zNTYKK2Fsd2F5cyDslacgMTIzNS0zNQorYWx3YXlzIOyVqCAxMjM1LTIKK2Fsd2F5cyDslakgMTIzNS0yLTEKK2Fsd2F5cyDslaogMTIzNS0yLTI2CithbHdheXMg7JWrIDEyMzUtMi0xMgorYWx3YXlzIOyVrCAxMjM1LTItMworYWx3YXlzIOyVrSAxMjM1LTItMjM2CithbHdheXMg7JWuIDEyMzUtMi0yNTYKK2Fsd2F5cyDsla8gMTIzNS0yLTM1NgorYWx3YXlzIOyVsCAxMjM1LTI2CithbHdheXMg7JWxIDEyMzUtMTIKK2Fsd2F5cyDslbIgMTIzNS0xMi0zCithbHdheXMg7JWzIDEyMzUtMworYWx3YXlzIOyVtCAxMjM1LTMtMworYWx3YXlzIOyVtSAxMjM1LTIzNTYKK2Fsd2F5cyDslbYgMTIzNS0xMworYWx3YXlzIOyVtyAxMjM1LTIzCithbHdheXMg7JW4IDEyMzUtMjM1CithbHdheXMg7JW5IDEyMzUtMjM2CithbHdheXMg7JW6IDEyMzUtMjU2CithbHdheXMg7JW7IDEyMzUtMzU2CithbHdheXMg7JW8IDM0NQorYWx3YXlzIOyVvSAzNDUtMQorYWx3YXlzIOyVviAzNDUtMS0xCithbHdheXMg7JW/IDM0NS0xLTMKK2Fsd2F5cyDsloAgMzQ1LTI1CithbHdheXMg7JaBIDM0NS0yNS0xMworYWx3YXlzIOyWgiAzNDUtMjUtMzU2CithbHdheXMg7JaDIDM0NS0zNQorYWx3YXlzIOyWhCAzNDUtMgorYWx3YXlzIOyWhSAzNDUtMi0xCithbHdheXMg7JaGIDM0NS0yLTI2CithbHdheXMg7JaHIDM0NS0yLTEyCithbHdheXMg7JaIIDM0NS0yLTMKK2Fsd2F5cyDslokgMzQ1LTItMjM2CithbHdheXMg7JaKIDM0NS0yLTI1NgorYWx3YXlzIOyWiyAzNDUtMi0zNTYKK2Fsd2F5cyDslowgMzQ1LTI2CithbHdheXMg7JaNIDM0NS0xMgorYWx3YXlzIOyWjiAzNDUtMTItMworYWx3YXlzIOyWjyAzNDUtMworYWx3YXlzIOyWkCAzNDUtMy0zCithbHdheXMg7JaRIDM0NS0yMzU2CithbHdheXMg7JaSIDM0NS0xMworYWx3YXlzIOyWkyAzNDUtMjMKK2Fsd2F5cyDslpQgMzQ1LTIzNQorYWx3YXlzIOyWlSAzNDUtMjM2CithbHdheXMg7JaWIDM0NS0yNTYKK2Fsd2F5cyDslpcgMzQ1LTM1NgorYWx3YXlzIOyWmCAzNDUtMTIzNQorYWx3YXlzIOyWmSAzNDUtMTIzNS0xCithbHdheXMg7JaaIDM0NS0xMjM1LTEtMQorYWx3YXlzIOyWmyAzNDUtMTIzNS0xLTMKK2Fsd2F5cyDslpwgMzQ1LTEyMzUtMjUKK2Fsd2F5cyDslp0gMzQ1LTEyMzUtMjUtMTMKK2Fsd2F5cyDslp4gMzQ1LTEyMzUtMjUtMzU2CithbHdheXMg7JafIDM0NS0xMjM1LTM1CithbHdheXMg7JagIDM0NS0xMjM1LTIKK2Fsd2F5cyDslqEgMzQ1LTEyMzUtMi0xCithbHdheXMg7JaiIDM0NS0xMjM1LTItMjYKK2Fsd2F5cyDslqMgMzQ1LTEyMzUtMi0xMgorYWx3YXlzIOyWpCAzNDUtMTIzNS0yLTMKK2Fsd2F5cyDslqUgMzQ1LTEyMzUtMi0yMzYKK2Fsd2F5cyDslqYgMzQ1LTEyMzUtMi0yNTYKK2Fsd2F5cyDslqcgMzQ1LTEyMzUtMi0zNTYKK2Fsd2F5cyDslqggMzQ1LTEyMzUtMjYKK2Fsd2F5cyDslqkgMzQ1LTEyMzUtMTIKK2Fsd2F5cyDslqogMzQ1LTEyMzUtMTItMworYWx3YXlzIOyWqyAzNDUtMTIzNS0zCithbHdheXMg7JasIDM0NS0xMjM1LTMtMworYWx3YXlzIOyWrSAzNDUtMTIzNS0yMzU2CithbHdheXMg7JauIDM0NS0xMjM1LTEzCithbHdheXMg7JavIDM0NS0xMjM1LTIzCithbHdheXMg7JawIDM0NS0xMjM1LTIzNQorYWx3YXlzIOyWsSAzNDUtMTIzNS0yMzYKK2Fsd2F5cyDslrIgMzQ1LTEyMzUtMjU2CithbHdheXMg7JazIDM0NS0xMjM1LTM1NgorYWx3YXlzIOyWtCAyMzQKK2Fsd2F5cyDslrUgMjM0LTEKK2Fsd2F5cyDslrYgMjM0LTEtMQorYWx3YXlzIOyWtyAyMzQtMS0zCithbHdheXMg7Ja4IDIzNC0yNQorYWx3YXlzIOyWuSAyMzQtMjUtMTMKK2Fsd2F5cyDslrogMjM0LTI1LTM1NgorYWx3YXlzIOyWuyAyMzQtMzUKK2Fsd2F5cyDslrwgMjM0LTIKK2Fsd2F5cyDslr0gMjM0LTItMQorYWx3YXlzIOyWviAyMzQtMi0yNgorYWx3YXlzIOyWvyAyMzQtMi0xMgorYWx3YXlzIOyXgCAyMzQtMi0zCithbHdheXMg7JeBIDIzNC0yLTIzNgorYWx3YXlzIOyXgiAyMzQtMi0yNTYKK2Fsd2F5cyDsl4MgMjM0LTItMzU2CithbHdheXMg7JeEIDIzNC0yNgorYWx3YXlzIOyXhSAyMzQtMTIKK2Fsd2F5cyDsl4YgMjM0LTEyLTMKK2Fsd2F5cyDsl4cgMjM0LTMKK2Fsd2F5cyDsl4ggMjM0LTMtMworYWx3YXlzIOyXiSAyMzQtMjM1NgorYWx3YXlzIOyXiiAyMzQtMTMKK2Fsd2F5cyDsl4sgMjM0LTIzCithbHdheXMg7JeMIDIzNC0yMzUKK2Fsd2F5cyDsl40gMjM0LTIzNgorYWx3YXlzIOyXjiAyMzQtMjU2CithbHdheXMg7JePIDIzNC0zNTYKK2Fsd2F5cyDsl5AgMTM0NQorYWx3YXlzIOyXkSAxMzQ1LTEKK2Fsd2F5cyDsl5IgMTM0NS0xLTEKK2Fsd2F5cyDsl5MgMTM0NS0xLTMKK2Fsd2F5cyDsl5QgMTM0NS0yNQorYWx3YXlzIOyXlSAxMzQ1LTI1LTEzCithbHdheXMg7JeWIDEzNDUtMjUtMzU2CithbHdheXMg7JeXIDEzNDUtMzUKK2Fsd2F5cyDsl5ggMTM0NS0yCithbHdheXMg7JeZIDEzNDUtMi0xCithbHdheXMg7JeaIDEzNDUtMi0yNgorYWx3YXlzIOyXmyAxMzQ1LTItMTIKK2Fsd2F5cyDsl5wgMTM0NS0yLTMKK2Fsd2F5cyDsl50gMTM0NS0yLTIzNgorYWx3YXlzIOyXniAxMzQ1LTItMjU2CithbHdheXMg7JefIDEzNDUtMi0zNTYKK2Fsd2F5cyDsl6AgMTM0NS0yNgorYWx3YXlzIOyXoSAxMzQ1LTEyCithbHdheXMg7JeiIDEzNDUtMTItMworYWx3YXlzIOyXoyAxMzQ1LTMKK2Fsd2F5cyDsl6QgMTM0NS0zLTMKK2Fsd2F5cyDsl6UgMTM0NS0yMzU2CithbHdheXMg7JemIDEzNDUtMTMKK2Fsd2F5cyDsl6cgMTM0NS0yMworYWx3YXlzIOyXqCAxMzQ1LTIzNQorYWx3YXlzIOyXqSAxMzQ1LTIzNgorYWx3YXlzIOyXqiAxMzQ1LTI1NgorYWx3YXlzIOyXqyAxMzQ1LTM1NgorYWx3YXlzIOyXrCAxNTYKK2Fsd2F5cyDsl60gMTU2LTEKK2Fsd2F5cyDsl64gMTU2LTEtMQorYWx3YXlzIOyXryAxNTYtMS0zCithbHdheXMg7JewIDE1Ni0yNQorYWx3YXlzIOyXsSAxNTYtMjUtMTMKK2Fsd2F5cyDsl7IgMTU2LTI1LTM1NgorYWx3YXlzIOyXsyAxNTYtMzUKK2Fsd2F5cyDsl7QgMTU2LTIKK2Fsd2F5cyDsl7UgMTU2LTItMQorYWx3YXlzIOyXtiAxNTYtMi0yNgorYWx3YXlzIOyXtyAxNTYtMi0xMgorYWx3YXlzIOyXuCAxNTYtMi0zCithbHdheXMg7Je5IDE1Ni0yLTIzNgorYWx3YXlzIOyXuiAxNTYtMi0yNTYKK2Fsd2F5cyDsl7sgMTU2LTItMzU2CithbHdheXMg7Je8IDE1Ni0yNgorYWx3YXlzIOyXvSAxNTYtMTIKK2Fsd2F5cyDsl74gMTU2LTEyLTMKK2Fsd2F5cyDsl78gMTU2LTMKK2Fsd2F5cyDsmIAgMTU2LTMtMworYWx3YXlzIOyYgSAxNTYtMjM1NgorYWx3YXlzIOyYgiAxNTYtMTMKK2Fsd2F5cyDsmIMgMTU2LTIzCithbHdheXMg7JiEIDE1Ni0yMzUKK2Fsd2F5cyDsmIUgMTU2LTIzNgorYWx3YXlzIOyYhiAxNTYtMjU2CithbHdheXMg7JiHIDE1Ni0zNTYKK2Fsd2F5cyDsmIggMzQKK2Fsd2F5cyDsmIkgMzQtMQorYWx3YXlzIOyYiiAzNC0xLTEKK2Fsd2F5cyDsmIsgMzQtMS0zCithbHdheXMg7JiMIDM0LTI1CithbHdheXMg7JiNIDM0LTI1LTEzCithbHdheXMg7JiOIDM0LTI1LTM1NgorYWx3YXlzIOyYjyAzNC0zNQorYWx3YXlzIOyYkCAzNC0yCithbHdheXMg7JiRIDM0LTItMQorYWx3YXlzIOyYkiAzNC0yLTI2CithbHdheXMg7JiTIDM0LTItMTIKK2Fsd2F5cyDsmJQgMzQtMi0zCithbHdheXMg7JiVIDM0LTItMjM2CithbHdheXMg7JiWIDM0LTItMjU2CithbHdheXMg7JiXIDM0LTItMzU2CithbHdheXMg7JiYIDM0LTI2CithbHdheXMg7JiZIDM0LTEyCithbHdheXMg7JiaIDM0LTEyLTMKK2Fsd2F5cyDsmJsgMzQtMworYWx3YXlzIOyYnCAzNC0zLTMKK2Fsd2F5cyDsmJ0gMzQtMjM1NgorYWx3YXlzIOyYniAzNC0xMworYWx3YXlzIOyYnyAzNC0yMworYWx3YXlzIOyYoCAzNC0yMzUKK2Fsd2F5cyDsmKEgMzQtMjM2CithbHdheXMg7JiiIDM0LTI1NgorYWx3YXlzIOyYoyAzNC0zNTYKK2Fsd2F5cyDsmKQgMTM2CithbHdheXMg7JilIDEzNi0xCithbHdheXMg7JimIDEzNi0xLTEKK2Fsd2F5cyDsmKcgMTM2LTEtMworYWx3YXlzIOyYqCAxMzYtMjUKK2Fsd2F5cyDsmKkgMTM2LTI1LTEzCithbHdheXMg7JiqIDEzNi0yNS0zNTYKK2Fsd2F5cyDsmKsgMTM2LTM1CithbHdheXMg7JisIDEzNi0yCithbHdheXMg7JitIDEzNi0yLTEKK2Fsd2F5cyDsmK4gMTM2LTItMjYKK2Fsd2F5cyDsmK8gMTM2LTItMTIKK2Fsd2F5cyDsmLAgMTM2LTItMworYWx3YXlzIOyYsSAxMzYtMi0yMzYKK2Fsd2F5cyDsmLIgMTM2LTItMjU2CithbHdheXMg7JizIDEzNi0yLTM1NgorYWx3YXlzIOyYtCAxMzYtMjYKK2Fsd2F5cyDsmLUgMTM2LTEyCithbHdheXMg7Ji2IDEzNi0xMi0zCithbHdheXMg7Ji3IDEzNi0zCithbHdheXMg7Ji4IDEzNi0zLTMKK2Fsd2F5cyDsmLkgMTM2LTIzNTYKK2Fsd2F5cyDsmLogMTM2LTEzCithbHdheXMg7Ji7IDEzNi0yMworYWx3YXlzIOyYvCAxMzYtMjM1CithbHdheXMg7Ji9IDEzNi0yMzYKK2Fsd2F5cyDsmL4gMTM2LTI1NgorYWx3YXlzIOyYvyAxMzYtMzU2CithbHdheXMg7JmAIDEyMzYKK2Fsd2F5cyDsmYEgMTIzNi0xCithbHdheXMg7JmCIDEyMzYtMS0xCithbHdheXMg7JmDIDEyMzYtMS0zCithbHdheXMg7JmEIDEyMzYtMjUKK2Fsd2F5cyDsmYUgMTIzNi0yNS0xMworYWx3YXlzIOyZhiAxMjM2LTI1LTM1NgorYWx3YXlzIOyZhyAxMjM2LTM1CithbHdheXMg7JmIIDEyMzYtMgorYWx3YXlzIOyZiSAxMjM2LTItMQorYWx3YXlzIOyZiiAxMjM2LTItMjYKK2Fsd2F5cyDsmYsgMTIzNi0yLTEyCithbHdheXMg7JmMIDEyMzYtMi0zCithbHdheXMg7JmNIDEyMzYtMi0yMzYKK2Fsd2F5cyDsmY4gMTIzNi0yLTI1NgorYWx3YXlzIOyZjyAxMjM2LTItMzU2CithbHdheXMg7JmQIDEyMzYtMjYKK2Fsd2F5cyDsmZEgMTIzNi0xMgorYWx3YXlzIOyZkiAxMjM2LTEyLTMKK2Fsd2F5cyDsmZMgMTIzNi0zCithbHdheXMg7JmUIDEyMzYtMy0zCithbHdheXMg7JmVIDEyMzYtMjM1NgorYWx3YXlzIOyZliAxMjM2LTEzCithbHdheXMg7JmXIDEyMzYtMjMKK2Fsd2F5cyDsmZggMTIzNi0yMzUKK2Fsd2F5cyDsmZkgMTIzNi0yMzYKK2Fsd2F5cyDsmZogMTIzNi0yNTYKK2Fsd2F5cyDsmZsgMTIzNi0zNTYKK2Fsd2F5cyDsmZwgMTIzNi0xMjM1CithbHdheXMg7JmdIDEyMzYtMTIzNS0xCithbHdheXMg7JmeIDEyMzYtMTIzNS0xLTEKK2Fsd2F5cyDsmZ8gMTIzNi0xMjM1LTEtMworYWx3YXlzIOyZoCAxMjM2LTEyMzUtMjUKK2Fsd2F5cyDsmaEgMTIzNi0xMjM1LTI1LTEzCithbHdheXMg7JmiIDEyMzYtMTIzNS0yNS0zNTYKK2Fsd2F5cyDsmaMgMTIzNi0xMjM1LTM1CithbHdheXMg7JmkIDEyMzYtMTIzNS0yCithbHdheXMg7JmlIDEyMzYtMTIzNS0yLTEKK2Fsd2F5cyDsmaYgMTIzNi0xMjM1LTItMjYKK2Fsd2F5cyDsmacgMTIzNi0xMjM1LTItMTIKK2Fsd2F5cyDsmaggMTIzNi0xMjM1LTItMworYWx3YXlzIOyZqSAxMjM2LTEyMzUtMi0yMzYKK2Fsd2F5cyDsmaogMTIzNi0xMjM1LTItMjU2CithbHdheXMg7JmrIDEyMzYtMTIzNS0yLTM1NgorYWx3YXlzIOyZrCAxMjM2LTEyMzUtMjYKK2Fsd2F5cyDsma0gMTIzNi0xMjM1LTEyCithbHdheXMg7JmuIDEyMzYtMTIzNS0xMi0zCithbHdheXMg7JmvIDEyMzYtMTIzNS0zCithbHdheXMg7JmwIDEyMzYtMTIzNS0zLTMKK2Fsd2F5cyDsmbEgMTIzNi0xMjM1LTIzNTYKK2Fsd2F5cyDsmbIgMTIzNi0xMjM1LTEzCithbHdheXMg7JmzIDEyMzYtMTIzNS0yMworYWx3YXlzIOyZtCAxMjM2LTEyMzUtMjM1CithbHdheXMg7Jm1IDEyMzYtMTIzNS0yMzYKK2Fsd2F5cyDsmbYgMTIzNi0xMjM1LTI1NgorYWx3YXlzIOyZtyAxMjM2LTEyMzUtMzU2CithbHdheXMg7Jm4IDEzNDU2CithbHdheXMg7Jm5IDEzNDU2LTEKK2Fsd2F5cyDsmbogMTM0NTYtMS0xCithbHdheXMg7Jm7IDEzNDU2LTEtMworYWx3YXlzIOyZvCAxMzQ1Ni0yNQorYWx3YXlzIOyZvSAxMzQ1Ni0yNS0xMworYWx3YXlzIOyZviAxMzQ1Ni0yNS0zNTYKK2Fsd2F5cyDsmb8gMTM0NTYtMzUKK2Fsd2F5cyDsmoAgMTM0NTYtMgorYWx3YXlzIOyagSAxMzQ1Ni0yLTEKK2Fsd2F5cyDsmoIgMTM0NTYtMi0yNgorYWx3YXlzIOyagyAxMzQ1Ni0yLTEyCithbHdheXMg7JqEIDEzNDU2LTItMworYWx3YXlzIOyahSAxMzQ1Ni0yLTIzNgorYWx3YXlzIOyahiAxMzQ1Ni0yLTI1NgorYWx3YXlzIOyahyAxMzQ1Ni0yLTM1NgorYWx3YXlzIOyaiCAxMzQ1Ni0yNgorYWx3YXlzIOyaiSAxMzQ1Ni0xMgorYWx3YXlzIOyaiiAxMzQ1Ni0xMi0zCithbHdheXMg7JqLIDEzNDU2LTMKK2Fsd2F5cyDsmowgMTM0NTYtMy0zCithbHdheXMg7JqNIDEzNDU2LTIzNTYKK2Fsd2F5cyDsmo4gMTM0NTYtMTMKK2Fsd2F5cyDsmo8gMTM0NTYtMjMKK2Fsd2F5cyDsmpAgMTM0NTYtMjM1CithbHdheXMg7JqRIDEzNDU2LTIzNgorYWx3YXlzIOyakiAxMzQ1Ni0yNTYKK2Fsd2F5cyDsmpMgMTM0NTYtMzU2CithbHdheXMg7JqUIDM0NgorYWx3YXlzIOyalSAzNDYtMQorYWx3YXlzIOyaliAzNDYtMS0xCithbHdheXMg7JqXIDM0Ni0xLTMKK2Fsd2F5cyDsmpggMzQ2LTI1CithbHdheXMg7JqZIDM0Ni0yNS0xMworYWx3YXlzIOyamiAzNDYtMjUtMzU2CithbHdheXMg7JqbIDM0Ni0zNQorYWx3YXlzIOyanCAzNDYtMgorYWx3YXlzIOyanSAzNDYtMi0xCithbHdheXMg7JqeIDM0Ni0yLTI2CithbHdheXMg7JqfIDM0Ni0yLTEyCithbHdheXMg7JqgIDM0Ni0yLTMKK2Fsd2F5cyDsmqEgMzQ2LTItMjM2CithbHdheXMg7JqiIDM0Ni0yLTI1NgorYWx3YXlzIOyaoyAzNDYtMi0zNTYKK2Fsd2F5cyDsmqQgMzQ2LTI2CithbHdheXMg7JqlIDM0Ni0xMgorYWx3YXlzIOyapiAzNDYtMTItMworYWx3YXlzIOyapyAzNDYtMworYWx3YXlzIOyaqCAzNDYtMy0zCithbHdheXMg7JqpIDM0Ni0yMzU2CithbHdheXMg7JqqIDM0Ni0xMworYWx3YXlzIOyaqyAzNDYtMjMKK2Fsd2F5cyDsmqwgMzQ2LTIzNQorYWx3YXlzIOyarSAzNDYtMjM2CithbHdheXMg7JquIDM0Ni0yNTYKK2Fsd2F5cyDsmq8gMzQ2LTM1NgorYWx3YXlzIOyasCAxMzQKK2Fsd2F5cyDsmrEgMTM0LTEKK2Fsd2F5cyDsmrIgMTM0LTEtMQorYWx3YXlzIOyasyAxMzQtMS0zCithbHdheXMg7Jq0IDEzNC0yNQorYWx3YXlzIOyatSAxMzQtMjUtMTMKK2Fsd2F5cyDsmrYgMTM0LTI1LTM1NgorYWx3YXlzIOyatyAxMzQtMzUKK2Fsd2F5cyDsmrggMTM0LTIKK2Fsd2F5cyDsmrkgMTM0LTItMQorYWx3YXlzIOyauiAxMzQtMi0yNgorYWx3YXlzIOyauyAxMzQtMi0xMgorYWx3YXlzIOyavCAxMzQtMi0zCithbHdheXMg7Jq9IDEzNC0yLTIzNgorYWx3YXlzIOyaviAxMzQtMi0yNTYKK2Fsd2F5cyDsmr8gMTM0LTItMzU2CithbHdheXMg7JuAIDEzNC0yNgorYWx3YXlzIOybgSAxMzQtMTIKK2Fsd2F5cyDsm4IgMTM0LTEyLTMKK2Fsd2F5cyDsm4MgMTM0LTMKK2Fsd2F5cyDsm4QgMTM0LTMtMworYWx3YXlzIOybhSAxMzQtMjM1NgorYWx3YXlzIOybhiAxMzQtMTMKK2Fsd2F5cyDsm4cgMTM0LTIzCithbHdheXMg7JuIIDEzNC0yMzUKK2Fsd2F5cyDsm4kgMTM0LTIzNgorYWx3YXlzIOybiiAxMzQtMjU2CithbHdheXMg7JuLIDEzNC0zNTYKK2Fsd2F5cyDsm4wgMTIzNAorYWx3YXlzIOybjSAxMjM0LTEKK2Fsd2F5cyDsm44gMTIzNC0xLTEKK2Fsd2F5cyDsm48gMTIzNC0xLTMKK2Fsd2F5cyDsm5AgMTIzNC0yNQorYWx3YXlzIOybkSAxMjM0LTI1LTEzCithbHdheXMg7JuSIDEyMzQtMjUtMzU2CithbHdheXMg7JuTIDEyMzQtMzUKK2Fsd2F5cyDsm5QgMTIzNC0yCithbHdheXMg7JuVIDEyMzQtMi0xCithbHdheXMg7JuWIDEyMzQtMi0yNgorYWx3YXlzIOyblyAxMjM0LTItMTIKK2Fsd2F5cyDsm5ggMTIzNC0yLTMKK2Fsd2F5cyDsm5kgMTIzNC0yLTIzNgorYWx3YXlzIOybmiAxMjM0LTItMjU2CithbHdheXMg7JubIDEyMzQtMi0zNTYKK2Fsd2F5cyDsm5wgMTIzNC0yNgorYWx3YXlzIOybnSAxMjM0LTEyCithbHdheXMg7JueIDEyMzQtMTItMworYWx3YXlzIOybnyAxMjM0LTMKK2Fsd2F5cyDsm6AgMTIzNC0zLTMKK2Fsd2F5cyDsm6EgMTIzNC0yMzU2CithbHdheXMg7JuiIDEyMzQtMTMKK2Fsd2F5cyDsm6MgMTIzNC0yMworYWx3YXlzIOybpCAxMjM0LTIzNQorYWx3YXlzIOybpSAxMjM0LTIzNgorYWx3YXlzIOybpiAxMjM0LTI1NgorYWx3YXlzIOybpyAxMjM0LTM1NgorYWx3YXlzIOybqCAxMjM0LTEyMzUKK2Fsd2F5cyDsm6kgMTIzNC0xMjM1LTEKK2Fsd2F5cyDsm6ogMTIzNC0xMjM1LTEtMQorYWx3YXlzIOybqyAxMjM0LTEyMzUtMS0zCithbHdheXMg7JusIDEyMzQtMTIzNS0yNQorYWx3YXlzIOybrSAxMjM0LTEyMzUtMjUtMTMKK2Fsd2F5cyDsm64gMTIzNC0xMjM1LTI1LTM1NgorYWx3YXlzIOybryAxMjM0LTEyMzUtMzUKK2Fsd2F5cyDsm7AgMTIzNC0xMjM1LTIKK2Fsd2F5cyDsm7EgMTIzNC0xMjM1LTItMQorYWx3YXlzIOybsiAxMjM0LTEyMzUtMi0yNgorYWx3YXlzIOybsyAxMjM0LTEyMzUtMi0xMgorYWx3YXlzIOybtCAxMjM0LTEyMzUtMi0zCithbHdheXMg7Ju1IDEyMzQtMTIzNS0yLTIzNgorYWx3YXlzIOybtiAxMjM0LTEyMzUtMi0yNTYKK2Fsd2F5cyDsm7cgMTIzNC0xMjM1LTItMzU2CithbHdheXMg7Ju4IDEyMzQtMTIzNS0yNgorYWx3YXlzIOybuSAxMjM0LTEyMzUtMTIKK2Fsd2F5cyDsm7ogMTIzNC0xMjM1LTEyLTMKK2Fsd2F5cyDsm7sgMTIzNC0xMjM1LTMKK2Fsd2F5cyDsm7wgMTIzNC0xMjM1LTMtMworYWx3YXlzIOybvSAxMjM0LTEyMzUtMjM1NgorYWx3YXlzIOybviAxMjM0LTEyMzUtMTMKK2Fsd2F5cyDsm78gMTIzNC0xMjM1LTIzCithbHdheXMg7JyAIDEyMzQtMTIzNS0yMzUKK2Fsd2F5cyDsnIEgMTIzNC0xMjM1LTIzNgorYWx3YXlzIOycgiAxMjM0LTEyMzUtMjU2CithbHdheXMg7JyDIDEyMzQtMTIzNS0zNTYKK2Fsd2F5cyDsnIQgMTM0LTEyMzUKK2Fsd2F5cyDsnIUgMTM0LTEyMzUtMQorYWx3YXlzIOychiAxMzQtMTIzNS0xLTEKK2Fsd2F5cyDsnIcgMTM0LTEyMzUtMS0zCithbHdheXMg7JyIIDEzNC0xMjM1LTI1CithbHdheXMg7JyJIDEzNC0xMjM1LTI1LTEzCithbHdheXMg7JyKIDEzNC0xMjM1LTI1LTM1NgorYWx3YXlzIOyciyAxMzQtMTIzNS0zNQorYWx3YXlzIOycjCAxMzQtMTIzNS0yCithbHdheXMg7JyNIDEzNC0xMjM1LTItMQorYWx3YXlzIOycjiAxMzQtMTIzNS0yLTI2CithbHdheXMg7JyPIDEzNC0xMjM1LTItMTIKK2Fsd2F5cyDsnJAgMTM0LTEyMzUtMi0zCithbHdheXMg7JyRIDEzNC0xMjM1LTItMjM2CithbHdheXMg7JySIDEzNC0xMjM1LTItMjU2CithbHdheXMg7JyTIDEzNC0xMjM1LTItMzU2CithbHdheXMg7JyUIDEzNC0xMjM1LTI2CithbHdheXMg7JyVIDEzNC0xMjM1LTEyCithbHdheXMg7JyWIDEzNC0xMjM1LTEyLTMKK2Fsd2F5cyDsnJcgMTM0LTEyMzUtMworYWx3YXlzIOycmCAxMzQtMTIzNS0zLTMKK2Fsd2F5cyDsnJkgMTM0LTEyMzUtMjM1NgorYWx3YXlzIOycmiAxMzQtMTIzNS0xMworYWx3YXlzIOycmyAxMzQtMTIzNS0yMworYWx3YXlzIOycnCAxMzQtMTIzNS0yMzUKK2Fsd2F5cyDsnJ0gMTM0LTEyMzUtMjM2CithbHdheXMg7JyeIDEzNC0xMjM1LTI1NgorYWx3YXlzIOycnyAxMzQtMTIzNS0zNTYKK2Fsd2F5cyDsnKAgMTQ2CithbHdheXMg7JyhIDE0Ni0xCithbHdheXMg7JyiIDE0Ni0xLTEKK2Fsd2F5cyDsnKMgMTQ2LTEtMworYWx3YXlzIOycpCAxNDYtMjUKK2Fsd2F5cyDsnKUgMTQ2LTI1LTEzCithbHdheXMg7JymIDE0Ni0yNS0zNTYKK2Fsd2F5cyDsnKcgMTQ2LTM1CithbHdheXMg7JyoIDE0Ni0yCithbHdheXMg7JypIDE0Ni0yLTEKK2Fsd2F5cyDsnKogMTQ2LTItMjYKK2Fsd2F5cyDsnKsgMTQ2LTItMTIKK2Fsd2F5cyDsnKwgMTQ2LTItMworYWx3YXlzIOycrSAxNDYtMi0yMzYKK2Fsd2F5cyDsnK4gMTQ2LTItMjU2CithbHdheXMg7JyvIDE0Ni0yLTM1NgorYWx3YXlzIOycsCAxNDYtMjYKK2Fsd2F5cyDsnLEgMTQ2LTEyCithbHdheXMg7JyyIDE0Ni0xMi0zCithbHdheXMg7JyzIDE0Ni0zCithbHdheXMg7Jy0IDE0Ni0zLTMKK2Fsd2F5cyDsnLUgMTQ2LTIzNTYKK2Fsd2F5cyDsnLYgMTQ2LTEzCithbHdheXMg7Jy3IDE0Ni0yMworYWx3YXlzIOycuCAxNDYtMjM1CithbHdheXMg7Jy5IDE0Ni0yMzYKK2Fsd2F5cyDsnLogMTQ2LTI1NgorYWx3YXlzIOycuyAxNDYtMzU2CithbHdheXMg7Jy8IDI0NgorYWx3YXlzIOycvSAyNDYtMQorYWx3YXlzIOycviAyNDYtMS0xCithbHdheXMg7Jy/IDI0Ni0xLTMKK2Fsd2F5cyDsnYAgMjQ2LTI1CithbHdheXMg7J2BIDI0Ni0yNS0xMworYWx3YXlzIOydgiAyNDYtMjUtMzU2CithbHdheXMg7J2DIDI0Ni0zNQorYWx3YXlzIOydhCAyNDYtMgorYWx3YXlzIOydhSAyNDYtMi0xCithbHdheXMg7J2GIDI0Ni0yLTI2CithbHdheXMg7J2HIDI0Ni0yLTEyCithbHdheXMg7J2IIDI0Ni0yLTMKK2Fsd2F5cyDsnYkgMjQ2LTItMjM2CithbHdheXMg7J2KIDI0Ni0yLTI1NgorYWx3YXlzIOydiyAyNDYtMi0zNTYKK2Fsd2F5cyDsnYwgMjQ2LTI2CithbHdheXMg7J2NIDI0Ni0xMgorYWx3YXlzIOydjiAyNDYtMTItMworYWx3YXlzIOydjyAyNDYtMworYWx3YXlzIOydkCAyNDYtMy0zCithbHdheXMg7J2RIDI0Ni0yMzU2CithbHdheXMg7J2SIDI0Ni0xMworYWx3YXlzIOydkyAyNDYtMjMKK2Fsd2F5cyDsnZQgMjQ2LTIzNQorYWx3YXlzIOydlSAyNDYtMjM2CithbHdheXMg7J2WIDI0Ni0yNTYKK2Fsd2F5cyDsnZcgMjQ2LTM1NgorYWx3YXlzIOydmCAyNDU2CithbHdheXMg7J2ZIDI0NTYtMQorYWx3YXlzIOydmiAyNDU2LTEtMQorYWx3YXlzIOydmyAyNDU2LTEtMworYWx3YXlzIOydnCAyNDU2LTI1CithbHdheXMg7J2dIDI0NTYtMjUtMTMKK2Fsd2F5cyDsnZ4gMjQ1Ni0yNS0zNTYKK2Fsd2F5cyDsnZ8gMjQ1Ni0zNQorYWx3YXlzIOydoCAyNDU2LTIKK2Fsd2F5cyDsnaEgMjQ1Ni0yLTEKK2Fsd2F5cyDsnaIgMjQ1Ni0yLTI2CithbHdheXMg7J2jIDI0NTYtMi0xMgorYWx3YXlzIOydpCAyNDU2LTItMworYWx3YXlzIOydpSAyNDU2LTItMjM2CithbHdheXMg7J2mIDI0NTYtMi0yNTYKK2Fsd2F5cyDsnacgMjQ1Ni0yLTM1NgorYWx3YXlzIOydqCAyNDU2LTI2CithbHdheXMg7J2pIDI0NTYtMTIKK2Fsd2F5cyDsnaogMjQ1Ni0xMi0zCithbHdheXMg7J2rIDI0NTYtMworYWx3YXlzIOydrCAyNDU2LTMtMworYWx3YXlzIOydrSAyNDU2LTIzNTYKK2Fsd2F5cyDsna4gMjQ1Ni0xMworYWx3YXlzIOydryAyNDU2LTIzCithbHdheXMg7J2wIDI0NTYtMjM1CithbHdheXMg7J2xIDI0NTYtMjM2CithbHdheXMg7J2yIDI0NTYtMjU2CithbHdheXMg7J2zIDI0NTYtMzU2CithbHdheXMg7J20IDEzNQorYWx3YXlzIOydtSAxMzUtMQorYWx3YXlzIOydtiAxMzUtMS0xCithbHdheXMg7J23IDEzNS0xLTMKK2Fsd2F5cyDsnbggMTM1LTI1CithbHdheXMg7J25IDEzNS0yNS0xMworYWx3YXlzIOyduiAxMzUtMjUtMzU2CithbHdheXMg7J27IDEzNS0zNQorYWx3YXlzIOydvCAxMzUtMgorYWx3YXlzIOydvSAxMzUtMi0xCithbHdheXMg7J2+IDEzNS0yLTI2CithbHdheXMg7J2/IDEzNS0yLTEyCithbHdheXMg7J6AIDEzNS0yLTMKK2Fsd2F5cyDsnoEgMTM1LTItMjM2CithbHdheXMg7J6CIDEzNS0yLTI1NgorYWx3YXlzIOyegyAxMzUtMi0zNTYKK2Fsd2F5cyDsnoQgMTM1LTI2CithbHdheXMg7J6FIDEzNS0xMgorYWx3YXlzIOyehiAxMzUtMTItMworYWx3YXlzIOyehyAxMzUtMworYWx3YXlzIOyeiCAxMzUtMy0zCithbHdheXMg7J6JIDEzNS0yMzU2CithbHdheXMg7J6KIDEzNS0xMworYWx3YXlzIOyeiyAxMzUtMjMKK2Fsd2F5cyDsnowgMTM1LTIzNQorYWx3YXlzIOyejSAxMzUtMjM2CithbHdheXMg7J6OIDEzNS0yNTYKK2Fsd2F5cyDsno8gMTM1LTM1NgorYWx3YXlzIOyekCA0Ni0xMjYKK2Fsd2F5cyDsnpEgNDYtMTI2LTEKK2Fsd2F5cyDsnpIgNDYtMTI2LTEtMQorYWx3YXlzIOyekyA0Ni0xMjYtMS0zCithbHdheXMg7J6UIDQ2LTEyNi0yNQorYWx3YXlzIOyelSA0Ni0xMjYtMjUtMTMKK2Fsd2F5cyDsnpYgNDYtMTI2LTI1LTM1NgorYWx3YXlzIOyelyA0Ni0xMjYtMzUKK2Fsd2F5cyDsnpggNDYtMTI2LTIKK2Fsd2F5cyDsnpkgNDYtMTI2LTItMQorYWx3YXlzIOyemiA0Ni0xMjYtMi0yNgorYWx3YXlzIOyemyA0Ni0xMjYtMi0xMgorYWx3YXlzIOyenCA0Ni0xMjYtMi0zCithbHdheXMg7J6dIDQ2LTEyNi0yLTIzNgorYWx3YXlzIOyeniA0Ni0xMjYtMi0yNTYKK2Fsd2F5cyDsnp8gNDYtMTI2LTItMzU2CithbHdheXMg7J6gIDQ2LTEyNi0yNgorYWx3YXlzIOyeoSA0Ni0xMjYtMTIKK2Fsd2F5cyDsnqIgNDYtMTI2LTEyLTMKK2Fsd2F5cyDsnqMgNDYtMTI2LTMKK2Fsd2F5cyDsnqQgNDYtMTI2LTMtMworYWx3YXlzIOyepSA0Ni0xMjYtMjM1NgorYWx3YXlzIOyepiA0Ni0xMjYtMTMKK2Fsd2F5cyDsnqcgNDYtMTI2LTIzCithbHdheXMg7J6oIDQ2LTEyNi0yMzUKK2Fsd2F5cyDsnqkgNDYtMTI2LTIzNgorYWx3YXlzIOyeqiA0Ni0xMjYtMjU2CithbHdheXMg7J6rIDQ2LTEyNi0zNTYKK2Fsd2F5cyDsnqwgNDYtMTIzNQorYWx3YXlzIOyerSA0Ni0xMjM1LTEKK2Fsd2F5cyDsnq4gNDYtMTIzNS0xLTEKK2Fsd2F5cyDsnq8gNDYtMTIzNS0xLTMKK2Fsd2F5cyDsnrAgNDYtMTIzNS0yNQorYWx3YXlzIOyesSA0Ni0xMjM1LTI1LTEzCithbHdheXMg7J6yIDQ2LTEyMzUtMjUtMzU2CithbHdheXMg7J6zIDQ2LTEyMzUtMzUKK2Fsd2F5cyDsnrQgNDYtMTIzNS0yCithbHdheXMg7J61IDQ2LTEyMzUtMi0xCithbHdheXMg7J62IDQ2LTEyMzUtMi0yNgorYWx3YXlzIOyetyA0Ni0xMjM1LTItMTIKK2Fsd2F5cyDsnrggNDYtMTIzNS0yLTMKK2Fsd2F5cyDsnrkgNDYtMTIzNS0yLTIzNgorYWx3YXlzIOyeuiA0Ni0xMjM1LTItMjU2CithbHdheXMg7J67IDQ2LTEyMzUtMi0zNTYKK2Fsd2F5cyDsnrwgNDYtMTIzNS0yNgorYWx3YXlzIOyevSA0Ni0xMjM1LTEyCithbHdheXMg7J6+IDQ2LTEyMzUtMTItMworYWx3YXlzIOyevyA0Ni0xMjM1LTMKK2Fsd2F5cyDsn4AgNDYtMTIzNS0zLTMKK2Fsd2F5cyDsn4EgNDYtMTIzNS0yMzU2CithbHdheXMg7J+CIDQ2LTEyMzUtMTMKK2Fsd2F5cyDsn4MgNDYtMTIzNS0yMworYWx3YXlzIOyfhCA0Ni0xMjM1LTIzNQorYWx3YXlzIOyfhSA0Ni0xMjM1LTIzNgorYWx3YXlzIOyfhiA0Ni0xMjM1LTI1NgorYWx3YXlzIOyfhyA0Ni0xMjM1LTM1NgorYWx3YXlzIOyfiCA0Ni0zNDUKK2Fsd2F5cyDsn4kgNDYtMzQ1LTEKK2Fsd2F5cyDsn4ogNDYtMzQ1LTEtMQorYWx3YXlzIOyfiyA0Ni0zNDUtMS0zCithbHdheXMg7J+MIDQ2LTM0NS0yNQorYWx3YXlzIOyfjSA0Ni0zNDUtMjUtMTMKK2Fsd2F5cyDsn44gNDYtMzQ1LTI1LTM1NgorYWx3YXlzIOyfjyA0Ni0zNDUtMzUKK2Fsd2F5cyDsn5AgNDYtMzQ1LTIKK2Fsd2F5cyDsn5EgNDYtMzQ1LTItMQorYWx3YXlzIOyfkiA0Ni0zNDUtMi0yNgorYWx3YXlzIOyfkyA0Ni0zNDUtMi0xMgorYWx3YXlzIOyflCA0Ni0zNDUtMi0zCithbHdheXMg7J+VIDQ2LTM0NS0yLTIzNgorYWx3YXlzIOyfliA0Ni0zNDUtMi0yNTYKK2Fsd2F5cyDsn5cgNDYtMzQ1LTItMzU2CithbHdheXMg7J+YIDQ2LTM0NS0yNgorYWx3YXlzIOyfmSA0Ni0zNDUtMTIKK2Fsd2F5cyDsn5ogNDYtMzQ1LTEyLTMKK2Fsd2F5cyDsn5sgNDYtMzQ1LTMKK2Fsd2F5cyDsn5wgNDYtMzQ1LTMtMworYWx3YXlzIOyfnSA0Ni0zNDUtMjM1NgorYWx3YXlzIOyfniA0Ni0zNDUtMTMKK2Fsd2F5cyDsn58gNDYtMzQ1LTIzCithbHdheXMg7J+gIDQ2LTM0NS0yMzUKK2Fsd2F5cyDsn6EgNDYtMzQ1LTIzNgorYWx3YXlzIOyfoiA0Ni0zNDUtMjU2CithbHdheXMg7J+jIDQ2LTM0NS0zNTYKK2Fsd2F5cyDsn6QgNDYtMzQ1LTEyMzUKK2Fsd2F5cyDsn6UgNDYtMzQ1LTEyMzUtMQorYWx3YXlzIOyfpiA0Ni0zNDUtMTIzNS0xLTEKK2Fsd2F5cyDsn6cgNDYtMzQ1LTEyMzUtMS0zCithbHdheXMg7J+oIDQ2LTM0NS0xMjM1LTI1CithbHdheXMg7J+pIDQ2LTM0NS0xMjM1LTI1LTEzCithbHdheXMg7J+qIDQ2LTM0NS0xMjM1LTI1LTM1NgorYWx3YXlzIOyfqyA0Ni0zNDUtMTIzNS0zNQorYWx3YXlzIOyfrCA0Ni0zNDUtMTIzNS0yCithbHdheXMg7J+tIDQ2LTM0NS0xMjM1LTItMQorYWx3YXlzIOyfriA0Ni0zNDUtMTIzNS0yLTI2CithbHdheXMg7J+vIDQ2LTM0NS0xMjM1LTItMTIKK2Fsd2F5cyDsn7AgNDYtMzQ1LTEyMzUtMi0zCithbHdheXMg7J+xIDQ2LTM0NS0xMjM1LTItMjM2CithbHdheXMg7J+yIDQ2LTM0NS0xMjM1LTItMjU2CithbHdheXMg7J+zIDQ2LTM0NS0xMjM1LTItMzU2CithbHdheXMg7J+0IDQ2LTM0NS0xMjM1LTI2CithbHdheXMg7J+1IDQ2LTM0NS0xMjM1LTEyCithbHdheXMg7J+2IDQ2LTM0NS0xMjM1LTEyLTMKK2Fsd2F5cyDsn7cgNDYtMzQ1LTEyMzUtMworYWx3YXlzIOyfuCA0Ni0zNDUtMTIzNS0zLTMKK2Fsd2F5cyDsn7kgNDYtMzQ1LTEyMzUtMjM1NgorYWx3YXlzIOyfuiA0Ni0zNDUtMTIzNS0xMworYWx3YXlzIOyfuyA0Ni0zNDUtMTIzNS0yMworYWx3YXlzIOyfvCA0Ni0zNDUtMTIzNS0yMzUKK2Fsd2F5cyDsn70gNDYtMzQ1LTEyMzUtMjM2CithbHdheXMg7J++IDQ2LTM0NS0xMjM1LTI1NgorYWx3YXlzIOyfvyA0Ni0zNDUtMTIzNS0zNTYKK2Fsd2F5cyDsoIAgNDYtMjM0CithbHdheXMg7KCBIDQ2LTIzNC0xCithbHdheXMg7KCCIDQ2LTIzNC0xLTEKK2Fsd2F5cyDsoIMgNDYtMjM0LTEtMworYWx3YXlzIOyghCA0Ni0yMzQtMjUKK2Fsd2F5cyDsoIUgNDYtMjM0LTI1LTEzCithbHdheXMg7KCGIDQ2LTIzNC0yNS0zNTYKK2Fsd2F5cyDsoIcgNDYtMjM0LTM1CithbHdheXMg7KCIIDQ2LTIzNC0yCithbHdheXMg7KCJIDQ2LTIzNC0yLTEKK2Fsd2F5cyDsoIogNDYtMjM0LTItMjYKK2Fsd2F5cyDsoIsgNDYtMjM0LTItMTIKK2Fsd2F5cyDsoIwgNDYtMjM0LTItMworYWx3YXlzIOygjSA0Ni0yMzQtMi0yMzYKK2Fsd2F5cyDsoI4gNDYtMjM0LTItMjU2CithbHdheXMg7KCPIDQ2LTIzNC0yLTM1NgorYWx3YXlzIOygkCA0Ni0yMzQtMjYKK2Fsd2F5cyDsoJEgNDYtMjM0LTEyCithbHdheXMg7KCSIDQ2LTIzNC0xMi0zCithbHdheXMg7KCTIDQ2LTIzNC0zCithbHdheXMg7KCUIDQ2LTIzNC0zLTMKK2Fsd2F5cyDsoJUgNDYtMjM0LTIzNTYKK2Fsd2F5cyDsoJYgNDYtMjM0LTEzCithbHdheXMg7KCXIDQ2LTIzNC0yMworYWx3YXlzIOygmCA0Ni0yMzQtMjM1CithbHdheXMg7KCZIDQ2LTIzNC0yMzYKK2Fsd2F5cyDsoJogNDYtMjM0LTI1NgorYWx3YXlzIOygmyA0Ni0yMzQtMzU2CithbHdheXMg7KCcIDQ2LTEzNDUKK2Fsd2F5cyDsoJ0gNDYtMTM0NS0xCithbHdheXMg7KCeIDQ2LTEzNDUtMS0xCithbHdheXMg7KCfIDQ2LTEzNDUtMS0zCithbHdheXMg7KCgIDQ2LTEzNDUtMjUKK2Fsd2F5cyDsoKEgNDYtMTM0NS0yNS0xMworYWx3YXlzIOygoiA0Ni0xMzQ1LTI1LTM1NgorYWx3YXlzIOygoyA0Ni0xMzQ1LTM1CithbHdheXMg7KCkIDQ2LTEzNDUtMgorYWx3YXlzIOygpSA0Ni0xMzQ1LTItMQorYWx3YXlzIOygpiA0Ni0xMzQ1LTItMjYKK2Fsd2F5cyDsoKcgNDYtMTM0NS0yLTEyCithbHdheXMg7KCoIDQ2LTEzNDUtMi0zCithbHdheXMg7KCpIDQ2LTEzNDUtMi0yMzYKK2Fsd2F5cyDsoKogNDYtMTM0NS0yLTI1NgorYWx3YXlzIOygqyA0Ni0xMzQ1LTItMzU2CithbHdheXMg7KCsIDQ2LTEzNDUtMjYKK2Fsd2F5cyDsoK0gNDYtMTM0NS0xMgorYWx3YXlzIOygriA0Ni0xMzQ1LTEyLTMKK2Fsd2F5cyDsoK8gNDYtMTM0NS0zCithbHdheXMg7KCwIDQ2LTEzNDUtMy0zCithbHdheXMg7KCxIDQ2LTEzNDUtMjM1NgorYWx3YXlzIOygsiA0Ni0xMzQ1LTEzCithbHdheXMg7KCzIDQ2LTEzNDUtMjMKK2Fsd2F5cyDsoLQgNDYtMTM0NS0yMzUKK2Fsd2F5cyDsoLUgNDYtMTM0NS0yMzYKK2Fsd2F5cyDsoLYgNDYtMTM0NS0yNTYKK2Fsd2F5cyDsoLcgNDYtMTM0NS0zNTYKK2Fsd2F5cyDsoLggNDYtMTU2CithbHdheXMg7KC5IDQ2LTE1Ni0xCithbHdheXMg7KC6IDQ2LTE1Ni0xLTEKK2Fsd2F5cyDsoLsgNDYtMTU2LTEtMworYWx3YXlzIOygvCA0Ni0xNTYtMjUKK2Fsd2F5cyDsoL0gNDYtMTU2LTI1LTEzCithbHdheXMg7KC+IDQ2LTE1Ni0yNS0zNTYKK2Fsd2F5cyDsoL8gNDYtMTU2LTM1CithbHdheXMg7KGAIDQ2LTE1Ni0yCithbHdheXMg7KGBIDQ2LTE1Ni0yLTEKK2Fsd2F5cyDsoYIgNDYtMTU2LTItMjYKK2Fsd2F5cyDsoYMgNDYtMTU2LTItMTIKK2Fsd2F5cyDsoYQgNDYtMTU2LTItMworYWx3YXlzIOyhhSA0Ni0xNTYtMi0yMzYKK2Fsd2F5cyDsoYYgNDYtMTU2LTItMjU2CithbHdheXMg7KGHIDQ2LTE1Ni0yLTM1NgorYWx3YXlzIOyhiCA0Ni0xNTYtMjYKK2Fsd2F5cyDsoYkgNDYtMTU2LTEyCithbHdheXMg7KGKIDQ2LTE1Ni0xMi0zCithbHdheXMg7KGLIDQ2LTE1Ni0zCithbHdheXMg7KGMIDQ2LTE1Ni0zLTMKK2Fsd2F5cyDsoY0gNDYtMTU2LTIzNTYKK2Fsd2F5cyDsoY4gNDYtMTU2LTEzCithbHdheXMg7KGPIDQ2LTE1Ni0yMworYWx3YXlzIOyhkCA0Ni0xNTYtMjM1CithbHdheXMg7KGRIDQ2LTE1Ni0yMzYKK2Fsd2F5cyDsoZIgNDYtMTU2LTI1NgorYWx3YXlzIOyhkyA0Ni0xNTYtMzU2CithbHdheXMg7KGUIDQ2LTM0CithbHdheXMg7KGVIDQ2LTM0LTEKK2Fsd2F5cyDsoZYgNDYtMzQtMS0xCithbHdheXMg7KGXIDQ2LTM0LTEtMworYWx3YXlzIOyhmCA0Ni0zNC0yNQorYWx3YXlzIOyhmSA0Ni0zNC0yNS0xMworYWx3YXlzIOyhmiA0Ni0zNC0yNS0zNTYKK2Fsd2F5cyDsoZsgNDYtMzQtMzUKK2Fsd2F5cyDsoZwgNDYtMzQtMgorYWx3YXlzIOyhnSA0Ni0zNC0yLTEKK2Fsd2F5cyDsoZ4gNDYtMzQtMi0yNgorYWx3YXlzIOyhnyA0Ni0zNC0yLTEyCithbHdheXMg7KGgIDQ2LTM0LTItMworYWx3YXlzIOyhoSA0Ni0zNC0yLTIzNgorYWx3YXlzIOyhoiA0Ni0zNC0yLTI1NgorYWx3YXlzIOyhoyA0Ni0zNC0yLTM1NgorYWx3YXlzIOyhpCA0Ni0zNC0yNgorYWx3YXlzIOyhpSA0Ni0zNC0xMgorYWx3YXlzIOyhpiA0Ni0zNC0xMi0zCithbHdheXMg7KGnIDQ2LTM0LTMKK2Fsd2F5cyDsoaggNDYtMzQtMy0zCithbHdheXMg7KGpIDQ2LTM0LTIzNTYKK2Fsd2F5cyDsoaogNDYtMzQtMTMKK2Fsd2F5cyDsoasgNDYtMzQtMjMKK2Fsd2F5cyDsoawgNDYtMzQtMjM1CithbHdheXMg7KGtIDQ2LTM0LTIzNgorYWx3YXlzIOyhriA0Ni0zNC0yNTYKK2Fsd2F5cyDsoa8gNDYtMzQtMzU2CithbHdheXMg7KGwIDQ2LTEzNgorYWx3YXlzIOyhsSA0Ni0xMzYtMQorYWx3YXlzIOyhsiA0Ni0xMzYtMS0xCithbHdheXMg7KGzIDQ2LTEzNi0xLTMKK2Fsd2F5cyDsobQgNDYtMTM2LTI1CithbHdheXMg7KG1IDQ2LTEzNi0yNS0xMworYWx3YXlzIOyhtiA0Ni0xMzYtMjUtMzU2CithbHdheXMg7KG3IDQ2LTEzNi0zNQorYWx3YXlzIOyhuCA0Ni0xMzYtMgorYWx3YXlzIOyhuSA0Ni0xMzYtMi0xCithbHdheXMg7KG6IDQ2LTEzNi0yLTI2CithbHdheXMg7KG7IDQ2LTEzNi0yLTEyCithbHdheXMg7KG8IDQ2LTEzNi0yLTMKK2Fsd2F5cyDsob0gNDYtMTM2LTItMjM2CithbHdheXMg7KG+IDQ2LTEzNi0yLTI1NgorYWx3YXlzIOyhvyA0Ni0xMzYtMi0zNTYKK2Fsd2F5cyDsooAgNDYtMTM2LTI2CithbHdheXMg7KKBIDQ2LTEzNi0xMgorYWx3YXlzIOyigiA0Ni0xMzYtMTItMworYWx3YXlzIOyigyA0Ni0xMzYtMworYWx3YXlzIOyihCA0Ni0xMzYtMy0zCithbHdheXMg7KKFIDQ2LTEzNi0yMzU2CithbHdheXMg7KKGIDQ2LTEzNi0xMworYWx3YXlzIOyihyA0Ni0xMzYtMjMKK2Fsd2F5cyDsooggNDYtMTM2LTIzNQorYWx3YXlzIOyiiSA0Ni0xMzYtMjM2CithbHdheXMg7KKKIDQ2LTEzNi0yNTYKK2Fsd2F5cyDsoosgNDYtMTM2LTM1NgorYWx3YXlzIOyijCA0Ni0xMjM2CithbHdheXMg7KKNIDQ2LTEyMzYtMQorYWx3YXlzIOyijiA0Ni0xMjM2LTEtMQorYWx3YXlzIOyijyA0Ni0xMjM2LTEtMworYWx3YXlzIOyikCA0Ni0xMjM2LTI1CithbHdheXMg7KKRIDQ2LTEyMzYtMjUtMTMKK2Fsd2F5cyDsopIgNDYtMTIzNi0yNS0zNTYKK2Fsd2F5cyDsopMgNDYtMTIzNi0zNQorYWx3YXlzIOyilCA0Ni0xMjM2LTIKK2Fsd2F5cyDsopUgNDYtMTIzNi0yLTEKK2Fsd2F5cyDsopYgNDYtMTIzNi0yLTI2CithbHdheXMg7KKXIDQ2LTEyMzYtMi0xMgorYWx3YXlzIOyimCA0Ni0xMjM2LTItMworYWx3YXlzIOyimSA0Ni0xMjM2LTItMjM2CithbHdheXMg7KKaIDQ2LTEyMzYtMi0yNTYKK2Fsd2F5cyDsopsgNDYtMTIzNi0yLTM1NgorYWx3YXlzIOyinCA0Ni0xMjM2LTI2CithbHdheXMg7KKdIDQ2LTEyMzYtMTIKK2Fsd2F5cyDsop4gNDYtMTIzNi0xMi0zCithbHdheXMg7KKfIDQ2LTEyMzYtMworYWx3YXlzIOyioCA0Ni0xMjM2LTMtMworYWx3YXlzIOyioSA0Ni0xMjM2LTIzNTYKK2Fsd2F5cyDsoqIgNDYtMTIzNi0xMworYWx3YXlzIOyioyA0Ni0xMjM2LTIzCithbHdheXMg7KKkIDQ2LTEyMzYtMjM1CithbHdheXMg7KKlIDQ2LTEyMzYtMjM2CithbHdheXMg7KKmIDQ2LTEyMzYtMjU2CithbHdheXMg7KKnIDQ2LTEyMzYtMzU2CithbHdheXMg7KKoIDQ2LTEyMzYtMTIzNQorYWx3YXlzIOyiqSA0Ni0xMjM2LTEyMzUtMQorYWx3YXlzIOyiqiA0Ni0xMjM2LTEyMzUtMS0xCithbHdheXMg7KKrIDQ2LTEyMzYtMTIzNS0xLTMKK2Fsd2F5cyDsoqwgNDYtMTIzNi0xMjM1LTI1CithbHdheXMg7KKtIDQ2LTEyMzYtMTIzNS0yNS0xMworYWx3YXlzIOyiriA0Ni0xMjM2LTEyMzUtMjUtMzU2CithbHdheXMg7KKvIDQ2LTEyMzYtMTIzNS0zNQorYWx3YXlzIOyisCA0Ni0xMjM2LTEyMzUtMgorYWx3YXlzIOyisSA0Ni0xMjM2LTEyMzUtMi0xCithbHdheXMg7KKyIDQ2LTEyMzYtMTIzNS0yLTI2CithbHdheXMg7KKzIDQ2LTEyMzYtMTIzNS0yLTEyCithbHdheXMg7KK0IDQ2LTEyMzYtMTIzNS0yLTMKK2Fsd2F5cyDsorUgNDYtMTIzNi0xMjM1LTItMjM2CithbHdheXMg7KK2IDQ2LTEyMzYtMTIzNS0yLTI1NgorYWx3YXlzIOyityA0Ni0xMjM2LTEyMzUtMi0zNTYKK2Fsd2F5cyDsorggNDYtMTIzNi0xMjM1LTI2CithbHdheXMg7KK5IDQ2LTEyMzYtMTIzNS0xMgorYWx3YXlzIOyiuiA0Ni0xMjM2LTEyMzUtMTItMworYWx3YXlzIOyiuyA0Ni0xMjM2LTEyMzUtMworYWx3YXlzIOyivCA0Ni0xMjM2LTEyMzUtMy0zCithbHdheXMg7KK9IDQ2LTEyMzYtMTIzNS0yMzU2CithbHdheXMg7KK+IDQ2LTEyMzYtMTIzNS0xMworYWx3YXlzIOyivyA0Ni0xMjM2LTEyMzUtMjMKK2Fsd2F5cyDso4AgNDYtMTIzNi0xMjM1LTIzNQorYWx3YXlzIOyjgSA0Ni0xMjM2LTEyMzUtMjM2CithbHdheXMg7KOCIDQ2LTEyMzYtMTIzNS0yNTYKK2Fsd2F5cyDso4MgNDYtMTIzNi0xMjM1LTM1NgorYWx3YXlzIOyjhCA0Ni0xMzQ1NgorYWx3YXlzIOyjhSA0Ni0xMzQ1Ni0xCithbHdheXMg7KOGIDQ2LTEzNDU2LTEtMQorYWx3YXlzIOyjhyA0Ni0xMzQ1Ni0xLTMKK2Fsd2F5cyDso4ggNDYtMTM0NTYtMjUKK2Fsd2F5cyDso4kgNDYtMTM0NTYtMjUtMTMKK2Fsd2F5cyDso4ogNDYtMTM0NTYtMjUtMzU2CithbHdheXMg7KOLIDQ2LTEzNDU2LTM1CithbHdheXMg7KOMIDQ2LTEzNDU2LTIKK2Fsd2F5cyDso40gNDYtMTM0NTYtMi0xCithbHdheXMg7KOOIDQ2LTEzNDU2LTItMjYKK2Fsd2F5cyDso48gNDYtMTM0NTYtMi0xMgorYWx3YXlzIOyjkCA0Ni0xMzQ1Ni0yLTMKK2Fsd2F5cyDso5EgNDYtMTM0NTYtMi0yMzYKK2Fsd2F5cyDso5IgNDYtMTM0NTYtMi0yNTYKK2Fsd2F5cyDso5MgNDYtMTM0NTYtMi0zNTYKK2Fsd2F5cyDso5QgNDYtMTM0NTYtMjYKK2Fsd2F5cyDso5UgNDYtMTM0NTYtMTIKK2Fsd2F5cyDso5YgNDYtMTM0NTYtMTItMworYWx3YXlzIOyjlyA0Ni0xMzQ1Ni0zCithbHdheXMg7KOYIDQ2LTEzNDU2LTMtMworYWx3YXlzIOyjmSA0Ni0xMzQ1Ni0yMzU2CithbHdheXMg7KOaIDQ2LTEzNDU2LTEzCithbHdheXMg7KObIDQ2LTEzNDU2LTIzCithbHdheXMg7KOcIDQ2LTEzNDU2LTIzNQorYWx3YXlzIOyjnSA0Ni0xMzQ1Ni0yMzYKK2Fsd2F5cyDso54gNDYtMTM0NTYtMjU2CithbHdheXMg7KOfIDQ2LTEzNDU2LTM1NgorYWx3YXlzIOyjoCA0Ni0zNDYKK2Fsd2F5cyDso6EgNDYtMzQ2LTEKK2Fsd2F5cyDso6IgNDYtMzQ2LTEtMQorYWx3YXlzIOyjoyA0Ni0zNDYtMS0zCithbHdheXMg7KOkIDQ2LTM0Ni0yNQorYWx3YXlzIOyjpSA0Ni0zNDYtMjUtMTMKK2Fsd2F5cyDso6YgNDYtMzQ2LTI1LTM1NgorYWx3YXlzIOyjpyA0Ni0zNDYtMzUKK2Fsd2F5cyDso6ggNDYtMzQ2LTIKK2Fsd2F5cyDso6kgNDYtMzQ2LTItMQorYWx3YXlzIOyjqiA0Ni0zNDYtMi0yNgorYWx3YXlzIOyjqyA0Ni0zNDYtMi0xMgorYWx3YXlzIOyjrCA0Ni0zNDYtMi0zCithbHdheXMg7KOtIDQ2LTM0Ni0yLTIzNgorYWx3YXlzIOyjriA0Ni0zNDYtMi0yNTYKK2Fsd2F5cyDso68gNDYtMzQ2LTItMzU2CithbHdheXMg7KOwIDQ2LTM0Ni0yNgorYWx3YXlzIOyjsSA0Ni0zNDYtMTIKK2Fsd2F5cyDso7IgNDYtMzQ2LTEyLTMKK2Fsd2F5cyDso7MgNDYtMzQ2LTMKK2Fsd2F5cyDso7QgNDYtMzQ2LTMtMworYWx3YXlzIOyjtSA0Ni0zNDYtMjM1NgorYWx3YXlzIOyjtiA0Ni0zNDYtMTMKK2Fsd2F5cyDso7cgNDYtMzQ2LTIzCithbHdheXMg7KO4IDQ2LTM0Ni0yMzUKK2Fsd2F5cyDso7kgNDYtMzQ2LTIzNgorYWx3YXlzIOyjuiA0Ni0zNDYtMjU2CithbHdheXMg7KO7IDQ2LTM0Ni0zNTYKK2Fsd2F5cyDso7wgNDYtMTM0CithbHdheXMg7KO9IDQ2LTEzNC0xCithbHdheXMg7KO+IDQ2LTEzNC0xLTEKK2Fsd2F5cyDso78gNDYtMTM0LTEtMworYWx3YXlzIOykgCA0Ni0xMzQtMjUKK2Fsd2F5cyDspIEgNDYtMTM0LTI1LTEzCithbHdheXMg7KSCIDQ2LTEzNC0yNS0zNTYKK2Fsd2F5cyDspIMgNDYtMTM0LTM1CithbHdheXMg7KSEIDQ2LTEzNC0yCithbHdheXMg7KSFIDQ2LTEzNC0yLTEKK2Fsd2F5cyDspIYgNDYtMTM0LTItMjYKK2Fsd2F5cyDspIcgNDYtMTM0LTItMTIKK2Fsd2F5cyDspIggNDYtMTM0LTItMworYWx3YXlzIOykiSA0Ni0xMzQtMi0yMzYKK2Fsd2F5cyDspIogNDYtMTM0LTItMjU2CithbHdheXMg7KSLIDQ2LTEzNC0yLTM1NgorYWx3YXlzIOykjCA0Ni0xMzQtMjYKK2Fsd2F5cyDspI0gNDYtMTM0LTEyCithbHdheXMg7KSOIDQ2LTEzNC0xMi0zCithbHdheXMg7KSPIDQ2LTEzNC0zCithbHdheXMg7KSQIDQ2LTEzNC0zLTMKK2Fsd2F5cyDspJEgNDYtMTM0LTIzNTYKK2Fsd2F5cyDspJIgNDYtMTM0LTEzCithbHdheXMg7KSTIDQ2LTEzNC0yMworYWx3YXlzIOyklCA0Ni0xMzQtMjM1CithbHdheXMg7KSVIDQ2LTEzNC0yMzYKK2Fsd2F5cyDspJYgNDYtMTM0LTI1NgorYWx3YXlzIOyklyA0Ni0xMzQtMzU2CithbHdheXMg7KSYIDQ2LTEyMzQKK2Fsd2F5cyDspJkgNDYtMTIzNC0xCithbHdheXMg7KSaIDQ2LTEyMzQtMS0xCithbHdheXMg7KSbIDQ2LTEyMzQtMS0zCithbHdheXMg7KScIDQ2LTEyMzQtMjUKK2Fsd2F5cyDspJ0gNDYtMTIzNC0yNS0xMworYWx3YXlzIOykniA0Ni0xMjM0LTI1LTM1NgorYWx3YXlzIOyknyA0Ni0xMjM0LTM1CithbHdheXMg7KSgIDQ2LTEyMzQtMgorYWx3YXlzIOykoSA0Ni0xMjM0LTItMQorYWx3YXlzIOykoiA0Ni0xMjM0LTItMjYKK2Fsd2F5cyDspKMgNDYtMTIzNC0yLTEyCithbHdheXMg7KSkIDQ2LTEyMzQtMi0zCithbHdheXMg7KSlIDQ2LTEyMzQtMi0yMzYKK2Fsd2F5cyDspKYgNDYtMTIzNC0yLTI1NgorYWx3YXlzIOykpyA0Ni0xMjM0LTItMzU2CithbHdheXMg7KSoIDQ2LTEyMzQtMjYKK2Fsd2F5cyDspKkgNDYtMTIzNC0xMgorYWx3YXlzIOykqiA0Ni0xMjM0LTEyLTMKK2Fsd2F5cyDspKsgNDYtMTIzNC0zCithbHdheXMg7KSsIDQ2LTEyMzQtMy0zCithbHdheXMg7KStIDQ2LTEyMzQtMjM1NgorYWx3YXlzIOykriA0Ni0xMjM0LTEzCithbHdheXMg7KSvIDQ2LTEyMzQtMjMKK2Fsd2F5cyDspLAgNDYtMTIzNC0yMzUKK2Fsd2F5cyDspLEgNDYtMTIzNC0yMzYKK2Fsd2F5cyDspLIgNDYtMTIzNC0yNTYKK2Fsd2F5cyDspLMgNDYtMTIzNC0zNTYKK2Fsd2F5cyDspLQgNDYtMTIzNC0xMjM1CithbHdheXMg7KS1IDQ2LTEyMzQtMTIzNS0xCithbHdheXMg7KS2IDQ2LTEyMzQtMTIzNS0xLTEKK2Fsd2F5cyDspLcgNDYtMTIzNC0xMjM1LTEtMworYWx3YXlzIOykuCA0Ni0xMjM0LTEyMzUtMjUKK2Fsd2F5cyDspLkgNDYtMTIzNC0xMjM1LTI1LTEzCithbHdheXMg7KS6IDQ2LTEyMzQtMTIzNS0yNS0zNTYKK2Fsd2F5cyDspLsgNDYtMTIzNC0xMjM1LTM1CithbHdheXMg7KS8IDQ2LTEyMzQtMTIzNS0yCithbHdheXMg7KS9IDQ2LTEyMzQtMTIzNS0yLTEKK2Fsd2F5cyDspL4gNDYtMTIzNC0xMjM1LTItMjYKK2Fsd2F5cyDspL8gNDYtMTIzNC0xMjM1LTItMTIKK2Fsd2F5cyDspYAgNDYtMTIzNC0xMjM1LTItMworYWx3YXlzIOylgSA0Ni0xMjM0LTEyMzUtMi0yMzYKK2Fsd2F5cyDspYIgNDYtMTIzNC0xMjM1LTItMjU2CithbHdheXMg7KWDIDQ2LTEyMzQtMTIzNS0yLTM1NgorYWx3YXlzIOylhCA0Ni0xMjM0LTEyMzUtMjYKK2Fsd2F5cyDspYUgNDYtMTIzNC0xMjM1LTEyCithbHdheXMg7KWGIDQ2LTEyMzQtMTIzNS0xMi0zCithbHdheXMg7KWHIDQ2LTEyMzQtMTIzNS0zCithbHdheXMg7KWIIDQ2LTEyMzQtMTIzNS0zLTMKK2Fsd2F5cyDspYkgNDYtMTIzNC0xMjM1LTIzNTYKK2Fsd2F5cyDspYogNDYtMTIzNC0xMjM1LTEzCithbHdheXMg7KWLIDQ2LTEyMzQtMTIzNS0yMworYWx3YXlzIOyljCA0Ni0xMjM0LTEyMzUtMjM1CithbHdheXMg7KWNIDQ2LTEyMzQtMTIzNS0yMzYKK2Fsd2F5cyDspY4gNDYtMTIzNC0xMjM1LTI1NgorYWx3YXlzIOyljyA0Ni0xMjM0LTEyMzUtMzU2CithbHdheXMg7KWQIDQ2LTEzNC0xMjM1CithbHdheXMg7KWRIDQ2LTEzNC0xMjM1LTEKK2Fsd2F5cyDspZIgNDYtMTM0LTEyMzUtMS0xCithbHdheXMg7KWTIDQ2LTEzNC0xMjM1LTEtMworYWx3YXlzIOyllCA0Ni0xMzQtMTIzNS0yNQorYWx3YXlzIOyllSA0Ni0xMzQtMTIzNS0yNS0xMworYWx3YXlzIOylliA0Ni0xMzQtMTIzNS0yNS0zNTYKK2Fsd2F5cyDspZcgNDYtMTM0LTEyMzUtMzUKK2Fsd2F5cyDspZggNDYtMTM0LTEyMzUtMgorYWx3YXlzIOylmSA0Ni0xMzQtMTIzNS0yLTEKK2Fsd2F5cyDspZogNDYtMTM0LTEyMzUtMi0yNgorYWx3YXlzIOylmyA0Ni0xMzQtMTIzNS0yLTEyCithbHdheXMg7KWcIDQ2LTEzNC0xMjM1LTItMworYWx3YXlzIOylnSA0Ni0xMzQtMTIzNS0yLTIzNgorYWx3YXlzIOylniA0Ni0xMzQtMTIzNS0yLTI1NgorYWx3YXlzIOylnyA0Ni0xMzQtMTIzNS0yLTM1NgorYWx3YXlzIOyloCA0Ni0xMzQtMTIzNS0yNgorYWx3YXlzIOyloSA0Ni0xMzQtMTIzNS0xMgorYWx3YXlzIOyloiA0Ni0xMzQtMTIzNS0xMi0zCithbHdheXMg7KWjIDQ2LTEzNC0xMjM1LTMKK2Fsd2F5cyDspaQgNDYtMTM0LTEyMzUtMy0zCithbHdheXMg7KWlIDQ2LTEzNC0xMjM1LTIzNTYKK2Fsd2F5cyDspaYgNDYtMTM0LTEyMzUtMTMKK2Fsd2F5cyDspacgNDYtMTM0LTEyMzUtMjMKK2Fsd2F5cyDspaggNDYtMTM0LTEyMzUtMjM1CithbHdheXMg7KWpIDQ2LTEzNC0xMjM1LTIzNgorYWx3YXlzIOylqiA0Ni0xMzQtMTIzNS0yNTYKK2Fsd2F5cyDspasgNDYtMTM0LTEyMzUtMzU2CithbHdheXMg7KWsIDQ2LTE0NgorYWx3YXlzIOylrSA0Ni0xNDYtMQorYWx3YXlzIOylriA0Ni0xNDYtMS0xCithbHdheXMg7KWvIDQ2LTE0Ni0xLTMKK2Fsd2F5cyDspbAgNDYtMTQ2LTI1CithbHdheXMg7KWxIDQ2LTE0Ni0yNS0xMworYWx3YXlzIOylsiA0Ni0xNDYtMjUtMzU2CithbHdheXMg7KWzIDQ2LTE0Ni0zNQorYWx3YXlzIOyltCA0Ni0xNDYtMgorYWx3YXlzIOyltSA0Ni0xNDYtMi0xCithbHdheXMg7KW2IDQ2LTE0Ni0yLTI2CithbHdheXMg7KW3IDQ2LTE0Ni0yLTEyCithbHdheXMg7KW4IDQ2LTE0Ni0yLTMKK2Fsd2F5cyDspbkgNDYtMTQ2LTItMjM2CithbHdheXMg7KW6IDQ2LTE0Ni0yLTI1NgorYWx3YXlzIOyluyA0Ni0xNDYtMi0zNTYKK2Fsd2F5cyDspbwgNDYtMTQ2LTI2CithbHdheXMg7KW9IDQ2LTE0Ni0xMgorYWx3YXlzIOylviA0Ni0xNDYtMTItMworYWx3YXlzIOylvyA0Ni0xNDYtMworYWx3YXlzIOymgCA0Ni0xNDYtMy0zCithbHdheXMg7KaBIDQ2LTE0Ni0yMzU2CithbHdheXMg7KaCIDQ2LTE0Ni0xMworYWx3YXlzIOymgyA0Ni0xNDYtMjMKK2Fsd2F5cyDspoQgNDYtMTQ2LTIzNQorYWx3YXlzIOymhSA0Ni0xNDYtMjM2CithbHdheXMg7KaGIDQ2LTE0Ni0yNTYKK2Fsd2F5cyDspocgNDYtMTQ2LTM1NgorYWx3YXlzIOymiCA0Ni0yNDYKK2Fsd2F5cyDspokgNDYtMjQ2LTEKK2Fsd2F5cyDspoogNDYtMjQ2LTEtMQorYWx3YXlzIOymiyA0Ni0yNDYtMS0zCithbHdheXMg7KaMIDQ2LTI0Ni0yNQorYWx3YXlzIOymjSA0Ni0yNDYtMjUtMTMKK2Fsd2F5cyDspo4gNDYtMjQ2LTI1LTM1NgorYWx3YXlzIOymjyA0Ni0yNDYtMzUKK2Fsd2F5cyDsppAgNDYtMjQ2LTIKK2Fsd2F5cyDsppEgNDYtMjQ2LTItMQorYWx3YXlzIOymkiA0Ni0yNDYtMi0yNgorYWx3YXlzIOymkyA0Ni0yNDYtMi0xMgorYWx3YXlzIOymlCA0Ni0yNDYtMi0zCithbHdheXMg7KaVIDQ2LTI0Ni0yLTIzNgorYWx3YXlzIOymliA0Ni0yNDYtMi0yNTYKK2Fsd2F5cyDsppcgNDYtMjQ2LTItMzU2CithbHdheXMg7KaYIDQ2LTI0Ni0yNgorYWx3YXlzIOymmSA0Ni0yNDYtMTIKK2Fsd2F5cyDsppogNDYtMjQ2LTEyLTMKK2Fsd2F5cyDsppsgNDYtMjQ2LTMKK2Fsd2F5cyDsppwgNDYtMjQ2LTMtMworYWx3YXlzIOymnSA0Ni0yNDYtMjM1NgorYWx3YXlzIOymniA0Ni0yNDYtMTMKK2Fsd2F5cyDspp8gNDYtMjQ2LTIzCithbHdheXMg7KagIDQ2LTI0Ni0yMzUKK2Fsd2F5cyDspqEgNDYtMjQ2LTIzNgorYWx3YXlzIOymoiA0Ni0yNDYtMjU2CithbHdheXMg7KajIDQ2LTI0Ni0zNTYKK2Fsd2F5cyDspqQgNDYtMjQ1NgorYWx3YXlzIOympSA0Ni0yNDU2LTEKK2Fsd2F5cyDspqYgNDYtMjQ1Ni0xLTEKK2Fsd2F5cyDspqcgNDYtMjQ1Ni0xLTMKK2Fsd2F5cyDspqggNDYtMjQ1Ni0yNQorYWx3YXlzIOymqSA0Ni0yNDU2LTI1LTEzCithbHdheXMg7KaqIDQ2LTI0NTYtMjUtMzU2CithbHdheXMg7KarIDQ2LTI0NTYtMzUKK2Fsd2F5cyDspqwgNDYtMjQ1Ni0yCithbHdheXMg7KatIDQ2LTI0NTYtMi0xCithbHdheXMg7KauIDQ2LTI0NTYtMi0yNgorYWx3YXlzIOymryA0Ni0yNDU2LTItMTIKK2Fsd2F5cyDsprAgNDYtMjQ1Ni0yLTMKK2Fsd2F5cyDsprEgNDYtMjQ1Ni0yLTIzNgorYWx3YXlzIOymsiA0Ni0yNDU2LTItMjU2CithbHdheXMg7KazIDQ2LTI0NTYtMi0zNTYKK2Fsd2F5cyDsprQgNDYtMjQ1Ni0yNgorYWx3YXlzIOymtSA0Ni0yNDU2LTEyCithbHdheXMg7Ka2IDQ2LTI0NTYtMTItMworYWx3YXlzIOymtyA0Ni0yNDU2LTMKK2Fsd2F5cyDsprggNDYtMjQ1Ni0zLTMKK2Fsd2F5cyDsprkgNDYtMjQ1Ni0yMzU2CithbHdheXMg7Ka6IDQ2LTI0NTYtMTMKK2Fsd2F5cyDsprsgNDYtMjQ1Ni0yMworYWx3YXlzIOymvCA0Ni0yNDU2LTIzNQorYWx3YXlzIOymvSA0Ni0yNDU2LTIzNgorYWx3YXlzIOymviA0Ni0yNDU2LTI1NgorYWx3YXlzIOymvyA0Ni0yNDU2LTM1NgorYWx3YXlzIOyngCA0Ni0xMzUKK2Fsd2F5cyDsp4EgNDYtMTM1LTEKK2Fsd2F5cyDsp4IgNDYtMTM1LTEtMQorYWx3YXlzIOyngyA0Ni0xMzUtMS0zCithbHdheXMg7KeEIDQ2LTEzNS0yNQorYWx3YXlzIOynhSA0Ni0xMzUtMjUtMTMKK2Fsd2F5cyDsp4YgNDYtMTM1LTI1LTM1NgorYWx3YXlzIOynhyA0Ni0xMzUtMzUKK2Fsd2F5cyDsp4ggNDYtMTM1LTIKK2Fsd2F5cyDsp4kgNDYtMTM1LTItMQorYWx3YXlzIOyniiA0Ni0xMzUtMi0yNgorYWx3YXlzIOyniyA0Ni0xMzUtMi0xMgorYWx3YXlzIOynjCA0Ni0xMzUtMi0zCithbHdheXMg7KeNIDQ2LTEzNS0yLTIzNgorYWx3YXlzIOynjiA0Ni0xMzUtMi0yNTYKK2Fsd2F5cyDsp48gNDYtMTM1LTItMzU2CithbHdheXMg7KeQIDQ2LTEzNS0yNgorYWx3YXlzIOynkSA0Ni0xMzUtMTIKK2Fsd2F5cyDsp5IgNDYtMTM1LTEyLTMKK2Fsd2F5cyDsp5MgNDYtMTM1LTMKK2Fsd2F5cyDsp5QgNDYtMTM1LTMtMworYWx3YXlzIOynlSA0Ni0xMzUtMjM1NgorYWx3YXlzIOynliA0Ni0xMzUtMTMKK2Fsd2F5cyDsp5cgNDYtMTM1LTIzCithbHdheXMg7KeYIDQ2LTEzNS0yMzUKK2Fsd2F5cyDsp5kgNDYtMTM1LTIzNgorYWx3YXlzIOynmiA0Ni0xMzUtMjU2CithbHdheXMg7KebIDQ2LTEzNS0zNTYKK2Fsd2F5cyDsp5wgNDYtNDYtMTI2CithbHdheXMg7KedIDQ2LTQ2LTEyNi0xCithbHdheXMg7KeeIDQ2LTQ2LTEyNi0xLTEKK2Fsd2F5cyDsp58gNDYtNDYtMTI2LTEtMworYWx3YXlzIOynoCA0Ni00Ni0xMjYtMjUKK2Fsd2F5cyDsp6EgNDYtNDYtMTI2LTI1LTEzCithbHdheXMg7KeiIDQ2LTQ2LTEyNi0yNS0zNTYKK2Fsd2F5cyDsp6MgNDYtNDYtMTI2LTM1CithbHdheXMg7KekIDQ2LTQ2LTEyNi0yCithbHdheXMg7KelIDQ2LTQ2LTEyNi0yLTEKK2Fsd2F5cyDsp6YgNDYtNDYtMTI2LTItMjYKK2Fsd2F5cyDsp6cgNDYtNDYtMTI2LTItMTIKK2Fsd2F5cyDsp6ggNDYtNDYtMTI2LTItMworYWx3YXlzIOynqSA0Ni00Ni0xMjYtMi0yMzYKK2Fsd2F5cyDsp6ogNDYtNDYtMTI2LTItMjU2CithbHdheXMg7KerIDQ2LTQ2LTEyNi0yLTM1NgorYWx3YXlzIOynrCA0Ni00Ni0xMjYtMjYKK2Fsd2F5cyDsp60gNDYtNDYtMTI2LTEyCithbHdheXMg7KeuIDQ2LTQ2LTEyNi0xMi0zCithbHdheXMg7KevIDQ2LTQ2LTEyNi0zCithbHdheXMg7KewIDQ2LTQ2LTEyNi0zLTMKK2Fsd2F5cyDsp7EgNDYtNDYtMTI2LTIzNTYKK2Fsd2F5cyDsp7IgNDYtNDYtMTI2LTEzCithbHdheXMg7KezIDQ2LTQ2LTEyNi0yMworYWx3YXlzIOyntCA0Ni00Ni0xMjYtMjM1CithbHdheXMg7Ke1IDQ2LTQ2LTEyNi0yMzYKK2Fsd2F5cyDsp7YgNDYtNDYtMTI2LTI1NgorYWx3YXlzIOyntyA0Ni00Ni0xMjYtMzU2CithbHdheXMg7Ke4IDQ2LTQ2LTEyMzUKK2Fsd2F5cyDsp7kgNDYtNDYtMTIzNS0xCithbHdheXMg7Ke6IDQ2LTQ2LTEyMzUtMS0xCithbHdheXMg7Ke7IDQ2LTQ2LTEyMzUtMS0zCithbHdheXMg7Ke8IDQ2LTQ2LTEyMzUtMjUKK2Fsd2F5cyDsp70gNDYtNDYtMTIzNS0yNS0xMworYWx3YXlzIOynviA0Ni00Ni0xMjM1LTI1LTM1NgorYWx3YXlzIOynvyA0Ni00Ni0xMjM1LTM1CithbHdheXMg7KiAIDQ2LTQ2LTEyMzUtMgorYWx3YXlzIOyogSA0Ni00Ni0xMjM1LTItMQorYWx3YXlzIOyogiA0Ni00Ni0xMjM1LTItMjYKK2Fsd2F5cyDsqIMgNDYtNDYtMTIzNS0yLTEyCithbHdheXMg7KiEIDQ2LTQ2LTEyMzUtMi0zCithbHdheXMg7KiFIDQ2LTQ2LTEyMzUtMi0yMzYKK2Fsd2F5cyDsqIYgNDYtNDYtMTIzNS0yLTI1NgorYWx3YXlzIOyohyA0Ni00Ni0xMjM1LTItMzU2CithbHdheXMg7KiIIDQ2LTQ2LTEyMzUtMjYKK2Fsd2F5cyDsqIkgNDYtNDYtMTIzNS0xMgorYWx3YXlzIOyoiiA0Ni00Ni0xMjM1LTEyLTMKK2Fsd2F5cyDsqIsgNDYtNDYtMTIzNS0zCithbHdheXMg7KiMIDQ2LTQ2LTEyMzUtMy0zCithbHdheXMg7KiNIDQ2LTQ2LTEyMzUtMjM1NgorYWx3YXlzIOyojiA0Ni00Ni0xMjM1LTEzCithbHdheXMg7KiPIDQ2LTQ2LTEyMzUtMjMKK2Fsd2F5cyDsqJAgNDYtNDYtMTIzNS0yMzUKK2Fsd2F5cyDsqJEgNDYtNDYtMTIzNS0yMzYKK2Fsd2F5cyDsqJIgNDYtNDYtMTIzNS0yNTYKK2Fsd2F5cyDsqJMgNDYtNDYtMTIzNS0zNTYKK2Fsd2F5cyDsqJQgNDYtNDYtMzQ1CithbHdheXMg7KiVIDQ2LTQ2LTM0NS0xCithbHdheXMg7KiWIDQ2LTQ2LTM0NS0xLTEKK2Fsd2F5cyDsqJcgNDYtNDYtMzQ1LTEtMworYWx3YXlzIOyomCA0Ni00Ni0zNDUtMjUKK2Fsd2F5cyDsqJkgNDYtNDYtMzQ1LTI1LTEzCithbHdheXMg7KiaIDQ2LTQ2LTM0NS0yNS0zNTYKK2Fsd2F5cyDsqJsgNDYtNDYtMzQ1LTM1CithbHdheXMg7KicIDQ2LTQ2LTM0NS0yCithbHdheXMg7KidIDQ2LTQ2LTM0NS0yLTEKK2Fsd2F5cyDsqJ4gNDYtNDYtMzQ1LTItMjYKK2Fsd2F5cyDsqJ8gNDYtNDYtMzQ1LTItMTIKK2Fsd2F5cyDsqKAgNDYtNDYtMzQ1LTItMworYWx3YXlzIOyooSA0Ni00Ni0zNDUtMi0yMzYKK2Fsd2F5cyDsqKIgNDYtNDYtMzQ1LTItMjU2CithbHdheXMg7KijIDQ2LTQ2LTM0NS0yLTM1NgorYWx3YXlzIOyopCA0Ni00Ni0zNDUtMjYKK2Fsd2F5cyDsqKUgNDYtNDYtMzQ1LTEyCithbHdheXMg7KimIDQ2LTQ2LTM0NS0xMi0zCithbHdheXMg7KinIDQ2LTQ2LTM0NS0zCithbHdheXMg7KioIDQ2LTQ2LTM0NS0zLTMKK2Fsd2F5cyDsqKkgNDYtNDYtMzQ1LTIzNTYKK2Fsd2F5cyDsqKogNDYtNDYtMzQ1LTEzCithbHdheXMg7KirIDQ2LTQ2LTM0NS0yMworYWx3YXlzIOyorCA0Ni00Ni0zNDUtMjM1CithbHdheXMg7KitIDQ2LTQ2LTM0NS0yMzYKK2Fsd2F5cyDsqK4gNDYtNDYtMzQ1LTI1NgorYWx3YXlzIOyoryA0Ni00Ni0zNDUtMzU2CithbHdheXMg7KiwIDQ2LTQ2LTM0NS0xMjM1CithbHdheXMg7KixIDQ2LTQ2LTM0NS0xMjM1LTEKK2Fsd2F5cyDsqLIgNDYtNDYtMzQ1LTEyMzUtMS0xCithbHdheXMg7KizIDQ2LTQ2LTM0NS0xMjM1LTEtMworYWx3YXlzIOyotCA0Ni00Ni0zNDUtMTIzNS0yNQorYWx3YXlzIOyotSA0Ni00Ni0zNDUtMTIzNS0yNS0xMworYWx3YXlzIOyotiA0Ni00Ni0zNDUtMTIzNS0yNS0zNTYKK2Fsd2F5cyDsqLcgNDYtNDYtMzQ1LTEyMzUtMzUKK2Fsd2F5cyDsqLggNDYtNDYtMzQ1LTEyMzUtMgorYWx3YXlzIOyouSA0Ni00Ni0zNDUtMTIzNS0yLTEKK2Fsd2F5cyDsqLogNDYtNDYtMzQ1LTEyMzUtMi0yNgorYWx3YXlzIOyouyA0Ni00Ni0zNDUtMTIzNS0yLTEyCithbHdheXMg7Ki8IDQ2LTQ2LTM0NS0xMjM1LTItMworYWx3YXlzIOyovSA0Ni00Ni0zNDUtMTIzNS0yLTIzNgorYWx3YXlzIOyoviA0Ni00Ni0zNDUtMTIzNS0yLTI1NgorYWx3YXlzIOyovyA0Ni00Ni0zNDUtMTIzNS0yLTM1NgorYWx3YXlzIOypgCA0Ni00Ni0zNDUtMTIzNS0yNgorYWx3YXlzIOypgSA0Ni00Ni0zNDUtMTIzNS0xMgorYWx3YXlzIOypgiA0Ni00Ni0zNDUtMTIzNS0xMi0zCithbHdheXMg7KmDIDQ2LTQ2LTM0NS0xMjM1LTMKK2Fsd2F5cyDsqYQgNDYtNDYtMzQ1LTEyMzUtMy0zCithbHdheXMg7KmFIDQ2LTQ2LTM0NS0xMjM1LTIzNTYKK2Fsd2F5cyDsqYYgNDYtNDYtMzQ1LTEyMzUtMTMKK2Fsd2F5cyDsqYcgNDYtNDYtMzQ1LTEyMzUtMjMKK2Fsd2F5cyDsqYggNDYtNDYtMzQ1LTEyMzUtMjM1CithbHdheXMg7KmJIDQ2LTQ2LTM0NS0xMjM1LTIzNgorYWx3YXlzIOypiiA0Ni00Ni0zNDUtMTIzNS0yNTYKK2Fsd2F5cyDsqYsgNDYtNDYtMzQ1LTEyMzUtMzU2CithbHdheXMg7KmMIDQ2LTQ2LTIzNAorYWx3YXlzIOypjSA0Ni00Ni0yMzQtMQorYWx3YXlzIOypjiA0Ni00Ni0yMzQtMS0xCithbHdheXMg7KmPIDQ2LTQ2LTIzNC0xLTMKK2Fsd2F5cyDsqZAgNDYtNDYtMjM0LTI1CithbHdheXMg7KmRIDQ2LTQ2LTIzNC0yNS0xMworYWx3YXlzIOypkiA0Ni00Ni0yMzQtMjUtMzU2CithbHdheXMg7KmTIDQ2LTQ2LTIzNC0zNQorYWx3YXlzIOyplCA0Ni00Ni0yMzQtMgorYWx3YXlzIOyplSA0Ni00Ni0yMzQtMi0xCithbHdheXMg7KmWIDQ2LTQ2LTIzNC0yLTI2CithbHdheXMg7KmXIDQ2LTQ2LTIzNC0yLTEyCithbHdheXMg7KmYIDQ2LTQ2LTIzNC0yLTMKK2Fsd2F5cyDsqZkgNDYtNDYtMjM0LTItMjM2CithbHdheXMg7KmaIDQ2LTQ2LTIzNC0yLTI1NgorYWx3YXlzIOypmyA0Ni00Ni0yMzQtMi0zNTYKK2Fsd2F5cyDsqZwgNDYtNDYtMjM0LTI2CithbHdheXMg7KmdIDQ2LTQ2LTIzNC0xMgorYWx3YXlzIOypniA0Ni00Ni0yMzQtMTItMworYWx3YXlzIOypnyA0Ni00Ni0yMzQtMworYWx3YXlzIOypoCA0Ni00Ni0yMzQtMy0zCithbHdheXMg7KmhIDQ2LTQ2LTIzNC0yMzU2CithbHdheXMg7KmiIDQ2LTQ2LTIzNC0xMworYWx3YXlzIOypoyA0Ni00Ni0yMzQtMjMKK2Fsd2F5cyDsqaQgNDYtNDYtMjM0LTIzNQorYWx3YXlzIOyppSA0Ni00Ni0yMzQtMjM2CithbHdheXMg7KmmIDQ2LTQ2LTIzNC0yNTYKK2Fsd2F5cyDsqacgNDYtNDYtMjM0LTM1NgorYWx3YXlzIOypqCA0Ni00Ni0xMzQ1CithbHdheXMg7KmpIDQ2LTQ2LTEzNDUtMQorYWx3YXlzIOypqiA0Ni00Ni0xMzQ1LTEtMQorYWx3YXlzIOypqyA0Ni00Ni0xMzQ1LTEtMworYWx3YXlzIOyprCA0Ni00Ni0xMzQ1LTI1CithbHdheXMg7KmtIDQ2LTQ2LTEzNDUtMjUtMTMKK2Fsd2F5cyDsqa4gNDYtNDYtMTM0NS0yNS0zNTYKK2Fsd2F5cyDsqa8gNDYtNDYtMTM0NS0zNQorYWx3YXlzIOypsCA0Ni00Ni0xMzQ1LTIKK2Fsd2F5cyDsqbEgNDYtNDYtMTM0NS0yLTEKK2Fsd2F5cyDsqbIgNDYtNDYtMTM0NS0yLTI2CithbHdheXMg7KmzIDQ2LTQ2LTEzNDUtMi0xMgorYWx3YXlzIOyptCA0Ni00Ni0xMzQ1LTItMworYWx3YXlzIOyptSA0Ni00Ni0xMzQ1LTItMjM2CithbHdheXMg7Km2IDQ2LTQ2LTEzNDUtMi0yNTYKK2Fsd2F5cyDsqbcgNDYtNDYtMTM0NS0yLTM1NgorYWx3YXlzIOypuCA0Ni00Ni0xMzQ1LTI2CithbHdheXMg7Km5IDQ2LTQ2LTEzNDUtMTIKK2Fsd2F5cyDsqbogNDYtNDYtMTM0NS0xMi0zCithbHdheXMg7Km7IDQ2LTQ2LTEzNDUtMworYWx3YXlzIOypvCA0Ni00Ni0xMzQ1LTMtMworYWx3YXlzIOypvSA0Ni00Ni0xMzQ1LTIzNTYKK2Fsd2F5cyDsqb4gNDYtNDYtMTM0NS0xMworYWx3YXlzIOypvyA0Ni00Ni0xMzQ1LTIzCithbHdheXMg7KqAIDQ2LTQ2LTEzNDUtMjM1CithbHdheXMg7KqBIDQ2LTQ2LTEzNDUtMjM2CithbHdheXMg7KqCIDQ2LTQ2LTEzNDUtMjU2CithbHdheXMg7KqDIDQ2LTQ2LTEzNDUtMzU2CithbHdheXMg7KqEIDQ2LTQ2LTE1NgorYWx3YXlzIOyqhSA0Ni00Ni0xNTYtMQorYWx3YXlzIOyqhiA0Ni00Ni0xNTYtMS0xCithbHdheXMg7KqHIDQ2LTQ2LTE1Ni0xLTMKK2Fsd2F5cyDsqoggNDYtNDYtMTU2LTI1CithbHdheXMg7KqJIDQ2LTQ2LTE1Ni0yNS0xMworYWx3YXlzIOyqiiA0Ni00Ni0xNTYtMjUtMzU2CithbHdheXMg7KqLIDQ2LTQ2LTE1Ni0zNQorYWx3YXlzIOyqjCA0Ni00Ni0xNTYtMgorYWx3YXlzIOyqjSA0Ni00Ni0xNTYtMi0xCithbHdheXMg7KqOIDQ2LTQ2LTE1Ni0yLTI2CithbHdheXMg7KqPIDQ2LTQ2LTE1Ni0yLTEyCithbHdheXMg7KqQIDQ2LTQ2LTE1Ni0yLTMKK2Fsd2F5cyDsqpEgNDYtNDYtMTU2LTItMjM2CithbHdheXMg7KqSIDQ2LTQ2LTE1Ni0yLTI1NgorYWx3YXlzIOyqkyA0Ni00Ni0xNTYtMi0zNTYKK2Fsd2F5cyDsqpQgNDYtNDYtMTU2LTI2CithbHdheXMg7KqVIDQ2LTQ2LTE1Ni0xMgorYWx3YXlzIOyqliA0Ni00Ni0xNTYtMTItMworYWx3YXlzIOyqlyA0Ni00Ni0xNTYtMworYWx3YXlzIOyqmCA0Ni00Ni0xNTYtMy0zCithbHdheXMg7KqZIDQ2LTQ2LTE1Ni0yMzU2CithbHdheXMg7KqaIDQ2LTQ2LTE1Ni0xMworYWx3YXlzIOyqmyA0Ni00Ni0xNTYtMjMKK2Fsd2F5cyDsqpwgNDYtNDYtMTU2LTIzNQorYWx3YXlzIOyqnSA0Ni00Ni0xNTYtMjM2CithbHdheXMg7KqeIDQ2LTQ2LTE1Ni0yNTYKK2Fsd2F5cyDsqp8gNDYtNDYtMTU2LTM1NgorYWx3YXlzIOyqoCA0Ni00Ni0zNAorYWx3YXlzIOyqoSA0Ni00Ni0zNC0xCithbHdheXMg7KqiIDQ2LTQ2LTM0LTEtMQorYWx3YXlzIOyqoyA0Ni00Ni0zNC0xLTMKK2Fsd2F5cyDsqqQgNDYtNDYtMzQtMjUKK2Fsd2F5cyDsqqUgNDYtNDYtMzQtMjUtMTMKK2Fsd2F5cyDsqqYgNDYtNDYtMzQtMjUtMzU2CithbHdheXMg7KqnIDQ2LTQ2LTM0LTM1CithbHdheXMg7KqoIDQ2LTQ2LTM0LTIKK2Fsd2F5cyDsqqkgNDYtNDYtMzQtMi0xCithbHdheXMg7KqqIDQ2LTQ2LTM0LTItMjYKK2Fsd2F5cyDsqqsgNDYtNDYtMzQtMi0xMgorYWx3YXlzIOyqrCA0Ni00Ni0zNC0yLTMKK2Fsd2F5cyDsqq0gNDYtNDYtMzQtMi0yMzYKK2Fsd2F5cyDsqq4gNDYtNDYtMzQtMi0yNTYKK2Fsd2F5cyDsqq8gNDYtNDYtMzQtMi0zNTYKK2Fsd2F5cyDsqrAgNDYtNDYtMzQtMjYKK2Fsd2F5cyDsqrEgNDYtNDYtMzQtMTIKK2Fsd2F5cyDsqrIgNDYtNDYtMzQtMTItMworYWx3YXlzIOyqsyA0Ni00Ni0zNC0zCithbHdheXMg7Kq0IDQ2LTQ2LTM0LTMtMworYWx3YXlzIOyqtSA0Ni00Ni0zNC0yMzU2CithbHdheXMg7Kq2IDQ2LTQ2LTM0LTEzCithbHdheXMg7Kq3IDQ2LTQ2LTM0LTIzCithbHdheXMg7Kq4IDQ2LTQ2LTM0LTIzNQorYWx3YXlzIOyquSA0Ni00Ni0zNC0yMzYKK2Fsd2F5cyDsqrogNDYtNDYtMzQtMjU2CithbHdheXMg7Kq7IDQ2LTQ2LTM0LTM1NgorYWx3YXlzIOyqvCA0Ni00Ni0xMzYKK2Fsd2F5cyDsqr0gNDYtNDYtMTM2LTEKK2Fsd2F5cyDsqr4gNDYtNDYtMTM2LTEtMQorYWx3YXlzIOyqvyA0Ni00Ni0xMzYtMS0zCithbHdheXMg7KuAIDQ2LTQ2LTEzNi0yNQorYWx3YXlzIOyrgSA0Ni00Ni0xMzYtMjUtMTMKK2Fsd2F5cyDsq4IgNDYtNDYtMTM2LTI1LTM1NgorYWx3YXlzIOyrgyA0Ni00Ni0xMzYtMzUKK2Fsd2F5cyDsq4QgNDYtNDYtMTM2LTIKK2Fsd2F5cyDsq4UgNDYtNDYtMTM2LTItMQorYWx3YXlzIOyrhiA0Ni00Ni0xMzYtMi0yNgorYWx3YXlzIOyrhyA0Ni00Ni0xMzYtMi0xMgorYWx3YXlzIOyriCA0Ni00Ni0xMzYtMi0zCithbHdheXMg7KuJIDQ2LTQ2LTEzNi0yLTIzNgorYWx3YXlzIOyriiA0Ni00Ni0xMzYtMi0yNTYKK2Fsd2F5cyDsq4sgNDYtNDYtMTM2LTItMzU2CithbHdheXMg7KuMIDQ2LTQ2LTEzNi0yNgorYWx3YXlzIOyrjSA0Ni00Ni0xMzYtMTIKK2Fsd2F5cyDsq44gNDYtNDYtMTM2LTEyLTMKK2Fsd2F5cyDsq48gNDYtNDYtMTM2LTMKK2Fsd2F5cyDsq5AgNDYtNDYtMTM2LTMtMworYWx3YXlzIOyrkSA0Ni00Ni0xMzYtMjM1NgorYWx3YXlzIOyrkiA0Ni00Ni0xMzYtMTMKK2Fsd2F5cyDsq5MgNDYtNDYtMTM2LTIzCithbHdheXMg7KuUIDQ2LTQ2LTEzNi0yMzUKK2Fsd2F5cyDsq5UgNDYtNDYtMTM2LTIzNgorYWx3YXlzIOyrliA0Ni00Ni0xMzYtMjU2CithbHdheXMg7KuXIDQ2LTQ2LTEzNi0zNTYKK2Fsd2F5cyDsq5ggNDYtNDYtMTIzNgorYWx3YXlzIOyrmSA0Ni00Ni0xMjM2LTEKK2Fsd2F5cyDsq5ogNDYtNDYtMTIzNi0xLTEKK2Fsd2F5cyDsq5sgNDYtNDYtMTIzNi0xLTMKK2Fsd2F5cyDsq5wgNDYtNDYtMTIzNi0yNQorYWx3YXlzIOyrnSA0Ni00Ni0xMjM2LTI1LTEzCithbHdheXMg7KueIDQ2LTQ2LTEyMzYtMjUtMzU2CithbHdheXMg7KufIDQ2LTQ2LTEyMzYtMzUKK2Fsd2F5cyDsq6AgNDYtNDYtMTIzNi0yCithbHdheXMg7KuhIDQ2LTQ2LTEyMzYtMi0xCithbHdheXMg7KuiIDQ2LTQ2LTEyMzYtMi0yNgorYWx3YXlzIOyroyA0Ni00Ni0xMjM2LTItMTIKK2Fsd2F5cyDsq6QgNDYtNDYtMTIzNi0yLTMKK2Fsd2F5cyDsq6UgNDYtNDYtMTIzNi0yLTIzNgorYWx3YXlzIOyrpiA0Ni00Ni0xMjM2LTItMjU2CithbHdheXMg7KunIDQ2LTQ2LTEyMzYtMi0zNTYKK2Fsd2F5cyDsq6ggNDYtNDYtMTIzNi0yNgorYWx3YXlzIOyrqSA0Ni00Ni0xMjM2LTEyCithbHdheXMg7KuqIDQ2LTQ2LTEyMzYtMTItMworYWx3YXlzIOyrqyA0Ni00Ni0xMjM2LTMKK2Fsd2F5cyDsq6wgNDYtNDYtMTIzNi0zLTMKK2Fsd2F5cyDsq60gNDYtNDYtMTIzNi0yMzU2CithbHdheXMg7KuuIDQ2LTQ2LTEyMzYtMTMKK2Fsd2F5cyDsq68gNDYtNDYtMTIzNi0yMworYWx3YXlzIOyrsCA0Ni00Ni0xMjM2LTIzNQorYWx3YXlzIOyrsSA0Ni00Ni0xMjM2LTIzNgorYWx3YXlzIOyrsiA0Ni00Ni0xMjM2LTI1NgorYWx3YXlzIOyrsyA0Ni00Ni0xMjM2LTM1NgorYWx3YXlzIOyrtCA0Ni00Ni0xMjM2LTEyMzUKK2Fsd2F5cyDsq7UgNDYtNDYtMTIzNi0xMjM1LTEKK2Fsd2F5cyDsq7YgNDYtNDYtMTIzNi0xMjM1LTEtMQorYWx3YXlzIOyrtyA0Ni00Ni0xMjM2LTEyMzUtMS0zCithbHdheXMg7Ku4IDQ2LTQ2LTEyMzYtMTIzNS0yNQorYWx3YXlzIOyruSA0Ni00Ni0xMjM2LTEyMzUtMjUtMTMKK2Fsd2F5cyDsq7ogNDYtNDYtMTIzNi0xMjM1LTI1LTM1NgorYWx3YXlzIOyruyA0Ni00Ni0xMjM2LTEyMzUtMzUKK2Fsd2F5cyDsq7wgNDYtNDYtMTIzNi0xMjM1LTIKK2Fsd2F5cyDsq70gNDYtNDYtMTIzNi0xMjM1LTItMQorYWx3YXlzIOyrviA0Ni00Ni0xMjM2LTEyMzUtMi0yNgorYWx3YXlzIOyrvyA0Ni00Ni0xMjM2LTEyMzUtMi0xMgorYWx3YXlzIOysgCA0Ni00Ni0xMjM2LTEyMzUtMi0zCithbHdheXMg7KyBIDQ2LTQ2LTEyMzYtMTIzNS0yLTIzNgorYWx3YXlzIOysgiA0Ni00Ni0xMjM2LTEyMzUtMi0yNTYKK2Fsd2F5cyDsrIMgNDYtNDYtMTIzNi0xMjM1LTItMzU2CithbHdheXMg7KyEIDQ2LTQ2LTEyMzYtMTIzNS0yNgorYWx3YXlzIOyshSA0Ni00Ni0xMjM2LTEyMzUtMTIKK2Fsd2F5cyDsrIYgNDYtNDYtMTIzNi0xMjM1LTEyLTMKK2Fsd2F5cyDsrIcgNDYtNDYtMTIzNi0xMjM1LTMKK2Fsd2F5cyDsrIggNDYtNDYtMTIzNi0xMjM1LTMtMworYWx3YXlzIOysiSA0Ni00Ni0xMjM2LTEyMzUtMjM1NgorYWx3YXlzIOysiiA0Ni00Ni0xMjM2LTEyMzUtMTMKK2Fsd2F5cyDsrIsgNDYtNDYtMTIzNi0xMjM1LTIzCithbHdheXMg7KyMIDQ2LTQ2LTEyMzYtMTIzNS0yMzUKK2Fsd2F5cyDsrI0gNDYtNDYtMTIzNi0xMjM1LTIzNgorYWx3YXlzIOysjiA0Ni00Ni0xMjM2LTEyMzUtMjU2CithbHdheXMg7KyPIDQ2LTQ2LTEyMzYtMTIzNS0zNTYKK2Fsd2F5cyDsrJAgNDYtNDYtMTM0NTYKK2Fsd2F5cyDsrJEgNDYtNDYtMTM0NTYtMQorYWx3YXlzIOyskiA0Ni00Ni0xMzQ1Ni0xLTEKK2Fsd2F5cyDsrJMgNDYtNDYtMTM0NTYtMS0zCithbHdheXMg7KyUIDQ2LTQ2LTEzNDU2LTI1CithbHdheXMg7KyVIDQ2LTQ2LTEzNDU2LTI1LTEzCithbHdheXMg7KyWIDQ2LTQ2LTEzNDU2LTI1LTM1NgorYWx3YXlzIOyslyA0Ni00Ni0xMzQ1Ni0zNQorYWx3YXlzIOysmCA0Ni00Ni0xMzQ1Ni0yCithbHdheXMg7KyZIDQ2LTQ2LTEzNDU2LTItMQorYWx3YXlzIOysmiA0Ni00Ni0xMzQ1Ni0yLTI2CithbHdheXMg7KybIDQ2LTQ2LTEzNDU2LTItMTIKK2Fsd2F5cyDsrJwgNDYtNDYtMTM0NTYtMi0zCithbHdheXMg7KydIDQ2LTQ2LTEzNDU2LTItMjM2CithbHdheXMg7KyeIDQ2LTQ2LTEzNDU2LTItMjU2CithbHdheXMg7KyfIDQ2LTQ2LTEzNDU2LTItMzU2CithbHdheXMg7KygIDQ2LTQ2LTEzNDU2LTI2CithbHdheXMg7KyhIDQ2LTQ2LTEzNDU2LTEyCithbHdheXMg7KyiIDQ2LTQ2LTEzNDU2LTEyLTMKK2Fsd2F5cyDsrKMgNDYtNDYtMTM0NTYtMworYWx3YXlzIOyspCA0Ni00Ni0xMzQ1Ni0zLTMKK2Fsd2F5cyDsrKUgNDYtNDYtMTM0NTYtMjM1NgorYWx3YXlzIOyspiA0Ni00Ni0xMzQ1Ni0xMworYWx3YXlzIOyspyA0Ni00Ni0xMzQ1Ni0yMworYWx3YXlzIOysqCA0Ni00Ni0xMzQ1Ni0yMzUKK2Fsd2F5cyDsrKkgNDYtNDYtMTM0NTYtMjM2CithbHdheXMg7KyqIDQ2LTQ2LTEzNDU2LTI1NgorYWx3YXlzIOysqyA0Ni00Ni0xMzQ1Ni0zNTYKK2Fsd2F5cyDsrKwgNDYtNDYtMzQ2CithbHdheXMg7KytIDQ2LTQ2LTM0Ni0xCithbHdheXMg7KyuIDQ2LTQ2LTM0Ni0xLTEKK2Fsd2F5cyDsrK8gNDYtNDYtMzQ2LTEtMworYWx3YXlzIOyssCA0Ni00Ni0zNDYtMjUKK2Fsd2F5cyDsrLEgNDYtNDYtMzQ2LTI1LTEzCithbHdheXMg7KyyIDQ2LTQ2LTM0Ni0yNS0zNTYKK2Fsd2F5cyDsrLMgNDYtNDYtMzQ2LTM1CithbHdheXMg7Ky0IDQ2LTQ2LTM0Ni0yCithbHdheXMg7Ky1IDQ2LTQ2LTM0Ni0yLTEKK2Fsd2F5cyDsrLYgNDYtNDYtMzQ2LTItMjYKK2Fsd2F5cyDsrLcgNDYtNDYtMzQ2LTItMTIKK2Fsd2F5cyDsrLggNDYtNDYtMzQ2LTItMworYWx3YXlzIOysuSA0Ni00Ni0zNDYtMi0yMzYKK2Fsd2F5cyDsrLogNDYtNDYtMzQ2LTItMjU2CithbHdheXMg7Ky7IDQ2LTQ2LTM0Ni0yLTM1NgorYWx3YXlzIOysvCA0Ni00Ni0zNDYtMjYKK2Fsd2F5cyDsrL0gNDYtNDYtMzQ2LTEyCithbHdheXMg7Ky+IDQ2LTQ2LTM0Ni0xMi0zCithbHdheXMg7Ky/IDQ2LTQ2LTM0Ni0zCithbHdheXMg7K2AIDQ2LTQ2LTM0Ni0zLTMKK2Fsd2F5cyDsrYEgNDYtNDYtMzQ2LTIzNTYKK2Fsd2F5cyDsrYIgNDYtNDYtMzQ2LTEzCithbHdheXMg7K2DIDQ2LTQ2LTM0Ni0yMworYWx3YXlzIOythCA0Ni00Ni0zNDYtMjM1CithbHdheXMg7K2FIDQ2LTQ2LTM0Ni0yMzYKK2Fsd2F5cyDsrYYgNDYtNDYtMzQ2LTI1NgorYWx3YXlzIOythyA0Ni00Ni0zNDYtMzU2CithbHdheXMg7K2IIDQ2LTQ2LTEzNAorYWx3YXlzIOytiSA0Ni00Ni0xMzQtMQorYWx3YXlzIOytiiA0Ni00Ni0xMzQtMS0xCithbHdheXMg7K2LIDQ2LTQ2LTEzNC0xLTMKK2Fsd2F5cyDsrYwgNDYtNDYtMTM0LTI1CithbHdheXMg7K2NIDQ2LTQ2LTEzNC0yNS0xMworYWx3YXlzIOytjiA0Ni00Ni0xMzQtMjUtMzU2CithbHdheXMg7K2PIDQ2LTQ2LTEzNC0zNQorYWx3YXlzIOytkCA0Ni00Ni0xMzQtMgorYWx3YXlzIOytkSA0Ni00Ni0xMzQtMi0xCithbHdheXMg7K2SIDQ2LTQ2LTEzNC0yLTI2CithbHdheXMg7K2TIDQ2LTQ2LTEzNC0yLTEyCithbHdheXMg7K2UIDQ2LTQ2LTEzNC0yLTMKK2Fsd2F5cyDsrZUgNDYtNDYtMTM0LTItMjM2CithbHdheXMg7K2WIDQ2LTQ2LTEzNC0yLTI1NgorYWx3YXlzIOytlyA0Ni00Ni0xMzQtMi0zNTYKK2Fsd2F5cyDsrZggNDYtNDYtMTM0LTI2CithbHdheXMg7K2ZIDQ2LTQ2LTEzNC0xMgorYWx3YXlzIOytmiA0Ni00Ni0xMzQtMTItMworYWx3YXlzIOytmyA0Ni00Ni0xMzQtMworYWx3YXlzIOytnCA0Ni00Ni0xMzQtMy0zCithbHdheXMg7K2dIDQ2LTQ2LTEzNC0yMzU2CithbHdheXMg7K2eIDQ2LTQ2LTEzNC0xMworYWx3YXlzIOytnyA0Ni00Ni0xMzQtMjMKK2Fsd2F5cyDsraAgNDYtNDYtMTM0LTIzNQorYWx3YXlzIOytoSA0Ni00Ni0xMzQtMjM2CithbHdheXMg7K2iIDQ2LTQ2LTEzNC0yNTYKK2Fsd2F5cyDsraMgNDYtNDYtMTM0LTM1NgorYWx3YXlzIOytpCA0Ni00Ni0xMjM0CithbHdheXMg7K2lIDQ2LTQ2LTEyMzQtMQorYWx3YXlzIOytpiA0Ni00Ni0xMjM0LTEtMQorYWx3YXlzIOytpyA0Ni00Ni0xMjM0LTEtMworYWx3YXlzIOytqCA0Ni00Ni0xMjM0LTI1CithbHdheXMg7K2pIDQ2LTQ2LTEyMzQtMjUtMTMKK2Fsd2F5cyDsraogNDYtNDYtMTIzNC0yNS0zNTYKK2Fsd2F5cyDsrasgNDYtNDYtMTIzNC0zNQorYWx3YXlzIOytrCA0Ni00Ni0xMjM0LTIKK2Fsd2F5cyDsra0gNDYtNDYtMTIzNC0yLTEKK2Fsd2F5cyDsra4gNDYtNDYtMTIzNC0yLTI2CithbHdheXMg7K2vIDQ2LTQ2LTEyMzQtMi0xMgorYWx3YXlzIOytsCA0Ni00Ni0xMjM0LTItMworYWx3YXlzIOytsSA0Ni00Ni0xMjM0LTItMjM2CithbHdheXMg7K2yIDQ2LTQ2LTEyMzQtMi0yNTYKK2Fsd2F5cyDsrbMgNDYtNDYtMTIzNC0yLTM1NgorYWx3YXlzIOyttCA0Ni00Ni0xMjM0LTI2CithbHdheXMg7K21IDQ2LTQ2LTEyMzQtMTIKK2Fsd2F5cyDsrbYgNDYtNDYtMTIzNC0xMi0zCithbHdheXMg7K23IDQ2LTQ2LTEyMzQtMworYWx3YXlzIOytuCA0Ni00Ni0xMjM0LTMtMworYWx3YXlzIOytuSA0Ni00Ni0xMjM0LTIzNTYKK2Fsd2F5cyDsrbogNDYtNDYtMTIzNC0xMworYWx3YXlzIOytuyA0Ni00Ni0xMjM0LTIzCithbHdheXMg7K28IDQ2LTQ2LTEyMzQtMjM1CithbHdheXMg7K29IDQ2LTQ2LTEyMzQtMjM2CithbHdheXMg7K2+IDQ2LTQ2LTEyMzQtMjU2CithbHdheXMg7K2/IDQ2LTQ2LTEyMzQtMzU2CithbHdheXMg7K6AIDQ2LTQ2LTEyMzQtMTIzNQorYWx3YXlzIOyugSA0Ni00Ni0xMjM0LTEyMzUtMQorYWx3YXlzIOyugiA0Ni00Ni0xMjM0LTEyMzUtMS0xCithbHdheXMg7K6DIDQ2LTQ2LTEyMzQtMTIzNS0xLTMKK2Fsd2F5cyDsroQgNDYtNDYtMTIzNC0xMjM1LTI1CithbHdheXMg7K6FIDQ2LTQ2LTEyMzQtMTIzNS0yNS0xMworYWx3YXlzIOyuhiA0Ni00Ni0xMjM0LTEyMzUtMjUtMzU2CithbHdheXMg7K6HIDQ2LTQ2LTEyMzQtMTIzNS0zNQorYWx3YXlzIOyuiCA0Ni00Ni0xMjM0LTEyMzUtMgorYWx3YXlzIOyuiSA0Ni00Ni0xMjM0LTEyMzUtMi0xCithbHdheXMg7K6KIDQ2LTQ2LTEyMzQtMTIzNS0yLTI2CithbHdheXMg7K6LIDQ2LTQ2LTEyMzQtMTIzNS0yLTEyCithbHdheXMg7K6MIDQ2LTQ2LTEyMzQtMTIzNS0yLTMKK2Fsd2F5cyDsro0gNDYtNDYtMTIzNC0xMjM1LTItMjM2CithbHdheXMg7K6OIDQ2LTQ2LTEyMzQtMTIzNS0yLTI1NgorYWx3YXlzIOyujyA0Ni00Ni0xMjM0LTEyMzUtMi0zNTYKK2Fsd2F5cyDsrpAgNDYtNDYtMTIzNC0xMjM1LTI2CithbHdheXMg7K6RIDQ2LTQ2LTEyMzQtMTIzNS0xMgorYWx3YXlzIOyukiA0Ni00Ni0xMjM0LTEyMzUtMTItMworYWx3YXlzIOyukyA0Ni00Ni0xMjM0LTEyMzUtMworYWx3YXlzIOyulCA0Ni00Ni0xMjM0LTEyMzUtMy0zCithbHdheXMg7K6VIDQ2LTQ2LTEyMzQtMTIzNS0yMzU2CithbHdheXMg7K6WIDQ2LTQ2LTEyMzQtMTIzNS0xMworYWx3YXlzIOyulyA0Ni00Ni0xMjM0LTEyMzUtMjMKK2Fsd2F5cyDsrpggNDYtNDYtMTIzNC0xMjM1LTIzNQorYWx3YXlzIOyumSA0Ni00Ni0xMjM0LTEyMzUtMjM2CithbHdheXMg7K6aIDQ2LTQ2LTEyMzQtMTIzNS0yNTYKK2Fsd2F5cyDsrpsgNDYtNDYtMTIzNC0xMjM1LTM1NgorYWx3YXlzIOyunCA0Ni00Ni0xMzQtMTIzNQorYWx3YXlzIOyunSA0Ni00Ni0xMzQtMTIzNS0xCithbHdheXMg7K6eIDQ2LTQ2LTEzNC0xMjM1LTEtMQorYWx3YXlzIOyunyA0Ni00Ni0xMzQtMTIzNS0xLTMKK2Fsd2F5cyDsrqAgNDYtNDYtMTM0LTEyMzUtMjUKK2Fsd2F5cyDsrqEgNDYtNDYtMTM0LTEyMzUtMjUtMTMKK2Fsd2F5cyDsrqIgNDYtNDYtMTM0LTEyMzUtMjUtMzU2CithbHdheXMg7K6jIDQ2LTQ2LTEzNC0xMjM1LTM1CithbHdheXMg7K6kIDQ2LTQ2LTEzNC0xMjM1LTIKK2Fsd2F5cyDsrqUgNDYtNDYtMTM0LTEyMzUtMi0xCithbHdheXMg7K6mIDQ2LTQ2LTEzNC0xMjM1LTItMjYKK2Fsd2F5cyDsrqcgNDYtNDYtMTM0LTEyMzUtMi0xMgorYWx3YXlzIOyuqCA0Ni00Ni0xMzQtMTIzNS0yLTMKK2Fsd2F5cyDsrqkgNDYtNDYtMTM0LTEyMzUtMi0yMzYKK2Fsd2F5cyDsrqogNDYtNDYtMTM0LTEyMzUtMi0yNTYKK2Fsd2F5cyDsrqsgNDYtNDYtMTM0LTEyMzUtMi0zNTYKK2Fsd2F5cyDsrqwgNDYtNDYtMTM0LTEyMzUtMjYKK2Fsd2F5cyDsrq0gNDYtNDYtMTM0LTEyMzUtMTIKK2Fsd2F5cyDsrq4gNDYtNDYtMTM0LTEyMzUtMTItMworYWx3YXlzIOyuryA0Ni00Ni0xMzQtMTIzNS0zCithbHdheXMg7K6wIDQ2LTQ2LTEzNC0xMjM1LTMtMworYWx3YXlzIOyusSA0Ni00Ni0xMzQtMTIzNS0yMzU2CithbHdheXMg7K6yIDQ2LTQ2LTEzNC0xMjM1LTEzCithbHdheXMg7K6zIDQ2LTQ2LTEzNC0xMjM1LTIzCithbHdheXMg7K60IDQ2LTQ2LTEzNC0xMjM1LTIzNQorYWx3YXlzIOyutSA0Ni00Ni0xMzQtMTIzNS0yMzYKK2Fsd2F5cyDsrrYgNDYtNDYtMTM0LTEyMzUtMjU2CithbHdheXMg7K63IDQ2LTQ2LTEzNC0xMjM1LTM1NgorYWx3YXlzIOyuuCA0Ni00Ni0xNDYKK2Fsd2F5cyDsrrkgNDYtNDYtMTQ2LTEKK2Fsd2F5cyDsrrogNDYtNDYtMTQ2LTEtMQorYWx3YXlzIOyuuyA0Ni00Ni0xNDYtMS0zCithbHdheXMg7K68IDQ2LTQ2LTE0Ni0yNQorYWx3YXlzIOyuvSA0Ni00Ni0xNDYtMjUtMTMKK2Fsd2F5cyDsrr4gNDYtNDYtMTQ2LTI1LTM1NgorYWx3YXlzIOyuvyA0Ni00Ni0xNDYtMzUKK2Fsd2F5cyDsr4AgNDYtNDYtMTQ2LTIKK2Fsd2F5cyDsr4EgNDYtNDYtMTQ2LTItMQorYWx3YXlzIOyvgiA0Ni00Ni0xNDYtMi0yNgorYWx3YXlzIOyvgyA0Ni00Ni0xNDYtMi0xMgorYWx3YXlzIOyvhCA0Ni00Ni0xNDYtMi0zCithbHdheXMg7K+FIDQ2LTQ2LTE0Ni0yLTIzNgorYWx3YXlzIOyvhiA0Ni00Ni0xNDYtMi0yNTYKK2Fsd2F5cyDsr4cgNDYtNDYtMTQ2LTItMzU2CithbHdheXMg7K+IIDQ2LTQ2LTE0Ni0yNgorYWx3YXlzIOyviSA0Ni00Ni0xNDYtMTIKK2Fsd2F5cyDsr4ogNDYtNDYtMTQ2LTEyLTMKK2Fsd2F5cyDsr4sgNDYtNDYtMTQ2LTMKK2Fsd2F5cyDsr4wgNDYtNDYtMTQ2LTMtMworYWx3YXlzIOyvjSA0Ni00Ni0xNDYtMjM1NgorYWx3YXlzIOyvjiA0Ni00Ni0xNDYtMTMKK2Fsd2F5cyDsr48gNDYtNDYtMTQ2LTIzCithbHdheXMg7K+QIDQ2LTQ2LTE0Ni0yMzUKK2Fsd2F5cyDsr5EgNDYtNDYtMTQ2LTIzNgorYWx3YXlzIOyvkiA0Ni00Ni0xNDYtMjU2CithbHdheXMg7K+TIDQ2LTQ2LTE0Ni0zNTYKK2Fsd2F5cyDsr5QgNDYtNDYtMjQ2CithbHdheXMg7K+VIDQ2LTQ2LTI0Ni0xCithbHdheXMg7K+WIDQ2LTQ2LTI0Ni0xLTEKK2Fsd2F5cyDsr5cgNDYtNDYtMjQ2LTEtMworYWx3YXlzIOyvmCA0Ni00Ni0yNDYtMjUKK2Fsd2F5cyDsr5kgNDYtNDYtMjQ2LTI1LTEzCithbHdheXMg7K+aIDQ2LTQ2LTI0Ni0yNS0zNTYKK2Fsd2F5cyDsr5sgNDYtNDYtMjQ2LTM1CithbHdheXMg7K+cIDQ2LTQ2LTI0Ni0yCithbHdheXMg7K+dIDQ2LTQ2LTI0Ni0yLTEKK2Fsd2F5cyDsr54gNDYtNDYtMjQ2LTItMjYKK2Fsd2F5cyDsr58gNDYtNDYtMjQ2LTItMTIKK2Fsd2F5cyDsr6AgNDYtNDYtMjQ2LTItMworYWx3YXlzIOyvoSA0Ni00Ni0yNDYtMi0yMzYKK2Fsd2F5cyDsr6IgNDYtNDYtMjQ2LTItMjU2CithbHdheXMg7K+jIDQ2LTQ2LTI0Ni0yLTM1NgorYWx3YXlzIOyvpCA0Ni00Ni0yNDYtMjYKK2Fsd2F5cyDsr6UgNDYtNDYtMjQ2LTEyCithbHdheXMg7K+mIDQ2LTQ2LTI0Ni0xMi0zCithbHdheXMg7K+nIDQ2LTQ2LTI0Ni0zCithbHdheXMg7K+oIDQ2LTQ2LTI0Ni0zLTMKK2Fsd2F5cyDsr6kgNDYtNDYtMjQ2LTIzNTYKK2Fsd2F5cyDsr6ogNDYtNDYtMjQ2LTEzCithbHdheXMg7K+rIDQ2LTQ2LTI0Ni0yMworYWx3YXlzIOyvrCA0Ni00Ni0yNDYtMjM1CithbHdheXMg7K+tIDQ2LTQ2LTI0Ni0yMzYKK2Fsd2F5cyDsr64gNDYtNDYtMjQ2LTI1NgorYWx3YXlzIOyvryA0Ni00Ni0yNDYtMzU2CithbHdheXMg7K+wIDQ2LTQ2LTI0NTYKK2Fsd2F5cyDsr7EgNDYtNDYtMjQ1Ni0xCithbHdheXMg7K+yIDQ2LTQ2LTI0NTYtMS0xCithbHdheXMg7K+zIDQ2LTQ2LTI0NTYtMS0zCithbHdheXMg7K+0IDQ2LTQ2LTI0NTYtMjUKK2Fsd2F5cyDsr7UgNDYtNDYtMjQ1Ni0yNS0xMworYWx3YXlzIOyvtiA0Ni00Ni0yNDU2LTI1LTM1NgorYWx3YXlzIOyvtyA0Ni00Ni0yNDU2LTM1CithbHdheXMg7K+4IDQ2LTQ2LTI0NTYtMgorYWx3YXlzIOyvuSA0Ni00Ni0yNDU2LTItMQorYWx3YXlzIOyvuiA0Ni00Ni0yNDU2LTItMjYKK2Fsd2F5cyDsr7sgNDYtNDYtMjQ1Ni0yLTEyCithbHdheXMg7K+8IDQ2LTQ2LTI0NTYtMi0zCithbHdheXMg7K+9IDQ2LTQ2LTI0NTYtMi0yMzYKK2Fsd2F5cyDsr74gNDYtNDYtMjQ1Ni0yLTI1NgorYWx3YXlzIOyvvyA0Ni00Ni0yNDU2LTItMzU2CithbHdheXMg7LCAIDQ2LTQ2LTI0NTYtMjYKK2Fsd2F5cyDssIEgNDYtNDYtMjQ1Ni0xMgorYWx3YXlzIOywgiA0Ni00Ni0yNDU2LTEyLTMKK2Fsd2F5cyDssIMgNDYtNDYtMjQ1Ni0zCithbHdheXMg7LCEIDQ2LTQ2LTI0NTYtMy0zCithbHdheXMg7LCFIDQ2LTQ2LTI0NTYtMjM1NgorYWx3YXlzIOywhiA0Ni00Ni0yNDU2LTEzCithbHdheXMg7LCHIDQ2LTQ2LTI0NTYtMjMKK2Fsd2F5cyDssIggNDYtNDYtMjQ1Ni0yMzUKK2Fsd2F5cyDssIkgNDYtNDYtMjQ1Ni0yMzYKK2Fsd2F5cyDssIogNDYtNDYtMjQ1Ni0yNTYKK2Fsd2F5cyDssIsgNDYtNDYtMjQ1Ni0zNTYKK2Fsd2F5cyDssIwgNDYtNDYtMTM1CithbHdheXMg7LCNIDQ2LTQ2LTEzNS0xCithbHdheXMg7LCOIDQ2LTQ2LTEzNS0xLTEKK2Fsd2F5cyDssI8gNDYtNDYtMTM1LTEtMworYWx3YXlzIOywkCA0Ni00Ni0xMzUtMjUKK2Fsd2F5cyDssJEgNDYtNDYtMTM1LTI1LTEzCithbHdheXMg7LCSIDQ2LTQ2LTEzNS0yNS0zNTYKK2Fsd2F5cyDssJMgNDYtNDYtMTM1LTM1CithbHdheXMg7LCUIDQ2LTQ2LTEzNS0yCithbHdheXMg7LCVIDQ2LTQ2LTEzNS0yLTEKK2Fsd2F5cyDssJYgNDYtNDYtMTM1LTItMjYKK2Fsd2F5cyDssJcgNDYtNDYtMTM1LTItMTIKK2Fsd2F5cyDssJggNDYtNDYtMTM1LTItMworYWx3YXlzIOywmSA0Ni00Ni0xMzUtMi0yMzYKK2Fsd2F5cyDssJogNDYtNDYtMTM1LTItMjU2CithbHdheXMg7LCbIDQ2LTQ2LTEzNS0yLTM1NgorYWx3YXlzIOywnCA0Ni00Ni0xMzUtMjYKK2Fsd2F5cyDssJ0gNDYtNDYtMTM1LTEyCithbHdheXMg7LCeIDQ2LTQ2LTEzNS0xMi0zCithbHdheXMg7LCfIDQ2LTQ2LTEzNS0zCithbHdheXMg7LCgIDQ2LTQ2LTEzNS0zLTMKK2Fsd2F5cyDssKEgNDYtNDYtMTM1LTIzNTYKK2Fsd2F5cyDssKIgNDYtNDYtMTM1LTEzCithbHdheXMg7LCjIDQ2LTQ2LTEzNS0yMworYWx3YXlzIOywpCA0Ni00Ni0xMzUtMjM1CithbHdheXMg7LClIDQ2LTQ2LTEzNS0yMzYKK2Fsd2F5cyDssKYgNDYtNDYtMTM1LTI1NgorYWx3YXlzIOywpyA0Ni00Ni0xMzUtMzU2CithbHdheXMg7LCoIDU2LTEyNgorYWx3YXlzIOywqSA1Ni0xMjYtMQorYWx3YXlzIOywqiA1Ni0xMjYtMS0xCithbHdheXMg7LCrIDU2LTEyNi0xLTMKK2Fsd2F5cyDssKwgNTYtMTI2LTI1CithbHdheXMg7LCtIDU2LTEyNi0yNS0xMworYWx3YXlzIOywriA1Ni0xMjYtMjUtMzU2CithbHdheXMg7LCvIDU2LTEyNi0zNQorYWx3YXlzIOywsCA1Ni0xMjYtMgorYWx3YXlzIOywsSA1Ni0xMjYtMi0xCithbHdheXMg7LCyIDU2LTEyNi0yLTI2CithbHdheXMg7LCzIDU2LTEyNi0yLTEyCithbHdheXMg7LC0IDU2LTEyNi0yLTMKK2Fsd2F5cyDssLUgNTYtMTI2LTItMjM2CithbHdheXMg7LC2IDU2LTEyNi0yLTI1NgorYWx3YXlzIOywtyA1Ni0xMjYtMi0zNTYKK2Fsd2F5cyDssLggNTYtMTI2LTI2CithbHdheXMg7LC5IDU2LTEyNi0xMgorYWx3YXlzIOywuiA1Ni0xMjYtMTItMworYWx3YXlzIOywuyA1Ni0xMjYtMworYWx3YXlzIOywvCA1Ni0xMjYtMy0zCithbHdheXMg7LC9IDU2LTEyNi0yMzU2CithbHdheXMg7LC+IDU2LTEyNi0xMworYWx3YXlzIOywvyA1Ni0xMjYtMjMKK2Fsd2F5cyDssYAgNTYtMTI2LTIzNQorYWx3YXlzIOyxgSA1Ni0xMjYtMjM2CithbHdheXMg7LGCIDU2LTEyNi0yNTYKK2Fsd2F5cyDssYMgNTYtMTI2LTM1NgorYWx3YXlzIOyxhCA1Ni0xMjM1CithbHdheXMg7LGFIDU2LTEyMzUtMQorYWx3YXlzIOyxhiA1Ni0xMjM1LTEtMQorYWx3YXlzIOyxhyA1Ni0xMjM1LTEtMworYWx3YXlzIOyxiCA1Ni0xMjM1LTI1CithbHdheXMg7LGJIDU2LTEyMzUtMjUtMTMKK2Fsd2F5cyDssYogNTYtMTIzNS0yNS0zNTYKK2Fsd2F5cyDssYsgNTYtMTIzNS0zNQorYWx3YXlzIOyxjCA1Ni0xMjM1LTIKK2Fsd2F5cyDssY0gNTYtMTIzNS0yLTEKK2Fsd2F5cyDssY4gNTYtMTIzNS0yLTI2CithbHdheXMg7LGPIDU2LTEyMzUtMi0xMgorYWx3YXlzIOyxkCA1Ni0xMjM1LTItMworYWx3YXlzIOyxkSA1Ni0xMjM1LTItMjM2CithbHdheXMg7LGSIDU2LTEyMzUtMi0yNTYKK2Fsd2F5cyDssZMgNTYtMTIzNS0yLTM1NgorYWx3YXlzIOyxlCA1Ni0xMjM1LTI2CithbHdheXMg7LGVIDU2LTEyMzUtMTIKK2Fsd2F5cyDssZYgNTYtMTIzNS0xMi0zCithbHdheXMg7LGXIDU2LTEyMzUtMworYWx3YXlzIOyxmCA1Ni0xMjM1LTMtMworYWx3YXlzIOyxmSA1Ni0xMjM1LTIzNTYKK2Fsd2F5cyDssZogNTYtMTIzNS0xMworYWx3YXlzIOyxmyA1Ni0xMjM1LTIzCithbHdheXMg7LGcIDU2LTEyMzUtMjM1CithbHdheXMg7LGdIDU2LTEyMzUtMjM2CithbHdheXMg7LGeIDU2LTEyMzUtMjU2CithbHdheXMg7LGfIDU2LTEyMzUtMzU2CithbHdheXMg7LGgIDU2LTM0NQorYWx3YXlzIOyxoSA1Ni0zNDUtMQorYWx3YXlzIOyxoiA1Ni0zNDUtMS0xCithbHdheXMg7LGjIDU2LTM0NS0xLTMKK2Fsd2F5cyDssaQgNTYtMzQ1LTI1CithbHdheXMg7LGlIDU2LTM0NS0yNS0xMworYWx3YXlzIOyxpiA1Ni0zNDUtMjUtMzU2CithbHdheXMg7LGnIDU2LTM0NS0zNQorYWx3YXlzIOyxqCA1Ni0zNDUtMgorYWx3YXlzIOyxqSA1Ni0zNDUtMi0xCithbHdheXMg7LGqIDU2LTM0NS0yLTI2CithbHdheXMg7LGrIDU2LTM0NS0yLTEyCithbHdheXMg7LGsIDU2LTM0NS0yLTMKK2Fsd2F5cyDssa0gNTYtMzQ1LTItMjM2CithbHdheXMg7LGuIDU2LTM0NS0yLTI1NgorYWx3YXlzIOyxryA1Ni0zNDUtMi0zNTYKK2Fsd2F5cyDssbAgNTYtMzQ1LTI2CithbHdheXMg7LGxIDU2LTM0NS0xMgorYWx3YXlzIOyxsiA1Ni0zNDUtMTItMworYWx3YXlzIOyxsyA1Ni0zNDUtMworYWx3YXlzIOyxtCA1Ni0zNDUtMy0zCithbHdheXMg7LG1IDU2LTM0NS0yMzU2CithbHdheXMg7LG2IDU2LTM0NS0xMworYWx3YXlzIOyxtyA1Ni0zNDUtMjMKK2Fsd2F5cyDssbggNTYtMzQ1LTIzNQorYWx3YXlzIOyxuSA1Ni0zNDUtMjM2CithbHdheXMg7LG6IDU2LTM0NS0yNTYKK2Fsd2F5cyDssbsgNTYtMzQ1LTM1NgorYWx3YXlzIOyxvCA1Ni0zNDUtMTIzNQorYWx3YXlzIOyxvSA1Ni0zNDUtMTIzNS0xCithbHdheXMg7LG+IDU2LTM0NS0xMjM1LTEtMQorYWx3YXlzIOyxvyA1Ni0zNDUtMTIzNS0xLTMKK2Fsd2F5cyDssoAgNTYtMzQ1LTEyMzUtMjUKK2Fsd2F5cyDssoEgNTYtMzQ1LTEyMzUtMjUtMTMKK2Fsd2F5cyDssoIgNTYtMzQ1LTEyMzUtMjUtMzU2CithbHdheXMg7LKDIDU2LTM0NS0xMjM1LTM1CithbHdheXMg7LKEIDU2LTM0NS0xMjM1LTIKK2Fsd2F5cyDssoUgNTYtMzQ1LTEyMzUtMi0xCithbHdheXMg7LKGIDU2LTM0NS0xMjM1LTItMjYKK2Fsd2F5cyDssocgNTYtMzQ1LTEyMzUtMi0xMgorYWx3YXlzIOyyiCA1Ni0zNDUtMTIzNS0yLTMKK2Fsd2F5cyDssokgNTYtMzQ1LTEyMzUtMi0yMzYKK2Fsd2F5cyDssoogNTYtMzQ1LTEyMzUtMi0yNTYKK2Fsd2F5cyDssosgNTYtMzQ1LTEyMzUtMi0zNTYKK2Fsd2F5cyDssowgNTYtMzQ1LTEyMzUtMjYKK2Fsd2F5cyDsso0gNTYtMzQ1LTEyMzUtMTIKK2Fsd2F5cyDsso4gNTYtMzQ1LTEyMzUtMTItMworYWx3YXlzIOyyjyA1Ni0zNDUtMTIzNS0zCithbHdheXMg7LKQIDU2LTM0NS0xMjM1LTMtMworYWx3YXlzIOyykSA1Ni0zNDUtMTIzNS0yMzU2CithbHdheXMg7LKSIDU2LTM0NS0xMjM1LTEzCithbHdheXMg7LKTIDU2LTM0NS0xMjM1LTIzCithbHdheXMg7LKUIDU2LTM0NS0xMjM1LTIzNQorYWx3YXlzIOyylSA1Ni0zNDUtMTIzNS0yMzYKK2Fsd2F5cyDsspYgNTYtMzQ1LTEyMzUtMjU2CithbHdheXMg7LKXIDU2LTM0NS0xMjM1LTM1NgorYWx3YXlzIOyymCA1Ni0yMzQKK2Fsd2F5cyDsspkgNTYtMjM0LTEKK2Fsd2F5cyDsspogNTYtMjM0LTEtMQorYWx3YXlzIOyymyA1Ni0yMzQtMS0zCithbHdheXMg7LKcIDU2LTIzNC0yNQorYWx3YXlzIOyynSA1Ni0yMzQtMjUtMTMKK2Fsd2F5cyDssp4gNTYtMjM0LTI1LTM1NgorYWx3YXlzIOyynyA1Ni0yMzQtMzUKK2Fsd2F5cyDssqAgNTYtMjM0LTIKK2Fsd2F5cyDssqEgNTYtMjM0LTItMQorYWx3YXlzIOyyoiA1Ni0yMzQtMi0yNgorYWx3YXlzIOyyoyA1Ni0yMzQtMi0xMgorYWx3YXlzIOyypCA1Ni0yMzQtMi0zCithbHdheXMg7LKlIDU2LTIzNC0yLTIzNgorYWx3YXlzIOyypiA1Ni0yMzQtMi0yNTYKK2Fsd2F5cyDssqcgNTYtMjM0LTItMzU2CithbHdheXMg7LKoIDU2LTIzNC0yNgorYWx3YXlzIOyyqSA1Ni0yMzQtMTIKK2Fsd2F5cyDssqogNTYtMjM0LTEyLTMKK2Fsd2F5cyDssqsgNTYtMjM0LTMKK2Fsd2F5cyDssqwgNTYtMjM0LTMtMworYWx3YXlzIOyyrSA1Ni0yMzQtMjM1NgorYWx3YXlzIOyyriA1Ni0yMzQtMTMKK2Fsd2F5cyDssq8gNTYtMjM0LTIzCithbHdheXMg7LKwIDU2LTIzNC0yMzUKK2Fsd2F5cyDssrEgNTYtMjM0LTIzNgorYWx3YXlzIOyysiA1Ni0yMzQtMjU2CithbHdheXMg7LKzIDU2LTIzNC0zNTYKK2Fsd2F5cyDssrQgNTYtMTM0NQorYWx3YXlzIOyytSA1Ni0xMzQ1LTEKK2Fsd2F5cyDssrYgNTYtMTM0NS0xLTEKK2Fsd2F5cyDssrcgNTYtMTM0NS0xLTMKK2Fsd2F5cyDssrggNTYtMTM0NS0yNQorYWx3YXlzIOyyuSA1Ni0xMzQ1LTI1LTEzCithbHdheXMg7LK6IDU2LTEzNDUtMjUtMzU2CithbHdheXMg7LK7IDU2LTEzNDUtMzUKK2Fsd2F5cyDssrwgNTYtMTM0NS0yCithbHdheXMg7LK9IDU2LTEzNDUtMi0xCithbHdheXMg7LK+IDU2LTEzNDUtMi0yNgorYWx3YXlzIOyyvyA1Ni0xMzQ1LTItMTIKK2Fsd2F5cyDss4AgNTYtMTM0NS0yLTMKK2Fsd2F5cyDss4EgNTYtMTM0NS0yLTIzNgorYWx3YXlzIOyzgiA1Ni0xMzQ1LTItMjU2CithbHdheXMg7LODIDU2LTEzNDUtMi0zNTYKK2Fsd2F5cyDss4QgNTYtMTM0NS0yNgorYWx3YXlzIOyzhSA1Ni0xMzQ1LTEyCithbHdheXMg7LOGIDU2LTEzNDUtMTItMworYWx3YXlzIOyzhyA1Ni0xMzQ1LTMKK2Fsd2F5cyDss4ggNTYtMTM0NS0zLTMKK2Fsd2F5cyDss4kgNTYtMTM0NS0yMzU2CithbHdheXMg7LOKIDU2LTEzNDUtMTMKK2Fsd2F5cyDss4sgNTYtMTM0NS0yMworYWx3YXlzIOyzjCA1Ni0xMzQ1LTIzNQorYWx3YXlzIOyzjSA1Ni0xMzQ1LTIzNgorYWx3YXlzIOyzjiA1Ni0xMzQ1LTI1NgorYWx3YXlzIOyzjyA1Ni0xMzQ1LTM1NgorYWx3YXlzIOyzkCA1Ni0xNTYKK2Fsd2F5cyDss5EgNTYtMTU2LTEKK2Fsd2F5cyDss5IgNTYtMTU2LTEtMQorYWx3YXlzIOyzkyA1Ni0xNTYtMS0zCithbHdheXMg7LOUIDU2LTE1Ni0yNQorYWx3YXlzIOyzlSA1Ni0xNTYtMjUtMTMKK2Fsd2F5cyDss5YgNTYtMTU2LTI1LTM1NgorYWx3YXlzIOyzlyA1Ni0xNTYtMzUKK2Fsd2F5cyDss5ggNTYtMTU2LTIKK2Fsd2F5cyDss5kgNTYtMTU2LTItMQorYWx3YXlzIOyzmiA1Ni0xNTYtMi0yNgorYWx3YXlzIOyzmyA1Ni0xNTYtMi0xMgorYWx3YXlzIOyznCA1Ni0xNTYtMi0zCithbHdheXMg7LOdIDU2LTE1Ni0yLTIzNgorYWx3YXlzIOyzniA1Ni0xNTYtMi0yNTYKK2Fsd2F5cyDss58gNTYtMTU2LTItMzU2CithbHdheXMg7LOgIDU2LTE1Ni0yNgorYWx3YXlzIOyzoSA1Ni0xNTYtMTIKK2Fsd2F5cyDss6IgNTYtMTU2LTEyLTMKK2Fsd2F5cyDss6MgNTYtMTU2LTMKK2Fsd2F5cyDss6QgNTYtMTU2LTMtMworYWx3YXlzIOyzpSA1Ni0xNTYtMjM1NgorYWx3YXlzIOyzpiA1Ni0xNTYtMTMKK2Fsd2F5cyDss6cgNTYtMTU2LTIzCithbHdheXMg7LOoIDU2LTE1Ni0yMzUKK2Fsd2F5cyDss6kgNTYtMTU2LTIzNgorYWx3YXlzIOyzqiA1Ni0xNTYtMjU2CithbHdheXMg7LOrIDU2LTE1Ni0zNTYKK2Fsd2F5cyDss6wgNTYtMzQKK2Fsd2F5cyDss60gNTYtMzQtMQorYWx3YXlzIOyzriA1Ni0zNC0xLTEKK2Fsd2F5cyDss68gNTYtMzQtMS0zCithbHdheXMg7LOwIDU2LTM0LTI1CithbHdheXMg7LOxIDU2LTM0LTI1LTEzCithbHdheXMg7LOyIDU2LTM0LTI1LTM1NgorYWx3YXlzIOyzsyA1Ni0zNC0zNQorYWx3YXlzIOyztCA1Ni0zNC0yCithbHdheXMg7LO1IDU2LTM0LTItMQorYWx3YXlzIOyztiA1Ni0zNC0yLTI2CithbHdheXMg7LO3IDU2LTM0LTItMTIKK2Fsd2F5cyDss7ggNTYtMzQtMi0zCithbHdheXMg7LO5IDU2LTM0LTItMjM2CithbHdheXMg7LO6IDU2LTM0LTItMjU2CithbHdheXMg7LO7IDU2LTM0LTItMzU2CithbHdheXMg7LO8IDU2LTM0LTI2CithbHdheXMg7LO9IDU2LTM0LTEyCithbHdheXMg7LO+IDU2LTM0LTEyLTMKK2Fsd2F5cyDss78gNTYtMzQtMworYWx3YXlzIOy0gCA1Ni0zNC0zLTMKK2Fsd2F5cyDstIEgNTYtMzQtMjM1NgorYWx3YXlzIOy0giA1Ni0zNC0xMworYWx3YXlzIOy0gyA1Ni0zNC0yMworYWx3YXlzIOy0hCA1Ni0zNC0yMzUKK2Fsd2F5cyDstIUgNTYtMzQtMjM2CithbHdheXMg7LSGIDU2LTM0LTI1NgorYWx3YXlzIOy0hyA1Ni0zNC0zNTYKK2Fsd2F5cyDstIggNTYtMTM2CithbHdheXMg7LSJIDU2LTEzNi0xCithbHdheXMg7LSKIDU2LTEzNi0xLTEKK2Fsd2F5cyDstIsgNTYtMTM2LTEtMworYWx3YXlzIOy0jCA1Ni0xMzYtMjUKK2Fsd2F5cyDstI0gNTYtMTM2LTI1LTEzCithbHdheXMg7LSOIDU2LTEzNi0yNS0zNTYKK2Fsd2F5cyDstI8gNTYtMTM2LTM1CithbHdheXMg7LSQIDU2LTEzNi0yCithbHdheXMg7LSRIDU2LTEzNi0yLTEKK2Fsd2F5cyDstJIgNTYtMTM2LTItMjYKK2Fsd2F5cyDstJMgNTYtMTM2LTItMTIKK2Fsd2F5cyDstJQgNTYtMTM2LTItMworYWx3YXlzIOy0lSA1Ni0xMzYtMi0yMzYKK2Fsd2F5cyDstJYgNTYtMTM2LTItMjU2CithbHdheXMg7LSXIDU2LTEzNi0yLTM1NgorYWx3YXlzIOy0mCA1Ni0xMzYtMjYKK2Fsd2F5cyDstJkgNTYtMTM2LTEyCithbHdheXMg7LSaIDU2LTEzNi0xMi0zCithbHdheXMg7LSbIDU2LTEzNi0zCithbHdheXMg7LScIDU2LTEzNi0zLTMKK2Fsd2F5cyDstJ0gNTYtMTM2LTIzNTYKK2Fsd2F5cyDstJ4gNTYtMTM2LTEzCithbHdheXMg7LSfIDU2LTEzNi0yMworYWx3YXlzIOy0oCA1Ni0xMzYtMjM1CithbHdheXMg7LShIDU2LTEzNi0yMzYKK2Fsd2F5cyDstKIgNTYtMTM2LTI1NgorYWx3YXlzIOy0oyA1Ni0xMzYtMzU2CithbHdheXMg7LSkIDU2LTEyMzYKK2Fsd2F5cyDstKUgNTYtMTIzNi0xCithbHdheXMg7LSmIDU2LTEyMzYtMS0xCithbHdheXMg7LSnIDU2LTEyMzYtMS0zCithbHdheXMg7LSoIDU2LTEyMzYtMjUKK2Fsd2F5cyDstKkgNTYtMTIzNi0yNS0xMworYWx3YXlzIOy0qiA1Ni0xMjM2LTI1LTM1NgorYWx3YXlzIOy0qyA1Ni0xMjM2LTM1CithbHdheXMg7LSsIDU2LTEyMzYtMgorYWx3YXlzIOy0rSA1Ni0xMjM2LTItMQorYWx3YXlzIOy0riA1Ni0xMjM2LTItMjYKK2Fsd2F5cyDstK8gNTYtMTIzNi0yLTEyCithbHdheXMg7LSwIDU2LTEyMzYtMi0zCithbHdheXMg7LSxIDU2LTEyMzYtMi0yMzYKK2Fsd2F5cyDstLIgNTYtMTIzNi0yLTI1NgorYWx3YXlzIOy0syA1Ni0xMjM2LTItMzU2CithbHdheXMg7LS0IDU2LTEyMzYtMjYKK2Fsd2F5cyDstLUgNTYtMTIzNi0xMgorYWx3YXlzIOy0tiA1Ni0xMjM2LTEyLTMKK2Fsd2F5cyDstLcgNTYtMTIzNi0zCithbHdheXMg7LS4IDU2LTEyMzYtMy0zCithbHdheXMg7LS5IDU2LTEyMzYtMjM1NgorYWx3YXlzIOy0uiA1Ni0xMjM2LTEzCithbHdheXMg7LS7IDU2LTEyMzYtMjMKK2Fsd2F5cyDstLwgNTYtMTIzNi0yMzUKK2Fsd2F5cyDstL0gNTYtMTIzNi0yMzYKK2Fsd2F5cyDstL4gNTYtMTIzNi0yNTYKK2Fsd2F5cyDstL8gNTYtMTIzNi0zNTYKK2Fsd2F5cyDstYAgNTYtMTIzNi0xMjM1CithbHdheXMg7LWBIDU2LTEyMzYtMTIzNS0xCithbHdheXMg7LWCIDU2LTEyMzYtMTIzNS0xLTEKK2Fsd2F5cyDstYMgNTYtMTIzNi0xMjM1LTEtMworYWx3YXlzIOy1hCA1Ni0xMjM2LTEyMzUtMjUKK2Fsd2F5cyDstYUgNTYtMTIzNi0xMjM1LTI1LTEzCithbHdheXMg7LWGIDU2LTEyMzYtMTIzNS0yNS0zNTYKK2Fsd2F5cyDstYcgNTYtMTIzNi0xMjM1LTM1CithbHdheXMg7LWIIDU2LTEyMzYtMTIzNS0yCithbHdheXMg7LWJIDU2LTEyMzYtMTIzNS0yLTEKK2Fsd2F5cyDstYogNTYtMTIzNi0xMjM1LTItMjYKK2Fsd2F5cyDstYsgNTYtMTIzNi0xMjM1LTItMTIKK2Fsd2F5cyDstYwgNTYtMTIzNi0xMjM1LTItMworYWx3YXlzIOy1jSA1Ni0xMjM2LTEyMzUtMi0yMzYKK2Fsd2F5cyDstY4gNTYtMTIzNi0xMjM1LTItMjU2CithbHdheXMg7LWPIDU2LTEyMzYtMTIzNS0yLTM1NgorYWx3YXlzIOy1kCA1Ni0xMjM2LTEyMzUtMjYKK2Fsd2F5cyDstZEgNTYtMTIzNi0xMjM1LTEyCithbHdheXMg7LWSIDU2LTEyMzYtMTIzNS0xMi0zCithbHdheXMg7LWTIDU2LTEyMzYtMTIzNS0zCithbHdheXMg7LWUIDU2LTEyMzYtMTIzNS0zLTMKK2Fsd2F5cyDstZUgNTYtMTIzNi0xMjM1LTIzNTYKK2Fsd2F5cyDstZYgNTYtMTIzNi0xMjM1LTEzCithbHdheXMg7LWXIDU2LTEyMzYtMTIzNS0yMworYWx3YXlzIOy1mCA1Ni0xMjM2LTEyMzUtMjM1CithbHdheXMg7LWZIDU2LTEyMzYtMTIzNS0yMzYKK2Fsd2F5cyDstZogNTYtMTIzNi0xMjM1LTI1NgorYWx3YXlzIOy1myA1Ni0xMjM2LTEyMzUtMzU2CithbHdheXMg7LWcIDU2LTEzNDU2CithbHdheXMg7LWdIDU2LTEzNDU2LTEKK2Fsd2F5cyDstZ4gNTYtMTM0NTYtMS0xCithbHdheXMg7LWfIDU2LTEzNDU2LTEtMworYWx3YXlzIOy1oCA1Ni0xMzQ1Ni0yNQorYWx3YXlzIOy1oSA1Ni0xMzQ1Ni0yNS0xMworYWx3YXlzIOy1oiA1Ni0xMzQ1Ni0yNS0zNTYKK2Fsd2F5cyDstaMgNTYtMTM0NTYtMzUKK2Fsd2F5cyDstaQgNTYtMTM0NTYtMgorYWx3YXlzIOy1pSA1Ni0xMzQ1Ni0yLTEKK2Fsd2F5cyDstaYgNTYtMTM0NTYtMi0yNgorYWx3YXlzIOy1pyA1Ni0xMzQ1Ni0yLTEyCithbHdheXMg7LWoIDU2LTEzNDU2LTItMworYWx3YXlzIOy1qSA1Ni0xMzQ1Ni0yLTIzNgorYWx3YXlzIOy1qiA1Ni0xMzQ1Ni0yLTI1NgorYWx3YXlzIOy1qyA1Ni0xMzQ1Ni0yLTM1NgorYWx3YXlzIOy1rCA1Ni0xMzQ1Ni0yNgorYWx3YXlzIOy1rSA1Ni0xMzQ1Ni0xMgorYWx3YXlzIOy1riA1Ni0xMzQ1Ni0xMi0zCithbHdheXMg7LWvIDU2LTEzNDU2LTMKK2Fsd2F5cyDstbAgNTYtMTM0NTYtMy0zCithbHdheXMg7LWxIDU2LTEzNDU2LTIzNTYKK2Fsd2F5cyDstbIgNTYtMTM0NTYtMTMKK2Fsd2F5cyDstbMgNTYtMTM0NTYtMjMKK2Fsd2F5cyDstbQgNTYtMTM0NTYtMjM1CithbHdheXMg7LW1IDU2LTEzNDU2LTIzNgorYWx3YXlzIOy1tiA1Ni0xMzQ1Ni0yNTYKK2Fsd2F5cyDstbcgNTYtMTM0NTYtMzU2CithbHdheXMg7LW4IDU2LTM0NgorYWx3YXlzIOy1uSA1Ni0zNDYtMQorYWx3YXlzIOy1uiA1Ni0zNDYtMS0xCithbHdheXMg7LW7IDU2LTM0Ni0xLTMKK2Fsd2F5cyDstbwgNTYtMzQ2LTI1CithbHdheXMg7LW9IDU2LTM0Ni0yNS0xMworYWx3YXlzIOy1viA1Ni0zNDYtMjUtMzU2CithbHdheXMg7LW/IDU2LTM0Ni0zNQorYWx3YXlzIOy2gCA1Ni0zNDYtMgorYWx3YXlzIOy2gSA1Ni0zNDYtMi0xCithbHdheXMg7LaCIDU2LTM0Ni0yLTI2CithbHdheXMg7LaDIDU2LTM0Ni0yLTEyCithbHdheXMg7LaEIDU2LTM0Ni0yLTMKK2Fsd2F5cyDstoUgNTYtMzQ2LTItMjM2CithbHdheXMg7LaGIDU2LTM0Ni0yLTI1NgorYWx3YXlzIOy2hyA1Ni0zNDYtMi0zNTYKK2Fsd2F5cyDstoggNTYtMzQ2LTI2CithbHdheXMg7LaJIDU2LTM0Ni0xMgorYWx3YXlzIOy2iiA1Ni0zNDYtMTItMworYWx3YXlzIOy2iyA1Ni0zNDYtMworYWx3YXlzIOy2jCA1Ni0zNDYtMy0zCithbHdheXMg7LaNIDU2LTM0Ni0yMzU2CithbHdheXMg7LaOIDU2LTM0Ni0xMworYWx3YXlzIOy2jyA1Ni0zNDYtMjMKK2Fsd2F5cyDstpAgNTYtMzQ2LTIzNQorYWx3YXlzIOy2kSA1Ni0zNDYtMjM2CithbHdheXMg7LaSIDU2LTM0Ni0yNTYKK2Fsd2F5cyDstpMgNTYtMzQ2LTM1NgorYWx3YXlzIOy2lCA1Ni0xMzQKK2Fsd2F5cyDstpUgNTYtMTM0LTEKK2Fsd2F5cyDstpYgNTYtMTM0LTEtMQorYWx3YXlzIOy2lyA1Ni0xMzQtMS0zCithbHdheXMg7LaYIDU2LTEzNC0yNQorYWx3YXlzIOy2mSA1Ni0xMzQtMjUtMTMKK2Fsd2F5cyDstpogNTYtMTM0LTI1LTM1NgorYWx3YXlzIOy2myA1Ni0xMzQtMzUKK2Fsd2F5cyDstpwgNTYtMTM0LTIKK2Fsd2F5cyDstp0gNTYtMTM0LTItMQorYWx3YXlzIOy2niA1Ni0xMzQtMi0yNgorYWx3YXlzIOy2nyA1Ni0xMzQtMi0xMgorYWx3YXlzIOy2oCA1Ni0xMzQtMi0zCithbHdheXMg7LahIDU2LTEzNC0yLTIzNgorYWx3YXlzIOy2oiA1Ni0xMzQtMi0yNTYKK2Fsd2F5cyDstqMgNTYtMTM0LTItMzU2CithbHdheXMg7LakIDU2LTEzNC0yNgorYWx3YXlzIOy2pSA1Ni0xMzQtMTIKK2Fsd2F5cyDstqYgNTYtMTM0LTEyLTMKK2Fsd2F5cyDstqcgNTYtMTM0LTMKK2Fsd2F5cyDstqggNTYtMTM0LTMtMworYWx3YXlzIOy2qSA1Ni0xMzQtMjM1NgorYWx3YXlzIOy2qiA1Ni0xMzQtMTMKK2Fsd2F5cyDstqsgNTYtMTM0LTIzCithbHdheXMg7LasIDU2LTEzNC0yMzUKK2Fsd2F5cyDstq0gNTYtMTM0LTIzNgorYWx3YXlzIOy2riA1Ni0xMzQtMjU2CithbHdheXMg7LavIDU2LTEzNC0zNTYKK2Fsd2F5cyDstrAgNTYtMTIzNAorYWx3YXlzIOy2sSA1Ni0xMjM0LTEKK2Fsd2F5cyDstrIgNTYtMTIzNC0xLTEKK2Fsd2F5cyDstrMgNTYtMTIzNC0xLTMKK2Fsd2F5cyDstrQgNTYtMTIzNC0yNQorYWx3YXlzIOy2tSA1Ni0xMjM0LTI1LTEzCithbHdheXMg7La2IDU2LTEyMzQtMjUtMzU2CithbHdheXMg7La3IDU2LTEyMzQtMzUKK2Fsd2F5cyDstrggNTYtMTIzNC0yCithbHdheXMg7La5IDU2LTEyMzQtMi0xCithbHdheXMg7La6IDU2LTEyMzQtMi0yNgorYWx3YXlzIOy2uyA1Ni0xMjM0LTItMTIKK2Fsd2F5cyDstrwgNTYtMTIzNC0yLTMKK2Fsd2F5cyDstr0gNTYtMTIzNC0yLTIzNgorYWx3YXlzIOy2viA1Ni0xMjM0LTItMjU2CithbHdheXMg7La/IDU2LTEyMzQtMi0zNTYKK2Fsd2F5cyDst4AgNTYtMTIzNC0yNgorYWx3YXlzIOy3gSA1Ni0xMjM0LTEyCithbHdheXMg7LeCIDU2LTEyMzQtMTItMworYWx3YXlzIOy3gyA1Ni0xMjM0LTMKK2Fsd2F5cyDst4QgNTYtMTIzNC0zLTMKK2Fsd2F5cyDst4UgNTYtMTIzNC0yMzU2CithbHdheXMg7LeGIDU2LTEyMzQtMTMKK2Fsd2F5cyDst4cgNTYtMTIzNC0yMworYWx3YXlzIOy3iCA1Ni0xMjM0LTIzNQorYWx3YXlzIOy3iSA1Ni0xMjM0LTIzNgorYWx3YXlzIOy3iiA1Ni0xMjM0LTI1NgorYWx3YXlzIOy3iyA1Ni0xMjM0LTM1NgorYWx3YXlzIOy3jCA1Ni0xMjM0LTEyMzUKK2Fsd2F5cyDst40gNTYtMTIzNC0xMjM1LTEKK2Fsd2F5cyDst44gNTYtMTIzNC0xMjM1LTEtMQorYWx3YXlzIOy3jyA1Ni0xMjM0LTEyMzUtMS0zCithbHdheXMg7LeQIDU2LTEyMzQtMTIzNS0yNQorYWx3YXlzIOy3kSA1Ni0xMjM0LTEyMzUtMjUtMTMKK2Fsd2F5cyDst5IgNTYtMTIzNC0xMjM1LTI1LTM1NgorYWx3YXlzIOy3kyA1Ni0xMjM0LTEyMzUtMzUKK2Fsd2F5cyDst5QgNTYtMTIzNC0xMjM1LTIKK2Fsd2F5cyDst5UgNTYtMTIzNC0xMjM1LTItMQorYWx3YXlzIOy3liA1Ni0xMjM0LTEyMzUtMi0yNgorYWx3YXlzIOy3lyA1Ni0xMjM0LTEyMzUtMi0xMgorYWx3YXlzIOy3mCA1Ni0xMjM0LTEyMzUtMi0zCithbHdheXMg7LeZIDU2LTEyMzQtMTIzNS0yLTIzNgorYWx3YXlzIOy3miA1Ni0xMjM0LTEyMzUtMi0yNTYKK2Fsd2F5cyDst5sgNTYtMTIzNC0xMjM1LTItMzU2CithbHdheXMg7LecIDU2LTEyMzQtMTIzNS0yNgorYWx3YXlzIOy3nSA1Ni0xMjM0LTEyMzUtMTIKK2Fsd2F5cyDst54gNTYtMTIzNC0xMjM1LTEyLTMKK2Fsd2F5cyDst58gNTYtMTIzNC0xMjM1LTMKK2Fsd2F5cyDst6AgNTYtMTIzNC0xMjM1LTMtMworYWx3YXlzIOy3oSA1Ni0xMjM0LTEyMzUtMjM1NgorYWx3YXlzIOy3oiA1Ni0xMjM0LTEyMzUtMTMKK2Fsd2F5cyDst6MgNTYtMTIzNC0xMjM1LTIzCithbHdheXMg7LekIDU2LTEyMzQtMTIzNS0yMzUKK2Fsd2F5cyDst6UgNTYtMTIzNC0xMjM1LTIzNgorYWx3YXlzIOy3piA1Ni0xMjM0LTEyMzUtMjU2CithbHdheXMg7LenIDU2LTEyMzQtMTIzNS0zNTYKK2Fsd2F5cyDst6ggNTYtMTM0LTEyMzUKK2Fsd2F5cyDst6kgNTYtMTM0LTEyMzUtMQorYWx3YXlzIOy3qiA1Ni0xMzQtMTIzNS0xLTEKK2Fsd2F5cyDst6sgNTYtMTM0LTEyMzUtMS0zCithbHdheXMg7LesIDU2LTEzNC0xMjM1LTI1CithbHdheXMg7LetIDU2LTEzNC0xMjM1LTI1LTEzCithbHdheXMg7LeuIDU2LTEzNC0xMjM1LTI1LTM1NgorYWx3YXlzIOy3ryA1Ni0xMzQtMTIzNS0zNQorYWx3YXlzIOy3sCA1Ni0xMzQtMTIzNS0yCithbHdheXMg7LexIDU2LTEzNC0xMjM1LTItMQorYWx3YXlzIOy3siA1Ni0xMzQtMTIzNS0yLTI2CithbHdheXMg7LezIDU2LTEzNC0xMjM1LTItMTIKK2Fsd2F5cyDst7QgNTYtMTM0LTEyMzUtMi0zCithbHdheXMg7Le1IDU2LTEzNC0xMjM1LTItMjM2CithbHdheXMg7Le2IDU2LTEzNC0xMjM1LTItMjU2CithbHdheXMg7Le3IDU2LTEzNC0xMjM1LTItMzU2CithbHdheXMg7Le4IDU2LTEzNC0xMjM1LTI2CithbHdheXMg7Le5IDU2LTEzNC0xMjM1LTEyCithbHdheXMg7Le6IDU2LTEzNC0xMjM1LTEyLTMKK2Fsd2F5cyDst7sgNTYtMTM0LTEyMzUtMworYWx3YXlzIOy3vCA1Ni0xMzQtMTIzNS0zLTMKK2Fsd2F5cyDst70gNTYtMTM0LTEyMzUtMjM1NgorYWx3YXlzIOy3viA1Ni0xMzQtMTIzNS0xMworYWx3YXlzIOy3vyA1Ni0xMzQtMTIzNS0yMworYWx3YXlzIOy4gCA1Ni0xMzQtMTIzNS0yMzUKK2Fsd2F5cyDsuIEgNTYtMTM0LTEyMzUtMjM2CithbHdheXMg7LiCIDU2LTEzNC0xMjM1LTI1NgorYWx3YXlzIOy4gyA1Ni0xMzQtMTIzNS0zNTYKK2Fsd2F5cyDsuIQgNTYtMTQ2CithbHdheXMg7LiFIDU2LTE0Ni0xCithbHdheXMg7LiGIDU2LTE0Ni0xLTEKK2Fsd2F5cyDsuIcgNTYtMTQ2LTEtMworYWx3YXlzIOy4iCA1Ni0xNDYtMjUKK2Fsd2F5cyDsuIkgNTYtMTQ2LTI1LTEzCithbHdheXMg7LiKIDU2LTE0Ni0yNS0zNTYKK2Fsd2F5cyDsuIsgNTYtMTQ2LTM1CithbHdheXMg7LiMIDU2LTE0Ni0yCithbHdheXMg7LiNIDU2LTE0Ni0yLTEKK2Fsd2F5cyDsuI4gNTYtMTQ2LTItMjYKK2Fsd2F5cyDsuI8gNTYtMTQ2LTItMTIKK2Fsd2F5cyDsuJAgNTYtMTQ2LTItMworYWx3YXlzIOy4kSA1Ni0xNDYtMi0yMzYKK2Fsd2F5cyDsuJIgNTYtMTQ2LTItMjU2CithbHdheXMg7LiTIDU2LTE0Ni0yLTM1NgorYWx3YXlzIOy4lCA1Ni0xNDYtMjYKK2Fsd2F5cyDsuJUgNTYtMTQ2LTEyCithbHdheXMg7LiWIDU2LTE0Ni0xMi0zCithbHdheXMg7LiXIDU2LTE0Ni0zCithbHdheXMg7LiYIDU2LTE0Ni0zLTMKK2Fsd2F5cyDsuJkgNTYtMTQ2LTIzNTYKK2Fsd2F5cyDsuJogNTYtMTQ2LTEzCithbHdheXMg7LibIDU2LTE0Ni0yMworYWx3YXlzIOy4nCA1Ni0xNDYtMjM1CithbHdheXMg7LidIDU2LTE0Ni0yMzYKK2Fsd2F5cyDsuJ4gNTYtMTQ2LTI1NgorYWx3YXlzIOy4nyA1Ni0xNDYtMzU2CithbHdheXMg7LigIDU2LTI0NgorYWx3YXlzIOy4oSA1Ni0yNDYtMQorYWx3YXlzIOy4oiA1Ni0yNDYtMS0xCithbHdheXMg7LijIDU2LTI0Ni0xLTMKK2Fsd2F5cyDsuKQgNTYtMjQ2LTI1CithbHdheXMg7LilIDU2LTI0Ni0yNS0xMworYWx3YXlzIOy4piA1Ni0yNDYtMjUtMzU2CithbHdheXMg7LinIDU2LTI0Ni0zNQorYWx3YXlzIOy4qCA1Ni0yNDYtMgorYWx3YXlzIOy4qSA1Ni0yNDYtMi0xCithbHdheXMg7LiqIDU2LTI0Ni0yLTI2CithbHdheXMg7LirIDU2LTI0Ni0yLTEyCithbHdheXMg7LisIDU2LTI0Ni0yLTMKK2Fsd2F5cyDsuK0gNTYtMjQ2LTItMjM2CithbHdheXMg7LiuIDU2LTI0Ni0yLTI1NgorYWx3YXlzIOy4ryA1Ni0yNDYtMi0zNTYKK2Fsd2F5cyDsuLAgNTYtMjQ2LTI2CithbHdheXMg7LixIDU2LTI0Ni0xMgorYWx3YXlzIOy4siA1Ni0yNDYtMTItMworYWx3YXlzIOy4syA1Ni0yNDYtMworYWx3YXlzIOy4tCA1Ni0yNDYtMy0zCithbHdheXMg7Li1IDU2LTI0Ni0yMzU2CithbHdheXMg7Li2IDU2LTI0Ni0xMworYWx3YXlzIOy4tyA1Ni0yNDYtMjMKK2Fsd2F5cyDsuLggNTYtMjQ2LTIzNQorYWx3YXlzIOy4uSA1Ni0yNDYtMjM2CithbHdheXMg7Li6IDU2LTI0Ni0yNTYKK2Fsd2F5cyDsuLsgNTYtMjQ2LTM1NgorYWx3YXlzIOy4vCA1Ni0yNDU2CithbHdheXMg7Li9IDU2LTI0NTYtMQorYWx3YXlzIOy4viA1Ni0yNDU2LTEtMQorYWx3YXlzIOy4vyA1Ni0yNDU2LTEtMworYWx3YXlzIOy5gCA1Ni0yNDU2LTI1CithbHdheXMg7LmBIDU2LTI0NTYtMjUtMTMKK2Fsd2F5cyDsuYIgNTYtMjQ1Ni0yNS0zNTYKK2Fsd2F5cyDsuYMgNTYtMjQ1Ni0zNQorYWx3YXlzIOy5hCA1Ni0yNDU2LTIKK2Fsd2F5cyDsuYUgNTYtMjQ1Ni0yLTEKK2Fsd2F5cyDsuYYgNTYtMjQ1Ni0yLTI2CithbHdheXMg7LmHIDU2LTI0NTYtMi0xMgorYWx3YXlzIOy5iCA1Ni0yNDU2LTItMworYWx3YXlzIOy5iSA1Ni0yNDU2LTItMjM2CithbHdheXMg7LmKIDU2LTI0NTYtMi0yNTYKK2Fsd2F5cyDsuYsgNTYtMjQ1Ni0yLTM1NgorYWx3YXlzIOy5jCA1Ni0yNDU2LTI2CithbHdheXMg7LmNIDU2LTI0NTYtMTIKK2Fsd2F5cyDsuY4gNTYtMjQ1Ni0xMi0zCithbHdheXMg7LmPIDU2LTI0NTYtMworYWx3YXlzIOy5kCA1Ni0yNDU2LTMtMworYWx3YXlzIOy5kSA1Ni0yNDU2LTIzNTYKK2Fsd2F5cyDsuZIgNTYtMjQ1Ni0xMworYWx3YXlzIOy5kyA1Ni0yNDU2LTIzCithbHdheXMg7LmUIDU2LTI0NTYtMjM1CithbHdheXMg7LmVIDU2LTI0NTYtMjM2CithbHdheXMg7LmWIDU2LTI0NTYtMjU2CithbHdheXMg7LmXIDU2LTI0NTYtMzU2CithbHdheXMg7LmYIDU2LTEzNQorYWx3YXlzIOy5mSA1Ni0xMzUtMQorYWx3YXlzIOy5miA1Ni0xMzUtMS0xCithbHdheXMg7LmbIDU2LTEzNS0xLTMKK2Fsd2F5cyDsuZwgNTYtMTM1LTI1CithbHdheXMg7LmdIDU2LTEzNS0yNS0xMworYWx3YXlzIOy5niA1Ni0xMzUtMjUtMzU2CithbHdheXMg7LmfIDU2LTEzNS0zNQorYWx3YXlzIOy5oCA1Ni0xMzUtMgorYWx3YXlzIOy5oSA1Ni0xMzUtMi0xCithbHdheXMg7LmiIDU2LTEzNS0yLTI2CithbHdheXMg7LmjIDU2LTEzNS0yLTEyCithbHdheXMg7LmkIDU2LTEzNS0yLTMKK2Fsd2F5cyDsuaUgNTYtMTM1LTItMjM2CithbHdheXMg7LmmIDU2LTEzNS0yLTI1NgorYWx3YXlzIOy5pyA1Ni0xMzUtMi0zNTYKK2Fsd2F5cyDsuaggNTYtMTM1LTI2CithbHdheXMg7LmpIDU2LTEzNS0xMgorYWx3YXlzIOy5qiA1Ni0xMzUtMTItMworYWx3YXlzIOy5qyA1Ni0xMzUtMworYWx3YXlzIOy5rCA1Ni0xMzUtMy0zCithbHdheXMg7LmtIDU2LTEzNS0yMzU2CithbHdheXMg7LmuIDU2LTEzNS0xMworYWx3YXlzIOy5ryA1Ni0xMzUtMjMKK2Fsd2F5cyDsubAgNTYtMTM1LTIzNQorYWx3YXlzIOy5sSA1Ni0xMzUtMjM2CithbHdheXMg7LmyIDU2LTEzNS0yNTYKK2Fsd2F5cyDsubMgNTYtMTM1LTM1NgorYWx3YXlzIOy5tCAxMjQtMTI2CithbHdheXMg7Lm1IDEyNC0xMjYtMQorYWx3YXlzIOy5tiAxMjQtMTI2LTEtMQorYWx3YXlzIOy5tyAxMjQtMTI2LTEtMworYWx3YXlzIOy5uCAxMjQtMTI2LTI1CithbHdheXMg7Lm5IDEyNC0xMjYtMjUtMTMKK2Fsd2F5cyDsubogMTI0LTEyNi0yNS0zNTYKK2Fsd2F5cyDsubsgMTI0LTEyNi0zNQorYWx3YXlzIOy5vCAxMjQtMTI2LTIKK2Fsd2F5cyDsub0gMTI0LTEyNi0yLTEKK2Fsd2F5cyDsub4gMTI0LTEyNi0yLTI2CithbHdheXMg7Lm/IDEyNC0xMjYtMi0xMgorYWx3YXlzIOy6gCAxMjQtMTI2LTItMworYWx3YXlzIOy6gSAxMjQtMTI2LTItMjM2CithbHdheXMg7LqCIDEyNC0xMjYtMi0yNTYKK2Fsd2F5cyDsuoMgMTI0LTEyNi0yLTM1NgorYWx3YXlzIOy6hCAxMjQtMTI2LTI2CithbHdheXMg7LqFIDEyNC0xMjYtMTIKK2Fsd2F5cyDsuoYgMTI0LTEyNi0xMi0zCithbHdheXMg7LqHIDEyNC0xMjYtMworYWx3YXlzIOy6iCAxMjQtMTI2LTMtMworYWx3YXlzIOy6iSAxMjQtMTI2LTIzNTYKK2Fsd2F5cyDsuoogMTI0LTEyNi0xMworYWx3YXlzIOy6iyAxMjQtMTI2LTIzCithbHdheXMg7LqMIDEyNC0xMjYtMjM1CithbHdheXMg7LqNIDEyNC0xMjYtMjM2CithbHdheXMg7LqOIDEyNC0xMjYtMjU2CithbHdheXMg7LqPIDEyNC0xMjYtMzU2CithbHdheXMg7LqQIDEyNC0xMjM1CithbHdheXMg7LqRIDEyNC0xMjM1LTEKK2Fsd2F5cyDsupIgMTI0LTEyMzUtMS0xCithbHdheXMg7LqTIDEyNC0xMjM1LTEtMworYWx3YXlzIOy6lCAxMjQtMTIzNS0yNQorYWx3YXlzIOy6lSAxMjQtMTIzNS0yNS0xMworYWx3YXlzIOy6liAxMjQtMTIzNS0yNS0zNTYKK2Fsd2F5cyDsupcgMTI0LTEyMzUtMzUKK2Fsd2F5cyDsupggMTI0LTEyMzUtMgorYWx3YXlzIOy6mSAxMjQtMTIzNS0yLTEKK2Fsd2F5cyDsupogMTI0LTEyMzUtMi0yNgorYWx3YXlzIOy6myAxMjQtMTIzNS0yLTEyCithbHdheXMg7LqcIDEyNC0xMjM1LTItMworYWx3YXlzIOy6nSAxMjQtMTIzNS0yLTIzNgorYWx3YXlzIOy6niAxMjQtMTIzNS0yLTI1NgorYWx3YXlzIOy6nyAxMjQtMTIzNS0yLTM1NgorYWx3YXlzIOy6oCAxMjQtMTIzNS0yNgorYWx3YXlzIOy6oSAxMjQtMTIzNS0xMgorYWx3YXlzIOy6oiAxMjQtMTIzNS0xMi0zCithbHdheXMg7LqjIDEyNC0xMjM1LTMKK2Fsd2F5cyDsuqQgMTI0LTEyMzUtMy0zCithbHdheXMg7LqlIDEyNC0xMjM1LTIzNTYKK2Fsd2F5cyDsuqYgMTI0LTEyMzUtMTMKK2Fsd2F5cyDsuqcgMTI0LTEyMzUtMjMKK2Fsd2F5cyDsuqggMTI0LTEyMzUtMjM1CithbHdheXMg7LqpIDEyNC0xMjM1LTIzNgorYWx3YXlzIOy6qiAxMjQtMTIzNS0yNTYKK2Fsd2F5cyDsuqsgMTI0LTEyMzUtMzU2CithbHdheXMg7LqsIDEyNC0zNDUKK2Fsd2F5cyDsuq0gMTI0LTM0NS0xCithbHdheXMg7LquIDEyNC0zNDUtMS0xCithbHdheXMg7LqvIDEyNC0zNDUtMS0zCithbHdheXMg7LqwIDEyNC0zNDUtMjUKK2Fsd2F5cyDsurEgMTI0LTM0NS0yNS0xMworYWx3YXlzIOy6siAxMjQtMzQ1LTI1LTM1NgorYWx3YXlzIOy6syAxMjQtMzQ1LTM1CithbHdheXMg7Lq0IDEyNC0zNDUtMgorYWx3YXlzIOy6tSAxMjQtMzQ1LTItMQorYWx3YXlzIOy6tiAxMjQtMzQ1LTItMjYKK2Fsd2F5cyDsurcgMTI0LTM0NS0yLTEyCithbHdheXMg7Lq4IDEyNC0zNDUtMi0zCithbHdheXMg7Lq5IDEyNC0zNDUtMi0yMzYKK2Fsd2F5cyDsurogMTI0LTM0NS0yLTI1NgorYWx3YXlzIOy6uyAxMjQtMzQ1LTItMzU2CithbHdheXMg7Lq8IDEyNC0zNDUtMjYKK2Fsd2F5cyDsur0gMTI0LTM0NS0xMgorYWx3YXlzIOy6viAxMjQtMzQ1LTEyLTMKK2Fsd2F5cyDsur8gMTI0LTM0NS0zCithbHdheXMg7LuAIDEyNC0zNDUtMy0zCithbHdheXMg7LuBIDEyNC0zNDUtMjM1NgorYWx3YXlzIOy7giAxMjQtMzQ1LTEzCithbHdheXMg7LuDIDEyNC0zNDUtMjMKK2Fsd2F5cyDsu4QgMTI0LTM0NS0yMzUKK2Fsd2F5cyDsu4UgMTI0LTM0NS0yMzYKK2Fsd2F5cyDsu4YgMTI0LTM0NS0yNTYKK2Fsd2F5cyDsu4cgMTI0LTM0NS0zNTYKK2Fsd2F5cyDsu4ggMTI0LTM0NS0xMjM1CithbHdheXMg7LuJIDEyNC0zNDUtMTIzNS0xCithbHdheXMg7LuKIDEyNC0zNDUtMTIzNS0xLTEKK2Fsd2F5cyDsu4sgMTI0LTM0NS0xMjM1LTEtMworYWx3YXlzIOy7jCAxMjQtMzQ1LTEyMzUtMjUKK2Fsd2F5cyDsu40gMTI0LTM0NS0xMjM1LTI1LTEzCithbHdheXMg7LuOIDEyNC0zNDUtMTIzNS0yNS0zNTYKK2Fsd2F5cyDsu48gMTI0LTM0NS0xMjM1LTM1CithbHdheXMg7LuQIDEyNC0zNDUtMTIzNS0yCithbHdheXMg7LuRIDEyNC0zNDUtMTIzNS0yLTEKK2Fsd2F5cyDsu5IgMTI0LTM0NS0xMjM1LTItMjYKK2Fsd2F5cyDsu5MgMTI0LTM0NS0xMjM1LTItMTIKK2Fsd2F5cyDsu5QgMTI0LTM0NS0xMjM1LTItMworYWx3YXlzIOy7lSAxMjQtMzQ1LTEyMzUtMi0yMzYKK2Fsd2F5cyDsu5YgMTI0LTM0NS0xMjM1LTItMjU2CithbHdheXMg7LuXIDEyNC0zNDUtMTIzNS0yLTM1NgorYWx3YXlzIOy7mCAxMjQtMzQ1LTEyMzUtMjYKK2Fsd2F5cyDsu5kgMTI0LTM0NS0xMjM1LTEyCithbHdheXMg7LuaIDEyNC0zNDUtMTIzNS0xMi0zCithbHdheXMg7LubIDEyNC0zNDUtMTIzNS0zCithbHdheXMg7LucIDEyNC0zNDUtMTIzNS0zLTMKK2Fsd2F5cyDsu50gMTI0LTM0NS0xMjM1LTIzNTYKK2Fsd2F5cyDsu54gMTI0LTM0NS0xMjM1LTEzCithbHdheXMg7LufIDEyNC0zNDUtMTIzNS0yMworYWx3YXlzIOy7oCAxMjQtMzQ1LTEyMzUtMjM1CithbHdheXMg7LuhIDEyNC0zNDUtMTIzNS0yMzYKK2Fsd2F5cyDsu6IgMTI0LTM0NS0xMjM1LTI1NgorYWx3YXlzIOy7oyAxMjQtMzQ1LTEyMzUtMzU2CithbHdheXMg7LukIDEyNC0yMzQKK2Fsd2F5cyDsu6UgMTI0LTIzNC0xCithbHdheXMg7LumIDEyNC0yMzQtMS0xCithbHdheXMg7LunIDEyNC0yMzQtMS0zCithbHdheXMg7LuoIDEyNC0yMzQtMjUKK2Fsd2F5cyDsu6kgMTI0LTIzNC0yNS0xMworYWx3YXlzIOy7qiAxMjQtMjM0LTI1LTM1NgorYWx3YXlzIOy7qyAxMjQtMjM0LTM1CithbHdheXMg7LusIDEyNC0yMzQtMgorYWx3YXlzIOy7rSAxMjQtMjM0LTItMQorYWx3YXlzIOy7riAxMjQtMjM0LTItMjYKK2Fsd2F5cyDsu68gMTI0LTIzNC0yLTEyCithbHdheXMg7LuwIDEyNC0yMzQtMi0zCithbHdheXMg7LuxIDEyNC0yMzQtMi0yMzYKK2Fsd2F5cyDsu7IgMTI0LTIzNC0yLTI1NgorYWx3YXlzIOy7syAxMjQtMjM0LTItMzU2CithbHdheXMg7Lu0IDEyNC0yMzQtMjYKK2Fsd2F5cyDsu7UgMTI0LTIzNC0xMgorYWx3YXlzIOy7tiAxMjQtMjM0LTEyLTMKK2Fsd2F5cyDsu7cgMTI0LTIzNC0zCithbHdheXMg7Lu4IDEyNC0yMzQtMy0zCithbHdheXMg7Lu5IDEyNC0yMzQtMjM1NgorYWx3YXlzIOy7uiAxMjQtMjM0LTEzCithbHdheXMg7Lu7IDEyNC0yMzQtMjMKK2Fsd2F5cyDsu7wgMTI0LTIzNC0yMzUKK2Fsd2F5cyDsu70gMTI0LTIzNC0yMzYKK2Fsd2F5cyDsu74gMTI0LTIzNC0yNTYKK2Fsd2F5cyDsu78gMTI0LTIzNC0zNTYKK2Fsd2F5cyDsvIAgMTI0LTEzNDUKK2Fsd2F5cyDsvIEgMTI0LTEzNDUtMQorYWx3YXlzIOy8giAxMjQtMTM0NS0xLTEKK2Fsd2F5cyDsvIMgMTI0LTEzNDUtMS0zCithbHdheXMg7LyEIDEyNC0xMzQ1LTI1CithbHdheXMg7LyFIDEyNC0xMzQ1LTI1LTEzCithbHdheXMg7LyGIDEyNC0xMzQ1LTI1LTM1NgorYWx3YXlzIOy8hyAxMjQtMTM0NS0zNQorYWx3YXlzIOy8iCAxMjQtMTM0NS0yCithbHdheXMg7LyJIDEyNC0xMzQ1LTItMQorYWx3YXlzIOy8iiAxMjQtMTM0NS0yLTI2CithbHdheXMg7LyLIDEyNC0xMzQ1LTItMTIKK2Fsd2F5cyDsvIwgMTI0LTEzNDUtMi0zCithbHdheXMg7LyNIDEyNC0xMzQ1LTItMjM2CithbHdheXMg7LyOIDEyNC0xMzQ1LTItMjU2CithbHdheXMg7LyPIDEyNC0xMzQ1LTItMzU2CithbHdheXMg7LyQIDEyNC0xMzQ1LTI2CithbHdheXMg7LyRIDEyNC0xMzQ1LTEyCithbHdheXMg7LySIDEyNC0xMzQ1LTEyLTMKK2Fsd2F5cyDsvJMgMTI0LTEzNDUtMworYWx3YXlzIOy8lCAxMjQtMTM0NS0zLTMKK2Fsd2F5cyDsvJUgMTI0LTEzNDUtMjM1NgorYWx3YXlzIOy8liAxMjQtMTM0NS0xMworYWx3YXlzIOy8lyAxMjQtMTM0NS0yMworYWx3YXlzIOy8mCAxMjQtMTM0NS0yMzUKK2Fsd2F5cyDsvJkgMTI0LTEzNDUtMjM2CithbHdheXMg7LyaIDEyNC0xMzQ1LTI1NgorYWx3YXlzIOy8myAxMjQtMTM0NS0zNTYKK2Fsd2F5cyDsvJwgMTI0LTE1NgorYWx3YXlzIOy8nSAxMjQtMTU2LTEKK2Fsd2F5cyDsvJ4gMTI0LTE1Ni0xLTEKK2Fsd2F5cyDsvJ8gMTI0LTE1Ni0xLTMKK2Fsd2F5cyDsvKAgMTI0LTE1Ni0yNQorYWx3YXlzIOy8oSAxMjQtMTU2LTI1LTEzCithbHdheXMg7LyiIDEyNC0xNTYtMjUtMzU2CithbHdheXMg7LyjIDEyNC0xNTYtMzUKK2Fsd2F5cyDsvKQgMTI0LTE1Ni0yCithbHdheXMg7LylIDEyNC0xNTYtMi0xCithbHdheXMg7LymIDEyNC0xNTYtMi0yNgorYWx3YXlzIOy8pyAxMjQtMTU2LTItMTIKK2Fsd2F5cyDsvKggMTI0LTE1Ni0yLTMKK2Fsd2F5cyDsvKkgMTI0LTE1Ni0yLTIzNgorYWx3YXlzIOy8qiAxMjQtMTU2LTItMjU2CithbHdheXMg7LyrIDEyNC0xNTYtMi0zNTYKK2Fsd2F5cyDsvKwgMTI0LTE1Ni0yNgorYWx3YXlzIOy8rSAxMjQtMTU2LTEyCithbHdheXMg7LyuIDEyNC0xNTYtMTItMworYWx3YXlzIOy8ryAxMjQtMTU2LTMKK2Fsd2F5cyDsvLAgMTI0LTE1Ni0zLTMKK2Fsd2F5cyDsvLEgMTI0LTE1Ni0yMzU2CithbHdheXMg7LyyIDEyNC0xNTYtMTMKK2Fsd2F5cyDsvLMgMTI0LTE1Ni0yMworYWx3YXlzIOy8tCAxMjQtMTU2LTIzNQorYWx3YXlzIOy8tSAxMjQtMTU2LTIzNgorYWx3YXlzIOy8tiAxMjQtMTU2LTI1NgorYWx3YXlzIOy8tyAxMjQtMTU2LTM1NgorYWx3YXlzIOy8uCAxMjQtMzQKK2Fsd2F5cyDsvLkgMTI0LTM0LTEKK2Fsd2F5cyDsvLogMTI0LTM0LTEtMQorYWx3YXlzIOy8uyAxMjQtMzQtMS0zCithbHdheXMg7Ly8IDEyNC0zNC0yNQorYWx3YXlzIOy8vSAxMjQtMzQtMjUtMTMKK2Fsd2F5cyDsvL4gMTI0LTM0LTI1LTM1NgorYWx3YXlzIOy8vyAxMjQtMzQtMzUKK2Fsd2F5cyDsvYAgMTI0LTM0LTIKK2Fsd2F5cyDsvYEgMTI0LTM0LTItMQorYWx3YXlzIOy9giAxMjQtMzQtMi0yNgorYWx3YXlzIOy9gyAxMjQtMzQtMi0xMgorYWx3YXlzIOy9hCAxMjQtMzQtMi0zCithbHdheXMg7L2FIDEyNC0zNC0yLTIzNgorYWx3YXlzIOy9hiAxMjQtMzQtMi0yNTYKK2Fsd2F5cyDsvYcgMTI0LTM0LTItMzU2CithbHdheXMg7L2IIDEyNC0zNC0yNgorYWx3YXlzIOy9iSAxMjQtMzQtMTIKK2Fsd2F5cyDsvYogMTI0LTM0LTEyLTMKK2Fsd2F5cyDsvYsgMTI0LTM0LTMKK2Fsd2F5cyDsvYwgMTI0LTM0LTMtMworYWx3YXlzIOy9jSAxMjQtMzQtMjM1NgorYWx3YXlzIOy9jiAxMjQtMzQtMTMKK2Fsd2F5cyDsvY8gMTI0LTM0LTIzCithbHdheXMg7L2QIDEyNC0zNC0yMzUKK2Fsd2F5cyDsvZEgMTI0LTM0LTIzNgorYWx3YXlzIOy9kiAxMjQtMzQtMjU2CithbHdheXMg7L2TIDEyNC0zNC0zNTYKK2Fsd2F5cyDsvZQgMTI0LTEzNgorYWx3YXlzIOy9lSAxMjQtMTM2LTEKK2Fsd2F5cyDsvZYgMTI0LTEzNi0xLTEKK2Fsd2F5cyDsvZcgMTI0LTEzNi0xLTMKK2Fsd2F5cyDsvZggMTI0LTEzNi0yNQorYWx3YXlzIOy9mSAxMjQtMTM2LTI1LTEzCithbHdheXMg7L2aIDEyNC0xMzYtMjUtMzU2CithbHdheXMg7L2bIDEyNC0xMzYtMzUKK2Fsd2F5cyDsvZwgMTI0LTEzNi0yCithbHdheXMg7L2dIDEyNC0xMzYtMi0xCithbHdheXMg7L2eIDEyNC0xMzYtMi0yNgorYWx3YXlzIOy9nyAxMjQtMTM2LTItMTIKK2Fsd2F5cyDsvaAgMTI0LTEzNi0yLTMKK2Fsd2F5cyDsvaEgMTI0LTEzNi0yLTIzNgorYWx3YXlzIOy9oiAxMjQtMTM2LTItMjU2CithbHdheXMg7L2jIDEyNC0xMzYtMi0zNTYKK2Fsd2F5cyDsvaQgMTI0LTEzNi0yNgorYWx3YXlzIOy9pSAxMjQtMTM2LTEyCithbHdheXMg7L2mIDEyNC0xMzYtMTItMworYWx3YXlzIOy9pyAxMjQtMTM2LTMKK2Fsd2F5cyDsvaggMTI0LTEzNi0zLTMKK2Fsd2F5cyDsvakgMTI0LTEzNi0yMzU2CithbHdheXMg7L2qIDEyNC0xMzYtMTMKK2Fsd2F5cyDsvasgMTI0LTEzNi0yMworYWx3YXlzIOy9rCAxMjQtMTM2LTIzNQorYWx3YXlzIOy9rSAxMjQtMTM2LTIzNgorYWx3YXlzIOy9riAxMjQtMTM2LTI1NgorYWx3YXlzIOy9ryAxMjQtMTM2LTM1NgorYWx3YXlzIOy9sCAxMjQtMTIzNgorYWx3YXlzIOy9sSAxMjQtMTIzNi0xCithbHdheXMg7L2yIDEyNC0xMjM2LTEtMQorYWx3YXlzIOy9syAxMjQtMTIzNi0xLTMKK2Fsd2F5cyDsvbQgMTI0LTEyMzYtMjUKK2Fsd2F5cyDsvbUgMTI0LTEyMzYtMjUtMTMKK2Fsd2F5cyDsvbYgMTI0LTEyMzYtMjUtMzU2CithbHdheXMg7L23IDEyNC0xMjM2LTM1CithbHdheXMg7L24IDEyNC0xMjM2LTIKK2Fsd2F5cyDsvbkgMTI0LTEyMzYtMi0xCithbHdheXMg7L26IDEyNC0xMjM2LTItMjYKK2Fsd2F5cyDsvbsgMTI0LTEyMzYtMi0xMgorYWx3YXlzIOy9vCAxMjQtMTIzNi0yLTMKK2Fsd2F5cyDsvb0gMTI0LTEyMzYtMi0yMzYKK2Fsd2F5cyDsvb4gMTI0LTEyMzYtMi0yNTYKK2Fsd2F5cyDsvb8gMTI0LTEyMzYtMi0zNTYKK2Fsd2F5cyDsvoAgMTI0LTEyMzYtMjYKK2Fsd2F5cyDsvoEgMTI0LTEyMzYtMTIKK2Fsd2F5cyDsvoIgMTI0LTEyMzYtMTItMworYWx3YXlzIOy+gyAxMjQtMTIzNi0zCithbHdheXMg7L6EIDEyNC0xMjM2LTMtMworYWx3YXlzIOy+hSAxMjQtMTIzNi0yMzU2CithbHdheXMg7L6GIDEyNC0xMjM2LTEzCithbHdheXMg7L6HIDEyNC0xMjM2LTIzCithbHdheXMg7L6IIDEyNC0xMjM2LTIzNQorYWx3YXlzIOy+iSAxMjQtMTIzNi0yMzYKK2Fsd2F5cyDsvoogMTI0LTEyMzYtMjU2CithbHdheXMg7L6LIDEyNC0xMjM2LTM1NgorYWx3YXlzIOy+jCAxMjQtMTIzNi0xMjM1CithbHdheXMg7L6NIDEyNC0xMjM2LTEyMzUtMQorYWx3YXlzIOy+jiAxMjQtMTIzNi0xMjM1LTEtMQorYWx3YXlzIOy+jyAxMjQtMTIzNi0xMjM1LTEtMworYWx3YXlzIOy+kCAxMjQtMTIzNi0xMjM1LTI1CithbHdheXMg7L6RIDEyNC0xMjM2LTEyMzUtMjUtMTMKK2Fsd2F5cyDsvpIgMTI0LTEyMzYtMTIzNS0yNS0zNTYKK2Fsd2F5cyDsvpMgMTI0LTEyMzYtMTIzNS0zNQorYWx3YXlzIOy+lCAxMjQtMTIzNi0xMjM1LTIKK2Fsd2F5cyDsvpUgMTI0LTEyMzYtMTIzNS0yLTEKK2Fsd2F5cyDsvpYgMTI0LTEyMzYtMTIzNS0yLTI2CithbHdheXMg7L6XIDEyNC0xMjM2LTEyMzUtMi0xMgorYWx3YXlzIOy+mCAxMjQtMTIzNi0xMjM1LTItMworYWx3YXlzIOy+mSAxMjQtMTIzNi0xMjM1LTItMjM2CithbHdheXMg7L6aIDEyNC0xMjM2LTEyMzUtMi0yNTYKK2Fsd2F5cyDsvpsgMTI0LTEyMzYtMTIzNS0yLTM1NgorYWx3YXlzIOy+nCAxMjQtMTIzNi0xMjM1LTI2CithbHdheXMg7L6dIDEyNC0xMjM2LTEyMzUtMTIKK2Fsd2F5cyDsvp4gMTI0LTEyMzYtMTIzNS0xMi0zCithbHdheXMg7L6fIDEyNC0xMjM2LTEyMzUtMworYWx3YXlzIOy+oCAxMjQtMTIzNi0xMjM1LTMtMworYWx3YXlzIOy+oSAxMjQtMTIzNi0xMjM1LTIzNTYKK2Fsd2F5cyDsvqIgMTI0LTEyMzYtMTIzNS0xMworYWx3YXlzIOy+oyAxMjQtMTIzNi0xMjM1LTIzCithbHdheXMg7L6kIDEyNC0xMjM2LTEyMzUtMjM1CithbHdheXMg7L6lIDEyNC0xMjM2LTEyMzUtMjM2CithbHdheXMg7L6mIDEyNC0xMjM2LTEyMzUtMjU2CithbHdheXMg7L6nIDEyNC0xMjM2LTEyMzUtMzU2CithbHdheXMg7L6oIDEyNC0xMzQ1NgorYWx3YXlzIOy+qSAxMjQtMTM0NTYtMQorYWx3YXlzIOy+qiAxMjQtMTM0NTYtMS0xCithbHdheXMg7L6rIDEyNC0xMzQ1Ni0xLTMKK2Fsd2F5cyDsvqwgMTI0LTEzNDU2LTI1CithbHdheXMg7L6tIDEyNC0xMzQ1Ni0yNS0xMworYWx3YXlzIOy+riAxMjQtMTM0NTYtMjUtMzU2CithbHdheXMg7L6vIDEyNC0xMzQ1Ni0zNQorYWx3YXlzIOy+sCAxMjQtMTM0NTYtMgorYWx3YXlzIOy+sSAxMjQtMTM0NTYtMi0xCithbHdheXMg7L6yIDEyNC0xMzQ1Ni0yLTI2CithbHdheXMg7L6zIDEyNC0xMzQ1Ni0yLTEyCithbHdheXMg7L60IDEyNC0xMzQ1Ni0yLTMKK2Fsd2F5cyDsvrUgMTI0LTEzNDU2LTItMjM2CithbHdheXMg7L62IDEyNC0xMzQ1Ni0yLTI1NgorYWx3YXlzIOy+tyAxMjQtMTM0NTYtMi0zNTYKK2Fsd2F5cyDsvrggMTI0LTEzNDU2LTI2CithbHdheXMg7L65IDEyNC0xMzQ1Ni0xMgorYWx3YXlzIOy+uiAxMjQtMTM0NTYtMTItMworYWx3YXlzIOy+uyAxMjQtMTM0NTYtMworYWx3YXlzIOy+vCAxMjQtMTM0NTYtMy0zCithbHdheXMg7L69IDEyNC0xMzQ1Ni0yMzU2CithbHdheXMg7L6+IDEyNC0xMzQ1Ni0xMworYWx3YXlzIOy+vyAxMjQtMTM0NTYtMjMKK2Fsd2F5cyDsv4AgMTI0LTEzNDU2LTIzNQorYWx3YXlzIOy/gSAxMjQtMTM0NTYtMjM2CithbHdheXMg7L+CIDEyNC0xMzQ1Ni0yNTYKK2Fsd2F5cyDsv4MgMTI0LTEzNDU2LTM1NgorYWx3YXlzIOy/hCAxMjQtMzQ2CithbHdheXMg7L+FIDEyNC0zNDYtMQorYWx3YXlzIOy/hiAxMjQtMzQ2LTEtMQorYWx3YXlzIOy/hyAxMjQtMzQ2LTEtMworYWx3YXlzIOy/iCAxMjQtMzQ2LTI1CithbHdheXMg7L+JIDEyNC0zNDYtMjUtMTMKK2Fsd2F5cyDsv4ogMTI0LTM0Ni0yNS0zNTYKK2Fsd2F5cyDsv4sgMTI0LTM0Ni0zNQorYWx3YXlzIOy/jCAxMjQtMzQ2LTIKK2Fsd2F5cyDsv40gMTI0LTM0Ni0yLTEKK2Fsd2F5cyDsv44gMTI0LTM0Ni0yLTI2CithbHdheXMg7L+PIDEyNC0zNDYtMi0xMgorYWx3YXlzIOy/kCAxMjQtMzQ2LTItMworYWx3YXlzIOy/kSAxMjQtMzQ2LTItMjM2CithbHdheXMg7L+SIDEyNC0zNDYtMi0yNTYKK2Fsd2F5cyDsv5MgMTI0LTM0Ni0yLTM1NgorYWx3YXlzIOy/lCAxMjQtMzQ2LTI2CithbHdheXMg7L+VIDEyNC0zNDYtMTIKK2Fsd2F5cyDsv5YgMTI0LTM0Ni0xMi0zCithbHdheXMg7L+XIDEyNC0zNDYtMworYWx3YXlzIOy/mCAxMjQtMzQ2LTMtMworYWx3YXlzIOy/mSAxMjQtMzQ2LTIzNTYKK2Fsd2F5cyDsv5ogMTI0LTM0Ni0xMworYWx3YXlzIOy/myAxMjQtMzQ2LTIzCithbHdheXMg7L+cIDEyNC0zNDYtMjM1CithbHdheXMg7L+dIDEyNC0zNDYtMjM2CithbHdheXMg7L+eIDEyNC0zNDYtMjU2CithbHdheXMg7L+fIDEyNC0zNDYtMzU2CithbHdheXMg7L+gIDEyNC0xMzQKK2Fsd2F5cyDsv6EgMTI0LTEzNC0xCithbHdheXMg7L+iIDEyNC0xMzQtMS0xCithbHdheXMg7L+jIDEyNC0xMzQtMS0zCithbHdheXMg7L+kIDEyNC0xMzQtMjUKK2Fsd2F5cyDsv6UgMTI0LTEzNC0yNS0xMworYWx3YXlzIOy/piAxMjQtMTM0LTI1LTM1NgorYWx3YXlzIOy/pyAxMjQtMTM0LTM1CithbHdheXMg7L+oIDEyNC0xMzQtMgorYWx3YXlzIOy/qSAxMjQtMTM0LTItMQorYWx3YXlzIOy/qiAxMjQtMTM0LTItMjYKK2Fsd2F5cyDsv6sgMTI0LTEzNC0yLTEyCithbHdheXMg7L+sIDEyNC0xMzQtMi0zCithbHdheXMg7L+tIDEyNC0xMzQtMi0yMzYKK2Fsd2F5cyDsv64gMTI0LTEzNC0yLTI1NgorYWx3YXlzIOy/ryAxMjQtMTM0LTItMzU2CithbHdheXMg7L+wIDEyNC0xMzQtMjYKK2Fsd2F5cyDsv7EgMTI0LTEzNC0xMgorYWx3YXlzIOy/siAxMjQtMTM0LTEyLTMKK2Fsd2F5cyDsv7MgMTI0LTEzNC0zCithbHdheXMg7L+0IDEyNC0xMzQtMy0zCithbHdheXMg7L+1IDEyNC0xMzQtMjM1NgorYWx3YXlzIOy/tiAxMjQtMTM0LTEzCithbHdheXMg7L+3IDEyNC0xMzQtMjMKK2Fsd2F5cyDsv7ggMTI0LTEzNC0yMzUKK2Fsd2F5cyDsv7kgMTI0LTEzNC0yMzYKK2Fsd2F5cyDsv7ogMTI0LTEzNC0yNTYKK2Fsd2F5cyDsv7sgMTI0LTEzNC0zNTYKK2Fsd2F5cyDsv7wgMTI0LTEyMzQKK2Fsd2F5cyDsv70gMTI0LTEyMzQtMQorYWx3YXlzIOy/viAxMjQtMTIzNC0xLTEKK2Fsd2F5cyDsv78gMTI0LTEyMzQtMS0zCithbHdheXMg7YCAIDEyNC0xMjM0LTI1CithbHdheXMg7YCBIDEyNC0xMjM0LTI1LTEzCithbHdheXMg7YCCIDEyNC0xMjM0LTI1LTM1NgorYWx3YXlzIO2AgyAxMjQtMTIzNC0zNQorYWx3YXlzIO2AhCAxMjQtMTIzNC0yCithbHdheXMg7YCFIDEyNC0xMjM0LTItMQorYWx3YXlzIO2AhiAxMjQtMTIzNC0yLTI2CithbHdheXMg7YCHIDEyNC0xMjM0LTItMTIKK2Fsd2F5cyDtgIggMTI0LTEyMzQtMi0zCithbHdheXMg7YCJIDEyNC0xMjM0LTItMjM2CithbHdheXMg7YCKIDEyNC0xMjM0LTItMjU2CithbHdheXMg7YCLIDEyNC0xMjM0LTItMzU2CithbHdheXMg7YCMIDEyNC0xMjM0LTI2CithbHdheXMg7YCNIDEyNC0xMjM0LTEyCithbHdheXMg7YCOIDEyNC0xMjM0LTEyLTMKK2Fsd2F5cyDtgI8gMTI0LTEyMzQtMworYWx3YXlzIO2AkCAxMjQtMTIzNC0zLTMKK2Fsd2F5cyDtgJEgMTI0LTEyMzQtMjM1NgorYWx3YXlzIO2AkiAxMjQtMTIzNC0xMworYWx3YXlzIO2AkyAxMjQtMTIzNC0yMworYWx3YXlzIO2AlCAxMjQtMTIzNC0yMzUKK2Fsd2F5cyDtgJUgMTI0LTEyMzQtMjM2CithbHdheXMg7YCWIDEyNC0xMjM0LTI1NgorYWx3YXlzIO2AlyAxMjQtMTIzNC0zNTYKK2Fsd2F5cyDtgJggMTI0LTEyMzQtMTIzNQorYWx3YXlzIO2AmSAxMjQtMTIzNC0xMjM1LTEKK2Fsd2F5cyDtgJogMTI0LTEyMzQtMTIzNS0xLTEKK2Fsd2F5cyDtgJsgMTI0LTEyMzQtMTIzNS0xLTMKK2Fsd2F5cyDtgJwgMTI0LTEyMzQtMTIzNS0yNQorYWx3YXlzIO2AnSAxMjQtMTIzNC0xMjM1LTI1LTEzCithbHdheXMg7YCeIDEyNC0xMjM0LTEyMzUtMjUtMzU2CithbHdheXMg7YCfIDEyNC0xMjM0LTEyMzUtMzUKK2Fsd2F5cyDtgKAgMTI0LTEyMzQtMTIzNS0yCithbHdheXMg7YChIDEyNC0xMjM0LTEyMzUtMi0xCithbHdheXMg7YCiIDEyNC0xMjM0LTEyMzUtMi0yNgorYWx3YXlzIO2AoyAxMjQtMTIzNC0xMjM1LTItMTIKK2Fsd2F5cyDtgKQgMTI0LTEyMzQtMTIzNS0yLTMKK2Fsd2F5cyDtgKUgMTI0LTEyMzQtMTIzNS0yLTIzNgorYWx3YXlzIO2ApiAxMjQtMTIzNC0xMjM1LTItMjU2CithbHdheXMg7YCnIDEyNC0xMjM0LTEyMzUtMi0zNTYKK2Fsd2F5cyDtgKggMTI0LTEyMzQtMTIzNS0yNgorYWx3YXlzIO2AqSAxMjQtMTIzNC0xMjM1LTEyCithbHdheXMg7YCqIDEyNC0xMjM0LTEyMzUtMTItMworYWx3YXlzIO2AqyAxMjQtMTIzNC0xMjM1LTMKK2Fsd2F5cyDtgKwgMTI0LTEyMzQtMTIzNS0zLTMKK2Fsd2F5cyDtgK0gMTI0LTEyMzQtMTIzNS0yMzU2CithbHdheXMg7YCuIDEyNC0xMjM0LTEyMzUtMTMKK2Fsd2F5cyDtgK8gMTI0LTEyMzQtMTIzNS0yMworYWx3YXlzIO2AsCAxMjQtMTIzNC0xMjM1LTIzNQorYWx3YXlzIO2AsSAxMjQtMTIzNC0xMjM1LTIzNgorYWx3YXlzIO2AsiAxMjQtMTIzNC0xMjM1LTI1NgorYWx3YXlzIO2AsyAxMjQtMTIzNC0xMjM1LTM1NgorYWx3YXlzIO2AtCAxMjQtMTM0LTEyMzUKK2Fsd2F5cyDtgLUgMTI0LTEzNC0xMjM1LTEKK2Fsd2F5cyDtgLYgMTI0LTEzNC0xMjM1LTEtMQorYWx3YXlzIO2AtyAxMjQtMTM0LTEyMzUtMS0zCithbHdheXMg7YC4IDEyNC0xMzQtMTIzNS0yNQorYWx3YXlzIO2AuSAxMjQtMTM0LTEyMzUtMjUtMTMKK2Fsd2F5cyDtgLogMTI0LTEzNC0xMjM1LTI1LTM1NgorYWx3YXlzIO2AuyAxMjQtMTM0LTEyMzUtMzUKK2Fsd2F5cyDtgLwgMTI0LTEzNC0xMjM1LTIKK2Fsd2F5cyDtgL0gMTI0LTEzNC0xMjM1LTItMQorYWx3YXlzIO2AviAxMjQtMTM0LTEyMzUtMi0yNgorYWx3YXlzIO2AvyAxMjQtMTM0LTEyMzUtMi0xMgorYWx3YXlzIO2BgCAxMjQtMTM0LTEyMzUtMi0zCithbHdheXMg7YGBIDEyNC0xMzQtMTIzNS0yLTIzNgorYWx3YXlzIO2BgiAxMjQtMTM0LTEyMzUtMi0yNTYKK2Fsd2F5cyDtgYMgMTI0LTEzNC0xMjM1LTItMzU2CithbHdheXMg7YGEIDEyNC0xMzQtMTIzNS0yNgorYWx3YXlzIO2BhSAxMjQtMTM0LTEyMzUtMTIKK2Fsd2F5cyDtgYYgMTI0LTEzNC0xMjM1LTEyLTMKK2Fsd2F5cyDtgYcgMTI0LTEzNC0xMjM1LTMKK2Fsd2F5cyDtgYggMTI0LTEzNC0xMjM1LTMtMworYWx3YXlzIO2BiSAxMjQtMTM0LTEyMzUtMjM1NgorYWx3YXlzIO2BiiAxMjQtMTM0LTEyMzUtMTMKK2Fsd2F5cyDtgYsgMTI0LTEzNC0xMjM1LTIzCithbHdheXMg7YGMIDEyNC0xMzQtMTIzNS0yMzUKK2Fsd2F5cyDtgY0gMTI0LTEzNC0xMjM1LTIzNgorYWx3YXlzIO2BjiAxMjQtMTM0LTEyMzUtMjU2CithbHdheXMg7YGPIDEyNC0xMzQtMTIzNS0zNTYKK2Fsd2F5cyDtgZAgMTI0LTE0NgorYWx3YXlzIO2BkSAxMjQtMTQ2LTEKK2Fsd2F5cyDtgZIgMTI0LTE0Ni0xLTEKK2Fsd2F5cyDtgZMgMTI0LTE0Ni0xLTMKK2Fsd2F5cyDtgZQgMTI0LTE0Ni0yNQorYWx3YXlzIO2BlSAxMjQtMTQ2LTI1LTEzCithbHdheXMg7YGWIDEyNC0xNDYtMjUtMzU2CithbHdheXMg7YGXIDEyNC0xNDYtMzUKK2Fsd2F5cyDtgZggMTI0LTE0Ni0yCithbHdheXMg7YGZIDEyNC0xNDYtMi0xCithbHdheXMg7YGaIDEyNC0xNDYtMi0yNgorYWx3YXlzIO2BmyAxMjQtMTQ2LTItMTIKK2Fsd2F5cyDtgZwgMTI0LTE0Ni0yLTMKK2Fsd2F5cyDtgZ0gMTI0LTE0Ni0yLTIzNgorYWx3YXlzIO2BniAxMjQtMTQ2LTItMjU2CithbHdheXMg7YGfIDEyNC0xNDYtMi0zNTYKK2Fsd2F5cyDtgaAgMTI0LTE0Ni0yNgorYWx3YXlzIO2BoSAxMjQtMTQ2LTEyCithbHdheXMg7YGiIDEyNC0xNDYtMTItMworYWx3YXlzIO2BoyAxMjQtMTQ2LTMKK2Fsd2F5cyDtgaQgMTI0LTE0Ni0zLTMKK2Fsd2F5cyDtgaUgMTI0LTE0Ni0yMzU2CithbHdheXMg7YGmIDEyNC0xNDYtMTMKK2Fsd2F5cyDtgacgMTI0LTE0Ni0yMworYWx3YXlzIO2BqCAxMjQtMTQ2LTIzNQorYWx3YXlzIO2BqSAxMjQtMTQ2LTIzNgorYWx3YXlzIO2BqiAxMjQtMTQ2LTI1NgorYWx3YXlzIO2BqyAxMjQtMTQ2LTM1NgorYWx3YXlzIO2BrCAxMjQtMjQ2CithbHdheXMg7YGtIDEyNC0yNDYtMQorYWx3YXlzIO2BriAxMjQtMjQ2LTEtMQorYWx3YXlzIO2BryAxMjQtMjQ2LTEtMworYWx3YXlzIO2BsCAxMjQtMjQ2LTI1CithbHdheXMg7YGxIDEyNC0yNDYtMjUtMTMKK2Fsd2F5cyDtgbIgMTI0LTI0Ni0yNS0zNTYKK2Fsd2F5cyDtgbMgMTI0LTI0Ni0zNQorYWx3YXlzIO2BtCAxMjQtMjQ2LTIKK2Fsd2F5cyDtgbUgMTI0LTI0Ni0yLTEKK2Fsd2F5cyDtgbYgMTI0LTI0Ni0yLTI2CithbHdheXMg7YG3IDEyNC0yNDYtMi0xMgorYWx3YXlzIO2BuCAxMjQtMjQ2LTItMworYWx3YXlzIO2BuSAxMjQtMjQ2LTItMjM2CithbHdheXMg7YG6IDEyNC0yNDYtMi0yNTYKK2Fsd2F5cyDtgbsgMTI0LTI0Ni0yLTM1NgorYWx3YXlzIO2BvCAxMjQtMjQ2LTI2CithbHdheXMg7YG9IDEyNC0yNDYtMTIKK2Fsd2F5cyDtgb4gMTI0LTI0Ni0xMi0zCithbHdheXMg7YG/IDEyNC0yNDYtMworYWx3YXlzIO2CgCAxMjQtMjQ2LTMtMworYWx3YXlzIO2CgSAxMjQtMjQ2LTIzNTYKK2Fsd2F5cyDtgoIgMTI0LTI0Ni0xMworYWx3YXlzIO2CgyAxMjQtMjQ2LTIzCithbHdheXMg7YKEIDEyNC0yNDYtMjM1CithbHdheXMg7YKFIDEyNC0yNDYtMjM2CithbHdheXMg7YKGIDEyNC0yNDYtMjU2CithbHdheXMg7YKHIDEyNC0yNDYtMzU2CithbHdheXMg7YKIIDEyNC0yNDU2CithbHdheXMg7YKJIDEyNC0yNDU2LTEKK2Fsd2F5cyDtgoogMTI0LTI0NTYtMS0xCithbHdheXMg7YKLIDEyNC0yNDU2LTEtMworYWx3YXlzIO2CjCAxMjQtMjQ1Ni0yNQorYWx3YXlzIO2CjSAxMjQtMjQ1Ni0yNS0xMworYWx3YXlzIO2CjiAxMjQtMjQ1Ni0yNS0zNTYKK2Fsd2F5cyDtgo8gMTI0LTI0NTYtMzUKK2Fsd2F5cyDtgpAgMTI0LTI0NTYtMgorYWx3YXlzIO2CkSAxMjQtMjQ1Ni0yLTEKK2Fsd2F5cyDtgpIgMTI0LTI0NTYtMi0yNgorYWx3YXlzIO2CkyAxMjQtMjQ1Ni0yLTEyCithbHdheXMg7YKUIDEyNC0yNDU2LTItMworYWx3YXlzIO2ClSAxMjQtMjQ1Ni0yLTIzNgorYWx3YXlzIO2CliAxMjQtMjQ1Ni0yLTI1NgorYWx3YXlzIO2ClyAxMjQtMjQ1Ni0yLTM1NgorYWx3YXlzIO2CmCAxMjQtMjQ1Ni0yNgorYWx3YXlzIO2CmSAxMjQtMjQ1Ni0xMgorYWx3YXlzIO2CmiAxMjQtMjQ1Ni0xMi0zCithbHdheXMg7YKbIDEyNC0yNDU2LTMKK2Fsd2F5cyDtgpwgMTI0LTI0NTYtMy0zCithbHdheXMg7YKdIDEyNC0yNDU2LTIzNTYKK2Fsd2F5cyDtgp4gMTI0LTI0NTYtMTMKK2Fsd2F5cyDtgp8gMTI0LTI0NTYtMjMKK2Fsd2F5cyDtgqAgMTI0LTI0NTYtMjM1CithbHdheXMg7YKhIDEyNC0yNDU2LTIzNgorYWx3YXlzIO2CoiAxMjQtMjQ1Ni0yNTYKK2Fsd2F5cyDtgqMgMTI0LTI0NTYtMzU2CithbHdheXMg7YKkIDEyNC0xMzUKK2Fsd2F5cyDtgqUgMTI0LTEzNS0xCithbHdheXMg7YKmIDEyNC0xMzUtMS0xCithbHdheXMg7YKnIDEyNC0xMzUtMS0zCithbHdheXMg7YKoIDEyNC0xMzUtMjUKK2Fsd2F5cyDtgqkgMTI0LTEzNS0yNS0xMworYWx3YXlzIO2CqiAxMjQtMTM1LTI1LTM1NgorYWx3YXlzIO2CqyAxMjQtMTM1LTM1CithbHdheXMg7YKsIDEyNC0xMzUtMgorYWx3YXlzIO2CrSAxMjQtMTM1LTItMQorYWx3YXlzIO2CriAxMjQtMTM1LTItMjYKK2Fsd2F5cyDtgq8gMTI0LTEzNS0yLTEyCithbHdheXMg7YKwIDEyNC0xMzUtMi0zCithbHdheXMg7YKxIDEyNC0xMzUtMi0yMzYKK2Fsd2F5cyDtgrIgMTI0LTEzNS0yLTI1NgorYWx3YXlzIO2CsyAxMjQtMTM1LTItMzU2CithbHdheXMg7YK0IDEyNC0xMzUtMjYKK2Fsd2F5cyDtgrUgMTI0LTEzNS0xMgorYWx3YXlzIO2CtiAxMjQtMTM1LTEyLTMKK2Fsd2F5cyDtgrcgMTI0LTEzNS0zCithbHdheXMg7YK4IDEyNC0xMzUtMy0zCithbHdheXMg7YK5IDEyNC0xMzUtMjM1NgorYWx3YXlzIO2CuiAxMjQtMTM1LTEzCithbHdheXMg7YK7IDEyNC0xMzUtMjMKK2Fsd2F5cyDtgrwgMTI0LTEzNS0yMzUKK2Fsd2F5cyDtgr0gMTI0LTEzNS0yMzYKK2Fsd2F5cyDtgr4gMTI0LTEzNS0yNTYKK2Fsd2F5cyDtgr8gMTI0LTEzNS0zNTYKK2Fsd2F5cyDtg4AgMTI1LTEyNgorYWx3YXlzIO2DgSAxMjUtMTI2LTEKK2Fsd2F5cyDtg4IgMTI1LTEyNi0xLTEKK2Fsd2F5cyDtg4MgMTI1LTEyNi0xLTMKK2Fsd2F5cyDtg4QgMTI1LTEyNi0yNQorYWx3YXlzIO2DhSAxMjUtMTI2LTI1LTEzCithbHdheXMg7YOGIDEyNS0xMjYtMjUtMzU2CithbHdheXMg7YOHIDEyNS0xMjYtMzUKK2Fsd2F5cyDtg4ggMTI1LTEyNi0yCithbHdheXMg7YOJIDEyNS0xMjYtMi0xCithbHdheXMg7YOKIDEyNS0xMjYtMi0yNgorYWx3YXlzIO2DiyAxMjUtMTI2LTItMTIKK2Fsd2F5cyDtg4wgMTI1LTEyNi0yLTMKK2Fsd2F5cyDtg40gMTI1LTEyNi0yLTIzNgorYWx3YXlzIO2DjiAxMjUtMTI2LTItMjU2CithbHdheXMg7YOPIDEyNS0xMjYtMi0zNTYKK2Fsd2F5cyDtg5AgMTI1LTEyNi0yNgorYWx3YXlzIO2DkSAxMjUtMTI2LTEyCithbHdheXMg7YOSIDEyNS0xMjYtMTItMworYWx3YXlzIO2DkyAxMjUtMTI2LTMKK2Fsd2F5cyDtg5QgMTI1LTEyNi0zLTMKK2Fsd2F5cyDtg5UgMTI1LTEyNi0yMzU2CithbHdheXMg7YOWIDEyNS0xMjYtMTMKK2Fsd2F5cyDtg5cgMTI1LTEyNi0yMworYWx3YXlzIO2DmCAxMjUtMTI2LTIzNQorYWx3YXlzIO2DmSAxMjUtMTI2LTIzNgorYWx3YXlzIO2DmiAxMjUtMTI2LTI1NgorYWx3YXlzIO2DmyAxMjUtMTI2LTM1NgorYWx3YXlzIO2DnCAxMjUtMTIzNQorYWx3YXlzIO2DnSAxMjUtMTIzNS0xCithbHdheXMg7YOeIDEyNS0xMjM1LTEtMQorYWx3YXlzIO2DnyAxMjUtMTIzNS0xLTMKK2Fsd2F5cyDtg6AgMTI1LTEyMzUtMjUKK2Fsd2F5cyDtg6EgMTI1LTEyMzUtMjUtMTMKK2Fsd2F5cyDtg6IgMTI1LTEyMzUtMjUtMzU2CithbHdheXMg7YOjIDEyNS0xMjM1LTM1CithbHdheXMg7YOkIDEyNS0xMjM1LTIKK2Fsd2F5cyDtg6UgMTI1LTEyMzUtMi0xCithbHdheXMg7YOmIDEyNS0xMjM1LTItMjYKK2Fsd2F5cyDtg6cgMTI1LTEyMzUtMi0xMgorYWx3YXlzIO2DqCAxMjUtMTIzNS0yLTMKK2Fsd2F5cyDtg6kgMTI1LTEyMzUtMi0yMzYKK2Fsd2F5cyDtg6ogMTI1LTEyMzUtMi0yNTYKK2Fsd2F5cyDtg6sgMTI1LTEyMzUtMi0zNTYKK2Fsd2F5cyDtg6wgMTI1LTEyMzUtMjYKK2Fsd2F5cyDtg60gMTI1LTEyMzUtMTIKK2Fsd2F5cyDtg64gMTI1LTEyMzUtMTItMworYWx3YXlzIO2DryAxMjUtMTIzNS0zCithbHdheXMg7YOwIDEyNS0xMjM1LTMtMworYWx3YXlzIO2DsSAxMjUtMTIzNS0yMzU2CithbHdheXMg7YOyIDEyNS0xMjM1LTEzCithbHdheXMg7YOzIDEyNS0xMjM1LTIzCithbHdheXMg7YO0IDEyNS0xMjM1LTIzNQorYWx3YXlzIO2DtSAxMjUtMTIzNS0yMzYKK2Fsd2F5cyDtg7YgMTI1LTEyMzUtMjU2CithbHdheXMg7YO3IDEyNS0xMjM1LTM1NgorYWx3YXlzIO2DuCAxMjUtMzQ1CithbHdheXMg7YO5IDEyNS0zNDUtMQorYWx3YXlzIO2DuiAxMjUtMzQ1LTEtMQorYWx3YXlzIO2DuyAxMjUtMzQ1LTEtMworYWx3YXlzIO2DvCAxMjUtMzQ1LTI1CithbHdheXMg7YO9IDEyNS0zNDUtMjUtMTMKK2Fsd2F5cyDtg74gMTI1LTM0NS0yNS0zNTYKK2Fsd2F5cyDtg78gMTI1LTM0NS0zNQorYWx3YXlzIO2EgCAxMjUtMzQ1LTIKK2Fsd2F5cyDthIEgMTI1LTM0NS0yLTEKK2Fsd2F5cyDthIIgMTI1LTM0NS0yLTI2CithbHdheXMg7YSDIDEyNS0zNDUtMi0xMgorYWx3YXlzIO2EhCAxMjUtMzQ1LTItMworYWx3YXlzIO2EhSAxMjUtMzQ1LTItMjM2CithbHdheXMg7YSGIDEyNS0zNDUtMi0yNTYKK2Fsd2F5cyDthIcgMTI1LTM0NS0yLTM1NgorYWx3YXlzIO2EiCAxMjUtMzQ1LTI2CithbHdheXMg7YSJIDEyNS0zNDUtMTIKK2Fsd2F5cyDthIogMTI1LTM0NS0xMi0zCithbHdheXMg7YSLIDEyNS0zNDUtMworYWx3YXlzIO2EjCAxMjUtMzQ1LTMtMworYWx3YXlzIO2EjSAxMjUtMzQ1LTIzNTYKK2Fsd2F5cyDthI4gMTI1LTM0NS0xMworYWx3YXlzIO2EjyAxMjUtMzQ1LTIzCithbHdheXMg7YSQIDEyNS0zNDUtMjM1CithbHdheXMg7YSRIDEyNS0zNDUtMjM2CithbHdheXMg7YSSIDEyNS0zNDUtMjU2CithbHdheXMg7YSTIDEyNS0zNDUtMzU2CithbHdheXMg7YSUIDEyNS0zNDUtMTIzNQorYWx3YXlzIO2ElSAxMjUtMzQ1LTEyMzUtMQorYWx3YXlzIO2EliAxMjUtMzQ1LTEyMzUtMS0xCithbHdheXMg7YSXIDEyNS0zNDUtMTIzNS0xLTMKK2Fsd2F5cyDthJggMTI1LTM0NS0xMjM1LTI1CithbHdheXMg7YSZIDEyNS0zNDUtMTIzNS0yNS0xMworYWx3YXlzIO2EmiAxMjUtMzQ1LTEyMzUtMjUtMzU2CithbHdheXMg7YSbIDEyNS0zNDUtMTIzNS0zNQorYWx3YXlzIO2EnCAxMjUtMzQ1LTEyMzUtMgorYWx3YXlzIO2EnSAxMjUtMzQ1LTEyMzUtMi0xCithbHdheXMg7YSeIDEyNS0zNDUtMTIzNS0yLTI2CithbHdheXMg7YSfIDEyNS0zNDUtMTIzNS0yLTEyCithbHdheXMg7YSgIDEyNS0zNDUtMTIzNS0yLTMKK2Fsd2F5cyDthKEgMTI1LTM0NS0xMjM1LTItMjM2CithbHdheXMg7YSiIDEyNS0zNDUtMTIzNS0yLTI1NgorYWx3YXlzIO2EoyAxMjUtMzQ1LTEyMzUtMi0zNTYKK2Fsd2F5cyDthKQgMTI1LTM0NS0xMjM1LTI2CithbHdheXMg7YSlIDEyNS0zNDUtMTIzNS0xMgorYWx3YXlzIO2EpiAxMjUtMzQ1LTEyMzUtMTItMworYWx3YXlzIO2EpyAxMjUtMzQ1LTEyMzUtMworYWx3YXlzIO2EqCAxMjUtMzQ1LTEyMzUtMy0zCithbHdheXMg7YSpIDEyNS0zNDUtMTIzNS0yMzU2CithbHdheXMg7YSqIDEyNS0zNDUtMTIzNS0xMworYWx3YXlzIO2EqyAxMjUtMzQ1LTEyMzUtMjMKK2Fsd2F5cyDthKwgMTI1LTM0NS0xMjM1LTIzNQorYWx3YXlzIO2ErSAxMjUtMzQ1LTEyMzUtMjM2CithbHdheXMg7YSuIDEyNS0zNDUtMTIzNS0yNTYKK2Fsd2F5cyDthK8gMTI1LTM0NS0xMjM1LTM1NgorYWx3YXlzIO2EsCAxMjUtMjM0CithbHdheXMg7YSxIDEyNS0yMzQtMQorYWx3YXlzIO2EsiAxMjUtMjM0LTEtMQorYWx3YXlzIO2EsyAxMjUtMjM0LTEtMworYWx3YXlzIO2EtCAxMjUtMjM0LTI1CithbHdheXMg7YS1IDEyNS0yMzQtMjUtMTMKK2Fsd2F5cyDthLYgMTI1LTIzNC0yNS0zNTYKK2Fsd2F5cyDthLcgMTI1LTIzNC0zNQorYWx3YXlzIO2EuCAxMjUtMjM0LTIKK2Fsd2F5cyDthLkgMTI1LTIzNC0yLTEKK2Fsd2F5cyDthLogMTI1LTIzNC0yLTI2CithbHdheXMg7YS7IDEyNS0yMzQtMi0xMgorYWx3YXlzIO2EvCAxMjUtMjM0LTItMworYWx3YXlzIO2EvSAxMjUtMjM0LTItMjM2CithbHdheXMg7YS+IDEyNS0yMzQtMi0yNTYKK2Fsd2F5cyDthL8gMTI1LTIzNC0yLTM1NgorYWx3YXlzIO2FgCAxMjUtMjM0LTI2CithbHdheXMg7YWBIDEyNS0yMzQtMTIKK2Fsd2F5cyDthYIgMTI1LTIzNC0xMi0zCithbHdheXMg7YWDIDEyNS0yMzQtMworYWx3YXlzIO2FhCAxMjUtMjM0LTMtMworYWx3YXlzIO2FhSAxMjUtMjM0LTIzNTYKK2Fsd2F5cyDthYYgMTI1LTIzNC0xMworYWx3YXlzIO2FhyAxMjUtMjM0LTIzCithbHdheXMg7YWIIDEyNS0yMzQtMjM1CithbHdheXMg7YWJIDEyNS0yMzQtMjM2CithbHdheXMg7YWKIDEyNS0yMzQtMjU2CithbHdheXMg7YWLIDEyNS0yMzQtMzU2CithbHdheXMg7YWMIDEyNS0xMzQ1CithbHdheXMg7YWNIDEyNS0xMzQ1LTEKK2Fsd2F5cyDthY4gMTI1LTEzNDUtMS0xCithbHdheXMg7YWPIDEyNS0xMzQ1LTEtMworYWx3YXlzIO2FkCAxMjUtMTM0NS0yNQorYWx3YXlzIO2FkSAxMjUtMTM0NS0yNS0xMworYWx3YXlzIO2FkiAxMjUtMTM0NS0yNS0zNTYKK2Fsd2F5cyDthZMgMTI1LTEzNDUtMzUKK2Fsd2F5cyDthZQgMTI1LTEzNDUtMgorYWx3YXlzIO2FlSAxMjUtMTM0NS0yLTEKK2Fsd2F5cyDthZYgMTI1LTEzNDUtMi0yNgorYWx3YXlzIO2FlyAxMjUtMTM0NS0yLTEyCithbHdheXMg7YWYIDEyNS0xMzQ1LTItMworYWx3YXlzIO2FmSAxMjUtMTM0NS0yLTIzNgorYWx3YXlzIO2FmiAxMjUtMTM0NS0yLTI1NgorYWx3YXlzIO2FmyAxMjUtMTM0NS0yLTM1NgorYWx3YXlzIO2FnCAxMjUtMTM0NS0yNgorYWx3YXlzIO2FnSAxMjUtMTM0NS0xMgorYWx3YXlzIO2FniAxMjUtMTM0NS0xMi0zCithbHdheXMg7YWfIDEyNS0xMzQ1LTMKK2Fsd2F5cyDthaAgMTI1LTEzNDUtMy0zCithbHdheXMg7YWhIDEyNS0xMzQ1LTIzNTYKK2Fsd2F5cyDthaIgMTI1LTEzNDUtMTMKK2Fsd2F5cyDthaMgMTI1LTEzNDUtMjMKK2Fsd2F5cyDthaQgMTI1LTEzNDUtMjM1CithbHdheXMg7YWlIDEyNS0xMzQ1LTIzNgorYWx3YXlzIO2FpiAxMjUtMTM0NS0yNTYKK2Fsd2F5cyDthacgMTI1LTEzNDUtMzU2CithbHdheXMg7YWoIDEyNS0xNTYKK2Fsd2F5cyDthakgMTI1LTE1Ni0xCithbHdheXMg7YWqIDEyNS0xNTYtMS0xCithbHdheXMg7YWrIDEyNS0xNTYtMS0zCithbHdheXMg7YWsIDEyNS0xNTYtMjUKK2Fsd2F5cyDtha0gMTI1LTE1Ni0yNS0xMworYWx3YXlzIO2FriAxMjUtMTU2LTI1LTM1NgorYWx3YXlzIO2FryAxMjUtMTU2LTM1CithbHdheXMg7YWwIDEyNS0xNTYtMgorYWx3YXlzIO2FsSAxMjUtMTU2LTItMQorYWx3YXlzIO2FsiAxMjUtMTU2LTItMjYKK2Fsd2F5cyDthbMgMTI1LTE1Ni0yLTEyCithbHdheXMg7YW0IDEyNS0xNTYtMi0zCithbHdheXMg7YW1IDEyNS0xNTYtMi0yMzYKK2Fsd2F5cyDthbYgMTI1LTE1Ni0yLTI1NgorYWx3YXlzIO2FtyAxMjUtMTU2LTItMzU2CithbHdheXMg7YW4IDEyNS0xNTYtMjYKK2Fsd2F5cyDthbkgMTI1LTE1Ni0xMgorYWx3YXlzIO2FuiAxMjUtMTU2LTEyLTMKK2Fsd2F5cyDthbsgMTI1LTE1Ni0zCithbHdheXMg7YW8IDEyNS0xNTYtMy0zCithbHdheXMg7YW9IDEyNS0xNTYtMjM1NgorYWx3YXlzIO2FviAxMjUtMTU2LTEzCithbHdheXMg7YW/IDEyNS0xNTYtMjMKK2Fsd2F5cyDthoAgMTI1LTE1Ni0yMzUKK2Fsd2F5cyDthoEgMTI1LTE1Ni0yMzYKK2Fsd2F5cyDthoIgMTI1LTE1Ni0yNTYKK2Fsd2F5cyDthoMgMTI1LTE1Ni0zNTYKK2Fsd2F5cyDthoQgMTI1LTM0CithbHdheXMg7YaFIDEyNS0zNC0xCithbHdheXMg7YaGIDEyNS0zNC0xLTEKK2Fsd2F5cyDthocgMTI1LTM0LTEtMworYWx3YXlzIO2GiCAxMjUtMzQtMjUKK2Fsd2F5cyDthokgMTI1LTM0LTI1LTEzCithbHdheXMg7YaKIDEyNS0zNC0yNS0zNTYKK2Fsd2F5cyDthosgMTI1LTM0LTM1CithbHdheXMg7YaMIDEyNS0zNC0yCithbHdheXMg7YaNIDEyNS0zNC0yLTEKK2Fsd2F5cyDtho4gMTI1LTM0LTItMjYKK2Fsd2F5cyDtho8gMTI1LTM0LTItMTIKK2Fsd2F5cyDthpAgMTI1LTM0LTItMworYWx3YXlzIO2GkSAxMjUtMzQtMi0yMzYKK2Fsd2F5cyDthpIgMTI1LTM0LTItMjU2CithbHdheXMg7YaTIDEyNS0zNC0yLTM1NgorYWx3YXlzIO2GlCAxMjUtMzQtMjYKK2Fsd2F5cyDthpUgMTI1LTM0LTEyCithbHdheXMg7YaWIDEyNS0zNC0xMi0zCithbHdheXMg7YaXIDEyNS0zNC0zCithbHdheXMg7YaYIDEyNS0zNC0zLTMKK2Fsd2F5cyDthpkgMTI1LTM0LTIzNTYKK2Fsd2F5cyDthpogMTI1LTM0LTEzCithbHdheXMg7YabIDEyNS0zNC0yMworYWx3YXlzIO2GnCAxMjUtMzQtMjM1CithbHdheXMg7YadIDEyNS0zNC0yMzYKK2Fsd2F5cyDthp4gMTI1LTM0LTI1NgorYWx3YXlzIO2GnyAxMjUtMzQtMzU2CithbHdheXMg7YagIDEyNS0xMzYKK2Fsd2F5cyDthqEgMTI1LTEzNi0xCithbHdheXMg7YaiIDEyNS0xMzYtMS0xCithbHdheXMg7YajIDEyNS0xMzYtMS0zCithbHdheXMg7YakIDEyNS0xMzYtMjUKK2Fsd2F5cyDthqUgMTI1LTEzNi0yNS0xMworYWx3YXlzIO2GpiAxMjUtMTM2LTI1LTM1NgorYWx3YXlzIO2GpyAxMjUtMTM2LTM1CithbHdheXMg7YaoIDEyNS0xMzYtMgorYWx3YXlzIO2GqSAxMjUtMTM2LTItMQorYWx3YXlzIO2GqiAxMjUtMTM2LTItMjYKK2Fsd2F5cyDthqsgMTI1LTEzNi0yLTEyCithbHdheXMg7YasIDEyNS0xMzYtMi0zCithbHdheXMg7YatIDEyNS0xMzYtMi0yMzYKK2Fsd2F5cyDthq4gMTI1LTEzNi0yLTI1NgorYWx3YXlzIO2GryAxMjUtMTM2LTItMzU2CithbHdheXMg7YawIDEyNS0xMzYtMjYKK2Fsd2F5cyDthrEgMTI1LTEzNi0xMgorYWx3YXlzIO2GsiAxMjUtMTM2LTEyLTMKK2Fsd2F5cyDthrMgMTI1LTEzNi0zCithbHdheXMg7Ya0IDEyNS0xMzYtMy0zCithbHdheXMg7Ya1IDEyNS0xMzYtMjM1NgorYWx3YXlzIO2GtiAxMjUtMTM2LTEzCithbHdheXMg7Ya3IDEyNS0xMzYtMjMKK2Fsd2F5cyDthrggMTI1LTEzNi0yMzUKK2Fsd2F5cyDthrkgMTI1LTEzNi0yMzYKK2Fsd2F5cyDthrogMTI1LTEzNi0yNTYKK2Fsd2F5cyDthrsgMTI1LTEzNi0zNTYKK2Fsd2F5cyDthrwgMTI1LTEyMzYKK2Fsd2F5cyDthr0gMTI1LTEyMzYtMQorYWx3YXlzIO2GviAxMjUtMTIzNi0xLTEKK2Fsd2F5cyDthr8gMTI1LTEyMzYtMS0zCithbHdheXMg7YeAIDEyNS0xMjM2LTI1CithbHdheXMg7YeBIDEyNS0xMjM2LTI1LTEzCithbHdheXMg7YeCIDEyNS0xMjM2LTI1LTM1NgorYWx3YXlzIO2HgyAxMjUtMTIzNi0zNQorYWx3YXlzIO2HhCAxMjUtMTIzNi0yCithbHdheXMg7YeFIDEyNS0xMjM2LTItMQorYWx3YXlzIO2HhiAxMjUtMTIzNi0yLTI2CithbHdheXMg7YeHIDEyNS0xMjM2LTItMTIKK2Fsd2F5cyDth4ggMTI1LTEyMzYtMi0zCithbHdheXMg7YeJIDEyNS0xMjM2LTItMjM2CithbHdheXMg7YeKIDEyNS0xMjM2LTItMjU2CithbHdheXMg7YeLIDEyNS0xMjM2LTItMzU2CithbHdheXMg7YeMIDEyNS0xMjM2LTI2CithbHdheXMg7YeNIDEyNS0xMjM2LTEyCithbHdheXMg7YeOIDEyNS0xMjM2LTEyLTMKK2Fsd2F5cyDth48gMTI1LTEyMzYtMworYWx3YXlzIO2HkCAxMjUtMTIzNi0zLTMKK2Fsd2F5cyDth5EgMTI1LTEyMzYtMjM1NgorYWx3YXlzIO2HkiAxMjUtMTIzNi0xMworYWx3YXlzIO2HkyAxMjUtMTIzNi0yMworYWx3YXlzIO2HlCAxMjUtMTIzNi0yMzUKK2Fsd2F5cyDth5UgMTI1LTEyMzYtMjM2CithbHdheXMg7YeWIDEyNS0xMjM2LTI1NgorYWx3YXlzIO2HlyAxMjUtMTIzNi0zNTYKK2Fsd2F5cyDth5ggMTI1LTEyMzYtMTIzNQorYWx3YXlzIO2HmSAxMjUtMTIzNi0xMjM1LTEKK2Fsd2F5cyDth5ogMTI1LTEyMzYtMTIzNS0xLTEKK2Fsd2F5cyDth5sgMTI1LTEyMzYtMTIzNS0xLTMKK2Fsd2F5cyDth5wgMTI1LTEyMzYtMTIzNS0yNQorYWx3YXlzIO2HnSAxMjUtMTIzNi0xMjM1LTI1LTEzCithbHdheXMg7YeeIDEyNS0xMjM2LTEyMzUtMjUtMzU2CithbHdheXMg7YefIDEyNS0xMjM2LTEyMzUtMzUKK2Fsd2F5cyDth6AgMTI1LTEyMzYtMTIzNS0yCithbHdheXMg7YehIDEyNS0xMjM2LTEyMzUtMi0xCithbHdheXMg7YeiIDEyNS0xMjM2LTEyMzUtMi0yNgorYWx3YXlzIO2HoyAxMjUtMTIzNi0xMjM1LTItMTIKK2Fsd2F5cyDth6QgMTI1LTEyMzYtMTIzNS0yLTMKK2Fsd2F5cyDth6UgMTI1LTEyMzYtMTIzNS0yLTIzNgorYWx3YXlzIO2HpiAxMjUtMTIzNi0xMjM1LTItMjU2CithbHdheXMg7YenIDEyNS0xMjM2LTEyMzUtMi0zNTYKK2Fsd2F5cyDth6ggMTI1LTEyMzYtMTIzNS0yNgorYWx3YXlzIO2HqSAxMjUtMTIzNi0xMjM1LTEyCithbHdheXMg7YeqIDEyNS0xMjM2LTEyMzUtMTItMworYWx3YXlzIO2HqyAxMjUtMTIzNi0xMjM1LTMKK2Fsd2F5cyDth6wgMTI1LTEyMzYtMTIzNS0zLTMKK2Fsd2F5cyDth60gMTI1LTEyMzYtMTIzNS0yMzU2CithbHdheXMg7YeuIDEyNS0xMjM2LTEyMzUtMTMKK2Fsd2F5cyDth68gMTI1LTEyMzYtMTIzNS0yMworYWx3YXlzIO2HsCAxMjUtMTIzNi0xMjM1LTIzNQorYWx3YXlzIO2HsSAxMjUtMTIzNi0xMjM1LTIzNgorYWx3YXlzIO2HsiAxMjUtMTIzNi0xMjM1LTI1NgorYWx3YXlzIO2HsyAxMjUtMTIzNi0xMjM1LTM1NgorYWx3YXlzIO2HtCAxMjUtMTM0NTYKK2Fsd2F5cyDth7UgMTI1LTEzNDU2LTEKK2Fsd2F5cyDth7YgMTI1LTEzNDU2LTEtMQorYWx3YXlzIO2HtyAxMjUtMTM0NTYtMS0zCithbHdheXMg7Ye4IDEyNS0xMzQ1Ni0yNQorYWx3YXlzIO2HuSAxMjUtMTM0NTYtMjUtMTMKK2Fsd2F5cyDth7ogMTI1LTEzNDU2LTI1LTM1NgorYWx3YXlzIO2HuyAxMjUtMTM0NTYtMzUKK2Fsd2F5cyDth7wgMTI1LTEzNDU2LTIKK2Fsd2F5cyDth70gMTI1LTEzNDU2LTItMQorYWx3YXlzIO2HviAxMjUtMTM0NTYtMi0yNgorYWx3YXlzIO2HvyAxMjUtMTM0NTYtMi0xMgorYWx3YXlzIO2IgCAxMjUtMTM0NTYtMi0zCithbHdheXMg7YiBIDEyNS0xMzQ1Ni0yLTIzNgorYWx3YXlzIO2IgiAxMjUtMTM0NTYtMi0yNTYKK2Fsd2F5cyDtiIMgMTI1LTEzNDU2LTItMzU2CithbHdheXMg7YiEIDEyNS0xMzQ1Ni0yNgorYWx3YXlzIO2IhSAxMjUtMTM0NTYtMTIKK2Fsd2F5cyDtiIYgMTI1LTEzNDU2LTEyLTMKK2Fsd2F5cyDtiIcgMTI1LTEzNDU2LTMKK2Fsd2F5cyDtiIggMTI1LTEzNDU2LTMtMworYWx3YXlzIO2IiSAxMjUtMTM0NTYtMjM1NgorYWx3YXlzIO2IiiAxMjUtMTM0NTYtMTMKK2Fsd2F5cyDtiIsgMTI1LTEzNDU2LTIzCithbHdheXMg7YiMIDEyNS0xMzQ1Ni0yMzUKK2Fsd2F5cyDtiI0gMTI1LTEzNDU2LTIzNgorYWx3YXlzIO2IjiAxMjUtMTM0NTYtMjU2CithbHdheXMg7YiPIDEyNS0xMzQ1Ni0zNTYKK2Fsd2F5cyDtiJAgMTI1LTM0NgorYWx3YXlzIO2IkSAxMjUtMzQ2LTEKK2Fsd2F5cyDtiJIgMTI1LTM0Ni0xLTEKK2Fsd2F5cyDtiJMgMTI1LTM0Ni0xLTMKK2Fsd2F5cyDtiJQgMTI1LTM0Ni0yNQorYWx3YXlzIO2IlSAxMjUtMzQ2LTI1LTEzCithbHdheXMg7YiWIDEyNS0zNDYtMjUtMzU2CithbHdheXMg7YiXIDEyNS0zNDYtMzUKK2Fsd2F5cyDtiJggMTI1LTM0Ni0yCithbHdheXMg7YiZIDEyNS0zNDYtMi0xCithbHdheXMg7YiaIDEyNS0zNDYtMi0yNgorYWx3YXlzIO2ImyAxMjUtMzQ2LTItMTIKK2Fsd2F5cyDtiJwgMTI1LTM0Ni0yLTMKK2Fsd2F5cyDtiJ0gMTI1LTM0Ni0yLTIzNgorYWx3YXlzIO2IniAxMjUtMzQ2LTItMjU2CithbHdheXMg7YifIDEyNS0zNDYtMi0zNTYKK2Fsd2F5cyDtiKAgMTI1LTM0Ni0yNgorYWx3YXlzIO2IoSAxMjUtMzQ2LTEyCithbHdheXMg7YiiIDEyNS0zNDYtMTItMworYWx3YXlzIO2IoyAxMjUtMzQ2LTMKK2Fsd2F5cyDtiKQgMTI1LTM0Ni0zLTMKK2Fsd2F5cyDtiKUgMTI1LTM0Ni0yMzU2CithbHdheXMg7YimIDEyNS0zNDYtMTMKK2Fsd2F5cyDtiKcgMTI1LTM0Ni0yMworYWx3YXlzIO2IqCAxMjUtMzQ2LTIzNQorYWx3YXlzIO2IqSAxMjUtMzQ2LTIzNgorYWx3YXlzIO2IqiAxMjUtMzQ2LTI1NgorYWx3YXlzIO2IqyAxMjUtMzQ2LTM1NgorYWx3YXlzIO2IrCAxMjUtMTM0CithbHdheXMg7YitIDEyNS0xMzQtMQorYWx3YXlzIO2IriAxMjUtMTM0LTEtMQorYWx3YXlzIO2IryAxMjUtMTM0LTEtMworYWx3YXlzIO2IsCAxMjUtMTM0LTI1CithbHdheXMg7YixIDEyNS0xMzQtMjUtMTMKK2Fsd2F5cyDtiLIgMTI1LTEzNC0yNS0zNTYKK2Fsd2F5cyDtiLMgMTI1LTEzNC0zNQorYWx3YXlzIO2ItCAxMjUtMTM0LTIKK2Fsd2F5cyDtiLUgMTI1LTEzNC0yLTEKK2Fsd2F5cyDtiLYgMTI1LTEzNC0yLTI2CithbHdheXMg7Yi3IDEyNS0xMzQtMi0xMgorYWx3YXlzIO2IuCAxMjUtMTM0LTItMworYWx3YXlzIO2IuSAxMjUtMTM0LTItMjM2CithbHdheXMg7Yi6IDEyNS0xMzQtMi0yNTYKK2Fsd2F5cyDtiLsgMTI1LTEzNC0yLTM1NgorYWx3YXlzIO2IvCAxMjUtMTM0LTI2CithbHdheXMg7Yi9IDEyNS0xMzQtMTIKK2Fsd2F5cyDtiL4gMTI1LTEzNC0xMi0zCithbHdheXMg7Yi/IDEyNS0xMzQtMworYWx3YXlzIO2JgCAxMjUtMTM0LTMtMworYWx3YXlzIO2JgSAxMjUtMTM0LTIzNTYKK2Fsd2F5cyDtiYIgMTI1LTEzNC0xMworYWx3YXlzIO2JgyAxMjUtMTM0LTIzCithbHdheXMg7YmEIDEyNS0xMzQtMjM1CithbHdheXMg7YmFIDEyNS0xMzQtMjM2CithbHdheXMg7YmGIDEyNS0xMzQtMjU2CithbHdheXMg7YmHIDEyNS0xMzQtMzU2CithbHdheXMg7YmIIDEyNS0xMjM0CithbHdheXMg7YmJIDEyNS0xMjM0LTEKK2Fsd2F5cyDtiYogMTI1LTEyMzQtMS0xCithbHdheXMg7YmLIDEyNS0xMjM0LTEtMworYWx3YXlzIO2JjCAxMjUtMTIzNC0yNQorYWx3YXlzIO2JjSAxMjUtMTIzNC0yNS0xMworYWx3YXlzIO2JjiAxMjUtMTIzNC0yNS0zNTYKK2Fsd2F5cyDtiY8gMTI1LTEyMzQtMzUKK2Fsd2F5cyDtiZAgMTI1LTEyMzQtMgorYWx3YXlzIO2JkSAxMjUtMTIzNC0yLTEKK2Fsd2F5cyDtiZIgMTI1LTEyMzQtMi0yNgorYWx3YXlzIO2JkyAxMjUtMTIzNC0yLTEyCithbHdheXMg7YmUIDEyNS0xMjM0LTItMworYWx3YXlzIO2JlSAxMjUtMTIzNC0yLTIzNgorYWx3YXlzIO2JliAxMjUtMTIzNC0yLTI1NgorYWx3YXlzIO2JlyAxMjUtMTIzNC0yLTM1NgorYWx3YXlzIO2JmCAxMjUtMTIzNC0yNgorYWx3YXlzIO2JmSAxMjUtMTIzNC0xMgorYWx3YXlzIO2JmiAxMjUtMTIzNC0xMi0zCithbHdheXMg7YmbIDEyNS0xMjM0LTMKK2Fsd2F5cyDtiZwgMTI1LTEyMzQtMy0zCithbHdheXMg7YmdIDEyNS0xMjM0LTIzNTYKK2Fsd2F5cyDtiZ4gMTI1LTEyMzQtMTMKK2Fsd2F5cyDtiZ8gMTI1LTEyMzQtMjMKK2Fsd2F5cyDtiaAgMTI1LTEyMzQtMjM1CithbHdheXMg7YmhIDEyNS0xMjM0LTIzNgorYWx3YXlzIO2JoiAxMjUtMTIzNC0yNTYKK2Fsd2F5cyDtiaMgMTI1LTEyMzQtMzU2CithbHdheXMg7YmkIDEyNS0xMjM0LTEyMzUKK2Fsd2F5cyDtiaUgMTI1LTEyMzQtMTIzNS0xCithbHdheXMg7YmmIDEyNS0xMjM0LTEyMzUtMS0xCithbHdheXMg7YmnIDEyNS0xMjM0LTEyMzUtMS0zCithbHdheXMg7YmoIDEyNS0xMjM0LTEyMzUtMjUKK2Fsd2F5cyDtiakgMTI1LTEyMzQtMTIzNS0yNS0xMworYWx3YXlzIO2JqiAxMjUtMTIzNC0xMjM1LTI1LTM1NgorYWx3YXlzIO2JqyAxMjUtMTIzNC0xMjM1LTM1CithbHdheXMg7YmsIDEyNS0xMjM0LTEyMzUtMgorYWx3YXlzIO2JrSAxMjUtMTIzNC0xMjM1LTItMQorYWx3YXlzIO2JriAxMjUtMTIzNC0xMjM1LTItMjYKK2Fsd2F5cyDtia8gMTI1LTEyMzQtMTIzNS0yLTEyCithbHdheXMg7YmwIDEyNS0xMjM0LTEyMzUtMi0zCithbHdheXMg7YmxIDEyNS0xMjM0LTEyMzUtMi0yMzYKK2Fsd2F5cyDtibIgMTI1LTEyMzQtMTIzNS0yLTI1NgorYWx3YXlzIO2JsyAxMjUtMTIzNC0xMjM1LTItMzU2CithbHdheXMg7Ym0IDEyNS0xMjM0LTEyMzUtMjYKK2Fsd2F5cyDtibUgMTI1LTEyMzQtMTIzNS0xMgorYWx3YXlzIO2JtiAxMjUtMTIzNC0xMjM1LTEyLTMKK2Fsd2F5cyDtibcgMTI1LTEyMzQtMTIzNS0zCithbHdheXMg7Ym4IDEyNS0xMjM0LTEyMzUtMy0zCithbHdheXMg7Ym5IDEyNS0xMjM0LTEyMzUtMjM1NgorYWx3YXlzIO2JuiAxMjUtMTIzNC0xMjM1LTEzCithbHdheXMg7Ym7IDEyNS0xMjM0LTEyMzUtMjMKK2Fsd2F5cyDtibwgMTI1LTEyMzQtMTIzNS0yMzUKK2Fsd2F5cyDtib0gMTI1LTEyMzQtMTIzNS0yMzYKK2Fsd2F5cyDtib4gMTI1LTEyMzQtMTIzNS0yNTYKK2Fsd2F5cyDtib8gMTI1LTEyMzQtMTIzNS0zNTYKK2Fsd2F5cyDtioAgMTI1LTEzNC0xMjM1CithbHdheXMg7YqBIDEyNS0xMzQtMTIzNS0xCithbHdheXMg7YqCIDEyNS0xMzQtMTIzNS0xLTEKK2Fsd2F5cyDtioMgMTI1LTEzNC0xMjM1LTEtMworYWx3YXlzIO2KhCAxMjUtMTM0LTEyMzUtMjUKK2Fsd2F5cyDtioUgMTI1LTEzNC0xMjM1LTI1LTEzCithbHdheXMg7YqGIDEyNS0xMzQtMTIzNS0yNS0zNTYKK2Fsd2F5cyDtiocgMTI1LTEzNC0xMjM1LTM1CithbHdheXMg7YqIIDEyNS0xMzQtMTIzNS0yCithbHdheXMg7YqJIDEyNS0xMzQtMTIzNS0yLTEKK2Fsd2F5cyDtioogMTI1LTEzNC0xMjM1LTItMjYKK2Fsd2F5cyDtiosgMTI1LTEzNC0xMjM1LTItMTIKK2Fsd2F5cyDtiowgMTI1LTEzNC0xMjM1LTItMworYWx3YXlzIO2KjSAxMjUtMTM0LTEyMzUtMi0yMzYKK2Fsd2F5cyDtio4gMTI1LTEzNC0xMjM1LTItMjU2CithbHdheXMg7YqPIDEyNS0xMzQtMTIzNS0yLTM1NgorYWx3YXlzIO2KkCAxMjUtMTM0LTEyMzUtMjYKK2Fsd2F5cyDtipEgMTI1LTEzNC0xMjM1LTEyCithbHdheXMg7YqSIDEyNS0xMzQtMTIzNS0xMi0zCithbHdheXMg7YqTIDEyNS0xMzQtMTIzNS0zCithbHdheXMg7YqUIDEyNS0xMzQtMTIzNS0zLTMKK2Fsd2F5cyDtipUgMTI1LTEzNC0xMjM1LTIzNTYKK2Fsd2F5cyDtipYgMTI1LTEzNC0xMjM1LTEzCithbHdheXMg7YqXIDEyNS0xMzQtMTIzNS0yMworYWx3YXlzIO2KmCAxMjUtMTM0LTEyMzUtMjM1CithbHdheXMg7YqZIDEyNS0xMzQtMTIzNS0yMzYKK2Fsd2F5cyDtipogMTI1LTEzNC0xMjM1LTI1NgorYWx3YXlzIO2KmyAxMjUtMTM0LTEyMzUtMzU2CithbHdheXMg7YqcIDEyNS0xNDYKK2Fsd2F5cyDtip0gMTI1LTE0Ni0xCithbHdheXMg7YqeIDEyNS0xNDYtMS0xCithbHdheXMg7YqfIDEyNS0xNDYtMS0zCithbHdheXMg7YqgIDEyNS0xNDYtMjUKK2Fsd2F5cyDtiqEgMTI1LTE0Ni0yNS0xMworYWx3YXlzIO2KoiAxMjUtMTQ2LTI1LTM1NgorYWx3YXlzIO2KoyAxMjUtMTQ2LTM1CithbHdheXMg7YqkIDEyNS0xNDYtMgorYWx3YXlzIO2KpSAxMjUtMTQ2LTItMQorYWx3YXlzIO2KpiAxMjUtMTQ2LTItMjYKK2Fsd2F5cyDtiqcgMTI1LTE0Ni0yLTEyCithbHdheXMg7YqoIDEyNS0xNDYtMi0zCithbHdheXMg7YqpIDEyNS0xNDYtMi0yMzYKK2Fsd2F5cyDtiqogMTI1LTE0Ni0yLTI1NgorYWx3YXlzIO2KqyAxMjUtMTQ2LTItMzU2CithbHdheXMg7YqsIDEyNS0xNDYtMjYKK2Fsd2F5cyDtiq0gMTI1LTE0Ni0xMgorYWx3YXlzIO2KriAxMjUtMTQ2LTEyLTMKK2Fsd2F5cyDtiq8gMTI1LTE0Ni0zCithbHdheXMg7YqwIDEyNS0xNDYtMy0zCithbHdheXMg7YqxIDEyNS0xNDYtMjM1NgorYWx3YXlzIO2KsiAxMjUtMTQ2LTEzCithbHdheXMg7YqzIDEyNS0xNDYtMjMKK2Fsd2F5cyDtirQgMTI1LTE0Ni0yMzUKK2Fsd2F5cyDtirUgMTI1LTE0Ni0yMzYKK2Fsd2F5cyDtirYgMTI1LTE0Ni0yNTYKK2Fsd2F5cyDtircgMTI1LTE0Ni0zNTYKK2Fsd2F5cyDtirggMTI1LTI0NgorYWx3YXlzIO2KuSAxMjUtMjQ2LTEKK2Fsd2F5cyDtirogMTI1LTI0Ni0xLTEKK2Fsd2F5cyDtirsgMTI1LTI0Ni0xLTMKK2Fsd2F5cyDtirwgMTI1LTI0Ni0yNQorYWx3YXlzIO2KvSAxMjUtMjQ2LTI1LTEzCithbHdheXMg7Yq+IDEyNS0yNDYtMjUtMzU2CithbHdheXMg7Yq/IDEyNS0yNDYtMzUKK2Fsd2F5cyDti4AgMTI1LTI0Ni0yCithbHdheXMg7YuBIDEyNS0yNDYtMi0xCithbHdheXMg7YuCIDEyNS0yNDYtMi0yNgorYWx3YXlzIO2LgyAxMjUtMjQ2LTItMTIKK2Fsd2F5cyDti4QgMTI1LTI0Ni0yLTMKK2Fsd2F5cyDti4UgMTI1LTI0Ni0yLTIzNgorYWx3YXlzIO2LhiAxMjUtMjQ2LTItMjU2CithbHdheXMg7YuHIDEyNS0yNDYtMi0zNTYKK2Fsd2F5cyDti4ggMTI1LTI0Ni0yNgorYWx3YXlzIO2LiSAxMjUtMjQ2LTEyCithbHdheXMg7YuKIDEyNS0yNDYtMTItMworYWx3YXlzIO2LiyAxMjUtMjQ2LTMKK2Fsd2F5cyDti4wgMTI1LTI0Ni0zLTMKK2Fsd2F5cyDti40gMTI1LTI0Ni0yMzU2CithbHdheXMg7YuOIDEyNS0yNDYtMTMKK2Fsd2F5cyDti48gMTI1LTI0Ni0yMworYWx3YXlzIO2LkCAxMjUtMjQ2LTIzNQorYWx3YXlzIO2LkSAxMjUtMjQ2LTIzNgorYWx3YXlzIO2LkiAxMjUtMjQ2LTI1NgorYWx3YXlzIO2LkyAxMjUtMjQ2LTM1NgorYWx3YXlzIO2LlCAxMjUtMjQ1NgorYWx3YXlzIO2LlSAxMjUtMjQ1Ni0xCithbHdheXMg7YuWIDEyNS0yNDU2LTEtMQorYWx3YXlzIO2LlyAxMjUtMjQ1Ni0xLTMKK2Fsd2F5cyDti5ggMTI1LTI0NTYtMjUKK2Fsd2F5cyDti5kgMTI1LTI0NTYtMjUtMTMKK2Fsd2F5cyDti5ogMTI1LTI0NTYtMjUtMzU2CithbHdheXMg7YubIDEyNS0yNDU2LTM1CithbHdheXMg7YucIDEyNS0yNDU2LTIKK2Fsd2F5cyDti50gMTI1LTI0NTYtMi0xCithbHdheXMg7YueIDEyNS0yNDU2LTItMjYKK2Fsd2F5cyDti58gMTI1LTI0NTYtMi0xMgorYWx3YXlzIO2LoCAxMjUtMjQ1Ni0yLTMKK2Fsd2F5cyDti6EgMTI1LTI0NTYtMi0yMzYKK2Fsd2F5cyDti6IgMTI1LTI0NTYtMi0yNTYKK2Fsd2F5cyDti6MgMTI1LTI0NTYtMi0zNTYKK2Fsd2F5cyDti6QgMTI1LTI0NTYtMjYKK2Fsd2F5cyDti6UgMTI1LTI0NTYtMTIKK2Fsd2F5cyDti6YgMTI1LTI0NTYtMTItMworYWx3YXlzIO2LpyAxMjUtMjQ1Ni0zCithbHdheXMg7YuoIDEyNS0yNDU2LTMtMworYWx3YXlzIO2LqSAxMjUtMjQ1Ni0yMzU2CithbHdheXMg7YuqIDEyNS0yNDU2LTEzCithbHdheXMg7YurIDEyNS0yNDU2LTIzCithbHdheXMg7YusIDEyNS0yNDU2LTIzNQorYWx3YXlzIO2LrSAxMjUtMjQ1Ni0yMzYKK2Fsd2F5cyDti64gMTI1LTI0NTYtMjU2CithbHdheXMg7YuvIDEyNS0yNDU2LTM1NgorYWx3YXlzIO2LsCAxMjUtMTM1CithbHdheXMg7YuxIDEyNS0xMzUtMQorYWx3YXlzIO2LsiAxMjUtMTM1LTEtMQorYWx3YXlzIO2LsyAxMjUtMTM1LTEtMworYWx3YXlzIO2LtCAxMjUtMTM1LTI1CithbHdheXMg7Yu1IDEyNS0xMzUtMjUtMTMKK2Fsd2F5cyDti7YgMTI1LTEzNS0yNS0zNTYKK2Fsd2F5cyDti7cgMTI1LTEzNS0zNQorYWx3YXlzIO2LuCAxMjUtMTM1LTIKK2Fsd2F5cyDti7kgMTI1LTEzNS0yLTEKK2Fsd2F5cyDti7ogMTI1LTEzNS0yLTI2CithbHdheXMg7Yu7IDEyNS0xMzUtMi0xMgorYWx3YXlzIO2LvCAxMjUtMTM1LTItMworYWx3YXlzIO2LvSAxMjUtMTM1LTItMjM2CithbHdheXMg7Yu+IDEyNS0xMzUtMi0yNTYKK2Fsd2F5cyDti78gMTI1LTEzNS0yLTM1NgorYWx3YXlzIO2MgCAxMjUtMTM1LTI2CithbHdheXMg7YyBIDEyNS0xMzUtMTIKK2Fsd2F5cyDtjIIgMTI1LTEzNS0xMi0zCithbHdheXMg7YyDIDEyNS0xMzUtMworYWx3YXlzIO2MhCAxMjUtMTM1LTMtMworYWx3YXlzIO2MhSAxMjUtMTM1LTIzNTYKK2Fsd2F5cyDtjIYgMTI1LTEzNS0xMworYWx3YXlzIO2MhyAxMjUtMTM1LTIzCithbHdheXMg7YyIIDEyNS0xMzUtMjM1CithbHdheXMg7YyJIDEyNS0xMzUtMjM2CithbHdheXMg7YyKIDEyNS0xMzUtMjU2CithbHdheXMg7YyLIDEyNS0xMzUtMzU2CithbHdheXMg7YyMIDE0NS0xMjYKK2Fsd2F5cyDtjI0gMTQ1LTEyNi0xCithbHdheXMg7YyOIDE0NS0xMjYtMS0xCithbHdheXMg7YyPIDE0NS0xMjYtMS0zCithbHdheXMg7YyQIDE0NS0xMjYtMjUKK2Fsd2F5cyDtjJEgMTQ1LTEyNi0yNS0xMworYWx3YXlzIO2MkiAxNDUtMTI2LTI1LTM1NgorYWx3YXlzIO2MkyAxNDUtMTI2LTM1CithbHdheXMg7YyUIDE0NS0xMjYtMgorYWx3YXlzIO2MlSAxNDUtMTI2LTItMQorYWx3YXlzIO2MliAxNDUtMTI2LTItMjYKK2Fsd2F5cyDtjJcgMTQ1LTEyNi0yLTEyCithbHdheXMg7YyYIDE0NS0xMjYtMi0zCithbHdheXMg7YyZIDE0NS0xMjYtMi0yMzYKK2Fsd2F5cyDtjJogMTQ1LTEyNi0yLTI1NgorYWx3YXlzIO2MmyAxNDUtMTI2LTItMzU2CithbHdheXMg7YycIDE0NS0xMjYtMjYKK2Fsd2F5cyDtjJ0gMTQ1LTEyNi0xMgorYWx3YXlzIO2MniAxNDUtMTI2LTEyLTMKK2Fsd2F5cyDtjJ8gMTQ1LTEyNi0zCithbHdheXMg7YygIDE0NS0xMjYtMy0zCithbHdheXMg7YyhIDE0NS0xMjYtMjM1NgorYWx3YXlzIO2MoiAxNDUtMTI2LTEzCithbHdheXMg7YyjIDE0NS0xMjYtMjMKK2Fsd2F5cyDtjKQgMTQ1LTEyNi0yMzUKK2Fsd2F5cyDtjKUgMTQ1LTEyNi0yMzYKK2Fsd2F5cyDtjKYgMTQ1LTEyNi0yNTYKK2Fsd2F5cyDtjKcgMTQ1LTEyNi0zNTYKK2Fsd2F5cyDtjKggMTQ1LTEyMzUKK2Fsd2F5cyDtjKkgMTQ1LTEyMzUtMQorYWx3YXlzIO2MqiAxNDUtMTIzNS0xLTEKK2Fsd2F5cyDtjKsgMTQ1LTEyMzUtMS0zCithbHdheXMg7YysIDE0NS0xMjM1LTI1CithbHdheXMg7YytIDE0NS0xMjM1LTI1LTEzCithbHdheXMg7YyuIDE0NS0xMjM1LTI1LTM1NgorYWx3YXlzIO2MryAxNDUtMTIzNS0zNQorYWx3YXlzIO2MsCAxNDUtMTIzNS0yCithbHdheXMg7YyxIDE0NS0xMjM1LTItMQorYWx3YXlzIO2MsiAxNDUtMTIzNS0yLTI2CithbHdheXMg7YyzIDE0NS0xMjM1LTItMTIKK2Fsd2F5cyDtjLQgMTQ1LTEyMzUtMi0zCithbHdheXMg7Yy1IDE0NS0xMjM1LTItMjM2CithbHdheXMg7Yy2IDE0NS0xMjM1LTItMjU2CithbHdheXMg7Yy3IDE0NS0xMjM1LTItMzU2CithbHdheXMg7Yy4IDE0NS0xMjM1LTI2CithbHdheXMg7Yy5IDE0NS0xMjM1LTEyCithbHdheXMg7Yy6IDE0NS0xMjM1LTEyLTMKK2Fsd2F5cyDtjLsgMTQ1LTEyMzUtMworYWx3YXlzIO2MvCAxNDUtMTIzNS0zLTMKK2Fsd2F5cyDtjL0gMTQ1LTEyMzUtMjM1NgorYWx3YXlzIO2MviAxNDUtMTIzNS0xMworYWx3YXlzIO2MvyAxNDUtMTIzNS0yMworYWx3YXlzIO2NgCAxNDUtMTIzNS0yMzUKK2Fsd2F5cyDtjYEgMTQ1LTEyMzUtMjM2CithbHdheXMg7Y2CIDE0NS0xMjM1LTI1NgorYWx3YXlzIO2NgyAxNDUtMTIzNS0zNTYKK2Fsd2F5cyDtjYQgMTQ1LTM0NQorYWx3YXlzIO2NhSAxNDUtMzQ1LTEKK2Fsd2F5cyDtjYYgMTQ1LTM0NS0xLTEKK2Fsd2F5cyDtjYcgMTQ1LTM0NS0xLTMKK2Fsd2F5cyDtjYggMTQ1LTM0NS0yNQorYWx3YXlzIO2NiSAxNDUtMzQ1LTI1LTEzCithbHdheXMg7Y2KIDE0NS0zNDUtMjUtMzU2CithbHdheXMg7Y2LIDE0NS0zNDUtMzUKK2Fsd2F5cyDtjYwgMTQ1LTM0NS0yCithbHdheXMg7Y2NIDE0NS0zNDUtMi0xCithbHdheXMg7Y2OIDE0NS0zNDUtMi0yNgorYWx3YXlzIO2NjyAxNDUtMzQ1LTItMTIKK2Fsd2F5cyDtjZAgMTQ1LTM0NS0yLTMKK2Fsd2F5cyDtjZEgMTQ1LTM0NS0yLTIzNgorYWx3YXlzIO2NkiAxNDUtMzQ1LTItMjU2CithbHdheXMg7Y2TIDE0NS0zNDUtMi0zNTYKK2Fsd2F5cyDtjZQgMTQ1LTM0NS0yNgorYWx3YXlzIO2NlSAxNDUtMzQ1LTEyCithbHdheXMg7Y2WIDE0NS0zNDUtMTItMworYWx3YXlzIO2NlyAxNDUtMzQ1LTMKK2Fsd2F5cyDtjZggMTQ1LTM0NS0zLTMKK2Fsd2F5cyDtjZkgMTQ1LTM0NS0yMzU2CithbHdheXMg7Y2aIDE0NS0zNDUtMTMKK2Fsd2F5cyDtjZsgMTQ1LTM0NS0yMworYWx3YXlzIO2NnCAxNDUtMzQ1LTIzNQorYWx3YXlzIO2NnSAxNDUtMzQ1LTIzNgorYWx3YXlzIO2NniAxNDUtMzQ1LTI1NgorYWx3YXlzIO2NnyAxNDUtMzQ1LTM1NgorYWx3YXlzIO2NoCAxNDUtMzQ1LTEyMzUKK2Fsd2F5cyDtjaEgMTQ1LTM0NS0xMjM1LTEKK2Fsd2F5cyDtjaIgMTQ1LTM0NS0xMjM1LTEtMQorYWx3YXlzIO2NoyAxNDUtMzQ1LTEyMzUtMS0zCithbHdheXMg7Y2kIDE0NS0zNDUtMTIzNS0yNQorYWx3YXlzIO2NpSAxNDUtMzQ1LTEyMzUtMjUtMTMKK2Fsd2F5cyDtjaYgMTQ1LTM0NS0xMjM1LTI1LTM1NgorYWx3YXlzIO2NpyAxNDUtMzQ1LTEyMzUtMzUKK2Fsd2F5cyDtjaggMTQ1LTM0NS0xMjM1LTIKK2Fsd2F5cyDtjakgMTQ1LTM0NS0xMjM1LTItMQorYWx3YXlzIO2NqiAxNDUtMzQ1LTEyMzUtMi0yNgorYWx3YXlzIO2NqyAxNDUtMzQ1LTEyMzUtMi0xMgorYWx3YXlzIO2NrCAxNDUtMzQ1LTEyMzUtMi0zCithbHdheXMg7Y2tIDE0NS0zNDUtMTIzNS0yLTIzNgorYWx3YXlzIO2NriAxNDUtMzQ1LTEyMzUtMi0yNTYKK2Fsd2F5cyDtja8gMTQ1LTM0NS0xMjM1LTItMzU2CithbHdheXMg7Y2wIDE0NS0zNDUtMTIzNS0yNgorYWx3YXlzIO2NsSAxNDUtMzQ1LTEyMzUtMTIKK2Fsd2F5cyDtjbIgMTQ1LTM0NS0xMjM1LTEyLTMKK2Fsd2F5cyDtjbMgMTQ1LTM0NS0xMjM1LTMKK2Fsd2F5cyDtjbQgMTQ1LTM0NS0xMjM1LTMtMworYWx3YXlzIO2NtSAxNDUtMzQ1LTEyMzUtMjM1NgorYWx3YXlzIO2NtiAxNDUtMzQ1LTEyMzUtMTMKK2Fsd2F5cyDtjbcgMTQ1LTM0NS0xMjM1LTIzCithbHdheXMg7Y24IDE0NS0zNDUtMTIzNS0yMzUKK2Fsd2F5cyDtjbkgMTQ1LTM0NS0xMjM1LTIzNgorYWx3YXlzIO2NuiAxNDUtMzQ1LTEyMzUtMjU2CithbHdheXMg7Y27IDE0NS0zNDUtMTIzNS0zNTYKK2Fsd2F5cyDtjbwgMTQ1LTIzNAorYWx3YXlzIO2NvSAxNDUtMjM0LTEKK2Fsd2F5cyDtjb4gMTQ1LTIzNC0xLTEKK2Fsd2F5cyDtjb8gMTQ1LTIzNC0xLTMKK2Fsd2F5cyDtjoAgMTQ1LTIzNC0yNQorYWx3YXlzIO2OgSAxNDUtMjM0LTI1LTEzCithbHdheXMg7Y6CIDE0NS0yMzQtMjUtMzU2CithbHdheXMg7Y6DIDE0NS0yMzQtMzUKK2Fsd2F5cyDtjoQgMTQ1LTIzNC0yCithbHdheXMg7Y6FIDE0NS0yMzQtMi0xCithbHdheXMg7Y6GIDE0NS0yMzQtMi0yNgorYWx3YXlzIO2OhyAxNDUtMjM0LTItMTIKK2Fsd2F5cyDtjoggMTQ1LTIzNC0yLTMKK2Fsd2F5cyDtjokgMTQ1LTIzNC0yLTIzNgorYWx3YXlzIO2OiiAxNDUtMjM0LTItMjU2CithbHdheXMg7Y6LIDE0NS0yMzQtMi0zNTYKK2Fsd2F5cyDtjowgMTQ1LTIzNC0yNgorYWx3YXlzIO2OjSAxNDUtMjM0LTEyCithbHdheXMg7Y6OIDE0NS0yMzQtMTItMworYWx3YXlzIO2OjyAxNDUtMjM0LTMKK2Fsd2F5cyDtjpAgMTQ1LTIzNC0zLTMKK2Fsd2F5cyDtjpEgMTQ1LTIzNC0yMzU2CithbHdheXMg7Y6SIDE0NS0yMzQtMTMKK2Fsd2F5cyDtjpMgMTQ1LTIzNC0yMworYWx3YXlzIO2OlCAxNDUtMjM0LTIzNQorYWx3YXlzIO2OlSAxNDUtMjM0LTIzNgorYWx3YXlzIO2OliAxNDUtMjM0LTI1NgorYWx3YXlzIO2OlyAxNDUtMjM0LTM1NgorYWx3YXlzIO2OmCAxNDUtMTM0NQorYWx3YXlzIO2OmSAxNDUtMTM0NS0xCithbHdheXMg7Y6aIDE0NS0xMzQ1LTEtMQorYWx3YXlzIO2OmyAxNDUtMTM0NS0xLTMKK2Fsd2F5cyDtjpwgMTQ1LTEzNDUtMjUKK2Fsd2F5cyDtjp0gMTQ1LTEzNDUtMjUtMTMKK2Fsd2F5cyDtjp4gMTQ1LTEzNDUtMjUtMzU2CithbHdheXMg7Y6fIDE0NS0xMzQ1LTM1CithbHdheXMg7Y6gIDE0NS0xMzQ1LTIKK2Fsd2F5cyDtjqEgMTQ1LTEzNDUtMi0xCithbHdheXMg7Y6iIDE0NS0xMzQ1LTItMjYKK2Fsd2F5cyDtjqMgMTQ1LTEzNDUtMi0xMgorYWx3YXlzIO2OpCAxNDUtMTM0NS0yLTMKK2Fsd2F5cyDtjqUgMTQ1LTEzNDUtMi0yMzYKK2Fsd2F5cyDtjqYgMTQ1LTEzNDUtMi0yNTYKK2Fsd2F5cyDtjqcgMTQ1LTEzNDUtMi0zNTYKK2Fsd2F5cyDtjqggMTQ1LTEzNDUtMjYKK2Fsd2F5cyDtjqkgMTQ1LTEzNDUtMTIKK2Fsd2F5cyDtjqogMTQ1LTEzNDUtMTItMworYWx3YXlzIO2OqyAxNDUtMTM0NS0zCithbHdheXMg7Y6sIDE0NS0xMzQ1LTMtMworYWx3YXlzIO2OrSAxNDUtMTM0NS0yMzU2CithbHdheXMg7Y6uIDE0NS0xMzQ1LTEzCithbHdheXMg7Y6vIDE0NS0xMzQ1LTIzCithbHdheXMg7Y6wIDE0NS0xMzQ1LTIzNQorYWx3YXlzIO2OsSAxNDUtMTM0NS0yMzYKK2Fsd2F5cyDtjrIgMTQ1LTEzNDUtMjU2CithbHdheXMg7Y6zIDE0NS0xMzQ1LTM1NgorYWx3YXlzIO2OtCAxNDUtMTU2CithbHdheXMg7Y61IDE0NS0xNTYtMQorYWx3YXlzIO2OtiAxNDUtMTU2LTEtMQorYWx3YXlzIO2OtyAxNDUtMTU2LTEtMworYWx3YXlzIO2OuCAxNDUtMTU2LTI1CithbHdheXMg7Y65IDE0NS0xNTYtMjUtMTMKK2Fsd2F5cyDtjrogMTQ1LTE1Ni0yNS0zNTYKK2Fsd2F5cyDtjrsgMTQ1LTE1Ni0zNQorYWx3YXlzIO2OvCAxNDUtMTU2LTIKK2Fsd2F5cyDtjr0gMTQ1LTE1Ni0yLTEKK2Fsd2F5cyDtjr4gMTQ1LTE1Ni0yLTI2CithbHdheXMg7Y6/IDE0NS0xNTYtMi0xMgorYWx3YXlzIO2PgCAxNDUtMTU2LTItMworYWx3YXlzIO2PgSAxNDUtMTU2LTItMjM2CithbHdheXMg7Y+CIDE0NS0xNTYtMi0yNTYKK2Fsd2F5cyDtj4MgMTQ1LTE1Ni0yLTM1NgorYWx3YXlzIO2PhCAxNDUtMTU2LTI2CithbHdheXMg7Y+FIDE0NS0xNTYtMTIKK2Fsd2F5cyDtj4YgMTQ1LTE1Ni0xMi0zCithbHdheXMg7Y+HIDE0NS0xNTYtMworYWx3YXlzIO2PiCAxNDUtMTU2LTMtMworYWx3YXlzIO2PiSAxNDUtMTU2LTIzNTYKK2Fsd2F5cyDtj4ogMTQ1LTE1Ni0xMworYWx3YXlzIO2PiyAxNDUtMTU2LTIzCithbHdheXMg7Y+MIDE0NS0xNTYtMjM1CithbHdheXMg7Y+NIDE0NS0xNTYtMjM2CithbHdheXMg7Y+OIDE0NS0xNTYtMjU2CithbHdheXMg7Y+PIDE0NS0xNTYtMzU2CithbHdheXMg7Y+QIDE0NS0zNAorYWx3YXlzIO2PkSAxNDUtMzQtMQorYWx3YXlzIO2PkiAxNDUtMzQtMS0xCithbHdheXMg7Y+TIDE0NS0zNC0xLTMKK2Fsd2F5cyDtj5QgMTQ1LTM0LTI1CithbHdheXMg7Y+VIDE0NS0zNC0yNS0xMworYWx3YXlzIO2PliAxNDUtMzQtMjUtMzU2CithbHdheXMg7Y+XIDE0NS0zNC0zNQorYWx3YXlzIO2PmCAxNDUtMzQtMgorYWx3YXlzIO2PmSAxNDUtMzQtMi0xCithbHdheXMg7Y+aIDE0NS0zNC0yLTI2CithbHdheXMg7Y+bIDE0NS0zNC0yLTEyCithbHdheXMg7Y+cIDE0NS0zNC0yLTMKK2Fsd2F5cyDtj50gMTQ1LTM0LTItMjM2CithbHdheXMg7Y+eIDE0NS0zNC0yLTI1NgorYWx3YXlzIO2PnyAxNDUtMzQtMi0zNTYKK2Fsd2F5cyDtj6AgMTQ1LTM0LTI2CithbHdheXMg7Y+hIDE0NS0zNC0xMgorYWx3YXlzIO2PoiAxNDUtMzQtMTItMworYWx3YXlzIO2PoyAxNDUtMzQtMworYWx3YXlzIO2PpCAxNDUtMzQtMy0zCithbHdheXMg7Y+lIDE0NS0zNC0yMzU2CithbHdheXMg7Y+mIDE0NS0zNC0xMworYWx3YXlzIO2PpyAxNDUtMzQtMjMKK2Fsd2F5cyDtj6ggMTQ1LTM0LTIzNQorYWx3YXlzIO2PqSAxNDUtMzQtMjM2CithbHdheXMg7Y+qIDE0NS0zNC0yNTYKK2Fsd2F5cyDtj6sgMTQ1LTM0LTM1NgorYWx3YXlzIO2PrCAxNDUtMTM2CithbHdheXMg7Y+tIDE0NS0xMzYtMQorYWx3YXlzIO2PriAxNDUtMTM2LTEtMQorYWx3YXlzIO2PryAxNDUtMTM2LTEtMworYWx3YXlzIO2PsCAxNDUtMTM2LTI1CithbHdheXMg7Y+xIDE0NS0xMzYtMjUtMTMKK2Fsd2F5cyDtj7IgMTQ1LTEzNi0yNS0zNTYKK2Fsd2F5cyDtj7MgMTQ1LTEzNi0zNQorYWx3YXlzIO2PtCAxNDUtMTM2LTIKK2Fsd2F5cyDtj7UgMTQ1LTEzNi0yLTEKK2Fsd2F5cyDtj7YgMTQ1LTEzNi0yLTI2CithbHdheXMg7Y+3IDE0NS0xMzYtMi0xMgorYWx3YXlzIO2PuCAxNDUtMTM2LTItMworYWx3YXlzIO2PuSAxNDUtMTM2LTItMjM2CithbHdheXMg7Y+6IDE0NS0xMzYtMi0yNTYKK2Fsd2F5cyDtj7sgMTQ1LTEzNi0yLTM1NgorYWx3YXlzIO2PvCAxNDUtMTM2LTI2CithbHdheXMg7Y+9IDE0NS0xMzYtMTIKK2Fsd2F5cyDtj74gMTQ1LTEzNi0xMi0zCithbHdheXMg7Y+/IDE0NS0xMzYtMworYWx3YXlzIO2QgCAxNDUtMTM2LTMtMworYWx3YXlzIO2QgSAxNDUtMTM2LTIzNTYKK2Fsd2F5cyDtkIIgMTQ1LTEzNi0xMworYWx3YXlzIO2QgyAxNDUtMTM2LTIzCithbHdheXMg7ZCEIDE0NS0xMzYtMjM1CithbHdheXMg7ZCFIDE0NS0xMzYtMjM2CithbHdheXMg7ZCGIDE0NS0xMzYtMjU2CithbHdheXMg7ZCHIDE0NS0xMzYtMzU2CithbHdheXMg7ZCIIDE0NS0xMjM2CithbHdheXMg7ZCJIDE0NS0xMjM2LTEKK2Fsd2F5cyDtkIogMTQ1LTEyMzYtMS0xCithbHdheXMg7ZCLIDE0NS0xMjM2LTEtMworYWx3YXlzIO2QjCAxNDUtMTIzNi0yNQorYWx3YXlzIO2QjSAxNDUtMTIzNi0yNS0xMworYWx3YXlzIO2QjiAxNDUtMTIzNi0yNS0zNTYKK2Fsd2F5cyDtkI8gMTQ1LTEyMzYtMzUKK2Fsd2F5cyDtkJAgMTQ1LTEyMzYtMgorYWx3YXlzIO2QkSAxNDUtMTIzNi0yLTEKK2Fsd2F5cyDtkJIgMTQ1LTEyMzYtMi0yNgorYWx3YXlzIO2QkyAxNDUtMTIzNi0yLTEyCithbHdheXMg7ZCUIDE0NS0xMjM2LTItMworYWx3YXlzIO2QlSAxNDUtMTIzNi0yLTIzNgorYWx3YXlzIO2QliAxNDUtMTIzNi0yLTI1NgorYWx3YXlzIO2QlyAxNDUtMTIzNi0yLTM1NgorYWx3YXlzIO2QmCAxNDUtMTIzNi0yNgorYWx3YXlzIO2QmSAxNDUtMTIzNi0xMgorYWx3YXlzIO2QmiAxNDUtMTIzNi0xMi0zCithbHdheXMg7ZCbIDE0NS0xMjM2LTMKK2Fsd2F5cyDtkJwgMTQ1LTEyMzYtMy0zCithbHdheXMg7ZCdIDE0NS0xMjM2LTIzNTYKK2Fsd2F5cyDtkJ4gMTQ1LTEyMzYtMTMKK2Fsd2F5cyDtkJ8gMTQ1LTEyMzYtMjMKK2Fsd2F5cyDtkKAgMTQ1LTEyMzYtMjM1CithbHdheXMg7ZChIDE0NS0xMjM2LTIzNgorYWx3YXlzIO2QoiAxNDUtMTIzNi0yNTYKK2Fsd2F5cyDtkKMgMTQ1LTEyMzYtMzU2CithbHdheXMg7ZCkIDE0NS0xMjM2LTEyMzUKK2Fsd2F5cyDtkKUgMTQ1LTEyMzYtMTIzNS0xCithbHdheXMg7ZCmIDE0NS0xMjM2LTEyMzUtMS0xCithbHdheXMg7ZCnIDE0NS0xMjM2LTEyMzUtMS0zCithbHdheXMg7ZCoIDE0NS0xMjM2LTEyMzUtMjUKK2Fsd2F5cyDtkKkgMTQ1LTEyMzYtMTIzNS0yNS0xMworYWx3YXlzIO2QqiAxNDUtMTIzNi0xMjM1LTI1LTM1NgorYWx3YXlzIO2QqyAxNDUtMTIzNi0xMjM1LTM1CithbHdheXMg7ZCsIDE0NS0xMjM2LTEyMzUtMgorYWx3YXlzIO2QrSAxNDUtMTIzNi0xMjM1LTItMQorYWx3YXlzIO2QriAxNDUtMTIzNi0xMjM1LTItMjYKK2Fsd2F5cyDtkK8gMTQ1LTEyMzYtMTIzNS0yLTEyCithbHdheXMg7ZCwIDE0NS0xMjM2LTEyMzUtMi0zCithbHdheXMg7ZCxIDE0NS0xMjM2LTEyMzUtMi0yMzYKK2Fsd2F5cyDtkLIgMTQ1LTEyMzYtMTIzNS0yLTI1NgorYWx3YXlzIO2QsyAxNDUtMTIzNi0xMjM1LTItMzU2CithbHdheXMg7ZC0IDE0NS0xMjM2LTEyMzUtMjYKK2Fsd2F5cyDtkLUgMTQ1LTEyMzYtMTIzNS0xMgorYWx3YXlzIO2QtiAxNDUtMTIzNi0xMjM1LTEyLTMKK2Fsd2F5cyDtkLcgMTQ1LTEyMzYtMTIzNS0zCithbHdheXMg7ZC4IDE0NS0xMjM2LTEyMzUtMy0zCithbHdheXMg7ZC5IDE0NS0xMjM2LTEyMzUtMjM1NgorYWx3YXlzIO2QuiAxNDUtMTIzNi0xMjM1LTEzCithbHdheXMg7ZC7IDE0NS0xMjM2LTEyMzUtMjMKK2Fsd2F5cyDtkLwgMTQ1LTEyMzYtMTIzNS0yMzUKK2Fsd2F5cyDtkL0gMTQ1LTEyMzYtMTIzNS0yMzYKK2Fsd2F5cyDtkL4gMTQ1LTEyMzYtMTIzNS0yNTYKK2Fsd2F5cyDtkL8gMTQ1LTEyMzYtMTIzNS0zNTYKK2Fsd2F5cyDtkYAgMTQ1LTEzNDU2CithbHdheXMg7ZGBIDE0NS0xMzQ1Ni0xCithbHdheXMg7ZGCIDE0NS0xMzQ1Ni0xLTEKK2Fsd2F5cyDtkYMgMTQ1LTEzNDU2LTEtMworYWx3YXlzIO2RhCAxNDUtMTM0NTYtMjUKK2Fsd2F5cyDtkYUgMTQ1LTEzNDU2LTI1LTEzCithbHdheXMg7ZGGIDE0NS0xMzQ1Ni0yNS0zNTYKK2Fsd2F5cyDtkYcgMTQ1LTEzNDU2LTM1CithbHdheXMg7ZGIIDE0NS0xMzQ1Ni0yCithbHdheXMg7ZGJIDE0NS0xMzQ1Ni0yLTEKK2Fsd2F5cyDtkYogMTQ1LTEzNDU2LTItMjYKK2Fsd2F5cyDtkYsgMTQ1LTEzNDU2LTItMTIKK2Fsd2F5cyDtkYwgMTQ1LTEzNDU2LTItMworYWx3YXlzIO2RjSAxNDUtMTM0NTYtMi0yMzYKK2Fsd2F5cyDtkY4gMTQ1LTEzNDU2LTItMjU2CithbHdheXMg7ZGPIDE0NS0xMzQ1Ni0yLTM1NgorYWx3YXlzIO2RkCAxNDUtMTM0NTYtMjYKK2Fsd2F5cyDtkZEgMTQ1LTEzNDU2LTEyCithbHdheXMg7ZGSIDE0NS0xMzQ1Ni0xMi0zCithbHdheXMg7ZGTIDE0NS0xMzQ1Ni0zCithbHdheXMg7ZGUIDE0NS0xMzQ1Ni0zLTMKK2Fsd2F5cyDtkZUgMTQ1LTEzNDU2LTIzNTYKK2Fsd2F5cyDtkZYgMTQ1LTEzNDU2LTEzCithbHdheXMg7ZGXIDE0NS0xMzQ1Ni0yMworYWx3YXlzIO2RmCAxNDUtMTM0NTYtMjM1CithbHdheXMg7ZGZIDE0NS0xMzQ1Ni0yMzYKK2Fsd2F5cyDtkZogMTQ1LTEzNDU2LTI1NgorYWx3YXlzIO2RmyAxNDUtMTM0NTYtMzU2CithbHdheXMg7ZGcIDE0NS0zNDYKK2Fsd2F5cyDtkZ0gMTQ1LTM0Ni0xCithbHdheXMg7ZGeIDE0NS0zNDYtMS0xCithbHdheXMg7ZGfIDE0NS0zNDYtMS0zCithbHdheXMg7ZGgIDE0NS0zNDYtMjUKK2Fsd2F5cyDtkaEgMTQ1LTM0Ni0yNS0xMworYWx3YXlzIO2RoiAxNDUtMzQ2LTI1LTM1NgorYWx3YXlzIO2RoyAxNDUtMzQ2LTM1CithbHdheXMg7ZGkIDE0NS0zNDYtMgorYWx3YXlzIO2RpSAxNDUtMzQ2LTItMQorYWx3YXlzIO2RpiAxNDUtMzQ2LTItMjYKK2Fsd2F5cyDtkacgMTQ1LTM0Ni0yLTEyCithbHdheXMg7ZGoIDE0NS0zNDYtMi0zCithbHdheXMg7ZGpIDE0NS0zNDYtMi0yMzYKK2Fsd2F5cyDtkaogMTQ1LTM0Ni0yLTI1NgorYWx3YXlzIO2RqyAxNDUtMzQ2LTItMzU2CithbHdheXMg7ZGsIDE0NS0zNDYtMjYKK2Fsd2F5cyDtka0gMTQ1LTM0Ni0xMgorYWx3YXlzIO2RriAxNDUtMzQ2LTEyLTMKK2Fsd2F5cyDtka8gMTQ1LTM0Ni0zCithbHdheXMg7ZGwIDE0NS0zNDYtMy0zCithbHdheXMg7ZGxIDE0NS0zNDYtMjM1NgorYWx3YXlzIO2RsiAxNDUtMzQ2LTEzCithbHdheXMg7ZGzIDE0NS0zNDYtMjMKK2Fsd2F5cyDtkbQgMTQ1LTM0Ni0yMzUKK2Fsd2F5cyDtkbUgMTQ1LTM0Ni0yMzYKK2Fsd2F5cyDtkbYgMTQ1LTM0Ni0yNTYKK2Fsd2F5cyDtkbcgMTQ1LTM0Ni0zNTYKK2Fsd2F5cyDtkbggMTQ1LTEzNAorYWx3YXlzIO2RuSAxNDUtMTM0LTEKK2Fsd2F5cyDtkbogMTQ1LTEzNC0xLTEKK2Fsd2F5cyDtkbsgMTQ1LTEzNC0xLTMKK2Fsd2F5cyDtkbwgMTQ1LTEzNC0yNQorYWx3YXlzIO2RvSAxNDUtMTM0LTI1LTEzCithbHdheXMg7ZG+IDE0NS0xMzQtMjUtMzU2CithbHdheXMg7ZG/IDE0NS0xMzQtMzUKK2Fsd2F5cyDtkoAgMTQ1LTEzNC0yCithbHdheXMg7ZKBIDE0NS0xMzQtMi0xCithbHdheXMg7ZKCIDE0NS0xMzQtMi0yNgorYWx3YXlzIO2SgyAxNDUtMTM0LTItMTIKK2Fsd2F5cyDtkoQgMTQ1LTEzNC0yLTMKK2Fsd2F5cyDtkoUgMTQ1LTEzNC0yLTIzNgorYWx3YXlzIO2ShiAxNDUtMTM0LTItMjU2CithbHdheXMg7ZKHIDE0NS0xMzQtMi0zNTYKK2Fsd2F5cyDtkoggMTQ1LTEzNC0yNgorYWx3YXlzIO2SiSAxNDUtMTM0LTEyCithbHdheXMg7ZKKIDE0NS0xMzQtMTItMworYWx3YXlzIO2SiyAxNDUtMTM0LTMKK2Fsd2F5cyDtkowgMTQ1LTEzNC0zLTMKK2Fsd2F5cyDtko0gMTQ1LTEzNC0yMzU2CithbHdheXMg7ZKOIDE0NS0xMzQtMTMKK2Fsd2F5cyDtko8gMTQ1LTEzNC0yMworYWx3YXlzIO2SkCAxNDUtMTM0LTIzNQorYWx3YXlzIO2SkSAxNDUtMTM0LTIzNgorYWx3YXlzIO2SkiAxNDUtMTM0LTI1NgorYWx3YXlzIO2SkyAxNDUtMTM0LTM1NgorYWx3YXlzIO2SlCAxNDUtMTIzNAorYWx3YXlzIO2SlSAxNDUtMTIzNC0xCithbHdheXMg7ZKWIDE0NS0xMjM0LTEtMQorYWx3YXlzIO2SlyAxNDUtMTIzNC0xLTMKK2Fsd2F5cyDtkpggMTQ1LTEyMzQtMjUKK2Fsd2F5cyDtkpkgMTQ1LTEyMzQtMjUtMTMKK2Fsd2F5cyDtkpogMTQ1LTEyMzQtMjUtMzU2CithbHdheXMg7ZKbIDE0NS0xMjM0LTM1CithbHdheXMg7ZKcIDE0NS0xMjM0LTIKK2Fsd2F5cyDtkp0gMTQ1LTEyMzQtMi0xCithbHdheXMg7ZKeIDE0NS0xMjM0LTItMjYKK2Fsd2F5cyDtkp8gMTQ1LTEyMzQtMi0xMgorYWx3YXlzIO2SoCAxNDUtMTIzNC0yLTMKK2Fsd2F5cyDtkqEgMTQ1LTEyMzQtMi0yMzYKK2Fsd2F5cyDtkqIgMTQ1LTEyMzQtMi0yNTYKK2Fsd2F5cyDtkqMgMTQ1LTEyMzQtMi0zNTYKK2Fsd2F5cyDtkqQgMTQ1LTEyMzQtMjYKK2Fsd2F5cyDtkqUgMTQ1LTEyMzQtMTIKK2Fsd2F5cyDtkqYgMTQ1LTEyMzQtMTItMworYWx3YXlzIO2SpyAxNDUtMTIzNC0zCithbHdheXMg7ZKoIDE0NS0xMjM0LTMtMworYWx3YXlzIO2SqSAxNDUtMTIzNC0yMzU2CithbHdheXMg7ZKqIDE0NS0xMjM0LTEzCithbHdheXMg7ZKrIDE0NS0xMjM0LTIzCithbHdheXMg7ZKsIDE0NS0xMjM0LTIzNQorYWx3YXlzIO2SrSAxNDUtMTIzNC0yMzYKK2Fsd2F5cyDtkq4gMTQ1LTEyMzQtMjU2CithbHdheXMg7ZKvIDE0NS0xMjM0LTM1NgorYWx3YXlzIO2SsCAxNDUtMTIzNC0xMjM1CithbHdheXMg7ZKxIDE0NS0xMjM0LTEyMzUtMQorYWx3YXlzIO2SsiAxNDUtMTIzNC0xMjM1LTEtMQorYWx3YXlzIO2SsyAxNDUtMTIzNC0xMjM1LTEtMworYWx3YXlzIO2StCAxNDUtMTIzNC0xMjM1LTI1CithbHdheXMg7ZK1IDE0NS0xMjM0LTEyMzUtMjUtMTMKK2Fsd2F5cyDtkrYgMTQ1LTEyMzQtMTIzNS0yNS0zNTYKK2Fsd2F5cyDtkrcgMTQ1LTEyMzQtMTIzNS0zNQorYWx3YXlzIO2SuCAxNDUtMTIzNC0xMjM1LTIKK2Fsd2F5cyDtkrkgMTQ1LTEyMzQtMTIzNS0yLTEKK2Fsd2F5cyDtkrogMTQ1LTEyMzQtMTIzNS0yLTI2CithbHdheXMg7ZK7IDE0NS0xMjM0LTEyMzUtMi0xMgorYWx3YXlzIO2SvCAxNDUtMTIzNC0xMjM1LTItMworYWx3YXlzIO2SvSAxNDUtMTIzNC0xMjM1LTItMjM2CithbHdheXMg7ZK+IDE0NS0xMjM0LTEyMzUtMi0yNTYKK2Fsd2F5cyDtkr8gMTQ1LTEyMzQtMTIzNS0yLTM1NgorYWx3YXlzIO2TgCAxNDUtMTIzNC0xMjM1LTI2CithbHdheXMg7ZOBIDE0NS0xMjM0LTEyMzUtMTIKK2Fsd2F5cyDtk4IgMTQ1LTEyMzQtMTIzNS0xMi0zCithbHdheXMg7ZODIDE0NS0xMjM0LTEyMzUtMworYWx3YXlzIO2ThCAxNDUtMTIzNC0xMjM1LTMtMworYWx3YXlzIO2ThSAxNDUtMTIzNC0xMjM1LTIzNTYKK2Fsd2F5cyDtk4YgMTQ1LTEyMzQtMTIzNS0xMworYWx3YXlzIO2ThyAxNDUtMTIzNC0xMjM1LTIzCithbHdheXMg7ZOIIDE0NS0xMjM0LTEyMzUtMjM1CithbHdheXMg7ZOJIDE0NS0xMjM0LTEyMzUtMjM2CithbHdheXMg7ZOKIDE0NS0xMjM0LTEyMzUtMjU2CithbHdheXMg7ZOLIDE0NS0xMjM0LTEyMzUtMzU2CithbHdheXMg7ZOMIDE0NS0xMzQtMTIzNQorYWx3YXlzIO2TjSAxNDUtMTM0LTEyMzUtMQorYWx3YXlzIO2TjiAxNDUtMTM0LTEyMzUtMS0xCithbHdheXMg7ZOPIDE0NS0xMzQtMTIzNS0xLTMKK2Fsd2F5cyDtk5AgMTQ1LTEzNC0xMjM1LTI1CithbHdheXMg7ZORIDE0NS0xMzQtMTIzNS0yNS0xMworYWx3YXlzIO2TkiAxNDUtMTM0LTEyMzUtMjUtMzU2CithbHdheXMg7ZOTIDE0NS0xMzQtMTIzNS0zNQorYWx3YXlzIO2TlCAxNDUtMTM0LTEyMzUtMgorYWx3YXlzIO2TlSAxNDUtMTM0LTEyMzUtMi0xCithbHdheXMg7ZOWIDE0NS0xMzQtMTIzNS0yLTI2CithbHdheXMg7ZOXIDE0NS0xMzQtMTIzNS0yLTEyCithbHdheXMg7ZOYIDE0NS0xMzQtMTIzNS0yLTMKK2Fsd2F5cyDtk5kgMTQ1LTEzNC0xMjM1LTItMjM2CithbHdheXMg7ZOaIDE0NS0xMzQtMTIzNS0yLTI1NgorYWx3YXlzIO2TmyAxNDUtMTM0LTEyMzUtMi0zNTYKK2Fsd2F5cyDtk5wgMTQ1LTEzNC0xMjM1LTI2CithbHdheXMg7ZOdIDE0NS0xMzQtMTIzNS0xMgorYWx3YXlzIO2TniAxNDUtMTM0LTEyMzUtMTItMworYWx3YXlzIO2TnyAxNDUtMTM0LTEyMzUtMworYWx3YXlzIO2ToCAxNDUtMTM0LTEyMzUtMy0zCithbHdheXMg7ZOhIDE0NS0xMzQtMTIzNS0yMzU2CithbHdheXMg7ZOiIDE0NS0xMzQtMTIzNS0xMworYWx3YXlzIO2ToyAxNDUtMTM0LTEyMzUtMjMKK2Fsd2F5cyDtk6QgMTQ1LTEzNC0xMjM1LTIzNQorYWx3YXlzIO2TpSAxNDUtMTM0LTEyMzUtMjM2CithbHdheXMg7ZOmIDE0NS0xMzQtMTIzNS0yNTYKK2Fsd2F5cyDtk6cgMTQ1LTEzNC0xMjM1LTM1NgorYWx3YXlzIO2TqCAxNDUtMTQ2CithbHdheXMg7ZOpIDE0NS0xNDYtMQorYWx3YXlzIO2TqiAxNDUtMTQ2LTEtMQorYWx3YXlzIO2TqyAxNDUtMTQ2LTEtMworYWx3YXlzIO2TrCAxNDUtMTQ2LTI1CithbHdheXMg7ZOtIDE0NS0xNDYtMjUtMTMKK2Fsd2F5cyDtk64gMTQ1LTE0Ni0yNS0zNTYKK2Fsd2F5cyDtk68gMTQ1LTE0Ni0zNQorYWx3YXlzIO2TsCAxNDUtMTQ2LTIKK2Fsd2F5cyDtk7EgMTQ1LTE0Ni0yLTEKK2Fsd2F5cyDtk7IgMTQ1LTE0Ni0yLTI2CithbHdheXMg7ZOzIDE0NS0xNDYtMi0xMgorYWx3YXlzIO2TtCAxNDUtMTQ2LTItMworYWx3YXlzIO2TtSAxNDUtMTQ2LTItMjM2CithbHdheXMg7ZO2IDE0NS0xNDYtMi0yNTYKK2Fsd2F5cyDtk7cgMTQ1LTE0Ni0yLTM1NgorYWx3YXlzIO2TuCAxNDUtMTQ2LTI2CithbHdheXMg7ZO5IDE0NS0xNDYtMTIKK2Fsd2F5cyDtk7ogMTQ1LTE0Ni0xMi0zCithbHdheXMg7ZO7IDE0NS0xNDYtMworYWx3YXlzIO2TvCAxNDUtMTQ2LTMtMworYWx3YXlzIO2TvSAxNDUtMTQ2LTIzNTYKK2Fsd2F5cyDtk74gMTQ1LTE0Ni0xMworYWx3YXlzIO2TvyAxNDUtMTQ2LTIzCithbHdheXMg7ZSAIDE0NS0xNDYtMjM1CithbHdheXMg7ZSBIDE0NS0xNDYtMjM2CithbHdheXMg7ZSCIDE0NS0xNDYtMjU2CithbHdheXMg7ZSDIDE0NS0xNDYtMzU2CithbHdheXMg7ZSEIDE0NS0yNDYKK2Fsd2F5cyDtlIUgMTQ1LTI0Ni0xCithbHdheXMg7ZSGIDE0NS0yNDYtMS0xCithbHdheXMg7ZSHIDE0NS0yNDYtMS0zCithbHdheXMg7ZSIIDE0NS0yNDYtMjUKK2Fsd2F5cyDtlIkgMTQ1LTI0Ni0yNS0xMworYWx3YXlzIO2UiiAxNDUtMjQ2LTI1LTM1NgorYWx3YXlzIO2UiyAxNDUtMjQ2LTM1CithbHdheXMg7ZSMIDE0NS0yNDYtMgorYWx3YXlzIO2UjSAxNDUtMjQ2LTItMQorYWx3YXlzIO2UjiAxNDUtMjQ2LTItMjYKK2Fsd2F5cyDtlI8gMTQ1LTI0Ni0yLTEyCithbHdheXMg7ZSQIDE0NS0yNDYtMi0zCithbHdheXMg7ZSRIDE0NS0yNDYtMi0yMzYKK2Fsd2F5cyDtlJIgMTQ1LTI0Ni0yLTI1NgorYWx3YXlzIO2UkyAxNDUtMjQ2LTItMzU2CithbHdheXMg7ZSUIDE0NS0yNDYtMjYKK2Fsd2F5cyDtlJUgMTQ1LTI0Ni0xMgorYWx3YXlzIO2UliAxNDUtMjQ2LTEyLTMKK2Fsd2F5cyDtlJcgMTQ1LTI0Ni0zCithbHdheXMg7ZSYIDE0NS0yNDYtMy0zCithbHdheXMg7ZSZIDE0NS0yNDYtMjM1NgorYWx3YXlzIO2UmiAxNDUtMjQ2LTEzCithbHdheXMg7ZSbIDE0NS0yNDYtMjMKK2Fsd2F5cyDtlJwgMTQ1LTI0Ni0yMzUKK2Fsd2F5cyDtlJ0gMTQ1LTI0Ni0yMzYKK2Fsd2F5cyDtlJ4gMTQ1LTI0Ni0yNTYKK2Fsd2F5cyDtlJ8gMTQ1LTI0Ni0zNTYKK2Fsd2F5cyDtlKAgMTQ1LTI0NTYKK2Fsd2F5cyDtlKEgMTQ1LTI0NTYtMQorYWx3YXlzIO2UoiAxNDUtMjQ1Ni0xLTEKK2Fsd2F5cyDtlKMgMTQ1LTI0NTYtMS0zCithbHdheXMg7ZSkIDE0NS0yNDU2LTI1CithbHdheXMg7ZSlIDE0NS0yNDU2LTI1LTEzCithbHdheXMg7ZSmIDE0NS0yNDU2LTI1LTM1NgorYWx3YXlzIO2UpyAxNDUtMjQ1Ni0zNQorYWx3YXlzIO2UqCAxNDUtMjQ1Ni0yCithbHdheXMg7ZSpIDE0NS0yNDU2LTItMQorYWx3YXlzIO2UqiAxNDUtMjQ1Ni0yLTI2CithbHdheXMg7ZSrIDE0NS0yNDU2LTItMTIKK2Fsd2F5cyDtlKwgMTQ1LTI0NTYtMi0zCithbHdheXMg7ZStIDE0NS0yNDU2LTItMjM2CithbHdheXMg7ZSuIDE0NS0yNDU2LTItMjU2CithbHdheXMg7ZSvIDE0NS0yNDU2LTItMzU2CithbHdheXMg7ZSwIDE0NS0yNDU2LTI2CithbHdheXMg7ZSxIDE0NS0yNDU2LTEyCithbHdheXMg7ZSyIDE0NS0yNDU2LTEyLTMKK2Fsd2F5cyDtlLMgMTQ1LTI0NTYtMworYWx3YXlzIO2UtCAxNDUtMjQ1Ni0zLTMKK2Fsd2F5cyDtlLUgMTQ1LTI0NTYtMjM1NgorYWx3YXlzIO2UtiAxNDUtMjQ1Ni0xMworYWx3YXlzIO2UtyAxNDUtMjQ1Ni0yMworYWx3YXlzIO2UuCAxNDUtMjQ1Ni0yMzUKK2Fsd2F5cyDtlLkgMTQ1LTI0NTYtMjM2CithbHdheXMg7ZS6IDE0NS0yNDU2LTI1NgorYWx3YXlzIO2UuyAxNDUtMjQ1Ni0zNTYKK2Fsd2F5cyDtlLwgMTQ1LTEzNQorYWx3YXlzIO2UvSAxNDUtMTM1LTEKK2Fsd2F5cyDtlL4gMTQ1LTEzNS0xLTEKK2Fsd2F5cyDtlL8gMTQ1LTEzNS0xLTMKK2Fsd2F5cyDtlYAgMTQ1LTEzNS0yNQorYWx3YXlzIO2VgSAxNDUtMTM1LTI1LTEzCithbHdheXMg7ZWCIDE0NS0xMzUtMjUtMzU2CithbHdheXMg7ZWDIDE0NS0xMzUtMzUKK2Fsd2F5cyDtlYQgMTQ1LTEzNS0yCithbHdheXMg7ZWFIDE0NS0xMzUtMi0xCithbHdheXMg7ZWGIDE0NS0xMzUtMi0yNgorYWx3YXlzIO2VhyAxNDUtMTM1LTItMTIKK2Fsd2F5cyDtlYggMTQ1LTEzNS0yLTMKK2Fsd2F5cyDtlYkgMTQ1LTEzNS0yLTIzNgorYWx3YXlzIO2ViiAxNDUtMTM1LTItMjU2CithbHdheXMg7ZWLIDE0NS0xMzUtMi0zNTYKK2Fsd2F5cyDtlYwgMTQ1LTEzNS0yNgorYWx3YXlzIO2VjSAxNDUtMTM1LTEyCithbHdheXMg7ZWOIDE0NS0xMzUtMTItMworYWx3YXlzIO2VjyAxNDUtMTM1LTMKK2Fsd2F5cyDtlZAgMTQ1LTEzNS0zLTMKK2Fsd2F5cyDtlZEgMTQ1LTEzNS0yMzU2CithbHdheXMg7ZWSIDE0NS0xMzUtMTMKK2Fsd2F5cyDtlZMgMTQ1LTEzNS0yMworYWx3YXlzIO2VlCAxNDUtMTM1LTIzNQorYWx3YXlzIO2VlSAxNDUtMTM1LTIzNgorYWx3YXlzIO2VliAxNDUtMTM1LTI1NgorYWx3YXlzIO2VlyAxNDUtMTM1LTM1NgorYWx3YXlzIO2VmCAyNDUtMTI2CithbHdheXMg7ZWZIDI0NS0xMjYtMQorYWx3YXlzIO2VmiAyNDUtMTI2LTEtMQorYWx3YXlzIO2VmyAyNDUtMTI2LTEtMworYWx3YXlzIO2VnCAyNDUtMTI2LTI1CithbHdheXMg7ZWdIDI0NS0xMjYtMjUtMTMKK2Fsd2F5cyDtlZ4gMjQ1LTEyNi0yNS0zNTYKK2Fsd2F5cyDtlZ8gMjQ1LTEyNi0zNQorYWx3YXlzIO2VoCAyNDUtMTI2LTIKK2Fsd2F5cyDtlaEgMjQ1LTEyNi0yLTEKK2Fsd2F5cyDtlaIgMjQ1LTEyNi0yLTI2CithbHdheXMg7ZWjIDI0NS0xMjYtMi0xMgorYWx3YXlzIO2VpCAyNDUtMTI2LTItMworYWx3YXlzIO2VpSAyNDUtMTI2LTItMjM2CithbHdheXMg7ZWmIDI0NS0xMjYtMi0yNTYKK2Fsd2F5cyDtlacgMjQ1LTEyNi0yLTM1NgorYWx3YXlzIO2VqCAyNDUtMTI2LTI2CithbHdheXMg7ZWpIDI0NS0xMjYtMTIKK2Fsd2F5cyDtlaogMjQ1LTEyNi0xMi0zCithbHdheXMg7ZWrIDI0NS0xMjYtMworYWx3YXlzIO2VrCAyNDUtMTI2LTMtMworYWx3YXlzIO2VrSAyNDUtMTI2LTIzNTYKK2Fsd2F5cyDtla4gMjQ1LTEyNi0xMworYWx3YXlzIO2VryAyNDUtMTI2LTIzCithbHdheXMg7ZWwIDI0NS0xMjYtMjM1CithbHdheXMg7ZWxIDI0NS0xMjYtMjM2CithbHdheXMg7ZWyIDI0NS0xMjYtMjU2CithbHdheXMg7ZWzIDI0NS0xMjYtMzU2CithbHdheXMg7ZW0IDI0NS0xMjM1CithbHdheXMg7ZW1IDI0NS0xMjM1LTEKK2Fsd2F5cyDtlbYgMjQ1LTEyMzUtMS0xCithbHdheXMg7ZW3IDI0NS0xMjM1LTEtMworYWx3YXlzIO2VuCAyNDUtMTIzNS0yNQorYWx3YXlzIO2VuSAyNDUtMTIzNS0yNS0xMworYWx3YXlzIO2VuiAyNDUtMTIzNS0yNS0zNTYKK2Fsd2F5cyDtlbsgMjQ1LTEyMzUtMzUKK2Fsd2F5cyDtlbwgMjQ1LTEyMzUtMgorYWx3YXlzIO2VvSAyNDUtMTIzNS0yLTEKK2Fsd2F5cyDtlb4gMjQ1LTEyMzUtMi0yNgorYWx3YXlzIO2VvyAyNDUtMTIzNS0yLTEyCithbHdheXMg7ZaAIDI0NS0xMjM1LTItMworYWx3YXlzIO2WgSAyNDUtMTIzNS0yLTIzNgorYWx3YXlzIO2WgiAyNDUtMTIzNS0yLTI1NgorYWx3YXlzIO2WgyAyNDUtMTIzNS0yLTM1NgorYWx3YXlzIO2WhCAyNDUtMTIzNS0yNgorYWx3YXlzIO2WhSAyNDUtMTIzNS0xMgorYWx3YXlzIO2WhiAyNDUtMTIzNS0xMi0zCithbHdheXMg7ZaHIDI0NS0xMjM1LTMKK2Fsd2F5cyDtloggMjQ1LTEyMzUtMy0zCithbHdheXMg7ZaJIDI0NS0xMjM1LTIzNTYKK2Fsd2F5cyDtloogMjQ1LTEyMzUtMTMKK2Fsd2F5cyDtlosgMjQ1LTEyMzUtMjMKK2Fsd2F5cyDtlowgMjQ1LTEyMzUtMjM1CithbHdheXMg7ZaNIDI0NS0xMjM1LTIzNgorYWx3YXlzIO2WjiAyNDUtMTIzNS0yNTYKK2Fsd2F5cyDtlo8gMjQ1LTEyMzUtMzU2CithbHdheXMg7ZaQIDI0NS0zNDUKK2Fsd2F5cyDtlpEgMjQ1LTM0NS0xCithbHdheXMg7ZaSIDI0NS0zNDUtMS0xCithbHdheXMg7ZaTIDI0NS0zNDUtMS0zCithbHdheXMg7ZaUIDI0NS0zNDUtMjUKK2Fsd2F5cyDtlpUgMjQ1LTM0NS0yNS0xMworYWx3YXlzIO2WliAyNDUtMzQ1LTI1LTM1NgorYWx3YXlzIO2WlyAyNDUtMzQ1LTM1CithbHdheXMg7ZaYIDI0NS0zNDUtMgorYWx3YXlzIO2WmSAyNDUtMzQ1LTItMQorYWx3YXlzIO2WmiAyNDUtMzQ1LTItMjYKK2Fsd2F5cyDtlpsgMjQ1LTM0NS0yLTEyCithbHdheXMg7ZacIDI0NS0zNDUtMi0zCithbHdheXMg7ZadIDI0NS0zNDUtMi0yMzYKK2Fsd2F5cyDtlp4gMjQ1LTM0NS0yLTI1NgorYWx3YXlzIO2WnyAyNDUtMzQ1LTItMzU2CithbHdheXMg7ZagIDI0NS0zNDUtMjYKK2Fsd2F5cyDtlqEgMjQ1LTM0NS0xMgorYWx3YXlzIO2WoiAyNDUtMzQ1LTEyLTMKK2Fsd2F5cyDtlqMgMjQ1LTM0NS0zCithbHdheXMg7ZakIDI0NS0zNDUtMy0zCithbHdheXMg7ZalIDI0NS0zNDUtMjM1NgorYWx3YXlzIO2WpiAyNDUtMzQ1LTEzCithbHdheXMg7ZanIDI0NS0zNDUtMjMKK2Fsd2F5cyDtlqggMjQ1LTM0NS0yMzUKK2Fsd2F5cyDtlqkgMjQ1LTM0NS0yMzYKK2Fsd2F5cyDtlqogMjQ1LTM0NS0yNTYKK2Fsd2F5cyDtlqsgMjQ1LTM0NS0zNTYKK2Fsd2F5cyDtlqwgMjQ1LTM0NS0xMjM1CithbHdheXMg7ZatIDI0NS0zNDUtMTIzNS0xCithbHdheXMg7ZauIDI0NS0zNDUtMTIzNS0xLTEKK2Fsd2F5cyDtlq8gMjQ1LTM0NS0xMjM1LTEtMworYWx3YXlzIO2WsCAyNDUtMzQ1LTEyMzUtMjUKK2Fsd2F5cyDtlrEgMjQ1LTM0NS0xMjM1LTI1LTEzCithbHdheXMg7ZayIDI0NS0zNDUtMTIzNS0yNS0zNTYKK2Fsd2F5cyDtlrMgMjQ1LTM0NS0xMjM1LTM1CithbHdheXMg7Za0IDI0NS0zNDUtMTIzNS0yCithbHdheXMg7Za1IDI0NS0zNDUtMTIzNS0yLTEKK2Fsd2F5cyDtlrYgMjQ1LTM0NS0xMjM1LTItMjYKK2Fsd2F5cyDtlrcgMjQ1LTM0NS0xMjM1LTItMTIKK2Fsd2F5cyDtlrggMjQ1LTM0NS0xMjM1LTItMworYWx3YXlzIO2WuSAyNDUtMzQ1LTEyMzUtMi0yMzYKK2Fsd2F5cyDtlrogMjQ1LTM0NS0xMjM1LTItMjU2CithbHdheXMg7Za7IDI0NS0zNDUtMTIzNS0yLTM1NgorYWx3YXlzIO2WvCAyNDUtMzQ1LTEyMzUtMjYKK2Fsd2F5cyDtlr0gMjQ1LTM0NS0xMjM1LTEyCithbHdheXMg7Za+IDI0NS0zNDUtMTIzNS0xMi0zCithbHdheXMg7Za/IDI0NS0zNDUtMTIzNS0zCithbHdheXMg7ZeAIDI0NS0zNDUtMTIzNS0zLTMKK2Fsd2F5cyDtl4EgMjQ1LTM0NS0xMjM1LTIzNTYKK2Fsd2F5cyDtl4IgMjQ1LTM0NS0xMjM1LTEzCithbHdheXMg7ZeDIDI0NS0zNDUtMTIzNS0yMworYWx3YXlzIO2XhCAyNDUtMzQ1LTEyMzUtMjM1CithbHdheXMg7ZeFIDI0NS0zNDUtMTIzNS0yMzYKK2Fsd2F5cyDtl4YgMjQ1LTM0NS0xMjM1LTI1NgorYWx3YXlzIO2XhyAyNDUtMzQ1LTEyMzUtMzU2CithbHdheXMg7ZeIIDI0NS0yMzQKK2Fsd2F5cyDtl4kgMjQ1LTIzNC0xCithbHdheXMg7ZeKIDI0NS0yMzQtMS0xCithbHdheXMg7ZeLIDI0NS0yMzQtMS0zCithbHdheXMg7ZeMIDI0NS0yMzQtMjUKK2Fsd2F5cyDtl40gMjQ1LTIzNC0yNS0xMworYWx3YXlzIO2XjiAyNDUtMjM0LTI1LTM1NgorYWx3YXlzIO2XjyAyNDUtMjM0LTM1CithbHdheXMg7ZeQIDI0NS0yMzQtMgorYWx3YXlzIO2XkSAyNDUtMjM0LTItMQorYWx3YXlzIO2XkiAyNDUtMjM0LTItMjYKK2Fsd2F5cyDtl5MgMjQ1LTIzNC0yLTEyCithbHdheXMg7ZeUIDI0NS0yMzQtMi0zCithbHdheXMg7ZeVIDI0NS0yMzQtMi0yMzYKK2Fsd2F5cyDtl5YgMjQ1LTIzNC0yLTI1NgorYWx3YXlzIO2XlyAyNDUtMjM0LTItMzU2CithbHdheXMg7ZeYIDI0NS0yMzQtMjYKK2Fsd2F5cyDtl5kgMjQ1LTIzNC0xMgorYWx3YXlzIO2XmiAyNDUtMjM0LTEyLTMKK2Fsd2F5cyDtl5sgMjQ1LTIzNC0zCithbHdheXMg7ZecIDI0NS0yMzQtMy0zCithbHdheXMg7ZedIDI0NS0yMzQtMjM1NgorYWx3YXlzIO2XniAyNDUtMjM0LTEzCithbHdheXMg7ZefIDI0NS0yMzQtMjMKK2Fsd2F5cyDtl6AgMjQ1LTIzNC0yMzUKK2Fsd2F5cyDtl6EgMjQ1LTIzNC0yMzYKK2Fsd2F5cyDtl6IgMjQ1LTIzNC0yNTYKK2Fsd2F5cyDtl6MgMjQ1LTIzNC0zNTYKK2Fsd2F5cyDtl6QgMjQ1LTEzNDUKK2Fsd2F5cyDtl6UgMjQ1LTEzNDUtMQorYWx3YXlzIO2XpiAyNDUtMTM0NS0xLTEKK2Fsd2F5cyDtl6cgMjQ1LTEzNDUtMS0zCithbHdheXMg7ZeoIDI0NS0xMzQ1LTI1CithbHdheXMg7ZepIDI0NS0xMzQ1LTI1LTEzCithbHdheXMg7ZeqIDI0NS0xMzQ1LTI1LTM1NgorYWx3YXlzIO2XqyAyNDUtMTM0NS0zNQorYWx3YXlzIO2XrCAyNDUtMTM0NS0yCithbHdheXMg7ZetIDI0NS0xMzQ1LTItMQorYWx3YXlzIO2XriAyNDUtMTM0NS0yLTI2CithbHdheXMg7ZevIDI0NS0xMzQ1LTItMTIKK2Fsd2F5cyDtl7AgMjQ1LTEzNDUtMi0zCithbHdheXMg7ZexIDI0NS0xMzQ1LTItMjM2CithbHdheXMg7ZeyIDI0NS0xMzQ1LTItMjU2CithbHdheXMg7ZezIDI0NS0xMzQ1LTItMzU2CithbHdheXMg7Ze0IDI0NS0xMzQ1LTI2CithbHdheXMg7Ze1IDI0NS0xMzQ1LTEyCithbHdheXMg7Ze2IDI0NS0xMzQ1LTEyLTMKK2Fsd2F5cyDtl7cgMjQ1LTEzNDUtMworYWx3YXlzIO2XuCAyNDUtMTM0NS0zLTMKK2Fsd2F5cyDtl7kgMjQ1LTEzNDUtMjM1NgorYWx3YXlzIO2XuiAyNDUtMTM0NS0xMworYWx3YXlzIO2XuyAyNDUtMTM0NS0yMworYWx3YXlzIO2XvCAyNDUtMTM0NS0yMzUKK2Fsd2F5cyDtl70gMjQ1LTEzNDUtMjM2CithbHdheXMg7Ze+IDI0NS0xMzQ1LTI1NgorYWx3YXlzIO2XvyAyNDUtMTM0NS0zNTYKK2Fsd2F5cyDtmIAgMjQ1LTE1NgorYWx3YXlzIO2YgSAyNDUtMTU2LTEKK2Fsd2F5cyDtmIIgMjQ1LTE1Ni0xLTEKK2Fsd2F5cyDtmIMgMjQ1LTE1Ni0xLTMKK2Fsd2F5cyDtmIQgMjQ1LTE1Ni0yNQorYWx3YXlzIO2YhSAyNDUtMTU2LTI1LTEzCithbHdheXMg7ZiGIDI0NS0xNTYtMjUtMzU2CithbHdheXMg7ZiHIDI0NS0xNTYtMzUKK2Fsd2F5cyDtmIggMjQ1LTE1Ni0yCithbHdheXMg7ZiJIDI0NS0xNTYtMi0xCithbHdheXMg7ZiKIDI0NS0xNTYtMi0yNgorYWx3YXlzIO2YiyAyNDUtMTU2LTItMTIKK2Fsd2F5cyDtmIwgMjQ1LTE1Ni0yLTMKK2Fsd2F5cyDtmI0gMjQ1LTE1Ni0yLTIzNgorYWx3YXlzIO2YjiAyNDUtMTU2LTItMjU2CithbHdheXMg7ZiPIDI0NS0xNTYtMi0zNTYKK2Fsd2F5cyDtmJAgMjQ1LTE1Ni0yNgorYWx3YXlzIO2YkSAyNDUtMTU2LTEyCithbHdheXMg7ZiSIDI0NS0xNTYtMTItMworYWx3YXlzIO2YkyAyNDUtMTU2LTMKK2Fsd2F5cyDtmJQgMjQ1LTE1Ni0zLTMKK2Fsd2F5cyDtmJUgMjQ1LTE1Ni0yMzU2CithbHdheXMg7ZiWIDI0NS0xNTYtMTMKK2Fsd2F5cyDtmJcgMjQ1LTE1Ni0yMworYWx3YXlzIO2YmCAyNDUtMTU2LTIzNQorYWx3YXlzIO2YmSAyNDUtMTU2LTIzNgorYWx3YXlzIO2YmiAyNDUtMTU2LTI1NgorYWx3YXlzIO2YmyAyNDUtMTU2LTM1NgorYWx3YXlzIO2YnCAyNDUtMzQKK2Fsd2F5cyDtmJ0gMjQ1LTM0LTEKK2Fsd2F5cyDtmJ4gMjQ1LTM0LTEtMQorYWx3YXlzIO2YnyAyNDUtMzQtMS0zCithbHdheXMg7ZigIDI0NS0zNC0yNQorYWx3YXlzIO2YoSAyNDUtMzQtMjUtMTMKK2Fsd2F5cyDtmKIgMjQ1LTM0LTI1LTM1NgorYWx3YXlzIO2YoyAyNDUtMzQtMzUKK2Fsd2F5cyDtmKQgMjQ1LTM0LTIKK2Fsd2F5cyDtmKUgMjQ1LTM0LTItMQorYWx3YXlzIO2YpiAyNDUtMzQtMi0yNgorYWx3YXlzIO2YpyAyNDUtMzQtMi0xMgorYWx3YXlzIO2YqCAyNDUtMzQtMi0zCithbHdheXMg7ZipIDI0NS0zNC0yLTIzNgorYWx3YXlzIO2YqiAyNDUtMzQtMi0yNTYKK2Fsd2F5cyDtmKsgMjQ1LTM0LTItMzU2CithbHdheXMg7ZisIDI0NS0zNC0yNgorYWx3YXlzIO2YrSAyNDUtMzQtMTIKK2Fsd2F5cyDtmK4gMjQ1LTM0LTEyLTMKK2Fsd2F5cyDtmK8gMjQ1LTM0LTMKK2Fsd2F5cyDtmLAgMjQ1LTM0LTMtMworYWx3YXlzIO2YsSAyNDUtMzQtMjM1NgorYWx3YXlzIO2YsiAyNDUtMzQtMTMKK2Fsd2F5cyDtmLMgMjQ1LTM0LTIzCithbHdheXMg7Zi0IDI0NS0zNC0yMzUKK2Fsd2F5cyDtmLUgMjQ1LTM0LTIzNgorYWx3YXlzIO2YtiAyNDUtMzQtMjU2CithbHdheXMg7Zi3IDI0NS0zNC0zNTYKK2Fsd2F5cyDtmLggMjQ1LTEzNgorYWx3YXlzIO2YuSAyNDUtMTM2LTEKK2Fsd2F5cyDtmLogMjQ1LTEzNi0xLTEKK2Fsd2F5cyDtmLsgMjQ1LTEzNi0xLTMKK2Fsd2F5cyDtmLwgMjQ1LTEzNi0yNQorYWx3YXlzIO2YvSAyNDUtMTM2LTI1LTEzCithbHdheXMg7Zi+IDI0NS0xMzYtMjUtMzU2CithbHdheXMg7Zi/IDI0NS0xMzYtMzUKK2Fsd2F5cyDtmYAgMjQ1LTEzNi0yCithbHdheXMg7ZmBIDI0NS0xMzYtMi0xCithbHdheXMg7ZmCIDI0NS0xMzYtMi0yNgorYWx3YXlzIO2ZgyAyNDUtMTM2LTItMTIKK2Fsd2F5cyDtmYQgMjQ1LTEzNi0yLTMKK2Fsd2F5cyDtmYUgMjQ1LTEzNi0yLTIzNgorYWx3YXlzIO2ZhiAyNDUtMTM2LTItMjU2CithbHdheXMg7ZmHIDI0NS0xMzYtMi0zNTYKK2Fsd2F5cyDtmYggMjQ1LTEzNi0yNgorYWx3YXlzIO2ZiSAyNDUtMTM2LTEyCithbHdheXMg7ZmKIDI0NS0xMzYtMTItMworYWx3YXlzIO2ZiyAyNDUtMTM2LTMKK2Fsd2F5cyDtmYwgMjQ1LTEzNi0zLTMKK2Fsd2F5cyDtmY0gMjQ1LTEzNi0yMzU2CithbHdheXMg7ZmOIDI0NS0xMzYtMTMKK2Fsd2F5cyDtmY8gMjQ1LTEzNi0yMworYWx3YXlzIO2ZkCAyNDUtMTM2LTIzNQorYWx3YXlzIO2ZkSAyNDUtMTM2LTIzNgorYWx3YXlzIO2ZkiAyNDUtMTM2LTI1NgorYWx3YXlzIO2ZkyAyNDUtMTM2LTM1NgorYWx3YXlzIO2ZlCAyNDUtMTIzNgorYWx3YXlzIO2ZlSAyNDUtMTIzNi0xCithbHdheXMg7ZmWIDI0NS0xMjM2LTEtMQorYWx3YXlzIO2ZlyAyNDUtMTIzNi0xLTMKK2Fsd2F5cyDtmZggMjQ1LTEyMzYtMjUKK2Fsd2F5cyDtmZkgMjQ1LTEyMzYtMjUtMTMKK2Fsd2F5cyDtmZogMjQ1LTEyMzYtMjUtMzU2CithbHdheXMg7ZmbIDI0NS0xMjM2LTM1CithbHdheXMg7ZmcIDI0NS0xMjM2LTIKK2Fsd2F5cyDtmZ0gMjQ1LTEyMzYtMi0xCithbHdheXMg7ZmeIDI0NS0xMjM2LTItMjYKK2Fsd2F5cyDtmZ8gMjQ1LTEyMzYtMi0xMgorYWx3YXlzIO2ZoCAyNDUtMTIzNi0yLTMKK2Fsd2F5cyDtmaEgMjQ1LTEyMzYtMi0yMzYKK2Fsd2F5cyDtmaIgMjQ1LTEyMzYtMi0yNTYKK2Fsd2F5cyDtmaMgMjQ1LTEyMzYtMi0zNTYKK2Fsd2F5cyDtmaQgMjQ1LTEyMzYtMjYKK2Fsd2F5cyDtmaUgMjQ1LTEyMzYtMTIKK2Fsd2F5cyDtmaYgMjQ1LTEyMzYtMTItMworYWx3YXlzIO2ZpyAyNDUtMTIzNi0zCithbHdheXMg7ZmoIDI0NS0xMjM2LTMtMworYWx3YXlzIO2ZqSAyNDUtMTIzNi0yMzU2CithbHdheXMg7ZmqIDI0NS0xMjM2LTEzCithbHdheXMg7ZmrIDI0NS0xMjM2LTIzCithbHdheXMg7ZmsIDI0NS0xMjM2LTIzNQorYWx3YXlzIO2ZrSAyNDUtMTIzNi0yMzYKK2Fsd2F5cyDtma4gMjQ1LTEyMzYtMjU2CithbHdheXMg7ZmvIDI0NS0xMjM2LTM1NgorYWx3YXlzIO2ZsCAyNDUtMTIzNi0xMjM1CithbHdheXMg7ZmxIDI0NS0xMjM2LTEyMzUtMQorYWx3YXlzIO2ZsiAyNDUtMTIzNi0xMjM1LTEtMQorYWx3YXlzIO2ZsyAyNDUtMTIzNi0xMjM1LTEtMworYWx3YXlzIO2ZtCAyNDUtMTIzNi0xMjM1LTI1CithbHdheXMg7Zm1IDI0NS0xMjM2LTEyMzUtMjUtMTMKK2Fsd2F5cyDtmbYgMjQ1LTEyMzYtMTIzNS0yNS0zNTYKK2Fsd2F5cyDtmbcgMjQ1LTEyMzYtMTIzNS0zNQorYWx3YXlzIO2ZuCAyNDUtMTIzNi0xMjM1LTIKK2Fsd2F5cyDtmbkgMjQ1LTEyMzYtMTIzNS0yLTEKK2Fsd2F5cyDtmbogMjQ1LTEyMzYtMTIzNS0yLTI2CithbHdheXMg7Zm7IDI0NS0xMjM2LTEyMzUtMi0xMgorYWx3YXlzIO2ZvCAyNDUtMTIzNi0xMjM1LTItMworYWx3YXlzIO2ZvSAyNDUtMTIzNi0xMjM1LTItMjM2CithbHdheXMg7Zm+IDI0NS0xMjM2LTEyMzUtMi0yNTYKK2Fsd2F5cyDtmb8gMjQ1LTEyMzYtMTIzNS0yLTM1NgorYWx3YXlzIO2agCAyNDUtMTIzNi0xMjM1LTI2CithbHdheXMg7ZqBIDI0NS0xMjM2LTEyMzUtMTIKK2Fsd2F5cyDtmoIgMjQ1LTEyMzYtMTIzNS0xMi0zCithbHdheXMg7ZqDIDI0NS0xMjM2LTEyMzUtMworYWx3YXlzIO2ahCAyNDUtMTIzNi0xMjM1LTMtMworYWx3YXlzIO2ahSAyNDUtMTIzNi0xMjM1LTIzNTYKK2Fsd2F5cyDtmoYgMjQ1LTEyMzYtMTIzNS0xMworYWx3YXlzIO2ahyAyNDUtMTIzNi0xMjM1LTIzCithbHdheXMg7ZqIIDI0NS0xMjM2LTEyMzUtMjM1CithbHdheXMg7ZqJIDI0NS0xMjM2LTEyMzUtMjM2CithbHdheXMg7ZqKIDI0NS0xMjM2LTEyMzUtMjU2CithbHdheXMg7ZqLIDI0NS0xMjM2LTEyMzUtMzU2CithbHdheXMg7ZqMIDI0NS0xMzQ1NgorYWx3YXlzIO2ajSAyNDUtMTM0NTYtMQorYWx3YXlzIO2ajiAyNDUtMTM0NTYtMS0xCithbHdheXMg7ZqPIDI0NS0xMzQ1Ni0xLTMKK2Fsd2F5cyDtmpAgMjQ1LTEzNDU2LTI1CithbHdheXMg7ZqRIDI0NS0xMzQ1Ni0yNS0xMworYWx3YXlzIO2akiAyNDUtMTM0NTYtMjUtMzU2CithbHdheXMg7ZqTIDI0NS0xMzQ1Ni0zNQorYWx3YXlzIO2alCAyNDUtMTM0NTYtMgorYWx3YXlzIO2alSAyNDUtMTM0NTYtMi0xCithbHdheXMg7ZqWIDI0NS0xMzQ1Ni0yLTI2CithbHdheXMg7ZqXIDI0NS0xMzQ1Ni0yLTEyCithbHdheXMg7ZqYIDI0NS0xMzQ1Ni0yLTMKK2Fsd2F5cyDtmpkgMjQ1LTEzNDU2LTItMjM2CithbHdheXMg7ZqaIDI0NS0xMzQ1Ni0yLTI1NgorYWx3YXlzIO2amyAyNDUtMTM0NTYtMi0zNTYKK2Fsd2F5cyDtmpwgMjQ1LTEzNDU2LTI2CithbHdheXMg7ZqdIDI0NS0xMzQ1Ni0xMgorYWx3YXlzIO2aniAyNDUtMTM0NTYtMTItMworYWx3YXlzIO2anyAyNDUtMTM0NTYtMworYWx3YXlzIO2aoCAyNDUtMTM0NTYtMy0zCithbHdheXMg7ZqhIDI0NS0xMzQ1Ni0yMzU2CithbHdheXMg7ZqiIDI0NS0xMzQ1Ni0xMworYWx3YXlzIO2aoyAyNDUtMTM0NTYtMjMKK2Fsd2F5cyDtmqQgMjQ1LTEzNDU2LTIzNQorYWx3YXlzIO2apSAyNDUtMTM0NTYtMjM2CithbHdheXMg7ZqmIDI0NS0xMzQ1Ni0yNTYKK2Fsd2F5cyDtmqcgMjQ1LTEzNDU2LTM1NgorYWx3YXlzIO2aqCAyNDUtMzQ2CithbHdheXMg7ZqpIDI0NS0zNDYtMQorYWx3YXlzIO2aqiAyNDUtMzQ2LTEtMQorYWx3YXlzIO2aqyAyNDUtMzQ2LTEtMworYWx3YXlzIO2arCAyNDUtMzQ2LTI1CithbHdheXMg7ZqtIDI0NS0zNDYtMjUtMTMKK2Fsd2F5cyDtmq4gMjQ1LTM0Ni0yNS0zNTYKK2Fsd2F5cyDtmq8gMjQ1LTM0Ni0zNQorYWx3YXlzIO2asCAyNDUtMzQ2LTIKK2Fsd2F5cyDtmrEgMjQ1LTM0Ni0yLTEKK2Fsd2F5cyDtmrIgMjQ1LTM0Ni0yLTI2CithbHdheXMg7ZqzIDI0NS0zNDYtMi0xMgorYWx3YXlzIO2atCAyNDUtMzQ2LTItMworYWx3YXlzIO2atSAyNDUtMzQ2LTItMjM2CithbHdheXMg7Zq2IDI0NS0zNDYtMi0yNTYKK2Fsd2F5cyDtmrcgMjQ1LTM0Ni0yLTM1NgorYWx3YXlzIO2auCAyNDUtMzQ2LTI2CithbHdheXMg7Zq5IDI0NS0zNDYtMTIKK2Fsd2F5cyDtmrogMjQ1LTM0Ni0xMi0zCithbHdheXMg7Zq7IDI0NS0zNDYtMworYWx3YXlzIO2avCAyNDUtMzQ2LTMtMworYWx3YXlzIO2avSAyNDUtMzQ2LTIzNTYKK2Fsd2F5cyDtmr4gMjQ1LTM0Ni0xMworYWx3YXlzIO2avyAyNDUtMzQ2LTIzCithbHdheXMg7ZuAIDI0NS0zNDYtMjM1CithbHdheXMg7ZuBIDI0NS0zNDYtMjM2CithbHdheXMg7ZuCIDI0NS0zNDYtMjU2CithbHdheXMg7ZuDIDI0NS0zNDYtMzU2CithbHdheXMg7ZuEIDI0NS0xMzQKK2Fsd2F5cyDtm4UgMjQ1LTEzNC0xCithbHdheXMg7ZuGIDI0NS0xMzQtMS0xCithbHdheXMg7ZuHIDI0NS0xMzQtMS0zCithbHdheXMg7ZuIIDI0NS0xMzQtMjUKK2Fsd2F5cyDtm4kgMjQ1LTEzNC0yNS0xMworYWx3YXlzIO2biiAyNDUtMTM0LTI1LTM1NgorYWx3YXlzIO2biyAyNDUtMTM0LTM1CithbHdheXMg7ZuMIDI0NS0xMzQtMgorYWx3YXlzIO2bjSAyNDUtMTM0LTItMQorYWx3YXlzIO2bjiAyNDUtMTM0LTItMjYKK2Fsd2F5cyDtm48gMjQ1LTEzNC0yLTEyCithbHdheXMg7ZuQIDI0NS0xMzQtMi0zCithbHdheXMg7ZuRIDI0NS0xMzQtMi0yMzYKK2Fsd2F5cyDtm5IgMjQ1LTEzNC0yLTI1NgorYWx3YXlzIO2bkyAyNDUtMTM0LTItMzU2CithbHdheXMg7ZuUIDI0NS0xMzQtMjYKK2Fsd2F5cyDtm5UgMjQ1LTEzNC0xMgorYWx3YXlzIO2bliAyNDUtMTM0LTEyLTMKK2Fsd2F5cyDtm5cgMjQ1LTEzNC0zCithbHdheXMg7ZuYIDI0NS0xMzQtMy0zCithbHdheXMg7ZuZIDI0NS0xMzQtMjM1NgorYWx3YXlzIO2bmiAyNDUtMTM0LTEzCithbHdheXMg7ZubIDI0NS0xMzQtMjMKK2Fsd2F5cyDtm5wgMjQ1LTEzNC0yMzUKK2Fsd2F5cyDtm50gMjQ1LTEzNC0yMzYKK2Fsd2F5cyDtm54gMjQ1LTEzNC0yNTYKK2Fsd2F5cyDtm58gMjQ1LTEzNC0zNTYKK2Fsd2F5cyDtm6AgMjQ1LTEyMzQKK2Fsd2F5cyDtm6EgMjQ1LTEyMzQtMQorYWx3YXlzIO2boiAyNDUtMTIzNC0xLTEKK2Fsd2F5cyDtm6MgMjQ1LTEyMzQtMS0zCithbHdheXMg7ZukIDI0NS0xMjM0LTI1CithbHdheXMg7ZulIDI0NS0xMjM0LTI1LTEzCithbHdheXMg7ZumIDI0NS0xMjM0LTI1LTM1NgorYWx3YXlzIO2bpyAyNDUtMTIzNC0zNQorYWx3YXlzIO2bqCAyNDUtMTIzNC0yCithbHdheXMg7ZupIDI0NS0xMjM0LTItMQorYWx3YXlzIO2bqiAyNDUtMTIzNC0yLTI2CithbHdheXMg7ZurIDI0NS0xMjM0LTItMTIKK2Fsd2F5cyDtm6wgMjQ1LTEyMzQtMi0zCithbHdheXMg7ZutIDI0NS0xMjM0LTItMjM2CithbHdheXMg7ZuuIDI0NS0xMjM0LTItMjU2CithbHdheXMg7ZuvIDI0NS0xMjM0LTItMzU2CithbHdheXMg7ZuwIDI0NS0xMjM0LTI2CithbHdheXMg7ZuxIDI0NS0xMjM0LTEyCithbHdheXMg7ZuyIDI0NS0xMjM0LTEyLTMKK2Fsd2F5cyDtm7MgMjQ1LTEyMzQtMworYWx3YXlzIO2btCAyNDUtMTIzNC0zLTMKK2Fsd2F5cyDtm7UgMjQ1LTEyMzQtMjM1NgorYWx3YXlzIO2btiAyNDUtMTIzNC0xMworYWx3YXlzIO2btyAyNDUtMTIzNC0yMworYWx3YXlzIO2buCAyNDUtMTIzNC0yMzUKK2Fsd2F5cyDtm7kgMjQ1LTEyMzQtMjM2CithbHdheXMg7Zu6IDI0NS0xMjM0LTI1NgorYWx3YXlzIO2buyAyNDUtMTIzNC0zNTYKK2Fsd2F5cyDtm7wgMjQ1LTEyMzQtMTIzNQorYWx3YXlzIO2bvSAyNDUtMTIzNC0xMjM1LTEKK2Fsd2F5cyDtm74gMjQ1LTEyMzQtMTIzNS0xLTEKK2Fsd2F5cyDtm78gMjQ1LTEyMzQtMTIzNS0xLTMKK2Fsd2F5cyDtnIAgMjQ1LTEyMzQtMTIzNS0yNQorYWx3YXlzIO2cgSAyNDUtMTIzNC0xMjM1LTI1LTEzCithbHdheXMg7ZyCIDI0NS0xMjM0LTEyMzUtMjUtMzU2CithbHdheXMg7ZyDIDI0NS0xMjM0LTEyMzUtMzUKK2Fsd2F5cyDtnIQgMjQ1LTEyMzQtMTIzNS0yCithbHdheXMg7ZyFIDI0NS0xMjM0LTEyMzUtMi0xCithbHdheXMg7ZyGIDI0NS0xMjM0LTEyMzUtMi0yNgorYWx3YXlzIO2chyAyNDUtMTIzNC0xMjM1LTItMTIKK2Fsd2F5cyDtnIggMjQ1LTEyMzQtMTIzNS0yLTMKK2Fsd2F5cyDtnIkgMjQ1LTEyMzQtMTIzNS0yLTIzNgorYWx3YXlzIO2ciiAyNDUtMTIzNC0xMjM1LTItMjU2CithbHdheXMg7ZyLIDI0NS0xMjM0LTEyMzUtMi0zNTYKK2Fsd2F5cyDtnIwgMjQ1LTEyMzQtMTIzNS0yNgorYWx3YXlzIO2cjSAyNDUtMTIzNC0xMjM1LTEyCithbHdheXMg7ZyOIDI0NS0xMjM0LTEyMzUtMTItMworYWx3YXlzIO2cjyAyNDUtMTIzNC0xMjM1LTMKK2Fsd2F5cyDtnJAgMjQ1LTEyMzQtMTIzNS0zLTMKK2Fsd2F5cyDtnJEgMjQ1LTEyMzQtMTIzNS0yMzU2CithbHdheXMg7ZySIDI0NS0xMjM0LTEyMzUtMTMKK2Fsd2F5cyDtnJMgMjQ1LTEyMzQtMTIzNS0yMworYWx3YXlzIO2clCAyNDUtMTIzNC0xMjM1LTIzNQorYWx3YXlzIO2clSAyNDUtMTIzNC0xMjM1LTIzNgorYWx3YXlzIO2cliAyNDUtMTIzNC0xMjM1LTI1NgorYWx3YXlzIO2clyAyNDUtMTIzNC0xMjM1LTM1NgorYWx3YXlzIO2cmCAyNDUtMTM0LTEyMzUKK2Fsd2F5cyDtnJkgMjQ1LTEzNC0xMjM1LTEKK2Fsd2F5cyDtnJogMjQ1LTEzNC0xMjM1LTEtMQorYWx3YXlzIO2cmyAyNDUtMTM0LTEyMzUtMS0zCithbHdheXMg7ZycIDI0NS0xMzQtMTIzNS0yNQorYWx3YXlzIO2cnSAyNDUtMTM0LTEyMzUtMjUtMTMKK2Fsd2F5cyDtnJ4gMjQ1LTEzNC0xMjM1LTI1LTM1NgorYWx3YXlzIO2cnyAyNDUtMTM0LTEyMzUtMzUKK2Fsd2F5cyDtnKAgMjQ1LTEzNC0xMjM1LTIKK2Fsd2F5cyDtnKEgMjQ1LTEzNC0xMjM1LTItMQorYWx3YXlzIO2coiAyNDUtMTM0LTEyMzUtMi0yNgorYWx3YXlzIO2coyAyNDUtMTM0LTEyMzUtMi0xMgorYWx3YXlzIO2cpCAyNDUtMTM0LTEyMzUtMi0zCithbHdheXMg7ZylIDI0NS0xMzQtMTIzNS0yLTIzNgorYWx3YXlzIO2cpiAyNDUtMTM0LTEyMzUtMi0yNTYKK2Fsd2F5cyDtnKcgMjQ1LTEzNC0xMjM1LTItMzU2CithbHdheXMg7ZyoIDI0NS0xMzQtMTIzNS0yNgorYWx3YXlzIO2cqSAyNDUtMTM0LTEyMzUtMTIKK2Fsd2F5cyDtnKogMjQ1LTEzNC0xMjM1LTEyLTMKK2Fsd2F5cyDtnKsgMjQ1LTEzNC0xMjM1LTMKK2Fsd2F5cyDtnKwgMjQ1LTEzNC0xMjM1LTMtMworYWx3YXlzIO2crSAyNDUtMTM0LTEyMzUtMjM1NgorYWx3YXlzIO2criAyNDUtMTM0LTEyMzUtMTMKK2Fsd2F5cyDtnK8gMjQ1LTEzNC0xMjM1LTIzCithbHdheXMg7ZywIDI0NS0xMzQtMTIzNS0yMzUKK2Fsd2F5cyDtnLEgMjQ1LTEzNC0xMjM1LTIzNgorYWx3YXlzIO2csiAyNDUtMTM0LTEyMzUtMjU2CithbHdheXMg7ZyzIDI0NS0xMzQtMTIzNS0zNTYKK2Fsd2F5cyDtnLQgMjQ1LTE0NgorYWx3YXlzIO2ctSAyNDUtMTQ2LTEKK2Fsd2F5cyDtnLYgMjQ1LTE0Ni0xLTEKK2Fsd2F5cyDtnLcgMjQ1LTE0Ni0xLTMKK2Fsd2F5cyDtnLggMjQ1LTE0Ni0yNQorYWx3YXlzIO2cuSAyNDUtMTQ2LTI1LTEzCithbHdheXMg7Zy6IDI0NS0xNDYtMjUtMzU2CithbHdheXMg7Zy7IDI0NS0xNDYtMzUKK2Fsd2F5cyDtnLwgMjQ1LTE0Ni0yCithbHdheXMg7Zy9IDI0NS0xNDYtMi0xCithbHdheXMg7Zy+IDI0NS0xNDYtMi0yNgorYWx3YXlzIO2cvyAyNDUtMTQ2LTItMTIKK2Fsd2F5cyDtnYAgMjQ1LTE0Ni0yLTMKK2Fsd2F5cyDtnYEgMjQ1LTE0Ni0yLTIzNgorYWx3YXlzIO2dgiAyNDUtMTQ2LTItMjU2CithbHdheXMg7Z2DIDI0NS0xNDYtMi0zNTYKK2Fsd2F5cyDtnYQgMjQ1LTE0Ni0yNgorYWx3YXlzIO2dhSAyNDUtMTQ2LTEyCithbHdheXMg7Z2GIDI0NS0xNDYtMTItMworYWx3YXlzIO2dhyAyNDUtMTQ2LTMKK2Fsd2F5cyDtnYggMjQ1LTE0Ni0zLTMKK2Fsd2F5cyDtnYkgMjQ1LTE0Ni0yMzU2CithbHdheXMg7Z2KIDI0NS0xNDYtMTMKK2Fsd2F5cyDtnYsgMjQ1LTE0Ni0yMworYWx3YXlzIO2djCAyNDUtMTQ2LTIzNQorYWx3YXlzIO2djSAyNDUtMTQ2LTIzNgorYWx3YXlzIO2djiAyNDUtMTQ2LTI1NgorYWx3YXlzIO2djyAyNDUtMTQ2LTM1NgorYWx3YXlzIO2dkCAyNDUtMjQ2CithbHdheXMg7Z2RIDI0NS0yNDYtMQorYWx3YXlzIO2dkiAyNDUtMjQ2LTEtMQorYWx3YXlzIO2dkyAyNDUtMjQ2LTEtMworYWx3YXlzIO2dlCAyNDUtMjQ2LTI1CithbHdheXMg7Z2VIDI0NS0yNDYtMjUtMTMKK2Fsd2F5cyDtnZYgMjQ1LTI0Ni0yNS0zNTYKK2Fsd2F5cyDtnZcgMjQ1LTI0Ni0zNQorYWx3YXlzIO2dmCAyNDUtMjQ2LTIKK2Fsd2F5cyDtnZkgMjQ1LTI0Ni0yLTEKK2Fsd2F5cyDtnZogMjQ1LTI0Ni0yLTI2CithbHdheXMg7Z2bIDI0NS0yNDYtMi0xMgorYWx3YXlzIO2dnCAyNDUtMjQ2LTItMworYWx3YXlzIO2dnSAyNDUtMjQ2LTItMjM2CithbHdheXMg7Z2eIDI0NS0yNDYtMi0yNTYKK2Fsd2F5cyDtnZ8gMjQ1LTI0Ni0yLTM1NgorYWx3YXlzIO2doCAyNDUtMjQ2LTI2CithbHdheXMg7Z2hIDI0NS0yNDYtMTIKK2Fsd2F5cyDtnaIgMjQ1LTI0Ni0xMi0zCithbHdheXMg7Z2jIDI0NS0yNDYtMworYWx3YXlzIO2dpCAyNDUtMjQ2LTMtMworYWx3YXlzIO2dpSAyNDUtMjQ2LTIzNTYKK2Fsd2F5cyDtnaYgMjQ1LTI0Ni0xMworYWx3YXlzIO2dpyAyNDUtMjQ2LTIzCithbHdheXMg7Z2oIDI0NS0yNDYtMjM1CithbHdheXMg7Z2pIDI0NS0yNDYtMjM2CithbHdheXMg7Z2qIDI0NS0yNDYtMjU2CithbHdheXMg7Z2rIDI0NS0yNDYtMzU2CithbHdheXMg7Z2sIDI0NS0yNDU2CithbHdheXMg7Z2tIDI0NS0yNDU2LTEKK2Fsd2F5cyDtna4gMjQ1LTI0NTYtMS0xCithbHdheXMg7Z2vIDI0NS0yNDU2LTEtMworYWx3YXlzIO2dsCAyNDUtMjQ1Ni0yNQorYWx3YXlzIO2dsSAyNDUtMjQ1Ni0yNS0xMworYWx3YXlzIO2dsiAyNDUtMjQ1Ni0yNS0zNTYKK2Fsd2F5cyDtnbMgMjQ1LTI0NTYtMzUKK2Fsd2F5cyDtnbQgMjQ1LTI0NTYtMgorYWx3YXlzIO2dtSAyNDUtMjQ1Ni0yLTEKK2Fsd2F5cyDtnbYgMjQ1LTI0NTYtMi0yNgorYWx3YXlzIO2dtyAyNDUtMjQ1Ni0yLTEyCithbHdheXMg7Z24IDI0NS0yNDU2LTItMworYWx3YXlzIO2duSAyNDUtMjQ1Ni0yLTIzNgorYWx3YXlzIO2duiAyNDUtMjQ1Ni0yLTI1NgorYWx3YXlzIO2duyAyNDUtMjQ1Ni0yLTM1NgorYWx3YXlzIO2dvCAyNDUtMjQ1Ni0yNgorYWx3YXlzIO2dvSAyNDUtMjQ1Ni0xMgorYWx3YXlzIO2dviAyNDUtMjQ1Ni0xMi0zCithbHdheXMg7Z2/IDI0NS0yNDU2LTMKK2Fsd2F5cyDtnoAgMjQ1LTI0NTYtMy0zCithbHdheXMg7Z6BIDI0NS0yNDU2LTIzNTYKK2Fsd2F5cyDtnoIgMjQ1LTI0NTYtMTMKK2Fsd2F5cyDtnoMgMjQ1LTI0NTYtMjMKK2Fsd2F5cyDtnoQgMjQ1LTI0NTYtMjM1CithbHdheXMg7Z6FIDI0NS0yNDU2LTIzNgorYWx3YXlzIO2ehiAyNDUtMjQ1Ni0yNTYKK2Fsd2F5cyDtnocgMjQ1LTI0NTYtMzU2CithbHdheXMg7Z6IIDI0NS0xMzUKK2Fsd2F5cyDtnokgMjQ1LTEzNS0xCithbHdheXMg7Z6KIDI0NS0xMzUtMS0xCithbHdheXMg7Z6LIDI0NS0xMzUtMS0zCithbHdheXMg7Z6MIDI0NS0xMzUtMjUKK2Fsd2F5cyDtno0gMjQ1LTEzNS0yNS0xMworYWx3YXlzIO2ejiAyNDUtMTM1LTI1LTM1NgorYWx3YXlzIO2ejyAyNDUtMTM1LTM1CithbHdheXMg7Z6QIDI0NS0xMzUtMgorYWx3YXlzIO2ekSAyNDUtMTM1LTItMQorYWx3YXlzIO2ekiAyNDUtMTM1LTItMjYKK2Fsd2F5cyDtnpMgMjQ1LTEzNS0yLTEyCithbHdheXMg7Z6UIDI0NS0xMzUtMi0zCithbHdheXMg7Z6VIDI0NS0xMzUtMi0yMzYKK2Fsd2F5cyDtnpYgMjQ1LTEzNS0yLTI1NgorYWx3YXlzIO2elyAyNDUtMTM1LTItMzU2CithbHdheXMg7Z6YIDI0NS0xMzUtMjYKK2Fsd2F5cyDtnpkgMjQ1LTEzNS0xMgorYWx3YXlzIO2emiAyNDUtMTM1LTEyLTMKK2Fsd2F5cyDtnpsgMjQ1LTEzNS0zCithbHdheXMg7Z6cIDI0NS0xMzUtMy0zCithbHdheXMg7Z6dIDI0NS0xMzUtMjM1NgorYWx3YXlzIO2eniAyNDUtMTM1LTEzCithbHdheXMg7Z6fIDI0NS0xMzUtMjMKK2Fsd2F5cyDtnqAgMjQ1LTEzNS0yMzUKK2Fsd2F5cyDtnqEgMjQ1LTEzNS0yMzYKK2Fsd2F5cyDtnqIgMjQ1LTEzNS0yNTYKK2Fsd2F5cyDtnqMgMjQ1LTEzNS0zNTYKK2Fsd2F5cyDvvqAgMAorYWx3YXlzIO++oSAxCithbHdheXMg776iIDEtMQorYWx3YXlzIO++oyAxLTMKK2Fsd2F5cyDvvqQgMjUKK2Fsd2F5cyDvvqUgMjUtMTMKK2Fsd2F5cyDvvqYgMjUtMzU2CithbHdheXMg776nIDM1CithbHdheXMg776oIDM1LTM1CithbHdheXMg776pIDIKK2Fsd2F5cyDvvqogMi0xCithbHdheXMg776rIDItMjYKK2Fsd2F5cyDvvqwgMi0xMgorYWx3YXlzIO++rSAyLTMKK2Fsd2F5cyDvvq4gMi0yMzYKK2Fsd2F5cyDvvq8gMi0yNTYKK2Fsd2F5cyDvvrAgMi0zNTYKK2Fsd2F5cyDvvrEgMjYKK2Fsd2F5cyDvvrIgMTIKK2Fsd2F5cyDvvrMgMTItMTIKK2Fsd2F5cyDvvrQgMTItMworYWx3YXlzIO++tSAzCithbHdheXMg7762IDMtMworYWx3YXlzIO++tyAyMzU2CithbHdheXMg7764IDEzCithbHdheXMg7765IDEzLTEzCithbHdheXMg7766IDIzCithbHdheXMg7767IDIzNQorYWx3YXlzIO++vCAyMzYKK2Fsd2F5cyDvvr0gMjU2CithbHdheXMg776+IDM1NgorYWx3YXlzIO+/giAxMjYKK2Fsd2F5cyDvv4MgMTIzNQorYWx3YXlzIO+/hCAzNDUKK2Fsd2F5cyDvv4UgMzQ1LTEyMzUKK2Fsd2F5cyDvv4YgMjM0CithbHdheXMg77+HIDEzNDUKK2Fsd2F5cyDvv4ogMTU2CithbHdheXMg77+LIDM0CithbHdheXMg77+MIDEzNgorYWx3YXlzIO+/jSAxMjM2CithbHdheXMg77+OIDEyMzYtMTIzNQorYWx3YXlzIO+/jyAxMzQ1NgorYWx3YXlzIO+/kiAzNDYKK2Fsd2F5cyDvv5MgMTM0CithbHdheXMg77+UIDEyMzQKK2Fsd2F5cyDvv5UgMTIzNC0xMjM1CithbHdheXMg77+WIDEzNC0xMjM1CithbHdheXMg77+XIDE0NgorYWx3YXlzIO+/miAyNDYKK2Fsd2F5cyDvv5sgMjQ1NgorYWx3YXlzIO+/nCAxMzUKZGlmZiAtLWdpdCBhL1RhYmxlcy9Db250cmFjdGlvbi9rby1nMS5jdGIgYi9UYWJsZXMvQ29udHJhY3Rpb24va28tZzEuY3RiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVlNjQ2OTkKLS0tIC9kZXYvbnVsbAorKysgYi9UYWJsZXMvQ29udHJhY3Rpb24va28tZzEuY3RiCkBAIC0wLDAgKzEsNDEgQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyMgICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisjCisjIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyMKKyMgQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjIEJSTFRUWSBDb250cmFjdGlvbiBUYWJsZSAtIEtvcmVhbiAoZ3JhZGUgMSkKKyMKKyMgU2FtdWVsIFRoaWJhdWx0IDxzYW11ZWwudGhpYmF1bHRAZW5zLWx5b24ub3JnPgorCitpbmNsdWRlIGtvLWcwLmN0YgorCithbHdheXMg6rCAIDEyNDYKK2Fsd2F5cyDsgqwgMTIzCithbHdheXMg6rKDIDQ1NgorYWx3YXlzIOyWtSAxNDU2CithbHdheXMg7Ja4IDIzNDU2CithbHdheXMg7Ja8IDIzNDUKK2Fsd2F5cyDsl7AgMTYKK2Fsd2F5cyDsl7QgMTI1NgorYWx3YXlzIOyYgSAxMjQ1NgorYWx3YXlzIOyYpSAxMzQ2CithbHdheXMg7JioIDEyMzU2CithbHdheXMg7Ji5IDEyMzQ1NgorYWx3YXlzIOyatCAxMjQ1CithbHdheXMg7Jq4IDEyMzQ2CithbHdheXMg7J2AIDEzNTYKK2Fsd2F5cyDsnYQgMjM0NgorYWx3YXlzIOyduCAxMjM0NQpkaWZmIC0tZ2l0IGEvVGFibGVzL0NvbnRyYWN0aW9uL2tvLWcyLmN0YiBiL1RhYmxlcy9Db250cmFjdGlvbi9rby1nMi5jdGIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWY0YjgzOQotLS0gL2Rldi9udWxsCisrKyBiL1RhYmxlcy9Db250cmFjdGlvbi9rby1nMi5jdGIKQEAgLTAsMCArMSwzNCBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorIyAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyMKKyMgQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorIworIyBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorIworIyBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisjIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyMgbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisjCisjIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMgQlJMVFRZIENvbnRyYWN0aW9uIFRhYmxlIC0gS29yZWFuIChncmFkZSAyKQorIworIyBTYW11ZWwgVGhpYmF1bHQgPHNhbXVlbC50aGliYXVsdEBlbnMtbHlvbi5vcmc+CisKK2luY2x1ZGUga28tZzEuY3RiCisKK2Fsd2F5cyDqt7jrnpjshJwJMjM0CithbHdheXMg6re465+s64KYCTE0CithbHdheXMg6re465+s66m0CTI1CithbHdheXMg6re465+s66+A66GcCTI2CithbHdheXMg6re465+w642wCTEzNDUKK2Fsd2F5cyDqt7jrpqzqs6AJMTM2CithbHdheXMg6re466as7ZWY7JesCTE1NgorCisjIGlubGluZSBjb250cmFjdGlvbiBvZiBlbW9qaSBkZXNjcmlwdGlvbnMKK2Vtb2ppIGtvCmRpZmYgLS1naXQgYS9UYWJsZXMvQ29udHJhY3Rpb24va28uY3RiIGIvVGFibGVzL0NvbnRyYWN0aW9uL2tvLmN0YgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MzNmNmQ5Ci0tLSAvZGV2L251bGwKKysrIGIvVGFibGVzL0NvbnRyYWN0aW9uL2tvLmN0YgpAQCAtMCwwICsxLDIxIEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisjICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorIworIyBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisjCisjIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisjCisjIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyMgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorIyBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyMKKyMgV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworIworIyBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIyBCUkxUVFkgQ29udHJhY3Rpb24gVGFibGUgLSBLb3JlYW4KKworaW5jbHVkZSBrby1nMi5jdGIKZGlmZiAtLWdpdCBhL1RhYmxlcy9Db250cmFjdGlvbi9sYXRleC1hY2Nlc3MuY3RiIGIvVGFibGVzL0NvbnRyYWN0aW9uL2xhdGV4LWFjY2Vzcy5jdGIKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMmJkNGUyZgotLS0gL2Rldi9udWxsCisrKyBiL1RhYmxlcy9Db250cmFjdGlvbi9sYXRleC1hY2Nlc3MuY3RiCkBAIC0wLDAgKzEsMjE2IEBACisjIS91c3IvYmluL3B5dGhvbjMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyMgICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisjCisjIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyMKKyMgQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjIEJSTFRUWSBDb250cmFjdGlvbiBUYWJsZSAtIGxhdGV4LWFjY2VzcyAoZXhlY3V0YWJsZSkKKworaW1wb3J0IHN5cywgb3MKKworZGVmIHB1dFByb2dyYW1NZXNzYWdlIChtZXNzYWdlKToKKyAgc3RyZWFtID0gc3lzLnN0ZGVycgorICBzdHJlYW0ud3JpdGUob3MucGF0aC5iYXNlbmFtZShzeXMuYXJndlswXSkgKyAiOiAiICsgbWVzc2FnZSArICJcbiIpCisgIHN0cmVhbS5mbHVzaCgpCisKK2RlZiBzeW50YXhFcnJvciAobWVzc2FnZSk6CisgIHB1dFByb2dyYW1NZXNzYWdlKG1lc3NhZ2UpCisgIGV4aXQoMikKKworZGVmIHNlbWFudGljRXJyb3IgKG1lc3NhZ2UpOgorICBwdXRQcm9ncmFtTWVzc2FnZShtZXNzYWdlKQorICBleGl0KDMpCisKK2RlZiBzeXN0ZW1FcnJvciAobWVzc2FnZSk6CisgIHB1dFByb2dyYW1NZXNzYWdlKG1lc3NhZ2UpCisgIGV4aXQoNCkKKworZGVmIG1pc3NpbmdQYWNrYWdlIChuYW1lKToKKyAgc3lzdGVtRXJyb3IoInBhY2thZ2Ugbm90IGluc3RhbGxlZDogIiArIG5hbWUpCisKK2RlZiBwdXRSZXNwb25zZVByb3BlcnR5IChrZXl3b3JkLCB2YWx1ZSk6CisgIHZhbHVlID0gdW5pY29kZSh2YWx1ZSkKKyAgaWYgcHJvZ3JhbUFyZ3VtZW50cy52ZXJib3NlOiBwdXRQcm9ncmFtTWVzc2FnZSgicnNwOiAiICsga2V5d29yZCArICI9IiArIHZhbHVlKQorCisgIHN0cmVhbSA9IHN5cy5zdGRvdXQKKyAgc3RyZWFtLndyaXRlKGtleXdvcmQgKyAiPSIgKyB2YWx1ZS5lbmNvZGUoIlVURi04IikgKyAiXG4iKQorICBzdHJlYW0uZmx1c2goKQorCitkZWYgZ2V0UmVxdWVzdCAoKToKKyAgcmVxdWVzdCA9IHt9CisKKyAgd2hpbGUgVHJ1ZToKKyAgICB0cnk6CisgICAgICBpZiBwcm9ncmFtQXJndW1lbnRzLmludGVyYWN0aXZlOgorICAgICAgICBsaW5lID0gcmF3X2lucHV0KHBhY2thZ2VOYW1lICsgIj4gIikKKyAgICAgIGVsc2U6CisgICAgICAgIGxpbmUgPSByYXdfaW5wdXQoKQorICAgIGV4Y2VwdCBFT0ZFcnJvcjoKKyAgICAgIGlmIGxlbihyZXF1ZXN0KSA9PSAwOiByZXR1cm4gTm9uZQorICAgICAgc2VtYW50aWNFcnJvcigidW5leHBlY3RlZCBlbmQtb2YtZmlsZSBvbiBzdGFuZGFyZCBpbnB1dCIpCisKKyAgICBsaW5lID0gbGluZS5kZWNvZGUoIlVURi04IikKKyAgICBjb21wb25lbnRzID0gbGluZS5zcGxpdCgiPSIsIDEpCisKKyAgICBpZiBsZW4oY29tcG9uZW50cykgPiAxOgorICAgICAgKGtleXdvcmQsIHZhbHVlKSA9IGNvbXBvbmVudHMKKyAgICAgIGtleXdvcmQgPSBrZXl3b3JkLnN0cmlwKCkubG93ZXIoKQorCisgICAgICBpZiBwcm9ncmFtQXJndW1lbnRzLnZlcmJvc2U6IHB1dFByb2dyYW1NZXNzYWdlKCJyZXE6ICIgKyBrZXl3b3JkICsgIj0iICsgdmFsdWUpCisgICAgICByZXF1ZXN0W2tleXdvcmRdID0gdmFsdWUKKyAgICAgIGlmIGtleXdvcmQgPT0gInRleHQiOiBicmVhaworCisgIHJldHVybiByZXF1ZXN0CisKK2RlZiBwcm9jZXNzUmVxdWVzdCAoKToKKyAgcmVxdWVzdCA9IGdldFJlcXVlc3QoKQorICBpZiBub3QgcmVxdWVzdDogcmV0dXJuIEZhbHNlCisKKyAgZm9yIGF0dHJpYnV0ZSBpbiAoImRpc3BsYXlMZW5ndGgiLCAiY3Vyc29yT2Zmc2V0IiwgImV4cGFuZEN1cnJlbnRXb3JkIiwgImNvbnN1bWVkQ2hhcnMiKToKKyAgICBpZiBoYXNhdHRyKGJyYWlsbGVUcmFuc2xhdG9yLCBhdHRyaWJ1dGUpOgorICAgICAgZGVsYXR0cihicmFpbGxlVHJhbnNsYXRvciwgYXR0cmlidXRlKQorCisgIGlmIHJlcXVlc3QuaGFzX2tleSgibWF4aW11bS1sZW5ndGgiKToKKyAgICBicmFpbGxlVHJhbnNsYXRvci5kaXNwbGF5TGVuZ3RoID0gaW50KHJlcXVlc3RbIm1heGltdW0tbGVuZ3RoIl0pCisKKyAgaWYgcmVxdWVzdC5oYXNfa2V5KCJjdXJzb3ItcG9zaXRpb24iKToKKyAgICBwb3NpdGlvbiA9IGludChyZXF1ZXN0WyJjdXJzb3ItcG9zaXRpb24iXSkKKworICAgIGlmIHBvc2l0aW9uID4gMDoKKyAgICAgIGJyYWlsbGVUcmFuc2xhdG9yLmN1cnNvck9mZnNldCA9IHBvc2l0aW9uIC0gMQorCisgICAgICBpZiByZXF1ZXN0Lmhhc19rZXkoImV4cGFuZC1jdXJyZW50LXdvcmQiKToKKyAgICAgICAgYnJhaWxsZVRyYW5zbGF0b3IuZXhwYW5kQ3VycmVudFdvcmQgPSBpbnQocmVxdWVzdFsiZXhwYW5kLWN1cnJlbnQtd29yZCJdKSAhPSAwCisKKyAgYnJhaWxsZVRyYW5zbGF0b3IuY2FwaXRhbGlzYXRpb24gPSAiNmRvdCIKKyAgaWYgcmVxdWVzdC5oYXNfa2V5KCJjYXBpdGFsaXphdGlvbi1tb2RlIik6CisgICAgaWYgaW50KHJlcXVlc3RbImNhcGl0YWxpemF0aW9uLW1vZGUiXSkgIT0gMToKKyAgICAgIGJyYWlsbGVUcmFuc2xhdG9yLmNhcGl0YWxpc2F0aW9uID0gIjhkb3QiCisKKyAgdGV4dCA9IHJlcXVlc3RbInRleHQiXQorICBicmYgPSBicmFpbGxlVHJhbnNsYXRvci50cmFuc2xhdGUodGV4dFByZXByb2Nlc3Nvci50cmFuc2xhdGUodGV4dCkpCisKKyAgaWYgaGFzYXR0cihicmFpbGxlVHJhbnNsYXRvciwgImNvbnN1bWVkQ2hhcnMiKToKKyAgICBjb25zdW1lZExlbmd0aCA9IGJyYWlsbGVUcmFuc2xhdG9yLmNvbnN1bWVkQ2hhcnMKKyAgICBwdXRSZXNwb25zZVByb3BlcnR5KCJjb25zdW1lZC1sZW5ndGgiLCBjb25zdW1lZExlbmd0aCkKKyAgZWxzZToKKyAgICBjb25zdW1lZExlbmd0aCA9IGxlbih0ZXh0KQorCisgIGlmIGhhc2F0dHIoYnJhaWxsZVRyYW5zbGF0b3IsICJzcmMydHJhbnMiKToKKyAgICBvZmZzZXRzID0gYnJhaWxsZVRyYW5zbGF0b3Iuc3JjMnRyYW5zCisgICAgaWYgbGVuKG9mZnNldHMpID4gY29uc3VtZWRMZW5ndGg6IG9mZnNldHMgPSBvZmZzZXRzWzpjb25zdW1lZExlbmd0aF0KKyAgICBwdXRSZXNwb25zZVByb3BlcnR5KCJvdXRwdXQtb2Zmc2V0cyIsICIsIi5qb2luKChzdHIob2Zmc2V0KSBmb3Igb2Zmc2V0IGluIG9mZnNldHMpKSkKKworICBwdXRSZXNwb25zZVByb3BlcnR5KCJicmYiLCBicmYpCisgIHJldHVybiBUcnVlCisKK2RlZiBwYXJzZVByb2dyYW1Bcmd1bWVudHMgKCk6CisgIGltcG9ydCBhcmdwYXJzZQorICBwYXJzZXIgPSBhcmdwYXJzZS5Bcmd1bWVudFBhcnNlcigKKyAgICBwcm9nID0gb3MucGF0aC5iYXNlbmFtZShzeXMuYXJndlswXSksCisgICAgdXNhZ2UgPSAiJShwcm9nKXMgW29wdGlvbiAuLi5dIiwKKyAgICBkZXNjcmlwdGlvbiA9ICIiIgorICAgICAgVGhpcyBpcyBhbiBleGVjdXRhYmxlIGNvbnRyYWN0aW9uIHRhYmxlIGZvciBCUkxUVFkKKyAgICAgIHRoYXQgdXNlcyB0aGUgbGF0ZXgtYWNjZXNzIHBhY2thZ2UKKyAgICAgIHRvIHRyYW5zbGF0ZSBMYVRlWCBtYXRoZW1hdGljYWwgbm90YXRpb24gaW50byBicmFpbGxlLgorICAgICAgQlJMVFRZIGNhbiBiZSBmb3VuZCBhdCBbaHR0cDovL2JybHR0eS5hcHAvXS4KKyAgICAgIGxhdGV4LWFjY2VzcyBjYW4gYmUgZm91bmQgYXQgW2h0dHA6Ly93d3cubGF0ZXgtYWNjZXNzLnNvdXJjZWZvcmdlLm5ldC9dLgorICAgICIiIgorICApCisKKyAgcGFyc2VyLmFkZF9hcmd1bWVudCgKKyAgICAiLWMiLCAiLS1jb25maWd1cmF0aW9uIiwKKyAgICBhY3Rpb24gPSAic3RvcmUiLAorICAgIG5hcmdzID0gMSwKKyAgICBkZXN0ID0gImNvbmZpZ3VyYXRpb24iLAorICAgIGRlZmF1bHQgPSAoCisgICAgICBvcy5wYXRoLmpvaW4ob3MucGF0aC5leHBhbmR1c2VyKCJ+IiksICIuIiArIHBhY2thZ2VOYW1lKSwKKyAgICAgICIvZXRjLyIgKyBwYWNrYWdlTmFtZSArICIuY29uZiIKKyAgICApLAorICAgIGhlbHAgPSAidGhlIGNvbmZpZ3VyYXRpb24gZmlsZSB0byB1c2UiCisgICkKKworICBwYXJzZXIuYWRkX2FyZ3VtZW50KAorICAgICItbiIsICItLW5lbWV0aCIsCisgICAgYWN0aW9uID0gInN0b3JlX2NvbnN0IiwKKyAgICBjb25zdCA9ICJuZW1ldGgiLAorICAgIGRlc3QgPSAidHJhbnNsYXRvciIsCisgICAgaGVscCA9ICJ0cmFuc2xhdGUgaW50byBOZW1ldGggQ29kZSIKKyAgKQorCisgIHBhcnNlci5hZGRfYXJndW1lbnQoCisgICAgIi11IiwgIi0tdWViIiwKKyAgICBhY3Rpb24gPSAic3RvcmVfY29uc3QiLAorICAgIGNvbnN0ID0gInVlYiIsCisgICAgZGVzdCA9ICJ0cmFuc2xhdG9yIiwKKyAgICBoZWxwID0gInRyYW5zbGF0ZSBpbnRvIFVuaWZpZWQgRW5nbGlzaCBCcmFpbGxlIgorICApCisKKyAgcGFyc2VyLmFkZF9hcmd1bWVudCgKKyAgICAiLWkiLCAiLS1pbnRlcmFjdGl2ZSIsCisgICAgYWN0aW9uID0gInN0b3JlX3RydWUiLAorICAgIGRlc3QgPSAiaW50ZXJhY3RpdmUiLAorICAgIGhlbHAgPSAiZW5hYmxlIGlucHV0IGVkaXRpbmcgYW5kIGhpc3RvcnkiCisgICkKKworICBwYXJzZXIuYWRkX2FyZ3VtZW50KAorICAgICItdiIsICItLXZlcmJvc2UiLAorICAgIGFjdGlvbiA9ICJzdG9yZV90cnVlIiwKKyAgICBkZXN0ID0gInZlcmJvc2UiLAorICAgIGhlbHAgPSAic2hvdyByZXF1ZXN0IGFuZCByZXNwb25zZSBwcm9wZXJ0aWVzIG9uIHN0YW5kYXJkIGVycm9yIgorICApCisKKyAgcmV0dXJuIHBhcnNlci5wYXJzZV9hcmdzKCkKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgcGFja2FnZU5hbWUgPSAibGF0ZXgtYWNjZXNzIgorCisgIHByb2dyYW1Bcmd1bWVudHMgPSBwYXJzZVByb2dyYW1Bcmd1bWVudHMoKQorCisgIGlmIHByb2dyYW1Bcmd1bWVudHMuaW50ZXJhY3RpdmU6CisgICAgaW1wb3J0IHJlYWRsaW5lLCBhdGV4aXQKKyAgICBoaXN0b3J5RmlsZT1vcy5wYXRoLmpvaW4ob3MucGF0aC5leHBhbmR1c2VyKCJ+IiksICIuIiArIHBhY2thZ2VOYW1lICsgIi5oaXN0b3J5IikKKyAgICBhdGV4aXQucmVnaXN0ZXIocmVhZGxpbmUud3JpdGVfaGlzdG9yeV9maWxlLCBoaXN0b3J5RmlsZSkKKyAgICByZWFkbGluZS5yZWFkX2hpc3RvcnlfZmlsZShoaXN0b3J5RmlsZSkKKworICB0cnk6CisgICAgZnJvbSBsYXRleF9hY2Nlc3MgaW1wb3J0IG5lbWV0aCwgdWViLCBwcmVwcm9jZXNzb3IsIHNldHRpbmdzCisgIGV4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICBtaXNzaW5nUGFja2FnZShwYWNrYWdlTmFtZSkKKworICBmb3IgY29uZmlndXJhdGlvbkZpbGUgaW4gcHJvZ3JhbUFyZ3VtZW50cy5jb25maWd1cmF0aW9uOgorICAgIGlmIG9zLnBhdGguZXhpc3RzKGNvbmZpZ3VyYXRpb25GaWxlKToKKyAgICAgIGlmIHByb2dyYW1Bcmd1bWVudHMudmVyYm9zZToKKyAgICAgICAgcHV0UHJvZ3JhbU1lc3NhZ2UoImNvbmZpZ3VyYXRpb24gZmlsZTogIiArIGNvbmZpZ3VyYXRpb25GaWxlKQorCisgICAgICBzZXR0aW5ncy5sb2FkU2V0dGluZ3MoY29uZmlndXJhdGlvbkZpbGUpCisgICAgICBicmVhaworCisgIGlmIHByb2dyYW1Bcmd1bWVudHMudHJhbnNsYXRvcjoKKyAgICBzZXR0aW5ncy5zZXR0aW5nc1siYnJhaWxsZXRhYmxlIl0gPSBwcm9ncmFtQXJndW1lbnRzLnRyYW5zbGF0b3IKKworICBicmFpbGxlVHJhbnNsYXRvciA9IHNldHRpbmdzLmJyYWlsbGVUYWJsZVRvVXNlKCkKKyAgdGV4dFByZXByb2Nlc3NvciA9IHByZXByb2Nlc3Nvci5wcmVwcm9jZXNzb3IoKQorCisgIHNldHRpbmdzLmFjdGl2YXRlU2V0dGluZ3MoCisgICAgeworICAgICAgImJyYWlsbGUiOiBicmFpbGxlVHJhbnNsYXRvciwKKyAgICAgICJwcmVwcm9jZXNzb3IiOiB0ZXh0UHJlcHJvY2Vzc29yCisgICAgfQorICApCisKKyAgd2hpbGUgcHJvY2Vzc1JlcXVlc3QoKTogcGFzcworCmRpZmYgLS1naXQgYS9UYWJsZXMvQ29udHJhY3Rpb24vbGV0dGVycy1sYXRpbi5jdGkgYi9UYWJsZXMvQ29udHJhY3Rpb24vbGV0dGVycy1sYXRpbi5jdGkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjFjZmVmZAotLS0gL2Rldi9udWxsCisrKyBiL1RhYmxlcy9Db250cmFjdGlvbi9sZXR0ZXJzLWxhdGluLmN0aQpAQCAtMCwwICsxLDc3IEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisjICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorIworIyBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisjCisjIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisjCisjIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyMgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorIyBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyMKKyMgV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworIworIyBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIyBUaGlzIEJSTFRUWSBjb250cmFjdGlvbiBzdWJ0YWJsZSBkZWZpbmVzIHRoZSBzdGFuZGFyZCBicmFpbGxlIHJlcHJlc2VudGF0aW9ucworIyBmb3IgdGhlIGxldHRlcnMgb2YgdGhlIExhdGluIGFscGhhYmV0LgorCisjIGxvd2VyY2FzZSBsZXR0ZXJzCithbHdheXMJXHg2MQkxCUxBVElOIFNNQUxMIExFVFRFUiBBCithbHdheXMJXHg2MgkxMglMQVRJTiBTTUFMTCBMRVRURVIgQgorYWx3YXlzCVx4NjMJMTQJTEFUSU4gU01BTEwgTEVUVEVSIEMKK2Fsd2F5cwlceDY0CTE0NQlMQVRJTiBTTUFMTCBMRVRURVIgRAorYWx3YXlzCVx4NjUJMTUJTEFUSU4gU01BTEwgTEVUVEVSIEUKK2Fsd2F5cwlceDY2CTEyNAlMQVRJTiBTTUFMTCBMRVRURVIgRgorYWx3YXlzCVx4NjcJMTI0NQlMQVRJTiBTTUFMTCBMRVRURVIgRworYWx3YXlzCVx4NjgJMTI1CUxBVElOIFNNQUxMIExFVFRFUiBICithbHdheXMJXHg2OQkyNAlMQVRJTiBTTUFMTCBMRVRURVIgSQorYWx3YXlzCVx4NkEJMjQ1CUxBVElOIFNNQUxMIExFVFRFUiBKCithbHdheXMJXHg2QgkxMwlMQVRJTiBTTUFMTCBMRVRURVIgSworYWx3YXlzCVx4NkMJMTIzCUxBVElOIFNNQUxMIExFVFRFUiBMCithbHdheXMJXHg2RAkxMzQJTEFUSU4gU01BTEwgTEVUVEVSIE0KK2Fsd2F5cwlceDZFCTEzNDUJTEFUSU4gU01BTEwgTEVUVEVSIE4KK2Fsd2F5cwlceDZGCTEzNQlMQVRJTiBTTUFMTCBMRVRURVIgTworYWx3YXlzCVx4NzAJMTIzNAlMQVRJTiBTTUFMTCBMRVRURVIgUAorYWx3YXlzCVx4NzEJMTIzNDUJTEFUSU4gU01BTEwgTEVUVEVSIFEKK2Fsd2F5cwlceDcyCTEyMzUJTEFUSU4gU01BTEwgTEVUVEVSIFIKK2Fsd2F5cwlceDczCTIzNAlMQVRJTiBTTUFMTCBMRVRURVIgUworYWx3YXlzCVx4NzQJMjM0NQlMQVRJTiBTTUFMTCBMRVRURVIgVAorYWx3YXlzCVx4NzUJMTM2CUxBVElOIFNNQUxMIExFVFRFUiBVCithbHdheXMJXHg3NgkxMjM2CUxBVElOIFNNQUxMIExFVFRFUiBWCithbHdheXMJXHg3NwkyNDU2CUxBVElOIFNNQUxMIExFVFRFUiBXCithbHdheXMJXHg3OAkxMzQ2CUxBVElOIFNNQUxMIExFVFRFUiBYCithbHdheXMJXHg3OQkxMzQ1NglMQVRJTiBTTUFMTCBMRVRURVIgWQorYWx3YXlzCVx4N0EJMTM1NglMQVRJTiBTTUFMTCBMRVRURVIgWgorCisjIHVwcGVyY2FzZSBsZXR0ZXJzCithbHdheXMJXHg0MQkxCUxBVElOIENBUElUQUwgTEVUVEVSIEEKK2Fsd2F5cwlceDQyCTEyCUxBVElOIENBUElUQUwgTEVUVEVSIEIKK2Fsd2F5cwlceDQzCTE0CUxBVElOIENBUElUQUwgTEVUVEVSIEMKK2Fsd2F5cwlceDQ0CTE0NQlMQVRJTiBDQVBJVEFMIExFVFRFUiBECithbHdheXMJXHg0NQkxNQlMQVRJTiBDQVBJVEFMIExFVFRFUiBFCithbHdheXMJXHg0NgkxMjQJTEFUSU4gQ0FQSVRBTCBMRVRURVIgRgorYWx3YXlzCVx4NDcJMTI0NQlMQVRJTiBDQVBJVEFMIExFVFRFUiBHCithbHdheXMJXHg0OAkxMjUJTEFUSU4gQ0FQSVRBTCBMRVRURVIgSAorYWx3YXlzCVx4NDkJMjQJTEFUSU4gQ0FQSVRBTCBMRVRURVIgSQorYWx3YXlzCVx4NEEJMjQ1CUxBVElOIENBUElUQUwgTEVUVEVSIEoKK2Fsd2F5cwlceDRCCTEzCUxBVElOIENBUElUQUwgTEVUVEVSIEsKK2Fsd2F5cwlceDRDCTEyMwlMQVRJTiBDQVBJVEFMIExFVFRFUiBMCithbHdheXMJXHg0RAkxMzQJTEFUSU4gQ0FQSVRBTCBMRVRURVIgTQorYWx3YXlzCVx4NEUJMTM0NQlMQVRJTiBDQVBJVEFMIExFVFRFUiBOCithbHdheXMJXHg0RgkxMzUJTEFUSU4gQ0FQSVRBTCBMRVRURVIgTworYWx3YXlzCVx4NTAJMTIzNAlMQVRJTiBDQVBJVEFMIExFVFRFUiBQCithbHdheXMJXHg1MQkxMjM0NQlMQVRJTiBDQVBJVEFMIExFVFRFUiBRCithbHdheXMJXHg1MgkxMjM1CUxBVElOIENBUElUQUwgTEVUVEVSIFIKK2Fsd2F5cwlceDUzCTIzNAlMQVRJTiBDQVBJVEFMIExFVFRFUiBTCithbHdheXMJXHg1NAkyMzQ1CUxBVElOIENBUElUQUwgTEVUVEVSIFQKK2Fsd2F5cwlceDU1CTEzNglMQVRJTiBDQVBJVEFMIExFVFRFUiBVCithbHdheXMJXHg1NgkxMjM2CUxBVElOIENBUElUQUwgTEVUVEVSIFYKK2Fsd2F5cwlceDU3CTI0NTYJTEFUSU4gQ0FQSVRBTCBMRVRURVIgVworYWx3YXlzCVx4NTgJMTM0NglMQVRJTiBDQVBJVEFMIExFVFRFUiBYCithbHdheXMJXHg1OQkxMzQ1NglMQVRJTiBDQVBJVEFMIExFVFRFUiBZCithbHdheXMJXHg1QQkxMzU2CUxBVElOIENBUElUQUwgTEVUVEVSIFoKKwpkaWZmIC0tZ2l0IGEvVGFibGVzL0NvbnRyYWN0aW9uL2x0LmN0YiBiL1RhYmxlcy9Db250cmFjdGlvbi9sdC5jdGIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWU1YjFjYgotLS0gL2Rldi9udWxsCisrKyBiL1RhYmxlcy9Db250cmFjdGlvbi9sdC5jdGIKQEAgLTAsMCArMSwyMjcgQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyMgICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisjCisjIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyMKKyMgQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjIEJSTFRUWSBDb250cmFjdGlvbiBUYWJsZSAtIExpdGh1YW5pYW4gKHVuY29udHJhY3RlZCkKKyMKKyMgQ29weXJpZ2h0IChDKSAyMDE3IFJpbWFzIEt1ZGVsaXMgPHJxQGFrbC5sdD4KKyMgQ29weXJpZ2h0IChDKSAyMDE3IFRhZGFzIE1hdHVzZXZpxI1pdXMgPHRhZGFzLm1hdHVzQGdtYWlsLmNvbT4KKyMKKyMgVGhlIExpdGh1YW5pYW4gNi1kb3QgQnJhaWxsZSBhbHBoYWJldCBpcyBkZXNjcmliZWQgaW4gYSBkZWNyZWUKKyMgbm8uIDg3OCBvZiB0aGUgTWluaXN0ZXIgb2YgRWR1Y2F0aW9uLCBjYWxsZWQgIkTEl2wgcGVyxJdqaW1vIHByaWUKKyMgbmF1am9zIGxpZXR1dmnFoWtvcyBCcmFpbGlvIHJhxaF0byBhYsSXY8SXbMSXcyB0dmFya29zIGlyIHByb2dyYW1vcyIsCisjIHdoaWNoIGlzIGluIGVmZmVjdCBzaW5jZSAyMDAwLTA3LTA4LiBEb2N1bWVudCBudW1iZXIgaXMgNTUtMTYyMC4gQXQKKyMgdGhlIHRpbWUgb2Ygd3JpdGluZyB0aGlzIGZpbGUsIHRoZSBkb2N1bWVudCB3YXMgYWNjZXNzaWJsZSBhdAorIyBodHRwczovL3d3dy5lLXRhci5sdC9wb3J0YWwvbHQvbGVnYWxBY3QvVEFSLkExMTBFOEU2QTgzRiAuCisjIFRoZSBkb2N1bWVudCBpcyByZWZlcnJlZCB0byBhcyAidGhlIHN0YW5kYXJkIiBiZWxvdy4KKyMKKyMgVGhlIHN0YW5kYXJkIHNwZWNpZmllcyBvbmx5IHRoZSBtYXBwaW5nIG9mIExpdGh1YW5pYW4gbGV0dGVycyB0byA2LWRvdAorIyBCcmFpbGxlIHdyaXRpbmcgc3lzdGVtLCBubyBvdGhlciBjaGFyYWN0ZXJzIGFyZSBkZWZpbmVkIGluIGl0LgorIyBEZWZpbml0aW9ucyBvZiBzb21lIHB1bmN0dWF0aW9uIGFuZCBvdGhlciBjaGFyYWN0ZXJzIGFyZSBpbmZvcm1hbGx5CisjIGF2YWlsYWJsZSBvbiB0aGUgSW50ZXJuZXQuCisjCisjIFRoaXMgdGFibGUgYnVpbGRzIG9uIGZyb20gdGhlc2UgYml0cyBvZiBpbmZvcm1hdGlvbiwgYnV0IGFsc28gYWRkcworIyBhIG51bWJlciBvZiBvdGhlciBkZWZpbml0aW9ucyB0byBtYWtlIGl0IG1vcmUgdXNlZnVsIGluIGNvbXB1dGluZy4KKyMKKyMgVGhpcyB0YWJsZSBpcyBiYXNlZCBvbiB0aGUgcmVzcGVjdGl2ZSBsaWJsb3VpcyB0YWJsZS4KKworIyMjCisjIyMgV0hJVEVTUEFDRQorIyMjCisKK2luY2x1ZGUgc3BhY2VzLmN0aQorCithbHdheXMgXHgwOSAwLTAgICAgICAgICAgICAgVSswMDA5IENIQVJBQ1RFUiBUQUJVTEFUSU9OCisKKworIyMjCisjIyMgTEVUVEVSUworIyMjCisKKyMgQmFzZSBMYXRpbiBsZXR0ZXJzCitpbmNsdWRlIGxldHRlcnMtbGF0aW4uY3RpCisKKyMgTGV0dGVycyB3aXRoIGRpYWNyaXRpY3Mgd2hpY2ggYXJlIHBhcnQgb2YgdGhlIExpdGh1YW5pYW4gYWxwaGFiZXQKK2Fsd2F5cyDEhSAxNgorYWx3YXlzIMSEIDE2CithbHdheXMgxI0gMTQ2CithbHdheXMgxIwgMTQ2CithbHdheXMgxJkgMTU2CithbHdheXMgxJggMTU2CithbHdheXMgxJcgMzQ1CithbHdheXMgxJYgMzQ1CithbHdheXMgxK8gMjQ2CithbHdheXMgxK4gMjQ2CithbHdheXMgxaEgMjM0NgorYWx3YXlzIMWgIDIzNDYKK2Fsd2F5cyDFsyAzNDYKK2Fsd2F5cyDFsiAzNDYKK2Fsd2F5cyDFqyAxMjU2CithbHdheXMgxaogMTI1NgorYWx3YXlzIMW+IDEyNgorYWx3YXlzIMW9IDEyNgorCisKKyMjIworIyMjIERJR0lUUworIyMjCisKK2Fsd2F5cyAxIDEKK2Fsd2F5cyAyIDEyCithbHdheXMgMyAxNAorYWx3YXlzIDQgMTQ1CithbHdheXMgNSAxNQorYWx3YXlzIDYgMTI0CithbHdheXMgNyAxMjQ1CithbHdheXMgOCAxMjUKK2Fsd2F5cyA5IDI0CithbHdheXMgMCAyNDUKKworCisjIyMKKyMjIyBQVU5DVFVBVElPTgorIyMjCisKK2Fsd2F5cyAsIDIKK2Fsd2F5cyAuIDI1NgorYWx3YXlzID8gMjYKK2Fsd2F5cyAhIDIzNQorYWx3YXlzIDogMjUKK2Fsd2F5cyA7IDIzCithbHdheXMgIiA0CithbHdheXMgJyAzCisjIEFjY29yZGluZyB0byBVbmljb2RlLCB0aGlzIGlzIHRoZSBwcmVmZXJyZWQgY2hhcmFjdGVyIHRvIHVzZSBmb3IgYXBvc3Ryb3BoZS4KK2Fsd2F5cyDigJkgMyAgICAgICAgICAgICAgICAgIFUrMjAxOSBSSUdIVCBTSU5HTEUgUVVPVEFUSU9OIE1BUksKKworYWx3YXlzICggMjM1NgorYWx3YXlzICkgMjM1NgorYWx3YXlzIFsgMTIzNTYKK2Fsd2F5cyBdIDIzNDU2CithbHdheXMgeyA2LTI0NgorYWx3YXlzIH0gNi0xMzUKKworYWx3YXlzIFx4MkQgMzYgICAgICAgICAgICAgIFUrMDAyRCAtIEhZUEhFTi1NSU5VUworYWx3YXlzIFx1MjAxMyA2LTM2ICAgICAgICAgIFUrMjAxMyDigJMgRU4gREFTSAorYWx3YXlzIFx4QUQgMzYgICAgICAgICAgICAgIFUrMDBBRCBbU09GVCBIWVBIRU5dCithbHdheXMgXHUyMDEwIDM2ICAgICAgICAgICAgVSsyMDEwIOKAkCBIWVBIRU4KK2Fsd2F5cyBcdTIwMTEgMzYgICAgICAgICAgICBVKzIwMTEg4oCRIE5PTi1CUkVBS0lORyBIWVBIRU4KK2Fsd2F5cyBcdTIwMTIgMzYgICAgICAgICAgICBVKzIwMTIg4oCSIEZJR1VSRSBEQVNICithbHdheXMgXHUyMDE0IDM2ICAgICAgICAgICAgVSsyMDE0IOKAlCBFTSBEQVNICithbHdheXMgXHUyMDE1IDM2ICAgICAgICAgICAgVSsyMDE1IOKAlSBIT1JJWk9OVEFMIEJBUgorCisjIFRoZXNlIGFyZSB0aGUgdHlwb2dyYXBoaWNhbGx5IGNvcnJlY3QgcXVvdGVzIGluIExpdGh1YW5pYW4gdGV4dHMuCithbHdheXMg4oCeIDIzNiAgICAgICAgICAgICAgICBVKzIwMUUgRE9VQkxFIExPVy05IFFVT1RBVElPTiBNQVJLCithbHdheXMg4oCcIDM1NiAgICAgICAgICAgICAgICBVKzIwMUMgTEVGVCBET1VCTEUgUVVPVEFUSU9OIE1BUksKKworIyBUaGUgZm9sbG93aW5nIHF1b3RhdGlvbiBjaGFyYWN0ZXJzIHNob3VsZCBub3QgYmUgdXNlZCBpbiBMaXRodWFuaWFuIHRleHRzLgorYWx3YXlzIOKAnSA2LTQgICAgICAgICAgICAgICAgVSsyMDFEIFJJR0hUIERPVUJMRSBRVU9UQVRJT04gTUFSSworYWx3YXlzIOKAnSA2LTQgICAgICAgICAgICAgICAgVSsyMDFGIERPVUJMRSBISUdILVJFVkVSU0VELTkgUVVPVEFUSU9OIE1BUksKK2Fsd2F5cyDCqyA2LTQgICAgICAgICAgICAgICAgVSswMEFCIExFRlQtUE9JTlRJTkcgRE9VQkxFIEFOR0xFIFFVT1RBVElPTiBNQVJLCithbHdheXMgwrsgNi00ICAgICAgICAgICAgICAgIFUrMDBCQiBSSUdIVC1QT0lOVElORyBET1VCTEUgQU5HTEUgUVVPVEFUSU9OIE1BUksKK2Fsd2F5cyDigLkgNi00ICAgICAgICAgICAgICAgIFUrMjAzOSBTSU5HTEUgTEVGVC1QT0lOVElORyBBTkdMRSBRVU9UQVRJT04gTUFSSworYWx3YXlzIOKAuiA2LTQgICAgICAgICAgICAgICAgVSsyMDNBIFNJTkdMRSBSSUdIVC1QT0lOVElORyBBTkdMRSBRVU9UQVRJT04gTUFSSworCithbHdheXMg4oCmIDI1Ni0yNTYtMjU2ICAgICAgICBVKzIwMjYgSE9SSVpPTlRBTCBFTExJUFNJUworcmVwZWF0YWJsZSDigKYgMjU2LTI1Ni0yNTYgICAgVSsyMDI2IEhPUklaT05UQUwgRUxMSVBTSVMKK3JlcGVhdGFibGUgLi4uIDI1Ni0yNTYtMjU2ICBUaHJlZSB0aW1lcyBVKzAwMkUgRlVMTCBTVE9QCisKKworIyMjCisjIyMgTUFUSEVNQVRJQ0FMIFNZTUJPTFMKKyMjIworCithbHdheXMgKyA1LTIzNQorYWx3YXlzIOKIkiA1LTM2ICAgICAgICAgICAgICAgVSsyMjEyIE1JTlVTIFNJR04KK2Fsd2F5cyA8IDUtMjQ2CithbHdheXMgPSA1LTIzNTYKK2Fsd2F5cyA+IDUtMTM1CithbHdheXMgwrEgNS0yMzUtMzYKK2Fsd2F5cyDiiJMgNS0zNi0yMzUgICAgICAgICAgIFUrMjIxMyBNSU5VUy1PUi1QTFVTIFNJR04KK2Fsd2F5cyDDlyA1LTMKK2Fsd2F5cyDii4UgNS0zICAgICAgICAgICAgICAgIFUrMjJDNSBET1QgT1BFUkFUT1IKK2Fsd2F5cyDDtyA1LTI1NgorYWx3YXlzIOKItiA1LTI1NiAgICAgICAgICAgICAgVSsyMjM2IFJBVElPCithbHdheXMg4oGEIDM0ICAgICAgICAgICAgICAgICBVKzIwNDQgRlJBQ1RJT04gU0xBU0gKK2Fsd2F5cyDiiJUgMzQgICAgICAgICAgICAgICAgIFUrMjIxNSBESVZJU0lPTiBTTEFTSAorCisKKyMjIworIyMjIE9USEVSIENIQVJBQ1RFUlMKKyMjIworCithbHdheXMgIyA2LTM0NTYKK2Fsd2F5cyAkIDYtNDYKK2Fsd2F5cyAlIDEyMzQ1NgorYWx3YXlzICYgMTIzNDYKK2Fsd2F5cyAqIDM1CithbHdheXMgLyAzNAorYWx3YXlzIEAgNi0zNDUKK2Fsd2F5cyBcXCA2LTM0CithbHdheXMgXiA2LTI1NgorYWx3YXlzIF8gMTQ1NgorYWx3YXlzIHwgNi00NTYKKyNhbHdheXMgwqYgNi0xNDU2CithbHdheXMgwqcgNi0zNDYKKyNhbHdheXMgwqwgNi0yMzUKK2Fsd2F5cyDCtSA2LTEzNAorI2Fsd2F5cyDCtiA2LTEyMzQKKworYWx3YXlzIGAgNi0zCithbHdheXMgfiA2LTI2CisKKyNhbHdheXMgwqIgNi0xNAorYWx3YXlzIMKjIDYtMTIzCithbHdheXMg4oKsIDYtMTUgICAgICAgICAgICAgICBVKzIwQUMgRVVSTyBTSUdOCisKK2Fsd2F5cyDigKIgNi0zNSAgICAgICAgICAgICAgIFUrMjAyMiBCVUxMRVQKKworYWx3YXlzIMKpIDIzNTYtNDYtMTQtMjM1NgorYWx3YXlzIMKuIDIzNTYtNDYtMTIzNS0yMzU2CithbHdheXMg4oSXIDIzNTYtNDYtMTIzNC0yMzU2ICBVKzIxMTcgU09VTkQgUkVDT1JESU5HIENPUFlSSUdIVAorCithbHdheXMg4oaQIDI0Ni0yNSAgICAgICAgICAgICBVKzIxOTAgTEVGVFdBUkRTIEFSUk9XCithbHdheXMg4oaSIDI1LTEzNSAgICAgICAgICAgICBVKzIxOTIgUklHSFRXQVJEUyBBUlJPVworCisjIE1pZGRsZSBkb3QgaXMgdW5saWtlbHkgdG8gYXBwZWFyIGluIHRleHQsIGV4Y2VwdCBwZXJoYXBzIGFzIGEgbXVsdGlwbGljYXRpb24gc2lnbiAoZG90IG9wZXJhdG9yKS4KK2Fsd2F5cyDCtyA1LTMgICAgICAgICAgICAgICAgVSswMEI3IE1JRERMRSBET1QKKworYWx3YXlzIMKwIDUtMzU2CithbHdheXMg4oCyIDUtMzUgICAgICAgICAgICAgICBVKzIwMzIgUFJJTUUKK2Fsd2F5cyDigLMgNS0zNS0zNSAgICAgICAgICAgIFUrMjAzMyBET1VCTEUgUFJJTUUKKworYWx3YXlzIOKEgyA1LTM1Ni00Ni0xNCAgICAgICAgVSsyMTAzIERFR1JFRSBDRUxTSVVTCithbHdheXMg4oSJIDUtMzU2LTQ2LTEyNCAgICAgICBVKzIxMDkgREVHUkVFIEZBSFJFTkhFSVQKKworCisjIyMKKyMjIyBJTkRJQ0FUT1IgQU5EIFNQRUNJQUwgU1lNQk9MIERJUkVDVElWRVMKKyMjIworCisjYWx3YXlzIFx1RkZGRCA3ICAgICAgICAgICAgIFUrRkZGRCDvv70gUkVQTEFDRU1FTlQgQ0hBUkFDVEVSCisKK251bXNpZ24gMzQ1NiAgbnVtYmVyIHNpZ24sIGp1c3Qgb25lIG9wZXJhbmQKK2xldHNpZ24gNTYKK2NhcHNpZ24gNDYKK2JlZ2NhcHMgNDU2CitlbmRjYXBzIDU2CisKK21pZG51bSAsIDIKK21pZG51bSA6IDI1CittaWRudW0gLiAyNTYKKworIyB3aGVuIGEgZGVjaW1hbCBiZWdpbnMgd2l0aCBhIHBlcmlvZCwgaXQgc2hvdWxkIGJlIHRyYW5zbGF0ZWQgd2l0aCBhIAorIyBudW1iZXIgc2lnbiBmb2xsb3dlZCBieSBhIGRlY2ltYWwgcG9pbnQsIGZvbGxvd2VkIGJ5IHRoZSBudW1iZXIuCmRpZmYgLS1naXQgYS9UYWJsZXMvQ29udHJhY3Rpb24vbWcuY3RiIGIvVGFibGVzL0NvbnRyYWN0aW9uL21nLmN0YgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZjBjOTI4Ci0tLSAvZGV2L251bGwKKysrIGIvVGFibGVzL0NvbnRyYWN0aW9uL21nLmN0YgpAQCAtMCwwICsxLDMyIEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisjICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorIworIyBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisjCisjIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisjCisjIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyMgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorIyBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyMKKyMgV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworIworIyBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIyBCUkxUVFkgQ29udHJhY3Rpb24gVGFibGUgLSBNYWxhZ2FzeSAoY29udHJhY3RlZCkKKyMKKyMgU2FtdWVsIFRoaWJhdWx0IDxzYW11ZWwudGhpYmF1bHRAZW5zLWx5b24ub3JnPgorIyAKKyMgVGhpcyB0YWJsZSBpcyBiYXNlZCBvbiB0aGUgVW5lc2NvIHJlcG9ydCBvbiB0aGUgcHJvZ3Jlc3Mgb2YgdW5pZmljYXRpb24gb2YKKyMgYnJhaWxsZSB3cml0aW5nIMKrwqBMJ8OJQ1JJVFVSRSBCUkFJTExFIERBTlMgTEUgTU9OREXCoMK7LCBieSBTaXIgQ2x1dGhhCisjIE1BQ0tFTlpJRTogaHR0cDovL3VuZXNkb2MudW5lc2NvLm9yZy9pbWFnZXMvMDAxMy8wMDEzNTIvMTM1MjUxZm8ucGRmCisjIFRoZSBkb2N1bWVudCBpcyBkYXRlZCAxOTU0LCBzbyB0aGlzIHRhYmxlIG1heSBiZSBxdWl0ZSBvdXRkYXRlZC4KKworaW5jbHVkZSBsZXR0ZXJzLWxhdGluLmN0aQorCithbHdheXMgZHogMjQ1CithbHdheXMgYW8gMjQ2CithbHdheXMgYWkgMzQKZGlmZiAtLWdpdCBhL1RhYmxlcy9Db250cmFjdGlvbi9tdW4uY3RiIGIvVGFibGVzL0NvbnRyYWN0aW9uL211bi5jdGIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzZjMjgwOQotLS0gL2Rldi9udWxsCisrKyBiL1RhYmxlcy9Db250cmFjdGlvbi9tdW4uY3RiCkBAIC0wLDAgKzEsMzQgQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyMgICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisjCisjIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyMKKyMgQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjIEJSTFRUWSBDb250cmFjdGlvbiBUYWJsZSAtIE11bmRhIChjb250cmFjdGVkKQorIworIyBTYW11ZWwgVGhpYmF1bHQgPHNhbXVlbC50aGliYXVsdEBlbnMtbHlvbi5vcmc+CisjIAorIyBUaGlzIHRhYmxlIGlzIGJhc2VkIG9uIHRoZSBVbmVzY28gcmVwb3J0IG9uIHRoZSBwcm9ncmVzcyBvZiB1bmlmaWNhdGlvbiBvZgorIyBicmFpbGxlIHdyaXRpbmcgwqvCoEwnw4lDUklUVVJFIEJSQUlMTEUgREFOUyBMRSBNT05ERcKgwrssIGJ5IFNpciBDbHV0aGEKKyMgTUFDS0VOWklFOiBodHRwOi8vdW5lc2RvYy51bmVzY28ub3JnL2ltYWdlcy8wMDEzLzAwMTM1Mi8xMzUyNTFmby5wZGYKKyMgVGhlIGRvY3VtZW50IGlzIGRhdGVkIDE5NTQsIHNvIHRoaXMgdGFibGUgbWF5IGJlIHF1aXRlIG91dGRhdGVkLgorCitpbmNsdWRlIGxldHRlcnMtbGF0aW4uY3RpCisKK2Fsd2F5cyBuZyAzNDYKK2Fsd2F5cyBjaCAxNgorYWx3YXlzIMmbIDI2CithbHdheXMgyZQgMjQ2CithbHdheXMgw7YgMTI1NgpkaWZmIC0tZ2l0IGEvVGFibGVzL0NvbnRyYWN0aW9uL25hYmNjLmN0aSBiL1RhYmxlcy9Db250cmFjdGlvbi9uYWJjYy5jdGkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2RlYWIwOAotLS0gL2Rldi9udWxsCisrKyBiL1RhYmxlcy9Db250cmFjdGlvbi9uYWJjYy5jdGkKQEAgLTAsMCArMSwxMjggQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyMgICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisjCisjIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyMKKyMgQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjIFRoaXMgQlJMVFRZIGNvbnRyYWN0aW9uIHN1YnRhYmxlIGltcGxlbWVudHMgdGhlIE5vcnRoIEFtZXJpY2FuIEJyYWlsbGUKKyMgQ29tcHV0ZXIgQ29kZS4KKworaW5jbHVkZQlsZXR0ZXJzLWxhdGluLmN0aQorCithbHdheXMJXHMJMAorCithbHdheXMJYQkxCithbHdheXMJYgkxMgorYWx3YXlzCWMJMTQKK2Fsd2F5cwlkCTE0NQorYWx3YXlzCWUJMTUKK2Fsd2F5cwlmCTEyNAorYWx3YXlzCWcJMTI0NQorYWx3YXlzCWgJMTI1CithbHdheXMJaQkyNAorYWx3YXlzCWoJMjQ1CithbHdheXMJawkxMworYWx3YXlzCWwJMTIzCithbHdheXMJbQkxMzQKK2Fsd2F5cwluCTEzNDUKK2Fsd2F5cwlvCTEzNQorYWx3YXlzCXAJMTIzNAorYWx3YXlzCXEJMTIzNDUKK2Fsd2F5cwlyCTEyMzUKK2Fsd2F5cwlzCTIzNAorYWx3YXlzCXQJMjM0NQorYWx3YXlzCXUJMTM2CithbHdheXMJdgkxMjM2CithbHdheXMJdwkyNDU2CithbHdheXMJeAkxMzQ2CithbHdheXMJeQkxMzQ1NgorYWx3YXlzCXoJMTM1NgorCithbHdheXMJQQkxNworYWx3YXlzCUIJMTI3CithbHdheXMJQwkxNDcKK2Fsd2F5cwlECTE0NTcKK2Fsd2F5cwlFCTE1NworYWx3YXlzCUYJMTI0NworYWx3YXlzCUcJMTI0NTcKK2Fsd2F5cwlICTEyNTcKK2Fsd2F5cwlJCTI0NworYWx3YXlzCUoJMjQ1NworYWx3YXlzCUsJMTM3CithbHdheXMJTAkxMjM3CithbHdheXMJTQkxMzQ3CithbHdheXMJTgkxMzQ1NworYWx3YXlzCU8JMTM1NworYWx3YXlzCVAJMTIzNDcKK2Fsd2F5cwlRCTEyMzQ1NworYWx3YXlzCVIJMTIzNTcKK2Fsd2F5cwlTCTIzNDcKK2Fsd2F5cwlUCTIzNDU3CithbHdheXMJVQkxMzY3CithbHdheXMJVgkxMjM2NworYWx3YXlzCVcJMjQ1NjcKK2Fsd2F5cwlYCTEzNDY3CithbHdheXMJWQkxMzQ1NjcKK2Fsd2F5cwlaCTEzNTY3CisKK2Fsd2F5cwkxCTIKK2Fsd2F5cwkyCTIzCithbHdheXMJMwkyNQorYWx3YXlzCTQJMjU2CithbHdheXMJNQkyNgorYWx3YXlzCTYJMjM1CithbHdheXMJNwkyMzU2CithbHdheXMJOAkyMzYKK2Fsd2F5cwk5CTM1CithbHdheXMJMAkzNTYKKworYWx3YXlzCSYJMTIzNDYKK2Fsd2F5cwk9CTEyMzQ1NgorYWx3YXlzCSgJMTIzNTYKK2Fsd2F5cwkhCTIzNDYKK2Fsd2F5cwkpCTIzNDU2CisKK2Fsd2F5cwkqCTE2CithbHdheXMJPAkxMjYKK2Fsd2F5cwklCTE0NgorYWx3YXlzCT8JMTQ1NgorYWx3YXlzCToJMTU2CithbHdheXMJJAkxMjQ2CithbHdheXMJfQkxMjQ1NgorYWx3YXlzCXwJMTI1NgorYWx3YXlzCXsJMjQ2CisKK2Fsd2F5cwldCTEyNDU2NworYWx3YXlzCVxcCTEyNTY3CithbHdheXMJWwkyNDY3CisKK2Fsd2F5cwkvCTM0CithbHdheXMJKwkzNDYKK2Fsd2F5cwlcIwkzNDU2CithbHdheXMJPgkzNDUKK2Fsd2F5cwknCTMKK2Fsd2F5cwktCTM2CisKK2Fsd2F5cwlgCTQKK2Fsd2F5cwl+CTQ1CithbHdheXMJXwk0NTYKK2Fsd2F5cwkiCTUKK2Fsd2F5cwkuCTQ2CithbHdheXMJOwk1NgorYWx3YXlzCSwJNgorCithbHdheXMJQAk0NworYWx3YXlzCV4JNDU3CisKZGlmZiAtLWdpdCBhL1RhYmxlcy9Db250cmFjdGlvbi9ubC5jdGIgYi9UYWJsZXMvQ29udHJhY3Rpb24vbmwuY3RiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg4NDYzMWQKLS0tIC9kZXYvbnVsbAorKysgYi9UYWJsZXMvQ29udHJhY3Rpb24vbmwuY3RiCkBAIC0wLDAgKzEsMzQgQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyMgICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisjCisjIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyMKKyMgQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjIEJSTFRUWSBDb250cmFjdGlvbiBUYWJsZSAtIER1dGNoIChjb250cmFjdGVkKQorIworIyBTYW11ZWwgVGhpYmF1bHQgPHNhbXVlbC50aGliYXVsdEBlbnMtbHlvbi5vcmc+CisjIAorIyBUaGlzIHRhYmxlIGlzIGJhc2VkIG9uIHRoZSBVbmVzY28gcmVwb3J0IG9uIHRoZSBwcm9ncmVzcyBvZiB1bmlmaWNhdGlvbiBvZgorIyBicmFpbGxlIHdyaXRpbmcgwqvCoEwnw4lDUklUVVJFIEJSQUlMTEUgREFOUyBMRSBNT05ERcKgwrssIGJ5IFNpciBDbHV0aGEKKyMgTUFDS0VOWklFOiBodHRwOi8vdW5lc2RvYy51bmVzY28ub3JnL2ltYWdlcy8wMDEzLzAwMTM1Mi8xMzUyNTFmby5wZGYKKyMgVGhlIGRvY3VtZW50IGlzIGRhdGVkIDE5NTQsIHNvIHRoaXMgdGFibGUgbWF5IGJlIHF1aXRlIG91dGRhdGVkLgorCithbHdheXMgY2ggMTQ1NgorYWx3YXlzIGlqIDEzNDU2CithbHdheXMgb2UgMjQ2CithbHdheXMgc2NoIDE1NgorCisjIGlubGluZSBjb250cmFjdGlvbiBvZiBlbW9qaSBkZXNjcmlwdGlvbnMKK2Vtb2ppIG5sCmRpZmYgLS1naXQgYS9UYWJsZXMvQ29udHJhY3Rpb24vbm9uZS5jdGIgYi9UYWJsZXMvQ29udHJhY3Rpb24vbm9uZS5jdGIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzk5MTkxNQotLS0gL2Rldi9udWxsCisrKyBiL1RhYmxlcy9Db250cmFjdGlvbi9ub25lLmN0YgpAQCAtMCwwICsxLDE5IEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisjICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorIworIyBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisjCisjIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisjCisjIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyMgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorIyBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyMKKyMgV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworIworIyBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIyBCUkxUVFkgQ29udHJhY3Rpb24gVGFibGUgLSBlbXB0eQpkaWZmIC0tZ2l0IGEvVGFibGVzL0NvbnRyYWN0aW9uL255LmN0YiBiL1RhYmxlcy9Db250cmFjdGlvbi9ueS5jdGIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGJjZDM2ZQotLS0gL2Rldi9udWxsCisrKyBiL1RhYmxlcy9Db250cmFjdGlvbi9ueS5jdGIKQEAgLTAsMCArMSwzMyBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorIyAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyMKKyMgQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorIworIyBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorIworIyBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisjIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyMgbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisjCisjIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMgQlJMVFRZIENvbnRyYWN0aW9uIFRhYmxlIC0gQ2hpY2hld2EgKGNvbnRyYWN0ZWQpCisjCisjIFNhbXVlbCBUaGliYXVsdCA8c2FtdWVsLnRoaWJhdWx0QGVucy1seW9uLm9yZz4KKyMgCisjIFRoaXMgdGFibGUgaXMgYmFzZWQgb24gdGhlIFVuZXNjbyByZXBvcnQgb24gdGhlIHByb2dyZXNzIG9mIHVuaWZpY2F0aW9uIG9mCisjIGJyYWlsbGUgd3JpdGluZyDCq8KgTCfDiUNSSVRVUkUgQlJBSUxMRSBEQU5TIExFIE1PTkRFwqDCuywgYnkgU2lyIENsdXRoYQorIyBNQUNLRU5aSUU6IGh0dHA6Ly91bmVzZG9jLnVuZXNjby5vcmcvaW1hZ2VzLzAwMTMvMDAxMzUyLzEzNTI1MWZvLnBkZgorIyBUaGUgZG9jdW1lbnQgaXMgZGF0ZWQgMTk1NCwgc28gdGhpcyB0YWJsZSBtYXkgYmUgcXVpdGUgb3V0ZGF0ZWQuCisKK2luY2x1ZGUgbGV0dGVycy1sYXRpbi5jdGkKKworYWx3YXlzIG5nIDM0NgorYWx3YXlzIG5kaSAxMjM0NgorYWx3YXlzIGNoIDE2CithbHdheXMgdGggMTQ1NgpkaWZmIC0tZ2l0IGEvVGFibGVzL0NvbnRyYWN0aW9uL3B0LmN0YiBiL1RhYmxlcy9Db250cmFjdGlvbi9wdC5jdGIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmQzZGQ0ZAotLS0gL2Rldi9udWxsCisrKyBiL1RhYmxlcy9Db250cmFjdGlvbi9wdC5jdGIKQEAgLTAsMCArMSw0ODkgQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyMgICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisjCisjIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyMKKyMgQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjIEJSTFRUWSBDb250cmFjdGlvbiBUYWJsZSAtIFBvcnR1Z3Vlc2UgKGdyYWRlIDIpCisjCisjIFNhbXVlbCBUaGliYXVsdCA8c2FtdWVsLnRoaWJhdWx0QGVucy1seW9uLm9yZz4KKyMgCisjIFRoaXMgdGFibGUgaXMgYmFzZWQgb24gdGhlIFVuZXNjbyByZXBvcnQgb24gdGhlIHByb2dyZXNzIG9mIHVuaWZpY2F0aW9uIG9mCisjIGJyYWlsbGUgd3JpdGluZyDCq8KgTCfDiUNSSVRVUkUgQlJBSUxMRSBEQU5TIExFIE1PTkRFwqDCuywgYnkgU2lyIENsdXRoYQorIyBNQUNLRU5aSUU6IGh0dHA6Ly91bmVzZG9jLnVuZXNjby5vcmcvaW1hZ2VzLzAwMTMvMDAxMzUyLzEzNTI1MWZvLnBkZgorIyBUaGUgZG9jdW1lbnQgaXMgZGF0ZWQgMTk1NCwgc28gdGhpcyB0YWJsZSBtYXkgYmUgcXVpdGUgb3V0ZGF0ZWQuCisKK2luY2x1ZGUgbGV0dGVycy1sYXRpbi5jdGkKK2NsYXNzIHZveSBhZWlvdcOhw6LDo8Oow6rDrMO0w7LDtcO6CitjbGFzcyBjb24gYmPDp2RmZ2hqa2xtbsOxcHFyc3R2d3h6CisKK3dvcmQgYmVtIDEyCit3b3JkIGPDoSAxNAord29yZCBkZSAxNDUKK3dvcmQgZmltIDEyNAorZW5kd29yZCBndWUgMTI0NQord29yZCBhZ29yYSAxMjQ1Cit3b3JkIHNvYnJlIDEyNQord29yZCBzw7RicmUgMTI1Cit3b3JkIGFsaSAyNAorYWx3YXlzIGFsIDEzCit3b3JkIGFvcyAxMword29yZCBlbGUgMTIzCit3b3JkIMOqbGUgMTIzCit3b3JkIG1lIDEzNAord29yZCBuw6NvIDEzNDUKK3dvcmQgcG9yIDEyMzQKK2VuZHdvcmQgcXVlIDEyMzQ1Cit3b3JkIHF1ZSAxMjM0NQord29yZCBtYWlvciAxMjM1Cit3b3JkIHNlIDIzNAord29yZCB0ZSAyMzQ1Cit3b3JkIHVtIDEzNgord29yZCB2w7NzIDEyMzYKK2FmdGVyIGNvbiBhbHdheXMgZXggMTM0Ngord29yZCBtYXMgMTM0NgorYWx3YXlzIG9zIDEzNDU2Cit3b3JkIG9zIDEzNDU2Cit3b3JkIGVsYSAxMzU2CithbHdheXMgw6cgMTIzNDYKK2VuZHdvcmQgw6dhbyAxMjM0Ngord29yZCBwYXJhIDEyMzQ2CithbHdheXMgw6kgMTIzNDU2CithbHdheXMgw6EgMTIzNTYKK3dvcmQgbMOhIDEyMzU2CithbHdheXMgw6ggMjM0NgorbWlkd29yZCBzcyAyMzQ2Cit3b3JkIGFzc2ltIDIzNDYKK2Fsd2F5cyDDuiAyMzQ1Ngord29yZCBhdMOpIDIzNDU2CithbHdheXMgw6IgMTYKK3dvcmQgdHVkbyAxNgorYWx3YXlzIMOqIDEyNgord29yZCBtZXNtbyAxMjYKK2Fsd2F5cyDDrCAxNDYKK2VuZHdvcmQgYXMgMTQ2Cit3b3JkIGFzIDE0NgorYWx3YXlzIMO0IDE0NTYKK3dvcmQgbWFpcyAxNDU2CithbHdheXMgw7kgMTU2CitlbmR3b3JkIGVzIDE1Ngord29yZCBtZW5vcyAxNTYKK2JlZ21pZHdvcmQgcGwgMTI0NgorYWx3YXlzIMOgIDEyNDYKK3dvcmQgw6AgMTI0NgorYmVnbWlkd29yZCBnciAxMjQ1Ngord29yZCBncmFuZGUgMTI0NTYKK2Fsd2F5cyBvdSAxMjU2Cit3b3JkIG91IDEyNTYKK2Fsd2F5cyDDtSAyNDYKK3dvcmQgYWluZGEgMjQ2CithbHdheXMgw7IgMjQ1Ngord29yZCBhbnRlcyAyNDU2CithbHdheXMgLCAyCitiZWdtaWR3b3JkIGJyIDIzCithbHdheXMgOyAyMworYmVnbWlkd29yZCBjb24gMjUKK2Fsd2F5cyA6IDI1CitiZWdtaWR3b3JkIGVtIDI1NgorYWx3YXlzIC4gMjU2Cit3b3JkIGVtIDI1NgorYmVnbWlkd29yZCBlbiAyNgorYWx3YXlzID8gMjYKK3dvcmQgZGVudHJvIDI2CitiZWdtaWR3b3JkIHByIDIzNQorYWx3YXlzICEgMjM1Cit3b3JkIG7Ds3MgMjM1CithbHdheXMgKCAyMzU2CittaWR3b3JkIG5oIDIzNTYKK2Fsd2F5cyApIDIzNTYKK3dvcmQgbmVtIDIzNTYKK2JlZ3dvcmQgIiAyMzYKK21pZGVuZHdvcmQgZXIgMjM2Cit3b3JkIGRlcHJlc3NhIDIzNgorYmVnbWlkd29yZCBpbiAzNQord29yZCBpc3NvIDM1CitiZWdtaWR3b3JkIHRyIDM1NgorZW5kd29yZCAiIDM1Ngord29yZCBjb250cmEgMzU2CitiZWd3b3JkIHJlIDMKK2Fsd2F5cyAnIDMKK3dvcmQgYcO1IDMKK2JlZ3dvcmQgY29tIDM2CithbHdheXMgLSAzNgord29yZCBjb20gMzYKK251bXNpZ24gMzQ1NgorbWlkZW5kd29yZCDDo28gMzQ1Ngord29yZCBzw6NvIDM0NTYKK2Fsd2F5cyDDrSAzNAord29yZCBzaW0gMzQKK2Fsd2F5cyDDsyAzNDYKK2JlZ21pZHdvcmQgYW0gMzQ1CithbHdheXMgw6MgMzQ1Cit3b3JkIHNlbSAzNDUKKworIyB0ZXJtaW5hdGlvbnMKKworZW5kd29yZCBhY2lkYWRlIDQ2LTEKK2VuZHdvcmQgYW50ZW1lbnRlIDU2LTEKK2VuZHdvcmQgYmlsaWRhZGUgNDYtMTIKK2VuZHdvcmQgYmlsbWVudGUgNTYtMTIKK2VuZHdvcmQgY2lvbmFsIDUtMTQKK2VuZHdvcmQgY2lvbmFsaWRhZGUgNDYtMTQKK2VuZHdvcmQgY2lvbmFsbWVudGUgNTYtMTQKK2VuZHdvcmQgZG9yIDQtMTQ1CitlbmR3b3JkIGRvcmEgNS00CitlbmR3b3JkIGRhZGUgNDYtMTQ1CitlbmR3b3JkIGRvcmFtZW50ZSA1Ni0xNDUKK2VuZHdvcmQgZWlybyA0LTE1CitlbmR3b3JkIGVpcmEgNS0xNQorZW5kd29yZCBlbnRlbWVudGUgNTYtMTUKK2VuZHdvcmQgZmljbyA0LTEyNAorZW5kd29yZCBmaWNhIDUtMTI0CitlbmR3b3JkIGZpY2FtZW50ZSA1Ni0xMjQKK2VuZHdvcmQgZ2ljbyA0LTEyNDUKK2VuZHdvcmQgZ2ljYSA1LTEyNDUKK2VuZHdvcmQgZ2ljYW1lbnRlIDU2LTEyNDUKK2VuZHdvcmQgaXNtbyA0LTI0CitlbmR3b3JkIGlzdGEgNS0yNAorZW5kd29yZCBpdmlkYWRlIDQ2LTI0CitlbmR3b3JkIGl2YW1lbnRlIDU2LTI0CitlbmR3b3JkIGxvZ28gNC0xMjMKK2VuZHdvcmQgbG9nYSA1LTEyMworZW5kd29yZCBsaWRhZGUgNDYtMTIzCitlbmR3b3JkIGxvZ2FtZW50ZSA1Ni0xMjMKK2VuZHdvcmQgbWVudG8gNC0xMzQKK2VuZHdvcmQgbWVudGEgNS0xMzQKK2VuZHdvcmQgbWVudGUgNTYtMTM0CitlbmR3b3JkIG5pY28gNC0xMzQ1CitlbmR3b3JkIG5pY2EgNS0xMzQ1CitlbmR3b3JkIG5pY2lkYWRlIDQ2LTEzNDUKK2VuZHdvcmQgbmljYW1lbnRlIDU2LTEzNDUKK2VuZHdvcmQgb2lybyA0LTEzNQorZW5kd29yZCBvaXJhIDUtMTM1CitlbmR3b3JkIG9zaWRhZGUgNDYtMTM1CitlbmR3b3JkIG9zYW1lbnRlIDU2LTEzNQorZW5kd29yZCBwb3N0byA0LTEyMzQKK2VuZHdvcmQgcG9zdGEgNS0xMjM0CitlbmR3b3JkIHBvc3RhbWVudGUgNTYtMTIzNAorZW5kd29yZCByb3NvIDQtMTIzNQorZW5kd29yZCByb3NhIDUtMTIzNQorZW5kd29yZCByaWVkYWRlIDQ2LTEyMzUKK2VuZHdvcmQgcmlhbWVudGUgNTYtMTIzNQorZW5kd29yZCB0aWNvIDQtMjM0NQorZW5kd29yZCB0aWNhIDUtMjM0NQorZW5kd29yZCB0aWNpZGFkZSA0Ni0yMzQ1CitlbmR3b3JkIHRpY2FtZW50ZSA1Ni0yMzQ1CitlbmR3b3JkIHVybyA0LTEzNgorZW5kd29yZCB1cmEgNS0xMzYKK2VuZHdvcmQgdXJpZGFkZSA0Ni0xMzYKK2VuZHdvcmQgdXJhbWVudGUgNTYtMTM2CitlbmR3b3JkIHZlbCA1LTEyMzYKK2VuZHdvcmQgdmVsbWVudGUgNTYtMTIzNgorZW5kd29yZCB6aW5obyA0LTEzNTYKK2VuZHdvcmQgemluaGEgNS0xMzU2CitlbmR3b3JkIMOpcmlvIDQtMTIzNDU2CitlbmR3b3JkIMOpcmlhIDUtMTIzNDU2CitlbmR3b3JkIMOhcmlvIDQtMTIzNTYKK2VuZHdvcmQgw6FyaWEgNS0xMjM1NgorZW5kd29yZCBzc2ltbyA0LTIzNDYKK2VuZHdvcmQgc3NpbWEgNS0yMzQ2CitlbmR3b3JkIHNzaW1hbWVudGUgNTYtMjM0NgorZW5kd29yZCDDunJpbyA0LTIzNDU2CitlbmR3b3JkIMO6cmlhIDUtMjM0NTYKK2VuZHdvcmQgw6JuY2lvIDQtMTYKK2VuZHdvcmQgw6JuY2lhIDUtMTYKK2VuZHdvcmQgw6puY2lvIDQtMTI2CitlbmR3b3JkIMOqbmNpYSA1LTEyNgorZW5kd29yZCBncmFmbyA0LTEyNDU2CitlbmR3b3JkIGdyYWZhIDUtMTI0NTYKK2VuZHdvcmQgb3VybyA0LTEyNTYKK2VuZHdvcmQgb3VyYSA1LTEyNTYKK2VuZHdvcmQgw61yaW8gNC0xNAorZW5kd29yZCDDrXJpYSA1LTE0CitlbmR3b3JkIMOzcmlvIDQtMzQ2CitlbmR3b3JkIMOzcmlhIDUtMzQ2CisKKyMgdHdvIGNlbGwgd29yZHMKKword29yZCBhY29sw6EgMS0xNAord29yZCBhZmltIDEtMTI0Cit3b3JkIGFsZ3XDqW0gMS0xMjU2Cit3b3JkIGFtb3IgMS0xMzQKK3dvcmQgYXBlbmFzIDEtMTM0NQord29yZCBhcGVzYXIgMS0xMjM0Cit3b3JkIGFxdWkgMS0xMjM0NQord29yZCBhdXjDrWxpbyAxLTEzNDYKK3dvcmQgYWxpw6FzIDEtMTIzNTYKK3dvcmQgYXDDs3MgMS0zNDYKK3dvcmQgYW1hbmjDoyAxLTM0NQord29yZCBib2NhIDEyLTE0Cit3b3JkIGJvbmRvc28gMTItMTQ1Cit3b3JkIGJlaWpvIDEzLTI0NQord29yZCBiZWxvIDEyLTEyMword29yZCBCcmF6aWwgMTItMTIzNQord29yZCBiYWl4byAxMi0xMzQ2Cit3b3JkIGNvaXNhIDE0LTEKK3dvcmQgY2FiZcOnYSAxNC0xMgord29yZCBjZXJjYSAxNC0xNAord29yZCBjYWRhIDE0LTE0NQord29yZCBjZWRlIDE0LTE1Cit3b3JkIGNlZ28gMTQtMTI0NQord29yZCBjaW1hIDE0LTI0Cit3b3JkIGN1am8gMTQtMTQ1Cit3b3JkIGNsYXJvIDE0LTEyMword29yZCBjb21vIDE0LTEzNAord29yZCBjb3JwbyAxNC0xMjM0Cit3b3JkIGNhcm8gMTQtMTIzNQord29yZCBjYXNvIDE0LTIzNAord29yZCBjYXJ0YSAxNC0yMzQ1Cit3b3JkIGNlcnRvIDE0LTIzNgord29yZCBkb2NlIDE0NS0xNAord29yZCBkZXNkZSAxNDUtMTQ1Cit3b3JkIGRpZsOtY2lsIDE0NS0xMjQKK3dvcmQgZGVzZWpvIDE0NS0yNDUKK3dvcmQgZGVsZSAxNDUtMTIzCit3b3JkIGR1bWEgMTQ1LTEzNAord29yZCBkZXBvaXMgMTQ1LTEyMzQKK3dvcmQgZGlhbnRlIDE0NS0yMzQ1Cit3b3JkIGRpdmVyc28gMTQ1LTEyMzQKK3dvcmQgZXN0YSAxNS0xCit3b3JkIGVzcMOpY2llIDE1LTE0Cit3b3JkIGVzdGUgMTUtMTUKK3dvcmQgZWZlaXRvIDE1LTEyNAord29yZCBlbm9ybWUgMTUtMTM0NQord29yZCBldmlkZW50ZSAxNS0xMjM2Cit3b3JkIGVzdGVzIDE1LTE1Ngord29yZCBleGVtcGxvIDE1LTEyNDYKK3dvcmQgZm9yYSAxMjQtMQord29yZCBmw6FjaWwgMTI0LTE0Cit3b3JkIGZlbGl6IDEyNC0xMjMKK3dvcmQgZm9ybWEgMTI0LTEzNAord29yZCBmb3LDp2EgMTI0LTEzNQord29yZCBmZXZlcmVpcm8gMTI0LTEyMzUKK3dvcmQgZmFjdG8gMTI0LTIzNDUKK3dvcmQgZmF0byAxMjQtMjM0NQord29yZCBmYXZvciAxMjQtMTIzNgord29yZCBmb3LDp2EgMTI0LTE0NTYKK3dvcmQgZ2VudGUgMTI0NS0xNQord29yZCBnZXJhbCAxMjQ1LTEyMzUKK3dvcmQgbGhhIDEyNS0xCit3b3JkIGjDoWJpdG8gMTI1LTEyCit3b3JkIGxoZSAxMjUtMTUKK3dvcmQgaG9qZSAxMjUtMjQ1Cit3b3JkIGhvbWVtIDEyNS0xMzQKK3dvcmQgbGhvIDEyNS0xMzUKK3dvcmQgaG9yYSAxMjUtMTIzNQord29yZCBoaXN0w7NyaWEgMTI1LTIzNDUKK3dvcmQgaW7DrWNpbyAyNC0xNAord29yZCBpZGVpYSAyNC0xNDUKK3dvcmQgaWTDqWEgMjQtMTQ1Cit3b3JkIGlndWFsIDI0LTEyNDUKK3dvcmQgaW1lZGlhdG8gMjQtMTM0Cit3b3JkIGlzdG8gMjQtMjM0NQord29yZCBpcm3Do28gMjQtMzQ1Ngord29yZCBpcm3DoyAyNC0xCit3b3JkIGp1bGhvIDI0NS0xMjUKK3dvcmQgamFtYWlzIDI0NS0xMzQKK3dvcmQganVudG8gMjQ1LTEzNDUKK3dvcmQganVuaG8gMjQ1LTEzNQord29yZCBqYW5laXJvIDI0NS0xMjM1Cit3b3JkIGp1c3RvIDI0NS0yMzQ1Cit3b3JkIGp1w616byAyNDUtMTM1Ngord29yZCBhbGZhYmV0byAxMy0xMjQKK3dvcmQgbG9jYWwgMTIzLTE0Cit3b3JkIGxhZG8gMTIzLTE0NQord29yZCBsb2dvIDEyMy0xMjQ1Cit3b3JkIGx1Z2FyIDEyMy0xMjM1Cit3b3JkIGxpdnJvIDEyMy0xMjM2Cit3b3JkIG1vZG8gMTM0LTE0NQord29yZCBtdWxoZXIgMTM0LTEyNQord29yZCBtYWlvIDEzNC0zNQord29yZCBtaW0gMTM0LTEzNAord29yZCBtZW5pbm8gMTM0LTEzNDUKK3dvcmQgbWVsaG9yIDEzNC0xMjM1Cit3b3JkIG1ldXMgMTM0LTIzNAord29yZCBtdWl0byAxMzQtMjM0NQord29yZCBtYXLDp28gMTM0LTEyMzQ2Cit3b3JkIG3DrW5pbW8gMTM0LTM0Cit3b3JkIG1hbmjDoyAxMzQtMzQ1Cit3b3JkIG51bmNhIDEzNDUtMTQKK3dvcmQgbmFkYSAxMzQ1LTE0NQord29yZCBub2l0ZSAxMzQ1LTE1Cit3b3JkIG5pbmd1w6ltIDEzNDUtMTI0NQord29yZCBuZWxlIDEzNDUtMTIzCit3b3JkIG51bWEgMTM0NS0xMzQKK3dvcmQgbsO6bWVybyAxMzQ1LTEyMzUKK3dvcmQgbm9zc28gMTM0NS0yMzQKK3dvcmQgbm92byAxMzQ1LTEyMzYKK3dvcmQgbm91dGUgMTM0NS0xMjU2Cit3b3JkIG9yZGVtIDEzNS0xNDUKK3dvcmQgb25kZSAxMzUtMTUKK3dvcmQgb2JqZWN0byAxMzUtMjQ1Cit3b3JkIG9udGVtIDEzNS0yMzQ1Cit3b3JkIHBhbGF2cmEgMTIzNC0xCit3b3JkIHBvdWNvIDEyMzQtMTQKK3dvcmQgcGFydGUgMTIzNC0xNQord29yZCBww6FnaW5hIDEyMzQtMTI0NQord29yZCBwZWxvIDEyMzQtMTIzCit3b3JkIHBvcsOpbSAxMjM0LTEzNAord29yZCBwZW5hIDEyMzQtMTM0NQord29yZCBwZXJ0byAxMjM0LTEzNQord29yZCBwYXBlbCAxMjM0LTEyMzQKK3dvcmQgcG9ycXVlIDEyMzQtMTIzNDUKK3dvcmQgcGlvciAxMjM0LTEyMzUKK3dvcmQgcG9pcyAxMjM0LTIzNAord29yZCBwb250byAxMjM0LTIzNDUKK3dvcmQgcG92byAxMjM0LTEyMzYKK3dvcmQgcXVhbmRvIDEyMzQ1LTE0NQord29yZCBxdWFsIDEyMzQ1LTEyMword29yZCBxdWVtIDEyMzQ1LTEzNAord29yZCBxdWFscXVlciAxMjM0NS0xMjM0NQord29yZCBxdWVyIDEyMzQ1LTEyMzUKK3dvcmQgcXVhaXMgMTIzNDUtMjM0Cit3b3JkIHF1YW50byAxMjM0NS0yMzQ1Cit3b3JkIHJhcGF6IDEyMzUtMTIzNAord29yZCByYXJvIDEyMzUtMTIzNQord29yZCByZXRvIDEyMzUtMjM0NQord29yZCByYXrDo28gMTIzNS0xMzQ1Cit3b3JkIHN1YSAyMzQtMQord29yZCBzw6ljdWxvIDIzNC0xNAord29yZCBzYcO6ZGUgMjM0LTE0NQord29yZCBzdWZpY2llbnRlIDIzNC0xMjQKK3dvcmQgc2VndW5kbyAyMzQtMTI0NQord29yZCBzdWplaXRvIDIzNC0yNDUKK3dvcmQgc29tZW50ZSAyMzQtMTM0Cit3b3JkIHNlbsOjbyAxMjMtMTM0NQord29yZCBzZW1wcmUgMjM0LTEyMzQKK3dvcmQgc2VuaG9yIDIzNC0xMjM1Cit3b3JkIHNldXMgMjM0LTIzNAord29yZCBzb2JyZXR1ZG8gMjM0LTIzNDUKK3dvcmQgc2ltcGxlcyAyMzQtMTI0Ngord29yZCB0YW1iw6ltIDIzNDUtMTIKK3dvcmQgdG9kbyAyMzQ1LTE0NQord29yZCB0ZW1wbyAyMzQ1LTEyMzQKK3dvcmQgdGV1cyAyMzQ1LTIzNAord29yZCB0YW50byAyMzQ1LTIzNDUKK3dvcmQgdGFsdmV6IDIzNDUtMTIzNgord29yZCB0b2RhIDIzNDUtMTQ1Ngord29yZCB2aWRhIDEyMzYtMQord29yZCB2ZXJibyAxMjM2LTEyCit3b3JkIHZvY8OqIDEyMzYtMTQKK3dvcmQgdmVyZGFkZSAxMjM2LTE0NQord29yZCB2ZXLDo28gMTIzNi0xMjM1Cit3b3JkIHZvc3NvIDEyMzYtMjM0Cit3b3JkIHZpdm8gMTIzNi0xMjM2Cit3b3JkIGV4Y2VsZW50ZSAxMzQ2LTEyMword29yZCBlc3RlIDEyNi0xNQord29yZCBvdXRybyAxMjU2LTEzNQord29yZCBvdXRyb3JhIDEyNTYtMTIzNQord29yZCBicmFpbGxlIDIzLTEyMword29yZCBjb250dWRvIDI1LTIzNDUKK3dvcmQgZW1ib3JhIDI1Ni0xMgord29yZCBlbnRyZSAyNi0xNQord29yZCBlbmZpbSAyNi0xMjQKK3dvcmQgcHJpbWVpcm8gMjM1LTEzNAord29yZCBwcsOzcHJpbyAyMzUtMTM1CisKKyMgdGhyZWUgY2VsbCB3b3JkcworCit3b3JkIGFiYWl4byAxLTEyLTEzNDYKK3dvcmQgYWNlcmNhIDEtMTQtMTQKK3dvcmQgYWNpbWEgMS0xNC0yNAord29yZCBhY2FzbyAxLTE0LTIzNAord29yZCBhZGlhbnRlIDEtMTQ1LTIzNDUKK3dvcmQgYWZlY3RvIDEtMTI0LTIzNDUKK3dvcmQgYWZldG8gMS0xMjQtMjM0NQord29yZCBhbGd1bSAxLTEyNDUtMTM0Cit3b3JkIGFnb3N0byAxLTEyNDUtMjM0NQord29yZCBhbMOpbSAxLTEyMy0xMzQKK3dvcmQgYW1pZ28gMS0xMzQtMTI0NQord29yZCBhb25kZSAxLTEzNS0xNQord29yZCBhb25kZSAxLTEzNS0xNQord29yZCBhcXVlbGUgMS0xMjM0NS0xNQord29yZCBhcXXDqW0gMS0xMjM0NS0xMzQKK3dvcmQgYXF1aWxvIDEtMTIzNDUtMTM1Cit3b3JkIGFicmlsIDEtMjMtMTIzCit3b3JkIGJyYXNpbGVpcm8gMTItMTIzNS0xMjM1Cit3b3JkIGNvbWlnbyAxNC0xMzQtMTI0NQord29yZCBjb25vc2NvIDE0LTEzNDUtMTQKK3dvcmQgY2FwaXR1bG8gMTQtMTIzNC0yMzQ1Cit3b3JkIGNlcnRhbWVudGUgMTQtMjM2LTEzNAord29yZCBkZWJhaXhvIDE0NS0xMi0xMzQ2Cit3b3JkIGRpZmljaWxtZW50ZSAxNDUtMTI0LTEzNAord29yZCBkaWZlcmVuw6dhIDE0NS0xMjQtMTIzNQord29yZCBkb21pbmdvIDE0NS0xMzQtMTI0NQord29yZCBkb25kZSAxNDUtMTM1LTE1Cit3b3JkIGRlemVtYnJvIDE0NS0xMzU2LTEyCit3b3JkIGV2aWRlbnRlbWVudGUgMTUtMTIzNi0xMzQKK3dvcmQgZmFjaWxtZW50ZSAxMjQtMTQtMTM0Cit3b3JkIGZ1dHVybyAxMjQtMjM0NS0xMjM1Cit3b3JkIGdlcmFsbWVudGUgMTI0NS0xMjM1LTEzNAord29yZCBpZ3VhbG1lbnRlIDI0LTEyNDUtMTM0Cit3b3JkIGltZWRpYXRhbWVudGUgMjQtMTM0LTEzNAord29yZCBtZW5vciAxMzQtMTM0NS0xMjM1Cit3b3JkIG1pbnV0byAxMzQtMTM0NS0yMzQ1Cit3b3JkIG1ldGFkZSAxMzQtMjM1Ni0xNDUKK3dvcmQgbWluaGEgMTM0LTIzNTYtMQord29yZCBuZWNlc3NpZGFkZSAxMzQ1LTE0LTE0NQord29yZCBuZWNlc3PDoXJpbyAxMzQ1LTE0LTEyMzUKK3dvcmQgbm92ZW1icm8gMTM0NS0xMjM2LTEyCit3b3JkIG5lbmh1bSAxMzQ1LTIzNTYtMTM0Cit3b3JkIHBvc3NpYmlsaWRhZGUgMTIzNC0xMi0xNDUKK3dvcmQgcGVyZmVpdG8gMTIzNC0xMjQtMjM0NQord29yZCBwZXF1ZW5vIDEyMzQtMTIzNDUtMTM0NQord29yZCBwb3JxdWFudG8gMTIzNC0xMjM0NS0yMzQ1Cit3b3JkIHBvcnR1Z3XDqnMgMTIzNC0yMzQ1LTEyNDUKK3dvcmQgcG9ydGFudG8gMTIzNC0yMzQ1LTIzNDUKK3dvcmQgcXVhaXNxdWVyIDEyMzQ1LTIzNC0xMjM0NQord29yZCByYXBhcmlnYSAxMjM1LTEyMzQtMTI0NQord29yZCByYXJhbWVudGUgMTIzNS0xMjM1LTEzNAord29yZCBzw6FiYWRvIDIzNC0xMi0xNDUKK3dvcmQgc2VndWludGUgMjM0LTEyNDUtMjM0NQord29yZCBzZW1hbmEgMjM0LTEzNC0xMzQ1Cit3b3JkIHN1cGVyaW9yIDIzNC0xMjM0LTEyMzUKK3dvcmQgc2VuaG9yaXRhIDIzNC0xMjM1LTIzNDUKK3dvcmQgc2V0ZW1icm8gMjM0LTIzNDUtMTIKK3dvcmQgc2ltcGxlc21lbnRlIDIzNC0xMjQ2LTEzNAord29yZCB0b2RhdmlhIDI0NTYtMTQ1LTEyMzYKK3dvcmQgZXhjZXRvIDEzNDYtMTQtMjM0NQord29yZCBleHRlcm5vIDEzNDYtMjM0NS0xMzQ1Cit3b3JkIGV4dGVyaW9yIDEzNDYtMjM0NS0xMjM1Cit3b3JkIMOgcXVlbGUgMTI0Ni0xMjM0NS0xNQord29yZCDDoHF1aWxvIDEyNDYtMTIzNDUtMTM1Cit3b3JkIG91dHVicm8gMTI1Ni0yMzQ1LTEyCit3b3JkIG91dG9ubyAxMjU2LTIzNDUtMTM0NQord29yZCBjb25ub3NjbyAyNS0xMzQ1LTE0Cit3b3JkIGNvbnNpZ28gMjUtMjM0LTEyNDUKK3dvcmQgY29udGlnbyAyNS0yMzQ1LTEyNDUKK3dvcmQgY29udm9zY28gMjUtMTIzNi0xNAord29yZCBlbnRyZXRhbnRvIDI2LTE1LTIzNDUtMjM0NQord29yZCBlbnF1YW50byAyNi0xMjM0NS0yMzQ1Cit3b3JkIGVudGFudG8gMjYtMjM0NS0yMzQ1Cit3b3JkIHByaW1hdmVyYSAyMzUtMTIzNi0xMjM1Cit3b3JkIGluZmVyaW9yIDM2LTEyNC0xMjM1Cit3b3JkIGludGVybm8gMzUtMjM0NS0xMzQ1Cit3b3JkIGludGVyaW9yIDM1LTIzNDUtMTIzNQord29yZCBpbnZlcm5vIDM1LTEyMzYtMTM0NQorCisjIGNvbXBvdW5kIHdvcmRzCisKK3dvcmQgcXVpbnRhLWZlaXJhIDEyMzQ1LTEzNDUtMzYtMTI0Cit3b3JkIHF1YXJ0YS1mZWlyYSAxMjM0NS0xMjM1LTM2LTEyNAord29yZCBzZWd1bmRhLWZlaXJhIDIzNC0xMjQ1LTM2LTEyNAord29yZCBzZXh0YS1mZWlyYSAyMzQtMTM0Ni0zNi0xMjQKK3dvcmQgdGVyw6dhLWZlaXJhIDIzNDUtMTQtMzYtMTI0CisKKyMgaW5saW5lIGNvbnRyYWN0aW9uIG9mIGVtb2ppIGRlc2NyaXB0aW9ucworZW1vamkgcHQKZGlmZiAtLWdpdCBhL1RhYmxlcy9Db250cmFjdGlvbi9ydS5jdGIgYi9UYWJsZXMvQ29udHJhY3Rpb24vcnUuY3RiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI4NTVjZTEKLS0tIC9kZXYvbnVsbAorKysgYi9UYWJsZXMvQ29udHJhY3Rpb24vcnUuY3RiCkBAIC0wLDAgKzEsNjg1IEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisjICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorIworIyBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisjCisjIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisjCisjIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyMgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorIyBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyMKKyMgV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworIworIyBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIyBCUkxUVFkgQ29udHJhY3Rpb24gVGFibGUgLSBSdXNzaWFuIChncmFkZSAxKQorI0J5IEthdGUgPG11c2ljYXRlQHlhbmRleC5ydT4KKyNCYXNlZCBvbiBadWJrb3Ygc3lzdGVtCisKK2NsYXNzIHNjaCDQsdCy0LPQtNC20LfQudC60LvQvNC90L7Qv9GA0YHRgtGE0YXRhtGH0YjRidGK0YvRjNGN0Y7RjworY2xhc3MgY29uINCx0LLQs9C00LbQt9C50LrQu9C80L3Qv9GA0YHRgtGE0YXRhtGH0YjRidGK0YwKK2NsYXNzIHZvdyDQsNC10ZHQuNC+0YPRi9GN0Y7RjworY2xhc3MgbXVmINC60L/RgdGC0YTRhdGG0YfRiNGJCitjbGFzcyB2b2ljINCx0LLQs9C00LbQt9C70LzQvdGACitjbGFzcyBjb24tciDQsdCy0LPQtNC20LfQudC60LvQvNC90L/RgdGC0YTRhdGG0YfRiNGJ0YrRjAorY2xhc3MgcHJlZCDQsdCy0LPQvNC90L8KK2NsYXNzIG11ZnMg0LrQv9GB0YTRhdGG0YfRiNGJ0YoKK2NsYXNzIHZvaWN6INCx0LvRgNGKCisKK2FmdGVyIHZvdyBtaWRlbmR3b3JkINGLIDYtMjM0NgorYWZ0ZXIgY29uIG1pZGVuZHdvcmQg0LkgNi0xMjM0NgorbWlkZW5kd29yZCDRhCA2LTEyNAorbWlkZW5kd29yZCDRjSA2LTI0NgorYWx3YXlzINGRIDUKK2JlZ3dvcmQg0Y4gNi0xMjU2CisKKyN2YQorc3Vmd29yZCDQstCw0LHQsCA9CitzdWZ3b3JkINCy0LDRhtCwID0KK3N1ZndvcmQg0LLQsNC00LAgPQorc3Vmd29yZCDQstCw0LPQsCA9CitzdWZ3b3JkINCy0LDRhdCwID0KK3N1ZndvcmQg0LLQsNC20LAgPQorc3Vmd29yZCDQstCw0LHQtSA9CitzdWZ3b3JkINCy0LDRhtC1ID0KK3N1ZndvcmQg0LLQsNC00LUgPQorc3Vmd29yZCDQstCw0LPQtSA9CitzdWZ3b3JkINCy0LDRhdC1ID0KK3N1ZndvcmQg0LLQsNC20LUgPQorc3Vmd29yZCDQstCw0LzQuCAzNDU2LTEzNC0yNAorc3Vmd29yZCDQstCw0LHQuCA9CitzdWZ3b3JkINCy0LDRhtC4ID0KK3N1ZndvcmQg0LLQsNC00LggPQorc3Vmd29yZCDQstCw0LPQuCA9CitzdWZ3b3JkINCy0LDRhdC4ID0KK3N1ZndvcmQg0LLQsNC20LggPQorCisKKworYWx3YXlzINCx0YPQtNC4ID0KK2Fsd2F5cyDQstC10LvRjNC80L7QtiA9CithbHdheXMg0LrQvtCx0YvQuyA9CithbHdheXMg0LHRi9C70L7QtSA9CithbHdheXMg0LHRi9C70L7Qs9C+ID0KKworYWx3YXlzINCx0YvQu9C+0LzRgyA9CithbHdheXMg0LHRi9C70YvQvCA9CithbHdheXMg0LHRi9C70L7QvCA9CisKKworI0xldHRlcnMKK2Fsd2F5cyDQkCAxCithbHdheXMg0LAgMQorYWx3YXlzINCRIDEyCithbHdheXMg0LEgMTIKK2Fsd2F5cyDQkiAyNDU2CithbHdheXMg0LIgMjQ1NgorYWx3YXlzINCTIDEyNDUKK2Fsd2F5cyDQsyAxMjQ1CithbHdheXMg0JQgMTQ1CithbHdheXMg0LQgMTQ1CithbHdheXMg0JUgMTUKK2Fsd2F5cyDQtSAxNQorYWx3YXlzINCWIDI0NQorYWx3YXlzINC2IDI0NQorYWx3YXlzINCXIDEzNTYKK2Fsd2F5cyDQtyAxMzU2CithbHdheXMg0JggMjQKK2Fsd2F5cyDQuCAyNAorYWx3YXlzINCZIDEyMzQ2CithbHdheXMg0LkgMTIzNDYKK2Fsd2F5cyDQmiAxMworYWx3YXlzINC6IDEzCithbHdheXMg0JsgMTIzCithbHdheXMg0LsgMTIzCithbHdheXMg0JwgMTM0CithbHdheXMg0LwgMTM0CithbHdheXMg0J0gMTM0NQorYWx3YXlzINC9IDEzNDUKK2Fsd2F5cyDQniAxMzUKK2Fsd2F5cyDQviAxMzUKK2Fsd2F5cyDQnyAxMjM0CithbHdheXMg0L8gMTIzNAorYWx3YXlzINCgIDEyMzUKK2Fsd2F5cyDRgCAxMjM1CithbHdheXMg0KEgMjM0CithbHdheXMg0YEgMjM0CithbHdheXMg0KIgMjM0NQorYWx3YXlzINGCIDIzNDUKK2Fsd2F5cyDQoyAxMzYKK2Fsd2F5cyDRgyAxMzYKK2Fsd2F5cyDQpCAxMjQKK2Fsd2F5cyDRhCAxMjQKK2Fsd2F5cyDQpSAxMjUKK2Fsd2F5cyDRhSAxMjUKK2Fsd2F5cyDQpiAxNAorYWx3YXlzINGGIDE0CithbHdheXMg0KcgMTIzNDUKK2Fsd2F5cyDRhyAxMjM0NQorYWx3YXlzINCoIDE1NgorYWx3YXlzINGIIDE1NgorYWx3YXlzINCpIDEzNDYKK2Fsd2F5cyDRiSAxMzQ2CithbHdheXMg0KogMTIzNTYKK2Fsd2F5cyDRiiAxMjM1NgorYWx3YXlzINCrIDIzNDYKK2Fsd2F5cyDRiyAyMzQ2CithbHdheXMg0KwgMjM0NTYKK2Fsd2F5cyDRjCAyMzQ1NgorYWx3YXlzINCtIDI0NgorYWx3YXlzINGNIDI0NgorYWx3YXlzINCuIDEyNTYKK2Fsd2F5cyDRjiAxMjU2CithbHdheXMg0K8gMTI0NgorYWx3YXlzINGPIDEyNDYKKworCisjVGFibGUgSQorCithbHdheXMg0LLQsCAzNDU2CitiZWdtaWR3b3JkINCy0LUgMjM0NTYKK2JlZ21pZHdvcmQg0LLRkSAyMzQ1NgorYWx3YXlzINCy0L4gMTIzNgorc3Vmd29yZCDQstGLIDMKK2Fsd2F5cyDQs9C+IDEyNDU2CitiZWZvcmUgc2NoIGFsd2F5cyDQtNC1IDEzNDYKK2JlZm9yZSBzY2ggYWx3YXlzINC00ZEgMTM0NgorYWx3YXlzINC00L4gMjU2CithbHdheXMg0LfQsCAzNTYKK2Fsd2F5cyDQutCwIDM0NgorbWlkZW5kd29yZCDQutC4IDI0NgorYWx3YXlzINC60L4gMTQ1NgorYWx3YXlzINC70LAgNAorYWx3YXlzINC70LUgMjYKK2Fsd2F5cyDQu9GRIDI2CithbHdheXMg0LvQuCAzNQorYWx3YXlzINC70L4gNDU2CithbHdheXMg0LvRjCAyMzU2CittaWR3b3JkINC70YzQvSAyMzU2CittaWR3b3JkINC70YzQvdC1IDIzNTYtMTYKK2Fsd2F5cyDQvNC1IDE0NgorYWx3YXlzINC80ZEgMTQ2CittaWRlbmR3b3JkINC80LggMTI0CithbHdheXMg0L3QsCAzNDUKK2Fsd2F5cyDQvdC1IDE2CithbHdheXMg0L3RkSAxNgorYWx3YXlzINC90LggMzQKK2Fsd2F5cyDQvdC+IDEyNgorZW5kd29yZCDQvdGLIDQ2CithbHdheXMg0L/QviAyMzUKK3N1ZndvcmQg0L/RgNC4IDEyMzQ2CitiZWd3b3JkINC90LXQv9GA0LggMTYtMTIzNDYKK2FmdGVyIGNvbiBtaWRlbmR3b3JkINC/0YDQuCAxMjM0Ngorc3Vmd29yZCDQv9GA0L4gMTIzNTYKK2JlZ3dvcmQg0L3QtdC/0YDQviAxNi0xMjM1NgorbWlkZW5kd29yZCDRgNC+IDEyMzU2CithbHdheXMg0YDQsCA0NQorYWx3YXlzINGA0LUgMgorYWx3YXlzINGA0LggNQorc3Vmd29yZCDRgdC+IDIzNDYKK2FmdGVyIHZvdyBtaWRlbmR3b3JkINGB0L4gMjM0NgorYWx3YXlzINGB0YIgMjUKK2JlZm9yZSBjb24tciBiZWdtaWR3b3JkINGB0YLQsCAyNQorYWx3YXlzINGC0LAgMTIzNDU2CithbHdheXMg0YLQtSAyMworYWx3YXlzINGC0ZEgMjMKK2Fsd2F5cyDRgtC4IDU2CithbHdheXMg0YLQviAxMzQ1NgorYWx3YXlzINGH0LUgMjM2CithbHdheXMg0YfRkSAyMzYKK2JlZm9yZSBzY2ggYmVnbWlkd29yZCDRiSA2LTEzNDYKK2VuZHdvcmQg0YkgNi0xMzQ2CittaWRlbmR3b3JkINGKIDMKK21pZGVuZHdvcmQg0YwgMworCisKKyNUYWJsZSBJSQorIAord29yZCDQsdC10LcgMTItMTM1NgorYmVmb3JlIHZvaWMgYmVmb3JlIHZvdyBiZWd3b3JkINC90LXQsdC10LcgMTYtMTItMTM1NgorYmVmb3JlIHZvaWMgYmVmb3JlIHZvdyBiZWd3b3JkINCx0LXQtyAxMi0xMzU2CitiZWZvcmUgdm9pYyBiZWZvcmUgdm93IGJlZ3dvcmQg0L3QtdCx0LXQt9GL0LcgMTYtMTItMTM1Ni0zNgorYmVnd29yZCDQsdC10LfQvtGCIDEyLTEzNTYtMTI1NgorYmVmb3JlIG11ZiBiZWd3b3JkINCx0LXRgSAxMi0yMzQKK2JlZm9yZSBtdWYgYmVnd29yZCDQvdC10LHQtdGBIDE2LTEyLTIzNAorYmVnd29yZCDQsdC10YHQv9GA0LggMTItMjM0LTEyMzQ2Cit3b3JkINCyXHPQt9Cw0LrQu9GO0YfQtdC90LjQtSAyNDU2LTAtMzU2LTE1Cit3b3JkINCy0LzQtdGB0YLQviAyNDU2LTEzNDU2CitzdWZ3b3JkINCy0L3Rg9GC0YDQuCAyNDU2LTEyMzUKK3dvcmQg0LLQvtC/0YDQtdC60LggMTIzNi0yNDYKK3dvcmQg0LJcc9C/0YDQvtC00L7Qu9C20LXQvdC40LUgMjQ1Ni0wLTEyMzU2LTE1Cit3b3JkINCy0YHQu9C10LTRgdGC0LLQuNC1IDI0NTYtMjYtMTUKK3dvcmQg0LJcc9GC0LXRh9C10L3QuNC1IDI0NTYtMC0yMy0xNQord29yZCDQtNC70Y8gMTQ1Cit3b3JkINC40LcgMzYKK2JlZm9yZSB2b2ljIGJlZm9yZSB2b3cgIGJlZ3dvcmQg0LjQtyAzNgorYmVmb3JlIHZvaWMgYmVmb3JlIHZvdyAgYmVnd29yZCDQvdC10LjQtyAxNi0zNgord29yZCDQutGA0L7QvNC1IDEzLTE0Ngorc3Vmd29yZCDQvNC10LbQtNGDIDYtMTQ2Cit3b3JkINC+0LrQvtC70L4gMTM1LTEzNQorc3Vmd29yZCDQvtGCIDEyNTYKK2JlZ3dvcmQg0L3QtdC+0YIgMTYtMTI1NgorYmVnd29yZCDQsdC10LfQvtGCIDEyLTEzNTYtMTYtMTI1NgorYmVnd29yZCDQv9C10YDQtSA0Ni0xMjM0CitiZWd3b3JkINC90LXQv9C10YDQtSAxNi00Ni0xMjM0CitiZWd3b3JkINC/0LXRgNC10LjQtyA0Ni0xMjM0LTM2CitzdWZ3b3JkINC/0YDQtdC0IDEyMzQtMTQ1CitiZWd3b3JkINC/0LXRgNC10L7RgiAxMjM0LTE0NS0xMjU2CitiZWd3b3JkINC90LXQv9GA0LXQtCAxNi0xMjM0LTE0NQorYmVmb3JlIHZvaWMgYmVmb3JlIHZvdyBiZWd3b3JkINC/0YDQtdC00YvQtyAxMjM0LTE0NS0zNgord29yZCDQv9GA0LXQtNC+IDEyMzQtMjU2CitzdWZ3b3JkINC/0YDQtdC20LTQtSAxMjM0LTI0NQord29yZCDQv9GA0L7RgtC40LIgMTIzNC0xMjM1Ni0yNDU2Cit3b3JkINC90LDQv9GA0L7RgtC40LIgMzQ1LTEyMzU2LTI0NTYKK3dvcmQg0YfQtdGA0LXQtyAxMjM0NS0xMzU2CitiZWd3b3JkINGH0YDQtdC3IDEyMzQ1LTEzNTYKK2JlZ3dvcmQg0YfQtdGA0LXRgSAxMjM0NS0yMzQKKworCisjVGFibGUgSUlJCisKK2VuZHdvcmQg0LDQvCAxMzQKK2VuZHdvcmQg0LDQvNGB0Y8gMTM0LTIzNAorZW5kd29yZCDRj9C8IDEzNAorZW5kd29yZCDRj9C80YHRjyAxMzQtMjM0CitlbmR3b3JkINGL0LwgMTM0CitlbmR3b3JkINGL0LzRgdGPIDEzNC0yMzQKK2VuZHdvcmQg0LjQvCAxMzQKK2VuZHdvcmQg0LjQvNGB0Y8gMTM0LTIzNAorZW5kd29yZCDQsNC80LggMTI0CitlbmR3b3JkINCw0LzQuNGB0Y8gMTI0LTIzNAorZW5kd29yZCDRj9C80LggMTI0CitlbmR3b3JkINGP0LzQuNGB0Y8gMTI0LTIzNAorcHJmd29yZCDQuNC80LggMTI0CitlbmR3b3JkINC40LzQuNGB0Y8gMTI0LTIzNAorZW5kd29yZCDRi9C80LggMTI0CitlbmR3b3JkINGL0LzQuNGB0Y8gMTI0LTIzNAorZW5kd29yZCDQsNGCIDYKK2VuZHdvcmQg0LDRgtGB0Y8gNi0yMzQKK2VuZHdvcmQg0Y/RgiA2CitlbmR3b3JkINGP0YLRgdGPIDYtMjM0CitlbmR3b3JkINCw0YUgMTI1CitlbmR3b3JkINCw0YXRgdGPIDEyNS0yMzQKK2VuZHdvcmQg0Y/RhSAxMjUKK2VuZHdvcmQg0Y/RhdGB0Y8gMTI1LTIzNAorcHJmd29yZCDQuNGFIDEyNQorZW5kd29yZCDQuNGF0YHRjyAxMjUtMjM0CitlbmR3b3JkINGL0YUgMTI1CitlbmR3b3JkINGL0YXRgdGPIDEyNS0yMzQKK21pZHdvcmQg0LDRjtGJIDM2LTEzNDYKK21pZHdvcmQg0Y/RjtGJIDM2LTEzNDYKK2VuZHdvcmQg0LDRjyAxMzU2CitlbmR3b3JkINCw0Y/RgdGMIDEzNTYtMjM0CitlbmR3b3JkINGP0Y8gMTM1NgorZW5kd29yZCDRj9GP0YHRjCAxMzU2LTIzNAorZW5kd29yZCDQtdCyIDI0NTYKK2VuZHdvcmQg0L7QsiAyNDU2CittaWRlbmR3b3JkINC10LLQsCAzNDU2CittaWRlbmR3b3JkINC+0LLQsCAzNDU2CittaWRlbmR3b3JkINC40LLQsCAzNDU2CittaWRlbmR3b3JkINGL0LLQsCAzNDU2CitwcmZ3b3JkINC10LPQviAxMjQ1NgorZW5kd29yZCDQvtCz0L4gMTI0NTYKK2VuZHdvcmQg0LXQtSAxNTYKK2VuZHdvcmQg0LXQtdGB0YwgMTU2LTIzNAorZW5kd29yZCDQtdGRIDE1NgorZW5kd29yZCDQvtC1IDE1NgorZW5kd29yZCDQtdC5IDEzNDU2CitlbmR3b3JkINC10LnRgdGPIDEzNDU2LTIzNAorZW5kd29yZCDRkdC5IDEzNDU2CitlbmR3b3JkINGR0LnRgdGPIDEzNDU2LTIzNAorZW5kd29yZCDQvtC5IDEzNDU2CitlbmR3b3JkINC+0LnRgdGPIDEzNDU2LTIzNAorZW5kd29yZCDQtdC8IDIzNQorZW5kd29yZCDQtdC80YHRjyAyMzUtMjM0CitlbmR3b3JkINGR0LwgMjM1CitlbmR3b3JkINGR0LzRgdGPIDIzNS0yMzQKK2VuZHdvcmQg0LDQtdC8IDIzNQorZW5kd29yZCDQsNC10LzRgdGPIDIzNS0yMzQKK2VuZHdvcmQg0Y/QtdC8IDIzNQorZW5kd29yZCDRj9C10LzRgdGPIDIzNS0yMzQKK2VuZHdvcmQg0L7QtdC8IDIzNQorZW5kd29yZCDQvtC10LzRgdGPIDIzNS0yMzQKK3ByZndvcmQg0LXQvNGDIDE0NgorZW5kd29yZCDQtdC80YPRgdGPIDE0Ni0yMzQKK2VuZHdvcmQg0L7QvNGDIDE0NgorZW5kd29yZCDQvtC80YPRgdGPIDE0Ni0yMzQKK21pZHdvcmQg0LXQvdC4IDM0CitlbmR3b3JkINC10YIgMTQKK2VuZHdvcmQg0LXRgtGB0Y8gMTQtMjM0CitlbmR3b3JkINGR0YIgMTQKK2VuZHdvcmQg0ZHRgtGB0Y8gMTQtMjM0CitlbmR3b3JkINC10YjRjCAzNi0xNTYKK2VuZHdvcmQg0LXRiNGM0YHRjyAzNi0xNTYtMjM0CitlbmR3b3JkINGR0YjRjCAzNi0xNTYKK2VuZHdvcmQg0ZHRiNGM0YHRjyAzNi0xNTYtMjM0CittaWR3b3JkINC20LDQudGIIDYtMjQ1CittaWR3b3JkINC40LbQsNC50YggNi0yNDUKK2VuZHdvcmQg0LjQtSAxNAorZW5kd29yZCDQuNC10YHRjCAxNC0yMzQKK2VuZHdvcmQg0YvQtSAxNAorZW5kd29yZCDRi9C10YHRjCAxNC0yMzQKK21pZHdvcmQg0LjQt9Cw0YbQuCA2LTE0CittaWRlbmR3b3JkINC40LfQvCAxMzQKK2VuZHdvcmQg0LjQuSAxMjM0NgorZW5kd29yZCDQuNC50YHRjyAxMjM0Ni0yMzQKK2VuZHdvcmQg0YvQuSAxMjM0NgorZW5kd29yZCDRi9C50YHRjyAxMjM0Ni0yMzQKK2VuZHdvcmQg0LjQvCAxMzQKK2VuZHdvcmQg0LjQvNGB0Y8gMTM0LTIzNAorbWlkd29yZCDQuNGA0L7QstCwIDYtMzQ1NgorbWlkd29yZCDQuNGA0L7QstCw0L3QvSA2LTM0NTYtMTM0NQorZW5kd29yZCDQudGA0L7QstCw0L0gNi0zNDU2LTEzNDUKK21pZGVuZHdvcmQg0LjRgdGCIDIzNDUKK21pZHdvcmQg0LjRgdGC0LjRh9C10YHQuiA2LTEzCittaWR3b3JkINC40YfQtdGB0LogNi0xMworbWlkd29yZCDRh9C10YHQuiA2LTEzCitlbmR3b3JkINC40YIgNDUKK2VuZHdvcmQg0LjRgtGB0Y8gNDUtMjM0CittaWRlbmR3b3JkINC40YLQtdC7IDIzNTYKK21pZGVuZHdvcmQg0LjRgtC10LvRjCAyMzU2CittaWRlbmR3b3JkINC40YLQtdC70YzQvSAyMzU2CittaWR3b3JkINC40YLQtdC70YzQvdC+0YHRgiAyMzU2LTI1CittaWRlbmR3b3JkINC40YLQtdC70YzRgdGC0LIgMjM1Ni0yNDU2CittaWR3b3JkINC40YLQtdC70YzRgdGC0LLQtdC90L0gMjM1Ni0yNDU2LTEzNDUKK2VuZHdvcmQg0LjRiNGMIDYtMTU2CitlbmR3b3JkINC40YjRjNGB0Y8gNi0xNTYtMjM0CittaWR3b3JkINC+0YHRgiAyNQorbWlkd29yZCDQvdC+0YHRgiAyNQorZW5kd29yZCDRgdGC0LLQtdC9IDI1LTEzNDUKK21pZHdvcmQg0YHRgtCy0LXQvdC9IDI1LTEzNDUKK21pZHdvcmQg0YHRgtCy0LXQvdC90L7RgdGCIDI1LTI1CitlbmR3b3JkINGB0YwgMjM0CitlbmR3b3JkINGB0Y8gMjM0CitlbmR3b3JkINGC0YwgMjM0NTYKK2VuZHdvcmQg0YLRjNGB0Y8gMjM0NTYtMjM0CitlbmR3b3JkINGD0YIgNDYKK2VuZHdvcmQg0YPRgtGB0Y8gNDYtMjM0CitlbmR3b3JkINGO0YIgNDYKK2VuZHdvcmQg0Y7RgtGB0Y8gNDYtMjM0CitlbmR3b3JkINGD0Y4gMTIzNTYKK2VuZHdvcmQg0YPRjtGB0YwgMTIzNTYtMjM0CitlbmR3b3JkINGO0Y4gMTIzNTYKK2VuZHdvcmQg0Y7RjtGB0YwgMTIzNTYtMjM0CittaWR3b3JkINGD0Y7RiSA2LTEzNDYKK21pZHdvcmQg0Y7RjtGJIDYtMTM0NgorbWlkd29yZCDRh9Cw0LnRiCA2LTEyMzQ1CittaWR3b3JkINC40YfQsNC50YggNi0xMjM0NQorCisjVGFibGUgSVYKKword29yZCDQstCw0YEgMzQ1Ngord29yZCDQstC10YHRjCAyMzQ1NgorYWx3YXlzINCy0YHRkSAxNTYKK2Fsd2F5cyDQstGB0LUgMTU2Cit3b3JkINCy0YHRjiAxNTYtMTI1Ngord29yZCDQstGB0Y8gMTU2LTEyNDYKK3dvcmQg0LLRgdGP0LogMjQ1NgorYmVnbWlkd29yZCDQstGB0Y/QuiAyNDU2Cit3b3JkINC10LUgMjYKK3dvcmQg0LXRkSAyNgord29yZCDQtdC5IDI1CitiZWd3b3JkINC60LDQttC0IDEzLTE0NQorYmVnd29yZCDQutCw0LogMzQ2CitiZWdtaWR3b3JkINC60L7RgtC+0YAgMTMKK3dvcmQg0LzRiyAxMzQKK3dvcmQg0L7QvSAxMzQ1CitzdWZ3b3JkINGB0LDQvCAxNAorYmVnd29yZCDRgdCw0LzQviAxNAorYmVnd29yZCDRgdC10LEgMjM0CitwcmZ3b3JkINGB0LrQvtC70YzQutC+IDIzNC0xNDU2Cit3b3JkINGB0YLQvtC70YzQutC+IDI1LTE0NTYKK3dvcmQg0YLQsCAxMjM0NTYKK3N1ZndvcmQg0YLQtSAyMworc3Vmd29yZCDRgtC+IDEzNDU2Cit3b3JkINGC0YsgMjM2CitzdWZ3b3JkINGN0YLQviAyNDYKK2JlZ3dvcmQg0Y3RgiAyNDYKKworI1RhYmxlIFYKKword29yZCDQsdGD0LTRgtC+IDEyLTEzNDU2Cit3b3JkINCy0L/RgNC+0YfQtdC8IDI0NTYtMTM0Cit3b3JkINC10YHQu9C4IDE1Cit3b3JkINC40LHQviAyNC0yMword29yZCDQutCw0LogMzQ2Cit3b3JkINC+0LTQvdCw0LrQviAxMzUtMTQ1Ngord29yZCDQv9C+0YLQvtC80YNcc9GH0YLQviAxMjM0LTMtMTIzNDUKK3dvcmQg0YLQsNC60LbQtSAxMjM0NTYtMjQ1Cit3b3JkINGC0LDQulxz0LrQsNC6IDIzNDUtMy0xMword29yZCDRgtC+0LbQtSAxMzQ1Ni0yNDUKK3dvcmQg0YfRgtC+IDEyMzQ1Cit3b3JkINGH0YLQvtCxIDEyMzQ1LTEyCit3b3JkINGH0YLQvtCx0YsgMTIzNDUtMjMKKworI1RhYmxlIFZJCisKKworcHJmd29yZCDQsdGLIDIzCit3b3JkINCy0YHRkS3RgtCw0LrQuCAxNTYtMzYtMjQ2Cit3b3JkINCy0YHQtS3RgtCw0LrQuCAxNTYtMzYtMjQ2Cit3b3JkINC00LDQttC1IDE0NS0yNDUKK3dvcmQg0LjQvNC10L3QvdC+IDI0LTEyNgorZW5kd29yZCAt0LvQuNCx0L4gMzYtMzUKK3dvcmQg0LvQuNGI0YwgMTIzCit3b3JkINC90LXRg9C20LXQu9C4IDE2LTM1CitlbmR3b3JkIC3QvdC40LHRg9C00YwgMzYtMzQKK3dvcmQg0YDQsNC30LLQtSAxMjM1LTIzNDU2Cit3b3JkINGB0L/QsNGB0LjQsdC+IDIzNC0xMgord29yZCDRgtC+0LvRjNC60L4gMjM1Ngord29yZCDRg9C20LUgMjQ1CisKKyNUYWJsZSBWSUkgKEEpCisKK2JlZ21pZHdvcmQg0LHRg9C0IDEyCitiZWd3b3JkINCx0YPQtNGD0YkgMTItMTM0NgorYWx3YXlzINCx0YvQuyAxMgorYmVnbWlkd29yZCDQsdGL0LLRiCAxMgord29yZCDQsdGL0YLRjCAxMi0yMzQ1NgorYWx3YXlzINC80L7QsyAxMzQKK2JlZ21pZHdvcmQg0LzQvtC2IDEzNAorYmVnd29yZCDQvNC+0LPRg9GJIDEzNC0xMzQ2Cit3b3JkINC80L7QttC10YJcc9Cx0YvRgtGMIDEzNC0zLTEyCitiZWd3b3JkINGF0L7RhyAxMjUKK2JlZ3dvcmQg0YXQvtGC0LUgMTI1CitiZWd3b3JkINGF0L7RgtC4IDEyNQorYmVnd29yZCDRhdC+0YLRjyAxMjUKK3dvcmQg0YXQvtGC0YwgMTI1LTIzNDU2CitwcmZ3b3JkINGF0L7RgtGPIDEyNS0xMjQ2CisKK2Fsd2F5cyDRj9Cy0LjRgtGMIDEyNDYtMjM0NTYKKword29yZCDQv9GA0LXQtNGK0Y/QstC40YLRjCAxMjM0LTMtMTI0Ni0yMzQ1NgorYWx3YXlzINGP0LIgMTI0NgorYWx3YXlzINGP0LLQuCAxMjQ2CitiZWdtaWR3b3JkINGP0LLQu9C10L3QuCAxMjQ2LTM0CithbHdheXMg0Y/QstC40YIgMTI0Ni0yMzQ1CithbHdheXMg0Y/QstGP0YIgMTI0Ni0yMzQ1Cit3b3JkINGP0LLQu9GP0LXRgtGB0Y8gMTI0Ni0yMzQKK3dvcmQg0Y/QstC70Y/RjtGC0YHRjyAxMjQ2LTIzNAorCisjVGFibGUgVklJIChCKQorCit3b3JkINCy0LXQt9C00LUgMjQ1Ni0xMzU2Cit3b3JkINC+0YLQutGD0LTQsCAxMjU2LTEzCit3b3JkINCy0LzQtdGB0YLQtSAyNDU2LTE0Ngord29yZCDQvdC10L7RgtC60YPQtNCwIDE2LTEyNTYtMTMKK3dvcmQg0L3QuNC+0YLQutGD0LTQsCAzNC0xMjU2LTEzCit3b3JkINC+0YLRgdGO0LTQsCAxMjU2LTIzNAord29yZCDQstC90L7QstGMIDI0NTYtMjM0NTYKK3dvcmQg0L7RgtGC0YPQtNCwIDEyNTYtMjM0NQord29yZCDQstC+0L7QsdGJ0LUgMTIzNi0xMzQ2Cit3b3JkINC+0YfQtdC90YwgMTM1LTIzNgord29yZCDQstC/0L7RgdC70LXQtNGB0YLQstC40LggMjQ1Ni0yMzUtMjQKK3dvcmQg0L/QvtGC0L7QvNGDIDEyMzQKK3dvcmQg0LLRgdC10LPQtNCwIDI0NTYtMTI0NQord29yZCDQv9C+0YfQtdC80YMgMTIzNC0yMzYKK3dvcmQg0LLRgdGO0LTRgyAyNDU2LTE0NQord29yZCDQv9C+0Y3RgtC+0LzRgyAyMzUtMjQ2Cit3b3JkINCz0LTQtSAxMjQ1Cit3b3JkINC90LXQs9C00LUgMTYtMTI0NQord29yZCDQvdC40LPQtNC1IDM0LTEyNDUKK3dvcmQg0LrQvtC1LdCz0LTQtSAxNDU2LTE1Cit3b3JkINCz0LTQtS3QvdC40LHRg9C00YwgMTI0NS0zNi0zNAord29yZCDRgNCw0LfRg9C80LXQtdGC0YHRjyAxMjM1LTIzNAord29yZCDQtdGJ0LUgMTM0Ngord29yZCDQtdGJ0ZEgMTM0Ngord29yZCDRgdC10LPQvtC00L3RjyAyMzQtMTI0NQord29yZCDQt9C00LXRgdGMIDEzNTYKK3dvcmQg0YHQtdC50YfQsNGBIDIzNC0yMzQKK3dvcmQg0LjQvdC+0LPQtNCwIDI0LTEKK3dvcmQg0YHRgNCw0LfRgyAyMzQtMTM2Cit3b3JkINC60L7Qs9C00LAgMTQ1Ni0xMjQ1Cit3b3JkINC90LXQutC+0LPQtNCwIDE2LTE0NTYtMTI0NQord29yZCDQvdC40LrQvtCz0LTQsCAzNC0xNDU2LTEyNDUKK3dvcmQg0LrQvtCz0LTQsC3RgtC+IDE0NTYtMTI0NS0zNi0zNAord29yZCDRgdGO0LTQsCAyMzQtMTQ1Cit3b3JkINC60YPQtNCwIDEzLTE0NQord29yZCDQvdC10LrRg9C00LAgMTYtMTMtMTQ1Cit3b3JkINC90LjQutGD0LTQsCAzNC0xMy0xNDUKK3dvcmQg0YLQtdC/0LXRgNGMIDIzNDUKK3dvcmQg0L7QtNC90LDQttC00YsgMTM1LTIzNDYKK3dvcmQg0YLQvtCz0LTQsCAxMzQ1Ni0xMjQ1Cit3b3JkINC+0L/Rj9GC0YwgMTM1LTIzNDU2CisKKyNUYWJsZSBWSUkgKFYpCisKKword29yZCDQsdC+0LvQtdC1IDI2LTE1Cit3b3JkINC90LDQuNCx0L7Qu9C10LUgMzQ1LTI2LTE1Cit3b3JkINCx0L7Qu9GM0YjQtSAxMi0xNTYKK2JlZ3dvcmQg0LHQvtC70YzRiCAxMi0xNTYKK3dvcmQg0LHRi9GB0YLRgNC+IDEyLTEyMzU2Cit3b3JkINCy0L3QsNGH0LDQu9C1IAkyNTYtMzQ1LTI2Cit3b3JkINCy0YHQutC+0YDQtSAyNDU2LTE0NTYKK3dvcmQg0LLRgdC60L7RgNC+0YHRgtC4IDI0NTYtMTQ1Ni0yNS0yNAord29yZCDQs9C70LDQstC90YvQvFxz0L7QsdGA0LDQt9C+0LwgMTI0NS0xMjQ1LTMtMTM1Cit3b3JkINC00LDQu9C10LrQviAxNDUtMTQ1Ngord29yZCDQtNCw0LvQtdC1IDE0NS0yNgord29yZCDQu9GD0YfRiNC1IDEyMy0xNTYKK2JlZ3dvcmQg0LvRg9GH0YggMTIzLTE1Ngord29yZCDQvNC10L3QtdC1IDE0Ni0xNQord29yZCDQvNC10L3RjNGI0LUgMTQ2LTE1NgorYmVnd29yZCDQvNC10L3RjNGIIDE0Ni0xNTYKK3dvcmQg0L3QsNCy0LXRgNC90L4gMzQ1LTEyNgord29yZCDQvdCw0LLQtdGA0L3QvtC1IDM0NS0xMjYtMTUKK3dvcmQg0L3QsNCy0LXRgNC90Y/QutCwIDM0NS0zNDYKK3dvcmQg0L3QsNC60L7QvdC10YYgMTM0NS0xNAord29yZCDQvdCw0L7QsdC+0YDQvtGCIDM0NS0xMzUtMjM0NQord29yZCDQvdCw0L/RgNC40LzQtdGAIDM0NS0xMjM0Cit3b3JkINGA0LDQvdGM0YjQtSAxMjM1LTE1Ngord29yZCDRgdC70LjRiNC60L7QvCAyMzQtMzUtMTM0Cit3b3JkINGC0LDQulxz0LTQsNC70LXQtSAyMzQ1LTMtMTQ1Cit3b3JkINGC0LDQulxz0L3QsNC30YvQstCw0LXQvNGL0LkgMjM0NS0zLTEzNDUKK3dvcmQg0YLQsNC60LjQvFxz0L7QsdGA0LDQt9C+0LwgMjM0NS0zLTEzNQord29yZCDRgtC+0LzRg1xz0L/QvtC00L7QsdC90L7QtSAyMzQ1LTMtMTIzNAorCisjVGFibGUgVklJIChHKQorCisKK3dvcmQg0LDQsdGB0L7Qu9GO0YLQvdC+IDEtMTItMjM0NS0xMjYKK3dvcmQg0LDQutGC0LjQstC90L4gMS0yNDU2LTEyNgord29yZCDQsNC60YLRg9Cw0LvRjNC90L4gMS0xMy0yMzU2LTEyNgord29yZCDQstC10YDQvtGP0YLQvdC+IDIzNDU2LTEyMzU2LTEyNgord29yZCDQstC+0LfQvNC+0LbQvdC+IDEyMzYtMTM1Ni0xMzQtMTI2Cit3b3JkINC90LXQstC+0LfQvNC+0LbQvdC+IDE2LTEyMzYtMTM1Ni0xMzQtMTI2Cit3b3JkINC00LDQstC90L4gMTQ1LTEyNgord29yZCDQvdC10LTQsNCy0L3QviAxNi0xNDUtMTI2Cit3b3JkINC00L7RgdGC0LDRgtC+0YfQvdC+IDI1Ni0yNS0xMjYKK3dvcmQg0L3QtdC00L7RgdGC0LDRgtC+0YfQvdC+IDE2LTI1Ni0yNS0xMjYKK3dvcmQg0LXQttC10LPQvtC00L3QviAxNS0xMjQ1Ni0xMjYKK3dvcmQg0LXQttC10LzQtdGB0Y/Rh9C90L4gMTUtMTM2LTEyNgord29yZCDQtdC20LXQtNC90LXQstC90L4gMTUtMTQ1LTEyNgord29yZCDQutC+0L3QtdGH0L3QviAxNDU2LTEyNgord29yZCDQvNC+0LbQvdC+IDEzNC0xMjYKK3dvcmQg0L7RgdC+0LHQtdC90L3QviAxMzUtMjM0Ni0xMjYKK3dvcmQg0L7Rh9C10LLQuNC00L3QviAxMzUtMjM2LTEyNgord29yZCDQv9C+0YHRgNC10LTRgdGC0LLQtdC90L3QviAyMzUtMjM0LTEyNgord29yZCDQvdC10L/QvtGB0YDQtdC00YHRgtCy0LXQvdC90L4gMTYtMjM1LTIzNC0xMjYKK3dvcmQg0L/RgNC40L3RhtC40L/QuNCw0LvRjNC90L4gMTIzNDYtMTIzNC0yMzU2LTEyNgord29yZCDQsdC10YHQv9GA0LjQvdGG0LjQv9C90L4gMTItMTIzNDYtMTIzNC0xMjYKK3dvcmQg0YHQstC+0LXQstGA0LXQvNC10L3QvdC+IDIzNC0xMjM2LTMtMTI2Cit3b3JkINGB0LvQtdC00L7QstCw0YLQtdC70YzQvdC+IDIzNC0yNi0xMjYKK3dvcmQg0YHQu9GD0YfQsNC50L3QviAyMzQtMTIzNDYtMTI2Cit3b3JkINGB0L7QstC10YDRiNC10L3QvdC+IDIzNDYtMjM0NTYtMTI2Cit3b3JkINGB0L7QstGB0LXQvCAyMzQ2LTE1Ni0xMzQKK3dvcmQg0YLQuNC/0LjRh9C90L4gNTYtMTIzNC0xMjYKK3dvcmQg0YTQvtGA0LzQsNC70YzQvdC+IDEyNC0yMzU2LTEyNgord29yZCDRhdCw0YDQsNC60YLQtdGA0L3QviAxMjUtMTIzNS0xMjYKK3dvcmQg0YfQsNGB0YLQuNGH0L3QviAxMjM0NS0xMjYKK3dvcmQg0YfRgNC10LfQstGL0YfQsNC50L3QviAxMjM0NS0xMzU2LTEyNgorCisjVGFibGUgVklJSQorCitiZWZvcmUgbXVmIGJlZ3dvcmQg0LjRgSAzNgorYmVmb3JlIG11ZiBiZWd3b3JkINC90LXQuNGBIDE2LTM2CitiZWZvcmUgcHJlZCBiZWd3b3JkINC/0YDQtdC0IDEyMzQKK2JlZ3dvcmQg0L/RgNC10LTRgdGCIDEyMzQtMjUKK2JlZm9yZSBjb24tciBiZWd3b3JkINC/0YDQtdC00YHRgtCwIDEyMzQtMjUKK2JlZm9yZSBtdWZzIGJlZ3dvcmQg0YDQsNGBIDEyMzUKK2JlZm9yZSB2b2ljeiBiZWd3b3JkINGA0LDRgSAxMjM1CitiZWZvcmUgbXVmcyBiZWd3b3JkINC90LXRgNCw0YEgMTYtMTIzNQorbWlkd29yZCDRgdC60LAgMzQ2CittaWRlbmR3b3JkINGB0LrQuCAyNDYKK21pZHdvcmQg0YHQutC+IDE0NTYKKworCisKKworCisjIERpZ2l0cworYWx3YXlzIDEgMQorYWx3YXlzIDIgMTIKK2Fsd2F5cyAzIDE0CithbHdheXMgNCAxNDUKK2Fsd2F5cyA1IDE1CithbHdheXMgNiAxMjQKK2Fsd2F5cyA3IDEyNDUKK2Fsd2F5cyA4IDEyNQorYWx3YXlzIDkgMjQKK2Fsd2F5cyAwIDI0NQorCitudW1zaWduIDM0NTYKK21pZG51bSAsIDIKK21pZG51bSA6IDI1CittaWRudW0gLiAyNTYKK21pZG51bSAvIDM0CittaWRudW0gLSAzNgorYWx3YXlzIMO3IDEyNTYKK2Fsd2F5cyA9IDIzNTYKK2Fsd2F5cyArIDIzNQorI3NwZWNpYWwgY2hhcmFjdGVyIHNlcXVlbmNlcworbGl0ZXJhbCA6Ly8gVVJMcworbGl0ZXJhbCB3d3cuCisKK2xpdGVyYWwgLmNvbQorbGl0ZXJhbCAuZWR1CitsaXRlcmFsIC5nb3YKK2xpdGVyYWwgLm1pbAorbGl0ZXJhbCAubmV0CitsaXRlcmFsIC5vcmcKK2luY2x1ZGUgY291bnRyaWVzLmN0aQorCitsaXRlcmFsIC5kb2MKK2xpdGVyYWwgLmh0bQorbGl0ZXJhbCAuaHRtbAorbGl0ZXJhbCAudGV4CitsaXRlcmFsIC50eHQKKworbGl0ZXJhbCAuZ2lmCitsaXRlcmFsIC5qcGcKK2xpdGVyYWwgLnBuZworbGl0ZXJhbCAud2F2CisKK2xpdGVyYWwgLnRhcgorbGl0ZXJhbCAuemlwCisKK2luY2x1ZGUgbGV0dGVycy1sYXRpbi5jdGkKKworI1B1bmN0dWF0aW9uCisKKworYWx3YXlzICggMTI2CithbHdheXMgKSAzNDUKK2Fsd2F5cyA6IDI1CithbHdheXMgOyAyMworCisKK2Fsd2F5cyAqIDM1CithbHdheXMgISAyMzUKK2Fsd2F5cyA/IDI2CithbHdheXMgLCAyCisKKworYWx3YXlzIFxz4oCTIDM2CithbHdheXMgXHMtIDM2CithbHdheXMgwq0gMzYKK3JlcGVhdGFibGUgwq3CrcKtIDM2LTM2LTM2CithbHdheXMgXHPCrVxzIDM2CithbHdheXMgXHPigJQgMzYKKworCithbHdheXMg4oCmIDI1Ni0yNTYtMjU2CithbHdheXMg4oC5IDI0NgorYWx3YXlzIOKAuiAxMzUKK3ByZXB1bmMg4oCeIDIzNgorcG9zdHB1bmMg4oCeIDM1NgorcHJlcHVuYyDigJwgMjM2Citwb3N0cHVuYyDigJwgMzU2CithbHdheXMg4oCYIDIzNgorYWx3YXlzIOKAmSAzNTYKKworYWx3YXlzIMKrIDIzNgorYWx3YXlzIMK7IDM1NgorcHJlcHVuYyDigJ8gMjM2Citwb3N0cHVuYyDigJ8gMzU2CitwcmVwdW5jIOKAnSAyMzYKK3ByZXB1bmMgIiAyMzYKK3Bvc3RwdW5jIOKAnSAzNTYKK3Bvc3RwdW5jICIgMzU2CitwcmVwdW5jICcgMjM2Citwb3N0cHVuYyAnIDM1NgpkaWZmIC0tZ2l0IGEvVGFibGVzL0NvbnRyYWN0aW9uL3NpLmN0YiBiL1RhYmxlcy9Db250cmFjdGlvbi9zaS5jdGIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzcxZDdjNwotLS0gL2Rldi9udWxsCisrKyBiL1RhYmxlcy9Db250cmFjdGlvbi9zaS5jdGIKQEAgLTAsMCArMSw4MSBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorIyAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyMKKyMgQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorIworIyBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorIworIyBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisjIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyMgbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisjCisjIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMgQlJMVFRZIENvbnRyYWN0aW9uIFRhYmxlIC0gU2luaGFsZXNlICh1bmNvbnRyYWN0ZWQpCisjCisjIFNhbXVlbCBUaGliYXVsdCA8c2FtdWVsLnRoaWJhdWx0QGVucy1seW9uLm9yZz4KKyMgCisjIFRoaXMgdGFibGUgaXMgYmFzZWQgb24gdGhlIFVuZXNjbyByZXBvcnQgb24gdGhlIHByb2dyZXNzIG9mIHVuaWZpY2F0aW9uIG9mCisjIGJyYWlsbGUgd3JpdGluZyDCq8KgTCfDiUNSSVRVUkUgQlJBSUxMRSBEQU5TIExFIE1PTkRFwqDCuywgYnkgU2lyIENsdXRoYQorIyBNQUNLRU5aSUU6IGh0dHA6Ly91bmVzZG9jLnVuZXNjby5vcmcvaW1hZ2VzLzAwMTMvMDAxMzUyLzEzNTI1MWZvLnBkZgorIyBUaGUgZG9jdW1lbnQgaXMgZGF0ZWQgMTk1NCwgc28gdGhpcyB0YWJsZSBtYXkgYmUgcXVpdGUgb3V0ZGF0ZWQuCisKK2Fsd2F5cyDgtoUgMQkgIFNJTkhBTEEgTEVUVEVSIEFZQU5OQQorYWx3YXlzIOC2hiAzNDUJICBTSU5IQUxBIExFVFRFUiBBQVlBTk5BCithbHdheXMg4LaHIDEyMzU2CSAgU0lOSEFMQSBMRVRURVIgQUVZQU5OQQorYWx3YXlzIOC2iCAxMjQ1NgkgIFNJTkhBTEEgTEVUVEVSIEFFRVlBTk5BCithbHdheXMg4LaJIDI0CSAgU0lOSEFMQSBMRVRURVIgSVlBTk5BCithbHdheXMg4LaKIDM1CSAgU0lOSEFMQSBMRVRURVIgSUlZQU5OQQorYWx3YXlzIOC2iyAxMzYJICBTSU5IQUxBIExFVFRFUiBVWUFOTkEKK2Fsd2F5cyDgtowgMTI1NgkgIFNJTkhBTEEgTEVUVEVSIFVVWUFOTkEKK2Fsd2F5cyDgto0gNS0xMjM1CSAgU0lOSEFMQSBMRVRURVIgSVJVWUFOTkEKK2Fsd2F5cyDgto4gNi0xMjM1CSAgU0lOSEFMQSBMRVRURVIgSVJVVVlBTk5BCithbHdheXMg4LaPIDUtMTIzCSAgU0lOSEFMQSBMRVRURVIgSUxVWUFOTkEKK2Fsd2F5cyDgtpAgNi0xMjMJICBTSU5IQUxBIExFVFRFUiBJTFVVWUFOTkEKK2Fsd2F5cyDgtpEgMTUJICBTSU5IQUxBIExFVFRFUiBFWUFOTkEKK2Fsd2F5cyDgtpIgMjYJICBTSU5IQUxBIExFVFRFUiBFRVlBTk5BCithbHdheXMg4LaTIDM0CSAgU0lOSEFMQSBMRVRURVIgQUlZQU5OQQorYWx3YXlzIOC2lCAxMzUJICBTSU5IQUxBIExFVFRFUiBPWUFOTkEKK2Fsd2F5cyDgtpUgMTM0NgkgIFNJTkhBTEEgTEVUVEVSIE9PWUFOTkEKK2Fsd2F5cyDgtpYgMjQ2CSAgU0lOSEFMQSBMRVRURVIgQVVZQU5OQQorYWx3YXlzIOC2miAxMwkgIFNJTkhBTEEgTEVUVEVSIEFMUEFQUkFBTkEgS0FZQU5OQQorYWx3YXlzIOC2myA0NgkgIFNJTkhBTEEgTEVUVEVSIE1BSEFBUFJBQU5BIEtBWUFOTkEKK2Fsd2F5cyDgtpwgMTI0NQkgIFNJTkhBTEEgTEVUVEVSIEFMUEFQUkFBTkEgR0FZQU5OQQorYWx3YXlzIOC2nSAxMjYJICBTSU5IQUxBIExFVFRFUiBNQUhBQVBSQUFOQSBHQVlBTk5BCithbHdheXMg4LaeIDM0NgkgIFNJTkhBTEEgTEVUVEVSIEtBTlRBSkEgTkFBU0lLWUFZQQorYWx3YXlzIOC2oCAxNAkgIFNJTkhBTEEgTEVUVEVSIEFMUEFQUkFBTkEgQ0FZQU5OQQorYWx3YXlzIOC2oSAxNgkgIFNJTkhBTEEgTEVUVEVSIE1BSEFBUFJBQU5BIENBWUFOTkEKK2Fsd2F5cyDgtqIgMjQ1CSAgU0lOSEFMQSBMRVRURVIgQUxQQVBSQUFOQSBKQVlBTk5BCithbHdheXMg4LajIDM1NgkgIFNJTkhBTEEgTEVUVEVSIE1BSEFBUFJBQU5BIEpBWUFOTkEKK2Fsd2F5cyDgtqQgMjUJICBTSU5IQUxBIExFVFRFUiBUQUFMVUpBIE5BQVNJS1lBWUEKK2Fsd2F5cyDgtqcgMjM0NTYJICBTSU5IQUxBIExFVFRFUiBBTFBBUFJBQU5BIFRUQVlBTk5BCithbHdheXMg4LaoIDI0NTYJICBTSU5IQUxBIExFVFRFUiBNQUhBQVBSQUFOQSBUVEFZQU5OQQorYWx3YXlzIOC2qSAxMjQ2CSAgU0lOSEFMQSBMRVRURVIgQUxQQVBSQUFOQSBEREFZQU5OQQorYWx3YXlzIOC2qiAxMjM0NTYJICBTSU5IQUxBIExFVFRFUiBNQUhBQVBSQUFOQSBEREFZQU5OQQorYWx3YXlzIOC2qyAzNDU2CSAgU0lOSEFMQSBMRVRURVIgTVVVUkRIQUpBIE5BWUFOTkEKK2Fsd2F5cyDgtq0gMjM0NQkgIFNJTkhBTEEgTEVUVEVSIEFMUEFQUkFBTkEgVEFZQU5OQQorYWx3YXlzIOC2riAxNDU2CSAgU0lOSEFMQSBMRVRURVIgTUFIQUFQUkFBTkEgVEFZQU5OQQorYWx3YXlzIOC2ryAxNDUJICBTSU5IQUxBIExFVFRFUiBBTFBBUFJBQU5BIERBWUFOTkEKK2Fsd2F5cyDgtrAgMjM0NgkgIFNJTkhBTEEgTEVUVEVSIE1BSEFBUFJBQU5BIERBWUFOTkEKK2Fsd2F5cyDgtrEgMTM0NQkgIFNJTkhBTEEgTEVUVEVSIERBTlRBSkEgTkFZQU5OQQorYWx3YXlzIOC2tCAxMjM0CSAgU0lOSEFMQSBMRVRURVIgQUxQQVBSQUFOQSBQQVlBTk5BCithbHdheXMg4La1IDIzNQkgIFNJTkhBTEEgTEVUVEVSIE1BSEFBUFJBQU5BIFBBWUFOTkEKK2Fsd2F5cyDgtrYgMTIJICBTSU5IQUxBIExFVFRFUiBBTFBBUFJBQU5BIEJBWUFOTkEKK2Fsd2F5cyDgtrcgNDUJICBTSU5IQUxBIExFVFRFUiBNQUhBQVBSQUFOQSBCQVlBTk5BCithbHdheXMg4La4IDEzNAkgIFNJTkhBTEEgTEVUVEVSIE1BWUFOTkEKK2Fsd2F5cyDgtrkgNTYJICBTSU5IQUxBIExFVFRFUiBBTUJBIEJBWUFOTkEKK2Fsd2F5cyDgtrogMTM0NTYJICBTSU5IQUxBIExFVFRFUiBZQVlBTk5BCithbHdheXMg4La7IDEyMzUJICBTSU5IQUxBIExFVFRFUiBSQVlBTk5BCithbHdheXMg4La9IDEyMwkgIFNJTkhBTEEgTEVUVEVSIERBTlRBSkEgTEFZQU5OQQorYWx3YXlzIOC3gCAxMjM2CSAgU0lOSEFMQSBMRVRURVIgVkFZQU5OQQorYWx3YXlzIOC3gSAxMjM0NgkgIFNJTkhBTEEgTEVUVEVSIFRBQUxVSkEgU0FZQU5OQQorYWx3YXlzIOC3giAxNDYJICBTSU5IQUxBIExFVFRFUiBNVVVSREhBSkEgU0FZQU5OQQorYWx3YXlzIOC3gyAyMzQJICBTSU5IQUxBIExFVFRFUiBEQU5UQUpBIFNBWUFOTkEKK2Fsd2F5cyDgt4QgMTI1CSAgU0lOSEFMQSBMRVRURVIgSEFZQU5OQQorYWx3YXlzIOC3hSA0NTYJICBTSU5IQUxBIExFVFRFUiBNVVVSREhBSkEgTEFZQU5OQQorYWx3YXlzIOC3hiAxMjQJICBTSU5IQUxBIExFVFRFUiBGQVlBTk5BCmRpZmYgLS1naXQgYS9UYWJsZXMvQ29udHJhY3Rpb24vc3BhY2VzLmN0aSBiL1RhYmxlcy9Db250cmFjdGlvbi9zcGFjZXMuY3RpCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE3MWY0ZGQKLS0tIC9kZXYvbnVsbAorKysgYi9UYWJsZXMvQ29udHJhY3Rpb24vc3BhY2VzLmN0aQpAQCAtMCwwICsxLDM0IEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisjICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorIworIyBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisjCisjIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisjCisjIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyMgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorIyBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyMKKyMgV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworIworIyBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIyBUaGlzIEJSTFRUWSBjb250cmFjdGlvbiBzdWJ0YWJsZSBkZWZpbmVzIGFsbCB0aGUgc3BhY2UgY2hhcmFjdGVycyB0byBiZSBlbXB0eQorIyBicmFpbGxlIGNlbGxzLgorCithbHdheXMJXHgyMAkwCVNQQUNFCithbHdheXMJXHhBMAkwCU5PLUJSRUFLIFNQQUNFCithbHdheXMJXHUyMDAyCTAJRU4gU1BBQ0UKK2Fsd2F5cwlcdTIwMDMJMAlFTSBTUEFDRQorYWx3YXlzCVx1MjAwNAkwCVRIUkVFLVBFUi1FTSBTUEFDRQorYWx3YXlzCVx1MjAwNQkwCUZPVVItUEVSLUVNIFNQQUNFCithbHdheXMJXHUyMDA2CTAJU0lYLVBFUi1FTSBTUEFDRQorYWx3YXlzCVx1MjAwNwkwCUZJR1VSRSBTUEFDRQorYWx3YXlzCVx1MjAwOAkwCVB1TkNUVUFUSU9OIFNQQUNFCithbHdheXMJXHUyMDA5CTAJVEhJTiBTUEFDRQorYWx3YXlzCVx1MjAwQQkwCUhBSVIgU1BBQ0UKK2Fsd2F5cwlcdTIwMkYJMAlOQVJST1cgTk8tQlJFQUsgU1BBQ0UKK2Fsd2F5cwlcdTIwNUYJMAlNRURJVU0gTUFUSEVNQVRJQ0FMIFNQQUNFCmRpZmYgLS1naXQgYS9UYWJsZXMvQ29udHJhY3Rpb24vc3cuY3RiIGIvVGFibGVzL0NvbnRyYWN0aW9uL3N3LmN0YgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNGNlMjU0Ci0tLSAvZGV2L251bGwKKysrIGIvVGFibGVzL0NvbnRyYWN0aW9uL3N3LmN0YgpAQCAtMCwwICsxLDQ5IEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisjICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorIworIyBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisjCisjIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisjCisjIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyMgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorIyBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyMKKyMgV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworIworIyBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIyBCUkxUVFkgQ29udHJhY3Rpb24gVGFibGUgLSBTd2FoaWxpIChjb250cmFjdGVkKQorIworIyBTYW11ZWwgVGhpYmF1bHQgPHNhbXVlbC50aGliYXVsdEBlbnMtbHlvbi5vcmc+CisjIAorIyBUaGlzIHRhYmxlIGlzIGJhc2VkIG9uIHRoZSBVbmVzY28gcmVwb3J0IG9uIHRoZSBwcm9ncmVzcyBvZiB1bmlmaWNhdGlvbiBvZgorIyBicmFpbGxlIHdyaXRpbmcgwqvCoEwnw4lDUklUVVJFIEJSQUlMTEUgREFOUyBMRSBNT05ERcKgwrssIGJ5IFNpciBDbHV0aGEKKyMgTUFDS0VOWklFOiBodHRwOi8vdW5lc2RvYy51bmVzY28ub3JnL2ltYWdlcy8wMDEzLzAwMTM1Mi8xMzUyNTFmby5wZGYKKyMgVGhlIGRvY3VtZW50IGlzIGRhdGVkIDE5NTQsIHNvIHRoaXMgdGFibGUgbWF5IGJlIHF1aXRlIG91dGRhdGVkLgorCitpbmNsdWRlIGxldHRlcnMtbGF0aW4uY3RpCisKK2Fsd2F5cyBuZCAxMjQ2CithbHdheXMgdHcgMTU2CithbHdheXMga3cgMTIzNDUKK2Fsd2F5cyBuZycgMzQ2CithbHdheXMgbnkgMTI0NTYKK2Fsd2F5cyBjaCAxNgorYWx3YXlzIGdoIDEyNgorYWx3YXlzIGdheW4gMTI2CithbHdheXMgc2ggMTQ2CithbHdheXMgdGggMTQ1NgorYWx3YXlzIGRoIDIzNDYKK2Fsd2F5cyBhYSAzNDUKK2Fsd2F5cyBlZSAyNgorYWx3YXlzIGlpIDM1CithbHdheXMgb28gMjQ2CithbHdheXMgdXUgMTI1NgorYWx3YXlzIHN0IDM0CisKKyMgaW5saW5lIGNvbnRyYWN0aW9uIG9mIGVtb2ppIGRlc2NyaXB0aW9ucworZW1vamkgc3cKZGlmZiAtLWdpdCBhL1RhYmxlcy9Db250cmFjdGlvbi90aC5jdGIgYi9UYWJsZXMvQ29udHJhY3Rpb24vdGguY3RiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBlMjc0MWIKLS0tIC9kZXYvbnVsbAorKysgYi9UYWJsZXMvQ29udHJhY3Rpb24vdGguY3RiCkBAIC0wLDAgKzEsMTIxIEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisjICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorIworIyBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisjCisjIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisjCisjIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyMgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorIyBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyMKKyMgV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworIworIyBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIyBCUkxUVFkgQ29udHJhY3Rpb24gVGFibGUgLSBUaGFpIChjb250cmFjdGVkKQorIworIyBTYW11ZWwgVGhpYmF1bHQgPHNhbXVlbC50aGliYXVsdEBlbnMtbHlvbi5vcmc+CisjIAorIyBUaGlzIHRhYmxlIGlzIGJhc2VkIG9uIHRoZSBVbmVzY28gcmVwb3J0IG9uIHRoZSBwcm9ncmVzcyBvZiB1bmlmaWNhdGlvbiBvZgorIyBicmFpbGxlIHdyaXRpbmcgwqvCoEwnw4lDUklUVVJFIEJSQUlMTEUgREFOUyBMRSBNT05ERcKgwrssIGJ5IFNpciBDbHV0aGEKKyMgTUFDS0VOWklFOiBodHRwOi8vdW5lc2RvYy51bmVzY28ub3JnL2ltYWdlcy8wMDEzLzAwMTM1Mi8xMzUyNTFmby5wZGYKKyMgVGhlIGRvY3VtZW50IGlzIGRhdGVkIDE5NTQsIHNvIHRoaXMgdGFibGUgbWF5IGJlIHF1aXRlIG91dGRhdGVkLgorCisjIGNvbnNvbmFudHMKK2Fsd2F5cyDguIEgMTI0NQkgIAlUSEFJIENIQVJBQ1RFUiBLTyBLQUkKK2Fsd2F5cyDguIIgMzQ2CQlUSEFJIENIQVJBQ1RFUiBLSE8gS0hBSQorYWx3YXlzIOC4gyAyMzQ2CQlUSEFJIENIQVJBQ1RFUiBLSE8gS0hVQVQKK2Fsd2F5cyDguIQgMTM2CSAgCVRIQUkgQ0hBUkFDVEVSIEtITyBLSFdBSQorYWx3YXlzIOC4hSA2LTEzNgkgIAlUSEFJIENIQVJBQ1RFUiBLSE8gS0hPTgorYWx3YXlzIOC4hiAzNi0xMzYJICAJVEhBSSBDSEFSQUNURVIgS0hPIFJBS0hBTkcKK2Fsd2F5cyDguIcgMTI0NTYJICAJVEhBSSBDSEFSQUNURVIgTkdPIE5HVQorYWx3YXlzIOC4iCAyNDUJICAJVEhBSSBDSEFSQUNURVIgQ0hPIENIQU4KK2Fsd2F5cyDguIkgMzQJICAJVEhBSSBDSEFSQUNURVIgQ0hPIENISU5HCithbHdheXMg4LiKIDEzCSAgCVRIQUkgQ0hBUkFDVEVSIENITyBDSEFORworYWx3YXlzIOC4iyAzNi0xMwkgIAlUSEFJIENIQVJBQ1RFUiBTTyBTTworYWx3YXlzIOC4jCA2LTM0NgkgIAlUSEFJIENIQVJBQ1RFUiBDSE8gQ0hPRQorYWx3YXlzIOC4jSA2LTEzNDU2ICAJVEhBSSBDSEFSQUNURVIgWU8gWUlORworYWx3YXlzIOC4jiA2LTE0NQkgIAlUSEFJIENIQVJBQ1RFUiBETyBDSEFEQQorYWx3YXlzIOC4jyA2LTEyNTYgIAlUSEFJIENIQVJBQ1RFUiBUTyBQQVRBSworYWx3YXlzIOC4kCA2LTIzNDUJICAJVEhBSSBDSEFSQUNURVIgVEhPIFRIQU4KK2Fsd2F5cyDguJEgNi0yMzQ1NiAgCVRIQUkgQ0hBUkFDVEVSIFRITyBOQU5HTU9OVEhPCithbHdheXMg4LiSIDU2LTIzNDU2CVRIQUkgQ0hBUkFDVEVSIFRITyBQSFVUSEFPCithbHdheXMg4LiTIDYtMTM0NQkgIAlUSEFJIENIQVJBQ1RFUiBOTyBORU4KK2Fsd2F5cyDguJQgMTQ1CSAgCVRIQUkgQ0hBUkFDVEVSIERPIERFSworYWx3YXlzIOC4lSAxMjU2CSAgCVRIQUkgQ0hBUkFDVEVSIFRPIFRBTworYWx3YXlzIOC4liAyMzQ1CSAgCVRIQUkgQ0hBUkFDVEVSIFRITyBUSFVORworYWx3YXlzIOC4lyAyMzQ1NgkgIAlUSEFJIENIQVJBQ1RFUiBUSE8gVEhBSEFOCithbHdheXMg4LiYIDM1Ni0yMzQ1NglUSEFJIENIQVJBQ1RFUiBUSE8gVEhPTkcKK2Fsd2F5cyDguJkgMTM0NQkgIAlUSEFJIENIQVJBQ1RFUiBOTyBOVQorYWx3YXlzIOC4miAxMjM2CSAgCVRIQUkgQ0hBUkFDVEVSIEJPIEJBSU1BSQorYWx3YXlzIOC4myAxMjM0NgkgIAlUSEFJIENIQVJBQ1RFUiBQTyBQTEEKK2Fsd2F5cyDguJwgMTIzNAkgIAlUSEFJIENIQVJBQ1RFUiBQSE8gUEhVTkcKK2Fsd2F5cyDguJ0gMTM0NgkgIAlUSEFJIENIQVJBQ1RFUiBGTyBGQQorYWx3YXlzIOC4niAxNDU2CSAgCVRIQUkgQ0hBUkFDVEVSIFBITyBQSEFOCithbHdheXMg4LifIDEyNDYJICAJVEhBSSBDSEFSQUNURVIgRk8gRkFOCithbHdheXMg4LigIDYtMTQ1NgkgIAlUSEFJIENIQVJBQ1RFUiBQSE8gU0FNUEhBTworYWx3YXlzIOC4oSAxMzQJICAJVEhBSSBDSEFSQUNURVIgTU8gTUEKK2Fsd2F5cyDguKIgMTM0NTYJICAJVEhBSSBDSEFSQUNURVIgWU8gWUFLCithbHdheXMg4LijIDEyMzUJICAJVEhBSSBDSEFSQUNURVIgUk8gUlVBCithbHdheXMg4LilIDEyMwkgIAlUSEFJIENIQVJBQ1RFUiBMTyBMSU5HCithbHdheXMg4LinIDI0NTYJICAJVEhBSSBDSEFSQUNURVIgV08gV0FFTgorYWx3YXlzIOC4qCA2LTIzNAkgIAlUSEFJIENIQVJBQ1RFUiBTTyBTQUxBCithbHdheXMg4LipIDM2LTIzNAkgIAlUSEFJIENIQVJBQ1RFUiBTTyBSVVNJCithbHdheXMg4LiqIDIzNAkgIAlUSEFJIENIQVJBQ1RFUiBTTyBTVUEKK2Fsd2F5cyDguKsgMTI1CSAgCVRIQUkgQ0hBUkFDVEVSIEhPIEhJUAorYWx3YXlzIOC4rCAzNi0xMjMJICAJVEhBSSBDSEFSQUNURVIgTE8gQ0hVTEEKK2Fsd2F5cyDguK0gMTM1CSAgCVRIQUkgQ0hBUkFDVEVSIE8gQU5HCithbHdheXMg4LiuIDEyMzQ1NgkgIAlUSEFJIENIQVJBQ1RFUiBITyBOT0tIVUsKKworIyB2b3dlbHMKK2Fsd2F5cyDguLAgMQkgIAlUSEFJIENIQVJBQ1RFUiBTQVJBIEEKK2Fsd2F5cyDguLIgMTYJICAJVEhBSSBDSEFSQUNURVIgU0FSQSBBQQorYWx3YXlzIOC4syAxMzU2CSAgCVRIQUkgQ0hBUkFDVEVSIFNBUkEgQU0KK2Fsd2F5cyAg4Li0IDEyCSAgCVRIQUkgQ0hBUkFDVEVSIFNBUkEgSQorYWx3YXlzICDguLUgMjMJICAJVEhBSSBDSEFSQUNURVIgU0FSQSBJSQorYWx3YXlzICDguLYgMjQ2CSAgCVRIQUkgQ0hBUkFDVEVSIFNBUkEgVUUKK2Fsd2F5cyAg4Li3IDI2CSAgCVRIQUkgQ0hBUkFDVEVSIFNBUkEgVUVFCithbHdheXMgIOC4uCAxNAkgIAlUSEFJIENIQVJBQ1RFUiBTQVJBIFUKK2Fsd2F5cyAg4Li5IDI1CSAgCVRIQUkgQ0hBUkFDVEVSIFNBUkEgVVUKK2Fsd2F5cyDguYAgMTI0CSAgCVRIQUkgQ0hBUkFDVEVSIFNBUkEgRQorYWx3YXlzIOC5gSAxMjYJICAJVEhBSSBDSEFSQUNURVIgU0FSQSBBRQorYWx3YXlzIOC5giAyNAkgIAlUSEFJIENIQVJBQ1RFUiBTQVJBIE8KK2Fsd2F5cyDguYMgMTU2LTEJICAJVEhBSSBDSEFSQUNURVIgU0FSQSBBSSBNQUlNVUFOCithbHdheXMg4LmEIDE1NgkgIAlUSEFJIENIQVJBQ1RFUiBTQVJBIEFJIE1BSU1BTEFJCisKKyMgY29udHJhY3Rpb25zCithbHdheXMg4LmA4LmF4LiwIDEzNS0xCithbHdheXMg4Lit4LitIDEzNQorYWx3YXlzIOC4p+C4sSAxNQorYWx3YXlzIOC5gOC4teC4oiAxMjM1NgorYWx3YXlzIOC5gOC4teC5iOC4rSAxMjM0NQorYWx3YXlzIOC5gOC4reC4rSAxNDYKK2Fsd2F5cyDguYDguLIgMjM1CisKKyMgYWNjZW50cyBldGMKK2Fsd2F5cyDguYYgMgkgIAlUSEFJIENIQVJBQ1RFUiBNQUlZQU1PSworYWx3YXlzICDguYcgNgkgIAlUSEFJIENIQVJBQ1RFUiBNQUlUQUlLSFUKK2Fsd2F5cyAg4LmIIDM1CSAgCVRIQUkgQ0hBUkFDVEVSIE1BSSBFSworYWx3YXlzICDguYkgMjU2CSAgCVRIQUkgQ0hBUkFDVEVSIE1BSSBUSE8KK2Fsd2F5cyAg4LmKIDIzNTYJICAJVEhBSSBDSEFSQUNURVIgTUFJIFRSSQorYWx3YXlzICDguYsgMjM2CSAgCVRIQUkgQ0hBUkFDVEVSIE1BSSBDSEFUVEFXQQorYWx3YXlzICDguYwgMzU2CSAgCVRIQUkgQ0hBUkFDVEVSIFRIQU5USEFLSEFUCisKKyMgZGlnaXRzCithbHdheXMg4LmQIDI0NTgJICAJVEhBSSBESUdJVCBaRVJPCithbHdheXMg4LmRIDE4CSAgCVRIQUkgRElHSVQgT05FCithbHdheXMg4LmSIDEyOAkgIAlUSEFJIERJR0lUIFRXTworYWx3YXlzIOC5kyAxNDgJICAJVEhBSSBESUdJVCBUSFJFRQorYWx3YXlzIOC5lCAxNDU4CSAgCVRIQUkgRElHSVQgRk9VUgorYWx3YXlzIOC5lSAxNTgJICAJVEhBSSBESUdJVCBGSVZFCithbHdheXMg4LmWIDEyNDgJICAJVEhBSSBESUdJVCBTSVgKK2Fsd2F5cyDguZcgMTI0NTgJICAJVEhBSSBESUdJVCBTRVZFTgorYWx3YXlzIOC5mCAxMjU4CSAgCVRIQUkgRElHSVQgRUlHSFQKK2Fsd2F5cyDguZkgMjQ4CSAgCVRIQUkgRElHSVQgTklORQorCisjIGlubGluZSBjb250cmFjdGlvbiBvZiBlbW9qaSBkZXNjcmlwdGlvbnMKK2Vtb2ppIHRoCmRpZmYgLS1naXQgYS9UYWJsZXMvQ29udHJhY3Rpb24vemgtdHcuY3RiIGIvVGFibGVzL0NvbnRyYWN0aW9uL3poLXR3LmN0YgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZjZiOTc4Ci0tLSAvZGV2L251bGwKKysrIGIvVGFibGVzL0NvbnRyYWN0aW9uL3poLXR3LmN0YgpAQCAtMCwwICsxLDIyIEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisjICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorIworIyBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisjCisjIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisjCisjIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyMgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorIyBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyMKKyMgV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworIworIyBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIyBCUkxUVFkgQ29udHJhY3Rpb24gVGFibGUgLSBDaGluZXNlIChUYWl3YW4sIHVuY29udHJhY3RlZCkKKyMgRGVwcmVjYXRlZCAtIHJlbmFtZWQgdG8gemhfVFcKKworaW5jbHVkZSB6aF9UVy5jdGIKZGlmZiAtLWdpdCBhL1RhYmxlcy9Db250cmFjdGlvbi96aC10dy5jdGkgYi9UYWJsZXMvQ29udHJhY3Rpb24vemgtdHcuY3RpCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ0NjMwMGQKLS0tIC9kZXYvbnVsbAorKysgYi9UYWJsZXMvQ29udHJhY3Rpb24vemgtdHcuY3RpCkBAIC0wLDAgKzEsMjcxODMgQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyMgICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisjCisjIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyMKKyMgQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjIENoaW5lc2UgY2hhcmFjdGVycyBjb250YWlucyBUcmFkaXRpb25hbCBhbmQgU2ltcGlsaWZpZWQKKyMgQW55IGNvbW1lbnQgcGxlYXNlIGNvbnRhY3QgdG8gQ29zY2VsbCBLYW8gPGNvc2NlbGxAZ21haWwuY29tPiAoMjAxOS0yKQorCithbHdheXMgXHUyZWJjIDEyNDUtMTIzNTYtNQorYWx3YXlzIFx1MzQwMCAyNDUtMjM0LTMKK2Fsd2F5cyBcdTM0MDEgMTI0LTIzNDUtNQorYWx3YXlzIFx1MzQwNCAxMjMtMzUtNQorYWx3YXlzIFx1MzQwNSAzNC00CithbHdheXMgXHUzNDA2IDE0NTYtNAorYWx3YXlzIFx1MzQwQyAxNi0yCithbHdheXMgXHUzNDE2IDE1LTM0Ni0yCithbHdheXMgXHUzNDFDIDI0NS0yMzQtMgorYWx3YXlzIFx1MzQxRiAxMjM0NS0zNTYtMworYWx3YXlzIFx1MzQyMSAxMzQ1LTI1LTUKK2Fsd2F5cyBcdTM0MjQgMTQ1LTEyMzYtMworYWx3YXlzIFx1MzQyOCAxNS0xMjU2LTUKK2Fsd2F5cyBcdTM0MjkgMTUtMTM0NTYtMgorYWx3YXlzIFx1MzQyQSAxMjM1LTI0NTYtNQorYWx3YXlzIFx1MzQyQiAxNS0yMzUtMworYWx3YXlzIFx1MzQyQyAxNC0yMzQtMgorYWx3YXlzIFx1MzQyRCAxNC0xNDU2LTQKK2Fsd2F5cyBcdTM0MkUgMTUtNDYtMworYWx3YXlzIFx1MzQyRiAyMzUtMworYWx3YXlzIFx1MzQzMCAxNS0xNDU2LTUKK2Fsd2F5cyBcdTM0MzEgMS0xMzYtNAorYWx3YXlzIFx1MzQzMiAxNDUtMjQ1Ni01CithbHdheXMgXHUzNDMzIDM0LTUKK2Fsd2F5cyBcdTM0MzQgMTIzNC0xMjM2LTMKK2Fsd2F5cyBcdTM0MzUgMTI0NS0zNC0yCithbHdheXMgXHUzNDM2IDEyMzUtMzUtMworYWx3YXlzIFx1MzQzNyAxMzQtMzQ1LTUKK2Fsd2F5cyBcdTM0MzggMjQ1LTIzNDUtNQorYWx3YXlzIFx1MzQzOSAxNi01CithbHdheXMgXHUzNDNBIDEtMTIzNDYtNQorYWx3YXlzIFx1MzQzQiAxMzQ1LTM1Ni01CithbHdheXMgXHUzNDNDIDI0LTEzNTYtMworYWx3YXlzIFx1MzQzRCAxMjM0NS0xMzU2LTMKK2Fsd2F5cyBcdTM0M0UgNDUtMgorYWx3YXlzIFx1MzQ0MCAxMjQtMjQ1Ni01CithbHdheXMgXHUzNDQxIDEtMjUtMworYWx3YXlzIFx1MzQ0MiAxMjM0NS0xMzQ2LTQKK2Fsd2F5cyBcdTM0NDMgMTQ2LTUKK2Fsd2F5cyBcdTM0NDQgMzQtNAorYWx3YXlzIFx1MzQ0NSAxMjUtMjUtNQorYWx3YXlzIFx1MzQ0NiAxMjMtMTIzNi00CithbHdheXMgXHUzNDQ3IDEtMTIzNTYtNQorYWx3YXlzIFx1MzQ0OCAxNDUtMTIzNDYtMworYWx3YXlzIFx1MzQ0OSAxNS0zNC01CithbHdheXMgXHUzNDRBIDE2LTUKK2Fsd2F5cyBcdTM0NEIgMjQ1LTIzNS01CithbHdheXMgXHUzNDRDIDQ1Ni0zCithbHdheXMgXHUzNDREIDE0LTM1Ni01CithbHdheXMgXHUzNDRFIDEzNDUtMTQ2LTQKK2Fsd2F5cyBcdTM0NEYgMS0zNC01CithbHdheXMgXHUzNDUwIDI0LTM0LTIKK2Fsd2F5cyBcdTM0NTEgMTI1LTEyMzYtMgorYWx3YXlzIFx1MzQ1MyAxMy0yNTYtNQorYWx3YXlzIFx1MzQ1NCAxNS0xMjU2LTQKK2Fsd2F5cyBcdTM0NTcgMjQtMTM2LTMKK2Fsd2F5cyBcdTM0NTggMTMtMzQ2LTUKK2Fsd2F5cyBcdTM0NTkgMTQ1LTM0Ni0yCithbHdheXMgXHUzNDVBIDEzNDUtMjUtMgorYWx3YXlzIFx1MzQ1QiAxNS0zNC01CithbHdheXMgXHUzNDVDIDE2LTUKK2Fsd2F5cyBcdTM0NUQgMTQtMTIzNDYtNQorYWx3YXlzIFx1MzQ1RSAxMzQ1Ni01CithbHdheXMgXHUzNDVGIDEzNS0xMzU2LTQKK2Fsd2F5cyBcdTM0NjAgMjQtMzQtNQorYWx3YXlzIFx1MzQ2MiAxMy0yMzYtMgorYWx3YXlzIFx1MzQ2MyAxNC0xMjM2LTIKK2Fsd2F5cyBcdTM0NjQgMTM0LTI0Ni0yCithbHdheXMgXHUzNDY1IDE2LTUKK2Fsd2F5cyBcdTM0NjYgMTQtMTYtNQorYWx3YXlzIFx1MzQ2NyAxMy0xNi01CithbHdheXMgXHUzNDY4IDEyMzUtMTIzNTYtNQorYWx3YXlzIFx1MzQ2OSAxNC0yNS0yCithbHdheXMgXHUzNDZBIDEyLTI0NTYtMgorYWx3YXlzIFx1MzQ2QiAyNDUtMTYtNAorYWx3YXlzIFx1MzQ2RCAxMzUtMTYtNAorYWx3YXlzIFx1MzQ2RSAxMjM1LTEyMzQ1Ni0yCithbHdheXMgXHUzNDZGIDE1LTEyNTYtNAorYWx3YXlzIFx1MzQ3MCAxMjM1LTEyNDYtNQorYWx3YXlzIFx1MzQ3MSAxMjQ1LTE0Ni00CithbHdheXMgXHUzNDcyIDEzNS0zNTYtNQorYWx3YXlzIFx1MzQ3MyAxLTEyMzU2LTUKK2Fsd2F5cyBcdTM0NzQgMjQ1LTE0NTYtMworYWx3YXlzIFx1MzQ3NSAxMy0xNi0yCithbHdheXMgXHUzNDc2IDE1LTE2LTUKK2Fsd2F5cyBcdTM0NzcgMTI0LTI0NTYtNQorYWx3YXlzIFx1MzQ3OCAyNDYtMgorYWx3YXlzIFx1MzQ3OSAxMjM1LTEyNDYtNQorYWx3YXlzIFx1MzQ3QSAxMy0yNTYtNQorYWx3YXlzIFx1MzQ3QiAxMzQtMzQ1LTUKK2Fsd2F5cyBcdTM0N0MgMTQtMjM2LTUKK2Fsd2F5cyBcdTM0N0QgMTI0LTEzNDYtMgorYWx3YXlzIFx1MzQ3RSAyNDYtMgorYWx3YXlzIFx1MzQ3RiAxLTE0Ni01CithbHdheXMgXHUzNDgwIDEtMjM0Ni0yCithbHdheXMgXHUzNDgxIDEyNTYtNAorYWx3YXlzIFx1MzQ4MiAxLTI1LTIKK2Fsd2F5cyBcdTM0ODMgMTU2LTUKK2Fsd2F5cyBcdTM0ODQgMTI0NS0xMjM2LTQKK2Fsd2F5cyBcdTM0ODUgMjQ1LTE2LTQKK2Fsd2F5cyBcdTM0ODYgMTUtMTYtNQorYWx3YXlzIFx1MzQ4NyAxMzQtMzQtNQorYWx3YXlzIFx1MzQ4OCAxNS0yMzQ1LTUKK2Fsd2F5cyBcdTM0ODkgMTI0LTEzNDYtNAorYWx3YXlzIFx1MzQ4QSAxNS0yMzQ2LTUKK2Fsd2F5cyBcdTM0OEIgMTUtMTU2LTMKK2Fsd2F5cyBcdTM0OEMgMjQ1LTIzNS0yCithbHdheXMgXHUzNDhEIDE0LTM1Ni00CithbHdheXMgXHUzNDhFIDE1LTM0NS01CithbHdheXMgXHUzNDkxIDEyMzUtMTI0Ni01CithbHdheXMgXHUzNDkyIDEyMzQtMzQtMgorYWx3YXlzIFx1MzQ5MyAxMjQtMzQ1LTUKK2Fsd2F5cyBcdTM0OTQgMjQtMzQtNAorYWx3YXlzIFx1MzQ5NSA0Ni0zCithbHdheXMgXHUzNDk2IDEyMzU2LTQKK2Fsd2F5cyBcdTM0OTcgMTI0LTI0NTYtMgorYWx3YXlzIFx1MzQ5OSAxMzQtMjM0NS0yCithbHdheXMgXHUzNDlBIDEyMzQ1Ni00CithbHdheXMgXHUzNDlCIDE0NS0yNDYtNQorYWx3YXlzIFx1MzQ5QyAxMjU2LTQKK2Fsd2F5cyBcdTM0OUQgMTM0LTM0Ni01CithbHdheXMgXHUzNDlFIDEzLTI1Ni01CithbHdheXMgXHUzNDlGIDEzNDUtMjQ2LTQKK2Fsd2F5cyBcdTM0QTAgMTUtMzQ2LTUKK2Fsd2F5cyBcdTM0QTEgMjM0LTIKK2Fsd2F5cyBcdTM0QTQgMTItMjM0Ni01CithbHdheXMgXHUzNEE1IDEyMzQ1LTEzNTYtMworYWx3YXlzIFx1MzRBNiAxNC0zNTYtNAorYWx3YXlzIFx1MzRBNyAxNC0xNi01CithbHdheXMgXHUzNEE4IDE1LTIzNDUtMworYWx3YXlzIFx1MzRBOSAxNC0yNS00CithbHdheXMgXHUzNEFBIDE1LTE2LTIKK2Fsd2F5cyBcdTM0QUIgMTMtMTYtNQorYWx3YXlzIFx1MzRBQyA0NTYtMworYWx3YXlzIFx1MzRBRCAxMjMtMTIzNDU2LTMKK2Fsd2F5cyBcdTM0QUYgMzQ2LTUKK2Fsd2F5cyBcdTM0QjAgMjQ1LTQ1LTIKK2Fsd2F5cyBcdTM0QjIgMjQ1LTI0NTYtMgorYWx3YXlzIFx1MzRCMyAxNC00Ni00CithbHdheXMgXHUzNEI0IDEzLTM0LTQKK2Fsd2F5cyBcdTM0QjUgMTM0LTE0Ni01CithbHdheXMgXHUzNEI2IDEzLTEyMzQ2LTMKK2Fsd2F5cyBcdTM0QjcgMTUtMTM0NTYtMworYWx3YXlzIFx1MzRCOCAxNS0xMjQ2LTUKK2Fsd2F5cyBcdTM0QjkgMTQ1LTIzNDUtMworYWx3YXlzIFx1MzRCQSA0NTYtNAorYWx3YXlzIFx1MzRCQiAxMzQtMTQ2LTUKK2Fsd2F5cyBcdTM0QkMgMTM0LTEyMzYtMgorYWx3YXlzIFx1MzRCRCAyNDUtNDUtMworYWx3YXlzIFx1MzRCRSAyNC0xNTYtNQorYWx3YXlzIFx1MzRCRiAxNC0xNi0yCithbHdheXMgXHUzNEMxIDQ1Ni00CithbHdheXMgXHUzNEMyIDEyMy0xMjM1Ni01CithbHdheXMgXHUzNEMzIDE0NS0zNC01CithbHdheXMgXHUzNEM0IDEyLTEzNi01CithbHdheXMgXHUzNEM1IDEyNC0xMzQ1Ni0zCithbHdheXMgXHUzNEM3IDI1LTUKK2Fsd2F5cyBcdTM0QzggMTM1LTEzNDU2LTUKK2Fsd2F5cyBcdTM0QzkgMTIzNS0yNS01CithbHdheXMgXHUzNENBIDE0NS0xMjM0Ni01CithbHdheXMgXHUzNENCIDEzLTEyMzQ2LTUKK2Fsd2F5cyBcdTM0Q0MgMTItMTM1Ni0zCithbHdheXMgXHUzNENFIDI0NS0xNDU2LTMKK2Fsd2F5cyBcdTM0Q0YgMTMtMjM1LTQKK2Fsd2F5cyBcdTM0RDAgMTQtMzQtNQorYWx3YXlzIFx1MzREMSAxNS0xMzQ1Ni01CithbHdheXMgXHUzNEQzIDEzNDUtMTIzNi0yCithbHdheXMgXHUzNEQ0IDE1LTM0Ni01CithbHdheXMgXHUzNEQ1IDEzNC0zNDYtNQorYWx3YXlzIFx1MzRENiAxMzUtMTYtNQorYWx3YXlzIFx1MzRENyAxMy0zNDYtMgorYWx3YXlzIFx1MzREOCAxNS0zNC01CithbHdheXMgXHUzNERBIDEzLTEyMzQ2LTMKK2Fsd2F5cyBcdTM0REIgMTMtMTIzNDYtMworYWx3YXlzIFx1MzREQyAyMzQtNQorYWx3YXlzIFx1MzRERCAxMi00NTYtNQorYWx3YXlzIFx1MzRERSAyNDUtMjM0NTYtNQorYWx3YXlzIFx1MzRERiAxMjM0LTE2LTIKK2Fsd2F5cyBcdTM0RTAgMTQ1LTIzNDUtNQorYWx3YXlzIFx1MzRFMSAxMjM0NS0xMjM1Ni00CithbHdheXMgXHUzNEUyIDE0LTI1LTUKK2Fsd2F5cyBcdTM0RTMgMjQ1LTIzNDU2LTUKK2Fsd2F5cyBcdTM0RTQgMjQ1LTIzNDU2LTUKK2Fsd2F5cyBcdTM0RTUgMTI0LTEyMzQ2LTMKK2Fsd2F5cyBcdTM0RTYgMTM1LTEyNi01CithbHdheXMgXHUzNEU3IDEzLTEyMzYtMworYWx3YXlzIFx1MzRFOCAyNDUtMTU2LTUKK2Fsd2F5cyBcdTM0RTkgMTMtMzQ2LTIKK2Fsd2F5cyBcdTM0RUEgMTQtMTM0Ni00CithbHdheXMgXHUzNEVDIDEyMy0zNC0zCithbHdheXMgXHUzNEVEIDI0LTIzNDYtMgorYWx3YXlzIFx1MzRFRSAxMy0yMzQ2LTMKK2Fsd2F5cyBcdTM0RUYgMTQtMTYtMgorYWx3YXlzIFx1MzRGMCAxMjM1LTM1LTUKK2Fsd2F5cyBcdTM0RjEgMjQtMzQtMworYWx3YXlzIFx1MzRGMiAxMjM0LTIzNDUtMworYWx3YXlzIFx1MzRGMyAxNDUtMTYtMworYWx3YXlzIFx1MzRGNCAxMjQ1LTEyNDU2LTQKK2Fsd2F5cyBcdTM0RjUgMjM0Ni01CithbHdheXMgXHUzNEY2IDI0NS0zNDYtNQorYWx3YXlzIFx1MzRGNyAxNi01CithbHdheXMgXHUzNEY4IDEtMjUtMgorYWx3YXlzIFx1MzRGOSAyNDUtMTI0Ni01CithbHdheXMgXHUzNEZBIDEzLTIzNDUtMworYWx3YXlzIFx1MzRGQiAxMy0xMzQ2LTMKK2Fsd2F5cyBcdTM0RkMgMTItMTU2LTUKK2Fsd2F5cyBcdTM0RkQgMTItMTIzNDYtMgorYWx3YXlzIFx1MzRGRSAxNS0xNi0zCithbHdheXMgXHUzNTAwIDE0LTQ2LTUKK2Fsd2F5cyBcdTM1MDEgMTQ1LTEzNTYtMworYWx3YXlzIFx1MzUwMiAxNC0xNDU2LTIKK2Fsd2F5cyBcdTM1MDMgMTUtMjM2LTMKK2Fsd2F5cyBcdTM1MDQgMTUtMzQtNQorYWx3YXlzIFx1MzUwNSAxNS0yNDYtNQorYWx3YXlzIFx1MzUwNiAxMjUtMTIzNi00CithbHdheXMgXHUzNTA3IDEyMzQtMTI2LTMKK2Fsd2F5cyBcdTM1MDkgMS0zNC0yCithbHdheXMgXHUzNTBBIDE0NS0xMjM2LTQKK2Fsd2F5cyBcdTM1MEIgMTMtMjM0NS0zCithbHdheXMgXHUzNTBDIDEyNS0xMjM1Ni01CithbHdheXMgXHUzNTBEIDEyLTM1LTMKK2Fsd2F5cyBcdTM1MEUgMTUtMjM2LTMKK2Fsd2F5cyBcdTM1MEYgMTQtMTYtNQorYWx3YXlzIFx1MzUxMCAyNDUtMjM0NS0zCithbHdheXMgXHUzNTExIDEyLTE1Ni01CithbHdheXMgXHUzNTEyIDE1LTE2LTIKK2Fsd2F5cyBcdTM1MTMgMTMtMjM0NS00CithbHdheXMgXHUzNTE1IDEzLTE2LTIKK2Fsd2F5cyBcdTM1MTcgMTIzNDUtMzU2LTUKK2Fsd2F5cyBcdTM1MTggMTItMzQtNQorYWx3YXlzIFx1MzUxOSAxMzUtMTM1Ni0zCithbHdheXMgXHUzNTFBIDEyMy0xMjM1Ni00CithbHdheXMgXHUzNTFDIDEzNS0xMjYtMgorYWx3YXlzIFx1MzUxRCAxNC00Ni00CithbHdheXMgXHUzNTFFIDEyMy0yMzU2LTMKK2Fsd2F5cyBcdTM1MjAgMTIzNS0yMzQ2LTIKK2Fsd2F5cyBcdTM1MjEgMTIzNC0xNi01CithbHdheXMgXHUzNTIyIDE1LTIzNi0zCithbHdheXMgXHUzNTIzIDE0LTM1Ni01CithbHdheXMgXHUzNTI0IDE1LTE0NTYtNQorYWx3YXlzIFx1MzUyNSAxMjM0LTE2LTIKK2Fsd2F5cyBcdTM1MjYgNDYtNAorYWx3YXlzIFx1MzUyNyAxNC0xMjU2LTUKK2Fsd2F5cyBcdTM1MjggMTM1LTM1Ni01CithbHdheXMgXHUzNTI5IDIzNDYtNQorYWx3YXlzIFx1MzUyQSAxNC0zNC00CithbHdheXMgXHUzNTJDIDEtMjUtMgorYWx3YXlzIFx1MzUyRCAxMi0xNTYtMgorYWx3YXlzIFx1MzUyRSAxMzQ1LTI1LTIKK2Fsd2F5cyBcdTM1MkYgMTUtNDUtMgorYWx3YXlzIFx1MzUzMCAxMjM1LTEzNTYtMgorYWx3YXlzIFx1MzUzMSAxMjU2LTQKK2Fsd2F5cyBcdTM1MzIgMTMtMTI0Ni00CithbHdheXMgXHUzNTMzIDEzLTEyNDYtNAorYWx3YXlzIFx1MzUzNCAxNi01CithbHdheXMgXHUzNTM1IDE1LTQ1LTQKK2Fsd2F5cyBcdTM1MzYgMTMtMTIzNi00CithbHdheXMgXHUzNTM3IDE0LTEyMzU2LTUKK2Fsd2F5cyBcdTM1MzggMTI0LTE2LTMKK2Fsd2F5cyBcdTM1MzkgMTQtMjM0Ni01CithbHdheXMgXHUzNTNBIDI0LTE1Ni01CithbHdheXMgXHUzNTNCIDEyMzQtMTYtMworYWx3YXlzIFx1MzUzQyAxNS0xMjM0NTYtNAorYWx3YXlzIFx1MzUzRCAyMzQtNAorYWx3YXlzIFx1MzUzRSAxMy0zNDYtMgorYWx3YXlzIFx1MzUzRiAxMjUtMTIzNTYtNQorYWx3YXlzIFx1MzU0MCAyMzQtMgorYWx3YXlzIFx1MzU0MSAyNDUtMjM2LTUKK2Fsd2F5cyBcdTM1NDIgMTQ1Ni0yCithbHdheXMgXHUzNTQzIDE1LTE2LTMKK2Fsd2F5cyBcdTM1NDQgMS0xNTYtNAorYWx3YXlzIFx1MzU0NSAxMy0yMzQ1Ni0yCithbHdheXMgXHUzNTQ2IDEyMzUtMzQtNQorYWx3YXlzIFx1MzU0NyAxNC0zNDUtMworYWx3YXlzIFx1MzU0OCAxNi00CithbHdheXMgXHUzNTQ5IDEyMy0yMzQ2LTUKK2Fsd2F5cyBcdTM1NEEgMTIzNDUtMzQtMworYWx3YXlzIFx1MzU0QiAyNDUtMTQ1Ni0yCithbHdheXMgXHUzNTRDIDI0NTYtNQorYWx3YXlzIFx1MzU0RCAxNDUtMTI0Ni0zCithbHdheXMgXHUzNTRFIDEyMy0yMzQ2LTUKK2Fsd2F5cyBcdTM1NEYgMTItMzQtMgorYWx3YXlzIFx1MzU1MCAxNS0zNDYtNAorYWx3YXlzIFx1MzU1MSAxMi0zNC0yCithbHdheXMgXHUzNTUyIDEyNDYtMgorYWx3YXlzIFx1MzU1MyAxMi0xMjM2LTIKK2Fsd2F5cyBcdTM1NTQgMTI0LTEzNDU2LTMKK2Fsd2F5cyBcdTM1NTUgMTIzNS0xMjQ1Ni01CithbHdheXMgXHUzNTU2IDE1LTM0LTUKK2Fsd2F5cyBcdTM1NTcgMjM0LTUKK2Fsd2F5cyBcdTM1NTggMjQ1LTEyMzYtMworYWx3YXlzIFx1MzU1OSAxMy0yNTYtNQorYWx3YXlzIFx1MzU1QSAxLTE0Ni00CithbHdheXMgXHUzNTVCIDI0Ni0yCithbHdheXMgXHUzNTVDIDI0LTE1Ni00CithbHdheXMgXHUzNTVFIDI0LTM1LTMKK2Fsd2F5cyBcdTM1NUYgMTIzLTEyNDYtNQorYWx3YXlzIFx1MzU2MCAyNC00NTYtMworYWx3YXlzIFx1MzU2MSAxMjM1LTI1LTUKK2Fsd2F5cyBcdTM1NjIgMTMtMjQ1Ni01CithbHdheXMgXHUzNTYzIDIzNDUtNAorYWx3YXlzIFx1MzU2NCAyNDUtMjM0LTIKK2Fsd2F5cyBcdTM1NjUgMjQtMTM2LTMKK2Fsd2F5cyBcdTM1NjYgMTIzNS0zNS01CithbHdheXMgXHUzNTY3IDE1LTE2LTMKK2Fsd2F5cyBcdTM1NjggMTIzNDUtMTIzNi01CithbHdheXMgXHUzNTY5IDEyMzQtMTM0Ni01CithbHdheXMgXHUzNTZBIDE0NS0xMjM2LTQKK2Fsd2F5cyBcdTM1NkIgMTIzNDUtMTM0Ni00CithbHdheXMgXHUzNTZDIDEzLTEyMzQ2LTMKK2Fsd2F5cyBcdTM1NkQgMTQ2LTMKK2Fsd2F5cyBcdTM1NkUgMTIzNDUtMzQtNAorYWx3YXlzIFx1MzU2RiAxMzQ1LTM0NS01CithbHdheXMgXHUzNTcwIDE1LTIzNi01CithbHdheXMgXHUzNTcxIDIzNC0yCithbHdheXMgXHUzNTcyIDEyMzUtMzUtMgorYWx3YXlzIFx1MzU3MyAxNS0yMzUtMworYWx3YXlzIFx1MzU3NCAxMi0xMzYtMgorYWx3YXlzIFx1MzU3NSAxMy0yNS0yCithbHdheXMgXHUzNTc2IDEzNC0xMjYtNQorYWx3YXlzIFx1MzU3NyAxMjM0LTM0NS0zCithbHdheXMgXHUzNTc4IDE0LTE2LTUKK2Fsd2F5cyBcdTM1NzkgMTIzNDUtMzQ1LTIKK2Fsd2F5cyBcdTM1N0EgMTIzNS0xNDYtMgorYWx3YXlzIFx1MzU3QiAxMjM0LTEyMzU2LTQKK2Fsd2F5cyBcdTM1N0MgMTUtMjM1LTMKK2Fsd2F5cyBcdTM1N0QgMTUtMTU2LTUKK2Fsd2F5cyBcdTM1ODAgMTQtMjM0Ni01CithbHdheXMgXHUzNTgxIDE0LTE0NTYtNQorYWx3YXlzIFx1MzU4MiAxNi01CithbHdheXMgXHUzNTgzIDEyMzUtMTIzNTYtNAorYWx3YXlzIFx1MzU4NCAxLTEyMzU2LTMKK2Fsd2F5cyBcdTM1ODUgMTUtMTI1Ni01CithbHdheXMgXHUzNTg2IDI0NS0xMjU2LTIKK2Fsd2F5cyBcdTM1ODcgMTU2LTIKK2Fsd2F5cyBcdTM1ODggMTQtMTQ2LTQKK2Fsd2F5cyBcdTM1ODkgMjQ1LTE2LTQKK2Fsd2F5cyBcdTM1OEEgMTUtMjU2LTIKK2Fsd2F5cyBcdTM1OEYgMTM0NS0zNDYtNQorYWx3YXlzIFx1MzU5MCAxMjQ2LTQKK2Fsd2F5cyBcdTM1OTEgMTUtMzQ2LTUKK2Fsd2F5cyBcdTM1OTIgMTI0LTE2LTIKK2Fsd2F5cyBcdTM1OTMgMTIzNS0xMjM0Ni0yCithbHdheXMgXHUzNTk0IDEyNC0xMjM0NTYtNAorYWx3YXlzIFx1MzU5NSAxMzQ1LTM0Ni01CithbHdheXMgXHUzNTk2IDEzNDUtMzQ2LTUKK2Fsd2F5cyBcdTM1OTcgMTQ1Ni0yCithbHdheXMgXHUzNTk4IDEtMTM2LTMKK2Fsd2F5cyBcdTM1OUUgMjM1Ni0zCithbHdheXMgXHUzNTlGIDI0LTEyMzU2LTUKK2Fsd2F5cyBcdTM1QTAgMTM0NS0zNDUtNAorYWx3YXlzIFx1MzVBMSAzNDYtNQorYWx3YXlzIFx1MzVBMiAyNDUtMTU2LTIKK2Fsd2F5cyBcdTM1QTMgMTIzNC0xMjM1Ni00CithbHdheXMgXHUzNUE0IDEyMzUtMTIzNi0yCithbHdheXMgXHUzNUE1IDEzLTI1Ni01CithbHdheXMgXHUzNUE2IDE0NS0xMjM0Ni00CithbHdheXMgXHUzNUE3IDEyMzQ1Ni00CithbHdheXMgXHUzNUE4IDE0LTM0LTUKK2Fsd2F5cyBcdTM1QTkgMTUtMTIzNTYtNAorYWx3YXlzIFx1MzVBQSAxMjU2LTUKK2Fsd2F5cyBcdTM1QUIgMTQtMTM0NTYtMgorYWx3YXlzIFx1MzVBRCAxMjQtMjM0NS00CithbHdheXMgXHUzNUFFIDE0LTEyMzQ1Ni0yCithbHdheXMgXHUzNUI0IDEyMzQ1Ni00CithbHdheXMgXHUzNUI1IDEzLTEyNTYtNQorYWx3YXlzIFx1MzVCNiAxNDU2LTMKK2Fsd2F5cyBcdTM1QjcgMjQtMTU2LTIKK2Fsd2F5cyBcdTM1QjggMTUtMjM2LTMKK2Fsd2F5cyBcdTM1QjkgMTIzNC0xMzYtMgorYWx3YXlzIFx1MzVCQSAxMi0xMjM0NTYtNAorYWx3YXlzIFx1MzVCQiAxMjQ1LTEyMzU2LTIKK2Fsd2F5cyBcdTM1QkMgMTQ1LTI1LTQKK2Fsd2F5cyBcdTM1QkQgMTI1LTIzNDYtMgorYWx3YXlzIFx1MzVCRSAyMzQ2LTUKK2Fsd2F5cyBcdTM1QkYgMzQ2LTIKK2Fsd2F5cyBcdTM1QzAgMjM0LTMKK2Fsd2F5cyBcdTM1QzEgMjM0Ni01CithbHdheXMgXHUzNUMyIDI0LTEzNTYtNAorYWx3YXlzIFx1MzVDMyAxMjM0NTYtNAorYWx3YXlzIFx1MzVDNCAxMzQtMTIzNi01CithbHdheXMgXHUzNUM1IDEyMzUtMzQtMgorYWx3YXlzIFx1MzVDNiAxMy0yMzQ2LTIKK2Fsd2F5cyBcdTM1QzcgMTUtMjM0NTYtMworYWx3YXlzIFx1MzVDOCAxMzQtMTIzNi0yCithbHdheXMgXHUzNUM5IDE0LTIzNi01CithbHdheXMgXHUzNUNBIDEzLTE2LTIKK2Fsd2F5cyBcdTM1Q0IgMTIzNS0xMjM1Ni0yCithbHdheXMgXHUzNUNDIDEtMTU2LTUKK2Fsd2F5cyBcdTM1Q0QgMS0yNDU2LTMKK2Fsd2F5cyBcdTM1Q0UgMTMtMjM0NTYtNQorYWx3YXlzIFx1MzVDRiAyMzU2LTMKK2Fsd2F5cyBcdTM1RDAgMTIzLTIzNDYtNQorYWx3YXlzIFx1MzVEMSAxMzUtMjQ1Ni0xCithbHdheXMgXHUzNUQyIDI0NTYtNQorYWx3YXlzIFx1MzVEMyAxLTEyNDYtMworYWx3YXlzIFx1MzVENCAyNDUtMjM0NS0zCithbHdheXMgXHUzNUQ1IDEzLTEyMzU2LTUKK2Fsd2F5cyBcdTM1RDYgMTQ1LTEyMzYtNQorYWx3YXlzIFx1MzVENyAxMzUtMTYtNAorYWx3YXlzIFx1MzVEOCAxMzUtMTI2LTIKK2Fsd2F5cyBcdTM1RDkgMTItMzQtMgorYWx3YXlzIFx1MzVEQSAxNC0xNi01CithbHdheXMgXHUzNURCIDE1LTI0Ni01CithbHdheXMgXHUzNURDIDE1LTIzNC01CithbHdheXMgXHUzNURFIDEyMzQtMTI2LTUKK2Fsd2F5cyBcdTM1RTIgMTIzNS0xMjM0Ni0yCithbHdheXMgXHUzNUUzIDEyNC0xNi01CithbHdheXMgXHUzNUU0IDI0NS0xNi0zCithbHdheXMgXHUzNUU1IDEyMy0yNS01CithbHdheXMgXHUzNUU2IDE0LTE0Ni0yCithbHdheXMgXHUzNUU3IDEtMTU2LTUKK2Fsd2F5cyBcdTM1RTggMjQ1Ni00CithbHdheXMgXHUzNUU5IDE1LTE2LTMKK2Fsd2F5cyBcdTM1RUEgMTIzNC0xNi0zCithbHdheXMgXHUzNUVCIDI0NS0zNDYtNQorYWx3YXlzIFx1MzVFQyAxMi0zNDUtMworYWx3YXlzIFx1MzVFRCAxNS0xNi0zCithbHdheXMgXHUzNUYwIDI0NS0xMjM0Ni0yCithbHdheXMgXHUzNUYxIDEzLTE2LTIKK2Fsd2F5cyBcdTM1RjIgMTIzNS0zNS01CithbHdheXMgXHUzNUYzIDE0NS0zNDUtMworYWx3YXlzIFx1MzVGNCAyMzQ1LTIKK2Fsd2F5cyBcdTM1RjUgMTUtMTI1Ni01CithbHdheXMgXHUzNUY2IDEyMzQtMTI2LTMKK2Fsd2F5cyBcdTM1RjcgMTUtMjQ1Ni0zCithbHdheXMgXHUzNUZBIDE1LTM0NS01CithbHdheXMgXHUzNUZCIDEzLTI1LTMKK2Fsd2F5cyBcdTM1RkMgMzQ2LTUKK2Fsd2F5cyBcdTM1RkQgMTUtNDYtNAorYWx3YXlzIFx1MzVGRSAxNS0yMzYtMworYWx3YXlzIFx1MzVGRiAxMjM1LTIzNDYtNAorYWx3YXlzIFx1MzYwMCAxMjUtMjUtNQorYWx3YXlzIFx1MzYwMSAxNi01CithbHdheXMgXHUzNjAyIDI0NS0xNTYtMgorYWx3YXlzIFx1MzYwMyAxMzQ1LTI1LTUKK2Fsd2F5cyBcdTM2MDQgMTQtMTM1Ni0zCithbHdheXMgXHUzNjA1IDE1LTIzNDUtMgorYWx3YXlzIFx1MzYwNiAxMjQtMjQ1Ni0yCithbHdheXMgXHUzNjA3IDEyNDUtMTIzNDYtMgorYWx3YXlzIFx1MzYwOCAxMzQ1LTE2LTQKK2Fsd2F5cyBcdTM2MDkgMTMtMzQ2LTIKK2Fsd2F5cyBcdTM2MEEgMTYtNQorYWx3YXlzIFx1MzYwQiAxNS0yMzQ1LTIKK2Fsd2F5cyBcdTM2MEMgMTMtMTI1Ni01CithbHdheXMgXHUzNjBEIDEzLTE2LTIKK2Fsd2F5cyBcdTM2MEUgMTIzNS0xMjM2LTQKK2Fsd2F5cyBcdTM2MTAgMTIzNC0xNDYtNQorYWx3YXlzIFx1MzYxMSAxNC0xNi01CithbHdheXMgXHUzNjEzIDE0LTEyMzYtMgorYWx3YXlzIFx1MzYxNCAxNS0yNDU2LTMKK2Fsd2F5cyBcdTM2MTUgMTIzNS0xMjM2LTQKK2Fsd2F5cyBcdTM2MTYgMjM0NS0yCithbHdheXMgXHUzNjE3IDI0NS0xMjU2LTMKK2Fsd2F5cyBcdTM2MTkgMjM0NS0yCithbHdheXMgXHUzNjFBIDEyMzUtMTIzNi00CithbHdheXMgXHUzNjFCIDEyMy0xMjM2LTMKK2Fsd2F5cyBcdTM2MUMgMTItMTIzNTYtMgorYWx3YXlzIFx1MzYxRCAxMzQ1LTE2LTUKK2Fsd2F5cyBcdTM2MUUgMTIzNS0yNS01CithbHdheXMgXHUzNjFGIDEyLTQ1Ni0zCithbHdheXMgXHUzNjIwIDEzNS0xNi0zCithbHdheXMgXHUzNjIxIDE1LTIzNDU2LTIKK2Fsd2F5cyBcdTM2MjIgMTIzNDYtNAorYWx3YXlzIFx1MzYyMyAxNS00NS0zCithbHdheXMgXHUzNjI0IDEyNDU2LTMKK2Fsd2F5cyBcdTM2MjUgMjM0Ni0yCithbHdheXMgXHUzNjI2IDI0NS0xNDU2LTIKK2Fsd2F5cyBcdTM2MjcgMTUtMTI1Ni01CithbHdheXMgXHUzNjI4IDEzNDUtMzQ2LTUKK2Fsd2F5cyBcdTM2MjkgMTM1LTE2LTUKK2Fsd2F5cyBcdTM2MkEgMTIzNS0xNDYtNQorYWx3YXlzIFx1MzYyQiAxMy0xMzQ1Ni01CithbHdheXMgXHUzNjJDIDE0Ni0zCithbHdheXMgXHUzNjJEIDE0Ni0zCithbHdheXMgXHUzNjJGIDEyLTEzNDYtNAorYWx3YXlzIFx1MzYzMCAxLTEzNi0zCithbHdheXMgXHUzNjMxIDEyNC0xMjM2LTMKK2Fsd2F5cyBcdTM2MzIgMTMtMTI1Ni0yCithbHdheXMgXHUzNjMzIDI0NS0yMzQtMworYWx3YXlzIFx1MzYzNCAxMjUtMjUtNQorYWx3YXlzIFx1MzYzNSAxMzUtMzQtNQorYWx3YXlzIFx1MzYzNiAxMy0zNDYtMgorYWx3YXlzIFx1MzYzNyAyNDU2LTUKK2Fsd2F5cyBcdTM2MzggMTI1LTEzNDYtNQorYWx3YXlzIFx1MzYzOSAyNDUtMTU2LTIKK2Fsd2F5cyBcdTM2M0EgMTIzNDUtMzQ1LTIKK2Fsd2F5cyBcdTM2M0IgMTQ1Ni0zCithbHdheXMgXHUzNjNEIDEtMTU2LTUKK2Fsd2F5cyBcdTM2M0YgMTM0NS0zNDYtNQorYWx3YXlzIFx1MzY0MCAxNC0yMzQtNQorYWx3YXlzIFx1MzY0MSAxMzQtMzU2LTIKK2Fsd2F5cyBcdTM2NDIgMTQ1LTEyNDYtNQorYWx3YXlzIFx1MzY0MyAxMzUtMTM0Ni0zCithbHdheXMgXHUzNjQ0IDEzNS0xNi01CithbHdheXMgXHUzNjQ1IDEzNS0xNDYtNAorYWx3YXlzIFx1MzY0NyAxMi0zNC01CithbHdheXMgXHUzNjQ4IDE1LTIzNDU2LTUKK2Fsd2F5cyBcdTM2NDkgMTI0LTIzNDUtNAorYWx3YXlzIFx1MzY0QSAxLTEzNDYtNQorYWx3YXlzIFx1MzY0QiAyNDUtMTYtMgorYWx3YXlzIFx1MzY0QyAxNS0zNC01CithbHdheXMgXHUzNjREIDE0NS0yNS0zCithbHdheXMgXHUzNjRFIDEyNDYtMworYWx3YXlzIFx1MzY0RiAxMjM0NS0zNC01CithbHdheXMgXHUzNjUwIDE0NS0yNS00CithbHdheXMgXHUzNjUxIDEyNTYtNAorYWx3YXlzIFx1MzY1MiAzNDYtNAorYWx3YXlzIFx1MzY1MyAxMjMtMTI0Ni0yCithbHdheXMgXHUzNjU0IDEyMzUtMTIzNi0yCithbHdheXMgXHUzNjU1IDEyMy0yMzU2LTUKK2Fsd2F5cyBcdTM2NTcgMTI0Ni0zCithbHdheXMgXHUzNjU4IDI0Ni0zCithbHdheXMgXHUzNjU5IDEzNC0xMzU2LTQKK2Fsd2F5cyBcdTM2NUEgMTUtMTM0NTYtMworYWx3YXlzIFx1MzY1QiAxMzUtMzQtNAorYWx3YXlzIFx1MzY1QyAxMjQtMjQ1Ni0yCithbHdheXMgXHUzNjVEIDE1LTM0Ni0yCithbHdheXMgXHUzNjVFIDEzNDUtMzQ2LTUKK2Fsd2F5cyBcdTM2NUYgMTQtMTM0Ni00CithbHdheXMgXHUzNjYwIDE2LTMKK2Fsd2F5cyBcdTM2NjEgMTI1LTEyMzQ2LTMKK2Fsd2F5cyBcdTM2NjIgMTM0LTEyMzYtMgorYWx3YXlzIFx1MzY2MyAxLTEzNDYtNQorYWx3YXlzIFx1MzY2NCAxNS0yMzQ1Ni01CithbHdheXMgXHUzNjY1IDEzLTEyMzQ1Ni01CithbHdheXMgXHUzNjY2IDE1LTM0Ni0yCithbHdheXMgXHUzNjY3IDE0LTIzNC01CithbHdheXMgXHUzNjY4IDEzLTE2LTMKK2Fsd2F5cyBcdTM2NjkgMTQtMjQ2LTIKK2Fsd2F5cyBcdTM2NkEgMzYtNQorYWx3YXlzIFx1MzY2QiAxMy0xNi0yCithbHdheXMgXHUzNjZDIDE0NTYtMgorYWx3YXlzIFx1MzY2RCAxMy0yMzYtMgorYWx3YXlzIFx1MzY2RSAxNDUtMzQ1LTMKK2Fsd2F5cyBcdTM2NkYgMTYtNQorYWx3YXlzIFx1MzY3MCAxNS0zNDYtNQorYWx3YXlzIFx1MzY3MSAxMjM1LTE0Ni01CithbHdheXMgXHUzNjcyIDIzNS0zCithbHdheXMgXHUzNjczIDEyMzUtMTIzNi00CithbHdheXMgXHUzNjc0IDEyLTEyMzYtNQorYWx3YXlzIFx1MzY3NSAxMjQtMjQ1Ni0yCithbHdheXMgXHUzNjc2IDEyNC0xMzQ2LTIKK2Fsd2F5cyBcdTM2NzcgMS0xNTYtMgorYWx3YXlzIFx1MzY3OCAxMjM0LTM0LTIKK2Fsd2F5cyBcdTM2NzkgMTM0LTEzNTYtMgorYWx3YXlzIFx1MzY3QSAxMy0xMjQ2LTUKK2Fsd2F5cyBcdTM2N0IgMTItMTIzNi0yCithbHdheXMgXHUzNjdDIDE0LTM1Ni00CithbHdheXMgXHUzNjdFIDE1LTIzNi0yCithbHdheXMgXHUzNjgwIDEyMy0xMjQ2LTMKK2Fsd2F5cyBcdTM2ODEgMjQ1LTI0Ni01CithbHdheXMgXHUzNjgyIDEzNDUtMTM0Ni01CithbHdheXMgXHUzNjgzIDI1Ni0zCithbHdheXMgXHUzNjg0IDEtMTU2LTUKK2Fsd2F5cyBcdTM2ODUgMTQtMTIzNDYtMgorYWx3YXlzIFx1MzY4NiAxMjM0NS0zNC01CithbHdheXMgXHUzNjg3IDEyNS0xMjM0Ni0zCithbHdheXMgXHUzNjg5IDEzLTM0LTQKK2Fsd2F5cyBcdTM2OEEgMTIzLTI0NTYtMworYWx3YXlzIFx1MzY4QiAxMzQ1LTIzNDUtNAorYWx3YXlzIFx1MzY4QyAxMjM1LTI1LTQKK2Fsd2F5cyBcdTM2OEQgMTIzLTEyNDYtNAorYWx3YXlzIFx1MzY4RSAyNDUtMTI1Ni01CithbHdheXMgXHUzNjhGIDEzLTE0Ni00CithbHdheXMgXHUzNjkwIDEyNC0xNDYtNQorYWx3YXlzIFx1MzY5MiAyNC0xMjM2LTQKK2Fsd2F5cyBcdTM2OTMgMTQtMjQ1Ni00CithbHdheXMgXHUzNjk0IDEzNDUtMzQ2LTUKK2Fsd2F5cyBcdTM2OTUgMTIzNDUtMzQtMgorYWx3YXlzIFx1MzY5NiAxMy0xNDYtNAorYWx3YXlzIFx1MzY5NyAyNDUtMzQ2LTIKK2Fsd2F5cyBcdTM2OTggMTM1LTEyMzYtNQorYWx3YXlzIFx1MzY5OSAxMy0yMzQ1Ni0zCithbHdheXMgXHUzNjlBIDEyMy0xMjM0Ni0zCithbHdheXMgXHUzNjlCIDE1LTE2LTUKK2Fsd2F5cyBcdTM2OUMgMTUtMTI1Ni01CithbHdheXMgXHUzNjlEIDEyMy0xMjQ2LTIKK2Fsd2F5cyBcdTM2OUUgMjQtMTM2LTQKK2Fsd2F5cyBcdTM2OUYgMTItMjUtNQorYWx3YXlzIFx1MzZBMCAxNS0yNDYtMworYWx3YXlzIFx1MzZBMSAxMy0xNi00CithbHdheXMgXHUzNkEyIDEzNDUtMzQtMgorYWx3YXlzIFx1MzZBMyAxMy0yNDYtNAorYWx3YXlzIFx1MzZBNCAxNi01CithbHdheXMgXHUzNkE1IDEyNTYtMgorYWx3YXlzIFx1MzZBNiAxMy0xNi0zCithbHdheXMgXHUzNkE3IDIzNDUtNAorYWx3YXlzIFx1MzZBOCAyNC0xMzYtMworYWx3YXlzIFx1MzZBOSAxMjQ1LTEyMzYtNAorYWx3YXlzIFx1MzZBQSAxMjM1LTE0Ni01CithbHdheXMgXHUzNkFCIDE1LTM0NS01CithbHdheXMgXHUzNkFDIDEzLTI1Ni0zCithbHdheXMgXHUzNkFEIDIzNC0yCithbHdheXMgXHUzNkFFIDE0NS0xMjM2LTMKK2Fsd2F5cyBcdTM2QUYgMTUtMTQ1Ni0yCithbHdheXMgXHUzNkIwIDEzNS0xNi00CithbHdheXMgXHUzNkIxIDI0NS0yMzQtMworYWx3YXlzIFx1MzZCMiAxNDUtMjM0NS00CithbHdheXMgXHUzNkIzIDIzNDYtMworYWx3YXlzIFx1MzZCNCAxMjM0LTM0LTUKK2Fsd2F5cyBcdTM2QjUgMTQ1LTEyMzQ2LTMKK2Fsd2F5cyBcdTM2QjYgMTUtMTU2LTUKK2Fsd2F5cyBcdTM2QjcgMTM0NS0yNDU2LTQKK2Fsd2F5cyBcdTM2QjggMTUtMTU2LTMKK2Fsd2F5cyBcdTM2QjkgMTM0LTI0Ni0yCithbHdheXMgXHUzNkJBIDI1Ni01CithbHdheXMgXHUzNkJCIDEzLTE2LTMKK2Fsd2F5cyBcdTM2QkMgMTIzNS0xNDYtNAorYWx3YXlzIFx1MzZCRCAyNDUtMjQ2LTQKK2Fsd2F5cyBcdTM2QkUgMTUtMjM1LTMKK2Fsd2F5cyBcdTM2QkYgMTIzNC0xNDYtMgorYWx3YXlzIFx1MzZDMCAxMi0zNC0yCithbHdheXMgXHUzNkMxIDEyMzQtMTM1Ni0zCithbHdheXMgXHUzNkMyIDEzNDUtMjUtNAorYWx3YXlzIFx1MzZDMyAxMy0zNDYtMgorYWx3YXlzIFx1MzZDNCAxNi0zCithbHdheXMgXHUzNkM1IDE1Ni01CithbHdheXMgXHUzNkM2IDE0NS0yNS00CithbHdheXMgXHUzNkM5IDE1LTE2LTQKK2Fsd2F5cyBcdTM2Q0EgMTQ1LTI1LTQKK2Fsd2F5cyBcdTM2Q0QgMjQ1LTM0Ni01CithbHdheXMgXHUzNkNFIDE0LTEyNTYtNAorYWx3YXlzIFx1MzZDRiAyNDUtMjM0LTIKK2Fsd2F5cyBcdTM2RDAgMTUtMTQ2LTQKK2Fsd2F5cyBcdTM2RDEgMjQ1LTEyMzYtNQorYWx3YXlzIFx1MzZEMiAxNDUtMTIzNTYtNQorYWx3YXlzIFx1MzZEMyAxNS0xNi0zCithbHdheXMgXHUzNkQ0IDEyMzQ1LTEzNTYtMworYWx3YXlzIFx1MzZENSAxNi01CithbHdheXMgXHUzNkQ2IDE1LTI1LTMKK2Fsd2F5cyBcdTM2RDcgMTI1LTI1LTMKK2Fsd2F5cyBcdTM2RDggMTIzNC0xMjYtNQorYWx3YXlzIFx1MzZEOSAxNS0xNDU2LTUKK2Fsd2F5cyBcdTM2REEgMTI0LTEyMzQ2LTQKK2Fsd2F5cyBcdTM2REIgMjQtMTM2LTMKK2Fsd2F5cyBcdTM2REMgMjM0LTIKK2Fsd2F5cyBcdTM2REQgMTM1LTM1Ni01CithbHdheXMgXHUzNkRFIDE0LTEyMzQ2LTUKK2Fsd2F5cyBcdTM2RTAgMTUtMjM0NS0yCithbHdheXMgXHUzNkUxIDEyNDU2LTIKK2Fsd2F5cyBcdTM2RTIgMTUtMjM0LTUKK2Fsd2F5cyBcdTM2RTMgMjU2LTIKK2Fsd2F5cyBcdTM2RTQgMTQtMTYtMgorYWx3YXlzIFx1MzZFNSAxMjQtMzQ1LTUKK2Fsd2F5cyBcdTM2RTYgMTQtMTIzNi00CithbHdheXMgXHUzNkU3IDEzNC0xMjM2LTQKK2Fsd2F5cyBcdTM2RTggMjQ1LTQ2LTQKK2Fsd2F5cyBcdTM2RTkgMS0xMjM1Ni0yCithbHdheXMgXHUzNkVBIDEyMzQtMTYtMworYWx3YXlzIFx1MzZFQiAxNS0xNi0yCithbHdheXMgXHUzNkVDIDE0LTM0LTUKK2Fsd2F5cyBcdTM2RUQgMTUtMTYtMgorYWx3YXlzIFx1MzZFRSAxNS0xNDYtNAorYWx3YXlzIFx1MzZFRiAxMjM0NS0xMjM2LTUKK2Fsd2F5cyBcdTM2RjAgMTIzNS0xMjM0NTYtMworYWx3YXlzIFx1MzZGMSAxMjQ2LTMKK2Fsd2F5cyBcdTM2RjIgMTIzNDUtMzQ1LTQKK2Fsd2F5cyBcdTM2RjMgMTYtNQorYWx3YXlzIFx1MzZGNCAxMzQ1LTE0Ni00CithbHdheXMgXHUzNkY1IDEyLTEzNTYtMworYWx3YXlzIFx1MzZGNiAxMjQtMTIzNi01CithbHdheXMgXHUzNkY3IDEzLTE2LTMKK2Fsd2F5cyBcdTM2RjggMjQtMzQtNQorYWx3YXlzIFx1MzZGOSAxMjM0LTIzNDUtMgorYWx3YXlzIFx1MzZGQSAxMzQ2LTMKK2Fsd2F5cyBcdTM2RkIgMTIzLTM1LTMKK2Fsd2F5cyBcdTM2RkMgMjQtMzQ1LTUKK2Fsd2F5cyBcdTM2RkQgMjQtMTIzNi0zCithbHdheXMgXHUzNkZFIDE1LTIzNDUtMgorYWx3YXlzIFx1MzZGRiAxLTE1Ni01CithbHdheXMgXHUzNzAxIDEtMzQ1LTMKK2Fsd2F5cyBcdTM3MDIgMTIzNDUtMTM1Ni0zCithbHdheXMgXHUzNzAzIDE0LTIzNDUtNQorYWx3YXlzIFx1MzcwNCAxNS0yNTYtMgorYWx3YXlzIFx1MzcwNSAxNS0xMjU2LTUKK2Fsd2F5cyBcdTM3MDYgMTM0LTE2LTUKK2Fsd2F5cyBcdTM3MDcgMTIzNS0xMjQ2LTUKK2Fsd2F5cyBcdTM3MDggMTM0LTM0LTUKK2Fsd2F5cyBcdTM3MDkgMjM1LTMKK2Fsd2F5cyBcdTM3MEEgMS0xMjM2LTQKK2Fsd2F5cyBcdTM3MEIgMTYtNQorYWx3YXlzIFx1MzcwQyAxMy0xMjM1Ni01CithbHdheXMgXHUzNzBEIDEyNC0xMzQ2LTIKK2Fsd2F5cyBcdTM3MEUgMTUtMTYtMworYWx3YXlzIFx1MzcwRiAyNTYtMgorYWx3YXlzIFx1MzcxMCAyNC0zNC01CithbHdheXMgXHUzNzExIDEyMzQtMTI2LTIKK2Fsd2F5cyBcdTM3MTIgMTYtNQorYWx3YXlzIFx1MzcxMyAxNDUtMzQ1LTIKK2Fsd2F5cyBcdTM3MTUgMTQtMjM0NS0yCithbHdheXMgXHUzNzE2IDI0NS0xNDYtMgorYWx3YXlzIFx1MzcxNyAyNDUtMTIzNi0zCithbHdheXMgXHUzNzE4IDEzLTM0Ni0zCithbHdheXMgXHUzNzE5IDE0LTM0LTUKK2Fsd2F5cyBcdTM3MUEgMTUtMzQtNQorYWx3YXlzIFx1MzcxQiAxMzQ1LTEzNi01CithbHdheXMgXHUzNzFDIDE0Ni01CithbHdheXMgXHUzNzFEIDEyMzYtNAorYWx3YXlzIFx1MzcxRSAyNDUtMTIzNi0yCithbHdheXMgXHUzNzIwIDI0NS0xMjQ2LTMKK2Fsd2F5cyBcdTM3MjEgMjQ1LTEyMzQ2LTMKK2Fsd2F5cyBcdTM3MjIgMTQtMTI1Ni00CithbHdheXMgXHUzNzIzIDEyNDUtMTIzNi0yCithbHdheXMgXHUzNzI0IDEzNDUtMjM0NS00CithbHdheXMgXHUzNzI1IDEzNC0yNDU2LTIKK2Fsd2F5cyBcdTM3MjYgMTUtMjU2LTIKK2Fsd2F5cyBcdTM3MjcgMjM2LTMKK2Fsd2F5cyBcdTM3MjggMTM0NS0yNDU2LTIKK2Fsd2F5cyBcdTM3MjkgMTQ2LTUKK2Fsd2F5cyBcdTM3MkEgMTUtMjM0NS00CithbHdheXMgXHUzNzJCIDEzNC0zNTYtNAorYWx3YXlzIFx1MzcyQyAxLTEyMzYtMworYWx3YXlzIFx1MzcyRSAxNC0xMjM2LTUKK2Fsd2F5cyBcdTM3MkYgMTUtMTYtMworYWx3YXlzIFx1MzczMCAyMzYtNQorYWx3YXlzIFx1MzczMSAxLTE1Ni0yCithbHdheXMgXHUzNzMyIDEzNDU2LTIKK2Fsd2F5cyBcdTM3MzMgMTIzNS0yMzU2LTIKK2Fsd2F5cyBcdTM3MzQgMTM0LTEzNTYtNQorYWx3YXlzIFx1MzczNSAxMzQ1LTI0Ni00CithbHdheXMgXHUzNzM2IDEyMzQ1LTEyMzYtNQorYWx3YXlzIFx1MzczNyAxMzQtMTYtMgorYWx3YXlzIFx1MzczOCAxMzQ1LTM0Ni01CithbHdheXMgXHUzNzM5IDI0NS0xMjU2LTIKK2Fsd2F5cyBcdTM3M0EgMTI1LTEyMzYtNQorYWx3YXlzIFx1MzczQiAxNC0xMjQ1Ni0yCithbHdheXMgXHUzNzNDIDEtMTU2LTIKK2Fsd2F5cyBcdTM3M0QgMTI1LTE1Ni0xCithbHdheXMgXHUzNzNFIDEyMzUtMjQ1Ni0yCithbHdheXMgXHUzNzNGIDE1LTEyNTYtNQorYWx3YXlzIFx1Mzc0MCAxMjM1LTE0Ni00CithbHdheXMgXHUzNzQxIDE1LTQ1LTMKK2Fsd2F5cyBcdTM3NDIgMS0xNTYtNQorYWx3YXlzIFx1Mzc0MyAxMzQtMjM0NS00CithbHdheXMgXHUzNzQ0IDEyLTEyMzQ1Ni0yCithbHdheXMgXHUzNzQ1IDEzLTEyMzU2LTUKK2Fsd2F5cyBcdTM3NDcgMTItMTIzNDU2LTIKK2Fsd2F5cyBcdTM3NDggMTQtMTI0NTYtMgorYWx3YXlzIFx1Mzc0OSAxLTM0LTUKK2Fsd2F5cyBcdTM3NEEgMjQtMTIzNTYtNAorYWx3YXlzIFx1Mzc0QiAxNC0yNDYtNAorYWx3YXlzIFx1Mzc0QyAxMy0yMzQtNQorYWx3YXlzIFx1Mzc0RCAxNS0zNDYtNAorYWx3YXlzIFx1Mzc0RSAxNDUtMTM0NTYtNQorYWx3YXlzIFx1Mzc0RiAxMy0zNDYtNQorYWx3YXlzIFx1Mzc1MCAxMjQ1LTEyMzQ2LTIKK2Fsd2F5cyBcdTM3NTEgMTIzNDUtMTM0Ni0yCithbHdheXMgXHUzNzUyIDEzLTEyNTYtMworYWx3YXlzIFx1Mzc1MyAxMjMtMjM0Ni01CithbHdheXMgXHUzNzU0IDI0Ni00CithbHdheXMgXHUzNzU1IDEzNDUtMTM0NTYtMgorYWx3YXlzIFx1Mzc1NiAxNi0yCithbHdheXMgXHUzNzU3IDE0LTEzNDYtMgorYWx3YXlzIFx1Mzc1OCAyMzUtMgorYWx3YXlzIFx1Mzc1OSAxNDU2LTIKK2Fsd2F5cyBcdTM3NUEgMjM0NS0yCithbHdheXMgXHUzNzVCIDE1LTM0LTUKK2Fsd2F5cyBcdTM3NUMgMTUtMTYtMgorYWx3YXlzIFx1Mzc1RCAxNC0xNDU2LTIKK2Fsd2F5cyBcdTM3NUUgMjM0NTYtNQorYWx3YXlzIFx1Mzc1RiAxMzQtMTQ2LTUKK2Fsd2F5cyBcdTM3NjAgMTM0LTEzNDU2LTIKK2Fsd2F5cyBcdTM3NjEgMTI1LTEyNDYtNQorYWx3YXlzIFx1Mzc2MiAxMjU2LTQKK2Fsd2F5cyBcdTM3NjMgMTYtNQorYWx3YXlzIFx1Mzc2NCAxMy0xMjM1Ni01CithbHdheXMgXHUzNzY1IDEzNC0xNi00CithbHdheXMgXHUzNzY2IDEzLTI1Ni01CithbHdheXMgXHUzNzY3IDEyMzQ1Ni00CithbHdheXMgXHUzNzY4IDEyMzUtMTI0NTYtMgorYWx3YXlzIFx1Mzc2OSAxMjMtMTM0Ni0zCithbHdheXMgXHUzNzZBIDE0NS0yMzQ1LTUKK2Fsd2F5cyBcdTM3NkIgMTQtMTIzNDYtMgorYWx3YXlzIFx1Mzc2QyAxMjM0NS0zNC0zCithbHdheXMgXHUzNzZEIDE1LTEzNDU2LTQKK2Fsd2F5cyBcdTM3NkUgMjQ1LTEyNDYtNQorYWx3YXlzIFx1Mzc2RiAyNDUtMjQ2LTIKK2Fsd2F5cyBcdTM3NzAgMTM0LTIzNDUtMgorYWx3YXlzIFx1Mzc3MSAxMzQtMTM1Ni01CithbHdheXMgXHUzNzcyIDI0NS0xNDU2LTQKK2Fsd2F5cyBcdTM3NzQgMTI0NTYtMgorYWx3YXlzIFx1Mzc3NSAxNDUtMjM0Ni0yCithbHdheXMgXHUzNzc2IDE0NS0yMzQ2LTIKK2Fsd2F5cyBcdTM3NzcgMTUtMjU2LTIKK2Fsd2F5cyBcdTM3NzggMTM1LTIzNDUtNQorYWx3YXlzIFx1Mzc3OSAxMzQ1LTEyMzU2LTIKK2Fsd2F5cyBcdTM3N0EgMTQtMjM0NS0yCithbHdheXMgXHUzNzdCIDEzLTE0NTYtNQorYWx3YXlzIFx1Mzc3QyAxMjU2LTMKK2Fsd2F5cyBcdTM3N0QgMS0xMjQ2LTQKK2Fsd2F5cyBcdTM3N0UgMTI1LTI1LTQKK2Fsd2F5cyBcdTM3N0YgMTM1LTEyNi00CithbHdheXMgXHUzNzgwIDEyMzUtMTI0Ni0zCithbHdheXMgXHUzNzgxIDI0Ni01CithbHdheXMgXHUzNzgyIDEyNC0xMjQ2LTUKK2Fsd2F5cyBcdTM3ODMgMTMtMTYtMgorYWx3YXlzIFx1Mzc4NCAxMjM2LTMKK2Fsd2F5cyBcdTM3ODUgMTQtMjUtNQorYWx3YXlzIFx1Mzc4NiAxMy0xNi00CithbHdheXMgXHUzNzg3IDEyNDYtNAorYWx3YXlzIFx1Mzc4OCAxMzQtMTI2LTUKK2Fsd2F5cyBcdTM3ODkgMTI1LTI1LTMKK2Fsd2F5cyBcdTM3OEEgMTUtMTI1Ni01CithbHdheXMgXHUzNzhCIDEzNDUtMjM0NS00CithbHdheXMgXHUzNzhDIDI1Ni01CithbHdheXMgXHUzNzhFIDEzNS0zNDUtNAorYWx3YXlzIFx1Mzc4RiAxLTE1Ni0yCithbHdheXMgXHUzNzkwIDEzLTEyNTYtMworYWx3YXlzIFx1Mzc5MSAxMjQ2LTQKK2Fsd2F5cyBcdTM3OTIgMTUtMzQ2LTUKK2Fsd2F5cyBcdTM3OTMgMjQ1LTE2LTUKK2Fsd2F5cyBcdTM3OTQgMTItMTU2LTQKK2Fsd2F5cyBcdTM3OTUgMTUtMzQ2LTUKK2Fsd2F5cyBcdTM3OTYgMjQ1LTE1Ni01CithbHdheXMgXHUzNzk3IDI0NS0yMzQtMgorYWx3YXlzIFx1Mzc5OCAxMjQtMTIzNDU2LTIKK2Fsd2F5cyBcdTM3OTkgMTM0NS0yNDYtNQorYWx3YXlzIFx1Mzc5QSAxLTM0NS00CithbHdheXMgXHUzNzlCIDEzLTE2LTQKK2Fsd2F5cyBcdTM3OUMgMTI0LTEyNDYtMworYWx3YXlzIFx1Mzc5RSAxNS0xMjM0Ni0yCithbHdheXMgXHUzNzlGIDE0NS0yMzQ1LTUKK2Fsd2F5cyBcdTM3QTAgMTQtMjQ2LTIKK2Fsd2F5cyBcdTM3QTEgMS0xMjM2LTQKK2Fsd2F5cyBcdTM3QTIgMS0xNTYtMworYWx3YXlzIFx1MzdBMyAxMjM0NS0xMzYtMworYWx3YXlzIFx1MzdBNCAxNDU2LTIKK2Fsd2F5cyBcdTM3QTUgMjQ1LTEzNi0yCithbHdheXMgXHUzN0E2IDEzLTE2LTQKK2Fsd2F5cyBcdTM3QTcgMTIzNS0xMjQ2LTUKK2Fsd2F5cyBcdTM3QTggMTI1LTE1Ni00CithbHdheXMgXHUzN0E5IDE0LTEyMzYtMgorYWx3YXlzIFx1MzdBQSAxMzQ1LTE0Ni0yCithbHdheXMgXHUzN0FCIDEyNS0xMjM1Ni00CithbHdheXMgXHUzN0FDIDI0NS0xNDU2LTQKK2Fsd2F5cyBcdTM3QUQgMTQ1LTI0NTYtNQorYWx3YXlzIFx1MzdBRiAyNDUtMTYtNAorYWx3YXlzIFx1MzdCMCAxNS0xMjU2LTQKK2Fsd2F5cyBcdTM3QjEgMjQ1LTEyMzQ2LTMKK2Fsd2F5cyBcdTM3QjIgMjM1LTUKK2Fsd2F5cyBcdTM3QjMgMTQ1LTEyMzU2LTQKK2Fsd2F5cyBcdTM3QjQgMTItMTU2LTIKK2Fsd2F5cyBcdTM3QjUgMTI0LTE0Ni0zCithbHdheXMgXHUzN0I2IDEzNC0xNDU2LTIKK2Fsd2F5cyBcdTM3QjcgMTIzNS00NTYtMgorYWx3YXlzIFx1MzdCOCAxNS0xMjQ2LTUKK2Fsd2F5cyBcdTM3QjkgMTIzLTIzNDYtNAorYWx3YXlzIFx1MzdCQSAxMjUtMzQtMgorYWx3YXlzIFx1MzdCQiAxMjM1LTE0Ni01CithbHdheXMgXHUzN0JDIDEyLTEzNTYtMgorYWx3YXlzIFx1MzdCRCAxNS0yMzYtNQorYWx3YXlzIFx1MzdCRSAxMzQ1LTE2LTIKK2Fsd2F5cyBcdTM3QkYgMjQ1LTE2LTIKK2Fsd2F5cyBcdTM3QzAgMTQtMjM0NS0yCithbHdheXMgXHUzN0MxIDEyMzYtNQorYWx3YXlzIFx1MzdDMiAxMzQtMzQtNAorYWx3YXlzIFx1MzdDMyAxNS0xNTYtMworYWx3YXlzIFx1MzdDNCAxNS00Ni0yCithbHdheXMgXHUzN0M1IDE0LTEyMzQ2LTIKK2Fsd2F5cyBcdTM3QzYgMTIzNS0zNS0yCithbHdheXMgXHUzN0M3IDI0NS0yNS0yCithbHdheXMgXHUzN0M4IDI0NS0yMzQtMgorYWx3YXlzIFx1MzdDOSAxNC0xNDYtMgorYWx3YXlzIFx1MzdDQSAxMjM0NS0zNC0yCithbHdheXMgXHUzN0NCIDE0NS0xMjQ2LTUKK2Fsd2F5cyBcdTM3Q0MgMTM0LTEzNDYtMgorYWx3YXlzIFx1MzdDRCAxNC0xMzQ2LTIKK2Fsd2F5cyBcdTM3Q0UgMTI0LTI1LTIKK2Fsd2F5cyBcdTM3Q0YgMTIzNS0xMjM2LTMKK2Fsd2F5cyBcdTM3RDAgMTM0LTEzNDYtMgorYWx3YXlzIFx1MzdEMSAxMzUtMTI2LTIKK2Fsd2F5cyBcdTM3RDIgMjQ1LTI1Ni0zCithbHdheXMgXHUzN0QzIDI0NS0xNi0yCithbHdheXMgXHUzN0Q0IDEyMzUtMTIzNi0zCithbHdheXMgXHUzN0Q2IDE0LTEyMzQ2LTUKK2Fsd2F5cyBcdTM3RDcgMTM1LTE0NTYtMworYWx3YXlzIFx1MzdEOCAxMjQtMjQ2LTIKK2Fsd2F5cyBcdTM3RDkgMTI1LTIzNDYtMgorYWx3YXlzIFx1MzdEQSAyNDUtMTYtMgorYWx3YXlzIFx1MzdEQiAyNDUtMjM0NS0zCithbHdheXMgXHUzN0RDIDEzNC0xNi0yCithbHdheXMgXHUzN0REIDEyMzQtMzU2LTIKK2Fsd2F5cyBcdTM3REUgMS0xMjM2LTUKK2Fsd2F5cyBcdTM3REYgMTUtNDYtNAorYWx3YXlzIFx1MzdFMCAxMy0xMzQ2LTMKK2Fsd2F5cyBcdTM3RTIgMjQ1LTE2LTIKK2Fsd2F5cyBcdTM3RTQgMTQtMzQtNQorYWx3YXlzIFx1MzdFNSAyNDUtMTM2LTMKK2Fsd2F5cyBcdTM3RTYgMjU2LTUKK2Fsd2F5cyBcdTM3RTcgMjM0Ni01CithbHdheXMgXHUzN0U4IDE0NS0xMjQ1Ni0zCithbHdheXMgXHUzN0U5IDEzNC0xNDU2LTIKK2Fsd2F5cyBcdTM3RUEgMTI0Ni00CithbHdheXMgXHUzN0VCIDI0NS00NS0yCithbHdheXMgXHUzN0VDIDE1LTEyMzU2LTQKK2Fsd2F5cyBcdTM3RUQgMTM0LTE0NTYtMgorYWx3YXlzIFx1MzdFRSAxMjQtMzQtMworYWx3YXlzIFx1MzdFRiAyMzQ2LTUKK2Fsd2F5cyBcdTM3RjAgMTM0LTEzNDU2LTQKK2Fsd2F5cyBcdTM3RjEgMjQ2LTQKK2Fsd2F5cyBcdTM3RjIgNDUtMgorYWx3YXlzIFx1MzdGMyAxNC0xNi01CithbHdheXMgXHUzN0Y0IDEyNDYtMgorYWx3YXlzIFx1MzdGNSAxMy0xMzQ2LTMKK2Fsd2F5cyBcdTM3RjYgNDUtMgorYWx3YXlzIFx1MzdGNyAxNDUtMzQ1LTMKK2Fsd2F5cyBcdTM3RjggMTMtMTQ2LTMKK2Fsd2F5cyBcdTM3RjkgMTQtMTQ2LTIKK2Fsd2F5cyBcdTM3RkEgMTQtMTIzNTYtMgorYWx3YXlzIFx1MzdGQiAyNDUtMjM0NS01CithbHdheXMgXHUzN0ZDIDE0Ni0yCithbHdheXMgXHUzN0ZEIDEzNS0yNDYtNAorYWx3YXlzIFx1MzdGRSAyMzUtMworYWx3YXlzIFx1MzdGRiAxMzQtMTM0Ni0yCithbHdheXMgXHUzODAwIDE0NS0xNDYtNAorYWx3YXlzIFx1MzgwMSAyNDUtMTM2LTMKK2Fsd2F5cyBcdTM4MDIgMTQ2LTIKK2Fsd2F5cyBcdTM4MDQgMTUtMTYtMgorYWx3YXlzIFx1MzgwNSAxMjM0NS0zNC01CithbHdheXMgXHUzODA2IDE0NS0xMjM2LTMKK2Fsd2F5cyBcdTM4MDcgMTMtMjM0LTUKK2Fsd2F5cyBcdTM4MDggMTI0NS0xMjM0NTYtNQorYWx3YXlzIFx1MzgwOSAxMjQtMTIzNDYtMgorYWx3YXlzIFx1MzgwQSAyNDUtMTI1Ni0zCithbHdheXMgXHUzODBCIDIzNDYtNQorYWx3YXlzIFx1MzgwQyAyNDUtMjM0NS0zCithbHdheXMgXHUzODBEIDEzLTE2LTIKK2Fsd2F5cyBcdTM4MEUgMTMtMzQ2LTIKK2Fsd2F5cyBcdTM4MEYgMTIzNS0zNS0yCithbHdheXMgXHUzODEwIDEzLTI0Ni01CithbHdheXMgXHUzODExIDEyNS0xMjQ2LTUKK2Fsd2F5cyBcdTM4MTIgMTM1LTI0Ni00CithbHdheXMgXHUzODEzIDEzNC0xMzU2LTIKK2Fsd2F5cyBcdTM4MTQgMTM1LTI0NTYtNQorYWx3YXlzIFx1MzgxNSAxMjQ2LTQKK2Fsd2F5cyBcdTM4MTYgMTMtMTYtNQorYWx3YXlzIFx1MzgxNyAxNDYtNQorYWx3YXlzIFx1MzgxOCAxMjU2LTQKK2Fsd2F5cyBcdTM4MTkgMTIzNS0xNDYtMgorYWx3YXlzIFx1MzgxQSAxNDUtMTI0Ni01CithbHdheXMgXHUzODFCIDI1LTUKK2Fsd2F5cyBcdTM4MUMgMTM0NS0xNi01CithbHdheXMgXHUzODFEIDI0NS0xMjQ1Ni0yCithbHdheXMgXHUzODFGIDE0LTE2LTIKK2Fsd2F5cyBcdTM4MjAgMTQtMTI1Ni0yCithbHdheXMgXHUzODIxIDEzNDUtMjQ2LTQKK2Fsd2F5cyBcdTM4MjIgMTIzNS0yMzU2LTIKK2Fsd2F5cyBcdTM4MjMgMTQtMTYtNQorYWx3YXlzIFx1MzgyNSAxNC0zNTYtMgorYWx3YXlzIFx1MzgyNiAxMjM0NS0xMzU2LTMKK2Fsd2F5cyBcdTM4MjcgMTM0LTE2LTQKK2Fsd2F5cyBcdTM4MjggMTI1Ni01CithbHdheXMgXHUzODI5IDEyMzUtNDU2LTMKK2Fsd2F5cyBcdTM4MkEgMTMtMTI1Ni01CithbHdheXMgXHUzODJEIDEtMTIzNi00CithbHdheXMgXHUzODJFIDEzLTEzNDYtMworYWx3YXlzIFx1MzgyRiAxNi00CithbHdheXMgXHUzODMxIDEzLTE2LTUKK2Fsd2F5cyBcdTM4MzIgMTM1LTE2LTQKK2Fsd2F5cyBcdTM4MzQgMTI0NS0xMzYtNQorYWx3YXlzIFx1MzgzNSAxMjM1LTQ1Ni0zCithbHdheXMgXHUzODM2IDEyMzQ1LTEyMzYtMgorYWx3YXlzIFx1MzgzNyAxMy0yMzQ2LTIKK2Fsd2F5cyBcdTM4MzggMTIzNDUtMzQtMworYWx3YXlzIFx1MzgzOSAxMy0zNDYtNQorYWx3YXlzIFx1MzgzQSAxMzQtMjQ2LTIKK2Fsd2F5cyBcdTM4M0IgMTUtMTYtMworYWx3YXlzIFx1MzgzQyAxNS0xNTYtMworYWx3YXlzIFx1MzgzRCAxMjQtMTIzNDYtMgorYWx3YXlzIFx1MzgzRSA0NS0zCithbHdheXMgXHUzODNGIDI0NS0xNTYtNAorYWx3YXlzIFx1Mzg0MCAxMzUtMTYtNQorYWx3YXlzIFx1Mzg0MSAxMjMtMzUtNAorYWx3YXlzIFx1Mzg0MiAxNC0xNi01CithbHdheXMgXHUzODQzIDEyMzUtNDU2LTMKK2Fsd2F5cyBcdTM4NDQgMTUtMjU2LTIKK2Fsd2F5cyBcdTM4NDUgMTM0NS0yNS00CithbHdheXMgXHUzODQ2IDEyMzUtNDU2LTMKK2Fsd2F5cyBcdTM4NDcgMTMtMzQ2LTMKK2Fsd2F5cyBcdTM4NDggMTM0LTEzNi0yCithbHdheXMgXHUzODQ5IDE1LTIzNDUtMgorYWx3YXlzIFx1Mzg0QSAyNDUtMjM0NTYtNQorYWx3YXlzIFx1Mzg0QiAxMjM2LTMKK2Fsd2F5cyBcdTM4NEMgMTM0LTE0Ni01CithbHdheXMgXHUzODRFIDI0LTEzNi0zCithbHdheXMgXHUzODRGIDI0LTM0LTMKK2Fsd2F5cyBcdTM4NTAgMTMtMjM0NS0zCithbHdheXMgXHUzODUxIDEzLTI0Ni00CithbHdheXMgXHUzODUyIDEtMTIzNDU2LTMKK2Fsd2F5cyBcdTM4NTMgMTIzLTEyMzQ1Ni0zCithbHdheXMgXHUzODU0IDM0LTUKK2Fsd2F5cyBcdTM4NTUgMTM0NTYtMworYWx3YXlzIFx1Mzg1NiAxMi0xMjM0Ni0yCithbHdheXMgXHUzODU3IDEyNC0xNi0yCithbHdheXMgXHUzODU4IDE0LTIzNDUtMgorYWx3YXlzIFx1Mzg1OSAxMzUtMTYtMworYWx3YXlzIFx1Mzg1QSAxMy0xMjM1Ni0zCithbHdheXMgXHUzODVCIDEyMzUtNDU2LTMKK2Fsd2F5cyBcdTM4NUMgMTUtMzQ2LTUKK2Fsd2F5cyBcdTM4NUQgMTIzNDUtMTM1Ni01CithbHdheXMgXHUzODVFIDE0LTEyMzU2LTIKK2Fsd2F5cyBcdTM4NUYgMTI1LTE0Ni0zCithbHdheXMgXHUzODYwIDEtMTM1Ni01CithbHdheXMgXHUzODYxIDEyLTM0LTIKK2Fsd2F5cyBcdTM4NjIgMTM0LTEyMzYtNQorYWx3YXlzIFx1Mzg2MyAxNC0xMjM0Ni0yCithbHdheXMgXHUzODY1IDE0NTYtNQorYWx3YXlzIFx1Mzg2NiAxMzUtMTQ1Ni0zCithbHdheXMgXHUzODY3IDEtMTM1Ni01CithbHdheXMgXHUzODY4IDI0NS0yMzQ1LTMKK2Fsd2F5cyBcdTM4NjkgMTQtMTI0NTYtMgorYWx3YXlzIFx1Mzg2QSAxMzQ1LTM1Ni0yCithbHdheXMgXHUzODZCIDE2LTUKK2Fsd2F5cyBcdTM4NkQgMTMtMTYtNQorYWx3YXlzIFx1Mzg2RSAxMy0xNi0yCithbHdheXMgXHUzODZGIDEtMjQ1Ni0yCithbHdheXMgXHUzODcwIDEyNTYtNAorYWx3YXlzIFx1Mzg3MSAxMy0yMzQtNAorYWx3YXlzIFx1Mzg3MiAxMjM1LTEyNDU2LTIKK2Fsd2F5cyBcdTM4NzMgMTQ1LTE2LTQKK2Fsd2F5cyBcdTM4NzQgMTQtMzQ1LTMKK2Fsd2F5cyBcdTM4NzUgMTQtMTM0NTYtMgorYWx3YXlzIFx1Mzg3NiAxLTE1Ni00CithbHdheXMgXHUzODc3IDEzNS0xMzYtNAorYWx3YXlzIFx1Mzg3OCAxLTM0NS00CithbHdheXMgXHUzODc5IDEzLTEyNTYtMworYWx3YXlzIFx1Mzg3QSAxNDUtMTIzNi01CithbHdheXMgXHUzODdCIDE0LTI0Ni01CithbHdheXMgXHUzODdDIDE1LTM0Ni01CithbHdheXMgXHUzODdEIDEtMTQ2LTUKK2Fsd2F5cyBcdTM4N0UgMTUtMjM0NS01CithbHdheXMgXHUzODdGIDEyLTE1Ni01CithbHdheXMgXHUzODgwIDI0NS0xNTYtNQorYWx3YXlzIFx1Mzg4MSAxMi0xNTYtNAorYWx3YXlzIFx1Mzg4MiAyMzQ1LTQKK2Fsd2F5cyBcdTM4ODMgMTQtMTM0Ni0yCithbHdheXMgXHUzODg0IDE0NS0xMjM1Ni01CithbHdheXMgXHUzODg1IDE0LTEyMzQ2LTUKK2Fsd2F5cyBcdTM4ODYgMTItMTIzNi0yCithbHdheXMgXHUzODg4IDEyNC0xMjQ2LTIKK2Fsd2F5cyBcdTM4ODkgMTItMzQ1LTIKK2Fsd2F5cyBcdTM4OEEgMjQ1Ni00CithbHdheXMgXHUzODhCIDEyLTE1Ni00CithbHdheXMgXHUzODhDIDIzNDYtMworYWx3YXlzIFx1Mzg4RCAxMzQ1Ni00CithbHdheXMgXHUzODhFIDEtMjM0Ni0yCithbHdheXMgXHUzODhGIDEyNC0xMjM1Ni0yCithbHdheXMgXHUzODkwIDIzNDYtMworYWx3YXlzIFx1Mzg5MSAxNS0xMjQ2LTMKK2Fsd2F5cyBcdTM4OTIgMTItMzQ1LTIKK2Fsd2F5cyBcdTM4OTMgMS0xMzQ2LTUKK2Fsd2F5cyBcdTM4OTQgMTI1LTEyMzQ2LTQKK2Fsd2F5cyBcdTM4OTUgMjM1LTMKK2Fsd2F5cyBcdTM4OTYgMTM1LTEyMzYtMworYWx3YXlzIFx1Mzg5NyAyNDUtMjQ2LTUKK2Fsd2F5cyBcdTM4OTggMTQtMjM0NS0yCithbHdheXMgXHUzODk5IDEzLTE0NTYtNAorYWx3YXlzIFx1Mzg5QSAxNC0zNC00CithbHdheXMgXHUzODlCIDIzNDUtNQorYWx3YXlzIFx1Mzg5QyAxMjMtMTM0Ni0zCithbHdheXMgXHUzODlEIDE1LTM0LTMKK2Fsd2F5cyBcdTM4OUUgMTYtNQorYWx3YXlzIFx1Mzg5RiAxMi0xMjM2LTQKK2Fsd2F5cyBcdTM4QTAgMTMtMjM1LTQKK2Fsd2F5cyBcdTM4QTEgMTMtNDYtNAorYWx3YXlzIFx1MzhBMiAxMzUtMTYtNQorYWx3YXlzIFx1MzhBMyAyNDUtMTM0NTYtMgorYWx3YXlzIFx1MzhBNCAxMjUtMjQ1Ni0zCithbHdheXMgXHUzOEE1IDE0NS0xMjM0Ni01CithbHdheXMgXHUzOEE2IDEzLTIzNDYtMworYWx3YXlzIFx1MzhBNyAxMy00NS00CithbHdheXMgXHUzOEE4IDEyMzUtMTIzNi01CithbHdheXMgXHUzOEE5IDE0NS0xNi01CithbHdheXMgXHUzOEFBIDM0LTMKK2Fsd2F5cyBcdTM4QUMgMTIzNS0xMjM0Ni0yCithbHdheXMgXHUzOEFEIDEyNC0xNDYtMworYWx3YXlzIFx1MzhBRSAxMi0xNTYtMgorYWx3YXlzIFx1MzhBRiAxMzQtMTQ1Ni0yCithbHdheXMgXHUzOEIwIDEzNS0xNi01CithbHdheXMgXHUzOEIyIDE1LTI1Ni01CithbHdheXMgXHUzOEIzIDE0LTM0LTIKK2Fsd2F5cyBcdTM4QjQgMTUtMTYtMworYWx3YXlzIFx1MzhCNSAxNS0zNDYtMgorYWx3YXlzIFx1MzhCNiAxMzUtMTYtNQorYWx3YXlzIFx1MzhCOCAxMzUtMTYtNQorYWx3YXlzIFx1MzhCQSAxNS0yMzQ1LTIKK2Fsd2F5cyBcdTM4QkIgMTI0NS0xMjQ2LTUKK2Fsd2F5cyBcdTM4QkMgMTM1LTM0Ni01CithbHdheXMgXHUzOEJEIDE1Ni00CithbHdheXMgXHUzOEJFIDEzLTQ1LTUKK2Fsd2F5cyBcdTM4QzAgMS0xMzYtNQorYWx3YXlzIFx1MzhDMSAxMzUtMzU2LTUKK2Fsd2F5cyBcdTM4QzIgMjM0Ni01CithbHdheXMgXHUzOEMzIDEyNTYtNQorYWx3YXlzIFx1MzhDNCAyNDUtMTI1Ni0yCithbHdheXMgXHUzOEM1IDEyNS0xMjM2LTUKK2Fsd2F5cyBcdTM4QzYgMTM0LTE2LTQKK2Fsd2F5cyBcdTM4QzcgMTQ1LTE2LTUKK2Fsd2F5cyBcdTM4QzggMTUtMTU2LTUKK2Fsd2F5cyBcdTM4QzkgMTMtMTIzNDYtMworYWx3YXlzIFx1MzhDQSAxNS0yMzQtMworYWx3YXlzIFx1MzhDQiAxNDUtMTIzNi0zCithbHdheXMgXHUzOENDIDI0LTEyMzYtNQorYWx3YXlzIFx1MzhDRCAxMjQtMjQ1Ni0yCithbHdheXMgXHUzOENFIDEzNC0zNC01CithbHdheXMgXHUzOENGIDEzLTEzNDU2LTUKK2Fsd2F5cyBcdTM4RDAgMTM1LTIzNDUtNQorYWx3YXlzIFx1MzhEMSAyMzUtMgorYWx3YXlzIFx1MzhEMiAyNDUtMTM1Ni01CithbHdheXMgXHUzOEQzIDI0NS0xMjM2LTUKK2Fsd2F5cyBcdTM4RDQgMTQ1LTEzNDU2LTMKK2Fsd2F5cyBcdTM4RDggMTIzNDUtMzQtNAorYWx3YXlzIFx1MzhEOSAxNDUtMTYtMgorYWx3YXlzIFx1MzhEQSAxMjQtMTIzNDYtNAorYWx3YXlzIFx1MzhEQiAxMjQtMzQ1LTUKK2Fsd2F5cyBcdTM4REMgMTUtMTM0NTYtMgorYWx3YXlzIFx1MzhERCAxNS0xMjM0Ni0zCithbHdheXMgXHUzOERFIDE0NS0yNS0yCithbHdheXMgXHUzOERGIDE1LTE2LTUKK2Fsd2F5cyBcdTM4RTAgMTI0LTE0Ni0zCithbHdheXMgXHUzOEUyIDEyNC0xNi0yCithbHdheXMgXHUzOEUzIDE1LTIzNDU2LTIKK2Fsd2F5cyBcdTM4RTQgMTMtMjM0NS01CithbHdheXMgXHUzOEU1IDEtMTU2LTUKK2Fsd2F5cyBcdTM4RTYgMTI0Ni0zCithbHdheXMgXHUzOEU3IDE0NTYtNQorYWx3YXlzIFx1MzhFQSAxMjM1LTEyNDU2LTQKK2Fsd2F5cyBcdTM4RUIgMS0xMjM0Ni00CithbHdheXMgXHUzOEVDIDI0NS0xNi01CithbHdheXMgXHUzOEVEIDEyNS0xMjM0Ni0zCithbHdheXMgXHUzOEVGIDE1LTM0Ni01CithbHdheXMgXHUzOEYwIDE1LTE2LTMKK2Fsd2F5cyBcdTM4RjEgMTI1LTIzNDYtMgorYWx3YXlzIFx1MzhGMiAxMjQ2LTIKK2Fsd2F5cyBcdTM4RjUgMTI0LTM0NS01CithbHdheXMgXHUzOEY2IDEtMTIzNi0zCithbHdheXMgXHUzOEY3IDEzNDUtMTM0NTYtNQorYWx3YXlzIFx1MzhGQSAxNS0xNDU2LTMKK2Fsd2F5cyBcdTM4RkIgMTYtNQorYWx3YXlzIFx1MzhGQyAxMjQ1LTEzNi00CithbHdheXMgXHUzOEZEIDI0LTM0LTUKK2Fsd2F5cyBcdTM4RkUgMTItMzQ1LTUKK2Fsd2F5cyBcdTM4RkYgMS0yNS0yCithbHdheXMgXHUzOTAwIDQ1Ni01CithbHdheXMgXHUzOTAxIDEyNC0yMzQ1LTQKK2Fsd2F5cyBcdTM5MDIgMTMtMTYtMgorYWx3YXlzIFx1MzkwMyAxMjM0NS0xMzQ2LTMKK2Fsd2F5cyBcdTM5MDQgMTIzNC0zNTYtNQorYWx3YXlzIFx1MzkwNSAyNDU2LTUKK2Fsd2F5cyBcdTM5MDYgMTIzNDUtMTIzNi01CithbHdheXMgXHUzOTA3IDE0Ni01CithbHdheXMgXHUzOTA4IDI0NS0xNDU2LTUKK2Fsd2F5cyBcdTM5MDkgMjQ1LTIzNDU2LTMKK2Fsd2F5cyBcdTM5MEEgMTUtMjQ2LTUKK2Fsd2F5cyBcdTM5MEIgMTM1LTEzNi01CithbHdheXMgXHUzOTBDIDEzLTEyMzYtMworYWx3YXlzIFx1MzkwRCAyNDUtMjQ2LTMKK2Fsd2F5cyBcdTM5MEUgMTMtMjM0Ni0zCithbHdheXMgXHUzOTBGIDEyNC0xMjM0Ni0yCithbHdheXMgXHUzOTEwIDEyLTEyMzYtMworYWx3YXlzIFx1MzkxMSAyMzQtNQorYWx3YXlzIFx1MzkxMiAxMy0xNDYtMworYWx3YXlzIFx1MzkxMyAxMzUtMTM2LTUKK2Fsd2F5cyBcdTM5MTQgMTIzNDUtMzQtNQorYWx3YXlzIFx1MzkxNSAxMi0zNC01CithbHdheXMgXHUzOTE2IDEtMzQtNAorYWx3YXlzIFx1MzkxNyAxMjQtMjQ1Ni01CithbHdheXMgXHUzOTE4IDEyLTE0Ni00CithbHdheXMgXHUzOTE5IDEzNi0zCithbHdheXMgXHUzOTFBIDEyMzUtMTM0Ni0yCithbHdheXMgXHUzOTFCIDEyNDUtMTM2LTUKK2Fsd2F5cyBcdTM5MUMgMTUtMTI1Ni01CithbHdheXMgXHUzOTFEIDEyLTEyMzQ2LTMKK2Fsd2F5cyBcdTM5MUUgMTQ1LTI1LTIKK2Fsd2F5cyBcdTM5MUYgMTIzLTEyMzQ2LTQKK2Fsd2F5cyBcdTM5MjAgMTQtMTYtNQorYWx3YXlzIFx1MzkyMSAxNC0xNi01CithbHdheXMgXHUzOTIyIDEyNTYtNQorYWx3YXlzIFx1MzkyMyAxMjM0LTEzNTYtMworYWx3YXlzIFx1MzkyNCAxMjU2LTIKK2Fsd2F5cyBcdTM5MjUgMTIzNS0yNDU2LTUKK2Fsd2F5cyBcdTM5MjYgMTQtMTYtNQorYWx3YXlzIFx1MzkyNyAxMjM1LTEyMzU2LTIKK2Fsd2F5cyBcdTM5MjggMTMtMTIzNDYtNAorYWx3YXlzIFx1MzkyOSAxMjMtMjM0Ni01CithbHdheXMgXHUzOTJBIDQ1LTUKK2Fsd2F5cyBcdTM5MkIgMTQ1LTIzNDYtMgorYWx3YXlzIFx1MzkyQyAxMjM1LTEyNDYtNQorYWx3YXlzIFx1MzkyRCAxMy0yNDYtMworYWx3YXlzIFx1MzkyRSAxMy00NTYtNQorYWx3YXlzIFx1MzkyRiAxMy0yMzUtMworYWx3YXlzIFx1MzkzMCAxMjUtMjUtNQorYWx3YXlzIFx1MzkzMSAxMjM0NS0zNC01CithbHdheXMgXHUzOTMyIDI0NS0zNDYtNQorYWx3YXlzIFx1MzkzMyAxMzUtMjQ1Ni00CithbHdheXMgXHUzOTM0IDEyLTIzNDYtNQorYWx3YXlzIFx1MzkzNSAyNDUtMTU2LTIKK2Fsd2F5cyBcdTM5MzYgMTM0LTEzNDYtMgorYWx3YXlzIFx1MzkzNyAxMjM1LTEyMzYtMworYWx3YXlzIFx1MzkzOCAxNS0xNi01CithbHdheXMgXHUzOTM5IDI0NS0yMzQtMgorYWx3YXlzIFx1MzkzQSAxMjM1LTQ1Ni0zCithbHdheXMgXHUzOTNCIDE0LTEyNDU2LTQKK2Fsd2F5cyBcdTM5M0MgMTMtMzQ2LTIKK2Fsd2F5cyBcdTM5M0QgMTItMTIzNTYtMgorYWx3YXlzIFx1MzkzRSAxMjQtMTIzNi01CithbHdheXMgXHUzOTNGIDIzNDUtNQorYWx3YXlzIFx1Mzk0MCAxNDUtMjM0Ni0yCithbHdheXMgXHUzOTQxIDE0NS0yMzQ2LTIKK2Fsd2F5cyBcdTM5NDIgMTI0LTIzNDYtNQorYWx3YXlzIFx1Mzk0MyAxMzQtMTM2LTMKK2Fsd2F5cyBcdTM5NDQgMTQtMTM0NTYtMgorYWx3YXlzIFx1Mzk0NSAyNC0xMjM1Ni01CithbHdheXMgXHUzOTQ2IDEyNC0xMjQ2LTUKK2Fsd2F5cyBcdTM5NDcgMjQ1LTEyMzYtMgorYWx3YXlzIFx1Mzk0OCAxNDUtMzQ2LTIKK2Fsd2F5cyBcdTM5NDkgMTItMTU2LTUKK2Fsd2F5cyBcdTM5NEEgMTIzNC0xMzU2LTIKK2Fsd2F5cyBcdTM5NEIgMTYtMworYWx3YXlzIFx1Mzk0QyAxMy0xMjU2LTIKK2Fsd2F5cyBcdTM5NEQgMTMtMTYtNQorYWx3YXlzIFx1Mzk0RSAxNC0xNi0yCithbHdheXMgXHUzOTRGIDEyNC0yMzQ1LTQKK2Fsd2F5cyBcdTM5NTAgNDUtNQorYWx3YXlzIFx1Mzk1MSAyMzQtMworYWx3YXlzIFx1Mzk1MiAyNDUtMjQ1Ni00CithbHdheXMgXHUzOTUzIDI0NS0xNi0zCithbHdheXMgXHUzOTU0IDEyNTYtNQorYWx3YXlzIFx1Mzk1NSAxNC0yMzQ1LTIKK2Fsd2F5cyBcdTM5NTYgMjQ1LTEyMzQ2LTMKK2Fsd2F5cyBcdTM5NUEgMTI1Ni0yCithbHdheXMgXHUzOTVCIDEzLTE2LTIKK2Fsd2F5cyBcdTM5NUMgMTI0Ni01CithbHdheXMgXHUzOTVEIDEzNC0xNi00CithbHdheXMgXHUzOTVFIDE1LTEyNDYtNQorYWx3YXlzIFx1Mzk1RiAxNS0zNDYtMgorYWx3YXlzIFx1Mzk2MCAxNS0xMjU2LTQKK2Fsd2F5cyBcdTM5NjEgMTItMTU2LTUKK2Fsd2F5cyBcdTM5NjIgMjQ1LTIzNC0yCithbHdheXMgXHUzOTYzIDEyMzUtMTI0Ni01CithbHdheXMgXHUzOTY0IDEzLTE0NTYtMworYWx3YXlzIFx1Mzk2NSAxMjU2LTIKK2Fsd2F5cyBcdTM5NjYgMjQ1LTM0Ni01CithbHdheXMgXHUzOTY3IDI0LTEyMzQ1Ni01CithbHdheXMgXHUzOTY4IDI0LTEyNDYtNQorYWx3YXlzIFx1Mzk2OSAxNDUtMjUtNAorYWx3YXlzIFx1Mzk2QSAxNC0xMjM1Ni0yCithbHdheXMgXHUzOTZCIDE0NS0xMjM0NTYtMworYWx3YXlzIFx1Mzk2QyAxMjM0LTEzNDYtMgorYWx3YXlzIFx1Mzk2RCAxMjQtMjQ1Ni01CithbHdheXMgXHUzOTZFIDEyLTE0Ni00CithbHdheXMgXHUzOTZGIDE0NTYtNAorYWx3YXlzIFx1Mzk3MCAxNS0xNDYtMworYWx3YXlzIFx1Mzk3MSAxMjM0NS0zNTYtNAorYWx3YXlzIFx1Mzk3MiAxMi0xMzYtMworYWx3YXlzIFx1Mzk3MyA0NS0yCithbHdheXMgXHUzOTc0IDEyNC0xNi0yCithbHdheXMgXHUzOTc1IDEyMzUtMTIzNDU2LTUKK2Fsd2F5cyBcdTM5NzYgMTUtMjM0Ni01CithbHdheXMgXHUzOTc3IDI0NS0zNDYtNQorYWx3YXlzIFx1Mzk3OCAxMzQtMTQ1Ni00CithbHdheXMgXHUzOTc5IDEyMzQ1LTEzNi00CithbHdheXMgXHUzOTdBIDEyMzUtMjM0Ni0yCithbHdheXMgXHUzOTdDIDE0NTYtNQorYWx3YXlzIFx1Mzk3RCAyNDUtMjM0Ni01CithbHdheXMgXHUzOTdFIDEzNDUtMTYtNQorYWx3YXlzIFx1Mzk3RiAxNDYtNQorYWx3YXlzIFx1Mzk4MCAxMjM0LTEzNTYtMgorYWx3YXlzIFx1Mzk4MSAxNC0yMzQ1LTIKK2Fsd2F5cyBcdTM5ODIgMTItMTM0Ni0yCithbHdheXMgXHUzOTgzIDEyLTEyMzYtNAorYWx3YXlzIFx1Mzk4NCAxMzQtMzQ1LTIKK2Fsd2F5cyBcdTM5ODUgMTQ1LTM0Ni0yCithbHdheXMgXHUzOTg2IDEyMzUtMzQtMworYWx3YXlzIFx1Mzk4NyAxNC0zNC01CithbHdheXMgXHUzOTg5IDE2LTUKK2Fsd2F5cyBcdTM5OEEgMTIzNS0zNS0yCithbHdheXMgXHUzOThCIDEtMzQ1LTMKK2Fsd2F5cyBcdTM5OEMgMTIzNS0zNC0zCithbHdheXMgXHUzOThEIDIzNDYtNQorYWx3YXlzIFx1Mzk4RSAxMjM1LTI1LTUKK2Fsd2F5cyBcdTM5OEYgMTUtNDUtNQorYWx3YXlzIFx1Mzk5MCAxMzQ1LTE2LTUKK2Fsd2F5cyBcdTM5OTEgMTUtMjM0NS01CithbHdheXMgXHUzOTkyIDE0LTE2LTIKK2Fsd2F5cyBcdTM5OTMgMTUtMjM0NS01CithbHdheXMgXHUzOTk0IDIzNDUtNQorYWx3YXlzIFx1Mzk5NSAxNC0xMjM0Ni0yCithbHdheXMgXHUzOTk2IDEzNC0xMzYtNQorYWx3YXlzIFx1Mzk5NyAxMy0xNDU2LTMKK2Fsd2F5cyBcdTM5OTggMTMtMTYtMworYWx3YXlzIFx1Mzk5QSAxMzUtMjM0NS00CithbHdheXMgXHUzOTlCIDEyNTYtMgorYWx3YXlzIFx1Mzk5QyAxMjM1LTI1LTUKK2Fsd2F5cyBcdTM5OUQgMTM0LTI0Ni00CithbHdheXMgXHUzOTlFIDEyLTEyMzU2LTIKK2Fsd2F5cyBcdTM5OUYgMTM0LTI0NTYtMgorYWx3YXlzIFx1MzlBMCAxNDUtMTI0Ni01CithbHdheXMgXHUzOUExIDE0LTIzNDYtNQorYWx3YXlzIFx1MzlBMiAxMy0zNDYtMgorYWx3YXlzIFx1MzlBMyAxMjQ2LTUKK2Fsd2F5cyBcdTM5QTQgMTYtNQorYWx3YXlzIFx1MzlBNSAxNS0yMzQ1LTQKK2Fsd2F5cyBcdTM5QTYgMTUtMTYtNQorYWx3YXlzIFx1MzlBNyAyNDUtMTIzNi00CithbHdheXMgXHUzOUE4IDE0LTEyMzYtNAorYWx3YXlzIFx1MzlBOSAxNDU2LTQKK2Fsd2F5cyBcdTM5QUEgMTUtMzQ2LTUKK2Fsd2F5cyBcdTM5QUIgMTI1LTM0NS0zCithbHdheXMgXHUzOUFDIDE0LTI1LTQKK2Fsd2F5cyBcdTM5QUQgMTQtMTM0NTYtMgorYWx3YXlzIFx1MzlBRSAyNDUtMjM0NS0yCithbHdheXMgXHUzOUFGIDEyMzUtMjUtNQorYWx3YXlzIFx1MzlCMCAxMy0yMzQ1LTMKK2Fsd2F5cyBcdTM5QjEgMjUtNAorYWx3YXlzIFx1MzlCMiAxMjUtMjQ1Ni0zCithbHdheXMgXHUzOUIzIDEtMTU2LTUKK2Fsd2F5cyBcdTM5QjQgMTMtMjM0Ni0yCithbHdheXMgXHUzOUI1IDEtMzQtMworYWx3YXlzIFx1MzlCNiAxNDUtMzQ2LTIKK2Fsd2F5cyBcdTM5QjcgMjM1LTQKK2Fsd2F5cyBcdTM5QjggMTMtMTYtNAorYWx3YXlzIFx1MzlCOSA0Ni0yCithbHdheXMgXHUzOUJBIDEyNDUtMzQtNQorYWx3YXlzIFx1MzlCQiAxNS0xNi0yCithbHdheXMgXHUzOUJDIDI0LTQ1Ni01CithbHdheXMgXHUzOUJEIDEyNTYtNQorYWx3YXlzIFx1MzlCRSAxNi0yCithbHdheXMgXHUzOUJGIDI0NS0yMzQ1LTQKK2Fsd2F5cyBcdTM5QzAgMTMtMTYtMgorYWx3YXlzIFx1MzlDMSAyNDUtMTI1Ni01CithbHdheXMgXHUzOUMyIDEyNC0yMzQ1LTIKK2Fsd2F5cyBcdTM5QzMgMjQtMTIzNTYtMworYWx3YXlzIFx1MzlDNCAyNDUtMjM0NS00CithbHdheXMgXHUzOUM1IDEzNC0zNC01CithbHdheXMgXHUzOUM2IDEzLTE0NTYtNQorYWx3YXlzIFx1MzlDNyAxMzQtMTQ2LTQKK2Fsd2F5cyBcdTM5QzggMTQ1Ni00CithbHdheXMgXHUzOUM5IDEzLTI0NTYtNQorYWx3YXlzIFx1MzlDQSAxMjM0LTEyNi0zCithbHdheXMgXHUzOUNCIDE1LTQ1LTQKK2Fsd2F5cyBcdTM5Q0MgMTM0LTE0Ni01CithbHdheXMgXHUzOUNEIDEyMzQ1LTEzNDYtNAorYWx3YXlzIFx1MzlDRSAyNDUtMjM0NTYtMworYWx3YXlzIFx1MzlDRiAxMy0xMzQ2LTMKK2Fsd2F5cyBcdTM5RDAgMTUtMTIzNDYtNAorYWx3YXlzIFx1MzlEMSAxMjM1LTEyNDYtMworYWx3YXlzIFx1MzlEMiAxMjU2LTUKK2Fsd2F5cyBcdTM5RDMgMTMtMzUtMworYWx3YXlzIFx1MzlENCAxMy0yMzU2LTUKK2Fsd2F5cyBcdTM5RDUgMTQtMjM0LTQKK2Fsd2F5cyBcdTM5RDYgMjM0Ni01CithbHdheXMgXHUzOUQ3IDEyNS0xNTYtNAorYWx3YXlzIFx1MzlEOCAxMjUtMTU2LTUKK2Fsd2F5cyBcdTM5RDkgMTM1LTE2LTUKK2Fsd2F5cyBcdTM5REEgMzUtNAorYWx3YXlzIFx1MzlEQiAxNC0xMjM2LTQKK2Fsd2F5cyBcdTM5REMgMTQtMzQ2LTUKK2Fsd2F5cyBcdTM5REQgMTMtMjM0NTYtMworYWx3YXlzIFx1MzlERSAxMzUtMzQ1LTIKK2Fsd2F5cyBcdTM5REYgMTIzLTIzNTYtMworYWx3YXlzIFx1MzlFMSAxMjM1LTI0NTYtNQorYWx3YXlzIFx1MzlFMiAxNDU2LTMKK2Fsd2F5cyBcdTM5RTMgMS0zNC0zCithbHdheXMgXHUzOUU0IDEyLTEyMzQ2LTUKK2Fsd2F5cyBcdTM5RTUgMTUtMjM0NS00CithbHdheXMgXHUzOUU2IDE1LTQ1LTUKK2Fsd2F5cyBcdTM5RTcgMjQtMzQtMworYWx3YXlzIFx1MzlFOCAyNDUtMjM0LTIKK2Fsd2F5cyBcdTM5RTkgMTIzNC0zNTYtNQorYWx3YXlzIFx1MzlFQSAxMy0xMjQ2LTQKK2Fsd2F5cyBcdTM5RUIgMTU2LTIKK2Fsd2F5cyBcdTM5RUMgMTMtMTIzNDYtNAorYWx3YXlzIFx1MzlFRCAyNDUtMjM1LTIKK2Fsd2F5cyBcdTM5RUUgMTIzNS0zNC0zCithbHdheXMgXHUzOUVGIDE0LTE0Ni00CithbHdheXMgXHUzOUYwIDE0LTE2LTUKK2Fsd2F5cyBcdTM5RjEgMTM0NS0zNDUtMgorYWx3YXlzIFx1MzlGMiAxNS0xMjM2LTQKK2Fsd2F5cyBcdTM5RjMgMS0yNS01CithbHdheXMgXHUzOUY0IDIzNDYtNAorYWx3YXlzIFx1MzlGNSAxMjM0LTEyMzU2LTIKK2Fsd2F5cyBcdTM5RjYgMTIzLTEzNTYtMworYWx3YXlzIFx1MzlGNyAxMjQtMTIzNDU2LTUKK2Fsd2F5cyBcdTM5RjggMTIzNC0xMzU2LTMKK2Fsd2F5cyBcdTM5RjkgMTI0LTIzNDYtNQorYWx3YXlzIFx1MzlGQSAxMjQtMzQ1LTUKK2Fsd2F5cyBcdTM5RkIgMS0yNS0yCithbHdheXMgXHUzOUZDIDEzNS0yNDYtNAorYWx3YXlzIFx1MzlGRCAxMy0zNC01CithbHdheXMgXHUzOUZFIDEyMy0zNC0zCithbHdheXMgXHUzOUZGIDEyLTQ1Ni0zCithbHdheXMgXHUzQTAwIDEzNS0xMzQ1Ni00CithbHdheXMgXHUzQTAxIDEtMTU2LTIKK2Fsd2F5cyBcdTNBMDIgMTQ1LTEyMzQ2LTQKK2Fsd2F5cyBcdTNBMDMgMTQ1LTEyNDYtNAorYWx3YXlzIFx1M0EwNCAxLTE0Ni01CithbHdheXMgXHUzQTA1IDEzNDUtMzU2LTUKK2Fsd2F5cyBcdTNBMDYgMTQtMTQ1Ni00CithbHdheXMgXHUzQTA3IDEyMzQtMTIzNi0yCithbHdheXMgXHUzQTA4IDEzLTE2LTQKK2Fsd2F5cyBcdTNBMDkgMTM0LTE0NTYtMgorYWx3YXlzIFx1M0EwQSAxMjQ2LTQKK2Fsd2F5cyBcdTNBMEIgMS0yMzQ2LTQKK2Fsd2F5cyBcdTNBMEMgMTMtMTIzNTYtNQorYWx3YXlzIFx1M0EwRCAxMzUtMTM0Ni0zCithbHdheXMgXHUzQTBFIDEyNDUtMzQtNQorYWx3YXlzIFx1M0EwRiAxMjQtMTIzNi0zCithbHdheXMgXHUzQTEwIDEzNS0zNC00CithbHdheXMgXHUzQTExIDEyNS0xMjM0Ni0zCithbHdheXMgXHUzQTEyIDEyMy0xMjQ2LTMKK2Fsd2F5cyBcdTNBMTMgMTQtMTQ2LTIKK2Fsd2F5cyBcdTNBMTQgMTIzNS0xMjM2LTUKK2Fsd2F5cyBcdTNBMTUgMTM0NTYtMgorYWx3YXlzIFx1M0ExNiAxLTE1Ni01CithbHdheXMgXHUzQTE3IDEzLTM0Ni0yCithbHdheXMgXHUzQTE4IDE1LTEzNDU2LTQKK2Fsd2F5cyBcdTNBMTkgMTUtMzQ2LTIKK2Fsd2F5cyBcdTNBMUEgMTUtMjU2LTIKK2Fsd2F5cyBcdTNBMUIgMjQtMTIzNi00CithbHdheXMgXHUzQTFDIDI0NS0yMzQ1LTIKK2Fsd2F5cyBcdTNBMUQgMTUtMzQ2LTUKK2Fsd2F5cyBcdTNBMUUgMTUtMzQtNQorYWx3YXlzIFx1M0ExRiAxMjM1LTI0NTYtMgorYWx3YXlzIFx1M0EyMCAxMzQtMjM0NS00CithbHdheXMgXHUzQTIxIDEyMzUtMTIzNDU2LTIKK2Fsd2F5cyBcdTNBMjIgMTIzNC0xNi0zCithbHdheXMgXHUzQTIzIDIzNS00CithbHdheXMgXHUzQTI0IDEyMy0yMzU2LTMKK2Fsd2F5cyBcdTNBMjUgMTM0NS0zNDUtNQorYWx3YXlzIFx1M0EyNiAxNS0xMjM0Ni00CithbHdheXMgXHUzQTI3IDEzNS0xMzYtNQorYWx3YXlzIFx1M0EyOCAxMi0xMjM1Ni0zCithbHdheXMgXHUzQTI5IDEzLTM0Ni0yCithbHdheXMgXHUzQTJBIDEyMzUtNDU2LTUKK2Fsd2F5cyBcdTNBMkIgMTQtMTIzNi00CithbHdheXMgXHUzQTJDIDQ1LTIKK2Fsd2F5cyBcdTNBMkQgMTIzNS0zNC01CithbHdheXMgXHUzQTJFIDE0NS0xMjM1Ni0zCithbHdheXMgXHUzQTJGIDEyMy0yNS01CithbHdheXMgXHUzQTMwIDEzLTEyMzQ1Ni01CithbHdheXMgXHUzQTMxIDI0Ni0yCithbHdheXMgXHUzQTMyIDI0NS0yMzQ2LTUKK2Fsd2F5cyBcdTNBMzMgMTMtMTI0Ni00CithbHdheXMgXHUzQTM0IDEzLTIzNDUtNQorYWx3YXlzIFx1M0EzNSAxMy0yMzQ1LTQKK2Fsd2F5cyBcdTNBMzYgMTQ1LTE0Ni00CithbHdheXMgXHUzQTM3IDEzLTE0NTYtNQorYWx3YXlzIFx1M0EzOCAxMzQtMzQ1LTUKK2Fsd2F5cyBcdTNBMzkgMTI1LTEyNDYtNQorYWx3YXlzIFx1M0EzQSAxMzQtMjM0NS00CithbHdheXMgXHUzQTNCIDI0NS0xMjM2LTIKK2Fsd2F5cyBcdTNBM0MgMTQtMjM2LTUKK2Fsd2F5cyBcdTNBM0QgMTIzNDUtMzQtNQorYWx3YXlzIFx1M0EzRSA0Ni01CithbHdheXMgXHUzQTNGIDEzLTEyNTYtNQorYWx3YXlzIFx1M0E0MCAxMy0xMjU2LTUKK2Fsd2F5cyBcdTNBNDEgMjQ1LTIzNi01CithbHdheXMgXHUzQTQzIDI0NS0yMzQ1LTMKK2Fsd2F5cyBcdTNBNDQgMjQtMjQ1Ni0zCithbHdheXMgXHUzQTQ1IDEyLTEyMzU2LTMKK2Fsd2F5cyBcdTNBNDYgMTMtMjM0LTUKK2Fsd2F5cyBcdTNBNDcgMTIzNS0zNS0yCithbHdheXMgXHUzQTQ4IDI1Ni00CithbHdheXMgXHUzQTQ5IDE1LTE2LTMKK2Fsd2F5cyBcdTNBNEEgMTUtNDUtMworYWx3YXlzIFx1M0E0QiAxNS0zNC01CithbHdheXMgXHUzQTRDIDEyMzQ1LTM1Ni01CithbHdheXMgXHUzQTREIDI0NS0yMzQ2LTUKK2Fsd2F5cyBcdTNBNEUgMzQ2LTUKK2Fsd2F5cyBcdTNBNEYgMTIzNS0zNTYtMworYWx3YXlzIFx1M0E1MCAxNDUtMTM2LTUKK2Fsd2F5cyBcdTNBNTIgMjQ1LTE0NTYtMgorYWx3YXlzIFx1M0E1MyAxMjM1LTEyNDYtNAorYWx3YXlzIFx1M0E1NCAxMjQtMTIzNDU2LTIKK2Fsd2F5cyBcdTNBNTUgMTQtMTM0NTYtMworYWx3YXlzIFx1M0E1NiAyNDUtNDYtMgorYWx3YXlzIFx1M0E1NyAxNS0xNi0zCithbHdheXMgXHUzQTU4IDE2LTQKK2Fsd2F5cyBcdTNBNTkgMTUtMjQ1Ni01CithbHdheXMgXHUzQTVBIDEzNC0xMzU2LTIKK2Fsd2F5cyBcdTNBNUIgMTI0LTEyNDU2LTIKK2Fsd2F5cyBcdTNBNUMgMTQtMTIzNi00CithbHdheXMgXHUzQTVEIDEyMzUtMTQ2LTIKK2Fsd2F5cyBcdTNBNUUgMjQ1LTIzNDYtNQorYWx3YXlzIFx1M0E1RiAxLTI0NTYtNQorYWx3YXlzIFx1M0E2MCAxMjM0LTI0Ni00CithbHdheXMgXHUzQTYxIDE0LTI1LTQKK2Fsd2F5cyBcdTNBNjIgMTM0LTE2LTIKK2Fsd2F5cyBcdTNBNjMgMTIzNS0xMjQ2LTMKK2Fsd2F5cyBcdTNBNjQgMTIzNDUtMzQtMworYWx3YXlzIFx1M0E2NSAxNS0yMzQ1LTMKK2Fsd2F5cyBcdTNBNjYgMTUtMTYtMworYWx3YXlzIFx1M0E2NyAxMzUtMTI2LTIKK2Fsd2F5cyBcdTNBNjggMTIzNS0xMjQ2LTUKK2Fsd2F5cyBcdTNBNjkgMjQ1LTEzNDU2LTQKK2Fsd2F5cyBcdTNBNkEgMTMtMzQ2LTIKK2Fsd2F5cyBcdTNBNkIgMS0xNTYtMgorYWx3YXlzIFx1M0E2QyAxNS0xNi0zCithbHdheXMgXHUzQTZEIDEzLTI0Ni00CithbHdheXMgXHUzQTZFIDI0NS0yMzQ1LTMKK2Fsd2F5cyBcdTNBNkYgMTIzNC0xMjYtMgorYWx3YXlzIFx1M0E3MCAxMy0yNDYtNAorYWx3YXlzIFx1M0E3MSAxMy0yMzYtMgorYWx3YXlzIFx1M0E3MiAyNDUtNDUtMgorYWx3YXlzIFx1M0E3MyAxNS0xMjM0Ni00CithbHdheXMgXHUzQTc0IDEzLTEyNTYtMworYWx3YXlzIFx1M0E3NSAyMzQ2LTUKK2Fsd2F5cyBcdTNBNzYgMTM0NS0zNDYtMworYWx3YXlzIFx1M0E3NyAyNDUtMjM0NS0zCithbHdheXMgXHUzQTc4IDE0NS0zNDYtMgorYWx3YXlzIFx1M0E3OSAxNDUtMzQ2LTIKK2Fsd2F5cyBcdTNBN0EgMTIzNC0xNi0zCithbHdheXMgXHUzQTdCIDEzLTEyNDYtNAorYWx3YXlzIFx1M0E3QyAxLTE1Ni0zCithbHdheXMgXHUzQTdEIDI0NS0xNi0yCithbHdheXMgXHUzQTdFIDI0NS0xNi0yCithbHdheXMgXHUzQTdGIDEyMy0zNC0zCithbHdheXMgXHUzQTgwIDEyNTYtMgorYWx3YXlzIFx1M0E4MSAyNDUtMTQ1Ni0yCithbHdheXMgXHUzQTgyIDEyMy0zNC0zCithbHdheXMgXHUzQTgzIDEyMzUtMjM0Ni0yCithbHdheXMgXHUzQTg0IDEyMzQ1LTM0LTIKK2Fsd2F5cyBcdTNBODUgMTMtMTM1Ni01CithbHdheXMgXHUzQTg2IDE0NS0xNi00CithbHdheXMgXHUzQTg3IDE1LTIzNDUtNQorYWx3YXlzIFx1M0E4OCAxMy0xMjQ2LTUKK2Fsd2F5cyBcdTNBODkgMTIzNS0yMzQ2LTIKK2Fsd2F5cyBcdTNBOEEgMjQ1LTI1Ni0yCithbHdheXMgXHUzQThCIDEyMzUtMTIzNi01CithbHdheXMgXHUzQThDIDEyNC0xMjM0Ni00CithbHdheXMgXHUzQThEIDEzNS0xMjYtMgorYWx3YXlzIFx1M0E4RSAxMzQ1LTM0NS01CithbHdheXMgXHUzQThGIDEzNS0xNi00CithbHdheXMgXHUzQTkwIDE0LTM0LTUKK2Fsd2F5cyBcdTNBOTEgMzQ2LTUKK2Fsd2F5cyBcdTNBOTIgMTM0NS0xNi0yCithbHdheXMgXHUzQTkzIDEyLTI0NTYtMgorYWx3YXlzIFx1M0E5NCAxNS0xMjM2LTUKK2Fsd2F5cyBcdTNBOTUgMTQ1LTI0Ni01CithbHdheXMgXHUzQTk2IDE0LTM0LTUKK2Fsd2F5cyBcdTNBOTcgMTI0LTEyMzU2LTQKK2Fsd2F5cyBcdTNBOTggMTQtMjM0NS00CithbHdheXMgXHUzQTk5IDEyMy0yMzQ2LTQKK2Fsd2F5cyBcdTNBOUEgMTUtMTIzNi01CithbHdheXMgXHUzQTlCIDEtMTM2LTQKK2Fsd2F5cyBcdTNBOUMgMTQ1LTI1LTQKK2Fsd2F5cyBcdTNBOUQgMTQtMjM0NS01CithbHdheXMgXHUzQTlFIDEzNC0xNDYtNQorYWx3YXlzIFx1M0E5RiAxNDUtMTIzNDU2LTMKK2Fsd2F5cyBcdTNBQTAgMjQ1LTIzNDUtNQorYWx3YXlzIFx1M0FBMSAxMjMtMjM0Ni01CithbHdheXMgXHUzQUEyIDI0LTE0Ni0zCithbHdheXMgXHUzQUEzIDI0NS0yNDYtMworYWx3YXlzIFx1M0FBNCAxMzUtMTYtNQorYWx3YXlzIFx1M0FBNSAxLTM0NS0zCithbHdheXMgXHUzQUE2IDE0NTYtNQorYWx3YXlzIFx1M0FBNyAxNS0xNi0zCithbHdheXMgXHUzQUE4IDI0LTEyMzYtNQorYWx3YXlzIFx1M0FBOSAxNS0zNC01CithbHdheXMgXHUzQUFBIDE1LTM0NS01CithbHdheXMgXHUzQUFCIDEyNDUtMTI0Ni01CithbHdheXMgXHUzQUFDIDEtMjUtMgorYWx3YXlzIFx1M0FBRCAxNC0zNC0yCithbHdheXMgXHUzQUFFIDE0LTEzNDU2LTIKK2Fsd2F5cyBcdTNBQUYgMTMtMTI1Ni00CithbHdheXMgXHUzQUIwIDEtMjQ1Ni0zCithbHdheXMgXHUzQUIxIDEyMzUtMTI0NTYtNQorYWx3YXlzIFx1M0FCNCAxMy0yMzQ1Ni0yCithbHdheXMgXHUzQUI1IDEzNS0xMjM2LTUKK2Fsd2F5cyBcdTNBQjYgMTIzNS0zNC0yCithbHdheXMgXHUzQUI3IDE0NS0xMjM1Ni00CithbHdheXMgXHUzQUI4IDEtMTM2LTMKK2Fsd2F5cyBcdTNBQjkgMTQtMTIzNTYtNAorYWx3YXlzIFx1M0FCQSAxMy0xMjU2LTMKK2Fsd2F5cyBcdTNBQkIgMTMtNDUtNQorYWx3YXlzIFx1M0FCQyAxMjMtMjM0Ni00CithbHdheXMgXHUzQUJEIDE1LTI1LTQKK2Fsd2F5cyBcdTNBQkUgMTMtMjM0Ni0yCithbHdheXMgXHUzQUJGIDEtMjM0Ni0yCithbHdheXMgXHUzQUMwIDE0NS0xMzQ1Ni00CithbHdheXMgXHUzQUMxIDE0NS0xMjQ1Ni01CithbHdheXMgXHUzQUMyIDEtMzQtNQorYWx3YXlzIFx1M0FDMyAyMzQ1LTQKK2Fsd2F5cyBcdTNBQzQgMTIzNC0xMzQ2LTIKK2Fsd2F5cyBcdTNBQzUgMjQ1LTE2LTIKK2Fsd2F5cyBcdTNBQzkgMTM0NS0xNi00CithbHdheXMgXHUzQUNBIDIzNDYtNAorYWx3YXlzIFx1M0FDQiAxLTEyMzYtMworYWx3YXlzIFx1M0FDRCAyMzQtMgorYWx3YXlzIFx1M0FDRSAxMy0xMjM0NTYtNAorYWx3YXlzIFx1M0FDRiAyNDYtNAorYWx3YXlzIFx1M0FEMCAyNDYtNAorYWx3YXlzIFx1M0FEMSAyNC0xNTYtMgorYWx3YXlzIFx1M0FEMiAxMy0xMjM0Ni0zCithbHdheXMgXHUzQUQzIDI0NS0xNi01CithbHdheXMgXHUzQUQ0IDEzLTEzNi01CithbHdheXMgXHUzQUQ1IDEzLTQ1Ni0zCithbHdheXMgXHUzQUQ2IDEtMTU2LTQKK2Fsd2F5cyBcdTNBRDcgMTIzNS0xMjM1Ni01CithbHdheXMgXHUzQUQ4IDEzNC0xNi01CithbHdheXMgXHUzQUQ5IDEyMzQ1LTM0LTIKK2Fsd2F5cyBcdTNBREEgMTIzNS0zNC0zCithbHdheXMgXHUzQURCIDEzLTQ1Ni01CithbHdheXMgXHUzQURDIDE0NS0xMjM2LTUKK2Fsd2F5cyBcdTNBREQgMTQ1LTE2LTMKK2Fsd2F5cyBcdTNBREUgMTI0LTE0Ni0zCithbHdheXMgXHUzQURGIDIzNDUtMgorYWx3YXlzIFx1M0FFMCAxMzUtMTIzNi01CithbHdheXMgXHUzQUUxIDE0NS0xMjM0Ni0zCithbHdheXMgXHUzQUUyIDI0NS0xMjU2LTUKK2Fsd2F5cyBcdTNBRTQgMTItMTM0Ni00CithbHdheXMgXHUzQUU1IDEzNC0xMzQ1Ni00CithbHdheXMgXHUzQUU2IDEyNC0xNDYtMworYWx3YXlzIFx1M0FFNyAxMzUtMTQ2LTUKK2Fsd2F5cyBcdTNBRTggMTIzNi0zCithbHdheXMgXHUzQUU5IDEyLTEyMzQ1Ni0zCithbHdheXMgXHUzQUVBIDEyLTEyMzQ2LTMKK2Fsd2F5cyBcdTNBRUIgMTUtMjM0NS00CithbHdheXMgXHUzQUVDIDE1LTI1Ni0yCithbHdheXMgXHUzQUVFIDEyNS0xNTYtNQorYWx3YXlzIFx1M0FFRiAxMzQtMTQ2LTUKK2Fsd2F5cyBcdTNBRjAgMTQtMTM0Ni00CithbHdheXMgXHUzQUYxIDEzNDUtMTIzNi00CithbHdheXMgXHUzQUYyIDEzNS0zNTYtNQorYWx3YXlzIFx1M0FGMyAxMi0xMzYtMgorYWx3YXlzIFx1M0FGNCAxNS0yNDYtNQorYWx3YXlzIFx1M0FGNSAxMjM0NS0zNTYtMgorYWx3YXlzIFx1M0FGNiAxLTEyMzU2LTQKK2Fsd2F5cyBcdTNBRjcgMTMtMTYtMworYWx3YXlzIFx1M0FGOCAxMy0zNDYtMworYWx3YXlzIFx1M0FGOSAyNC0zNC01CithbHdheXMgXHUzQUZBIDE1LTE2LTIKK2Fsd2F5cyBcdTNBRkIgMTMtMTIzNDU2LTUKK2Fsd2F5cyBcdTNBRkMgMS0yMzQ2LTIKK2Fsd2F5cyBcdTNBRkQgMTQtMzQtNQorYWx3YXlzIFx1M0IwMSAxMi0zNDUtMworYWx3YXlzIFx1M0IwMiAxMjU2LTIKK2Fsd2F5cyBcdTNCMDMgMTI0LTI0NTYtMgorYWx3YXlzIFx1M0IwNCAxMzQ1LTEyMzYtNAorYWx3YXlzIFx1M0IwNSAxMzQtMTIzNi01CithbHdheXMgXHUzQjA2IDEzNC0xNDU2LTQKK2Fsd2F5cyBcdTNCMDcgMTIzNS0xMjQ1Ni01CithbHdheXMgXHUzQjA4IDEyMzQ1Ni0zCithbHdheXMgXHUzQjA5IDEzNDUtMTI0NTYtNAorYWx3YXlzIFx1M0IwQSAxMjM1LTEyNDU2LTQKK2Fsd2F5cyBcdTNCMEIgMTIzNS0xMjM1Ni0yCithbHdheXMgXHUzQjBDIDEzLTEzNDU2LTQKK2Fsd2F5cyBcdTNCMEQgMTIzNC0zNC01CithbHdheXMgXHUzQjBFIDE1LTIzNDUtNAorYWx3YXlzIFx1M0IwRiAxNC0xNi01CithbHdheXMgXHUzQjEwIDEzLTE0NTYtNQorYWx3YXlzIFx1M0IxMSAxMjM1LTI1LTUKK2Fsd2F5cyBcdTNCMTIgMTM0LTEzNDYtNAorYWx3YXlzIFx1M0IxMyAxMjM0LTI0Ni01CithbHdheXMgXHUzQjE0IDEyMzUtMTQ2LTIKK2Fsd2F5cyBcdTNCMTUgNDYtMgorYWx3YXlzIFx1M0IxNyAxMzQ1LTIzNDUtNQorYWx3YXlzIFx1M0IxOCAxNS0zNC01CithbHdheXMgXHUzQjE5IDEyNDYtNAorYWx3YXlzIFx1M0IxQSAxMi0yMzQ2LTUKK2Fsd2F5cyBcdTNCMUIgMTUtMTYtMworYWx3YXlzIFx1M0IxQyAxMy0xNDU2LTUKK2Fsd2F5cyBcdTNCMUQgMTUtMTIzNDYtMworYWx3YXlzIFx1M0IxRSAxMjM1LTIzNDYtNQorYWx3YXlzIFx1M0IxRiAxMjM0NS0xMzYtMworYWx3YXlzIFx1M0IyMCAyNC0yNDU2LTUKK2Fsd2F5cyBcdTNCMjEgMTQtMTM0NTYtMworYWx3YXlzIFx1M0IyMiAxNS0xNi0zCithbHdheXMgXHUzQjIzIDE0NS0xMjQ2LTUKK2Fsd2F5cyBcdTNCMjQgMjQ1LTE2LTMKK2Fsd2F5cyBcdTNCMjUgMTM1LTE0Ni01CithbHdheXMgXHUzQjI2IDIzNi01CithbHdheXMgXHUzQjI3IDEzNS0xNDYtNQorYWx3YXlzIFx1M0IyOSAxMjM1LTEyNDYtNQorYWx3YXlzIFx1M0IyQSAxNDUtMzQ2LTIKK2Fsd2F5cyBcdTNCMkIgMjM0NS01CithbHdheXMgXHUzQjJDIDEzLTEyNTYtNQorYWx3YXlzIFx1M0IyRCAxMy0yNDYtNQorYWx3YXlzIFx1M0IyRSAxMzQ1LTEyMzYtNQorYWx3YXlzIFx1M0IyRiAxNC0zNDYtNQorYWx3YXlzIFx1M0IzMCAxMjU2LTIKK2Fsd2F5cyBcdTNCMzEgMTI0LTE2LTUKK2Fsd2F5cyBcdTNCMzIgMTI0LTIzNDUtMworYWx3YXlzIFx1M0IzMyAzNC00CithbHdheXMgXHUzQjM0IDEyMzUtMTIzNDYtNAorYWx3YXlzIFx1M0IzNSAxMy0yNDYtMworYWx3YXlzIFx1M0IzNiAxMjM1LTE0Ni01CithbHdheXMgXHUzQjM3IDEzLTI1Ni01CithbHdheXMgXHUzQjM4IDEyNC0yNDYtMworYWx3YXlzIFx1M0IzOSAxLTEzNTYtMworYWx3YXlzIFx1M0IzQSAxMjQtMTM1Ni0yCithbHdheXMgXHUzQjNCIDEyMzUtNDU2LTMKK2Fsd2F5cyBcdTNCM0MgMTIzNDUtMzQtNQorYWx3YXlzIFx1M0IzRiAxMjQtMTIzNDU2LTMKK2Fsd2F5cyBcdTNCNDEgMTI0NS0xMzU2LTIKK2Fsd2F5cyBcdTNCNDIgMTMtMjQ2LTQKK2Fsd2F5cyBcdTNCNDMgMTMtMTM0Ni0zCithbHdheXMgXHUzQjQ0IDE1LTE0NTYtNQorYWx3YXlzIFx1M0I0NyA0NS01CithbHdheXMgXHUzQjQ4IDEzLTIzNi0yCithbHdheXMgXHUzQjQ5IDEyMzUtMzUtMgorYWx3YXlzIFx1M0I0QSAxNS0xNi0zCithbHdheXMgXHUzQjRCIDEzNS0xMzQ2LTUKK2Fsd2F5cyBcdTNCNEMgMTM0LTEyMzU2LTIKK2Fsd2F5cyBcdTNCNEQgMjQ1LTE2LTMKK2Fsd2F5cyBcdTNCNEUgMTMtMTM0Ni0zCithbHdheXMgXHUzQjRGIDEyNDYtNAorYWx3YXlzIFx1M0I1MSAxMzQtMzU2LTUKK2Fsd2F5cyBcdTNCNTIgMTUtMTU2LTUKK2Fsd2F5cyBcdTNCNTMgMTM1LTIzNDUtNQorYWx3YXlzIFx1M0I1NCAxNC0zNC0yCithbHdheXMgXHUzQjU1IDI0NS0xMjU2LTMKK2Fsd2F5cyBcdTNCNTggMTUtMjM0NTYtMgorYWx3YXlzIFx1M0I1OSAxLTIzNDYtMgorYWx3YXlzIFx1M0I1QSAxNC0xMjU2LTQKK2Fsd2F5cyBcdTNCNUIgMTIzNC0yNDU2LTUKK2Fsd2F5cyBcdTNCNUMgMTI0NS0xMjM0Ni0yCithbHdheXMgXHUzQjVEIDI0NS0yMzQtMgorYWx3YXlzIFx1M0I1RSAxNC0zNDYtNQorYWx3YXlzIFx1M0I1RiAxMy0xMjM0Ni00CithbHdheXMgXHUzQjYwIDE1LTIzNDUtNAorYWx3YXlzIFx1M0I2MSAxNS0xNDU2LTUKK2Fsd2F5cyBcdTNCNjIgMTUtMTM0NTYtMworYWx3YXlzIFx1M0I2NCAxMzQ1LTI0Ni00CithbHdheXMgXHUzQjY2IDEyLTM0NS0zCithbHdheXMgXHUzQjY4IDM0Ni0yCithbHdheXMgXHUzQjY5IDE0LTM0Ni01CithbHdheXMgXHUzQjZBIDEyMzQ1LTM0LTMKK2Fsd2F5cyBcdTNCNkIgMjQ1LTI1LTIKK2Fsd2F5cyBcdTNCNkMgMS0zNC0zCithbHdheXMgXHUzQjZEIDEzNS0zNTYtNQorYWx3YXlzIFx1M0I2RSAxMjUtMTIzNi00CithbHdheXMgXHUzQjZGIDEtMjM0Ni0yCithbHdheXMgXHUzQjcwIDEyNS0xMjQ2LTQKK2Fsd2F5cyBcdTNCNzEgMTUtMjM0NTYtMgorYWx3YXlzIFx1M0I3MiAxMy0xNi0yCithbHdheXMgXHUzQjc0IDEzLTIzNDUtMworYWx3YXlzIFx1M0I3NiAxMy0yMzU2LTUKK2Fsd2F5cyBcdTNCNzggMTI0LTM0LTIKK2Fsd2F5cyBcdTNCNzkgMTUtMjM0NS0yCithbHdheXMgXHUzQjdBIDIzNDUtMworYWx3YXlzIFx1M0I3QiAxMjQtMTM0Ni0yCithbHdheXMgXHUzQjdDIDEyNC0zNDUtNQorYWx3YXlzIFx1M0I3RCAxNDUtMTYtNAorYWx3YXlzIFx1M0I3RSAxMy0yMzYtMgorYWx3YXlzIFx1M0I3RiAxMzQ2LTIKK2Fsd2F5cyBcdTNCODAgMTIzNS0xMjM2LTIKK2Fsd2F5cyBcdTNCODEgMTUtMjQ2LTIKK2Fsd2F5cyBcdTNCODIgMTMtMTI1Ni0zCithbHdheXMgXHUzQjgzIDEyNDYtMworYWx3YXlzIFx1M0I4NCAxMzUtMTM0Ni00CithbHdheXMgXHUzQjg1IDEtMTI0Ni0zCithbHdheXMgXHUzQjg2IDEzNDUtMzQ2LTUKK2Fsd2F5cyBcdTNCODcgMTI0LTIzNDUtNQorYWx3YXlzIFx1M0I4OCAxMzQ1LTI0NTYtNQorYWx3YXlzIFx1M0I4QiAyMzQtNAorYWx3YXlzIFx1M0I4QyAxMzQtMjM0NS0yCithbHdheXMgXHUzQjhEIDEzLTIzNDUtMworYWx3YXlzIFx1M0I4RSAxMzUtMzU2LTMKK2Fsd2F5cyBcdTNCOEYgMTM0NS0yNDU2LTUKK2Fsd2F5cyBcdTNCOTAgMTUtMTM0NTYtNAorYWx3YXlzIFx1M0I5MSAxMi0zNDUtMworYWx3YXlzIFx1M0I5MiAxMjQ1LTEyMzYtNAorYWx3YXlzIFx1M0I5MyAxMy0xMzYtNQorYWx3YXlzIFx1M0I5NCAxMjQtMTIzNDYtMgorYWx3YXlzIFx1M0I5NSAxMjQ1LTEyNDU2LTQKK2Fsd2F5cyBcdTNCOTYgMTMtMjM0NTYtMgorYWx3YXlzIFx1M0I5NyAyNDUtMTQ1Ni0yCithbHdheXMgXHUzQjk4IDEzNC0xNDYtMgorYWx3YXlzIFx1M0I5OSAyMzQ2LTUKK2Fsd2F5cyBcdTNCOUEgMTQtMTYtNQorYWx3YXlzIFx1M0I5QiAxMi0xNTYtMgorYWx3YXlzIFx1M0I5QyAxMjUtMTM0Ni0zCithbHdheXMgXHUzQjlEIDEyMzUtMjM0Ni0yCithbHdheXMgXHUzQjlFIDEzLTM0Ni0yCithbHdheXMgXHUzQjlGIDEzNDUtMjM0NS00CithbHdheXMgXHUzQkExIDEzLTEyNDU2LTUKK2Fsd2F5cyBcdTNCQTIgMTIzNS0xMjM1Ni0yCithbHdheXMgXHUzQkEzIDEzLTI0NTYtNQorYWx3YXlzIFx1M0JBNCAxNS0xMjM0Ni0zCithbHdheXMgXHUzQkE1IDEzNS0xMzYtNQorYWx3YXlzIFx1M0JBNiAxNS0yNS00CithbHdheXMgXHUzQkE3IDM0LTMKK2Fsd2F5cyBcdTNCQTggMTMtMTYtNQorYWx3YXlzIFx1M0JBOSAxNS0xNi0yCithbHdheXMgXHUzQkFBIDI0NS0yMzUtMgorYWx3YXlzIFx1M0JBQiAxMjM1LTIzNDYtMgorYWx3YXlzIFx1M0JBQyAxMjM0Ni0zCithbHdheXMgXHUzQkFEIDE1LTIzNDUtMgorYWx3YXlzIFx1M0JBRSAxMy0xMjU2LTIKK2Fsd2F5cyBcdTNCQUYgMTIzNS0zNS0yCithbHdheXMgXHUzQkIwIDEzNS0zNDYtMgorYWx3YXlzIFx1M0JCMSAyNC0xMzU2LTMKK2Fsd2F5cyBcdTNCQjIgMTItMTIzNTYtMworYWx3YXlzIFx1M0JCMyAxLTEzNi01CithbHdheXMgXHUzQkI0IDE1LTE0Ni0zCithbHdheXMgXHUzQkI1IDEtMTIzNi0zCithbHdheXMgXHUzQkI2IDI0LTI1LTUKK2Fsd2F5cyBcdTNCQjcgMTMtMTYtMworYWx3YXlzIFx1M0JCOCAxNS0xMjM0Ni01CithbHdheXMgXHUzQkI5IDEtMTU2LTUKK2Fsd2F5cyBcdTNCQkEgMTM1LTEzNi00CithbHdheXMgXHUzQkJCIDE1LTE0Ni0zCithbHdheXMgXHUzQkJDIDI0LTEyMzYtNQorYWx3YXlzIFx1M0JCRSAxNC0xMzQ2LTQKK2Fsd2F5cyBcdTNCQkYgMTM1LTE2LTUKK2Fsd2F5cyBcdTNCQzAgMTUtNDUtNQorYWx3YXlzIFx1M0JDMSAxMjM0LTM1Ni0yCithbHdheXMgXHUzQkMyIDE0NS0yNDU2LTUKK2Fsd2F5cyBcdTNCQzMgMjQ1LTE2LTMKK2Fsd2F5cyBcdTNCQzQgMS0xNTYtMworYWx3YXlzIFx1M0JDNSAxMjM0LTE2LTIKK2Fsd2F5cyBcdTNCQzYgMTItMTIzNi00CithbHdheXMgXHUzQkM3IDEzNS0xNi01CithbHdheXMgXHUzQkM4IDE1LTM0LTUKK2Fsd2F5cyBcdTNCQzkgMTIzNS0zNS01CithbHdheXMgXHUzQkNBIDEyMzUtMTM2LTIKK2Fsd2F5cyBcdTNCQ0IgMTMtMjM1LTQKK2Fsd2F5cyBcdTNCQ0MgMTItMTI0NTYtMgorYWx3YXlzIFx1M0JDRCAxMy00Ni00CithbHdheXMgXHUzQkNFIDEzNDUtMTM2LTUKK2Fsd2F5cyBcdTNCQ0YgMTMtMzQtNAorYWx3YXlzIFx1M0JEMCAxMjQtMjUtNAorYWx3YXlzIFx1M0JEMyAxMjQtMzQ1LTUKK2Fsd2F5cyBcdTNCRDQgMjQ1LTEyNDYtNQorYWx3YXlzIFx1M0JENSAxNS0xNi0zCithbHdheXMgXHUzQkQ2IDEtMjM0Ni0yCithbHdheXMgXHUzQkQ3IDE1LTIzNDUtMgorYWx3YXlzIFx1M0JEOCAxMjMtMTI0NTYtNAorYWx3YXlzIFx1M0JEOSAxLTIzNDYtMgorYWx3YXlzIFx1M0JEQSAxMjQtMzQ1LTMKK2Fsd2F5cyBcdTNCREIgMTIzNS0zNC0yCithbHdheXMgXHUzQkRDIDI0NS0xMjQ2LTUKK2Fsd2F5cyBcdTNCREQgMTQtMzQtNQorYWx3YXlzIFx1M0JERSAxMy00NS01CithbHdheXMgXHUzQkRGIDE0LTM0LTUKK2Fsd2F5cyBcdTNCRTAgMjQ1LTIzNDUtNQorYWx3YXlzIFx1M0JFMSAxMjM0LTE0Ni01CithbHdheXMgXHUzQkUyIDEtMTM2LTUKK2Fsd2F5cyBcdTNCRTMgMTIzNDUtMTM2LTMKK2Fsd2F5cyBcdTNCRTQgMTQtMTYtNQorYWx3YXlzIFx1M0JFNSAxMjUtMTQ2LTMKK2Fsd2F5cyBcdTNCRTYgMjQ1LTE2LTIKK2Fsd2F5cyBcdTNCRTkgMTI0LTE2LTUKK2Fsd2F5cyBcdTNCRUEgMTQtMTM0NTYtMgorYWx3YXlzIFx1M0JFQiAyNDUtMTI1Ni0yCithbHdheXMgXHUzQkVDIDE0LTIzNDUtNAorYWx3YXlzIFx1M0JFRCAxNC0zNC00CithbHdheXMgXHUzQkVFIDI0LTM0LTIKK2Fsd2F5cyBcdTNCRUYgMTQ1LTEyMzYtNAorYWx3YXlzIFx1M0JGMCAxLTIzNDYtMgorYWx3YXlzIFx1M0JGMSAxMjM0LTE0Ni0zCithbHdheXMgXHUzQkYyIDEzLTE0NTYtNQorYWx3YXlzIFx1M0JGMyAyNDUtMTM0NTYtMgorYWx3YXlzIFx1M0JGNCAxMjQ1LTEyMzQ2LTIKK2Fsd2F5cyBcdTNCRjUgMTQ1LTEyMzQ2LTQKK2Fsd2F5cyBcdTNCRjYgMTI1LTEyMzQ2LTMKK2Fsd2F5cyBcdTNCRjcgMTIzNC0zNC0yCithbHdheXMgXHUzQkY4IDEzLTE0NTYtNAorYWx3YXlzIFx1M0JGOSAxMzUtMjQ2LTQKK2Fsd2F5cyBcdTNCRkEgMTMtMjM0NS01CithbHdheXMgXHUzQkZCIDEzLTEyMzQ1Ni00CithbHdheXMgXHUzQkZEIDEzNS0xNDU2LTMKK2Fsd2F5cyBcdTNCRkUgMTI1LTE0Ni0zCithbHdheXMgXHUzQkZGIDE0LTM0Ni01CithbHdheXMgXHUzQzAwIDE0LTE2LTIKK2Fsd2F5cyBcdTNDMDEgMTQtMjUtNAorYWx3YXlzIFx1M0MwMiAyNC0xMzYtNAorYWx3YXlzIFx1M0MwMyAxMzQtMjM0NS01CithbHdheXMgXHUzQzA0IDEzLTIzNDUtNQorYWx3YXlzIFx1M0MwNSAxNDUtMTYtMgorYWx3YXlzIFx1M0MwNiAxMzUtMzU2LTUKK2Fsd2F5cyBcdTNDMDcgMTMtMjM0NS0zCithbHdheXMgXHUzQzA4IDE0LTIzNDUtNQorYWx3YXlzIFx1M0MwOSAxLTEzNi0zCithbHdheXMgXHUzQzBBIDE1LTIzNDUtMgorYWx3YXlzIFx1M0MwQiAxMjM0LTE0NTYtMgorYWx3YXlzIFx1M0MwQyAyNDUtMjM2LTUKK2Fsd2F5cyBcdTNDMEQgMTQtMTIzNDYtMgorYWx3YXlzIFx1M0MwRSAxMjUtMTI0Ni01CithbHdheXMgXHUzQzBGIDEzLTE0Ni0zCithbHdheXMgXHUzQzEwIDEyNC0yNS00CithbHdheXMgXHUzQzExIDI0LTEyMzYtMworYWx3YXlzIFx1M0MxMiAxNS0yMzYtMgorYWx3YXlzIFx1M0MxNCAxNS0zNDYtNQorYWx3YXlzIFx1M0MxNSAxNS0xNi0zCithbHdheXMgXHUzQzE2IDE0LTEyMzYtNAorYWx3YXlzIFx1M0MxNyAyNDUtMzQtNQorYWx3YXlzIFx1M0MxOCAxNi0yCithbHdheXMgXHUzQzE5IDEzNDUtMjUtNAorYWx3YXlzIFx1M0MxQSAxNC0xNi0yCithbHdheXMgXHUzQzFCIDIzNi01CithbHdheXMgXHUzQzFEIDE2LTQKK2Fsd2F5cyBcdTNDMUUgMTItMTU2LTMKK2Fsd2F5cyBcdTNDMUYgMTMtMTYtNQorYWx3YXlzIFx1M0MyMCAxMjM1LTEzNDYtMworYWx3YXlzIFx1M0MyMSAxNS0zNDYtNQorYWx3YXlzIFx1M0MyMiAxMjMtMTM1Ni0zCithbHdheXMgXHUzQzIzIDEyNS0xNTYtMworYWx3YXlzIFx1M0MyNCAyNDUtMzQ2LTUKK2Fsd2F5cyBcdTNDMjUgMTUtMTYtNQorYWx3YXlzIFx1M0MyNiAyNDUtMTI1Ni0zCithbHdheXMgXHUzQzI3IDEyMzUtMjQ1Ni0zCithbHdheXMgXHUzQzI4IDI0LTEzNi00CithbHdheXMgXHUzQzI5IDEyMzUtMjQ1Ni0zCithbHdheXMgXHUzQzJBIDEzLTEyNDYtMworYWx3YXlzIFx1M0MyQiAxMi0xMjM2LTMKK2Fsd2F5cyBcdTNDMkMgMTUtMjU2LTIKK2Fsd2F5cyBcdTNDMkQgMTUtMTI1Ni0zCithbHdheXMgXHUzQzJFIDI0LTEzNi01CithbHdheXMgXHUzQzJGIDEyNC0xMjM1Ni01CithbHdheXMgXHUzQzMwIDI0NS0zNDYtNQorYWx3YXlzIFx1M0MzMSAyNC0zNDUtNQorYWx3YXlzIFx1M0MzMiAxNS0xMjU2LTUKK2Fsd2F5cyBcdTNDMzMgMjM0NTYtMworYWx3YXlzIFx1M0MzNCAxMjM0LTEyMzU2LTUKK2Fsd2F5cyBcdTNDMzUgMTI1LTM0LTIKK2Fsd2F5cyBcdTNDMzYgMjM0LTQKK2Fsd2F5cyBcdTNDMzcgMTI1LTE1Ni01CithbHdheXMgXHUzQzM4IDE0LTIzNDUtNAorYWx3YXlzIFx1M0MzOSAxNS0yMzQ1LTMKK2Fsd2F5cyBcdTNDM0EgMTUtMjM0NTYtNQorYWx3YXlzIFx1M0MzQiAxNS0xNi0zCithbHdheXMgXHUzQzNDIDI0NS0zNDYtNQorYWx3YXlzIFx1M0MzRCAyMzQ1LTUKK2Fsd2F5cyBcdTNDM0UgMTMtMjQ2LTUKK2Fsd2F5cyBcdTNDM0YgMTUtMTYtMworYWx3YXlzIFx1M0M0MCAxMi0xNTYtNAorYWx3YXlzIFx1M0M0MSAxNS0xMjQ2LTUKK2Fsd2F5cyBcdTNDNDIgMTIzLTEzNDYtMworYWx3YXlzIFx1M0M0MyAxNDU2LTQKK2Fsd2F5cyBcdTNDNDQgMTIzNS0zNTYtMworYWx3YXlzIFx1M0M0NSAxNi01CithbHdheXMgXHUzQzQ2IDE1LTE2LTMKK2Fsd2F5cyBcdTNDNDcgMTUtMjM0Ni01CithbHdheXMgXHUzQzQ4IDEzLTE0NTYtNQorYWx3YXlzIFx1M0M0OSAzNDYtNQorYWx3YXlzIFx1M0M0QSAyMzQtMworYWx3YXlzIFx1M0M0QiAyNDUtMjM2LTUKK2Fsd2F5cyBcdTNDNEMgMzQ2LTIKK2Fsd2F5cyBcdTNDNEQgMTQtMTI0NTYtMgorYWx3YXlzIFx1M0M0RSAxMjMtMTIzNDU2LTMKK2Fsd2F5cyBcdTNDNEYgMS0xMzU2LTUKK2Fsd2F5cyBcdTNDNTIgMTIzNS0yMzQ2LTMKK2Fsd2F5cyBcdTNDNTQgMTUtMzQ2LTMKK2Fsd2F5cyBcdTNDNTUgMTMtMTI0Ni0zCithbHdheXMgXHUzQzU2IDI0NS0xMjQ2LTUKK2Fsd2F5cyBcdTNDNTcgMTUtMjM0LTMKK2Fsd2F5cyBcdTNDNTggMjM0NS00CithbHdheXMgXHUzQzU5IDE1LTIzNC00CithbHdheXMgXHUzQzVBIDI0NS0xMjM2LTIKK2Fsd2F5cyBcdTNDNUIgMTItMTI0NTYtNAorYWx3YXlzIFx1M0M1QyAxLTM0NS0yCithbHdheXMgXHUzQzVFIDE0LTM0NS0zCithbHdheXMgXHUzQzVGIDEyMzQtMTYtNAorYWx3YXlzIFx1M0M2MCAxMjMtMzQtMworYWx3YXlzIFx1M0M2MSAyNC0xMzU2LTMKK2Fsd2F5cyBcdTNDNjIgMTQtMTM0Ni0yCithbHdheXMgXHUzQzYzIDEyNC0xMjQ2LTQKK2Fsd2F5cyBcdTNDNjQgMTUtMTYtMgorYWx3YXlzIFx1M0M2NSAxNC0xMzU2LTUKK2Fsd2F5cyBcdTNDNjYgMjQ1LTE2LTMKK2Fsd2F5cyBcdTNDNjcgMjUtNQorYWx3YXlzIFx1M0M2OCAxNC0yMzQ1LTUKK2Fsd2F5cyBcdTNDNjkgMTQ1LTM0LTIKK2Fsd2F5cyBcdTNDNkEgMTIzNS0xMjM0NTYtMworYWx3YXlzIFx1M0M2QiAxNC0xMjM2LTUKK2Fsd2F5cyBcdTNDNkMgMTI0Ni00CithbHdheXMgXHUzQzZEIDE0NS0xMjQ1Ni01CithbHdheXMgXHUzQzZFIDEyMzUtMTI0Ni01CithbHdheXMgXHUzQzZGIDI0NTYtMgorYWx3YXlzIFx1M0M3MCAxMjUtMjQ1Ni00CithbHdheXMgXHUzQzcxIDEyMzUtMTI0Ni01CithbHdheXMgXHUzQzcyIDE2LTUKK2Fsd2F5cyBcdTNDNzMgMTM0LTEyNi01CithbHdheXMgXHUzQzc0IDEyNS0xNTYtNQorYWx3YXlzIFx1M0M3NSAxMjM0NS0xMzYtNQorYWx3YXlzIFx1M0M3NiAxMjM0LTEzNTYtMgorYWx3YXlzIFx1M0M3OCAxMzUtMTYtNQorYWx3YXlzIFx1M0M3OSAxNC0xNi01CithbHdheXMgXHUzQzdBIDE0LTM0LTIKK2Fsd2F5cyBcdTNDN0IgMTQtMjUtNQorYWx3YXlzIFx1M0M3QyAxMjM1LTI0NTYtMworYWx3YXlzIFx1M0M3RCAxLTEzNi00CithbHdheXMgXHUzQzdFIDEyMy0yNDU2LTMKK2Fsd2F5cyBcdTNDN0YgMjQ1LTIzNi01CithbHdheXMgXHUzQzgwIDEyLTEzNi0yCithbHdheXMgXHUzQzgxIDEyMy0xMjM0Ni0zCithbHdheXMgXHUzQzgyIDEyLTEzNTYtMgorYWx3YXlzIFx1M0M4MyAxMy0yMzQtNQorYWx3YXlzIFx1M0M4NCAxMy0yMzYtMgorYWx3YXlzIFx1M0M4NSAxMy0xNi01CithbHdheXMgXHUzQzg2IDE0LTEzNDU2LTIKK2Fsd2F5cyBcdTNDODcgMTQ1LTEyMzQ2LTMKK2Fsd2F5cyBcdTNDODggMjQtMTQ2LTIKK2Fsd2F5cyBcdTNDODkgMjQ1LTIzNi01CithbHdheXMgXHUzQzhBIDEyNDUtMTI0Ni01CithbHdheXMgXHUzQzhCIDEyLTI1LTUKK2Fsd2F5cyBcdTNDOEMgMTM0NS0xMzQ1Ni01CithbHdheXMgXHUzQzhEIDEyLTE1Ni01CithbHdheXMgXHUzQzhFIDE0LTEyNTYtMgorYWx3YXlzIFx1M0M4RiAxMjM0LTE0Ni0zCithbHdheXMgXHUzQzkxIDI0LTEyNDYtNAorYWx3YXlzIFx1M0M5MiAxMzUtMTQ2LTUKK2Fsd2F5cyBcdTNDOTMgMjQtMzQtNQorYWx3YXlzIFx1M0M5NCAxNS0yMzQ1LTMKK2Fsd2F5cyBcdTNDOTUgMTQtMzU2LTUKK2Fsd2F5cyBcdTNDOTYgMTUtMjQ2LTMKK2Fsd2F5cyBcdTNDOTcgMTIzNDUtMzQtMworYWx3YXlzIFx1M0M5OCAyNDUtMTI1Ni0yCithbHdheXMgXHUzQzk5IDI0LTM0LTMKK2Fsd2F5cyBcdTNDOUEgMjQtMzQ1LTMKK2Fsd2F5cyBcdTNDOUIgMS0xNTYtNAorYWx3YXlzIFx1M0M5QyAxMjQtMTIzNi00CithbHdheXMgXHUzQzlEIDEyNDUtMTIzNDYtNAorYWx3YXlzIFx1M0M5RSAxMjUtMzQtMgorYWx3YXlzIFx1M0M5RiAxMzQ1Ni00CithbHdheXMgXHUzQ0EwIDEzNC0xNDYtMgorYWx3YXlzIFx1M0NBMSAxMzQ1LTI0NTYtNQorYWx3YXlzIFx1M0NBMiAxMzUtMjM0NS01CithbHdheXMgXHUzQ0EzIDE1LTEyMzU2LTMKK2Fsd2F5cyBcdTNDQTQgMjQtMjM1Ni0zCithbHdheXMgXHUzQ0E1IDEyNC0xMzQ2LTIKK2Fsd2F5cyBcdTNDQTYgMTIzNS0xMjM2LTUKK2Fsd2F5cyBcdTNDQTcgMTUtMTQ2LTUKK2Fsd2F5cyBcdTNDQTggMTI0NS0xMjM0Ni0yCithbHdheXMgXHUzQ0E5IDEyNC0zNDUtNQorYWx3YXlzIFx1M0NBQSAxNDUtMTM1Ni0zCithbHdheXMgXHUzQ0FCIDEyMzQtMzQtMgorYWx3YXlzIFx1M0NBQyAxMy0yNDYtMworYWx3YXlzIFx1M0NBRCAxMjQtMTIzNi00CithbHdheXMgXHUzQ0FGIDE0LTEyMzYtMgorYWx3YXlzIFx1M0NCMCAxMzQ1LTEzNDU2LTIKK2Fsd2F5cyBcdTNDQjEgMTQtMzQ2LTUKK2Fsd2F5cyBcdTNDQjIgMTQ1LTM0Ni0yCithbHdheXMgXHUzQ0IzIDE0NS0zNDYtMgorYWx3YXlzIFx1M0NCNCAxLTEyMzQ2LTUKK2Fsd2F5cyBcdTNDQjUgMTUtMjQ2LTMKK2Fsd2F5cyBcdTNDQjYgMTQtMTI1Ni01CithbHdheXMgXHUzQ0I3IDE0NS0xMjM2LTUKK2Fsd2F5cyBcdTNDQjggMTUtMTYtMworYWx3YXlzIFx1M0NCOSAxMy0xNi00CithbHdheXMgXHUzQ0JBIDEzLTE2LTMKK2Fsd2F5cyBcdTNDQkIgMTM0NS0xNi01CithbHdheXMgXHUzQ0JDIDE2LTUKK2Fsd2F5cyBcdTNDQkQgMTM0NS0yMzQ1LTUKK2Fsd2F5cyBcdTNDQkUgMTI1Ni00CithbHdheXMgXHUzQ0JGIDQ1Ni00CithbHdheXMgXHUzQ0MwIDEzLTI1LTUKK2Fsd2F5cyBcdTNDQzEgMTI1LTIzNDYtNQorYWx3YXlzIFx1M0NDMiAyMzQ1LTIKK2Fsd2F5cyBcdTNDQzMgMjQ1LTEyNDYtNQorYWx3YXlzIFx1M0NDNCAxNS0yMzQ1LTIKK2Fsd2F5cyBcdTNDQzUgMTQtMjM0LTIKK2Fsd2F5cyBcdTNDQzYgMTI0LTEyMzU2LTQKK2Fsd2F5cyBcdTNDQzcgMzQtNQorYWx3YXlzIFx1M0NDOCAxMjM0LTM1Ni01CithbHdheXMgXHUzQ0NBIDE1LTE2LTUKK2Fsd2F5cyBcdTNDQ0IgMjQ1LTIzNC0zCithbHdheXMgXHUzQ0NDIDIzNDU2LTMKK2Fsd2F5cyBcdTNDQ0QgMTM1LTM0LTUKK2Fsd2F5cyBcdTNDQ0UgMTM1LTIzNDUtNQorYWx3YXlzIFx1M0NDRiAyNC0xNTYtNQorYWx3YXlzIFx1M0NEMCAxMi0zNDUtMgorYWx3YXlzIFx1M0NEMSAxNi01CithbHdheXMgXHUzQ0QyIDEyMzQ1LTM0NS00CithbHdheXMgXHUzQ0QzIDIzNC01CithbHdheXMgXHUzQ0Q0IDE0NS0xMjQ2LTUKK2Fsd2F5cyBcdTNDRDUgMTQtMTIzNi0yCithbHdheXMgXHUzQ0Q2IDE2LTMKK2Fsd2F5cyBcdTNDRDcgMTItMjQ1Ni01CithbHdheXMgXHUzQ0Q4IDEyLTEyMzQ2LTMKK2Fsd2F5cyBcdTNDRDkgMTMtNDUtMworYWx3YXlzIFx1M0NEQSAxNS0xMjU2LTUKK2Fsd2F5cyBcdTNDREIgMjM0LTIKK2Fsd2F5cyBcdTNDREMgMTUtMjM0LTMKK2Fsd2F5cyBcdTNDREQgMTIzLTQ1Ni0zCithbHdheXMgXHUzQ0RFIDEyLTEyMzQ2LTMKK2Fsd2F5cyBcdTNDREYgMTMtMTIzNDYtMworYWx3YXlzIFx1M0NFMCAxMjQtMzQ1LTUKK2Fsd2F5cyBcdTNDRTEgMjUtMworYWx3YXlzIFx1M0NFMiAyNDUtMjQ2LTIKK2Fsd2F5cyBcdTNDRTQgMjQtMzQtMgorYWx3YXlzIFx1M0NFNSAxNC0xMjM0Ni01CithbHdheXMgXHUzQ0U2IDE1LTM0Ni01CithbHdheXMgXHUzQ0U3IDEyNDUtMjM0Ni01CithbHdheXMgXHUzQ0U4IDEyNS0zNDUtMgorYWx3YXlzIFx1M0NFOSAxMjQtMTIzNi0zCithbHdheXMgXHUzQ0VBIDEyMzQtMTYtNQorYWx3YXlzIFx1M0NFQiAxMjQtMzQ1LTUKK2Fsd2F5cyBcdTNDRUMgMTUtNDUtMgorYWx3YXlzIFx1M0NFRCAxNS0yMzQ1LTIKK2Fsd2F5cyBcdTNDRUUgMTM0NS0yNDYtNQorYWx3YXlzIFx1M0NGMCAxMy0xMjM1Ni0zCithbHdheXMgXHUzQ0YzIDEyMy0yMzQ2LTUKK2Fsd2F5cyBcdTNDRjQgMTM0LTE2LTUKK2Fsd2F5cyBcdTNDRjUgMTMtMTYtNQorYWx3YXlzIFx1M0NGNiAxMzQ1LTEyMzU2LTQKK2Fsd2F5cyBcdTNDRjcgMTIzNS0zNC0zCithbHdheXMgXHUzQ0Y4IDEyMzUtMzUtMworYWx3YXlzIFx1M0NGOSA0NTYtNAorYWx3YXlzIFx1M0NGQSAyMzQtMgorYWx3YXlzIFx1M0NGQiAxMjUtMjM0Ni0yCithbHdheXMgXHUzQ0ZDIDEzNS0xNi01CithbHdheXMgXHUzQ0ZEIDEzNC0xNi0yCithbHdheXMgXHUzQ0ZFIDI0NS00Ni0zCithbHdheXMgXHUzQ0ZGIDE1LTM0Ni01CithbHdheXMgXHUzRDAwIDEyMzQ1LTEyMzYtNQorYWx3YXlzIFx1M0QwMSAxNi01CithbHdheXMgXHUzRDAyIDEyNC0xMjM2LTMKK2Fsd2F5cyBcdTNEMDMgMTQtMzU2LTUKK2Fsd2F5cyBcdTNEMDQgMTIzNDYtNAorYWx3YXlzIFx1M0QwNSAxNS0yNDYtMworYWx3YXlzIFx1M0QwNiAxMy0xNDU2LTUKK2Fsd2F5cyBcdTNEMDcgMjQtMjM0Ni01CithbHdheXMgXHUzRDA4IDE0NTYtNQorYWx3YXlzIFx1M0QwOSAxMy0xNi00CithbHdheXMgXHUzRDBBIDQ1LTMKK2Fsd2F5cyBcdTNEMEIgMTUtMzQtNQorYWx3YXlzIFx1M0QwRSAxMzQ1LTI0NTYtNQorYWx3YXlzIFx1M0QwRiA0NTYtNAorYWx3YXlzIFx1M0QxMCAxMzQtMjM0NS01CithbHdheXMgXHUzRDExIDE1LTM0LTUKK2Fsd2F5cyBcdTNEMTIgMTYtNQorYWx3YXlzIFx1M0QxMyAyNC0yNDU2LTMKK2Fsd2F5cyBcdTNEMTQgMTUtMjM0Ni01CithbHdheXMgXHUzRDE1IDEzLTE2LTIKK2Fsd2F5cyBcdTNEMTYgMTIzNC0xMjYtNQorYWx3YXlzIFx1M0QxNyAyMzQtMworYWx3YXlzIFx1M0QxOCAxMzQtMTQ2LTUKK2Fsd2F5cyBcdTNEMTkgMS0zNDUtNAorYWx3YXlzIFx1M0QxQSAxNS0xMjQ2LTUKK2Fsd2F5cyBcdTNEMUIgMS0xNTYtNQorYWx3YXlzIFx1M0QxQyAxMzUtMjM0NS01CithbHdheXMgXHUzRDFEIDE0LTE2LTIKK2Fsd2F5cyBcdTNEMUUgMTI0LTE0Ni0zCithbHdheXMgXHUzRDIwIDEyMzUtMTIzNi0yCithbHdheXMgXHUzRDIxIDE1LTQ2LTMKK2Fsd2F5cyBcdTNEMjUgMjQ1LTI0Ni01CithbHdheXMgXHUzRDI2IDEzLTEyMzQ2LTMKK2Fsd2F5cyBcdTNEMjcgMTUtMTYtMgorYWx3YXlzIFx1M0QyOCAxLTEzNi01CithbHdheXMgXHUzRDI5IDIzNS0zCithbHdheXMgXHUzRDJBIDEzNDUtMzQ2LTUKK2Fsd2F5cyBcdTNEMkIgMTMtMjU2LTUKK2Fsd2F5cyBcdTNEMkMgMTUtMzQ2LTUKK2Fsd2F5cyBcdTNEMkQgMjQ2LTQKK2Fsd2F5cyBcdTNEMkUgMTUtMzQ2LTUKK2Fsd2F5cyBcdTNEMkYgMS0xNTYtMworYWx3YXlzIFx1M0QzMCAxMzQ1LTEzNTYtMgorYWx3YXlzIFx1M0QzMSAyNC0xMzYtMworYWx3YXlzIFx1M0QzMiAxNS0xNTYtMworYWx3YXlzIFx1M0QzMyAxMzQtMTM1Ni00CithbHdheXMgXHUzRDM0IDEtMTIzNi01CithbHdheXMgXHUzRDM1IDEzNC0xNi01CithbHdheXMgXHUzRDM2IDI0NS0yMzYtNQorYWx3YXlzIFx1M0QzNyAxNDUtMTIzNi0zCithbHdheXMgXHUzRDM4IDI0LTEyMzYtNAorYWx3YXlzIFx1M0QzOSAxMzQtMTYtMgorYWx3YXlzIFx1M0QzQiAyNC0zNC01CithbHdheXMgXHUzRDNDIDE1LTM0LTUKK2Fsd2F5cyBcdTNEM0QgMTUtMzQ2LTUKK2Fsd2F5cyBcdTNEM0UgMTM1LTEyNi0yCithbHdheXMgXHUzRDNGIDE0NS0xMzQ1Ni00CithbHdheXMgXHUzRDQwIDEyNS0zNC0yCithbHdheXMgXHUzRDQxIDEyMzUtNDU2LTMKK2Fsd2F5cyBcdTNENDIgMjQtMzQtNQorYWx3YXlzIFx1M0Q0MyAyNC0yMzQ2LTIKK2Fsd2F5cyBcdTNENDQgMTIzNS0xMjM2LTUKK2Fsd2F5cyBcdTNENDUgMTI0LTEyMzYtNQorYWx3YXlzIFx1M0Q0NiAxMjM1LTE0Ni01CithbHdheXMgXHUzRDRBIDEzNDUtMzQ1LTUKK2Fsd2F5cyBcdTNENEIgMTM0LTE2LTUKK2Fsd2F5cyBcdTNENEMgMTUtMjU2LTIKK2Fsd2F5cyBcdTNENEQgMTM0LTEzNi01CithbHdheXMgXHUzRDRFIDEzLTIzNDUtNQorYWx3YXlzIFx1M0Q0RiAyNDUtMTI0Ni00CithbHdheXMgXHUzRDUwIDI0NS0yMzYtNQorYWx3YXlzIFx1M0Q1MSAxMjM1LTIzNDYtNQorYWx3YXlzIFx1M0Q1MiAxMzUtMTYtNQorYWx3YXlzIFx1M0Q1MyAyNC0xNTYtMgorYWx3YXlzIFx1M0Q1NCAxMi0yMzQ2LTQKK2Fsd2F5cyBcdTNENTUgMjQtMTM2LTUKK2Fsd2F5cyBcdTNENTYgMTM0NS0xMjU2LTUKK2Fsd2F5cyBcdTNENTcgMTIzNC0xMzQ1Ni0yCithbHdheXMgXHUzRDU4IDEzNC0xMjM2LTUKK2Fsd2F5cyBcdTNENTkgMjQ1LTEzNDU2LTMKK2Fsd2F5cyBcdTNENUQgMTYtNQorYWx3YXlzIFx1M0Q1RSAxMi0xMjM1Ni0yCithbHdheXMgXHUzRDVGIDEyNDYtMworYWx3YXlzIFx1M0Q2MCAxMjMtMzQtMworYWx3YXlzIFx1M0Q2MSAxMzUtMTQ2LTIKK2Fsd2F5cyBcdTNENjIgMTQtMzU2LTIKK2Fsd2F5cyBcdTNENjMgMTIzLTIzNDYtNAorYWx3YXlzIFx1M0Q2NCAyNC0zNDUtNQorYWx3YXlzIFx1M0Q2NSAxMzQtMTYtNQorYWx3YXlzIFx1M0Q2NiAxNS0xMjQ2LTQKK2Fsd2F5cyBcdTNENjcgMTMtMjM0Ni0yCithbHdheXMgXHUzRDY4IDEzNS0xMjYtNQorYWx3YXlzIFx1M0Q2OSAxNi01CithbHdheXMgXHUzRDZBIDE1LTIzNDUtMgorYWx3YXlzIFx1M0Q2QiAxMzQ1LTE2LTUKK2Fsd2F5cyBcdTNENkMgMTM0NTYtMgorYWx3YXlzIFx1M0Q2RCAxLTM0LTQKK2Fsd2F5cyBcdTNENkUgMTItMTIzNDU2LTIKK2Fsd2F5cyBcdTNENkYgMTIzNDUtMTM1Ni0yCithbHdheXMgXHUzRDcwIDE1LTEyNTYtNQorYWx3YXlzIFx1M0Q3MSAxMjM0LTI0Ni0zCithbHdheXMgXHUzRDcyIDM0LTQKK2Fsd2F5cyBcdTNENzMgMTQtMjQ2LTIKK2Fsd2F5cyBcdTNENzQgMjQ1LTEzNDYtMgorYWx3YXlzIFx1M0Q3NSAxMjUtMTIzNTYtNQorYWx3YXlzIFx1M0Q3NiAxMjUtMjUtMworYWx3YXlzIFx1M0Q3NyAxMzUtMjM0NS01CithbHdheXMgXHUzRDc4IDIzNi01CithbHdheXMgXHUzRDc5IDEzNC0xMjYtNQorYWx3YXlzIFx1M0Q3QSAxMjM0LTI0NTYtNQorYWx3YXlzIFx1M0Q3QiAxNS0yMzQtMworYWx3YXlzIFx1M0Q3RCAxNC0zNTYtNAorYWx3YXlzIFx1M0Q3RSAyNDUtMTM0NTYtNQorYWx3YXlzIFx1M0Q3RiAxNS0yNDYtNQorYWx3YXlzIFx1M0Q4MCAxMy0yNDYtMworYWx3YXlzIFx1M0Q4MSAxMy0yNS0yCithbHdheXMgXHUzRDg0IDIzNDUtMgorYWx3YXlzIFx1M0Q4NSAxNS0yMzYtMgorYWx3YXlzIFx1M0Q4NiAxMi0zNC0yCithbHdheXMgXHUzRDg3IDEyMzUtMTM1Ni0yCithbHdheXMgXHUzRDg4IDEzNDU2LTIKK2Fsd2F5cyBcdTNEODkgMTUtMTYtMworYWx3YXlzIFx1M0Q4QyAxNC0yMzQ1LTIKK2Fsd2F5cyBcdTNEOEQgMTUtMjM0NS00CithbHdheXMgXHUzRDhFIDEyMzUtMTI0NTYtMgorYWx3YXlzIFx1M0Q5MSAxNC0yMzQ1LTUKK2Fsd2F5cyBcdTNEOTIgMjQtMTIzNi00CithbHdheXMgXHUzRDkzIDI0NS0xMzQ2LTIKK2Fsd2F5cyBcdTNEOTQgMTM1LTI0NTYtNQorYWx3YXlzIFx1M0Q5NSAxMy0yMzQ1LTQKK2Fsd2F5cyBcdTNEOTYgMjQtMzQtNQorYWx3YXlzIFx1M0Q5NyAxMjM0NS0xMjM2LTUKK2Fsd2F5cyBcdTNEOTggMTQ1LTIzNDUtNQorYWx3YXlzIFx1M0Q5QSAxMzUtMzQ1LTUKK2Fsd2F5cyBcdTNEOUIgMTI1Ni0yCithbHdheXMgXHUzRDlDIDQ1LTMKK2Fsd2F5cyBcdTNEOUUgMTM0NS0xMzQ2LTQKK2Fsd2F5cyBcdTNEOUYgMTQtMzU2LTQKK2Fsd2F5cyBcdTNEQTAgMTYtNQorYWx3YXlzIFx1M0RBMSAxMjM1LTI1LTQKK2Fsd2F5cyBcdTNEQTMgMTItMTIzNi0yCithbHdheXMgXHUzREE0IDEyLTE0Ni00CithbHdheXMgXHUzREE1IDEyLTEyMzYtMgorYWx3YXlzIFx1M0RBNiAxMy0xNDU2LTUKK2Fsd2F5cyBcdTNEQTcgMTM0NS0xMzYtNQorYWx3YXlzIFx1M0RBOCAxMjM0LTE2LTMKK2Fsd2F5cyBcdTNEQTkgMjQtMTM2LTQKK2Fsd2F5cyBcdTNEQUEgMTIzNC0xNi0zCithbHdheXMgXHUzREFCIDE0LTI0Ni01CithbHdheXMgXHUzREFDIDEzNC0xMjYtNQorYWx3YXlzIFx1M0RBRCAyMzQtNAorYWx3YXlzIFx1M0RBRSAyNC0xNDYtMworYWx3YXlzIFx1M0RBRiAxNC0yMzQtNQorYWx3YXlzIFx1M0RCMCAxMjM1LTEyMzYtMgorYWx3YXlzIFx1M0RCMiAyMzUtNQorYWx3YXlzIFx1M0RCMyAxMy0xNDU2LTUKK2Fsd2F5cyBcdTNEQjQgMTItMTU2LTQKK2Fsd2F5cyBcdTNEQjUgMTI0NS0xMzYtNQorYWx3YXlzIFx1M0RCNiAxMzQ1LTEyMzQ2LTIKK2Fsd2F5cyBcdTNEQjcgMTUtMTI1Ni0zCithbHdheXMgXHUzREI4IDE1LTM0Ni0yCithbHdheXMgXHUzREI5IDEyMzUtMTIzNDYtNQorYWx3YXlzIFx1M0RCQSAxMjQtMjM0NS01CithbHdheXMgXHUzREJCIDEyMzQ1LTEzNTYtMworYWx3YXlzIFx1M0RCQyAyNDU2LTMKK2Fsd2F5cyBcdTNEQkUgMTM1LTI0Ni0zCithbHdheXMgXHUzREJGIDEzNS0xMjYtMgorYWx3YXlzIFx1M0RDMCAyNDUtMjM1LTIKK2Fsd2F5cyBcdTNEQzEgMTQ1LTEyMzQ2LTUKK2Fsd2F5cyBcdTNEQzIgMjQtMzQtNQorYWx3YXlzIFx1M0RDMyAxMi0xMjQ2LTQKK2Fsd2F5cyBcdTNEQzQgMTIzNS0xMjQ2LTQKK2Fsd2F5cyBcdTNEQzUgMTItMzQ1LTIKK2Fsd2F5cyBcdTNEQzYgMTIzNDUtMzQtNQorYWx3YXlzIFx1M0RDNyAxMjM1LTEyNDYtMworYWx3YXlzIFx1M0RDOCAyMzQ2LTUKK2Fsd2F5cyBcdTNEQzkgMTI0Ni01CithbHdheXMgXHUzRENBIDEyMzQ1LTEzNi0yCithbHdheXMgXHUzRENCIDEyNC0xMjM2LTIKK2Fsd2F5cyBcdTNEQ0QgMTQtMTIzNDU2LTIKK2Fsd2F5cyBcdTNEQ0UgMTIzNS0yMzQ2LTUKK2Fsd2F5cyBcdTNEQ0YgMjM1LTQKK2Fsd2F5cyBcdTNERDAgMTIzNS0xMjQ2LTQKK2Fsd2F5cyBcdTNERDEgMjM0NS0zCithbHdheXMgXHUzREQyIDEyNTYtMgorYWx3YXlzIFx1M0REMyAxMjUtMTIzNDYtNAorYWx3YXlzIFx1M0RENCAyMzQ1LTUKK2Fsd2F5cyBcdTNERDUgMjQ1LTIzNC0yCithbHdheXMgXHUzREQ2IDEtMTQ2LTUKK2Fsd2F5cyBcdTNERDcgMTMtMTM0NTYtNAorYWx3YXlzIFx1M0REOCAxMjQtMjQ1Ni0yCithbHdheXMgXHUzREQ5IDEzLTIzNDUtMworYWx3YXlzIFx1M0REQSAxMjQtMTM0NTYtMgorYWx3YXlzIFx1M0REQiAxMzUtMTQ2LTMKK2Fsd2F5cyBcdTNEREYgMTI0LTEyNDYtMworYWx3YXlzIFx1M0RFMCAxNC0xNDU2LTIKK2Fsd2F5cyBcdTNERTEgMTMtMjM1LTQKK2Fsd2F5cyBcdTNERTIgMS0zNDUtNAorYWx3YXlzIFx1M0RFMyAxNS0xMzQ1Ni0zCithbHdheXMgXHUzREU0IDEyMzUtMzQtNQorYWx3YXlzIFx1M0RFNSAxLTEzNTYtMworYWx3YXlzIFx1M0RFNiAxNS0xMjU2LTUKK2Fsd2F5cyBcdTNERTggMTIzNDUtMTM1Ni0zCithbHdheXMgXHUzREU5IDE1LTE2LTMKK2Fsd2F5cyBcdTNERUEgMTMtNDUtNAorYWx3YXlzIFx1M0RFQiAyNDUtMTM0NTYtNAorYWx3YXlzIFx1M0RFQyAxMzQtMTI2LTUKK2Fsd2F5cyBcdTNERUQgMTIzNDUtMTM1Ni0zCithbHdheXMgXHUzREVFIDEyNS0xNDYtMworYWx3YXlzIFx1M0RFRiAxMjM0LTEzNTYtNAorYWx3YXlzIFx1M0RGMCAxNC0xNi0yCithbHdheXMgXHUzREYzIDIzNDUtNQorYWx3YXlzIFx1M0RGNCAxNC0xNi01CithbHdheXMgXHUzREY1IDEzNC0xMjYtNQorYWx3YXlzIFx1M0RGNiAxMzUtMTYtNQorYWx3YXlzIFx1M0RGNyAxMy00NS00CithbHdheXMgXHUzREY4IDM0Ni01CithbHdheXMgXHUzREY5IDI0LTE0Ni01CithbHdheXMgXHUzREZCIDM0LTIKK2Fsd2F5cyBcdTNERkMgMjM0NS01CithbHdheXMgXHUzREZFIDEzLTIzNi0yCithbHdheXMgXHUzREZGIDE1LTIzNDUtMworYWx3YXlzIFx1M0UwMCAxMjQtMjQ1Ni0yCithbHdheXMgXHUzRTAxIDEyMzUtMTIzNi01CithbHdheXMgXHUzRTAyIDE1LTEyNDYtNQorYWx3YXlzIFx1M0UwMyAxNDUtMjM0NS00CithbHdheXMgXHUzRTA0IDEzLTE2LTUKK2Fsd2F5cyBcdTNFMDUgMTMtMzQ2LTIKK2Fsd2F5cyBcdTNFMDYgMTIzLTE0Ni00CithbHdheXMgXHUzRTA3IDEyNS0xMjQ1Ni00CithbHdheXMgXHUzRTA4IDEzLTI0Ni0zCithbHdheXMgXHUzRTA5IDE1LTM0Ni01CithbHdheXMgXHUzRTBBIDE0LTM0NS01CithbHdheXMgXHUzRTBCIDEyMzQ1LTEyMzYtMgorYWx3YXlzIFx1M0UwQyAxMjM1LTI1LTUKK2Fsd2F5cyBcdTNFMEQgMTUtMTYtNQorYWx3YXlzIFx1M0UwRSAxMzQ1LTM0Ni01CithbHdheXMgXHUzRTBGIDEzNC0xNi0yCithbHdheXMgXHUzRTEwIDEyNDUtMTIzNi0yCithbHdheXMgXHUzRTExIDI0NS0xMjQ1Ni01CithbHdheXMgXHUzRTEyIDE0NTYtMgorYWx3YXlzIFx1M0UxMyAxMzQtMTYtNQorYWx3YXlzIFx1M0UxNCAxMjMtMTIzNi01CithbHdheXMgXHUzRTE1IDEzLTIzNi0yCithbHdheXMgXHUzRTE2IDI0NS0xMjU2LTMKK2Fsd2F5cyBcdTNFMTcgMTI0LTEyMzQ2LTIKK2Fsd2F5cyBcdTNFMTggMTI0NTYtNQorYWx3YXlzIFx1M0UxOSAxLTIzNDYtMworYWx3YXlzIFx1M0UxQSAxNC0xNi00CithbHdheXMgXHUzRTFCIDI0LTE0Ni0yCithbHdheXMgXHUzRTFDIDEyMy0xMjM0Ni01CithbHdheXMgXHUzRTFEIDEyMy0xMjM2LTQKK2Fsd2F5cyBcdTNFMUUgMS0yMzQ2LTIKK2Fsd2F5cyBcdTNFMUYgMS0xNTYtMworYWx3YXlzIFx1M0UyMCAxNDUtMjQ2LTUKK2Fsd2F5cyBcdTNFMjEgMjQtMzQ1LTMKK2Fsd2F5cyBcdTNFMjIgMTM1LTM1Ni01CithbHdheXMgXHUzRTIzIDM0Ni01CithbHdheXMgXHUzRTI0IDEzNS0yMzQ1LTUKK2Fsd2F5cyBcdTNFMjUgMTItMTIzNi0yCithbHdheXMgXHUzRTI2IDEyMzUtMzQtNQorYWx3YXlzIFx1M0UyNyAxNDU2LTIKK2Fsd2F5cyBcdTNFMjggMTMtMjM0LTMKK2Fsd2F5cyBcdTNFMjkgMTIzNi0yCithbHdheXMgXHUzRTJBIDEyLTEyMzQ1Ni0yCithbHdheXMgXHUzRTJCIDEzLTIzNDUtMworYWx3YXlzIFx1M0UyQyAxMzUtMzU2LTUKK2Fsd2F5cyBcdTNFMkQgMTM1LTM0NS0zCithbHdheXMgXHUzRTJFIDEyMzQ1LTEzNi0yCithbHdheXMgXHUzRTJGIDEyMy0yMzQ2LTMKK2Fsd2F5cyBcdTNFMzAgMTI0LTI1LTIKK2Fsd2F5cyBcdTNFMzEgMTI0LTI1LTIKK2Fsd2F5cyBcdTNFMzIgMTI1LTI1LTIKK2Fsd2F5cyBcdTNFMzMgMTQtMTM0NTYtMgorYWx3YXlzIFx1M0UzNSAxMy0xMjQ2LTQKK2Fsd2F5cyBcdTNFMzYgMjM0NS0zCithbHdheXMgXHUzRTM3IDI0LTE1Ni01CithbHdheXMgXHUzRTM4IDEyMzUtMTIzNTYtNAorYWx3YXlzIFx1M0UzOSAxNC0zNDYtNQorYWx3YXlzIFx1M0UzQSAyNC0zNDUtMworYWx3YXlzIFx1M0UzQiAxNS0xNTYtNQorYWx3YXlzIFx1M0UzQyAxMjM0NS0xMzU2LTMKK2Fsd2F5cyBcdTNFM0QgMTM1LTM1Ni01CithbHdheXMgXHUzRTNFIDEyNDUtMTM2LTUKK2Fsd2F5cyBcdTNFM0YgMTQ1LTM0LTIKK2Fsd2F5cyBcdTNFNDAgMTI1LTE1Ni01CithbHdheXMgXHUzRTQxIDE0LTQ2LTIKK2Fsd2F5cyBcdTNFNDIgMjQ1LTIzNDUtNAorYWx3YXlzIFx1M0U0MyAxMjM0NS0zNTYtNQorYWx3YXlzIFx1M0U0NCAxMy0xNi01CithbHdheXMgXHUzRTQ1IDEyNS0xMjM0Ni00CithbHdheXMgXHUzRTQ2IDEyMzUtMTI0Ni0zCithbHdheXMgXHUzRTQ3IDEyMzUtMjM0Ni0yCithbHdheXMgXHUzRTQ4IDE0LTE2LTIKK2Fsd2F5cyBcdTNFNDkgNDUtMgorYWx3YXlzIFx1M0U0QSAyMzYtNQorYWx3YXlzIFx1M0U0QiAxNS0yMzQtMworYWx3YXlzIFx1M0U0QyAxMi0xMjM2LTQKK2Fsd2F5cyBcdTNFNEQgMTQ1LTE2LTIKK2Fsd2F5cyBcdTNFNEUgMTQtMzU2LTIKK2Fsd2F5cyBcdTNFNEYgMTMtMTQ1Ni00CithbHdheXMgXHUzRTUwIDEyLTEyMzQ2LTIKK2Fsd2F5cyBcdTNFNTEgMTUtMTU2LTUKK2Fsd2F5cyBcdTNFNTIgMTIzNC0zNC0yCithbHdheXMgXHUzRTUzIDI0Ni00CithbHdheXMgXHUzRTU0IDEzLTQ2LTMKK2Fsd2F5cyBcdTNFNTUgMTIzNS0xMjQ1Ni0zCithbHdheXMgXHUzRTU2IDEyMzUtMTI0NTYtNQorYWx3YXlzIFx1M0U1NyAxMjQtMTQ2LTMKK2Fsd2F5cyBcdTNFNTggMTI0NS0zNC01CithbHdheXMgXHUzRTU5IDEyMzQ2LTQKK2Fsd2F5cyBcdTNFNUEgMTIzNDYtNAorYWx3YXlzIFx1M0U1QiAxMjQ1LTE0Ni0yCithbHdheXMgXHUzRTVDIDE0NTYtMgorYWx3YXlzIFx1M0U1RCAyNC0xNTYtNQorYWx3YXlzIFx1M0U1RSAxNDU2LTIKK2Fsd2F5cyBcdTNFNUYgMTMtMjM2LTIKK2Fsd2F5cyBcdTNFNjAgMTI0LTEyMzQ1Ni0yCithbHdheXMgXHUzRTYxIDEzLTQ1LTUKK2Fsd2F5cyBcdTNFNjIgMTMtMjM0NTYtMworYWx3YXlzIFx1M0U2MyAxLTEyMzQ2LTMKK2Fsd2F5cyBcdTNFNjQgMjQ1LTM0Ni01CithbHdheXMgXHUzRTY1IDEtMzQtNQorYWx3YXlzIFx1M0U2NiAxNDUtMjQ2LTMKK2Fsd2F5cyBcdTNFNjcgNDYtMworYWx3YXlzIFx1M0U2OCAyMzQtNQorYWx3YXlzIFx1M0U2QSAyNC0xMjM2LTMKK2Fsd2F5cyBcdTNFNkIgMTYtMgorYWx3YXlzIFx1M0U2QyAyNC0xNTYtNAorYWx3YXlzIFx1M0U2RCAxNS0xNTYtNQorYWx3YXlzIFx1M0U2RSAxMzQtMTI2LTUKK2Fsd2F5cyBcdTNFNkYgMTUtMjM0LTMKK2Fsd2F5cyBcdTNFNzEgMjQ1LTIzNi01CithbHdheXMgXHUzRTcyIDE1LTI0Ni01CithbHdheXMgXHUzRTczIDM0LTIKK2Fsd2F5cyBcdTNFNzQgMTMtMTM1Ni0zCithbHdheXMgXHUzRTc1IDEzNDU2LTQKK2Fsd2F5cyBcdTNFNzYgMjM0NS0yCithbHdheXMgXHUzRTc3IDE1LTE2LTMKK2Fsd2F5cyBcdTNFNzggMTM0LTE0Ni01CithbHdheXMgXHUzRTc5IDEzLTEzNTYtMworYWx3YXlzIFx1M0U3QSAxMjQtMzQ1LTUKK2Fsd2F5cyBcdTNFN0IgMjUtMworYWx3YXlzIFx1M0U3QyAxMy0xMjU2LTIKK2Fsd2F5cyBcdTNFN0QgMTItMTIzNi00CithbHdheXMgXHUzRTdFIDEyMzQtMjQ2LTQKK2Fsd2F5cyBcdTNFN0YgMS0xNDYtNQorYWx3YXlzIFx1M0U4MCAxMzQ1LTE0Ni0yCithbHdheXMgXHUzRTgxIDEzNDUtMTQ2LTQKK2Fsd2F5cyBcdTNFODIgMTMtMTIzNi00CithbHdheXMgXHUzRTgzIDEzLTEyMzU2LTQKK2Fsd2F5cyBcdTNFODQgMTI1Ni00CithbHdheXMgXHUzRTg1IDEyMzUtMTIzNTYtMgorYWx3YXlzIFx1M0U4NyAxNS0xNTYtMworYWx3YXlzIFx1M0U4OCAxMi0xNTYtMworYWx3YXlzIFx1M0U4OSAxMjM1LTM0LTUKK2Fsd2F5cyBcdTNFOEEgNDYtNQorYWx3YXlzIFx1M0U4QiAxMjM0Ni0zCithbHdheXMgXHUzRThDIDE1LTIzNDUtNQorYWx3YXlzIFx1M0U4RCAxMzUtMjM0NS0zCithbHdheXMgXHUzRThFIDIzNS0yCithbHdheXMgXHUzRThGIDE0LTEyMzU2LTIKK2Fsd2F5cyBcdTNFOTAgMTQtMTQ2LTQKK2Fsd2F5cyBcdTNFOTEgMjQtMTIzNi0zCithbHdheXMgXHUzRTkyIDE1LTI0Ni0zCithbHdheXMgXHUzRTkzIDEzLTE2LTMKK2Fsd2F5cyBcdTNFOTQgMTIzNS0yNDU2LTUKK2Fsd2F5cyBcdTNFOTUgMTIzNDUtMTIzNi0yCithbHdheXMgXHUzRTk2IDEyMzUtMTIzNi01CithbHdheXMgXHUzRTk3IDEyLTEyMzYtMworYWx3YXlzIFx1M0U5OCAxLTEyMzYtNQorYWx3YXlzIFx1M0U5QSAxMjQtMzQ1LTUKK2Fsd2F5cyBcdTNFOUIgMS0zNC01CithbHdheXMgXHUzRTlDIDEzNDUtMTIzNDYtMgorYWx3YXlzIFx1M0U5RCAxNS0yMzQ1LTUKK2Fsd2F5cyBcdTNFOUUgMTI1Ni0yCithbHdheXMgXHUzRTlGIDEtMjUtMgorYWx3YXlzIFx1M0VBMCAyMzQtNQorYWx3YXlzIFx1M0VBMSAxNC0xNi01CithbHdheXMgXHUzRUEyIDEyMzUtMjUtMworYWx3YXlzIFx1M0VBMyAxNS0xNi0zCithbHdheXMgXHUzRUE0IDE1LTIzNDUtMworYWx3YXlzIFx1M0VBNSAxMi0xMjM2LTIKK2Fsd2F5cyBcdTNFQTYgMTQtMjM0NS0yCithbHdheXMgXHUzRUE3IDE1LTI0Ni0zCithbHdheXMgXHUzRUE4IDE1LTE1Ni0zCithbHdheXMgXHUzRUE5IDI0NS0yMzQtMgorYWx3YXlzIFx1M0VBQSAxMjM0LTM0LTIKK2Fsd2F5cyBcdTNFQUIgMjQ1LTIzNC0yCithbHdheXMgXHUzRUFDIDEzLTEyMzQ2LTQKK2Fsd2F5cyBcdTNFQUQgMTI1LTE1Ni00CithbHdheXMgXHUzRUFFIDEyNTYtMgorYWx3YXlzIFx1M0VCMCAyNC0xNTYtMworYWx3YXlzIFx1M0VCMSAxMjQ1LTEzNTYtMgorYWx3YXlzIFx1M0VCMiAxMzQ1LTIzNC00CithbHdheXMgXHUzRUIzIDEzNC0zNTYtMgorYWx3YXlzIFx1M0VCNCAxMzUtMzQ1LTMKK2Fsd2F5cyBcdTNFQjUgMTMtMjM0LTQKK2Fsd2F5cyBcdTNFQjcgMTUtMTI1Ni01CithbHdheXMgXHUzRUI4IDEyMzQtMTM0NTYtMgorYWx3YXlzIFx1M0VCOSAxMzUtMjM0NS01CithbHdheXMgXHUzRUJBIDEzNC0xNDYtNQorYWx3YXlzIFx1M0VCRCAxMjM0LTM1Ni0zCithbHdheXMgXHUzRUJGIDE2LTIKK2Fsd2F5cyBcdTNFQzAgMTI1Ni0yCithbHdheXMgXHUzRUMxIDEzLTEyNDYtMworYWx3YXlzIFx1M0VDMiAxMjM0LTEzNDU2LTIKK2Fsd2F5cyBcdTNFQzMgMjQ1LTEyNTYtMworYWx3YXlzIFx1M0VDNCAxMzUtMTQ2LTQKK2Fsd2F5cyBcdTNFQzUgMTIzNS0xMjQ2LTUKK2Fsd2F5cyBcdTNFQzYgMTUtNDUtNQorYWx3YXlzIFx1M0VDNyAyNDUtNDUtMgorYWx3YXlzIFx1M0VDOCAxMy0xMjM1Ni00CithbHdheXMgXHUzRUM5IDEzNS0zNC01CithbHdheXMgXHUzRUNBIDEzNC0xMzYtMgorYWx3YXlzIFx1M0VDQiAxNC0zNDUtNQorYWx3YXlzIFx1M0VDQyAxMjQtMzQtMgorYWx3YXlzIFx1M0VDRCAzNC0yCithbHdheXMgXHUzRUNFIDE1LTIzNDYtNQorYWx3YXlzIFx1M0VDRiAxNC0xMzQ1Ni0yCithbHdheXMgXHUzRUQxIDEzLTE2LTUKK2Fsd2F5cyBcdTNFRDIgMTMtMjU2LTUKK2Fsd2F5cyBcdTNFRDMgMTI1LTEyMzU2LTMKK2Fsd2F5cyBcdTNFRDQgMTQ1LTI1LTQKK2Fsd2F5cyBcdTNFRDUgMTMtMjM2LTIKK2Fsd2F5cyBcdTNFRDYgMTQ1LTI0NTYtNQorYWx3YXlzIFx1M0VENyAxMzUtMzU2LTUKK2Fsd2F5cyBcdTNFRDkgMTI1Ni01CithbHdheXMgXHUzRURBIDEzNS0xMzU2LTMKK2Fsd2F5cyBcdTNFREIgMTItMTM0Ni01CithbHdheXMgXHUzRUREIDE0LTM0NS01CithbHdheXMgXHUzRURFIDEzNS0xMjM2LTMKK2Fsd2F5cyBcdTNFREYgMTUtMTI0Ni0yCithbHdheXMgXHUzRUUwIDEyNC0zNC0yCithbHdheXMgXHUzRUUxIDE0NS0zNDYtMgorYWx3YXlzIFx1M0VFMiAyNC0xNTYtMworYWx3YXlzIFx1M0VFMyAyNC0xMzYtNQorYWx3YXlzIFx1M0VFNyAxNDUtMjUtNQorYWx3YXlzIFx1M0VFOCAxMjQ1Ni01CithbHdheXMgXHUzRUVBIDE1LTEyNDYtNQorYWx3YXlzIFx1M0VFQiAxMzUtMTYtNQorYWx3YXlzIFx1M0VFQyAxMjQtMzQtMgorYWx3YXlzIFx1M0VFRCAxNS0yMzQ2LTUKK2Fsd2F5cyBcdTNFRUUgMjQ1LTEyMzYtNQorYWx3YXlzIFx1M0VFRiAxMjQtMzQtMgorYWx3YXlzIFx1M0VGMCAxLTE1Ni01CithbHdheXMgXHUzRUYxIDEyMzQ1LTEzNTYtMgorYWx3YXlzIFx1M0VGMiAxNC0yMzQtMgorYWx3YXlzIFx1M0VGNSAxLTEyMzYtNQorYWx3YXlzIFx1M0VGNiAxMzUtMTYtNAorYWx3YXlzIFx1M0VGNyAxMy0xNi0yCithbHdheXMgXHUzRUY4IDEyNS0xMzYtMworYWx3YXlzIFx1M0VGOSAxNS00NS0zCithbHdheXMgXHUzRUZBIDE0LTE2LTUKK2Fsd2F5cyBcdTNFRkIgMTQ1LTEyNDYtNQorYWx3YXlzIFx1M0VGQyAxMjQtMTIzNi0yCithbHdheXMgXHUzRUZEIDE1LTEyNDYtNQorYWx3YXlzIFx1M0VGRSAyMzUtMworYWx3YXlzIFx1M0VGRiAyNC0zNC00CithbHdheXMgXHUzRjAxIDE2LTIKK2Fsd2F5cyBcdTNGMDIgMTI1Ni0yCithbHdheXMgXHUzRjA0IDEzLTE2LTMKK2Fsd2F5cyBcdTNGMDUgMTIzLTQ1Ni01CithbHdheXMgXHUzRjA2IDEzNDU2LTIKK2Fsd2F5cyBcdTNGMDcgMTI0Ni01CithbHdheXMgXHUzRjA4IDE0LTI1LTIKK2Fsd2F5cyBcdTNGMDkgMS0xMzYtNQorYWx3YXlzIFx1M0YwQSAxMjQtMTIzNDU2LTIKK2Fsd2F5cyBcdTNGMEIgMTMtMzQtMworYWx3YXlzIFx1M0YwQyAxMjU2LTQKK2Fsd2F5cyBcdTNGMEQgMTQtMzU2LTQKK2Fsd2F5cyBcdTNGMEUgMTM1LTEyNi0yCithbHdheXMgXHUzRjBGIDEzNDUtMzU2LTQKK2Fsd2F5cyBcdTNGMTAgMTIzNC0yMzQ1LTIKK2Fsd2F5cyBcdTNGMTEgMTQtMjM0NS01CithbHdheXMgXHUzRjEyIDEyNC0xMzQ2LTQKK2Fsd2F5cyBcdTNGMTMgMTQtMjM0NS0yCithbHdheXMgXHUzRjE0IDEyMzQ1Ni0zCithbHdheXMgXHUzRjE1IDE0NS0xMzQ2LTMKK2Fsd2F5cyBcdTNGMTYgMTQtMTYtNQorYWx3YXlzIFx1M0YxNyAxMjQtMTM0NTYtMgorYWx3YXlzIFx1M0YxOCAzNS00CithbHdheXMgXHUzRjE5IDEtMTIzNTYtNQorYWx3YXlzIFx1M0YxQSAxMy0xMzQ2LTMKK2Fsd2F5cyBcdTNGMUIgMTUtMTM0NTYtMgorYWx3YXlzIFx1M0YxQyAxMzQ2LTUKK2Fsd2F5cyBcdTNGMUQgMTI0NTYtNAorYWx3YXlzIFx1M0YxRSAxMjM0LTEzNTYtNQorYWx3YXlzIFx1M0YxRiAxMzUtMTI2LTIKK2Fsd2F5cyBcdTNGMjAgMTI0LTI1LTIKK2Fsd2F5cyBcdTNGMjEgMjQtMzQtMworYWx3YXlzIFx1M0YyMiAxNi0yCithbHdheXMgXHUzRjIzIDEzNS0xMjYtMgorYWx3YXlzIFx1M0YyNCAyNDUtMzQ2LTUKK2Fsd2F5cyBcdTNGMjUgMTIzLTE0Ni00CithbHdheXMgXHUzRjI2IDEzLTEyMzQ2LTQKK2Fsd2F5cyBcdTNGMjcgMTI0LTEyMzQ2LTIKK2Fsd2F5cyBcdTNGMjggMTIzNS0xMjM2LTIKK2Fsd2F5cyBcdTNGMjkgMTItMTM1Ni0yCithbHdheXMgXHUzRjJBIDEzLTM0Ni0yCithbHdheXMgXHUzRjJCIDEyMzUtMTI0NTYtNQorYWx3YXlzIFx1M0YyQyAxNS0xMzQ1Ni01CithbHdheXMgXHUzRjJEIDE0NS0yMzQ1LTUKK2Fsd2F5cyBcdTNGMkUgMjQ1LTE2LTUKK2Fsd2F5cyBcdTNGMkYgMTQ1LTEyMzQ2LTUKK2Fsd2F5cyBcdTNGMzAgMTIzNC0xNi0yCithbHdheXMgXHUzRjMxIDEyNDUtMTI0NTYtNAorYWx3YXlzIFx1M0YzMiAxNC0zNDYtNQorYWx3YXlzIFx1M0YzMyAyNC0xMzU2LTQKK2Fsd2F5cyBcdTNGMzQgMTIzNTYtNAorYWx3YXlzIFx1M0YzNSAxNDUtMTYtNQorYWx3YXlzIFx1M0YzNiAxMjU2LTIKK2Fsd2F5cyBcdTNGMzcgMTItMTI0NTYtMgorYWx3YXlzIFx1M0YzOCAxMjQ1LTEyMzQ2LTIKK2Fsd2F5cyBcdTNGMzkgMTIzLTEzNDYtMworYWx3YXlzIFx1M0YzQSAxMjQtMTM0Ni0yCithbHdheXMgXHUzRjNCIDI0NS0xMjM0Ni0yCithbHdheXMgXHUzRjNDIDEyMzQtMjQ2LTIKK2Fsd2F5cyBcdTNGM0QgMjQtNDU2LTQKK2Fsd2F5cyBcdTNGM0UgMTQtMzQtNQorYWx3YXlzIFx1M0YzRiAxMjQtMTIzNDYtMgorYWx3YXlzIFx1M0Y0MCAxLTEzNTYtNQorYWx3YXlzIFx1M0Y0MSAxMy0yMzQ2LTIKK2Fsd2F5cyBcdTNGNDIgMTUtMzQ1LTUKK2Fsd2F5cyBcdTNGNDMgMTIzNC0xMjM2LTMKK2Fsd2F5cyBcdTNGNDQgMTUtMTU2LTMKK2Fsd2F5cyBcdTNGNDUgMTQ1LTEzNTYtMworYWx3YXlzIFx1M0Y0NiAxNDUtMTM0Ni0zCithbHdheXMgXHUzRjQ3IDEyMzUtMzQtMgorYWx3YXlzIFx1M0Y0OCAxNi01CithbHdheXMgXHUzRjQ5IDE1LTIzNDUtNQorYWx3YXlzIFx1M0Y0QSAxNS0zNDYtNQorYWx3YXlzIFx1M0Y0QiAxNC0yNS0yCithbHdheXMgXHUzRjRDIDE0LTIzNC01CithbHdheXMgXHUzRjREIDEzLTEyMzYtMworYWx3YXlzIFx1M0Y0RSAxNS0yMzQ1LTMKK2Fsd2F5cyBcdTNGNEYgMTMtMTIzNi01CithbHdheXMgXHUzRjUwIDE1LTIzNDUtMworYWx3YXlzIFx1M0Y1MSAxMjQtMTIzNi0yCithbHdheXMgXHUzRjUyIDI0LTEzNTYtMworYWx3YXlzIFx1M0Y1MyAyNC0xMzU2LTMKK2Fsd2F5cyBcdTNGNTUgMjM0LTIKK2Fsd2F5cyBcdTNGNTYgMTM0NS0xMjM2LTIKK2Fsd2F5cyBcdTNGNTcgMTM0LTM0LTQKK2Fsd2F5cyBcdTNGNTggMTMtMTM0Ni00CithbHdheXMgXHUzRjU5IDEzLTI1Ni01CithbHdheXMgXHUzRjVBIDEyLTE1Ni01CithbHdheXMgXHUzRjVCIDEzLTEyMzU2LTMKK2Fsd2F5cyBcdTNGNUMgMTI0NTYtNAorYWx3YXlzIFx1M0Y1RCAxNC0xNi01CithbHdheXMgXHUzRjVFIDE0LTIzNC0yCithbHdheXMgXHUzRjVGIDE0LTM0Ni01CithbHdheXMgXHUzRjYwIDE1LTIzNDU2LTIKK2Fsd2F5cyBcdTNGNjEgMTM1LTM1Ni0zCithbHdheXMgXHUzRjYyIDEyMzYtNAorYWx3YXlzIFx1M0Y2MyAxMjU2LTUKK2Fsd2F5cyBcdTNGNjQgMTMtMTI1Ni0yCithbHdheXMgXHUzRjY1IDEyNDUtMTIzNTYtMgorYWx3YXlzIFx1M0Y2NiAxNS0yNTYtMgorYWx3YXlzIFx1M0Y2NyAxMjUtMTU2LTMKK2Fsd2F5cyBcdTNGNjggMjQ1LTI1LTIKK2Fsd2F5cyBcdTNGNjkgMjQ1LTEyMzYtNQorYWx3YXlzIFx1M0Y2QSAxMjUtMTM1Ni00CithbHdheXMgXHUzRjZCIDIzNS0zCithbHdheXMgXHUzRjZDIDEzNS0xNi01CithbHdheXMgXHUzRjZEIDEyNDUtMTI0NTYtMgorYWx3YXlzIFx1M0Y2RSAxNS0xMzQ1Ni0zCithbHdheXMgXHUzRjZGIDI0NS0xNi0yCithbHdheXMgXHUzRjcwIDI0LTM0LTMKK2Fsd2F5cyBcdTNGNzEgMTMtMjQ2LTQKK2Fsd2F5cyBcdTNGNzIgMTMtMjQ2LTQKK2Fsd2F5cyBcdTNGNzMgMTUtMTI1Ni0zCithbHdheXMgXHUzRjc0IDEtMTM0Ni01CithbHdheXMgXHUzRjc1IDEtNDU2LTMKK2Fsd2F5cyBcdTNGNzcgMjQtMTI0Ni01CithbHdheXMgXHUzRjc4IDEyLTEzNi0yCithbHdheXMgXHUzRjc5IDEyMzQ1LTEyMzYtNQorYWx3YXlzIFx1M0Y3QSAxMy0xNi0yCithbHdheXMgXHUzRjdCIDEtMTU2LTMKK2Fsd2F5cyBcdTNGN0QgMTMtMzQtNQorYWx3YXlzIFx1M0Y3RSAzNC01CithbHdheXMgXHUzRjdGIDEzLTI1LTMKK2Fsd2F5cyBcdTNGODAgMjQ1LTM0Ni01CithbHdheXMgXHUzRjgxIDI0LTM0LTUKK2Fsd2F5cyBcdTNGODIgMTIzNS0yNDU2LTMKK2Fsd2F5cyBcdTNGODMgMTI0LTI1LTIKK2Fsd2F5cyBcdTNGODQgMTQ1LTM0LTIKK2Fsd2F5cyBcdTNGODUgMTI1LTE1Ni00CithbHdheXMgXHUzRjg2IDE0NS0xMjM2LTMKK2Fsd2F5cyBcdTNGODcgMTM0LTM0LTUKK2Fsd2F5cyBcdTNGODggMTIzNDUtMzQtNQorYWx3YXlzIFx1M0Y4OSAxNC0xMzQ1Ni0yCithbHdheXMgXHUzRjhBIDEzLTE2LTIKK2Fsd2F5cyBcdTNGOEIgMTUtMjM0LTUKK2Fsd2F5cyBcdTNGOEMgMTUtMjM0NS00CithbHdheXMgXHUzRjhEIDEzNDUtMjQ1Ni0yCithbHdheXMgXHUzRjhFIDE1LTIzNDU2LTMKK2Fsd2F5cyBcdTNGOEYgMTMtMzQ2LTUKK2Fsd2F5cyBcdTNGOTAgMTQtMTYtNQorYWx3YXlzIFx1M0Y5MSAxNDUtMzQ1LTIKK2Fsd2F5cyBcdTNGOTIgMTI0NS0zNC0yCithbHdheXMgXHUzRjkzIDQ1LTMKK2Fsd2F5cyBcdTNGOTQgMTQtMTI1Ni00CithbHdheXMgXHUzRjk1IDI0LTEzNi0zCithbHdheXMgXHUzRjk2IDE0LTE2LTQKK2Fsd2F5cyBcdTNGOTcgMTQtNDYtNQorYWx3YXlzIFx1M0Y5OCAxMy0xMzU2LTQKK2Fsd2F5cyBcdTNGOTkgMTUtMTQ1Ni01CithbHdheXMgXHUzRjlBIDE1LTM0Ni0zCithbHdheXMgXHUzRjlCIDI0NS0xNDU2LTQKK2Fsd2F5cyBcdTNGOUMgMjQ1LTM0Ni01CithbHdheXMgXHUzRjlEIDEyLTIzNDYtNQorYWx3YXlzIFx1M0Y5RSAyMzQtMgorYWx3YXlzIFx1M0Y5RiAxMzUtMzQtNQorYWx3YXlzIFx1M0ZBMCAxMjMtNDU2LTIKK2Fsd2F5cyBcdTNGQTEgMjQ1LTIzNi01CithbHdheXMgXHUzRkEyIDE0LTI0NTYtNQorYWx3YXlzIFx1M0ZBMyAyNDUtMTQ1Ni0zCithbHdheXMgXHUzRkE0IDI0NS00Ni0zCithbHdheXMgXHUzRkE1IDEyLTM0LTUKK2Fsd2F5cyBcdTNGQTYgMTIzNC0zNTYtMworYWx3YXlzIFx1M0ZBNyAxMjMtMjM0Ni01CithbHdheXMgXHUzRkE4IDI0NS0xNi00CithbHdheXMgXHUzRkE5IDEzLTIzNTYtMworYWx3YXlzIFx1M0ZBQSAyNC0xMzU2LTQKK2Fsd2F5cyBcdTNGQUIgMTIzNC0yMzQ1LTMKK2Fsd2F5cyBcdTNGQUMgMTMtMzQ2LTMKK2Fsd2F5cyBcdTNGQUQgMS0xMjM1Ni01CithbHdheXMgXHUzRkFFIDEyMzUtNDU2LTIKK2Fsd2F5cyBcdTNGQUYgMTI0LTEyNDYtMgorYWx3YXlzIFx1M0ZCMCAxMjM1LTM0LTIKK2Fsd2F5cyBcdTNGQjEgMTM1LTM1Ni01CithbHdheXMgXHUzRkI0IDEtMzQ1LTMKK2Fsd2F5cyBcdTNGQjUgMTMtMTYtNQorYWx3YXlzIFx1M0ZCNiAxMy0zNC00CithbHdheXMgXHUzRkI3IDE1LTE2LTMKK2Fsd2F5cyBcdTNGQjggMTMtMTQ2LTQKK2Fsd2F5cyBcdTNGQjkgMTItMjQ1Ni0yCithbHdheXMgXHUzRkJBIDEzNC0zNDUtNQorYWx3YXlzIFx1M0ZCQiAxMi0zNC0yCithbHdheXMgXHUzRkJDIDEyNC0xMjQ2LTQKK2Fsd2F5cyBcdTNGQkQgMS0xMjQ2LTUKK2Fsd2F5cyBcdTNGQkUgMTUtMjM0NS0zCithbHdheXMgXHUzRkJGIDE0LTEzNDYtMgorYWx3YXlzIFx1M0ZDMCAxMzUtMTIzNi0zCithbHdheXMgXHUzRkMxIDE1LTI0Ni0zIAorYWx3YXlzIFx1M0ZDMiAxLTEzNTYtMworYWx3YXlzIFx1M0ZDMyAxNDUtMjQ1Ni01CithbHdheXMgXHUzRkM0IDI0NTYtNQorYWx3YXlzIFx1M0ZDNSAxNS0yMzQ1LTQKK2Fsd2F5cyBcdTNGQzYgMTMtMjM0Ni0zCithbHdheXMgXHUzRkM3IDE1LTE2LTIKK2Fsd2F5cyBcdTNGQzggMjM1LTMKK2Fsd2F5cyBcdTNGQzkgMTI0LTEyNDYtMgorYWx3YXlzIFx1M0ZDQSAyNDUtMTIzNi00CithbHdheXMgXHUzRkNCIDE1LTE0Ni0zCithbHdheXMgXHUzRkNDIDE1LTIzNDUtMworYWx3YXlzIFx1M0ZDRCAxMy0zNDYtNQorYWx3YXlzIFx1M0ZDRSAxMjM0NS0xMzYtNQorYWx3YXlzIFx1M0ZDRiAyNDUtMjU2LTIKK2Fsd2F5cyBcdTNGRDEgMjM2LTUKK2Fsd2F5cyBcdTNGRDIgMTQ1LTE0Ni00CithbHdheXMgXHUzRkQzIDEzLTIzNDU2LTIKK2Fsd2F5cyBcdTNGRDQgMTQtMzU2LTQKK2Fsd2F5cyBcdTNGRDUgMjM0NS0yCithbHdheXMgXHUzRkQ2IDE0LTM0LTIKK2Fsd2F5cyBcdTNGRDcgMTI0LTEyNDYtMgorYWx3YXlzIFx1M0ZEOCAxMzQ1Ni0yCithbHdheXMgXHUzRkQ5IDEzNS0zNTYtNQorYWx3YXlzIFx1M0ZEQSAxNC0yNS01CithbHdheXMgXHUzRkRCIDE0LTE2LTUKK2Fsd2F5cyBcdTNGREMgMTM1LTM0Ni00CithbHdheXMgXHUzRkREIDE1LTQ2LTMKK2Fsd2F5cyBcdTNGREUgMTM0LTE0Ni01CithbHdheXMgXHUzRkRGIDEzNS0xMjYtMgorYWx3YXlzIFx1M0ZFMCAxMjM1LTQ1Ni01CithbHdheXMgXHUzRkUxIDE0NS0xMjM1Ni0zCithbHdheXMgXHUzRkUyIDI0Ni01CithbHdheXMgXHUzRkUzIDEyMzUtMjM0Ni0zCithbHdheXMgXHUzRkU0IDEyLTEyMzQ1Ni00CithbHdheXMgXHUzRkU1IDEyMzUtMzQtMgorYWx3YXlzIFx1M0ZFNiAxMzQ1LTEzNDU2LTUKK2Fsd2F5cyBcdTNGRTcgMTItMTIzNTYtMgorYWx3YXlzIFx1M0ZFOCAxNC0xNi01CithbHdheXMgXHUzRkU5IDEyNC0xMzQ2LTQKK2Fsd2F5cyBcdTNGRUEgMTIzNS0xMjQ1Ni0yCithbHdheXMgXHUzRkVCIDEzNS0xNi01CithbHdheXMgXHUzRkVDIDEzNS0zNDUtMworYWx3YXlzIFx1M0ZFRCAxMi0yMzQ2LTUKK2Fsd2F5cyBcdTNGRUUgNDYtNQorYWx3YXlzIFx1M0ZFRiAxNDUtMzQ1LTIKK2Fsd2F5cyBcdTNGRjAgMTQ2LTIKK2Fsd2F5cyBcdTNGRjEgMTUtMjM2LTIKK2Fsd2F5cyBcdTNGRjIgMTYtMworYWx3YXlzIFx1M0ZGMyAxMjUtMTU2LTMKK2Fsd2F5cyBcdTNGRjQgMTQ1LTM0NS0zCithbHdheXMgXHUzRkY1IDEyNDUtMTIzNi00CithbHdheXMgXHUzRkY2IDEzNS0xMzQ2LTMKK2Fsd2F5cyBcdTNGRjcgMTItMTI0Ni01CithbHdheXMgXHUzRkY4IDEyNDU2LTQKK2Fsd2F5cyBcdTNGRjkgMTI0LTM0NS01CithbHdheXMgXHUzRkZBIDEzNS0xMjYtMworYWx3YXlzIFx1M0ZGQiAxMy0xMjM2LTMKK2Fsd2F5cyBcdTNGRkMgMjM0NS0yCithbHdheXMgXHUzRkZEIDE1LTE2LTMKK2Fsd2F5cyBcdTNGRkUgMS0zNC01CithbHdheXMgXHUzRkZGIDIzNDU2LTQKK2Fsd2F5cyBcdTQwMDAgMTIzNDUtMTIzNi01CithbHdheXMgXHU0MDAxIDIzNC01CithbHdheXMgXHU0MDAyIDEyMzYtMworYWx3YXlzIFx1NDAwMyAxMjQtMTI0Ni0yCithbHdheXMgXHU0MDA0IDEzNC0xMzU2LTIKK2Fsd2F5cyBcdTQwMDUgMjQtMjM0Ni01CithbHdheXMgXHU0MDA2IDEzLTE0NTYtNQorYWx3YXlzIFx1NDAwNyAxMy0zNC00CithbHdheXMgXHU0MDA4IDEzLTE2LTUKK2Fsd2F5cyBcdTQwMDkgMjQ1LTI0Ni0yCithbHdheXMgXHU0MDBBIDEzLTI0Ni00CithbHdheXMgXHU0MDBCIDIzNDUtMgorYWx3YXlzIFx1NDAwQyAxNS0xNi01CithbHdheXMgXHU0MDBEIDEyMy0xMjM2LTUKK2Fsd2F5cyBcdTQwMEUgMTM0LTIzNDUtNAorYWx3YXlzIFx1NDAwRiAxNS00NS01CithbHdheXMgXHU0MDEwIDI0LTEyMzYtMworYWx3YXlzIFx1NDAxMSAyNS01CithbHdheXMgXHU0MDEyIDI0NS0yMzQ1LTMKK2Fsd2F5cyBcdTQwMTMgMTIzNS0xMjQ1Ni01CithbHdheXMgXHU0MDE0IDEyNDUtMTM2LTUKK2Fsd2F5cyBcdTQwMTUgMS0xMzYtNQorYWx3YXlzIFx1NDAxNiAxMjQtMjM0NS0zCithbHdheXMgXHU0MDE3IDEzLTIzNi0yCithbHdheXMgXHU0MDE4IDE1LTE2LTMKK2Fsd2F5cyBcdTQwMTkgMjQ1LTE2LTUKK2Fsd2F5cyBcdTQwMUEgMTM0Ni0yCithbHdheXMgXHU0MDFCIDEzNC0zNTYtNQorYWx3YXlzIFx1NDAxQyAxMzQtMzU2LTUKK2Fsd2F5cyBcdTQwMUUgMTMtMjQ2LTQKK2Fsd2F5cyBcdTQwMUYgMTIzNDUtMTIzNi0yCithbHdheXMgXHU0MDIwIDI0NS0xMjU2LTIKK2Fsd2F5cyBcdTQwMjEgMS0xMjM2LTMKK2Fsd2F5cyBcdTQwMjIgMjQtMTIzNDU2LTUKK2Fsd2F5cyBcdTQwMjMgMTM1LTE2LTUKK2Fsd2F5cyBcdTQwMjQgMTM0LTEyMzU2LTUKK2Fsd2F5cyBcdTQwMjUgMjQtMjUtNQorYWx3YXlzIFx1NDAyNiAxMy0zNC00CithbHdheXMgXHU0MDI3IDEyMzUtMTIzNDYtNAorYWx3YXlzIFx1NDAyOCAxMjM1LTM1LTUKK2Fsd2F5cyBcdTQwMjkgMTQtMjUtNQorYWx3YXlzIFx1NDAyQSAxMjM1LTEzNDYtMgorYWx3YXlzIFx1NDAyQiAxMy0yMzQ1Ni0yCithbHdheXMgXHU0MDJDIDI0NS00NS0yCithbHdheXMgXHU0MDJEIDEzLTI0NTYtMworYWx3YXlzIFx1NDAyRSAxMjM1LTQ1Ni0zCithbHdheXMgXHU0MDJGIDEzNS0zNC00CithbHdheXMgXHU0MDMwIDEzLTM0LTQKK2Fsd2F5cyBcdTQwMzEgMTIzNDUtMTM1Ni0zCithbHdheXMgXHU0MDMyIDEzNC0zNC01CithbHdheXMgXHU0MDMzIDE0LTM0NS01CithbHdheXMgXHU0MDM0IDEzNDU2LTQKK2Fsd2F5cyBcdTQwMzUgMjQtMTU2LTMKK2Fsd2F5cyBcdTQwMzYgMTQtNDYtNQorYWx3YXlzIFx1NDAzNyAxMy0zNDYtMgorYWx3YXlzIFx1NDAzOCAxNDUtMTYtNQorYWx3YXlzIFx1NDAzOSAxMy0zNDYtMgorYWx3YXlzIFx1NDAzQSAxMjQtMTQ2LTMKK2Fsd2F5cyBcdTQwM0IgMTIzNC0xMzQ1Ni01CithbHdheXMgXHU0MDNDIDEyNDUtMTM2LTUKK2Fsd2F5cyBcdTQwM0QgMjM0NS0yCithbHdheXMgXHU0MDNFIDE0NS0zNC00CithbHdheXMgXHU0MDNGIDEtMjM0Ni01CithbHdheXMgXHU0MDQwIDE0NS0xMzQ1Ni00CithbHdheXMgXHU0MDQxIDE0LTEzNDYtNAorYWx3YXlzIFx1NDA0MiAxNS0yMzQ1LTUKK2Fsd2F5cyBcdTQwNDMgMTM1LTI0Ni0zCithbHdheXMgXHU0MDQ0IDE1LTEzNDU2LTUKK2Fsd2F5cyBcdTQwNDUgMTM0LTEzNTYtNQorYWx3YXlzIFx1NDA0NiAxMjM2LTQKK2Fsd2F5cyBcdTQwNDcgMTM0LTE2LTUKK2Fsd2F5cyBcdTQwNDggMjQ1LTE2LTUKK2Fsd2F5cyBcdTQwNDkgMjQ1LTE2LTUKK2Fsd2F5cyBcdTQwNEEgMjUtNQorYWx3YXlzIFx1NDA0QiAxNS0zNDYtMgorYWx3YXlzIFx1NDA0QyAxMjU2LTUKK2Fsd2F5cyBcdTQwNEQgMjQ1LTIzNDU2LTUKK2Fsd2F5cyBcdTQwNEUgMTItMTM1Ni0yCithbHdheXMgXHU0MDRGIDI0Ni00CithbHdheXMgXHU0MDUwIDEzNDU2LTUKK2Fsd2F5cyBcdTQwNTEgMjQtMTU2LTUKK2Fsd2F5cyBcdTQwNTIgMTMtMTYtMgorYWx3YXlzIFx1NDA1MyAxMy0zNDYtNQorYWx3YXlzIFx1NDA1NCAxMjM1LTEyMzYtNQorYWx3YXlzIFx1NDA1NSAxMzQtMTQ1Ni0yCithbHdheXMgXHU0MDU2IDE0LTEyMzU2LTIKK2Fsd2F5cyBcdTQwNTcgMTIzLTI0NTYtNAorYWx3YXlzIFx1NDA1OCAyNDYtMgorYWx3YXlzIFx1NDA1OSAyMzQ1LTUKK2Fsd2F5cyBcdTQwNUEgMTUtMTIzNDU2LTQKK2Fsd2F5cyBcdTQwNUIgMTMtMTI0Ni01CithbHdheXMgXHU0MDVDIDEyMzUtNDU2LTQKK2Fsd2F5cyBcdTQwNUQgMTM0NTYtNAorYWx3YXlzIFx1NDA1RSAyNC0xMzU2LTQKK2Fsd2F5cyBcdTQwNUYgMTItMzQ1LTIKK2Fsd2F5cyBcdTQwNjAgMTQtMjM0NS0yCithbHdheXMgXHU0MDYxIDI0LTEyMzYtNAorYWx3YXlzIFx1NDA2MiAxNS00NS0yCithbHdheXMgXHU0MDYzIDEyLTEyNDU2LTIKK2Fsd2F5cyBcdTQwNjQgMTIzNS0xMjQ2LTQKK2Fsd2F5cyBcdTQwNjUgMTM0NS0xNi01CithbHdheXMgXHU0MDY2IDI0NS0xMjU2LTUKK2Fsd2F5cyBcdTQwNjcgMTM0LTI0Ni0yCithbHdheXMgXHU0MDY4IDEyMzUtMjUtNQorYWx3YXlzIFx1NDA2OSAxMjU2LTIKK2Fsd2F5cyBcdTQwNkEgMS0xMjM2LTQKK2Fsd2F5cyBcdTQwNkIgMTIzNS0zNC0yCithbHdheXMgXHU0MDZDIDI0NS0xMzU2LTIKK2Fsd2F5cyBcdTQwNkQgMTM1LTI0Ni0zCithbHdheXMgXHU0MDZFIDI0NS0yMzQ1LTIKK2Fsd2F5cyBcdTQwNkYgMTUtMTYtMworYWx3YXlzIFx1NDA3MCAxNS00Ni01CithbHdheXMgXHU0MDcxIDEyMy0xMjM1Ni0zCithbHdheXMgXHU0MDcyIDEzNC0yNDU2LTIKK2Fsd2F5cyBcdTQwNzMgMTM0LTEzNDYtNAorYWx3YXlzIFx1NDA3NCAxLTEyMzYtNAorYWx3YXlzIFx1NDA3NSAxMzUtMjM0NS00CithbHdheXMgXHU0MDc2IDEzLTE2LTMKK2Fsd2F5cyBcdTQwNzcgMTMtMjM2LTIKK2Fsd2F5cyBcdTQwNzggMTM0NS0xMjM0Ni0yCithbHdheXMgXHU0MDc5IDEzNS0xNi01CithbHdheXMgXHU0MDdBIDI0LTE1Ni01CithbHdheXMgXHU0MDdCIDI0LTI1LTUKK2Fsd2F5cyBcdTQwN0MgMTM0LTEyNi01CithbHdheXMgXHU0MDdEIDE0LTM0Ni01CithbHdheXMgXHU0MDdFIDEzNC0zNDYtNQorYWx3YXlzIFx1NDA3RiAxMzQtMTI2LTUKK2Fsd2F5cyBcdTQwODAgMTUtMTYtMworYWx3YXlzIFx1NDA4MSAxMi0xMjM2LTIKK2Fsd2F5cyBcdTQwODEgMjQtMTM2LTMKK2Fsd2F5cyBcdTQwODIgMjQ1LTEyNTYtNQorYWx3YXlzIFx1NDA4MyAxMy0yNDYtNQorYWx3YXlzIFx1NDA4NCAxMjM1LTI1LTUKK2Fsd2F5cyBcdTQwODUgMjQtMTIzNi0zCithbHdheXMgXHU0MDg2IDE1LTEyNTYtNQorYWx3YXlzIFx1NDA4NyAxMzQ1LTIzNC00CithbHdheXMgXHU0MDg4IDEyNC0xMjM0Ni0yCithbHdheXMgXHU0MDg5IDEyMzUtMTIzNTYtMgorYWx3YXlzIFx1NDA4QSAxMjU2LTUKK2Fsd2F5cyBcdTQwOEMgMTItMTIzNDYtMworYWx3YXlzIFx1NDA4RCAxMzUtMTI2LTIKK2Fsd2F5cyBcdTQwOEUgMTI1LTEyNDU2LTQKK2Fsd2F5cyBcdTQwOEYgMTQ1LTI0Ni0zCithbHdheXMgXHU0MDkwIDEtMjUtMworYWx3YXlzIFx1NDA5MSAxMy0xNi0zCithbHdheXMgXHU0MDkyIDEzLTM0Ni0yCithbHdheXMgXHU0MDkzIDEzLTEyNDYtMworYWx3YXlzIFx1NDA5NCAxNS0xMzQ1Ni01CithbHdheXMgXHU0MDk1IDEyMzUtMTI0Ni01CithbHdheXMgXHU0MDk2IDI0LTE1Ni0yCithbHdheXMgXHU0MDk3IDEyMy0zNC0zCithbHdheXMgXHU0MDk4IDEyLTI0NTYtMworYWx3YXlzIFx1NDA5OSAxNDUtMTI0Ni0zCithbHdheXMgXHU0MDlBIDI0Ni0yCithbHdheXMgXHU0MDlCIDEyNTYtMgorYWx3YXlzIFx1NDA5QyAxMzUtMTM0Ni01CithbHdheXMgXHU0MDlEIDEtMjM0Ni0yCithbHdheXMgXHU0MDlFIDEtMjM0Ni01CithbHdheXMgXHU0MDlGIDEzLTIzNDU2LTMKK2Fsd2F5cyBcdTQwQTAgMjQtMTU2LTQKK2Fsd2F5cyBcdTQwQTEgMTQ1LTE2LTQKK2Fsd2F5cyBcdTQwQTIgMTQ1LTEyMzQ2LTQKK2Fsd2F5cyBcdTQwQTMgMjQ1LTE1Ni0zCithbHdheXMgXHU0MEE0IDEyMzQ1LTM0LTUKK2Fsd2F5cyBcdTQwQTUgMTM0LTE0NTYtMgorYWx3YXlzIFx1NDBBNiAxLTEzNi00CithbHdheXMgXHU0MEE3IDEtMTM2LTQKK2Fsd2F5cyBcdTQwQTkgMjM0NS01CithbHdheXMgXHU0MEFBIDE0NS0yNDYtNQorYWx3YXlzIFx1NDBBQiAxMjM1LTEyMzQ2LTIKK2Fsd2F5cyBcdTQwQUMgMTMtMTIzNDYtNAorYWx3YXlzIFx1NDBBRCAyNDUtMjQ2LTMKK2Fsd2F5cyBcdTQwQUUgMTQtMjM2LTUKK2Fsd2F5cyBcdTQwQUYgMTMtMjM1Ni01CithbHdheXMgXHU0MEIwIDE0LTM0NS01CithbHdheXMgXHU0MEIxIDEyNDUtMTI0Ni01CithbHdheXMgXHU0MEIyIDEyMzQ1LTM0NS00CithbHdheXMgXHU0MEIzIDEyLTM1LTQKK2Fsd2F5cyBcdTQwQjQgMjM0NS0yCithbHdheXMgXHU0MEI1IDEzLTEyMzQ2LTMKK2Fsd2F5cyBcdTQwQjYgMTMtMzQ2LTIKK2Fsd2F5cyBcdTQwQjcgMTMtMjM1Ni0zCithbHdheXMgXHU0MEI4IDEzLTI1LTIKK2Fsd2F5cyBcdTQwQjkgMTUtMjUtNAorYWx3YXlzIFx1NDBCQSAxMjMtMjM0Ni0zCithbHdheXMgXHU0MEJCIDEtMTM1Ni01CithbHdheXMgXHU0MEJDIDEzNDUtMzQ2LTUKK2Fsd2F5cyBcdTQwQkQgMTQ1LTI0Ni01CithbHdheXMgXHU0MEJFIDE0LTI0NTYtNAorYWx3YXlzIFx1NDBCRiAxMjQtMzQ1LTUKK2Fsd2F5cyBcdTQwQzAgMjQ1LTEyNDYtNQorYWx3YXlzIFx1NDBDMSAyMzQ1Ni0zCithbHdheXMgXHU0MEMyIDEzLTEyMzQ1Ni00CithbHdheXMgXHU0MEM1IDE0NS0xNi0zCithbHdheXMgXHU0MEM2IDEzLTE2LTMKK2Fsd2F5cyBcdTQwQzcgMTM0LTIzNDUtMgorYWx3YXlzIFx1NDBDOCAxMy0zNDYtMworYWx3YXlzIFx1NDBDOSAxMzQtMTQ1Ni0yCithbHdheXMgXHU0MENBIDEzLTEyNTYtNAorYWx3YXlzIFx1NDBDQiAxMjU2LTIKK2Fsd2F5cyBcdTQwQ0MgMS0xMzYtMworYWx3YXlzIFx1NDBDRCAxLTEyNDYtNQorYWx3YXlzIFx1NDBDRSAxLTM0NS01CithbHdheXMgXHU0MENGIDE1LTEzNDU2LTMKK2Fsd2F5cyBcdTQwRDEgMTM1LTEyMzYtMworYWx3YXlzIFx1NDBEMiAxMjM1LTIzNDYtMgorYWx3YXlzIFx1NDBEMyAxMy0xMjM1Ni01CithbHdheXMgXHU0MEQ0IDEyMzUtMTIzNDYtMgorYWx3YXlzIFx1NDBENSAxNC0yNS01CithbHdheXMgXHU0MEQ2IDM0LTUKK2Fsd2F5cyBcdTQwRDcgMTM1LTEyNi0zCithbHdheXMgXHU0MEQ4IDEyMy0xMzU2LTMKK2Fsd2F5cyBcdTQwRDkgMTQtMzQtNQorYWx3YXlzIFx1NDBEQSAyNDUtMzQtNQorYWx3YXlzIFx1NDBEQiAxNC0yMzQ1LTIKK2Fsd2F5cyBcdTQwREMgMTYtMworYWx3YXlzIFx1NDBERCAyNDUtMjQ2LTUKK2Fsd2F5cyBcdTQwREUgMjQtMzQtMgorYWx3YXlzIFx1NDBFMCAxNS00NS01CithbHdheXMgXHU0MEUxIDI0NS0xNDU2LTIKK2Fsd2F5cyBcdTQwRTIgMjQ1LTE0NTYtMworYWx3YXlzIFx1NDBFMyAxMjM1LTEyNDYtNAorYWx3YXlzIFx1NDBFNCAxNS0zNC01CithbHdheXMgXHU0MEU1IDEyLTQ1Ni0yCithbHdheXMgXHU0MEU2IDE0NS0xMjM0NTYtMworYWx3YXlzIFx1NDBFNyAxNC0xMjM0Ni0yCithbHdheXMgXHU0MEU5IDEzNDUtMTQ2LTIKK2Fsd2F5cyBcdTQwRUEgMTI0LTEyMzYtMgorYWx3YXlzIFx1NDBFQiAxNDUtMTIzNi00CithbHdheXMgXHU0MEVDIDEyMy0xMjQ2LTQKK2Fsd2F5cyBcdTQwRUQgMTMtMTIzNi00CithbHdheXMgXHU0MEVFIDE0NS0zNDUtMgorYWx3YXlzIFx1NDBFRiAxNC0xNi01CithbHdheXMgXHU0MEYwIDI0NS0zNDUtMworYWx3YXlzIFx1NDBGMSAxMy0xNDU2LTMKK2Fsd2F5cyBcdTQwRjIgMTIzNC0xMjM2LTIKK2Fsd2F5cyBcdTQwRjMgMTQtMzQ1LTUKK2Fsd2F5cyBcdTQwRjQgMS0zNC0zCithbHdheXMgXHU0MEY1IDEzNDUtMjQ2LTQKK2Fsd2F5cyBcdTQwRjYgMTIzNS0yMzU2LTIKK2Fsd2F5cyBcdTQwRjcgMTM0NTYtMgorYWx3YXlzIFx1NDBGOCAxMy0xNDU2LTMKK2Fsd2F5cyBcdTQwRjkgMTQtMTIzNi01CithbHdheXMgXHU0MEZBIDEzNC0xMjYtMgorYWx3YXlzIFx1NDBGQiAxMzUtMzQ1LTUKK2Fsd2F5cyBcdTQwRkMgMTItMzQtMworYWx3YXlzIFx1NDBGRCAxMy0xMjQ2LTQKK2Fsd2F5cyBcdTQwRkUgMTM1LTE2LTQKK2Fsd2F5cyBcdTQwRkYgMTIzNDUtMzQtMworYWx3YXlzIFx1NDEwMCAxMjM1LTI1LTUKK2Fsd2F5cyBcdTQxMDEgMTYtNQorYWx3YXlzIFx1NDEwMiAxNC0yMzQtNQorYWx3YXlzIFx1NDEwMyA0Ni0zCithbHdheXMgXHU0MTA0IDE0NTYtMworYWx3YXlzIFx1NDEwNSAxMy00NS01CithbHdheXMgXHU0MTA2IDEyMzUtMjUtMgorYWx3YXlzIFx1NDEwNyAxMi0xMzU2LTIKK2Fsd2F5cyBcdTQxMDggMTQ1LTEyMzU2LTUKK2Fsd2F5cyBcdTQxMDkgMjM0Ni0yCithbHdheXMgXHU0MTBCIDIzNDUtNAorYWx3YXlzIFx1NDEwQyAxLTEyNDYtNQorYWx3YXlzIFx1NDEwRCAxLTM0NS01CithbHdheXMgXHU0MTBFIDI0NS0xNi00CithbHdheXMgXHU0MTBGIDI0Ni0zCithbHdheXMgXHU0MTEwIDI0NS00NS01CithbHdheXMgXHU0MTExIDEyMzUtMjUtMgorYWx3YXlzIFx1NDExMiAxMjQ1LTEzNi00CithbHdheXMgXHU0MTEzIDEyMzUtNDU2LTIKK2Fsd2F5cyBcdTQxMTQgMTMtMTI1Ni00CithbHdheXMgXHU0MTE1IDI0LTIzNDYtNQorYWx3YXlzIFx1NDExNiAxMjU2LTIKK2Fsd2F5cyBcdTQxMTcgNDUtNQorYWx3YXlzIFx1NDExOCAxMjM0LTEzNTYtMgorYWx3YXlzIFx1NDExOSAxMzQtMTM0NTYtMgorYWx3YXlzIFx1NDExQSAyNDUtMTQ2LTIKK2Fsd2F5cyBcdTQxMUIgMTQtMTIzNTYtMgorYWx3YXlzIFx1NDExQyAxNC0xNi0yCithbHdheXMgXHU0MTFEIDEyLTQ1Ni0zCithbHdheXMgXHU0MTFGIDI0NS0xMjQ2LTUKK2Fsd2F5cyBcdTQxMjAgMTItMTIzNi0yCithbHdheXMgXHU0MTIxIDEyLTEyMzYtMworYWx3YXlzIFx1NDEyMiAyNDUtMTYtMgorYWx3YXlzIFx1NDEyNCAxNC0yNDU2LTUKK2Fsd2F5cyBcdTQxMjUgMTQtMTM0NTYtMgorYWx3YXlzIFx1NDEyNiAxNC0yNDYtNAorYWx3YXlzIFx1NDEyNyAxMjQ1LTEzNTYtMgorYWx3YXlzIFx1NDEyOCAxMjU2LTIKK2Fsd2F5cyBcdTQxMjkgMTYtNQorYWx3YXlzIFx1NDEyQSAxNDUtMjQ2LTQKK2Fsd2F5cyBcdTQxMkIgMjQ1LTE2LTQKK2Fsd2F5cyBcdTQxMkMgMTYtMgorYWx3YXlzIFx1NDEyRCAxMzQ1LTIzNDUtMgorYWx3YXlzIFx1NDEyRSAxMjM0NS0zNC0zCithbHdheXMgXHU0MTJGIDEzLTIzNDUtNAorYWx3YXlzIFx1NDEzMCAyMzQ1Ni0yCithbHdheXMgXHU0MTMxIDEyMzQ1LTEzNDYtMworYWx3YXlzIFx1NDEzMiAxMjQ1LTEyNDYtNQorYWx3YXlzIFx1NDEzNiAxMzUtMTYtNQorYWx3YXlzIFx1NDEzNyAyNC0xNTYtMgorYWx3YXlzIFx1NDEzOCAxMjM0LTEyNi01CithbHdheXMgXHU0MTM5IDEzNDUtMjM0NS0yCithbHdheXMgXHU0MTNBIDEtMTU2LTUKK2Fsd2F5cyBcdTQxM0IgMTItMTQ2LTIKK2Fsd2F5cyBcdTQxM0MgMTI0LTIzNDUtNAorYWx3YXlzIFx1NDEzRCAxMjQtMjM0NS00CithbHdheXMgXHU0MTNFIDEyNDUtMzQtNQorYWx3YXlzIFx1NDEzRiAxNi01CithbHdheXMgXHU0MTQwIDE0LTE2LTUKK2Fsd2F5cyBcdTQxNDEgMTIzNi01CithbHdheXMgXHU0MTQyIDEyMzUtMjM0Ni01CithbHdheXMgXHU0MTQzIDI0NS0yMzUtMgorYWx3YXlzIFx1NDE0NCAxNC0xNi01CithbHdheXMgXHU0MTQ1IDEzLTEyNDYtMworYWx3YXlzIFx1NDE0NiAxMjUtMTU2LTUKK2Fsd2F5cyBcdTQxNDcgMTUtMzQtNQorYWx3YXlzIFx1NDE0OCA0NS01CithbHdheXMgXHU0MTQ5IDIzNDU2LTUKK2Fsd2F5cyBcdTQxNEEgMTItMzQ1LTIKK2Fsd2F5cyBcdTQxNEIgMTI0NTYtNAorYWx3YXlzIFx1NDE0QyAxMy00NS0zCithbHdheXMgXHU0MTREIDEyNC0xMzQ1Ni00CithbHdheXMgXHU0MTRFIDIzNC00CithbHdheXMgXHU0MTRGIDEyNDYtNAorYWx3YXlzIFx1NDE1MCAxMy0yMzQ1LTQKK2Fsd2F5cyBcdTQxNTEgMTI0NS0xMjQ2LTIKK2Fsd2F5cyBcdTQxNTIgMTM0LTEzNDYtMgorYWx3YXlzIFx1NDE1MyAxMy0xMjU2LTQKK2Fsd2F5cyBcdTQxNTQgMTI1LTE1Ni0zCithbHdheXMgXHU0MTU1IDEzLTEyNTYtMworYWx3YXlzIFx1NDE1NiAxMjM2LTMKK2Fsd2F5cyBcdTQxNTcgMTI0NS0xMjQ2LTIKK2Fsd2F5cyBcdTQxNTggMTQtMjQ1Ni0yCithbHdheXMgXHU0MTU5IDEyMzUtMTIzNDU2LTUKK2Fsd2F5cyBcdTQxNUEgMjQ1LTQ2LTQKK2Fsd2F5cyBcdTQxNUIgMTItMTM0Ni0zCithbHdheXMgXHU0MTVDIDE0NS0yNS01CithbHdheXMgXHU0MTVEIDEyMy0xMjM0Ni0zCithbHdheXMgXHU0MTVFIDEzNDUtMjM0Ni01CithbHdheXMgXHU0MTVGIDI0LTEyMzYtMworYWx3YXlzIFx1NDE2MCAxMjQtMTYtMgorYWx3YXlzIFx1NDE2MSAxNS0xMjU2LTQKK2Fsd2F5cyBcdTQxNjIgMTMtMjM0LTUKK2Fsd2F5cyBcdTQxNjMgMTIzNS00NTYtMgorYWx3YXlzIFx1NDE2NCAyNDUtMTYtNQorYWx3YXlzIFx1NDE2NSAxMy0zNDYtMgorYWx3YXlzIFx1NDE2NiAxMzQtMTQ2LTIKK2Fsd2F5cyBcdTQxNjcgMjM0NS0zCithbHdheXMgXHU0MTY4IDE1LTQ2LTMKK2Fsd2F5cyBcdTQxNjkgMS0xNTYtNAorYWx3YXlzIFx1NDE2QSAxMjQtMTI0Ni0yCithbHdheXMgXHU0MTZCIDE0LTIzNi01CithbHdheXMgXHU0MTZDIDI0NTYtNQorYWx3YXlzIFx1NDE2RCAxMjM0LTEzNDYtMgorYWx3YXlzIFx1NDE2RSAyNDUtMTM0Ni01CithbHdheXMgXHU0MTZGIDEyNC0xMzQ2LTIKK2Fsd2F5cyBcdTQxNzAgMTM2LTQKK2Fsd2F5cyBcdTQxNzEgMTM2LTUKK2Fsd2F5cyBcdTQxNzIgMjQ1LTE2LTIKK2Fsd2F5cyBcdTQxNzMgMTItMzQtMgorYWx3YXlzIFx1NDE3NCAxNS0yNS00CithbHdheXMgXHU0MTc1IDEtMjUtMgorYWx3YXlzIFx1NDE3NiAxMzQ1LTEyMzU2LTUKK2Fsd2F5cyBcdTQxNzcgMTI0LTM0LTIKK2Fsd2F5cyBcdTQxNzggMjQtMTM2LTMKK2Fsd2F5cyBcdTQxNzkgMTQtMTIzNTYtMgorYWx3YXlzIFx1NDE3QSAxMzUtMjQ2LTMKK2Fsd2F5cyBcdTQxN0IgMTQtMTYtMgorYWx3YXlzIFx1NDE3QyAxMzQtMTIzNi01CithbHdheXMgXHU0MTdEIDEzLTM0LTQKK2Fsd2F5cyBcdTQxN0UgMjQ1LTEzNi0yCithbHdheXMgXHU0MTdGIDEyMzUtMzUtMgorYWx3YXlzIFx1NDE4MCAxMzQtMzU2LTQKK2Fsd2F5cyBcdTQxODEgMTMtMTQ2LTMKK2Fsd2F5cyBcdTQxODIgMTUtMjM0NS0yCithbHdheXMgXHU0MTgzIDE0NS0xNDYtNQorYWx3YXlzIFx1NDE4NCAxLTEyMzYtNAorYWx3YXlzIFx1NDE4NSAxMjUtMTU2LTMKK2Fsd2F5cyBcdTQxODggMS0xNTYtNQorYWx3YXlzIFx1NDE4OSAxMzUtMzQ1LTUKK2Fsd2F5cyBcdTQxOEEgMjQ1LTEyNDYtNQorYWx3YXlzIFx1NDE4QiAyNDUtMjM0LTMKK2Fsd2F5cyBcdTQxOEQgMTQtMTIzNDYtMgorYWx3YXlzIFx1NDE4RSAxNS0yMzQ1LTMKK2Fsd2F5cyBcdTQxOEYgMTIzNDUtMzU2LTUKK2Fsd2F5cyBcdTQxOTAgMTMtMjUtMgorYWx3YXlzIFx1NDE5MSAxMi0xMzU2LTIKK2Fsd2F5cyBcdTQxOTIgMTMtMjM0LTUKK2Fsd2F5cyBcdTQxOTMgMTI0NS0xMjQ1Ni00CithbHdheXMgXHU0MTk0IDEyLTEyMzQ2LTMKK2Fsd2F5cyBcdTQxOTUgMjM2LTUKK2Fsd2F5cyBcdTQxOTYgMTIzNS0xMjM0Ni0yCithbHdheXMgXHU0MTk3IDEzLTI0Ni01CithbHdheXMgXHU0MTk4IDIzNDU2LTMKK2Fsd2F5cyBcdTQxOTkgMjQ2LTIKK2Fsd2F5cyBcdTQxOUEgMTI0LTEyMzQ2LTIKK2Fsd2F5cyBcdTQxOUIgMS0zNDUtNQorYWx3YXlzIFx1NDE5QyAyMzQtNQorYWx3YXlzIFx1NDE5RCAxLTM0LTIKK2Fsd2F5cyBcdTQxOUUgMjQ2LTQKK2Fsd2F5cyBcdTQxOUYgMTIzLTIzNDYtNQorYWx3YXlzIFx1NDFBMCAxMjM1LTEyNDU2LTUKK2Fsd2F5cyBcdTQxQTEgMTQtMTM0Ni0yCithbHdheXMgXHU0MUEyIDIzNi01CithbHdheXMgXHU0MUEzIDEyLTEzNi0yCithbHdheXMgXHU0MUE0IDEyLTEyNDU2LTMKK2Fsd2F5cyBcdTQxQTUgMTMtMTYtMgorYWx3YXlzIFx1NDFBNiAxNDUtMTIzNi01CithbHdheXMgXHU0MUE3IDI1LTMKK2Fsd2F5cyBcdTQxQTggMTM0NS0xMzQ1Ni0yCithbHdheXMgXHU0MUE5IDEzNC0xMzQ1Ni0yCithbHdheXMgXHU0MUFBIDEyMzUtMTIzNDYtMworYWx3YXlzIFx1NDFBQiAxMi00NTYtMworYWx3YXlzIFx1NDFBQyAyNTYtNAorYWx3YXlzIFx1NDFBRCAxNS00NS0zCithbHdheXMgXHU0MUFFIDEzLTE0NTYtNQorYWx3YXlzIFx1NDFBRiAxLTI1LTIKK2Fsd2F5cyBcdTQxQjAgMTI1Ni0zCithbHdheXMgXHU0MUIxIDEyNC0xMjM2LTMKK2Fsd2F5cyBcdTQxQjIgMTIzLTEzNDYtMworYWx3YXlzIFx1NDFCMyAxNS0xMjQ2LTUKK2Fsd2F5cyBcdTQxQjUgMTItMTM1Ni0yCithbHdheXMgXHU0MUI2IDEzLTIzNC0zCithbHdheXMgXHU0MUI3IDE1LTIzNi01CithbHdheXMgXHU0MUI4IDEtMTM1Ni0zCithbHdheXMgXHU0MUI5IDEyLTEyMzQ2LTMKK2Fsd2F5cyBcdTQxQkEgMTIzNC0xMjM2LTMKK2Fsd2F5cyBcdTQxQkIgMjQ1LTI0Ni01CithbHdheXMgXHU0MUJDIDEyMy0yMzQ2LTMKK2Fsd2F5cyBcdTQxQkQgMjQ1LTEyNTYtMgorYWx3YXlzIFx1NDFCRSAxNC0xMjM2LTIKK2Fsd2F5cyBcdTQxQkYgMTYtNQorYWx3YXlzIFx1NDFDMCAxMjQ1LTEyMzQ2LTIKK2Fsd2F5cyBcdTQxQzEgMTUtMTU2LTMKK2Fsd2F5cyBcdTQxQzIgMjQ1LTIzNDUtMworYWx3YXlzIFx1NDFDMyAxNS0xNTYtNQorYWx3YXlzIFx1NDFDNSAxMjM0NS0zNDUtMworYWx3YXlzIFx1NDFDNiAxNDUtMTIzNTYtNAorYWx3YXlzIFx1NDFDNyAxMzQtMTM0Ni0yCithbHdheXMgXHU0MUM4IDEyMzUtMzUtNQorYWx3YXlzIFx1NDFDOSAyNC0xNTYtMgorYWx3YXlzIFx1NDFDQiAxMjM1LTI0NTYtNQorYWx3YXlzIFx1NDFDQyAyNDUtMjQ2LTUKK2Fsd2F5cyBcdTQxQ0QgMTItMzQtNQorYWx3YXlzIFx1NDFDRSAyNDUtMjM2LTUKK2Fsd2F5cyBcdTQxQ0YgMTQ1LTEyNDYtNAorYWx3YXlzIFx1NDFEMCAxNC0xNi01CithbHdheXMgXHU0MUQxIDEzNS0zNDUtNQorYWx3YXlzIFx1NDFEMiAxMy0zNDYtNQorYWx3YXlzIFx1NDFEMyAxNS0xMjU2LTMKK2Fsd2F5cyBcdTQxRDQgMTQtMjUtNQorYWx3YXlzIFx1NDFENSAxNS0xMjU2LTMKK2Fsd2F5cyBcdTQxRDYgMjU2LTQKK2Fsd2F5cyBcdTQxRDcgMS0xMjM0Ni0zCithbHdheXMgXHU0MUQ4IDEyMzUtMzQtNQorYWx3YXlzIFx1NDFEOSAxNDU2LTQKK2Fsd2F5cyBcdTQxREEgMTIzNC0zNC0zCithbHdheXMgXHU0MURCIDEtMTU2LTQKK2Fsd2F5cyBcdTQxREMgMjQ1LTIzNDUtNAorYWx3YXlzIFx1NDFERCAxMy0yMzQ1LTMKK2Fsd2F5cyBcdTQxREUgMTMtMTIzNi00CithbHdheXMgXHU0MURGIDEzLTIzNDUtNQorYWx3YXlzIFx1NDFFMCAxLTM0LTUKK2Fsd2F5cyBcdTQxRTEgMS0zNC01CithbHdheXMgXHU0MUUyIDEyMy0zNC00CithbHdheXMgXHU0MUUzIDEzNDUtMzQ2LTUKK2Fsd2F5cyBcdTQxRTQgMTI0NS0xMjQ2LTUKK2Fsd2F5cyBcdTQxRTUgMTI1LTIzNDYtMgorYWx3YXlzIFx1NDFFNiAxMzQ2LTQKK2Fsd2F5cyBcdTQxRTcgMS0xNTYtNQorYWx3YXlzIFx1NDFFOCAxMy0xMjM0Ni01CithbHdheXMgXHU0MUU5IDE2LTUKK2Fsd2F5cyBcdTQxRUEgMTItMTU2LTMKK2Fsd2F5cyBcdTQxRUIgMTMtMTYtMworYWx3YXlzIFx1NDFFQyAxMi00NTYtNAorYWx3YXlzIFx1NDFFRCAxNC0xNDYtNAorYWx3YXlzIFx1NDFFRSAxMjQ1LTEzNi00CithbHdheXMgXHU0MUVGIDEyNDUtMTIzNDYtMgorYWx3YXlzIFx1NDFGMCAxLTEzNTYtMworYWx3YXlzIFx1NDFGMSAxMzQ1LTM0NS01CithbHdheXMgXHU0MUYyIDEzLTIzNDU2LTIKK2Fsd2F5cyBcdTQxRjMgMTMtMjM0NS0zCithbHdheXMgXHU0MUY1IDE0NTYtMgorYWx3YXlzIFx1NDFGNiAxMy0yMzYtMgorYWx3YXlzIFx1NDFGNyAxMzUtMzQ2LTIKK2Fsd2F5cyBcdTQxRjggMTItMTM1Ni0yCithbHdheXMgXHU0MUY5IDEzLTI1Ni0zCithbHdheXMgXHU0MUZBIDE0NS0xMjM1Ni01CithbHdheXMgXHU0MUZCIDEyNDYtNAorYWx3YXlzIFx1NDFGQyAxNi01CithbHdheXMgXHU0MUZEIDEtMTU2LTUKK2Fsd2F5cyBcdTQxRkUgMjM0NS0yCithbHdheXMgXHU0MjAwIDE1LTEyMzYtMworYWx3YXlzIFx1NDIwMSAxNC0xMjM0NTYtMgorYWx3YXlzIFx1NDIwMiAxMjM0LTEzNDU2LTIKK2Fsd2F5cyBcdTQyMDMgMS0xNDYtNAorYWx3YXlzIFx1NDIwNCAxMjM1LTEyMzYtMgorYWx3YXlzIFx1NDIwNSAxMjU2LTUKK2Fsd2F5cyBcdTQyMDYgMTQ1LTI0NTYtNQorYWx3YXlzIFx1NDIwNyAxLTE0Ni01CithbHdheXMgXHU0MjA4IDEyMzQ1LTM1Ni0yCithbHdheXMgXHU0MjA5IDI0LTM0NS01CithbHdheXMgXHU0MjBBIDE0LTEzNDU2LTIKK2Fsd2F5cyBcdTQyMEIgMTI0LTM0NS01CithbHdheXMgXHU0MjBDIDI0NS0xMjU2LTMKK2Fsd2F5cyBcdTQyMEQgMTM0LTEzNTYtMgorYWx3YXlzIFx1NDIwRSAzNDYtNQorYWx3YXlzIFx1NDIwRiAxMzUtMTI2LTIKK2Fsd2F5cyBcdTQyMTAgMTMtMTI0Ni01CithbHdheXMgXHU0MjExIDEzLTM1LTQKK2Fsd2F5cyBcdTQyMTIgMTM0NS0xMjM2LTQKK2Fsd2F5cyBcdTQyMTMgMjQ1LTIzNDU2LTUKK2Fsd2F5cyBcdTQyMTQgMTMtMjM0NTYtMworYWx3YXlzIFx1NDIxNSAxMi0xNTYtMgorYWx3YXlzIFx1NDIxNiAxMjMtMjM0Ni0zCithbHdheXMgXHU0MjE3IDE1LTI1LTQKK2Fsd2F5cyBcdTQyMTggMjQ1LTE1Ni0yCithbHdheXMgXHU0MjE5IDEtMTIzNTYtNQorYWx3YXlzIFx1NDIxQSAxMi0xNTYtMgorYWx3YXlzIFx1NDIxQiAxMy0yMzU2LTUKK2Fsd2F5cyBcdTQyMUMgMjQ1LTE0NTYtNQorYWx3YXlzIFx1NDIxRCAxNS0xMjU2LTMKK2Fsd2F5cyBcdTQyMUUgMTQ1LTM0LTQKK2Fsd2F5cyBcdTQyMUYgMjQ1LTIzNDYtNQorYWx3YXlzIFx1NDIyMCA0NS01CithbHdheXMgXHU0MjIxIDI0NS0xMjM0Ni01CithbHdheXMgXHU0MjIyIDE1LTI0NTYtNAorYWx3YXlzIFx1NDIyMyAxLTEzNTYtNQorYWx3YXlzIFx1NDIyNCAyNDUtMjM0NS0yCithbHdheXMgXHU0MjI1IDEzLTE0NTYtMworYWx3YXlzIFx1NDIyNiAxMjUtMTIzNDYtMworYWx3YXlzIFx1NDIyNyAxMjQ2LTQKK2Fsd2F5cyBcdTQyMkEgMTUtMTYtNQorYWx3YXlzIFx1NDIyQiAxMzQ1LTM0NS01CithbHdheXMgXHU0MjJDIDEyMzQtMzQtMgorYWx3YXlzIFx1NDIyRCAxMjM1LTIzNTYtMgorYWx3YXlzIFx1NDIyRSAxMy0xMjU2LTUKK2Fsd2F5cyBcdTQyMkYgMS0xMzYtMworYWx3YXlzIFx1NDIzMCAyNC0xNDYtMworYWx3YXlzIFx1NDIzMSAxMjQtMTQ2LTMKK2Fsd2F5cyBcdTQyMzIgMTM1LTEyMzYtMworYWx3YXlzIFx1NDIzMyAxMjQtMzQ1LTUKK2Fsd2F5cyBcdTQyMzQgMjQ1LTIzNDUtNQorYWx3YXlzIFx1NDIzNSAxMjM0Ni0zCithbHdheXMgXHU0MjM2IDEyNDUtMTIzNDYtMgorYWx3YXlzIFx1NDIzNyAxNC0yNS01CithbHdheXMgXHU0MjM4IDEyMzUtMzQtMgorYWx3YXlzIFx1NDIzOSAxNS0xMjM1Ni00CithbHdheXMgXHU0MjNBIDEtMTIzNDYtMworYWx3YXlzIFx1NDIzQiAxMjM0LTM0LTIKK2Fsd2F5cyBcdTQyM0MgMTM0LTM0Ni01CithbHdheXMgXHU0MjNEIDEzLTE0NTYtMworYWx3YXlzIFx1NDIzRSAyNC0xNDYtMworYWx3YXlzIFx1NDIzRiAxMzQtMTYtNQorYWx3YXlzIFx1NDI0MCAyNC0zNC01CithbHdheXMgXHU0MjQxIDE0LTEzNDU2LTIKK2Fsd2F5cyBcdTQyNDIgMTQtMzU2LTQKK2Fsd2F5cyBcdTQyNDMgMTMtNDYtNAorYWx3YXlzIFx1NDI0NCAxNC0xMzU2LTIKK2Fsd2F5cyBcdTQyNDUgMS0xNTYtNQorYWx3YXlzIFx1NDI0NiAxNDUtMjQ2LTQKK2Fsd2F5cyBcdTQyNDggMTUtMTIzNi01CithbHdheXMgXHU0MjQ5IDEzLTM0LTMKK2Fsd2F5cyBcdTQyNEEgMTIzNDUtMTIzNi01CithbHdheXMgXHU0MjRCIDEzNC0zNTYtNQorYWx3YXlzIFx1NDI0QyAxNS0xMjQ2LTUKK2Fsd2F5cyBcdTQyNEQgMTMtMjM0NS00CithbHdheXMgXHU0MjRFIDEyNC0xMzQ2LTIKK2Fsd2F5cyBcdTQyNEYgMTUtMzQ2LTUKK2Fsd2F5cyBcdTQyNTAgMTIzLTM0LTMKK2Fsd2F5cyBcdTQyNTEgMzQtMgorYWx3YXlzIFx1NDI1MiAxMjM0NS0xMjM2LTMKK2Fsd2F5cyBcdTQyNTMgMTQtMjUtNQorYWx3YXlzIFx1NDI1NCAyNDUtMTIzNi0zCithbHdheXMgXHU0MjU1IDI0NS0xMzU2LTIKK2Fsd2F5cyBcdTQyNTYgMTQtMTM0NTYtMgorYWx3YXlzIFx1NDI1NyAxNi0zCithbHdheXMgXHU0MjU4IDI0LTQ1Ni01CithbHdheXMgXHU0MjU5IDI1Ni0yCithbHdheXMgXHU0MjVBIDEzNC0xMzU2LTIKK2Fsd2F5cyBcdTQyNUIgMTQ2LTQKK2Fsd2F5cyBcdTQyNUMgMS0xNTYtNQorYWx3YXlzIFx1NDI1RCAxNi00CithbHdheXMgXHU0MjVFIDE0NS0xMjM2LTQKK2Fsd2F5cyBcdTQyNUYgMTIzNS0yNS01CithbHdheXMgXHU0MjYwIDEyNDYtMgorYWx3YXlzIFx1NDI2MSAxMjQtMTIzNi0yCithbHdheXMgXHU0MjYyIDE1LTIzNDYtNQorYWx3YXlzIFx1NDI2MyAxNS0zNDYtNQorYWx3YXlzIFx1NDI2NCAxNS0xMjM1Ni00CithbHdheXMgXHU0MjY1IDE1LTEyMzQ2LTQKK2Fsd2F5cyBcdTQyNjYgMjQ1LTIzNDUtMworYWx3YXlzIFx1NDI2NyAxNC0yMzQtMgorYWx3YXlzIFx1NDI2OCAxNi01CithbHdheXMgXHU0MjY5IDEyMzU2LTMKK2Fsd2F5cyBcdTQyNkEgMTQtMzU2LTUKK2Fsd2F5cyBcdTQyNkIgMTQtMTYtMgorYWx3YXlzIFx1NDI2QyAxMjM0NS0zNTYtNQorYWx3YXlzIFx1NDI2RCAxNC0zNDYtNQorYWx3YXlzIFx1NDI2RSAxNC0xNDU2LTUKK2Fsd2F5cyBcdTQyNkYgMTUtMjM0NS01CithbHdheXMgXHU0MjcwIDE1LTI0Ni01CithbHdheXMgXHU0MjcxIDEyMzU2LTMKK2Fsd2F5cyBcdTQyNzIgMTM0LTE2LTIKK2Fsd2F5cyBcdTQyNzMgMTUtMjM0NS0zCithbHdheXMgXHU0Mjc0IDEyNDUtMTM0Ni0yCithbHdheXMgXHU0Mjc1IDEtMTI0NTYtNQorYWx3YXlzIFx1NDI3NiAyNC00NTYtMworYWx3YXlzIFx1NDI3NyAyMzQ1LTIKK2Fsd2F5cyBcdTQyNzggMTM1LTIzNDUtNQorYWx3YXlzIFx1NDI3OSAxNC0xMzQ1Ni0yCithbHdheXMgXHU0MjdBIDEyMzUtMTIzNDYtMgorYWx3YXlzIFx1NDI3QiAyNDUtMTYtMgorYWx3YXlzIFx1NDI3QyAxNC0yNDYtNQorYWx3YXlzIFx1NDI3RCAxMzUtMTIzNi00CithbHdheXMgXHU0MjdFIDEzNC0xNi01CithbHdheXMgXHU0MjdGIDEyMzUtMzQtMgorYWx3YXlzIFx1NDI4MCAxMjM1LTM0LTIKK2Fsd2F5cyBcdTQyODIgMTUtMjM0Ni01CithbHdheXMgXHU0MjgzIDEyMzQtMzU2LTUKK2Fsd2F5cyBcdTQyODQgMjQ1LTIzNS0yCithbHdheXMgXHU0Mjg1IDEzNC0xMzQ1Ni0yCithbHdheXMgXHU0Mjg2IDEzLTIzNC01CithbHdheXMgXHU0Mjg3IDEzNS0zNC01CithbHdheXMgXHU0Mjg4IDEzNC0zNTYtMgorYWx3YXlzIFx1NDI4OSAxNS0xMjM2LTQKK2Fsd2F5cyBcdTQyOEEgMTI0Ni00CithbHdheXMgXHU0MjhCIDEtNDU2LTMKK2Fsd2F5cyBcdTQyOEQgMTQtMTYtMgorYWx3YXlzIFx1NDI4RSAyNDUtNDUtNAorYWx3YXlzIFx1NDI4RiAxMi0xNDYtNAorYWx3YXlzIFx1NDI5MCAxMjM1LTEyMzQ1Ni0yCithbHdheXMgXHU0MjkxIDE1LTQ2LTQKK2Fsd2F5cyBcdTQyOTIgMTMtMTM0NTYtMworYWx3YXlzIFx1NDI5MyAyNC0xNTYtNQorYWx3YXlzIFx1NDI5NCAxMzQ1Ni0zCithbHdheXMgXHU0Mjk1IDEzLTIzNDUtMworYWx3YXlzIFx1NDI5NiAxMzQ1LTEyMzYtNAorYWx3YXlzIFx1NDI5NyAxMjM1LTQ1Ni0yCithbHdheXMgXHU0Mjk4IDEzLTIzNC01CithbHdheXMgXHU0Mjk5IDIzNDUtMgorYWx3YXlzIFx1NDI5QSAxNDUtMTI0Ni0zCithbHdheXMgXHU0MjlCIDE1LTM0NS01CithbHdheXMgXHU0MjlDIDEyNC0xMjQ1Ni0yCithbHdheXMgXHU0MjlEIDE1LTE2LTMKK2Fsd2F5cyBcdTQyOUUgMS0yMzQ2LTIKK2Fsd2F5cyBcdTQyOUYgMTM0LTEzNi0yCithbHdheXMgXHU0MkEwIDE1LTE2LTUKK2Fsd2F5cyBcdTQyQTEgMTM0LTEyMzYtMgorYWx3YXlzIFx1NDJBMiAxMy00Ni0zCithbHdheXMgXHU0MkEzIDEyMzUtNDU2LTIKK2Fsd2F5cyBcdTQyQTQgMTI0LTEyMzYtMgorYWx3YXlzIFx1NDJBNSAxNS0yNDYtNQorYWx3YXlzIFx1NDJBNiAyMzQ1Ni0yCithbHdheXMgXHU0MkE3IDEyMzQtMTYtNQorYWx3YXlzIFx1NDJBOCAxNC0yNS0yCithbHdheXMgXHU0MkE5IDEyMzQ1LTEyMzYtMgorYWx3YXlzIFx1NDJBQSAxNC0xNi01CithbHdheXMgXHU0MkFCIDI0NS0xMjQ2LTQKK2Fsd2F5cyBcdTQyQUMgMTItMzUtNAorYWx3YXlzIFx1NDJBRCAxMi0xMjM1Ni0yCithbHdheXMgXHU0MkFFIDE0NS0xNi0yCithbHdheXMgXHU0MkFGIDEzLTEyMzQ2LTQKK2Fsd2F5cyBcdTQyQjAgMTItMzQtMgorYWx3YXlzIFx1NDJCMSAxNS0yMzQ1LTMKK2Fsd2F5cyBcdTQyQjIgMTItMTIzNi00CithbHdheXMgXHU0MkIzIDEzNC0xMjYtMgorYWx3YXlzIFx1NDJCNCAyNDUtMjM0NS01CithbHdheXMgXHU0MkI1IDI0NS0yMzQtMgorYWx3YXlzIFx1NDJCNiAxLTEzNi01CithbHdheXMgXHU0MkI3IDEyNS0xNTYtMworYWx3YXlzIFx1NDJCOCAxMjU2LTMKK2Fsd2F5cyBcdTQyQjkgMjQ1LTIzNDUtMworYWx3YXlzIFx1NDJCQSAxMjM1LTM0LTUKK2Fsd2F5cyBcdTQyQkIgMTMtMTIzNi0zCithbHdheXMgXHU0MkJDIDEyLTE1Ni00CithbHdheXMgXHU0MkJEIDEzLTIzNTYtNQorYWx3YXlzIFx1NDJCRSAxMzQtMzQtNQorYWx3YXlzIFx1NDJCRiAxMjM0NS0zNC0zCithbHdheXMgXHU0MkMwIDEyMzUtMzUtNQorYWx3YXlzIFx1NDJDMSAxMy0xMzU2LTQKK2Fsd2F5cyBcdTQyQzIgMTUtMjQ2LTIKK2Fsd2F5cyBcdTQyQzMgMTM0LTE0Ni01CithbHdheXMgXHU0MkM0IDQ1Ni00CithbHdheXMgXHU0MkM2IDE0LTM0LTMKK2Fsd2F5cyBcdTQyQzcgMTYtNQorYWx3YXlzIFx1NDJDOCAxMjQ1LTM0LTIKK2Fsd2F5cyBcdTQyQzkgMTUtMjM2LTUKK2Fsd2F5cyBcdTQyQ0EgMS0xMzU2LTMKK2Fsd2F5cyBcdTQyQ0IgMTM0LTE0NTYtMgorYWx3YXlzIFx1NDJDQyAxMy00Ni00CithbHdheXMgXHU0MkNEIDIzNDYtMworYWx3YXlzIFx1NDJDRSAxLTEyMzYtNQorYWx3YXlzIFx1NDJDRiAxMjUtMjUtMgorYWx3YXlzIFx1NDJEMCAyMzYtNQorYWx3YXlzIFx1NDJEMSAxMzUtMTM0NTYtNAorYWx3YXlzIFx1NDJEMiAyNC0zNC0zCithbHdheXMgXHU0MkQzIDEtMTIzNTYtNQorYWx3YXlzIFx1NDJENCAxMzUtMTYtNQorYWx3YXlzIFx1NDJENSAxMjQ1LTEzNi01CithbHdheXMgXHU0MkQ2IDEyNTYtNQorYWx3YXlzIFx1NDJENyAxMy00Ni00CithbHdheXMgXHU0MkQ4IDEtMTI0Ni01CithbHdheXMgXHU0MkQ5IDE1Ni00CithbHdheXMgXHU0MkRBIDE2LTUKK2Fsd2F5cyBcdTQyREIgMTM0LTE2LTQKK2Fsd2F5cyBcdTQyREMgMjQ1LTE2LTQKK2Fsd2F5cyBcdTQyREQgMTM0NTYtMworYWx3YXlzIFx1NDJERSA0NTYtNAorYWx3YXlzIFx1NDJERiAxMy0xNi01CithbHdheXMgXHU0MkUwIDEzNS0zNC00CithbHdheXMgXHU0MkUxIDI0LTM0LTMKK2Fsd2F5cyBcdTQyRTIgMTIzNC0zNDYtMworYWx3YXlzIFx1NDJFMyAxMjM0NS0xMjM2LTIKK2Fsd2F5cyBcdTQyRTQgMjM2LTUKK2Fsd2F5cyBcdTQyRTUgMTQtMTYtMgorYWx3YXlzIFx1NDJFNiAxMjM0NS0xMjM2LTIKK2Fsd2F5cyBcdTQyRTcgMjQ1LTEyNTYtMgorYWx3YXlzIFx1NDJFOCAxMjM0NS0zNC00CithbHdheXMgXHU0MkU5IDE1Ni0yCithbHdheXMgXHU0MkVBIDIzNDYtMworYWx3YXlzIFx1NDJFQiAxLTEzNTYtMworYWx3YXlzIFx1NDJFQyAxMjQtMjM0NS0zCithbHdheXMgXHU0MkVEIDEyNTYtNQorYWx3YXlzIFx1NDJFRSAxMy0xNDU2LTMKK2Fsd2F5cyBcdTQyRUYgMjQ1LTE2LTQKK2Fsd2F5cyBcdTQyRjAgMTMtMTI1Ni0zCithbHdheXMgXHU0MkYxIDE0LTI0NTYtMgorYWx3YXlzIFx1NDJGMiAyNC0xMzU2LTIKK2Fsd2F5cyBcdTQyRjMgMTM1LTM1Ni01CithbHdheXMgXHU0MkY0IDEzNDUtMjM0LTUKK2Fsd2F5cyBcdTQyRjUgMTYtNQorYWx3YXlzIFx1NDJGNiAxNS0xMjU2LTQKK2Fsd2F5cyBcdTQyRjcgMTM0LTEyMzU2LTIKK2Fsd2F5cyBcdTQyRjggMTUtMjU2LTIKK2Fsd2F5cyBcdTQyRjkgMTIzNDUtMzQtMgorYWx3YXlzIFx1NDJGQSAyNDUtMjM0LTMKK2Fsd2F5cyBcdTQyRkIgMTM0NS0xNDU2LTIKK2Fsd2F5cyBcdTQyRkMgMTM0NTYtMgorYWx3YXlzIFx1NDJGRCAxMzUtMTM1Ni00CithbHdheXMgXHU0MkZFIDEzNDUtMzQ1LTUKK2Fsd2F5cyBcdTQyRkYgMTI0Ni0zCithbHdheXMgXHU0MzAwIDEyMy0yMzQ2LTMKK2Fsd2F5cyBcdTQzMDEgMjQ2LTMKK2Fsd2F5cyBcdTQzMDIgMTIzNTYtNQorYWx3YXlzIFx1NDMwMyAyNC0yNS01CithbHdheXMgXHU0MzA0IDEzLTEzNTYtNAorYWx3YXlzIFx1NDMwNSAxMjQtMTM0Ni0yCithbHdheXMgXHU0MzA2IDEzLTEyNDYtNQorYWx3YXlzIFx1NDMwNyAxNS0yNS00CithbHdheXMgXHU0MzA4IDEyNC0zNDUtNQorYWx3YXlzIFx1NDMwOSAxMy0xMzQ2LTMKK2Fsd2F5cyBcdTQzMEEgMjQ2LTIKK2Fsd2F5cyBcdTQzMEIgMTQ1LTM0NS0zCithbHdheXMgXHU0MzBDIDI0NS0zNDYtNQorYWx3YXlzIFx1NDMwRCAxMy0xNDU2LTQKK2Fsd2F5cyBcdTQzMEUgMTQtMjM2LTUKK2Fsd2F5cyBcdTQzMEYgMTM0LTE2LTUKK2Fsd2F5cyBcdTQzMTAgMTM0LTE2LTUKK2Fsd2F5cyBcdTQzMTEgMTMtMjM0NS0zCithbHdheXMgXHU0MzEyIDE0LTM0LTUKK2Fsd2F5cyBcdTQzMTMgMTIzNDUtMTIzNi0yCithbHdheXMgXHU0MzE0IDEyMzU2LTUKK2Fsd2F5cyBcdTQzMTUgMTM0LTE2LTIKK2Fsd2F5cyBcdTQzMTYgMTMtMzQ2LTIKK2Fsd2F5cyBcdTQzMTcgMTIzNDUtMzQtNAorYWx3YXlzIFx1NDMxOCAxMzUtMzQ2LTUKK2Fsd2F5cyBcdTQzMTkgMTIzNS00NTYtNQorYWx3YXlzIFx1NDMxQSAxNS0zNC01CithbHdheXMgXHU0MzFCIDI0Ni0yCithbHdheXMgXHU0MzFDIDEzNDUtMzQ2LTUKK2Fsd2F5cyBcdTQzMUQgMTMtMTQ1Ni01CithbHdheXMgXHU0MzFFIDE0LTIzNDUtNAorYWx3YXlzIFx1NDMxRiAxMzUtMTI2LTIKK2Fsd2F5cyBcdTQzMjAgMTMtMjM0NS0zCithbHdheXMgXHU0MzIxIDEyNC0xNi00CithbHdheXMgXHU0MzIyIDE0LTEzNDU2LTIKK2Fsd2F5cyBcdTQzMjMgMTI1LTEyNDU2LTQKK2Fsd2F5cyBcdTQzMjQgMS0xNTYtNAorYWx3YXlzIFx1NDMyNSAxNDU2LTQKK2Fsd2F5cyBcdTQzMjYgMTQ1LTE2LTIKK2Fsd2F5cyBcdTQzMjcgMTItMTIzNTYtMgorYWx3YXlzIFx1NDMyOCAyNDUtMzQ1LTMKK2Fsd2F5cyBcdTQzMjkgMTM0LTM0Ni01CithbHdheXMgXHU0MzJBIDIzNDUtNAorYWx3YXlzIFx1NDMyQiAxNC0xMjM2LTQKK2Fsd2F5cyBcdTQzMkMgMTItMTIzNDYtMgorYWx3YXlzIFx1NDMyRCAxMy0yNDYtMworYWx3YXlzIFx1NDMyRSAyNC00NTYtMworYWx3YXlzIFx1NDMyRiAxMy0xMjQ1Ni01CithbHdheXMgXHU0MzMwIDEzNDUtMzQ2LTUKK2Fsd2F5cyBcdTQzMzEgMTQtMjUtNQorYWx3YXlzIFx1NDMzMiAxNS0yNTYtMworYWx3YXlzIFx1NDMzMyAyNC0xNTYtMworYWx3YXlzIFx1NDMzNCAxNC0yNS01CithbHdheXMgXHU0MzM1IDEtMzQtMgorYWx3YXlzIFx1NDMzNiAxMjUtMTU2LTMKK2Fsd2F5cyBcdTQzMzcgMTItMTIzNTYtMgorYWx3YXlzIFx1NDMzOCAxLTEyNDU2LTUKK2Fsd2F5cyBcdTQzMzkgMTMtMjM1LTQKK2Fsd2F5cyBcdTQzM0EgMTU2LTQKK2Fsd2F5cyBcdTQzM0IgMTYtNQorYWx3YXlzIFx1NDMzQyAxNDUtMTI0Ni01CithbHdheXMgXHU0MzNEIDI0NS0yNDU2LTQKK2Fsd2F5cyBcdTQzM0UgMTM0NS0xNDU2LTIKK2Fsd2F5cyBcdTQzM0YgMTIzNDUtMzQtMgorYWx3YXlzIFx1NDM0MCAxNC0xMjM2LTIKK2Fsd2F5cyBcdTQzNDEgMTUtMTI0Ni01CithbHdheXMgXHU0MzQyIDEyNTYtMgorYWx3YXlzIFx1NDM0MyAyNDYtMgorYWx3YXlzIFx1NDM0NCAxNDUtMjM0NS00CithbHdheXMgXHU0MzQ1IDE0LTEzNDU2LTIKK2Fsd2F5cyBcdTQzNDYgMS0zNC00CithbHdheXMgXHU0MzQ3IDEyNC0zNDUtNQorYWx3YXlzIFx1NDM0OCAxMjM0LTEzNDU2LTIKK2Fsd2F5cyBcdTQzNDkgMS0yNDU2LTQKK2Fsd2F5cyBcdTQzNEEgMTMtMjQ2LTMKK2Fsd2F5cyBcdTQzNEIgMS0xMjQ2LTUKK2Fsd2F5cyBcdTQzNEMgMTIzNC0xMjM1Ni00CithbHdheXMgXHU0MzREIDEyMy0xMjM1Ni01CithbHdheXMgXHU0MzRFIDI0NS0yMzQ1LTUKK2Fsd2F5cyBcdTQzNEYgMjQ1LTIzNDYtNQorYWx3YXlzIFx1NDM1MCAxMjM1LTEyMzYtNAorYWx3YXlzIFx1NDM1MSAxMjM1LTEyMzYtNAorYWx3YXlzIFx1NDM1MyAxMjM1LTM0LTUKK2Fsd2F5cyBcdTQzNTQgMTMtMTIzNDYtMworYWx3YXlzIFx1NDM1NSAxNDUtMTYtNAorYWx3YXlzIFx1NDM1NiAxMjM0NS0zNC0yCithbHdheXMgXHU0MzU3IDE1LTQ1LTUKK2Fsd2F5cyBcdTQzNTggMTM0LTE2LTIKK2Fsd2F5cyBcdTQzNTkgMTM0LTM1Ni0yCithbHdheXMgXHU0MzVBIDE0LTEzNDYtNQorYWx3YXlzIFx1NDM1QiAxMy0zNC01CithbHdheXMgXHU0MzVDIDEtMTQ2LTUKK2Fsd2F5cyBcdTQzNUQgMTI0LTM0NS01CithbHdheXMgXHU0MzVFIDEyNTYtNQorYWx3YXlzIFx1NDM1RiAxMjUtMTIzNDYtNQorYWx3YXlzIFx1NDM2MCAxNC0xNi0yCithbHdheXMgXHU0MzYxIDE0LTM0LTUKK2Fsd2F5cyBcdTQzNjIgMzQtMgorYWx3YXlzIFx1NDM2MyAxNC0zNTYtMgorYWx3YXlzIFx1NDM2NCAxMy0xNi00CithbHdheXMgXHU0MzY1IDE0LTE2LTUKK2Fsd2F5cyBcdTQzNjYgMTQtMTYtMgorYWx3YXlzIFx1NDM2NyAxMjUtMTM0Ni0zCithbHdheXMgXHU0MzY4IDEyMzQtMTI2LTUKK2Fsd2F5cyBcdTQzNjkgNDYtNAorYWx3YXlzIFx1NDM2QSAzNS01CithbHdheXMgXHU0MzZCIDEyNC0yNS0yCithbHdheXMgXHU0MzZDIDEyMzQtMTM1Ni0zCithbHdheXMgXHU0MzZEIDEyNS0xMzQ2LTMKK2Fsd2F5cyBcdTQzNkUgMS0xNDYtNQorYWx3YXlzIFx1NDM2RiAxMy0xMjQ2LTQKK2Fsd2F5cyBcdTQzNzAgMjM0NS0zCithbHdheXMgXHU0MzcxIDE1LTEyNTYtMgorYWx3YXlzIFx1NDM3MiAxMzQ1LTI0NTYtMgorYWx3YXlzIFx1NDM3MyAxMy0yMzYtMgorYWx3YXlzIFx1NDM3NCAxMjQ2LTQKK2Fsd2F5cyBcdTQzNzUgMS0xMzU2LTMKK2Fsd2F5cyBcdTQzNzYgMTQ1LTEyMzQ2LTMKK2Fsd2F5cyBcdTQzNzcgMTI0Ni00CithbHdheXMgXHU0Mzc4IDEzNS0xMjYtMgorYWx3YXlzIFx1NDM3OSAyNC0xMjM2LTMKK2Fsd2F5cyBcdTQzN0EgMTIzNS0xMjQ1Ni01CithbHdheXMgXHU0MzdCIDE1LTQ1LTUKK2Fsd2F5cyBcdTQzN0MgMTI1LTEyMzYtMworYWx3YXlzIFx1NDM3RCAxNC0xNi01CithbHdheXMgXHU0MzdFIDQ1LTQKK2Fsd2F5cyBcdTQzN0YgMTIzNS00NTYtMgorYWx3YXlzIFx1NDM4MCAxNS0yMzYtNQorYWx3YXlzIFx1NDM4MSAxMjM1LTM0LTIKK2Fsd2F5cyBcdTQzODIgMTM1LTE0Ni00CithbHdheXMgXHU0MzgzIDEyNDUtMTIzNi00CithbHdheXMgXHU0Mzg0IDEyNC0yNDYtMgorYWx3YXlzIFx1NDM4NSAxMjM0LTEyNi01CithbHdheXMgXHU0Mzg2IDE0LTI0Ni01CithbHdheXMgXHU0Mzg3IDEtMTIzNTYtMworYWx3YXlzIFx1NDM4OCAxNi01CithbHdheXMgXHU0Mzg5IDE1LTEyNTYtNQorYWx3YXlzIFx1NDM4QSAxMjM0LTEyNi01CithbHdheXMgXHU0MzhCIDEyMy0xNDYtNQorYWx3YXlzIFx1NDM4QyAxMi0zNC01CithbHdheXMgXHU0MzhEIDEyMzQ1LTM0LTMKK2Fsd2F5cyBcdTQzOEUgMTM0NS0zNDUtNQorYWx3YXlzIFx1NDM4RiAxMjM1LTEyMzYtMgorYWx3YXlzIFx1NDM5MCAxMi0xNDYtNAorYWx3YXlzIFx1NDM5MSAxNC0zNC01CithbHdheXMgXHU0MzkyIDEtMTIzNi00CithbHdheXMgXHU0MzkzIDEyNC0zNDUtNQorYWx3YXlzIFx1NDM5NCAxMjM0NS0zNC0zCithbHdheXMgXHU0Mzk1IDEyMzUtMTIzNDYtMworYWx3YXlzIFx1NDM5NiAxMjUtMTM1Ni0zCithbHdheXMgXHU0Mzk3IDI0NS0yNDYtMgorYWx3YXlzIFx1NDM5OCAxNS0zNC01CithbHdheXMgXHU0Mzk5IDEyMzQtMTQ1Ni0zCithbHdheXMgXHU0MzlBIDEyMzUtMTI0Ni01CithbHdheXMgXHU0MzlCIDE0LTE0Ni00CithbHdheXMgXHU0MzlDIDEyMzUtMTIzNDU2LTMKK2Fsd2F5cyBcdTQzOUQgMS0zNC01CithbHdheXMgXHU0MzlGIDE1Ni0yCithbHdheXMgXHU0M0EwIDE1Ni0yCithbHdheXMgXHU0M0ExIDEyNDUtMTI0NTYtNAorYWx3YXlzIFx1NDNBMiAyNDUtMTYtNAorYWx3YXlzIFx1NDNBMyAxNS0xNTYtNQorYWx3YXlzIFx1NDNBNCAxMy0xMjU2LTIKK2Fsd2F5cyBcdTQzQTYgMjM0NS00CithbHdheXMgXHU0M0E3IDEzNS0xMzQ2LTUKK2Fsd2F5cyBcdTQzQTggMzQ2LTUKK2Fsd2F5cyBcdTQzQTkgMTI1LTE1Ni0zCithbHdheXMgXHU0M0FBIDEzNDUtMjM0Ni01CithbHdheXMgXHU0M0FCIDEyNS0xMjM0Ni0zCithbHdheXMgXHU0M0FDIDEzNS0zNDUtNQorYWx3YXlzIFx1NDNBRCAyNDUtMTQ2LTMKK2Fsd2F5cyBcdTQzQUUgMTI0LTE2LTUKK2Fsd2F5cyBcdTQzQUYgMTIzNS0xMjM2LTUKK2Fsd2F5cyBcdTQzQjAgMTI1LTI1LTIKK2Fsd2F5cyBcdTQzQjEgMTM1LTM0NS01CithbHdheXMgXHU0M0IyIDEtMjM0Ni0yCithbHdheXMgXHU0M0IzIDIzNi01CithbHdheXMgXHU0M0I0IDEzLTEzNTYtMworYWx3YXlzIFx1NDNCNSAxMzQtMTYtNQorYWx3YXlzIFx1NDNCNiAxNTYtNQorYWx3YXlzIFx1NDNCNyAxLTM0LTUKK2Fsd2F5cyBcdTQzQjggMzQtNQorYWx3YXlzIFx1NDNCOSAxMjM0NTYtMgorYWx3YXlzIFx1NDNCQSAxLTE1Ni01CithbHdheXMgXHU0M0JCIDEtMTIzNTYtNQorYWx3YXlzIFx1NDNCQyAxNC0zNC01CithbHdheXMgXHU0M0JEIDI0LTEzNTYtMworYWx3YXlzIFx1NDNCRSAxMy0xMjM0NTYtNQorYWx3YXlzIFx1NDNCRiAyNDUtMjM0LTIKK2Fsd2F5cyBcdTQzQzAgMTQtMzQ1LTIKK2Fsd2F5cyBcdTQzQzEgMTI1LTI0NTYtNAorYWx3YXlzIFx1NDNDMiAxNS0xMjM1Ni00CithbHdheXMgXHU0M0MzIDEzNC0yMzQ1LTIKK2Fsd2F5cyBcdTQzQzQgMTQ1LTE2LTQKK2Fsd2F5cyBcdTQzQzUgMjQ1LTE2LTUKK2Fsd2F5cyBcdTQzQzYgMjQ1LTE0Ni0yCithbHdheXMgXHU0M0M3IDEyMzQtMjQ2LTUKK2Fsd2F5cyBcdTQzQzggMTQtMjM0NS0yCithbHdheXMgXHU0M0M5IDI0LTE1Ni0zCithbHdheXMgXHU0M0NBIDE0LTEyMzQ2LTIKK2Fsd2F5cyBcdTQzQ0IgMTUtMzQtNQorYWx3YXlzIFx1NDNDQyAxNS0xNi01CithbHdheXMgXHU0M0NEIDQ1LTMKK2Fsd2F5cyBcdTQzQ0UgMTIzNDUtMTM1Ni0yCithbHdheXMgXHU0M0NGIDE1LTEyNTYtMworYWx3YXlzIFx1NDNEMCAxMy0yMzYtMgorYWx3YXlzIFx1NDNEMSAxLTE1Ni01CithbHdheXMgXHU0M0QyIDEyMzQtMjM0NS01CithbHdheXMgXHU0M0QzIDEzLTEyNDU2LTQKK2Fsd2F5cyBcdTQzRDQgMTM0NS0xMjU2LTUKK2Fsd2F5cyBcdTQzRDUgMTI0NS0xMzYtNAorYWx3YXlzIFx1NDNENiAxLTEzNi01CithbHdheXMgXHU0M0Q3IDEzLTI0NTYtNQorYWx3YXlzIFx1NDNEOCAxMjM0LTE2LTQKK2Fsd2F5cyBcdTQzRDkgMTI0LTEyMzYtNAorYWx3YXlzIFx1NDNEQSAxMi0xNDYtNAorYWx3YXlzIFx1NDNEQiAxMi0xMjM0NTYtNAorYWx3YXlzIFx1NDNEQyAxMjM1LTIzNDYtMworYWx3YXlzIFx1NDNERCAxLTEyNDU2LTMKK2Fsd2F5cyBcdTQzREUgMTM0LTEyNi01CithbHdheXMgXHU0M0RGIDEzNS0zNDYtMgorYWx3YXlzIFx1NDNFMCAyNDUtMTYtNQorYWx3YXlzIFx1NDNFMSAyNC0xNTYtNQorYWx3YXlzIFx1NDNFMiAxMzUtMTYtNAorYWx3YXlzIFx1NDNFMyAyNDUtMTI1Ni0zCithbHdheXMgXHU0M0U0IDE1LTE0NTYtNQorYWx3YXlzIFx1NDNFNSAxMjQtMTIzNi0zCithbHdheXMgXHU0M0U2IDEzLTM1LTMKK2Fsd2F5cyBcdTQzRTcgMTM0NS0zNDUtNQorYWx3YXlzIFx1NDNFOCAxNDUtMTI0Ni0zCithbHdheXMgXHU0M0U5IDE1LTM0Ni0yCithbHdheXMgXHU0M0VBIDE1Ni01CithbHdheXMgXHU0M0VCIDE1LTIzNC0zCithbHdheXMgXHU0M0VDIDEzNC0xMjM1Ni0yCithbHdheXMgXHU0M0VFIDE1LTE2LTIKK2Fsd2F5cyBcdTQzRUYgMS0xNTYtNQorYWx3YXlzIFx1NDNGMCAxMjQ1LTEzNi00CithbHdheXMgXHU0M0YxIDEzLTEyNTYtMgorYWx3YXlzIFx1NDNGMiAxNDUtMzQ2LTIKK2Fsd2F5cyBcdTQzRjMgMS0yMzQ2LTUKK2Fsd2F5cyBcdTQzRjQgMjQtMTQ2LTUKK2Fsd2F5cyBcdTQzRjUgMTM0LTEzNTYtMgorYWx3YXlzIFx1NDNGNiAxMzUtMTYtNQorYWx3YXlzIFx1NDNGNyAxMjM1LTEyMzYtNQorYWx3YXlzIFx1NDNGOCAxMjU2LTIKK2Fsd2F5cyBcdTQzRjkgMTUtMjM0NS01CithbHdheXMgXHU0M0ZBIDEyMzQtMTM0Ni0zCithbHdheXMgXHU0M0ZCIDEzNDUtMTM1Ni0yCithbHdheXMgXHU0M0ZDIDI0NS0xMjM2LTIKK2Fsd2F5cyBcdTQzRkQgMTM1LTM0LTUKK2Fsd2F5cyBcdTQzRkUgMTIzNC0xMzQ2LTMKK2Fsd2F5cyBcdTQzRkYgMjQ1LTE2LTQKK2Fsd2F5cyBcdTQ0MDAgMTMtMTYtNQorYWx3YXlzIFx1NDQwMSAxLTI1LTIKK2Fsd2F5cyBcdTQ0MDIgMTQtMzQtNQorYWx3YXlzIFx1NDQwMyAxMy0yNTYtNAorYWx3YXlzIFx1NDQwNCAxMjM1LTEyMzYtNQorYWx3YXlzIFx1NDQwNSAxNS0xNi0zCithbHdheXMgXHU0NDA2IDI0NS0yNDU2LTQKK2Fsd2F5cyBcdTQ0MDcgMTItMTIzNDU2LTIKK2Fsd2F5cyBcdTQ0MDggMS0xNTYtMgorYWx3YXlzIFx1NDQwOSAxMjUtMTU2LTUKK2Fsd2F5cyBcdTQ0MEEgMTIzNS0xMjM0NTYtNQorYWx3YXlzIFx1NDQwQiAyNDUtMTIzNDYtMworYWx3YXlzIFx1NDQwQyAxMjQtMjM0NS00CithbHdheXMgXHU0NDBEIDEtMTIzNTYtNQorYWx3YXlzIFx1NDQwRSAxNDUtMTYtMworYWx3YXlzIFx1NDQwRiAxMi0xMjM0NTYtNAorYWx3YXlzIFx1NDQxMCAyNDUtMjM0LTMKK2Fsd2F5cyBcdTQ0MTEgMS0yMzQ2LTIKK2Fsd2F5cyBcdTQ0MTIgMS0zNDUtMworYWx3YXlzIFx1NDQxMyAxMjQ1LTEyMzU2LTIKK2Fsd2F5cyBcdTQ0MTQgMTM1LTIzNDUtNQorYWx3YXlzIFx1NDQxNSAxMy0xNi0yCithbHdheXMgXHU0NDE2IDE1LTE2LTMKK2Fsd2F5cyBcdTQ0MTcgMTQ1LTM0LTQKK2Fsd2F5cyBcdTQ0MTggMTMtMjM2LTIKK2Fsd2F5cyBcdTQ0MTkgMTMtMjM0Ni0yCithbHdheXMgXHU0NDFBIDEzLTE2LTIKK2Fsd2F5cyBcdTQ0MUIgMTQ1LTM0NS0zCithbHdheXMgXHU0NDFDIDEyLTEzNi0zCithbHdheXMgXHU0NDFEIDE1LTI1LTUKK2Fsd2F5cyBcdTQ0MUUgMTI0NS0yNS01CithbHdheXMgXHU0NDFGIDEzLTEyMzU2LTMKK2Fsd2F5cyBcdTQ0MjAgMTIzNS00NTYtNAorYWx3YXlzIFx1NDQyMSAyNDUtMTYtMgorYWx3YXlzIFx1NDQyMiAxLTEyMzU2LTUKK2Fsd2F5cyBcdTQ0MjMgMTUtMTIzNDU2LTQKK2Fsd2F5cyBcdTQ0MjQgMTItMjQ1Ni0zCithbHdheXMgXHU0NDI1IDEyMzQ2LTQKK2Fsd2F5cyBcdTQ0MjYgMTIzLTIzNDYtMworYWx3YXlzIFx1NDQyNyAxMjMtMTQ2LTUKK2Fsd2F5cyBcdTQ0MjggMTMtMzQtNAorYWx3YXlzIFx1NDQyOSAxMjMtMjQ1Ni00CithbHdheXMgXHU0NDJBIDEzLTQ1LTQKK2Fsd2F5cyBcdTQ0MkIgMjQ1LTEyMzQ2LTMKK2Fsd2F5cyBcdTQ0MkMgMjQ1LTE0Ni0yCithbHdheXMgXHU0NDJEIDEtMTU2LTUKK2Fsd2F5cyBcdTQ0MkUgMTItMTIzNi00CithbHdheXMgXHU0NDJGIDE0LTM1Ni0yCithbHdheXMgXHU0NDMwIDE1LTIzNC0zCithbHdheXMgXHU0NDMxIDEtMjQ1Ni0zCithbHdheXMgXHU0NDMyIDEtMjM0Ni0yCithbHdheXMgXHU0NDMzIDEyNTYtMgorYWx3YXlzIFx1NDQzNCAxMy0yNDU2LTUKK2Fsd2F5cyBcdTQ0MzUgMTIzNS00NTYtMgorYWx3YXlzIFx1NDQzNiAxMy0xNDU2LTQKK2Fsd2F5cyBcdTQ0MzcgMTQ1LTEyMzYtMworYWx3YXlzIFx1NDQzOCAxMjM1LTI1LTUKK2Fsd2F5cyBcdTQ0MzkgMTUtMTIzNTYtMworYWx3YXlzIFx1NDQzQSAxMjQtMTIzNi0yCithbHdheXMgXHU0NDNCIDEzLTM0LTMKK2Fsd2F5cyBcdTQ0M0MgMTUtMTYtNQorYWx3YXlzIFx1NDQzRCAxMzQtMTIzNi00CithbHdheXMgXHU0NDNFIDE0NS0yNS0yCithbHdheXMgXHU0NDNGIDE0Ni01CithbHdheXMgXHU0NDQwIDEyMzQtMTYtNQorYWx3YXlzIFx1NDQ0MSAzNC01CithbHdheXMgXHU0NDQyIDI0NTYtNAorYWx3YXlzIFx1NDQ0MyAxMzQtMTM1Ni0yCithbHdheXMgXHU0NDQ0IDEyMzQtMTYtNQorYWx3YXlzIFx1NDQ0NSAxMzQtMTM1Ni0yCithbHdheXMgXHU0NDQ2IDQ2LTQKK2Fsd2F5cyBcdTQ0NDcgMS0xNTYtMgorYWx3YXlzIFx1NDQ0OCAxMzUtMTI2LTIKK2Fsd2F5cyBcdTQ0NDkgMTM0NTYtMgorYWx3YXlzIFx1NDQ0QSAxMjQ2LTIKK2Fsd2F5cyBcdTQ0NEIgMTI0NS0xMzQ2LTQKK2Fsd2F5cyBcdTQ0NEMgMTQtMTIzNi0yCithbHdheXMgXHU0NDREIDIzNDUtMworYWx3YXlzIFx1NDQ0RSAyNDUtMjM0NS0zCithbHdheXMgXHU0NDRGIDI0NS00NS0yCithbHdheXMgXHU0NDUwIDEtMTM2LTQKK2Fsd2F5cyBcdTQ0NTEgMTIzNC0zNC0yCithbHdheXMgXHU0NDUyIDEzLTE0NTYtNQorYWx3YXlzIFx1NDQ1MyAxMjQtMjQ1Ni0yCithbHdheXMgXHU0NDU0IDEyMzQ1LTM1Ni01CithbHdheXMgXHU0NDU1IDI0LTM0LTQKK2Fsd2F5cyBcdTQ0NTcgMTQ1LTEzNDYtNQorYWx3YXlzIFx1NDQ1OCAyNDUtMjUtMgorYWx3YXlzIFx1NDQ1OSAxMjQ1LTEyMzYtMgorYWx3YXlzIFx1NDQ1QSAxMjQtMjM0NS0yCithbHdheXMgXHU0NDVCIDI0LTE1Ni01CithbHdheXMgXHU0NDVDIDEyNC0zNDUtNQorYWx3YXlzIFx1NDQ1RCAxMy0yMzQ1Ni00CithbHdheXMgXHU0NDVFIDI0LTEyMzQ1Ni01CithbHdheXMgXHU0NDVGIDEyMzUtNDU2LTIKK2Fsd2F5cyBcdTQ0NjAgMTQtMjQ2LTQKK2Fsd2F5cyBcdTQ0NjEgMTItMzQ1LTMKK2Fsd2F5cyBcdTQ0NjIgMzQtNQorYWx3YXlzIFx1NDQ2MyAxMi0xMzYtMworYWx3YXlzIFx1NDQ2NCAxMy0xNDU2LTUKK2Fsd2F5cyBcdTQ0NjUgMjM0Ni01CithbHdheXMgXHU0NDY2IDEzLTEyMzU2LTMKK2Fsd2F5cyBcdTQ0NjcgMTM1LTM0LTUKK2Fsd2F5cyBcdTQ0NjggMTQ1LTI1LTUKK2Fsd2F5cyBcdTQ0NjkgMTMtMzQtNAorYWx3YXlzIFx1NDQ2QSAyMzQ2LTUKK2Fsd2F5cyBcdTQ0NkIgMTM1LTEzNTYtMworYWx3YXlzIFx1NDQ2QyAyNDYtNQorYWx3YXlzIFx1NDQ2RCAxNDUtMTYtNQorYWx3YXlzIFx1NDQ2RiAxNDUtMTYtNQorYWx3YXlzIFx1NDQ3MCAxMzUtMzQtNQorYWx3YXlzIFx1NDQ3MSAxMjQ1Ni00CithbHdheXMgXHU0NDcyIDEyLTIzNDYtNQorYWx3YXlzIFx1NDQ3MyAxNC0xMjM0NTYtMgorYWx3YXlzIFx1NDQ3NCAyNDUtMTYtMgorYWx3YXlzIFx1NDQ3NSAxMzQtMzQtNQorYWx3YXlzIFx1NDQ3NiAyNDUtMjM0NS01CithbHdheXMgXHU0NDc4IDEyNS0xMjM0Ni0zCithbHdheXMgXHU0NDc5IDE1LTE0Ni0zCithbHdheXMgXHU0NDdBIDEyMzQ1LTEyMzYtMgorYWx3YXlzIFx1NDQ3QiAyMzQtMgorYWx3YXlzIFx1NDQ3QyAxMjUtMTIzNTYtMworYWx3YXlzIFx1NDQ3RCAxMjQtMzQ1LTUKK2Fsd2F5cyBcdTQ0N0YgMTUtMzQtNQorYWx3YXlzIFx1NDQ4MCAxMzUtMzQtNQorYWx3YXlzIFx1NDQ4MSAxNS0xNi0yCithbHdheXMgXHU0NDgyIDEzLTQ2LTQKK2Fsd2F5cyBcdTQ0ODMgMTI1LTE0Ni01CithbHdheXMgXHU0NDg0IDEyMzQ1LTM0LTUKK2Fsd2F5cyBcdTQ0ODUgMTI0LTEzNTYtMgorYWx3YXlzIFx1NDQ4NiAxMi0yMzQ2LTUKK2Fsd2F5cyBcdTQ0ODcgMTIzNDUtMzQtNQorYWx3YXlzIFx1NDQ4OCAxMjM0NS0zNTYtNQorYWx3YXlzIFx1NDQ4OSAzNC00CithbHdheXMgXHU0NDhBIDE1LTE2LTMKK2Fsd2F5cyBcdTQ0OEIgNDYtNAorYWx3YXlzIFx1NDQ4QyAxMzQtMTM0NTYtNQorYWx3YXlzIFx1NDQ4RCAxMjM0LTEzNDYtNAorYWx3YXlzIFx1NDQ4RSAxMzQtMTM0Ni00CithbHdheXMgXHU0NDhGIDE1LTEzNTYtMworYWx3YXlzIFx1NDQ5MCAxMzQtMTM1Ni0yCithbHdheXMgXHU0NDkxIDI0NS0xNDYtNAorYWx3YXlzIFx1NDQ5MiAxMjQtMjQ2LTIKK2Fsd2F5cyBcdTQ0OTMgMTIzLTI0NTYtNAorYWx3YXlzIFx1NDQ5NCAxMzUtMjQ1Ni01CithbHdheXMgXHU0NDk1IDE1LTI0Ni00CithbHdheXMgXHU0NDk2IDE1LTE0NTYtNQorYWx3YXlzIFx1NDQ5NyAyNDUtMTYtNQorYWx3YXlzIFx1NDQ5OCAxNS0xMjQ2LTMKK2Fsd2F5cyBcdTQ0OTkgMjQ1LTEzNDYtMgorYWx3YXlzIFx1NDQ5QSAyNC0xNDYtNAorYWx3YXlzIFx1NDQ5QiAxMjM1LTEyNDU2LTUKK2Fsd2F5cyBcdTQ0OUMgMTM0NS0yMzQtMgorYWx3YXlzIFx1NDQ5RCAxNS0yNDYtMgorYWx3YXlzIFx1NDQ5RSAxMi0xMzYtMgorYWx3YXlzIFx1NDQ5RiAxNDUtMTIzNi0zCithbHdheXMgXHU0NEEwIDEyMzQ1LTEzNTYtMworYWx3YXlzIFx1NDRBMSAxNDU2LTQKK2Fsd2F5cyBcdTQ0QTIgMTM0Ni0yCithbHdheXMgXHU0NEEzIDEyNDUtMTIzNi00CithbHdheXMgXHU0NEE0IDEyNDUtMTU2LTUKK2Fsd2F5cyBcdTQ0QTUgMTM0LTEyMzYtMgorYWx3YXlzIFx1NDRBNiAxMjM0NS0xMjM2LTUKK2Fsd2F5cyBcdTQ0QTcgMjQ1LTEyNTYtNQorYWx3YXlzIFx1NDRBOCAyNC0xNTYtNAorYWx3YXlzIFx1NDRBOSAxMjM1LTIzNDYtMgorYWx3YXlzIFx1NDRBQSAxMzUtMjM0NS01CithbHdheXMgXHU0NEFCIDE0NS0yNDU2LTUKK2Fsd2F5cyBcdTQ0QUMgMTM0LTEyNi01CithbHdheXMgXHU0NEFEIDE0NS0xMzU2LTQKK2Fsd2F5cyBcdTQ0QUUgMTIzNS0xMzQ2LTIKK2Fsd2F5cyBcdTQ0QjAgMTIzLTQ1Ni0zCithbHdheXMgXHU0NEIxIDEtMTM1Ni0zCithbHdheXMgXHU0NEIyIDEtMzQ1LTUKK2Fsd2F5cyBcdTQ0QjMgMTQ1LTI1LTQKK2Fsd2F5cyBcdTQ0QjQgMjM0LTQKK2Fsd2F5cyBcdTQ0QjUgMTIzNS0xNDYtNQorYWx3YXlzIFx1NDRCNiAxMjQtMjM0NS0zCithbHdheXMgXHU0NEI3IDEzLTM1LTMKK2Fsd2F5cyBcdTQ0QjggMTUtMjM2LTUKK2Fsd2F5cyBcdTQ0QjkgMTQtMzU2LTUKK2Fsd2F5cyBcdTQ0QkEgMTMtMTQ1Ni00CithbHdheXMgXHU0NEJCIDI0NS0xNi00CithbHdheXMgXHU0NEJDIDI0NS0xMjU2LTMKK2Fsd2F5cyBcdTQ0QkQgNDU2LTQKK2Fsd2F5cyBcdTQ0QkUgMTYtMworYWx3YXlzIFx1NDRCRiAxNC0yNDYtMgorYWx3YXlzIFx1NDRDMSAxNDUtMTM1Ni00CithbHdheXMgXHU0NEMyIDIzNDUtMgorYWx3YXlzIFx1NDRDMyAxNi01CithbHdheXMgXHU0NEM0IDIzNDUtMgorYWx3YXlzIFx1NDRDNSAyNDUtMTQ1Ni0yCithbHdheXMgXHU0NEM2IDEtMjM0Ni01CithbHdheXMgXHU0NEM3IDEyMzUtMjM0Ni01CithbHdheXMgXHU0NEM4IDE2LTUKK2Fsd2F5cyBcdTQ0QzkgMTUtMzQ2LTIKK2Fsd2F5cyBcdTQ0Q0EgMzQtMgorYWx3YXlzIFx1NDRDQiAxLTE1Ni0zCithbHdheXMgXHU0NENDIDEtMTU2LTUKK2Fsd2F5cyBcdTQ0Q0QgMTIzNS0xMjM2LTQKK2Fsd2F5cyBcdTQ0Q0UgMTItMjUtNQorYWx3YXlzIFx1NDRDRiAxMjM0NS0xMjM1Ni0yCithbHdheXMgXHU0NEQwIDEyLTEyMzQ1Ni0yCithbHdheXMgXHU0NEQxIDEyMzQtMTM0NTYtMgorYWx3YXlzIFx1NDREMiAxMjMtMjM1Ni00CithbHdheXMgXHU0NEQzIDI0LTEyMzYtNQorYWx3YXlzIFx1NDRENSAxMjQ2LTQKK2Fsd2F5cyBcdTQ0RDYgMjQ1LTIzNS0yCithbHdheXMgXHU0NEQ3IDI0NS0xMjM0Ni0zCithbHdheXMgXHU0NEQ4IDEzLTIzNC01CithbHdheXMgXHU0NEQ5IDEzLTIzNTYtMworYWx3YXlzIFx1NDREQSAyNDUtMTI1Ni0zCithbHdheXMgXHU0NERCIDEzLTM0LTQKK2Fsd2F5cyBcdTQ0REMgMS0xNTYtMworYWx3YXlzIFx1NDRERCAxMzQtMTM1Ni01CithbHdheXMgXHU0NERFIDE0LTE2LTUKK2Fsd2F5cyBcdTQ0REYgMS0xMjM1Ni0zCithbHdheXMgXHU0NEUwIDEyNC0zNDUtNQorYWx3YXlzIFx1NDRFMSAxLTE1Ni0zCithbHdheXMgXHU0NEUyIDEzLTM0LTUKK2Fsd2F5cyBcdTQ0RTMgMTQtNDYtNAorYWx3YXlzIFx1NDRFNCAxMjM1LTM0LTMKK2Fsd2F5cyBcdTQ0RTUgMTQtMzQ1LTUKK2Fsd2F5cyBcdTQ0RTYgMTQ1LTIzNDUtNAorYWx3YXlzIFx1NDRFNyAxMy0xNi0yCithbHdheXMgXHU0NEU4IDEzNDU2LTMKK2Fsd2F5cyBcdTQ0RUEgMTQ1LTEzNDYtNQorYWx3YXlzIFx1NDRFQiAyNDUtMTYtMgorYWx3YXlzIFx1NDRFRCAyNC0zNDUtNQorYWx3YXlzIFx1NDRFRSAxMzQtMTQ2LTUKK2Fsd2F5cyBcdTQ0RUYgMTQ1LTM0LTIKK2Fsd2F5cyBcdTQ0RjAgMTQ1Ni0zCithbHdheXMgXHU0NEYxIDEyNS0xMjQ2LTMKK2Fsd2F5cyBcdTQ0RjIgMTI0NS0xMjQ2LTUKK2Fsd2F5cyBcdTQ0RjMgMTIzNS0xMzYtNAorYWx3YXlzIFx1NDRGNCAxMjQ1LTEyNDU2LTQKK2Fsd2F5cyBcdTQ0RjUgMTIzNDUtMzQtMworYWx3YXlzIFx1NDRGNiAxNC0zNDUtNQorYWx3YXlzIFx1NDRGNyAxNS0xMzQ1Ni01CithbHdheXMgXHU0NEY4IDEzLTIzNDUtMworYWx3YXlzIFx1NDRGOSAxNi01CithbHdheXMgXHU0NEZBIDEzNC0xNi0yCithbHdheXMgXHU0NEZCIDEyMy0xMjM1Ni01CithbHdheXMgXHU0NEZDIDEyMzUtMjM0Ni01CithbHdheXMgXHU0NEZEIDEzLTE2LTUKK2Fsd2F5cyBcdTQ0RkUgMTUtMjUtMworYWx3YXlzIFx1NDRGRiAxMjM1LTEyMzYtNQorYWx3YXlzIFx1NDUwMCAxMjQ1LTEyNDYtMgorYWx3YXlzIFx1NDUwMSAxNC0xNi01CithbHdheXMgXHU0NTAyIDEyNS0xNTYtNAorYWx3YXlzIFx1NDUwMyAxMjUtMzQtNAorYWx3YXlzIFx1NDUwNCAyNDYtNQorYWx3YXlzIFx1NDUwNSAxMy0yMzQ2LTMKK2Fsd2F5cyBcdTQ1MDYgMTM0LTI0NTYtMgorYWx3YXlzIFx1NDUwNyAyNDUtMTYtNAorYWx3YXlzIFx1NDUwOCAxMy0xMjM0Ni01CithbHdheXMgXHU0NTA5IDE0LTE2LTUKK2Fsd2F5cyBcdTQ1MEEgMTM1LTEzNDU2LTMKK2Fsd2F5cyBcdTQ1MEIgMjQtMzQ1LTMKK2Fsd2F5cyBcdTQ1MEMgMTMtMTQ2LTMKK2Fsd2F5cyBcdTQ1MEQgMTQ1LTM0LTQKK2Fsd2F5cyBcdTQ1MEUgMTUtMzQtNQorYWx3YXlzIFx1NDUwRiAxMi0xMjM1Ni01CithbHdheXMgXHU0NTEwIDEzLTIzNDUtMworYWx3YXlzIFx1NDUxMSAxNS0zNDYtMgorYWx3YXlzIFx1NDUxMiAxMzUtMzU2LTUKK2Fsd2F5cyBcdTQ1MTMgMTUtMTI1Ni00CithbHdheXMgXHU0NTE0IDEzLTEzNDU2LTUKK2Fsd2F5cyBcdTQ1MTUgMTIzNC0zNC0yCithbHdheXMgXHU0NTE2IDE0LTEzNDU2LTIKK2Fsd2F5cyBcdTQ1MTcgMTUtNDYtMgorYWx3YXlzIFx1NDUxOCAxMjUtMjUtNQorYWx3YXlzIFx1NDUxOSAxNDUtMjQ2LTUKK2Fsd2F5cyBcdTQ1MUEgMTItMTIzNDU2LTIKK2Fsd2F5cyBcdTQ1MUIgMjQ1LTEzNDU2LTQKK2Fsd2F5cyBcdTQ1MUMgMTM0NS0xMjM2LTIKK2Fsd2F5cyBcdTQ1MUQgMS0yNDU2LTMKK2Fsd2F5cyBcdTQ1MUUgMTQtMTI1Ni01CithbHdheXMgXHU0NTFGIDE2LTIKK2Fsd2F5cyBcdTQ1MjAgMjQtMTQ2LTQKK2Fsd2F5cyBcdTQ1MjEgMTI1Ni0yCithbHdheXMgXHU0NTIyIDEyMzUtMzUtMgorYWx3YXlzIFx1NDUyMyAxNC0xNi0yCithbHdheXMgXHU0NTI0IDEyMzQtMzQ1LTMKK2Fsd2F5cyBcdTQ1MjUgMTUtMjQ2LTMKK2Fsd2F5cyBcdTQ1MjYgMTM0LTM1Ni0yCithbHdheXMgXHU0NTI3IDE0LTE2LTIKK2Fsd2F5cyBcdTQ1MjggMTI0Ni0yCithbHdheXMgXHU0NTI5IDE1LTM0LTUKK2Fsd2F5cyBcdTQ1MkEgMjQtNDU2LTQKK2Fsd2F5cyBcdTQ1MkIgMjQtMzQtMworYWx3YXlzIFx1NDUyQyAxNi01CithbHdheXMgXHU0NTJEIDEzNDUtMTM0NTYtNQorYWx3YXlzIFx1NDUyRSAxNS0xNTYtMworYWx3YXlzIFx1NDUyRiAxMjMtMzQtNQorYWx3YXlzIFx1NDUzMCAxMjM0NS0zNC0yCithbHdheXMgXHU0NTMxIDE2LTMKK2Fsd2F5cyBcdTQ1MzIgMTQ1LTEzNTYtMworYWx3YXlzIFx1NDUzMyAxMjQ1LTEyMzYtMgorYWx3YXlzIFx1NDUzNCAyNDUtMjM0Ni01CithbHdheXMgXHU0NTM1IDEzLTIzNDUtMworYWx3YXlzIFx1NDUzNiAxMjQtMTYtMgorYWx3YXlzIFx1NDUzNyAyNDUtMTQ1Ni0yCithbHdheXMgXHU0NTM4IDEzNS0yNDYtNAorYWx3YXlzIFx1NDUzOSAxNS0xMjQ2LTUKK2Fsd2F5cyBcdTQ1M0EgMTI0Ni0yCithbHdheXMgXHU0NTNCIDE0NS0xMjM0NTYtMworYWx3YXlzIFx1NDUzQyAxMy0xNi0yCithbHdheXMgXHU0NTNEIDI0NTYtNQorYWx3YXlzIFx1NDUzRSAyMzQ2LTUKK2Fsd2F5cyBcdTQ1M0YgMTI1LTEyMzQ1Ni00CithbHdheXMgXHU0NTQwIDEyMy0xMjQ1Ni00CithbHdheXMgXHU0NTQxIDEyMzQ1LTM1Ni00CithbHdheXMgXHU0NTQzIDE0NTYtNQorYWx3YXlzIFx1NDU0NCAxLTEzNTYtMworYWx3YXlzIFx1NDU0NSAxNS0xNDYtNAorYWx3YXlzIFx1NDU0NiAxNDUtMTIzNTYtNQorYWx3YXlzIFx1NDU0NyAxMjM1LTEyNDYtNQorYWx3YXlzIFx1NDU0OCAxNS0zNDYtNQorYWx3YXlzIFx1NDU0OSAxMjUtMjM0Ni0yCithbHdheXMgXHU0NTRBIDEyNC0xMjM2LTIKK2Fsd2F5cyBcdTQ1NEIgMTI0LTEzNDYtMgorYWx3YXlzIFx1NDU0QyAxLTE1Ni01CithbHdheXMgXHU0NTREIDE2LTUKK2Fsd2F5cyBcdTQ1NEUgMTIzNDUtMzQtMgorYWx3YXlzIFx1NDU0RiAyMzQ2LTIKK2Fsd2F5cyBcdTQ1NTEgMTUtMTI0Ni0zCithbHdheXMgXHU0NTUyIDEzLTIzNDU2LTMKK2Fsd2F5cyBcdTQ1NTMgMTItMzQ1LTIKK2Fsd2F5cyBcdTQ1NTQgMTUtMjM0NS0yCithbHdheXMgXHU0NTU1IDEzNC0xMjM2LTUKK2Fsd2F5cyBcdTQ1NTYgMTUtMTIzNDU2LTMKK2Fsd2F5cyBcdTQ1NTcgMTM1LTE2LTUKK2Fsd2F5cyBcdTQ1NTggMTQtMTM0NTYtMgorYWx3YXlzIFx1NDU1OSAxMy0zNDYtMgorYWx3YXlzIFx1NDU1QSAxMjMtMTI0Ni01CithbHdheXMgXHU0NTVCIDEzLTIzNDU2LTIKK2Fsd2F5cyBcdTQ1NUMgMjQ1LTEyNDYtNQorYWx3YXlzIFx1NDU1RCAyNC0xMzU2LTUKK2Fsd2F5cyBcdTQ1NUUgMTQtMTM0Ni01CithbHdheXMgXHU0NTVGIDE1LTEzNDU2LTMKK2Fsd2F5cyBcdTQ1NjAgMTIzNDUtMzU2LTUKK2Fsd2F5cyBcdTQ1NjEgMTQtMTI1Ni0yCithbHdheXMgXHU0NTYyIDEtMzQ1LTQKK2Fsd2F5cyBcdTQ1NjMgMTIzNS0yMzQ2LTIKK2Fsd2F5cyBcdTQ1NjQgMjQ1LTE2LTIKK2Fsd2F5cyBcdTQ1NjUgMTM0NS0xNi00CithbHdheXMgXHU0NTY2IDEzNDU2LTIKK2Fsd2F5cyBcdTQ1NjcgMTUtMjQ2LTUKK2Fsd2F5cyBcdTQ1NjggMTI0LTEzNTYtMgorYWx3YXlzIFx1NDU2OSAxNC0xNDYtNAorYWx3YXlzIFx1NDU2QSAxLTIzNDYtMgorYWx3YXlzIFx1NDU2QiAxMjMtMTI0Ni0yCithbHdheXMgXHU0NTZDIDEzLTQ2LTMKK2Fsd2F5cyBcdTQ1NkQgMjQ1LTIzNDUtMgorYWx3YXlzIFx1NDU2RSAxMy0xMjU2LTIKK2Fsd2F5cyBcdTQ1NkYgMTIzNC0yNDYtMgorYWx3YXlzIFx1NDU3MCAxMjM0NS0xMjM2LTIKK2Fsd2F5cyBcdTQ1NzEgMTI0LTEyMzU2LTIKK2Fsd2F5cyBcdTQ1NzIgMTQtMTQ1Ni00CithbHdheXMgXHU0NTczIDEzNC0xNi0yCithbHdheXMgXHU0NTc0IDEtMjUtMgorYWx3YXlzIFx1NDU3NSAxNS0zNDYtMgorYWx3YXlzIFx1NDU3NiAxMjM1LTM0LTUKK2Fsd2F5cyBcdTQ1NzcgMTM0LTE2LTIKK2Fsd2F5cyBcdTQ1NzggMTMtMzQ2LTMKK2Fsd2F5cyBcdTQ1NzkgMTMtMzQ2LTIKK2Fsd2F5cyBcdTQ1N0EgMjQ1LTEyMzQ2LTIKK2Fsd2F5cyBcdTQ1N0IgMTQtMTYtNQorYWx3YXlzIFx1NDU3QyAxMjQ1LTEyMzYtMgorYWx3YXlzIFx1NDU3RCAxLTM0LTIKK2Fsd2F5cyBcdTQ1N0UgMjM0NS0yCithbHdheXMgXHU0NTdGIDEyMzUtMTIzNi01CithbHdheXMgXHU0NTgwIDE1LTI0Ni0zCithbHdheXMgXHU0NTgxIDE2LTUKK2Fsd2F5cyBcdTQ1ODIgMTQtNDUtMgorYWx3YXlzIFx1NDU4MyAyMzYtNQorYWx3YXlzIFx1NDU4NCAxMjQ1LTEyMzYtMgorYWx3YXlzIFx1NDU4NSAxNC0xMzQ1Ni0yCithbHdheXMgXHU0NTg2IDEzNDUtNDYtNQorYWx3YXlzIFx1NDU4NyAxMjU2LTUKK2Fsd2F5cyBcdTQ1ODggMTM0NS0yMzYtNQorYWx3YXlzIFx1NDU4OSAxNS0xMjU2LTMKK2Fsd2F5cyBcdTQ1OEEgMTYtNQorYWx3YXlzIFx1NDU4QiAxMzQ1LTIzNi01CithbHdheXMgXHU0NThDIDE2LTUKK2Fsd2F5cyBcdTQ1OEQgMjQ1LTIzNDUtMgorYWx3YXlzIFx1NDU4RSAxNS0yMzQ1Ni0yCithbHdheXMgXHU0NThGIDEyLTM0LTUKK2Fsd2F5cyBcdTQ1OTAgMTQ1Ni0yCithbHdheXMgXHU0NTkxIDEzNC0xNi01CithbHdheXMgXHU0NTkyIDE1LTE2LTMKK2Fsd2F5cyBcdTQ1OTMgMTM0NS0zNDUtNQorYWx3YXlzIFx1NDU5NCAxMjM1LTEyMzYtNQorYWx3YXlzIFx1NDU5NSAyNDUtMjUtMgorYWx3YXlzIFx1NDU5NiAxNS0yMzQ1Ni0yCithbHdheXMgXHU0NTk3IDIzNDUtMgorYWx3YXlzIFx1NDU5OCAxMjQtMzQtMgorYWx3YXlzIFx1NDU5OSAxMjQtMTYtMworYWx3YXlzIFx1NDU5QSAzNC0zCithbHdheXMgXHU0NTlCIDE1LTI1LTQKK2Fsd2F5cyBcdTQ1OUMgMTQ1Ni0yCithbHdheXMgXHU0NTlEIDEyMzUtMTI0Ni00CithbHdheXMgXHU0NTlFIDEtMTIzNTYtNAorYWx3YXlzIFx1NDU5RiAxMzQtMTM1Ni0yCithbHdheXMgXHU0NUEwIDQ1LTIKK2Fsd2F5cyBcdTQ1QTEgMTM0NS0xMjU2LTUKK2Fsd2F5cyBcdTQ1QTIgMTM0LTI0Ni0yCithbHdheXMgXHU0NUEzIDEyNS0xNDYtNAorYWx3YXlzIFx1NDVBNCAxMjQ1Ni0zCithbHdheXMgXHU0NUE1IDEzNC0xNDYtMgorYWx3YXlzIFx1NDVBNiAyNDUtMTI1Ni0zCithbHdheXMgXHU0NUE3IDEzNDUtMzQ1LTUKK2Fsd2F5cyBcdTQ1QTggMS0xNTYtMworYWx3YXlzIFx1NDVBOSAxMzUtMTYtNQorYWx3YXlzIFx1NDVBQSAxMjUtMTU2LTMKK2Fsd2F5cyBcdTQ1QUIgMTM1LTEzNDYtNQorYWx3YXlzIFx1NDVBQyAxMy0yMzQ1Ni00CithbHdheXMgXHU0NUFEIDEzLTQ1LTUKK2Fsd2F5cyBcdTQ1QUUgMTUtNDYtNQorYWx3YXlzIFx1NDVBRiAxMjMtMTI0Ni0yCithbHdheXMgXHU0NUIwIDEyMzQtMjQ1Ni01CithbHdheXMgXHU0NUIxIDEyMy00NTYtMworYWx3YXlzIFx1NDVCMiAxNS0yNTYtMgorYWx3YXlzIFx1NDVCMyAxLTM0NS01CithbHdheXMgXHU0NUI0IDI0Ni0yCithbHdheXMgXHU0NUI1IDEyMy0xMjM0NTYtMworYWx3YXlzIFx1NDVCNiAxMjM1LTEyNDYtMworYWx3YXlzIFx1NDVCNyAxNS0xNi0zCithbHdheXMgXHU0NUI4IDIzNDYtMgorYWx3YXlzIFx1NDVCOSA0Ni0yCithbHdheXMgXHU0NUJBIDEyNC0yNDYtMgorYWx3YXlzIFx1NDVCQiAyMzQtMgorYWx3YXlzIFx1NDVCQyAxMy0yMzYtMgorYWx3YXlzIFx1NDVCRCAxNC0xNi0yCithbHdheXMgXHU0NUJGIDE0LTE2LTIKK2Fsd2F5cyBcdTQ1QzAgMTItMTM1Ni0zCithbHdheXMgXHU0NUMxIDEzLTE2LTUKK2Fsd2F5cyBcdTQ1QzIgMTIzNS0zNC00CithbHdheXMgXHU0NUMzIDEtMTIzNi01CithbHdheXMgXHU0NUM0IDEyMzQ1LTM0LTQKK2Fsd2F5cyBcdTQ1QzUgMTItMTM0Ni0yCithbHdheXMgXHU0NUM2IDEzLTEyNDU2LTQKK2Fsd2F5cyBcdTQ1QzcgMTMtMTI1Ni0yCithbHdheXMgXHU0NUM4IDEzNC0xMzU2LTIKK2Fsd2F5cyBcdTQ1QzkgMTItMTM0Ni0zCithbHdheXMgXHU0NUNBIDEyNC0xMjM2LTUKK2Fsd2F5cyBcdTQ1Q0IgMTM0LTEyMzU2LTIKK2Fsd2F5cyBcdTQ1Q0MgMTUtMTM0NTYtMworYWx3YXlzIFx1NDVDRCAxNC0xNi0yCithbHdheXMgXHU0NUNFIDIzNDUtMworYWx3YXlzIFx1NDVDRiAxNS0xMjM1Ni0zCithbHdheXMgXHU0NUQwIDI0LTE1Ni0zCithbHdheXMgXHU0NUQxIDE2LTUKK2Fsd2F5cyBcdTQ1RDIgMTM1LTEzNDU2LTUKK2Fsd2F5cyBcdTQ1RDMgMjQ1LTEyMzQ2LTMKK2Fsd2F5cyBcdTQ1RDQgMTIzNS0xMjM1Ni01CithbHdheXMgXHU0NUQ1IDEyNDU2LTMKK2Fsd2F5cyBcdTQ1RDYgMTQ1LTE2LTUKK2Fsd2F5cyBcdTQ1RDcgMTMtMTYtMworYWx3YXlzIFx1NDVEOCAxMy0yMzQ2LTQKK2Fsd2F5cyBcdTQ1RDkgMTIzNS0xMjM2LTIKK2Fsd2F5cyBcdTQ1REEgMTM1LTEyNi0yCithbHdheXMgXHU0NURCIDE1LTIzNC0zCithbHdheXMgXHU0NURDIDE0LTIzNC0yCithbHdheXMgXHU0NUREIDI0NS0xMjM2LTIKK2Fsd2F5cyBcdTQ1REUgMjQ1LTEyMzYtMgorYWx3YXlzIFx1NDVERiAxNi01CithbHdheXMgXHU0NUUwIDE1LTQ1LTIKK2Fsd2F5cyBcdTQ1RTEgMjM0NS0yCithbHdheXMgXHU0NUUyIDEyNS0xNDYtNAorYWx3YXlzIFx1NDVFMyAxMjM1LTEyMzYtMworYWx3YXlzIFx1NDVFNCAyMzUtMgorYWx3YXlzIFx1NDVFNSAxMjUtMTIzNDYtMworYWx3YXlzIFx1NDVFNiAxMjM0NS0xMzU2LTMKK2Fsd2F5cyBcdTQ1RTcgMTIzLTEzNDYtMworYWx3YXlzIFx1NDVFOCAxMjU2LTIKK2Fsd2F5cyBcdTQ1RTkgMjQ1LTE2LTMKK2Fsd2F5cyBcdTQ1RUEgMS0yMzQ2LTUKK2Fsd2F5cyBcdTQ1RUIgMTM0LTM0NS0xCithbHdheXMgXHU0NUVDIDEyMzQ1LTEzNTYtMworYWx3YXlzIFx1NDVFRSAyNC00NTYtNAorYWx3YXlzIFx1NDVFRiAxMy0xNDU2LTUKK2Fsd2F5cyBcdTQ1RjAgMTMtMTI0NTYtNQorYWx3YXlzIFx1NDVGMSAxMjM0LTM0LTIKK2Fsd2F5cyBcdTQ1RjIgMTQtMTQ1Ni01CithbHdheXMgXHU0NUY0IDEyNC0xMzQ1Ni0yCithbHdheXMgXHU0NUY1IDEzLTQ2LTMKK2Fsd2F5cyBcdTQ1RjYgMTQtMzQ1LTUKK2Fsd2F5cyBcdTQ1RjcgMTYtNQorYWx3YXlzIFx1NDVGOCAyMzUtMworYWx3YXlzIFx1NDVGOSAyNDUtMTU2LTUKK2Fsd2F5cyBcdTQ1RkEgMjM0NS00CithbHdheXMgXHU0NUZCIDEzLTM0Ni0yCithbHdheXMgXHU0NUZDIDE1LTI1Ni0zCithbHdheXMgXHU0NUZEIDEyNDYtNQorYWx3YXlzIFx1NDVGRSAxNS0yMzQ1LTQKK2Fsd2F5cyBcdTQ1RkYgMTM0NS0xMzQ1Ni0yCithbHdheXMgXHU0NjAwIDEyMzQ1LTM0LTUKK2Fsd2F5cyBcdTQ2MDEgMTMtMzQ2LTIKK2Fsd2F5cyBcdTQ2MDIgMTMtMjM0NS0zCithbHdheXMgXHU0NjAzIDEzNC0xMjYtNQorYWx3YXlzIFx1NDYwNCAxLTM0LTUKK2Fsd2F5cyBcdTQ2MDUgMTM0NS0yNDU2LTUKK2Fsd2F5cyBcdTQ2MDYgMjQ1LTIzNDUtNAorYWx3YXlzIFx1NDYwNyAxMjM0NTYtMgorYWx3YXlzIFx1NDYwOCAxNC0xNi01CithbHdheXMgXHU0NjA5IDI0NS0xMjM2LTIKK2Fsd2F5cyBcdTQ2MEEgMTM0LTM0Ni01CithbHdheXMgXHU0NjBCIDEzLTIzNDUtMworYWx3YXlzIFx1NDYwQyAxMzQ1LTE2LTUKK2Fsd2F5cyBcdTQ2MEQgMTItMjQ1Ni01CithbHdheXMgXHU0NjBFIDEyNDU2LTMKK2Fsd2F5cyBcdTQ2MEYgMTUtMTI1Ni01CithbHdheXMgXHU0NjEwIDEzNDUtMTI1Ni01CithbHdheXMgXHU0NjExIDEzNC0yNDU2LTUKK2Fsd2F5cyBcdTQ2MTIgMTI1LTEyNDYtMworYWx3YXlzIFx1NDYxMyAxMjMtMTIzNi01CithbHdheXMgXHU0NjE0IDEyMy0zNDUtNQorYWx3YXlzIFx1NDYxNSAxMjM1LTEzNDYtMgorYWx3YXlzIFx1NDYxNiAxMjU2LTUKK2Fsd2F5cyBcdTQ2MTcgMTIzNS0xMjQ2LTMKK2Fsd2F5cyBcdTQ2MTggMTI1Ni01CithbHdheXMgXHU0NjE5IDEyNDYtNQorYWx3YXlzIFx1NDYxQSAxMjUtMzQtMgorYWx3YXlzIFx1NDYxQiAxMy0xNi0zCithbHdheXMgXHU0NjFDIDEzLTE0NTYtMworYWx3YXlzIFx1NDYxRCAxNi01CithbHdheXMgXHU0NjFFIDE1LTI0Ni0zCithbHdheXMgXHU0NjFGIDE0NS0yNDYtMworYWx3YXlzIFx1NDYyMCAxMjM0NS0zNC0yCithbHdheXMgXHU0NjIxIDEzNS0xNi00CithbHdheXMgXHU0NjIyIDEtMzQtNAorYWx3YXlzIFx1NDYyMyAxMjUtMTU2LTQKK2Fsd2F5cyBcdTQ2MjQgMjQtMzQtNQorYWx3YXlzIFx1NDYyNSAxNS0yMzQ1Ni0yCithbHdheXMgXHU0NjI2IDEzNDUtMTYtMgorYWx3YXlzIFx1NDYyNyA0Ni0zCithbHdheXMgXHU0NjI4IDEzLTI0Ni00CithbHdheXMgXHU0NjI5IDE1LTQ1LTUKK2Fsd2F5cyBcdTQ2MkEgMTItMTIzNDYtMworYWx3YXlzIFx1NDYyQiAxMjQ1LTM0LTIKK2Fsd2F5cyBcdTQ2MkMgMTI0NS0xMjM0Ni0yCithbHdheXMgXHU0NjJEIDEtMTU2LTUKK2Fsd2F5cyBcdTQ2MkUgMTUtMTM0Ni0zCithbHdheXMgXHU0NjJGIDI0LTE0Ni0zCithbHdheXMgXHU0NjMwIDI0LTEyMzYtMworYWx3YXlzIFx1NDYzMSAxMjU2LTUKK2Fsd2F5cyBcdTQ2MzIgMjQ1LTE0NTYtMworYWx3YXlzIFx1NDYzMyAxMy0xNDU2LTMKK2Fsd2F5cyBcdTQ2MzQgMS0xMjM0Ni0zCithbHdheXMgXHU0NjM1IDE0LTM0LTUKK2Fsd2F5cyBcdTQ2MzYgMTIzNS0xMjM2LTUKK2Fsd2F5cyBcdTQ2MzcgMTM1LTM0Ni0zCithbHdheXMgXHU0NjM4IDEtMTU2LTUKK2Fsd2F5cyBcdTQ2MzkgMTI1LTEyNDYtNQorYWx3YXlzIFx1NDYzQSAxLTEyMzYtNQorYWx3YXlzIFx1NDYzQiAxMjU2LTUKK2Fsd2F5cyBcdTQ2M0MgMTI0NTYtNAorYWx3YXlzIFx1NDYzRCAxMzQ1LTE2LTIKK2Fsd2F5cyBcdTQ2M0UgMTMtMTI0NTYtNAorYWx3YXlzIFx1NDYzRiAxMy0yMzYtMgorYWx3YXlzIFx1NDY0MCAxMzUtMTM1Ni0zCithbHdheXMgXHU0NjQxIDI0NS0xMjM2LTIKK2Fsd2F5cyBcdTQ2NDIgMS0xMjM0Ni0zCithbHdheXMgXHU0NjQzIDE0NS0yNS01CithbHdheXMgXHU0NjQ0IDI0NS0xNi01CithbHdheXMgXHU0NjQ1IDI0Ni01CithbHdheXMgXHU0NjQ2IDEyMy0xMjQ2LTUKK2Fsd2F5cyBcdTQ2NDcgMTM0NS0xMjQ1Ni00CithbHdheXMgXHU0NjQ4IDEyMzUtMTIzNTYtMgorYWx3YXlzIFx1NDY0OSAxNS0yNTYtMgorYWx3YXlzIFx1NDY0QSAxLTI1LTIKK2Fsd2F5cyBcdTQ2NEMgMTIzNS0xMjQ2LTUKK2Fsd2F5cyBcdTQ2NEUgMTUtMzQ2LTIKK2Fsd2F5cyBcdTQ2NEYgMTM1LTEyNi0yCithbHdheXMgXHU0NjUwIDEyMy0yMzQ2LTUKK2Fsd2F5cyBcdTQ2NTEgMjQ1LTEyNDYtMworYWx3YXlzIFx1NDY1MiAxNS0xMjU2LTUKK2Fsd2F5cyBcdTQ2NTMgMTM1LTI0NTYtNAorYWx3YXlzIFx1NDY1NCAxMjM1Ni0zCithbHdheXMgXHU0NjU1IDEyNS0xMjM0Ni00CithbHdheXMgXHU0NjU2IDEzNS0xMzU2LTMKK2Fsd2F5cyBcdTQ2NTcgMTI0LTE2LTUKK2Fsd2F5cyBcdTQ2NTggMTItMzQtNAorYWx3YXlzIFx1NDY1OSAxMi0xNTYtMgorYWx3YXlzIFx1NDY1QSAxMzQ1LTI0Ni00CithbHdheXMgXHU0NjVCIDEzLTEyMzQ1Ni00CithbHdheXMgXHU0NjVDIDEyMzQ1LTEzNTYtMgorYWx3YXlzIFx1NDY1RCAxNS0zNDYtNQorYWx3YXlzIFx1NDY1RSAxNDUtMTM1Ni0zCithbHdheXMgXHU0NjVGIDEyNDYtMgorYWx3YXlzIFx1NDY2MCAxMy0yMzYtMgorYWx3YXlzIFx1NDY2MSAxMjM1LTEyNDYtNQorYWx3YXlzIFx1NDY2MiAxMjUtMTM1Ni01CithbHdheXMgXHU0NjYzIDE1LTM0NS01CithbHdheXMgXHU0NjY0IDE0NS0yNS00CithbHdheXMgXHU0NjY1IDE0LTEzNDU2LTIKK2Fsd2F5cyBcdTQ2NjYgMTM0LTEzNTYtMgorYWx3YXlzIFx1NDY2NyAxNS0yNTYtMworYWx3YXlzIFx1NDY2OCAxMy0yNS00CithbHdheXMgXHU0NjY5IDEzNC0xMzU2LTIKK2Fsd2F5cyBcdTQ2NkEgMTIzNC0xMjM2LTUKK2Fsd2F5cyBcdTQ2NkMgMTM0NTYtNQorYWx3YXlzIFx1NDY2RCAyNDUtMjM0NS0zCithbHdheXMgXHU0NjZFIDEzLTEyNDU2LTUKK2Fsd2F5cyBcdTQ2NkYgMTItMzQtNAorYWx3YXlzIFx1NDY3MCAxNC0xNi0yCithbHdheXMgXHU0NjcxIDI0LTM0LTIKK2Fsd2F5cyBcdTQ2NzIgMjQ1LTIzNDUtMworYWx3YXlzIFx1NDY3MyAxMjM0LTI0Ni01CithbHdheXMgXHU0Njc0IDI0NS0yMzQ1LTMKK2Fsd2F5cyBcdTQ2NzUgMTUtMTYtMworYWx3YXlzIFx1NDY3NiAxMzQ1LTEyMzQ2LTIKK2Fsd2F5cyBcdTQ2NzcgMTQ1LTIzNDYtMgorYWx3YXlzIFx1NDY3OCAxNDUtMjM0Ni0yCithbHdheXMgXHU0Njc5IDE1LTIzNDUtNQorYWx3YXlzIFx1NDY3QSAxNC0yMzQ1LTIKK2Fsd2F5cyBcdTQ2N0IgMjQ1LTE1Ni0zCithbHdheXMgXHU0NjdDIDI0LTE0Ni01CithbHdheXMgXHU0NjdEIDE1LTM0Ni0yCithbHdheXMgXHU0NjdFIDI0LTE1Ni0zCithbHdheXMgXHU0NjdGIDEyNDYtNQorYWx3YXlzIFx1NDY4MCAxMi0xMzYtNQorYWx3YXlzIFx1NDY4MSAxMi0xMzYtMworYWx3YXlzIFx1NDY4MiAxMjM1LTIzNDYtNQorYWx3YXlzIFx1NDY4MyAyMzQtMgorYWx3YXlzIFx1NDY4NCAxNC0zNC01CithbHdheXMgXHU0Njg1IDE0LTI0NTYtNQorYWx3YXlzIFx1NDY4NiAxMzQ1Ni00CithbHdheXMgXHU0Njg3IDI0LTEzNTYtNAorYWx3YXlzIFx1NDY4OCAxMy00NS01CithbHdheXMgXHU0Njg5IDI0NS0xNi01CithbHdheXMgXHU0NjhBIDEzLTIzNDUtNQorYWx3YXlzIFx1NDY4QiAyNTYtNQorYWx3YXlzIFx1NDY4QyAxMy0xNDYtMworYWx3YXlzIFx1NDY4RCAyNDUtMTYtNQorYWx3YXlzIFx1NDY4RSAxMi00NTYtMworYWx3YXlzIFx1NDY4RiAxNC0xNDU2LTUKK2Fsd2F5cyBcdTQ2OTAgMTMtMTYtMgorYWx3YXlzIFx1NDY5MSAxMzQtMjQ1Ni0yCithbHdheXMgXHU0NjkyIDEyLTQ1Ni0yCithbHdheXMgXHU0NjkzIDI0LTEzNi00CithbHdheXMgXHU0Njk0IDEyMzQtMTQ1Ni01CithbHdheXMgXHU0Njk1IDE0LTE2LTUKK2Fsd2F5cyBcdTQ2OTYgMTQtMTM0NTYtMgorYWx3YXlzIFx1NDY5NyAxMy00Ni0zCithbHdheXMgXHU0Njk4IDEyLTEzNTYtMgorYWx3YXlzIFx1NDY5OSAxMjUtMzQ1LTMKK2Fsd2F5cyBcdTQ2OUEgMTUtMjM0NS00CithbHdheXMgXHU0NjlCIDEyMzUtMzQtMgorYWx3YXlzIFx1NDY5QyAxMzUtMTYtMworYWx3YXlzIFx1NDY5RCAxMjUtMzQtMgorYWx3YXlzIFx1NDY5RSAxNDUtMjQ1Ni00CithbHdheXMgXHU0NjlGIDE0NS0yNDU2LTQKK2Fsd2F5cyBcdTQ2QTAgMTIzNS0xMjM0NTYtNQorYWx3YXlzIFx1NDZBMSAxNS0yNDU2LTMKK2Fsd2F5cyBcdTQ2QTIgMTItMjM0Ni01CithbHdheXMgXHU0NkEzIDEyNC0xNi0yCithbHdheXMgXHU0NkE1IDEzNDUtMjUtNQorYWx3YXlzIFx1NDZBNiAxLTE1Ni01CithbHdheXMgXHU0NkE3IDE0LTIzNC0yCithbHdheXMgXHU0NkE4IDEyMzQ1LTM1Ni01CithbHdheXMgXHU0NkE5IDEzLTI0Ni00CithbHdheXMgXHU0NkFBIDEzLTEyNDU2LTMKK2Fsd2F5cyBcdTQ2QUIgMTUtMTYtMgorYWx3YXlzIFx1NDZBQyAxNC0xNDU2LTIKK2Fsd2F5cyBcdTQ2QUQgMTUtNDUtMworYWx3YXlzIFx1NDZBRSAxMjQ1LTEzNTYtMgorYWx3YXlzIFx1NDZBRiAxMjQtMTQ2LTQKK2Fsd2F5cyBcdTQ2QjAgMTIzNC0xNi00CithbHdheXMgXHU0NkIxIDE1LTE0NTYtNQorYWx3YXlzIFx1NDZCMiAyNC0xMjM2LTUKK2Fsd2F5cyBcdTQ2QjMgMS0xNTYtNQorYWx3YXlzIFx1NDZCNCAyMzYtNQorYWx3YXlzIFx1NDZCNSAxMjQtMTIzNTYtNAorYWx3YXlzIFx1NDZCNiAxMjQtMjM0NS0zCithbHdheXMgXHU0NkI3IDE1LTE2LTUKK2Fsd2F5cyBcdTQ2QjggMTUtMzQ2LTUKK2Fsd2F5cyBcdTQ2QjkgMTIzNC0xNi00CithbHdheXMgXHU0NkJBIDI0Ni0yCithbHdheXMgXHU0NkJCIDI0Ni0yCithbHdheXMgXHU0NkJDIDEzNDUtMTI1Ni01CithbHdheXMgXHU0NkJEIDEyMzUtMTQ2LTUKK2Fsd2F5cyBcdTQ2QkUgMTM0NS0xNDU2LTIKK2Fsd2F5cyBcdTQ2QkYgMTQ1Ni01CithbHdheXMgXHU0NkMwIDEyMzQ1LTEyMzYtNAorYWx3YXlzIFx1NDZDMSAxMzQ1LTEyMzYtMgorYWx3YXlzIFx1NDZDMiAxMi0xNTYtNAorYWx3YXlzIFx1NDZDMyAxMjQ1Ni01CithbHdheXMgXHU0NkM0IDQ1LTUKK2Fsd2F5cyBcdTQ2QzUgMTUtMjM0NTYtMgorYWx3YXlzIFx1NDZDNiAxLTEyMzU2LTUKK2Fsd2F5cyBcdTQ2QzcgNDUtNAorYWx3YXlzIFx1NDZDOCAyNC0xNTYtNQorYWx3YXlzIFx1NDZDOSAxMzQtMjM0NS01CithbHdheXMgXHU0NkNBIDE1LTE2LTMKK2Fsd2F5cyBcdTQ2Q0IgMTMtMTYtNQorYWx3YXlzIFx1NDZDQyAxMjM0LTE0Ni0yCithbHdheXMgXHU0NkNEIDEyMzQ1LTM1Ni01CithbHdheXMgXHU0NkNFIDE1LTIzNi01CithbHdheXMgXHU0NkNGIDEzNDUtMTYtMgorYWx3YXlzIFx1NDZEMCAyNDUtMTU2LTIKK2Fsd2F5cyBcdTQ2RDEgMTM0LTE2LTUKK2Fsd2F5cyBcdTQ2RDIgMTM1LTIzNDUtNQorYWx3YXlzIFx1NDZEMyAxMy0yMzQ1LTMKK2Fsd2F5cyBcdTQ2RDQgMTM0NS0zNDUtMgorYWx3YXlzIFx1NDZENSAxMjU2LTIKK2Fsd2F5cyBcdTQ2RDYgMTYtNQorYWx3YXlzIFx1NDZENyAxLTE1Ni00CithbHdheXMgXHU0NkQ4IDEzNDUtMTQ1Ni0yCithbHdheXMgXHU0NkQ5IDE1LTEyNTYtNQorYWx3YXlzIFx1NDZEQSAxNC0yMzYtNQorYWx3YXlzIFx1NDZEQiAxMjM1LTEyNDYtNQorYWx3YXlzIFx1NDZEQyAxNS0yNTYtNQorYWx3YXlzIFx1NDZERCAxMzQ1LTE0Ni0yCithbHdheXMgXHU0NkRFIDEyMzUtMTIzNi01CithbHdheXMgXHU0NkRGIDEzLTIzNDU2LTIKK2Fsd2F5cyBcdTQ2RTAgMTQ1LTEyMzU2LTUKK2Fsd2F5cyBcdTQ2RTEgMTIzNS0zNS01CithbHdheXMgXHU0NkUyIDEyNC0zNC0zCithbHdheXMgXHU0NkUzIDEyMzQtMTM0NTYtMworYWx3YXlzIFx1NDZFNCAyNDUtMzQtNQorYWx3YXlzIFx1NDZFNSAxNS0xNi01CithbHdheXMgXHU0NkU2IDE1LTEyMzQ2LTUKK2Fsd2F5cyBcdTQ2RTcgMTM0LTE2LTIKK2Fsd2F5cyBcdTQ2RTggMTUtMTQ1Ni01CithbHdheXMgXHU0NkU5IDM0LTUKK2Fsd2F5cyBcdTQ2RUEgMjQ1LTIzNS01CithbHdheXMgXHU0NkVCIDEtMTM1Ni01CithbHdheXMgXHU0NkVDIDEyNC0xNDYtMgorYWx3YXlzIFx1NDZFRCAxNS0xMzQ1Ni01CithbHdheXMgXHU0NkVFIDEzLTIzNC01CithbHdheXMgXHU0NkVGIDEzLTEyNTYtNQorYWx3YXlzIFx1NDZGMCAxMjM1LTEyMzQ1Ni01CithbHdheXMgXHU0NkYxIDEyNC0xNi0yCithbHdheXMgXHU0NkYyIDEzNC0yMzQ1LTIKK2Fsd2F5cyBcdTQ2RjMgMjM0NS01CithbHdheXMgXHU0NkY0IDEzLTE2LTMKK2Fsd2F5cyBcdTQ2RjUgMjQtMTIzNTYtNQorYWx3YXlzIFx1NDZGNiAxNC0zNTYtNAorYWx3YXlzIFx1NDZGNyAxMjQ1Ni00CithbHdheXMgXHU0NkY4IDEtMTIzNi0zCithbHdheXMgXHU0NkY5IDI0NS0yMzQ1LTUKK2Fsd2F5cyBcdTQ2RkEgMTMtMzQ2LTUKK2Fsd2F5cyBcdTQ2RkIgMjM0LTUKK2Fsd2F5cyBcdTQ2RkMgMTIzNS0xMjQ2LTQKK2Fsd2F5cyBcdTQ2RkQgMTItMzQ1LTMKK2Fsd2F5cyBcdTQ2RkUgMTUtMzQtNQorYWx3YXlzIFx1NDZGRiAxMy0yMzQ2LTIKK2Fsd2F5cyBcdTQ3MDAgMTM0NS0xNDYtNAorYWx3YXlzIFx1NDcwMSAxNS0xNi01CithbHdheXMgXHU0NzAyIDEyMzUtMTQ2LTUKK2Fsd2F5cyBcdTQ3MDMgMTQ1LTEyNDYtMworYWx3YXlzIFx1NDcwNCAxMi0xNTYtMgorYWx3YXlzIFx1NDcwNSAxMjQ2LTIKK2Fsd2F5cyBcdTQ3MDYgMTM0LTEyNi01CithbHdheXMgXHU0NzA3IDEzLTEyMzQ1Ni00CithbHdheXMgXHU0NzA4IDEyLTE0Ni0zCithbHdheXMgXHU0NzA5IDI0NS0xNi0zCithbHdheXMgXHU0NzBBIDI0NS0xNDYtMgorYWx3YXlzIFx1NDcwQiAxMjM1LTEyNDYtNQorYWx3YXlzIFx1NDcwQyAxNC0xMjQ1Ni0yCithbHdheXMgXHU0NzBEIDE0LTI0Ni0yCithbHdheXMgXHU0NzBFIDE0LTE0Ni0yCithbHdheXMgXHU0NzBGIDEyNC0zNS0zCithbHdheXMgXHU0NzEwIDEyNC0zNS0zCithbHdheXMgXHU0NzExIDM0LTUKK2Fsd2F5cyBcdTQ3MTIgMTQ2LTUKK2Fsd2F5cyBcdTQ3MTMgMTQ1LTM0Ni0yCithbHdheXMgXHU0NzE0IDEyNC0yNS0zCithbHdheXMgXHU0NzE1IDEzNC0yNDU2LTUKK2Fsd2F5cyBcdTQ3MTYgMTI0LTEyMzYtNQorYWx3YXlzIFx1NDcxNyAxNS0xNDU2LTUKK2Fsd2F5cyBcdTQ3MTggMTMtMTM0NTYtNAorYWx3YXlzIFx1NDcxOSAxMjM2LTIKK2Fsd2F5cyBcdTQ3MUEgMTI0LTM0NS01CithbHdheXMgXHU0NzFCIDEyLTEyMzYtMgorYWx3YXlzIFx1NDcxQyAxMjQ2LTUKK2Fsd2F5cyBcdTQ3MUQgMTI0LTEyNDU2LTQKK2Fsd2F5cyBcdTQ3MUUgMTMtMTYtNQorYWx3YXlzIFx1NDcxRiAxMi0xMzYtNQorYWx3YXlzIFx1NDcyMCAxLTE1Ni01CithbHdheXMgXHU0NzIxIDEyNTYtNQorYWx3YXlzIFx1NDcyMiAxNS0yMzQ1LTQKK2Fsd2F5cyBcdTQ3MjMgMTUtMTQ1Ni0zCithbHdheXMgXHU0NzI0IDEyMzUtMTIzNDYtNQorYWx3YXlzIFx1NDcyNSAxNDUtMTIzNi01CithbHdheXMgXHU0NzI3IDEzNDUtMTQ2LTQKK2Fsd2F5cyBcdTQ3MjkgMjM0NS01CithbHdheXMgXHU0NzJBIDI0NS0yMzQtMgorYWx3YXlzIFx1NDcyQiAxMjM1LTEyMzQ2LTIKK2Fsd2F5cyBcdTQ3MkMgMTUtMTIzNDYtNAorYWx3YXlzIFx1NDcyRCAxMy0yNTYtNQorYWx3YXlzIFx1NDcyRSAxNC0yNDYtMgorYWx3YXlzIFx1NDcyRiAxMy0xMjU2LTIKK2Fsd2F5cyBcdTQ3MzAgMTIzNS0xNDYtMworYWx3YXlzIFx1NDczMSAxMzQtMTIzNi0yCithbHdheXMgXHU0NzMyIDE0LTM0Ni01CithbHdheXMgXHU0NzM0IDEyLTE1Ni00CithbHdheXMgXHU0NzM1IDEyLTE1Ni00CithbHdheXMgXHU0NzM2IDE1LTQ2LTIKK2Fsd2F5cyBcdTQ3MzcgMjQ1LTE0NTYtMworYWx3YXlzIFx1NDczOCAxMzQtMzU2LTQKK2Fsd2F5cyBcdTQ3MzkgMTUtMzQtMworYWx3YXlzIFx1NDczQSAyNDUtMjM0Ni01CithbHdheXMgXHU0NzNCIDEyLTE1Ni00CithbHdheXMgXHU0NzNDIDEzNC0zNC01CithbHdheXMgXHU0NzNEIDEyNTYtMgorYWx3YXlzIFx1NDczRSAxNDU2LTMKK2Fsd2F5cyBcdTQ3M0YgMjQtMzQtNQorYWx3YXlzIFx1NDc0MCAxNC0yMzQtMgorYWx3YXlzIFx1NDc0MSAxNC0xNDYtMgorYWx3YXlzIFx1NDc0MiAyNC0zNC01CithbHdheXMgXHU0NzQzIDEtMjM0Ni0yCithbHdheXMgXHU0NzQ0IDI0LTQ1Ni0zCithbHdheXMgXHU0NzQ1IDEyMzUtMTI0Ni0zCithbHdheXMgXHU0NzQ2IDEyMzUtMzQtMworYWx3YXlzIFx1NDc0NyAxMjM1LTEyNDYtMworYWx3YXlzIFx1NDc0OCAyMzQ2LTUKK2Fsd2F5cyBcdTQ3NDkgMTM0LTEzNTYtMgorYWx3YXlzIFx1NDc0QSAyNC0zNDUtNQorYWx3YXlzIFx1NDc0QiAxMjUtMTIzNDYtNQorYWx3YXlzIFx1NDc0QyAxMy0yMzYtMgorYWx3YXlzIFx1NDc0RCAxMy0yNTYtNQorYWx3YXlzIFx1NDc0RSAxMjQtMTI0NTYtMworYWx3YXlzIFx1NDc0RiAxNC0xMjM1Ni0yCithbHdheXMgXHU0NzUwIDEyNDYtNAorYWx3YXlzIFx1NDc1MSAxMi0xMjM0Ni0zCithbHdheXMgXHU0NzUyIDEtMzQtNQorYWx3YXlzIFx1NDc1MyAxNC0zNDYtNQorYWx3YXlzIFx1NDc1NCAxMjM1LTEyNDU2LTMKK2Fsd2F5cyBcdTQ3NTUgMS0yMzQ2LTIKK2Fsd2F5cyBcdTQ3NTYgMS0xNDYtNAorYWx3YXlzIFx1NDc1NyAxNS0yMzQtMworYWx3YXlzIFx1NDc1OCAxNi01CithbHdheXMgXHU0NzU5IDEyLTM0LTMKK2Fsd2F5cyBcdTQ3NUEgMTM0NS0xNi0yCithbHdheXMgXHU0NzVCIDEzNS0xMjYtMworYWx3YXlzIFx1NDc1QyAxNS0xMjQ1Ni0zCithbHdheXMgXHU0NzVEIDE2LTMKK2Fsd2F5cyBcdTQ3NUUgMTIzNS0xNDYtNQorYWx3YXlzIFx1NDc1RiAyMzQ1Ni01CithbHdheXMgXHU0NzYwIDQ1LTIKK2Fsd2F5cyBcdTQ3NjEgMTM0LTEyMzYtNQorYWx3YXlzIFx1NDc2MiAxMzQtMTIzNi01CithbHdheXMgXHU0NzYzIDI0NS0xMjU2LTIKK2Fsd2F5cyBcdTQ3NjQgMTQtMjQ2LTIKK2Fsd2F5cyBcdTQ3NjUgMTIzNS0xNDYtMgorYWx3YXlzIFx1NDc2NiAxLTEyMzQ2LTMKK2Fsd2F5cyBcdTQ3NjcgMTM0LTE0NTYtMgorYWx3YXlzIFx1NDc2OCAxNS0yMzQ1LTIKK2Fsd2F5cyBcdTQ3NjkgMS0xMzYtNQorYWx3YXlzIFx1NDc2QSAyNC0zNC0yCithbHdheXMgXHU0NzZCIDEyNS0yNS0yCithbHdheXMgXHU0NzZDIDEtMzQtNQorYWx3YXlzIFx1NDc2RCAxMy0xMjM1Ni01CithbHdheXMgXHU0NzZFIDE1LTQ1LTUKK2Fsd2F5cyBcdTQ3NkYgMTYtMgorYWx3YXlzIFx1NDc3MCAxLTE1Ni01CithbHdheXMgXHU0NzcxIDE1LTM0Ni0yCithbHdheXMgXHU0NzcyIDEzLTE0NTYtNQorYWx3YXlzIFx1NDc3MyAyNDUtMTIzNi0yCithbHdheXMgXHU0Nzc0IDEzLTE2LTMKK2Fsd2F5cyBcdTQ3NzUgMTM1LTM0LTUKK2Fsd2F5cyBcdTQ3NzYgMTQtNDYtMgorYWx3YXlzIFx1NDc3NyAxLTE1Ni0zCithbHdheXMgXHU0Nzc4IDEzLTE2LTUKK2Fsd2F5cyBcdTQ3NzkgMTI0NTYtNAorYWx3YXlzIFx1NDc3QSAxMy0xMjQ1Ni01CithbHdheXMgXHU0NzdCIDEzLTEyNTYtMworYWx3YXlzIFx1NDc3QyAyNDUtMTM0NTYtMgorYWx3YXlzIFx1NDc3RCAyNDU2LTUKK2Fsd2F5cyBcdTQ3N0UgMTIzNDUtMzQtNQorYWx3YXlzIFx1NDc3RiAxMy0xMjQ2LTUKK2Fsd2F5cyBcdTQ3ODAgMTIzNS0xMjM1Ni01CithbHdheXMgXHU0NzgxIDIzNDUtNAorYWx3YXlzIFx1NDc4MiAxMjQ1LTEyNDU2LTQKK2Fsd2F5cyBcdTQ3ODMgMS0xNTYtNQorYWx3YXlzIFx1NDc4NCAxMzUtMjQ2LTQKK2Fsd2F5cyBcdTQ3ODUgMTYtMgorYWx3YXlzIFx1NDc4NiAxNS0yNS00CithbHdheXMgXHU0Nzg3IDEtMTU2LTUKK2Fsd2F5cyBcdTQ3ODggMTMtMTI0Ni00CithbHdheXMgXHU0Nzg5IDI0LTEzNTYtNQorYWx3YXlzIFx1NDc4QSAxNS0yNTYtNQorYWx3YXlzIFx1NDc4QiAxMi0xMzYtNQorYWx3YXlzIFx1NDc4QyAyNC0xNTYtMgorYWx3YXlzIFx1NDc4RCAyNDUtMTM0NTYtMgorYWx3YXlzIFx1NDc4RSAxMi0xMzQ2LTMKK2Fsd2F5cyBcdTQ3OTAgMjQtMTIzNDU2LTQKK2Fsd2F5cyBcdTQ3OTEgMTIzNS0xMjM0Ni0yCithbHdheXMgXHU0NzkyIDE0NS0xMjM0Ni01CithbHdheXMgXHU0NzkzIDEyLTEzNTYtMworYWx3YXlzIFx1NDc5NCAxMjQ2LTQKK2Fsd2F5cyBcdTQ3OTUgMTI0NS0zNC0yCithbHdheXMgXHU0Nzk2IDI0LTM0LTQKK2Fsd2F5cyBcdTQ3OTcgMTItMjQ1Ni0zCithbHdheXMgXHU0Nzk4IDI0NS0xNi01CithbHdheXMgXHU0Nzk5IDEyNS0zNDUtMworYWx3YXlzIFx1NDc5QSAyNDUtMTYtMgorYWx3YXlzIFx1NDc5QiAzNC0zCithbHdheXMgXHU0NzlDIDEzNS0xMjYtMgorYWx3YXlzIFx1NDc5RCAxMjU2LTUKK2Fsd2F5cyBcdTQ3OUUgMTIzNDUtMzQtMgorYWx3YXlzIFx1NDc5RiAxMjM0LTEyNi01CithbHdheXMgXHU0N0EwIDEtMTU2LTMKK2Fsd2F5cyBcdTQ3QTEgMTI0LTEyMzYtNAorYWx3YXlzIFx1NDdBMiAxMjUtMjUtNQorYWx3YXlzIFx1NDdBMyAyNDUtMzQ2LTUKK2Fsd2F5cyBcdTQ3QTQgMjQ1LTEyNTYtMgorYWx3YXlzIFx1NDdBNSAyMzQtNQorYWx3YXlzIFx1NDdBNiAxMjM1LTIzNDYtMgorYWx3YXlzIFx1NDdBNyAxMjM1LTEyMzU2LTUKK2Fsd2F5cyBcdTQ3QTggMTIzLTEyNDYtNAorYWx3YXlzIFx1NDdBOSAyMzQ2LTUKK2Fsd2F5cyBcdTQ3QUEgMTMtNDYtNQorYWx3YXlzIFx1NDdBQiAyNTYtNAorYWx3YXlzIFx1NDdBQyAxMjQtMTIzNTYtNQorYWx3YXlzIFx1NDdBRCAyNDUtMjM0LTUKK2Fsd2F5cyBcdTQ3QUUgMTI0LTM0LTMKK2Fsd2F5cyBcdTQ3QUYgMTIzNDUtMzQtNQorYWx3YXlzIFx1NDdCMCAyNDUtMTYtNQorYWx3YXlzIFx1NDdCMSAxMjM1LTM0LTIKK2Fsd2F5cyBcdTQ3QjMgMTM1LTEyNi0yCithbHdheXMgXHU0N0I0IDEtMTQ2LTMKK2Fsd2F5cyBcdTQ3QjUgMTMtMjM2LTIKK2Fsd2F5cyBcdTQ3QjYgMTI0LTE2LTUKK2Fsd2F5cyBcdTQ3QjcgMTMtMjM2LTIKK2Fsd2F5cyBcdTQ3QjggMTM1LTEyNi0yCithbHdheXMgXHU0N0I5IDEyMzUtNDU2LTIKK2Fsd2F5cyBcdTQ3QkEgMTItMTIzNDU2LTMKK2Fsd2F5cyBcdTQ3QkIgMjM1LTQKK2Fsd2F5cyBcdTQ3QkMgMTItMTI0Ni00CithbHdheXMgXHU0N0JEIDE1LTI1LTQKK2Fsd2F5cyBcdTQ3QkUgMTQ1LTE2LTUKK2Fsd2F5cyBcdTQ3QkYgMjQ1LTIzNDUtMworYWx3YXlzIFx1NDdDMCAyNDUtMjQ1Ni0zCithbHdheXMgXHU0N0MxIDE1LTI0Ni0zCithbHdheXMgXHU0N0MyIDEzNC0xMjM2LTIKK2Fsd2F5cyBcdTQ3QzMgMjQ1LTEyMzYtMworYWx3YXlzIFx1NDdDNCAyNDUtMTYtNQorYWx3YXlzIFx1NDdDNSAxMy0yMzQ1LTUKK2Fsd2F5cyBcdTQ3QzYgMTM1LTE2LTUKK2Fsd2F5cyBcdTQ3QzcgMTMtMTYtMworYWx3YXlzIFx1NDdDOCAxLTE1Ni01CithbHdheXMgXHU0N0M5IDEtMzQtMgorYWx3YXlzIFx1NDdDQSAyNDUtMTI1Ni0yCithbHdheXMgXHU0N0NCIDEtMTIzNi00CithbHdheXMgXHU0N0NDIDEzLTE2LTIKK2Fsd2F5cyBcdTQ3Q0QgMTM1LTIzNDUtMworYWx3YXlzIFx1NDdDRSAxMjUtMTIzNi00CithbHdheXMgXHU0N0NGIDE0LTE2LTUKK2Fsd2F5cyBcdTQ3RDAgMTQtMTYtNQorYWx3YXlzIFx1NDdEMSAyMzYtNQorYWx3YXlzIFx1NDdEMiAyNDUtNDUtMgorYWx3YXlzIFx1NDdEMyAxNDUtMTM0NTYtMworYWx3YXlzIFx1NDdENCAxMjM0NS0zNC01CithbHdheXMgXHU0N0Q1IDEyLTM0NS01CithbHdheXMgXHU0N0Q2IDEtMTU2LTQKK2Fsd2F5cyBcdTQ3RDcgMjQtMTU2LTUKK2Fsd2F5cyBcdTQ3RDggMTIzNS0xMzQ2LTUKK2Fsd2F5cyBcdTQ3RDkgMjQ1LTM0Ni01CithbHdheXMgXHU0N0RBIDI0NS0xNi0yCithbHdheXMgXHU0N0RCIDEzNS0xMjYtMgorYWx3YXlzIFx1NDdEQyAxMzQ1LTM0NS01CithbHdheXMgXHU0N0REIDEyNC0xMjM1Ni01CithbHdheXMgXHU0N0RFIDEyLTM0LTIKK2Fsd2F5cyBcdTQ3REYgMjQ1LTM0LTUKK2Fsd2F5cyBcdTQ3RTAgMjM2LTUKK2Fsd2F5cyBcdTQ3RTEgMS0xNTYtMworYWx3YXlzIFx1NDdFMiAxMi0xMzYtNQorYWx3YXlzIFx1NDdFMyAxMi0zNC01CithbHdheXMgXHU0N0U0IDEzNS0xNi01CithbHdheXMgXHU0N0U1IDEzNC0xNDYtMgorYWx3YXlzIFx1NDdFNiAxMzUtMzQ1LTIKK2Fsd2F5cyBcdTQ3RTcgMTI0LTIzNDUtMgorYWx3YXlzIFx1NDdFOCAxMzQtMTQ1Ni0yCithbHdheXMgXHU0N0U5IDE0LTM0Ni00CithbHdheXMgXHU0N0VBIDEyMzQ1LTEyMzYtNAorYWx3YXlzIFx1NDdFQiAxMi0xMzU2LTIKK2Fsd2F5cyBcdTQ3RUMgMjQ1LTIzNC01CithbHdheXMgXHU0N0VEIDEyNC0yNDYtNQorYWx3YXlzIFx1NDdFRSAxMjM0NS0zNC0yCithbHdheXMgXHU0N0VGIDEyMy0yNS01CithbHdheXMgXHU0N0YwIDEzLTIzNDUtNAorYWx3YXlzIFx1NDdGMSAxMy0xNi0zCithbHdheXMgXHU0N0YzIDEyNTYtNAorYWx3YXlzIFx1NDdGNCAxLTEzNi01CithbHdheXMgXHU0N0Y1IDI0NS0yMzQtMgorYWx3YXlzIFx1NDdGNiAxMjUtMjUtNQorYWx3YXlzIFx1NDdGNyAxMi0xNTYtNQorYWx3YXlzIFx1NDdGOCAxMjMtMTI0Ni0yCithbHdheXMgXHU0N0Y5IDE0LTM0Ni01CithbHdheXMgXHU0N0ZBIDEyMzQtMzU2LTUKK2Fsd2F5cyBcdTQ3RkIgMTQ1LTM0LTUKK2Fsd2F5cyBcdTQ3RkMgMzQtNAorYWx3YXlzIFx1NDdGRCAyNC0zNC0zCithbHdheXMgXHU0N0ZFIDEtMjUtMgorYWx3YXlzIFx1NDdGRiAxNC0zNC01CithbHdheXMgXHU0ODAwIDEyLTEzNDYtNAorYWx3YXlzIFx1NDgwMSAxMy0xNi0zCithbHdheXMgXHU0ODAyIDEyLTM0LTQKK2Fsd2F5cyBcdTQ4MDMgMTQtNDYtNAorYWx3YXlzIFx1NDgwNCAxMjQtMjM0NS00CithbHdheXMgXHU0ODA1IDEyMy0xMjM0NTYtNAorYWx3YXlzIFx1NDgwNiAxMi0xMzQ2LTIKK2Fsd2F5cyBcdTQ4MDcgMTMtMjM2LTIKK2Fsd2F5cyBcdTQ4MDggMTI0LTM0LTIKK2Fsd2F5cyBcdTQ4MDkgMTIzNS0xMjQ1Ni01CithbHdheXMgXHU0ODBBIDEyMzQ1LTM1Ni01CithbHdheXMgXHU0ODBCIDEyMzQtMjM0NS0yCithbHdheXMgXHU0ODBEIDE1LTIzNDU2LTIKK2Fsd2F5cyBcdTQ4MEUgMjUtNQorYWx3YXlzIFx1NDgwRiAxMy0xNi01CithbHdheXMgXHU0ODEwIDI0NS0xMjU2LTUKK2Fsd2F5cyBcdTQ4MTEgMTI0Ni00CithbHdheXMgXHU0ODEyIDEyMzUtMzQtMgorYWx3YXlzIFx1NDgxMyAyNDUtMjM0LTMKK2Fsd2F5cyBcdTQ4MTQgMTUtMTI0Ni01CithbHdheXMgXHU0ODE1IDI0NS0yNDU2LTMKK2Fsd2F5cyBcdTQ4MTcgMjQ1LTIzNC01CithbHdheXMgXHU0ODE4IDEyMzQtMTYtNQorYWx3YXlzIFx1NDgxOSAxMjM0LTEzNDYtMgorYWx3YXlzIFx1NDgxQSAzNS01CithbHdheXMgXHU0ODFCIDI0Ni0yCithbHdheXMgXHU0ODFDIDEyNDUtMTIzNDYtMgorYWx3YXlzIFx1NDgxRCAxNS0yNTYtMworYWx3YXlzIFx1NDgxRSAyNDUtMzQtNQorYWx3YXlzIFx1NDgxRiAxNDUtMzQ2LTIKK2Fsd2F5cyBcdTQ4MjAgMTItMTU2LTUKK2Fsd2F5cyBcdTQ4MjEgMjQ1LTI1LTIKK2Fsd2F5cyBcdTQ4MjIgMTM0LTEzNTYtNQorYWx3YXlzIFx1NDgyMyAxNS00NS00CithbHdheXMgXHU0ODI0IDE0NS0yNS01CithbHdheXMgXHU0ODI1IDEzNS0zNDYtMgorYWx3YXlzIFx1NDgyNiAxLTE1Ni01CithbHdheXMgXHU0ODI3IDEyLTM0LTIKK2Fsd2F5cyBcdTQ4MjggMTItMTIzNi01CithbHdheXMgXHU0ODI5IDEzLTEyNDYtNQorYWx3YXlzIFx1NDgyQSAxNDUtMTI0NTYtNQorYWx3YXlzIFx1NDgyQiAxMjUtMTIzNTYtNQorYWx3YXlzIFx1NDgyQyAxNDUtMTM1Ni01CithbHdheXMgXHU0ODJEIDE0LTI0NTYtNQorYWx3YXlzIFx1NDgyRSAxMjQtMTM1Ni0yCithbHdheXMgXHU0ODJGIDIzNi01CithbHdheXMgXHU0ODMwIDI0NS00NS0yCithbHdheXMgXHU0ODMxIDEtMzQtMgorYWx3YXlzIFx1NDgzMiAxNC0xMzQ1Ni0yCithbHdheXMgXHU0ODMzIDEyLTEzNi0zCithbHdheXMgXHU0ODM0IDEyLTEzNi00CithbHdheXMgXHU0ODM1IDEyMzQ1LTM0LTUKK2Fsd2F5cyBcdTQ4MzYgMjQtMjM0Ni01CithbHdheXMgXHU0ODM3IDEyNC0yNDYtNAorYWx3YXlzIFx1NDgzOCAxMjMtMzUtMworYWx3YXlzIFx1NDgzOSAxMjM1LTI0NTYtMgorYWx3YXlzIFx1NDgzQiAyNDUtMjM1LTUKK2Fsd2F5cyBcdTQ4M0MgMjQtMzQtNQorYWx3YXlzIFx1NDgzRCAxMjM1LTI0NTYtMgorYWx3YXlzIFx1NDgzRSAyNC0xMjM2LTQKK2Fsd2F5cyBcdTQ4M0YgMjM1Ni01CithbHdheXMgXHU0ODQwIDEtMTIzNi00CithbHdheXMgXHU0ODQxIDE0LTEyMzQ2LTQKK2Fsd2F5cyBcdTQ4NDIgMTMtMjM0LTUKK2Fsd2F5cyBcdTQ4NDMgMTQtMTYtNQorYWx3YXlzIFx1NDg0NCAxMy0xMjQ2LTQKK2Fsd2F5cyBcdTQ4NDUgMTItMTIzNDU2LTMKK2Fsd2F5cyBcdTQ4NDYgMTI0NS0xMjM0Ni0yCithbHdheXMgXHU0ODQ3IDIzNi01CithbHdheXMgXHU0ODQ4IDEzLTI0Ni01CithbHdheXMgXHU0ODQ5IDEyMy0xMzQ2LTQKK2Fsd2F5cyBcdTQ4NEEgMTIzNDUtMTIzNi00CithbHdheXMgXHU0ODRCIDI0NS0xNi0yCithbHdheXMgXHU0ODRDIDEyMzUtMTIzNDYtMgorYWx3YXlzIFx1NDg0RCAxMjM0NS0zNC0yCithbHdheXMgXHU0ODRFIDE0LTM0LTIKK2Fsd2F5cyBcdTQ4NEYgMTIzNS0xMjM0Ni0yCithbHdheXMgXHU0ODUwIDEyNC0yNS0yCithbHdheXMgXHU0ODUxIDEzNC0xNDU2LTIKK2Fsd2F5cyBcdTQ4NTIgMTI0LTIzNDUtMgorYWx3YXlzIFx1NDg1MyAxMy00NS01CithbHdheXMgXHU0ODU0IDI0NS0xNi00CithbHdheXMgXHU0ODU1IDEtMTM1Ni00CithbHdheXMgXHU0ODU2IDI0NS0xMzQ1Ni0zCithbHdheXMgXHU0ODU3IDEzLTEyMzQ2LTQKK2Fsd2F5cyBcdTQ4NTggMTI0LTIzNDUtMgorYWx3YXlzIFx1NDg1OSAxNC00Ni0yCithbHdheXMgXHU0ODVBIDEzNC0xNDYtNQorYWx3YXlzIFx1NDg1QiAxNDU2LTUKK2Fsd2F5cyBcdTQ4NUMgMTQtMzQtNQorYWx3YXlzIFx1NDg1RCA0NS0zCithbHdheXMgXHU0ODVFIDEzLTEyNTYtMgorYWx3YXlzIFx1NDg1RiAxMjM0LTE2LTUKK2Fsd2F5cyBcdTQ4NjAgMTIzLTEzNTYtMworYWx3YXlzIFx1NDg2MSAxNS0zNDYtMgorYWx3YXlzIFx1NDg2MiAxMzUtMjM0NS00CithbHdheXMgXHU0ODYzIDEyMzUtMTIzNDU2LTIKK2Fsd2F5cyBcdTQ4NjQgMS0zNC0zCithbHdheXMgXHU0ODY1IDEyNDUtMTIzNDYtMgorYWx3YXlzIFx1NDg2NiAxNS0xMzQ2LTQKK2Fsd2F5cyBcdTQ4NjcgMzQtNAorYWx3YXlzIFx1NDg2OCAxMi0yNDU2LTIKK2Fsd2F5cyBcdTQ4NjkgMTIzLTEzNTYtMworYWx3YXlzIFx1NDg2QSAyNC0xMjM2LTUKK2Fsd2F5cyBcdTQ4NkIgMTIzNC0xMzU2LTIKK2Fsd2F5cyBcdTQ4NkMgMTM0LTEyMzYtNQorYWx3YXlzIFx1NDg2RCAxNS0yMzQtMworYWx3YXlzIFx1NDg2RSAxMjUtMTIzNDYtMworYWx3YXlzIFx1NDg2RiAyNDUtMTIzNDYtMworYWx3YXlzIFx1NDg3MCAxMjMtMTM1Ni00CithbHdheXMgXHU0ODcxIDEtMTI0NTYtNAorYWx3YXlzIFx1NDg3MiAxMi0xMjM2LTIKK2Fsd2F5cyBcdTQ4NzMgMTUtMTU2LTMKK2Fsd2F5cyBcdTQ4NzQgMTItMTIzNDYtMworYWx3YXlzIFx1NDg3NSAxNS0xMjQ2LTUKK2Fsd2F5cyBcdTQ4NzYgMTIzNC0xNi01CithbHdheXMgXHU0ODc3IDEyMy0yNDU2LTUKK2Fsd2F5cyBcdTQ4NzggMTM0LTM0Ni01CithbHdheXMgXHU0ODc5IDEtMTU2LTUKK2Fsd2F5cyBcdTQ4N0EgMTI0Ni01CithbHdheXMgXHU0ODdCIDEzNC0xNDU2LTIKK2Fsd2F5cyBcdTQ4N0MgMTQtMTM0NTYtMgorYWx3YXlzIFx1NDg3RCAxMjUtMTI0NTYtMworYWx3YXlzIFx1NDg3RSAxMzQ1LTM0Ni01CithbHdheXMgXHU0ODdGIDE0LTEzNDU2LTIKK2Fsd2F5cyBcdTQ4ODAgMjQ1LTE2LTUKK2Fsd2F5cyBcdTQ4ODEgMjM2LTUKK2Fsd2F5cyBcdTQ4ODIgMTMtMTI1Ni00CithbHdheXMgXHU0ODgzIDE2LTUKK2Fsd2F5cyBcdTQ4ODQgMTUtMTYtNAorYWx3YXlzIFx1NDg4NSAxMi0xMzYtMgorYWx3YXlzIFx1NDg4NiAxMjQ1LTM0LTUKK2Fsd2F5cyBcdTQ4ODcgMTI0NS0xMjM0Ni00CithbHdheXMgXHU0ODg4IDEyLTEzNi0yCithbHdheXMgXHU0ODg5IDEzNDUtMTIzNDYtMgorYWx3YXlzIFx1NDg4QSAyMzQtMgorYWx3YXlzIFx1NDg4QiAxMy0xNi01CithbHdheXMgXHU0ODhDIDEyMzQtMzU2LTUKK2Fsd2F5cyBcdTQ4OEQgMTIzNDUtMTM0Ni01CithbHdheXMgXHU0ODhFIDEzLTE2LTQKK2Fsd2F5cyBcdTQ4OTAgMjQ1LTM0LTIKK2Fsd2F5cyBcdTQ4OTEgMTQ1LTE2LTQKK2Fsd2F5cyBcdTQ4OTIgMTMtMjQ2LTMKK2Fsd2F5cyBcdTQ4OTMgMTI1Ni0yCithbHdheXMgXHU0ODk0IDEyMzUtMjM0Ni0yCithbHdheXMgXHU0ODk1IDE1LTEyNTYtNQorYWx3YXlzIFx1NDg5NiAxNC0xMjU2LTUKK2Fsd2F5cyBcdTQ4OTcgMjQ1LTEyNTYtMworYWx3YXlzIFx1NDg5OSAxMzUtMjQ1Ni01CithbHdheXMgXHU0ODlBIDEyMzUtMTM0Ni0yCithbHdheXMgXHU0ODlCIDEzLTIzNS00CithbHdheXMgXHU0ODlDIDEzLTEyNDYtMworYWx3YXlzIFx1NDg5RCAyMzQ1Ni01CithbHdheXMgXHU0ODlFIDI0LTM0LTUKK2Fsd2F5cyBcdTQ4OUYgMjM0LTIKK2Fsd2F5cyBcdTQ4QTAgMTUtMTIzNDYtNQorYWx3YXlzIFx1NDhBMSAzNDYtNQorYWx3YXlzIFx1NDhBMiAyNDUtMTM0Ni01CithbHdheXMgXHU0OEEzIDI0Ni0yCithbHdheXMgXHU0OEE0IDI0LTM0LTUKK2Fsd2F5cyBcdTQ4QTUgNDUtNQorYWx3YXlzIFx1NDhBNiAyNC0yMzU2LTUKK2Fsd2F5cyBcdTQ4QTcgMTQtMjQ2LTUKK2Fsd2F5cyBcdTQ4QTggMjQ1LTEyMzQ2LTIKK2Fsd2F5cyBcdTQ4QTkgMTI1Ni01CithbHdheXMgXHU0OEFBIDI0NS0yNDYtMworYWx3YXlzIFx1NDhBQiAxNS0xMjQ2LTIKK2Fsd2F5cyBcdTQ4QUMgMjQ1LTIzNDUtMworYWx3YXlzIFx1NDhBRCAyMzQ1LTUKK2Fsd2F5cyBcdTQ4QUUgMTQtMzU2LTUKK2Fsd2F5cyBcdTQ4QUYgMTQtMTQ1Ni0yCithbHdheXMgXHU0OEIwIDEyNC0xNi01CithbHdheXMgXHU0OEIxIDE0NS0zNC0yCithbHdheXMgXHU0OEIyIDIzNi01CithbHdheXMgXHU0OEIzIDEzLTE2LTQKK2Fsd2F5cyBcdTQ4QjQgMjQ1LTIzNDUtMworYWx3YXlzIFx1NDhCNSAyNTYtMgorYWx3YXlzIFx1NDhCNiAxMzUtMTM0Ni0zCithbHdheXMgXHU0OEI3IDEzNDUtMzQ1LTUKK2Fsd2F5cyBcdTQ4QjggMjQ1LTEyNTYtMworYWx3YXlzIFx1NDhCOSAxMy0xMjU2LTQKK2Fsd2F5cyBcdTQ4QkEgMTItMzQtMworYWx3YXlzIFx1NDhCQiAxMi0xMzYtMgorYWx3YXlzIFx1NDhCQyAxMy0xMjM0Ni0zCithbHdheXMgXHU0OEJEIDE1LTQ2LTUKK2Fsd2F5cyBcdTQ4QkUgMTUtMjM0NS00CithbHdheXMgXHU0OEJGIDEyMzYtMworYWx3YXlzIFx1NDhDMCAxMy0xMjQ2LTQKK2Fsd2F5cyBcdTQ4QzEgMTI1Ni00CithbHdheXMgXHU0OEMyIDE0LTM1Ni00CithbHdheXMgXHU0OEMzIDE1LTM0Ni01CithbHdheXMgXHU0OEM0IDEyNC0zNC0yCithbHdheXMgXHU0OEM1IDEyLTEzNi0yCithbHdheXMgXHU0OEM2IDE1LTEzNDU2LTIKK2Fsd2F5cyBcdTQ4QzcgMjQ1LTIzNC0yCithbHdheXMgXHU0OEM4IDE1LTQ2LTUKK2Fsd2F5cyBcdTQ4Q0EgMTQ1LTEzNDYtNAorYWx3YXlzIFx1NDhDQiAyNDUtMjQ1Ni00CithbHdheXMgXHU0OENDIDE0NS0xNi00CithbHdheXMgXHU0OENEIDIzNDUtNAorYWx3YXlzIFx1NDhDRSAxMjUtMTU2LTMKK2Fsd2F5cyBcdTQ4Q0YgMTMtMTIzNDYtMworYWx3YXlzIFx1NDhEMCAxMzQ1Ni0zCithbHdheXMgXHU0OEQxIDEyLTEyMzYtMgorYWx3YXlzIFx1NDhEMyAxNC0xNi0yCithbHdheXMgXHU0OEQ0IDE1LTI1LTQKK2Fsd2F5cyBcdTQ4RDUgMTM0LTM0NS00CithbHdheXMgXHU0OEQ2IDEzNC0zNDUtNQorYWx3YXlzIFx1NDhENyAxMy0xNDYtMworYWx3YXlzIFx1NDhEOCAxMjQtMTM0Ni0yCithbHdheXMgXHU0OEQ5IDEyMzQtMzU2LTIKK2Fsd2F5cyBcdTQ4REEgMTQtMTIzNTYtMgorYWx3YXlzIFx1NDhEQiAyNDUtMTYtMworYWx3YXlzIFx1NDhEQyAyNDUtMjUtMgorYWx3YXlzIFx1NDhERCAxMjQtMzQtMgorYWx3YXlzIFx1NDhERSAyMzQ2LTUKK2Fsd2F5cyBcdTQ4REYgMTUtMTYtMgorYWx3YXlzIFx1NDhFMCAxNS0xNi0yCithbHdheXMgXHU0OEUxIDE2LTIKK2Fsd2F5cyBcdTQ4RTIgMTMtMTYtMgorYWx3YXlzIFx1NDhFMyAxNDUtMTM0Ni00CithbHdheXMgXHU0OEU0IDI0NS0yMzYtNQorYWx3YXlzIFx1NDhFNSAxMzUtMTYtNAorYWx3YXlzIFx1NDhFNiAxNC0zNTYtNQorYWx3YXlzIFx1NDhFNyAxNi01CithbHdheXMgXHU0OEU4IDEyLTEyMzQ1Ni0yCithbHdheXMgXHU0OEU5IDEyLTEyMzQ1Ni0yCithbHdheXMgXHU0OEVBIDEyMzQtMTI2LTUKK2Fsd2F5cyBcdTQ4RUIgMTQtMTYtMgorYWx3YXlzIFx1NDhFQyAxNDUtMjQ1Ni01CithbHdheXMgXHU0OEVEIDIzNC0yCithbHdheXMgXHU0OEVFIDEzNS0xMjYtMgorYWx3YXlzIFx1NDhFRiAxMjQtMjM0NS00CithbHdheXMgXHU0OEYwIDEzLTEyNTYtNQorYWx3YXlzIFx1NDhGMSAxNS0xMjU2LTUKK2Fsd2F5cyBcdTQ4RjIgMTIzNDUtMTIzNi01CithbHdheXMgXHU0OEYzIDEyNS0yNS01CithbHdheXMgXHU0OEY0IDE1LTEyNTYtNQorYWx3YXlzIFx1NDhGNSAxNTYtNQorYWx3YXlzIFx1NDhGNiAxMjM1LTI1LTIKK2Fsd2F5cyBcdTQ4RjcgMS0zNC0zCithbHdheXMgXHU0OEY4IDEzNDUtMTIzNi00CithbHdheXMgXHU0OEY5IDEyMzQ1LTM0NS0zCithbHdheXMgXHU0OEZBIDEzLTQ1LTUKK2Fsd2F5cyBcdTQ4RkIgMTIzNS0xMjM2LTMKK2Fsd2F5cyBcdTQ4RkMgMTQtNDYtMgorYWx3YXlzIFx1NDhGRCAxLTE1Ni0zCithbHdheXMgXHU0OEZFIDEzNC0xNi01CithbHdheXMgXHU0OEZGIDEyNTYtMworYWx3YXlzIFx1NDkwMSAxNDU2LTMKK2Fsd2F5cyBcdTQ5MDIgMTM0LTM1Ni0yCithbHdheXMgXHU0OTAzIDE0NTYtMworYWx3YXlzIFx1NDkwNCAxMzQtMjM0NS00CithbHdheXMgXHU0OTA1IDEyNC0xMjM1Ni0yCithbHdheXMgXHU0OTA2IDEzLTEyNDYtNAorYWx3YXlzIFx1NDkwNyAxNS0xMjM1Ni0zCithbHdheXMgXHU0OTA4IDE1LTE2LTMKK2Fsd2F5cyBcdTQ5MDkgMTM0LTE2LTUKK2Fsd2F5cyBcdTQ5MEEgMTM0NS0xNi01CithbHdheXMgXHU0OTBCIDEyNTYtNQorYWx3YXlzIFx1NDkwQyAyNDUtNDYtMworYWx3YXlzIFx1NDkwRCAxMzQtMTYtMgorYWx3YXlzIFx1NDkwRSAxMy0xMjU2LTIKK2Fsd2F5cyBcdTQ5MEYgMTIzNC0xNi00CithbHdheXMgXHU0OTEwIDEzLTE0NTYtNAorYWx3YXlzIFx1NDkxMSA0NTYtNQorYWx3YXlzIFx1NDkxMiAxMy0xNi00CithbHdheXMgXHU0OTEzIDEzNC0xMzU2LTIKK2Fsd2F5cyBcdTQ5MTQgMTMtMjM0NS01CithbHdheXMgXHU0OTE1IDE1LTIzNi01CithbHdheXMgXHU0OTE2IDEzNS0xNDYtNQorYWx3YXlzIFx1NDkxNyAxMy0xMjM2LTQKK2Fsd2F5cyBcdTQ5MTggMTItMTIzNi00CithbHdheXMgXHU0OTE5IDE0LTE2LTUKK2Fsd2F5cyBcdTQ5MUEgMTQtMTYtNAorYWx3YXlzIFx1NDkxQiAyNDUtMjM0LTIKK2Fsd2F5cyBcdTQ5MUMgMTQ1LTEyMzQ1Ni01CithbHdheXMgXHU0OTFEIDI0NS0yMzUtMgorYWx3YXlzIFx1NDkxRSAyNTYtNAorYWx3YXlzIFx1NDkxRiAxMi0xMzYtMgorYWx3YXlzIFx1NDkyMCAxLTE1Ni00CithbHdheXMgXHU0OTIxIDEyNDUtMTIzNi00CithbHdheXMgXHU0OTIyIDEzNS0zNDUtMworYWx3YXlzIFx1NDkyMyAxNC0yMzYtNQorYWx3YXlzIFx1NDkyNCAxMjMtMjQ1Ni0zCithbHdheXMgXHU0OTI1IDEzLTEyNDYtNAorYWx3YXlzIFx1NDkyNiAyMzYtNQorYWx3YXlzIFx1NDkyNyAxMjM1LTEyNDYtNQorYWx3YXlzIFx1NDkyOCAxMjM0LTE2LTMKK2Fsd2F5cyBcdTQ5MjkgMTItMzQ1LTIKK2Fsd2F5cyBcdTQ5MkEgMTQ1LTI1LTUKK2Fsd2F5cyBcdTQ5MkIgMTItMTIzNi0yCithbHdheXMgXHU0OTJDIDI0LTM0NS0zCithbHdheXMgXHU0OTJEIDI0LTE1Ni01CithbHdheXMgXHU0OTJFIDI0LTIzNDYtNQorYWx3YXlzIFx1NDkyRiAxNS0xMzQ1Ni0yCithbHdheXMgXHU0OTMwIDEzNDU2LTIKK2Fsd2F5cyBcdTQ5MzEgMjQtMTU2LTUKK2Fsd2F5cyBcdTQ5MzIgMTItMTU2LTUKK2Fsd2F5cyBcdTQ5MzMgMzQ2LTUKK2Fsd2F5cyBcdTQ5MzQgMTIzNS0xMjM2LTIKK2Fsd2F5cyBcdTQ5MzUgMTIzNDUtMzU2LTUKK2Fsd2F5cyBcdTQ5MzYgMTIzNi0zCithbHdheXMgXHU0OTM3IDIzNDUtNAorYWx3YXlzIFx1NDkzOCAyNDUtMTIzNDYtMworYWx3YXlzIFx1NDkzOSAxNS0xMjM1Ni0zCithbHdheXMgXHU0OTNBIDEzLTE0NTYtMworYWx3YXlzIFx1NDkzQiAxNDUtMjUtNQorYWx3YXlzIFx1NDkzQyAyNDUtNDUtMgorYWx3YXlzIFx1NDkzRCAxMy0xMjQ1Ni0zCithbHdheXMgXHU0OTNFIDEyNC0xNDYtMworYWx3YXlzIFx1NDkzRiAyNDUtMzQ2LTUKK2Fsd2F5cyBcdTQ5NDAgMTItMTIzNi00CithbHdheXMgXHU0OTQxIDEyMzUtMTIzNi0yCithbHdheXMgXHU0OTQyIDEzNC0xMzU2LTUKK2Fsd2F5cyBcdTQ5NDMgMjM2LTUKK2Fsd2F5cyBcdTQ5NDQgMjQ1LTM0LTUKK2Fsd2F5cyBcdTQ5NDUgMjQ1LTE0NTYtMgorYWx3YXlzIFx1NDk0NiAxMy0xNDU2LTQKK2Fsd2F5cyBcdTQ5NDcgMjQtMTIzNi01CithbHdheXMgXHU0OTQ4IDEzNC0zNC00CithbHdheXMgXHU0OTQ5IDQ1LTMKK2Fsd2F5cyBcdTQ5NEEgMjQ1LTQ2LTMKK2Fsd2F5cyBcdTQ5NEIgMTIzNC0xMzU2LTMKK2Fsd2F5cyBcdTQ5NEMgMS0xMzU2LTUKK2Fsd2F5cyBcdTQ5NEQgMS0xNTYtNQorYWx3YXlzIFx1NDk0RSAxMi0xMjM0NTYtMgorYWx3YXlzIFx1NDk0RiAxMjU2LTQKK2Fsd2F5cyBcdTQ5NTAgMTM0LTEyMzU2LTIKK2Fsd2F5cyBcdTQ5NTEgMTM0LTI0NTYtNQorYWx3YXlzIFx1NDk1MiAyNDUtNDYtMgorYWx3YXlzIFx1NDk1MyAyNDUtMTYtMworYWx3YXlzIFx1NDk1NCAxNS0zNC01CithbHdheXMgXHU0OTU1IDEyMzQtMzQ2LTQKK2Fsd2F5cyBcdTQ5NTYgMTQ1LTIzNDUtNQorYWx3YXlzIFx1NDk1NyAxMjMtMTI0NTYtNAorYWx3YXlzIFx1NDk1OCAyNDUtMjUtNQorYWx3YXlzIFx1NDk1OSAxNS0xMjQ2LTUKK2Fsd2F5cyBcdTQ5NUEgMTItMzQtMworYWx3YXlzIFx1NDk1QiAxMy0zNDYtMgorYWx3YXlzIFx1NDk1QyAxMy0yMzQ1LTUKK2Fsd2F5cyBcdTQ5NUQgMTQ2LTIKK2Fsd2F5cyBcdTQ5NUUgMTMtMjQ2LTQKK2Fsd2F5cyBcdTQ5NUYgMzQ2LTUKK2Fsd2F5cyBcdTQ5NjAgMS0xMzYtMworYWx3YXlzIFx1NDk2MSAxNDUtMzQ2LTIKK2Fsd2F5cyBcdTQ5NjIgMTQtMTIzNDYtMgorYWx3YXlzIFx1NDk2MyAxMjUtMTQ2LTIKK2Fsd2F5cyBcdTQ5NjQgMTM1LTE0Ni01CithbHdheXMgXHU0OTY1IDE0LTIzNDUtMgorYWx3YXlzIFx1NDk2NiAxNDUtMjUtNQorYWx3YXlzIFx1NDk2NyAxNS00NS0yCithbHdheXMgXHU0OTY4IDE0LTEyNTYtMgorYWx3YXlzIFx1NDk2OSAxMjQ2LTIKK2Fsd2F5cyBcdTQ5NkEgMTUtMjM0NS00CithbHdheXMgXHU0OTZCIDEyNC0zNDYtNAorYWx3YXlzIFx1NDk2QyAxMzUtMTI2LTIKK2Fsd2F5cyBcdTQ5NkQgMS0xMzU2LTUKK2Fsd2F5cyBcdTQ5NkUgMS0zNC0yCithbHdheXMgXHU0OTZGIDEzNS0zNDUtNQorYWx3YXlzIFx1NDk3MCAxMzQtMTM1Ni0yCithbHdheXMgXHU0OTcxIDE1LTM0Ni00CithbHdheXMgXHU0OTcyIDEyMzU2LTMKK2Fsd2F5cyBcdTQ5NzMgMjM0LTMKK2Fsd2F5cyBcdTQ5NzQgMTMtNDUtMworYWx3YXlzIFx1NDk3NSAxNS0yNDYtNAorYWx3YXlzIFx1NDk3NiAxMy0yMzQ2LTIKK2Fsd2F5cyBcdTQ5NzcgMS0zNDUtMgorYWx3YXlzIFx1NDk3OCAxMzQtMTYtMgorYWx3YXlzIFx1NDk3QSAzNDYtMgorYWx3YXlzIFx1NDk3QyAzNC01CithbHdheXMgXHU0OTdEIDEyMzQtMTI2LTMKK2Fsd2F5cyBcdTQ5N0UgMTUtMzQ2LTQKK2Fsd2F5cyBcdTQ5N0YgMTM1LTE2LTUKK2Fsd2F5cyBcdTQ5ODAgMTI1Ni00CithbHdheXMgXHU0OTgxIDEzNS0xMzQ2LTMKK2Fsd2F5cyBcdTQ5ODIgMjQtMTIzNi01CithbHdheXMgXHU0OTgzIDEtMjUtMgorYWx3YXlzIFx1NDk4NSAyNC0xMjM2LTUKK2Fsd2F5cyBcdTQ5ODYgMTMtMjM2LTIKK2Fsd2F5cyBcdTQ5ODcgMTMtMTYtNQorYWx3YXlzIFx1NDk4OCAxMjUtMjUtNAorYWx3YXlzIFx1NDk4OSAxNS0xNTYtNQorYWx3YXlzIFx1NDk4QSAxMzQ1LTI0Ni00CithbHdheXMgXHU0OThCIDE0Ni0yCithbHdheXMgXHU0OThDIDEyLTM0LTUKK2Fsd2F5cyBcdTQ5OEQgMzQtNQorYWx3YXlzIFx1NDk4RSAxMy0xMjQ1Ni00CithbHdheXMgXHU0OThGIDE1LTM0Ni01CithbHdheXMgXHU0OTkwIDEyNC0xMzQ1Ni00CithbHdheXMgXHU0OTkxIDE1LTIzNi01CithbHdheXMgXHU0OTkyIDE0NS0xMzQ2LTUKK2Fsd2F5cyBcdTQ5OTMgMTItMTIzNi0zCithbHdheXMgXHU0OTk0IDEyNC0xMjM2LTQKK2Fsd2F5cyBcdTQ5OTUgMTIzNC0xMzU2LTMKK2Fsd2F5cyBcdTQ5OTYgMTUtMjM0NTYtMgorYWx3YXlzIFx1NDk5NyAxNS0xMjU2LTUKK2Fsd2F5cyBcdTQ5OTggMTUtMjM0NS01CithbHdheXMgXHU0OTk5IDE1LTE1Ni01CithbHdheXMgXHU0OTlBIDEyMy0yNS01CithbHdheXMgXHU0OTlCIDEtMTM1Ni01CithbHdheXMgXHU0OTlDIDM0LTIKK2Fsd2F5cyBcdTQ5OUQgMTIzNS0yNS01CithbHdheXMgXHU0OTlFIDEyNDUtMTIzNDU2LTUKK2Fsd2F5cyBcdTQ5OUYgMTIzNDU2LTQKK2Fsd2F5cyBcdTQ5QTAgMjQtMTU2LTQKK2Fsd2F5cyBcdTQ5QTEgMTIzNS0xMjQ1Ni0yCithbHdheXMgXHU0OUEyIDEyMy0yNS01CithbHdheXMgXHU0OUEzIDEyMzQ1LTM0LTUKK2Fsd2F5cyBcdTQ5QTQgMTItMTI0Ni01CithbHdheXMgXHU0OUE1IDE1LTIzNDUtMgorYWx3YXlzIFx1NDlBNiAyNDUtMTQ1Ni0yCithbHdheXMgXHU0OUE3IDE1LTE2LTUKK2Fsd2F5cyBcdTQ5QTggMTQtMTIzNi0yCithbHdheXMgXHU0OUE5IDEyMzQ1Ni0yCithbHdheXMgXHU0OUFBIDIzNDU2LTUKK2Fsd2F5cyBcdTQ5QUIgMTM0NTYtMworYWx3YXlzIFx1NDlBQyAyNDUtMjM2LTUKK2Fsd2F5cyBcdTQ5QUQgMTIzNS0xMzQ2LTMKK2Fsd2F5cyBcdTQ5QUUgMTItMTIzNDU2LTQKK2Fsd2F5cyBcdTQ5QUYgMS0xNTYtNQorYWx3YXlzIFx1NDlCMCAxMy0yMzQtMworYWx3YXlzIFx1NDlCMSAxMjQ2LTQKK2Fsd2F5cyBcdTQ5QjIgMjQ1LTIzNDUtNQorYWx3YXlzIFx1NDlCMyAxNS00Ni01CithbHdheXMgXHU0OUI0IDE2LTUKK2Fsd2F5cyBcdTQ5QjUgMTM0NS0xNi00CithbHdheXMgXHU0OUI2IDEtMTM1Ni01CithbHdheXMgXHU0OUI3IDEyLTIzNTYtNQorYWx3YXlzIFx1NDlCOSAyNC0xNTYtMgorYWx3YXlzIFx1NDlCQSAxNDUtMTM0NTYtMworYWx3YXlzIFx1NDlCQiAxMjUtMTU2LTQKK2Fsd2F5cyBcdTQ5QkMgMTMtMjM2LTIKK2Fsd2F5cyBcdTQ5QkQgMTUtMTI1Ni01CithbHdheXMgXHU0OUJFIDQ1LTIKK2Fsd2F5cyBcdTQ5QzAgMTMtMjUtMworYWx3YXlzIFx1NDlDMSAxNS0xMjU2LTQKK2Fsd2F5cyBcdTQ5QzIgMS0xNDYtNQorYWx3YXlzIFx1NDlDMyAxMjQtMjM0NS0yCithbHdheXMgXHU0OUM0IDEzLTIzNDYtNQorYWx3YXlzIFx1NDlDNSAxNi0yCithbHdheXMgXHU0OUM2IDEyMzUtMTIzNDYtMgorYWx3YXlzIFx1NDlDNyAxNi00CithbHdheXMgXHU0OUM5IDE0LTE2LTQKK2Fsd2F5cyBcdTQ5Q0EgMTIzLTM0LTMKK2Fsd2F5cyBcdTQ5Q0IgMTUtMjM0NS00CithbHdheXMgXHU0OUNDIDE1LTEyNDYtMworYWx3YXlzIFx1NDlDRCAxNS0xNi01CithbHdheXMgXHU0OUNFIDE1LTQ1LTUKK2Fsd2F5cyBcdTQ5Q0YgMTMtNDYtNQorYWx3YXlzIFx1NDlEMCAxMy0yNS0zCithbHdheXMgXHU0OUQxIDE0NS0xNi0zCithbHdheXMgXHU0OUQyIDE0LTI0NTYtMgorYWx3YXlzIFx1NDlEMyAxLTEyMzU2LTMKK2Fsd2F5cyBcdTQ5RDQgMTM0NS0yMzQ1LTUKK2Fsd2F5cyBcdTQ5RDUgMTI1Ni01CithbHdheXMgXHU0OUQ2IDEzLTIzNDUtNQorYWx3YXlzIFx1NDlENyAxMzUtMTYtNQorYWx3YXlzIFx1NDlEOCAxLTEyNDU2LTUKK2Fsd2F5cyBcdTQ5RDkgMTQtMTM0NTYtMgorYWx3YXlzIFx1NDlEQSAxMjM1LTE0Ni01CithbHdheXMgXHU0OURCIDEzNS0xMzQ2LTUKK2Fsd2F5cyBcdTQ5REMgMTI0LTEzNDYtMgorYWx3YXlzIFx1NDlERCAxLTE1Ni01CithbHdheXMgXHU0OURFIDEyMzQ1LTM0LTUKK2Fsd2F5cyBcdTQ5REYgMTUtMjM0NS01CithbHdheXMgXHU0OUUwIDEtMTI0NTYtMworYWx3YXlzIFx1NDlFMSAyMzUtMworYWx3YXlzIFx1NDlFMiAyNDUtMTI1Ni0zCithbHdheXMgXHU0OUUzIDE0NTYtMworYWx3YXlzIFx1NDlFNCAxMjM0LTM0LTIKK2Fsd2F5cyBcdTQ5RTUgMTIzNS0xMjQ2LTUKK2Fsd2F5cyBcdTQ5RTYgMTI0Ni0yCithbHdheXMgXHU0OUU3IDE2LTQKK2Fsd2F5cyBcdTQ5RTggMzQ2LTUKK2Fsd2F5cyBcdTQ5RUEgMTItMjM0Ni01CithbHdheXMgXHU0OUVCIDEyMzUtMTQ2LTIKK2Fsd2F5cyBcdTQ5RUMgMTM1LTE0NTYtMworYWx3YXlzIFx1NDlFRSAxNS0yMzQ1LTUKK2Fsd2F5cyBcdTQ5RUYgMTItMTIzNi0yCithbHdheXMgXHU0OUYwIDEyMzUtMTIzNDU2LTUKK2Fsd2F5cyBcdTQ5RjEgMTMtMjM0LTMKK2Fsd2F5cyBcdTQ5RjIgMTMtMTIzNi0zCithbHdheXMgXHU0OUYzIDI0NS0xNTYtMgorYWx3YXlzIFx1NDlGNCAxLTE1Ni0zCithbHdheXMgXHU0OUY1IDEtMTM2LTUKK2Fsd2F5cyBcdTQ5RjYgMTIzLTEyNDYtMgorYWx3YXlzIFx1NDlGNyAxMjQ1LTEyMzU2LTIKK2Fsd2F5cyBcdTQ5RjggMTMtMzQtMworYWx3YXlzIFx1NDlGOSAxMzQ1Ni0zCithbHdheXMgXHU0OUZBIDE1LTIzNS0yCithbHdheXMgXHU0OUZCIDEzLTIzNDYtMworYWx3YXlzIFx1NDlGQyAxMjM1LTM0LTIKK2Fsd2F5cyBcdTQ5RkQgMjQ1LTEyNDYtNAorYWx3YXlzIFx1NDlGRSAyNC0zNC0zCithbHdheXMgXHU0OUZGIDI0NS0yMzYtNQorYWx3YXlzIFx1NEEwMCAxNDUtMTYtMgorYWx3YXlzIFx1NEEwMSAzNC01CithbHdheXMgXHU0QTAyIDI0NS0yMzQtMworYWx3YXlzIFx1NEEwMyAyMzQ1LTUKK2Fsd2F5cyBcdTRBMDQgMTIzNi0zCithbHdheXMgXHU0QTA1IDE0LTI0Ni0yCithbHdheXMgXHU0QTA2IDEzNS0xNi0yCithbHdheXMgXHU0QTA3IDI0LTQ1Ni0zCithbHdheXMgXHU0QTA4IDEzNS0xNDU2LTMKK2Fsd2F5cyBcdTRBMDkgMTM0NTYtMworYWx3YXlzIFx1NEEwQSA0NS0zCithbHdheXMgXHU0QTBCIDEzNDUtMjM2LTUKK2Fsd2F5cyBcdTRBMEMgMTM1LTE0Ni0yCithbHdheXMgXHU0QTBEIDEzNDU2LTQKK2Fsd2F5cyBcdTRBMEUgMTIzNS0xMjM0Ni0yCithbHdheXMgXHU0QTBGIDI0NS0xNTYtMgorYWx3YXlzIFx1NEExMCAxNS0yMzQ1Ni0yCithbHdheXMgXHU0QTExIDEyNC0xNi0yCithbHdheXMgXHU0QTEyIDEyNTYtNAorYWx3YXlzIFx1NEExMyAxNC0zNTYtMgorYWx3YXlzIFx1NEExNCAxMzUtMTQ2LTIKK2Fsd2F5cyBcdTRBMTUgMTI1Ni0zCithbHdheXMgXHU0QTE2IDEzLTE2LTUKK2Fsd2F5cyBcdTRBMTcgMTIzNDUtMzQtMgorYWx3YXlzIFx1NEExOCAxNS0yMzQ1LTUKK2Fsd2F5cyBcdTRBMTkgMTQ1Ni0yCithbHdheXMgXHU0QTFBIDEyMzUtMzQtMworYWx3YXlzIFx1NEExQiAxNS0yMzQ2LTUKK2Fsd2F5cyBcdTRBMUMgMTM1LTEzNTYtMworYWx3YXlzIFx1NEExRCAyNDUtMTM0NTYtMworYWx3YXlzIFx1NEExRSAxMjU2LTQKK2Fsd2F5cyBcdTRBMUYgMzUtMworYWx3YXlzIFx1NEEyMCAyNDU2LTQKK2Fsd2F5cyBcdTRBMjEgMTIzNS0xMjM2LTIKK2Fsd2F5cyBcdTRBMjIgMTQ1LTEyMzYtNQorYWx3YXlzIFx1NEEyMyAxMy0yMzQ2LTIKK2Fsd2F5cyBcdTRBMjQgMTQ1LTE2LTIKK2Fsd2F5cyBcdTRBMjUgMjQtNDU2LTMKK2Fsd2F5cyBcdTRBMjYgMTIzNC0xMzQ2LTIKK2Fsd2F5cyBcdTRBMjcgMTQ1Ni0zCithbHdheXMgXHU0QTI4IDEtMTI0Ni0zCithbHdheXMgXHU0QTI5IDE0LTEzNDU2LTIKK2Fsd2F5cyBcdTRBMkEgMTM0LTI0NTYtMgorYWx3YXlzIFx1NEEyQiAxMzQtMTI2LTUKK2Fsd2F5cyBcdTRBMkMgMTQtMjM0NS0yCithbHdheXMgXHU0QTJEIDE1LTI0Ni0zCithbHdheXMgXHU0QTJFIDE1LTIzNi00CithbHdheXMgXHU0QTJGIDEtMTM2LTUKK2Fsd2F5cyBcdTRBMzAgMTIzNC0xMjYtNQorYWx3YXlzIFx1NEEzMSAxMjM0NS0zNC01CithbHdheXMgXHU0QTMyIDEzNDUtMTIzNTYtMgorYWx3YXlzIFx1NEEzMyAxNS0xNi0zCithbHdheXMgXHU0QTM0IDE0NS0xMjQ2LTUKK2Fsd2F5cyBcdTRBMzUgMTQ1LTEyMzYtNQorYWx3YXlzIFx1NEEzNiAyNTYtNAorYWx3YXlzIFx1NEEzNyAxNS0yMzQ1LTUKK2Fsd2F5cyBcdTRBMzggMTQ1Ni00CithbHdheXMgXHU0QTM5IDI0LTM0LTMKK2Fsd2F5cyBcdTRBM0EgMTQ1LTEyNDYtNQorYWx3YXlzIFx1NEEzQiAxMzUtMTM1Ni01CithbHdheXMgXHU0QTNDIDEyMzUtMzQtNQorYWx3YXlzIFx1NEEzRCAxMjM0NS0zNTYtNAorYWx3YXlzIFx1NEEzRSAxMjM0NS0zNTYtMworYWx3YXlzIFx1NEEzRiAxMjUtMzQ1LTIKK2Fsd2F5cyBcdTRBNDAgMTM1LTE2LTUKK2Fsd2F5cyBcdTRBNDEgMTIzNDUtMzU2LTMKK2Fsd2F5cyBcdTRBNDIgMTUtMjM0NS0zCithbHdheXMgXHU0QTQzIDI0LTE1Ni01CithbHdheXMgXHU0QTQ0IDEyNC0yMzQ1LTQKK2Fsd2F5cyBcdTRBNDUgMS0xMjM2LTQKK2Fsd2F5cyBcdTRBNDYgMS0zNDUtNAorYWx3YXlzIFx1NEE0NyAxNDUtMjM0NS0zCithbHdheXMgXHU0QTQ4IDEyMzUtMTI0Ni01CithbHdheXMgXHU0QTQ5IDEyMzQ1LTM0LTQKK2Fsd2F5cyBcdTRBNEEgMTI0NTYtNAorYWx3YXlzIFx1NEE0QiAxMzQtMTI2LTQKK2Fsd2F5cyBcdTRBNEMgMjQ1LTI0Ni0yCithbHdheXMgXHU0QTREIDE0LTI0Ni00CithbHdheXMgXHU0QTRGIDEzNC0zNDYtNQorYWx3YXlzIFx1NEE1MCAxMjM1LTM0LTMKK2Fsd2F5cyBcdTRBNTEgMTIzNS0xMjM0Ni0yCithbHdheXMgXHU0QTUyIDEyNTYtMgorYWx3YXlzIFx1NEE1MyAyNDUtMTYtMgorYWx3YXlzIFx1NEE1NCAxNDUtMjUtNQorYWx3YXlzIFx1NEE1NSAxMzQ2LTIKK2Fsd2F5cyBcdTRBNTYgMjQtMzQ1LTMKK2Fsd2F5cyBcdTRBNTcgMjM2LTUKK2Fsd2F5cyBcdTRBNTggMTQ1LTE2LTMKK2Fsd2F5cyBcdTRBNTkgMTUtNDUtNQorYWx3YXlzIFx1NEE1QSAxNDUtMTM0NTYtMworYWx3YXlzIFx1NEE1QiAxMzUtMTYtNQorYWx3YXlzIFx1NEE1QyAxLTEyMzU2LTUKK2Fsd2F5cyBcdTRBNUQgMTIzNC0xNDYtMgorYWx3YXlzIFx1NEE1RSAxMzQ1LTIzNDUtMgorYWx3YXlzIFx1NEE1RiAxNi0yCithbHdheXMgXHU0QTYwIDEyNC0xMzQ1Ni0zCithbHdheXMgXHU0QTYxIDEzLTIzNDU2LTIKK2Fsd2F5cyBcdTRBNjIgMS0xNTYtNQorYWx3YXlzIFx1NEE2MyAxMjQtMzQtMgorYWx3YXlzIFx1NEE2NCAxNS0zNDYtMgorYWx3YXlzIFx1NEE2NSAxNDUtMTIzNi01CithbHdheXMgXHU0QTY2IDEyNC0yNDYtMgorYWx3YXlzIFx1NEE2NyAxNS0yMzYtNQorYWx3YXlzIFx1NEE2OCAxMi0xMzQ2LTUKK2Fsd2F5cyBcdTRBNjkgNDUtMworYWx3YXlzIFx1NEE2QSAxMy0xMjQ1Ni00CithbHdheXMgXHU0QTZCIDE0LTQ2LTQKK2Fsd2F5cyBcdTRBNkMgMTM1LTEzNTYtNAorYWx3YXlzIFx1NEE2RCAxMy0xNi0zCithbHdheXMgXHU0QTZFIDE0LTM0LTUKK2Fsd2F5cyBcdTRBNkYgMTMtMTYtMgorYWx3YXlzIFx1NEE3MCAxMy0xNi0yCithbHdheXMgXHU0QTcxIDI0LTM0LTUKK2Fsd2F5cyBcdTRBNzIgMTQ1LTM0LTMKK2Fsd2F5cyBcdTRBNzMgMTUtMTIzNTYtMworYWx3YXlzIFx1NEE3NCAxMjM1LTM0LTIKK2Fsd2F5cyBcdTRBNzUgMjU2LTUKK2Fsd2F5cyBcdTRBNzYgMTItMTIzNi00CithbHdheXMgXHU0QTc3IDEzNS0xMzQ2LTMKK2Fsd2F5cyBcdTRBNzggMTI0NS0xMjM0Ni0yCithbHdheXMgXHU0QTc5IDIzNDYtMgorYWx3YXlzIFx1NEE3QSAxMjM0Ni0zCithbHdheXMgXHU0QTdCIDEzNS0zNDUtNQorYWx3YXlzIFx1NEE3QyAxMjM0NS0xMzU2LTIKK2Fsd2F5cyBcdTRBN0QgMTI1Ni0zCithbHdheXMgXHU0QTdFIDEtMjM0Ni01CithbHdheXMgXHU0QTdGIDEyMzQ1LTEzNi0yCithbHdheXMgXHU0QTgwIDEzLTEyNDU2LTQKK2Fsd2F5cyBcdTRBODEgMTM1LTM0LTQKK2Fsd2F5cyBcdTRBODIgMTMtMjM0Ni0yCithbHdheXMgXHU0QTgzIDE0NS0xMjM0NTYtMworYWx3YXlzIFx1NEE4NCAxMjM1LTQ1Ni0yCithbHdheXMgXHU0QTg1IDE0NS0zNC0yCithbHdheXMgXHU0QTg2IDEyNC0xNi00CithbHdheXMgXHU0QTg3IDEyMzQtMTIzNTYtNQorYWx3YXlzIFx1NEE4OCAyNDUtMjM0NS01CithbHdheXMgXHU0QTg5IDE0LTM0Ni01CithbHdheXMgXHU0QThBIDE0LTEyMzQ2LTIKK2Fsd2F5cyBcdTRBOEIgMTI0Ni01CithbHdheXMgXHU0QThDIDEyLTEyMzYtMgorYWx3YXlzIFx1NEE4RCAxNC0xMjM2LTIKK2Fsd2F5cyBcdTRBOEUgMTUtMTI0Ni0zCithbHdheXMgXHU0QThGIDEzNDUtMzQ1LTUKK2Fsd2F5cyBcdTRBOTAgMTM1LTE2LTUKK2Fsd2F5cyBcdTRBOTEgMTI0LTI1LTIKK2Fsd2F5cyBcdTRBOTIgMS0zNC01CithbHdheXMgXHU0QTkzIDE0NS0zNDYtMgorYWx3YXlzIFx1NEE5NCAxMzUtMzQtNAorYWx3YXlzIFx1NEE5NSAxMy0xMjU2LTIKK2Fsd2F5cyBcdTRBOTYgMTIzNC0xMjYtNQorYWx3YXlzIFx1NEE5NyAxNS0yMzQ1Ni0yCithbHdheXMgXHU0QTk4IDEyNDYtNAorYWx3YXlzIFx1NEE5OSAxMjM0LTEyNi01CithbHdheXMgXHU0QTlBIDEyMzUtMjM0Ni01CithbHdheXMgXHU0QTlCIDEyMzQ1LTEyMzYtMgorYWx3YXlzIFx1NEE5QyAxMi0xMjM2LTUKK2Fsd2F5cyBcdTRBOUQgMTIzNS0zNC01CithbHdheXMgXHU0QTlFIDEyNS0zNDUtMgorYWx3YXlzIFx1NEFBMCAxMy0xNi0zCithbHdheXMgXHU0QUExIDEzLTE2LTMKK2Fsd2F5cyBcdTRBQTIgMTMtMTYtMworYWx3YXlzIFx1NEFBMyAxMy0xNi0zCithbHdheXMgXHU0QUE0IDEyMzQ1LTEyMzYtMgorYWx3YXlzIFx1NEFBNSAxNS0zNDYtNQorYWx3YXlzIFx1NEFBNiAxMjM1LTEyMzQ2LTIKK2Fsd2F5cyBcdTRBQTcgMTItMTU2LTIKK2Fsd2F5cyBcdTRBQTggMTM1LTE0Ni0yCithbHdheXMgXHU0QUE5IDE0NTYtMgorYWx3YXlzIFx1NEFBQiAxMy0xMzQ1Ni0zCithbHdheXMgXHU0QUFDIDEzNS0xMjYtMgorYWx3YXlzIFx1NEFBRCAxMjQ1LTEyNDU2LTQKK2Fsd2F5cyBcdTRBQUUgMTItMTIzNTYtNAorYWx3YXlzIFx1NEFBRiAxMzQ1Ni0zCithbHdheXMgXHU0QUIwIDE2LTMKK2Fsd2F5cyBcdTRBQjEgMTMtMjQ1Ni00CithbHdheXMgXHU0QUIyIDM0LTUKK2Fsd2F5cyBcdTRBQjMgMjU2LTQKK2Fsd2F5cyBcdTRBQjQgMS0xMzYtNAorYWx3YXlzIFx1NEFCNSAyMzQ1Ni0zCithbHdheXMgXHU0QUI2IDEzLTEyNTYtMworYWx3YXlzIFx1NEFCNyAxMjM1LTEyMzU2LTUKK2Fsd2F5cyBcdTRBQjggMTM0LTE0NTYtMgorYWx3YXlzIFx1NEFCOSAxMjM0LTM1Ni0yCithbHdheXMgXHU0QUJBIDEzLTIzNDYtMgorYWx3YXlzIFx1NEFCQiAxMzUtMjM0NS01CithbHdheXMgXHU0QUJDIDEtMjUtMgorYWx3YXlzIFx1NEFCRCAxMjM1LTE0Ni01CithbHdheXMgXHU0QUJFIDEtMTM2LTQKK2Fsd2F5cyBcdTRBQkYgMTUtMTQ1Ni01CithbHdheXMgXHU0QUMwIDEzLTEzNi00CithbHdheXMgXHU0QUMxIDEzNS0xNi01CithbHdheXMgXHU0QUMyIDE0NS0yNS00CithbHdheXMgXHU0QUMzIDEyLTEyMzQ1Ni0yCithbHdheXMgXHU0QUM0IDEyLTM1LTUKK2Fsd2F5cyBcdTRBQzUgMTUtMTIzNi01CithbHdheXMgXHU0QUM2IDEyLTEzNTYtMgorYWx3YXlzIFx1NEFDNyAxMjQ1LTEyMzYtMgorYWx3YXlzIFx1NEFDOCAxMjUtMTM2LTUKK2Fsd2F5cyBcdTRBQzkgMTM0LTE0Ni01CithbHdheXMgXHU0QUNBIDEyMzQtMzU2LTIKK2Fsd2F5cyBcdTRBQ0IgMTI0LTEyNDYtMgorYWx3YXlzIFx1NEFDQyAxMjM0LTE2LTQKK2Fsd2F5cyBcdTRBQ0QgMTIzNDUtMzQtNAorYWx3YXlzIFx1NEFDRSAxLTI1LTIKK2Fsd2F5cyBcdTRBQ0YgMjQ1LTE2LTMKK2Fsd2F5cyBcdTRBRDAgMTQtMTQ1Ni0yCithbHdheXMgXHU0QUQxIDI0NS0xNi0zCithbHdheXMgXHU0QUQyIDEzNC0xMzYtMgorYWx3YXlzIFx1NEFEMyAzNC0zCithbHdheXMgXHU0QUQ0IDI0NS0xNi01CithbHdheXMgXHU0QUQ1IDE0NS0zNDYtMgorYWx3YXlzIFx1NEFENiAyNC0xMzYtNQorYWx3YXlzIFx1NEFENyAxNS0yMzQ1Ni0yCithbHdheXMgXHU0QUQ4IDEyMzUtMjM0Ni0yCithbHdheXMgXHU0QUQ5IDE1LTEzNDYtNAorYWx3YXlzIFx1NEFEQSAxMy0zNS0zCithbHdheXMgXHU0QURCIDEyMzUtMTIzNTYtMgorYWx3YXlzIFx1NEFEQyAxNDYtMworYWx3YXlzIFx1NEFERCAxMjM0NS0zNC01CithbHdheXMgXHU0QURFIDI0NS0yNDYtMworYWx3YXlzIFx1NEFERiAyNTYtNAorYWx3YXlzIFx1NEFFMCAxMjM0LTE2LTMKK2Fsd2F5cyBcdTRBRTEgMjM0NS0yCithbHdheXMgXHU0QUUyIDE1LTE1Ni0zCithbHdheXMgXHU0QUUzIDE1LTE2LTIKK2Fsd2F5cyBcdTRBRTQgMTM0LTEzNDU2LTIKK2Fsd2F5cyBcdTRBRTUgMTIzLTEyNDYtNAorYWx3YXlzIFx1NEFFNiAxMy0yMzQ2LTIKK2Fsd2F5cyBcdTRBRTcgMTMtMTQ2LTQKK2Fsd2F5cyBcdTRBRTggMTQ2LTIKK2Fsd2F5cyBcdTRBRTkgMTUtMTIzNi00CithbHdheXMgXHU0QUVBIDI0LTQ1Ni00CithbHdheXMgXHU0QUVCIDE0LTEyMzU2LTIKK2Fsd2F5cyBcdTRBRUMgMS0xMzYtNAorYWx3YXlzIFx1NEFFRCAxMjM1LTEyNDYtNQorYWx3YXlzIFx1NEFFRSAxMi0xMjM2LTIKK2Fsd2F5cyBcdTRBRUYgMTYtMworYWx3YXlzIFx1NEFGMCAxNC0xNDU2LTUKK2Fsd2F5cyBcdTRBRjEgMTI0NS0zNC0yCithbHdheXMgXHU0QUYyIDEyMzUtMTIzNi01CithbHdheXMgXHU0QUYzIDE0NS0zNC0yCithbHdheXMgXHU0QUY0IDEzLTE0NTYtNQorYWx3YXlzIFx1NEFGNSAxMzQtMjM0NS0yCithbHdheXMgXHU0QUY2IDEyMzQ1LTEyMzYtMgorYWx3YXlzIFx1NEFGNyAyMzQ2LTUKK2Fsd2F5cyBcdTRBRjggMTM0NS0xNDYtMgorYWx3YXlzIFx1NEFGOSAxMjM1LTEyMzQ2LTIKK2Fsd2F5cyBcdTRBRkEgMTIzNS0xMjM0Ni0yCithbHdheXMgXHU0QUZCIDEyNTYtNQorYWx3YXlzIFx1NEFGQyAxNS0yMzYtNQorYWx3YXlzIFx1NEFGRCAxMjM0LTE0Ni0zCithbHdheXMgXHU0QUZFIDEzNS0xNi01CithbHdheXMgXHU0QUZGIDEyLTE0Ni0zCithbHdheXMgXHU0QjAwIDIzNC00CithbHdheXMgXHU0QjAxIDE2LTIKK2Fsd2F5cyBcdTRCMDIgMTUtMjM2LTUKK2Fsd2F5cyBcdTRCMDMgMTUtMzQ1LTUKK2Fsd2F5cyBcdTRCMDQgMTUtMTI1Ni0zCithbHdheXMgXHU0QjA1IDE0LTE2LTUKK2Fsd2F5cyBcdTRCMDYgMTQtMTYtNQorYWx3YXlzIFx1NEIwNyA0NS01CithbHdheXMgXHU0QjA4IDE0NS0xMjQ2LTUKK2Fsd2F5cyBcdTRCMDkgMTIzNS0yNS01CithbHdheXMgXHU0QjBBIDI0LTM0NS01CithbHdheXMgXHU0QjBCIDE0LTEzNTYtMgorYWx3YXlzIFx1NEIwQyAxMjM0LTEyMzU2LTMKK2Fsd2F5cyBcdTRCMEQgMTIzNS0zNC0zCithbHdheXMgXHU0QjBFIDEzLTI1LTIKK2Fsd2F5cyBcdTRCMEYgMTIzNDUtMTIzNTYtNAorYWx3YXlzIFx1NEIxMCAxMjQ1LTEyNDYtMgorYWx3YXlzIFx1NEIxMSAxMjQ2LTUKK2Fsd2F5cyBcdTRCMTIgMTUtMTIzNTYtMworYWx3YXlzIFx1NEIxMyAxMjM2LTUKK2Fsd2F5cyBcdTRCMTQgMTI1Ni0yCithbHdheXMgXHU0QjE1IDI0NS00Ni00CithbHdheXMgXHU0QjE2IDEyMzUtMTM1Ni0yCithbHdheXMgXHU0QjE3IDQ2LTIKK2Fsd2F5cyBcdTRCMTggMTUtMjQ2LTMKK2Fsd2F5cyBcdTRCMTkgMjQ2LTIKK2Fsd2F5cyBcdTRCMUEgMTIzNDUtMTIzNi0yCithbHdheXMgXHU0QjFCIDEzNS0xNi01CithbHdheXMgXHU0QjFDIDEyLTE1Ni0zCithbHdheXMgXHU0QjFEIDEyMzUtMTM1Ni0yCithbHdheXMgXHU0QjFFIDEyNC0xNDYtMgorYWx3YXlzIFx1NEIxRiAxNC0yMzQtMgorYWx3YXlzIFx1NEIyMCAxMjM0NS0zNTYtMworYWx3YXlzIFx1NEIyMSAxLTM0LTUKK2Fsd2F5cyBcdTRCMjIgMTI0LTE0Ni0zCithbHdheXMgXHU0QjIzIDI0NS0xNi01CithbHdheXMgXHU0QjI0IDEtMTIzNi0zCithbHdheXMgXHU0QjI1IDE2LTUKK2Fsd2F5cyBcdTRCMjYgMjQtMjM0Ni01CithbHdheXMgXHU0QjI3IDQ1LTIKK2Fsd2F5cyBcdTRCMjggMTMtMjM0LTUKK2Fsd2F5cyBcdTRCMjkgMS0yNDU2LTMKK2Fsd2F5cyBcdTRCMkEgMTM1LTEyNi0yCithbHdheXMgXHU0QjJCIDEyNC0xNi0yCithbHdheXMgXHU0QjJDIDQ2LTQKK2Fsd2F5cyBcdTRCMkQgMTI0LTE0Ni0zCithbHdheXMgXHU0QjJFIDE2LTIKK2Fsd2F5cyBcdTRCMkYgMTM0NS0yMzQ1LTIKK2Fsd2F5cyBcdTRCMzAgMjQtMTQ2LTUKK2Fsd2F5cyBcdTRCMzEgMTM1LTEzNi01CithbHdheXMgXHU0QjMyIDEzLTEyMzU2LTMKK2Fsd2F5cyBcdTRCMzMgMTM1LTEyMzYtNAorYWx3YXlzIFx1NEIzNCAxMzQtMTI2LTUKK2Fsd2F5cyBcdTRCMzUgMjQ1Ni01CithbHdheXMgXHU0QjM2IDEzNi01CithbHdheXMgXHU0QjM3IDI0LTIzNDYtNAorYWx3YXlzIFx1NEIzOCAyNDUtMTIzNi0zCithbHdheXMgXHU0QjM5IDEtMTU2LTUKK2Fsd2F5cyBcdTRCM0EgNDYtNQorYWx3YXlzIFx1NEIzQiAxMy0yMzQ1LTUKK2Fsd2F5cyBcdTRCM0MgNDUtNQorYWx3YXlzIFx1NEIzRCAyNC0xMjQ2LTUKK2Fsd2F5cyBcdTRCM0UgMTI0LTE2LTIKK2Fsd2F5cyBcdTRCM0YgMTI0Ni00CithbHdheXMgXHU0QjQwIDE1LTI1Ni01CithbHdheXMgXHU0QjQxIDEtMTU2LTUKK2Fsd2F5cyBcdTRCNDIgMTYtNQorYWx3YXlzIFx1NEI0MyAxMjQ1LTEzNi00CithbHdheXMgXHU0QjQ0IDI0LTE1Ni01CithbHdheXMgXHU0QjQ1IDEyMzUtMzQtMgorYWx3YXlzIFx1NEI0NiAxMzQ1LTIzNDYtNQorYWx3YXlzIFx1NEI0NyAxNi01CithbHdheXMgXHU0QjQ4IDEzLTIzNDUtMworYWx3YXlzIFx1NEI0OSAxNS0xMjQ2LTQKK2Fsd2F5cyBcdTRCNEEgMTM0NTYtNAorYWx3YXlzIFx1NEI0QiAxMzUtMTQ2LTQKK2Fsd2F5cyBcdTRCNEMgMTIzNS0zNC0yCithbHdheXMgXHU0QjREIDEyMzUtMzQtMgorYWx3YXlzIFx1NEI0RSAzNDYtNQorYWx3YXlzIFx1NEI1MCA0Ni01CithbHdheXMgXHU0QjUxIDE0LTIzNDUtNAorYWx3YXlzIFx1NEI1MiAxNS0xNi0yCithbHdheXMgXHU0QjUzIDEzNi01CithbHdheXMgXHU0QjU0IDE0NS0xMjQ2LTMKK2Fsd2F5cyBcdTRCNTUgMTMtMjM0NS00CithbHdheXMgXHU0QjU2IDEtMzQtNQorYWx3YXlzIFx1NEI1NyAxMzQ1Ni00CithbHdheXMgXHU0QjU4IDEzNDU2LTQKK2Fsd2F5cyBcdTRCNTkgMTMtMTQ1Ni00CithbHdheXMgXHU0QjVBIDEyLTQ1Ni0yCithbHdheXMgXHU0QjVCIDEzLTEyMzYtNAorYWx3YXlzIFx1NEI1RCAxMjMtMjM1Ni01CithbHdheXMgXHU0QjVFIDE2LTUKK2Fsd2F5cyBcdTRCNUYgMzQ2LTUKK2Fsd2F5cyBcdTRCNjAgMTMtMjM0NS00CithbHdheXMgXHU0QjYxIDEyMzQ1Ni01CithbHdheXMgXHU0QjYyIDEzNDUtMTM0NTYtMgorYWx3YXlzIFx1NEI2MyAyNDUtMTU2LTIKK2Fsd2F5cyBcdTRCNjQgMjQ1LTIzNDUtNAorYWx3YXlzIFx1NEI2NSA0Ni01CithbHdheXMgXHU0QjY2IDEzNS0xMjYtMgorYWx3YXlzIFx1NEI2NyAxMzQtMTYtNAorYWx3YXlzIFx1NEI2OCAyNC0xMjQ2LTUKK2Fsd2F5cyBcdTRCNjkgMTM0LTE2LTQKK2Fsd2F5cyBcdTRCNkEgMTQtNDYtMgorYWx3YXlzIFx1NEI2QiAxMy0xNi0zCithbHdheXMgXHU0QjZDIDEzLTE2LTMKK2Fsd2F5cyBcdTRCNkQgMjQtMTIzNTYtNAorYWx3YXlzIFx1NEI2RSAxMjM0NS0zNC0yCithbHdheXMgXHU0QjZGIDEzNS0xMjYtMgorYWx3YXlzIFx1NEI3MCAxMzUtMTM1Ni00CithbHdheXMgXHU0QjcxIDEzNS0zNDYtMgorYWx3YXlzIFx1NEI3MiAxNi00CithbHdheXMgXHU0QjczIDEyNDYtNQorYWx3YXlzIFx1NEI3NCAxMjM1LTEyNDU2LTIKK2Fsd2F5cyBcdTRCNzUgMTIzNDUtMTIzNi0yCithbHdheXMgXHU0Qjc2IDI0NS0xNi0yCithbHdheXMgXHU0Qjc3IDEzNC0xNDYtMgorYWx3YXlzIFx1NEI3OCAxMjM0NS0zNC01CithbHdheXMgXHU0Qjc5IDEzNDYtNAorYWx3YXlzIFx1NEI3QSAxMzQ2LTQKK2Fsd2F5cyBcdTRCN0IgMTIzNDUtMTM2LTMKK2Fsd2F5cyBcdTRCN0MgMjQ1LTE2LTIKK2Fsd2F5cyBcdTRCN0QgMjQ1LTI1Ni0yCithbHdheXMgXHU0QjdFIDEyNC0yNS0yCithbHdheXMgXHU0QjdGIDE2LTUKK2Fsd2F5cyBcdTRCODAgMTM1LTEyNi0yCithbHdheXMgXHU0QjgxIDEyMzQtMjM0NS0yCithbHdheXMgXHU0QjgyIDEzNS0zNDUtMgorYWx3YXlzIFx1NEI4MyAyNDUtMTI1Ni0zCithbHdheXMgXHU0Qjg0IDE1LTQ1LTIKK2Fsd2F5cyBcdTRCODUgMTUtMTI1Ni01CithbHdheXMgXHU0Qjg2IDEyMzQtMTYtMworYWx3YXlzIFx1NEI4NyAxMjU2LTUKK2Fsd2F5cyBcdTRCODggMTItMTU2LTIKK2Fsd2F5cyBcdTRCODkgMTQtMTI1Ni01CithbHdheXMgXHU0QjhBIDE2LTIKK2Fsd2F5cyBcdTRCOEIgMTQtMzQ2LTUKK2Fsd2F5cyBcdTRCOEMgMTUtMjM0LTMKK2Fsd2F5cyBcdTRCOEQgMTM0NS0yNDYtNAorYWx3YXlzIFx1NEI4RSAxNS0xNi01CithbHdheXMgXHU0QjhGIDM0LTIKK2Fsd2F5cyBcdTRCOTAgMTMtMjM1LTMKK2Fsd2F5cyBcdTRCOTEgMTQtMzU2LTUKK2Fsd2F5cyBcdTRCOTIgMTIzNC0zNC0zCithbHdheXMgXHU0QjkzIDEyLTE0Ni01CithbHdheXMgXHU0Qjk0IDEyNS0xMjQ2LTMKK2Fsd2F5cyBcdTRCOTUgMTItMjUtNQorYWx3YXlzIFx1NEI5NiAxMi0xMzQ2LTMKK2Fsd2F5cyBcdTRCOTcgMjM0NS01CithbHdheXMgXHU0Qjk4IDE1Ni0yCithbHdheXMgXHU0Qjk5IDEyNTYtNQorYWx3YXlzIFx1NEI5QSAxNC0xMzQ1Ni0yCithbHdheXMgXHU0QjlCIDEyMzQ1LTM0LTUKK2Fsd2F5cyBcdTRCOUMgMjQtMzQ1LTUKK2Fsd2F5cyBcdTRCOUQgMTIzNS0xMjM0NTYtMgorYWx3YXlzIFx1NEI5RSAxMi0xMjM0NTYtNAorYWx3YXlzIFx1NEI5RiAxNS0xMjM1Ni0zCithbHdheXMgXHU0QkEwIDEzNS0xNi0zCithbHdheXMgXHU0QkExIDEzNS0xNi01CithbHdheXMgXHU0QkEyIDI0LTM0NS01CithbHdheXMgXHU0QkEzIDE1LTEzNDYtMworYWx3YXlzIFx1NEJBNCAxMjM1LTIzNDYtNQorYWx3YXlzIFx1NEJBNSAxNC0xNi01CithbHdheXMgXHU0QkE2IDEzLTI0Ni0zCithbHdheXMgXHU0QkE3IDEyMzUtMTIzNi01CithbHdheXMgXHU0QkE4IDEyNS0yNDU2LTQKK2Fsd2F5cyBcdTRCQTkgMTMtMzQtMgorYWx3YXlzIFx1NEJBQSAxMi0xMzU2LTIKK2Fsd2F5cyBcdTRCQUIgMTQtMTIzNTYtMgorYWx3YXlzIFx1NEJBQyAxMzQtMTI2LTUKK2Fsd2F5cyBcdTRCQUQgMTM0LTE2LTUKK2Fsd2F5cyBcdTRCQUUgMTM0LTEyNi01CithbHdheXMgXHU0QkFGIDE0Ni01CithbHdheXMgXHU0QkIwIDEtMjM0Ni0yCithbHdheXMgXHU0QkIxIDEtMzQtMgorYWx3YXlzIFx1NEJCMiAxMjM1LTQ1Ni0yCithbHdheXMgXHU0QkIzIDIzNDUtMgorYWx3YXlzIFx1NEJCNCAxNDUtMTM1Ni01CithbHdheXMgXHU0QkI1IDEyNC0xMjM0Ni0yCithbHdheXMgXHU0QkI2IDEzNS0yNDYtMworYWx3YXlzIFx1NEJCNyAxNDUtMzQtMgorYWx3YXlzIFx1NEJCOCAyNS01CithbHdheXMgXHU0QkI5IDEzLTEyNDYtNQorYWx3YXlzIFx1NEJCQSAxMy0xNi01CithbHdheXMgXHU0QkJCIDE0NS0xNDYtNAorYWx3YXlzIFx1NEJCQyAxNC0xNDU2LTIKK2Fsd2F5cyBcdTRCQkQgMTM1LTI0Ni0zCithbHdheXMgXHU0QkJFIDEyMzQtMTM1Ni0yCithbHdheXMgXHU0QkJGIDEzLTIzNDUtNAorYWx3YXlzIFx1NEJDMCAxMzQ1LTM0Ni01CithbHdheXMgXHU0QkMxIDE0LTI1LTIKK2Fsd2F5cyBcdTRCQzIgMTMtMTYtMgorYWx3YXlzIFx1NEJDMyAxMjM2LTMKK2Fsd2F5cyBcdTRCQzQgMTMtMzUtMworYWx3YXlzIFx1NEJDNSAxMzQ1LTM0Ni01CithbHdheXMgXHU0QkM2IDE2LTUKK2Fsd2F5cyBcdTRCQzcgMTIzLTM0LTMKK2Fsd2F5cyBcdTRCQzggMTI0NTYtMgorYWx3YXlzIFx1NEJDOSAzNS01CithbHdheXMgXHU0QkNBIDEyMy0yMzQ2LTMKK2Fsd2F5cyBcdTRCQ0IgMTM1LTEyNi0yCithbHdheXMgXHU0QkNDIDEyMy0xNDYtMworYWx3YXlzIFx1NEJDRCAxNC0xMzQ1Ni0yCithbHdheXMgXHU0QkNFIDEzLTEyMzYtNQorYWx3YXlzIFx1NEJDRiAxMy0zNS0zCithbHdheXMgXHU0QkQwIDEyMzUtMjQ1Ni0yCithbHdheXMgXHU0QkQxIDEyMy00NTYtMworYWx3YXlzIFx1NEJEMiAxMjM1LTEzNTYtMgorYWx3YXlzIFx1NEJEMyAxMjMtMTI0Ni0yCithbHdheXMgXHU0QkQ0IDEyNS0yMzQ2LTIKK2Fsd2F5cyBcdTRCRDUgMTI0LTEzNDU2LTIKK2Fsd2F5cyBcdTRCRDYgMTQtMTM0Ni0yCithbHdheXMgXHU0QkQ3IDEzNS0xNi01CithbHdheXMgXHU0QkQ4IDEyMzUtMTI0NTYtNQorYWx3YXlzIFx1NEJEOSAxMjM0LTEyNi01CithbHdheXMgXHU0QkRBIDI0Ni00CithbHdheXMgXHU0QkRCIDEyNDU2LTUKK2Fsd2F5cyBcdTRCREMgMTI0LTE2LTUKK2Fsd2F5cyBcdTRCREQgMTUtMTI0Ni00CithbHdheXMgXHU0QkRFIDEyMy0zNS0zCithbHdheXMgXHU0QkRGIDE0NS0xMjQ2LTUKK2Fsd2F5cyBcdTRCRTAgMTQ2LTQKK2Fsd2F5cyBcdTRCRTEgMTMtMjM0NS01CithbHdheXMgXHU0QkUyIDEzNC0xMjYtMgorYWx3YXlzIFx1NEJFMyAxMjMtMTI0Ni01CithbHdheXMgXHU0QkU0IDEyMy0yMzU2LTUKK2Fsd2F5cyBcdTRCRTUgMTIzNi01CithbHdheXMgXHU0QkU2IDEzNC0zNDUtNQorYWx3YXlzIFx1NEJFNyAyNDUtMTM0NTYtNAorYWx3YXlzIFx1NEJFOCAxMjM1LTI1LTUKK2Fsd2F5cyBcdTRCRUEgMTIzLTE0Ni00CithbHdheXMgXHU0QkVCIDEyMzUtMTQ2LTUKK2Fsd2F5cyBcdTRCRUMgMTQ1LTI1LTQKK2Fsd2F5cyBcdTRCRUQgMTUtMjM0NS0zCithbHdheXMgXHU0QkVFIDEzNDUtMjQ1Ni0yCithbHdheXMgXHU0QkVGIDE1LTI1LTMKK2Fsd2F5cyBcdTRCRjAgMTMtMzQ2LTUKK2Fsd2F5cyBcdTRCRjEgMTIzNDUtMzQtNQorYWx3YXlzIFx1NEJGMiAxMjM0LTM0NS0zCithbHdheXMgXHU0QkYzIDE1LTEyMzQ2LTMKK2Fsd2F5cyBcdTRCRjQgMTItMTM0Ni0yCithbHdheXMgXHU0QkY1IDEzNDUtMzQ2LTUKK2Fsd2F5cyBcdTRCRjYgMTM0LTEyMzYtMgorYWx3YXlzIFx1NEJGNyAxNS0xMjM0Ni0zCithbHdheXMgXHU0QkY4IDI0NS0xNTYtNQorYWx3YXlzIFx1NEJGOSAxNS0yMzQ1LTMKK2Fsd2F5cyBcdTRCRkEgMjM2LTUKK2Fsd2F5cyBcdTRCRkMgMTQ1LTE2LTIKK2Fsd2F5cyBcdTRCRkQgMTIzNC0xMjM1Ni0yCithbHdheXMgXHU0QkZFIDEyNC0yNDYtMgorYWx3YXlzIFx1NEJGRiAxMjUtMzQtMgorYWx3YXlzIFx1NEMwMCAyNS00CithbHdheXMgXHU0QzAxIDEyMzQ1LTM1Ni01CithbHdheXMgXHU0QzAyIDI0NS0yNDU2LTUKK2Fsd2F5cyBcdTRDMDMgMTIzNC0xMzU2LTIKK2Fsd2F5cyBcdTRDMDQgMTUtMjQ1Ni0zCithbHdheXMgXHU0QzA1IDE1LTEyNTYtMworYWx3YXlzIFx1NEMwNiAxMjQ1LTEyMzU2LTIKK2Fsd2F5cyBcdTRDMDcgMjQ1LTE2LTIKK2Fsd2F5cyBcdTRDMDggMjQ1LTI1LTQKK2Fsd2F5cyBcdTRDMDkgMTIzNC0xMjM2LTIKK2Fsd2F5cyBcdTRDMEEgMTM1LTEyNi0yCithbHdheXMgXHU0QzBCIDEzNC0xMjM2LTIKK2Fsd2F5cyBcdTRDMEMgMTI1LTEyMzQ2LTQKK2Fsd2F5cyBcdTRDMEQgMTUtMjM0LTMKK2Fsd2F5cyBcdTRDMEUgMTIzLTEyNDYtNQorYWx3YXlzIFx1NEMwRiAxMy0zNDYtMgorYWx3YXlzIFx1NEMxMCAxNC0xMjM2LTIKK2Fsd2F5cyBcdTRDMTEgMTUtMTI1Ni0zCithbHdheXMgXHU0QzEyIDEzNC0xMzU2LTIKK2Fsd2F5cyBcdTRDMTMgMTM0LTIzNDUtMgorYWx3YXlzIFx1NEMxNCAxMjM0LTEyMzYtMgorYWx3YXlzIFx1NEMxNSAxNC0zNC0yCithbHdheXMgXHU0QzE2IDEyNS0xMjM2LTQKK2Fsd2F5cyBcdTRDMTcgMTMtMjM0LTMKK2Fsd2F5cyBcdTRDMTggMTQtMjM0LTIKK2Fsd2F5cyBcdTRDMTkgMTYtNAorYWx3YXlzIFx1NEMxQSAxMjM0NTYtMgorYWx3YXlzIFx1NEMxQiAxMy0yMzQ2LTIKK2Fsd2F5cyBcdTRDMUMgMTMtMjM0Ni0yCithbHdheXMgXHU0QzFEIDEyNS0xMzU2LTUKK2Fsd2F5cyBcdTRDMUUgMS0zNC00CithbHdheXMgXHU0QzFGIDEyMzUtMTIzNDU2LTIKK2Fsd2F5cyBcdTRDMjAgMjQtMTM2LTIKK2Fsd2F5cyBcdTRDMjEgMTItMTU2LTUKK2Fsd2F5cyBcdTRDMjIgMTUtMTM0NTYtNQorYWx3YXlzIFx1NEMyMyA0NTYtNAorYWx3YXlzIFx1NEMyNCAxNDUtMTIzNDYtMworYWx3YXlzIFx1NEMyNSAxMjU2LTUKK2Fsd2F5cyBcdTRDMjYgMTIzNC0xNi00CithbHdheXMgXHU0QzI3IDEyMzUtMzQtMworYWx3YXlzIFx1NEMyOCAxMzQtMzU2LTUKK2Fsd2F5cyBcdTRDMjkgMTQ1LTM0LTMKK2Fsd2F5cyBcdTRDMkEgMTM0LTM1Ni01CithbHdheXMgXHU0QzJCIDEyLTE0Ni0yCithbHdheXMgXHU0QzJDIDEzLTEyNTYtMgorYWx3YXlzIFx1NEMyRCAxMjQ1LTM0LTIKK2Fsd2F5cyBcdTRDMkYgMTYtNQorYWx3YXlzIFx1NEMzMCAxMjQ1LTM0LTIKK2Fsd2F5cyBcdTRDMzEgMTQtMTM0NTYtMgorYWx3YXlzIFx1NEMzMiAyMzQ1Ni01CithbHdheXMgXHU0QzM0IDI0NS0xNi01CithbHdheXMgXHU0QzM1IDEyNS0xNTYtMworYWx3YXlzIFx1NEMzNyAxMzUtMTM0Ni01CithbHdheXMgXHU0QzM4IDEzLTEyMzQ2LTMKK2Fsd2F5cyBcdTRDMzkgMTI1LTIzNDYtMgorYWx3YXlzIFx1NEMzQSAxMy0zNDYtNQorYWx3YXlzIFx1NEMzQiAxMjU2LTIKK2Fsd2F5cyBcdTRDM0MgMTQ1Ni0yCithbHdheXMgXHU0QzNEIDEzNS0zNTYtNQorYWx3YXlzIFx1NEMzRSAxMzUtMzQ1LTUKK2Fsd2F5cyBcdTRDM0YgMTI0LTI1LTIKK2Fsd2F5cyBcdTRDNDAgNDYtMworYWx3YXlzIFx1NEM0MSAyNDUtMjQ2LTIKK2Fsd2F5cyBcdTRDNDIgMjM0LTQKK2Fsd2F5cyBcdTRDNDMgMS0xNTYtNQorYWx3YXlzIFx1NEM0NCAxMy0zNDYtNQorYWx3YXlzIFx1NEM0NSAxMzQtMTI2LTUKK2Fsd2F5cyBcdTRDNDYgMjQtMTM1Ni0yCithbHdheXMgXHU0QzQ3IDI0LTEyMzYtNQorYWx3YXlzIFx1NEM0OCAyNDUtMTYtMgorYWx3YXlzIFx1NEM0OSAyNC0xMjM2LTUKK2Fsd2F5cyBcdTRDNEEgMTM0LTE2LTQKK2Fsd2F5cyBcdTRDNEIgMTMtMTIzNDYtNAorYWx3YXlzIFx1NEM0QyAxNi0yCithbHdheXMgXHU0QzREIDEzLTEzNTYtMworYWx3YXlzIFx1NEM0RSAxMy0xMzU2LTMKK2Fsd2F5cyBcdTRDNEYgMTI0LTEyMzU2LTQKK2Fsd2F5cyBcdTRDNTAgMTIzNDUtMzQtMgorYWx3YXlzIFx1NEM1MSAxNS0yMzYtMgorYWx3YXlzIFx1NEM1MiAzNDYtMworYWx3YXlzIFx1NEM1MyAxMjQtMTM0NTYtMgorYWx3YXlzIFx1NEM1NCAxMjQtMjQ2LTIKK2Fsd2F5cyBcdTRDNTUgMTM0LTEyMzU2LTIKK2Fsd2F5cyBcdTRDNTYgMTQtMjM0LTIKK2Fsd2F5cyBcdTRDNTcgMjQ1LTEyMzYtMworYWx3YXlzIFx1NEM1OCAxNC0xNi0yCithbHdheXMgXHU0QzU5IDI0LTM0LTIKK2Fsd2F5cyBcdTRDNUEgMTQtMzQtNQorYWx3YXlzIFx1NEM1QiAxNi01CithbHdheXMgXHU0QzVDIDI0NS0yNS01CithbHdheXMgXHU0QzVEIDEzNS0yNDU2LTIKK2Fsd2F5cyBcdTRDNUUgMTM0NS0yNDU2LTUKK2Fsd2F5cyBcdTRDNUYgMTMtMTI1Ni01CithbHdheXMgXHU0QzYwIDEyLTEyMzYtNAorYWx3YXlzIFx1NEM2MSAxMy0xMjU2LTIKK2Fsd2F5cyBcdTRDNjIgMS0xMzU2LTMKK2Fsd2F5cyBcdTRDNjMgMTI1LTM0LTIKK2Fsd2F5cyBcdTRDNjQgMTUtMjM0NS01CithbHdheXMgXHU0QzY1IDEtMTU2LTUKK2Fsd2F5cyBcdTRDNjYgMTQ1Ni0yCithbHdheXMgXHU0QzY3IDI0LTEyMzYtNQorYWx3YXlzIFx1NEM2OCAxLTE1Ni01CithbHdheXMgXHU0QzY5IDQ1Ni00CithbHdheXMgXHU0QzZCIDE0LTM0NS01CithbHdheXMgXHU0QzZDIDE1LTEyNTYtMworYWx3YXlzIFx1NEM2RCAxMy0xMzU2LTMKK2Fsd2F5cyBcdTRDNkUgMjM0Ni0yCithbHdheXMgXHU0QzZGIDEzNC0xMjYtMgorYWx3YXlzIFx1NEM3MCAxLTEyMzQ2LTUKK2Fsd2F5cyBcdTRDNzEgMTQ1LTE2LTUKK2Fsd2F5cyBcdTRDNzIgNDUtMgorYWx3YXlzIFx1NEM3MyAxLTEyMzYtMworYWx3YXlzIFx1NEM3NCAxMy0xMzU2LTUKK2Fsd2F5cyBcdTRDNzUgMTIzNDYtMworYWx3YXlzIFx1NEM3NiAxNC0xMzQ2LTIKK2Fsd2F5cyBcdTRDNzcgMTI1Ni0yCithbHdheXMgXHU0Qzc4IDI0NS0yMzQtMworYWx3YXlzIFx1NEM3OSAxLTM0NS00CithbHdheXMgXHU0QzdBIDEyMzUtMjQ1Ni0yCithbHdheXMgXHU0QzdCIDEyMzUtMzUtMgorYWx3YXlzIFx1NEM3QyAxLTEyMzYtNAorYWx3YXlzIFx1NEM3RCAxMi0xMzQ2LTMKK2Fsd2F5cyBcdTRDN0UgMTQtMTIzNTYtMgorYWx3YXlzIFx1NEM3RiAxMi0xMjM2LTUKK2Fsd2F5cyBcdTRDODAgMS0xNTYtNQorYWx3YXlzIFx1NEM4MSAxMjQ2LTUKK2Fsd2F5cyBcdTRDODIgMTUtNDUtMgorYWx3YXlzIFx1NEM4MyAxMjUtMTQ2LTQKK2Fsd2F5cyBcdTRDODQgMTM0LTIzNDUtNAorYWx3YXlzIFx1NEM4NSAxMy0xMjQ2LTMKK2Fsd2F5cyBcdTRDODYgMTUtMzQtMworYWx3YXlzIFx1NEM4OCAxMzQtMzQ1LTIKK2Fsd2F5cyBcdTRDODkgMTUtMTU2LTMKK2Fsd2F5cyBcdTRDOEEgMTI0LTI1LTQKK2Fsd2F5cyBcdTRDOEIgMjQ1LTEzNi0yCithbHdheXMgXHU0QzhDIDEyMy0xMjQ1Ni00CithbHdheXMgXHU0QzhEIDEyNC0xMzU2LTIKK2Fsd2F5cyBcdTRDOEUgMTM0NS0zNTYtNAorYWx3YXlzIFx1NEM4RiAxNC0xNDYtMgorYWx3YXlzIFx1NEM5MCAxNC0zNC00CithbHdheXMgXHU0QzkxIDE2LTIKK2Fsd2F5cyBcdTRDOTIgMTUtMzQ2LTUKK2Fsd2F5cyBcdTRDOTMgMjM0NS00CithbHdheXMgXHU0Qzk0IDEzLTEzNDU2LTMKK2Fsd2F5cyBcdTRDOTUgMTIzNC0zNC0zCithbHdheXMgXHU0Qzk2IDEyLTEyMzU2LTIKK2Fsd2F5cyBcdTRDOTcgMTUtMjM0NS0yCithbHdheXMgXHU0Qzk4IDEzLTEyNDU2LTQKK2Fsd2F5cyBcdTRDOTkgMTMtMzQ2LTIKK2Fsd2F5cyBcdTRDOUEgMTQtMjQ1Ni01CithbHdheXMgXHU0QzlCIDEzNC0xMzU2LTIKK2Fsd2F5cyBcdTRDOUMgMzQ2LTUKK2Fsd2F5cyBcdTRDOUQgMTItMTM0Ni0zCithbHdheXMgXHU0QzlFIDE0LTE2LTUKK2Fsd2F5cyBcdTRDOUYgMTQ1Ni01CithbHdheXMgXHU0Q0EwIDEyLTEyMzQ1Ni0zCithbHdheXMgXHU0Q0ExIDI0NS0yMzQtMworYWx3YXlzIFx1NENBMiAxMjQtMTM1Ni0yCithbHdheXMgXHU0Q0EzIDEyNTYtMgorYWx3YXlzIFx1NENBNSAxMy0yMzQtMworYWx3YXlzIFx1NENBNiAxNDUtMzQ1LTUKK2Fsd2F5cyBcdTRDQTcgMTQ1LTM0LTUKK2Fsd2F5cyBcdTRDQTggMTIzNS0xMjM0Ni0yCithbHdheXMgXHU0Q0E5IDI0LTE1Ni0zCithbHdheXMgXHU0Q0FBIDE1LTE2LTUKK2Fsd2F5cyBcdTRDQUIgMTMtMjM0LTMKK2Fsd2F5cyBcdTRDQUMgMjQ1LTE2LTIKK2Fsd2F5cyBcdTRDQUQgMTItMTU2LTMKK2Fsd2F5cyBcdTRDQUUgNDUtMgorYWx3YXlzIFx1NENBRiAxMy0xNi0yCithbHdheXMgXHU0Q0IwIDI1Ni01CithbHdheXMgXHU0Q0IxIDEyMzQ1LTEzNDYtNAorYWx3YXlzIFx1NENCMiAxMy0xMjM0Ni0zCithbHdheXMgXHU0Q0IzIDEyMzUtMTM0Ni0yCithbHdheXMgXHU0Q0I0IDEtMTM2LTUKK2Fsd2F5cyBcdTRDQjUgMjQ1LTIzNi01CithbHdheXMgXHU0Q0I3IDE1LTI0Ni0zCithbHdheXMgXHU0Q0I4IDEzLTM0Ni01CithbHdheXMgXHU0Q0I5IDEyMzQtMzU2LTIKK2Fsd2F5cyBcdTRDQkEgMTMtMTIzNi01CithbHdheXMgXHU0Q0JCIDE1LTQ1LTIKK2Fsd2F5cyBcdTRDQkMgMjQtMTM1Ni0zCithbHdheXMgXHU0Q0JEIDE0NS0xNDYtNAorYWx3YXlzIFx1NENCRSAyNDUtMjQ2LTQKK2Fsd2F5cyBcdTRDQkYgMjQ1LTE1Ni0yCithbHdheXMgXHU0Q0MwIDE2LTUKK2Fsd2F5cyBcdTRDQzEgMTM1LTM0NS0yCithbHdheXMgXHU0Q0MyIDEyNC0yNDYtMgorYWx3YXlzIFx1NENDMyAxMjQ1Ni00CithbHdheXMgXHU0Q0M0IDI0NS0xNTYtMgorYWx3YXlzIFx1NENDNSAxLTE1Ni01CithbHdheXMgXHU0Q0M2IDEzNS0xMjYtMgorYWx3YXlzIFx1NENDNyAzNC00CithbHdheXMgXHU0Q0M4IDEzNS0xNDYtNAorYWx3YXlzIFx1NENDOSAxNDUtMTIzNDYtMworYWx3YXlzIFx1NENDQSAxMzUtMzQ1LTIKK2Fsd2F5cyBcdTRDQ0IgMTI0LTEyMzQ2LTIKK2Fsd2F5cyBcdTRDQ0MgMTMtNDUtMworYWx3YXlzIFx1NENDRCAxMy0xMjM0Ni0zCithbHdheXMgXHU0Q0NFIDEzLTIzNC01CithbHdheXMgXHU0Q0NGIDEzLTEyNDYtNQorYWx3YXlzIFx1NENEMCAyNDUtMTU2LTUKK2Fsd2F5cyBcdTRDRDEgMjM0LTQKK2Fsd2F5cyBcdTRDRDIgNDUtMworYWx3YXlzIFx1NENEMyAxNC0xNDYtNAorYWx3YXlzIFx1NENENCAxMy0yMzQtNQorYWx3YXlzIFx1NENENSAxMjM0NS0zNC0yCithbHdheXMgXHU0Q0Q2IDEzNDUtMzQ2LTUKK2Fsd2F5cyBcdTRDRDcgMjM0Ni0yCithbHdheXMgXHU0Q0Q4IDIzNDYtMgorYWx3YXlzIFx1NENEOSAxNS0xMzQ1Ni00CithbHdheXMgXHU0Q0RBIDEyMy0xMjM2LTUKK2Fsd2F5cyBcdTRDREIgMjM0NS01CithbHdheXMgXHU0Q0RDIDEyNC0zNC0yCithbHdheXMgXHU0Q0REIDEyMzQtMTIzNTYtNAorYWx3YXlzIFx1NENERSAxMzUtMTM1Ni00CithbHdheXMgXHU0Q0RGIDEzNC0xMzQ1Ni0yCithbHdheXMgXHU0Q0UwIDEyLTEyNDYtMgorYWx3YXlzIFx1NENFMSAxLTEyNDYtMworYWx3YXlzIFx1NENFMiAyNDUtMTYtMgorYWx3YXlzIFx1NENFMyA0NS0yCithbHdheXMgXHU0Q0U0IDEzNS0zNDYtMworYWx3YXlzIFx1NENFNSAxNC0xMzQ1Ni0yCithbHdheXMgXHU0Q0U2IDE1LTQ1LTMKK2Fsd2F5cyBcdTRDRTcgMTIzNS0xMjM1Ni0yCithbHdheXMgXHU0Q0U4IDEyMzUtNDU2LTIKK2Fsd2F5cyBcdTRDRTkgMjQ2LTMKK2Fsd2F5cyBcdTRDRUEgMS0xMjQ1Ni0zCithbHdheXMgXHU0Q0VCIDEyMy0xMjQ2LTIKK2Fsd2F5cyBcdTRDRUMgMTYtNQorYWx3YXlzIFx1NENFRCAxMy0xNi0yCithbHdheXMgXHU0Q0VFIDEzNC0xMjYtNQorYWx3YXlzIFx1NENFRiAxMi0xMjM0Ni00CithbHdheXMgXHU0Q0YwIDEzNS0xNDYtNAorYWx3YXlzIFx1NENGMSAzNC01CithbHdheXMgXHU0Q0YyIDEtMTM2LTUKK2Fsd2F5cyBcdTRDRjMgMTUtMTI1Ni01CithbHdheXMgXHU0Q0Y0IDEyNC0zNDUtNQorYWx3YXlzIFx1NENGNSAxMi0xNTYtNQorYWx3YXlzIFx1NENGNiAxMy0xNi0zCithbHdheXMgXHU0Q0Y3IDI0NS0xMjM0Ni0yCithbHdheXMgXHU0Q0Y4IDEzNC0zNDUtMgorYWx3YXlzIFx1NENGOSAxMjMtMTIzNTYtNQorYWx3YXlzIFx1NENGQSAxMjM2LTMKK2Fsd2F5cyBcdTRDRkIgMjQ1LTEyMzYtMgorYWx3YXlzIFx1NENGQyAxMjM1Ni0zCithbHdheXMgXHU0Q0ZEIDEyMzUtMjM0Ni01CithbHdheXMgXHU0Q0ZFIDE0NS0xMzU2LTMKK2Fsd2F5cyBcdTRDRkYgMTI0NS0xMjM2LTIKK2Fsd2F5cyBcdTREMDAgMTI0LTEyMzQ2LTIKK2Fsd2F5cyBcdTREMDEgMTI1Ni01CithbHdheXMgXHU0RDAyIDE1LTQ2LTUKK2Fsd2F5cyBcdTREMDMgMTM0NS0xNDYtMgorYWx3YXlzIFx1NEQwNCAyNC0xMjM0NTYtNQorYWx3YXlzIFx1NEQwNSAxMjM0NS0xMzYtMgorYWx3YXlzIFx1NEQwNiAxMjM0LTM0LTMKK2Fsd2F5cyBcdTREMDcgMTQtMTM0NTYtMgorYWx3YXlzIFx1NEQwOCAxNDYtNAorYWx3YXlzIFx1NEQwOSAxNS00NS0yCithbHdheXMgXHU0RDBBIDE2LTIKK2Fsd2F5cyBcdTREMEIgMTUtNDUtMgorYWx3YXlzIFx1NEQwQyAxMzQtMTM1Ni0yCithbHdheXMgXHU0RDBEIDEzNDU2LTMKK2Fsd2F5cyBcdTREMEUgMTQtMzU2LTQKK2Fsd2F5cyBcdTREMEYgMjM0NS01CithbHdheXMgXHU0RDEwIDEzNS0xNDYtNAorYWx3YXlzIFx1NEQxMSAxNDUtMzQ2LTIKK2Fsd2F5cyBcdTREMTIgMTQtMTM0NTYtMgorYWx3YXlzIFx1NEQxMyAyNC0xNTYtMworYWx3YXlzIFx1NEQxNCAxMy0yNDYtMworYWx3YXlzIFx1NEQxNSAxNC0zNDYtNQorYWx3YXlzIFx1NEQxNiAxMy0xMzQ1Ni0zCithbHdheXMgXHU0RDE3IDEzLTEyNTYtMgorYWx3YXlzIFx1NEQxOCAxMjQtMTYtMgorYWx3YXlzIFx1NEQxOSAxMjM0LTE2LTUKK2Fsd2F5cyBcdTREMUEgMTMtMTM0Ni00CithbHdheXMgXHU0RDFCIDE1LTI0Ni0zCithbHdheXMgXHU0RDFDIDEyMzUtMjM1Ni0yCithbHdheXMgXHU0RDFEIDEyLTIzNTYtNQorYWx3YXlzIFx1NEQxRSAxNDUtMTYtMgorYWx3YXlzIFx1NEQxRiAxMjM1LTEyNDU2LTIKK2Fsd2F5cyBcdTREMjAgMTQ2LTQKK2Fsd2F5cyBcdTREMjEgMTQtMTYtNQorYWx3YXlzIFx1NEQyMiAxMzQtMTYtMgorYWx3YXlzIFx1NEQyMyAxMjM1LTM0LTMKK2Fsd2F5cyBcdTREMjQgMjQtMTM1Ni0zCithbHdheXMgXHU0RDI1IDEzLTIzNDU2LTMKK2Fsd2F5cyBcdTREMjYgMTQ1Ni0yCithbHdheXMgXHU0RDI3IDEyNDYtMworYWx3YXlzIFx1NEQyOSAxMjM0LTI0Ni0yCithbHdheXMgXHU0RDJBIDE0LTM0LTUKK2Fsd2F5cyBcdTREMkIgMTQtMTM0NTYtMgorYWx3YXlzIFx1NEQyQyAxNi01CithbHdheXMgXHU0RDJEIDI0NS0yNDU2LTIKK2Fsd2F5cyBcdTREMkUgMjQtMTIzNi01CithbHdheXMgXHU0RDJGIDEyMzUtMzQtNQorYWx3YXlzIFx1NEQzMCAyNC0zNC0yCithbHdheXMgXHU0RDMxIDEyNC0yNS0zCithbHdheXMgXHU0RDMyIDEzNC0xMjYtNQorYWx3YXlzIFx1NEQzMyAxMjM1LTM1LTIKK2Fsd2F5cyBcdTREMzQgMTI0LTM0Ni01CithbHdheXMgXHU0RDM1IDEzNS0xMzQ1Ni00CithbHdheXMgXHU0RDM2IDEyMzQtMTM1Ni0yCithbHdheXMgXHU0RDM3IDEyMzUtMTIzNDU2LTIKK2Fsd2F5cyBcdTREMzggMTIzNDUtMzQtMworYWx3YXlzIFx1NEQzOSAxMy0yNS00CithbHdheXMgXHU0RDNBIDEzNS0zNC01CithbHdheXMgXHU0RDNCIDE0LTE2LTIKK2Fsd2F5cyBcdTREM0MgMTItMTIzNi01CithbHdheXMgXHU0RDNEIDEyMzQtMTYtMgorYWx3YXlzIFx1NEQzRSAyNDUtMjUtMgorYWx3YXlzIFx1NEQzRiAxMzQtMTM1Ni0yCithbHdheXMgXHU0RDQwIDE1LTI1LTQKK2Fsd2F5cyBcdTRENDEgMjQ1LTQ2LTUKK2Fsd2F5cyBcdTRENDIgMS0xNTYtMgorYWx3YXlzIFx1NEQ0MyAxMjMtNDU2LTUKK2Fsd2F5cyBcdTRENDQgMTIzNDUtMTM1Ni0zCithbHdheXMgXHU0RDQ1IDE0Ni0yCithbHdheXMgXHU0RDQ2IDEzNC0xMzU2LTIKK2Fsd2F5cyBcdTRENDcgMTUtMjM0NS01CithbHdheXMgXHU0RDQ4IDEyMy0zNC01CithbHdheXMgXHU0RDQ5IDEyNC0xMjM1Ni0yCithbHdheXMgXHU0RDRBIDEyNC0xMjM0NTYtMworYWx3YXlzIFx1NEQ0QiAxMjM1LTEyNDYtNAorYWx3YXlzIFx1NEQ0QyAxNS0yMzQ1LTMKK2Fsd2F5cyBcdTRENEQgMTI0LTEyMzQ1Ni0zCithbHdheXMgXHU0RDRFIDEyNC0xMjQ1Ni0zCithbHdheXMgXHU0RDRGIDE0LTE0Ni00CithbHdheXMgXHU0RDUwIDEyLTEyMzYtNAorYWx3YXlzIFx1NEQ1MSAxMzQ1LTE2LTUKK2Fsd2F5cyBcdTRENTIgMTM0NS0xNi01CithbHdheXMgXHU0RDUzIDE0LTE2LTIKK2Fsd2F5cyBcdTRENTQgMTQ1LTEyMzQ2LTQKK2Fsd2F5cyBcdTRENTUgMTMtMTI1Ni01CithbHdheXMgXHU0RDU2IDI0NS0yMzQ1LTUKK2Fsd2F5cyBcdTRENTcgMTM1LTEyNi0yCithbHdheXMgXHU0RDU4IDI0LTI0NTYtNQorYWx3YXlzIFx1NEQ1OSAxLTM0NS00CithbHdheXMgXHU0RDVBIDEyNC0xNDYtNAorYWx3YXlzIFx1NEQ1QiAyNDUtMjM0NS01CithbHdheXMgXHU0RDVDIDEzNDUtMTIzNDYtNAorYWx3YXlzIFx1NEQ1RCAyMzQ1Ni01CithbHdheXMgXHU0RDVFIDI0NS0xMzQ1Ni0yCithbHdheXMgXHU0RDVGIDEzLTEyMzYtNAorYWx3YXlzIFx1NEQ2MCAxNDUtMTYtMgorYWx3YXlzIFx1NEQ2MSAxMy0yMzQ1LTQKK2Fsd2F5cyBcdTRENjIgMTM0LTM1Ni01CithbHdheXMgXHU0RDYzIDE0NS0zNDUtMgorYWx3YXlzIFx1NEQ2NCAxMy0yMzQ1LTQKK2Fsd2F5cyBcdTRENjUgMTI1Ni01CithbHdheXMgXHU0RDY2IDM0LTMKK2Fsd2F5cyBcdTRENjcgMTI1LTI0NTYtNQorYWx3YXlzIFx1NEQ2OCAxMzQtMTM0Ni0yCithbHdheXMgXHU0RDY5IDE0LTE2LTIKK2Fsd2F5cyBcdTRENkEgMTMtMTIzNDU2LTQKK2Fsd2F5cyBcdTRENkIgMTUtMjU2LTMKK2Fsd2F5cyBcdTRENkMgMTI0LTM0NS01CithbHdheXMgXHU0RDZEIDEtMjM0Ni01CithbHdheXMgXHU0RDZFIDQ2LTUKK2Fsd2F5cyBcdTRENkYgMTI0LTEyNDU2LTQKK2Fsd2F5cyBcdTRENzAgMjQtMTM0Ni0zCithbHdheXMgXHU0RDcxIDE1LTE2LTUKK2Fsd2F5cyBcdTRENzIgMjQ1LTI0Ni0zCithbHdheXMgXHU0RDczIDEyNDYtNQorYWx3YXlzIFx1NEQ3NCAyNTYtNQorYWx3YXlzIFx1NEQ3NSAxMi0zNS0zCithbHdheXMgXHU0RDc2IDI0NS0xMjU2LTIKK2Fsd2F5cyBcdTRENzcgMzUtMworYWx3YXlzIFx1NEQ3OCAyNDUtMzQtNQorYWx3YXlzIFx1NEQ3OSAxLTE1Ni0zCithbHdheXMgXHU0RDdBIDEyNC0xMzQ1Ni00CithbHdheXMgXHU0RDdCIDEyMzUtMTI0Ni01CithbHdheXMgXHU0RDdDIDI0LTEzNDYtMworYWx3YXlzIFx1NEQ3RCAyNDUtMzQ1LTUKK2Fsd2F5cyBcdTREN0UgMTIzNDUtMzQtMgorYWx3YXlzIFx1NEQ3RiAxMjQtMzQ2LTUKK2Fsd2F5cyBcdTREODAgMTI0LTM0NS01CithbHdheXMgXHU0RDgxIDEyNC0zNDUtNQorYWx3YXlzIFx1NEQ4MiAxLTI1LTIKK2Fsd2F5cyBcdTREODMgMTIzNS0xMjM2LTIKK2Fsd2F5cyBcdTREODQgMTIzNC0xMzQ1Ni0yCithbHdheXMgXHU0RDg1IDEyMzUtMjM0Ni01CithbHdheXMgXHU0RDg2IDEtMTI0Ni0zCithbHdheXMgXHU0RDg3IDEtMTIzNTYtNQorYWx3YXlzIFx1NEQ4OCAxMzUtMTI2LTIKK2Fsd2F5cyBcdTREODkgMTQtMjM0LTIKK2Fsd2F5cyBcdTREOEEgMTM0NS0xMjU2LTUKK2Fsd2F5cyBcdTREOEIgMTUtMTYtMworYWx3YXlzIFx1NEQ4QyAxMjM0LTE0Ni01CithbHdheXMgXHU0RDhEIDEyNC0xNi01CithbHdheXMgXHU0RDhFIDEyMzUtMjM0Ni0yCithbHdheXMgXHU0RDhGIDEyNC0xNi01CithbHdheXMgXHU0RDkwIDEyMzUtMTI0Ni01CithbHdheXMgXHU0RDkxIDEyNC0xNi01CithbHdheXMgXHU0RDkyIDI0NS0xNi0yCithbHdheXMgXHU0RDkzIDEzLTE2LTUKK2Fsd2F5cyBcdTREOTQgMTItMTU2LTIKK2Fsd2F5cyBcdTREOTUgMTM1LTM0NS0zCithbHdheXMgXHU0RDk2IDEzLTE0NTYtNQorYWx3YXlzIFx1NEQ5NyAxMjMtMjM0Ni01CithbHdheXMgXHU0RDk4IDE0LTE2LTUKK2Fsd2F5cyBcdTREOTkgMTMtMTI1Ni01CithbHdheXMgXHU0RDlBIDI0NS0xMjU2LTQKK2Fsd2F5cyBcdTREOUIgMTQtMzQ1LTUKK2Fsd2F5cyBcdTREOUMgMTMtMzQtNAorYWx3YXlzIFx1NEQ5RCAxNS0zNDYtMgorYWx3YXlzIFx1NEQ5RSAyNDUtMTYtMgorYWx3YXlzIFx1NEQ5RiAxNS0yMzQ1LTUKK2Fsd2F5cyBcdTREQTAgMTUtMjM0NS0yCithbHdheXMgXHU0REExIDI0LTE1Ni0yCithbHdheXMgXHU0REEyIDE1LTIzNDUtMgorYWx3YXlzIFx1NERBMyAyNDU2LTIKK2Fsd2F5cyBcdTREQTQgMTIzNS0zNS0yCithbHdheXMgXHU0REE1IDEtMzQ1LTMKK2Fsd2F5cyBcdTREQTYgMTI1LTIzNDYtMgorYWx3YXlzIFx1NERBNyAyNDYtNAorYWx3YXlzIFx1NERBOCAxLTEyMzYtMworYWx3YXlzIFx1NERBOSAxMy0xNi01CithbHdheXMgXHU0REFBIDEyLTM0NS0yCithbHdheXMgXHU0REFCIDIzNDUtNQorYWx3YXlzIFx1NERBQyAxMy0yMzQ1LTMKK2Fsd2F5cyBcdTREQUUgMjM0NS00CithbHdheXMgXHU0REFGIDEyMy0xMjQ2LTMKK2Fsd2F5cyBcdTREQjAgMTMtMjQ2LTMKK2Fsd2F5cyBcdTREQjEgMTI0LTEyMzQ2LTIKK2Fsd2F5cyBcdTREQjIgMTI0NS0xMjM2LTIKK2Fsd2F5cyBcdTREQjMgMjM2LTUKK2Fsd2F5cyBcdTREQjQgMTItMTI0Ni0zCithbHdheXMgXHU0REI1IDEyLTE1Ni0yCithbHdheXMgXHU0RTAwIDE2LTMKK2Fsd2F5cyBcdTRFMDEgMTQ1LTEzNDU2LTMKK2Fsd2F5cyBcdTRFMDIgMTIzLTE0Ni00CithbHdheXMgXHU0RTAzIDI0NS0xNi0zCithbHdheXMgXHU0RTA0IDI0LTEzNDYtNQorYWx3YXlzIFx1NEUwNSAxNS0yMzQ1Ni01CithbHdheXMgXHU0RTA2IDEyMzUtMTIzNi00CithbHdheXMgXHU0RTA3IDEyNDU2LTUKK2Fsd2F5cyBcdTRFMDggMS0xMzQ2LTUKK2Fsd2F5cyBcdTRFMDkgMTUtMTIzNi0zCithbHdheXMgXHU0RTBBIDI0LTEzNDYtNQorYWx3YXlzIFx1NEUwQiAxNS0yMzQ1Ni01CithbHdheXMgXHU0RTBDIDEzLTE2LTMKK2Fsd2F5cyBcdTRFMEQgMTM1LTM0LTUKK2Fsd2F5cyBcdTRFMEUgMTI1Ni00CithbHdheXMgXHU0RTBGIDEzNC0yMzQ1LTQKK2Fsd2F5cyBcdTRFMTAgMTMtMjQ1Ni01CithbHdheXMgXHU0RTExIDEyLTEyMzU2LTQKK2Fsd2F5cyBcdTRFMTIgMTItMTIzNTYtNAorYWx3YXlzIFx1NEUxMyAxLTEyNDU2LTMKK2Fsd2F5cyBcdTRFMTQgMjQ1LTM0Ni00CithbHdheXMgXHU0RTE1IDEyMzQtMTYtMworYWx3YXlzIFx1NEUxNiAyNC0xNTYtNQorYWx3YXlzIFx1NEUxNyAyNC0xNTYtNQorYWx3YXlzIFx1NEUxOCAyNDUtMjM0LTMKK2Fsd2F5cyBcdTRFMTkgMTM1LTEzNDU2LTQKK2Fsd2F5cyBcdTRFMUEgMzQ2LTUKK2Fsd2F5cyBcdTRFMUIgMjQ1LTEyMzQ2LTIKK2Fsd2F5cyBcdTRFMUMgMTQ1LTEyMzQ2LTMKK2Fsd2F5cyBcdTRFMUQgMTUtMTU2LTMKK2Fsd2F5cyBcdTRFMUUgMTItMTM1Ni0yCithbHdheXMgXHU0RTFGIDE0NS0yMzQtMworYWx3YXlzIFx1NEUyMCAyNDUtMjM0LTMKK2Fsd2F5cyBcdTRFMjEgMTQtNDYtNAorYWx3YXlzIFx1NEUyMiAxNDUtMjM0LTMKK2Fsd2F5cyBcdTRFMjMgMjM0LTQKK2Fsd2F5cyBcdTRFMjQgMTQtNDYtNAorYWx3YXlzIFx1NEUyNSAyMzQ1LTIKK2Fsd2F5cyBcdTRFMjYgMTM1LTEzNDU2LTUKK2Fsd2F5cyBcdTRFMjcgMTUtMTM0Ni01CithbHdheXMgXHU0RTI4IDEzLTEyMzQ1Ni00CithbHdheXMgXHU0RTI5IDEzLTIzNC0zCithbHdheXMgXHU0RTJBIDEzLTIzNDYtNQorYWx3YXlzIFx1NEUyQiAyMzQ1Ni0zCithbHdheXMgXHU0RTJDIDEtNDU2LTUKK2Fsd2F5cyBcdTRFMkQgMS0xMjM0Ni0zCithbHdheXMgXHU0RTJFIDEzLTE2LTQKK2Fsd2F5cyBcdTRFMkYgMTMtMzQ2LTUKK2Fsd2F5cyBcdTRFMzAgMTIzNDUtMTM1Ni0zCithbHdheXMgXHU0RTMxIDEzLTEyNDU2LTUKK2Fsd2F5cyBcdTRFMzIgMTItMTI0NTYtNQorYWx3YXlzIFx1NEUzMyAxMi0xMjM2LTQKK2Fsd2F5cyBcdTRFMzQgMTQtMTQ1Ni0yCithbHdheXMgXHU0RTM1IDEtMjUtMgorYWx3YXlzIFx1NEUzNiAxLTM0LTQKK2Fsd2F5cyBcdTRFMzcgMTM1LTM0NS0zCithbHdheXMgXHU0RTM4IDEyNDU2LTIKK2Fsd2F5cyBcdTRFMzkgMTQ1LTEyMzYtMworYWx3YXlzIFx1NEUzQSAxMjQ2LTIKK2Fsd2F5cyBcdTRFM0IgMS0zNC00CithbHdheXMgXHU0RTNDIDEzLTEzNDU2LTQKK2Fsd2F5cyBcdTRFM0QgMTQtMTYtNQorYWx3YXlzIFx1NEUzRSAxMy0xMjU2LTQKK2Fsd2F5cyBcdTRFM0YgMTIzNC0zNDYtNAorYWx3YXlzIFx1NEU0MCAxMjM0NS0zNC0yCithbHdheXMgXHU0RTQxIDE2LTIKK2Fsd2F5cyBcdTRFNDIgMTYtNQorYWx3YXlzIFx1NEU0MyAxMzQ1LTI0NTYtNAorYWx3YXlzIFx1NEU0NCAzNC00CithbHdheXMgXHU0RTQ1IDEzLTIzNC00CithbHdheXMgXHU0RTQ2IDEzLTIzNC00CithbHdheXMgXHU0RTQ3IDEyNC0yNS0zCithbHdheXMgXHU0RTQ4IDI0Ni0zCithbHdheXMgXHU0RTQ5IDE2LTUKK2Fsd2F5cyBcdTRFNEEgMTYtMworYWx3YXlzIFx1NEU0QiAxLTE1Ni0zCithbHdheXMgXHU0RTRDIDM0LTMKK2Fsd2F5cyBcdTRFNEQgMS0zNDUtNQorYWx3YXlzIFx1NEU0RSAxMjM1LTM0LTMKK2Fsd2F5cyBcdTRFNEYgMTIzNDUtMzQ1LTIKK2Fsd2F5cyBcdTRFNTAgMTQtMjM0Ni01CithbHdheXMgXHU0RTUxIDEtMTIzNDYtNQorYWx3YXlzIFx1NEU1MiAxMjM0LTEzNDU2LTMKK2Fsd2F5cyBcdTRFNTMgMTIzNC0xMzQ2LTMKK2Fsd2F5cyBcdTRFNTQgMjQ1LTI0Ni0yCithbHdheXMgXHU0RTU1IDEyMzUtMzQtNAorYWx3YXlzIFx1NEU1NiAxMy0yMzU2LTMKK2Fsd2F5cyBcdTRFNTcgMTItMTM1Ni0yCithbHdheXMgXHU0RTU4IDEyLTEzNTYtMgorYWx3YXlzIFx1NEU1OSAxNi00CithbHdheXMgXHU0RTVBIDE2LTQKK2Fsd2F5cyBcdTRFNUIgMTI0NTYtMworYWx3YXlzIFx1NEU1QyAxMzQtMzQ2LTMKK2Fsd2F5cyBcdTRFNUQgMTMtMjM0LTQKK2Fsd2F5cyBcdTRFNUUgMjQ1LTE2LTQKK2Fsd2F5cyBcdTRFNUYgMzQ2LTQKK2Fsd2F5cyBcdTRFNjAgMTUtMTYtMgorYWx3YXlzIFx1NEU2MSAxNS00Ni0zCithbHdheXMgXHU0RTYyIDEzLTI0NTYtNQorYWx3YXlzIFx1NEU2MyAxMy0yMzQtNAorYWx3YXlzIFx1NEU2NCAxNS0yMzQ1Ni01CithbHdheXMgXHU0RTY1IDEyMzUtMjM0Ni0yCithbHdheXMgXHU0RTY2IDI0LTM0LTMKK2Fsd2F5cyBcdTRFNjcgMTQ1LTEyMzU2LTQKK2Fsd2F5cyBcdTRFNjggMjQtMTU2LTQKK2Fsd2F5cyBcdTRFNjkgMTMtMTYtMworYWx3YXlzIFx1NEU2QSAxMzQ1LTEzNDYtMgorYWx3YXlzIFx1NEU2QiAxMy0yMzQ1Ni0zCithbHdheXMgXHU0RTZDIDEzLTEyNTYtNQorYWx3YXlzIFx1NEU2RCAyNC0xNTYtMgorYWx3YXlzIFx1NEU2RiAxMjM1LTM0LTMKK2Fsd2F5cyBcdTRFNzAgMTM0LTI0NTYtNAorYWx3YXlzIFx1NEU3MSAxNC0xMjQ1Ni01CithbHdheXMgXHU0RTcyIDEyNS0xNTYtMworYWx3YXlzIFx1NEU3MyAxMjQ1LTM0LTQKK2Fsd2F5cyBcdTRFNzQgMTUtMjM2LTIKK2Fsd2F5cyBcdTRFNzUgMjM0NS00CithbHdheXMgXHU0RTc2IDEyMzQ1LTM0LTQKK2Fsd2F5cyBcdTRFNzcgMjQtMzQ1LTMKK2Fsd2F5cyBcdTRFNzggMTM0NS0zNDUtNAorYWx3YXlzIFx1NEU3OSAxMy0xMjM2LTMKK2Fsd2F5cyBcdTRFN0EgMTUtMjUtNAorYWx3YXlzIFx1NEU3QiAxNTYtNQorYWx3YXlzIFx1NEU3QyAxLTM0LTUKK2Fsd2F5cyBcdTRFN0QgMjQ1LTIzNDYtNQorYWx3YXlzIFx1NEU3RSAxMy0xMjM2LTMKK2Fsd2F5cyBcdTRFN0YgMTItMTU2LTUKK2Fsd2F5cyBcdTRFODAgMTMtMTI0Ni0zCithbHdheXMgXHU0RTgxIDEzLTEyMzYtMworYWx3YXlzIFx1NEU4MiAxNC0xMjQ1Ni01CithbHdheXMgXHU0RTgzIDE0LTE0NTYtMgorYWx3YXlzIFx1NEU4NCAxNi01CithbHdheXMgXHU0RTg1IDEzLTIzNi0yCithbHdheXMgXHU0RTg2IDE0LTIzNDYtMQorYWx3YXlzIFx1NEU4NyAxMzQtMzQ1LTMKK2Fsd2F5cyBcdTRFODggMTI1Ni00CithbHdheXMgXHU0RTg5IDEtMTM1Ni0zCithbHdheXMgXHU0RThBIDI0LTE1Ni01CithbHdheXMgXHU0RThCIDI0LTE1Ni01CithbHdheXMgXHU0RThDIDE1Ni01CithbHdheXMgXHU0RThEIDEyLTM0LTUKK2Fsd2F5cyBcdTRFOEUgMTI1Ni0yCithbHdheXMgXHU0RThGIDEyMy0xMjQ2LTMKK2Fsd2F5cyBcdTRFOTAgMTI1Ni0yCithbHdheXMgXHU0RTkxIDI1Ni0yCithbHdheXMgXHU0RTkyIDEyMzUtMzQtNQorYWx3YXlzIFx1NEU5MyAyNDUtMTYtMgorYWx3YXlzIFx1NEU5NCAzNC00CithbHdheXMgXHU0RTk1IDEzLTEzNDU2LTQKK2Fsd2F5cyBcdTRFOTYgMTUtMTU2LTUKK2Fsd2F5cyBcdTRFOTcgMTUtMTI0Ni01CithbHdheXMgXHU0RTk4IDEzLTEzNi01CithbHdheXMgXHU0RTk5IDEzLTEzNi01CithbHdheXMgXHU0RTlBIDIzNDU2LTQKK2Fsd2F5cyBcdTRFOUIgMTUtMzQ2LTMKK2Fsd2F5cyBcdTRFOUMgMjM0NTYtNAorYWx3YXlzIFx1NEU5RCAyNDUtMTYtMgorYWx3YXlzIFx1NEU5RSAyMzQ1Ni00CithbHdheXMgXHU0RTlGIDEzLTE2LTIKK2Fsd2F5cyBcdTRFQTAgMTI0LTEyMzU2LTIKK2Fsd2F5cyBcdTRFQTEgNDU2LTIKK2Fsd2F5cyBcdTRFQTIgMTIzLTEzNDYtNQorYWx3YXlzIFx1NEVBMyAxMjQtMzQ1LTUKK2Fsd2F5cyBcdTRFQTQgMTMtMjQ2LTMKK2Fsd2F5cyBcdTRFQTUgMTIzNS0yNDU2LTUKK2Fsd2F5cyBcdTRFQTYgMTYtNQorYWx3YXlzIFx1NEVBNyAxMi0xMjM2LTQKK2Fsd2F5cyBcdTRFQTggMTIzNS0xMzU2LTMKK2Fsd2F5cyBcdTRFQTkgMTM0LTM0LTQKK2Fsd2F5cyBcdTRFQUEgMzQ2LTUKK2Fsd2F5cyBcdTRFQUIgMTUtNDYtNAorYWx3YXlzIFx1NEVBQyAxMy0xMzQ1Ni0zCithbHdheXMgXHU0RUFEIDEyNC0xMzQ1Ni0yCithbHdheXMgXHU0RUFFIDE0LTQ2LTUKK2Fsd2F5cyBcdTRFQUYgMTUtNDYtNAorYWx3YXlzIFx1NEVCMCAxMy0xMzQ1Ni0zCithbHdheXMgXHU0RUIxIDM0Ni01CithbHdheXMgXHU0RUIyIDI0NS0xNDU2LTMKK2Fsd2F5cyBcdTRFQjMgMTM1LTEyNi0xCithbHdheXMgXHU0RUI0IDIzNC01CithbHdheXMgXHU0RUI1IDE1LTM0Ni01CithbHdheXMgXHU0RUI2IDE0NS0xMjM2LTQKK2Fsd2F5cyBcdTRFQjcgMTQtMjM0NS0yCithbHdheXMgXHU0RUI4IDE0NS0yNS00CithbHdheXMgXHU0RUI5IDEyNDYtNAorYWx3YXlzIFx1NEVCQSAxMjQ1LTEzNi0yCithbHdheXMgXHU0RUJCIDEyNDUtMTM2LTIKK2Fsd2F5cyBcdTRFQkMgMTMtMTYtMgorYWx3YXlzIFx1NEVCRCAxMy0xNi0yCithbHdheXMgXHU0RUJFIDQ1Ni0yCithbHdheXMgXHU0RUJGIDE2LTUKK2Fsd2F5cyBcdTRFQzAgMjQtMTU2LTIKK2Fsd2F5cyBcdTRFQzEgMTI0NS0xMzYtMgorYWx3YXlzIFx1NEVDMiAxNC0yMzQ2LTUKK2Fsd2F5cyBcdTRFQzMgMTQ1LTEzNDU2LTMKK2Fsd2F5cyBcdTRFQzQgMTI1LTIzNDYtNQorYWx3YXlzIFx1NEVDNSAxMy0xNDU2LTQKK2Fsd2F5cyBcdTRFQzYgMTIzNC0zNC0zCithbHdheXMgXHU0RUM3IDEyLTEyMzU2LTIKK2Fsd2F5cyBcdTRFQzggMTM1LTM0NS0zCithbHdheXMgXHU0RUM5IDEtMTM0Ni00CithbHdheXMgXHU0RUNBIDEzLTE0NTYtMworYWx3YXlzIFx1NEVDQiAxMy0zNDYtNQorYWx3YXlzIFx1NEVDQyAxMzUtMTM0NTYtMworYWx3YXlzIFx1NEVDRCAxMjQ1LTEzNTYtMgorYWx3YXlzIFx1NEVDRSAyNDUtMTIzNDYtMgorYWx3YXlzIFx1NEVDRiAxMjM0NS0xMjYtMgorYWx3YXlzIFx1NEVEMCAxNS0xMjM2LTQKK2Fsd2F5cyBcdTRFRDEgMTQtMTIzNDU2LTIKK2Fsd2F5cyBcdTRFRDIgMTM1LTE0NTYtMworYWx3YXlzIFx1NEVEMyAyNDUtMTM0Ni0zCithbHdheXMgXHU0RUQ0IDEyNS0xNTYtNAorYWx3YXlzIFx1NEVENSAyNC0xNTYtNQorYWx3YXlzIFx1NEVENiAxMjQ3LTM0NS0zCithbHdheXMgXHU0RUQ3IDEtMTM0Ni01CithbHdheXMgXHU0RUQ4IDEyMzQ1LTM0LTUKK2Fsd2F5cyBcdTRFRDkgMTUtMjM0NS0zCithbHdheXMgXHU0RURBIDE1LTIzNDUtMworYWx3YXlzIFx1NEVEQiAxMjQtMjUtMworYWx3YXlzIFx1NEVEQyAxMjM1LTEyMzQ2LTIKK2Fsd2F5cyBcdTRFREQgMTI0LTEyMzQ2LTIKK2Fsd2F5cyBcdTRFREUgMTI0NS0xMzYtNQorYWx3YXlzIFx1NEVERiAyNDUtMjM0NS0zCithbHdheXMgXHU0RUUwIDEzLTEyMzYtNAorYWx3YXlzIFx1NEVFMSAxNi01CithbHdheXMgXHU0RUUyIDE0NS0xNi0yCithbHdheXMgXHU0RUUzIDE0NS0yNDU2LTUKK2Fsd2F5cyBcdTRFRTQgMTQtMTM0NTYtNQorYWx3YXlzIFx1NEVFNSAxNi00CithbHdheXMgXHU0RUU2IDEyLTE0Ni01CithbHdheXMgXHU0RUU3IDEyLTEzNDYtMgorYWx3YXlzIFx1NEVFOCAxNS0zNDUtMworYWx3YXlzIFx1NEVFOSAyNC0xMzQ2LTUKK2Fsd2F5cyBcdTRFRUEgMTYtMgorYWx3YXlzIFx1NEVFQiAxMzQtMzQtNQorYWx3YXlzIFx1NEVFQyAxMzQtMTM2LTEKK2Fsd2F5cyBcdTRFRUQgMTI0NS0xMzYtNQorYWx3YXlzIFx1NEVFRSAxMy0yMzQ1Ni00CithbHdheXMgXHU0RUVGIDEyLTE0Ni01CithbHdheXMgXHU0RUYwIDQ2LTQKK2Fsd2F5cyBcdTRFRjEgMjQ1LTIzNDUtMgorYWx3YXlzIFx1NEVGMiAxLTEyMzQ2LTUKK2Fsd2F5cyBcdTRFRjMgMTIzNC0xNi00CithbHdheXMgXHU0RUY0IDEyNDU2LTUKK2Fsd2F5cyBcdTRFRjUgMzQtNAorYWx3YXlzIFx1NEVGNiAxMy0yMzQ1LTUKK2Fsd2F5cyBcdTRFRjcgMTMtMjM0NTYtNQorYWx3YXlzIFx1NEVGOCAyNDYtNAorYWx3YXlzIFx1NEVGOSAxMjM0NS0xMzU2LTMKK2Fsd2F5cyBcdTRFRkEgMjQ1LTEzNDYtMworYWx3YXlzIFx1NEVGQiAxMjQ1LTEzNi01CithbHdheXMgXHU0RUZDIDQ1Ni0yCithbHdheXMgXHU0RUZEIDEyMzQ1LTEzNi01CithbHdheXMgXHU0RUZFIDE0NS0xNi0zCithbHdheXMgXHU0RUZGIDEyMzQ1LTEzNDYtNAorYWx3YXlzIFx1NEYwMCAxLTEyMzQ2LTMKK2Fsd2F5cyBcdTRGMDEgMjQ1LTE2LTUKK2Fsd2F5cyBcdTRGMDIgMTIzNC0zNTYtNQorYWx3YXlzIFx1NEYwMyAxMjU2LTIKK2Fsd2F5cyBcdTRGMDQgMTQ1LTI0Ni01CithbHdheXMgXHU0RjA1IDEyNC0xMjM0NTYtMgorYWx3YXlzIFx1NEYwNiAxMjM0NTYtNQorYWx3YXlzIFx1NEYwNyAxNi01CithbHdheXMgXHU0RjA4IDE1LTE0NTYtNAorYWx3YXlzIFx1NEYwOSAxMjMtMTM0Ni01CithbHdheXMgXHU0RjBBIDE2LTMKK2Fsd2F5cyBcdTRGMEIgMTMtMTYtMgorYWx3YXlzIFx1NEYwQyAyNDU2LTUKK2Fsd2F5cyBcdTRGMEQgMzQtNAorYWx3YXlzIFx1NEYwRSAxMy0xNi01CithbHdheXMgXHU0RjBGIDEyMzQ1LTM0LTIKK2Fsd2F5cyBcdTRGMTAgMTIzNDUtMzQ1LTIKK2Fsd2F5cyBcdTRGMTEgMTUtMjM0LTMKK2Fsd2F5cyBcdTRGMTIgMTMtMTQ1Ni01CithbHdheXMgXHU0RjEzIDEzNS0zNTYtMworYWx3YXlzIFx1NEYxNCAxMi0xMzYtMgorYWx3YXlzIFx1NEYxNSAxMjM0NS0zNC0zCithbHdheXMgXHU0RjE2IDEyNC0xMzQ2LTQKK2Fsd2F5cyBcdTRGMTcgMS0xMjM0Ni01CithbHdheXMgXHU0RjE4IDIzNC0zCithbHdheXMgXHU0RjE5IDEyMzUtMjUtNAorYWx3YXlzIFx1NEYxQSAxMjM1LTEyNDYtNQorYWx3YXlzIFx1NEYxQiAxMjU2LTQKK2Fsd2F5cyBcdTRGMUMgMjQ1LTEyNDYtNQorYWx3YXlzIFx1NEYxRCAyNTYtMgorYWx3YXlzIFx1NEYxRSAxNS0xMjM2LTQKK2Fsd2F5cyBcdTRGMUYgMTI0Ni00CithbHdheXMgXHU0RjIwIDEyLTEyNDU2LTIKK2Fsd2F5cyBcdTRGMjEgMTItMjM0Ni0zCithbHdheXMgXHU0RjIyIDIzNDU2LTIKK2Fsd2F5cyBcdTRGMjMgMjQ1LTIzNDUtNQorYWx3YXlzIFx1NEYyNCAyNC0xMzQ2LTMKK2Fsd2F5cyBcdTRGMjUgMTItMTM0Ni0zCithbHdheXMgXHU0RjI2IDE0LTEyMzQ1Ni0yCithbHdheXMgXHU0RjI3IDI0NS0xMzQ2LTMKK2Fsd2F5cyBcdTRGMjggMTUtMjU2LTUKK2Fsd2F5cyBcdTRGMjkgMTUtMTQ1Ni01CithbHdheXMgXHU0RjJBIDEyNDYtNAorYWx3YXlzIFx1NEYyQiAxLTM0LTUKK2Fsd2F5cyBcdTRGMkMgMTItMTU2LTQKK2Fsd2F5cyBcdTRGMkQgMTUtNDUtMgorYWx3YXlzIFx1NEYyRSAxMzQ1LTM0LTIKK2Fsd2F5cyBcdTRGMkYgMTM1LTEyNi0yCithbHdheXMgXHU0RjMwIDEzLTM0LTMKK2Fsd2F5cyBcdTRGMzEgMTM0NTctMTYtNAorYWx3YXlzIFx1NEYzMiAxMzQ1LTE2LTUKK2Fsd2F5cyBcdTRGMzMgMTUtMzQ2LTUKK2Fsd2F5cyBcdTRGMzQgMTM1LTEyMzYtNQorYWx3YXlzIFx1NEYzNSAxNS0xMjU2LTUKK2Fsd2F5cyBcdTRGMzYgMTQtMTM0NTYtMgorYWx3YXlzIFx1NEYzNyAxLTEyMzU2LTUKK2Fsd2F5cyBcdTRGMzggMjQtMTM2LTMKK2Fsd2F5cyBcdTRGMzkgMjQ1LTEyNTYtMworYWx3YXlzIFx1NEYzQSAxNS0xNTYtNQorYWx3YXlzIFx1NEYzQiAxMzUtMTM1Ni0zCithbHdheXMgXHU0RjNDIDE1LTE1Ni01CithbHdheXMgXHU0RjNEIDEzLTIzNDU2LTMKK2Fsd2F5cyBcdTRGM0UgMTIzNC0xNi0zCithbHdheXMgXHU0RjNGIDE2LTUKK2Fsd2F5cyBcdTRGNDAgMTUtMTU2LTUKK2Fsd2F5cyBcdTRGNDEgMjQ1Ni00CithbHdheXMgXHU0RjQyIDEtMTM1Ni0zCithbHdheXMgXHU0RjQzIDE0NS0yMzQ1LTUKK2Fsd2F5cyBcdTRGNDQgMTIzNS0xMjM2LTIKK2Fsd2F5cyBcdTRGNDUgMTM0LTI0NTYtNQorYWx3YXlzIFx1NEY0NiAxNDUtMTIzNi01CithbHdheXMgXHU0RjQ3IDEtMzQtNQorYWx3YXlzIFx1NEY0OCAxMzUtMzQtNQorYWx3YXlzIFx1NEY0OSAyNDUtMTI1Ni0zCithbHdheXMgXHU0RjRBIDEzNS0xNi00CithbHdheXMgXHU0RjRCIDI0LTE0Ni01CithbHdheXMgXHU0RjRDIDI0NS0xNTYtNAorYWx3YXlzIFx1NEY0RCAxMjQ2LTUKK2Fsd2F5cyBcdTRGNEUgMTQ1LTE2LTMKK2Fsd2F5cyBcdTRGNEYgMS0zNC01CithbHdheXMgXHU0RjUwIDEyNS0yNS00CithbHdheXMgXHU0RjUxIDIzNC01CithbHdheXMgXHU0RjUyIDQ2LTQKK2Fsd2F5cyBcdTRGNTMgMTI0LTE2LTQKK2Fsd2F5cyBcdTRGNTQgMS0xMjM2LTUKK2Fsd2F5cyBcdTRGNTUgMTIzNS0yMzQ2LTIKK2Fsd2F5cyBcdTRGNTYgMTM1LTE2LTUKK2Fsd2F5cyBcdTRGNTcgMTI0LTI1LTIKK2Fsd2F5cyBcdTRGNTggMjQtMjM0Ni0yCithbHdheXMgXHU0RjU5IDEyNTYtMgorYWx3YXlzIFx1NEY1QSAxNi01CithbHdheXMgXHU0RjVCIDEyMzQ1LTEyNi0yCithbHdheXMgXHU0RjVDIDEyNS0yNS01CithbHdheXMgXHU0RjVEIDEyMy0xMjM1Ni01CithbHdheXMgXHU0RjVFIDEzNDUtMTM0NTYtNQorYWx3YXlzIFx1NEY1RiAxMjQtMTIzNDYtMgorYWx3YXlzIFx1NEY2MCAxMzQ1Ny0xNi00CithbHdheXMgXHU0RjYxIDE1LTQ1LTMKK2Fsd2F5cyBcdTRGNjIgMjQ1LTEyNTYtMgorYWx3YXlzIFx1NEY2MyAyMzUtNQorYWx3YXlzIFx1NEY2NCAzNS00CithbHdheXMgXHU0RjY1IDI0NS0yMzQ1LTMKK2Fsd2F5cyBcdTRGNjYgMjQtMTU2LTIKK2Fsd2F5cyBcdTRGNjcgMTIzLTM0NS00CithbHdheXMgXHU0RjY4IDEzNS0xNDYtMworYWx3YXlzIFx1NEY2OSAxMjM0LTM1Ni01CithbHdheXMgXHU0RjZBIDEyMzUtMTI0Ni0yCithbHdheXMgXHU0RjZCIDEyMzUtMjM0Ni01CithbHdheXMgXHU0RjZDIDE0LTE0Ni00CithbHdheXMgXHU0RjZEIDE1LTQ2LTIKK2Fsd2F5cyBcdTRGNkUgMTMtMjM0Ni0yCithbHdheXMgXHU0RjZGIDQ2LTIKK2Fsd2F5cyBcdTRGNzAgMTM1LTI0NTYtNAorYWx3YXlzIFx1NEY3MSAxMjM0NS0zNDUtNAorYWx3YXlzIFx1NEY3MiAxMzQtMTM0NTYtMgorYWx3YXlzIFx1NEY3MyAxMy0yMzQ1Ni0zCithbHdheXMgXHU0Rjc0IDE1Ni01CithbHdheXMgXHU0Rjc1IDEzNS0xMzQ1Ni01CithbHdheXMgXHU0Rjc2IDEzLTE2LTIKK2Fsd2F5cyBcdTRGNzcgMTIzNS0xMzYtNAorYWx3YXlzIFx1NEY3OCAxMjM1LTI1LTIKK2Fsd2F5cyBcdTRGNzkgMTMtMTI0Ni00CithbHdheXMgXHU0RjdBIDI0NS00NS0yCithbHdheXMgXHU0RjdCIDEyNC0yNDYtMworYWx3YXlzIFx1NEY3QyAxMy0yNDYtNAorYWx3YXlzIFx1NEY3RCAyNDUtMTU2LTUKK2Fsd2F5cyBcdTRGN0UgMTYtNQorYWx3YXlzIFx1NEY3RiAyNC0xNTYtNAorYWx3YXlzIFx1NEY4MCAxNS0xMzQ1Ni0yCithbHdheXMgXHU0RjgxIDI0LTEzNi0zCithbHdheXMgXHU0RjgyIDEyNC0yNS0zCithbHdheXMgXHU0RjgzIDEyMy0xMjM2LTQKK2Fsd2F5cyBcdTRGODQgMS0xNTYtMgorYWx3YXlzIFx1NEY4NSAxMy0yNDU2LTMKK2Fsd2F5cyBcdTRGODYgMTQtMjQ1Ni0yCithbHdheXMgXHU0Rjg3IDE2LTIKK2Fsd2F5cyBcdTRGODggMTItMTU2LTQKK2Fsd2F5cyBcdTRGODkgMTIzLTM1LTQKK2Fsd2F5cyBcdTRGOEEgMTMtNDU2LTMKK2Fsd2F5cyBcdTRGOEIgMTQtMTYtNQorYWx3YXlzIFx1NEY4QyAxNDU2LTMKK2Fsd2F5cyBcdTRGOEQgMjQtMTU2LTUKK2Fsd2F5cyBcdTRGOEUgMTM0LTE2LTQKK2Fsd2F5cyBcdTRGOEYgMS0zNC0zCithbHdheXMgXHU0RjkwIDE1LTEyNTYtNQorYWx3YXlzIFx1NEY5MSAyMzQtNQorYWx3YXlzIFx1NEY5MiAxMjM2LTMKK2Fsd2F5cyBcdTRGOTMgMTQtMzQtNQorYWx3YXlzIFx1NEY5NCAxMzQtMTIzNTYtMgorYWx3YXlzIFx1NEY5NSAxNTYtMgorYWx3YXlzIFx1NEY5NiAxNC0xMjM0NTYtMgorYWx3YXlzIFx1NEY5NyAxNDUtMTIzNDYtNQorYWx3YXlzIFx1NEY5OCAxMi0zNDUtNQorYWx3YXlzIFx1NEY5OSAxMi0xNTYtNQorYWx3YXlzIFx1NEY5QSAxNS0yNTYtNQorYWx3YXlzIFx1NEY5QiAxMy0xMjM0Ni0zCithbHdheXMgXHU0RjlDIDEtMTIzNTYtMworYWx3YXlzIFx1NEY5RCAxNi0zCithbHdheXMgXHU0RjlFIDEyNDUtMzQtNAorYWx3YXlzIFx1NEY5RiAxMy0yMzQ1LTUKK2Fsd2F5cyBcdTRGQTAgMTUtMjM0NTYtMgorYWx3YXlzIFx1NEZBMSAxMy0yMzQ1Ni01CithbHdheXMgXHU0RkEyIDEyNS0yNDU2LTUKK2Fsd2F5cyBcdTRGQTMgMTQtMTI1Ni00CithbHdheXMgXHU0RkE0IDEyMy0zNDUtMworYWx3YXlzIFx1NEZBNSAxMy0yNDYtNAorYWx3YXlzIFx1NEZBNiAxLTEzNi0zCithbHdheXMgXHU0RkE3IDI0NS0yMzQ2LTUKK2Fsd2F5cyBcdTRGQTggMjQ1LTI0Ni0yCithbHdheXMgXHU0RkE5IDEyMy0yMzU2LTUKK2Fsd2F5cyBcdTRGQUEgMTItMjQ1Ni0yCithbHdheXMgXHU0RkFCIDEzNDUtMTM0NTYtNQorYWx3YXlzIFx1NEZBQyAxMzQ1LTEyMzQ2LTIKK2Fsd2F5cyBcdTRGQUQgMTMtMTQ1Ni00CithbHdheXMgXHU0RkFFIDM0LTQKK2Fsd2F5cyBcdTRGQUYgMTIzNS0xMjM1Ni0yCithbHdheXMgXHU0RkIwIDEzLTIzNS00CithbHdheXMgXHU0RkIxIDEyLTEzNTYtNAorYWx3YXlzIFx1NEZCMiAxLTEzNi01CithbHdheXMgXHU0RkIzIDI0NS0yNS01CithbHdheXMgXHU0RkI0IDEyLTEyMzU2LTQKK2Fsd2F5cyBcdTRGQjUgMjQ1LTE0NTYtMworYWx3YXlzIFx1NEZCNiAxNC0xMjU2LTQKK2Fsd2F5cyBcdTRGQjcgMTMtMTI1Ni0yCithbHdheXMgXHU0RkI4IDI0LTM0LTUKK2Fsd2F5cyBcdTRGQjkgMTI0LTEzNDU2LTQKK2Fsd2F5cyBcdTRGQkEgMjQtMTM2LTUKK2Fsd2F5cyBcdTRGQkIgMTI0LTI1LTMKK2Fsd2F5cyBcdTRGQkMgMTM1LTEyNi0yCithbHdheXMgXHU0RkJEIDEzNDUtMTIzNi0yCithbHdheXMgXHU0RkJFIDEyMzUtMTQ2LTMKK2Fsd2F5cyBcdTRGQkYgMTM1LTIzNDUtNQorYWx3YXlzIFx1NEZDMCAxMjQtMTI0Ni00CithbHdheXMgXHU0RkMxIDEyNTYtMgorYWx3YXlzIFx1NEZDMiAxNS0xNi01CithbHdheXMgXHU0RkMzIDI0NS0zNC01CithbHdheXMgXHU0RkM0IDIzNDYtNQorYWx3YXlzIFx1NEZDNSAyNDUtMjM0LTIKK2Fsd2F5cyBcdTRGQzYgMTUtMTI1Ni0yCithbHdheXMgXHU0RkM3IDEzLTQ1Ni00CithbHdheXMgXHU0RkM4IDEyMy0zNC01CithbHdheXMgXHU0RkM5IDM0LTQKK2Fsd2F5cyBcdTRGQ0EgMTMtMjU2LTUKK2Fsd2F5cyBcdTRGQ0IgMTYtNQorYWx3YXlzIFx1NEZDQyAxMjM0NS0zNC00CithbHdheXMgXHU0RkNEIDE0LTQ2LTIKK2Fsd2F5cyBcdTRGQ0UgMTI1LTM0LTQKK2Fsd2F5cyBcdTRGQ0YgMjQ1LTI0Ni01CithbHdheXMgXHU0RkQwIDE0LTE2LTUKK2Fsd2F5cyBcdTRGRDEgMjM1LTQKK2Fsd2F5cyBcdTRGRDIgMTIzNS0xMjM0NTYtNQorYWx3YXlzIFx1NEZEMyAxMy0xMzQ1Ni01CithbHdheXMgXHU0RkQ0IDI0NS0yMzQ1LTUKK2Fsd2F5cyBcdTRGRDUgMTUtMTIzNi01CithbHdheXMgXHU0RkQ2IDEyMzQtMjQ1Ni00CithbHdheXMgXHU0RkQ3IDE1LTM0LTIKK2Fsd2F5cyBcdTRGRDggMTIzNDUtMzQtMgorYWx3YXlzIFx1NEZEOSAxNS0xNi0zCithbHdheXMgXHU0RkRBIDE0LTE2LTQKK2Fsd2F5cyBcdTRGREIgMTIzNDUtMzQtNAorYWx3YXlzIFx1NEZEQyAxMjM0LTEzNDU2LTMKK2Fsd2F5cyBcdTRGREQgMTM1LTE0Ni00CithbHdheXMgXHU0RkRFIDEyNTYtMgorYWx3YXlzIFx1NEZERiAxNS0xNTYtNQorYWx3YXlzIFx1NEZFMCAxNS0yMzQ1Ni0yCithbHdheXMgXHU0RkUxIDE1LTE0NTYtNQorYWx3YXlzIFx1NEZFMiAxNS0yMzQtMworYWx3YXlzIFx1NEZFMyAxMjU2LTIKK2Fsd2F5cyBcdTRGRTQgMTI0LTE2LTUKK2Fsd2F5cyBcdTRGRTUgMTItMjM0Ni0zCithbHdheXMgXHU0RkU2IDEyLTEyMzU2LTIKK2Fsd2F5cyBcdTRGRTcgMS0xNTYtNQorYWx3YXlzIFx1NEZFOCAyMzQ1LTQKK2Fsd2F5cyBcdTRGRTkgMTQtMjM0NTYtNAorYWx3YXlzIFx1NEZFQSAxNC0xNi01CithbHdheXMgXHU0RkVCIDE0LTI0NTYtMgorYWx3YXlzIFx1NEZFQyAxNS0xNTYtMworYWx3YXlzIFx1NEZFRCAxMy0yMzQ1LTQKK2Fsd2F5cyBcdTRGRUUgMTUtMjM0LTMKK2Fsd2F5cyBcdTRGRUYgMTIzNDUtMzQtNAorYWx3YXlzIFx1NEZGMCAxMjM1LTIzNDYtNQorYWx3YXlzIFx1NEZGMSAxMy0xMjU2LTUKK2Fsd2F5cyBcdTRGRjIgMTUtMjQ2LTUKK2Fsd2F5cyBcdTRGRjMgMTIzNC0yNDU2LTIKK2Fsd2F5cyBcdTRGRjQgMTMtMjM0NS01CithbHdheXMgXHU0RkY1IDEzNS0yNDYtNAorYWx3YXlzIFx1NEZGNiAxMi0zNC01CithbHdheXMgXHU0RkY3IDEyMzQ1LTM1Ni01CithbHdheXMgXHU0RkY4IDEyMzQ1LTEzNTYtNQorYWx3YXlzIFx1NEZGOSAyMzQ1Ni01CithbHdheXMgXHU0RkZBIDEyMzYtNAorYWx3YXlzIFx1NEZGQiAxMzUtMzU2LTUKK2Fsd2F5cyBcdTRGRkMgMTI1Ni01CithbHdheXMgXHU0RkZEIDE1LTE0NTYtMworYWx3YXlzIFx1NEZGRSAxMzUtMTYtNQorYWx3YXlzIFx1NEZGRiAxMi0xNTYtMgorYWx3YXlzIFx1NTAwMCAxMi0xMzQ2LTMKK2Fsd2F5cyBcdTUwMDEgMTItMTU2LTIKK2Fsd2F5cyBcdTUwMDIgMTM1LTEzNDU2LTUKK2Fsd2F5cyBcdTUwMDMgMTMtMjM0LTUKK2Fsd2F5cyBcdTUwMDQgMjQ2LTIKK2Fsd2F5cyBcdTUwMDUgMjQ1LTEyNDYtNQorYWx3YXlzIFx1NTAwNiAxNC0yMzQ1Ni00CithbHdheXMgXHU1MDA3IDEyNDU2LTQKK2Fsd2F5cyBcdTUwMDggMTQtMjQ1Ni0yCithbHdheXMgXHU1MDA5IDI0NS0xMzQ2LTMKK2Fsd2F5cyBcdTUwMEEgMTI1LTEyMzQ2LTUKK2Fsd2F5cyBcdTUwMEIgMTMtMjM0Ni01CithbHdheXMgXHU1MDBDIDEzLTEyNDU2LTMKK2Fsd2F5cyBcdTUwMEQgMTM1LTM1Ni01CithbHdheXMgXHU1MDBFIDEyNC0yMzQ1LTQKK2Fsd2F5cyBcdTUwMEYgMjQtMzQtNQorYWx3YXlzIFx1NTAxMCAyNC0zNC01CithbHdheXMgXHU1MDExIDEzNC0xMzYtMQorYWx3YXlzIFx1NTAxMiAxNDUtMTQ2LTQKK2Fsd2F5cyBcdTUwMTMgMTI0LTEyMzYtMgorYWx3YXlzIFx1NTAxNCAxMy0yMzYtNQorYWx3YXlzIFx1NTAxNSAxMi0xMjQ2LTIKK2Fsd2F5cyBcdTUwMTYgMTUtMTM0NTYtNQorYWx3YXlzIFx1NTAxNyAxMjM0LTEzNTYtMgorYWx3YXlzIFx1NTAxOCAxMjQtMTM0Ni00CithbHdheXMgXHU1MDE5IDEyMzUtMTIzNTYtNQorYWx3YXlzIFx1NTAxQSAxNi00CithbHdheXMgXHU1MDFCIDI0NS0xNi0zCithbHdheXMgXHU1MDFDIDEyNC0xNi01CithbHdheXMgXHU1MDFEIDEzLTEyMzYtNQorYWx3YXlzIFx1NTAxRSAxMy0xMzQ1Ni01CithbHdheXMgXHU1MDFGIDEzLTM0Ni01CithbHdheXMgXHU1MDIwIDEtMTI0Ni0zCithbHdheXMgXHU1MDIxIDEyLTEzNDYtNQorYWx3YXlzIFx1NTAyMiAxMy0zNDYtMgorYWx3YXlzIFx1NTAyMyAxMjM0NS0xMzQ2LTQKK2Fsd2F5cyBcdTUwMjQgMS0xNTYtMgorYWx3YXlzIFx1NTAyNSAxMjMtMTIzNDYtNAorYWx3YXlzIFx1NTAyNiAxMy00NS01CithbHdheXMgXHU1MDI3IDEyNS0xMjM0Ni0zCithbHdheXMgXHU1MDI4IDEzLTEyNTYtNQorYWx3YXlzIFx1NTAyOSAyNDUtMjM0NS01CithbHdheXMgXHU1MDJBIDEzNDUtMTYtMgorYWx3YXlzIFx1NTAyQiAxNC0xMjM0NTYtMgorYWx3YXlzIFx1NTAyQyAxLTI1LTIKK2Fsd2F5cyBcdTUwMkQgMjUtMworYWx3YXlzIFx1NTAyRSAxNC0yNS00CithbHdheXMgXHU1MDJGIDE1LTEyMzQ2LTMKK2Fsd2F5cyBcdTUwMzAgMTQtMTM0NTYtMgorYWx3YXlzIFx1NTAzMSAxMjM1LTEyMzQ1Ni01CithbHdheXMgXHU1MDMyIDE0NS0xMjM0Ni0zCithbHdheXMgXHU1MDMzIDEyNS0xNTYtNQorYWx3YXlzIFx1NTAzNCAxMzUtMTM2LTUKK2Fsd2F5cyBcdTUwMzUgMzQtNAorYWx3YXlzIFx1NTAzNiAxMy0xMjU2LTUKK2Fsd2F5cyBcdTUwMzcgMTM0NS0yNDU2LTUKK2Fsd2F5cyBcdTUwMzggMjQ1LTI0NTYtNAorYWx3YXlzIFx1NTAzOSAxMy0yMzQ1LTQKK2Fsd2F5cyBcdTUwM0EgMS0yNDU2LTUKK2Fsd2F5cyBcdTUwM0IgMzQ2LTMKK2Fsd2F5cyBcdTUwM0MgMS0xNTYtMgorYWx3YXlzIFx1NTAzRCAyNC0zNDUtMgorYWx3YXlzIFx1NTAzRSAyNDUtMTM0NTYtMworYWx3YXlzIFx1NTAzRiAyNDUtMzQ2LTUKK2Fsd2F5cyBcdTUwNDAgMTM0NTYtMworYWx3YXlzIFx1NTA0MSAxMi0xMzU2LTMKK2Fsd2F5cyBcdTUwNDIgMTMtMjM0NS0zCithbHdheXMgXHU1MDQzIDIzNDUtNAorYWx3YXlzIFx1NTA0NCAxMjQ1LTEyNDU2LTQKK2Fsd2F5cyBcdTUwNDUgMS0xMjM0Ni00CithbHdheXMgXHU1MDQ2IDEyLTEyMzQ1Ni00CithbHdheXMgXHU1MDQ3IDEzLTIzNDU2LTQKK2Fsd2F5cyBcdTUwNDggMTMtMzQ2LTIKK2Fsd2F5cyBcdTUwNDkgMTI0Ni00CithbHdheXMgXHU1MDRBIDEyNTYtNAorYWx3YXlzIFx1NTA0QiAxMzUtMTM0NTYtNQorYWx3YXlzIFx1NTA0QyAxMjQ1LTI1LTUKK2Fsd2F5cyBcdTUwNEQgMTI0LTE2LTIKK2Fsd2F5cyBcdTUwNEUgMTI0Ni0zCithbHdheXMgXHU1MDRGIDEyMzQtMjM0NS0zCithbHdheXMgXHU1MDUwIDIzNDUtNQorYWx3YXlzIFx1NTA1MSAxMjM0NS0xMzU2LTMKK2Fsd2F5cyBcdTUwNTIgMTI0LTEzNDYtNAorYWx3YXlzIFx1NTA1MyAyNS01CithbHdheXMgXHU1MDU0IDIzNDYtNQorYWx3YXlzIFx1NTA1NSAxNS0zNDYtMgorYWx3YXlzIFx1NTA1NiAxMi0yMzQ2LTQKK2Fsd2F5cyBcdTUwNTcgMjQtMTM1Ni00CithbHdheXMgXHU1MDU4IDEyMy0xMjM2LTQKK2Fsd2F5cyBcdTUwNTkgMTQ1LTE2LTUKK2Fsd2F5cyBcdTUwNUEgMTI1LTI1LTUKK2Fsd2F5cyBcdTUwNUIgMTItMzQ1LTMKK2Fsd2F5cyBcdTUwNUMgMTI0LTEzNDU2LTIKK2Fsd2F5cyBcdTUwNUQgMTM1LTM1Ni01CithbHdheXMgXHU1MDVFIDM0Ni01CithbHdheXMgXHU1MDVGIDEyMzUtNDU2LTIKK2Fsd2F5cyBcdTUwNjAgMjQ2LTQKK2Fsd2F5cyBcdTUwNjEgMS0xMjM2LTUKK2Fsd2F5cyBcdTUwNjIgMTItMTIzNTYtNAorYWx3YXlzIFx1NTA2MyAyMzQ1LTMKK2Fsd2F5cyBcdTUwNjQgMjM0LTQKK2Fsd2F5cyBcdTUwNjUgMTMtMjM0NS01CithbHdheXMgXHU1MDY2IDE1LTEyNTYtMworYWx3YXlzIFx1NTA2NyAxLTM0NS0zCithbHdheXMgXHU1MDY4IDI0NS0xNTYtMworYWx3YXlzIFx1NTA2OSAxMjM0NS0zNC01CithbHdheXMgXHU1MDZBIDEzNS0xNi0zCithbHdheXMgXHU1MDZCIDEtMTU2LTUKK2Fsd2F5cyBcdTUwNkMgMTI1LTEyMzQ2LTQKK2Fsd2F5cyBcdTUwNkQgMTM0LTIzNDUtNAorYWx3YXlzIFx1NTA2RSAxMy0xNi0yCithbHdheXMgXHU1MDZGIDE2LTQKK2Fsd2F5cyBcdTUwNzAgMTUtMzQ2LTUKK2Fsd2F5cyBcdTUwNzEgMTUtMjU2LTIKK2Fsd2F5cyBcdTUwNzIgMTUtMTU2LTMKK2Fsd2F5cyBcdTUwNzMgMTQ1LTEyNDU2LTMKK2Fsd2F5cyBcdTUwNzQgMjQ1LTIzNDYtNQorYWx3YXlzIFx1NTA3NSAxLTEzNi0zCithbHdheXMgXHU1MDc2IDEyMzU2LTQKK2Fsd2F5cyBcdTUwNzcgMTI0LTEyMzU2LTMKK2Fsd2F5cyBcdTUwNzggMTI0LTEyMzU2LTMKK2Fsd2F5cyBcdTUwNzkgMTM1LTM1Ni01CithbHdheXMgXHU1MDdBIDEyNS0xMjM2LTIKK2Fsd2F5cyBcdTUwN0IgMTQtMTI1Ni00CithbHdheXMgXHU1MDdDIDEzLTM0Ni0yCithbHdheXMgXHU1MDdEIDEyNDYtNQorYWx3YXlzIFx1NTA3RSAxMjM0NS0xMzYtNQorYWx3YXlzIFx1NTA3RiAxMi0xMzQ2LTIKK2Fsd2F5cyBcdTUwODAgMTIzLTEyNDYtNAorYWx3YXlzIFx1NTA4MSAxNS0xMjM1Ni00CithbHdheXMgXHU1MDgyIDEyLTE1Ni00CithbHdheXMgXHU1MDgzIDE1LTM0LTUKK2Fsd2F5cyBcdTUwODQgMTUtMjM0NTYtNQorYWx3YXlzIFx1NTA4NSAxMjM0NS0zNC01CithbHdheXMgXHU1MDg2IDQ1LTUKK2Fsd2F5cyBcdTUwODcgMTI0NS0xMjM0Ni00CithbHdheXMgXHU1MDg4IDE0LTE2LTUKK2Fsd2F5cyBcdTUwODkgMTI0NS0zNC01CithbHdheXMgXHU1MDhBIDI1Ni00CithbHdheXMgXHU1MDhCIDEzLTEyMzU2LTUKK2Fsd2F5cyBcdTUwOEMgMTM0LTM0NS01CithbHdheXMgXHU1MDhEIDEzNS0xMzQ2LTMKK2Fsd2F5cyBcdTUwOEUgMTQ1LTIzNDUtMworYWx3YXlzIFx1NTA4RiAxMjQtMTM0Ni0yCithbHdheXMgXHU1MDkwIDEyMzUtMTQ2LTUKK2Fsd2F5cyBcdTUwOTEgMTMtMzQ2LTIKK2Fsd2F5cyBcdTUwOTIgMTUtMTYtMworYWx3YXlzIFx1NTA5MyAyNC0xMjM2LTUKK2Fsd2F5cyBcdTUwOTQgMjQ1LTIzNDUtNQorYWx3YXlzIFx1NTA5NSAxMy0yMzYtMgorYWx3YXlzIFx1NTA5NiAyNDUtMTM0Ni0zCithbHdheXMgXHU1MDk3IDEyLTM0LTUKK2Fsd2F5cyBcdTUwOTggMTUtMTIzNi00CithbHdheXMgXHU1MDk5IDEzNS0zNTYtNQorYWx3YXlzIFx1NTA5QSAxNS0yNDYtNQorYWx3YXlzIFx1NTA5QiAyMzUtNAorYWx3YXlzIFx1NTA5QyAyNDYtMgorYWx3YXlzIFx1NTA5RCAxMjQtMzQ1LTUKK2Fsd2F5cyBcdTUwOUUgMTUtMjUtMworYWx3YXlzIFx1NTA5RiA0Ni00CithbHdheXMgXHU1MEEwIDEyMzQ1LTM0NS0zCithbHdheXMgXHU1MEExIDEzNS0xMzQ1Ni01CithbHdheXMgXHU1MEEyIDEzLTIzNDU2LTMKK2Fsd2F5cyBcdTUwQTMgMTQ1LTI0NTYtNAorYWx3YXlzIFx1NTBBNCAxMjUtMjQ1Ni01CithbHdheXMgXHU1MEE1IDEyNC0xMzQ2LTQKK2Fsd2F5cyBcdTUwQTYgMTMtMzQtNAorYWx3YXlzIFx1NTBBNyAxMzUtMTQ1Ni0zCithbHdheXMgXHU1MEE4IDEyLTM0LTIKK2Fsd2F5cyBcdTUwQTkgMTM0NS0yNS0yCithbHdheXMgXHU1MEFBIDI0NS0xMjM2LTMKK2Fsd2F5cyBcdTUwQUIgMTQtMzU2LTQKK2Fsd2F5cyBcdTUwQUMgMjQ1LTEyNDYtMworYWx3YXlzIFx1NTBBRCAyMzUtMworYWx3YXlzIFx1NTBBRSAxMjUtMTQ2LTMKK2Fsd2F5cyBcdTUwQUYgMTI1LTEyMzQ2LTQKK2Fsd2F5cyBcdTUwQjAgMTIzNC0xMzU2LTIKK2Fsd2F5cyBcdTUwQjEgMTUtMTIzNDYtNAorYWx3YXlzIFx1NTBCMiAxNDYtNQorYWx3YXlzIFx1NTBCMyAxMi0xMjQ1Ni0yCithbHdheXMgXHU1MEI0IDEyNTYtNAorYWx3YXlzIFx1NTBCNSAxLTI0NTYtNQorYWx3YXlzIFx1NTBCNiAyNDUtMTYtMworYWx3YXlzIFx1NTBCNyAyNC0xMzQ2LTMKK2Fsd2F5cyBcdTUwQjggMTItNDU2LTQKK2Fsd2F5cyBcdTUwQjkgMTMtMTM0NTYtNQorYWx3YXlzIFx1NTBCQSAxMi0xNTYtNQorYWx3YXlzIFx1NTBCQiAyNC0zNDUtNAorYWx3YXlzIFx1NTBCQyAxMjM1LTEyMzYtNQorYWx3YXlzIFx1NTBCRCAxLTEzNDYtMworYWx3YXlzIFx1NTBCRSAyNDUtMTM0NTYtMworYWx3YXlzIFx1NTBCRiAyMzQ1LTUKK2Fsd2F5cyBcdTUwQzAgMTQ1LTE2LTUKK2Fsd2F5cyBcdTUwQzEgMTUtMzQ2LTUKK2Fsd2F5cyBcdTUwQzIgMTQtMTIzNTYtMgorYWx3YXlzIFx1NTBDMyAxMzUtMzU2LTUKK2Fsd2F5cyBcdTUwQzQgMTIzNC0yNDYtNQorYWx3YXlzIFx1NTBDNSAxMy0xNDU2LTQKK2Fsd2F5cyBcdTUwQzYgMTQtMjM0NS0yCithbHdheXMgXHU1MEM3IDE0LTM0LTUKK2Fsd2F5cyBcdTUwQzggMTM0LTEyMzYtNQorYWx3YXlzIFx1NTBDOSAyNDUtMjM0NS0zCithbHdheXMgXHU1MENBIDE1LTIzNDUtMworYWx3YXlzIFx1NTBDQiAxMjQtMTIzNi01CithbHdheXMgXHU1MENDIDEzNDU2LTIKK2Fsd2F5cyBcdTUwQ0QgMTQ1LTEyMzQ2LTUKK2Fsd2F5cyBcdTUwQ0UgMS0xMjQ1Ni01CithbHdheXMgXHU1MENGIDE1LTQ2LTUKK2Fsd2F5cyBcdTUwRDAgMjQtMTIzNi01CithbHdheXMgXHU1MEQxIDI0NS0yNDYtMgorYWx3YXlzIFx1NTBEMiAxMy0yMzUtNAorYWx3YXlzIFx1NTBEMyAxMjQtMTI0Ni00CithbHdheXMgXHU1MEQ0IDEyNS0xMjM0NTYtNAorYWx3YXlzIFx1NTBENSAxMjM0LTM0LTIKK2Fsd2F5cyBcdTUwRDYgMTUtMTYtMworYWx3YXlzIFx1NTBENyAxNC0xNDYtMgorYWx3YXlzIFx1NTBEOCAxMi0xMzQ2LTQKK2Fsd2F5cyBcdTUwRDkgMTMtNDU2LTMKK2Fsd2F5cyBcdTUwREEgMTQtMjQ2LTIKK2Fsd2F5cyBcdTUwREIgMjQ1LTE2LTMKK2Fsd2F5cyBcdTUwREMgMTItMTM1Ni0zCithbHdheXMgXHU1MEREIDEyLTEyMzYtMgorYWx3YXlzIFx1NTBERSAxMjQ2LTUKK2Fsd2F5cyBcdTUwREYgMTMtMTYtMworYWx3YXlzIFx1NTBFMCAxMjM0NS0xMjM2LTMKK2Fsd2F5cyBcdTUwRTEgMTIzNS0xMjQ2LTUKK2Fsd2F5cyBcdTUwRTIgMTItMTI0NTYtNAorYWx3YXlzIFx1NTBFMyAxMjQtMzQ2LTQKK2Fsd2F5cyBcdTUwRTQgMTQ1LTEyMzYtNQorYWx3YXlzIFx1NTBFNSAxMy0yNDYtNAorYWx3YXlzIFx1NTBFNiAxMy0yMzQtNQorYWx3YXlzIFx1NTBFNyAxNS0xMzU2LTMKK2Fsd2F5cyBcdTUwRTggMTIzNDUtMTM2LTUKK2Fsd2F5cyBcdTUwRTkgMTUtMjM0NS01CithbHdheXMgXHU1MEVBIDEyNTYtNQorYWx3YXlzIFx1NTBFQiAyMzQ2LTUKK2Fsd2F5cyBcdTUwRUMgMTMtMjQ2LTMKK2Fsd2F5cyBcdTUwRUQgMTMtMjM0NS01CithbHdheXMgXHU1MEVFIDEyNC0xMjM0Ni0yCithbHdheXMgXHU1MEVGIDE0LTE0NTYtNAorYWx3YXlzIFx1NTBGMCAxMzUtMTI2LTIKK2Fsd2F5cyBcdTUwRjEgMTMtMzQtNQorYWx3YXlzIFx1NTBGMiAxNS0yMzQ1LTIKK2Fsd2F5cyBcdTUwRjMgMTUtMzQtNQorYWx3YXlzIFx1NTBGNCAxNS0yMzQ1LTUKK2Fsd2F5cyBcdTUwRjUgMTMtNDYtMworYWx3YXlzIFx1NTBGNiAxMzQtMTQ1Ni00CithbHdheXMgXHU1MEY3IDM0Ni01CithbHdheXMgXHU1MEY4IDEzLTE0NTYtNQorYWx3YXlzIFx1NTBGOSAxMy0yMzQ1Ni01CithbHdheXMgXHU1MEZBIDI0NS0yNDYtNQorYWx3YXlzIFx1NTBGQiAxMjM0LTE2LTUKK2Fsd2F5cyBcdTUwRkMgMTIzNDUtMTM1Ni0zCithbHdheXMgXHU1MEZEIDEtMTIzNTYtNQorYWx3YXlzIFx1NTBGRSAyNDU2LTUKK2Fsd2F5cyBcdTUwRkYgMTUtMjQ1Ni01CithbHdheXMgXHU1MTAwIDE2LTIKK2Fsd2F5cyBcdTUxMDEgMTMtMjU2LTUKK2Fsd2F5cyBcdTUxMDIgMTM0NS0xMjM0Ni0yCithbHdheXMgXHU1MTAzIDEyLTEyMzYtMgorYWx3YXlzIFx1NTEwNCAxNi01CithbHdheXMgXHU1MTA1IDE0NS0xMzQ2LTMKK2Fsd2F5cyBcdTUxMDYgMTMtMTM0NTYtNAorYWx3YXlzIFx1NTEwNyAxNS00NS0zCithbHdheXMgXHU1MTA4IDEyMy0yMzU2LTUKK2Fsd2F5cyBcdTUxMDkgMTMtMjM0NS00CithbHdheXMgXHU1MTBBIDEyLTM0LTUKK2Fsd2F5cyBcdTUxMEIgMTQ1LTEyMzYtMworYWx3YXlzIFx1NTEwQyAxMy0yNDYtNAorYWx3YXlzIFx1NTEwRCAyNC0zNDUtNAorYWx3YXlzIFx1NTEwRSAxMjUtMjQ1Ni01CithbHdheXMgXHU1MTBGIDI0NS0xMjM2LTUKK2Fsd2F5cyBcdTUxMTAgMTM1LTE0NTYtMworYWx3YXlzIFx1NTExMSAxMjM2LTUKK2Fsd2F5cyBcdTUxMTIgMTI0NS0zNC0yCithbHdheXMgXHU1MTEzIDEyNC0yNDU2LTIKK2Fsd2F5cyBcdTUxMTQgMTItMTIzNTYtMgorYWx3YXlzIFx1NTExNSAxMi0yNDU2LTIKK2Fsd2F5cyBcdTUxMTYgMTQtMTIzNi0yCithbHdheXMgXHU1MTE3IDEzNDUtMTYtNAorYWx3YXlzIFx1NTExOCAxMy0xNDU2LTQKK2Fsd2F5cyBcdTUxMTkgMjQ1LTIzNDUtNQorYWx3YXlzIFx1NTExQSAxMzQtMTM1Ni0yCithbHdheXMgXHU1MTFCIDM0LTQKK2Fsd2F5cyBcdTUxMUMgMTM0NS0xMzU2LTIKK2Fsd2F5cyBcdTUxMUQgMjQ1LTIzNS0yCithbHdheXMgXHU1MTFFIDEzNDUtMTYtNAorYWx3YXlzIFx1NTExRiAxMi0xMzQ2LTIKK2Fsd2F5cyBcdTUxMjAgMTQtMzQ2LTUKK2Fsd2F5cyBcdTUxMjEgMTQtMzU2LTQKK2Fsd2F5cyBcdTUxMjIgMTQtMTI1Ni00CithbHdheXMgXHU1MTIzIDEyMy00NTYtNQorYWx3YXlzIFx1NTEyNCAxMzUtMTQ2LTUKK2Fsd2F5cyBcdTUxMjUgMTQ1LTM0LTIKK2Fsd2F5cyBcdTUxMjYgMTM1LTI0Ni0zCithbHdheXMgXHU1MTI3IDEyNS0xMjM2LTQKK2Fsd2F5cyBcdTUxMjggMS0xNTYtMgorYWx3YXlzIFx1NTEyOSAxNS0xNTYtNQorYWx3YXlzIFx1NTEyQSAyMzQtMworYWx3YXlzIFx1NTEyQiAxMjM1LTE0Ni0yCithbHdheXMgXHU1MTJDIDEyLTEzNi01CithbHdheXMgXHU1MTJEIDEyLTEzNi01CithbHdheXMgXHU1MTJFIDE0LTE2LTUKK2Fsd2F5cyBcdTUxMkYgMTI0LTEzNTYtMgorYWx3YXlzIFx1NTEzMCAxMjQ2LTQKK2Fsd2F5cyBcdTUxMzEgMTQtMTIzNDYtNAorYWx3YXlzIFx1NTEzMiAxMi0zNC0yCithbHdheXMgXHU1MTMzIDEyLTEyMzYtMgorYWx3YXlzIFx1NTEzNCAxMjQ1LTEzNDYtMgorYWx3YXlzIFx1NTEzNSAyNC0zNC0zCithbHdheXMgXHU1MTM2IDE1LTE2LTMKK2Fsd2F5cyBcdTUxMzcgMTQtMTYtNQorYWx3YXlzIFx1NTEzOCAxNC0yNS0yCithbHdheXMgXHU1MTM5IDEyNS0xMjM2LTQKK2Fsd2F5cyBcdTUxM0EgMTM0NS0yNS0yCithbHdheXMgXHU1MTNCIDEyNC0xMzQ2LTQKK2Fsd2F5cyBcdTUxM0MgMjM0NS00CithbHdheXMgXHU1MTNEIDE0LTM1Ni00CithbHdheXMgXHU1MTNFIDEzNDUtMTM0Ni01CithbHdheXMgXHU1MTNGIDE1Ni0yCithbHdheXMgXHU1MTQwIDM0LTUKK2Fsd2F5cyBcdTUxNDEgMjU2LTQKK2Fsd2F5cyBcdTUxNDIgMTI1LTEyMzYtMworYWx3YXlzIFx1NTE0MyA0NS0yCithbHdheXMgXHU1MTQ0IDE1LTIzNS0zCithbHdheXMgXHU1MTQ1IDEyLTEyMzQ2LTMKK2Fsd2F5cyBcdTUxNDYgMS0xNDYtNQorYWx3YXlzIFx1NTE0NyAxNS0yMzUtMworYWx3YXlzIFx1NTE0OCAxNS0yMzQ1LTMKK2Fsd2F5cyBcdTUxNDkgMTMtNDU2LTMKK2Fsd2F5cyBcdTUxNEEgMTQ1LTEyNDYtNQorYWx3YXlzIFx1NTE0QiAxMjMtMjM0Ni01CithbHdheXMgXHU1MTRDIDE0NS0xMjQ2LTUKK2Fsd2F5cyBcdTUxNEQgMTM0LTIzNDUtNAorYWx3YXlzIFx1NTE0RSAxMjQtMzQtNQorYWx3YXlzIFx1NTE0RiAxMi0xMzQ2LTIKK2Fsd2F5cyBcdTUxNTAgMTU2LTIKK2Fsd2F5cyBcdTUxNTEgMTQ1LTEyNDYtNQorYWx3YXlzIFx1NTE1MiAxNTYtMgorYWx3YXlzIFx1NTE1MyAxNS0xNDU2LTMKK2Fsd2F5cyBcdTUxNTQgMTI0LTM0LTUKK2Fsd2F5cyBcdTUxNTUgMTUtMTU2LTUKK2Fsd2F5cyBcdTUxNTYgMjM0NS00CithbHdheXMgXHU1MTU3IDIzNDUtNAorYWx3YXlzIFx1NTE1OCAyNC0xNTYtNAorYWx3YXlzIFx1NTE1OSAyNDgtMTU2LTItMTIzOC0yMzQ2LTUKK2Fsd2F5cyBcdTUxNUEgMTQ1LTEzNDYtNAorYWx3YXlzIFx1NTE1QiAyNDU4LTIzNDUtMy0xMjM4LTIzNDYtNQorYWx3YXlzIFx1NTE1QyAxNDUtMTIzNTYtMworYWx3YXlzIFx1NTE1RCAxMjM0NTgtMTM2LTMtMTIzOC0yMzQ2LTUKK2Fsd2F5cyBcdTUxNUUgMTM0OC0xNDYtMi0xMjM4LTIzNDYtNQorYWx3YXlzIFx1NTE1RiAyNC0xMzYtMworYWx3YXlzIFx1NTE2MCAxNDUtMTIzNTYtMworYWx3YXlzIFx1NTE2MSAxMzU4LTI0NTYtNC0xMjM4LTIzNDYtNQorYWx3YXlzIFx1NTE2MiAxMy0xMzQ1Ni0zCithbHdheXMgXHU1MTYzIDE0OC0xNi0yLTEyMzgtMjM0Ni01CithbHdheXMgXHU1MTY0IDEyMzUtNDU2LTIKK2Fsd2F5cyBcdTUxNjUgMTI0NS0zNC01CithbHdheXMgXHU1MTY2IDQ1Ni0yCithbHdheXMgXHU1MTY3IDEzNDUtMzU2LTUKK2Fsd2F5cyBcdTUxNjggMjQ1LTQ1LTIKK2Fsd2F5cyBcdTUxNjkgMTQtNDYtNAorYWx3YXlzIFx1NTE2QSAxMjU2LTIKK2Fsd2F5cyBcdTUxNkIgMTM1LTM0NS0zCithbHdheXMgXHU1MTZDIDEzLTEyMzQ2LTMKK2Fsd2F5cyBcdTUxNkQgMTQtMjM0LTUKK2Fsd2F5cyBcdTUxNkUgMTUtMTYtMworYWx3YXlzIFx1NTE2RiAxMjM1LTEyMzYtMgorYWx3YXlzIFx1NTE3MCAxNC0xMjM2LTIKK2Fsd2F5cyBcdTUxNzEgMTMtMTIzNDYtNQorYWx3YXlzIFx1NTE3MiAxMjQtMjM0NS0zCithbHdheXMgXHU1MTczIDEzLTEyNDU2LTMKK2Fsd2F5cyBcdTUxNzQgMTUtMTM0NTYtMworYWx3YXlzIFx1NTE3NSAxMzUtMTM0NTYtMworYWx3YXlzIFx1NTE3NiAyNDUtMTYtMgorYWx3YXlzIFx1NTE3NyAxMy0xMjU2LTUKK2Fsd2F5cyBcdTUxNzggMTQ1LTIzNDUtNAorYWx3YXlzIFx1NTE3OSAxMjUtMTU2LTMKK2Fsd2F5cyBcdTUxN0EgMTM1LTM0LTMKK2Fsd2F5cyBcdTUxN0IgNDYtNAorYWx3YXlzIFx1NTE3QyAxMy0yMzQ1LTMKK2Fsd2F5cyBcdTUxN0QgMjQtMTIzNTYtNQorYWx3YXlzIFx1NTE3RSAxMy0xNi01CithbHdheXMgXHU1MTdGIDE2LTUKK2Fsd2F5cyBcdTUxODAgMTMtMTYtNQorYWx3YXlzIFx1NTE4MSAxMi0xMjM2LTQKK2Fsd2F5cyBcdTUxODIgMTMtMjM1LTMKK2Fsd2F5cyBcdTUxODMgMTM0LTE0Ni01CithbHdheXMgXHU1MTg0IDEyNDUtMTIzNi00CithbHdheXMgXHU1MTg1IDEzNDUtMzU2LTUKK2Fsd2F5cyBcdTUxODYgNDUtMgorYWx3YXlzIFx1NTE4NyAyMzQtNAorYWx3YXlzIFx1NTE4OCAxMy0xMzQ2LTMKK2Fsd2F5cyBcdTUxODkgMTI0NS0xMjM2LTQKK2Fsd2F5cyBcdTUxOEEgMjQ1LTIzNDYtNQorYWx3YXlzIFx1NTE4QiAxMy0yMzUtMworYWx3YXlzIFx1NTE4QyAyNDUtMjM0Ni01CithbHdheXMgXHU1MThEIDEyNS0yNDU2LTUKK2Fsd2F5cyBcdTUxOEUgMTMtMzUtNAorYWx3YXlzIFx1NTE4RiAxMy0yMzUtNAorYWx3YXlzIFx1NTE5MCAxMzQtMTQ2LTUKK2Fsd2F5cyBcdTUxOTEgMS0xMjM1Ni01CithbHdheXMgXHU1MTkyIDEzNC0xNDYtNQorYWx3YXlzIFx1NTE5MyAxMy0xMjM1Ni01CithbHdheXMgXHU1MTk0IDE1LTEyNTYtNAorYWx3YXlzIFx1NTE5NSAxMzQtMjM0NS00CithbHdheXMgXHU1MTk2IDEzNC0xNi01CithbHdheXMgXHU1MTk3IDEyNDUtMTIzNDYtNAorYWx3YXlzIFx1NTE5OCAxNDU2LTIKK2Fsd2F5cyBcdTUxOTkgMTUtMzQ2LTQKK2Fsd2F5cyBcdTUxOUEgMTIzLTEyMzYtNAorYWx3YXlzIFx1NTE5QiAxMy0yNTYtMworYWx3YXlzIFx1NTE5QyAxMzQ1LTEyMzQ2LTIKK2Fsd2F5cyBcdTUxOUQgMTYtMgorYWx3YXlzIFx1NTE5RSAxMzQtMTYtMgorYWx3YXlzIFx1NTE5RiAyNC0xNTYtNQorYWx3YXlzIFx1NTFBMCAxMy0xMjQ1Ni01CithbHdheXMgXHU1MUExIDEzNC0xMzU2LTIKK2Fsd2F5cyBcdTUxQTIgMS0xMjM0Ni00CithbHdheXMgXHU1MUEzIDEzLTEyNTYtNQorYWx3YXlzIFx1NTFBNCA0NS0zCithbHdheXMgXHU1MUE1IDEzNC0xMzQ1Ni0yCithbHdheXMgXHU1MUE2IDEyMy0xMjM1Ni01CithbHdheXMgXHU1MUE3IDEzNDUtMTQ1Ni0yCithbHdheXMgXHU1MUE4IDEyMzQ1LTM0LTUKK2Fsd2F5cyBcdTUxQTkgMTUtMzQ2LTQKK2Fsd2F5cyBcdTUxQUEgMTM0LTE2LTUKK2Fsd2F5cyBcdTUxQUIgMTM1LTEzNDU2LTMKK2Fsd2F5cyBcdTUxQUMgMTQ1LTEyMzQ2LTMKK2Fsd2F5cyBcdTUxQUQgMTI0LTI0NTYtMgorYWx3YXlzIFx1NTFBRSAxMy0xMzQ2LTMKK2Fsd2F5cyBcdTUxQUYgMTIzNDUtMTM1Ni0yCithbHdheXMgXHU1MUIwIDEzNS0xMzQ1Ni0zCithbHdheXMgXHU1MUIxIDEyMzUtMzQtNQorYWx3YXlzIFx1NTFCMiAxMi0xMjM0Ni0zCithbHdheXMgXHU1MUIzIDEzLTIzNi0yCithbHdheXMgXHU1MUI0IDEyMzUtMzQtNQorYWx3YXlzIFx1NTFCNSAxMjMtNDU2LTUKK2Fsd2F5cyBcdTUxQjYgMzQ2LTQKK2Fsd2F5cyBcdTUxQjcgMTQtMTM1Ni00CithbHdheXMgXHU1MUI4IDEyMzQtMTIzNi01CithbHdheXMgXHU1MUI5IDEyMzQ1LTM0LTIKK2Fsd2F5cyBcdTUxQkEgMTM0LTE0NTYtNAorYWx3YXlzIFx1NTFCQiAxNDUtMTIzNDYtNQorYWx3YXlzIFx1NTFCQyAxNS0yMzQ1LTQKK2Fsd2F5cyBcdTUxQkQgMTQtMzQ2LTUKK2Fsd2F5cyBcdTUxQkUgMTUtMjM0NTYtMgorYWx3YXlzIFx1NTFCRiAxMy0yMzQ1LTMKK2Fsd2F5cyBcdTUxQzAgMTMtMTM0NTYtNQorYWx3YXlzIFx1NTFDMSAyNC0zNC01CithbHdheXMgXHU1MUMyIDEzNC0zNTYtNAorYWx3YXlzIFx1NTFDMyAxMjQtMzQtMgorYWx3YXlzIFx1NTFDNCAyNDUtMTYtMworYWx3YXlzIFx1NTFDNSAxMy0zNC01CithbHdheXMgXHU1MUM2IDEtMTIzNDU2LTQKK2Fsd2F5cyBcdTUxQzcgMTUtMTIzNDYtMworYWx3YXlzIFx1NTFDOCAxMy0xMzQ1Ni01CithbHdheXMgXHU1MUM5IDE0LTQ2LTIKK2Fsd2F5cyBcdTUxQ0EgMjQ1LTEzNDU2LTUKK2Fsd2F5cyBcdTUxQ0IgMTQ1LTI0Ni0zCithbHdheXMgXHU1MUNDIDE0LTEzNDU2LTIKK2Fsd2F5cyBcdTUxQ0QgMTQ1LTEyMzQ2LTUKK2Fsd2F5cyBcdTUxQ0UgMTMtMTIzNi01CithbHdheXMgXHU1MUNGIDEzLTIzNDUtNAorYWx3YXlzIFx1NTFEMCAxNDU2LTMKK2Fsd2F5cyBcdTUxRDEgMjQ1LTEyMzU2LTUKK2Fsd2F5cyBcdTUxRDIgMjQ1Ni0yCithbHdheXMgXHU1MUQzIDE0LTE2LTUKK2Fsd2F5cyBcdTUxRDQgMjQ1LTEzNDYtMworYWx3YXlzIFx1NTFENSAxMzQtMTM0NTYtNAorYWx3YXlzIFx1NTFENiAxLTEyMzQ1Ni00CithbHdheXMgXHU1MUQ3IDI0NS0xMjQ2LTMKK2Fsd2F5cyBcdTUxRDggMTUtMTU2LTMKK2Fsd2F5cyBcdTUxRDkgMTQ1LTI1LTIKK2Fsd2F5cyBcdTUxREEgMTMtMTQ1Ni01CithbHdheXMgXHU1MURCIDE0LTE0NTYtNAorYWx3YXlzIFx1NTFEQyAxNC0xNDU2LTQKK2Fsd2F5cyBcdTUxREQgMTM0NS0xMzQ1Ni0yCithbHdheXMgXHU1MURFIDE1LTE2LTMKK2Fsd2F5cyBcdTUxREYgMTQ1LTM0LTIKK2Fsd2F5cyBcdTUxRTAgMTMtMTYtNAorYWx3YXlzIFx1NTFFMSAxMjM0NS0xMjM2LTIKK2Fsd2F5cyBcdTUxRTIgMTIzNDUtMTIzNi0yCithbHdheXMgXHU1MUUzIDEyMzQ1LTEyMzYtMgorYWx3YXlzIFx1NTFFNCAxMjM0NS0xMzU2LTUKK2Fsd2F5cyBcdTUxRTUgMTMtMTI1Ni0zCithbHdheXMgXHU1MUU2IDEyLTM0LTUKK2Fsd2F5cyBcdTUxRTcgMS0xMzU2LTMKK2Fsd2F5cyBcdTUxRTggMTIzNDUtMTM1Ni0zCithbHdheXMgXHU1MUU5IDEzNC0zNC01CithbHdheXMgXHU1MUVBIDEtMTU2LTUKK2Fsd2F5cyBcdTUxRUIgMTIzNDUtMzQtMgorYWx3YXlzIFx1NTFFQyAxMjM0NS0xMzU2LTMKK2Fsd2F5cyBcdTUxRUQgMTIzNC0xMzQ1Ni0yCithbHdheXMgXHU1MUVFIDEyMzQ1LTEzNTYtMworYWx3YXlzIFx1NTFFRiAxMjMtMjQ1Ni00CithbHdheXMgXHU1MUYwIDEyMzUtNDU2LTIKK2Fsd2F5cyBcdTUxRjEgMTIzLTI0NTYtNAorYWx3YXlzIFx1NTFGMiAxMy0xMjM2LTMKK2Fsd2F5cyBcdTUxRjMgMTQ1LTEzNTYtNQorYWx3YXlzIFx1NTFGNCAxMjM0LTEzNDU2LTIKK2Fsd2F5cyBcdTUxRjUgMTIzLTEyMzYtNAorYWx3YXlzIFx1NTFGNiAxNS0yMzUtMworYWx3YXlzIFx1NTFGNyAxMjMtMjM1Ni01CithbHdheXMgXHU1MUY4IDEyNC0zNC0zCithbHdheXMgXHU1MUY5IDE0Ni0zCithbHdheXMgXHU1MUZBIDEyLTM0LTMKK2Fsd2F5cyBcdTUxRkIgMTMtMTYtMgorYWx3YXlzIFx1NTFGQyAxNDUtMTM0Ni01CithbHdheXMgXHU1MUZEIDEyMzUtMTIzNi0yCithbHdheXMgXHU1MUZFIDEyMzUtMTIzNi0yCithbHdheXMgXHU1MUZGIDEyNS0xNDYtMgorYWx3YXlzIFx1NTIwMCAxNDUtMTQ2LTMKK2Fsd2F5cyBcdTUyMDEgMTQ1LTI0Ni0zCithbHdheXMgXHU1MjAyIDE0NS0xNDYtMworYWx3YXlzIFx1NTIwMyAxMjQ1LTEzNi01CithbHdheXMgXHU1MjA0IDEyNDUtMTM2LTUKK2Fsd2F5cyBcdTUyMDUgMTItNDU2LTMKK2Fsd2F5cyBcdTUyMDYgMTIzNDUtMTM2LTMKK2Fsd2F5cyBcdTUyMDcgMjQ1LTM0Ni0zCithbHdheXMgXHU1MjA4IDE2LTUKK2Fsd2F5cyBcdTUyMDkgMTMtMTYtMworYWx3YXlzIFx1NTIwQSAxMjMtMTIzNi0zCithbHdheXMgXHU1MjBCIDI0NS0yMzQ1LTUKK2Fsd2F5cyBcdTUyMEMgMjQ1LTEyMzQ1Ni00CithbHdheXMgXHU1MjBEIDEyLTM0LTIKK2Fsd2F5cyBcdTUyMEUgMTIzNDU2LTQKK2Fsd2F5cyBcdTUyMEYgMTMtMTYtMworYWx3YXlzIFx1NTIxMCAxNDUtMTIzNi00CithbHdheXMgXHU1MjExIDE1LTEzNDU2LTIKK2Fsd2F5cyBcdTUyMTIgMTIzNS0zNS0yCithbHdheXMgXHU1MjEzIDEyNDU2LTIKK2Fsd2F5cyBcdTUyMTQgMTMtMjM2LTIKK2Fsd2F5cyBcdTUyMTUgMTQtMTYtMgorYWx3YXlzIFx1NTIxNiAyMzYtNQorYWx3YXlzIFx1NTIxNyAxNC0zNDYtNQorYWx3YXlzIFx1NTIxOCAxNC0yMzQtMgorYWx3YXlzIFx1NTIxOSAxMjUtMjM0Ni0yCithbHdheXMgXHU1MjFBIDEzLTEzNDYtMworYWx3YXlzIFx1NTIxQiAxMi00NTYtNQorYWx3YXlzIFx1NTIxQyAxMjM0NS0zNC0yCithbHdheXMgXHU1MjFEIDEyLTM0LTMKK2Fsd2F5cyBcdTUyMUUgMjQ1LTEyNTYtNQorYWx3YXlzIFx1NTIxRiAxMy0xMjU2LTMKK2Fsd2F5cyBcdTUyMjAgMjQtMTIzNi0zCithbHdheXMgXHU1MjIxIDEzNC0xNDU2LTQKK2Fsd2F5cyBcdTUyMjIgMTQtMTM0NTYtMgorYWx3YXlzIFx1NTIyMyAxLTEyMzQ2LTMKK2Fsd2F5cyBcdTUyMjQgMTIzNC0xMjM2LTUKK2Fsd2F5cyBcdTUyMjUgMTM1LTM0Ni0yCithbHdheXMgXHU1MjI2IDEzLTM0Ni0yCithbHdheXMgXHU1MjI3IDEzLTM0Ni0yCithbHdheXMgXHU1MjI4IDEzNS0xNDYtNQorYWx3YXlzIFx1NTIyOSAxNC0xNi01CithbHdheXMgXHU1MjJBIDI0LTEyMzYtMworYWx3YXlzIFx1NTIyQiAxMzUtMzQ2LTIKK2Fsd2F5cyBcdTUyMkMgMTItMTIzNi00CithbHdheXMgXHU1MjJEIDEzLTEzNDU2LTQKK2Fsd2F5cyBcdTUyMkUgMTMtMzUtMworYWx3YXlzIFx1NTIyRiAxMy0xMzYtMworYWx3YXlzIFx1NTIzMCAxNDUtMTQ2LTUKK2Fsd2F5cyBcdTUyMzEgMTItNDU2LTUKK2Fsd2F5cyBcdTUyMzIgMTIzLTEyNDYtMworYWx3YXlzIFx1NTIzMyAxMjMtMzQtMworYWx3YXlzIFx1NTIzNCAxNDUtMjUtNQorYWx3YXlzIFx1NTIzNSAxNTYtNQorYWx3YXlzIFx1NTIzNiAxLTE1Ni01CithbHdheXMgXHU1MjM3IDI0LTM1LTMKK2Fsd2F5cyBcdTUyMzggMjQ1LTQ1LTUKK2Fsd2F5cyBcdTUyMzkgMjQtMzQ1LTMKK2Fsd2F5cyBcdTUyM0EgMjQ1LTE1Ni01CithbHdheXMgXHU1MjNCIDEyMy0yMzQ2LTUKK2Fsd2F5cyBcdTUyM0MgMTMtMzQ2LTIKK2Fsd2F5cyBcdTUyM0QgMTMtMTI0Ni01CithbHdheXMgXHU1MjNFIDI0NS0xNTYtNQorYWx3YXlzIFx1NTIzRiAxMy0xMjQ2LTUKK2Fsd2F5cyBcdTUyNDAgMTIzLTI0NTYtNAorYWx3YXlzIFx1NTI0MSAxNDUtMjUtNQorYWx3YXlzIFx1NTI0MiAxMy0xNi01CithbHdheXMgXHU1MjQzIDEyNC0xNi01CithbHdheXMgXHU1MjQ0IDEzLTEzNDU2LTQKK2Fsd2F5cyBcdTUyNDUgMTQ1LTEyMzU2LTMKK2Fsd2F5cyBcdTUyNDYgMTQtMjUtMgorYWx3YXlzIFx1NTI0NyAxMjUtMjM0Ni0yCithbHdheXMgXHU1MjQ4IDQ1LTMKK2Fsd2F5cyBcdTUyNDkgMjQ1LTI1LTUKK2Fsd2F5cyBcdTUyNEEgMTUtMjQ2LTMKK2Fsd2F5cyBcdTUyNEIgMTIzLTIzNDYtNQorYWx3YXlzIFx1NTI0QyAxNC0zNDUtNQorYWx3YXlzIFx1NTI0RCAyNDUtMjM0NS0yCithbHdheXMgXHU1MjRFIDI0LTM0NS0zCithbHdheXMgXHU1MjRGIDEyLTQ1Ni01CithbHdheXMgXHU1MjUwIDEzLTM1LTQKK2Fsd2F5cyBcdTUyNTEgMTMtMjM0NS01CithbHdheXMgXHU1MjUyIDI0NS0yNS01CithbHdheXMgXHU1MjUzIDE0LTE2LTIKK2Fsd2F5cyBcdTUyNTQgMTI0LTE2LTMKK2Fsd2F5cyBcdTUyNTUgMTIzNDUtMzU2LTUKK2Fsd2F5cyBcdTUyNTYgMTIzNC0xMjM1Ni00CithbHdheXMgXHU1MjU3IDEyLTEyMzYtNAorYWx3YXlzIFx1NTI1OCAyNDUtMTYtMgorYWx3YXlzIFx1NTI1OSAxMi00NTYtNQorYWx3YXlzIFx1NTI1QSAxMjUtMTU2LTUKK2Fsd2F5cyBcdTUyNUIgMTMtMTM0Ni0zCithbHdheXMgXHU1MjVDIDEyNDU2LTMKK2Fsd2F5cyBcdTUyNUQgMTM1LTEyNi0zCithbHdheXMgXHU1MjVFIDEzLTE2LTMKK2Fsd2F5cyBcdTUyNUYgMTQ1LTI1LTMKK2Fsd2F5cyBcdTUyNjAgMjQ1LTEzNDU2LTIKK2Fsd2F5cyBcdTUyNjEgMjM0NS00CithbHdheXMgXHU1MjYyIDEtMjUtMgorYWx3YXlzIFx1NTI2MyAxMy0yMzQ1LTUKK2Fsd2F5cyBcdTUyNjQgMTMtMTYtNQorYWx3YXlzIFx1NTI2NSAxMzUtMTI2LTMKK2Fsd2F5cyBcdTUyNjYgMjM0NS0zCithbHdheXMgXHU1MjY3IDEzLTEyNTYtNQorYWx3YXlzIFx1NTI2OCAxMjM1LTI1LTUKK2Fsd2F5cyBcdTUyNjkgMjQtMTM1Ni01CithbHdheXMgXHU1MjZBIDEzLTIzNDUtNAorYWx3YXlzIFx1NTI2QiAxNDUtMjUtMgorYWx3YXlzIFx1NTI2QyAxNDUtMTI0NTYtMworYWx3YXlzIFx1NTI2RCAzNC0zCithbHdheXMgXHU1MjZFIDEzLTM1LTQKK2Fsd2F5cyBcdTUyNkYgMTIzNDUtMzQtNQorYWx3YXlzIFx1NTI3MCAyNC0xMzU2LTUKK2Fsd2F5cyBcdTUyNzEgMTMtMjM0NS01CithbHdheXMgXHU1MjcyIDEzLTIzNDYtMworYWx3YXlzIFx1NTI3MyAxLTM0NS0yCithbHdheXMgXHU1Mjc0IDEyMy0yNDU2LTQKK2Fsd2F5cyBcdTUyNzUgMTItNDU2LTUKK2Fsd2F5cyBcdTUyNzYgMTMtNDUtMworYWx3YXlzIFx1NTI3NyAxMi0xMjM2LTQKK2Fsd2F5cyBcdTUyNzggMTIzNS0xMjQ1Ni0yCithbHdheXMgXHU1Mjc5IDE0LTM0LTUKK2Fsd2F5cyBcdTUyN0EgMTQtMTYtMgorYWx3YXlzIFx1NTI3QiAxMjM0LTEzNTYtNAorYWx3YXlzIFx1NTI3QyAyNC0xMjM2LTMKK2Fsd2F5cyBcdTUyN0QgMTIzNC0yNDYtNQorYWx3YXlzIFx1NTI3RSAxMjMtMTIzNTYtMworYWx3YXlzIFx1NTI3RiAxMy0yNDYtNAorYWx3YXlzIFx1NTI4MCAxMy0zNS0zCithbHdheXMgXHU1MjgxIDI0NS0yNDYtMworYWx3YXlzIFx1NTI4MiAxMy0yMzYtMgorYWx3YXlzIFx1NTI4MyAxMjM1LTM1LTUKK2Fsd2F5cyBcdTUyODQgMS0zNDUtMgorYWx3YXlzIFx1NTI4NSAxLTI1LTIKK2Fsd2F5cyBcdTUyODYgMTQtMjM0NS0yCithbHdheXMgXHU1Mjg3IDEzLTEyNTYtNQorYWx3YXlzIFx1NTI4OCAxMjM0LTE2LTMKK2Fsd2F5cyBcdTUyODkgMTQtMjM0LTIKK2Fsd2F5cyBcdTUyOEEgMTMtMTI0Ni01CithbHdheXMgXHU1MjhCIDEzLTI0Ni00CithbHdheXMgXHU1MjhDIDEzLTEyNDYtNQorYWx3YXlzIFx1NTI4RCAxMy0yMzQ1LTUKK2Fsd2F5cyBcdTUyOEUgMTMtMjM0NS01CithbHdheXMgXHU1MjhGIDEyNC0xMzQ2LTMKK2Fsd2F5cyBcdTUyOTAgMTIzNS0yNS0zCithbHdheXMgXHU1MjkxIDEzLTE2LTUKK2Fsd2F5cyBcdTUyOTIgMTMtMjM0NS01CithbHdheXMgXHU1MjkzIDE2LTUKK2Fsd2F5cyBcdTUyOTQgMTMtMjM0NS01CithbHdheXMgXHU1Mjk1IDEtMTU2LTIKK2Fsd2F5cyBcdTUyOTYgMTItMTIzNi0yCithbHdheXMgXHU1Mjk3IDEyNS0xMjQ1Ni0zCithbHdheXMgXHU1Mjk4IDEzNC0xMjYtMgorYWx3YXlzIFx1NTI5OSAxNC0xNi0yCithbHdheXMgXHU1MjlBIDEtMzQtMgorYWx3YXlzIFx1NTI5QiAxNC0xNi01CithbHdheXMgXHU1MjlDIDIzNDU2LTMKK2Fsd2F5cyBcdTUyOUQgMjQ1LTQ1LTUKK2Fsd2F5cyBcdTUyOUUgMTM1LTEyMzYtNQorYWx3YXlzIFx1NTI5RiAxMy0xMjM0Ni0zCithbHdheXMgXHU1MkEwIDEzLTIzNDU2LTMKK2Fsd2F5cyBcdTUyQTEgMzQtNQorYWx3YXlzIFx1NTJBMiAxMzQtMjQ1Ni01CithbHdheXMgXHU1MkEzIDE0LTM0Ni01CithbHdheXMgXHU1MkE0IDEzLTE0NTYtNQorYWx3YXlzIFx1NTJBNSAxMjMtMTM1Ni0zCithbHdheXMgXHU1MkE2IDE1LTM0Ni0yCithbHdheXMgXHU1MkE3IDEtMTU2LTQKK2Fsd2F5cyBcdTUyQTggMTQ1LTEyMzQ2LTUKK2Fsd2F5cyBcdTUyQTkgMS0zNC01CithbHdheXMgXHU1MkFBIDEzNDUtMzQtNAorYWx3YXlzIFx1NTJBQiAxMy0zNDYtMgorYWx3YXlzIFx1NTJBQyAyNDUtMTI1Ni0yCithbHdheXMgXHU1MkFEIDI0LTE0Ni01CithbHdheXMgXHU1MkFFIDE2LTUKK2Fsd2F5cyBcdTUyQUYgMS0zNC0zCithbHdheXMgXHU1MkIwIDEzNC0yNDYtNAorYWx3YXlzIFx1NTJCMSAxNC0xNi01CithbHdheXMgXHU1MkIyIDEzLTE0NTYtNQorYWx3YXlzIFx1NTJCMyAxNC0xNDYtMgorYWx3YXlzIFx1NTJCNCAxNC0xNDYtMgorYWx3YXlzIFx1NTJCNSAxMy00NS01CithbHdheXMgXHU1MkI2IDEyMy0xMjM1Ni00CithbHdheXMgXHU1MkI3IDQ2LTIKK2Fsd2F5cyBcdTUyQjggMzUtMworYWx3YXlzIFx1NTJCOSAxNS0yNDYtNQorYWx3YXlzIFx1NTJCQSAxMzQtMTIzNTYtMgorYWx3YXlzIFx1NTJCQiAxMjMtNDU2LTMKK2Fsd2F5cyBcdTUyQkMgMTMtMzQ2LTIKK2Fsd2F5cyBcdTUyQkQgMTQtMzQ2LTUKK2Fsd2F5cyBcdTUyQkUgMTIzNS0yMzQ2LTIKK2Fsd2F5cyBcdTUyQkYgMjQtMTU2LTUKK2Fsd2F5cyBcdTUyQzAgMTIzLTIzNDYtNQorYWx3YXlzIFx1NTJDMSAxMy0xNDU2LTUKK2Fsd2F5cyBcdTUyQzIgMTIzNS0xNDYtMgorYWx3YXlzIFx1NTJDMyAxMzUtMTI2LTIKK2Fsd2F5cyBcdTUyQzQgMTM0LTE0NTYtNAorYWx3YXlzIFx1NTJDNSAxMi0xNTYtNQorYWx3YXlzIFx1NTJDNiAxNC0xMzQ2LTIKK2Fsd2F5cyBcdTUyQzcgMjM1LTQKK2Fsd2F5cyBcdTUyQzggMjM1LTQKK2Fsd2F5cyBcdTUyQzkgMTM0LTIzNDUtNAorYWx3YXlzIFx1NTJDQSAxMjMtMjM0Ni01CithbHdheXMgXHU1MkNCIDE1LTI1Ni0zCithbHdheXMgXHU1MkNDIDEzLTQ1LTUKK2Fsd2F5cyBcdTUyQ0QgMjQ1LTEzNDU2LTIKK2Fsd2F5cyBcdTUyQ0UgMTQtMzQtNQorYWx3YXlzIFx1NTJDRiAxMjM0LTEyMzU2LTQKK2Fsd2F5cyBcdTUyRDAgMTM0LTEzNTYtNAorYWx3YXlzIFx1NTJEMSAxMi0xNTYtNQorYWx3YXlzIFx1NTJEMiAxNC0yMzQ2LTUKK2Fsd2F5cyBcdTUyRDMgMTIzLTI0NTYtNQorYWx3YXlzIFx1NTJENCAxMzQtMjM0NS00CithbHdheXMgXHU1MkQ1IDE0NS0xMjM0Ni01CithbHdheXMgXHU1MkQ2IDE1LTEyNTYtNQorYWx3YXlzIFx1NTJENyAxNS0xMjU2LTUKK2Fsd2F5cyBcdTUyRDggMTIzLTEyMzYtMworYWx3YXlzIFx1NTJEOSAzNC01CithbHdheXMgXHU1MkRBIDE2LTUKK2Fsd2F5cyBcdTUyREIgMTUtMjU2LTMKK2Fsd2F5cyBcdTUyREMgMTIzNDYtNAorYWx3YXlzIFx1NTJERCAyNC0xMzU2LTUKK2Fsd2F5cyBcdTUyREUgMTQtMTQ2LTIKK2Fsd2F5cyBcdTUyREYgMTM0LTM0LTUKK2Fsd2F5cyBcdTUyRTAgMTQtMzQtNQorYWx3YXlzIFx1NTJFMSAxMjM0LTI0Ni01CithbHdheXMgXHU1MkUyIDI0LTE1Ni01CithbHdheXMgXHU1MkUzIDEzLTE2LTMKK2Fsd2F5cyBcdTUyRTQgMjQ1LTE0NTYtMgorYWx3YXlzIFx1NTJFNSAyNDUtNDYtNAorYWx3YXlzIFx1NTJFNiAxMy0yNDYtNAorYWx3YXlzIFx1NTJFNyAyNDUtNDUtNQorYWx3YXlzIFx1NTJFOCA0Ni00CithbHdheXMgXHU1MkU5IDE2LTUKK2Fsd2F5cyBcdTUyRUEgMTMtMjM2LTIKK2Fsd2F5cyBcdTUyRUIgMTIzNDUtMTIzNi0yCithbHdheXMgXHU1MkVDIDEzLTQ1LTUKK2Fsd2F5cyBcdTUyRUQgMTI0LTEyMzQ2LTIKK2Fsd2F5cyBcdTUyRUUgMTMtMTI1Ni01CithbHdheXMgXHU1MkVGIDE0NS0xMjM2LTMKK2Fsd2F5cyBcdTUyRjAgMTUtMzQ2LTIKK2Fsd2F5cyBcdTUyRjEgMTM0LTI0NTYtNQorYWx3YXlzIFx1NTJGMiAxNS0yNTYtMworYWx3YXlzIFx1NTJGMyAxNS0yNTYtMworYWx3YXlzIFx1NTJGNCAxNC0xMjU2LTUKK2Fsd2F5cyBcdTUyRjUgMTQtMTYtNQorYWx3YXlzIFx1NTJGNiAxMi0yMzQ2LTUKK2Fsd2F5cyBcdTUyRjcgMTI0NS0xMzQ2LTIKK2Fsd2F5cyBcdTUyRjggMjQ1LTQ1LTUKK2Fsd2F5cyBcdTUyRjkgMTM1LTE0Ni0zCithbHdheXMgXHU1MkZBIDI0LTE0Ni0yCithbHdheXMgXHU1MkZCIDI1Ni0yCithbHdheXMgXHU1MkZDIDEzLTIzNC0zCithbHdheXMgXHU1MkZEIDEzNS0xNDYtNQorYWx3YXlzIFx1NTJGRSAxMy0xMjM1Ni0zCithbHdheXMgXHU1MkZGIDM0LTUKK2Fsd2F5cyBcdTUzMDAgMjU2LTIKK2Fsd2F5cyBcdTUzMDEgMTQtNDYtNAorYWx3YXlzIFx1NTMwMiAxNDUtMTYtNQorYWx3YXlzIFx1NTMwMyAxMy0yNDU2LTUKK2Fsd2F5cyBcdTUzMDQgMTMtMjQ1Ni01CithbHdheXMgXHU1MzA1IDEzNS0xNDYtMworYWx3YXlzIFx1NTMwNiAyNDUtMTIzNDYtMworYWx3YXlzIFx1NTMwNyAyNDUtMTIzNDYtMworYWx3YXlzIFx1NTMwOCAxNS0yMzUtMworYWx3YXlzIFx1NTMwOSAxMjM0LTEzNTYtMworYWx3YXlzIFx1NTMwQSAxMy0xMjU2LTIKK2Fsd2F5cyBcdTUzMEIgMTI0LTE0Ni0yCithbHdheXMgXHU1MzBDIDEzLTIzNDYtMgorYWx3YXlzIFx1NTMwRCAxMjM0LTM0LTIKK2Fsd2F5cyBcdTUzMEUgMjM0Ni0yCithbHdheXMgXHU1MzBGIDEyMzQtMTQ2LTIKK2Fsd2F5cyBcdTUzMTAgMTIzNDUtMzQtMgorYWx3YXlzIFx1NTMxMSAxMy0xMjM0Ni0zCithbHdheXMgXHU1MzEyIDE0NS0zNDUtMgorYWx3YXlzIFx1NTMxMyAxMy0yMzQtNQorYWx3YXlzIFx1NTMxNCAyNDUtMjM1LTMKK2Fsd2F5cyBcdTUzMTUgMTM1LTE2LTQKK2Fsd2F5cyBcdTUzMTYgMTIzNS0zNS01CithbHdheXMgXHU1MzE3IDEzNS0zNTYtNAorYWx3YXlzIFx1NTMxOCAxMzQ1LTE0Ni00CithbHdheXMgXHU1MzE5IDEyLTE1Ni0yCithbHdheXMgXHU1MzFBIDEyMzQ1LTEzNDYtMworYWx3YXlzIFx1NTMxQiAxMy0yMzQtNQorYWx3YXlzIFx1NTMxQyAxNi0yCithbHdheXMgXHU1MzFEIDEyNS0zNDUtMworYWx3YXlzIFx1NTMxRSAxMy00Ni01CithbHdheXMgXHU1MzFGIDEyMy0xMzQ2LTUKK2Fsd2F5cyBcdTUzMjAgMTMtNDYtNQorYWx3YXlzIFx1NTMyMSAxMjMtNDU2LTMKK2Fsd2F5cyBcdTUzMjIgMTIzNS0zNC0zCithbHdheXMgXHU1MzIzIDE1LTIzNDU2LTIKK2Fsd2F5cyBcdTUzMjQgMjQ1LTEyNTYtMworYWx3YXlzIFx1NTMyNSAxMzUtMjM0NS01CithbHdheXMgXHU1MzI2IDEzLTEyNDYtNAorYWx3YXlzIFx1NTMyNyAyNDUtMzQ2LTUKK2Fsd2F5cyBcdTUzMjggMTI1LTEzNDYtMworYWx3YXlzIFx1NTMyOSAxMjMtNDU2LTMKK2Fsd2F5cyBcdTUzMkEgMTIzNDUtMzU2LTQKK2Fsd2F5cyBcdTUzMkIgMTIzNS0zNC0zCithbHdheXMgXHU1MzJDIDEyNC0xMjM1Ni0yCithbHdheXMgXHU1MzJEIDEzLTEyNDYtNAorYWx3YXlzIFx1NTMyRSAxMjMtMTI0Ni01CithbHdheXMgXHU1MzJGIDEyMzUtMTI0Ni01CithbHdheXMgXHU1MzMwIDE0NS0xMjM2LTMKK2Fsd2F5cyBcdTUzMzEgMTIzLTEyNDYtNQorYWx3YXlzIFx1NTMzMiAxNC0yMzQ1LTIKK2Fsd2F5cyBcdTUzMzMgMTQtMjM0NS0yCithbHdheXMgXHU1MzM0IDE1LTEyNDU2LTQKK2Fsd2F5cyBcdTUzMzUgMTQ1LTM0LTIKK2Fsd2F5cyBcdTUzMzYgMTMtMjM0LTUKK2Fsd2F5cyBcdTUzMzcgMjQ1LTEyNTYtMgorYWx3YXlzIFx1NTMzOCAxNS0xNi01CithbHdheXMgXHU1MzM5IDEyMzQtMTYtNAorYWx3YXlzIFx1NTMzQSAyNDUtMTI1Ni0zCithbHdheXMgXHU1MzNCIDE2LTMKK2Fsd2F5cyBcdTUzM0MgMTIzNi00CithbHdheXMgXHU1MzNEIDIzNDUtNAorYWx3YXlzIFx1NTMzRSAxMzUtMjM0NS00CithbHdheXMgXHU1MzNGIDEzNDUtMTYtNQorYWx3YXlzIFx1NTM0MCAyNDUtMTI1Ni0zCithbHdheXMgXHU1MzQxIDI0LTE1Ni0yCithbHdheXMgXHU1MzQyIDE1LTE0NTYtNQorYWx3YXlzIFx1NTM0MyAyNDUtMjM0NS0zCithbHdheXMgXHU1MzQ0IDEzNDUtMjM0NS01CithbHdheXMgXHU1MzQ1IDE1LTM0NS01CithbHdheXMgXHU1MzQ2IDEyNS0zNC0yCithbHdheXMgXHU1MzQ3IDI0LTEzNTYtMworYWx3YXlzIFx1NTM0OCAzNC00CithbHdheXMgXHU1MzQ5IDEyMzUtMTI0Ni01CithbHdheXMgXHU1MzRBIDEzNS0xMjM2LTUKK2Fsd2F5cyBcdTUzNEIgMjQtMTU2LTUKK2Fsd2F5cyBcdTUzNEMgMTUtMTYtNQorYWx3YXlzIFx1NTM0RCAxMjQ1Ni01CithbHdheXMgXHU1MzRFIDEyMzUtMzUtMgorYWx3YXlzIFx1NTM0RiAxNS0zNDYtMgorYWx3YXlzIFx1NTM1MCAxMjQ1Ni01CithbHdheXMgXHU1MzUxIDEzNS0zNTYtMworYWx3YXlzIFx1NTM1MiAxMjUtMzQtMgorYWx3YXlzIFx1NTM1MyAxLTI1LTIKK2Fsd2F5cyBcdTUzNTQgMTUtMzQ2LTIKK2Fsd2F5cyBcdTUzNTUgMTQ1LTEyMzYtMworYWx3YXlzIFx1NTM1NiAxMzQtMjQ1Ni01CithbHdheXMgXHU1MzU3IDEzNDUtMTIzNi0yCithbHdheXMgXHU1MzU4IDE0NS0xMjM2LTMKK2Fsd2F5cyBcdTUzNTkgMTMtMTYtMgorYWx3YXlzIFx1NTM1QSAxMzUtMTI2LTIKK2Fsd2F5cyBcdTUzNUIgMTQtMTI1Ni01CithbHdheXMgXHU1MzVDIDEzNS0zNC00CithbHdheXMgXHU1MzVEIDEyMy00NTYtNQorYWx3YXlzIFx1NTM1RSAxMzUtMjM0NS01CithbHdheXMgXHU1MzVGIDEzNS0zNC00CithbHdheXMgXHU1MzYwIDEtMTIzNi01CithbHdheXMgXHU1MzYxIDEyMy0zNDUtNAorYWx3YXlzIFx1NTM2MiAxNC0zNC0yCithbHdheXMgXHU1MzYzIDIzNC00CithbHdheXMgXHU1MzY0IDE0LTM0LTQKK2Fsd2F5cyBcdTUzNjUgMTUtMTYtMworYWx3YXlzIFx1NTM2NiAxMy0zNS01CithbHdheXMgXHU1MzY3IDI1LTUKK2Fsd2F5cyBcdTUzNjggMTUtMzQ2LTUKK2Fsd2F5cyBcdTUzNjkgMTMtMzQ2LTIKK2Fsd2F5cyBcdTUzNkEgMTMtMzQ2LTIKK2Fsd2F5cyBcdTUzNkIgMTI0Ni01CithbHdheXMgXHU1MzZDIDEzNDYtMgorYWx3YXlzIFx1NTM2RCAyNDUtMjM1LTIKK2Fsd2F5cyBcdTUzNkUgMS0xNTYtMworYWx3YXlzIFx1NTM2RiAxMzQtMTQ2LTQKK2Fsd2F5cyBcdTUzNzAgMTQ1Ni01CithbHdheXMgXHU1MzcxIDEyNDYtMgorYWx3YXlzIFx1NTM3MiAyNC0xNDYtNQorYWx3YXlzIFx1NTM3MyAxMy0xNi0yCithbHdheXMgXHU1Mzc0IDI0NS0yMzYtNQorYWx3YXlzIFx1NTM3NSAxNC0xMjQ1Ni00CithbHdheXMgXHU1Mzc2IDI0LTE1Ni01CithbHdheXMgXHU1Mzc3IDEzLTQ1LTQKK2Fsd2F5cyBcdTUzNzggMTUtMzQ2LTUKK2Fsd2F5cyBcdTUzNzkgMTUtMTI1Ni01CithbHdheXMgXHU1MzdBIDEzLTE0NTYtNAorYWx3YXlzIFx1NTM3QiAyNDUtMjM2LTUKK2Fsd2F5cyBcdTUzN0MgMzQtNQorYWx3YXlzIFx1NTM3RCAxMy0xNi0yCithbHdheXMgXHU1MzdFIDIzNDYtNQorYWx3YXlzIFx1NTM3RiAyNDUtMTM0NTYtMworYWx3YXlzIFx1NTM4MCAxNS0xNi0zCithbHdheXMgXHU1MzgxIDE1LTEyMzYtMworYWx3YXlzIFx1NTM4MiAxMi0xMzQ2LTQKK2Fsd2F5cyBcdTUzODMgMS0xMjM2LTMKK2Fsd2F5cyBcdTUzODQgMjM0Ni01CithbHdheXMgXHU1Mzg1IDEyNC0xMzQ1Ni0zCithbHdheXMgXHU1Mzg2IDE0LTE2LTUKK2Fsd2F5cyBcdTUzODcgMS0yMzQ2LTIKK2Fsd2F5cyBcdTUzODggMTIzNS0xMjM2LTQKK2Fsd2F5cyBcdTUzODkgMTQtMTYtNQorYWx3YXlzIFx1NTM4QSAyMzQ1Ni00CithbHdheXMgXHU1MzhCIDIzNDU2LTMKK2Fsd2F5cyBcdTUzOEMgMjM0NS01CithbHdheXMgXHU1MzhEIDI0LTIzNDYtNQorYWx3YXlzIFx1NTM4RSAxLTE1Ni00CithbHdheXMgXHU1MzhGIDEtMzQ1LTQKK2Fsd2F5cyBcdTUzOTAgMTIzNC0xMzQ2LTIKK2Fsd2F5cyBcdTUzOTEgMjM0NTYtMgorYWx3YXlzIFx1NTM5MiAxMjM1LTIzNDYtMgorYWx3YXlzIFx1NTM5MyAyNi0yCithbHdheXMgXHU1Mzk0IDEtMTU2LTUKK2Fsd2F5cyBcdTUzOTUgMjQ1LTIzNDYtNQorYWx3YXlzIFx1NTM5NiAxMjM0NS0xMzQ2LTIKK2Fsd2F5cyBcdTUzOTcgMTI0LTE2LTIKK2Fsd2F5cyBcdTUzOTggMTQtMTYtMgorYWx3YXlzIFx1NTM5OSAyNC0yMzQ2LTUKK2Fsd2F5cyBcdTUzOUEgMTIzNS0xMjM1Ni01CithbHdheXMgXHU1MzlCIDEyNC0xMzQ1Ni0zCithbHdheXMgXHU1MzlDIDEyNS0xMjQ2LTMKK2Fsd2F5cyBcdTUzOUQgMjQ1LTI1LTUKK2Fsd2F5cyBcdTUzOUUgMTIzNDUtMzU2LTUKK2Fsd2F5cyBcdTUzOUYgNDUtMgorYWx3YXlzIFx1NTNBMCAyNDUtMjM0Ni01CithbHdheXMgXHU1M0ExIDQ1LTIKK2Fsd2F5cyBcdTUzQTIgMTUtNDYtMworYWx3YXlzIFx1NTNBMyAyMzQ1LTQKK2Fsd2F5cyBcdTUzQTQgMTQtMTYtNQorYWx3YXlzIFx1NTNBNSAxMy0yMzYtMgorYWx3YXlzIFx1NTNBNiAxNS0yMzQ1Ni01CithbHdheXMgXHU1M0E3IDE0NS0yMzQ1LTMKK2Fsd2F5cyBcdTUzQTggMTItMzQtMgorYWx3YXlzIFx1NTNBOSAxMy0yMzQtNQorYWx3YXlzIFx1NTNBQSAxMy0xNDU2LTQKK2Fsd2F5cyBcdTUzQUIgMTQ2LTIKK2Fsd2F5cyBcdTUzQUMgMTMtMTI0Ni00CithbHdheXMgXHU1M0FEIDIzNDUtNQorYWx3YXlzIFx1NTNBRSAxNS0xNTYtMworYWx3YXlzIFx1NTNBRiAxNC0xNi01CithbHdheXMgXHU1M0IwIDEyLTEzNDYtNAorYWx3YXlzIFx1NTNCMSAxNC0xMjM2LTIKK2Fsd2F5cyBcdTUzQjIgMTQtMTYtNQorYWx3YXlzIFx1NTNCMyAyMzQ1LTIKK2Fsd2F5cyBcdTUzQjQgMjM0NS00CithbHdheXMgXHU1M0I1IDQ1LTIKK2Fsd2F5cyBcdTUzQjYgMTUtMTU2LTMKK2Fsd2F5cyBcdTUzQjcgMTMtMTIzNDYtMworYWx3YXlzIFx1NTNCOCAxNC0xNDU2LTIKK2Fsd2F5cyBcdTUzQjkgMTI0NS0xMjM1Ni0yCithbHdheXMgXHU1M0JBIDI0NS0xMjU2LTUKK2Fsd2F5cyBcdTUzQkIgMjQ1LTEyNTYtNQorYWx3YXlzIFx1NTNCQyAxNTYtNAorYWx3YXlzIFx1NTNCRCAxNC0zNTYtNAorYWx3YXlzIFx1NTNCRSAxNDUtMzQtMworYWx3YXlzIFx1NTNCRiAxNS0yMzQ1LTUKK2Fsd2F5cyBcdTUzQzAgMS0xMjQ1Ni0zCithbHdheXMgXHU1M0MxIDE1LTEyMzYtMworYWx3YXlzIFx1NTNDMiAyNDUtMTIzNi0zCithbHdheXMgXHU1M0MzIDI0NS0xMjM2LTMKK2Fsd2F5cyBcdTUzQzQgMTUtMTIzNi0zCithbHdheXMgXHU1M0M1IDI0NS0xMjM2LTMKK2Fsd2F5cyBcdTUzQzYgMjQ1Ni01CithbHdheXMgXHU1M0M3IDE0NS0yNDU2LTUKK2Fsd2F5cyBcdTUzQzggMjM0LTUKK2Fsd2F5cyBcdTUzQzkgMTItMzQ1LTMKK2Fsd2F5cyBcdTUzQ0EgMTMtMTYtMgorYWx3YXlzIFx1NTNDQiAyMzQtNAorYWx3YXlzIFx1NTNDQyAyNC00NTYtMworYWx3YXlzIFx1NTNDRCAxMjM0NS0xMjM2LTQKK2Fsd2F5cyBcdTUzQ0UgMjQtMTIzNTYtMworYWx3YXlzIFx1NTNDRiAxMy0yMzU2LTUKK2Fsd2F5cyBcdTUzRDAgMTM1LTM0NS0yCithbHdheXMgXHU1M0QxIDEyMzQ1LTM0NS0zCithbHdheXMgXHU1M0QyIDEyNDUtMjUtNQorYWx3YXlzIFx1NTNEMyAyNC0xNTYtNQorYWx3YXlzIFx1NTNENCAyNC0zNC0yCithbHdheXMgXHU1M0Q1IDEtMjUtMgorYWx3YXlzIFx1NTNENiAyNDUtMTI1Ni00CithbHdheXMgXHU1M0Q3IDI0LTEyMzU2LTUKK2Fsd2F5cyBcdTUzRDggMTM1LTIzNDUtNQorYWx3YXlzIFx1NTNEOSAxNS0xMjU2LTUKK2Fsd2F5cyBcdTUzREEgMTMtMjM0NTYtNAorYWx3YXlzIFx1NTNEQiAxMjM0LTEyMzYtNQorYWx3YXlzIFx1NTNEQyAxNS0xMjM1Ni00CithbHdheXMgXHU1M0REIDEzLTE0Ni01CithbHdheXMgXHU1M0RFIDI1Ni01CithbHdheXMgXHU1M0RGIDE1LTEyMzU2LTQKK2Fsd2F5cyBcdTUzRTAgMTQ1LTM0Ni0yCithbHdheXMgXHU1M0UxIDEyNDUtMTI0Ni01CithbHdheXMgXHU1M0UyIDI0NS0xMjM0Ni0yCithbHdheXMgXHU1M0UzIDEyMy0xMjM1Ni00CithbHdheXMgXHU1M0U0IDEzLTM0LTQKK2Fsd2F5cyBcdTUzRTUgMTMtMTI1Ni01CithbHdheXMgXHU1M0U2IDE0LTEzNDU2LTUKK2Fsd2F5cyBcdTUzRTcgMTMtMzUtNAorYWx3YXlzIFx1NTNFOCAxNDUtMTQ2LTMKK2Fsd2F5cyBcdTUzRTkgMTIzLTEyMzU2LTUKK2Fsd2F5cyBcdTUzRUEgMS0xNTYtNAorYWx3YXlzIFx1NTNFQiAxMy0yNDYtNQorYWx3YXlzIFx1NTNFQyAxLTE0Ni01CithbHdheXMgXHU1M0VEIDEzNS0zNDUtMworYWx3YXlzIFx1NTNFRSAxNDUtMTM0NTYtMworYWx3YXlzIFx1NTNFRiAxMjMtMjM0Ni00CithbHdheXMgXHU1M0YwIDEyNC0yNDU2LTIKK2Fsd2F5cyBcdTUzRjEgMTItMTU2LTUKK2Fsd2F5cyBcdTUzRjIgMjQtMTU2LTQKK2Fsd2F5cyBcdTUzRjMgMjM0LTUKK2Fsd2F5cyBcdTUzRjQgMjQ1LTIzNC0yCithbHdheXMgXHU1M0Y1IDEyMzQtMTI2LTQKK2Fsd2F5cyBcdTUzRjYgMzQ2LTUKK2Fsd2F5cyBcdTUzRjcgMTIzNS0xNDYtNQorYWx3YXlzIFx1NTNGOCAxNS0xNTYtMworYWx3YXlzIFx1NTNGOSAxMjQtMTIzNi01CithbHdheXMgXHU1M0ZBIDEyLTE1Ni00CithbHdheXMgXHU1M0ZCIDE0LTIzNDYtNQorYWx3YXlzIFx1NTNGQyAxNDUtMjQ2LTMKK2Fsd2F5cyBcdTUzRkQgMTMtMTYtMworYWx3YXlzIFx1NTNGRSAxNDUtMzQtMgorYWx3YXlzIFx1NTNGRiAxMjM1LTEyMzQ2LTMKK2Fsd2F5cyBcdTU0MDAgMTM0LTM0Ni0zCithbHdheXMgXHU1NDAxIDE1LTEyNTYtMworYWx3YXlzIFx1NTQwMiAxMzQtMTM0Ni0yCithbHdheXMgXHU1NDAzIDEyLTE1Ni0zCithbHdheXMgXHU1NDA0IDEzLTIzNDYtNQorYWx3YXlzIFx1NTQwNSAxNS00NS0zCithbHdheXMgXHU1NDA2IDI0Ni0zCithbHdheXMgXHU1NDA3IDEyNS0xNTYtNAorYWx3YXlzIFx1NTQwOCAxMjM1LTIzNDYtMgorYWx3YXlzIFx1NTQwOSAxMy0xNi0yCithbHdheXMgXHU1NDBBIDE0NS0yNDYtNQorYWx3YXlzIFx1NTQwQiAyNDUtMTIzNDU2LTUKK2Fsd2F5cyBcdTU0MEMgMTI0LTEyMzQ2LTIKK2Fsd2F5cyBcdTU0MEQgMTM0LTEzNDU2LTIKK2Fsd2F5cyBcdTU0MEUgMTIzNS0xMjM1Ni01CithbHdheXMgXHU1NDBGIDE0LTE2LTUKK2Fsd2F5cyBcdTU0MTAgMTI0LTM0LTQKK2Fsd2F5cyBcdTU0MTEgMTUtNDYtNQorYWx3YXlzIFx1NTQxMiAxLTM0NS01CithbHdheXMgXHU1NDEzIDE1LTIzNDU2LTUKK2Fsd2F5cyBcdTU0MTQgMzQ2LTMKK2Fsd2F5cyBcdTU0MTUgMTQtMTI1Ni00CithbHdheXMgXHU1NDE2IDM0NS0zCithbHdheXMgXHU1NDE3IDEzNC0zNDUtMQorYWx3YXlzIFx1NTQxOCAxMjM1Ni00CithbHdheXMgXHU1NDE5IDE1LTIzNi0zCithbHdheXMgXHU1NDFBIDE2LTMKK2Fsd2F5cyBcdTU0MUIgMTMtMjU2LTMKK2Fsd2F5cyBcdTU0MUMgMTItMTIzNTYtNAorYWx3YXlzIFx1NTQxRCAxNC0xNDU2LTUKK2Fsd2F5cyBcdTU0MUUgMTI0LTEyMzQ1Ni0zCithbHdheXMgXHU1NDFGIDE0NTYtMgorYWx3YXlzIFx1NTQyMCAxMjM0NS0zNTYtNQorYWx3YXlzIFx1NTQyMSAxMzUtMTYtNAorYWx3YXlzIFx1NTQyMiAyNDUtMTQ1Ni01CithbHdheXMgXHU1NDIzIDI0NS0xNDU2LTUKK2Fsd2F5cyBcdTU0MjQgMTMtMzQ2LTUKK2Fsd2F5cyBcdTU0MjUgMTM1LTM0LTUKK2Fsd2F5cyBcdTU0MjYgMTIzNDUtMTIzNTYtNAorYWx3YXlzIFx1NTQyNyAxMzUtMzQ1LTEKK2Fsd2F5cyBcdTU0MjggMTI0LTEyMzQ1Ni0yCithbHdheXMgXHU1NDI5IDEyMzQ1LTEzNi0zCithbHdheXMgXHU1NDJBIDIzNDYtMgorYWx3YXlzIFx1NTQyQiAxMjM1LTEyMzYtMgorYWx3YXlzIFx1NTQyQyAxMjQtMTM0NTYtMworYWx3YXlzIFx1NTQyRCAxMjMtMTM1Ni0zCithbHdheXMgXHU1NDJFIDI0LTEyMzQ1Ni00CithbHdheXMgXHU1NDJGIDI0NS0xNi00CithbHdheXMgXHU1NDMwIDEyMzUtMTIzNDYtMgorYWx3YXlzIFx1NTQzMSAxLTE1Ni0zCithbHdheXMgXHU1NDMyIDE0NTYtNAorYWx3YXlzIFx1NTQzMyAzNC0yCithbHdheXMgXHU1NDM0IDM0LTIKK2Fsd2F5cyBcdTU0MzUgMTItMTQ2LTQKK2Fsd2F5cyBcdTU0MzYgMTM0NS0zNDUtNQorYWx3YXlzIFx1NTQzNyAxNS0yMzYtNQorYWx3YXlzIFx1NTQzOCAxNS0xNi0zCithbHdheXMgXHU1NDM5IDEyLTEyNDYtMworYWx3YXlzIFx1NTQzQSAxNDUtMTIzNTYtMworYWx3YXlzIFx1NTQzQiAxMjM0NTYtNAorYWx3YXlzIFx1NTQzQyAxMjM1LTEyMzU2LTQKK2Fsd2F5cyBcdTU0M0QgMTIzNS0xMjM0Ni0zCithbHdheXMgXHU1NDNFIDM0LTIKK2Fsd2F5cyBcdTU0M0YgMTMtMTQ2LTUKK2Fsd2F5cyBcdTU0NDAgMjM0NTYtMQorYWx3YXlzIFx1NTQ0MSAxMy0yNTYtNQorYWx3YXlzIFx1NTQ0MiAxNC0xMjU2LTQKK2Fsd2F5cyBcdTU0NDMgMjM0Ni01CithbHdheXMgXHU1NDQ0IDEzLTIzNDYtMgorYWx3YXlzIFx1NTQ0NSAxMzQtMzU2LTIKK2Fsd2F5cyBcdTU0NDYgMTQ1LTI0NTYtMworYWx3YXlzIFx1NTQ0NyAyNDUtMTYtNAorYWx3YXlzIFx1NTQ0OCAxMi0xMzU2LTIKK2Fsd2F5cyBcdTU0NDkgMzQtMgorYWx3YXlzIFx1NTQ0QSAxMy0xNDYtNQorYWx3YXlzIFx1NTQ0QiAxMjM0NS0zNC0zCithbHdheXMgXHU1NDRDIDEzLTI0Ni01CithbHdheXMgXHU1NDREIDEyMzUtMTIzNDYtMworYWx3YXlzIFx1NTQ0RSAxMi0xNTYtNAorYWx3YXlzIFx1NTQ0RiAyNC0xMzU2LTMKK2Fsd2F5cyBcdTU0NTAgMTM0NS0zNDUtNQorYWx3YXlzIFx1NTQ1MSAxMjQtMTIzNDU2LTMKK2Fsd2F5cyBcdTU0NTIgMzQtNAorYWx3YXlzIFx1NTQ1MyAxNi01CithbHdheXMgXHU1NDU0IDEyNC0yNDU2LTUKK2Fsd2F5cyBcdTU0NTUgMTIzNTYtNAorYWx3YXlzIFx1NTQ1NiAxNC0xNi01CithbHdheXMgXHU1NDU3IDEzNS0zNTYtMQorYWx3YXlzIFx1NTQ1OCA0NS0yCithbHdheXMgXHU1NDU5IDEyMy0yMzU2LTMKK2Fsd2F5cyBcdTU0NUEgMTIzNDU2LTQKK2Fsd2F5cyBcdTU0NUIgMjQ1LTQ2LTUKK2Fsd2F5cyBcdTU0NUMgMzQtMworYWx3YXlzIFx1NTQ1RCAyMzQ2LTUKK2Fsd2F5cyBcdTU0NUUgMjQtMTU2LTMKK2Fsd2F5cyBcdTU0NUYgMjQ1LTQ1LTQKK2Fsd2F5cyBcdTU0NjAgMTIzNC0xMzYtNAorYWx3YXlzIFx1NTQ2MSAxMjM0NTYtNAorYWx3YXlzIFx1NTQ2MiAxMzQ1LTIzNDYtMQorYWx3YXlzIFx1NTQ2MyAxMzQtMTIzNTYtMgorYWx3YXlzIFx1NTQ2NCAxNC0xMzQ1Ni01CithbHdheXMgXHU1NDY1IDEyNDUtMTIzNi0yCithbHdheXMgXHU1NDY2IDIzNC0zCithbHdheXMgXHU1NDY3IDE0NS0xNi00CithbHdheXMgXHU1NDY4IDEtMTIzNTYtMworYWx3YXlzIFx1NTQ2OSAyNC0xNTYtNQorYWx3YXlzIFx1NTQ2QSAxLTEyMzU2LTUKK2Fsd2F5cyBcdTU0NkIgMTI0LTM0Ni0zCithbHdheXMgXHU1NDZDIDE1LTE2LTUKK2Fsd2F5cyBcdTU0NkQgMTYtNQorYWx3YXlzIFx1NTQ2RSAyNDUtMTYtNQorYWx3YXlzIFx1NTQ2RiAxMjM0LTEzNDU2LTIKK2Fsd2F5cyBcdTU0NzAgMTI1LTE1Ni00CithbHdheXMgXHU1NDcxIDEzLTM1LTMKK2Fsd2F5cyBcdTU0NzIgMTI1LTE1Ni0zCithbHdheXMgXHU1NDczIDEyNDYtNQorYWx3YXlzIFx1NTQ3NCAxNS0xMjU2LTQKK2Fsd2F5cyBcdTU0NzUgMTIzNS0yMzQ2LTMKK2Fsd2F5cyBcdTU0NzYgMTM0NS0xNDYtMgorYWx3YXlzIFx1NTQ3NyAxNS0yMzQ1Ni0yCithbHdheXMgXHU1NDc4IDEyMzQtMzU2LTMKK2Fsd2F5cyBcdTU0NzkgMTYtNQorYWx3YXlzIFx1NTQ3QSAxNS0yNDYtMworYWx3YXlzIFx1NTQ3QiAyNC0xMzYtMworYWx3YXlzIFx1NTQ3QyAxMjM1LTM0LTMKK2Fsd2F5cyBcdTU0N0QgMTM0LTEzNDU2LTUKK2Fsd2F5cyBcdTU0N0UgMTQ1LTM0NS0yCithbHdheXMgXHU1NDdGIDI0NS0xMjU2LTMKK2Fsd2F5cyBcdTU0ODAgMTMtMTI1Ni00CithbHdheXMgXHU1NDgxIDEzLTEyMzYtMworYWx3YXlzIFx1NTQ4MiAxMjUtMzQ1LTMKK2Fsd2F5cyBcdTU0ODMgMTI0LTI1LTMKK2Fsd2F5cyBcdTU0ODQgMTQ1LTI1LTMKK2Fsd2F5cyBcdTU0ODUgMTIzNC0xMjM1Ni00CithbHdheXMgXHU1NDg2IDEyMzQtMTQ2LTIKK2Fsd2F5cyBcdTU0ODcgMTM1LTM0Ni0yCithbHdheXMgXHU1NDg4IDEyMzQ1LTM0LTIKK2Fsd2F5cyBcdTU0ODkgNDYtMworYWx3YXlzIFx1NTQ4QSAxMjM1LTIzNDYtMgorYWx3YXlzIFx1NTQ4QiAxMjUtMjM0Ni0yCithbHdheXMgXHU1NDhDIDEyMzUtMjM0Ni0yCithbHdheXMgXHU1NDhEIDEyMzUtMjQ1Ni0zCithbHdheXMgXHU1NDhFIDEzLTIzNC01CithbHdheXMgXHU1NDhGIDIzNS00CithbHdheXMgXHU1NDkwIDEyMzQ1LTM0LTUKK2Fsd2F5cyBcdTU0OTEgMTQ1LTM0NS0zCithbHdheXMgXHU1NDkyIDEtMTIzNTYtNQorYWx3YXlzIFx1NTQ5MyAzNS00CithbHdheXMgXHU1NDk0IDEyMy0zNDUtMworYWx3YXlzIFx1NTQ5NSAxMy0zNC0zCithbHdheXMgXHU1NDk2IDEyMy0zNDUtMworYWx3YXlzIFx1NTQ5NyAxMjUtMjUtNAorYWx3YXlzIFx1NTQ5OCAxMzUtMzQtNQorYWx3YXlzIFx1NTQ5OSAxNC0xMjM0Ni0yCithbHdheXMgXHU1NDlBIDE0NS0xMjM0Ni0zCithbHdheXMgXHU1NDlCIDEzNDUtMTM0NTYtMgorYWx3YXlzIFx1NTQ5QyAxMjMtMzQ1LTMKK2Fsd2F5cyBcdTU0OUQgMTUtMTU2LTMKK2Fsd2F5cyBcdTU0OUUgMTUtMjM0NS01CithbHdheXMgXHU1NDlGIDEyMzUtMjUtNQorYWx3YXlzIFx1NTRBMCAyNDUtMTYtMworYWx3YXlzIFx1NTRBMSAxNTYtNQorYWx3YXlzIFx1NTRBMiAyMzQ2LTUKK2Fsd2F5cyBcdTU0QTMgMTMtNDU2LTMKK2Fsd2F5cyBcdTU0QTQgMS0zNDUtNQorYWx3YXlzIFx1NTRBNSAxNS0xNi0zCithbHdheXMgXHU1NEE2IDE2LTIKK2Fsd2F5cyBcdTU0QTcgMTQtMzQ2LTQKK2Fsd2F5cyBcdTU0QTggMTI1LTE1Ni0zCithbHdheXMgXHU1NEE5IDEzNC0zNDYtMworYWx3YXlzIFx1NTRBQSAxMzQtMTYtMworYWx3YXlzIFx1NTRBQiAxLTE1Ni00CithbHdheXMgXHU1NEFDIDI0Ni00CithbHdheXMgXHU1NEFEIDEzLTE2LTMKK2Fsd2F5cyBcdTU0QUUgMS0xMjM1Ni01CithbHdheXMgXHU1NEFGIDEzLTIzNDYtMworYWx3YXlzIFx1NTRCMCAyNC0yMzU2LTUKK2Fsd2F5cyBcdTU0QjEgMTI1LTEyMzYtMgorYWx3YXlzIFx1NTRCMiAxNS0yNDYtNQorYWx3YXlzIFx1NTRCMyAxMjMtMjM0Ni0yCithbHdheXMgXHU1NEI0IDEyMzUtMTI0Ni0zCithbHdheXMgXHU1NEI1IDEyMy0zNS0zCithbHdheXMgXHU1NEI2IDEyMzUtMjM1Ni01CithbHdheXMgXHU1NEI3IDEyNC0xNDYtMgorYWx3YXlzIFx1NTRCOCAxNS0yMzQ1LTIKK2Fsd2F5cyBcdTU0QjkgMjM0Ni01CithbHdheXMgXHU1NEJBIDE1LTQ1LTQKK2Fsd2F5cyBcdTU0QkIgMTUtMjM0LTMKK2Fsd2F5cyBcdTU0QkMgMTIzLTIzNTYtMworYWx3YXlzIFx1NTRCRCAyMzQ1LTUKK2Fsd2F5cyBcdTU0QkUgMTQtMTQ2LTQKK2Fsd2F5cyBcdTU0QkYgMTYtMworYWx3YXlzIFx1NTRDMCAyNDU2LTMKK2Fsd2F5cyBcdTU0QzEgMTIzNC0xNDU2LTQKK2Fsd2F5cyBcdTU0QzIgMjQtMTM2LTQKK2Fsd2F5cyBcdTU0QzMgMTI0LTEyMzQ2LTIKK2Fsd2F5cyBcdTU0QzQgMTIzNS0xMjM0Ni00CithbHdheXMgXHU1NEM1IDE1LTIzNS0zCithbHdheXMgXHU1NEM2IDE0NS0yNS0zCithbHdheXMgXHU1NEM3IDM1LTMKK2Fsd2F5cyBcdTU0QzggMTIzNS0zNDUtMworYWx3YXlzIFx1NTRDOSAxMjUtMjQ1Ni0zCithbHdheXMgXHU1NENBIDEyNTYtNQorYWx3YXlzIFx1NTRDQiAxNDUtMTYtNQorYWx3YXlzIFx1NTRDQyAxMjM0LTI0NTYtNQorYWx3YXlzIFx1NTRDRCAxNS00Ni00CithbHdheXMgXHU1NENFIDI0NTYtMworYWx3YXlzIFx1NTRDRiAxMy0xMzYtMgorYWx3YXlzIFx1NTREMCAxMjMtNDU2LTMKK2Fsd2F5cyBcdTU0RDEgMjM0NTYtNAorYWx3YXlzIFx1NTREMiAxNDUtMzQ1LTMKK2Fsd2F5cyBcdTU0RDMgMTUtMjQ2LTMKK2Fsd2F5cyBcdTU0RDQgMTM1LTE2LTUKK2Fsd2F5cyBcdTU0RDUgMTIzNS0xMjQ2LTUKK2Fsd2F5cyBcdTU0RDYgMTM0NS0yMzQ1LTIKK2Fsd2F5cyBcdTU0RDcgMTIzNS0zNS0yCithbHdheXMgXHU1NEQ4IDE1LTEzNDU2LTIKK2Fsd2F5cyBcdTU0RDkgMTIzLTIzNTYtNQorYWx3YXlzIFx1NTREQSAxNDUtMjUtNAorYWx3YXlzIFx1NTREQiAxMjM0LTM0LTIKK2Fsd2F5cyBcdTU0REMgMTMtMTYtNQorYWx3YXlzIFx1NTRERCAxMzQ1LTEyMzQ2LTIKK2Fsd2F5cyBcdTU0REUgMTM0LTEyMzU2LTIKK2Fsd2F5cyBcdTU0REYgMzU2LTMKK2Fsd2F5cyBcdTU0RTAgMTIzNS0xNDYtNQorYWx3YXlzIFx1NTRFMSA0NS0yCithbHdheXMgXHU1NEUyIDE0LTEyMzQ2LTUKK2Fsd2F5cyBcdTU0RTMgMTIzNC0xMjM1Ni00CithbHdheXMgXHU1NEU0IDEzNC0xMzQ2LTIKK2Fsd2F5cyBcdTU0RTUgMTMtMjM0Ni0zCithbHdheXMgXHU1NEU2IDEyNi0yCithbHdheXMgXHU1NEU3IDEyLTE1Ni0zCithbHdheXMgXHU1NEU4IDI0LTE0Ni01CithbHdheXMgXHU1NEU5IDE0LTE2LTQKK2Fsd2F5cyBcdTU0RUEgMTM0NS0zNDUtNAorYWx3YXlzIFx1NTRFQiAxMjUtMzQtMgorYWx3YXlzIFx1NTRFQyAxMjM1LTIzNDYtMgorYWx3YXlzIFx1NTRFRCAxMjMtMzQtMworYWx3YXlzIFx1NTRFRSAxNS0yNDYtMworYWx3YXlzIFx1NTRFRiAxNS0yMzQ1LTUKK2Fsd2F5cyBcdTU0RjAgMTQtMTQ2LTIKK2Fsd2F5cyBcdTU0RjEgMTIzNC0xMjYtNQorYWx3YXlzIFx1NTRGMiAxLTIzNDYtMgorYWx3YXlzIFx1NTRGMyAxLTM0NS0zCithbHdheXMgXHU1NEY0IDE0LTQ2LTUKK2Fsd2F5cyBcdTU0RjUgMTM1LTM0NS0zCithbHdheXMgXHU1NEY2IDEzNC0zNDYtMworYWx3YXlzIFx1NTRGNyAxNC0yMzQ2LTUKK2Fsd2F5cyBcdTU0RjggMTUtMTI0Ni0zCithbHdheXMgXHU1NEY5IDEyMzQ1LTEyMzU2LTIKK2Fsd2F5cyBcdTU0RkEgMTM1LTM0LTQKK2Fsd2F5cyBcdTU0RkIgMTIzNS0xMjM2LTUKK2Fsd2F5cyBcdTU0RkMgMTIzNS0xMzU2LTMKK2Fsd2F5cyBcdTU0RkQgMTMtMTM1Ni00CithbHdheXMgXHU1NEZFIDI0LTI1LTMKK2Fsd2F5cyBcdTU0RkYgMTMtMjM0Ni00CithbHdheXMgXHU1NTAwIDIzNC00CithbHdheXMgXHU1NTAxIDIzNDUtNQorYWx3YXlzIFx1NTUwMiAxMy0zNC00CithbHdheXMgXHU1NTAzIDEzLTM0LTQKK2Fsd2F5cyBcdTU1MDQgMTM1LTM1Ni0xCithbHdheXMgXHU1NTA1IDEyMzUtMTIzNi0zCithbHdheXMgXHU1NTA2IDE1LTI1LTMKK2Fsd2F5cyBcdTU1MDcgMTItMTIzNDU2LTIKK2Fsd2F5cyBcdTU1MDggMTYtNQorYWx3YXlzIFx1NTUwOSAyNDU2LTMKK2Fsd2F5cyBcdTU1MEEgMTMtMjM0NTYtMgorYWx3YXlzIFx1NTUwQiAxMjQtMzQtMgorYWx3YXlzIFx1NTUwQyAxNS0yMzQ1LTIKK2Fsd2F5cyBcdTU1MEQgMTIzNS0xMjQ1Ni00CithbHdheXMgXHU1NTBFIDE0LTE2LTUKK2Fsd2F5cyBcdTU1MEYgMTUtMTYtMworYWx3YXlzIFx1NTUxMCAxMjQtMTM0Ni0yCithbHdheXMgXHU1NTExIDEyNS0yNS01CithbHdheXMgXHU1NTEyIDI0NS0yMzQtMgorYWx3YXlzIFx1NTUxMyAxMi0yMzQ2LTMKK2Fsd2F5cyBcdTU1MTQgMzQtMgorYWx3YXlzIFx1NTUxNSAxMjUtMTQ2LTUKK2Fsd2F5cyBcdTU1MTYgMjM0NTYtNAorYWx3YXlzIFx1NTUxNyAxNDUtMTIzNTYtMworYWx3YXlzIFx1NTUxOCAyNDUtMTYtNAorYWx3YXlzIFx1NTUxOSAxNDUtMTYtMgorYWx3YXlzIFx1NTUxQSAyNDUtMTQ1Ni01CithbHdheXMgXHU1NTFCIDEzNC0zNDUtNQorYWx3YXlzIFx1NTUxQyAxMzQtMzQ1LTIKK2Fsd2F5cyBcdTU1MUQgMTIzNS0xMjM0Ni00CithbHdheXMgXHU1NTFFIDE0NS0xMjM1Ni00CithbHdheXMgXHU1NTFGIDEyMzUtMjM0Ni0yCithbHdheXMgXHU1NTIwIDE0LTE0Ni0yCithbHdheXMgXHU1NTIxIDE0LTQ2LTQKK2Fsd2F5cyBcdTU1MjIgMTUtMjUtNAorYWx3YXlzIFx1NTUyMyAxMjUtMTQ2LTUKK2Fsd2F5cyBcdTU1MjQgMTIzNS0xMjQ1Ni01CithbHdheXMgXHU1NTI1IDE0LTEzNTYtMgorYWx3YXlzIFx1NTUyNiAyNC0zNDUtMworYWx3YXlzIFx1NTUyNyAxMy0xNi0zCithbHdheXMgXHU1NTI4IDEyNS0yNS00CithbHdheXMgXHU1NTI5IDI1LTMKK2Fsd2F5cyBcdTU1MkEgMTIzNDUtMTM1Ni00CithbHdheXMgXHU1NTJCIDE0NTYtMgorYWx3YXlzIFx1NTUyQyAxMjM1LTM0LTQKK2Fsd2F5cyBcdTU1MkQgMjQ1LTE2LTUKK2Fsd2F5cyBcdTU1MkUgMjQtMTIzNTYtNQorYWx3YXlzIFx1NTUyRiAxMjQ2LTIKK2Fsd2F5cyBcdTU1MzAgMjQtMzUtMworYWx3YXlzIFx1NTUzMSAxMi0xMzQ2LTUKK2Fsd2F5cyBcdTU1MzIgMTU2LTIKK2Fsd2F5cyBcdTU1MzMgMTQtMTYtNQorYWx3YXlzIFx1NTUzNCAyNDUtNDYtNQorYWx3YXlzIFx1NTUzNSAxMjM2LTQKK2Fsd2F5cyBcdTU1MzYgMTMtMzQ2LTUKK2Fsd2F5cyBcdTU1MzcgMzU2LTMKK2Fsd2F5cyBcdTU1MzggMTM0NS0yMzQ1LTUKK2Fsd2F5cyBcdTU1MzkgMTI1Ni0zCithbHdheXMgXHU1NTNBIDE1LTIzNDUtNQorYWx3YXlzIFx1NTUzQiAxNC0yNDU2LTUKK2Fsd2F5cyBcdTU1M0MgMjQtMzQ1LTUKK2Fsd2F5cyBcdTU1M0QgMTUtMTYtMworYWx3YXlzIFx1NTUzRSAxMjQtMjUtNQorYWx3YXlzIFx1NTUzRiAxMjM1LTM0LTMKK2Fsd2F5cyBcdTU1NDAgMjYtMgorYWx3YXlzIFx1NTU0MSAxLTEyMzU2LTMKK2Fsd2F5cyBcdTU1NDIgMTM0NS0xMjM1Ni00CithbHdheXMgXHU1NTQzIDEyMy0xMzYtNAorYWx3YXlzIFx1NTU0NCAxLTI1LTIKK2Fsd2F5cyBcdTU1NDUgMS0yNS0yCithbHdheXMgXHU1NTQ2IDI0LTEzNDYtMworYWx3YXlzIFx1NTU0NyAyNC0xNTYtNQorYWx3YXlzIFx1NTU0OCAxMjM1LTEzNTYtNQorYWx3YXlzIFx1NTU0OSAxMzQ1LTEzNDU2LTIKK2Fsd2F5cyBcdTU1NEEgMzQ1LTMKK2Fsd2F5cyBcdTU1NEIgMTUtMjQ2LTMKK2Fsd2F5cyBcdTU1NEMgMTUtNDYtMworYWx3YXlzIFx1NTU0RCAxMjQtMTIzNDU2LTMKK2Fsd2F5cyBcdTU1NEUgMzQtNAorYWx3YXlzIFx1NTU0RiAxMjM0NTYtNQorYWx3YXlzIFx1NTU1MCAyNDUtMTI0Ni01CithbHdheXMgXHU1NTUxIDI0LTM0NS01CithbHdheXMgXHU1NTUyIDEyMzUtMzQtMworYWx3YXlzIFx1NTU1MyAyNDUtMTYtNAorYWx3YXlzIFx1NTU1NCAyNDUtMTYtNAorYWx3YXlzIFx1NTU1NSAxMjQtMTQ2LTIKK2Fsd2F5cyBcdTU1NTYgMTQ1LTEyMzYtNQorYWx3YXlzIFx1NTU1NyAxNDUtMTIzNi01CithbHdheXMgXHU1NTU4IDM0Ni01CithbHdheXMgXHU1NTU5IDEyNS0xNTYtNAorYWx3YXlzIFx1NTU1QSAxMzUtMTYtNAorYWx3YXlzIFx1NTU1QiAyNDUtMTI0Ni01CithbHdheXMgXHU1NTVDIDEyLTI1LTUKK2Fsd2F5cyBcdTU1NUQgMTIzNS0yMzQ2LTIKK2Fsd2F5cyBcdTU1NUUgMjM0NTYtNAorYWx3YXlzIFx1NTU1RiAyNDUtMTYtNAorYWx3YXlzIFx1NTU2MCAxLTIzNDYtMgorYWx3YXlzIFx1NTU2MSAxMjM0NS0zNTYtMworYWx3YXlzIFx1NTU2MiAxNC00Ni00CithbHdheXMgXHU1NTYzIDE1LTIzNDUtMgorYWx3YXlzIFx1NTU2NCAxMjM0LTE2LTIKK2Fsd2F5cyBcdTU1NjUgMjQtMzQ1LTIKK2Fsd2F5cyBcdTU1NjYgMTQtMzQ1LTMKK2Fsd2F5cyBcdTU1NjcgMTI1LTIzNDYtMgorYWx3YXlzIFx1NTU2OCAyNDUtMTM0NTYtMworYWx3YXlzIFx1NTU2OSAxMy0zNS01CithbHdheXMgXHU1NTZBIDEyMzQtMzQ1LTMKK2Fsd2F5cyBcdTU1NkIgMS0yMzQ2LTQKK2Fsd2F5cyBcdTU1NkMgMTUtMjM0Ni01CithbHdheXMgXHU1NTZEIDEtMTI0NTYtNQorYWx3YXlzIFx1NTU2RSAxMzQ1LTM0Ni01CithbHdheXMgXHU1NTZGIDEzLTI1LTMKK2Fsd2F5cyBcdTU1NzAgMTQtMjUtMworYWx3YXlzIFx1NTU3MSAyMzQ1LTMKK2Fsd2F5cyBcdTU1NzIgMTQ1LTE2LTUKK2Fsd2F5cyBcdTU1NzMgMjQ1LTQ1LTIKK2Fsd2F5cyBcdTU1NzQgMTI0LTEyMzYtMworYWx3YXlzIFx1NTU3NSAxMzUtMTI2LTMKK2Fsd2F5cyBcdTU1NzYgMTQ1LTEzNDU2LTUKK2Fsd2F5cyBcdTU1NzcgMTQtMTM0Ni0zCithbHdheXMgXHU1NTc4IDE1LTI0Ni01CithbHdheXMgXHU1NTc5IDEzLTEyNTYtMgorYWx3YXlzIFx1NTU3QSAxMjQtMTM0Ni0yCithbHdheXMgXHU1NTdCIDEyLTE1Ni01CithbHdheXMgXHU1NTdDIDEyNC0xNi0yCithbHdheXMgXHU1NTdEIDEyMzYtMgorYWx3YXlzIFx1NTU3RSAxMy0yMzQtMworYWx3YXlzIFx1NTU3RiAxNDUtMTIzNi01CithbHdheXMgXHU1NTgwIDEyMy0zNDUtNQorYWx3YXlzIFx1NTU4MSAyMzUtMgorYWx3YXlzIFx1NTU4MiAxMjQ2LTUKK2Fsd2F5cyBcdTU1ODMgMTM0NS0xMjM2LTIKK2Fsd2F5cyBcdTU1ODQgMjQtMTIzNi01CithbHdheXMgXHU1NTg1IDEyNTYtNQorYWx3YXlzIFx1NTU4NiAxLTIzNDYtMgorYWx3YXlzIFx1NTU4NyAxNC0zNDUtNAorYWx3YXlzIFx1NTU4OCAxMy0zNDYtMworYWx3YXlzIFx1NTU4OSAxMjM1LTEyMzU2LTIKK2Fsd2F5cyBcdTU1OEEgMTIzNS0xMjM2LTQKK2Fsd2F5cyBcdTU1OEIgMTQ1LTM0Ni0yCithbHdheXMgXHU1NThDIDEtMTIzNTYtMworYWx3YXlzIFx1NTU4RCAxMi0yNDU2LTIKK2Fsd2F5cyBcdTU1OEUgMTIzLTIzNTYtMworYWx3YXlzIFx1NTU4RiAxMzQ1LTI1LTUKK2Fsd2F5cyBcdTU1OTAgMTI1Ni01CithbHdheXMgXHU1NTkxIDE0NTYtMworYWx3YXlzIFx1NTU5MiAxMjUtMTIzNi0yCithbHdheXMgXHU1NTkzIDI0Ni0zCithbHdheXMgXHU1NTk0IDEyNi0zCithbHdheXMgXHU1NTk1IDEzNC0yMzQ1LTQKK2Fsd2F5cyBcdTU1OTYgMTIzNS0zNC0yCithbHdheXMgXHU1NTk3IDI1Ni00CithbHdheXMgXHU1NTk4IDEyLTEyNDU2LTQKK2Fsd2F5cyBcdTU1OTkgMTIzNS0xMjQ2LTUKK2Fsd2F5cyBcdTU1OUEgMTIzNS0xMjQ1Ni01CithbHdheXMgXHU1NTlCIDEyMzUtMTI0NTYtNQorYWx3YXlzIFx1NTU5QyAxNS0xNi00CithbHdheXMgXHU1NTlEIDEyMzUtMjM0Ni0zCithbHdheXMgXHU1NTlFIDEzLTE2LTMKK2Fsd2F5cyBcdTU1OUYgMTIzLTEyNDYtNQorYWx3YXlzIFx1NTVBMCAxLTEyMzQ2LTQKK2Fsd2F5cyBcdTU1QTEgMTI0Ni00CithbHdheXMgXHU1NUEyIDI0LTM0NS01CithbHdheXMgXHU1NUEzIDE1LTEyNTYtNAorYWx3YXlzIFx1NTVBNCAxMjM1LTQ1Ni0yCithbHdheXMgXHU1NUE1IDE0NS0yNS0yCithbHdheXMgXHU1NUE2IDEzNDUtMzQ2LTUKK2Fsd2F5cyBcdTU1QTcgMTUtNDUtMworYWx3YXlzIFx1NTVBOCAxNC00Ni01CithbHdheXMgXHU1NUE5IDEyNTYtNQorYWx3YXlzIFx1NTVBQSAxNS0xMzQ2LTMKK2Fsd2F5cyBcdTU1QUIgMTItMTU2LTMKK2Fsd2F5cyBcdTU1QUMgMjQ1LTI0Ni0yCithbHdheXMgXHU1NUFEIDIzNDUtNQorYWx3YXlzIFx1NTVBRSAxNDUtMTIzNi0zCithbHdheXMgXHU1NUFGIDEyMzQtMTM2LTMKK2Fsd2F5cyBcdTU1QjAgMjQ1LTEyMzYtMworYWx3YXlzIFx1NTVCMSAxNC0xNi0yCithbHdheXMgXHU1NUIyIDI0Ni0zCithbHdheXMgXHU1NUIzIDEtMzQ1LTMKK2Fsd2F5cyBcdTU1QjQgMTI0Ni0zCithbHdheXMgXHU1NUI1IDEzNC0yNDYtMworYWx3YXlzIFx1NTVCNiAxMzQ1Ni0yCithbHdheXMgXHU1NUI3IDEyMzQtMTM2LTMKK2Fsd2F5cyBcdTU1QjggMTIzNS0yNS00CithbHdheXMgXHU1NUI5IDEyMy0xMjQ2LTIKK2Fsd2F5cyBcdTU1QkEgMTUtMTYtNQorYWx3YXlzIFx1NTVCQiAxMjU2LTUKK2Fsd2F5cyBcdTU1QkMgMTMtMzQ2LTIKK2Fsd2F5cyBcdTU1QkQgMTQtMTIzNTYtMgorYWx3YXlzIFx1NTVCRSAxMjMtMzQtNQorYWx3YXlzIFx1NTVCRiAxMjUtMTQ2LTUKK2Fsd2F5cyBcdTU1QzAgMTIzNS0yNS01CithbHdheXMgXHU1NUMxIDEyNC0xNi0yCithbHdheXMgXHU1NUMyIDI0Ni0yCithbHdheXMgXHU1NUMzIDEyMzUtMjM0Ni01CithbHdheXMgXHU1NUM0IDM0NS0yCithbHdheXMgXHU1NUM1IDE1LTIzNC01CithbHdheXMgXHU1NUM2IDI0NS00Ni01CithbHdheXMgXHU1NUM3IDE1LTIzNDYtNQorYWx3YXlzIFx1NTVDOCAyMzUtMworYWx3YXlzIFx1NTVDOSAxNS0zNC01CithbHdheXMgXHU1NUNBIDEyMzUtMTIzNDYtNAorYWx3YXlzIFx1NTVDQiAxNS0zNDYtMgorYWx3YXlzIFx1NTVDQyAxNi01CithbHdheXMgXHU1NUNEIDE1LTI1LTMKK2Fsd2F5cyBcdTU1Q0UgMTM0LTM0NS0xCithbHdheXMgXHU1NUNGIDEyLTM0NS0zCithbHdheXMgXHU1NUQwIDEyMzUtMjQ1Ni01CithbHdheXMgXHU1NUQxIDEyMy0yMzQ2LTUKK2Fsd2F5cyBcdTU1RDIgMTQ1LTM0NS0zCithbHdheXMgXHU1NUQzIDE1LTEzNDYtNAorYWx3YXlzIFx1NTVENCAxMi0xMzYtMworYWx3YXlzIFx1NTVENSAxMjQ1LTM0LTUKK2Fsd2F5cyBcdTU1RDYgMTUtMTIzNTYtMworYWx3YXlzIFx1NTVENyAzNS0zCithbHdheXMgXHU1NUQ4IDEzLTE2LTMKK2Fsd2F5cyBcdTU1RDkgMTIzNC0xMzQ2LTQKK2Fsd2F5cyBcdTU1REEgMzQtMworYWx3YXlzIFx1NTVEQiAxNS0yMzQ1LTIKK2Fsd2F5cyBcdTU1REMgMjQtMTU2LTUKK2Fsd2F5cyBcdTU1REQgMTMtMjM0Ni0yCithbHdheXMgXHU1NURFIDEyNS0xNTYtMworYWx3YXlzIFx1NTVERiAxMy0zNDYtMworYWx3YXlzIFx1NTVFMCAxNC0yNS01CithbHdheXMgXHU1NUUxIDEyMzQ2LTMKK2Fsd2F5cyBcdTU1RTIgMzUtNQorYWx3YXlzIFx1NTVFMyAxNS0xNTYtNQorYWx3YXlzIFx1NTVFNCAxMi0xNTYtMworYWx3YXlzIFx1NTVFNSAxMjM1LTE0Ni0yCithbHdheXMgXHU1NUU2IDE1LTI1LTMKK2Fsd2F5cyBcdTU1RTcgMTM4LTIzNDU2LTMtMTQ4LTEyMzQ1Ni0yCithbHdheXMgXHU1NUU4IDEyMzUtMjQ1Ni0zCithbHdheXMgXHU1NUU5IDE1LTI1LTQKK2Fsd2F5cyBcdTU1RUEgMjQ1LTE0NTYtMgorYWx3YXlzIFx1NTVFQiAxMzQ1LTM0Ni01CithbHdheXMgXHU1NUVDIDEyMzUtMjM0Ni0zCithbHdheXMgXHU1NUVEIDEyNS0xNTYtMworYWx3YXlzIFx1NTVFRSAxNS0yNDU2LTUKK2Fsd2F5cyBcdTU1RUYgMTM2LTQKK2Fsd2F5cyBcdTU1RjAgMTMtMjM0Ni00CithbHdheXMgXHU1NUYxIDEzNDUtMzQ1LTIKK2Fsd2F5cyBcdTU1RjIgMTQ1LTM0Ni0zCithbHdheXMgXHU1NUYzIDI0NTYtNQorYWx3YXlzIFx1NTVGNCAyNDUtNDYtMworYWx3YXlzIFx1NTVGNSAxMjQtMTIzNDYtMworYWx3YXlzIFx1NTVGNiAxMzUtMTYtNQorYWx3YXlzIFx1NTVGNyAxNDYtMgorYWx3YXlzIFx1NTVGOCAxNDYtMgorYWx3YXlzIFx1NTVGOSAxNC0yMzQ1LTIKK2Fsd2F5cyBcdTU1RkEgMTUtMTI0Ni0zCithbHdheXMgXHU1NUZCIDEtMjM0Ni01CithbHdheXMgXHU1NUZDIDEzNC0xMjYtNQorYWx3YXlzIFx1NTVGRCAxNS0xMjM1Ni01CithbHdheXMgXHU1NUZFIDE1LTEyMzU2LTQKK2Fsd2F5cyBcdTU1RkYgMTI0LTEyMzYtNAorYWx3YXlzIFx1NTYwMCAxNDUtMTYtMgorYWx3YXlzIFx1NTYwMSAyNDUtMTYtMworYWx3YXlzIFx1NTYwMiAxMy0yNDYtNQorYWx3YXlzIFx1NTYwMyAxMi0xMjM0Ni0zCithbHdheXMgXHU1NjA0IDEzLTI0Ni0zCithbHdheXMgXHU1NjA1IDEyMy0yNDU2LTUKK2Fsd2F5cyBcdTU2MDYgMTI0LTEyMzYtNQorYWx3YXlzIFx1NTYwNyAxNS0xMjM2LTMKK2Fsd2F5cyBcdTU2MDggMjQ1LTE0Ni0yCithbHdheXMgXHU1NjA5IDEzLTIzNDU2LTMKK2Fsd2F5cyBcdTU2MEEgMjYtMgorYWx3YXlzIFx1NTYwQiAxNS0yNDYtMworYWx3YXlzIFx1NTYwQyAxMjM0LTI0Ni01CithbHdheXMgXHU1NjBEIDE0LTEyMzU2LTIKK2Fsd2F5cyBcdTU2MEUgMTMtMzQ1LTMKK2Fsd2F5cyBcdTU2MEYgMTMtMzQtNAorYWx3YXlzIFx1NTYxMCAxNS0yNDYtMworYWx3YXlzIFx1NTYxMSAxMjM1LTM0LTMKK2Fsd2F5cyBcdTU2MTIgMTIzNS0xMjQ2LTUKK2Fsd2F5cyBcdTU2MTMgMTMtMjUtMworYWx3YXlzIFx1NTYxNCAxMjM1Ni00CithbHdheXMgXHU1NjE1IDE1LTIzNDUtMworYWx3YXlzIFx1NTYxNiAxMjUtMjM0Ni0yCithbHdheXMgXHU1NjE3IDEyLTEzNDYtMgorYWx3YXlzIFx1NTYxOCAxNS0xMjU2LTMKK2Fsd2F5cyBcdTU2MTkgMTIzNC0xMjYtMgorYWx3YXlzIFx1NTYxQSAxNDUtMjM0Ni0yCithbHdheXMgXHU1NjFCIDEzNC0zNDUtMQorYWx3YXlzIFx1NTYxQyAxMzQtMzQ1LTUKK2Fsd2F5cyBcdTU2MUQgMTIzNS0zNC0yCithbHdheXMgXHU1NjFFIDE0LTM1Ni0zCithbHdheXMgXHU1NjFGIDE0NS0zNC0zCithbHdheXMgXHU1NjIwIDEzLTM0NS0zCithbHdheXMgXHU1NjIxIDEyNC0xMzQ2LTMKK2Fsd2F5cyBcdTU2MjIgMzQ2LTQKK2Fsd2F5cyBcdTU2MjMgMTM1LTEzNTYtMworYWx3YXlzIFx1NTYyNCAxMzQ1Ni0zCithbHdheXMgXHU1NjI1IDE1LTI0NTYtMworYWx3YXlzIFx1NTYyNiAxMy0yNDYtNQorYWx3YXlzIFx1NTYyNyAxMzQtMTYtNQorYWx3YXlzIFx1NTYyOCAxNS0yNDYtNQorYWx3YXlzIFx1NTYyOSAxMjM1LTM1LTIKK2Fsd2F5cyBcdTU2MkEgMTM0LTI0NTYtNAorYWx3YXlzIFx1NTYyQiAxMjQ1LTEyMzYtMgorYWx3YXlzIFx1NTYyQyAxMjUtMjUtMworYWx3YXlzIFx1NTYyRCAxMjM0LTEzNTYtMworYWx3YXlzIFx1NTYyRSAxNC0xNDYtMgorYWx3YXlzIFx1NTYyRiAxNS0yNDYtNQorYWx3YXlzIFx1NTYzMCAxMy0xNi0zCithbHdheXMgXHU1NjMxIDEtMzQtNAorYWx3YXlzIFx1NTYzMiAxMi0xNDYtMgorYWx3YXlzIFx1NTYzMyAxMy0xMjQ2LTUKK2Fsd2F5cyBcdTU2MzQgMTI1LTEyNDYtNAorYWx3YXlzIFx1NTYzNSAxNS0yNDYtMworYWx3YXlzIFx1NTYzNiAxNS0xNTYtMworYWx3YXlzIFx1NTYzNyAxMjM1LTE0Ni0yCithbHdheXMgXHU1NjM4IDM0LTQKK2Fsd2F5cyBcdTU2MzkgMTQtMjQ2LTIKK2Fsd2F5cyBcdTU2M0EgMjQ1LTI0Ni0yCithbHdheXMgXHU1NjNCIDE1LTE2LTMKK2Fsd2F5cyBcdTU2M0MgMTUtMjM0LTUKK2Fsd2F5cyBcdTU2M0QgMTI0LTEyMzYtMworYWx3YXlzIFx1NTYzRSAxMjQtMTIzNi0yCithbHdheXMgXHU1NjNGIDEyMzUtMzU2LTMKK2Fsd2F5cyBcdTU2NDAgMTUtMjU2LTUKK2Fsd2F5cyBcdTU2NDEgMjM0Ni00CithbHdheXMgXHU1NjQyIDEyNS0xMjM0NTYtNAorYWx3YXlzIFx1NTY0MyAxMjM0NS0xMjM2LTMKK2Fsd2F5cyBcdTU2NDQgMTItMTU2LTMKK2Fsd2F5cyBcdTU2NDUgMTIzNS0xMjQ2LTMKK2Fsd2F5cyBcdTU2NDYgMjQ1LTEyMzYtNAorYWx3YXlzIFx1NTY0NyAxMi00NTYtMgorYWx3YXlzIFx1NTY0OCAyNDUtMzQtNQorYWx3YXlzIFx1NTY0OSAxNDUtMTIzNi01CithbHdheXMgXHU1NjRBIDEyNTYtNQorYWx3YXlzIFx1NTY0QiAxMjQtMTIzNDU2LTMKK2Fsd2F5cyBcdTU2NEMgMjQ1LTEzNTYtMworYWx3YXlzIFx1NTY0RCAxMy0yNDYtNQorYWx3YXlzIFx1NTY0RSAzNDYtMworYWx3YXlzIFx1NTY0RiAxNS0xNi0zCithbHdheXMgXHU1NjUwIDI0NS0xNi01CithbHdheXMgXHU1NjUxIDEyMzUtMTQ2LTIKK2Fsd2F5cyBcdTU2NTIgMTQtMjM0NS0yCithbHdheXMgXHU1NjUzIDE1LTEyNTYtMworYWx3YXlzIFx1NTY1NCAxNDUtMTM1Ni0zCithbHdheXMgXHU1NjU1IDEyMzUtMTI0Ni0zCithbHdheXMgXHU1NjU2IDE0NTYtMgorYWx3YXlzIFx1NTY1NyAxMjM0LTM0LTMKK2Fsd2F5cyBcdTU2NTggMTMtMjM2LTMKK2Fsd2F5cyBcdTU2NTkgMjQ1LTE0NTYtMgorYWx3YXlzIFx1NTY1QSAxNS0yNTYtMgorYWx3YXlzIFx1NTY1QiAxMzQ1LTM0Ni01CithbHdheXMgXHU1NjVDIDE0LTM0LTMKK2Fsd2F5cyBcdTU2NUQgMTUtMTU2LTMKK2Fsd2F5cyBcdTU2NUUgMjM0NS00CithbHdheXMgXHU1NjVGIDEzNDU2LTUKK2Fsd2F5cyBcdTU2NjAgMTQ1LTM0NS0yCithbHdheXMgXHU1NjYxIDEtMTIzNi0zCithbHdheXMgXHU1NjYyIDEyMzU2LTEKK2Fsd2F5cyBcdTU2NjMgMS0xMjM1Ni01CithbHdheXMgXHU1NjY0IDEzLTE0NTYtNQorYWx3YXlzIFx1NTY2NSAxMzQ1LTEyMzQ2LTIKK2Fsd2F5cyBcdTU2NjYgMTIzNS0xMjQ2LTUKK2Fsd2F5cyBcdTU2NjcgMTUtMzQ2LTUKK2Fsd2F5cyBcdTU2NjggMjQ1LTE2LTUKK2Fsd2F5cyBcdTU2NjkgMjM0Ni01CithbHdheXMgXHU1NjZBIDEyNS0xNDYtNQorYWx3YXlzIFx1NTY2QiAxNi0zCithbHdheXMgXHU1NjZDIDI0LTE1Ni01CithbHdheXMgXHU1NjZEIDEzLTI0Ni01CithbHdheXMgXHU1NjZFIDQ1LTUKK2Fsd2F5cyBcdTU2NkYgMjQ1Ni01CithbHdheXMgXHU1NjcwIDIzNS0zCithbHdheXMgXHU1NjcxIDE1LTIzNi0zCithbHdheXMgXHU1NjcyIDEyMy0yMzU2LTUKK2Fsd2F5cyBcdTU2NzMgMTI1Ni00CithbHdheXMgXHU1Njc0IDEyMzQtMTM2LTMKK2Fsd2F5cyBcdTU2NzUgMTQ1LTE0Ni01CithbHdheXMgXHU1Njc2IDEzLTM0NS0yCithbHdheXMgXHU1Njc3IDE1LTE0NTYtMworYWx3YXlzIFx1NTY3OCAxNDUtMTIzNDU2LTUKK2Fsd2F5cyBcdTU2NzkgMTQ1LTEzNDYtMworYWx3YXlzIFx1NTY3QSAxNS0xNDU2LTMKK2Fsd2F5cyBcdTU2N0IgMTUtMjQ1Ni0zCithbHdheXMgXHU1NjdDIDEyMzQtMTYtMworYWx3YXlzIFx1NTY3RCAxMjM0LTE2LTQKK2Fsd2F5cyBcdTU2N0UgMTQ1Ni0zCithbHdheXMgXHU1NjdGIDEyNS0xMjQ2LTQKK2Fsd2F5cyBcdTU2ODAgMTM0NS0xMzQ1Ni0yCithbHdheXMgXHU1NjgxIDE0NS0xNi0yCithbHdheXMgXHU1NjgyIDE0LTEyMzYtNQorYWx3YXlzIFx1NTY4MyAxMjQtMzQ1LTUKK2Fsd2F5cyBcdTU2ODQgMTIzNS0yNS01CithbHdheXMgXHU1Njg1IDEyNDUtMzQtMgorYWx3YXlzIFx1NTY4NiAxMjM1LTE0Ni0zCithbHdheXMgXHU1Njg3IDE1LTIzNDU2LTUKK2Fsd2F5cyBcdTU2ODggMjM0NTYtNQorYWx3YXlzIFx1NTY4OSAxNDUtMjUtMworYWx3YXlzIFx1NTY4QSAxNS0xNi01CithbHdheXMgXHU1NjhCIDEyLTEyMzU2LTIKK2Fsd2F5cyBcdTU2OEMgMTMtMTYtNQorYWx3YXlzIFx1NTY4RCAxMy0xNDU2LTUKK2Fsd2F5cyBcdTU2OEUgMTIzNS0xNDYtMgorYWx3YXlzIFx1NTY4RiAxMjQtMTYtNQorYWx3YXlzIFx1NTY5MCAxMi0xMzQ2LTIKK2Fsd2F5cyBcdTU2OTEgMTUtMjU2LTMKK2Fsd2F5cyBcdTU2OTIgMTM0LTIzNDYtMQorYWx3YXlzIFx1NTY5MyAyNDUtMzQ1LTMKK2Fsd2F5cyBcdTU2OTQgMTI0LTE2LTUKK2Fsd2F5cyBcdTU2OTUgMTQtMzQtMworYWx3YXlzIFx1NTY5NiAxMjM1LTEyNDYtNQorYWx3YXlzIFx1NTY5NyAxMzUtMTI2LTMKK2Fsd2F5cyBcdTU2OTggMjM0LTMKK2Fsd2F5cyBcdTU2OTkgMTM0NS0zNDYtNQorYWx3YXlzIFx1NTY5QSAxNDU2LTIKK2Fsd2F5cyBcdTU2OUIgMTIzNS0zNC01CithbHdheXMgXHU1NjlDIDEzNC0yMzQ2LTEKK2Fsd2F5cyBcdTU2OUQgMTIzNS00NTYtMworYWx3YXlzIFx1NTY5RSAxLTIzNDYtMgorYWx3YXlzIFx1NTY5RiAxNC0xNi0yCithbHdheXMgXHU1NkEwIDE0LTIzNC0yCithbHdheXMgXHU1NkExIDEyMzUtMjQ1Ni0zCithbHdheXMgXHU1NkEyIDEzNDUtMTM0Ni0yCithbHdheXMgXHU1NkEzIDE1LTI0Ni0zCithbHdheXMgXHU1NkE0IDEzNC0xMjYtMgorYWx3YXlzIFx1NTZBNSAyMzQ1LTUKK2Fsd2F5cyBcdTU2QTYgMTQtMTYtNQorYWx3YXlzIFx1NTZBNyAxNC0zNC0yCithbHdheXMgXHU1NkE4IDE0LTEyMzQ2LTIKK2Fsd2F5cyBcdTU2QTkgMTIzNDUtMzQtMgorYWx3YXlzIFx1NTZBQSAxNDUtMTIzNi01CithbHdheXMgXHU1NkFCIDEyLTEzNi01CithbHdheXMgXHU1NkFDIDEyMzQtMTQ1Ni0yCithbHdheXMgXHU1NkFEIDEyMzQtMTYtNAorYWx3YXlzIFx1NTZBRSAxNS00Ni01CithbHdheXMgXHU1NkFGIDEyMzUtMjUtNQorYWx3YXlzIFx1NTZCMCAxMzQtMTI2LTIKK2Fsd2F5cyBcdTU2QjEgMTUtMTYtNQorYWx3YXlzIFx1NTZCMiAxNDUtMjUtNAorYWx3YXlzIFx1NTZCMyAxMjMtMzQtNQorYWx3YXlzIFx1NTZCNCAyMzQ1LTIKK2Fsd2F5cyBcdTU2QjUgMTItMTIzNi0yCithbHdheXMgXHU1NkI2IDEzNDU2LTMKK2Fsd2F5cyBcdTU2QjcgMTI0NS0xMzQ2LTQKK2Fsd2F5cyBcdTU2QjggMTQ1LTIzNDUtNAorYWx3YXlzIFx1NTZCOSAxNC0zNDUtMworYWx3YXlzIFx1NTZCQSAxMjQtMzQ1LTUKK2Fsd2F5cyBcdTU2QkIgMTUtMjQ2LTMKK2Fsd2F5cyBcdTU2QkMgMTMtMjM2LTIKK2Fsd2F5cyBcdTU2QkQgMTItMjUtNQorYWx3YXlzIFx1NTZCRSAxMjM1LTEyNDU2LTMKK2Fsd2F5cyBcdTU2QkYgMTIzNS0yNS01CithbHdheXMgXHU1NkMwIDEtMTI0NTYtNAorYWx3YXlzIFx1NTZDMSAxMzQ1LTM0Ni01CithbHdheXMgXHU1NkMyIDE1LTI0Ni0zCithbHdheXMgXHU1NkMzIDI0NS0zNDUtNQorYWx3YXlzIFx1NTZDNCAxNC0xNi0yCithbHdheXMgXHU1NkM1IDEyLTEyMzYtNAorYWx3YXlzIFx1NTZDNiAxMi0yNDU2LTUKK2Fsd2F5cyBcdTU2QzcgMTQtMTYtNQorYWx3YXlzIFx1NTZDOCAxNi01CithbHdheXMgXHU1NkM5IDE0LTI1LTMKK2Fsd2F5cyBcdTU2Q0EgMTM0NS0xMzQ2LTIKK2Fsd2F5cyBcdTU2Q0IgMTI1LTEyMzYtNQorYWx3YXlzIFx1NTZDQyAxNS0zNC0zCithbHdheXMgXHU1NkNEIDE1LTE2LTQKK2Fsd2F5cyBcdTU2Q0UgMTIzNDUtMTM2LTUKK2Fsd2F5cyBcdTU2Q0YgMTMtMjM0NS0zCithbHdheXMgXHU1NkQwIDEyNS0zNDUtMgorYWx3YXlzIFx1NTZEMSAxLTM0LTQKK2Fsd2F5cyBcdTU2RDIgMTQtMTIzNi0yCithbHdheXMgXHU1NkQzIDEzNDUtMzQ2LTUKK2Fsd2F5cyBcdTU2RDQgMTM0NS0xMzQ2LTMKK2Fsd2F5cyBcdTU2RDUgMTQtMzQ1LTIKK2Fsd2F5cyBcdTU2RDYgMTQtMjUtMgorYWx3YXlzIFx1NTZENyAxMjQ2LTIKK2Fsd2F5cyBcdTU2RDggMTIzNS0xMjQ2LTIKK2Fsd2F5cyBcdTU2RDkgMTQ1Ni0zCithbHdheXMgXHU1NkRBIDI0NS0yMzQtMgorYWx3YXlzIFx1NTZEQiAxNS0xNTYtNQorYWx3YXlzIFx1NTZEQyAxMzQ1LTE0NTYtMgorYWx3YXlzIFx1NTZERCAxMy0yMzQ1LTQKK2Fsd2F5cyBcdTU2REUgMTIzNS0xMjQ2LTIKK2Fsd2F5cyBcdTU2REYgMTUtMTQ1Ni01CithbHdheXMgXHU1NkUwIDE0NTYtMworYWx3YXlzIFx1NTZFMSAxMzQ1LTEyMzYtMworYWx3YXlzIFx1NTZFMiAxMjQtMTI0NTYtMgorYWx3YXlzIFx1NTZFMyAxMjQtMTI0NTYtMgorYWx3YXlzIFx1NTZFNCAxMjQtMTIzNDU2LTIKK2Fsd2F5cyBcdTU2RTUgMTIzLTEzNDYtNQorYWx3YXlzIFx1NTZFNiA0NS0zCithbHdheXMgXHU1NkU3IDEzLTIzNS00CithbHdheXMgXHU1NkU4IDEyMzQtMjM0NS0zCithbHdheXMgXHU1NkU5IDI1Ni01CithbHdheXMgXHU1NkVBIDI0NS0xMjM0Ni0zCithbHdheXMgXHU1NkVCIDEyMzUtMzQtMgorYWx3YXlzIFx1NTZFQyAxMjM1LTEyNDYtMgorYWx3YXlzIFx1NTZFRCA0NS0yCithbHdheXMgXHU1NkVFIDIzNDYtMgorYWx3YXlzIFx1NTZFRiAxMy0yNS0yCithbHdheXMgXHU1NkYwIDEyMy0xMjM0NTYtNQorYWx3YXlzIFx1NTZGMSAyNDUtMTIzNDYtMworYWx3YXlzIFx1NTZGMiAxMjQ2LTIKK2Fsd2F5cyBcdTU2RjMgMTI0LTM0LTIKK2Fsd2F5cyBcdTU2RjQgMTI0Ni0yCithbHdheXMgXHU1NkY1IDE0LTEyMzQ1Ni0yCithbHdheXMgXHU1NkY2IDEzLTI1LTIKK2Fsd2F5cyBcdTU2RjcgMTMtMjU2LTMKK2Fsd2F5cyBcdTU2RjggMTI0NS0xNTYtNQorYWx3YXlzIFx1NTZGOSAxNC0xMzQ1Ni0yCithbHdheXMgXHU1NkZBIDEzLTM0LTUKK2Fsd2F5cyBcdTU2RkIgMTMtMjUtMgorYWx3YXlzIFx1NTZGQyAxMjQtMjQ1Ni0zCithbHdheXMgXHU1NkZEIDEzLTI1LTIKK2Fsd2F5cyBcdTU2RkUgMTI0LTM0LTIKK2Fsd2F5cyBcdTU2RkYgMjM0LTUKK2Fsd2F5cyBcdTU3MDAgMTMtMjUtMgorYWx3YXlzIFx1NTcwMSAxNDU2LTIKK2Fsd2F5cyBcdTU3MDIgMTIzNS0xMjM0NTYtNQorYWx3YXlzIFx1NTcwMyAxMjM0LTM0LTQKK2Fsd2F5cyBcdTU3MDQgMTI1Ni00CithbHdheXMgXHU1NzA1IDEyMzUtMTIzNi0yCithbHdheXMgXHU1NzA2IDQ1LTIKK2Fsd2F5cyBcdTU3MDcgMTQtMTIzNDU2LTIKK2Fsd2F5cyBcdTU3MDggMjQ1LTQ1LTMKK2Fsd2F5cyBcdTU3MDkgMTI1Ni00CithbHdheXMgXHU1NzBBIDI0NS0xMzQ1Ni0zCithbHdheXMgXHU1NzBCIDEzLTI1LTIKK2Fsd2F5cyBcdTU3MEMgMTItMTI0Ni0yCithbHdheXMgXHU1NzBEIDEyNDYtMgorYWx3YXlzIFx1NTcwRSA0NS0yCithbHdheXMgXHU1NzBGIDI0NS00NS0zCithbHdheXMgXHU1NzEwIDEyMy0zNC0zCithbHdheXMgXHU1NzExIDEyMzQ1LTM0LTUKK2Fsd2F5cyBcdTU3MTIgNDUtMgorYWx3YXlzIFx1NTcxMyA0NS0yCithbHdheXMgXHU1NzE0IDIzNDYtNQorYWx3YXlzIFx1NTcxNSAxMjMtMTI0NTYtNAorYWx3YXlzIFx1NTcxNiAxMjQtMzQtMgorYWx3YXlzIFx1NTcxNyAxMjQtMzQtMgorYWx3YXlzIFx1NTcxOCAxMjQtMTI0NTYtMgorYWx3YXlzIFx1NTcxOSAxNC0yMzYtNQorYWx3YXlzIFx1NTcxQSAxMjM1LTEyNDYtNQorYWx3YXlzIFx1NTcxQiAxNi01CithbHdheXMgXHU1NzFDIDEyMzUtMTI0NTYtMgorYWx3YXlzIFx1NTcxRCAxNC0xMjQ1Ni0yCithbHdheXMgXHU1NzFFIDE0LTEyNDU2LTIKK2Fsd2F5cyBcdTU3MUYgMTI0LTM0LTQKK2Fsd2F5cyBcdTU3MjAgMjM0NTYtNQorYWx3YXlzIFx1NTcyMSAxMjQtMzQtNAorYWx3YXlzIFx1NTcyMiAxMjQtMTM0NTYtNAorYWx3YXlzIFx1NTcyMyAyNC0xMzU2LTUKK2Fsd2F5cyBcdTU3MjQgMTIzNC0zNC0yCithbHdheXMgXHU1NzI1IDE0LTM0LTUKK2Fsd2F5cyBcdTU3MjYgMTIzLTIzNTYtNQorYWx3YXlzIFx1NTcyNyAyMzQ1Ni0zCithbHdheXMgXHU1NzI4IDEyNS0yNDU2LTUKK2Fsd2F5cyBcdTU3MjkgMTUtMTI1Ni0zCithbHdheXMgXHU1NzJBIDEzLTIzNDYtMworYWx3YXlzIFx1NTcyQiAxMjU2LTUKK2Fsd2F5cyBcdTU3MkMgMzQtMworYWx3YXlzIFx1NTcyRCAxMy0xMjQ2LTMKK2Fsd2F5cyBcdTU3MkUgMTIzNC0xNi00CithbHdheXMgXHU1NzJGIDE2LTIKK2Fsd2F5cyBcdTU3MzAgMTQ1LTE2LTUKK2Fsd2F5cyBcdTU3MzEgMjQ1LTIzNDUtMworYWx3YXlzIFx1NTczMiAyNDUtMjM0NS0zCithbHdheXMgXHU1NzMzIDEyNS0xMjM0NTYtNQorYWx3YXlzIFx1NTczNCAxLTI1LTIKK2Fsd2F5cyBcdTU3MzUgMTQ1LTEzNDYtNQorYWx3YXlzIFx1NTczNiAyNDUtMjM0NTYtNQorYWx3YXlzIFx1NTczNyAxNS00Ni01CithbHdheXMgXHU1NzM4IDI0LTEyMzYtMworYWx3YXlzIFx1NTczOSAxMjMtNDU2LTUKK2Fsd2F5cyBcdTU3M0EgMTItMTM0Ni00CithbHdheXMgXHU1NzNCIDI0NS0xNi0yCithbHdheXMgXHU1NzNDIDEzNDUtMzQ2LTUKK2Fsd2F5cyBcdTU3M0QgMTM0LTEyNi01CithbHdheXMgXHU1NzNFIDE1LTIzNDYtNQorYWx3YXlzIFx1NTczRiAxMy0yMzQ1Ni0yCithbHdheXMgXHU1NzQwIDEtMTU2LTQKK2Fsd2F5cyBcdTU3NDEgMS0xNTYtNAorYWx3YXlzIFx1NTc0MiAxMzUtMTIzNi00CithbHdheXMgXHU1NzQzIDE1LTI1Ni0zCithbHdheXMgXHU1NzQ0IDEyNC0xMjM1Ni0yCithbHdheXMgXHU1NzQ1IDI0NS0xNDU2LTQKK2Fsd2F5cyBcdTU3NDYgMTM0LTM1Ni0yCithbHdheXMgXHU1NzQ3IDEzLTI1Ni0zCithbHdheXMgXHU1NzQ4IDEyMy0xMzU2LTMKK2Fsd2F5cyBcdTU3NDkgMTI0LTEyMzQ1Ni0yCithbHdheXMgXHU1NzRBIDEyMzQ1LTEzNDYtMworYWx3YXlzIFx1NTc0QiAxMjM0NS0xMzYtNQorYWx3YXlzIFx1NTc0QyAxMzUtMTM2LTUKK2Fsd2F5cyBcdTU3NEQgMTI0LTEyMzYtMworYWx3YXlzIFx1NTc0RSAxMjMtMTIzNi00CithbHdheXMgXHU1NzRGIDEyMzUtMjM1Ni01CithbHdheXMgXHU1NzUwIDEyNS0yNS01CithbHdheXMgXHU1NzUxIDEyMy0xMzU2LTMKK2Fsd2F5cyBcdTU3NTIgMTM1LTE2LTUKK2Fsd2F5cyBcdTU3NTMgMTUtMTM0NTYtMgorYWx3YXlzIFx1NTc1NCAxNDUtMTYtNQorYWx3YXlzIFx1NTc1NSAxMy0xMzQ1Ni0zCithbHdheXMgXHU1NzU2IDEzLTE2LTUKK2Fsd2F5cyBcdTU3NTcgMTIzLTIzNTYtNQorYWx3YXlzIFx1NTc1OCAxNDUtMTYtNAorYWx3YXlzIFx1NTc1OSAxMy0xMzQ1Ni0zCithbHdheXMgXHU1NzVBIDEzLTIzNDUtMworYWx3YXlzIFx1NTc1QiAxMjQtMTIzNi0yCithbHdheXMgXHU1NzVDIDE0LTE2LTUKK2Fsd2F5cyBcdTU3NUQgMTM1LTM0NS01CithbHdheXMgXHU1NzVFIDM0LTUKK2Fsd2F5cyBcdTU3NUYgMTIzNDUtMTM2LTIKK2Fsd2F5cyBcdTU3NjAgMS0xMjQ2LTUKK2Fsd2F5cyBcdTU3NjEgMTIzNC0xMjYtMworYWx3YXlzIFx1NTc2MiAxMjM0LTEyMzYtNAorYWx3YXlzIFx1NTc2MyAxMjQtMTM0Ni0yCithbHdheXMgXHU1NzY0IDEyMy0xMjM0NTYtMworYWx3YXlzIFx1NTc2NSAyNDUtMTI1Ni0zCithbHdheXMgXHU1NzY2IDEyNC0xMjM2LTQKK2Fsd2F5cyBcdTU3NjcgMS0xNTYtMworYWx3YXlzIFx1NTc2OCAxMjQtMjUtMgorYWx3YXlzIFx1NTc2OSAxMy0xMjM2LTMKK2Fsd2F5cyBcdTU3NkEgMTIzNC0xMzQ1Ni0yCithbHdheXMgXHU1NzZCIDE0NS0yMzQ1LTUKK2Fsd2F5cyBcdTU3NkMgMTMtMzUtNQorYWx3YXlzIFx1NTc2RCAxMzQ1LTE2LTIKK2Fsd2F5cyBcdTU3NkUgMTI0LTI0NTYtMgorYWx3YXlzIFx1NTc2RiAxMjM0LTM1Ni0zCithbHdheXMgXHU1NzcwIDEzLTIzNS0zCithbHdheXMgXHU1NzcxIDQ2LTQKK2Fsd2F5cyBcdTU3NzIgMTIzNDUtMTI2LTIKK2Fsd2F5cyBcdTU3NzMgMTQ2LTMKK2Fsd2F5cyBcdTU3NzQgMTQtMzQtNQorYWx3YXlzIFx1NTc3NSAyNDUtMjM0LTMKK2Fsd2F5cyBcdTU3NzYgMTM0LTM0LTUKK2Fsd2F5cyBcdTU3NzcgMTIzLTIzNDYtNAorYWx3YXlzIFx1NTc3OCAxMy0xMjM1Ni01CithbHdheXMgXHU1Nzc5IDE1LTIzNi01CithbHdheXMgXHU1NzdBIDEzNS0zNDUtMgorYWx3YXlzIFx1NTc3QiAxMi0xNTYtMgorYWx3YXlzIFx1NTc3QyAxMi0yMzQ2LTUKK2Fsd2F5cyBcdTU3N0QgMTQtMTM0NTYtMgorYWx3YXlzIFx1NTc3RSAxLTM0LTUKK2Fsd2F5cyBcdTU3N0YgMTIzNDUtMzQtNQorYWx3YXlzIFx1NTc4MCAxMjM1LTM0LTMKK2Fsd2F5cyBcdTU3ODEgMS0xNTYtNQorYWx3YXlzIFx1NTc4MiAxMi0xMjQ2LTIKK2Fsd2F5cyBcdTU3ODMgMTQtMjM0Ni01CithbHdheXMgXHU1Nzg0IDE0LTEyMzQ2LTQKK2Fsd2F5cyBcdTU3ODUgMTQtMTIzNDYtNAorYWx3YXlzIFx1NTc4NiAxNC0zNC0yCithbHdheXMgXHU1Nzg3IDE0Ni0zCithbHdheXMgXHU1Nzg4IDE0NS0yNDU2LTUKK2Fsd2F5cyBcdTU3ODkgMTIzNC0xNDYtMgorYWx3YXlzIFx1NTc4QSAxMzQ1LTE0NTYtMgorYWx3YXlzIFx1NTc4QiAxNS0xMzQ1Ni0yCithbHdheXMgXHU1NzhDIDEyNC0xMjM0Ni01CithbHdheXMgXHU1NzhEIDEzLTE2LTUKK2Fsd2F5cyBcdTU3OEUgMTIzLTIzNDYtNQorYWx3YXlzIFx1NTc4RiAxNC0zNC01CithbHdheXMgXHU1NzkwIDI0NS0xNTYtMgorYWx3YXlzIFx1NTc5MSAxMi0xNTYtNAorYWx3YXlzIFx1NTc5MiAxNC0zNTYtNAorYWx3YXlzIFx1NTc5MyAxMy0yNDU2LTMKK2Fsd2F5cyBcdTU3OTQgMTQ1Ni0zCithbHdheXMgXHU1Nzk1IDEyMzUtMTIzNTYtNQorYWx3YXlzIFx1NTc5NiAxNDUtMTI0Ni0zCithbHdheXMgXHU1Nzk3IDEtMTQ2LTUKK2Fsd2F5cyBcdTU3OTggMTIzNDUtMzQtMgorYWx3YXlzIFx1NTc5OSAxMy00NTYtMworYWx3YXlzIFx1NTc5QSAyNDYtMgorYWx3YXlzIFx1NTc5QiAxNDUtMjUtNQorYWx3YXlzIFx1NTc5QyAxNDUtMjUtNAorYWx3YXlzIFx1NTc5RCAxMy0xMjQ2LTQKK2Fsd2F5cyBcdTU3OUUgMTItMzQ1LTIKK2Fsd2F5cyBcdTU3OUYgNDYtMgorYWx3YXlzIFx1NTdBMCAxNDU2LTIKK2Fsd2F5cyBcdTU3QTEgMTIzNDUtMzQ1LTIKK2Fsd2F5cyBcdTU3QTIgMTMtMTIzNTYtNQorYWx3YXlzIFx1NTdBMyA0NS0yCithbHdheXMgXHU1N0E0IDE0NS0zNDYtMgorYWx3YXlzIFx1NTdBNSAxNS0zNDYtMgorYWx3YXlzIFx1NTdBNiAxMjMtMTM2LTQKK2Fsd2F5cyBcdTU3QTcgMjQtMTM0Ni00CithbHdheXMgXHU1N0E4IDI0LTEyMzU2LTQKK2Fsd2F5cyBcdTU3QTkgMjM0Ni01CithbHdheXMgXHU1N0FBIDEzNS0xNDU2LTUKK2Fsd2F5cyBcdTU3QUIgMTQ1LTIzNDUtNQorYWx3YXlzIFx1NTdBQyAxMjM1LTEyMzQ2LTIKK2Fsd2F5cyBcdTU3QUQgMjM0NTYtNQorYWx3YXlzIFx1NTdBRSAxMjMtMzUtNAorYWx3YXlzIFx1NTdBRiAxNDUtMzQ1LTMKK2Fsd2F5cyBcdTU3QjAgMTI0LTM0NS00CithbHdheXMgXHU1N0IxIDE0NS0xMzQ2LTUKK2Fsd2F5cyBcdTU3QjIgMTIzLTI0NTYtNAorYWx3YXlzIFx1NTdCMyAxMjM0LTEzNDYtMgorYWx3YXlzIFx1NTdCNCAxMzQ1LTE0Ni00CithbHdheXMgXHU1N0I1IDEyMzYtMworYWx3YXlzIFx1NTdCNiAxNS0xMzQ1Ni0zCithbHdheXMgXHU1N0I3IDE1LTIzNDUtNQorYWx3YXlzIFx1NTdCOCAxMjM1LTEyNDU2LTIKK2Fsd2F5cyBcdTU3QjkgMTM1LTEzNDYtMworYWx3YXlzIFx1NTdCQSAxMjM0NS0zNC0yCithbHdheXMgXHU1N0JCIDEzNS0zNDUtNQorYWx3YXlzIFx1NTdCQyAxNi01CithbHdheXMgXHU1N0JEIDE0NTYtNQorYWx3YXlzIFx1NTdCRSAxMjM2LTUKK2Fsd2F5cyBcdTU3QkYgMTUtMTI1Ni01CithbHdheXMgXHU1N0MwIDEyLTEyNDYtMgorYWx3YXlzIFx1NTdDMSAyNDUtMTM2LTIKK2Fsd2F5cyBcdTU3QzIgMTMtMTM1Ni00CithbHdheXMgXHU1N0MzIDI0NTYtMworYWx3YXlzIFx1NTdDNCAxMjM0NS0xMzU2LTMKK2Fsd2F5cyBcdTU3QzUgMTIzNDUtMTM0Ni0yCithbHdheXMgXHU1N0M2IDI0NS0yMzYtNQorYWx3YXlzIFx1NTdDNyAyMzUtNAorYWx3YXlzIFx1NTdDOCAxMy0yNTYtNQorYWx3YXlzIFx1NTdDOSAxMy0yMzQ1Ni0yCithbHdheXMgXHU1N0NBIDE0NS0xNi01CithbHdheXMgXHU1N0NCIDEzNC0yNDU2LTIKK2Fsd2F5cyBcdTU3Q0MgMTQtMTM0Ni01CithbHdheXMgXHU1N0NEIDE1LTQ1LTUKK2Fsd2F5cyBcdTU3Q0UgMTItMTM1Ni0yCithbHdheXMgXHU1N0NGIDIzNDUtMgorYWx3YXlzIFx1NTdEMCAxMy0xNDU2LTMKK2Fsd2F5cyBcdTU3RDEgMS0yMzQ2LTIKK2Fsd2F5cyBcdTU3RDIgMTQtMzQ2LTUKK2Fsd2F5cyBcdTU3RDMgMTQtMzQ2LTUKK2Fsd2F5cyBcdTU3RDQgMTIzNC0zNC00CithbHdheXMgXHU1N0Q1IDEyLTEzNTYtMgorYWx3YXlzIFx1NTdENiAxMjM0NS0zNDUtMworYWx3YXlzIFx1NTdENyAxMzUtMzQtNQorYWx3YXlzIFx1NTdEOCAyNC0xNTYtMgorYWx3YXlzIFx1NTdEOSAxNS0yNTYtMworYWx3YXlzIFx1NTdEQSAxMy0yNS0zCithbHdheXMgXHU1N0RCIDEzLTIzNS0zCithbHdheXMgXHU1N0RDIDM0Ni00CithbHdheXMgXHU1N0REIDEzNDUtMjM0NS01CithbHdheXMgXHU1N0RFIDE0NS0xNi00CithbHdheXMgXHU1N0RGIDEyNTYtNQorYWx3YXlzIFx1NTdFMCAxMzUtMzQtNQorYWx3YXlzIFx1NTdFMSAyMzQ1Ni01CithbHdheXMgXHU1N0UyIDEzLTQ1LTQKK2Fsd2F5cyBcdTU3RTMgMTUtMTI0Ni01CithbHdheXMgXHU1N0U0IDEyMzQtMTYtMgorYWx3YXlzIFx1NTdFNSAxMi0xMzU2LTMKK2Fsd2F5cyBcdTU3RTYgMTI0NTYtNAorYWx3YXlzIFx1NTdFNyAxMy0xMjU2LTUKK2Fsd2F5cyBcdTU3RTggMTQtMTIzNDU2LTIKK2Fsd2F5cyBcdTU3RTkgMS0xMzU2LTMKK2Fsd2F5cyBcdTU3RUEgMTIzLTEyMzQ2LTMKK2Fsd2F5cyBcdTU3RUIgMTItMTIzNDYtNAorYWx3YXlzIFx1NTdFQyAxNDUtMTIzNDYtMworYWx3YXlzIFx1NTdFRCAxNDUtMjQ1Ni01CithbHdheXMgXHU1N0VFIDEyNC0xMjM2LTUKK2Fsd2F5cyBcdTU3RUYgMTIzNi00CithbHdheXMgXHU1N0YwIDI0NS0yNDU2LTUKK2Fsd2F5cyBcdTU3RjEgMjQtMzQtMgorYWx3YXlzIFx1NTdGMiAxMzUtMTM1Ni00CithbHdheXMgXHU1N0YzIDEyMy0xMjM2LTQKK2Fsd2F5cyBcdTU3RjQgMS0xNTYtMgorYWx3YXlzIFx1NTdGNSAxNDUtMjUtNAorYWx3YXlzIFx1NTdGNiAxNi01CithbHdheXMgXHU1N0Y3IDEtMTU2LTIKK2Fsd2F5cyBcdTU3RjggMTYtNQorYWx3YXlzIFx1NTdGOSAxMjM0LTM1Ni0yCithbHdheXMgXHU1N0ZBIDEzLTE2LTMKK2Fsd2F5cyBcdTU3RkIgMS0xMjM0NTYtNAorYWx3YXlzIFx1NTdGQyAyNDUtMTYtMgorYWx3YXlzIFx1NTdGRCAxNS0xNDYtNQorYWx3YXlzIFx1NTdGRSAxMy0xMjU2LTUKK2Fsd2F5cyBcdTU3RkYgMTM0NS0xNi0yCithbHdheXMgXHU1ODAwIDEyMy0zNC0zCithbHdheXMgXHU1ODAxIDEyMy0yMzQ2LTQKK2Fsd2F5cyBcdTU4MDIgMTI0LTEzNDYtMgorYWx3YXlzIFx1NTgwMyAxMjMtMTIzNDU2LTMKK2Fsd2F5cyBcdTU4MDQgMTM0NS0xNi0yCithbHdheXMgXHU1ODA1IDEzLTIzNDUtMworYWx3YXlzIFx1NTgwNiAxNDUtMTI0Ni0zCithbHdheXMgXHU1ODA3IDEzLTE0NTYtNAorYWx3YXlzIFx1NTgwOCAxMy0xMzQ2LTMKK2Fsd2F5cyBcdTU4MDkgMTI1Ni01CithbHdheXMgXHU1ODBBIDIzNDYtNQorYWx3YXlzIFx1NTgwQiAxMjM0LTEzNTYtMgorYWx3YXlzIFx1NTgwQyAxMy0zNC01CithbHdheXMgXHU1ODBEIDEyNC0zNC01CithbHdheXMgXHU1ODBFIDE0LTEzNDU2LTIKK2Fsd2F5cyBcdTU4MEYgMTIzNDUtMTM0Ni0zCithbHdheXMgXHU1ODEwIDI0NTYtMgorYWx3YXlzIFx1NTgxMSAyNDUtMjM0NS01CithbHdheXMgXHU1ODEyIDEyMy0xMjM0NTYtMworYWx3YXlzIFx1NTgxMyAxMjM2LTUKK2Fsd2F5cyBcdTU4MTQgMTItMTM2LTMKK2Fsd2F5cyBcdTU4MTUgMTQ1LTI1LTUKK2Fsd2F5cyBcdTU4MTYgMTM0NS0xNDYtNAorYWx3YXlzIFx1NTgxNyAxMjQtMzQtMworYWx3YXlzIFx1NTgxOCAxMi0xMzU2LTIKK2Fsd2F5cyBcdTU4MTkgMTQ1Ni0zCithbHdheXMgXHU1ODFBIDEyMzUtMTIzNDU2LTIKK2Fsd2F5cyBcdTU4MUIgMTM1LTE2LTUKK2Fsd2F5cyBcdTU4MUMgMTQtMjM0NS01CithbHdheXMgXHU1ODFEIDEzLTI1LTMKK2Fsd2F5cyBcdTU4MUUgMTQ1LTM0Ni0yCithbHdheXMgXHU1ODFGIDEtMTI0NTYtNQorYWx3YXlzIFx1NTgyMCAxMjM1LTEyMzU2LTUKK2Fsd2F5cyBcdTU4MjEgMTM1LTE0Ni00CithbHdheXMgXHU1ODIyIDEzNS0xNDYtNAorYWx3YXlzIFx1NTgyMyAxMjU2LTIKK2Fsd2F5cyBcdTU4MjQgMTI0LTE2LTIKK2Fsd2F5cyBcdTU4MjUgMTM0LTEyMzU2LTIKK2Fsd2F5cyBcdTU4MjYgMTMtMzQ2LTMKK2Fsd2F5cyBcdTU4MjcgMTI0NS0xMjQ1Ni0yCithbHdheXMgXHU1ODI4IDM0Ni01CithbHdheXMgXHU1ODI5IDEzLTEzNTYtNQorYWx3YXlzIFx1NTgyQSAxMjMtMTIzNi0zCithbHdheXMgXHU1ODJCIDEyNS0xMjM0Ni0zCithbHdheXMgXHU1ODJDIDEyNTYtMgorYWx3YXlzIFx1NTgyRCAxMjM1LTQ1Ni0yCithbHdheXMgXHU1ODJFIDIzNDYtNQorYWx3YXlzIFx1NTgyRiAyNDYtMgorYWx3YXlzIFx1NTgzMCAyMzQ1LTUKK2Fsd2F5cyBcdTU4MzEgMTM1LTE0Ni01CithbHdheXMgXHU1ODMyIDEzLTE2LTIKK2Fsd2F5cyBcdTU4MzMgMTM0LTM1Ni0yCithbHdheXMgXHU1ODM0IDEyLTEzNDYtNAorYWx3YXlzIFx1NTgzNSAxNDUtMzQtNAorYWx3YXlzIFx1NTgzNiAxMjQtMjUtMgorYWx3YXlzIFx1NTgzNyAxNDU2LTUKK2Fsd2F5cyBcdTU4MzggMTIzNDUtMTM1Ni0yCithbHdheXMgXHU1ODM5IDEtMTIzNDYtNQorYWx3YXlzIFx1NTgzQSAxMy0zNDYtNQorYWx3YXlzIFx1NTgzQiAxLTEzNi0zCithbHdheXMgXHU1ODNDIDEyMzQ1LTEzNTYtMworYWx3YXlzIFx1NTgzRCAxMy0xMzQ2LTMKK2Fsd2F5cyBcdTU4M0UgMTItMTI0NTYtNAorYWx3YXlzIFx1NTgzRiAxMy0yMzQ1LTQKK2Fsd2F5cyBcdTU4NDAgMTIzNC0xMzQ1Ni0yCithbHdheXMgXHU1ODQxIDE0LTM1Ni00CithbHdheXMgXHU1ODQyIDE1LTQ2LTUKK2Fsd2F5cyBcdTU4NDMgMTIzNS00NTYtMworYWx3YXlzIFx1NTg0NCAxNC0xMzU2LTIKK2Fsd2F5cyBcdTU4NDUgMTQ1LTEyNDU2LTUKK2Fsd2F5cyBcdTU4NDYgMTI0NTYtMworYWx3YXlzIFx1NTg0NyAxNS00NS0zCithbHdheXMgXHU1ODQ4IDEzLTE2LTUKK2Fsd2F5cyBcdTU4NDkgMTMtMTYtMgorYWx3YXlzIFx1NTg0QSAxMjMtMjM1Ni01CithbHdheXMgXHU1ODRCIDEzNDU2LTIKK2Fsd2F5cyBcdTU4NEMgMTI0LTM0NS0zCithbHdheXMgXHU1ODREIDEyLTEzNTYtMgorYWx3YXlzIFx1NTg0RSAyMzUtNAorYWx3YXlzIFx1NTg0RiAxMjMtMjQ1Ni00CithbHdheXMgXHU1ODUwIDE1LTM0LTUKK2Fsd2F5cyBcdTU4NTEgMTUtMzQtNQorYWx3YXlzIFx1NTg1MiAyNC0xNTYtMgorYWx3YXlzIFx1NTg1MyAxMzQtMTYtNQorYWx3YXlzIFx1NTg1NCAxMjQtMzQ1LTQKK2Fsd2F5cyBcdTU4NTUgMTIzNDYtNAorYWx3YXlzIFx1NTg1NiAxMi0xMzU2LTIKK2Fsd2F5cyBcdTU4NTcgMTI0LTM0LTIKK2Fsd2F5cyBcdTU4NTggMTI0LTEzNDYtMgorYWx3YXlzIFx1NTg1OSAyNDUtMjM2LTUKK2Fsd2F5cyBcdTU4NUEgMS0xMjM0Ni00CithbHdheXMgXHU1ODVCIDE0LTE2LTUKK2Fsd2F5cyBcdTU4NUMgMTIzNC0xMzU2LTIKK2Fsd2F5cyBcdTU4NUQgMTM1LTEzNDYtNQorYWx3YXlzIFx1NTg1RSAxNS0yNDU2LTUKK2Fsd2F5cyBcdTU4NUYgMTI1LTEzNDYtNQorYWx3YXlzIFx1NTg2MCAxNDUtMTI0Ni0zCithbHdheXMgXHU1ODYxIDEyNC0yMzQ1LTIKK2Fsd2F5cyBcdTU4NjIgMzQtNQorYWx3YXlzIFx1NTg2MyAxMi0xMzU2LTQKK2Fsd2F5cyBcdTU4NjQgMTUtMjU2LTMKK2Fsd2F5cyBcdTU4NjUgMTMtMjM0Ni0yCithbHdheXMgXHU1ODY2IDEtMTM2LTUKK2Fsd2F5cyBcdTU4NjcgMjQ1Ni01CithbHdheXMgXHU1ODY4IDEzLTEyMzQ2LTMKK2Fsd2F5cyBcdTU4NjkgMjM0NS0yCithbHdheXMgXHU1ODZBIDEyMy0xMjM2LTQKK2Fsd2F5cyBcdTU4NkIgMTI0LTIzNDUtMgorYWx3YXlzIFx1NTg2QyA0NS0yCithbHdheXMgXHU1ODZEIDEyMzQ1Ni0zCithbHdheXMgXHU1ODZFIDE1LTM0Ni01CithbHdheXMgXHU1ODZGIDE0LTIzNC01CithbHdheXMgXHU1ODcwIDEyMzUtMjQ1Ni00CithbHdheXMgXHU1ODcxIDE0LTEzNDYtNAorYWx3YXlzIFx1NTg3MiAxMi0xMzQ2LTQKK2Fsd2F5cyBcdTU4NzMgMTIzNC0xMzU2LTIKK2Fsd2F5cyBcdTU4NzQgMTM1LTEzNTYtNQorYWx3YXlzIFx1NTg3NSAxMi0xMzYtMgorYWx3YXlzIFx1NTg3NiAxNC0zNC01CithbHdheXMgXHU1ODc3IDE0LTM0LTQKK2Fsd2F5cyBcdTU4NzggMTIzNTYtNAorYWx3YXlzIFx1NTg3OSAyNDUtMjM0NS01CithbHdheXMgXHU1ODdBIDEzNC0zNTYtMgorYWx3YXlzIFx1NTg3QiAxMzQtMTI2LTUKK2Fsd2F5cyBcdTU4N0MgMS0xMjQ1Ni0zCithbHdheXMgXHU1ODdEIDI0LTQ1Ni00CithbHdheXMgXHU1ODdFIDI0LTM0LTIKK2Fsd2F5cyBcdTU4N0YgMTQtMTIzNTYtNAorYWx3YXlzIFx1NTg4MCAxMi0xNTYtMgorYWx3YXlzIFx1NTg4MSAxMzQtMTIzNi01CithbHdheXMgXHU1ODgyIDEzNS0yNDYtMworYWx3YXlzIFx1NTg4MyAxMy0xMzQ1Ni01CithbHdheXMgXHU1ODg0IDI0NS0xNi0zCithbHdheXMgXHU1ODg1IDI0LTM0LTUKK2Fsd2F5cyBcdTU4ODYgMTQ1LTE2LTUKK2Fsd2F5cyBcdTU4ODcgMS0xMzQ2LTUKK2Fsd2F5cyBcdTU4ODggMTIzLTEyMzYtNQorYWx3YXlzIFx1NTg4OSAyMzUtMworYWx3YXlzIFx1NTg4QSAxNDUtMjM0NS01CithbHdheXMgXHU1ODhCIDEyLTEzNi00CithbHdheXMgXHU1ODhDIDEtMTU2LTMKK2Fsd2F5cyBcdTU4OEQgMTUtMTYtNQorYWx3YXlzIFx1NTg4RSAxMy0yNS0zCithbHdheXMgXHU1ODhGIDI0NS00Ni00CithbHdheXMgXHU1ODkwIDEzLTE0NTYtNQorYWx3YXlzIFx1NTg5MSAxNDUtMTYtMworYWx3YXlzIFx1NTg5MiAyNC0xMzQ2LTMKK2Fsd2F5cyBcdTU4OTMgMTM0LTM0LTUKK2Fsd2F5cyBcdTU4OTQgMjQ1LTEyNDYtMworYWx3YXlzIFx1NTg5NSAyMzQ1LTUKK2Fsd2F5cyBcdTU4OTYgMTI0LTM0NS00CithbHdheXMgXHU1ODk3IDEyNS0xMzU2LTMKK2Fsd2F5cyBcdTU4OTggMjQ1LTE2LTIKK2Fsd2F5cyBcdTU4OTkgMjQ1LTQ2LTIKK2Fsd2F5cyBcdTU4OUEgMTQtNDYtMgorYWx3YXlzIFx1NTg5QiAxMjQ2LTUKK2Fsd2F5cyBcdTU4OUMgMS0xMjQ2LTUKK2Fsd2F5cyBcdTU4OUQgMjQ1LTI0Ni0zCithbHdheXMgXHU1ODlFIDEyNS0xMzU2LTMKK2Fsd2F5cyBcdTU4OUYgMTUtMTI1Ni0zCithbHdheXMgXHU1OEEwIDI0LTEyMzYtNQorYWx3YXlzIFx1NThBMSAyNC0xMjM2LTUKK2Fsd2F5cyBcdTU4QTIgMTM1LTM0NS0yCithbHdheXMgXHU1OEEzIDEyMzQtMzQtMgorYWx3YXlzIFx1NThBNCAxMjQtMTI0Ni0yCithbHdheXMgXHU1OEE1IDE0NS0xMjM0Ni00CithbHdheXMgXHU1OEE2IDEyMzQ1LTEyMzYtMgorYWx3YXlzIFx1NThBNyAyNDUtMjM2LTUKK2Fsd2F5cyBcdTU4QTggMTM0LTEyNi01CithbHdheXMgXHU1OEE5IDE0NS0xMjM0NTYtMworYWx3YXlzIFx1NThBQSAxNDUtMTIzNDU2LTMKK2Fsd2F5cyBcdTU4QUIgMTI1LTEyMzQ1Ni0zCithbHdheXMgXHU1OEFDIDE0NS0xNi01CithbHdheXMgXHU1OEFEIDI0LTEzNTYtNQorYWx3YXlzIFx1NThBRSAxNDUtMjUtNQorYWx3YXlzIFx1NThBRiAxNDUtMjUtNQorYWx3YXlzIFx1NThCMCAxMjQtMTIzNi0yCithbHdheXMgXHU1OEIxIDE0NS0xMzU2LTUKK2Fsd2F5cyBcdTU4QjIgMzQtNAorYWx3YXlzIFx1NThCMyAxMjM0NS0xMzYtMgorYWx3YXlzIFx1NThCNCAxMjM1LTQ1Ni0yCithbHdheXMgXHU1OEI1IDEyNC0xMjM2LTIKK2Fsd2F5cyBcdTU4QjYgMTQ1LTM0NS0zCithbHdheXMgXHU1OEI3IDM0Ni01CithbHdheXMgXHU1OEI4IDEtMzQtNQorYWx3YXlzIFx1NThCOSAxMy0yMzQ1LTUKK2Fsd2F5cyBcdTU4QkEgMTQ2LTUKK2Fsd2F5cyBcdTU4QkIgMjQ1LTQ2LTIKK2Fsd2F5cyBcdTU4QkMgMTMtMTYtMworYWx3YXlzIFx1NThCRCAyNDUtMjQ2LTMKK2Fsd2F5cyBcdTU4QkUgMTIzLTEzNi00CithbHdheXMgXHU1OEJGIDE2LTUKK2Fsd2F5cyBcdTU4QzAgMTIzNC0xNi0yCithbHdheXMgXHU1OEMxIDEzNS0xNi01CithbHdheXMgXHU1OEMyIDE0NS0yMzQ1LTUKK2Fsd2F5cyBcdTU4QzMgMTMtNDYtMworYWx3YXlzIFx1NThDNCAzNDYtNAorYWx3YXlzIFx1NThDNSAyMzUtMworYWx3YXlzIFx1NThDNiAxNS0yMzYtMgorYWx3YXlzIFx1NThDNyAxMjQtMTIzNi0yCithbHdheXMgXHU1OEM4IDE0LTEyMzYtNAorYWx3YXlzIFx1NThDOSAxMy0xMjU2LTUKK2Fsd2F5cyBcdTU4Q0EgMTIzNS0yMzU2LTUKK2Fsd2F5cyBcdTU4Q0IgMTQ1LTEzNDYtNQorYWx3YXlzIFx1NThDQyAxMjQ1LTEzNDYtNAorYWx3YXlzIFx1NThDRCAyNDUtMjM0NS01CithbHdheXMgXHU1OENFIDE1LTI1Ni0zCithbHdheXMgXHU1OENGIDEzLTIzNDUtNQorYWx3YXlzIFx1NThEMCAxNS0xNi00CithbHdheXMgXHU1OEQxIDEyMzUtMjUtNQorYWx3YXlzIFx1NThEMiAyNDU2LTUKK2Fsd2F5cyBcdTU4RDMgMjM0NTYtMworYWx3YXlzIFx1NThENCAxNDUtMTQ2LTQKK2Fsd2F5cyBcdTU4RDUgMTIzNS0xNDYtMgorYWx3YXlzIFx1NThENiAxMjQ1LTEyNDU2LTIKK2Fsd2F5cyBcdTU4RDcgMTMtMTQ1Ni01CithbHdheXMgXHU1OEQ4IDE0LTM1Ni00CithbHdheXMgXHU1OEQ5IDEyMy00NTYtNQorYWx3YXlzIFx1NThEQSAxNC0zNC0yCithbHdheXMgXHU1OERCIDIzNDUtMgorYWx3YXlzIFx1NThEQyAxMjQtMTIzNi0yCithbHdheXMgXHU1OEREIDEyNDYtNAorYWx3YXlzIFx1NThERSAxMjM1LTIzNTYtNQorYWx3YXlzIFx1NThERiAxNC0xMjM0Ni00CithbHdheXMgXHU1OEUwIDE0LTEyMzQ2LTQKK2Fsd2F5cyBcdTU4RTEgMTI0NS0xMjQ2LTUKK2Fsd2F5cyBcdTU4RTIgMTQtMTYtNQorYWx3YXlzIFx1NThFMyAxNC0xNDU2LTIKK2Fsd2F5cyBcdTU4RTQgMTI0NS0xMzQ2LTQKK2Fsd2F5cyBcdTU4RTUgMTItMTIzNi0yCithbHdheXMgXHU1OEU2IDE1LTI1Ni0zCithbHdheXMgXHU1OEU3IDIzNDUtMgorYWx3YXlzIFx1NThFOCAxNC0zNTYtMgorYWx3YXlzIFx1NThFOSAxMzUtMzQ1LTUKK2Fsd2F5cyBcdTU4RUEgMTI0NTYtMworYWx3YXlzIFx1NThFQiAyNC0xNTYtNQorYWx3YXlzIFx1NThFQyAxMjQ1LTEzNi0yCithbHdheXMgXHU1OEVEIDE1LTEyMzYtMworYWx3YXlzIFx1NThFRSAxLTQ1Ni01CithbHdheXMgXHU1OEVGIDEtNDU2LTUKK2Fsd2F5cyBcdTU4RjAgMjQtMTM1Ni0zCithbHdheXMgXHU1OEYxIDE2LTMKK2Fsd2F5cyBcdTU4RjIgMTM0LTI0NTYtNQorYWx3YXlzIFx1NThGMyAxMjMtMjM0Ni0yCithbHdheXMgXHU1OEY0IDEtMzQtNQorYWx3YXlzIFx1NThGNSAxLTQ1Ni01CithbHdheXMgXHU1OEY2IDEyMzQ1LTM0LTIKK2Fsd2F5cyBcdTU4RjcgMTIzNS0zNC0yCithbHdheXMgXHU1OEY4IDEyMy0xMjM0NTYtNAorYWx3YXlzIFx1NThGOSAxNi0zCithbHdheXMgXHU1OEZBIDEyMzUtMzQtMgorYWx3YXlzIFx1NThGQiAxNS0xMjU2LTUKK2Fsd2F5cyBcdTU4RkMgMTIzLTEyMzQ1Ni00CithbHdheXMgXHU1OEZEIDI0LTEyMzU2LTUKK2Fsd2F5cyBcdTU4RkUgMTM0LTEzNDYtNAorYWx3YXlzIFx1NThGRiAyNDUtMTIzNDU2LTIKK2Fsd2F5cyBcdTU5MDAgMjQtMTIzNTYtNQorYWx3YXlzIFx1NTkwMSAxNi0zCithbHdheXMgXHU1OTAyIDEtMTU2LTQKK2Fsd2F5cyBcdTU5MDMgMTMtMzQtMworYWx3YXlzIFx1NTkwNCAxMi0zNC01CithbHdheXMgXHU1OTA1IDEzLTQ2LTUKK2Fsd2F5cyBcdTU5MDYgMTIzNDUtMTM1Ni0yCithbHdheXMgXHU1OTA3IDEzNS0zNTYtNQorYWx3YXlzIFx1NTkwOCAxLTI0NTYtMworYWx3YXlzIFx1NTkwOSAxMzUtMjM0NS01CithbHdheXMgXHU1OTBBIDE1LTEyNDYtMworYWx3YXlzIFx1NTkwQiAyNDUtMjU2LTMKK2Fsd2F5cyBcdTU5MEMgMTQtMTM0NTYtMgorYWx3YXlzIFx1NTkwRCAxMjM0NS0zNC01CithbHdheXMgXHU1OTBFIDEyNS0yNS01CithbHdheXMgXHU1OTBGIDE1LTIzNDU2LTUKK2Fsd2F5cyBcdTU5MTAgMTUtMjM1LTUKK2Fsd2F5cyBcdTU5MTEgMTUtMzQ2LTUKK2Fsd2F5cyBcdTU5MTIgMTM0NS0xNDYtMgorYWx3YXlzIFx1NTkxMyAxNS0yMzQ1Ni01CithbHdheXMgXHU1OTE0IDEyMy0xMjQ2LTIKK2Fsd2F5cyBcdTU5MTUgMTUtMTYtNQorYWx3YXlzIFx1NTkxNiAyMzU2LTUKK2Fsd2F5cyBcdTU5MTcgNDUtNQorYWx3YXlzIFx1NTkxOCAxMzQtMTQ2LTQKK2Fsd2F5cyBcdTU5MTkgMTUtMzQtNQorYWx3YXlzIFx1NTkxQSAxNDUtMjUtMworYWx3YXlzIFx1NTkxQiAxNDUtMjUtMworYWx3YXlzIFx1NTkxQyAzNDYtNQorYWx3YXlzIFx1NTkxRCAyNDUtMTM0NTYtMgorYWx3YXlzIFx1NTkxRSAxMjM1Ni0yCithbHdheXMgXHU1OTFGIDEzLTEyMzU2LTUKK2Fsd2F5cyBcdTU5MjAgMTMtMTIzNTYtNQorYWx3YXlzIFx1NTkyMSAyNDUtMTYtNQorYWx3YXlzIFx1NTkyMiAxMzQtMTM1Ni01CithbHdheXMgXHU1OTIzIDEzNC0xMzU2LTUKK2Fsd2F5cyBcdTU5MjQgMTQ1Ni0yCithbHdheXMgXHU1OTI1IDEyMzUtMjUtNAorYWx3YXlzIFx1NTkyNiAxMi0xMzYtNQorYWx3YXlzIFx1NTkyNyAxNDUtMzQ1LTUKK2Fsd2F5cyBcdTU5MjggMTI1LTIzNDYtNQorYWx3YXlzIFx1NTkyOSAxMjQtMjM0NS0zCithbHdheXMgXHU1OTJBIDEyNC0yNDU2LTUKK2Fsd2F5cyBcdTU5MkIgMTIzNDUtMzQtMworYWx3YXlzIFx1NTkyQyAxMy0yMzU2LTUKK2Fsd2F5cyBcdTU5MkQgMjQ2LTMKK2Fsd2F5cyBcdTU5MkUgNDYtMworYWx3YXlzIFx1NTkyRiAxMjM1LTEzNDYtMworYWx3YXlzIFx1NTkzMCAxMy0xNDYtNAorYWx3YXlzIFx1NTkzMSAyNC0xNTYtMworYWx3YXlzIFx1NTkzMiAxMzUtMTM2LTQKK2Fsd2F5cyBcdTU5MzMgMTI0LTI0NTYtNQorYWx3YXlzIFx1NTkzNCAxMjQtMTIzNTYtMgorYWx3YXlzIFx1NTkzNSAyMzQ1LTQKK2Fsd2F5cyBcdTU5MzYgMTM1LTE2LTQKK2Fsd2F5cyBcdTU5MzcgMTYtMgorYWx3YXlzIFx1NTkzOCAxMjMtMzUtMworYWx3YXlzIFx1NTkzOSAxMy0yMzQ1Ni0yCithbHdheXMgXHU1OTNBIDE0NS0yNS0yCithbHdheXMgXHU1OTNCIDEyMzUtMzUtNQorYWx3YXlzIFx1NTkzQyAxMy00NTYtNAorYWx3YXlzIFx1NTkzRCAyNTYtNQorYWx3YXlzIFx1NTkzRSAxMy0yMzQ1Ni0yCithbHdheXMgXHU1OTNGIDEyMzQtMzQ1LTMKK2Fsd2F5cyBcdTU5NDAgMTM2LTMKK2Fsd2F5cyBcdTU5NDEgMTQtMjM0NS0yCithbHdheXMgXHU1OTQyIDEyMzUtMTI0NTYtNQorYWx3YXlzIFx1NTk0MyAxNDUtMTYtNQorYWx3YXlzIFx1NTk0NCAyMzQ1LTQKK2Fsd2F5cyBcdTU5NDUgMTIzNC0xNDYtNQorYWx3YXlzIFx1NTk0NiAyNDUtNDUtNAorYWx3YXlzIFx1NTk0NyAyNDUtMTYtMgorYWx3YXlzIFx1NTk0OCAxMzQ1LTI0NTYtNQorYWx3YXlzIFx1NTk0OSAxMjM0NS0xMzU2LTUKK2Fsd2F5cyBcdTU5NEEgMTUtMzQ2LTIKK2Fsd2F5cyBcdTU5NEIgMTIzNDUtMTM2LTUKK2Fsd2F5cyBcdTU5NEMgMTQ1LTIzNDUtNAorYWx3YXlzIFx1NTk0RCAyNDYtNAorYWx3YXlzIFx1NTk0RSAxMjMtMTI0Ni0yCithbHdheXMgXHU1OTRGIDEyNS0xMjM1Ni01CithbHdheXMgXHU1OTUwIDEyMzUtMTI0NTYtNQorYWx3YXlzIFx1NTk1MSAyNDUtMTYtNQorYWx3YXlzIFx1NTk1MiAxMjMtMjQ1Ni0zCithbHdheXMgXHU1OTUzIDI0LTIzNDYtMworYWx3YXlzIFx1NTk1NCAxMzUtMTM2LTMKK2Fsd2F5cyBcdTU5NTUgMTYtNQorYWx3YXlzIFx1NTk1NiAxMy00Ni00CithbHdheXMgXHU1OTU3IDEyNC0xNDYtNQorYWx3YXlzIFx1NTk1OCAxMjUtMTM0Ni01CithbHdheXMgXHU1OTU5IDEzNS0xMzYtNAorYWx3YXlzIFx1NTk1QSAxNS0xNi0zCithbHdheXMgXHU1OTVCIDE1LTQ2LTQKK2Fsd2F5cyBcdTU5NUMgMTIzNDUtMzU2LTQKK2Fsd2F5cyBcdTU5NUQgMTQ1LTI0Ni0zCithbHdheXMgXHU1OTVFIDE1LTI1Ni01CithbHdheXMgXHU1OTVGIDEyMy0xMzU2LTMKK2Fsd2F5cyBcdTU5NjAgMTQ1LTIzNDUtNQorYWx3YXlzIFx1NTk2MSAxNDYtNQorYWx3YXlzIFx1NTk2MiAyNC0yMzQ2LTMKK2Fsd2F5cyBcdTU5NjMgMTIzNDYtNAorYWx3YXlzIFx1NTk2NCAxMjM0LTEyMzYtNAorYWx3YXlzIFx1NTk2NSAxNDYtNQorYWx3YXlzIFx1NTk2NiAzNC01CithbHdheXMgXHU1OTY3IDE0Ni01CithbHdheXMgXHU1OTY4IDEzLTQ2LTQKK2Fsd2F5cyBcdTU5NjkgMTQtMjM0NS0yCithbHdheXMgXHU1OTZBIDE0NS0yNS0yCithbHdheXMgXHU1OTZCIDI1Ni0zCithbHdheXMgXHU1OTZDIDEzLTQ2LTQKK2Fsd2F5cyBcdTU5NkQgMjQtMTU2LTUKK2Fsd2F5cyBcdTU5NkUgMTIzNDUtMTM2LTUKK2Fsd2F5cyBcdTU5NkYgMTIzNS0yNS01CithbHdheXMgXHU1OTcwIDEzNS0zNTYtNQorYWx3YXlzIFx1NTk3MSAxNC0yMzQ1LTIKK2Fsd2F5cyBcdTU5NzIgMTQ1LTI1LTIKK2Fsd2F5cyBcdTU5NzMgMTM0NS0xMjU2LTQKK2Fsd2F5cyBcdTU5NzQgMTM0NS0zNC0yCithbHdheXMgXHU1OTc1IDE0NS0xMzQ1Ni0zCithbHdheXMgXHU1OTc2IDEzNDUtMjQ1Ni00CithbHdheXMgXHU1OTc3IDI0NS0yMzQ1LTMKK2Fsd2F5cyBcdTU5NzggMTMtMjM0NS0zCithbHdheXMgXHU1OTc5IDEyNDgtMzQ1LTMKK2Fsd2F5cyBcdTU5N0EgMTMtMjM0LTQKK2Fsd2F5cyBcdTU5N0IgMTM0NS0xMjM2LTIKK2Fsd2F5cyBcdTU5N0MgMTItMzQ1LTUKK2Fsd2F5cyBcdTU5N0QgMTIzNS0xNDYtNAorYWx3YXlzIFx1NTk3RSAxNS0yMzQ1LTMKK2Fsd2F5cyBcdTU5N0YgMTIzNDUtMTIzNi01CithbHdheXMgXHU1OTgwIDEzLTE2LTQKK2Fsd2F5cyBcdTU5ODEgMjQtMjUtNQorYWx3YXlzIFx1NTk4MiAxMjQ1LTM0LTIKK2Fsd2F5cyBcdTU5ODMgMTIzNDUtMzU2LTMKK2Fsd2F5cyBcdTU5ODQgNDU2LTUKK2Fsd2F5cyBcdTU5ODUgMTIzNS0xMjM0Ni0yCithbHdheXMgXHU1OTg2IDEtNDU2LTMKK2Fsd2F5cyBcdTU5ODcgMTIzNDUtMzQtNQorYWx3YXlzIFx1NTk4OCAxMzQtMzQ1LTMKK2Fsd2F5cyBcdTU5ODkgMTQ1LTEyMzYtMworYWx3YXlzIFx1NTk4QSAxMjQ1LTEzNi01CithbHdheXMgXHU1OThCIDEyMzQ1LTM0LTMKK2Fsd2F5cyBcdTU5OEMgMTMtMTM0NTYtNQorYWx3YXlzIFx1NTk4RCAyMzQ1LTIKK2Fsd2F5cyBcdTU5OEUgMTIzNS0yNDU2LTUKK2Fsd2F5cyBcdTU5OEYgMTIzNDU2LTUKK2Fsd2F5cyBcdTU5OTAgMS0xMjM0Ni0zCithbHdheXMgXHU1OTkxIDEyMzQtMzQ1LTMKK2Fsd2F5cyBcdTU5OTIgMTQ1LTM0LTUKK2Fsd2F5cyBcdTU5OTMgMTMtMTYtNQorYWx3YXlzIFx1NTk5NCAxMjMtMTM1Ni0zCithbHdheXMgXHU1OTk1IDEtMTIzNDYtNQorYWx3YXlzIFx1NTk5NiAyNDYtMworYWx3YXlzIFx1NTk5NyAxMy0xNDU2LTUKK2Fsd2F5cyBcdTU5OTggMjU2LTIKK2Fsd2F5cyBcdTU5OTkgMTM0LTI0Ni01CithbHdheXMgXHU1OTlBIDEyMzQtMzU2LTMKK2Fsd2F5cyBcdTU5OUIgMTItMTU2LTMKK2Fsd2F5cyBcdTU5OUMgMjM2LTUKK2Fsd2F5cyBcdTU5OUQgMS00NTYtMworYWx3YXlzIFx1NTk5RSAxMzQ1LTIzNC0zCithbHdheXMgXHU1OTlGIDIzNDUtNQorYWx3YXlzIFx1NTlBMCAxMzQ1LTM0NS01CithbHdheXMgXHU1OUExIDE1LTE0NTYtMworYWx3YXlzIFx1NTlBMiAxMjM0NS0xMzYtMgorYWx3YXlzIFx1NTlBMyAxMzUtMTYtNAorYWx3YXlzIFx1NTlBNCAxMjU2LTIKK2Fsd2F5cyBcdTU5QTUgMTI0LTI1LTQKK2Fsd2F5cyBcdTU5QTYgMTIzNDUtMTM1Ni0zCithbHdheXMgXHU1OUE3IDQ1LTIKK2Fsd2F5cyBcdTU5QTggMTIzNDUtMTM0Ni0yCithbHdheXMgXHU1OUE5IDM0LTQKK2Fsd2F5cyBcdTU5QUEgMTI1Ni01CithbHdheXMgXHU1OUFCIDEzLTEyNDYtMworYWx3YXlzIFx1NTlBQyAxNDUtMzQtNQorYWx3YXlzIFx1NTlBRCAxMzUtMzQ1LTIKK2Fsd2F5cyBcdTU5QUUgMTM0NS0xNi0yCithbHdheXMgXHU1OUFGIDEtMTIzNTYtMgorYWx3YXlzIFx1NTlCMCAxLTI1LTIKK2Fsd2F5cyBcdTU5QjEgMS0xNDYtMworYWx3YXlzIFx1NTlCMiAxNDUtMzQ1LTIKK2Fsd2F5cyBcdTU5QjMgMTM0NTgtMTYtNAorYWx3YXlzIFx1NTlCNCA0NS01CithbHdheXMgXHU1OUI1IDEyNC0xMjM1Ni00CithbHdheXMgXHU1OUI2IDE1LTQ1LTIKK2Fsd2F5cyBcdTU5QjcgMS0xNTYtMgorYWx3YXlzIFx1NTlCOCAyMzQ2LTMKK2Fsd2F5cyBcdTU5QjkgMTM0LTM1Ni01CithbHdheXMgXHU1OUJBIDEzNC0xMjYtNQorYWx3YXlzIFx1NTlCQiAyNDUtMTYtMworYWx3YXlzIFx1NTlCQyAxMzUtMTYtNQorYWx3YXlzIFx1NTlCRCAyNC0xMzYtMworYWx3YXlzIFx1NTlCRSAyNDUtMzQ2LTUKK2Fsd2F5cyBcdTU5QkYgMjM0Ni0zCithbHdheXMgXHU1OUMwIDEyMzUtMjM0Ni0yCithbHdheXMgXHU1OUMxIDE1LTEyNTYtNAorYWx3YXlzIFx1NTlDMiAxMjM0NS0zNDUtMgorYWx3YXlzIFx1NTlDMyAxLTEzNTYtMworYWx3YXlzIFx1NTlDNCAxMzQtMTQ1Ni0yCithbHdheXMgXHU1OUM1IDEzNS0xMjM2LTUKK2Fsd2F5cyBcdTU5QzYgMTM0LTM0LTQKK2Fsd2F5cyBcdTU5QzcgMTIzNDUtMzQtMworYWx3YXlzIFx1NTlDOCAxNC0xMzQ1Ni0yCithbHdheXMgXHU1OUM5IDEzLTM0Ni00CithbHdheXMgXHU1OUNBIDEzLTM0Ni00CithbHdheXMgXHU1OUNCIDI0LTE1Ni00CithbHdheXMgXHU1OUNDIDEyNDUtMTIzNi00CithbHdheXMgXHU1OUNEIDI0LTEyMzYtMworYWx3YXlzIFx1NTlDRSA0Ni0zCithbHdheXMgXHU1OUNGIDEzNDUtMTIzNi0yCithbHdheXMgXHU1OUQwIDEzLTM0Ni00CithbHdheXMgXHU1OUQxIDEzLTM0LTMKK2Fsd2F5cyBcdTU5RDIgMTUtMTU2LTUKK2Fsd2F5cyBcdTU5RDMgMTUtMTM0NTYtNQorYWx3YXlzIFx1NTlENCAxMjQ2LTQKK2Fsd2F5cyBcdTU5RDUgMTI1LTE1Ni0zCithbHdheXMgXHU1OUQ2IDEzLTEyNTYtNQorYWx3YXlzIFx1NTlENyAyNC0xMjM2LTMKK2Fsd2F5cyBcdTU5RDggMTIzNC0xNDU2LTMKK2Fsd2F5cyBcdTU5RDkgMTI0NS0xMzYtNQorYWx3YXlzIFx1NTlEQSAyNDYtMgorYWx3YXlzIFx1NTlEQiAxMjQtMTIzNDYtNAorYWx3YXlzIFx1NTlEQyAxMy00Ni0zCithbHdheXMgXHU1OUREIDI0LTM0LTMKK2Fsd2F5cyBcdTU5REUgMTMtMTYtMgorYWx3YXlzIFx1NTlERiAxMy0yNDU2LTMKK2Fsd2F5cyBcdTU5RTAgMjQtMTM0Ni01CithbHdheXMgXHU1OUUxIDEyMzUtMzUtMgorYWx3YXlzIFx1NTlFMiAxMy00NS0zCithbHdheXMgXHU1OUUzIDEzLTI0Ni00CithbHdheXMgXHU1OUU0IDEzLTEyMzU2LTUKK2Fsd2F5cyBcdTU5RTUgMTQtMTQ2LTQKK2Fsd2F5cyBcdTU5RTYgMTMtMjM0NS0zCithbHdheXMgXHU1OUU3IDEzLTIzNDUtMworYWx3YXlzIFx1NTlFOCAxNi0yCithbHdheXMgXHU1OUU5IDEzNDUtMjM0NS01CithbHdheXMgXHU1OUVBIDEtMTU2LTIKK2Fsd2F5cyBcdTU5RUIgMS0xMzYtNAorYWx3YXlzIFx1NTlFQyAxMy0xNi0zCithbHdheXMgXHU1OUVEIDE1LTIzNDUtNQorYWx3YXlzIFx1NTlFRSAxMjM1LTEzNTYtMgorYWx3YXlzIFx1NTlFRiAxMy00NTYtMworYWx3YXlzIFx1NTlGMCAxMy0yNTYtMworYWx3YXlzIFx1NTlGMSAxMjMtMzUtMworYWx3YXlzIFx1NTlGMiAyMzQ1LTUKK2Fsd2F5cyBcdTU5RjMgMTM0LTEzNDU2LTQKK2Fsd2F5cyBcdTU5RjQgMTQtMzQ2LTUKK2Fsd2F5cyBcdTU5RjUgMTIzNC0zNTYtNQorYWx3YXlzIFx1NTlGNiAyMzQ2LTUKK2Fsd2F5cyBcdTU5RjcgMjM0LTUKK2Fsd2F5cyBcdTU5RjggMjM0NS0yCithbHdheXMgXHU1OUY5IDEyLTM0NS01CithbHdheXMgXHU1OUZBIDE1LTIzNDUtNAorYWx3YXlzIFx1NTlGQiAxNDU2LTMKK2Fsd2F5cyBcdTU5RkMgMjQtMTU2LTIKK2Fsd2F5cyBcdTU5RkQgMTMtMTI0Ni00CithbHdheXMgXHU1OUZFIDI0NS00NS0zCithbHdheXMgXHU1OUZGIDEyNS0xNTYtMworYWx3YXlzIFx1NUEwMCAxNS0xMjM0Ni0zCithbHdheXMgXHU1QTAxIDEyNDYtMworYWx3YXlzIFx1NUEwMiAxMjM1LTEyMzQ2LTIKK2Fsd2F5cyBcdTVBMDMgMzUtMgorYWx3YXlzIFx1NUEwNCAxNC0xMjM1Ni0yCithbHdheXMgXHU1QTA1IDIzNDU2LTUKK2Fsd2F5cyBcdTVBMDYgMTI0NS0xNDYtMgorYWx3YXlzIFx1NUEwNyAxMy0yNDYtMworYWx3YXlzIFx1NUEwOCAxNC0xMjQ1Ni0yCithbHdheXMgXHU1QTA5IDEyMzQtMTM0NTYtMworYWx3YXlzIFx1NUEwQSAxNS0yMzQ1LTUKK2Fsd2F5cyBcdTVBMEIgMjQtMTQ2LTUKK2Fsd2F5cyBcdTVBMEMgMTQtMTYtNAorYWx3YXlzIFx1NUEwRCAxMi0xMzU2LTIKK2Fsd2F5cyBcdTVBMEUgMTUtMjQ2LTUKK2Fsd2F5cyBcdTVBMEYgMTM0LTEzNDYtMgorYWx3YXlzIFx1NUExMCAxMjM0NS0zNC0zCithbHdheXMgXHU1QTExIDE1LTI1LTMKK2Fsd2F5cyBcdTVBMTIgMzQtNAorYWx3YXlzIFx1NUExMyAxMjQ2LTQKK2Fsd2F5cyBcdTVBMTQgMTIzLTIzNDYtNQorYWx3YXlzIFx1NUExNSAxNC0yNDU2LTUKK2Fsd2F5cyBcdTVBMTYgMTItMjUtNQorYWx3YXlzIFx1NUExNyAxMjQtMTM0NTYtNAorYWx3YXlzIFx1NUExOCAxMzQ1LTQ2LTIKK2Fsd2F5cyBcdTVBMTkgMTUtMTM0NTYtMgorYWx3YXlzIFx1NUExQSAxMzQ1LTEyMzYtMgorYWx3YXlzIFx1NUExQiAxMjU2LTIKK2Fsd2F5cyBcdTVBMUMgMTM0NS0zNDUtNQorYWx3YXlzIFx1NUExRCAxMjM0LTM1Ni0zCithbHdheXMgXHU1QTFFIDE1LTEyNDYtMworYWx3YXlzIFx1NUExRiAxMy00NS0zCithbHdheXMgXHU1QTIwIDI0LTEzNi0zCithbHdheXMgXHU1QTIxIDEtMTU2LTUKK2Fsd2F5cyBcdTVBMjIgMTIzNS0xMjM2LTIKK2Fsd2F5cyBcdTVBMjMgMTQ1LTE2LTUKK2Fsd2F5cyBcdTVBMjQgMS00NTYtMworYWx3YXlzIFx1NUEyNSAyMzQ2LTIKK2Fsd2F5cyBcdTVBMjYgMTIzNC0xNDU2LTIKK2Fsd2F5cyBcdTVBMjcgMTI0LTEyNDYtNQorYWx3YXlzIFx1NUEyOCAxMjM1LTEyMzYtNQorYWx3YXlzIFx1NUEyOSAxMzQtMjM0NS00CithbHdheXMgXHU1QTJBIDM0LTIKK2Fsd2F5cyBcdTVBMkIgMjM0NS0yCithbHdheXMgXHU1QTJDIDM0LTQKK2Fsd2F5cyBcdTVBMkQgMTUtMTYtMworYWx3YXlzIFx1NUEyRSAyMzQ1LTIKK2Fsd2F5cyBcdTVBMkYgMTI1Ni0yCithbHdheXMgXHU1QTMwIDE1LTE1Ni01CithbHdheXMgXHU1QTMxIDEyNTYtMgorYWx3YXlzIFx1NUEzMiAzNS0zCithbHdheXMgXHU1QTMzIDE0LTE2LTUKK2Fsd2F5cyBcdTVBMzQgMTUtMjM0NS0yCithbHdheXMgXHU1QTM1IDEzLTEyNTYtMworYWx3YXlzIFx1NUEzNiAyNDUtMTI1Ni00CithbHdheXMgXHU1QTM3IDI0LTEyNDYtNQorYWx3YXlzIFx1NUEzOCAyNDUtMTYtMworYWx3YXlzIFx1NUEzOSAxNS0yMzQ1LTIKK2Fsd2F5cyBcdTVBM0EgMS0xMjQ2LTMKK2Fsd2F5cyBcdTVBM0IgMTQ1LTEyMzQ2LTMKK2Fsd2F5cyBcdTVBM0MgMTItMTM0Ni0zCithbHdheXMgXHU1QTNEIDE0LTM0LTUKK2Fsd2F5cyBcdTVBM0UgMjQ1Ni00CithbHdheXMgXHU1QTNGIDIzNDYtMworYWx3YXlzIFx1NUE0MCAyMzQ2LTMKK2Fsd2F5cyBcdTVBNDEgMTQtMTIzNTYtMgorYWx3YXlzIFx1NUE0MiAxMzQtMjM0NS0yCithbHdheXMgXHU1QTQzIDI0NS0xMjM0Ni0yCithbHdheXMgXHU1QTQ0IDEyMzQtMTIzNTYtNAorYWx3YXlzIFx1NUE0NSAxMy0xMjU2LTIKK2Fsd2F5cyBcdTVBNDYgMTIzNC0xMjYtMgorYWx3YXlzIFx1NUE0NyAyNDUtMjQ1Ni00CithbHdheXMgXHU1QTQ4IDE0LTEzNDU2LTIKK2Fsd2F5cyBcdTVBNDkgMTI0NTYtNAorYWx3YXlzIFx1NUE0QSAxMzUtMjQ2LTQKK2Fsd2F5cyBcdTVBNEIgMTUtMjQ2LTMKK2Fsd2F5cyBcdTVBNEMgMjQtMzQtNAorYWx3YXlzIFx1NUE0RCAyNDUtMTYtNAorYWx3YXlzIFx1NUE0RSAxMjM1LTEyNDYtMworYWx3YXlzIFx1NUE0RiAxMjM0NS0zNC01CithbHdheXMgXHU1QTUwIDI1LTQKK2Fsd2F5cyBcdTVBNTEgMjUtNAorYWx3YXlzIFx1NUE1MiAxMjQtMTIzNi0yCithbHdheXMgXHU1QTUzIDEyMzQ1LTM1Ni0zCithbHdheXMgXHU1QTU0IDEyMzQ1LTM1Ni0zCithbHdheXMgXHU1QTU1IDEzLTM0Ni0yCithbHdheXMgXHU1QTU2IDEyNC0yMzQ1LTMKK2Fsd2F5cyBcdTVBNTcgMTM0NS0xNi0yCithbHdheXMgXHU1QTU4IDI0NS00NS0yCithbHdheXMgXHU1QTU5IDEzLTEzNDU2LTUKK2Fsd2F5cyBcdTVBNUEgMTIzNS0xMjM0NTYtMworYWx3YXlzIFx1NUE1QiAxMy0xMzQ1Ni0zCithbHdheXMgXHU1QTVDIDI0NS0yMzQ1LTMKK2Fsd2F5cyBcdTVBNUQgMTQ1LTIzNDUtNQorYWx3YXlzIFx1NUE1RSAxNS0xMzQ1Ni01CithbHdheXMgXHU1QTVGIDEyMzUtMzQtNQorYWx3YXlzIFx1NUE2MCAxMjQ1Ni0zCithbHdheXMgXHU1QTYxIDE0LTI0NTYtMgorYWx3YXlzIFx1NUE2MiAxMzUtMTYtNQorYWx3YXlzIFx1NUE2MyAxNDU2LTMKK2Fsd2F5cyBcdTVBNjQgMS0xMjM1Ni0zCithbHdheXMgXHU1QTY1IDEyLTI1LTUKK2Fsd2F5cyBcdTVBNjYgMTIzNDUtMzQtNQorYWx3YXlzIFx1NUE2NyAyNDUtMTM0NTYtNQorYWx3YXlzIFx1NUE2OCAxNC0xMjM0NTYtMgorYWx3YXlzIFx1NUE2OSAxMjM2LTUKK2Fsd2F5cyBcdTVBNkEgMTQtMTIzNi0yCithbHdheXMgXHU1QTZCIDEyMy0xMjM0NTYtMworYWx3YXlzIFx1NUE2QyAxNDU2LTIKK2Fsd2F5cyBcdTVBNkQgMjM0NTYtNQorYWx3YXlzIFx1NUE2RSAxMy0xMjU2LTMKK2Fsd2F5cyBcdTVBNkYgMTQtMTYtNQorYWx3YXlzIFx1NUE3MCAxNDUtMjM0NS00CithbHdheXMgXHU1QTcxIDE1LTIzNDUtMgorYWx3YXlzIFx1NUE3MiAxMjM0NS0zNTYtMworYWx3YXlzIFx1NUE3MyAxMjM1LTM1LTUKK2Fsd2F5cyBcdTVBNzQgMTM0NTYtMworYWx3YXlzIFx1NUE3NSAxMi0xMjM2LTIKK2Fsd2F5cyBcdTVBNzYgMjQtMTM2LTQKK2Fsd2F5cyBcdTVBNzcgMTI0LTEzNDU2LTIKK2Fsd2F5cyBcdTVBNzggNDYtMgorYWx3YXlzIFx1NUE3OSAyNDYtNAorYWx3YXlzIFx1NUE3QSAzNC01CithbHdheXMgXHU1QTdCIDEzNDUtMTIzNi01CithbHdheXMgXHU1QTdDIDEyNDUtMjUtNQorYWx3YXlzIFx1NUE3RCAxMy0yMzQ1Ni00CithbHdheXMgXHU1QTdFIDEyNC0xMjM1Ni0zCithbHdheXMgXHU1QTdGIDE1LTEyNTYtNQorYWx3YXlzIFx1NUE4MCAxMjU2LTIKK2Fsd2F5cyBcdTVBODEgMTI0Ni0zCithbHdheXMgXHU1QTgyIDEyNC0xNi0yCithbHdheXMgXHU1QTgzIDEyNDUtMTIzNTYtMgorYWx3YXlzIFx1NUE4NCAxMzQtMzU2LTQKK2Fsd2F5cyBcdTVBODUgMTQ1LTEyMzYtMworYWx3YXlzIFx1NUE4NiAxMjQ1LTEyNDU2LTQKK2Fsd2F5cyBcdTVBODcgMjQ1LTE0NTYtMworYWx3YXlzIFx1NUE4OCAxMjM1LTEyNDYtMworYWx3YXlzIFx1NUE4OSAzNC0zCithbHdheXMgXHU1QThBIDI0NS0yMzQ1LTIKK2Fsd2F5cyBcdTVBOEIgMTItMTIzNDU2LTMKK2Fsd2F5cyBcdTVBOEMgMTM0LTI0Ni0yCithbHdheXMgXHU1QThEIDEyMzQ1LTM0LTUKK2Fsd2F5cyBcdTVBOEUgMTMtMzQ2LTQKK2Fsd2F5cyBcdTVBOEYgMTQ1LTEyNDU2LTMKK2Fsd2F5cyBcdTVBOTAgMTUtMTYtMworYWx3YXlzIFx1NUE5MSAxLTEyMzQ2LTUKK2Fsd2F5cyBcdTVBOTIgMTM0LTM1Ni0yCithbHdheXMgXHU1QTkzIDEyMzUtNDU2LTIKK2Fsd2F5cyBcdTVBOTQgMTM0LTIzNDUtMgorYWx3YXlzIFx1NUE5NSAxMjM2LTMKK2Fsd2F5cyBcdTVBOTYgMTM0NTYtMworYWx3YXlzIFx1NUE5NyAxNS00NS0zCithbHdheXMgXHU1QTk4IDEzLTM0Ni0zCithbHdheXMgXHU1QTk5IDEyNDYtMworYWx3YXlzIFx1NUE5QSAxMzQtMzU2LTUKK2Fsd2F5cyBcdTVBOUIgNDUtMgorYWx3YXlzIFx1NUE5QyAxLTEzNi0zCithbHdheXMgXHU1QTlEIDI0NS0yMzQtMworYWx3YXlzIFx1NUE5RSAxMjQtMTYtMgorYWx3YXlzIFx1NUE5RiAxNS0zNDYtNQorYWx3YXlzIFx1NUFBMCAxNDUtMjUtNQorYWx3YXlzIFx1NUFBMSAxNC0yMzQ1LTUKK2Fsd2F5cyBcdTVBQTIgMTM0LTE0Ni01CithbHdheXMgXHU1QUEzIDEyNDUtMTIzNi00CithbHdheXMgXHU1QUE0IDE1LTE1Ni0zCithbHdheXMgXHU1QUE1IDEyMzQtMjM0NS0zCithbHdheXMgXHU1QUE2IDEyNDYtNQorYWx3YXlzIFx1NUFBNyAzNS0zCithbHdheXMgXHU1QUE4IDEzLTIzNC01CithbHdheXMgXHU1QUE5IDEyMzUtMzQtMgorYWx3YXlzIFx1NUFBQSAxNDYtNAorYWx3YXlzIFx1NUFBQiAxMy0zNDYtMgorYWx3YXlzIFx1NUFBQyAxMzUtMTQ2LTQKK2Fsd2F5cyBcdTVBQUQgMTUtMTI1Ni0zCithbHdheXMgXHU1QUFFIDEyNC0xMjM1Ni0zCithbHdheXMgXHU1QUFGIDEzLTEyNDYtMworYWx3YXlzIFx1NUFCMCAxMjUtMTIzNTYtMworYWx3YXlzIFx1NUFCMSAyNDYtMgorYWx3YXlzIFx1NUFCMiAxMjM0LTE2LTUKK2Fsd2F5cyBcdTVBQjMgMTUtMTYtMgorYWx3YXlzIFx1NUFCNCA0NS0yCithbHdheXMgXHU1QUI1IDEzNDU2LTUKK2Fsd2F5cyBcdTVBQjYgMTI0NS0xMjM0Ni0yCithbHdheXMgXHU1QUI3IDEyNDUtMzQtNQorYWx3YXlzIFx1NUFCOCAxMi0xNTYtMworYWx3YXlzIFx1NUFCOSAxNC0yMzQtMgorYWx3YXlzIFx1NUFCQSAxMzQtMzU2LTQKK2Fsd2F5cyBcdTVBQkIgMTIzNC0xMjM2LTIKK2Fsd2F5cyBcdTVBQkMgMTQ2LTQKK2Fsd2F5cyBcdTVBQkQgMTM0LTM0NS0zCithbHdheXMgXHU1QUJFIDEzLTEyMzU2LTUKK2Fsd2F5cyBcdTVBQkYgMTIzLTEyNDYtNQorYWx3YXlzIFx1NUFDMCAyNDUtMTQ1Ni0yCithbHdheXMgXHU1QUMxIDEzLTIzNDU2LTUKK2Fsd2F5cyBcdTVBQzIgMTUtMTQ2LTQKK2Fsd2F5cyBcdTVBQzMgMS0xMzYtMworYWx3YXlzIFx1NUFDNCA0NS0yCithbHdheXMgXHU1QUM1IDEyLTM0NS0zCithbHdheXMgXHU1QUM2IDIzNS0yCithbHdheXMgXHU1QUM3IDEzNC0xMzQ1Ni0yCithbHdheXMgXHU1QUM4IDEzNDU2LTMKK2Fsd2F5cyBcdTVBQzkgMTMtMTYtMgorYWx3YXlzIFx1NUFDQSAxNS0zNC01CithbHdheXMgXHU1QUNCIDEzNDUtMjQ2LTQKK2Fsd2F5cyBcdTVBQ0MgMTUtMjM0NS0yCithbHdheXMgXHU1QUNEIDEyNC0xNDYtMworYWx3YXlzIFx1NUFDRSAxMjM0LTEzNDYtMgorYWx3YXlzIFx1NUFDRiAxNC0xMzQ2LTIKK2Fsd2F5cyBcdTVBRDAgMTM0NS0xNDYtNAorYWx3YXlzIFx1NUFEMSAxMzUtMjQ2LTIKK2Fsd2F5cyBcdTVBRDIgMjQ1Ni01CithbHdheXMgXHU1QUQzIDEyMzQtMTYtNQorYWx3YXlzIFx1NUFENCAxMjM0LTE0NTYtMgorYWx3YXlzIFx1NUFENSAxNi01CithbHdheXMgXHU1QUQ2IDEyMzQtMjQ2LTIKK2Fsd2F5cyBcdTVBRDcgMTI1Ni01CithbHdheXMgXHU1QUQ4IDE0LTM1Ni0yCithbHdheXMgXHU1QUQ5IDE1LTQ1LTIKK2Fsd2F5cyBcdTVBREEgMTM0LTEyMzYtNQorYWx3YXlzIFx1NUFEQiAxNi0zCithbHdheXMgXHU1QURDIDEtMTM0Ni0zCithbHdheXMgXHU1QUREIDEyMy0xMzQ2LTMKK2Fsd2F5cyBcdTVBREUgMjM1LTMKK2Fsd2F5cyBcdTVBREYgMTM0NS0xNi01CithbHdheXMgXHU1QUUwIDE0LTE2LTIKK2Fsd2F5cyBcdTVBRTEgMTQ1LTE2LTIKK2Fsd2F5cyBcdTVBRTIgMTMtMTI0Ni0zCithbHdheXMgXHU1QUUzIDIzNDUtMworYWx3YXlzIFx1NUFFNCAxMy0xNDU2LTUKK2Fsd2F5cyBcdTVBRTUgMS0xMjQ1Ni0zCithbHdheXMgXHU1QUU2IDEyLTEzNDYtMgorYWx3YXlzIFx1NUFFNyAyNDUtMjM0Ni01CithbHdheXMgXHU1QUU4IDEyMzUtMTIzNi0zCithbHdheXMgXHU1QUU5IDEzNDUtMTM2LTUKK2Fsd2F5cyBcdTVBRUEgMTQtMTQ2LTUKK2Fsd2F5cyBcdTVBRUIgMTM0LTEyNi0yCithbHdheXMgXHU1QUVDIDEtMjM0Ni0zCithbHdheXMgXHU1QUVEIDEyMzUtMzQtNQorYWx3YXlzIFx1NUFFRSAxMjM1LTM0LTUKK2Fsd2F5cyBcdTVBRUYgMTQ2LTUKK2Fsd2F5cyBcdTVBRjAgMTM0NS0xMzYtNQorYWx3YXlzIFx1NUFGMSAyNDUtNDYtMgorYWx3YXlzIFx1NUFGMiAxMzQtMzQ1LTIKK2Fsd2F5cyBcdTVBRjMgMTIzNC0zNDYtNQorYWx3YXlzIFx1NUFGNCAxMy0zNC0zCithbHdheXMgXHU1QUY1IDM0LTQKK2Fsd2F5cyBcdTVBRjYgMjQ1LTI0Ni0yCithbHdheXMgXHU1QUY3IDEyNC0yNS00CithbHdheXMgXHU1QUY4IDEtMTIzNi00CithbHdheXMgXHU1QUY5IDEzNC0xNDYtMgorYWx3YXlzIFx1NUFGQSAxNS0yMzQ1LTIKK2Fsd2F5cyBcdTVBRkIgMTUtMjM0NS0yCithbHdheXMgXHU1QUZDIDEzNC0xMjYtNQorYWx3YXlzIFx1NUFGRCAxNC0yNDYtMgorYWx3YXlzIFx1NUFGRSAxNC0yMzQ1LTIKK2Fsd2F5cyBcdTVBRkYgMTIzNS0zNS01CithbHdheXMgXHU1QjAwIDEzLTEyNDYtMworYWx3YXlzIFx1NUIwMSAxNDUtMTM1Ni0zCithbHdheXMgXHU1QjAyIDEtMTU2LTMKK2Fsd2F5cyBcdTVCMDMgMTUtMTI1Ni0zCithbHdheXMgXHU1QjA0IDE2LTMKK2Fsd2F5cyBcdTVCMDUgMTIzNS0zNS01CithbHdheXMgXHU1QjA2IDE1LTE2LTMKK2Fsd2F5cyBcdTVCMDcgMTIzNS0xMjQ2LTUKK2Fsd2F5cyBcdTVCMDggMTI0NS0xNDYtNAorYWx3YXlzIFx1NUIwOSAxNS0xNi0zCithbHdheXMgXHU1QjBBIDIzNDUtNQorYWx3YXlzIFx1NUIwQiAxMi0xMjM2LTIKK2Fsd2F5cyBcdTVCMEMgMTMtMjQ2LTMKK2Fsd2F5cyBcdTVCMEQgMTM0LTM1Ni00CithbHdheXMgXHU1QjBFIDEyMzQ1LTEyMzYtNQorYWx3YXlzIFx1NUIwRiAxMjM0NS0xMjM2LTMKK2Fsd2F5cyBcdTVCMTAgMTUtMjM0NS0zCithbHdheXMgXHU1QjExIDE2LTUKK2Fsd2F5cyBcdTVCMTIgMTI0Ni01CithbHdheXMgXHU1QjEzIDEzLTI0Ni01CithbHdheXMgXHU1QjE0IDEyMzQ1LTM0LTUKK2Fsd2F5cyBcdTVCMTUgMjQtMTU2LTUKK2Fsd2F5cyBcdTVCMTYgMTM1LTE2LTUKK2Fsd2F5cyBcdTVCMTcgMjQtMTIzNi01CithbHdheXMgXHU1QjE4IDE1LTEyNDYtNQorYWx3YXlzIFx1NUIxOSAyNDUtNDYtMgorYWx3YXlzIFx1NUIxQSAxNC0yMzQ1LTIKK2Fsd2F5cyBcdTVCMUIgMTIzNS0xMjQ1Ni0yCithbHdheXMgXHU1QjFDIDE1LTE0NTYtMworYWx3YXlzIFx1NUIxRCAxMzQ1LTI0Ni00CithbHdheXMgXHU1QjFFIDE0NS0xMjM0Ni00CithbHdheXMgXHU1QjFGIDE2LTUKK2Fsd2F5cyBcdTVCMjAgMjQ1LTEyMzYtMgorYWx3YXlzIFx1NUIyMSAyNDU2LTUKK2Fsd2F5cyBcdTVCMjIgMTM0NS00Ni0yCithbHdheXMgXHU1QjIzIDEzNDUtMTM1Ni0yCithbHdheXMgXHU1QjI0IDEzNC0zNDUtMworYWx3YXlzIFx1NUIyNSAxMjQtMjQ2LTQKK2Fsd2F5cyBcdTVCMjYgMTItMTIzNTYtMgorYWx3YXlzIFx1NUIyNyAxMy0xNDU2LTUKK2Fsd2F5cyBcdTVCMjggMjQ1LTE1Ni0yCithbHdheXMgXHU1QjI5IDEyNTYtMgorYWx3YXlzIFx1NUIyQSAxMjM0LTE0NTYtMgorYWx3YXlzIFx1NUIyQiAxNC0xMjM0Ni0yCithbHdheXMgXHU1QjJDIDEyNDUtMzQtMgorYWx3YXlzIFx1NUIyRCAxMzQ1LTI0NTYtNAorYWx3YXlzIFx1NUIyRSAyMzQ1LTMKK2Fsd2F5cyBcdTVCMkYgMTI0LTI0NTYtMgorYWx3YXlzIFx1NUIzMCAxMzQ1Ni0zCithbHdheXMgXHU1QjMxIDI0NS0xMjM2LTIKK2Fsd2F5cyBcdTVCMzIgMTM0NS0yNDYtNAorYWx3YXlzIFx1NUIzMyAyMzYtNQorYWx3YXlzIFx1NUIzNCAxMzQ1Ni0yCithbHdheXMgXHU1QjM1IDEzNC0yMzQ1LTIKK2Fsd2F5cyBcdTVCMzYgMTM1LTE2LTIKK2Fsd2F5cyBcdTVCMzcgMTM0LTEyNi0yCithbHdheXMgXHU1QjM4IDI0LTEzNi00CithbHdheXMgXHU1QjM5IDE1LTEzNDU2LTUKK2Fsd2F5cyBcdTVCM0EgMTM0NS0xNi01CithbHdheXMgXHU1QjNCIDE0NS0zNC0yCithbHdheXMgXHU1QjNDIDE0LTIzNC00CithbHdheXMgXHU1QjNEIDQ1LTMKK2Fsd2F5cyBcdTVCM0UgMTQtMTIzNi00CithbHdheXMgXHU1QjNGIDIzNDUtNAorYWx3YXlzIFx1NUI0MCAyNC00NTYtMworYWx3YXlzIFx1NUI0MSAxNC0xMzQ1Ni0yCithbHdheXMgXHU1QjQyIDEzLTI0Ni00CithbHdheXMgXHU1QjQzIDEzNDUtNDYtMgorYWx3YXlzIFx1NUI0NCAxNC0xMjM2LTQKK2Fsd2F5cyBcdTVCNDUgMTUtMjM0NS0zCithbHdheXMgXHU1QjQ2IDEzNDU2LTMKK2Fsd2F5cyBcdTVCNDcgMjQtNDU2LTMKK2Fsd2F5cyBcdTVCNDggMTIzNS0xMjQ2LTUKK2Fsd2F5cyBcdTVCNDkgMjQ1LTQ1LTIKK2Fsd2F5cyBcdTVCNEEgMTM0LTE2LTQKK2Fsd2F5cyBcdTVCNEIgMTQtMTYtMgorYWx3YXlzIFx1NUI0QyAxNC0xMjQ1Ni0yCithbHdheXMgXHU1QjREIDIzNDUtMgorYWx3YXlzIFx1NUI0RSAxLTM0LTQKK2Fsd2F5cyBcdTVCNEYgMTQtMTIzNi00CithbHdheXMgXHU1QjUwIDEyNS0xNTYtMQorYWx3YXlzIFx1NUI1MSAxMy0zNDYtMgorYWx3YXlzIFx1NUI1MiAxMy0yMzYtMgorYWx3YXlzIFx1NUI1MyAxMy0yMzYtMgorYWx3YXlzIFx1NUI1NCAxMjMtMTIzNDYtNAorYWx3YXlzIFx1NUI1NSAyNTYtNQorYWx3YXlzIFx1NUI1NiAxMjUtMTU2LTMKK2Fsd2F5cyBcdTVCNTcgMTI1LTE1Ni01CithbHdheXMgXHU1QjU4IDI0NS0xMjM0NTYtMgorYWx3YXlzIFx1NUI1OSAxNS0xMjM0NTYtMworYWx3YXlzIFx1NUI1QSAxMjM0NS0zNC0yCithbHdheXMgXHU1QjVCIDEzNS0xMjYtMgorYWx3YXlzIFx1NUI1QyAxMjUtMTU2LTMKK2Fsd2F5cyBcdTVCNUQgMTUtMjQ2LTUKK2Fsd2F5cyBcdTVCNUUgMTUtMTQ1Ni01CithbHdheXMgXHU1QjVGIDEzNC0xMzU2LTUKK2Fsd2F5cyBcdTVCNjAgMTUtMTU2LTUKK2Fsd2F5cyBcdTVCNjEgMTI0LTI0NTYtMworYWx3YXlzIFx1NUI2MiAxMzUtMTQ2LTMKK2Fsd2F5cyBcdTVCNjMgMTMtMTYtNQorYWx3YXlzIFx1NUI2NCAxMy0zNC0zCithbHdheXMgXHU1QjY1IDEzNDUtMzQtMgorYWx3YXlzIFx1NUI2NiAxNS0yMzYtMgorYWx3YXlzIFx1NUI2NyAyMzQtNQorYWx3YXlzIFx1NUI2OCAxLTEyNDU2LTQKK2Fsd2F5cyBcdTVCNjkgMTIzNS0yNDU2LTIKK2Fsd2F5cyBcdTVCNkEgMTQtMTI0NTYtMgorYWx3YXlzIFx1NUI2QiAxNS0xMjM0NTYtMworYWx3YXlzIFx1NUI2QyAxMzQ1LTE0Ni0zCithbHdheXMgXHU1QjZEIDEzNC0zNDYtMworYWx3YXlzIFx1NUI2RSAyNDUtMTIzNDYtMgorYWx3YXlzIFx1NUI2RiAyNDUtMjM0NS0zCithbHdheXMgXHU1QjcwIDI0LTM0LTIKK2Fsd2F5cyBcdTVCNzEgMTItMTIzNi0yCithbHdheXMgXHU1QjcyIDIzNDU2LTMKK2Fsd2F5cyBcdTVCNzMgMTI1LTE1Ni0zCithbHdheXMgXHU1Qjc0IDEzNDUtMTYtNAorYWx3YXlzIFx1NUI3NSAxMjM0NS0zNC0zCithbHdheXMgXHU1Qjc2IDEyNS0xNTYtMworYWx3YXlzIFx1NUI3NyAxNC0xNi0yCithbHdheXMgXHU1Qjc4IDE1LTIzNi0yCithbHdheXMgXHU1Qjc5IDEzNS0xMjYtNQorYWx3YXlzIFx1NUI3QSAxMjQ1LTM0LTIKK2Fsd2F5cyBcdTVCN0IgMTM0NS0yNDU2LTIKK2Fsd2F5cyBcdTVCN0MgMTM0NS0zNDYtNQorYWx3YXlzIFx1NUI3RCAxMzQ1LTM0Ni01CithbHdheXMgXHU1QjdFIDEzNDU2LTMKK2Fsd2F5cyBcdTVCN0YgMTQtMTI0NTYtMgorYWx3YXlzIFx1NUI4MCAxMzQtMjM0NS0yCithbHdheXMgXHU1QjgxIDEtMzQtNQorYWx3YXlzIFx1NUI4MiAxMjQ1LTEyMzQ2LTQKK2Fsd2F5cyBcdTVCODMgMTI0LTM0NS0zCithbHdheXMgXHU1Qjg0IDEzLTEyNDYtNAorYWx3YXlzIFx1NUI4NSAxLTI0NTYtMgorYWx3YXlzIFx1NUI4NiAyNDUtMjM1LTIKK2Fsd2F5cyBcdTVCODcgMTI1Ni00CithbHdheXMgXHU1Qjg4IDI0LTEyMzU2LTQKK2Fsd2F5cyBcdTVCODkgMTIzNi0zCithbHdheXMgXHU1QjhBIDEyNC0zNC0yCithbHdheXMgXHU1QjhCIDE1LTEyMzQ2LTUKK2Fsd2F5cyBcdTVCOEMgMTI0NTYtMgorYWx3YXlzIFx1NUI4RCAxMjQ1LTEyMzU2LTUKK2Fsd2F5cyBcdTVCOEUgMjQ2LTMKK2Fsd2F5cyBcdTVCOEYgMTIzNS0xMjM0Ni0yCithbHdheXMgXHU1QjkwIDE2LTIKK2Fsd2F5cyBcdTVCOTEgMTMtMTM0NTYtNAorYWx3YXlzIFx1NUI5MiAxLTEyMzQ1Ni0zCithbHdheXMgXHU1QjkzIDEzNC0xNi01CithbHdheXMgXHU1Qjk0IDEtMzQtNAorYWx3YXlzIFx1NUI5NSAxNDUtMTM0Ni01CithbHdheXMgXHU1Qjk2IDEyMzUtMTIzNDYtMgorYWx3YXlzIFx1NUI5NyAxMjUtMTIzNDYtMworYWx3YXlzIFx1NUI5OCAxMy0xMjQ1Ni0zCithbHdheXMgXHU1Qjk5IDEtMTIzNTYtNQorYWx3YXlzIFx1NUI5QSAxNDUtMTM0NTYtNQorYWx3YXlzIFx1NUI5QiAxMjQ1Ni00CithbHdheXMgXHU1QjlDIDE2LTIKK2Fsd2F5cyBcdTVCOUQgMTM1LTE0Ni00CithbHdheXMgXHU1QjlFIDI0LTE1Ni0yCithbHdheXMgXHU1QjlGIDI0LTE1Ni0yCithbHdheXMgXHU1QkEwIDEyLTEyMzQ2LTQKK2Fsd2F5cyBcdTVCQTEgMjQtMTM2LTQKK2Fsd2F5cyBcdTVCQTIgMTIzLTIzNDYtNQorYWx3YXlzIFx1NUJBMyAxNS00NS0zCithbHdheXMgXHU1QkE0IDI0LTE1Ni01CithbHdheXMgXHU1QkE1IDIzNC01CithbHdheXMgXHU1QkE2IDEyMzUtMTI0NTYtNQorYWx3YXlzIFx1NUJBNyAxNi0yCithbHdheXMgXHU1QkE4IDEyNC0yNDYtNAorYWx3YXlzIFx1NUJBOSAyNC0xNTYtNAorYWx3YXlzIFx1NUJBQSAxNS0yMzQ1LTUKK2Fsd2F5cyBcdTVCQUIgMTMtMTIzNDYtMworYWx3YXlzIFx1NUJBQyAxMi0xMzU2LTIKK2Fsd2F5cyBcdTVCQUQgMjQ1LTI1Ni0yCithbHdheXMgXHU1QkFFIDEzLTEyMzQ2LTMKK2Fsd2F5cyBcdTVCQUYgMTUtMjQ2LTMKK2Fsd2F5cyBcdTVCQjAgMTI1LTI0NTYtNAorYWx3YXlzIFx1NUJCMSAxLTM0NS01CithbHdheXMgXHU1QkIyIDI0LTE1Ni0yCithbHdheXMgXHU1QkIzIDEyMzUtMjQ1Ni01CithbHdheXMgXHU1QkI0IDIzNDUtNQorYWx3YXlzIFx1NUJCNSAxNS0yNDYtMworYWx3YXlzIFx1NUJCNiAxMy0yMzQ1Ni0zCithbHdheXMgXHU1QkI3IDI0LTEzNi00CithbHdheXMgXHU1QkI4IDEyLTEzNi0yCithbHdheXMgXHU1QkI5IDEyNDUtMTIzNDYtMgorYWx3YXlzIFx1NUJCQSAxMjM1LTQ1Ni00CithbHdheXMgXHU1QkJCIDEzNC0xNi01CithbHdheXMgXHU1QkJDIDEyMy0xMjM1Ni01CithbHdheXMgXHU1QkJEIDEyMy0xMjQ1Ni0zCithbHdheXMgXHU1QkJFIDEzNS0xNDU2LTMKK2Fsd2F5cyBcdTVCQkYgMTUtMzQtNQorYWx3YXlzIFx1NUJDMCAyNDUtMjQ1Ni00CithbHdheXMgXHU1QkMxIDEyNS0xMjM2LTQKK2Fsd2F5cyBcdTVCQzIgMTMtMTYtMgorYWx3YXlzIFx1NUJDMyA0NS0zCithbHdheXMgXHU1QkM0IDEzLTE2LTUKK2Fsd2F5cyBcdTVCQzUgMTQ1Ni0yCithbHdheXMgXHU1QkM2IDEzNC0xNi01CithbHdheXMgXHU1QkM3IDEyMy0xMjM1Ni01CithbHdheXMgXHU1QkM4IDI0NS0xMzQ1Ni0zCithbHdheXMgXHU1QkM5IDI0NS0yMzYtNQorYWx3YXlzIFx1NUJDQSAxLTEzNi0zCithbHdheXMgXHU1QkNCIDEzLTIzNDUtNAorYWx3YXlzIFx1NUJDQyAxMjM0NS0zNC01CithbHdheXMgXHU1QkNEIDEzNDUtMTM0NTYtMgorYWx3YXlzIFx1NUJDRSAxMzUtMTM0NTYtNQorYWx3YXlzIFx1NUJDRiAxMjM1LTEyNDU2LTIKK2Fsd2F5cyBcdTVCRDAgMTM0LTM1Ni01CithbHdheXMgXHU1QkQxIDI0NS0xNDU2LTQKK2Fsd2F5cyBcdTVCRDIgMTIzNS0xMjM2LTIKK2Fsd2F5cyBcdTVCRDMgMTI1Ni01CithbHdheXMgXHU1QkQ0IDI0LTE1Ni0yCithbHdheXMgXHU1QkQ1IDEzNDUtMTM0NTYtMgorYWx3YXlzIFx1NUJENiAxMy0xNDU2LTUKK2Fsd2F5cyBcdTVCRDcgMTM0NS0xMzQ1Ni0yCithbHdheXMgXHU1QkQ4IDEtMTU2LTUKK2Fsd2F5cyBcdTVCRDkgMTI1Ni00CithbHdheXMgXHU1QkRBIDEzNS0xNDYtNAorYWx3YXlzIFx1NUJEQiAxMjMtMTI0NTYtMworYWx3YXlzIFx1NUJEQyAxMzQ1LTEzNDU2LTIKK2Fsd2F5cyBcdTVCREQgMjQ1LTE0NTYtNAorYWx3YXlzIFx1NUJERSAxMzQtMTI2LTUKK2Fsd2F5cyBcdTVCREYgMTItMzQ1LTIKK2Fsd2F5cyBcdTVCRTAgMTMtMTI1Ni01CithbHdheXMgXHU1QkUxIDEzLTM1LTQKK2Fsd2F5cyBcdTVCRTIgMjQ1LTE0NTYtNAorYWx3YXlzIFx1NUJFMyAxMjM1LTM0LTMKK2Fsd2F5cyBcdTVCRTQgMzQtNQorYWx3YXlzIFx1NUJFNSAxNC0yNDYtMgorYWx3YXlzIFx1NUJFNiAyNC0xNTYtMgorYWx3YXlzIFx1NUJFNyAxMzQ1LTEzNDU2LTIKK2Fsd2F5cyBcdTVCRTggMS0yNDU2LTUKK2Fsd2F5cyBcdTVCRTkgMjQtMTM2LTQKK2Fsd2F5cyBcdTVCRUEgMTI0Ni00CithbHdheXMgXHU1QkVCIDE1LTM0Ni00CithbHdheXMgXHU1QkVDIDEyMy0xMjQ1Ni0zCithbHdheXMgXHU1QkVEIDEyMzUtMTI0Ni01CithbHdheXMgXHU1QkVFIDE0LTI0Ni0yCithbHdheXMgXHU1QkVGIDEzLTI1Ni01CithbHdheXMgXHU1QkYwIDEyMzUtMTI0NTYtMgorYWx3YXlzIFx1NUJGMSAxNi01CithbHdheXMgXHU1QkYyIDE2LTIKK2Fsd2F5cyBcdTVCRjMgMTM1LTE0Ni00CithbHdheXMgXHU1QkY0IDI0NS0xNDU2LTUKK2Fsd2F5cyBcdTVCRjUgMTItMTIzNDYtNAorYWx3YXlzIFx1NUJGNiAxMzUtMTQ2LTQKK2Fsd2F5cyBcdTVCRjcgMTIzNDUtMTM1Ni0zCithbHdheXMgXHU1QkY4IDI0NS0xMjM0NTYtNQorYWx3YXlzIFx1NUJGOSAxNDUtMTI0Ni01CithbHdheXMgXHU1QkZBIDE1LTE1Ni01CithbHdheXMgXHU1QkZCIDE1LTI1Ni0yCithbHdheXMgXHU1QkZDIDE0NS0xNDYtNAorYWx3YXlzIFx1NUJGRCAxNC0xMjU2LTUKK2Fsd2F5cyBcdTVCRkUgMTQ1LTEyNDYtNQorYWx3YXlzIFx1NUJGRiAyNC0xMjM1Ni01CithbHdheXMgXHU1QzAwIDEyMzQtMTI2LTQKK2Fsd2F5cyBcdTVDMDEgMTIzNDUtMTM1Ni0zCithbHdheXMgXHU1QzAyIDEtMTI0NTYtMworYWx3YXlzIFx1NUMwMyAxMjM0NS0zNC0zCithbHdheXMgXHU1QzA0IDI0LTIzNDYtNQorYWx3YXlzIFx1NUMwNSAxMjMtMjM0Ni01CithbHdheXMgXHU1QzA2IDEzLTQ2LTMKK2Fsd2F5cyBcdTVDMDcgMTMtNDYtMworYWx3YXlzIFx1NUMwOCAxLTEyNDU2LTMKK2Fsd2F5cyBcdTVDMDkgMTI0Ni01CithbHdheXMgXHU1QzBBIDEyNS0xMjM0NTYtMworYWx3YXlzIFx1NUMwQiAxNS0yNTYtMgorYWx3YXlzIFx1NUMwQyAyNC0zNC01CithbHdheXMgXHU1QzBEIDE0NS0xMjQ2LTUKK2Fsd2F5cyBcdTVDMEUgMTQ1LTE0Ni00CithbHdheXMgXHU1QzBGIDE1LTI0Ni00CithbHdheXMgXHU1QzEwIDEzLTE2LTMKK2Fsd2F5cyBcdTVDMTEgMjQtMTQ2LTQKK2Fsd2F5cyBcdTVDMTIgMTU2LTQKK2Fsd2F5cyBcdTVDMTMgMTU2LTQKK2Fsd2F5cyBcdTVDMTQgMTU2LTQKK2Fsd2F5cyBcdTVDMTUgMTM0NS0yNDU2LTQKK2Fsd2F5cyBcdTVDMTYgMTMtMjM0NS0zCithbHdheXMgXHU1QzE3IDI0LTM0LTIKK2Fsd2F5cyBcdTVDMTggMTItMTM2LTIKK2Fsd2F5cyBcdTVDMTkgMjQtMTM0Ni01CithbHdheXMgXHU1QzFBIDI0LTEzNDYtNQorYWx3YXlzIFx1NUMxQiAxMzQtMTI2LTIKK2Fsd2F5cyBcdTVDMUMgMTMtMzQ1LTIKK2Fsd2F5cyBcdTVDMUQgMTItMTM0Ni0yCithbHdheXMgXHU1QzFFIDE0LTI0Ni01CithbHdheXMgXHU1QzFGIDE1LTIzNDUtNAorYWx3YXlzIFx1NUMyMCAxNS0yMzQ1LTQKK2Fsd2F5cyBcdTVDMjEgMTIzLTEyMzQ1Ni0zCithbHdheXMgXHU1QzIyIDQ1Ni0zCithbHdheXMgXHU1QzIzIDQ1Ni0zCithbHdheXMgXHU1QzI0IDIzNC0yCithbHdheXMgXHU1QzI1IDE0LTI0Ni01CithbHdheXMgXHU1QzI2IDE0LTI0Ni01CithbHdheXMgXHU1QzI3IDI0Ni0yCithbHdheXMgXHU1QzI4IDEzNC0xMzQ2LTIKK2Fsd2F5cyBcdTVDMjkgNDU2LTMKK2Fsd2F5cyBcdTVDMkEgNDU2LTMKK2Fsd2F5cyBcdTVDMkIgNDU2LTMKK2Fsd2F5cyBcdTVDMkMgMTMtMzQ1LTUKK2Fsd2F5cyBcdTVDMkQgMjQ2LTIKK2Fsd2F5cyBcdTVDMkUgMTQ1LTI1LTUKK2Fsd2F5cyBcdTVDMkYgMTIzLTEyNDYtNQorYWx3YXlzIFx1NUMzMCAxLTEyMzQ2LTQKK2Fsd2F5cyBcdTVDMzEgMTMtMjM0LTUKK2Fsd2F5cyBcdTVDMzIgMTMtMTIzNi0zCithbHdheXMgXHU1QzMzIDEzLTM0LTQKK2Fsd2F5cyBcdTVDMzQgMTMtMTIzNi0zCithbHdheXMgXHU1QzM1IDEyNC0xMjQ2LTIKK2Fsd2F5cyBcdTVDMzYgMTMtMTIzNi0zCithbHdheXMgXHU1QzM3IDEzLTEyMzYtMworYWx3YXlzIFx1NUMzOCAyNC0xNTYtMworYWx3YXlzIFx1NUMzOSAxNDU2LTQKK2Fsd2F5cyBcdTVDM0EgMTItMTU2LTQKK2Fsd2F5cyBcdTVDM0IgMTIzLTE0Ni0zCithbHdheXMgXHU1QzNDIDEzNDUtMTYtMgorYWx3YXlzIFx1NUMzRCAxMy0xNDU2LTUKK2Fsd2F5cyBcdTVDM0UgMTI0Ni00CithbHdheXMgXHU1QzNGIDEzNDUtMjQ2LTUKK2Fsd2F5cyBcdTVDNDAgMTMtMTI1Ni0yCithbHdheXMgXHU1QzQxIDEyMzQtMTYtNQorYWx3YXlzIFx1NUM0MiAyNDUtMTM1Ni0yCithbHdheXMgXHU1QzQzIDE1LTE2LTUKK2Fsd2F5cyBcdTVDNDQgMTM1LTE2LTMKK2Fsd2F5cyBcdTVDNDUgMTMtMTI1Ni0zCithbHdheXMgXHU1QzQ2IDEzLTM0Ni01CithbHdheXMgXHU1QzQ3IDEyNC0yMzQ1LTIKK2Fsd2F5cyBcdTVDNDggMjQ1LTEyNTYtMworYWx3YXlzIFx1NUM0OSAxMjQtMTYtNQorYWx3YXlzIFx1NUM0QSAxMy0zNDYtNQorYWx3YXlzIFx1NUM0QiAzNC0zCithbHdheXMgXHU1QzRDIDE0NS0yNDYtNAorYWx3YXlzIFx1NUM0RCAyNC0xNTYtMworYWx3YXlzIFx1NUM0RSAyNC0xNTYtNAorYWx3YXlzIFx1NUM0RiAxMjM0LTEzNDU2LTIKK2Fsd2F5cyBcdTVDNTAgMTMtMTYtMworYWx3YXlzIFx1NUM1MSAxNS0zNDYtNQorYWx3YXlzIFx1NUM1MiAxMi0xMzYtMgorYWx3YXlzIFx1NUM1MyAxNS0xNi01CithbHdheXMgXHU1QzU0IDEzNDUtMTYtMgorYWx3YXlzIFx1NUM1NSAxLTEyMzYtNAorYWx3YXlzIFx1NUM1NiAxNS0xNi0zCithbHdheXMgXHU1QzU3IDEyNDYtNAorYWx3YXlzIFx1NUM1OCAxMzQtMTIzNi00CithbHdheXMgXHU1QzU5IDIzNDYtMworYWx3YXlzIFx1NUM1QSAxNC0xMjM1Ni01CithbHdheXMgXHU1QzVCIDEyMzQtMTM0NTYtMgorYWx3YXlzIFx1NUM1QyAxMjQtMTYtNQorYWx3YXlzIFx1NUM1RCAxMjM0NS0zNTYtNQorYWx3YXlzIFx1NUM1RSAyNC0zNC00CithbHdheXMgXHU1QzVGIDE1LTM0Ni01CithbHdheXMgXHU1QzYwIDEyNC0zNC0yCithbHdheXMgXHU1QzYxIDE0LTEyNTYtNAorYWx3YXlzIFx1NUM2MiAxNC0xMjU2LTQKK2Fsd2F5cyBcdTVDNjMgMTUtMTYtNAorYWx3YXlzIFx1NUM2NCAyNDUtMTM1Ni0yCithbHdheXMgXHU1QzY1IDE0LTEyNTYtNAorYWx3YXlzIFx1NUM2NiAxMy0xMjU2LTUKK2Fsd2F5cyBcdTVDNjcgMTUtMzQ2LTUKK2Fsd2F5cyBcdTVDNjggMTMtMTI1Ni01CithbHdheXMgXHU1QzY5IDEzLTIzNi0yCithbHdheXMgXHU1QzZBIDE0LTI0Ni0yCithbHdheXMgXHU1QzZCIDEzLTIzNi0yCithbHdheXMgXHU1QzZDIDI0LTM0LTQKK2Fsd2F5cyBcdTVDNkQgMTUtMTYtNQorYWx3YXlzIFx1NUM2RSAxMi0yMzQ2LTUKK2Fsd2F5cyBcdTVDNkYgMTI0LTEyMzQ1Ni0yCithbHdheXMgXHU1QzcwIDEzNDUtMTYtNQorYWx3YXlzIFx1NUM3MSAyNC0xMjM2LTMKK2Fsd2F5cyBcdTVDNzIgMzUtMworYWx3YXlzIFx1NUM3MyAxNS0yMzQ1LTMKK2Fsd2F5cyBcdTVDNzQgMTQtMTYtNQorYWx3YXlzIFx1NUM3NSAyMzQ2LTUKK2Fsd2F5cyBcdTVDNzYgMTQ1LTE0Ni0zCithbHdheXMgXHU1Qzc3IDEyMzUtMTI0Ni01CithbHdheXMgXHU1Qzc4IDE0LTEyMzQ2LTIKK2Fsd2F5cyBcdTVDNzkgMTYtNQorYWx3YXlzIFx1NUM3QSAyNDUtMTYtNAorYWx3YXlzIFx1NUM3QiAxMjQ1LTEzNi01CithbHdheXMgXHU1QzdDIDM0LTUKK2Fsd2F5cyBcdTVDN0QgMTIzNS0xMjM2LTUKK2Fsd2F5cyBcdTVDN0UgMjQtMTM2LTMKK2Fsd2F5cyBcdTVDN0YgMTI1Ni00CithbHdheXMgXHU1QzgwIDEyLTM0LTMKK2Fsd2F5cyBcdTVDODEgMTUtMTI0Ni01CithbHdheXMgXHU1QzgyIDI0NS0xNi00CithbHdheXMgXHU1QzgzIDEyNDUtMTM2LTUKK2Fsd2F5cyBcdTVDODQgMjM2LTUKK2Fsd2F5cyBcdTVDODUgMTM1LTEyMzYtNAorYWx3YXlzIFx1NUM4NiAyNDYtNAorYWx3YXlzIFx1NUM4NyAxMzQ2LTIKK2Fsd2F5cyBcdTVDODggMjM0NTYtMgorYWx3YXlzIFx1NUM4OSAzNC01CithbHdheXMgXHU1QzhBIDEzLTM0Ni0yCithbHdheXMgXHU1QzhCIDIzNDYtNQorYWx3YXlzIFx1NUM4QyAxMy0xNi0yCithbHdheXMgXHU1QzhEIDI0NS0yMzQ1LTMKK2Fsd2F5cyBcdTVDOEUgMTIzNDUtMTM2LTMKK2Fsd2F5cyBcdTVDOEYgMTI0NTYtMgorYWx3YXlzIFx1NUM5MCAyNDUtMTYtMgorYWx3YXlzIFx1NUM5MSAyNDUtMTM2LTIKK2Fsd2F5cyBcdTVDOTIgMjQ1LTIzNDUtMgorYWx3YXlzIFx1NUM5MyAyNDUtMTYtMgorYWx3YXlzIFx1NUM5NCAxMi0zNDUtNQorYWx3YXlzIFx1NUM5NSAxMy0zNDYtNQorYWx3YXlzIFx1NUM5NiAyNDUtMTI1Ni0zCithbHdheXMgXHU1Qzk3IDEzLTEzNDYtNAorYWx3YXlzIFx1NUM5OCAxNS0yMzQ1LTUKK2Fsd2F5cyBcdTVDOTkgMTQ2LTUKK2Fsd2F5cyBcdTVDOUEgMTQtMTIzNi0yCithbHdheXMgXHU1QzlCIDE0NS0xNDYtNAorYWx3YXlzIFx1NUM5QyAxMzUtMzQ1LTMKK2Fsd2F5cyBcdTVDOUQgMTI1LTIzNDYtMgorYWx3YXlzIFx1NUM5RSAxMjUtMjUtNQorYWx3YXlzIFx1NUM5RiA0Ni00CithbHdheXMgXHU1Q0EwIDEzLTEyNTYtNQorYWx3YXlzIFx1NUNBMSAxMy0xMzQ2LTMKK2Fsd2F5cyBcdTVDQTIgMTIzLTIzNDYtNAorYWx3YXlzIFx1NUNBMyAxMy0xMjM1Ni00CithbHdheXMgXHU1Q0E0IDE1LTIzNi01CithbHdheXMgXHU1Q0E1IDEyMzQtMTI2LTMKK2Fsd2F5cyBcdTVDQTYgMTQtMTYtNQorYWx3YXlzIFx1NUNBNyAxMjQtMjQ2LTIKK2Fsd2F5cyBcdTVDQTggMjQ1LTEyNTYtMworYWx3YXlzIFx1NUNBOSAyMzQ1LTIKK2Fsd2F5cyBcdTVDQUEgMTIzNDUtMzQtMgorYWx3YXlzIFx1NUNBQiAxNS0yMzQtNQorYWx3YXlzIFx1NUNBQyAxMy0yMzQ1Ni00CithbHdheXMgXHU1Q0FEIDE0LTEzNDU2LTIKK2Fsd2F5cyBcdTVDQUUgMTI0LTI1LTIKK2Fsd2F5cyBcdTVDQUYgMTIzNC0zNTYtMworYWx3YXlzIFx1NUNCMCAyMzQtNAorYWx3YXlzIFx1NUNCMSAxNDUtMjQ1Ni01CithbHdheXMgXHU1Q0IyIDEyMy00NTYtNQorYWx3YXlzIFx1NUNCMyAyMzYtNQorYWx3YXlzIFx1NUNCNCAyNDUtMTI1Ni0zCithbHdheXMgXHU1Q0I1IDEyMzUtMzQtNQorYWx3YXlzIFx1NUNCNiAxMjM0LTEyNi01CithbHdheXMgXHU1Q0I3IDEzNC0xNDU2LTIKK2Fsd2F5cyBcdTVDQjggMTIzNi01CithbHdheXMgXHU1Q0I5IDEyNC0yNDYtMgorYWx3YXlzIFx1NUNCQSAxNC0xMzQ1Ni0yCithbHdheXMgXHU1Q0JCIDEyLTE1Ni0yCithbHdheXMgXHU1Q0JDIDEyMzQtMTM0NTYtMgorYWx3YXlzIFx1NUNCRCAxNDUtMTIzNDYtMworYWx3YXlzIFx1NUNCRSAxLTEyMzYtMworYWx3YXlzIFx1NUNCRiAxMjMtMTI0Ni0zCithbHdheXMgXHU1Q0MwIDE1LTIzNC01CithbHdheXMgXHU1Q0MxIDEzNC0xNDYtNAorYWx3YXlzIFx1NUNDMiAxMjQtMTIzNDYtMgorYWx3YXlzIFx1NUNDMyAxNS0yMzYtMgorYWx3YXlzIFx1NUNDNCAxNi01CithbHdheXMgXHU1Q0M1IDEzNS0yMzQ1LTUKK2Fsd2F5cyBcdTVDQzYgMTIzNS0yMzQ2LTIKK2Fsd2F5cyBcdTVDQzcgMTIzLTIzNDYtMworYWx3YXlzIFx1NUNDOCAxNC0yNS01CithbHdheXMgXHU1Q0M5IDIzNDYtMgorYWx3YXlzIFx1NUNDQSAxMjM0NS0zNC01CithbHdheXMgXHU1Q0NCIDE1LTI1Ni0yCithbHdheXMgXHU1Q0NDIDE0NS0zNDYtMgorYWx3YXlzIFx1NUNDRCAxNC0zNC01CithbHdheXMgXHU1Q0NFIDEzNi00CithbHdheXMgXHU1Q0NGIDE1Ni00CithbHdheXMgXHU1Q0QwIDEzLTI0NTYtMworYWx3YXlzIFx1NUNEMSAyNDUtNDUtMgorYWx3YXlzIFx1NUNEMiAxNDUtMTIzNDYtNQorYWx3YXlzIFx1NUNEMyAxNi0yCithbHdheXMgXHU1Q0Q0IDEzNC0zNC00CithbHdheXMgXHU1Q0Q1IDI0LTE1Ni0yCithbHdheXMgXHU1Q0Q2IDEyMzYtMworYWx3YXlzIFx1NUNENyAxMjQ2LTIKK2Fsd2F5cyBcdTVDRDggMTIzNS0xMjQ1Ni0yCithbHdheXMgXHU1Q0Q5IDEtMTU2LTUKK2Fsd2F5cyBcdTVDREEgMTM0LTE2LTUKK2Fsd2F5cyBcdTVDREIgMTQtMTYtNAorYWx3YXlzIFx1NUNEQyAxMy0xNi0zCithbHdheXMgXHU1Q0REIDEyNC0xMjM0Ni0yCithbHdheXMgXHU1Q0RFIDEyNDYtMgorYWx3YXlzIFx1NUNERiAyMzQtNQorYWx3YXlzIFx1NUNFMCAxMy0zNC00CithbHdheXMgXHU1Q0UxIDE1LTIzNDU2LTIKK2Fsd2F5cyBcdTVDRTIgMTQtMTYtNAorYWx3YXlzIFx1NUNFMyAyNDYtMgorYWx3YXlzIFx1NUNFNCAxMy0yNDYtNQorYWx3YXlzIFx1NUNFNSAxLTEzNTYtMworYWx3YXlzIFx1NUNFNiAxNC0xMjQ1Ni0yCithbHdheXMgXHU1Q0U3IDEzLTI0Ni0zCithbHdheXMgXHU1Q0U4IDIzNDYtMgorYWx3YXlzIFx1NUNFOSAyMzQ2LTIKK2Fsd2F5cyBcdTVDRUEgMTI1Ni01CithbHdheXMgXHU1Q0VCIDM0Ni0yCithbHdheXMgXHU1Q0VDIDEzNS0zNC0zCithbHdheXMgXHU1Q0VEIDI0NS0yNDYtNQorYWx3YXlzIFx1NUNFRSAyNDUtMjU2LTMKK2Fsd2F5cyBcdTVDRUYgMTIzNDUtMTM1Ni0zCithbHdheXMgXHU1Q0YwIDEyMzQ1LTEzNTYtMworYWx3YXlzIFx1NUNGMSAxMzQ1LTE0Ni0yCithbHdheXMgXHU1Q0YyIDE0LTE2LTQKK2Fsd2F5cyBcdTVDRjMgMjM0LTIKK2Fsd2F5cyBcdTVDRjQgMTUtMjM0NS01CithbHdheXMgXHU1Q0Y1IDEyMzUtMTIzNDYtMgorYWx3YXlzIFx1NUNGNiAxNDUtMTQ2LTQKK2Fsd2F5cyBcdTVDRjcgMjQtMTM2LTMKK2Fsd2F5cyBcdTVDRjggMTItMTM1Ni0yCithbHdheXMgXHU1Q0Y5IDEyNC0zNC0yCithbHdheXMgXHU1Q0ZBIDEzLTEzNTYtNAorYWx3YXlzIFx1NUNGQiAxMy0yNTYtNQorYWx3YXlzIFx1NUNGQyAxMjM1LTE0Ni01CithbHdheXMgXHU1Q0ZEIDE1LTIzNDU2LTIKK2Fsd2F5cyBcdTVDRkUgMTQ1Ni0zCithbHdheXMgXHU1Q0ZGIDEyNTYtNAorYWx3YXlzIFx1NUQwMCAxNC0xNDYtNQorYWx3YXlzIFx1NUQwMSAxMjMtMTIzNi00CithbHdheXMgXHU1RDAyIDE0LTE0Ni0yCithbHdheXMgXHU1RDAzIDE0LTI0NTYtMgorYWx3YXlzIFx1NUQwNCAxNS0yMzQ1LTQKK2Fsd2F5cyBcdTVEMDUgMjQ1LTIzNi01CithbHdheXMgXHU1RDA2IDEyMy0xMjM0Ni0zCithbHdheXMgXHU1RDA3IDEyLTEyMzQ2LTIKK2Fsd2F5cyBcdTVEMDggMTItMTIzNDYtMgorYWx3YXlzIFx1NUQwOSAxMjQtMzQ1LTUKK2Fsd2F5cyBcdTVEMEEgMTQtMTM0NTYtMgorYWx3YXlzIFx1NUQwQiAxMjM1LTM1LTIKK2Fsd2F5cyBcdTVEMEMgMTMtMTI1Ni0zCithbHdheXMgXHU1RDBEIDE0LTI0NTYtMgorYWx3YXlzIFx1NUQwRSAyNDUtMTYtMgorYWx3YXlzIFx1NUQwRiAxMzQtMTQ1Ni0yCithbHdheXMgXHU1RDEwIDEyMy0xMjM0NTYtMworYWx3YXlzIFx1NUQxMSAxMjMtMTIzNDU2LTMKK2Fsd2F5cyBcdTVEMTIgMTI1LTM0LTIKK2Fsd2F5cyBcdTVEMTMgMTMtMzQtNQorYWx3YXlzIFx1NUQxNCAyNDUtMTI0Ni0zCithbHdheXMgXHU1RDE1IDI2LTIKK2Fsd2F5cyBcdTVEMTYgMjYtMgorYWx3YXlzIFx1NUQxNyAxMy0xMzQ2LTQKK2Fsd2F5cyBcdTVEMTggMTQtMTIzNDU2LTIKK2Fsd2F5cyBcdTVEMTkgMTQtMTIzNDU2LTIKK2Fsd2F5cyBcdTVEMUEgMTQtMTM1Ni0yCithbHdheXMgXHU1RDFCIDEzLTIzNi0yCithbHdheXMgXHU1RDFDIDE0NS0yNS0zCithbHdheXMgXHU1RDFEIDEtMTM1Ni0zCithbHdheXMgXHU1RDFFIDEzLTI1LTMKK2Fsd2F5cyBcdTVEMUYgMTQ1Ni0yCithbHdheXMgXHU1RDIwIDE0NS0xMjM0Ni0zCithbHdheXMgXHU1RDIxIDEyMzUtMTIzNi0yCithbHdheXMgXHU1RDIyIDEtMTM1Ni0zCithbHdheXMgXHU1RDIzIDEyNDYtNAorYWx3YXlzIFx1NUQyNCAyNDYtMgorYWx3YXlzIFx1NUQyNSAxMjM0LTE2LTQKK2Fsd2F5cyBcdTVEMjYgMjM0NS0zCithbHdheXMgXHU1RDI3IDE1LTEyMzQ2LTMKK2Fsd2F5cyBcdTVEMjggMTMtMzQ2LTIKK2Fsd2F5cyBcdTVEMjkgMTM1LTEzNTYtMworYWx3YXlzIFx1NUQyQSAxMjUtMzQtMgorYWx3YXlzIFx1NUQyQiAxMy0yMzYtMgorYWx3YXlzIFx1NUQyQyAxNDUtMTIzNDYtMworYWx3YXlzIFx1NUQyRCAxLTEyMzYtNAorYWx3YXlzIFx1NUQyRSAxMy0zNC01CithbHdheXMgXHU1RDJGIDE0NTYtMgorYWx3YXlzIFx1NUQzMCAxMjUtMTU2LTMKK2Fsd2F5cyBcdTVEMzEgMTI1LTIzNDYtMgorYWx3YXlzIFx1NUQzMiAxMjM1LTQ1Ni0yCithbHdheXMgXHU1RDMzIDEyNTYtMgorYWx3YXlzIFx1NUQzNCAxMjQ2LTMKK2Fsd2F5cyBcdTVEMzUgNDYtMgorYWx3YXlzIFx1NUQzNiAxMjM0NS0xMzU2LTMKK2Fsd2F5cyBcdTVEMzcgMjQ1LTIzNC0yCithbHdheXMgXHU1RDM4IDE0NS0xMjM0NTYtNQorYWx3YXlzIFx1NUQzOSAxMjQtMTYtMgorYWx3YXlzIFx1NUQzQSAxNi00CithbHdheXMgXHU1RDNCIDEtMTU2LTUKK2Fsd2F5cyBcdTVEM0MgMjQtMTU2LTUKK2Fsd2F5cyBcdTVEM0QgMTI1LTI0NTYtNAorYWx3YXlzIFx1NUQzRSAyNDYtNAorYWx3YXlzIFx1NUQzRiAyMzQ2LTUKK2Fsd2F5cyBcdTVENDAgMS0zNC01CithbHdheXMgXHU1RDQxIDEyMy0xMjM2LTMKK2Fsd2F5cyBcdTVENDIgMTQtMTI1Ni01CithbHdheXMgXHU1RDQzIDIzNDUtNAorYWx3YXlzIFx1NUQ0NCAxMzQtMzU2LTQKK2Fsd2F5cyBcdTVENDUgMTMtMTIzNi0zCithbHdheXMgXHU1RDQ2IDEzLTE2LTMKK2Fsd2F5cyBcdTVENDcgMTMtMTYtMworYWx3YXlzIFx1NUQ0OCAxMjM1LTEyNDU2LTQKK2Fsd2F5cyBcdTVENDkgMTI0LTEzNDU2LTIKK2Fsd2F5cyBcdTVENEEgMjQtMTM1Ni01CithbHdheXMgXHU1RDRCIDEzNC0zNTYtMgorYWx3YXlzIFx1NUQ0QyAyNDUtMjM0NS0zCithbHdheXMgXHU1RDREIDM0LTUKK2Fsd2F5cyBcdTVENEUgMTI1Ni0yCithbHdheXMgXHU1RDRGIDEyNS0xMjM0Ni0zCithbHdheXMgXHU1RDUwIDE0LTEyMzYtMgorYWx3YXlzIFx1NUQ1MSAxMjM1LTIzNDYtMgorYWx3YXlzIFx1NUQ1MiAyMzQ1LTIKK2Fsd2F5cyBcdTVENTMgMjM0NS0yCithbHdheXMgXHU1RDU0IDEyNDYtNAorYWx3YXlzIFx1NUQ1NSAxMjUtMTIzNDYtMworYWx3YXlzIFx1NUQ1NiAxMi0zNDUtMgorYWx3YXlzIFx1NUQ1NyAxNS0xMjQ2LTUKK2Fsd2F5cyBcdTVENTggMTI0NS0xMjM0Ni0yCithbHdheXMgXHU1RDU5IDEyMy0yMzQ2LTMKK2Fsd2F5cyBcdTVENUEgMjQ1LTE0NTYtMworYWx3YXlzIFx1NUQ1QiAxMjU2LTIKK2Fsd2F5cyBcdTVENUMgMjQ1LTE2LTIKK2Fsd2F5cyBcdTVENUQgMTQtMTIzNTYtNAorYWx3YXlzIFx1NUQ1RSAxMjQtMzQtMgorYWx3YXlzIFx1NUQ1RiAxNDUtMTI0Ni0zCithbHdheXMgXHU1RDYwIDE1LTE2LTMKK2Fsd2F5cyBcdTVENjEgMTIzNDYtMworYWx3YXlzIFx1NUQ2MiAyNDUtMTM0Ni0zCithbHdheXMgXHU1RDYzIDEyNC0xMzQ2LTIKK2Fsd2F5cyBcdTVENjQgMTM0NTYtMgorYWx3YXlzIFx1NUQ2NSAxMy0zNDYtMgorYWx3YXlzIFx1NUQ2NiAyNDU2LTIKK2Fsd2F5cyBcdTVENjcgMTQtMjM0LTIKK2Fsd2F5cyBcdTVENjggMzQtNAorYWx3YXlzIFx1NUQ2OSAxNS0xMjM0Ni0zCithbHdheXMgXHU1RDZBIDI0NS0yNDYtMworYWx3YXlzIFx1NUQ2QiAxMjUtMTU2LTMKK2Fsd2F5cyBcdTVENkMgMTI0Ni0yCithbHdheXMgXHU1RDZEIDEzNS0xMzU2LTMKK2Fsd2F5cyBcdTVENkUgMTQ1LTIzNDUtMworYWx3YXlzIFx1NUQ2RiAyNDUtMjUtMgorYWx3YXlzIFx1NUQ3MCAyNDUtMjM0NS00CithbHdheXMgXHU1RDcxIDIzNS00CithbHdheXMgXHU1RDcyIDEzNDUtMzQ2LTUKK2Fsd2F5cyBcdTVENzMgMjQ1LTI1LTIKK2Fsd2F5cyBcdTVENzQgMTMtMTYtMgorYWx3YXlzIFx1NUQ3NSAyNC0xNTYtMgorYWx3YXlzIFx1NUQ3NiAxMjQ1LTI1LTUKK2Fsd2F5cyBcdTVENzcgMTUtMTIzNDYtNAorYWx3YXlzIFx1NUQ3OCAxMjUtMTIzNDYtMworYWx3YXlzIFx1NUQ3OSAxMy00Ni01CithbHdheXMgXHU1RDdBIDE0LTI0Ni0yCithbHdheXMgXHU1RDdCIDEyMy0xMzQ2LTMKK2Fsd2F5cyBcdTVEN0MgMTItMTIzNi00CithbHdheXMgXHU1RDdEIDE0NS0zNDYtMgorYWx3YXlzIFx1NUQ3RSAyNDUtMTM2LTMKK2Fsd2F5cyBcdTVEN0YgMTQ1LTEzNDU2LTQKK2Fsd2F5cyBcdTVEODAgMTI0LTM0LTMKK2Fsd2F5cyBcdTVEODEgMTQtMTIzNTYtNAorYWx3YXlzIFx1NUQ4MiAxLTEzNDYtNQorYWx3YXlzIFx1NUQ4MyAxLTEyMzYtNAorYWx3YXlzIFx1NUQ4NCAxLTEyMzYtNAorYWx3YXlzIFx1NUQ4NSAxNDYtMgorYWx3YXlzIFx1NUQ4NiAyNDUtMTQ2LTIKK2Fsd2F5cyBcdTVEODcgMjQ1LTEyNTYtMworYWx3YXlzIFx1NUQ4OCAyNDUtNDYtMworYWx3YXlzIFx1NUQ4OSAxMjQ2LTQKK2Fsd2F5cyBcdTVEOEEgMTI1LTEyNDYtNAorYWx3YXlzIFx1NUQ4QiAxNDUtMTQ2LTQKK2Fsd2F5cyBcdTVEOEMgMTQ1LTE0Ni00CithbHdheXMgXHU1RDhEIDE1LTE2LTIKK2Fsd2F5cyBcdTVEOEUgMTI1Ni01CithbHdheXMgXHU1RDhGIDEzNS0xMjYtMgorYWx3YXlzIFx1NUQ5MCAxNC0xMjM0Ni0yCithbHdheXMgXHU1RDkxIDE1LTQ2LTQKK2Fsd2F5cyBcdTVEOTIgMjQ1LTEzNTYtMgorYWx3YXlzIFx1NUQ5MyAxMzUtMTI2LTMKK2Fsd2F5cyBcdTVEOTQgMjQ1LTE0NTYtMworYWx3YXlzIFx1NUQ5NSAxMy0yNDYtMworYWx3YXlzIFx1NUQ5NiAyMzQ1LTQKK2Fsd2F5cyBcdTVEOTcgMTQtMTQ2LTIKK2Fsd2F5cyBcdTVEOTggMS0xMjM2LTUKK2Fsd2F5cyBcdTVEOTkgMTQtMTQ1Ni0yCithbHdheXMgXHU1RDlBIDE0LTI0Ni0yCithbHdheXMgXHU1RDlCIDE0LTI0Ni0yCithbHdheXMgXHU1RDlDIDEzLTE0NTYtMworYWx3YXlzIFx1NUQ5RCAxNDUtMTM1Ni01CithbHdheXMgXHU1RDlFIDE0NS0yNS01CithbHdheXMgXHU1RDlGIDEyNS0xMjM0NTYtMworYWx3YXlzIFx1NURBMCAxMy0yNDYtNQorYWx3YXlzIFx1NURBMSAxMy0xMjQ2LTUKK2Fsd2F5cyBcdTVEQTIgMjQ2LTIKK2Fsd2F5cyBcdTVEQTMgMjQ1LTI0Ni0yCithbHdheXMgXHU1REE0IDI0Ni0yCithbHdheXMgXHU1REE1IDEzLTIzNi0yCithbHdheXMgXHU1REE2IDEtMTIzNi0zCithbHdheXMgXHU1REE3IDE2LTUKK2Fsd2F5cyBcdTVEQTggMTUtMjM2LTIKK2Fsd2F5cyBcdTVEQTkgMTM0NS0xNDYtMgorYWx3YXlzIFx1NURBQSAzNDYtNQorYWx3YXlzIFx1NURBQiAzNDYtNQorYWx3YXlzIFx1NURBQyAxNi0yCithbHdheXMgXHU1REFEIDIzNDYtNQorYWx3YXlzIFx1NURBRSAxNS0yMzQ1LTQKK2Fsd2F5cyBcdTVEQUYgMTMtMTYtMgorYWx3YXlzIFx1NURCMCAxNS0zNDYtNQorYWx3YXlzIFx1NURCMSAxMjMtMjM0Ni00CithbHdheXMgXHU1REIyIDE1LTE2LTMKK2Fsd2F5cyBcdTVEQjMgMTQ1LTE2LTUKK2Fsd2F5cyBcdTVEQjQgMTQ2LTUKK2Fsd2F5cyBcdTVEQjUgMTI1LTEyNDYtNQorYWx3YXlzIFx1NURCNiAxMjQ2LTMKK2Fsd2F5cyBcdTVEQjcgMTYtMgorYWx3YXlzIFx1NURCOCAxMjQ1LTEyMzQ2LTIKK2Fsd2F5cyBcdTVEQjkgMTQ1LTE0Ni00CithbHdheXMgXHU1REJBIDE0LTEzNDU2LTQKK2Fsd2F5cyBcdTVEQkIgMTMtMzQ2LTIKK2Fsd2F5cyBcdTVEQkMgMTI1Ni00CithbHdheXMgXHU1REJEIDIzNi01CithbHdheXMgXHU1REJFIDE0NTYtNAorYWx3YXlzIFx1NURCRiAxMjQ1LTM0LTMKK2Fsd2F5cyBcdTVEQzAgMTMtMzQ2LTIKK2Fsd2F5cyBcdTVEQzEgMTQtMTYtNQorYWx3YXlzIFx1NURDMiAxMy0xMjQ2LTMKK2Fsd2F5cyBcdTVEQzMgMTQtMTIzNDYtMgorYWx3YXlzIFx1NURDNCAxNC0xMjM0Ni0yCithbHdheXMgXHU1REM1IDE0NS0yMzQ1LTMKK2Fsd2F5cyBcdTVEQzYgMTM0NTYtMgorYWx3YXlzIFx1NURDNyAxNS0xNi0zCithbHdheXMgXHU1REM4IDEzLTEyNTYtMgorYWx3YXlzIFx1NURDOSAxMi0xMjM2LTIKK2Fsd2F5cyBcdTVEQ0EgMTM0NTYtNAorYWx3YXlzIFx1NURDQiAxMjMtMTI0Ni0zCithbHdheXMgXHU1RENDIDIzNDUtMgorYWx3YXlzIFx1NURDRCAxMjQ2LTIKK2Fsd2F5cyBcdTVEQ0UgMTM0NS0xNDYtMgorYWx3YXlzIFx1NURDRiAyNDUtNDUtMgorYWx3YXlzIFx1NUREMCAxMi0xNDYtNAorYWx3YXlzIFx1NUREMSAyNDUtMTI0NTYtMgorYWx3YXlzIFx1NUREMiAxNC0xMjQ1Ni0yCithbHdheXMgXHU1REQzIDE0NS0yMzQ1LTMKK2Fsd2F5cyBcdTVERDQgMTQ1LTIzNDUtMworYWx3YXlzIFx1NURENSAxMzQ1LTM0Ni01CithbHdheXMgXHU1REQ2IDIzNDUtMgorYWx3YXlzIFx1NURENyAyMzQ1LTIKK2Fsd2F5cyBcdTVERDggMjM0NS00CithbHdheXMgXHU1REQ5IDEzNDUtMTQ2LTIKK2Fsd2F5cyBcdTVEREEgMjM0NS00CithbHdheXMgXHU1RERCIDEyLTEyNDU2LTMKK2Fsd2F5cyBcdTVEREMgMTIzLTIzNTYtNQorYWx3YXlzIFx1NURERCAxMi0xMjQ1Ni0zCithbHdheXMgXHU1RERFIDEtMTIzNTYtMworYWx3YXlzIFx1NURERiAxMjM1LTQ1Ni0zCithbHdheXMgXHU1REUwIDEzLTEzNDU2LTMKK2Fsd2F5cyBcdTVERTEgMTUtMjU2LTIKK2Fsd2F5cyBcdTVERTIgMTItMTQ2LTIKK2Fsd2F5cyBcdTVERTMgMTItMTQ2LTIKK2Fsd2F5cyBcdTVERTQgMTQtMzQ2LTUKK2Fsd2F5cyBcdTVERTUgMTMtMTIzNDYtMworYWx3YXlzIFx1NURFNiAxMjUtMjUtNAorYWx3YXlzIFx1NURFNyAyNDUtMjQ2LTQKK2Fsd2F5cyBcdTVERTggMTMtMTI1Ni01CithbHdheXMgXHU1REU5IDEzLTEyMzQ2LTQKK2Fsd2F5cyBcdTVERUEgMTMtMTI1Ni01CithbHdheXMgXHU1REVCIDM0LTMKK2Fsd2F5cyBcdTVERUMgMTMtMzQtMworYWx3YXlzIFx1NURFRCAxMzUtMzQtMworYWx3YXlzIFx1NURFRSAxMi0zNDUtMworYWx3YXlzIFx1NURFRiAyNDUtMjM0LTIKK2Fsd2F5cyBcdTVERjAgMjQ1LTIzNC0yCithbHdheXMgXHU1REYxIDEzLTE2LTQKK2Fsd2F5cyBcdTVERjIgMTYtNAorYWx3YXlzIFx1NURGMyAxNS0xNTYtNQorYWx3YXlzIFx1NURGNCAxMzUtMzQ1LTMKK2Fsd2F5cyBcdTVERjUgMS0xNTYtMworYWx3YXlzIFx1NURGNiAxLTE0Ni0zCithbHdheXMgXHU1REY3IDE1LTQ2LTUKK2Fsd2F5cyBcdTVERjggMTYtMgorYWx3YXlzIFx1NURGOSAxMy0xNDU2LTQKK2Fsd2F5cyBcdTVERkEgMTUtMjU2LTUKK2Fsd2F5cyBcdTVERkIgMTMtNDUtNAorYWx3YXlzIFx1NURGQyAxMjM0NS0zNDUtMgorYWx3YXlzIFx1NURGRCAxNS0yNTYtNQorYWx3YXlzIFx1NURGRSAxMy0xNDU2LTMKK2Fsd2F5cyBcdTVERkYgMTIzNDUtMzQtMgorYWx3YXlzIFx1NUUwMCAxMjUtMzQ1LTMKK2Fsd2F5cyBcdTVFMDEgMTM1LTE2LTUKK2Fsd2F5cyBcdTVFMDIgMjQtMTU2LTUKK2Fsd2F5cyBcdTVFMDMgMTM1LTM0LTUKK2Fsd2F5cyBcdTVFMDQgMTQ1LTEzNDU2LTMKK2Fsd2F5cyBcdTVFMDUgMjQtMjM1Ni01CithbHdheXMgXHU1RTA2IDEyMzQ1LTEyMzYtMgorYWx3YXlzIFx1NUUwNyAxMzQ1LTM0Ni01CithbHdheXMgXHU1RTA4IDI0LTE1Ni0zCithbHdheXMgXHU1RTA5IDEyMzQ1LTEzNi0zCithbHdheXMgXHU1RTBBIDEyMzQtMzQ1LTUKK2Fsd2F5cyBcdTVFMEIgMS0xNTYtNAorYWx3YXlzIFx1NUUwQyAxNS0xNi0zCithbHdheXMgXHU1RTBEIDEyMzUtMzQtNQorYWx3YXlzIFx1NUUwRSAxNDUtMTIzNi01CithbHdheXMgXHU1RTBGIDEyNDYtMgorYWx3YXlzIFx1NUUxMCAxLTEzNDYtNQorYWx3YXlzIFx1NUUxMSAxMjQtMTM0Ni00CithbHdheXMgXHU1RTEyIDE0NS0yNDU2LTUKK2Fsd2F5cyBcdTVFMTMgMzUtNQorYWx3YXlzIFx1NUUxNCAxMjM0LTM1Ni01CithbHdheXMgXHU1RTE1IDEyMzQtMzQ1LTUKK2Fsd2F5cyBcdTVFMTYgMTI0LTM0Ni00CithbHdheXMgXHU1RTE3IDEyMzQ1LTM0LTIKK2Fsd2F5cyBcdTVFMTggMTQtMjM0NS0yCithbHdheXMgXHU1RTE5IDEtMTU2LTUKK2Fsd2F5cyBcdTVFMUEgMS0xMjM1Ni00CithbHdheXMgXHU1RTFCIDEzNS0xMjYtMgorYWx3YXlzIFx1NUUxQyAxLTE1Ni01CithbHdheXMgXHU1RTFEIDE0NS0xNi01CithbHdheXMgXHU1RTFFIDEzNC0xMjYtNQorYWx3YXlzIFx1NUUxRiAxNi01CithbHdheXMgXHU1RTIwIDE2LTUKK2Fsd2F5cyBcdTVFMjEgMTIzNC0xMzQ1Ni0yCithbHdheXMgXHU1RTIyIDI0NS0yMzQ1Ni01CithbHdheXMgXHU1RTIzIDEzLTQ1LTUKK2Fsd2F5cyBcdTVFMjQgMTI0NS0zNC0yCithbHdheXMgXHU1RTI1IDI0LTIzNTYtNQorYWx3YXlzIFx1NUUyNiAxNDUtMjQ1Ni01CithbHdheXMgXHU1RTI3IDEtMTM2LTMKK2Fsd2F5cyBcdTVFMjggMjQtMTI0Ni01CithbHdheXMgXHU1RTI5IDI0NS0yNDYtNQorYWx3YXlzIFx1NUUyQSAxLTEzNi0zCithbHdheXMgXHU1RTJCIDI0LTE1Ni0zCithbHdheXMgXHU1RTJDIDI0NS0yNTYtMgorYWx3YXlzIFx1NUUyRCAxNS0xNi0yCithbHdheXMgXHU1RTJFIDEzNS0xMzQ2LTMKK2Fsd2F5cyBcdTVFMkYgMTQ1LTI0NTYtNQorYWx3YXlzIFx1NUUzMCAxMy0xMjQ2LTMKK2Fsd2F5cyBcdTVFMzEgMTItMTIzNTYtMgorYWx3YXlzIFx1NUUzMiAxMjM0LTEzNDU2LTIKK2Fsd2F5cyBcdTVFMzMgMS0xMzQ2LTUKK2Fsd2F5cyBcdTVFMzQgMTMtMjM0NS00CithbHdheXMgXHU1RTM1IDEyNDU2LTMKK2Fsd2F5cyBcdTVFMzYgMTQ1LTI0NTYtNQorYWx3YXlzIFx1NUUzNyAxMjQ2LTIKK2Fsd2F5cyBcdTVFMzggMTItMTM0Ni0yCithbHdheXMgXHU1RTM5IDI0LTM0NS01CithbHdheXMgXHU1RTNBIDI0NS0xNi0yCithbHdheXMgXHU1RTNCIDEyNS0yMzQ2LTIKK2Fsd2F5cyBcdTVFM0MgMTMtMjUtMgorYWx3YXlzIFx1NUUzRCAxMzQtMTQ2LTUKK2Fsd2F5cyBcdTVFM0UgMTQ1LTM0LTQKK2Fsd2F5cyBcdTVFM0YgMTIzNS0xMjM1Ni0yCithbHdheXMgXHU1RTQwIDEtMTM1Ni01CithbHdheXMgXHU1RTQxIDE1LTEyNTYtMworYWx3YXlzIFx1NUU0MiAxMzQtMTYtNQorYWx3YXlzIFx1NUU0MyAxMjQ2LTIKK2Fsd2F5cyBcdTVFNDQgMjUtNQorYWx3YXlzIFx1NUU0NSAxMjM0NS0zNC0yCithbHdheXMgXHU1RTQ2IDE2LTUKK2Fsd2F5cyBcdTVFNDcgMTM1LTEzNDYtMworYWx3YXlzIFx1NUU0OCAxMjM0LTEzNDU2LTIKK2Fsd2F5cyBcdTVFNDkgMTQ1LTM0Ni0yCithbHdheXMgXHU1RTRBIDEzLTEyMzQ2LTMKK2Fsd2F5cyBcdTVFNEIgMTIzNC0xMjM2LTIKK2Fsd2F5cyBcdTVFNEMgMTIzNS00NTYtNAorYWx3YXlzIFx1NUU0RCAxMjQtMTQ2LTMKK2Fsd2F5cyBcdTVFNEUgMTM0LTE2LTUKK2Fsd2F5cyBcdTVFNEYgMTMtMjM0NTYtNQorYWx3YXlzIFx1NUU1MCAxMjQtMTM1Ni0yCithbHdheXMgXHU1RTUxIDEyMzUtMTI0Ni0zCithbHdheXMgXHU1RTUyIDEtMTIzNDYtMworYWx3YXlzIFx1NUU1MyAyNC0xMzYtMworYWx3YXlzIFx1NUU1NCAxMzQtMTIzNi01CithbHdheXMgXHU1RTU1IDEzNC0zNC01CithbHdheXMgXHU1RTU2IDEzNS0yNDYtMworYWx3YXlzIFx1NUU1NyAxMy0yNS0yCithbHdheXMgXHU1RTU4IDEyNS0yMzQ2LTIKK2Fsd2F5cyBcdTVFNTkgMTM0LTM0LTUKK2Fsd2F5cyBcdTVFNUEgMTM1LTEzNDYtMworYWx3YXlzIFx1NUU1QiAxLTEzNDYtNQorYWx3YXlzIFx1NUU1QyAxMy0yMzUtNAorYWx3YXlzIFx1NUU1RCAxMi0xMjM2LTQKK2Fsd2F5cyBcdTVFNUUgMTIzNDUtMzQtMgorYWx3YXlzIFx1NUU1RiAxLTE1Ni01CithbHdheXMgXHU1RTYwIDEyMzUtMzQtMworYWx3YXlzIFx1NUU2MSAxMjM0NS0xMjM2LTMKK2Fsd2F5cyBcdTVFNjIgMTItNDU2LTIKK2Fsd2F5cyBcdTVFNjMgMTM1LTE2LTUKK2Fsd2F5cyBcdTVFNjQgMTQ1LTE2LTUKK2Fsd2F5cyBcdTVFNjUgMS0xMzQ2LTQKK2Fsd2F5cyBcdTVFNjYgMTM0LTE2LTUKK2Fsd2F5cyBcdTVFNjcgMjQ1LTE0Ni0zCithbHdheXMgXHU1RTY4IDEyLTEyMzYtMworYWx3YXlzIFx1NUU2OSAxMjM0NS0xMzYtMgorYWx3YXlzIFx1NUU2QSAxMzQtMTM1Ni0yCithbHdheXMgXHU1RTZCIDEzNS0xMzQ2LTMKK2Fsd2F5cyBcdTVFNkMgMTItMTIzNTYtMgorYWx3YXlzIFx1NUU2RCAxMzQtMzQ2LTUKK2Fsd2F5cyBcdTVFNkUgMTItMzQtMgorYWx3YXlzIFx1NUU2RiAxMy0zNDYtMgorYWx3YXlzIFx1NUU3MCAxNS0yMzQ1LTQKK2Fsd2F5cyBcdTVFNzEgMTQtMTIzNi0yCithbHdheXMgXHU1RTcyIDEzLTEyMzYtMworYWx3YXlzIFx1NUU3MyAxMjM0LTEzNDU2LTIKK2Fsd2F5cyBcdTVFNzQgMTM0NS0yMzQ1LTIKK2Fsd2F5cyBcdTVFNzUgMTMtMjM0NS0zCithbHdheXMgXHU1RTc2IDEzNS0xMzQ1Ni01CithbHdheXMgXHU1RTc3IDEzNS0xMzQ1Ni01CithbHdheXMgXHU1RTc4IDE1LTEzNDU2LTUKK2Fsd2F5cyBcdTVFNzkgMTMtMTIzNi01CithbHdheXMgXHU1RTdBIDI0Ni0zCithbHdheXMgXHU1RTdCIDEyMzUtMTI0NTYtNQorYWx3YXlzIFx1NUU3QyAyMzQtNQorYWx3YXlzIFx1NUU3RCAyMzQtMworYWx3YXlzIFx1NUU3RSAxMy0xNi00CithbHdheXMgXHU1RTdGIDEzLTQ1Ni00CithbHdheXMgXHU1RTgwIDEyMzQtMTYtNAorYWx3YXlzIFx1NUU4MSAxMjQtMTM0NTYtMworYWx3YXlzIFx1NUU4MiAxMjUtMjM0Ni01CithbHdheXMgXHU1RTgzIDEzLTQ1Ni00CithbHdheXMgXHU1RTg0IDEtNDU2LTMKK2Fsd2F5cyBcdTVFODUgMTM0LTIzNDYtMQorYWx3YXlzIFx1NUU4NiAyNDUtMTM0NTYtNQorYWx3YXlzIFx1NUU4NyAxMzUtMTYtNQorYWx3YXlzIFx1NUU4OCAyNDUtMTQ1Ni0yCithbHdheXMgXHU1RTg5IDE0NS0xMjM0NTYtNQorYWx3YXlzIFx1NUU4QSAxMi00NTYtMgorYWx3YXlzIFx1NUU4QiAxMy0xMjQ2LTQKK2Fsd2F5cyBcdTVFOEMgMjM0NTYtNAorYWx3YXlzIFx1NUU4RCAxMzUtMjQ1Ni01CithbHdheXMgXHU1RThFIDEzLTM0Ni01CithbHdheXMgXHU1RThGIDE1LTEyNTYtNQorYWx3YXlzIFx1NUU5MCAxNC0zNC0yCithbHdheXMgXHU1RTkxIDM0LTQKK2Fsd2F5cyBcdTVFOTIgMS00NTYtMworYWx3YXlzIFx1NUU5MyAxMjMtMzQtNQorYWx3YXlzIFx1NUU5NCAxMzQ1Ni0zCithbHdheXMgXHU1RTk1IDE0NS0xNi00CithbHdheXMgXHU1RTk2IDEyMzQtMTQ2LTIKK2Fsd2F5cyBcdTVFOTcgMTQ1LTIzNDUtNQorYWx3YXlzIFx1NUU5OCAyMzQ1Ni0zCithbHdheXMgXHU1RTk5IDEzNC0yNDYtNQorYWx3YXlzIFx1NUU5QSAxMy0xMzU2LTMKK2Fsd2F5cyBcdTVFOUIgMjQ1LTE1Ni01CithbHdheXMgXHU1RTlDIDEyMzQ1LTM0LTQKK2Fsd2F5cyBcdTVFOUQgMTI0LTEyMzQ2LTIKK2Fsd2F5cyBcdTVFOUUgMTIzNC0xMzQ2LTIKK2Fsd2F5cyBcdTVFOUYgMTIzNDUtMzU2LTUKK2Fsd2F5cyBcdTVFQTAgMTUtNDYtMgorYWx3YXlzIFx1NUVBMSAxNi00CithbHdheXMgXHU1RUEyIDEtMTU2LTUKK2Fsd2F5cyBcdTVFQTMgMTI0LTI0Ni0zCithbHdheXMgXHU1RUE0IDEtMTU2LTUKK2Fsd2F5cyBcdTVFQTUgMTUtMjM0LTMKK2Fsd2F5cyBcdTVFQTYgMTQ1LTM0LTUKK2Fsd2F5cyBcdTVFQTcgMTI1LTI1LTUKK2Fsd2F5cyBcdTVFQTggMTUtMjQ2LTMKK2Fsd2F5cyBcdTVFQTkgMTI0LTM0LTIKK2Fsd2F5cyBcdTVFQUEgMTMtMTI0Ni00CithbHdheXMgXHU1RUFCIDEyMy0zNC01CithbHdheXMgXHU1RUFDIDEyMzQtMTM0Ni0yCithbHdheXMgXHU1RUFEIDEyNC0xMzQ1Ni0yCithbHdheXMgXHU1RUFFIDIzNC00CithbHdheXMgXHU1RUFGIDEzNS0zNC0zCithbHdheXMgXHU1RUIwIDEzNS0xMzQ1Ni01CithbHdheXMgXHU1RUIxIDEyLTEzNTYtNAorYWx3YXlzIFx1NUVCMiAxNC0yNDU2LTIKK2Fsd2F5cyBcdTVFQjMgMTM1LTM1Ni0zCithbHdheXMgXHU1RUI0IDEzLTE2LTIKK2Fsd2F5cyBcdTVFQjUgMTIzNi0zCithbHdheXMgXHU1RUI2IDI0LTM0LTUKK2Fsd2F5cyBcdTVFQjcgMTIzLTEzNDYtMworYWx3YXlzIFx1NUVCOCAyMzUtMworYWx3YXlzIFx1NUVCOSAxMjQtMjUtMgorYWx3YXlzIFx1NUVCQSAxNS0xMjM0Ni0zCithbHdheXMgXHU1RUJCIDI0LTM0LTUKK2Fsd2F5cyBcdTVFQkMgMjQ1LTEzNDU2LTQKK2Fsd2F5cyBcdTVFQkQgMTI1Ni01CithbHdheXMgXHU1RUJFIDEyNTYtNAorYWx3YXlzIFx1NUVCRiAxMzQtMjQ2LTUKK2Fsd2F5cyBcdTVFQzAgMTUtMTIzNTYtMworYWx3YXlzIFx1NUVDMSAyNDUtMjM0Ni01CithbHdheXMgXHU1RUMyIDE1LTQ2LTMKK2Fsd2F5cyBcdTVFQzMgMTIzNDUtMzU2LTUKK2Fsd2F5cyBcdTVFQzQgMTMtMjM0LTUKK2Fsd2F5cyBcdTVFQzUgMTIzNS0yMzQ2LTIKK2Fsd2F5cyBcdTVFQzYgMTIzNS0xMjQ2LTUKK2Fsd2F5cyBcdTVFQzcgMTQtMjM0LTUKK2Fsd2F5cyBcdTVFQzggMTUtMjM0NTYtNQorYWx3YXlzIFx1NUVDOSAxNC0yMzQ1LTIKK2Fsd2F5cyBcdTVFQ0EgMTQtMTM0Ni0yCithbHdheXMgXHU1RUNCIDE1LTEyMzU2LTMKK2Fsd2F5cyBcdTVFQ0MgMS0xNTYtNQorYWx3YXlzIFx1NUVDRCAxMjM0LTEyMzU2LTQKK2Fsd2F5cyBcdTVFQ0UgMjQ1LTEzNDU2LTQKK2Fsd2F5cyBcdTVFQ0YgMTMtMjM0LTUKK2Fsd2F5cyBcdTVFRDAgMTMtMjM0LTUKK2Fsd2F5cyBcdTVFRDEgMTMtMTQ1Ni00CithbHdheXMgXHU1RUQyIDE0Ni0yCithbHdheXMgXHU1RUQzIDEyMy0yNS01CithbHdheXMgXHU1RUQ0IDE0LTEyMzU2LTIKK2Fsd2F5cyBcdTVFRDUgMTQ1Ni01CithbHdheXMgXHU1RUQ2IDE0LTI0Ni01CithbHdheXMgXHU1RUQ3IDE0NS0yNDU2LTUKK2Fsd2F5cyBcdTVFRDggMTQtMzQtNQorYWx3YXlzIFx1NUVEOSAxNi01CithbHdheXMgXHU1RURBIDEyLTM0LTIKK2Fsd2F5cyBcdTVFREIgMTItMTIzNi0yCithbHdheXMgXHU1RURDIDEyNC0zNC0zCithbHdheXMgXHU1RUREIDE1LTE1Ni0zCithbHdheXMgXHU1RURFIDI0NS0xNDU2LTMKK2Fsd2F5cyBcdTVFREYgMTM0LTI0Ni01CithbHdheXMgXHU1RUUwIDEyLTEzNDYtNAorYWx3YXlzIFx1NUVFMSAzNC00CithbHdheXMgXHU1RUUyIDEyMzQ1LTM1Ni01CithbHdheXMgXHU1RUUzIDEzLTQ1Ni00CithbHdheXMgXHU1RUU0IDEzLTM0LTUKK2Fsd2F5cyBcdTVFRTUgMTIzLTIzNTYtNQorYWx3YXlzIFx1NUVFNiAxMzUtMTYtNQorYWx3YXlzIFx1NUVFNyAyNDUtNDYtMgorYWx3YXlzIFx1NUVFOCAxNS0zNDYtNQorYWx3YXlzIFx1NUVFOSAxNC0xNDU2LTQKK2Fsd2F5cyBcdTVFRUEgMTQtMTQ1Ni00CithbHdheXMgXHU1RUVCIDE0LTI0Ni0yCithbHdheXMgXHU1RUVDIDE0LTM0LTIKK2Fsd2F5cyBcdTVFRUQgMTMtMTYtNQorYWx3YXlzIFx1NUVFRSAxMzQ1Ni0yCithbHdheXMgXHU1RUVGIDE1LTIzNDUtMworYWx3YXlzIFx1NUVGMCAxMjQtMTM0NTYtMworYWx3YXlzIFx1NUVGMSAyMzUtMworYWx3YXlzIFx1NUVGMiAxNC0xNi0yCithbHdheXMgXHU1RUYzIDEyNC0xMzQ1Ni0zCithbHdheXMgXHU1RUY0IDE0NTYtNAorYWx3YXlzIFx1NUVGNSAxNS0yNTYtMgorYWx3YXlzIFx1NUVGNiAyMzQ1LTIKK2Fsd2F5cyBcdTVFRjcgMTI0LTEzNDU2LTIKK2Fsd2F5cyBcdTVFRjggMTQ1LTE2LTIKK2Fsd2F5cyBcdTVFRjkgMTIzNC0xMjYtNQorYWx3YXlzIFx1NUVGQSAxMy0yMzQ1LTUKK2Fsd2F5cyBcdTVFRkIgMTIzNS0xMjQ2LTIKK2Fsd2F5cyBcdTVFRkMgMTM0NS0yNDU2LTQKK2Fsd2F5cyBcdTVFRkQgMTIzNS0xMjQ2LTIKK2Fsd2F5cyBcdTVFRkUgMTMtMTIzNDYtNAorYWx3YXlzIFx1NUVGRiAxMzQ1LTIzNDUtNQorYWx3YXlzIFx1NUYwMCAxMjMtMjQ1Ni0zCithbHdheXMgXHU1RjAxIDEzNS0yMzQ1LTUKK2Fsd2F5cyBcdTVGMDIgMTYtNQorYWx3YXlzIFx1NUYwMyAyNDUtMTYtNQorYWx3YXlzIFx1NUYwNCAxMzQ1LTEyMzQ2LTUKK2Fsd2F5cyBcdTVGMDUgMTIzNDUtMTM2LTIKK2Fsd2F5cyBcdTVGMDYgMTMtMTI1Ni00CithbHdheXMgXHU1RjA3IDIzNDUtNAorYWx3YXlzIFx1NUYwOCAxNi01CithbHdheXMgXHU1RjA5IDEyNS0xMzQ2LTUKK2Fsd2F5cyBcdTVGMEEgMTM1LTE2LTUKK2Fsd2F5cyBcdTVGMEIgMTYtNQorYWx3YXlzIFx1NUYwQyAxNi0zCithbHdheXMgXHU1RjBEIDE1Ni01CithbHdheXMgXHU1RjBFIDE1LTEyMzYtMworYWx3YXlzIFx1NUYwRiAyNC0xNTYtNQorYWx3YXlzIFx1NUYxMCAxNTYtNQorYWx3YXlzIFx1NUYxMSAyNC0xNTYtNQorYWx3YXlzIFx1NUYxMiAyNC0xNTYtNQorYWx3YXlzIFx1NUYxMyAxMy0xMjM0Ni0zCithbHdheXMgXHU1RjE0IDE0NS0yNDYtNQorYWx3YXlzIFx1NUYxNSAxNDU2LTQKK2Fsd2F5cyBcdTVGMTYgMTIzNS0zNC01CithbHdheXMgXHU1RjE3IDEyMzQ1LTM0LTIKK2Fsd2F5cyBcdTVGMTggMTIzNS0xMjM0Ni0yCithbHdheXMgXHU1RjE5IDM0LTMKK2Fsd2F5cyBcdTVGMUEgMTIzLTEyNDYtMgorYWx3YXlzIFx1NUYxQiAxMi0xNTYtMgorYWx3YXlzIFx1NUYxQyAxMy00Ni01CithbHdheXMgXHU1RjFEIDEzNS0zNDUtNQorYWx3YXlzIFx1NUYxRSAyNC0xMzYtNAorYWx3YXlzIFx1NUYxRiAxNDUtMTYtNQorYWx3YXlzIFx1NUYyMCAxLTEzNDYtMworYWx3YXlzIFx1NUYyMSAxMy0yMzYtMgorYWx3YXlzIFx1NUYyMiAxMjQtMTQ2LTMKK2Fsd2F5cyBcdTVGMjMgMTIzNDUtMzQtNAorYWx3YXlzIFx1NUYyNCAxNDUtMTYtNAorYWx3YXlzIFx1NUYyNSAxMzQtMTYtMgorYWx3YXlzIFx1NUYyNiAxNS0yMzQ1LTIKK2Fsd2F5cyBcdTVGMjcgMTIzNS0zNC0yCithbHdheXMgXHU1RjI4IDEyLTE0Ni0zCithbHdheXMgXHU1RjI5IDEzNDUtMzQtNAorYWx3YXlzIFx1NUYyQSAxMy0xMzQ1Ni01CithbHdheXMgXHU1RjJCIDEtMTM2LTQKK2Fsd2F5cyBcdTVGMkMgMTYtMgorYWx3YXlzIFx1NUYyRCAxMzQtMTYtNAorYWx3YXlzIFx1NUYyRSAyNDUtNDUtMworYWx3YXlzIFx1NUYyRiAxMjQ1Ni0zCithbHdheXMgXHU1RjMwIDI0LTE0Ni0zCithbHdheXMgXHU1RjMxIDEyNDUtMjUtNQorYWx3YXlzIFx1NUYzMiAxNS00NS0zCithbHdheXMgXHU1RjMzIDEzLTEzNDU2LTUKK2Fsd2F5cyBcdTVGMzQgMTQ1LTEyMzQ1Ni0zCithbHdheXMgXHU1RjM1IDEtMTM0Ni0zCithbHdheXMgXHU1RjM2IDEzLTQ2LTUKK2Fsd2F5cyBcdTVGMzcgMjQ1LTQ2LTIKK2Fsd2F5cyBcdTVGMzggMTIzNC0xMzU2LTIKK2Fsd2F5cyBcdTVGMzkgMTQ1LTEyMzYtNQorYWx3YXlzIFx1NUYzQSAyNDUtNDYtMgorYWx3YXlzIFx1NUYzQiAxMzUtMTYtNQorYWx3YXlzIFx1NUYzQyAxMzUtMTYtNQorYWx3YXlzIFx1NUYzRCAyNC0yMzQ2LTUKK2Fsd2F5cyBcdTVGM0UgMTQ1LTEyMzYtNQorYWx3YXlzIFx1NUYzRiAxMy0yMzQ1LTQKK2Fsd2F5cyBcdTVGNDAgMTMtMTIzNTYtNQorYWx3YXlzIFx1NUY0MSAxMy0yMzQ2LTMKK2Fsd2F5cyBcdTVGNDIgMTIzNDUtMzQ1LTMKK2Fsd2F5cyBcdTVGNDMgMTM1LTE2LTUKK2Fsd2F5cyBcdTVGNDQgMTIzLTEyMzU2LTMKK2Fsd2F5cyBcdTVGNDUgMTMtMjM0NS00CithbHdheXMgXHU1RjQ2IDEzNS0zNDYtNQorYWx3YXlzIFx1NUY0NyAxNS0yNDYtMworYWx3YXlzIFx1NUY0OCAxMjQtMTIzNi0yCithbHdheXMgXHU1RjQ5IDEyMzUtMjUtNQorYWx3YXlzIFx1NUY0QSAyNDUtNDYtMgorYWx3YXlzIFx1NUY0QiAxMjM1LTEyMzQ2LTIKK2Fsd2F5cyBcdTVGNEMgMTM0LTE2LTIKK2Fsd2F5cyBcdTVGNEQgMTIzLTI1LTUKK2Fsd2F5cyBcdTVGNEUgMTI0NTYtMworYWx3YXlzIFx1NUY0RiAxMy0yMzYtMgorYWx3YXlzIFx1NUY1MCAxMy0xNi01CithbHdheXMgXHU1RjUxIDEzLTE2LTUKK2Fsd2F5cyBcdTVGNTIgMTMtMTI0Ni0zCithbHdheXMgXHU1RjUzIDE0NS0xMzQ2LTMKK2Fsd2F5cyBcdTVGNTQgMTQtMzQtNQorYWx3YXlzIFx1NUY1NSAxNC0zNC01CithbHdheXMgXHU1RjU2IDEyNC0xMjQ1Ni01CithbHdheXMgXHU1RjU3IDEyMzUtMTI0Ni01CithbHdheXMgXHU1RjU4IDEtMTU2LTUKK2Fsd2F5cyBcdTVGNTkgMTIzNS0xMjQ2LTUKK2Fsd2F5cyBcdTVGNUEgMTIzNS0xMjQ2LTUKK2Fsd2F5cyBcdTVGNUIgMTYtMgorYWx3YXlzIFx1NUY1QyAxNi0yCithbHdheXMgXHU1RjVEIDE2LTIKK2Fsd2F5cyBcdTVGNUUgMTYtMgorYWx3YXlzIFx1NUY1RiAxMjM1LTI1LTUKK2Fsd2F5cyBcdTVGNjAgMTIzNS0yNS01CithbHdheXMgXHU1RjYxIDI0LTEyMzYtMworYWx3YXlzIFx1NUY2MiAxNS0xMzQ1Ni0yCithbHdheXMgXHU1RjYzIDEyMzQ1Ni0yCithbHdheXMgXHU1RjY0IDEyNC0xMjM0Ni0yCithbHdheXMgXHU1RjY1IDIzNDUtNQorYWx3YXlzIFx1NUY2NiAyMzQ1LTUKK2Fsd2F5cyBcdTVGNjcgMTI1Ni01CithbHdheXMgXHU1RjY4IDEyLTE1Ni0zCithbHdheXMgXHU1RjY5IDI0NS0yNDU2LTQKK2Fsd2F5cyBcdTVGNkEgMTM1LTI0Ni0zCithbHdheXMgXHU1RjZCIDE0NS0yNDYtMworYWx3YXlzIFx1NUY2QyAxMzUtMTQ1Ni0zCithbHdheXMgXHU1RjZEIDEyMzQtMTM1Ni0yCithbHdheXMgXHU1RjZFIDIzNS00CithbHdheXMgXHU1RjZGIDEyMzQtMjQ2LTMKK2Fsd2F5cyBcdTVGNzAgMS0xMzQ2LTMKK2Fsd2F5cyBcdTVGNzEgMTM0NTYtNAorYWx3YXlzIFx1NUY3MiAxMi0xNTYtMworYWx3YXlzIFx1NUY3MyAxMi0xNTYtNQorYWx3YXlzIFx1NUY3NCAxMzUtMTI2LTIKK2Fsd2F5cyBcdTVGNzUgMTI0LTI1LTQKK2Fsd2F5cyBcdTVGNzYgMTMtMTYtMgorYWx3YXlzIFx1NUY3NyAxMjM0NS0xMzQ2LTQKK2Fsd2F5cyBcdTVGNzggMS0xMjM0Ni0zCithbHdheXMgXHU1Rjc5IDE2LTUKK2Fsd2F5cyBcdTVGN0EgNDU2LTIKK2Fsd2F5cyBcdTVGN0IgMTItMjM0Ni01CithbHdheXMgXHU1RjdDIDEzNS0xNi00CithbHdheXMgXHU1RjdEIDE0NS0xNi0zCithbHdheXMgXHU1RjdFIDE0LTEzNDU2LTQKK2Fsd2F5cyBcdTVGN0YgMTIzNDUtMzQtMgorYWx3YXlzIFx1NUY4MCA0NTYtNAorYWx3YXlzIFx1NUY4MSAxLTEzNTYtMworYWx3YXlzIFx1NUY4MiAyNDUtMzQtMgorYWx3YXlzIFx1NUY4MyA0NTYtNAorYWx3YXlzIFx1NUY4NCAxMy0xMzQ1Ni01CithbHdheXMgXHU1Rjg1IDE0NS0yNDU2LTUKK2Fsd2F5cyBcdTVGODYgMTUtMTYtMworYWx3YXlzIFx1NUY4NyAxNS0yNTYtMgorYWx3YXlzIFx1NUY4OCAxMjM1LTEzNi00CithbHdheXMgXHU1Rjg5IDQ2LTIKK2Fsd2F5cyBcdTVGOEEgMTIzNS0xMjQ2LTIKK2Fsd2F5cyBcdTVGOEIgMTQtMTI1Ni01CithbHdheXMgXHU1RjhDIDEyMzUtMTIzNTYtNQorYWx3YXlzIFx1NUY4RCA0NTYtNAorYWx3YXlzIFx1NUY4RSAxMi0xMzU2LTQKK2Fsd2F5cyBcdTVGOEYgMS0xNTYtNQorYWx3YXlzIFx1NUY5MCAxNS0xMjU2LTIKK2Fsd2F5cyBcdTVGOTEgMTMtMTM0NTYtNQorYWx3YXlzIFx1NUY5MiAxMjQtMzQtMgorYWx3YXlzIFx1NUY5MyAyNDUtMTIzNDYtMgorYWx3YXlzIFx1NUY5NCAxLTE1Ni0zCithbHdheXMgXHU1Rjk1IDE0LTI0NTYtMgorYWx3YXlzIFx1NUY5NiAyNDUtMTIzNDYtMgorYWx3YXlzIFx1NUY5NyAxNDUtMjM0Ni0yCithbHdheXMgXHU1Rjk4IDEyMzQtMjQ1Ni0yCithbHdheXMgXHU1Rjk5IDE1LTE2LTQKK2Fsd2F5cyBcdTVGOUEgMTQ1LTEyMzQ2LTMKK2Fsd2F5cyBcdTVGOUIgMTMtMTYtNQorYWx3YXlzIFx1NUY5QyAxMi0xMzQ2LTIKK2Fsd2F5cyBcdTVGOUQgMS0xNTYtNQorYWx3YXlzIFx1NUY5RSAyNDUtMTIzNDYtMgorYWx3YXlzIFx1NUY5RiAxLTEyMzU2LTMKK2Fsd2F5cyBcdTVGQTAgMTQtMjQ1Ni0yCithbHdheXMgXHU1RkExIDEyNTYtNQorYWx3YXlzIFx1NUZBMiAxNS0zNDYtNQorYWx3YXlzIFx1NUZBMyAxMy0zNDYtNQorYWx3YXlzIFx1NUZBNCAxMy0yMzQ1LTUKK2Fsd2F5cyBcdTVGQTUgMjQtMTU2LTUKK2Fsd2F5cyBcdTVGQTYgMTMtMjM0NTYtNAorYWx3YXlzIFx1NUZBNyAxMzUtMjM0NS01CithbHdheXMgXHU1RkE4IDEyMzUtNDU2LTIKK2Fsd2F5cyBcdTVGQTkgMTIzNDUtMzQtNQorYWx3YXlzIFx1NUZBQSAxNS0yNTYtMgorYWx3YXlzIFx1NUZBQiAxMjQ2LTQKK2Fsd2F5cyBcdTVGQUMgMTIzNC0xMzQ2LTIKK2Fsd2F5cyBcdTVGQUQgMjQ2LTIKK2Fsd2F5cyBcdTVGQUUgMTI0Ni0yCithbHdheXMgXHU1RkFGIDE1LTE2LTMKK2Fsd2F5cyBcdTVGQjAgMS0xMzU2LTMKK2Fsd2F5cyBcdTVGQjEgMTIzNC0yNDYtNQorYWx3YXlzIFx1NUZCMiAxMi0xNTYtMgorYWx3YXlzIFx1NUZCMyAxNDUtMjM0Ni0yCithbHdheXMgXHU1RkI0IDEtMTM1Ni0zCithbHdheXMgXHU1RkI1IDEtMTM1Ni0zCithbHdheXMgXHU1RkI2IDEzNS0zNDYtMgorYWx3YXlzIFx1NUZCNyAxNDUtMjM0Ni0yCithbHdheXMgXHU1RkI4IDEtMTIzNDYtNAorYWx3YXlzIFx1NUZCOSAxMi0yMzQ2LTUKK2Fsd2F5cyBcdTVGQkEgMTMtMjQ2LTQKK2Fsd2F5cyBcdTVGQkIgMTI0Ni01CithbHdheXMgXHU1RkJDIDEzLTI0Ni00CithbHdheXMgXHU1RkJEIDEyMzUtMTI0Ni0zCithbHdheXMgXHU1RkJFIDEzNC0zNTYtMgorYWx3YXlzIFx1NUZCRiAxNC0xMjM0Ni01CithbHdheXMgXHU1RkMwIDE1LTQ2LTMKK2Fsd2F5cyBcdTVGQzEgMTM1LTE0Ni01CithbHdheXMgXHU1RkMyIDI0NS0xMjU2LTIKK2Fsd2F5cyBcdTVGQzMgMTUtMTQ1Ni0zCithbHdheXMgXHU1RkM0IDE1LTE0NTYtMworYWx3YXlzIFx1NUZDNSAxMzUtMTYtNQorYWx3YXlzIFx1NUZDNiAxNi01CithbHdheXMgXHU1RkM3IDE0LTIzNDYtNQorYWx3YXlzIFx1NUZDOCAxMjQ1LTEzNi0yCithbHdheXMgXHU1RkM5IDE0NS0xNDYtMworYWx3YXlzIFx1NUZDQSAxNDUtMTM0NTYtNQorYWx3YXlzIFx1NUZDQiAxMy0yNDU2LTQKK2Fsd2F5cyBcdTVGQ0MgMTMtMTYtNQorYWx3YXlzIFx1NUZDRCAxMjQ1LTEzNi00CithbHdheXMgXHU1RkNFIDEyNDUtMTM2LTIKK2Fsd2F5cyBcdTVGQ0YgMjQ1LTIzNDUtMworYWx3YXlzIFx1NUZEMCAxMjQtMTIzNi00CithbHdheXMgXHU1RkQxIDEyNC0yMzQ2LTUKK2Fsd2F5cyBcdTVGRDIgMTI0LTIzNDYtNQorYWx3YXlzIFx1NUZEMyAxMy0xMjM2LTMKK2Fsd2F5cyBcdTVGRDQgMjQ1LTE2LTUKK2Fsd2F5cyBcdTVGRDUgMTI0LTI0NTYtNQorYWx3YXlzIFx1NUZENiAyNDUtMTIzNDU2LTQKK2Fsd2F5cyBcdTVGRDcgMS0xNTYtNQorYWx3YXlzIFx1NUZEOCA0NTYtNQorYWx3YXlzIFx1NUZEOSAxMzQtMTM0Ni0yCithbHdheXMgXHU1RkRBIDE1LTE2LTMKK2Fsd2F5cyBcdTVGREIgMTIzNDUtMTIzNi0yCithbHdheXMgXHU1RkRDIDEzNDU2LTMKK2Fsd2F5cyBcdTVGREQgMTI0LTIzNDUtNAorYWx3YXlzIFx1NUZERSAxMzQtMTQ1Ni0yCithbHdheXMgXHU1RkRGIDEzNC0xNDU2LTIKK2Fsd2F5cyBcdTVGRTAgMS0xMjM0Ni0zCithbHdheXMgXHU1RkUxIDEyLTEyMzQ2LTMKK2Fsd2F5cyBcdTVGRTIgMzQtNQorYWx3YXlzIFx1NUZFMyAxMy0xNi0yCithbHdheXMgXHU1RkU0IDM0LTQKK2Fsd2F5cyBcdTVGRTUgMTUtMTYtNQorYWx3YXlzIFx1NUZFNiAxMy0yMzQ1Ni0yCithbHdheXMgXHU1RkU3IDIzNC01CithbHdheXMgXHU1RkU4IDEyNDU2LTUKK2Fsd2F5cyBcdTVGRTkgMjQ1LTEyMzQ2LTMKK2Fsd2F5cyBcdTVGRUEgMTUtMTIzNDYtMworYWx3YXlzIFx1NUZFQiAxMjMtMjM1Ni01CithbHdheXMgXHU1RkVDIDEyNTYtNQorYWx3YXlzIFx1NUZFRCAxMzUtMjM0NS01CithbHdheXMgXHU1RkVFIDEtMTU2LTUKK2Fsd2F5cyBcdTVGRUYgMjQ1LTE2LTIKK2Fsd2F5cyBcdTVGRjAgMjQ1LTEyNDYtNQorYWx3YXlzIFx1NUZGMSAxMi0xMzYtMgorYWx3YXlzIFx1NUZGMiAxMjQtMjQ1Ni01CithbHdheXMgXHU1RkYzIDEyNC0xMjM0NTYtMgorYWx3YXlzIFx1NUZGNCAyNDUtMjM0NS0yCithbHdheXMgXHU1RkY1IDEzNDUtMjM0NS01CithbHdheXMgXHU1RkY2IDEyMzUtMTIzNDU2LTIKK2Fsd2F5cyBcdTVGRjcgMTUtMjM1LTMKK2Fsd2F5cyBcdTVGRjggMTM0NS0yMzQtNAorYWx3YXlzIFx1NUZGOSAxMjQ1LTEzNi01CithbHdheXMgXHU1RkZBIDE1LTIzNDUtMworYWx3YXlzIFx1NUZGQiAxNS0xNDU2LTMKK2Fsd2F5cyBcdTVGRkMgMTIzLTEzNDYtMworYWx3YXlzIFx1NUZGRCAxMjM1LTM0LTMKK2Fsd2F5cyBcdTVGRkUgMTIzLTI0NTYtNAorYWx3YXlzIFx1NUZGRiAxMjM0NS0xMzYtNQorYWx3YXlzIFx1NjAwMCAxMjM1LTIzNTYtMgorYWx3YXlzIFx1NjAwMSAxMjQtMjQ1Ni01CithbHdheXMgXHU2MDAyIDE1LTEyMzQ2LTQKK2Fsd2F5cyBcdTYwMDMgMzQtNAorYWx3YXlzIFx1NjAwNCAxMjM1Ni01CithbHdheXMgXHU2MDA1IDEyLTEzNDYtNQorYWx3YXlzIFx1NjAwNiAxMi00NTYtNQorYWx3YXlzIFx1NjAwNyAxMy0xMjU2LTUKK2Fsd2F5cyBcdTYwMDggMTYtNQorYWx3YXlzIFx1NjAwOSAxMzUtMTQ2LTQKK2Fsd2F5cyBcdTYwMEEgMTItMTQ2LTMKK2Fsd2F5cyBcdTYwMEIgMTM0LTE0NTYtMgorYWx3YXlzIFx1NjAwQyAxMjM0LTM1Ni0zCithbHdheXMgXHU2MDBEIDEyNS0yNS01CithbHdheXMgXHU2MDBFIDEyNS0xMzYtNAorYWx3YXlzIFx1NjAwRiA0Ni01CithbHdheXMgXHU2MDEwIDEyMy0xMjM1Ni01CithbHdheXMgXHU2MDExIDEzNS0xMjM2LTUKK2Fsd2F5cyBcdTYwMTIgMTM0NS0zNC01CithbHdheXMgXHU2MDEzIDEzNDUtMTQ2LTIKK2Fsd2F5cyBcdTYwMTQgMS0xMzU2LTMKK2Fsd2F5cyBcdTYwMTUgMTIzNC0zNDUtNQorYWx3YXlzIFx1NjAxNiAxMzUtMzQtNQorYWx3YXlzIFx1NjAxNyAxMjQtMzQ2LTMKK2Fsd2F5cyBcdTYwMTggMTMtMzQtNQorYWx3YXlzIFx1NjAxOSAxMjM1LTM0LTUKK2Fsd2F5cyBcdTYwMUEgMTMtMTI1Ni01CithbHdheXMgXHU2MDFCIDE0NS0zNDUtMgorYWx3YXlzIFx1NjAxQyAxNC0xMzQ1Ni0yCithbHdheXMgXHU2MDFEIDE1LTE1Ni0zCithbHdheXMgXHU2MDFFIDIzNC0yCithbHdheXMgXHU2MDFGIDE0NS0xNi01CithbHdheXMgXHU2MDIwIDE0NS0yNDU2LTUKK2Fsd2F5cyBcdTYwMjEgMTYtMgorYWx3YXlzIFx1NjAyMiAxMjQtMzQtMgorYWx3YXlzIFx1NjAyMyAyMzQtMgorYWx3YXlzIFx1NjAyNCAxMjM0NS0zNC0zCithbHdheXMgXHU2MDI1IDEzLTE2LTIKK2Fsd2F5cyBcdTYwMjYgMTIzNC0xMzU2LTMKK2Fsd2F5cyBcdTYwMjcgMTUtMTM0NTYtNQorYWx3YXlzIFx1NjAyOCA0NS01CithbHdheXMgXHU2MDI5IDEzNDUtMTYtMgorYWx3YXlzIFx1NjAyQSAxMy0yMzU2LTUKK2Fsd2F5cyBcdTYwMkIgMTIzNDUtMzQtMgorYWx3YXlzIFx1NjAyQyAxNS0xNi01CithbHdheXMgXHU2MDJEIDEzNS0xNi01CithbHdheXMgXHU2MDJFIDIzNC0zCithbHdheXMgXHU2MDJGIDI0NS0zNDYtNQorYWx3YXlzIFx1NjAzMCAxNS00NS01CithbHdheXMgXHU2MDMxIDI0NS0xMjM0Ni0zCithbHdheXMgXHU2MDMyIDEzNS0xMzQ1Ni00CithbHdheXMgXHU2MDMzIDEyMzUtNDU2LTQKK2Fsd2F5cyBcdTYwMzQgMTUtMTI1Ni01CithbHdheXMgXHU2MDM1IDEyLTM0LTUKK2Fsd2F5cyBcdTYwMzYgMTIzNC0xNi0zCithbHdheXMgXHU2MDM3IDI0LTM0LTUKK2Fsd2F5cyBcdTYwMzggMTUtMTYtMworYWx3YXlzIFx1NjAzOSAxMjQtMTIzNi0zCithbHdheXMgXHU2MDNBIDIzNS00CithbHdheXMgXHU2MDNCIDEyNS0xMjM0Ni00CithbHdheXMgXHU2MDNDIDE0NS0xMjQ2LTUKK2Fsd2F5cyBcdTYwM0QgMTM0LTEyNi01CithbHdheXMgXHU2MDNFIDEzNS0xNi00CithbHdheXMgXHU2MDNGIDE2LTUKK2Fsd2F5cyBcdTYwNDAgMjQtMTU2LTUKK2Fsd2F5cyBcdTYwNDEgMTI0NS0xMzYtNQorYWx3YXlzIFx1NjA0MiAxNS0yNTYtMgorYWx3YXlzIFx1NjA0MyAyNC0xNTYtNQorYWx3YXlzIFx1NjA0NCAxNS0xNi01CithbHdheXMgXHU2MDQ1IDE0LTE0Ni00CithbHdheXMgXHU2MDQ2IDEyMzUtMTM1Ni0yCithbHdheXMgXHU2MDQ3IDEyMy00NTYtMworYWx3YXlzIFx1NjA0OCAxMzQtMzQtMgorYWx3YXlzIFx1NjA0OSAxLTE1Ni00CithbHdheXMgXHU2MDRBIDE1LTM0Ni0yCithbHdheXMgXHU2MDRCIDE0LTIzNDUtNQorYWx3YXlzIFx1NjA0QyAxMjQtMjQ2LTMKK2Fsd2F5cyBcdTYwNEQgMTIzNS00NTYtNAorYWx3YXlzIFx1NjA0RSAxNDUtMzQ2LTIKK2Fsd2F5cyBcdTYwNEYgMTIzNS0xNDYtNQorYWx3YXlzIFx1NjA1MCAxMjMtMTIzNDYtNAorYWx3YXlzIFx1NjA1MSAxMy0xMjQ2LTQKK2Fsd2F5cyBcdTYwNTIgMTIzNS0xMzU2LTIKK2Fsd2F5cyBcdTYwNTMgMTUtMTYtMworYWx3YXlzIFx1NjA1NCAxNS0yNDYtNQorYWx3YXlzIFx1NjA1NSAyNC0zNC01CithbHdheXMgXHU2MDU2IDE1LTE1Ni0zCithbHdheXMgXHU2MDU3IDEyMy0zNS00CithbHdheXMgXHU2MDU4IDI0NS0yMzQtMworYWx3YXlzIFx1NjA1OSA0Ni01CithbHdheXMgXHU2MDVBIDEyMzUtMTI0Ni01CithbHdheXMgXHU2MDVCIDEyMzUtMTI0Ni0yCithbHdheXMgXHU2MDVDIDEyLTE1Ni01CithbHdheXMgXHU2MDVEIDEzLTIzNDU2LTIKK2Fsd2F5cyBcdTYwNUUgMTYtMgorYWx3YXlzIFx1NjA1RiAxNS0yMzUtMworYWx3YXlzIFx1NjA2MCAxMy0yMzU2LTUKK2Fsd2F5cyBcdTYwNjEgMTQtMTQ1Ni01CithbHdheXMgXHU2MDYyIDEyMzUtMTI0Ni0zCithbHdheXMgXHU2MDYzIDEyNS0xNTYtNQorYWx3YXlzIFx1NjA2NCAxNS0xMjU2LTUKK2Fsd2F5cyBcdTYwNjUgMTItMTU2LTQKK2Fsd2F5cyBcdTYwNjYgMTUtNDYtNQorYWx3YXlzIFx1NjA2NyAxMzQ1LTEyNTYtNQorYWx3YXlzIFx1NjA2OCAxMjM1LTEzNi01CithbHdheXMgXHU2MDY5IDEzNi0zCithbHdheXMgXHU2MDZBIDEyMy0yMzQ2LTUKK2Fsd2F5cyBcdTYwNkIgMTQ1LTEyMzQ2LTUKK2Fsd2F5cyBcdTYwNkMgMTI0LTIzNDUtMgorYWx3YXlzIFx1NjA2RCAxMy0xMjM0Ni0zCithbHdheXMgXHU2MDZFIDI0NS00NS0yCithbHdheXMgXHU2MDZGIDE1LTE2LTIKK2Fsd2F5cyBcdTYwNzAgMjQ1LTIzNDU2LTUKK2Fsd2F5cyBcdTYwNzEgMjM2LTUKK2Fsd2F5cyBcdTYwNzIgMTIzNC0xMzU2LTMKK2Fsd2F5cyBcdTYwNzMgMTIzLTEzNi00CithbHdheXMgXHU2MDc0IDE0NS0yMzQ2LTIKK2Fsd2F5cyBcdTYwNzUgMTIzNS0xMjQ2LTUKK2Fsd2F5cyBcdTYwNzYgMjM0Ni01CithbHdheXMgXHU2MDc3IDE1LTI0Ni0zCithbHdheXMgXHU2MDc4IDEyNC0xMjM0Ni01CithbHdheXMgXHU2MDc5IDIzNDUtMworYWx3YXlzIFx1NjA3QSAxMjMtMjQ1Ni00CithbHdheXMgXHU2MDdCIDI0NS0yMzQ2LTUKK2Fsd2F5cyBcdTYwN0MgMTM0NS0xNDYtNAorYWx3YXlzIFx1NjA3RCAyNTYtNQorYWx3YXlzIFx1NjA3RSAxMzQtMTM0Ni0yCithbHdheXMgXHU2MDdGIDIzNS00CithbHdheXMgXHU2MDgwIDIzNS00CithbHdheXMgXHU2MDgxIDEzLTQ1LTMKK2Fsd2F5cyBcdTYwODIgMTIzNC0xNi0zCithbHdheXMgXHU2MDgzIDEyMy0xMjM0NTYtNAorYWx3YXlzIFx1NjA4NCAyNDUtMjQ2LTMKK2Fsd2F5cyBcdTYwODUgMjM2LTUKK2Fsd2F5cyBcdTYwODYgMTI1Ni01CithbHdheXMgXHU2MDg3IDEyNTYtNQorYWx3YXlzIFx1NjA4OCAxMy0zNDYtNQorYWx3YXlzIFx1NjA4OSAxNS0xNi0zCithbHdheXMgXHU2MDhBIDEtMjM0Ni0yCithbHdheXMgXHU2MDhCIDE0LTE0NTYtNQorYWx3YXlzIFx1NjA4QyAxMjQtMTYtNQorYWx3YXlzIFx1NjA4RCAxMjM1LTEyMzYtNQorYWx3YXlzIFx1NjA4RSAxMjM1LTE0Ni01CithbHdheXMgXHU2MDhGIDI0NS0zNDYtNQorYWx3YXlzIFx1NjA5MCAxMjQtMTYtNQorYWx3YXlzIFx1NjA5MSAxMzUtMzQtNQorYWx3YXlzIFx1NjA5MiAxNi01CithbHdheXMgXHU2MDkzIDI0NS0yMzQ1LTUKK2Fsd2F5cyBcdTYwOTQgMTIzNS0xMjQ2LTQKK2Fsd2F5cyBcdTYwOTUgMTUtMTYtMworYWx3YXlzIFx1NjA5NiAxMzUtMzU2LTUKK2Fsd2F5cyBcdTYwOTcgMTM0LTEyMzYtMgorYWx3YXlzIFx1NjA5OCAxNi0zCithbHdheXMgXHU2MDk5IDEyMzUtMTM1Ni0zCithbHdheXMgXHU2MDlBIDE1LTEyMzQ2LTQKK2Fsd2F5cyBcdTYwOUIgMjQ1LTQ1LTMKK2Fsd2F5cyBcdTYwOUMgMTItMTM1Ni00CithbHdheXMgXHU2MDlEIDEyMy0xMjQ2LTMKK2Fsd2F5cyBcdTYwOUUgMzQtNQorYWx3YXlzIFx1NjA5RiAzNC01CithbHdheXMgXHU2MEEwIDIzNC0zCithbHdheXMgXHU2MEExIDE0LTE2LTIKK2Fsd2F5cyBcdTYwQTIgMTQtNDYtNQorYWx3YXlzIFx1NjBBMyAxMjM1LTEyNDU2LTUKK2Fsd2F5cyBcdTYwQTQgMjQ1LTEyMzQ2LTMKK2Fsd2F5cyBcdTYwQTUgMTYtNQorYWx3YXlzIFx1NjBBNiAyMzYtNQorYWx3YXlzIFx1NjBBNyAxNC0xNi01CithbHdheXMgXHU2MEE4IDEzNDUtMTQ1Ni0yCithbHdheXMgXHU2MEE5IDEzNDUtMTQ2LTQKK2Fsd2F5cyBcdTYwQUEgMjM0Ni01CithbHdheXMgXHU2MEFCIDI0NS0yMzYtNQorYWx3YXlzIFx1NjBBQyAxNS00NS0yCithbHdheXMgXHU2MEFEIDI0NS0yMzQ1LTMKK2Fsd2F5cyBcdTYwQUUgMzQtNQorYWx3YXlzIFx1NjBBRiAxMzQtMTQ1Ni00CithbHdheXMgXHU2MEIwIDI0NS0xMjM0Ni0yCithbHdheXMgXHU2MEIxIDEyMzQ1LTM1Ni00CithbHdheXMgXHU2MEIyIDEzNS0zNTYtMworYWx3YXlzIFx1NjBCMyAxNDUtMjM0Ni0yCithbHdheXMgXHU2MEI0IDI0NS0xMjQ2LTUKK2Fsd2F5cyBcdTYwQjUgMTItMTM0Ni01CithbHdheXMgXHU2MEI2IDEzNC0xMzYtMworYWx3YXlzIFx1NjBCNyAxNC0xNi01CithbHdheXMgXHU2MEI4IDEzLTE2LTUKK2Fsd2F5cyBcdTYwQjkgMTMtMTI0NTYtNQorYWx3YXlzIFx1NjBCQSAxMy0xMjQ1Ni01CithbHdheXMgXHU2MEJCIDE1LTEzNDU2LTUKK2Fsd2F5cyBcdTYwQkMgMTQ1LTE0Ni01CithbHdheXMgXHU2MEJEIDI0NS0xNi0zCithbHdheXMgXHU2MEJFIDEyMy0xMjM0Ni0zCithbHdheXMgXHU2MEJGIDEyNC0yMzQ1LTQKK2Fsd2F5cyBcdTYwQzAgMTQtMTIzNDU2LTIKK2Fsd2F5cyBcdTYwQzEgMTUtMTYtMworYWx3YXlzIFx1NjBDMiAxMjMtMTIzNi00CithbHdheXMgXHU2MEMzIDEyMy0xMjM0NTYtMworYWx3YXlzIFx1NjBDNCAxMzQ1LTE2LTUKK2Fsd2F5cyBcdTYwQzUgMjQ1LTEzNDU2LTIKK2Fsd2F5cyBcdTYwQzYgMTItMTIzNTYtMgorYWx3YXlzIFx1NjBDNyAxNDUtMTIzNDU2LTMKK2Fsd2F5cyBcdTYwQzggMTMtMjUtNAorYWx3YXlzIFx1NjBDOSAxMi0xMjM2LTMKK2Fsd2F5cyBcdTYwQ0EgMTMtMTM0NTYtMworYWx3YXlzIFx1NjBDQiAxMjQ1Ni00CithbHdheXMgXHU2MENDIDQ1LTMKK2Fsd2F5cyBcdTYwQ0QgMTMtMTQ1Ni0zCithbHdheXMgXHU2MENFIDEzLTE2LTUKK2Fsd2F5cyBcdTYwQ0YgMTQtMTIzNi0yCithbHdheXMgXHU2MEQwIDEyNTYtNQorYWx3YXlzIFx1NjBEMSAxMjM1LTI1LTUKK2Fsd2F5cyBcdTYwRDIgMTIzNS0yMzQ2LTIKK2Fsd2F5cyBcdTYwRDMgMjQ1LTQ1LTIKK2Fsd2F5cyBcdTYwRDQgMTI0LTEyMzYtMgorYWx3YXlzIFx1NjBENSAxMjQtMTYtNQorYWx3YXlzIFx1NjBENiAxMjQtMTYtNQorYWx3YXlzIFx1NjBENyAxMzQ1LTM0Ni0zCithbHdheXMgXHU2MEQ4IDQ1Ni00CithbHdheXMgXHU2MEQ5IDEyLTI1LTUKK2Fsd2F5cyBcdTYwREEgMTIzNS0zNC0zCithbHdheXMgXHU2MERCIDEyMzUtMTIzNDU2LTMKK2Fsd2F5cyBcdTYwREMgMTUtMTYtMgorYWx3YXlzIFx1NjBERCAxMi0xMzQ2LTQKK2Fsd2F5cyBcdTYwREUgMTUtMTQ1Ni0zCithbHdheXMgXHU2MERGIDEyNDYtMgorYWx3YXlzIFx1NjBFMCAxMjM1LTEyNDYtNQorYWx3YXlzIFx1NjBFMSAyMzQ2LTUKK2Fsd2F5cyBcdTYwRTIgMTUtMjUtNAorYWx3YXlzIFx1NjBFMyAxMjUtMTIzNDYtNAorYWx3YXlzIFx1NjBFNCAxMy0yMzQ1LTMKK2Fsd2F5cyBcdTYwRTUgMjM1LTQKK2Fsd2F5cyBcdTYwRTYgMTQ1LTIzNDUtNQorYWx3YXlzIFx1NjBFNyAxMy0xMjU2LTUKK2Fsd2F5cyBcdTYwRTggMjQ1LTEyMzYtNAorYWx3YXlzIFx1NjBFOSAxMi0xMzU2LTIKK2Fsd2F5cyBcdTYwRUEgMTQ1LTIzNDYtMgorYWx3YXlzIFx1NjBFQiAxMzUtMzU2LTUKK2Fsd2F5cyBcdTYwRUMgMjQ1LTM0Ni01CithbHdheXMgXHU2MEVEIDI0NS0xMjM2LTIKK2Fsd2F5cyBcdTYwRUUgMTQ1LTEyMzYtNQorYWx3YXlzIFx1NjBFRiAxMy0xMjQ1Ni01CithbHdheXMgXHU2MEYwIDE0NS0yNS01CithbHdheXMgXHU2MEYxIDEzNDUtMTQ2LTQKK2Fsd2F5cyBcdTYwRjIgMjU2LTUKK2Fsd2F5cyBcdTYwRjMgMTUtNDYtNAorYWx3YXlzIFx1NjBGNCAxLTEyNDYtNQorYWx3YXlzIFx1NjBGNSAxNDUtMzQ2LTUKK2Fsd2F5cyBcdTYwRjYgMTIzNS00NTYtMgorYWx3YXlzIFx1NjBGNyAxMi0xMjM0NTYtNAorYWx3YXlzIFx1NjBGOCAyNDUtMjM1LTIKK2Fsd2F5cyBcdTYwRjkgMTI0NS0yMzQ2LTQKK2Fsd2F5cyBcdTYwRkEgMTUtMTM0NTYtMworYWx3YXlzIFx1NjBGQiAyNDUtMjM0Ni01CithbHdheXMgXHU2MEZDIDEzNS0yMzQ1LTQKK2Fsd2F5cyBcdTYwRkQgMTIzNS0xMjM0NTYtMworYWx3YXlzIFx1NjBGRSAxMjUtMTIzNDYtMworYWx3YXlzIFx1NjBGRiAxMjQtMTYtMgorYWx3YXlzIFx1NjEwMCAyNDUtMjQ2LTQKK2Fsd2F5cyBcdTYxMDEgMTItMTIzNTYtMgorYWx3YXlzIFx1NjEwMiAxMzUtMzU2LTUKK2Fsd2F5cyBcdTYxMDMgMTUtNDUtMworYWx3YXlzIFx1NjEwNCAxMjQ2LTMKK2Fsd2F5cyBcdTYxMDUgMTMtMjM0Ni0yCithbHdheXMgXHU2MTA2IDI0NS0yMzQ1LTMKK2Fsd2F5cyBcdTYxMDcgMTI0Ni00CithbHdheXMgXHU2MTA4IDEyNTYtNQorYWx3YXlzIFx1NjEwOSAxMjU2LTIKK2Fsd2F5cyBcdTYxMEEgMTM1LTE2LTUKK2Fsd2F5cyBcdTYxMEIgMTUtNDUtMworYWx3YXlzIFx1NjEwQyAxMjM1LTEyNDU2LTUKK2Fsd2F5cyBcdTYxMEQgMTM0LTE0NTYtNAorYWx3YXlzIFx1NjEwRSAxMzUtMTYtNQorYWx3YXlzIFx1NjEwRiAxNi01CithbHdheXMgXHU2MTEwIDEzNC0yMzQ1LTQKK2Fsd2F5cyBcdTYxMTEgMjM1LTQKK2Fsd2F5cyBcdTYxMTIgMTIzLTI0NTYtNQorYWx3YXlzIFx1NjExMyAxNDUtMTM0Ni01CithbHdheXMgXHU2MTE0IDE0NTYtMworYWx3YXlzIFx1NjExNSAyMzQ2LTUKK2Fsd2F5cyBcdTYxMTYgMTItMTM2LTIKK2Fsd2F5cyBcdTYxMTcgMTM0LTEyMzU2LTUKK2Fsd2F5cyBcdTYxMTggMjQ1LTIzNDU2LTUKK2Fsd2F5cyBcdTYxMTkgMTIzLTIzNDYtNQorYWx3YXlzIFx1NjExQSAxMjU2LTIKK2Fsd2F5cyBcdTYxMUIgMjQ1Ni01CithbHdheXMgXHU2MTFDIDI0NS0zNDYtNQorYWx3YXlzIFx1NjExRCAyMzQ1LTQKK2Fsd2F5cyBcdTYxMUUgMTM0NS0yNS01CithbHdheXMgXHU2MTFGIDEzLTEyMzYtNAorYWx3YXlzIFx1NjEyMCAyNTYtNQorYWx3YXlzIFx1NjEyMSAxMjUtMTIzNDYtNAorYWx3YXlzIFx1NjEyMiAxNS0yNDU2LTMKK2Fsd2F5cyBcdTYxMjMgMTQtMTM1Ni01CithbHdheXMgXHU2MTI0IDEyMzQ1LTEzNi01CithbHdheXMgXHU2MTI1IDEzNDU2LTMKK2Fsd2F5cyBcdTYxMjYgMTIzLTEyNDYtNQorYWx3YXlzIFx1NjEyNyAxMjMtMTI0Ni01CithbHdheXMgXHU2MTI4IDI0NS0yMzYtNQorYWx3YXlzIFx1NjEyOSAxMy0xMjM0Ni0zCithbHdheXMgXHU2MTJBIDI1Ni0yCithbHdheXMgXHU2MTJCIDE1LTM0LTUKK2Fsd2F5cyBcdTYxMkMgMTUtMzQtNQorYWx3YXlzIFx1NjEyRCAyNDUtMTYtMgorYWx3YXlzIFx1NjEyRSAyNDYtMgorYWx3YXlzIFx1NjEyRiAxNS0xMjM0Ni00CithbHdheXMgXHU2MTMwIDEyMzUtNDU2LTUKK2Fsd2F5cyBcdTYxMzEgMTMtMTYtMgorYWx3YXlzIFx1NjEzMiAxMy0zNC00CithbHdheXMgXHU2MTMzIDEzLTEyNTYtNQorYWx3YXlzIFx1NjEzNCAxMi00NTYtNQorYWx3YXlzIFx1NjEzNSAxMzQ1LTE2LTUKK2Fsd2F5cyBcdTYxMzYgMTUtMzQ2LTIKK2Fsd2F5cyBcdTYxMzcgMTIzLTI0NTYtNAorYWx3YXlzIFx1NjEzOCAxLTEzNTYtNAorYWx3YXlzIFx1NjEzOSAyMzUtNAorYWx3YXlzIFx1NjEzQSAyNDUtMTQ2LTQKK2Fsd2F5cyBcdTYxM0IgMTUtMTIzNDU2LTUKK2Fsd2F5cyBcdTYxM0MgMjQtMTM2LTUKK2Fsd2F5cyBcdTYxM0QgMTM1LTEyNi0yCithbHdheXMgXHU2MTNFIDEyMy0yNDU2LTQKK2Fsd2F5cyBcdTYxM0YgNDUtNQorYWx3YXlzIFx1NjE0MCAxNS0zNDYtMgorYWx3YXlzIFx1NjE0MSAxMjM1LTEyMzQ1Ni01CithbHdheXMgXHU2MTQyIDIzNS00CithbHdheXMgXHU2MTQzIDQ2LTQKK2Fsd2F5cyBcdTYxNDQgMTQtMTYtNQorYWx3YXlzIFx1NjE0NSAxNS0xNDYtMworYWx3YXlzIFx1NjE0NiAxMjQtMTQ2LTMKK2Fsd2F5cyBcdTYxNDcgMTQ1Ni0zCithbHdheXMgXHU2MTQ4IDI0NS0xNTYtMgorYWx3YXlzIFx1NjE0OSAxNS0xMjU2LTUKK2Fsd2F5cyBcdTYxNEEgMjQ1LTIzNDUtNQorYWx3YXlzIFx1NjE0QiAxMjQtMjQ1Ni01CithbHdheXMgXHU2MTRDIDEyMzUtNDU2LTMKK2Fsd2F5cyBcdTYxNEQgMjU2LTUKK2Fsd2F5cyBcdTYxNEUgMjQtMTM2LTUKK2Fsd2F5cyBcdTYxNEYgMTM0LTEzNDU2LTQKK2Fsd2F5cyBcdTYxNTAgMTMtMTIzNDYtNQorYWx3YXlzIFx1NjE1MSAyNC0yMzQ2LTUKK2Fsd2F5cyBcdTYxNTIgMjQ1LTEyMzQ2LTIKK2Fsd2F5cyBcdTYxNTMgMTIzNC0yNDYtNQorYWx3YXlzIFx1NjE1NCAxMzQtMzQtNQorYWx3YXlzIFx1NjE1NSAxMzQtMzQtNQorYWx3YXlzIFx1NjE1NiAxMy0yNS0yCithbHdheXMgXHU2MTU3IDEyLTE1Ni01CithbHdheXMgXHU2MTU4IDI0NS0xMjM2LTQKK2Fsd2F5cyBcdTYxNTkgMjQ1LTEyMzYtMgorYWx3YXlzIFx1NjE1QSAyNDUtMTIzNi0yCithbHdheXMgXHU2MTVCIDI0NS0xMjQ2LTIKK2Fsd2F5cyBcdTYxNUMgMTM0LTE0NTYtNAorYWx3YXlzIFx1NjE1RCAxMjQtMjM0Ni01CithbHdheXMgXHU2MTVFIDEtMTM0Ni0zCithbHdheXMgXHU2MTVGIDEyNC0xMjM0Ni01CithbHdheXMgXHU2MTYwIDE0Ni01CithbHdheXMgXHU2MTYxIDI0LTQ1Ni00CithbHdheXMgXHU2MTYyIDEzNC0xMjM2LTUKK2Fsd2F5cyBcdTYxNjMgMTMtMTI0NTYtNQorYWx3YXlzIFx1NjE2NCAyNDUtMjM2LTUKK2Fsd2F5cyBcdTYxNjUgMjQ1LTE0Ni01CithbHdheXMgXHU2MTY2IDEzLTIzNC01CithbHdheXMgXHU2MTY3IDEyMzUtMTI0Ni01CithbHdheXMgXHU2MTY4IDEyMy0yNDU2LTQKK2Fsd2F5cyBcdTYxNjkgMTQtMjM0NS0yCithbHdheXMgXHU2MTZBIDEyMzU2LTUKK2Fsd2F5cyBcdTYxNkIgMTUtMTIzNDYtNAorYWx3YXlzIFx1NjE2QyAxMy0xNDU2LTQKK2Fsd2F5cyBcdTYxNkQgMTQ1Ni01CithbHdheXMgXHU2MTZFIDE0LTEyNTYtNQorYWx3YXlzIFx1NjE2RiAyNC0xMzQ2LTMKK2Fsd2F5cyBcdTYxNzAgMTI0Ni01CithbHdheXMgXHU2MTcxIDEyNC0xMjQ1Ni0yCithbHdheXMgXHU2MTcyIDEzNC0xMjM2LTIKK2Fsd2F5cyBcdTYxNzMgMjQ1LTIzNDUtMworYWx3YXlzIFx1NjE3NCAyNC0yMzQ2LTUKK2Fsd2F5cyBcdTYxNzUgMjM1LTMKK2Fsd2F5cyBcdTYxNzYgMjQ1LTEzNDU2LTUKK2Fsd2F5cyBcdTYxNzcgMTIzLTEzNDYtMworYWx3YXlzIFx1NjE3OCAxNDUtMTYtNQorYWx3YXlzIFx1NjE3OSAxLTE1Ni0yCithbHdheXMgXHU2MTdBIDE0LTEyMzU2LTIKK2Fsd2F5cyBcdTYxN0IgMTMtNDUtNQorYWx3YXlzIFx1NjE3QyAyNDUtMTYtMworYWx3YXlzIFx1NjE3RCAyNDUtMTYtMworYWx3YXlzIFx1NjE3RSAxMjU2LTUKK2Fsd2F5cyBcdTYxN0YgMTIzNC0xMzQ1Ni0yCithbHdheXMgXHU2MTgwIDE0LTI0Ni0yCithbHdheXMgXHU2MTgxIDI0NS0xMjM0Ni0zCithbHdheXMgXHU2MTgyIDIzNC0zCithbHdheXMgXHU2MTgzIDEyLTEyMzQ2LTMKK2Fsd2F5cyBcdTYxODQgMS0xNTYtNQorYWx3YXlzIFx1NjE4NSAxMjQtMTIzNDYtNQorYWx3YXlzIFx1NjE4NiAxMi0xMzU2LTMKK2Fsd2F5cyBcdTYxODcgMjQ1LTE2LTUKK2Fsd2F5cyBcdTYxODggMjQ1LTEyNTYtMworYWx3YXlzIFx1NjE4OSAxMjM0LTEzNTYtMgorYWx3YXlzIFx1NjE4QSAxMzUtMzU2LTUKK2Fsd2F5cyBcdTYxOEIgMTM1LTM0Ni0zCithbHdheXMgXHU2MThDIDEyLTEyMzQ1Ni0yCithbHdheXMgXHU2MThEIDEzLTI0Ni0zCithbHdheXMgXHU2MThFIDEyNS0xMzU2LTMKK2Fsd2F5cyBcdTYxOEYgMTItMTU2LTUKK2Fsd2F5cyBcdTYxOTAgMTQtMjM0NS0yCithbHdheXMgXHU2MTkxIDEyMzQtMTM0NTYtMgorYWx3YXlzIFx1NjE5MiAxMjMtMTI0Ni01CithbHdheXMgXHU2MTkzIDEyMzUtMTI0Ni01CithbHdheXMgXHU2MTk0IDI0NS0yNDYtMgorYWx3YXlzIFx1NjE5NSAxMi0xMzU2LTIKK2Fsd2F5cyBcdTYxOTYgMTQ1Ni01CithbHdheXMgXHU2MTk3IDE0NTYtNQorYWx3YXlzIFx1NjE5OCAxNS0xNi00CithbHdheXMgXHU2MTk5IDE1LTE2LTQKK2Fsd2F5cyBcdTYxOUEgMTQ1LTEyMzYtNQorYWx3YXlzIFx1NjE5QiAxMjQtMTIzNi0yCithbHdheXMgXHU2MTlDIDE0NS0yNS00CithbHdheXMgXHU2MTlEIDE0NS0xMjQ2LTUKK2Fsd2F5cyBcdTYxOUUgMTQ1LTEyNDYtNQorYWx3YXlzIFx1NjE5RiAxNS0zNC01CithbHdheXMgXHU2MUEwIDEzLTIzNi0yCithbHdheXMgXHU2MUExIDI0NS0yMzQ2LTUKK2Fsd2F5cyBcdTYxQTIgMTUtMjQ2LTMKK2Fsd2F5cyBcdTYxQTMgMTIzNDUtMTIzNi0yCithbHdheXMgXHU2MUE0IDEyMzQ1LTEzNi01CithbHdheXMgXHU2MUE1IDE0LTE0Ni0yCithbHdheXMgXHU2MUE2IDE0LTE0Ni01CithbHdheXMgXHU2MUE3IDEyLTEyMzQ2LTMKK2Fsd2F5cyBcdTYxQTggMTIzNS0xMjM2LTMKK2Fsd2F5cyBcdTYxQTkgMjQ1LTE2LTUKK2Fsd2F5cyBcdTYxQUEgMTUtMjM0NS0yCithbHdheXMgXHU2MUFCIDEzNC0xNDU2LTQKK2Fsd2F5cyBcdTYxQUMgMTMtMTM0NTYtNAorYWx3YXlzIFx1NjFBRCAxNC0yNDYtNAorYWx3YXlzIFx1NjFBRSAzNC00CithbHdheXMgXHU2MUFGIDI0NS0xMjM2LTQKK2Fsd2F5cyBcdTYxQjAgMTMtMjM2LTIKK2Fsd2F5cyBcdTYxQjEgMjQ1LTM0LTUKK2Fsd2F5cyBcdTYxQjIgMTUtMjM0NS01CithbHdheXMgXHU2MUIzIDEyNC0xMjM2LTQKK2Fsd2F5cyBcdTYxQjQgMjQtMTM1Ni0yCithbHdheXMgXHU2MUI1IDEyMzQtMTYtMworYWx3YXlzIFx1NjFCNiAxNi01CithbHdheXMgXHU2MUI3IDEyLTM0LTUKK2Fsd2F5cyBcdTYxQjggMTUtMjM0NS0zCithbHdheXMgXHU2MUI5IDEzNDUtMTQ2LTIKK2Fsd2F5cyBcdTYxQkEgMTQ1LTEyMzYtNQorYWx3YXlzIFx1NjFCQiAxMjQtMTIzNi00CithbHdheXMgXHU2MUJDIDEzLTEzNDU2LTQKK2Fsd2F5cyBcdTYxQkQgMTUtMTIzNDYtMworYWx3YXlzIFx1NjFCRSAxMjM1LTEyMzYtNQorYWx3YXlzIFx1NjFCRiAxMy0xNi0zCithbHdheXMgXHU2MUMwIDIzNTYtNQorYWx3YXlzIFx1NjFDMSAxNS00NS0zCithbHdheXMgXHU2MUMyIDE0NS0xMjM0Ni00CithbHdheXMgXHU2MUMzIDI0NS0xNDU2LTIKK2Fsd2F5cyBcdTYxQzQgMjQ1LTE0NTYtMgorYWx3YXlzIFx1NjFDNSAyNDUtMTI1Ni0yCithbHdheXMgXHU2MUM2IDI0NS0xNDYtNAorYWx3YXlzIFx1NjFDNyAxMjMtMTM2LTQKK2Fsd2F5cyBcdTYxQzggMTUtMzQ2LTUKK2Fsd2F5cyBcdTYxQzkgMTM0NTYtMworYWx3YXlzIFx1NjFDQSAxNDYtNQorYWx3YXlzIFx1NjFDQiAxMzQtMTQ2LTUKK2Fsd2F5cyBcdTYxQ0MgMTYtNQorYWx3YXlzIFx1NjFDRCAxNC0xNDU2LTQKK2Fsd2F5cyBcdTYxQ0UgMTUtMjM0Ni01CithbHdheXMgXHU2MUNGIDEzLTI1Ni01CithbHdheXMgXHU2MUQwIDEyMzUtMjM1Ni0yCithbHdheXMgXHU2MUQxIDEzNC0xMzYtNQorYWx3YXlzIFx1NjFEMiAxNC0xMjM2LTQKK2Fsd2F5cyBcdTYxRDMgMjQ1Ni01CithbHdheXMgXHU2MUQ0IDE0LTE0NTYtNAorYWx3YXlzIFx1NjFENSAyMzQ1LTMKK2Fsd2F5cyBcdTYxRDYgMTMtMzUtMworYWx3YXlzIFx1NjFENyAxNS0yMzQ1Ni01CithbHdheXMgXHU2MUQ4IDEyLTE1Ni01CithbHdheXMgXHU2MUQ5IDEyNTYtNAorYWx3YXlzIFx1NjFEQSAxNDU2LTUKK2Fsd2F5cyBcdTYxREIgMTQ1LTI0NTYtMworYWx3YXlzIFx1NjFEQyAxMzQtMTM1Ni01CithbHdheXMgXHU2MUREIDI0NTYtNQorYWx3YXlzIFx1NjFERSAxMzQtMTM1Ni0yCithbHdheXMgXHU2MURGIDE0NS0xMjQ2LTUKK2Fsd2F5cyBcdTYxRTAgMjQ1LTE2LTIKK2Fsd2F5cyBcdTYxRTEgMTM0LTEyNi00CithbHdheXMgXHU2MUUyIDE0LTEyMzYtMgorYWx3YXlzIFx1NjFFMyAxMzQtMTM2LTUKK2Fsd2F5cyBcdTYxRTQgMTItMTIzNTYtMgorYWx3YXlzIFx1NjFFNSAxLTE1Ni01CithbHdheXMgXHU2MUU2IDEzNDUtMjUtNQorYWx3YXlzIFx1NjFFNyAxMzQ1LTI1LTUKK2Fsd2F5cyBcdTYxRTggMjM0NS0zCithbHdheXMgXHU2MUU5IDQ2LTQKK2Fsd2F5cyBcdTYxRUEgMTM1LTEyNi0yCithbHdheXMgXHU2MUVCIDEtMTU2LTIKK2Fsd2F5cyBcdTYxRUMgMTIzLTQ1Ni01CithbHdheXMgXHU2MUVEIDEyMy00NTYtNQorYWx3YXlzIFx1NjFFRSAyMzQtNAorYWx3YXlzIFx1NjFFRiAxMjM0NS0zNC0zCithbHdheXMgXHU2MUYwIDE0LTIzNC0yCithbHdheXMgXHU2MUYxIDEzNC0zNDYtNQorYWx3YXlzIFx1NjFGMiAxMi0xMzU2LTIKK2Fsd2F5cyBcdTYxRjMgMTIzNS0xMjQ2LTUKK2Fsd2F5cyBcdTYxRjQgMTItMTIzNi01CithbHdheXMgXHU2MUY1IDEzNC0xMzU2LTIKK2Fsd2F5cyBcdTYxRjYgMTQtMTIzNi00CithbHdheXMgXHU2MUY3IDEyMzUtMjM1Ni0yCithbHdheXMgXHU2MUY4IDE1LTQ1LTIKK2Fsd2F5cyBcdTYxRjkgMTI0NS0xMzQ2LTUKK2Fsd2F5cyBcdTYxRkEgMTItMTIzNi01CithbHdheXMgXHU2MUZCIDEzLTE2LTUKK2Fsd2F5cyBcdTYxRkMgMTMtMTI1Ni01CithbHdheXMgXHU2MUZEIDEyMzUtMTI0NTYtMworYWx3YXlzIFx1NjFGRSAyNC0yMzQ2LTUKK2Fsd2F5cyBcdTYxRkYgMTYtNQorYWx3YXlzIFx1NjIwMCAxNC0yMzQ1LTUKK2Fsd2F5cyBcdTYyMDEgMTM0NS0xMjM2LTQKK2Fsd2F5cyBcdTYyMDIgMTM0LTE2LTIKK2Fsd2F5cyBcdTYyMDMgMTI0LTEzNDYtNAorYWx3YXlzIFx1NjIwNCAxMy0yMzYtMgorYWx3YXlzIFx1NjIwNSAxMy0xMzQ2LTUKK2Fsd2F5cyBcdTYyMDYgMS00NTYtNQorYWx3YXlzIFx1NjIwNyAxLTQ1Ni01CithbHdheXMgXHU2MjA4IDEzLTIzNDYtMworYWx3YXlzIFx1NjIwOSAyMzYtNQorYWx3YXlzIFx1NjIwQSAzNC01CithbHdheXMgXHU2MjBCIDEzLTIzNDUtMworYWx3YXlzIFx1NjIwQyAxNS0xMjU2LTMKK2Fsd2F5cyBcdTYyMEQgMjQtMzQtNQorYWx3YXlzIFx1NjIwRSAxMjQ1LTEyMzQ2LTIKK2Fsd2F5cyBcdTYyMEYgMTUtMTYtNQorYWx3YXlzIFx1NjIxMCAxMi0xMzU2LTIKK2Fsd2F5cyBcdTYyMTEgMjUtNAorYWx3YXlzIFx1NjIxMiAxMy0zNDYtNQorYWx3YXlzIFx1NjIxMyAxMy0yMzQ2LTMKK2Fsd2F5cyBcdTYyMTQgMTMtMjM0NS0zCithbHdheXMgXHU2MjE1IDI0NS00Ni0yCithbHdheXMgXHU2MjE2IDEyMzUtMjUtNQorYWx3YXlzIFx1NjIxNyAyNDUtNDYtMworYWx3YXlzIFx1NjIxOCAxLTEyMzYtNQorYWx3YXlzIFx1NjIxOSAxNDUtMTIzNDYtNQorYWx3YXlzIFx1NjIxQSAyNDUtMTYtMworYWx3YXlzIFx1NjIxQiAxMy0yMzQ1Ni0yCithbHdheXMgXHU2MjFDIDE0NS0zNDYtMgorYWx3YXlzIFx1NjIxRCAxMjUtMzU2LTIKK2Fsd2F5cyBcdTYyMUUgMTMtMjM0NTYtMgorYWx3YXlzIFx1NjIxRiAxMy0xNi00CithbHdheXMgXHU2MjIwIDEtMTU2LTIKK2Fsd2F5cyBcdTYyMjEgMTIzLTEyMzYtMworYWx3YXlzIFx1NjIyMiAxMy0xNi0yCithbHdheXMgXHU2MjIzIDEyMy0xMjQ2LTIKK2Fsd2F5cyBcdTYyMjQgMTMtMjQ1Ni01CithbHdheXMgXHU2MjI1IDE0NS0xMzU2LTQKK2Fsd2F5cyBcdTYyMjYgMS0xMjM2LTUKK2Fsd2F5cyBcdTYyMjcgMjQ1LTQ2LTMKK2Fsd2F5cyBcdTYyMjggMTMtMjM0Ni0zCithbHdheXMgXHU2MjI5IDEzLTIzNDUtNAorYWx3YXlzIFx1NjIyQSAxMy0zNDYtMgorYWx3YXlzIFx1NjIyQiAxMjU2LTUKK2Fsd2F5cyBcdTYyMkMgMTMtMjM0NS00CithbHdheXMgXHU2MjJEIDIzNDUtNAorYWx3YXlzIFx1NjIyRSAxNC0zNC01CithbHdheXMgXHU2MjJGIDE1LTE2LTUKK2Fsd2F5cyBcdTYyMzAgMS0xMjM2LTUKK2Fsd2F5cyBcdTYyMzEgMTUtMTYtNQorYWx3YXlzIFx1NjIzMiAxNS0xNi01CithbHdheXMgXHU2MjMzIDEyLTI1LTMKK2Fsd2F5cyBcdTYyMzQgMTQ1LTI0NTYtNQorYWx3YXlzIFx1NjIzNSAyNDUtMTI1Ni0yCithbHdheXMgXHU2MjM2IDEyMzUtMzQtNQorYWx3YXlzIFx1NjIzNyAxMjM1LTM0LTUKK2Fsd2F5cyBcdTYyMzggMTIzNS0zNC01CithbHdheXMgXHU2MjM5IDIzNDYtNQorYWx3YXlzIFx1NjIzQSAyNC0xNTYtNQorYWx3YXlzIFx1NjIzQiAxMjQtMTYtNQorYWx3YXlzIFx1NjIzQyAxMzQtMTQ2LTQKK2Fsd2F5cyBcdTYyM0QgMTIzNS0zNC01CithbHdheXMgXHU2MjNFIDE0LTE2LTUKK2Fsd2F5cyBcdTYyM0YgMTIzNDUtMTM0Ni0yCithbHdheXMgXHU2MjQwIDE1LTI1LTQKK2Fsd2F5cyBcdTYyNDEgMTM1LTIzNDUtNAorYWx3YXlzIFx1NjI0MiAxNDUtMjM0NS01CithbHdheXMgXHU2MjQzIDEzLTIzNS0zCithbHdheXMgXHU2MjQ0IDI0LTEzNDYtNAorYWx3YXlzIFx1NjI0NSAxNi0yCithbHdheXMgXHU2MjQ2IDE2LTQKK2Fsd2F5cyBcdTYyNDcgMjQtMTIzNi01CithbHdheXMgXHU2MjQ4IDEyMzUtMzQtNQorYWx3YXlzIFx1NjI0OSAxMjM0NS0zNTYtMworYWx3YXlzIFx1NjI0QSAyMzQ1LTQKK2Fsd2F5cyBcdTYyNEIgMjQtMTIzNTYtNAorYWx3YXlzIFx1NjI0QyAyNC0xMjM1Ni00CithbHdheXMgXHU2MjREIDI0NS0yNDU2LTIKK2Fsd2F5cyBcdTYyNEUgMS0zNDUtMworYWx3YXlzIFx1NjI0RiAyNDUtMjM0LTIKK2Fsd2F5cyBcdTYyNTAgMTQtMjM0Ni01CithbHdheXMgXHU2MjUxIDEyMzQtMzQtMworYWx3YXlzIFx1NjI1MiAxMjM0LTM0NS0yCithbHdheXMgXHU2MjUzIDE0NS0zNDUtNAorYWx3YXlzIFx1NjI1NCAxMjQ1LTEzNTYtMworYWx3YXlzIFx1NjI1NSAxMjM0NS0zNC0yCithbHdheXMgXHU2MjU2IDEyNDUtMzQtNQorYWx3YXlzIFx1NjI1NyAxMjUtMjQ1Ni01CithbHdheXMgXHU2MjU4IDEyNC0yNS0zCithbHdheXMgXHU2MjU5IDEtMTM0Ni01CithbHdheXMgXHU2MjVBIDE0NS0yNDYtNAorYWx3YXlzIFx1NjI1QiAxMjMtMTM0Ni0yCithbHdheXMgXHU2MjVDIDE0NS0yNDYtNAorYWx3YXlzIFx1NjI1RCAxMjMtMzQtMworYWx3YXlzIFx1NjI1RSAxMjM1LTEyMzYtNQorYWx3YXlzIFx1NjI1RiAyNC0xMzYtMworYWx3YXlzIFx1NjI2MCAxMi0zNDUtMworYWx3YXlzIFx1NjI2MSAxNi00CithbHdheXMgXHU2MjYyIDE1LTE2LTUKK2Fsd2F5cyBcdTYyNjMgMTIzLTEyMzU2LTUKK2Fsd2F5cyBcdTYyNjQgMzQtNQorYWx3YXlzIFx1NjI2NSAxNDUtMTIzNDU2LTUKK2Fsd2F5cyBcdTYyNjYgMjQ1LTIzNDUtMworYWx3YXlzIFx1NjI2NyAxLTE1Ni0yCithbHdheXMgXHU2MjY4IDEyNDUtMTM2LTUKK2Fsd2F5cyBcdTYyNjkgMTIzLTI1LTUKK2Fsd2F5cyBcdTYyNkEgMTM0LTEzNi0yCithbHdheXMgXHU2MjZCIDE1LTE0Ni00CithbHdheXMgXHU2MjZDIDQ2LTIKK2Fsd2F5cyBcdTYyNkQgMTM0NS0yMzQtNAorYWx3YXlzIFx1NjI2RSAxMzUtMTIzNi01CithbHdheXMgXHU2MjZGIDEyLTIzNDYtNAorYWx3YXlzIFx1NjI3MCAyMzQtNQorYWx3YXlzIFx1NjI3MSAxNS0xNi0zCithbHdheXMgXHU2MjcyIDI0NS0yMzQ1LTIKK2Fsd2F5cyBcdTYyNzMgMTM1LTEyMzYtMworYWx3YXlzIFx1NjI3NCAxMy0yMzQ1Ni0yCithbHdheXMgXHU2Mjc1IDEyNTYtMgorYWx3YXlzIFx1NjI3NiAxMjM0NS0zNC0yCithbHdheXMgXHU2Mjc3IDE0Ni01CithbHdheXMgXHU2Mjc4IDE1LTE2LTMKK2Fsd2F5cyBcdTYyNzkgMTIzNC0xNi0zCithbHdheXMgXHU2MjdBIDEtMTU2LTQKK2Fsd2F5cyBcdTYyN0IgMTI1LTE1Ni01CithbHdheXMgXHU2MjdDIDIzNDYtNQorYWx3YXlzIFx1NjI3RCAxNDUtMTIzNDU2LTUKK2Fsd2F5cyBcdTYyN0UgMS0xNDYtNAorYWx3YXlzIFx1NjI3RiAxMi0xMzU2LTIKK2Fsd2F5cyBcdTYyODAgMTMtMTYtNQorYWx3YXlzIFx1NjI4MSAyMzQ1LTQKK2Fsd2F5cyBcdTYyODIgMTIzLTQ1Ni0yCithbHdheXMgXHU2MjgzIDEzNS0yMzQ1LTUKK2Fsd2F5cyBcdTYyODQgMTItMTQ2LTMKK2Fsd2F5cyBcdTYyODUgMTMtMTI1Ni0zCithbHdheXMgXHU2Mjg2IDEyMzQ1Ni01CithbHdheXMgXHU2Mjg3IDEyMzUtMzQtMgorYWx3YXlzIFx1NjI4OCAyMzYtNQorYWx3YXlzIFx1NjI4OSAxMy0yMzYtMgorYWx3YXlzIFx1NjI4QSAxMzUtMzQ1LTQKK2Fsd2F5cyBcdTYyOEIgMjQ1LTE0NTYtNQorYWx3YXlzIFx1NjI4QyAxLTEzNi00CithbHdheXMgXHU2MjhEIDEtMTM1Ni00CithbHdheXMgXHU2MjhFIDI1Ni00CithbHdheXMgXHU2MjhGIDEyNDU2LTIKK2Fsd2F5cyBcdTYyOTAgMTM0NS0xMzYtNQorYWx3YXlzIFx1NjI5MSAxNi01CithbHdheXMgXHU2MjkyIDI0LTM0LTMKK2Fsd2F5cyBcdTYyOTMgMS0zNS0zCithbHdheXMgXHU2Mjk0IDEyMzQtMTIzNTYtMgorYWx3YXlzIFx1NjI5NSAxMjQtMTIzNTYtMgorYWx3YXlzIFx1NjI5NiAxNDUtMTIzNTYtNAorYWx3YXlzIFx1NjI5NyAxMjMtMTM0Ni01CithbHdheXMgXHU2Mjk4IDEtMjM0Ni0yCithbHdheXMgXHU2Mjk5IDEyMzQtMTIzNTYtMgorYWx3YXlzIFx1NjI5QSAxMjM0NS0zNC00CithbHdheXMgXHU2MjlCIDEyMzQtMTQ2LTMKK2Fsd2F5cyBcdTYyOUMgMTM1LTM0NS0yCithbHdheXMgXHU2MjlEIDEzNDUtMjM0LTUKK2Fsd2F5cyBcdTYyOUUgMTI1LTIzNDYtMgorYWx3YXlzIFx1NjI5RiAxMjQtMTI0NTYtMgorYWx3YXlzIFx1NjJBMCAxMjMtMTIzNTYtMworYWx3YXlzIFx1NjJBMSAxNC0xMjM0NTYtMworYWx3YXlzIFx1NjJBMiAyNDUtNDYtNAorYWx3YXlzIFx1NjJBMyAyNTYtMgorYWx3YXlzIFx1NjJBNCAxMjM1LTM0LTUKK2Fsd2F5cyBcdTYyQTUgMTM1LTE0Ni01CithbHdheXMgXHU2MkE2IDEzNS0xMzQ1Ni00CithbHdheXMgXHU2MkE3IDEtMTU2LTQKK2Fsd2F5cyBcdTYyQTggMTIzNC0xMzU2LTMKK2Fsd2F5cyBcdTYyQTkgMTI0LTEyMzYtMworYWx3YXlzIFx1NjJBQSAxMzUtMzQtNQorYWx3YXlzIFx1NjJBQiAxMjM0LTE2LTMKK2Fsd2F5cyBcdTYyQUMgMTI0LTI0NTYtMgorYWx3YXlzIFx1NjJBRCAyNDYtNAorYWx3YXlzIFx1NjJBRSAxLTEzNi00CithbHdheXMgXHU2MkFGIDEtMzQ1LTMKK2Fsd2F5cyBcdTYyQjAgNDYtNAorYWx3YXlzIFx1NjJCMSAxMzUtMTQ2LTUKK2Fsd2F5cyBcdTYyQjIgMTIzNS0yMzQ2LTMKK2Fsd2F5cyBcdTYyQjMgMTM0NS0xNi00CithbHdheXMgXHU2MkI0IDE2LTUKK2Fsd2F5cyBcdTYyQjUgMTQ1LTE2LTQKK2Fsd2F5cyBcdTYyQjYgMTItMTU2LTUKK2Fsd2F5cyBcdTYyQjcgMTIzNC0xNi0zCithbHdheXMgXHU2MkI4IDEyNS0zNDUtMworYWx3YXlzIFx1NjJCOSAxMzQtMTI2LTQKK2Fsd2F5cyBcdTYyQkEgMTM0LTM1Ni01CithbHdheXMgXHU2MkJCIDEyLTEzNi0zCithbHdheXMgXHU2MkJDIDIzNDU2LTMKK2Fsd2F5cyBcdTYyQkQgMTItMTIzNTYtMworYWx3YXlzIFx1NjJCRSAyNDUtMTI1Ni0zCithbHdheXMgXHU2MkJGIDEzNC0xNDU2LTQKK2Fsd2F5cyBcdTYyQzAgMS0zNC01CithbHdheXMgXHU2MkMxIDEzLTIzNDU2LTMKK2Fsd2F5cyBcdTYyQzIgMTIzNDUtMzQtMgorYWx3YXlzIFx1NjJDMyAxLTEyMzYtNAorYWx3YXlzIFx1NjJDNCAxLTM0LTQKK2Fsd2F5cyBcdTYyQzUgMTQ1LTEyMzYtMworYWx3YXlzIFx1NjJDNiAxMi0yNDU2LTMKK2Fsd2F5cyBcdTYyQzcgMTM0LTM0LTQKK2Fsd2F5cyBcdTYyQzggMTM0NS0yMzQ1LTIKK2Fsd2F5cyBcdTYyQzkgMTQtMzQ1LTMKK2Fsd2F5cyBcdTYyQ0EgMTIzNDUtMzQtNAorYWx3YXlzIFx1NjJDQiAxMjM0LTE0Ni0zCithbHdheXMgXHU2MkNDIDEzNS0xMjM2LTUKK2Fsd2F5cyBcdTYyQ0QgMTIzNC0yNDU2LTMKK2Fsd2F5cyBcdTYyQ0UgMTQtMTM0NTYtMworYWx3YXlzIFx1NjJDRiAxMzQ1LTM0NS0yCithbHdheXMgXHU2MkQwIDEzLTIzNTYtNAorYWx3YXlzIFx1NjJEMSAyNDUtMjM0NS0yCithbHdheXMgXHU2MkQyIDEzLTEyNTYtNQorYWx3YXlzIFx1NjJEMyAxMjQtMjUtNQorYWx3YXlzIFx1NjJENCAxMzUtMzQ1LTIKK2Fsd2F5cyBcdTYyRDUgMTI0LTI1LTMKK2Fsd2F5cyBcdTYyRDYgMTI0LTI1LTMKK2Fsd2F5cyBcdTYyRDcgMTM0NS0yMzQtNQorYWx3YXlzIFx1NjJEOCAxMy0xMjU2LTMKK2Fsd2F5cyBcdTYyRDkgMS0yNS0yCithbHdheXMgXHU2MkRBIDEyMzQtMTQ1Ni0zCithbHdheXMgXHU2MkRCIDEtMTQ2LTMKK2Fsd2F5cyBcdTYyREMgMTM1LTI0NTYtNQorYWx3YXlzIFx1NjJERCAxMzUtMjQ1Ni01CithbHdheXMgXHU2MkRFIDE0NS0xNi00CithbHdheXMgXHU2MkRGIDEzNDUtMTYtNAorYWx3YXlzIFx1NjJFMCAxMy0xMjU2LTUKK2Fsd2F5cyBcdTYyRTEgMTIzLTI1LTUKK2Fsd2F5cyBcdTYyRTIgMTQtMTIzNDYtNAorYWx3YXlzIFx1NjJFMyAxMy0yMzQ1LTQKK2Fsd2F5cyBcdTYyRTQgMjQ1LTIzNDU2LTIKK2Fsd2F5cyBcdTYyRTUgMjM1LTQKK2Fsd2F5cyBcdTYyRTYgMTQtMTIzNi0yCithbHdheXMgXHU2MkU3IDEzNDUtMTM0NTYtMgorYWx3YXlzIFx1NjJFOCAxMzUtMTI2LTMKK2Fsd2F5cyBcdTYyRTkgMTI1LTIzNDYtMgorYWx3YXlzIFx1NjJFQSAyNDUtMjM0NS0zCithbHdheXMgXHU2MkVCIDEyMzUtMTM2LTIKK2Fsd2F5cyBcdTYyRUMgMTIzLTI1LTUKK2Fsd2F5cyBcdTYyRUQgMjQtMTU2LTUKK2Fsd2F5cyBcdTYyRUUgMTMtMzQ2LTIKK2Fsd2F5cyBcdTYyRUYgMS0xMzU2LTQKK2Fsd2F5cyBcdTYyRjAgMTM0NS0xNDU2LTQKK2Fsd2F5cyBcdTYyRjEgMTMtMTIzNDYtNAorYWx3YXlzIFx1NjJGMiAxMy0xMjM0Ni00CithbHdheXMgXHU2MkYzIDI0NS00NS0yCithbHdheXMgXHU2MkY0IDI0LTEyNDU2LTMKK2Fsd2F5cyBcdTYyRjUgMjQ1LTEyMzQ1Ni0yCithbHdheXMgXHU2MkY2IDEyNS0xMjM2LTQKK2Fsd2F5cyBcdTYyRjcgMTIzLTE0Ni00CithbHdheXMgXHU2MkY4IDEyLTE1Ni00CithbHdheXMgXHU2MkY5IDE1LTM0Ni0yCithbHdheXMgXHU2MkZBIDI0NS0yMzQ2LTUKK2Fsd2F5cyBcdTYyRkIgMTIzNS0xMjQ2LTMKK2Fsd2F5cyBcdTYyRkMgMTIzNC0xNDU2LTMKK2Fsd2F5cyBcdTYyRkQgMS0yMzU2LTUKK2Fsd2F5cyBcdTYyRkUgMjQtMTU2LTIKK2Fsd2F5cyBcdTYyRkYgMTM0NS0zNDUtMgorYWx3YXlzIFx1NjMwMCAxMzUtMTI2LTUKK2Fsd2F5cyBcdTYzMDEgMTItMTU2LTIKK2Fsd2F5cyBcdTYzMDIgMTMtMzUtNQorYWx3YXlzIFx1NjMwMyAxLTE1Ni01CithbHdheXMgXHU2MzA0IDEyMy0yNS01CithbHdheXMgXHU2MzA1IDE0NS0yNS00CithbHdheXMgXHU2MzA2IDE0NS0yNS00CithbHdheXMgXHU2MzA3IDEtMTU2LTQKK2Fsd2F5cyBcdTYzMDggMjQ1LTM0Ni01CithbHdheXMgXHU2MzA5IDEyMzYtNQorYWx3YXlzIFx1NjMwQSAxMzQ1LTEyMzQ2LTUKK2Fsd2F5cyBcdTYzMEIgMS0xMzYtNQorYWx3YXlzIFx1NjMwQyAxMy0yMzQ2LTIKK2Fsd2F5cyBcdTYzMEQgMTMtMjQ2LTUKK2Fsd2F5cyBcdTYzMEUgMTIzLTM1LTUKK2Fsd2F5cyBcdTYzMEYgMTQ1LTEyMzQ2LTUKK2Fsd2F5cyBcdTYzMTAgMTI0NS0zNC0yCithbHdheXMgXHU2MzExIDEyNC0yNDYtMworYWx3YXlzIFx1NjMxMiAxNC0zNDYtNQorYWx3YXlzIFx1NjMxMyAxLTM0NS0zCithbHdheXMgXHU2MzE0IDE0LTEyNTYtNAorYWx3YXlzIFx1NjMxNSAxNDUtMzQ2LTIKK2Fsd2F5cyBcdTYzMTYgMzUtMworYWx3YXlzIFx1NjMxNyAxMy0yMzYtMgorYWx3YXlzIFx1NjMxOCAxNC0zNDYtNAorYWx3YXlzIFx1NjMxOSAxMy0xMjU2LTQKK2Fsd2F5cyBcdTYzMUEgMS0xNTYtNQorYWx3YXlzIFx1NjMxQiAxNC0xMjQ1Ni0yCithbHdheXMgXHU2MzFDIDIzNDU2LTUKK2Fsd2F5cyBcdTYzMUQgMjUtMworYWx3YXlzIFx1NjMxRSAxMjQtMzQ1LTUKK2Fsd2F5cyBcdTYzMUYgMTUtMzQ2LTIKK2Fsd2F5cyBcdTYzMjAgMTM0NS0xNDYtMgorYWx3YXlzIFx1NjMyMSAxNDUtMTM0Ni00CithbHdheXMgXHU2MzIyIDEzLTI0Ni00CithbHdheXMgXHU2MzIzIDEtMTM1Ni01CithbHdheXMgXHU2MzI0IDEzLTE2LTQKK2Fsd2F5cyBcdTYzMjUgMTIzNS0xMjQ2LTMKK2Fsd2F5cyBcdTYzMjYgMTUtMjU2LTIKK2Fsd2F5cyBcdTYzMjcgMTI1Ni00CithbHdheXMgXHU2MzI4IDI0NTYtMworYWx3YXlzIFx1NjMyOSAxMjQtMjUtMworYWx3YXlzIFx1NjMyQSAxMzQ1LTI1LTIKK2Fsd2F5cyBcdTYzMkIgMjQ1LTI1LTUKK2Fsd2F5cyBcdTYzMkMgMTM1LTEyNi0yCithbHdheXMgXHU2MzJEIDEzLTEzNTYtNAorYWx3YXlzIFx1NjMyRSAxMjQtMTYtNQorYWx3YXlzIFx1NjMyRiAxLTEzNi01CithbHdheXMgXHU2MzMwIDEyLTEzNTYtMgorYWx3YXlzIFx1NjMzMSAxNS0yNS0zCithbHdheXMgXHU2MzMyIDE1LTI1LTMKK2Fsd2F5cyBcdTYzMzMgMTIzLTEzNTYtMworYWx3YXlzIFx1NjMzNCAxMzQtMzU2LTQKK2Fsd2F5cyBcdTYzMzUgMTM0NS0xMjM0Ni01CithbHdheXMgXHU2MzM2IDEzLTEyNTYtMgorYWx3YXlzIFx1NjMzNyAxMjM0LTEzNTYtMgorYWx3YXlzIFx1NjMzOCAxMy0yMzQ1LTQKK2Fsd2F5cyBcdTYzMzkgMTYtNQorYWx3YXlzIFx1NjMzQSAxMjQtMTM0NTYtNAorYWx3YXlzIFx1NjMzQiAyNC0xMjM2LTMKK2Fsd2F5cyBcdTYzM0MgMTM0NS0yNS0yCithbHdheXMgXHU2MzNEIDEyNDU2LTQKK2Fsd2F5cyBcdTYzM0UgMTUtMzQ2LTIKK2Fsd2F5cyBcdTYzM0YgMTItMzQ1LTMKK2Fsd2F5cyBcdTYzNDAgMTIzNDUtMTM1Ni0yCithbHdheXMgXHU2MzQxIDEyMy0zNC01CithbHdheXMgXHU2MzQyIDM0LTQKK2Fsd2F5cyBcdTYzNDMgMTMtMjU2LTUKK2Fsd2F5cyBcdTYzNDQgMTMtMjM0LTUKK2Fsd2F5cyBcdTYzNDUgMTI0LTEyMzQ2LTQKK2Fsd2F5cyBcdTYzNDYgMTIzLTEyMzQ1Ni00CithbHdheXMgXHU2MzQ3IDEyMzUtMjUtNQorYWx3YXlzIFx1NjM0OCAxMjQtMzQtMgorYWx3YXlzIFx1NjM0OSAxLTI1LTMKK2Fsd2F5cyBcdTYzNEEgMTIzNC0xMjM1Ni0yCithbHdheXMgXHU2MzRCIDE0LTEyNTYtNAorYWx3YXlzIFx1NjM0QyAxMzUtMzQ1LTMKK2Fsd2F5cyBcdTYzNEQgMTIzNS0xMjM2LTUKK2Fsd2F5cyBcdTYzNEUgMjQtMTQ2LTMKK2Fsd2F5cyBcdTYzNEYgMTM0NS0zNDYtMworYWx3YXlzIFx1NjM1MCAxMy00NS0zCithbHdheXMgXHU2MzUxIDEyNS0yMzQ2LTIKK2Fsd2F5cyBcdTYzNTIgMTUtMTIzNDYtNAorYWx3YXlzIFx1NjM1MyAzNDYtMgorYWx3YXlzIFx1NjM1NCAxMy0yMzYtMgorYWx3YXlzIFx1NjM1NSAxMzUtMzQtNAorYWx3YXlzIFx1NjM1NiAxMjQ1Ni0yCithbHdheXMgXHU2MzU3IDEzNS0zNC01CithbHdheXMgXHU2MzU4IDEyNS0xMjM0NTYtNQorYWx3YXlzIFx1NjM1OSAxNi01CithbHdheXMgXHU2MzVBIDEtMjQ1Ni0zCithbHdheXMgXHU2MzVCIDE0LTEyNTYtNAorYWx3YXlzIFx1NjM1QyAxNS0xMjM1Ni0zCithbHdheXMgXHU2MzVEIDEyNC0yNS0zCithbHdheXMgXHU2MzVFIDE0LTE0Ni0zCithbHdheXMgXHU2MzVGIDE1LTEyMzQ1Ni00CithbHdheXMgXHU2MzYwIDEzNS0xMzQ2LTMKK2Fsd2F5cyBcdTYzNjEgMTMtMjM0NS00CithbHdheXMgXHU2MzYyIDEyMzUtMTI0NTYtNQorYWx3YXlzIFx1NjM2MyAxNDUtMTQ2LTQKK2Fsd2F5cyBcdTYzNjQgMTI0Ni00CithbHdheXMgXHU2MzY1IDEyNDU2LTUKK2Fsd2F5cyBcdTYzNjYgMjQ1LTE0NTYtMgorYWx3YXlzIFx1NjM2NyAxMjM0LTEzNTYtNAorYWx3YXlzIFx1NjM2OCAyNC0yMzQ2LTQKK2Fsd2F5cyBcdTYzNjkgMTQtMzQ2LTUKK2Fsd2F5cyBcdTYzNkEgMTM0LTE0NTYtMgorYWx3YXlzIFx1NjM2QiAxMzQtMTM2LTIKK2Fsd2F5cyBcdTYzNkMgMTIzNDUtMzQtNAorYWx3YXlzIFx1NjM2RCAxMzUtMjQ1Ni00CithbHdheXMgXHU2MzZFIDEzLTEyNTYtNQorYWx3YXlzIFx1NjM2RiAxNDUtMTQ2LTIKK2Fsd2F5cyBcdTYzNzAgMjUtNAorYWx3YXlzIFx1NjM3MSAyNDU2LTIKK2Fsd2F5cyBcdTYzNzIgMTMtNDUtNAorYWx3YXlzIFx1NjM3MyAyMzYtNQorYWx3YXlzIFx1NjM3NCAxMjUtMTIzNDYtNAorYWx3YXlzIFx1NjM3NSAxMi0xMzYtMworYWx3YXlzIFx1NjM3NiAxMi0xMjQ2LTIKK2Fsd2F5cyBcdTYzNzcgMTMtMzQ2LTIKK2Fsd2F5cyBcdTYzNzggMTI0LTM0LTMKK2Fsd2F5cyBcdTYzNzkgMTM1LTEzNi01CithbHdheXMgXHU2MzdBIDEzNDUtMzQ1LTUKK2Fsd2F5cyBcdTYzN0IgMTM0NS0yMzQ1LTQKK2Fsd2F5cyBcdTYzN0MgMTM0NS0yNS0yCithbHdheXMgXHU2MzdEIDEyNS0zNC0yCithbHdheXMgXHU2MzdFIDI1LTUKK2Fsd2F5cyBcdTYzN0YgMTUtMTYtMworYWx3YXlzIFx1NjM4MCAxNS0yMzQ1LTMKK2Fsd2F5cyBcdTYzODEgMTItMTM1Ni0yCithbHdheXMgXHU2MzgyIDE0NS0yMzQ1LTMKK2Fsd2F5cyBcdTYzODMgMTUtMTQ2LTQKK2Fsd2F5cyBcdTYzODQgMTQtMTIzNDU2LTMKK2Fsd2F5cyBcdTYzODUgMjQ1LTEzNDU2LTUKK2Fsd2F5cyBcdTYzODYgMTMtMTM0Ni0zCithbHdheXMgXHU2Mzg3IDE0NS0yNS0yCithbHdheXMgXHU2Mzg4IDI0LTEyMzU2LTUKK2Fsd2F5cyBcdTYzODkgMTQ1LTI0Ni01CithbHdheXMgXHU2MzhBIDEyMzQtMTIzNTYtMgorYWx3YXlzIFx1NjM4QiAxNDUtMTYtNAorYWx3YXlzIFx1NjM4QyAxLTEzNDYtNAorYWx3YXlzIFx1NjM4RCAxMy0xMjM0NTYtNAorYWx3YXlzIFx1NjM4RSAxMy0xNi00CithbHdheXMgXHU2MzhGIDEyNC0xNDYtMworYWx3YXlzIFx1NjM5MCAyNDUtMjM0NTYtMworYWx3YXlzIFx1NjM5MSAyNDUtMTYtMgorYWx3YXlzIFx1NjM5MiAxMjM0LTI0NTYtMgorYWx3YXlzIFx1NjM5MyAyNC0zNC0yCithbHdheXMgXHU2Mzk0IDI0NS0yMzQ1LTMKK2Fsd2F5cyBcdTYzOTUgMTQtMTM0NTYtNQorYWx3YXlzIFx1NjM5NiAzNDYtNQorYWx3YXlzIFx1NjM5NyAyMzQ1Ni01CithbHdheXMgXHU2Mzk4IDEzLTIzNi0yCithbHdheXMgXHU2Mzk5IDEtMTM1Ni01CithbHdheXMgXHU2MzlBIDE0LTQ2LTQKK2Fsd2F5cyBcdTYzOUIgMTMtMzUtNQorYWx3YXlzIFx1NjM5QyAxNi00CithbHdheXMgXHU2MzlEIDEyMzUtMjUtNQorYWx3YXlzIFx1NjM5RSAyNC0xMjM2LTUKK2Fsd2F5cyBcdTYzOUYgMTQ1LTEzNDU2LTUKK2Fsd2F5cyBcdTYzQTAgMTQtMjM2LTUKK2Fsd2F5cyBcdTYzQTEgMjQ1LTI0NTYtNAorYWx3YXlzIFx1NjNBMiAxMjQtMTIzNi01CithbHdheXMgXHU2M0EzIDEyLTIzNDYtNQorYWx3YXlzIFx1NjNBNCAxMzUtMTM0NTYtMworYWx3YXlzIFx1NjNBNSAxMy0zNDYtMworYWx3YXlzIFx1NjNBNiAxMjQtMTYtNQorYWx3YXlzIFx1NjNBNyAxMjMtMTIzNDYtNQorYWx3YXlzIFx1NjNBOCAxMjQtMTI0Ni0zCithbHdheXMgXHU2M0E5IDIzNDUtNAorYWx3YXlzIFx1NjNBQSAyNDUtMjUtNQorYWx3YXlzIFx1NjNBQiAxMjUtMTIzNTYtMworYWx3YXlzIFx1NjNBQyAxMy0xMjU2LTIKK2Fsd2F5cyBcdTYzQUQgMTI0LTIzNDUtNQorYWx3YXlzIFx1NjNBRSAyNDUtMjM0NS0yCithbHdheXMgXHU2M0FGIDEyMy0xMzYtNQorYWx3YXlzIFx1NjNCMCAxMzUtMjQ1Ni0zCithbHdheXMgXHU2M0IxIDI0LTEyMzU2LTQKK2Fsd2F5cyBcdTYzQjIgMTMtMzQ2LTMKK2Fsd2F5cyBcdTYzQjMgMTQtMzQtNAorYWx3YXlzIFx1NjNCNCAxMy0yNS0yCithbHdheXMgXHU2M0I1IDEzNC0xMzQ1Ni01CithbHdheXMgXHU2M0I2IDEzLTM0Ni0yCithbHdheXMgXHU2M0I3IDEtMTU2LTUKK2Fsd2F5cyBcdTYzQjggMTQ1LTEyMzYtNAorYWx3YXlzIFx1NjNCOSAxMzQtMTM1Ni0zCithbHdheXMgXHU2M0JBIDEyLTEyMzYtMworYWx3YXlzIFx1NjNCQiAxNS0xNDYtMworYWx3YXlzIFx1NjNCQyAxMy0xMjQ1Ni01CithbHdheXMgXHU2M0JEIDEyMzQtMTM1Ni01CithbHdheXMgXHU2M0JFIDQ1LTUKK2Fsd2F5cyBcdTYzQkYgMTM0NS0yNS01CithbHdheXMgXHU2M0MwIDEzLTIzNDUtNAorYWx3YXlzIFx1NjNDMSAxLTEzNi0zCithbHdheXMgXHU2M0MyIDEzLTIzNC0zCithbHdheXMgXHU2M0MzIDEzLTIzNDUtNAorYWx3YXlzIFx1NjNDNCAxMjU2LTIKK2Fsd2F5cyBcdTYzQzUgMjM0NS0yCithbHdheXMgXHU2M0M2IDEyMy0xMjQ2LTIKK2Fsd2F5cyBcdTYzQzcgMTM0NS0xMjM2LTQKK2Fsd2F5cyBcdTYzQzggMTIzNS0xMjM0Ni0zCithbHdheXMgXHU2M0M5IDEyNDUtMTIzNTYtMgorYWx3YXlzIFx1NjNDQSAxMjM0LTE2LTUKK2Fsd2F5cyBcdTYzQ0IgMTI0Ni0zCithbHdheXMgXHU2M0NDIDE1LTI0NTYtMworYWx3YXlzIFx1NjNDRCAxMjUtMTIzNTYtNQorYWx3YXlzIFx1NjNDRSAxNS00NS0zCithbHdheXMgXHU2M0NGIDEzNC0yNDYtMgorYWx3YXlzIFx1NjNEMCAxMjQtMTYtMgorYWx3YXlzIFx1NjNEMSAxMzQ1LTM0Ni0zCithbHdheXMgXHU2M0QyIDEyLTM0NS0zCithbHdheXMgXHU2M0QzIDI0LTE1Ni01CithbHdheXMgXHU2M0Q0IDEyNS0xMjM0Ni00CithbHdheXMgXHU2M0Q1IDEtMTM2LTUKK2Fsd2F5cyBcdTYzRDYgMTYtMworYWx3YXlzIFx1NjNENyAyNC0xMjM0NTYtNAorYWx3YXlzIFx1NjNEOCAxMjM1LTEzNTYtMgorYWx3YXlzIFx1NjNEOSAxMzUtMjM0NS01CithbHdheXMgXHU2M0RBIDQ2LTIKK2Fsd2F5cyBcdTYzREIgMTIzNS0xMjQ1Ni01CithbHdheXMgXHU2M0RDIDIzNDUtNAorYWx3YXlzIFx1NjNERCAxMjUtMTI0NTYtNQorYWx3YXlzIFx1NjNERSAxMjM2LTQKK2Fsd2F5cyBcdTYzREYgMTUtMTI1Ni0zCithbHdheXMgXHU2M0UwIDIzNDU2LTUKK2Fsd2F5cyBcdTYzRTEgMjUtNQorYWx3YXlzIFx1NjNFMiAxMjMtMjM0Ni01CithbHdheXMgXHU2M0UzIDEyLTIzNTYtNAorYWx3YXlzIFx1NjNFNCAxMy0xNi0yCithbHdheXMgXHU2M0U1IDEyNC0xNi01CithbHdheXMgXHU2M0U2IDE0LTM0NS0yCithbHdheXMgXHU2M0U3IDE0LTM0NS01CithbHdheXMgXHU2M0U4IDEyLTEzNTYtMgorYWx3YXlzIFx1NjNFOSAxMjMtMjQ1Ni0zCithbHdheXMgXHU2M0VBIDEzLTIzNC0zCithbHdheXMgXHU2M0VCIDEzLTIzNC0zCithbHdheXMgXHU2M0VDIDEyNC0zNC0yCithbHdheXMgXHU2M0VEIDEzLTM0Ni0zCithbHdheXMgXHU2M0VFIDEyMzUtMTI0Ni0zCithbHdheXMgXHU2M0VGIDEzLTEzNTYtMworYWx3YXlzIFx1NjNGMCAxMi0xMjM0Ni01CithbHdheXMgXHU2M0YxIDE1LTI0Ni0zCithbHdheXMgXHU2M0YyIDI0LTIzNDYtMgorYWx3YXlzIFx1NjNGMyAxNS0zNDYtNQorYWx3YXlzIFx1NjNGNCA0NS0yCithbHdheXMgXHU2M0Y1IDI0NS0yMzQ1LTIKK2Fsd2F5cyBcdTYzRjYgMzQ2LTIKK2Fsd2F5cyBcdTYzRjcgMTItMzQ1LTMKK2Fsd2F5cyBcdTYzRjggMS0zNDUtMworYWx3YXlzIFx1NjNGOSAxMzUtMzU2LTMKK2Fsd2F5cyBcdTYzRkEgMjQ2LTIKK2Fsd2F5cyBcdTYzRkIgMTI0Ni0zCithbHdheXMgXHU2M0ZDIDEzNS0xMzU2LTUKK2Fsd2F5cyBcdTYzRkQgMTQtMTIzNi00CithbHdheXMgXHU2M0ZFIDEyMzQ1Ni01CithbHdheXMgXHU2M0ZGIDI0NS0xNDU2LTUKK2Fsd2F5cyBcdTY0MDAgMTItMTIzNi0zCithbHdheXMgXHU2NDAxIDEzLTIzNDYtMworYWx3YXlzIFx1NjQwMiAxNC0xMjM1Ni00CithbHdheXMgXHU2NDAzIDEyNS0xMjM0Ni00CithbHdheXMgXHU2NDA0IDEzLTEzNTYtMworYWx3YXlzIFx1NjQwNSAxMy0yNDYtNAorYWx3YXlzIFx1NjQwNiAxMy0xMjM1Ni01CithbHdheXMgXHU2NDA3IDI0NS0xNDU2LTUKK2Fsd2F5cyBcdTY0MDggMjM1LTQKK2Fsd2F5cyBcdTY0MDkgMjQ1LTIzNi01CithbHdheXMgXHU2NDBBIDEyLTEyMzU2LTMKK2Fsd2F5cyBcdTY0MEIgMTItMjM1Ni0zCithbHdheXMgXHU2NDBDIDEtMTIzNi00CithbHdheXMgXHU2NDBEIDE1LTEyMzQ1Ni00CithbHdheXMgXHU2NDBFIDE1LTEyMzQ1Ni0zCithbHdheXMgXHU2NDBGIDEzNS0xMjYtMgorYWx3YXlzIFx1NjQxMCAxMi0zNC01CithbHdheXMgXHU2NDExIDEyNDUtMTIzNDYtNAorYWx3YXlzIFx1NjQxMiAxMjM0LTEzNTYtMgorYWx3YXlzIFx1NjQxMyAyNDUtMjUtMworYWx3YXlzIFx1NjQxNCAxNS0xNDYtMworYWx3YXlzIFx1NjQxNSAxMjMtMjM0Ni01CithbHdheXMgXHU2NDE2IDI0Ni0yCithbHdheXMgXHU2NDE3IDE0NS0xNDYtNAorYWx3YXlzIFx1NjQxOCAxLTE1Ni0zCithbHdheXMgXHU2NDE5IDEzNDUtMzQtNQorYWx3YXlzIFx1NjQxQSAxNS0zNDYtMgorYWx3YXlzIFx1NjQxQiAxMy0yMzQ1LTMKK2Fsd2F5cyBcdTY0MUMgMTUtMTIzNTYtMworYWx3YXlzIFx1NjQxRCAyNDUtMjM0LTQKK2Fsd2F5cyBcdTY0MUUgMTMtMTQ2LTQKK2Fsd2F5cyBcdTY0MUYgMTUtMjM0NS00CithbHdheXMgXHU2NDIwIDI0LTI1LTUKK2Fsd2F5cyBcdTY0MjEgMTUtMTM0Ni00CithbHdheXMgXHU2NDIyIDEzLTE0NTYtNQorYWx3YXlzIFx1NjQyMyAxMzQtMzQ2LTUKK2Fsd2F5cyBcdTY0MjQgMjM0Ni01CithbHdheXMgXHU2NDI1IDEyLTEyNDYtMgorYWx3YXlzIFx1NjQyNiAxMzQ1LTI1LTUKK2Fsd2F5cyBcdTY0MjcgMjQtMTIzNi0zCithbHdheXMgXHU2NDI4IDEyNC0zNDUtNQorYWx3YXlzIFx1NjQyOSAxMy0zNDYtMgorYWx3YXlzIFx1NjQyQSAxMjQtMTM0Ni0yCithbHdheXMgXHU2NDJCIDEyMzQtMTIzNi0yCithbHdheXMgXHU2NDJDIDEzNS0xMjM2LTMKK2Fsd2F5cyBcdTY0MkQgMTQ1LTM0NS0zCithbHdheXMgXHU2NDJFIDE0LTE2LTUKK2Fsd2F5cyBcdTY0MkYgMTI0LTE0Ni0zCithbHdheXMgXHU2NDMwIDEyMzUtMzQtMgorYWx3YXlzIFx1NjQzMSAxLTE1Ni01CithbHdheXMgXHU2NDMyIDM1LTMKK2Fsd2F5cyBcdTY0MzMgMTUtMjM0NTYtMgorYWx3YXlzIFx1NjQzNCAyNDUtMjM0NS0zCithbHdheXMgXHU2NDM1IDEyMzQ1Ni01CithbHdheXMgXHU2NDM2IDI0NS00Ni00CithbHdheXMgXHU2NDM3IDEyNC0yMzQ1LTIKK2Fsd2F5cyBcdTY0MzggMS0xMzYtMworYWx3YXlzIFx1NjQzOSAyMzQ2LTUKK2Fsd2F5cyBcdTY0M0EgMTUtMTYtMworYWx3YXlzIFx1NjQzQiAxMzQ1LTI1LTUKK2Fsd2F5cyBcdTY0M0MgMjQ1LTQ1LTIKK2Fsd2F5cyBcdTY0M0QgMTItMzQ1LTIKK2Fsd2F5cyBcdTY0M0UgMS0zNDUtNQorYWx3YXlzIFx1NjQzRiAxMy0yMzQ2LTIKK2Fsd2F5cyBcdTY0NDAgMzQtNAorYWx3YXlzIFx1NjQ0MSAxMzYtNQorYWx3YXlzIFx1NjQ0MiAyNC0yMzQ2LTUKK2Fsd2F5cyBcdTY0NDMgMTMtMTM0Ni01CithbHdheXMgXHU2NDQ0IDI0LTIzNDYtNQorYWx3YXlzIFx1NjQ0NSAyNC0zNC0zCithbHdheXMgXHU2NDQ2IDEzNS0yNDU2LTQKK2Fsd2F5cyBcdTY0NDcgMjQ2LTIKK2Fsd2F5cyBcdTY0NDggMTM1LTE0NTYtNQorYWx3YXlzIFx1NjQ0OSAxNS0xMjM1Ni0zCithbHdheXMgXHU2NDRBIDEyNC0xMjM2LTMKK2Fsd2F5cyBcdTY0NEIgMTUtMzQ1LTUKK2Fsd2F5cyBcdTY0NEMgMTItMTIzNi00CithbHdheXMgXHU2NDREIDE1LTI1LTMKK2Fsd2F5cyBcdTY0NEUgMTMtMjM0LTMKK2Fsd2F5cyBcdTY0NEYgMTItMTIzNDYtMworYWx3YXlzIFx1NjQ1MCAxMi00NTYtMworYWx3YXlzIFx1NjQ1MSAxMy0yNS0yCithbHdheXMgXHU2NDUyIDEzNS0xMzQ1Ni01CithbHdheXMgXHU2NDUzIDEyMzQ1LTEzNTYtMgorYWx3YXlzIFx1NjQ1NCAyNC0yMzU2LTMKK2Fsd2F5cyBcdTY0NTUgMTQ1LTE2LTUKK2Fsd2F5cyBcdTY0NTYgMjQ1LTE2LTUKK2Fsd2F5cyBcdTY0NTcgMTUtMTIzNTYtMworYWx3YXlzIFx1NjQ1OCAxLTI0NTYtMworYWx3YXlzIFx1NjQ1OSAxNC0yMzQ1LTQKK2Fsd2F5cyBcdTY0NUEgMTI0LTEzNDYtMgorYWx3YXlzIFx1NjQ1QiAxMi0xNTYtMworYWx3YXlzIFx1NjQ1QyAxMy0xMjQ1Ni01CithbHdheXMgXHU2NDVEIDE0LTM0LTUKK2Fsd2F5cyBcdTY0NUUgMTQtMjUtNQorYWx3YXlzIFx1NjQ1RiAxNC0xMjM1Ni00CithbHdheXMgXHU2NDYwIDEyNS0xMjM0Ni00CithbHdheXMgXHU2NDYxIDEzLTI0NTYtNQorYWx3YXlzIFx1NjQ2MiAxMjM1LTM0LTUKK2Fsd2F5cyBcdTY0NjMgMS0zNDUtMworYWx3YXlzIFx1NjQ2NCAxMi00NTYtNAorYWx3YXlzIFx1NjQ2NSAxMjQtMTM0Ni01CithbHdheXMgXHU2NDY2IDEyMzUtMzUtNQorYWx3YXlzIFx1NjQ2NyAyNDUtMTI0Ni0zCithbHdheXMgXHU2NDY4IDEzNDUtMjQ1Ni0yCithbHdheXMgXHU2NDY5IDEzNC0xMjYtMgorYWx3YXlzIFx1NjQ2QSAxMy00Ni0zCithbHdheXMgXHU2NDZCIDEzLTEyNDYtMworYWx3YXlzIFx1NjQ2QyAxMzQ1Ni01CithbHdheXMgXHU2NDZEIDEtMTU2LTIKK2Fsd2F5cyBcdTY0NkUgMTQ2LTIKK2Fsd2F5cyBcdTY0NkYgMS0xNTYtNQorYWx3YXlzIFx1NjQ3MCAxMzQ1LTM0Ni01CithbHdheXMgXHU2NDcxIDEzNC0xMjM2LTIKK2Fsd2F5cyBcdTY0NzIgMTItMTIzNi01CithbHdheXMgXHU2NDczIDEyMy0xMjM1Ni0zCithbHdheXMgXHU2NDc0IDI0LTM0LTMKK2Fsd2F5cyBcdTY0NzUgMTUtMjUtNAorYWx3YXlzIFx1NjQ3NiAxMjQtMTI0NTYtMgorYWx3YXlzIFx1NjQ3NyAxMy0yNDYtNAorYWx3YXlzIFx1NjQ3OCAxMzQtMTI2LTMKK2Fsd2F5cyBcdTY0NzkgMTM0LTEyNi0yCithbHdheXMgXHU2NDdBIDEtMjM0Ni0yCithbHdheXMgXHU2NDdCIDEyLTEyMzYtMworYWx3YXlzIFx1NjQ3QyAxMjMtMTM1Ni0zCithbHdheXMgXHU2NDdEIDEzNS0yNDYtNQorYWx3YXlzIFx1NjQ3RSAxMy00Ni01CithbHdheXMgXHU2NDdGIDE0NTYtMworYWx3YXlzIFx1NjQ4MCAxMy0xMjM1Ni01CithbHdheXMgXHU2NDgxIDI0NS0yMzQ1LTMKK2Fsd2F5cyBcdTY0ODIgMTQtMjQ2LTUKK2Fsd2F5cyBcdTY0ODMgMTMtMTYtMgorYWx3YXlzIFx1NjQ4NCAxMzQ1Ni0zCithbHdheXMgXHU2NDg1IDEzLTIzNi0zCithbHdheXMgXHU2NDg2IDEyMzQtMzQ2LTMKK2Fsd2F5cyBcdTY0ODcgMTIzNC0zNDYtNAorYWx3YXlzIFx1NjQ4OCAxNC0xNDYtMworYWx3YXlzIFx1NjQ4OSAxNDUtMTIzNDU2LTMKK2Fsd2F5cyBcdTY0OEEgMTUtMjM0NS01CithbHdheXMgXHU2NDhCIDEyNDUtMTI0NTYtMgorYWx3YXlzIFx1NjQ4QyAxMjMtMTI0Ni01CithbHdheXMgXHU2NDhEIDEyNS0xMjM2LTQKK2Fsd2F5cyBcdTY0OEUgMTYtNQorYWx3YXlzIFx1NjQ4RiAxNS0yNTYtMgorYWx3YXlzIFx1NjQ5MCAxMi0xMzU2LTMKK2Fsd2F5cyBcdTY0OTEgMTItMTM1Ni0zCithbHdheXMgXHU2NDkyIDE1LTM0NS00CithbHdheXMgXHU2NDkzIDEzNDUtMTQ2LTIKK2Fsd2F5cyBcdTY0OTQgMTIzNS0xMzU2LTUKK2Fsd2F5cyBcdTY0OTUgMTUtMTU2LTMKK2Fsd2F5cyBcdTY0OTYgMTIzNS0xMjM2LTUKK2Fsd2F5cyBcdTY0OTcgMTIzNS00NTYtMgorYWx3YXlzIFx1NjQ5OCAxNDUtMzQ1LTMKK2Fsd2F5cyBcdTY0OTkgMTI1LTEyMzQ1Ni00CithbHdheXMgXHU2NDlBIDEzNDUtMjM0NS00CithbHdheXMgXHU2NDlCIDE0LTE0NTYtNAorYWx3YXlzIFx1NjQ5QyAxLTEzNTYtNAorYWx3YXlzIFx1NjQ5RCAxMjM1LTEyNDYtMworYWx3YXlzIFx1NjQ5RSAxLTQ1Ni01CithbHdheXMgXHU2NDlGIDEzLTI0Ni00CithbHdheXMgXHU2NEEwIDEzLTE2LTQKK2Fsd2F5cyBcdTY0QTEgMjQ1LTE0Ni0zCithbHdheXMgXHU2NEEyIDE0NS0xMjM2LTQKK2Fsd2F5cyBcdTY0QTMgMTQ1LTEyMzYtNAorYWx3YXlzIFx1NjRBNCAxMi0yMzQ2LTUKK2Fsd2F5cyBcdTY0QTUgMTM1LTEyNi0zCithbHdheXMgXHU2NEE2IDEyLTIzNDYtNAorYWx3YXlzIFx1NjRBNyAxMy0yMzYtMgorYWx3YXlzIFx1NjRBOCAxNS0yNDYtMworYWx3YXlzIFx1NjRBOSAxNC0yNDYtMgorYWx3YXlzIFx1NjRBQSAxMzUtMTM2LTUKK2Fsd2F5cyBcdTY0QUIgMTIzNDUtMzQtNAorYWx3YXlzIFx1NjRBQyAyNDUtMjQ2LTUKK2Fsd2F5cyBcdTY0QUQgMTM1LTEyNi01CithbHdheXMgXHU2NEFFIDI0NS0yNS0zCithbHdheXMgXHU2NEFGIDEtMjUtMgorYWx3YXlzIFx1NjRCMCAxLTEyNDU2LTUKK2Fsd2F5cyBcdTY0QjEgMTI0LTI1LTQKK2Fsd2F5cyBcdTY0QjIgMTIzNC0zNC0zCithbHdheXMgXHU2NEIzIDI0NS0xNDU2LTUKK2Fsd2F5cyBcdTY0QjQgMTQ1LTEyMzQ1Ni0zCithbHdheXMgXHU2NEI1IDEzNDUtMjM0NS00CithbHdheXMgXHU2NEI2IDEyMzUtMzUtMgorYWx3YXlzIFx1NjRCNyAxNS0zNDYtMgorYWx3YXlzIFx1NjRCOCAxNC0zNC0zCithbHdheXMgXHU2NEI5IDEzLTI0Ni00CithbHdheXMgXHU2NEJBIDI0NS0xMjQ1Ni0zCithbHdheXMgXHU2NEJCIDEyNC0zNDUtNQorYWx3YXlzIFx1NjRCQyAxMjM1LTEyMzYtNQorYWx3YXlzIFx1NjRCRCAyNDUtMjQ2LTUKK2Fsd2F5cyBcdTY0QkUgMS0zNS0zCithbHdheXMgXHU2NEJGIDEzLTIzNDUtNAorYWx3YXlzIFx1NjRDMCAxMy0xMjM2LTQKK2Fsd2F5cyBcdTY0QzEgMjM1LTQKK2Fsd2F5cyBcdTY0QzIgMTQtMzU2LTIKK2Fsd2F5cyBcdTY0QzMgMTM0NS0xMzQ2LTQKK2Fsd2F5cyBcdTY0QzQgMTQtMzQtNAorYWx3YXlzIFx1NjRDNSAyNC0xMjM2LTUKK2Fsd2F5cyBcdTY0QzYgMS0yNS0yCithbHdheXMgXHU2NEM3IDEyNS0yMzQ2LTIKK2Fsd2F5cyBcdTY0QzggMTIzNC0zNC0zCithbHdheXMgXHU2NEM5IDEyLTI1LTUKK2Fsd2F5cyBcdTY0Q0EgMTMtMTYtMgorYWx3YXlzIFx1NjRDQiAxNDUtMTM0Ni00CithbHdheXMgXHU2NENDIDE1LTI1LTQKK2Fsd2F5cyBcdTY0Q0QgMjQ1LTE0Ni0zCithbHdheXMgXHU2NENFIDI0NS0xMzQ1Ni0yCithbHdheXMgXHU2NENGIDI0NS0xMzQ1Ni0yCithbHdheXMgXHU2NEQwIDEyMzUtMTI0NTYtNQorYWx3YXlzIFx1NjREMSAxMy0zNDYtMworYWx3YXlzIFx1NjREMiAyNDUtMTQ1Ni0yCithbHdheXMgXHU2NEQzIDEyMy0yMzU2LTMKK2Fsd2F5cyBcdTY0RDQgMTQ1LTEyMzYtMworYWx3YXlzIFx1NjRENSAxNS0xNi0zCithbHdheXMgXHU2NEQ2IDEzLTIzNDYtNQorYWx3YXlzIFx1NjRENyAxMjM0LTE2LTUKK2Fsd2F5cyBcdTY0RDggMTM1LTEyNi01CithbHdheXMgXHU2NEQ5IDE0Ni01CithbHdheXMgXHU2NERBIDEzLTEyNTYtNQorYWx3YXlzIFx1NjREQiAzNDYtNQorYWx3YXlzIFx1NjREQyAyMzQ2LTUKK2Fsd2F5cyBcdTY0REQgMTM0LTEzNTYtMworYWx3YXlzIFx1NjRERSAxNS0xMjM1Ni00CithbHdheXMgXHU2NERGIDEzNC0xNi0yCithbHdheXMgXHU2NEUwIDEzLTE2LTQKK2Fsd2F5cyBcdTY0RTEgMTI0LTI0NTYtMgorYWx3YXlzIFx1NjRFMiAxLTI1LTIKK2Fsd2F5cyBcdTY0RTMgMTQ1LTE0Ni00CithbHdheXMgXHU2NEU0IDE1LTEzNDU2LTQKK2Fsd2F5cyBcdTY0RTUgMTQtMTIzNi00CithbHdheXMgXHU2NEU2IDI0NS0zNDUtMworYWx3YXlzIFx1NjRFNyAxMy0xMjU2LTQKK2Fsd2F5cyBcdTY0RTggMzQ2LTIKK2Fsd2F5cyBcdTY0RTkgMTI0NS0zNC01CithbHdheXMgXHU2NEVBIDM0Ni01CithbHdheXMgXHU2NEVCIDM0Ni01CithbHdheXMgXHU2NEVDIDEzNDUtMTYtNAorYWx3YXlzIFx1NjRFRCAxMjM1LTM0LTUKK2Fsd2F5cyBcdTY0RUUgMTMtMTYtMgorYWx3YXlzIFx1NjRFRiAxMzUtMTQ1Ni01CithbHdheXMgXHU2NEYwIDEzNDUtMTM0NTYtMgorYWx3YXlzIFx1NjRGMSAxMy0yMzQ2LTMKK2Fsd2F5cyBcdTY0RjIgMS0xNTYtMgorYWx3YXlzIFx1NjRGMyAxMy0zNDYtMgorYWx3YXlzIFx1NjRGNCAxMjMtMjUtNQorYWx3YXlzIFx1NjRGNSAxMzQtMTI2LTIKK2Fsd2F5cyBcdTY0RjYgMTMtMjM0NS01CithbHdheXMgXHU2NEY3IDEzLTM0Ni0yCithbHdheXMgXHU2NEY4IDE0LTM0Ni01CithbHdheXMgXHU2NEY5IDEyNC0xMjM2LTMKK2Fsd2F5cyBcdTY0RkEgMTM1LTI0NTYtNAorYWx3YXlzIFx1NjRGQiAxNS0xMjM1Ni00CithbHdheXMgXHU2NEZDIDE0LTM0LTMKK2Fsd2F5cyBcdTY0RkQgMTQtMjM2LTUKK2Fsd2F5cyBcdTY0RkUgMTI0NS0xNDYtNAorYWx3YXlzIFx1NjRGRiAxLTE1Ni0yCithbHdheXMgXHU2NTAwIDEyMzQtMTIzNi0zCithbHdheXMgXHU2NTAxIDQ2LTQKK2Fsd2F5cyBcdTY1MDIgMTQtMzU2LTIKK2Fsd2F5cyBcdTY1MDMgMTUtMzQ1LTUKK2Fsd2F5cyBcdTY1MDQgMjQtMzQtMworYWx3YXlzIFx1NjUwNSAxMjUtMTIzNi00CithbHdheXMgXHU2NTA2IDEzNDUtMjM0NS00CithbHdheXMgXHU2NTA3IDE1LTIzNDUtNAorYWx3YXlzIFx1NjUwOCAxMy0yNTYtNQorYWx3YXlzIFx1NjUwOSAxMjM1LTI1LTMKK2Fsd2F5cyBcdTY1MEEgMTQtMTYtNQorYWx3YXlzIFx1NjUwQiAxNC0zNDUtNQorYWx3YXlzIFx1NjUwQyAxMjM1LTEyMzYtNQorYWx3YXlzIFx1NjUwRCAxMzQ1Ni0yCithbHdheXMgXHU2NTBFIDE0LTM0LTIKK2Fsd2F5cyBcdTY1MEYgMTQtMTIzNDYtNAorYWx3YXlzIFx1NjUxMCAyNDUtMjM0NS0zCithbHdheXMgXHU2NTExIDI0NS0yMzQ1LTMKK2Fsd2F5cyBcdTY1MTIgMTI1LTEyMzYtNAorYWx3YXlzIFx1NjUxMyAyNDUtMjM0NS0zCithbHdheXMgXHU2NTE0IDE0LTEyMzYtMgorYWx3YXlzIFx1NjUxNSAxNS0yMzQ1LTMKK2Fsd2F5cyBcdTY1MTYgMTM0NTYtMworYWx3YXlzIFx1NjUxNyAxMzQtMzU2LTIKK2Fsd2F5cyBcdTY1MTggMTI0NS0xMzQ2LTQKK2Fsd2F5cyBcdTY1MTkgMTItMTIzNi0zCithbHdheXMgXHU2NTFBIDEzNDU2LTIKK2Fsd2F5cyBcdTY1MUIgMjQ1LTEyNDU2LTMKK2Fsd2F5cyBcdTY1MUMgMTUtMTYtMworYWx3YXlzIFx1NjUxRCAyNC0yMzQ2LTUKK2Fsd2F5cyBcdTY1MUUgMTQtMjUtMworYWx3YXlzIFx1NjUxRiAxMy0yNTYtNQorYWx3YXlzIFx1NjUyMCAxMzQtMTYtMgorYWx3YXlzIFx1NjUyMSAxNC0xNi0yCithbHdheXMgXHU2NTIyIDEyNS0xMjM2LTQKK2Fsd2F5cyBcdTY1MjMgMTQtMTI0NTYtMgorYWx3YXlzIFx1NjUyNCAxMjQtMTIzNi0zCithbHdheXMgXHU2NTI1IDEyNS0xMjQ1Ni01CithbHdheXMgXHU2NTI2IDE0LTE2LTUKK2Fsd2F5cyBcdTY1MjcgMTQ1LTIzNDUtMworYWx3YXlzIFx1NjUyOCAzNS0zCithbHdheXMgXHU2NTI5IDE0NS0xMzQ2LTQKK2Fsd2F5cyBcdTY1MkEgMTMtMjQ2LTQKK2Fsd2F5cyBcdTY1MkIgMTMtMjM2LTIKK2Fsd2F5cyBcdTY1MkMgMTQtMTIzNi00CithbHdheXMgXHU2NTJEIDE0LTE2LTUKK2Fsd2F5cyBcdTY1MkUgMTM0NS0xMzQ2LTQKK2Fsd2F5cyBcdTY1MkYgMS0xNTYtMworYWx3YXlzIFx1NjUzMCAxMy0xMjQ2LTUKK2Fsd2F5cyBcdTY1MzEgMTMtMTI0Ni00CithbHdheXMgXHU2NTMyIDI0NS0xNi0zCithbHdheXMgXHU2NTMzIDE1LTE0NTYtMgorYWx3YXlzIFx1NjUzNCAxMjM0LTM0LTMKK2Fsd2F5cyBcdTY1MzUgMTIzNC0zNC0zCithbHdheXMgXHU2NTM2IDI0LTEyMzU2LTMKK2Fsd2F5cyBcdTY1MzcgMTIzLTE0Ni00CithbHdheXMgXHU2NTM4IDIzNC0zCithbHdheXMgXHU2NTM5IDEzLTI0NTYtNAorYWx3YXlzIFx1NjUzQSAxNi00CithbHdheXMgXHU2NTNCIDEzLTEyMzQ2LTMKK2Fsd2F5cyBcdTY1M0MgMTMtMTIzNi0zCithbHdheXMgXHU2NTNEIDEzNS0xMjM2LTMKK2Fsd2F5cyBcdTY1M0UgMTIzNDUtMTM0Ni01CithbHdheXMgXHU2NTNGIDEtMTM1Ni01CithbHdheXMgXHU2NTQwIDEzNS0xMjYtMgorYWx3YXlzIFx1NjU0MSAxNDUtMjM0NS0zCithbHdheXMgXHU2NTQyIDEyMy0xMjM1Ni01CithbHdheXMgXHU2NTQzIDEzNC0xNDU2LTQKK2Fsd2F5cyBcdTY1NDQgMzQtNQorYWx3YXlzIFx1NjU0NSAxMy0zNC01CithbHdheXMgXHU2NTQ2IDEzLTIzNDYtMgorYWx3YXlzIFx1NjU0NyAyNDUtMjM0Ni01CithbHdheXMgXHU2NTQ4IDE1LTI0Ni01CithbHdheXMgXHU2NTQ5IDEzNC0xNi00CithbHdheXMgXHU2NTRBIDEyLTM0LTUKK2Fsd2F5cyBcdTY1NEIgMTMtMjM0Ni0yCithbHdheXMgXHU2NTRDIDE0NS0xNi0yCithbHdheXMgXHU2NTREIDE1LTEyNTYtNQorYWx3YXlzIFx1NjU0RSAxMy0yNDYtNQorYWx3YXlzIFx1NjU0RiAxMzQtMTQ1Ni00CithbHdheXMgXHU2NTUwIDEyLTEzNi0yCithbHdheXMgXHU2NTUxIDEzLTIzNC01CithbHdheXMgXHU2NTUyIDEtMTM2LTUKK2Fsd2F5cyBcdTY1NTMgMTQ1LTI1LTIKK2Fsd2F5cyBcdTY1NTQgMTI1Ni00CithbHdheXMgXHU2NTU1IDEyLTE1Ni01CithbHdheXMgXHU2NTU2IDE0Ni0yCithbHdheXMgXHU2NTU3IDEzNS0yNDU2LTUKK2Fsd2F5cyBcdTY1NTggMTUtMTI1Ni01CithbHdheXMgXHU2NTU5IDEzLTI0Ni01CithbHdheXMgXHU2NTVBIDE0NS0yNS0yCithbHdheXMgXHU2NTVCIDE0LTIzNDUtNQorYWx3YXlzIFx1NjU1QyAxMzQ1LTM0Ni01CithbHdheXMgXHU2NTVEIDEzNS0xNi01CithbHdheXMgXHU2NTVFIDEyLTEzNDYtNAorYWx3YXlzIFx1NjU1RiAxNDUtMjM0NS00CithbHdheXMgXHU2NTYwIDE0NS0yNS0yCithbHdheXMgXHU2NTYxIDE2LTUKK2Fsd2F5cyBcdTY1NjIgMTMtMTIzNi00CithbHdheXMgXHU2NTYzIDE1LTEyMzYtNQorYWx3YXlzIFx1NjU2NCAxMjMtMjM0Ni00CithbHdheXMgXHU2NTY1IDIzNDUtNQorYWx3YXlzIFx1NjU2NiAxNDUtMTIzNDU2LTMKK2Fsd2F5cyBcdTY1NjcgMTMtMTYtMworYWx3YXlzIFx1NjU2OCAxMjQtMTIzNTYtNAorYWx3YXlzIFx1NjU2OSAxNS0yNDYtNQorYWx3YXlzIFx1NjU2QSAxNDUtMjUtMgorYWx3YXlzIFx1NjU2QiAxMy0yNDYtNAorYWx3YXlzIFx1NjU2QyAxMy0xMzQ1Ni01CithbHdheXMgXHU2NTZEIDQ2LTIKK2Fsd2F5cyBcdTY1NkUgMTUtMjM0NTYtMgorYWx3YXlzIFx1NjU2RiAxMzQtMTQ1Ni00CithbHdheXMgXHU2NTcwIDI0LTM0LTUKK2Fsd2F5cyBcdTY1NzEgMjQ1Ni0yCithbHdheXMgXHU2NTcyIDI0NS0yNDYtMworYWx3YXlzIFx1NjU3MyAyNDU2LTIKK2Fsd2F5cyBcdTY1NzQgMS0xMzU2LTQKK2Fsd2F5cyBcdTY1NzUgMTQ1LTE2LTIKK2Fsd2F5cyBcdTY1NzYgMS0xMzYtNQorYWx3YXlzIFx1NjU3NyAxMjM0NS0zNC0zCithbHdheXMgXHU2NTc4IDI0LTM0LTUKK2Fsd2F5cyBcdTY1NzkgMTQtMjQ2LTIKK2Fsd2F5cyBcdTY1N0EgMjQ1LTEyNTYtMworYWx3YXlzIFx1NjU3QiAxNS0yMzUtNQorYWx3YXlzIFx1NjU3QyAxNS0xNi00CithbHdheXMgXHU2NTdEIDEzLTI0Ni00CithbHdheXMgXHU2NTdFIDI0LTEyMzYtNQorYWx3YXlzIFx1NjU3RiAxMy0yNDYtNAorYWx3YXlzIFx1NjU4MCAxLTI1LTIKK2Fsd2F5cyBcdTY1ODEgMTYtNQorYWx3YXlzIFx1NjU4MiAxNC0yMzQ1LTUKK2Fsd2F5cyBcdTY1ODMgMTM1LTE2LTUKK2Fsd2F5cyBcdTY1ODQgMTQtMTYtNQorYWx3YXlzIFx1NjU4NSAxNS0yNDYtNQorYWx3YXlzIFx1NjU4NiAxNS0yNDYtNQorYWx3YXlzIFx1NjU4NyAxMjM0NTYtMgorYWx3YXlzIFx1NjU4OCAxNS0yMzYtMgorYWx3YXlzIFx1NjU4OSAyNDUtMTYtMgorYWx3YXlzIFx1NjU4QSAyNDUtMTYtMgorYWx3YXlzIFx1NjU4QiAxLTI0NTYtMworYWx3YXlzIFx1NjU4QyAxMzUtMTQ1Ni0zCithbHdheXMgXHU2NThEIDEzLTIzNi0yCithbHdheXMgXHU2NThFIDEtMjQ1Ni0zCithbHdheXMgXHU2NThGIDE0LTEzNDYtMgorYWx3YXlzIFx1NjU5MCAxMjM0NS0zNTYtNAorYWx3YXlzIFx1NjU5MSAxMzUtMTIzNi0zCithbHdheXMgXHU2NTkyIDEzNS0xMjM2LTMKK2Fsd2F5cyBcdTY1OTMgMTQtMTIzNi0yCithbHdheXMgXHU2NTk0IDEyNTYtNAorYWx3YXlzIFx1NjU5NSAxNC0xMjM2LTIKK2Fsd2F5cyBcdTY1OTYgMTI0Ni00CithbHdheXMgXHU2NTk3IDE0NS0xMjM1Ni00CithbHdheXMgXHU2NTk4IDI0LTEzNTYtMworYWx3YXlzIFx1NjU5OSAxNC0yNDYtNQorYWx3YXlzIFx1NjU5QSAxMy0yMzQ1Ni00CithbHdheXMgXHU2NTlCIDEyMzUtMzQtMgorYWx3YXlzIFx1NjU5QyAxNS0zNDYtMgorYWx3YXlzIFx1NjU5RCAxMy0yMzQ1Ni00CithbHdheXMgXHU2NTlFIDEyNTYtNAorYWx3YXlzIFx1NjU5RiAxLTEzNi0zCithbHdheXMgXHU2NUEwIDEzLTI0Ni01CithbHdheXMgXHU2NUExIDI1LTUKK2Fsd2F5cyBcdTY1QTIgMTI0LTEyMzU2LTQKK2Fsd2F5cyBcdTY1QTMgMTItMzQtNQorYWx3YXlzIFx1NjVBNCAxMy0xNDU2LTMKK2Fsd2F5cyBcdTY1QTUgMTItMTU2LTUKK2Fsd2F5cyBcdTY1QTYgMTQ1Ni0yCithbHdheXMgXHU2NUE3IDEyMzQ1LTM0LTQKK2Fsd2F5cyBcdTY1QTggMjQ1LTQ2LTMKK2Fsd2F5cyBcdTY1QTkgMS0xMjM2LTQKK2Fsd2F5cyBcdTY1QUEgMjQ1LTEyNTYtMgorYWx3YXlzIFx1NjVBQiAxLTI1LTIKK2Fsd2F5cyBcdTY1QUMgMS0xMjM2LTQKK2Fsd2F5cyBcdTY1QUQgMTQ1LTEyNDU2LTUKK2Fsd2F5cyBcdTY1QUUgMS0yNS0yCithbHdheXMgXHU2NUFGIDE1LTE1Ni0zCithbHdheXMgXHU2NUIwIDE1LTE0NTYtMworYWx3YXlzIFx1NjVCMSAxLTI1LTIKK2Fsd2F5cyBcdTY1QjIgMS0yNS0yCithbHdheXMgXHU2NUIzIDI0NS0xNDU2LTIKK2Fsd2F5cyBcdTY1QjQgMTQtMTQ1Ni0yCithbHdheXMgXHU2NUI1IDEtMjUtMgorYWx3YXlzIFx1NjVCNiAxMi0zNC01CithbHdheXMgXHU2NUI3IDE0NS0xMjQ1Ni01CithbHdheXMgXHU2NUI4IDEtMzQtNAorYWx3YXlzIFx1NjVCOSAxMjM0NS0xMzQ2LTMKK2Fsd2F5cyBcdTY1QkEgMTUtMzQ2LTUKK2Fsd2F5cyBcdTY1QkIgMTIzNS0xMzQ2LTIKK2Fsd2F5cyBcdTY1QkMgMTI1Ni0yCithbHdheXMgXHU2NUJEIDI0LTE1Ni0zCithbHdheXMgXHU2NUJFIDEyMzQtMzU2LTUKK2Fsd2F5cyBcdTY1QkYgMjM0LTIKK2Fsd2F5cyBcdTY1QzAgMTI0Ni01CithbHdheXMgXHU2NUMxIDEyMzQtMTM0Ni0yCithbHdheXMgXHU2NUMyIDI0NS0xNi0yCithbHdheXMgXHU2NUMzIDEtMTIzNi0zCithbHdheXMgXHU2NUM0IDEzNC0xNDYtMgorYWx3YXlzIFx1NjVDNSAxNC0xMjU2LTQKK2Fsd2F5cyBcdTY1QzYgMTIzNC0zNTYtNQorYWx3YXlzIFx1NjVDNyAxMjM0LTE2LTMKK2Fsd2F5cyBcdTY1QzggMTQtMjM0LTIKK2Fsd2F5cyBcdTY1QzkgMTIzNDUtMzQtMworYWx3YXlzIFx1NjVDQSAxMjM0NS0xMzQ2LTQKK2Fsd2F5cyBcdTY1Q0IgMTUtNDUtMgorYWx3YXlzIFx1NjVDQyAxMy0xMzQ1Ni0zCithbHdheXMgXHU2NUNEIDEzLTEzNDU2LTMKK2Fsd2F5cyBcdTY1Q0UgMTM0NS0xNi00CithbHdheXMgXHU2NUNGIDEyNS0zNC0yCithbHdheXMgXHU2NUQwIDEtMTQ2LTUKK2Fsd2F5cyBcdTY1RDEgMTYtNAorYWx3YXlzIFx1NjVEMiAxNC0yMzQtMgorYWx3YXlzIFx1NjVEMyAyNC0xNDYtMworYWx3YXlzIFx1NjVENCAxMy0yMzQ1LTUKK2Fsd2F5cyBcdTY1RDUgMjM0Ni0yCithbHdheXMgXHU2NUQ2IDE2LTQKK2Fsd2F5cyBcdTY1RDcgMjQ1LTE2LTIKK2Fsd2F5cyBcdTY1RDggMS0xNTYtNQorYWx3YXlzIFx1NjVEOSAxMjM0NS0xMjM2LTMKK2Fsd2F5cyBcdTY1REEgMTIzNC0yNDYtMworYWx3YXlzIFx1NjVEQiAxMjM0NS0xMjM2LTMKK2Fsd2F5cyBcdTY1REMgMS0xMjM2LTMKK2Fsd2F5cyBcdTY1REQgMTMtMjM1Ni01CithbHdheXMgXHU2NURFIDE1LTEyNDYtNQorYWx3YXlzIFx1NjVERiAxMjU2LTIKK2Fsd2F5cyBcdTY1RTAgMzQtMgorYWx3YXlzIFx1NjVFMSAxMy0xNi01CithbHdheXMgXHU2NUUyIDEzLTE2LTUKK2Fsd2F5cyBcdTY1RTMgMTMtMTYtNQorYWx3YXlzIFx1NjVFNCAxMjM1LTI1LTUKK2Fsd2F5cyBcdTY1RTUgMTI0NS0xNTYtNQorYWx3YXlzIFx1NjVFNiAxNDUtMTIzNi01CithbHdheXMgXHU2NUU3IDEzLTIzNC01CithbHdheXMgXHU2NUU4IDEtMTU2LTQKK2Fsd2F5cyBcdTY1RTkgMTI1LTE0Ni00CithbHdheXMgXHU2NUVBIDE1LTM0Ni0yCithbHdheXMgXHU2NUVCIDEyNC0yNDYtMworYWx3YXlzIFx1NjVFQyAxNS0yNTYtMgorYWx3YXlzIFx1NjVFRCAxNS0xMjU2LTUKK2Fsd2F5cyBcdTY1RUUgMTMtMzQ1LTMKK2Fsd2F5cyBcdTY1RUYgMTQtMzQ1LTIKK2Fsd2F5cyBcdTY1RjAgMTMtMTIzNi01CithbHdheXMgXHU2NUYxIDEyMzUtMTIzNi01CithbHdheXMgXHU2NUYyIDEyNC0yNDU2LTIKK2Fsd2F5cyBcdTY1RjMgMTQ1LTE2LTUKK2Fsd2F5cyBcdTY1RjQgMTUtMTI1Ni0zCithbHdheXMgXHU2NUY1IDEyLTEyMzYtNAorYWx3YXlzIFx1NjVGNiAyNC0xNTYtMgorYWx3YXlzIFx1NjVGNyAxMjMtNDU2LTUKK2Fsd2F5cyBcdTY1RjggNDYtMgorYWx3YXlzIFx1NjVGOSAyNC0xNTYtMgorYWx3YXlzIFx1NjVGQSA0NTYtNQorYWx3YXlzIFx1NjVGQiAxMzQtMTQ1Ni0yCithbHdheXMgXHU2NUZDIDEzNC0xNDU2LTIKK2Fsd2F5cyBcdTY1RkQgMTI0LTEyMzQ1Ni0zCithbHdheXMgXHU2NUZFIDEyLTEyMzQ1Ni0zCithbHdheXMgXHU2NUZGIDM0LTQKK2Fsd2F5cyBcdTY2MDAgMjU2LTIKK2Fsd2F5cyBcdTY2MDEgMTM1LTM1Ni01CithbHdheXMgXHU2NjAyIDEzNDYtMgorYWx3YXlzIFx1NjYwMyAxMjUtMjM0Ni01CithbHdheXMgXHU2NjA0IDEzNS0xMjM2LTQKK2Fsd2F5cyBcdTY2MDUgMTMtMTYtMgorYWx3YXlzIFx1NjYwNiAxMjMtMTIzNDU2LTMKK2Fsd2F5cyBcdTY2MDcgMjQtMTM1Ni0zCithbHdheXMgXHU2NjA4IDEyMzUtMzQtNQorYWx3YXlzIFx1NjYwOSAxMjM0NS0xMzQ2LTQKK2Fsd2F5cyBcdTY2MEEgMTIzNS0xNDYtNQorYWx3YXlzIFx1NjYwQiAxMy0xMjQ2LTUKK2Fsd2F5cyBcdTY2MEMgMTItMTM0Ni0zCithbHdheXMgXHU2NjBEIDE1LTQ1LTMKK2Fsd2F5cyBcdTY2MEUgMTM0LTEzNDU2LTIKK2Fsd2F5cyBcdTY2MEYgMTIzNS0xMjM0NTYtMworYWx3YXlzIFx1NjYxMCAxMjM0NS0xMzYtMworYWx3YXlzIFx1NjYxMSAyNDUtMTQ1Ni00CithbHdheXMgXHU2NjEyIDEyMzUtMzQtMworYWx3YXlzIFx1NjYxMyAxNi01CithbHdheXMgXHU2NjE0IDE1LTE2LTIKK2Fsd2F5cyBcdTY2MTUgMTUtMTQ1Ni0zCithbHdheXMgXHU2NjE2IDIzNDUtMgorYWx3YXlzIFx1NjYxNyAxMjUtMjM0Ni01CithbHdheXMgXHU2NjE4IDEyMzQ1LTEzNDYtNAorYWx3YXlzIFx1NjYxOSAxMjQtMTIzNi0yCithbHdheXMgXHU2NjFBIDI0LTEzNi01CithbHdheXMgXHU2NjFCIDEzLTEyNTYtNQorYWx3YXlzIFx1NjYxQyA0Ni0yCithbHdheXMgXHU2NjFEIDEyNS0xMjM2LTQKK2Fsd2F5cyBcdTY2MUUgMTM1LTEzNDU2LTQKK2Fsd2F5cyBcdTY2MUYgMTUtMTM0NTYtMworYWx3YXlzIFx1NjYyMCAxMzQ1Ni01CithbHdheXMgXHU2NjIxIDE1LTQ1LTUKK2Fsd2F5cyBcdTY2MjIgMTIzNC0xMjYtNQorYWx3YXlzIFx1NjYyMyAxLTEzNi00CithbHdheXMgXHU2NjI0IDE0LTEzNDU2LTMKK2Fsd2F5cyBcdTY2MjUgMTItMTIzNDU2LTMKK2Fsd2F5cyBcdTY2MjYgMTIzNS0xNDYtNQorYWx3YXlzIFx1NjYyNyAxMzQtMzU2LTUKK2Fsd2F5cyBcdTY2MjggMTI1LTI1LTIKK2Fsd2F5cyBcdTY2MjkgMTM0LTEyNi01CithbHdheXMgXHU2NjJBIDEzNS0yMzQ1LTUKK2Fsd2F5cyBcdTY2MkIgMTUtMTI1Ni01CithbHdheXMgXHU2NjJDIDEyMzUtMTIzNDU2LTMKK2Fsd2F5cyBcdTY2MkQgMS0xNDYtMworYWx3YXlzIFx1NjYyRSAxMjUtMTIzNDYtNQorYWx3YXlzIFx1NjYyRiAyNC0xNTYtNQorYWx3YXlzIFx1NjYzMCAyNC0xNTYtNQorYWx3YXlzIFx1NjYzMSAxMjU2LTUKK2Fsd2F5cyBcdTY2MzIgMTIzNDUtMzU2LTUKK2Fsd2F5cyBcdTY2MzMgMTQ1LTM0Ni0yCithbHdheXMgXHU2NjM0IDEzNC0xNDYtNAorYWx3YXlzIFx1NjYzNSAxMzQ1LTE2LTUKK2Fsd2F5cyBcdTY2MzYgMTItMTM0Ni00CithbHdheXMgXHU2NjM3IDEyMzQ1Ni0zCithbHdheXMgXHU2NjM4IDE0NS0xMjM0Ni0zCithbHdheXMgXHU2NjM5IDI0NTYtNAorYWx3YXlzIFx1NjYzQSAxMzUtMTM0NTYtNAorYWx3YXlzIFx1NjYzQiAxMzQ2LTIKK2Fsd2F5cyBcdTY2M0MgMS0xMjM1Ni01CithbHdheXMgXHU2NjNEIDE0LTEyMzQ2LTIKK2Fsd2F5cyBcdTY2M0UgMTUtMjM0NS00CithbHdheXMgXHU2NjNGIDEyMy00NTYtNQorYWx3YXlzIFx1NjY0MCAxMjQtMjQ2LTQKK2Fsd2F5cyBcdTY2NDEgMTItMTQ2LTIKK2Fsd2F5cyBcdTY2NDIgMjQtMTU2LTIKK2Fsd2F5cyBcdTY2NDMgMTIzNS00NTYtNQorYWx3YXlzIFx1NjY0NCAxMjM1LTQ1Ni00CithbHdheXMgXHU2NjQ1IDE1LTQ1LTMKK2Fsd2F5cyBcdTY2NDYgMTIzLTEyNDYtMgorYWx3YXlzIFx1NjY0NyAxNS0xMjU2LTMKK2Fsd2F5cyBcdTY2NDggMTMtMjQ2LTQKK2Fsd2F5cyBcdTY2NDkgMTMtMTQ1Ni01CithbHdheXMgXHU2NjRBIDEtMTU2LTQKK2Fsd2F5cyBcdTY2NEIgMTMtMTQ1Ni01CithbHdheXMgXHU2NjRDIDI0LTEzNDYtNAorYWx3YXlzIFx1NjY0RCAxMjQtMTIzNDYtMgorYWx3YXlzIFx1NjY0RSAxMjM1LTEyMzQ2LTQKK2Fsd2F5cyBcdTY2NEYgMjM0NS01CithbHdheXMgXHU2NjUwIDEzLTI0NTYtMworYWx3YXlzIFx1NjY1MSAxNS00Ni00CithbHdheXMgXHU2NjUyIDI0LTI0NTYtNQorYWx3YXlzIFx1NjY1MyAxNS0yNDYtNAorYWx3YXlzIFx1NjY1NCAzNDYtNQorYWx3YXlzIFx1NjY1NSAyNTYtMworYWx3YXlzIFx1NjY1NiAxMjM1LTEyNDYtMworYWx3YXlzIFx1NjY1NyAxMjM1LTEyMzYtMgorYWx3YXlzIFx1NjY1OCAxMjM1LTEyMzYtNQorYWx3YXlzIFx1NjY1OSAxMy0yNTYtNQorYWx3YXlzIFx1NjY1QSAxMjQ1Ni00CithbHdheXMgXHU2NjVCIDE1LTIzNDUtNQorYWx3YXlzIFx1NjY1QyAxMjMtMTIzNDU2LTMKK2Fsd2F5cyBcdTY2NUQgMS0xMjM1Ni01CithbHdheXMgXHU2NjVFIDE1LTE2LTMKK2Fsd2F5cyBcdTY2NUYgMjQtMTM1Ni01CithbHdheXMgXHU2NjYwIDI0LTEzNTYtMgorYWx3YXlzIFx1NjY2MSAxMzUtMzQtMworYWx3YXlzIFx1NjY2MiAxLTIzNDYtMgorYWx3YXlzIFx1NjY2MyAxLTIzNDYtMworYWx3YXlzIFx1NjY2NCAzNC01CithbHdheXMgXHU2NjY1IDEyMzUtMTIzNi01CithbHdheXMgXHU2NjY2IDEyMzUtMTI0Ni01CithbHdheXMgXHU2NjY3IDEyMzUtMTQ2LTUKK2Fsd2F5cyBcdTY2NjggMTItMTM2LTIKK2Fsd2F5cyBcdTY2NjkgMTI0NTYtNAorYWx3YXlzIFx1NjY2QSAxMjQtMjM0NS00CithbHdheXMgXHU2NjZCIDEtMjUtMgorYWx3YXlzIFx1NjY2QyAxMjUtMTI0Ni01CithbHdheXMgXHU2NjZEIDEtMTIzNTYtNAorYWx3YXlzIFx1NjY2RSAxMjM0LTM0LTQKK2Fsd2F5cyBcdTY2NkYgMTMtMTM0NTYtNAorYWx3YXlzIFx1NjY3MCAxNS0xNi0zCithbHdheXMgXHU2NjcxIDI0LTEyMzYtNAorYWx3YXlzIFx1NjY3MiAxNi00CithbHdheXMgXHU2NjczIDE1LTE2LTMKK2Fsd2F5cyBcdTY2NzQgMjQ1LTEzNDU2LTIKK2Fsd2F5cyBcdTY2NzUgMjQ1LTE2LTQKK2Fsd2F5cyBcdTY2NzYgMTMtMTM0NTYtMworYWx3YXlzIFx1NjY3NyAxMy0xMjQ2LTQKK2Fsd2F5cyBcdTY2NzggMS0xMzYtNAorYWx3YXlzIFx1NjY3OSAxNi01CithbHdheXMgXHU2NjdBIDEtMTU2LTUKK2Fsd2F5cyBcdTY2N0IgMTIzNi00CithbHdheXMgXHU2NjdDIDEyNDU2LTQKK2Fsd2F5cyBcdTY2N0QgMTQtMTQ1Ni0yCithbHdheXMgXHU2NjdFIDE0LTQ2LTUKK2Fsd2F5cyBcdTY2N0YgMTItMTM0Ni0zCithbHdheXMgXHU2NjgwIDQ1Ni01CithbHdheXMgXHU2NjgxIDE1LTI0Ni00CithbHdheXMgXHU2NjgyIDEtMTIzNi01CithbHdheXMgXHU2NjgzIDEyMzQ1LTM1Ni0yCithbHdheXMgXHU2Njg0IDE1LTQ1LTMKK2Fsd2F5cyBcdTY2ODUgMTUtNDUtNAorYWx3YXlzIFx1NjY4NiAxNi0yCithbHdheXMgXHU2Njg3IDE1LTIzNDU2LTIKK2Fsd2F5cyBcdTY2ODggMjU2LTMKK2Fsd2F5cyBcdTY2ODkgMTIzNS0xMjQ2LTMKK2Fsd2F5cyBcdTY2OEEgMTIzNDUtMzQtNAorYWx3YXlzIFx1NjY4QiAxMzQtMTQ1Ni00CithbHdheXMgXHU2NjhDIDEyMy0xMjQ2LTIKK2Fsd2F5cyBcdTY2OEQgMTIzNS0yMzQ2LTUKK2Fsd2F5cyBcdTY2OEUgMTM0NTYtNQorYWx3YXlzIFx1NjY4RiAxNDUtMzQtNAorYWx3YXlzIFx1NjY5MCAxMjQ2LTQKK2Fsd2F5cyBcdTY2OTEgMjQtMzQtNAorYWx3YXlzIFx1NjY5MiAyNDUtMTM0NTYtMgorYWx3YXlzIFx1NjY5MyAxMzQtMTQ2LTUKK2Fsd2F5cyBcdTY2OTQgMTM0NS0xMjM2LTIKK2Fsd2F5cyBcdTY2OTUgMTMtMjM0NS00CithbHdheXMgXHU2Njk2IDEzNDUtMTI0NTYtNAorYWx3YXlzIFx1NjY5NyAxMjM2LTUKK2Fsd2F5cyBcdTY2OTggNDYtMgorYWx3YXlzIFx1NjY5OSAxMi0xMjM0NTYtMworYWx3YXlzIFx1NjY5QSAyNDYtMgorYWx3YXlzIFx1NjY5QiAxNS0yNS00CithbHdheXMgXHU2NjlDIDEzLTE0NTYtNQorYWx3YXlzIFx1NjY5RCAxMzQtMTM0NTYtMgorYWx3YXlzIFx1NjY5RSAxMy0yNDYtNAorYWx3YXlzIFx1NjY5RiAxMjMtMjQ1Ni00CithbHdheXMgXHU2NkEwIDEzLTE0Ni00CithbHdheXMgXHU2NkExIDEyMzQ2LTQKK2Fsd2F5cyBcdTY2QTIgMTItMTM0Ni01CithbHdheXMgXHU2NkEzIDI0NS0xNi01CithbHdheXMgXHU2NkE0IDEyMzUtMTQ2LTUKK2Fsd2F5cyBcdTY2QTUgMjM0NS01CithbHdheXMgXHU2NkE2IDE0LTE2LTUKK2Fsd2F5cyBcdTY2QTcgMjQ1Ni01CithbHdheXMgXHU2NkE4IDEzLTE2LTUKK2Fsd2F5cyBcdTY2QTkgMTMtMTI0Ni01CithbHdheXMgXHU2NkFBIDEzNC0xMzYtNAorYWx3YXlzIFx1NjZBQiAxLTEyMzYtNQorYWx3YXlzIFx1NjZBQyAxNS0zNDYtNQorYWx3YXlzIFx1NjZBRCAxMjM1LTE0Ni01CithbHdheXMgXHU2NkFFIDEzNC0zNC01CithbHdheXMgXHU2NkFGIDEzNC0xMjYtNQorYWx3YXlzIFx1NjZCMCAyNDUtMTIzNDYtMworYWx3YXlzIFx1NjZCMSAxMzQ1LTE2LTUKK2Fsd2F5cyBcdTY2QjIgMS0xMzQ2LTMKK2Fsd2F5cyBcdTY2QjMgMTIzNS0xMjQ2LTUKK2Fsd2F5cyBcdTY2QjQgMTM1LTE0Ni01CithbHdheXMgXHU2NkI1IDEyMzUtMTIzNi01CithbHdheXMgXHU2NkI2IDE1LTQ1LTIKK2Fsd2F5cyBcdTY2QjcgMTItMTI0NTYtMgorYWx3YXlzIFx1NjZCOCAxNC0yNDYtMgorYWx3YXlzIFx1NjZCOSAxNS0yMzQ1LTMKK2Fsd2F5cyBcdTY2QkEgMTQ1LTEyMzYtNQorYWx3YXlzIFx1NjZCQiAxMy0xMzQ1Ni00CithbHdheXMgXHU2NkJDIDEyMzQtMzQ2LTMKK2Fsd2F5cyBcdTY2QkQgMTQtMTQ1Ni0yCithbHdheXMgXHU2NkJFIDEyNC0xMjM0NTYtMworYWx3YXlzIFx1NjZCRiAxNS0xNi00CithbHdheXMgXHU2NkMwIDE2LTUKK2Fsd2F5cyBcdTY2QzEgMTMtMTYtNQorYWx3YXlzIFx1NjZDMiAxMjM1LTQ1Ni01CithbHdheXMgXHU2NkMzIDEyNC0yNDU2LTUKK2Fsd2F5cyBcdTY2QzQgMzQ2LTUKK2Fsd2F5cyBcdTY2QzUgMzQ2LTUKK2Fsd2F5cyBcdTY2QzYgMTQtMTYtNQorYWx3YXlzIFx1NjZDNyAxMjQtMTIzNi0yCithbHdheXMgXHU2NkM4IDEyNC0xMjM0Ni0yCithbHdheXMgXHU2NkM5IDE1LTI0Ni00CithbHdheXMgXHU2NkNBIDEyMzQ1LTM1Ni01CithbHdheXMgXHU2NkNCIDI0NS0xNDU2LTQKK2Fsd2F5cyBcdTY2Q0MgMS0xNDYtNQorYWx3YXlzIFx1NjZDRCAxMjM1LTE0Ni01CithbHdheXMgXHU2NkNFIDE2LTUKK2Fsd2F5cyBcdTY2Q0YgMTUtNDYtNQorYWx3YXlzIFx1NjZEMCAxNS0xMzQ1Ni0zCithbHdheXMgXHU2NkQxIDI0NS0xMjM2LTMKK2Fsd2F5cyBcdTY2RDIgMTMtMjQ2LTQKK2Fsd2F5cyBcdTY2RDMgMTM1LTE0Ni01CithbHdheXMgXHU2NkQ0IDEzLTEzNDU2LTUKK2Fsd2F5cyBcdTY2RDUgMjM0NS01CithbHdheXMgXHU2NkQ2IDI0NTYtNQorYWx3YXlzIFx1NjZENyAzNDYtNQorYWx3YXlzIFx1NjZEOCAxMjQ1LTM0LTIKK2Fsd2F5cyBcdTY2RDkgMjQtMzQtNAorYWx3YXlzIFx1NjZEQSAxMzQtMTM1Ni0yCithbHdheXMgXHU2NkRCIDE1LTI1Ni0zCithbHdheXMgXHU2NkRDIDI0Ni01CithbHdheXMgXHU2NkREIDEyMzQtMzQtNQorYWx3YXlzIFx1NjZERSAxNC0xNi01CithbHdheXMgXHU2NkRGIDEyLTEzNi0yCithbHdheXMgXHU2NkUwIDEyMy00NTYtNQorYWx3YXlzIFx1NjZFMSAxNDUtMzQ2LTIKK2Fsd2F5cyBcdTY2RTIgMTQtMjQ2LTQKK2Fsd2F5cyBcdTY2RTMgMjM0NS01CithbHdheXMgXHU2NkU0IDEyMzUtMjUtNQorYWx3YXlzIFx1NjZFNSAxNC0zNC0yCithbHdheXMgXHU2NkU2IDE1LTE2LTMKK2Fsd2F5cyBcdTY2RTcgMTI0NS0xMjM0Ni0yCithbHdheXMgXHU2NkU4IDE0LTEyMzQ2LTIKK2Fsd2F5cyBcdTY2RTkgMTM0NS0xMzQ2LTQKK2Fsd2F5cyBcdTY2RUEgMTQtMjUtNAorYWx3YXlzIFx1NjZFQiAxNC0xMjQ1Ni0yCithbHdheXMgXHU2NkVDIDI0LTI0NTYtNQorYWx3YXlzIFx1NjZFRCAxMjQtMTM0Ni00CithbHdheXMgXHU2NkVFIDIzNDUtNAorYWx3YXlzIFx1NjZFRiAxMi0zNC0yCithbHdheXMgXHU2NkYwIDIzNi0zCithbHdheXMgXHU2NkYxIDIzNDU2LTMKK2Fsd2F5cyBcdTY2RjIgMjQ1LTEyNTYtNAorYWx3YXlzIFx1NjZGMyAxNi01CithbHdheXMgXHU2NkY0IDEzLTEzNTYtNQorYWx3YXlzIFx1NjZGNSAxNi01CithbHdheXMgXHU2NkY2IDEyMzUtMzQtMworYWx3YXlzIFx1NjZGNyAxMjM1LTIzNDYtMgorYWx3YXlzIFx1NjZGOCAyNC0zNC0zCithbHdheXMgXHU2NkY5IDI0NS0xNDYtMgorYWx3YXlzIFx1NjZGQSAyNDUtMTQ2LTIKK2Fsd2F5cyBcdTY2RkIgMjQtMTM1Ni0zCithbHdheXMgXHU2NkZDIDEzNC0xMjM2LTUKK2Fsd2F5cyBcdTY2RkQgMjQ1LTEzNTYtMgorYWx3YXlzIFx1NjZGRSAyNDUtMTM1Ni0yCithbHdheXMgXHU2NkZGIDEyNC0xNi01CithbHdheXMgXHU2NzAwIDEyNS0xMjQ2LTUKK2Fsd2F5cyBcdTY3MDEgMjQ1LTEyMzYtNAorYWx3YXlzIFx1NjcwMiAxNS0xMjU2LTUKK2Fsd2F5cyBcdTY3MDMgMTIzNS0xMjQ2LTUKK2Fsd2F5cyBcdTY3MDQgMTQ1Ni01CithbHdheXMgXHU2NzA1IDI0NS0zNDYtNQorYWx3YXlzIFx1NjcwNiAxMjM0NS0xMzYtMworYWx3YXlzIFx1NjcwNyAxMjM0LTE2LTIKK2Fsd2F5cyBcdTY3MDggMjM2LTUKK2Fsd2F5cyBcdTY3MDkgMjM0LTQKK2Fsd2F5cyBcdTY3MEEgMTI0NTYtNAorYWx3YXlzIFx1NjcwQiAxMjM0LTEzNTYtMgorYWx3YXlzIFx1NjcwQyAxMzUtMTIzNi0zCithbHdheXMgXHU2NzBEIDEyMzQ1LTM0LTIKK2Fsd2F5cyBcdTY3MEUgMTQtMTM0NTYtMgorYWx3YXlzIFx1NjcwRiAxMjM0NS0zNTYtNAorYWx3YXlzIFx1NjcxMCAyNDUtMTI1Ni0yCithbHdheXMgXHU2NzExIDEyNC0xNi01CithbHdheXMgXHU2NzEyIDEzNDUtMTI1Ni01CithbHdheXMgXHU2NzEzIDEyNC0yNDYtNAorYWx3YXlzIFx1NjcxNCAyNC0yNS01CithbHdheXMgXHU2NzE1IDEtMTM2LTUKK2Fsd2F5cyBcdTY3MTYgMTQtMTM0Ni00CithbHdheXMgXHU2NzE3IDE0LTEzNDYtNAorYWx3YXlzIFx1NjcxOCAxMy00NS0zCithbHdheXMgXHU2NzE5IDEzNC0xMzQ1Ni0yCithbHdheXMgXHU2NzFBIDEyMzUtNDU2LTMKK2Fsd2F5cyBcdTY3MUIgNDU2LTUKK2Fsd2F5cyBcdTY3MUMgMTI0LTEyMzQ1Ni0zCithbHdheXMgXHU2NzFEIDEyLTE0Ni0yCithbHdheXMgXHU2NzFFIDEzLTE2LTMKK2Fsd2F5cyBcdTY3MUYgMjQ1LTE2LTIKK2Fsd2F5cyBcdTY3MjAgMTM0NTYtMworYWx3YXlzIFx1NjcyMSAxMjUtMTIzNDYtMworYWx3YXlzIFx1NjcyMiA0NTYtNQorYWx3YXlzIFx1NjcyMyAxMjQtMTIzNDYtMgorYWx3YXlzIFx1NjcyNCAxNC0xMzQ2LTQKK2Fsd2F5cyBcdTY3MjUgMTQtMTQ2LTIKK2Fsd2F5cyBcdTY3MjYgMTM0LTEzNTYtMgorYWx3YXlzIFx1NjcyNyAxNC0xMjM0Ni0yCithbHdheXMgXHU2NzI4IDEzNC0zNC01CithbHdheXMgXHU2NzI5IDE0NS0xMzU2LTQKK2Fsd2F5cyBcdTY3MkEgMTI0Ni01CithbHdheXMgXHU2NzJCIDEzNC0xMjYtNQorYWx3YXlzIFx1NjcyQyAxMzUtMTM2LTQKK2Fsd2F5cyBcdTY3MkQgMS0zNDUtMgorYWx3YXlzIFx1NjcyRSAyNC0zNC01CithbHdheXMgXHU2NzJGIDI0LTM0LTUKK2Fsd2F5cyBcdTY3MzAgMTIzNS0yMzQ2LTIKK2Fsd2F5cyBcdTY3MzEgMS0zNC0zCithbHdheXMgXHU2NzMyIDEyNDUtMTM2LTIKK2Fsd2F5cyBcdTY3MzMgMTM1LTM0NS0zCithbHdheXMgXHU2NzM0IDEyMzQtMzQtMgorYWx3YXlzIFx1NjczNSAxNDUtMjUtNAorYWx3YXlzIFx1NjczNiAxNDUtMjUtNAorYWx3YXlzIFx1NjczNyAxNDUtMTQ2LTMKK2Fsd2F5cyBcdTY3MzggMTQtMTYtNQorYWx3YXlzIFx1NjczOSAyNDUtMjM0LTIKK2Fsd2F5cyBcdTY3M0EgMTMtMTYtMworYWx3YXlzIFx1NjczQiAxMy0yMzQtMworYWx3YXlzIFx1NjczQyAxMzUtMTYtNAorYWx3YXlzIFx1NjczRCAxNS0yMzQtNAorYWx3YXlzIFx1NjczRSAxMjQtMTM0NTYtMgorYWx3YXlzIFx1NjczRiAyNDUtMTU2LTUKK2Fsd2F5cyBcdTY3NDAgMjQtMzQ1LTMKK2Fsd2F5cyBcdTY3NDEgMTI0NS0zNC01CithbHdheXMgXHU2NzQyIDEyNS0zNDUtMgorYWx3YXlzIFx1Njc0MyAyNDUtNDUtMgorYWx3YXlzIFx1Njc0NCAyNDUtMjM0NS0zCithbHdheXMgXHU2NzQ1IDEyNTYtMgorYWx3YXlzIFx1Njc0NiAxMy0xMjM2LTMKK2Fsd2F5cyBcdTY3NDcgMzQtMworYWx3YXlzIFx1Njc0OCAxMi0zNDUtNQorYWx3YXlzIFx1Njc0OSAyNC0xMjM2LTMKK2Fsd2F5cyBcdTY3NEEgMTUtMjU2LTIKK2Fsd2F5cyBcdTY3NEIgMTIzNDUtMTIzNi0yCithbHdheXMgXHU2NzRDIDM0LTUKK2Fsd2F5cyBcdTY3NEQgMTI1LTE1Ni00CithbHdheXMgXHU2NzRFIDE0LTE2LTQKK2Fsd2F5cyBcdTY3NEYgMTUtMTM0NTYtNQorYWx3YXlzIFx1Njc1MCAyNDUtMjQ1Ni0yCithbHdheXMgXHU2NzUxIDI0NS0xMjM0NTYtMworYWx3YXlzIFx1Njc1MiAxMjQ1LTEzNi01CithbHdheXMgXHU2NzUzIDI0LTE0Ni0yCithbHdheXMgXHU2NzU0IDEyNC0yNS0zCithbHdheXMgXHU2NzU1IDE0NS0xNi01CithbHdheXMgXHU2NzU2IDEtMTM0Ni01CithbHdheXMgXHU2NzU3IDEzNC0xMzQ2LTIKK2Fsd2F5cyBcdTY3NTggMTItMTU2LTMKK2Fsd2F5cyBcdTY3NTkgMTYtNQorYWx3YXlzIFx1Njc1QSAxMy0zNC00CithbHdheXMgXHU2NzVCIDEzLTEyMzQ2LTMKK2Fsd2F5cyBcdTY3NUMgMTQ1LTM0LTUKK2Fsd2F5cyBcdTY3NUQgMTYtMgorYWx3YXlzIFx1Njc1RSAyNDUtMTYtNAorYWx3YXlzIFx1Njc1RiAyNC0zNC01CithbHdheXMgXHU2NzYwIDEzLTEzNDYtNQorYWx3YXlzIFx1Njc2MSAxMjQtMjQ2LTIKK2Fsd2F5cyBcdTY3NjIgMTMtNDYtNQorYWx3YXlzIFx1Njc2MyAyNC0xMjM2LTMKK2Fsd2F5cyBcdTY3NjQgMTI0NTYtNQorYWx3YXlzIFx1Njc2NSAxNC0yNDU2LTIKK2Fsd2F5cyBcdTY3NjYgMTMtMjM0LTQKK2Fsd2F5cyBcdTY3NjcgMTM0LTEzNDYtMgorYWx3YXlzIFx1Njc2OCA0Ni0yCithbHdheXMgXHU2NzY5IDEzNC0zNDUtNQorYWx3YXlzIFx1Njc2QSAxMzQtMjQ2LTQKK2Fsd2F5cyBcdTY3NkIgMTUtMTU2LTUKK2Fsd2F5cyBcdTY3NkMgNDUtMgorYWx3YXlzIFx1Njc2RCAxMjM1LTEzNDYtMgorYWx3YXlzIFx1Njc2RSAxMjM0NS0zNTYtNQorYWx3YXlzIFx1Njc2RiAxMzUtMzU2LTMKK2Fsd2F5cyBcdTY3NzAgMTMtMzQ2LTIKK2Fsd2F5cyBcdTY3NzEgMTQ1LTEyMzQ2LTMKK2Fsd2F5cyBcdTY3NzIgMTMtMTQ2LTQKK2Fsd2F5cyBcdTY3NzMgMjQ2LTQKK2Fsd2F5cyBcdTY3NzQgMTUtMjM0NS0zCithbHdheXMgXHU2Nzc1IDEyLTM0LTQKK2Fsd2F5cyBcdTY3NzYgMTItMTIzNDU2LTMKK2Fsd2F5cyBcdTY3NzcgMTIzNC0zNDUtMgorYWx3YXlzIFx1Njc3OCAyNC0zNC0zCithbHdheXMgXHU2Nzc5IDEyMzUtMzUtNQorYWx3YXlzIFx1Njc3QSAxNS0xNDU2LTMKK2Fsd2F5cyBcdTY3N0IgMTM0NS0yMzQtNAorYWx3YXlzIFx1Njc3QyAxLTM0LTUKK2Fsd2F5cyBcdTY3N0QgMTItMTIzNTYtNAorYWx3YXlzIFx1Njc3RSAxNS0xMjM0Ni0zCithbHdheXMgXHU2NzdGIDEzNS0xMjM2LTQKK2Fsd2F5cyBcdTY3ODAgMTUtMTIzNDYtMworYWx3YXlzIFx1Njc4MSAxMy0xNi0yCithbHdheXMgXHU2NzgyIDIzNi01CithbHdheXMgXHU2NzgzIDEzLTE0NTYtNQorYWx3YXlzIFx1Njc4NCAxMy0xMjM1Ni01CithbHdheXMgXHU2Nzg1IDEzLTE2LTMKK2Fsd2F5cyBcdTY3ODYgMTM0LTE0Ni0yCithbHdheXMgXHU2Nzg3IDEyMzQtMTYtMgorYWx3YXlzIFx1Njc4OCAxMzUtMTYtNQorYWx3YXlzIFx1Njc4OSA0NTYtNAorYWx3YXlzIFx1Njc4QSAxMzQ2LTUKK2Fsd2F5cyBcdTY3OEIgMTIzNDUtMTM0Ni0zCithbHdheXMgXHU2NzhDIDEyMzQ1LTEzNi0yCithbHdheXMgXHU2NzhEIDE2LTUKK2Fsd2F5cyBcdTY3OEUgMTIzNDUtMzQtMgorYWx3YXlzIFx1Njc4RiAxMzQ1LTEyMzYtMgorYWx3YXlzIFx1Njc5MCAxNS0xNi0zCithbHdheXMgXHU2NzkxIDEyMzUtMzQtNQorYWx3YXlzIFx1Njc5MiAyMzQ1Ni0yCithbHdheXMgXHU2NzkzIDE0NS0xMjM1Ni00CithbHdheXMgXHU2Nzk0IDE1LTI1Ni0yCithbHdheXMgXHU2Nzk1IDEtMTM2LTQKK2Fsd2F5cyBcdTY3OTYgMjQ2LTMKK2Fsd2F5cyBcdTY3OTcgMTQtMTQ1Ni0yCithbHdheXMgXHU2Nzk4IDEyNDUtMTI0Ni01CithbHdheXMgXHU2Nzk5IDIzNDYtMgorYWx3YXlzIFx1Njc5QSAxMzQtMzU2LTIKK2Fsd2F5cyBcdTY3OUIgMS0xNDYtNQorYWx3YXlzIFx1Njc5QyAxMy0yNS00CithbHdheXMgXHU2NzlEIDEtMTU2LTMKK2Fsd2F5cyBcdTY3OUUgMjQ1LTEyMzQ2LTMKK2Fsd2F5cyBcdTY3OUYgMjU2LTUKK2Fsd2F5cyBcdTY3QTAgMTI1LTEyNDYtNQorYWx3YXlzIFx1NjdBMSAxNDUtMTIzNTYtNAorYWx3YXlzIFx1NjdBMiAyNC0zNC0zCithbHdheXMgXHU2N0EzIDEyNS0xNDYtNAorYWx3YXlzIFx1NjdBNCAxNDUtMTYtNQorYWx3YXlzIFx1NjdBNSAxNC0xNi01CithbHdheXMgXHU2N0E2IDE0LTM0LTIKK2Fsd2F5cyBcdTY3QTcgMTMtMjM0NS00CithbHdheXMgXHU2N0E4IDEyLTEzNTYtMgorYWx3YXlzIFx1NjdBOSAxNS0xMjM0Ni0zCithbHdheXMgXHU2N0FBIDI0NS00Ni0zCithbHdheXMgXHU2N0FCIDEyMzQ1LTEzNTYtMworYWx3YXlzIFx1NjdBQyAxMzQ1LTEyMzYtMgorYWx3YXlzIFx1NjdBRCAxNS0yNDYtMworYWx3YXlzIFx1NjdBRSAxNS0yMzQ1LTMKK2Fsd2F5cyBcdTY3QUYgMTIzLTM0LTMKK2Fsd2F5cyBcdTY3QjAgMTIzNC0xMzQ1Ni0yCithbHdheXMgXHU2N0IxIDEyNC0yNDU2LTIKK2Fsd2F5cyBcdTY3QjIgMTUtMTYtNAorYWx3YXlzIFx1NjdCMyAxLTE1Ni00CithbHdheXMgXHU2N0I0IDEzLTIzNTYtNAorYWx3YXlzIFx1NjdCNSAxNS0yNDYtMworYWx3YXlzIFx1NjdCNiAxMy0yMzQ1Ni01CithbHdheXMgXHU2N0I3IDEzLTIzNDU2LTMKK2Fsd2F5cyBcdTY3QjggMTMtMTIzNTYtNAorYWx3YXlzIFx1NjdCOSAxMzUtMTQ2LTMKK2Fsd2F5cyBcdTY3QkEgMTM0LTEyNi01CithbHdheXMgXHU2N0JCIDE2LTUKK2Fsd2F5cyBcdTY3QkMgMzQ2LTUKK2Fsd2F5cyBcdTY3QkQgMzQ2LTUKK2Fsd2F5cyBcdTY3QkUgMjQtMTU2LTUKK2Fsd2F5cyBcdTY3QkYgMTM0NS0zNDYtNQorYWx3YXlzIFx1NjdDMCAxMzUtMTYtNAorYWx3YXlzIFx1NjdDMSAxNDUtMjUtNQorYWx3YXlzIFx1NjdDMiAxNi0yCithbHdheXMgXHU2N0MzIDE0LTEzNDU2LTIKK2Fsd2F5cyBcdTY3QzQgMTM1LTEzNDU2LTQKK2Fsd2F5cyBcdTY3QzUgMTM0NS0xNi00CithbHdheXMgXHU2N0M2IDE0LTM0NS0zCithbHdheXMgXHU2N0M3IDEyMzUtMjM0Ni0yCithbHdheXMgXHU2N0M4IDEyMzQtMTIzNi0yCithbHdheXMgXHU2N0M5IDEyMzQ1LTEyMzYtMgorYWx3YXlzIFx1NjdDQSAxLTEyMzQ2LTMKK2Fsd2F5cyBcdTY3Q0IgMTQ1LTI0NTYtNQorYWx3YXlzIFx1NjdDQyAyNDUtMTU2LTIKK2Fsd2F5cyBcdTY3Q0QgNDYtMworYWx3YXlzIFx1NjdDRSAxMjM0NS0zNC0zCithbHdheXMgXHU2N0NGIDEzNS0xMjYtMgorYWx3YXlzIFx1NjdEMCAxMzQtMTIzNTYtNAorYWx3YXlzIFx1NjdEMSAxMy0xMjM2LTMKK2Fsd2F5cyBcdTY3RDIgMjQ1LTE2LTMKK2Fsd2F5cyBcdTY3RDMgMTI0NS0xMjM2LTQKK2Fsd2F5cyBcdTY3RDQgMTI0NS0xMjM1Ni0yCithbHdheXMgXHU2N0Q1IDEzNC0xNDYtNQorYWx3YXlzIFx1NjdENiAxLTE0Ni0zCithbHdheXMgXHU2N0Q3IDE1LTEyMzQ2LTMKK2Fsd2F5cyBcdTY3RDggMS0yMzQ2LTUKK2Fsd2F5cyBcdTY3RDkgMTUtMjM0NTYtMgorYWx3YXlzIFx1NjdEQSAyMzQtNQorYWx3YXlzIFx1NjdEQiAyNC0xMzYtMworYWx3YXlzIFx1NjdEQyAxMy0xMjU2LTQKK2Fsd2F5cyBcdTY3REQgMTI0LTI1LTUKK2Fsd2F5cyBcdTY3REUgMTI1LTI1LTUKK2Fsd2F5cyBcdTY3REYgMTM0NS0xMjM2LTIKK2Fsd2F5cyBcdTY3RTAgMTM0NS0xMzQ1Ni0yCithbHdheXMgXHU2N0UxIDIzNS00CithbHdheXMgXHU2N0UyIDE0NS0xNi00CithbHdheXMgXHU2N0UzIDEtMTU2LTIKK2Fsd2F5cyBcdTY3RTQgMS0zNDUtMworYWx3YXlzIFx1NjdFNSAxMi0zNDUtMgorYWx3YXlzIFx1NjdFNiAxNDUtMTIzNi01CithbHdheXMgXHU2N0U3IDEzLTM0LTMKK2Fsd2F5cyBcdTY3RTggMTM1LTM0LTUKK2Fsd2F5cyBcdTY3RTkgMTMtMjM0LTUKK2Fsd2F5cyBcdTY3RUEgMTQ2LTMKK2Fsd2F5cyBcdTY3RUIgMTIzNDUtMzQtMgorYWx3YXlzIFx1NjdFQyAxMy0yMzQ1LTQKK2Fsd2F5cyBcdTY3RUQgMTM1LTM0NS0yCithbHdheXMgXHU2N0VFIDE0NS0yNS01CithbHdheXMgXHU2N0VGIDEyMy0yMzQ2LTMKK2Fsd2F5cyBcdTY3RjAgMTM0NS0yNDU2LTUKK2Fsd2F5cyBcdTY3RjEgMS0zNC01CithbHdheXMgXHU2N0YyIDEzNS0xNi01CithbHdheXMgXHU2N0YzIDE0LTIzNC00CithbHdheXMgXHU2N0Y0IDEyLTI0NTYtMgorYWx3YXlzIFx1NjdGNSAxLTM0NS01CithbHdheXMgXHU2N0Y2IDE1LTE1Ni01CithbHdheXMgXHU2N0Y3IDEyLTM0LTUKK2Fsd2F5cyBcdTY3RjggMTIzNC0zNTYtMworYWx3YXlzIFx1NjdGOSAyNC0xNTYtNQorYWx3YXlzIFx1NjdGQSAxMy0yMzU2LTQKK2Fsd2F5cyBcdTY3RkIgMTItMzQ1LTIKK2Fsd2F5cyBcdTY3RkMgMjQ2LTQKK2Fsd2F5cyBcdTY3RkQgMTItMTM1Ni0zCithbHdheXMgXHU2N0ZFIDEzLTIzNC01CithbHdheXMgXHU2N0ZGIDI0LTE1Ni01CithbHdheXMgXHU2ODAwIDEtMTU2LTMKK2Fsd2F5cyBcdTY4MDEgMTQtMjM0LTQKK2Fsd2F5cyBcdTY4MDIgMTM0LTM1Ni0yCithbHdheXMgXHU2ODAzIDE0LTE2LTUKK2Fsd2F5cyBcdTY4MDQgMTI0NS0xMjM0Ni0yCithbHdheXMgXHU2ODA1IDEtMzQ1LTUKK2Fsd2F5cyBcdTY4MDYgMTI1LTE0Ni0zCithbHdheXMgXHU2ODA3IDEzNS0yNDYtMworYWx3YXlzIFx1NjgwOCAxLTEyMzYtNQorYWx3YXlzIFx1NjgwOSAxLTE1Ni01CithbHdheXMgXHU2ODBBIDE0LTEyMzQ2LTIKK2Fsd2F5cyBcdTY4MEIgMTQ1LTEyMzQ2LTUKK2Fsd2F5cyBcdTY4MEMgMTQtMzQtMgorYWx3YXlzIFx1NjgwRCAyNC0xMzU2LTMKK2Fsd2F5cyBcdTY4MEUgMTQtMTYtNQorYWx3YXlzIFx1NjgwRiAxNC0xMjM2LTIKK2Fsd2F5cyBcdTY4MTAgMjM1LTQKK2Fsd2F5cyBcdTY4MTEgMjQtMzQtNQorYWx3YXlzIFx1NjgxMiAxNS0yNTYtMgorYWx3YXlzIFx1NjgxMyAyNC0xMjQ1Ni0zCithbHdheXMgXHU2ODE0IDI0NS0xNi01CithbHdheXMgXHU2ODE1IDEtMTM2LTMKK2Fsd2F5cyBcdTY4MTYgMjQ1LTE2LTMKK2Fsd2F5cyBcdTY4MTcgMTQtMTYtNQorYWx3YXlzIFx1NjgxOCAxNi0yCithbHdheXMgXHU2ODE5IDE1LTQ2LTIKK2Fsd2F5cyBcdTY4MUEgMS0xMzYtNQorYWx3YXlzIFx1NjgxQiAxNC0xNi01CithbHdheXMgXHU2ODFDIDE1LTM0LTUKK2Fsd2F5cyBcdTY4MUQgMTMtMzUtMworYWx3YXlzIFx1NjgxRSAxMjMtMTIzNi0zCithbHdheXMgXHU2ODFGIDEzNS0xMzQ1Ni0zCithbHdheXMgXHU2ODIwIDEyNDUtMTM2LTQKK2Fsd2F5cyBcdTY4MjEgMTUtMjQ2LTUKK2Fsd2F5cyBcdTY4MjIgMTM1LTEyNi0yCithbHdheXMgXHU2ODIzIDEyNDUtMTM2LTQKK2Fsd2F5cyBcdTY4MjQgMTM1LTEzNDU2LTUKK2Fsd2F5cyBcdTY4MjUgMTI1LTE1Ni0zCithbHdheXMgXHU2ODI2IDEyLTEyMzU2LTIKK2Fsd2F5cyBcdTY4MjcgMTYtNQorYWx3YXlzIFx1NjgyOCAxMy0zNDYtMgorYWx3YXlzIFx1NjgyOSAxNS0xMjU2LTQKK2Fsd2F5cyBcdTY4MkEgMS0zNC0zCithbHdheXMgXHU2ODJCIDEzLTIzNDUtNQorYWx3YXlzIFx1NjgyQyAxMjUtMTI0Ni01CithbHdheXMgXHU2ODJEIDE1Ni0yCithbHdheXMgXHU2ODJFIDE1Ni00CithbHdheXMgXHU2ODJGIDIzNC00CithbHdheXMgXHU2ODMwIDEyMzQ1LTM0NS0yCithbHdheXMgXHU2ODMxIDEzLTEyMzQ2LTQKK2Fsd2F5cyBcdTY4MzIgMTIzLTE0Ni00CithbHdheXMgXHU2ODMzIDE0LTE0Ni00CithbHdheXMgXHU2ODM0IDEtMTIzNi0zCithbHdheXMgXHU2ODM1IDE0LTM0Ni01CithbHdheXMgXHU2ODM2IDE0NTYtMworYWx3YXlzIFx1NjgzNyA0Ni01CithbHdheXMgXHU2ODM4IDEyMzUtMjM0Ni0yCithbHdheXMgXHU2ODM5IDEzLTEzNi0zCithbHdheXMgXHU2ODNBIDEtMTU2LTMKK2Fsd2F5cyBcdTY4M0IgMjQtMTU2LTUKK2Fsd2F5cyBcdTY4M0MgMTMtMjM0Ni0yCithbHdheXMgXHU2ODNEIDEyNS0yNDU2LTMKK2Fsd2F5cyBcdTY4M0UgMTQtMTI0NTYtMgorYWx3YXlzIFx1NjgzRiAxMjM0NS0zNC0yCithbHdheXMgXHU2ODQwIDEzLTM0Ni0yCithbHdheXMgXHU2ODQxIDEyMzUtMTM1Ni0yCithbHdheXMgXHU2ODQyIDEzLTEyNDYtNQorYWx3YXlzIFx1Njg0MyAxMjQtMTQ2LTIKK2Fsd2F5cyBcdTY4NDQgMTMtNDU2LTMKK2Fsd2F5cyBcdTY4NDUgMTI0Ni0yCithbHdheXMgXHU2ODQ2IDEyMy00NTYtMworYWx3YXlzIFx1Njg0NyAxMjQ1LTM0LTIKK2Fsd2F5cyBcdTY4NDggMTIzNi01CithbHdheXMgXHU2ODQ5IDEyMzYtMworYWx3YXlzIFx1Njg0QSAxMy00NS01CithbHdheXMgXHU2ODRCIDE2LTIKK2Fsd2F5cyBcdTY4NEMgMS0yNS0zCithbHdheXMgXHU2ODREIDEyMy0zNC0zCithbHdheXMgXHU2ODRFIDEtMTU2LTUKK2Fsd2F5cyBcdTY4NEYgMjQ1LTIzNS0yCithbHdheXMgXHU2ODUwIDEyNC0xMjM0Ni0yCithbHdheXMgXHU2ODUxIDE1LTEzNDYtMworYWx3YXlzIFx1Njg1MiAxNS0xMzQ2LTMKK2Fsd2F5cyBcdTY4NTMgMTIzNS0xMjQ1Ni0yCithbHdheXMgXHU2ODU0IDEzLTEyNTYtMgorYWx3YXlzIFx1Njg1NSAxMy0yMzQtNQorYWx3YXlzIFx1Njg1NiAxNS0yMzYtNQorYWx3YXlzIFx1Njg1NyAxNDUtMjUtNQorYWx3YXlzIFx1Njg1OCAxLTEyNDYtNQorYWx3YXlzIFx1Njg1OSAxMjU2LTIKK2Fsd2F5cyBcdTY4NUEgMTI1LTEyMzYtNAorYWx3YXlzIFx1Njg1QiAxMjMtMzQ1LTQKK2Fsd2F5cyBcdTY4NUMgMTM0NTYtMworYWx3YXlzIFx1Njg1RCAxMy0zNDYtMgorYWx3YXlzIFx1Njg1RSAxNC0yMzQtNAorYWx3YXlzIFx1Njg1RiAxLTEyMzYtNQorYWx3YXlzIFx1Njg2MCAyMzQ1Ni0zCithbHdheXMgXHU2ODYxIDEzNDUtMTQ2LTIKK2Fsd2F5cyBcdTY4NjIgMS0xMzYtMworYWx3YXlzIFx1Njg2MyAxNDUtMTM0Ni00CithbHdheXMgXHU2ODY0IDI0NS0xNi0zCithbHdheXMgXHU2ODY1IDI0NS0yNDYtMgorYWx3YXlzIFx1Njg2NiAxMjM1LTM1LTUKK2Fsd2F5cyBcdTY4NjcgMTIzNS0xMjQ2LTUKK2Fsd2F5cyBcdTY4NjggMTMtNDYtNAorYWx3YXlzIFx1Njg2OSAxLTQ1Ni0zCithbHdheXMgXHU2ODZBIDE1LTI1Ni0yCithbHdheXMgXHU2ODZCIDE1LTI1LTMKK2Fsd2F5cyBcdTY4NkMgMjQtMzQ1LTMKK2Fsd2F5cyBcdTY4NkQgMS0xMzYtMworYWx3YXlzIFx1Njg2RSAxMzUtMzU2LTMKK2Fsd2F5cyBcdTY4NkYgMTI0LTEzNDU2LTMKK2Fsd2F5cyBcdTY4NzAgMTMtMzUtMworYWx3YXlzIFx1Njg3MSAxMy0xMzQ1Ni01CithbHdheXMgXHU2ODcyIDEzNS0xMjYtMgorYWx3YXlzIFx1Njg3MyAxMzUtMTM2LTUKK2Fsd2F5cyBcdTY4NzQgMTIzNDUtMzQtMgorYWx3YXlzIFx1Njg3NSAxMjQ1LTEyNDYtNAorYWx3YXlzIFx1Njg3NiAxMjQtMTIzNDYtNAorYWx3YXlzIFx1Njg3NyAxMy0yMzYtMgorYWx3YXlzIFx1Njg3OCAxNS0xNi0zCithbHdheXMgXHU2ODc5IDE0LTEzNDYtMgorYWx3YXlzIFx1Njg3QSAxNC0yMzQtNAorYWx3YXlzIFx1Njg3QiAxMjM0NS0xMzU2LTMKK2Fsd2F5cyBcdTY4N0MgMjQ1LTE2LTMKK2Fsd2F5cyBcdTY4N0QgMTIzNDU2LTQKK2Fsd2F5cyBcdTY4N0UgMTMtMjU2LTMKK2Fsd2F5cyBcdTY4N0YgMTMtMTIzNi00CithbHdheXMgXHU2ODgwIDI0NS0zNC01CithbHdheXMgXHU2ODgxIDE0LTQ2LTIKK2Fsd2F5cyBcdTY4ODIgMjQ1LTIzNC0yCithbHdheXMgXHU2ODgzIDEyNC0xMzQ1Ni00CithbHdheXMgXHU2ODg0IDIzNC00CithbHdheXMgXHU2ODg1IDEzNC0zNTYtMgorYWx3YXlzIFx1Njg4NiAxMzUtMTM0Ni0zCithbHdheXMgXHU2ODg3IDE0LTEyMzQ2LTUKK2Fsd2F5cyBcdTY4ODggMTIzNC0xMzU2LTMKK2Fsd2F5cyBcdTY4ODkgMS00NTYtMworYWx3YXlzIFx1Njg4QSAxNDUtMTYtNQorYWx3YXlzIFx1Njg4QiAxNS00NS0zCithbHdheXMgXHU2ODhDIDEyNC0zNC0yCithbHdheXMgXHU2ODhEIDEyNS0xNDYtNQorYWx3YXlzIFx1Njg4RSAxNDYtMworYWx3YXlzIFx1Njg4RiAxMy0zNC01CithbHdheXMgXHU2ODkwIDEzNS0xNi01CithbHdheXMgXHU2ODkxIDE0NS0xNi0yCithbHdheXMgXHU2ODkyIDEyMzUtMTIzNi0yCithbHdheXMgXHU2ODkzIDEyNS0xNTYtNAorYWx3YXlzIFx1Njg5NCAxLTE1Ni0zCithbHdheXMgXHU2ODk1IDEyNDUtMTM2LTUKK2Fsd2F5cyBcdTY4OTYgMTM1LTM1Ni01CithbHdheXMgXHU2ODk3IDEzLTEzNTYtNAorYWx3YXlzIFx1Njg5OCAxMy0yMzQ1LTQKK2Fsd2F5cyBcdTY4OTkgMTIzNS0xMjQ1Ni01CithbHdheXMgXHU2ODlBIDEyNDU2LTQKK2Fsd2F5cyBcdTY4OUIgMTM0NS0yNS0yCithbHdheXMgXHU2ODlDIDEzLTIzNDU2LTIKK2Fsd2F5cyBcdTY4OUQgMTI0LTI0Ni0yCithbHdheXMgXHU2ODlFIDEzLTE2LTUKK2Fsd2F5cyBcdTY4OUYgMTUtMjQ2LTMKK2Fsd2F5cyBcdTY4QTAgMTQtMTI1Ni00CithbHdheXMgXHU2OEExIDEyMy0xMjQ1Ni00CithbHdheXMgXHU2OEEyIDI0LTE0Ni0zCithbHdheXMgXHU2OEEzIDI0NS0xMzYtMgorYWx3YXlzIFx1NjhBNCAxMjM0NS0xMzYtMgorYWx3YXlzIFx1NjhBNSAxNS0xMjM0Ni0zCithbHdheXMgXHU2OEE2IDEzNC0xMzU2LTUKK2Fsd2F5cyBcdTY4QTcgMzQtMgorYWx3YXlzIFx1NjhBOCAxNC0xNi0yCithbHdheXMgXHU2OEE5IDE0LTE2LTIKK2Fsd2F5cyBcdTY4QUEgMTQ1LTEyMzU2LTUKK2Fsd2F5cyBcdTY4QUIgMjQ1LTEzNi0zCithbHdheXMgXHU2OEFDIDEzNDU2LTQKK2Fsd2F5cyBcdTY4QUQgMTUtMjUtMworYWx3YXlzIFx1NjhBRSAxMy0xMjU2LTIKK2Fsd2F5cyBcdTY4QUYgMTI0LTE2LTMKK2Fsd2F5cyBcdTY4QjAgMTUtMzQ2LTUKK2Fsd2F5cyBcdTY4QjEgMTIzLTEyMzQ1Ni00CithbHdheXMgXHU2OEIyIDEtMjUtMgorYWx3YXlzIFx1NjhCMyAyNC0zNC0zCithbHdheXMgXHU2OEI0IDEyLTEyMzYtMworYWx3YXlzIFx1NjhCNSAxMjM0NS0xMjM2LTUKK2Fsd2F5cyBcdTY4QjYgMTI0Ni00CithbHdheXMgXHU2OEI3IDEzLTEzNDU2LTUKK2Fsd2F5cyBcdTY4QjggMTQtMTYtMgorYWx3YXlzIFx1NjhCOSAxMzUtMTQ1Ni0zCithbHdheXMgXHU2OEJBIDE1LTQ2LTUKK2Fsd2F5cyBcdTY4QkIgMTIzNDUtMTI2LTIKK2Fsd2F5cyBcdTY4QkMgMTI0LTE0Ni0yCithbHdheXMgXHU2OEJEIDEtMTU2LTUKK2Fsd2F5cyBcdTY4QkUgMTQtMjQ1Ni0yCithbHdheXMgXHU2OEJGIDE0LTIzNDUtMgorYWx3YXlzIFx1NjhDMCAxMy0yMzQ1LTQKK2Fsd2F5cyBcdTY4QzEgMS0yNS0yCithbHdheXMgXHU2OEMyIDE0LTEzNDU2LTIKK2Fsd2F5cyBcdTY4QzMgMTQtMTYtMgorYWx3YXlzIFx1NjhDNCAyNDUtMTYtNQorYWx3YXlzIFx1NjhDNSAxMzUtMTM0NTYtNQorYWx3YXlzIFx1NjhDNiAxLTEyMzQ1Ni0zCithbHdheXMgXHU2OEM3IDI0NS0xMjM0Ni0zCithbHdheXMgXHU2OEM4IDI0NS0yMzQ1LTUKK2Fsd2F5cyBcdTY4QzkgMTM0LTIzNDUtMgorYWx3YXlzIFx1NjhDQSAyNDUtMTYtMgorYWx3YXlzIFx1NjhDQiAyNDUtMTYtMgorYWx3YXlzIFx1NjhDQyAyNDUtMjQ1Ni00CithbHdheXMgXHU2OENEIDEzLTEyMzQ1Ni01CithbHdheXMgXHU2OENFIDEyLTEyMzYtMgorYWx3YXlzIFx1NjhDRiAxLTIzNDYtMgorYWx3YXlzIFx1NjhEMCAxMjM0NS0zNTYtNAorYWx3YXlzIFx1NjhEMSAxMjM0LTI0NTYtMgorYWx3YXlzIFx1NjhEMiAxMzUtMTM0Ni01CithbHdheXMgXHU2OEQzIDEzNS0xMzQ2LTUKK2Fsd2F5cyBcdTY4RDQgMTIzNS0xMjM0NTYtMworYWx3YXlzIFx1NjhENSAxMjUtMTIzNDYtMworYWx3YXlzIFx1NjhENiAxMi0xMzU2LTIKK2Fsd2F5cyBcdTY4RDcgMTI1LTE0Ni00CithbHdheXMgXHU2OEQ4IDEzLTE2LTIKK2Fsd2F5cyBcdTY4RDkgMTQtMTYtNQorYWx3YXlzIFx1NjhEQSAxMjM0LTEzNTYtMgorYWx3YXlzIFx1NjhEQiAxMjU2LTUKK2Fsd2F5cyBcdTY4REMgMTI1Ni01CithbHdheXMgXHU2OEREIDEzLTM0LTUKK2Fsd2F5cyBcdTY4REUgMTIzNS0xMjM0NTYtMgorYWx3YXlzIFx1NjhERiAxNDUtMTIzNDYtNQorYWx3YXlzIFx1NjhFMCAxMjQtMTM0Ni0yCithbHdheXMgXHU2OEUxIDEzLTEzNDYtMworYWx3YXlzIFx1NjhFMiA0NTYtNAorYWx3YXlzIFx1NjhFMyAxNDUtMTYtNQorYWx3YXlzIFx1NjhFNCAyNDUtMjUtNQorYWx3YXlzIFx1NjhFNSAxMjM0NS0xMjM2LTIKK2Fsd2F5cyBcdTY4RTYgMTItMTM1Ni0zCithbHdheXMgXHU2OEU3IDEtMTIzNi01CithbHdheXMgXHU2OEU4IDI0NS0xNi00CithbHdheXMgXHU2OEU5IDQ1LTMKK2Fsd2F5cyBcdTY4RUEgMjM0NS00CithbHdheXMgXHU2OEVCIDEyNTYtNQorYWx3YXlzIFx1NjhFQyAyNDUtNDUtMworYWx3YXlzIFx1NjhFRCAxNi01CithbHdheXMgXHU2OEVFIDE1LTEzNi0zCithbHdheXMgXHU2OEVGIDEyNDUtMTM2LTQKK2Fsd2F5cyBcdTY4RjAgMTItMTI0Ni0yCithbHdheXMgXHU2OEYxIDE0LTEzNTYtMgorYWx3YXlzIFx1NjhGMiAyNDUtMTYtMworYWx3YXlzIFx1NjhGMyAxLTI1LTIKK2Fsd2F5cyBcdTY4RjQgMTIzNDUtMzQtMgorYWx3YXlzIFx1NjhGNSAxMjMtMjM0Ni0zCithbHdheXMgXHU2OEY2IDE0LTI0NTYtMgorYWx3YXlzIFx1NjhGNyAxMjUtMTIzNTYtMworYWx3YXlzIFx1NjhGOCAxMjUtMTIzNTYtMworYWx3YXlzIFx1NjhGOSAxLTE0Ni01CithbHdheXMgXHU2OEZBIDEzLTEyNDU2LTMKK2Fsd2F5cyBcdTY4RkIgMTIzNDUtMTM2LTMKK2Fsd2F5cyBcdTY4RkMgMTIzNDUtMTM2LTIKK2Fsd2F5cyBcdTY4RkQgMTItMTM2LTMKK2Fsd2F5cyBcdTY4RkUgMjQ1LTIzNS0yCithbHdheXMgXHU2OEZGIDEzNDUtMzQ2LTUKK2Fsd2F5cyBcdTY5MDAgMTI0NTYtNAorYWx3YXlzIFx1NjkwMSAxMy0yNS00CithbHdheXMgXHU2OTAyIDE0LTM0LTUKK2Fsd2F5cyBcdTY5MDMgMTIzNS0xNDYtMgorYWx3YXlzIFx1NjkwNCAxMy0zNDYtMworYWx3YXlzIFx1NjkwNSAxNi00CithbHdheXMgXHU2OTA2IDEyLTEyMzU2LTIKK2Fsd2F5cyBcdTY5MDcgMTMtMTI1Ni00CithbHdheXMgXHU2OTA4IDEzLTEyNTYtMgorYWx3YXlzIFx1NjkwOSAxMi0xMzU2LTIKK2Fsd2F5cyBcdTY5MEEgMjQ1LTEyNDYtNQorYWx3YXlzIFx1NjkwQiAxNC00Ni0yCithbHdheXMgXHU2OTBDIDI0NS00Ni0zCithbHdheXMgXHU2OTBEIDEtMTU2LTIKK2Fsd2F5cyBcdTY5MEUgMS0xMjQ2LTMKK2Fsd2F5cyBcdTY5MEYgMjM0NTYtMworYWx3YXlzIFx1NjkxMCAxMy0xMjU2LTMKK2Fsd2F5cyBcdTY5MTEgMTIzNC0xNi0yCithbHdheXMgXHU2OTEyIDEzLTI0Ni0zCithbHdheXMgXHU2OTEzIDEtMjUtMgorYWx3YXlzIFx1NjkxNCAxMjUtMTU2LTMKK2Fsd2F5cyBcdTY5MTUgMTM1LTE0NTYtMworYWx3YXlzIFx1NjkxNiAxMjM0LTEzNTYtMgorYWx3YXlzIFx1NjkxNyAxNDUtMTM0NTYtNQorYWx3YXlzIFx1NjkxOCAxMi0zNC00CithbHdheXMgXHU2OTE5IDEyLTEzNDYtMworYWx3YXlzIFx1NjkxQSAxMzQtMTM2LTMKK2Fsd2F5cyBcdTY5MUIgMTIzNDUtMzQ1LTMKK2Fsd2F5cyBcdTY5MUMgMTMtMjM0NS00CithbHdheXMgXHU2OTFEIDEzLTEyNDYtMworYWx3YXlzIFx1NjkxRSAxNS0xNi01CithbHdheXMgXHU2OTFGIDE0NS0zNC0yCithbHdheXMgXHU2OTIwIDI0NS0yMzQ1LTUKK2Fsd2F5cyBcdTY5MjEgMTQ1LTE0Ni01CithbHdheXMgXHU2OTIyIDEzLTEyNDYtNQorYWx3YXlzIFx1NjkyMyAxNDUtMjM0NS00CithbHdheXMgXHU2OTI0IDE0LTI1LTIKK2Fsd2F5cyBcdTY5MjUgMS0xNTYtMworYWx3YXlzIFx1NjkyNiAyNDUtNDUtMworYWx3YXlzIFx1NjkyNyAxMzQtMTM1Ni0yCithbHdheXMgXHU2OTI4IDEyMzQ1LTM0LTQKK2Fsd2F5cyBcdTY5MjkgMTMtMTM1Ni0zCithbHdheXMgXHU2OTJBIDEyMzQtMTM1Ni01CithbHdheXMgXHU2OTJCIDEtMTIzNi00CithbHdheXMgXHU2OTJDIDE2LTIKK2Fsd2F5cyBcdTY5MkQgMTI0LTI1LTQKK2Fsd2F5cyBcdTY5MkUgMTUtMTM2LTMKK2Fsd2F5cyBcdTY5MkYgMTQ1LTI1LTQKK2Fsd2F5cyBcdTY5MzAgMzQ2LTIKK2Fsd2F5cyBcdTY5MzEgMTIzNDUtMzQtNQorYWx3YXlzIFx1NjkzMiAxMjQ2LTQKK2Fsd2F5cyBcdTY5MzMgMTI0Ni0zCithbHdheXMgXHU2OTM0IDE0NS0xMjQ1Ni01CithbHdheXMgXHU2OTM1IDEzLTIzNDU2LTQKK2Fsd2F5cyBcdTY5MzYgMTI1LTEyMzQ2LTMKK2Fsd2F5cyBcdTY5MzcgMTMtMjM0NS0zCithbHdheXMgXHU2OTM4IDE2LTIKK2Fsd2F5cyBcdTY5MzkgMjQtMTM2LTUKK2Fsd2F5cyBcdTY5M0EgMTUtMTYtMgorYWx3YXlzIFx1NjkzQiAyMzQ1LTUKK2Fsd2F5cyBcdTY5M0MgMjM0NS00CithbHdheXMgXHU2OTNEIDEyLTEyNDU2LTIKK2Fsd2F5cyBcdTY5M0UgMTMtMjM0NS0zCithbHdheXMgXHU2OTNGIDEyLTEyMzQ1Ni0zCithbHdheXMgXHU2OTQwIDEyNTYtNAorYWx3YXlzIFx1Njk0MSAxMy0yMzQ2LTIKK2Fsd2F5cyBcdTY5NDIgMTItMzQ1LTIKK2Fsd2F5cyBcdTY5NDMgMjUtNQorYWx3YXlzIFx1Njk0NCAxMjM0LTIzNDUtMgorYWx3YXlzIFx1Njk0NSAxMzUtMTYtNQorYWx3YXlzIFx1Njk0NiAyNDYtMworYWx3YXlzIFx1Njk0NyAxMjM1LTI1LTUKK2Fsd2F5cyBcdTY5NDggMTUtMTI1Ni0zCithbHdheXMgXHU2OTQ5IDEyNDUtMjUtNQorYWx3YXlzIFx1Njk0QSA0Ni0yCithbHdheXMgXHU2OTRCIDE0LTM0NS01CithbHdheXMgXHU2OTRDIDIzNDUtMgorYWx3YXlzIFx1Njk0RCAxMzUtMTM2LTQKK2Fsd2F5cyBcdTY5NEUgMTIzNS0xMjM0NTYtMgorYWx3YXlzIFx1Njk0RiAxMjMtMTI0Ni0yCithbHdheXMgXHU2OTUwIDEzLTM0Ni01CithbHdheXMgXHU2OTUxIDEyMy0xMjQ2LTIKK2Fsd2F5cyBcdTY5NTIgMTUtMTU2LTMKK2Fsd2F5cyBcdTY5NTMgMTIzNDUtMTM1Ni0zCithbHdheXMgXHU2OTU0IDE1LTM0Ni01CithbHdheXMgXHU2OTU1IDEyNC0yNS00CithbHdheXMgXHU2OTU2IDEzLTE2LTIKK2Fsd2F5cyBcdTY5NTcgMTMtMjM0NS01CithbHdheXMgXHU2OTU4IDEzNC0zNC01CithbHdheXMgXHU2OTU5IDEzNC0xNDYtNQorYWx3YXlzIFx1Njk1QSAxMi0zNC00CithbHdheXMgXHU2OTVCIDEyMzUtMzQtNQorYWx3YXlzIFx1Njk1QyAxMjM1LTM0LTIKK2Fsd2F5cyBcdTY5NUQgMTQtMjM0NS01CithbHdheXMgXHU2OTVFIDE0LTEzNTYtNQorYWx3YXlzIFx1Njk1RiAxMjQtMTM0NTYtMgorYWx3YXlzIFx1Njk2MCAxMzQ1LTEyMzYtMgorYWx3YXlzIFx1Njk2MSAxMjU2LTIKK2Fsd2F5cyBcdTY5NjIgMjM0LTIKK2Fsd2F5cyBcdTY5NjMgMTM0LTM1Ni0yCithbHdheXMgXHU2OTY0IDE1LTEyMzQ2LTQKK2Fsd2F5cyBcdTY5NjUgMTUtNDUtNQorYWx3YXlzIFx1Njk2NiAxNS00NS01CithbHdheXMgXHU2OTY3IDEzNDU2LTMKK2Fsd2F5cyBcdTY5NjggMS0xMzYtMworYWx3YXlzIFx1Njk2OSAxMjM0LTIzNDUtMgorYWx3YXlzIFx1Njk2QSAzNDYtNQorYWx3YXlzIFx1Njk2QiAxMy0xNi0yCithbHdheXMgXHU2OTZDIDEzLTM0Ni0zCithbHdheXMgXHU2OTZEIDM0Ni01CithbHdheXMgXHU2OTZFIDEyLTM0LTQKK2Fsd2F5cyBcdTY5NkYgMjQtMTIzNDU2LTQKK2Fsd2F5cyBcdTY5NzAgMTI1Ni0yCithbHdheXMgXHU2OTcxIDI0NS0xMjM1Ni01CithbHdheXMgXHU2OTcyIDEyNDYtMworYWx3YXlzIFx1Njk3MyAxMzQtMzU2LTIKK2Fsd2F5cyBcdTY5NzQgMTQ1LTE2LTUKK2Fsd2F5cyBcdTY5NzUgMTMtMTYtMgorYWx3YXlzIFx1Njk3NiAxMy0zNDYtMgorYWx3YXlzIFx1Njk3NyAxMjMtMjQ1Ni00CithbHdheXMgXHU2OTc4IDI0NS0yMzQtMworYWx3YXlzIFx1Njk3OSAxMzQ1Ni0yCithbHdheXMgXHU2OTdBIDEyNDUtMTIzNTYtMgorYWx3YXlzIFx1Njk3QiAxMjM1LTEzNTYtMgorYWx3YXlzIFx1Njk3QyAxNC0xMjM1Ni0yCithbHdheXMgXHU2OTdEIDE0LTIzNDYtNQorYWx3YXlzIFx1Njk3RSAyNDUtNDUtMgorYWx3YXlzIFx1Njk3RiAxNS00Ni0zCithbHdheXMgXHU2OTgwIDEyMzQtMTQ1Ni00CithbHdheXMgXHU2OTgxIDI0LTE1Ni00CithbHdheXMgXHU2OTgyIDEzLTI0NTYtNQorYWx3YXlzIFx1Njk4MyAxMjM0LTEyMzYtMgorYWx3YXlzIFx1Njk4NCAxNC0xMjM2LTQKK2Fsd2F5cyBcdTY5ODUgMjU2LTIKK2Fsd2F5cyBcdTY5ODYgMTI1Ni0yCithbHdheXMgXHU2OTg3IDEyLTEzNi01CithbHdheXMgXHU2OTg4IDE0LTEyNTYtMgorYWx3YXlzIFx1Njk4OSAxMy0xMjU2LTQKK2Fsd2F5cyBcdTY5OEEgMjQtMTM2LTIKK2Fsd2F5cyBcdTY5OEIgMTItMzQtNAorYWx3YXlzIFx1Njk4QyAxMzUtMTYtMworYWx3YXlzIFx1Njk4RCAxNS0zNDYtNQorYWx3YXlzIFx1Njk4RSAxMy0yMzQ1Ni00CithbHdheXMgXHU2OThGIDE2LTUKK2Fsd2F5cyBcdTY5OTAgMS0xMjM2LTQKK2Fsd2F5cyBcdTY5OTEgMTIzNDUtMzQtMgorYWx3YXlzIFx1Njk5MiAxMzQ1LTI0NTYtNQorYWx3YXlzIFx1Njk5MyAxMzQtMTYtNQorYWx3YXlzIFx1Njk5NCAxNC0xMzQ2LTIKK2Fsd2F5cyBcdTY5OTUgMTI0NS0xMjM0Ni0yCithbHdheXMgXHU2OTk2IDEzLTM0LTQKK2Fsd2F5cyBcdTY5OTcgMTMtMjM0NS01CithbHdheXMgXHU2OTk4IDEzLTEyNTYtNAorYWx3YXlzIFx1Njk5OSAxMjQtMzQ1LTMKK2Fsd2F5cyBcdTY5OUEgMjQ2LTQKK2Fsd2F5cyBcdTY5OUIgMS0xMzYtMworYWx3YXlzIFx1Njk5QyAxMzUtMTM0Ni00CithbHdheXMgXHU2OTlEIDI0LTM0NS0zCithbHdheXMgXHU2OTlFIDQ1LTIKK2Fsd2F5cyBcdTY5OUYgMTI1LTE1Ni00CithbHdheXMgXHU2OUEwIDEzNC0xMzQ1Ni0yCithbHdheXMgXHU2OUExIDE1LTM0LTUKK2Fsd2F5cyBcdTY5QTIgMTMtMjM0NTYtNQorYWx3YXlzIFx1NjlBMyAyNDYtMgorYWx3YXlzIFx1NjlBNCAxMy0zNDYtMgorYWx3YXlzIFx1NjlBNSAxMjM1LTQ1Ni00CithbHdheXMgXHU2OUE2IDEzLTEyMzYtNQorYWx3YXlzIFx1NjlBNyAxMjM0NS0zNTYtNAorYWx3YXlzIFx1NjlBOCAxLTM0NS01CithbHdheXMgXHU2OUE5IDI0NS0yMzQ1LTIKK2Fsd2F5cyBcdTY5QUEgMTM0LTM0NS01CithbHdheXMgXHU2OUFCIDE1LTEyMzQ1Ni00CithbHdheXMgXHU2OUFDIDQ1LTIKK2Fsd2F5cyBcdTY5QUQgMTUtMzQ2LTUKK2Fsd2F5cyBcdTY5QUUgMTI0NS0xMjM0Ni0yCithbHdheXMgXHU2OUFGIDI0LTE1Ni0yCithbHdheXMgXHU2OUIwIDEtMTU2LTMKK2Fsd2F5cyBcdTY5QjEgMjQ1LTEyNDYtMworYWx3YXlzIFx1NjlCMiAyNTYtNQorYWx3YXlzIFx1NjlCMyAxMjQtMTM0NTYtMgorYWx3YXlzIFx1NjlCNCAxNC0yMzQtMgorYWx3YXlzIFx1NjlCNSAxMjQ1LTEyMzQ2LTIKK2Fsd2F5cyBcdTY5QjYgMTI0LTEzNDYtMgorYWx3YXlzIFx1NjlCNyAyNDUtMjM2LTUKK2Fsd2F5cyBcdTY5QjggMS0yNDU2LTMKK2Fsd2F5cyBcdTY5QjkgMTUtMTU2LTMKK2Fsd2F5cyBcdTY5QkEgMjQtMTM1Ni01CithbHdheXMgXHU2OUJCIDEyNC0zNDUtNQorYWx3YXlzIFx1NjlCQyAxMjMtMjM0Ni01CithbHdheXMgXHU2OUJEIDE1LTE2LTMKK2Fsd2F5cyBcdTY5QkUgMTMtMzQtNQorYWx3YXlzIFx1NjlCRiAyNDUtMTYtMworYWx3YXlzIFx1NjlDMCAxMy0xNDYtNAorYWx3YXlzIFx1NjlDMSAxMy0xNDYtNAorYWx3YXlzIFx1NjlDMiAxNS0xMjM0NTYtMworYWx3YXlzIFx1NjlDMyAxMjM0LTEyMzYtMgorYWx3YXlzIFx1NjlDNCAxMjQtMTQ2LTMKK2Fsd2F5cyBcdTY5QzUgMTMtMjM0Ni0yCithbHdheXMgXHU2OUM2IDE1LTI1Ni0yCithbHdheXMgXHU2OUM3IDE0NS0yMzQ1LTMKK2Fsd2F5cyBcdTY5QzggMTM0NS0xMjM1Ni01CithbHdheXMgXHU2OUM5IDEzLTE2LTIKK2Fsd2F5cyBcdTY5Q0EgMjQtMjUtNQorYWx3YXlzIFx1NjlDQiAxMy0xMjM1Ni01CithbHdheXMgXHU2OUNDIDEyLTEyNDYtMgorYWx3YXlzIFx1NjlDRCAyNDUtNDYtMworYWx3YXlzIFx1NjlDRSAxMi0zNDUtMgorYWx3YXlzIFx1NjlDRiAyNDUtMjM0NS00CithbHdheXMgXHU2OUQwIDEyMzUtMjM1Ni0yCithbHdheXMgXHU2OUQxIDEzNC0zNTYtMgorYWx3YXlzIFx1NjlEMiAxNS0xMjU2LTUKK2Fsd2F5cyBcdTY5RDMgMTMtMTM0Ni01CithbHdheXMgXHU2OUQ0IDEzLTE0Ni0zCithbHdheXMgXHU2OUQ1IDEtMjUtMworYWx3YXlzIFx1NjlENiAxMjQtMjUtNQorYWx3YXlzIFx1NjlENyAyNDUtMjQ2LTIKK2Fsd2F5cyBcdTY5RDggNDYtNQorYWx3YXlzIFx1NjlEOSAxNDUtMjM0NS0zCithbHdheXMgXHU2OURBIDEzLTIzNDU2LTQKK2Fsd2F5cyBcdTY5REIgMTIzNS0xMjM2LTQKK2Fsd2F5cyBcdTY5REMgMTI1LTEyNDYtNQorYWx3YXlzIFx1NjlERCAxNDUtMTQ2LTQKK2Fsd2F5cyBcdTY5REUgMTQtMTIzNDYtMgorYWx3YXlzIFx1NjlERiAxMzUtMTQ1Ni0zCithbHdheXMgXHU2OUUwIDEtMzQtMworYWx3YXlzIFx1NjlFMSAxNS0xMzQ2LTMKK2Fsd2F5cyBcdTY5RTIgMTUtMTYtMgorYWx3YXlzIFx1NjlFMyAyNDUtMTYtNAorYWx3YXlzIFx1NjlFNCAxNC0yMzQ1LTIKK2Fsd2F5cyBcdTY5RTUgMTIzNS0xMjQ2LTUKK2Fsd2F5cyBcdTY5RTYgMjM1LTIKK2Fsd2F5cyBcdTY5RTcgMTQ1LTIzNDUtNQorYWx3YXlzIFx1NjlFOCAxMy0yNS00CithbHdheXMgXHU2OUU5IDEzLTI0NTYtNQorYWx3YXlzIFx1NjlFQSAxMy0yNDU2LTUKK2Fsd2F5cyBcdTY5RUIgMTI0LTEyNDU2LTIKK2Fsd2F5cyBcdTY5RUMgMTIzNS0zNS01CithbHdheXMgXHU2OUVEIDI0NS0xNi0zCithbHdheXMgXHU2OUVFIDE1LTEzNi0zCithbHdheXMgXHU2OUVGIDI0NS0xMjQ2LTMKK2Fsd2F5cyBcdTY5RjAgMTM1LTEzNTYtNQorYWx3YXlzIFx1NjlGMSAyMzQtNAorYWx3YXlzIFx1NjlGMiAxMjM1LTM0LTIKK2Fsd2F5cyBcdTY5RjMgMTMtNDYtNAorYWx3YXlzIFx1NjlGNCAxMjM1LTM0LTUKK2Fsd2F5cyBcdTY5RjUgMTIzNS0xMjQ1Ni01CithbHdheXMgXHU2OUY2IDEzLTEyNDYtNQorYWx3YXlzIFx1NjlGNyAxMzQ1LTM0Ni01CithbHdheXMgXHU2OUY4IDE2LTUKK2Fsd2F5cyBcdTY5RjkgMTMtMTQ2LTMKK2Fsd2F5cyBcdTY5RkEgMTIzLTEzNDYtMworYWx3YXlzIFx1NjlGQiAxMy0xMjQ2LTMKK2Fsd2F5cyBcdTY5RkMgMTMtMTI0Ni0zCithbHdheXMgXHU2OUZEIDI0NS0xNDYtMgorYWx3YXlzIFx1NjlGRSAxMzQtMTIzNi0yCithbHdheXMgXHU2OUZGIDEzLTE0NTYtNAorYWx3YXlzIFx1NkEwMCAxNDUtMTYtNQorYWx3YXlzIFx1NkEwMSAxLTQ1Ni0zCithbHdheXMgXHU2QTAyIDE0LTIzNDYtNQorYWx3YXlzIFx1NkEwMyAxNC0xMzQ2LTIKK2Fsd2F5cyBcdTZBMDQgMTItMTM2LTIKK2Fsd2F5cyBcdTZBMDUgMjQ1LTEyMzQ2LTMKK2Fsd2F5cyBcdTZBMDYgMTQtMTYtMgorYWx3YXlzIFx1NkEwNyAxNS0yMzQtMworYWx3YXlzIFx1NkEwOCAyNDUtMTM0NTYtMgorYWx3YXlzIFx1NkEwOSAyNC00NTYtNAorYWx3YXlzIFx1NkEwQSAxMjM0NS0xMjM2LTIKK2Fsd2F5cyBcdTZBMEIgMTI0LTEyMzQ2LTMKK2Fsd2F5cyBcdTZBMEMgMTMtMTI0NTYtNQorYWx3YXlzIFx1NkEwRCAxMy0xNi0zCithbHdheXMgXHU2QTBFIDE1LTI1LTMKK2Fsd2F5cyBcdTZBMEYgMTQtMzU2LTQKK2Fsd2F5cyBcdTZBMTAgMTQtMzQtNAorYWx3YXlzIFx1NkExMSAxNC00Ni0yCithbHdheXMgXHU2QTEyIDEzNC0xNi01CithbHdheXMgXHU2QTEzIDE0LTEyMzU2LTIKK2Fsd2F5cyBcdTZBMTQgMTItMTQ2LTIKK2Fsd2F5cyBcdTZBMTUgMTUtMzQtNQorYWx3YXlzIFx1NkExNiAxMjMtMjM0Ni0zCithbHdheXMgXHU2QTE3IDEyLTM0LTMKK2Fsd2F5cyBcdTZBMTggMTItMTM1Ni0zCithbHdheXMgXHU2QTE5IDEzNS0yNDYtMworYWx3YXlzIFx1NkExQSAxNC0zNC01CithbHdheXMgXHU2QTFCIDEzLTIzNC0zCithbHdheXMgXHU2QTFDIDI0LTM0LTUKK2Fsd2F5cyBcdTZBMUQgMS0zNDUtMworYWx3YXlzIFx1NkExRSAyNC0zNC0zCithbHdheXMgXHU2QTFGIDEtMTM0Ni0zCithbHdheXMgXHU2QTIwIDEzNC0xMzYtMgorYWx3YXlzIFx1NkEyMSAxMzQtMTI2LTIKK2Fsd2F5cyBcdTZBMjIgMTM0NS0yNDYtNAorYWx3YXlzIFx1NkEyMyA0Ni01CithbHdheXMgXHU2QTI0IDEyNC0yNDYtMgorYWx3YXlzIFx1NkEyNSAxMjM0LTEzNTYtMgorYWx3YXlzIFx1NkEyNiAxLTM0LTUKK2Fsd2F5cyBcdTZBMjcgMjQtMzQ1LTMKK2Fsd2F5cyBcdTZBMjggMTUtMTYtMworYWx3YXlzIFx1NkEyOSAyNDUtNDUtMgorYWx3YXlzIFx1NkEyQSAxMjM1LTEzNTYtMgorYWx3YXlzIFx1NkEyQiAxMy0yMzQ1LTMKK2Fsd2F5cyBcdTZBMkMgMjQ1LTEyMzQ2LTMKK2Fsd2F5cyBcdTZBMkQgMTMtMTYtMworYWx3YXlzIFx1NkEyRSAyMzQ1LTMKK2Fsd2F5cyBcdTZBMkYgMjQ1LTQ2LTIKK2Fsd2F5cyBcdTZBMzAgMTUtMjM2LTQKK2Fsd2F5cyBcdTZBMzEgMTM0NTYtMworYWx3YXlzIFx1NkEzMiAxNTYtNQorYWx3YXlzIFx1NkEzMyAxNS0yNTYtMgorYWx3YXlzIFx1NkEzNCAxLTE1Ni0yCithbHdheXMgXHU2QTM1IDI0NS0yNDYtMgorYWx3YXlzIFx1NkEzNiAxMjUtMTI0Ni0zCithbHdheXMgXHU2QTM3IDI0NS0xMjM0Ni0yCithbHdheXMgXHU2QTM4IDEyMzQtMzQtMgorYWx3YXlzIFx1NkEzOSAyNC0zNC01CithbHdheXMgXHU2QTNBIDEyMzUtMzUtNQorYWx3YXlzIFx1NkEzQiAxMjMtMTI0Ni01CithbHdheXMgXHU2QTNDIDEtMTM2LTMKK2Fsd2F5cyBcdTZBM0QgMTI1LTEyMzQ1Ni0zCithbHdheXMgXHU2QTNFIDIzNi01CithbHdheXMgXHU2QTNGIDEtMTIzNi00CithbHdheXMgXHU2QTQwIDE1LTE2LTMKK2Fsd2F5cyBcdTZBNDEgMTItMTIzNDU2LTMKK2Fsd2F5cyBcdTZBNDIgMTQ1LTIzNDUtNQorYWx3YXlzIFx1NkE0MyAxMjM0NS0zNTYtNQorYWx3YXlzIFx1NkE0NCAxMy0xMjM2LTQKK2Fsd2F5cyBcdTZBNDUgMTM0LTEyNi0yCithbHdheXMgXHU2QTQ2IDM0LTQKK2Fsd2F5cyBcdTZBNDcgMjQ1LTI0Ni0zCithbHdheXMgXHU2QTQ4IDEzNDUtMTQ2LTIKK2Fsd2F5cyBcdTZBNDkgMTQtMTQ1Ni01CithbHdheXMgXHU2QTRBIDE0LTIzNC0yCithbHdheXMgXHU2QTRCIDI0NS0yNDYtMgorYWx3YXlzIFx1NkE0QyAxNS0yMzQ1LTUKK2Fsd2F5cyBcdTZBNEQgMTI0NS0xMjM0NTYtNQorYWx3YXlzIFx1NkE0RSAxMjM0NS0xMjM2LTIKK2Fsd2F5cyBcdTZBNEYgMS0xMjM2LTQKK2Fsd2F5cyBcdTZBNTAgMTI0LTI1LTIKK2Fsd2F5cyBcdTZBNTEgMTQtMTQ2LTQKK2Fsd2F5cyBcdTZBNTIgMjU2LTIKK2Fsd2F5cyBcdTZBNTMgMjQtMTIzNDU2LTUKK2Fsd2F5cyBcdTZBNTQgMTI0LTEyNDYtMgorYWx3YXlzIFx1NkE1NSAxMi0xMzU2LTMKK2Fsd2F5cyBcdTZBNTYgMTI0LTEzNDYtMgorYWx3YXlzIFx1NkE1NyAxMzQtMTM1Ni0yCithbHdheXMgXHU2QTU4IDEzLTEyNTYtMgorYWx3YXlzIFx1NkE1OSAxMi0xMzU2LTIKK2Fsd2F5cyBcdTZBNUEgMTUtMzQtNQorYWx3YXlzIFx1NkE1QiAxMy0yMzYtMgorYWx3YXlzIFx1NkE1QyAxMy0yMzYtMgorYWx3YXlzIFx1NkE1RCAxMjQtMTIzNi0zCithbHdheXMgXHU2QTVFIDEyMzUtMTI0Ni01CithbHdheXMgXHU2QTVGIDEzLTE2LTMKK2Fsd2F5cyBcdTZBNjAgMTM0NS0yNS00CithbHdheXMgXHU2QTYxIDE1LTQ2LTUKK2Fsd2F5cyBcdTZBNjIgMTI0LTI1LTQKK2Fsd2F5cyBcdTZBNjMgMTM0NS0xMzQ1Ni00CithbHdheXMgXHU2QTY0IDEyNDUtMTI0Ni00CithbHdheXMgXHU2QTY1IDEtMzQtMworYWx3YXlzIFx1NkE2NiAxMjQtMTIzNDYtMgorYWx3YXlzIFx1NkE2NyAxMjUtMTM1Ni0zCithbHdheXMgXHU2QTY4IDEyMzQ1LTEzNi01CithbHdheXMgXHU2QTY5IDI0NS0yMzUtMgorYWx3YXlzIFx1NkE2QSAxMjQ1LTEyMzYtNAorYWx3YXlzIFx1NkE2QiAxMjM1LTEzNTYtMgorYWx3YXlzIFx1NkE2QyAyNDUtMTM2LTIKK2Fsd2F5cyBcdTZBNkQgMTMtMzQtMworYWx3YXlzIFx1NkE2RSAxNC0yMzQtNAorYWx3YXlzIFx1NkE2RiAxNC0xNDYtNQorYWx3YXlzIFx1NkE3MCAxMy0xNDYtMworYWx3YXlzIFx1NkE3MSAxMi0zNC0yCithbHdheXMgXHU2QTcyIDE1LTE2LTQKK2Fsd2F5cyBcdTZBNzMgMjQtMTM1Ni01CithbHdheXMgXHU2QTc0IDEyNS0xNTYtNAorYWx3YXlzIFx1NkE3NSAxNS0xMjM2LTQKK2Fsd2F5cyBcdTZBNzYgMTMtMTYtNAorYWx3YXlzIFx1NkE3NyAxNDUtMTIzNTYtMworYWx3YXlzIFx1NkE3OCAxMy0xNDU2LTMKK2Fsd2F5cyBcdTZBNzkgMTQtMzQtNAorYWx3YXlzIFx1NkE3QSAxMy0yMzQ1LTUKK2Fsd2F5cyBcdTZBN0IgMTItMzQtNAorYWx3YXlzIFx1NkE3QyA0NS0yCithbHdheXMgXHU2QTdEIDEyNC0zNDUtNQorYWx3YXlzIFx1NkE3RSAyNC0zNC0zCithbHdheXMgXHU2QTdGIDEzLTQ2LTMKK2Fsd2F5cyBcdTZBODAgMTI0LTEyMzYtMgorYWx3YXlzIFx1NkE4MSAxNC0xNDU2LTQKK2Fsd2F5cyBcdTZBODIgMTM0NS0xMjM0Ni0yCithbHdheXMgXHU2QTgzIDE0NTYtNAorYWx3YXlzIFx1NkE4NCAxNS0xNi0yCithbHdheXMgXHU2QTg1IDE1LTEyNDYtNQorYWx3YXlzIFx1NkE4NiAyNC0xMjM2LTMKK2Fsd2F5cyBcdTZBODcgMTI1LTEyNDYtNAorYWx3YXlzIFx1NkE4OCAxNS00NS0yCithbHdheXMgXHU2QTg5IDEyLTEzNTYtMworYWx3YXlzIFx1NkE4QSAxMy0xMjM2LTUKK2Fsd2F5cyBcdTZBOEIgMTMtMTI1Ni0zCithbHdheXMgXHU2QThDIDEyNS0xMjQ2LTUKK2Fsd2F5cyBcdTZBOEQgMTYtNQorYWx3YXlzIFx1NkE4RSAyNDUtMTQ1Ni0yCithbHdheXMgXHU2QThGIDEyMzQtMzQtNAorYWx3YXlzIFx1NkE5MCAyMzQ1LTIKK2Fsd2F5cyBcdTZBOTEgMTQtMzU2LTIKK2Fsd2F5cyBcdTZBOTIgMTIzNDUtMTM1Ni0zCithbHdheXMgXHU2QTkzIDEyMzUtMTI0Ni00CithbHdheXMgXHU2QTk0IDE0NS0xMzQ2LTQKK2Fsd2F5cyBcdTZBOTUgMTMtMTYtNQorYWx3YXlzIFx1NkE5NiAxNS0xMjQ2LTUKK2Fsd2F5cyBcdTZBOTcgMTM1LTEyNi01CithbHdheXMgXHU2QTk4IDEzNS0xNi01CithbHdheXMgXHU2QTk5IDE0NS0xMzQ1Ni00CithbHdheXMgXHU2QTlBIDEyLTM0LTQKK2Fsd2F5cyBcdTZBOUIgMS0zNS0zCithbHdheXMgXHU2QTlDIDEyMy0yMzU2LTUKK2Fsd2F5cyBcdTZBOUQgMTMtMTYtMgorYWx3YXlzIFx1NkE5RSAxMy0zNDYtNAorYWx3YXlzIFx1NkE5RiAxMy0yMzQ1Ni00CithbHdheXMgXHU2QUEwIDI0NS0xMzQ1Ni0yCithbHdheXMgXHU2QUExIDEtMjM0Ni01CithbHdheXMgXHU2QUEyIDEzLTIzNDUtNAorYWx3YXlzIFx1NkFBMyAyNDUtNDYtMgorYWx3YXlzIFx1NkFBNCAxNDUtMTQ2LTUKK2Fsd2F5cyBcdTZBQTUgMTYtNAorYWx3YXlzIFx1NkFBNiAxMzUtMjQ2LTQKK2Fsd2F5cyBcdTZBQTcgMTUtMTIzNDYtMworYWx3YXlzIFx1NkFBOCAyNC0yMzQ2LTMKK2Fsd2F5cyBcdTZBQTkgMTQtMTQ1Ni00CithbHdheXMgXHU2QUFBIDE0LTE2LTUKK2Fsd2F5cyBcdTZBQUIgMTItMzQ1LTIKK2Fsd2F5cyBcdTZBQUMgMTM0LTEzNTYtMgorYWx3YXlzIFx1NkFBRCAxNDU2LTIKK2Fsd2F5cyBcdTZBQUUgMTI0LTE0Ni0yCithbHdheXMgXHU2QUFGIDEyNC0yNDU2LTIKK2Fsd2F5cyBcdTZBQjAgMTM0LTIzNDUtMgorYWx3YXlzIFx1NkFCMSAyNDUtMTYtMgorYWx3YXlzIFx1NkFCMiAxMjQtMTI0NTYtMgorYWx3YXlzIFx1NkFCMyAxMzUtMTQ1Ni0zCithbHdheXMgXHU2QUI0IDEyMzUtMjUtNQorYWx3YXlzIFx1NkFCNSAxMy0xNi01CithbHdheXMgXHU2QUI2IDI0NS0yMzQ1LTMKK2Fsd2F5cyBcdTZBQjcgMTM0LTE2LTIKK2Fsd2F5cyBcdTZBQjggMTM0NS0xMzQ1Ni0yCithbHdheXMgXHU2QUI5IDE2LTMKK2Fsd2F5cyBcdTZBQkEgMTMtMTQ2LTQKK2Fsd2F5cyBcdTZBQkIgMTMtMjM0NS01CithbHdheXMgXHU2QUJDIDE0NTYtNQorYWx3YXlzIFx1NkFCRCAxMzQ1LTEyMzU2LTUKK2Fsd2F5cyBcdTZBQkUgMjQ1LTEzNDU2LTQKK2Fsd2F5cyBcdTZBQkYgMjM0NS00CithbHdheXMgXHU2QUMwIDI0NS0xNi0yCithbHdheXMgXHU2QUMxIDEzNC0xNi01CithbHdheXMgXHU2QUMyIDEtMTQ2LTUKK2Fsd2F5cyBcdTZBQzMgMTMtMTI0Ni01CithbHdheXMgXHU2QUM0IDEyLTEyMzQ1Ni0zCithbHdheXMgXHU2QUM1IDEzLTE2LTMKK2Fsd2F5cyBcdTZBQzYgMTIzLTEyNDYtMgorYWx3YXlzIFx1NkFDNyAxMjM0LTEyNi0yCithbHdheXMgXHU2QUM4IDE0NS0xMzU2LTUKK2Fsd2F5cyBcdTZBQzkgMTItMzQtMgorYWx3YXlzIFx1NkFDQSAxMy0yMzQ2LTIKK2Fsd2F5cyBcdTZBQ0IgMTM0LTIzNDUtMgorYWx3YXlzIFx1NkFDQyAyMzQtMworYWx3YXlzIFx1NkFDRCAxLTE1Ni01CithbHdheXMgXHU2QUNFIDEzLTQ1Ni01CithbHdheXMgXHU2QUNGIDI0NS0yMzQ1LTMKK2Fsd2F5cyBcdTZBRDAgMTQtMzU2LTQKK2Fsd2F5cyBcdTZBRDEgMTQtMzU2LTIKK2Fsd2F5cyBcdTZBRDIgMTUtMzQ1LTUKK2Fsd2F5cyBcdTZBRDMgMTQtMzQtNAorYWx3YXlzIFx1NkFENCAxNC0xNi01CithbHdheXMgXHU2QUQ1IDI0NS0xMjQ1Ni0yCithbHdheXMgXHU2QUQ2IDE0LTEyNTYtMgorYWx3YXlzIFx1NkFENyAxMzQtMzQ2LTUKK2Fsd2F5cyBcdTZBRDggMTIzNS0xMjQ2LTUKK2Fsd2F5cyBcdTZBRDkgMTIzNTYtMworYWx3YXlzIFx1NkFEQSAxNC0xMjU2LTIKK2Fsd2F5cyBcdTZBREIgMTMtMzQ2LTIKK2Fsd2F5cyBcdTZBREMgMTMtMTQ2LTMKK2Fsd2F5cyBcdTZBREQgMTQ1LTM0LTIKK2Fsd2F5cyBcdTZBREUgNDUtMgorYWx3YXlzIFx1NkFERiAxNC0xNi01CithbHdheXMgXHU2QUUwIDEyMzQ1LTM1Ni01CithbHdheXMgXHU2QUUxIDEtMjUtMgorYWx3YXlzIFx1NkFFMiAxNS0xMjM1Ni00CithbHdheXMgXHU2QUUzIDE0LTIzNDUtMgorYWx3YXlzIFx1NkFFNCAxMy00Ni01CithbHdheXMgXHU2QUU1IDEyLTM0LTIKK2Fsd2F5cyBcdTZBRTYgMjQ1LTEzNDU2LTUKK2Fsd2F5cyBcdTZBRTcgMS0zNC0zCithbHdheXMgXHU2QUU4IDE0LTM0LTIKK2Fsd2F5cyBcdTZBRTkgMjM0NS0yCithbHdheXMgXHU2QUVBIDE0LTE2LTUKK2Fsd2F5cyBcdTZBRUIgMS0zNC0zCithbHdheXMgXHU2QUVDIDEyLTEzNi01CithbHdheXMgXHU2QUVEIDEzLTM0Ni0yCithbHdheXMgXHU2QUVFIDIzNDYtNQorYWx3YXlzIFx1NkFFRiAxNS0zNC0zCithbHdheXMgXHU2QUYwIDEyMzUtMjM1Ni0yCithbHdheXMgXHU2QUYxIDEzNDUtMzQ2LTUKK2Fsd2F5cyBcdTZBRjIgMTI1Ni01CithbHdheXMgXHU2QUYzIDE0LTEyMzQ2LTIKK2Fsd2F5cyBcdTZBRjQgMTQtMjQ1Ni01CithbHdheXMgXHU2QUY1IDEzLTI0Ni0yCithbHdheXMgXHU2QUY2IDE1LTIzNDUtNAorYWx3YXlzIFx1NkFGNyAxMy0xMjQ2LTMKK2Fsd2F5cyBcdTZBRjggMTMtMTI1Ni00CithbHdheXMgXHU2QUY5IDE1LTI0Ni0zCithbHdheXMgXHU2QUZBIDE0LTEzNDU2LTIKK2Fsd2F5cyBcdTZBRkIgMTM0NTYtMworYWx3YXlzIFx1NkFGQyAxMy0yMzQ1LTMKK2Fsd2F5cyBcdTZBRkQgMTQ1Ni00CithbHdheXMgXHU2QUZFIDIzNC0yCithbHdheXMgXHU2QUZGIDEzNDU2LTIKK2Fsd2F5cyBcdTZCMDAgMTUtNDYtMworYWx3YXlzIFx1NkIwMSAxMzQ1LTEyMzQ2LTIKK2Fsd2F5cyBcdTZCMDIgMTM1LTEyNi0yCithbHdheXMgXHU2QjAzIDEyLTEyMzYtMgorYWx3YXlzIFx1NkIwNCAxNC0xMjM2LTIKK2Fsd2F5cyBcdTZCMDUgMTMtMTI1Ni00CithbHdheXMgXHU2QjA2IDI0LTQ1Ni0zCithbHdheXMgXHU2QjA3IDI0LTIzNDYtNQorYWx3YXlzIFx1NkIwOCAxMjQ2LTIKK2Fsd2F5cyBcdTZCMDkgMjQ1LTEyMzQ2LTUKK2Fsd2F5cyBcdTZCMEEgMjQ1LTQ1LTIKK2Fsd2F5cyBcdTZCMEIgMjQ1LTEyNTYtMgorYWx3YXlzIFx1NkIwQyAyNDUtMTM0Ni0yCithbHdheXMgXHU2QjBEIDEzLTIzNC00CithbHdheXMgXHU2QjBFIDEyNTYtNQorYWx3YXlzIFx1NkIwRiAxNC0yNS0yCithbHdheXMgXHU2QjEwIDE0LTE2LTUKK2Fsd2F5cyBcdTZCMTEgMjQ1LTEyNDU2LTIKK2Fsd2F5cyBcdTZCMTIgMTQtMTI0NTYtMgorYWx3YXlzIFx1NkIxMyAxNDUtMTM0Ni00CithbHdheXMgXHU2QjE0IDEzLTIzNi0yCithbHdheXMgXHU2QjE1IDIzNDUtMgorYWx3YXlzIFx1NkIxNiAxNC0xMjM2LTQKK2Fsd2F5cyBcdTZCMTcgMTQtMTIzNi0yCithbHdheXMgXHU2QjE4IDEtMzQtNAorYWx3YXlzIFx1NkIxOSAxNC0zNTYtMgorYWx3YXlzIFx1NkIxQSAxNC0xNi00CithbHdheXMgXHU2QjFCIDEzNS0zNDUtNQorYWx3YXlzIFx1NkIxQyAxMzQ1LTEzNDYtMgorYWx3YXlzIFx1NkIxRCAxMjU2LTUKK2Fsd2F5cyBcdTZCMUUgMTQtMTM0NTYtMgorYWx3YXlzIFx1NkIxRiAxMy00NTYtMworYWx3YXlzIFx1NkIyMCAyNDUtMjM0NS01CithbHdheXMgXHU2QjIxIDI0NS0xNTYtNQorYWx3YXlzIFx1NkIyMiAxMjM1LTEyNDU2LTMKK2Fsd2F5cyBcdTZCMjMgMTUtMTQ1Ni0zCithbHdheXMgXHU2QjI0IDEyNTYtMgorYWx3YXlzIFx1NkIyNSAxMjU2LTUKK2Fsd2F5cyBcdTZCMjYgMjQ1LTIzNDUtMworYWx3YXlzIFx1NkIyNyAxMjM1Ni0zCithbHdheXMgXHU2QjI4IDE1LTEyNTYtMworYWx3YXlzIFx1NkIyOSAxMi0xNDYtMworYWx3YXlzIFx1NkIyQSAxMi0zNC01CithbHdheXMgXHU2QjJCIDEyLTE1Ni0zCithbHdheXMgXHU2QjJDIDEyMy0yNDU2LTUKK2Fsd2F5cyBcdTZCMkQgMTQ1Ni0zCithbHdheXMgXHU2QjJFIDEzLTIzNi0yCithbHdheXMgXHU2QjJGIDE1LTE2LTIKK2Fsd2F5cyBcdTZCMzAgMTUtMTI1Ni0zCithbHdheXMgXHU2QjMxIDEyMzUtMjM0Ni0zCithbHdheXMgXHU2QjMyIDEyNTYtNQorYWx3YXlzIFx1NkIzMyAxMjMtMjM1Ni01CithbHdheXMgXHU2QjM0IDE0LTEzNDYtMgorYWx3YXlzIFx1NkIzNSAxMjMtMTI0NTYtNAorYWx3YXlzIFx1NkIzNiAyNC0yNS01CithbHdheXMgXHU2QjM3IDE1LTE2LTMKK2Fsd2F5cyBcdTZCMzggMzU2LTUKK2Fsd2F5cyBcdTZCMzkgMTYtMworYWx3YXlzIFx1NkIzQSAyNDUtMTYtMworYWx3YXlzIFx1NkIzQiAxMi0zNS0zCithbHdheXMgXHU2QjNDIDEyLTE1Ni00CithbHdheXMgXHU2QjNEIDI0NS0xNDU2LTMKK2Fsd2F5cyBcdTZCM0UgMTIzLTEyNDU2LTQKK2Fsd2F5cyBcdTZCM0YgMTIzLTEyMzYtNAorYWx3YXlzIFx1NkI0MCAxMjMtMTI0NTYtNAorYWx3YXlzIFx1NkI0MSAxMjMtMTIzNi00CithbHdheXMgXHU2QjQyIDEyLTEyNDU2LTIKK2Fsd2F5cyBcdTZCNDMgMjQtMzQ1LTUKK2Fsd2F5cyBcdTZCNDQgMTMtMzUtMworYWx3YXlzIFx1NkI0NSAxNDU2LTMKK2Fsd2F5cyBcdTZCNDYgMTUtMTQ1Ni0zCithbHdheXMgXHU2QjQ3IDE1LTM0Ni0zCithbHdheXMgXHU2QjQ4IDEyNTYtMgorYWx3YXlzIFx1NkI0OSAyNDUtMjM0NS01CithbHdheXMgXHU2QjRBIDE1LTI0Ni0zCithbHdheXMgXHU2QjRCIDE2LTIKK2Fsd2F5cyBcdTZCNEMgMTMtMjM0Ni0zCithbHdheXMgXHU2QjREIDM0LTMKK2Fsd2F5cyBcdTZCNEUgMTI0LTEyMzYtNQorYWx3YXlzIFx1NkI0RiAxMy0xNDU2LTUKK2Fsd2F5cyBcdTZCNTAgMTIzNTYtMworYWx3YXlzIFx1NkI1MSAxMjM1LTM0LTMKK2Fsd2F5cyBcdTZCNTIgMTI0LTE2LTUKK2Fsd2F5cyBcdTZCNTMgMTIzNS0xMjQ1Ni0zCithbHdheXMgXHU2QjU0IDE1LTEyNTYtMworYWx3YXlzIFx1NkI1NSAxMjM0LTEzNi0zCithbHdheXMgXHU2QjU2IDE1LTE2LTMKK2Fsd2F5cyBcdTZCNTcgMTUtMjQ2LTUKK2Fsd2F5cyBcdTZCNTggMTUtMTI1Ni0zCithbHdheXMgXHU2QjU5IDE1LTE2LTUKK2Fsd2F5cyBcdTZCNUEgMjQtMTIzNi01CithbHdheXMgXHU2QjVCIDE0LTIzNDUtNQorYWx3YXlzIFx1NkI1QyAxMi0zNC01CithbHdheXMgXHU2QjVEIDE2LTUKK2Fsd2F5cyBcdTZCNUUgMjM0Ni01CithbHdheXMgXHU2QjVGIDEyNTYtMgorYWx3YXlzIFx1NkI2MCAxMi0yNS01CithbHdheXMgXHU2QjYxIDEyMzUtMTI0NTYtMworYWx3YXlzIFx1NkI2MiAxLTE1Ni00CithbHdheXMgXHU2QjYzIDEtMTM1Ni01CithbHdheXMgXHU2QjY0IDI0NS0xNTYtNAorYWx3YXlzIFx1NkI2NSAxMzUtMzQtNQorYWx3YXlzIFx1NkI2NiAzNC00CithbHdheXMgXHU2QjY3IDI0NS0xNi0yCithbHdheXMgXHU2QjY4IDEzNS0zNC01CithbHdheXMgXHU2QjY5IDEzNS0zNC01CithbHdheXMgXHU2QjZBIDIzNTYtMworYWx3YXlzIFx1NkI2QiAxMy0xMjU2LTUKK2Fsd2F5cyBcdTZCNkMgMjQ1LTIzNDUtMgorYWx3YXlzIFx1NkI2RCAxMi0xNTYtMgorYWx3YXlzIFx1NkI2RSAxNS0yMzQ2LTUKK2Fsd2F5cyBcdTZCNkYgMTItMTU2LTQKK2Fsd2F5cyBcdTZCNzAgMTUtMjM0Ni01CithbHdheXMgXHU2QjcxIDEtMTIzNDYtNAorYWx3YXlzIFx1NkI3MiAxNS0xMjQ2LTUKK2Fsd2F5cyBcdTZCNzMgMTUtMTI0Ni01CithbHdheXMgXHU2Qjc0IDE0LTE2LTUKK2Fsd2F5cyBcdTZCNzUgMjQ1LTI1LTUKK2Fsd2F5cyBcdTZCNzYgMTI1Ni0yCithbHdheXMgXHU2Qjc3IDE0LTE2LTUKK2Fsd2F5cyBcdTZCNzggMTMtMTI0Ni0zCithbHdheXMgXHU2Qjc5IDE0NS0yNDU2LTQKK2Fsd2F5cyBcdTZCN0EgMTQ1LTI0NTYtNAorYWx3YXlzIFx1NkI3QiAxNS0xNTYtNAorYWx3YXlzIFx1NkI3QyAxMy0yMzQ1LTMKK2Fsd2F5cyBcdTZCN0QgMS0yMzQ2LTIKK2Fsd2F5cyBcdTZCN0UgMTM0LTEyNi01CithbHdheXMgXHU2QjdGIDEzNC0xMjYtNQorYWx3YXlzIFx1NkI4MCAyNDYtNAorYWx3YXlzIFx1NkI4MSAxMzQtMTI2LTUKK2Fsd2F5cyBcdTZCODIgMjQ1LTM0LTIKK2Fsd2F5cyBcdTZCODMgNDYtMworYWx3YXlzIFx1NkI4NCAxMjQtMjM0NS00CithbHdheXMgXHU2Qjg1IDI0LTEzNTYtMworYWx3YXlzIFx1NkI4NiAxNDUtMjQ1Ni01CithbHdheXMgXHU2Qjg3IDI0LTEzNDYtMworYWx3YXlzIFx1NkI4OCAxNS0xMjU2LTUKK2Fsd2F5cyBcdTZCODkgMTUtMjU2LTUKK2Fsd2F5cyBcdTZCOEEgMjQtMzQtMworYWx3YXlzIFx1NkI4QiAyNDUtMTIzNi0yCithbHdheXMgXHU2QjhDIDEzLTIzNi0yCithbHdheXMgXHU2QjhEIDEyMzQtMjQ2LTQKK2Fsd2F5cyBcdTZCOEUgMjQ1LTIzNDU2LTUKK2Fsd2F5cyBcdTZCOEYgMjQ1LTIzNC0yCithbHdheXMgXHU2QjkwIDE1LTM0LTUKK2Fsd2F5cyBcdTZCOTEgMjQ1LTEzNDU2LTIKK2Fsd2F5cyBcdTZCOTIgMjU2LTQKK2Fsd2F5cyBcdTZCOTMgMTQtMjM0NS01CithbHdheXMgXHU2Qjk0IDE2LTUKK2Fsd2F5cyBcdTZCOTUgMTIzNDUtMTIzNTYtNAorYWx3YXlzIFx1NkI5NiAxLTE1Ni0yCithbHdheXMgXHU2Qjk3IDM0Ni01CithbHdheXMgXHU2Qjk4IDI0NS0xMjM2LTIKK2Fsd2F5cyBcdTZCOTkgMTIzNS0xMjM0NTYtMworYWx3YXlzIFx1NkI5QSAxNDUtMTIzNi0zCithbHdheXMgXHU2QjlCIDEzLTE2LTIKK2Fsd2F5cyBcdTZCOUMgMzQ2LTUKK2Fsd2F5cyBcdTZCOUQgMS0xMzYtMworYWx3YXlzIFx1NkI5RSAyNTYtNAorYWx3YXlzIFx1NkI5RiAxMjM0NTYtMworYWx3YXlzIFx1NkJBMCAxMi0xMjM1Ni01CithbHdheXMgXHU2QkExIDEzNS0xNDU2LTUKK2Fsd2F5cyBcdTZCQTIgMTI0LTE2LTUKK2Fsd2F5cyBcdTZCQTMgMTMtMTQ1Ni01CithbHdheXMgXHU2QkE0IDI0LTEzNDYtMworYWx3YXlzIFx1NkJBNSAxNDU2LTIKK2Fsd2F5cyBcdTZCQTYgMTQ1LTI0Ni0zCithbHdheXMgXHU2QkE3IDI0NS0zNC01CithbHdheXMgXHU2QkE4IDEyMzUtMTI0Ni01CithbHdheXMgXHU2QkE5IDI0NS0xMjQ1Ni01CithbHdheXMgXHU2QkFBIDE2LTUKK2Fsd2F5cyBcdTZCQUIgMTQ1LTEyMzYtMworYWx3YXlzIFx1NkJBQyAxNDUtMzQtNQorYWx3YXlzIFx1NkJBRCAxMy00Ni0zCithbHdheXMgXHU2QkFFIDE0LTIzNDUtNQorYWx3YXlzIFx1NkJBRiAxMzUtMTQ1Ni01CithbHdheXMgXHU2QkIwIDE0NS0zNC0yCithbHdheXMgXHU2QkIxIDEzLTIzNDUtMworYWx3YXlzIFx1NkJCMiAxMy0yMzQ1LTMKK2Fsd2F5cyBcdTZCQjMgMjQtMzQtMworYWx3YXlzIFx1NkJCNCAxMjM1Ni0zCithbHdheXMgXHU2QkI1IDE0NS0xMjQ1Ni01CithbHdheXMgXHU2QkI2IDEtMzQtNQorYWx3YXlzIFx1NkJCNyAxNDU2LTMKK2Fsd2F5cyBcdTZCQjggMjQ1LTEzNDU2LTUKK2Fsd2F5cyBcdTZCQjkgMTYtMworYWx3YXlzIFx1NkJCQSAyNC0zNDUtMworYWx3YXlzIFx1NkJCQiAxMjMtMjM0Ni0yCithbHdheXMgXHU2QkJDIDEyMy0yMzQ2LTIKK2Fsd2F5cyBcdTZCQkQgMjQ2LTIKK2Fsd2F5cyBcdTZCQkUgMTMtMjU2LTUKK2Fsd2F5cyBcdTZCQkYgMTQ1LTIzNDUtNQorYWx3YXlzIFx1NkJDMCAxMjM1LTEyNDYtNAorYWx3YXlzIFx1NkJDMSAxMjM1LTEyNDYtNAorYWx3YXlzIFx1NkJDMiAxMy0zNC00CithbHdheXMgXHU2QkMzIDI0NS0yNDYtMworYWx3YXlzIFx1NkJDNCAxMy0xNi0zCithbHdheXMgXHU2QkM1IDE2LTUKK2Fsd2F5cyBcdTZCQzYgMTIzNTYtMworYWx3YXlzIFx1NkJDNyAxMjM1LTEyNDYtNAorYWx3YXlzIFx1NkJDOCAxNDUtMTI0NTYtNQorYWx3YXlzIFx1NkJDOSAxNi0zCithbHdheXMgXHU2QkNBIDE1LTI0Ni0zCithbHdheXMgXHU2QkNCIDM0LTIKK2Fsd2F5cyBcdTZCQ0MgMTMtMTI0NTYtNQorYWx3YXlzIFx1NkJDRCAxMzQtMzQtNAorYWx3YXlzIFx1NkJDRSAxMzQtMzU2LTQKK2Fsd2F5cyBcdTZCQ0YgMTM0LTM1Ni00CithbHdheXMgXHU2QkQwIDI0NTYtNAorYWx3YXlzIFx1NkJEMSAxMjUtMjUtNAorYWx3YXlzIFx1NkJEMiAxNDUtMzQtMgorYWx3YXlzIFx1NkJEMyAxMjU2LTUKK2Fsd2F5cyBcdTZCRDQgMTM1LTE2LTQKK2Fsd2F5cyBcdTZCRDUgMTM1LTE2LTUKK2Fsd2F5cyBcdTZCRDYgMTM1LTE2LTUKK2Fsd2F5cyBcdTZCRDcgMTIzNC0xNi0yCithbHdheXMgXHU2QkQ4IDEyMzQtMTYtMgorYWx3YXlzIFx1NkJEOSAxMzUtMTYtNQorYWx3YXlzIFx1NkJEQSAxMi0xMjM2LTIKK2Fsd2F5cyBcdTZCREIgMTM0LTE0Ni0yCithbHdheXMgXHU2QkRDIDEyMzUtMTQ2LTIKK2Fsd2F5cyBcdTZCREQgMjQtMTIzNi0zCithbHdheXMgXHU2QkRFIDEyMzQtMTYtMgorYWx3YXlzIFx1NkJERiAxNC0zNDYtNAorYWx3YXlzIFx1NkJFMCAxMy0yMzQ1Ni0zCithbHdheXMgXHU2QkUxIDEtMTIzNi0zCithbHdheXMgXHU2QkUyIDE1LTI0NTYtMworYWx3YXlzIFx1NkJFMyAxMzQtMzQtNQorYWx3YXlzIFx1NkJFNCAxMjQtMjUtNQorYWx3YXlzIFx1NkJFNSAxNS0yNTYtMgorYWx3YXlzIFx1NkJFNiAxNTYtNQorYWx3YXlzIFx1NkJFNyAxMjQ1LTEyMzQ2LTIKK2Fsd2F5cyBcdTZCRTggMTUtMjM0NS00CithbHdheXMgXHU2QkU5IDEzLTEyNTYtMgorYWx3YXlzIFx1NkJFQSAxMzQtMzQtMgorYWx3YXlzIFx1NkJFQiAxMjM1LTE0Ni0yCithbHdheXMgXHU2QkVDIDI0NS0yMzQtMgorYWx3YXlzIFx1NkJFRCAxNDUtMTIzNTYtNQorYWx3YXlzIFx1NkJFRSAyNC0zNDUtMworYWx3YXlzIFx1NkJFRiAxMjQtMTIzNi00CithbHdheXMgXHU2QkYwIDEyMzQtMzU2LTIKK2Fsd2F5cyBcdTZCRjEgMTMtMTI1Ni0yCithbHdheXMgXHU2QkYyIDE0NS0yNS0yCithbHdheXMgXHU2QkYzIDI0NS0xMjQ2LTUKK2Fsd2F5cyBcdTZCRjQgMTM1LTE2LTMKK2Fsd2F5cyBcdTZCRjUgMTUtMTIzNi0zCithbHdheXMgXHU2QkY2IDE1LTEyMzYtMworYWx3YXlzIFx1NkJGNyAxMzQtMTQ2LTUKK2Fsd2F5cyBcdTZCRjggMTUtMTI0Ni0zCithbHdheXMgXHU2QkY5IDI0LTM0LTMKK2Fsd2F5cyBcdTZCRkEgMTI1Ni0zCithbHdheXMgXHU2QkZCIDEyNC0yNS01CithbHdheXMgXHU2QkZDIDEyMzUtMjM0Ni0yCithbHdheXMgXHU2QkZEIDEzLTIzNDUtNQorYWx3YXlzIFx1NkJGRSAxMjQtMzQ1LTUKK2Fsd2F5cyBcdTZCRkYgMTUtMTIzNi0zCithbHdheXMgXHU2QzAwIDE0LTEyNTYtMgorYWx3YXlzIFx1NkMwMSAxMzQtMzQtMgorYWx3YXlzIFx1NkMwMiAxMzQtMTQ2LTIKK2Fsd2F5cyBcdTZDMDMgMTI0LTEyMzQ2LTIKK2Fsd2F5cyBcdTZDMDQgMTI0NS0xMjM0Ni00CithbHdheXMgXHU2QzA1IDEyLTEzNDYtNAorYWx3YXlzIFx1NkMwNiAxMjM0LTM0LTQKK2Fsd2F5cyBcdTZDMDcgMTQtMzQtNAorYWx3YXlzIFx1NkMwOCAxLTEyMzYtMworYWx3YXlzIFx1NkMwOSAxMjUtMTQ2LTUKK2Fsd2F5cyBcdTZDMEEgMS0xMjM2LTMKK2Fsd2F5cyBcdTZDMEIgMTM0LTEzNTYtMgorYWx3YXlzIFx1NkMwQyAxNC0zNC00CithbHdheXMgXHU2QzBEIDI0NS0xMjU2LTIKK2Fsd2F5cyBcdTZDMEUgMTQ1LTM0Ni0yCithbHdheXMgXHU2QzBGIDI0LTE1Ni01CithbHdheXMgXHU2QzEwIDE0NS0xNi0zCithbHdheXMgXHU2QzExIDEzNC0xNDU2LTIKK2Fsd2F5cyBcdTZDMTIgMTMtMjM2LTIKK2Fsd2F5cyBcdTZDMTMgMTM0LTEzNDYtMgorYWx3YXlzIFx1NkMxNCAyNDUtMTYtNQorYWx3YXlzIFx1NkMxNSAxMjM0LTM0Ni0zCithbHdheXMgXHU2QzE2IDEzNDUtMjQ1Ni00CithbHdheXMgXHU2QzE3IDI0NS0xNi01CithbHdheXMgXHU2QzE4IDE0NS0xNDYtMworYWx3YXlzIFx1NkMxOSAxNS0yMzQ1LTMKK2Fsd2F5cyBcdTZDMUEgMTItMTI0NTYtMworYWx3YXlzIFx1NkMxQiAxMjM0NS0xMzYtMworYWx3YXlzIFx1NkMxQyAxMjQ1LTE1Ni01CithbHdheXMgXHU2QzFEIDEzNDUtMzU2LTUKK2Fsd2F5cyBcdTZDMUUgMTM1LTE0NTYtNQorYWx3YXlzIFx1NkMxRiAxMjM0NS0zNC0yCithbHdheXMgXHU2QzIwIDI0LTEzNi0zCithbHdheXMgXHU2QzIxIDE0NS0xMjM0Ni0zCithbHdheXMgXHU2QzIyIDI0NS0xMzQ1Ni0zCithbHdheXMgXHU2QzIzIDI0NS0xNi01CithbHdheXMgXHU2QzI0IDE0NTYtMworYWx3YXlzIFx1NkMyNSAxNS0xNi0zCithbHdheXMgXHU2QzI2IDEyMzUtMjQ1Ni01CithbHdheXMgXHU2QzI3IDQ2LTQKK2Fsd2F5cyBcdTZDMjggMTIzNi0zCithbHdheXMgXHU2QzI5IDIzNDU2LTUKK2Fsd2F5cyBcdTZDMkEgMTIzLTIzNDYtNQorYWx3YXlzIFx1NkMyQiAyNDUtMTM0NTYtMworYWx3YXlzIFx1NkMyQyAyMzQ1Ni01CithbHdheXMgXHU2QzJEIDE0NS0xMjM0Ni0zCithbHdheXMgXHU2QzJFIDE0NS0xMjM2LTUKK2Fsd2F5cyBcdTZDMkYgMTQtMTI1Ni01CithbHdheXMgXHU2QzMwIDI0NS0xMzQ1Ni0yCithbHdheXMgXHU2QzMxIDQ2LTQKK2Fsd2F5cyBcdTZDMzIgMjU2LTMKK2Fsd2F5cyBcdTZDMzMgMjU2LTMKK2Fsd2F5cyBcdTZDMzQgMjQtMTI0Ni00CithbHdheXMgXHU2QzM1IDI0LTEyNDYtNAorYWx3YXlzIFx1NkMzNiAxLTEzNTYtNAorYWx3YXlzIFx1NkMzNyAxMzUtMTM0NTYtMworYWx3YXlzIFx1NkMzOCAyMzUtNAorYWx3YXlzIFx1NkMzOSAxNDUtMTM0Ni01CithbHdheXMgXHU2QzNBIDI0LTEyNDYtNAorYWx3YXlzIFx1NkMzQiAxNC0yMzQ2LTUKK2Fsd2F5cyBcdTZDM0MgMTM0NS0xNi01CithbHdheXMgXHU2QzNEIDEyNC0xMjM0NTYtNAorYWx3YXlzIFx1NkMzRSAxMjM0NS0xMjM2LTUKK2Fsd2F5cyBcdTZDM0YgMTMtMTI0Ni00CithbHdheXMgXHU2QzQwIDEyNC0xMzQ1Ni0zCithbHdheXMgXHU2QzQxIDEtMTU2LTMKK2Fsd2F5cyBcdTZDNDIgMjQ1LTIzNC0yCithbHdheXMgXHU2QzQzIDEzNS0xNDU2LTMKK2Fsd2F5cyBcdTZDNDQgMTI1LTIzNDYtNQorYWx3YXlzIFx1NkM0NSAxMzQtMjM0NS00CithbHdheXMgXHU2QzQ2IDI0NS0xMjQ1Ni0zCithbHdheXMgXHU2QzQ3IDEyMzUtMTI0Ni01CithbHdheXMgXHU2QzQ4IDE0NS0yNDYtMworYWx3YXlzIFx1NkM0OSAxMjM1LTEyMzYtNQorYWx3YXlzIFx1NkM0QSAxMi0zNDUtNQorYWx3YXlzIFx1NkM0QiAxLTI1LTIKK2Fsd2F5cyBcdTZDNEMgMTItMTI0NTYtNQorYWx3YXlzIFx1NkM0RCAxMjQ1Ni0yCithbHdheXMgXHU2QzRFIDEyMzQ1LTEyMzYtNQorYWx3YXlzIFx1NkM0RiAxNDUtMjQ1Ni01CithbHdheXMgXHU2QzUwIDE1LTE2LTUKK2Fsd2F5cyBcdTZDNTEgMTI0LTI1LTMKK2Fsd2F5cyBcdTZDNTIgMTM0LTEzNDYtMgorYWx3YXlzIFx1NkM1MyAyNDUtMjM0LTIKK2Fsd2F5cyBcdTZDNTQgMjQ1LTE2LTUKK2Fsd2F5cyBcdTZDNTUgMjQtMTIzNi01CithbHdheXMgXHU2QzU2IDEyMzQtMjQ1Ni01CithbHdheXMgXHU2QzU3IDEyMzUtMTIzNi01CithbHdheXMgXHU2QzU4IDI0NS0yMzQ1LTMKK2Fsd2F5cyBcdTZDNTkgMzQtMworYWx3YXlzIFx1NkM1QSAzNC0zCithbHdheXMgXHU2QzVCIDE1LTI1Ni01CithbHdheXMgXHU2QzVDIDE1LTE1Ni01CithbHdheXMgXHU2QzVEIDEyNDUtMzQtNAorYWx3YXlzIFx1NkM1RSAxMy0xMjM0Ni00CithbHdheXMgXHU2QzVGIDEzLTQ2LTMKK2Fsd2F5cyBcdTZDNjAgMTItMTU2LTIKK2Fsd2F5cyBcdTZDNjEgMzQtMworYWx3YXlzIFx1NkM2MiAxMjQtMzQtNAorYWx3YXlzIFx1NkM2MyAxMy0xMjQ2LTQKK2Fsd2F5cyBcdTZDNjQgMTI0LTEzNDYtMworYWx3YXlzIFx1NkM2NSAxLTE1Ni0zCithbHdheXMgXHU2QzY2IDEtMTU2LTQKK2Fsd2F5cyBcdTZDNjcgMjQ1LTIzNDUtMworYWx3YXlzIFx1NkM2OCAxMzQtMTYtNQorYWx3YXlzIFx1NkM2OSAxMy0zNC00CithbHdheXMgXHU2QzZBIDQ1Ni0zCithbHdheXMgXHU2QzZCIDEzLTEzNDU2LTQKK2Fsd2F5cyBcdTZDNkMgMTMtMTM0NTYtNAorYWx3YXlzIFx1NkM2RCAxMjQ1LTEyNDYtNQorYWx3YXlzIFx1NkM2RSAxMy0yNTYtMworYWx3YXlzIFx1NkM2RiAxMjM1LTEyMzQ2LTIKK2Fsd2F5cyBcdTZDNzAgMTI0LTI0NTYtNQorYWx3YXlzIFx1NkM3MSAyNDUtNDUtNAorYWx3YXlzIFx1NkM3MiAxMy0xNi0yCithbHdheXMgXHU2QzczIDEzNS0yMzQ1LTUKK2Fsd2F5cyBcdTZDNzQgMTM1LTIzNDUtNQorYWx3YXlzIFx1NkM3NSAxMy0xMjM2LTUKK2Fsd2F5cyBcdTZDNzYgMTIzNDU2LTUKK2Fsd2F5cyBcdTZDNzcgMS0xMjM0Ni0zCithbHdheXMgXHU2Qzc4IDEyMzQ1LTEzNDYtMworYWx3YXlzIFx1NkM3OSAxNS0yMzUtMworYWx3YXlzIFx1NkM3QSAxMy0yMzYtMgorYWx3YXlzIFx1NkM3QiAxMjM1LTM0LTQKK2Fsd2F5cyBcdTZDN0MgMTM0NS0yMzQtMgorYWx3YXlzIFx1NkM3RCAyNDUtMTYtNQorYWx3YXlzIFx1NkM3RSAxMjM0NS0xMzYtMgorYWx3YXlzIFx1NkM3RiAxNS0xMjU2LTUKK2Fsd2F5cyBcdTZDODAgMTUtMTI1Ni01CithbHdheXMgXHU2QzgxIDI0NS0xNDU2LTUKK2Fsd2F5cyBcdTZDODIgMTYtMgorYWx3YXlzIFx1NkM4MyAyNS01CithbHdheXMgXHU2Qzg0IDI1Ni0yCithbHdheXMgXHU2Qzg1IDQ1LTIKK2Fsd2F5cyBcdTZDODYgMTIzNS0xMzQ2LTUKK2Fsd2F5cyBcdTZDODcgMjM0NS00CithbHdheXMgXHU2Qzg4IDI0LTEzNi00CithbHdheXMgXHU2Qzg5IDEyLTEzNi0yCithbHdheXMgXHU2QzhBIDE0NS0xMjM2LTUKK2Fsd2F5cyBcdTZDOEIgMjM0LTIKK2Fsd2F5cyBcdTZDOEMgMTQ1LTEyMzQ1Ni01CithbHdheXMgXHU2QzhEIDEyMzUtMzQtNQorYWx3YXlzIFx1NkM4RSAxMjM1LTI1LTUKK2Fsd2F5cyBcdTZDOEYgMjQ1LTE2LTMKK2Fsd2F5cyBcdTZDOTAgMTM0LTM0LTUKK2Fsd2F5cyBcdTZDOTEgMTI0NS0xMjM1Ni0yCithbHdheXMgXHU2QzkyIDEzNC0zNTYtMgorYWx3YXlzIFx1NkM5MyAxNDUtMzQ1LTIKK2Fsd2F5cyBcdTZDOTQgMTM0LTIzNDUtNAorYWx3YXlzIFx1NkM5NSAzNC01CithbHdheXMgXHU2Qzk2IDEyLTEyMzQ2LTMKK2Fsd2F5cyBcdTZDOTcgMTI0LTIzNDUtMworYWx3YXlzIFx1NkM5OCAxMzUtMTYtNAorYWx3YXlzIFx1NkM5OSAyNC0zNDUtMworYWx3YXlzIFx1NkM5QSAxLTE1Ni00CithbHdheXMgXHU2QzlCIDEyMzQtMzU2LTUKK2Fsd2F5cyBcdTZDOUMgMTIzNC0xMjM2LTUKK2Fsd2F5cyBcdTZDOUQgMS0xMjQ2LTQKK2Fsd2F5cyBcdTZDOUUgMTI1LTM0NS0zCithbHdheXMgXHU2QzlGIDEzLTEyMzU2LTMKK2Fsd2F5cyBcdTZDQTAgMTQtMjM0LTIKK2Fsd2F5cyBcdTZDQTEgMTM0LTM1Ni0yCithbHdheXMgXHU2Q0EyIDEyNS0yMzQ2LTIKK2Fsd2F5cyBcdTZDQTMgMTIzNDUtMTM1Ni0zCithbHdheXMgXHU2Q0E0IDEyMzU2LTUKK2Fsd2F5cyBcdTZDQTUgMTQtMTYtNQorYWx3YXlzIFx1NkNBNiAxNC0xMjM0NTYtMgorYWx3YXlzIFx1NkNBNyAyNDUtMTM0Ni0zCithbHdheXMgXHU2Q0E4IDEyMzQ1LTEzNTYtMgorYWx3YXlzIFx1NkNBOSAxMy0xMjQ2LTMKK2Fsd2F5cyBcdTZDQUEgMTIzNS0zNC01CithbHdheXMgXHU2Q0FCIDEzNC0xMjYtNQorYWx3YXlzIFx1NkNBQyAxMzQtMzU2LTUKK2Fsd2F5cyBcdTZDQUQgMjQtMzQtNQorYWx3YXlzIFx1NkNBRSAxMy0xMjU2LTQKK2Fsd2F5cyBcdTZDQUYgMTI1LTEyMzYtNAorYWx3YXlzIFx1NkNCMCAxMjQtMjUtMworYWx3YXlzIFx1NkNCMSAxMjQtMjUtMgorYWx3YXlzIFx1NkNCMiAxMjQtMjUtMgorYWx3YXlzIFx1NkNCMyAxMjM1LTIzNDYtMgorYWx3YXlzIFx1NkNCNCAxNC0xNi01CithbHdheXMgXHU2Q0I1IDEzNC0xNi00CithbHdheXMgXHU2Q0I2IDE2LTIKK2Fsd2F5cyBcdTZDQjcgMTIzNDUtMzQ1LTMKK2Fsd2F5cyBcdTZDQjggMTIzNDUtMzU2LTUKK2Fsd2F5cyBcdTZDQjkgMjM0LTIKK2Fsd2F5cyBcdTZDQkEgMTI0LTIzNDUtMgorYWx3YXlzIFx1NkNCQiAxLTE1Ni01CithbHdheXMgXHU2Q0JDIDEtMTQ2LTQKK2Fsd2F5cyBcdTZDQkQgMTMtMzQtMworYWx3YXlzIFx1NkNCRSAxLTEyMzYtMworYWx3YXlzIFx1NkNCRiAyMzQ1LTIKK2Fsd2F5cyBcdTZDQzAgMTUtMTU2LTMKK2Fsd2F5cyBcdTZDQzEgMTIzLTQ1Ni01CithbHdheXMgXHU2Q0MyIDEzLTIzNS00CithbHdheXMgXHU2Q0MzIDEzLTEyNTYtNQorYWx3YXlzIFx1NkNDNCAxNS0zNDYtNQorYWx3YXlzIFx1NkNDNSAyNDUtMjM0LTIKK2Fsd2F5cyBcdTZDQzYgMTYtMworYWx3YXlzIFx1NkNDNyAxMy0yMzQ1Ni0zCithbHdheXMgXHU2Q0M4IDEtMTIzNDYtMworYWx3YXlzIFx1NkNDOSAyNDUtNDUtMgorYWx3YXlzIFx1NkNDQSAxMzUtMTI2LTIKK2Fsd2F5cyBcdTZDQ0IgMTIzNS0xMjQ2LTUKK2Fsd2F5cyBcdTZDQ0MgMTM0LTE2LTUKK2Fsd2F5cyBcdTZDQ0QgMTM1LTEzNi0zCithbHdheXMgXHU2Q0NFIDEtMjUtMgorYWx3YXlzIFx1NkNDRiAxMi0zNC01CithbHdheXMgXHU2Q0QwIDE0LTIzNDYtNQorYWx3YXlzIFx1NkNEMSAyMzQtNAorYWx3YXlzIFx1NkNEMiAxMy0zNC0zCithbHdheXMgXHU2Q0QzIDEyMzUtMTIzNDYtMgorYWx3YXlzIFx1NkNENCAxMy0xMjM2LTMKK2Fsd2F5cyBcdTZDRDUgMTIzNDUtMzQ1LTQKK2Fsd2F5cyBcdTZDRDYgMTM0LTE0Ni00CithbHdheXMgXHU2Q0Q3IDE1LTE1Ni01CithbHdheXMgXHU2Q0Q4IDEyMzUtMzQtMworYWx3YXlzIFx1NkNEOSAxMjM0LTEzNDU2LTIKK2Fsd2F5cyBcdTZDREEgMjQ1LTE1Ni00CithbHdheXMgXHU2Q0RCIDEyMzQ1LTEyMzYtNQorYWx3YXlzIFx1NkNEQyAxLTE1Ni0zCithbHdheXMgXHU2Q0REIDE1LTM0LTUKK2Fsd2F5cyBcdTZDREUgMTItMzQtNAorYWx3YXlzIFx1NkNERiAxMi0xMzU2LTMKK2Fsd2F5cyBcdTZDRTAgMTQtMTM0NTYtMgorYWx3YXlzIFx1NkNFMSAxMjM0LTE0Ni01CithbHdheXMgXHU2Q0UyIDEzNS0xMjYtMworYWx3YXlzIFx1NkNFMyAyNDUtMTYtNQorYWx3YXlzIFx1NkNFNCAxNS0xNTYtNQorYWx3YXlzIFx1NkNFNSAxMzQ1LTE2LTIKK2Fsd2F5cyBcdTZDRTYgMTMtMTI1Ni0yCithbHdheXMgXHU2Q0U3IDIzNi01CithbHdheXMgXHU2Q0U4IDEtMzQtNQorYWx3YXlzIFx1NkNFOSAyNC0xMzU2LTMKK2Fsd2F5cyBcdTZDRUEgMTQtMzU2LTUKK2Fsd2F5cyBcdTZDRUIgMTUtNDUtNQorYWx3YXlzIFx1NkNFQyAxNS0yMzYtNQorYWx3YXlzIFx1NkNFRCAxMjM0NS0zNC0yCithbHdheXMgXHU2Q0VFIDEyMzQtMTIzNi01CithbHdheXMgXHU2Q0VGIDEzNC0xNDU2LTQKK2Fsd2F5cyBcdTZDRjAgMTI0LTI0NTYtNQorYWx3YXlzIFx1NkNGMSA0Ni0zCithbHdheXMgXHU2Q0YyIDEzLTE2LTQKK2Fsd2F5cyBcdTZDRjMgMjM1LTQKK2Fsd2F5cyBcdTZDRjQgMTMtMTI0NTYtNQorYWx3YXlzIFx1NkNGNSAxMzUtMTM1Ni01CithbHdheXMgXHU2Q0Y2IDE1LTIzNi0yCithbHdheXMgXHU2Q0Y3IDE0LTEyMzQ2LTIKK2Fsd2F5cyBcdTZDRjggMTQtMzQtMgorYWx3YXlzIFx1NkNGOSAxNDUtMTIzNi01CithbHdheXMgXHU2Q0ZBIDE0LTI1LTUKK2Fsd2F5cyBcdTZDRkIgMTUtMzQ2LTUKK2Fsd2F5cyBcdTZDRkMgMTIzNC0xMjYtMworYWx3YXlzIFx1NkNGRCAxMjUtMjM0Ni0yCithbHdheXMgXHU2Q0ZFIDEzLTEzNDU2LTMKK2Fsd2F5cyBcdTZDRkYgMTQ1Ni0yCithbHdheXMgXHU2RDAwIDEtMTIzNTYtMworYWx3YXlzIFx1NkQwMSAxMy0zNDYtMgorYWx3YXlzIFx1NkQwMiAxNi01CithbHdheXMgXHU2RDAzIDEyMzUtMTI0Ni0zCithbHdheXMgXHU2RDA0IDEyMzUtMTI0Ni0yCithbHdheXMgXHU2RDA1IDEyNS0xMjQ2LTQKK2Fsd2F5cyBcdTZEMDYgMTItMTM1Ni0yCithbHdheXMgXHU2RDA3IDE0NTYtMworYWx3YXlzIFx1NkQwOCAxMjQ2LTIKK2Fsd2F5cyBcdTZEMDkgMTIzNS0xMjM1Ni01CithbHdheXMgXHU2RDBBIDEzLTIzNDUtNQorYWx3YXlzIFx1NkQwQiA0Ni0yCithbHdheXMgXHU2RDBDIDE0LTM0Ni01CithbHdheXMgXHU2RDBEIDE1LTE1Ni01CithbHdheXMgXHU2RDBFIDEzLTE2LTUKK2Fsd2F5cyBcdTZEMEYgMTU2LTIKK2Fsd2F5cyBcdTZEMTAgMTUtMTM0NTYtMgorYWx3YXlzIFx1NkQxMSAxMjM0NS0zNC0yCithbHdheXMgXHU2RDEyIDE1LTM0NS00CithbHdheXMgXHU2RDEzIDE1LTI1LTQKK2Fsd2F5cyBcdTZEMTQgMS0xNTYtNAorYWx3YXlzIFx1NkQxNSAxNDU2LTMKK2Fsd2F5cyBcdTZEMTYgMzQtMgorYWx3YXlzIFx1NkQxNyAxNS0xNi00CithbHdheXMgXHU2RDE4IDEyMy0xNDYtNAorYWx3YXlzIFx1NkQxOSAxLTM0LTMKK2Fsd2F5cyBcdTZEMUEgMTMtNDYtNQorYWx3YXlzIFx1NkQxQiAxNC0yNS01CithbHdheXMgXHU2RDFDIDE0LTI1LTUKK2Fsd2F5cyBcdTZEMUQgMTIzNi01CithbHdheXMgXHU2RDFFIDE0NS0xMjM0Ni01CithbHdheXMgXHU2RDFGIDE2LTIKK2Fsd2F5cyBcdTZEMjAgMTM0LTEyMzU2LTIKK2Fsd2F5cyBcdTZEMjEgMTQtMzU2LTQKK2Fsd2F5cyBcdTZEMjIgMTYtMworYWx3YXlzIFx1NkQyMyAxMzQtMTYtNAorYWx3YXlzIFx1NkQyNCAyNDUtNDUtMgorYWx3YXlzIFx1NkQyNSAxMy0xNDU2LTMKK2Fsd2F5cyBcdTZEMjYgMTM0LTEyNi01CithbHdheXMgXHU2RDI3IDEyNDYtNAorYWx3YXlzIFx1NkQyOCAxNS0yNDYtMgorYWx3YXlzIFx1NkQyOSAxNS0zNDYtNQorYWx3YXlzIFx1NkQyQSAxMjM1LTEyMzQ2LTIKK2Fsd2F5cyBcdTZEMkIgMTUtMTI1Ni01CithbHdheXMgXHU2RDJDIDI0LTI1LTUKK2Fsd2F5cyBcdTZEMkQgMTIzLTQ1Ni0zCithbHdheXMgXHU2RDJFIDEyNC0xNDYtMgorYWx3YXlzIFx1NkQyRiAyNDUtMzQ2LTUKK2Fsd2F5cyBcdTZEMzAgMTMtMTI1Ni01CithbHdheXMgXHU2RDMxIDE1Ni00CithbHdheXMgXHU2RDMyIDEtMTIzNTYtMworYWx3YXlzIFx1NkQzMyAxMjQ1LTM0LTUKK2Fsd2F5cyBcdTZEMzQgMTIzNC0xMzQ1Ni0yCithbHdheXMgXHU2RDM1IDE1LTI1Ni0yCithbHdheXMgXHU2RDM2IDE1LTIzNS0zCithbHdheXMgXHU2RDM3IDEtMTU2LTUKK2Fsd2F5cyBcdTZEMzggMTMtNDU2LTMKK2Fsd2F5cyBcdTZEMzkgMTIzNS0xMjQ1Ni0yCithbHdheXMgXHU2RDNBIDEzNC0xMzQ1Ni0yCithbHdheXMgXHU2RDNCIDEyMzUtMjUtMgorYWx3YXlzIFx1NkQzQyAzNS0zCithbHdheXMgXHU2RDNEIDI0NS0yMzQ1Ni01CithbHdheXMgXHU2RDNFIDEyMzQtMjQ1Ni01CithbHdheXMgXHU2RDNGIDM0LTMKK2Fsd2F5cyBcdTZENDAgMjQ1LTEyNTYtNAorYWx3YXlzIFx1NkQ0MSAxNC0yMzQtMgorYWx3YXlzIFx1NkQ0MiAxNi01CithbHdheXMgXHU2RDQzIDEzLTIzNDU2LTIKK2Fsd2F5cyBcdTZENDQgMTMtMTM0NTYtNQorYWx3YXlzIFx1NkQ0NSAyNDUtMjM0NS00CithbHdheXMgXHU2RDQ2IDEzLTQ2LTMKK2Fsd2F5cyBcdTZENDcgMTMtMjQ2LTMKK2Fsd2F5cyBcdTZENDggMS0xMzU2LTMKK2Fsd2F5cyBcdTZENDkgMjQtMTU2LTMKK2Fsd2F5cyBcdTZENEEgMS0yNS0yCithbHdheXMgXHU2RDRCIDI0NS0yMzQ2LTUKK2Fsd2F5cyBcdTZENEMgMTIzNDUtMzQ1LTIKK2Fsd2F5cyBcdTZENEQgMTIzLTIzNTYtNQorYWx3YXlzIFx1NkQ0RSAxMy0xNi01CithbHdheXMgXHU2RDRGIDE0LTIzNC0yCithbHdheXMgXHU2RDUwIDEyLTEyMzYtNAorYWx3YXlzIFx1NkQ1MSAxMjM1LTEyMzQ1Ni0yCithbHdheXMgXHU2RDUyIDEyMzUtMzQtNAorYWx3YXlzIFx1NkQ1MyAxMzQ1LTEyMzQ2LTIKK2Fsd2F5cyBcdTZENTQgMTUtMjU2LTIKK2Fsd2F5cyBcdTZENTUgMTMtMTQ1Ni01CithbHdheXMgXHU2RDU2IDE0LTM0Ni01CithbHdheXMgXHU2RDU3IDI0NS0yMzQtMgorYWx3YXlzIFx1NkQ1OCAxMjQ2LTQKK2Fsd2F5cyBcdTZENTkgMS0yMzQ2LTUKK2Fsd2F5cyBcdTZENUEgMTMtMjU2LTUKK2Fsd2F5cyBcdTZENUIgMTIzNS0xMjM2LTUKK2Fsd2F5cyBcdTZENUMgMTM1LTEzNDYtMworYWx3YXlzIFx1NkQ1RCAxMzQtMTM0Ni0yCithbHdheXMgXHU2RDVFIDEtMjUtMgorYWx3YXlzIFx1NkQ1RiAyMzQtMgorYWx3YXlzIFx1NkQ2MCAxNS0xNi0zCithbHdheXMgXHU2RDYxIDEzNS0xMjYtMgorYWx3YXlzIFx1NkQ2MiAxNDUtMTIzNTYtNQorYWx3YXlzIFx1NkQ2MyAxMjM1LTEyNDU2LTQKK2Fsd2F5cyBcdTZENjQgMTIzNS0xMjM0Ni0yCithbHdheXMgXHU2RDY1IDE2LTUKK2Fsd2F5cyBcdTZENjYgMTIzNC0zNC00CithbHdheXMgXHU2RDY3IDEzNDU2LTQKK2Fsd2F5cyBcdTZENjggMTQtMTIzNi00CithbHdheXMgXHU2RDY5IDEyMzUtMTQ2LTUKK2Fsd2F5cyBcdTZENkEgMTQtMTM0Ni01CithbHdheXMgXHU2RDZCIDEyMzUtMTIzNi00CithbHdheXMgXHU2RDZDIDE0LTE2LTQKK2Fsd2F5cyBcdTZENkQgMTMtMTM1Ni0zCithbHdheXMgXHU2RDZFIDEyMzQ1LTM0LTIKK2Fsd2F5cyBcdTZENkYgMzQtMgorYWx3YXlzIFx1NkQ3MCAxNC0yMzQ1LTUKK2Fsd2F5cyBcdTZENzEgMTItMTIzNDU2LTIKK2Fsd2F5cyBcdTZENzIgMTIzNDUtMTM1Ni0yCithbHdheXMgXHU2RDczIDE2LTUKK2Fsd2F5cyBcdTZENzQgMTI1Ni01CithbHdheXMgXHU2RDc1IDEyNC0xMjM0Ni0yCithbHdheXMgXHU2RDc2IDE0LTE0Ni0yCithbHdheXMgXHU2RDc3IDEyMzUtMjQ1Ni00CithbHdheXMgXHU2RDc4IDEzLTE0NTYtNQorYWx3YXlzIFx1NkQ3OSAxMy0yMzQ1Ni0yCithbHdheXMgXHU2RDdBIDEyLTEyMzQ2LTMKK2Fsd2F5cyBcdTZEN0IgMTIzNDYtNAorYWx3YXlzIFx1NkQ3QyAxMzQtMzU2LTQKK2Fsd2F5cyBcdTZEN0QgMTUtMTI0Ni0zCithbHdheXMgXHU2RDdFIDEyLTEzNTYtMworYWx3YXlzIFx1NkQ3RiAxMjM0LTM1Ni01CithbHdheXMgXHU2RDgwIDE1LTIzNDUtNQorYWx3YXlzIFx1NkQ4MSAyNC0xMzYtNQorYWx3YXlzIFx1NkQ4MiAxMjQtMzQtMgorYWx3YXlzIFx1NkQ4MyAxMjMtMTIzNDU2LTUKK2Fsd2F5cyBcdTZEODQgMTIzNC0xNDU2LTMKK2Fsd2F5cyBcdTZEODUgMTM0NS0zNDYtNQorYWx3YXlzIFx1NkQ4NiAxMjM1LTEyMzYtNQorYWx3YXlzIFx1NkQ4NyAxMy0xMzQ1Ni0zCithbHdheXMgXHU2RDg4IDE1LTI0Ni0zCithbHdheXMgXHU2RDg5IDI0LTIzNDYtNQorYWx3YXlzIFx1NkQ4QSAxMzQ1LTIzNDUtNAorYWx3YXlzIFx1NkQ4QiAxMjQtMzQtMworYWx3YXlzIFx1NkQ4QyAyMzUtNAorYWx3YXlzIFx1NkQ4RCAxNS0yNDYtNQorYWx3YXlzIFx1NkQ4RSAxNS0yMzQ1LTIKK2Fsd2F5cyBcdTZEOEYgMTI0LTEzNDU2LTQKK2Fsd2F5cyBcdTZEOTAgMjM0Ni0yCithbHdheXMgXHU2RDkxIDE1LTM0LTUKK2Fsd2F5cyBcdTZEOTIgMTI0LTEyMzQ1Ni0zCithbHdheXMgXHU2RDkzIDEzLTQ1LTMKK2Fsd2F5cyBcdTZEOTQgMjQ1LTEzNi0yCithbHdheXMgXHU2RDk1IDEyNC0xNi01CithbHdheXMgXHU2RDk2IDE0LTE2LTUKK2Fsd2F5cyBcdTZEOTcgMjQtMTI0Ni01CithbHdheXMgXHU2RDk4IDE1LTE1Ni01CithbHdheXMgXHU2RDk5IDE0LTM1Ni01CithbHdheXMgXHU2RDlBIDI0LTEyNDYtNQorYWx3YXlzIFx1NkQ5QiAxMjQtMTQ2LTMKK2Fsd2F5cyBcdTZEOUMgMTQ1LTM0LTIKK2Fsd2F5cyBcdTZEOUQgMTQtMTQ2LTUKK2Fsd2F5cyBcdTZEOUUgMTQtMjQ1Ni0yCithbHdheXMgXHU2RDlGIDE0LTIzNDUtMgorYWx3YXlzIFx1NkRBMCAxMjQ2LTIKK2Fsd2F5cyBcdTZEQTEgMjUtMworYWx3YXlzIFx1NkRBMiAyNTYtMgorYWx3YXlzIFx1NkRBMyAxMjM1LTEyNDU2LTUKK2Fsd2F5cyBcdTZEQTQgMTQ1LTE2LTIKK2Fsd2F5cyBcdTZEQTUgMTM1LTEzNTYtMworYWx3YXlzIFx1NkRBNiAxMjQ1LTEyMzQ1Ni01CithbHdheXMgXHU2REE3IDEzLTIzNDUtNQorYWx3YXlzIFx1NkRBOCAxLTEzNDYtNAorYWx3YXlzIFx1NkRBOSAxNS0yMzQ2LTUKK2Fsd2F5cyBcdTZEQUEgMTIzNDUtMzQtMgorYWx3YXlzIFx1NkRBQiAxMy0xMjQ1Ni01CithbHdheXMgXHU2REFDIDE1LTEzNDU2LTUKK2Fsd2F5cyBcdTZEQUQgMjQtMTIzNTYtNQorYWx3YXlzIFx1NkRBRSAyNC0xMjQ1Ni01CithbHdheXMgXHU2REFGIDIzNDU2LTIKK2Fsd2F5cyBcdTZEQjAgMTItMjUtNQorYWx3YXlzIFx1NkRCMSAxLTEzNDYtNQorYWx3YXlzIFx1NkRCMiAxNi01CithbHdheXMgXHU2REIzIDEyMy0xMjM0Ni0zCithbHdheXMgXHU2REI0IDI1LTUKK2Fsd2F5cyBcdTZEQjUgMTIzNS0xMjM2LTIKK2Fsd2F5cyBcdTZEQjYgMTI0LTI1LTMKK2Fsd2F5cyBcdTZEQjcgMTQ1LTEyMzQ2LTMKK2Fsd2F5cyBcdTZEQjggMTIzNS0yMzQ2LTIKK2Fsd2F5cyBcdTZEQjkgMjUtMworYWx3YXlzIFx1NkRCQSAxMy0xMjU2LTMKK2Fsd2F5cyBcdTZEQkIgMjQtMjM0Ni01CithbHdheXMgXHU2REJDIDE0LTQ2LTIKK2Fsd2F5cyBcdTZEQkQgMTIzNS0xMjM0NTYtMworYWx3YXlzIFx1NkRCRSAxMjQtMzQ1LTUKK2Fsd2F5cyBcdTZEQkYgMS0yNS0zCithbHdheXMgXHU2REMwIDE0NS0yMzQ1LTUKK2Fsd2F5cyBcdTZEQzEgMjQ1LTM0Ni01CithbHdheXMgXHU2REMyIDE0NS0yMzQ2LTIKK2Fsd2F5cyBcdTZEQzMgMTMtNDUtNQorYWx3YXlzIFx1NkRDNCAxMjUtMTU2LTMKK2Fsd2F5cyBcdTZEQzUgMTUtMTYtMworYWx3YXlzIFx1NkRDNiAyNDYtMgorYWx3YXlzIFx1NkRDNyAyNDUtMTYtMgorYWx3YXlzIFx1NkRDOCAxMy0zNC00CithbHdheXMgXHU2REM5IDEzLTI1LTQKK2Fsd2F5cyBcdTZEQ0EgMTIzNS0xMjM2LTUKK2Fsd2F5cyBcdTZEQ0IgMTQtMTQ1Ni0yCithbHdheXMgXHU2RENDIDEyNC0xMzQ2LTQKK2Fsd2F5cyBcdTZEQ0QgMS0xMjM1Ni0zCithbHdheXMgXHU2RENFIDEyMzQtMTM1Ni00CithbHdheXMgXHU2RENGIDEyMzUtMTQ2LTUKK2Fsd2F5cyBcdTZERDAgMTItMTM0Ni0zCithbHdheXMgXHU2REQxIDI0LTM0LTIKK2Fsd2F5cyBcdTZERDIgMjQ1LTE2LTMKK2Fsd2F5cyBcdTZERDMgMTIzNDUtMTM0Ni0zCithbHdheXMgXHU2REQ0IDEyLTE1Ni01CithbHdheXMgXHU2REQ1IDE0LTM0LTUKK2Fsd2F5cyBcdTZERDYgMTM0NS0xNDYtNQorYWx3YXlzIFx1NkRENyAxMy0xMjU2LTIKK2Fsd2F5cyBcdTZERDggMTI0LTE0Ni0yCithbHdheXMgXHU2REQ5IDI0NS0xMjM0Ni0yCithbHdheXMgXHU2RERBIDE0LTM1Ni01CithbHdheXMgXHU2RERCIDEtMjM0Ni01CithbHdheXMgXHU2RERDIDEyMzQtMTM1Ni0yCithbHdheXMgXHU2REREIDEyMzQ1LTM1Ni0yCithbHdheXMgXHU2RERFIDE1LTEyMzQ2LTMKK2Fsd2F5cyBcdTZEREYgMTI0LTIzNDUtNAorYWx3YXlzIFx1NkRFMCAxMjM0LTE2LTUKK2Fsd2F5cyBcdTZERTEgMTQ1LTEyMzYtNQorYWx3YXlzIFx1NkRFMiAxMjU2LTUKK2Fsd2F5cyBcdTZERTMgMTM0NS0xNi0yCithbHdheXMgXHU2REU0IDEyNTYtMworYWx3YXlzIFx1NkRFNSAxNC0zNC01CithbHdheXMgXHU2REU2IDEzLTEyMzYtNQorYWx3YXlzIFx1NkRFNyAxMzQtMTYtNQorYWx3YXlzIFx1NkRFOCAxMy0xMzQ1Ni01CithbHdheXMgXHU2REU5IDE0LTEzNDU2LTIKK2Fsd2F5cyBcdTZERUEgMTQtMTIzNDU2LTIKK2Fsd2F5cyBcdTZERUIgMTQ1Ni0yCithbHdheXMgXHU2REVDIDI0NS0xMjQ2LTUKK2Fsd2F5cyBcdTZERUQgMjQ1LTEyNTYtMgorYWx3YXlzIFx1NkRFRSAxMjM1LTIzNTYtMgorYWx3YXlzIFx1NkRFRiAxMjU2LTUKK2Fsd2F5cyBcdTZERjAgMTM0NS0yMzQ1LTQKK2Fsd2F5cyBcdTZERjEgMjQtMTM2LTMKK2Fsd2F5cyBcdTZERjIgMTIzNC0yNDYtMgorYWx3YXlzIFx1NkRGMyAxMi0xMjM0NTYtMgorYWx3YXlzIFx1NkRGNCAzNS01CithbHdheXMgXHU2REY1IDQ1LTMKK2Fsd2F5cyBcdTZERjYgMTQtMjQ1Ni0yCithbHdheXMgXHU2REY3IDEyMzUtMTIzNDU2LTUKK2Fsd2F5cyBcdTZERjggMjQ1LTEzNDU2LTMKK2Fsd2F5cyBcdTZERjkgMjM0NS0zCithbHdheXMgXHU2REZBIDI0NS0yMzQ1LTQKK2Fsd2F5cyBcdTZERkIgMTI0LTIzNDUtMworYWx3YXlzIFx1NkRGQyAxMzQtMjQ2LTQKK2Fsd2F5cyBcdTZERkQgMS0xNTYtNAorYWx3YXlzIFx1NkRGRSAxNDU2LTQKK2Fsd2F5cyBcdTZERkYgMTM0LTE2LTUKK2Fsd2F5cyBcdTZFMDAgMTM1LTEzNi0zCithbHdheXMgXHU2RTAxIDQ1LTMKK2Fsd2F5cyBcdTZFMDIgMTIzNDU2LTUKK2Fsd2F5cyBcdTZFMDMgMTI0NS0yMzQ2LTUKK2Fsd2F5cyBcdTZFMDQgMTIzNDUtMzU2LTMKK2Fsd2F5cyBcdTZFMDUgMjQ1LTEzNDU2LTMKK2Fsd2F5cyBcdTZFMDYgNDUtMworYWx3YXlzIFx1NkUwNyAxMjMtMjM0Ni00CithbHdheXMgXHU2RTA4IDEzLTE2LTUKK2Fsd2F5cyBcdTZFMDkgMjQtMjM0Ni01CithbHdheXMgXHU2RTBBIDQ1LTMKK2Fsd2F5cyBcdTZFMEIgMTUtMjM0Ni01CithbHdheXMgXHU2RTBDIDE0LTM0LTUKK2Fsd2F5cyBcdTZFMEQgMTI1LTE1Ni01CithbHdheXMgXHU2RTBFIDE0NS0zNC0yCithbHdheXMgXHU2RTBGIDI0NS0xNi0yCithbHdheXMgXHU2RTEwIDEzLTIzNDUtNQorYWx3YXlzIFx1NkUxMSAxMzQtMjM0NS00CithbHdheXMgXHU2RTEyIDEyMzQtMTYtNQorYWx3YXlzIFx1NkUxMyAxNS0xNi0zCithbHdheXMgXHU2RTE0IDEyNTYtMgorYWx3YXlzIFx1NkUxNSA0NS0zCithbHdheXMgXHU2RTE2IDI0LTEzNi00CithbHdheXMgXHU2RTE3IDI0LTEzNi01CithbHdheXMgXHU2RTE4IDEyNDUtMTIzNTYtMgorYWx3YXlzIFx1NkUxOSAxMjM1LTEyNDU2LTUKK2Fsd2F5cyBcdTZFMUEgMS0zNC00CithbHdheXMgXHU2RTFCIDEzLTIzNDUtNAorYWx3YXlzIFx1NkUxQyAxMzQ1LTEyNDU2LTQKK2Fsd2F5cyBcdTZFMUQgMTI1Ni0yCithbHdheXMgXHU2RTFFIDI0NS0yMzQtMgorYWx3YXlzIFx1NkUxRiAxMjQtMTM0NTYtMgorYWx3YXlzIFx1NkUyMCAyNDUtMTI1Ni0yCithbHdheXMgXHU2RTIxIDE0NS0zNC01CithbHdheXMgXHU2RTIyIDEyMzQ1LTEzNTYtMgorYWx3YXlzIFx1NkUyMyAxLTM0NS0zCithbHdheXMgXHU2RTI0IDEzNS0xMjYtMgorYWx3YXlzIFx1NkUyNSAyNS01CithbHdheXMgXHU2RTI2IDI1LTMKK2Fsd2F5cyBcdTZFMjcgMTQ1LTE2LTUKK2Fsd2F5cyBcdTZFMjggMTI0Ni0zCithbHdheXMgXHU2RTI5IDEyMzQ1Ni0zCithbHdheXMgXHU2RTJBIDEyNDUtMzQtMgorYWx3YXlzIFx1NkUyQiAxNS0zNDYtNQorYWx3YXlzIFx1NkUyQyAyNDUtMjM0Ni01CithbHdheXMgXHU2RTJEIDEyNDYtNQorYWx3YXlzIFx1NkUyRSAxMy0yMzQ2LTMKK2Fsd2F5cyBcdTZFMkYgMTMtMTM0Ni00CithbHdheXMgXHU2RTMwIDIzNDUtNAorYWx3YXlzIFx1NkUzMSAxMjM1LTEyMzQ2LTIKK2Fsd2F5cyBcdTZFMzIgMTUtNDUtNQorYWx3YXlzIFx1NkUzMyAxMzQtMTYtNAorYWx3YXlzIFx1NkUzNCAxMjMtMjM0Ni00CithbHdheXMgXHU2RTM1IDEzNC0xNDYtMgorYWx3YXlzIFx1NkUzNiAxMzQ1Ni0zCithbHdheXMgXHU2RTM3IDIzNDUtNAorYWx3YXlzIFx1NkUzOCAyMzQtMgorYWx3YXlzIFx1NkUzOSAxMjM1LTEyMzQ2LTMKK2Fsd2F5cyBcdTZFM0EgMTM0LTI0Ni00CithbHdheXMgXHU2RTNCIDE1LTEzNDU2LTQKK2Fsd2F5cyBcdTZFM0MgMTM0LTM1Ni00CithbHdheXMgXHU2RTNEIDEyNS0yNDU2LTMKK2Fsd2F5cyBcdTZFM0UgMTIzNS0xMjM0NTYtMgorYWx3YXlzIFx1NkUzRiAxMzQ1LTI0NTYtNQorYWx3YXlzIFx1NkU0MCAxMjMtMTI0Ni0yCithbHdheXMgXHU2RTQxIDEyLTE1Ni01CithbHdheXMgXHU2RTQyIDIzNDYtNQorYWx3YXlzIFx1NkU0MyAxMjM0LTI0NTYtNQorYWx3YXlzIFx1NkU0NCAxMzQtMzU2LTIKK2Fsd2F5cyBcdTZFNDUgMTQtMjM0NS01CithbHdheXMgXHU2RTQ2IDI0NS0xNi01CithbHdheXMgXHU2RTQ3IDI0NS0xNi01CithbHdheXMgXHU2RTQ4IDEzNC0zNTYtMgorYWx3YXlzIFx1NkU0OSAxMjQtMjM0NS0yCithbHdheXMgXHU2RTRBIDI0NS0xMjM1Ni01CithbHdheXMgXHU2RTRCIDEyNDYtMgorYWx3YXlzIFx1NkU0QyAyNDUtMTIzNi0zCithbHdheXMgXHU2RTREIDEyNC0xMjQ1Ni0zCithbHdheXMgXHU2RTRFIDEzNC0yMzQ1LTQKK2Fsd2F5cyBcdTZFNEYgMTIzNS0xMjQ2LTUKK2Fsd2F5cyBcdTZFNTAgMTM0LTEyNi01CithbHdheXMgXHU2RTUxIDE1LTEyNTYtNAorYWx3YXlzIFx1NkU1MiAxMy0xNi0yCithbHdheXMgXHU2RTUzIDEyMzQtMTM2LTIKK2Fsd2F5cyBcdTZFNTQgMTMtMjM0NS0zCithbHdheXMgXHU2RTU1IDEzLTIzNDUtNAorYWx3YXlzIFx1NkU1NiAxMjM1LTM0LTIKK2Fsd2F5cyBcdTZFNTcgMTIzNDUtMTM1Ni01CithbHdheXMgXHU2RTU4IDE1LTQ2LTMKK2Fsd2F5cyBcdTZFNTkgMTYtNQorYWx3YXlzIFx1NkU1QSAxNDU2LTUKK2Fsd2F5cyBcdTZFNUIgMS0xMjM2LTUKK2Fsd2F5cyBcdTZFNUMgMjQtMTU2LTIKK2Fsd2F5cyBcdTZFNUQgMTMtMzQ2LTMKK2Fsd2F5cyBcdTZFNUUgMS0xMzYtMworYWx3YXlzIFx1NkU1RiAxMjM1LTQ1Ni0yCithbHdheXMgXHU2RTYwIDEyNC0xMjM2LTUKK2Fsd2F5cyBcdTZFNjEgMTI1Ni0yCithbHdheXMgXHU2RTYyIDEzNS0xNi01CithbHdheXMgXHU2RTYzIDEzNC0xNDU2LTQKK2Fsd2F5cyBcdTZFNjQgMjQtMTU2LTMKK2Fsd2F5cyBcdTZFNjUgMTI0LTM0LTIKK2Fsd2F5cyBcdTZFNjYgMjQtMTM1Ni0zCithbHdheXMgXHU2RTY3IDIzNS00CithbHdheXMgXHU2RTY4IDI0NS0xMjU2LTUKK2Fsd2F5cyBcdTZFNjkgMTQ1LTEyMzQ2LTUKK2Fsd2F5cyBcdTZFNkEgMTI0LTEyNDU2LTUKK2Fsd2F5cyBcdTZFNkIgMjQ1LTIzNC0zCithbHdheXMgXHU2RTZDIDEzLTI0Ni00CithbHdheXMgXHU2RTZEIDI0NS0yMzQtMgorYWx3YXlzIFx1NkU2RSAyMzQ1LTMKK2Fsd2F5cyBcdTZFNkYgMTI0LTEzNDYtMworYWx3YXlzIFx1NkU3MCAxNC0xMjM0Ni0yCithbHdheXMgXHU2RTcxIDEyMzUtMjUtNQorYWx3YXlzIFx1NkU3MiA0NS0yCithbHdheXMgXHU2RTczIDEzNDUtMTIzNi00CithbHdheXMgXHU2RTc0IDEzNS0xMjM2LTUKK2Fsd2F5cyBcdTZFNzUgMjM0LTQKK2Fsd2F5cyBcdTZFNzYgMjQ1LTQ1LTIKK2Fsd2F5cyBcdTZFNzcgMTItMTI0Ni0yCithbHdheXMgXHU2RTc4IDE0LTQ2LTUKK2Fsd2F5cyBcdTZFNzkgMTItMTIzNi0yCithbHdheXMgXHU2RTdBIDIzNDUtMgorYWx3YXlzIFx1NkU3QiAxMi0xMjM0NTYtMgorYWx3YXlzIFx1NkU3QyAxMzQ1LTM0Ni01CithbHdheXMgXHU2RTdEIDEyNS0xNTYtMworYWx3YXlzIFx1NkU3RSAxMjQ1Ni0zCithbHdheXMgXHU2RTdGIDI0LTE1Ni0zCithbHdheXMgXHU2RTgwIDEzNC0xMjM2LTQKK2Fsd2F5cyBcdTZFODEgMTM0NTYtMgorYWx3YXlzIFx1NkU4MiAxNC0zNDUtNQorYWx3YXlzIFx1NkU4MyAxMjMtMTI0Ni01CithbHdheXMgXHU2RTg0IDEyMzQ1LTEzNTYtMworYWx3YXlzIFx1NkU4NSAxMy0yMzQ1LTUKK2Fsd2F5cyBcdTZFODYgMTUtMTI1Ni01CithbHdheXMgXHU2RTg3IDE0LTEyMzU2LTIKK2Fsd2F5cyBcdTZFODggMTMtMTI0Ni0zCithbHdheXMgXHU2RTg5IDEzLTI0NTYtNQorYWx3YXlzIFx1NkU4QSAxNS0yMzQ1Ni0yCithbHdheXMgXHU2RThCIDEzNDU2LTIKK2Fsd2F5cyBcdTZFOEMgMTIzNC0xMjYtMworYWx3YXlzIFx1NkU4RCAxMy0xNDU2LTUKK2Fsd2F5cyBcdTZFOEUgMTMtMTI0Ni01CithbHdheXMgXHU2RThGIDEyNC0xMzQ2LTIKK2Fsd2F5cyBcdTZFOTAgNDUtMgorYWx3YXlzIFx1NkU5MSAxNS0yNS00CithbHdheXMgXHU2RTkyIDQ1LTIKK2Fsd2F5cyBcdTZFOTMgMTQtMjM0NS0yCithbHdheXMgXHU2RTk0IDI0Ni00CithbHdheXMgXHU2RTk1IDEzNC0xMzU2LTUKK2Fsd2F5cyBcdTZFOTYgMS0xMjM0NTYtNAorYWx3YXlzIFx1NkU5NyAyNC0xMzU2LTIKK2Fsd2F5cyBcdTZFOTggMTIzLTIzNDYtNQorYWx3YXlzIFx1NkU5OSAxMjQtMjQ1Ni01CithbHdheXMgXHU2RTlBIDE0NS0zNDUtMgorYWx3YXlzIFx1NkU5QiAzNS0zCithbHdheXMgXHU2RTlDIDE0LTIzNC0zCithbHdheXMgXHU2RTlEIDEzLTEyMzU2LTMKK2Fsd2F5cyBcdTZFOUUgMTUtMTQ2LTMKK2Fsd2F5cyBcdTZFOUYgMTM0LTEzNDU2LTIKK2Fsd2F5cyBcdTZFQTAgMS0zNDUtNQorYWx3YXlzIFx1NkVBMSAyNC0xNTYtMgorYWx3YXlzIFx1NkVBMiAxNi01CithbHdheXMgXHU2RUEzIDE0LTEyMzQ1Ni0yCithbHdheXMgXHU2RUE0IDEzNC0zNDUtNAorYWx3YXlzIFx1NkVBNSAxMjM0LTM0LTQKK2Fsd2F5cyBcdTZFQTYgMTI0Ni0zCithbHdheXMgXHU2RUE3IDE0LTE2LTUKK2Fsd2F5cyBcdTZFQTggMjQ1LTI0NTYtMgorYWx3YXlzIFx1NkVBOSAzNC01CithbHdheXMgXHU2RUFBIDE1LTE2LTMKK2Fsd2F5cyBcdTZFQUIgMTIzNDU2LTMKK2Fsd2F5cyBcdTZFQUMgMjQ1LTQ2LTMKK2Fsd2F5cyBcdTZFQUQgMTI1LTIzNDYtMgorYWx3YXlzIFx1NkVBRSAyNC0xNTYtMworYWx3YXlzIFx1NkVBRiAxNS0zNC01CithbHdheXMgXHU2RUIwIDE2LTMKK2Fsd2F5cyBcdTZFQjEgMjQ1LTE0NTYtMgorYWx3YXlzIFx1NkVCMiAxNS0xMjM1Ni0zCithbHdheXMgXHU2RUIzIDI1Ni0yCithbHdheXMgXHU2RUI0IDE1LTIzNC01CithbHdheXMgXHU2RUI1IDE0NTYtMworYWx3YXlzIFx1NkVCNiAxMjQ1LTEyMzQ2LTIKK2Fsd2F5cyBcdTZFQjcgMTIzNS0xMjM0NTYtNQorYWx3YXlzIFx1NkVCOCAxNS0zNC01CithbHdheXMgXHU2RUI5IDE1LTM0LTUKK2Fsd2F5cyBcdTZFQkEgMTM0NS0xNi01CithbHdheXMgXHU2RUJCIDEyNC0zNDUtMworYWx3YXlzIFx1NkVCQyAyNC0xNTYtMworYWx3YXlzIFx1NkVCRCAxMjQ1LTM0LTUKK2Fsd2F5cyBcdTZFQkUgMTI0Ni0zCithbHdheXMgXHU2RUJGIDEyMzQtMTIzNi01CithbHdheXMgXHU2RUMwIDEyLTM0LTUKK2Fsd2F5cyBcdTZFQzEgMTItMzQtMgorYWx3YXlzIFx1NkVDMiAxMjM0LTEzNDYtMworYWx3YXlzIFx1NkVDMyAxMjM0Ni00CithbHdheXMgXHU2RUM0IDI0NS0xMzQ2LTMKK2Fsd2F5cyBcdTZFQzUgMTM0LTM0Ni01CithbHdheXMgXHU2RUM2IDEyMzUtMjM0Ni0yCithbHdheXMgXHU2RUM3IDE0NS0yMzQ1LTMKK2Fsd2F5cyBcdTZFQzggMTIzNS0xNDYtNQorYWx3YXlzIFx1NkVDOSAxMjM1LTQ1Ni00CithbHdheXMgXHU2RUNBIDE1LTE2LTUKK2Fsd2F5cyBcdTZFQ0IgMTI1LTE1Ni0zCithbHdheXMgXHU2RUNDIDE0NS0xNi0yCithbHdheXMgXHU2RUNEIDEtMTU2LTQKK2Fsd2F5cyBcdTZFQ0UgMTM0NTYtMgorYWx3YXlzIFx1NkVDRiAxMjM0NS0zNC00CithbHdheXMgXHU2RUQwIDEzLTM0Ni0yCithbHdheXMgXHU2RUQxIDEyMzUtMzUtMgorYWx3YXlzIFx1NkVEMiAxMy0yMzQ2LTMKK2Fsd2F5cyBcdTZFRDMgMTI1LTE1Ni00CithbHdheXMgXHU2RUQ0IDEyNC0xNDYtMworYWx3YXlzIFx1NkVENSAxMjQtMTM1Ni0yCithbHdheXMgXHU2RUQ2IDE1LTEyNDYtMworYWx3YXlzIFx1NkVENyAxMzUtMTYtNQorYWx3YXlzIFx1NkVEOCAxMy0yNDYtNQorYWx3YXlzIFx1NkVEOSAxMjM1LTEyNDYtNQorYWx3YXlzIFx1NkVEQSAxMy0xMjM0NTYtNAorYWx3YXlzIFx1NkVEQiAxNDU2LTIKK2Fsd2F5cyBcdTZFREMgMTMtMTQ2LTMKK2Fsd2F5cyBcdTZFREQgMTQtMTIzNDYtMgorYWx3YXlzIFx1NkVERSAxLTE1Ni01CithbHdheXMgXHU2RURGIDIzNDUtNQorYWx3YXlzIFx1NkVFMCAyNC0yMzQ2LTUKK2Fsd2F5cyBcdTZFRTEgMTM0LTEyMzYtNAorYWx3YXlzIFx1NkVFMiAxMzQ1Ni0yCithbHdheXMgXHU2RUUzIDEyLTEyMzQ1Ni0yCithbHdheXMgXHU2RUU0IDE0LTEyNTYtNQorYWx3YXlzIFx1NkVFNSAxNC0xMjM2LTUKK2Fsd2F5cyBcdTZFRTYgMTQtMTI0NTYtMgorYWx3YXlzIFx1NkVFNyAxNS0yNDYtNQorYWx3YXlzIFx1NkVFOCAxMzUtMTQ1Ni0zCithbHdheXMgXHU2RUU5IDEyNC0xMjM2LTMKK2Fsd2F5cyBcdTZFRUEgMTI1Ni01CithbHdheXMgXHU2RUVCIDE1LTIzNC01CithbHdheXMgXHU2RUVDIDEyMzUtMzQtNQorYWx3YXlzIFx1NkVFRCAxMzUtMTYtNQorYWx3YXlzIFx1NkVFRSAxMzUtMjQ2LTMKK2Fsd2F5cyBcdTZFRUYgMS0xNTYtNQorYWx3YXlzIFx1NkVGMCAxMy00Ni00CithbHdheXMgXHU2RUYxIDEyMy0xMjM1Ni01CithbHdheXMgXHU2RUYyIDI0LTEzNi01CithbHdheXMgXHU2RUYzIDI0LTEzNDYtMworYWx3YXlzIFx1NkVGNCAxNDUtMTYtMworYWx3YXlzIFx1NkVGNSAxMzQtMTYtNQorYWx3YXlzIFx1NkVGNiAxNDYtMgorYWx3YXlzIFx1NkVGNyAxNC0zNC00CithbHdheXMgXHU2RUY4IDEyMzUtMzQtNAorYWx3YXlzIFx1NkVGOSAxMjM1LTM0LTMKK2Fsd2F5cyBcdTZFRkEgMjM0LTIKK2Fsd2F5cyBcdTZFRkIgMTItMTIzNi00CithbHdheXMgXHU2RUZDIDEyMzQ1LTEyMzYtNQorYWx3YXlzIFx1NkVGRCAyMzUtMgorYWx3YXlzIFx1NkVGRSAxMy0xMjM0NTYtNAorYWx3YXlzIFx1NkVGRiAxMzQtMTIzNi00CithbHdheXMgXHU2RjAwIDI0NS0xMzQ1Ni01CithbHdheXMgXHU2RjAxIDEyNTYtMgorYWx3YXlzIFx1NkYwMiAxMjM0LTI0Ni0zCithbHdheXMgXHU2RjAzIDEzLTE2LTIKK2Fsd2F5cyBcdTZGMDQgMjM0NTYtMgorYWx3YXlzIFx1NkYwNSAxMy0yNDYtNAorYWx3YXlzIFx1NkYwNiAyNDUtMTYtMworYWx3YXlzIFx1NkYwNyAxNS0xNi00CithbHdheXMgXHU2RjA4IDEzLTE2LTUKK2Fsd2F5cyBcdTZGMDkgMTQtMzQtNQorYWx3YXlzIFx1NkYwQSAxNC0xMjM1Ni0yCithbHdheXMgXHU2RjBCIDE0LTEyMzQ2LTIKK2Fsd2F5cyBcdTZGMEMgMTMtMTQ1Ni00CithbHdheXMgXHU2RjBEIDEzLTI1LTIKK2Fsd2F5cyBcdTZGMEUgMjQ1LTEyMzQ2LTIKK2Fsd2F5cyBcdTZGMEYgMTQtMTIzNTYtNQorYWx3YXlzIFx1NkYxMCAxLTE1Ni0yCithbHdheXMgXHU2RjExIDEzLTI0NTYtNQorYWx3YXlzIFx1NkYxMiAyNDUtNDYtMgorYWx3YXlzIFx1NkYxMyAxNC0xNi0yCithbHdheXMgXHU2RjE0IDIzNDUtNAorYWx3YXlzIFx1NkYxNSAyNDUtMTQ2LTIKK2Fsd2F5cyBcdTZGMTYgMTMtMjQ2LTUKK2Fsd2F5cyBcdTZGMTcgMjQ1LTEyMzQ2LTMKK2Fsd2F5cyBcdTZGMTggMTItMTIzNDU2LTIKK2Fsd2F5cyBcdTZGMTkgMTI0LTEyNDU2LTIKK2Fsd2F5cyBcdTZGMUEgMTIzNTYtNQorYWx3YXlzIFx1NkYxQiAxMjQtMTM1Ni0yCithbHdheXMgXHU2RjFDIDM0Ni00CithbHdheXMgXHU2RjFEIDE1LTE2LTIKK2Fsd2F5cyBcdTZGMUUgMTM0LTE2LTUKK2Fsd2F5cyBcdTZGMUYgMTI0LTEzNDYtMgorYWx3YXlzIFx1NkYyMCAxMzQtMTI2LTUKK2Fsd2F5cyBcdTZGMjEgMjQtMTM0Ni0zCithbHdheXMgXHU2RjIyIDEyMzUtMTIzNi01CithbHdheXMgXHU2RjIzIDE0LTIzNDUtMgorYWx3YXlzIFx1NkYyNCAxNC0xMjM2LTQKK2Fsd2F5cyBcdTZGMjUgMzUtMworYWx3YXlzIFx1NkYyNiAxNC0xNi0yCithbHdheXMgXHU2RjI3IDI0NS0yMzQ1LTIKK2Fsd2F5cyBcdTZGMjggMTIzNDUtMTM1Ni0yCithbHdheXMgXHU2RjI5IDE1LTQ1LTIKK2Fsd2F5cyBcdTZGMkEgMTYtMworYWx3YXlzIFx1NkYyQiAxMzQtMTIzNi01CithbHdheXMgXHU2RjJDIDEyNS0xNTYtNQorYWx3YXlzIFx1NkYyRCAxMzQtMTM0Ni00CithbHdheXMgXHU2RjJFIDEyMy0xMzQ2LTMKK2Fsd2F5cyBcdTZGMkYgMTQtMjUtNQorYWx3YXlzIFx1NkYzMCAxMjM0LTEzNTYtMworYWx3YXlzIFx1NkYzMSAyNC0zNC01CithbHdheXMgXHU2RjMyIDEtMTM0Ni00CithbHdheXMgXHU2RjMzIDEtMTM0Ni0zCithbHdheXMgXHU2RjM0IDEyLTEyMzQ2LTIKK2Fsd2F5cyBcdTZGMzUgMTUtMTI1Ni01CithbHdheXMgXHU2RjM2IDEyMzUtMTI0NTYtNQorYWx3YXlzIFx1NkYzNyAxMjMtMjUtNQorYWx3YXlzIFx1NkYzOCAxMy0yMzQ1LTUKK2Fsd2F5cyBcdTZGMzkgMjM0NS0zCithbHdheXMgXHU2RjNBIDEyLTQ1Ni00CithbHdheXMgXHU2RjNCIDE0LTI0Ni0yCithbHdheXMgXHU2RjNDIDI0NS0xMjQ2LTQKK2Fsd2F5cyBcdTZGM0QgMTI0LTE2LTIKK2Fsd2F5cyBcdTZGM0UgNDYtNQorYWx3YXlzIFx1NkYzRiAxMy00Ni0zCithbHdheXMgXHU2RjQwIDI0NS0xMjM0Ni0yCithbHdheXMgXHU2RjQxIDEzNDU2LTQKK2Fsd2F5cyBcdTZGNDIgMTIzNS0xMjM0Ni0yCithbHdheXMgXHU2RjQzIDE1LTIzNC01CithbHdheXMgXHU2RjQ0IDI0LTM0LTUKK2Fsd2F5cyBcdTZGNDUgMTMtMTI0NTYtNQorYWx3YXlzIFx1NkY0NiAxMzQ1Ni0yCithbHdheXMgXHU2RjQ3IDE1LTI0Ni0zCithbHdheXMgXHU2RjQ4IDEyNC0xMjM0Ni00CithbHdheXMgXHU2RjQ5IDEyMy0xMjM0NTYtMworYWx3YXlzIFx1NkY0QSAxNS0xMjU2LTUKK2Fsd2F5cyBcdTZGNEIgMTQtMjM0NS01CithbHdheXMgXHU2RjRDIDEtMTU2LTUKK2Fsd2F5cyBcdTZGNEQgMTI0Ni0yCithbHdheXMgXHU2RjRFIDEyMzQtMTYtNQorYWx3YXlzIFx1NkY0RiAxMy0yMzYtMgorYWx3YXlzIFx1NkY1MCAxMy0yNDYtNQorYWx3YXlzIFx1NkY1MSAxMjM0LTEyNi0zCithbHdheXMgXHU2RjUyIDE0NS0xMzQ2LTUKK2Fsd2F5cyBcdTZGNTMgMTIzNS0xMjQ2LTUKK2Fsd2F5cyBcdTZGNTQgMTMtMzQ2LTIKK2Fsd2F5cyBcdTZGNTUgMzQtNAorYWx3YXlzIFx1NkY1NiAxMjM0LTM0NS0yCithbHdheXMgXHU2RjU3IDEzLTE2LTIKK2Fsd2F5cyBcdTZGNTggMTIzNC0xMjM2LTMKK2Fsd2F5cyBcdTZGNTkgMTMtMTI0Ni0zCithbHdheXMgXHU2RjVBIDE1LTI0Ni0zCithbHdheXMgXHU2RjVCIDI0NS0yMzQ1LTIKK2Fsd2F5cyBcdTZGNUMgMjQ1LTIzNDUtMgorYWx3YXlzIFx1NkY1RCAxNS0xNi01CithbHdheXMgXHU2RjVFIDE0LTM0LTUKK2Fsd2F5cyBcdTZGNUYgMTUtMTYtNQorYWx3YXlzIFx1NkY2MCAxNS0xMjM0NTYtNQorYWx3YXlzIFx1NkY2MSAxNDUtMTIzNDU2LTUKK2Fsd2F5cyBcdTZGNjIgMTIzNS00NTYtMgorYWx3YXlzIFx1NkY2MyAxMzQtMTQ1Ni00CithbHdheXMgXHU2RjY0IDEyNDUtMTIzNDU2LTUKK2Fsd2F5cyBcdTZGNjUgMTUtMzQtNQorYWx3YXlzIFx1NkY2NiAxNC0yNDYtMgorYWx3YXlzIFx1NkY2NyAxMjUtMTM1Ni0zCithbHdheXMgXHU2RjY4IDEtMTIzNDYtMworYWx3YXlzIFx1NkY2OSAxNi01CithbHdheXMgXHU2RjZBIDE0NS0xNi0yCithbHdheXMgXHU2RjZCIDEyNDU2LTMKK2Fsd2F5cyBcdTZGNkMgMTQ1LTEyMzYtNQorYWx3YXlzIFx1NkY2RCAxMjQtMTIzNi0yCithbHdheXMgXHU2RjZFIDEyLTE0Ni0yCithbHdheXMgXHU2RjZGIDE1LTI1Ni0yCithbHdheXMgXHU2RjcwIDEyMy0xMjQ2LTUKK2Fsd2F5cyBcdTZGNzEgMzQ2LTMKK2Fsd2F5cyBcdTZGNzIgMjQtMTQ2LTUKK2Fsd2F5cyBcdTZGNzMgMTI0LTM0LTIKK2Fsd2F5cyBcdTZGNzQgMS0zNC0zCithbHdheXMgXHU2Rjc1IDE1LTEyMzYtNQorYWx3YXlzIFx1NkY3NiAxMjM1LTM1Ni0zCithbHdheXMgXHU2Rjc3IDEzNS0xNi01CithbHdheXMgXHU2Rjc4IDI0LTEyMzYtMworYWx3YXlzIFx1NkY3OSAxMi0xMjM2LTIKK2Fsd2F5cyBcdTZGN0EgMTItMTIzNi0yCithbHdheXMgXHU2RjdCIDI0LTM0LTQKK2Fsd2F5cyBcdTZGN0MgMTI0LTEyMzQ2LTIKK2Fsd2F5cyBcdTZGN0QgMTIzNC0zNC00CithbHdheXMgXHU2RjdFIDE0LTE0NTYtMgorYWx3YXlzIFx1NkY3RiAxMjQ2LTIKK2Fsd2F5cyBcdTZGODAgMTUtMjM0Ni01CithbHdheXMgXHU2RjgxIDE1LTIzNDYtNQorYWx3YXlzIFx1NkY4MiAxMi0xMzU2LTIKK2Fsd2F5cyBcdTZGODMgMTMtMjM1LTUKK2Fsd2F5cyBcdTZGODQgMTItMTM1Ni0yCithbHdheXMgXHU2Rjg1IDEyMzUtMzUtNQorYWx3YXlzIFx1NkY4NiAxMy0yNDYtMworYWx3YXlzIFx1NkY4NyAxNC0xNDYtNQorYWx3YXlzIFx1NkY4OCAxMi0yMzQ2LTUKK2Fsd2F5cyBcdTZGODkgMTMtMTIzNi00CithbHdheXMgXHU2RjhBIDI0NS0xMjM0NTYtMworYWx3YXlzIFx1NkY4QiAxMjM1LTEyMzQ2LTUKK2Fsd2F5cyBcdTZGOEMgMTUtMTU2LTMKK2Fsd2F5cyBcdTZGOEQgMjQtMzQtNQorYWx3YXlzIFx1NkY4RSAxMjM0LTEzNTYtMgorYWx3YXlzIFx1NkY4RiAxMjM1LTEyMzYtNQorYWx3YXlzIFx1NkY5MCAyNTYtMgorYWx3YXlzIFx1NkY5MSAxNC0yMzQtNQorYWx3YXlzIFx1NkY5MiAxMjM1LTEyMzQ2LTUKK2Fsd2F5cyBcdTZGOTMgMTIzNDUtMzQtMgorYWx3YXlzIFx1NkY5NCAxMjM1LTE0Ni01CithbHdheXMgXHU2Rjk1IDEyMzUtMjM0Ni0yCithbHdheXMgXHU2Rjk2IDE1LTIzNDUtMworYWx3YXlzIFx1NkY5NyAxMy0yMzQ1LTUKK2Fsd2F5cyBcdTZGOTggMjQtMTIzNi0zCithbHdheXMgXHU2Rjk5IDE1LTE2LTUKK2Fsd2F5cyBcdTZGOUEgMjM2LTUKK2Fsd2F5cyBcdTZGOUIgMTQtMzQtNAorYWx3YXlzIFx1NkY5QyAxNC0xMjM2LTIKK2Fsd2F5cyBcdTZGOUQgMTM0LTEzNDU2LTUKK2Fsd2F5cyBcdTZGOUUgMTI1Ni0yCithbHdheXMgXHU2RjlGIDE0LTE0NTYtNAorYWx3YXlzIFx1NkZBMCAxMzQtMTQ1Ni00CithbHdheXMgXHU2RkExIDEyNS0xNDYtNAorYWx3YXlzIFx1NkZBMiAxNDUtMTM0Ni0zCithbHdheXMgXHU2RkEzIDEyMzUtMTI0NTYtNAorYWx3YXlzIFx1NkZBNCAxMjUtMjM0Ni0yCithbHdheXMgXHU2RkE1IDE1LTM0Ni01CithbHdheXMgXHU2RkE2IDEyNTYtNQorYWx3YXlzIFx1NkZBNyAxNC0xNi00CithbHdheXMgXHU2RkE4IDI0LTE1Ni01CithbHdheXMgXHU2RkE5IDE1LTIzNi0yCithbHdheXMgXHU2RkFBIDE0LTEzNDU2LTIKK2Fsd2F5cyBcdTZGQUIgMTM0LTEyMzYtNQorYWx3YXlzIFx1NkZBQyAxMjUtMTU2LTMKK2Fsd2F5cyBcdTZGQUQgMjM1LTMKK2Fsd2F5cyBcdTZGQUUgMTIzLTIzNTYtNQorYWx3YXlzIFx1NkZBRiAyNDUtMTIzNi01CithbHdheXMgXHU2RkIwIDE0LTIzNDUtNQorYWx3YXlzIFx1NkZCMSAxNDUtMjM0NS01CithbHdheXMgXHU2RkIyIDM0Ni01CithbHdheXMgXHU2RkIzIDE0Ni01CithbHdheXMgXHU2RkI0IDEyMzUtMTI0NTYtMgorYWx3YXlzIFx1NkZCNSAxLTEzNi0zCithbHdheXMgXHU2RkI2IDEyLTEyMzYtMgorYWx3YXlzIFx1NkZCNyAxMzQtMTIzNi01CithbHdheXMgXHU2RkI4IDE0NS0xMjM2LTQKK2Fsd2F5cyBcdTZGQjkgMTQ1LTEyMzYtNQorYWx3YXlzIFx1NkZCQSAxNi01CithbHdheXMgXHU2RkJCIDE1LTEyNDYtNQorYWx3YXlzIFx1NkZCQyAxMjM0LTE2LTUKK2Fsd2F5cyBcdTZGQkQgMTMtMTI1Ni01CithbHdheXMgXHU2RkJFIDEyNC0zNDUtNQorYWx3YXlzIFx1NkZCRiAyNDUtMTQ1Ni0yCithbHdheXMgXHU2RkMwIDEzLTE2LTMKK2Fsd2F5cyBcdTZGQzEgMS0yNS0yCithbHdheXMgXHU2RkMyIDE0LTIzNDUtMgorYWx3YXlzIFx1NkZDMyAxMzQ1LTEyMzQ2LTIKK2Fsd2F5cyBcdTZGQzQgMjUtMworYWx3YXlzIFx1NkZDNSAxMy0xNDU2LTUKK2Fsd2F5cyBcdTZGQzYgMTIzNC0xMzYtMworYWx3YXlzIFx1NkZDNyAxNS0yMzQ2LTUKK2Fsd2F5cyBcdTZGQzggMTMtMTYtMgorYWx3YXlzIFx1NkZDOSAxNS0xMjQ2LTMKK2Fsd2F5cyBcdTZGQ0EgMTIzNS0xMjQ2LTUKK2Fsd2F5cyBcdTZGQ0IgMTItMzQtNAorYWx3YXlzIFx1NkZDQyAxMjQtMzQ1LTUKK2Fsd2F5cyBcdTZGQ0QgMTUtMTIzNDYtMworYWx3YXlzIFx1NkZDRSAxNDUtMTM0NTYtNAorYWx3YXlzIFx1NkZDRiAxNS0yMzQ2LTUKK2Fsd2F5cyBcdTZGRDAgMS0zNC00CithbHdheXMgXHU2RkQxIDE0LTI0NTYtNQorYWx3YXlzIFx1NkZEMiAxMzUtMTQ1Ni0zCithbHdheXMgXHU2RkQzIDE0LTIzNDUtMgorYWx3YXlzIFx1NkZENCAxMzQtMTYtNAorYWx3YXlzIFx1NkZENSAyNC0xNTYtMworYWx3YXlzIFx1NkZENiAyNC0zNC01CithbHdheXMgXHU2RkQ3IDEzNC0xNi01CithbHdheXMgXHU2RkQ4IDEzNDUtMTM0NTYtNQorYWx3YXlzIFx1NkZEOSAxMzQ1Ni0yCithbHdheXMgXHU2RkRBIDEzNDU2LTIKK2Fsd2F5cyBcdTZGREIgMTM0LTEzNTYtMgorYWx3YXlzIFx1NkZEQyAxMy0xNDU2LTUKK2Fsd2F5cyBcdTZGREQgMjQ1LTE2LTIKK2Fsd2F5cyBcdTZGREUgMTIzNC0xNi01CithbHdheXMgXHU2RkRGIDEzLTE2LTUKK2Fsd2F5cyBcdTZGRTAgMTIzNS0xNDYtMgorYWx3YXlzIFx1NkZFMSAxMjQ1LTM0LTIKK2Fsd2F5cyBcdTZGRTIgMTI1LTEyNDYtNAorYWx3YXlzIFx1NkZFMyAyNS01CithbHdheXMgXHU2RkU0IDEyNC0xNDYtMworYWx3YXlzIFx1NkZFNSAxNDU2LTUKK2Fsd2F5cyBcdTZGRTYgMTQ1Ni00CithbHdheXMgXHU2RkU3IDE0NS0xMjQ2LTUKK2Fsd2F5cyBcdTZGRTggMjQ1LTE1Ni0yCithbHdheXMgXHU2RkU5IDEyMzUtMjUtNQorYWx3YXlzIFx1NkZFQSAxMy0xMzQ1Ni01CithbHdheXMgXHU2RkVCIDE0LTEyMzYtNQorYWx3YXlzIFx1NkZFQyAxMy0yNTYtNQorYWx3YXlzIFx1NkZFRCAyNDU2LTUKK2Fsd2F5cyBcdTZGRUUgMTIzNC0zNC0yCithbHdheXMgXHU2RkVGIDEtMjUtMgorYWx3YXlzIFx1NkZGMCAxMjQ2LTIKK2Fsd2F5cyBcdTZGRjEgMTM1LTE0NTYtMworYWx3YXlzIFx1NkZGMiAxMy0zNC00CithbHdheXMgXHU2RkYzIDI0NS0yMzQ1LTIKK2Fsd2F5cyBcdTZGRjQgMTUtMTM0NTYtMgorYWx3YXlzIFx1NkZGNSAxMzUtMTQ1Ni0zCithbHdheXMgXHU2RkY2IDEyMy0yNS01CithbHdheXMgXHU2RkY3IDEyMzQ1LTM1Ni01CithbHdheXMgXHU2RkY4IDI0NS0xMzQ2LTMKK2Fsd2F5cyBcdTZGRjkgMTM0LTIzNDYtNQorYWx3YXlzIFx1NkZGQSAxMy0yMzQ1LTUKK2Fsd2F5cyBcdTZGRkIgMTI0Ni00CithbHdheXMgXHU2RkZDIDE0LTI1LTUKK2Fsd2F5cyBcdTZGRkQgMTI1LTEyMzYtNQorYWx3YXlzIFx1NkZGRSAxNC0xMjU2LTUKK2Fsd2F5cyBcdTZGRkYgMTQtMTYtNQorYWx3YXlzIFx1NzAwMCAyMzQtMworYWx3YXlzIFx1NzAwMSA0Ni01CithbHdheXMgXHU3MDAyIDE0LTM0LTQKK2Fsd2F5cyBcdTcwMDMgMTUtMTU2LTUKK2Fsd2F5cyBcdTcwMDQgMTMtMzQ2LTIKK2Fsd2F5cyBcdTcwMDUgMTM0NTYtMgorYWx3YXlzIFx1NzAwNiAxNDUtMzQtMgorYWx3YXlzIFx1NzAwNyA0NTYtNAorYWx3YXlzIFx1NzAwOCAxMjM1LTEyNDYtMworYWx3YXlzIFx1NzAwOSAxNS0zNDYtNQorYWx3YXlzIFx1NzAwQSAxMjM0LTEyMzYtMgorYWx3YXlzIFx1NzAwQiAyNC0xMzYtNAorYWx3YXlzIFx1NzAwQyAxMzUtMjQ2LTMKK2Fsd2F5cyBcdTcwMEQgMTItMTIzNi0yCithbHdheXMgXHU3MDBFIDEzNC0xMjYtNQorYWx3YXlzIFx1NzAwRiAxNC0yMzQtMgorYWx3YXlzIFx1NzAxMCAxMy0yMzQ1LTMKK2Fsd2F5cyBcdTcwMTEgMTIzNC0zNC01CithbHdheXMgXHU3MDEyIDE1LTIzNDYtNQorYWx3YXlzIFx1NzAxMyAxMi0xMzU2LTIKK2Fsd2F5cyBcdTcwMTQgMTMtMzQtNAorYWx3YXlzIFx1NzAxNSAxMzUtMTQ1Ni0zCithbHdheXMgXHU3MDE2IDEyMzUtMjUtNQorYWx3YXlzIFx1NzAxNyAxNS0yMzQ1LTUKK2Fsd2F5cyBcdTcwMTggMTQtMzQtMgorYWx3YXlzIFx1NzAxOSAyNDUtMTQ1Ni0zCithbHdheXMgXHU3MDFBIDEyMzUtMTIzNi01CithbHdheXMgXHU3MDFCIDEzNDU2LTIKK2Fsd2F5cyBcdTcwMUMgMTI0NS0xMjM0Ni0yCithbHdheXMgXHU3MDFEIDE0LTE2LTUKK2Fsd2F5cyBcdTcwMUUgMTMtMTM0NTYtNQorYWx3YXlzIFx1NzAxRiAxNS0yNDYtMworYWx3YXlzIFx1NzAyMCAxMzQ1Ni0yCithbHdheXMgXHU3MDIxIDE1LTEyNDYtNAorYWx3YXlzIFx1NzAyMiAxMjQ2LTIKK2Fsd2F5cyBcdTcwMjMgMTUtMzQ2LTUKK2Fsd2F5cyBcdTcwMjQgMTIzNS0yMzU2LTIKK2Fsd2F5cyBcdTcwMjUgMTIzNS0xNDYtNQorYWx3YXlzIFx1NzAyNiAxLTM0LTMKK2Fsd2F5cyBcdTcwMjcgMTQtMTIzNDYtMgorYWx3YXlzIFx1NzAyOCAxNC0yNDU2LTUKK2Fsd2F5cyBcdTcwMjkgMTQ1LTEyNDYtNQorYWx3YXlzIFx1NzAyQSAxMjM0NS0xMjM2LTIKK2Fsd2F5cyBcdTcwMkIgMTIzNS0zNC0yCithbHdheXMgXHU3MDJDIDE0LTI0NTYtNQorYWx3YXlzIFx1NzAyRCAyNC0zNC0zCithbHdheXMgXHU3MDJFIDE0LTEzNDU2LTIKK2Fsd2F5cyBcdTcwMkYgMTM0NTYtMgorYWx3YXlzIFx1NzAzMCAxMzQtMTYtMgorYWx3YXlzIFx1NzAzMSAxMy0xNi01CithbHdheXMgXHU3MDMyIDE0LTIzNDUtNQorYWx3YXlzIFx1NzAzMyAxMy0yMzQ1LTUKK2Fsd2F5cyBcdTcwMzQgMTM0NTYtNAorYWx3YXlzIFx1NzAzNSAxMjM0NS0xMzYtNQorYWx3YXlzIFx1NzAzNiAxNC0xNDU2LTIKK2Fsd2F5cyBcdTcwMzcgMTYtNQorYWx3YXlzIFx1NzAzOCAxMy0yMzQ1LTMKK2Fsd2F5cyBcdTcwMzkgMjM2LTUKK2Fsd2F5cyBcdTcwM0EgMTItMTIzNi0yCithbHdheXMgXHU3MDNCIDE0NS0yNDU2LTUKK2Fsd2F5cyBcdTcwM0MgMTI0NS0xMzQ2LTIKK2Fsd2F5cyBcdTcwM0QgMTMtMjM0NS00CithbHdheXMgXHU3MDNFIDE0LTEyMzYtMgorYWx3YXlzIFx1NzAzRiAxMjM0NS0xMjM2LTIKK2Fsd2F5cyBcdTcwNDAgMjQtNDU2LTUKK2Fsd2F5cyBcdTcwNDEgNDUtMworYWx3YXlzIFx1NzA0MiAxLTI1LTIKK2Fsd2F5cyBcdTcwNDMgMTIzNDUtMTM1Ni0zCithbHdheXMgXHU3MDQ0IDI0LTIzNDYtNQorYWx3YXlzIFx1NzA0NSAxNC0zNTYtNAorYWx3YXlzIFx1NzA0NiAxNC0xMjM2LTIKK2Fsd2F5cyBcdTcwNDcgMjQ1LTEyMzQ2LTIKK2Fsd2F5cyBcdTcwNDggMjQ1LTEyNTYtMgorYWx3YXlzIFx1NzA0OSAyMzUtMworYWx3YXlzIFx1NzA0QSAyNDUtMjM0NS0yCithbHdheXMgXHU3MDRCIDEyMzQ1LTM0NS00CithbHdheXMgXHU3MDRDIDEzLTEyNDU2LTUKK2Fsd2F5cyBcdTcwNEQgMjQ1LTIzNi01CithbHdheXMgXHU3MDRFIDIzNDUtNQorYWx3YXlzIFx1NzA0RiAxMjM1LTE0Ni01CithbHdheXMgXHU3MDUwIDEzNDU2LTIKK2Fsd2F5cyBcdTcwNTEgMTUtMzQ1LTQKK2Fsd2F5cyBcdTcwNTIgMTI1LTEyMzYtNQorYWx3YXlzIFx1NzA1MyAxNC0xMjQ1Ni0yCithbHdheXMgXHU3MDU0IDIzNDUtNQorYWx3YXlzIFx1NzA1NSAxNC0xNi0yCithbHdheXMgXHU3MDU2IDEzNC0xNi00CithbHdheXMgXHU3MDU3IDI0LTEyMzYtNQorYWx3YXlzIFx1NzA1OCAxMjQtMTIzNi0zCithbHdheXMgXHU3MDU5IDE0NS0xMzQ2LTQKK2Fsd2F5cyBcdTcwNUEgMTMtMjQ2LTQKK2Fsd2F5cyBcdTcwNUIgMTItMTIzNi00CithbHdheXMgXHU3MDVDIDEzNDU2LTIKK2Fsd2F5cyBcdTcwNUQgMTIzNS0xNDYtNQorYWx3YXlzIFx1NzA1RSAxMzUtMzQ1LTUKK2Fsd2F5cyBcdTcwNUYgMS0zNC0yCithbHdheXMgXHU3MDYwIDE0LTEyMzYtNQorYWx3YXlzIFx1NzA2MSAxNC0xMjM2LTIKK2Fsd2F5cyBcdTcwNjIgMTM0NS0xMzQ2LTQKK2Fsd2F5cyBcdTcwNjMgMTI0NTYtMworYWx3YXlzIFx1NzA2NCAxNC0xMjQ1Ni0yCithbHdheXMgXHU3MDY1IDE1LTI1Ni0yCithbHdheXMgXHU3MDY2IDE1LTIzNDUtNAorYWx3YXlzIFx1NzA2NyAyMzQ1LTUKK2Fsd2F5cyBcdTcwNjggMTMtMTIzNi00CithbHdheXMgXHU3MDY5IDIzNDUtNQorYWx3YXlzIFx1NzA2QSAxMjU2LTUKK2Fsd2F5cyBcdTcwNkIgMTIzNS0yNS00CithbHdheXMgXHU3MDZDIDEyMzUtMjUtNAorYWx3YXlzIFx1NzA2RCAxMzQtMzQ2LTUKK2Fsd2F5cyBcdTcwNkUgMTMtNDU2LTMKK2Fsd2F5cyBcdTcwNkYgMTQ1LTEzNTYtMworYWx3YXlzIFx1NzA3MCAxMjM1LTEyNDYtMworYWx3YXlzIFx1NzA3MSAxNS0yNDYtMworYWx3YXlzIFx1NzA3MiAxNS0yNDYtMworYWx3YXlzIFx1NzA3MyAxMjM1LTEyNDYtMworYWx3YXlzIFx1NzA3NCAxMjM1LTEyMzQ2LTIKK2Fsd2F5cyBcdTcwNzUgMTQtMTM0NTYtMgorYWx3YXlzIFx1NzA3NiAxMjUtMTQ2LTUKK2Fsd2F5cyBcdTcwNzcgMS0xMjQ1Ni01CithbHdheXMgXHU3MDc4IDEzLTIzNC00CithbHdheXMgXHU3MDc5IDEtMzQ1LTUKK2Fsd2F5cyBcdTcwN0EgMTUtMzQ2LTUKK2Fsd2F5cyBcdTcwN0IgMTItMTU2LTUKK2Fsd2F5cyBcdTcwN0MgMS0yNS0yCithbHdheXMgXHU3MDdEIDEyNS0yNDU2LTMKK2Fsd2F5cyBcdTcwN0UgMTI1LTI0NTYtMworYWx3YXlzIFx1NzA3RiAyNDUtMTIzNi01CithbHdheXMgXHU3MDgwIDQ2LTIKK2Fsd2F5cyBcdTcwODEgMjQ1LTE2LTUKK2Fsd2F5cyBcdTcwODIgMS0xMjM0Ni0zCithbHdheXMgXHU3MDgzIDEyMzQ1LTEzNi0yCithbHdheXMgXHU3MDg0IDEzNDUtMjM0LTQKK2Fsd2F5cyBcdTcwODUgMTMtMjM1LTQKK2Fsd2F5cyBcdTcwODYgMTIzNDU2LTIKK2Fsd2F5cyBcdTcwODcgMTIzNC0xMjYtNQorYWx3YXlzIFx1NzA4OCAxNi01CithbHdheXMgXHU3MDg5IDE0LTM0LTIKK2Fsd2F5cyBcdTcwOEEgMTItMTI0Ni0zCithbHdheXMgXHU3MDhCIDEyMzQtMTYtMworYWx3YXlzIFx1NzA4QyAxMjMtMjQ1Ni01CithbHdheXMgXHU3MDhEIDEyMzQtMTIzNi01CithbHdheXMgXHU3MDhFIDIzNDUtMgorYWx3YXlzIFx1NzA4RiAxMjMtMjQ1Ni01CithbHdheXMgXHU3MDkwIDEyMzQtMTM0Ni01CithbHdheXMgXHU3MDkxIDEzNC0zNC01CithbHdheXMgXHU3MDkyIDEyLTE0Ni00CithbHdheXMgXHU3MDkzIDE0LTI0Ni01CithbHdheXMgXHU3MDk0IDI0NS0yMzYtMworYWx3YXlzIFx1NzA5NSAxMjMtMTM0Ni01CithbHdheXMgXHU3MDk2IDEyNC0xMjM0NTYtMgorYWx3YXlzIFx1NzA5NyAxMy00NTYtMworYWx3YXlzIFx1NzA5OCAxNS0xNDU2LTMKK2Fsd2F5cyBcdTcwOTkgMS0xNTYtNQorYWx3YXlzIFx1NzA5QSAxMy00NTYtMworYWx3YXlzIFx1NzA5QiAxMy00NTYtMworYWx3YXlzIFx1NzA5QyAxMjQ2LTQKK2Fsd2F5cyBcdTcwOUQgMjQ1LTQ2LTUKK2Fsd2F5cyBcdTcwOUUgMTQ1LTIzNDUtNAorYWx3YXlzIFx1NzA5RiAxNDUtMzQ1LTIKK2Fsd2F5cyBcdTcwQTAgMTUtMjM0NTYtMgorYWx3YXlzIFx1NzBBMSAxLTEzNTYtMworYWx3YXlzIFx1NzBBMiAxLTM0LTIKK2Fsd2F5cyBcdTcwQTMgMTIzLTIzNDYtNAorYWx3YXlzIFx1NzBBNCAxLTE0Ni01CithbHdheXMgXHU3MEE1IDEyMzQ1LTM0LTIKK2Fsd2F5cyBcdTcwQTYgMTM1LTM0NS0yCithbHdheXMgXHU3MEE3IDE0NS0yNS01CithbHdheXMgXHU3MEE4IDE0NS0yNS01CithbHdheXMgXHU3MEE5IDE0LTEzNDU2LTUKK2Fsd2F5cyBcdTcwQUEgMS0yNS0yCithbHdheXMgXHU3MEFCIDE1LTQ1LTUKK2Fsd2F5cyBcdTcwQUMgMTMtMTI1Ni01CithbHdheXMgXHU3MEFEIDEyNC0xMjM2LTUKK2Fsd2F5cyBcdTcwQUUgMTIzNC0xNDYtNQorYWx3YXlzIFx1NzBBRiAxMy0yMzUtNAorYWx3YXlzIFx1NzBCMCAxMjM0LTE0Ni0yCithbHdheXMgXHU3MEIxIDEyNC0yNDU2LTIKK2Fsd2F5cyBcdTcwQjIgMTI0LTI0NTYtMgorYWx3YXlzIFx1NzBCMyAxMzUtMTM0NTYtNAorYWx3YXlzIFx1NzBCNCA0Ni00CithbHdheXMgXHU3MEI1IDEyNC0xMjM0Ni0zCithbHdheXMgXHU3MEI2IDEyMzUtMTIzNi0zCithbHdheXMgXHU3MEI3IDEtMzQtNQorYWx3YXlzIFx1NzBCOCAxLTM0NS01CithbHdheXMgXHU3MEI5IDE0NS0yMzQ1LTQKK2Fsd2F5cyBcdTcwQkEgMTI0Ni0yCithbHdheXMgXHU3MEJCIDI0LTE1Ni0yCithbHdheXMgXHU3MEJDIDE0LTIzNDUtNQorYWx3YXlzIFx1NzBCRCAxMi0xNTYtNQorYWx3YXlzIFx1NzBCRSAxMjM1LTQ1Ni00CithbHdheXMgXHU3MEJGIDEtMTIzNTYtMworYWx3YXlzIFx1NzBDMCAxMjM1LTM0LTMKK2Fsd2F5cyBcdTcwQzEgMjQtMjUtNQorYWx3YXlzIFx1NzBDMiAxNC0xMjM2LTUKK2Fsd2F5cyBcdTcwQzMgMjQ1LTEzNDU2LTMKK2Fsd2F5cyBcdTcwQzQgMTMtMjQ2LTQKK2Fsd2F5cyBcdTcwQzUgMTUtMTI1Ni01CithbHdheXMgXHU3MEM2IDE1LTEzNDU2LTIKK2Fsd2F5cyBcdTcwQzcgMjQ1LTQ1LTUKK2Fsd2F5cyBcdTcwQzggMTQtMzQ2LTUKK2Fsd2F5cyBcdTcwQzkgMTIzNS0xMjQ1Ni01CithbHdheXMgXHU3MENBIDQ2LTIKK2Fsd2F5cyBcdTcwQ0IgMTUtMjM0LTMKK2Fsd2F5cyBcdTcwQ0MgMTUtMjM0LTMKK2Fsd2F5cyBcdTcwQ0QgMTUtMjM0NS00CithbHdheXMgXHU3MENFIDE0NTYtMgorYWx3YXlzIFx1NzBDRiAzNC0zCithbHdheXMgXHU3MEQwIDEtMTIzNTYtMworYWx3YXlzIFx1NzBEMSAyNDYtMgorYWx3YXlzIFx1NzBEMiAyNC0xNTYtNQorYWx3YXlzIFx1NzBEMyAxMjQ2LTMKK2Fsd2F5cyBcdTcwRDQgMTI0LTEyMzQ2LTIKK2Fsd2F5cyBcdTcwRDUgMTUtMjM2LTUKK2Fsd2F5cyBcdTcwRDYgMTI1LTI0NTYtMworYWx3YXlzIFx1NzBENyAxMjMtMjQ1Ni01CithbHdheXMgXHU3MEQ4IDEyMzUtMTIzNDYtMworYWx3YXlzIFx1NzBEOSAxNC0xNDYtNQorYWx3YXlzIFx1NzBEQSAxNS0yMzQ1Ni0yCithbHdheXMgXHU3MERCIDEtMzQtMgorYWx3YXlzIFx1NzBEQyAxNS00NS00CithbHdheXMgXHU3MEREIDEtMTM1Ni0zCithbHdheXMgXHU3MERFIDEyMzQtMTI2LTUKK2Fsd2F5cyBcdTcwREYgMjM0NS0zCithbHdheXMgXHU3MEUwIDEyMzUtMTI0Ni00CithbHdheXMgXHU3MEUxIDEzLTQ1Ni0zCithbHdheXMgXHU3MEUyIDEtMjM0Ni01CithbHdheXMgXHU3MEUzIDEyMzUtMTI0Ni0zCithbHdheXMgXHU3MEU0IDEyMy0xNDYtNAorYWx3YXlzIFx1NzBFNSAxMi0xMzYtMgorYWx3YXlzIFx1NzBFNiAxMjM0NS0xMjM2LTIKK2Fsd2F5cyBcdTcwRTcgMjQtMTQ2LTMKK2Fsd2F5cyBcdTcwRTggMzQ2LTUKK2Fsd2F5cyBcdTcwRTkgMTIzNS0xMjQ2LTUKK2Fsd2F5cyBcdTcwRUEgMTMtMTI0NTYtMworYWx3YXlzIFx1NzBFQiAxMjQtMTM0Ni01CithbHdheXMgXHU3MEVDIDEzLTE0NTYtNQorYWx3YXlzIFx1NzBFRCAxMjQ1LTIzNDYtNQorYWx3YXlzIFx1NzBFRSAxNC0zNDYtNQorYWx3YXlzIFx1NzBFRiAxNS0xNi0zCithbHdheXMgXHU3MEYwIDEyMzQ1LTM0LTIKK2Fsd2F5cyBcdTcwRjEgMTMtMjM1LTQKK2Fsd2F5cyBcdTcwRjIgMTItMjM0Ni01CithbHdheXMgXHU3MEYzIDEyMzQtMzQtNAorYWx3YXlzIFx1NzBGNCAyNDUtMTM0NTYtMworYWx3YXlzIFx1NzBGNSAxLTI1LTIKK2Fsd2F5cyBcdTcwRjYgMTI0LTEzNDU2LTQKK2Fsd2F5cyBcdTcwRjcgMTI0NTYtMgorYWx3YXlzIFx1NzBGOCAxMjM1LTI0NTYtNAorYWx3YXlzIFx1NzBGOSAxMjM0LTEzNTYtMworYWx3YXlzIFx1NzBGQSAxNC0xMzQ2LTQKK2Fsd2F5cyBcdTcwRkIgMjM0NS01CithbHdheXMgXHU3MEZDIDEyMzUtMzQtMworYWx3YXlzIFx1NzBGRCAxMjM0NS0xMzU2LTMKK2Fsd2F5cyBcdTcwRkUgMTItMTU2LTUKK2Fsd2F5cyBcdTcwRkYgMTI0NS0xMjM0Ni0yCithbHdheXMgXHU3MTAwIDEyMzUtMzQtMgorYWx3YXlzIFx1NzEwMSAxNS0xNi0zCithbHdheXMgXHU3MTAyIDI0LTM0LTIKK2Fsd2F5cyBcdTcxMDMgMTIzNS0yMzQ2LTUKK2Fsd2F5cyBcdTcxMDQgMTUtMjU2LTMKK2Fsd2F5cyBcdTcxMDUgMTIzLTM0LTUKK2Fsd2F5cyBcdTcxMDYgMTMtMjM2LTIKK2Fsd2F5cyBcdTcxMDcgMTUtMjQ2LTMKK2Fsd2F5cyBcdTcxMDggMTUtMTYtMworYWx3YXlzIFx1NzEwOSAyMzQ1LTMKK2Fsd2F5cyBcdTcxMEEgMTIzNS0xMjM2LTUKK2Fsd2F5cyBcdTcxMEIgMS00NTYtNQorYWx3YXlzIFx1NzEwQyAxMy0yNTYtNQorYWx3YXlzIFx1NzEwRCAxNDUtMTYtNQorYWx3YXlzIFx1NzEwRSAxNS0zNDYtNQorYWx3YXlzIFx1NzEwRiAxMy0xNi0yCithbHdheXMgXHU3MTEwIDM0LTUKK2Fsd2F5cyBcdTcxMTEgMjM0NS0zCithbHdheXMgXHU3MTEyIDE0LTEyNTYtNAorYWx3YXlzIFx1NzExMyAxMjM1LTEyMzYtMgorYWx3YXlzIFx1NzExNCAyMzQ1LTUKK2Fsd2F5cyBcdTcxMTUgMTIzNS0xMjQ1Ni01CithbHdheXMgXHU3MTE2IDEzNC0xMzYtMworYWx3YXlzIFx1NzExNyAxMy0xMjU2LTIKK2Fsd2F5cyBcdTcxMTggMTQ1LTE0Ni01CithbHdheXMgXHU3MTE5IDEzNS0zNTYtNQorYWx3YXlzIFx1NzExQSAxMjM0NS0xMzYtMgorYWx3YXlzIFx1NzExQiAxNC0xNDU2LTUKK2Fsd2F5cyBcdTcxMUMgMTIzLTEyMzQ1Ni0zCithbHdheXMgXHU3MTFEIDEyMzUtMTIzNDU2LTUKK2Fsd2F5cyBcdTcxMUUgMTI0LTEyMzQ1Ni0zCithbHdheXMgXHU3MTFGIDE1LTE2LTIKK2Fsd2F5cyBcdTcxMjAgMjQ1LTEyNDYtNQorYWx3YXlzIFx1NzEyMSAzNC0yCithbHdheXMgXHU3MTIyIDEyMzUtMTIzNDYtMworYWx3YXlzIFx1NzEyMyAxMy0xMjU2LTUKK2Fsd2F5cyBcdTcxMjQgMTIzNDUtMzQtNAorYWx3YXlzIFx1NzEyNSAyNS01CithbHdheXMgXHU3MTI2IDEzLTI0Ni0zCithbHdheXMgXHU3MTI3IDI0NS0xMjM0Ni0zCithbHdheXMgXHU3MTI4IDEyMzQ1LTEzNTYtNQorYWx3YXlzIFx1NzEyOSAxMjM0LTEzNDU2LTMKK2Fsd2F5cyBcdTcxMkEgMjQ1LTIzNS0zCithbHdheXMgXHU3MTJCIDEyNDUtMjUtNQorYWx3YXlzIFx1NzEyQyAxNS0xNi0yCithbHdheXMgXHU3MTJEIDI0NS0yMzUtMgorYWx3YXlzIFx1NzEyRSAxNS0xNDU2LTUKK2Fsd2F5cyBcdTcxMkYgMTItMTQ2LTMKK2Fsd2F5cyBcdTcxMzAgMjM0NS01CithbHdheXMgXHU3MTMxIDIzNDUtNQorYWx3YXlzIFx1NzEzMiAxNi01CithbHdheXMgXHU3MTMzIDEzLTIzNi0yCithbHdheXMgXHU3MTM0IDEyNTYtNQorYWx3YXlzIFx1NzEzNSAxMy0xMzQ2LTUKK2Fsd2F5cyBcdTcxMzYgMTI0NS0xMjM2LTIKK2Fsd2F5cyBcdTcxMzcgMTIzNC0xNi0yCithbHdheXMgXHU3MTM4IDEzLTM0LTQKK2Fsd2F5cyBcdTcxMzkgNDU2LTQKK2Fsd2F5cyBcdTcxM0EgMjQtMTM1Ni0zCithbHdheXMgXHU3MTNCIDEyLTEzNDYtNQorYWx3YXlzIFx1NzEzQyAyNC0xNDYtMworYWx3YXlzIFx1NzEzRCAxMzQ1Ni0zCithbHdheXMgXHU3MTNFIDEzNC0yMzQ1LTQKK2Fsd2F5cyBcdTcxM0YgMTMtMTM1Ni0zCithbHdheXMgXHU3MTQwIDEyNDYtMworYWx3YXlzIFx1NzE0MSAxMi0xMzYtMgorYWx3YXlzIFx1NzE0MiAxMjM1LTIzNDYtNQorYWx3YXlzIFx1NzE0MyAxMjMtMTI0Ni00CithbHdheXMgXHU3MTQ0IDEtMTIzNDYtMworYWx3YXlzIFx1NzE0NSAxNDUtMTI0NTYtNQorYWx3YXlzIFx1NzE0NiAxNS0yMzQ1Ni0zCithbHdheXMgXHU3MTQ3IDEyMzUtMTI0Ni0zCithbHdheXMgXHU3MTQ4IDEyMzQ1LTEzNTYtNQorYWx3YXlzIFx1NzE0OSAxNC0yMzQ1LTUKK2Fsd2F5cyBcdTcxNEEgMTUtNDUtMworYWx3YXlzIFx1NzE0QiAxNS0xMzQ1Ni0zCithbHdheXMgXHU3MTRDIDEyMzUtNDU2LTIKK2Fsd2F5cyBcdTcxNEQgMTMtMjQ2LTQKK2Fsd2F5cyBcdTcxNEUgMTMtMjM0NS0zCithbHdheXMgXHU3MTRGIDEzNS0xNi01CithbHdheXMgXHU3MTUwIDEzNDU2LTMKK2Fsd2F5cyBcdTcxNTEgMS0zNC00CithbHdheXMgXHU3MTUyIDEyNDYtNAorYWx3YXlzIFx1NzE1MyAxMjQtMTI0NTYtMworYWx3YXlzIFx1NzE1NCAxMjQtMjM0NS01CithbHdheXMgXHU3MTU1IDE1LTE2LTMKK2Fsd2F5cyBcdTcxNTYgMTM0NS0xMjQ1Ni00CithbHdheXMgXHU3MTU3IDEzNDUtMTI0NTYtNAorYWx3YXlzIFx1NzE1OCAxMi0xMjM2LTIKK2Fsd2F5cyBcdTcxNTkgMjM0NS0zCithbHdheXMgXHU3MTVBIDEzLTIzNS00CithbHdheXMgXHU3MTVCIDEzLTIzNS00CithbHdheXMgXHU3MTVDIDEyNTYtNQorYWx3YXlzIFx1NzE1RCAxMzQtMzU2LTUKK2Fsd2F5cyBcdTcxNUUgMjQtMzQ1LTUKK2Fsd2F5cyBcdTcxNUYgMTI0Ni01CithbHdheXMgXHU3MTYwIDM0Ni01CithbHdheXMgXHU3MTYxIDEzLTE0NTYtNQorYWx3YXlzIFx1NzE2MiAyNDUtMjM1LTIKK2Fsd2F5cyBcdTcxNjMgMTI0NS0xMjM1Ni0yCithbHdheXMgXHU3MTY0IDEzNC0zNTYtMgorYWx3YXlzIFx1NzE2NSAxMjM1LTEyNDU2LTUKK2Fsd2F5cyBcdTcxNjYgMTUtMTI1Ni00CithbHdheXMgXHU3MTY3IDEtMTQ2LTUKK2Fsd2F5cyBcdTcxNjggMTI0Ni0zCithbHdheXMgXHU3MTY5IDEyMzQ1LTEyMzYtMgorYWx3YXlzIFx1NzE2QSAyNDUtMjM0LTIKK2Fsd2F5cyBcdTcxNkIgMTUtMTI0Ni01CithbHdheXMgXHU3MTZDIDQ2LTIKK2Fsd2F5cyBcdTcxNkQgMTQtMzQ2LTUKK2Fsd2F5cyBcdTcxNkUgMS0zNC00CithbHdheXMgXHU3MTZGIDEzLTM0Ni0zCithbHdheXMgXHU3MTcwIDEzLTE0Ni01CithbHdheXMgXHU3MTcxIDEzLTM1LTMKK2Fsd2F5cyBcdTcxNzIgMTM1LTE0Ni0zCithbHdheXMgXHU3MTczIDEyMzUtMzQtMgorYWx3YXlzIFx1NzE3NCAyNTYtMworYWx3YXlzIFx1NzE3NSAxNS0yMzQ1Ni0zCithbHdheXMgXHU3MTc2IDI0LTE1Ni01CithbHdheXMgXHU3MTc3IDE0LTQ2LTUKK2Fsd2F5cyBcdTcxNzggMTM1LTIzNDUtMworYWx3YXlzIFx1NzE3OSAxMy0xMjM1Ni01CithbHdheXMgXHU3MTdBIDEyNC0xMjQ2LTUKK2Fsd2F5cyBcdTcxN0IgMTI0LTEzNDYtMgorYWx3YXlzIFx1NzE3QyAxMi0xNDYtNAorYWx3YXlzIFx1NzE3RCAyNC0xMjM2LTMKK2Fsd2F5cyBcdTcxN0UgMTM2LTMKK2Fsd2F5cyBcdTcxN0YgMTM1LTEyNi0yCithbHdheXMgXHU3MTgwIDEyMzUtNDU2LTQKK2Fsd2F5cyBcdTcxODEgMTUtMzQ2LTIKK2Fsd2F5cyBcdTcxODIgMTUtMTYtNQorYWx3YXlzIFx1NzE4MyAzNC01CithbHdheXMgXHU3MTg0IDE1LTE2LTIKK2Fsd2F5cyBcdTcxODUgMjU2LTMKK2Fsd2F5cyBcdTcxODYgMTIzNS0yMzQ2LTIKK2Fsd2F5cyBcdTcxODcgMTUtMjQ2LTMKK2Fsd2F5cyBcdTcxODggMTUtMTYtMworYWx3YXlzIFx1NzE4OSAyNTYtMgorYWx3YXlzIFx1NzE4QSAxNS0yMzUtMgorYWx3YXlzIFx1NzE4QiAxMzQ1LTI0NTYtMgorYWx3YXlzIFx1NzE4QyAyNC0xMjM2LTUKK2Fsd2F5cyBcdTcxOEQgMTUtMjM1LTIKK2Fsd2F5cyBcdTcxOEUgMjQ2LTUKK2Fsd2F5cyBcdTcxOEYgMTUtMjU2LTMKK2Fsd2F5cyBcdTcxOTAgMTM0LTEzNDU2LTIKK2Fsd2F5cyBcdTcxOTEgMTQtMjM0NS0yCithbHdheXMgXHU3MTkyIDEzNDU2LTIKK2Fsd2F5cyBcdTcxOTMgMzQtNAorYWx3YXlzIFx1NzE5NCAxMjQ1LTEyMzQ2LTIKK2Fsd2F5cyBcdTcxOTUgMTMtMTIzNDYtNQorYWx3YXlzIFx1NzE5NiAyMzQ1LTUKK2Fsd2F5cyBcdTcxOTcgMjQ1LTQ2LTUKK2Fsd2F5cyBcdTcxOTggMTQtMjM0LTMKK2Fsd2F5cyBcdTcxOTkgMTUtMTYtMworYWx3YXlzIFx1NzE5QSAxMzUtMTYtNQorYWx3YXlzIFx1NzE5QiAxMzUtMjQ2LTMKK2Fsd2F5cyBcdTcxOUMgMTI1LTEyMzQ2LTQKK2Fsd2F5cyBcdTcxOUQgMTQtMzQtNQorYWx3YXlzIFx1NzE5RSAxMy0yMzQ1LTMKK2Fsd2F5cyBcdTcxOUYgMjQtMzQtMgorYWx3YXlzIFx1NzFBMCAxNi01CithbHdheXMgXHU3MUExIDE0LTEyMzU2LTIKK2Fsd2F5cyBcdTcxQTIgMTIzNDUtMTM1Ni0zCithbHdheXMgXHU3MUEzIDE1LTEyNDYtMworYWx3YXlzIFx1NzFBNCAxNi01CithbHdheXMgXHU3MUE1IDEyNC0xMjM0Ni0zCithbHdheXMgXHU3MUE2IDEzLTIzNi0yCithbHdheXMgXHU3MUE3IDEyNS0xMjM0Ni0zCithbHdheXMgXHU3MUE4IDI1Ni01CithbHdheXMgXHU3MUE5IDEyMzUtMzQtNQorYWx3YXlzIFx1NzFBQSAxNi0yCithbHdheXMgXHU3MUFCIDEtMTU2LTUKK2Fsd2F5cyBcdTcxQUMgMTQ2LTIKK2Fsd2F5cyBcdTcxQUQgMTI0Ni01CithbHdheXMgXHU3MUFFIDE0LTI0Ni0yCithbHdheXMgXHU3MUFGIDEyMzUtMTIzNi01CithbHdheXMgXHU3MUIwIDEyMzU2LTMKK2Fsd2F5cyBcdTcxQjEgMTI0NS0yMzQ2LTUKK2Fsd2F5cyBcdTcxQjIgMTMtMjM1LTQKK2Fsd2F5cyBcdTcxQjMgMTM0LTEyMzYtNQorYWx3YXlzIFx1NzFCNCAxMjMtMTIzNDU2LTMKK2Fsd2F5cyBcdTcxQjUgMjQtMTM0Ni0zCithbHdheXMgXHU3MUI2IDI0NS0xMjQ1Ni01CithbHdheXMgXHU3MUI3IDEyNS0xMzU2LTMKK2Fsd2F5cyBcdTcxQjggMTMtMjM0NS0zCithbHdheXMgXHU3MUI5IDE1LTE2LTMKK2Fsd2F5cyBcdTcxQkEgMTUtMTYtMworYWx3YXlzIFx1NzFCQiAxNS0xNi0zCithbHdheXMgXHU3MUJDIDE2LTUKK2Fsd2F5cyBcdTcxQkQgMTUtMjQ2LTUKK2Fsd2F5cyBcdTcxQkUgMTItMTU2LTUKK2Fsd2F5cyBcdTcxQkYgMTIzNS00NTYtMgorYWx3YXlzIFx1NzFDMCAxMi0xMjM2LTQKK2Fsd2F5cyBcdTcxQzEgMzQ2LTUKK2Fsd2F5cyBcdTcxQzIgMjQ1LTIzNDUtMgorYWx3YXlzIFx1NzFDMyAxMjQ1LTEyMzYtMgorYWx3YXlzIFx1NzFDNCAyMzQ1LTUKK2Fsd2F5cyBcdTcxQzUgMTUtMjU2LTIKK2Fsd2F5cyBcdTcxQzYgMjQ1LTI0Ni0yCithbHdheXMgXHU3MUM3IDEyNS0xMjM0NTYtNQorYWx3YXlzIFx1NzFDOCAxNDUtMTM1Ni0zCithbHdheXMgXHU3MUM5IDE0NS0xMjM0NTYtNQorYWx3YXlzIFx1NzFDQSAyNC0xMzYtMworYWx3YXlzIFx1NzFDQiAxMy0yNDYtMworYWx3YXlzIFx1NzFDQyAxMjM0NS0xMzYtMgorYWx3YXlzIFx1NzFDRCAxNS0xNTYtMworYWx3YXlzIFx1NzFDRSAxNC0yNDYtNQorYWx3YXlzIFx1NzFDRiAxMjU2LTUKK2Fsd2F5cyBcdTcxRDAgMTQtMTQ1Ni0yCithbHdheXMgXHU3MUQxIDEyNC0xMjM0Ni0yCithbHdheXMgXHU3MUQyIDI0LTE0Ni0zCithbHdheXMgXHU3MUQzIDEyMzQ1LTEzNi0zCithbHdheXMgXHU3MUQ0IDEyMzQ1LTEyMzYtMgorYWx3YXlzIFx1NzFENSAyMzQ1LTUKK2Fsd2F5cyBcdTcxRDYgMTUtMjU2LTIKK2Fsd2F5cyBcdTcxRDcgMTQtMTIzNi01CithbHdheXMgXHU3MUQ4IDEzNC0zNTYtNAorYWx3YXlzIFx1NzFEOSAxMjQtMTM0Ni01CithbHdheXMgXHU3MURBIDE2LTMKK2Fsd2F5cyBcdTcxREIgMTMtMTM0NTYtNAorYWx3YXlzIFx1NzFEQyAxMzQtMTM2LTUKK2Fsd2F5cyBcdTcxREQgMTMtMTQ1Ni00CithbHdheXMgXHU3MURFIDEzLTI0Ni00CithbHdheXMgXHU3MURGIDEzNDU2LTIKK2Fsd2F5cyBcdTcxRTAgMTI1Ni01CithbHdheXMgXHU3MUUxIDE2LTUKK2Fsd2F5cyBcdTcxRTIgMTUtMjM2LTIKK2Fsd2F5cyBcdTcxRTMgMTQtMTIzNi0yCithbHdheXMgXHU3MUU0IDEyNC0yNDU2LTUKK2Fsd2F5cyBcdTcxRTUgMTI1LTE0Ni01CithbHdheXMgXHU3MUU2IDI0NS0xMjM2LTUKK2Fsd2F5cyBcdTcxRTcgMTUtMTI0Ni01CithbHdheXMgXHU3MUU4IDE1LTE2LTMKK2Fsd2F5cyBcdTcxRTkgMjQ1LTIzNi01CithbHdheXMgXHU3MUVBIDI0NS0xMjM0Ni0zCithbHdheXMgXHU3MUVCIDE0LTIzNDUtMgorYWx3YXlzIFx1NzFFQyAxMjM1LTEyNDYtNAorYWx3YXlzIFx1NzFFRCAxLTM0LTIKK2Fsd2F5cyBcdTcxRUUgMTUtMzQ2LTUKK2Fsd2F5cyBcdTcxRUYgMTQtMTM0NTYtMgorYWx3YXlzIFx1NzFGMCAxMjQ2LTMKK2Fsd2F5cyBcdTcxRjEgMTYtNQorYWx3YXlzIFx1NzFGMiAxNS0zNDYtMgorYWx3YXlzIFx1NzFGMyAxLTE0Ni01CithbHdheXMgXHU3MUY0IDEyMzUtMTI0Ni01CithbHdheXMgXHU3MUY1IDE0NS0zNDUtMgorYWx3YXlzIFx1NzFGNiAxMzQ1LTEyMzQ2LTIKK2Fsd2F5cyBcdTcxRjcgMTQtMTIzNi0yCithbHdheXMgXHU3MUY4IDEyNDUtMzQtMgorYWx3YXlzIFx1NzFGOSAxNS0yMzQ1LTQKK2Fsd2F5cyBcdTcxRkEgMTIzLTE0Ni00CithbHdheXMgXHU3MUZCIDE1LTI1Ni0zCithbHdheXMgXHU3MUZDIDEzLTE0NTYtNQorYWx3YXlzIFx1NzFGRCAxMi0xMjM1Ni0yCithbHdheXMgXHU3MUZFIDE0NS0xNDYtNQorYWx3YXlzIFx1NzFGRiAyNDYtNQorYWx3YXlzIFx1NzIwMCAxMjM1LTIzNDYtNQorYWx3YXlzIFx1NzIwMSAxNC0xMjM2LTUKK2Fsd2F5cyBcdTcyMDIgMTM1LTI0Ni0zCithbHdheXMgXHU3MjAzIDEyNDUtMTIzNDYtMgorYWx3YXlzIFx1NzIwNCAxNC0xNi01CithbHdheXMgXHU3MjA1IDEzNC0xMjYtNQorYWx3YXlzIFx1NzIwNiAxMzUtMTQ2LTUKK2Fsd2F5cyBcdTcyMDcgMTI0NS0yNS01CithbHdheXMgXHU3MjA4IDE0LTEyNTYtMgorYWx3YXlzIFx1NzIwOSAxNC0zNDUtNQorYWx3YXlzIFx1NzIwQSAxNDYtMgorYWx3YXlzIFx1NzIwQiAxNS0yNTYtNQorYWx3YXlzIFx1NzIwQyAxMjMtNDU2LTUKK2Fsd2F5cyBcdTcyMEQgMjQtMjUtNQorYWx3YXlzIFx1NzIwRSAxNC0yNDYtMgorYWx3YXlzIFx1NzIwRiAxNC0xNi01CithbHdheXMgXHU3MjEwIDE0LTM0LTIKK2Fsd2F5cyBcdTcyMTEgMTMtMjM2LTIKK2Fsd2F5cyBcdTcyMTIgMTQtMjQ2LTUKK2Fsd2F5cyBcdTcyMTMgMjM0NS01CithbHdheXMgXHU3MjE0IDE1LTE2LTMKK2Fsd2F5cyBcdTcyMTUgMTUtMzQ2LTUKK2Fsd2F5cyBcdTcyMTYgMTQtMTIzNDYtMgorYWx3YXlzIFx1NzIxNyAzNDYtNQorYWx3YXlzIFx1NzIxOCAyNDUtMTIzNi01CithbHdheXMgXHU3MjE5IDEyNDUtMTM0Ni00CithbHdheXMgXHU3MjFBIDIzNi01CithbHdheXMgXHU3MjFCIDE0LTEyMzYtNQorYWx3YXlzIFx1NzIxQyAyNDUtMTIzNDYtMgorYWx3YXlzIFx1NzIxRCAxMy0yMzYtMgorYWx3YXlzIFx1NzIxRSAxMjQtMTIzNDYtMgorYWx3YXlzIFx1NzIxRiAxMy0xMjQ1Ni01CithbHdheXMgXHU3MjIwIDI0NS0xMjU2LTIKK2Fsd2F5cyBcdTcyMjEgMTItMjM0Ni01CithbHdheXMgXHU3MjIyIDEzNC0xNi0yCithbHdheXMgXHU3MjIzIDEyNC0xMzQ2LTQKK2Fsd2F5cyBcdTcyMjQgMTQtMTIzNi01CithbHdheXMgXHU3MjI1IDEtMzQtMgorYWx3YXlzIFx1NzIyNiAxNC0xMjM2LTQKK2Fsd2F5cyBcdTcyMjcgMTQtMTM0NTYtMgorYWx3YXlzIFx1NzIyOCAyNDUtMTI0NTYtNQorYWx3YXlzIFx1NzIyOSAxMjU2LTUKK2Fsd2F5cyBcdTcyMkEgMS0zNS00CithbHdheXMgXHU3MjJCIDEtMzUtNAorYWx3YXlzIFx1NzIyQyAxMjM0LTM0NS0yCithbHdheXMgXHU3MjJEIDEtMTM1Ni0zCithbHdheXMgXHU3MjJFIDEyMzQtMTQ2LTIKK2Fsd2F5cyBcdTcyMkYgMTItMTM1Ni0zCithbHdheXMgXHU3MjMwIDQ1LTIKK2Fsd2F5cyBcdTcyMzEgMjQ1Ni01CithbHdheXMgXHU3MjMyIDEyNDYtMgorYWx3YXlzIFx1NzIzMyAxMjM1LTEyMzYtMgorYWx3YXlzIFx1NzIzNCAxMy0yMzYtMgorYWx3YXlzIFx1NzIzNSAxMy0yMzYtMgorYWx3YXlzIFx1NzIzNiAxMjM0NS0zNC01CithbHdheXMgXHU3MjM3IDM0Ni0yCithbHdheXMgXHU3MjM4IDEzNS0zNDUtNQorYWx3YXlzIFx1NzIzOSAxNDUtMzQ2LTMKK2Fsd2F5cyBcdTcyM0EgMzQ2LTIKK2Fsd2F5cyBcdTcyM0IgMjQ2LTIKK2Fsd2F5cyBcdTcyM0MgMTI1LTM0LTQKK2Fsd2F5cyBcdTcyM0QgMjQtNDU2LTQKK2Fsd2F5cyBcdTcyM0UgMTU2LTQKK2Fsd2F5cyBcdTcyM0YgMjQ1LTQ2LTIKK2Fsd2F5cyBcdTcyNDAgMTItNDU2LTIKK2Fsd2F5cyBcdTcyNDEgMTMtMjM0Ni0zCithbHdheXMgXHU3MjQyIDEyNS0xMzQ2LTMKK2Fsd2F5cyBcdTcyNDMgMTQ1LTM0Ni0yCithbHdheXMgXHU3MjQ0IDI0NS00Ni0zCithbHdheXMgXHU3MjQ1IDIzNS0yCithbHdheXMgXHU3MjQ2IDI0NS00Ni0yCithbHdheXMgXHU3MjQ3IDEyMzQtMjM0NS01CithbHdheXMgXHU3MjQ4IDEzNS0xMjM2LTQKK2Fsd2F5cyBcdTcyNDkgMTIzNC0xMjM2LTUKK2Fsd2F5cyBcdTcyNEEgMjQtMTQ2LTIKK2Fsd2F5cyBcdTcyNEIgMTMtMjM0NS0zCithbHdheXMgXHU3MjRDIDEyMzQtMjQ1Ni0yCithbHdheXMgXHU3MjREIDE0NS0zNC0yCithbHdheXMgXHU3MjRFIDEyLTQ1Ni0zCithbHdheXMgXHU3MjRGIDEyNTYtNQorYWx3YXlzIFx1NzI1MCAxLTM0NS0yCithbHdheXMgXHU3MjUxIDEzNS0yMzQ1LTMKK2Fsd2F5cyBcdTcyNTIgMTQ1LTM0Ni0yCithbHdheXMgXHU3MjUzIDEzNS0xMzQ2LTQKK2Fsd2F5cyBcdTcyNTQgMTM1LTEyNi0yCithbHdheXMgXHU3MjU1IDEyLTQ1Ni0zCithbHdheXMgXHU3MjU2IDIzNC00CithbHdheXMgXHU3MjU3IDIzNC00CithbHdheXMgXHU3MjU4IDE0NS0zNC0yCithbHdheXMgXHU3MjU5IDIzNDU2LTIKK2Fsd2F5cyBcdTcyNUEgMTItMTM1Ni01CithbHdheXMgXHU3MjVCIDEzNDUtMjM0LTIKK2Fsd2F5cyBcdTcyNUMgMTM0NS0yMzQtMgorYWx3YXlzIFx1NzI1RCAxMjM0LTE0NTYtNQorYWx3YXlzIFx1NzI1RSAxMy0yMzQtMworYWx3YXlzIFx1NzI1RiAxMzQtMTIzNTYtMgorYWx3YXlzIFx1NzI2MCAxMjQtMzQ1Ny0zCithbHdheXMgXHU3MjYxIDEzNC0zNC00CithbHdheXMgXHU3MjYyIDE0LTE0Ni0yCithbHdheXMgXHU3MjYzIDEyNDUtMTM2LTUKK2Fsd2F5cyBcdTcyNjQgMTM0LTEzNDYtMgorYWx3YXlzIFx1NzI2NSAxMjM0NS0xMzQ2LTMKK2Fsd2F5cyBcdTcyNjYgMTM0LTE0Ni0yCithbHdheXMgXHU3MjY3IDEzNC0zNC01CithbHdheXMgXHU3MjY4IDEzLTEzNDYtMworYWx3YXlzIFx1NzI2OSAzNC01CithbHdheXMgXHU3MjZBIDIzNDUtNQorYWx3YXlzIFx1NzI2QiAxMy0yMzQ2LTMKK2Fsd2F5cyBcdTcyNkMgMTM1LTM1Ni01CithbHdheXMgXHU3MjZEIDE1LTE1Ni01CithbHdheXMgXHU3MjZFIDEzLTIzNDUtNQorYWx3YXlzIFx1NzI2RiAxMy0zNC00CithbHdheXMgXHU3MjcwIDIzNC01CithbHdheXMgXHU3MjcxIDEzLTIzNDYtMworYWx3YXlzIFx1NzI3MiAyNC0xMzU2LTMKK2Fsd2F5cyBcdTcyNzMgMTM0LTM0LTQKK2Fsd2F5cyBcdTcyNzQgMTQ1LTE2LTQKK2Fsd2F5cyBcdTcyNzUgMjQ1LTIzNDUtMworYWx3YXlzIFx1NzI3NiAyNDUtNDUtNQorYWx3YXlzIFx1NzI3NyAyNDUtNDUtMgorYWx3YXlzIFx1NzI3OCAxMjUtMTU2LTUKK2Fsd2F5cyBcdTcyNzkgMTI0LTIzNDYtNQorYWx3YXlzIFx1NzI3QSAxNS0xNi0zCithbHdheXMgXHU3MjdCIDEzNC0xMzQ2LTIKK2Fsd2F5cyBcdTcyN0MgMTIzLTEzNTYtMworYWx3YXlzIFx1NzI3RCAyNDUtMjM0NS0zCithbHdheXMgXHU3MjdFIDM0LTIKK2Fsd2F5cyBcdTcyN0YgMTMtMzQtNQorYWx3YXlzIFx1NzI4MCAxNS0xNi0zCithbHdheXMgXHU3MjgxIDE0LTE2LTIKK2Fsd2F5cyBcdTcyODIgMTQtMTYtMgorYWx3YXlzIFx1NzI4MyAxMjM0LTEyMzU2LTQKK2Fsd2F5cyBcdTcyODQgMTMtMTYtMworYWx3YXlzIFx1NzI4NSAxMy0xMzQ2LTMKK2Fsd2F5cyBcdTcyODYgMS0xNTYtMgorYWx3YXlzIFx1NzI4NyAxMzUtMTM2LTMKK2Fsd2F5cyBcdTcyODggMjQ1LTQ1LTIKK2Fsd2F5cyBcdTcyODkgMTI0NS0xMjM0NTYtMgorYWx3YXlzIFx1NzI4QSAxNDUtMzQtMgorYWx3YXlzIFx1NzI4QiAxMy0xMjU2LTUKK2Fsd2F5cyBcdTcyOEMgMTMtMjM0NTYtMworYWx3YXlzIFx1NzI4RCAxMy0yMzQ1LTMKK2Fsd2F5cyBcdTcyOEUgMTIzNDUtMTM1Ni0zCithbHdheXMgXHU3MjhGIDEyMzQtMjM0NS0zCithbHdheXMgXHU3MjkwIDEyMy0yMzQ2LTMKK2Fsd2F5cyBcdTcyOTEgMTMtMTI1Ni0yCithbHdheXMgXHU3MjkyIDEyMy0xNDYtNQorYWx3YXlzIFx1NzI5MyAxMi0zNC0yCithbHdheXMgXHU3Mjk0IDE1LTE2LTUKK2Fsd2F5cyBcdTcyOTUgMTM1LTM1Ni01CithbHdheXMgXHU3Mjk2IDE0LTI1LTUKK2Fsd2F5cyBcdTcyOTcgMTMtMzQ2LTUKK2Fsd2F5cyBcdTcyOTggMTM0LTM0NS0yCithbHdheXMgXHU3Mjk5IDE1LTEyMzYtMworYWx3YXlzIFx1NzI5QSAxMjQ2LTUKK2Fsd2F5cyBcdTcyOUIgMTQtMTYtMgorYWx3YXlzIFx1NzI5QyAxNDUtMTIzNDU2LTMKK2Fsd2F5cyBcdTcyOUQgMTI0LTEyMzQ2LTIKK2Fsd2F5cyBcdTcyOUUgMjQ1LTI0Ni0yCithbHdheXMgXHU3MjlGIDEzLTQ2LTUKK2Fsd2F5cyBcdTcyQTAgMTUtMTYtMworYWx3YXlzIFx1NzJBMSAxNC0xNi01CithbHdheXMgXHU3MkEyIDE0NS0zNC0yCithbHdheXMgXHU3MkEzIDE0LTM0Ni01CithbHdheXMgXHU3MkE0IDEyMzQtMTYtMgorYWx3YXlzIFx1NzJBNSAxMjM0LTI0Ni00CithbHdheXMgXHU3MkE2IDEzNS0xNDYtNQorYWx3YXlzIFx1NzJBNyAxNS0xNi0zCithbHdheXMgXHU3MkE4IDEyLTEyMzU2LTMKK2Fsd2F5cyBcdTcyQTkgMTI0Ni0yCithbHdheXMgXHU3MkFBIDEyMy0xMjQ2LTIKK2Fsd2F5cyBcdTcyQUIgMTItMTIzNTYtMworYWx3YXlzIFx1NzJBQyAyNDUtNDUtNAorYWx3YXlzIFx1NzJBRCAyNDUtNDUtNAorYWx3YXlzIFx1NzJBRSAxMzUtMzQ1LTIKK2Fsd2F5cyBcdTcyQUYgMTIzNDUtMTIzNi01CithbHdheXMgXHU3MkIwIDI0NS0yMzQtMgorYWx3YXlzIFx1NzJCMSAxMy0xNi00CithbHdheXMgXHU3MkIyIDI0NS0yNDU2LTIKK2Fsd2F5cyBcdTcyQjMgMS0yNS0yCithbHdheXMgXHU3MkI0IDEyMzUtMTIzNi0zCithbHdheXMgXHU3MkI1IDEzLTIzNDYtMworYWx3YXlzIFx1NzJCNiAxLTQ1Ni01CithbHdheXMgXHU3MkI3IDEzLTQ1Ni00CithbHdheXMgXHU3MkI4IDEzNC0zNDUtNAorYWx3YXlzIFx1NzJCOSAyMzQtMgorYWx3YXlzIFx1NzJCQSAxMjMtMTM0Ni01CithbHdheXMgXHU3MkJCIDEzNS0xMjYtMgorYWx3YXlzIFx1NzJCQyAxMjM1LTEyMzU2LTQKK2Fsd2F5cyBcdTcyQkQgMjM0NTYtMgorYWx3YXlzIFx1NzJCRSAxNDU2LTIKK2Fsd2F5cyBcdTcyQkYgMTIzNS0xMjQ1Ni0zCithbHdheXMgXHU3MkMwIDEtNDU2LTUKK2Fsd2F5cyBcdTcyQzEgMjU2LTQKK2Fsd2F5cyBcdTcyQzIgMTIzLTQ1Ni0yCithbHdheXMgXHU3MkMzIDEzNDUtMjM0LTQKK2Fsd2F5cyBcdTcyQzQgMTQ1LTE2LTIKK2Fsd2F5cyBcdTcyQzUgMjQ1LTEzNDU2LTMKK2Fsd2F5cyBcdTcyQzYgMS0xMjM0Ni01CithbHdheXMgXHU3MkM3IDEzNC0zNC01CithbHdheXMgXHU3MkM4IDEzNS0zNTYtNQorYWx3YXlzIFx1NzJDOSAxMjM0LTE2LTMKK2Fsd2F5cyBcdTcyQ0EgMTMtMTI1Ni0yCithbHdheXMgXHU3MkNCIDE2LTIKK2Fsd2F5cyBcdTcyQ0MgMjQtMTM1Ni0zCithbHdheXMgXHU3MkNEIDEyMzQtMTQ2LTIKK2Fsd2F5cyBcdTcyQ0UgMTUtMjM0NTYtMgorYWx3YXlzIFx1NzJDRiAxMjQtMjUtMgorYWx3YXlzIFx1NzJEMCAxMjM1LTM0LTIKK2Fsd2F5cyBcdTcyRDEgMTQtMTM0NTYtMgorYWx3YXlzIFx1NzJEMiAxMjM0NS0zNTYtNQorYWx3YXlzIFx1NzJEMyAxMjM0LTE2LTMKK2Fsd2F5cyBcdTcyRDQgMTM0NS0xNi00CithbHdheXMgXHU3MkQ1IDE0Ni00CithbHdheXMgXHU3MkQ2IDIzNC01CithbHdheXMgXHU3MkQ3IDEzLTEyMzU2LTQKK2Fsd2F5cyBcdTcyRDggMjM2LTUKK2Fsd2F5cyBcdTcyRDkgMTMtMTI1Ni0zCithbHdheXMgXHU3MkRBIDE0NS0xMjM2LTUKK2Fsd2F5cyBcdTcyREIgMTIzNC0xMjYtNQorYWx3YXlzIFx1NzJEQyAxMy0zNC00CithbHdheXMgXHU3MkREIDE1LTIzNDUtNAorYWx3YXlzIFx1NzJERSAxMzQ1LTEzNDU2LTIKK2Fsd2F5cyBcdTcyREYgMTIzNS0xMjQ1Ni0yCithbHdheXMgXHU3MkUwIDEyMzUtMTM2LTQKK2Fsd2F5cyBcdTcyRTEgMTMtMjQ2LTQKK2Fsd2F5cyBcdTcyRTIgMTIzNS0yMzQ2LTIKK2Fsd2F5cyBcdTcyRTMgMS0xNDYtNQorYWx3YXlzIFx1NzJFNCAxMy0xNi0yCithbHdheXMgXHU3MkU1IDE1LTI1Ni0yCithbHdheXMgXHU3MkU2IDI0LTEyMzYtMworYWx3YXlzIFx1NzJFNyAxMjQtMzQ1LTUKK2Fsd2F5cyBcdTcyRTggMTI0NS0xMjM0Ni0yCithbHdheXMgXHU3MkU5IDI0LTEyMzU2LTUKK2Fsd2F5cyBcdTcyRUEgMTI0LTEyMzQ2LTMKK2Fsd2F5cyBcdTcyRUIgMTQtMTQ2LTQKK2Fsd2F5cyBcdTcyRUMgMTQ1LTM0LTIKK2Fsd2F5cyBcdTcyRUQgMTUtMjM0NTYtMgorYWx3YXlzIFx1NzJFRSAyNC0xNTYtMworYWx3YXlzIFx1NzJFRiAxMjMtMjM1Ni01CithbHdheXMgXHU3MkYwIDEtMTM1Ni0zCithbHdheXMgXHU3MkYxIDEyNTYtNQorYWx3YXlzIFx1NzJGMiAxNS0xMjM0NTYtMworYWx3YXlzIFx1NzJGMyAxMjU2LTIKK2Fsd2F5cyBcdTcyRjQgMTM1LTE2LTUKK2Fsd2F5cyBcdTcyRjUgMTM0LTEzNDYtMgorYWx3YXlzIFx1NzJGNiAxNS0xNi0zCithbHdheXMgXHU3MkY3IDEzLTQ1LTUKK2Fsd2F5cyBcdTcyRjggMTQtMTYtMgorYWx3YXlzIFx1NzJGOSAxNS0yMzQ1Ni0yCithbHdheXMgXHU3MkZBIDE0NTYtMgorYWx3YXlzIFx1NzJGQiAxNS0xMjQ1Ni0zCithbHdheXMgXHU3MkZDIDE0LTEzNDYtMgorYWx3YXlzIFx1NzJGRCAxMzUtMzU2LTUKK2Fsd2F5cyBcdTcyRkUgMS0xNTYtNQorYWx3YXlzIFx1NzJGRiAyMzQ1LTIKK2Fsd2F5cyBcdTczMDAgMjQtMzQ1LTMKK2Fsd2F5cyBcdTczMDEgMTQtMTYtNQorYWx3YXlzIFx1NzMwMiAxMjM1LTEyMzYtNQorYWx3YXlzIFx1NzMwMyAxNS0yMzQ1LTQKK2Fsd2F5cyBcdTczMDQgMTMtMTM0NTYtMworYWx3YXlzIFx1NzMwNSAxMjM0LTI0NTYtMgorYWx3YXlzIFx1NzMwNiAxMjM0NS0zNTYtMworYWx3YXlzIFx1NzMwNyAyNDYtMgorYWx3YXlzIFx1NzMwOCAxMzUtMzQ1LTUKK2Fsd2F5cyBcdTczMDkgMjQ1LTE2LTIKK2Fsd2F5cyBcdTczMEEgMTM0NS0xNi0yCithbHdheXMgXHU3MzBCIDEzNS0yNDYtMworYWx3YXlzIFx1NzMwQyAxNDU2LTUKK2Fsd2F5cyBcdTczMEQgMTQtMjQ1Ni0yCithbHdheXMgXHU3MzBFIDE1LTE2LTIKK2Fsd2F5cyBcdTczMEYgMTMtMjM0NS0zCithbHdheXMgXHU3MzEwIDI0NS00Ni0zCithbHdheXMgXHU3MzExIDEyMy0xMjM0NTYtMworYWx3YXlzIFx1NzMxMiAyMzQ1LTUKK2Fsd2F5cyBcdTczMTMgMTMtMjUtNAorYWx3YXlzIFx1NzMxNCAxMjUtMTIzNDYtNQorYWx3YXlzIFx1NzMxNSAxMzQtMTYtMgorYWx3YXlzIFx1NzMxNiAxMi0xMzQ2LTMKK2Fsd2F5cyBcdTczMTcgMTYtMworYWx3YXlzIFx1NzMxOCAxLTE1Ni01CithbHdheXMgXHU3MzE5IDEtMTM1Ni0zCithbHdheXMgXHU3MzFBIDIzNDU2LTIKK2Fsd2F5cyBcdTczMUIgMTM0LTEzNTYtNAorYWx3YXlzIFx1NzMxQyAyNDUtMjQ1Ni0zCithbHdheXMgXHU3MzFEIDI0NS0zNC01CithbHdheXMgXHU3MzFFIDI0LTIzNDYtMworYWx3YXlzIFx1NzMxRiAxNC0zNDYtNQorYWx3YXlzIFx1NzMyMCAxNDUtMjM0NS00CithbHdheXMgXHU3MzIxIDE0LTI1LTIKK2Fsd2F5cyBcdTczMjIgMTIzNS0zNC0yCithbHdheXMgXHU3MzIzIDEyNS0xMjM0Ni0zCithbHdheXMgXHU3MzI0IDEzLTE2LTUKK2Fsd2F5cyBcdTczMjUgMTI0Ni00CithbHdheXMgXHU3MzI2IDEyMzQ1LTEzNTYtMworYWx3YXlzIFx1NzMyNyAyNS0zCithbHdheXMgXHU3MzI4IDQ1LTIKK2Fsd2F5cyBcdTczMjkgMTUtMTM0NTYtMworYWx3YXlzIFx1NzMyQSAxLTM0LTMKK2Fsd2F5cyBcdTczMkIgMTM0LTE0Ni0zCithbHdheXMgXHU3MzJDIDEyNDYtNQorYWx3YXlzIFx1NzMyRCAxMi0xMjQ1Ni01CithbHdheXMgXHU3MzJFIDE1LTIzNDUtNQorYWx3YXlzIFx1NzMyRiAxMjQtMTI0NTYtMworYWx3YXlzIFx1NzMzMCAyMzQ1Ni01CithbHdheXMgXHU3MzMxIDEzNDUtMTQ2LTIKK2Fsd2F5cyBcdTczMzIgMTIzNS0yMzQ2LTUKK2Fsd2F5cyBcdTczMzMgMTMtMjM0NTYtMworYWx3YXlzIFx1NzMzNCAxMjM1LTEyMzU2LTIKK2Fsd2F5cyBcdTczMzUgMTM1LTIzNDUtMworYWx3YXlzIFx1NzMzNiAyMzQtMgorYWx3YXlzIFx1NzMzNyAyMzQtMgorYWx3YXlzIFx1NzMzOCAxMzQtMzU2LTIKK2Fsd2F5cyBcdTczMzkgMS0zNDUtMworYWx3YXlzIFx1NzMzQSAyNDYtMgorYWx3YXlzIFx1NzMzQiAxNS0xMjM0NTYtMworYWx3YXlzIFx1NzMzQyAxMzUtMTI2LTIKK2Fsd2F5cyBcdTczM0QgMTM0LTEzNDU2LTIKK2Fsd2F5cyBcdTczM0UgMTIzNS0zNS0yCithbHdheXMgXHU3MzNGIDQ1LTIKK2Fsd2F5cyBcdTczNDAgMTUtMTIzNTYtMworYWx3YXlzIFx1NzM0MSAxMzQtMzQ1LTQKK2Fsd2F5cyBcdTczNDIgNDUtMgorYWx3YXlzIFx1NzM0MyAxNDUtMjQ1Ni0zCithbHdheXMgXHU3MzQ0IDEyNTYtNQorYWx3YXlzIFx1NzM0NSAyNC0xNTYtMworYWx3YXlzIFx1NzM0NiAxMjM1LTE0Ni0yCithbHdheXMgXHU3MzQ3IDI0NS00Ni0zCithbHdheXMgXHU3MzQ4IDE2LTUKK2Fsd2F5cyBcdTczNDkgMS0xMzYtMworYWx3YXlzIFx1NzM0QSAxMi00NTYtNQorYWx3YXlzIFx1NzM0QiAxMjM1LTE0Ni0yCithbHdheXMgXHU3MzRDIDEzNC0xMjM2LTUKK2Fsd2F5cyBcdTczNEQgMTMtMTM0NTYtNQorYWx3YXlzIFx1NzM0RSAxMy00Ni00CithbHdheXMgXHU3MzRGIDEzNC0zNC0yCithbHdheXMgXHU3MzUwIDEtMTM0Ni0zCithbHdheXMgXHU3MzUxIDEyLTEyMzYtMgorYWx3YXlzIFx1NzM1MiAxNDYtMgorYWx3YXlzIFx1NzM1MyAxNDYtMgorYWx3YXlzIFx1NzM1NCAxMjM1LTE0Ni0yCithbHdheXMgXHU3MzU1IDI0NS0xMjQ2LTMKK2Fsd2F5cyBcdTczNTYgMTIzNDUtMTM2LTIKK2Fsd2F5cyBcdTczNTcgMTMtMjM2LTIKK2Fsd2F5cyBcdTczNTggMTM1LTE2LTUKK2Fsd2F5cyBcdTczNTkgMTM1LTE2LTUKK2Fsd2F5cyBcdTczNUEgMTIzNS00NTYtMgorYWx3YXlzIFx1NzM1QiAxMzUtMzQtNAorYWx3YXlzIFx1NzM1QyAxNC0xNDU2LTIKK2Fsd2F5cyBcdTczNUQgMTI1Ni01CithbHdheXMgXHU3MzVFIDEyNC0xMjM0Ni0yCithbHdheXMgXHU3MzVGIDI0Ni01CithbHdheXMgXHU3MzYwIDE0LTI0Ni0yCithbHdheXMgXHU3MzYxIDI0LTI1LTUKK2Fsd2F5cyBcdTczNjIgMTUtMjQ2LTMKK2Fsd2F5cyBcdTczNjMgMjQtMTIzNTYtNQorYWx3YXlzIFx1NzM2NCAxNDUtMTIzNDU2LTMKK2Fsd2F5cyBcdTczNjUgMTUtMTYtMgorYWx3YXlzIFx1NzM2NiAxMy0yMzQ2LTIKK2Fsd2F5cyBcdTczNjcgMTMtNDUtNQorYWx3YXlzIFx1NzM2OCAxNDUtMzQtMgorYWx3YXlzIFx1NzM2OSAxMjM1LTEyNDYtNQorYWx3YXlzIFx1NzM2QSAxMjMtMjM1Ni01CithbHdheXMgXHU3MzZCIDE1LTIzNDUtNAorYWx3YXlzIFx1NzM2QyAxNS0zNDYtNQorYWx3YXlzIFx1NzM2RCAxMjQtMzQ1LTUKK2Fsd2F5cyBcdTczNkUgMTUtMjM0NS00CithbHdheXMgXHU3MzZGIDE1LTI1Ni0zCithbHdheXMgXHU3MzcwIDEzNDUtMTM0NTYtMgorYWx3YXlzIFx1NzM3MSAxMjM0LTE0NTYtMgorYWx3YXlzIFx1NzM3MiAxMjM1LTI1LTUKK2Fsd2F5cyBcdTczNzMgMTM0NS0xMjM1Ni0yCithbHdheXMgXHU3Mzc0IDEzNC0xMzU2LTIKK2Fsd2F5cyBcdTczNzUgMTQtMzQ2LTUKK2Fsd2F5cyBcdTczNzYgMTM0NS0xNDYtMgorYWx3YXlzIFx1NzM3NyAxMy00NTYtNAorYWx3YXlzIFx1NzM3OCAyNC0xMjM1Ni01CithbHdheXMgXHU3Mzc5IDE0LTM0LTIKK2Fsd2F5cyBcdTczN0EgMTI0LTM0NS01CithbHdheXMgXHU3MzdCIDE1LTIzNDUtNQorYWx3YXlzIFx1NzM3QyAxMzQtMTYtMgorYWx3YXlzIFx1NzM3RCAxMjQ1LTEzNDYtMgorYWx3YXlzIFx1NzM3RSAxMjM1LTEyNDU2LTMKK2Fsd2F5cyBcdTczN0YgMTM0NS0xNDYtMgorYWx3YXlzIFx1NzM4MCAxNC0yNS0yCithbHdheXMgXHU3MzgxIDE1LTIzNDUtNAorYWx3YXlzIFx1NzM4MiAyNDUtMTYtMgorYWx3YXlzIFx1NzM4MyAxMy0yMzYtMgorYWx3YXlzIFx1NzM4NCAxNS00NS0yCithbHdheXMgXHU3Mzg1IDEzNC0yNDYtNQorYWx3YXlzIFx1NzM4NiAxMjUtMTU2LTMKK2Fsd2F5cyBcdTczODcgMTQtMTI1Ni01CithbHdheXMgXHU3Mzg4IDE0LTM0LTIKK2Fsd2F5cyBcdTczODkgMTI1Ni01CithbHdheXMgXHU3MzhBIDE1LTM0LTUKK2Fsd2F5cyBcdTczOEIgNDU2LTIKK2Fsd2F5cyBcdTczOEMgMjQ1LTIzNC0yCithbHdheXMgXHU3MzhEIDEzLTM0NS00CithbHdheXMgXHU3MzhFIDE0NS0xMzQ1Ni0zCithbHdheXMgXHU3MzhGIDE0LTIzNDYtNQorYWx3YXlzIFx1NzM5MCAxMzUtMzQ1LTMKK2Fsd2F5cyBcdTczOTEgMTMtMTYtMworYWx3YXlzIFx1NzM5MiAxMjM1LTEyMzQ2LTIKK2Fsd2F5cyBcdTczOTMgMTQ1LTE2LTUKK2Fsd2F5cyBcdTczOTQgMTItMTI0NTYtNQorYWx3YXlzIFx1NzM5NSAxMy0xMjM2LTMKK2Fsd2F5cyBcdTczOTYgMTMtMjM0LTQKK2Fsd2F5cyBcdTczOTcgMTI1Ni0yCithbHdheXMgXHU3Mzk4IDEzLTE2LTQKK2Fsd2F5cyBcdTczOTkgMTI1Ni0yCithbHdheXMgXHU3MzlBIDEyLTEzNDYtNQorYWx3YXlzIFx1NzM5QiAxMzQtMzQ1LTQKK2Fsd2F5cyBcdTczOUMgMTMtMTIzNDYtMworYWx3YXlzIFx1NzM5RCAzNC00CithbHdheXMgXHU3MzlFIDEyMzQ1LTM0LTMKK2Fsd2F5cyBcdTczOUYgMTIzNDU2LTIKK2Fsd2F5cyBcdTczQTAgMTMtMzQ2LTUKK2Fsd2F5cyBcdTczQTEgMjM0NTYtNQorYWx3YXlzIFx1NzNBMiAxMzUtMTQ1Ni0zCithbHdheXMgXHU3M0EzIDEzNS0yMzQ1LTUKK2Fsd2F5cyBcdTczQTQgMTM1LTEzNDYtNQorYWx3YXlzIFx1NzNBNSAyMzYtNQorYWx3YXlzIFx1NzNBNiAxMy0yMzYtMgorYWx3YXlzIFx1NzNBNyAyNTYtNAorYWx3YXlzIFx1NzNBOCAxMy0yMzYtMgorYWx3YXlzIFx1NzNBOSAxMjQ1Ni0yCithbHdheXMgXHU3M0FBIDEzLTIzNDUtMworYWx3YXlzIFx1NzNBQiAxMzQtMzU2LTIKK2Fsd2F5cyBcdTczQUMgMTQ1LTEyMzYtNAorYWx3YXlzIFx1NzNBRCAxMjM0LTE0NTYtMgorYWx3YXlzIFx1NzNBRSAxMjQ2LTQKK2Fsd2F5cyBcdTczQUYgMTIzNS0xMjQ1Ni0yCithbHdheXMgXHU3M0IwIDE1LTIzNDUtNQorYWx3YXlzIFx1NzNCMSAyNDUtNDYtMworYWx3YXlzIFx1NzNCMiAxNC0xMzQ1Ni0yCithbHdheXMgXHU3M0IzIDE0NS0yNDU2LTUKK2Fsd2F5cyBcdTczQjQgMTYtNQorYWx3YXlzIFx1NzNCNSAxMjM2LTIKK2Fsd2F5cyBcdTczQjYgMTIzNC0xMzQ1Ni0yCithbHdheXMgXHU3M0I3IDE0NS0yMzQ1LTUKK2Fsd2F5cyBcdTczQjggMTIzNDUtMzQtMgorYWx3YXlzIFx1NzNCOSAxNS00NS0yCithbHdheXMgXHU3M0JBIDE1LTE2LTQKK2Fsd2F5cyBcdTczQkIgMTM1LTEyNi0zCithbHdheXMgXHU3M0JDIDI0NS0xNTYtNAorYWx3YXlzIFx1NzNCRCAxMy0xMjM1Ni00CithbHdheXMgXHU3M0JFIDEzLTIzNDU2LTQKK2Fsd2F5cyBcdTczQkYgMjQtMTQ2LTIKK2Fsd2F5cyBcdTczQzAgMTIzNC0xMjYtNQorYWx3YXlzIFx1NzNDMSAyNDUtMTU2LTIKK2Fsd2F5cyBcdTczQzIgMTIzLTIzNDYtMworYWx3YXlzIFx1NzNDMyAxMjQ1LTEyMzYtNAorYWx3YXlzIFx1NzNDNCAyNC0xMzU2LTMKK2Fsd2F5cyBcdTczQzUgMjQtMTM2LTMKK2Fsd2F5cyBcdTczQzYgMTYtMgorYWx3YXlzIFx1NzNDNyAxMjUtMzQtNAorYWx3YXlzIFx1NzNDOCAxMy0yMzQ1Ni0zCithbHdheXMgXHU3M0M5IDEzNC0xNDU2LTIKK2Fsd2F5cyBcdTczQ0EgMjQtMTIzNi0zCithbHdheXMgXHU3M0NCIDE0LTIzNC00CithbHdheXMgXHU3M0NDIDEzNS0xNi01CithbHdheXMgXHU3M0NEIDEtMTM2LTMKK2Fsd2F5cyBcdTczQ0UgMS0xMzYtMworYWx3YXlzIFx1NzNDRiAxMy0yMzYtMgorYWx3YXlzIFx1NzNEMCAxMjM0NS0zNDUtNQorYWx3YXlzIFx1NzNEMSAxNC0xMjM0Ni0yCithbHdheXMgXHU3M0QyIDEzLTE0NTYtMworYWx3YXlzIFx1NzNEMyAxMy0yNDYtNQorYWx3YXlzIFx1NzNENCAxMy0yMzQ1LTUKK2Fsd2F5cyBcdTczRDUgMTQtMTYtNQorYWx3YXlzIFx1NzNENiAxMy00NTYtMworYWx3YXlzIFx1NzNENyAxNS0yMzQ1LTMKK2Fsd2F5cyBcdTczRDggMS0xMjM1Ni0zCithbHdheXMgXHU3M0Q5IDEzLTEyMzQ2LTQKK2Fsd2F5cyBcdTczREEgMjM0NS0zCithbHdheXMgXHU3M0RCIDE1LTIzNC01CithbHdheXMgXHU3M0RDIDQ2LTIKK2Fsd2F5cyBcdTczREQgMTUtMTI1Ni00CithbHdheXMgXHU3M0RFIDE0LTI1LTUKK2Fsd2F5cyBcdTczREYgMTUtMzQtNQorYWx3YXlzIFx1NzNFMCAxLTM0LTMKK2Fsd2F5cyBcdTczRTEgMjQ1LTE0NTYtMgorYWx3YXlzIFx1NzNFMiAxMjMtMTM2LTUKK2Fsd2F5cyBcdTczRTMgMTUtMjU2LTIKK2Fsd2F5cyBcdTczRTQgMTM1LTE0Ni00CithbHdheXMgXHU3M0U1IDE1Ni00CithbHdheXMgXHU3M0U2IDE1LTQ2LTUKK2Fsd2F5cyBcdTczRTcgMjQ2LTIKK2Fsd2F5cyBcdTczRTggMTUtMjM0NTYtMgorYWx3YXlzIFx1NzNFOSAxMjM1LTEzNTYtMgorYWx3YXlzIFx1NzNFQSAxMy0xMjQ2LTMKK2Fsd2F5cyBcdTczRUIgMTItMTIzNDYtMworYWx3YXlzIFx1NzNFQyAxNS0xMjU2LTUKK2Fsd2F5cyBcdTczRUQgMTM1LTEyMzYtMworYWx3YXlzIFx1NzNFRSAxMjM0LTM1Ni01CithbHdheXMgXHU3M0VGIDE0LTE0Ni00CithbHdheXMgXHU3M0YwIDE0NS0xMzQ2LTMKK2Fsd2F5cyBcdTczRjEgMTM0NTYtMworYWx3YXlzIFx1NzNGMiAxMjM1LTEyNDYtMworYWx3YXlzIFx1NzNGMyAxMjM0NTYtMgorYWx3YXlzIFx1NzNGNCAyMzQ2LTIKK2Fsd2F5cyBcdTczRjUgMTItMTM1Ni0yCithbHdheXMgXHU3M0Y2IDE0NS0xNi01CithbHdheXMgXHU3M0Y3IDM0LTQKK2Fsd2F5cyBcdTczRjggMzQtMgorYWx3YXlzIFx1NzNGOSAxMi0xMzU2LTIKK2Fsd2F5cyBcdTczRkEgMTMtMjU2LTUKK2Fsd2F5cyBcdTczRkIgMTM0LTM1Ni0yCithbHdheXMgXHU3M0ZDIDEzNS0zNTYtNQorYWx3YXlzIFx1NzNGRCAxMjQtMTM0NTYtNAorYWx3YXlzIFx1NzNGRSAxNS0yMzQ1LTUKK2Fsd2F5cyBcdTczRkYgMTItMjUtNQorYWx3YXlzIFx1NzQwMCAxMjM1LTEyMzYtNQorYWx3YXlzIFx1NzQwMSAxNS00NS0yCithbHdheXMgXHU3NDAyIDIzNDUtMgorYWx3YXlzIFx1NzQwMyAyNDUtMjM0LTIKK2Fsd2F5cyBcdTc0MDQgMjQ1LTQ1LTQKK2Fsd2F5cyBcdTc0MDUgMTQtMTM0Ni0yCithbHdheXMgXHU3NDA2IDE0LTE2LTQKK2Fsd2F5cyBcdTc0MDcgMTUtMjM0LTUKK2Fsd2F5cyBcdTc0MDggMTIzNDUtMzQtMgorYWx3YXlzIFx1NzQwOSAxNC0yMzQtMgorYWx3YXlzIFx1NzQwQSAyMzQ1Ni0yCithbHdheXMgXHU3NDBCIDE1LTE2LTMKK2Fsd2F5cyBcdTc0MEMgMTQtMTM0NTYtMgorYWx3YXlzIFx1NzQwRCAxNC0xNi01CithbHdheXMgXHU3NDBFIDEzLTE0NTYtNQorYWx3YXlzIFx1NzQwRiAxNC0yMzQ1LTQKK2Fsd2F5cyBcdTc0MTAgMTUtMjUtNAorYWx3YXlzIFx1NzQxMSAxNS0yNS00CithbHdheXMgXHU3NDEyIDEyMzQ1LTEzNTYtMworYWx3YXlzIFx1NzQxMyAxMjQ1Ni0yCithbHdheXMgXHU3NDE0IDE0NS0yMzQ1LTUKK2Fsd2F5cyBcdTc0MTUgMTIzNC0xNDU2LTIKK2Fsd2F5cyBcdTc0MTYgMS0xMjM2LTQKK2Fsd2F5cyBcdTc0MTcgMjQ1LTEyNDYtNQorYWx3YXlzIFx1NzQxOCAxMzQtMTQ1Ni0yCithbHdheXMgXHU3NDE5IDEyNTYtNQorYWx3YXlzIFx1NzQxQSAxMy0xMjU2LTMKK2Fsd2F5cyBcdTc0MUIgMTItMTM2LTMKK2Fsd2F5cyBcdTc0MUMgMTQtMjQ1Ni0yCithbHdheXMgXHU3NDFEIDEzNC0xNDU2LTIKK2Fsd2F5cyBcdTc0MUUgMjQtMTM1Ni01CithbHdheXMgXHU3NDFGIDEyNDYtMgorYWx3YXlzIFx1NzQyMCAxNDUtMjM0NS00CithbHdheXMgXHU3NDIxIDEyLTM0LTUKK2Fsd2F5cyBcdTc0MjIgMS0yNS0yCithbHdheXMgXHU3NDIzIDEyMzQtMzU2LTQKK2Fsd2F5cyBcdTc0MjQgMTItMTM1Ni0zCithbHdheXMgXHU3NDI1IDEyMzUtMzQtNAorYWx3YXlzIFx1NzQyNiAyNDUtMTYtMgorYWx3YXlzIFx1NzQyNyAyMzQ2LTUKK2Fsd2F5cyBcdTc0MjggMTIzLTEyMzQ1Ni0zCithbHdheXMgXHU3NDI5IDEyLTEzNDYtMworYWx3YXlzIFx1NzQyQSAyNDUtMTYtMgorYWx3YXlzIFx1NzQyQiAxMzUtMTM1Ni00CithbHdheXMgXHU3NDJDIDEyNDU2LTQKK2Fsd2F5cyBcdTc0MkQgMTQtMzQtNQorYWx3YXlzIFx1NzQyRSAyNDUtMTIzNDYtMgorYWx3YXlzIFx1NzQyRiAxMy0xMjQ1Ni00CithbHdheXMgXHU3NDMwIDIzNDUtNAorYWx3YXlzIFx1NzQzMSAxNDUtMjQ2LTMKK2Fsd2F5cyBcdTc0MzIgMTM1LTM1Ni01CithbHdheXMgXHU3NDMzIDE0LTE0NTYtMgorYWx3YXlzIFx1NzQzNCAyNDUtMTQ1Ni0yCithbHdheXMgXHU3NDM1IDEyMzQtMTYtMgorYWx3YXlzIFx1NzQzNiAxMjM0LTM0NS0yCithbHdheXMgXHU3NDM3IDI0NS0yMzYtNQorYWx3YXlzIFx1NzQzOCAxLTI1LTIKK2Fsd2F5cyBcdTc0MzkgMjQ1LTE0NTYtMgorYWx3YXlzIFx1NzQzQSAxMjM0NS0zNDUtNQorYWx3YXlzIFx1NzQzQiAxMy0xNDU2LTMKK2Fsd2F5cyBcdTc0M0MgMjQ1LTIzNS0yCithbHdheXMgXHU3NDNEIDE0NS0zNC00CithbHdheXMgXHU3NDNFIDEzLTM0Ni01CithbHdheXMgXHU3NDNGIDEyMzUtMTI0Ni0zCithbHdheXMgXHU3NDQwIDEyNTYtNAorYWx3YXlzIFx1NzQ0MSAxMzQtMTQ2LTUKK2Fsd2F5cyBcdTc0NDIgMTM0LTM1Ni0yCithbHdheXMgXHU3NDQzIDEyLTEyMzQ1Ni0zCithbHdheXMgXHU3NDQ0IDE1LTQ1LTMKK2Fsd2F5cyBcdTc0NDUgMTI0LTE2LTIKK2Fsd2F5cyBcdTc0NDYgMTUtMTM0NTYtMworYWx3YXlzIFx1NzQ0NyAxNDUtMjQ1Ni01CithbHdheXMgXHU3NDQ4IDEyNDUtMTIzNTYtMgorYWx3YXlzIFx1NzQ0OSAxMzQtMTQ1Ni0yCithbHdheXMgXHU3NDRBIDEtMTM2LTMKK2Fsd2F5cyBcdTc0NEIgMTI0Ni00CithbHdheXMgXHU3NDRDIDEyNDUtMTI0NTYtNAorYWx3YXlzIFx1NzQ0RCAxMjM1LTEyNDU2LTUKK2Fsd2F5cyBcdTc0NEUgMTUtMzQ2LTIKK2Fsd2F5cyBcdTc0NEYgMTItMTI0NTYtMworYWx3YXlzIFx1NzQ1MCAxMy0yMzQ1LTQKK2Fsd2F5cyBcdTc0NTEgMS0xMjQ1Ni01CithbHdheXMgXHU3NDUyIDEyLTEzNDYtNQorYWx3YXlzIFx1NzQ1MyAxNC0yMzQ1LTUKK2Fsd2F5cyBcdTc0NTQgMjQ1LTQ1LTIKK2Fsd2F5cyBcdTc0NTUgMTUtMjM0NTYtMgorYWx3YXlzIFx1NzQ1NiAxNDUtMTI0NTYtNQorYWx3YXlzIFx1NzQ1NyA0NS01CithbHdheXMgXHU3NDU4IDM0Ni0yCithbHdheXMgXHU3NDU5IDEzNDUtMTQ2LTQKK2Fsd2F5cyBcdTc0NUEgMTIzNS0zNC0yCithbHdheXMgXHU3NDVCIDEzNDU2LTMKK2Fsd2F5cyBcdTc0NUMgMTI1Ni0yCithbHdheXMgXHU3NDVEIDEyMzUtNDU2LTIKK2Fsd2F5cyBcdTc0NUUgMTI0NS0xMjQ2LTUKK2Fsd2F5cyBcdTc0NUYgMTUtMjM0Ni01CithbHdheXMgXHU3NDYwIDE0LTIzNC0yCithbHdheXMgXHU3NDYxIDI0LTE1Ni0zCithbHdheXMgXHU3NDYyIDEyNDUtMTIzNDYtMgorYWx3YXlzIFx1NzQ2MyAxNS0yNS00CithbHdheXMgXHU3NDY0IDI0Ni0yCithbHdheXMgXHU3NDY1IDEyMzQ1Ni0zCithbHdheXMgXHU3NDY2IDM0LTMKK2Fsd2F5cyBcdTc0NjcgMTMtMTQ1Ni0zCithbHdheXMgXHU3NDY4IDEzLTE0NTYtNQorYWx3YXlzIFx1NzQ2OSAxMzQ1Ni0yCithbHdheXMgXHU3NDZBIDEzNC0zNDUtNAorYWx3YXlzIFx1NzQ2QiAxMjQtMTQ2LTMKK2Fsd2F5cyBcdTc0NkMgMTQtMjM0LTIKK2Fsd2F5cyBcdTc0NkQgMTI0LTEzNDYtMgorYWx3YXlzIFx1NzQ2RSAxNC0xNi01CithbHdheXMgXHU3NDZGIDE0LTEzNDYtMgorYWx3YXlzIFx1NzQ3MCAxMy0xMjQ2LTMKK2Fsd2F5cyBcdTc0NzEgMTI0LTIzNDUtNQorYWx3YXlzIFx1NzQ3MiAyNDUtNDYtMworYWx3YXlzIFx1NzQ3MyAyNDUtMjUtMworYWx3YXlzIFx1NzQ3NCAxMy0yMzYtMgorYWx3YXlzIFx1NzQ3NSAxLTE0Ni00CithbHdheXMgXHU3NDc2IDI0Ni0yCithbHdheXMgXHU3NDc3IDI0NTYtNQorYWx3YXlzIFx1NzQ3OCAxMzUtMTQ1Ni0zCithbHdheXMgXHU3NDc5IDEyNC0zNC0yCithbHdheXMgXHU3NDdBIDEyLTEzNDYtMgorYWx3YXlzIFx1NzQ3QiAxMjMtMTIzNDU2LTMKK2Fsd2F5cyBcdTc0N0MgMS0xMjQ1Ni0zCithbHdheXMgXHU3NDdEIDI0NS0xMjM0Ni0zCithbHdheXMgXHU3NDdFIDEzLTE0NTYtNAorYWx3YXlzIFx1NzQ3RiAxNi0zCithbHdheXMgXHU3NDgwIDI0NS0xMjQ2LTQKK2Fsd2F5cyBcdTc0ODEgMjQ1LTEyMzQ2LTMKK2Fsd2F5cyBcdTc0ODIgMjQ1LTE2LTIKK2Fsd2F5cyBcdTc0ODMgMTQtMTYtMgorYWx3YXlzIFx1NzQ4NCAxMzQ1Ni00CithbHdheXMgXHU3NDg1IDE1LTI1LTQKK2Fsd2F5cyBcdTc0ODYgMjQ1LTIzNC0yCithbHdheXMgXHU3NDg3IDE1LTQ1LTIKK2Fsd2F5cyBcdTc0ODggMTQ2LTIKK2Fsd2F5cyBcdTc0ODkgMTQtMjM0NS00CithbHdheXMgXHU3NDhBIDEzNC0xMzYtMgorYWx3YXlzIFx1NzQ4QiAxLTEzNDYtMworYWx3YXlzIFx1NzQ4QyAxNDU2LTIKK2Fsd2F5cyBcdTc0OEQgMTIzNS0zNS0yCithbHdheXMgXHU3NDhFIDEzNDU2LTMKK2Fsd2F5cyBcdTc0OEYgMS0xNTYtNQorYWx3YXlzIFx1NzQ5MCAxNC0zNC01CithbHdheXMgXHU3NDkxIDM0LTIKK2Fsd2F5cyBcdTc0OTIgMTQ1LTEzNTYtMworYWx3YXlzIFx1NzQ5MyAxNS0yMzQtNQorYWx3YXlzIFx1NzQ5NCAxMjUtMTM1Ni0zCithbHdheXMgXHU3NDk1IDE1LTI1Ni0yCithbHdheXMgXHU3NDk2IDI0NS0xMjU2LTIKK2Fsd2F5cyBcdTc0OTcgMTQ1LTEzNDYtNQorYWx3YXlzIFx1NzQ5OCAxNC0xNDU2LTIKK2Fsd2F5cyBcdTc0OTkgMTQtMjQ2LTIKK2Fsd2F5cyBcdTc0OUEgMjQ1LTIzNS0yCithbHdheXMgXHU3NDlCIDE1LTM0LTUKK2Fsd2F5cyBcdTc0OUMgMTIzNS00NTYtMgorYWx3YXlzIFx1NzQ5RCAxMy0xMjQ2LTMKK2Fsd2F5cyBcdTc0OUUgMTIzNC0zNC0yCithbHdheXMgXHU3NDlGIDEzLTEzNDU2LTQKK2Fsd2F5cyBcdTc0QTAgMTIzNDUtMTIzNi0yCithbHdheXMgXHU3NEExIDEzLTE0NTYtNQorYWx3YXlzIFx1NzRBMiAxNC0yMzQtMgorYWx3YXlzIFx1NzRBMyAxMy0xNi0zCithbHdheXMgXHU3NEE0IDEyMy0xMjQ2LTUKK2Fsd2F5cyBcdTc0QTUgMTMtMTM0NTYtNAorYWx3YXlzIFx1NzRBNiAyNDU2LTUKK2Fsd2F5cyBcdTc0QTcgMTM1LTE2LTUKK2Fsd2F5cyBcdTc0QTggMjQ1LTEyMzYtNQorYWx3YXlzIFx1NzRBOSAyNDUtMTI1Ni0yCithbHdheXMgXHU3NEFBIDEyNS0xNDYtNAorYWx3YXlzIFx1NzRBQiAxNDUtMTM0Ni0zCithbHdheXMgXHU3NEFDIDEzLTI0Ni00CithbHdheXMgXHU3NEFEIDEzLTEyMzQ1Ni01CithbHdheXMgXHU3NEFFIDEyNC0xMjM2LTQKK2Fsd2F5cyBcdTc0QUYgMTIzNS0xMjQ2LTUKK2Fsd2F5cyBcdTc0QjAgMTIzNS0xMjQ1Ni0yCithbHdheXMgXHU3NEIxIDE1LTIzNDYtNQorYWx3YXlzIFx1NzRCMiAxNS0xMjQ2LTUKK2Fsd2F5cyBcdTc0QjMgMTI0LTIzNDUtMgorYWx3YXlzIFx1NzRCNCAxMi0zNC00CithbHdheXMgXHU3NEI1IDEyNTYtMgorYWx3YXlzIFx1NzRCNiAxMy0xNDU2LTUKK2Fsd2F5cyBcdTc0QjcgMTI1Ni0yCithbHdheXMgXHU3NEI4IDEzNS0xNDU2LTMKK2Fsd2F5cyBcdTc0QjkgMjQtMTIzNTYtNQorYWx3YXlzIFx1NzRCQSAxMjM0NTYtNQorYWx3YXlzIFx1NzRCQiAxMjUtMTI0Ni00CithbHdheXMgXHU3NEJDIDE0LTEyMzYtMgorYWx3YXlzIFx1NzRCRCAxNS0xNi00CithbHdheXMgXHU3NEJFIDEzLTE2LTUKK2Fsd2F5cyBcdTc0QkYgMTUtNDUtMgorYWx3YXlzIFx1NzRDMCAxMjQ1LTEyNDU2LTQKK2Fsd2F5cyBcdTc0QzEgMTIzNS0yNS01CithbHdheXMgXHU3NEMyIDEzLTI0NTYtNQorYWx3YXlzIFx1NzRDMyAxNC0zNTYtMgorYWx3YXlzIFx1NzRDNCAxNDUtMzQtMgorYWx3YXlzIFx1NzRDNSAxNC0xNi01CithbHdheXMgXHU3NEM2IDEtMTU2LTIKK2Fsd2F5cyBcdTc0QzcgMTI0NS0xMjM1Ni0yCithbHdheXMgXHU3NEM4IDE0LTE2LTIKK2Fsd2F5cyBcdTc0QzkgMTI1LTEyMzYtNQorYWx3YXlzIFx1NzRDQSAyNDUtMjM1LTIKK2Fsd2F5cyBcdTc0Q0IgMTI0LTE2LTUKK2Fsd2F5cyBcdTc0Q0MgMTMtMTI0Ni0zCithbHdheXMgXHU3NENEIDE1LTEyNDYtNQorYWx3YXlzIFx1NzRDRSAxNC0zNDUtNQorYWx3YXlzIFx1NzRDRiAxNC0xMjM0Ni0yCithbHdheXMgXHU3NEQwIDE0LTM0LTIKK2Fsd2F5cyBcdTc0RDEgMTQtMTYtNQorYWx3YXlzIFx1NzREMiAxMjUtMTIzNi01CithbHdheXMgXHU3NEQzIDE0LTEyMzYtNQorYWx3YXlzIFx1NzRENCAxMzQ1Ni0zCithbHdheXMgXHU3NEQ1IDEzNC0xNi0yCithbHdheXMgXHU3NEQ2IDE1LTQ2LTMKK2Fsd2F5cyBcdTc0RDcgMTI0Ni01CithbHdheXMgXHU3NEQ4IDEzLTEyNDU2LTUKK2Fsd2F5cyBcdTc0RDkgMTQ1LTE0Ni01CithbHdheXMgXHU3NERBIDEyNS0xMjM2LTUKK2Fsd2F5cyBcdTc0REIgMTIzNS0xMjQ1Ni0yCithbHdheXMgXHU3NERDIDEzLTM1LTMKK2Fsd2F5cyBcdTc0REQgMTM1LTEyNi0yCithbHdheXMgXHU3NERFIDE0NS0zNDYtMgorYWx3YXlzIFx1NzRERiAxMzUtMTI2LTIKK2Fsd2F5cyBcdTc0RTAgMTIzNS0zNC01CithbHdheXMgXHU3NEUxIDEtMTU2LTIKK2Fsd2F5cyBcdTc0RTIgMTIzNC0yNDYtMgorYWx3YXlzIFx1NzRFMyAxMzUtMTIzNi01CithbHdheXMgXHU3NEU0IDEyNDUtMTM0Ni0yCithbHdheXMgXHU3NEU1IDE0LTE2LTUKK2Fsd2F5cyBcdTc0RTYgMzUtNAorYWx3YXlzIFx1NzRFNyAyNDgtMTU2LTItMzU4LTQKK2Fsd2F5cyBcdTc0RTggMTUtNDYtMgorYWx3YXlzIFx1NzRFOSAyNDU4LTIzNDUtMy0zNTgtNAorYWx3YXlzIFx1NzRFQSAxMjM0NS0xMjM2LTQKK2Fsd2F5cyBcdTc0RUIgMTIzNC0xMzYtMgorYWx3YXlzIFx1NzRFQyAxMjM0NS0xMzQ2LTQKK2Fsd2F5cyBcdTc0RUQgMTQ1LTEyMzYtNAorYWx3YXlzIFx1NzRFRSAxMjM0Ni01CithbHdheXMgXHU3NEVGIDEyMzU2LTMKK2Fsd2F5cyBcdTc0RjAgMTIzNDU4LTEzNi0zLTM1OC00CithbHdheXMgXHU3NEYxIDEzNDgtMTQ2LTItMzU4LTQKK2Fsd2F5cyBcdTc0RjIgMzUtNAorYWx3YXlzIFx1NzRGMyAxMjM1LTM0LTIKK2Fsd2F5cyBcdTc0RjQgMTQtMTM0NTYtMgorYWx3YXlzIFx1NzRGNSAxNi0yCithbHdheXMgXHU3NEY2IDEyMzQtMTM0NTYtMgorYWx3YXlzIFx1NzRGNyAyNDUtMTU2LTIKK2Fsd2F5cyBcdTc0RjggMTM1OC0yNDU2LTQtMzU4LTQKK2Fsd2F5cyBcdTc0RjkgMTMtNDUtNQorYWx3YXlzIFx1NzRGQSAxMi0xMzQ2LTIKK2Fsd2F5cyBcdTc0RkIgMTItMTU2LTMKK2Fsd2F5cyBcdTc0RkMgMTQ4LTE2LTQtMzU4LTQKK2Fsd2F5cyBcdTc0RkQgMTQ1LTEzNDYtNQorYWx3YXlzIFx1NzRGRSAzNS0zCithbHdheXMgXHU3NEZGIDEyMzQtMTIzNTYtNAorYWx3YXlzIFx1NzUwMCAxLTEyNDYtNQorYWx3YXlzIFx1NzUwMSAxMjM0LTEzNDU2LTIKK2Fsd2F5cyBcdTc1MDIgMTM1LTIzNDUtMworYWx3YXlzIFx1NzUwMyAxLTEyMzU2LTUKK2Fsd2F5cyBcdTc1MDQgMS0xMzYtMworYWx3YXlzIFx1NzUwNSAxNDgtMTYtMi0zNTgtNAorYWx3YXlzIFx1NzUwNiAyNDUtMTU2LTIKK2Fsd2F5cyBcdTc1MDcgMTM0NTYtMworYWx3YXlzIFx1NzUwOCAyNDUtMTYtNQorYWx3YXlzIFx1NzUwOSAxNS0yMzQ1LTIKK2Fsd2F5cyBcdTc1MEEgMTQtMTIzNTYtNAorYWx3YXlzIFx1NzUwQiAxNDUtMTYtNQorYWx3YXlzIFx1NzUwQyAxMjM1Ni0zCithbHdheXMgXHU3NTBEIDEzNC0xMzU2LTIKK2Fsd2F5cyBcdTc1MEUgMS0xMjQ1Ni0zCithbHdheXMgXHU3NTBGIDEyMzQtMTM1Ni01CithbHdheXMgXHU3NTEwIDE0LTE0NTYtNQorYWx3YXlzIFx1NzUxMSAxMjUtMTM1Ni01CithbHdheXMgXHU3NTEyIDM0LTQKK2Fsd2F5cyBcdTc1MTMgMTIzNC0xNi01CithbHdheXMgXHU3NTE0IDE0NS0xMjM2LTMKK2Fsd2F5cyBcdTc1MTUgMTIzNDYtNQorYWx3YXlzIFx1NzUxNiAxMzQ1Ni0zCithbHdheXMgXHU3NTE3IDIzNDUtNAorYWx3YXlzIFx1NzUxOCAxMy0xMjM2LTMKK2Fsd2F5cyBcdTc1MTkgMTQ1LTI0NTYtNQorYWx3YXlzIFx1NzUxQSAyNC0xMzYtNQorYWx3YXlzIFx1NzUxQiAxMjQtMjM0NS0yCithbHdheXMgXHU3NTFDIDEyNC0yMzQ1LTIKK2Fsd2F5cyBcdTc1MUQgMTIzNS0xMjM2LTMKK2Fsd2F5cyBcdTc1MUUgMTItMTM0Ni0yCithbHdheXMgXHU3NTFGIDI0LTEzNTYtMworYWx3YXlzIFx1NzUyMCAyNDUtMTM0NTYtMgorYWx3YXlzIFx1NzUyMSAyNC0xMzYtMworYWx3YXlzIFx1NzUyMiAxMi0xMjM2LTQKK2Fsd2F5cyBcdTc1MjMgMTItMTIzNi00CithbHdheXMgXHU3NTI0IDEyNDUtMTI0Ni0yCithbHdheXMgXHU3NTI1IDI0LTEzNTYtMworYWx3YXlzIFx1NzUyNiAxNS0zNC0zCithbHdheXMgXHU3NTI3IDE1LTEzNi0zCithbHdheXMgXHU3NTI4IDIzNS01CithbHdheXMgXHU3NTI5IDI0LTIzNTYtNAorYWx3YXlzIFx1NzUyQSAxNC0zNC01CithbHdheXMgXHU3NTJCIDEyMzQ1LTM0LTQKK2Fsd2F5cyBcdTc1MkMgMjM1LTQKK2Fsd2F5cyBcdTc1MkQgMTM1LTEzNTYtMgorYWx3YXlzIFx1NzUyRSAxMjM0NS0xMzU2LTUKK2Fsd2F5cyBcdTc1MkYgMTM0NS0xMzQ1Ni01CithbHdheXMgXHU3NTMwIDEyNC0yMzQ1LTIKK2Fsd2F5cyBcdTc1MzEgMjM0LTIKK2Fsd2F5cyBcdTc1MzIgMTMtMjM0NTYtNAorYWx3YXlzIFx1NzUzMyAyNC0xMzYtMworYWx3YXlzIFx1NzUzNCAxLTM0NS0yCithbHdheXMgXHU3NTM1IDE0NS0yMzQ1LTUKK2Fsd2F5cyBcdTc1MzYgMTIzNDUtMzQtMgorYWx3YXlzIFx1NzUzNyAxMzQ1LTEyMzYtMgorYWx3YXlzIFx1NzUzOCAxNDUtMjM0NS01CithbHdheXMgXHU3NTM5IDEyMzQtMTM0NTYtMworYWx3YXlzIFx1NzUzQSAxNDUtMTM0NTYtMworYWx3YXlzIFx1NzUzQiAxMjM1LTM1LTUKK2Fsd2F5cyBcdTc1M0MgMTI0LTEzNDU2LTQKK2Fsd2F5cyBcdTc1M0QgMjQ1LTQ1LTQKK2Fsd2F5cyBcdTc1M0UgMTI1LTI0NTYtMworYWx3YXlzIFx1NzUzRiAxMzQtMTM1Ni0yCithbHdheXMgXHU3NTQwIDEzNS0xNi01CithbHdheXMgXHU3NTQxIDI0NS0xNi0yCithbHdheXMgXHU3NTQyIDEzLTIzNC01CithbHdheXMgXHU3NTQzIDE1LTI1Ni0yCithbHdheXMgXHU3NTQ0IDE0LTIzNC0yCithbHdheXMgXHU3NTQ1IDEyLTEzNDYtNQorYWx3YXlzIFx1NzU0NiAxMzQtMzQtNAorYWx3YXlzIFx1NzU0NyAyNTYtMgorYWx3YXlzIFx1NzU0OCAxMjM0NS0xMjM2LTUKK2Fsd2F5cyBcdTc1NDkgMTIzNDUtMzQtMgorYWx3YXlzIFx1NzU0QSAxMy0xMzU2LTMKK2Fsd2F5cyBcdTc1NEIgMTI0LTIzNDUtMgorYWx3YXlzIFx1NzU0QyAxMy0zNDYtNQorYWx3YXlzIFx1NzU0RCAxMy0zNDYtNQorYWx3YXlzIFx1NzU0RSAyNDUtNDUtNAorYWx3YXlzIFx1NzU0RiAxMjQ2LTUKK2Fsd2F5cyBcdTc1NTAgMTIzNDUtMzQtMgorYWx3YXlzIFx1NzU1MSAxMjQtMjM0NS0yCithbHdheXMgXHU3NTUyIDEzNC0zNC00CithbHdheXMgXHU3NTUzIDE0NS0yNS0zCithbHdheXMgXHU3NTU0IDEyMzQtMTIzNi01CithbHdheXMgXHU3NTU1IDEzLTQ2LTMKK2Fsd2F5cyBcdTc1NTYgMzUtMworYWx3YXlzIFx1NzU1NyAxNDUtMzQ1LTIKK2Fsd2F5cyBcdTc1NTggMTM0NS0xMjM2LTIKK2Fsd2F5cyBcdTc1NTkgMTQtMjM0LTIKK2Fsd2F5cyBcdTc1NUEgMTM1LTEzNi00CithbHdheXMgXHU3NTVCIDEtMTM2LTQKK2Fsd2F5cyBcdTc1NUMgMTItMzQtNQorYWx3YXlzIFx1NzU1RCAxMzQtMzQtNAorYWx3YXlzIFx1NzU1RSAxMzQtMzQtNAorYWx3YXlzIFx1NzU1RiAyNDUtMjM0Ni01CithbHdheXMgXHU3NTYwIDEyNC0yMzQ1LTIKK2Fsd2F5cyBcdTc1NjEgMTMtMjQ1Ni0zCithbHdheXMgXHU3NTYyIDEzNS0xNi01CithbHdheXMgXHU3NTYzIDE0NS0zNDUtMgorYWx3YXlzIFx1NzU2NCAxLTE1Ni00CithbHdheXMgXHU3NTY1IDE0LTIzNi01CithbHdheXMgXHU3NTY2IDI0NS0xNi0yCithbHdheXMgXHU3NTY3IDE0LTIzNi01CithbHdheXMgXHU3NTY4IDEyMzQtMTIzNi0zCithbHdheXMgXHU3NTY5IDE2LTMKK2Fsd2F5cyBcdTc1NkEgMTIzNDUtMTIzNi0zCithbHdheXMgXHU3NTZCIDEyMzUtMzUtNQorYWx3YXlzIFx1NzU2QyAyNC0yMzQ2LTMKK2Fsd2F5cyBcdTc1NkQgMTI1Ni0yCithbHdheXMgXHU3NTZFIDEzNC0zNC00CithbHdheXMgXHU3NTZGIDEzLTI1Ni01CithbHdheXMgXHU3NTcwIDE2LTUKK2Fsd2F5cyBcdTc1NzEgMTQtMjM0LTIKK2Fsd2F5cyBcdTc1NzIgMjQtMjM0Ni0zCithbHdheXMgXHU3NTczIDE0NS0zNDYtMgorYWx3YXlzIFx1NzU3NCAxMi0xMjM1Ni0yCithbHdheXMgXHU3NTc1IDEyMzUtMzUtNQorYWx3YXlzIFx1NzU3NiAxNDUtMTM0Ni0zCithbHdheXMgXHU3NTc3IDEyLTI1LTUKK2Fsd2F5cyBcdTc1NzggMTMtMTYtMworYWx3YXlzIFx1NzU3OSAxMjQ1Ni00CithbHdheXMgXHU3NTdBIDEzLTQ2LTMKK2Fsd2F5cyBcdTc1N0IgMjQtMTM1Ni0yCithbHdheXMgXHU3NTdDIDEyLTEzNDYtNQorYWx3YXlzIFx1NzU3RCAxMjQtMTI0NTYtNAorYWx3YXlzIFx1NzU3RSAxNC0zNTYtMgorYWx3YXlzIFx1NzU3RiAxMy0xNi0zCithbHdheXMgXHU3NTgwIDEyLTM0NS0zCithbHdheXMgXHU3NTgxIDE0LTIzNC0yCithbHdheXMgXHU3NTgyIDE0NS0zNDYtMgorYWx3YXlzIFx1NzU4MyAxMjQtMTI0NTYtNAorYWx3YXlzIFx1NzU4NCAxNC0xNDU2LTIKK2Fsd2F5cyBcdTc1ODUgMTMtNDYtMworYWx3YXlzIFx1NzU4NiAxMy00Ni0zCithbHdheXMgXHU3NTg3IDEyLTEyMzU2LTIKK2Fsd2F5cyBcdTc1ODggMTM1LTEyNi01CithbHdheXMgXHU3NTg5IDE0NS0zNDYtMgorYWx3YXlzIFx1NzU4QSAxNDUtMzQ2LTIKK2Fsd2F5cyBcdTc1OEIgMTIzNC0xNi00CithbHdheXMgXHU3NThDIDI0NS0zNDYtNQorYWx3YXlzIFx1NzU4RCAxNDUtMTIzNi01CithbHdheXMgXHU3NThFIDI0LTM0LTMKK2Fsd2F5cyBcdTc1OEYgMjQtMzQtMworYWx3YXlzIFx1NzU5MCAxLTE1Ni01CithbHdheXMgXHU3NTkxIDE2LTIKK2Fsd2F5cyBcdTc1OTIgMTItNDU2LTIKK2Fsd2F5cyBcdTc1OTMgMTM0NS0yNDU2LTQKK2Fsd2F5cyBcdTc1OTQgMTQ1LTEzNDU2LTMKK2Fsd2F5cyBcdTc1OTUgMTM1LTE2LTQKK2Fsd2F5cyBcdTc1OTYgMTMtMzQ2LTMKK2Fsd2F5cyBcdTc1OTcgMTQtMjQ2LTIKK2Fsd2F5cyBcdTc1OTggMTMtMTIzNDYtMworYWx3YXlzIFx1NzU5OSAxMy0yMzQ2LTMKK2Fsd2F5cyBcdTc1OUEgMTMtMjM0LTUKK2Fsd2F5cyBcdTc1OUIgMS0xMjM1Ni00CithbHdheXMgXHU3NTlDIDE1LTIzNDU2LTUKK2Fsd2F5cyBcdTc1OUQgMjQtMTIzNi01CithbHdheXMgXHU3NTlFIDE1LTEyNTYtMworYWx3YXlzIFx1NzU5RiAxMzQ1LTIzNi01CithbHdheXMgXHU3NUEwIDE0LTE2LTUKK2Fsd2F5cyBcdTc1QTEgNDYtMgorYWx3YXlzIFx1NzVBMiAxMi0xMzYtNQorYWx3YXlzIFx1NzVBMyAyMzQtMgorYWx3YXlzIFx1NzVBNCAxMzUtMzQ1LTMKK2Fsd2F5cyBcdTc1QTUgMTMtMzQ2LTUKK2Fsd2F5cyBcdTc1QTYgMTMtMjM2LTIKK2Fsd2F5cyBcdTc1QTcgMS0xNTYtMworYWx3YXlzIFx1NzVBOCAxNS0yMzQ1Ni0zCithbHdheXMgXHU3NUE5IDI0NS0xMjQ2LTUKK2Fsd2F5cyBcdTc1QUEgMTM1LTE2LTUKK2Fsd2F5cyBcdTc1QUIgMTYtNQorYWx3YXlzIFx1NzVBQyAxNC0xNi01CithbHdheXMgXHU3NUFEIDEyNS0xMjM0Ni01CithbHdheXMgXHU3NUFFIDEyLTQ1Ni0zCithbHdheXMgXHU3NUFGIDEyMzQ1LTEzNTYtMworYWx3YXlzIFx1NzVCMCAxLTM0LTUKK2Fsd2F5cyBcdTc1QjEgMTIzNC0xNDYtNQorYWx3YXlzIFx1NzVCMiAxMjM0LTE2LTIKK2Fsd2F5cyBcdTc1QjMgMTMtMTIzNi0zCithbHdheXMgXHU3NUI0IDIzNDYtMworYWx3YXlzIFx1NzVCNSAyNDUtMTU2LTMKK2Fsd2F5cyBcdTc1QjYgMTUtMzQ2LTUKK2Fsd2F5cyBcdTc1QjcgMjQ1LTE2LTIKK2Fsd2F5cyBcdTc1QjggMTQ1LTEyMzYtNAorYWx3YXlzIFx1NzVCOSAxLTEzNi00CithbHdheXMgXHU3NUJBIDEyMzQ1LTM0NS0yCithbHdheXMgXHU3NUJCIDEtMTU2LTQKK2Fsd2F5cyBcdTc1QkMgMTI0LTEzNTYtMgorYWx3YXlzIFx1NzVCRCAxMy0xMjU2LTMKK2Fsd2F5cyBcdTc1QkUgMTMtMTYtMgorYWx3YXlzIFx1NzVCRiAxMjM0NS0zNTYtNQorYWx3YXlzIFx1NzVDMCAxMy0xMjU2LTMKK2Fsd2F5cyBcdTc1QzEgMTQ1LTIzNDUtNQorYWx3YXlzIFx1NzVDMiAxMy0yMzQ1Ni0zCithbHdheXMgXHU3NUMzIDE1LTQ1LTIKK2Fsd2F5cyBcdTc1QzQgMS0zNDUtNQorYWx3YXlzIFx1NzVDNSAxMzUtMTM0NTYtNQorYWx3YXlzIFx1NzVDNiAxMzQ1LTM0Ni01CithbHdheXMgXHU3NUM3IDEtMTM1Ni01CithbHdheXMgXHU3NUM4IDIzNS0zCithbHdheXMgXHU3NUM5IDEzLTEzNDU2LTUKK2Fsd2F5cyBcdTc1Q0EgMjQ1LTQ1LTIKK2Fsd2F5cyBcdTc1Q0IgMTItMTIzNDYtMgorYWx3YXlzIFx1NzVDQyAxMjQtMTIzNDYtMworYWx3YXlzIFx1NzVDRCAxNi0yCithbHdheXMgXHU3NUNFIDEzLTM0Ni0zCithbHdheXMgXHU3NUNGIDEyNDYtNAorYWx3YXlzIFx1NzVEMCAxMjM1LTEyNDYtMgorYWx3YXlzIFx1NzVEMSAxNDUtMjUtNQorYWx3YXlzIFx1NzVEMiA0Ni0yCithbHdheXMgXHU3NUQzIDEyLTE1Ni01CithbHdheXMgXHU3NUQ0IDEtMTU2LTUKK2Fsd2F5cyBcdTc1RDUgMTIzNS0xMzYtMgorYWx3YXlzIFx1NzVENiAyMzQ1Ni00CithbHdheXMgXHU3NUQ3IDEzNC0zNTYtNQorYWx3YXlzIFx1NzVEOCAxNDUtMTIzNTYtNQorYWx3YXlzIFx1NzVEOSAxMy0xMzQ1Ni01CithbHdheXMgXHU3NURBIDE1LTI0Ni0zCithbHdheXMgXHU3NURCIDEyNC0xMjM0Ni01CithbHdheXMgXHU3NURDIDEyNC0zNC0zCithbHdheXMgXHU3NUREIDEzNC0xMzQ2LTIKK2Fsd2F5cyBcdTc1REUgMTIzNC0xNi00CithbHdheXMgXHU3NURGIDE1LTI0Ni0zCithbHdheXMgXHU3NUUwIDE1LTEyNDU2LTMKK2Fsd2F5cyBcdTc1RTEgMTIzNC0zNC0zCithbHdheXMgXHU3NUUyIDE0LTE2LTUKK2Fsd2F5cyBcdTc1RTMgMS0xNTYtNQorYWx3YXlzIFx1NzVFNCAyNDUtMjUtMgorYWx3YXlzIFx1NzVFNSAxNDUtMjUtMgorYWx3YXlzIFx1NzVFNiAzNC01CithbHdheXMgXHU3NUU3IDI0LTM0NS0zCithbHdheXMgXHU3NUU4IDE0LTE0Ni0yCithbHdheXMgXHU3NUU5IDI0LTEyMzU2LTUKK2Fsd2F5cyBcdTc1RUEgMTIzNS0xMjQ1Ni01CithbHdheXMgXHU3NUVCIDE1LTIzNDUtMgorYWx3YXlzIFx1NzVFQyAxNi01CithbHdheXMgXHU3NUVEIDEyMzQtMTM1Ni0yCithbHdheXMgXHU3NUVFIDEtMTM0Ni01CithbHdheXMgXHU3NUVGIDEzLTEyNDU2LTQKK2Fsd2F5cyBcdTc1RjAgMTI0LTEyMzYtMgorYWx3YXlzIFx1NzVGMSAxMjM0NS0zNTYtNQorYWx3YXlzIFx1NzVGMiAxMzQtMzQ1LTIKK2Fsd2F5cyBcdTc1RjMgMTQtMTQ1Ni0yCithbHdheXMgXHU3NUY0IDEyLTE1Ni0zCithbHdheXMgXHU3NUY1IDEzLTE2LTUKK2Fsd2F5cyBcdTc1RjYgMTQ1LTIzNDUtNAorYWx3YXlzIFx1NzVGNyAxMjM2LTMKK2Fsd2F5cyBcdTc1RjggMTItMTU2LTUKK2Fsd2F5cyBcdTc1RjkgMTM1LTE2LTUKK2Fsd2F5cyBcdTc1RkEgMTM1LTE2LTUKK2Fsd2F5cyBcdTc1RkIgMTM0LTE0NTYtMgorYWx3YXlzIFx1NzVGQyAxMy0zNC01CithbHdheXMgXHU3NUZEIDE0NS0xMjQ2LTMKK2Fsd2F5cyBcdTc1RkUgMjM0Ni0zCithbHdheXMgXHU3NUZGIDEyNDYtNAorYWx3YXlzIFx1NzYwMCAxMjU2LTMKK2Fsd2F5cyBcdTc2MDEgMjQ1LTEyNDYtNQorYWx3YXlzIFx1NzYwMiAyMzQ1Ni00CithbHdheXMgXHU3NjAzIDEtMzQtMgorYWx3YXlzIFx1NzYwNCAyNDUtMzQtNQorYWx3YXlzIFx1NzYwNSAxNDUtMTIzNi01CithbHdheXMgXHU3NjA2IDI0LTEzNi0zCithbHdheXMgXHU3NjA3IDEtMTIzNDYtNAorYWx3YXlzIFx1NzYwOCAxMy0xNi01CithbHdheXMgXHU3NjA5IDEyNTYtNQorYWx3YXlzIFx1NzYwQSAxMjM1LTEyMzU2LTIKK2Fsd2F5cyBcdTc2MEIgMTIzNDUtMTM1Ni0zCithbHdheXMgXHU3NjBDIDE0LTM0NS01CithbHdheXMgXHU3NjBEIDQ2LTIKK2Fsd2F5cyBcdTc2MEUgMjQtMTM2LTUKK2Fsd2F5cyBcdTc2MEYgMTI0LTM0LTIKK2Fsd2F5cyBcdTc2MTAgMTI1Ni00CithbHdheXMgXHU3NjExIDEzLTI1LTMKK2Fsd2F5cyBcdTc2MTIgMTIzNDU2LTIKK2Fsd2F5cyBcdTc2MTMgMTIzNS0xMjQ1Ni01CithbHdheXMgXHU3NjE0IDEyMy0zNC01CithbHdheXMgXHU3NjE1IDEzLTIzNDU2LTQKK2Fsd2F5cyBcdTc2MTYgMTQ1Ni0zCithbHdheXMgXHU3NjE3IDE2LTUKK2Fsd2F5cyBcdTc2MTggMTQtMTIzNTYtNQorYWx3YXlzIFx1NzYxOSAxNS0xNDYtMworYWx3YXlzIFx1NzYxQSAxMy0yMzYtMgorYWx3YXlzIFx1NzYxQiAyNDUtMTYtNQorYWx3YXlzIFx1NzYxQyAxNS0xNi0yCithbHdheXMgXHU3NjFEIDEzLTEyNDU2LTMKK2Fsd2F5cyBcdTc2MUUgMTYtNQorYWx3YXlzIFx1NzYxRiAxMjM0NTYtMworYWx3YXlzIFx1NzYyMCAxMy0xNi0yCithbHdheXMgXHU3NjIxIDEyLTQ1Ni0zCithbHdheXMgXHU3NjIyIDEzNS0xMjM2LTMKK2Fsd2F5cyBcdTc2MjMgMTIzNS0xMjQ2LTUKK2Fsd2F5cyBcdTc2MjQgMTQtMjM0LTIKK2Fsd2F5cyBcdTc2MjUgMjQ1LTI1LTIKK2Fsd2F5cyBcdTc2MjYgMjQtMTIzNTYtNQorYWx3YXlzIFx1NzYyNyAxMzQ1LTIzNi01CithbHdheXMgXHU3NjI4IDE0NS0yMzQ1LTMKK2Fsd2F5cyBcdTc2MjkgMTQ1LTM0NS0yCithbHdheXMgXHU3NjJBIDEzNS0zNDYtNAorYWx3YXlzIFx1NzYyQiAxMjQtMTIzNi0zCithbHdheXMgXHU3NjJDIDEtMTM0Ni01CithbHdheXMgXHU3NjJEIDEzNS0yNDYtMworYWx3YXlzIFx1NzYyRSAyNC0xMzYtMworYWx3YXlzIFx1NzYyRiAyNDUtMzQtNQorYWx3YXlzIFx1NzYzMCAxNC0yNS00CithbHdheXMgXHU3NjMxIDE2LTUKK2Fsd2F5cyBcdTc2MzIgMTI1LTEyMzQ2LTUKK2Fsd2F5cyBcdTc2MzMgMTItMTIzNTYtMworYWx3YXlzIFx1NzYzNCAxLTEzNDYtNQorYWx3YXlzIFx1NzYzNSAxLTI0NTYtNQorYWx3YXlzIFx1NzYzNiAxNS0xMjM1Ni01CithbHdheXMgXHU3NjM3IDE1LTI1LTQKK2Fsd2F5cyBcdTc2MzggMjQ1LTIzNi0yCithbHdheXMgXHU3NjM5IDE0NS0yNDYtNQorYWx3YXlzIFx1NzYzQSAxNC0xMjM1Ni01CithbHdheXMgXHU3NjNCIDE0LTEyMzU2LTUKK2Fsd2F5cyBcdTc2M0MgMTM0LTEyNi01CithbHdheXMgXHU3NjNEIDEzLTE0NTYtNQorYWx3YXlzIFx1NzYzRSAxNDU2LTQKK2Fsd2F5cyBcdTc2M0YgMTM0NTYtNAorYWx3YXlzIFx1NzY0MCAxMjM1LTQ1Ni0yCithbHdheXMgXHU3NjQxIDEyMzQ1LTM0LTIKK2Fsd2F5cyBcdTc2NDIgMTQtMjQ2LTIKK2Fsd2F5cyBcdTc2NDMgMTQtMTIzNDYtMgorYWx3YXlzIFx1NzY0NCAyNDUtMjQ2LTIKK2Fsd2F5cyBcdTc2NDUgMTQtMjM0LTIKK2Fsd2F5cyBcdTc2NDYgMTQtMTQ2LTIKK2Fsd2F5cyBcdTc2NDcgMTUtMjM0NS0yCithbHdheXMgXHU3NjQ4IDEyMzQ1LTM1Ni01CithbHdheXMgXHU3NjQ5IDE0NS0xMjM2LTUKK2Fsd2F5cyBcdTc2NEEgMTQ1Ni01CithbHdheXMgXHU3NjRCIDEyMzUtMjM0Ni01CithbHdheXMgXHU3NjRDIDI0NTYtMgorYWx3YXlzIFx1NzY0RCAxMzUtMTIzNi0zCithbHdheXMgXHU3NjRFIDE1LTIzNDUtMgorYWx3YXlzIFx1NzY0RiAxMy0xMjQ1Ni0zCithbHdheXMgXHU3NjUwIDEzLTIzNTYtNQorYWx3YXlzIFx1NzY1MSAxMzQ1LTEyMzQ2LTIKK2Fsd2F5cyBcdTc2NTIgMTI1Ni01CithbHdheXMgXHU3NjUzIDEyNDYtMgorYWx3YXlzIFx1NzY1NCAxNi01CithbHdheXMgXHU3NjU1IDIzNS0zCithbHdheXMgXHU3NjU2IDEyMzQtMTYtNAorYWx3YXlzIFx1NzY1NyAxNC0zNTYtNAorYWx3YXlzIFx1NzY1OCAxNC0xNi01CithbHdheXMgXHU3NjU5IDI0LTM0LTQKK2Fsd2F5cyBcdTc2NUEgMTQ1LTEyMzYtNQorYWx3YXlzIFx1NzY1QiAxNC0xNDU2LTQKK2Fsd2F5cyBcdTc2NUMgMTQ1LTIzNDUtNQorYWx3YXlzIFx1NzY1RCAxNC0xNDU2LTQKK2Fsd2F5cyBcdTc2NUUgMTQtMjQ1Ni01CithbHdheXMgXHU3NjVGIDEzNS0zNDYtNAorYWx3YXlzIFx1NzY2MCAxMy0xNi01CithbHdheXMgXHU3NjYxIDEyLTE1Ni0zCithbHdheXMgXHU3NjYyIDQ2LTQKK2Fsd2F5cyBcdTc2NjMgMTUtNDUtNAorYWx3YXlzIFx1NzY2NCAxMy0zNDYtMworYWx3YXlzIFx1NzY2NSAxLTEzNTYtNQorYWx3YXlzIFx1NzY2NiAxMzQtMTI2LTUKK2Fsd2F5cyBcdTc2NjcgMTQtMTYtNQorYWx3YXlzIFx1NzY2OCAxMjM1LTI1LTUKK2Fsd2F5cyBcdTc2NjkgMTQtMjQ1Ni01CithbHdheXMgXHU3NjZBIDEzLTE2LTMKK2Fsd2F5cyBcdTc2NkIgMTQ1LTIzNDUtMworYWx3YXlzIFx1NzY2QyAxNS0yMzQ1LTQKK2Fsd2F5cyBcdTc2NkQgMTM0NTYtNAorYWx3YXlzIFx1NzY2RSAxNDU2LTQKK2Fsd2F5cyBcdTc2NkYgMjQ1LTEyNTYtMgorYWx3YXlzIFx1NzY3MCAyMzUtMworYWx3YXlzIFx1NzY3MSAxMjQtMTIzNi0zCithbHdheXMgXHU3NjcyIDE0NS0yMzQ1LTMKK2Fsd2F5cyBcdTc2NzMgMTQtMjUtNAorYWx3YXlzIFx1NzY3NCAxNC0xMjQ1Ni0yCithbHdheXMgXHU3Njc1IDE0LTEyNDU2LTIKK2Fsd2F5cyBcdTc2NzYgMTM1LTEyNi0zCithbHdheXMgXHU3Njc3IDEzNS0xMjYtMworYWx3YXlzIFx1NzY3OCAxMy0xMjQ2LTQKK2Fsd2F5cyBcdTc2NzkgMTIzNC0xMjYtMworYWx3YXlzIFx1NzY3QSAxMjM0NS0zNDUtMworYWx3YXlzIFx1NzY3QiAxNDUtMTM1Ni0zCithbHdheXMgXHU3NjdDIDEyMzQ1LTM0NS0zCithbHdheXMgXHU3NjdEIDEzNS0yNDU2LTIKK2Fsd2F5cyBcdTc2N0UgMTM1LTI0NTYtNAorYWx3YXlzIFx1NzY3RiAyNDUtMzQ2LTIKK2Fsd2F5cyBcdTc2ODAgMTUtNDYtMworYWx3YXlzIFx1NzY4MSAxMjUtMTQ2LTUKK2Fsd2F5cyBcdTc2ODIgMTI1LTE0Ni01CithbHdheXMgXHU3NjgzIDEzNC0xNDYtNQorYWx3YXlzIFx1NzY4NCAxNDUtMjM0Ni0xCithbHdheXMgXHU3Njg1IDEyMzQtMzQ1LTMKK2Fsd2F5cyBcdTc2ODYgMTMtMzQ2LTMKK2Fsd2F5cyBcdTc2ODcgMTIzNS00NTYtMgorYWx3YXlzIFx1NzY4OCAxMy0xMjQ2LTMKK2Fsd2F5cyBcdTc2ODkgMjQ1LTE1Ni00CithbHdheXMgXHU3NjhBIDE0LTEzNDU2LTIKK2Fsd2F5cyBcdTc2OEIgMTMtMTQ2LTMKK2Fsd2F5cyBcdTc2OEMgMTM0LTEyNi01CithbHdheXMgXHU3NjhEIDEzLTE2LTIKK2Fsd2F5cyBcdTc2OEUgMTMtMjQ2LTQKK2Fsd2F5cyBcdTc2OEYgMTIzNC0xMzU2LTQKK2Fsd2F5cyBcdTc2OTAgMTMtMTQ2LTMKK2Fsd2F5cyBcdTc2OTEgMjQ1Ni0yCithbHdheXMgXHU3NjkyIDIzNDYtMgorYWx3YXlzIFx1NzY5MyAxMjM1LTE0Ni01CithbHdheXMgXHU3Njk0IDEyMzUtMTIzNi01CithbHdheXMgXHU3Njk1IDEzNS0xNi01CithbHdheXMgXHU3Njk2IDEyNDU2LTQKK2Fsd2F5cyBcdTc2OTcgMTItMTIzNTYtMgorYWx3YXlzIFx1NzY5OCAyNDUtMjM0NS01CithbHdheXMgXHU3Njk5IDE1LTE2LTMKK2Fsd2F5cyBcdTc2OUEgMjQ1Ni0yCithbHdheXMgXHU3NjlCIDEzLTIzNS00CithbHdheXMgXHU3NjlDIDEyMzUtMTQ2LTUKK2Fsd2F5cyBcdTc2OUQgMTIzNS00NTYtNAorYWx3YXlzIFx1NzY5RSAxMjM1LTE0Ni01CithbHdheXMgXHU3NjlGIDEyNS0yMzQ2LTIKK2Fsd2F5cyBcdTc2QTAgMjQ1LTEyNDYtNAorYWx3YXlzIFx1NzZBMSAxMjM1LTE0Ni01CithbHdheXMgXHU3NkEyIDE1LTI0Ni00CithbHdheXMgXHU3NkEzIDM0Ni01CithbHdheXMgXHU3NkE0IDEyMzQtMTI2LTIKK2Fsd2F5cyBcdTc2QTUgMTIzNS0xNDYtNQorYWx3YXlzIFx1NzZBNiAxMy0yNDYtNAorYWx3YXlzIFx1NzZBNyAyNDU2LTUKK2Fsd2F5cyBcdTc2QTggMTUtMTM0NTYtMworYWx3YXlzIFx1NzZBOSAxMjM1LTQ1Ni01CithbHdheXMgXHU3NkFBIDE0LTE2LTUKK2Fsd2F5cyBcdTc2QUIgMTIzNC0yNDYtNAorYWx3YXlzIFx1NzZBQyAxMjM1LTIzNDYtNQorYWx3YXlzIFx1NzZBRCAxMy0yNDYtNQorYWx3YXlzIFx1NzZBRSAxMjM0LTE2LTIKK2Fsd2F5cyBcdTc2QUYgMTMtMTIzNi00CithbHdheXMgXHU3NkIwIDEyMzQtMTQ2LTUKK2Fsd2F5cyBcdTc2QjEgMS0xMjM1Ni01CithbHdheXMgXHU3NkIyIDEzLTI1Ni0zCithbHdheXMgXHU3NkIzIDI0NS0yMzQtMgorYWx3YXlzIFx1NzZCNCAyNDUtMTIzNDU2LTMKK2Fsd2F5cyBcdTc2QjUgMjQ1LTIzNi01CithbHdheXMgXHU3NkI2IDEtMzQ1LTMKK2Fsd2F5cyBcdTc2QjcgMTMtMzQtNAorYWx3YXlzIFx1NzZCOCAxMy0yNTYtMworYWx3YXlzIFx1NzZCOSAxMy0yNTYtMworYWx3YXlzIFx1NzZCQSAxLTEyMzU2LTUKK2Fsd2F5cyBcdTc2QkIgMS0zNDUtMworYWx3YXlzIFx1NzZCQyAxMy0zNC00CithbHdheXMgXHU3NkJEIDEtMTIzNi00CithbHdheXMgXHU3NkJFIDE0NS0zNC0yCithbHdheXMgXHU3NkJGIDEzNC0xNDU2LTQKK2Fsd2F5cyBcdTc2QzAgMjQ1LTE2LTQKK2Fsd2F5cyBcdTc2QzEgMTM0NTYtMgorYWx3YXlzIFx1NzZDMiAxMjU2LTIKK2Fsd2F5cyBcdTc2QzMgMTM1LTM1Ni0zCithbHdheXMgXHU3NkM0IDEtMTQ2LTMKK2Fsd2F5cyBcdTc2QzUgMS0xMjM0Ni0zCithbHdheXMgXHU3NkM2IDEyMzQtMTM2LTIKK2Fsd2F5cyBcdTc2QzcgMTIzNS0yMzQ2LTIKK2Fsd2F5cyBcdTc2QzggMTM0NTYtMgorYWx3YXlzIFx1NzZDOSAxMjM1LTIzNDYtMgorYWx3YXlzIFx1NzZDQSAxNi01CithbHdheXMgXHU3NkNCIDEzNS0xMjYtMworYWx3YXlzIFx1NzZDQyAxMjQ1Ni00CithbHdheXMgXHU3NkNEIDEyMzUtMjM0Ni0yCithbHdheXMgXHU3NkNFIDEzNDYtNQorYWx3YXlzIFx1NzZDRiAxLTEyMzYtNAorYWx3YXlzIFx1NzZEMCAyMzQ1LTIKK2Fsd2F5cyBcdTc2RDEgMTMtMjM0NS0zCithbHdheXMgXHU3NkQyIDEyMzUtMjM0Ni0yCithbHdheXMgXHU3NkQzIDEyNTYtMworYWx3YXlzIFx1NzZENCAxMjMtMTI0Ni0zCithbHdheXMgXHU3NkQ1IDEyMzQ1LTEyMzYtNQorYWx3YXlzIFx1NzZENiAxMy0yNDU2LTUKK2Fsd2F5cyBcdTc2RDcgMTQ1LTE0Ni01CithbHdheXMgXHU3NkQ4IDEyMzQtMTIzNi0yCithbHdheXMgXHU3NkQ5IDEyMzQ1LTM0LTQKK2Fsd2F5cyBcdTc2REEgMjQ1LTIzNC0yCithbHdheXMgXHU3NkRCIDI0LTEzNTYtNQorYWx3YXlzIFx1NzZEQyAxNDUtMTQ2LTUKK2Fsd2F5cyBcdTc2REQgMTQtMzQtNQorYWx3YXlzIFx1NzZERSAxLTEyMzYtNAorYWx3YXlzIFx1NzZERiAxMzQtMTM1Ni0yCithbHdheXMgXHU3NkUwIDE0LTE2LTIKK2Fsd2F5cyBcdTc2RTEgMTMtMTQ1Ni01CithbHdheXMgXHU3NkUyIDE1LTEyNTYtNQorYWx3YXlzIFx1NzZFMyAxMy0yMzQ1LTMKK2Fsd2F5cyBcdTc2RTQgMTIzNC0xMjM2LTIKK2Fsd2F5cyBcdTc2RTUgMTMtMTI0NTYtNQorYWx3YXlzIFx1NzZFNiAxMjM2LTMKK2Fsd2F5cyBcdTc2RTcgMTQtMzQtMgorYWx3YXlzIFx1NzZFOCAxNS0xMjU2LTQKK2Fsd2F5cyBcdTc2RTkgMS0xMjM1Ni0zCithbHdheXMgXHU3NkVBIDE0NS0xMzQ2LTUKK2Fsd2F5cyBcdTc2RUIgMTIzNi0zCithbHdheXMgXHU3NkVDIDEzLTM0LTQKK2Fsd2F5cyBcdTc2RUQgMTQtMTYtNQorYWx3YXlzIFx1NzZFRSAxMzQtMzQtNQorYWx3YXlzIFx1NzZFRiAxNDUtMTM0NTYtMworYWx3YXlzIFx1NzZGMCAxMy0xMjM2LTQKK2Fsd2F5cyBcdTc2RjEgMTUtMTI1Ni0zCithbHdheXMgXHU3NkYyIDEzNC0xMzQ2LTIKK2Fsd2F5cyBcdTc2RjMgMTM0LTEzNDYtMgorYWx3YXlzIFx1NzZGNCAxLTE1Ni0yCithbHdheXMgXHU3NkY1IDI0NS0xNi01CithbHdheXMgXHU3NkY2IDEyNDUtMTI0NTYtNAorYWx3YXlzIFx1NzZGNyAxMjQtMjM0NS0yCithbHdheXMgXHU3NkY4IDE1LTQ2LTMKK2Fsd2F5cyBcdTc2RjkgMTQ1LTEyMzQ1Ni00CithbHdheXMgXHU3NkZBIDE1LTE0NTYtMworYWx3YXlzIFx1NzZGQiAxNS0xNi01CithbHdheXMgXHU3NkZDIDEyMzQtMTIzNi01CithbHdheXMgXHU3NkZEIDEyMzQ1LTEzNTYtMworYWx3YXlzIFx1NzZGRSAxNDUtMTIzNDU2LTUKK2Fsd2F5cyBcdTc2RkYgMTM0LTE0NTYtMgorYWx3YXlzIFx1NzcwMCAxMzQtMTM0NTYtMgorYWx3YXlzIFx1NzcwMSAyNC0xMzU2LTQKK2Fsd2F5cyBcdTc3MDIgMjQtMTU2LTUKK2Fsd2F5cyBcdTc3MDMgMjU2LTIKK2Fsd2F5cyBcdTc3MDQgMTM0LTIzNDUtNAorYWx3YXlzIFx1NzcwNSAxMjM0LTEyMzYtMworYWx3YXlzIFx1NzcwNiAxMjM0NS0xMzQ2LTQKK2Fsd2F5cyBcdTc3MDcgMTM0LTI0Ni00CithbHdheXMgXHU3NzA4IDE0NS0xMjM2LTMKK2Fsd2F5cyBcdTc3MDkgMTM0LTM1Ni0yCithbHdheXMgXHU3NzBBIDEzNC0xNDYtNQorYWx3YXlzIFx1NzcwQiAxMjMtMTIzNi01CithbHdheXMgXHU3NzBDIDE1LTIzNDUtNQorYWx3YXlzIFx1NzcwRCAxMjM1Ni0zCithbHdheXMgXHU3NzBFIDI0LTE1Ni01CithbHdheXMgXHU3NzBGIDQ2LTMKK2Fsd2F5cyBcdTc3MTAgMS0xMzU2LTMKK2Fsd2F5cyBcdTc3MTEgMjQ2LTQKK2Fsd2F5cyBcdTc3MTIgMjQtMTM2LTUKK2Fsd2F5cyBcdTc3MTMgMTIzNS0yNS01CithbHdheXMgXHU3NzE0IDE0NS0zNDUtNQorYWx3YXlzIFx1NzcxNSAxLTEzNi00CithbHdheXMgXHU3NzE2IDEyMy00NTYtNQorYWx3YXlzIFx1NzcxNyAxMy0xMjU2LTMKK2Fsd2F5cyBcdTc3MTggMjQtMTM2LTUKK2Fsd2F5cyBcdTc3MTkgMTYtMgorYWx3YXlzIFx1NzcxQSAyNC0xMzU2LTQKK2Fsd2F5cyBcdTc3MUIgMTM0LTM1Ni01CithbHdheXMgXHU3NzFDIDEzNC0xMjYtNQorYWx3YXlzIFx1NzcxRCAxLTM0LTUKK2Fsd2F5cyBcdTc3MUUgMS0xMzYtMworYWx3YXlzIFx1NzcxRiAxLTEzNi0zCithbHdheXMgXHU3NzIwIDEzNC0yMzQ1LTIKK2Fsd2F5cyBcdTc3MjEgMjQtMTU2LTUKK2Fsd2F5cyBcdTc3MjIgNDUtMworYWx3YXlzIFx1NzcyMyAxNDUtMzQ2LTIKK2Fsd2F5cyBcdTc3MjQgMTYtMgorYWx3YXlzIFx1NzcyNSAxMjUtMTU2LTUKK2Fsd2F5cyBcdTc3MjYgMTI1LTE1Ni01CithbHdheXMgXHU3NzI3IDEyLTE0Ni00CithbHdheXMgXHU3NzI4IDEtMzQ1LTQKK2Fsd2F5cyBcdTc3MjkgMTUtNDUtNQorYWx3YXlzIFx1NzcyQSAxMzUtMTM0NTYtNAorYWx3YXlzIFx1NzcyQiAxMzQtMTYtNAorYWx3YXlzIFx1NzcyQyAxNC0xMjM0Ni0yCithbHdheXMgXHU3NzJEIDE1LTEyNDYtMworYWx3YXlzIFx1NzcyRSAxNDUtMTIzNDYtNQorYWx3YXlzIFx1NzcyRiAxMzQtMTYtMworYWx3YXlzIFx1NzczMCAxNDUtMzQ2LTIKK2Fsd2F5cyBcdTc3MzEgMTYtMgorYWx3YXlzIFx1NzczMiAxMzQ1LTIzNDYtNQorYWx3YXlzIFx1NzczMyAxMzQtMTM0NTYtMgorYWx3YXlzIFx1NzczNCAxNS00NS01CithbHdheXMgXHU3NzM1IDEyLTE1Ni0zCithbHdheXMgXHU3NzM2IDEyMy00NTYtNQorYWx3YXlzIFx1NzczNyAxMy00NS01CithbHdheXMgXHU3NzM4IDEzNC0xMjM1Ni0yCithbHdheXMgXHU3NzM5IDEtMTM2LTUKK2Fsd2F5cyBcdTc3M0EgMTI0LTI0Ni01CithbHdheXMgXHU3NzNCIDQ2LTIKK2Fsd2F5cyBcdTc3M0MgMjM0NS00CithbHdheXMgXHU3NzNEIDEzNC0xMjYtNQorYWx3YXlzIFx1NzczRSAxLTEyMzQ2LTUKK2Fsd2F5cyBcdTc3M0YgMTM0LTI0NTYtNQorYWx3YXlzIFx1Nzc0MCAxLTIzNDYtMQorYWx3YXlzIFx1Nzc0MSAxLTEzNTYtMworYWx3YXlzIFx1Nzc0MiAxMzQtMzU2LTIKK2Fsd2F5cyBcdTc3NDMgMTUtMjUtMworYWx3YXlzIFx1Nzc0NCAyNC0xNDYtNQorYWx3YXlzIFx1Nzc0NSAxMjM1LTEyMzYtNQorYWx3YXlzIFx1Nzc0NiAxMjM1LTEyNDU2LTQKK2Fsd2F5cyBcdTc3NDcgMTQ1LTE2LTUKK2Fsd2F5cyBcdTc3NDggMTItMTM1Ni00CithbHdheXMgXHU3NzQ5IDI0NS0yNS0yCithbHdheXMgXHU3NzRBIDEzLTQ1LTUKK2Fsd2F5cyBcdTc3NEIgMjM0Ni0yCithbHdheXMgXHU3NzRDIDEyNDU2LTQKK2Fsd2F5cyBcdTc3NEQgMTUtMjM0NS01CithbHdheXMgXHU3NzRFIDE1LTE2LTMKK2Fsd2F5cyBcdTc3NEYgMTIzLTEyMzQ1Ni01CithbHdheXMgXHU3NzUwIDE0LTI0NTYtNQorYWx3YXlzIFx1Nzc1MSAxMy0yMzQ1LTQKK2Fsd2F5cyBcdTc3NTIgMjQtMTIzNi00CithbHdheXMgXHU3NzUzIDEyNC0yMzQ1LTQKK2Fsd2F5cyBcdTc3NTQgMTIzNS0xMjQ1Ni0yCithbHdheXMgXHU3NzU1IDEyNDU2LTQKK2Fsd2F5cyBcdTc3NTYgMTQtMTM0NTYtMgorYWx3YXlzIFx1Nzc1NyAyNC0xNTYtNQorYWx3YXlzIFx1Nzc1OCAyNDUtMjM1LTIKK2Fsd2F5cyBcdTc3NTkgMTQtMzQ2LTUKK2Fsd2F5cyBcdTc3NUEgMjM0NTYtMgorYWx3YXlzIFx1Nzc1QiAxMy0xMzQ1Ni0zCithbHdheXMgXHU3NzVDIDEtMTM1Ni0zCithbHdheXMgXHU3NzVEIDE0LTE2LTIKK2Fsd2F5cyBcdTc3NUUgMTQtMjQ1Ni01CithbHdheXMgXHU3NzVGIDE1LTEyNDYtNQorYWx3YXlzIFx1Nzc2MCAxMy00NS01CithbHdheXMgXHU3NzYxIDI0LTEyNDYtNQorYWx3YXlzIFx1Nzc2MiAxNS0xMjQ2LTMKK2Fsd2F5cyBcdTc3NjMgMTQ1LTM0LTMKK2Fsd2F5cyBcdTc3NjQgMTM1LTE2LTUKK2Fsd2F5cyBcdTc3NjUgMTM1LTE2LTUKK2Fsd2F5cyBcdTc3NjYgMTM0LTM0LTUKK2Fsd2F5cyBcdTc3NjcgMTIzNS0xMjM0NTYtMworYWx3YXlzIFx1Nzc2OCAxMzQ1LTE2LTUKK2Fsd2F5cyBcdTc3NjkgMTQtMzQtNQorYWx3YXlzIFx1Nzc2QSAxMy0xNDYtMworYWx3YXlzIFx1Nzc2QiAxMy0zNDYtMgorYWx3YXlzIFx1Nzc2QyAyNDUtMjQ1Ni00CithbHdheXMgXHU3NzZEIDEtMTIzNTYtNAorYWx3YXlzIFx1Nzc2RSAxMjU2LTIKK2Fsd2F5cyBcdTc3NkYgMTIzNS0xMjM0NTYtMworYWx3YXlzIFx1Nzc3MCAxMzQtMzQ1LTUKK2Fsd2F5cyBcdTc3NzEgMTUtMjM0NTYtNQorYWx3YXlzIFx1Nzc3MiAxNS0xMzQ1Ni00CithbHdheXMgXHU3NzczIDE1LTE2LTMKK2Fsd2F5cyBcdTc3NzQgMTMtMTIzNDU2LTUKK2Fsd2F5cyBcdTc3NzUgMTI1LTI0NTYtMworYWx3YXlzIFx1Nzc3NiAxMi0xMjM0NTYtNAorYWx3YXlzIFx1Nzc3NyAxMy0yMzQ1LTMKK2Fsd2F5cyBcdTc3NzggMTM0LTM1Ni01CithbHdheXMgXHU3Nzc5IDE0NS0zNC00CithbHdheXMgXHU3NzdBIDEyMzUtMTIzNTYtMgorYWx3YXlzIFx1Nzc3QiAxNS00NS0zCithbHdheXMgXHU3NzdDIDEyNC0xNi0yCithbHdheXMgXHU3NzdEIDEyMy0xMjQ2LTIKK2Fsd2F5cyBcdTc3N0UgMTMtMTQ2LTMKK2Fsd2F5cyBcdTc3N0YgMTI0NS0xMjQ2LTUKK2Fsd2F5cyBcdTc3ODAgMTM0LTE0Ni01CithbHdheXMgXHU3NzgxIDE1LTEyNTYtNQorYWx3YXlzIFx1Nzc4MiAxMjM0NS0zNDUtMworYWx3YXlzIFx1Nzc4MyAxMjM0NTYtMworYWx3YXlzIFx1Nzc4NCAxMzQtMjQ2LTIKK2Fsd2F5cyBcdTc3ODUgMTItMTIzNTYtNAorYWx3YXlzIFx1Nzc4NiAxMjMtMTI0Ni01CithbHdheXMgXHU3Nzg3IDEzNC0xNi0zCithbHdheXMgXHU3Nzg4IDEyMzQ2LTQKK2Fsd2F5cyBcdTc3ODkgMTMtMTYtNQorYWx3YXlzIFx1Nzc4QSAxNDUtMTM0Ni01CithbHdheXMgXHU3NzhCIDEyLTEzNi0zCithbHdheXMgXHU3NzhDIDEyMy0yMzQ2LTMKK2Fsd2F5cyBcdTc3OEQgMTUtMTIzNTYtNAorYWx3YXlzIFx1Nzc4RSAxNS0yMzQ1Ni0zCithbHdheXMgXHU3NzhGIDI0NS0yMzUtMgorYWx3YXlzIFx1Nzc5MCAxMzQtMTQ2LTUKK2Fsd2F5cyBcdTc3OTEgMTM0LTEzNDU2LTIKK2Fsd2F5cyBcdTc3OTIgMTM0LTEyMzYtMgorYWx3YXlzIFx1Nzc5MyAyNC0xMjQ2LTUKK2Fsd2F5cyBcdTc3OTQgMTI1LTIzNDYtMgorYWx3YXlzIFx1Nzc5NSAxLTEzNDYtNQorYWx3YXlzIFx1Nzc5NiAxNi01CithbHdheXMgXHU3Nzk3IDE0NS0yNDYtMworYWx3YXlzIFx1Nzc5OCAxMjMtMTIzNTYtMworYWx3YXlzIFx1Nzc5OSAxMzQtMTI2LTUKK2Fsd2F5cyBcdTc3OUEgMjQtMTIzNDU2LTUKK2Fsd2F5cyBcdTc3OUIgMjQ1LTEyMzQ2LTMKK2Fsd2F5cyBcdTc3OUMgMTQtMTIzNTYtMgorYWx3YXlzIFx1Nzc5RCAxMi0xNTYtMworYWx3YXlzIFx1Nzc5RSAxMzQtMTIzNi0yCithbHdheXMgXHU3NzlGIDEyMzQtMjQ2LTQKK2Fsd2F5cyBcdTc3QTAgMTItMTM1Ni0zCithbHdheXMgXHU3N0ExIDEzLTE2LTUKK2Fsd2F5cyBcdTc3QTIgMTM0LTEzNTYtMgorYWx3YXlzIFx1NzdBMyAxMjM1LTEyNDU2LTUKK2Fsd2F5cyBcdTc3QTQgMjQtMTIzNDU2LTUKK2Fsd2F5cyBcdTc3QTUgMTIzNC0zNDYtMworYWx3YXlzIFx1NzdBNiAxNS0xNi0zCithbHdheXMgXHU3N0E3IDI0NS0yNDYtMgorYWx3YXlzIFx1NzdBOCAxMjM0LTM0LTIKK2Fsd2F5cyBcdTc3QTkgMS0zNC00CithbHdheXMgXHU3N0FBIDE0NS0xMzU2LTUKK2Fsd2F5cyBcdTc3QUIgMjQtMTM2LTQKK2Fsd2F5cyBcdTc3QUMgMjQtMTIzNDU2LTUKK2Fsd2F5cyBcdTc3QUQgMTQtMjQ2LTQKK2Fsd2F5cyBcdTc3QUUgMTItMjM0Ni01CithbHdheXMgXHU3N0FGIDE1LTIzNDUtMgorYWx3YXlzIFx1NzdCMCAxMjMtMTIzNi01CithbHdheXMgXHU3N0IxIDM0Ni01CithbHdheXMgXHU3N0IyIDE1LTEyNTYtNQorYWx3YXlzIFx1NzdCMyAxMjQtMTIzNDYtMgorYWx3YXlzIFx1NzdCNCAxMzQtMTIzNTYtMgorYWx3YXlzIFx1NzdCNSAxNC0xNDU2LTIKK2Fsd2F5cyBcdTc3QjYgMTIzLTEyNDYtNQorYWx3YXlzIFx1NzdCNyAxMy0yMzQ1LTUKK2Fsd2F5cyBcdTc3QjggMzQ2LTUKK2Fsd2F5cyBcdTc3QjkgMjQ1Ni01CithbHdheXMgXHU3N0JBIDEyMzUtMTI0Ni01CithbHdheXMgXHU3N0JCIDEtMTIzNi0zCithbHdheXMgXHU3N0JDIDEzLTIzNDUtNAorYWx3YXlzIFx1NzdCRCAxMy0zNC00CithbHdheXMgXHU3N0JFIDEtMTQ2LTUKK2Fsd2F5cyBcdTc3QkYgMjQ1LTEyNTYtMgorYWx3YXlzIFx1NzdDMCAxMjQ2LTIKK2Fsd2F5cyBcdTc3QzEgMTItMTIzNTYtNAorYWx3YXlzIFx1NzdDMiAxNS0xNDYtNQorYWx3YXlzIFx1NzdDMyAxMzQ1LTEzNDU2LTQKK2Fsd2F5cyBcdTc3QzQgMTUtMjU2LTMKK2Fsd2F5cyBcdTc3QzUgMjQ2LTUKK2Fsd2F5cyBcdTc3QzYgMTIzNS0yNS01CithbHdheXMgXHU3N0M3IDEzNC0xMzU2LTIKK2Fsd2F5cyBcdTc3QzggMTM0LTIzNDUtMgorYWx3YXlzIFx1NzdDOSAxMjM0LTE0NTYtMgorYWx3YXlzIFx1NzdDQSAxMzQtMjM0NS0yCithbHdheXMgXHU3N0NCIDE0LTE2LTUKK2Fsd2F5cyBcdTc3Q0MgMTIzLTQ1Ni01CithbHdheXMgXHU3N0NEIDEzLTIzNi0yCithbHdheXMgXHU3N0NFIDE1LTQ1LTMKK2Fsd2F5cyBcdTc3Q0YgMTM0LTIzNDUtMgorYWx3YXlzIFx1NzdEMCAxMjM1LTI1LTUKK2Fsd2F5cyBcdTc3RDEgMTQtMzQtMgorYWx3YXlzIFx1NzdEMiAxMzQtMTM1Ni0yCithbHdheXMgXHU3N0QzIDE0LTEyMzQ2LTIKK2Fsd2F5cyBcdTc3RDQgMTMtMTI0NTYtNQorYWx3YXlzIFx1NzdENSAxMzQtMTIzNi00CithbHdheXMgXHU3N0Q2IDE1LTE2LTQKK2Fsd2F5cyBcdTc3RDcgMTItMzQtNQorYWx3YXlzIFx1NzdEOCAxMjQtMTM0Ni00CithbHdheXMgXHU3N0Q5IDEyMy0xMjM2LTUKK2Fsd2F5cyBcdTc3REEgMS0zNC00CithbHdheXMgXHU3N0RCIDEzNC0xNDYtMgorYWx3YXlzIFx1NzdEQyAxMy0xNDU2LTMKK2Fsd2F5cyBcdTc3REQgMTQtMTQ1Ni0yCithbHdheXMgXHU3N0RFIDEyNTYtNQorYWx3YXlzIFx1NzdERiAyNC0yNS01CithbHdheXMgXHU3N0UwIDI0NS0yMzQ2LTUKK2Fsd2F5cyBcdTc3RTEgMTMtMjM2LTIKK2Fsd2F5cyBcdTc3RTIgMjQtMTU2LTQKK2Fsd2F5cyBcdTc3RTMgMTYtNAorYWx3YXlzIFx1NzdFNCAyNC0xMzYtNAorYWx3YXlzIFx1NzdFNSAxLTE1Ni0zCithbHdheXMgXHU3N0U2IDEyMzUtMTIzNTYtMgorYWx3YXlzIFx1NzdFNyAyNC0xMzYtNAorYWx3YXlzIFx1NzdFOCAxMzQ1Ni00CithbHdheXMgXHU3N0U5IDEzLTEyNTYtNAorYWx3YXlzIFx1NzdFQSAxLTEyMzU2LTMKK2Fsd2F5cyBcdTc3RUIgMTMtMjQ2LTQKK2Fsd2F5cyBcdTc3RUMgMjQ1LTI1LTIKK2Fsd2F5cyBcdTc3RUQgMTQ1LTEyNDU2LTQKK2Fsd2F5cyBcdTc3RUUgMjQ1Ni00CithbHdheXMgXHU3N0VGIDEzLTI0Ni00CithbHdheXMgXHU3N0YwIDEyNS0xMzU2LTMKK2Fsd2F5cyBcdTc3RjEgMTIzNS0yNS01CithbHdheXMgXHU3N0YyIDEzNS0zNDUtNQorYWx3YXlzIFx1NzdGMyAyNC0xNTYtMgorYWx3YXlzIFx1NzdGNCAxNDUtMTM0NTYtNQorYWx3YXlzIFx1NzdGNSAyNDUtMTYtNQorYWx3YXlzIFx1NzdGNiAxMy0xNi0zCithbHdheXMgXHU3N0Y3IDEyNS0xNTYtNAorYWx3YXlzIFx1NzdGOCAxMy0xMjM2LTMKK2Fsd2F5cyBcdTc3RjkgMzQtNQorYWx3YXlzIFx1NzdGQSAxLTIzNDYtMgorYWx3YXlzIFx1NzdGQiAxMjMtMzQtNQorYWx3YXlzIFx1NzdGQyAxMy00Ni0zCithbHdheXMgXHU3N0ZEIDE1LTE2LTUKK2Fsd2F5cyBcdTc3RkUgMTIzNDUtMTIzNi0yCithbHdheXMgXHU3N0ZGIDEyMy00NTYtNQorYWx3YXlzIFx1NzgwMCAxNDUtMTM0Ni01CithbHdheXMgXHU3ODAxIDEzNC0zNDUtNAorYWx3YXlzIFx1NzgwMiAyNC0zNDUtMworYWx3YXlzIFx1NzgwMyAxNDUtMTIzNi0zCithbHdheXMgXHU3ODA0IDEzLTIzNi0yCithbHdheXMgXHU3ODA1IDE0LTE2LTUKK2Fsd2F5cyBcdTc4MDYgMTIzNDUtMzQtMworYWx3YXlzIFx1NzgwNyAxMzQtMTQ1Ni0yCithbHdheXMgXHU3ODA4IDIzNDYtNQorYWx3YXlzIFx1NzgwOSAxMjM1LTM1LTMKK2Fsd2F5cyBcdTc4MEEgMTIzLTEzNDYtNQorYWx3YXlzIFx1NzgwQiAxLTE1Ni00CithbHdheXMgXHU3ODBDIDI0NS0xNi01CithbHdheXMgXHU3ODBEIDEyMy0xMjM2LTQKK2Fsd2F5cyBcdTc4MEUgMTMtMzQ2LTUKK2Fsd2F5cyBcdTc4MEYgMTIzNC0xNDU2LTMKK2Fsd2F5cyBcdTc4MTAgMjM0Ni01CithbHdheXMgXHU3ODExIDIzNDU2LTUKK2Fsd2F5cyBcdTc4MTIgMTIzNC0xNi0zCithbHdheXMgXHU3ODEzIDEtMjM0Ni0yCithbHdheXMgXHU3ODE0IDIzNDUtMgorYWx3YXlzIFx1NzgxNSAxNS0xMjQ2LTUKK2Fsd2F5cyBcdTc4MTYgMS0xMjQ1Ni0zCithbHdheXMgXHU3ODE3IDEyLTIzNDYtMworYWx3YXlzIFx1NzgxOCAxNDUtMTIzNDU2LTUKK2Fsd2F5cyBcdTc4MTkgMTIzNC0xMjM2LTMKK2Fsd2F5cyBcdTc4MUEgMjM0NS01CithbHdheXMgXHU3ODFCIDEzLTE0NTYtMworYWx3YXlzIFx1NzgxQyAxMjM0NS0xMzU2LTMKK2Fsd2F5cyBcdTc4MUQgMTIzNDUtMzQ1LTQKK2Fsd2F5cyBcdTc4MUUgMTM0LTEyNi01CithbHdheXMgXHU3ODFGIDEtMzQ1LTMKK2Fsd2F5cyBcdTc4MjAgMjQ1LTEyNTYtMworYWx3YXlzIFx1NzgyMSAxMjU2LTUKK2Fsd2F5cyBcdTc4MjIgMTQtMjUtNAorYWx3YXlzIFx1NzgyMyAxMjQtMjUtMgorYWx3YXlzIFx1NzgyNCAxMjQtMjUtMgorYWx3YXlzIFx1NzgyNSAxNDUtMTYtNAorYWx3YXlzIFx1NzgyNiAxLTI0NTYtNQorYWx3YXlzIFx1NzgyNyAxLTEzNi0zCithbHdheXMgXHU3ODI4IDI0NTYtNQorYWx3YXlzIFx1NzgyOSAxMjM0NS0zNC0yCithbHdheXMgXHU3ODJBIDEzNC0zNC00CithbHdheXMgXHU3ODJCIDEtMzQtNAorYWx3YXlzIFx1NzgyQyAxNC0zNDUtMgorYWx3YXlzIFx1NzgyRCAxMzUtMjM0NS0zCithbHdheXMgXHU3ODJFIDEzNDUtMzQtNAorYWx3YXlzIFx1NzgyRiAxMjM0LTEzNDU2LTMKK2Fsd2F5cyBcdTc4MzAgMTIzNC0xMzU2LTMKK2Fsd2F5cyBcdTc4MzEgMTQtMTM0NTYtMgorYWx3YXlzIFx1NzgzMiAxMjM0LTE0Ni01CithbHdheXMgXHU3ODMzIDE0LTIzNDYtNQorYWx3YXlzIFx1NzgzNCAxMjM0LTEyNi01CithbHdheXMgXHU3ODM1IDEzNS0xMjYtMworYWx3YXlzIFx1NzgzNiAxMjM0LTEyNi01CithbHdheXMgXHU3ODM3IDI0LTEzNi0zCithbHdheXMgXHU3ODM4IDEyNS0zNDUtMgorYWx3YXlzIFx1NzgzOSAyNDU2LTUKK2Fsd2F5cyBcdTc4M0EgMTQtMTYtNQorYWx3YXlzIFx1NzgzQiAxNC0xMjM0Ni0yCithbHdheXMgXHU3ODNDIDEyNC0xMjM0Ni0yCithbHdheXMgXHU3ODNEIDIzNS01CithbHdheXMgXHU3ODNFIDE0LTE2LTUKK2Fsd2F5cyBcdTc4M0YgMTIzLTQ1Ni01CithbHdheXMgXHU3ODQwIDEyLTM0LTQKK2Fsd2F5cyBcdTc4NDEgMTIzLTEzNTYtMworYWx3YXlzIFx1Nzg0MiAyNDUtNDUtMgorYWx3YXlzIFx1Nzg0MyAxLTM0LTMKK2Fsd2F5cyBcdTc4NDQgMTIzLTQ1Ni0zCithbHdheXMgXHU3ODQ1IDEzLTEyNDYtMworYWx3YXlzIFx1Nzg0NiAyMzQ2LTUKK2Fsd2F5cyBcdTc4NDcgMTM0NS0xNDYtMgorYWx3YXlzIFx1Nzg0OCAxMy0yMzQ1Ni0yCithbHdheXMgXHU3ODQ5IDE0LTM0LTUKK2Fsd2F5cyBcdTc4NEEgMTI0Ni00CithbHdheXMgXHU3ODRCIDI0NTYtNQorYWx3YXlzIFx1Nzg0QyAxMy0yMzQ2LTUKK2Fsd2F5cyBcdTc4NEQgMTIzLTEzNi01CithbHdheXMgXHU3ODRFIDE1LTEzNDU2LTIKK2Fsd2F5cyBcdTc4NEYgMjM0NS0yCithbHdheXMgXHU3ODUwIDE0NS0xMjM0Ni01CithbHdheXMgXHU3ODUxIDEyMzQtMTM1Ni0zCithbHdheXMgXHU3ODUyIDE1LTE2LTMKK2Fsd2F5cyBcdTc4NTMgMTQtMTQ2LTQKK2Fsd2F5cyBcdTc4NTQgMTIzNS0xMjM0Ni0yCithbHdheXMgXHU3ODU1IDI0LTI1LTUKK2Fsd2F5cyBcdTc4NTYgMTUtMjM0NTYtMgorYWx3YXlzIFx1Nzg1NyAyNDUtMjQ2LTMKK2Fsd2F5cyBcdTc4NTggMjQ1LTEzNDU2LTIKK2Fsd2F5cyBcdTc4NTkgMTI0Ni01CithbHdheXMgXHU3ODVBIDI0NS0yNDYtMgorYWx3YXlzIFx1Nzg1QiAxMjUtMjM0Ni0yCithbHdheXMgXHU3ODVDIDEyMy0xMzU2LTMKK2Fsd2F5cyBcdTc4NUQgMTUtMjQ2LTMKK2Fsd2F5cyBcdTc4NUUgMjQ1LTIzNi01CithbHdheXMgXHU3ODVGIDEyLTEyMzYtNQorYWx3YXlzIFx1Nzg2MCAxNC0xMzQ2LTIKK2Fsd2F5cyBcdTc4NjEgMTIzNS0xMjM0Ni0yCithbHdheXMgXHU3ODYyIDEyNTYtMgorYWx3YXlzIFx1Nzg2MyAxNS0yNDYtMworYWx3YXlzIFx1Nzg2NCAxNS0yMzQ1Ni0yCithbHdheXMgXHU3ODY1IDEzNC0xMzQ2LTQKK2Fsd2F5cyBcdTc4NjYgMTQtMTIzNDYtNQorYWx3YXlzIFx1Nzg2NyAyMzUtNAorYWx3YXlzIFx1Nzg2OCAxMi0yMzQ2LTMKK2Fsd2F5cyBcdTc4NjkgMTItMjM0Ni01CithbHdheXMgXHU3ODZBIDI1LTUKK2Fsd2F5cyBcdTc4NkIgMTQtMjM0LTIKK2Fsd2F5cyBcdTc4NkMgMTM0NTYtNQorYWx3YXlzIFx1Nzg2RCAxMzQtMTM0Ni0yCithbHdheXMgXHU3ODZFIDI0NS0yMzYtNQorYWx3YXlzIFx1Nzg2RiAyMzQ1LTUKK2Fsd2F5cyBcdTc4NzAgMjQtMzQ1LTMKK2Fsd2F5cyBcdTc4NzEgMTIzLTEyMzQ1Ni00CithbHdheXMgXHU3ODcyIDEyNTYtNQorYWx3YXlzIFx1Nzg3MyAxMjUtMjM0Ni0yCithbHdheXMgXHU3ODc0IDEyMzUtMzUtMworYWx3YXlzIFx1Nzg3NSAxNC0zNC00CithbHdheXMgXHU3ODc2IDEyLTEzNi00CithbHdheXMgXHU3ODc3IDEzLTIzNDUtNAorYWx3YXlzIFx1Nzg3OCAxMzQ1LTIzNi01CithbHdheXMgXHU3ODc5IDE1LTEyMzQ2LTMKK2Fsd2F5cyBcdTc4N0EgMS0yNS0yCithbHdheXMgXHU3ODdCIDEyMy0xMzU2LTMKK2Fsd2F5cyBcdTc4N0MgMTIzNC0xMzU2LTIKK2Fsd2F5cyBcdTc4N0QgMjM0NS00CithbHdheXMgXHU3ODdFIDEtMTI0Ni01CithbHdheXMgXHU3ODdGIDEyMy0xMjM0Ni0zCithbHdheXMgXHU3ODgwIDI0NS0xMzU2LTIKK2Fsd2F5cyBcdTc4ODEgMjQ1LTE2LTIKK2Fsd2F5cyBcdTc4ODIgMTI1LTEyMzQ2LTUKK2Fsd2F5cyBcdTc4ODMgMjQ1LTEzNDU2LTUKK2Fsd2F5cyBcdTc4ODQgMTQtMTQ1Ni0yCithbHdheXMgXHU3ODg1IDEzLTI1Ni0zCithbHdheXMgXHU3ODg2IDEzNS0xMjYtMworYWx3YXlzIFx1Nzg4NyAxNDUtMTM0NTYtNQorYWx3YXlzIFx1Nzg4OCAxMzQtMTQ1Ni0yCithbHdheXMgXHU3ODg5IDE0NS0yNDYtMworYWx3YXlzIFx1Nzg4QSAxMy0yMzQ1LTMKK2Fsd2F5cyBcdTc4OEIgMTIzNS0yMzQ2LTUKK2Fsd2F5cyBcdTc4OEMgMTQtMzQtNQorYWx3YXlzIFx1Nzg4RCAyNDU2LTUKK2Fsd2F5cyBcdTc4OEUgMTUtMTI0Ni01CithbHdheXMgXHU3ODhGIDI0NS0yMzYtNQorYWx3YXlzIFx1Nzg5MCAxNC0xMzQ1Ni0yCithbHdheXMgXHU3ODkxIDEzNS0zNTYtMworYWx3YXlzIFx1Nzg5MiAxNDU2LTIKK2Fsd2F5cyBcdTc4OTMgMTQ1LTEyNDYtNQorYWx3YXlzIFx1Nzg5NCAzNC00CithbHdheXMgXHU3ODk1IDI0NS0xNi0yCithbHdheXMgXHU3ODk2IDE0LTEyMzQ1Ni01CithbHdheXMgXHU3ODk3IDEyNDU2LTQKK2Fsd2F5cyBcdTc4OTggMTQ1LTIzNDUtNAorYWx3YXlzIFx1Nzg5OSAxMy0xMzQ2LTMKK2Fsd2F5cyBcdTc4OUEgMTM1LTM1Ni01CithbHdheXMgXHU3ODlCIDI0NS0xNi01CithbHdheXMgXHU3ODlDIDEyLTEzNi00CithbHdheXMgXHU3ODlEIDEyNDUtMTI0NTYtNAorYWx3YXlzIFx1Nzg5RSAyMzQ1LTIKK2Fsd2F5cyBcdTc4OUYgMTQ1LTM0Ni0yCithbHdheXMgXHU3OEEwIDE0NS0xMzQ1Ni01CithbHdheXMgXHU3OEExIDEtMTIzNTYtMworYWx3YXlzIFx1NzhBMiAxMjQtMjUtMgorYWx3YXlzIFx1NzhBMyAxMy0zNDYtMgorYWx3YXlzIFx1NzhBNCAxMzQ1Ni0zCithbHdheXMgXHU3OEE1IDEzNS0yMzQ1LTQKK2Fsd2F5cyBcdTc4QTYgMTIzLTIzNDYtNQorYWx3YXlzIFx1NzhBNyAxMzUtMTYtNQorYWx3YXlzIFx1NzhBOCAxMjQ2LTMKK2Fsd2F5cyBcdTc4QTkgMjQtMjUtNQorYWx3YXlzIFx1NzhBQSAxLTEzNi0zCithbHdheXMgXHU3OEFCIDE0NS0xMjQ1Ni01CithbHdheXMgXHU3OEFDIDE1LTIzNDU2LTIKK2Fsd2F5cyBcdTc4QUQgMTQ1LTEzNDYtNQorYWx3YXlzIFx1NzhBRSAxMjQtMTYtMgorYWx3YXlzIFx1NzhBRiAxMzQ1LTE0Ni00CithbHdheXMgXHU3OEIwIDEyMzQtMTM1Ni01CithbHdheXMgXHU3OEIxIDEzLTIzNDUtNAorYWx3YXlzIFx1NzhCMiAxNDUtMTYtNQorYWx3YXlzIFx1NzhCMyAxMjQtMTIzNi01CithbHdheXMgXHU3OEI0IDEyLTM0NS0yCithbHdheXMgXHU3OEI1IDEyNC0yMzQ1LTIKK2Fsd2F5cyBcdTc4QjYgMjQ1LTE2LTUKK2Fsd2F5cyBcdTc4QjcgMTQ1LTEyMzQ1Ni01CithbHdheXMgXHU3OEI4IDEyMzQ1LTEzNTYtMworYWx3YXlzIFx1NzhCOSAxNS00NS01CithbHdheXMgXHU3OEJBIDI0NS0yMzYtNQorYWx3YXlzIFx1NzhCQiAyNDUtMjM2LTUKK2Fsd2F5cyBcdTc4QkMgMTM0LTM0NS00CithbHdheXMgXHU3OEJEIDEzLTEyMzQ2LTMKK2Fsd2F5cyBcdTc4QkUgMTM0NS0yMzQ1LTQKK2Fsd2F5cyBcdTc4QkYgMTUtMzQtNQorYWx3YXlzIFx1NzhDMCAyMzQ2LTIKK2Fsd2F5cyBcdTc4QzEgMjQ1LTE1Ni0yCithbHdheXMgXHU3OEMyIDE0LTIzNC01CithbHdheXMgXHU3OEMzIDE1LTE1Ni0zCithbHdheXMgXHU3OEM0IDEyNC0xMzQ2LTIKK2Fsd2F5cyBcdTc4QzUgMTM1LTEzNDYtNQorYWx3YXlzIFx1NzhDNiAxMjM1LTM1LTIKK2Fsd2F5cyBcdTc4QzcgMTIzNC0xNi0zCithbHdheXMgXHU3OEM4IDEyMy0xMjQ2LTQKK2Fsd2F5cyBcdTc4QzkgMTUtMTM0Ni00CithbHdheXMgXHU3OENBIDE0LTM1Ni00CithbHdheXMgXHU3OENCIDI0NS0yNS0zCithbHdheXMgXHU3OENDIDEyNC0yMzQ1LTIKK2Fsd2F5cyBcdTc4Q0QgMTUtMjM0NTYtMgorYWx3YXlzIFx1NzhDRSAxNS0xNi0zCithbHdheXMgXHU3OENGIDE0LTIzNDUtMgorYWx3YXlzIFx1NzhEMCAxMjM0LTEyMzYtMgorYWx3YXlzIFx1NzhEMSAxMjQ2LTUKK2Fsd2F5cyBcdTc4RDIgMjU2LTQKK2Fsd2F5cyBcdTc4RDMgMTQ1LTEyNDYtMworYWx3YXlzIFx1NzhENCAxLTIzNDYtMgorYWx3YXlzIFx1NzhENSAxMjMtMjM0Ni0zCithbHdheXMgXHU3OEQ2IDE0LTM0NS0yCithbHdheXMgXHU3OEQ3IDEtMTI0NTYtMworYWx3YXlzIFx1NzhEOCAyNDYtMgorYWx3YXlzIFx1NzhEOSAxMy0xMjM0NTYtNAorYWx3YXlzIFx1NzhEQSAxLTEyNDU2LTMKK2Fsd2F5cyBcdTc4REIgMTItMTIzNi0yCithbHdheXMgXHU3OERDIDI0NS0xNi01CithbHdheXMgXHU3OEREIDI0NS0yNDYtMworYWx3YXlzIFx1NzhERSAxMjM0LTEzNTYtMworYWx3YXlzIFx1NzhERiAxNC0zNC01CithbHdheXMgXHU3OEUwIDE0LTM0LTQKK2Fsd2F5cyBcdTc4RTEgMTIzLTEyMzYtNQorYWx3YXlzIFx1NzhFMiAyNDUtNDYtNAorYWx3YXlzIFx1NzhFMyAxMi0xMzYtNAorYWx3YXlzIFx1NzhFNCAxNDU2LTQKK2Fsd2F5cyBcdTc4RTUgMTQtMzU2LTQKK2Fsd2F5cyBcdTc4RTYgMTM1LTI0Ni0zCithbHdheXMgXHU3OEU3IDI0NS0xNi01CithbHdheXMgXHU3OEU4IDEzNC0xMjYtMgorYWx3YXlzIFx1NzhFOSAyNDUtMTYtMworYWx3YXlzIFx1NzhFQSAyNDUtMTI0Ni0zCithbHdheXMgXHU3OEVCIDEyNS0xMjM0Ni0zCithbHdheXMgXHU3OEVDIDI0NS0xMzQ1Ni01CithbHdheXMgXHU3OEVEIDEyLTI1LTUKK2Fsd2F5cyBcdTc4RUUgMTQtMTIzNDU2LTIKK2Fsd2F5cyBcdTc4RUYgMTMtMTYtMworYWx3YXlzIFx1NzhGMCAyNC0xMjM2LTUKK2Fsd2F5cyBcdTc4RjEgMTQtMTQ2LTIKK2Fsd2F5cyBcdTc4RjIgMjQ1LTEyNTYtMgorYWx3YXlzIFx1NzhGMyAxMjUtMTM1Ni0zCithbHdheXMgXHU3OEY0IDE0NS0xMzU2LTUKK2Fsd2F5cyBcdTc4RjUgMTMtMjM0NS01CithbHdheXMgXHU3OEY2IDE1LTE2LTUKK2Fsd2F5cyBcdTc4RjcgMTQtMTQ1Ni0yCithbHdheXMgXHU3OEY4IDE0NS0xMzQ1Ni01CithbHdheXMgXHU3OEY5IDE0NS0yMzQ1LTUKK2Fsd2F5cyBcdTc4RkEgMTIzNS00NTYtMgorYWx3YXlzIFx1NzhGQiAxMjM0LTEyMzYtMgorYWx3YXlzIFx1NzhGQyAxMjUtMzQ1LTIKK2Fsd2F5cyBcdTc4RkQgMjQ1LTI0Ni0zCithbHdheXMgXHU3OEZFIDE0NS0xNi0zCithbHdheXMgXHU3OEZGIDE0LTE2LTUKK2Fsd2F5cyBcdTc5MDAgMTMtMjM0NS01CithbHdheXMgXHU3OTAxIDEzLTI0Ni0zCithbHdheXMgXHU3OTAyIDE1LTE2LTMKK2Fsd2F5cyBcdTc5MDMgMS0xMzQ2LTQKK2Fsd2F5cyBcdTc5MDQgMjQ1LTI0Ni0yCithbHdheXMgXHU3OTA1IDE0NS0xMjM0NTYtMworYWx3YXlzIFx1NzkwNiAxMy0yMzQ1LTQKK2Fsd2F5cyBcdTc5MDcgMTI1Ni01CithbHdheXMgXHU3OTA4IDEtMTI0Ni01CithbHdheXMgXHU3OTA5IDEyMzUtMjM0Ni0yCithbHdheXMgXHU3OTBBIDEyMzUtMjUtNQorYWx3YXlzIFx1NzkwQiAxLTI0NTYtMgorYWx3YXlzIFx1NzkwQyAxNC0zNTYtNQorYWx3YXlzIFx1NzkwRCAxMjMtMjM0Ni00CithbHdheXMgXHU3OTBFIDEyLTM0LTQKK2Fsd2F5cyBcdTc5MEYgMTMtMTYtMgorYWx3YXlzIFx1NzkxMCAyNDUtMjM2LTUKK2Fsd2F5cyBcdTc5MTEgMTQ1LTEzNDYtNQorYWx3YXlzIFx1NzkxMiAxNi00CithbHdheXMgXHU3OTEzIDEzLTQ2LTMKK2Fsd2F5cyBcdTc5MTQgMTIzNC0xNi01CithbHdheXMgXHU3OTE1IDEyMzQtMTYtMworYWx3YXlzIFx1NzkxNiAxMjU2LTUKK2Fsd2F5cyBcdTc5MTcgMTIzNC0xNDU2LTMKK2Fsd2F5cyBcdTc5MTggMjQ1LTE2LTUKK2Fsd2F5cyBcdTc5MTkgMjQ1Ni01CithbHdheXMgXHU3OTFBIDEyMy0yMzQ2LTMKK2Fsd2F5cyBcdTc5MUIgMTMtMjM0NS0zCithbHdheXMgXHU3OTFDIDEyNTYtNQorYWx3YXlzIFx1NzkxRCAxMjQ1LTEyNDU2LTQKK2Fsd2F5cyBcdTc5MUUgMTM0LTEzNTYtMgorYWx3YXlzIFx1NzkxRiAxMjM0LTE0Ni01CithbHdheXMgXHU3OTIwIDI0NS0xNTYtMgorYWx3YXlzIFx1NzkyMSAxMzUtMTI2LTIKK2Fsd2F5cyBcdTc5MjIgNDYtNAorYWx3YXlzIFx1NzkyMyAxMzQtMzQ2LTUKK2Fsd2F5cyBcdTc5MjQgMjQ1LTM0NS00CithbHdheXMgXHU3OTI1IDE1LTIzNDUtMgorYWx3YXlzIFx1NzkyNiAxMjMtNDU2LTUKK2Fsd2F5cyBcdTc5MjcgMTQtMzU2LTQKK2Fsd2F5cyBcdTc5MjggMTQtMzU2LTQKK2Fsd2F5cyBcdTc5MjkgMS0xNTYtNQorYWx3YXlzIFx1NzkyQSAxNC0xNi01CithbHdheXMgXHU3OTJCIDE0LTE2LTUKK2Fsd2F5cyBcdTc5MkMgMTIzNDUtMTIzNi0yCithbHdheXMgXHU3OTJEIDI0NS0yMzYtNQorYWx3YXlzIFx1NzkyRSAxMjM0LTE0Ni01CithbHdheXMgXHU3OTJGIDEzNDU2LTMKK2Fsd2F5cyBcdTc5MzAgMTQtMTYtNQorYWx3YXlzIFx1NzkzMSAxNC0xMjM0Ni0yCithbHdheXMgXHU3OTMyIDE0LTEyMzQ2LTIKK2Fsd2F5cyBcdTc5MzMgMTM0LTEyNi01CithbHdheXMgXHU3OTM0IDEzNS0xMjYtMgorYWx3YXlzIFx1NzkzNSAyNC00NTYtMworYWx3YXlzIFx1NzkzNiAxMy0xMjQ1Ni01CithbHdheXMgXHU3OTM3IDE0LTEyMzYtMgorYWx3YXlzIFx1NzkzOCAxMjUtMTIzNi00CithbHdheXMgXHU3OTM5IDIzNDUtMgorYWx3YXlzIFx1NzkzQSAyNC0xNTYtNQorYWx3YXlzIFx1NzkzQiAyNC0xNTYtNQorYWx3YXlzIFx1NzkzQyAxNC0xNi00CithbHdheXMgXHU3OTNEIDEyNDUtMTM1Ni0yCithbHdheXMgXHU3OTNFIDI0LTIzNDYtNQorYWx3YXlzIFx1NzkzRiAyMzYtNQorYWx3YXlzIFx1Nzk0MCAxNS0xNTYtNQorYWx3YXlzIFx1Nzk0MSAyNDUtMTYtMgorYWx3YXlzIFx1Nzk0MiAxMjQtMzQ1OC0zCithbHdheXMgXHU3OTQzIDEzNC0zNDUtNQorYWx3YXlzIFx1Nzk0NCAxNS0zNDYtNQorYWx3YXlzIFx1Nzk0NSAyNDYtMworYWx3YXlzIFx1Nzk0NiAxNS0yMzQ1LTMKK2Fsd2F5cyBcdTc5NDcgMS0xNTYtNAorYWx3YXlzIFx1Nzk0OCAyNDUtMTYtMgorYWx3YXlzIFx1Nzk0OSAxLTE1Ni00CithbHdheXMgXHU3OTRBIDEzNS0xMzU2LTMKK2Fsd2F5cyBcdTc5NEIgMTQ1LTEyNDYtNQorYWx3YXlzIFx1Nzk0QyAxLTEyMzQ2LTUKK2Fsd2F5cyBcdTc5NEQgMTI0NS0xMzYtNQorYWx3YXlzIFx1Nzk0RSAxNi0zCithbHdheXMgXHU3OTRGIDI0LTE1Ni0yCithbHdheXMgXHU3OTUwIDIzNC01CithbHdheXMgXHU3OTUxIDEtMTU2LTUKK2Fsd2F5cyBcdTc5NTIgMTI0LTI0Ni0yCithbHdheXMgXHU3OTUzIDEyMzQ1LTM0LTIKK2Fsd2F5cyBcdTc5NTQgMTIzNDUtMzQtNQorYWx3YXlzIFx1Nzk1NSAxMzQtMTYtNQorYWx3YXlzIFx1Nzk1NiAxMjUtMzQtNAorYWx3YXlzIFx1Nzk1NyAxLTE1Ni0zCithbHdheXMgXHU3OTU4IDE1LTEyNDU2LTUKK2Fsd2F5cyBcdTc5NTkgMTM0LTM1Ni01CithbHdheXMgXHU3OTVBIDEyNS0yNS01CithbHdheXMgXHU3OTVCIDI0NS0xMjU2LTMKK2Fsd2F5cyBcdTc5NUMgMTIzNS0zNC01CithbHdheXMgXHU3OTVEIDEtMzQtNQorYWx3YXlzIFx1Nzk1RSAyNC0xMzYtMgorYWx3YXlzIFx1Nzk1RiAxNS0xMjQ2LTUKK2Fsd2F5cyBcdTc5NjAgMjQ1LTE1Ni0yCithbHdheXMgXHU3OTYxIDEyLTI0NTYtMgorYWx3YXlzIFx1Nzk2MiAxMzQ1LTE2LTQKK2Fsd2F5cyBcdTc5NjMgMTQtMTI1Ni00CithbHdheXMgXHU3OTY0IDEyNTYtNAorYWx3YXlzIFx1Nzk2NSAxNS00Ni0yCithbHdheXMgXHU3OTY2IDM0LTIKK2Fsd2F5cyBcdTc5NjcgMTI0LTI0Ni0zCithbHdheXMgXHU3OTY4IDEyMzQtMjQ2LTUKK2Fsd2F5cyBcdTc5NjkgMS0zNC0zCithbHdheXMgXHU3OTZBIDEzLTEyNDYtNAorYWx3YXlzIFx1Nzk2QiAxNS0yMzQ1Ni0yCithbHdheXMgXHU3OTZDIDEtMTU2LTMKK2Fsd2F5cyBcdTc5NkQgMTMtMTYtNQorYWx3YXlzIFx1Nzk2RSAxMy0xNDYtNQorYWx3YXlzIFx1Nzk2RiAxLTEzNi0zCithbHdheXMgXHU3OTcwIDEzLTE0Ni01CithbHdheXMgXHU3OTcxIDI0LTEyNDYtNQorYWx3YXlzIFx1Nzk3MiAxMy0xNDU2LTMKK2Fsd2F5cyBcdTc5NzMgMTItMTM2LTQKK2Fsd2F5cyBcdTc5NzQgMTMtMjQ1Ni0zCithbHdheXMgXHU3OTc1IDEyMy0xMjM0NTYtNAorYWx3YXlzIFx1Nzk3NiAxNDUtMTYtNQorYWx3YXlzIFx1Nzk3NyAxNDUtMTQ2LTQKK2Fsd2F5cyBcdTc5NzggMTIzNS0yNS01CithbHdheXMgXHU3OTc5IDEyNC0xNDYtMgorYWx3YXlzIFx1Nzk3QSAyNDUtMTYtMgorYWx3YXlzIFx1Nzk3QiAxMy0zNC01CithbHdheXMgXHU3OTdDIDEzLTEyNDU2LTUKK2Fsd2F5cyBcdTc5N0QgMTI1LTEyNDYtNQorYWx3YXlzIFx1Nzk3RSAxNC0xMzQ1Ni0yCithbHdheXMgXHU3OTdGIDE0LTM0LTUKK2Fsd2F5cyBcdTc5ODAgMTM1LTEzNDU2LTQKK2Fsd2F5cyBcdTc5ODEgMTMtMTQ1Ni01CithbHdheXMgXHU3OTgyIDE0NS0xNDYtNAorYWx3YXlzIFx1Nzk4MyAxLTE1Ni0yCithbHdheXMgXHU3OTg0IDE0LTM0LTUKK2Fsd2F5cyBcdTc5ODUgMTItMTIzNi0yCithbHdheXMgXHU3OTg2IDEzNS0zNTYtMworYWx3YXlzIFx1Nzk4NyAxMi0zNC00CithbHdheXMgXHU3OTg4IDEyMzUtMTI0Ni0zCithbHdheXMgXHU3OTg5IDIzNC00CithbHdheXMgXHU3OThBIDE1LTE2LTUKK2Fsd2F5cyBcdTc5OEIgMTQ1Ni0zCithbHdheXMgXHU3OThDIDEyNS0xNTYtMworYWx3YXlzIFx1Nzk4RCAxMjM1LTI1LTUKK2Fsd2F5cyBcdTc5OEUgMS0xMzYtMworYWx3YXlzIFx1Nzk4RiAxMjM0NS0zNC0yCithbHdheXMgXHU3OTkwIDQ1LTUKK2Fsd2F5cyBcdTc5OTEgMzQtMgorYWx3YXlzIFx1Nzk5MiAxNS0yMzQ1LTQKK2Fsd2F5cyBcdTc5OTMgNDYtMgorYWx3YXlzIFx1Nzk5NCAxMjQtMTYtMgorYWx3YXlzIFx1Nzk5NSAxNi0zCithbHdheXMgXHU3OTk2IDEzNC0zNTYtMgorYWx3YXlzIFx1Nzk5NyAxNS0xNTYtMworYWx3YXlzIFx1Nzk5OCAxNDUtMTYtNQorYWx3YXlzIFx1Nzk5OSAxMzUtMzU2LTUKK2Fsd2F5cyBcdTc5OUEgMS0yNS0yCithbHdheXMgXHU3OTlCIDEtMTM2LTMKK2Fsd2F5cyBcdTc5OUMgMjM1LTQKK2Fsd2F5cyBcdTc5OUQgMTMtMTYtMgorYWx3YXlzIFx1Nzk5RSAxMy0xNDYtNQorYWx3YXlzIFx1Nzk5RiAxMjQtMTM0Ni0yCithbHdheXMgXHU3OUEwIDE1LTE1Ni0zCithbHdheXMgXHU3OUExIDEzNC0zNDUtNQorYWx3YXlzIFx1NzlBMiAxMjQtMzQ1LTMKK2Fsd2F5cyBcdTc5QTMgMTIzNDUtMzQtNQorYWx3YXlzIFx1NzlBNCAxNS00NS0zCithbHdheXMgXHU3OUE1IDI0NS0xNi0yCithbHdheXMgXHU3OUE2IDEyNTYtNQorYWx3YXlzIFx1NzlBNyAxNS0xNi00CithbHdheXMgXHU3OUE4IDEzLTE2LTMKK2Fsd2F5cyBcdTc5QTkgMTUtMTU2LTUKK2Fsd2F5cyBcdTc5QUEgMTItMTIzNi0yCithbHdheXMgXHU3OUFCIDEyNC0xMjM2LTQKK2Fsd2F5cyBcdTc5QUMgMTIzLTIzNTYtNQorYWx3YXlzIFx1NzlBRCAxNS0xMjQ2LTUKK2Fsd2F5cyBcdTc5QUUgMTQtMTYtNAorYWx3YXlzIFx1NzlBRiAxMzQ1LTEyMzQ2LTIKK2Fsd2F5cyBcdTc5QjAgMTM0NS0xNi00CithbHdheXMgXHU3OUIxIDE0NS0xNDYtNAorYWx3YXlzIFx1NzlCMiAxNC0xNi01CithbHdheXMgXHU3OUIzIDEyNDUtMTM0Ni0yCithbHdheXMgXHU3OUI0IDIzNi01CithbHdheXMgXHU3OUI1IDEyNC0xNi0yCithbHdheXMgXHU3OUI2IDEyNS0xMjM2LTUKK2Fsd2F5cyBcdTc5QjcgMTQtMzU2LTUKK2Fsd2F5cyBcdTc5QjggMTI0NS0xMjM1Ni0yCithbHdheXMgXHU3OUI5IDEyNTYtNAorYWx3YXlzIFx1NzlCQSAxMjU2LTIKK2Fsd2F5cyBcdTc5QkIgMTQtMTYtMgorYWx3YXlzIFx1NzlCQyAxNS0zNDYtNQorYWx3YXlzIFx1NzlCRCAyNDUtMTQ1Ni0yCithbHdheXMgXHU3OUJFIDEyMzUtMjM0Ni0yCithbHdheXMgXHU3OUJGIDEyNC0zNC0zCithbHdheXMgXHU3OUMwIDE1LTIzNC01CithbHdheXMgXHU3OUMxIDE1LTE1Ni0zCithbHdheXMgXHU3OUMyIDEyNDUtMTM2LTIKK2Fsd2F5cyBcdTc5QzMgMTI0LTM0LTMKK2Fsd2F5cyBcdTc5QzQgMTI1LTE1Ni00CithbHdheXMgXHU3OUM1IDEyLTM0NS0yCithbHdheXMgXHU3OUM2IDEzLTEyMzYtNAorYWx3YXlzIFx1NzlDNyAxNi01CithbHdheXMgXHU3OUM4IDE1LTIzNDUtMworYWx3YXlzIFx1NzlDOSAxMzUtMTM0NTYtNAorYWx3YXlzIFx1NzlDQSAxMzQ1LTIzNDUtMgorYWx3YXlzIFx1NzlDQiAyNDUtMjM0LTMKK2Fsd2F5cyBcdTc5Q0MgMjQ1LTIzNC0zCithbHdheXMgXHU3OUNEIDEtMTIzNDYtNAorYWx3YXlzIFx1NzlDRSAxMjM0NS0xMzYtNQorYWx3YXlzIFx1NzlDRiAxMjM1LTE0Ni01CithbHdheXMgXHU3OUQwIDI1Ni0yCithbHdheXMgXHU3OUQxIDEyMy0yMzQ2LTMKK2Fsd2F5cyBcdTc5RDIgMTM0LTI0Ni00CithbHdheXMgXHU3OUQzIDEtMTU2LTMKK2Fsd2F5cyBcdTc5RDQgMTMtMTM1Ni0zCithbHdheXMgXHU3OUQ1IDEzNS0xNi00CithbHdheXMgXHU3OUQ2IDEtMTU2LTMKK2Fsd2F5cyBcdTc5RDcgMTI1Ni01CithbHdheXMgXHU3OUQ4IDEzNC0xNi01CithbHdheXMgXHU3OUQ5IDEyMy0zNC01CithbHdheXMgXHU3OURBIDEzNS0xMjM2LTUKK2Fsd2F5cyBcdTc5REIgMTIzNC0xNi0zCithbHdheXMgXHU3OURDIDEzNDUtMTYtMgorYWx3YXlzIFx1NzlERCAxNC0xNi01CithbHdheXMgXHU3OURFIDIzNC0yCithbHdheXMgXHU3OURGIDEyNS0zNC0zCithbHdheXMgXHU3OUUwIDEyMzQtMTYtMworYWx3YXlzIFx1NzlFMSAxMzUtMzQ1LTIKK2Fsd2F5cyBcdTc5RTIgMTQtMTM0NTYtMgorYWx3YXlzIFx1NzlFMyAxMzQtMTI2LTUKK2Fsd2F5cyBcdTc5RTQgMTItMTM1Ni01CithbHdheXMgXHU3OUU1IDEzNDUtMjM0NS0yCithbHdheXMgXHU3OUU2IDI0NS0xNDU2LTIKK2Fsd2F5cyBcdTc5RTcgNDYtMworYWx3YXlzIFx1NzlFOCAxMjUtMjUtMgorYWx3YXlzIFx1NzlFOSAxLTE1Ni01CithbHdheXMgXHU3OUVBIDEtMTU2LTMKK2Fsd2F5cyBcdTc5RUIgMjQtMzQtMgorYWx3YXlzIFx1NzlFQyAxMy0xMjU2LTUKK2Fsd2F5cyBcdTc5RUQgMTI1LTE1Ni00CithbHdheXMgXHU3OUVFIDEyMzUtMjUtMgorYWx3YXlzIFx1NzlFRiAxMy0xNi0zCithbHdheXMgXHU3OUYwIDEyLTEzNTYtMworYWx3YXlzIFx1NzlGMSAxMjQtMTIzNDYtMgorYWx3YXlzIFx1NzlGMiAxLTE1Ni01CithbHdheXMgXHU3OUYzIDEyMzUtMjUtMgorYWx3YXlzIFx1NzlGNCAxMjM1LTIzNDYtMgorYWx3YXlzIFx1NzlGNSAxNDU2LTMKK2Fsd2F5cyBcdTc5RjYgMTI1LTE1Ni01CithbHdheXMgXHU3OUY3IDEtMTU2LTIKK2Fsd2F5cyBcdTc5RjggMTMtMzQ2LTMKK2Fsd2F5cyBcdTc5RjkgMTI0NS0xMzYtNAorYWx3YXlzIFx1NzlGQSAxNDUtMzQtNQorYWx3YXlzIFx1NzlGQiAxNi0yCithbHdheXMgXHU3OUZDIDEtMzQtMworYWx3YXlzIFx1NzlGRCAxMjM1LTEyNDYtNQorYWx3YXlzIFx1NzlGRSAxMzQ1LTEyMzQ2LTIKK2Fsd2F5cyBcdTc5RkYgMTIzNDUtMzQtNAorYWx3YXlzIFx1N0EwMCAxNS0xNi0zCithbHdheXMgXHU3QTAxIDEzLTE0Ni00CithbHdheXMgXHU3QTAyIDE0LTEzNDYtMgorYWx3YXlzIFx1N0EwMyAxMjM0NS0zNC0zCithbHdheXMgXHU3QTA0IDEyNS0yMzQ2LTUKK2Fsd2F5cyBcdTdBMDUgMjQtMTI0Ni01CithbHdheXMgXHU3QTA2IDE0LTEyNTYtNAorYWx3YXlzIFx1N0EwNyAxMjMtMTIzNDU2LTQKK2Fsd2F5cyBcdTdBMDggMTMtMTIzNi00CithbHdheXMgXHU3QTA5IDEzLTEzNTYtMworYWx3YXlzIFx1N0EwQSAxMjQtMTYtMgorYWx3YXlzIFx1N0EwQiAxMi0xMzU2LTIKK2Fsd2F5cyBcdTdBMEMgMTI0LTM0LTIKK2Fsd2F5cyBcdTdBMEQgMjQtMTQ2LTMKK2Fsd2F5cyBcdTdBMEUgMjQtMTI0Ni01CithbHdheXMgXHU3QTBGIDIzNDU2LTUKK2Fsd2F5cyBcdTdBMTAgMTQtMTIzNDU2LTQKK2Fsd2F5cyBcdTdBMTEgMTQtMzQtNQorYWx3YXlzIFx1N0ExMiAxMy0zNC01CithbHdheXMgXHU3QTEzIDEyNS0yNS0yCithbHdheXMgXHU3QTE0IDEyNDUtMTM2LTQKK2Fsd2F5cyBcdTdBMTUgMS0xMjM0NTYtNQorYWx3YXlzIFx1N0ExNiAxMzUtMTM0Ni01CithbHdheXMgXHU3QTE3IDEzNS0yNDU2LTUKK2Fsd2F5cyBcdTdBMTggMTMtMTYtMworYWx3YXlzIFx1N0ExOSAxLTE1Ni0yCithbHdheXMgXHU3QTFBIDEtMTU2LTUKK2Fsd2F5cyBcdTdBMUIgMTIzLTEyMzQ1Ni00CithbHdheXMgXHU3QTFDIDE0LTEzNTYtMgorYWx3YXlzIFx1N0ExRCAxMjM0LTEzNTYtMgorYWx3YXlzIFx1N0ExRSAxMjMtMjM0Ni0zCithbHdheXMgXHU3QTFGIDEzNS0xMzQ1Ni00CithbHdheXMgXHU3QTIwIDEyLTEyMzU2LTIKK2Fsd2F5cyBcdTdBMjEgMTI1LTM0LTIKK2Fsd2F5cyBcdTdBMjIgMTI1Ni01CithbHdheXMgXHU3QTIzIDE1LTM0LTMKK2Fsd2F5cyBcdTdBMjQgMTQtMjM2LTUKK2Fsd2F5cyBcdTdBMjUgMTUtNDYtMworYWx3YXlzIFx1N0EyNiAxNi0zCithbHdheXMgXHU3QTI3IDE1LTE2LTUKK2Fsd2F5cyBcdTdBMjggMTM1LTIzNDUtMworYWx3YXlzIFx1N0EyOSAxMy0xNi01CithbHdheXMgXHU3QTJBIDEyMzQ1LTM0LTUKK2Fsd2F5cyBcdTdBMkIgMTM1LTE2LTUKK2Fsd2F5cyBcdTdBMkMgMTM0NS0yNS01CithbHdheXMgXHU3QTJEIDEzLTM0Ni0zCithbHdheXMgXHU3QTJFIDEtMTIzNDYtNAorYWx3YXlzIFx1N0EyRiAxMjUtMTIzNDYtMworYWx3YXlzIFx1N0EzMCAxNS0xMjU2LTMKK2Fsd2F5cyBcdTdBMzEgMTItMTM1Ni0zCithbHdheXMgXHU3QTMyIDE0NS0xNDYtNQorYWx3YXlzIFx1N0EzMyAxMjM0NTYtNAorYWx3YXlzIFx1N0EzNCAxNS0yMzQ1LTIKK2Fsd2F5cyBcdTdBMzUgMTI1LTE1Ni0zCithbHdheXMgXHU3QTM2IDEyNTYtNQorYWx3YXlzIFx1N0EzNyAxMy0xNi01CithbHdheXMgXHU3QTM4IDE1LTEyNTYtNQorYWx3YXlzIFx1N0EzOSAxLTEzNi00CithbHdheXMgXHU3QTNBIDEtMTU2LTUKK2Fsd2F5cyBcdTdBM0IgMTQ1LTE0Ni01CithbHdheXMgXHU3QTNDIDEzLTIzNDU2LTUKK2Fsd2F5cyBcdTdBM0QgMTMtMTYtMworYWx3YXlzIFx1N0EzRSAxMy0xNDYtNAorYWx3YXlzIFx1N0EzRiAxMy0xNDYtNAorYWx3YXlzIFx1N0E0MCAxMy0zNC00CithbHdheXMgXHU3QTQxIDEyNDUtMTIzNDYtMgorYWx3YXlzIFx1N0E0MiAxNS0xMjQ2LTUKK2Fsd2F5cyBcdTdBNDMgMjM1LTMKK2Fsd2F5cyBcdTdBNDQgMTMtMTYtNQorYWx3YXlzIFx1N0E0NSAxMjMtMTM0Ni0zCithbHdheXMgXHU3QTQ2IDEzNC0zNC01CithbHdheXMgXHU3QTQ3IDI0LTEyMzYtMworYWx3YXlzIFx1N0E0OCAxMzQtMTM2LTIKK2Fsd2F5cyBcdTdBNDkgMS0xNTYtNQorYWx3YXlzIFx1N0E0QSAxMy0xNi01CithbHdheXMgXHU3QTRCIDE0LTM0LTUKK2Fsd2F5cyBcdTdBNEMgMTUtMzQtMworYWx3YXlzIFx1N0E0RCAxMy0xNi0zCithbHdheXMgXHU3QTRFIDEzNDU2LTQKK2Fsd2F5cyBcdTdBNEYgMTIzNDU2LTQKK2Fsd2F5cyBcdTdBNTAgMjQ1LTIzNC0zCithbHdheXMgXHU3QTUxIDE1LTIzNDYtNQorYWx3YXlzIFx1N0E1MiAxMjQtMjUtMworYWx3YXlzIFx1N0E1MyAxNi01CithbHdheXMgXHU3QTU0IDEyMzUtNDU2LTIKK2Fsd2F5cyBcdTdBNTUgMjQ1LTM0Ni01CithbHdheXMgXHU3QTU2IDEzLTE2LTQKK2Fsd2F5cyBcdTdBNTcgMTUtMTI0Ni01CithbHdheXMgXHU3QTU4IDE1LTI0Ni0zCithbHdheXMgXHU3QTU5IDEyMzQtMzQtMgorYWx3YXlzIFx1N0E1QSAxMy0yNDYtMworYWx3YXlzIFx1N0E1QiAxLTI1LTMKK2Fsd2F5cyBcdTdBNUMgMTI0LTEyMzQ2LTIKK2Fsd2F5cyBcdTdBNUQgMTI1LTEyNDYtNQorYWx3YXlzIFx1N0E1RSAxNC0xMjU2LTQKK2Fsd2F5cyBcdTdBNUYgMTUtMTI0Ni01CithbHdheXMgXHU3QTYwIDEzNDUtMTIzNDYtMgorYWx3YXlzIFx1N0E2MSAxNS0yMzQ2LTUKK2Fsd2F5cyBcdTdBNjIgMTIzNS0xMjQ2LTUKK2Fsd2F5cyBcdTdBNjMgMTI0NS0xMzQ2LTIKK2Fsd2F5cyBcdTdBNjQgMTM0NS0yNS01CithbHdheXMgXHU3QTY1IDEyNTYtNQorYWx3YXlzIFx1N0E2NiAxMjM0LTE0NTYtMworYWx3YXlzIFx1N0E2NyAxMy0xNi01CithbHdheXMgXHU3QTY4IDEyNC0xMjQ2LTIKK2Fsd2F5cyBcdTdBNjkgMTIzNDU2LTQKK2Fsd2F5cyBcdTdBNkEgMTItMTM1Ni0zCithbHdheXMgXHU3QTZCIDEyMzUtMjUtNQorYWx3YXlzIFx1N0E2QyAxMy0xMjM0Ni00CithbHdheXMgXHU3QTZEIDE0LTEyNTYtNAorYWx3YXlzIFx1N0E2RSAxMzUtMjQ2LTMKK2Fsd2F5cyBcdTdBNkYgMTUtMjM0Ni01CithbHdheXMgXHU3QTcwIDEyNDUtMTM0Ni0yCithbHdheXMgXHU3QTcxIDEtMjUtMworYWx3YXlzIFx1N0E3MiAxNC0xNi0yCithbHdheXMgXHU3QTczIDEyNS0xMjM2LTUKK2Fsd2F5cyBcdTdBNzQgMTUtMjM2LTUKK2Fsd2F5cyBcdTdBNzUgMzUtMworYWx3YXlzIFx1N0E3NiAxMy0yMzQtNQorYWx3YXlzIFx1N0E3NyAyNDUtMjM1LTIKK2Fsd2F5cyBcdTdBNzggMTUtMTYtMworYWx3YXlzIFx1N0E3OSAyNDUtMjM1LTIKK2Fsd2F5cyBcdTdBN0EgMTIzLTEyMzQ2LTMKK2Fsd2F5cyBcdTdBN0IgMTI1Ni0zCithbHdheXMgXHU3QTdDIDE1LTEzNi0zCithbHdheXMgXHU3QTdEIDEzLTEzNDU2LTQKK2Fsd2F5cyBcdTdBN0UgMjQ2LTUKK2Fsd2F5cyBcdTdBN0YgMTItMTI0NTYtMworYWx3YXlzIFx1N0E4MCAxLTEyMzQ1Ni0zCithbHdheXMgXHU3QTgxIDEyNC0zNC0yCithbHdheXMgXHU3QTgyIDE0LTE0Ni0yCithbHdheXMgXHU3QTgzIDI0NS0zNDYtNQorYWx3YXlzIFx1N0E4NCAxLTI0NTYtNAorYWx3YXlzIFx1N0E4NSAyNDYtNAorYWx3YXlzIFx1N0E4NiAxMzUtMjM0NS00CithbHdheXMgXHU3QTg3IDEzNS0xNDYtMgorYWx3YXlzIFx1N0E4OCAyNDYtNAorYWx3YXlzIFx1N0E4OSAxMzUtMTM0NTYtNAorYWx3YXlzIFx1N0E4QSAzNS0zCithbHdheXMgXHU3QThCIDEtMzQtMgorYWx3YXlzIFx1N0E4QyAxMy0yNDYtNQorYWx3YXlzIFx1N0E4RCAyNDUtMjQ2LTUKK2Fsd2F5cyBcdTdBOEUgMTQ1LTI0Ni01CithbHdheXMgXHU3QThGIDM0LTMKK2Fsd2F5cyBcdTdBOTAgMzUtMworYWx3YXlzIFx1N0E5MSAyNDYtMgorYWx3YXlzIFx1N0E5MiAxLTE1Ni01CithbHdheXMgXHU3QTkzIDEyLTQ1Ni0zCithbHdheXMgXHU3QTk0IDI0Ni00CithbHdheXMgXHU3QTk1IDEyNC0yNDYtNAorYWx3YXlzIFx1N0E5NiAxMy0yNDYtNQorYWx3YXlzIFx1N0E5NyAxMi00NTYtMworYWx3YXlzIFx1N0E5OCAxMy0yMzUtNAorYWx3YXlzIFx1N0E5OSAxNS0yNDYtMworYWx3YXlzIFx1N0E5QSAxMi0xMzU2LTIKK2Fsd2F5cyBcdTdBOUIgMTIzLTEyMzU2LTUKK2Fsd2F5cyBcdTdBOUMgMjQ1LTEyNDU2LTUKK2Fsd2F5cyBcdTdBOUQgMjUtMworYWx3YXlzIFx1N0E5RSAxNDUtMTIzNi01CithbHdheXMgXHU3QTlGIDEyMy0zNC0zCithbHdheXMgXHU3QUEwIDEyMy0yMzQ2LTMKK2Fsd2F5cyBcdTdBQTEgMS0xMjQ2LTUKK2Fsd2F5cyBcdTdBQTIgMTUtMTI1Ni01CithbHdheXMgXHU3QUEzIDE1LTM0LTUKK2Fsd2F5cyBcdTdBQTQgMTMtMTI0NTYtMworYWx3YXlzIFx1N0FBNSAxMjMtMTI0Ni0zCithbHdheXMgXHU3QUE2IDE0NS0xMjM1Ni01CithbHdheXMgXHU3QUE3IDEtMjM0Ni0zCithbHdheXMgXHU3QUE4IDE0NTYtNQorYWx3YXlzIFx1N0FBOSAyNS0zCithbHdheXMgXHU3QUFBIDM1LTMKK2Fsd2F5cyBcdTdBQUIgMjM0NTYtNQorYWx3YXlzIFx1N0FBQyAxMjU2LTIKK2Fsd2F5cyBcdTdBQUQgMTMtMTI1Ni01CithbHdheXMgXHU3QUFFIDI0NS0yMzUtMgorYWx3YXlzIFx1N0FBRiAyNDYtMgorYWx3YXlzIFx1N0FCMCAyNDYtMgorYWx3YXlzIFx1N0FCMSAxMjQtMjQ2LTQKK2Fsd2F5cyBcdTdBQjIgMTItMTQ2LTIKK2Fsd2F5cyBcdTdBQjMgMTI1Ni00CithbHdheXMgXHU3QUI0IDEyNC0yMzQ1LTIKK2Fsd2F5cyBcdTdBQjUgMTQ1LTI0Ni01CithbHdheXMgXHU3QUI2IDEzLTEyNTYtNQorYWx3YXlzIFx1N0FCNyAxNC0yNDYtMgorYWx3YXlzIFx1N0FCOCAxNS0xNi0zCithbHdheXMgXHU3QUI5IDM0LTUKK2Fsd2F5cyBcdTdBQkEgMTIzLTEyNDYtMworYWx3YXlzIFx1N0FCQiAxMi00NTYtMworYWx3YXlzIFx1N0FCQyAxLTE0Ni0zCithbHdheXMgXHU3QUJEIDEyMy0xMjQ1Ni00CithbHdheXMgXHU3QUJFIDEyMy0xMjQ1Ni00CithbHdheXMgXHU3QUJGIDE0LTEyMzQ2LTIKK2Fsd2F5cyBcdTdBQzAgMTItMTM1Ni0zCithbHdheXMgXHU3QUMxIDI0NS0xMjQ2LTUKK2Fsd2F5cyBcdTdBQzIgMTIzNC0yNDYtMgorYWx3YXlzIFx1N0FDMyAxMjUtMTQ2LTUKK2Fsd2F5cyBcdTdBQzQgMjQ1LTEyNDU2LTUKK2Fsd2F5cyBcdTdBQzUgMjQ1LTI0Ni01CithbHdheXMgXHU3QUM2IDI0NS0yMzUtMgorYWx3YXlzIFx1N0FDNyAxNDUtMTIzNTYtNQorYWx3YXlzIFx1N0FDOCAxMjUtMTQ2LTUKK2Fsd2F5cyBcdTdBQzkgMTQtMTIzNDYtNAorYWx3YXlzIFx1N0FDQSAyNDUtMzQ2LTUKK2Fsd2F5cyBcdTdBQ0IgMTQtMTYtNQorYWx3YXlzIFx1N0FDQyAxMi0zNC01CithbHdheXMgXHU3QUNEIDI0LTE1Ni0yCithbHdheXMgXHU3QUNFIDEyMzQ1LTM0LTUKK2Fsd2F5cyBcdTdBQ0YgMjQ1LTIzNDUtMworYWx3YXlzIFx1N0FEMCAxMi0zNC01CithbHdheXMgXHU3QUQxIDEyMzUtMTIzNDYtMgorYWx3YXlzIFx1N0FEMiAyNDUtMTYtMgorYWx3YXlzIFx1N0FEMyAxMjM1LTE0Ni0yCithbHdheXMgXHU3QUQ0IDI0LTEzNTYtMworYWx3YXlzIFx1N0FENSAxMjM0NS0xMzYtMworYWx3YXlzIFx1N0FENiAyNC0zNC01CithbHdheXMgXHU3QUQ3IDEzNC0yNDYtNQorYWx3YXlzIFx1N0FEOCAxMy0xMjU2LTQKK2Fsd2F5cyBcdTdBRDkgMS0xMjM2LTUKK2Fsd2F5cyBcdTdBREEgMS0zNC01CithbHdheXMgXHU3QURCIDE0LTEzNDU2LTIKK2Fsd2F5cyBcdTdBREMgMTQtMTIzNDYtMgorYWx3YXlzIFx1N0FERCAxMzUtMTM0NTYtNQorYWx3YXlzIFx1N0FERSAxMy0xMzQ1Ni01CithbHdheXMgXHU3QURGIDEzLTEzNDU2LTUKK2Fsd2F5cyBcdTdBRTAgMS0xMzQ2LTMKK2Fsd2F5cyBcdTdBRTEgMTM1LTI0NTYtNAorYWx3YXlzIFx1N0FFMiAxNS0xNTYtNQorYWx3YXlzIFx1N0FFMyAxMy0yNTYtNQorYWx3YXlzIFx1N0FFNCAxMjM1LTEyMzQ2LTIKK2Fsd2F5cyBcdTdBRTUgMTI0LTEyMzQ2LTIKK2Fsd2F5cyBcdTdBRTYgMTUtMTIzNDYtNAorYWx3YXlzIFx1N0FFNyAxMy0xMzQ1Ni01CithbHdheXMgXHU3QUU4IDE0NS0yNDYtNQorYWx3YXlzIFx1N0FFOSAxNi01CithbHdheXMgXHU3QUVBIDI0LTM0LTUKK2Fsd2F5cyBcdTdBRUIgMTMtMTM0NTYtNQorYWx3YXlzIFx1N0FFQyAyNDUtMTI1Ni00CithbHdheXMgXHU3QUVEIDEzLTM0Ni0yCithbHdheXMgXHU3QUVFIDEyMzQtMTM0NTYtMgorYWx3YXlzIFx1N0FFRiAxNDUtMTI0NTYtMworYWx3YXlzIFx1N0FGMCAyNC0xNDYtMgorYWx3YXlzIFx1N0FGMSAxLTEyNDU2LTQKK2Fsd2F5cyBcdTdBRjIgMjQ1LTEzNTYtMgorYWx3YXlzIFx1N0FGMyAxNDUtMTM1Ni0zCithbHdheXMgXHU3QUY0IDI0NS0xMjQ2LTMKK2Fsd2F5cyBcdTdBRjUgMjM1Ni0zCithbHdheXMgXHU3QUY2IDEzLTEzNDU2LTUKK2Fsd2F5cyBcdTdBRjcgMTIzLTEyMzYtNAorYWx3YXlzIFx1N0FGOCAxMy0xMzQ1Ni01CithbHdheXMgXHU3QUY5IDEtMzQtMgorYWx3YXlzIFx1N0FGQSAxLTM0LTIKK2Fsd2F5cyBcdTdBRkIgMTQtMjM0Ni01CithbHdheXMgXHU3QUZDIDEyMzQtMTM1Ni0yCithbHdheXMgXHU3QUZEIDEyNTYtMgorYWx3YXlzIFx1N0FGRSAxMi0xNTYtMgorYWx3YXlzIFx1N0FGRiAxMy0xMjM2LTMKK2Fsd2F5cyBcdTdCMDAgMTM0LTEzNDYtMgorYWx3YXlzIFx1N0IwMSAxLTM0LTIKK2Fsd2F5cyBcdTdCMDIgMTI0NTYtMgorYWx3YXlzIFx1N0IwMyAxNDUtMzQtNAorYWx3YXlzIFx1N0IwNCAxMy0xNi0zCithbHdheXMgXHU3QjA1IDE1LTI0Ni0yCithbHdheXMgXHU3QjA2IDEzNS0zNDUtMworYWx3YXlzIFx1N0IwNyAxNS0xMjQ1Ni01CithbHdheXMgXHU3QjA4IDEzLTE2LTIKK2Fsd2F5cyBcdTdCMDkgMS0xMzYtNAorYWx3YXlzIFx1N0IwQSAxLTE0Ni01CithbHdheXMgXHU3QjBCIDE1LTEyMzQ1Ni00CithbHdheXMgXHU3QjBDIDIzNDU2LTIKK2Fsd2F5cyBcdTdCMEQgMS0xMjQ2LTUKK2Fsd2F5cyBcdTdCMEUgNDUtMgorYWx3YXlzIFx1N0IwRiAxMjM1LTM0LTUKK2Fsd2F5cyBcdTdCMTAgMTMtMTM0Ni0zCithbHdheXMgXHU3QjExIDE1LTI0Ni01CithbHdheXMgXHU3QjEyIDI0NS0xMzYtMgorYWx3YXlzIFx1N0IxMyAxMjM0LTE2LTIKK2Fsd2F5cyBcdTdCMTQgMTM1LTE2LTQKK2Fsd2F5cyBcdTdCMTUgMTMtMjM0NS00CithbHdheXMgXHU3QjE2IDE2LTQKK2Fsd2F5cyBcdTdCMTcgMTQ1LTEyMzQ2LTMKK2Fsd2F5cyBcdTdCMTggMjQtMTIzNi0zCithbHdheXMgXHU3QjE5IDI0LTEzNTYtMworYWx3YXlzIFx1N0IxQSAxNS0yMzQ1Ni0yCithbHdheXMgXHU3QjFCIDE0NS0xNi0yCithbHdheXMgXHU3QjFDIDEtMzQtMgorYWx3YXlzIFx1N0IxRCAxMzQ1LTM0NS01CithbHdheXMgXHU3QjFFIDEyLTE1Ni0zCithbHdheXMgXHU3QjFGIDEzLTM0LTMKK2Fsd2F5cyBcdTdCMjAgMTQtMTYtNQorYWx3YXlzIFx1N0IyMSAyNDUtMzQ2LTUKK2Fsd2F5cyBcdTdCMjIgMTM0LTE0NTYtNAorYWx3YXlzIFx1N0IyMyAxMzUtMTQ2LTMKK2Fsd2F5cyBcdTdCMjQgMTI0LTI0Ni0yCithbHdheXMgXHU3QjI1IDE1LTE1Ni01CithbHdheXMgXHU3QjI2IDEyMzQ1LTM0LTIKK2Fsd2F5cyBcdTdCMjcgMjQ1LTIzNDYtNQorYWx3YXlzIFx1N0IyOCAxMzUtMTM2LTUKK2Fsd2F5cyBcdTdCMjkgMTIzNC0zNTYtNQorYWx3YXlzIFx1N0IyQSAxNDUtMzQ1LTIKK2Fsd2F5cyBcdTdCMkIgMTI1LTE1Ni00CithbHdheXMgXHU3QjJDIDE0NS0xNi01CithbHdheXMgXHU3QjJEIDE0LTEzNDU2LTIKK2Fsd2F5cyBcdTdCMkUgMTI1LTIzNDYtMgorYWx3YXlzIFx1N0IyRiAxMzQ1LTM0LTIKK2Fsd2F5cyBcdTdCMzAgMTIzNDUtMzQtMgorYWx3YXlzIFx1N0IzMSAxMy0xMjM1Ni00CithbHdheXMgXHU3QjMyIDEyMzQ1LTEyMzYtMgorYWx3YXlzIFx1N0IzMyAxMy0yMzQ1Ni0zCithbHdheXMgXHU3QjM0IDEzLTIzNDYtNAorYWx3YXlzIFx1N0IzNSAxMjM0NS0xMjM2LTUKK2Fsd2F5cyBcdTdCMzYgMjQtMTU2LTQKK2Fsd2F5cyBcdTdCMzcgMTM0LTE0Ni00CithbHdheXMgXHU3QjM4IDEyMzQtMTI2LTQKK2Fsd2F5cyBcdTdCMzkgMTUtMjQ2LTQKK2Fsd2F5cyBcdTdCM0EgMTMtMjM0NS0zCithbHdheXMgXHU3QjNCIDE1LTIzNS0yCithbHdheXMgXHU3QjNDIDE0LTEyMzQ2LTIKK2Fsd2F5cyBcdTdCM0QgMTM0LTE0NTYtNAorYWx3YXlzIFx1N0IzRSAxMzUtMjM0NS0zCithbHdheXMgXHU3QjNGIDE0LTI1LTUKK2Fsd2F5cyBcdTdCNDAgMTMtMTI0Ni01CithbHdheXMgXHU3QjQxIDI0NS0xMjU2LTQKK2Fsd2F5cyBcdTdCNDIgMTItMTU2LTIKK2Fsd2F5cyBcdTdCNDMgMTQ1Ni0zCithbHdheXMgXHU3QjQ0IDI0Ni01CithbHdheXMgXHU3QjQ1IDE1LTIzNDUtNAorYWx3YXlzIFx1N0I0NiAxMzUtMTYtNAorYWx3YXlzIFx1N0I0NyAyNDUtMjM1LTIKK2Fsd2F5cyBcdTdCNDggMTMtMzUtMworYWx3YXlzIFx1N0I0OSAxNDUtMTM1Ni00CithbHdheXMgXHU3QjRBIDEzLTI0Ni00CithbHdheXMgXHU3QjRCIDEzLTE0NTYtMworYWx3YXlzIFx1N0I0QyAyNDUtNDUtMgorYWx3YXlzIFx1N0I0RCAxNS0xMjM0NTYtNAorYWx3YXlzIFx1N0I0RSAxMjQ1LTM0LTIKK2Fsd2F5cyBcdTdCNEYgMTIzNDUtMzQ1LTIKK2Fsd2F5cyBcdTdCNTAgMTIzLTQ1Ni0zCithbHdheXMgXHU3QjUxIDEtMzQtNQorYWx3YXlzIFx1N0I1MiAxMjQtMTIzNDYtNAorYWx3YXlzIFx1N0I1MyAxMy0xNi0zCithbHdheXMgXHU3QjU0IDE0NS0zNDUtMgorYWx3YXlzIFx1N0I1NSAxNS0xMzQ1Ni0yCithbHdheXMgXHU3QjU2IDI0NS0yMzQ2LTUKK2Fsd2F5cyBcdTdCNTcgMS0xMjM0Ni01CithbHdheXMgXHU3QjU4IDEyMy0xMjM1Ni01CithbHdheXMgXHU3QjU5IDE0LTI0NTYtMgorYWx3YXlzIFx1N0I1QSAxMzUtMTYtNQorYWx3YXlzIFx1N0I1QiAyNC0yNDU2LTMKK2Fsd2F5cyBcdTdCNUMgMTQ1LTEzNDYtMworYWx3YXlzIFx1N0I1RCAxLTEzNTYtMworYWx3YXlzIFx1N0I1RSAyNDUtMjM0Ni01CithbHdheXMgXHU3QjVGIDEyMzQ1LTM0LTMKK2Fsd2F5cyBcdTdCNjAgMjU2LTIKK2Fsd2F5cyBcdTdCNjEgMTI0LTM0LTIKK2Fsd2F5cyBcdTdCNjIgMTIzNC0zNDUtMgorYWx3YXlzIFx1N0I2MyAxNC0xNi0yCithbHdheXMgXHU3QjY0IDE0LTEzNDYtMgorYWx3YXlzIFx1N0I2NSAxMy0xMjU2LTQKK2Fsd2F5cyBcdTdCNjYgMTMtMTI0NTYtNAorYWx3YXlzIFx1N0I2NyAxMy0yMzQ1LTQKK2Fsd2F5cyBcdTdCNjggMTIzNS0xMjM2LTIKK2Fsd2F5cyBcdTdCNjkgMTI0LTEyMzQ2LTQKK2Fsd2F5cyBcdTdCNkEgMTUtMjM0NTYtMgorYWx3YXlzIFx1N0I2QiAxLTE1Ni01CithbHdheXMgXHU3QjZDIDEyLTEzNTYtMgorYWx3YXlzIFx1N0I2RCAxNS0xMjQ1Ni01CithbHdheXMgXHU3QjZFIDI0LTE1Ni01CithbHdheXMgXHU3QjZGIDEtMzQtNQorYWx3YXlzIFx1N0I3MCAxMjUtMjUtMgorYWx3YXlzIFx1N0I3MSAxNS0yNDYtNAorYWx3YXlzIFx1N0I3MiAyNC0xNDYtMworYWx3YXlzIFx1N0I3MyAxMjQtMTM0NTYtMgorYWx3YXlzIFx1N0I3NCAxMy0yMzQ1Ni0yCithbHdheXMgXHU3Qjc1IDIzNDUtMgorYWx3YXlzIFx1N0I3NiAxMy0xNDYtNAorYWx3YXlzIFx1N0I3NyAxMjMtMjM1Ni01CithbHdheXMgXHU3Qjc4IDEzLTEyMzYtMworYWx3YXlzIFx1N0I3OSAxMi0xMjM1Ni0yCithbHdheXMgXHU3QjdBIDEyMy00NTYtMworYWx3YXlzIFx1N0I3QiAxMy0xMzQ2LTUKK2Fsd2F5cyBcdTdCN0MgMjU2LTIKK2Fsd2F5cyBcdTdCN0QgMjUtMworYWx3YXlzIFx1N0I3RSAyNDUtMjM0NS0zCithbHdheXMgXHU3QjdGIDE1LTI0Ni00CithbHdheXMgXHU3QjgwIDEzLTIzNDUtNAorYWx3YXlzIFx1N0I4MSAxMjM0LTM0LTIKK2Fsd2F5cyBcdTdCODIgMTQtMjQ1Ni0yCithbHdheXMgXHU3QjgzIDEyNS0xMjM1Ni0zCithbHdheXMgXHU3Qjg0IDEyMzQtMjQ1Ni0yCithbHdheXMgXHU3Qjg1IDEzNS0xNi01CithbHdheXMgXHU3Qjg2IDEzNS0xNi01CithbHdheXMgXHU3Qjg3IDEzLTIzNDYtNQorYWx3YXlzIFx1N0I4OCAxMi0xNTYtMgorYWx3YXlzIFx1N0I4OSAxMy0yMzU2LTQKK2Fsd2F5cyBcdTdCOEEgMTI1Ni0zCithbHdheXMgXHU3QjhCIDEzLTIzNDUtMworYWx3YXlzIFx1N0I4QyAxLTE0Ni01CithbHdheXMgXHU3QjhEIDEzLTM0LTMKK2Fsd2F5cyBcdTdCOEUgMTItMTU2LTIKK2Fsd2F5cyBcdTdCOEYgMS0xMzU2LTMKK2Fsd2F5cyBcdTdCOTAgMjQ1LTEzNDU2LTUKK2Fsd2F5cyBcdTdCOTEgMjQtMzQ1LTUKK2Fsd2F5cyBcdTdCOTIgMS0xMjM1Ni00CithbHdheXMgXHU3QjkzIDE0LTM0LTUKK2Fsd2F5cyBcdTdCOTQgMTM1LTEyNi0yCithbHdheXMgXHU3Qjk1IDEzLTE2LTMKK2Fsd2F5cyBcdTdCOTYgMTQtMTQ1Ni0yCithbHdheXMgXHU3Qjk3IDE1LTEyNDU2LTUKK2Fsd2F5cyBcdTdCOTggMTMtMjU2LTUKK2Fsd2F5cyBcdTdCOTkgMTIzNDUtMzQtMgorYWx3YXlzIFx1N0I5QSAxLTM0NS0yCithbHdheXMgXHU3QjlCIDEzLTM0LTMKK2Fsd2F5cyBcdTdCOUMgMTIzLTEyMzQ2LTMKK2Fsd2F5cyBcdTdCOUQgMjQ1LTIzNDUtMgorYWx3YXlzIFx1N0I5RSAyNDUtNDUtMworYWx3YXlzIFx1N0I5RiAxMy0yNTYtNQorYWx3YXlzIFx1N0JBMCAxMi0xMjQ2LTIKK2Fsd2F5cyBcdTdCQTEgMTMtMTI0NTYtNAorYWx3YXlzIFx1N0JBMiA0NS0zCithbHdheXMgXHU3QkEzIDI0NS0yMzQ2LTUKK2Fsd2F5cyBcdTdCQTQgMTI1LTM0LTIKK2Fsd2F5cyBcdTdCQTUgMTM1LTEyNi00CithbHdheXMgXHU3QkE2IDEyNS0yMzQ2LTIKK2Fsd2F5cyBcdTdCQTcgMjQ1LTM0Ni01CithbHdheXMgXHU3QkE4IDEyNC0yNS01CithbHdheXMgXHU3QkE5IDE0LTI1LTIKK2Fsd2F5cyBcdTdCQUEgMTQ1LTEyMzYtMworYWx3YXlzIFx1N0JBQiAxNS0yNDYtMworYWx3YXlzIFx1N0JBQyAxMjQ1LTI1LTUKK2Fsd2F5cyBcdTdCQUQgMTMtMjM0NS01CithbHdheXMgXHU3QkFFIDE1LTQ1LTMKK2Fsd2F5cyBcdTdCQUYgMTM1LTIzNDUtMworYWx3YXlzIFx1N0JCMCAxNS0xMjM0NTYtNAorYWx3YXlzIFx1N0JCMSAxNS00Ni0zCithbHdheXMgXHU3QkIyIDE1LTIzNDUtNAorYWx3YXlzIFx1N0JCMyAxMjM0LTEzNDU2LTIKK2Fsd2F5cyBcdTdCQjQgMS0xMzYtMworYWx3YXlzIFx1N0JCNSAyNC0xMzU2LTQKK2Fsd2F5cyBcdTdCQjYgMTIzNS0zNC0yCithbHdheXMgXHU3QkI3IDI0LTE1Ni0zCithbHdheXMgXHU3QkI4IDEtMzQtNQorYWx3YXlzIFx1N0JCOSAyMzYtMworYWx3YXlzIFx1N0JCQSAxMi0xMjM0NTYtNAorYWx3YXlzIFx1N0JCQiAxNC0xMjU2LTUKK2Fsd2F5cyBcdTdCQkMgMzQtMworYWx3YXlzIFx1N0JCRCAxNDUtMTIzNDYtNAorYWx3YXlzIFx1N0JCRSAyNC0yNS01CithbHdheXMgXHU3QkJGIDEzLTE2LTIKK2Fsd2F5cyBcdTdCQzAgMTMtMzQ2LTIKK2Fsd2F5cyBcdTdCQzEgMTIzNS00NTYtMgorYWx3YXlzIFx1N0JDMiAxNS0xMzQ1Ni0zCithbHdheXMgXHU3QkMzIDEzNC0zNTYtNQorYWx3YXlzIFx1N0JDNCAxMjM0NS0xMjM2LTUKK2Fsd2F5cyBcdTdCQzUgMTItMTI0Ni0yCithbHdheXMgXHU3QkM2IDEtMTI0NTYtNQorYWx3YXlzIFx1N0JDNyAxMjM0LTIzNDUtMworYWx3YXlzIFx1N0JDOCAxMjM0NS0xMzU2LTMKK2Fsd2F5cyBcdTdCQzkgMS0zNC0yCithbHdheXMgXHU3QkNBIDEyMzUtMTIzNDYtMgorYWx3YXlzIFx1N0JDQiAyNDUtMzQ2LTUKK2Fsd2F5cyBcdTdCQ0MgMTIzNS0xMjM1Ni0yCithbHdheXMgXHU3QkNEIDI0NS0yMzQtMworYWx3YXlzIFx1N0JDRSAxMzQtMjQ2LTQKK2Fsd2F5cyBcdTdCQ0YgMjQ1LTIzNDUtNQorYWx3YXlzIFx1N0JEMCAxMy0zNC0zCithbHdheXMgXHU3QkQxIDEyMy0xMjQ2LTUKK2Fsd2F5cyBcdTdCRDIgMjQtMTU2LTIKK2Fsd2F5cyBcdTdCRDMgMTQtMTIzNTYtNAorYWx3YXlzIFx1N0JENCAyNTYtMgorYWx3YXlzIFx1N0JENSAxMjM1LTIzNDYtMgorYWx3YXlzIFx1N0JENiAxMjQtMTM0Ni0yCithbHdheXMgXHU3QkQ3IDIzNi01CithbHdheXMgXHU3QkQ4IDEyLTEyMzU2LTMKK2Fsd2F5cyBcdTdCRDkgMTMtMTQ2LTMKK2Fsd2F5cyBcdTdCREEgMTIzNDUtMzU2LTQKK2Fsd2F5cyBcdTdCREIgMTI0NS0yNS01CithbHdheXMgXHU3QkRDIDEtMTM1Ni0zCithbHdheXMgXHU3QkREIDEzLTEyMzU2LTMKK2Fsd2F5cyBcdTdCREUgMTM0NS0zNDYtNQorYWx3YXlzIFx1N0JERiAyNDUtMjM0NS01CithbHdheXMgXHU3QkUwIDE1LTI0Ni00CithbHdheXMgXHU3QkUxIDI0NS0xMjQ1Ni01CithbHdheXMgXHU3QkUyIDEzLTEyMzQ2LTMKK2Fsd2F5cyBcdTdCRTMgMTIzNC0xMzQ2LTIKK2Fsd2F5cyBcdTdCRTQgMTQ1LTM0LTQKK2Fsd2F5cyBcdTdCRTUgMTQtMTYtNQorYWx3YXlzIFx1N0JFNiAxMzUtMTYtNQorYWx3YXlzIFx1N0JFNyAxLTI1LTIKK2Fsd2F5cyBcdTdCRTggMTItMzQtMgorYWx3YXlzIFx1N0JFOSAyNC0yNDU2LTMKK2Fsd2F5cyBcdTdCRUEgMTItMTU2LTIKK2Fsd2F5cyBcdTdCRUIgMS0zNC0yCithbHdheXMgXHU3QkVDIDI0NS00Ni0zCithbHdheXMgXHU3QkVEIDE0LTEyMzQ2LTIKK2Fsd2F5cyBcdTdCRUUgMTQtMTIzNi0yCithbHdheXMgXHU3QkVGIDEzLTIzNDUtMworYWx3YXlzIFx1N0JGMCAxMzUtMzQtNQorYWx3YXlzIFx1N0JGMSAxNC0xNi0yCithbHdheXMgXHU3QkYyIDEyMzUtMTI0Ni01CithbHdheXMgXHU3QkYzIDEzNS0xNi01CithbHdheXMgXHU3QkY0IDE0NS0xNi0yCithbHdheXMgXHU3QkY1IDI0NS0xMjM0Ni0zCithbHdheXMgXHU3QkY2IDIzNDUtMworYWx3YXlzIFx1N0JGNyAxMjM0LTEzNTYtMgorYWx3YXlzIFx1N0JGOCAxMjUtMTIzNi0zCithbHdheXMgXHU3QkY5IDEtMTI0NTYtNQorYWx3YXlzIFx1N0JGQSAxMjM0LTI0NTYtMgorYWx3YXlzIFx1N0JGQiAxMjM0LTI0Ni00CithbHdheXMgXHU3QkZDIDE0NS0xMjM1Ni0zCithbHdheXMgXHU3QkZEIDEyNTYtNAorYWx3YXlzIFx1N0JGRSAxMzQtMzQ2LTUKK2Fsd2F5cyBcdTdCRkYgMTI0LTEyNDU2LTIKK2Fsd2F5cyBcdTdDMDAgMTI1LTIzNDYtMgorYWx3YXlzIFx1N0MwMSAyNC0yNDU2LTMKK2Fsd2F5cyBcdTdDMDIgMTMtMjUtMgorYWx3YXlzIFx1N0MwMyAxNi0yCithbHdheXMgXHU3QzA0IDEyMzUtMzQtNQorYWx3YXlzIFx1N0MwNSAxMi0xMjM2LTQKK2Fsd2F5cyBcdTdDMDYgMTIzLTEyMzU2LTUKK2Fsd2F5cyBcdTdDMDcgMjQ1LTM0LTUKK2Fsd2F5cyBcdTdDMDggMTIzNC0xMzQ1Ni0yCithbHdheXMgXHU3QzA5IDEyLTEyMzU2LTUKK2Fsd2F5cyBcdTdDMEEgMTMtMTYtMworYWx3YXlzIFx1N0MwQiAxMy0xMjQ2LTQKK2Fsd2F5cyBcdTdDMEMgMTUtMzQtNQorYWx3YXlzIFx1N0MwRCAxNC0xMjM1Ni00CithbHdheXMgXHU3QzBFIDI0NS0yNS01CithbHdheXMgXHU3QzBGIDE0LTM0LTUKK2Fsd2F5cyBcdTdDMTAgMTM0NS0yMzQ1LTQKK2Fsd2F5cyBcdTdDMTEgMTUtMjUtMworYWx3YXlzIFx1N0MxMiAyNDUtMTI0NTYtNQorYWx3YXlzIFx1N0MxMyAxNDUtMjQ2LTMKK2Fsd2F5cyBcdTdDMTQgMTUtMjUtMworYWx3YXlzIFx1N0MxNSAxNC0yMzQ2LTUKK2Fsd2F5cyBcdTdDMTYgMTQ1LTEyNDU2LTUKK2Fsd2F5cyBcdTdDMTcgMTQtNDYtNAorYWx3YXlzIFx1N0MxOCAxNS0yNDYtMworYWx3YXlzIFx1N0MxOSAxMzUtMTI2LTIKK2Fsd2F5cyBcdTdDMUEgMTM0LTE2LTUKK2Fsd2F5cyBcdTdDMUIgMTUtMTU2LTMKK2Fsd2F5cyBcdTdDMUMgMTQ1LTEzNDYtNQorYWx3YXlzIFx1N0MxRCAxNC0yNDYtMgorYWx3YXlzIFx1N0MxRSAxNDUtMTIzNi0zCithbHdheXMgXHU3QzFGIDE0NS0yMzQ1LTUKK2Fsd2F5cyBcdTdDMjAgMTIzNDUtMzQtNAorYWx3YXlzIFx1N0MyMSAxMy0yMzQ1LTQKK2Fsd2F5cyBcdTdDMjIgMTM0LTE0NTYtNAorYWx3YXlzIFx1N0MyMyAxMjMtMTI0Ni01CithbHdheXMgXHU3QzI0IDE0NS0yNDU2LTUKK2Fsd2F5cyBcdTdDMjUgMTMtMjQ2LTMKK2Fsd2F5cyBcdTdDMjYgMTQ1LTEzNTYtMworYWx3YXlzIFx1N0MyNyAxMjM1LTQ1Ni0yCithbHdheXMgXHU3QzI4IDE1LTEyMzQ1Ni00CithbHdheXMgXHU3QzI5IDE0LTE0Ni0yCithbHdheXMgXHU3QzJBIDEyNS0xMjM2LTMKK2Fsd2F5cyBcdTdDMkIgMTUtMjQ2LTMKK2Fsd2F5cyBcdTdDMkMgMTQtMzQtNQorYWx3YXlzIFx1N0MyRCAyNC0xNTYtNQorYWx3YXlzIFx1N0MyRSAxMjUtMTIzNi0zCithbHdheXMgXHU3QzJGIDI0NS0xNi00CithbHdheXMgXHU3QzMwIDEyMzQtMjQ1Ni0yCithbHdheXMgXHU3QzMxIDI0NS0xNi0yCithbHdheXMgXHU3QzMyIDEyMzQtMjQ1Ni0yCithbHdheXMgXHU3QzMzIDEzLTEyMzYtNAorYWx3YXlzIFx1N0MzNCAxMy0xMjU2LTUKK2Fsd2F5cyBcdTdDMzUgMTQ1LTM0LTUKK2Fsd2F5cyBcdTdDMzYgMTQtMzQtNQorYWx3YXlzIFx1N0MzNyAyMzQ1LTIKK2Fsd2F5cyBcdTdDMzggMTM1LTEyNi00CithbHdheXMgXHU3QzM5IDE0NS0xMzQ2LTMKK2Fsd2F5cyBcdTdDM0EgMTUtMjQ1Ni01CithbHdheXMgXHU3QzNCIDEtMzUtMworYWx3YXlzIFx1N0MzQyAxNC0xMjM0Ni0yCithbHdheXMgXHU3QzNEIDI0NS0yMzQ1LTMKK2Fsd2F5cyBcdTdDM0UgMTQtMjM0NS0yCithbHdheXMgXHU3QzNGIDEzNS0zNC01CithbHdheXMgXHU3QzQwIDEtMTIzNTYtNQorYWx3YXlzIFx1N0M0MSAxNC0yNDU2LTUKK2Fsd2F5cyBcdTdDNDIgMjQtMTU2LTUKK2Fsd2F5cyBcdTdDNDMgMTQtMTIzNi0yCithbHdheXMgXHU3QzQ0IDEyMy0xMjQ2LTUKK2Fsd2F5cyBcdTdDNDUgMTI1Ni0yCithbHdheXMgXHU3QzQ2IDIzNi01CithbHdheXMgXHU3QzQ3IDEyMzUtMTQ2LTIKK2Fsd2F5cyBcdTdDNDggMS0xMzYtMworYWx3YXlzIFx1N0M0OSAxMjQtMjQ1Ni0yCithbHdheXMgXHU3QzRBIDEyNC0xNi01CithbHdheXMgXHU3QzRCIDEzNDUtMzQ2LTUKK2Fsd2F5cyBcdTdDNEMgMTItMTIzNTYtMgorYWx3YXlzIFx1N0M0RCAxMy0xNi0yCithbHdheXMgXHU3QzRFIDE2LTIKK2Fsd2F5cyBcdTdDNEYgMjQ1LTE2LTIKK2Fsd2F5cyBcdTdDNTAgMTI0LTEzNTYtMgorYWx3YXlzIFx1N0M1MSAxLTEyNDU2LTUKK2Fsd2F5cyBcdTdDNTIgMS0xMjM1Ni01CithbHdheXMgXHU3QzUzIDEyMzQ1LTEyMzYtMworYWx3YXlzIFx1N0M1NCAxNS0xMjM1Ni00CithbHdheXMgXHU3QzU1IDEtMTIzNTYtNQorYWx3YXlzIFx1N0M1NiAyNDUtMjM0NS0zCithbHdheXMgXHU3QzU3IDEtMjUtMgorYWx3YXlzIFx1N0M1OCAxMjQtMTM1Ni0yCithbHdheXMgXHU3QzU5IDE0LTM0LTUKK2Fsd2F5cyBcdTdDNUEgMTQtMzQtMgorYWx3YXlzIFx1N0M1QiAxMy0yMzQ1LTMKK2Fsd2F5cyBcdTdDNUMgMTI0LTI1LTUKK2Fsd2F5cyBcdTdDNUQgMTM0NTYtMgorYWx3YXlzIFx1N0M1RSAxMjU2LTUKK2Fsd2F5cyBcdTdDNUYgMTQtMjQ1Ni01CithbHdheXMgXHU3QzYwIDE0LTEyMzQ2LTIKK2Fsd2F5cyBcdTdDNjEgMjQ1LTM0Ni01CithbHdheXMgXHU3QzYyIDE0LTIzNDUtMgorYWx3YXlzIFx1N0M2MyAxNC0xMjM2LTIKK2Fsd2F5cyBcdTdDNjQgMjQ1LTIzNDUtMworYWx3YXlzIFx1N0M2NSAyMzYtNQorYWx3YXlzIFx1N0M2NiAxLTEyMzQ2LTMKK2Fsd2F5cyBcdTdDNjcgMjQ1LTEyNTYtMgorYWx3YXlzIFx1N0M2OCAxNC0yMzQ1LTIKK2Fsd2F5cyBcdTdDNjkgMTM1LTIzNDUtMworYWx3YXlzIFx1N0M2QSAxNDUtMTI0NTYtNQorYWx3YXlzIFx1N0M2QiAxMjUtMTI0NTYtNAorYWx3YXlzIFx1N0M2QyAxNC0xNi0yCithbHdheXMgXHU3QzZEIDE1LTE1Ni0zCithbHdheXMgXHU3QzZFIDE0LTI1LTIKK2Fsd2F5cyBcdTdDNkYgMTM0NTYtMgorYWx3YXlzIFx1N0M3MCAyMzYtNQorYWx3YXlzIFx1N0M3MSAxLTI1LTIKK2Fsd2F5cyBcdTdDNzIgMTI1Ni01CithbHdheXMgXHU3QzczIDEzNC0xNi00CithbHdheXMgXHU3Qzc0IDE0NS0xNi0yCithbHdheXMgXHU3Qzc1IDEyMzQ1LTEyMzYtMgorYWx3YXlzIFx1N0M3NiAyNC0xMzYtMworYWx3YXlzIFx1N0M3NyAxLTIzNDYtMgorYWx3YXlzIFx1N0M3OCAyNC0xMzYtMworYWx3YXlzIFx1N0M3OSAxMzQ1LTEyNTYtNAorYWx3YXlzIFx1N0M3QSAxNS0zNDYtMgorYWx3YXlzIFx1N0M3QiAxNC0zNTYtNQorYWx3YXlzIFx1N0M3QyAxNS0yMzQ1LTMKK2Fsd2F5cyBcdTdDN0QgMTI1LTE1Ni00CithbHdheXMgXHU3QzdFIDEzNDUtMTYtMgorYWx3YXlzIFx1N0M3RiAyNDUtMTIzNDU2LTUKK2Fsd2F5cyBcdTdDODAgMS0xMzQ2LTUKK2Fsd2F5cyBcdTdDODEgMjQ1LTIzNDUtMworYWx3YXlzIFx1N0M4MiAxLTI0NTYtMworYWx3YXlzIFx1N0M4MyAxMzUtMTYtNAorYWx3YXlzIFx1N0M4NCAxMzUtMTIzNi00CithbHdheXMgXHU3Qzg1IDM0LTUKK2Fsd2F5cyBcdTdDODYgMjQtMzQ1LTMKK2Fsd2F5cyBcdTdDODcgMTIzLTEzNDYtMworYWx3YXlzIFx1N0M4OCAxMjQ1LTEyMzU2LTIKK2Fsd2F5cyBcdTdDODkgMTIzNDUtMTM2LTQKK2Fsd2F5cyBcdTdDOEEgMTM1LTE2LTUKK2Fsd2F5cyBcdTdDOEIgMjQ1LTEyNDYtNQorYWx3YXlzIFx1N0M4QyAxNDU2LTQKK2Fsd2F5cyBcdTdDOEQgMTQtMTYtMgorYWx3YXlzIFx1N0M4RSAxMi0xNTYtNAorYWx3YXlzIFx1N0M4RiAxMjQtMjQ1Ni01CithbHdheXMgXHU3QzkwIDEyMy0zNC01CithbHdheXMgXHU3QzkxIDEzNS0zNDUtMworYWx3YXlzIFx1N0M5MiAxNC0xNi01CithbHdheXMgXHU3QzkzIDEzLTEyMzYtMworYWx3YXlzIFx1N0M5NCAxMy0xMjU2LTUKK2Fsd2F5cyBcdTdDOTUgMTIzNC0xMjYtNQorYWx3YXlzIFx1N0M5NiAxMzQtMTI2LTUKK2Fsd2F5cyBcdTdDOTcgMjQ1LTM0LTMKK2Fsd2F5cyBcdTdDOTggMTM0NS0yMzQ1LTIKK2Fsd2F5cyBcdTdDOTkgMS0xMjM1Ni01CithbHdheXMgXHU3QzlBIDE0LTE2LTIKK2Fsd2F5cyBcdTdDOUIgMTUtMzQtNQorYWx3YXlzIFx1N0M5QyAxMjQtMjQ2LTUKK2Fsd2F5cyBcdTdDOUQgMTQtMTYtNQorYWx3YXlzIFx1N0M5RSAxNS0xNi0zCithbHdheXMgXHU3QzlGIDE1LTM0LTUKK2Fsd2F5cyBcdTdDQTAgMTIzNS0xMjM0Ni0yCithbHdheXMgXHU3Q0ExIDEyNC0xMjM0Ni0yCithbHdheXMgXHU3Q0EyIDEyNS0xNTYtMworYWx3YXlzIFx1N0NBMyAyNDUtMjM0Ni01CithbHdheXMgXHU3Q0E0IDIzNi01CithbHdheXMgXHU3Q0E1IDEtMTIzNTYtMworYWx3YXlzIFx1N0NBNiAxNC0xNDU2LTIKK2Fsd2F5cyBcdTdDQTcgMS00NTYtMworYWx3YXlzIFx1N0NBOCAxMzUtMjQ1Ni00CithbHdheXMgXHU3Q0E5IDE0LTE0Ni0zCithbHdheXMgXHU3Q0FBIDEyMzQ1LTEzNi01CithbHdheXMgXHU3Q0FCIDE1Ni0yCithbHdheXMgXHU3Q0FDIDI0NS0xMjU2LTMKK2Fsd2F5cyBcdTdDQUQgMTIzNS0yMzQ2LTIKK2Fsd2F5cyBcdTdDQUUgMTQtNDYtMgorYWx3YXlzIFx1N0NBRiAxNS0yMzQ1LTUKK2Fsd2F5cyBcdTdDQjAgMTIzNDUtMzQtMworYWx3YXlzIFx1N0NCMSAxNC00Ni0yCithbHdheXMgXHU3Q0IyIDI0NS0xMjM2LTUKK2Fsd2F5cyBcdTdDQjMgMTMtMTM0NTYtMworYWx3YXlzIFx1N0NCNCAxNC0xNi00CithbHdheXMgXHU3Q0I1IDIzNi01CithbHdheXMgXHU3Q0I2IDE0LTM0LTUKK2Fsd2F5cyBcdTdDQjcgMTMtMTI1Ni0yCithbHdheXMgXHU3Q0I4IDI0NS0xNi0yCithbHdheXMgXHU3Q0I5IDI0NS0xMjQ2LTUKK2Fsd2F5cyBcdTdDQkEgMTM1LTI0NTYtNQorYWx3YXlzIFx1N0NCQiAxLTEzNDYtMworYWx3YXlzIFx1N0NCQyAxNC0xNDU2LTIKK2Fsd2F5cyBcdTdDQkQgMTI1LTEyMzQ2LTUKK2Fsd2F5cyBcdTdDQkUgMTMtMTM0NTYtMworYWx3YXlzIFx1N0NCRiAxMy0yNS00CithbHdheXMgXHU3Q0MwIDEyMzUtMzUtMworYWx3YXlzIFx1N0NDMSAxNS0xMjM2LTQKK2Fsd2F5cyBcdTdDQzIgMTUtMTIzNi00CithbHdheXMgXHU3Q0MzIDEyNC0xMzQ2LTIKK2Fsd2F5cyBcdTdDQzQgMTM1LTIzNDUtMworYWx3YXlzIFx1N0NDNSAxMjQ1LTEyMzU2LTQKK2Fsd2F5cyBcdTdDQzYgMTM0LTIzNDUtNQorYWx3YXlzIFx1N0NDNyAxMjM1LTEyMzU2LTIKK2Fsd2F5cyBcdTdDQzggMTUtMTI1Ni00CithbHdheXMgXHU3Q0M5IDEyNS0xMjM0Ni01CithbHdheXMgXHU3Q0NBIDEyMzUtMzQtMgorYWx3YXlzIFx1N0NDQiAxMy0yMzQ1LTUKK2Fsd2F5cyBcdTdDQ0MgMTI1LTEyMzYtMgorYWx3YXlzIFx1N0NDRCAyNDUtMTU2LTIKK2Fsd2F5cyBcdTdDQ0UgMTM4LTEyMzQ2LTMtMTIzNDU4LTEzNi0zCithbHdheXMgXHU3Q0NGIDE1LTM0Ni01CithbHdheXMgXHU3Q0QwIDEyMzQ1LTM0LTMKK2Fsd2F5cyBcdTdDRDEgMTM0NS0xNi01CithbHdheXMgXHU3Q0QyIDEzNS0zNTYtNQorYWx3YXlzIFx1N0NEMyAxMy0zNC00CithbHdheXMgXHU3Q0Q0IDE1LTIzNC00CithbHdheXMgXHU3Q0Q1IDEzLTE0Ni0zCithbHdheXMgXHU3Q0Q2IDEyNC0xMzQ2LTIKK2Fsd2F5cyBcdTdDRDcgMjQ1LTIzNC00CithbHdheXMgXHU3Q0Q4IDEzLTIzNDU2LTMKK2Fsd2F5cyBcdTdDRDkgMjQ1LTE0Ni0zCithbHdheXMgXHU3Q0RBIDEtNDU2LTMKK2Fsd2F5cyBcdTdDREIgMTI0LTEzNDYtMgorYWx3YXlzIFx1N0NEQyAxMzQtMTYtMgorYWx3YXlzIFx1N0NERCAxNS0xMjM2LTQKK2Fsd2F5cyBcdTdDREUgMTIzNDUtMTM2LTUKK2Fsd2F5cyBcdTdDREYgMTI1LTE0Ni0zCithbHdheXMgXHU3Q0UwIDEyMy0xMzQ2LTMKK2Fsd2F5cyBcdTdDRTEgMTMtNDYtNQorYWx3YXlzIFx1N0NFMiAxMzQtMTI2LTIKK2Fsd2F5cyBcdTdDRTMgMTUtMTIzNi00CithbHdheXMgXHU3Q0U0IDE1LTEyMzYtNAorYWx3YXlzIFx1N0NFNSAxMzQ1LTI1LTUKK2Fsd2F5cyBcdTdDRTYgMTUtMTYtMworYWx3YXlzIFx1N0NFNyAxNC00Ni0yCithbHdheXMgXHU3Q0U4IDEzLTQ2LTUKK2Fsd2F5cyBcdTdDRTkgMTIzLTIzNTYtNQorYWx3YXlzIFx1N0NFQSAxMzUtMTI2LTIKK2Fsd2F5cyBcdTdDRUIgMTIzNS0xMjQ1Ni0yCithbHdheXMgXHU3Q0VDIDI0LTM0LTQKK2Fsd2F5cyBcdTdDRUQgMTI1LTEyMzQ2LTUKK2Fsd2F5cyBcdTdDRUUgMTUtMjM0NS01CithbHdheXMgXHU3Q0VGIDEzNDUtMjUtNQorYWx3YXlzIFx1N0NGMCAxMjQtMTI0NTYtMgorYWx3YXlzIFx1N0NGMSAxMzQ1LTM0Ni01CithbHdheXMgXHU3Q0YyIDE0LTE2LTUKK2Fsd2F5cyBcdTdDRjMgMTI1LTI1LTUKK2Fsd2F5cyBcdTdDRjQgMTQ1LTE2LTIKK2Fsd2F5cyBcdTdDRjUgMTM0NS0zNDYtNQorYWx3YXlzIFx1N0NGNiAxMjQtMjQ2LTUKK2Fsd2F5cyBcdTdDRjcgMTQtMTIzNi0yCithbHdheXMgXHU3Q0Y4IDEzNC0xNi01CithbHdheXMgXHU3Q0Y5IDEzNC0xNi01CithbHdheXMgXHU3Q0ZBIDEzLTIzNC0zCithbHdheXMgXHU3Q0ZCIDE1LTE2LTUKK2Fsd2F5cyBcdTdDRkMgMTMtMTIzNDYtMworYWx3YXlzIFx1N0NGRCAxLTEzNTYtNAorYWx3YXlzIFx1N0NGRSAxMy0yMzQtMworYWx3YXlzIFx1N0NGRiAyMzQtNQorYWx3YXlzIFx1N0QwMCAxMy0xNi01CithbHdheXMgXHU3RDAxIDEyLTM0NS01CithbHdheXMgXHU3RDAyIDEtMTIzNTYtNQorYWx3YXlzIFx1N0QwMyAxNS0yNTYtMgorYWx3YXlzIFx1N0QwNCAyMzYtMworYWx3YXlzIFx1N0QwNSAxMjM1LTEyMzQ2LTIKK2Fsd2F5cyBcdTdEMDYgMTI1Ni0zCithbHdheXMgXHU3RDA3IDEyMzUtMjM0Ni0yCithbHdheXMgXHU3RDA4IDEyNDU2LTIKK2Fsd2F5cyBcdTdEMDkgMTI0NS0xMzYtNQorYWx3YXlzIFx1N0QwQSAxMjM0NTYtNQorYWx3YXlzIFx1N0QwQiAxMjM0NTYtMgorYWx3YXlzIFx1N0QwQyAyNDUtMjM0LTIKK2Fsd2F5cyBcdTdEMEQgMTM0NS0zNDUtNQorYWx3YXlzIFx1N0QwRSAxMjUtMTU2LTMKK2Fsd2F5cyBcdTdEMEYgMTI0LTEyMzU2LTQKK2Fsd2F5cyBcdTdEMTAgMTM0NS0yMzQtNAorYWx3YXlzIFx1N0QxMSAxMjM0NS0xMjM1Ni0yCithbHdheXMgXHU3RDEyIDEzLTE2LTUKK2Fsd2F5cyBcdTdEMTMgMjQtMzQtMworYWx3YXlzIFx1N0QxNCAxMi0xMjM0NTYtMgorYWx3YXlzIFx1N0QxNSAxMjM0LTE2LTMKK2Fsd2F5cyBcdTdEMTYgMS0xMzYtNQorYWx3YXlzIFx1N0QxNyAyNC0zNDUtMworYWx3YXlzIFx1N0QxOCAxMjM1LTEyMzQ2LTIKK2Fsd2F5cyBcdTdEMTkgMS0xNTYtNAorYWx3YXlzIFx1N0QxQSAxMy0xNi0yCithbHdheXMgXHU3RDFCIDEyMzQ1LTEzNi0zCithbHdheXMgXHU3RDFDIDI1Ni0yCithbHdheXMgXHU3RDFEIDEyNDUtMTM2LTUKK2Fsd2F5cyBcdTdEMUUgMTQ1LTEyMzYtNAorYWx3YXlzIFx1N0QxRiAxMy0xNDU2LTMKK2Fsd2F5cyBcdTdEMjAgMTUtMzQtNQorYWx3YXlzIFx1N0QyMSAxMjM0NS0xMzQ2LTQKK2Fsd2F5cyBcdTdEMjIgMTUtMjUtNAorYWx3YXlzIFx1N0QyMyAyNDUtMTI0Ni01CithbHdheXMgXHU3RDI0IDEzLTIzNC00CithbHdheXMgXHU3RDI1IDEyNS0zNDUtMworYWx3YXlzIFx1N0QyNiAxMzUtMzQ1LTMKK2Fsd2F5cyBcdTdEMjcgMTMtMTQ1Ni00CithbHdheXMgXHU3RDI4IDEyMzQ1LTM0LTUKK2Fsd2F5cyBcdTdEMjkgMS0xNTYtNQorYWx3YXlzIFx1N0QyQSAyNDUtMTU2LTQKK2Fsd2F5cyBcdTdEMkIgMTI1LTE1Ni00CithbHdheXMgXHU3RDJDIDEyLTEyMzU2LTIKK2Fsd2F5cyBcdTdEMkQgMTIzNS0xMjM0Ni0yCithbHdheXMgXHU3RDJFIDEyNS0zNDUtMworYWx3YXlzIFx1N0QyRiAxNC0zNTYtNQorYWx3YXlzIFx1N0QzMCAxNS0xNi01CithbHdheXMgXHU3RDMxIDEyMzQ1LTM0LTIKK2Fsd2F5cyBcdTdEMzIgMTUtMzQ2LTUKK2Fsd2F5cyBcdTdEMzMgMjQtMTM2LTMKK2Fsd2F5cyBcdTdEMzQgMTM1LTM1Ni01CithbHdheXMgXHU3RDM1IDEtMzQtNQorYWx3YXlzIFx1N0QzNiAyNDUtMTI1Ni00CithbHdheXMgXHU3RDM3IDE0LTEzNDU2LTIKK2Fsd2F5cyBcdTdEMzggMS0zNC01CithbHdheXMgXHU3RDM5IDI0LTE0Ni01CithbHdheXMgXHU3RDNBIDEzLTEyMzYtNQorYWx3YXlzIFx1N0QzQiA0Ni0zCithbHdheXMgXHU3RDNDIDEyMzQ1LTM0LTIKK2Fsd2F5cyBcdTdEM0QgMTI0LTI1LTIKK2Fsd2F5cyBcdTdEM0UgMS0xMzYtNAorYWx3YXlzIFx1N0QzRiAxNDUtMjQ1Ni01CithbHdheXMgXHU3RDQwIDEyLTM0LTUKK2Fsd2F5cyBcdTdENDEgMjQtMTU2LTMKK2Fsd2F5cyBcdTdENDIgMS0xMjM0Ni0zCithbHdheXMgXHU3RDQzIDE1LTIzNDUtMgorYWx3YXlzIFx1N0Q0NCAxMjUtMzQtNAorYWx3YXlzIFx1N0Q0NSAxMy0xMzQ1Ni00CithbHdheXMgXHU3RDQ2IDEzNS0xMjM2LTUKK2Fsd2F5cyBcdTdENDcgMjQ1LTEyNTYtMgorYWx3YXlzIFx1N0Q0OCAxMzQtMTI2LTUKK2Fsd2F5cyBcdTdENDkgMjQtMzQtNQorYWx3YXlzIFx1N0Q0QSAxMjUtMTI0Ni01CithbHdheXMgXHU3RDRCIDEyMy00NTYtNQorYWx3YXlzIFx1N0Q0QyAxMy0xMzQ1Ni0zCithbHdheXMgXHU3RDREIDEyNDUtMTM2LTIKK2Fsd2F5cyBcdTdENEUgMTIzNS0xMzU2LTIKK2Fsd2F5cyBcdTdENEYgMTUtMzQ2LTUKK2Fsd2F5cyBcdTdENTAgMTMtMzQ2LTIKK2Fsd2F5cyBcdTdENTEgMS0zNC0zCithbHdheXMgXHU3RDUyIDEyLTEyMzU2LTIKK2Fsd2F5cyBcdTdENTMgMTMtMzUtNQorYWx3YXlzIFx1N0Q1NCAxMzUtMjQ1Ni00CithbHdheXMgXHU3RDU1IDEzLTIzNi0yCithbHdheXMgXHU3RDU2IDEyMy00NTYtNQorYWx3YXlzIFx1N0Q1NyAxMjM1LTM0LTIKK2Fsd2F5cyBcdTdENTggMjQ1LTE1Ni01CithbHdheXMgXHU3RDU5IDEzLTEzNTYtMworYWx3YXlzIFx1N0Q1QSAxMy0xMzU2LTMKK2Fsd2F5cyBcdTdENUIgMTI0LTE0Ni0zCithbHdheXMgXHU3RDVDIDE1LTM0Ni0yCithbHdheXMgXHU3RDVEIDEyMy0zNC01CithbHdheXMgXHU3RDVFIDEzLTI0Ni00CithbHdheXMgXHU3RDVGIDI0NS00NS0zCithbHdheXMgXHU3RDYwIDEzLTI0NTYtNAorYWx3YXlzIFx1N0Q2MSAxNC0yNS01CithbHdheXMgXHU3RDYyIDE1LTQ1LTUKK2Fsd2F5cyBcdTdENjMgMTM1LTEzNTYtMworYWx3YXlzIFx1N0Q2NCAxNS0yMzQ1LTUKK2Fsd2F5cyBcdTdENjUgMTIzNDUtMzQtMgorYWx3YXlzIFx1N0Q2NiAxMy0zNTYtNAorYWx3YXlzIFx1N0Q2NyAxMjQtMTIzNDYtMgorYWx3YXlzIFx1N0Q2OCAxMjQ1LTEyMzQ2LTIKK2Fsd2F5cyBcdTdENjkgMTI0LTI0Ni01CithbHdheXMgXHU3RDZBIDE0NTYtMworYWx3YXlzIFx1N0Q2QiAxNC0zNTYtNAorYWx3YXlzIFx1N0Q2QyAxNS0zNDYtNQorYWx3YXlzIFx1N0Q2RCAxMy00NS01CithbHdheXMgXHU3RDZFIDE1LTEyNTYtNQorYWx3YXlzIFx1N0Q2RiAxMy0yNDU2LTMKK2Fsd2F5cyBcdTdENzAgMTQ1LTM0Ni0yCithbHdheXMgXHU3RDcxIDEyNC0xMjM0Ni00CithbHdheXMgXHU3RDcyIDE1LTE1Ni0zCithbHdheXMgXHU3RDczIDEzLTQ2LTUKK2Fsd2F5cyBcdTdENzQgMTUtNDYtMgorYWx3YXlzIFx1N0Q3NSAxMjM1LTEyNDYtNQorYWx3YXlzIFx1N0Q3NiAxMy0yMzYtMgorYWx3YXlzIFx1N0Q3NyAxLTE1Ni0yCithbHdheXMgXHU3RDc4IDEzLTIzNDUtNAorYWx3YXlzIFx1N0Q3OSAxMy00NS01CithbHdheXMgXHU3RDdBIDEyLTE1Ni0zCithbHdheXMgXHU3RDdCIDEyMzQ1Ni01CithbHdheXMgXHU3RDdDIDEtMTM2LTQKK2Fsd2F5cyBcdTdEN0QgMTQtMTI1Ni00CithbHdheXMgXHU3RDdFIDEyLTEzNTYtMgorYWx3YXlzIFx1N0Q3RiAyNDUtMjM0LTIKK2Fsd2F5cyBcdTdEODAgMjQtMzQtMworYWx3YXlzIFx1N0Q4MSAxMzUtMTM0Ni00CithbHdheXMgXHU3RDgyIDEyNC0xMjM0Ni00CithbHdheXMgXHU3RDgzIDE1LTI0Ni0zCithbHdheXMgXHU3RDg0IDEyNDU2LTUKK2Fsd2F5cyBcdTdEODUgMjQ1LTE0NTYtMworYWx3YXlzIFx1N0Q4NiAxMy0xMzU2LTQKK2Fsd2F5cyBcdTdEODcgMTUtMjM0LTQKK2Fsd2F5cyBcdTdEODggMTI0LTE2LTIKK2Fsd2F5cyBcdTdEODkgMTUtMjM0LTUKK2Fsd2F5cyBcdTdEOEEgMTUtMzQ2LTIKK2Fsd2F5cyBcdTdEOEIgMTIzNS0xMjM0Ni0yCithbHdheXMgXHU3RDhDIDE1LTE2LTUKK2Fsd2F5cyBcdTdEOEQgMTIzNDUtMzQtMgorYWx3YXlzIFx1N0Q4RSAxMjQtMTM0NTYtMworYWx3YXlzIFx1N0Q4RiAxNS0xMjQ2LTIKK2Fsd2F5cyBcdTdEOTAgMTQ1LTEyNDYtNQorYWx3YXlzIFx1N0Q5MSAxMjMtMTIzNDU2LTQKK2Fsd2F5cyBcdTdEOTIgMTIzNDUtMzQtMworYWx3YXlzIFx1N0Q5MyAxMy0xMzQ1Ni0zCithbHdheXMgXHU3RDk0IDEyMzUtMzQtNQorYWx3YXlzIFx1N0Q5NSAxLTE1Ni0zCithbHdheXMgXHU3RDk2IDIzNDUtMgorYWx3YXlzIFx1N0Q5NyAxMy0yMzUtNAorYWx3YXlzIFx1N0Q5OCAxMjM0NS0xMzU2LTIKK2Fsd2F5cyBcdTdEOTkgMTMtMTYtNQorYWx3YXlzIFx1N0Q5QSAxNS0xMjU2LTUKK2Fsd2F5cyBcdTdEOUIgMTI0NS0xMzYtNAorYWx3YXlzIFx1N0Q5QyAxMjUtMTIzNDYtNQorYWx3YXlzIFx1N0Q5RCAxMi0xMzYtMworYWx3YXlzIFx1N0Q5RSAxNDUtMjUtNAorYWx3YXlzIFx1N0Q5RiAxNC0xNi01CithbHdheXMgXHU3REEwIDE0LTEyNTYtNQorYWx3YXlzIFx1N0RBMSAxNC00Ni0yCithbHdheXMgXHU3REEyIDEyLTEyMzU2LTIKK2Fsd2F5cyBcdTdEQTMgMjQ1LTQ1LTQKK2Fsd2F5cyBcdTdEQTQgMjQtMTQ2LTUKK2Fsd2F5cyBcdTdEQTUgMjQ1LTE2LTIKK2Fsd2F5cyBcdTdEQTYgMjQ1LTE2LTIKK2Fsd2F5cyBcdTdEQTcgMS0xMjM0NTYtNAorYWx3YXlzIFx1N0RBOCAyNDUtMTYtMgorYWx3YXlzIFx1N0RBOSAxMjQ1Ni00CithbHdheXMgXHU3REFBIDI0NS0yMzQ1LTUKK2Fsd2F5cyBcdTdEQUIgMTUtMjM0NS01CithbHdheXMgXHU3REFDIDI0LTEyMzU2LTUKK2Fsd2F5cyBcdTdEQUQgMTI0Ni0yCithbHdheXMgXHU3REFFIDI0NS0xNi00CithbHdheXMgXHU3REFGIDEyNC0xNDYtMgorYWx3YXlzIFx1N0RCMCAxMjQ1Ni00CithbHdheXMgXHU3REIxIDEzLTEzNDYtMworYWx3YXlzIFx1N0RCMiA0NTYtNAorYWx3YXlzIFx1N0RCMyAxMzUtMTM1Ni0zCithbHdheXMgXHU3REI0IDEtMTI0Ni01CithbHdheXMgXHU3REI1IDI0NS0yNDU2LTQKK2Fsd2F5cyBcdTdEQjYgMTMtMjUtNAorYWx3YXlzIFx1N0RCNyAyNDUtMTI0Ni01CithbHdheXMgXHU3REI4IDE0LTEyMzQ1Ni0yCithbHdheXMgXHU3REI5IDE0LTIzNC00CithbHdheXMgXHU3REJBIDI0NS0xNi00CithbHdheXMgXHU3REJCIDEtMTIzNi01CithbHdheXMgXHU3REJDIDEzNS0xNi01CithbHdheXMgXHU3REJEIDEyLTI1LTUKK2Fsd2F5cyBcdTdEQkUgMTQtMTM0NTYtMgorYWx3YXlzIFx1N0RCRiAxMzQtMjM0NS0yCithbHdheXMgXHU3REMwIDI0NS0xNi0zCithbHdheXMgXHU3REMxIDI0NS0zNDYtNQorYWx3YXlzIFx1N0RDMiAxMjQtMTIzNi0zCithbHdheXMgXHU3REMzIDEyNS0xMjM0Ni0zCithbHdheXMgXHU3REM0IDEzLTEyMzQ1Ni00CithbHdheXMgXHU3REM1IDEyNS0xMjM1Ni0zCithbHdheXMgXHU3REM2IDE1LTE2LTMKK2Fsd2F5cyBcdTdEQzcgMTI1LTE1Ni0zCithbHdheXMgXHU3REM4IDE1LTEzNDU2LTUKK2Fsd2F5cyBcdTdEQzkgMTQtNDYtNAorYWx3YXlzIFx1N0RDQSAxMy0xNDU2LTQKK2Fsd2F5cyBcdTdEQ0IgMTIzNDUtMzU2LTMKK2Fsd2F5cyBcdTdEQ0MgMTI0NS0xMjQ2LTIKK2Fsd2F5cyBcdTdEQ0QgMTM0LTE0NTYtMgorYWx3YXlzIFx1N0RDRSAxMjU2LTUKK2Fsd2F5cyBcdTdEQ0YgMTI1LTEyMzQ2LTQKK2Fsd2F5cyBcdTdERDAgMTIzNDUtMTIzNi0yCithbHdheXMgXHU3REQxIDE0LTEyNTYtNQorYWx3YXlzIFx1N0REMiAxNS0xMjU2LTUKK2Fsd2F5cyBcdTdERDMgMTM0NTYtMworYWx3YXlzIFx1N0RENCAyNC0xMzQ2LTUKK2Fsd2F5cyBcdTdERDUgMjQ1LTE2LTIKK2Fsd2F5cyBcdTdERDYgMTUtMTI1Ni01CithbHdheXMgXHU3REQ3IDE1LTQ2LTMKK2Fsd2F5cyBcdTdERDggMTMtMjM0NS0zCithbHdheXMgXHU3REQ5IDEyMy0yMzQ2LTUKK2Fsd2F5cyBcdTdEREEgMTUtMjM0NS01CithbHdheXMgXHU3RERCIDEyNDUtMTI0NTYtNAorYWx3YXlzIFx1N0REQyAxMzQtMjM0NS0yCithbHdheXMgXHU3REREIDI0NS0xNi01CithbHdheXMgXHU3RERFIDE0NS0xMjQ1Ni01CithbHdheXMgXHU3RERGIDEtMTIzNDYtNQorYWx3YXlzIFx1N0RFMCAxNDUtMTYtNQorYWx3YXlzIFx1N0RFMSAxMzQtMTQ1Ni0yCithbHdheXMgXHU3REUyIDEzNC0yNDYtMgorYWx3YXlzIFx1N0RFMyA0NS0yCithbHdheXMgXHU3REU0IDE1LTM0Ni01CithbHdheXMgXHU3REU1IDEzNS0xNDYtNAorYWx3YXlzIFx1N0RFNiAxNS0xNTYtMworYWx3YXlzIFx1N0RFNyAyNDUtMjM0LTMKK2Fsd2F5cyBcdTdERTggMTM1LTIzNDUtMworYWx3YXlzIFx1N0RFOSAxMjM1LTEyNDU2LTQKK2Fsd2F5cyBcdTdERUEgMTMtMTM1Ni0zCithbHdheXMgXHU3REVCIDEyNS0xMjM0Ni00CithbHdheXMgXHU3REVDIDEzNC0yMzQ1LTQKK2Fsd2F5cyBcdTdERUQgMTI0Ni01CithbHdheXMgXHU3REVFIDEyMzQ1LTM0LTUKK2Fsd2F5cyBcdTdERUYgMTI0Ni00CithbHdheXMgXHU3REYwIDEyNC0xMjM1Ni0zCithbHdheXMgXHU3REYxIDEzLTEyMzU2LTMKK2Fsd2F5cyBcdTdERjIgMTM0LTI0Ni00CithbHdheXMgXHU3REYzIDE1LTM0Ni0yCithbHdheXMgXHU3REY0IDE0LTIzNDUtNQorYWx3YXlzIFx1N0RGNSAxMjUtMTIzNDYtMworYWx3YXlzIFx1N0RGNiAxMzUtMjM0NS01CithbHdheXMgXHU3REY3IDI1Ni01CithbHdheXMgXHU3REY4IDE0NTYtMworYWx3YXlzIFx1N0RGOSAxMjQtMTYtMgorYWx3YXlzIFx1N0RGQSAxMy0zNS0zCithbHdheXMgXHU3REZCIDEtMTU2LTUKK2Fsd2F5cyBcdTdERkMgMjU2LTUKK2Fsd2F5cyBcdTdERkQgMTItMTM1Ni0zCithbHdheXMgXHU3REZFIDEyLTEyMzYtMgorYWx3YXlzIFx1N0RGRiAxNDUtMjQ1Ni01CithbHdheXMgXHU3RTAwIDE1LTIzNDU2LTIKK2Fsd2F5cyBcdTdFMDEgNDUtMgorYWx3YXlzIFx1N0UwMiAxMjUtMTIzNDYtNAorYWx3YXlzIFx1N0UwMyAxNS0xMjU2LTMKK2Fsd2F5cyBcdTdFMDQgMjQtMTM1Ni0yCithbHdheXMgXHU3RTA1IDEyNDYtMworYWx3YXlzIFx1N0UwNiAxMy0xMzU2LTMKK2Fsd2F5cyBcdTdFMDcgMTUtNDUtMworYWx3YXlzIFx1N0UwOCAxMzQ1Ni0yCithbHdheXMgXHU3RTA5IDEzLTE0NTYtNQorYWx3YXlzIFx1N0UwQSAxNi01CithbHdheXMgXHU3RTBCIDEtMTI0Ni01CithbHdheXMgXHU3RTBDIDEzNDUtMTYtNQorYWx3YXlzIFx1N0UwRCAxMzUtMTM0Ni0zCithbHdheXMgXHU3RTBFIDEzLTM0LTQKK2Fsd2F5cyBcdTdFMEYgMTIzNC0xMjM2LTIKK2Fsd2F5cyBcdTdFMTAgMS0xMjM1Ni01CithbHdheXMgXHU3RTExIDEzLTIzNDUtMworYWx3YXlzIFx1N0UxMiAyNDUtMTU2LTMKK2Fsd2F5cyBcdTdFMTMgMjQ1LTQ1LTUKK2Fsd2F5cyBcdTdFMTQgMTUtMTM0Ni0zCithbHdheXMgXHU3RTE1IDI1Ni01CithbHdheXMgXHU3RTE2IDE1LTIzNDU2LTUKK2Fsd2F5cyBcdTdFMTcgMjQ1LTEyNDYtMworYWx3YXlzIFx1N0UxOCAxNS0xNi0zCithbHdheXMgXHU3RTE5IDEyNDUtMTIzNDYtMgorYWx3YXlzIFx1N0UxQSAxMjQtMTQ2LTMKK2Fsd2F5cyBcdTdFMUIgMTIzNDUtMzQtMgorYWx3YXlzIFx1N0UxQyAyNTYtMgorYWx3YXlzIFx1N0UxRCAxLTEzNi00CithbHdheXMgXHU3RTFFIDEzLTE0Ni00CithbHdheXMgXHU3RTFGIDEyNDUtMzQtNQorYWx3YXlzIFx1N0UyMCAxMjM1LTM0LTIKK2Fsd2F5cyBcdTdFMjEgMTI1LTI0NTYtNAorYWx3YXlzIFx1N0UyMiAxMjQtMTM1Ni0yCithbHdheXMgXHU3RTIzIDE1LTIzNDUtNQorYWx3YXlzIFx1N0UyNCAxNS0zNC01CithbHdheXMgXHU3RTI1IDEtMTM2LTQKK2Fsd2F5cyBcdTdFMjYgMTI1LTEyMzQ2LTUKK2Fsd2F5cyBcdTdFMjcgMTI0LTE0Ni0zCithbHdheXMgXHU3RTI4IDEyMzUtNDU2LTQKK2Fsd2F5cyBcdTdFMjkgMjQ1LTI0NTYtNQorYWx3YXlzIFx1N0UyQSAxMzUtMTYtNQorYWx3YXlzIFx1N0UyQiAxMjM0NS0xMzU2LTIKK2Fsd2F5cyBcdTdFMkMgMjQ1LTM0LTUKK2Fsd2F5cyBcdTdFMkQgMTQtMTYtMgorYWx3YXlzIFx1N0UyRSAxNS0yNS0zCithbHdheXMgXHU3RTJGIDIzNDUtNAorYWx3YXlzIFx1N0UzMCAxNS0xNi00CithbHdheXMgXHU3RTMxIDEyNS0xMjM0Ni01CithbHdheXMgXHU3RTMyIDE0LTM1Ni0yCithbHdheXMgXHU3RTMzIDEtMTI0NTYtNQorYWx3YXlzIFx1N0UzNCAyNDUtMjM0NS01CithbHdheXMgXHU3RTM1IDEzNC0xMjM2LTUKK2Fsd2F5cyBcdTdFMzYgMS0xNTYtMgorYWx3YXlzIFx1N0UzNyAxNC0xMjU2LTQKK2Fsd2F5cyBcdTdFMzggMTM0LTEyNi01CithbHdheXMgXHU3RTM5IDEyMzQtMjQ2LTQKK2Fsd2F5cyBcdTdFM0EgMTQtMjM0NS0yCithbHdheXMgXHU3RTNCIDEzNC0xNi0yCithbHdheXMgXHU3RTNDIDE1LTQ1LTUKK2Fsd2F5cyBcdTdFM0QgMTI1LTEyMzQ2LTQKK2Fsd2F5cyBcdTdFM0UgMTMtMTYtMworYWx3YXlzIFx1N0UzRiAyNC0xMjM2LTMKK2Fsd2F5cyBcdTdFNDAgMTUtMTI0Ni01CithbHdheXMgXHU3RTQxIDEyMzQ1LTEyMzYtMgorYWx3YXlzIFx1N0U0MiAxNC0xMjU2LTUKK2Fsd2F5cyBcdTdFNDMgMTM1LTEzNTYtMworYWx3YXlzIFx1N0U0NCAxNi0zCithbHdheXMgXHU3RTQ1IDE1LTE0Ni0zCithbHdheXMgXHU3RTQ2IDEzNC0yNDYtNQorYWx3YXlzIFx1N0U0NyAyNDYtMgorYWx3YXlzIFx1N0U0OCAyNDUtNDYtNAorYWx3YXlzIFx1N0U0OSAxMjM1LTEyMzQ1Ni0yCithbHdheXMgXHU3RTRBIDE1LTIzNDUtMworYWx3YXlzIFx1N0U0QiAxNS0xNi01CithbHdheXMgXHU3RTRDIDI0LTM0NS0xCithbHdheXMgXHU3RTREIDE1LTIzNC01CithbHdheXMgXHU3RTRFIDEyNDUtMTIzNi0yCithbHdheXMgXHU3RTRGIDE1LTQ1LTUKK2Fsd2F5cyBcdTdFNTAgMTUtMTI0Ni01CithbHdheXMgXHU3RTUxIDI0NS0yNDYtMworYWx3YXlzIFx1N0U1MiAxMjUtMTM1Ni0zCithbHdheXMgXHU3RTUzIDEyNS0yNS00CithbHdheXMgXHU3RTU0IDEtMTU2LTMKK2Fsd2F5cyBcdTdFNTUgMjQtMTIzNi01CithbHdheXMgXHU3RTU2IDE1LTEyMzYtNAorYWx3YXlzIFx1N0U1NyAxNC0xNDU2LTIKK2Fsd2F5cyBcdTdFNTggMTI1Ni01CithbHdheXMgXHU3RTU5IDEyMzQ1LTEyMzYtMworYWx3YXlzIFx1N0U1QSAxNC0yNDYtMgorYWx3YXlzIFx1N0U1QiAxMi0yNS01CithbHdheXMgXHU3RTVDIDEyNS0xMjM0NTYtMworYWx3YXlzIFx1N0U1RCAxMy0yMzQ1LTUKK2Fsd2F5cyBcdTdFNUUgMTI0NS0xNDYtNQorYWx3YXlzIFx1N0U1RiAxMi0xMjM2LTQKK2Fsd2F5cyBcdTdFNjAgMTI0NS0xMjQ2LTQKK2Fsd2F5cyBcdTdFNjEgMTUtMjM0LTUKK2Fsd2F5cyBcdTdFNjIgMTIzNS0xMjQ2LTUKK2Fsd2F5cyBcdTdFNjMgMTIzNS0zNS01CithbHdheXMgXHU3RTY0IDEyNS0xMjQ1Ni00CithbHdheXMgXHU3RTY1IDE1LTE2LTMKK2Fsd2F5cyBcdTdFNjYgMjQ1LTQ2LTQKK2Fsd2F5cyBcdTdFNjcgMjU2LTMKK2Fsd2F5cyBcdTdFNjggMTQ1LTM0NS0yCithbHdheXMgXHU3RTY5IDI0LTEzNTYtMgorYWx3YXlzIFx1N0U2QSAxMjM1LTEyNDYtNQorYWx3YXlzIFx1N0U2QiAxNS0xNi01CithbHdheXMgXHU3RTZDIDE1LTIzNDYtNQorYWx3YXlzIFx1N0U2RCAxMy0yMzQ1LTQKK2Fsd2F5cyBcdTdFNkUgMTMtNDYtMworYWx3YXlzIFx1N0U2RiAxMjM1LTEyNDU2LTIKK2Fsd2F5cyBcdTdFNzAgMTI1LTE0Ni00CithbHdheXMgXHU3RTcxIDI0NS0xMjM0Ni0zCithbHdheXMgXHU3RTcyIDEzLTM0Ni01CithbHdheXMgXHU3RTczIDEzLTI0Ni00CithbHdheXMgXHU3RTc0IDEzNS0xNi01CithbHdheXMgXHU3RTc1IDEyLTEyMzYtMgorYWx3YXlzIFx1N0U3NiAxNi01CithbHdheXMgXHU3RTc3IDEzNDUtMTIzNDYtNAorYWx3YXlzIFx1N0U3OCAxNS0xMjQ2LTUKK2Fsd2F5cyBcdTdFNzkgMTYtNQorYWx3YXlzIFx1N0U3QSAyNC0yNDU2LTQKK2Fsd2F5cyBcdTdFN0IgMTUtMTI1Ni0zCithbHdheXMgXHU3RTdDIDEzLTE2LTUKK2Fsd2F5cyBcdTdFN0QgMTM1LTE0NTYtMworYWx3YXlzIFx1N0U3RSAyNDUtMjM0NS00CithbHdheXMgXHU3RTdGIDE0LTEyMzYtMgorYWx3YXlzIFx1N0U4MCAxMjM0LTM0LTIKK2Fsd2F5cyBcdTdFODEgMTUtMjU2LTMKK2Fsd2F5cyBcdTdFODIgMTI1LTEyNDU2LTQKK2Fsd2F5cyBcdTdFODMgMjQ1LTE2LTIKK2Fsd2F5cyBcdTdFODQgMTIzNC0xMzU2LTIKK2Fsd2F5cyBcdTdFODUgMTQtMTYtNQorYWx3YXlzIFx1N0U4NiAxMzQtMTI2LTUKK2Fsd2F5cyBcdTdFODcgMTQtMzU2LTUKK2Fsd2F5cyBcdTdFODggMTUtMzQ2LTIKK2Fsd2F5cyBcdTdFODkgMTI1LTEyNDU2LTQKK2Fsd2F5cyBcdTdFOEEgMTIzLTQ1Ni01CithbHdheXMgXHU3RThCIDIzNC0zCithbHdheXMgXHU3RThDIDE1LTEyNTYtNQorYWx3YXlzIFx1N0U4RCAxNC0zNTYtMgorYWx3YXlzIFx1N0U4RSAxNS0yMzQ1LTMKK2Fsd2F5cyBcdTdFOEYgMTItMTIzNi0yCithbHdheXMgXHU3RTkwIDEzLTI0Ni00CithbHdheXMgXHU3RTkxIDE0LTM0LTIKK2Fsd2F5cyBcdTdFOTIgMTItMTIzNi0yCithbHdheXMgXHU3RTkzIDEzNDU2LTMKK2Fsd2F5cyBcdTdFOTQgMjQ1LTI0NTYtMgorYWx3YXlzIFx1N0U5NSAxNS00Ni0zCithbHdheXMgXHU3RTk2IDE1LTIzNDUtMworYWx3YXlzIFx1N0U5NyAxMjUtMTI0Ni0zCithbHdheXMgXHU3RTk4IDEyNS0xMjQ1Ni00CithbHdheXMgXHU3RTk5IDE0LTI1LTUKK2Fsd2F5cyBcdTdFOUEgMjQtMTU2LTQKK2Fsd2F5cyBcdTdFOUIgMTQ1LTE0Ni01CithbHdheXMgXHU3RTlDIDE0LTEyMzYtNAorYWx3YXlzIFx1N0U5RCAxNC0zNTYtMgorYWx3YXlzIFx1N0U5RSAxNC0yMzQ1LTUKK2Fsd2F5cyBcdTdFOUYgMTM0LTE2LTUKK2Fsd2F5cyBcdTdFQTAgMTMtMjM0LTMKK2Fsd2F5cyBcdTdFQTEgMTI1Ni0zCithbHdheXMgXHU3RUEyIDEyMzUtMTIzNDYtMgorYWx3YXlzIFx1N0VBMyAxLTEyMzU2LTUKK2Fsd2F5cyBcdTdFQTQgMTUtMjM0NS0zCithbHdheXMgXHU3RUE1IDEyMzUtMjM0Ni0yCithbHdheXMgXHU3RUE2IDIzNi0zCithbHdheXMgXHU3RUE3IDEzLTE2LTIKK2Fsd2F5cyBcdTdFQTggMTI0NTYtMgorYWx3YXlzIFx1N0VBOSAxMjMtNDU2LTUKK2Fsd2F5cyBcdTdFQUEgMTMtMTYtNQorYWx3YXlzIFx1N0VBQiAxMjQ1LTEzNi01CithbHdheXMgXHU3RUFDIDEyNDYtNAorYWx3YXlzIFx1N0VBRCAyNTYtMgorYWx3YXlzIFx1N0VBRSAxMjM1LTEyMzQ2LTIKK2Fsd2F5cyBcdTdFQUYgMTItMTIzNDU2LTIKK2Fsd2F5cyBcdTdFQjAgMTIzNC0xNi0zCithbHdheXMgXHU3RUIxIDI0LTM0NS0zCithbHdheXMgXHU3RUIyIDEzLTEzNDYtMworYWx3YXlzIFx1N0VCMyAxMzQ1LTM0NS01CithbHdheXMgXHU3RUI0IDEyNDUtMTM2LTUKK2Fsd2F5cyBcdTdFQjUgMTI1LTEyMzQ2LTUKK2Fsd2F5cyBcdTdFQjYgMTQtMTIzNDU2LTIKK2Fsd2F5cyBcdTdFQjcgMTIzNDUtMTM2LTMKK2Fsd2F5cyBcdTdFQjggMS0xNTYtNAorYWx3YXlzIFx1N0VCOSAxMjM0NTYtMgorYWx3YXlzIFx1N0VCQSAxMjM0NS0xMzQ2LTQKK2Fsd2F5cyBcdTdFQkIgMS0zNC01CithbHdheXMgXHU3RUJDIDEtMTM2LTUKK2Fsd2F5cyBcdTdFQkQgMTM0NS0yMzQtNAorYWx3YXlzIFx1N0VCRSAyNC0zNC0zCithbHdheXMgXHU3RUJGIDE1LTIzNDUtNQorYWx3YXlzIFx1N0VDMCAxMy0xMjM2LTUKK2Fsd2F5cyBcdTdFQzEgMTUtMzQ2LTUKK2Fsd2F5cyBcdTdFQzIgMTIzNDUtMzQtMgorYWx3YXlzIFx1N0VDMyAxNC0yMzQ1LTUKK2Fsd2F5cyBcdTdFQzQgMTI1LTM0LTQKK2Fsd2F5cyBcdTdFQzUgMjQtMTM2LTMKK2Fsd2F5cyBcdTdFQzYgMTUtMTYtNQorYWx3YXlzIFx1N0VDNyAxLTE1Ni0zCithbHdheXMgXHU3RUM4IDEtMTIzNDYtMworYWx3YXlzIFx1N0VDOSAxLTEyMzU2LTUKK2Fsd2F5cyBcdTdFQ0EgMTM1LTEyMzYtNQorYWx3YXlzIFx1N0VDQiAxMjM0NS0zNC0yCithbHdheXMgXHU3RUNDIDEyLTM0LTUKK2Fsd2F5cyBcdTdFQ0QgMjQtMTQ2LTUKK2Fsd2F5cyBcdTdFQ0UgMTYtNQorYWx3YXlzIFx1N0VDRiAxMy0xMzQ1Ni0zCithbHdheXMgXHU3RUQwIDE0NS0yNDU2LTUKK2Fsd2F5cyBcdTdFRDEgMTM1LTEzNDYtNAorYWx3YXlzIFx1N0VEMiAxMjQ1LTEyMzQ2LTIKK2Fsd2F5cyBcdTdFRDMgMTMtMzQ2LTIKK2Fsd2F5cyBcdTdFRDQgMTIzLTM0LTUKK2Fsd2F5cyBcdTdFRDUgMTI0NS0xNDYtNQorYWx3YXlzIFx1N0VENiAxNDUtMzQ2LTIKK2Fsd2F5cyBcdTdFRDcgMTIzNS0xMzQ2LTIKK2Fsd2F5cyBcdTdFRDggMTIzNS0xMjQ2LTUKK2Fsd2F5cyBcdTdFRDkgMTMtMzU2LTQKK2Fsd2F5cyBcdTdFREEgMTUtNDUtNQorYWx3YXlzIFx1N0VEQiAxMy00Ni01CithbHdheXMgXHU3RURDIDE0LTI1LTUKK2Fsd2F5cyBcdTdFREQgMTMtMjM2LTIKK2Fsd2F5cyBcdTdFREUgMTMtMjQ2LTQKK2Fsd2F5cyBcdTdFREYgMTI0LTEyMzQ2LTQKK2Fsd2F5cyBcdTdFRTAgMTMtMTM1Ni00CithbHdheXMgXHU3RUUxIDE1LTI0Ni0zCithbHdheXMgXHU3RUUyIDEzLTQ1LTUKK2Fsd2F5cyBcdTdFRTMgMTUtMjM0LTUKK2Fsd2F5cyBcdTdFRTQgMTUtMTYtNQorYWx3YXlzIFx1N0VFNSAxNS0xMjQ2LTMKK2Fsd2F5cyBcdTdFRTYgMTI0LTE0Ni0zCithbHdheXMgXHU3RUU3IDEzLTE2LTUKK2Fsd2F5cyBcdTdFRTggMTI0LTE2LTUKK2Fsd2F5cyBcdTdFRTkgMTMtMTYtMworYWx3YXlzIFx1N0VFQSAxNS0xMjU2LTUKK2Fsd2F5cyBcdTdFRUIgMTQtMTM0NTYtMgorYWx3YXlzIFx1N0VFQyAxMzQ1Ni0zCithbHdheXMgXHU3RUVEIDE1LTEyNTYtNQorYWx3YXlzIFx1N0VFRSAyNDUtMTYtNAorYWx3YXlzIFx1N0VFRiAxMjM0NS0zNTYtMworYWx3YXlzIFx1N0VGMCAxMi0yNS01CithbHdheXMgXHU3RUYxIDI0LTEzNDYtNQorYWx3YXlzIFx1N0VGMiAxMy0xMjM0NTYtNAorYWx3YXlzIFx1N0VGMyAyNC0xMzU2LTIKK2Fsd2F5cyBcdTdFRjQgMTI0Ni0yCithbHdheXMgXHU3RUY1IDEzNC0yMzQ1LTIKK2Fsd2F5cyBcdTdFRjYgMjQtMTIzNTYtNQorYWx3YXlzIFx1N0VGNyAxMzUtMTM1Ni0zCithbHdheXMgXHU3RUY4IDEyLTEyMzU2LTIKK2Fsd2F5cyBcdTdFRjkgMTI0LTE0Ni0yCithbHdheXMgXHU3RUZBIDE0LTIzNC00CithbHdheXMgXHU3RUZCIDI0NS00NS00CithbHdheXMgXHU3RUZDIDEyNS0xMjM0Ni01CithbHdheXMgXHU3RUZEIDEtMTIzNi01CithbHdheXMgXHU3RUZFIDEyNDU2LTQKK2Fsd2F5cyBcdTdFRkYgMTQtMTI1Ni01CithbHdheXMgXHU3RjAwIDEtMTI0Ni01CithbHdheXMgXHU3RjAxIDEyNS0xNTYtMworYWx3YXlzIFx1N0YwMiAxMjMtMjM0Ni01CithbHdheXMgXHU3RjAzIDE1LTQ2LTMKK2Fsd2F5cyBcdTdGMDQgMTMtMjM0NS0zCithbHdheXMgXHU3RjA1IDEzNC0yMzQ1LTQKK2Fsd2F5cyBcdTdGMDYgMTQtMTIzNi00CithbHdheXMgXHU3RjA3IDEyNC0xNi0yCithbHdheXMgXHU3RjA4IDEzNC0yNDYtNAorYWx3YXlzIFx1N0YwOSAxMy0xNi0zCithbHdheXMgXHU3RjBBIDI1Ni01CithbHdheXMgXHU3RjBCIDEyMzUtMTI0Ni01CithbHdheXMgXHU3RjBDIDE1LTE1Ni0zCithbHdheXMgXHU3RjBEIDE0NS0yNS00CithbHdheXMgXHU3RjBFIDE0NS0xMjQ1Ni01CithbHdheXMgXHU3RjBGIDEzNS0yMzQ1LTUKK2Fsd2F5cyBcdTdGMTAgMTUtMjM0NS01CithbHdheXMgXHU3RjExIDEzLTEyMzU2LTMKK2Fsd2F5cyBcdTdGMTIgMS0xMjQ2LTUKK2Fsd2F5cyBcdTdGMTMgMTIzNS0xMjQ1Ni00CithbHdheXMgXHU3RjE0IDE0NS0xNi01CithbHdheXMgXHU3RjE1IDE0LTEyNTYtNAorYWx3YXlzIFx1N0YxNiAxMzUtMjM0NS0zCithbHdheXMgXHU3RjE3IDEzNC0xNDU2LTIKK2Fsd2F5cyBcdTdGMTggNDUtMgorYWx3YXlzIFx1N0YxOSAxMy0xNDU2LTUKK2Fsd2F5cyBcdTdGMUEgMTIzNDUtMzQtNQorYWx3YXlzIFx1N0YxQiAxMjQ1LTM0LTUKK2Fsd2F5cyBcdTdGMUMgMS0xMzYtNAorYWx3YXlzIFx1N0YxRCAxMjM0NS0xMzU2LTUKK2Fsd2F5cyBcdTdGMUUgMjQ1LTEyNDYtMworYWx3YXlzIFx1N0YxRiAxMy0xNDYtNAorYWx3YXlzIFx1N0YyMCAxMi0xMjM2LTIKK2Fsd2F5cyBcdTdGMjEgMTQtMTYtMgorYWx3YXlzIFx1N0YyMiAxNi01CithbHdheXMgXHU3RjIzIDEzLTIzNDUtMworYWx3YXlzIFx1N0YyNCAxMzUtMTQ1Ni0zCithbHdheXMgXHU3RjI1IDEyMzQtMjQ2LTQKK2Fsd2F5cyBcdTdGMjYgMTM0LTEyMzYtNQorYWx3YXlzIFx1N0YyNyAxNC0zNTYtMgorYWx3YXlzIFx1N0YyOCAxMzQ1Ni0zCithbHdheXMgXHU3RjI5IDE1LTI1LTMKK2Fsd2F5cyBcdTdGMkEgMTM0LTI0Ni01CithbHdheXMgXHU3RjJCIDE1LTE0Ni0zCithbHdheXMgXHU3RjJDIDE1LTM0Ni0yCithbHdheXMgXHU3RjJEIDE0LTI0Ni0yCithbHdheXMgXHU3RjJFIDI0LTEyMzYtNQorYWx3YXlzIFx1N0YyRiAxMjUtMTM1Ni0zCithbHdheXMgXHU3RjMwIDEzLTQ2LTMKK2Fsd2F5cyBcdTdGMzEgMjQ1LTIzNDUtNAorYWx3YXlzIFx1N0YzMiAxMjUtMTQ2LTQKK2Fsd2F5cyBcdTdGMzMgMTIzNS0xMjQ1Ni0yCithbHdheXMgXHU3RjM0IDEzLTI0Ni00CithbHdheXMgXHU3RjM1IDEyNS0xMjQ1Ni00CithbHdheXMgXHU3RjM2IDEyMzQ1LTEyMzU2LTQKK2Fsd2F5cyBcdTdGMzcgMTUtMzQ2LTUKK2Fsd2F5cyBcdTdGMzggMTMtMTM0Ni0zCithbHdheXMgXHU3RjM5IDEyMzQ1LTEyMzU2LTQKK2Fsd2F5cyBcdTdGM0EgMjQ1LTIzNi0zCithbHdheXMgXHU3RjNCIDEyMzQ1LTEyMzU2LTQKK2Fsd2F5cyBcdTdGM0MgMjQ1LTE2LTMKK2Fsd2F5cyBcdTdGM0QgMTM1LTEyNi0zCithbHdheXMgXHU3RjNFIDEyMzQtMTM0NTYtMgorYWx3YXlzIFx1N0YzRiAxNS00Ni01CithbHdheXMgXHU3RjQwIDEtMTQ2LTUKK2Fsd2F5cyBcdTdGNDEgMTMtMTM0Ni0zCithbHdheXMgXHU3RjQyIDEzNDU2LTMKK2Fsd2F5cyBcdTdGNDMgMTM0NTYtMworYWx3YXlzIFx1N0Y0NCAyNDUtMTM0NTYtNQorYWx3YXlzIFx1N0Y0NSAxNS0yMzQ1Ni01CithbHdheXMgXHU3RjQ2IDEzLTEyNDU2LTUKK2Fsd2F5cyBcdTdGNDcgMTI1LTEyMzQ1Ni0zCithbHdheXMgXHU3RjQ4IDEyNC0xMjM2LTIKK2Fsd2F5cyBcdTdGNDkgMjQ1LTEzNDYtMworYWx3YXlzIFx1N0Y0QSAyNDUtMTYtNQorYWx3YXlzIFx1N0Y0QiAxMjM0Ni01CithbHdheXMgXHU3RjRDIDEzNDU2LTMKK2Fsd2F5cyBcdTdGNEQgMTQtMzU2LTIKK2Fsd2F5cyBcdTdGNEUgMTI0LTEyMzYtMgorYWx3YXlzIFx1N0Y0RiAxNC0zNC0yCithbHdheXMgXHU3RjUwIDEzLTEyNDU2LTUKK2Fsd2F5cyBcdTdGNTEgNDU2LTQKK2Fsd2F5cyBcdTdGNTIgNDU2LTQKK2Fsd2F5cyBcdTdGNTMgMTMtMTM0Ni0zCithbHdheXMgXHU3RjU0IDQ1Ni00CithbHdheXMgXHU3RjU1IDEyMzUtMTIzNi00CithbHdheXMgXHU3RjU2IDEzNC0zNDUtMQorYWx3YXlzIFx1N0Y1NyAxNC0yNS0yCithbHdheXMgXHU3RjU4IDEyMzQ1LTM0LTIKK2Fsd2F5cyBcdTdGNTkgMTM0LTE2LTIKK2Fsd2F5cyBcdTdGNUEgMTIzNDUtMzQ1LTIKK2Fsd2F5cyBcdTdGNUIgMTMtMzQtMworYWx3YXlzIFx1N0Y1QyAxLTM0LTQKK2Fsd2F5cyBcdTdGNUQgMTMtMTI1Ni0zCithbHdheXMgXHU3RjVFIDEzNC0xNDYtMgorYWx3YXlzIFx1N0Y1RiAxMy0zNC00CithbHdheXMgXHU3RjYwIDEzNC0xNDU2LTIKK2Fsd2F5cyBcdTdGNjEgMTMtMTM0Ni0zCithbHdheXMgXHU3RjYyIDEzNS0zNDUtNQorYWx3YXlzIFx1N0Y2MyAxMy0zNS01CithbHdheXMgXHU3RjY0IDEyNC0xNi0yCithbHdheXMgXHU3RjY1IDEzLTQ1LTUKK2Fsd2F5cyBcdTdGNjYgMTIzNDUtMzQtMgorYWx3YXlzIFx1N0Y2NyAyNC0xMzYtNQorYWx3YXlzIFx1N0Y2OCAyMzQ1LTQKK2Fsd2F5cyBcdTdGNjkgMS0xNDYtNQorYWx3YXlzIFx1N0Y2QSAxMjUtMTI0Ni01CithbHdheXMgXHU3RjZCIDEzLTM1LTUKK2Fsd2F5cyBcdTdGNkMgMS0yNS0yCithbHdheXMgXHU3RjZEIDEyNTYtNQorYWx3YXlzIFx1N0Y2RSAxLTE1Ni01CithbHdheXMgXHU3RjZGIDEyMzYtNAorYWx3YXlzIFx1N0Y3MCAxMjM0NS0zNDUtMgorYWx3YXlzIFx1N0Y3MSAxMzQ1LTEyMzYtNAorYWx3YXlzIFx1N0Y3MiAyNC0zNC00CithbHdheXMgXHU3RjczIDE1LTE1Ni0zCithbHdheXMgXHU3Rjc0IDEyMzQtMTYtMgorYWx3YXlzIFx1N0Y3NSAxMzQtMzQ1LTUKK2Fsd2F5cyBcdTdGNzYgMTQtMjM0LTQKK2Fsd2F5cyBcdTdGNzcgMTM1LTM0NS01CithbHdheXMgXHU3Rjc4IDEyMzQ1LTM0NS0yCithbHdheXMgXHU3Rjc5IDE0LTE2LTIKK2Fsd2F5cyBcdTdGN0EgMTItMTQ2LTMKK2Fsd2F5cyBcdTdGN0IgMTI0Ni01CithbHdheXMgXHU3RjdDIDEzNS0xNi01CithbHdheXMgXHU3RjdEIDEzLTE2LTUKK2Fsd2F5cyBcdTdGN0UgMTI1LTEzNTYtMworYWx3YXlzIFx1N0Y3RiAxMi0xMjM0Ni0zCithbHdheXMgXHU3RjgwIDE0LTIzNC00CithbHdheXMgXHU3RjgxIDEzLTE2LTMKK2Fsd2F5cyBcdTdGODIgMTMtNDUtNQorYWx3YXlzIFx1N0Y4MyAxMzQtMTYtNQorYWx3YXlzIFx1N0Y4NCAxLTE0Ni01CithbHdheXMgXHU3Rjg1IDE0LTI1LTIKK2Fsd2F5cyBcdTdGODYgMTIzNC0xNi0yCithbHdheXMgXHU3Rjg3IDEzLTE2LTMKK2Fsd2F5cyBcdTdGODggMTMtMTYtMworYWx3YXlzIFx1N0Y4OSAxNC0xMjQ1Ni0yCithbHdheXMgXHU3RjhBIDQ2LTIKK2Fsd2F5cyBcdTdGOEIgMTM0LTM0Ni0zCithbHdheXMgXHU3RjhDIDI0NS00Ni0zCithbHdheXMgXHU3RjhEIDEyNC0zNDUtNQorYWx3YXlzIFx1N0Y4RSAxMzQtMzU2LTQKK2Fsd2F5cyBcdTdGOEYgNDYtMgorYWx3YXlzIFx1N0Y5MCAyMzQtNAorYWx3YXlzIFx1N0Y5MSAyMzQtNAorYWx3YXlzIFx1N0Y5MiAxMjM0NS0xMzYtMgorYWx3YXlzIFx1N0Y5MyAxMzUtMzQ1LTMKK2Fsd2F5cyBcdTdGOTQgMTMtMTQ2LTMKK2Fsd2F5cyBcdTdGOTUgNDYtNQorYWx3YXlzIFx1N0Y5NiAxMy0zNC00CithbHdheXMgXHU3Rjk3IDI0NS00Ni0zCithbHdheXMgXHU3Rjk4IDEyNS0xMzQ2LTMKK2Fsd2F5cyBcdTdGOTkgMTMtMTQ2LTMKK2Fsd2F5cyBcdTdGOUEgMTQtMTM0NTYtMgorYWx3YXlzIFx1N0Y5QiAxNi01CithbHdheXMgXHU3RjlDIDEtMzQtNQorYWx3YXlzIFx1N0Y5RCAxNDUtMTYtMworYWx3YXlzIFx1N0Y5RSAxNS0yMzQtMworYWx3YXlzIFx1N0Y5RiAyNDUtNDYtNAorYWx3YXlzIFx1N0ZBMCAxNi0yCithbHdheXMgXHU3RkExIDE1LTIzNDUtNQorYWx3YXlzIFx1N0ZBMiAxMjQ1LTEyMzQ2LTIKK2Fsd2F5cyBcdTdGQTMgMjQ1LTI1Ni0yCithbHdheXMgXHU3RkE0IDI0NS0yNTYtMgorYWx3YXlzIFx1N0ZBNSAyNDUtNDYtNAorYWx3YXlzIFx1N0ZBNiAxMjM1LTEyNDU2LTIKK2Fsd2F5cyBcdTdGQTcgMTUtMjUtMworYWx3YXlzIFx1N0ZBOCAxNS0yMzQ1LTUKK2Fsd2F5cyBcdTdGQTkgMTYtNQorYWx3YXlzIFx1N0ZBQSA0Ni00CithbHdheXMgXHU3RkFCIDI0NS00Ni0zCithbHdheXMgXHU3RkFDIDIzNDUtMgorYWx3YXlzIFx1N0ZBRCAxMjU2LTIKK2Fsd2F5cyBcdTdGQUUgMTMtMTM1Ni0zCithbHdheXMgXHU3RkFGIDEzLTM0Ni0yCithbHdheXMgXHU3RkIwIDEyNC0xMzQ2LTMKK2Fsd2F5cyBcdTdGQjEgNDUtMgorYWx3YXlzIFx1N0ZCMiAxNS0xNi0zCithbHdheXMgXHU3RkIzIDEyMzQ1LTEyMzYtMgorYWx3YXlzIFx1N0ZCNCAyNC0xMjM2LTMKK2Fsd2F5cyBcdTdGQjUgMTIzNDUtMTM2LTIKK2Fsd2F5cyBcdTdGQjYgMjQtMTIzNi0zCithbHdheXMgXHU3RkI3IDE0LTIzNDUtNAorYWx3YXlzIFx1N0ZCOCAxNC0zNTYtMgorYWx3YXlzIFx1N0ZCOSAxMy0xMzU2LTMKK2Fsd2F5cyBcdTdGQkEgMTM0NS0xMjM1Ni0yCithbHdheXMgXHU3RkJCIDI0NS00Ni01CithbHdheXMgXHU3RkJDIDEyLTEyMzYtNQorYWx3YXlzIFx1N0ZCRCAxMjU2LTQKK2Fsd2F5cyBcdTdGQkUgMTMtMTIzNDYtNQorYWx3YXlzIFx1N0ZCRiAxNi01CithbHdheXMgXHU3RkMwIDEyLTEyMzQ2LTMKK2Fsd2F5cyBcdTdGQzEgMTIzNDYtMworYWx3YXlzIFx1N0ZDMiAxMjM0NS0xMzYtMworYWx3YXlzIFx1N0ZDMyAxMjM1LTEyMzQ2LTIKK2Fsd2F5cyBcdTdGQzQgMTItMTU2LTUKK2Fsd2F5cyBcdTdGQzUgMTItMTU2LTUKK2Fsd2F5cyBcdTdGQzYgMjQ1LTEyNDYtNQorYWx3YXlzIFx1N0ZDNyAxMjM0NS0zNC0yCithbHdheXMgXHU3RkM4IDE1LTIzNDU2LTIKK2Fsd2F5cyBcdTdGQzkgMTIzNC0xMzYtNAorYWx3YXlzIFx1N0ZDQSAxNi01CithbHdheXMgXHU3RkNCIDE0LTM0NS0zCithbHdheXMgXHU3RkNDIDE2LTUKK2Fsd2F5cyBcdTdGQ0QgMTIzNC0xNi0zCithbHdheXMgXHU3RkNFIDE0LTEzNDU2LTIKK2Fsd2F5cyBcdTdGQ0YgMTQtMjQ2LTIKK2Fsd2F5cyBcdTdGRDAgMS0xNTYtNQorYWx3YXlzIFx1N0ZEMSAyNDUtMTI1Ni0yCithbHdheXMgXHU3RkQyIDE1LTE2LTIKK2Fsd2F5cyBcdTdGRDMgMTUtMzQ2LTIKK2Fsd2F5cyBcdTdGRDQgMTUtNDYtMgorYWx3YXlzIFx1N0ZENSAxNS0xNi01CithbHdheXMgXHU3RkQ2IDE1LTE2LTUKK2Fsd2F5cyBcdTdGRDcgMjQ1LTE2LTIKK2Fsd2F5cyBcdTdGRDggMjQ1LTI0Ni01CithbHdheXMgXHU3RkQ5IDEyMzUtMTI0Ni01CithbHdheXMgXHU3RkRBIDEyMzUtMTI0Ni0zCithbHdheXMgXHU3RkRCIDE1LTI0Ni0zCithbHdheXMgXHU3RkRDIDE1LTIzNDYtNQorYWx3YXlzIFx1N0ZERCAxMjM1LTEyMzQ2LTIKK2Fsd2F5cyBcdTdGREUgMTMtNDYtMworYWx3YXlzIFx1N0ZERiAxLTI0NTYtMgorYWx3YXlzIFx1N0ZFMCAyNDUtMTI0Ni01CithbHdheXMgXHU3RkUxIDEyMzQ1LTM1Ni00CithbHdheXMgXHU3RkUyIDEyNC0xNDYtMworYWx3YXlzIFx1N0ZFMyAyNC0zNDUtNQorYWx3YXlzIFx1N0ZFNCAxMi0xNTYtNQorYWx3YXlzIFx1N0ZFNSAxLTM0LTUKK2Fsd2F5cyBcdTdGRTYgMTMtMjM0NS00CithbHdheXMgXHU3RkU3IDE1LTQ1LTMKK2Fsd2F5cyBcdTdGRTggMjQtMTU2LTUKK2Fsd2F5cyBcdTdGRTkgMTIzNC0yMzQ1LTMKK2Fsd2F5cyBcdTdGRUEgMTI1LTEyMzQ2LTMKK2Fsd2F5cyBcdTdGRUIgMTI0NTYtNQorYWx3YXlzIFx1N0ZFQyAxMjM1LTEyNDYtMworYWx3YXlzIFx1N0ZFRCAxMjM1LTEyMzU2LTIKK2Fsd2F5cyBcdTdGRUUgMTIzNS0yMzQ2LTIKK2Fsd2F5cyBcdTdGRUYgMTIzNS0yMzQ2LTUKK2Fsd2F5cyBcdTdGRjAgMTIzNS0xMjM2LTUKK2Fsd2F5cyBcdTdGRjEgMTQ2LTIKK2Fsd2F5cyBcdTdGRjIgMTIzNC0yNDYtMworYWx3YXlzIFx1N0ZGMyAxNi01CithbHdheXMgXHU3RkY0IDE0LTIzNDUtMgorYWx3YXlzIFx1N0ZGNSAyNDUtMTI1Ni0yCithbHdheXMgXHU3RkY2IDE0Ni0yCithbHdheXMgXHU3RkY3IDE0LTE0NTYtMgorYWx3YXlzIFx1N0ZGOCAxMjM0LTEzNi00CithbHdheXMgXHU3RkY5IDI0NS0yNDYtNQorYWx3YXlzIFx1N0ZGQSAxNDYtMgorYWx3YXlzIFx1N0ZGQiAxMjM0NS0xMjM2LTMKK2Fsd2F5cyBcdTdGRkMgMTYtNQorYWx3YXlzIFx1N0ZGRCAxMjM1LTEyNDYtNQorYWx3YXlzIFx1N0ZGRSAxNS00NS0zCithbHdheXMgXHU3RkZGIDE0NS0xNDYtNQorYWx3YXlzIFx1ODAwMCAyNDYtNQorYWx3YXlzIFx1ODAwMSAxNC0xNDYtNAorYWx3YXlzIFx1ODAwMiAxNC0xNDYtNAorYWx3YXlzIFx1ODAwMyAxMjMtMTQ2LTQKK2Fsd2F5cyBcdTgwMDQgMTM0LTE0Ni01CithbHdheXMgXHU4MDA1IDEtMjM0Ni00CithbHdheXMgXHU4MDA2IDI0NS0xNi0yCithbHdheXMgXHU4MDA3IDEzLTEyMzU2LTQKK2Fsd2F5cyBcdTgwMDggMTMtMTIzNTYtNAorYWx3YXlzIFx1ODAwOSAxMy0xMjM1Ni00CithbHdheXMgXHU4MDBBIDE0NS0zNDYtMgorYWx3YXlzIFx1ODAwQiAxNDUtMzQ2LTIKK2Fsd2F5cyBcdTgwMEMgMTU2LTIKK2Fsd2F5cyBcdTgwMEQgMjQtMzUtNAorYWx3YXlzIFx1ODAwRSAxMjQ1LTEyNDU2LTQKK2Fsd2F5cyBcdTgwMEYgMTU2LTIKK2Fsd2F5cyBcdTgwMTAgMTM0NS0yNDU2LTUKK2Fsd2F5cyBcdTgwMTEgMS0xMjQ1Ni0zCithbHdheXMgXHU4MDEyIDE0LTM1Ni00CithbHdheXMgXHU4MDEzIDEyNC0xMzQ1Ni0zCithbHdheXMgXHU4MDE0IDEyNS0xNTYtNAorYWx3YXlzIFx1ODAxNSAxMy0xMzU2LTMKK2Fsd2F5cyBcdTgwMTYgMTItMTQ2LTUKK2Fsd2F5cyBcdTgwMTcgMTIzNS0xNDYtNQorYWx3YXlzIFx1ODAxOCAyNTYtMgorYWx3YXlzIFx1ODAxOSAxMjM0LTM0NS0yCithbHdheXMgXHU4MDFBIDEyMzQtMTYtMworYWx3YXlzIFx1ODAxQiAxMi0xNTYtMgorYWx3YXlzIFx1ODAxQyAxNS0xNTYtNQorYWx3YXlzIFx1ODAxRCAxMi0zNC0yCithbHdheXMgXHU4MDFFIDEzLTIzNDU2LTMKK2Fsd2F5cyBcdTgwMUYgMTMtMTI1Ni01CithbHdheXMgXHU4MDIwIDEyMzUtMjUtMworYWx3YXlzIFx1ODAyMSAxMi0zNC0yCithbHdheXMgXHU4MDIyIDE0LTE0Ni01CithbHdheXMgXHU4MDIzIDE0LTEyMzQ1Ni00CithbHdheXMgXHU4MDI0IDEzLTE2LTIKK2Fsd2F5cyBcdTgwMjUgMTI0LTEzNDYtNAorYWx3YXlzIFx1ODAyNiAxMjM1Ni00CithbHdheXMgXHU4MDI3IDE0LTEyMzU2LTIKK2Fsd2F5cyBcdTgwMjggMTM0NS0xMjM1Ni01CithbHdheXMgXHU4MDI5IDEzLTQ2LTQKK2Fsd2F5cyBcdTgwMkEgMTIzNC0xMzQ2LTQKK2Fsd2F5cyBcdTgwMkIgMTI1LTIzNDYtMgorYWx3YXlzIFx1ODAyQyAxNC0xMjM1Ni0yCithbHdheXMgXHU4MDJEIDEzLTE2LTMKK2Fsd2F5cyBcdTgwMkUgMTQtMTQ2LTUKK2Fsd2F5cyBcdTgwMkYgMTIzNS0yNS01CithbHdheXMgXHU4MDMwIDIzNC0zCithbHdheXMgXHU4MDMxIDEzNC0xMjYtNQorYWx3YXlzIFx1ODAzMiAxMjM1LTIzNTYtMgorYWx3YXlzIFx1ODAzMyAxNTYtNAorYWx3YXlzIFx1ODAzNCAxLTIzNDYtMgorYWx3YXlzIFx1ODAzNSAxMjQtMTM0NTYtMworYWx3YXlzIFx1ODAzNiAzNDYtMworYWx3YXlzIFx1ODAzNyAxNDUtMzQ1LTMKK2Fsd2F5cyBcdTgwMzggMTUtMTIzNDYtNAorYWx3YXlzIFx1ODAzOSAyNDUtMTQ1Ni0yCithbHdheXMgXHU4MDNBIDI1Ni0yCithbHdheXMgXHU4MDNCIDEyLTE1Ni00CithbHdheXMgXHU4MDNDIDE0NS0xMjM2LTMKK2Fsd2F5cyBcdTgwM0QgMTQ1LTEyMzYtMworYWx3YXlzIFx1ODAzRSAxMjM1LTEyMzQ2LTIKK2Fsd2F5cyBcdTgwM0YgMTMtMTM1Ni00CithbHdheXMgXHU4MDQwIDEtMTU2LTIKK2Fsd2F5cyBcdTgwNDEgMTIzNC0xMjM2LTUKK2Fsd2F5cyBcdTgwNDIgMTM0NS0zNDYtNQorYWx3YXlzIFx1ODA0MyAxNDUtMTIzNi0zCithbHdheXMgXHU4MDQ0IDEtMTM2LTQKK2Fsd2F5cyBcdTgwNDUgMTItMjM0Ni01CithbHdheXMgXHU4MDQ2IDE0LTEzNDU2LTIKK2Fsd2F5cyBcdTgwNDcgMS0xMzU2LTMKK2Fsd2F5cyBcdTgwNDggMjM0LTQKK2Fsd2F5cyBcdTgwNDkgMzUtMworYWx3YXlzIFx1ODA0QSAxNC0yNDYtMgorYWx3YXlzIFx1ODA0QiAxNC0xMjM0Ni0yCithbHdheXMgXHU4MDRDIDEtMTU2LTIKK2Fsd2F5cyBcdTgwNEQgMTM0NS0xMzQ1Ni0yCithbHdheXMgXHU4MDRFIDEyNC0yNDYtMworYWx3YXlzIFx1ODA0RiAxNTYtMgorYWx3YXlzIFx1ODA1MCAyMzQ1Ni01CithbHdheXMgXHU4MDUxIDE0NS0zNDYtMgorYWx3YXlzIFx1ODA1MiAxMy0zNS0zCithbHdheXMgXHU4MDUzIDE1LTEyNTYtNQorYWx3YXlzIFx1ODA1NCAxNC0yMzQ1LTIKK2Fsd2F5cyBcdTgwNTUgMTIzNS0xNDYtNQorYWx3YXlzIFx1ODA1NiAyNC0xMzU2LTUKK2Fsd2F5cyBcdTgwNTcgMTQtMzQ2LTUKK2Fsd2F5cyBcdTgwNTggMTIzNC0xNDU2LTUKK2Fsd2F5cyBcdTgwNTkgMTMtMTM0NTYtMworYWx3YXlzIFx1ODA1QSAxMy0xMjU2LTUKK2Fsd2F5cyBcdTgwNUIgMTM1LTE2LTUKK2Fsd2F5cyBcdTgwNUMgMTQ1LTE2LTQKK2Fsd2F5cyBcdTgwNUQgMTMtMjUtMgorYWx3YXlzIFx1ODA1RSAxMjM0NTYtMgorYWx3YXlzIFx1ODA1RiAxNS0xMjU2LTUKK2Fsd2F5cyBcdTgwNjAgMTIzNC0xMzQ1Ni0yCithbHdheXMgXHU4MDYxIDI0NS0xMjM0Ni0zCithbHdheXMgXHU4MDYyIDE0NS0xMzQ1Ni01CithbHdheXMgXHU4MDYzIDEzNDUtMTYtMgorYWx3YXlzIFx1ODA2NCAxMjQtMTM0NTYtMgorYWx3YXlzIFx1ODA2NSAxMjU2LTQKK2Fsd2F5cyBcdTgwNjYgMjQ1LTEyMzQ2LTMKK2Fsd2F5cyBcdTgwNjcgMTIzLTEyNDYtMgorYWx3YXlzIFx1ODA2OCAxNC0yMzQ1LTIKK2Fsd2F5cyBcdTgwNjkgMTIzLTEyNDYtNQorYWx3YXlzIFx1ODA2QSAyNDUtMTIzNDYtMworYWx3YXlzIFx1ODA2QiAxNC0yMzQ1LTIKK2Fsd2F5cyBcdTgwNkMgMTIzNDYtNAorYWx3YXlzIFx1ODA2RCAxMjMtMTI0Ni01CithbHdheXMgXHU4MDZFIDE0LTIzNDUtMgorYWx3YXlzIFx1ODA2RiAxNC0yMzQ1LTIKK2Fsd2F5cyBcdTgwNzAgMjQ1LTEyMzQ2LTMKK2Fsd2F5cyBcdTgwNzEgMTQ2LTIKK2Fsd2F5cyBcdTgwNzIgMjQtMTM1Ni0zCithbHdheXMgXHU4MDczIDE1LTEyMzQ2LTQKK2Fsd2F5cyBcdTgwNzQgMTI0LTEzNDU2LTMKK2Fsd2F5cyBcdTgwNzUgMTIzLTEyNDYtNQorYWx3YXlzIFx1ODA3NiAxMzQ1LTM0Ni01CithbHdheXMgXHU4MDc3IDEtMTU2LTIKK2Fsd2F5cyBcdTgwNzggMTQ1LTEyMzYtMworYWx3YXlzIFx1ODA3OSAxMzQ1LTEzNDU2LTIKK2Fsd2F5cyBcdTgwN0EgMTUtMzQ2LTIKK2Fsd2F5cyBcdTgwN0IgMTMtMTYtMworYWx3YXlzIFx1ODA3QyAxMjQtMTM0NTYtMworYWx3YXlzIFx1ODA3RCAxMjQtMTM0NTYtMworYWx3YXlzIFx1ODA3RSAxNC0xMjM0Ni0yCithbHdheXMgXHU4MDdGIDEyNTYtNQorYWx3YXlzIFx1ODA4MCAxMzQ1LTM0Ni01CithbHdheXMgXHU4MDgxIDEtMTQ2LTUKK2Fsd2F5cyBcdTgwODIgMTUtMTU2LTUKK2Fsd2F5cyBcdTgwODMgMTUtMzQtNQorYWx3YXlzIFx1ODA4NCAxNi01CithbHdheXMgXHU4MDg1IDE1LTM0LTUKK2Fsd2F5cyBcdTgwODYgMTUtMTU2LTUKK2Fsd2F5cyBcdTgwODcgMS0xNDYtNQorYWx3YXlzIFx1ODA4OCAxLTE0Ni01CithbHdheXMgXHU4MDg5IDEyNDUtMTIzNTYtNQorYWx3YXlzIFx1ODA4QSAxNi01CithbHdheXMgXHU4MDhCIDE0LTIzNDYtNQorYWx3YXlzIFx1ODA4QyAxMy0xNi0zCithbHdheXMgXHU4MDhEIDI0NS0yMzQtMgorYWx3YXlzIFx1ODA4RSAxMjMtMTM2LTQKK2Fsd2F5cyBcdTgwOEYgMjQ1LTE0Ni01CithbHdheXMgXHU4MDkwIDEzLTIzNDYtMworYWx3YXlzIFx1ODA5MSAxNDUtMTYtNQorYWx3YXlzIFx1ODA5MiAxMjM1LTEyNDU2LTUKK2Fsd2F5cyBcdTgwOTMgMTIzNS00NTYtMworYWx3YXlzIFx1ODA5NCAxNi00CithbHdheXMgXHU4MDk1IDEyNDUtMTM2LTUKK2Fsd2F5cyBcdTgwOTYgMTUtMjQ2LTUKK2Fsd2F5cyBcdTgwOTcgMTI0NS0zNC00CithbHdheXMgXHU4MDk4IDEtMTIzNTYtNAorYWx3YXlzIFx1ODA5OSA0NS0zCithbHdheXMgXHU4MDlBIDE0NS0zNC01CithbHdheXMgXHU4MDlCIDEzLTEzNDYtMworYWx3YXlzIFx1ODA5QyAxMjQ1LTEyMzQ2LTIKK2Fsd2F5cyBcdTgwOUQgMTMtMTIzNi0zCithbHdheXMgXHU4MDlFIDEyLTM0NS0zCithbHdheXMgXHU4MDlGIDI1LTUKK2Fsd2F5cyBcdTgwQTAgMTItMTM0Ni0yCithbHdheXMgXHU4MEExIDEzLTM0LTQKK2Fsd2F5cyBcdTgwQTIgMS0xNTYtMworYWx3YXlzIFx1ODBBMyAxMjM1LTEyMzYtMgorYWx3YXlzIFx1ODBBNCAxMjM0NS0zNC0zCithbHdheXMgXHU4MEE1IDEyMzQ1LTM1Ni0yCithbHdheXMgXHU4MEE2IDEyMzQ1LTEzNi0yCithbHdheXMgXHU4MEE3IDEyMzQtMzU2LTMKK2Fsd2F5cyBcdTgwQTggMTIzNC0xMzQ2LTUKK2Fsd2F5cyBcdTgwQTkgMTMtMjM0NS0zCithbHdheXMgXHU4MEFBIDEyMzQ1LTEzNDYtMgorYWx3YXlzIFx1ODBBQiAxLTEyMzQ1Ni0zCithbHdheXMgXHU4MEFDIDIzNC0yCithbHdheXMgXHU4MEFEIDEzNDUtMzQ1LTUKK2Fsd2F5cyBcdTgwQUUgMTIzNS0xMzQ2LTIKK2Fsd2F5cyBcdTgwQUYgMTIzLTEzNi00CithbHdheXMgXHU4MEIwIDEyNDUtMTIzNi0yCithbHdheXMgXHU4MEIxIDEzLTEyMzQ2LTMKK2Fsd2F5cyBcdTgwQjIgMTI1Ni01CithbHdheXMgXHU4MEIzIDEyMzQ1Ni00CithbHdheXMgXHU4MEI0IDI0Ni0yCithbHdheXMgXHU4MEI1IDI0NS0xNi0yCithbHdheXMgXHU4MEI2IDEyMzQtMTYtMgorYWx3YXlzIFx1ODBCNyAyNDUtMjM0NS00CithbHdheXMgXHU4MEI4IDE1LTE2LTUKK2Fsd2F5cyBcdTgwQjkgMTUtMTYtMworYWx3YXlzIFx1ODBCQSAxMjM0NS0zNTYtNQorYWx3YXlzIFx1ODBCQiAxMjMtMTM2LTQKK2Fsd2F5cyBcdTgwQkMgMTMtMTM0NTYtNAorYWx3YXlzIFx1ODBCRCAxMjQtMjQ1Ni01CithbHdheXMgXHU4MEJFIDI0LTEzNi01CithbHdheXMgXHU4MEJGIDEtMTIzNDYtNAorYWx3YXlzIFx1ODBDMCAxLTEzNDYtNQorYWx3YXlzIFx1ODBDMSAxNS0zNDYtMgorYWx3YXlzIFx1ODBDMiAyNC0xMzYtNQorYWx3YXlzIFx1ODBDMyAxMjQ2LTUKK2Fsd2F5cyBcdTgwQzQgMS0xMjM1Ni01CithbHdheXMgXHU4MEM1IDE0NS0zNDYtMgorYWx3YXlzIFx1ODBDNiAxMjQtMTIzNi0yCithbHdheXMgXHU4MEM3IDEyMzQ1LTM1Ni01CithbHdheXMgXHU4MEM4IDEzNS0zNDUtMgorYWx3YXlzIFx1ODBDOSAxMzUtMTI2LTIKK2Fsd2F5cyBcdTgwQ0EgMjQ1LTEyNTYtMgorYWx3YXlzIFx1ODBDQiAxMjQtMjM0NS0yCithbHdheXMgXHU4MENDIDEzNS0zNTYtNQorYWx3YXlzIFx1ODBDRCAxMy0zNS0zCithbHdheXMgXHU4MENFIDEyNC0yNDU2LTMKK2Fsd2F5cyBcdTgwQ0YgMTI1LTE1Ni00CithbHdheXMgXHU4MEQwIDEyMy0zNC0zCithbHdheXMgXHU4MEQxIDEtMTU2LTMKK2Fsd2F5cyBcdTgwRDIgMTM0NS0xNi01CithbHdheXMgXHU4MEQzIDEyMzQtMTM0NTYtMgorYWx3YXlzIFx1ODBENCAxMjUtMTU2LTUKK2Fsd2F5cyBcdTgwRDUgMTIzNDUtMzQtMworYWx3YXlzIFx1ODBENiAxMjM0LTEzNDYtNQorYWx3YXlzIFx1ODBENyAxLTEzNi0zCithbHdheXMgXHU4MEQ4IDE1LTIzNDUtMgorYWx3YXlzIFx1ODBEOSAxMjUtMjUtNQorYWx3YXlzIFx1ODBEQSAxMjM0LTM1Ni0zCithbHdheXMgXHU4MERCIDEzLTIzNDU2LTQKK2Fsd2F5cyBcdTgwREMgMjQtMTM1Ni01CithbHdheXMgXHU4MEREIDEtMTU2LTMKK2Fsd2F5cyBcdTgwREUgMTM1LTE0Ni0zCithbHdheXMgXHU4MERGIDEzNC0zNC00CithbHdheXMgXHU4MEUwIDI0NS0xMjU2LTMKK2Fsd2F5cyBcdTgwRTEgMTIzNS0zNC0yCithbHdheXMgXHU4MEUyIDEyMy0yMzQ2LTMKK2Fsd2F5cyBcdTgwRTMgMTItMTU2LTQKK2Fsd2F5cyBcdTgwRTQgMTQ1Ni01CithbHdheXMgXHU4MEU1IDE1LTEyNTYtMworYWx3YXlzIFx1ODBFNiA0Ni0zCithbHdheXMgXHU4MEU3IDE0LTEyMzQ2LTIKK2Fsd2F5cyBcdTgwRTggMTQ1LTEyMzQ2LTUKK2Fsd2F5cyBcdTgwRTkgMTIzLTM0NS00CithbHdheXMgXHU4MEVBIDE0LTM0LTIKK2Fsd2F5cyBcdTgwRUIgMTMtMTM0NTYtNQorYWx3YXlzIFx1ODBFQyAxMzQ1LTM0LTQKK2Fsd2F5cyBcdTgwRUQgMjM0NS0zCithbHdheXMgXHU4MEVFIDEzNS0xMzQ2LTMKK2Fsd2F5cyBcdTgwRUYgMTIzLTM1LTUKK2Fsd2F5cyBcdTgwRjAgMTYtMgorYWx3YXlzIFx1ODBGMSAxMy00NTYtMworYWx3YXlzIFx1ODBGMiAxMy0yNDU2LTMKK2Fsd2F5cyBcdTgwRjMgMTMtMjM0Ni0zCithbHdheXMgXHU4MEY0IDE0NS0xMjM0Ni01CithbHdheXMgXHU4MEY1IDEyLTE1Ni01CithbHdheXMgXHU4MEY2IDEzLTI0Ni0zCithbHdheXMgXHU4MEY3IDE1LTIzNS0zCithbHdheXMgXHU4MEY4IDE1LTIzNS0zCithbHdheXMgXHU4MEY5IDE1Ni0yCithbHdheXMgXHU4MEZBIDEyMzYtMworYWx3YXlzIFx1ODBGQiAxNS0xMzQ1Ni0yCithbHdheXMgXHU4MEZDIDEyMzQtMjM0NS0yCithbHdheXMgXHU4MEZEIDEzNDUtMTM1Ni0yCithbHdheXMgXHU4MEZFIDEyNS0xNTYtNQorYWx3YXlzIFx1ODBGRiAxMjMtMTI0Ni01CithbHdheXMgXHU4MTAwIDEyLTEzNTYtMgorYWx3YXlzIFx1ODEwMSAxMjQtMjQ2LTUKK2Fsd2F5cyBcdTgxMDIgMS0xNTYtMworYWx3YXlzIFx1ODEwMyAyNDUtMTI0Ni01CithbHdheXMgXHU4MTA0IDEzNC0zNTYtMgorYWx3YXlzIFx1ODEwNSAxNS0zNDYtMgorYWx3YXlzIFx1ODEwNiAyNDUtMTI0Ni01CithbHdheXMgXHU4MTA3IDE1LTM0Ni0yCithbHdheXMgXHU4MTA4IDEzNC0yNDU2LTUKK2Fsd2F5cyBcdTgxMDkgMTM0LTI0NTYtNQorYWx3YXlzIFx1ODEwQSAxMy0xNi00CithbHdheXMgXHU4MTBCIDE1LTM0Ni0yCithbHdheXMgXHU4MTBDIDEzNC0xNDU2LTIKK2Fsd2F5cyBcdTgxMEQgMTIzLTIzNTYtNQorYWx3YXlzIFx1ODEwRSAxNS0zNDUtNQorYWx3YXlzIFx1ODEwRiAxMjUtMTM0Ni0zCithbHdheXMgXHU4MTEwIDI0NS0xNi0yCithbHdheXMgXHU4MTExIDEzNDUtMTQ2LTQKK2Fsd2F5cyBcdTgxMTIgMTM0LTE2LTQKK2Fsd2F5cyBcdTgxMTMgMTM0NS0xMjM0Ni0yCithbHdheXMgXHU4MTE0IDE0LTEyNDU2LTIKK2Fsd2F5cyBcdTgxMTUgMTI0NTYtNQorYWx3YXlzIFx1ODExNiAxMzUtMTI2LTIKK2Fsd2F5cyBcdTgxMTcgMTIzNDU2LTQKK2Fsd2F5cyBcdTgxMTggMTI0NTYtNAorYWx3YXlzIFx1ODExOSAxNS0yMzQtMworYWx3YXlzIFx1ODExQSAxMy0yNDYtNAorYWx3YXlzIFx1ODExQiAxMy0xMzQ1Ni01CithbHdheXMgXHU4MTFDIDEyNDUtMTIzNTYtMgorYWx3YXlzIFx1ODExRCAxMjM1LTEzNTYtMworYWx3YXlzIFx1ODExRSAyNDUtMjUtNAorYWx3YXlzIFx1ODExRiAxNC0zNDYtNQorYWx3YXlzIFx1ODEyMCAyNC0xMjM2LTMKK2Fsd2F5cyBcdTgxMjEgMTI0LTEzNDU2LTQKK2Fsd2F5cyBcdTgxMjIgMTM0LTM1Ni0yCithbHdheXMgXHU4MTIzIDEyLTEyMzQ1Ni0yCithbHdheXMgXHU4MTI0IDI0LTEzNi01CithbHdheXMgXHU4MTI1IDEzLTIzNDU2LTIKK2Fsd2F5cyBcdTgxMjYgMTI0LTIzNDYtNQorYWx3YXlzIFx1ODEyNyAxMjUtMTI0Ni0zCithbHdheXMgXHU4MTI4IDI0NS0zNC01CithbHdheXMgXHU4MTI5IDE1LTIzNC0zCithbHdheXMgXHU4MTJBIDE1LTE0NTYtNQorYWx3YXlzIFx1ODEyQiAxMjQtMjUtMworYWx3YXlzIFx1ODEyQyAxMjM0LTE0Ni0zCithbHdheXMgXHU4MTJEIDEyLTEzNTYtMgorYWx3YXlzIFx1ODEyRSAxMzQ1LTM1Ni00CithbHdheXMgXHU4MTJGIDEyMzQ1LTM0LTQKK2Fsd2F5cyBcdTgxMzAgMTQ1LTEyMzU2LTUKK2Fsd2F5cyBcdTgxMzEgMTI0LTI1LTMKK2Fsd2F5cyBcdTgxMzIgMTM0NS0yNDYtNQorYWx3YXlzIFx1ODEzMyAxMzQ1LTE0Ni00CithbHdheXMgXHU4MTM0IDEyMzQtMTYtNAorYWx3YXlzIFx1ODEzNSAxMy0zNC00CithbHdheXMgXHU4MTM2IDE0LTI1LTIKK2Fsd2F5cyBcdTgxMzcgMTQtMTYtNQorYWx3YXlzIFx1ODEzOCAxNC0yMzQ1LTQKK2Fsd2F5cyBcdTgxMzkgMS0xMzQ2LTUKK2Fsd2F5cyBcdTgxM0EgMjQ1LTEyNDYtNQorYWx3YXlzIFx1ODEzQiAxMy0zNDYtMgorYWx3YXlzIFx1ODEzQyAxNC00Ni00CithbHdheXMgXHU4MTNEIDI0LTEyNDYtMgorYWx3YXlzIFx1ODEzRSAxMjM0LTE2LTIKK2Fsd2F5cyBcdTgxM0YgMTM1LTI0Ni0zCithbHdheXMgXHU4MTQwIDE0LTEyMzQ1Ni0yCithbHdheXMgXHU4MTQxIDEyMzQtMjM0NS0yCithbHdheXMgXHU4MTQyIDEzLTI1LTUKK2Fsd2F5cyBcdTgxNDMgMTIzLTEyNDYtNQorYWx3YXlzIFx1ODE0NCAxMi0xMjQ2LTIKK2Fsd2F5cyBcdTgxNDUgMTQ1LTEyMzYtNQorYWx3YXlzIFx1ODE0NiAxMjQtMjM0NS00CithbHdheXMgXHU4MTQ3IDEzNDUtMzU2LTQKK2Fsd2F5cyBcdTgxNDggMTMtMTM0NTYtMworYWx3YXlzIFx1ODE0OSAxMzQ1LTI0NTYtMgorYWx3YXlzIFx1ODE0QSAxNC0zNDUtNQorYWx3YXlzIFx1ODE0QiAzNDYtNQorYWx3YXlzIFx1ODE0QyAyMzQ1LTMKK2Fsd2F5cyBcdTgxNEQgMTI0NS0xMzYtNAorYWx3YXlzIFx1ODE0RSAyNC0xMzYtNQorYWx3YXlzIFx1ODE0RiAxMi0yNS01CithbHdheXMgXHU4MTUwIDEyMzQ1LTM0LTQKK2Fsd2F5cyBcdTgxNTEgMTIzNDUtMzQtNAorYWx3YXlzIFx1ODE1MiAxMy0xMjU2LTMKK2Fsd2F5cyBcdTgxNTMgMTIzNDUtMzU2LTIKK2Fsd2F5cyBcdTgxNTQgMjQ1LTQ2LTMKK2Fsd2F5cyBcdTgxNTUgMTI0NTYtNQorYWx3YXlzIFx1ODE1NiAxNDUtMTIzNDYtNQorYWx3YXlzIFx1ODE1NyAxMjM0LTE2LTIKK2Fsd2F5cyBcdTgxNTggMTMtMjUtMgorYWx3YXlzIFx1ODE1OSAxMjUtMTIzNDYtMworYWx3YXlzIFx1ODE1QSAxNDUtMTM0NTYtNQorYWx3YXlzIFx1ODE1QiAyNS01CithbHdheXMgXHU4MTVDIDEzNC0zNTYtMgorYWx3YXlzIFx1ODE1RCAxMjQ1LTEyNDU2LTQKK2Fsd2F5cyBcdTgxNUUgMS0xMjQ1Ni01CithbHdheXMgXHU4MTVGIDEtMTU2LTUKK2Fsd2F5cyBcdTgxNjAgMjQ1LTEyMzU2LTUKK2Fsd2F5cyBcdTgxNjEgMTQtMjUtMgorYWx3YXlzIFx1ODE2MiAxMjM1Ni00CithbHdheXMgXHU4MTYzIDE0NS0xNi01CithbHdheXMgXHU4MTY0IDEyMzYtMworYWx3YXlzIFx1ODE2NSAxNS0xMzQ1Ni0zCithbHdheXMgXHU4MTY2IDEzNDUtMTQ2LTQKK2Fsd2F5cyBcdTgxNjcgMjQtMzQtNQorYWx3YXlzIFx1ODE2OCAxMi0xMjQ1Ni00CithbHdheXMgXHU4MTY5IDEzNDUtMTIzNi00CithbHdheXMgXHU4MTZBIDI1Ni01CithbHdheXMgXHU4MTZCIDEtMTIzNDYtNAorYWx3YXlzIFx1ODE2QyAxMjQ1LTEyMzU2LTIKK2Fsd2F5cyBcdTgxNkQgMjM0Ni01CithbHdheXMgXHU4MTZFIDE1LTI0NTYtMworYWx3YXlzIFx1ODE2RiAxMjQtMzQtMgorYWx3YXlzIFx1ODE3MCAyNDYtMworYWx3YXlzIFx1ODE3MSAxMy0yMzQ1LTUKK2Fsd2F5cyBcdTgxNzIgMTI0Ni00CithbHdheXMgXHU4MTczIDEzLTI0Ni00CithbHdheXMgXHU4MTc0IDEyNTYtMgorYWx3YXlzIFx1ODE3NSAxMy0yMzQ1Ni0zCithbHdheXMgXHU4MTc2IDE0NS0xMjQ1Ni01CithbHdheXMgXHU4MTc3IDEzNS0xNi01CithbHdheXMgXHU4MTc4IDEyLTEzNDYtMgorYWx3YXlzIFx1ODE3OSAxMjM0NS0zNC01CithbHdheXMgXHU4MTdBIDE1LTIzNDUtNQorYWx3YXlzIFx1ODE3QiAxMzQ1LTE2LTUKK2Fsd2F5cyBcdTgxN0MgMTM0LTIzNDUtNAorYWx3YXlzIFx1ODE3RCAzNS01CithbHdheXMgXHU4MTdFIDEyNC0xMzU2LTIKK2Fsd2F5cyBcdTgxN0YgMTI0LTEyNDYtNAorYWx3YXlzIFx1ODE4MCAxMzUtMTM0Ni00CithbHdheXMgXHU4MTgxIDI0NS0yMzQ1LTQKK2Fsd2F5cyBcdTgxODIgMTQtMTI1Ni00CithbHdheXMgXHU4MTgzIDM1LTUKK2Fsd2F5cyBcdTgxODQgMTUtMTIzNTYtNQorYWx3YXlzIFx1ODE4NSAxMjQtMTM0Ni0yCithbHdheXMgXHU4MTg2IDE1LTM0LTUKK2Fsd2F5cyBcdTgxODcgMS0xMjQ2LTUKK2Fsd2F5cyBcdTgxODggMTMtMjM0Ni0yCithbHdheXMgXHU4MTg5IDE2LTUKK2Fsd2F5cyBcdTgxOEEgMTM1LTEyNi0yCithbHdheXMgXHU4MThCIDE0LTI0Ni0yCithbHdheXMgXHU4MThDIDEzLTE2LTIKK2Fsd2F5cyBcdTgxOEQgMTIzNC0xNi0yCithbHdheXMgXHU4MThFIDE1LTM0Ni0yCithbHdheXMgXHU4MThGIDEzLTE0Ni0zCithbHdheXMgXHU4MTkwIDE0LTEyNTYtNAorYWx3YXlzIFx1ODE5MSAxMzUtMTQ1Ni01CithbHdheXMgXHU4MTkyIDEyMzU2LTMKK2Fsd2F5cyBcdTgxOTMgMTItMTM0Ni0yCithbHdheXMgXHU4MTk0IDE0LTM0LTUKK2Fsd2F5cyBcdTgxOTUgMTMtMjUtMgorYWx3YXlzIFx1ODE5NiAxMjM0LTEzNDYtMworYWx3YXlzIFx1ODE5NyAxMi0yMzU2LTIKK2Fsd2F5cyBcdTgxOTggMTM1LTI0Ni0zCithbHdheXMgXHU4MTk5IDEzLTQ2LTQKK2Fsd2F5cyBcdTgxOUEgMTIzNDUtMzQtMworYWx3YXlzIFx1ODE5QiAxMjQtMTM0Ni0yCithbHdheXMgXHU4MTlDIDEzNC0xMjYtMgorYWx3YXlzIFx1ODE5RCAxNS0xNi0zCithbHdheXMgXHU4MTlFIDEtMTI0NTYtMworYWx3YXlzIFx1ODE5RiAxNC0xMjU2LTUKK2Fsd2F5cyBcdTgxQTAgMTMtMjQ2LTMKK2Fsd2F5cyBcdTgxQTEgMTM0NTYtNQorYWx3YXlzIFx1ODFBMiAxNC0xMjU2LTIKK2Fsd2F5cyBcdTgxQTMgMS0xNTYtNQorYWx3YXlzIFx1ODFBNCAxNS0yMzYtNAorYWx3YXlzIFx1ODFBNSAxMi0xMjM0NTYtMworYWx3YXlzIFx1ODFBNiAxNC0xNDU2LTIKK2Fsd2F5cyBcdTgxQTcgMTI0LTEyMzQ2LTIKK2Fsd2F5cyBcdTgxQTggMTIzNC0xMzU2LTIKK2Fsd2F5cyBcdTgxQTkgMTM0NS0xNi01CithbHdheXMgXHU4MUFBIDEyLTIzNTYtNQorYWx3YXlzIFx1ODFBQiAxNC0yNDYtMgorYWx3YXlzIFx1ODFBQyAyNDUtMTI0Ni01CithbHdheXMgXHU4MUFEIDEzLTEyNDYtMworYWx3YXlzIFx1ODFBRSAxNS0yNDYtMworYWx3YXlzIFx1ODFBRiAxMjQtMTM1Ni0zCithbHdheXMgXHU4MUIwIDEyMzQ1LTEyMzYtMgorYWx3YXlzIFx1ODFCMSAxLTE1Ni0yCithbHdheXMgXHU4MUIyIDEzLTI0Ni0zCithbHdheXMgXHU4MUIzIDI0LTEyMzYtNQorYWx3YXlzIFx1ODFCNCAxMjM1LTM0LTMKK2Fsd2F5cyBcdTgxQjUgMjQ1LTEyNDYtNQorYWx3YXlzIFx1ODFCNiAxMjQ1LTEyMzQ1Ni01CithbHdheXMgXHU4MUI3IDE1LTQ2LTMKK2Fsd2F5cyBcdTgxQjggMTUtMTI0Ni00CithbHdheXMgXHU4MUI5IDEyMzQ1LTEzNi01CithbHdheXMgXHU4MUJBIDEzNDU2LTMKK2Fsd2F5cyBcdTgxQkIgMjQtMTIzNi0zCithbHdheXMgXHU4MUJDIDEtMzUtMworYWx3YXlzIFx1ODFCRCAxNDUtMTIzNi00CithbHdheXMgXHU4MUJFIDEyMy0yMzU2LTUKK2Fsd2F5cyBcdTgxQkYgMTM0NS0xMjM0Ni0yCithbHdheXMgXHU4MUMwIDEyNC0xMjM0NTYtMgorYWx3YXlzIFx1ODFDMSAxNC0yMzQ1LTIKK2Fsd2F5cyBcdTgxQzIgMTM1LTE2LTUKK2Fsd2F5cyBcdTgxQzMgMjM1LTMKK2Fsd2F5cyBcdTgxQzQgMTMtMjM2LTIKK2Fsd2F5cyBcdTgxQzUgMTItMzQtNQorYWx3YXlzIFx1ODFDNiAxNi01CithbHdheXMgXHU4MUM3IDEzLTQ1LTQKK2Fsd2F5cyBcdTgxQzggMTQtMzQ1LTUKK2Fsd2F5cyBcdTgxQzkgMTQtMjM0NS00CithbHdheXMgXHU4MUNBIDE1LTE0Ni0zCithbHdheXMgXHU4MUNCIDEyNC0xMjM0NTYtMgorYWx3YXlzIFx1ODFDQyAxMy0zNC00CithbHdheXMgXHU4MUNEIDI0NS0xNi0yCithbHdheXMgXHU4MUNFIDI0NS0xMjQ2LTUKK2Fsd2F5cyBcdTgxQ0YgMTM1LTE0NTYtNQorYWx3YXlzIFx1ODFEMCAxNS0yNTYtMworYWx3YXlzIFx1ODFEMSAxMjQ1LTM0LTIKK2Fsd2F5cyBcdTgxRDIgMTIzNS0yNS01CithbHdheXMgXHU4MUQzIDEyNS0xMzQ2LTUKK2Fsd2F5cyBcdTgxRDQgMTUtMjM0NS01CithbHdheXMgXHU4MUQ1IDEzNS0yNDYtMworYWx3YXlzIFx1ODFENiAxNS0xMzQ1Ni01CithbHdheXMgXHU4MUQ3IDEyMy0xMjQ1Ni0zCithbHdheXMgXHU4MUQ4IDE0LTM0NS01CithbHdheXMgXHU4MUQ5IDIzNDUtMworYWx3YXlzIFx1ODFEQSAxNC0zNC0yCithbHdheXMgXHU4MURCIDEyMzUtMjUtNQorYWx3YXlzIFx1ODFEQyAxMjUtMTM0Ni0zCithbHdheXMgXHU4MUREIDE0LTI1LTQKK2Fsd2F5cyBcdTgxREUgMjQ1LTEyNTYtMgorYWx3YXlzIFx1ODFERiAxMjUtMTM0Ni01CithbHdheXMgXHU4MUUwIDE0LTEyNDU2LTIKK2Fsd2F5cyBcdTgxRTEgMTM0NS0xNi0yCithbHdheXMgXHU4MUUyIDEyNS0xMzQ2LTMKK2Fsd2F5cyBcdTgxRTMgMTItMTM2LTIKK2Fsd2F5cyBcdTgxRTQgMjQ1LTIzNDUtMworYWx3YXlzIFx1ODFFNSAyNS01CithbHdheXMgXHU4MUU2IDEzLTQ1Ni01CithbHdheXMgXHU4MUU3IDEyNS0xMzQ2LTMKK2Fsd2F5cyBcdTgxRTggMTQtMTQ1Ni0yCithbHdheXMgXHU4MUU5IDEzLTQ1Ni01CithbHdheXMgXHU4MUVBIDEyNS0xNTYtNQorYWx3YXlzIFx1ODFFQiAxMy0yNDYtNAorYWx3YXlzIFx1ODFFQyAxMzQ1LTM0Ni01CithbHdheXMgXHU4MUVEIDEyLTEyMzU2LTUKK2Fsd2F5cyBcdTgxRUUgMTMtMTYtNQorYWx3YXlzIFx1ODFFRiAxMy0xNDYtMworYWx3YXlzIFx1ODFGMCAxMi0xMjM1Ni01CithbHdheXMgXHU4MUYxIDEzNC0yMzQ1LTIKK2Fsd2F5cyBcdTgxRjIgMTM0NS0zNDYtNQorYWx3YXlzIFx1ODFGMyAxLTE1Ni01CithbHdheXMgXHU4MUY0IDEtMTU2LTUKK2Fsd2F5cyBcdTgxRjUgMTMtMjM0Ni0yCithbHdheXMgXHU4MUY2IDEzLTIzNDUtNQorYWx3YXlzIFx1ODFGNyAxNDUtMzQ2LTIKK2Fsd2F5cyBcdTgxRjggMS0xNTYtNQorYWx3YXlzIFx1ODFGOSAxNS0yMzQtMworYWx3YXlzIFx1ODFGQSAxMjQtMjQ1Ni0yCithbHdheXMgXHU4MUZCIDEtMTM2LTMKK2Fsd2F5cyBcdTgxRkMgMTMtMjM0LTUKK2Fsd2F5cyBcdTgxRkQgMTUtMjM0NS01CithbHdheXMgXHU4MUZFIDEyNTYtMgorYWx3YXlzIFx1ODFGRiAxMi0zNDUtMworYWx3YXlzIFx1ODIwMCAyNDYtNAorYWx3YXlzIFx1ODIwMSAxMjU2LTIKK2Fsd2F5cyBcdTgyMDIgMTItMTIzNDYtMworYWx3YXlzIFx1ODIwMyAxNS0xNi01CithbHdheXMgXHU4MjA0IDE1LTE2LTUKK2Fsd2F5cyBcdTgyMDUgMTMtMjM0LTUKK2Fsd2F5cyBcdTgyMDYgMTI1Ni0yCithbHdheXMgXHU4MjA3IDEyNTYtNAorYWx3YXlzIFx1ODIwOCAxNS0xMzQ1Ni0zCithbHdheXMgXHU4MjA5IDEzLTEyNTYtNAorYWx3YXlzIFx1ODIwQSAxMy0yMzQtNQorYWx3YXlzIFx1ODIwQiAxNS0xNDU2LTUKK2Fsd2F5cyBcdTgyMEMgMjQtMjM0Ni0yCithbHdheXMgXHU4MjBEIDI0LTIzNDYtNQorYWx3YXlzIFx1ODIwRSAyNC0yMzQ2LTUKK2Fsd2F5cyBcdTgyMEYgMTMtMjM0LTQKK2Fsd2F5cyBcdTgyMTAgMjQtMTU2LTUKK2Fsd2F5cyBcdTgyMTEgMTI0NS0xMjM2LTIKK2Fsd2F5cyBcdTgyMTIgMjQtMzQtMworYWx3YXlzIFx1ODIxMyAyNC0xNTYtNQorYWx3YXlzIFx1ODIxNCAxMjQtMjM0NS00CithbHdheXMgXHU4MjE1IDEyNC0xMjM2LTUKK2Fsd2F5cyBcdTgyMTYgMTIzNC0zNC0zCithbHdheXMgXHU4MjE3IDEyMzQtMzQtNQorYWx3YXlzIFx1ODIxOCAxMy0xMjQ1Ni00CithbHdheXMgXHU4MjE5IDEyMzUtMzUtNQorYWx3YXlzIFx1ODIxQSAxMjQ1LTEyMzYtMgorYWx3YXlzIFx1ODIxQiAxMi0xMjQ1Ni00CithbHdheXMgXHU4MjFDIDI0LTEyMzQ1Ni01CithbHdheXMgXHU4MjFEIDE1LTIzNDU2LTIKK2Fsd2F5cyBcdTgyMUUgMzQtNAorYWx3YXlzIFx1ODIxRiAxLTEyMzU2LTMKK2Fsd2F5cyBcdTgyMjAgMTQ1LTE0Ni0zCithbHdheXMgXHU4MjIxIDE1LTQ2LTMKK2Fsd2F5cyBcdTgyMjIgMjQtMTIzNi0zCithbHdheXMgXHU4MjIzIDE2LTQKK2Fsd2F5cyBcdTgyMjQgMTIzNDUtMTIzNi0yCithbHdheXMgXHU4MjI1IDEyMzQtMzQ1LTMKK2Fsd2F5cyBcdTgyMjYgMTI0LTI0NTYtNQorYWx3YXlzIFx1ODIyNyAxMjM0NS0xMjM2LTIKK2Fsd2F5cyBcdTgyMjggMTM1LTEyMzYtNAorYWx3YXlzIFx1ODIyOSAxMi0xMjQ1Ni0yCithbHdheXMgXHU4MjJBIDEyMzUtMTM0Ni0yCithbHdheXMgXHU4MjJCIDEyMzQ1LTEzNDYtNAorYWx3YXlzIFx1ODIyQyAxMzUtMTIzNi0zCithbHdheXMgXHU4MjJEIDE0NS0xNi00CithbHdheXMgXHU4MjJFIDE0LTM0LTIKK2Fsd2F5cyBcdTgyMkYgMS0xMjM0Ni0zCithbHdheXMgXHU4MjMwIDEzLTIzNDUtNQorYWx3YXlzIFx1ODIzMSAyNDUtMTM0Ni0zCithbHdheXMgXHU4MjMyIDE0LTEzNDU2LTIKK2Fsd2F5cyBcdTgyMzMgMS0zNC0yCithbHdheXMgXHU4MjM0IDEyNS0yMzQ2LTIKK2Fsd2F5cyBcdTgyMzUgMTQ1LTI1LTUKK2Fsd2F5cyBcdTgyMzYgMTM1LTEyNi0yCithbHdheXMgXHU4MjM3IDE1LTIzNDUtMgorYWx3YXlzIFx1ODIzOCAxMy0yMzQ2LTQKK2Fsd2F5cyBcdTgyMzkgMTItMTI0NTYtMgorYWx3YXlzIFx1ODIzQSAxMy0yMzQ1Ni00CithbHdheXMgXHU4MjNCIDE0LTM0LTIKK2Fsd2F5cyBcdTgyM0MgMjQ1LTIzNS0yCithbHdheXMgXHU4MjNEIDEyMzQtMTM0Ni0yCithbHdheXMgXHU4MjNFIDE1LTE2LTMKK2Fsd2F5cyBcdTgyM0YgMTIzNS0zNS0yCithbHdheXMgXHU4MjQwIDEyMzQ1LTM0LTIKK2Fsd2F5cyBcdTgyNDEgMTI1LTE0Ni01CithbHdheXMgXHU4MjQyIDEyMzQ1LTEzNTYtMgorYWx3YXlzIFx1ODI0MyAxNC0xNi0yCithbHdheXMgXHU4MjQ0IDI0LTE0Ni0zCithbHdheXMgXHU4MjQ1IDEyNTYtMgorYWx3YXlzIFx1ODI0NiAxNC0xMzQ2LTIKK2Fsd2F5cyBcdTgyNDcgMTI0LTEzNDU2LTQKK2Fsd2F5cyBcdTgyNDggMTI1Ni01CithbHdheXMgXHU4MjQ5IDEyNDYtNAorYWx3YXlzIFx1ODI0QSAxMzUtMTI2LTIKK2Fsd2F5cyBcdTgyNEIgMTM0LTEzNTYtNAorYWx3YXlzIFx1ODI0QyAxMzQ1LTIzNDUtNQorYWx3YXlzIFx1ODI0RCAxMy0xMjU2LTMKK2Fsd2F5cyBcdTgyNEUgMTIzNS00NTYtMgorYWx3YXlzIFx1ODI0RiAyNC0xMjM1Ni00CithbHdheXMgXHU4MjUwIDEyNS0xMjM0Ni0zCithbHdheXMgXHU4MjUxIDEzNS0yMzQ1LTUKK2Fsd2F5cyBcdTgyNTIgMTM0LTE0Ni01CithbHdheXMgXHU4MjUzIDE0NS0zNDYtMgorYWx3YXlzIFx1ODI1NCAxNDUtMTIzNTYtNAorYWx3YXlzIFx1ODI1NSAxMzUtMTM0Ni01CithbHdheXMgXHU4MjU2IDEyLTM0NS0zCithbHdheXMgXHU4MjU3IDE2LTUKK2Fsd2F5cyBcdTgyNTggMTUtMTQ2LTMKK2Fsd2F5cyBcdTgyNTkgMjQ1LTEzNDYtMworYWx3YXlzIFx1ODI1QSAyNDUtMTQ2LTIKK2Fsd2F5cyBcdTgyNUIgMTQtMTIzNTYtMgorYWx3YXlzIFx1ODI1QyAxNDUtMjQ1Ni01CithbHdheXMgXHU4MjVEIDE1LTIzNi00CithbHdheXMgXHU4MjVFIDI0Ni01CithbHdheXMgXHU4MjVGIDEyLTEyMzQ2LTMKK2Fsd2F5cyBcdTgyNjAgMTQ1LTEzNTYtMworYWx3YXlzIFx1ODI2MSAxNDUtMTM0Ni0zCithbHdheXMgXHU4MjYyIDI0NS00Ni0yCithbHdheXMgXHU4MjYzIDE0LTM0LTQKK2Fsd2F5cyBcdTgyNjQgMTYtNAorYWx3YXlzIFx1ODI2NSAxMy0xNi0yCithbHdheXMgXHU4MjY2IDEzLTIzNDUtNQorYWx3YXlzIFx1ODI2NyAxMjM1LTI1LTUKK2Fsd2F5cyBcdTgyNjggMTM0LTEzNTYtMgorYWx3YXlzIFx1ODI2OSAyNDUtMTYtMgorYWx3YXlzIFx1ODI2QSAxNC0zNC00CithbHdheXMgXHU4MjZCIDE0LTM0LTIKK2Fsd2F5cyBcdTgyNkMgMTItMTIzNi0yCithbHdheXMgXHU4MjZEIDI0LTQ1Ni0zCithbHdheXMgXHU4MjZFIDEzLTEzNi01CithbHdheXMgXHU4MjZGIDE0LTQ2LTIKK2Fsd2F5cyBcdTgyNzAgMTMtMjM0NS0zCithbHdheXMgXHU4MjcxIDEzLTIzNDUtMworYWx3YXlzIFx1ODI3MiAxNS0yMzQ2LTUKK2Fsd2F5cyBcdTgyNzMgMjM0NS01CithbHdheXMgXHU4Mjc0IDEyMzQ1LTM0LTIKK2Fsd2F5cyBcdTgyNzUgMTIzNC0xMzQ1Ni0zCithbHdheXMgXHU4Mjc2IDIzNDUtNQorYWx3YXlzIFx1ODI3NyAyMzQ1LTUKK2Fsd2F5cyBcdTgyNzggMjQ1LTE0Ni00CithbHdheXMgXHU4Mjc5IDI0NS0xNDYtNAorYWx3YXlzIFx1ODI3QSAxNi01CithbHdheXMgXHU4MjdCIDE0LTIzNDYtNQorYWx3YXlzIFx1ODI3QyAxMjQtMTM0NTYtMworYWx3YXlzIFx1ODI3RCAxMy0yNDYtMworYWx3YXlzIFx1ODI3RSAyNDU2LTUKK2Fsd2F5cyBcdTgyN0YgMTI0NS0xMzU2LTIKK2Fsd2F5cyBcdTgyODAgMTI0LTI0Ni0yCithbHdheXMgXHU4MjgxIDEzLTI0Ni0zCithbHdheXMgXHU4MjgyIDEzLTM0Ni0yCithbHdheXMgXHU4MjgzIDEyMzQtMTM1Ni0yCithbHdheXMgXHU4Mjg0IDEyNDU2LTIKK2Fsd2F5cyBcdTgyODUgMTYtNQorYWx3YXlzIFx1ODI4NiAxMi0yNDU2LTMKK2Fsd2F5cyBcdTgyODcgMTM0LTIzNDUtMgorYWx3YXlzIFx1ODI4OCAxMzQtMTYtNAorYWx3YXlzIFx1ODI4OSAxMy0xMjM2LTMKK2Fsd2F5cyBcdTgyOEEgMjQ1LTIzNDUtMworYWx3YXlzIFx1ODI4QiAxMjU2LTUKK2Fsd2F5cyBcdTgyOEMgMTI1Ni01CithbHdheXMgXHU4MjhEIDI0LTE0Ni0yCithbHdheXMgXHU4MjhFIDI0NS0yMzUtMworYWx3YXlzIFx1ODI4RiAxNDUtMzQtNQorYWx3YXlzIFx1ODI5MCAxMjM1LTM0LTUKK2Fsd2F5cyBcdTgyOTEgMjQ1LTE2LTQKK2Fsd2F5cyBcdTgyOTIgMTM0LTEzNDYtMgorYWx3YXlzIFx1ODI5MyAxMjUtMTU2LTUKK2Fsd2F5cyBcdTgyOTQgMTIzNS0xMjQ2LTUKK2Fsd2F5cyBcdTgyOTUgMTUtMTI0Ni0zCithbHdheXMgXHU4Mjk2IDEtMTU2LTUKK2Fsd2F5cyBcdTgyOTcgMTUtNDYtMworYWx3YXlzIFx1ODI5OCAxMjM0LTE2LTIKK2Fsd2F5cyBcdTgyOTkgMTIzNDUtMzQtMgorYWx3YXlzIFx1ODI5QSAxMjQtMTIzNDU2LTIKK2Fsd2F5cyBcdTgyOUIgMTI0Ni00CithbHdheXMgXHU4MjlDIDM0LTIKK2Fsd2F5cyBcdTgyOUQgMS0xNTYtMworYWx3YXlzIFx1ODI5RSAyNDUtMTYtNAorYWx3YXlzIFx1ODI5RiAyNC0xMjM2LTMKK2Fsd2F5cyBcdTgyQTAgMTIzNDU2LTIKK2Fsd2F5cyBcdTgyQTEgMjQ1LTIzNDUtNQorYWx3YXlzIFx1ODJBMiAxMjQ1LTEzNi0yCithbHdheXMgXHU4MkEzIDEyMzQ1LTEyMzU2LTIKK2Fsd2F5cyBcdTgyQTQgMTIzLTEyMzU2LTMKK2Fsd2F5cyBcdTgyQTUgMTMtMzQ2LTUKK2Fsd2F5cyBcdTgyQTYgMTQtMzQtMgorYWx3YXlzIFx1ODJBNyAxNS0xMjU2LTUKK2Fsd2F5cyBcdTgyQTggMTMtMTYtMworYWx3YXlzIFx1ODJBOSAyNDUtMTQ1Ni0yCithbHdheXMgXHU4MkFBIDI0NS0xNi0yCithbHdheXMgXHU4MkFCIDQ1LTIKK2Fsd2F5cyBcdTgyQUMgMTIzNDUtMTM2LTMKK2Fsd2F5cyBcdTgyQUQgMTM1LTM0NS0zCithbHdheXMgXHU4MkFFIDEyNDUtMTI0Ni01CithbHdheXMgXHU4MkFGIDE1LTE0NTYtMworYWx3YXlzIFx1ODJCMCAxMy0xNi01CithbHdheXMgXHU4MkIxIDEyMzUtMzUtMworYWx3YXlzIFx1ODJCMiAxMjM1LTM1LTMKK2Fsd2F5cyBcdTgyQjMgMTIzNDUtMTM0Ni0zCithbHdheXMgXHU4MkI0IDM0LTUKK2Fsd2F5cyBcdTgyQjUgMTMtMjM2LTIKK2Fsd2F5cyBcdTgyQjYgMTMtMTIzNTYtMworYWx3YXlzIFx1ODJCNyAxLTE1Ni00CithbHdheXMgXHU4MkI4IDI1Ni0yCithbHdheXMgXHU4MkI5IDI0NS0xNDU2LTIKK2Fsd2F5cyBcdTgyQkEgMTQ2LTQKK2Fsd2F5cyBcdTgyQkIgMTItMzQtMgorYWx3YXlzIFx1ODJCQyAxMzQtMTQ2LTUKK2Fsd2F5cyBcdTgyQkQgMjM0NTYtMgorYWx3YXlzIFx1ODJCRSAxMjM0NS0zNTYtNQorYWx3YXlzIFx1ODJCRiAxMjQ1LTEzNTYtNQorYWx3YXlzIFx1ODJDMCAxMjM1LTEzNDYtMgorYWx3YXlzIFx1ODJDMSAyNDUtMTIzNDYtMworYWx3YXlzIFx1ODJDMiAxNDU2LTIKK2Fsd2F5cyBcdTgyQzMgMjM0LTQKK2Fsd2F5cyBcdTgyQzQgMTM1LTIzNDUtNQorYWx3YXlzIFx1ODJDNSAxNi01CithbHdheXMgXHU4MkM2IDI0NS0zNDYtMworYWx3YXlzIFx1ODJDNyAxMjQ2LTQKK2Fsd2F5cyBcdTgyQzggMTQtMTYtNQorYWx3YXlzIFx1ODJDOSAxMjM0LTE2LTQKK2Fsd2F5cyBcdTgyQ0EgMjM0Ni01CithbHdheXMgXHU4MkNCIDE1LTIzNDUtNQorYWx3YXlzIFx1ODJDQyAxMi0xMzQ2LTIKK2Fsd2F5cyBcdTgyQ0QgMjQ1LTEzNDYtMworYWx3YXlzIFx1ODJDRSAxLTM0LTUKK2Fsd2F5cyBcdTgyQ0YgMTUtMzQtMworYWx3YXlzIFx1ODJEMCAxNi0yCithbHdheXMgXHU4MkQxIDQ1LTUKK2Fsd2F5cyBcdTgyRDIgMTI0NS0xMjM2LTQKK2Fsd2F5cyBcdTgyRDMgMTQtMTM0NTYtMgorYWx3YXlzIFx1ODJENCAxMjQtMjQ1Ni0yCithbHdheXMgXHU4MkQ1IDEyNC0yNDYtMgorYWx3YXlzIFx1ODJENiAxNDUtMTYtMgorYWx3YXlzIFx1ODJENyAxMzQtMjQ2LTIKK2Fsd2F5cyBcdTgyRDggMjQ1LTEzNDU2LTQKK2Fsd2F5cyBcdTgyRDkgMTQtMTYtNQorYWx3YXlzIFx1ODJEQSAyMzUtNQorYWx3YXlzIFx1ODJEQiAxMjMtMjM0Ni0zCithbHdheXMgXHU4MkRDIDEzNC0zNC01CithbHdheXMgXHU4MkREIDEyMzQtMzU2LTUKK2Fsd2F5cyBcdTgyREUgMTM1LTE0Ni0zCithbHdheXMgXHU4MkRGIDEzLTEyMzU2LTQKK2Fsd2F5cyBcdTgyRTAgMTM0LTE0NTYtMgorYWx3YXlzIFx1ODJFMSAxNi00CithbHdheXMgXHU4MkUyIDE2LTQKK2Fsd2F5cyBcdTgyRTMgMTMtMTI1Ni01CithbHdheXMgXHU4MkU0IDEyMzQtMTYtMworYWx3YXlzIFx1ODJFNSAxMjQ1LTI1LTUKK2Fsd2F5cyBcdTgyRTYgMTIzLTM0LTQKK2Fsd2F5cyBcdTgyRTcgMS0zNC01CithbHdheXMgXHU4MkU4IDEzNDUtMTYtNAorYWx3YXlzIFx1ODJFOSAxMzUtMTI2LTIKK2Fsd2F5cyBcdTgyRUEgMTM1LTEzNDU2LTQKK2Fsd2F5cyBcdTgyRUIgMjQtMTIzNi0zCithbHdheXMgXHU4MkVDIDI0NS0yMzQtMgorYWx3YXlzIFx1ODJFRCAyNDYtNAorYWx3YXlzIFx1ODJFRSAxNS0yMzQ1LTMKK2Fsd2F5cyBcdTgyRUYgMTM1LTEzNi00CithbHdheXMgXHU4MkYwIDEyMzUtMTIzNDYtMgorYWx3YXlzIFx1ODJGMSAxMzQ1Ni0zCithbHdheXMgXHU4MkYyIDEtMzQ1LTQKK2Fsd2F5cyBcdTgyRjMgMTQ1LTEyMzQ2LTMKK2Fsd2F5cyBcdTgyRjQgMTMtMTI1Ni0zCithbHdheXMgXHU4MkY1IDE0NS0zNDYtMgorYWx3YXlzIFx1ODJGNiAxMzQ1LTM0Ni0yCithbHdheXMgXHU4MkY3IDEzLTEyMzYtMworYWx3YXlzIFx1ODJGOCAxMjM1LTM0LTMKK2Fsd2F5cyBcdTgyRjkgMTIzNC0xMzQ1Ni0yCithbHdheXMgXHU4MkZBIDEzNC0zNTYtMgorYWx3YXlzIFx1ODJGQiAxMjM0NS0zNC0yCithbHdheXMgXHU4MkZDIDI0LTEzNTYtMworYWx3YXlzIFx1ODJGRCAxMy0zNC0zCithbHdheXMgXHU4MkZFIDEzNS0xNi01CithbHdheXMgXHU4MkZGIDEyNDYtNQorYWx3YXlzIFx1ODMwMCAxMjM0NS0zNC0yCithbHdheXMgXHU4MzAxIDEtMjUtMgorYWx3YXlzIFx1ODMwMiAxMzQtMTQ2LTUKK2Fsd2F5cyBcdTgzMDMgMTIzNDUtMTIzNi01CithbHdheXMgXHU4MzA0IDI0NS0zNDYtMgorYWx3YXlzIFx1ODMwNSAxMzQtMTQ2LTIKK2Fsd2F5cyBcdTgzMDYgMTM0LTE0Ni0yCithbHdheXMgXHU4MzA3IDEzNS0zNDUtMgorYWx3YXlzIFx1ODMwOCAxMjUtMTU2LTQKK2Fsd2F5cyBcdTgzMDkgMTM0LTEyNi01CithbHdheXMgXHU4MzBBIDEyNS0xNTYtMworYWx3YXlzIFx1ODMwQiAxNDUtMTYtNAorYWx3YXlzIFx1ODMwQyAxMi0xNTYtMgorYWx3YXlzIFx1ODMwRCAxMy0xNi0yCithbHdheXMgXHU4MzBFIDEzLTEzNDU2LTMKK2Fsd2F5cyBcdTgzMEYgMTQtMTIzNDYtMgorYWx3YXlzIFx1ODMxMCAyNDUtMTIzNDYtMworYWx3YXlzIFx1ODMxMSAxMzQ1LTI0Ni00CithbHdheXMgXHU4MzEyIDQ1LTIKK2Fsd2F5cyBcdTgzMTMgMTUtMjM2LTIKK2Fsd2F5cyBcdTgzMTQgMTM0NTYtMgorYWx3YXlzIFx1ODMxNSAyNDUtMjM1LTIKK2Fsd2F5cyBcdTgzMTYgMTMtMjM0Ni0yCithbHdheXMgXHU4MzE3IDEzNC0xMzQ1Ni0yCithbHdheXMgXHU4MzE4IDE0LTE2LTUKK2Fsd2F5cyBcdTgzMTkgMTI0NS0xMjM0Ni0yCithbHdheXMgXHU4MzFBIDE0NTYtNQorYWx3YXlzIFx1ODMxQiAxMy0xMzYtNQorYWx3YXlzIFx1ODMxQyAyNDUtMjM0NS01CithbHdheXMgXHU4MzFEIDEyLTI0NTYtNAorYWx3YXlzIFx1ODMxRSAxMi0xMzYtMgorYWx3YXlzIFx1ODMxRiAxMjU2LTUKK2Fsd2F5cyBcdTgzMjAgMTUtMjM0LTMKK2Fsd2F5cyBcdTgzMjEgMTI1LTE1Ni01CithbHdheXMgXHU4MzIyIDE0LTM0Ni01CithbHdheXMgXHU4MzIzIDM0LTIKK2Fsd2F5cyBcdTgzMjQgMTMtMTYtNQorYWx3YXlzIFx1ODMyNSAxMy0xMjQ2LTMKK2Fsd2F5cyBcdTgzMjYgMjQ1LTIzNDYtNQorYWx3YXlzIFx1ODMyNyAxMi0xMjM0Ni0yCithbHdheXMgXHU4MzI4IDI0NS0xNTYtMgorYWx3YXlzIFx1ODMyOSAxMy0xMjM1Ni00CithbHdheXMgXHU4MzJBIDEzLTQ1Ni0zCithbHdheXMgXHU4MzJCIDEzNC0xMzQ2LTIKK2Fsd2F5cyBcdTgzMkMgMTItMzQ1LTIKK2Fsd2F5cyBcdTgzMkQgMTMtMjQ2LTMKK2Fsd2F5cyBcdTgzMkUgMTMtMjQ2LTMKK2Fsd2F5cyBcdTgzMkYgMTIzNDUtMzQtMgorYWx3YXlzIFx1ODMzMCAxMjU2LTIKK2Fsd2F5cyBcdTgzMzEgMS0zNC0zCithbHdheXMgXHU4MzMyIDEyNS0xNTYtMworYWx3YXlzIFx1ODMzMyAxMy00Ni0zCithbHdheXMgXHU4MzM0IDEyMzUtMTI0Ni0yCithbHdheXMgXHU4MzM1IDE0NTYtMworYWx3YXlzIFx1ODMzNiAxMi0zNDUtMgorYWx3YXlzIFx1ODMzNyAxMjM0NS0zNDUtMgorYWx3YXlzIFx1ODMzOCAxMjQ1LTEyMzQ2LTIKK2Fsd2F5cyBcdTgzMzkgMTI0NS0zNC0yCithbHdheXMgXHU4MzNBIDEyLTEyMzQ2LTMKK2Fsd2F5cyBcdTgzM0IgMTM0LTEzNDYtNAorYWx3YXlzIFx1ODMzQyAxMjQtMTIzNDYtMgorYWx3YXlzIFx1ODMzRCAxLTEyMzQ2LTUKK2Fsd2F5cyBcdTgzM0UgMjQ1LTIzNDUtMworYWx3YXlzIFx1ODMzRiAxLTM0LTIKK2Fsd2F5cyBcdTgzNDAgMTUtMjU2LTIKK2Fsd2F5cyBcdTgzNDEgMTIzNS0xMjQ1Ni0yCithbHdheXMgXHU4MzQyIDEyMy0zNS0zCithbHdheXMgXHU4MzQzIDI0NS00NS0yCithbHdheXMgXHU4MzQ0IDEzLTI0NTYtMworYWx3YXlzIFx1ODM0NSAxNDUtMzQ1LTMKK2Fsd2F5cyBcdTgzNDYgMTMtMTM0NTYtMworYWx3YXlzIFx1ODM0NyAxNS0xMzQ1Ni01CithbHdheXMgXHU4MzQ4IDEyLTEyNDU2LTQKK2Fsd2F5cyBcdTgzNDkgMjQ1LTE0Ni00CithbHdheXMgXHU4MzRBIDEzLTEzNDU2LTMKK2Fsd2F5cyBcdTgzNEIgMTU2LTIKK2Fsd2F5cyBcdTgzNEMgMTIzNi01CithbHdheXMgXHU4MzREIDI0NS0yNDYtMgorYWx3YXlzIFx1ODM0RSAxMi0xNTYtMgorYWx3YXlzIFx1ODM0RiAxMjQ1LTEzNi00CithbHdheXMgXHU4MzUwIDEzLTIzNDUtNQorYWx3YXlzIFx1ODM1MSAxNi0yCithbHdheXMgXHU4MzUyIDEyMzUtNDU2LTMKK2Fsd2F5cyBcdTgzNTMgMTIzNC0xMzQ1Ni0yCithbHdheXMgXHU4MzU0IDE0LTE2LTUKK2Fsd2F5cyBcdTgzNTUgMTMtMTQ1Ni0zCithbHdheXMgXHU4MzU2IDE0LTE0Ni00CithbHdheXMgXHU4MzU3IDI0LTM0LTUKK2Fsd2F5cyBcdTgzNTggMS00NTYtMworYWx3YXlzIFx1ODM1OSAxNDUtMzQ1LTIKK2Fsd2F5cyBcdTgzNUEgMTMtMjM0NTYtMgorYWx3YXlzIFx1ODM1QiAxMjQ1LTE0Ni0yCithbHdheXMgXHU4MzVDIDEzNS0xNi01CithbHdheXMgXHU4MzVEIDEyNS0yMzQ2LTIKK2Fsd2F5cyBcdTgzNUUgMjQ1LTI0Ni0yCithbHdheXMgXHU4MzVGIDEyMzUtMTI0Ni01CithbHdheXMgXHU4MzYwIDEzLTE2LTUKK2Fsd2F5cyBcdTgzNjEgMTQ1LTEzNDYtNQorYWx3YXlzIFx1ODM2MiAxMjU2LTIKK2Fsd2F5cyBcdTgzNjMgMTI0NS0xMjM0Ni0yCithbHdheXMgXHU4MzY0IDEyMzUtMTIzNDU2LTMKK2Fsd2F5cyBcdTgzNjUgMTM0NTYtMgorYWx3YXlzIFx1ODM2NiAxNC0yNS01CithbHdheXMgXHU4MzY3IDEzNDU2LTIKK2Fsd2F5cyBcdTgzNjggMjQ1LTIzNDUtMgorYWx3YXlzIFx1ODM2OSAxMy0xNDU2LTUKK2Fsd2F5cyBcdTgzNkEgMTUtMTIzNDU2LTMKK2Fsd2F5cyBcdTgzNkIgMTQ1Ni01CithbHdheXMgXHU4MzZDIDEzNC0yNDU2LTQKK2Fsd2F5cyBcdTgzNkQgMTIzNS0xMjM0Ni0yCithbHdheXMgXHU4MzZFIDEtMTIzNTYtNQorYWx3YXlzIFx1ODM2RiAyNDYtNQorYWx3YXlzIFx1ODM3MCAxNDUtMzQtNQorYWx3YXlzIFx1ODM3MSAxMjQ2LTQKK2Fsd2F5cyBcdTgzNzIgMTItMzQtNQorYWx3YXlzIFx1ODM3MyAxNDUtMTIzNTYtNQorYWx3YXlzIFx1ODM3NCAxMjM0NS0zNC0zCithbHdheXMgXHU4Mzc1IDEyNDUtMTM2LTQKK2Fsd2F5cyBcdTgzNzYgMTQ1Ni0yCithbHdheXMgXHU4Mzc3IDEyMzUtMjM0Ni0yCithbHdheXMgXHU4Mzc4IDEzNS0xNi0yCithbHdheXMgXHU4Mzc5IDEzNS0zNC01CithbHdheXMgXHU4MzdBIDI1Ni00CithbHdheXMgXHU4MzdCIDE0NS0xNi0yCithbHdheXMgXHU4MzdDIDEyNC0zNC0yCithbHdheXMgXHU4MzdEIDE1LTEyNDYtMworYWx3YXlzIFx1ODM3RSAxNS0xMjQ2LTMKK2Fsd2F5cyBcdTgzN0YgMTItMTM1Ni0yCithbHdheXMgXHU4MzgwIDEyLTEzNi0yCithbHdheXMgXHU4MzgxIDM0LTIKK2Fsd2F5cyBcdTgzODIgMTM1LTM0Ni0yCithbHdheXMgXHU4MzgzIDE1LTE2LTMKK2Fsd2F5cyBcdTgzODQgMTMtMTM1Ni00CithbHdheXMgXHU4Mzg1IDE0LTE2LTUKK2Fsd2F5cyBcdTgzODYgMTIzNC0zNC0yCithbHdheXMgXHU4Mzg3IDEtMzQtNQorYWx3YXlzIFx1ODM4OCAxMzQtMTI2LTUKK2Fsd2F5cyBcdTgzODkgMTQtMTYtNQorYWx3YXlzIFx1ODM4QSAxLTQ1Ni0zCithbHdheXMgXHU4MzhCIDEyNS0yNS0yCithbHdheXMgXHU4MzhDIDE0NS0yNS0yCithbHdheXMgXHU4MzhEIDI0NS0yMzQtMgorYWx3YXlzIFx1ODM4RSAyNC0zNDUtMworYWx3YXlzIFx1ODM4RiAxNS0yNS0zCithbHdheXMgXHU4MzkwIDEyLTEzNi0yCithbHdheXMgXHU4MzkxIDEyMzQ1LTEzNTYtMworYWx3YXlzIFx1ODM5MiAxMy0xMjU2LTQKK2Fsd2F5cyBcdTgzOTMgMTM0LTM1Ni0yCithbHdheXMgXHU4Mzk0IDEzNC0xMzU2LTIKK2Fsd2F5cyBcdTgzOTUgMTUtMTM0NTYtNQorYWx3YXlzIFx1ODM5NiAxMy0xMzQ1Ni0zCithbHdheXMgXHU4Mzk3IDEyLTIzNDYtMworYWx3YXlzIFx1ODM5OCAyNC0xMzYtMworYWx3YXlzIFx1ODM5OSAxMy0yNTYtMworYWx3YXlzIFx1ODM5QSAyMzQ1LTIKK2Fsd2F5cyBcdTgzOUIgMTI0LTEzNDU2LTIKK2Fsd2F5cyBcdTgzOUMgMTQ1LTI0Ni01CithbHdheXMgXHU4MzlEIDI0NS0yNS01CithbHdheXMgXHU4MzlFIDEyNDU2LTQKK2Fsd2F5cyBcdTgzOUYgMTIzNS0xMjM2LTUKK2Fsd2F5cyBcdTgzQTAgMjM0LTQKK2Fsd2F5cyBcdTgzQTEgMjQ1LTI1LTUKK2Fsd2F5cyBcdTgzQTIgMTMtMjM0NTYtMgorYWx3YXlzIFx1ODNBMyA0NTYtMgorYWx3YXlzIFx1ODNBNCAxNS0zNC01CithbHdheXMgXHU4M0E1IDEzNDUtMjM0LTQKK2Fsd2F5cyBcdTgzQTYgMjQtMTQ2LTMKK2Fsd2F5cyBcdTgzQTcgMTUtMjM0NS01CithbHdheXMgXHU4M0E4IDE0LTEzNDYtNQorYWx3YXlzIFx1ODNBOSAxMjM0LTI0Ni00CithbHdheXMgXHU4M0FBIDIzNDYtMgorYWx3YXlzIFx1ODNBQiAxMzQtMTI2LTUKK2Fsd2F5cyBcdTgzQUMgMTIzNDU2LTUKK2Fsd2F5cyBcdTgzQUQgMTMtMzQ2LTIKK2Fsd2F5cyBcdTgzQUUgMTM0NS0xMjM2LTIKK2Fsd2F5cyBcdTgzQUYgMTM0LTM0LTUKK2Fsd2F5cyBcdTgzQjAgMTIzLTEyMzYtNAorYWx3YXlzIFx1ODNCMSAxNC0yNDU2LTIKK2Fsd2F5cyBcdTgzQjIgMTQtMjM0NS0yCithbHdheXMgXHU4M0IzIDI0LTE1Ni0yCithbHdheXMgXHU4M0I0IDI1LTMKK2Fsd2F5cyBcdTgzQjUgMTI0LTM0LTUKK2Fsd2F5cyBcdTgzQjYgMTUtMjM0NS0zCithbHdheXMgXHU4M0I3IDEyMzUtMjUtNQorYWx3YXlzIFx1ODNCOCAyMzQtMgorYWx3YXlzIFx1ODNCOSAxMzQ1Ni0yCithbHdheXMgXHU4M0JBIDEzNDU2LTMKK2Fsd2F5cyBcdTgzQkIgMTIzNTYtMworYWx3YXlzIFx1ODNCQyAxMi0xMjM0NTYtMgorYWx3YXlzIFx1ODNCRCAxMzQtMTM0Ni00CithbHdheXMgXHU4M0JFIDEzNC0xMzQ2LTQKK2Fsd2F5cyBcdTgzQkYgMjQ1LTE1Ni01CithbHdheXMgXHU4M0MwIDEyNDU2LTQKK2Fsd2F5cyBcdTgzQzEgMTMtMTM0NTYtMworYWx3YXlzIFx1ODNDMiAxNDUtMTYtMworYWx3YXlzIFx1ODNDMyAyNDUtMTI1Ni0yCithbHdheXMgXHU4M0M0IDE0NS0xMjM0Ni0zCithbHdheXMgXHU4M0M1IDEzLTIzNDUtMworYWx3YXlzIFx1ODNDNiAxMjUtMTIzNTYtMworYWx3YXlzIFx1ODNDNyAxMy0zNC0zCithbHdheXMgXHU4M0M4IDE0LTM0NS0zCithbHdheXMgXHU4M0M5IDE0LTM0LTUKK2Fsd2F5cyBcdTgzQ0EgMTMtMTI1Ni0yCithbHdheXMgXHU4M0NCIDEyNDYtNQorYWx3YXlzIFx1ODNDQyAxMy0yNTYtNQorYWx3YXlzIFx1ODNDRCAxMzQ1LTM0Ni01CithbHdheXMgXHU4M0NFIDEyMy0xMjM0NTYtMworYWx3YXlzIFx1ODNDRiAxMjM1LTIzNDYtMgorYWx3YXlzIFx1ODNEMCAxMjM0LTM0LTIKK2Fsd2F5cyBcdTgzRDEgMTI1LTE1Ni0zCithbHdheXMgXHU4M0QyIDEzLTE0Ni00CithbHdheXMgXHU4M0QzIDEzLTI1LTQKK2Fsd2F5cyBcdTgzRDQgMTIzNDUtMzQtMgorYWx3YXlzIFx1ODNENSAxNC0xMjM0NTYtMgorYWx3YXlzIFx1ODNENiAxMi0xMzQ2LTMKK2Fsd2F5cyBcdTgzRDcgMTItMTIzNTYtMgorYWx3YXlzIFx1ODNEOCAxNS0xMjM0Ni0zCithbHdheXMgXHU4M0Q5IDEyLTEyNDYtMgorYWx3YXlzIFx1ODNEQSAxLTEyMzYtNQorYWx3YXlzIFx1ODNEQiAxMzQtMTM2LTIKK2Fsd2F5cyBcdTgzREMgMjQ1LTI0NTYtNQorYWx3YXlzIFx1ODNERCAxMzUtMzQ1LTIKK2Fsd2F5cyBcdTgzREUgMTQtMTYtMgorYWx3YXlzIFx1ODNERiAxMjQtMzQtNQorYWx3YXlzIFx1ODNFMCAxMzUtMTI2LTMKK2Fsd2F5cyBcdTgzRTEgMTIzNS0xMjM2LTUKK2Fsd2F5cyBcdTgzRTIgMTM1LTE0Ni01CithbHdheXMgXHU4M0UzIDI0NS0xNDU2LTUKK2Fsd2F5cyBcdTgzRTQgMTMtNDUtNAorYWx3YXlzIFx1ODNFNSAxNS0xNi0zCithbHdheXMgXHU4M0U2IDI0NS0xNDU2LTIKK2Fsd2F5cyBcdTgzRTcgMTQ1LTE2LTQKK2Fsd2F5cyBcdTgzRTggMTMtMzQ2LTMKK2Fsd2F5cyBcdTgzRTkgMTIzNC0zNC0yCithbHdheXMgXHU4M0VBIDE0NS0xMzQ2LTUKK2Fsd2F5cyBcdTgzRUIgMTMtMTQ1Ni00CithbHdheXMgXHU4M0VDIDEtMTQ2LTQKK2Fsd2F5cyBcdTgzRUQgMTI0LTI0NTYtMgorYWx3YXlzIFx1ODNFRSAxMy0xMzU2LTMKK2Fsd2F5cyBcdTgzRUYgMTIzNS0zNS0yCithbHdheXMgXHU4M0YwIDEzLTM0LTMKK2Fsd2F5cyBcdTgzRjEgMTQtMTM0NTYtMgorYWx3YXlzIFx1ODNGMiAxMjM0NS0zNTYtMworYWx3YXlzIFx1ODNGMyAxMy0xNDU2LTMKK2Fsd2F5cyBcdTgzRjQgMTIzNi0zCithbHdheXMgXHU4M0Y1IDQ1Ni00CithbHdheXMgXHU4M0Y2IDEzNS0xMzU2LTQKK2Fsd2F5cyBcdTgzRjcgMS0xMjM1Ni00CithbHdheXMgXHU4M0Y4IDIzNDUtMworYWx3YXlzIFx1ODNGOSAxMy0xMjU2LTMKK2Fsd2F5cyBcdTgzRkEgMTMtMjM0NS0zCithbHdheXMgXHU4M0ZCIDE0LTE0NTYtNAorYWx3YXlzIFx1ODNGQyAxMjQtMTIzNi00CithbHdheXMgXHU4M0ZEIDI0LTM0LTMKK2Fsd2F5cyBcdTgzRkUgMTI0LTIzNDUtMgorYWx3YXlzIFx1ODNGRiAxNDUtMTQ2LTUKK2Fsd2F5cyBcdTg0MDAgMTIzNS0zNC00CithbHdheXMgXHU4NDAxIDI0NS0xNi0yCithbHdheXMgXHU4NDAyIDEyMzUtMjM0Ni0yCithbHdheXMgXHU4NDAzIDI0NS0xMjQ2LTUKK2Fsd2F5cyBcdTg0MDQgMTI0LTE0Ni0yCithbHdheXMgXHU4NDA1IDEyLTEyMzQ1Ni0zCithbHdheXMgXHU4NDA2IDEzNS0xNi01CithbHdheXMgXHU4NDA3IDEyLTEzNDYtMgorYWx3YXlzIFx1ODQwOCAxMjM1LTEyNDU2LTIKK2Fsd2F5cyBcdTg0MDkgMTIzNDUtMzU2LTUKK2Fsd2F5cyBcdTg0MEEgMTQtMjQ1Ni0yCithbHdheXMgXHU4NDBCIDI0NS0xNi0zCithbHdheXMgXHU4NDBDIDEzNC0xMzU2LTIKK2Fsd2F5cyBcdTg0MEQgMTIzNC0xMzQ1Ni0yCithbHdheXMgXHU4NDBFIDEyNDYtMworYWx3YXlzIFx1ODQwRiAxNDUtMTIzNi01CithbHdheXMgXHU4NDEwIDI0LTM0NS01CithbHdheXMgXHU4NDExIDEyMzUtMTI0NTYtMgorYWx3YXlzIFx1ODQxMiAyMzQ1LTQKK2Fsd2F5cyBcdTg0MTMgMTYtMgorYWx3YXlzIFx1ODQxNCAxMjQtMjQ2LTIKK2Fsd2F5cyBcdTg0MTUgMjQ1LTE2LTIKK2Fsd2F5cyBcdTg0MTYgMTI0NTYtNAorYWx3YXlzIFx1ODQxNyAyNDUtMjM0Ni01CithbHdheXMgXHU4NDE4IDEzNDUtMjQ1Ni01CithbHdheXMgXHU4NDE5IDEtMTM2LTQKK2Fsd2F5cyBcdTg0MUEgMTI0LTI1LTUKK2Fsd2F5cyBcdTg0MUIgMTMtMjM0LTMKK2Fsd2F5cyBcdTg0MUMgMTI0LTM0Ni0zCithbHdheXMgXHU4NDFEIDE0LTI1LTIKK2Fsd2F5cyBcdTg0MUUgMTQ1LTE2LTUKK2Fsd2F5cyBcdTg0MUYgMTYtNQorYWx3YXlzIFx1ODQyMCAxMzQtMTM1Ni0yCithbHdheXMgXHU4NDIxIDEzNS0xMjYtNAorYWx3YXlzIFx1ODQyMiAxMjM0LTE0Ni01CithbHdheXMgXHU4NDIzIDE0NS0xMzQ1Ni01CithbHdheXMgXHU4NDI0IDEzNDU2LTIKK2Fsd2F5cyBcdTg0MjUgMTM0NTYtMgorYWx3YXlzIFx1ODQyNiAxMzQ1Ni0yCithbHdheXMgXHU4NDI3IDE1LTI0Ni0zCithbHdheXMgXHU4NDI4IDE1LTM0NS01CithbHdheXMgXHU4NDI5IDI0NS0yMzQtMworYWx3YXlzIFx1ODQyQSAxMjMtMjM0Ni0zCithbHdheXMgXHU4NDJCIDE1LTQ2LTUKK2Fsd2F5cyBcdTg0MkMgMTI0NTYtNQorYWx3YXlzIFx1ODQyRCAxMjU2LTQKK2Fsd2F5cyBcdTg0MkUgMTI1Ni0yCithbHdheXMgXHU4NDJGIDEyMzQ1LTM0LTUKK2Fsd2F5cyBcdTg0MzAgMTQtMjM0NS01CithbHdheXMgXHU4NDMxIDE1LTQ1LTMKK2Fsd2F5cyBcdTg0MzIgMTUtNDUtMworYWx3YXlzIFx1ODQzMyAxMzQ1LTEyMzYtMgorYWx3YXlzIFx1ODQzNCAxMjUtMjM0Ni0yCithbHdheXMgXHU4NDM1IDI1LTMKK2Fsd2F5cyBcdTg0MzYgMTItMTIzNDU2LTMKK2Fsd2F5cyBcdTg0MzcgMTUtMjQ2LTMKK2Fsd2F5cyBcdTg0MzggMTI1Ni0yCithbHdheXMgXHU4NDM5IDEzNS0yMzQ1LTMKK2Fsd2F5cyBcdTg0M0EgMTM0LTE0Ni01CithbHdheXMgXHU4NDNCIDEyMzYtMworYWx3YXlzIFx1ODQzQyAyMzQ2LTUKK2Fsd2F5cyBcdTg0M0QgMTQtMjUtNQorYWx3YXlzIFx1ODQzRSAxMzQ1Ni0yCithbHdheXMgXHU4NDNGIDEyMy0yNS01CithbHdheXMgXHU4NDQwIDEzLTM1LTMKK2Fsd2F5cyBcdTg0NDEgMTMtNDYtMworYWx3YXlzIFx1ODQ0MiAxMzQtMjM0NS00CithbHdheXMgXHU4NDQzIDEyNS0yNS01CithbHdheXMgXHU4NDQ0IDEyNS0yNS01CithbHdheXMgXHU4NDQ1IDEzLTEyNTYtMworYWx3YXlzIFx1ODQ0NiAxMzUtMTQ2LTQKK2Fsd2F5cyBcdTg0NDcgMTI0NS0xMjM1Ni0yCithbHdheXMgXHU4NDQ4IDE1LTE2LTQKK2Fsd2F5cyBcdTg0NDkgMzQ2LTUKK2Fsd2F5cyBcdTg0NEEgMTIzNi0zCithbHdheXMgXHU4NDRCIDI0NS0xMjU2LTIKK2Fsd2F5cyBcdTg0NEMgMTMtMjM0NS0zCithbHdheXMgXHU4NDREIDEyMzQ1LTM0LTIKK2Fsd2F5cyBcdTg0NEUgMTQtMTI1Ni01CithbHdheXMgXHU4NDRGIDEzLTEzNDU2LTMKK2Fsd2F5cyBcdTg0NTAgMTIzNC0xMzYtMgorYWx3YXlzIFx1ODQ1MSAxMjM0NS0xMzU2LTMKK2Fsd2F5cyBcdTg0NTIgMTIzNS0xMjM0Ni0yCithbHdheXMgXHU4NDUzIDEyMzUtMTIzNDYtMgorYWx3YXlzIFx1ODQ1NCAxMjM1LTEyMzU2LTIKK2Fsd2F5cyBcdTg0NTUgMjM0NS0yCithbHdheXMgXHU4NDU2IDEyNC0zNC0yCithbHdheXMgXHU4NDU3IDEtMjM0Ni0xCithbHdheXMgXHU4NDU4IDEyNS0xNTYtMworYWx3YXlzIFx1ODQ1OSAxNS00Ni0zCithbHdheXMgXHU4NDVBIDI0LTEzNi01CithbHdheXMgXHU4NDVCIDEzLTIzNDYtNAorYWx3YXlzIFx1ODQ1QyAyNDUtMjM0NTYtMworYWx3YXlzIFx1ODQ1RCAyNDUtMTM0NTYtMgorYWx3YXlzIFx1ODQ1RSAxMzQtMTYtNAorYWx3YXlzIFx1ODQ1RiAxMjM1LTQ1Ni0yCithbHdheXMgXHU4NDYwIDI0LTEzNi0zCithbHdheXMgXHU4NDYxIDEyMzQtMzQtMgorYWx3YXlzIFx1ODQ2MiAxMy0yNDU2LTUKK2Fsd2F5cyBcdTg0NjMgMTQ1LTEyMzQ2LTQKK2Fsd2F5cyBcdTg0NjQgMS0xMjM1Ni01CithbHdheXMgXHU4NDY1IDI0NS0yMzQ1LTIKK2Fsd2F5cyBcdTg0NjYgMTI0Ni00CithbHdheXMgXHU4NDY3IDEzNS0xMjYtMgorYWx3YXlzIFx1ODQ2OCAxMjQ2LTMKK2Fsd2F5cyBcdTg0NjkgMTIzNC0zNDUtMworYWx3YXlzIFx1ODQ2QSAxMy0xNi01CithbHdheXMgXHU4NDZCIDEyMzUtMzQtMgorYWx3YXlzIFx1ODQ2QyAxMjUtMTM0Ni01CithbHdheXMgXHU4NDZEIDEzLTIzNDU2LTMKK2Fsd2F5cyBcdTg0NkUgMTQ1LTEyNDU2LTUKK2Fsd2F5cyBcdTg0NkYgMjQ2LTUKK2Fsd2F5cyBcdTg0NzAgMTUtMTI0Ni0zCithbHdheXMgXHU4NDcxIDI0NS0xMjM0Ni0zCithbHdheXMgXHU4NDcyIDI0NS00NS0yCithbHdheXMgXHU4NDczIDEyNDYtMworYWx3YXlzIFx1ODQ3NCAxLTEzNi0zCithbHdheXMgXHU4NDc1IDEyMy0xMjQ2LTIKK2Fsd2F5cyBcdTg0NzYgMTI0LTEzNDU2LTIKK2Fsd2F5cyBcdTg0NzcgMTIzNS0xMjM0NTYtMworYWx3YXlzIFx1ODQ3OCAxNS0xNi00CithbHdheXMgXHU4NDc5IDI0LTE1Ni0zCithbHdheXMgXHU4NDdBIDI0NS0xNi01CithbHdheXMgXHU4NDdCIDE0LTEyMzYtMgorYWx3YXlzIFx1ODQ3QyAxMjUtMTIzNDYtMworYWx3YXlzIFx1ODQ3RCAyNDYtMworYWx3YXlzIFx1ODQ3RSA0NS0zCithbHdheXMgXHU4NDdGIDEzNC0zNTYtMgorYWx3YXlzIFx1ODQ4MCAyNTYtMworYWx3YXlzIFx1ODQ4MSAyNC0zNC01CithbHdheXMgXHU4NDgyIDE0NS0xNi01CithbHdheXMgXHU4NDgzIDEtMTI0NTYtNQorYWx3YXlzIFx1ODQ4NCAxMy0xMjQ1Ni0zCithbHdheXMgXHU4NDg1IDEyNDUtMTIzNi00CithbHdheXMgXHU4NDg2IDE1LTIzNi0zCithbHdheXMgXHU4NDg3IDEyLTEyMzYtNAorYWx3YXlzIFx1ODQ4OCAxMjMtMjQ1Ni00CithbHdheXMgXHU4NDg5IDEyMy0xMjQ2LTUKK2Fsd2F5cyBcdTg0OEEgMTIzNS0zNS0zCithbHdheXMgXHU4NDhCIDEzLTQ2LTQKK2Fsd2F5cyBcdTg0OEMgMTQtMTIzNTYtMgorYWx3YXlzIFx1ODQ4RCAxMjQ2LTQKK2Fsd2F5cyBcdTg0OEUgMTI0LTI0NTYtNQorYWx3YXlzIFx1ODQ4RiAyMzQtNAorYWx3YXlzIFx1ODQ5MCAxNS0xMjM1Ni0zCithbHdheXMgXHU4NDkxIDE0NTYtMworYWx3YXlzIFx1ODQ5MiAyNC0xNTYtMworYWx3YXlzIFx1ODQ5MyAxMi0xMjM0NTYtMgorYWx3YXlzIFx1ODQ5NCAyNC0xNTYtMgorYWx3YXlzIFx1ODQ5NSAyNTYtMworYWx3YXlzIFx1ODQ5NiAxLTEzNi0zCithbHdheXMgXHU4NDk3IDE0LTEzNDYtNQorYWx3YXlzIFx1ODQ5OCAxMjQ1LTM0LTIKK2Fsd2F5cyBcdTg0OTkgMTM0LTEzNTYtMgorYWx3YXlzIFx1ODQ5QSAxMjM1LTIzNDYtMgorYWx3YXlzIFx1ODQ5QiAyNDUtMjM2LTMKK2Fsd2F5cyBcdTg0OUMgMTUtMTI0NTYtNQorYWx3YXlzIFx1ODQ5RCA0NS0yCithbHdheXMgXHU4NDlFIDE0LTE2LTUKK2Fsd2F5cyBcdTg0OUYgMTMtMTI1Ni00CithbHdheXMgXHU4NEEwIDE1LTE2LTIKK2Fsd2F5cyBcdTg0QTEgMTM1LTEzNDYtNQorYWx3YXlzIFx1ODRBMiAxMi0zNC0yCithbHdheXMgXHU4NEEzIDE1LTEyNTYtMgorYWx3YXlzIFx1ODRBNCAxMjQtMzQtMgorYWx3YXlzIFx1ODRBNSAxNC0yMzQtMgorYWx3YXlzIFx1ODRBNiAyNS01CithbHdheXMgXHU4NEE3IDEtMTM2LTMKK2Fsd2F5cyBcdTg0QTggMjQ1LTIzNDUtNQorYWx3YXlzIFx1ODRBOSAxMjUtMzQtMworYWx3YXlzIFx1ODRBQSAxMjM0LTEyNi01CithbHdheXMgXHU4NEFCIDI0NS0yNS0zCithbHdheXMgXHU4NEFDIDQ1LTMKK2Fsd2F5cyBcdTg0QUQgMTItMzQtMgorYWx3YXlzIFx1ODRBRSAxMjU2LTUKK2Fsd2F5cyBcdTg0QUYgMTIzLTIzNTYtNAorYWx3YXlzIFx1ODRCMCAxMjM0LTEyMzYtMgorYWx3YXlzIFx1ODRCMSAxMjM0LTM0LTIKK2Fsd2F5cyBcdTg0QjIgMTIzNC0zNC0yCithbHdheXMgXHU4NEIzIDEzNDUtMzQ1LTUKK2Fsd2F5cyBcdTg0QjQgMjQtMjUtNQorYWx3YXlzIFx1ODRCNSAxNS0xNi0zCithbHdheXMgXHU4NEI2IDEyMzQ1LTEzNi0yCithbHdheXMgXHU4NEI3IDI1Ni0yCithbHdheXMgXHU4NEI4IDEtMTM1Ni0zCithbHdheXMgXHU4NEI5IDEzLTIzNDUtMworYWx3YXlzIFx1ODRCQSAxMy0xNi0yCithbHdheXMgXHU4NEJCIDEyNDUtMjUtNQorYWx3YXlzIFx1ODRCQyAyNDUtMTM0Ni0zCithbHdheXMgXHU4NEJEIDEzNi0zCithbHdheXMgXHU4NEJFIDEzNC0xNi0yCithbHdheXMgXHU4NEJGIDEyMzUtMTQ2LTMKK2Fsd2F5cyBcdTg0QzAgMTUtMTIzNDU2LTMKK2Fsd2F5cyBcdTg0QzEgMS0xMzYtMworYWx3YXlzIFx1ODRDMiAxMzQtMTM0NTYtMgorYWx3YXlzIFx1ODRDMyAxMjM1LTI1LTUKK2Fsd2F5cyBcdTg0QzQgMTUtMTI1Ni01CithbHdheXMgXHU4NEM1IDE0LTIzNC0yCithbHdheXMgXHU4NEM2IDE1LTE2LTIKK2Fsd2F5cyBcdTg0QzcgMTMtMzQtNAorYWx3YXlzIFx1ODRDOCAxNC0xMzQ2LTIKK2Fsd2F5cyBcdTg0QzkgMTI0NS0xMjM0Ni0yCithbHdheXMgXHU4NENBIDEyMzQ2LTQKK2Fsd2F5cyBcdTg0Q0IgMTMtMjQ1Ni01CithbHdheXMgXHU4NENDIDI0NS0yNS01CithbHdheXMgXHU4NENEIDI0LTE1Ni0zCithbHdheXMgXHU4NENFIDEyNC0xMzQ2LTIKK2Fsd2F5cyBcdTg0Q0YgMTQtMjUtNAorYWx3YXlzIFx1ODREMCAxMjQ1LTM0LTUKK2Fsd2F5cyBcdTg0RDEgMTUtMjUtMworYWx3YXlzIFx1ODREMiAxNS0yMzQ1LTMKK2Fsd2F5cyBcdTg0RDMgMTM1LTM1Ni01CithbHdheXMgXHU4NEQ0IDI0Ni00CithbHdheXMgXHU4NEQ1IDEzLTEyNDYtNQorYWx3YXlzIFx1ODRENiAxMzUtMTYtNQorYWx3YXlzIFx1ODRENyAxMjUtMTIzNDYtNAorYWx3YXlzIFx1ODREOCAxMy0xMjM0NTYtNAorYWx3YXlzIFx1ODREOSAxMjUtMjUtNQorYWx3YXlzIFx1ODREQSAxNS0yMzQtMworYWx3YXlzIFx1ODREQiAyNDUtMjM0Ni01CithbHdheXMgXHU4NERDIDEyMzQtMzU2LTUKK2Fsd2F5cyBcdTg0REQgMTQtMTIzNi0yCithbHdheXMgXHU4NERFIDE0NS0xMjM2LTUKK2Fsd2F5cyBcdTg0REYgMTMtMTYtNQorYWx3YXlzIFx1ODRFMCAxNC0xNi0yCithbHdheXMgXHU4NEUxIDI0LTEzNi0zCithbHdheXMgXHU4NEUyIDE0LTEzNDYtMgorYWx3YXlzIFx1ODRFMyAxMjU2LTUKK2Fsd2F5cyBcdTg0RTQgMTQtMTM0NTYtMgorYWx3YXlzIFx1ODRFNSAxMzQ1Ni0yCithbHdheXMgXHU4NEU2IDEzNC0xMjYtNQorYWx3YXlzIFx1ODRFNyAxNDUtMjQ2LTUKK2Fsd2F5cyBcdTg0RTggMTI0LTI0Ni0zCithbHdheXMgXHU4NEU5IDEzNC0xNDYtNQorYWx3YXlzIFx1ODRFQSAxMjQtMTIzNDYtMworYWx3YXlzIFx1ODRFQiAxLTM0LTIKK2Fsd2F5cyBcdTg0RUMgMTIzNC0xMzU2LTIKK2Fsd2F5cyBcdTg0RUQgMTIzNi0zCithbHdheXMgXHU4NEVFIDE0LTIzNDUtMgorYWx3YXlzIFx1ODRFRiAyNDUtMTIzNDYtMworYWx3YXlzIFx1ODRGMCAxNS0xNi00CithbHdheXMgXHU4NEYxIDEyMzQtMTM0NTYtMgorYWx3YXlzIFx1ODRGMiAxMjM1Ni0zCithbHdheXMgXHU4NEYzIDEzLTE0NTYtNQorYWx3YXlzIFx1ODRGNCAxMi0xMjM0NTYtMgorYWx3YXlzIFx1ODRGNSAxMy0zNDYtMgorYWx3YXlzIFx1ODRGNiAxMjQ2LTIKK2Fsd2F5cyBcdTg0RjcgMTI0LTEyNDYtMworYWx3YXlzIFx1ODRGOCAyNDUtMTQ2LTIKK2Fsd2F5cyBcdTg0RjkgMTI1Ni01CithbHdheXMgXHU4NEZBIDE2LTUKK2Fsd2F5cyBcdTg0RkIgMTMtMTYtMgorYWx3YXlzIFx1ODRGQyAxNC0yNDYtNAorYWx3YXlzIFx1ODRGRCAxMzUtMTYtNQorYWx3YXlzIFx1ODRGRSAxNC0zNC00CithbHdheXMgXHU4NEZGIDE1LTEyNTYtNAorYWx3YXlzIFx1ODUwMCAxMzUtMzQtNQorYWx3YXlzIFx1ODUwMSAxLTEzNDYtMworYWx3YXlzIFx1ODUwMiAxNC0zNTYtMgorYWx3YXlzIFx1ODUwMyAxMy00Ni01CithbHdheXMgXHU4NTA0IDEzNC0xMjM2LTUKK2Fsd2F5cyBcdTg1MDUgMjM0NS0yCithbHdheXMgXHU4NTA2IDE0LTEzNDU2LTIKK2Fsd2F5cyBcdTg1MDcgMTMtMTYtNQorYWx3YXlzIFx1ODUwOCAxMzUtMjQ2LTMKK2Fsd2F5cyBcdTg1MDkgMTMtMTIzNDU2LTQKK2Fsd2F5cyBcdTg1MEEgMTIzNS0xMjM2LTQKK2Fsd2F5cyBcdTg1MEIgMTQ1LTE2LTIKK2Fsd2F5cyBcdTg1MEMgMTUtMzQtNQorYWx3YXlzIFx1ODUwRCAxNC0zNC01CithbHdheXMgXHU4NTBFIDI0LTIzNDYtNQorYWx3YXlzIFx1ODUwRiAyNC0xMzQ2LTMKK2Fsd2F5cyBcdTg1MTAgMTQ1LTE2LTIKK2Fsd2F5cyBcdTg1MTEgMTM0LTM0Ni01CithbHdheXMgXHU4NTEyIDE1LTI1Ni0zCithbHdheXMgXHU4NTEzIDEzNC0xMjM2LTUKK2Fsd2F5cyBcdTg1MTQgMTM1LTEyNi0xCithbHdheXMgXHU4NTE1IDE0NS0xNi01CithbHdheXMgXHU4NTE2IDI0NS0yNS0yCithbHdheXMgXHU4NTE3IDEtMjM0Ni01CithbHdheXMgXHU4NTE4IDE1LTEzNi0zCithbHdheXMgXHU4NTE5IDE1LTQ1LTUKK2Fsd2F5cyBcdTg1MUEgMTI0Ni01CithbHdheXMgXHU4NTFCIDEyMzUtMzQtMgorYWx3YXlzIFx1ODUxQyAxNDYtMgorYWx3YXlzIFx1ODUxRCAxMzQtMTYtNAorYWx3YXlzIFx1ODUxRSAxNC0xMjM1Ni0yCithbHdheXMgXHU4NTFGIDI0NS0zNC01CithbHdheXMgXHU4NTIwIDEtMTIzNDYtMworYWx3YXlzIFx1ODUyMSAyNDUtMjQ1Ni01CithbHdheXMgXHU4NTIyIDEyMzQtMTI2LTIKK2Fsd2F5cyBcdTg1MjMgMTMtNDYtNAorYWx3YXlzIFx1ODUyNCAxMzQtMTYtNQorYWx3YXlzIFx1ODUyNSAyNDUtMTIzNDYtMworYWx3YXlzIFx1ODUyNiAxMzQ1LTI0Ni00CithbHdheXMgXHU4NTI3IDEyMzUtMTI0Ni01CithbHdheXMgXHU4NTI4IDEzLTI1Ni01CithbHdheXMgXHU4NTI5IDE0NTYtMgorYWx3YXlzIFx1ODUyQSAxMy0yMzQ1LTMKK2Fsd2F5cyBcdTg1MkIgMjM0NS0zCithbHdheXMgXHU4NTJDIDI0LTM0LTMKK2Fsd2F5cyBcdTg1MkQgMTQ1Ni01CithbHdheXMgXHU4NTJFIDEzLTI1LTIKK2Fsd2F5cyBcdTg1MkYgMTItMTM2LTIKK2Fsd2F5cyBcdTg1MzAgMTIzNS0zNC01CithbHdheXMgXHU4NTMxIDI0LTM0NS0zCithbHdheXMgXHU4NTMyIDEyMy0xMjM1Ni01CithbHdheXMgXHU4NTMzIDI0NS0yMzQ1LTUKK2Fsd2F5cyBcdTg1MzQgMTM0LTM0NS0yCithbHdheXMgXHU4NTM1IDI0NS0xMzQ2LTIKK2Fsd2F5cyBcdTg1MzYgMTI1LTIzNDYtMgorYWx3YXlzIFx1ODUzNyAyNDUtNDYtMgorYWx3YXlzIFx1ODUzOCAxNDUtMTIzNTYtMworYWx3YXlzIFx1ODUzOSAxNC0yMzQ1LTQKK2Fsd2F5cyBcdTg1M0EgMTQtMTQ1Ni01CithbHdheXMgXHU4NTNCIDEyMy0xMjM1Ni01CithbHdheXMgXHU4NTNDIDI0NTYtNAorYWx3YXlzIFx1ODUzRCAxMzUtMTYtNQorYWx3YXlzIFx1ODUzRSAxNC0xNi0yCithbHdheXMgXHU4NTNGIDEyNDYtMgorYWx3YXlzIFx1ODU0MCAxMy0xNi0yCithbHdheXMgXHU4NTQxIDI0NS0yMzQ1LTIKK2Fsd2F5cyBcdTg1NDIgMjQtMTM1Ni01CithbHdheXMgXHU4NTQzIDEyMzQ1LTEyMzYtMworYWx3YXlzIFx1ODU0NCAxMzQtMTM1Ni0yCithbHdheXMgXHU4NTQ1IDEyMzU2LTQKK2Fsd2F5cyBcdTg1NDYgMTItMTIzNi00CithbHdheXMgXHU4NTQ3IDE0NS0yMzQ1LTQKK2Fsd2F5cyBcdTg1NDggMTUtMjU2LTUKK2Fsd2F5cyBcdTg1NDkgMTMtMjQ2LTMKK2Fsd2F5cyBcdTg1NEEgMTI0NS0xMjQ2LTQKK2Fsd2F5cyBcdTg1NEIgMTI0NS0xMjQ2LTQKK2Fsd2F5cyBcdTg1NEMgMTQtMzU2LTQKK2Fsd2F5cyBcdTg1NEQgMTI1Ni0yCithbHdheXMgXHU4NTRFIDI0NS0yNDYtMgorYWx3YXlzIFx1ODU0RiAxMi0zNC0yCithbHdheXMgXHU4NTUwIDEyMzUtMzUtMgorYWx3YXlzIFx1ODU1MSAxMy0yMzQ1LTMKK2Fsd2F5cyBcdTg1NTIgMTM0LTI0NTYtNAorYWx3YXlzIFx1ODU1MyAyNTYtMgorYWx3YXlzIFx1ODU1NCAxMzUtMTQ2LTMKK2Fsd2F5cyBcdTg1NTUgMjM0LTIKK2Fsd2F5cyBcdTg1NTYgMjQ1LTEyNTYtMgorYWx3YXlzIFx1ODU1NyAxNC0zNC01CithbHdheXMgXHU4NTU4IDEyNDUtMTQ2LTIKK2Fsd2F5cyBcdTg1NTkgMTIzNS0xMjQ2LTUKK2Fsd2F5cyBcdTg1NUEgMjM0Ni01CithbHdheXMgXHU4NTVCIDEyNC0xNi0yCithbHdheXMgXHU4NTVDIDEyMzQ1LTM1Ni00CithbHdheXMgXHU4NTVEIDEzLTIzNi0yCithbHdheXMgXHU4NTVFIDEyNS0xMjQ2LTUKK2Fsd2F5cyBcdTg1NUYgMTIzNDUtMzQ1LTUKK2Fsd2F5cyBcdTg1NjAgMTM0NS0zNC0yCithbHdheXMgXHU4NTYxIDEyMzQ1LTEzNi0yCithbHdheXMgXHU4NTYyIDEyMy0xMjQ2LTUKK2Fsd2F5cyBcdTg1NjMgMjQtMTIzNDU2LTUKK2Fsd2F5cyBcdTg1NjQgMTI0NS0xMjQ2LTIKK2Fsd2F5cyBcdTg1NjUgMjM0NTYtNAorYWx3YXlzIFx1ODU2NiAxNS0xMjU2LTMKK2Fsd2F5cyBcdTg1NjcgMTIzNDUtMzQtNQorYWx3YXlzIFx1ODU2OCAxMy0yMzYtMgorYWx3YXlzIFx1ODU2OSAxNDUtMTM0Ni01CithbHdheXMgXHU4NTZBIDM0LTIKK2Fsd2F5cyBcdTg1NkIgMTQ1LTEyMzQ2LTQKK2Fsd2F5cyBcdTg1NkMgMTUtMTU2LTMKK2Fsd2F5cyBcdTg1NkQgMTUtMjQ2LTMKK2Fsd2F5cyBcdTg1NkUgMTUtMTYtNQorYWx3YXlzIFx1ODU2RiAxNS0zNDUtNQorYWx3YXlzIFx1ODU3MCAyNTYtNQorYWx3YXlzIFx1ODU3MSAyNC0xNDYtMworYWx3YXlzIFx1ODU3MiAyNDUtMTYtMgorYWx3YXlzIFx1ODU3MyAxMy0yMzQ1LTMKK2Fsd2F5cyBcdTg1NzQgMjU2LTUKK2Fsd2F5cyBcdTg1NzUgMTUtMTIzNDU2LTMKK2Fsd2F5cyBcdTg1NzYgMTQtMTM0NTYtMgorYWx3YXlzIFx1ODU3NyAxMjU2LTUKK2Fsd2F5cyBcdTg1NzggMTUtMjM0NTYtMgorYWx3YXlzIFx1ODU3OSAyMzQ2LTUKK2Fsd2F5cyBcdTg1N0EgMTMtMTYtMgorYWx3YXlzIFx1ODU3QiAxMjM1LTEyMzQ2LTIKK2Fsd2F5cyBcdTg1N0MgMTUtMTU2LTUKK2Fsd2F5cyBcdTg1N0QgMTM0NS0xMjM0Ni0yCithbHdheXMgXHU4NTdFIDE0LTM1Ni00CithbHdheXMgXHU4NTdGIDE1LTQ1LTMKK2Fsd2F5cyBcdTg1ODAgMjU2LTUKK2Fsd2F5cyBcdTg1ODEgMTI1Ni01CithbHdheXMgXHU4NTgyIDE1LTE2LTIKK2Fsd2F5cyBcdTg1ODMgMTIzNS0xNDYtNQorYWx3YXlzIFx1ODU4NCAxMzUtMTI2LTIKK2Fsd2F5cyBcdTg1ODUgMTIzNS0xNDYtMworYWx3YXlzIFx1ODU4NiAyNDU2LTUKK2Fsd2F5cyBcdTg1ODcgMTI0Ni0zCithbHdheXMgXHU4NTg4IDEyMzUtMTI0Ni01CithbHdheXMgXHU4NTg5IDEyMzUtMTI0Ni01CithbHdheXMgXHU4NThBIDEzLTE2LTUKK2Fsd2F5cyBcdTg1OEIgMjQ1LTE1Ni0yCithbHdheXMgXHU4NThDIDE1LTQ2LTMKK2Fsd2F5cyBcdTg1OEQgMTI0NTYtNQorYWx3YXlzIFx1ODU4RSAxMzQtMzQ2LTUKK2Fsd2F5cyBcdTg1OEYgMTYtNQorYWx3YXlzIFx1ODU5MCAxNC0xMzU2LTIKK2Fsd2F5cyBcdTg1OTEgMTMtNDYtMworYWx3YXlzIFx1ODU5MiAyNDUtMTIzNi01CithbHdheXMgXHU4NTkzIDI0LTEzNi0zCithbHdheXMgXHU4NTk0IDI0NS00Ni0yCithbHdheXMgXHU4NTk1IDE0LTIzNDUtMgorYWx3YXlzIFx1ODU5NiAxMjMtMjM0Ni0zCithbHdheXMgXHU4NTk3IDQ1LTIKK2Fsd2F5cyBcdTg1OTggMTQ1LTM0NS0yCithbHdheXMgXHU4NTk5IDEyNC0xNi01CithbHdheXMgXHU4NTlBIDEyNC0xMzQ2LTIKK2Fsd2F5cyBcdTg1OUIgMTUtMjM2LTMKK2Fsd2F5cyBcdTg1OUMgMTM1LTE2LTUKK2Fsd2F5cyBcdTg1OUQgMS0xMjM2LTMKK2Fsd2F5cyBcdTg1OUUgMTUtMTIzNDU2LTMKK2Fsd2F5cyBcdTg1OUYgMTUtMjM0NS0zCithbHdheXMgXHU4NUEwIDEyMzQ1LTEyMzYtMgorYWx3YXlzIFx1ODVBMSAxNDUtMTM0NTYtNAorYWx3YXlzIFx1ODVBMiAxNS0zNDYtNQorYWx3YXlzIFx1ODVBMyAxMy0zNC00CithbHdheXMgXHU4NUE0IDE1LTM0Ni01CithbHdheXMgXHU4NUE1IDI0LTM0LTQKK2Fsd2F5cyBcdTg1QTYgMTMtMjM0NS01CithbHdheXMgXHU4NUE3IDEyMzUtMTQ2LTMKK2Fsd2F5cyBcdTg1QTggMTIzNS0xMjM0Ni0zCithbHdheXMgXHU4NUE5IDE1LTM0NS01CithbHdheXMgXHU4NUFBIDE1LTE0NTYtMworYWx3YXlzIFx1ODVBQiAxNS0yNTYtMworYWx3YXlzIFx1ODVBQyAyNDYtNQorYWx3YXlzIFx1ODVBRCAyMzU2LTUKK2Fsd2F5cyBcdTg1QUUgMTUtMTIzNTYtNAorYWx3YXlzIFx1ODVBRiAyNC0zNC00CithbHdheXMgXHU4NUIwIDE1LTI1Ni0zCithbHdheXMgXHU4NUIxIDE0NS0xMjQ2LTUKK2Fsd2F5cyBcdTg1QjIgMTIzNC0xNDU2LTIKK2Fsd2F5cyBcdTg1QjMgMTI0Ni00CithbHdheXMgXHU4NUI0IDEzNDUtMTM0NTYtMgorYWx3YXlzIFx1ODVCNSAxMi0xMjM1Ni0yCithbHdheXMgXHU4NUI2IDEzNC0yNDU2LTIKK2Fsd2F5cyBcdTg1QjcgMTI0NS0zNC0yCithbHdheXMgXHU4NUI4IDEyMzQtMjQ2LTIKK2Fsd2F5cyBcdTg1QjkgMTI0LTI0NTYtMgorYWx3YXlzIFx1ODVCQSAxMy0xNi01CithbHdheXMgXHU4NUJCIDEyNS0xNDYtNAorYWx3YXlzIFx1ODVCQyAxMi0xMzYtMgorYWx3YXlzIFx1ODVCRCAxLTEzNi0zCithbHdheXMgXHU4NUJFIDE1Ni00CithbHdheXMgXHU4NUJGIDEzNDUtMTYtNAorYWx3YXlzIFx1ODVDMCAxMzQ1Ni0yCithbHdheXMgXHU4NUMxIDEzLTE0Ni00CithbHdheXMgXHU4NUMyIDI0NS0xMjM0Ni0yCithbHdheXMgXHU4NUMzIDE1LTI0Ni0zCithbHdheXMgXHU4NUM0IDI0NS0xNi0yCithbHdheXMgXHU4NUM1IDEyMzQ1LTM0NS0yCithbHdheXMgXHU4NUM2IDEzLTIzNDUtNAorYWx3YXlzIFx1ODVDNyAxNS0xMjU2LTUKK2Fsd2F5cyBcdTg1QzggMTIzLTEyNDYtMworYWx3YXlzIFx1ODVDOSAxMy0zNDYtNQorYWx3YXlzIFx1ODVDQSAxMzUtMjM0NS00CithbHdheXMgXHU4NUNCIDE0NS0yNDYtNQorYWx3YXlzIFx1ODVDQyAxMzQtMTYtNQorYWx3YXlzIFx1ODVDRCAxNC0xMjM2LTIKK2Fsd2F5cyBcdTg1Q0UgMTMtMTQ1Ni01CithbHdheXMgXHU4NUNGIDI0NS0xMzQ2LTIKK2Fsd2F5cyBcdTg1RDAgMTM0LTI0Ni00CithbHdheXMgXHU4NUQxIDI0NS0yMzUtMgorYWx3YXlzIFx1ODVEMiAyNDUtMzQ2LTUKK2Fsd2F5cyBcdTg1RDMgMTUtMjM0NS00CithbHdheXMgXHU4NUQ0IDE0LTI0Ni0yCithbHdheXMgXHU4NUQ1IDEyMzU2LTQKK2Fsd2F5cyBcdTg1RDYgMTUtMjM0NS0yCithbHdheXMgXHU4NUQ3IDE1LTM0LTUKK2Fsd2F5cyBcdTg1RDggMTQtMTI1Ni0yCithbHdheXMgXHU4NUQ5IDE2LTUKK2Fsd2F5cyBcdTg1REEgMTUtMTI1Ni01CithbHdheXMgXHU4NURCIDE1LTM0Ni00CithbHdheXMgXHU4NURDIDE0LTE2LTIKK2Fsd2F5cyBcdTg1REQgMTYtNQorYWx3YXlzIFx1ODVERSAxNC0zNDUtNAorYWx3YXlzIFx1ODVERiAxNC0zNTYtNAorYWx3YXlzIFx1ODVFMCAxNS0yNDYtNQorYWx3YXlzIFx1ODVFMSAxNDUtMTYtMgorYWx3YXlzIFx1ODVFMiAxLTE1Ni00CithbHdheXMgXHU4NUUzIDEzNS0zNTYtMworYWx3YXlzIFx1ODVFNCAxMjQtMTM1Ni0yCithbHdheXMgXHU4NUU1IDI0Ni01CithbHdheXMgXHU4NUU2IDEzNC0xMjYtNQorYWx3YXlzIFx1ODVFNyAxMjM1LTEyNDU2LTQKK2Fsd2F5cyBcdTg1RTggMTM1LTI0Ni0zCithbHdheXMgXHU4NUU5IDEyMzQ1LTEyMzYtMgorYWx3YXlzIFx1ODVFQSAxNS0xMjM1Ni00CithbHdheXMgXHU4NUVCIDEyNC0xMjM2LTIKK2Fsd2F5cyBcdTg1RUMgMTI0LTEyNDYtMworYWx3YXlzIFx1ODVFRCAyNDUtMjM1LTIKK2Fsd2F5cyBcdTg1RUUgMjQ1LTI0Ni0yCithbHdheXMgXHU4NUVGIDEyNDYtNQorYWx3YXlzIFx1ODVGMCAxNC0yMzQtMgorYWx3YXlzIFx1ODVGMSAxMjM1LTEyNDYtNQorYWx3YXlzIFx1ODVGMiAxMjM1Ni0zCithbHdheXMgXHU4NUYzIDEzLTE0Ni00CithbHdheXMgXHU4NUY0IDI1Ni01CithbHdheXMgXHU4NUY1IDEzNS0xNDYtNAorYWx3YXlzIFx1ODVGNiAxNC0xNi01CithbHdheXMgXHU4NUY3IDI0LTM0LTQKK2Fsd2F5cyBcdTg1RjggMTItMzQtMgorYWx3YXlzIFx1ODVGOSAyNDU2LTQKK2Fsd2F5cyBcdTg1RkEgMTQtMTQ1Ni01CithbHdheXMgXHU4NUZCIDEyNS0xNDYtNAorYWx3YXlzIFx1ODVGQyAxNS00NS0zCithbHdheXMgXHU4NUZEIDEyLTEzNi01CithbHdheXMgXHU4NUZFIDE0LTI0NTYtNQorYWx3YXlzIFx1ODVGRiAxMjM1LTI1LTUKK2Fsd2F5cyBcdTg2MDAgMTI0LTI1LTUKK2Fsd2F5cyBcdTg2MDEgMzQtNQorYWx3YXlzIFx1ODYwMiAxMjQ1LTEyNDYtNAorYWx3YXlzIFx1ODYwMyAxMjQ1LTEyNDYtNAorYWx3YXlzIFx1ODYwNCAyNDUtMTYtMgorYWx3YXlzIFx1ODYwNSAxMjM1LTEzNTYtMgorYWx3YXlzIFx1ODYwNiAxNC0zNC0yCithbHdheXMgXHU4NjA3IDE1LTM0LTMKK2Fsd2F5cyBcdTg2MDggMTI0LTEyNDYtMgorYWx3YXlzIFx1ODYwOSAxMzQtMTM0Ni0yCithbHdheXMgXHU4NjBBIDI1Ni01CithbHdheXMgXHU4NjBCIDEyMzQtMTM0NTYtMgorYWx3YXlzIFx1ODYwQyAxMjU2LTQKK2Fsd2F5cyBcdTg2MEQgMTUtMjU2LTMKK2Fsd2F5cyBcdTg2MEUgMTMtMTYtNQorYWx3YXlzIFx1ODYwRiAxMy0yMzUtMworYWx3YXlzIFx1ODYxMCAxNS00NS0zCithbHdheXMgXHU4NjExIDEzNC0xMjYtMgorYWx3YXlzIFx1ODYxMiAyNDUtMjM0LTMKK2Fsd2F5cyBcdTg2MTMgMTUtMzQtMworYWx3YXlzIFx1ODYxNCAxMy0yMzUtMworYWx3YXlzIFx1ODYxNSAxMjM0NS0xMzU2LTUKK2Fsd2F5cyBcdTg2MTYgMTM0NS0zNDYtNQorYWx3YXlzIFx1ODYxNyAxMzUtMTI2LTUKK2Fsd2F5cyBcdTg2MTggMTI0NS0xMzQ2LTIKK2Fsd2F5cyBcdTg2MTkgMTYtNQorYWx3YXlzIFx1ODYxQSAxNS0yMzQ1LTQKK2Fsd2F5cyBcdTg2MUIgMTI1Ni01CithbHdheXMgXHU4NjFDIDEzLTEyNTYtMgorYWx3YXlzIFx1ODYxRCAxNC0yMzQ1LTUKK2Fsd2F5cyBcdTg2MUUgMTQtMjM0NS0yCithbHdheXMgXHU4NjFGIDE0NTYtNAorYWx3YXlzIFx1ODYyMCAyNDUtNDYtMgorYWx3YXlzIFx1ODYyMSAxMzQ1Ni0zCithbHdheXMgXHU4NjIyIDE0LTEyMzQ2LTIKK2Fsd2F5cyBcdTg2MjMgMTI0LTEyMzU2LTQKK2Fsd2F5cyBcdTg2MjQgMTIzNS0zNS0zCithbHdheXMgXHU4NjI1IDIzNi01CithbHdheXMgXHU4NjI2IDE0LTEzNDU2LTIKK2Fsd2F5cyBcdTg2MjcgMjQ1LTEyNTYtMgorYWx3YXlzIFx1ODYyOCAyNDYtMgorYWx3YXlzIFx1ODYyOSAxMjM0NS0xMjM2LTIKK2Fsd2F5cyBcdTg2MkEgMTM0LTE2LTIKK2Fsd2F5cyBcdTg2MkIgMTQtMTIzNi0yCithbHdheXMgXHU4NjJDIDEyMy0xMjQ2LTMKK2Fsd2F5cyBcdTg2MkQgMTQtMTIzNi0yCithbHdheXMgXHU4NjJFIDEzLTE2LTUKK2Fsd2F5cyBcdTg2MkYgMTQ1LTEzNDYtNQorYWx3YXlzIFx1ODYzMCAxMjQ1Ni01CithbHdheXMgXHU4NjMxIDE0LTM1Ni01CithbHdheXMgXHU4NjMyIDE0LTM1Ni0yCithbHdheXMgXHU4NjMzIDEyMzUtMTI0Ni0zCithbHdheXMgXHU4NjM0IDEyMzQ1LTEzNTYtMworYWx3YXlzIFx1ODYzNSAxLTE1Ni0yCithbHdheXMgXHU4NjM2IDEyNDYtNQorYWx3YXlzIFx1ODYzNyAxMjMtMTI0Ni0yCithbHdheXMgXHU4NjM4IDEtMTIzNi01CithbHdheXMgXHU4NjM5IDEyMzUtMjM1Ni0yCithbHdheXMgXHU4NjNBIDE0LTE2LTIKK2Fsd2F5cyBcdTg2M0IgMTMtMTYtNQorYWx3YXlzIFx1ODYzQyAxMzQtMTYtMgorYWx3YXlzIFx1ODYzRCAxNC0zNTYtNAorYWx3YXlzIFx1ODYzRSAxMjM1LTIzNTYtNQorYWx3YXlzIFx1ODYzRiAxNC0yNS0yCithbHdheXMgXHU4NjQwIDEzLTE2LTMKK2Fsd2F5cyBcdTg2NDEgMTIzLTEyNDYtMgorYWx3YXlzIFx1ODY0MiAxNC0zNC01CithbHdheXMgXHU4NjQzIDEzLTIzNDUtMworYWx3YXlzIFx1ODY0NCAxNS0zNDUtNQorYWx3YXlzIFx1ODY0NSAxMjQtMTM1Ni0yCithbHdheXMgXHU4NjQ2IDE0LTM1Ni0yCithbHdheXMgXHU4NjQ3IDI0NS00NS00CithbHdheXMgXHU4NjQ4IDE1LTI0Ni0zCithbHdheXMgXHU4NjQ5IDE2LTUKK2Fsd2F5cyBcdTg2NEEgMTQtMTI0NTYtMgorYWx3YXlzIFx1ODY0QiAxMzQtMTM2LTIKK2Fsd2F5cyBcdTg2NEMgMTM1LTM0Ni0zCithbHdheXMgXHU4NjREIDEyMzUtMzQtMworYWx3YXlzIFx1ODY0RSAxMjM1LTM0LTQKK2Fsd2F5cyBcdTg2NEYgMTQtMzQtNAorYWx3YXlzIFx1ODY1MCAxMzQ1LTIzNi01CithbHdheXMgXHU4NjUxIDE0LTEyNTYtNQorYWx3YXlzIFx1ODY1MiAxNS0xNTYtMworYWx3YXlzIFx1ODY1MyAxNS0yNDYtMworYWx3YXlzIFx1ODY1NCAyNDUtMjM0NS0yCithbHdheXMgXHU4NjU1IDEyLTM0LTUKK2Fsd2F5cyBcdTg2NTYgMTIzNS0zNC0zCithbHdheXMgXHU4NjU3IDE1LTEyNTYtMworYWx3YXlzIFx1ODY1OCAyNDUtMjUtMgorYWx3YXlzIFx1ODY1OSAxMjM0NS0zNC0yCithbHdheXMgXHU4NjVBIDE1LTEyNTYtMworYWx3YXlzIFx1ODY1QiAxNS0xMjU2LTMKK2Fsd2F5cyBcdTg2NUMgMTQtMzQtNAorYWx3YXlzIFx1ODY1RCAxMjM1LTM0LTQKK2Fsd2F5cyBcdTg2NUUgMTI1Ni0yCithbHdheXMgXHU4NjVGIDEyMzUtMTQ2LTUKK2Fsd2F5cyBcdTg2NjAgMTMtMjQ2LTQKK2Fsd2F5cyBcdTg2NjEgMTMtMTI1Ni01CithbHdheXMgXHU4NjYyIDEzLTI1LTIKK2Fsd2F5cyBcdTg2NjMgMTM1LTE0Ni01CithbHdheXMgXHU4NjY0IDIzNDUtMgorYWx3YXlzIFx1ODY2NSAxLTEyMzYtNQorYWx3YXlzIFx1ODY2NiAxLTEyMzYtNQorYWx3YXlzIFx1ODY2NyAxMjMtMTI0Ni0zCithbHdheXMgXHU4NjY4IDEzNS0xMjM2LTMKK2Fsd2F5cyBcdTg2NjkgMTUtMTYtNQorYWx3YXlzIFx1ODY2QSAyNC0zNC0yCithbHdheXMgXHU4NjZCIDEyLTEyMzQ2LTIKK2Fsd2F5cyBcdTg2NkMgMjQ1LTIzNC0yCithbHdheXMgXHU4NjZEIDE0NS0yNDYtMworYWx3YXlzIFx1ODY2RSAxMy0xNi00CithbHdheXMgXHU4NjZGIDI0NS0yMzQtMgorYWx3YXlzIFx1ODY3MCAxNDUtMTM0NTYtMworYWx3YXlzIFx1ODY3MSAyNC0xNTYtMworYWx3YXlzIFx1ODY3MiAxNS0yMzQ1Ni0zCithbHdheXMgXHU4NjczIDE0NS0xNi01CithbHdheXMgXHU4Njc0IDEtMjM0Ni0yCithbHdheXMgXHU4Njc1IDI0LTIzNDYtMgorYWx3YXlzIFx1ODY3NiAxMjU2LTMKK2Fsd2F5cyBcdTg2NzcgMTMtMTIzNi0zCithbHdheXMgXHU4Njc4IDEyNS0xNTYtNAorYWx3YXlzIFx1ODY3OSAxMjM1LTEyMzQ2LTIKK2Fsd2F5cyBcdTg2N0EgMTIzNS0xMjQ2LTQKK2Fsd2F5cyBcdTg2N0IgMTM0LTEzNTYtMgorYWx3YXlzIFx1ODY3QyAxMy0yMzQ2LTUKK2Fsd2F5cyBcdTg2N0QgMTUtMTI0Ni0zCithbHdheXMgXHU4NjdFIDE1LTIzNDU2LTMKK2Fsd2F5cyBcdTg2N0YgMTItMjQ1Ni01CithbHdheXMgXHU4NjgwIDI0LTE1Ni0yCithbHdheXMgXHU4NjgxIDE2LTQKK2Fsd2F5cyBcdTg2ODIgMTM0LTM0NS00CithbHdheXMgXHU4NjgzIDE1LTQ2LTUKK2Fsd2F5cyBcdTg2ODQgMTIzNDUtMTM0Ni0zCithbHdheXMgXHU4Njg1IDIzNDYtNQorYWx3YXlzIFx1ODY4NiAxMzUtMzQ1LTMKK2Fsd2F5cyBcdTg2ODcgMTItMTU2LTQKK2Fsd2F5cyBcdTg2ODggMjQ1LTIzNDUtMworYWx3YXlzIFx1ODY4OSAxMjM0NTYtMgorYWx3YXlzIFx1ODY4QSAxMjM0NTYtMgorYWx3YXlzIFx1ODY4QiAxMjQ1LTEyNDYtNQorYWx3YXlzIFx1ODY4QyAxMzUtMTM0Ni01CithbHdheXMgXHU4NjhEIDEyMzQtMTYtMgorYWx3YXlzIFx1ODY4RSAyMzYtNQorYWx3YXlzIFx1ODY4RiAyMzYtNQorYWx3YXlzIFx1ODY5MCAxMy0yNTYtMworYWx3YXlzIFx1ODY5MSAyNDUtMTYtMgorYWx3YXlzIFx1ODY5MiAxMjQtMTIzNDYtMgorYWx3YXlzIFx1ODY5MyAxNDU2LTQKK2Fsd2F5cyBcdTg2OTQgMjQ1LTE2LTIKK2Fsd2F5cyBcdTg2OTUgMTI0LTIzNDUtNAorYWx3YXlzIFx1ODY5NiA0NS0yCithbHdheXMgXHU4Njk3IDEzLTIzNi0yCithbHdheXMgXHU4Njk4IDEyMzUtMTI0Ni0yCithbHdheXMgXHU4Njk5IDI0NS0xNDU2LTIKK2Fsd2F5cyBcdTg2OUEgMjQ1LTE2LTIKK2Fsd2F5cyBcdTg2OUIgMS0xMjM0Ni01CithbHdheXMgXHU4NjlDIDIzNDU2LTIKK2Fsd2F5cyBcdTg2OUQgMTIzNS0xNDYtMgorYWx3YXlzIFx1ODY5RSAxMzQtMzQtNQorYWx3YXlzIFx1ODY5RiA0NTYtMgorYWx3YXlzIFx1ODZBMCAxMjM0NS0xMzYtMgorYWx3YXlzIFx1ODZBMSAxMjM0NS0xMzYtMgorYWx3YXlzIFx1ODZBMiAxMjM1LTEzNDYtMgorYWx3YXlzIFx1ODZBMyAxMy0xMjM0Ni0zCithbHdheXMgXHU4NkE0IDEyNS0xNDYtNAorYWx3YXlzIFx1ODZBNSAxMjM0NS0zNC00CithbHdheXMgXHU4NkE2IDEyNDUtMTIzNi0yCithbHdheXMgXHU4NkE3IDEzLTM0Ni01CithbHdheXMgXHU4NkE4IDEyMzQ1LTM0LTIKK2Fsd2F5cyBcdTg2QTkgMTItMTU2LTMKK2Fsd2F5cyBcdTg2QUEgMTQ1LTEyMzU2LTQKK2Fsd2F5cyBcdTg2QUIgMTIzNC0yNDYtMgorYWx3YXlzIFx1ODZBQyAxNS00NS00CithbHdheXMgXHU4NkFEIDEzNDUtMTYtMgorYWx3YXlzIFx1ODZBRSAxMjQtMjM0Ni01CithbHdheXMgXHU4NkFGIDI0NS0yMzQtMworYWx3YXlzIFx1ODZCMCAyMzQtMgorYWx3YXlzIFx1ODZCMSAxLTM0NS01CithbHdheXMgXHU4NkIyIDEyMzQtMTM0NTYtMgorYWx3YXlzIFx1ODZCMyAxMi0xNTYtMgorYWx3YXlzIFx1ODZCNCAyMzQtNQorYWx3YXlzIFx1ODZCNSAyMzQ2LTIKK2Fsd2F5cyBcdTg2QjYgMTIzNS0xMjM2LTMKK2Fsd2F5cyBcdTg2QjcgMTMtMTI1Ni01CithbHdheXMgXHU4NkI4IDE0LTE2LTUKK2Fsd2F5cyBcdTg2QjkgMTIzNDUtMzQtNQorYWx3YXlzIFx1ODZCQSAxMjQ1LTEyMzYtMgorYWx3YXlzIFx1ODZCQiAxLTM0NS0yCithbHdheXMgXHU4NkJDIDEzLTEyMzU2LTQKK2Fsd2F5cyBcdTg2QkQgMTIzNC0xNi0yCithbHdheXMgXHU4NkJFIDEzNS0xMjYtNAorYWx3YXlzIFx1ODZCRiAxNS0yMzQ1LTIKK2Fsd2F5cyBcdTg2QzAgMS0zNC01CithbHdheXMgXHU4NkMxIDE0NS0yNDYtMworYWx3YXlzIFx1ODZDMiAxMzUtMzQ2LTIKK2Fsd2F5cyBcdTg2QzMgMTM1LTEzNDU2LTQKK2Fsd2F5cyBcdTg2QzQgMTMtMzQtMworYWx3YXlzIFx1ODZDNSAxLTEyMzYtMworYWx3YXlzIFx1ODZDNiAyNDUtMTI1Ni0zCithbHdheXMgXHU4NkM3IDI0LTIzNDYtMgorYWx3YXlzIFx1ODZDOCAxMjQtMzQ2LTQKK2Fsd2F5cyBcdTg2QzkgMTQtMTM0NTYtMgorYWx3YXlzIFx1ODZDQSAxMy0zNC00CithbHdheXMgXHU4NkNCIDE0NS0xMjM2LTUKK2Fsd2F5cyBcdTg2Q0MgMTMtMzQtNAorYWx3YXlzIFx1ODZDRCAxMzQ1Ni0yCithbHdheXMgXHU4NkNFIDE0LTE2LTUKK2Fsd2F5cyBcdTg2Q0YgMTItMTM1Ni0zCithbHdheXMgXHU4NkQwIDI0NS0xMjU2LTMKK2Fsd2F5cyBcdTg2RDEgMTM0LTEyMzU2LTIKK2Fsd2F5cyBcdTg2RDIgMTMtMjM0Ni0yCithbHdheXMgXHU4NkQzIDI0NS0xNTYtNQorYWx3YXlzIFx1ODZENCAxMjM1LTEyNDYtMgorYWx3YXlzIFx1ODZENSAxMjM1LTEyNDYtMgorYWx3YXlzIFx1ODZENiAxMzQtMTM0Ni0yCithbHdheXMgXHU4NkQ3IDEyMzQ1LTM0LTUKK2Fsd2F5cyBcdTg2RDggNDYtMgorYWx3YXlzIFx1ODZEOSAzNS0zCithbHdheXMgXHU4NkRBIDE0LTM0Ni01CithbHdheXMgXHU4NkRCIDEtMzQtMworYWx3YXlzIFx1ODZEQyAxNi0zCithbHdheXMgXHU4NkREIDE1LTIzNDUtMgorYWx3YXlzIFx1ODZERSAxMjMtMjUtNQorYWx3YXlzIFx1ODZERiAxMy0yNDYtMworYWx3YXlzIFx1ODZFMCAxNC0xNi01CithbHdheXMgXHU4NkUxIDE2LTUKK2Fsd2F5cyBcdTg2RTIgMTIzNC0xMzQ1Ni0yCithbHdheXMgXHU4NkUzIDEzLTM0Ni0yCithbHdheXMgXHU4NkU0IDEzLTIzNDYtMgorYWx3YXlzIFx1ODZFNSAyNC0yMzQ2LTIKK2Fsd2F5cyBcdTg2RTYgMTI0LTE2LTIKK2Fsd2F5cyBcdTg2RTcgNDU2LTQKK2Fsd2F5cyBcdTg2RTggMTM0LTEyNi01CithbHdheXMgXHU4NkU5IDI0NS0yMzUtMgorYWx3YXlzIFx1ODZFQSAyNDUtMzQ2LTUKK2Fsd2F5cyBcdTg2RUIgMTMtMTI0Ni00CithbHdheXMgXHU4NkVDIDEzLTEyMzQ2LTQKK2Fsd2F5cyBcdTg2RUQgMS0xNTYtNQorYWx3YXlzIFx1ODZFRSAxMzQtMTIzNi0yCithbHdheXMgXHU4NkVGIDE0LTE0Ni00CithbHdheXMgXHU4NkYwIDEtMTU2LTIKK2Fsd2F5cyBcdTg2RjEgMTMtMjM0NTYtMgorYWx3YXlzIFx1ODZGMiAxMzQ1LTE0Ni0yCithbHdheXMgXHU4NkYzIDE1LTE1Ni0zCithbHdheXMgXHU4NkY0IDI0NS0xNi0yCithbHdheXMgXHU4NkY1IDE1LTEzNDU2LTMKK2Fsd2F5cyBcdTg2RjYgMTQtMzQ2LTUKK2Fsd2F5cyBcdTg2RjcgMjQ1LTIzNC0yCithbHdheXMgXHU4NkY4IDE1LTI0Ni0zCithbHdheXMgXHU4NkY5IDIzNS00CithbHdheXMgXHU4NkZBIDEzLTIzNDU2LTIKK2Fsd2F5cyBcdTg2RkIgMTI0LTEyNDYtNQorYWx3YXlzIFx1ODZGQyAxMi0yMzQ2LTMKK2Fsd2F5cyBcdTg2RkQgMTM1LTI0NTYtNQorYWx3YXlzIFx1ODZGRSAyMzQ2LTIKK2Fsd2F5cyBcdTg2RkYgMTIzNS0xMjM2LTUKK2Fsd2F5cyBcdTg3MDAgMjQtMzQtNAorYWx3YXlzIFx1ODcwMSAxNS00NS0yCithbHdheXMgXHU4NzAyIDEyMzQ1LTEzNTYtMworYWx3YXlzIFx1ODcwMyAyNC0xMzYtNQorYWx3YXlzIFx1ODcwNCAxLTEzNi01CithbHdheXMgXHU4NzA1IDEyMzQ1LTM0LTQKK2Fsd2F5cyBcdTg3MDYgMTUtMjM0NS00CithbHdheXMgXHU4NzA3IDEtMjM0Ni0yCithbHdheXMgXHU4NzA4IDM0LTIKK2Fsd2F5cyBcdTg3MDkgMTIzNDUtMzQtMgorYWx3YXlzIFx1ODcwQSAxNC0xNi0yCithbHdheXMgXHU4NzBCIDE0LTEzNDYtMgorYWx3YXlzIFx1ODcwQyAxMzUtMTYtNQorYWx3YXlzIFx1ODcwRCAxMi0zNC0yCithbHdheXMgXHU4NzBFIDQ1LTMKK2Fsd2F5cyBcdTg3MEYgMjM0LTQKK2Fsd2F5cyBcdTg3MTAgMTMtMzQ2LTIKK2Fsd2F5cyBcdTg3MTEgMTQ1LTEyMzYtNQorYWx3YXlzIFx1ODcxMiAyMzQ1LTIKK2Fsd2F5cyBcdTg3MTMgMTI0LTEzNDU2LTIKK2Fsd2F5cyBcdTg3MTQgMTQ1LTIzNDUtNQorYWx3YXlzIFx1ODcxNSAxMjQtMTI0Ni01CithbHdheXMgXHU4NzE2IDEyMzUtMTI0Ni0yCithbHdheXMgXHU4NzE3IDEzLTM1LTMKK2Fsd2F5cyBcdTg3MTggMS0xNTYtMworYWx3YXlzIFx1ODcxOSAxNS0xMjM0Ni0zCithbHdheXMgXHU4NzFBIDEyMzQ1LTM1Ni00CithbHdheXMgXHU4NzFCIDEzLTEyNTYtMworYWx3YXlzIFx1ODcxQyAxMzQtMTYtNQorYWx3YXlzIFx1ODcxRCAyNDUtMTYtMgorYWx3YXlzIFx1ODcxRSAyNDUtMTYtMgorYWx3YXlzIFx1ODcxRiAxMjU2LTUKK2Fsd2F5cyBcdTg3MjAgMTMtMjU2LTUKK2Fsd2F5cyBcdTg3MjEgMS0zNDUtNQorYWx3YXlzIFx1ODcyMiAxMzQtMTM1Ni00CithbHdheXMgXHU4NzIzIDI0NS00Ni0zCithbHdheXMgXHU4NzI0IDE1LTE1Ni0zCithbHdheXMgXHU4NzI1IDE1LTE2LTMKK2Fsd2F5cyBcdTg3MjYgMTQtMTIzNDU2LTIKK2Fsd2F5cyBcdTg3MjcgMTQtMTYtNQorYWx3YXlzIFx1ODcyOCAxNDUtMzQ2LTIKK2Fsd2F5cyBcdTg3MjkgMTI0LTI0Ni0yCithbHdheXMgXHU4NzJBIDEyNC0xNDYtMgorYWx3YXlzIFx1ODcyQiAxMjMtMTIzNDU2LTMKK2Fsd2F5cyBcdTg3MkMgMTIzNS0xMjM2LTIKK2Fsd2F5cyBcdTg3MkQgMTIzNS0xMjM2LTUKK2Fsd2F5cyBcdTg3MkUgMTI1Ni01CithbHdheXMgXHU4NzJGIDEzNS0xMzQ2LTUKK2Fsd2F5cyBcdTg3MzAgMTIzNDUtMzU2LTIKK2Fsd2F5cyBcdTg3MzEgMTIzNC0xNi0yCithbHdheXMgXHU4NzMyIDEyNDYtMworYWx3YXlzIFx1ODczMyAxNDUtMTIzNDU2LTMKK2Fsd2F5cyBcdTg3MzQgMTYtNQorYWx3YXlzIFx1ODczNSA0NS0zCithbHdheXMgXHU4NzM2IDE1LTM0LTUKK2Fsd2F5cyBcdTg3MzcgMjQ1LTQ1LTIKK2Fsd2F5cyBcdTg3MzggMjQ1LTIzNDUtNAorYWx3YXlzIFx1ODczOSAxMjQ1LTEyNDYtNQorYWx3YXlzIFx1ODczQSAxMzQ1LTE2LTIKK2Fsd2F5cyBcdTg3M0IgMjQ1LTEzNDU2LTMKK2Fsd2F5cyBcdTg3M0MgMTI0Ni01CithbHdheXMgXHU4NzNEIDE0LTQ2LTQKK2Fsd2F5cyBcdTg3M0UgMTMtMjUtNAorYWx3YXlzIFx1ODczRiAxMjQ1Ni0zCithbHdheXMgXHU4NzQwIDE0NS0xMjM0Ni0zCithbHdheXMgXHU4NzQxIDIzNDYtNQorYWx3YXlzIFx1ODc0MiAxMzUtMTIzNi00CithbHdheXMgXHU4NzQzIDE0NS0xNi01CithbHdheXMgXHU4NzQ0IDQ1Ni00CithbHdheXMgXHU4NzQ1IDI0NS0xMjM2LTIKK2Fsd2F5cyBcdTg3NDYgMTM0LTE2LTQKK2Fsd2F5cyBcdTg3NDcgMTM0NTYtMgorYWx3YXlzIFx1ODc0OCAxMy0yNS0zCithbHdheXMgXHU4NzQ5IDEyLTEyMzYtMgorYWx3YXlzIFx1ODc0QSAxNDUtMTM0NTYtNQorYWx3YXlzIFx1ODc0QiAxNC0zNDUtNQorYWx3YXlzIFx1ODc0QyAxMjMtMjM0Ni0zCithbHdheXMgXHU4NzREIDEzLTE2LTIKK2Fsd2F5cyBcdTg3NEUgMTIzNS0yMzQ2LTIKK2Fsd2F5cyBcdTg3NEYgMTI0LTEzNDU2LTIKK2Fsd2F5cyBcdTg3NTAgMTM0LTM1Ni01CithbHdheXMgXHU4NzUxIDE1LTEyNTYtMworYWx3YXlzIFx1ODc1MiAxMzQtMjM0NS0yCithbHdheXMgXHU4NzUzIDEyNTYtMgorYWx3YXlzIFx1ODc1NCAxMy0zNDYtMworYWx3YXlzIFx1ODc1NSAyNC0xNTYtMgorYWx3YXlzIFx1ODc1NiAxNS00NS0zCithbHdheXMgXHU4NzU3IDEyMzUtNDU2LTIKK2Fsd2F5cyBcdTg3NTggMjM0NS00CithbHdheXMgXHU4NzU5IDEzNS0yMzQ1LTMKK2Fsd2F5cyBcdTg3NUEgMTI0NS0xMjM1Ni0yCithbHdheXMgXHU4NzVCIDEyNDYtMworYWx3YXlzIFx1ODc1QyAxMjM0NS0zNC01CithbHdheXMgXHU4NzVEIDQ1LTIKK2Fsd2F5cyBcdTg3NUUgMTM0LTM1Ni01CithbHdheXMgXHU4NzVGIDEyNDYtNQorYWx3YXlzIFx1ODc2MCAxMjM0NS0zNC0yCithbHdheXMgXHU4NzYxIDEyNDUtMTI0NTYtNAorYWx3YXlzIFx1ODc2MiAxNS0zNDYtMgorYWx3YXlzIFx1ODc2MyAyMzQtMgorYWx3YXlzIFx1ODc2NCAyNDUtMjM0LTIKK2Fsd2F5cyBcdTg3NjUgMTM0LTE0Ni0yCithbHdheXMgXHU4NzY2IDE1LTIzNDU2LTMKK2Fsd2F5cyBcdTg3NjcgMTM0NTYtMworYWx3YXlzIFx1ODc2OCAyNC0xNTYtMworYWx3YXlzIFx1ODc2OSAxMi0xMjM0Ni0yCithbHdheXMgXHU4NzZBIDEyNC0xMzQ2LTMKK2Fsd2F5cyBcdTg3NkIgMS0zNC0zCithbHdheXMgXHU4NzZDIDEyNS0xMjM0Ni0zCithbHdheXMgXHU4NzZEIDEyNC0xNi0yCithbHdheXMgXHU4NzZFIDEyMzQ1LTM0LTUKK2Fsd2F5cyBcdTg3NkYgNDUtMgorYWx3YXlzIFx1ODc3MCAxMjMtMTI0Ni0zCithbHdheXMgXHU4NzcxIDEzNC0xMzU2LTIKK2Fsd2F5cyBcdTg3NzIgMTQtMzQ1LTUKK2Fsd2F5cyBcdTg3NzMgMTQ1LTM0LTIKK2Fsd2F5cyBcdTg3NzQgMTIzNS0zNC0yCithbHdheXMgXHU4Nzc1IDI0NS0yMzQtMworYWx3YXlzIFx1ODc3NiAxNDUtMzQ2LTIKK2Fsd2F5cyBcdTg3NzcgMTQtMTYtNQorYWx3YXlzIFx1ODc3OCAxMy0zNS0zCithbHdheXMgXHU4Nzc5IDE0Ni00CithbHdheXMgXHU4NzdBIDEzLTEyNTYtNAorYWx3YXlzIFx1ODc3QiAxMzQ1LTEyMzYtNAorYWx3YXlzIFx1ODc3QyAxNC0xMjM1Ni0yCithbHdheXMgXHU4NzdEIDEyLTEyMzQ1Ni0zCithbHdheXMgXHU4NzdFIDEyNDUtMTIzNDYtMgorYWx3YXlzIFx1ODc3RiAxMzQ1Ni0yCithbHdheXMgXHU4NzgwIDEzLTQ2LTMKK2Fsd2F5cyBcdTg3ODEgMTI0LTEyNDYtNQorYWx3YXlzIFx1ODc4MiAxNC0xMzQ2LTIKK2Fsd2F5cyBcdTg3ODMgMTIzNC0xMzQ2LTIKK2Fsd2F5cyBcdTg3ODQgMTUtMTU2LTMKK2Fsd2F5cyBcdTg3ODUgMTUtMTYtMworYWx3YXlzIFx1ODc4NiAyNDUtMTU2LTUKK2Fsd2F5cyBcdTg3ODcgMTUtMTYtMworYWx3YXlzIFx1ODc4OCA0NS0yCithbHdheXMgXHU4Nzg5IDEyMzQ2LTMKK2Fsd2F5cyBcdTg3OEEgMTQtMjM0NS0yCithbHdheXMgXHU4NzhCIDE1LTEyMzU2LTMKK2Fsd2F5cyBcdTg3OEMgMTM1LTEyMzYtMworYWx3YXlzIFx1ODc4RCAxMjQ1LTEyMzQ2LTIKK2Fsd2F5cyBcdTg3OEUgMTI0NS0xMjM0Ni0yCithbHdheXMgXHU4NzhGIDEzLTE2LTIKK2Fsd2F5cyBcdTg3OTAgMzQtMworYWx3YXlzIFx1ODc5MSAxNS0yMzQtNQorYWx3YXlzIFx1ODc5MiAxMjM1LTEyMzYtNQorYWx3YXlzIFx1ODc5MyAyNDUtMTQ1Ni0yCithbHdheXMgXHU4Nzk0IDE2LTIKK2Fsd2F5cyBcdTg3OTUgMTM1LTE2LTMKK2Fsd2F5cyBcdTg3OTYgMTIzNS0zNS0yCithbHdheXMgXHU4Nzk3IDEyNC0xMzQ2LTIKK2Fsd2F5cyBcdTg3OTggMTYtNAorYWx3YXlzIFx1ODc5OSAxNDUtMzQtNQorYWx3YXlzIFx1ODc5QSAxMzQ1LTI0NTYtNQorYWx3YXlzIFx1ODc5QiAxMjM1LTIzNDYtMgorYWx3YXlzIFx1ODc5QyAxMjM1LTM0LTIKK2Fsd2F5cyBcdTg3OUQgMTIzNS0xMjQ2LTUKK2Fsd2F5cyBcdTg3OUUgMTM0LTM0NS00CithbHdheXMgXHU4NzlGIDEzNC0xMzQ1Ni0yCithbHdheXMgXHU4N0EwIDE2LTUKK2Fsd2F5cyBcdTg3QTEgMTIzNDU2LTIKK2Fsd2F5cyBcdTg3QTIgMTM0NTYtMgorYWx3YXlzIFx1ODdBMyAxMjQtMTM1Ni0yCithbHdheXMgXHU4N0E0IDEtMTIzNDYtMworYWx3YXlzIFx1ODdBNSAyNDUtMTM0Ni0zCithbHdheXMgXHU4N0E2IDE1LTE0Ni0zCithbHdheXMgXHU4N0E3IDI0NS0xNi00CithbHdheXMgXHU4N0E4IDEzNC0xMjM2LTQKK2Fsd2F5cyBcdTg3QTkgMTI0LTI0Ni0yCithbHdheXMgXHU4N0FBIDI0LTEzNDYtMworYWx3YXlzIFx1ODdBQiAyNC0xNTYtNQorYWx3YXlzIFx1ODdBQyAyNDUtMTQ2LTIKK2Fsd2F5cyBcdTg3QUQgMTItMTU2LTMKK2Fsd2F5cyBcdTg3QUUgMTQ1LTE2LTUKK2Fsd2F5cyBcdTg3QUYgMTQ2LTIKK2Fsd2F5cyBcdTg3QjAgMTQtMzQtNQorYWx3YXlzIFx1ODdCMSAxMjQ2LTUKK2Fsd2F5cyBcdTg3QjIgMS0xNTYtNQorYWx3YXlzIFx1ODdCMyAxMjQtMTM0Ni0yCithbHdheXMgXHU4N0I0IDEyLTEzNi0yCithbHdheXMgXHU4N0I1IDEyMzQtMjQ2LTMKK2Fsd2F5cyBcdTg3QjYgMjQ1LTEyNTYtMgorYWx3YXlzIFx1ODdCNyAxMjM0LTE2LTIKK2Fsd2F5cyBcdTg3QjggMTI1Ni0yCithbHdheXMgXHU4N0I5IDEzLTIzNDUtNQorYWx3YXlzIFx1ODdCQSAxNC0yNS0yCithbHdheXMgXHU4N0JCIDE0LTEyMzU2LTIKK2Fsd2F5cyBcdTg3QkMgMjQ1LTE0NTYtNAorYWx3YXlzIFx1ODdCRCAxLTEyMzQ2LTMKK2Fsd2F5cyBcdTg3QkUgMTQ1Ni00CithbHdheXMgXHU4N0JGIDEzLTQ2LTMKK2Fsd2F5cyBcdTg3QzAgMjQtMjM1Ni01CithbHdheXMgXHU4N0MxIDEyMzQ1Ni0yCithbHdheXMgXHU4N0MyIDEzLTI0Ni0zCithbHdheXMgXHU4N0MzIDEyNDU2LTUKK2Fsd2F5cyBcdTg3QzQgMS0yMzQ2LTIKK2Fsd2F5cyBcdTg3QzUgMS0yMzQ2LTUKK2Fsd2F5cyBcdTg3QzYgMTM0LTM0NS0xCithbHdheXMgXHU4N0M3IDEzNC0zNDUtMQorYWx3YXlzIFx1ODdDOCAxMy0yNS0zCithbHdheXMgXHU4N0M5IDE0LTIzNC0yCithbHdheXMgXHU4N0NBIDEzNC0xNDYtMgorYWx3YXlzIFx1ODdDQiAxNS0xNi0zCithbHdheXMgXHU4N0NDIDI0NS0xMjM0Ni0zCithbHdheXMgXHU4N0NEIDE0LTE2LTIKK2Fsd2F5cyBcdTg3Q0UgMTM0LTEyMzYtMgorYWx3YXlzIFx1ODdDRiAxNS0yNDYtMworYWx3YXlzIFx1ODdEMCAxMi0xMzQ2LTIKK2Fsd2F5cyBcdTg3RDEgMS0xMzQ2LTMKK2Fsd2F5cyBcdTg3RDIgMTM0LTEzNDYtNAorYWx3YXlzIFx1ODdEMyAxNS00Ni01CithbHdheXMgXHU4N0Q0IDEzNC0xMjYtNQorYWx3YXlzIFx1ODdENSAxMjUtMTI0Ni0zCithbHdheXMgXHU4N0Q2IDE1LTE1Ni0zCithbHdheXMgXHU4N0Q3IDI0NS0yMzQtMworYWx3YXlzIFx1ODdEOCAxMjQtMjM0Ni01CithbHdheXMgXHU4N0Q5IDEtMTU2LTIKK2Fsd2F5cyBcdTg3REEgMTIzNC0xMzU2LTIKK2Fsd2F5cyBcdTg3REIgMTIzNC0xMzU2LTIKK2Fsd2F5cyBcdTg3REMgMTMtMjQ2LTQKK2Fsd2F5cyBcdTg3REQgMjQ1LTEyNTYtMgorYWx3YXlzIFx1ODdERSAxMzUtMzQ2LTIKK2Fsd2F5cyBcdTg3REYgMTQtMjQ2LTIKK2Fsd2F5cyBcdTg3RTAgMTIzNC0xMjM2LTIKK2Fsd2F5cyBcdTg3RTEgMTMtMTI0Ni00CithbHdheXMgXHU4N0UyIDE1LTE2LTQKK2Fsd2F5cyBcdTg3RTMgMTMtMTYtNAorYWx3YXlzIFx1ODdFNCAxLTEyNDU2LTMKK2Fsd2F5cyBcdTg3RTUgMTIzNS00NTYtMgorYWx3YXlzIFx1ODdFNiAxMjM0NS0zNTYtNQorYWx3YXlzIFx1ODdFNyAxNC0xNDYtMgorYWx3YXlzIFx1ODdFOCAxMy0yMzYtMgorYWx3YXlzIFx1ODdFOSAxMy0yMzYtMgorYWx3YXlzIFx1ODdFQSAxMjM1LTEyNDYtNQorYWx3YXlzIFx1ODdFQiAxNDU2LTIKK2Fsd2F5cyBcdTg3RUMgMTItMTIzNi0yCithbHdheXMgXHU4N0VEIDEzLTI0Ni0zCithbHdheXMgXHU4N0VFIDI0LTEyMzYtNQorYWx3YXlzIFx1ODdFRiAxMzQ1LTE0Ni0yCithbHdheXMgXHU4N0YwIDE1LTI0Ni0zCithbHdheXMgXHU4N0YxIDM0LTIKK2Fsd2F5cyBcdTg3RjIgMTItMTIzNDYtMgorYWx3YXlzIFx1ODdGMyAxNS0yNTYtMgorYWx3YXlzIFx1ODdGNCAxNS0xNTYtMworYWx3YXlzIFx1ODdGNSAxMi0zNC0yCithbHdheXMgXHU4N0Y2IDEyLTEzNTYtMworYWx3YXlzIFx1ODdGNyAxNDUtMTM0Ni0zCithbHdheXMgXHU4N0Y4IDE0LTE2LTQKK2Fsd2F5cyBcdTg3RjkgMTUtMzQ2LTUKK2Fsd2F5cyBcdTg3RkEgMjQtMTIzNi01CithbHdheXMgXHU4N0ZCIDE2LTQKK2Fsd2F5cyBcdTg3RkMgMTMtMTM0NTYtNAorYWx3YXlzIFx1ODdGRCAxNDUtMzQ1LTIKK2Fsd2F5cyBcdTg3RkUgMTItMTIzNi0yCithbHdheXMgXHU4N0ZGIDI0NS0xNi01CithbHdheXMgXHU4ODAwIDI0NS0xNTYtMworYWx3YXlzIFx1ODgwMSAxNS00Ni01CithbHdheXMgXHU4ODAyIDI0LTIzNDYtNQorYWx3YXlzIFx1ODgwMyAxNC0yNS00CithbHdheXMgXHU4ODA0IDI0NS0xNDU2LTIKK2Fsd2F5cyBcdTg4MDUgMTM0NTYtMgorYWx3YXlzIFx1ODgwNiAxMi0yNDU2LTUKK2Fsd2F5cyBcdTg4MDcgMTQtMTYtNQorYWx3YXlzIFx1ODgwOCAxMjUtMjM0Ni0yCithbHdheXMgXHU4ODA5IDE1LTQ1LTMKK2Fsd2F5cyBcdTg4MEEgMTQtMjM0NS0yCithbHdheXMgXHU4ODBCIDEtMzQtMgorYWx3YXlzIFx1ODgwQyAxMjUtMjM0Ni0yCithbHdheXMgXHU4ODBEIDE1LTM0Ni0zCithbHdheXMgXHU4ODBFIDEzNC0xMzQ2LTQKK2Fsd2F5cyBcdTg4MEYgMTUtMzQ2LTUKK2Fsd2F5cyBcdTg4MTAgMjQ1LTE2LTIKK2Fsd2F5cyBcdTg4MTEgMTI0NS0xMjM0Ni0yCithbHdheXMgXHU4ODEyIDEzLTIzNDUtNAorYWx3YXlzIFx1ODgxMyAxMzQtMTM1Ni00CithbHdheXMgXHU4ODE0IDEyMzUtMTQ2LTIKK2Fsd2F5cyBcdTg4MTUgMTI0NS0zNC0yCithbHdheXMgXHU4ODE2IDEyMzUtMjUtNQorYWx3YXlzIFx1ODgxNyAxLTI1LTIKK2Fsd2F5cyBcdTg4MTggMTMtMzQ2LTIKK2Fsd2F5cyBcdTg4MTkgMTM1LTE0NTYtMworYWx3YXlzIFx1ODgxQSAxMjM1LTIzNDYtNQorYWx3YXlzIFx1ODgxQiAxMzQtMzQ2LTUKK2Fsd2F5cyBcdTg4MUMgMTIzNDUtMTIzNi0yCithbHdheXMgXHU4ODFEIDE0LTM1Ni0yCithbHdheXMgXHU4ODFFIDEzLTM0Ni0yCithbHdheXMgXHU4ODFGIDE0LTM0NS01CithbHdheXMgXHU4ODIwIDEzNC0xNi01CithbHdheXMgXHU4ODIxIDE0LTE2LTIKK2Fsd2F5cyBcdTg4MjIgMTItMTIzNDU2LTQKK2Fsd2F5cyBcdTg4MjMgMTQtMTYtNQorYWx3YXlzIFx1ODgyNCAyNDUtMjM0LTMKK2Fsd2F5cyBcdTg4MjUgMTM0NS0zNDYtNQorYWx3YXlzIFx1ODgyNiAxNC0zNC0yCithbHdheXMgXHU4ODI3IDE0NS0zNC01CithbHdheXMgXHU4ODI4IDE1LTI0Ni0zCithbHdheXMgXHU4ODI5IDEtMzQtMworYWx3YXlzIFx1ODgyQSAxNC0xMjM0Ni0yCithbHdheXMgXHU4ODJCIDE0LTE2LTUKK2Fsd2F5cyBcdTg4MkMgMTQtMTIzNDYtMgorYWx3YXlzIFx1ODgyRCAxMjM0NS0xMzU2LTMKK2Fsd2F5cyBcdTg4MkUgMzQ2LTMKK2Fsd2F5cyBcdTg4MkYgMTIzNC0xNi0yCithbHdheXMgXHU4ODMwIDEzNDUtMTM0Ni0yCithbHdheXMgXHU4ODMxIDEzLTM0LTQKK2Fsd2F5cyBcdTg4MzIgMTMtNDUtMworYWx3YXlzIFx1ODgzMyAxMzQ1Ni0zCithbHdheXMgXHU4ODM0IDI0LTM0LTQKK2Fsd2F5cyBcdTg4MzUgMTUtMTYtMworYWx3YXlzIFx1ODgzNiAyNDUtMTIzNi0yCithbHdheXMgXHU4ODM3IDI0NS0xMjU2LTIKK2Fsd2F5cyBcdTg4MzggMjQ1LTQ1LTIKK2Fsd2F5cyBcdTg4MzkgMTQ1LTM0LTUKK2Fsd2F5cyBcdTg4M0EgMjQ1LTEyMzYtMgorYWx3YXlzIFx1ODgzQiAxMzQtMTIzNi0yCithbHdheXMgXHU4ODNDIDEzLTIzNi0yCithbHdheXMgXHU4ODNEIDEzLTM0Ni0yCithbHdheXMgXHU4ODNFIDEtMzQtMgorYWx3YXlzIFx1ODgzRiAxLTI1LTMKK2Fsd2F5cyBcdTg4NDAgMTUtMzQ2LTQKK2Fsd2F5cyBcdTg4NDEgMTIzNS00NTYtMworYWx3YXlzIFx1ODg0MiAxMzQ1LTEyNTYtNQorYWx3YXlzIFx1ODg0MyAxMjM0LTM1Ni0zCithbHdheXMgXHU4ODQ0IDEzNDUtMTI1Ni01CithbHdheXMgXHU4ODQ1IDE1LTE0NTYtNQorYWx3YXlzIFx1ODg0NiAxLTEyMzQ2LTUKK2Fsd2F5cyBcdTg4NDcgMTM0LTI0NTYtNQorYWx3YXlzIFx1ODg0OCAxNTYtNQorYWx3YXlzIFx1ODg0OSAxMjMtMjM0Ni01CithbHdheXMgXHU4ODRBIDEzNC0zNDYtNQorYWx3YXlzIFx1ODg0QiAxNS0xNi01CithbHdheXMgXHU4ODRDIDE1LTEzNDU2LTIKK2Fsd2F5cyBcdTg4NEQgMjM0NS00CithbHdheXMgXHU4ODRFIDEyMy0xMjM2LTUKK2Fsd2F5cyBcdTg4NEYgNDUtNQorYWx3YXlzIFx1ODg1MCAyNDUtMTI1Ni0yCithbHdheXMgXHU4ODUxIDE0LTEzNDU2LTIKK2Fsd2F5cyBcdTg4NTIgMTUtNDUtNQorYWx3YXlzIFx1ODg1MyAyNC0zNC01CithbHdheXMgXHU4ODU0IDE1LTIzNDUtMgorYWx3YXlzIFx1ODg1NSAxMjQtMTIzNDYtNQorYWx3YXlzIFx1ODg1NiAxNS00Ni01CithbHdheXMgXHU4ODU3IDEzLTM0Ni0zCithbHdheXMgXHU4ODU4IDE1LTIzNDUtMgorYWx3YXlzIFx1ODg1OSAyMzQ1Ni0yCithbHdheXMgXHU4ODVBIDEyMzUtMzQtMgorYWx3YXlzIFx1ODg1QiAxMjQ2LTUKK2Fsd2F5cyBcdTg4NUMgMTQ1LTE0Ni01CithbHdheXMgXHU4ODVEIDEyLTEyMzQ2LTMKK2Fsd2F5cyBcdTg4NUUgMTI0Ni01CithbHdheXMgXHU4ODVGIDE0NS0xNDYtNQorYWx3YXlzIFx1ODg2MCAxLTEyMzQ1Ni0zCithbHdheXMgXHU4ODYxIDEyMzUtMTM1Ni0yCithbHdheXMgXHU4ODYyIDI0NS0xMjU2LTIKK2Fsd2F5cyBcdTg4NjMgMTYtMworYWx3YXlzIFx1ODg2NCAxNi0zCithbHdheXMgXHU4ODY1IDEzNS0zNC00CithbHdheXMgXHU4ODY2IDEzLTEyMzYtNAorYWx3YXlzIFx1ODg2NyAxMjU2LTIKK2Fsd2F5cyBcdTg4NjggMTM1LTI0Ni00CithbHdheXMgXHU4ODY5IDEyLTM0NS01CithbHdheXMgXHU4ODZBIDE2LTUKK2Fsd2F5cyBcdTg4NkIgMjQtMTIzNi0zCithbHdheXMgXHU4ODZDIDEyLTEzNi01CithbHdheXMgXHU4ODZEIDEyMzQ1LTM0LTMKK2Fsd2F5cyBcdTg4NkUgMTMtMTIzNDU2LTQKK2Fsd2F5cyBcdTg4NkYgMTIzNDUtMTM2LTMKK2Fsd2F5cyBcdTg4NzAgMjQtMjM1Ni0zCithbHdheXMgXHU4ODcxIDEzLTM0Ni0yCithbHdheXMgXHU4ODcyIDEzNDUtMzQ1LTUKK2Fsd2F5cyBcdTg4NzMgMS0xMjM0Ni0zCithbHdheXMgXHU4ODc0IDE0NS0xMjM2LTQKK2Fsd2F5cyBcdTg4NzUgMTI0NS0xNTYtNQorYWx3YXlzIFx1ODg3NiAxLTEyMzQ2LTUKK2Fsd2F5cyBcdTg4NzcgMS0xMjM0Ni0zCithbHdheXMgXHU4ODc4IDE1LTM0Ni01CithbHdheXMgXHU4ODc5IDEtMTU2LTMKK2Fsd2F5cyBcdTg4N0EgMTUtMzQ2LTIKK2Fsd2F5cyBcdTg4N0IgMTI0NS0xMjM2LTIKK2Fsd2F5cyBcdTg4N0MgMS0xNTYtMworYWx3YXlzIFx1ODg3RCAxMjQ1LTEzNi01CithbHdheXMgXHU4ODdFIDI0NS0xNDU2LTMKK2Fsd2F5cyBcdTg4N0YgMTMtMTQ1Ni0zCithbHdheXMgXHU4ODgwIDEzLTI1Ni0zCithbHdheXMgXHU4ODgxIDQ1LTIKK2Fsd2F5cyBcdTg4ODIgMTM0LTM1Ni01CithbHdheXMgXHU4ODgzIDEyLTI0NTYtNQorYWx3YXlzIFx1ODg4NCAxNDYtNAorYWx3YXlzIFx1ODg4NSAxMzQ1LTI0Ni00CithbHdheXMgXHU4ODg2IDEyMzUtMTI0Ni0zCithbHdheXMgXHU4ODg3IDEyNDUtMTIzNi0yCithbHdheXMgXHU4ODg4IDEzLTIzNDU2LTMKK2Fsd2F5cyBcdTg4ODkgMTI0LTI1LTIKK2Fsd2F5cyBcdTg4OEEgMTQtMTM0NTYtNAorYWx3YXlzIFx1ODg4QiAxNDUtMjQ1Ni01CithbHdheXMgXHU4ODhDIDEzNS0xNDYtNQorYWx3YXlzIFx1ODg4RCAxMjM0LTE0Ni0yCithbHdheXMgXHU4ODhFIDI0Ni01CithbHdheXMgXHU4ODhGIDEyNS0yNS01CithbHdheXMgXHU4ODkwIDEzNS0xNi01CithbHdheXMgXHU4ODkxIDI0LTE0Ni01CithbHdheXMgXHU4ODkyIDEyNC0xMjM2LTQKK2Fsd2F5cyBcdTg4OTMgMTMtMTI1Ni00CithbHdheXMgXHU4ODk0IDEyMzUtMjM0Ni01CithbHdheXMgXHU4ODk1IDE1LTIzNi01CithbHdheXMgXHU4ODk2IDE1LTIzNC01CithbHdheXMgXHU4ODk3IDEtMTM2LTQKK2Fsd2F5cyBcdTg4OTggMTYtMgorYWx3YXlzIFx1ODg5OSAxMjM0LTM0NS01CithbHdheXMgXHU4ODlBIDEyMzQ1LTM0LTIKK2Fsd2F5cyBcdTg4OUIgMTQ1LTE2LTMKK2Fsd2F5cyBcdTg4OUMgMTM0LTEyNi01CithbHdheXMgXHU4ODlEIDEyMzQ1LTM0LTUKK2Fsd2F5cyBcdTg4OUUgMTMtMTIzNDU2LTQKK2Fsd2F5cyBcdTg4OUYgMS0xNTYtNQorYWx3YXlzIFx1ODhBMCAxLTE1Ni01CithbHdheXMgXHU4OEExIDEyNDUtMTIzNi0yCithbHdheXMgXHU4OEEyIDEyMzQtMTIzNi01CithbHdheXMgXHU4OEEzIDE2LTUKK2Fsd2F5cyBcdTg4QTQgMTM0LTE0Ni01CithbHdheXMgXHU4OEE1IDEyNC0yNS0zCithbHdheXMgXHU4OEE2IDEzNDUtMzQ1LTUKK2Fsd2F5cyBcdTg4QTcgMTIzLTEyMzU2LTMKK2Fsd2F5cyBcdTg4QTggMTUtNDUtNQorYWx3YXlzIFx1ODhBOSAxMi0xMjM2LTMKK2Fsd2F5cyBcdTg4QUEgMjQ1LTEyNTYtMworYWx3YXlzIFx1ODhBQiAxMzUtMzU2LTUKK2Fsd2F5cyBcdTg4QUMgMTI1Ni01CithbHdheXMgXHU4OEFEIDE1LTE2LTIKK2Fsd2F5cyBcdTg4QUUgMTM0LTE2LTIKK2Fsd2F5cyBcdTg4QUYgMTM1LTEyNi0yCithbHdheXMgXHU4OEIwIDEzNC0zNC00CithbHdheXMgXHU4OEIxIDEyMzQ1LTM0LTIKK2Fsd2F5cyBcdTg4QjIgMTYtMgorYWx3YXlzIFx1ODhCMyAxMi0xNTYtNAorYWx3YXlzIFx1ODhCNCAxMjMtMzQtNQorYWx3YXlzIFx1ODhCNSAxMjQ1LTEzNi01CithbHdheXMgXHU4OEI2IDEzLTQ2LTUKK2Fsd2F5cyBcdTg4QjcgMTMtMjM0NTYtMgorYWx3YXlzIFx1ODhCOCAyNDUtMTIzNDU2LTIKK2Fsd2F5cyBcdTg4QjkgMTM1LTEyNi0yCithbHdheXMgXHU4OEJBIDEzLTM0Ni0yCithbHdheXMgXHU4OEJCIDE1Ni0yCithbHdheXMgXHU4OEJDIDEzLTIzNDYtNQorYWx3YXlzIFx1ODhCRCAxMjQ1LTM0LTIKK2Fsd2F5cyBcdTg4QkUgMS0zNC0zCithbHdheXMgXHU4OEJGIDEzLTEyNDYtMworYWx3YXlzIFx1ODhDMCAxNDU2LTMKK2Fsd2F5cyBcdTg4QzEgMjQ1LTI0NTYtMgorYWx3YXlzIFx1ODhDMiAxNC0zNDYtNQorYWx3YXlzIFx1ODhDMyAxMjMtMzQ1LTQKK2Fsd2F5cyBcdTg4QzQgMTUtMTM0NTYtMgorYWx3YXlzIFx1ODhDNSAxLTQ1Ni0zCithbHdheXMgXHU4OEM2IDE0NS0xMzQ2LTMKK2Fsd2F5cyBcdTg4QzcgMTUtMTI1Ni0zCithbHdheXMgXHU4OEM4IDEyMy0xMjM0NTYtMworYWx3YXlzIFx1ODhDOSAxMjMtMTM2LTUKK2Fsd2F5cyBcdTg4Q0EgMTM0NS0yNDYtNAorYWx3YXlzIFx1ODhDQiAyNC0zNC01CithbHdheXMgXHU4OENDIDEzLTIzNDU2LTIKK2Fsd2F5cyBcdTg4Q0QgMTIzLTEyMzQ1Ni00CithbHdheXMgXHU4OENFIDEyLTEzNTYtMgorYWx3YXlzIFx1ODhDRiAxNC0xNi00CithbHdheXMgXHU4OEQwIDEzLTQ1LTMKK2Fsd2F5cyBcdTg4RDEgMjQtMTM2LTMKK2Fsd2F5cyBcdTg4RDIgMTIzNC0xMjM1Ni0yCithbHdheXMgXHU4OEQzIDEzLTIzNDYtMgorYWx3YXlzIFx1ODhENCAxNi01CithbHdheXMgXHU4OEQ1IDEyNTYtNQorYWx3YXlzIFx1ODhENiAxLTEzNi00CithbHdheXMgXHU4OEQ3IDE0LTIzNC0yCithbHdheXMgXHU4OEQ4IDI0NS0yMzQtMgorYWx3YXlzIFx1ODhEOSAyNDUtMjU2LTIKK2Fsd2F5cyBcdTg4REEgMTMtMTYtNQorYWx3YXlzIFx1ODhEQiAxNi01CithbHdheXMgXHU4OERDIDEzNS0zNC00CithbHdheXMgXHU4OEREIDEtNDU2LTMKK2Fsd2F5cyBcdTg4REUgMjQtMTI0Ni01CithbHdheXMgXHU4OERGIDI0LTM0NS0zCithbHdheXMgXHU4OEUwIDI0NS0yNTYtMgorYWx3YXlzIFx1ODhFMSAxNC0xNi00CithbHdheXMgXHU4OEUyIDE0LTIzNDUtMgorYWx3YXlzIFx1ODhFMyAxNC0yMzQ1LTQKK2Fsd2F5cyBcdTg4RTQgMTIzLTM0LTUKK2Fsd2F5cyBcdTg4RTUgMTMtMjM0NS00CithbHdheXMgXHU4OEU2IDEzNS0xNDYtMworYWx3YXlzIFx1ODhFNyAxMi0xMjM2LTMKK2Fsd2F5cyBcdTg4RTggMTM1LTE2LTUKK2Fsd2F5cyBcdTg4RTkgMTMtMTIzNDU2LTMKK2Fsd2F5cyBcdTg4RUEgMTI0LTE0Ni0yCithbHdheXMgXHU4OEVCIDQ1LTUKK2Fsd2F5cyBcdTg4RUMgMTQtMTM0NTYtMgorYWx3YXlzIFx1ODhFRCAxMi0xNTYtNAorYWx3YXlzIFx1ODhFRSAxMi0xMzQ2LTMKK2Fsd2F5cyBcdTg4RUYgMTItMTIzNTYtMgorYWx3YXlzIFx1ODhGMCAxNDUtMjUtMworYWx3YXlzIFx1ODhGMSAxMzUtMjQ2LTQKK2Fsd2F5cyBcdTg4RjIgMTQtNDYtNAorYWx3YXlzIFx1ODhGMyAyNC0xMzQ2LTMKK2Fsd2F5cyBcdTg4RjQgMTIzNC0zNTYtMgorYWx3YXlzIFx1ODhGNSAxMjM0LTM1Ni0yCithbHdheXMgXHU4OEY2IDEyMzQ1LTM1Ni0zCithbHdheXMgXHU4OEY3IDQ1LTMKK2Fsd2F5cyBcdTg4RjggMTQtMjUtNAorYWx3YXlzIFx1ODhGOSAxMy0yNS00CithbHdheXMgXHU4OEZBIDIzNDUtNAorYWx3YXlzIFx1ODhGQiAxNDUtMzQtNAorYWx3YXlzIFx1ODhGQyAxMjQtMTYtNQorYWx3YXlzIFx1ODhGRCAxLTE1Ni01CithbHdheXMgXHU4OEZFIDEzLTEyNTYtMworYWx3YXlzIFx1ODhGRiAyNDUtMTYtNAorYWx3YXlzIFx1ODkwMCAxMy0xNi01CithbHdheXMgXHU4OTAxIDEtMTU2LTIKK2Fsd2F5cyBcdTg5MDIgMTMtMzUtNQorYWx3YXlzIFx1ODkwMyAxMjMtMTM2LTUKK2Fsd2F5cyBcdTg5MDQgMjQ1LTE2LTMKK2Fsd2F5cyBcdTg5MDUgMTI0LTE2LTUKK2Fsd2F5cyBcdTg5MDYgMTI0LTE2LTIKK2Fsd2F5cyBcdTg5MDcgMTIzNDUtMzQtNQorYWx3YXlzIFx1ODkwOCAxMi0xMjM0Ni0yCithbHdheXMgXHU4OTA5IDE1LTM0Ni0zCithbHdheXMgXHU4OTBBIDEzNS0yMzQ1LTQKK2Fsd2F5cyBcdTg5MEIgMTQ1LTM0Ni0yCithbHdheXMgXHU4OTBDIDEyMy0xMjM0NTYtMworYWx3YXlzIFx1ODkwRCAxNDUtMTI0NTYtMworYWx3YXlzIFx1ODkwRSAxNS0yMzQtNQorYWx3YXlzIFx1ODkwRiAxNS0yMzQtNQorYWx3YXlzIFx1ODkxMCAxMjM1LTIzNDYtMgorYWx3YXlzIFx1ODkxMSA0NS01CithbHdheXMgXHU4OTEyIDEzNS0xNDYtMworYWx3YXlzIFx1ODkxMyAxMzUtMTQ2LTQKK2Fsd2F5cyBcdTg5MTQgMTIzNDUtMzQtNQorYWx3YXlzIFx1ODkxNSAxMjU2LTIKK2Fsd2F5cyBcdTg5MTYgMTI0LTEyNDU2LTUKK2Fsd2F5cyBcdTg5MTcgMjM0NS00CithbHdheXMgXHU4OTE4IDEyMzUtMTI0Ni0zCithbHdheXMgXHU4OTE5IDEzNS0zNTYtNQorYWx3YXlzIFx1ODkxQSAxMi0zNC00CithbHdheXMgXHU4OTFCIDE0LTEyNTYtNAorYWx3YXlzIFx1ODkxQyAxMjM0LTE0Ni0yCithbHdheXMgXHU4OTFEIDE0NS0xMjM2LTMKK2Fsd2F5cyBcdTg5MUUgMjU2LTQKK2Fsd2F5cyBcdTg5MUYgMTQ1LTM0NS0yCithbHdheXMgXHU4OTIwIDEzLTEyMzU2LTMKK2Fsd2F5cyBcdTg5MjEgMTQ1LTM0NS0zCithbHdheXMgXHU4OTIyIDEyMzUtMjM1Ni0yCithbHdheXMgXHU4OTIzIDEyNDUtMTIzNDYtMgorYWx3YXlzIFx1ODkyNCA0NS01CithbHdheXMgXHU4OTI1IDEyNDUtMzQtNQorYWx3YXlzIFx1ODkyNiAxMzQ1LTI0NTYtNQorYWx3YXlzIFx1ODkyNyAxMy0yMzUtNAorYWx3YXlzIFx1ODkyOCAxNS0yNS00CithbHdheXMgXHU4OTI5IDEzNS0xMjM2LTMKK2Fsd2F5cyBcdTg5MkEgMTI0LTEyMzQ1Ni01CithbHdheXMgXHU4OTJCIDEyLTE1Ni00CithbHdheXMgXHU4OTJDIDE1LTEzNDYtNAorYWx3YXlzIFx1ODkyRCAxMzQ1LTI0Ni00CithbHdheXMgXHU4OTJFIDEzNDU2LTMKK2Fsd2F5cyBcdTg5MkYgMTMtMzQ2LTUKK2Fsd2F5cyBcdTg5MzAgMjQ1LTIzNDUtMworYWx3YXlzIFx1ODkzMSAxMjM1LTIzNTYtMgorYWx3YXlzIFx1ODkzMiAxMjMtMzQtNQorYWx3YXlzIFx1ODkzMyAxNC0yMzQ1LTIKK2Fsd2F5cyBcdTg5MzQgMTQtMTIzNi0yCithbHdheXMgXHU4OTM1IDE0LTE2LTIKK2Fsd2F5cyBcdTg5MzYgMS0yMzQ2LTQKK2Fsd2F5cyBcdTg5MzcgMjQtMTU2LTMKK2Fsd2F5cyBcdTg5MzggMTQtMTI1Ni00CithbHdheXMgXHU4OTM5IDE2LTUKK2Fsd2F5cyBcdTg5M0EgMTQ1LTM0Ni0yCithbHdheXMgXHU4OTNCIDE1LTM0Ni01CithbHdheXMgXHU4OTNDIDE1LTIzNDUtMworYWx3YXlzIFx1ODkzRCAxMjQ2LTUKK2Fsd2F5cyBcdTg5M0UgMTM1LTI0Ni00CithbHdheXMgXHU4OTNGIDI0NS0xNDYtMgorYWx3YXlzIFx1ODk0MCAxMy0xNi0zCithbHdheXMgXHU4OTQxIDI0NS00Ni00CithbHdheXMgXHU4OTQyIDI0LTEyMzYtMworYWx3YXlzIFx1ODk0MyAxMzUtMTQ2LTMKK2Fsd2F5cyBcdTg5NDQgMTUtNDYtMworYWx3YXlzIFx1ODk0NSAxNDUtMTYtNQorYWx3YXlzIFx1ODk0NiAxMjM0LTM0LTIKK2Fsd2F5cyBcdTg5NDcgMTMtMjM0NS00CithbHdheXMgXHU4OTQ4IDEtMTI0NTYtNQorYWx3YXlzIFx1ODk0OSAxMy0yMzQ1LTQKK2Fsd2F5cyBcdTg5NEEgMTI1LTEyNDYtNQorYWx3YXlzIFx1ODk0QiAxMy0xNi0yCithbHdheXMgXHU4OTRDIDE0NS0xMjM2LTMKK2Fsd2F5cyBcdTg5NEQgMTI1LTM0NS0yCithbHdheXMgXHU4OTRFIDEyMzQ1LTEyMzYtMgorYWx3YXlzIFx1ODk0RiAxMzUtMTI2LTIKK2Fsd2F5cyBcdTg5NTAgMTUtNDYtNQorYWx3YXlzIFx1ODk1MSAxNS0xNDU2LTIKK2Fsd2F5cyBcdTg5NTIgMTM1LTM0Ni0yCithbHdheXMgXHU4OTUzIDEyNDUtMTQ2LTIKK2Fsd2F5cyBcdTg5NTQgMTM0LTEyMzYtNAorYWx3YXlzIFx1ODk1NSAxNC0xMjM2LTIKK2Fsd2F5cyBcdTg5NTYgMTQ2LTQKK2Fsd2F5cyBcdTg5NTcgMTQ1LTI1LTIKK2Fsd2F5cyBcdTg5NTggMTMtMTI0Ni01CithbHdheXMgXHU4OTU5IDI0NS0xNDYtNQorYWx3YXlzIFx1ODk1QSAxNS0xMjQ2LTUKK2Fsd2F5cyBcdTg5NUIgMTM0NS0xMjM0Ni0yCithbHdheXMgXHU4OTVDIDEyLTEyMzYtMworYWx3YXlzIFx1ODk1RCAxNC0yMzQ1LTUKK2Fsd2F5cyBcdTg5NUUgMTM1LTE2LTUKK2Fsd2F5cyBcdTg5NUYgMTMtMTQ1Ni0zCithbHdheXMgXHU4OTYwIDE0NS0xMzQ2LTMKK2Fsd2F5cyBcdTg5NjEgMjQtMzQtMgorYWx3YXlzIFx1ODk2MiAxMjQtMTIzNi00CithbHdheXMgXHU4OTYzIDEzNS0xNi01CithbHdheXMgXHU4OTY0IDE0LTEyMzYtMgorYWx3YXlzIFx1ODk2NSAxMjM0LTM0LTIKK2Fsd2F5cyBcdTg5NjYgMTI0NS0zNC0yCithbHdheXMgXHU4OTY3IDEtMTU2LTQKK2Fsd2F5cyBcdTg5NjggMTIzLTM0NS0zCithbHdheXMgXHU4OTY5IDI0LTM0LTQKK2Fsd2F5cyBcdTg5NkEgMzUtNQorYWx3YXlzIFx1ODk2QiAyNC0xNTYtNQorYWx3YXlzIFx1ODk2QyAxMzUtMjQ1Ni00CithbHdheXMgXHU4OTZEIDE1LTM0Ni0yCithbHdheXMgXHU4OTZFIDEzNS0xMjYtMgorYWx3YXlzIFx1ODk2RiAxMi0xMzYtNQorYWx3YXlzIFx1ODk3MCAxNC0yNDU2LTUKK2Fsd2F5cyBcdTg5NzEgMTQtMTIzNDYtMgorYWx3YXlzIFx1ODk3MiAxNS0xNi0yCithbHdheXMgXHU4OTczIDE1LTIzNDUtMworYWx3YXlzIFx1ODk3NCAxNC0xMjM2LTIKK2Fsd2F5cyBcdTg5NzUgMS0yMzQ2LTIKK2Fsd2F5cyBcdTg5NzYgMTQ1LTI0NTYtNQorYWx3YXlzIFx1ODk3NyAxMy0xMjU2LTQKK2Fsd2F5cyBcdTg5NzggMTI1LTEyMzYtNQorYWx3YXlzIFx1ODk3OSAyNC0xNTYtMworYWx3YXlzIFx1ODk3QSAxMy0yMzQ1LTQKK2Fsd2F5cyBcdTg5N0IgMTIzNC0xMjM2LTUKK2Fsd2F5cyBcdTg5N0MgMTYtNQorYWx3YXlzIFx1ODk3RCAxNC0xMjM2LTIKK2Fsd2F5cyBcdTg5N0UgMjM0NTYtNQorYWx3YXlzIFx1ODk3RiAxNS0xNi0zCithbHdheXMgXHU4OTgwIDE1LTE2LTMKK2Fsd2F5cyBcdTg5ODEgMjQ2LTUKK2Fsd2F5cyBcdTg5ODIgMTIzNDUtMTM1Ni00CithbHdheXMgXHU4OTgzIDEyNC0xMjM2LTIKK2Fsd2F5cyBcdTg5ODQgMTIzNDUtMzQtNQorYWx3YXlzIFx1ODk4NSAxMjM0NS0yNDYtNQorYWx3YXlzIFx1ODk4NiAxMjM0NS0zNC01CithbHdheXMgXHU4OTg3IDEzNS0zNDUtNQorYWx3YXlzIFx1ODk4OCAxMjM1LTIzNDYtMgorYWx3YXlzIFx1ODk4OSAxMy0xNi0zCithbHdheXMgXHU4OThBIDEzLTE2LTMKK2Fsd2F5cyBcdTg5OEIgMTMtMjM0NS01CithbHdheXMgXHU4OThDIDEzLTEyNDU2LTMKK2Fsd2F5cyBcdTg5OEQgMTM1LTIzNDUtNQorYWx3YXlzIFx1ODk4RSAyMzQ1LTUKK2Fsd2F5cyBcdTg5OEYgMTMtMTI0Ni0zCithbHdheXMgXHU4OTkwIDEzLTIzNi0yCithbHdheXMgXHU4OTkxIDEyMzQtMjM0NS00CithbHdheXMgXHU4OTkyIDEzNC0xNDYtMgorYWx3YXlzIFx1ODk5MyAxMzQtMTYtNQorYWx3YXlzIFx1ODk5NCAxMzQtMTYtNQorYWx3YXlzIFx1ODk5NSAxMjM0LTM0Ni0zCithbHdheXMgXHU4OTk2IDI0LTE1Ni01CithbHdheXMgXHU4OTk3IDE1LTE1Ni0zCithbHdheXMgXHU4OTk4IDEtMTIzNi0zCithbHdheXMgXHU4OTk5IDE0LTI1LTIKK2Fsd2F5cyBcdTg5OUEgMTMtMjM2LTIKK2Fsd2F5cyBcdTg5OUIgMTM0LTE2LTUKK2Fsd2F5cyBcdTg5OUMgMTI0LTI0Ni01CithbHdheXMgXHU4OTlEIDE0LTIzNDUtMgorYWx3YXlzIFx1ODk5RSAyNDYtNQorYWx3YXlzIFx1ODk5RiAxLTE1Ni01CithbHdheXMgXHU4OUEwIDEzLTI1Ni0zCithbHdheXMgXHU4OUExIDE1LTE2LTIKK2Fsd2F5cyBcdTg5QTIgMjQtMTIzNi00CithbHdheXMgXHU4OUEzIDEyNDYtMworYWx3YXlzIFx1ODlBNCAxNS0xNi01CithbHdheXMgXHU4OUE1IDEyNC0yMzQ1LTQKK2Fsd2F5cyBcdTg5QTYgMTI1Ni0yCithbHdheXMgXHU4OUE3IDE0LTEyMzYtNAorYWx3YXlzIFx1ODlBOCAyMzQ2LTUKK2Fsd2F5cyBcdTg5QTkgMTQ1LTM0LTQKK2Fsd2F5cyBcdTg5QUEgMjQ1LTE0NTYtMworYWx3YXlzIFx1ODlBQiAxMjM0LTEzNDYtNAorYWx3YXlzIFx1ODlBQyAxMy0xNi01CithbHdheXMgXHU4OUFEIDEzNC0xMzQ1Ni0yCithbHdheXMgXHU4OUFFIDEzNDU2LTIKK2Fsd2F5cyBcdTg5QUYgMTMtMTIzNTYtNQorYWx3YXlzIFx1ODlCMCAyNDUtMTI1Ni01CithbHdheXMgXHU4OUIxIDEtMTIzNi01CithbHdheXMgXHU4OUIyIDEzLTE0NTYtNQorYWx3YXlzIFx1ODlCMyAxMy0xMjQ1Ni0zCithbHdheXMgXHU4OUI0IDE0NS0xMzU2LTMKK2Fsd2F5cyBcdTg5QjUgMTMtMjM0NS01CithbHdheXMgXHU4OUI2IDE0LTI1LTIKK2Fsd2F5cyBcdTg5QjcgMjQ1LTEyNTYtNQorYWx3YXlzIFx1ODlCOCAxMy0yMzQ1LTUKK2Fsd2F5cyBcdTg5QjkgMTI0Ni0yCithbHdheXMgXHU4OUJBIDEzLTIzNi0yCithbHdheXMgXHU4OUJCIDI0NS0xMjU2LTUKK2Fsd2F5cyBcdTg5QkMgMTQtMjUtMgorYWx3YXlzIFx1ODlCRCAxNC0xMjM2LTQKK2Fsd2F5cyBcdTg5QkUgMjQtMTM2LTQKK2Fsd2F5cyBcdTg5QkYgMTQ1LTE2LTIKK2Fsd2F5cyBcdTg5QzAgMTMtMTI0NTYtMworYWx3YXlzIFx1ODlDMSAxMy0yMzQ1LTUKK2Fsd2F5cyBcdTg5QzIgMTMtMTI0NTYtMworYWx3YXlzIFx1ODlDMyAyMzQ1LTUKK2Fsd2F5cyBcdTg5QzQgMTMtMTI0Ni0zCithbHdheXMgXHU4OUM1IDEzNC0xNi01CithbHdheXMgXHU4OUM2IDI0LTE1Ni01CithbHdheXMgXHU4OUM3IDEyLTEyMzYtMworYWx3YXlzIFx1ODlDOCAxNC0xMjM2LTQKK2Fsd2F5cyBcdTg5QzkgMTMtMjM2LTIKK2Fsd2F5cyBcdTg5Q0EgMTMtMTYtNQorYWx3YXlzIFx1ODlDQiAxNS0xNi0yCithbHdheXMgXHU4OUNDIDE0NS0xNi0yCithbHdheXMgXHU4OUNEIDEyNC0yMzQ1LTQKK2Fsd2F5cyBcdTg5Q0UgMTI1Ni0yCithbHdheXMgXHU4OUNGIDEzLTEyMzU2LTUKK2Fsd2F5cyBcdTg5RDAgMTMtMTQ1Ni01CithbHdheXMgXHU4OUQxIDI0NS0xMjU2LTUKK2Fsd2F5cyBcdTg5RDIgMTMtMjQ2LTQKK2Fsd2F5cyBcdTg5RDMgMjQ1LTIzNC0yCithbHdheXMgXHU4OUQ0IDEzLTE0NTYtMworYWx3YXlzIFx1ODlENSAyNDUtMzQtMworYWx3YXlzIFx1ODlENiAxMy0yMzYtMgorYWx3YXlzIFx1ODlENyAxLTE1Ni01CithbHdheXMgXHU4OUQ4IDEyLTE0Ni01CithbHdheXMgXHU4OUQ5IDEzLTE2LTIKK2Fsd2F5cyBcdTg5REEgMTMtMzQtMworYWx3YXlzIFx1ODlEQiAxNDUtMTIzNi01CithbHdheXMgXHU4OURDIDEyNS0xMjQ2LTQKK2Fsd2F5cyBcdTg5REQgMTQ1LTE2LTQKK2Fsd2F5cyBcdTg5REUgMjQtMTM0Ni0zCithbHdheXMgXHU4OURGIDEyMzUtMzUtNQorYWx3YXlzIFx1ODlFMCAyNDUtNDUtMgorYWx3YXlzIFx1ODlFMSAxMy0yMzQ2LTIKK2Fsd2F5cyBcdTg5RTIgMjQtMTU2LTUKK2Fsd2F5cyBcdTg5RTMgMTMtMzQ2LTQKK2Fsd2F5cyBcdTg5RTQgMTMtMTI0Ni00CithbHdheXMgXHU4OUU1IDEzLTEyMzQ2LTMKK2Fsd2F5cyBcdTg5RTYgMTItMzQtNQorYWx3YXlzIFx1ODlFNyAxMy0zNDYtNAorYWx3YXlzIFx1ODlFOCAxMjM1LTEyMzQ1Ni01CithbHdheXMgXHU4OUU5IDI0NS0yMzQtMgorYWx3YXlzIFx1ODlFQSAxNS0xMzQ1Ni0zCithbHdheXMgXHU4OUVCIDE1LTM0LTUKK2Fsd2F5cyBcdTg5RUMgMTM0NS0xNi0yCithbHdheXMgXHU4OUVEIDI0NS0xNi0zCithbHdheXMgXHU4OUVFIDE0LTM0LTUKK2Fsd2F5cyBcdTg5RUYgMS0xNTYtNQorYWx3YXlzIFx1ODlGMCAxLTM0NS0zCithbHdheXMgXHU4OUYxIDEzNS0xNi01CithbHdheXMgXHU4OUYyIDE1LTEzNDU2LTMKK2Fsd2F5cyBcdTg5RjMgMTIzNS0zNC0yCithbHdheXMgXHU4OUY0IDI0LTEzNDYtMworYWx3YXlzIFx1ODlGNSAxMy0xMjM0Ni0zCithbHdheXMgXHU4OUY2IDEtMTU2LTUKK2Fsd2F5cyBcdTg5RjcgMTUtMjM2LTIKK2Fsd2F5cyBcdTg5RjggMTItMzQtNQorYWx3YXlzIFx1ODlGOSAxNS0xNi0zCithbHdheXMgXHU4OUZBIDE2LTIKK2Fsd2F5cyBcdTg5RkIgMTQtMzQtNQorYWx3YXlzIFx1ODlGQyAxMy0yMzYtMgorYWx3YXlzIFx1ODlGRCAxNS0xNi0zCithbHdheXMgXHU4OUZFIDIzNDUtNQorYWx3YXlzIFx1ODlGRiAxNS0xNi0zCithbHdheXMgXHU4QTAwIDIzNDUtMgorYWx3YXlzIFx1OEEwMSAyMzQ1LTIKK2Fsd2F5cyBcdThBMDIgMTQ1LTEzNDU2LTUKK2Fsd2F5cyBcdThBMDMgMTIzNDUtMzQtNQorYWx3YXlzIFx1OEEwNCAyNDUtMjM0LTIKK2Fsd2F5cyBcdThBMDUgMjQ1LTIzNC0yCithbHdheXMgXHU4QTA2IDEzLTI0Ni01CithbHdheXMgXHU4QTA3IDEyMzUtMTIzNDYtMworYWx3YXlzIFx1OEEwOCAxMy0xNi01CithbHdheXMgXHU4QTA5IDEyMzQ1LTEyMzYtNQorYWx3YXlzIFx1OEEwQSAxNS0yNTYtNQorYWx3YXlzIFx1OEEwQiAxNDUtMjQ2LTUKK2Fsd2F5cyBcdThBMEMgMTIzNS0xMjM0Ni01CithbHdheXMgXHU4QTBEIDEyLTM0NS01CithbHdheXMgXHU4QTBFIDEyNC0xNDYtNAorYWx3YXlzIFx1OEEwRiAxNS0xMjU2LTMKK2Fsd2F5cyBcdThBMTAgMTMtMzQ2LTIKK2Fsd2F5cyBcdThBMTEgMTYtMgorYWx3YXlzIFx1OEExMiAxMjQ1LTEzNi01CithbHdheXMgXHU4QTEzIDE1LTI1Ni01CithbHdheXMgXHU4QTE0IDE0NTYtMgorYWx3YXlzIFx1OEExNSAyNC0xMjM2LTUKK2Fsd2F5cyBcdThBMTYgMjQ1LTE2LTUKK2Fsd2F5cyBcdThBMTcgMTI0LTI1LTMKK2Fsd2F5cyBcdThBMTggMTMtMTYtNQorYWx3YXlzIFx1OEExOSAxNS0yNTYtNQorYWx3YXlzIFx1OEExQSAxNDU2LTIKK2Fsd2F5cyBcdThBMUIgMjM0Ni0yCithbHdheXMgXHU4QTFDIDEyMzQ1LTEzNi0zCithbHdheXMgXHU4QTFEIDIzNDU2LTUKK2Fsd2F5cyBcdThBMUUgMjQ2LTMKK2Fsd2F5cyBcdThBMUYgMTUtMTIzNDYtNQorYWx3YXlzIFx1OEEyMCAyNC0xMzYtNAorYWx3YXlzIFx1OEEyMSAxNDU2LTIKK2Fsd2F5cyBcdThBMjIgMTUtMTQ1Ni0zCithbHdheXMgXHU4QTIzIDEzLTIzNi0yCithbHdheXMgXHU4QTI0IDE1LTI0Ni0yCithbHdheXMgXHU4QTI1IDEzNDUtMjM0Ni01CithbHdheXMgXHU4QTI2IDEyLTEzNi0yCithbHdheXMgXHU4QTI3IDIzNC0yCithbHdheXMgXHU4QTI4IDEtMTU2LTQKK2Fsd2F5cyBcdThBMjkgMTUtMjM1LTMKK2Fsd2F5cyBcdThBMkEgMTIzNDUtMTM0Ni00CithbHdheXMgXHU4QTJCIDE1LTE0NTYtNQorYWx3YXlzIFx1OEEyQyAxMi0xNDYtMworYWx3YXlzIFx1OEEyRCAyNC0yMzQ2LTUKK2Fsd2F5cyBcdThBMkUgMTUtMjM0NS0zCithbHdheXMgXHU4QTJGIDI0LTM0NS00CithbHdheXMgXHU4QTMwIDEtMTIzNDU2LTUKK2Fsd2F5cyBcdThBMzEgMTUtMTI1Ni00CithbHdheXMgXHU4QTMyIDE2LTUKK2Fsd2F5cyBcdThBMzMgMTYtNQorYWx3YXlzIFx1OEEzNCAxNS0zNC01CithbHdheXMgXHU4QTM1IDEyLTE1Ni0zCithbHdheXMgXHU4QTM2IDEyMzUtMjM0Ni0zCithbHdheXMgXHU4QTM3IDI0LTEzNi0zCithbHdheXMgXHU4QTM4IDEyMzUtMjM0Ni0yCithbHdheXMgXHU4QTM5IDE1LTEyNTYtNQorYWx3YXlzIFx1OEEzQSAxLTEzNi00CithbHdheXMgXHU4QTNCIDEtMzQtNQorYWx3YXlzIFx1OEEzQyAxLTEzNTYtNQorYWx3YXlzIFx1OEEzRCAxMy0xMjM1Ni01CithbHdheXMgXHU4QTNFIDEyNS0xNTYtNAorYWx3YXlzIFx1OEEzRiAxMjUtMTU2LTMKK2Fsd2F5cyBcdThBNDAgMS0xMjM2LTMKK2Fsd2F5cyBcdThBNDEgMTMtMzQtNAorYWx3YXlzIFx1OEE0MiAxMjM0NS0zNC01CithbHdheXMgXHU4QTQzIDI0NS00NS00CithbHdheXMgXHU4QTQ0IDE0NS0zNDYtMgorYWx3YXlzIFx1OEE0NSAxNC0xMzQ1Ni0yCithbHdheXMgXHU4QTQ2IDE0NS0xNi00CithbHdheXMgXHU4QTQ3IDQ2LTUKK2Fsd2F5cyBcdThBNDggMTQtMTYtNQorYWx3YXlzIFx1OEE0OSAxMzQ1LTM0LTUKK2Fsd2F5cyBcdThBNEEgMTIzNC0xMjM2LTUKK2Fsd2F5cyBcdThBNEIgMS0xMjM1Ni01CithbHdheXMgXHU4QTRDIDEzLTEyMzYtNQorYWx3YXlzIFx1OEE0RCAxNi01CithbHdheXMgXHU4QTRFIDEzLTEyNTYtNQorYWx3YXlzIFx1OEE0RiAxNDYtNQorYWx3YXlzIFx1OEE1MCAxLTM0NS01CithbHdheXMgXHU4QTUxIDEyNC0yNS0yCithbHdheXMgXHU4QTUyIDE2LTIKK2Fsd2F5cyBcdThBNTMgMjQ1LTEyNTYtNAorYWx3YXlzIFx1OEE1NCAxLTE0Ni01CithbHdheXMgXHU4QTU1IDEyMzQtMTM0NTYtMgorYWx3YXlzIFx1OEE1NiAxMzUtMTYtNQorYWx3YXlzIFx1OEE1NyAxNS0yMzUtNQorYWx3YXlzIFx1OEE1OCAyNDUtMTI1Ni0zCithbHdheXMgXHU4QTU5IDEzNS0zNDUtMgorYWx3YXlzIFx1OEE1QSAxNDUtMzQ1LTIKK2Fsd2F5cyBcdThBNUIgMTI1LTM0LTQKK2Fsd2F5cyBcdThBNUMgMTI0LTE0Ni0zCithbHdheXMgXHU4QTVEIDEtMzQtNAorYWx3YXlzIFx1OEE1RSAyNDUtMTU2LTIKK2Fsd2F5cyBcdThBNUYgMS0yMzQ2LTIKK2Fsd2F5cyBcdThBNjAgMjM1LTQKK2Fsd2F5cyBcdThBNjEgMTUtMTI1Ni00CithbHdheXMgXHU4QTYyIDE1LTI1Ni0yCithbHdheXMgXHU4QTYzIDE2LTUKK2Fsd2F5cyBcdThBNjQgMTIzNS00NTYtNAorYWx3YXlzIFx1OEE2NSAxMjM1LTIzNDYtMgorYWx3YXlzIFx1OEE2NiAyNC0xNTYtNQorYWx3YXlzIFx1OEE2NyAxMi0zNDUtMgorYWx3YXlzIFx1OEE2OCAxMy0yNDYtMworYWx3YXlzIFx1OEE2OSAyNC0xNTYtMworYWx3YXlzIFx1OEE2QSAxMjM1LTEzNi00CithbHdheXMgXHU4QTZCIDEyLTM0NS01CithbHdheXMgXHU4QTZDIDEzLTEyMzU2LTUKK2Fsd2F5cyBcdThBNkQgMTMtMTI0Ni00CithbHdheXMgXHU4QTZFIDI0NS00NS0yCithbHdheXMgXHU4QTZGIDEyMzUtMTI0Ni01CithbHdheXMgXHU4QTcwIDEzLTM0Ni0yCithbHdheXMgXHU4QTcxIDEyMzUtMzUtNQorYWx3YXlzIFx1OEE3MiAxMy0yNDU2LTMKK2Fsd2F5cyBcdThBNzMgMTUtNDYtMgorYWx3YXlzIFx1OEE3NCAxMjQ2LTMKK2Fsd2F5cyBcdThBNzUgMjQtMTM2LTMKK2Fsd2F5cyBcdThBNzYgMTItMTIzNTYtMgorYWx3YXlzIFx1OEE3NyAxNDUtMTIzNDYtNQorYWx3YXlzIFx1OEE3OCAxMzQtMTYtMgorYWx3YXlzIFx1OEE3OSAxLTEyMzYtMworYWx3YXlzIFx1OEE3QSAxMzQtMTM0NTYtNQorYWx3YXlzIFx1OEE3QiAyMzQ2LTUKK2Fsd2F5cyBcdThBN0MgMTIzNS0xMjQ2LTMKK2Fsd2F5cyBcdThBN0QgMjM0NS0yCithbHdheXMgXHU4QTdFIDE1LTIzNS0zCithbHdheXMgXHU4QTdGIDEzLTM1LTUKK2Fsd2F5cyBcdThBODAgMTU2LTUKK2Fsd2F5cyBcdThBODEgMTM1LTEzNTYtNAorYWx3YXlzIFx1OEE4MiAxMjQtMjQ2LTQKK2Fsd2F5cyBcdThBODMgMTItMTU2LTQKK2Fsd2F5cyBcdThBODQgMTQtMzU2LTQKK2Fsd2F5cyBcdThBODUgMS0zNC0zCithbHdheXMgXHU4QTg2IDEyMy00NTYtMworYWx3YXlzIFx1OEE4NyAxMjMtMzUtMworYWx3YXlzIFx1OEE4OCAzNC0yCithbHdheXMgXHU4QTg5IDEyNTYtNQorYWx3YXlzIFx1OEE4QSAxMjQtMTM1Ni0yCithbHdheXMgXHU4QThCIDEzLTE2LTUKK2Fsd2F5cyBcdThBOEMgMS0xNTYtNQorYWx3YXlzIFx1OEE4RCAxMjQ1LTEzNi01CithbHdheXMgXHU4QThFIDE1LTM0LTUKK2Fsd2F5cyBcdThBOEYgMTQtMTM0Ni00CithbHdheXMgXHU4QTkwIDIzNDYtMgorYWx3YXlzIFx1OEE5MSAxMjMtNDU2LTIKK2Fsd2F5cyBcdThBOTIgMjYtNQorYWx3YXlzIFx1OEE5MyAyNC0xNTYtNQorYWx3YXlzIFx1OEE5NCAxMjQtMTM0NTYtNAorYWx3YXlzIFx1OEE5NSAxNDUtMTIzNi01CithbHdheXMgXHU4QTk2IDEzNS0zNTYtNQorYWx3YXlzIFx1OEE5NyAxMi0xMjM2LTIKK2Fsd2F5cyBcdThBOTggMjM0LTUKK2Fsd2F5cyBcdThBOTkgMTIzLTEzNTYtMworYWx3YXlzIFx1OEE5QSAyNDUtMjQ2LTUKK2Fsd2F5cyBcdThBOUIgMjQ1LTE0NTYtMworYWx3YXlzIFx1OEE5QyAyNC0zNS01CithbHdheXMgXHU4QTlEIDEyMzYtMworYWx3YXlzIFx1OEE5RSAxMjU2LTQKK2Fsd2F5cyBcdThBOUYgMTUtMjQ2LTUKK2Fsd2F5cyBcdThBQTAgMTItMTM1Ni0yCithbHdheXMgXHU4QUExIDEzLTM0Ni01CithbHdheXMgXHU4QUEyIDE1LTIzNDUtNQorYWx3YXlzIFx1OEFBMyAzNC0zCithbHdheXMgXHU4QUE0IDM0LTUKK2Fsd2F5cyBcdThBQTUgMTMtMTQ2LTUKK2Fsd2F5cyBcdThBQTYgMTUtMTIzNDYtNQorYWx3YXlzIFx1OEFBNyAxMjM0LTM0LTQKK2Fsd2F5cyBcdThBQTggMTIzNS0xMjQ2LTUKK2Fsd2F5cyBcdThBQTkgMTMtMTM0NTYtNQorYWx3YXlzIFx1OEFBQSAyNC0yNS0zCithbHdheXMgXHU4QUFCIDEtMTM2LTUKK2Fsd2F5cyBcdThBQUMgMjQtMjUtMworYWx3YXlzIFx1OEFBRCAxNDUtMzQtMgorYWx3YXlzIFx1OEFBRSAxMjM1LTM1LTMKK2Fsd2F5cyBcdThBQUYgMTItMTM0Ni01CithbHdheXMgXHU4QUIwIDI0LTM1Ni0yCithbHdheXMgXHU4QUIxIDEzLTM0Ni0yCithbHdheXMgXHU4QUIyIDEyMy0yMzQ2LTUKK2Fsd2F5cyBcdThBQjMgMjQ1LTEyNTYtMworYWx3YXlzIFx1OEFCNCAyNDUtMTIzNDYtMgorYWx3YXlzIFx1OEFCNSAxNS0yNDYtMgorYWx3YXlzIFx1OEFCNiAxNS0xMjQ2LTUKK2Fsd2F5cyBcdThBQjcgNDU2LTQKK2Fsd2F5cyBcdThBQjggMTUtMjM0NS0yCithbHdheXMgXHU4QUI5IDEyMzQ1LTM1Ni00CithbHdheXMgXHU4QUJBIDEyLTE1Ni0zCithbHdheXMgXHU4QUJCIDEyNC0zNDUtNQorYWx3YXlzIFx1OEFCQyAxNi0yCithbHdheXMgXHU4QUJEIDE2LTUKK2Fsd2F5cyBcdThBQkUgMTQ1Ni0yCithbHdheXMgXHU4QUJGIDE0NS0yNDYtNQorYWx3YXlzIFx1OEFDMCAxMjM0LTE2LTQKK2Fsd2F5cyBcdThBQzEgMTItMjUtNQorYWx3YXlzIFx1OEFDMiAxMi0xMjM2LTQKK2Fsd2F5cyBcdThBQzMgMTItMTM2LTMKK2Fsd2F5cyBcdThBQzQgMS0xMjM0NTYtMworYWx3YXlzIFx1OEFDNSAxMy0xNi01CithbHdheXMgXHU4QUM2IDI0NS0xNi0zCithbHdheXMgXHU4QUM3IDEyNC0xMjM2LTIKK2Fsd2F5cyBcdThBQzggMS0xMjQ2LTUKK2Fsd2F5cyBcdThBQzkgMTI0Ni00CithbHdheXMgXHU4QUNBIDEzLTEyNTYtMgorYWx3YXlzIFx1OEFDQiAyNDUtMTM0NTYtNAorYWx3YXlzIFx1OEFDQyAxMy0yMzQ1LTUKK2Fsd2F5cyBcdThBQ0QgMS0xMzU2LTUKK2Fsd2F5cyBcdThBQ0UgMTI1LTIzNDYtMgorYWx3YXlzIFx1OEFDRiAxMjUtMTIzNTYtMworYWx3YXlzIFx1OEFEMCAyNDUtMjM0NS0zCithbHdheXMgXHU4QUQxIDEtMjUtMgorYWx3YXlzIFx1OEFEMiAxNC00Ni01CithbHdheXMgXHU4QUQzIDEzLTIzNDUtNQorYWx3YXlzIFx1OEFENCAxMi0zNC01CithbHdheXMgXHU4QUQ1IDEyMzUtMTQ2LTIKK2Fsd2F5cyBcdThBRDYgMTQtMTIzNDU2LTUKK2Fsd2F5cyBcdThBRDcgMjQtMTM2LTQKK2Fsd2F5cyBcdThBRDggMTM1LTI0Ni00CithbHdheXMgXHU4QUQ5IDEyMzUtMjM1Ni01CithbHdheXMgXHU4QURBIDEyMzQtMjM0NS0yCithbHdheXMgXHU4QURCIDEyNTYtMgorYWx3YXlzIFx1OEFEQyAxNDUtMzQ2LTIKK2Fsd2F5cyBcdThBREQgMTUtMTI1Ni00CithbHdheXMgXHU4QURFIDEyMzQtMjM0NS00CithbHdheXMgXHU4QURGIDI0LTE1Ni01CithbHdheXMgXHU4QUUwIDE1LTQ1LTMKK2Fsd2F5cyBcdThBRTEgMjQtMTU2LTUKK2Fsd2F5cyBcdThBRTIgMTIzNS0xMjM0NTYtNQorYWx3YXlzIFx1OEFFMyAxMjM1LTM1LTUKK2Fsd2F5cyBcdThBRTQgMjM0Ni01CithbHdheXMgXHU4QUU1IDEtMTIzNDYtNQorYWx3YXlzIFx1OEFFNiAxNDUtMTYtNQorYWx3YXlzIFx1OEFFNyAxNS0zNDYtMgorYWx3YXlzIFx1OEFFOCAxMjM0NS0zNC0yCithbHdheXMgXHU4QUU5IDEyMzQtMzQtNAorYWx3YXlzIFx1OEFFQSAxMjQtMTM0NTYtMgorYWx3YXlzIFx1OEFFQiAxMy0yMzQ1LTUKK2Fsd2F5cyBcdThBRUMgMjQ1LTE2LTQKK2Fsd2F5cyBcdThBRUQgMTI1Ni01CithbHdheXMgXHU4QUVFIDEyNS0xNTYtMworYWx3YXlzIFx1OEFFRiAxMi0xMjQ1Ni0yCithbHdheXMgXHU4QUYwIDE1LTE2LTQKK2Fsd2F5cyBcdThBRjEgMTIzNS0xMjQ2LTUKK2Fsd2F5cyBcdThBRjIgMTQ1Ni0zCithbHdheXMgXHU4QUYzIDEyMzYtMworYWx3YXlzIFx1OEFGNCAxNS0yMzQ1LTIKK2Fsd2F5cyBcdThBRjUgMTM0NS0xMjM2LTIKK2Fsd2F5cyBcdThBRjYgMTItMTM2LTIKK2Fsd2F5cyBcdThBRjcgMTIzNDUtMTM1Ni00CithbHdheXMgXHU4QUY4IDEtMzQtMworYWx3YXlzIFx1OEFGOSA0Ni0yCithbHdheXMgXHU4QUZBIDIzNDUtNQorYWx3YXlzIFx1OEFGQiAxMjM1LTEzNTYtMworYWx3YXlzIFx1OEFGQyAxNS00NS0zCithbHdheXMgXHU4QUZEIDEzLTIzNDYtMgorYWx3YXlzIFx1OEFGRSAxMzQ1LTI1LTUKK2Fsd2F5cyBcdThBRkYgMjQ1LTE2LTUKK2Fsd2F5cyBcdThCMDAgMTM0LTEyMzU2LTIKK2Fsd2F5cyBcdThCMDEgMzQ2LTUKK2Fsd2F5cyBcdThCMDIgMTI0Ni01CithbHdheXMgXHU4QjAzIDE1LTEzNDU2LTMKK2Fsd2F5cyBcdThCMDQgMTI0LTEzNTYtMgorYWx3YXlzIFx1OEIwNSAxMjUtMTIzNTYtMworYWx3YXlzIFx1OEIwNiAyNC0xMjM2LTUKK2Fsd2F5cyBcdThCMDcgMTMtMjM0NS00CithbHdheXMgXHU4QjA4IDEzNS0xMjYtMgorYWx3YXlzIFx1OEIwOSAxNDUtMTI0Ni01CithbHdheXMgXHU4QjBBIDEyMzUtNDU2LTQKK2Fsd2F5cyBcdThCMEIgMTIzNS0yNS01CithbHdheXMgXHU4QjBDIDEzLTIzNDYtMworYWx3YXlzIFx1OEIwRCAxMzQ1Ni0yCithbHdheXMgXHU4QjBFIDEzNC0xNi0yCithbHdheXMgXHU4QjBGIDE1LTI0Ni00CithbHdheXMgXHU4QjEwIDEzNC0xNi01CithbHdheXMgXHU4QjExIDE1LTE2LTUKK2Fsd2F5cyBcdThCMTIgMjQ1LTQ2LTMKK2Fsd2F5cyBcdThCMTMgMTItMTM2LTMKK2Fsd2F5cyBcdThCMTQgMTM0NS0yMzYtNQorYWx3YXlzIFx1OEIxNSAxMjQtMTYtMgorYWx3YXlzIFx1OEIxNiAxNS0zNC01CithbHdheXMgXHU4QjE3IDEzNS0xMzQ2LTUKK2Fsd2F5cyBcdThCMTggMTItMTU2LTIKK2Fsd2F5cyBcdThCMTkgMjQ1LTIzNDUtMworYWx3YXlzIFx1OEIxQSAyNC0xNTYtNQorYWx3YXlzIFx1OEIxQiAxMy00Ni00CithbHdheXMgXHU4QjFDIDQ1LTUKK2Fsd2F5cyBcdThCMUQgMTUtMzQ2LTUKK2Fsd2F5cyBcdThCMUUgMTIzNS0yMzQ2LTUKK2Fsd2F5cyBcdThCMUYgMTI0LTE0Ni0zCithbHdheXMgXHU4QjIwIDI0Ni0yCithbHdheXMgXHU4QjIxIDI0Ni0yCithbHdheXMgXHU4QjIyIDEyMzUtMzQtNQorYWx3YXlzIFx1OEIyMyAxMjU2LTIKK2Fsd2F5cyBcdThCMjQgMTM1LTI0Ni0zCithbHdheXMgXHU4QjI1IDI0NS0xMjM0Ni01CithbHdheXMgXHU4QjI2IDI0NS0xMzQ1Ni01CithbHdheXMgXHU4QjI3IDE0LTE2LTIKK2Fsd2F5cyBcdThCMjggMTM0LTEyNi0yCithbHdheXMgXHU4QjI5IDEzNC0xMjYtMgorYWx3YXlzIFx1OEIyQSAyNC0xMzQ2LTMKK2Fsd2F5cyBcdThCMkIgMS0yMzQ2LTIKK2Fsd2F5cyBcdThCMkMgMTM0LTIzNC01CithbHdheXMgXHU4QjJEIDEzLTIzNDUtNAorYWx3YXlzIFx1OEIyRSAxMjUtMjM0Ni0yCithbHdheXMgXHU4QjJGIDEzLTM0Ni0zCithbHdheXMgXHU4QjMwIDE0LTIzNDUtMgorYWx3YXlzIFx1OEIzMSAxNC0xMjM1Ni0yCithbHdheXMgXHU4QjMyIDI0NS0xMjM2LTMKK2Fsd2F5cyBcdThCMzMgMTIzNTYtMworYWx3YXlzIFx1OEIzNCAxMy0xMjQ1Ni01CithbHdheXMgXHU4QjM1IDE1LTE2LTIKK2Fsd2F5cyBcdThCMzYgMS0yNS0yCithbHdheXMgXHU4QjM3IDE0Ni0yCithbHdheXMgXHU4QjM4IDE0Ni0yCithbHdheXMgXHU4QjM5IDEzLTE0NTYtNAorYWx3YXlzIFx1OEIzQSAxLTIzNDYtMgorYWx3YXlzIFx1OEIzQiAxNi0yCithbHdheXMgXHU4QjNDIDEyMzUtMzQtMworYWx3YXlzIFx1OEIzRCAxMy00Ni01CithbHdheXMgXHU4QjNFIDEzNC0xMjM2LTUKK2Fsd2F5cyBcdThCM0YgMTItMTQ2LTIKK2Fsd2F5cyBcdThCNDAgMTIzNS0xMjM2LTUKK2Fsd2F5cyBcdThCNDEgMTIzNS0zNS0yCithbHdheXMgXHU4QjQyIDEyLTEyMzYtNAorYWx3YXlzIFx1OEI0MyAxNS0xMjU2LTMKK2Fsd2F5cyBcdThCNDQgMTI1LTEzNTYtMworYWx3YXlzIFx1OEI0NSAxNS0yMzQ2LTUKK2Fsd2F5cyBcdThCNDYgMTUtMTYtMworYWx3YXlzIFx1OEI0NyAxLTM0NS0zCithbHdheXMgXHU4QjQ4IDE0NS0xMjQ2LTUKK2Fsd2F5cyBcdThCNDkgMS0xMzU2LTUKK2Fsd2F5cyBcdThCNEEgMTM0NS0xNDYtMgorYWx3YXlzIFx1OEI0QiAxNC0xMjM2LTIKK2Fsd2F5cyBcdThCNEMgMjM0Ni0yCithbHdheXMgXHU4QjREIDEzNDU2LTUKK2Fsd2F5cyBcdThCNEUgMTMtMjM2LTIKK2Fsd2F5cyBcdThCNEYgMTMtMTYtMworYWx3YXlzIFx1OEI1MCAxMjUtMTIzNDU2LTQKK2Fsd2F5cyBcdThCNTEgMTMtMjQ2LTQKK2Fsd2F5cyBcdThCNTIgMTM1LTEyNi01CithbHdheXMgXHU4QjUzIDEyMzUtMTI0Ni01CithbHdheXMgXHU4QjU0IDEtMTI0NTYtNQorYWx3YXlzIFx1OEI1NSAxMzQtMzQtMgorYWx3YXlzIFx1OEI1NiAxMjUtMTM2LTUKK2Fsd2F5cyBcdThCNTcgMS0zNDUtMgorYWx3YXlzIFx1OEI1OCAyNC0xNTYtNQorYWx3YXlzIFx1OEI1OSAyNDUtMjQ2LTIKK2Fsd2F5cyBcdThCNUEgMTI0LTEyMzYtMgorYWx3YXlzIFx1OEI1QiAxMjUtMTM2LTUKK2Fsd2F5cyBcdThCNUMgMTIzNC0zNC00CithbHdheXMgXHU4QjVEIDI0LTEzNTYtMgorYWx3YXlzIFx1OEI1RSAxNS00NS0zCithbHdheXMgXHU4QjVGIDEyNS0xNDYtNQorYWx3YXlzIFx1OEI2MCAxLTEyMzYtMworYWx3YXlzIFx1OEI2MSAxNDUtMTM0Ni00CithbHdheXMgXHU4QjYyIDE1LTEyNDYtNQorYWx3YXlzIFx1OEI2MyAyNDUtMjM0NS0zCithbHdheXMgXHU4QjY0IDEzLTE2LTMKK2Fsd2F5cyBcdThCNjUgMTMtMjQ2LTUKK2Fsd2F5cyBcdThCNjYgMTMtMTM0NTYtNAorYWx3YXlzIFx1OEI2NyAxNC0yMzQ1LTIKK2Fsd2F5cyBcdThCNjggMTM0NS0xMjM1Ni0yCithbHdheXMgXHU4QjY5IDE2LTMKK2Fsd2F5cyBcdThCNkEgMjQ1Ni01CithbHdheXMgXHU4QjZCIDEtMTIzNi0zCithbHdheXMgXHU4QjZDIDEyMzQtMTYtNQorYWx3YXlzIFx1OEI2RCAxMjM1LTEyNDYtNAorYWx3YXlzIFx1OEI2RSAxMjM1LTM1LTUKK2Fsd2F5cyBcdThCNkYgMTYtNQorYWx3YXlzIFx1OEI3MCAxNi01CithbHdheXMgXHU4QjcxIDI0LTEyMzYtNQorYWx3YXlzIFx1OEI3MiAxMjQ1LTEzNDYtNQorYWx3YXlzIFx1OEI3MyAxMzQ1LTEyMzU2LTUKK2Fsd2F5cyBcdThCNzQgMjQ1LTIzNDUtNAorYWx3YXlzIFx1OEI3NSAxLTEyNDYtNQorYWx3YXlzIFx1OEI3NiAxMjQtMzQ1LTUKK2Fsd2F5cyBcdThCNzcgMTIzNS0zNC01CithbHdheXMgXHU4Qjc4IDEtMTIzNTYtMworYWx3YXlzIFx1OEI3OSAxMjM1LTE0Ni0yCithbHdheXMgXHU4QjdBIDM0Ni01CithbHdheXMgXHU4QjdCIDEzNDU2LTMKK2Fsd2F5cyBcdThCN0MgMTMtMjM0NS01CithbHdheXMgXHU4QjdEIDEyNTYtNQorYWx3YXlzIFx1OEI3RSAxMy0yMzQ1LTQKK2Fsd2F5cyBcdThCN0YgMTIzNS0xMjQ2LTUKK2Fsd2F5cyBcdThCODAgMTQ1LTM0LTIKK2Fsd2F5cyBcdThCODEgMS0yMzQ2LTIKK2Fsd2F5cyBcdThCODIgMTUtNDUtNQorYWx3YXlzIFx1OEI4MyAxMjUtMTIzNi01CithbHdheXMgXHU4Qjg0IDE0LTM1Ni00CithbHdheXMgXHU4Qjg1IDI0LTEzNi00CithbHdheXMgXHU4Qjg2IDEyNDYtNQorYWx3YXlzIFx1OEI4NyAxMi0xMjM2LTQKK2Fsd2F5cyBcdThCODggMTQtMTYtNQorYWx3YXlzIFx1OEI4OSAxNi0yCithbHdheXMgXHU4QjhBIDEzNS0yMzQ1LTUKK2Fsd2F5cyBcdThCOEIgMS0yMzQ2LTIKK2Fsd2F5cyBcdThCOEMgMjM0NS01CithbHdheXMgXHU4QjhEIDIzNDYtNQorYWx3YXlzIFx1OEI4RSAxMi0xMjM1Ni0yCithbHdheXMgXHU4QjhGIDEyNDYtNQorYWx3YXlzIFx1OEI5MCAxMi0xMjM1Ni0yCithbHdheXMgXHU4QjkxIDI0Ni01CithbHdheXMgXHU4QjkyIDEyLTEyMzYtMgorYWx3YXlzIFx1OEI5MyAxMjQ1LTEzNDYtNQorYWx3YXlzIFx1OEI5NCAxNDU2LTQKK2Fsd2F5cyBcdThCOTUgMTQtMTIzNi0yCithbHdheXMgXHU4Qjk2IDEyLTEzNi01CithbHdheXMgXHU4Qjk3IDEyMzUtMjUtNQorYWx3YXlzIFx1OEI5OCAxLTIzNDYtMgorYWx3YXlzIFx1OEI5OSAxMjM1LTEyNDU2LTMKK2Fsd2F5cyBcdThCOUEgMTI1LTEyMzYtNQorYWx3YXlzIFx1OEI5QiAxNi01CithbHdheXMgXHU4QjlDIDE0NS0xMzQ2LTQKK2Fsd2F5cyBcdThCOUQgMS0xMjM2LTMKK2Fsd2F5cyBcdThCOUUgMjM0NS01CithbHdheXMgXHU4QjlGIDE0NS0zNC0yCithbHdheXMgXHU4QkEwIDIzNDUtMgorYWx3YXlzIFx1OEJBMSAxMy0xNi01CithbHdheXMgXHU4QkEyIDE0NS0xMzQ1Ni01CithbHdheXMgXHU4QkEzIDEyMzQ1LTM0LTUKK2Fsd2F5cyBcdThCQTQgMTI0NS0xMzYtNQorYWx3YXlzIFx1OEJBNSAxMy0xNi0zCithbHdheXMgXHU4QkE2IDEzLTM0Ni0yCithbHdheXMgXHU4QkE3IDEyMzUtMTIzNDYtNQorYWx3YXlzIFx1OEJBOCAxMjQtMTQ2LTQKK2Fsd2F5cyBcdThCQTkgMTI0NS0xMzQ2LTUKK2Fsd2F5cyBcdThCQUEgMjQtMTIzNi01CithbHdheXMgXHU4QkFCIDI0NS0xNi01CithbHdheXMgXHU4QkFDIDEyNC0yNS0zCithbHdheXMgXHU4QkFEIDE1LTI1Ni01CithbHdheXMgXHU4QkFFIDE2LTUKK2Fsd2F5cyBcdThCQUYgMTUtMjU2LTUKK2Fsd2F5cyBcdThCQjAgMTMtMTYtNQorYWx3YXlzIFx1OEJCMSAxMjQ1LTEzNi01CithbHdheXMgXHU4QkIyIDEzLTQ2LTQKK2Fsd2F5cyBcdThCQjMgMTIzNS0xMjQ2LTUKK2Fsd2F5cyBcdThCQjQgMTIzNTYtMworYWx3YXlzIFx1OEJCNSAxMy0xMjU2LTUKK2Fsd2F5cyBcdThCQjYgMjM0NTYtNQorYWx3YXlzIFx1OEJCNyAxMzQ1LTIzNDYtNQorYWx3YXlzIFx1OEJCOCAxNS0xMjU2LTQKK2Fsd2F5cyBcdThCQjkgMjM0Ni0yCithbHdheXMgXHU4QkJBIDE0LTEyMzQ1Ni01CithbHdheXMgXHU4QkJCIDE1LTIzNS0zCithbHdheXMgXHU4QkJDIDE1LTEyMzQ2LTUKK2Fsd2F5cyBcdThCQkQgMTIzNDUtMTM1Ni00CithbHdheXMgXHU4QkJFIDI0LTIzNDYtNQorYWx3YXlzIFx1OEJCRiAxMjM0NS0xMzQ2LTQKK2Fsd2F5cyBcdThCQzAgMTMtMjM2LTIKK2Fsd2F5cyBcdThCQzEgMS0xMzU2LTUKK2Fsd2F5cyBcdThCQzIgMTMtMzQtNAorYWx3YXlzIFx1OEJDMyAxMjM1LTIzNDYtMworYWx3YXlzIFx1OEJDNCAxMjM0LTEzNDU2LTIKK2Fsd2F5cyBcdThCQzUgMTI1LTM0LTQKK2Fsd2F5cyBcdThCQzYgMjQtMTU2LTUKK2Fsd2F5cyBcdThCQzcgMTUtMjM1LTUKK2Fsd2F5cyBcdThCQzggMS0zNDUtNQorYWx3YXlzIFx1OEJDOSAxNS0zNC01CithbHdheXMgXHU4QkNBIDEtMTM2LTQKK2Fsd2F5cyBcdThCQ0IgMTQ1LTE2LTQKK2Fsd2F5cyBcdThCQ0MgMS0xMjM1Ni0zCithbHdheXMgXHU4QkNEIDI0NS0xNTYtMgorYWx3YXlzIFx1OEJDRSAyNDUtMTI1Ni0zCithbHdheXMgXHU4QkNGIDEtMTQ2LTUKK2Fsd2F5cyBcdThCRDAgMTM1LTE2LTUKK2Fsd2F5cyBcdThCRDEgMTYtNQorYWx3YXlzIFx1OEJEMiAxNi0yCithbHdheXMgXHU4QkQzIDEzLTQ1Ni0zCithbHdheXMgXHU4QkQ0IDE0LTM1Ni00CithbHdheXMgXHU4QkQ1IDI0LTE1Ni01CithbHdheXMgXHU4QkQ2IDEzLTM1LTUKK2Fsd2F5cyBcdThCRDcgMjQtMTU2LTMKK2Fsd2F5cyBcdThCRDggMTMtMzQ2LTIKK2Fsd2F5cyBcdThCRDkgMTIzNS0xMjQ2LTMKK2Fsd2F5cyBcdThCREEgMTItMTM1Ni0yCithbHdheXMgXHU4QkRCIDEtMzQtMworYWx3YXlzIFx1OEJEQyAyNC0xMzYtMworYWx3YXlzIFx1OEJERCAxMjM1LTM1LTUKK2Fsd2F5cyBcdThCREUgMTQ1LTEyMzYtNQorYWx3YXlzIFx1OEJERiAxMy0xMjM1Ni01CithbHdheXMgXHU4QkUwIDI0NS00NS0yCithbHdheXMgXHU4QkUxIDEzLTEyNDYtNAorYWx3YXlzIFx1OEJFMiAxNS0yNTYtMgorYWx3YXlzIFx1OEJFMyAxNi01CithbHdheXMgXHU4QkU0IDEtMTM1Ni01CithbHdheXMgXHU4QkU1IDEzLTI0NTYtMworYWx3YXlzIFx1OEJFNiAxNS00Ni0yCithbHdheXMgXHU4QkU3IDEyLTM0NS01CithbHdheXMgXHU4QkU4IDEyMzUtMTIzNDU2LTUKK2Fsd2F5cyBcdThCRTkgMTUtMTI1Ni00CithbHdheXMgXHU4QkVBIDEtMTIzNTYtMworYWx3YXlzIFx1OEJFQiAxMy0zNDYtNQorYWx3YXlzIFx1OEJFQyAzNC0zCithbHdheXMgXHU4QkVEIDEyNTYtNAorYWx3YXlzIFx1OEJFRSAyNDUtMjQ2LTUKK2Fsd2F5cyBcdThCRUYgMzQtNQorYWx3YXlzIFx1OEJGMCAxMy0xNDYtNQorYWx3YXlzIFx1OEJGMSAyMzQtNQorYWx3YXlzIFx1OEJGMiAxMjM1LTEyNDYtNQorYWx3YXlzIFx1OEJGMyAxMjMtNDU2LTIKK2Fsd2F5cyBcdThCRjQgMjQtMjUtMworYWx3YXlzIFx1OEJGNSAxNS0xMjM0Ni01CithbHdheXMgXHU4QkY2IDI0NTYtMworYWx3YXlzIFx1OEJGNyAyNDUtMTM0NTYtNAorYWx3YXlzIFx1OEJGOCAxLTM0LTMKK2Fsd2F5cyBcdThCRjkgMTI1LTEyMzU2LTMKK2Fsd2F5cyBcdThCRkEgMTM0NS0yNS01CithbHdheXMgXHU4QkZCIDE0NS0zNC0yCithbHdheXMgXHU4QkZDIDEtMjUtMgorYWx3YXlzIFx1OEJGRCAxMjM0NS0zNTYtNAorYWx3YXlzIFx1OEJGRSAxMjMtMjM0Ni01CithbHdheXMgXHU4QkZGIDEyNDYtNAorYWx3YXlzIFx1OEMwMCAxMjU2LTIKK2Fsd2F5cyBcdThDMDEgMjQtMzU2LTIKK2Fsd2F5cyBcdThDMDIgMjQtMTM2LTQKK2Fsd2F5cyBcdThDMDMgMTQ1LTI0Ni01CithbHdheXMgXHU4QzA0IDEyLTEyMzYtNAorYWx3YXlzIFx1OEMwNSAxNC00Ni01CithbHdheXMgXHU4QzA2IDEtMTIzNDU2LTMKK2Fsd2F5cyBcdThDMDcgMTUtMTI0Ni01CithbHdheXMgXHU4QzA4IDEyNC0xMjM2LTIKK2Fsd2F5cyBcdThDMDkgMjQtMTM2LTQKK2Fsd2F5cyBcdThDMEEgMTYtNQorYWx3YXlzIFx1OEMwQiAxMzQtMTIzNTYtMgorYWx3YXlzIFx1OEMwQyAxMi0xMzYtMgorYWx3YXlzIFx1OEMwRCAxNDUtMzQ2LTIKK2Fsd2F5cyBcdThDMEUgMTIzNS00NTYtNAorYWx3YXlzIFx1OEMwRiAxMy0yMzQ1LTUKK2Fsd2F5cyBcdThDMTAgMTUtMzQ2LTIKK2Fsd2F5cyBcdThDMTEgMTUtMjM2LTUKK2Fsd2F5cyBcdThDMTIgMzQ2LTUKK2Fsd2F5cyBcdThDMTMgMTI0Ni01CithbHdheXMgXHU4QzE0IDIzNDYtNQorYWx3YXlzIFx1OEMxNSAxMjU2LTUKK2Fsd2F5cyBcdThDMTYgMTUtNDUtMworYWx3YXlzIFx1OEMxNyAxMi0xMjM2LTIKK2Fsd2F5cyBcdThDMTggMTI1LTE1Ni0zCithbHdheXMgXHU4QzE5IDEyMzYtMworYWx3YXlzIFx1OEMxQSAyMzQ1LTUKK2Fsd2F5cyBcdThDMUIgMTQ1LTE2LTUKK2Fsd2F5cyBcdThDMUMgMTM0LTE2LTIKK2Fsd2F5cyBcdThDMUQgMTIzNC0yMzQ1LTQKK2Fsd2F5cyBcdThDMUUgMTUtMTI1Ni00CithbHdheXMgXHU4QzFGIDEzNC0xMjYtMgorYWx3YXlzIFx1OEMyMCAxNDUtMTM0Ni00CithbHdheXMgXHU4QzIxIDE1LTM0LTUKK2Fsd2F5cyBcdThDMjIgMTUtMzQ2LTUKK2Fsd2F5cyBcdThDMjMgMjQ2LTIKK2Fsd2F5cyBcdThDMjQgMTM1LTEzNDYtNQorYWx3YXlzIFx1OEMyNSAyNC0xNTYtNQorYWx3YXlzIFx1OEMyNiAyNDUtMjM0NS0zCithbHdheXMgXHU4QzI3IDEzNC0xNi01CithbHdheXMgXHU4QzI4IDEzLTE0NTYtNAorYWx3YXlzIFx1OEMyOSAxMzQtMTIzNi01CithbHdheXMgXHU4QzJBIDEtMjM0Ni0yCithbHdheXMgXHU4QzJCIDEzLTIzNDUtNAorYWx3YXlzIFx1OEMyQyAxMzQtMjM0LTUKK2Fsd2F5cyBcdThDMkQgMTI0LTEyMzYtMgorYWx3YXlzIFx1OEMyRSAxMjUtMTM2LTUKK2Fsd2F5cyBcdThDMkYgMjQ1LTI0Ni0yCithbHdheXMgXHU4QzMwIDE0LTEyMzYtMgorYWx3YXlzIFx1OEMzMSAxMjM0LTM0LTQKK2Fsd2F5cyBcdThDMzIgMTMtMjM2LTIKK2Fsd2F5cyBcdThDMzMgMjM0NS01CithbHdheXMgXHU4QzM0IDI0NS0yMzQ1LTQKK2Fsd2F5cyBcdThDMzUgMS0xMjM2LTMKK2Fsd2F5cyBcdThDMzYgMTItMTM2LTUKK2Fsd2F5cyBcdThDMzcgMTMtMzQtNAorYWx3YXlzIFx1OEMzOCAyNDUtMjM0NS0zCithbHdheXMgXHU4QzM5IDEyMzUtMTIzNDYtMgorYWx3YXlzIFx1OEMzQSAxNS0yMzQ1Ni0zCithbHdheXMgXHU4QzNCIDEzLTIzNi0yCithbHdheXMgXHU4QzNDIDEyMzUtMTIzNDYtMgorYWx3YXlzIFx1OEMzRCAxMjM1LTEyMzYtMworYWx3YXlzIFx1OEMzRSAxMjM1LTEyMzQ2LTMKK2Fsd2F5cyBcdThDM0YgMTUtMTYtMworYWx3YXlzIFx1OEM0MCAxNS0xNi0zCithbHdheXMgXHU4QzQxIDEyMzUtMjUtNQorYWx3YXlzIFx1OEM0MiAxNC0yNDYtMgorYWx3YXlzIFx1OEM0MyAxMjM1LTEyMzYtNAorYWx3YXlzIFx1OEM0NCAxNDUtMzQtMgorYWx3YXlzIFx1OEM0NSAxNC0xMjM0Ni0yCithbHdheXMgXHU4QzQ2IDE0NS0xMjM1Ni01CithbHdheXMgXHU4QzQ3IDEzLTQ2LTMKK2Fsd2F5cyBcdThDNDggMjQ1LTE2LTQKK2Fsd2F5cyBcdThDNDkgMTItMTU2LTQKK2Fsd2F5cyBcdThDNEEgMTQtMTYtNAorYWx3YXlzIFx1OEM0QiAxNDUtMTM1Ni0zCithbHdheXMgXHU4QzRDIDEyNDU2LTMKK2Fsd2F5cyBcdThDNEQgMTM1LTE2LTMKK2Fsd2F5cyBcdThDNEUgMjQtMzQtNQorYWx3YXlzIFx1OEM0RiAxNS0yMzQ1LTUKK2Fsd2F5cyBcdThDNTAgMTIzNDUtMTM1Ni0zCithbHdheXMgXHU4QzUxIDEtMTU2LTUKK2Fsd2F5cyBcdThDNTIgMS0xNTYtNQorYWx3YXlzIFx1OEM1MyAyMzQ1LTUKK2Fsd2F5cyBcdThDNTQgMjM0NS01CithbHdheXMgXHU4QzU1IDI0LTE1Ni00CithbHdheXMgXHU4QzU2IDEyLTM0LTUKK2Fsd2F5cyBcdThDNTcgMTIzNS0xMjQ2LTMKK2Fsd2F5cyBcdThDNTggMTI0LTEyMzQ1Ni0yCithbHdheXMgXHU4QzU5IDE2LTUKK2Fsd2F5cyBcdThDNUEgMTI0LTEyMzQ1Ni0yCithbHdheXMgXHU4QzVCIDE2LTUKK2Fsd2F5cyBcdThDNUMgMTMtMjM0NS0zCithbHdheXMgXHU4QzVEIDEzNS0zNDUtMworYWx3YXlzIFx1OEM1RSAxMjM1LTEyMzU2LTUKK2Fsd2F5cyBcdThDNUYgMjM0Ni01CithbHdheXMgXHU4QzYwIDI0NS0zNC0yCithbHdheXMgXHU4QzYxIDE1LTQ2LTUKK2Fsd2F5cyBcdThDNjIgMTIzNS0xMjQ1Ni01CithbHdheXMgXHU4QzYzIDEzLTIzNDUtMworYWx3YXlzIFx1OEM2NCAxMjMtMTM2LTQKK2Fsd2F5cyBcdThDNjUgMTMtMjQ1Ni0zCithbHdheXMgXHU4QzY2IDI0NS0xMjU2LTIKK2Fsd2F5cyBcdThDNjcgMTIzNDUtMzQtMworYWx3YXlzIFx1OEM2OCAxNS0xNi0zCithbHdheXMgXHU4QzY5IDEzNS0xNDU2LTMKK2Fsd2F5cyBcdThDNkEgMTIzNS0xNDYtMgorYWx3YXlzIFx1OEM2QiAxMjU2LTUKK2Fsd2F5cyBcdThDNkMgMS0zNC0zCithbHdheXMgXHU4QzZEIDEzLTIzNDU2LTMKK2Fsd2F5cyBcdThDNkUgMTIzNDUtMTM2LTIKK2Fsd2F5cyBcdThDNkYgMTUtMTYtMworYWx3YXlzIFx1OEM3MCAxMjM1LTM0LTUKK2Fsd2F5cyBcdThDNzEgMTIzNDU2LTMKK2Fsd2F5cyBcdThDNzIgMTIzNS0xMjQ1Ni0yCithbHdheXMgXHU4QzczIDEzNS0xNDU2LTMKK2Fsd2F5cyBcdThDNzQgMTQ1LTE2LTIKK2Fsd2F5cyBcdThDNzUgMTI1LTEyMzQ2LTMKK2Fsd2F5cyBcdThDNzYgMTIzNDUtMTM2LTIKK2Fsd2F5cyBcdThDNzcgMTYtNQorYWx3YXlzIFx1OEM3OCAxLTE1Ni01CithbHdheXMgXHU4Qzc5IDEzNS0xNDYtNQorYWx3YXlzIFx1OEM3QSAxMi0yNDU2LTIKK2Fsd2F5cyBcdThDN0IgMTIzNS0xMjM2LTUKK2Fsd2F5cyBcdThDN0MgMTIzNC0xNi0yCithbHdheXMgXHU4QzdEIDEzNDUtMzQ1LTUKK2Fsd2F5cyBcdThDN0UgMTIzNC0xNi0zCithbHdheXMgXHU4QzdGIDEzLTEyMzU2LTQKK2Fsd2F5cyBcdThDODAgMTM0NS0zNDUtNQorYWx3YXlzIFx1OEM4MSAyMzQtNQorYWx3YXlzIFx1OEM4MiAxNDUtMjQ2LTMKK2Fsd2F5cyBcdThDODMgMTM0LTEyNi01CithbHdheXMgXHU4Qzg0IDE1LTE1Ni01CithbHdheXMgXHU4Qzg1IDE1LTIzNC0zCithbHdheXMgXHU4Qzg2IDEyMzUtMTI0NTYtMgorYWx3YXlzIFx1OEM4NyAxMjMtMTM2LTQKK2Fsd2F5cyBcdThDODggMTIzNS0yMzQ2LTIKK2Fsd2F5cyBcdThDODkgMTIzNS0yMzQ2LTIKK2Fsd2F5cyBcdThDOEEgMTM0LTEyNi01CithbHdheXMgXHU4QzhCIDEyMzUtMTIzNi01CithbHdheXMgXHU4QzhDIDEzNC0xNDYtNQorYWx3YXlzIFx1OEM4RCAxNC0xNi0yCithbHdheXMgXHU4QzhFIDEzNDUtMTYtMgorYWx3YXlzIFx1OEM4RiAxMzUtMTYtNAorYWx3YXlzIFx1OEM5MCAxMjU2LTQKK2Fsd2F5cyBcdThDOTEgMTMtMjM0NTYtMworYWx3YXlzIFx1OEM5MiAxMjQtMTI0NTYtMworYWx3YXlzIFx1OEM5MyAxMzQtMTQ2LTMKK2Fsd2F5cyBcdThDOTQgMTIzNC0xNi0yCithbHdheXMgXHU4Qzk1IDE1LTE2LTMKK2Fsd2F5cyBcdThDOTYgMjM0Ni01CithbHdheXMgXHU4Qzk3IDEzLTEyNTYtNQorYWx3YXlzIFx1OEM5OCAxMzQtMTI2LTUKK2Fsd2F5cyBcdThDOTkgMTItMzQtMworYWx3YXlzIFx1OEM5QSAxMjQtMTIzNi0yCithbHdheXMgXHU4QzlCIDEyMzUtMTI0NTYtMworYWx3YXlzIFx1OEM5QyAxMy0yMzYtMgorYWx3YXlzIFx1OEM5RCAxMzUtMzU2LTUKK2Fsd2F5cyBcdThDOUUgMS0xMzYtMworYWx3YXlzIFx1OEM5RiA0NS0yCithbHdheXMgXHU4Q0EwIDEyMzQ1LTM0LTUKK2Fsd2F5cyBcdThDQTEgMjQ1LTI0NTYtMgorYWx3YXlzIFx1OENBMiAxMy0xMjM0Ni01CithbHdheXMgXHU4Q0EzIDEyNC0yMzQ2LTUKK2Fsd2F5cyBcdThDQTQgMTYtMgorYWx3YXlzIFx1OENBNSAxMjM1LTEzNDYtMgorYWx3YXlzIFx1OENBNiAxMjQ1Ni01CithbHdheXMgXHU4Q0E3IDEyMzQtMTQ1Ni0yCithbHdheXMgXHU4Q0E4IDEyMzUtMjUtNQorYWx3YXlzIFx1OENBOSAxMjM0NS0xMjM2LTUKK2Fsd2F5cyBcdThDQUEgMTI0LTEyMzYtMworYWx3YXlzIFx1OENBQiAxMy0xMjQ1Ni01CithbHdheXMgXHU4Q0FDIDEyNS0yMzQ2LTIKK2Fsd2F5cyBcdThDQUQgMS0xNTYtMgorYWx3YXlzIFx1OENBRSAxNTYtNQorYWx3YXlzIFx1OENBRiAxLTM0LTQKK2Fsd2F5cyBcdThDQjAgMjQtMTU2LTUKK2Fsd2F5cyBcdThDQjEgMTM1LTE2LTUKK2Fsd2F5cyBcdThDQjIgMTI1LTE1Ni0zCithbHdheXMgXHU4Q0IzIDE1Ni01CithbHdheXMgXHU4Q0I0IDEzLTEyNDYtNQorYWx3YXlzIFx1OENCNSAxMjM0LTIzNDUtNAorYWx3YXlzIFx1OENCNiAxMzUtMjM0NS00CithbHdheXMgXHU4Q0I3IDEzNC0yNDU2LTQKK2Fsd2F5cyBcdThDQjggMTQ1LTI0NTYtNQorYWx3YXlzIFx1OENCOSAyNC0xMzU2LTUKK2Fsd2F5cyBcdThDQkEgMTIzLTQ1Ni01CithbHdheXMgXHU4Q0JCIDEyMzQ1LTM1Ni01CithbHdheXMgXHU4Q0JDIDEyNC0zNDYtMworYWx3YXlzIFx1OENCRCAxNi0yCithbHdheXMgXHU4Q0JFIDEyLTE1Ni0yCithbHdheXMgXHU4Q0JGIDEzNC0xNDYtNQorYWx3YXlzIFx1OENDMCAxMjM1LTIzNDYtNQorYWx3YXlzIFx1OENDMSAxMzUtMTM2LTMKK2Fsd2F5cyBcdThDQzIgMTQtMzQtNQorYWx3YXlzIFx1OENDMyAxNC0xNDU2LTUKK2Fsd2F5cyBcdThDQzQgMTIzNS0xMjQ2LTUKK2Fsd2F5cyBcdThDQzUgMTMtMjQ1Ni0zCithbHdheXMgXHU4Q0M2IDEyMzQtMjM0NS0yCithbHdheXMgXHU4Q0M3IDEyNS0xNTYtMworYWx3YXlzIFx1OENDOCAxMy0yMzQ1Ni00CithbHdheXMgXHU4Q0M5IDE1LTEyNTYtNQorYWx3YXlzIFx1OENDQSAxMjUtMzU2LTIKK2Fsd2F5cyBcdThDQ0IgMTMtMjQ2LTQKK2Fsd2F5cyBcdThDQ0MgMTMtMjQ1Ni0zCithbHdheXMgXHU4Q0NEIDEyNS0xMzQ2LTMKK2Fsd2F5cyBcdThDQ0UgMTMtMjM0NS01CithbHdheXMgXHU4Q0NGIDEzNDU2LTMKK2Fsd2F5cyBcdThDRDAgMTUtMjU2LTUKK2Fsd2F5cyBcdThDRDEgMS0xMzYtNQorYWx3YXlzIFx1OENEMiAyNC0yMzQ2LTMKK2Fsd2F5cyBcdThDRDMgMTM1LTE0NTYtMworYWx3YXlzIFx1OENENCAxMzUtMTQ1Ni0zCithbHdheXMgXHU4Q0Q1IDI0NS0yMzQtMgorYWx3YXlzIFx1OENENiAyNC0yMzQ2LTMKK2Fsd2F5cyBcdThDRDcgMTItMTI0NTYtNQorYWx3YXlzIFx1OENEOCAxMjUtMTM0Ni0zCithbHdheXMgXHU4Q0Q5IDEtMTIzNTYtMworYWx3YXlzIFx1OENEQSAxNC0yNDU2LTUKK2Fsd2F5cyBcdThDREIgMTI1LTEyMzYtNQorYWx3YXlzIFx1OENEQyAxNS0xNTYtNQorYWx3YXlzIFx1OENERCAxMi0xMzYtMworYWx3YXlzIFx1OENERSAyNC0xMzQ2LTQKK2Fsd2F5cyBcdThDREYgMTI0LTIzNDUtNAorYWx3YXlzIFx1OENFMCAxMjM0LTM1Ni0yCithbHdheXMgXHU4Q0UxIDEzLTEzNTYtMworYWx3YXlzIFx1OENFMiAxNS0yMzQ1LTIKK2Fsd2F5cyBcdThDRTMgMTM0LTI0NTYtNQorYWx3YXlzIFx1OENFNCAxMy0yMzQ1LTUKK2Fsd2F5cyBcdThDRTUgMTUtMTI0Ni01CithbHdheXMgXHU4Q0U2IDEyMzQ1LTM0LTUKK2Fsd2F5cyBcdThDRTcgMTQ1LTEyMzYtNAorYWx3YXlzIFx1OENFOCAyNDUtMTIzNDYtMgorYWx3YXlzIFx1OENFOSAyNDUtMTIzNDYtMgorYWx3YXlzIFx1OENFQSAxLTE1Ni0yCithbHdheXMgXHU4Q0VCIDEzLTE2LTMKK2Fsd2F5cyBcdThDRUMgMS0xMzQ2LTUKK2Fsd2F5cyBcdThDRUQgMTQ1LTM0LTQKK2Fsd2F5cyBcdThDRUUgMTMtMTQ1Ni01CithbHdheXMgXHU4Q0VGIDE1LTIzNS0zCithbHdheXMgXHU4Q0YwIDI0LTEyMzQ1Ni00CithbHdheXMgXHU4Q0YxIDI1Ni00CithbHdheXMgXHU4Q0YyIDEzNS0xNDYtNAorYWx3YXlzIFx1OENGMyAxMjUtMjQ1Ni0zCithbHdheXMgXHU4Q0Y0IDE0LTI0NTYtNQorYWx3YXlzIFx1OENGNSAxMjM0NS0xMzU2LTUKK2Fsd2F5cyBcdThDRjYgMjQ1LTEzNDYtNQorYWx3YXlzIFx1OENGNyAxMy0xNi0zCithbHdheXMgXHU4Q0Y4IDI0LTEzNTYtNQorYWx3YXlzIFx1OENGOSAyNDU2LTUKK2Fsd2F5cyBcdThDRkEgMS0xMjQ1Ni01CithbHdheXMgXHU4Q0ZCIDEyMzQ1LTM0LTUKK2Fsd2F5cyBcdThDRkMgMTMtMTIzNTYtNQorYWx3YXlzIFx1OENGRCAxNS0yNDU2LTUKK2Fsd2F5cyBcdThDRkUgMTI1LTIzNDYtMgorYWx3YXlzIFx1OENGRiAxNC0yNDYtMgorYWx3YXlzIFx1OEQwMCAxMjQ2LTUKK2Fsd2F5cyBcdThEMDEgMTM1LTI0NTYtNQorYWx3YXlzIFx1OEQwMiAxMi0xMzYtNAorYWx3YXlzIFx1OEQwMyAxLTEyNDU2LTUKK2Fsd2F5cyBcdThEMDQgMS0xNTYtNQorYWx3YXlzIFx1OEQwNSAxLTEyNDYtNQorYWx3YXlzIFx1OEQwNiAxMzUtMjQ2LTMKK2Fsd2F5cyBcdThEMDcgMjU2LTMKK2Fsd2F5cyBcdThEMDggMTI1LTEzNTYtNQorYWx3YXlzIFx1OEQwOSAxMjQtMTIzNi00CithbHdheXMgXHU4RDBBIDEyNS0xMjM2LTUKK2Fsd2F5cyBcdThEMEIgMjM0NS01CithbHdheXMgXHU4RDBDIDEyMzQtMzQtNAorYWx3YXlzIFx1OEQwRCAyNC0xMjM2LTUKK2Fsd2F5cyBcdThEMEUgMTI0NTYtNQorYWx3YXlzIFx1OEQwRiAxMzQ1Ni0yCithbHdheXMgXHU4RDEwIDEzLTE0NTYtNQorYWx3YXlzIFx1OEQxMSAxMy0xMjM2LTUKK2Fsd2F5cyBcdThEMTIgMTUtMjM0NS0yCithbHdheXMgXHU4RDEzIDEyNS0xMzQ2LTMKK2Fsd2F5cyBcdThEMTQgMTM1LTE2LTUKK2Fsd2F5cyBcdThEMTUgMTQ1LTM0LTIKK2Fsd2F5cyBcdThEMTYgMjQtMzQtMgorYWx3YXlzIFx1OEQxNyAyMzQ1LTUKK2Fsd2F5cyBcdThEMTggMjQtMTM0Ni00CithbHdheXMgXHU4RDE5IDE1LTQ1LTUKK2Fsd2F5cyBcdThEMUEgMTQtMTIzNDYtNQorYWx3YXlzIFx1OEQxQiAxMy0xMjM2LTUKK2Fsd2F5cyBcdThEMUMgMTI1LTEzNDYtMworYWx3YXlzIFx1OEQxRCAxMzUtMzU2LTUKK2Fsd2F5cyBcdThEMUUgMS0xMzYtMworYWx3YXlzIFx1OEQxRiAxMjM0NS0zNC01CithbHdheXMgXHU4RDIwIDQ1LTIKK2Fsd2F5cyBcdThEMjEgMTMtMTIzNDYtNQorYWx3YXlzIFx1OEQyMiAyNDUtMjQ1Ni0yCithbHdheXMgXHU4RDIzIDEyNS0yMzQ2LTIKK2Fsd2F5cyBcdThEMjQgMTUtMjM0NS0yCithbHdheXMgXHU4RDI1IDEzNS0yNDU2LTUKK2Fsd2F5cyBcdThEMjYgMS0xMzQ2LTUKK2Fsd2F5cyBcdThEMjcgMTIzNS0yNS01CithbHdheXMgXHU4RDI4IDEtMTU2LTIKK2Fsd2F5cyBcdThEMjkgMTIzNDUtMTIzNi01CithbHdheXMgXHU4RDJBIDEyNC0xMjM2LTMKK2Fsd2F5cyBcdThEMkIgMTIzNC0xNDU2LTIKK2Fsd2F5cyBcdThEMkMgMTM1LTIzNDUtNAorYWx3YXlzIFx1OEQyRCAxMy0xMjM1Ni01CithbHdheXMgXHU4RDJFIDEtMzQtNAorYWx3YXlzIFx1OEQyRiAxMy0xMjQ1Ni01CithbHdheXMgXHU4RDMwIDE1Ni01CithbHdheXMgXHU4RDMxIDEzLTIzNDUtNQorYWx3YXlzIFx1OEQzMiAxMzUtMTM2LTMKK2Fsd2F5cyBcdThEMzMgMjQtMTU2LTUKK2Fsd2F5cyBcdThEMzQgMTI0LTM0Ni0zCithbHdheXMgXHU4RDM1IDEzLTEyNDYtNQorYWx3YXlzIFx1OEQzNiAxMjMtNDU2LTUKK2Fsd2F5cyBcdThEMzcgMTQ1LTI0NTYtNQorYWx3YXlzIFx1OEQzOCAxMzQtMTQ2LTUKK2Fsd2F5cyBcdThEMzkgMTIzNDUtMzU2LTUKK2Fsd2F5cyBcdThEM0EgMTIzNS0yMzQ2LTUKK2Fsd2F5cyBcdThEM0IgMTYtMgorYWx3YXlzIFx1OEQzQyAxMjUtMzU2LTIKK2Fsd2F5cyBcdThEM0QgMS0xNTYtNQorYWx3YXlzIFx1OEQzRSAxMy0yMzQ1Ni00CithbHdheXMgXHU4RDNGIDEyMzUtMTI0Ni01CithbHdheXMgXHU4RDQwIDEyNS0xNTYtMworYWx3YXlzIFx1OEQ0MSAxNC0xNDU2LTUKK2Fsd2F5cyBcdThENDIgMTQtMzQtNQorYWx3YXlzIFx1OEQ0MyAxMjUtMTM0Ni0zCithbHdheXMgXHU4RDQ0IDEyNS0xNTYtMworYWx3YXlzIFx1OEQ0NSAxMy0yNDU2LTMKK2Fsd2F5cyBcdThENDYgMTMtMTQ1Ni01CithbHdheXMgXHU4RDQ3IDI0NS0yMzQtMgorYWx3YXlzIFx1OEQ0OCAxLTEzNi01CithbHdheXMgXHU4RDQ5IDE0LTI0NTYtNQorYWx3YXlzIFx1OEQ0QSAyNC0yMzQ2LTMKK2Fsd2F5cyBcdThENEIgMTIzNDUtMzQtNQorYWx3YXlzIFx1OEQ0QyAxNDUtMzQtNAorYWx3YXlzIFx1OEQ0RCAxMy0xNi0zCithbHdheXMgXHU4RDRFIDI0LTM0LTIKK2Fsd2F5cyBcdThENEYgMjQtMTM0Ni00CithbHdheXMgXHU4RDUwIDI0NS0xNTYtNQorYWx3YXlzIFx1OEQ1MSAxMzUtMTYtNQorYWx3YXlzIFx1OEQ1MiAxLTEyMzU2LTMKK2Fsd2F5cyBcdThENTMgMTMtMTM1Ni0zCithbHdheXMgXHU4RDU0IDEyMzQtMzU2LTIKK2Fsd2F5cyBcdThENTUgMTQ1LTEyMzYtNAorYWx3YXlzIFx1OEQ1NiAxNC0yNDU2LTUKK2Fsd2F5cyBcdThENTcgMTIzNDUtMTM1Ni01CithbHdheXMgXHU4RDU4IDEtMTI0Ni01CithbHdheXMgXHU4RDU5IDEyMzQ1LTM0LTUKK2Fsd2F5cyBcdThENUEgMS0xMjQ1Ni01CithbHdheXMgXHU4RDVCIDE1LTI0NTYtNQorYWx3YXlzIFx1OEQ1QyAxMjUtMjM0Ni0yCithbHdheXMgXHU4RDVEIDIzNDUtNQorYWx3YXlzIFx1OEQ1RSAxMjUtMTIzNi01CithbHdheXMgXHU4RDVGIDI1Ni0zCithbHdheXMgXHU4RDYwIDEyNS0xMzU2LTUKK2Fsd2F5cyBcdThENjEgMjQtMTIzNi01CithbHdheXMgXHU4RDYyIDEzNDU2LTIKK2Fsd2F5cyBcdThENjMgMTMtMTIzNi01CithbHdheXMgXHU4RDY0IDEyLTE1Ni01CithbHdheXMgXHU4RDY1IDE1LTE2LTUKK2Fsd2F5cyBcdThENjYgMjQtMjM0Ni01CithbHdheXMgXHU4RDY3IDEzNDUtMTIzNi00CithbHdheXMgXHU4RDY4IDEyNC0xMjM0Ni0yCithbHdheXMgXHU4RDY5IDE1LTE2LTUKK2Fsd2F5cyBcdThENkEgMTItMTM1Ni0zCithbHdheXMgXHU4RDZCIDEyMzUtMjM0Ni01CithbHdheXMgXHU4RDZDIDEyLTEzNTYtMworYWx3YXlzIFx1OEQ2RCAxLTIzNDYtNAorYWx3YXlzIFx1OEQ2RSAxNS0yMzQ1Ni0yCithbHdheXMgXHU4RDZGIDEyNC0xMzQ2LTIKK2Fsd2F5cyBcdThENzAgMTI1LTEyMzU2LTQKK2Fsd2F5cyBcdThENzEgMTI1LTEyMzU2LTQKK2Fsd2F5cyBcdThENzIgMTQtMTYtNQorYWx3YXlzIFx1OEQ3MyAxMy0yMzQtMworYWx3YXlzIFx1OEQ3NCAxMjM0NS0zNC01CithbHdheXMgXHU4RDc1IDEtMTQ2LTUKK2Fsd2F5cyBcdThENzYgMjQ1LTIzNDUtMgorYWx3YXlzIFx1OEQ3NyAyNDUtMTYtNAorYWx3YXlzIFx1OEQ3OCAyNC0xMjM2LTUKK2Fsd2F5cyBcdThENzkgMjQ1LTIzNS0yCithbHdheXMgXHU4RDdBIDI0NS0xNDU2LTIKK2Fsd2F5cyBcdThEN0IgMTUtMjM0NS00CithbHdheXMgXHU4RDdDIDI0NS0xNTYtMworYWx3YXlzIFx1OEQ3RCAxMy0yMzYtMgorYWx3YXlzIFx1OEQ3RSAyNDUtMTQ1Ni00CithbHdheXMgXHU4RDdGIDEyLTE1Ni0yCithbHdheXMgXHU4RDgwIDI0NS0xNTYtMworYWx3YXlzIFx1OEQ4MSAxMi0xMzYtNQorYWx3YXlzIFx1OEQ4MiAxMi0xMzYtNQorYWx3YXlzIFx1OEQ4MyAxNDUtMzQ2LTIKK2Fsd2F5cyBcdThEODQgMjQ1LTM0Ni01CithbHdheXMgXHU4RDg1IDEyLTE0Ni0zCithbHdheXMgXHU4RDg2IDE0NS0xNi0zCithbHdheXMgXHU4RDg3IDE1LTIzNDYtNQorYWx3YXlzIFx1OEQ4OCAxLTEyMzYtMworYWx3YXlzIFx1OEQ4OSAxMy0yMzYtMgorYWx3YXlzIFx1OEQ4QSAyMzYtNQorYWx3YXlzIFx1OEQ4QiAyNDUtMTI1Ni0zCithbHdheXMgXHU4RDhDIDEzLTM0Ni0yCithbHdheXMgXHU4RDhEIDI0NS0xMjU2LTMKK2Fsd2F5cyBcdThEOEUgMTItMzQtMgorYWx3YXlzIFx1OEQ4RiAxMy0zNS0zCithbHdheXMgXHU4RDkwIDE1LTIzNi01CithbHdheXMgXHU4RDkxIDEyNS0xNTYtMworYWx3YXlzIFx1OEQ5MiAxMjQtMjQ2LTIKK2Fsd2F5cyBcdThEOTMgMTQ1LTI1LTQKK2Fsd2F5cyBcdThEOTQgMTQtMzQ2LTUKK2Fsd2F5cyBcdThEOTUgMTMtMTIzNi00CithbHdheXMgXHU4RDk2IDE1LTI1LTMKK2Fsd2F5cyBcdThEOTcgMjQ1LTM0LTUKK2Fsd2F5cyBcdThEOTggMTUtMTYtMgorYWx3YXlzIFx1OEQ5OSAxLTE0Ni01CithbHdheXMgXHU4RDlBIDE1LTM0LTUKK2Fsd2F5cyBcdThEOUIgMTQ1Ni00CithbHdheXMgXHU4RDlDIDEzLTEyNTYtMgorYWx3YXlzIFx1OEQ5RCAxMy0yMzQ1LTUKK2Fsd2F5cyBcdThEOUUgMjQ1LTIzNi01CithbHdheXMgXHU4RDlGIDEyNC0xMzQ2LTUKK2Fsd2F5cyBcdThEQTAgMTItMjUtNQorYWx3YXlzIFx1OERBMSAyNDUtMTI0Ni00CithbHdheXMgXHU4REEyIDE0LTM0LTUKK2Fsd2F5cyBcdThEQTMgMjQ1LTEyNTYtNQorYWx3YXlzIFx1OERBNCAxNDUtMTM0Ni01CithbHdheXMgXHU4REE1IDI0NS0yMzQtMworYWx3YXlzIFx1OERBNiAxMjUtMTU2LTMKK2Fsd2F5cyBcdThEQTcgMTI0LTE2LTIKK2Fsd2F5cyBcdThEQTggMjQ1LTEyNTYtMworYWx3YXlzIFx1OERBOSAxMi0xNTYtNQorYWx3YXlzIFx1OERBQSAxMjM1LTQ1Ni0yCithbHdheXMgXHU4REFCIDI0NS0yNDYtMgorYWx3YXlzIFx1OERBQyAyNDUtMjQ2LTMKK2Fsd2F5cyBcdThEQUQgMTMtMjQ2LTUKK2Fsd2F5cyBcdThEQUUgMTI1LTE0Ni01CithbHdheXMgXHU4REFGIDEyNC0xNi01CithbHdheXMgXHU4REIwIDE1Ni00CithbHdheXMgXHU4REIxIDEyNS0xMjM2LTQKK2Fsd2F5cyBcdThEQjIgMTI1LTEyMzYtNAorYWx3YXlzIFx1OERCMyAxMjUtMzQtMgorYWx3YXlzIFx1OERCNCAxMjM0LTM0NS0zCithbHdheXMgXHU4REI1IDEzNS0xNDYtNQorYWx3YXlzIFx1OERCNiAxMjMtMzQtNQorYWx3YXlzIFx1OERCNyAxMjMtMjM0Ni0zCithbHdheXMgXHU4REI4IDE0NS0xMjM0NTYtNAorYWx3YXlzIFx1OERCOSAxMy0yMzYtMgorYWx3YXlzIFx1OERCQSAxMjM0NS0zNC0zCithbHdheXMgXHU4REJCIDEyLTEzNi00CithbHdheXMgXHU4REJDIDEzLTIzNDUtNAorYWx3YXlzIFx1OERCRCAxMjM0NS0xMzQ2LTUKK2Fsd2F5cyBcdThEQkUgMS0xNTYtNAorYWx3YXlzIFx1OERCRiAxNS0zNDUtNQorYWx3YXlzIFx1OERDMCAyMzYtNQorYWx3YXlzIFx1OERDMSAxMzUtMzQ1LTUKK2Fsd2F5cyBcdThEQzIgMjQ1LTE2LTIKK2Fsd2F5cyBcdThEQzMgMjM2LTUKK2Fsd2F5cyBcdThEQzQgMjQ1LTQ2LTUKK2Fsd2F5cyBcdThEQzUgMTI0LTI1LTUKK2Fsd2F5cyBcdThEQzYgMTI0LTI0NTYtMgorYWx3YXlzIFx1OERDNyAxNi01CithbHdheXMgXHU4REM4IDEzNDUtMjM0NS00CithbHdheXMgXHU4REM5IDE0LTEzNDU2LTIKK2Fsd2F5cyBcdThEQ0EgMTM0LTM1Ni01CithbHdheXMgXHU4RENCIDEzNS0zNDUtMgorYWx3YXlzIFx1OERDQyAxNDUtMzQ2LTIKK2Fsd2F5cyBcdThEQ0QgMTIzLTM0LTMKK2Fsd2F5cyBcdThEQ0UgMTI0LTI1LTIKK2Fsd2F5cyBcdThEQ0YgMTMtMjM0NTYtMworYWx3YXlzIFx1OEREMCAyNDUtMTU2LTQKK2Fsd2F5cyBcdThERDEgMTIzNC0xNDYtNAorYWx3YXlzIFx1OEREMiAyNDUtMjM0NTYtNAorYWx3YXlzIFx1OEREMyAxLTM0LTUKK2Fsd2F5cyBcdThERDQgMTIzNDUtMzQtNAorYWx3YXlzIFx1OERENSAxNDUtMzQ2LTIKK2Fsd2F5cyBcdThERDYgMS0xNTYtMgorYWx3YXlzIFx1OERENyAxMjM0NS0zNC0zCithbHdheXMgXHU4REQ4IDEyMzQtMTIzNi0yCithbHdheXMgXHU4REQ5IDEzLTEyNTYtNAorYWx3YXlzIFx1OEREQSAyNC0xMjM2LTMKK2Fsd2F5cyBcdThEREIgMTM1LTEyNi00CithbHdheXMgXHU4RERDIDEzNDUtMTYtMgorYWx3YXlzIFx1OERERCAxMy0xMjU2LTUKK2Fsd2F5cyBcdThEREUgMTQtMTYtNQorYWx3YXlzIFx1OERERiAxMy0xMzYtMworYWx3YXlzIFx1OERFMCAxNi0yCithbHdheXMgXHU4REUxIDEzLTE2LTMKK2Fsd2F5cyBcdThERTIgMTQ1LTI1LTUKK2Fsd2F5cyBcdThERTMgMTUtMjM0NS00CithbHdheXMgXHU4REU0IDEzLTI0Ni0zCithbHdheXMgXHU4REU1IDE0NS0yNS01CithbHdheXMgXHU4REU2IDEtMzQtMworYWx3YXlzIFx1OERFNyAyNDUtNDUtMgorYWx3YXlzIFx1OERFOCAxMjMtMzUtNQorYWx3YXlzIFx1OERFOSAxLTIzNTYtNAorYWx3YXlzIFx1OERFQSAxMy0xMjQ2LTUKK2Fsd2F5cyBcdThERUIgMjQ1LTIzNS0yCithbHdheXMgXHU4REVDIDEyMy0xMjQ2LTQKK2Fsd2F5cyBcdThERUQgMTUtNDYtMgorYWx3YXlzIFx1OERFRSAxMi0xNTYtNQorYWx3YXlzIFx1OERFRiAxNC0zNC01CithbHdheXMgXHU4REYwIDEzNS0xMzU2LTUKK2Fsd2F5cyBcdThERjEgMS0xNTYtNQorYWx3YXlzIFx1OERGMiAxMy0yMzQ1Ni0yCithbHdheXMgXHU4REYzIDEyNC0yNDYtNQorYWx3YXlzIFx1OERGNCAyNDUtMjQ1Ni00CithbHdheXMgXHU4REY1IDEzLTIzNDUtNQorYWx3YXlzIFx1OERGNiAxMjQtMzQ1LTUKK2Fsd2F5cyBcdThERjcgMjQ1LTI0Ni0zCithbHdheXMgXHU4REY4IDEzNS0xNi01CithbHdheXMgXHU4REY5IDE1LTIzNDUtMworYWx3YXlzIFx1OERGQSAxNDUtMjUtNQorYWx3YXlzIFx1OERGQiAxMy0xNi0zCithbHdheXMgXHU4REZDIDEzLTEyNTYtMgorYWx3YXlzIFx1OERGRCAxMy0xNi01CithbHdheXMgXHU4REZFIDI0LTM0LTIKK2Fsd2F5cyBcdThERkYgMTI0LTM0LTIKK2Fsd2F5cyBcdThFMDAgMTItMzQtNQorYWx3YXlzIFx1OEUwMSAxMy0xMzQ1Ni01CithbHdheXMgXHU4RTAyIDEzNDUtMzQ2LTUKK2Fsd2F5cyBcdThFMDMgMTUtMjQ2LTMKK2Fsd2F5cyBcdThFMDQgMTM1LTEyNi0yCithbHdheXMgXHU4RTA1IDE1LTIzNi0yCithbHdheXMgXHU4RTA2IDI0NS0yNTYtMworYWx3YXlzIFx1OEUwNyAxMzQtMzQtNAorYWx3YXlzIFx1OEUwOCAyNC0zNC0zCithbHdheXMgXHU4RTA5IDE0LTQ2LTUKK2Fsd2F5cyBcdThFMEEgMjM1LTQKK2Fsd2F5cyBcdThFMEIgMTMtMjQ2LTQKK2Fsd2F5cyBcdThFMEMgMTItMTIzNTYtMgorYWx3YXlzIFx1OEUwRCAyNDUtMjQ2LTMKK2Fsd2F5cyBcdThFMEUgMTM0LTEyMzU2LTIKK2Fsd2F5cyBcdThFMEYgMTI0LTM0NS01CithbHdheXMgXHU4RTEwIDEzLTIzNDUtNQorYWx3YXlzIFx1OEUxMSAyNDUtMTYtMgorYWx3YXlzIFx1OEUxMiAyNS0zCithbHdheXMgXHU4RTEzIDEyNDYtNAorYWx3YXlzIFx1OEUxNCAxLTI1LTIKK2Fsd2F5cyBcdThFMTUgMTMtMzQ2LTIKK2Fsd2F5cyBcdThFMTYgMTMtMTYtMgorYWx3YXlzIFx1OEUxNyAxMzQ1LTM0Ni0zCithbHdheXMgXHU4RTE4IDEzLTEyNTYtMgorYWx3YXlzIFx1OEUxOSAxMzQ1LTM0Ni01CithbHdheXMgXHU4RTFBIDE0LTEyMzQ1Ni0yCithbHdheXMgXHU4RTFCIDE0LTM0LTUKK2Fsd2F5cyBcdThFMUMgMTQtMTM1Ni01CithbHdheXMgXHU4RTFEIDEyMzUtMjM1Ni0yCithbHdheXMgXHU4RTFFIDEzLTEyNTYtNQorYWx3YXlzIFx1OEUxRiAxMi0xNTYtMgorYWx3YXlzIFx1OEUyMCAxMjQ1Ni00CithbHdheXMgXHU4RTIxIDI0NS00NS0yCithbHdheXMgXHU4RTIyIDEyNC0xNi0zCithbHdheXMgXHU4RTIzIDEzNS0xMjYtMgorYWx3YXlzIFx1OEUyNCAxMjUtMzQtMgorYWx3YXlzIFx1OEUyNSAyNDUtMzQ2LTUKK2Fsd2F5cyBcdThFMjYgMjQ1LTE2LTIKK2Fsd2F5cyBcdThFMjcgMjQ1LTM0LTUKK2Fsd2F5cyBcdThFMjggMTI1LTEyMzQ2LTMKK2Fsd2F5cyBcdThFMjkgMjQ1LTI0NTYtNAorYWx3YXlzIFx1OEUyQSAxMjUtMTIzNDYtMworYWx3YXlzIFx1OEUyQiAxMjM0LTEzNTYtNQorYWx3YXlzIFx1OEUyQyAxLTE1Ni01CithbHdheXMgXHU4RTJEIDEtMTM1Ni0zCithbHdheXMgXHU4RTJFIDE0NS0yMzQ1LTQKK2Fsd2F5cyBcdThFMkYgMS0xNTYtMgorYWx3YXlzIFx1OEUzMCAxMjU2LTIKK2Fsd2F5cyBcdThFMzEgMTQ1LTI1LTIKK2Fsd2F5cyBcdThFMzIgMTQ1LTEyMzQ1Ni01CithbHdheXMgXHU4RTMzIDEyLTEyMzQ1Ni00CithbHdheXMgXHU4RTM0IDIzNS00CithbHdheXMgXHU4RTM1IDEtMTIzNDYtNAorYWx3YXlzIFx1OEUzNiAxNDUtMTYtNQorYWx3YXlzIFx1OEUzNyAxLTIzNDYtNAorYWx3YXlzIFx1OEUzOCAxMi0xMzYtNAorYWx3YXlzIFx1OEUzOSAxMi0yMzU2LTUKK2Fsd2F5cyBcdThFM0EgMTMtMjM0NS01CithbHdheXMgXHU4RTNCIDEzLTM1LTMKK2Fsd2F5cyBcdThFM0MgMTI0LTEzNDYtMgorYWx3YXlzIFx1OEUzRCAxMy0xMjU2LTQKK2Fsd2F5cyBcdThFM0UgMTIzNDUtMzQtMgorYWx3YXlzIFx1OEUzRiAxMjUtMzQtMgorYWx3YXlzIFx1OEU0MCAxNDUtMzQ2LTIKK2Fsd2F5cyBcdThFNDEgMTIzNC0yMzQ1LTIKK2Fsd2F5cyBcdThFNDIgMTI0NS0xMjM1Ni0yCithbHdheXMgXHU4RTQzIDEzNDUtMjUtNQorYWx3YXlzIFx1OEU0NCAxMjQtMTYtMgorYWx3YXlzIFx1OEU0NSAxMi0zNDUtNAorYWx3YXlzIFx1OEU0NiAxMjQtMTI0Ni00CithbHdheXMgXHU4RTQ3IDEzLTIzNDUtNAorYWx3YXlzIFx1OEU0OCAxNDUtMTQ2LTUKK2Fsd2F5cyBcdThFNDkgMjQ1LTI1LTMKK2Fsd2F5cyBcdThFNEEgMTUtMTYtMworYWx3YXlzIFx1OEU0QiAxMjQtMzQ1LTUKK2Fsd2F5cyBcdThFNEMgMjQ1LTQ2LTMKK2Fsd2F5cyBcdThFNEQgMS0xMjM2LTQKK2Fsd2F5cyBcdThFNEUgMTQ1LTIzNDUtMworYWx3YXlzIFx1OEU0RiAxMjQtMTYtMgorYWx3YXlzIFx1OEU1MCAxMy0xNi0yCithbHdheXMgXHU4RTUxIDEzNDUtMzQ2LTUKK2Fsd2F5cyBcdThFNTIgMTIzNC0xMjM2LTIKK2Fsd2F5cyBcdThFNTMgMTQtMjM0LTUKK2Fsd2F5cyBcdThFNTQgMTI1LTEyMzYtNQorYWx3YXlzIFx1OEU1NSAxMzUtMTYtNQorYWx3YXlzIFx1OEU1NiAxMi0xMjM0Ni0zCithbHdheXMgXHU4RTU3IDE0LTM0LTUKK2Fsd2F5cyBcdThFNTggMTQtMjQ2LTIKK2Fsd2F5cyBcdThFNTkgMjQ1LTM0LTUKK2Fsd2F5cyBcdThFNUEgMTI0LTEzNDYtMworYWx3YXlzIFx1OEU1QiAxNDUtMjQ1Ni01CithbHdheXMgXHU4RTVDIDE1LTM0LTUKK2Fsd2F5cyBcdThFNUQgMTUtMTYtNAorYWx3YXlzIFx1OEU1RSAxMjMtMTI0Ni00CithbHdheXMgXHU4RTVGIDEzLTE2LTMKK2Fsd2F5cyBcdThFNjAgMS0xNTYtMgorYWx3YXlzIFx1OEU2MSAyNDUtNDYtMworYWx3YXlzIFx1OEU2MiAxNDUtMTYtMgorYWx3YXlzIFx1OEU2MyAxMjM0LTEyMzYtMgorYWx3YXlzIFx1OEU2NCAxMjUtMTIzNDYtMworYWx3YXlzIFx1OEU2NSAxNC0yMzQ1LTIKK2Fsd2F5cyBcdThFNjYgMTM1LTEzNTYtNQorYWx3YXlzIFx1OEU2NyAxMjUtMTQ2LTMKK2Fsd2F5cyBcdThFNjggMTM0NS0yMzQ1LTQKK2Fsd2F5cyBcdThFNjkgMTM1LTM0Ni0yCithbHdheXMgXHU4RTZBIDEyNC0xMjQ2LTIKK2Fsd2F5cyBcdThFNkIgMTMtMTI1Ni0yCithbHdheXMgXHU4RTZDIDE0NS0xMzU2LTUKK2Fsd2F5cyBcdThFNkQgMjQ1LTEzNTYtNQorYWx3YXlzIFx1OEU2RSAxNS0yMzQ1LTMKK2Fsd2F5cyBcdThFNkYgMTIzNDUtMTIzNi0yCithbHdheXMgXHU4RTcwIDEyLTM0LTIKK2Fsd2F5cyBcdThFNzEgMS0xMjM0Ni0zCithbHdheXMgXHU4RTcyIDE0NS0xMjM0NTYtMworYWx3YXlzIFx1OEU3MyAxMzUtMTI2LTMKK2Fsd2F5cyBcdThFNzQgMjQ1LTM0LTUKK2Fsd2F5cyBcdThFNzUgMjQ1LTM0LTUKK2Fsd2F5cyBcdThFNzYgMTMtMjM2LTIKK2Fsd2F5cyBcdThFNzcgMTMtMjM2LTIKK2Fsd2F5cyBcdThFNzggMTQtMTQ1Ni01CithbHdheXMgXHU4RTc5IDEyNC0zNDUtNQorYWx3YXlzIFx1OEU3QSAyNDUtMjQ2LTMKK2Fsd2F5cyBcdThFN0IgMjQ1LTI0Ni0zCithbHdheXMgXHU4RTdDIDEyMzQtMzQtMgorYWx3YXlzIFx1OEU3RCAxNC0yNDYtMworYWx3YXlzIFx1OEU3RSAxNDUtMTIzNDU2LTMKK2Fsd2F5cyBcdThFN0YgMjQ1LTEyNDU2LTMKK2Fsd2F5cyBcdThFODAgMTIzLTQ1Ni01CithbHdheXMgXHU4RTgxIDEyNS0xNDYtNQorYWx3YXlzIFx1OEU4MiAxMjQtMzQ1LTUKK2Fsd2F5cyBcdThFODMgMTM1LTE2LTUKK2Fsd2F5cyBcdThFODQgMTM1LTE2LTUKK2Fsd2F5cyBcdThFODUgMS0zNC0yCithbHdheXMgXHU4RTg2IDEzLTEyNTYtNQorYWx3YXlzIFx1OEU4NyAxMi0zNC0yCithbHdheXMgXHU4RTg4IDI0NS0yNDYtNQorYWx3YXlzIFx1OEU4OSAxNDUtMTIzNDU2LTQKK2Fsd2F5cyBcdThFOEEgMTItMTIzNTYtMgorYWx3YXlzIFx1OEU4QiAxMy0xNi0zCithbHdheXMgXHU4RThDIDM0LTQKK2Fsd2F5cyBcdThFOEQgMjM2LTUKK2Fsd2F5cyBcdThFOEUgMTM0NS0yMzQ1LTQKK2Fsd2F5cyBcdThFOEYgMTQtMTQ1Ni01CithbHdheXMgXHU4RTkwIDE0LTM0Ni01CithbHdheXMgXHU4RTkxIDEtMTU2LTIKK2Fsd2F5cyBcdThFOTIgMTQtMTYtNQorYWx3YXlzIFx1OEU5MyAxLTE1Ni01CithbHdheXMgXHU4RTk0IDEyLTEyMzYtMgorYWx3YXlzIFx1OEU5NSAxMi0zNC0yCithbHdheXMgXHU4RTk2IDE0NS0xMjQ1Ni01CithbHdheXMgXHU4RTk3IDEyNDYtNQorYWx3YXlzIFx1OEU5OCAxNC0xMjM0Ni0yCithbHdheXMgXHU4RTk5IDE0LTE0NTYtNQorYWx3YXlzIFx1OEU5QSAxNS0yMzQ1LTMKK2Fsd2F5cyBcdThFOUIgMTI0Ni01CithbHdheXMgXHU4RTlDIDEyNS0xMjQ1Ni0zCithbHdheXMgXHU4RTlEIDE0LTEyMzYtMgorYWx3YXlzIFx1OEU5RSAxNS0zNDYtNQorYWx3YXlzIFx1OEU5RiAxMjQ1LTEzNDYtMgorYWx3YXlzIFx1OEVBMCAxNS0zNDUtNQorYWx3YXlzIFx1OEVBMSAxMzQ1LTM0Ni01CithbHdheXMgXHU4RUEyIDEyNC0zNDUtNQorYWx3YXlzIFx1OEVBMyAyNDUtMTI1Ni0yCithbHdheXMgXHU4RUE0IDEzLTM0Ni01CithbHdheXMgXHU4RUE1IDI0NS0xMjQ1Ni0zCithbHdheXMgXHU4RUE2IDEyNS0xMjQ1Ni0zCithbHdheXMgXHU4RUE3IDE1LTE2LTQKK2Fsd2F5cyBcdThFQTggMTIzLTEyNDYtMgorYWx3YXlzIFx1OEVBOSAxMy0yMzYtMgorYWx3YXlzIFx1OEVBQSAxNC0xNDU2LTUKK2Fsd2F5cyBcdThFQUIgMjQtMTM2LTMKK2Fsd2F5cyBcdThFQUMgMTMtMTIzNDYtMworYWx3YXlzIFx1OEVBRCAxNDUtMTIzNi0zCithbHdheXMgXHU4RUFFIDEyMzQ1LTEzNi0zCithbHdheXMgXHU4RUFGIDI0NS0xMjU2LTMKK2Fsd2F5cyBcdThFQjAgMTI0LTE2LTQKK2Fsd2F5cyBcdThFQjEgMTQ1LTI1LTQKK2Fsd2F5cyBcdThFQjIgMTQ1LTI1LTQKK2Fsd2F5cyBcdThFQjMgMTMtMTIzNDYtMworYWx3YXlzIFx1OEVCNCAxNC0xMzQ2LTIKK2Fsd2F5cyBcdThFQjUgMTI0NS0xMzYtNAorYWx3YXlzIFx1OEVCNiAxNC0yNS00CithbHdheXMgXHU4RUI3IDI0NTYtNAorYWx3YXlzIFx1OEVCOCAxMy0xNi0zCithbHdheXMgXHU4RUI5IDEzLTEyNTYtMgorYWx3YXlzIFx1OEVCQSAxMjQtMTM0Ni00CithbHdheXMgXHU4RUJCIDEyMy0xMjM0Ni0zCithbHdheXMgXHU4RUJDIDE0LTE0Ni01CithbHdheXMgXHU4RUJEIDIzNDUtNAorYWx3YXlzIFx1OEVCRSAxMzQ1LTM1Ni00CithbHdheXMgXHU4RUJGIDEyMy0xMzQ2LTMKK2Fsd2F5cyBcdThFQzAgMjQ1LTEyNTYtMworYWx3YXlzIFx1OEVDMSAxNC0xMjM1Ni0yCithbHdheXMgXHU4RUMyIDE0LTE0Ni01CithbHdheXMgXHU4RUMzIDE0NS0yNS00CithbHdheXMgXHU4RUM0IDEtMTU2LTIKK2Fsd2F5cyBcdThFQzUgMjM0NS01CithbHdheXMgXHU4RUM2IDEyNC0xNi00CithbHdheXMgXHU4RUM3IDE0NS0xNDYtNQorYWx3YXlzIFx1OEVDOCAxMzQ1Ni0zCithbHdheXMgXHU4RUM5IDEyNTYtNQorYWx3YXlzIFx1OEVDQSAxMi0yMzQ2LTMKK2Fsd2F5cyBcdThFQ0IgMjM0NTYtNQorYWx3YXlzIFx1OEVDQyAxMy0xMjQ2LTQKK2Fsd2F5cyBcdThFQ0QgMTMtMjU2LTMKK2Fsd2F5cyBcdThFQ0UgMTI0Ni01CithbHdheXMgXHU4RUNGIDIzNi01CithbHdheXMgXHU4RUQwIDE1LTE0NTYtNQorYWx3YXlzIFx1OEVEMSAxNDUtMTYtNQorYWx3YXlzIFx1OEVEMiAxNS00NS0zCithbHdheXMgXHU4RUQzIDEyMzQ1LTEyMzYtNQorYWx3YXlzIFx1OEVENCAxMjQ1LTEzNi01CithbHdheXMgXHU4RUQ1IDI0LTEyMzYtMworYWx3YXlzIFx1OEVENiAyNDUtNDYtMgorYWx3YXlzIFx1OEVENyAyNC0zNC0zCithbHdheXMgXHU4RUQ4IDEyNC0xMjM0NTYtMgorYWx3YXlzIFx1OEVEOSAxMi0xMzYtMgorYWx3YXlzIFx1OEVEQSAxNDUtMjQ1Ni01CithbHdheXMgXHU4RURCIDIzNDYtNQorYWx3YXlzIFx1OEVEQyAxMzQ1LTM0NS01CithbHdheXMgXHU4RUREIDI0NS0xNi0yCithbHdheXMgXHU4RURFIDEzNC0xNDYtMgorYWx3YXlzIFx1OEVERiAxMjQ1LTEyNDU2LTQKK2Fsd2F5cyBcdThFRTAgMTI0NS0xMzYtNQorYWx3YXlzIFx1OEVFMSAyNDUtMTQ1Ni0yCithbHdheXMgXHU4RUUyIDEtMTI0NTYtNAorYWx3YXlzIFx1OEVFMyAxMjM1LTEyMzQ2LTMKK2Fsd2F5cyBcdThFRTQgMTIzNS0zNC0zCithbHdheXMgXHU4RUU1IDI0NS0xMjU2LTIKK2Fsd2F5cyBcdThFRTYgMTIzNS00NTYtNQorYWx3YXlzIFx1OEVFNyAxNDUtMTYtNAorYWx3YXlzIFx1OEVFOCAxNC0xMzQ1Ni0yCithbHdheXMgXHU4RUU5IDE0NS0yNDU2LTUKK2Fsd2F5cyBcdThFRUEgMTQ2LTMKK2Fsd2F5cyBcdThFRUIgMS0xMzYtNAorYWx3YXlzIFx1OEVFQyAxMjM0NS0xMjM2LTUKK2Fsd2F5cyBcdThFRUQgMTIzLTQ1Ni0zCithbHdheXMgXHU4RUVFIDEzNDYtNAorYWx3YXlzIFx1OEVFRiAxMjM0LTEzNTYtMworYWx3YXlzIFx1OEVGMCAxMzUtMzU2LTUKK2Fsd2F5cyBcdThFRjEgMTMtMzQtMworYWx3YXlzIFx1OEVGMiAxMy0zNC0zCithbHdheXMgXHU4RUYzIDEyMzQtMTQ2LTIKK2Fsd2F5cyBcdThFRjQgMS0zNC01CithbHdheXMgXHU4RUY1IDEyNDUtMTIzNDYtNAorYWx3YXlzIFx1OEVGNiAyMzQ2LTUKK2Fsd2F5cyBcdThFRjcgMTM1LTM0NS0yCithbHdheXMgXHU4RUY4IDEtMTIzNTYtMgorYWx3YXlzIFx1OEVGOSAxLTE1Ni00CithbHdheXMgXHU4RUZBIDI0Ni0yCithbHdheXMgXHU4RUZCIDEyMy0yMzQ2LTMKK2Fsd2F5cyBcdThFRkMgMTYtNQorYWx3YXlzIFx1OEVGRCAyNDUtMTM0NTYtMworYWx3YXlzIFx1OEVGRSAyNC0xNTYtNQorYWx3YXlzIFx1OEVGRiAxMjM0LTEzNDU2LTIKK2Fsd2F5cyBcdThGMDAgMTU2LTIKK2Fsd2F5cyBcdThGMDEgMjQ1LTIzNS0yCithbHdheXMgXHU4RjAyIDEzLTEyNTYtMgorYWx3YXlzIFx1OEYwMyAxMy0yNDYtNQorYWx3YXlzIFx1OEYwNCAxMy00NTYtMworYWx3YXlzIFx1OEYwNSAxNC0zNC01CithbHdheXMgXHU4RjA2IDEyMy0yNDU2LTQKK2Fsd2F5cyBcdThGMDcgMjQ1LTQ1LTIKK2Fsd2F5cyBcdThGMDggMS0xMjM1Ni0zCithbHdheXMgXHU4RjA5IDEyNS0yNDU2LTUKK2Fsd2F5cyBcdThGMEEgMS0xNTYtNQorYWx3YXlzIFx1OEYwQiAyNC0yMzQ2LTIKK2Fsd2F5cyBcdThGMEMgMTQtNDYtNQorYWx3YXlzIFx1OEYwRCAxMjU2LTUKK2Fsd2F5cyBcdThGMEUgMjQtMTQ2LTMKK2Fsd2F5cyBcdThGMEYgMjM0LTIKK2Fsd2F5cyBcdThGMTAgMTI0NTYtNQorYWx3YXlzIFx1OEYxMSAyNTYtNAorYWx3YXlzIFx1OEYxMiAxLTIzNDYtMgorYWx3YXlzIFx1OEYxMyAxMjQ1Ni00CithbHdheXMgXHU4RjE0IDEyMzQ1LTM0LTQKK2Fsd2F5cyBcdThGMTUgMjQ1LTEzNDU2LTMKK2Fsd2F5cyBcdThGMTYgMS0xMjM1Ni0zCithbHdheXMgXHU4RjE3IDEzNDUtMTYtMgorYWx3YXlzIFx1OEYxOCAxNC0xMzQ1Ni0yCithbHdheXMgXHU4RjE5IDEtMjM0Ni0yCithbHdheXMgXHU4RjFBIDEtMTIzNi01CithbHdheXMgXHU4RjFCIDE0LTQ2LTUKK2Fsd2F5cyBcdThGMUMgMTI1LTE1Ni0zCithbHdheXMgXHU4RjFEIDEyMzUtMTI0Ni0zCithbHdheXMgXHU4RjFFIDQ1Ni00CithbHdheXMgXHU4RjFGIDEyLTI1LTUKK2Fsd2F5cyBcdThGMjAgMTMtMjUtNAorYWx3YXlzIFx1OEYyMSAxMjMtMTIzNi00CithbHdheXMgXHU4RjIyIDE2LTQKK2Fsd2F5cyBcdThGMjMgMTIzNC0xMzU2LTIKK2Fsd2F5cyBcdThGMjQgMjQ1LTIzNDUtNQorYWx3YXlzIFx1OEYyNSAxMy0xMjM0NTYtNAorYWx3YXlzIFx1OEYyNiAxMzQ1LTIzNDUtNAorYWx3YXlzIFx1OEYyNyAxMjM0LTEzNTYtMworYWx3YXlzIFx1OEYyOCAxMy0xMjQ1Ni00CithbHdheXMgXHU4RjI5IDEzNS0zNTYtNQorYWx3YXlzIFx1OEYyQSAxNC0xMjM0NTYtMgorYWx3YXlzIFx1OEYyQiAxMjM0LTI0NTYtMgorYWx3YXlzIFx1OEYyQyAxNC00Ni0yCithbHdheXMgXHU4RjJEIDEyNDUtMTI0NTYtNAorYWx3YXlzIFx1OEYyRSAxMjQ1LTEyMzU2LTIKK2Fsd2F5cyBcdThGMkYgMTMtMTYtMgorYWx3YXlzIFx1OEYzMCA0Ni0yCithbHdheXMgXHU4RjMxIDE1LTIzNDUtMgorYWx3YXlzIFx1OEYzMiAxMi0xMjQ1Ni0yCithbHdheXMgXHU4RjMzIDI0NS0xMjM1Ni01CithbHdheXMgXHU4RjM0IDEyLTEyMzQ1Ni0zCithbHdheXMgXHU4RjM1IDEzLTIzNDYtMgorYWx3YXlzIFx1OEYzNiAyMzQtMgorYWx3YXlzIFx1OEYzNyAxMjM1LTEyMzQ2LTMKK2Fsd2F5cyBcdThGMzggMjQtMzQtMworYWx3YXlzIFx1OEYzOSAxMjM0NS0zNC01CithbHdheXMgXHU4RjNBIDEyNS0xNTYtMworYWx3YXlzIFx1OEYzQiAxMjM0NS0zNC0yCithbHdheXMgXHU4RjNDIDEyMzQ1Ni0zCithbHdheXMgXHU4RjNEIDEzNS0xMzYtNQorYWx3YXlzIFx1OEYzRSAxMzQ1LTIzNDUtNAorYWx3YXlzIFx1OEYzRiAxMjU2LTIKK2Fsd2F5cyBcdThGNDAgMTIzNDU2LTMKK2Fsd2F5cyBcdThGNDEgMTI0LTE0Ni0zCithbHdheXMgXHU4RjQyIDEzLTM0LTQKK2Fsd2F5cyBcdThGNDMgMS0xMzYtMworYWx3YXlzIFx1OEY0NCAxNS0yMzQ1Ni0yCithbHdheXMgXHU4RjQ1IDQ1LTIKK2Fsd2F5cyBcdThGNDYgMTQtMzQtNQorYWx3YXlzIFx1OEY0NyAxMy0yMzQtMworYWx3YXlzIFx1OEY0OCAxMi0xNDYtMgorYWx3YXlzIFx1OEY0OSAxLTEyNDU2LTQKK2Fsd2F5cyBcdThGNEEgMTI0Ni01CithbHdheXMgXHU4RjRCIDEyMzUtMTIzNDU2LTIKK2Fsd2F5cyBcdThGNEMgMTUtMjM2LTQKK2Fsd2F5cyBcdThGNEQgMTItMjM0Ni01CithbHdheXMgXHU4RjRFIDEzLTI0Ni01CithbHdheXMgXHU4RjRGIDEtMTIzNi01CithbHdheXMgXHU4RjUwIDEzNS0zNC0yCithbHdheXMgXHU4RjUxIDE0LTE0Ni00CithbHdheXMgXHU4RjUyIDEyMzQ1LTEzNi0yCithbHdheXMgXHU4RjUzIDEyMzQ1LTEyMzYtMworYWx3YXlzIFx1OEY1NCAxNC0xNDU2LTIKK2Fsd2F5cyBcdThGNTUgMTMtMjM0Ni0yCithbHdheXMgXHU4RjU2IDE1LTIzNDYtNQorYWx3YXlzIFx1OEY1NyAxMjMtMTIzNi00CithbHdheXMgXHU4RjU4IDEyMzUtMTI0NTYtNQorYWx3YXlzIFx1OEY1OSAxNi00CithbHdheXMgXHU4RjVBIDEzLTE2LTIKK2Fsd2F5cyBcdThGNUIgMTQ1LTEyNDYtNQorYWx3YXlzIFx1OEY1QyAxNTYtMgorYWx3YXlzIFx1OEY1RCAxMjU2LTIKK2Fsd2F5cyBcdThGNUUgMTUtMjM0NS01CithbHdheXMgXHU4RjVGIDEyMzUtMTIzNDYtMworYWx3YXlzIFx1OEY2MCAxNC0zNTYtMgorYWx3YXlzIFx1OEY2MSAxMjM0LTM1Ni01CithbHdheXMgXHU4RjYyIDE0LTE2LTUKK2Fsd2F5cyBcdThGNjMgMTQtMTYtNQorYWx3YXlzIFx1OEY2NCAxNC0zNC0yCithbHdheXMgXHU4RjY1IDE0LTE0NTYtNQorYWx3YXlzIFx1OEY2NiAxMi0yMzQ2LTMKK2Fsd2F5cyBcdThGNjcgMjM0NTYtNQorYWx3YXlzIFx1OEY2OCAxMy0xMjQ2LTQKK2Fsd2F5cyBcdThGNjkgMTUtNDUtMworYWx3YXlzIFx1OEY2QSAxNDUtMTYtNQorYWx3YXlzIFx1OEY2QiAxMjQ1LTEzNi01CithbHdheXMgXHU4RjZDIDEtMTI0NTYtNAorYWx3YXlzIFx1OEY2RCAyMzQ2LTUKK2Fsd2F5cyBcdThGNkUgMTQtMTIzNDU2LTIKK2Fsd2F5cyBcdThGNkYgMTI0NS0xMjQ1Ni00CithbHdheXMgXHU4RjcwIDEyMzUtMTIzNDYtMworYWx3YXlzIFx1OEY3MSAxMjMtMzQtMworYWx3YXlzIFx1OEY3MiAxMjMtMjM0Ni0zCithbHdheXMgXHU4RjczIDE0LTM0LTIKK2Fsd2F5cyBcdThGNzQgMS0xMjM1Ni0yCithbHdheXMgXHU4Rjc1IDEtMTU2LTQKK2Fsd2F5cyBcdThGNzYgMTYtNQorYWx3YXlzIFx1OEY3NyAxMjM1LTM0LTMKK2Fsd2F5cyBcdThGNzggMS0xMzYtNAorYWx3YXlzIFx1OEY3OSAxNC0xNi01CithbHdheXMgXHU4RjdBIDI0Ni0yCithbHdheXMgXHU4RjdCIDI0NS0xMzQ1Ni0zCithbHdheXMgXHU4RjdDIDI0LTE1Ni01CithbHdheXMgXHU4RjdEIDEyNS0yNDU2LTUKK2Fsd2F5cyBcdThGN0UgMS0xNTYtNQorYWx3YXlzIFx1OEY3RiAxMy0yNDYtNQorYWx3YXlzIFx1OEY4MCAxLTEyMzU2LTMKK2Fsd2F5cyBcdThGODEgMjQ1LTQ1LTIKK2Fsd2F5cyBcdThGODIgMTQtMzQtNQorYWx3YXlzIFx1OEY4MyAxMy0yNDYtNQorYWx3YXlzIFx1OEY4NCAxLTIzNDYtMgorYWx3YXlzIFx1OEY4NSAxMjM0NS0zNC00CithbHdheXMgXHU4Rjg2IDE0LTQ2LTUKK2Fsd2F5cyBcdThGODcgMTM0NS0yMzQ1LTQKK2Fsd2F5cyBcdThGODggMTM1LTM1Ni01CithbHdheXMgXHU4Rjg5IDEyMzUtMTI0Ni0zCithbHdheXMgXHU4RjhBIDEzLTEyMzQ1Ni00CithbHdheXMgXHU4RjhCIDQ1Ni00CithbHdheXMgXHU4RjhDIDE0LTQ2LTIKK2Fsd2F5cyBcdThGOEQgMTItMjUtNQorYWx3YXlzIFx1OEY4RSAxMjUtMTU2LTMKK2Fsd2F5cyBcdThGOEYgMjQ1LTEyMzU2LTUKK2Fsd2F5cyBcdThGOTAgMTIzNDUtMzQtMgorYWx3YXlzIFx1OEY5MSAxMy0xNi0yCithbHdheXMgXHU4RjkyIDEyMzQ1Ni0zCithbHdheXMgXHU4RjkzIDI0LTM0LTMKK2Fsd2F5cyBcdThGOTQgMTIzNC0zNTYtNQorYWx3YXlzIFx1OEY5NSA0NS0yCithbHdheXMgXHU4Rjk2IDE1LTIzNDU2LTIKK2Fsd2F5cyBcdThGOTcgMS0xMjM2LTQKK2Fsd2F5cyBcdThGOTggMTQtMzQtNQorYWx3YXlzIFx1OEY5OSAxLTIzNDYtMgorYWx3YXlzIFx1OEY5QSAxNC0xNDU2LTIKK2Fsd2F5cyBcdThGOUIgMTUtMTQ1Ni0zCithbHdheXMgXHU4RjlDIDEzLTM0LTMKK2Fsd2F5cyBcdThGOUQgMjQ1LTE1Ni0yCithbHdheXMgXHU4RjlFIDI0NS0xNTYtMgorYWx3YXlzIFx1OEY5RiAxMjM0LTE2LTUKK2Fsd2F5cyBcdThGQTAgMTI1LTEyNDYtNQorYWx3YXlzIFx1OEZBMSAxMzUtMjM0NS01CithbHdheXMgXHU4RkEyIDE0LTM0NS01CithbHdheXMgXHU4RkEzIDE0LTM0NS01CithbHdheXMgXHU4RkE0IDI0NS0xNTYtMgorYWx3YXlzIFx1OEZBNSAxNS0yMzYtMworYWx3YXlzIFx1OEZBNiAxMzUtMTIzNi01CithbHdheXMgXHU4RkE3IDEzNS0yMzQ1LTUKK2Fsd2F5cyBcdThGQTggMTM1LTIzNDUtNQorYWx3YXlzIFx1OEZBOSAxMzUtMjM0NS01CithbHdheXMgXHU4RkFBIDE1LTIzNi0zCithbHdheXMgXHU4RkFCIDEzNS0yMzQ1LTUKK2Fsd2F5cyBcdThGQUMgMTM1LTEyMzYtMworYWx3YXlzIFx1OEZBRCAyNDUtMTU2LTIKK2Fsd2F5cyBcdThGQUUgMTM1LTIzNDUtNQorYWx3YXlzIFx1OEZBRiAxMzUtMjM0NS01CithbHdheXMgXHU4RkIwIDEyLTEzNi0yCithbHdheXMgXHU4RkIxIDEyNDUtMzQtNQorYWx3YXlzIFx1OEZCMiAxMzQ1LTEyMzQ2LTIKK2Fsd2F5cyBcdThGQjMgMTM0NS0xMjM0Ni0yCithbHdheXMgXHU4RkI0IDEtMTM2LTQKK2Fsd2F5cyBcdThGQjUgMTItMjUtNQorYWx3YXlzIFx1OEZCNiAxMi0yNS01CithbHdheXMgXHU4RkI3IDE2LTMKK2Fsd2F5cyBcdThGQjggMTI0NS0xMzU2LTIKK2Fsd2F5cyBcdThGQjkgMTM1LTIzNDUtMworYWx3YXlzIFx1OEZCQSAxMzUtMjM0NS0zCithbHdheXMgXHU4RkJCIDI0LTE1Ni0yCithbHdheXMgXHU4RkJDIDEyNDUtMzQtNQorYWx3YXlzIFx1OEZCRCAxNC0yNDYtMgorYWx3YXlzIFx1OEZCRSAxNDUtMzQ1LTIKK2Fsd2F5cyBcdThGQkYgMTItMTIzNi0zCithbHdheXMgXHU4RkMwIDEzLTEyMzYtMworYWx3YXlzIFx1OEZDMSAyNDUtMjM0NS0zCithbHdheXMgXHU4RkMyIDEyNTYtMworYWx3YXlzIFx1OEZDMyAxMjU2LTMKK2Fsd2F5cyBcdThGQzQgMjQ1LTE2LTUKK2Fsd2F5cyBcdThGQzUgMTUtMjU2LTUKK2Fsd2F5cyBcdThGQzYgMTYtNAorYWx3YXlzIFx1OEZDNyAxMy0yNS01CithbHdheXMgXHU4RkM4IDEzNC0yNDU2LTUKK2Fsd2F5cyBcdThGQzkgMjQ1LTE2LTMKK2Fsd2F5cyBcdThGQ0EgMTI1LTM0NS0zCithbHdheXMgXHU4RkNCIDQ1Ni01CithbHdheXMgXHU4RkNDIDEyNC0zNC01CithbHdheXMgXHU4RkNEIDEtMTIzNDU2LTMKK2Fsd2F5cyBcdThGQ0UgMTM0NTYtMgorYWx3YXlzIFx1OEZDRiAxMjQtMTYtNQorYWx3YXlzIFx1OEZEMCAyNTYtNQorYWx3YXlzIFx1OEZEMSAxMy0xNDU2LTUKK2Fsd2F5cyBcdThGRDIgMTIzNS0xMzQ2LTIKK2Fsd2F5cyBcdThGRDMgMjM0NTYtNQorYWx3YXlzIFx1OEZENCAxMjM0NS0xMjM2LTQKK2Fsd2F5cyBcdThGRDUgMzQtNAorYWx3YXlzIFx1OEZENiAxMjQtMTYtNQorYWx3YXlzIFx1OEZENyAyMzQ2LTIKK2Fsd2F5cyBcdThGRDggMTIzNS0yNDU2LTIKK2Fsd2F5cyBcdThGRDkgMS0yMzQ2LTUKK2Fsd2F5cyBcdThGREEgMS0xMjM0Ni0zCithbHdheXMgXHU4RkRCIDEzLTE0NTYtNQorYWx3YXlzIFx1OEZEQyA0NS00CithbHdheXMgXHU4RkREIDEyNDYtMgorYWx3YXlzIFx1OEZERSAxNC0yMzQ1LTIKK2Fsd2F5cyBcdThGREYgMTItMTU2LTIKK2Fsd2F5cyBcdThGRTAgMTItMjM0Ni01CithbHdheXMgXHU4RkUxIDEzNDUtMTYtNQorYWx3YXlzIFx1OEZFMiAxMjQtMjQ2LTIKK2Fsd2F5cyBcdThGRTMgMTItMTU2LTUKK2Fsd2F5cyBcdThGRTQgMTYtNAorYWx3YXlzIFx1OEZFNSAxMy0yMzUtNAorYWx3YXlzIFx1OEZFNiAxMy0yMzQ1Ni0zCithbHdheXMgXHU4RkU3IDEyLTEzNi0yCithbHdheXMgXHU4RkU4IDE0NS0yNDU2LTUKK2Fsd2F5cyBcdThGRTkgMTU2LTQKK2Fsd2F5cyBcdThGRUEgMTQ1LTE2LTIKK2Fsd2F5cyBcdThGRUIgMTIzNC0xMjYtNQorYWx3YXlzIFx1OEZFQyA0NTYtNAorYWx3YXlzIFx1OEZFRCAxNDUtMzQ2LTIKK2Fsd2F5cyBcdThGRUUgMTI1LTIzNDYtMgorYWx3YXlzIFx1OEZFRiAxMjQtMTQ2LTIKK2Fsd2F5cyBcdThGRjAgMjQtMzQtNQorYWx3YXlzIFx1OEZGMSAxMjQtMjUtMgorYWx3YXlzIFx1OEZGMiAyNDUtMTI1Ni01CithbHdheXMgXHU4RkYzIDEzLTEzNDU2LTUKK2Fsd2F5cyBcdThGRjQgMTIzNS0xMjQ2LTIKK2Fsd2F5cyBcdThGRjUgMTI0LTEyMzQ2LTIKK2Fsd2F5cyBcdThGRjYgMjM0LTUKK2Fsd2F5cyBcdThGRjcgMTM0LTE2LTIKK2Fsd2F5cyBcdThGRjggMTM1LTEzNTYtNQorYWx3YXlzIFx1OEZGOSAxMy0xNi0zCithbHdheXMgXHU4RkZBIDEzNDUtMjQ1Ni00CithbHdheXMgXHU4RkZCIDE2LTIKK2Fsd2F5cyBcdThGRkMgMTMtMzQ2LTIKK2Fsd2F5cyBcdThGRkQgMS0xMjQ2LTMKK2Fsd2F5cyBcdThGRkUgMTQtMzQ2LTUKK2Fsd2F5cyBcdThGRkYgMTUtMjU2LTUKK2Fsd2F5cyBcdTkwMDAgMTI0LTEyNDYtNQorYWx3YXlzIFx1OTAwMSAxNS0xMjM0Ni01CithbHdheXMgXHU5MDAyIDI0LTE1Ni01CithbHdheXMgXHU5MDAzIDEyNC0xNDYtMgorYWx3YXlzIFx1OTAwNCAxMjM0LTEzNDYtMgorYWx3YXlzIFx1OTAwNSAxMy0xMjM1Ni01CithbHdheXMgXHU5MDA2IDEzNDUtMTYtNQorYWx3YXlzIFx1OTAwNyAxNDUtMTIzNDU2LTUKK2Fsd2F5cyBcdTkwMDggMTMtMjM1LTQKK2Fsd2F5cyBcdTkwMDkgMTUtNDUtNAorYWx3YXlzIFx1OTAwQSAxNS0yNTYtNQorYWx3YXlzIFx1OTAwQiAxMzUtMzQtMworYWx3YXlzIFx1OTAwQyAyMzQtMgorYWx3YXlzIFx1OTAwRCAxNS0yNDYtMworYWx3YXlzIFx1OTAwRSAyNDUtMjM0LTIKK2Fsd2F5cyBcdTkwMEYgMTI0LTEyMzU2LTUKK2Fsd2F5cyBcdTkwMTAgMS0zNC0yCithbHdheXMgXHU5MDExIDI0NS0yMzQtMgorYWx3YXlzIFx1OTAxMiAxNDUtMTYtNQorYWx3YXlzIFx1OTAxMyAxNDUtMTYtNQorYWx3YXlzIFx1OTAxNCAxMjQtMzQtMgorYWx3YXlzIFx1OTAxNSAxMy0xMzQ1Ni01CithbHdheXMgXHU5MDE2IDEyNC0xNi01CithbHdheXMgXHU5MDE3IDE0NS0xMjM1Ni01CithbHdheXMgXHU5MDE4IDE2LTQKK2Fsd2F5cyBcdTkwMTkgMS0yMzQ2LTUKK2Fsd2F5cyBcdTkwMUEgMTI0LTEyMzQ2LTMKK2Fsd2F5cyBcdTkwMUIgMTMtNDU2LTUKK2Fsd2F5cyBcdTkwMUMgMzQtNQorYWx3YXlzIFx1OTAxRCAyNC0xNTYtNQorYWx3YXlzIFx1OTAxRSAxMi0xMzU2LTQKK2Fsd2F5cyBcdTkwMUYgMTUtMzQtNQorYWx3YXlzIFx1OTAyMCAxMjUtMTQ2LTUKK2Fsd2F5cyBcdTkwMjEgMjQ1LTI1Ni0zCithbHdheXMgXHU5MDIyIDEyMzQ1LTEzNTYtMgorYWx3YXlzIFx1OTAyMyAxNC0yMzQ1LTIKK2Fsd2F5cyBcdTkwMjQgMTUtMjUtNQorYWx3YXlzIFx1OTAyNSAxMjM1LTEyNDYtMgorYWx3YXlzIFx1OTAyNiAxNC0xNi00CithbHdheXMgXHU5MDI3IDEzLTM0LTQKK2Fsd2F5cyBcdTkwMjggMTQtMjQ1Ni0yCithbHdheXMgXHU5MDI5IDEzNS0xMzYtNQorYWx3YXlzIFx1OTAyQSAyNDUtMjUtNQorYWx3YXlzIFx1OTAyQiAxMy0yMzYtMgorYWx3YXlzIFx1OTAyQyAxMzUtMTM1Ni01CithbHdheXMgXHU5MDJEIDEyMzUtMTI0NTYtNQorYWx3YXlzIFx1OTAyRSAxNDUtMjQ1Ni00CithbHdheXMgXHU5MDJGIDE0LTM0LTUKK2Fsd2F5cyBcdTkwMzAgMjM0LTIKK2Fsd2F5cyBcdTkwMzEgMS0xMjM1Ni0zCithbHdheXMgXHU5MDMyIDEzLTE0NTYtNQorYWx3YXlzIFx1OTAzMyAxMjU2LTUKK2Fsd2F5cyBcdTkwMzQgMTItMjUtMworYWx3YXlzIFx1OTAzNSAxMjMtMTI0Ni0yCithbHdheXMgXHU5MDM2IDEyNDYtMworYWx3YXlzIFx1OTAzNyAxMjQtMTYtNQorYWx3YXlzIFx1OTAzOCAxNi01CithbHdheXMgXHU5MDM5IDE0NS0zNDUtMgorYWx3YXlzIFx1OTAzQSA0NS00CithbHdheXMgXHU5MDNCIDE0LTI1LTIKK2Fsd2F5cyBcdTkwM0MgMTM1LTE2LTMKK2Fsd2F5cyBcdTkwM0QgMTM0NS0yNS01CithbHdheXMgXHU5MDNFIDEyNTYtMgorYWx3YXlzIFx1OTAzRiAxNDUtMTM0Ni01CithbHdheXMgXHU5MDQwIDE1LTEyNDYtMgorYWx3YXlzIFx1OTA0MSAxNDUtMTIzNDU2LTUKK2Fsd2F5cyBcdTkwNDIgMTUtMTI0Ni01CithbHdheXMgXHU5MDQzIDIzNDUtNAorYWx3YXlzIFx1OTA0NCAxMi0xMjQ1Ni0yCithbHdheXMgXHU5MDQ1IDEyLTE1Ni0yCithbHdheXMgXHU5MDQ2IDEyNC0xNi0yCithbHdheXMgXHU5MDQ3IDEyNTYtNQorYWx3YXlzIFx1OTA0OCAyNC0xNTYtMgorYWx3YXlzIFx1OTA0OSAxLTEzNi0zCithbHdheXMgXHU5MDRBIDIzNC0yCithbHdheXMgXHU5MDRCIDI1Ni01CithbHdheXMgXHU5MDRDIDIzNDYtNQorYWx3YXlzIFx1OTA0RCAxMzUtMjM0NS01CithbHdheXMgXHU5MDRFIDEzLTI1LTUKK2Fsd2F5cyBcdTkwNEYgMjM0Ni01CithbHdheXMgXHU5MDUwIDE1LTIzNDU2LTIKK2Fsd2F5cyBcdTkwNTEgMTIzNS00NTYtMgorYWx3YXlzIFx1OTA1MiAyNDUtMjM0LTIKK2Fsd2F5cyBcdTkwNTMgMTQ1LTE0Ni01CithbHdheXMgXHU5MDU0IDE0NS0zNDUtMgorYWx3YXlzIFx1OTA1NSAxMjQ2LTIKK2Fsd2F5cyBcdTkwNTYgMTI0NTYtMgorYWx3YXlzIFx1OTA1NyAxNi0yCithbHdheXMgXHU5MDU4IDEzLTEyMzU2LTUKK2Fsd2F5cyBcdTkwNTkgMjQ2LTIKK2Fsd2F5cyBcdTkwNUEgMTItMzQtNQorYWx3YXlzIFx1OTA1QiAxNC0yMzQtNQorYWx3YXlzIFx1OTA1QyAxNS0yNTYtNQorYWx3YXlzIFx1OTA1RCAxMjQtMzQ1LTUKK2Fsd2F5cyBcdTkwNUUgMTQ1LTE2LTUKK2Fsd2F5cyBcdTkwNUYgMTItMTU2LTIKK2Fsd2F5cyBcdTkwNjAgNDUtNAorYWx3YXlzIFx1OTA2MSAxNS0zNC01CithbHdheXMgXHU5MDYyIDEyNC0zNDUtNQorYWx3YXlzIFx1OTA2MyAyNDUtMjM0NS00CithbHdheXMgXHU5MDY0IDEzNC0zNDUtNAorYWx3YXlzIFx1OTA2NSAyNDYtMgorYWx3YXlzIFx1OTA2NiAxMy0xMjQ1Ni01CithbHdheXMgXHU5MDY3IDEtMTM0Ni0zCithbHdheXMgXHU5MDY4IDE0Ni0yCithbHdheXMgXHU5MDY5IDI0LTE1Ni01CithbHdheXMgXHU5MDZBIDI0NS0yMzQ2LTUKK2Fsd2F5cyBcdTkwNkIgMTItMTU2LTUKK2Fsd2F5cyBcdTkwNkMgMTUtMzQtNQorYWx3YXlzIFx1OTA2RCAxMjUtMTQ2LTMKK2Fsd2F5cyBcdTkwNkUgMS0yMzQ2LTMKK2Fsd2F5cyBcdTkwNkYgMTQ1LTEyMzQ1Ni01CithbHdheXMgXHU5MDcwIDE0NS0xNi01CithbHdheXMgXHU5MDcxIDE0LTEyMzU2LTIKK2Fsd2F5cyBcdTkwNzIgMTItMTU2LTIKK2Fsd2F5cyBcdTkwNzMgMjQ1LTI1LTMKK2Fsd2F5cyBcdTkwNzQgMTQtMTQ1Ni0yCithbHdheXMgXHU5MDc1IDEyNS0xMjM0NTYtMworYWx3YXlzIFx1OTA3NiAxMjQ1LTE0Ni01CithbHdheXMgXHU5MDc3IDI0NS0yMzQ1LTMKK2Fsd2F5cyBcdTkwNzggMTUtNDUtNAorYWx3YXlzIFx1OTA3OSAxMjU2LTUKK2Fsd2F5cyBcdTkwN0EgMTYtMgorYWx3YXlzIFx1OTA3QiAyMzQ2LTUKK2Fsd2F5cyBcdTkwN0MgMTQtMjQ2LTIKK2Fsd2F5cyBcdTkwN0QgMTMtMTI1Ni01CithbHdheXMgXHU5MDdFIDI0LTE1Ni01CithbHdheXMgXHU5MDdGIDEzNS0xNi01CithbHdheXMgXHU5MDgwIDI0Ni0zCithbHdheXMgXHU5MDgxIDEzNC0yNDU2LTUKK2Fsd2F5cyBcdTkwODIgMTUtMzQ2LTUKK2Fsd2F5cyBcdTkwODMgMTUtMTI0Ni01CithbHdheXMgXHU5MDg0IDEyMzUtMjQ1Ni0yCithbHdheXMgXHU5MDg1IDEtMTIzNi0zCithbHdheXMgXHU5MDg2IDEyNC0xMzU2LTIKK2Fsd2F5cyBcdTkwODcgMTU2LTQKK2Fsd2F5cyBcdTkwODggMTM0LTI0Ni00CithbHdheXMgXHU5MDg5IDEzNS0yMzQ1LTMKK2Fsd2F5cyBcdTkwOEEgMTM1LTIzNDUtMworYWx3YXlzIFx1OTA4QiAxNC0zNDUtMworYWx3YXlzIFx1OTA4QyAxNC0xNi0yCithbHdheXMgXHU5MDhEIDQ1LTIKK2Fsd2F5cyBcdTkwOEUgMjQ2LTIKK2Fsd2F5cyBcdTkwOEYgMTQtMjUtMgorYWx3YXlzIFx1OTA5MCAxNC0xNi00CithbHdheXMgXHU5MDkxIDE2LTUKK2Fsd2F5cyBcdTkwOTIgMTI0LTEzNDU2LTIKK2Fsd2F5cyBcdTkwOTMgMTQ1LTEzNTYtNQorYWx3YXlzIFx1OTA5NCAyNDUtMTYtNAorYWx3YXlzIFx1OTA5NSAyMzUtMworYWx3YXlzIFx1OTA5NiAyNC0xMjM2LTMKK2Fsd2F5cyBcdTkwOTcgMTIzNS0xMjM2LTIKK2Fsd2F5cyBcdTkwOTggMTI1Ni0yCithbHdheXMgXHU5MDk5IDEzNC0xMzQ2LTIKK2Fsd2F5cyBcdTkwOUEgMTI0NS0zNC0yCithbHdheXMgXHU5MDlCIDI0NS0yMzUtMgorYWx3YXlzIFx1OTA5QyAxMzQtMTQ2LTQKK2Fsd2F5cyBcdTkwOUQgMTIzLTQ1Ni01CithbHdheXMgXHU5MDlFIDEyMzQ1LTM0LTMKK2Fsd2F5cyBcdTkwOUYgMTIzLTEzNDYtNQorYWx3YXlzIFx1OTBBMCAxMzUtMTQ1Ni0zCithbHdheXMgXHU5MEExIDEyMzQ1LTEzNDYtMworYWx3YXlzIFx1OTBBMiAxNS0xMzQ1Ni0yCithbHdheXMgXHU5MEEzIDEzNDUtMzQ1LTUKK2Fsd2F5cyBcdTkwQTQgMTUtMTQ1Ni0zCithbHdheXMgXHU5MEE1IDI0LTEzNi00CithbHdheXMgXHU5MEE2IDEzNS0xMzQ2LTMKK2Fsd2F5cyBcdTkwQTcgNDUtMgorYWx3YXlzIFx1OTBBOCAyNDUtMTIzNDU2LTMKK2Fsd2F5cyBcdTkwQTkgMTIzNS0yNS00CithbHdheXMgXHU5MEFBIDE1LTM0Ni0yCithbHdheXMgXHU5MEFCIDEzNS0xMzQ2LTMKK2Fsd2F5cyBcdTkwQUMgMzQtMworYWx3YXlzIFx1OTBBRCAxMy0xMjU2LTUKK2Fsd2F5cyBcdTkwQUUgMjM0LTIKK2Fsd2F5cyBcdTkwQUYgMTIzNS0xMjM2LTIKK2Fsd2F5cyBcdTkwQjAgMTI0LTI0NTYtMgorYWx3YXlzIFx1OTBCMSAyNDUtMjM0LTMKK2Fsd2F5cyBcdTkwQjIgMTM1LTE2LTUKK2Fsd2F5cyBcdTkwQjMgMTIzNC0xNi0zCithbHdheXMgXHU5MEI0IDEzNS0xMzQ1Ni00CithbHdheXMgXHU5MEI1IDI0LTE0Ni01CithbHdheXMgXHU5MEI2IDEzNS0zNTYtNQorYWx3YXlzIFx1OTBCNyAzNS00CithbHdheXMgXHU5MEI4IDE0NS0xNi00CithbHdheXMgXHU5MEI5IDEyNS0xMjM1Ni0zCithbHdheXMgXHU5MEJBIDM0Ni01CithbHdheXMgXHU5MEJCIDE0LTE0NTYtMgorYWx3YXlzIFx1OTBCQyAxMjMtNDU2LTMKK2Fsd2F5cyBcdTkwQkQgMTMtMTI0Ni0zCithbHdheXMgXHU5MEJFIDEtMzQtMworYWx3YXlzIFx1OTBCRiAyNC0xNTYtMworYWx3YXlzIFx1OTBDMCAxMjMtMzQtMworYWx3YXlzIFx1OTBDMSAxMjU2LTUKK2Fsd2F5cyBcdTkwQzIgMTMtMjQ1Ni0zCithbHdheXMgXHU5MEMzIDEyMzUtMjM0Ni0yCithbHdheXMgXHU5MEM0IDE1LTM0Ni01CithbHdheXMgXHU5MEM1IDEtMTU2LTUKK2Fsd2F5cyBcdTkwQzYgMTMtMTYtMgorYWx3YXlzIFx1OTBDNyAxNS0yNTYtMgorYWx3YXlzIFx1OTBDOCAxMjM1LTEyMzU2LTUKK2Fsd2F5cyBcdTkwQzkgMTUtMTM0NTYtMgorYWx3YXlzIFx1OTBDQSAxMy0yNDYtMworYWx3YXlzIFx1OTBDQiAxNS0xNi0yCithbHdheXMgXHU5MENDIDEzLTEyNDYtMworYWx3YXlzIFx1OTBDRCAxMzQ1LTI1LTIKK2Fsd2F5cyBcdTkwQ0UgMTQtMTM0Ni0yCithbHdheXMgXHU5MENGIDEzLTIzNDU2LTIKK2Fsd2F5cyBcdTkwRDAgMTIzLTIzNTYtNQorYWx3YXlzIFx1OTBEMSAxLTEzNTYtNQorYWx3YXlzIFx1OTBEMiAxNC0xMzQ2LTIKK2Fsd2F5cyBcdTkwRDMgMjU2LTUKK2Fsd2F5cyBcdTkwRDQgMjM0NS0yCithbHdheXMgXHU5MEQ1IDEyLTEzNTYtMgorYWx3YXlzIFx1OTBENiAxNDUtMTIzNTYtMworYWx3YXlzIFx1OTBENyAxNS0xNi0zCithbHdheXMgXHU5MEQ4IDE0LTEyNTYtNAorYWx3YXlzIFx1OTBEOSAxMjM0NS0zNC00CithbHdheXMgXHU5MERBIDM0LTIKK2Fsd2F5cyBcdTkwREIgMTIzNDUtMzQtMgorYWx3YXlzIFx1OTBEQyAxMy0xNDYtNQorYWx3YXlzIFx1OTBERCAxMjM1LTE0Ni00CithbHdheXMgXHU5MERFIDE0LTEzNDYtMgorYWx3YXlzIFx1OTBERiAxMy0yMzQ1Ni0yCithbHdheXMgXHU5MEUwIDEzLTEzNTYtNAorYWx3YXlzIFx1OTBFMSAxMy0yNTYtNQorYWx3YXlzIFx1OTBFMiAxMzQ1Ni00CithbHdheXMgXHU5MEUzIDEzNS0xMjYtMgorYWx3YXlzIFx1OTBFNCAxNS0xNi01CithbHdheXMgXHU5MEU1IDEzNS0zNTYtNQorYWx3YXlzIFx1OTBFNiAxNC0xNi01CithbHdheXMgXHU5MEU3IDI1Ni0yCithbHdheXMgXHU5MEU4IDEzNS0zNC01CithbHdheXMgXHU5MEU5IDE1LTI0Ni0yCithbHdheXMgXHU5MEVBIDI0NS0xNi0zCithbHdheXMgXHU5MEVCIDEyMzQtMTYtMgorYWx3YXlzIFx1OTBFQyAyNDUtMTM0NTYtMworYWx3YXlzIFx1OTBFRCAxMy0yNS0zCithbHdheXMgXHU5MEVFIDEtMTIzNTYtMworYWx3YXlzIFx1OTBFRiAxMjQtMTIzNi0yCithbHdheXMgXHU5MEYwIDEyNS0xMjM1Ni0zCithbHdheXMgXHU5MEYxIDEyMzQtMTM0NTYtMgorYWx3YXlzIFx1OTBGMiAxNC0yNDU2LTIKK2Fsd2F5cyBcdTkwRjMgMTM0NS0xNi0yCithbHdheXMgXHU5MEY0IDEyLTEzNi0zCithbHdheXMgXHU5MEY1IDIzNC0yCithbHdheXMgXHU5MEY2IDEzNS0zNC01CithbHdheXMgXHU5MEY3IDE1LTQ2LTMKK2Fsd2F5cyBcdTkwRjggMTQ1LTEyMzYtMworYWx3YXlzIFx1OTBGOSAxMy0xMjU2LTIKK2Fsd2F5cyBcdTkwRkEgMjM1LTMKK2Fsd2F5cyBcdTkwRkIgMjQ1LTI0Ni0zCithbHdheXMgXHU5MEZDIDE2LTMKK2Fsd2F5cyBcdTkwRkQgMTQ1LTEyMzU2LTMKK2Fsd2F5cyBcdTkwRkUgMjM0NS00CithbHdheXMgXHU5MEZGIDEzNC0zNTYtMgorYWx3YXlzIFx1OTEwMCAxMjQ1LTI1LTUKK2Fsd2F5cyBcdTkxMDEgMTM1LTM1Ni01CithbHdheXMgXHU5MTAyIDIzNDYtNQorYWx3YXlzIFx1OTEwMyAxMjU2LTIKK2Fsd2F5cyBcdTkxMDQgMTMtNDUtNQorYWx3YXlzIFx1OTEwNSAxMjU2LTQKK2Fsd2F5cyBcdTkxMDYgMjU2LTUKK2Fsd2F5cyBcdTkxMDcgMTIzNS0xMjM1Ni01CithbHdheXMgXHU5MTA4IDEyMy0xMjQ2LTIKK2Fsd2F5cyBcdTkxMDkgMTUtNDYtMworYWx3YXlzIFx1OTEwQSAxNS00Ni0zCithbHdheXMgXHU5MTBCIDE1LTEyMzU2LTMKK2Fsd2F5cyBcdTkxMEMgMTI0LTEzNDYtMgorYWx3YXlzIFx1OTEwRCAxMzQtMTM0NTYtMgorYWx3YXlzIFx1OTEwRSAxNS0xNi0zCithbHdheXMgXHU5MTBGIDEyNDUtMzQtNQorYWx3YXlzIFx1OTExMCAxMi0zNC01CithbHdheXMgXHU5MTExIDEyNS0xNTYtMworYWx3YXlzIFx1OTExMiAxMjUtMTIzNTYtMworYWx3YXlzIFx1OTExMyAxMy0xMjU2LTIKK2Fsd2F5cyBcdTkxMTQgMzQtMworYWx3YXlzIFx1OTExNSAxNS00Ni0zCithbHdheXMgXHU5MTE2IDI1Ni0yCithbHdheXMgXHU5MTE3IDEyMzUtMTQ2LTUKK2Fsd2F5cyBcdTkxMTggMjM1LTMKK2Fsd2F5cyBcdTkxMTkgMTM1LTE2LTQKK2Fsd2F5cyBcdTkxMUEgMTM0LTEyNi01CithbHdheXMgXHU5MTFCIDEyLTE0Ni0yCithbHdheXMgXHU5MTFDIDEyMzQ1LTM0LTMKK2Fsd2F5cyBcdTkxMUQgMTQtMjQ2LTQKK2Fsd2F5cyBcdTkxMUUgMTQ1Ni0yCithbHdheXMgXHU5MTFGIDEtMTI0NTYtMworYWx3YXlzIFx1OTEyMCAxMjM1LTM0LTUKK2Fsd2F5cyBcdTkxMjEgMjQ1LTI0Ni0zCithbHdheXMgXHU5MTIyIDIzNDUtMworYWx3YXlzIFx1OTEyMyAxLTEzNDYtMworYWx3YXlzIFx1OTEyNCAxMzQtMTIzNi01CithbHdheXMgXHU5MTI1IDI0NS0yNDYtMworYWx3YXlzIFx1OTEyNiAxNS0xMjU2LTQKK2Fsd2F5cyBcdTkxMjcgMTQ1LTEzNTYtNQorYWx3YXlzIFx1OTEyOCAxMzUtMTYtNQorYWx3YXlzIFx1OTEyOSAxNS0yNTYtMgorYWx3YXlzIFx1OTEyQSAxMzUtMTYtNQorYWx3YXlzIFx1OTEyQiAyNDUtMTM1Ni0yCithbHdheXMgXHU5MTJDIDEyNDYtMgorYWx3YXlzIFx1OTEyRCAxLTEzNTYtNQorYWx3YXlzIFx1OTEyRSAxMzQtMTQ2LTUKK2Fsd2F5cyBcdTkxMkYgMjQtMTIzNi01CithbHdheXMgXHU5MTMwIDE0LTE0NTYtMgorYWx3YXlzIFx1OTEzMSAxMjM0LTEyNi0yCithbHdheXMgXHU5MTMyIDE0NS0xMjM2LTMKK2Fsd2F5cyBcdTkxMzMgMTM0LTEzNTYtMgorYWx3YXlzIFx1OTEzNCAzNDYtNQorYWx3YXlzIFx1OTEzNSAyNDUtMTQ2LTMKK2Fsd2F5cyBcdTkxMzYgMTIzLTIzNTYtNQorYWx3YXlzIFx1OTEzNyAxMjM0NS0xMzU2LTMKK2Fsd2F5cyBcdTkxMzggMTM0LTEzNTYtMgorYWx3YXlzIFx1OTEzOSAxMjUtMTIzNTYtMworYWx3YXlzIFx1OTEzQSAxMjMtNDU2LTUKK2Fsd2F5cyBcdTkxM0IgMTQtMjM0NS00CithbHdheXMgXHU5MTNDIDEyNS0xMjM2LTUKK2Fsd2F5cyBcdTkxM0QgMTItMTIzNi0yCithbHdheXMgXHU5MTNFIDIzNC0zCithbHdheXMgXHU5MTNGIDI0NS0xNi0yCithbHdheXMgXHU5MTQwIDIzNDUtMworYWx3YXlzIFx1OTE0MSAxMi0xMjM2LTIKK2Fsd2F5cyBcdTkxNDIgMTI1LTEyMzYtNQorYWx3YXlzIFx1OTE0MyAxNC0xMzQ1Ni0yCithbHdheXMgXHU5MTQ0IDEyMzUtMTI0NTYtMworYWx3YXlzIFx1OTE0NSAxNS0xNi0zCithbHdheXMgXHU5MTQ2IDEyMzQ1LTEzNTYtMworYWx3YXlzIFx1OTE0NyAxMjUtMTIzNi01CithbHdheXMgXHU5MTQ4IDE0LTE2LTUKK2Fsd2F5cyBcdTkxNDkgMjM0LTQKK2Fsd2F5cyBcdTkxNEEgMTQ1LTEzNDU2LTQKK2Fsd2F5cyBcdTkxNEIgMjQ1LTIzNC0yCithbHdheXMgXHU5MTRDIDEtMjUtMgorYWx3YXlzIFx1OTE0RCAxMjM0LTM1Ni01CithbHdheXMgXHU5MTRFIDEtMTIzNTYtNQorYWx3YXlzIFx1OTE0RiAxMjU2LTQKK2Fsd2F5cyBcdTkxNTAgMTMtMTIzNi0zCithbHdheXMgXHU5MTUxIDEyNTYtNAorYWx3YXlzIFx1OTE1MiAxMy0yMzQtNAorYWx3YXlzIFx1OTE1MyAyMzQ1LTQKK2Fsd2F5cyBcdTkxNTQgMTI1LTEyNDYtNQorYWx3YXlzIFx1OTE1NSAxMzQtMTQ2LTIKK2Fsd2F5cyBcdTkxNTYgMTQ1LTEyMzYtMworYWx3YXlzIFx1OTE1NyAxNS0xMjU2LTUKK2Fsd2F5cyBcdTkxNTggMTI0LTEyMzU2LTIKK2Fsd2F5cyBcdTkxNTkgMS0xMzYtMworYWx3YXlzIFx1OTE1QSAxMjM0NS0xMzYtMworYWx3YXlzIFx1OTE1QiA0NS0yCithbHdheXMgXHU5MTVDIDEyMzQ1LTM0LTMKK2Fsd2F5cyBcdTkxNUQgMjU2LTUKK2Fsd2F5cyBcdTkxNUUgMTI0LTI0NTYtNQorYWx3YXlzIFx1OTE1RiAxMjQtMjM0NS0zCithbHdheXMgXHU5MTYwIDI0NS0yMzQ1Ni00CithbHdheXMgXHU5MTYxIDEyNC0yNS0yCithbHdheXMgXHU5MTYyIDEyNS0yNS01CithbHdheXMgXHU5MTYzIDEyMzUtMTIzNi0zCithbHdheXMgXHU5MTY0IDEzLTM0LTMKK2Fsd2F5cyBcdTkxNjUgMTUtMzQtMworYWx3YXlzIFx1OTE2NiAxMjM0LTEyNi01CithbHdheXMgXHU5MTY3IDEyLTEyMzU2LTIKK2Fsd2F5cyBcdTkxNjggMTI1LTI0NTYtNQorYWx3YXlzIFx1OTE2OSAxMzQtMTM0NTYtNAorYWx3YXlzIFx1OTE2QSAxNC0yNS01CithbHdheXMgXHU5MTZCIDEyLTI1LTUKK2Fsd2F5cyBcdTkxNkMgMTItMTIzNTYtMgorYWx3YXlzIFx1OTE2RCAyMzQtNQorYWx3YXlzIFx1OTE2RSAxMjQtMTIzNDYtMgorYWx3YXlzIFx1OTE2RiAxLTE1Ni00CithbHdheXMgXHU5MTcwIDE1LTIzNDUtMworYWx3YXlzIFx1OTE3MSAxMy00Ni01CithbHdheXMgXHU5MTcyIDEyLTEzNTYtMgorYWx3YXlzIFx1OTE3MyAxNDU2LTUKK2Fsd2F5cyBcdTkxNzQgMTI0LTM0LTIKK2Fsd2F5cyBcdTkxNzUgMTUtMjQ2LTUKK2Fsd2F5cyBcdTkxNzYgMTM0LTM1Ni0yCithbHdheXMgXHU5MTc3IDEyMy0zNC01CithbHdheXMgXHU5MTc4IDE1LTEyNDU2LTMKK2Fsd2F5cyBcdTkxNzkgMTQtMzU2LTUKK2Fsd2F5cyBcdTkxN0EgMTIzNC0zNC0yCithbHdheXMgXHU5MTdCIDEyNS0xMjQ2LTUKK2Fsd2F5cyBcdTkxN0MgMTIzNS0yNDU2LTQKK2Fsd2F5cyBcdTkxN0QgMjM0NS01CithbHdheXMgXHU5MTdFIDI0LTI0NTYtMworYWx3YXlzIFx1OTE3RiAxMzQ1LTQ2LTUKK2Fsd2F5cyBcdTkxODAgMTI0Ni0yCithbHdheXMgXHU5MTgxIDE0LTM0LTUKK2Fsd2F5cyBcdTkxODIgMTQtMTIzNi00CithbHdheXMgXHU5MTgzIDIzNDUtMworYWx3YXlzIFx1OTE4NCAxMjQtMTQ2LTIKK2Fsd2F5cyBcdTkxODUgMTIzNC0zNTYtMworYWx3YXlzIFx1OTE4NiAxLTEyMzYtNAorYWx3YXlzIFx1OTE4NyAxMi0xMjM0NTYtMgorYWx3YXlzIFx1OTE4OCAxMjQtMTIzNi0yCithbHdheXMgXHU5MTg5IDEyNS0xMjQ2LTUKK2Fsd2F5cyBcdTkxOEEgMS0xMjQ2LTUKK2Fsd2F5cyBcdTkxOEIgMjQ1LTM0LTUKK2Fsd2F5cyBcdTkxOEMgMTIzLTEyMzQ1Ni0zCithbHdheXMgXHU5MThEIDEyNC0xNi0yCithbHdheXMgXHU5MThFIDE1LTIzNDUtMgorYWx3YXlzIFx1OTE4RiAxNDUtMzQtMworYWx3YXlzIFx1OTE5MCAxMjM1LTM0LTIKK2Fsd2F5cyBcdTkxOTEgMTUtMTI1Ni00CithbHdheXMgXHU5MTkyIDE1LTEzNDU2LTQKK2Fsd2F5cyBcdTkxOTMgMTI0LTEyMzYtNAorYWx3YXlzIFx1OTE5NCAxMy0yMzQtMworYWx3YXlzIFx1OTE5NSAxMi0xMjM0NTYtMgorYWx3YXlzIFx1OTE5NiAyNTYtNQorYWx3YXlzIFx1OTE5NyAxMjM0LTEyNi01CithbHdheXMgXHU5MTk4IDEyMy0yMzQ2LTUKK2Fsd2F5cyBcdTkxOTkgMTUtMTIzNTYtMworYWx3YXlzIFx1OTE5QSAxMzQtMTYtMgorYWx3YXlzIFx1OTE5QiAyNDUtNDUtMgorYWx3YXlzIFx1OTE5QyAxMi0xMjM1Ni00CithbHdheXMgXHU5MTlEIDI0NS0yNS0yCithbHdheXMgXHU5MTlFIDI1Ni01CithbHdheXMgXHU5MTlGIDIzNS01CithbHdheXMgXHU5MUEwIDEzNDYtNQorYWx3YXlzIFx1OTFBMSAxLTM0NS01CithbHdheXMgXHU5MUEyIDEyMzUtMjQ1Ni00CithbHdheXMgXHU5MUEzIDEyNC0xMzQ2LTIKK2Fsd2F5cyBcdTkxQTQgMTMtNDYtNQorYWx3YXlzIFx1OTFBNSAxMjM0LTI0Ni00CithbHdheXMgXHU5MUE2IDI0LTEyMzYtNAorYWx3YXlzIFx1OTFBNyAxMjU2LTUKK2Fsd2F5cyBcdTkxQTggMTQtMTYtMgorYWx3YXlzIFx1OTFBOSAxMjUtMTQ2LTIKK2Fsd2F5cyBcdTkxQUEgMTQtMTQ2LTIKK2Fsd2F5cyBcdTkxQUIgMTYtMworYWx3YXlzIFx1OTFBQyAxMy00Ni01CithbHdheXMgXHU5MUFEIDEyMzQtMzQtMgorYWx3YXlzIFx1OTFBRSAxMy0yNDYtNQorYWx3YXlzIFx1OTFBRiAxNS0xNi0zCithbHdheXMgXHU5MUIwIDEyNC0xMjM2LTIKK2Fsd2F5cyBcdTkxQjEgMTIzNC0xMjYtNQorYWx3YXlzIFx1OTFCMiAxMzQ1LTEyMzQ2LTIKK2Fsd2F5cyBcdTkxQjMgMTYtNQorYWx3YXlzIFx1OTFCNCAxNC0xNi00CithbHdheXMgXHU5MUI1IDEzLTEyNTYtNQorYWx3YXlzIFx1OTFCNiAxMy0yNDYtNQorYWx3YXlzIFx1OTFCNyAxNi01CithbHdheXMgXHU5MUI4IDEzNDUtNDYtNQorYWx3YXlzIFx1OTFCOSAxMjQ1LTM0LTIKK2Fsd2F5cyBcdTkxQkEgMTUtMjU2LTMKK2Fsd2F5cyBcdTkxQkIgMTItMTIzNTYtMgorYWx3YXlzIFx1OTFCQyAyMzQ1LTUKK2Fsd2F5cyBcdTkxQkQgMTQtMTM0NTYtMgorYWx3YXlzIFx1OTFCRSAxMzQtMTYtMgorYWx3YXlzIFx1OTFCRiAxMzQtMTYtMgorYWx3YXlzIFx1OTFDMCAxMzQ1LTQ2LTUKK2Fsd2F5cyBcdTkxQzEgMTUtMTQ1Ni01CithbHdheXMgXHU5MUMyIDEzLTI0Ni01CithbHdheXMgXHU5MUMzIDI0LTE1Ni0zCithbHdheXMgXHU5MUM0IDEzNC0xNi0yCithbHdheXMgXHU5MUM1IDIzNDUtNQorYWx3YXlzIFx1OTFDNiAxMzUtMjM0NS01CithbHdheXMgXHU5MUM3IDI0NS0yNDU2LTQKK2Fsd2F5cyBcdTkxQzggMjQtMTU2LTUKK2Fsd2F5cyBcdTkxQzkgMjM0LTUKK2Fsd2F5cyBcdTkxQ0EgMjQtMTU2LTUKK2Fsd2F5cyBcdTkxQ0IgMjQtMTU2LTUKK2Fsd2F5cyBcdTkxQ0MgMTQtMTYtNAorYWx3YXlzIFx1OTFDRCAxLTEyMzQ2LTUKK2Fsd2F5cyBcdTkxQ0UgMzQ2LTQKK2Fsd2F5cyBcdTkxQ0YgMTQtNDYtNQorYWx3YXlzIFx1OTFEMCAxNC0xNi0yCithbHdheXMgXHU5MUQxIDEzLTE0NTYtMworYWx3YXlzIFx1OTFEMiAxMy0xNDU2LTMKK2Fsd2F5cyBcdTkxRDMgMTMtMzQ1LTMKK2Fsd2F5cyBcdTkxRDQgMTYtNAorYWx3YXlzIFx1OTFENSAxNC0yNDYtNAorYWx3YXlzIFx1OTFENiAxNDUtMTQ2LTMKK2Fsd2F5cyBcdTkxRDcgMS0xNDYtMworYWx3YXlzIFx1OTFEOCAxNDUtMTM0NTYtMworYWx3YXlzIFx1OTFEOSAxMjM0LTEyNi01CithbHdheXMgXHU5MURBIDI0NS0yMzQtMgorYWx3YXlzIFx1OTFEQiAxMjM1LTIzNDYtMgorYWx3YXlzIFx1OTFEQyAxMjM0NS0zNC00CithbHdheXMgXHU5MUREIDEtMTM2LTMKK2Fsd2F5cyBcdTkxREUgMS0xNTYtMgorYWx3YXlzIFx1OTFERiAxMzUtMzQ1LTMKK2Fsd2F5cyBcdTkxRTAgMTQtMTI0NTYtNQorYWx3YXlzIFx1OTFFMSAxMjM0NS0zNC00CithbHdheXMgXHU5MUUyIDEzNDUtMjQ1Ni00CithbHdheXMgXHU5MUUzIDE0NS0yNDYtNQorYWx3YXlzIFx1OTFFNCAyNC0xMjM2LTMKK2Fsd2F5cyBcdTkxRTUgMjQ1LTI0Ni00CithbHdheXMgXHU5MUU2IDEyMy0xMjM1Ni01CithbHdheXMgXHU5MUU3IDEyLTEyNDU2LTUKK2Fsd2F5cyBcdTkxRTggMTI1LTE1Ni00CithbHdheXMgXHU5MUU5IDEyMzQ1LTEyMzYtMgorYWx3YXlzIFx1OTFFQSAxMjU2LTIKK2Fsd2F5cyBcdTkxRUIgMTIzNS0zNS0yCithbHdheXMgXHU5MUVDIDEyMzUtMTIzNi01CithbHdheXMgXHU5MUVEIDEzLTEzNDYtMworYWx3YXlzIFx1OTFFRSAyNDUtMTYtMgorYWx3YXlzIFx1OTFFRiAxMzQtMTM0Ni0yCithbHdheXMgXHU5MUYwIDEyNDUtMTM2LTUKK2Fsd2F5cyBcdTkxRjEgMTQ1LTE2LTUKK2Fsd2F5cyBcdTkxRjIgMTUtMTU2LTUKK2Fsd2F5cyBcdTkxRjMgMTUtMTYtNQorYWx3YXlzIFx1OTFGNCAxNi01CithbHdheXMgXHU5MUY1IDEyLTI0NTYtMworYWx3YXlzIFx1OTFGNiAyNC0xNTYtMworYWx3YXlzIFx1OTFGNyAxMjQtMzQtNAorYWx3YXlzIFx1OTFGOCAxNS0xNi01CithbHdheXMgXHU5MUY5IDEzNDUtMTI1Ni00CithbHdheXMgXHU5MUZBIDI0NS0yMzQ1LTMKK2Fsd2F5cyBcdTkxRkIgMjQ1LTIzNC0yCithbHdheXMgXHU5MUZDIDEzLTIzNDUtNQorYWx3YXlzIFx1OTFGRCAxMjM0LTE2LTMKK2Fsd2F5cyBcdTkxRkUgMzQ2LTIKK2Fsd2F5cyBcdTkxRkYgMTQ1Ni0yCithbHdheXMgXHU5MjAwIDEzNS0zNDUtNAorYWx3YXlzIFx1OTIwMSAxMjM0NS0xMzQ2LTMKK2Fsd2F5cyBcdTkyMDIgMTItMTM2LTIKK2Fsd2F5cyBcdTkyMDMgMTUtMTM0NTYtMgorYWx3YXlzIFx1OTIwNCAxMjQtMTIzNTYtNAorYWx3YXlzIFx1OTIwNSAyMzYtNQorYWx3YXlzIFx1OTIwNiAyNDUtMjM0NS0zCithbHdheXMgXHU5MjA3IDEyMzQ1LTM0LTMKK2Fsd2F5cyBcdTkyMDggMTM1LTM0LTUKK2Fsd2F5cyBcdTkyMDkgMTM0NS0zNDUtNQorYWx3YXlzIFx1OTIwQSAxNS0xNDU2LTMKK2Fsd2F5cyBcdTkyMEIgMjM0Ni0yCithbHdheXMgXHU5MjBDIDEzLTIzNi0yCithbHdheXMgXHU5MjBEIDE0NS0xMjM0NTYtNQorYWx3YXlzIFx1OTIwRSAxMy0xMjM1Ni0zCithbHdheXMgXHU5MjBGIDE0NTYtNAorYWx3YXlzIFx1OTIxMCAyNDUtMjM0NS0yCithbHdheXMgXHU5MjExIDEzNS0xMjM2LTQKK2Fsd2F5cyBcdTkyMTIgMTUtMjM0Ni01CithbHdheXMgXHU5MjEzIDEyNDUtMTM2LTIKK2Fsd2F5cyBcdTkyMTQgMTItMTQ2LTMKK2Fsd2F5cyBcdTkyMTUgMTM0NS0yMzQtNAorYWx3YXlzIFx1OTIxNiAxMjM0NS0xMzYtMworYWx3YXlzIFx1OTIxNyAyNTYtNAorYWx3YXlzIFx1OTIxOCAxMy0xNi00CithbHdheXMgXHU5MjE5IDI0NS0xNDU2LTIKK2Fsd2F5cyBcdTkyMUEgMTIzNC0xNi0yCithbHdheXMgXHU5MjFCIDEzLTI1LTMKK2Fsd2F5cyBcdTkyMUMgMTIzNS0xMjM0Ni0yCithbHdheXMgXHU5MjFEIDE0NTYtMgorYWx3YXlzIFx1OTIxRSAxMy0yNTYtMworYWx3YXlzIFx1OTIxRiAyNC0xNTYtMworYWx3YXlzIFx1OTIyMCAxNi01CithbHdheXMgXHU5MjIxIDEtMTIzNDYtMworYWx3YXlzIFx1OTIyMiAxMzQ1LTM0Ni0zCithbHdheXMgXHU5MjIzIDEzLTI0NTYtNQorYWx3YXlzIFx1OTIyNCAxMjQ1LTE1Ni01CithbHdheXMgXHU5MjI1IDEyMzUtMjUtNAorYWx3YXlzIFx1OTIyNiAxMjQtMjQ1Ni01CithbHdheXMgXHU5MjI3IDEyMy0xMzQ2LTUKK2Fsd2F5cyBcdTkyMjggNDUtMgorYWx3YXlzIFx1OTIyOSAxNC0zNC0yCithbHdheXMgXHU5MjJBIDIzNDYtNQorYWx3YXlzIFx1OTIyQiAyNDUtMTQ1Ni0yCithbHdheXMgXHU5MjJDIDE0NS0yNS0yCithbHdheXMgXHU5MjJEIDEyNS0xNTYtMworYWx3YXlzIFx1OTIyRSAxMzQ1LTE2LTIKK2Fsd2F5cyBcdTkyMkYgMTI0LTM0LTIKK2Fsd2F5cyBcdTkyMzAgMjQtMTU2LTUKK2Fsd2F5cyBcdTkyMzEgMTM0LTE0NTYtMgorYWx3YXlzIFx1OTIzMiAxMy0zNC0zCithbHdheXMgXHU5MjMzIDEyMy0yMzQ2LTMKK2Fsd2F5cyBcdTkyMzQgMTQtMTM0NTYtMgorYWx3YXlzIFx1OTIzNSAxMzUtMTM0NTYtNQorYWx3YXlzIFx1OTIzNiAxNS0xNTYtNQorYWx3YXlzIFx1OTIzNyAxMy0zNC0zCithbHdheXMgXHU5MjM4IDEzNS0xMjYtMgorYWx3YXlzIFx1OTIzOSAxMjM0LTE2LTIKK2Fsd2F5cyBcdTkyM0EgMTI1Ni01CithbHdheXMgXHU5MjNCIDE1LTE1Ni01CithbHdheXMgXHU5MjNDIDEyNS0yNS0yCithbHdheXMgXHU5MjNEIDEzNS0zNC01CithbHdheXMgXHU5MjNFIDIzNC0yCithbHdheXMgXHU5MjNGIDE0NS0yMzQ1LTUKK2Fsd2F5cyBcdTkyNDAgMTMtMjM0NTYtNAorYWx3YXlzIFx1OTI0MSAxLTEzNi0zCithbHdheXMgXHU5MjQyIDI0LTE1Ni00CithbHdheXMgXHU5MjQzIDI0LTE1Ni01CithbHdheXMgXHU5MjQ0IDEyNC0zNDYtNAorYWx3YXlzIFx1OTI0NSAxMy0xMjU2LTUKK2Fsd2F5cyBcdTkyNDYgMTI1LTEyNDU2LTMKK2Fsd2F5cyBcdTkyNDcgMjQtMTU2LTMKK2Fsd2F5cyBcdTkyNDggMTI0LTM0NS00CithbHdheXMgXHU5MjQ5IDE1LTQ1LTUKK2Fsd2F5cyBcdTkyNEEgMS0xNDYtMworYWx3YXlzIFx1OTI0QiAxMzUtMTQ2LTUKK2Fsd2F5cyBcdTkyNEMgMTIzNS0yMzQ2LTIKK2Fsd2F5cyBcdTkyNEQgMTM1LTE2LTUKK2Fsd2F5cyBcdTkyNEUgMjQtMTM1Ni0zCithbHdheXMgXHU5MjRGIDEyLTM0LTIKK2Fsd2F5cyBcdTkyNTAgMjQtMTU2LTIKK2Fsd2F5cyBcdTkyNTEgMTM1LTEyNi0yCithbHdheXMgXHU5MjUyIDEtMzQtNQorYWx3YXlzIFx1OTI1MyAxMi0xNTYtNQorYWx3YXlzIFx1OTI1NCAxMjUtMzQ1LTMKK2Fsd2F5cyBcdTkyNTUgMTIzNC0xMjYtNAorYWx3YXlzIFx1OTI1NiAxMjQtMTIzNDYtMgorYWx3YXlzIFx1OTI1NyAyNDUtMjM0NS0yCithbHdheXMgXHU5MjU4IDEyMzQ1LTM0LTIKK2Fsd2F5cyBcdTkyNTkgMS0yNDU2LTQKK2Fsd2F5cyBcdTkyNUEgMTM0LTE0Ni00CithbHdheXMgXHU5MjVCIDI0NS0yMzQ1LTMKK2Fsd2F5cyBcdTkyNUMgMTIzNDUtMzQtMgorYWx3YXlzIFx1OTI1RCAxNC0xNi01CithbHdheXMgXHU5MjVFIDIzNi01CithbHdheXMgXHU5MjVGIDEyMzQtMTYtMworYWx3YXlzIFx1OTI2MCA0Ni0zCithbHdheXMgXHU5MjYxIDEzNS0xMjM2LTUKK2Fsd2F5cyBcdTkyNjIgMTM1LTEyNi0zCithbHdheXMgXHU5MjYzIDEzLTM0Ni0yCithbHdheXMgXHU5MjY0IDEzLTEyMzU2LTMKK2Fsd2F5cyBcdTkyNjUgMjQtMzQtNQorYWx3YXlzIFx1OTI2NiAxLTEzNTYtMworYWx3YXlzIFx1OTI2NyAxMzQtMzQtNAorYWx3YXlzIFx1OTI2OCAxMzQ1LTE2LTQKK2Fsd2F5cyBcdTkyNjkgMTUtMTYtNAorYWx3YXlzIFx1OTI2QSAxNDUtMTYtNQorYWx3YXlzIFx1OTI2QiAxMy0yMzQ1Ni0zCithbHdheXMgXHU5MjZDIDEzNC0zNC01CithbHdheXMgXHU5MjZEIDE0NS0xMjM2LTUKK2Fsd2F5cyBcdTkyNkUgMjQtMTM2LTMKK2Fsd2F5cyBcdTkyNkYgMTYtNAorYWx3YXlzIFx1OTI3MCAxNS0xNTYtMworYWx3YXlzIFx1OTI3MSAxMjMtNDU2LTUKK2Fsd2F5cyBcdTkyNzIgMTIzLTM0NS00CithbHdheXMgXHU5MjczIDEzNS0zNTYtNAorYWx3YXlzIFx1OTI3NCAxMy0yMzQ1LTUKK2Fsd2F5cyBcdTkyNzUgMTI0LTEyMzQ2LTIKK2Fsd2F5cyBcdTkyNzYgMTUtMTM0NTYtMgorYWx3YXlzIFx1OTI3NyAxMjM1LTEyMzQ2LTIKK2Fsd2F5cyBcdTkyNzggMTMtMjQ2LTQKK2Fsd2F5cyBcdTkyNzkgMTItMTU2LTQKK2Fsd2F5cyBcdTkyN0EgMTU2LTQKK2Fsd2F5cyBcdTkyN0IgMTMtMjM0Ni01CithbHdheXMgXHU5MjdDIDEzNS0xMzQ1Ni00CithbHdheXMgXHU5MjdEIDI0LTE1Ni01CithbHdheXMgXHU5MjdFIDEzNC0xMjM1Ni0yCithbHdheXMgXHU5MjdGIDEyMzUtMzQ1LTMKK2Fsd2F5cyBcdTkyODAgMTQ1Ni0yCithbHdheXMgXHU5MjgxIDEzLTI1Ni0zCithbHdheXMgXHU5MjgyIDEtMTIzNTYtMworYWx3YXlzIFx1OTI4MyAxMi0xMjM0Ni01CithbHdheXMgXHU5Mjg0IDI0LTEzNDYtNQorYWx3YXlzIFx1OTI4NSAxMjQtMTIzNDYtMgorYWx3YXlzIFx1OTI4NiAxMzQtMTI2LTUKK2Fsd2F5cyBcdTkyODcgMTQtMzU2LTUKK2Fsd2F5cyBcdTkyODggMTMtMTYtMworYWx3YXlzIFx1OTI4OSAxMjU2LTUKK2Fsd2F5cyBcdTkyOEEgMTUtMTI1Ni01CithbHdheXMgXHU5MjhCIDEyNDUtMTM2LTIKK2Fsd2F5cyBcdTkyOEMgMTI1LTEyMzQ1Ni01CithbHdheXMgXHU5MjhEIDEtMTU2LTUKK2Fsd2F5cyBcdTkyOEUgMjQ1LTIzNS0yCithbHdheXMgXHU5MjhGIDI0LTEyMzYtNQorYWx3YXlzIFx1OTI5MCAxMi0xNTYtNQorYWx3YXlzIFx1OTI5MSAxNS0yMzQ1LTQKK2Fsd2F5cyBcdTkyOTIgMTUtMTM0NTYtMgorYWx3YXlzIFx1OTI5MyAyNDUtNDUtMgorYWx3YXlzIFx1OTI5NCAxMjM0LTE2LTMKK2Fsd2F5cyBcdTkyOTUgMTI0LTM0Ni00CithbHdheXMgXHU5Mjk2IDEtMzQtMworYWx3YXlzIFx1OTI5NyAxNS00Ni01CithbHdheXMgXHU5Mjk4IDEzNC0xMzQ1Ni0yCithbHdheXMgXHU5Mjk5IDEyMy0zNS00CithbHdheXMgXHU5MjlBIDE0NS0yNDYtNQorYWx3YXlzIFx1OTI5QiAxNS0yMzQ1LTMKK2Fsd2F5cyBcdTkyOUMgMTUtMjM0NS0yCithbHdheXMgXHU5MjlEIDE1LTIzNC0zCithbHdheXMgXHU5MjlFIDEzLTI1Ni0zCithbHdheXMgXHU5MjlGIDEyLTM0NS0zCithbHdheXMgXHU5MkEwIDE0LTE0Ni00CithbHdheXMgXHU5MkExIDEzLTE2LTIKK2Fsd2F5cyBcdTkyQTIgMTIzNC0xNi00CithbHdheXMgXHU5MkEzIDEyNDUtMzQtMgorYWx3YXlzIFx1OTJBNCAxMzQtMTYtNAorYWx3YXlzIFx1OTJBNSAxNi0zCithbHdheXMgXHU5MkE2IDE0NTYtMworYWx3YXlzIFx1OTJBNyAxMy00NTYtMworYWx3YXlzIFx1OTJBOCAxMjM2LTMKK2Fsd2F5cyBcdTkyQTkgMTQ1LTIzNC0zCithbHdheXMgXHU5MkFBIDIzNC00CithbHdheXMgXHU5MkFCIDE1LTIzNDYtNQorYWx3YXlzIFx1OTJBQyAxMjMtMTQ2LTUKK2Fsd2F5cyBcdTkyQUQgMjQ1LTIzNDUtMgorYWx3YXlzIFx1OTJBRSAxNC0xMjQ1Ni0yCithbHdheXMgXHU5MkFGIDE1LTE1Ni0zCithbHdheXMgXHU5MkIwIDI0NTYtNQorYWx3YXlzIFx1OTJCMSAxNDUtMjQ2LTUKK2Fsd2F5cyBcdTkyQjIgMTIzNS0xMjM2LTUKK2Fsd2F5cyBcdTkyQjMgMTI0NS0xMjQ2LTUKK2Fsd2F5cyBcdTkyQjQgMjQtMTU2LTUKK2Fsd2F5cyBcdTkyQjUgMTIzLTEzNTYtMworYWx3YXlzIFx1OTJCNiAyNDUtMjM0LTIKK2Fsd2F5cyBcdTkyQjcgMTUtMjQ2LTMKK2Fsd2F5cyBcdTkyQjggMS0yMzQ2LTIKK2Fsd2F5cyBcdTkyQjkgMTUtMjM0LTUKK2Fsd2F5cyBcdTkyQkEgMTI1LTEzNDYtNQorYWx3YXlzIFx1OTJCQiAxMjQtMTYtMworYWx3YXlzIFx1OTJCQyAyNDUtMjUtNQorYWx3YXlzIFx1OTJCRCAxMy0zNS0zCithbHdheXMgXHU5MkJFIDEzLTEyMzQ2LTQKK2Fsd2F5cyBcdTkyQkYgMS0xMjM0Ni0zCithbHdheXMgXHU5MkMwIDE0NS0xMjM1Ni01CithbHdheXMgXHU5MkMxIDE0LTEyNTYtNAorYWx3YXlzIFx1OTJDMiAxMzQtMzU2LTIKK2Fsd2F5cyBcdTkyQzMgMTQtMTM0Ni0yCithbHdheXMgXHU5MkM0IDEyNDU2LTQKK2Fsd2F5cyBcdTkyQzUgMTUtMTQ1Ni0zCithbHdheXMgXHU5MkM2IDI1Ni0yCithbHdheXMgXHU5MkM3IDEzNS0zNTYtNQorYWx3YXlzIFx1OTJDOCAzNC01CithbHdheXMgXHU5MkM5IDE1LTM0LTUKK2Fsd2F5cyBcdTkyQ0EgMTI1Ni01CithbHdheXMgXHU5MkNCIDEyLTEyMzYtMgorYWx3YXlzIFx1OTJDQyAxMjQtMTM0NTYtNAorYWx3YXlzIFx1OTJDRCAxMzUtMTI2LTIKK2Fsd2F5cyBcdTkyQ0UgMTIzNS0xMjM2LTUKK2Fsd2F5cyBcdTkyQ0YgMTMtMjM0NTYtMgorYWx3YXlzIFx1OTJEMCAxMjM1LTEyMzQ2LTIKK2Fsd2F5cyBcdTkyRDEgMTMtNDUtMworYWx3YXlzIFx1OTJEMiAxMjM0NS0xMzU2LTMKK2Fsd2F5cyBcdTkyRDMgMTItMTIzNi0zCithbHdheXMgXHU5MkQ0IDEyNDU2LTQKK2Fsd2F5cyBcdTkyRDUgMS0xNTYtNQorYWx3YXlzIFx1OTJENiAxNS0xNTYtMworYWx3YXlzIFx1OTJENyAxNS00NS0zCithbHdheXMgXHU5MkQ4IDEyMzUtMzUtMgorYWx3YXlzIFx1OTJEOSAzNC0yCithbHdheXMgXHU5MkRBIDEyNC0yNDYtMgorYWx3YXlzIFx1OTJEQiAxMy0xMjM0Ni00CithbHdheXMgXHU5MkRDIDEyLTI1LTUKK2Fsd2F5cyBcdTkyREQgMTQtMjM2LTUKK2Fsd2F5cyBcdTkyREUgMTUtMTM0NTYtMgorYWx3YXlzIFx1OTJERiAyNDUtMTQ1Ni00CithbHdheXMgXHU5MkUwIDI0LTEzNi01CithbHdheXMgXHU5MkUxIDEyMzUtMTIzNi0yCithbHdheXMgXHU5MkUyIDE0LTIzNi01CithbHdheXMgXHU5MkUzIDM0Ni0yCithbHdheXMgXHU5MkU0IDEyLTM0LTIKK2Fsd2F5cyBcdTkyRTUgMS0xMzU2LTUKK2Fsd2F5cyBcdTkyRTYgMTMtMTI1Ni0yCithbHdheXMgXHU5MkU3IDE1LTIzNDUtNQorYWx3YXlzIFx1OTJFOCAyMzQ2LTIKK2Fsd2F5cyBcdTkyRTkgMTM0LTEzNDYtMgorYWx3YXlzIFx1OTJFQSAxMjM0LTM0LTMKK2Fsd2F5cyBcdTkyRUIgMTQtMTYtMgorYWx3YXlzIFx1OTJFQyAxMjM0LTEyMzYtNQorYWx3YXlzIFx1OTJFRCAxMjQ1LTEyNDYtNQorYWx3YXlzIFx1OTJFRSAxMi0xMzU2LTIKK2Fsd2F5cyBcdTkyRUYgMTMtMTQ2LTUKK2Fsd2F5cyBcdTkyRjAgMTQtMTYtNAorYWx3YXlzIFx1OTJGMSAxMjQtMjM0Ni01CithbHdheXMgXHU5MkYyIDE0NTYtMworYWx3YXlzIFx1OTJGMyAxLTM0LTUKK2Fsd2F5cyBcdTkyRjQgMS0xMzYtNQorYWx3YXlzIFx1OTJGNSAxMjQtMzQtMworYWx3YXlzIFx1OTJGNiAxNC0yMzQtNAorYWx3YXlzIFx1OTJGNyAxMjUtMTI0Ni01CithbHdheXMgXHU5MkY4IDEzLTEyNTYtNQorYWx3YXlzIFx1OTJGOSAxMi0xMzQ2LTQKK2Fsd2F5cyBcdTkyRkEgNDUtMworYWx3YXlzIFx1OTJGQiAxMy0yMzQ1LTUKK2Fsd2F5cyBcdTkyRkMgMTMtMTM0Ni0zCithbHdheXMgXHU5MkZEIDE0NS0yNDYtNQorYWx3YXlzIFx1OTJGRSAxMjQtMTQ2LTIKK2Fsd2F5cyBcdTkyRkYgMTItMTM0Ni0yCithbHdheXMgXHU5MzAwIDE0LTEyMzQ1Ni0yCithbHdheXMgXHU5MzAxIDEyMy0yMzQ2LTUKK2Fsd2F5cyBcdTkzMDIgMTQtMTM0NTYtMgorYWx3YXlzIFx1OTMwMyAxMzUtMzU2LTMKK2Fsd2F5cyBcdTkzMDQgMTQtMzQtNQorYWx3YXlzIFx1OTMwNSAxNC0xNi0yCithbHdheXMgXHU5MzA2IDI0NS00Ni0zCithbHdheXMgXHU5MzA3IDEyMzQtMzU2LTIKK2Fsd2F5cyBcdTkzMDggMTMtNDUtNAorYWx3YXlzIFx1OTMwOSAxMzQtMTQ1Ni0yCithbHdheXMgXHU5MzBBIDEyNS0xMjQ2LTUKK2Fsd2F5cyBcdTkzMEIgMTIzNC0xMzU2LTIKK2Fsd2F5cyBcdTkzMEMgMTIzNi01CithbHdheXMgXHU5MzBEIDEyMzQtMTYtMgorYWx3YXlzIFx1OTMwRSAxNS0yMzQ1LTUKK2Fsd2F5cyBcdTkzMEYgMjM0NTYtNQorYWx3YXlzIFx1OTMxMCAxLTEyNDYtMworYWx3YXlzIFx1OTMxMSAxNC0zNTYtNQorYWx3YXlzIFx1OTMxMiAzNDUtMworYWx3YXlzIFx1OTMxMyAxMjMtMTIzNDYtMworYWx3YXlzIFx1OTMxNCAxMjQtMzQ1LTUKK2Fsd2F5cyBcdTkzMTUgMTIzLTEyMzQ1Ni0zCithbHdheXMgXHU5MzE2IDE0NS0zNC0zCithbHdheXMgXHU5MzE3IDEyNDYtNQorYWx3YXlzIFx1OTMxOCAxMi0xMjQ2LTIKK2Fsd2F5cyBcdTkzMTkgMTI1LTE1Ni0zCithbHdheXMgXHU5MzFBIDEtMTM1Ni0zCithbHdheXMgXHU5MzFCIDEzNS0xMzYtMworYWx3YXlzIFx1OTMxQyAxMzQ1LTM0Ni0zCithbHdheXMgXHU5MzFEIDI0NS0xMjM0Ni0yCithbHdheXMgXHU5MzFFIDE0NS0xMjQ2LTUKK2Fsd2F5cyBcdTkzMUYgMTI0LTEyMzYtMgorYWx3YXlzIFx1OTMyMCAxNDUtMTM0NTYtNQorYWx3YXlzIFx1OTMyMSAyNDUtMTYtMgorYWx3YXlzIFx1OTMyMiAyNDUtMjM0NS0yCithbHdheXMgXHU5MzIzIDEtMTI0Ni01CithbHdheXMgXHU5MzI0IDEzLTE2LTMKK2Fsd2F5cyBcdTkzMjUgMTI1Ni01CithbHdheXMgXHU5MzI2IDEzLTE0NTYtNAorYWx3YXlzIFx1OTMyNyAxMy0xMjQ1Ni00CithbHdheXMgXHU5MzI4IDEzNC0xNDYtMgorYWx3YXlzIFx1OTMyOSAxMi0xMzQ2LTMKK2Fsd2F5cyBcdTkzMkEgMTI0LTIzNDUtNAorYWx3YXlzIFx1OTMyQiAxNS0xNi0yCithbHdheXMgXHU5MzJDIDE0LTIzNDUtNQorYWx3YXlzIFx1OTMyRCAxNDUtMjQ2LTMKK2Fsd2F5cyBcdTkzMkUgMTMtMzQtNQorYWx3YXlzIFx1OTMyRiAyNDUtMjUtNQorYWx3YXlzIFx1OTMzMCAyNC0zNC01CithbHdheXMgXHU5MzMxIDEtMTM2LTMKK2Fsd2F5cyBcdTkzMzIgMTQtMzQtNQorYWx3YXlzIFx1OTMzMyAxMzQtMTM1Ni00CithbHdheXMgXHU5MzM0IDE0LTM0LTUKK2Fsd2F5cyBcdTkzMzUgMTIzNS0zNS0zCithbHdheXMgXHU5MzM2IDEzNS0yNDYtNAorYWx3YXlzIFx1OTMzNyAxMy0zNDUtMgorYWx3YXlzIFx1OTMzOCAxNC0yNDU2LTIKK2Fsd2F5cyBcdTkzMzkgMTIzLTEzNi00CithbHdheXMgXHU5MzNBIDEyMzQ1LTEyMzYtMworYWx3YXlzIFx1OTMzQiAzNC00CithbHdheXMgXHU5MzNDIDEzNDUtMjQ1Ni01CithbHdheXMgXHU5MzNEIDEyNDU2LTQKK2Fsd2F5cyBcdTkzM0UgMTI1LTEyMzYtNQorYWx3YXlzIFx1OTMzRiAzNC00CithbHdheXMgXHU5MzQwIDE0NS0yMzQ2LTIKK2Fsd2F5cyBcdTkzNDEgMTUtMjM0NS0zCithbHdheXMgXHU5MzQyIDEyMzQtMjM0NS0zCithbHdheXMgXHU5MzQzIDEyMzUtMjUtNQorYWx3YXlzIFx1OTM0NCAxNC00Ni01CithbHdheXMgXHU5MzQ1IDEyMzQ1LTM0NS00CithbHdheXMgXHU5MzQ2IDEzNC0xMzYtMgorYWx3YXlzIFx1OTM0NyAxMjMtMjQ1Ni00CithbHdheXMgXHU5MzQ4IDQ2LTMKK2Fsd2F5cyBcdTkzNDkgMjQtMTU2LTIKK2Fsd2F5cyBcdTkzNEEgMTQtMjM0NS01CithbHdheXMgXHU5MzRCIDEzLTI1LTMKK2Fsd2F5cyBcdTkzNEMgMTUtMjM0NS00CithbHdheXMgXHU5MzREIDE0NS0zNC01CithbHdheXMgXHU5MzRFIDEyNC0zNC0yCithbHdheXMgXHU5MzRGIDEyNDYtMgorYWx3YXlzIFx1OTM1MCAxMjUtMTIzNDYtMworYWx3YXlzIFx1OTM1MSAxMjM0NS0zNC01CithbHdheXMgXHU5MzUyIDEyNDUtMTIzNTYtMgorYWx3YXlzIFx1OTM1MyAxMy0xNi0yCithbHdheXMgXHU5MzU0IDIzNDYtNQorYWx3YXlzIFx1OTM1NSAxMy0yNTYtMworYWx3YXlzIFx1OTM1NiAxMi0xMzYtNAorYWx3YXlzIFx1OTM1NyAxMjQtMTYtMgorYWx3YXlzIFx1OTM1OCAxLTM0NS0yCithbHdheXMgXHU5MzU5IDEyMzUtMTIzNDYtNQorYWx3YXlzIFx1OTM1QSA0Ni0yCithbHdheXMgXHU5MzVCIDE0NS0xMjQ1Ni01CithbHdheXMgXHU5MzVDIDE1LTIzNDU2LTIKK2Fsd2F5cyBcdTkzNUQgMTI1Ni0yCithbHdheXMgXHU5MzVFIDEyMy0xMzU2LTMKK2Fsd2F5cyBcdTkzNUYgMTUtMTM0NTYtMworYWx3YXlzIFx1OTM2MCAxMjM1LTQ1Ni0yCithbHdheXMgXHU5MzYxIDEyNDYtNAorYWx3YXlzIFx1OTM2MiAxMjM0NS0zNC01CithbHdheXMgXHU5MzYzIDEtMTQ2LTMKK2Fsd2F5cyBcdTkzNjQgMTItMzQ1LTMKK2Fsd2F5cyBcdTkzNjUgMjQ1LTM0Ni01CithbHdheXMgXHU5MzY2IDI0LTIzNDYtMgorYWx3YXlzIFx1OTM2NyAxMjM1LTEyMzQ2LTMKK2Fsd2F5cyBcdTkzNjggMTIzLTEyNDYtMgorYWx3YXlzIFx1OTM2OSAxMzQ1LTI1LTUKK2Fsd2F5cyBcdTkzNkEgMTM0LTEyMzU2LTIKK2Fsd2F5cyBcdTkzNkIgMjQ1LTI0Ni0zCithbHdheXMgXHU5MzZDIDI0NS0yNDYtMworYWx3YXlzIFx1OTM2RCAxMjM1LTEyMzU2LTIKK2Fsd2F5cyBcdTkzNkUgMTI0LTEyMzU2LTMKK2Fsd2F5cyBcdTkzNkYgMjQ1LTEyMzQ2LTMKK2Fsd2F5cyBcdTkzNzAgMTIzNS0xMjQ1Ni0yCithbHdheXMgXHU5MzcxIDM0Ni01CithbHdheXMgXHU5MzcyIDEzNC0xNDU2LTIKK2Fsd2F5cyBcdTkzNzMgMTMtMjM0NS01CithbHdheXMgXHU5Mzc0IDE0NS0xMjQ1Ni0zCithbHdheXMgXHU5Mzc1IDEzLTIzNDUtNQorYWx3YXlzIFx1OTM3NiAxNS0xNTYtMworYWx3YXlzIFx1OTM3NyAxMjMtMTI0Ni0zCithbHdheXMgXHU5Mzc4IDEyMzUtMzQtMgorYWx3YXlzIFx1OTM3OSAxNS00NS0zCithbHdheXMgXHU5MzdBIDEtMjM0Ni00CithbHdheXMgXHU5MzdCIDEzLTM0Ni0yCithbHdheXMgXHU5MzdDIDEtMTM2LTMKK2Fsd2F5cyBcdTkzN0QgMTM1LTIzNDUtMworYWx3YXlzIFx1OTM3RSAxLTEyMzQ2LTMKK2Fsd2F5cyBcdTkzN0YgMTI1LTE1Ni0zCithbHdheXMgXHU5MzgwIDE1LTIzNC0zCithbHdheXMgXHU5MzgxIDM0Ni0yCithbHdheXMgXHU5MzgyIDEzNC0zNTYtNAorYWx3YXlzIFx1OTM4MyAxMjM0LTI0NTYtNQorYWx3YXlzIFx1OTM4NCAyNDU2LTMKK2Fsd2F5cyBcdTkzODUgMTMtMzQ2LTUKK2Fsd2F5cyBcdTkzODYgMjQ1LTIzNDUtMgorYWx3YXlzIFx1OTM4NyAxMzQtMzU2LTIKK2Fsd2F5cyBcdTkzODggMTItMjUtMworYWx3YXlzIFx1OTM4OSAxMjQtMzQ1LTUKK2Fsd2F5cyBcdTkzOEEgMTM1LTEzNDYtNQorYWx3YXlzIFx1OTM4QiAxNS0yMzQ1Ni0yCithbHdheXMgXHU5MzhDIDE0LTIzNDUtMgorYWx3YXlzIFx1OTM4RCAxNS0yNS00CithbHdheXMgXHU5MzhFIDE1LTE2LTUKK2Fsd2F5cyBcdTkzOEYgMTQtMjM0LTIKK2Fsd2F5cyBcdTkzOTAgMTI1LTM0LTIKK2Fsd2F5cyBcdTkzOTEgMzQ2LTUKK2Fsd2F5cyBcdTkzOTIgMTM0NS0xMjM1Ni01CithbHdheXMgXHU5MzkzIDEyMzQ2LTMKK2Fsd2F5cyBcdTkzOTQgMTI0NS0xMjM0Ni0yCithbHdheXMgXHU5Mzk1IDEyNC0xMzQ2LTIKK2Fsd2F5cyBcdTkzOTYgMTUtMjUtNAorYWx3YXlzIFx1OTM5NyAyNDUtNDYtMworYWx3YXlzIFx1OTM5OCAxMy0yMzQ2LTIKK2Fsd2F5cyBcdTkzOTkgMjQtMjUtNQorYWx3YXlzIFx1OTM5QSAxMi0xMjQ2LTIKK2Fsd2F5cyBcdTkzOUIgMTM1LTEyNi0yCithbHdheXMgXHU5MzlDIDEyMzQtMTIzNi0yCithbHdheXMgXHU5MzlEIDEyNC0zNDUtNAorYWx3YXlzIFx1OTM5RSAxMzUtMTYtNQorYWx3YXlzIFx1OTM5RiAxNS0xMzQ2LTQKK2Fsd2F5cyBcdTkzQTAgMTMtMTM0Ni0zCithbHdheXMgXHU5M0ExIDEyNS0xNTYtMworYWx3YXlzIFx1OTNBMiAzNC0zCithbHdheXMgXHU5M0EzIDEzNDU2LTIKK2Fsd2F5cyBcdTkzQTQgMTIzNS00NTYtNAorYWx3YXlzIFx1OTNBNSAxMjQtMjQ2LTIKK2Fsd2F5cyBcdTkzQTYgMTQtMjM0LTIKK2Fsd2F5cyBcdTkzQTcgMTIzLTI0NTYtNAorYWx3YXlzIFx1OTNBOCAxNS0xMjM0NTYtNAorYWx3YXlzIFx1OTNBOSAyNC0zNDUtMworYWx3YXlzIFx1OTNBQSAxNS0xMjM1Ni0zCithbHdheXMgXHU5M0FCIDEyNDU2LTUKK2Fsd2F5cyBcdTkzQUMgMTMtMTQ2LTQKK2Fsd2F5cyBcdTkzQUQgMS0xMzYtNQorYWx3YXlzIFx1OTNBRSAxLTEzNi01CithbHdheXMgXHU5M0FGIDE0LTI1LTQKK2Fsd2F5cyBcdTkzQjAgMTYtNQorYWx3YXlzIFx1OTNCMSA0NS0yCithbHdheXMgXHU5M0IyIDEyNC0xMzQ2LTQKK2Fsd2F5cyBcdTkzQjMgMTM0NS0zNDYtNQorYWx3YXlzIFx1OTNCNCAxNS0xNi0yCithbHdheXMgXHU5M0I1IDEzLTIzNDU2LTMKK2Fsd2F5cyBcdTkzQjYgMTMtMjM0Ni0zCithbHdheXMgXHU5M0I3IDEzNC0zNDUtNAorYWx3YXlzIFx1OTNCOCAxMy00NS0zCithbHdheXMgXHU5M0I5IDE1LTEyMzQ2LTUKK2Fsd2F5cyBcdTkzQkEgMTI1LTM0LTQKK2Fsd2F5cyBcdTkzQkIgMTUtMjUtNAorYWx3YXlzIFx1OTNCQyAxNS00Ni01CithbHdheXMgXHU5M0JEIDEyMzQ1LTEzNTYtMworYWx3YXlzIFx1OTNCRSAxMjM0NTYtMworYWx3YXlzIFx1OTNCRiAxMzQ1LTM0NS0yCithbHdheXMgXHU5M0MwIDE0LTM0LTQKK2Fsd2F5cyBcdTkzQzEgMTUtMjUtNAorYWx3YXlzIFx1OTNDMiAxMjM1Ni0zCithbHdheXMgXHU5M0MzIDEyNS0zNC0yCithbHdheXMgXHU5M0M0IDEyNC0xMjQ1Ni0yCithbHdheXMgXHU5M0M1IDE1LTIzNC0zCithbHdheXMgXHU5M0M2IDEzLTEyNDU2LTUKK2Fsd2F5cyBcdTkzQzcgMTUtNDUtMgorYWx3YXlzIFx1OTNDOCAxNC0yMzQ1LTUKK2Fsd2F5cyBcdTkzQzkgMjQtMTIzNTYtNQorYWx3YXlzIFx1OTNDQSAxNDYtNQorYWx3YXlzIFx1OTNDQiAxMzQtMTIzNi00CithbHdheXMgXHU5M0NDIDEzNC0xMjYtNQorYWx3YXlzIFx1OTNDRCAxNC0yNS0yCithbHdheXMgXHU5M0NFIDEzNS0xNi01CithbHdheXMgXHU5M0NGIDEyNDYtNQorYWx3YXlzIFx1OTNEMCAxNC0yMzQtMgorYWx3YXlzIFx1OTNEMSAxNDUtMTYtMgorYWx3YXlzIFx1OTNEMiAyNDUtMjQ2LTMKK2Fsd2F5cyBcdTkzRDMgMjQ1LTEyMzQ2LTMKK2Fsd2F5cyBcdTkzRDQgMTYtMgorYWx3YXlzIFx1OTNENSAxNC0zNC01CithbHdheXMgXHU5M0Q2IDE0Ni0yCithbHdheXMgXHU5M0Q3IDEyMy0xMzU2LTMKK2Fsd2F5cyBcdTkzRDggMjQ1LTQ2LTMKK2Fsd2F5cyBcdTkzRDkgMjQ1LTEyNDYtMworYWx3YXlzIFx1OTNEQSAyNDUtMTYtNQorYWx3YXlzIFx1OTNEQiAxMi0xMzQ2LTIKK2Fsd2F5cyBcdTkzREMgMTI0LTEzNDYtMworYWx3YXlzIFx1OTNERCAxMzQtMTIzNi01CithbHdheXMgXHU5M0RFIDIzNS0zCithbHdheXMgXHU5M0RGIDEyLTEyMzYtNAorYWx3YXlzIFx1OTNFMCAxMjM0NS0xMzU2LTMKK2Fsd2F5cyBcdTkzRTEgMTMtMTM0NTYtNQorYWx3YXlzIFx1OTNFMiAxMzUtMjQ2LTMKK2Fsd2F5cyBcdTkzRTMgMjQtMzQtNQorYWx3YXlzIFx1OTNFNCAxNC0xMjM1Ni01CithbHdheXMgXHU5M0U1IDE1LTIzNC01CithbHdheXMgXHU5M0U2IDI0NS0xMjM0Ni0zCithbHdheXMgXHU5M0U3IDE0LTEyMzQ2LTIKK2Fsd2F5cyBcdTkzRTggMTI1LTEyMzYtNQorYWx3YXlzIFx1OTNFOSAxMy0yMzQ1LTUKK2Fsd2F5cyBcdTkzRUEgMjQ1LTE0Ni0yCithbHdheXMgXHU5M0VCIDE0LTE2LTIKK2Fsd2F5cyBcdTkzRUMgMTUtMjM0NTYtNQorYWx3YXlzIFx1OTNFRCAxNS0xNi0zCithbHdheXMgXHU5M0VFIDEyMy0xMzQ2LTMKK2Fsd2F5cyBcdTkzRUYgMjQtNDU2LTQKK2Fsd2F5cyBcdTkzRjAgMTM1LTEzNTYtNQorYWx3YXlzIFx1OTNGMSAxLTEzNDYtMworYWx3YXlzIFx1OTNGMiAyNDUtMjM0NS0zCithbHdheXMgXHU5M0YzIDEtMTM1Ni0zCithbHdheXMgXHU5M0Y0IDE0LTM0LTUKK2Fsd2F5cyBcdTkzRjUgMTIzNS0zNS0yCithbHdheXMgXHU5M0Y2IDEzLTE2LTIKK2Fsd2F5cyBcdTkzRjcgMTIzNC0zNC0yCithbHdheXMgXHU5M0Y4IDEyMzUtMTI0Ni01CithbHdheXMgXHU5M0Y5IDI0NS00Ni00CithbHdheXMgXHU5M0ZBIDEyMzQtMTI2LTMKK2Fsd2F5cyBcdTkzRkIgMTQtMTQ1Ni0yCithbHdheXMgXHU5M0ZDIDE1LTI1LTQKK2Fsd2F5cyBcdTkzRkQgMTUtMjM0LTUKK2Fsd2F5cyBcdTkzRkUgMTUtMTIzNi00CithbHdheXMgXHU5M0ZGIDEyLTEzNTYtMworYWx3YXlzIFx1OTQwMCAxMjMtMTI0Ni01CithbHdheXMgXHU5NDAxIDE1LTE1Ni0zCithbHdheXMgXHU5NDAyIDE0LTIzNC01CithbHdheXMgXHU5NDAzIDEzNDUtMTQ2LTIKK2Fsd2F5cyBcdTk0MDQgMTIzNS0xMzU2LTIKK2Fsd2F5cyBcdTk0MDUgMTIzNC0zNDYtNAorYWx3YXlzIFx1OTQwNiAxNS0xMjQ2LTUKK2Fsd2F5cyBcdTk0MDcgMTIzNDUtMTIzNi0yCithbHdheXMgXHU5NDA4IDI0NS0yNDYtMgorYWx3YXlzIFx1OTQwOSAyNDUtNDUtMworYWx3YXlzIFx1OTQwQSA0Ni0yCithbHdheXMgXHU5NDBCIDEyNC0xMzQ2LTUKK2Fsd2F5cyBcdTk0MEMgMTUtNDYtNQorYWx3YXlzIFx1OTQwRCAxMy0yMzYtMgorYWx3YXlzIFx1OTQwRSAxMy0yNDYtMworYWx3YXlzIFx1OTQwRiAxMjUtMTIzNDU2LTMKK2Fsd2F5cyBcdTk0MTAgMTQtMjQ2LTUKK2Fsd2F5cyBcdTk0MTEgMTMtMzQ2LTIKK2Fsd2F5cyBcdTk0MTIgMTQtMTQ2LTIKK2Fsd2F5cyBcdTk0MTMgMTQ1LTEyMzQ1Ni0zCithbHdheXMgXHU5NDE0IDEyNC0xMjM2LTIKK2Fsd2F5cyBcdTk0MTUgMTI1LTEyMzYtMworYWx3YXlzIFx1OTQxNiAxMy0xNi0zCithbHdheXMgXHU5NDE3IDEzLTIzNDUtNAorYWx3YXlzIFx1OTQxOCAxLTEyMzQ2LTMKK2Fsd2F5cyBcdTk0MTkgMTQ1LTEzNTYtNQorYWx3YXlzIFx1OTQxQSAyMzQ1Ni01CithbHdheXMgXHU5NDFCIDEzNDU2LTUKK2Fsd2F5cyBcdTk0MUMgMTQ1LTEyMzQ1Ni0zCithbHdheXMgXHU5NDFEIDEzLTIzNi0yCithbHdheXMgXHU5NDFFIDEzNDUtMTIzNTYtNQorYWx3YXlzIFx1OTQxRiAxMjQtMTYtNQorYWx3YXlzIFx1OTQyMCAxMjM0LTM0LTQKK2Fsd2F5cyBcdTk0MjEgMTI0LTM0Ni00CithbHdheXMgXHU5NDIyIDM0Ni00CithbHdheXMgXHU5NDIzIDEyLTEzNTYtMworYWx3YXlzIFx1OTQyNCAxNDUtMTM0NTYtNAorYWx3YXlzIFx1OTQyNSAyNC0xMjM2LTUKK2Fsd2F5cyBcdTk0MjYgMTIzLTI0NTYtMworYWx3YXlzIFx1OTQyNyAxMy0yMzQ1LTUKK2Fsd2F5cyBcdTk0MjggMTIzNDUtMzU2LTUKK2Fsd2F5cyBcdTk0MjkgMTUtMTI0Ni01CithbHdheXMgXHU5NDJBIDE0LTM0LTQKK2Fsd2F5cyBcdTk0MkIgMTMtNDUtMworYWx3YXlzIFx1OTQyQyAxMjM1LTEyNDYtNQorYWx3YXlzIFx1OTQyRCAxMjU2LTUKK2Fsd2F5cyBcdTk0MkUgMTQtMjM0NS0yCithbHdheXMgXHU5NDJGIDEtMjUtMgorYWx3YXlzIFx1OTQzMCAyNDUtMjQ2LTMKK2Fsd2F5cyBcdTk0MzEgMjQ1LTIzNDUtMworYWx3YXlzIFx1OTQzMiAxLTI1LTIKK2Fsd2F5cyBcdTk0MzMgMTQtMzU2LTIKK2Fsd2F5cyBcdTk0MzQgMTM1LTE2LTUKK2Fsd2F5cyBcdTk0MzUgMTI0LTM0Ni00CithbHdheXMgXHU5NDM2IDEyMzUtMTI0NTYtMgorYWx3YXlzIFx1OTQzNyAzNDYtNQorYWx3YXlzIFx1OTQzOCAxNDUtMjUtMgorYWx3YXlzIFx1OTQzOSAxMy0yNS00CithbHdheXMgXHU5NDNBIDE0NS0xMzQ2LTMKK2Fsd2F5cyBcdTk0M0IgMTMtMTI1Ni01CithbHdheXMgXHU5NDNDIDEyMzQ1LTEzNi0yCithbHdheXMgXHU5NDNEIDE0NS0zNDUtMgorYWx3YXlzIFx1OTQzRSAxMzUtMzU2LTUKK2Fsd2F5cyBcdTk0M0YgMTYtNQorYWx3YXlzIFx1OTQ0MCAyNDU2LTUKK2Fsd2F5cyBcdTk0NDEgMTI1LTEyMzQ2LTMKK2Fsd2F5cyBcdTk0NDIgMTUtMjU2LTUKK2Fsd2F5cyBcdTk0NDMgMTQ1LTI0Ni01CithbHdheXMgXHU5NDQ0IDEtMzQtNQorYWx3YXlzIFx1OTQ0NSAxMjM1LTEzNTYtMgorYWx3YXlzIFx1OTQ0NiAxLTEyNDYtNQorYWx3YXlzIFx1OTQ0NyAxMy0xNi0zCithbHdheXMgXHU5NDQ4IDEzNDUtMzQ2LTMKK2Fsd2F5cyBcdTk0NDkgMTIzNS0yMzQ2LTIKK2Fsd2F5cyBcdTk0NEEgMTIzNS0yNS01CithbHdheXMgXHU5NDRCIDI0NS0xMzQ1Ni0zCithbHdheXMgXHU5NDRDIDEzNS0xNDU2LTMKK2Fsd2F5cyBcdTk0NEQgMTM0NTYtMworYWx3YXlzIFx1OTQ0RSAxMjMtMTI0Ni01CithbHdheXMgXHU5NDRGIDEzNDUtMTM0NTYtMgorYWx3YXlzIFx1OTQ1MCAxNS0xMjU2LTMKK2Fsd2F5cyBcdTk0NTEgMTMtMjM0NS01CithbHdheXMgXHU5NDUyIDEzLTIzNDUtNQorYWx3YXlzIFx1OTQ1MyAyNDUtMjM0NS00CithbHdheXMgXHU5NDU0IDEyLTM0NS00CithbHdheXMgXHU5NDU1IDEtMTU2LTUKK2Fsd2F5cyBcdTk0NTYgMTM0LTM0Ni01CithbHdheXMgXHU5NDU3IDE0LTE2LTIKK2Fsd2F5cyBcdTk0NTggMTQtMzU2LTIKK2Fsd2F5cyBcdTk0NTkgMTMtMTYtMworYWx3YXlzIFx1OTQ1QSAxMjUtMTI0NTYtMworYWx3YXlzIFx1OTQ1QiAxMjMtNDU2LTUKK2Fsd2F5cyBcdTk0NUMgMjQtMTM0Ni01CithbHdheXMgXHU5NDVEIDEyMzQtMTM1Ni0yCithbHdheXMgXHU5NDVFIDE0LTM0NS01CithbHdheXMgXHU5NDVGIDE0NS0zNC0yCithbHdheXMgXHU5NDYwIDI0LTI1LTUKK2Fsd2F5cyBcdTk0NjEgMTItMjUtNQorYWx3YXlzIFx1OTQ2MiAxNC0xMjU2LTUKK2Fsd2F5cyBcdTk0NjMgMTM1LTI0Ni0zCithbHdheXMgXHU5NDY0IDEzNS0xNDYtNQorYWx3YXlzIFx1OTQ2NSAxNC0zNC00CithbHdheXMgXHU5NDY2IDE1LTIzNDUtNAorYWx3YXlzIFx1OTQ2NyAxMjMtMTI0NTYtMworYWx3YXlzIFx1OTQ2OCAxNC0xMjM0Ni0yCithbHdheXMgXHU5NDY5IDIzNDYtNQorYWx3YXlzIFx1OTQ2QSAxNC0zNC0yCithbHdheXMgXHU5NDZCIDE1LTE0NTYtMworYWx3YXlzIFx1OTQ2QyAxMy0yMzQ1LTUKK2Fsd2F5cyBcdTk0NkQgMTQtMTIzNi0yCithbHdheXMgXHU5NDZFIDEzNS0xMjYtMgorYWx3YXlzIFx1OTQ2RiAxMy0yMzQ1LTMKK2Fsd2F5cyBcdTk0NzAgMjQ2LTUKK2Fsd2F5cyBcdTk0NzEgMTItMTIzNi0yCithbHdheXMgXHU5NDcyIDE1LTQ2LTMKK2Fsd2F5cyBcdTk0NzMgMTMtMjM0NS01CithbHdheXMgXHU5NDc0IDE1LTE2LTMKK2Fsd2F5cyBcdTk0NzUgMTMtMTI0NTYtNQorYWx3YXlzIFx1OTQ3NiAyNDUtMTM0Ni0yCithbHdheXMgXHU5NDc3IDEzNDUtMzQ2LTUKK2Fsd2F5cyBcdTk0NzggMTQtMzU2LTQKK2Fsd2F5cyBcdTk0NzkgMjQ1LTEyNDU2LTMKK2Fsd2F5cyBcdTk0N0EgMjQ1LTEyNTYtMgorYWx3YXlzIFx1OTQ3QiAxMjM0LTEyMzYtNQorYWx3YXlzIFx1OTQ3QyAxNC0yNS0yCithbHdheXMgXHU5NDdEIDEyNS0xMjQ1Ni0zCithbHdheXMgXHU5NDdFIDE0LTEyNDU2LTIKK2Fsd2F5cyBcdTk0N0YgMTI1LTE0Ni0yCithbHdheXMgXHU5NDgwIDEzNDUtMzQ2LTUKK2Fsd2F5cyBcdTk0ODEgMTMtMjM2LTIKK2Fsd2F5cyBcdTk0ODIgMTI0LTEzNDYtNAorYWx3YXlzIFx1OTQ4MyAxLTM0LTIKK2Fsd2F5cyBcdTk0ODQgMTQtMTIzNi0yCithbHdheXMgXHU5NDg1IDEzLTE0NTYtMworYWx3YXlzIFx1OTQ4NiAxNDUtMzQ1LTIKK2Fsd2F5cyBcdTk0ODcgMTYtNAorYWx3YXlzIFx1OTQ4OCAxLTEzNi0zCithbHdheXMgXHU5NDg5IDE0NS0xMzQ1Ni0zCithbHdheXMgXHU5NDhBIDEtMTQ2LTMKK2Fsd2F5cyBcdTk0OEIgMTIzNC0xMjYtNQorYWx3YXlzIFx1OTQ4QyAxNC0yNDYtNAorYWx3YXlzIFx1OTQ4RCAxMjQtMzQtNAorYWx3YXlzIFx1OTQ4RSAyNDUtMjM0NS0zCithbHdheXMgXHU5NDhGIDEyLTEyNDU2LTUKK2Fsd2F5cyBcdTk0OTAgMjQtMTIzNi0zCithbHdheXMgXHU5NDkxIDE1LTIzNDYtNQorYWx3YXlzIFx1OTQ5MiAxMjM0NS0xMjM2LTIKK2Fsd2F5cyBcdTk0OTMgMTQ1LTI0Ni01CithbHdheXMgXHU5NDk0IDEzNC0xMzYtMgorYWx3YXlzIFx1OTQ5NSAxMzQ1LTEyNTYtNAorYWx3YXlzIFx1OTQ5NiA0Ni0yCithbHdheXMgXHU5NDk3IDEyLTI0NTYtMworYWx3YXlzIFx1OTQ5OCAxNS0xMzQ1Ni0yCithbHdheXMgXHU5NDk5IDEzLTI0NTYtNQorYWx3YXlzIFx1OTQ5QSAxMzUtMzQtNQorYWx3YXlzIFx1OTQ5QiAxMjQtMjQ1Ni01CithbHdheXMgXHU5NDlDIDEzLTEyNTYtNQorYWx3YXlzIFx1OTQ5RCAxNDUtMTIzNDU2LTUKK2Fsd2F5cyBcdTk0OUUgMTItMTQ2LTMKK2Fsd2F5cyBcdTk0OUYgMS0xMjM0Ni0zCithbHdheXMgXHU5NEEwIDEzNDUtMzQ1LTUKK2Fsd2F5cyBcdTk0QTEgMTM1LTM1Ni01CithbHdheXMgXHU5NEEyIDEzLTEzNDYtMworYWx3YXlzIFx1OTRBMyAxMzUtMTIzNi00CithbHdheXMgXHU5NEE0IDI0NS0yMzQ1LTIKK2Fsd2F5cyBcdTk0QTUgMjQ2LTUKK2Fsd2F5cyBcdTk0QTYgMjQ1LTE0NTYtMworYWx3YXlzIFx1OTRBNyAxMy0yNTYtMworYWx3YXlzIFx1OTRBOCAzNC0zCithbHdheXMgXHU5NEE5IDEzLTEyMzU2LTMKK2Fsd2F5cyBcdTk0QUEgMTIzLTEzNDYtNQorYWx3YXlzIFx1OTRBQiAxMjM0NS0xMzQ2LTMKK2Fsd2F5cyBcdTk0QUMgMTIzNS0yNS00CithbHdheXMgXHU5NEFEIDEyNC0xMjM1Ni00CithbHdheXMgXHU5NEFFIDEzNDUtMjM0LTQKK2Fsd2F5cyBcdTk0QUYgMTM1LTM0NS00CithbHdheXMgXHU5NEIwIDEyNTYtNQorYWx3YXlzIFx1OTRCMSAyNDUtMjM0NS0yCithbHdheXMgXHU5NEIyIDEtMTM1Ni0zCithbHdheXMgXHU5NEIzIDI0NS0yMzQ1LTIKK2Fsd2F5cyBcdTk0QjQgMTMtMzQtNAorYWx3YXlzIFx1OTRCNSAxMzUtMTI2LTMKK2Fsd2F5cyBcdTk0QjYgMTIzLTIzNDYtMworYWx3YXlzIFx1OTRCNyAxMjM0LTEyNi00CithbHdheXMgXHU5NEI4IDEzNS0zNC0zCithbHdheXMgXHU5NEI5IDEzNS0xMjYtMgorYWx3YXlzIFx1OTRCQSAyMzYtNQorYWx3YXlzIFx1OTRCQiAxMjUtMTI0NTYtMworYWx3YXlzIFx1OTRCQyAxMzQtMzQtNQorYWx3YXlzIFx1OTRCRCAxNDUtMTIzNi01CithbHdheXMgXHU5NEJFIDEzLTIzNDU2LTQKK2Fsd2F5cyBcdTk0QkYgMTQ1LTIzNDUtNQorYWx3YXlzIFx1OTRDMCAyMzQtMgorYWx3YXlzIFx1OTRDMSAxMjQtMzQ2LTQKK2Fsd2F5cyBcdTk0QzIgMTM1LTEyNi0yCithbHdheXMgXHU5NEMzIDE0LTEzNDU2LTIKK2Fsd2F5cyBcdTk0QzQgMjQtMjUtNQorYWx3YXlzIFx1OTRDNSAyNDUtMjM0NS0zCithbHdheXMgXHU5NEM2IDEzNC0xNDYtNAorYWx3YXlzIFx1OTRDNyAxMzUtMTQ2LTUKK2Fsd2F5cyBcdTk0QzggMjQtMTU2LTUKK2Fsd2F5cyBcdTk0QzkgMTUtNDUtNQorYWx3YXlzIFx1OTRDQSAxMjQtMzQ1LTMKK2Fsd2F5cyBcdTk0Q0IgMTM1LTE2LTUKK2Fsd2F5cyBcdTk0Q0MgMTM0NS0xNi00CithbHdheXMgXHU5NENEIDEyMzQtMTYtMgorYWx3YXlzIFx1OTRDRSAxNDUtMjUtMgorYWx3YXlzIFx1OTRDRiAxNS0xMzQ1Ni0yCithbHdheXMgXHU5NEQwIDEyMy0xNDYtNQorYWx3YXlzIFx1OTREMSAxNC0xNDYtNAorYWx3YXlzIFx1OTREMiAxNTYtNAorYWx3YXlzIFx1OTREMyAxMzQtMTM0Ni0yCithbHdheXMgXHU5NEQ0IDIzNDU2LTUKK2Fsd2F5cyBcdTk0RDUgMjM0LTQKK2Fsd2F5cyBcdTk0RDYgMTItMTM1Ni0yCithbHdheXMgXHU5NEQ3IDEzLTIzNDU2LTIKK2Fsd2F5cyBcdTk0RDggMzQ2LTIKK2Fsd2F5cyBcdTk0RDkgMTM0NS0xNDYtMgorYWx3YXlzIFx1OTREQSAxLTE1Ni01CithbHdheXMgXHU5NERCIDE0NS0xMzQ2LTMKK2Fsd2F5cyBcdTk0REMgMTI0LTEyMzQ2LTIKK2Fsd2F5cyBcdTk0REQgMTQtMTI1Ni00CithbHdheXMgXHU5NERFIDE0NS0yNDYtNQorYWx3YXlzIFx1OTRERiAxNDU2LTMKK2Fsd2F5cyBcdTk0RTAgMTIzLTI0NTYtNAorYWx3YXlzIFx1OTRFMSAxLTM0NS0yCithbHdheXMgXHU5NEUyIDEtMzQtMworYWx3YXlzIFx1OTRFMyAxNS0yMzQ1LTQKK2Fsd2F5cyBcdTk0RTQgMTI0LTEzNDU2LTQKK2Fsd2F5cyBcdTk0RTUgMTQ1LTIzNC0zCithbHdheXMgXHU5NEU2IDE1LTIzNDUtMworYWx3YXlzIFx1OTRFNyAxMjM1LTM1LTIKK2Fsd2F5cyBcdTk0RTggMjQ1LTQ1LTIKK2Fsd2F5cyBcdTk0RTkgMjQtMzQ1LTMKK2Fsd2F5cyBcdTk0RUEgMTIzNS0zNDUtMworYWx3YXlzIFx1OTRFQiAxMjQtMjQ2LTUKK2Fsd2F5cyBcdTk0RUMgMTMtMjM0Ni01CithbHdheXMgXHU5NEVEIDEzNC0xMzQ1Ni0yCithbHdheXMgXHU5NEVFIDEtMTM1Ni0zCithbHdheXMgXHU5NEVGIDE1LTIzNDYtNQorYWx3YXlzIFx1OTRGMCAxMy0yNDYtNAorYWx3YXlzIFx1OTRGMSAxNi0zCithbHdheXMgXHU5NEYyIDEyLTEyMzYtNAorYWx3YXlzIFx1OTRGMyAxMi0xMjM0Ni01CithbHdheXMgXHU5NEY0IDEyNC0xMzQ2LTUKK2Fsd2F5cyBcdTk0RjUgMTIzNi00CithbHdheXMgXHU5NEY2IDE0NTYtMgorYWx3YXlzIFx1OTRGNyAxMjQ1LTM0LTIKK2Fsd2F5cyBcdTk0RjggMS0zNC01CithbHdheXMgXHU5NEY5IDE0LTE0Ni0yCithbHdheXMgXHU5NEZBIDEyMzQtMzQtNQorYWx3YXlzIFx1OTRGQiAzNC0yCithbHdheXMgXHU5NEZDIDE0LTI0NTYtMgorYWx3YXlzIFx1OTRGRCAxMjQtMjM0Ni01CithbHdheXMgXHU5NEZFIDE0LTIzNDUtNQorYWx3YXlzIFx1OTRGRiAxMjMtMTM1Ni0zCithbHdheXMgXHU5NTAwIDE1LTI0Ni0zCithbHdheXMgXHU5NTAxIDE1LTI1LTQKK2Fsd2F5cyBcdTk1MDIgMTQtMTYtNAorYWx3YXlzIFx1OTUwMyAxLTEzNTYtNQorYWx3YXlzIFx1OTUwNCAxMi0zNC0yCithbHdheXMgXHU5NTA1IDEzLTI1LTMKK2Fsd2F5cyBcdTk1MDYgMTMtMTQ2LTUKK2Fsd2F5cyBcdTk1MDcgMjM0Ni0yCithbHdheXMgXHU5NTA4IDE1LTIzNC01CithbHdheXMgXHU5NTA5IDI0NS0yNS01CithbHdheXMgXHU5NTBBIDE0LTIzNi01CithbHdheXMgXHU5NTBCIDEyMzQ1LTEzNTYtMworYWx3YXlzIFx1OTUwQyAxNS0xNDU2LTMKK2Fsd2F5cyBcdTk1MEQgMTQtMjM0LTQKK2Fsd2F5cyBcdTk1MEUgMTIzLTI0NTYtMworYWx3YXlzIFx1OTUwRiAxMy0yMzQ1LTUKK2Fsd2F5cyBcdTk1MTAgMTI0NS0xMjQ2LTUKK2Fsd2F5cyBcdTk1MTEgMTI0LTE2LTMKK2Fsd2F5cyBcdTk1MTIgMTQtMTM0Ni0yCithbHdheXMgXHU5NTEzIDI0NS0xNDU2LTQKK2Fsd2F5cyBcdTk1MTQgMTMtMTI1Ni0yCithbHdheXMgXHU5NTE1IDM0NS0zCithbHdheXMgXHU5NTE2IDI0NS00Ni0zCithbHdheXMgXHU5NTE3IDEtMjM0Ni00CithbHdheXMgXHU5NTE4IDEzNDUtMjUtNQorYWx3YXlzIFx1OTUxOSAyNDUtMjUtNQorYWx3YXlzIFx1OTUxQSAxMzQtMTQ2LTIKK2Fsd2F5cyBcdTk1MUIgMTM1LTEzNi0zCithbHdheXMgXHU5NTFDIDI0NS0xNi0yCithbHdheXMgXHU5NTFEIDE0NS0yMzQ2LTIKK2Fsd2F5cyBcdTk1MUUgMTIzLTIzNDYtNQorYWx3YXlzIFx1OTUxRiAxMjMtMTIzNDU2LTMKK2Fsd2F5cyBcdTk1MjAgMTItMTM0Ni0zCithbHdheXMgXHU5NTIxIDE1LTE2LTMKK2Fsd2F5cyBcdTk1MjIgMTMtMzQtNQorYWx3YXlzIFx1OTUyMyAxNC0yNS0yCithbHdheXMgXHU5NTI0IDEyLTEyNDYtMgorYWx3YXlzIFx1OTUyNSAxLTEyNDYtMworYWx3YXlzIFx1OTUyNiAxMy0xNDU2LTQKK2Fsd2F5cyBcdTk1MjcgMS0xNTYtNQorYWx3YXlzIFx1OTUyOCAxNS0yMzQ1LTMKK2Fsd2F5cyBcdTk1MjkgMTMtNDUtNAorYWx3YXlzIFx1OTUyQSAxMjM1LTI1LTUKK2Fsd2F5cyBcdTk1MkIgMTIzNC0zNTYtMgorYWx3YXlzIFx1OTUyQyAxMjQtMTIzNi0yCithbHdheXMgXHU5NTJEIDE0NS0xMzQ1Ni01CithbHdheXMgXHU5NTJFIDEzLTIzNDUtNQorYWx3YXlzIFx1OTUyRiAxMy0xMjU2LTUKK2Fsd2F5cyBcdTk1MzAgMTM0LTEzNTYtNAorYWx3YXlzIFx1OTUzMSAxMjUtMTU2LTMKK2Fsd2F5cyBcdTk1MzIgMjQ1LTM0Ni01CithbHdheXMgXHU5NTMzIDQ2LTMKK2Fsd2F5cyBcdTk1MzQgMTIzLTI0NTYtNAorYWx3YXlzIFx1OTUzNSAyNDUtNDYtMworYWx3YXlzIFx1OTUzNiAxNS0xNTYtMworYWx3YXlzIFx1OTUzNyAyMzQ2LTUKK2Fsd2F5cyBcdTk1MzggMTItMzQ1LTMKK2Fsd2F5cyBcdTk1MzkgMjQ1LTI0Ni0zCithbHdheXMgXHU5NTNBIDEtMTIzNDYtMworYWx3YXlzIFx1OTUzQiAxNDUtMTI0NTYtNQorYWx3YXlzIFx1OTUzQyAxNS0xMjM1Ni0zCithbHdheXMgXHU5NTNEIDEyMzUtNDU2LTIKK2Fsd2F5cyBcdTk1M0UgMTIzNS0xMjQ1Ni0yCithbHdheXMgXHU5NTNGIDI0NTYtMworYWx3YXlzIFx1OTU0MCAxNDUtMzQtNQorYWx3YXlzIFx1OTU0MSAxMzQtMzU2LTQKK2Fsd2F5cyBcdTk1NDIgMTQtMTIzNTYtNQorYWx3YXlzIFx1OTU0MyAxMjUtMTU2LTMKK2Fsd2F5cyBcdTk1NDQgMTIzNDUtMzU2LTUKK2Fsd2F5cyBcdTk1NDUgMTM0LTM1Ni0yCithbHdheXMgXHU5NTQ2IDEzNC0xMjYtNQorYWx3YXlzIFx1OTU0NyAxLTEzNi01CithbHdheXMgXHU5NTQ4IDEzNS0xMjYtMgorYWx3YXlzIFx1OTU0OSAxMy0yMzQ2LTIKK2Fsd2F5cyBcdTk1NEEgMTM0NS0zNDYtNQorYWx3YXlzIFx1OTU0QiAxMjQtMTM0Ni00CithbHdheXMgXHU5NTRDIDEzLTQ1LTMKK2Fsd2F5cyBcdTk1NEQgMTM0NS0zNDYtNQorYWx3YXlzIFx1OTU0RSAxMzQ1LTM0NS0yCithbHdheXMgXHU5NTRGIDE0LTIzNC0yCithbHdheXMgXHU5NTUwIDEzLTE0Ni00CithbHdheXMgXHU5NTUxIDEzNS0xMzQ2LTUKK2Fsd2F5cyBcdTk1NTIgMTYtNQorYWx3YXlzIFx1OTU1MyAxMy0yMzQ1Ni0zCithbHdheXMgXHU5NTU0IDEzNS0xNDU2LTMKK2Fsd2F5cyBcdTk1NTUgMTI0NS0xMjM0Ni0yCithbHdheXMgXHU5NTU2IDEzNS0yNDYtMworYWx3YXlzIFx1OTU1NyAxMjQtMTM0Ni0zCithbHdheXMgXHU5NTU4IDEzNC0xMjM2LTUKK2Fsd2F5cyBcdTk1NTkgMTQtMjUtMgorYWx3YXlzIFx1OTU1QSAxMzUtMTM1Ni01CithbHdheXMgXHU5NTVCIDIzNS0zCithbHdheXMgXHU5NTVDIDEzLTEzNDU2LTUKK2Fsd2F5cyBcdTk1NUQgMTQ1LTE2LTIKK2Fsd2F5cyBcdTk1NUUgMTI1LTM0LTIKK2Fsd2F5cyBcdTk1NUYgMTUtNDUtNQorYWx3YXlzIFx1OTU2MCAxNC0yMzQtMgorYWx3YXlzIFx1OTU2MSAxMjQtMTIzNi0yCithbHdheXMgXHU5NTYyIDEzLTIzNi0yCithbHdheXMgXHU5NTYzIDE0LTI0Ni01CithbHdheXMgXHU5NTY0IDEyMzQtMzQtMgorYWx3YXlzIFx1OTU2NSAxNC0zNC00CithbHdheXMgXHU5NTY2IDE0NS0xMjM0NTYtMworYWx3YXlzIFx1OTU2NyAxNC0xMjM2LTIKK2Fsd2F5cyBcdTk1NjggMTIzNC0zNC00CithbHdheXMgXHU5NTY5IDI0NS0xMjQ1Ni0zCithbHdheXMgXHU5NTZBIDI0NS00Ni0zCithbHdheXMgXHU5NTZCIDE0NS0xMzU2LTUKK2Fsd2F5cyBcdTk1NkMgMTIzNS0yNS01CithbHdheXMgXHU5NTZEIDE0LTM1Ni0yCithbHdheXMgXHU5NTZFIDEyMzUtMTI0NTYtMgorYWx3YXlzIFx1OTU2RiAxLTI1LTIKK2Fsd2F5cyBcdTk1NzAgMTQtMjM0NS0yCithbHdheXMgXHU5NTcxIDE2LTUKK2Fsd2F5cyBcdTk1NzIgMTItMzQ1LTQKK2Fsd2F5cyBcdTk1NzMgMTM1LTI0Ni0zCithbHdheXMgXHU5NTc0IDE0LTM0NS01CithbHdheXMgXHU5NTc1IDEyLTEyMzYtMgorYWx3YXlzIFx1OTU3NiAxNS00Ni0zCithbHdheXMgXHU5NTc3IDEyLTEzNDYtMgorYWx3YXlzIFx1OTU3OCAxMi0xMzQ2LTIKK2Fsd2F5cyBcdTk1NzkgMTMtMjM0LTQKK2Fsd2F5cyBcdTk1N0EgMTQ2LTQKK2Fsd2F5cyBcdTk1N0IgMTQ1LTM0Ni0yCithbHdheXMgXHU5NTdDIDI0NS0xMjU2LTMKK2Fsd2F5cyBcdTk1N0QgMTQtMjQ2LTQKK2Fsd2F5cyBcdTk1N0UgMTM0LTE2LTIKK2Fsd2F5cyBcdTk1N0YgMTItMTM0Ni0yCithbHdheXMgXHU5NTgwIDEzNC0xMzYtMgorYWx3YXlzIFx1OTU4MSAxMzQtMzQ1LTUKK2Fsd2F5cyBcdTk1ODIgMjQtMTI0NTYtMworYWx3YXlzIFx1OTU4MyAyNC0xMjM2LTQKK2Fsd2F5cyBcdTk1ODQgMTIzNS0yNS01CithbHdheXMgXHU5NTg1IDEzNC0xMzYtMgorYWx3YXlzIFx1OTU4NiAyMzQ1LTIKK2Fsd2F5cyBcdTk1ODcgMTM1LTE2LTUKK2Fsd2F5cyBcdTk1ODggMTIzNS0xMjM2LTUKK2Fsd2F5cyBcdTk1ODkgMTM1LTE2LTUKK2Fsd2F5cyBcdTk1OEEgMjQtMTIzNi0zCithbHdheXMgXHU5NThCIDEyMy0yNDU2LTMKK2Fsd2F5cyBcdTk1OEMgMTIzLTEzNDYtMworYWx3YXlzIFx1OTU4RCAxMzUtMTM1Ni0zCithbHdheXMgXHU5NThFIDEyMzUtMTIzNDYtMgorYWx3YXlzIFx1OTU4RiAxMjQ1LTEyMzQ1Ni01CithbHdheXMgXHU5NTkwIDE1LTEyMzYtNQorYWx3YXlzIFx1OTU5MSAxNS0yMzQ1LTIKK2Fsd2F5cyBcdTk1OTIgMTUtMjM0NS0yCithbHdheXMgXHU5NTkzIDEzLTIzNDUtMworYWx3YXlzIFx1OTU5NCAxMzQtMTQ1Ni00CithbHdheXMgXHU5NTk1IDE1LTIzNDU2LTMKK2Fsd2F5cyBcdTk1OTYgMjQtMTI0Ni00CithbHdheXMgXHU5NTk3IDE0NS0xMjM1Ni01CithbHdheXMgXHU5NTk4IDEtMzQ1LTIKK2Fsd2F5cyBcdTk1OTkgMTM0NS0xNDYtNQorYWx3YXlzIFx1OTU5QSAxLTEyMzYtMworYWx3YXlzIFx1OTU5QiAxMjM0LTEzNTYtMworYWx3YXlzIFx1OTU5QyAxNS0yMzQ1Ni00CithbHdheXMgXHU5NTlEIDE0LTEzNDU2LTIKK2Fsd2F5cyBcdTk1OUUgMTM1LTIzNDUtNQorYWx3YXlzIFx1OTU5RiAxMzUtMTYtNQorYWx3YXlzIFx1OTVBMCAxMjQ1LTEyMzQ1Ni01CithbHdheXMgXHU5NUExIDEyMzUtMjM0Ni0yCithbHdheXMgXHU5NUEyIDEzLTEyNDU2LTMKK2Fsd2F5cyBcdTk1QTMgMTMtMjM0Ni0yCithbHdheXMgXHU5NUE0IDEyMzUtMjM0Ni0yCithbHdheXMgXHU5NUE1IDEyMzQ1LTM0NS0yCithbHdheXMgXHU5NUE2IDEyLTM0LTUKK2Fsd2F5cyBcdTk1QTcgMTIzNS0xMjM0Ni01CithbHdheXMgXHU5NUE4IDEzLTEyNDYtMworYWx3YXlzIFx1OTVBOSAxMzQtMTQ1Ni00CithbHdheXMgXHU5NUFBIDE1LTIzNDYtNQorYWx3YXlzIFx1OTVBQiAxMjMtMTIzNDU2LTQKK2Fsd2F5cyBcdTk1QUMgMTQtMTM0Ni0yCithbHdheXMgXHU5NUFEIDE0LTEyNTYtMgorYWx3YXlzIFx1OTVBRSAxMjQtMTM0NTYtMgorYWx3YXlzIFx1OTVBRiAyNC0zNDUtNQorYWx3YXlzIFx1OTVCMCAxMy0xMjU2LTIKK2Fsd2F5cyBcdTk1QjEgMjM2LTUKK2Fsd2F5cyBcdTk1QjIgMjM2LTUKK2Fsd2F5cyBcdTk1QjMgMTItMTIzNi00CithbHdheXMgXHU5NUI0IDI0NS0xMjU2LTUKK2Fsd2F5cyBcdTk1QjUgMTQtMTQ1Ni01CithbHdheXMgXHU5NUI2IDEyLTEzNDYtMworYWx3YXlzIFx1OTVCNyAyNC0zNDUtMworYWx3YXlzIFx1OTVCOCAxMjMtMTIzNDU2LTQKK2Fsd2F5cyBcdTk1QjkgMjM0NS0zCithbHdheXMgXHU5NUJBIDEyMzQ1Ni0yCithbHdheXMgXHU5NUJCIDIzNDUtMgorYWx3YXlzIFx1OTVCQyAyMzQ2LTUKK2Fsd2F5cyBcdTk1QkQgMTIzNS0xMjM0NTYtMworYWx3YXlzIFx1OTVCRSAxMjU2LTUKK2Fsd2F5cyBcdTk1QkYgMTIzNDU2LTIKK2Fsd2F5cyBcdTk1QzAgMTUtNDYtNQorYWx3YXlzIFx1OTVDMSAxMzUtMTQ2LTMKK2Fsd2F5cyBcdTk1QzIgMTUtNDYtNQorYWx3YXlzIFx1OTVDMyAyNDUtMTI1Ni01CithbHdheXMgXHU5NUM0IDI0Ni00CithbHdheXMgXHU5NUM1IDEyMzQ1Ni0yCithbHdheXMgXHU5NUM2IDEzNS0xMjM2LTQKK2Fsd2F5cyBcdTk1QzcgMTIzNi01CithbHdheXMgXHU5NUM4IDEyNDYtMgorYWx3YXlzIFx1OTVDOSAxNDU2LTMKK2Fsd2F5cyBcdTk1Q0EgMTIzLTI1LTUKK2Fsd2F5cyBcdTk1Q0IgMjQ1LTIzNi01CithbHdheXMgXHU5NUNDIDE0LTEyMzYtMgorYWx3YXlzIFx1OTVDRCAxNDUtMzQtMworYWx3YXlzIFx1OTVDRSAyNDUtNDUtMworYWx3YXlzIFx1OTVDRiAxMjM0NS0xMzU2LTMKK2Fsd2F5cyBcdTk1RDAgMTI0LTIzNDUtMgorYWx3YXlzIFx1OTVEMSAxMzQ1LTM0Ni01CithbHdheXMgXHU5NUQyIDEyNC0zNDUtNQorYWx3YXlzIFx1OTVEMyAxMjMtMjQ1Ni00CithbHdheXMgXHU5NUQ0IDEyMzUtMjM0Ni0yCithbHdheXMgXHU5NUQ1IDI0NS0yMzYtNQorYWx3YXlzIFx1OTVENiAxMi00NTYtNAorYWx3YXlzIFx1OTVENyAxMy0xMjQ1Ni0zCithbHdheXMgXHU5NUQ4IDE0NS0xMjM1Ni01CithbHdheXMgXHU5NUQ5IDI0NS0xNi00CithbHdheXMgXHU5NURBIDEyMy0xMjQ2LTMKK2Fsd2F5cyBcdTk1REIgMTI0LTEzNDYtMgorYWx3YXlzIFx1OTVEQyAxMy0xMjQ1Ni0zCithbHdheXMgXHU5NUREIDEyMzQtMjQ2LTIKK2Fsd2F5cyBcdTk1REUgMTIzLTEyMzYtNQorYWx3YXlzIFx1OTVERiAxNS0xNi01CithbHdheXMgXHU5NUUwIDEyMzUtMTI0Ni01CithbHdheXMgXHU5NUUxIDEyLTEyMzYtNAorYWx3YXlzIFx1OTVFMiAxMjM0LTE2LTUKK2Fsd2F5cyBcdTk1RTMgMTQ1LTEzNDYtNQorYWx3YXlzIFx1OTVFNCAxMjM1LTEyNDU2LTIKK2Fsd2F5cyBcdTk1RTUgMTI0LTM0NS01CithbHdheXMgXHU5NUU2IDEyMzQ1Ni0yCithbHdheXMgXHU5NUU3IDEyNC0zNDUtMworYWx3YXlzIFx1OTVFOCAxMzQtMTM2LTIKK2Fsd2F5cyBcdTk1RTkgMjQtMTI0NTYtMworYWx3YXlzIFx1OTVFQSAyNC0xMjM2LTQKK2Fsd2F5cyBcdTk1RUIgMjM0NS0yCithbHdheXMgXHU5NUVDIDEyMzUtMTIzNi01CithbHdheXMgXHU5NUVEIDEzNS0xNi01CithbHdheXMgXHU5NUVFIDEyMzQ1Ni01CithbHdheXMgXHU5NUVGIDEyLTQ1Ni00CithbHdheXMgXHU5NUYwIDEyNDUtMTIzNDU2LTUKK2Fsd2F5cyBcdTk1RjEgMTI0Ni0yCithbHdheXMgXHU5NUYyIDE1LTIzNDUtMgorYWx3YXlzIFx1OTVGMyAxMjM1LTEyMzQ2LTIKK2Fsd2F5cyBcdTk1RjQgMTMtMjM0NS0zCithbHdheXMgXHU5NUY1IDEzNC0xNDU2LTQKK2Fsd2F5cyBcdTk1RjYgMTIzLTEzNDYtNQorYWx3YXlzIFx1OTVGNyAxMzQtMTM2LTMKK2Fsd2F5cyBcdTk1RjggMS0zNDUtMgorYWx3YXlzIFx1OTVGOSAxMzQ1LTE0Ni01CithbHdheXMgXHU5NUZBIDEzLTEyNDYtMworYWx3YXlzIFx1OTVGQiAxMjM0NTYtMgorYWx3YXlzIFx1OTVGQyAxMjQtMzQ1LTUKK2Fsd2F5cyBcdTk1RkQgMTM0LTE0NTYtNAorYWx3YXlzIFx1OTVGRSAxNC0xMjU2LTIKK2Fsd2F5cyBcdTk1RkYgMTIzLTI0NTYtNAorYWx3YXlzIFx1OTYwMCAxMjM0NS0zNDUtMgorYWx3YXlzIFx1OTYwMSAxMy0yMzQ2LTIKK2Fsd2F5cyBcdTk2MDIgMTIzNS0yMzQ2LTIKK2Fsd2F5cyBcdTk2MDMgMTIzLTEyMzQ1Ni00CithbHdheXMgXHU5NjA0IDEzLTIzNC0zCithbHdheXMgXHU5NjA1IDIzNi01CithbHdheXMgXHU5NjA2IDE0LTEzNDYtMgorYWx3YXlzIFx1OTYwNyAxNDUtMzQtMworYWx3YXlzIFx1OTYwOCAxMjU2LTUKK2Fsd2F5cyBcdTk2MDkgMjM0NS0zCithbHdheXMgXHU5NjBBIDEyLTEzNDYtMworYWx3YXlzIFx1OTYwQiAxNS0xNi01CithbHdheXMgXHU5NjBDIDEyMzQ1Ni0yCithbHdheXMgXHU5NjBEIDEyMzUtMTIzNDU2LTMKK2Fsd2F5cyBcdTk2MEUgMjM0NS0yCithbHdheXMgXHU5NjBGIDIzNDYtNQorYWx3YXlzIFx1OTYxMCAxMi0xMjM2LTQKK2Fsd2F5cyBcdTk2MTEgMTQtMTIzNi0yCithbHdheXMgXHU5NjEyIDI0NS0xMjU2LTUKK2Fsd2F5cyBcdTk2MTMgMTIzNS0xMjQ2LTUKK2Fsd2F5cyBcdTk2MTQgMTIzLTI1LTUKK2Fsd2F5cyBcdTk2MTUgMjQ1LTIzNi01CithbHdheXMgXHU5NjE2IDEyMzUtMjM0Ni0yCithbHdheXMgXHU5NjE3IDEyNC0yMzQ1LTIKK2Fsd2F5cyBcdTk2MTggMTI0LTM0NS01CithbHdheXMgXHU5NjE5IDI0NS0yMzYtNQorYWx3YXlzIFx1OTYxQSAxMjMtMTIzNi01CithbHdheXMgXHU5NjFCIDEyMzUtMTI0NTYtMgorYWx3YXlzIFx1OTYxQyAxMjM0NS0zNC01CithbHdheXMgXHU5NjFEIDE2LTUKK2Fsd2F5cyBcdTk2MUUgMTQtMjM0Ni01CithbHdheXMgXHU5NjFGIDE0NS0xMjQ2LTUKK2Fsd2F5cyBcdTk2MjAgMTUtMTQ1Ni01CithbHdheXMgXHU5NjIxIDI0NS0yMzQ1LTMKK2Fsd2F5cyBcdTk2MjIgMzQtNQorYWx3YXlzIFx1OTYyMyAxNi01CithbHdheXMgXHU5NjI0IDE2LTQKK2Fsd2F5cyBcdTk2MjUgMTQ1Ni0zCithbHdheXMgXHU5NjI2IDQ2LTIKK2Fsd2F5cyBcdTk2MjcgMTQ1LTEyMzU2LTQKK2Fsd2F5cyBcdTk2MjggMjM0Ni01CithbHdheXMgXHU5NjI5IDI0LTEzNTYtMworYWx3YXlzIFx1OTYyQSAxMzUtMTIzNi00CithbHdheXMgXHU5NjJCIDEyMzQtMzU2LTIKK2Fsd2F5cyBcdTk2MkMgMTIzLTEzNTYtMworYWx3YXlzIFx1OTYyRCAyNTYtNAorYWx3YXlzIFx1OTYyRSAxMjQ1LTEyNDU2LTQKK2Fsd2F5cyBcdTk2MkYgMS0xNTYtNAorYWx3YXlzIFx1OTYzMCAxMjM0LTE2LTIKK2Fsd2F5cyBcdTk2MzEgMTMtMTM0NTYtNAorYWx3YXlzIFx1OTYzMiAxMjM0NS0xMzQ2LTIKK2Fsd2F5cyBcdTk2MzMgNDYtMgorYWx3YXlzIFx1OTYzNCAxNDU2LTMKK2Fsd2F5cyBcdTk2MzUgMS0xMzYtNQorYWx3YXlzIFx1OTYzNiAxMy0zNDYtMworYWx3YXlzIFx1OTYzNyAxMi0xMzU2LTMKK2Fsd2F5cyBcdTk2MzggMjM0Ni01CithbHdheXMgXHU5NjM5IDI0NS0xMjU2LTMKK2Fsd2F5cyBcdTk2M0EgMTQ1LTE2LTQKK2Fsd2F5cyBcdTk2M0IgMTI1LTM0LTQKK2Fsd2F5cyBcdTk2M0MgMTI1LTI1LTUKK2Fsd2F5cyBcdTk2M0QgMTQ1LTIzNDUtNQorYWx3YXlzIFx1OTYzRSAxNC0xMzQ1Ni00CithbHdheXMgXHU5NjNGIDM0NS0zCithbHdheXMgXHU5NjQwIDEyNC0yNS0yCithbHdheXMgXHU5NjQxIDEyNC0yNS0yCithbHdheXMgXHU5NjQyIDEyMzQtMTYtMgorYWx3YXlzIFx1OTY0MyAxMzUtMTM0NTYtNAorYWx3YXlzIFx1OTY0NCAxMjM0NS0zNC01CithbHdheXMgXHU5NjQ1IDEzLTE2LTUKK2Fsd2F5cyBcdTk2NDYgMTQtMzQtNQorYWx3YXlzIFx1OTY0NyAxNC0xMjM0Ni00CithbHdheXMgXHU5NjQ4IDEyLTEzNi0yCithbHdheXMgXHU5NjQ5IDE1LTEzNDU2LTIKK2Fsd2F5cyBcdTk2NEEgMTQ1LTI1LTUKK2Fsd2F5cyBcdTk2NEIgMTQtMTIzNTYtNQorYWx3YXlzIFx1OTY0QyAxMzQtMTI2LTUKK2Fsd2F5cyBcdTk2NEQgMTMtNDYtNQorYWx3YXlzIFx1OTY0RSAyNC0zNC0zCithbHdheXMgXHU5NjRGIDE0NS0yNS01CithbHdheXMgXHU5NjUwIDE1LTIzNDUtNQorYWx3YXlzIFx1OTY1MSAxNTYtMgorYWx3YXlzIFx1OTY1MiAxMy0xMjQ2LTQKK2Fsd2F5cyBcdTk2NTMgMTI1Ni0zCithbHdheXMgXHU5NjU0IDEzLTI0NTYtMworYWx3YXlzIFx1OTY1NSAyNC0xMjM2LTQKK2Fsd2F5cyBcdTk2NTYgMTMtMjU2LTUKK2Fsd2F5cyBcdTk2NTcgMjQ1LTI0Ni01CithbHdheXMgXHU5NjU4IDE1LTEzNDU2LTIKK2Fsd2F5cyBcdTk2NTkgMTItMTIzNDU2LTIKK2Fsd2F5cyBcdTk2NUEgMTIzNDUtMzQtNQorYWx3YXlzIFx1OTY1QiAxMzUtMTYtNQorYWx3YXlzIFx1OTY1QyAyNC0xMjM2LTQKK2Fsd2F5cyBcdTk2NUQgMjQtMTIzNi00CithbHdheXMgXHU5NjVFIDI0LTEzNTYtMworYWx3YXlzIFx1OTY1RiAxLTE1Ni01CithbHdheXMgXHU5NjYwIDEyMzQtMzQtMworYWx3YXlzIFx1OTY2MSAxNDUtMTIzNTYtNAorYWx3YXlzIFx1OTY2MiA0NS01CithbHdheXMgXHU5NjYzIDEtMTM2LTUKK2Fsd2F5cyBcdTk2NjQgMTItMzQtMgorYWx3YXlzIFx1OTY2NSAxNS0yMzQ1LTUKK2Fsd2F5cyBcdTk2NjYgMTQ1LTE0Ni00CithbHdheXMgXHU5NjY3IDEzNDUtMzQ2LTUKK2Fsd2F5cyBcdTk2NjggMjU2LTQKK2Fsd2F5cyBcdTk2NjkgMTUtMjM0NS00CithbHdheXMgXHU5NjZBIDEyMzQtMzU2LTIKK2Fsd2F5cyBcdTk2NkIgMTIzNC0zNTYtMgorYWx3YXlzIFx1OTY2QyAxMjUtMTIzNTYtMworYWx3YXlzIFx1OTY2RCAxNi0zCithbHdheXMgXHU5NjZFIDE0NS0xMjQ2LTUKK2Fsd2F5cyBcdTk2NkYgMTQtMTIzNDU2LTIKK2Fsd2F5cyBcdTk2NzAgMTQ1Ni0zCithbHdheXMgXHU5NjcxIDEzLTEyNTYtMworYWx3YXlzIFx1OTY3MiAxMi0xMjQ2LTIKK2Fsd2F5cyBcdTk2NzMgMTItMTM2LTIKK2Fsd2F5cyBcdTk2NzQgMTIzNC0xNi0yCithbHdheXMgXHU5Njc1IDE0LTEzNDU2LTIKK2Fsd2F5cyBcdTk2NzYgMTI0LTE0Ni0yCithbHdheXMgXHU5Njc3IDE1LTIzNDUtNQorYWx3YXlzIFx1OTY3OCAxNC0zNC01CithbHdheXMgXHU5Njc5IDI0LTEzNTYtMworYWx3YXlzIFx1OTY3QSAxNS0yMzQ1LTQKK2Fsd2F5cyBcdTk2N0IgMTQ1Ni0zCithbHdheXMgXHU5NjdDIDEtMzQtNAorYWx3YXlzIFx1OTY3RCA0Ni0yCithbHdheXMgXHU5NjdFIDEyNDUtMTM1Ni0yCithbHdheXMgXHU5NjdGIDE1LTIzNDU2LTIKK2Fsd2F5cyBcdTk2ODAgMTItMTIzNDYtMgorYWx3YXlzIFx1OTY4MSAyMzQ1LTUKK2Fsd2F5cyBcdTk2ODIgMTQ1Ni0zCithbHdheXMgXHU5NjgzIDEyNTYtMgorYWx3YXlzIFx1OTY4NCAxMjQtMTYtMgorYWx3YXlzIFx1OTY4NSAxMjU2LTIKK2Fsd2F5cyBcdTk2ODYgMTQtMTIzNDYtMgorYWx3YXlzIFx1OTY4NyAxMjQ2LTMKK2Fsd2F5cyBcdTk2ODggMTI0Ni0zCithbHdheXMgXHU5Njg5IDEzNDUtMzQ2LTUKK2Fsd2F5cyBcdTk2OEEgMTQ1LTEyNDYtNQorYWx3YXlzIFx1OTY4QiAxNS0xMjQ2LTIKK2Fsd2F5cyBcdTk2OEMgMTIzNi00CithbHdheXMgXHU5NjhEIDEyMzUtNDU2LTIKK2Fsd2F5cyBcdTk2OEUgMTMtMzQ2LTMKK2Fsd2F5cyBcdTk2OEYgMTUtMTI0Ni0yCithbHdheXMgXHU5NjkwIDE0NTYtNAorYWx3YXlzIFx1OTY5MSAxMy0yNDU2LTMKK2Fsd2F5cyBcdTk2OTIgMjM0NS00CithbHdheXMgXHU5NjkzIDEyMzUtMTI0Ni0zCithbHdheXMgXHU5Njk0IDEzLTIzNDYtMgorYWx3YXlzIFx1OTY5NSAyNTYtNAorYWx3YXlzIFx1OTY5NiAzNC01CithbHdheXMgXHU5Njk3IDEyNDYtNAorYWx3YXlzIFx1OTY5OCAyNDU2LTUKK2Fsd2F5cyBcdTk2OTkgMTUtMTYtNQorYWx3YXlzIFx1OTY5QSAxMjQtMTM0Ni0yCithbHdheXMgXHU5NjlCIDEzLTE2LTUKK2Fsd2F5cyBcdTk2OUMgMS0xMzQ2LTUKK2Fsd2F5cyBcdTk2OUQgMTQ1LTE0Ni00CithbHdheXMgXHU5NjlFIDE0Ni0yCithbHdheXMgXHU5NjlGIDE1LTE2LTUKK2Fsd2F5cyBcdTk2QTAgMTQ1Ni00CithbHdheXMgXHU5NkExIDE1LTM0NS0zCithbHdheXMgXHU5NkEyIDEyNDUtMTQ2LTUKK2Fsd2F5cyBcdTk2QTMgMTQtMTQ1Ni0yCithbHdheXMgXHU5NkE0IDEyNC0xMjQ2LTIKK2Fsd2F5cyBcdTk2QTUgMTQ1LTEzNTYtNQorYWx3YXlzIFx1OTZBNiAxMjM0LTE2LTQKK2Fsd2F5cyBcdTk2QTcgMTUtMTI0Ni01CithbHdheXMgXHU5NkE4IDE1LTEyNDYtMgorYWx3YXlzIFx1OTZBOSAxMjU2LTUKK2Fsd2F5cyBcdTk2QUEgMTUtMjM0NS00CithbHdheXMgXHU5NkFCIDEyMzQ1LTEzNi0yCithbHdheXMgXHU5NkFDIDEzNDUtMTYtNAorYWx3YXlzIFx1OTZBRCAxNTYtMgorYWx3YXlzIFx1OTZBRSAxMy0xNi0zCithbHdheXMgXHU5NkFGIDE0NS0xNDYtNAorYWx3YXlzIFx1OTZCMCAxNS0xNi0yCithbHdheXMgXHU5NkIxIDE0NTYtNAorYWx3YXlzIFx1OTZCMiAyMzQ2LTIKK2Fsd2F5cyBcdTk2QjMgMTIzNS0xMjQ2LTMKK2Fsd2F5cyBcdTk2QjQgMTQtMTIzNDYtNAorYWx3YXlzIFx1OTZCNSAxNS0xNi0zCithbHdheXMgXHU5NkI2IDE0LTE2LTUKK2Fsd2F5cyBcdTk2QjcgMTQtMTYtNQorYWx3YXlzIFx1OTZCOCAxNC0xNi01CithbHdheXMgXHU5NkI5IDEtMTI0Ni0zCithbHdheXMgXHU5NkJBIDEyMzUtMjM0Ni01CithbHdheXMgXHU5NkJCIDEtMTU2LTMKK2Fsd2F5cyBcdTk2QkMgMTUtMTIzNDU2LTQKK2Fsd2F5cyBcdTk2QkQgMTMtNDUtNQorYWx3YXlzIFx1OTZCRSAxMzQ1LTEyMzYtMgorYWx3YXlzIFx1OTZCRiAxNi01CithbHdheXMgXHU5NkMwIDI0NS0yMzYtNQorYWx3YXlzIFx1OTZDMSAyMzQ1LTUKK2Fsd2F5cyBcdTk2QzIgMjQ1LTE0NTYtMgorYWx3YXlzIFx1OTZDMyAyNDUtMjM0NS0zCithbHdheXMgXHU5NkM0IDE1LTIzNS0yCithbHdheXMgXHU5NkM1IDIzNDU2LTQKK2Fsd2F5cyBcdTk2QzYgMTMtMTYtMgorYWx3YXlzIFx1OTZDNyAxMy0zNC01CithbHdheXMgXHU5NkM4IDEyMzUtMTI0NTYtMgorYWx3YXlzIFx1OTZDOSAxLTE1Ni01CithbHdheXMgXHU5NkNBIDEzLTEyMzU2LTUKK2Fsd2F5cyBcdTk2Q0IgMTMtNDUtNQorYWx3YXlzIFx1OTZDQyAyNDUtMTU2LTIKK2Fsd2F5cyBcdTk2Q0QgMjM1LTMKK2Fsd2F5cyBcdTk2Q0UgMTMtMTI1Ni0zCithbHdheXMgXHU5NkNGIDEyLTM0LTIKK2Fsd2F5cyBcdTk2RDAgMTIzNS0zNC0zCithbHdheXMgXHU5NkQxIDEyNS0zNDUtMgorYWx3YXlzIFx1OTZEMiAxNC0yNS01CithbHdheXMgXHU5NkQzIDEyNTYtMgorYWx3YXlzIFx1OTZENCAxMi0xMjM1Ni0yCithbHdheXMgXHU5NkQ1IDE0NS0yNDYtMworYWx3YXlzIFx1OTZENiAxNS0xMjQ2LTMKK2Fsd2F5cyBcdTk2RDcgMTIzNS0xMjM2LTUKK2Fsd2F5cyBcdTk2RDggMjUtNQorYWx3YXlzIFx1OTZEOSAyNC00NTYtMworYWx3YXlzIFx1OTZEQSAxMjM1LTEyNDU2LTIKK2Fsd2F5cyBcdTk2REIgMTItMzQtMgorYWx3YXlzIFx1OTZEQyAxMjUtMzQ1LTIKK2Fsd2F5cyBcdTk2REQgMjM1LTMKK2Fsd2F5cyBcdTk2REUgMTMtMTYtMworYWx3YXlzIFx1OTZERiAxNS0xNi0zCithbHdheXMgXHU5NkUwIDEyLTEyMzU2LTIKK2Fsd2F5cyBcdTk2RTEgMTQtMjM0LTUKK2Fsd2F5cyBcdTk2RTIgMTQtMTYtMgorYWx3YXlzIFx1OTZFMyAxMzQ1LTEyMzYtMgorYWx3YXlzIFx1OTZFNCAxNS0yMzYtMgorYWx3YXlzIFx1OTZFNSAxMjUtMzQ1LTIKK2Fsd2F5cyBcdTk2RTYgMTMtMTYtMgorYWx3YXlzIFx1OTZFNyAxMy0xNi0yCithbHdheXMgXHU5NkU4IDEyNTYtNAorYWx3YXlzIFx1OTZFOSAxMjU2LTIKK2Fsd2F5cyBcdTk2RUEgMTUtMjM2LTQKK2Fsd2F5cyBcdTk2RUIgMTM0NS0zNDUtNAorYWx3YXlzIFx1OTZFQyAxMjM0NS0xMjM1Ni00CithbHdheXMgXHU5NkVEIDE1LTIzNDYtNQorYWx3YXlzIFx1OTZFRSAxMzQtMzQtNQorYWx3YXlzIFx1OTZFRiAxMjM0NTYtMgorYWx3YXlzIFx1OTZGMCAxMjM0NS0xMzYtMworYWx3YXlzIFx1OTZGMSAxMjM0LTEzNDYtMgorYWx3YXlzIFx1OTZGMiAyNTYtMgorYWx3YXlzIFx1OTZGMyAxNC0xNi01CithbHdheXMgXHU5NkY0IDE0LTE2LTUKK2Fsd2F5cyBcdTk2RjUgMTM0Ni00CithbHdheXMgXHU5NkY2IDE0LTEzNDU2LTIKK2Fsd2F5cyBcdTk2RjcgMTQtMzU2LTIKK2Fsd2F5cyBcdTk2RjggMTIzNi0yCithbHdheXMgXHU5NkY5IDEzNS0xNDYtMgorYWx3YXlzIFx1OTZGQSAzNC01CithbHdheXMgXHU5NkZCIDE0NS0yMzQ1LTUKK2Fsd2F5cyBcdTk2RkMgMTQ1LTEzNDYtNQorYWx3YXlzIFx1OTZGRCAxMjM1LTM0LTIKK2Fsd2F5cyBcdTk2RkUgMzQtNQorYWx3YXlzIFx1OTZGRiAxNDUtMjQ2LTUKK2Fsd2F5cyBcdTk3MDAgMTUtMTI1Ni0zCithbHdheXMgXHU5NzAxIDEzLTE2LTUKK2Fsd2F5cyBcdTk3MDIgMTM0LTM0LTUKK2Fsd2F5cyBcdTk3MDMgMTItMTM2LTIKK2Fsd2F5cyBcdTk3MDQgMTUtMjQ2LTMKK2Fsd2F5cyBcdTk3MDUgMS0zNDUtMgorYWx3YXlzIFx1OTcwNiAxMjQtMTM0NTYtMgorYWx3YXlzIFx1OTcwNyAxLTEzNi01CithbHdheXMgXHU5NzA4IDEyMzQtMzU2LTUKK2Fsd2F5cyBcdTk3MDkgMTM0LTM1Ni0yCithbHdheXMgXHU5NzBBIDE0LTEzNDU2LTIKK2Fsd2F5cyBcdTk3MEIgMjQ1LTE2LTMKK2Fsd2F5cyBcdTk3MEMgMTItMTIzNTYtMworYWx3YXlzIFx1OTcwRCAxMjM1LTI1LTUKK2Fsd2F5cyBcdTk3MEUgMjQtMzQ1LTUKK2Fsd2F5cyBcdTk3MEYgMTIzNDUtMzU2LTMKK2Fsd2F5cyBcdTk3MTAgMTIzNS0xMjM0Ni0yCithbHdheXMgXHU5NzExIDEtMTIzNi0zCithbHdheXMgXHU5NzEyIDE0NTYtMworYWx3YXlzIFx1OTcxMyAxMzQ1LTE2LTIKK2Fsd2F5cyBcdTk3MTQgMS0zNC01CithbHdheXMgXHU5NzE1IDEyNC0xMjM0NTYtMgorYWx3YXlzIFx1OTcxNiAxNC0xNDU2LTIKK2Fsd2F5cyBcdTk3MTcgMTQtMTM0NTYtMgorYWx3YXlzIFx1OTcxOCAxNDUtMTIzNDYtNQorYWx3YXlzIFx1OTcxOSAxMzQ1Ni0zCithbHdheXMgXHU5NzFBIDM0LTUKK2Fsd2F5cyBcdTk3MUIgMTQtMTM0NTYtMgorYWx3YXlzIFx1OTcxQyAyNC00NTYtMworYWx3YXlzIFx1OTcxRCAxNC0xMzQ1Ni0yCithbHdheXMgXHU5NzFFIDE1LTIzNDU2LTIKK2Fsd2F5cyBcdTk3MUYgMTIzNS0xMjM0Ni0yCithbHdheXMgXHU5NzIwIDE0NTYtMworYWx3YXlzIFx1OTcyMSAxMzQtMTI2LTUKK2Fsd2F5cyBcdTk3MjIgMTM0LTEyNi01CithbHdheXMgXHU5NzIzIDI1Ni00CithbHdheXMgXHU5NzI0IDE0LTIzNC01CithbHdheXMgXHU5NzI1IDEzNC0xMzU2LTUKK2Fsd2F5cyBcdTk3MjYgMTM1LTE0NTYtMworYWx3YXlzIFx1OTcyNyAzNC01CithbHdheXMgXHU5NzI4IDEyNDYtNQorYWx3YXlzIFx1OTcyOSAxMjMtMjUtNQorYWx3YXlzIFx1OTcyQSAxNDU2LTIKK2Fsd2F5cyBcdTk3MkIgMTUtMTYtMgorYWx3YXlzIFx1OTcyQyAxNi01CithbHdheXMgXHU5NzJEIDI0NTYtNAorYWx3YXlzIFx1OTcyRSAxNDUtMTIzNi01CithbHdheXMgXHU5NzJGIDE0NS0xMzU2LTUKK2Fsd2F5cyBcdTk3MzAgMTUtMjM0NS01CithbHdheXMgXHU5NzMxIDEyNTYtNQorYWx3YXlzIFx1OTczMiAxNC0zNC01CithbHdheXMgXHU5NzMzIDE0LTEyMzQ2LTIKK2Fsd2F5cyBcdTk3MzQgMTQ1LTI0NTYtNQorYWx3YXlzIFx1OTczNSAxMy0xNi0yCithbHdheXMgXHU5NzM2IDEyMzQtMTM0Ni0zCithbHdheXMgXHU5NzM3IDQ2LTIKK2Fsd2F5cyBcdTk3MzggMTM1LTM0NS01CithbHdheXMgXHU5NzM5IDEyMzQtMTYtMworYWx3YXlzIFx1OTczQSAxMjQ2LTIKK2Fsd2F5cyBcdTk3M0IgMTIzNDUtMTM1Ni0zCithbHdheXMgXHU5NzNDIDE1LTE2LTQKK2Fsd2F5cyBcdTk3M0QgMTMtMTYtNQorYWx3YXlzIFx1OTczRSAxMzQtMjQ1Ni0yCithbHdheXMgXHU5NzNGIDEzNC0xMzU2LTIKK2Fsd2F5cyBcdTk3NDAgMTM0LTEzNTYtMgorYWx3YXlzIFx1OTc0MSAxNC0zNTYtMgorYWx3YXlzIFx1OTc0MiAxNC0xNi01CithbHdheXMgXHU5NzQzIDEyMzUtMjUtNQorYWx3YXlzIFx1OTc0NCAyNDU2LTQKK2Fsd2F5cyBcdTk3NDUgMTIzNDUtMzU2LTUKK2Fsd2F5cyBcdTk3NDYgMTQ1LTI0NTYtNQorYWx3YXlzIFx1OTc0NyAxNC0xMjM0Ni0yCithbHdheXMgXHU5NzQ4IDE0LTEzNDU2LTIKK2Fsd2F5cyBcdTk3NDkgMjQ1Ni01CithbHdheXMgXHU5NzRBIDEyMzQ1LTEzNTYtMworYWx3YXlzIFx1OTc0QiAxNC0xNi01CithbHdheXMgXHU5NzRDIDEzNS0xNDYtNAorYWx3YXlzIFx1OTc0RCAxMjM1LTIzNDYtNQorYWx3YXlzIFx1OTc0RSAxMjM1LTIzNDYtNQorYWx3YXlzIFx1OTc0RiAxMjM1LTIzNDYtNQorYWx3YXlzIFx1OTc1MCAxMzUtMTM0NTYtNQorYWx3YXlzIFx1OTc1MSAyNDUtMTM0NTYtMworYWx3YXlzIFx1OTc1MiAyNDUtMTM0NTYtMworYWx3YXlzIFx1OTc1MyAxNC00Ni01CithbHdheXMgXHU5NzU0IDEyNC0yMzQ1LTMKK2Fsd2F5cyBcdTk3NTUgMS0xMzYtMworYWx3YXlzIFx1OTc1NiAxMy0xMzQ1Ni01CithbHdheXMgXHU5NzU3IDEyLTEzNTYtNQorYWx3YXlzIFx1OTc1OCAyNDUtMTM0NTYtNQorYWx3YXlzIFx1OTc1OSAxMy0xMzQ1Ni01CithbHdheXMgXHU5NzVBIDE0LTQ2LTUKK2Fsd2F5cyBcdTk3NUIgMTQ1LTIzNDUtNQorYWx3YXlzIFx1OTc1QyAxMy0xMzQ1Ni01CithbHdheXMgXHU5NzVEIDEyNC0yMzQ1LTMKK2Fsd2F5cyBcdTk3NUUgMTIzNDUtMzU2LTMKK2Fsd2F5cyBcdTk3NUYgMTIzNDUtMzU2LTMKK2Fsd2F5cyBcdTk3NjAgMTIzLTE0Ni01CithbHdheXMgXHU5NzYxIDEzNC0xNi00CithbHdheXMgXHU5NzYyIDEzNC0yMzQ1LTUKK2Fsd2F5cyBcdTk3NjMgMTM0LTIzNDUtNQorYWx3YXlzIFx1OTc2NCAxMjM0LTE0Ni01CithbHdheXMgXHU5NzY1IDM0Ni01CithbHdheXMgXHU5NzY2IDEyNC0yMzQ1LTQKK2Fsd2F5cyBcdTk3NjcgMTIzNS0xMjQ2LTUKK2Fsd2F5cyBcdTk3NjggMzQ2LTUKK2Fsd2F5cyBcdTk3NjkgMTMtMjM0Ni0yCithbHdheXMgXHU5NzZBIDE0NS0xMzQ1Ni0zCithbHdheXMgXHU5NzZCIDEyLTM0NS0zCithbHdheXMgXHU5NzZDIDI0NS0yMzQ1LTIKK2Fsd2F5cyBcdTk3NkQgMTI0NS0xMzYtNQorYWx3YXlzIFx1OTc2RSAxNDUtMTYtMgorYWx3YXlzIFx1OTc2RiAxNDUtMzQtNQorYWx3YXlzIFx1OTc3MCAzNC01CithbHdheXMgXHU5NzcxIDEyNDUtMTM2LTUKK2Fsd2F5cyBcdTk3NzIgMjQ1LTE0NTYtMgorYWx3YXlzIFx1OTc3MyAxMy0xNDU2LTUKK2Fsd2F5cyBcdTk3NzQgMTUtMjM2LTMKK2Fsd2F5cyBcdTk3NzUgMTM0NS0yMzQtNAorYWx3YXlzIFx1OTc3NiAxMzUtMzQ1LTQKK2Fsd2F5cyBcdTk3NzcgMTQ1Ni00CithbHdheXMgXHU5Nzc4IDE1LTM0NS00CithbHdheXMgXHU5Nzc5IDEzNDUtMzQ1LTUKK2Fsd2F5cyBcdTk3N0EgMTM0LTEyNi01CithbHdheXMgXHU5NzdCIDEyNS0zNC00CithbHdheXMgXHU5NzdDIDE0NS0zNDUtMgorYWx3YXlzIFx1OTc3RCAxMzUtMTIzNi01CithbHdheXMgXHU5NzdFIDE2LTUKK2Fsd2F5cyBcdTk3N0YgMjQ2LTUKK2Fsd2F5cyBcdTk3ODAgMTI0LTE0Ni0yCithbHdheXMgXHU5NzgxIDEzNS0zNTYtNQorYWx3YXlzIFx1OTc4MiAxMy0yMzQ1Ni0yCithbHdheXMgXHU5NzgzIDEyMzUtMTIzNDYtMgorYWx3YXlzIFx1OTc4NCAxMjM0LTE0Ni0yCithbHdheXMgXHU5Nzg1IDQ2LTMKK2Fsd2F5cyBcdTk3ODYgMTQ1LTEzNDU2LTQKK2Fsd2F5cyBcdTk3ODcgMTQ1Ni0zCithbHdheXMgXHU5Nzg4IDEzLTIzNDU2LTIKK2Fsd2F5cyBcdTk3ODkgMTI0LTE0Ni0yCithbHdheXMgXHU5NzhBIDEzLTE2LTIKK2Fsd2F5cyBcdTk3OEIgMTUtMzQ2LTIKK2Fsd2F5cyBcdTk3OEMgMTIzNi0zCithbHdheXMgXHU5NzhEIDEyMzYtMworYWx3YXlzIFx1OTc4RSAxMjM1LTEzNi0yCithbHdheXMgXHU5NzhGIDEzLTEyMzQ2LTQKK2Fsd2F5cyBcdTk3OTAgMjQ1LTIzNDU2LTQKK2Fsd2F5cyBcdTk3OTEgMTQ1LTM0NS0yCithbHdheXMgXHU5NzkyIDI0NS0yNDYtMworYWx3YXlzIFx1OTc5MyAxMjQtMTM0NTYtMworYWx3YXlzIFx1OTc5NCAxMzQtMTIzNi0yCithbHdheXMgXHU5Nzk1IDEzNDU2LTUKK2Fsd2F5cyBcdTk3OTYgMTUtMTI0Ni0zCithbHdheXMgXHU5Nzk3IDEyNC0yNDYtMgorYWx3YXlzIFx1OTc5OCAyNDUtMjQ2LTUKK2Fsd2F5cyBcdTk3OTkgMTMtNDUtMworYWx3YXlzIFx1OTc5QSAxMjMtMTIzNDYtNQorYWx3YXlzIFx1OTc5QiAxMzUtMTM1Ni00CithbHdheXMgXHU5NzlDIDEyNC0zNDUtNQorYWx3YXlzIFx1OTc5RCAyNC0xMzQ2LTUKK2Fsd2F5cyBcdTk3OUUgMTM1LTEzNDU2LTQKK2Fsd2F5cyBcdTk3OUYgMTIzLTI1LTUKK2Fsd2F5cyBcdTk3QTAgMTMtMTI1Ni0yCithbHdheXMgXHU5N0ExIDE0LTM0NS0zCithbHdheXMgXHU5N0EyIDE1LTM0Ni01CithbHdheXMgXHU5N0EzIDEyNDUtMTIzNTYtMgorYWx3YXlzIFx1OTdBNCAxMzUtMTM0Ni0zCithbHdheXMgXHU5N0E1IDEzNTYtMworYWx3YXlzIFx1OTdBNiAyNDUtMjM0LTMKK2Fsd2F5cyBcdTk3QTcgMjQ1LTIzNC0zCithbHdheXMgXHU5N0E4IDEyMzUtMjM0Ni0yCithbHdheXMgXHU5N0E5IDE1LTI0Ni01CithbHdheXMgXHU5N0FBIDEzNC0xMjM1Ni0yCithbHdheXMgXHU5N0FCIDEzLTEyNTYtMworYWx3YXlzIFx1OTdBQyAxMy0yMzQ1LTMKK2Fsd2F5cyBcdTk3QUQgMTM1LTIzNDUtMworYWx3YXlzIFx1OTdBRSAxNDUtMTYtMworYWx3YXlzIFx1OTdBRiAxMy0yMzQ1LTMKK2Fsd2F5cyBcdTk3QjAgMTMtMTI1Ni0zCithbHdheXMgXHU5N0IxIDEyNC0xNDYtMworYWx3YXlzIFx1OTdCMiAxMy0xMjM1Ni0zCithbHdheXMgXHU5N0IzIDEyNC0zNDUtNQorYWx3YXlzIFx1OTdCNCAxMzUtMjQ1Ni01CithbHdheXMgXHU5N0I1IDE1LTM0Ni0yCithbHdheXMgXHU5N0I2IDEyMzQtMTIzNi0yCithbHdheXMgXHU5N0I3IDEzLTIzNDYtMgorYWx3YXlzIFx1OTdCOCAxMzUtMTYtNQorYWx3YXlzIFx1OTdCOSAxMjMtMjUtNQorYWx3YXlzIFx1OTdCQSAxMjM0LTEzNDYtMworYWx3YXlzIFx1OTdCQiAxNC0xMjM1Ni01CithbHdheXMgXHU5N0JDIDEzLTEyNDYtNQorYWx3YXlzIFx1OTdCRCAyNDUtMjQ2LTMKK2Fsd2F5cyBcdTk3QkUgMTUtMjM2LTMKK2Fsd2F5cyBcdTk3QkYgMTMtMTYtMworYWx3YXlzIFx1OTdDMCAxMy0yMzQ1LTMKK2Fsd2F5cyBcdTk3QzEgMTMtNDYtMworYWx3YXlzIFx1OTdDMiAxMi0xMjM2LTUKK2Fsd2F5cyBcdTk3QzMgMTQ1LTM0NS0yCithbHdheXMgXHU5N0M0IDEyMzUtMjUtNQorYWx3YXlzIFx1OTdDNSAxNS0yMzQ1LTQKK2Fsd2F5cyBcdTk3QzYgMjQ1LTIzNDUtMworYWx3YXlzIFx1OTdDNyAxNDUtMzQtMgorYWx3YXlzIFx1OTdDOCAzNS01CithbHdheXMgXHU5N0M5IDEzLTIzNDUtMworYWx3YXlzIFx1OTdDQSAxNC0xMjM2LTIKK2Fsd2F5cyBcdTk3Q0IgMTI0Ni0yCithbHdheXMgXHU5N0NDIDEyNDUtMTM2LTUKK2Fsd2F5cyBcdTk3Q0QgMTIzNDUtMzQtMgorYWx3YXlzIFx1OTdDRSAxMzQtMzU2LTUKK2Fsd2F5cyBcdTk3Q0YgMTMtNDUtNQorYWx3YXlzIFx1OTdEMCAxMy0yMzQ2LTIKK2Fsd2F5cyBcdTk3RDEgMTI0Ni00CithbHdheXMgXHU5N0QyIDI0NS0yNDYtNQorYWx3YXlzIFx1OTdEMyAxMjM1LTEyMzYtMgorYWx3YXlzIFx1OTdENCAxMi0xMzQ2LTUKK2Fsd2F5cyBcdTk3RDUgMTIzNS0yNS01CithbHdheXMgXHU5N0Q2IDEyNDUtMTIzNTYtNAorYWx3YXlzIFx1OTdENyAyNTYtNQorYWx3YXlzIFx1OTdEOCAyNC0yMzQ2LTUKK2Fsd2F5cyBcdTk3RDkgMTI0Ni00CithbHdheXMgXHU5N0RBIDEzLTIzNDYtMgorYWx3YXlzIFx1OTdEQiAxMzUtMjQ1Ni01CithbHdheXMgXHU5N0RDIDEyNC0xNDYtMworYWx3YXlzIFx1OTdERCAxMy0xMjM1Ni0zCithbHdheXMgXHU5N0RFIDI1Ni01CithbHdheXMgXHU5N0RGIDEzLTE0Ni0zCithbHdheXMgXHU5N0UwIDEzNS0xNi01CithbHdheXMgXHU5N0UxIDEyNDYtNAorYWx3YXlzIFx1OTdFMiAxMjM1LTEyNDYtNQorYWx3YXlzIFx1OTdFMyAxNDUtMzQtMgorYWx3YXlzIFx1OTdFNCAzNS01CithbHdheXMgXHU5N0U1IDE0NS0zNC0yCithbHdheXMgXHU5N0U2IDEyNDYtMgorYWx3YXlzIFx1OTdFNyAxMjQ1LTEzNi01CithbHdheXMgXHU5N0U4IDEyMzQ1LTM0LTIKK2Fsd2F5cyBcdTk3RTkgMTIzNS0xMjM2LTIKK2Fsd2F5cyBcdTk3RUEgMTI0Ni00CithbHdheXMgXHU5N0VCIDI1Ni01CithbHdheXMgXHU5N0VDIDEyNC0xNDYtMworYWx3YXlzIFx1OTdFRCAxMy0yMzQtNAorYWx3YXlzIFx1OTdFRSAxMy0yMzQtNAorYWx3YXlzIFx1OTdFRiAxNS0yMzQ1LTMKK2Fsd2F5cyBcdTk3RjAgMTUtMzQ2LTUKK2Fsd2F5cyBcdTk3RjEgMTUtMjM0NS0zCithbHdheXMgXHU5N0YyIDEzLTE2LTMKK2Fsd2F5cyBcdTk3RjMgMTQ1Ni0zCithbHdheXMgXHU5N0Y0IDEyNS0zNDUtMgorYWx3YXlzIFx1OTdGNSAyNTYtNQorYWx3YXlzIFx1OTdGNiAyNC0xNDYtMgorYWx3YXlzIFx1OTdGNyAxNC0yMzQ2LTUKK2Fsd2F5cyBcdTk3RjggMTIzNC0xMzU2LTIKK2Fsd2F5cyBcdTk3RjkgMTIzNS0xMzU2LTIKK2Fsd2F5cyBcdTk3RkEgMTM0NTYtMworYWx3YXlzIFx1OTdGQiAyNTYtNQorYWx3YXlzIFx1OTdGQyAxMjM0LTEzNTYtMgorYWx3YXlzIFx1OTdGRCAxMjM2LTMKK2Fsd2F5cyBcdTk3RkUgMTQ1Ni0zCithbHdheXMgXHU5N0ZGIDE1LTQ2LTQKK2Fsd2F5cyBcdTk4MDAgMTIzNS0zNC01CithbHdheXMgXHU5ODAxIDM0Ni01CithbHdheXMgXHU5ODAyIDE0NS0xMzQ1Ni00CithbHdheXMgXHU5ODAzIDI0NS0xMzQ1Ni00CithbHdheXMgXHU5ODA0IDEyMy0xMjQ2LTIKK2Fsd2F5cyBcdTk4MDUgMTUtNDYtNQorYWx3YXlzIFx1OTgwNiAyNC0xMjM0NTYtNQorYWx3YXlzIFx1OTgwNyAxMjM1LTEyMzYtMworYWx3YXlzIFx1OTgwOCAxNS0xMjU2LTMKK2Fsd2F5cyBcdTk4MDkgMTYtMgorYWx3YXlzIFx1OTgwQSAxNS0xMjU2LTMKK2Fsd2F5cyBcdTk4MEIgMjM0Ni00CithbHdheXMgXHU5ODBDIDE1LTEyMzQ2LTUKK2Fsd2F5cyBcdTk4MEQgMTIzLTEyNDYtNAorYWx3YXlzIFx1OTgwRSAyNDUtMTYtMgorYWx3YXlzIFx1OTgwRiAxMjM1LTEzNDYtMgorYWx3YXlzIFx1OTgxMCAxMjU2LTUKK2Fsd2F5cyBcdTk4MTEgMTI0NTYtMgorYWx3YXlzIFx1OTgxMiAxMzUtMTIzNi0zCithbHdheXMgXHU5ODEzIDE0NS0xMjM0NTYtNQorYWx3YXlzIFx1OTgxNCAxNDUtMTYtMgorYWx3YXlzIFx1OTgxNSAxNDUtMTIzNi0zCithbHdheXMgXHU5ODE2IDEyMzQtMTIzNi01CithbHdheXMgXHU5ODE3IDEyMzQtMTI2LTQKK2Fsd2F5cyBcdTk4MTggMTQtMTM0NTYtNAorYWx3YXlzIFx1OTgxOSAxMi0yMzQ2LTUKK2Fsd2F5cyBcdTk4MUEgMTMtMTM0NTYtNAorYWx3YXlzIFx1OTgxQiAxNC0zNTYtNAorYWx3YXlzIFx1OTgxQyAxMy0yMzQ2LTIKK2Fsd2F5cyBcdTk4MUQgMjQ1LTI0Ni0zCithbHdheXMgXHU5ODFFIDIzNDYtNQorYWx3YXlzIFx1OTgxRiAyMzQ2LTIKK2Fsd2F5cyBcdTk4MjAgMTI0Ni00CithbHdheXMgXHU5ODIxIDEzLTM0Ni0yCithbHdheXMgXHU5ODIyIDEyMy0yNS01CithbHdheXMgXHU5ODIzIDI0LTEzNi00CithbHdheXMgXHU5ODI0IDE2LTIKK2Fsd2F5cyBcdTk4MjUgMjQtMTM2LTQKK2Fsd2F5cyBcdTk4MjYgMTIzNS0yNDU2LTIKK2Fsd2F5cyBcdTk4MjcgMTQ1LTEyNDYtMworYWx3YXlzIFx1OTgyOCAxMjM0LTIzNDUtMworYWx3YXlzIFx1OTgyOSAxMjM0LTEzNDU2LTMKK2Fsd2F5cyBcdTk4MkEgMTQtMzU2LTUKK2Fsd2F5cyBcdTk4MkIgMTIzNDUtMzQtNAorYWx3YXlzIFx1OTgyQyAxMy0yMzQ1Ni0yCithbHdheXMgXHU5ODJEIDEyNC0xMjM1Ni0yCithbHdheXMgXHU5ODJFIDEyMzUtMTI0Ni01CithbHdheXMgXHU5ODJGIDEyMy0xMjQ2LTIKK2Fsd2F5cyBcdTk4MzAgMTMtMjM0NTYtMgorYWx3YXlzIFx1OTgzMSAxNC0yNS0yCithbHdheXMgXHU5ODMyIDEyNC0xMzQ1Ni00CithbHdheXMgXHU5ODMzIDEyLTEzNTYtMworYWx3YXlzIFx1OTgzNCAxMzQ1Ni00CithbHdheXMgXHU5ODM1IDEzLTI1Ni0zCithbHdheXMgXHU5ODM2IDEyMzUtMzQtMgorYWx3YXlzIFx1OTgzNyAxMjM1LTEyMzYtNQorYWx3YXlzIFx1OTgzOCAxMy0xMzQ1Ni00CithbHdheXMgXHU5ODM5IDEyNC0xMjQ2LTIKK2Fsd2F5cyBcdTk4M0EgMTI0LTEyNDYtMgorYWx3YXlzIFx1OTgzQiAxMjM0LTE0NTYtMgorYWx3YXlzIFx1OTgzQyAxNC0yNDU2LTUKK2Fsd2F5cyBcdTk4M0QgMTI0LTEyNDYtMgorYWx3YXlzIFx1OTgzRSAxMjUtMTU2LTMKK2Fsd2F5cyBcdTk4M0YgMTI1LTE1Ni0zCithbHdheXMgXHU5ODQwIDEyLTEyNDYtMgorYWx3YXlzIFx1OTg0MSAxNDUtMTM0NTYtNQorYWx3YXlzIFx1OTg0MiAxNC0yNDU2LTUKK2Fsd2F5cyBcdTk4NDMgMjM0NS0yCithbHdheXMgXHU5ODQ0IDEyMzUtMTIzNi01CithbHdheXMgXHU5ODQ1IDEzLTIzNDUtMworYWx3YXlzIFx1OTg0NiAxMjMtMjM0Ni0zCithbHdheXMgXHU5ODQ3IDI0NS0xMjQ2LTUKK2Fsd2F5cyBcdTk4NDggMTMtMjM1LTQKK2Fsd2F5cyBcdTk4NDkgMjQ1LTE0NTYtMworYWx3YXlzIFx1OTg0QSAxNi0yCithbHdheXMgXHU5ODRCIDE1LTI0NTYtMworYWx3YXlzIFx1OTg0QyAxMjQtMTYtMgorYWx3YXlzIFx1OTg0RCAyMzQ2LTIKK2Fsd2F5cyBcdTk4NEUgMjM0Ni01CithbHdheXMgXHU5ODRGIDIzNDUtMgorYWx3YXlzIFx1OTg1MCAxMjM1LTEyMzQ1Ni01CithbHdheXMgXHU5ODUxIDEyMy0xMjM2LTQKK2Fsd2F5cyBcdTk4NTIgMjM1LTIKK2Fsd2F5cyBcdTk4NTMgMS0xMjQ1Ni0zCithbHdheXMgXHU5ODU0IDIzNDUtMgorYWx3YXlzIFx1OTg1NSAxNS0yMzQ1LTQKK2Fsd2F5cyBcdTk4NTYgMTUtMTQ1Ni01CithbHdheXMgXHU5ODU3IDE2LTQKK2Fsd2F5cyBcdTk4NTggNDUtNQorYWx3YXlzIFx1OTg1OSAxNS0xMzQ2LTQKK2Fsd2F5cyBcdTk4NUEgMTQ1LTIzNDUtMworYWx3YXlzIFx1OTg1QiAxNDUtMjM0NS0zCithbHdheXMgXHU5ODVDIDEzLTQ2LTQKK2Fsd2F5cyBcdTk4NUQgMTIzLTM0LTMKK2Fsd2F5cyBcdTk4NUUgMTQtMzU2LTUKK2Fsd2F5cyBcdTk4NUYgMTQtMjQ2LTIKK2Fsd2F5cyBcdTk4NjAgMTIzNC0yNDYtNAorYWx3YXlzIFx1OTg2MSAxNi01CithbHdheXMgXHU5ODYyIDEzNC0xMjM2LTMKK2Fsd2F5cyBcdTk4NjMgMjQ1LTM0LTUKK2Fsd2F5cyBcdTk4NjQgMjQ2LTIKK2Fsd2F5cyBcdTk4NjUgMTIzNS0xNDYtNQorYWx3YXlzIFx1OTg2NiAyNDUtMjQ2LTIKK2Fsd2F5cyBcdTk4NjcgMTMtMzQtNQorYWx3YXlzIFx1OTg2OCAxNS0yNTYtNQorYWx3YXlzIFx1OTg2OSAyMzQ1LTQKK2Fsd2F5cyBcdTk4NkEgMTIzNS0xMjQ2LTUKK2Fsd2F5cyBcdTk4NkIgMTItMTIzNi01CithbHdheXMgXHU5ODZDIDEyNDUtMzQtMgorYWx3YXlzIFx1OTg2RCAxMjM1LTEyMzQ2LTMKK2Fsd2F5cyBcdTk4NkUgMTM1LTE0NTYtMworYWx3YXlzIFx1OTg2RiAxNS0yMzQ1LTQKK2Fsd2F5cyBcdTk4NzAgMTIzNC0xNDU2LTIKK2Fsd2F5cyBcdTk4NzEgMTQtMzQtMgorYWx3YXlzIFx1OTg3MiAxNC0xNDU2LTQKK2Fsd2F5cyBcdTk4NzMgMTM0NS0zNDYtNQorYWx3YXlzIFx1OTg3NCAyNDUtNDUtMgorYWx3YXlzIFx1OTg3NSAzNDYtNQorYWx3YXlzIFx1OTg3NiAxNDUtMTM0NTYtNAorYWx3YXlzIFx1OTg3NyAyNDUtMTM0NTYtNAorYWx3YXlzIFx1OTg3OCAxMjM1LTEyMzYtMworYWx3YXlzIFx1OTg3OSAxNS00Ni01CithbHdheXMgXHU5ODdBIDI0LTEyMzQ1Ni01CithbHdheXMgXHU5ODdCIDE1LTEyNTYtMworYWx3YXlzIFx1OTg3QyAxNS0xMjU2LTMKK2Fsd2F5cyBcdTk4N0QgMTI0NTYtMgorYWx3YXlzIFx1OTg3RSAxMy0zNC01CithbHdheXMgXHU5ODdGIDE0NS0xMjM0NTYtNQorYWx3YXlzIFx1OTg4MCAyNDUtMTYtMgorYWx3YXlzIFx1OTg4MSAxMzUtMTIzNi0zCithbHdheXMgXHU5ODgyIDE1LTEyMzQ2LTUKK2Fsd2F5cyBcdTk4ODMgMTIzNS0xMzQ2LTIKK2Fsd2F5cyBcdTk4ODQgMTI1Ni01CithbHdheXMgXHU5ODg1IDE0LTM0LTIKK2Fsd2F5cyBcdTk4ODYgMTQtMTM0NTYtNAorYWx3YXlzIFx1OTg4NyAxMjM0LTEyNi00CithbHdheXMgXHU5ODg4IDEzLTEzNDU2LTQKK2Fsd2F5cyBcdTk4ODkgMTMtMzQ2LTIKK2Fsd2F5cyBcdTk4OEEgMTMtMjM0NTYtMgorYWx3YXlzIFx1OTg4QiAxMjQtMTM0NTYtNAorYWx3YXlzIFx1OTg4QyAxMjM1LTIzNDYtMgorYWx3YXlzIFx1OTg4RCAxMzQ1Ni00CithbHdheXMgXHU5ODhFIDEzLTIzNS00CithbHdheXMgXHU5ODhGIDEyMzUtMjM0Ni0zCithbHdheXMgXHU5ODkwIDE2LTIKK2Fsd2F5cyBcdTk4OTEgMTIzNC0xNDU2LTIKK2Fsd2F5cyBcdTk4OTIgMTIzNS0xMjQ2LTUKK2Fsd2F5cyBcdTk4OTMgMTI0LTEyNDYtMgorYWx3YXlzIFx1OTg5NCAxMjM1LTEyMzYtNQorYWx3YXlzIFx1OTg5NSAxMzQ1Ni00CithbHdheXMgXHU5ODk2IDEzNDU2LTQKK2Fsd2F5cyBcdTk4OTcgMTIzLTIzNDYtMworYWx3YXlzIFx1OTg5OCAxMjQtMTYtMgorYWx3YXlzIFx1OTg5OSAyMzUtMgorYWx3YXlzIFx1OTg5QSAyMzQ2LTUKK2Fsd2F5cyBcdTk4OUIgMS0xMjQ1Ni0zCithbHdheXMgXHU5ODlDIDIzNDUtMgorYWx3YXlzIFx1OTg5RCAyMzQ2LTIKK2Fsd2F5cyBcdTk4OUUgMTM0NS0zNDYtNQorYWx3YXlzIFx1OTg5RiAxMzQtMTIzNi0zCithbHdheXMgXHU5OEEwIDE0NS0yMzQ1LTMKK2Fsd2F5cyBcdTk4QTEgMTUtMTM0Ni00CithbHdheXMgXHU5OEEyIDEyMzUtMTQ2LTUKK2Fsd2F5cyBcdTk4QTMgMTQtMzU2LTUKK2Fsd2F5cyBcdTk4QTQgMTItMTIzNi01CithbHdheXMgXHU5OEE1IDEyNDUtMzQtMgorYWx3YXlzIFx1OThBNiAxMjM0LTE0NTYtMgorYWx3YXlzIFx1OThBNyAyNDUtNDUtMgorYWx3YXlzIFx1OThBOCAxMjM0NS0xMzU2LTMKK2Fsd2F5cyBcdTk4QTkgMTM1LTI0Ni0zCithbHdheXMgXHU5OEFBIDEzLTM1LTMKK2Fsd2F5cyBcdTk4QUIgMTIzNDUtMzQtMgorYWx3YXlzIFx1OThBQyAxNS0yMzQ1Ni0zCithbHdheXMgXHU5OEFEIDEtMTIzNi00CithbHdheXMgXHU5OEFFIDEzNS0yNDYtMworYWx3YXlzIFx1OThBRiAxNS0zNDUtNQorYWx3YXlzIFx1OThCMCAxMzUtMzQ1LTIKK2Fsd2F5cyBcdTk4QjEgMTI0LTI0NTYtMgorYWx3YXlzIFx1OThCMiAxNC0zNDYtNQorYWx3YXlzIFx1OThCMyAxMy0zNS0zCithbHdheXMgXHU5OEI0IDE1LTQ1LTUKK2Fsd2F5cyBcdTk4QjUgMjQtMTQ2LTUKK2Fsd2F5cyBcdTk4QjYgMTMtMTI1Ni01CithbHdheXMgXHU5OEI3IDEzNS0yNDYtMworYWx3YXlzIFx1OThCOCAxNS0xNTYtMworYWx3YXlzIFx1OThCOSAxMjQ2LTQKK2Fsd2F5cyBcdTk4QkEgNDYtMgorYWx3YXlzIFx1OThCQiAyNDYtMgorYWx3YXlzIFx1OThCQyAxNS0xMjM1Ni0zCithbHdheXMgXHU5OEJEIDEyMy0yNDU2LTQKK2Fsd2F5cyBcdTk4QkUgMTUtMTQ2LTMKK2Fsd2F5cyBcdTk4QkYgMTIzNDUtMTIzNi0yCithbHdheXMgXHU5OEMwIDE0LTIzNC0yCithbHdheXMgXHU5OEMxIDE1LTE2LTIKK2Fsd2F5cyBcdTk4QzIgMTQtMjQ2LTIKK2Fsd2F5cyBcdTk4QzMgMTIzNC0yNDYtMworYWx3YXlzIFx1OThDNCAxMjM0LTI0Ni0zCithbHdheXMgXHU5OEM1IDE0LTIzNC0yCithbHdheXMgXHU5OEM2IDEzNS0yNDYtMworYWx3YXlzIFx1OThDNyAxMzUtMjQ2LTMKK2Fsd2F5cyBcdTk4QzggMTM1LTI0Ni0zCithbHdheXMgXHU5OEM5IDE0LTI0Ni0yCithbHdheXMgXHU5OENBIDEzNS0yNDYtMworYWx3YXlzIFx1OThDQiAxNS0yMzQ2LTUKK2Fsd2F5cyBcdTk4Q0MgMTIzNDUtMTM1Ni0zCithbHdheXMgXHU5OENEIDE1LTIzNC0zCithbHdheXMgXHU5OENFIDEyMzQ1LTEzNTYtMworYWx3YXlzIFx1OThDRiA0Ni0yCithbHdheXMgXHU5OEQwIDEtMTIzNi00CithbHdheXMgXHU5OEQxIDEzNS0yNDYtMworYWx3YXlzIFx1OThEMiAxNS0zNDUtNQorYWx3YXlzIFx1OThEMyAxMy0xMjU2LTUKK2Fsd2F5cyBcdTk4RDQgMTUtMTU2LTMKK2Fsd2F5cyBcdTk4RDUgMTUtMTIzNTYtMworYWx3YXlzIFx1OThENiAyNDYtMgorYWx3YXlzIFx1OThENyAxNC0yMzQtMgorYWx3YXlzIFx1OThEOCAxMjM0LTI0Ni0zCithbHdheXMgXHU5OEQ5IDEzNS0yNDYtMworYWx3YXlzIFx1OThEQSAxMzUtMjQ2LTMKK2Fsd2F5cyBcdTk4REIgMTIzNDUtMzU2LTMKK2Fsd2F5cyBcdTk4REMgMTIzNDUtMTIzNi0zCithbHdheXMgXHU5OEREIDEyMzQ1LTM1Ni0zCithbHdheXMgXHU5OERFIDEyMzQ1LTM1Ni0zCithbHdheXMgXHU5OERGIDI0LTE1Ni0yCithbHdheXMgXHU5OEUwIDI0LTE1Ni0yCithbHdheXMgXHU5OEUxIDI0NS0xMjM2LTMKK2Fsd2F5cyBcdTk4RTIgMTMtMTYtMworYWx3YXlzIFx1OThFMyAxNDUtMTM0NTYtNQorYWx3YXlzIFx1OThFNCAxNS0xNTYtNQorYWx3YXlzIFx1OThFNSAxMjQtMjUtMworYWx3YXlzIFx1OThFNiAxLTEyMzYtMworYWx3YXlzIFx1OThFNyAxNS0xMjM0NTYtMworYWx3YXlzIFx1OThFOCAxNS00Ni00CithbHdheXMgXHU5OEU5IDEyNC0xMjM0NTYtMgorYWx3YXlzIFx1OThFQSAxMjQ1LTEzNi01CithbHdheXMgXHU5OEVCIDEyNTYtNQorYWx3YXlzIFx1OThFQyAxMy00NS01CithbHdheXMgXHU5OEVEIDEyLTE1Ni01CithbHdheXMgXHU5OEVFIDE0NTYtNAorYWx3YXlzIFx1OThFRiAxMjM0NS0xMjM2LTUKK2Fsd2F5cyBcdTk4RjAgMTIzNDUtMTIzNi01CithbHdheXMgXHU5OEYxIDE1LTEyMzQ1Ni0zCithbHdheXMgXHU5OEYyIDE0NTYtNAorYWx3YXlzIFx1OThGMyAxLTM0LTUKK2Fsd2F5cyBcdTk4RjQgMTYtMgorYWx3YXlzIFx1OThGNSAxMjUtMjUtNQorYWx3YXlzIFx1OThGNiAxMzUtMTYtNQorYWx3YXlzIFx1OThGNyAxMy0zNDYtNAorYWx3YXlzIFx1OThGOCAxMjQtMTQ2LTMKK2Fsd2F5cyBcdTk4RjkgMTQtMjM0LTQKK2Fsd2F5cyBcdTk4RkEgMjQ1LTE1Ni0yCithbHdheXMgXHU5OEZCIDEyNC0zNDYtNQorYWx3YXlzIFx1OThGQyAxNS0xNTYtNQorYWx3YXlzIFx1OThGRCAxMzUtMTQ2LTQKK2Fsd2F5cyBcdTk4RkUgMjQtMTU2LTUKK2Fsd2F5cyBcdTk4RkYgMTQ1LTI1LTUKK2Fsd2F5cyBcdTk5MDAgMTIzNS0yNDU2LTUKK2Fsd2F5cyBcdTk5MDEgMTI0NS0xMzYtNQorYWx3YXlzIFx1OTkwMiAxMjQtMjM0NS00CithbHdheXMgXHU5OTAzIDEzLTI0Ni00CithbHdheXMgXHU5OTA0IDEzLTIzNDU2LTIKK2Fsd2F5cyBcdTk5MDUgMTM1LTEzNDU2LTQKK2Fsd2F5cyBcdTk5MDYgMjQ2LTIKK2Fsd2F5cyBcdTk5MDcgMTI0LTEyMzQ2LTIKK2Fsd2F5cyBcdTk5MDggMjQ1LTE1Ni0yCithbHdheXMgXHU5OTA5IDE1LTQ2LTQKK2Fsd2F5cyBcdTk5MEEgNDYtNAorYWx3YXlzIFx1OTkwQiA0Ni00CithbHdheXMgXHU5OTBDIDE1Ni00CithbHdheXMgXHU5OTBEIDIzNDUtNQorYWx3YXlzIFx1OTkwRSAxNC0yMzQ2LTUKK2Fsd2F5cyBcdTk5MEYgMTUtMTYtMworYWx3YXlzIFx1OTkxMCAyNDUtMTIzNi0zCithbHdheXMgXHU5OTExIDEzNS0xMjYtMworYWx3YXlzIFx1OTkxMiAxMzQ1LTM1Ni00CithbHdheXMgXHU5OTEzIDIzNDYtNQorYWx3YXlzIFx1OTkxNCAxMzUtMzQtMworYWx3YXlzIFx1OTkxNSAxMy0yNTYtNQorYWx3YXlzIFx1OTkxNiAxNDUtMTIzNTYtNQorYWx3YXlzIFx1OTkxNyAxNS0zNC01CithbHdheXMgXHU5OTE4IDEyNTYtMgorYWx3YXlzIFx1OTkxOSAyNC0xNTYtNQorYWx3YXlzIFx1OTkxQSAyNDYtMgorYWx3YXlzIFx1OTkxQiAxMjM1LTEyMzQ1Ni0yCithbHdheXMgXHU5OTFDIDEzLTI1LTQKK2Fsd2F5cyBcdTk5MUQgMjQtMTU2LTUKK2Fsd2F5cyBcdTk5MUUgMTMtMjM0NS01CithbHdheXMgXHU5OTFGIDEtMTI0Ni01CithbHdheXMgXHU5OTIwIDEzNS0xMzQ1Ni00CithbHdheXMgXHU5OTIxIDE1LTIzNDUtNQorYWx3YXlzIFx1OTkyMiAxMzUtMzQtNQorYWx3YXlzIFx1OTkyMyAzNDYtNQorYWx3YXlzIFx1OTkyNCAxMjQtMTIzNi0yCithbHdheXMgXHU5OTI1IDEyMzQ1LTM1Ni0zCithbHdheXMgXHU5OTI2IDEtMTM0Ni0zCithbHdheXMgXHU5OTI3IDEyNDYtNQorYWx3YXlzIFx1OTkyOCAxMy0xMjQ1Ni00CithbHdheXMgXHU5OTI5IDIzNDYtNQorYWx3YXlzIFx1OTkyQSAxMzQ1LTEyNDU2LTQKK2Fsd2F5cyBcdTk5MkIgMjU2LTUKK2Fsd2F5cyBcdTk5MkMgMTIzNS0zNC0yCithbHdheXMgXHU5OTJEIDEyMzUtNDU2LTIKK2Fsd2F5cyBcdTk5MkUgMTI0LTM0Ni01CithbHdheXMgXHU5OTJGIDEyMzUtMTI0Ni01CithbHdheXMgXHU5OTMwIDEzLTIzNDUtMworYWx3YXlzIFx1OTkzMSAxMjM1LTEyMzU2LTIKK2Fsd2F5cyBcdTk5MzIgMjQ1Ni01CithbHdheXMgXHU5OTMzIDE1LTEzNDU2LTIKK2Fsd2F5cyBcdTk5MzQgMTIzNDUtMTM2LTMKK2Fsd2F5cyBcdTk5MzUgMTI0Ni01CithbHdheXMgXHU5OTM2IDEzLTM0LTQKK2Fsd2F5cyBcdTk5MzcgMTItMzQ1LTMKK2Fsd2F5cyBcdTk5MzggMTUtMTIzNDYtNQorYWx3YXlzIFx1OTkzOSAxMjQtMTM0Ni0yCithbHdheXMgXHU5OTNBIDEzNS0xMjYtMgorYWx3YXlzIFx1OTkzQiAxMy0xNDYtMworYWx3YXlzIFx1OTkzQyAxNS0xNi01CithbHdheXMgXHU5OTNEIDEyMy0xMjQ2LTUKK2Fsd2F5cyBcdTk5M0UgMTQtMjM0LTIKK2Fsd2F5cyBcdTk5M0YgMTUtMTIzNTYtMworYWx3YXlzIFx1OTk0MCAxMjQtMTQ2LTIKK2Fsd2F5cyBcdTk5NDEgMzQ2LTUKK2Fsd2F5cyBcdTk5NDIgMTIzNDU2LTMKK2Fsd2F5cyBcdTk5NDMgMTM0LTEyNi0yCithbHdheXMgXHU5OTQ0IDEyNC0xMzQ2LTIKK2Fsd2F5cyBcdTk5NDUgMTM0LTEyMzYtMgorYWx3YXlzIFx1OTk0NiAxMzUtMTYtNQorYWx3YXlzIFx1OTk0NyAxMjU2LTUKK2Fsd2F5cyBcdTk5NDggMTUtMjM0LTMKK2Fsd2F5cyBcdTk5NDkgMTMtMTQ1Ni00CithbHdheXMgXHU5OTRBIDE1LTEyMzYtNAorYWx3YXlzIFx1OTk0QiAxMjMtMTI0Ni01CithbHdheXMgXHU5OTRDIDEtMTI0NTYtNQorYWx3YXlzIFx1OTk0RCAyNC0xMjM2LTUKK2Fsd2F5cyBcdTk5NEUgMTItMTU2LTUKK2Fsd2F5cyBcdTk5NEYgMTQ1LTEyMzYtNQorYWx3YXlzIFx1OTk1MCAxNi01CithbHdheXMgXHU5OTUxIDEzLTE2LTMKK2Fsd2F5cyBcdTk5NTIgMTI0NS0xNDYtMgorYWx3YXlzIFx1OTk1MyAxMi0xMzU2LTMKK2Fsd2F5cyBcdTk5NTQgMjM1LTMKK2Fsd2F5cyBcdTk5NTUgMTI0LTE0Ni0zCithbHdheXMgXHU5OTU2IDEyMzUtMTI0Ni01CithbHdheXMgXHU5OTU3IDE1LTQ2LTQKK2Fsd2F5cyBcdTk5NTggMS0xMjM2LTMKK2Fsd2F5cyBcdTk5NTkgMTIzNDUtMTM2LTMKK2Fsd2F5cyBcdTk5NUEgMTIzNS0yNDU2LTUKK2Fsd2F5cyBcdTk5NUIgMTM0LTEzNTYtMgorYWx3YXlzIFx1OTk1QyAyMzQ1LTUKK2Fsd2F5cyBcdTk5NUQgMTM0LTEyNi0yCithbHdheXMgXHU5OTVFIDEyLTEyMzYtMgorYWx3YXlzIFx1OTk1RiAxNS00Ni00CithbHdheXMgXHU5OTYwIDE0LTI1LTIKK2Fsd2F5cyBcdTk5NjEgMTI1LTEyMzYtNQorYWx3YXlzIFx1OTk2MiAxMzQ1LTEzNDYtMgorYWx3YXlzIFx1OTk2MyAyNC0xNTYtMgorYWx3YXlzIFx1OTk2NCAxNDUtMTM0NTYtNQorYWx3YXlzIFx1OTk2NSAxMy0xNi0zCithbHdheXMgXHU5OTY2IDEyNC0yNS0zCithbHdheXMgXHU5OTY3IDE1LTEzNDU2LTIKK2Fsd2F5cyBcdTk5NjggMTI0LTEyMzQ1Ni0yCithbHdheXMgXHU5OTY5IDE1LTE2LTUKK2Fsd2F5cyBcdTk5NkEgMTI0NS0xMzYtNQorYWx3YXlzIFx1OTk2QiAxMjU2LTUKK2Fsd2F5cyBcdTk5NkMgMTItMTU2LTUKK2Fsd2F5cyBcdTk5NkQgMTIzNDUtMTIzNi01CithbHdheXMgXHU5OTZFIDE0NTYtNAorYWx3YXlzIFx1OTk2RiAxMy0yMzQ1LTUKK2Fsd2F5cyBcdTk5NzAgMjQtMTU2LTUKK2Fsd2F5cyBcdTk5NzEgMTM1LTE0Ni00CithbHdheXMgXHU5OTcyIDE1LTE1Ni01CithbHdheXMgXHU5OTczIDE0NS0yNS01CithbHdheXMgXHU5OTc0IDE2LTIKK2Fsd2F5cyBcdTk5NzUgMTU2LTQKK2Fsd2F5cyBcdTk5NzYgMTI0NS0xNDYtMgorYWx3YXlzIFx1OTk3NyAxNS00Ni00CithbHdheXMgXHU5OTc4IDEzLTIzNDU2LTIKK2Fsd2F5cyBcdTk5NzkgMTQtMjM0Ni01CithbHdheXMgXHU5OTdBIDEzLTI0Ni00CithbHdheXMgXHU5OTdCIDE1LTE2LTMKK2Fsd2F5cyBcdTk5N0MgMTM1LTEzNDU2LTQKK2Fsd2F5cyBcdTk5N0QgMTM1LTEyNi0zCithbHdheXMgXHU5OTdFIDE0NS0xMjM1Ni01CithbHdheXMgXHU5OTdGIDIzNDYtNQorYWx3YXlzIFx1OTk4MCAxMjU2LTIKK2Fsd2F5cyBcdTk5ODEgMTM0NS0zNTYtNAorYWx3YXlzIFx1OTk4MiAxMy0yNTYtNQorYWx3YXlzIFx1OTk4MyAxMy0yNS00CithbHdheXMgXHU5OTg0IDEyMzUtMTIzNDU2LTIKK2Fsd2F5cyBcdTk5ODUgMTUtMjM0NS01CithbHdheXMgXHU5OTg2IDEzLTEyNDU2LTQKK2Fsd2F5cyBcdTk5ODcgMTItMzQ1LTMKK2Fsd2F5cyBcdTk5ODggMTIzLTEyNDYtNQorYWx3YXlzIFx1OTk4OSAxMy0zNC00CithbHdheXMgXHU5OThBIDE1LTEyMzU2LTMKK2Fsd2F5cyBcdTk5OEIgMTItMTIzNi0yCithbHdheXMgXHU5OThDIDM0Ni01CithbHdheXMgXHU5OThEIDEzNC0xMjYtMgorYWx3YXlzIFx1OTk4RSAxMzUtMTI2LTIKK2Fsd2F5cyBcdTk5OEYgMTQtMjM0LTIKK2Fsd2F5cyBcdTk5OTAgMTUtMjM0LTMKK2Fsd2F5cyBcdTk5OTEgMTMtMTQ1Ni00CithbHdheXMgXHU5OTkyIDEzNC0xMjM2LTIKK2Fsd2F5cyBcdTk5OTMgMTUtMTIzNi00CithbHdheXMgXHU5OTk0IDEtMTI0NTYtNQorYWx3YXlzIFx1OTk5NSAxMzQ1LTEzNDYtMgorYWx3YXlzIFx1OTk5NiAyNC0xMjM1Ni00CithbHdheXMgXHU5OTk3IDEyMy0xMjQ2LTIKK2Fsd2F5cyBcdTk5OTggMTMtMjUtMgorYWx3YXlzIFx1OTk5OSAxNS00Ni0zCithbHdheXMgXHU5OTlBIDEyMzQ1LTEzNi0yCithbHdheXMgXHU5OTlCIDEzNS0zNDUtMgorYWx3YXlzIFx1OTk5QyAxMzQ1LTE2LTQKK2Fsd2F5cyBcdTk5OUQgMTM1LTE2LTUKK2Fsd2F5cyBcdTk5OUUgMTM1LTEyNi0yCithbHdheXMgXHU5OTlGIDEyNC0zNC0yCithbHdheXMgXHU5OUEwIDEyMzUtMTIzNi0zCithbHdheXMgXHU5OUExIDEyMzQ1LTM1Ni0zCithbHdheXMgXHU5OUEyIDEzLTIzNDUtMworYWx3YXlzIFx1OTlBMyAxMjM2LTMKK2Fsd2F5cyBcdTk5QTQgMjQ1Ni00CithbHdheXMgXHU5OUE1IDEyMzQ1LTM0LTUKK2Fsd2F5cyBcdTk5QTYgMTUtMjM0NS0zCithbHdheXMgXHU5OUE3IDEyMzQ1Ni0zCithbHdheXMgXHU5OUE4IDE1LTE0NTYtMworYWx3YXlzIFx1OTlBOSAxMjM0NS0xMzYtMgorYWx3YXlzIFx1OTlBQSAxMzUtMTQ1Ni0zCithbHdheXMgXHU5OUFCIDE1LTEzNDU2LTMKK2Fsd2F5cyBcdTk5QUMgMTM0LTM0NS00CithbHdheXMgXHU5OUFEIDEyNTYtNQorYWx3YXlzIFx1OTlBRSAxMjM0NS0xMzU2LTIKK2Fsd2F5cyBcdTk5QUYgMTIzNS0xMjM2LTUKK2Fsd2F5cyBcdTk5QjAgMTQ1LTE2LTUKK2Fsd2F5cyBcdTk5QjEgMTI0LTI1LTIKK2Fsd2F5cyBcdTk5QjIgMS0yMzQ2LTIKK2Fsd2F5cyBcdTk5QjMgMTItMTU2LTIKK2Fsd2F5cyBcdTk5QjQgMTUtMjU2LTIKK2Fsd2F5cyBcdTk5QjUgMS0zNC01CithbHdheXMgXHU5OUI2IDEtMTU2LTMKK2Fsd2F5cyBcdTk5QjcgMTIzNC0zNTYtNQorYWx3YXlzIFx1OTlCOCAxNS0xNDU2LTUKK2Fsd2F5cyBcdTk5QjkgMTI0NS0xNTYtNQorYWx3YXlzIFx1OTlCQSAxNS0zNDUtNQorYWx3YXlzIFx1OTlCQiAyNTYtNAorYWx3YXlzIFx1OTlCQyAxMjM0NTYtMgorYWx3YXlzIFx1OTlCRCAxLTE1Ni0yCithbHdheXMgXHU5OUJFIDE0NS0xMjM2LTUKK2Fsd2F5cyBcdTk5QkYgMTQtMTI1Ni0yCithbHdheXMgXHU5OUMwIDIzNC0yCithbHdheXMgXHU5OUMxIDEzNS0xMjYtMgorYWx3YXlzIFx1OTlDMiAxMzUtMTQ2LTQKK2Fsd2F5cyBcdTk5QzMgMTIzLTIzNTYtNQorYWx3YXlzIFx1OTlDNCAxMjQtMjUtMgorYWx3YXlzIFx1OTlDNSAxNi01CithbHdheXMgXHU5OUM2IDI0NS0xMjU2LTMKK2Fsd2F5cyBcdTk5QzcgMTIzNDU2LTIKK2Fsd2F5cyBcdTk5QzggMjQ1LTEyNTYtMworYWx3YXlzIFx1OTlDOSAxMy0yMzUtMworYWx3YXlzIFx1OTlDQSAxMzUtMTI2LTQKK2Fsd2F5cyBcdTk5Q0IgMS0xNDYtMworYWx3YXlzIFx1OTlDQyA0NS0zCithbHdheXMgXHU5OUNEIDEyMzQtMTM1Ni0zCithbHdheXMgXHU5OUNFIDEtMTIzNTYtNQorYWx3YXlzIFx1OTlDRiAxMy0xMjU2LTUKK2Fsd2F5cyBcdTk5RDAgMS0zNC01CithbHdheXMgXHU5OUQxIDEzNDUtMzQtMgorYWx3YXlzIFx1OTlEMiAxMy0xMjU2LTMKK2Fsd2F5cyBcdTk5RDMgMTIzNC0xNi0zCithbHdheXMgXHU5OUQ0IDEyNS0xMzQ2LTQKK2Fsd2F5cyBcdTk5RDUgMTMtMjM0NTYtNQorYWx3YXlzIFx1OTlENiAxNC0xMzQ1Ni0yCithbHdheXMgXHU5OUQ3IDEtMTM2LTQKK2Fsd2F5cyBcdTk5RDggMTI0LTI0NTYtMgorYWx3YXlzIFx1OTlEOSAxMjM0NS0zNC01CithbHdheXMgXHU5OURBIDQ2LTQKK2Fsd2F5cyBcdTk5REIgMjQtMTU2LTQKK2Fsd2F5cyBcdTk5REMgMTM1LTE2LTUKK2Fsd2F5cyBcdTk5REQgMTI0LTI1LTIKK2Fsd2F5cyBcdTk5REUgMTI0LTI1LTIKK2Fsd2F5cyBcdTk5REYgMTUtMTU2LTUKK2Fsd2F5cyBcdTk5RTAgMTQtMjM0LTIKK2Fsd2F5cyBcdTk5RTEgMTM0LTM0NS01CithbHdheXMgXHU5OUUyIDEyMzQtMjM0NS0yCithbHdheXMgXHU5OUUzIDEyNC0xNDYtMgorYWx3YXlzIFx1OTlFNCAxLTE1Ni01CithbHdheXMgXHU5OUU1IDEyNDUtMTIzNDYtMgorYWx3YXlzIFx1OTlFNiAxMjQtMTM1Ni0yCithbHdheXMgXHU5OUU3IDE0NS0xMjM0Ni01CithbHdheXMgXHU5OUU4IDE1LTI1Ni0yCithbHdheXMgXHU5OUU5IDI0NS00NS0yCithbHdheXMgXHU5OUVBIDI0LTEzNi0zCithbHdheXMgXHU5OUVCIDEzLTIzNS0zCithbHdheXMgXHU5OUVDIDE1Ni00CithbHdheXMgXHU5OUVEIDEyMzUtMjQ1Ni01CithbHdheXMgXHU5OUVFIDEzNS0xMjYtMgorYWx3YXlzIFx1OTlFRiAxLTM0LTMKK2Fsd2F5cyBcdTk5RjAgMTQ1Ni0zCithbHdheXMgXHU5OUYxIDE0LTI1LTUKK2Fsd2F5cyBcdTk5RjIgMS0xMjM1Ni0zCithbHdheXMgXHU5OUYzIDE0NS0xMjM2LTUKK2Fsd2F5cyBcdTk5RjQgMTUtMzQ2LTUKK2Fsd2F5cyBcdTk5RjUgMTQtMjM0LTIKK2Fsd2F5cyBcdTk5RjYgMTMtMTI1Ni0yCithbHdheXMgXHU5OUY3IDE1LTEyMzQ2LTQKK2Fsd2F5cyBcdTk5RjggMjQ1LTE0NTYtMworYWx3YXlzIFx1OTlGOSAxMzQtMTM0Ni0yCithbHdheXMgXHU5OUZBIDE0LTQ2LTIKK2Fsd2F5cyBcdTk5RkIgMTIzNS0xMjM2LTUKK2Fsd2F5cyBcdTk5RkMgMTI0LTM0LTIKK2Fsd2F5cyBcdTk5RkQgMTUtNDUtMworYWx3YXlzIFx1OTlGRSAxMjQtMTI0Ni01CithbHdheXMgXHU5OUZGIDEzLTI1Ni01CithbHdheXMgXHU5QTAwIDIzNDYtMgorYWx3YXlzIFx1OUEwMSAxMi0xMzU2LTQKK2Fsd2F5cyBcdTlBMDIgMTUtMTM0NTYtMworYWx3YXlzIFx1OUEwMyAyNDU2LTIKK2Fsd2F5cyBcdTlBMDQgMTQtMzQtNQorYWx3YXlzIFx1OUEwNSAxLTEyNDYtMworYWx3YXlzIFx1OUEwNiAxLTEyMzU2LTMKK2Fsd2F5cyBcdTlBMDcgMjQtMjM0Ni01CithbHdheXMgXHU5QTA4IDEyMzQtMjM0NS0yCithbHdheXMgXHU5QTA5IDEyMy0xMjM0NTYtMworYWx3YXlzIFx1OUEwQSAxMjQtMTQ2LTIKK2Fsd2F5cyBcdTlBMEIgMTQtMjQ1Ni0yCithbHdheXMgXHU5QTBDIDEyNS0xMjM0Ni0zCithbHdheXMgXHU5QTBEIDEyMy0yMzQ2LTUKK2Fsd2F5cyBcdTlBMEUgMjQ1LTE2LTIKK2Fsd2F5cyBcdTlBMEYgMjQ1LTE2LTIKK2Fsd2F5cyBcdTlBMTAgMjM0NS01CithbHdheXMgXHU5QTExIDEyMzQ1LTM1Ni0zCithbHdheXMgXHU5QTEyIDE1LTE0Ni0zCithbHdheXMgXHU5QTEzIDIzNDUtNAorYWx3YXlzIFx1OUExNCAxMy0zNDYtMgorYWx3YXlzIFx1OUExNSAyNDYtNAorYWx3YXlzIFx1OUExNiAzNC01CithbHdheXMgXHU5QTE3IDEyMzQtMjM0NS01CithbHdheXMgXHU5QTE4IDI0NS0xMjM0Ni0zCithbHdheXMgXHU5QTE5IDEyMzQtMjM0NS01CithbHdheXMgXHU5QTFBIDI0NS0yMzQ1LTIKK2Fsd2F5cyBcdTlBMUIgMTIzNDUtMzU2LTMKK2Fsd2F5cyBcdTlBMUMgMTIzNS00NTYtMgorYWx3YXlzIFx1OUExRCAxMy0yMzQ1LTMKK2Fsd2F5cyBcdTlBMUUgMTIzNS0yNS01CithbHdheXMgXHU5QTFGIDEyNTYtNQorYWx3YXlzIFx1OUEyMCAxMjQtMTYtMgorYWx3YXlzIFx1OUEyMSAyNDUtNDUtMgorYWx3YXlzIFx1OUEyMiAxNS0yMzQ1Ni0yCithbHdheXMgXHU5QTIzIDEyNS0xMjM0Ni0zCithbHdheXMgXHU5QTI0IDEyMy0xMjQ2LTIKK2Fsd2F5cyBcdTlBMjUgMTI0NS0xMjM1Ni0yCithbHdheXMgXHU5QTI2IDE1LTE1Ni0zCithbHdheXMgXHU5QTI3IDEzLTM1LTMKK2Fsd2F5cyBcdTlBMjggMTI0LTI1LTIKK2Fsd2F5cyBcdTlBMjkgMTIzLTEyNDYtNQorYWx3YXlzIFx1OUEyQSAxNS0xMjM1Ni0zCithbHdheXMgXHU5QTJCIDI0NS0yMzQ1LTMKK2Fsd2F5cyBcdTlBMkMgMTItMTM1Ni0yCithbHdheXMgXHU5QTJEIDEtMTU2LTUKK2Fsd2F5cyBcdTlBMkUgMTQtMjM0LTIKK2Fsd2F5cyBcdTlBMkYgMTIzNC0xMzU2LTIKK2Fsd2F5cyBcdTlBMzAgMTI0LTEzNTYtMgorYWx3YXlzIFx1OUEzMSAxNS0xNi0zCithbHdheXMgXHU5QTMyIDI0NS0xNDYtNAorYWx3YXlzIFx1OUEzMyAxNDUtMzQtMgorYWx3YXlzIFx1OUEzNCAyMzQ1LTUKK2Fsd2F5cyBcdTlBMzUgNDUtMgorYWx3YXlzIFx1OUEzNiAxMjUtMTIzNTYtMworYWx3YXlzIFx1OUEzNyAxNS0xNDYtMworYWx3YXlzIFx1OUEzOCAyNC0xMjM2LTUKK2Fsd2F5cyBcdTlBMzkgMjQ1LTE2LTIKK2Fsd2F5cyBcdTlBM0EgMS0xNTYtNQorYWx3YXlzIFx1OUEzQiAyNC00NTYtNAorYWx3YXlzIFx1OUEzQyAxNC0zNC01CithbHdheXMgXHU5QTNEIDE1LTE2LTIKK2Fsd2F5cyBcdTlBM0UgMTQtMjUtMgorYWx3YXlzIFx1OUEzRiAxLTEzNDYtMworYWx3YXlzIFx1OUE0MCAxMzQtMTI2LTUKK2Fsd2F5cyBcdTlBNDEgMTQ2LTUKK2Fsd2F5cyBcdTlBNDIgMjQ1LTEyMzYtMworYWx3YXlzIFx1OUE0MyAxMjM0LTI0Ni01CithbHdheXMgXHU5QTQ0IDI0NS0xMjM0Ni0zCithbHdheXMgXHU5QTQ1IDI0NS0xMjU2LTMKK2Fsd2F5cyBcdTlBNDYgMTM1LTE2LTUKK2Fsd2F5cyBcdTlBNDcgMS0xNTYtNQorYWx3YXlzIFx1OUE0OCAxMjU2LTUKK2Fsd2F5cyBcdTlBNDkgMTUtMTI1Ni0zCithbHdheXMgXHU5QTRBIDEyMzUtMzUtMgorYWx3YXlzIFx1OUE0QiAxMzUtMTI2LTMKK2Fsd2F5cyBcdTlBNEMgMTUtMzQtNQorYWx3YXlzIFx1OUE0RCAxNS0yNDYtMworYWx3YXlzIFx1OUE0RSAxNC0xNDU2LTIKK2Fsd2F5cyBcdTlBNEYgMTItMTIzNi00CithbHdheXMgXHU5QTUwIDE0NS0xMjM0NTYtMworYWx3YXlzIFx1OUE1MSAxNC0yMzQtMgorYWx3YXlzIFx1OUE1MiAxMjQtMjUtMgorYWx3YXlzIFx1OUE1MyAxMjUtMTM1Ni0zCithbHdheXMgXHU5QTU0IDEyNC0xMjM2LTIKK2Fsd2F5cyBcdTlBNTUgMTMtMjQ2LTMKK2Fsd2F5cyBcdTlBNTYgMTI0LTM0Ni00CithbHdheXMgXHU5QTU3IDIzNDUtNQorYWx3YXlzIFx1OUE1OCAxNC0yNS0yCithbHdheXMgXHU5QTU5IDEtMTIzNi0zCithbHdheXMgXHU5QTVBIDEzLTEzNDU2LTMKK2Fsd2F5cyBcdTlBNUIgMTYtNQorYWx3YXlzIFx1OUE1QyAzNDYtNQorYWx3YXlzIFx1OUE1RCAxMjQtMjUtMworYWx3YXlzIFx1OUE1RSAxMzUtMTQ1Ni0zCithbHdheXMgXHU5QTVGIDEyNS0xMjM1Ni01CithbHdheXMgXHU5QTYwIDIzNDUtNQorYWx3YXlzIFx1OUE2MSAxMjM0LTEzNTYtMgorYWx3YXlzIFx1OUE2MiAxNC0xMjU2LTIKK2Fsd2F5cyBcdTlBNjMgMTI0LTEzNTYtMgorYWx3YXlzIFx1OUE2NCAxNS00Ni0zCithbHdheXMgXHU5QTY1IDEzLTE2LTUKK2Fsd2F5cyBcdTlBNjYgMjQtNDU2LTMKK2Fsd2F5cyBcdTlBNjcgMTMtMTI1Ni0yCithbHdheXMgXHU5QTY4IDE1LTE2LTMKK2Fsd2F5cyBcdTlBNjkgMTIzNS0xMjQ1Ni0zCithbHdheXMgXHU5QTZBIDE0LTE2LTIKK2Fsd2F5cyBcdTlBNkIgMTM1LTI0Ni0zCithbHdheXMgXHU5QTZDIDEzNC0zNDUtNAorYWx3YXlzIFx1OUE2RCAxMjU2LTUKK2Fsd2F5cyBcdTlBNkUgMTI0LTI1LTIKK2Fsd2F5cyBcdTlBNkYgMTUtMjU2LTUKK2Fsd2F5cyBcdTlBNzAgMTItMTU2LTIKK2Fsd2F5cyBcdTlBNzEgMjQ1LTEyNTYtMworYWx3YXlzIFx1OUE3MiAxMjQ1LTE1Ni01CithbHdheXMgXHU5QTczIDEzNS0xMjYtMgorYWx3YXlzIFx1OUE3NCAxNC0xMjU2LTIKK2Fsd2F5cyBcdTlBNzUgMTI1LTEzNDYtNAorYWx3YXlzIFx1OUE3NiAyNC0xNTYtNAorYWx3YXlzIFx1OUE3NyAxNS0xNTYtNQorYWx3YXlzIFx1OUE3OCAxMjM0NS0zNC01CithbHdheXMgXHU5QTc5IDEzLTEyNTYtMworYWx3YXlzIFx1OUE3QSAxMjUtMTIzNTYtMworYWx3YXlzIFx1OUE3QiAxLTM0LTUKK2Fsd2F5cyBcdTlBN0MgMTI0LTI1LTIKK2Fsd2F5cyBcdTlBN0QgMTM0NS0zNC0yCithbHdheXMgXHU5QTdFIDEzLTIzNDU2LTUKK2Fsd2F5cyBcdTlBN0YgMTYtNQorYWx3YXlzIFx1OUE4MCAxMjQtMjQ1Ni0yCithbHdheXMgXHU5QTgxIDE1LTI0Ni0zCithbHdheXMgXHU5QTgyIDEzNC0zNDUtNQorYWx3YXlzIFx1OUE4MyAxNDU2LTMKK2Fsd2F5cyBcdTlBODQgMTMtMjQ2LTMKK2Fsd2F5cyBcdTlBODUgMTIzNS0zNS0yCithbHdheXMgXHU5QTg2IDE0LTI1LTUKK2Fsd2F5cyBcdTlBODcgMTIzNS0yNDU2LTUKK2Fsd2F5cyBcdTlBODggMTIzNC0yMzQ1LTIKK2Fsd2F5cyBcdTlBODkgMTM1LTI0Ni0zCithbHdheXMgXHU5QThBIDE0LTE2LTIKK2Fsd2F5cyBcdTlBOEIgMTItMTM1Ni00CithbHdheXMgXHU5QThDIDIzNDUtNQorYWx3YXlzIFx1OUE4RCAxNS0xMzQ1Ni0zCithbHdheXMgXHU5QThFIDI0NS0xNDU2LTMKK2Fsd2F5cyBcdTlBOEYgMTMtMjU2LTUKK2Fsd2F5cyBcdTlBOTAgMjQ1LTE2LTIKK2Fsd2F5cyBcdTlBOTEgMjQ1LTE2LTIKK2Fsd2F5cyBcdTlBOTIgMTIzLTIzNDYtNQorYWx3YXlzIFx1OUE5MyAxLTEyNDYtMworYWx3YXlzIFx1OUE5NCAxMjUtMTIzNDYtMworYWx3YXlzIFx1OUE5NSAxNS0zNC01CithbHdheXMgXHU5QTk2IDI0NS0xMjM2LTMKK2Fsd2F5cyBcdTlBOTcgMTIzNC0yMzQ1LTUKK2Fsd2F5cyBcdTlBOTggMS0xNTYtNQorYWx3YXlzIFx1OUE5OSAxMjMtMTI0Ni0yCithbHdheXMgXHU5QTlBIDE1LTE0Ni0zCithbHdheXMgXHU5QTlCIDM0LTUKK2Fsd2F5cyBcdTlBOUMgMTQ2LTUKK2Fsd2F5cyBcdTlBOUQgMTQtMjM0LTIKK2Fsd2F5cyBcdTlBOUUgMjQ1LTIzNDUtMworYWx3YXlzIFx1OUE5RiAyNC0xMjM2LTUKK2Fsd2F5cyBcdTlBQTAgMTIzNC0yNDYtNQorYWx3YXlzIFx1OUFBMSAxNC0yNS0yCithbHdheXMgXHU5QUEyIDI0NS0xMjM0Ni0zCithbHdheXMgXHU5QUEzIDEyLTEyMzYtNAorYWx3YXlzIFx1OUFBNCAxMjUtMTIzNTYtNQorYWx3YXlzIFx1OUFBNSAxMy0xNi01CithbHdheXMgXHU5QUE2IDI0LTQ1Ni0zCithbHdheXMgXHU5QUE3IDE1LTQ2LTMKK2Fsd2F5cyBcdTlBQTggMTMtMzQtNAorYWx3YXlzIFx1OUFBOSAxMjQ2LTQKK2Fsd2F5cyBcdTlBQUEgMTI0Ni00CithbHdheXMgXHU5QUFCIDEyNDYtNAorYWx3YXlzIFx1OUFBQyAxMjU2LTIKK2Fsd2F5cyBcdTlBQUQgMTMtMTIzNi01CithbHdheXMgXHU5QUFFIDE2LTUKK2Fsd2F5cyBcdTlBQUYgMTM0Ni0zCithbHdheXMgXHU5QUIwIDI0LTI0NTYtNAorYWx3YXlzIFx1OUFCMSAxNS0zNDYtNQorYWx3YXlzIFx1OUFCMiAxMzUtMTQ2LTMKK2Fsd2F5cyBcdTlBQjMgMTM1LTE2LTUKK2Fsd2F5cyBcdTlBQjQgMTItMTU2LTMKK2Fsd2F5cyBcdTlBQjUgMTI0LTE2LTQKK2Fsd2F5cyBcdTlBQjYgMTQ1LTE2LTUKK2Fsd2F5cyBcdTlBQjcgMTIzLTM0LTMKK2Fsd2F5cyBcdTlBQjggMTIzNS0yNDU2LTIKK2Fsd2F5cyBcdTlBQjkgMjQ1LTI0Ni0zCithbHdheXMgXHU5QUJBIDEyMzUtMTIzNTYtMgorYWx3YXlzIFx1OUFCQiAxMjMtMzUtNQorYWx3YXlzIFx1OUFCQyAxMy0yMzQ2LTIKK2Fsd2F5cyBcdTlBQkQgMTI0LTEyNDYtNAorYWx3YXlzIFx1OUFCRSAxMy0xMzU2LTQKK2Fsd2F5cyBcdTlBQkYgMTIzNC0yMzQ1LTIKK2Fsd2F5cyBcdTlBQzAgMTM1LTE2LTUKK2Fsd2F5cyBcdTlBQzEgMTIzLTIzNDYtMworYWx3YXlzIFx1OUFDMiAxMjMtMzQ1LTUKK2Fsd2F5cyBcdTlBQzMgMTI1Ni0yCithbHdheXMgXHU5QUM0IDE1LTEyNDYtNAorYWx3YXlzIFx1OUFDNSAxNC0xMjM1Ni0yCithbHdheXMgXHU5QUM2IDEzNS0xMjYtMgorYWx3YXlzIFx1OUFDNyAxNS0yNDYtMworYWx3YXlzIFx1OUFDOCAxMzUtMTM0Ni00CithbHdheXMgXHU5QUM5IDEzNS0xMjYtMworYWx3YXlzIFx1OUFDQSAyNDUtMTU2LTMKK2Fsd2F5cyBcdTlBQ0IgMTIzLTEyNDU2LTMKK2Fsd2F5cyBcdTlBQ0MgMTM1LTE0NTYtNQorYWx3YXlzIFx1OUFDRCAxMzQtMTI2LTIKK2Fsd2F5cyBcdTlBQ0UgMTQtMjQ2LTIKK2Fsd2F5cyBcdTlBQ0YgMTQtMTIzNTYtMgorYWx3YXlzIFx1OUFEMCAxNS0yNDYtMworYWx3YXlzIFx1OUFEMSAxNDUtMzQtMgorYWx3YXlzIFx1OUFEMiAxMjUtMTM0Ni0zCithbHdheXMgXHU5QUQzIDE1LTEyNDYtNAorYWx3YXlzIFx1OUFENCAxMjQtMTYtNAorYWx3YXlzIFx1OUFENSAxMzUtMTQ1Ni01CithbHdheXMgXHU5QUQ2IDEyMy0xMjQ1Ni0zCithbHdheXMgXHU5QUQ3IDE0LTM0LTIKK2Fsd2F5cyBcdTlBRDggMTMtMTQ2LTMKK2Fsd2F5cyBcdTlBRDkgMTMtMTQ2LTMKK2Fsd2F5cyBcdTlBREEgMjQ1LTI0Ni01CithbHdheXMgXHU5QURCIDEyMy0xNDYtMworYWx3YXlzIFx1OUFEQyAyNDUtMjQ2LTMKK2Fsd2F5cyBcdTlBREQgMTQtMTQ2LTUKK2Fsd2F5cyBcdTlBREUgMTI1LTE0Ni01CithbHdheXMgXHU5QURGIDEzNS0yNDYtMworYWx3YXlzIFx1OUFFMCAxMjMtMTIzNDU2LTMKK2Fsd2F5cyBcdTlBRTEgMTIzLTEyMzQ1Ni0zCithbHdheXMgXHU5QUUyIDEyNC0xNi01CithbHdheXMgXHU5QUUzIDEyMzQ1LTEzNDYtNAorYWx3YXlzIFx1OUFFNCAxNS0yMzQtMworYWx3YXlzIFx1OUFFNSAxMjQ1LTEyMzYtMgorYWx3YXlzIFx1OUFFNiAxMzQtMTQ2LTIKK2Fsd2F5cyBcdTlBRTcgMTQ1LTEyMzYtNQorYWx3YXlzIFx1OUFFOCAxMjMtMTIzNDU2LTMKK2Fsd2F5cyBcdTlBRTkgMTM1LTE0NTYtNQorYWx3YXlzIFx1OUFFQSAxMjM0NS0zNDUtNAorYWx3YXlzIFx1OUFFQiAxMjQtMjQ2LTIKK2Fsd2F5cyBcdTlBRUMgMTIzNC0xNi0zCithbHdheXMgXHU5QUVEIDEyNS0xNTYtMworYWx3YXlzIFx1OUFFRSAxMjM0NS0zNDUtNAorYWx3YXlzIFx1OUFFRiAxMjQ1LTEyMzYtMgorYWx3YXlzIFx1OUFGMCAxMjQtMTYtNQorYWx3YXlzIFx1OUFGMSAxMjM0LTE0Ni01CithbHdheXMgXHU5QUYyIDEzNS0xNi01CithbHdheXMgXHU5QUYzIDEzNC0xNDYtMgorYWx3YXlzIFx1OUFGNCAxMjM0NS0zNC0yCithbHdheXMgXHU5QUY1IDE1Ni0yCithbHdheXMgXHU5QUY2IDEyNDUtMTIzNDYtMgorYWx3YXlzIFx1OUFGNyAyNDUtMTI1Ni01CithbHdheXMgXHU5QUY4IDEzLTEyMzQ2LTMKK2Fsd2F5cyBcdTlBRjkgMTUtMjM0LTMKK2Fsd2F5cyBcdTlBRkEgMjM2LTUKK2Fsd2F5cyBcdTlBRkIgMTMtMTYtNQorYWx3YXlzIFx1OUFGQyAxMjM0LTEzNTYtMgorYWx3YXlzIFx1OUFGRCAxLTM1LTMKK2Fsd2F5cyBcdTlBRkUgMjQtMTQ2LTMKK2Fsd2F5cyBcdTlBRkYgMTUtMjUtMworYWx3YXlzIFx1OUIwMCAxMjQtMTYtNQorYWx3YXlzIFx1OUIwMSAxNC0xNi01CithbHdheXMgXHU5QjAyIDEzNS0xNDU2LTUKK2Fsd2F5cyBcdTlCMDMgMTI1LTEyMzQ2LTMKK2Fsd2F5cyBcdTlCMDQgMTI0LTE2LTUKK2Fsd2F5cyBcdTlCMDUgMTIzNC0xMzU2LTIKK2Fsd2F5cyBcdTlCMDYgMTUtMTIzNDYtMworYWx3YXlzIFx1OUIwNyAxLTEzNTYtMworYWx3YXlzIFx1OUIwOCAyNDUtNDUtMgorYWx3YXlzIFx1OUIwOSAxMjUtMTIzNDYtMworYWx3YXlzIFx1OUIwQSAyNC0xMjM0NTYtNQorYWx3YXlzIFx1OUIwQiAxMy0yMzQ1LTQKK2Fsd2F5cyBcdTlCMEMgMTQ1LTI1LTQKK2Fsd2F5cyBcdTlCMEQgMTIzNS0zNC0yCithbHdheXMgXHU5QjBFIDE0LTM0NS01CithbHdheXMgXHU5QjBGIDEzLTIzNC0zCithbHdheXMgXHU5QjEwIDI0NS0xNi0yCithbHdheXMgXHU5QjExIDE0LTIzNDUtMgorYWx3YXlzIFx1OUIxMiAxLTEzNi00CithbHdheXMgXHU5QjEzIDEzNS0xNDU2LTUKK2Fsd2F5cyBcdTlCMTQgMTIzNC0xMzU2LTIKK2Fsd2F5cyBcdTlCMTUgMTM0LTEyNi01CithbHdheXMgXHU5QjE2IDE1LTEyMzYtMworYWx3YXlzIFx1OUIxNyAxMzQtMTIzNi0yCithbHdheXMgXHU5QjE4IDEzNC0xMjM2LTIKK2Fsd2F5cyBcdTlCMTkgMTUtMTM1Ni0zCithbHdheXMgXHU5QjFBIDE1LTEyNTYtMworYWx3YXlzIFx1OUIxQiAxNC0zNDYtNQorYWx3YXlzIFx1OUIxQyAyNDUtMjM0NS0zCithbHdheXMgXHU5QjFEIDI0NS0yMzQ1LTMKK2Fsd2F5cyBcdTlCMUUgMTM0NS0xMjM0Ni0yCithbHdheXMgXHU5QjFGIDEyMzUtMTI0NTYtMgorYWx3YXlzIFx1OUIyMCAxMy0yNS01CithbHdheXMgXHU5QjIxIDEzNDUtMTM0NTYtMgorYWx3YXlzIFx1OUIyMiAxMzUtMTQ1Ni01CithbHdheXMgXHU5QjIzIDE0LTM0Ni01CithbHdheXMgXHU5QjI0IDEyNDUtMTM0Ni0yCithbHdheXMgXHU5QjI1IDE0NS0xMjM1Ni01CithbHdheXMgXHU5QjI2IDE0NS0xMjM1Ni01CithbHdheXMgXHU5QjI3IDEzNDUtMTQ2LTUKK2Fsd2F5cyBcdTlCMjggMTIzNS0xMjM0Ni01CithbHdheXMgXHU5QjI5IDE1LTE2LTUKK2Fsd2F5cyBcdTlCMkEgMTQ1LTEyMzU2LTUKK2Fsd2F5cyBcdTlCMkIgMTIzNS0xMjM2LTQKK2Fsd2F5cyBcdTlCMkMgMTQ1LTEyMzU2LTUKK2Fsd2F5cyBcdTlCMkQgMTQ1LTEyMzU2LTUKK2Fsd2F5cyBcdTlCMkUgMTMtMjM0LTMKK2Fsd2F5cyBcdTlCMkYgMTItMTM0Ni01CithbHdheXMgXHU5QjMwIDEyNTYtNQorYWx3YXlzIFx1OUIzMSAxMjU2LTUKK2Fsd2F5cyBcdTlCMzIgMTMtMjM0Ni0yCithbHdheXMgXHU5QjMzIDEzLTQ1LTUKK2Fsd2F5cyBcdTlCMzQgMTIzNDUtMzQtNAorYWx3YXlzIFx1OUIzNSAxNS0xNDU2LTIKK2Fsd2F5cyBcdTlCMzYgMTMtMTI0Ni0zCithbHdheXMgXHU5QjM3IDEyNS0xMjM0Ni0zCithbHdheXMgXHU5QjM4IDE0LTIzNC01CithbHdheXMgXHU5QjM5IDEzLTEyNDYtMworYWx3YXlzIFx1OUIzQSAyNC0xMzQ2LTMKK2Fsd2F5cyBcdTlCM0IgMTI1Ni01CithbHdheXMgXHU5QjNDIDEzLTEyNDYtNAorYWx3YXlzIFx1OUIzRCAxMzQtMzU2LTUKK2Fsd2F5cyBcdTlCM0UgMTMtMTYtNQorYWx3YXlzIFx1OUIzRiAyNDUtMTYtMgorYWx3YXlzIFx1OUI0MCAxMy0zNDYtNQorYWx3YXlzIFx1OUI0MSAxMjMtMTI0Ni0yCithbHdheXMgXHU5QjQyIDEyMzUtMTIzNDU2LTIKK2Fsd2F5cyBcdTlCNDMgMTM1LTM0NS0yCithbHdheXMgXHU5QjQ0IDEyMzQtMTI2LTUKK2Fsd2F5cyBcdTlCNDUgMTM0LTM1Ni01CithbHdheXMgXHU5QjQ2IDE1LTEyNTYtNQorYWx3YXlzIFx1OUI0NyAyMzQ1LTQKK2Fsd2F5cyBcdTlCNDggMTUtMjQ2LTMKK2Fsd2F5cyBcdTlCNDkgMTQtNDYtNAorYWx3YXlzIFx1OUI0QSAxMjU2LTUKK2Fsd2F5cyBcdTlCNEIgMTI0LTEyNDYtMgorYWx3YXlzIFx1OUI0QyAyNDUtMTYtMworYWx3YXlzIFx1OUI0RCA0NTYtNAorYWx3YXlzIFx1OUI0RSAxNC00Ni00CithbHdheXMgXHU5QjRGIDEyNDYtNQorYWx3YXlzIFx1OUI1MCAxMy0yMzQ1LTMKK2Fsd2F5cyBcdTlCNTEgMTItMTU2LTMKK2Fsd2F5cyBcdTlCNTIgMTIzNC0yNDYtMworYWx3YXlzIFx1OUI1MyAxMzUtMTYtNQorYWx3YXlzIFx1OUI1NCAxMzQtMTI2LTIKK2Fsd2F5cyBcdTlCNTUgMTMtMTYtMworYWx3YXlzIFx1OUI1NiAxNS0xMjU2LTMKK2Fsd2F5cyBcdTlCNTcgMTItMTIzNTYtNAorYWx3YXlzIFx1OUI1OCAyMzQ1LTQKK2Fsd2F5cyBcdTlCNTkgMS0xMjM2LTQKK2Fsd2F5cyBcdTlCNUEgMTI1Ni0yCithbHdheXMgXHU5QjVCIDE0NS0xNDYtMworYWx3YXlzIFx1OUI1QyAxMjQ1LTEzNi0yCithbHdheXMgXHU5QjVEIDEzLTE2LTUKK2Fsd2F5cyBcdTlCNUUgMTM1LTM0NS0zCithbHdheXMgXHU5QjVGIDEyMzUtMTIzNDYtMworYWx3YXlzIFx1OUI2MCAxMjQtMjUtMworYWx3YXlzIFx1OUI2MSAxNDUtMjQ2LTUKK2Fsd2F5cyBcdTlCNjIgMTMtMTYtNAorYWx3YXlzIFx1OUI2MyAxNS0xMjU2LTUKK2Fsd2F5cyBcdTlCNjQgMjM0Ni0yCithbHdheXMgXHU5QjY1IDIzNDYtNQorYWx3YXlzIFx1OUI2NiAyNC0zNDUtMworYWx3YXlzIFx1OUI2NyAxMjM1LTEzNDYtMgorYWx3YXlzIFx1OUI2OCAxMjQtMTIzNDU2LTIKK2Fsd2F5cyBcdTlCNjkgMTM0LTEyNi01CithbHdheXMgXHU5QjZBIDEzLTM0Ni01CithbHdheXMgXHU5QjZCIDI0LTEzNi00CithbHdheXMgXHU5QjZDIDEzNS0xMjM2LTQKK2Fsd2F5cyBcdTlCNkQgNDUtMgorYWx3YXlzIFx1OUI2RSAxMjM0LTE2LTIKK2Fsd2F5cyBcdTlCNkYgMTQtMzQtNAorYWx3YXlzIFx1OUI3MCAxMjM0NTYtMgorYWx3YXlzIFx1OUI3MSAxMjM1LTM0LTIKK2Fsd2F5cyBcdTlCNzIgMTQtMzQtMgorYWx3YXlzIFx1OUI3MyAxMjUtMzQ1LTIKK2Fsd2F5cyBcdTlCNzQgMTIzNDUtMTM0Ni0yCithbHdheXMgXHU5Qjc1IDEyMzQ1LTEzNi01CithbHdheXMgXHU5Qjc2IDEzNDUtMzQ1LTUKK2Fsd2F5cyBcdTlCNzcgMjM0LTIKK2Fsd2F5cyBcdTlCNzggMTIzNC0yMzQ1LTUKK2Fsd2F5cyBcdTlCNzkgMTM0LTEyNi0yCithbHdheXMgXHU5QjdBIDEyMzUtMjM0Ni0yCithbHdheXMgXHU5QjdCIDE1LTIzNDU2LTIKK2Fsd2F5cyBcdTlCN0MgMjQ1LTEyNTYtMworYWx3YXlzIFx1OUI3RCAxMjM1LTEyMzYtMworYWx3YXlzIFx1OUI3RSAxMjM0LTE2LTIKK2Fsd2F5cyBcdTlCN0YgMTQtMTM0NTYtMgorYWx3YXlzIFx1OUI4MCAxMjQtMjUtMgorYWx3YXlzIFx1OUI4MSAxMzUtMzQ1LTIKK2Fsd2F5cyBcdTlCODIgMjQ1LTIzNC0yCithbHdheXMgXHU5QjgzIDEyMzQtMTM0NTYtMgorYWx3YXlzIFx1OUI4NCAxMjM0NS0zNC0yCithbHdheXMgXHU5Qjg1IDEzNS0xNi01CithbHdheXMgXHU5Qjg2IDEzLTE2LTUKK2Fsd2F5cyBcdTlCODcgMTI0Ni01CithbHdheXMgXHU5Qjg4IDEzLTEyNTYtMworYWx3YXlzIFx1OUI4OSAxNDUtMjQ2LTMKK2Fsd2F5cyBcdTlCOEEgMTM1LTEyNi0yCithbHdheXMgXHU5QjhCIDIzNC0yCithbHdheXMgXHU5QjhDIDEzLTEyMzQ1Ni00CithbHdheXMgXHU5QjhEIDEyMzQtMTYtMworYWx3YXlzIFx1OUI4RSAxMzQ1LTIzNDUtMgorYWx3YXlzIFx1OUI4RiAxNS0xMzQ1Ni0zCithbHdheXMgXHU5QjkwIDEyNC0yNDU2LTIKK2Fsd2F5cyBcdTlCOTEgMTM1LTE0Ni01CithbHdheXMgXHU5QjkyIDEyMzQ1LTM0LTUKK2Fsd2F5cyBcdTlCOTMgMS0zNDUtNAorYWx3YXlzIFx1OUI5NCAxMy0xMjU2LTUKK2Fsd2F5cyBcdTlCOTUgMTMtMzQtMworYWx3YXlzIFx1OUI5NiAyNC0xNTYtMgorYWx3YXlzIFx1OUI5NyAxNDUtMTIzNDYtMworYWx3YXlzIFx1OUI5OCAxNDUtMjQ1Ni01CithbHdheXMgXHU5Qjk5IDEyNC0zNDUtNQorYWx3YXlzIFx1OUI5QSAxMy0zNDYtMgorYWx3YXlzIFx1OUI5QiAyNC0zNC0yCithbHdheXMgXHU5QjlDIDEyMzUtMTIzNTYtNQorYWx3YXlzIFx1OUI5RCAxNS00Ni00CithbHdheXMgXHU5QjlFIDE1Ni0yCithbHdheXMgXHU5QjlGIDEyMzYtNQorYWx3YXlzIFx1OUJBMCAxMjQ2LTIKK2Fsd2F5cyBcdTlCQTEgMS0xNDYtNQorYWx3YXlzIFx1OUJBMiAxLTM0LTMKK2Fsd2F5cyBcdTlCQTMgMTQ1Ni01CithbHdheXMgXHU5QkE0IDE0LTM0Ni01CithbHdheXMgXHU5QkE1IDE0LTI1LTUKK2Fsd2F5cyBcdTlCQTYgMTI0LTEyMzQ2LTIKK2Fsd2F5cyBcdTlCQTcgMTYtMgorYWx3YXlzIFx1OUJBOCAyNDUtMTYtMgorYWx3YXlzIFx1OUJBOSAxMzUtMTM0NTYtNQorYWx3YXlzIFx1OUJBQSAxMjQ2LTQKK2Fsd2F5cyBcdTlCQUIgMTMtMjQ2LTMKK2Fsd2F5cyBcdTlCQUMgMTM1LTM0LTUKK2Fsd2F5cyBcdTlCQUQgMTMtMTI0Ni0zCithbHdheXMgXHU5QkFFIDE1LTIzNDUtMworYWx3YXlzIFx1OUJBRiAxMjM1LTIzNDYtMgorYWx3YXlzIFx1OUJCMCAxMjM1LTEyNDYtMgorYWx3YXlzIFx1OUJCMSAxNC0xNDYtNAorYWx3YXlzIFx1OUJCMiAxMjM0NS0zNC0yCithbHdheXMgXHU5QkIzIDEyMy0xNDYtNQorYWx3YXlzIFx1OUJCNCAxNS0yMzQtMworYWx3YXlzIFx1OUJCNSAxNDUtMjUtMgorYWx3YXlzIFx1OUJCNiAxMy0yNTYtMworYWx3YXlzIFx1OUJCNyAxMjQtMTYtMgorYWx3YXlzIFx1OUJCOCAxMzQtMjM0NS00CithbHdheXMgXHU5QkI5IDI0LTE0Ni0zCithbHdheXMgXHU5QkJBIDEtMzQ1LTQKK2Fsd2F5cyBcdTlCQkIgMjQtMzQ1LTMKK2Fsd2F5cyBcdTlCQkMgMjQ1LTE0NTYtMworYWx3YXlzIFx1OUJCRCAxMjU2LTIKK2Fsd2F5cyBcdTlCQkUgMTM0NS0zNTYtNAorYWx3YXlzIFx1OUJCRiAxLTIzNDYtMgorYWx3YXlzIFx1OUJDMCAxMy0xMjM0NTYtNAorYWx3YXlzIFx1OUJDMSAxMy0xMzU2LTQKK2Fsd2F5cyBcdTlCQzIgMTUtMzQtMworYWx3YXlzIFx1OUJDMyAzNC0yCithbHdheXMgXHU5QkM0IDI0NS0yMzQtMgorYWx3YXlzIFx1OUJDNSAxMjQtMTM0NTYtMgorYWx3YXlzIFx1OUJDNiAxMjM0LTM0LTMKK2Fsd2F5cyBcdTlCQzcgMTIzNS0xMjQ1Ni01CithbHdheXMgXHU5QkM4IDEyLTEyMzU2LTIKK2Fsd2F5cyBcdTlCQzkgMTQtMTYtNAorYWx3YXlzIFx1OUJDQSAyNC0zNDUtMworYWx3YXlzIFx1OUJDQiAyNC0zNDUtMworYWx3YXlzIFx1OUJDQyAxMy0xNDYtNQorYWx3YXlzIFx1OUJDRCAxMzQtMTM1Ni0yCithbHdheXMgXHU5QkNFIDEyLTEzNTYtMgorYWx3YXlzIFx1OUJDRiAxNC0xNi0yCithbHdheXMgXHU5QkQwIDEyNS0xMjM1Ni00CithbHdheXMgXHU5QkQxIDE1LTE2LTMKK2Fsd2F5cyBcdTlCRDIgMjM1LTQKK2Fsd2F5cyBcdTlCRDMgMjQtMTM2LTMKK2Fsd2F5cyBcdTlCRDQgMTI1LTE1Ni0zCithbHdheXMgXHU5QkQ1IDI0NS0xNi0yCithbHdheXMgXHU5QkQ2IDI0NS0xMzQ1Ni0zCithbHdheXMgXHU5QkQ3IDE1LTQ2LTQKK2Fsd2F5cyBcdTlCRDggMTM0NS0zNTYtNAorYWx3YXlzIFx1OUJEOSAxMi0xMjM0NTYtMgorYWx3YXlzIFx1OUJEQSAxMy0xNi01CithbHdheXMgXHU5QkRCIDE0NS0yNDYtMworYWx3YXlzIFx1OUJEQyAyNDUtMzQ2LTUKK2Fsd2F5cyBcdTlCREQgMTMtMzQtNQorYWx3YXlzIFx1OUJERSAxLTEyMzU2LTQKK2Fsd2F5cyBcdTlCREYgMTQ1LTEyMzQ2LTMKK2Fsd2F5cyBcdTlCRTAgMTQtMjQ1Ni0yCithbHdheXMgXHU5QkUxIDEyMzQ1LTM1Ni01CithbHdheXMgXHU5QkUyIDEzNDUtMTYtMgorYWx3YXlzIFx1OUJFMyAxNi01CithbHdheXMgXHU5QkU0IDEyMy0xMjM0NTYtMworYWx3YXlzIFx1OUJFNSAxNC0zNC01CithbHdheXMgXHU5QkU2IDEzLTIzNC01CithbHdheXMgXHU5QkU3IDEyLTEzNDYtMworYWx3YXlzIFx1OUJFOCAxMy0xMzQ1Ni0zCithbHdheXMgXHU5QkU5IDE0LTEyMzQ1Ni0yCithbHdheXMgXHU5QkVBIDE0LTEzNDU2LTIKK2Fsd2F5cyBcdTlCRUIgMTI1LTEyMzU2LTMKK2Fsd2F5cyBcdTlCRUMgMTQtMTYtMgorYWx3YXlzIFx1OUJFRCAxMzQtMTM1Ni00CithbHdheXMgXHU5QkVFIDEyNS0xMjM0Ni0zCithbHdheXMgXHU5QkVGIDEtMTU2LTUKK2Fsd2F5cyBcdTlCRjAgMTM0NS0yMzQ1LTIKK2Fsd2F5cyBcdTlCRjEgMTIzNS0zNC00CithbHdheXMgXHU5QkYyIDEyNTYtMgorYWx3YXlzIFx1OUJGMyAxNDUtMTYtNAorYWx3YXlzIFx1OUJGNCAyNC0xNTYtMworYWx3YXlzIFx1OUJGNSAyNC0xMzYtMworYWx3YXlzIFx1OUJGNiAxMjM1LTEyNDU2LTUKK2Fsd2F5cyBcdTlCRjcgMTI0LTE2LTIKK2Fsd2F5cyBcdTlCRjggMTIzNS0xMjM1Ni0yCithbHdheXMgXHU5QkY5IDE1LTEzNDU2LTMKK2Fsd2F5cyBcdTlCRkEgMS0zNC0zCithbHdheXMgXHU5QkZCIDE0LTM0NS01CithbHdheXMgXHU5QkZDIDEyNS0xMjM0Ni0zCithbHdheXMgXHU5QkZEIDEzLTE2LTUKK2Fsd2F5cyBcdTlCRkUgMTM1LTIzNDUtMworYWx3YXlzIFx1OUJGRiAxMzUtMjM0NS0zCithbHdheXMgXHU5QzAwIDEyMzUtMTI0NTYtNQorYWx3YXlzIFx1OUMwMSAyNDUtNDUtMgorYWx3YXlzIFx1OUMwMiAxMjUtMjM0Ni0yCithbHdheXMgXHU5QzAzIDEyNDYtMworYWx3YXlzIFx1OUMwNCAxMjQ2LTMKK2Fsd2F5cyBcdTlDMDUgMTI1Ni0yCithbHdheXMgXHU5QzA2IDEyLTEyMzQ1Ni0zCithbHdheXMgXHU5QzA3IDEyNDUtMTIzNTYtMgorYWx3YXlzIFx1OUMwOCAxNDUtMzQ2LTIKK2Fsd2F5cyBcdTlDMDkgMTIzNS00NTYtMgorYWx3YXlzIFx1OUMwQSAxNC0yMzQ1LTUKK2Fsd2F5cyBcdTlDMEIgMjM0NS00CithbHdheXMgXHU5QzBDIDI0NS0yMzQtMworYWx3YXlzIFx1OUMwRCAyNDUtMjM0LTMKK2Fsd2F5cyBcdTlDMEUgMTMtMjM0NS01CithbHdheXMgXHU5QzBGIDEzNS0xNi01CithbHdheXMgXHU5QzEwIDIzNDYtNQorYWx3YXlzIFx1OUMxMSA0Ni0yCithbHdheXMgXHU5QzEyIDEyMzQ1LTM0LTUKK2Fsd2F5cyBcdTlDMTMgMTUtMjQ1Ni0zCithbHdheXMgXHU5QzE0IDEzLTIzNDUtNAorYWx3YXlzIFx1OUMxNSAxNS0yMzQ1Ni0zCithbHdheXMgXHU5QzE2IDEyNC0yNS00CithbHdheXMgXHU5QzE3IDEyMzUtMzQtMgorYWx3YXlzIFx1OUMxOCAyNC0xNTYtNQorYWx3YXlzIFx1OUMxOSAxMjQ1LTI1LTUKK2Fsd2F5cyBcdTlDMUEgMTUtNDUtMworYWx3YXlzIFx1OUMxQiAxMjM0NTYtMworYWx3YXlzIFx1OUMxQyAxMy0yMzQ1LTMKK2Fsd2F5cyBcdTlDMUQgMTIzNS0xNDYtNQorYWx3YXlzIFx1OUMxRSAzNC0zCithbHdheXMgXHU5QzFGIDEyMzQ1LTEzNDYtMgorYWx3YXlzIFx1OUMyMCAxNS0xNDYtMworYWx3YXlzIFx1OUMyMSAxNC0yMzQtMgorYWx3YXlzIFx1OUMyMiAxMzQtMzQ1LTQKK2Fsd2F5cyBcdTlDMjMgMjQtMTU2LTIKK2Fsd2F5cyBcdTlDMjQgMjQtMTU2LTMKK2Fsd2F5cyBcdTlDMjUgMTMtMTI0NTYtMworYWx3YXlzIFx1OUMyNiAxMjUtMTU2LTMKK2Fsd2F5cyBcdTlDMjcgMTI0LTEzNTYtMgorYWx3YXlzIFx1OUMyOCAxMjQtMzQ1LTQKK2Fsd2F5cyBcdTlDMjkgMjQ2LTIKK2Fsd2F5cyBcdTlDMkEgMTMtMjM0Ni0yCithbHdheXMgXHU5QzJCIDEyNDUtMTIzNDYtMgorYWx3YXlzIFx1OUMyQyAyNDUtMjM0NS0yCithbHdheXMgXHU5QzJEIDI0NS0xNi0yCithbHdheXMgXHU5QzJFIDEyMzQ1Ni0zCithbHdheXMgXHU5QzJGIDEyNDUtMjUtNQorYWx3YXlzIFx1OUMzMCAyNC0xMzYtMgorYWx3YXlzIFx1OUMzMSAxNC0yMzQ1LTIKK2Fsd2F5cyBcdTlDMzIgMTQ2LTIKK2Fsd2F5cyBcdTlDMzMgMTQtMjM0Ni01CithbHdheXMgXHU5QzM0IDEyMzUtMTI0Ni0zCithbHdheXMgXHU5QzM1IDEzNC0yMzQ1LTQKK2Fsd2F5cyBcdTlDMzYgMTMtMTYtNQorYWx3YXlzIFx1OUMzNyAxMjQtMjQ2LTIKK2Fsd2F5cyBcdTlDMzggMjQ1LTEyNTYtMworYWx3YXlzIFx1OUMzOSAxMy0yMzQ1LTMKK2Fsd2F5cyBcdTlDM0EgMTUtMTQ2LTMKK2Fsd2F5cyBcdTlDM0IgMTM0LTEyMzYtMgorYWx3YXlzIFx1OUMzQyAxNS0xNi0yCithbHdheXMgXHU5QzNEIDI0NS0yMzQtMgorYWx3YXlzIFx1OUMzRSAxMzUtMjQ2LTUKK2Fsd2F5cyBcdTlDM0YgMTMtMTYtNQorYWx3YXlzIFx1OUM0MCAxMy0xNi01CithbHdheXMgXHU5QzQxIDEtMzQtMgorYWx3YXlzIFx1OUM0MiAxMy00Ni0zCithbHdheXMgXHU5QzQzIDI0NS0yMzQtMworYWx3YXlzIFx1OUM0NCAxLTEyNDU2LTMKK2Fsd2F5cyBcdTlDNDUgMjM1LTMKK2Fsd2F5cyBcdTlDNDYgMS0xMzQ2LTMKK2Fsd2F5cyBcdTlDNDcgMTIzLTEzNDYtMworYWx3YXlzIFx1OUM0OCAxNS0yMzYtNAorYWx3YXlzIFx1OUM0OSAxMzUtMzQ2LTMKK2Fsd2F5cyBcdTlDNEEgMTI1Ni01CithbHdheXMgXHU5QzRCIDI0NS0xMjU2LTMKK2Fsd2F5cyBcdTlDNEMgMTUtNDYtNQorYWx3YXlzIFx1OUM0RCAxMzUtMTI2LTMKK2Fsd2F5cyBcdTlDNEUgMTMtMjQ2LTQKK2Fsd2F5cyBcdTlDNEYgMTUtMjU2LTIKK2Fsd2F5cyBcdTlDNTAgMTUtMzQtNQorYWx3YXlzIFx1OUM1MSAxMjM1LTQ1Ni0yCithbHdheXMgXHU5QzUyIDEyNS0xMjM0NTYtMworYWx3YXlzIFx1OUM1MyAyNC0xMjM2LTUKK2Fsd2F5cyBcdTlDNTQgMjQtMTIzNi01CithbHdheXMgXHU5QzU1IDEyMzQ1LTEyMzYtMworYWx3YXlzIFx1OUM1NiAxMy0xMjQ2LTUKK2Fsd2F5cyBcdTlDNTcgMTQtMTQ1Ni0yCithbHdheXMgXHU5QzU4IDE1LTI1Ni0yCithbHdheXMgXHU5QzU5IDEzNC0yNDYtMgorYWx3YXlzIFx1OUM1QSAxNS0xNi00CithbHdheXMgXHU5QzVCIDEyNS0xMzU2LTMKK2Fsd2F5cyBcdTlDNUMgMTUtNDYtMworYWx3YXlzIFx1OUM1RCAxMjM0NS0xMzYtNQorYWx3YXlzIFx1OUM1RSAxMy0xMjQ1Ni0zCithbHdheXMgXHU5QzVGIDEyMzUtMTIzNTYtNQorYWx3YXlzIFx1OUM2MCAxMjMtMjM1Ni01CithbHdheXMgXHU5QzYxIDEyNS0zNTYtMgorYWx3YXlzIFx1OUM2MiAxNS0xNDYtMworYWx3YXlzIFx1OUM2MyAxLTEyMzYtMworYWx3YXlzIFx1OUM2NCAxMy0xMjM2LTQKK2Fsd2F5cyBcdTlDNjUgMTMtMTI0Ni01CithbHdheXMgXHU5QzY2IDI0LTEzNTYtMgorYWx3YXlzIFx1OUM2NyAxNC0xNi00CithbHdheXMgXHU5QzY4IDEyLTEzNDYtMgorYWx3YXlzIFx1OUM2OSAxNC0zNTYtMgorYWx3YXlzIFx1OUM2QSAyNC0zNC00CithbHdheXMgXHU5QzZCIDI0NTYtMQorYWx3YXlzIFx1OUM2QyAxMjQ1LTM0LTIKK2Fsd2F5cyBcdTlDNkQgMTMtMTYtNQorYWx3YXlzIFx1OUM2RSAxNS0xMjU2LTUKK2Fsd2F5cyBcdTlDNkYgMTIzNS0zNC01CithbHdheXMgXHU5QzcwIDI0LTM0LTQKK2Fsd2F5cyBcdTlDNzEgMTQtMTYtNQorYWx3YXlzIFx1OUM3MiAxNC0zNDYtNQorYWx3YXlzIFx1OUM3MyAxNC0yNS01CithbHdheXMgXHU5Qzc0IDEzNC0zNDYtNQorYWx3YXlzIFx1OUM3NSAxLTEzNi0zCithbHdheXMgXHU5Qzc2IDE1LTQ2LTQKK2Fsd2F5cyBcdTlDNzcgMjM0Ni01CithbHdheXMgXHU5Qzc4IDE0LTM0LTIKK2Fsd2F5cyBcdTlDNzkgMTMtMTI0NTYtNQorYWx3YXlzIFx1OUM3QSAxNC0xNi0yCithbHdheXMgXHU5QzdCIDE1LTIzNDUtMworYWx3YXlzIFx1OUM3QyAxMjU2LTIKK2Fsd2F5cyBcdTlDN0QgMTQ1LTE0Ni0zCithbHdheXMgXHU5QzdFIDEzLTE2LTQKK2Fsd2F5cyBcdTlDN0YgMjM0LTIKK2Fsd2F5cyBcdTlDODAgMTI0LTEyMzQ1Ni0yCithbHdheXMgXHU5QzgxIDE0LTM0LTQKK2Fsd2F5cyBcdTlDODIgMTIzNDUtMTM0Ni0yCithbHdheXMgXHU5QzgzIDEzNS0zNDUtNQorYWx3YXlzIFx1OUM4NCAxMjM1LTIzNDYtMgorYWx3YXlzIFx1OUM4NSAxMzUtMzQ1LTIKK2Fsd2F5cyBcdTlDODYgMTIzNC0xMzQ1Ni0yCithbHdheXMgXHU5Qzg3IDEzNDUtMjM0NS0yCithbHdheXMgXHU5Qzg4IDE0LTM0LTIKK2Fsd2F5cyBcdTlDODkgMjM0LTIKK2Fsd2F5cyBcdTlDOEEgMS0zNDUtNAorYWx3YXlzIFx1OUM4QiAxMjM0NS0zNC01CithbHdheXMgXHU5QzhDIDEzNS0xMjYtMgorYWx3YXlzIFx1OUM4RCAxMzUtMTQ2LTUKK2Fsd2F5cyBcdTlDOEUgMTIzNS0xMjM1Ni01CithbHdheXMgXHU5QzhGIDEyMzQtMTYtMworYWx3YXlzIFx1OUM5MCAxMjQtMjQ1Ni0yCithbHdheXMgXHU5QzkxIDEzLTEyNDYtMworYWx3YXlzIFx1OUM5MiAxMy0zNDYtMgorYWx3YXlzIFx1OUM5MyAxMjMtMTQ2LTUKK2Fsd2F5cyBcdTlDOTQgMTI0Ni00CithbHdheXMgXHU5Qzk1IDE1Ni0yCithbHdheXMgXHU5Qzk2IDEyNC0xMjM0Ni0yCithbHdheXMgXHU5Qzk3IDEyNS0yMzQ2LTIKK2Fsd2F5cyBcdTlDOTggMTIzNS0xMjM1Ni01CithbHdheXMgXHU5Qzk5IDEyMy0yMzU2LTUKK2Fsd2F5cyBcdTlDOUEgMTMtMTYtNQorYWx3YXlzIFx1OUM5QiAxMy0yNDYtMworYWx3YXlzIFx1OUM5QyAxNS0yMzQ1LTMKK2Fsd2F5cyBcdTlDOUQgMS0zNDUtNAorYWx3YXlzIFx1OUM5RSAxNS00Ni00CithbHdheXMgXHU5QzlGIDE1LTI1Ni0yCithbHdheXMgXHU5Q0EwIDEzLTEzNTYtNAorYWx3YXlzIFx1OUNBMSAxNC0xNi0yCithbHdheXMgXHU5Q0EyIDE0LTIzNDUtMgorYWx3YXlzIFx1OUNBMyAxMy0yMzQ1LTMKK2Fsd2F5cyBcdTlDQTQgMTQtMTYtNAorYWx3YXlzIFx1OUNBNSAyNC0xNTYtMgorYWx3YXlzIFx1OUNBNiAxMjQtMjQ2LTIKK2Fsd2F5cyBcdTlDQTcgMTMtMTIzNDU2LTQKK2Fsd2F5cyBcdTlDQTggMjQtMzQ1LTMKK2Fsd2F5cyBcdTlDQTkgMTIzNS0xMjQ1Ni01CithbHdheXMgXHU5Q0FBIDEzLTI1Ni0zCithbHdheXMgXHU5Q0FCIDEzLTE2LTUKK2Fsd2F5cyBcdTlDQUMgMjM1LTQKK2Fsd2F5cyBcdTlDQUQgMjQ1LTEzNDU2LTMKK2Fsd2F5cyBcdTlDQUUgMTQtMTM0NTYtMgorYWx3YXlzIFx1OUNBRiAyNDUtMTYtMgorYWx3YXlzIFx1OUNCMCAxMjUtMTIzNTYtMworYWx3YXlzIFx1OUNCMSAxMjM0NS0zNTYtMworYWx3YXlzIFx1OUNCMiAxMjMtMTIzNDU2LTMKK2Fsd2F5cyBcdTlDQjMgMTItMTM0Ni0zCithbHdheXMgXHU5Q0I0IDEzLTM0LTUKK2Fsd2F5cyBcdTlDQjUgMTM0NS0xNi0yCithbHdheXMgXHU5Q0I2IDEzNDUtMjM0NS0yCithbHdheXMgXHU5Q0I3IDE0NS0yNDYtMworYWx3YXlzIFx1OUNCOCAxMy0xMzQ1Ni0zCithbHdheXMgXHU5Q0I5IDI0LTEzNi0zCithbHdheXMgXHU5Q0JBIDI0LTE1Ni0zCithbHdheXMgXHU5Q0JCIDEyNS0xNTYtMworYWx3YXlzIFx1OUNCQyAxMjM0NS0xMzYtNQorYWx3YXlzIFx1OUNCRCAxNDUtMzQ2LTIKK2Fsd2F5cyBcdTlDQkUgMTM1LTE2LTUKK2Fsd2F5cyBcdTlDQkYgMTItMTM0Ni0yCithbHdheXMgXHU5Q0MwIDEyNC0xNi0yCithbHdheXMgXHU5Q0MxIDEyMzQ1Ni0zCithbHdheXMgXHU5Q0MyIDEyNDYtMworYWx3YXlzIFx1OUNDMyAxNS0yNDU2LTMKK2Fsd2F5cyBcdTlDQzQgMjM0Ni01CithbHdheXMgXHU5Q0M1IDI0NS0yMzQtMworYWx3YXlzIFx1OUNDNiAxMjM0NS0zNC01CithbHdheXMgXHU5Q0M3IDEyMzUtNDU2LTIKK2Fsd2F5cyBcdTlDQzggMjQ1LTQ1LTIKK2Fsd2F5cyBcdTlDQzkgMTMtNDYtMworYWx3YXlzIFx1OUNDQSAxMzUtMjM0NS0zCithbHdheXMgXHU5Q0NCIDE1LTE0Ni0zCithbHdheXMgXHU5Q0NDIDE0Ni0yCithbHdheXMgXHU5Q0NEIDI0NS0xNi0yCithbHdheXMgXHU5Q0NFIDEyNC0zNDUtNAorYWx3YXlzIFx1OUNDRiAxMy0xMjQ1Ni0zCithbHdheXMgXHU5Q0QwIDI0Ni0yCithbHdheXMgXHU5Q0QxIDEyMzQ1LTEzNDYtMgorYWx3YXlzIFx1OUNEMiAxMy0yMzQ1LTMKK2Fsd2F5cyBcdTlDRDMgMTQtMjM0Ni01CithbHdheXMgXHU5Q0Q0IDEzNS0yNDYtNQorYWx3YXlzIFx1OUNENSAxNS0yMzYtNAorYWx3YXlzIFx1OUNENiAxMzUtMzQ2LTMKK2Fsd2F5cyBcdTlDRDcgMTM0LTEyMzYtMgorYWx3YXlzIFx1OUNEOCAxMzQtMjM0NS00CithbHdheXMgXHU5Q0Q5IDIzNS0zCithbHdheXMgXHU5Q0RBIDEyNDYtNQorYWx3YXlzIFx1OUNEQiAxNS0xNi0yCithbHdheXMgXHU5Q0RDIDEzLTEyNDYtNQorYWx3YXlzIFx1OUNERCAyNC0xMjM2LTUKK2Fsd2F5cyBcdTlDREUgMTQtMTQ1Ni0yCithbHdheXMgXHU5Q0RGIDEyNS0xMjM0NTYtMworYWx3YXlzIFx1OUNFMCAxMjM1LTM0LTUKK2Fsd2F5cyBcdTlDRTEgMTMtMTIzNi00CithbHdheXMgXHU5Q0UyIDE0LTE2LTQKK2Fsd2F5cyBcdTlDRTMgMS0xMjM2LTMKK2Fsd2F5cyBcdTlDRTQgMTMtMTI0NTYtNAorYWx3YXlzIFx1OUNFNSAxMzQ1LTI0Ni00CithbHdheXMgXHU5Q0U2IDE2LTQKK2Fsd2F5cyBcdTlDRTcgMTIzNDUtMzQtMgorYWx3YXlzIFx1OUNFOCAxNC0xNi01CithbHdheXMgXHU5Q0U5IDEzLTIzNC0zCithbHdheXMgXHU5Q0VBIDEzNS0zNC00CithbHdheXMgXHU5Q0VCIDIzNDUtNQorYWx3YXlzIFx1OUNFQyAxMjM0NS0zNC0yCithbHdheXMgXHU5Q0VEIDE0NS0yNDYtMworYWx3YXlzIFx1OUNFRSAxMy0xNi0zCithbHdheXMgXHU5Q0VGIDEyMzQ1LTEzNTYtNQorYWx3YXlzIFx1OUNGMCAxMjQ1LTM0LTUKK2Fsd2F5cyBcdTlDRjEgMTMtMTIzNi0zCithbHdheXMgXHU5Q0YyIDI0LTE1Ni0zCithbHdheXMgXHU5Q0YzIDEyMzQ1LTEzNTYtNQorYWx3YXlzIFx1OUNGNCAxMzQtMTM0NTYtMgorYWx3YXlzIFx1OUNGNSAxMzUtMTQ2LTQKK2Fsd2F5cyBcdTlDRjYgNDUtMworYWx3YXlzIFx1OUNGNyAxLTE1Ni0zCithbHdheXMgXHU5Q0Y4IDEyMzUtMzQtNQorYWx3YXlzIFx1OUNGOSAyNDUtMTQ1Ni0yCithbHdheXMgXHU5Q0ZBIDEzLTEyNDYtMworYWx3YXlzIFx1OUNGQiAxMjM0NS0xMzYtMworYWx3YXlzIFx1OUNGQyAxMjM0NTYtMgorYWx3YXlzIFx1OUNGRCAyMzQ1LTIKK2Fsd2F5cyBcdTlDRkUgMjQtMTU2LTMKK2Fsd2F5cyBcdTlDRkYgMTI1Ni01CithbHdheXMgXHU5RDAwIDEyMzQ1LTEyMzU2LTQKK2Fsd2F5cyBcdTlEMDEgMjQ2LTMKK2Fsd2F5cyBcdTlEMDIgMTMtMjM2LTIKK2Fsd2F5cyBcdTlEMDMgMTMtMjM2LTIKK2Fsd2F5cyBcdTlEMDQgMTIzNC0xNi0zCithbHdheXMgXHU5RDA1IDEyMzUtMTI0NTYtMworYWx3YXlzIFx1OUQwNiAxLTEzNi01CithbHdheXMgXHU5RDA3IDEzNS0xNDYtNAorYWx3YXlzIFx1OUQwOCAyMzQ1LTUKK2Fsd2F5cyBcdTlEMDkgMjM0NTYtMworYWx3YXlzIFx1OUQwQSAxLTEzNTYtNQorYWx3YXlzIFx1OUQwQiAxMjM0NS0xMzQ2LTMKK2Fsd2F5cyBcdTlEMEMgMTIzNDUtMTM1Ni01CithbHdheXMgXHU5RDBEIDEyMzQ1Ni0yCithbHdheXMgXHU5RDBFIDEyMzU2LTMKK2Fsd2F5cyBcdTlEMEYgMTI0LTIzNDYtNQorYWx3YXlzIFx1OUQxMCAxMy0yMzQ1Ni0zCithbHdheXMgXHU5RDExIDEzNDUtMzQtMgorYWx3YXlzIFx1OUQxMiAxNC0xMzQ1Ni0yCithbHdheXMgXHU5RDEzIDEzNC0zNDYtNQorYWx3YXlzIFx1OUQxNCAxMjM0NS0zNC0yCithbHdheXMgXHU5RDE1IDEyNC0yNS0yCithbHdheXMgXHU5RDE2IDEyMzQ1Ni0yCithbHdheXMgXHU5RDE3IDE0LTE2LTUKK2Fsd2F5cyBcdTlEMTggMTM1LTIzNDUtNQorYWx3YXlzIFx1OUQxOSAxLTE1Ni01CithbHdheXMgXHU5RDFBIDEzLTIzNDYtMworYWx3YXlzIFx1OUQxQiA0NS0zCithbHdheXMgXHU5RDFDIDI0NS0xNTYtMgorYWx3YXlzIFx1OUQxRCAyNDUtMTI1Ni0yCithbHdheXMgXHU5RDFFIDE1LTI0Ni0zCithbHdheXMgXHU5RDFGIDEyLTE1Ni0zCithbHdheXMgXHU5RDIwIDE0NS0xMjM2LTUKK2Fsd2F5cyBcdTlEMjEgMTMtMTI1Ni0zCithbHdheXMgXHU5RDIyIDIzNC01CithbHdheXMgXHU5RDIzIDEzLTM0LTMKK2Fsd2F5cyBcdTlEMjQgMS0xMjM0Ni0zCithbHdheXMgXHU5RDI1IDEyNTYtNQorYWx3YXlzIFx1OUQyNiA0Ni0zCithbHdheXMgXHU5RDI3IDEyNTYtNQorYWx3YXlzIFx1OUQyOCAyMzQ1Ni0zCithbHdheXMgXHU5RDI5IDE2LTUKK2Fsd2F5cyBcdTlEMkEgMTI1Ni01CithbHdheXMgXHU5RDJCIDEyNC0yMzQ1LTIKK2Fsd2F5cyBcdTlEMkMgMTM0NTYtMworYWx3YXlzIFx1OUQyRCAxLTEyNDYtMworYWx3YXlzIFx1OUQyRSAzNC0zCithbHdheXMgXHU5RDJGIDE1Ni0yCithbHdheXMgXHU5RDMwIDEzLTM1LTMKK2Fsd2F5cyBcdTlEMzEgMjQ1Ni01CithbHdheXMgXHU5RDMyIDEtMTU2LTMKK2Fsd2F5cyBcdTlEMzMgMjM0NS01CithbHdheXMgXHU5RDM0IDEyMzUtMTM1Ni0yCithbHdheXMgXHU5RDM1IDE1LTI0Ni0zCithbHdheXMgXHU5RDM2IDEzLTIzNDU2LTIKK2Fsd2F5cyBcdTlEMzcgMTQtMzQ2LTUKK2Fsd2F5cyBcdTlEMzggMS0zNC0zCithbHdheXMgXHU5RDM5IDEyNDUtMTM2LTIKK2Fsd2F5cyBcdTlEM0EgMTYtMgorYWx3YXlzIFx1OUQzQiAxMjM1LTEyMzQ2LTIKK2Fsd2F5cyBcdTlEM0MgMTQtMjUtNQorYWx3YXlzIFx1OUQzRCAxMjQ1LTM0LTIKK2Fsd2F5cyBcdTlEM0UgMTM0LTEyMzU2LTIKK2Fsd2F5cyBcdTlEM0YgMTMtMjM0Ni0zCithbHdheXMgXHU5RDQwIDEyNDUtMTM2LTIKK2Fsd2F5cyBcdTlENDEgMTMtMjQ2LTMKK2Fsd2F5cyBcdTlENDIgMTUtMjM0LTMKK2Fsd2F5cyBcdTlENDMgMS0xMjM1Ni0zCithbHdheXMgXHU5RDQ0IDEyLTE1Ni0zCithbHdheXMgXHU5RDQ1IDE0LTI1LTUKK2Fsd2F5cyBcdTlENDYgMTI0LTEzNTYtMgorYWx3YXlzIFx1OUQ0NyAxMzQ1LTIzNDUtMgorYWx3YXlzIFx1OUQ0OCAyMzQ2LTUKK2Fsd2F5cyBcdTlENDkgMTQtMTI0NTYtMgorYWx3YXlzIFx1OUQ0QSAxMy0yMzQ1Ni0yCithbHdheXMgXHU5RDRCIDEzLTE2LTUKK2Fsd2F5cyBcdTlENEMgMTI0LTM0LTIKK2Fsd2F5cyBcdTlENEQgMTIzNS0xMjQ1Ni0zCithbHdheXMgXHU5RDRFIDEyNC0yNS00CithbHdheXMgXHU5RDRGIDEzNS0zNC0zCithbHdheXMgXHU5RDUwIDM0LTIKK2Fsd2F5cyBcdTlENTEgMTMtNDUtMworYWx3YXlzIFx1OUQ1MiAxMjU2LTUKK2Fsd2F5cyBcdTlENTMgMTM1LTEyNi0yCithbHdheXMgXHU5RDU0IDEzLTI1Ni01CithbHdheXMgXHU5RDU1IDEzLTI1Ni01CithbHdheXMgXHU5RDU2IDEzNS0xNi01CithbHdheXMgXHU5RDU3IDE1LTE2LTMKK2Fsd2F5cyBcdTlENTggMTMtMjU2LTUKK2Fsd2F5cyBcdTlENTkgMTMtMTI1Ni0yCithbHdheXMgXHU5RDVBIDEyNC0zNC0zCithbHdheXMgXHU5RDVCIDEzLTEzNDU2LTMKK2Fsd2F5cyBcdTlENUMgMTI0LTE2LTIKK2Fsd2F5cyBcdTlENUQgMjM0Ni0yCithbHdheXMgXHU5RDVFIDIzNDYtMgorYWx3YXlzIFx1OUQ1RiAxMjMtNDU2LTIKK2Fsd2F5cyBcdTlENjAgMTIzNS0zNC0yCithbHdheXMgXHU5RDYxIDM0LTQKK2Fsd2F5cyBcdTlENjIgMjQtMTM2LTMKK2Fsd2F5cyBcdTlENjMgMTQtMjQ1Ni01CithbHdheXMgXHU5RDY0IDEzLTI0Ni00CithbHdheXMgXHU5RDY1IDEyMzQtMTIzNi01CithbHdheXMgXHU5RDY2IDE0LTM0LTUKK2Fsd2F5cyBcdTlENjcgMTIzNC0xMzQ1Ni0yCithbHdheXMgXHU5RDY4IDI0LTM0LTMKK2Fsd2F5cyBcdTlENjkgMTIzNDUtMzQtMgorYWx3YXlzIFx1OUQ2QSAxMjM2LTMKK2Fsd2F5cyBcdTlENkIgMS0xNDYtNQorYWx3YXlzIFx1OUQ2QyAxMjM0LTEzNTYtMgorYWx3YXlzIFx1OUQ2RCAyNDUtMTQ1Ni0yCithbHdheXMgXHU5RDZFIDI0NS0yMzQ1LTMKK2Fsd2F5cyBcdTlENkYgMTM1LTM1Ni0zCithbHdheXMgXHU5RDcwIDE0NS0yNDYtMworYWx3YXlzIFx1OUQ3MSAxNC0zNC01CithbHdheXMgXHU5RDcyIDI0NS0yMzYtNQorYWx3YXlzIFx1OUQ3MyAxMy0yMzQ1LTMKK2Fsd2F5cyBcdTlENzQgMTMtMTI1Ni0yCithbHdheXMgXHU5RDc1IDEyNC0zNC01CithbHdheXMgXHU5RDc2IDIzNDU2LTMKK2Fsd2F5cyBcdTlENzcgNDUtMworYWx3YXlzIFx1OUQ3OCAyNDUtMTYtMgorYWx3YXlzIFx1OUQ3OSAxNC0xNi0yCithbHdheXMgXHU5RDdBIDM0Ni01CithbHdheXMgXHU5RDdCIDEtMTI0Ni0zCithbHdheXMgXHU5RDdDIDEyMy0xMjM0Ni0zCithbHdheXMgXHU5RDdEIDE0NS0yNS01CithbHdheXMgXHU5RDdFIDEyMy0xMjM0NTYtMworYWx3YXlzIFx1OUQ3RiAyNC0xMzU2LTMKK2Fsd2F5cyBcdTlEODAgMjQ1LTE2LTIKK2Fsd2F5cyBcdTlEODEgMTMtMTM0NTYtMworYWx3YXlzIFx1OUQ4MiAxNi01CithbHdheXMgXHU5RDgzIDE2LTUKK2Fsd2F5cyBcdTlEODQgMTMtMTM0NTYtMworYWx3YXlzIFx1OUQ4NSAxMjUtMTU2LTMKK2Fsd2F5cyBcdTlEODYgMTQtMjQ1Ni0yCithbHdheXMgXHU5RDg3IDE0NS0xMjM0Ni0zCithbHdheXMgXHU5RDg4IDI0NS0xNi0zCithbHdheXMgXHU5RDg5IDEyLTEyMzQ1Ni0yCithbHdheXMgXHU5RDhBIDEzLTEzNTYtMworYWx3YXlzIFx1OUQ4QiAxMy0xMjU2LTMKK2Fsd2F5cyBcdTlEOEMgMjQ1LTEyNTYtMworYWx3YXlzIFx1OUQ4RCAxNi01CithbHdheXMgXHU5RDhFIDEyNS0xMjM0NTYtMworYWx3YXlzIFx1OUQ4RiAxMy0xNi0zCithbHdheXMgXHU5RDkwIDI0LTM0LTUKK2Fsd2F5cyBcdTlEOTEgMTM0NTYtMworYWx3YXlzIFx1OUQ5MiAxMi0xNTYtNQorYWx3YXlzIFx1OUQ5MyAxMzQtMjQ2LTIKK2Fsd2F5cyBcdTlEOTQgMTI0NS0xMjM1Ni0yCithbHdheXMgXHU5RDk1IDEyMzYtMworYWx3YXlzIFx1OUQ5NiAyNDUtMjM0LTMKK2Fsd2F5cyBcdTlEOTcgMTI0LTE2LTIKK2Fsd2F5cyBcdTlEOTggMTIzNS0zNC0yCithbHdheXMgXHU5RDk5IDEyNC0xNi0yCithbHdheXMgXHU5RDlBIDIzNDYtNQorYWx3YXlzIFx1OUQ5QiAxMy0zNDYtMworYWx3YXlzIFx1OUQ5QyAxMzQtMTQ2LTIKK2Fsd2F5cyBcdTlEOUQgMTIzNDUtMzQtMgorYWx3YXlzIFx1OUQ5RSAxMi0xMjM0NTYtMworYWx3YXlzIFx1OUQ5RiAxMjQtMzQtMgorYWx3YXlzIFx1OURBMCAyMzQ1LTQKK2Fsd2F5cyBcdTlEQTEgMTIzNS0yMzQ2LTIKK2Fsd2F5cyBcdTlEQTIgNDUtMgorYWx3YXlzIFx1OURBMyAxMjM0LTIzNDUtMworYWx3YXlzIFx1OURBNCAxMjMtMTIzNDU2LTMKK2Fsd2F5cyBcdTlEQTUgMTM0LTM1Ni0yCithbHdheXMgXHU5REE2IDEyMzUtMzQtMgorYWx3YXlzIFx1OURBNyAxMzQ1Ni0zCithbHdheXMgXHU5REE4IDEyLTEyNDU2LTUKK2Fsd2F5cyBcdTlEQTkgMzQtNQorYWx3YXlzIFx1OURBQSAxMy0xMjU2LTIKK2Fsd2F5cyBcdTlEQUIgMTQ1LTEyMzQ2LTMKK2Fsd2F5cyBcdTlEQUMgMjQ1LTEzNDYtMworYWx3YXlzIFx1OURBRCAxMjM0NS0xMzQ2LTQKK2Fsd2F5cyBcdTlEQUUgMTMtMzQtNQorYWx3YXlzIFx1OURBRiAxMzQ1Ni0zCithbHdheXMgXHU5REIwIDQ1LTIKK2Fsd2F5cyBcdTlEQjEgMTUtMjM0NS0zCithbHdheXMgXHU5REIyIDEyMzQ2LTMKK2Fsd2F5cyBcdTlEQjMgMjQtMTU2LTMKK2Fsd2F5cyBcdTlEQjQgMTIzNS0yMzQ2LTUKK2Fsd2F5cyBcdTlEQjUgMTItMzQtMgorYWx3YXlzIFx1OURCNiAxMjQtMTM0Ni0yCithbHdheXMgXHU5REI3IDE1LTIzNDU2LTIKK2Fsd2F5cyBcdTlEQjggMTI0NS0yNS01CithbHdheXMgXHU5REI5IDE0LTIzNC0yCithbHdheXMgXHU5REJBIDEzLTE2LTIKK2Fsd2F5cyBcdTlEQkIgMTIzNS0zNC0yCithbHdheXMgXHU5REJDIDEzLTIzNDUtMworYWx3YXlzIFx1OURCRCAxLTEyMzQ1Ni00CithbHdheXMgXHU5REJFIDEyMzUtMTIzNi01CithbHdheXMgXHU5REJGIDI0NS0xNTYtMgorYWx3YXlzIFx1OURDMCAyNDUtMTU2LTIKK2Fsd2F5cyBcdTlEQzEgMTYtNQorYWx3YXlzIFx1OURDMiAyNDYtNQorYWx3YXlzIFx1OURDMyAyMzQ1LTUKK2Fsd2F5cyBcdTlEQzQgMTMtMTYtMworYWx3YXlzIFx1OURDNSAxNC0xNi01CithbHdheXMgXHU5REM2IDEyNC0yMzQ1LTIKK2Fsd2F5cyBcdTlEQzcgMTIzLTEyMzU2LTUKK2Fsd2F5cyBcdTlEQzggMTI0LTE2LTIKK2Fsd2F5cyBcdTlEQzkgMTI0LTE2LTIKK2Fsd2F5cyBcdTlEQ0EgMTYtNQorYWx3YXlzIFx1OURDQiAxMjQtMzQtMgorYWx3YXlzIFx1OURDQyAxMzQtMzQ1LTQKK2Fsd2F5cyBcdTlEQ0QgMTMtMjQ2LTMKK2Fsd2F5cyBcdTlEQ0UgMTMtMTQ2LTMKK2Fsd2F5cyBcdTlEQ0YgMTI0LTIzNDUtMgorYWx3YXlzIFx1OUREMCAxMi0xMzYtMgorYWx3YXlzIFx1OUREMSAxMy0xNi0yCithbHdheXMgXHU5REQyIDEyNC0xMjQ1Ni0yCithbHdheXMgXHU5REQzIDEtMjM0Ni01CithbHdheXMgXHU5REQ0IDE0Ni0yCithbHdheXMgXHU5REQ1IDI0Ni00CithbHdheXMgXHU5REQ2IDE2LTMKK2Fsd2F5cyBcdTlERDcgMTIzNTYtMworYWx3YXlzIFx1OUREOCAxMi0xNTYtNQorYWx3YXlzIFx1OUREOSAxLTE1Ni01CithbHdheXMgXHU5RERBIDE0LTIzNC01CithbHdheXMgXHU5RERCIDEyNDUtMTIzNDYtMgorYWx3YXlzIFx1OUREQyAxNC0xMjM1Ni0yCithbHdheXMgXHU5REREIDEzNS0xNi01CithbHdheXMgXHU5RERFIDI0LTQ1Ni0zCithbHdheXMgXHU5RERGIDEtMjUtMgorYWx3YXlzIFx1OURFMCAxMjU2LTIKK2Fsd2F5cyBcdTlERTEgMzQtMgorYWx3YXlzIFx1OURFMiAxMy0yMzYtMgorYWx3YXlzIFx1OURFMyAxNDU2LTIKK2Fsd2F5cyBcdTlERTQgMTI0LTE2LTIKK2Fsd2F5cyBcdTlERTUgMTUtMTU2LTMKK2Fsd2F5cyBcdTlERTYgMTMtMjQ2LTMKK2Fsd2F5cyBcdTlERTcgMTYtNQorYWx3YXlzIFx1OURFOCAxMjM1LTM1LTMKK2Fsd2F5cyBcdTlERTkgMTM1LTE2LTUKK2Fsd2F5cyBcdTlERUEgMTM0NTYtMworYWx3YXlzIFx1OURFQiAxNS0zNC01CithbHdheXMgXHU5REVDIDEyMzUtNDU2LTIKK2Fsd2F5cyBcdTlERUQgMTIzNDUtMTIzNi0yCithbHdheXMgXHU5REVFIDEzLTI0Ni0zCithbHdheXMgXHU5REVGIDE0LTI0Ni0yCithbHdheXMgXHU5REYwIDIzNDUtNQorYWx3YXlzIFx1OURGMSAxMjMtMTQ2LTMKK2Fsd2F5cyBcdTlERjIgMTMtMjM0LTUKK2Fsd2F5cyBcdTlERjMgMTUtMjM0NS0yCithbHdheXMgXHU5REY0IDE1LTIzNDUtMgorYWx3YXlzIFx1OURGNSAxMjQtMzQtMgorYWx3YXlzIFx1OURGNiAxMzQtMjQ1Ni00CithbHdheXMgXHU5REY3IDEyNS0xMjM0NTYtMworYWx3YXlzIFx1OURGOCAxMjU2LTUKK2Fsd2F5cyBcdTlERjkgMTM0NTYtMworYWx3YXlzIFx1OURGQSAxNC0zNC01CithbHdheXMgXHU5REZCIDEyNC0xMjQ1Ni0yCithbHdheXMgXHU5REZDIDE1LTIzNDUtMgorYWx3YXlzIFx1OURGRCAxNS0yMzYtMgorYWx3YXlzIFx1OURGRSAxNi01CithbHdheXMgXHU5REZGIDEyMzQtMTYtNQorYWx3YXlzIFx1OUUwMCAyNC0zNC0yCithbHdheXMgXHU5RTAxIDE0LTI1LTIKK2Fsd2F5cyBcdTlFMDIgMTUtMTYtMworYWx3YXlzIFx1OUUwMyAxNi0yCithbHdheXMgXHU5RTA0IDEzLTE2LTMKK2Fsd2F5cyBcdTlFMDUgMS0yMzQ2LTIKK2Fsd2F5cyBcdTlFMDYgMTI1Ni0yCithbHdheXMgXHU5RTA3IDEtMTIzNi0zCithbHdheXMgXHU5RTA4IDM0Ni01CithbHdheXMgXHU5RTA5IDQ2LTIKK2Fsd2F5cyBcdTlFMEEgMTIzNC0xNi01CithbHdheXMgXHU5RTBCIDEzNDUtMTM0NTYtMgorYWx3YXlzIFx1OUUwQyAxMjM1LTM0LTUKK2Fsd2F5cyBcdTlFMEQgMTM0LTE2LTIKK2Fsd2F5cyBcdTlFMEUgMTM0NTYtMworYWx3YXlzIFx1OUUwRiAxMzQtMTM1Ni0yCithbHdheXMgXHU5RTEwIDE0NS0xNi0yCithbHdheXMgXHU5RTExIDIzNi01CithbHdheXMgXHU5RTEyIDEyNTYtNQorYWx3YXlzIFx1OUUxMyAxNC0zNTYtNAorYWx3YXlzIFx1OUUxNCAxMzUtMTI2LTIKK2Fsd2F5cyBcdTlFMTUgMTQtMzQtMgorYWx3YXlzIFx1OUUxNiAxMjM1LTIzNDYtNQorYWx3YXlzIFx1OUUxNyAxNC0xMjM0Ni0yCithbHdheXMgXHU5RTE4IDI0LTQ1Ni0zCithbHdheXMgXHU5RTE5IDIzNi01CithbHdheXMgXHU5RTFBIDEzNDU2LTMKK2Fsd2F5cyBcdTlFMUIgMTMtMTI0NTYtNQorYWx3YXlzIFx1OUUxQyAyNDUtMTI1Ni0yCithbHdheXMgXHU5RTFEIDE0LTE2LTIKK2Fsd2F5cyBcdTlFMUUgMTQtMTI0NTYtMgorYWx3YXlzIFx1OUUxRiAxMzQ1LTI0Ni00CithbHdheXMgXHU5RTIwIDEzLTIzNC0zCithbHdheXMgXHU5RTIxIDEzLTE2LTMKK2Fsd2F5cyBcdTlFMjIgNDUtMworYWx3YXlzIFx1OUUyMyAxMzQtMTM0NTYtMgorYWx3YXlzIFx1OUUyNCAyNC0xNTYtMworYWx3YXlzIFx1OUUyNSAxMjM1Ni0zCithbHdheXMgXHU5RTI2IDIzNDU2LTMKK2Fsd2F5cyBcdTlFMjcgMjQ1LTEzNDYtMworYWx3YXlzIFx1OUUyOCAxMzUtMTQ2LTQKK2Fsd2F5cyBcdTlFMjkgMS0xMzYtNQorYWx3YXlzIFx1OUUyQSAxMy0zNC0zCithbHdheXMgXHU5RTJCIDE0NS0xMjM0Ni0zCithbHdheXMgXHU5RTJDIDE0LTM0LTIKK2Fsd2F5cyBcdTlFMkQgMjM0NTYtMworYWx3YXlzIFx1OUUyRSAxNS0yNDYtMworYWx3YXlzIFx1OUUyRiA0Ni0zCithbHdheXMgXHU5RTMwIDE0LTEzNDU2LTIKK2Fsd2F5cyBcdTlFMzEgMTItMTU2LTMKK2Fsd2F5cyBcdTlFMzIgMjQ1LTEyNTYtMgorYWx3YXlzIFx1OUUzMyA0NS0zCithbHdheXMgXHU5RTM0IDE1LTIzNi0yCithbHdheXMgXHU5RTM1IDEyNC0yNS0yCithbHdheXMgXHU5RTM2IDE1LTE1Ni0zCithbHdheXMgXHU5RTM3IDEtMTU2LTUKK2Fsd2F5cyBcdTlFMzggMTU2LTIKK2Fsd2F5cyBcdTlFMzkgMTMtMzUtMworYWx3YXlzIFx1OUUzQSAxNS0yMzQtMworYWx3YXlzIFx1OUUzQiAxMjM1LTEzNTYtMgorYWx3YXlzIFx1OUUzQyAxLTEyMzU2LTMKK2Fsd2F5cyBcdTlFM0QgMTMtMjM0Ni0zCithbHdheXMgXHU5RTNFIDE0LTEyNDU2LTIKK2Fsd2F5cyBcdTlFM0YgMTIzNS0xMjM0Ni0yCithbHdheXMgXHU5RTQwIDM0LTIKK2Fsd2F5cyBcdTlFNDEgMTM1LTEyNi0yCithbHdheXMgXHU5RTQyIDE0LTE2LTIKK2Fsd2F5cyBcdTlFNDMgMTMtNDUtMworYWx3YXlzIFx1OUU0NCAxMjM1LTM0LTIKK2Fsd2F5cyBcdTlFNDUgMjM0Ni0yCithbHdheXMgXHU5RTQ2IDEyNTYtNQorYWx3YXlzIFx1OUU0NyAxNS0yMzQ1LTIKK2Fsd2F5cyBcdTlFNDggMTI0LTE2LTIKK2Fsd2F5cyBcdTlFNDkgMzQtNAorYWx3YXlzIFx1OUU0QSAyNDUtMjM2LTUKK2Fsd2F5cyBcdTlFNEIgMTM0LTI0Ni0yCithbHdheXMgXHU5RTRDIDEyMzYtMworYWx3YXlzIFx1OUU0RCAxMjMtMTIzNDU2LTMKK2Fsd2F5cyBcdTlFNEUgMTM1LTM1Ni0zCithbHdheXMgXHU5RTRGIDEyMzQtMTM1Ni0yCithbHdheXMgXHU5RTUwIDI0NS0yMzQ1LTMKK2Fsd2F5cyBcdTlFNTEgMTItMTIzNDU2LTIKK2Fsd2F5cyBcdTlFNTIgMTMtMTM1Ni0zCithbHdheXMgXHU5RTUzIDQ1LTMKK2Fsd2F5cyBcdTlFNTQgMTUtMzQtNQorYWx3YXlzIFx1OUU1NSAxMjM1LTM0LTIKK2Fsd2F5cyBcdTlFNTYgMTIzNS0yMzQ2LTIKK2Fsd2F5cyBcdTlFNTcgMjM0Ni01CithbHdheXMgXHU5RTU4IDEyMzUtMzQtMgorYWx3YXlzIFx1OUU1OSAyNDUtMjM0LTMKK2Fsd2F5cyBcdTlFNUEgMjQ1LTE1Ni0yCithbHdheXMgXHU5RTVCIDEzNC0zNTYtMgorYWx3YXlzIFx1OUU1QyAzNC01CithbHdheXMgXHU5RTVEIDE2LTUKK2Fsd2F5cyBcdTlFNUUgMjQ2LTUKK2Fsd2F5cyBcdTlFNUYgMTIzNDYtMworYWx3YXlzIFx1OUU2MCAxNC0yMzQtMgorYWx3YXlzIFx1OUU2MSAxMy0xNi0yCithbHdheXMgXHU5RTYyIDE2LTUKK2Fsd2F5cyBcdTlFNjMgMTMtMjM0NS0zCithbHdheXMgXHU5RTY0IDEyMzUtMjM0Ni01CithbHdheXMgXHU5RTY1IDE2LTMKK2Fsd2F5cyBcdTlFNjYgMTM0NTYtMworYWx3YXlzIFx1OUU2NyAxLTIzNDYtNQorYWx3YXlzIFx1OUU2OCAxNC0yMzQtNQorYWx3YXlzIFx1OUU2OSAxNC0yNDYtMgorYWx3YXlzIFx1OUU2QSAxMy0yNDYtMworYWx3YXlzIFx1OUU2QiAxMy0yMzQtNQorYWx3YXlzIFx1OUU2QyAxMjU2LTUKK2Fsd2F5cyBcdTlFNkQgMTQtMzQtNQorYWx3YXlzIFx1OUU2RSAxNS00NS0yCithbHdheXMgXHU5RTZGIDEtMTIzNi0zCithbHdheXMgXHU5RTcwIDEzNDU2LTMKK2Fsd2F5cyBcdTlFNzEgMTIzNS0zNC01CithbHdheXMgXHU5RTcyIDEzNC0xMzU2LTIKK2Fsd2F5cyBcdTlFNzMgMTMtMTI0NTYtNQorYWx3YXlzIFx1OUU3NCAyNC00NTYtMworYWx3YXlzIFx1OUU3NSAxNC0zNC00CithbHdheXMgXHU5RTc2IDEzLTE0NTYtMworYWx3YXlzIFx1OUU3NyAxNC0xMzQ1Ni0yCithbHdheXMgXHU5RTc4IDEzLTIzNDUtNAorYWx3YXlzIFx1OUU3OSAxNS0yMzQ1LTIKK2Fsd2F5cyBcdTlFN0EgMjQ1LTI1LTIKK2Fsd2F5cyBcdTlFN0IgMTMtMjM0NS00CithbHdheXMgXHU5RTdDIDEzLTIzNDUtNAorYWx3YXlzIFx1OUU3RCAyMzQ1LTIKK2Fsd2F5cyBcdTlFN0UgMjQ1LTI1LTIKK2Fsd2F5cyBcdTlFN0YgMTQtMzQtNQorYWx3YXlzIFx1OUU4MCAyMzQtMworYWx3YXlzIFx1OUU4MSAyNDUtMzQtMworYWx3YXlzIFx1OUU4MiAxMy0xNi00CithbHdheXMgXHU5RTgzIDEzNS0yNDYtMworYWx3YXlzIFx1OUU4NCAyNDUtMzQtMworYWx3YXlzIFx1OUU4NSAxMzUtMjQ2LTMKK2Fsd2F5cyBcdTlFODYgMS0zNC01CithbHdheXMgXHU5RTg3IDEzLTI1Ni0zCithbHdheXMgXHU5RTg4IDEtMzQtNAorYWx3YXlzIFx1OUU4OSAxMy0yMzQ1LTMKK2Fsd2F5cyBcdTlFOEEgMTM0LTE2LTIKK2Fsd2F5cyBcdTlFOEIgMTM0LTE2LTIKK2Fsd2F5cyBcdTlFOEMgMTI1Ni00CithbHdheXMgXHU5RThEIDE0LTIzNC0yCithbHdheXMgXHU5RThFIDEyLTEzNi0yCithbHdheXMgXHU5RThGIDEzLTI1Ni0zCithbHdheXMgXHU5RTkwIDE0LTE0NTYtMgorYWx3YXlzIFx1OUU5MSAxMzQ1LTE2LTIKK2Fsd2F5cyBcdTlFOTIgMjQ1LTE2LTIKK2Fsd2F5cyBcdTlFOTMgMTQtMzQtNQorYWx3YXlzIFx1OUU5NCAxMy0yMzQtNQorYWx3YXlzIFx1OUU5NSAxMy0yNTYtMworYWx3YXlzIFx1OUU5NiAxMy0xMzQ1Ni0zCithbHdheXMgXHU5RTk3IDE0LTE2LTUKK2Fsd2F5cyBcdTlFOTggMTUtNDYtMworYWx3YXlzIFx1OUU5OSAyMzQ1LTIKK2Fsd2F5cyBcdTlFOUEgMTMtMjM0NTYtMworYWx3YXlzIFx1OUU5QiAxMzQtMTYtMgorYWx3YXlzIFx1OUU5QyAxNC0xNi01CithbHdheXMgXHU5RTlEIDI0LTIzNDYtNQorYWx3YXlzIFx1OUU5RSAxLTEzNDYtMworYWx3YXlzIFx1OUU5RiAxNC0xNDU2LTIKK2Fsd2F5cyBcdTlFQTAgMTMtMTM0NTYtMworYWx3YXlzIFx1OUVBMSAxMy0xNi0zCithbHdheXMgXHU5RUEyIDE0LTEzNDU2LTIKK2Fsd2F5cyBcdTlFQTMgMjM0NS0yCithbHdheXMgXHU5RUE0IDI0NS0zNC0zCithbHdheXMgXHU5RUE1IDEzNC0yNDU2LTUKK2Fsd2F5cyBcdTlFQTYgMTM0LTI0NTYtNQorYWx3YXlzIFx1OUVBNyAxMy0yMzQ2LTMKK2Fsd2F5cyBcdTlFQTggMTItMTQ2LTQKK2Fsd2F5cyBcdTlFQTkgMTIzNDUtMzQtMworYWx3YXlzIFx1OUVBQSAxMzQtMjM0NS01CithbHdheXMgXHU5RUFCIDEzNC0yMzQ1LTUKK2Fsd2F5cyBcdTlFQUMgMTIzNDUtMzQtMworYWx3YXlzIFx1OUVBRCAxMjM0LTE0Ni01CithbHdheXMgXHU5RUFFIDI0NS0xMjU2LTUKK2Fsd2F5cyBcdTlFQUYgMjQ1LTEyNTYtMgorYWx3YXlzIFx1OUVCMCAxMzQtMTIzNTYtMgorYWx3YXlzIFx1OUVCMSAxMjM0NS0zNC0zCithbHdheXMgXHU5RUIyIDE1LTIzNDUtNQorYWx3YXlzIFx1OUVCMyAxNC0yNDU2LTIKK2Fsd2F5cyBcdTlFQjQgMjQ1LTEyNTYtMgorYWx3YXlzIFx1OUVCNSAxMzQtMjM0NS01CithbHdheXMgXHU5RUI2IDEyLTE1Ni0zCithbHdheXMgXHU5RUI3IDEyMzQ1LTEzNTYtMworYWx3YXlzIFx1OUVCOCAxMjM0NS0zNC0zCithbHdheXMgXHU5RUI5IDI0NS0xMjU2LTIKK2Fsd2F5cyBcdTlFQkEgMTM0LTIzNDUtNQorYWx3YXlzIFx1OUVCQiAxMzQtMzQ1LTIKK2Fsd2F5cyBcdTlFQkMgMTM0LTIzNDYtMQorYWx3YXlzIFx1OUVCRCAxMzQtMjM0Ni0xCithbHdheXMgXHU5RUJFIDEyMzUtMTI0Ni0zCithbHdheXMgXHU5RUJGIDEzNC0xMjYtNAorYWx3YXlzIFx1OUVDMCAxMjUtMTIzNTYtMworYWx3YXlzIFx1OUVDMSAxMzQ1LTEzNi0zCithbHdheXMgXHU5RUMyIDEyMzQ1LTEzNi0yCithbHdheXMgXHU5RUMzIDEyMzUtNDU2LTIKK2Fsd2F5cyBcdTlFQzQgMTIzNS00NTYtMgorYWx3YXlzIFx1OUVDNSAxMy0xNDU2LTMKK2Fsd2F5cyBcdTlFQzYgMTMtNDU2LTMKK2Fsd2F5cyBcdTlFQzcgMTI0LTIzNDUtMworYWx3YXlzIFx1OUVDOCAxMjQtMTIzNTYtNAorYWx3YXlzIFx1OUVDOSAxMjM1LTEyMzQ2LTIKK2Fsd2F5cyBcdTlFQ0EgMTUtMTYtMworYWx3YXlzIFx1OUVDQiAxMjMtNDU2LTUKK2Fsd2F5cyBcdTlFQ0MgMTIzNS0xMjM0Ni0yCithbHdheXMgXHU5RUNEIDI0LTM0LTQKK2Fsd2F5cyBcdTlFQ0UgMTQtMTYtMgorYWx3YXlzIFx1OUVDRiAxMzQ1LTIzNDUtMgorYWx3YXlzIFx1OUVEMCAxMi0xNTYtMworYWx3YXlzIFx1OUVEMSAxMjM1LTM1Ni0zCithbHdheXMgXHU5RUQyIDEyMzUtMzU2LTMKK2Fsd2F5cyBcdTlFRDMgMTYtNQorYWx3YXlzIFx1OUVENCAyNDUtMjM0NS0yCithbHdheXMgXHU5RUQ1IDE0NS0xMjM2LTQKK2Fsd2F5cyBcdTlFRDYgMTUtMTYtNQorYWx3YXlzIFx1OUVENyAxMjQtMTI0NTYtNAorYWx3YXlzIFx1OUVEOCAxMzQtMTI2LTUKK2Fsd2F5cyBcdTlFRDkgMTM0LTEyNi01CithbHdheXMgXHU5RURBIDI0NS0yMzQ1LTIKK2Fsd2F5cyBcdTlFREIgMTQ1LTI0NTYtNQorYWx3YXlzIFx1OUVEQyAxMi0zNC01CithbHdheXMgXHU5RUREIDIzNC00CithbHdheXMgXHU5RURFIDE0NS0yMzQ1LTQKK2Fsd2F5cyBcdTlFREYgMTYtMworYWx3YXlzIFx1OUVFMCAxNS0yMzQ1Ni0yCithbHdheXMgXHU5RUUxIDIzNDUtNAorYWx3YXlzIFx1OUVFMiAyNDUtMTI1Ni01CithbHdheXMgXHU5RUUzIDEzNC0zNTYtNAorYWx3YXlzIFx1OUVFNCAyMzQ1LTQKK2Fsd2F5cyBcdTlFRTUgMjQ1LTEzNDU2LTIKK2Fsd2F5cyBcdTlFRTYgMTI1Ni01CithbHdheXMgXHU5RUU3IDE0LTE2LTIKK2Fsd2F5cyBcdTlFRTggMTQ1LTEzNDYtNAorYWx3YXlzIFx1OUVFOSAxNDUtMzQtMgorYWx3YXlzIFx1OUVFQSAyNDUtMTIzNi00CithbHdheXMgXHU5RUVCIDE0NTYtMworYWx3YXlzIFx1OUVFQyAxMjM2LTUKK2Fsd2F5cyBcdTlFRUQgMjM0NS00CithbHdheXMgXHU5RUVFIDEyNC0xMjM2LTQKK2Fsd2F5cyBcdTlFRUYgMTIzNi01CithbHdheXMgXHU5RUYwIDEtMTM2LTQKK2Fsd2F5cyBcdTlFRjEgMTQ1LTI0NTYtNQorYWx3YXlzIFx1OUVGMiAyNDUtMTIzNi00CithbHdheXMgXHU5RUYzIDE2LTMKK2Fsd2F5cyBcdTlFRjQgMTM0LTM1Ni0yCithbHdheXMgXHU5RUY1IDE0NS0xMjM2LTQKK2Fsd2F5cyBcdTlFRjYgMjM0NS00CithbHdheXMgXHU5RUY3IDE0NS0zNC0yCithbHdheXMgXHU5RUY4IDE0LTM0LTIKK2Fsd2F5cyBcdTlFRjkgMS0xNTYtNAorYWx3YXlzIFx1OUVGQSAxMjM0NS0xMzYtNAorYWx3YXlzIFx1OUVGQiAxMjM0NS0zNC0yCithbHdheXMgXHU5RUZDIDEyMzQ1LTM0LTQKK2Fsd2F5cyBcdTlFRkQgMTM0LTE0NTYtNAorYWx3YXlzIFx1OUVGRSAxMzQtMTQ1Ni00CithbHdheXMgXHU5RUZGIDQ1LTIKK2Fsd2F5cyBcdTlGMDAgMjQ1LTM0LTUKK2Fsd2F5cyBcdTlGMDEgMjQ1LTEyNTYtNQorYWx3YXlzIFx1OUYwMiAxMi0xNDYtMgorYWx3YXlzIFx1OUYwMyAzNS0zCithbHdheXMgXHU5RjA0IDEtMzQtMworYWx3YXlzIFx1OUYwNSAxLTE1Ni0zCithbHdheXMgXHU5RjA2IDEzNC0xMzQ2LTIKK2Fsd2F5cyBcdTlGMDcgMTQ2LTIKK2Fsd2F5cyBcdTlGMDggMTM1LTM0Ni0zCithbHdheXMgXHU5RjA5IDEyNC0yNS0yCithbHdheXMgXHU5RjBBIDEzNS0xNi01CithbHdheXMgXHU5RjBCIDQ1LTIKK2Fsd2F5cyBcdTlGMEMgMTItMTQ2LTIKK2Fsd2F5cyBcdTlGMEQgMTI0LTI1LTIKK2Fsd2F5cyBcdTlGMEUgMTQ1LTEzNDU2LTQKK2Fsd2F5cyBcdTlGMEYgMTM0LTE2LTUKK2Fsd2F5cyBcdTlGMTAgMTM0NS0yNDU2LTUKK2Fsd2F5cyBcdTlGMTEgMTQ1LTEzNDU2LTQKK2Fsd2F5cyBcdTlGMTIgMTI1LTE1Ni0zCithbHdheXMgXHU5RjEzIDEzLTM0LTQKK2Fsd2F5cyBcdTlGMTQgMTMtMzQtNAorYWx3YXlzIFx1OUYxNSAxNDUtMTIzNDYtMworYWx3YXlzIFx1OUYxNiAxMjM0NS0xMzYtMgorYWx3YXlzIFx1OUYxNyAxMjQtMTQ2LTIKK2Fsd2F5cyBcdTlGMTggNDUtMworYWx3YXlzIFx1OUYxOSAxMjM0LTE2LTIKK2Fsd2F5cyBcdTlGMUEgMTItMTM0Ni0zCithbHdheXMgXHU5RjFCIDEzLTE0Ni0zCithbHdheXMgXHU5RjFDIDI0NS0xNi01CithbHdheXMgXHU5RjFEIDQ1LTMKK2Fsd2F5cyBcdTlGMUUgMTI0LTEzNDYtMworYWx3YXlzIFx1OUYxRiAxMjQtMTM1Ni0zCithbHdheXMgXHU5RjIwIDI0LTM0LTQKK2Fsd2F5cyBcdTlGMjEgMjQtMzQtNAorYWx3YXlzIFx1OUYyMiAxMjM0NS0xMzYtMgorYWx3YXlzIFx1OUYyMyAxMjM0NS0zNTYtNQorYWx3YXlzIFx1OUYyNCAxMjM0NTYtMgorYWx3YXlzIFx1OUYyNSAxMzUtMzQ1LTIKK2Fsd2F5cyBcdTlGMjYgMTQ1LTI0Ni0zCithbHdheXMgXHU5RjI3IDEyNC0yNS0yCithbHdheXMgXHU5RjI4IDEtMTIzNDYtMworYWx3YXlzIFx1OUYyOSAyNDUtMTI1Ni0yCithbHdheXMgXHU5RjJBIDI0LTEzNTYtMworYWx3YXlzIFx1OUYyQiAyNC0xNTYtMgorYWx3YXlzIFx1OUYyQyAyMzQtNQorYWx3YXlzIFx1OUYyRCAyNC0xNTYtMgorYWx3YXlzIFx1OUYyRSAxMjQtMTM0NTYtMgorYWx3YXlzIFx1OUYyRiAzNC0yCithbHdheXMgXHU5RjMwIDEzLTEyNTYtMgorYWx3YXlzIFx1OUYzMSAxMy0xMzQ1Ni0zCithbHdheXMgXHU5RjMyIDEyMzUtMTIzNDU2LTIKK2Fsd2F5cyBcdTlGMzMgMTMtMTI1Ni0yCithbHdheXMgXHU5RjM0IDIzNDUtNAorYWx3YXlzIFx1OUYzNSAxMjQtMzQtMgorYWx3YXlzIFx1OUYzNiAxNS0xNTYtMworYWx3YXlzIFx1OUYzNyAxNS0xNi0zCithbHdheXMgXHU5RjM4IDE1LTIzNDUtNQorYWx3YXlzIFx1OUYzOSAyMzQ1LTQKK2Fsd2F5cyBcdTlGM0EgMTQtMzU2LTIKK2Fsd2F5cyBcdTlGM0IgMTM1LTE2LTIKK2Fsd2F5cyBcdTlGM0MgMjQ2LTQKK2Fsd2F5cyBcdTlGM0QgMjQ1LTIzNC0yCithbHdheXMgXHU5RjNFIDEyMzUtMTIzNi0zCithbHdheXMgXHU5RjNGIDM0LTMKK2Fsd2F5cyBcdTlGNDAgMzQtNQorYWx3YXlzIFx1OUY0MSAxMjM1LTEyMzU2LTMKK2Fsd2F5cyBcdTlGNDIgMTUtMTYtNQorYWx3YXlzIFx1OUY0MyAxMjM1LTIzNDYtMgorYWx3YXlzIFx1OUY0NCAxLTM0NS0zCithbHdheXMgXHU5RjQ1IDE1LTIzNC01CithbHdheXMgXHU5RjQ2IDEyMzQ2LTUKK2Fsd2F5cyBcdTlGNDcgMS0zNDUtMworYWx3YXlzIFx1OUY0OCAxMzQ1LTEyMzQ2LTIKK2Fsd2F5cyBcdTlGNDkgMTM0NS0xMzQ2LTUKK2Fsd2F5cyBcdTlGNEEgMjQ1LTE2LTIKK2Fsd2F5cyBcdTlGNEIgMS0yNDU2LTMKK2Fsd2F5cyBcdTlGNEMgMTMtMTYtNQorYWx3YXlzIFx1OUY0RCAxMjUtMTU2LTMKK2Fsd2F5cyBcdTlGNEUgMTMtMTYtMworYWx3YXlzIFx1OUY0RiAxMy0xNi0zCithbHdheXMgXHU5RjUwIDI0NS0xNi0yCithbHdheXMgXHU5RjUxIDEzLTE2LTMKK2Fsd2F5cyBcdTlGNTIgMTItMTU2LTQKK2Fsd2F5cyBcdTlGNTMgMTItMTM2LTUKK2Fsd2F5cyBcdTlGNTQgMTItMTM2LTUKK2Fsd2F5cyBcdTlGNTUgMTIzNS0yMzQ2LTIKK2Fsd2F5cyBcdTlGNTYgMjM0NTYtMgorYWx3YXlzIFx1OUY1NyAxNDU2LTIKK2Fsd2F5cyBcdTlGNTggMTUtMzQ2LTUKK2Fsd2F5cyBcdTlGNTkgMTM1LTE0Ni0zCithbHdheXMgXHU5RjVBIDI0NS0yNS01CithbHdheXMgXHU5RjVCIDE1LTM0Ni01CithbHdheXMgXHU5RjVDIDEyNS0xNTYtMworYWx3YXlzIFx1OUY1RCAxMi0xNTYtMworYWx3YXlzIFx1OUY1RSAyMzQ1LTQKK2Fsd2F5cyBcdTlGNUYgMTMtMTI1Ni00CithbHdheXMgXHU5RjYwIDEyNC0yNDYtMgorYWx3YXlzIFx1OUY2MSAxNC0xMzQ1Ni0yCithbHdheXMgXHU5RjYyIDE0LTEzNDU2LTIKK2Fsd2F5cyBcdTlGNjMgMTItMzQtMworYWx3YXlzIFx1OUY2NCAyNDUtNDUtMgorYWx3YXlzIFx1OUY2NSAxNS0zNDYtNQorYWx3YXlzIFx1OUY2NiAxNDU2LTIKK2Fsd2F5cyBcdTlGNjcgMTM0NS0zNDYtNQorYWx3YXlzIFx1OUY2OCAxMy0yMzQtNQorYWx3YXlzIFx1OUY2OSAyNDYtNAorYWx3YXlzIFx1OUY2QSAxMi0yNS01CithbHdheXMgXHU5RjZCIDEyMy0xMjM0NTYtNAorYWx3YXlzIFx1OUY2QyAxMjU2LTQKK2Fsd2F5cyBcdTlGNkQgMTItMzQtNAorYWx3YXlzIFx1OUY2RSAxNi00CithbHdheXMgXHU5RjZGIDEzNDUtMTYtMgorYWx3YXlzIFx1OUY3MCAxMjUtMjM0Ni0yCithbHdheXMgXHU5RjcxIDEyNS0xMjM1Ni0zCithbHdheXMgXHU5RjcyIDI0NS0xMjU2LTQKK2Fsd2F5cyBcdTlGNzMgNDUtNAorYWx3YXlzIFx1OUY3NCAyMzQ1LTQKK2Fsd2F5cyBcdTlGNzUgMTI1Ni0yCithbHdheXMgXHU5Rjc2IDIzNDYtNQorYWx3YXlzIFx1OUY3NyAyNS01CithbHdheXMgXHU5Rjc4IDE2LTUKK2Fsd2F5cyBcdTlGNzkgMTItMTU2LTMKK2Fsd2F5cyBcdTlGN0EgMTI1LTEyMzU2LTMKK2Fsd2F5cyBcdTlGN0IgMTQ1LTIzNDUtMworYWx3YXlzIFx1OUY3QyAxMi0zNC00CithbHdheXMgXHU5RjdEIDEzLTE0NTYtNQorYWx3YXlzIFx1OUY3RSAyMzQ1Ni01CithbHdheXMgXHU5RjdGIDEyLTE1Ni00CithbHdheXMgXHU5RjgwIDEyLTEzNi01CithbHdheXMgXHU5RjgxIDEyMzUtMjM0Ni0yCithbHdheXMgXHU5RjgyIDE0NTYtMgorYWx3YXlzIFx1OUY4MyAxMy0xMjU2LTQKK2Fsd2F5cyBcdTlGODQgMTQtMTM0NTYtMgorYWx3YXlzIFx1OUY4NSAxMzUtMTQ2LTMKK2Fsd2F5cyBcdTlGODYgMTI0LTI0Ni0yCithbHdheXMgXHU5Rjg3IDEyNS0xNTYtMworYWx3YXlzIFx1OUY4OCAxNDU2LTIKK2Fsd2F5cyBcdTlGODkgMTI1Ni00CithbHdheXMgXHU5RjhBIDEyLTI1LTUKK2Fsd2F5cyBcdTlGOEIgMjQ1LTEyNTYtNAorYWx3YXlzIFx1OUY4QyAyNS01CithbHdheXMgXHU5RjhEIDE0LTEyMzQ2LTIKK2Fsd2F5cyBcdTlGOEUgMTIzNC0xMzQ2LTIKK2Fsd2F5cyBcdTlGOEYgMTMtMTIzNDYtMworYWx3YXlzIFx1OUY5MCAxMjM0LTEzNDYtMgorYWx3YXlzIFx1OUY5MSAyMzQ1LTQKK2Fsd2F5cyBcdTlGOTIgMTQtMTIzNDYtMgorYWx3YXlzIFx1OUY5MyAxNC0xMjM0Ni0yCithbHdheXMgXHU5Rjk0IDEzLTEyMzQ2LTMKK2Fsd2F5cyBcdTlGOTUgMTIzLTEyMzYtMworYWx3YXlzIFx1OUY5NiAxMjQtMzQ1LTUKK2Fsd2F5cyBcdTlGOTcgMTQtMTM0NTYtMgorYWx3YXlzIFx1OUY5OCAxMjQtMzQ1LTUKK2Fsd2F5cyBcdTlGOTkgMTQtMTIzNDYtMgorYWx3YXlzIFx1OUY5QSAxMy0xMjM0Ni0zCithbHdheXMgXHU5RjlCIDEyMy0xMjM2LTMKK2Fsd2F5cyBcdTlGOUMgMTMtMTI0Ni0zCithbHdheXMgXHU5RjlEIDI0NS0yMzQtMworYWx3YXlzIFx1OUY5RSAxMzUtMzQ2LTMKK2Fsd2F5cyBcdTlGOUYgMTMtMTI0Ni0zCithbHdheXMgXHU5RkEwIDIzNi01CithbHdheXMgXHU5RkExIDEyLTEyNDYtMworYWx3YXlzIFx1OUZBMiAxMjM1LTIzNDYtMgorYWx3YXlzIFx1OUZBMyAxMy0yMzYtMgorYWx3YXlzIFx1OUZBNCAxNS0zNDYtMgorYWx3YXlzIFx1OUZBNSAxMjU2LTUKK2Fsd2F5cyBcdTlGQTYgMTItMTM0Ni0yCithbHdheXMgXHU5RkE3IDI0LTM0LTUKK2Fsd2F5cyBcdTlGQTggMTIzNS0yMzU2LTIKK2Fsd2F5cyBcdTlGQTkgMTMtMTQ1Ni01CithbHdheXMgXHU5RkFBIDEyMzQ1LTM0LTUKK2Fsd2F5cyBcdTlGQUIgMTMtMTIzNi01CithbHdheXMgXHU5RkFDIDQ1Ni00CithbHdheXMgXHU5RkFEIDE2LTUKK2Fsd2F5cyBcdTlGQUUgMTYtNQorYWx3YXlzIFx1OUZBRiAyMzYtNQorYWx3YXlzIFx1OUZCMCAxLTE1Ni00CithbHdheXMgXHU5RkIxIDE1LTE0NTYtNQorYWx3YXlzIFx1OUZCMiAxMjMtMzQtNQorYWx3YXlzIFx1OUZCMyAxNC0zNC01CithbHdheXMgXHU5RkI0IDE2LTQKK2Fsd2F5cyBcdTlGQjUgMjQtMTIzNTYtNAorYWx3YXlzIFx1OUZCNiAyNC0xMzU2LTMKK2Fsd2F5cyBcdTlGQjcgMTM0NS0yMzQ1LTUKK2Fsd2F5cyBcdTlGQjggMTIzNDUtMzQtMgorYWx3YXlzIFx1OUZCOSAxMy00NS01CithbHdheXMgXHU5RkJBIDEtMjUtMgorYWx3YXlzIFx1OUZCQiAxNC0xMjQ1Ni0yCmRpZmYgLS1naXQgYS9UYWJsZXMvQ29udHJhY3Rpb24vemhfVFcuY3RiIGIvVGFibGVzL0NvbnRyYWN0aW9uL3poX1RXLmN0YgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MTM0MmFkCi0tLSAvZGV2L251bGwKKysrIGIvVGFibGVzL0NvbnRyYWN0aW9uL3poX1RXLmN0YgpAQCAtMCwwICsxLDM1ODYgQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyMgICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisjCisjIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyMKKyMgQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjIEJSTFRUWSBDb250cmFjdGlvbiBUYWJsZSAtIENoaW5lc2UgKFRhaXdhbiwgdW5jb250cmFjdGVkKQorIyBDcmVhdGVkIGJ5IENvc2NlbGwgS2FvIDxjb3NjZWxsQGdtYWlsLmNvbT4gKDIwMTktMikKKworI0VuZ2xpc2ggY2hhcmFjdGVycworaW5jbHVkZSBuYWJjYy5jdGkKKworI1VuaWNvZGUgc3ltYm9scworYWx3YXlzIFx1MDBFRiA0LTI0CithbHdheXMgXHUwMEEwIDAKK2Fsd2F5cyBcdTAwQTEgMzQtMjM0NgorYWx3YXlzIFx1MDBBMiA0LTE0CithbHdheXMgXHUwMEEzIDQtMTIzCithbHdheXMgXHUwMEE0IDQ1Ni0xMjQ2CithbHdheXMgXHUwMEE1IDM2LTEzNDU2Ny0xNTctMTM0NTctMzYKK2Fsd2F5cyBcdTAwQTcgMTI0Ni0yNTYKK2Fsd2F5cyBcdTAwQTggNDU2LTM2CithbHdheXMgXHUwMEE5IDEyMzU2LTE0Ny0yMzQ1NgorYWx3YXlzIFx1MDBBQSAzNi0xMjQ3LTE1Ny0xMzQ3LTM2CithbHdheXMgXHUwMEFCIDEyNi0xMjYKK2Fsd2F5cyBcdTAwQUMgMzYtMTM0NTctMTM1Ny0yMzQ1Ny0zNgorYWx3YXlzIFx1MDBBRCAzNgorYWx3YXlzIFx1MDBBRSAxMjM1Ni0xMjM1Ny0yMzQ1NgorYWx3YXlzIFx1MDBBRiAxNTYtMzYKK2Fsd2F5cyBcdTAwQjAgNDUtNDYtMTYKK2Fsd2F5cyBcdTAwQjEgMzQ2LTM2CithbHdheXMgXHUwMEIyIDQ1Ny0yMworYWx3YXlzIFx1MDBCMyA0NTctMjUKK2Fsd2F5cyBcdTAwQjQgNAorYWx3YXlzIFx1MDBCNSA0Ni0xMzQKK2Fsd2F5cyBcdTAwQjYgMTI0Ni0xMjM0CithbHdheXMgXHUwMEI3IDQ2CithbHdheXMgXHUwMEI4IDIzNDYtNAorYWx3YXlzIFx1MDBCOSA0NTctMgorYWx3YXlzIFx1MDBCQSAzNi0xMzQ3LTE3LTIzNDctMzYKK2Fsd2F5cyBcdTAwQkIgMzQ1LTM0NQorYWx3YXlzIFx1MDBCQyAyLTM0LTI1NgorYWx3YXlzIFx1MDBCRCAyLTM0LTIzCithbHdheXMgXHUwMEJFIDI1LTM0LTI1NgorYWx3YXlzIFx1MDBCRiAzNC0xNDU2CithbHdheXMgXHUwMEMwIDQ1Ni0xNworYWx3YXlzIFx1MDBDMSA0NTctMTcKK2Fsd2F5cyBcdTAwQzIgMzQ2LTE3CithbHdheXMgXHUwMEMzIDQ1LTE3CithbHdheXMgXHUwMEM0IDM2LTE3CithbHdheXMgXHUwMEM1IDQtNi0xCithbHdheXMgXHUwMEM2IDE3LTE1NworYWx3YXlzIFx1MDBENyA0LTE2CithbHdheXMgXHUwMEY3IDQ2LTM0CithbHdheXMgXHUwMjUxIDQ2LTEKK2Fsd2F5cyBcdTAyQzcgMzQ1NjctNAorYWx3YXlzIFx1MDJDOSAzNDU2Ny0zCithbHdheXMgXHUwMkNBIDM0NTY3LTIKK2Fsd2F5cyBcdTAyQ0IgMzQ1NjctNQorYWx3YXlzIFx1MDJEOSAzNDU2Ny0xNworYWx3YXlzIFx1MDM5MSA0Ni0xNworYWx3YXlzIFx1MDM5MiA0Ni0xMjcKK2Fsd2F5cyBcdTAzOTMgNDYtMTI0NTcKK2Fsd2F5cyBcdTAzOTQgNDYtMTQ1NworYWx3YXlzIFx1MDM5NSA0Ni0xNTcKK2Fsd2F5cyBcdTAzOTYgNDYtMTM1NjcKK2Fsd2F5cyBcdTAzOTcgNDYtMTU2NworYWx3YXlzIFx1MDM5OCA0Ni0xNDU2NworYWx3YXlzIFx1MDM5OSA0Ni0yNDcKK2Fsd2F5cyBcdTAzOUEgNDYtMTM3CithbHdheXMgXHUwMzlCIDQ2LTEyMzcKK2Fsd2F5cyBcdTAzOUMgNDYtMTM0NworYWx3YXlzIFx1MDM5RCA0Ni0xMzQ1NworYWx3YXlzIFx1MDM5RSA0Ni0xMzQ2NworYWx3YXlzIFx1MDM5RiA0Ni0xMzU3CithbHdheXMgXHUwM0EwIDQ2LTEyMzQ3CithbHdheXMgXHUwM0ExIDQ2LTEyMzU3CithbHdheXMgXHUwM0EzIDQ2LTIzNDcKK2Fsd2F5cyBcdTAzQTQgNDYtMjM0NTcKK2Fsd2F5cyBcdTAzQTUgNDYtMTM2NworYWx3YXlzIFx1MDNBNiA0Ni0xMjQ3CithbHdheXMgXHUwM0E3IDQ2LTEyMzQ2NworYWx3YXlzIFx1MDNBOCA0Ni0xMzQ1NjcKK2Fsd2F5cyBcdTAzQTkgNDYtMjQ1NjcKK2Fsd2F5cyBcdTAzQjEgNDYtMQorYWx3YXlzIFx1MDNCMiA0Ni0xMgorYWx3YXlzIFx1MDNCMyA0Ni0xMjQ1CithbHdheXMgXHUwM0I0IDQ2LTE0NQorYWx3YXlzIFx1MDNCNSA0Ni0xNQorYWx3YXlzIFx1MDNCNiA0Ni0xMzU2CithbHdheXMgXHUwM0I3IDQ2LTE1NgorYWx3YXlzIFx1MDNCOCA0Ni0xNDU2CithbHdheXMgXHUwM0I5IDQ2LTI0CithbHdheXMgXHUwM0JBIDQ2LTEzCithbHdheXMgXHUwM0JCIDQ2LTEyMworYWx3YXlzIFx1MDNCQyA0Ni0xMzQKK2Fsd2F5cyBcdTAzQkQgNDYtMTM0NQorYWx3YXlzIFx1MDNCRSA0Ni0xMzQ2CithbHdheXMgXHUwM0JGIDQ2LTEzNQorYWx3YXlzIFx1MDNDMCA0Ni0xMjM0CithbHdheXMgXHUwM0MxIDQ2LTEyMzUKK2Fsd2F5cyBcdTAzQzMgNDYtMjM0CithbHdheXMgXHUwM0M0IDQ2LTIzNDUKK2Fsd2F5cyBcdTAzQzUgNDYtMTM2CithbHdheXMgXHUwM0M2IDQ2LTEyNAorYWx3YXlzIFx1MDNDNyA0Ni0xMjM0NgorYWx3YXlzIFx1MDNDOCA0Ni0xMzQ1NgorYWx3YXlzIFx1MDNDOSA0Ni0yNDU2CithbHdheXMgXHUyMDBFIDM2LTM0NQorYWx3YXlzIFx1MjAwRiAxMjYtMzYKK2Fsd2F5cyBcdTIwMTAgMzYKK2Fsd2F5cyBcdTIwMTEgNS0yCithbHdheXMgXHUyMDEyIDM2CithbHdheXMgXHUyMDEzIDM2CithbHdheXMgXHUyMDE0IDUtMgorYWx3YXlzIFx1MjAxNSAzNi0zNgorYWx3YXlzIFx1MjAxNiAxMjQ2LTEyMworYWx3YXlzIFx1MjAxNyA0NTYtNDU2CithbHdheXMgXHUyMDE4IDQKK2Fsd2F5cyBcdTIwMTkgMworYWx3YXlzIFx1MjAxQyAyMzYtMjM2CithbHdheXMgXHUyMDFEIDM1Ni0zNTYKK2Fsd2F5cyBcdTIwMjAgMzQ2CithbHdheXMgXHUyMDIxIDEyMzQ1Ni0xMjM0NTYtMzQ1CithbHdheXMgXHUyMDIyIDM2CithbHdheXMgXHUyMDI0IDM0NTY3LTEKK2Fsd2F5cyBcdTIwMjUgNDYtNDYKK2Fsd2F5cyBcdTIwMjYgNS01LTUKK2Fsd2F5cyBcdTIwMjcgMzYKK2Fsd2F5cyBcdTIwMjggMTI1NgorYWx3YXlzIFx1MjAyRiAwCithbHdheXMgXHUyMDMwIDQtMzU2LTM1NgorYWx3YXlzIFx1MjAzMiAzCithbHdheXMgXHUyMDMzIDQtMzQ1NgorYWx3YXlzIFx1MjAzNCAzLTMtMworYWx3YXlzIFx1MjAzNSAzCithbHdheXMgXHUyMDM4IDQ1NworYWx3YXlzIFx1MjAzQiA0Ni0xNgorYWx3YXlzIFx1MjAzQyAyMzQ2LTIzNDYKK2Fsd2F5cyBcdTIwM0QgMTQ1Ni0yMzQ2CithbHdheXMgXHUyMDNFIDIzNDY3LTU3OAorYWx3YXlzIFx1MjA0MSA0NTcKK2Fsd2F5cyBcdTIwNDIgMTYtMTYtMTYKK2Fsd2F5cyBcdTIwNDMgMzYKK2Fsd2F5cyBcdTIwNDQgMzQKK2Fsd2F5cyBcdTIwNDcgNQorYWx3YXlzIFx1MjA0OCAxNDU2LTIzNDYKK2Fsd2F5cyBcdTIwNDkgMjM0Ni0xNDU2CithbHdheXMgXHUyMDRFIDE2CithbHdheXMgXHUyMDUxIDE2LTE2CithbHdheXMgXHUyMDUyIDM2CithbHdheXMgXHUyMDUzIDM2CithbHdheXMgXHUyMDU2IDQ2LTQ2LTQ2CithbHdheXMgXHUyMDU3IDMtMy0zLTMKK2Fsd2F5cyBcdTIwNTggNDYtNDYtNDYtNDYKK2Fsd2F5cyBcdTIwNTkgNDYtNDYtNDYtNDYtNDYKK2Fsd2F5cyBcdTIwNUEgNDYtNDYKK2Fsd2F5cyBcdTIwNUIgNDYtNDYtNDYtNDYKK2Fsd2F5cyBcdTIwNUYgMAorYWx3YXlzIFx1MjA3MCA0NTctMzU2CithbHdheXMgXHUyMDcxIDQ1Ny0yNAorYWx3YXlzIFx1MjA3NCA0NTctMjU2CithbHdheXMgXHUyMDc1IDQ1Ny0yNgorYWx3YXlzIFx1MjA3NiA0NTctMjM1CithbHdheXMgXHUyMDc3IDQ1Ny0yMzU2CithbHdheXMgXHUyMDc4IDQ1Ny0yMzYKK2Fsd2F5cyBcdTIwNzkgNDU3LTM1CithbHdheXMgXHUyMDdBIDQ1Ny0zNDYKK2Fsd2F5cyBcdTIwN0IgNDU3LTM2CithbHdheXMgXHUyMDdDIDQ1Ny0xMjM0NTYKK2Fsd2F5cyBcdTIwN0QgNDU3LTEyMzU2CithbHdheXMgXHUyMDdFIDQ1Ny0yMzQ1NgorYWx3YXlzIFx1MjA3RiA0NTctMTM0NQorYWx3YXlzIFx1MjA4MCA1Ni0zNTYKK2Fsd2F5cyBcdTIwODEgNTYtMgorYWx3YXlzIFx1MjA4MiA1Ni0yMworYWx3YXlzIFx1MjA4MyA1Ni0yNQorYWx3YXlzIFx1MjA4NCA1Ni0yNTYKK2Fsd2F5cyBcdTIwODUgNTYtMjYKK2Fsd2F5cyBcdTIwODYgNTYtMjM1CithbHdheXMgXHUyMDg3IDU2LTIzNTYKK2Fsd2F5cyBcdTIwODggNTYtMjM2CithbHdheXMgXHUyMDg5IDU2LTM1CithbHdheXMgXHUyMDhBIDU2LTM0NgorYWx3YXlzIFx1MjA4QiA1Ni0zNgorYWx3YXlzIFx1MjA4QyA1Ni0xMjM0NTYKK2Fsd2F5cyBcdTIwOEQgNTYtMTIzNTYKK2Fsd2F5cyBcdTIwOEUgNTYtMjM0NTYKK2Fsd2F5cyBcdTIwOTAgNTYtMQorYWx3YXlzIFx1MjA5MSA1Ni0xNQorYWx3YXlzIFx1MjA5MiA1Ni0xMzUKK2Fsd2F5cyBcdTIwOTMgNTYtMTM0NgorYWx3YXlzIFx1MjBBMCA0LTE1CithbHdheXMgXHUyMEExIDE1NgorYWx3YXlzIFx1MjBBQyA0LTE1CithbHdheXMgXHUyMEI5IDQtMTIzNQorYWx3YXlzIFx1MjEwMyA0NS00Ni0xNi0wLTE0NworYWx3YXlzIFx1MjEwOSA0NS00Ni0xNi0wLTEyNDcKK2Fsd2F5cyBcdTIxMjIgMTIzNTYtMjM0NTctMTM0Ny0yMzQ1NgorYWx3YXlzIFx1MjE2MCAyNDcKK2Fsd2F5cyBcdTIxNjEgMjQ3LTI0NworYWx3YXlzIFx1MjE2MiAyNDctMjQ3LTI0NworYWx3YXlzIFx1MjE2MyAyNDctMTIzNjcKK2Fsd2F5cyBcdTIxNjQgMTIzNjcKK2Fsd2F5cyBcdTIxNjUgMTIzNjctMjQ3CithbHdheXMgXHUyMTY2IDEyMzY3LTI0Ny0yNDcKK2Fsd2F5cyBcdTIxNjcgMTIzNjctMjQ3LTI0Ny0yNDcKK2Fsd2F5cyBcdTIxNjggMjQ3LTEzNDY3CithbHdheXMgXHUyMTY5IDEzNDY3CithbHdheXMgXHUyMTZBIDEzNDY3LTI0NworYWx3YXlzIFx1MjE2QiAxMzQ2Ny0yNDctMjQ3CithbHdheXMgXHUyMTZDIDEzNDY3LTEyMzY3CithbHdheXMgXHUyMTcwIDI0CithbHdheXMgXHUyMTcxIDI0LTI0CithbHdheXMgXHUyMTcyIDI0LTI0LTI0CithbHdheXMgXHUyMTczIDI0LTEyMzYKK2Fsd2F5cyBcdTIxNzQgMTIzNgorYWx3YXlzIFx1MjE3NSAxMjM2LTI0CithbHdheXMgXHUyMTc2IDEyMzYtMjQtMjQKK2Fsd2F5cyBcdTIxNzcgMTIzNi0yNC0yNC0yNAorYWx3YXlzIFx1MjE3OCAyNC0xMzQ2CithbHdheXMgXHUyMTc5IDEzNDYKK2Fsd2F5cyBcdTIxN0EgMTM0Ni0yNAorYWx3YXlzIFx1MjE3QiAxMzQ2LTI0LTI0CithbHdheXMgXHUyMTdDIDEzNDYtMTIzNgorYWx3YXlzIFx1MjE5MCAxMjQ2LTI0Ni0yNS0yNQorYWx3YXlzIFx1MjE5MSAxMjQ2LTEyNi0yNS0yNS0xMzUKK2Fsd2F5cyBcdTIxOTIgMTI0Ni0yNS0yNS0xMzUKK2Fsd2F5cyBcdTIxOTMgMTI0Ni0xNDYtMjUtMjUtMTM1CithbHdheXMgXHUyMTk0IDEyNDYtMjQ2LTI1LTI1LTEzNQorYWx3YXlzIFx1MjE5NSAxMjQ2LTEyNi0yNDYtMjUtMjUtMTM1CithbHdheXMgXHUyMTk2IDIzNDY3LTM0OAorYWx3YXlzIFx1MjE5NyAyMzQ2Ny0zNTY4CithbHdheXMgXHUyMTk4IDIzNDY3LTI2OAorYWx3YXlzIFx1MjE5OSAyMzQ2Ny0xNTY4CithbHdheXMgXHUyMUQyIDEyMzQ1Ni0zNDUKK2Fsd2F5cyBcdTIxQjggMjM1Njc4LTI0NTYKK2Fsd2F5cyBcdTIxQjkgMjM1Njc4LTEzNDYKK2Fsd2F5cyBcdTIxRTcgMjM1Njc4LTEyMzYKK2Fsd2F5cyBcdTIxRTggMTI0Ni0yNS0yNS0xMzUKK2Fsd2F5cyBcdTIyMDAgNC0xMjM0NgorYWx3YXlzIFx1MjIwMSAxNC0xMzUtMTM0LTEyMzQtMTIzCithbHdheXMgXHUyMjAyIDQtMTQ1CithbHdheXMgXHUyMjAzIDQtMTIzNDU2CithbHdheXMgXHUyMjA0IDIzNDUtMTM0NS0xNQorYWx3YXlzIFx1MjIwNSA0NTYtMzU2CithbHdheXMgXHUyMjA2IDI0LTEzNDUtMTMKK2Fsd2F5cyBcdTIyMDcgNDYtMTI0NgorYWx3YXlzIFx1MjIwOCA0LTE1CithbHdheXMgXHUyMjA5IDM0LTQtMTUKK2Fsd2F5cyBcdTIyMEEgMjM0LTE1LTEyMy0xMzQKK2Fsd2F5cyBcdTIyMEIgNC0yNgorYWx3YXlzIFx1MjIwQyAzNC00LTI2CithbHdheXMgXHUyMjBEIDIzNC0xMzQtMTUtMTM0CithbHdheXMgXHUyMjBlIDE1LTEzNS0xMjM0CithbHdheXMgXHUyMjBGIDQ2LTEyMzQ3CithbHdheXMgXHUyMjExIDQ2LTIzNDcKK2Fsd2F5cyBcdTIyMTIgMzYKK2Fsd2F5cyBcdTIyMTMgMzYtNS0zNDYKK2Fsd2F5cyBcdTIyMTUgMzQKK2Fsd2F5cyBcdTIyMTYgMTI0NjctMTI3CithbHdheXMgXHUyMjE3IDE2CithbHdheXMgXHUyMjE4IDQ1LTQ2LTE2CithbHdheXMgXHUyMjFBIDM0NS0xMjQ1NgorYWx3YXlzIFx1MjIxQiAxMjYtMjUtMzQ1LTEyNDU2CithbHdheXMgXHUyMjFDIDEyNi0yNTYtMzQ1LTEyNDU2CithbHdheXMgXHUyMjFEIDQ1Ni0xMjM0NTYKK2Fsd2F5cyBcdTIyMUUgNi0xMjM0NTYKK2Fsd2F5cyBcdTIyMUYgMTI0Ni0yNDYtNDYtMTIzNS0xMjQ1NgorYWx3YXlzIFx1MjIyMCAxMjQ2LTI0NgorYWx3YXlzIFx1MjIyMyAxMjU2CithbHdheXMgXHUyMjI0IDM0LTQ2LTE2CithbHdheXMgXHUyMjI1IDEyNDYtMTIzCithbHdheXMgXHUyMjI2IDM0LTEyNDYtMTIzCithbHdheXMgXHUyMjI3IDQtMTQ2CithbHdheXMgXHUyMjI4IDQtMzQ2CithbHdheXMgXHUyMjI5IDQ2LTE0NgorYWx3YXlzIFx1MjIyQSA0Ni0zNDYKK2Fsd2F5cyBcdTIyMkIgMjM0NjctMjM2OAorYWx3YXlzIFx1MjIyRSAyMzQ2LTQtMTI0Ni0xNC0xMjQ1NgorYWx3YXlzIFx1MjIzNCA2LTE2CithbHdheXMgXHUyMjM1IDQtMzQKK2Fsd2F5cyBcdTIyMzYgNS0yCithbHdheXMgXHUyMjM3IDEyMzQtMTIzNS0xMzUtMTIzNAorYWx3YXlzIFx1MjIzOCA0Ni0zNgorYWx3YXlzIFx1MjIzQyA0LTE1Ni00LTE1NgorYWx3YXlzIFx1MjI0MiAxNTYtNC0xNTYKK2Fsd2F5cyBcdTIyNDMgNC0xNTYtMTU2CithbHdheXMgXHUyMjQ0IDM0LTQtMTU2LTE1NgorYWx3YXlzIFx1MjI0NSA0LTE1Ni00Ni0xMworYWx3YXlzIFx1MjI0OCA0LTE1Ni00LTE1NgorYWx3YXlzIFx1MjI0OSAzNC00LTE1Ni00LTE1NgorYWx3YXlzIFx1MjI0QyA0LTE1Ni0xMjM0NTYKK2Fsd2F5cyBcdTIyNEQgMTI0Ni0zLTEyNDYtMQorYWx3YXlzIFx1MjI1MCA1LTQ2LTEzLTEyNi0xNi0xMjQ1NgorYWx3YXlzIFx1MjI1MSA1LTQ2LTEzLTEyNi0xNi0xMjYtMTYtMTI0NTYKK2Fsd2F5cyBcdTIyNTIgNS00Ni0xMy0xMjYtMTYtMTI2LTE2LTEyNDU2CithbHdheXMgXHUyMjUzIDUtNDYtMTMtMTI2LTE2LTEyNi0xNi0xMjQ1NgorYWx3YXlzIFx1MjI1QyA1LTQ2LTEzLTEyNi0xMjQ2LTIzNDUtMTI0NTYKK2Fsd2F5cyBcdTIyNjAgMjM0Ni0xMjM0NTYKK2Fsd2F5cyBcdTIyNjEgNDU2LTEyMworYWx3YXlzIFx1MjI2MyA0LTE1Ni00Ni0xMworYWx3YXlzIFx1MjI2NCAxMjYtMTIzNDU2CithbHdheXMgXHUyMjY1IDM0NS0xMjM0NTYKK2Fsd2F5cyBcdTIyNjYgMTI2LTEyMzQ1NgorYWx3YXlzIFx1MjI2NyAzNDUtMTIzNDU2CithbHdheXMgXHUyMjZBIDUtMTMtNC01LTEzLTEyNDU2CithbHdheXMgXHUyMjZCIDQ2LTItNC00Ni0yLTEyNDU2CithbHdheXMgXHUyMjZEIDIzNDYtMTIzNDU2CithbHdheXMgXHUyMjZFIDM0LTUtMTMKK2Fsd2F5cyBcdTIyNkYgMzQtNDYtMgorYWx3YXlzIFx1MjI3MCAzNC01LTEzLTE1NgorYWx3YXlzIFx1MjI3MSAzNC00Ni0yLTE1NgorYWx3YXlzIFx1MjI3MiA1LTEzLTQtMTU2CithbHdheXMgXHUyMjczIDQ2LTItNC0xNTYKK2Fsd2F5cyBcdTIyNzQgMzQtNS0xMy00LTE1NgorYWx3YXlzIFx1MjI3NSAzNC00Ni0yLTQtMTU2CithbHdheXMgXHUyMjc2IDEyNi0zNDUKK2Fsd2F5cyBcdTIyNzcgMzQ1LTEyNgorYWx3YXlzIFx1MjI4MiA0NTYtNS0xMworYWx3YXlzIFx1MjI4MyA0NTYtNDYtMgorYWx3YXlzIFx1MjI4NCAzNC00NTYtNS0xMworYWx3YXlzIFx1MjI4NSAzNC00NTYtNDYtMgorYWx3YXlzIFx1MjI4NiA0NTYtNS0xMy0xNTYKK2Fsd2F5cyBcdTIyODcgNDU2LTQ2LTItMTU2CithbHdheXMgXHUyMjg4IDM0LTQ1Ni01LTEzLTE1NgorYWx3YXlzIFx1MjI4OSAzNC00NTYtNDYtMi0xNTYKK2Fsd2F5cyBcdTIyOTUgMTI0Ni0xNC00NTYtMTI0Ni0zNDYtMTI0NTYKK2Fsd2F5cyBcdTIyOTYgMTI0Ni0xNC00NTYtMTI0Ni0zNi0xMjQ1NgorYWx3YXlzIFx1MjI5NyAxMjQ2LTE0LTQ1Ni0xMjQ2LTQtMTYtMTI0NTYKK2Fsd2F5cyBcdTIyOTggMTI0Ni0xNC00NTYtMTI0Ni00NTYtMzQtMTI0NTYKK2Fsd2F5cyBcdTIyOTkgMTI0Ni0xNC00NTYtMTI0Ni0xNi0xMjQ1NgorYWx3YXlzIFx1MjJBNSAxMjQ2LTEyMzQKK2Fsd2F5cyBcdTIyQkYgMTI0Ni0yMzQ1CithbHdheXMgXHUyMkRDIDEyMzQ1Ni0xMjYKK2Fsd2F5cyBcdTIyREQgMTIzNDU2LTM0NQorYWx3YXlzIFx1MjJFRiA1LTUtNQorYWx3YXlzIFx1MjMwNyA0NQorYWx3YXlzIFx1MjQ2MCAyNDYtMi0xMzUKK2Fsd2F5cyBcdTI0NjEgMjQ2LTIzLTEzNQorYWx3YXlzIFx1MjQ2MiAyNDYtMjUtMTM1CithbHdheXMgXHUyNDYzIDI0Ni0yNTYtMTM1CithbHdheXMgXHUyNDY0IDI0Ni0yNi0xMzUKK2Fsd2F5cyBcdTI0NjUgMjQ2LTIzNS0xMzUKK2Fsd2F5cyBcdTI0NjYgMjQ2LTIzNTYtMTM1CithbHdheXMgXHUyNDY3IDI0Ni0yMzYtMTM1CithbHdheXMgXHUyNDY4IDI0Ni0zNS0xMzUKK2Fsd2F5cyBcdTI0NjkgMjQ2LTItMzU2LTEzNQorYWx3YXlzIFx1MjQ2QSAyNDYtMi0yLTEzNQorYWx3YXlzIFx1MjQ2QiAyNDYtMi0yMy0xMzUKK2Fsd2F5cyBcdTI0NkMgMjQ2LTItMjUtMTM1CithbHdheXMgXHUyNDZEIDI0Ni0yLTI1Ni0xMzUKK2Fsd2F5cyBcdTI0NkUgMjQ2LTItMjYtMTM1CithbHdheXMgXHUyNDZGIDI0Ni0yLTIzNS0xMzUKK2Fsd2F5cyBcdTI0NzAgMjQ2LTItMjM1Ni0xMzUKK2Fsd2F5cyBcdTI0NzEgMjQ2LTItMjM2LTEzNQorYWx3YXlzIFx1MjQ3MiAyNDYtMi0zNS0xMzUKK2Fsd2F5cyBcdTI0NzMgMjQ2LTItMzU2LTEzNQorYWx3YXlzIFx1MjQ3NCAxMjM1Ni0yLTIzNDU2CithbHdheXMgXHUyNDc1IDEyMzU2LTIzLTIzNDU2CithbHdheXMgXHUyNDc2IDEyMzU2LTI1LTIzNDU2CithbHdheXMgXHUyNDc3IDEyMzU2LTI1Ni0yMzQ1NgorYWx3YXlzIFx1MjQ3OCAxMjM1Ni0yNi0yMzQ1NgorYWx3YXlzIFx1MjQ3OSAxMjM1Ni0yMzUtMjM0NTYKK2Fsd2F5cyBcdTI0N0EgMTIzNTYtMjM1Ni0yMzQ1NgorYWx3YXlzIFx1MjQ3QiAxMjM1Ni0yMzYtMjM0NTYKK2Fsd2F5cyBcdTI0N0MgMTIzNTYtMzUtMjM0NTYKK2Fsd2F5cyBcdTI0N0QgMTIzNTYtMi0zNTYtMjM0NTYKK2Fsd2F5cyBcdTI0N0UgMTIzNTYtMi0yLTIzNDU2CithbHdheXMgXHUyNDdGIDEyMzU2LTItMjMtMjM0NTYKK2Fsd2F5cyBcdTI0ODAgMTIzNTYtMi0yNS0yMzQ1NgorYWx3YXlzIFx1MjQ4MSAxMjM1Ni0yLTI1Ni0yMzQ1NgorYWx3YXlzIFx1MjQ4MiAxMjM1Ni0yLTI2LTIzNDU2CithbHdheXMgXHUyNDgzIDEyMzU2LTItMjM1LTIzNDU2CithbHdheXMgXHUyNDg0IDEyMzU2LTItMjM1Ni0yMzQ1NgorYWx3YXlzIFx1MjQ4NSAxMjM1Ni0yLTIzNi0yMzQ1NgorYWx3YXlzIFx1MjQ4NiAxMjM1Ni0yLTM1LTIzNDU2CithbHdheXMgXHUyNDg3IDEyMzU2LTIzLTM1Ni0yMzQ1NgorYWx3YXlzIFx1MjQ4OCAyCithbHdheXMgXHUyNDg5IDIzCithbHdheXMgXHUyNDhBIDI1CithbHdheXMgXHUyNDhCIDI1NgorYWx3YXlzIFx1MjQ4QyAyNgorYWx3YXlzIFx1MjQ4RCAyMzUKK2Fsd2F5cyBcdTI0OEUgMjM1NgorYWx3YXlzIFx1MjQ4RiAyMzYKK2Fsd2F5cyBcdTI0OTAgMzUKK2Fsd2F5cyBcdTI0OTEgMi0zNTYKK2Fsd2F5cyBcdTI0OTIgMi0yCithbHdheXMgXHUyNDkzIDItMjMKK2Fsd2F5cyBcdTI0OTQgMi0yNQorYWx3YXlzIFx1MjQ5NSAyLTI1NgorYWx3YXlzIFx1MjQ5NiAyLTI2CithbHdheXMgXHUyNDk3IDItMjM1CithbHdheXMgXHUyNDk4IDItMjM1NgorYWx3YXlzIFx1MjQ5OSAyLTIzNgorYWx3YXlzIFx1MjQ5QSAyLTM1CithbHdheXMgXHUyNDlCIDIzLTM1NgorYWx3YXlzIFx1MjQ5QyAxMjM1Ni0xLTIzNDU2CithbHdheXMgXHUyNDlEIDEyMzU2LTEyLTIzNDU2CithbHdheXMgXHUyNDlFIDEyMzU2LTE0LTIzNDU2CithbHdheXMgXHUyNDlGIDEyMzU2LTE0NS0yMzQ1NgorYWx3YXlzIFx1MjRBMCAxMjM1Ni0xNS0yMzQ1NgorYWx3YXlzIFx1MjRBMSAxMjM1Ni0xMjQtMjM0NTYKK2Fsd2F5cyBcdTI0QTIgMTIzNTYtMTI0NS0yMzQ1NgorYWx3YXlzIFx1MjRBMyAxMjM1Ni0xMjUtMjM0NTYKK2Fsd2F5cyBcdTI0QTQgMTIzNTYtMjQtMjM0NTYKK2Fsd2F5cyBcdTI0QTUgMTIzNTYtMjQ1LTIzNDU2CithbHdheXMgXHUyNEE2IDEyMzU2LTEzLTIzNDU2CithbHdheXMgXHUyNEE3IDEyMzU2LTEyMy0yMzQ1NgorYWx3YXlzIFx1MjRBOCAxMjM1Ni0xMzQtMjM0NTYKK2Fsd2F5cyBcdTI0QTkgMTIzNTYtMTM0NS0yMzQ1NgorYWx3YXlzIFx1MjRBQSAxMjM1Ni0xMzUtMjM0NTYKK2Fsd2F5cyBcdTI0QUIgMTIzNTYtMTIzNC0yMzQ1NgorYWx3YXlzIFx1MjRBQyAxMjM1Ni0xMjM0NS0yMzQ1NgorYWx3YXlzIFx1MjRBRCAxMjM1Ni0xMjM1LTIzNDU2CithbHdheXMgXHUyNEFFIDEyMzU2LTIzNC0yMzQ1NgorYWx3YXlzIFx1MjRBRiAxMjM1Ni0yMzQ1LTIzNDU2CithbHdheXMgXHUyNEIwIDEyMzU2LTEzNi0yMzQ1NgorYWx3YXlzIFx1MjRCMSAxMjM1Ni0xMjM2LTIzNDU2CithbHdheXMgXHUyNEIyIDEyMzU2LTI0NTYtMjM0NTYKK2Fsd2F5cyBcdTI0QjMgMTIzNTYtMTM0Ni0yMzQ1NgorYWx3YXlzIFx1MjRCNCAxMjM1Ni0xMzQ1Ni0yMzQ1NgorYWx3YXlzIFx1MjRCNSAxMjM1Ni0xMzU2LTIzNDU2CithbHdheXMgXHUyNEI2IDI0Ni0xNy0xMzUKK2Fsd2F5cyBcdTI0QjcgMjQ2LTEyNy0xMzUKK2Fsd2F5cyBcdTI0QjggMjQ2LTE0Ny0xMzUKK2Fsd2F5cyBcdTI0QjkgMjQ2LTE0NTctMTM1CithbHdheXMgXHUyNEJBIDI0Ni0xNTctMTM1CithbHdheXMgXHUyNEJCIDI0Ni0xMjQ3LTEzNQorYWx3YXlzIFx1MjRCQyAyNDYtMTI0NTctMTM1CithbHdheXMgXHUyNEJEIDI0Ni0xMjU3LTEzNQorYWx3YXlzIFx1MjRCRSAyNDYtMjQ3LTEzNQorYWx3YXlzIFx1MjRCRiAyNDYtMjQ1Ny0xMzUKK2Fsd2F5cyBcdTI0QzAgMjQ2LTEzNy0xMzUKK2Fsd2F5cyBcdTI0QzEgMjQ2LTEyMzctMTM1CithbHdheXMgXHUyNEMyIDI0Ni0xMzQ3LTEzNQorYWx3YXlzIFx1MjRDMyAyNDYtMTM0NTctMTM1CithbHdheXMgXHUyNEM0IDI0Ni0xMzU3LTEzNQorYWx3YXlzIFx1MjRDNSAyNDYtMTIzNDctMTM1CithbHdheXMgXHUyNEM2IDI0Ni0xMjM0NTctMTM1CithbHdheXMgXHUyNEM3IDI0Ni0xMjM1Ny0xMzUKK2Fsd2F5cyBcdTI0QzggMjQ2LTIzNDctMTM1CithbHdheXMgXHUyNEM5IDI0Ni0yMzQ1Ny0xMzUKK2Fsd2F5cyBcdTI0Q0EgMjQ2LTEzNjctMTM1CithbHdheXMgXHUyNENCIDI0Ni0xMjM2Ny0xMzUKK2Fsd2F5cyBcdTI0Q0MgMjQ2LTI0NTY3LTEzNQorYWx3YXlzIFx1MjRDRCAyNDYtMTM0NjctMTM1CithbHdheXMgXHUyNENFIDI0Ni0xMzQ1NjctMTM1CithbHdheXMgXHUyNENGIDI0Ni0xMzU2Ny0xMzUKK2Fsd2F5cyBcdTI0RDAgMjQ2LTEtMTM1CithbHdheXMgXHUyNEQxIDI0Ni0xMi0xMzUKK2Fsd2F5cyBcdTI0RDIgMjQ2LTE0LTEzNQorYWx3YXlzIFx1MjREMyAyNDYtMTQ1LTEzNQorYWx3YXlzIFx1MjRENCAyNDYtMTUtMTM1CithbHdheXMgXHUyNEQ1IDI0Ni0xMjQtMTM1CithbHdheXMgXHUyNEQ2IDI0Ni0xMjQ1LTEzNQorYWx3YXlzIFx1MjRENyAyNDYtMTI1LTEzNQorYWx3YXlzIFx1MjREOCAyNDYtMjQtMTM1CithbHdheXMgXHUyNEQ5IDI0Ni0yNDUtMTM1CithbHdheXMgXHUyNERBIDI0Ni0xMy0xMzUKK2Fsd2F5cyBcdTI0REIgMjQ2LTEyMy0xMzUKK2Fsd2F5cyBcdTI0REMgMjQ2LTEzNC0xMzUKK2Fsd2F5cyBcdTI0REQgMjQ2LTEzNDUtMTM1CithbHdheXMgXHUyNERFIDI0Ni0xMzUtMTM1CithbHdheXMgXHUyNERGIDI0Ni0xMjM0LTEzNQorYWx3YXlzIFx1MjRFMCAyNDYtMTIzNDUtMTM1CithbHdheXMgXHUyNEUxIDI0Ni0xMjM1LTEzNQorYWx3YXlzIFx1MjRFMiAyNDYtMjM0LTEzNQorYWx3YXlzIFx1MjRFMyAyNDYtMjM0NS0xMzUKK2Fsd2F5cyBcdTI0RTQgMjQ2LTEzNi0xMzUKK2Fsd2F5cyBcdTI0RTUgMjQ2LTEyMzYtMTM1CithbHdheXMgXHUyNEU2IDI0Ni0yNDU2LTEzNQorYWx3YXlzIFx1MjRFNyAyNDYtMTM0Ni0xMzUKK2Fsd2F5cyBcdTI0RTggMjQ2LTEzNDU2LTEzNQorYWx3YXlzIFx1MjRFOSAyNDYtMTM1Ni0xMzUKK2Fsd2F5cyBcdTI0RUEgMjQ2LTM1Ni0xMzUKK2Fsd2F5cyBcdTI1MDAgMzYtMzYKK2Fsd2F5cyBcdTI1NzQgMTI1NgorYWx3YXlzIFx1MjU4NCAzNjc4LTM2NzgKK2Fsd2F5cyBcdTI1YTAgMTIzNDU2NzgtMTIzNDU2NzgKK2Fsd2F5cyBcdTI1QTEgMTIzNDc4LTE0NTY3OAorYWx3YXlzIFx1MjVBQSAxMjM0NTYtMTIzNDU2CithbHdheXMgXHUyNUIyIDEyNDYtMjM0NQorYWx3YXlzIFx1MjVCMyAxMjQ2LTIzNDUKK2Fsd2F5cyBcdTI1QjYgNTgtMworYWx3YXlzIFx1MjVCNyA1OC0zCithbHdheXMgXHUyNUJDIDEyNDYtMjM0NQorYWx3YXlzIFx1MjVCRCAxMjQ2LTIzNDUKK2Fsd2F5cyBcdTI1QzYgMTI0Ni0xNDUKK2Fsd2F5cyBcdTI1QzcgMTI0Ni0xNDUKK2Fsd2F5cyBcdTI1Q0IgMjQ2LTEzNQorYWx3YXlzIFx1MjVDRSAyNDYtMjQ2LTEzNS0xMzUKK2Fsd2F5cyBcdTI1Q0YgMjM0NTY4LTEyMzU2NworYWx3YXlzIFx1MjVFNiA0NgorYWx3YXlzIFx1MjVGRSAxMjM0NTYtMTIzNDU2CithbHdheXMgXHUyNjA1IDE2CithbHdheXMgXHUyNjA2IDE2CithbHdheXMgXHUyNzEzIDEyMzc4LTY3CithbHdheXMgXHUyNzE0IDI0NjctMTM0Ni0xMjQ1NjcKK2Fsd2F5cyBcdTI3NkYgMzQ1CithbHdheXMgXHUyNzk0IDM2LTM2LTM0NQorYWx3YXlzIFx1MkUxRiA1LTQtMTU2LTE0Ni0xNi0xMjQ1NgorYWx3YXlzIFx1MkYwOCAxMjQ1LTEzNi0yCithbHdheXMgXHUyRjFGIDEyNC0zNC00CithbHdheXMgXHUyRjJGIDEzLTEyMzQ2LTMKK2Fsd2F5cyBcdTJGNDUgMTIzNDUtMTM0Ni0zCithbHdheXMgXHUyRkFGIDEzNC0yMzQ1LTUKK2Fsd2F5cyBcdTJGRDEgMjQ1LTE2LTIKKyNDaGluZXNlIGNoYXJhY3RlcnMKK2Fsd2F5cyBcdTJmMDAgMTYtMworYWx3YXlzIFx1MmYwMSAxMy0xMjM0NTYtNAorYWx3YXlzIFx1MmYwMiAxLTM0LTQKK2Fsd2F5cyBcdTJmMDMgMTIzNC0zNDYtNAorYWx3YXlzIFx1MmYwNCAxNi00CithbHdheXMgXHUyZjA1IDEzLTIzNi0yCithbHdheXMgXHUyZjA2IDE1Ni01CithbHdheXMgXHUyZjA3IDEyNC0xMjM1Ni0yCithbHdheXMgXHUyZjA4IDEyNDUtMTM2LTIKK2Fsd2F5cyBcdTJmMDkgMTI0NS0xMzYtMgorYWx3YXlzIFx1MmYwYSAxMjQ1LTM0LTUKK2Fsd2F5cyBcdTJmMGIgMTM1LTM0NS0zCithbHdheXMgXHUyZjBjIDEzLTYtMworYWx3YXlzIFx1MmYwZCAxMzQtMTYtNQorYWx3YXlzIFx1MmYwZSAxMzUtMTM0NTYtMworYWx3YXlzIFx1MmYwZiAxMy0xNi00CithbHdheXMgXHUyZjEwIDEyMy0xMjM2LTQKK2Fsd2F5cyBcdTJmMTEgMTQ1LTE0Ni0zCithbHdheXMgXHUyZjEyIDEzLTE2LTUKK2Fsd2F5cyBcdTJmMTMgMTM1LTE0Ni0zCithbHdheXMgXHUyZjE0IDEzNS0xNi00CithbHdheXMgXHUyZjE1IDEyMzQ1LTEzNDYtMworYWx3YXlzIFx1MmYxNiAxNS0xNi01CithbHdheXMgXHUyZjE3IDI0LTE1Ni0yCithbHdheXMgXHUyZjE4IDEzNS0zNC00CithbHdheXMgXHUyZjE5IDEzLTM0Ni0yCithbHdheXMgXHUyZjFhIDEyLTEzNDYtNAorYWx3YXlzIFx1MmYxYiAxNS0xNTYtMworYWx3YXlzIFx1MmYxYyAyMzQtNQorYWx3YXlzIFx1MmYxZCAxMjMtMTIzNTYtNAorYWx3YXlzIFx1MmYxZSAxMjQ2LTIKK2Fsd2F5cyBcdTJmMWYgMTI0LTM0LTQKK2Fsd2F5cyBcdTJmMjAgMjQtMTU2LTUKK2Fsd2F5cyBcdTJmMjEgMS0xNTYtNAorYWx3YXlzIFx1MmYyMiAxNS0xMjQ2LTMKK2Fsd2F5cyBcdTJmMjMgMTUtMTYtNQorYWx3YXlzIFx1MmYyNCAxNDUtMzQ1LTUKK2Fsd2F5cyBcdTJmMjUgMTM0NS0xMjU2LTQKK2Fsd2F5cyBcdTJmMjYgMTI1LTE1Ni00CithbHdheXMgXHUyZjI3IDEzNC0yMzQ1LTIKK2Fsd2F5cyBcdTJmMjggMjQ1LTEyMzQ1Ni01CithbHdheXMgXHUyZjI5IDE1LTI0Ni00CithbHdheXMgXHUyZjJhIDQ1Ni0zCithbHdheXMgXHUyZjJiIDI0LTE1Ni0zCithbHdheXMgXHUyZjJjIDEyLTIzNDYtNQorYWx3YXlzIFx1MmYyZCAyNC0xMjM2LTMKK2Fsd2F5cyBcdTJmMmUgMTItMTI0NTYtMworYWx3YXlzIFx1MmYyZiAxMy0xMjM0Ni0zCithbHdheXMgXHUyZjMwIDEzLTE2LTQKK2Fsd2F5cyBcdTJmMzEgMTMtMTQ1Ni0zCithbHdheXMgXHUyZjMyIDEzLTEyMzYtMworYWx3YXlzIFx1MmYzMyAyNDYtMworYWx3YXlzIFx1MmYzNCAxMy00NTYtNAorYWx3YXlzIFx1MmYzNSAxNDU2LTQKK2Fsd2F5cyBcdTJmMzYgMTMtMTIzNDYtNAorYWx3YXlzIFx1MmYzNyAxNi01CithbHdheXMgXHUyZjM4IDEzLTEyMzQ2LTMKK2Fsd2F5cyBcdTJmMzkgMTMtMTYtNQorYWx3YXlzIFx1MmYzYSAyNC0xMjM2LTMKK2Fsd2F5cyBcdTJmM2IgMTItMTU2LTUKK2Fsd2F5cyBcdTJmM2MgMTUtMTQ1Ni0zCithbHdheXMgXHUyZjNkIDEzLTIzNDYtMworYWx3YXlzIFx1MmYzZSAxMjM1LTM0LTUKK2Fsd2F5cyBcdTJmM2YgMjQtMTIzNTYtNAorYWx3YXlzIFx1MmY0MCAxLTE1Ni0zCithbHdheXMgXHUyZjQxIDEyMzQtMzQtMworYWx3YXlzIFx1MmY0MiAxMjM0NTYtMgorYWx3YXlzIFx1MmY0MyAxNDUtMTIzNTYtNAorYWx3YXlzIFx1MmY0NCAxMy0xNDU2LTMKK2Fsd2F5cyBcdTJmNDUgMTIzNDUtMTM0Ni0zCithbHdheXMgXHUyZjQ2IDM0LTIKK2Fsd2F5cyBcdTJmNDcgMTI0NS0xNTYtNQorYWx3YXlzIFx1MmY0OCAyMzYtMworYWx3YXlzIFx1MmY0OSAyMzYtNQorYWx3YXlzIFx1MmY0YSAxMzQtMzQtNQorYWx3YXlzIFx1MmY0YiAyNDUtMjM0NS01CithbHdheXMgXHUyZjRjIDEtMTU2LTQKK2Fsd2F5cyBcdTJmNGQgMTQ1LTI0NTYtNAorYWx3YXlzIFx1MmY0ZSAyNC0zNC0zCithbHdheXMgXHUyZjRmIDM0LTIKK2Fsd2F5cyBcdTJmNTAgMTM1LTE2LTQKK2Fsd2F5cyBcdTJmNTEgMTM0LTE0Ni0yCithbHdheXMgXHUyZjUyIDI0LTE1Ni01CithbHdheXMgXHUyZjUzIDI0NS0xNi01CithbHdheXMgXHUyZjU0IDI0LTEyNDYtNAorYWx3YXlzIFx1MmY1NSAxMjM1LTI1LTQKK2Fsd2F5cyBcdTJmNTYgMS0zNS00CithbHdheXMgXHUyZjU3IDEyMzQ1LTM0LTUKK2Fsd2F5cyBcdTJmNTggMjQ2LTIKK2Fsd2F5cyBcdTJmNTkgMTM1LTEyMzYtNQorYWx3YXlzIFx1MmY1YSAxMjM0LTIzNDUtNQorYWx3YXlzIFx1MmY1YiAyMzQ1Ni0yCithbHdheXMgXHUyZjVjIDEzNDUtMjM0LTIKK2Fsd2F5cyBcdTJmNWQgMjQ1LTQ1LTQKK2Fsd2F5cyBcdTJmNWUgMTUtNDUtMgorYWx3YXlzIFx1MmY1ZiAxMjU2LTUKK2Fsd2F5cyBcdTJmNjAgMTMtMzUtMworYWx3YXlzIFx1MmY2MSAzNS00CithbHdheXMgXHUyZjYyIDEzLTEyMzYtMworYWx3YXlzIFx1MmY2MyAyNC0xMzU2LTMKK2Fsd2F5cyBcdTJmNjQgMjM1LTUKK2Fsd2F5cyBcdTJmNjUgMTI0LTIzNDUtMgorYWx3YXlzIFx1MmY2NiAxMjM0LTE2LTQKK2Fsd2F5cyBcdTJmNjcgMTItNDU2LTIKK2Fsd2F5cyBcdTJmNjggMTM1LTEyNi0zCithbHdheXMgXHUyZjY5IDEzNS0yNDU2LTIKK2Fsd2F5cyBcdTJmNmEgMTIzNC0xNi0yCithbHdheXMgXHUyZjZiIDEzNC0xNDU2LTQKK2Fsd2F5cyBcdTJmNmMgMTM0LTM0LTUKK2Fsd2F5cyBcdTJmNmQgMTM0LTE0Ni0yCithbHdheXMgXHUyZjZlIDI0LTE1Ni00CithbHdheXMgXHUyZjZmIDI0LTE1Ni0yCithbHdheXMgXHUyZjcwIDI0LTE1Ni01CithbHdheXMgXHUyZjcxIDEyNDUtMTIzNTYtMgorYWx3YXlzIFx1MmY3MiAxMjM1LTIzNDYtMgorYWx3YXlzIFx1MmY3MyAxNS0yMzYtNQorYWx3YXlzIFx1MmY3NCAxMy0xNi01CithbHdheXMgXHUyZjc1IDEtMzQtMgorYWx3YXlzIFx1MmY3NiAxMzQtMTYtNAorYWx3YXlzIFx1MmY3NyAxMzQtMTYtNQorYWx3YXlzIFx1MmY3OCAxMjM0NS0xMjM1Ni00CithbHdheXMgXHUyZjc5IDQ1Ni00CithbHdheXMgXHUyZjdhIDQ2LTIKK2Fsd2F5cyBcdTJmN2IgMTI1Ni00CithbHdheXMgXHUyZjdjIDEzLTE0Ni00CithbHdheXMgXHUyZjdkIDE1Ni0yCithbHdheXMgXHUyZjdlIDEzLTM1Ni00CithbHdheXMgXHUyZjdmIDE1Ni00CithbHdheXMgXHUyZjgwIDEyNTYtNQorYWx3YXlzIFx1MmY4MSAxMjQ1LTEyMzU2LTUKK2Fsd2F5cyBcdTJmODIgMTItMTM2LTIKK2Fsd2F5cyBcdTJmODMgMTI1LTE1Ni01CithbHdheXMgXHUyZjg0IDEtMTU2LTUKK2Fsd2F5cyBcdTJmODUgMTMtMjM0LTUKK2Fsd2F5cyBcdTJmODYgMjQtMjM0Ni0yCithbHdheXMgXHUyZjg3IDEyLTEyNDU2LTQKK2Fsd2F5cyBcdTJmODggMS0xMjM1Ni0zCithbHdheXMgXHUyZjg5IDEzLTEzNi01CithbHdheXMgXHUyZjhhIDE1LTIzNDYtNQorYWx3YXlzIFx1MmY4YiAyNDUtMTQ2LTQKK2Fsd2F5cyBcdTJmOGMgMTIzNS0zNC0zCithbHdheXMgXHUyZjhkIDEyLTEyMzQ2LTIKK2Fsd2F5cyBcdTJmOGUgMTUtMzQ2LTQKK2Fsd2F5cyBcdTJmOGYgMTUtMTM0NTYtMgorYWx3YXlzIFx1MmY5MCAxNi0zCithbHdheXMgXHUyZjkxIDIzNDU2LTUKK2Fsd2F5cyBcdTJmOTIgMTMtMjM0NS01CithbHdheXMgXHUyZjkzIDEzLTI0Ni00CithbHdheXMgXHUyZjk0IDIzNDUtMgorYWx3YXlzIFx1MmY5NSAxMy0zNC00CithbHdheXMgXHUyZjk2IDE0NS0xMjM1Ni01CithbHdheXMgXHUyZjk3IDI0LTE1Ni00CithbHdheXMgXHUyZjk4IDEtMTU2LTUKK2Fsd2F5cyBcdTJmOTkgMTM1LTM1Ni01CithbHdheXMgXHUyZjlhIDEyLTE1Ni01CithbHdheXMgXHUyZjliIDEyNS0xMjM1Ni00CithbHdheXMgXHUyZjljIDEyNS0zNC0yCithbHdheXMgXHUyZjlkIDI0LTEzNi0zCithbHdheXMgXHUyZjllIDEyLTIzNDYtMworYWx3YXlzIFx1MmY5ZiAxNS0xNDU2LTMKK2Fsd2F5cyBcdTJmYTAgMTItMTM2LTIKK2Fsd2F5cyBcdTJmYTEgMTItMjUtNQorYWx3YXlzIFx1MmZhMiAxNi01CithbHdheXMgXHUyZmEzIDIzNC00CithbHdheXMgXHUyZmE0IDEzNS0yMzQ1LTUKK2Fsd2F5cyBcdTJmYTUgMTMtMTYtNAorYWx3YXlzIFx1MmZhNiAxMy0xNDU2LTMKK2Fsd2F5cyBcdTJmYTcgMTItMTM0Ni0yCithbHdheXMgXHUyZmE4IDEzNC0xMzYtMgorYWx3YXlzIFx1MmZhOSAxMjM0NS0zNC01CithbHdheXMgXHUyZmFhIDEzLTE2LTUKK2Fsd2F5cyBcdTJmYWIgMS0xMjQ2LTMKK2Fsd2F5cyBcdTJmYWMgMTI1Ni00CithbHdheXMgXHUyZmFkIDI0NS0xMzQ1Ni0zCithbHdheXMgXHUyZmFlIDEyMzQ1LTM1Ni0zCithbHdheXMgXHUyZmFmIDEzNC0yMzQ1LTUKK2Fsd2F5cyBcdTJmYjAgMTMtMjM0Ni0yCithbHdheXMgXHUyZmIxIDEyNDYtMgorYWx3YXlzIFx1MmZiMiAxMy0yMzQtNAorYWx3YXlzIFx1MmZiMyAxNDU2LTMKK2Fsd2F5cyBcdTJmYjQgMzQ2LTUKK2Fsd2F5cyBcdTJmYjUgMTIzNDUtMTM1Ni0zCithbHdheXMgXHUyZmI2IDEyMzQ1LTM1Ni0zCithbHdheXMgXHUyZmI3IDI0LTE1Ni0yCithbHdheXMgXHUyZmI4IDI0LTEyMzU2LTQKK2Fsd2F5cyBcdTJmYjkgMTUtNDYtMworYWx3YXlzIFx1MmZiYSAxMzQtMzQ1LTQKK2Fsd2F5cyBcdTJmYmIgMTMtMzQtNAorYWx3YXlzIFx1MmZiYyAxMy0xNDYtMworYWx3YXlzIFx1MmZiZCAxMzUtMjQ2LTMKK2Fsd2F5cyBcdTJmYmUgMTQ1LTEyMzU2LTUKK2Fsd2F5cyBcdTJmYmYgMTItMTM0Ni01CithbHdheXMgXHUyZmMwIDEzLTIzNDYtMgorYWx3YXlzIFx1MmZjMSAxMy0xMjQ2LTQKK2Fsd2F5cyBcdTJmYzIgMTI1Ni0yCithbHdheXMgXHUyZmMzIDEzNDUtMjQ2LTQKK2Fsd2F5cyBcdTJmYzQgMTMtMzQtNAorYWx3YXlzIFx1MmZjNSAxMy0zNC01CithbHdheXMgXHUyZmM2IDEzNC0yNDU2LTUKK2Fsd2F5cyBcdTJmYzcgMTM0LTM0NS0yCithbHdheXMgXHUyZmM4IDEyMzUtNDU2LTIKK2Fsd2F5cyBcdTJmYzkgMjQtMzQtNAorYWx3YXlzIFx1MmZjYSAxMjM1LTM1Ni0zCithbHdheXMgXHUyZmNiIDEtMTU2LTQKK2Fsd2F5cyBcdTJmY2MgMTM0LTE0NTYtNAorYWx3YXlzIFx1MmZjZCAxNDUtMTM0NTYtNAorYWx3YXlzIFx1MmZjZSAxMy0zNC00CithbHdheXMgXHUyZmNmIDI0LTM0LTQKK2Fsd2F5cyBcdTJmZDAgMTM1LTE2LTIKK2Fsd2F5cyBcdTJmZDEgMjQ1LTE2LTIKK2Fsd2F5cyBcdTJmZDIgMTItMTU2LTQKK2Fsd2F5cyBcdTJmZDMgMTMtMTIzNDYtMgorYWx3YXlzIFx1MmZkNCAxMy0xMjQ2LTMKK2Fsd2F5cyBcdTJmZDUgMjM2LTUKK2Fsd2F5cyBcdTMwMDAgMAorYWx3YXlzIFx1MzAwMSA2LTAKK2Fsd2F5cyBcdTMwMDIgMzYtMAorYWx3YXlzIFx1MzAwMyA2LTMKK2Fsd2F5cyBcdTMwMDggMTI2CithbHdheXMgXHUzMDA5IDM0NQorYWx3YXlzIFx1MzAwQSAxMjYtMTI2CithbHdheXMgXHUzMDBCIDM0NS0zNDUKK2Fsd2F5cyBcdTMwMEMgNTYtMzYKK2Fsd2F5cyBcdTMwMEQgMzYtMjMKK2Fsd2F5cyBcdTMwMEUgMjM2LTIzNgorYWx3YXlzIFx1MzAwRiAzNTYtMzU2CithbHdheXMgXHUzMDEwIDI0NjctMAorYWx3YXlzIFx1MzAxMSAxMjQ1NjctMAorYWx3YXlzIFx1MzAxMiAxMjM0Ny0xMzU3CithbHdheXMgXHUzMDEzIDEyNDY3LTE0NjcKK2Fsd2F5cyBcdTMwMTQgMTIzNDYtMAorYWx3YXlzIFx1MzAxNSAxMzQ1Ni0wCithbHdheXMgXHUzMDFDIDQ1CithbHdheXMgXHUzMDFEIDMtMworYWx3YXlzIFx1MzAxRSAzLTMKK2Fsd2F5cyBcdTMwMjEgMjQKK2Fsd2F5cyBcdTMwMjIgMjQtMjQKK2Fsd2F5cyBcdTMwMjMgMjQtMjQtMjQKK2Fsd2F5cyBcdTMwMjQgMjQtMTIzNgorYWx3YXlzIFx1MzAyNSAxMjM2CithbHdheXMgXHUzMDI2IDEyMzYtMjQKK2Fsd2F5cyBcdTMwMjcgMTIzNi0yNC0yNAorYWx3YXlzIFx1MzAyOCAxMjM2LTI0LTI0LTI0CithbHdheXMgXHUzMDI5IDI0LTEzNDYKK2Fsd2F5cyBcdTMwMzkgMTM0Ni0xMzQ2CithbHdheXMgXHUzMDNBIDEzNDYtMTM0Ni0xMzQ2CithbHdheXMgXHUzMDQyIDEKK2Fsd2F5cyBcdTMwNDQgMTIKK2Fsd2F5cyBcdTMwNDYgMTQKK2Fsd2F5cyBcdTMwNDggMTI0CithbHdheXMgXHUzMDRBIDI0CithbHdheXMgXHUzMDRCIDE2CithbHdheXMgXHUzMDRDIDUtMTYKK2Fsd2F5cyBcdTMwNEQgMTI2CithbHdheXMgXHUzMDRFIDUtMTI2CithbHdheXMgXHUzMDRGIDE0NgorYWx3YXlzIFx1MzA1MCA1LTE0NgorYWx3YXlzIFx1MzA1MSAxMjQ2CithbHdheXMgXHUzMDUyIDUtMTI0NgorYWx3YXlzIFx1MzA1MyAyNDYKK2Fsd2F5cyBcdTMwNTQgNS0yNDYKK2Fsd2F5cyBcdTMwNTUgMTU2CithbHdheXMgXHUzMDU2IDUtMTU2CithbHdheXMgXHUzMDU3IDEyNTYKK2Fsd2F5cyBcdTMwNTggNS0xMjU2CithbHdheXMgXHUzMDVBIDUtMTQ1NgorYWx3YXlzIFx1MzA1QiAxMjQ1NgorYWx3YXlzIFx1MzA1QyA1LTEyNDU2CithbHdheXMgXHUzMDVEIDI0NTYKK2Fsd2F5cyBcdTMwNUUgNS0yNDU2CithbHdheXMgXHUzMDVGIDEzNQorYWx3YXlzIFx1MzA2MCA1LTEzNQorYWx3YXlzIFx1MzA2MSAxMjM1CithbHdheXMgXHUzMDYyIDUtMTIzNQorYWx3YXlzIFx1MzA2MyAyCithbHdheXMgXHUzMDY0IDEzNDUKK2Fsd2F5cyBcdTMwNjUgNS0xMzQ1CithbHdheXMgXHUzMDY2IDEyMzQ1CithbHdheXMgXHUzMDY3IDUtMTIzNDUKK2Fsd2F5cyBcdTMwNjggMjM0NQorYWx3YXlzIFx1MzA2OSA1LTIzNDUKK2Fsd2F5cyBcdTMwNkEgMTMKK2Fsd2F5cyBcdTMwNkIgMTIzCithbHdheXMgXHUzMDZDIDEzNAorYWx3YXlzIFx1MzA2RCAxMjM0CithbHdheXMgXHUzMDZFIDIzNAorYWx3YXlzIFx1MzA2RiAxMzYKK2Fsd2F5cyBcdTMwNzAgNS0xMzYKK2Fsd2F5cyBcdTMwNzEgNi0xMzYKK2Fsd2F5cyBcdTMwNzIgMTIzNgorYWx3YXlzIFx1MzA3MyA1LTEyMzYKK2Fsd2F5cyBcdTMwNzQgNi0xMjM2CithbHdheXMgXHUzMDc1IDEzNDYKK2Fsd2F5cyBcdTMwNzYgNS0xMzQ2CithbHdheXMgXHUzMDc3IDYtMTM0NgorYWx3YXlzIFx1MzA3OCAxMjM0NgorYWx3YXlzIFx1MzA3OSA1LTEyMzQ2CithbHdheXMgXHUzMDdBIDYtMTIzNDYKK2Fsd2F5cyBcdTMwN0IgMjM0NgorYWx3YXlzIFx1MzA3QyA1LTIzNDYKK2Fsd2F5cyBcdTMwN0QgNi0yMzQ2CithbHdheXMgXHUzMDdFIDEzNTYKK2Fsd2F5cyBcdTMwN0YgMTIzNTYKK2Fsd2F5cyBcdTMwODAgMTM0NTYKK2Fsd2F5cyBcdTMwODEgMTIzNDU2CithbHdheXMgXHUzMDgyIDIzNDU2CithbHdheXMgXHUzMDgzIDM0Njc4LTI0NQorYWx3YXlzIFx1MzA4NCAzNAorYWx3YXlzIFx1MzA4NSAzNDY3OC0xMjMKK2Fsd2F5cyBcdTMwODYgMzQ2CithbHdheXMgXHUzMDg3IDM0Njc4LTEzNDUKK2Fsd2F5cyBcdTMwODggMzQ1CithbHdheXMgXHUzMDg5IDE1CithbHdheXMgXHUzMDhBIDEyNQorYWx3YXlzIFx1MzA4QiAxNDUKK2Fsd2F5cyBcdTMwOEMgMTI0NQorYWx3YXlzIFx1MzA4RCAyNDUKK2Fsd2F5cyBcdTMwOEUgMzQ2NzgtMTM2CithbHdheXMgXHUzMDhGIDMKK2Fsd2F5cyBcdTMwOTAgMzQ2NzgtMjQ1NgorYWx3YXlzIFx1MzA5MSAzNDY3OC0xMzQ2CithbHdheXMgXHUzMDkyIDM1CithbHdheXMgXHUzMDkzIDM1NgorYWx3YXlzIFx1MzA5NCAyMzU2NzgtMjU3CithbHdheXMgXHUzMDk1IDE2CithbHdheXMgXHUzMDk2IDEyNDYKK2Fsd2F5cyBcdTMwQTEgMQorYWx3YXlzIFx1MzBBMiAxCithbHdheXMgXHUzMEEzIDEyCithbHdheXMgXHUzMEE0IDEyCithbHdheXMgXHUzMEE1IDE0CithbHdheXMgXHUzMEE2IDE0CithbHdheXMgXHUzMEE3IDEyNAorYWx3YXlzIFx1MzBBOCAxMjQKK2Fsd2F5cyBcdTMwQUEgMjQKK2Fsd2F5cyBcdTMwQUIgMTYKK2Fsd2F5cyBcdTMwQUMgNS0xNgorYWx3YXlzIFx1MzBBRCAxMjYKK2Fsd2F5cyBcdTMwQUUgNS0xMjYKK2Fsd2F5cyBcdTMwQUYgMTQ2CithbHdheXMgXHUzMEIwIDUtMTQ2CithbHdheXMgXHUzMEIxIDEyNDYKK2Fsd2F5cyBcdTMwQjIgNS0xMjQ2CithbHdheXMgXHUzMEIzIDI0NgorYWx3YXlzIFx1MzBCNCA1LTI0NgorYWx3YXlzIFx1MzBCNSAxNTYKK2Fsd2F5cyBcdTMwQjYgNS0xNTYKK2Fsd2F5cyBcdTMwQjcgMTI1NgorYWx3YXlzIFx1MzBCOCA1LTEyNTYKK2Fsd2F5cyBcdTMwQkEgNS0xNDU2CithbHdheXMgXHUzMEJCIDEyNDU2CithbHdheXMgXHUzMEJDIDUtMTI0NTYKK2Fsd2F5cyBcdTMwQkQgMjQ1NgorYWx3YXlzIFx1MzBCRSA1LTI0NTYKK2Fsd2F5cyBcdTMwQkYgMTM1CithbHdheXMgXHUzMEMwIDUtMTM1CithbHdheXMgXHUzMEMxIDEyMzUKK2Fsd2F5cyBcdTMwQzIgNS0xMjM1CithbHdheXMgXHUzMEMzIDIKK2Fsd2F5cyBcdTMwQzQgMTM0NQorYWx3YXlzIFx1MzBDNSA1LTEzNDUKK2Fsd2F5cyBcdTMwQzYgMTIzNDUKK2Fsd2F5cyBcdTMwQzcgNS0xMjM0NQorYWx3YXlzIFx1MzBDOCAyMzQ1CithbHdheXMgXHUzMEM5IDUtMjM0NQorYWx3YXlzIFx1MzBDQSAxMworYWx3YXlzIFx1MzBDQiAxMjMKK2Fsd2F5cyBcdTMwQ0MgMTM0CithbHdheXMgXHUzMENEIDEyMzQKK2Fsd2F5cyBcdTMwQ0UgMjM0CithbHdheXMgXHUzMENGIDEzNgorYWx3YXlzIFx1MzBEMCA1LTEzNgorYWx3YXlzIFx1MzBEMSA2LTEzNgorYWx3YXlzIFx1MzBEMiAxMjM2CithbHdheXMgXHUzMEQzIDUtMTIzNgorYWx3YXlzIFx1MzBENCA2LTEyMzYKK2Fsd2F5cyBcdTMwRDUgMTM0NgorYWx3YXlzIFx1MzBENiA1LTEzNDYKK2Fsd2F5cyBcdTMwRDcgNi0xMzQ2CithbHdheXMgXHUzMEQ4IDEyMzQ2CithbHdheXMgXHUzMEQ5IDUtMTIzNDYKK2Fsd2F5cyBcdTMwREEgNi0xMjM0NgorYWx3YXlzIFx1MzBEQiAyMzQ2CithbHdheXMgXHUzMERDIDUtMjM0NgorYWx3YXlzIFx1MzBERCA2LTIzNDYKK2Fsd2F5cyBcdTMwREUgMTM1NgorYWx3YXlzIFx1MzBERiAxMjM1NgorYWx3YXlzIFx1MzBFMCAxMzQ1NgorYWx3YXlzIFx1MzBFMSAxMjM0NTYKK2Fsd2F5cyBcdTMwRTIgMjM0NTYKK2Fsd2F5cyBcdTMwRTMgMzQ2NzgtMzQ1Njc4CithbHdheXMgXHUzMEU0IDM0CithbHdheXMgXHUzMEU1IDM0Njc4LTE2OAorYWx3YXlzIFx1MzBFNiAzNDYKK2Fsd2F5cyBcdTMwRTcgMzQ1CithbHdheXMgXHUzMEU4IDM0NQorYWx3YXlzIFx1MzBFOSAxNQorYWx3YXlzIFx1MzBFQSAxMjUKK2Fsd2F5cyBcdTMwRUIgMTQ1CithbHdheXMgXHUzMEVDIDEyNDUKK2Fsd2F5cyBcdTMwRUQgMjQ1CithbHdheXMgXHUzMEVFIDM0Njc4LTIzOAorYWx3YXlzIFx1MzBFRiAzCithbHdheXMgXHUzMEYwIDM0Njc4LTIzNjgKK2Fsd2F5cyBcdTMwRjEgMzQ2NzgtMTQ2OAorYWx3YXlzIFx1MzBGMiAzNQorYWx3YXlzIFx1MzBGMyAzNTYKK2Fsd2F5cyBcdTMwRjQgMzQ2NzgtNjgKK2Fsd2F5cyBcdTMwRjUgMzQ2NzgtNDY4CithbHdheXMgXHUzMEY2IDM0Njc4LTM1OAorYWx3YXlzIFx1MzBGNyAyMzU2NzgtMzcKK2Fsd2F5cyBcdTMwRjggMjM1Njc4LTU2NworYWx3YXlzIFx1MzBGOSAyMzU2NzgtMjM1NworYWx3YXlzIFx1MzBGQSAyMzU2NzgtNDY3CithbHdheXMgXHUzMEZCIDUKK2Fsd2F5cyBcdTMwRkMgMjUKK2Fsd2F5cyBcdTMwRkQgMzc4LTE1Njc4CithbHdheXMgXHUzMEZFIDM3OC0yNjc4CithbHdheXMgXHUzMEZGIDI0Ni0yNgorYWx3YXlzIFx1MzEwNSAzNDU2Ny0xMzUKK2Fsd2F5cyBcdTMxMDYgMzQ1NjctMTIzNAorYWx3YXlzIFx1MzEwNyAzNDU2Ny0xMzQKK2Fsd2F5cyBcdTMxMDggMzQ1NjctMTIzNDUKK2Fsd2F5cyBcdTMxMDkgMzQ1NjctMTQ1CithbHdheXMgXHUzMTBBIDM0NTY3LTEyNAorYWx3YXlzIFx1MzEwQiAzNDU2Ny0xMzQ1CithbHdheXMgXHUzMTBDIDM0NTY3LTE0CithbHdheXMgXHUzMTBEIDM0NTY3LTEzCithbHdheXMgXHUzMTBFIDM0NTY3LTEyMworYWx3YXlzIFx1MzEwRiAzNDU2Ny0xMjM1CithbHdheXMgXHUzMTEwIDM0NTY3LTEzNworYWx3YXlzIFx1MzExMSAzNDU2Ny0yNDU3CithbHdheXMgXHUzMTEyIDM0NTY3LTE1NworYWx3YXlzIFx1MzExMyAzNDU2Ny0xCithbHdheXMgXHUzMTE0IDM0NTY3LTEyCithbHdheXMgXHUzMTE1IDM0NTY3LTI0CithbHdheXMgXHUzMTE2IDM0NTY3LTEyNDUKK2Fsd2F5cyBcdTMxMTcgMzQ1NjctMTI1CithbHdheXMgXHUzMTE4IDM0NTY3LTI0NQorYWx3YXlzIFx1MzExOSAzNDU2Ny0xNQorYWx3YXlzIFx1MzExQSAzNDU2Ny0zNDUKK2Fsd2F5cyBcdTMxMUIgMzQ1NjctMTI2CithbHdheXMgXHUzMTFDIDM0NTY3LTIzNDYKK2Fsd2F5cyBcdTMxMUQgMzQ1NjctMjYKK2Fsd2F5cyBcdTMxMUUgMzQ1NjctMjQ1NgorYWx3YXlzIFx1MzExRiAzNDU2Ny0zNTYKK2Fsd2F5cyBcdTMxMjAgMzQ1NjctMTQ2CithbHdheXMgXHUzMTIxIDM0NTY3LTEyMzU2CithbHdheXMgXHUzMTIyIDM0NTY3LTEyMzYKK2Fsd2F5cyBcdTMxMjMgMzQ1NjctMTM2CithbHdheXMgXHUzMTI0IDM0NTY3LTEzNDYKK2Fsd2F5cyBcdTMxMjUgMzQ1NjctMTM1NgorYWx3YXlzIFx1MzEyNiAzNDU2Ny0xNTYKK2Fsd2F5cyBcdTMxMjcgMzQ1NjctMTYKK2Fsd2F5cyBcdTMxMjggMzQ1NjctMzQKK2Fsd2F5cyBcdTMxMjkgMzQ1NjctMTI1NgorYWx3YXlzIFx1MzE5MiAxNi0zCithbHdheXMgXHUzMTkzIDE1Ni01CithbHdheXMgXHUzMTk0IDE1LTEyMzYtMworYWx3YXlzIFx1MzE5NSAxNS0xNTYtNQorYWx3YXlzIFx1MzE5NiAyNC0xMzQ2LTUKK2Fsd2F5cyBcdTMxOTcgMS0xMjM0Ni0zCithbHdheXMgXHUzMTk4IDE1LTIzNDU2LTUKK2Fsd2F5cyBcdTMxOTkgMTMtMjM0NTYtNAorYWx3YXlzIFx1MzE5QSAxNi00CithbHdheXMgXHUzMTlCIDEzNS0xMzQ1Ni00CithbHdheXMgXHUzMTlDIDE0NS0xMzQ1Ni0zCithbHdheXMgXHUzMTlEIDEyNC0yMzQ1LTMKK2Fsd2F5cyBcdTMxOUUgMTQ1LTE2LTUKK2Fsd2F5cyBcdTMxOUYgMTI0NS0xMzYtMgorYWx3YXlzIFx1MzFGMCAxNDYKK2Fsd2F5cyBcdTMxRjEgMTI1NgorYWx3YXlzIFx1MzFGMyAyMzQ1CithbHdheXMgXHUzMUY0IDEzNAorYWx3YXlzIFx1MzFGNSAxMzYKK2Fsd2F5cyBcdTMxRjYgMTIzNgorYWx3YXlzIFx1MzFGNyAxMzQ2CithbHdheXMgXHUzMUY4IDEyMzQ2CithbHdheXMgXHUzMUY5IDIzNDYKK2Fsd2F5cyBcdTMxRkEgMTM0NTYKK2Fsd2F5cyBcdTMxRkIgMTUKK2Fsd2F5cyBcdTMxRkMgMTI1CithbHdheXMgXHUzMUZEIDE0NQorYWx3YXlzIFx1MzFGRSAxMjQ1CithbHdheXMgXHUzMUZGIDI0NQorYWx3YXlzIFx1MzIyMCAxMjM1Ni0xNi0zLTIzNDU2CithbHdheXMgXHUzMjIxIDEyMzU2LTE1Ni01LTIzNDU2CithbHdheXMgXHUzMjIyIDEyMzU2LTE1LTEyMzYtMy0yMzQ1NgorYWx3YXlzIFx1MzIyMyAxMjM1Ni0xNS0xNTYtNS0yMzQ1NgorYWx3YXlzIFx1MzIyNCAxMjM1Ni0zNC00LTIzNDU2CithbHdheXMgXHUzMjI1IDEyMzU2LTE0LTIzNC01LTIzNDU2CithbHdheXMgXHUzMjI2IDEyMzU2LTI0NS0xNi0zLTIzNDU2CithbHdheXMgXHUzMjI3IDEyMzU2LTEzNS0zNDUtMy0yMzQ1NgorYWx3YXlzIFx1MzIyOCAxMjM1Ni0xMy0yMzQtNC0yMzQ1NgorYWx3YXlzIFx1MzIyOSAxMjM1Ni0yNC0xNTYtMi0yMzQ1NgorYWx3YXlzIFx1MzIyQSAxMjM1Ni0yMzYtNS0yMzQ1NgorYWx3YXlzIFx1MzIyQiAxMjM1Ni0xMjM1LTI1LTQtMjM0NTYKK2Fsd2F5cyBcdTMyMkMgMTIzNTYtMjQtMTI0Ni00LTIzNDU2CithbHdheXMgXHUzMjJEIDEyMzU2LTEzNC0zNC01LTIzNDU2CithbHdheXMgXHUzMjJFIDEyMzU2LTEzLTE0NTYtMy0yMzQ1NgorYWx3YXlzIFx1MzIyRiAxMjM1Ni0xMjQtMzQtNC0yMzQ1NgorYWx3YXlzIFx1MzIzMCAxMjM1Ni0xMjQ1LTE1Ni01LTIzNDU2CithbHdheXMgXHUzMjMxIDEyMzU2LTEtMzQtMy0yMzQ1NgorYWx3YXlzIFx1MzIzMiAxMjM1Ni0yMzQtNC0yMzQ1NgorYWx3YXlzIFx1MzIzMyAxMjM1Ni0yNC0yMzQ2LTUtMjM0NTYKK2Fsd2F5cyBcdTMyMzQgMTIzNTYtMTM0LTEzNDU2LTItMjM0NTYKK2Fsd2F5cyBcdTMyMzUgMTIzNTYtMTI0LTIzNDYtNS0yMzQ1NgorYWx3YXlzIFx1MzIzNiAxMjM1Ni0yNDUtMjQ1Ni0yLTIzNDU2CithbHdheXMgXHUzMjM3IDEyMzU2LTEtMzQtNS0yMzQ1NgorYWx3YXlzIFx1MzIzOCAxMjM1Ni0xNC0xNDYtMi0yMzQ1NgorYWx3YXlzIFx1MzIzOSAxMjM1Ni0xNDUtMjQ1Ni01LTIzNDU2CithbHdheXMgXHUzMjNBIDEyMzU2LTEyMzUtMzQtMy0yMzQ1NgorYWx3YXlzIFx1MzIzQiAxMjM1Ni0xNS0yMzYtMi0yMzQ1NgorYWx3YXlzIFx1MzIzQyAxMjM1Ni0xMy0yMzQ1LTMtMjM0NTYKK2Fsd2F5cyBcdTMyM0QgMTIzNTYtMjQ1LTE2LTUtMjM0NTYKK2Fsd2F5cyBcdTMyM0UgMTIzNTYtMTI1LTE1Ni0zLTIzNDU2CithbHdheXMgXHUzMjNGIDEyMzU2LTE1LTM0Ni0yLTIzNDU2CithbHdheXMgXHUzMjQwIDEyMzU2LTEzLTE2LTUtMjM0NTYKK2Fsd2F5cyBcdTMyNDEgMTIzNTYtMTUtMjM0LTMtMjM0NTYKK2Fsd2F5cyBcdTMyNDIgMTIzNTYtMTI1LTE1Ni01LTIzNDU2CithbHdheXMgXHUzMjQzIDEyMzU2LTEtMTU2LTUtMjM0NTYKK2Fsd2F5cyBcdTMyNTEgMjQ2LTIzLTItMTM1CithbHdheXMgXHUzMjUyIDI0Ni0yMy0yMy0xMzUKK2Fsd2F5cyBcdTMyNTMgMjQ2LTIzLTI1LTEzNQorYWx3YXlzIFx1MzI1NCAyNDYtMjMtMjU2LTEzNQorYWx3YXlzIFx1MzI1NSAyNDYtMjMtMjYtMTM1CithbHdheXMgXHUzMjU2IDI0Ni0yMy0yMzUtMTM1CithbHdheXMgXHUzMjU3IDI0Ni0yMy0yMzU2LTEzNQorYWx3YXlzIFx1MzI1OCAyNDYtMjMtMjM2LTEzNQorYWx3YXlzIFx1MzI1OSAyNDYtMjMtMzUtMTM1CithbHdheXMgXHUzMjVBIDI0Ni0yNS0zNTYtMTM1CithbHdheXMgXHUzMjVCIDI0Ni0yNS0yLTEzNQorYWx3YXlzIFx1MzI1QyAyNDYtMjUtMjMtMTM1CithbHdheXMgXHUzMjVEIDI0Ni0yNS0yNS0xMzUKK2Fsd2F5cyBcdTMyNUUgMjQ2LTI1LTI1Ni0xMzUKK2Fsd2F5cyBcdTMyNUYgMjQ2LTI1LTI2LTEzNQorYWx3YXlzIFx1MzI4MCAyNDYtMTYtMy0xMzUKK2Fsd2F5cyBcdTMyODEgMjQ2LTE1Ni01LTEzNQorYWx3YXlzIFx1MzI4MiAyNDYtMTUtMTIzNi0zLTEzNQorYWx3YXlzIFx1MzI4MyAyNDYtMTUtMTU2LTUtMTM1CithbHdheXMgXHUzMjg0IDI0Ni0zNC00LTEzNQorYWx3YXlzIFx1MzI4NSAyNDYtMTQtMjM0LTUtMTM1CithbHdheXMgXHUzMjg2IDI0Ni0yNDUtMTYtMy0xMzUKK2Fsd2F5cyBcdTMyODcgMjQ2LTEzNS0zNDUtMy0xMzUKK2Fsd2F5cyBcdTMyODggMjQ2LTEzLTIzNC00LTEzNQorYWx3YXlzIFx1MzI4OSAyNDYtMjQtMTU2LTItMTM1CithbHdheXMgXHUzMjhBIDI0Ni0yMzYtNS0xMzUKK2Fsd2F5cyBcdTMyOEIgMjQ2LTEyMzUtMjUtNC0xMzUKK2Fsd2F5cyBcdTMyOEMgMjQ2LTI0LTEyNDYtNC0xMzUKK2Fsd2F5cyBcdTMyOEQgMjQ2LTEzNC0zNC01LTEzNQorYWx3YXlzIFx1MzI4RSAyNDYtMTMtMTQ1Ni0zLTEzNQorYWx3YXlzIFx1MzI4RiAyNDYtMTI0LTM0LTQtMTM1CithbHdheXMgXHUzMjkwIDI0Ni0xMjQ1LTE1Ni01LTEzNQorYWx3YXlzIFx1MzI5MSAyNDYtMS0zNC0zLTEzNQorYWx3YXlzIFx1MzI5MiAyNDYtMjM0LTQtMTM1CithbHdheXMgXHUzMjkzIDI0Ni0yNC0yMzQ2LTUtMTM1CithbHdheXMgXHUzMjk0IDI0Ni0xMzQtMTM0NTYtMi0xMzUKK2Fsd2F5cyBcdTMyOTUgMjQ2LTEyNC0yMzQ2LTUtMTM1CithbHdheXMgXHUzMjk2IDI0Ni0yNDUtMjQ1Ni0yLTEzNQorYWx3YXlzIFx1MzI5NyAyNDYtMS0zNC01LTEzNQorYWx3YXlzIFx1MzI5OCAyNDYtMTQtMTQ2LTItMTM1CithbHdheXMgXHUzMjk5IDI0Ni0xMzQtMTYtNS0xMzUKK2Fsd2F5cyBcdTMyOUEgMjQ2LTEzNDUtMTIzNi0yLTEzNQorYWx3YXlzIFx1MzI5QiAyNDYtMTM0NS0xMjU2LTQtMTM1CithbHdheXMgXHUzMjlDIDI0Ni0yNC0xNTYtNS0xMzUKK2Fsd2F5cyBcdTMyOUQgMjQ2LTIzNC0zLTEzNQorYWx3YXlzIFx1MzI5RSAyNDYtMTQ1Ni01LTEzNQorYWx3YXlzIFx1MzI5RiAyNDYtMS0zNC01LTEzNQorYWx3YXlzIFx1MzJBMCAyNDYtMTUtNDYtNS0xMzUKK2Fsd2F5cyBcdTMyQTEgMjQ2LTE1LTIzNC0zLTEzNQorYWx3YXlzIFx1MzJBMiAyNDYtMTUtMzQ2LTQtMTM1CithbHdheXMgXHUzMkEzIDI0Ni0xLTEzNTYtNS0xMzUKK2Fsd2F5cyBcdTMyQTQgMjQ2LTI0LTEzNDYtNS0xMzUKK2Fsd2F5cyBcdTMyQTUgMjQ2LTEtMTIzNDYtMy0xMzUKK2Fsd2F5cyBcdTMyQTYgMjQ2LTE1LTIzNDU2LTUtMTM1CithbHdheXMgXHUzMkE3IDI0Ni0xMjUtMjUtNC0xMzUKK2Fsd2F5cyBcdTMyQTggMjQ2LTIzNC01LTEzNQorYWx3YXlzIFx1MzJBOSAyNDYtMTYtMy0xMzUKK2Fsd2F5cyBcdTMyQUEgMjQ2LTEyNS0xMjM0Ni0zLTEzNQorYWx3YXlzIFx1MzJBQiAyNDYtMTUtMjM2LTItMTM1CithbHdheXMgXHUzMkFDIDI0Ni0xMy0yMzQ1LTMtMTM1CithbHdheXMgXHUzMkFEIDI0Ni0yNDUtMTYtNS0xMzUKK2Fsd2F5cyBcdTMyQUUgMjQ2LTEyNS0xNTYtMy0xMzUKK2Fsd2F5cyBcdTMyQUYgMjQ2LTE1LTM0Ni0yLTEzNQorYWx3YXlzIFx1MzJCMCAyNDYtMzQ2LTUtMTM1CithbHdheXMgXHUzMkIxIDI0Ni0yNS0yMzUtMTM1CithbHdheXMgXHUzMkIyIDI0Ni0yNS0yMzU2LTEzNQorYWx3YXlzIFx1MzJCMyAyNDYtMjUtMjM2LTEzNQorYWx3YXlzIFx1MzJCNCAyNDYtMjUtMzUtMTM1CithbHdheXMgXHUzMkI1IDI0Ni0yNTYtMzU2LTEzNQorYWx3YXlzIFx1MzJCNiAyNDYtMjU2LTItMTM1CithbHdheXMgXHUzMkI3IDI0Ni0yNTYtMjMtMTM1CithbHdheXMgXHUzMkI4IDI0Ni0yNTYtMjUtMTM1CithbHdheXMgXHUzMkI5IDI0Ni0yNTYtMjU2LTEzNQorYWx3YXlzIFx1MzJCQSAyNDYtMjU2LTI2LTEzNQorYWx3YXlzIFx1MzJCQiAyNDYtMjU2LTIzNS0xMzUKK2Fsd2F5cyBcdTMyQkMgMjQ2LTI1Ni0yMzU2LTEzNQorYWx3YXlzIFx1MzJCRCAyNDYtMjU2LTIzNi0xMzUKK2Fsd2F5cyBcdTMyQkUgMjQ2LTI1Ni0zNS0xMzUKK2Fsd2F5cyBcdTMyQkYgMjQ2LTI2LTM1Ni0xMzUKK2Fsd2F5cyBcdTMyQzAgMjQ1LTEtMTM0Ni00NgorYWx3YXlzIFx1MzJDMSAxMjQtMTUtMTItNDYKK2Fsd2F5cyBcdTMyQzIgMTM0LTEtMTIzNS00NgorYWx3YXlzIFx1MzJDMyAxLTEyMzQtMTIzNS00NgorYWx3YXlzIFx1MzJDNCAxMzQtMS0xMzQ1Ni00NgorYWx3YXlzIFx1MzJDNSAyNDUtMTM2LTEzNDUtNDYKK2Fsd2F5cyBcdTMyQzYgMjQ1LTEzNi0xMjMtNDYKK2Fsd2F5cyBcdTMyQzcgMS0xMzYtMTI0NS00NgorYWx3YXlzIFx1MzJDOCAyMzQtMTUtMTIzNC00NgorYWx3YXlzIFx1MzJDOSAxMzUtMTQtMjM0NS00NgorYWx3YXlzIFx1MzJDQSAxMzQ1LTEzNS0xMjM2LTQ2CithbHdheXMgXHUzMkNCIDE0NS0xNS0xNC00NgorYWx3YXlzIFx1MzJEMCAyNDYtMS0xMzUKK2Fsd2F5cyBcdTMyRDEgMjQ2LTEyLTEzNQorYWx3YXlzIFx1MzJEMiAyNDYtMTQtMTM1CithbHdheXMgXHUzMkQzIDI0Ni0xMjQtMTM1CithbHdheXMgXHUzMkQ0IDI0Ni0yNC0xMzUKK2Fsd2F5cyBcdTMyRDUgMjQ2LTE2LTEzNQorYWx3YXlzIFx1MzJENiAyNDYtMTI2LTEzNQorYWx3YXlzIFx1MzJENyAyNDYtMTQ2LTEzNQorYWx3YXlzIFx1MzJEOCAyNDYtMTI0Ni0xMzUKK2Fsd2F5cyBcdTMyRDkgMjQ2LTI0Ni0xMzUKK2Fsd2F5cyBcdTMyREEgMjQ2LTE1Ni0xMzUKK2Fsd2F5cyBcdTMyREIgMjQ2LTEyNTYtMTM1CithbHdheXMgXHUzMkRDIDI0Ni0xNDU2LTEzNQorYWx3YXlzIFx1MzJERCAyNDYtMTI0NTYtMTM1CithbHdheXMgXHUzMkRFIDI0Ni0yNDU2LTEzNQorYWx3YXlzIFx1MzJERiAyNDYtMTM1LTEzNQorYWx3YXlzIFx1MzJFMCAyNDYtMTIzNS0xMzUKK2Fsd2F5cyBcdTMyRTEgMjQ2LTEzNDUtMTM1CithbHdheXMgXHUzMkUyIDI0Ni0xMjM0NS0xMzUKK2Fsd2F5cyBcdTMyRTMgMjQ2LTIzNDUtMTM1CithbHdheXMgXHUzMkU0IDI0Ni0xMy0xMzUKK2Fsd2F5cyBcdTMyRTUgMjQ2LTEyMy0xMzUKK2Fsd2F5cyBcdTMyRTYgMjQ2LTEzNC0xMzUKK2Fsd2F5cyBcdTMyRTcgMjQ2LTEyMzQtMTM1CithbHdheXMgXHUzMkU4IDI0Ni0yMzQtMTM1CithbHdheXMgXHUzMkU5IDI0Ni0xMzYtMTM1CithbHdheXMgXHUzMkVBIDI0Ni0xMjM2LTEzNQorYWx3YXlzIFx1MzJFQiAyNDYtMTM0Ni0xMzUKK2Fsd2F5cyBcdTMyRUMgMjQ2LTEyMzQ2LTEzNQorYWx3YXlzIFx1MzJFRCAyNDYtMjM0Ni0xMzUKK2Fsd2F5cyBcdTMyRUUgMjQ2LTEzNTYtMTM1CithbHdheXMgXHUzMkVGIDI0Ni0xMjM1Ni0xMzUKK2Fsd2F5cyBcdTMyRjAgMjQ2LTEzNDU2LTEzNQorYWx3YXlzIFx1MzJGMSAyNDYtMTIzNDU2LTEzNQorYWx3YXlzIFx1MzJGMiAyNDYtMjM0NTYtMTM1CithbHdheXMgXHUzMkYzIDI0Ni0zNC0xMzUKK2Fsd2F5cyBcdTMyRjQgMjQ2LTM0Ni0xMzUKK2Fsd2F5cyBcdTMyRjUgMjQ2LTM0NS0xMzUKK2Fsd2F5cyBcdTMyRjYgMjQ2LTE1LTEzNQorYWx3YXlzIFx1MzJGNyAyNDYtMTI1LTEzNQorYWx3YXlzIFx1MzJGOCAyNDYtMTQ1LTEzNQorYWx3YXlzIFx1MzJGOSAyNDYtMTI0NS0xMzUKK2Fsd2F5cyBcdTMyRkEgMjQ2LTI0NS0xMzUKK2Fsd2F5cyBcdTMyRkIgMjQ2LTMtMTM1CithbHdheXMgXHUzMkZDIDI0Ni0xMi0xMzUKK2Fsd2F5cyBcdTMyRkQgMjQ2LTE0LTEzNQorYWx3YXlzIFx1MzJGRSAyNDYtMzUtMTM1CithbHdheXMgXHUzMzU4IDM1Ni0xMjUKK2Fsd2F5cyBcdTMzNTkgMi0xMjUKK2Fsd2F5cyBcdTMzNUEgMjMtMTI1CithbHdheXMgXHUzMzVCIDI1LTEyNQorYWx3YXlzIFx1MzM1QyAyNTYtMTI1CithbHdheXMgXHUzMzVEIDI2LTEyNQorYWx3YXlzIFx1MzM1RSAyMzUtMTI1CithbHdheXMgXHUzMzVGIDIzNTYtMTI1CithbHdheXMgXHUzMzYwIDIzNi0xMjUKK2Fsd2F5cyBcdTMzNjEgMzUtMTI1CithbHdheXMgXHUzMzYyIDItMzU2LTEyNQorYWx3YXlzIFx1MzM2MyAyLTItMTI1CithbHdheXMgXHUzMzY0IDItMjMtMTI1CithbHdheXMgXHUzMzY1IDItMjUtMTI1CithbHdheXMgXHUzMzY2IDItMjU2LTEyNQorYWx3YXlzIFx1MzM2NyAyLTI2LTEyNQorYWx3YXlzIFx1MzM2OCAyLTIzNS0xMjUKK2Fsd2F5cyBcdTMzNjkgMi0yMzU2LTEyNQorYWx3YXlzIFx1MzM2QSAyLTIzNi0xMjUKK2Fsd2F5cyBcdTMzNkIgMi0zNS0xMjUKK2Fsd2F5cyBcdTMzNkMgMjMtMzU2LTEyNQorYWx3YXlzIFx1MzM2RCAyMy0yLTEyNQorYWx3YXlzIFx1MzM2RSAyMy0yMy0xMjUKK2Fsd2F5cyBcdTMzNkYgMjMtMjUtMTI1CithbHdheXMgXHUzMzcwIDIzLTI1Ni0xMjUKK2Fsd2F5cyBcdTMzODAgMTIzNC0xLTEyMzQ2CithbHdheXMgXHUzMzgxIDEzNDUtMQorYWx3YXlzIFx1MzM4MiAxMzQtMTM2LTEKK2Fsd2F5cyBcdTMzODMgMTM0LTEKK2Fsd2F5cyBcdTMzODQgMTMtMQorYWx3YXlzIFx1MzM4NSAxMy0xMgorYWx3YXlzIFx1MzM4NiAxMzQtMTIKK2Fsd2F5cyBcdTMzODcgMTI0NS0xMgorYWx3YXlzIFx1MzM4OCAxNC0xLTEyMworYWx3YXlzIFx1MzM4OSAxMy0xNC0xLTEyMworYWx3YXlzIFx1MzM4QSAxMjM0LTEyNAorYWx3YXlzIFx1MzM4QiAxMzQ1LTEyNAorYWx3YXlzIFx1MzM4QyAxMzQtMTM2LTEyNAorYWx3YXlzIFx1MzM4RCAxMzQtMTM2LTEyNDUKK2Fsd2F5cyBcdTMzOEUgMTM0LTEyNDUKK2Fsd2F5cyBcdTMzOEYgMTMtMTI0NQorYWx3YXlzIFx1MzM5MCAxMjUtMTM1NgorYWx3YXlzIFx1MzM5MSAxMy0xMjUtMTM1NgorYWx3YXlzIFx1MzM5MiAxMzQtMTI1LTEzNTYKK2Fsd2F5cyBcdTMzOTMgMTI0NS0xMjUtMTM1NgorYWx3YXlzIFx1MzM5NCAyMzQ1LTEyNS0xMzU2CithbHdheXMgXHUzMzk1IDEzNC0xMzYtMTIzCithbHdheXMgXHUzMzk2IDEzNC0xMjMKK2Fsd2F5cyBcdTMzOTcgMTQ1LTEyMworYWx3YXlzIFx1MzM5OCAxMy0xMjMKK2Fsd2F5cyBcdTMzOTkgMTI0LTEzNAorYWx3YXlzIFx1MzM5QSAxMzQ1LTEzNAorYWx3YXlzIFx1MzM5QiAxMzQtMTM2LTEzNAorYWx3YXlzIFx1MzM5QyAxMzQtMTM0CithbHdheXMgXHUzMzlEIDE0LTEzNAorYWx3YXlzIFx1MzM5RSAxMy0xMzQKK2Fsd2F5cyBcdTMzOUYgMTM0LTEzNC00NTctMjMKK2Fsd2F5cyBcdTMzQTAgMTQtMTM0LTQ1Ny0yMworYWx3YXlzIFx1MzNBMSAxMzQtNDU3LTIzCithbHdheXMgXHUzM0EyIDEzLTEzNC00NTctMjMKK2Fsd2F5cyBcdTMzQTMgMTM0LTEzNC00NTctMjUKK2Fsd2F5cyBcdTMzQTQgMTQtMTM0LTQ1Ny0yNQorYWx3YXlzIFx1MzNBNSAxMzQtNDU3LTI1CithbHdheXMgXHUzM0E2IDEzLTEzNC00NTctMjUKK2Fsd2F5cyBcdTMzRDUgMTM0LTI0LTEyMworYWx3YXlzIFx1MzNFMCAyLTE0NQorYWx3YXlzIFx1MzNFMSAyMy0xNDUKK2Fsd2F5cyBcdTMzRTIgMjUtMTQ1CithbHdheXMgXHUzM0UzIDI1Ni0xNDUKK2Fsd2F5cyBcdTMzRTQgMjYtMTQ1CithbHdheXMgXHUzM0U1IDIzNS0xNDUKK2Fsd2F5cyBcdTMzRTYgMjM1Ni0xNDUKK2Fsd2F5cyBcdTMzRTcgMjM2LTE0NQorYWx3YXlzIFx1MzNFOCAzNS0xNDUKK2Fsd2F5cyBcdTMzRTkgMi0zNTYtMTQ1CithbHdheXMgXHUzM0VBIDItMi0xNDUKK2Fsd2F5cyBcdTMzRUIgMi0yMy0xNDUKK2Fsd2F5cyBcdTMzRUMgMi0yNS0xNDUKK2Fsd2F5cyBcdTMzRUQgMi0yNTYtMTQ1CithbHdheXMgXHUzM0VFIDItMjYtMTQ1CithbHdheXMgXHUzM0VGIDItMjM1LTE0NQorYWx3YXlzIFx1MzNGMCAyLTIzNTYtMTQ1CithbHdheXMgXHUzM0YxIDItMjM2LTE0NQorYWx3YXlzIFx1MzNGMiAyLTM1LTE0NQorYWx3YXlzIFx1MzNGMyAyMy0zNTYtMTQ1CithbHdheXMgXHUzM0Y0IDIzLTItMTQ1CithbHdheXMgXHUzM0Y1IDIzLTIzLTE0NQorYWx3YXlzIFx1MzNGNiAyMy0yNS0xNDUKK2Fsd2F5cyBcdTMzRjcgMjMtMjU2LTE0NQorYWx3YXlzIFx1MzNGOCAyMy0yNi0xNDUKK2Fsd2F5cyBcdTMzRjkgMjMtMjM1LTE0NQorYWx3YXlzIFx1MzNGQSAyMy0yMzU2LTE0NQorYWx3YXlzIFx1MzNGQiAyMy0yMzYtMTQ1CithbHdheXMgXHUzM0ZDIDIzLTM1LTE0NQorYWx3YXlzIFx1MzNGRCAyNS0zNTYtMTQ1CithbHdheXMgXHUzM0ZFIDI1LTItMTQ1CithbHdheXMgXHU2N0QwIDEzNC0xMjM1Ni00CithbHdheXMgXHVGQjAxIDEyNC0yNAorYWx3YXlzIFx1RkIwMiAxMjQtMTIzCisKK2luY2x1ZGUgemgtdHcuY3RpCisKK2Fsd2F5cyBcdUUxOEMgMTIzNTYtMTctMjM0NTYKK2Fsd2F5cyBcdUUxOEQgMTIzNTYtMTI3LTIzNDU2CithbHdheXMgXHVFMThFIDEyMzU2LTE0Ny0yMzQ1NgorYWx3YXlzIFx1RTE4RiAxMjM1Ni0xNDU3LTIzNDU2CithbHdheXMgXHVGOTAwIDI0NS0xNi00CithbHdheXMgXHVGOTAxIDEzLTEzNTYtNQorYWx3YXlzIFx1RjkwMiAxMi0yMzQ2LTMKK2Fsd2F5cyBcdUY5MDMgMTMtMjM0NTYtNAorYWx3YXlzIFx1RjkwNCAxMjM1LTM1LTIKK2Fsd2F5cyBcdUY5MDUgMTItMTI0NTYtNQorYWx3YXlzIFx1RjkwNiAxMy0xMjU2LTUKK2Fsd2F5cyBcdUY5MDcgMTMtMTI0Ni0zCithbHdheXMgXHVGOTA4IDEzLTEyNDYtMworYWx3YXlzIFx1RjkwOSAyNDUtMTYtNQorYWx3YXlzIFx1RjkwQSAxMy0xNDU2LTMKK2Fsd2F5cyBcdUY5MEIgMTQtMzQ1LTQKK2Fsd2F5cyBcdUY5MEMgMTM0NS0yNDU2LTUKK2Fsd2F5cyBcdUY5MEQgMTQtMTIzNi00CithbHdheXMgXHVGOTBFIDE0LTI0NTYtNQorYWx3YXlzIFx1RjkwRiAxNC0yNS0yCithbHdheXMgXHVGOTEwIDE0LTI1LTIKK2Fsd2F5cyBcdUY5MTEgMTQtMjUtMgorYWx3YXlzIFx1RjkxMiAxNC0yNS00CithbHdheXMgXHVGOTEzIDE0LTI1LTIKK2Fsd2F5cyBcdUY5MTQgMTQtMjM0Ni01CithbHdheXMgXHVGOTE1IDE0LTE0Ni01CithbHdheXMgXHVGOTE2IDE0LTI1LTUKK2Fsd2F5cyBcdUY5MTcgMTQtMjUtNQorYWx3YXlzIFx1RjkxOCAxNC0yNS01CithbHdheXMgXHVGOTE5IDE0LTE0Ni01CithbHdheXMgXHVGOTFBIDE0LTI1LTUKK2Fsd2F5cyBcdUY5MUIgMTQtMTI0NTYtNQorYWx3YXlzIFx1RjkxQyAxNC0xMjQ1Ni00CithbHdheXMgXHVGOTFEIDE0LTEyMzYtMgorYWx3YXlzIFx1RjkxRSAxNC0xMjM2LTUKK2Fsd2F5cyBcdUY5MUYgMTQtMTIzNi0yCithbHdheXMgXHVGOTIwIDE0LTEyNDU2LTIKK2Fsd2F5cyBcdUY5MjEgMTQtMTIzNi0yCithbHdheXMgXHVGOTIyIDE0LTEyMzYtNQorYWx3YXlzIFx1RjkyMyAxNC0xMjM2LTIKK2Fsd2F5cyBcdUY5MjQgMTQtMTIzNi0yCithbHdheXMgXHVGOTI1IDE0LTM0NS0zCithbHdheXMgXHVGOTI2IDE0LTM0NS01CithbHdheXMgXHVGOTI3IDE0LTM0NS01CithbHdheXMgXHVGOTI4IDE0LTEzNDYtMgorYWx3YXlzIFx1RjkyOSAxNC0xMzQ2LTQKK2Fsd2F5cyBcdUY5MkEgMTQtMTM0Ni01CithbHdheXMgXHVGOTJCIDE0LTEzNDYtMgorYWx3YXlzIFx1RjkyQyAxNC0xMzQ2LTIKK2Fsd2F5cyBcdUY5MkQgMTQtMjQ1Ni0yCithbHdheXMgXHVGOTJFIDE0LTEzNTYtNAorYWx3YXlzIFx1RjkyRiAxNC0xNDYtMgorYWx3YXlzIFx1RjkzMCAxNC0zNC00CithbHdheXMgXHVGOTMxIDE0LTM0LTQKK2Fsd2F5cyBcdUY5MzIgMTQtMzQtMgorYWx3YXlzIFx1RjkzMyAxNC0zNC0yCithbHdheXMgXHVGOTM0IDE0LTE0Ni00CithbHdheXMgXHVGOTM1IDE0LTM0LTIKK2Fsd2F5cyBcdUY5MzYgMTQtMzQtNAorYWx3YXlzIFx1RjkzNyAxNC0zNC01CithbHdheXMgXHVGOTM4IDE0LTM0LTUKK2Fsd2F5cyBcdUY5MzkgMTQtMzQtNAorYWx3YXlzIFx1RjkzQSAxNC0zNC01CithbHdheXMgXHVGOTNCIDE0LTM0LTUKK2Fsd2F5cyBcdUY5M0MgMTQtMzQtNQorYWx3YXlzIFx1RjkzRCAxNC0xMjU2LTUKK2Fsd2F5cyBcdUY5M0UgMTQtMzQtNQorYWx3YXlzIFx1RjkzRiAxNC0zNC01CithbHdheXMgXHVGOTQwIDE0LTM0LTUKK2Fsd2F5cyBcdUY5NDEgMTQtMTIzNDU2LTUKK2Fsd2F5cyBcdUY5NDIgMTQtMTIzNDYtNAorYWx3YXlzIFx1Rjk0MyAxMzQ1LTEyMzQ2LTUKK2Fsd2F5cyBcdUY5NDQgMTQtMTIzNDYtMgorYWx3YXlzIFx1Rjk0NSAxNC0xMjM0Ni0yCithbHdheXMgXHVGOTQ2IDE0LTE0Ni0yCithbHdheXMgXHVGOTQ3IDE0LTM1Ni00CithbHdheXMgXHVGOTQ4IDE0LTM0LTUKK2Fsd2F5cyBcdUY5NDkgMTQtMzU2LTIKK2Fsd2F5cyBcdUY5NEEgMTQtMzU2LTQKK2Fsd2F5cyBcdUY5NEIgMTQtMTI1Ni00CithbHdheXMgXHVGOTRDIDE0LTEyMzU2LTIKK2Fsd2F5cyBcdUY5NEQgMTQtMzU2LTUKK2Fsd2F5cyBcdUY5NEUgMTQtMTIzNTYtNQorYWx3YXlzIFx1Rjk0RiAxNC0zNTYtNQorYWx3YXlzIFx1Rjk1MCAxNC0xMjU2LTQKK2Fsd2F5cyBcdUY5NTEgMTQtMTIzNTYtNQorYWx3YXlzIFx1Rjk1MiAxNC0yMzQ2LTUKK2Fsd2F5cyBcdUY5NTMgMTQtMzU2LTUKK2Fsd2F5cyBcdUY5NTQgMTQtMTQ1Ni00CithbHdheXMgXHVGOTU1IDE0LTEzNDU2LTIKK2Fsd2F5cyBcdUY5NTYgMTQtMTM1Ni0yCithbHdheXMgXHVGOTU3IDE0LTEzNDU2LTIKK2Fsd2F5cyBcdUY5NTggMTQtMTM0NTYtMgorYWx3YXlzIFx1Rjk1OSAxNC0xMzQ1Ni0yCithbHdheXMgXHVGOTVBIDE0NS0zNC0yCithbHdheXMgXHVGOTVCIDEzNDUtMzQ1LTIKK2Fsd2F5cyBcdUY5NUMgMTQtMjM0Ni01CithbHdheXMgXHVGOTVEIDEzNDUtMjUtNQorYWx3YXlzIFx1Rjk1RSAxNDUtMTIzNi0zCithbHdheXMgXHVGOTVGIDEzNDUtMTM0NTYtMgorYWx3YXlzIFx1Rjk2MCAxMzQ1LTM0LTUKK2Fsd2F5cyBcdUY5NjEgMTQtMTI1Ni01CithbHdheXMgXHVGOTYyIDE2LTUKK2Fsd2F5cyBcdUY5NjMgMTM1LTM1Ni00CithbHdheXMgXHVGOTY0IDEyMzQtMTIzNi0yCithbHdheXMgXHVGOTY1IDEzNS0yMzQ1LTUKK2Fsd2F5cyBcdUY5NjYgMTIzNDUtMzQtNQorYWx3YXlzIFx1Rjk2NyAxMzUtMzQtNQorYWx3YXlzIFx1Rjk2OCAxMzQtMTYtNQorYWx3YXlzIFx1Rjk2OSAyNC0zNC01CithbHdheXMgXHVGOTZBIDE1LTI1LTQKK2Fsd2F5cyBcdUY5NkIgMjQ1LTEyMzYtMworYWx3YXlzIFx1Rjk2QyAxNS0yMzQ2LTUKK2Fsd2F5cyBcdUY5NkQgMjQtMTM1Ni00CithbHdheXMgXHVGOTZFIDM0Ni01CithbHdheXMgXHVGOTZGIDI0LTI1LTMKK2Fsd2F5cyBcdUY5NzAgMjQtMzQ1LTMKK2Fsd2F5cyBcdUY5NzEgMTItMTM2LTIKK2Fsd2F5cyBcdUY5NzIgMjQtMTM2LTQKK2Fsd2F5cyBcdUY5NzMgMjQtMTU2LTIKK2Fsd2F5cyBcdUY5NzQgMTI0NS0yNS01CithbHdheXMgXHVGOTc1IDE0LTIzNi01CithbHdheXMgXHVGOTc2IDE0LTIzNi01CithbHdheXMgXHVGOTc3IDE0LTQ2LTUKK2Fsd2F5cyBcdUY5NzggMTQtNDYtNAorYWx3YXlzIFx1Rjk3OSAxNC00Ni0yCithbHdheXMgXHVGOTdBIDE0LTQ2LTIKK2Fsd2F5cyBcdUY5N0IgMTQtNDYtMgorYWx3YXlzIFx1Rjk3QyAxNC00Ni0yCithbHdheXMgXHVGOTdEIDE0LTQ2LTUKK2Fsd2F5cyBcdUY5N0UgMTQtNDYtNQorYWx3YXlzIFx1Rjk3RiAxNC0xNi01CithbHdheXMgXHVGOTgwIDE0LTEyNTYtNAorYWx3YXlzIFx1Rjk4MSAxMzQ1LTEyNTYtNAorYWx3YXlzIFx1Rjk4MiAxNC0zNC0yCithbHdheXMgXHVGOTgzIDE0LTEyNTYtNAorYWx3YXlzIFx1Rjk4NCAxNC0xMjU2LTUKK2Fsd2F5cyBcdUY5ODUgMTQtMTYtNQorYWx3YXlzIFx1Rjk4NiAxNC0xMjU2LTIKK2Fsd2F5cyBcdUY5ODcgMTQtMTYtMgorYWx3YXlzIFx1Rjk4OCAxNC0xNi01CithbHdheXMgXHVGOTg5IDE0LTE2LTIKK2Fsd2F5cyBcdUY5OEEgMTQtMTYtNQorYWx3YXlzIFx1Rjk4QiAxNC0xNi01CithbHdheXMgXHVGOThDIDE0LTE2LTUKK2Fsd2F5cyBcdUY5OEQgMTQtMTYtNQorYWx3YXlzIFx1Rjk4RSAxMzQ1LTIzNDUtMgorYWx3YXlzIFx1Rjk4RiAxNC0yMzQ1LTIKK2Fsd2F5cyBcdUY5OTAgMTQtMjM0NS01CithbHdheXMgXHVGOTkxIDEzNDUtMjM0NS00CithbHdheXMgXHVGOTkyIDE0LTIzNDUtMgorYWx3YXlzIFx1Rjk5MyAxNC0yMzQ1LTUKK2Fsd2F5cyBcdUY5OTQgMTQtMjM0NS00CithbHdheXMgXHVGOTk1IDEzNDUtMjM0NS0yCithbHdheXMgXHVGOTk2IDE0LTIzNDUtNQorYWx3YXlzIFx1Rjk5NyAxNC0yMzQ1LTIKK2Fsd2F5cyBcdUY5OTggMTM0NS0yMzQ1LTQKK2Fsd2F5cyBcdUY5OTkgMTQtMjM0NS0yCithbHdheXMgXHVGOTlBIDE0LTIzNDUtMgorYWx3YXlzIFx1Rjk5QiAxNC0yMzQ1LTUKK2Fsd2F5cyBcdUY5OUMgMTQtMzQ2LTUKK2Fsd2F5cyBcdUY5OUQgMTQtMzQ2LTUKK2Fsd2F5cyBcdUY5OUUgMjM0NS01CithbHdheXMgXHVGOTlGIDE0LTM0Ni01CithbHdheXMgXHVGOUEwIDE0LTM0Ni01CithbHdheXMgXHVGOUExIDI0LTI1LTMKK2Fsd2F5cyBcdUY5QTIgMTQtMjM0NS0yCithbHdheXMgXHVGOUEzIDEzNDUtMjM0NS01CithbHdheXMgXHVGOUE0IDEzNDUtMjM0NS00CithbHdheXMgXHVGOUE1IDE0LTIzNDUtNQorYWx3YXlzIFx1RjlBNiAxNC0yMzQ1LTIKK2Fsd2F5cyBcdUY5QTcgMTQtMzQ2LTUKK2Fsd2F5cyBcdUY5QTggMTQtMTM0NTYtNQorYWx3YXlzIFx1RjlBOSAxNC0xMzQ1Ni0yCithbHdheXMgXHVGOUFBIDEzNDUtMTM0NTYtMgorYWx3YXlzIFx1RjlBQiAxNC0xMzQ1Ni00CithbHdheXMgXHVGOUFDIDE0LTIzNDUtMgorYWx3YXlzIFx1RjlBRCAxNC0xMzQ1Ni0yCithbHdheXMgXHVGOUFFIDEzNDU2LTIKK2Fsd2F5cyBcdUY5QUYgMTQtMTM0NTYtMgorYWx3YXlzIFx1RjlCMCAxNC0xMzQ1Ni0yCithbHdheXMgXHVGOUIxIDE0LTEzNDU2LTIKK2Fsd2F5cyBcdUY5QjIgMTQtMTM0NTYtMgorYWx3YXlzIFx1RjlCMyAxNC0xMzQ1Ni0yCithbHdheXMgXHVGOUI0IDE0LTEzNDU2LTQKK2Fsd2F5cyBcdUY5QjUgMTQtMTYtNQorYWx3YXlzIFx1RjlCNiAxNC0xNi00CithbHdheXMgXHVGOUI3IDE0LTE2LTQKK2Fsd2F5cyBcdUY5QjggMTQtMTYtNQorYWx3YXlzIFx1RjlCOSAyMzQ2LTUKK2Fsd2F5cyBcdUY5QkEgMTQtMjM0Ni0xCithbHdheXMgXHVGOUJCIDE0LTI0Ni0yCithbHdheXMgXHVGOUJDIDE0LTI0Ni0yCithbHdheXMgXHVGOUJEIDEzNDUtMjQ2LTUKK2Fsd2F5cyBcdUY5QkUgMTQtMjQ2LTUKK2Fsd2F5cyBcdUY5QkYgMTQtMjM0Ni01CithbHdheXMgXHVGOUMwIDE0LTI0Ni00CithbHdheXMgXHVGOUMxIDE0LTI0Ni0yCithbHdheXMgXHVGOUMyIDE0LTI0Ni00CithbHdheXMgXHVGOUMzIDE0LTI0Ni0yCithbHdheXMgXHVGOUM0IDE0LTEyMzQ2LTIKK2Fsd2F5cyBcdUY5QzUgMjU2LTMKK2Fsd2F5cyBcdUY5QzYgMTI0NS0xMjQ1Ni00CithbHdheXMgXHVGOUM3IDE0LTIzNC0yCithbHdheXMgXHVGOUM4IDEyLTEyMzU2LTQKK2Fsd2F5cyBcdUY5QzkgMTQtMjM0LTQKK2Fsd2F5cyBcdUY5Q0EgMTQtMjM0LTIKK2Fsd2F5cyBcdUY5Q0IgMTQtMjM0LTMKK2Fsd2F5cyBcdUY5Q0MgMTQtMjM0LTIKK2Fsd2F5cyBcdUY5Q0QgMTQtMjM0LTIKK2Fsd2F5cyBcdUY5Q0UgMTQtMjM0LTIKK2Fsd2F5cyBcdUY5Q0YgMTM0NS0yMzQtNAorYWx3YXlzIFx1RjlEMCAxNC0zNTYtNQorYWx3YXlzIFx1RjlEMSAxNC0yMzQtNQorYWx3YXlzIFx1RjlEMiAxNC0zNC01CithbHdheXMgXHVGOUQzIDE0LTM0LTUKK2Fsd2F5cyBcdUY5RDQgMTQtMTIzNDU2LTIKK2Fsd2F5cyBcdUY5RDUgMTQtMTIzNDU2LTIKK2Fsd2F5cyBcdUY5RDYgMTQtMTIzNDU2LTIKK2Fsd2F5cyBcdUY5RDcgMTQtMTIzNDU2LTIKK2Fsd2F5cyBcdUY5RDggMTQtMTI1Ni01CithbHdheXMgXHVGOUQ5IDE0LTE2LTUKK2Fsd2F5cyBcdUY5REEgMTQtMTYtNQorYWx3YXlzIFx1RjlEQiAxNC0xMjU2LTUKK2Fsd2F5cyBcdUY5REMgMTQtMTIzNDYtMgorYWx3YXlzIFx1RjlERCAxNC0xNi01CithbHdheXMgXHVGOURFIDE0LTE2LTUKK2Fsd2F5cyBcdUY5REYgMTQtMTI1Ni00CithbHdheXMgXHVGOUUwIDE2LTUKK2Fsd2F5cyBcdUY5RTEgMTQtMTYtNAorYWx3YXlzIFx1RjlFMiAxNC0xNi0yCithbHdheXMgXHVGOUUzIDEzNDUtMTYtMgorYWx3YXlzIFx1RjlFNCAxNC0xNi00CithbHdheXMgXHVGOUU1IDE0LTE2LTUKK2Fsd2F5cyBcdUY5RTYgMTQtMTYtMgorYWx3YXlzIFx1RjlFNyAxNC0xNi00CithbHdheXMgXHVGOUU4IDE0LTE2LTQKK2Fsd2F5cyBcdUY5RTkgMTQtMTYtNAorYWx3YXlzIFx1RjlFQSAxNC0xNi0yCithbHdheXMgXHVGOUVCIDEzNDUtMTYtNQorYWx3YXlzIFx1RjlFQyAxMzQ1LTE2LTUKK2Fsd2F5cyBcdUY5RUQgMTQtMTQ1Ni01CithbHdheXMgXHVGOUVFIDE0LTE0NTYtMgorYWx3YXlzIFx1RjlFRiAxNC0xNDU2LTIKK2Fsd2F5cyBcdUY5RjAgMTQtMTQ1Ni01CithbHdheXMgXHVGOUYxIDE0LTE0NTYtMgorYWx3YXlzIFx1RjlGMiAxNC0xNDU2LTIKK2Fsd2F5cyBcdUY5RjMgMTQtMTQ1Ni0yCithbHdheXMgXHVGOUY0IDE0LTE0NTYtMgorYWx3YXlzIFx1RjlGNSAxNC0xNDU2LTIKK2Fsd2F5cyBcdUY5RjYgMTQtMTQ1Ni0yCithbHdheXMgXHVGOUY3IDE0LTE2LTUKK2Fsd2F5cyBcdUY5RjggMTQtMTYtNQorYWx3YXlzIFx1RjlGOSAxNC0xNi01CithbHdheXMgXHVGOUZBIDEtNDU2LTUKK2Fsd2F5cyBcdUY5RkIgMS0xNTYtNQorYWx3YXlzIFx1RjlGQyAyNC0xNTYtMgorYWx3YXlzIFx1RjlGRCAyNC0xNTYtMgorYWx3YXlzIFx1RjlGRSAxMi0zNDUtMgorYWx3YXlzIFx1RjlGRiAyNDUtMTU2LTUKK2Fsd2F5cyBcdUZBMDAgMjQ1LTM0Ni0zCithbHdheXMgXHVGQTAxIDE0NS0zNC01CithbHdheXMgXHVGQTAyIDEyNC0yNS01CithbHdheXMgXHVGQTAzIDEyNC0xMzQ2LTIKK2Fsd2F5cyBcdUZBMDQgMS0yNDU2LTIKK2Fsd2F5cyBcdUZBMDUgMTQ1LTEyMzQ2LTUKK2Fsd2F5cyBcdUZBMDYgMTM1LTE0Ni01CithbHdheXMgXHVGQTA3IDEyMzQ1LTM0LTIKK2Fsd2F5cyBcdUZBMDggMTUtMTM0NTYtMgorYWx3YXlzIFx1RkEwOSAxMy00Ni01CithbHdheXMgXHVGQTBBIDEzLTIzNDUtNQorYWx3YXlzIFx1RkEwQiAxMjMtMjUtNQorYWx3YXlzIFx1RkEwQyAzNC01CithbHdheXMgXHVGQTBEIDEyMzUtMjUtNQorYWx3YXlzIFx1RkEwRSAyNC00NTYtMworYWx3YXlzIFx1RkEwRiAxNS0xMjU2LTUKK2Fsd2F5cyBcdUZBMTAgMS0xMjM0Ni00CithbHdheXMgXHVGQTExIDI0NS0xNi0yCithbHdheXMgXHVGQTEyIDI0NS0xMzQ1Ni0yCithbHdheXMgXHVGQTEzIDEyMzQ1LTM0LTIKK2Fsd2F5cyBcdUZBMTQgMTMtMTI1Ni00CithbHdheXMgXHVGQTE1IDE1LTE2LTMKK2Fsd2F5cyBcdUZBMTYgMS0zNC0zCithbHdheXMgXHVGQTE3IDE2LTUKK2Fsd2F5cyBcdUZBMTggMTQtMTYtNAorYWx3YXlzIFx1RkExOSAyNC0xMzYtMgorYWx3YXlzIFx1RkExQSAxNS00Ni0yCithbHdheXMgXHVGQTFCIDEyMzQ1LTM0LTIKK2Fsd2F5cyBcdUZBMUMgMTMtMTM0NTYtNQorYWx3YXlzIFx1RkExRCAxMy0xMzQ1Ni0zCithbHdheXMgXHVGQTFFIDEyNTYtNAorYWx3YXlzIFx1RkExRiAyNDU2LTEKK2Fsd2F5cyBcdUZBMjAgMjQ1LTIzNC0zCithbHdheXMgXHVGQTIxIDI0LTEzNTYtMworYWx3YXlzIFx1RkEyMiAxLTM0LTMKK2Fsd2F5cyBcdUZBMjMgMTQ1LTI1LTMKK2Fsd2F5cyBcdUZBMjQgMTMtMTYtMgorYWx3YXlzIFx1RkEyNSAxNi01CithbHdheXMgXHVGQTI2IDE0NS0xMjM1Ni0zCithbHdheXMgXHVGQTI3IDE1LTI0Ni01CithbHdheXMgXHVGQTI4IDE1LTE0NTYtNQorYWx3YXlzIFx1RkEyOSAxNDUtMTQ2LTQKK2Fsd2F5cyBcdUZBMkEgMTIzNDUtMTIzNi01CithbHdheXMgXHVGQTJCIDE1LTE1Ni01CithbHdheXMgXHVGQTJDIDEzLTEyNDU2LTQKK2Fsd2F5cyBcdUZBMkQgMTIzNS0yMzQ2LTUKK2Fsd2F5cyBcdUZBMzAgMzQtNAorYWx3YXlzIFx1RkEzMSAxNS0xMzU2LTMKK2Fsd2F5cyBcdUZBMzIgMTM0LTIzNDUtNAorYWx3YXlzIFx1RkEzMyAxMzQtMjM0NS00CithbHdheXMgXHVGQTM0IDI0NS0xNDU2LTIKK2Fsd2F5cyBcdUZBMzUgMTM1LTM1Ni0zCithbHdheXMgXHVGQTM2IDEyMzUtMjM0Ni0zCithbHdheXMgXHVGQTM3IDEyNC0xMjM2LTUKK2Fsd2F5cyBcdUZBMzggMjQ1LTE2LTUKK2Fsd2F5cyBcdUZBM0EgMTM0LTEyNi01CithbHdheXMgXHVGQTNCIDI0NS0xMzU2LTIKK2Fsd2F5cyBcdUZBM0MgMjQ1LTE0Ni00CithbHdheXMgXHVGQTNEIDEyMzUtMTI0Ni00CithbHdheXMgXHVGQTNFIDEyMy0yNDU2LTQKK2Fsd2F5cyBcdUZBM0YgMTI1LTEzNTYtMworYWx3YXlzIFx1RkE0MCAxMi0xMzU2LTIKK2Fsd2F5cyBcdUZBNDEgMTM0LTE0NTYtNAorYWx3YXlzIFx1RkE0MiAxMy0xNi01CithbHdheXMgXHVGQTQzIDI0LTM0LTQKK2Fsd2F5cyBcdUZBNDQgMTM0LTM1Ni0yCithbHdheXMgXHVGQTQ1IDEyMzUtMjQ1Ni00CithbHdheXMgXHVGQTQ2IDEtMzQtNAorYWx3YXlzIFx1RkE0NyAxMjM1LTEyMzYtNQorYWx3YXlzIFx1RkE0OCAxLTM0LTQKK2Fsd2F5cyBcdUZBNEEgMS0yNS0yCithbHdheXMgXHVGQTRCIDEzNS0zNTYtMworYWx3YXlzIFx1RkE0QyAyNC0yMzQ2LTUKK2Fsd2F5cyBcdUZBNEQgMS0xNTYtNAorYWx3YXlzIFx1RkE0RSAyNDUtMTYtMgorYWx3YXlzIFx1RkE0RiAyMzQtNQorYWx3YXlzIFx1RkE1MCAxMjUtMzQtNAorYWx3YXlzIFx1RkE1MSAxLTM0LTUKK2Fsd2F5cyBcdUZBNTIgMTIzNS0yNS01CithbHdheXMgXHVGQTUzIDEtMTM2LTMKK2Fsd2F5cyBcdUZBNTQgMTMtMzQtNAorYWx3YXlzIFx1RkE1NSAxMjQtMzQtMworYWx3YXlzIFx1RkE1NiAxMy0zNDYtMgorYWx3YXlzIFx1RkE1NyAxNC0yMzQ1LTUKK2Fsd2F5cyBcdUZBNTggMTMtMTQ1Ni01CithbHdheXMgXHVGQTU5IDEyMzQ1LTEyMzYtMgorYWx3YXlzIFx1RkE1QSAyNC0zNC00CithbHdheXMgXHVGQTVCIDEtMjM0Ni00CithbHdheXMgXHVGQTVDIDEyLTEyMzU2LTUKK2Fsd2F5cyBcdUZBNUQgMjQ1LTE0Ni00CithbHdheXMgXHVGQTVFIDI0NS0xNDYtNAorYWx3YXlzIFx1RkE1RiAxLTIzNDYtMQorYWx3YXlzIFx1RkE2MCAxMjM1LTIzNDYtNQorYWx3YXlzIFx1RkE2MSAyNC0xNTYtNQorYWx3YXlzIFx1RkE2MiAzNDYtNQorYWx3YXlzIFx1RkE2MyAxMy0xNDU2LTQKK2Fsd2F5cyBcdUZBNjQgMTM1LTE0NTYtMworYWx3YXlzIFx1RkE2NSAxMjUtMTM1Ni01CithbHdheXMgXHVGQTY2IDEtMTU2LTMKK2Fsd2F5cyBcdUZBNjcgMTYtNQorYWx3YXlzIFx1RkE2OCAxMzQ1LTEyMzYtMgorYWx3YXlzIFx1RkE2OSAxNS00Ni00CithbHdheXMgXHVGQTZBIDEyMzQtMTQ1Ni0yCithbHdheXMgXHVGQTZGIDEtMzQtNQorYWx3YXlzIFx1RkE3MCAxMzUtMTM0NTYtNQorYWx3YXlzIFx1RkE3MSAxMjMtNDU2LTUKK2Fsd2F5cyBcdUZBNzIgMjQ1LTQ1LTIKK2Fsd2F5cyBcdUZBNzMgMTUtMTM0NTYtMgorYWx3YXlzIFx1RkE3NCAxMi0xMjM0Ni0zCithbHdheXMgXHVGQTc1IDEzLTE2LTUKK2Fsd2F5cyBcdUZBNzYgMjM1LTQKK2Fsd2F5cyBcdUZBNzcgMjQtMTQ2LTIKK2Fsd2F5cyBcdUZBNzggMTIzNS0yMzQ2LTMKK2Fsd2F5cyBcdUZBNzkgMTI0LTE0Ni0yCithbHdheXMgXHVGQTdBIDEyMzUtMTI0Ni01CithbHdheXMgXHVGQTdCIDM1LTUKK2Fsd2F5cyBcdUZBN0MgMS0xMjM0Ni00CithbHdheXMgXHVGQTdEIDEyMzQ1LTEzNi0yCithbHdheXMgXHVGQTdFIDIzNDUtNAorYWx3YXlzIFx1RkE3RiAxMzUtMTM2LTUKK2Fsd2F5cyBcdUZBODAgMTM1LTE2LTUKK2Fsd2F5cyBcdUZBODEgMjQ1LTE1Ni0yCithbHdheXMgXHVGQTgyIDE0Ni0yCithbHdheXMgXHVGQTgzIDE2LTUKK2Fsd2F5cyBcdUZBODQgMjQ1LTI0NTYtNAorYWx3YXlzIFx1RkE4NSAyNDYtMgorYWx3YXlzIFx1RkE4NiA0NTYtNAorYWx3YXlzIFx1RkE4NyAyNC0xMzYtNQorYWx3YXlzIFx1RkE4OCAxMjU2LTUKK2Fsd2F5cyBcdUZBODkgMTI1LTEzNTYtMworYWx3YXlzIFx1RkE4QSAxNDYtNQorYWx3YXlzIFx1RkE4QiAxMi0xMzU2LTIKK2Fsd2F5cyBcdUZBOEMgMTQ1LTI0NTYtNQorYWx3YXlzIFx1RkE4RCAxMjU2LTIKK2Fsd2F5cyBcdUZBOEUgMTUtMTIzNTYtMworYWx3YXlzIFx1RkE4RiAxMzUtMTM0NTYtNQorYWx3YXlzIFx1RkE5MCAxNDYtMgorYWx3YXlzIFx1RkE5MSAyNDUtMTM0NTYtMgorYWx3YXlzIFx1RkE5MiAxNC0xMzQ2LTQKK2Fsd2F5cyBcdUZBOTMgNDU2LTUKK2Fsd2F5cyBcdUZBOTQgMS0xMzQ2LTUKK2Fsd2F5cyBcdUZBOTUgMTQ1LTI0NTYtNAorYWx3YXlzIFx1RkE5NiAyNC0zNDUtMworYWx3YXlzIFx1RkE5NyAxNC0yMzQtMgorYWx3YXlzIFx1RkE5OCAxNDU2LTIKK2Fsd2F5cyBcdUZBOTkgMTI1LTE1Ni0zCithbHdheXMgXHVGQTlBIDEyMzUtMTIzNi01CithbHdheXMgXHVGQTlCIDEzLTE0NTYtNQorYWx3YXlzIFx1RkE5QyAxLTM0LTQKK2Fsd2F5cyBcdUZBOUQgMjQ1LTI0Ni0yCithbHdheXMgXHVGQTlFIDEzLTIzNi0yCithbHdheXMgXHVGQTlGIDEyMzQ1LTEyMzYtNQorYWx3YXlzIFx1RkFBMCAxLTM0LTMKK2Fsd2F5cyBcdUZBQTEgMTI0LTIzNDUtNQorYWx3YXlzIFx1RkFBMiAyNDUtMTU2LTIKK2Fsd2F5cyBcdUZBQTMgMTMtMzUtNQorYWx3YXlzIFx1RkFBNCAxMy0xMjQ1Ni0zCithbHdheXMgXHVGQUE1IDEyMzQ1Ni0zCithbHdheXMgXHVGQUE2IDE2LTUKK2Fsd2F5cyBcdUZBQTcgMjQtMTM1Ni01CithbHdheXMgXHVGQUE4IDEtMTU2LTIKK2Fsd2F5cyBcdUZBQTkgMTMtNDUtNQorYWx3YXlzIFx1RkFBQSAxLTIzNDYtMQorYWx3YXlzIFx1RkFBQiAxLTEzNi0zCithbHdheXMgXHVGQUFDIDEyNC0yNDYtNQorYWx3YXlzIFx1RkFBRCAxMy0zNDYtMgorYWx3YXlzIFx1RkFBRSAxNC0zNTYtNQorYWx3YXlzIFx1RkFBRiAxMjQtMTQ2LTMKK2Fsd2F5cyBcdUZBQjAgMTQtMjM0NS01CithbHdheXMgXHVGQUIxIDEyNC0xMzQ1Ni0yCithbHdheXMgXHVGQUIyIDEtMjM0Ni00CithbHdheXMgXHVGQUIzIDEyMzUtNDU2LTMKK2Fsd2F5cyBcdUZBQjQgMTIzNS0zNS0yCithbHdheXMgXHVGQUI1IDE0NTYtMworYWx3YXlzIFx1RkFCNiAyNDUtNDYtNAorYWx3YXlzIFx1RkFCNyAxMjM0NS0zNC01CithbHdheXMgXHVGQUI4IDI0LTE1Ni01CithbHdheXMgXHVGQUI5IDE0NS0yNDYtNQorYWx3YXlzIFx1RkFCQSAxLTM0LTMKK2Fsd2F5cyBcdUZBQkIgMjQ1LTEzNDU2LTQKK2Fsd2F5cyBcdUZBQkMgMzQ2LTUKK2Fsd2F5cyBcdUZBQkQgMTM0NS0yNS01CithbHdheXMgXHVGQUJFIDEyNTYtNQorYWx3YXlzIFx1RkFCRiAxMy0xNDU2LTQKK2Fsd2F5cyBcdUZBQzAgMTM1LTIzNDUtNQorYWx3YXlzIFx1RkFDMSAxMjUtMTM1Ni01CithbHdheXMgXHVGQUMyIDI0LTM0LTMKK2Fsd2F5cyBcdUZBQzMgMTItMTU2LTIKK2Fsd2F5cyBcdUZBQzQgMTUtMTIzNTYtMworYWx3YXlzIFx1RkFDNSAxNS0xMzQ1Ni0yCithbHdheXMgXHVGQUM2IDEtMzQtNAorYWx3YXlzIFx1RkFDNyAxMzQ1LTEyMzYtMgorYWx3YXlzIFx1RkFDOCAxMy0xMzQ1Ni01CithbHdheXMgXHVGQUM5IDEzNS0zNTYtNQorYWx3YXlzIFx1RkFDQSAxNS00Ni00CithbHdheXMgXHVGQUNCIDE0NS0zNC01CithbHdheXMgXHVGQUNDIDEyMzQtMTQ1Ni0yCithbHdheXMgXHVGQUNEIDEtMTM2LTQKK2Fsd2F5cyBcdUZBQ0UgMTMtMTI0Ni0zCithbHdheXMgXHVGQUQyIDEyMzUtMjM0Ni0yCithbHdheXMgXHVGQUQzIDE1LTE2LTIKK2Fsd2F5cyBcdUZBRDQgMTMtMjM0NTYtMgorYWx3YXlzIFx1RkFENSAyNDUtMjUtNQorYWx3YXlzIFx1RkFENyAxMy0zNDYtMgorYWx3YXlzIFx1RkFEOCAxMy0yMzQ2LTIKK2Fsd2F5cyBcdUZBRDkgMTIzNC0xMzQ2LTIKK2Fsd2F5cyBcdUZFMzAgMjUtMjUKK2Fsd2F5cyBcdUZFMzEgMTI1Ni0wCithbHdheXMgXHVGRTMzIDQ1NgorYWx3YXlzIFx1RkUzNCA0NQorYWx3YXlzIFx1RkUzNSAyNDYtMAorYWx3YXlzIFx1RkUzNiAxMzUtMAorYWx3YXlzIFx1RkUzNyAyNDYtMAorYWx3YXlzIFx1RkUzOCAxMjQ1Ni0wCithbHdheXMgXHVGRTM5IDI0NjctMAorYWx3YXlzIFx1RkUzQSAxMjQ1NjctMAorYWx3YXlzIFx1RkUzQiAyNDY3LTAKK2Fsd2F5cyBcdUZFM0MgMTI0NTY3LTAKK2Fsd2F5cyBcdUZFM0QgMTI2LTEyNgorYWx3YXlzIFx1RkUzRSAzNDUtMzQ1CithbHdheXMgXHVGRTNGIDEyNgorYWx3YXlzIFx1RkU0MCAzNDUKK2Fsd2F5cyBcdUZFNDEgNTYtMzYKK2Fsd2F5cyBcdUZFNDIgMzYtMjMKK2Fsd2F5cyBcdUZFNDMgMjM2LTIzNgorYWx3YXlzIFx1RkU0NCAzNTYtMzU2CithbHdheXMgXHVGRTRGIDQ1CithbHdheXMgXHVGRTUwIDIzLTAKK2Fsd2F5cyBcdUZFNTEgNi0wCithbHdheXMgXHVGRTUyIDM2LTAKK2Fsd2F5cyBcdUZFNTQgNTYtMAorYWx3YXlzIFx1RkU1NSAxNTYtMAorYWx3YXlzIFx1RkU1NiAxMzUtMAorYWx3YXlzIFx1RkU1NyAyMzQ2LTAKK2Fsd2F5cyBcdUZFNTkgMTIzNTYKK2Fsd2F5cyBcdUZFNUEgMjM0NTYKK2Fsd2F5cyBcdUZFNUIgMjQ2LTAKK2Fsd2F5cyBcdUZFNUMgMTI0NTYtMAorYWx3YXlzIFx1RkU1RCAxMjM0Ni0wCithbHdheXMgXHVGRTVFIDEzNDU2LTAKK2Fsd2F5cyBcdUZFNUYgMzQ1NgorYWx3YXlzIFx1RkU2MCA0NTYtMTIzNDYKK2Fsd2F5cyBcdUZFNjEgMTYKK2Fsd2F5cyBcdUZFNjIgMzQ2CithbHdheXMgXHVGRTYzIDM2CithbHdheXMgXHVGRTY0IDEyNgorYWx3YXlzIFx1RkU2NSAzNDUKK2Fsd2F5cyBcdUZFNjYgMTIzNDU2CithbHdheXMgXHVGRTY4IDEyNDY3LTEyNworYWx3YXlzIFx1RkU2OSAxMjQ2CithbHdheXMgXHVGRTZBIDE0NgorYWx3YXlzIFx1RkU2QiA0NworYWx3YXlzIFx1RkYwMSAxMjMtMAorYWx3YXlzIFx1RkYwMiA1LTAKK2Fsd2F5cyBcdUZGMDMgMzQ1Ni0wCithbHdheXMgXHVGRjA0IDEyNDYtMAorYWx3YXlzIFx1RkYwNSAxNDYtMAorYWx3YXlzIFx1RkYwNiAxMjM0Ni0wCithbHdheXMgXHVGRjA3IDMtMAorYWx3YXlzIFx1RkYwOCAyNDYtMAorYWx3YXlzIFx1RkYwOSAxMzUtMAorYWx3YXlzIFx1RkYwQSAxNi0wCithbHdheXMgXHVGRjBCIDM0Ni0wCithbHdheXMgXHVGRjBDIDIzLTAKK2Fsd2F5cyBcdUZGMEQgMzYtMAorYWx3YXlzIFx1RkYwRSA0Ni0wCithbHdheXMgXHVGRjBGIDM0LTAKK2Fsd2F5cyBcdUZGMTAgMzU2LTAKK2Fsd2F5cyBcdUZGMTEgMi0wCithbHdheXMgXHVGRjEyIDIzLTAKK2Fsd2F5cyBcdUZGMTMgMjUtMAorYWx3YXlzIFx1RkYxNCAyNTYtMAorYWx3YXlzIFx1RkYxNSAyNi0wCithbHdheXMgXHVGRjE2IDIzNS0wCithbHdheXMgXHVGRjE3IDIzNTYtMAorYWx3YXlzIFx1RkYxOCAyMzYtMAorYWx3YXlzIFx1RkYxOSAzNS0wCithbHdheXMgXHVGRjFBIDI1LTI1CithbHdheXMgXHVGRjFCIDU2LTAKK2Fsd2F5cyBcdUZGMUMgMTI2LTAKK2Fsd2F5cyBcdUZGMUQgMTIzNDU2LTAKK2Fsd2F5cyBcdUZGMUUgMzQ1LTAKK2Fsd2F5cyBcdUZGMUYgMTQ1Ni0wCithbHdheXMgXHVGRjIwIDQ3LTAKK2Fsd2F5cyBcdUZGMjEgMTctMAorYWx3YXlzIFx1RkYyMiAxMjctMAorYWx3YXlzIFx1RkYyMyAxNDctMAorYWx3YXlzIFx1RkYyNCAxNDU3LTAKK2Fsd2F5cyBcdUZGMjUgMTU3LTAKK2Fsd2F5cyBcdUZGMjYgMTI0Ny0wCithbHdheXMgXHVGRjI3IDEyNDU3LTAKK2Fsd2F5cyBcdUZGMjggMTI1Ny0wCithbHdheXMgXHVGRjI5IDI0Ny0wCithbHdheXMgXHVGRjJBIDI0NTctMAorYWx3YXlzIFx1RkYyQiAxMzctMAorYWx3YXlzIFx1RkYyQyAxMjM3LTAKK2Fsd2F5cyBcdUZGMkQgMTM0Ny0wCithbHdheXMgXHVGRjJFIDEzNDU3LTAKK2Fsd2F5cyBcdUZGMkYgMTM1Ny0wCithbHdheXMgXHVGRjMwIDEyMzQ3LTAKK2Fsd2F5cyBcdUZGMzEgMTIzNDU3LTAKK2Fsd2F5cyBcdUZGMzIgMTIzNTctMAorYWx3YXlzIFx1RkYzMyAyMzQ3LTAKK2Fsd2F5cyBcdUZGMzQgMjM0NTctMAorYWx3YXlzIFx1RkYzNSAxMzY3LTAKK2Fsd2F5cyBcdUZGMzYgMTIzNjctMAorYWx3YXlzIFx1RkYzNyAyNDU2Ny0wCithbHdheXMgXHVGRjM4IDEzNDY3LTAKK2Fsd2F5cyBcdUZGMzkgMTM0NTY3LTAKK2Fsd2F5cyBcdUZGM0EgMTM1NjctMAorYWx3YXlzIFx1RkYzQiAyNDY3LTAKK2Fsd2F5cyBcdUZGM0MgMTI1NjctMAorYWx3YXlzIFx1RkYzRCAxMjQ1NjctMAorYWx3YXlzIFx1RkYzRiA0NTYtMAorYWx3YXlzIFx1RkY0MCA0LTAKK2Fsd2F5cyBcdUZGNDEgMS0wCithbHdheXMgXHVGRjQyIDEyLTAKK2Fsd2F5cyBcdUZGNDMgMTQtMAorYWx3YXlzIFx1RkY0NCAxNDUtMAorYWx3YXlzIFx1RkY0NSAxNS0wCithbHdheXMgXHVGRjQ2IDEyNC0wCithbHdheXMgXHVGRjQ3IDEyNDUtMAorYWx3YXlzIFx1RkY0OCAxMjUtMAorYWx3YXlzIFx1RkY0OSAyNC0wCithbHdheXMgXHVGRjRBIDI0NS0wCithbHdheXMgXHVGRjRCIDEzLTAKK2Fsd2F5cyBcdUZGNEMgMTIzLTAKK2Fsd2F5cyBcdUZGNEQgMTM0LTAKK2Fsd2F5cyBcdUZGNEUgMTM0NS0wCithbHdheXMgXHVGRjRGIDEzNS0wCithbHdheXMgXHVGRjUwIDEyMzQtMAorYWx3YXlzIFx1RkY1MSAxMjM0NS0wCithbHdheXMgXHVGRjUyIDEyMzUtMAorYWx3YXlzIFx1RkY1MyAyMzQtMAorYWx3YXlzIFx1RkY1NCAyMzQ1LTAKK2Fsd2F5cyBcdUZGNTUgMTM2LTAKK2Fsd2F5cyBcdUZGNTYgMTIzNi0wCithbHdheXMgXHVGRjU3IDI0NTYtMAorYWx3YXlzIFx1RkY1OCAxMzQ2LTAKK2Fsd2F5cyBcdUZGNTkgMTM0NTYtMAorYWx3YXlzIFx1RkY1QSAxMzU2LTAKK2Fsd2F5cyBcdUZGNUIgMjQ2LTAKK2Fsd2F5cyBcdUZGNUMgMTI1Ni0wCithbHdheXMgXHVGRjVEIDEyNDU2LTAKK2Fsd2F5cyBcdUZGNUUgNDUtMAorYWx3YXlzIFx1RkY1RiAxMjM1Ni0wCithbHdheXMgXHVGRjYwIDIzNDU2LTAKK2Fsd2F5cyBcdUZGNjEgNDYKK2Fsd2F5cyBcdUZGNjIgMTI2CithbHdheXMgXHVGRjYzIDM0NQorYWx3YXlzIFx1RkY2NCA2CithbHdheXMgXHVGRjY1IDI1NgorYWx3YXlzIFx1RkY2NyAxCithbHdheXMgXHVGRjY4IDEyCithbHdheXMgXHVGRjY5IDE0CithbHdheXMgXHVGRjZBIDEyNAorYWx3YXlzIFx1RkY2QiAyNAorYWx3YXlzIFx1RkY2QyAzNAorYWx3YXlzIFx1RkY2RCAzNDYKK2Fsd2F5cyBcdUZGNkUgMzQ1CithbHdheXMgXHVGRjcwIDI1CithbHdheXMgXHVGRjcxIDEKK2Fsd2F5cyBcdUZGNzIgMTIKK2Fsd2F5cyBcdUZGNzMgMTQKK2Fsd2F5cyBcdUZGNzQgMTI0CithbHdheXMgXHVGRjc1IDI0CithbHdheXMgXHVGRjc2IDE2CithbHdheXMgXHVGRjc3IDEyNgorYWx3YXlzIFx1RkY3OCAxNDYKK2Fsd2F5cyBcdUZGNzkgMTI0NgorYWx3YXlzIFx1RkY3QSAyNDYKK2Fsd2F5cyBcdUZGN0IgMTU2CithbHdheXMgXHVGRjdDIDEyNTYKK2Fsd2F5cyBcdUZGN0UgMTI0NTYKK2Fsd2F5cyBcdUZGN0YgMjQ1NgorYWx3YXlzIFx1RkY4MCAxMzUKK2Fsd2F5cyBcdUZGODEgMTIzNQorYWx3YXlzIFx1RkY4MiAxMzQ1CithbHdheXMgXHVGRjgzIDEyMzQ1CithbHdheXMgXHVGRjg0IDIzNDUKK2Fsd2F5cyBcdUZGODUgMTMKK2Fsd2F5cyBcdUZGODYgMTIzCithbHdheXMgXHVGRjg3IDEzNAorYWx3YXlzIFx1RkY4OCAxMjM0CithbHdheXMgXHVGRjg5IDIzNAorYWx3YXlzIFx1RkY4QSAxMzYKK2Fsd2F5cyBcdUZGOEIgMTIzNgorYWx3YXlzIFx1RkY4QyAxMzQ2CithbHdheXMgXHVGRjhEIDEyMzQ2CithbHdheXMgXHVGRjhFIDIzNDYKK2Fsd2F5cyBcdUZGOEYgMTM1NgorYWx3YXlzIFx1RkY5MCAxMjM1NgorYWx3YXlzIFx1RkY5MSAxMzQ1NgorYWx3YXlzIFx1RkY5MiAxMjM0NTYKK2Fsd2F5cyBcdUZGOTMgMjM0NTYKK2Fsd2F5cyBcdUZGOTQgMzQKK2Fsd2F5cyBcdUZGOTUgMzQ2CithbHdheXMgXHVGRjk2IDM0NQorYWx3YXlzIFx1RkY5NyAxNQorYWx3YXlzIFx1RkY5OCAxMjUKK2Fsd2F5cyBcdUZGOTkgMTQ1CithbHdheXMgXHVGRjlBIDEyNDUKK2Fsd2F5cyBcdUZGOUIgMjQ1CithbHdheXMgXHVGRjlDIDMKK2Fsd2F5cyBcdUZGOUQgMzU2CithbHdheXMgXHVGRjlFIDI1CithbHdheXMgXHVGRjlGIDIKK2Fsd2F5cyBcdUZGRTAgMzYtMTQtMzYKK2Fsd2F5cyBcdUZGRTEgMzYtMTIzNy0zNgorYWx3YXlzIFx1RkZFNSAzNi0xMzQ1NjctMTU3LTEzNDU3LTM2CithbHdheXMgXHVGRkU5IDEyNi0zNgorYWx3YXlzIFx1RkZFQSAxMjQ2LTEyNi0xMzUKK2Fsd2F5cyBcdUZGRUIgMzYtMzQ1CithbHdheXMgXHVGRkVDIDEyNDYtMTQ2LTEzNQorYWx3YXlzIFx1RkZFRSAyNDYtMTM1CisKKyNDaGluZXNlIHBocmFzZXMKK2Fsd2F5cyBcdTRFMDBcdTUyMDcgMTYtMy0yNDUtMzQ2LTUKK2Fsd2F5cyBcdTRlMDBcdTRlODYgMTYtMy0xNC0yNDYtNAorYWx3YXlzIFx1NGUwMFx1NTMzOSAxNi0zLTEyMzQtMTYtNAorYWx3YXlzIFx1NGUwMFx1NjRhZSAxNi0zLTI0NS0yNS01CithbHdheXMgXHU0ZTAwXHU2NmI0IDE2LTMtMTIzNC0zNC01CithbHdheXMgXHU0ZTAwXHU2NzFkIDE2LTMtMS0xNDYtMworYWx3YXlzIFx1NGUwMFx1ODQ1NyAxNi0zLTEtMjUtMgorYWx3YXlzIFx1NGUwMFx1ODg0YyAxNi0zLTEyMzUtMTM0Ni0yCithbHdheXMgXHU0ZTAwXHU4OWJhIDE2LTMtMTMtMjQ2LTUKK2Fsd2F5cyBcdTRlMDlcdTY2ZjQgMTUtMTIzNi0zLTEzLTEzNDU2LTMKK2Fsd2F5cyBcdTRlMDlcdTc3MDEgMTUtMTIzNi0zLTE1LTEzNDU2LTQKK2Fsd2F5cyBcdTRlMDlcdTg4NGMgMTUtMTIzNi0zLTEyMzUtMTM0Ni0yCithbHdheXMgXHU0ZTA5XHU5MWNkIDE1LTEyMzYtMy0xMi0xMjM0Ni0yCithbHdheXMgXHU0ZTBhXHU1YzA3IDI0LTEzNDYtNS0xMy00Ni01CithbHdheXMgXHU0ZTBhXHU3NTc2IDI0LTEzNDYtNS0xNDUtMTM0Ni01CithbHdheXMgXHU0ZTBhXHU3NmY4IDI0LTEzNDYtNS0xNS00Ni01CithbHdheXMgXHU0ZTBhXHU4MDcyIDI0LTEzNDYtNC0yNC0xMzU2LTMKK2Fsd2F5cyBcdTRlMGJcdTViNTAgMTUtMjM0NTYtNS0xMjUtMTU2LTEKK2Fsd2F5cyBcdTRlMGRcdTRlODYgMTM1LTM0LTUtMTQtMjQ2LTQKK2Fsd2F5cyBcdTRlMGRcdTUyZGQgMTM1LTM0LTUtMjQtMTM1Ni0zCithbHdheXMgXHU0ZTBkXHU3NTc2IDEzNS0zNC01LTE0NS0xMzQ2LTUKK2Fsd2F5cyBcdTRlMGRcdTc3MDEgMTM1LTM0LTUtMTUtMTM0NTYtNAorYWx3YXlzIFx1NGUwZFx1Nzk4MSAxMzUtMzQtNS0xMy0xNDU2LTMKK2Fsd2F5cyBcdTRlMGRcdTgyMGQgMTM1LTM0LTUtMjQtMjM0Ni00CithbHdheXMgXHU0ZTBkXHU4NDU3IDEzNS0zNC01LTEtMTQ2LTIKK2Fsd2F5cyBcdTRlMGRcdTk2M2YgMTM1LTM0LTUtMjM0Ni0zCithbHdheXMgXHU0ZTBkXHU5YmFlIDEzNS0zNC01LTE1LTIzNDUtNAorYWx3YXlzIFx1NGUxZVx1NzZmOCAxMi0xMzU2LTItMTUtNDYtNQorYWx3YXlzIFx1NGUyZFx1NTBiNyAxLTEyMzQ2LTUtMjQtMTM0Ni0zCithbHdheXMgXHU0ZTJkXHU2MTBmIDEtMTIzNDYtNS0xNi01CithbHdheXMgXHU0ZTJkXHU2NjkxIDEtMTIzNDYtNS0yNC0zNC00CithbHdheXMgXHU0ZTJkXHU2YmQyIDEtMTIzNDYtNS0xNDUtMzQtMgorYWx3YXlzIFx1NGUyZFx1NzM0ZSAxLTEyMzQ2LTUtMTMtNDYtNAorYWx3YXlzIFx1NGUyZFx1ODIwOSAxLTEyMzQ2LTUtMTMtMTI1Ni00CithbHdheXMgXHU0ZTJkXHU4YTA4IDEtMTIzNDYtNS0xMy0xNi01CithbHdheXMgXHU0ZTJkXHU5OGE4IDEtMTIzNDYtNS0xMjM0NS0xMzU2LTMKK2Fsd2F5cyBcdTRlMzhcdTViNTAgMTI0NTYtMi0xMjUtMTU2LTEKK2Fsd2F5cyBcdTRlM2FcdTRlODYgMTI0Ni01LTE0LTIzNDYtMQorYWx3YXlzIFx1NGUzYlx1NWMwNyAxLTM0LTQtMTMtNDYtNQorYWx3YXlzIFx1NGU1OFx1ODIwOCAxMi0xMzU2LTItMTUtMTM0NTYtNQorYWx3YXlzIFx1NGU1ZFx1OTFjZCAxMy0yMzQtNC0xMi0xMjM0Ni0yCithbHdheXMgXHU0ZTdlXHU1NjA5IDI0NS0yMzQ1LTItMTMtMjM0NTYtMworYWx3YXlzIFx1NGU3ZVx1NTc2NCAyNDUtMjM0NS0yLTEyMy0xMjM0NTYtMworYWx3YXlzIFx1NGU3ZVx1OTY4NiAyNDUtMjM0NS0yLTE0LTEyMzQ2LTIKK2Fsd2F5cyBcdTRlODJcdTViNTAgMTQtMTI0NTYtNS0xMjUtMTU2LTEKK2Fsd2F5cyBcdTRlODZcdTRlODYgMTQtMjQ2LTQtMTQtMjQ2LTQKK2Fsd2F5cyBcdTRlODZcdTRlOGIgMTQtMjQ2LTQtMjQtMTU2LTUKK2Fsd2F5cyBcdTRlODZcdTVmOTcgMTQtMjQ2LTQtMTQ1LTIzNDYtMgorYWx3YXlzIFx1NGU4Nlx1NjA5ZiAxNC0yNDYtNC0zNC01CithbHdheXMgXHU0ZTg2XHU2NWI3IDE0LTI0Ni00LTE0NS0xMjQ1Ni01CithbHdheXMgXHU0ZTg2XHU3MTM2IDE0LTI0Ni00LTEyNDUtMTIzNi0yCithbHdheXMgXHU0ZTg2XHU3ZDUwIDE0LTI0Ni00LTEzLTM0Ni0yCithbHdheXMgXHU0ZTg2XHU4OWUzIDE0LTI0Ni00LTEzLTM0Ni00CithbHdheXMgXHU0ZTk0XHU2NmY0IDM0LTQtMTMtMTM0NTYtMworYWx3YXlzIFx1NGVhNFx1NTM3NyAxMy0yNDYtMy0xMy00NS01CithbHdheXMgXHU0ZWE0XHU2MGUxIDEzLTI0Ni0zLTM0LTUKK2Fsd2F5cyBcdTRlYTRcdTgxYzIgMTMtMjQ2LTMtMTM1LTE2LTUKK2Fsd2F5cyBcdTRlYTRcdTkwODQgMTMtMjQ2LTMtMTIzNS0xMjQ1Ni0yCithbHdheXMgXHU0ZWFjXHU5MGZkIDEzLTEzNDU2LTMtMTQ1LTM0LTMKK2Fsd2F5cyBcdTRlYWRcdTViNTAgMTI0LTEzNDU2LTItMTI1LTE1Ni0xCithbHdheXMgXHU0ZWFlXHU3NmY4IDE0LTQ2LTUtMTUtNDYtNQorYWx3YXlzIFx1NGViNlx1NzIzNiAxNDUtMTIzNi00LTEyMzQ1LTM0LTQKK2Fsd2F5cyBcdTRlYmFcdTUzYzMgMTI0NS0xMzYtMi0yNC0xMzYtMworYWx3YXlzIFx1NGVjMFx1NGU0OCAyNC0yMzQ2LTItMTM0LTIzNDYtMQorYWx3YXlzIFx1NGVjMFx1OWViYyAyNC0yMzQ2LTItMTM0LTIzNDYtMQorYWx3YXlzIFx1NGYxMVx1NTA0NyAxNS0yMzQtMy0xMy0yMzQ1Ni01CithbHdheXMgXHU0ZjE5XHU1YjUwIDEyMzUtMjUtNC0xMjUtMTU2LTEKK2Fsd2F5cyBcdTRmM2FcdTUwMTkgMjQ1LTE1Ni01LTEyMzUtMTIzNTYtNQorYWx3YXlzIFx1NGY0ZFx1NWI1MCAxMjQ2LTUtMTI1LTE1Ni0xCithbHdheXMgXHU0ZjVkXHU1MGMyIDEyMy0xMjM1Ni01LTE0LTEyMzU2LTIKK2Fsd2F5cyBcdTRmODZcdTk2NGQgMTQtMjQ1Ni0yLTE1LTQ2LTIKK2Fsd2F5cyBcdTRmOGJcdTUwNDcgMTQtMTYtNS0xMy0yMzQ1Ni01CithbHdheXMgXHU0ZjhiXHU1YjUwIDE0LTE2LTUtMTI1LTE1Ni0xCithbHdheXMgXHU0ZjliXHU2MWM5IDEzLTEyMzQ2LTMtMTM0NTYtNQorYWx3YXlzIFx1NGY5Ylx1OTkwYSAxMy0xMjM0Ni01LTQ2LTUKK2Fsd2F5cyBcdTRmOWRcdTUwOGQgMTYtMy0xMzUtMTM0Ni01CithbHdheXMgXHU0ZmJmXHU1YjljIDEyMzQtMjM0NS0yLTE2LTIKK2Fsd2F5cyBcdTRmZTFcdTVkZWUgMTUtMTQ1Ni01LTEyLTI0NTYtMworYWx3YXlzIFx1NGZlZlx1NzU1YyAxMjM0NS0zNC00LTE1LTEyNTYtNQorYWx3YXlzIFx1NGZmOFx1N2Q2NiAxMjM0NS0xMzU2LTUtMTMtMTYtNAorYWx3YXlzIFx1NTAwOVx1NTM1MiAyNDUtMTM0Ni0zLTI0NS0zNC01CithbHdheXMgXHU1MDA5XHU5ODIxIDI0NS0xMzQ2LTMtMTMtMzQ2LTIKK2Fsd2F5cyBcdTUwMGJcdTViNTAgMTMtMjM0Ni01LTEyNS0xNTYtMQorYWx3YXlzIFx1NTAxNFx1NWYzNyAxMy0yMzYtMi0xMy00Ni01CithbHdheXMgXHU1MDQ3XHU2NWU1IDEzLTIzNDU2LTUtMTI0NS0xNTYtNQorYWx3YXlzIFx1NTA0N1x1NjcxZiAxMy0yMzQ1Ni01LTI0NS0xNi0yCithbHdheXMgXHU1MDRmXHU1OTdkIDEyMzQtMjM0NS0zLTEyMzUtMTQ2LTUKK2Fsd2F5cyBcdTUwNjVcdTVjMDcgMTMtMjM0NS01LTEzLTQ2LTUKK2Fsd2F5cyBcdTUwYjNcdThhMTggMS0xMjQ1Ni01LTEzLTE2LTUKK2Fsd2F5cyBcdTUxMTBcdTc2ZjggMTM1LTE0NTYtMy0xNS00Ni01CithbHdheXMgXHU1MTEyXHU1YzA3IDEyNDUtMzQtMi0xMy00Ni01CithbHdheXMgXHU1MTFmXHU5MDg0IDEyLTEzNDYtMi0xMjM1LTEyNDU2LTIKK2Fsd2F5cyBcdTUxNDFcdTc1NzYgMjU2LTQtMTQ1LTEzNDYtNQorYWx3YXlzIFx1NTE0NFx1OTU3NyAxNS0yMzUtMy0xLTEzNDYtNAorYWx3YXlzIFx1NTE0NVx1NTIwNiAxMi0xMjM0Ni0zLTEyMzQ1LTEzNi01CithbHdheXMgXHU1MTQ1XHU1ODVlIDEyLTEyMzQ2LTMtMTUtMjM0Ni01CithbHdheXMgXHU1MTRiXHU5NmUzIDEyMy0yMzQ2LTUtMTM0NS0xMjM2LTUKK2Fsd2F5cyBcdTUxNTJcdTViNTAgMTU2LTItMTI1LTE1Ni0xCithbHdheXMgXHU1MTU0XHU1YjUwIDEyNC0zNC01LTEyNS0xNTYtMQorYWx3YXlzIFx1NTE2NVx1NzZmOCAxMjQ1LTM0LTUtMTUtNDYtNQorYWx3YXlzIFx1NTE2N1x1NjFjOSAxMzQ1LTM1Ni01LTEzNDU2LTUKK2Fsd2F5cyBcdTUxNjdcdTc2ZjggMTM0NS0zNTYtNS0xNS00Ni01CithbHdheXMgXHU1MTY3XHU3NzAxIDEzNDUtMzU2LTUtMTUtMTM0NTYtNAorYWx3YXlzIFx1NTE2N1x1ODg0YyAxMzQ1LTM1Ni01LTEyMzUtMTM0Ni0yCithbHdheXMgXHU1MTZjXHU1ZGVlIDEzLTEyMzQ2LTMtMTItMjQ1Ni0zCithbHdheXMgXHU1MTZjXHU2NGFlIDEzLTEyMzQ2LTMtMjQ1LTI1LTUKK2Fsd2F5cyBcdTUxNzFcdTg2NTUgMTMtMTIzNDYtNS0xMi0zNC00CithbHdheXMgXHU1MTc0XHU4ZGEzIDE1LTEzNDU2LTUtMjQ1LTEyNTYtNQorYWx3YXlzIFx1NTE3OFx1NzU3NiAxNDUtMjM0NS00LTE0NS0xMzQ2LTUKK2Fsd2F5cyBcdTUxN2NcdTVkZWUgMTMtMjM0NS0zLTEyLTI0NTYtMworYWx3YXlzIFx1NTE4YVx1NWI1MCAyNDUtMjM0Ni01LTEyNS0xNTYtMQorYWx3YXlzIFx1NTFhMFx1NTE5NSAxMy0xMjQ1Ni0zLTEzNC0yMzQ1LTQKK2Fsd2F5cyBcdTUxYTBcdTg0Y2IgMTMtMTI0NTYtMy0xMy0yNDU2LTUKK2Fsd2F5cyBcdTUxZjFcdTY0OTIgMTIzLTI0NTYtNC0xNS0zNDUtMworYWx3YXlzIFx1NTFmM1x1NWI1MCAxNDUtMTM1Ni01LTEyNS0xNTYtMQorYWx3YXlzIFx1NTFmYVx1NWMwNyAxMi0zNC0zLTEzLTQ2LTUKK2Fsd2F5cyBcdTUxZmFcdTVkZWUgMTItMzQtMy0xMi0yNDU2LTMKK2Fsd2F5cyBcdTUxZmFcdTZjOTIgMTItMzQtMy0xMzQtMTI2LTUKK2Fsd2F5cyBcdTUyMDBcdTViNTAgMTQ1LTE0Ni0zLTEyNS0xNTYtMQorYWx3YXlzIFx1NTIwNlx1NTE2NyAxMjM0NS0xMzYtNS0xMzQ1LTM1Ni01CithbHdheXMgXHU1MjA2XHU1OTE2IDEyMzQ1LTEzNi01LTIzNTYtNQorYWx3YXlzIFx1NTIwNlx1NWI1MCAxMjM0NS0xMzYtNS0xMjUtMTU2LTQKK2Fsd2F5cyBcdTUyMDZcdTg4NGMgMTIzNDUtMTM2LTMtMTIzNS0xMzQ2LTIKK2Fsd2F5cyBcdTUyMDZcdTkxY2YgMTIzNDUtMTM2LTUtMTQtNDYtNQorYWx3YXlzIFx1NTIxN1x1NTBiMyAxNC0zNDYtNS0xLTEyNDU2LTUKK2Fsd2F5cyBcdTUyMjhcdTU3MWYgMTIzNC0xNDYtMi0xMjQtMzQtNAorYWx3YXlzIFx1NTIyOFx1NTczMCAxMjM0LTE0Ni0yLTE0NS0xNi01CithbHdheXMgXHU1MjI4XHU1YjUwIDEyMzQtMTQ2LTItMTI1LTE1Ni0xCithbHdheXMgXHU1MjM3XHU1YjUwIDI0LTM1LTMtMTI1LTE1Ni0xCithbHdheXMgXHU1MjRlXHU4ZWNhIDI0LTM0NS01LTEyLTIzNDYtMworYWx3YXlzIFx1NTI0ZVx1OTBhMyAxMi0zNDUtNS0xMzQ1LTI1LTIKK2Fsd2F5cyBcdTUyNWRcdTUyNGEgMTM1LTEyNi0zLTE1LTIzNi0zCithbHdheXMgXHU1MjZmXHU1YzA3IDEyMzQ1LTM0LTUtMTMtNDYtNQorYWx3YXlzIFx1NTI3NVx1NzVkNSAxMi00NTYtMy0xMjM1LTEzNi0yCithbHdheXMgXHU1MmE5XHU5NTc3IDEtMzQtNS0xLTEzNDYtNAorYWx3YXlzIFx1NTJjN1x1NWMwNyAyMzUtNC0xMy00Ni01CithbHdheXMgXHU1MmM5XHU1ZjM3IDEzNC0yMzQ1LTQtMjQ1LTQ2LTQKK2Fsd2F5cyBcdTUyZDJcdTUwMTIgMTQtMzU2LTMtMTQ1LTE0Ni00CithbHdheXMgXHU1MmQyXHU1MGI3IDE0LTM1Ni0zLTI0LTEzNDYtMworYWx3YXlzIFx1NTJkMlx1NjYwZiAxNC0zNTYtMy0xMjM1LTEyMzQ1Ni0zCithbHdheXMgXHU1MmQyXHU2YjdiIDE0LTM1Ni0zLTE1LTE1Ni00CithbHdheXMgXHU1MmQyXHU3NWQ1IDE0LTM1Ni0zLTEyMzUtMTM2LTIKK2Fsd2F5cyBcdTUyZDVcdTgxMDggMTQ1LTEyMzQ2LTUtMTM0LTI0NTYtNQorYWx3YXlzIFx1NTJkZFx1NGVmYiAyNC0xMzU2LTMtMTI0NS0xMzYtNQorYWx3YXlzIFx1NTJkZFx1NjU3OCAyNC0xMzU2LTMtMjQtMzQtNAorYWx3YXlzIFx1NTJkZVx1OGVjZCAxNC0xNDYtNS0xMy0yNTYtMworYWx3YXlzIFx1NTJmOFx1OTY0ZCAyNDUtNDUtNS0xNS00Ni0yCithbHdheXMgXHU1MmZhXHU1YjUwIDI0LTE0Ni0yLTEyNS0xNTYtMQorYWx3YXlzIFx1NTJmYlx1N2EzMSAyNTYtMi0xMi0xMzYtNQorYWx3YXlzIFx1NTJmZVx1NzU3NiAxMy0xMjM1Ni0zLTE0NS0xMzQ2LTUKK2Fsd2F5cyBcdTUzMDVcdTViNTAgMTM1LTE0Ni0zLTEyNS0xNTYtMQorYWx3YXlzIFx1NTMxNVx1ODk4YiAxMzUtMTYtNC0xNS0yMzQ1LTUKK2Fsd2F5cyBcdTUzMTZcdTViNTAgMTIzNS0zNS0zLTEyNS0xNTYtMQorYWx3YXlzIFx1NTMxN1x1NGYxMCAxMzUtMzU2LTQtMTIzNDUtMzQ1LTMKK2Fsd2F5cyBcdTUzMjNcdTViNTAgMTUtMjM0NTYtMi0xMjUtMTU2LTEKK2Fsd2F5cyBcdTUzMzlcdTU5MmIgMTIzNC0xNi00LTEyMzQ1LTM0LTMKK2Fsd2F5cyBcdTUzMzlcdTVhNjYgMTIzNC0xNi00LTEyMzQ1LTM0LTUKK2Fsd2F5cyBcdTUzMzlcdTY1NzUgMTIzNC0xNi00LTE0NS0xNi0yCithbHdheXMgXHU1MzM5XHU5MTRkIDEyMzQtMTYtNC0xMjM0LTM1Ni01CithbHdheXMgXHU1MzQwXHU5NTc3IDI0NS0xMjU2LTMtMS0xMzQ2LTQKK2Fsd2F5cyBcdTUzNDFcdTg4NGMgMjQtMTU2LTItMTIzNS0xMzQ2LTIKK2Fsd2F5cyBcdTUzNDNcdTRlNTggMjQ1LTIzNDUtMy0yNC0xMzU2LTUKK2Fsd2F5cyBcdTUzNDhcdTg5YmEgMzQtNC0xMy0yNDYtNQorYWx3YXlzIFx1NTM0YVx1OGYwOSAxMzUtMTIzNi01LTEyNS0yNDU2LTQKK2Fsd2F5cyBcdTUzNTJcdTViNTAgMTI1LTM0LTItMTI1LTE1Ni0xCithbHdheXMgXHU1MzUzXHU4NDU3IDEtMjUtMi0xLTM0LTUKK2Fsd2F5cyBcdTUzNTRcdThhYmYgMTUtMzQ2LTItMTI0LTI0Ni0yCithbHdheXMgXHU1MzU3XHU3MTIxIDEzNDUtMTIzNi0yLTEzNC0xMjYtMgorYWx3YXlzIFx1NTM2MFx1NTM1YyAxLTEyMzYtMy0xMzUtMzQtNAorYWx3YXlzIFx1NTM2MFx1NjYxZiAxLTEyMzYtMy0xNS0xMzQ1Ni0zCithbHdheXMgXHU1MzcxXHU5NmUzIDEyNDYtMi0xMzQ1LTEyMzYtNQorYWx3YXlzIFx1NTM3N1x1NWI1MCAxMy00NS01LTEyNS0xNTYtMQorYWx3YXlzIFx1NTM3N1x1NWI5NyAxMy00NS01LTEyNS0xMjM0Ni0zCithbHdheXMgXHU1MzdmXHU3NmY4IDI0NS0xMzQ1Ni0zLTE1LTQ2LTUKK2Fsd2F5cyBcdTUzOWZcdTg0NTcgNDUtMi0xLTM0LTUKK2Fsd2F5cyBcdTUzQzNcdTMwMDEgMTUtMTIzNi0zLTYtMAorYWx3YXlzIFx1NTNhZFx1NjBlMSAyMzQ1LTUtMzQtNQorYWx3YXlzIFx1NTNiYlx1ODEwOCAyNDUtMTI1Ni01LTEzNC0yNDU2LTUKK2Fsd2F5cyBcdTUzYzNcdTU1NDYgMjQtMTM2LTMtMjQtMTM0Ni0zCithbHdheXMgXHU1M2MzXHU1YzA3IDI0NS0xMjM2LTMtMTMtNDYtNQorYWx3YXlzIFx1NTNjM1x1NWRlZSAyNDUtMTM2LTMtMjQ1LTE1Ni0zCithbHdheXMgXHU1M2MzXHU4MjA3IDI0NS0xMjM2LTMtMTI1Ni01CithbHdheXMgXHU1M2M5XHU1YjUwIDEyLTM0NS0zLTEyNS0xNTYtMQorYWx3YXlzIFx1NTNjZFx1NjFjOSAxMjM0NS0xMjM2LTQtMTM0NTYtNQorYWx3YXlzIFx1NTNjZFx1NzZmOCAxMjM0NS0xMjM2LTQtMTUtNDYtNQorYWx3YXlzIFx1NTNjZFx1NzcwMSAxMjM0NS0xMjM2LTQtMTUtMTM0NTYtNAorYWx3YXlzIFx1NTNjZFx1OTU5MyAxMjM0NS0xMjM2LTQtMTMtMjM0NS01CithbHdheXMgXHU1M2Q3XHU5NjRkIDI0LTEyMzU2LTUtMTUtNDYtMgorYWx3YXlzIFx1NTNkN1x1OTZlMyAyNC0xMjM1Ni01LTEzNDUtMTIzNi01CithbHdheXMgXHU1M2UzXHU1NDAzIDEyMy0xMjM1Ni00LTEzLTE2LTIKK2Fsd2F5cyBcdTUzZTNcdTViNTAgMTIzLTEyMzU2LTQtMTI1LTE1Ni0xCithbHdheXMgXHU1M2U0XHU3M2E5IDEzLTM0LTQtMTI0NTYtNQorYWx3YXlzIFx1NTNlNVx1NWI1MCAxMy0xMjU2LTUtMTI1LTE1Ni0xCithbHdheXMgXHU1M2U1XHU4ZTEwIDEzLTEyMzU2LTMtMTMtMjM0NS01CithbHdheXMgXHU1M2VmXHU2MGUxIDEyMy0yMzQ2LTQtMzQtNQorYWx3YXlzIFx1NTNlZlx1NjU3OCAxMjMtMjM0Ni00LTI0LTM0LTQKK2Fsd2F5cyBcdTUzZWZcdTZjNTcgMTIzLTIzNDYtNS0xMjM1LTEyMzYtMgorYWx3YXlzIFx1NTNmMFx1NWI1MCAxMjQtMjQ1Ni0yLTEyNS0xNTYtMQorYWx3YXlzIFx1NTNmOFx1OTU3NyAxNS0xNTYtMy0xLTEzNDYtNAorYWx3YXlzIFx1NTQwNFx1ODg0YyAxMy0yMzQ2LTUtMTIzNS0xMzQ2LTIKK2Fsd2F5cyBcdTU0MDZcdTU1OWQgMjQ2LTMtMTIzNS0yMzQ2LTUKK2Fsd2F5cyBcdTU0MGFcdTViNTAgMTQ1LTI0Ni01LTEyNS0xNTYtMQorYWx3YXlzIFx1NTQwZFx1NTIwNiAxMzQtMTM0NTYtMi0xMjM0NS0xMzYtNQorYWx3YXlzIFx1NTQwZFx1NWMwNyAxMzQtMTM0NTYtMi0xMy00Ni01CithbHdheXMgXHU1NDBkXHU4NDU3IDEzNC0xMzQ1Ni0yLTEtMzQtNQorYWx3YXlzIFx1NTQxMFx1ODU0MyAxMjQtMzQtNC0xMjM0NS0xMjM2LTMKK2Fsd2F5cyBcdTU0MWVcdTZjOTIgMTI0LTEyMzQ1Ni0zLTEzNC0xMjYtNQorYWx3YXlzIFx1NTQyNlx1Njk3NSAxMjM0LTE2LTQtMTMtMTYtMgorYWx3YXlzIFx1NTQyYlx1NmRmNyAxMjM1LTEyMzYtMi0xMjM1LTEyMzQ1Ni00CithbHdheXMgXHU1NDQ2XHU1YjUwIDE0NS0yNDU2LTMtMTI1LTE1Ni0xCithbHdheXMgXHU1NDRhXHU1MDQ3IDEzLTE0Ni01LTEzLTIzNDU2LTUKK2Fsd2F5cyBcdTU0NjJcdTU0NjIgMTM0NS0xNi0yLTEzNDUtMTYtMgorYWx3YXlzIFx1NTQ2Mlx1NTU4MyAxMzQ1LTE2LTItMTM0NS0xMjM2LTIKK2Fsd2F5cyBcdTU0NjJcdTdkNjggMTM0NS0xNi0yLTEyNDUtMTIzNDYtMgorYWx3YXlzIFx1NTQ3Y1x1NjFjOSAxMjM1LTM0LTMtMTM0NTYtNQorYWx3YXlzIFx1NTQ3ZFx1ODEwOCAxMzQtMTM0NTYtNS0xMzQtMjQ1Ni01CithbHdheXMgXHU1NDg2XHU1NGVlIDEyMzQtMTQ2LTItMTUtMjQ2LTMKK2Fsd2F5cyBcdTU0OGJcdTgyMGMgMTI1LTIzNDYtMi0yNC0yMzQ2LTIKK2Fsd2F5cyBcdTU0YjZcdTU2NmEgMTMtMzUtMy0xMjUtMTQ2LTUKK2Fsd2F5cyBcdTU0YmRcdTU1ODkgMjM0NS0zLTEyMzUtMTIzNTYtMgorYWx3YXlzIFx1NTRjMFx1ODY1ZiAyNDU2LTMtMTIzNS0xNDYtMgorYWx3YXlzIFx1NTRjMVx1ODg0YyAxMjM0LTE0NTYtNC0xNS0xMzQ1Ni01CithbHdheXMgXHU1NGM0XHU5YTE5IDEyMzUtMTIzNDYtNC0xMjM0LTIzNDUtNQorYWx3YXlzIFx1NTRjNlx1NTVlNiAxNDUtMjUtMy0xNS0yNS0zCithbHdheXMgXHU1NGM4XHU1NTg3IDEyMy0zNDUtMy0xNC0zNDUtMQorYWx3YXlzIFx1NTRlOFx1NWI1MCAyNC0xNDYtNS0xMjUtMTU2LTEKK2Fsd2F5cyBcdTU0ZTlcdTU2OTUgMTQtMTYtMy0xNC0zNC0zCithbHdheXMgXHU1NGVkXHU4NjVmIDEyMy0zNC0zLTEyMzUtMTQ2LTIKK2Fsd2F5cyBcdTU0ZWVcdTU1OTggMTUtMjQ2LTMtMTItMTI0NTYtNAorYWx3YXlzIFx1NTRmZFx1NTRiZCAxMy0xMzU2LTQtMzQ2LTUKK2Fsd2F5cyBcdTU1MzFcdTU0OGMgMTItMTM0Ni01LTEyMzUtMjM0Ni01CithbHdheXMgXHU1NTQ2XHU4ODRjIDI0LTEzNDYtMy0xMjM1LTEzNDYtMgorYWx3YXlzIFx1NTU0Nlx1OGNjOCAyNC0xMzQ2LTMtMTMtMzQtNAorYWx3YXlzIFx1NTU0Nlx1OTFjZiAyNC0xMzQ2LTMtMTQtNDYtMgorYWx3YXlzIFx1NTU0Zlx1NTM3NyAxMjM0NTYtNS0xMy00NS01CithbHdheXMgXHU1NTVlXHU1NDI3IDIzNDU2LTQtMTM1LTM0NS0zCithbHdheXMgXHU1NTVlXHU1NTVlIDIzNDU2LTMtMjM0NTYtMworYWx3YXlzIFx1NTU4MFx1NGVjMCAxMjMtMzQ1LTUtMjQtMTU2LTIKK2Fsd2F5cyBcdTU1ODFcdTU1ODEgMTI1Ni0yLTEyNTYtMgorYWx3YXlzIFx1NTU5Y1x1NTk3ZCAxNS0xNi00LTEyMzUtMTQ2LTUKK2Fsd2F5cyBcdTU1OWRcdTkxYzcgMTIzNS0yMzQ2LTUtMjQ1LTI0NTYtNAorYWx3YXlzIFx1NTVhZVx1NGU4ZSAxMi0xMjM2LTItMTI1Ni0yCithbHdheXMgXHU1NWFlXHU1YjUwIDE0NS0xMjM2LTMtMTI1LTE1Ni0xCithbHdheXMgXHU1NWNlXHU1NTYxIDEzNC0zNDUtNC0xMjM0NS0zNTYtMworYWx3YXlzIFx1NTVkM1x1NWI1MCAxNS0xMzQ2LTQtMTI1LTE1Ni0xCithbHdheXMgXHU1NWRhXHU1NGJkIDM0LTMtMzQ2LTUKK2Fsd2F5cyBcdTU1ZGNcdTU5N2QgMjQtMTU2LTUtMTIzNS0xNDYtNQorYWx3YXlzIFx1NTYwMFx1NTQ5NSAxNDUtMTYtMi0xMy0zNC0zCithbHdheXMgXHU1NjE0XHU1NDEwIDEyMzU2LTQtMTI0LTM0LTUKK2Fsd2F5cyBcdTU2MTRcdTZjMjMgMTIzNTYtNS0yNDUtMTYtNQorYWx3YXlzIFx1NTYyOVx1NTU2NiAxMjM1LTM1LTMtMTQtMzQ1LTMKK2Fsd2F5cyBcdTU2MzBcdTU0ZTkgMTMtMTYtMy0xNC0xNi0zCithbHdheXMgXHU1NjY4XHU2YTAyIDI0NS0xNi01LTIzNi01CithbHdheXMgXHU1Njg3XHU5NjNiIDEyMzUtMjM0Ni01LTEyNS0zNC00CithbHdheXMgXHU1NmRiXHU4ODRjIDE1LTE1Ni01LTEyMzUtMTM0Ni0yCithbHdheXMgXHU1NmRlXHU1ZTk0IDEyMzUtMTI0Ni0yLTEzNDU2LTUKK2Fsd2F5cyBcdTU2ZGVcdTYxYzkgMTIzNS0xMjQ2LTItMTM0NTYtNQorYWx3YXlzIFx1NTZlMFx1NGUzYSAxNDU2LTMtMTI0Ni01CithbHdheXMgXHU1NmUwXHU2MWM5IDE0NTYtMy0xMzQ1Ni01CithbHdheXMgXHU1NmUwXHU3MGJhIDE0NTYtMy0xMjQ2LTUKK2Fsd2F5cyBcdTU2ZmFcdTg0NTcgMTMtMzQtNS0xLTI1LTIKK2Fsd2F5cyBcdTU3MDhcdTViNTAgMjQ1LTQ1LTMtMTI1LTE1Ni0xCithbHdheXMgXHU1NzBiXHU2YTAyIDEzLTI1LTItMjM2LTUKK2Fsd2F5cyBcdTU3MGJcdTkwZmQgMTMtMjUtMi0xNDUtMzQtMworYWx3YXlzIFx1NTcwYlx1OTZlMyAxMy0yNS0yLTEzNDUtMTIzNi01CithbHdheXMgXHU1NzE4XHU5NTc3IDEyNC0xMjQ1Ni0yLTEtMTM0Ni00CithbHdheXMgXHU1NzFmXHU4NDU3IDEyNC0zNC00LTEtMzQtNQorYWx3YXlzIFx1NTcxZlx1OTU3NyAxMjQtMzQtNC0xLTEzNDYtNAorYWx3YXlzIFx1NTcyOFx1ODg0YyAxMjUtMjQ1Ni01LTEyMzUtMTM0Ni0yCithbHdheXMgXHU1NzMwXHU5MmVhIDE0NS0xNi01LTEyMzQtMzQtNQorYWx3YXlzIFx1NTc0ZVx1NTc3NyAxMjMtMTIzNi00LTEyMy0yMzQ2LTQKK2Fsd2F5cyBcdTU3NTBcdTlhMGUgMTI1LTI1LTUtMTMtMTYtNQorYWx3YXlzIFx1NTc2Nlx1NzM4NyAxMjQtMTIzNi00LTI0LTIzNTYtNQorYWx3YXlzIFx1NTdjYlx1NmM5MiAxMzQtMjQ1Ni0yLTEzNC0xMjYtNQorYWx3YXlzIFx1NTdmN1x1ODQ1NyAxLTE1Ni0yLTEtMjUtMgorYWx3YXlzIFx1NTgzMVx1NjFjOSAxMzUtMTQ2LTUtMTM0NTYtNQorYWx3YXlzIFx1NTgzNFx1NTQwOCAxMi0xMzQ2LTItMTIzNS0yMzQ2LTIKK2Fsd2F5cyBcdTU4MzRcdTk3NjIgMTItMTM0Ni0yLTEzNC0yMzQ1LTUKK2Fsd2F5cyBcdTU4NWVcdTRmNGYgMTUtMjQ1Ni0zLTEtMzQtNQorYWx3YXlzIFx1NTg1ZVx1NWI1MCAxNS0yNDU2LTMtMTI1LTE1Ni0xCithbHdheXMgXHU1ODVlXHU2ZWZmIDE1LTI0NTYtMy0xMzQtMTIzNi00CithbHdheXMgXHU1ODVlXHU3MjU5IDE1LTI0NTYtMy0yMzQ1Ni0yCithbHdheXMgXHU1ODhhXHU1YjUwIDE0NS0yMzQ1LTUtMTI1LTE1Ni0xCithbHdheXMgXHU1ODljXHU1YjUwIDEtMTI0Ni01LTEyNS0xNTYtMQorYWx3YXlzIFx1NTg5ZVx1OTU3NyAxMjUtMTM1Ni0zLTEtMTM0Ni00CithbHdheXMgXHU1OGE4XHU3ZmRmIDEzNC0xMjYtNS0xNDUtMTYtMgorYWx3YXlzIFx1NThjNVx1NTg1ZSAyMzUtNC0xNS0yMzQ2LTUKK2Fsd2F5cyBcdTU4ZTlcdTViNTAgMTM1LTM0NS01LTEyNS0xNTYtMQorYWx3YXlzIFx1NTkwNFx1NzQwNiAxMi0zNC00LTE0LTE2LTQKK2Fsd2F5cyBcdTU5MTZcdTc2ZjggMjM1Ni01LTE1LTQ2LTUKK2Fsd2F5cyBcdTU5MTZcdTg4NGMgMjM1Ni01LTEyMzUtMTM0Ni0yCithbHdheXMgXHU1OTE2XHU5NTc3IDIzNTYtNS0xLTEzNDYtNAorYWx3YXlzIFx1NTkxYVx1OTFjZCAxNDUtMjUtMy0xMi0xMjM0Ni0yCithbHdheXMgXHU1OTI3XHU1YjliIDE0NS0zNDUtNS00NS0zCithbHdheXMgXHU1OTI3XHU1YzA3IDE0NS0zNDUtNS0xMy00Ni01CithbHdheXMgXHU1OTI3XHU3Mzg3IDE0NS0zNDUtNS0yNC0yMzU2LTUKK2Fsd2F5cyBcdTU5MjdcdTk2ZTMgMTQ1LTM0NS01LTEzNDUtMTIzNi01CithbHdheXMgXHU1OTI5XHU1MjA2IDEyNC0yMzQ1LTMtMTIzNDUtMTM2LTUKK2Fsd2F5cyBcdTU5MjlcdTZkYWYgMTI0LTIzNDUtMy0yNi0yCithbHdheXMgXHU1OTI5XHU3NmY4IDEyNC0yMzQ1LTMtMTUtNDYtNQorYWx3YXlzIFx1NTkyYVx1NzZlMyAxMjQtMjQ1Ni01LTEzLTIzNDUtNQorYWx3YXlzIFx1NTkyYVx1ODg0YyAxMjQtMjQ1Ni01LTEyMzUtMTM0Ni0yCithbHdheXMgXHU1OTJiXHU1ZGVlIDEyMzQ1LTM0LTMtMTItMjQ1Ni0zCithbHdheXMgXHU1OTJkXHU2Mjk4IDI0Ni00LTEtMjM0Ni0yCithbHdheXMgXHU1OTMxXHU3NTc2IDI0LTE1Ni0zLTE0NS0xMzQ2LTUKK2Fsd2F5cyBcdTU5MzFcdThhYmYgMjQtMTU2LTMtMTI0LTI0Ni0yCithbHdheXMgXHU1OTNlXHU1YjUwIDEzLTIzNDU2LTItMTI1LTE1Ni0xCithbHdheXMgXHU1OTNlXHU3ZTJiIDEzLTIzNDU2LTItMTIzNDUtMTM1Ni01CithbHdheXMgXHU1OTQ3XHU2NTc4IDEzLTE2LTMtMjQtMzQtNQorYWx3YXlzIFx1NTk0OVx1OTA4NCAxMjM0NS0xMzU2LTUtMTIzNS0xMjQ1Ni0yCithbHdheXMgXHU1OTQ5XHU5OTBhIDEyMzQ1LTEzNTYtNS00Ni01CithbHdheXMgXHU1OTRmXHU2YTAyIDEyNS0xMjM1Ni01LTIzNi01CithbHdheXMgXHU1OTZlXHU4MWMyIDEyMzQ1LTEzNi01LTEzNS0xNi01CithbHdheXMgXHU1OTczXHU1YzA3IDEzNDUtMTI1Ni00LTEzLTQ2LTUKK2Fsd2F5cyBcdTU5N2RcdTUyZDUgMTIzNS0xNDYtNS0xNDUtMTIzNDYtNQorYWx3YXlzIFx1NTk3ZFx1NTJkZCAxMjM1LTE0Ni01LTI0LTEzNTYtNQorYWx3YXlzIFx1NTk3ZFx1NTU0ZiAxMjM1LTE0Ni01LTEyMzQ1Ni01CithbHdheXMgXHU1OTdkXHU1OTQ3IDEyMzUtMTQ2LTUtMjQ1LTE2LTIKK2Fsd2F5cyBcdTU5N2RcdTYwZTEgMTIzNS0xNDYtNS0zNC01CithbHdheXMgXHU1OTdkXHU2MjMwIDEyMzUtMTQ2LTUtMS0xMjM2LTUKK2Fsd2F5cyBcdTU5N2RcdTgwMDUgMTIzNS0xNDYtNS0xLTIzNDYtNAorYWx3YXlzIFx1NTk3ZFx1OWIyNSAxMjM1LTE0Ni01LTE0NS0xMjM1Ni01CithbHdheXMgXHU1OThhXHU1YTIwIDEyNDUtMTM2LTUtMjQtMTM2LTMKK2Fsd2F5cyBcdTU5YTVcdTc1NzYgMTI0LTI1LTQtMTQ1LTEzNDYtNQorYWx3YXlzIFx1NTlhZVx1NWI1MCAxMzQ1LTE2LTItMTI1LTE1Ni0xCithbHdheXMgXHU1OWQ0XHU2NmYyIDEyNDYtNC0yNDUtMTI1Ni0zCithbHdheXMgXHU1OWU4XHU1YjUwIDE2LTItMTI1LTE1Ni0xCithbHdheXMgXHU1OWVhXHU1YjUwIDEtMTU2LTItMTI1LTE1Ni0xCithbHdheXMgXHU1YTAxXHU1Njg3IDEyNDYtMy0xMjM1LTIzNDYtNQorYWx3YXlzIFx1NWEwM1x1NWEwMyAzNS0yLTM1LTMKK2Fsd2F5cyBcdTVhMWNcdTVhMWMgMTM0NS0yNS00LTEzNDUtMjUtNAorYWx3YXlzIFx1NWE0MFx1NWExYyAyMzQ2LTMtMTM0NS0yNS00CithbHdheXMgXHU1YTQ2XHU1YjUwIDEyMzQtMTI2LTItMTI1LTE1Ni0xCithbHdheXMgXHU1YWMyXHU1YjUwIDE1LTE0Ni00LTEyNS0xNTYtMQorYWx3YXlzIFx1NWFjYlx1NWExYyAxMzQ1LTI0Ni00LTEzNDUtMjUtMgorYWx3YXlzIFx1NWFjY1x1NjBlMSAxNS0yMzQ1LTItMzQtNQorYWx3YXlzIFx1NWFlMVx1OTU3NyAxNDUtMTYtMi0xLTEzNDYtNAorYWx3YXlzIFx1NWIwY1x1NWEwMyAxMy0yNDYtMy0zNS0zCithbHdheXMgXHU1YjU3XHU1ZTE2IDEyNS0xNTYtNS0xMjQtMzQ2LTUKK2Fsd2F5cyBcdTViNWRcdTk5MGEgMTUtMjQ2LTUtNDYtNQorYWx3YXlzIFx1NWI2OVx1NWI1MCAxMjM1LTI0NTYtMi0xMjUtMTU2LTEKK2Fsd2F5cyBcdTViNmJcdTViNTAgMTUtMTIzNDU2LTMtMTI1LTE1Ni0xCithbHdheXMgXHU1Yjc4XHU5NTc3IDE1LTIzNi0yLTEtMTM0Ni00CithbHdheXMgXHU1Yjg1XHU1YjUwIDEtMjQ1Ni0yLTEyNS0xNTYtMQorYWx3YXlzIFx1NWI4OFx1NTIwNiAyNC0xMjM1Ni00LTEyMzQ1LTEzNi01CithbHdheXMgXHU1Yjg4XHU1YzA3IDI0LTEyMzU2LTQtMTMtNDYtNQorYWx3YXlzIFx1NWI4OVx1NTIwNiAxMjM2LTMtMTIzNDUtMTM2LTUKK2Fsd2F5cyBcdTViOGZcdTkwZmQgMTIzNS0xMjM0Ni0yLTE0NS0zNC0zCithbHdheXMgXHU1Yjk4XHU5NTc3IDEzLTEyNDU2LTMtMS0xMzQ2LTQKK2Fsd2F5cyBcdTViOWFcdTc3MDEgMTQ1LTEzNDU2LTUtMTUtMTM0NTYtNAorYWx3YXlzIFx1NWI5YVx1OTBmZCAxNDUtMTM0NTYtNS0xNDUtMzQtMworYWx3YXlzIFx1NWJiMFx1NzZmOCAxMjUtMjQ1Ni00LTE1LTQ2LTUKK2Fsd2F5cyBcdTViYjNcdTgxY2EgMTIzNS0yNDU2LTUtMTUtMTQ2LTUKK2Fsd2F5cyBcdTViYjZcdTViNTAgMTMtMjM0NTYtMy0xMjUtMTU2LTEKK2Fsd2F5cyBcdTViYjZcdTc1NzYgMTMtMjM0NTYtMy0xNDUtMTM0Ni01CithbHdheXMgXHU1YmI2XHU3ZDJmIDEzLTIzNDU2LTMtMTQtMzU2LTQKK2Fsd2F5cyBcdTViYjZcdTk1NzcgMTMtMjM0NTYtMy0xLTEzNDYtNAorYWx3YXlzIFx1NWJkMlx1NTA0NyAxMjM1LTEyMzYtMi0xMy0yMzQ1Ni01CithbHdheXMgXHU1YmU5XHU1ZWE2IDI0LTEzNi00LTE0NS0yNS01CithbHdheXMgXHU1YzA3XHU0ZWU0IDEzLTQ2LTUtMTQtMTM0NTYtNQorYWx3YXlzIFx1NWMwN1x1NGY1MCAxMy00Ni01LTEyNS0yNS00CithbHdheXMgXHU1YzA3XHU1OGViIDEzLTQ2LTUtMjQtMTU2LTUKK2Fsd2F5cyBcdTVjMDdcdTViOTggMTMtNDYtNS0xMy0xMjQ1Ni0zCithbHdheXMgXHU1YzA3XHU1ZTI1IDEzLTQ2LTUtMjQtMjM1Ni01CithbHdheXMgXHU1YzA3XHU2NzUwIDEzLTQ2LTUtMjQ1LTI0NTYtMgorYWx3YXlzIFx1NWMwN1x1NjgyMSAxMy00Ni01LTE1LTI0Ni01CithbHdheXMgXHU1YzA3XHU3NmY4IDEzLTQ2LTUtMTUtNDYtNQorYWx3YXlzIFx1NWMwN1x1OTU4MCAxMy00Ni01LTEzNC0xMzYtMgorYWx3YXlzIFx1NWMwN1x1OTgxOCAxMy00Ni01LTE0LTEzNDU2LTQKK2Fsd2F5cyBcdTVjMDhcdTZhNmIgMS0xMjQ1Ni0zLTEyMzUtMTM1Ni01CithbHdheXMgXHU1YzA4XHU4NDU3IDEtMTI0NTYtMy0xLTM0LTUKK2Fsd2F5cyBcdTVjMGFcdTk1NzcgMTI1LTEyMzQ1Ni0zLTEtMTM0Ni00CithbHdheXMgXHU1YzBkXHU2MWM5IDE0NS0xMjQ2LTUtMTM0NTYtNQorYWx3YXlzIFx1NWMwZFx1N2EzMSAxNDUtMTI0Ni01LTEyLTEzNi01CithbHdheXMgXHU1YzBlXHU2NGFkIDE0NS0xNDYtNC0xMzUtMTI2LTMKK2Fsd2F5cyBcdTVjMGZcdTUwYjMgMTUtMjQ2LTQtMS0xMjQ1Ni01CithbHdheXMgXHU1YzExXHU1OGVmIDI0LTE0Ni01LTEtNDU2LTUKK2Fsd2F5cyBcdTVjMTFcdTU5NzMgMjQtMTQ2LTUtMTM0NS0xMjU2LTQKK2Fsd2F5cyBcdTVjMTFcdTVhNjYgMjQtMTQ2LTUtMTIzNDUtMzQtNQorYWx3YXlzIFx1NWMxMVx1NWI4OSAyNC0xNDYtMy0xMjM2LTMKK2Fsd2F5cyBcdTVjMTFcdTVjMDcgMjQtMTQ2LTUtMTMtNDYtNQorYWx3YXlzIFx1NWMxMVx1NWU3NCAyNC0xNDYtNS0xMzQ1LTIzNDUtMgorYWx3YXlzIFx1NWMxMVx1NWViNyAyNC0xNDYtNS0xMjMtMTM0Ni0zCithbHdheXMgXHU1YzExXHU2Nzk3IDI0LTE0Ni01LTE0LTE0NTYtMgorYWx3YXlzIFx1NWMxMVx1NzIzYSAyNC0xNDYtNS0zNDYtMgorYWx3YXlzIFx1NWMzMVx1NWY5NyAxMy0yMzQtNS0xNDUtMzU2LTQKK2Fsd2F5cyBcdTVjM2VcdTVkZjQgMTYtNC0xMzUtMzQ1LTMKK2Fsd2F5cyBcdTVjNDBcdTk1NzcgMTMtMTI1Ni0yLTEtMTM0Ni00CithbHdheXMgXHU1YzRiXHU1YjUwIDM0LTMtMTI1LTE1Ni0xCithbHdheXMgXHU1YzRmXHU2MDZmIDEzNS0xMzQ1Ni00LTE1LTE2LTIKK2Fsd2F5cyBcdTVjNGZcdTkwMDAgMTM1LTEzNDU2LTQtMTI0LTEyNDYtNQorYWx3YXlzIFx1NWM5MVx1NTNjMyAyNDUtMTM2LTItMjQtMTM2LTMKK2Fsd2F5cyBcdTVjOTRcdTViNTAgMTItMzQ1LTUtMTI1LTE1Ni0xCithbHdheXMgXHU1ZGUxXHU2NmY0IDE1LTI1Ni0yLTEzLTEzNTYtMworYWx3YXlzIFx1NWRlNlx1NTBiMyAxMjUtMjUtNC0xLTEyNDU2LTUKK2Fsd2F5cyBcdTVkZThcdTg0NTcgMTMtMTI1Ni01LTEtMzQtNQorYWx3YXlzIFx1NWRlZVx1NGUwZCAxMi0zNDUtNS0xMzUtMzQtNQorYWx3YXlzIFx1NWRlZVx1NGU4YiAxMi0yNDU2LTMtMjQtMTU2LTUKK2Fsd2F5cyBcdTVkZWVcdTRmN2YgMTItMjQ1Ni0zLTI0LTE1Ni00CithbHdheXMgXHU1ZGVlXHU1Zjc5IDEyLTI0NTYtMy0xNi01CithbHdheXMgXHU1ZGVlXHU5MDYzIDEyLTI0NTYtMy0yNDUtMjM0NS00CithbHdheXMgXHU1ZGVlXHU5ZWRlIDEyLTM0NS01LTE0NS0yMzQ1LTQKK2Fsd2F5cyBcdTVkZjRcdTdiNTQgMTM1LTM0NS0zLTE0NS0zNDUtMworYWx3YXlzIFx1NWRmN1x1NWI1MCAxNS00Ni01LTEyNS0xNTYtMQorYWx3YXlzIFx1NWUwMlx1OTU3NyAyNC0xNTYtNS0xLTEzNDYtNAorYWx3YXlzIFx1NWUwM1x1NTMzOSAxMzUtMzQtNS0xMjM0LTE2LTQKK2Fsd2F5cyBcdTVlMTZcdTViNTAgMTI0LTM0Ni00LTEyNS0xNTYtMQorYWx3YXlzIFx1NWUyYlx1OTU3NyAyNC0xNTYtMy0xLTEzNDYtNAorYWx3YXlzIFx1NWUzZFx1NWI1MCAxMzQtMTQ2LTUtMTI1LTE1Ni0xCithbHdheXMgXHU1ZTRjXHU1YjUwIDEyMzUtNDU2LTQtMTI1LTE1Ni0xCithbHdheXMgXHU1ZTZiXHU1YjUwIDEzNS0xMzQ2LTMtMTI1LTE1Ni0xCithbHdheXMgXHU1ZTcyXHU1YzA3IDEzLTEyMzYtMy0xMy00Ni01CithbHdheXMgXHU1ZTc0XHU1MDQ3IDEzNDUtMjM0NS0yLTEzLTIzNDU2LTUKK2Fsd2F5cyBcdTVlNzRcdTVjMTEgMTM0NS0yMzQ1LTItMjQtMTQ2LTUKK2Fsd2F5cyBcdTVlNzRcdTk1NzcgMTM0NS0yMzQ1LTItMS0xMzQ2LTQKK2Fsd2F5cyBcdTVlNzlcdTU2MWIgMTMtMTIzNi01LTEzNC0zNDUtMgorYWx3YXlzIFx1NWU3OVx1OWViYyAxMy0xMjM2LTUtMTM0LTM0NS0yCithbHdheXMgXHU1ZTdlXHU0ZTRlIDEzLTE2LTMtMTIzNS0zNC0zCithbHdheXMgXHU1ZThhXHU5MmVhIDEyLTQ1Ni0yLTEyMzQtMzQtNQorYWx3YXlzIFx1NWU5NFx1NzUyOCAxMzQ1Ni01LTIzNS01CithbHdheXMgXHU1ZTk1XHU1YjUwIDE0NS0xNi00LTEyNS0xNTYtMQorYWx3YXlzIFx1NWU5N1x1OTJlYSAxNDUtMjM0NS01LTEyMzQtMzQtNQorYWx3YXlzIFx1NWU5N1x1OTRmYSAxNDUtMjM0NS01LTEyMzQtMzQtNQorYWx3YXlzIFx1NWVhNlx1NTA0NyAxNDUtMzQtNS0xMy0yMzQ1Ni01CithbHdheXMgXHU1ZWFkXHU5NTc3IDEyNC0xMzQ1Ni0yLTEtMTM0Ni00CithbHdheXMgXHU1ZWRhXHU1YjUwIDEyLTM0LTItMTI1LTE1Ni0xCithbHdheXMgXHU1ZWUwXHU5NTc3IDEyLTEzNDYtNC0xLTEzNDYtNAorYWx3YXlzIFx1NWVmM1x1OTU3NyAxMjQtMTM0NTYtMy0xLTEzNDYtNAorYWx3YXlzIFx1NWVmYVx1OTBmZCAxMy0yMzQ1LTUtMTQ1LTM0LTMKK2Fsd2F5cyBcdTVmMjZcdTZhMDIgMTUtMjM0NS0yLTIzNi01CithbHdheXMgXHU1ZjM3XHU1MjM2IDI0NS00Ni00LTEtMTU2LTUKK2Fsd2F5cyBcdTVmMzdcdTUzNjAgMjQ1LTQ2LTQtMS0xMjM2LTUKK2Fsd2F5cyBcdTVmMzdcdTVjMDcgMjQ1LTQ2LTItMTMtNDYtNQorYWx3YXlzIFx1NWYzN1x1NWU3OSAyNDUtNDYtNC0xMy0xMjM2LTUKK2Fsd2F5cyBcdTVmMzdcdTZhNmIgMjQ1LTQ2LTItMTIzNS0xMzU2LTUKK2Fsd2F5cyBcdTVmMzdcdTZjNDIgMjQ1LTQ2LTQtMjQ1LTIzNC0yCithbHdheXMgXHU1ZjM3XHU4YTE4IDI0NS00Ni00LTEzLTE2LTUKK2Fsd2F5cyBcdTVmNGNcdTY0OTIgMTM0LTE2LTItMTUtMzQ1LTMKK2Fsd2F5cyBcdTVmNGVcdTY2ZjIgMTI0NTYtMy0yNDUtMTI1Ni0zCithbHdheXMgXHU1ZjcxXHU1YjUwIDEzNDU2LTQtMTI1LTE1Ni0xCithbHdheXMgXHU1Zjc3XHU1ZmE4IDEyMzQtMTM0Ni0yLTEyMzUtNDU2LTIKK2Fsd2F5cyBcdTVmODBcdTkwODQgNDU2LTQtMTIzNS0xMjQ1Ni0yCithbHdheXMgXHU1ZjgxXHU0ZjEwIDEtMTM1Ni0zLTEyMzQ1LTM0NS0zCithbHdheXMgXHU1Zjk4XHU1ZjhhIDEyMzQtMjQ1Ni0yLTEyMzUtMjM1Ni0yCithbHdheXMgXHU1ZmI3XHU4ODRjIDE0NS0yMzQ2LTItMTUtMTM0NTYtNQorYWx3YXlzIFx1NWZjNVx1NWY5NyAxMzUtMTYtNS0xNDUtMzU2LTQKK2Fsd2F5cyBcdTVmYzVcdTYxYzkgMTM1LTE2LTUtMTM0NTYtNQorYWx3YXlzIFx1NWZkNlx1NWVhNiAyNDUtMTIzNDU2LTQtMTQ1LTI1LTUKK2Fsd2F5cyBcdTVmZTBcdTU0NGEgMS0xMjM0Ni0zLTEzLTM0LTUKK2Fsd2F5cyBcdTYwMGVcdTRlNDggMTI1LTEzNi00LTEzNC0yMzQ2LTEKK2Fsd2F5cyBcdTYwMTJcdTg2NWYgMTM0NS0zNC01LTEyMzUtMTQ2LTIKK2Fsd2F5cyBcdTYwMWRcdTZjNTcgMTUtMTU2LTMtMTIzNS0xMjM2LTIKK2Fsd2F5cyBcdTYwMWRcdTkxY2YgMTUtMTU2LTMtMTQtNDYtMgorYWx3YXlzIFx1NjAyNVx1OTZlMyAxMy0xNi0yLTEzNDUtMTIzNi01CithbHdheXMgXHU2MDI3XHU1YjUwIDE1LTEzNDU2LTUtMTI1LTE1Ni0xCithbHdheXMgXHU2MDJmXHU1ODM0IDI0NS0yMzYtNS0xMi0xMzQ2LTQKK2Fsd2F5cyBcdTYwMmZcdTYxZTYgMjQ1LTIzNi01LTEzNDUtMjUtNQorYWx3YXlzIFx1NjA1MFx1NTY4NyAxMjMtMTIzNDYtNC0xMjM1LTIzNDYtNQorYWx3YXlzIFx1NjA2Ylx1NTY4NyAxNDUtMTIzNDYtNS0xMjM1LTIzNDYtNQorYWx3YXlzIFx1NjA3MFx1NzU3NiAyNDUtMjM0NTYtNS0xNDUtMTM0Ni01CithbHdheXMgXHU2MGEzXHU5NmUzIDEyMzUtMTI0NTYtNS0xMzQ1LTEyMzYtNQorYWx3YXlzIFx1NjBiNlx1NjBiNiAxMzQtMTM2LTUtMTM0LTEzNi01CithbHdheXMgXHU2MGM1XHU1MjA2IDI0NS0xMzQ1Ni0yLTEyMzQ1LTEzNi01CithbHdheXMgXHU2MGUxXHU1MmRlIDM0LTUtMTQtMTQ2LTIKK2Fsd2F5cyBcdTYwZTFcdTVjMTEgMjM0Ni01LTI0LTE0Ni01CithbHdheXMgXHU2MTFiXHU1OTdkIDI0NTYtNS0xMjM1LTE0Ni01CithbHdheXMgXHU2MTFmXHU2MWM5IDEzLTEyMzYtNC0xMzQ1Ni01CithbHdheXMgXHU2MTcwXHU1MmRlIDEyNDYtNS0xNC0xNDYtNQorYWx3YXlzIFx1NjE4ZVx1NjBlMSAxMjUtMTM1Ni0zLTM0LTUKK2Fsd2F5cyBcdTYxYzlcdTRlZDggMTM0NTYtNS0xMjM0NS0zNC01CithbHdheXMgXHU2MWM5XHU1MTQxIDEzNDU2LTUtMjU2LTQKK2Fsd2F5cyBcdTYxYzlcdTU0N2QgMTM0NTYtNS0xMzQtMTM0NTYtNQorYWx3YXlzIFx1NjFjOVx1NTQ4YyAxMzQ1Ni01LTEyMzUtMjM0Ni0yCithbHdheXMgXHU2MWM5XHU1YzBkIDEzNDU2LTUtMTQ1LTEyNDYtNQorYWx3YXlzIFx1NjFjOVx1NWZiNSAxMzQ1Ni01LTEtMTM1Ni0zCithbHdheXMgXHU2MWM5XHU2M2E1IDEzNDU2LTUtMTMtMzQ2LTMKK2Fsd2F5cyBcdTYxYzlcdTY2NDIgMTM0NTYtNS0yNC0xNTYtMgorYWx3YXlzIFx1NjFjOVx1NjY2ZiAxMzQ1Ni01LTEzLTEzNDU2LTQKK2Fsd2F5cyBcdTYxYzlcdTZjNDIgMTM0NTYtNS0yNDUtMjM0LTIKK2Fsd2F5cyBcdTYxYzlcdTc1MjggMTM0NTYtNS0yMzUtNQorYWx3YXlzIFx1NjFjOVx1ODAwMyAxMzQ1Ni01LTEyMy0xNDYtNAorYWx3YXlzIFx1NjFjOVx1ODA3MiAxMzQ1Ni01LTI0LTEzNTYtMworYWx3YXlzIFx1NjFjOVx1OGEzMSAxMzQ1Ni01LTE1LTEyNTYtNAorYWx3YXlzIFx1NjFjOVx1OGE2NiAxMzQ1Ni01LTI0LTE1Ni01CithbHdheXMgXHU2MWM5XHU4YjhhIDEzNDU2LTUtMTM1LTIzNDUtNQorYWx3YXlzIFx1NjFjOVx1OTA0YiAxMzQ1Ni01LTI1Ni01CithbHdheXMgXHU2MWM5XHU5MDgwIDEzNDU2LTUtMjQ2LTMKK2Fsd2F5cyBcdTYxYzlcdTkxNmMgMTM0NTYtNS0xMi0xMjM1Ni0yCithbHdheXMgXHU2MWM5XHU5YTU3IDEzNDU2LTUtMjM0NS01CithbHdheXMgXHU2MWNhXHU1NWFhIDE0Ni01LTE1LTEzNDYtNQorYWx3YXlzIFx1NjFjYVx1NjA5NCAxNDYtNS0xMjM1LTEyNDYtNAorYWx3YXlzIFx1NjFjYVx1NjBmMSAxNDYtNS0xMzQ1LTE0Ni00CithbHdheXMgXHU2MWYyXHU4NjU1IDEyLTEzNTYtMi0xMi0zNC00CithbHdheXMgXHU2MWY1XHU2MWMyIDEzNC0xMzU2LTQtMTQ1LTEyMzQ2LTQKK2Fsd2F5cyBcdTYxZjZcdTY1NjMgMTQtMTIzNi00LTE1LTEyMzYtNAorYWx3YXlzIFx1NjIxMFx1NTIwNiAxMi0xMzU2LTItMTIzNDUtMTM2LTUKK2Fsd2F5cyBcdTYyMTBcdTkwZmQgMTItMTM1Ni0yLTE0NS0zNC0zCithbHdheXMgXHU2MjEwXHU5NTc3IDEyLTEzNTYtMi0xLTEzNDYtNAorYWx3YXlzIFx1NjIxMFx1OTU3ZiAxMi0xMzU2LTItMS0xMzQ2LTQKK2Fsd2F5cyBcdTYyMzBcdTVjMDcgMS0xMjM2LTUtMTMtNDYtNQorYWx3YXlzIFx1NjIzMlx1NWI1MCAxNS0xNi01LTEyNS0xNTYtMQorYWx3YXlzIFx1NjIzMlx1OGIxNCAxNS0xNi01LTEzNDUtMjM2LTUKK2Fsd2F5cyBcdTYyMzZcdTk1NzcgMTIzNS0zNC01LTEtMTM0Ni00CithbHdheXMgXHU2MjNmXHU1YjUwIDEyMzQ1LTEzNDYtMi0xMjUtMTU2LTEKK2Fsd2F5cyBcdTYyNDBcdTg0NTcgMTUtMjUtNC0xLTM0LTUKK2Fsd2F5cyBcdTYyNDBcdTk1NzcgMTUtMjUtNC0xLTEzNDYtNAorYWx3YXlzIFx1NjI0MVx1NjRkNCAxMzUtMjM0NS00LTE0NS0xMjM2LTUKK2Fsd2F5cyBcdTYyNDFcdTgyMWYgMTIzNC0yMzQ1LTMtMS0xMjM1Ni0zCithbHdheXMgXHU2MjQxXHU5NDdkIDEzNS0yMzQ1LTQtMTI1LTEyNDU2LTUKK2Fsd2F5cyBcdTYyNDdcdTViNTAgMjQtMTIzNi01LTEyNS0xNTYtMQorYWx3YXlzIFx1NjI0Ylx1NzZmOCAyNC0xMjM1Ni00LTE1LTQ2LTUKK2Fsd2F5cyBcdTYyNGVcdTViZTYgMS0zNDUtMy0yNC0xNTYtMgorYWx3YXlzIFx1NjI0ZVx1NjI0YiAxLTM0NS0zLTI0LTEyMzU2LTQKK2Fsd2F5cyBcdTYyNGVcdTY4MzkgMS0zNDUtMy0xMy0xMzYtMworYWx3YXlzIFx1NjI0ZVx1NzczYyAxLTM0NS0zLTIzNDUtNAorYWx3YXlzIFx1NjI0ZVx1OTFkZCAxLTM0NS0zLTEtMTM2LTMKK2Fsd2F5cyBcdTYyNTNcdTc2ZjkgMTQ1LTM0NS00LTE0NS0xMjM0NTYtNAorYWx3YXlzIFx1NjI2M1x1NWI1MCAxMjMtMTIzNTYtNS0xMjUtMTU2LTEKK2Fsd2F5cyBcdTYyNjdcdTg0NTcgMS0xNTYtMi0xLTI1LTIKK2Fsd2F5cyBcdTYyNmRcdTY2ZjIgMTM0NS0yMzQtNC0yNDUtMTI1Ni0zCithbHdheXMgXHU2MjZlXHU3NmY4IDEzNS0xMjM2LTUtMTUtNDYtNQorYWx3YXlzIFx1NjI3ZVx1ODQ1NyAxLTE0Ni00LTEtMTQ2LTIKK2Fsd2F5cyBcdTYyODRcdTZjOTIgMTItMTQ2LTMtMTM0LTEyNi01CithbHdheXMgXHU2Mjk1XHU5NjRkIDEyNC0xMjM1Ni0yLTE1LTQ2LTIKK2Fsd2F5cyBcdTYyYjlcdTcxNWUgMTM0LTEyNi00LTI0LTM0NS0zCithbHdheXMgXHU2MmJkXHU3YTdhIDEyLTEyMzU2LTMtMTIzLTEyMzQ2LTUKK2Fsd2F5cyBcdTYyY2RcdTViNTAgMTIzNC0yNDU2LTMtMTI1LTE1Ni0xCithbHdheXMgXHU2MmQ0XHU5MGZkIDEzNS0zNDUtMi0xNDUtMzQtMworYWx3YXlzIFx1NjJkN1x1NTNlMyAxNDYtNS0xMjMtMTIzNTYtNAorYWx3YXlzIFx1NjJkOFx1NmNlNSAxMy0xMjU2LTMtMTM0NS0xNi01CithbHdheXMgXHU2MmQ5XHU4NDU3IDEtMjUtMi0xLTM0LTUKK2Fsd2F5cyBcdTYzMDdcdTY0NTggMS0xNTYtNC0xLTIzNDYtMgorYWx3YXlzIFx1NjMxMVx1NTI1NCAxMjQtMjQ2LTMtMTI0LTE2LTUKK2Fsd2F5cyBcdTYzMTFcdTVmMDQgMTI0LTI0Ni00LTEzNDUtMTIzNDYtNQorYWx3YXlzIFx1NjMxMVx1NjIzMCAxMjQtMjQ2LTQtMS0xMjM2LTUKK2Fsd2F5cyBcdTYzMTFcdTY0YTUgMTI0LTI0Ni00LTEzNS0xMjYtMworYWx3YXlzIFx1NjMxMVx1NjRkNCAxMjQtMjQ2LTMtMTQ1LTEyMzYtNQorYWx3YXlzIFx1NjMxMVx1NzFjOCAxMjQtMjQ2LTQtMTQ1LTEzNTYtMworYWx3YXlzIFx1NjMxMVx1OTAxNyAxMjQtMjQ2LTQtMTQ1LTEyMzU2LTUKK2Fsd2F5cyBcdTYzMTFcdTkxYzEgMTI0LTI0Ni00LTE1LTE0NTYtNQorYWx3YXlzIFx1NjMyZlx1ODFjMiAxLTEzNi01LTEzNS0xNi01CithbHdheXMgXHU2MzgzXHU1ZTFhIDE1LTE0Ni01LTEtMTIzNTYtNAorYWx3YXlzIFx1NjM5Mlx1NmJkNCAxMjM0LTI0NTYtMi0xMzUtMTYtNQorYWx3YXlzIFx1NjM5Mlx1ODg0YyAxMjM0LTI0NTYtMi0xMjM1LTEzNDYtMgorYWx3YXlzIFx1NjM5Mlx1OTU3NyAxMjM0LTI0NTYtMi0xLTEzNDYtNAorYWx3YXlzIFx1NjM5OVx1OTMyMiAxLTEzNTYtNS0yNDUtMjM0NS0yCithbHdheXMgXHU2M2EyXHU1YjUwIDEyNC0xMjM2LTUtMTI1LTE1Ni0xCithbHdheXMgXHU2M2E1XHU2MWM5IDEzLTM0Ni0zLTEzNDU2LTUKK2Fsd2F5cyBcdTYzYTVcdTdlMmIgMTMtMzQ2LTMtMTIzNDUtMTM1Ni01CithbHdheXMgXHU2M2E4XHU3OGU4IDEyNC0xMjQ2LTMtMTM0LTEyNi01CithbHdheXMgXHU2M2E5XHU2YzkyIDIzNDUtNC0xMzQtMTI2LTUKK2Fsd2F5cyBcdTYzZGJcdTg4NGMgMTIzNS0xMjQ1Ni01LTEyMzUtMTM0Ni0yCithbHdheXMgXHU2M2UzXHU1ZWE2IDEyLTIzNTYtNC0xNDUtMjUtNQorYWx3YXlzIFx1NjNlOVx1NmNiOSAxMjMtMjQ1Ni0zLTIzNC0yCithbHdheXMgXHU2M2VkXHU2YWViIDEzLTM0Ni0yLTEtMzQtMworYWx3YXlzIFx1NjQxNlx1NjY0MyAyNDYtMi0xMjM1LTQ1Ni01CithbHdheXMgXHU2NDJhXHU1ODVlIDEyNC0xMzQ2LTItMTUtMjM0Ni01CithbHdheXMgXHU2NDVmXHU5MzIyIDE0LTEyMzU2LTMtMjQ1LTIzNDUtMgorYWx3YXlzIFx1NjQ4N1x1NWI1MCAxMjM0LTM0Ni00LTEyNS0xNTYtMQorYWx3YXlzIFx1NjQ5Mlx1NGY0NiAxNS0zNDUtMy0xNDUtMTIzNi01CithbHdheXMgXHU2NDkyXHU1YjBjIDE1LTM0NS0zLTEzLTI0Ni0zCithbHdheXMgXHU2NDkyXHU1YzNmIDE1LTM0NS0zLTEzNDUtMjQ2LTUKK2Fsd2F5cyBcdTY0OTJcdTYyNGIgMTUtMzQ1LTMtMjQtMTIzNTYtNAorYWx3YXlzIFx1NjQ5Mlx1ODE3ZiAxNS0zNDUtMy0xMjQtMTI0Ni00CithbHdheXMgXHU2NDkyXHU4YjBhIDE1LTM0NS0zLTEyMzUtNDU2LTQKK2Fsd2F5cyBcdTY0OTJcdThjZjQgMTUtMzQ1LTMtMTQtMjQ1Ni01CithbHdheXMgXHU2NDkyXHU5MWNlIDE1LTM0NS0zLTM0Ni00CithbHdheXMgXHU2NDkyXHU5NThiIDE1LTM0NS0zLTEyMy0yNDU2LTMKK2Fsd2F5cyBcdTY0YWRcdTY2MjAgMTM1LTEyNi0zLTEzNDU2LTUKK2Fsd2F5cyBcdTY0YWRcdTk3ZjMgMTM1LTEyNi0zLTE0NTYtMworYWx3YXlzIFx1NjRjZFx1ODg0YyAyNDUtMTQ2LTMtMTUtMTM0NTYtNQorYWx3YXlzIFx1NjRkNFx1NWI1MCAxNDUtMTIzNi01LTEyNS0xNTYtMQorYWx3YXlzIFx1NjRmMlx1OTA4NCAxLTE1Ni0yLTEyMzUtMTI0NTYtMgorYWx3YXlzIFx1NjUxOFx1NTkzNyAxMjQ1LTEzNDYtMi0xNi0yCithbHdheXMgXHU2NTE4XHU1OTZhIDEyNDUtMTM0Ni0yLTE0NS0yNS0yCithbHdheXMgXHU2NTI0XHU1YjUwIDEyNC0xMjM2LTMtMTI1LTE1Ni0xCithbHdheXMgXHU2NTI0XHU5MDg0IDEyNC0xMjM2LTMtMTIzNS0xMjQ1Ni0yCithbHdheXMgXHU2NTJhXHU1NDhjIDEzLTI0Ni00LTEyMzUtMjUtNQorYWx3YXlzIFx1NjUzOVx1ODg0YyAxMy0yNDU2LTQtMTIzNS0xMzQ2LTIKK2Fsd2F5cyBcdTY1M2VcdTUwNDcgMTIzNDUtMTM0Ni01LTEzLTIzNDU2LTUKK2Fsd2F5cyBcdTY1NDhcdTYxYzkgMTUtMjQ2LTUtMTM0NTYtNQorYWx3YXlzIFx1NjU1MVx1OTZlMyAxMy0yMzQtNS0xMzQ1LTEyMzYtNQorYWx3YXlzIFx1NjU1N1x1ODIwOCAxMzUtMjQ1Ni01LTE1LTEzNDU2LTUKK2Fsd2F5cyBcdTY1NjNcdTUxNDkgMTUtMTIzNi00LTEzLTQ1Ni0zCithbHdheXMgXHU2NTYzXHU1MTc1IDE1LTEyMzYtNC0xMzUtMTM0NTYtMworYWx3YXlzIFx1NjU2M1x1NjU4NyAxNS0xMjM2LTQtMTIzNDU2LTIKK2Fsd2F5cyBcdTY1NjNcdTY2ZjIgMTUtMTIzNi00LTI0NS0xMjU2LTQKK2Fsd2F5cyBcdTY1NjNcdTZjOTkgMTUtMTIzNi00LTI0LTM0NS0zCithbHdheXMgXHU2NTc4XHU0ZTAwIDI0LTM0LTQtMTYtMworYWx3YXlzIFx1NjU3OFx1NGUwZCAyNC0zNC00LTEzNS0zNC01CithbHdheXMgXHU2NTc4XHU0ZThjIDI0LTM0LTQtMTU2LTUKK2Fsd2F5cyBcdTY1NzhcdTUxNzggMjQtMzQtNC0xNDUtMjM0NS00CithbHdheXMgXHU2NTc4XHU2NTc4IDI0LTM0LTQtMjQtMzQtNQorYWx3YXlzIFx1NjU3OFx1ODQzZCAyNC0zNC00LTE0LTI1LTUKK2Fsd2F5cyBcdTY1NzhcdThhYWEgMjQtMzQtNC0yNC0yNS0zCithbHdheXMgXHU2NTc4XHU5MzIyIDI0LTM0LTQtMjQ1LTIzNDUtMgorYWx3YXlzIFx1NjU4N1x1OTA0ZSAxMjM0NTYtNS0xMy0yNS01CithbHdheXMgXHU2NTg3XHU5OGZlIDEyMzQ1Ni01LTI0LTE1Ni01CithbHdheXMgXHU2NTk3XHU5MWNmIDE0NS0xMjM1Ni00LTE0LTQ2LTIKK2Fsd2F5cyBcdTY1OTlcdTRlMmQgMTQtMjQ2LTUtMS0xMjM0Ni01CithbHdheXMgXHU2NTk5XHU1YjUwIDE0LTI0Ni01LTEyNS0xNTYtMQorYWx3YXlzIFx1NjVhN1x1NWI1MCAxMjM0NS0zNC00LTEyNS0xNTYtMQorYWx3YXlzIFx1NjVjNVx1OTU3NyAxNC0xMjU2LTQtMS0xMzQ2LTQKK2Fsd2F5cyBcdTY1Y2JcdTk4YTggMTUtNDUtNS0xMjM0NS0xMzU2LTMKK2Fsd2F5cyBcdTY1Y2ZcdTk1NzcgMTI1LTM0LTItMS0xMzQ2LTQKK2Fsd2F5cyBcdTY1ZDdcdTViNTAgMjQ1LTE2LTItMTI1LTE1Ni0xCithbHdheXMgXHU2NWU1XHU1YjUwIDEyNDUtMTU2LTUtMTI1LTE1Ni0xCithbHdheXMgXHU2NWU1XHU2Njg4IDEyNDUtMTU2LTUtMjU2LTUKK2Fsd2F5cyBcdTY1ZTVcdTZjOTIgMTI0NS0xNTYtNS0xMzQtMTI2LTUKK2Fsd2F5cyBcdTY2MTNcdTUwYjMgMTYtNS0xLTEyNDU2LTUKK2Fsd2F5cyBcdTY2MWZcdTViYmYgMTUtMTM0NTYtMy0xNS0yMzQtNQorYWx3YXlzIFx1NjYxZlx1NzZmOCAxNS0xMzQ1Ni0zLTE1LTQ2LTUKK2Fsd2F5cyBcdTY2MjVcdTUwNDcgMTItMTIzNDU2LTMtMTMtMjM0NTYtNQorYWx3YXlzIFx1NjYyZFx1ODQ1NyAxLTE0Ni0zLTEtMzQtNQorYWx3YXlzIFx1NjY0MVx1OTMyZiAxMi0xNDYtMi0yNDUtMjUtNQorYWx3YXlzIFx1NjY0M1x1ODE2NiAxMjM1LTQ1Ni01LTEzNDUtMTQ2LTQKK2Fsd2F5cyBcdTY2NDNcdTg1NjkgMTIzNS00NTYtNS0xNDUtMTM0Ni01CithbHdheXMgXHU2Njg3XHU3ZDY2IDE1LTIzNDU2LTItMTMtMTYtNAorYWx3YXlzIFx1NjY5MVx1NTA0NyAyNC0zNC00LTEzLTIzNDU2LTUKK2Fsd2F5cyBcdTY2OTZcdTU0OGMgMTM0NS0xMjQ1Ni00LTEyMzUtMjUtMQorYWx3YXlzIFx1NjZiNFx1OTczMiAxMjM0LTM0LTUtMTQtMzQtNQorYWx3YXlzIFx1NjZmMlx1NWI1MCAyNDUtMTI1Ni00LTEyNS0xNTYtMQorYWx3YXlzIFx1NjZmMlx1NWMzYSAyNDUtMTI1Ni0zLTEyLTE1Ni00CithbHdheXMgXHU2NmYyXHU1ZWE2IDI0NS0xMjU2LTMtMTQ1LTM0LTUKK2Fsd2F5cyBcdTY2ZjJcdTYyOTggMjQ1LTEyNTYtMy0xLTIzNDYtMgorYWx3YXlzIFx1NjZmMlx1NjZmMiAyNDUtMTI1Ni0zLTI0NS0xMjU2LTMKK2Fsd2F5cyBcdTY2ZjJcdTZjODMgMjQ1LTEyNTYtMy0yNS01CithbHdheXMgXHU2NmYyXHU3NmY0IDI0NS0xMjU2LTMtMS0xNTYtMgorYWx3YXlzIFx1NjZmMlx1N2RkYSAyNDUtMTI1Ni0zLTE1LTIzNDUtNQorYWx3YXlzIFx1NjZmMlx1ODllMyAyNDUtMTI1Ni0zLTEzLTM0Ni00CithbHdheXMgXHU2NmYyXHU5NjFjIDI0NS0xMjU2LTMtMTIzNDUtMzQtNQorYWx3YXlzIFx1NjZmNFx1NGU4YiAxMy0xMzU2LTMtMjQtMTU2LTUKK2Fsd2F5cyBcdTY2ZjRcdTUyZDUgMTMtMTM1Ni0zLTE0NS0xMjM0Ni01CithbHdheXMgXHU2NmY0XHU1NDBkIDEzLTEzNTYtMy0xMzQtMTM0NTYtMgorYWx3YXlzIFx1NjZmNFx1NWYzNSAxMy0xMzU2LTMtMS0xMzQ2LTMKK2Fsd2F5cyBcdTY2ZjRcdTVmOTcgMTMtMTM1Ni01LTE0NS0zNTYtNAorYWx3YXlzIFx1NjZmNFx1NjNkYiAxMy0xMzU2LTMtMTIzNS0xMjQ1Ni01CithbHdheXMgXHU2NmY0XHU2NTM5IDEzLTEzNTYtMy0xMy0yNDU2LTQKK2Fsd2F5cyBcdTY2ZjRcdTY1YjAgMTMtMTM1Ni0zLTE1LTE0NTYtMworYWx3YXlzIFx1NjZmNFx1NjYxMyAxMy0xMzU2LTMtMTYtNQorYWx3YXlzIFx1NjZmNFx1NjZmZiAxMy0xMzU2LTMtMTI0LTE2LTUKK2Fsd2F5cyBcdTY2ZjRcdTZiNjMgMTMtMTM1Ni0zLTEtMTM1Ni01CithbHdheXMgXHU2NmY0XHU3NTFmIDEzLTEzNTYtMy0yNC0xMzU2LTMKK2Fsd2F5cyBcdTY2ZjRcdTg2NWYgMTMtMTM1Ni0zLTEyMzUtMTQ2LTUKK2Fsd2F5cyBcdTY2ZjRcdTg4NjMgMTMtMTM1Ni0zLTE2LTMKK2Fsd2F5cyBcdTY2ZjRcdThmZWQgMTMtMTM1Ni0zLTE0NS0zNDYtMgorYWx3YXlzIFx1NjZmOFx1NTM3NyAyNC0zNC0zLTEzLTQ1LTUKK2Fsd2F5cyBcdTY2ZjlcdTUzYzMgMjQ1LTE0Ni0yLTI0LTEzNi0zCithbHdheXMgXHU2NmZlXHU1M2MzIDEyNS0xMzU2LTMtMjQtMTM2LTMKK2Fsd2F5cyBcdTY2ZmVcdTViNTAgMTI1LTEzNTYtMy0xMjUtMTU2LTQKK2Fsd2F5cyBcdTY2ZmVcdTViNmIgMTI1LTEzNTYtMy0xNS0xMjM0NTYtMworYWx3YXlzIFx1NjZmZVx1NmMwZiAxMjUtMTM1Ni0zLTI0LTE1Ni01CithbHdheXMgXHU2NmZlXHU3OTU2IDEyNS0xMzU2LTMtMTI1LTM0LTQKK2Fsd2F5cyBcdTY2ZmVcdTk3OGYgMTI1LTEzNTYtMy0xMy0xMjM0Ni00CithbHdheXMgXHU2NzAzXHU1MTUyIDEyMzUtMTI0Ni00LTE1Ni0zCithbHdheXMgXHU2NzAzXHU3YTNkIDEzLTEyNDYtNS0xMy0xNi0zCithbHdheXMgXHU2NzAzXHU4YTA4IDEyMy0yMzU2LTUtMTMtMTYtNQorYWx3YXlzIFx1NjcwM1x1OTU3NyAxMjM1LTEyNDYtNS0xLTEzNDYtNAorYWx3YXlzIFx1NjcwOFx1NWI1MCAyMzYtNS0xMjUtMTU2LTEKK2Fsd2F5cyBcdTY3MDhcdTY2ODggMjM2LTUtMjU2LTUKK2Fsd2F5cyBcdTY3MDhcdTdkMmYgMjM2LTUtMTQtMzU2LTQKK2Fsd2F5cyBcdTY3MDlcdTUyMDYgMjM0LTQtMTIzNDUtMTM2LTUKK2Fsd2F5cyBcdTY3MDlcdTY3MWQgMjM0LTQtMS0xNDYtMworYWx3YXlzIFx1NjcwZFx1NWUxNiAxMjM0NS0zNC0yLTEyNC0zNDYtMworYWx3YXlzIFx1NjcxZFx1NGUwOSAxLTE0Ni0zLTE1LTEyMzYtMworYWx3YXlzIFx1NjcxZFx1NGUwZCAxLTE0Ni0zLTEzNS0zNC01CithbHdheXMgXHU2NzFkXHU0ZWU0IDEtMTQ2LTMtMTQtMTM0NTYtNQorYWx3YXlzIFx1NjcxZFx1NTkxNSAxLTE0Ni0zLTE1LTE2LTUKK2Fsd2F5cyBcdTY3MWRcdTY2ZTYgMS0xNDYtMy0xNS0xNi0zCithbHdheXMgXHU2NzFkXHU2NzAzIDEtMTQ2LTMtMTIzNS0xMjQ2LTUKK2Fsd2F5cyBcdTY3MWRcdTY3MWQgMS0xNDYtMy0xLTE0Ni0zCithbHdheXMgXHU2NzFkXHU2YzIzIDEtMTQ2LTMtMjQ1LTE2LTUKK2Fsd2F5cyBcdTY3MWRcdTc2N2MgMS0xNDYtMy0xMjM0NS0zNDUtMworYWx3YXlzIFx1NjcxZFx1NzllNiAxLTE0Ni0zLTI0NS0xNDU2LTIKK2Fsd2F5cyBcdTY3MWRcdTk2N2QgMS0xNDYtMy00Ni0yCithbHdheXMgXHU2NzFkXHU5NzMyIDEtMTQ2LTMtMTQtMzQtNQorYWx3YXlzIFx1NjcxZlx1NWU3NCAxMy0xNi0zLTEzNDUtMjM0NS0yCithbHdheXMgXHU2NzFmXHU2NzA4IDEzLTE2LTMtMjM2LTUKK2Fsd2F5cyBcdTY3MWZcdTY3MGQgMTMtMTYtMy0xMjM0NS0zNC0yCithbHdheXMgXHU2NzI4XHU1ODVlIDEzNC0zNC01LTE1LTI0NTYtMworYWx3YXlzIFx1NjcyYVx1NGU4NiAxMjQ2LTUtMTQtMjQ2LTQKK2Fsd2F5cyBcdTY3MmJcdTRlODYgMTM0LTEyNi01LTE0LTI0Ni00CithbHdheXMgXHU2NzJjXHU1MjA2IDEzNS0xMzYtNC0xMjM0NS0xMzYtNQorYWx3YXlzIFx1NjcyY1x1NWI1MCAxMzUtMTM2LTQtMTI1LTE1Ni0xCithbHdheXMgXHU2NzJjXHU4ODRjIDEzNS0xMzYtNC0xMjM1LTEzNDYtMgorYWx3YXlzIFx1Njc0ZVx1NWI1MCAxNC0xNi00LTEyNS0xNTYtMQorYWx3YXlzIFx1Njc1MVx1NWI1MCAyNDUtMTIzNDU2LTMtMTI1LTE1Ni0xCithbHdheXMgXHU2NzUxXHU5NTc3IDI0NS0xMjM0NTYtMy0xLTEzNDYtNAorYWx3YXlzIFx1Njc2Zlx1NWI1MCAxMzUtMzU2LTMtMTI1LTE1Ni0xCithbHdheXMgXHU2NzdlXHU2ZmU0IDE1LTEyMzQ2LTMtMTI0LTE0Ni0zCithbHdheXMgXHU2NzljXHU1YjUwIDEzLTI1LTQtMTI1LTE1Ni0xCithbHdheXMgXHU2N2FmXHU4NDBlIDEyMy0zNC0zLTEyNDYtMworYWx3YXlzIFx1NjdiNlx1NWI1MCAxMy0yMzQ1Ni01LTEyNS0xNTYtMQorYWx3YXlzIFx1NjdkYVx1NWI1MCAyMzQtNS0xMjUtMTU2LTEKK2Fsd2F5cyBcdTY3ZTVcdTUyZDggMTItMzQ1LTItMTIzLTEyMzYtNQorYWx3YXlzIFx1NjdmMVx1NWI1MCAxLTM0LTUtMTI1LTE1Ni0xCithbHdheXMgXHU2N2ZhXHU1YjUwIDEzLTIzNTYtNC0xMjUtMTU2LTEKK2Fsd2F5cyBcdTY3ZmZcdTViNTAgMjQtMTU2LTUtMTI1LTE1Ni0xCithbHdheXMgXHU2ODEzXHU1ODVlIDI0LTEyNDU2LTMtMTUtMjQ1Ni0zCithbHdheXMgXHU2ODEzXHU1YjUwIDI0LTEyNDU2LTMtMTI1LTE1Ni0xCithbHdheXMgXHU2ODIxXHU1MmQ4IDEzLTI0Ni01LTEyMy0xMjM2LTMKK2Fsd2F5cyBcdTY4MjFcdTVjMGQgMTMtMjQ2LTUtMTQ1LTEyNDYtNQorYWx3YXlzIFx1NjgyMVx1NmI2MyAxMy0yNDYtNS0xLTEzNTYtNQorYWx3YXlzIFx1NjgyMVx1NmU5NiAxMy0yNDYtNS0xLTEyMzQ1Ni00CithbHdheXMgXHU2ODIxXHU4YTAyIDEzLTI0Ni01LTE0NS0xMzQ1Ni01CithbHdheXMgXHU2ODIxXHU5NTc3IDE1LTI0Ni01LTEtMTM0Ni00CithbHdheXMgXHU2ODIxXHU5NWIxIDEzLTI0Ni01LTIzNi01CithbHdheXMgXHU2ODNjXHU1YjUwIDEzLTIzNDYtMi0xMjUtMTU2LTEKK2Fsd2F5cyBcdTY4M2RcdTdhMmUgMTI1LTI0NTYtMy0xLTEyMzQ2LTUKK2Fsd2F5cyBcdTY4NDNcdTViNTAgMTI0LTE0Ni0yLTEyNS0xNTYtMQorYWx3YXlzIFx1Njg0Nlx1NWI1MCAxMjMtNDU2LTMtMTI1LTE1Ni0xCithbHdheXMgXHU2ODQ4XHU1Mzc3IDEyMzYtNS0xMy00NS01CithbHdheXMgXHU2ODQ4XHU1YjUwIDEyMzYtNS0xMjUtMTU2LTEKK2Fsd2F5cyBcdTY4NGNcdTViNTAgMS0yNS0zLTEyNS0xNTYtMQorYWx3YXlzIFx1Njg3Nlx1NWI1MCAxMjQtMTIzNDYtNC0xMjUtMTU2LTEKK2Fsd2F5cyBcdTY4N2ZcdTViNTAgMTMtMTIzNi00LTEyNS0xNTYtMQorYWx3YXlzIFx1Njg4NVx1NWI1MCAxMzQtMzU2LTItMTI1LTE1Ni0xCithbHdheXMgXHU2ODg2XHU1YjUwIDEzNS0xMzQ2LTMtMTI1LTE1Ni0xCithbHdheXMgXHU2ODk3XHU1ODVlIDEzLTEzNTYtNC0xNS0yMzQ2LTUKK2Fsd2F5cyBcdTY4OWRcdTViNTAgMTI0LTI0Ni0yLTEyNS0xNTYtMQorYWx3YXlzIFx1NjhhZlx1NWI1MCAxMjQtMTYtMy0xMjUtMTU2LTEKK2Fsd2F5cyBcdTY4YjNcdTViNTAgMjQtMzQtMy0xMjUtMTU2LTEKK2Fsd2F5cyBcdTY4Y2RcdTViNTAgMTMtMTIzNDU2LTUtMTI1LTE1Ni0xCithbHdheXMgXHU2OGQyXHU1NTlkIDEzNS0xMzQ2LTUtMTIzNS0yMzQ2LTUKK2Fsd2F5cyBcdTY4ZDJcdTViNTAgMTM1LTEzNDYtNS0xMjUtMTU2LTEKK2Fsd2F5cyBcdTY4ZGFcdTViNTAgMTIzNC0xMzU2LTItMTI1LTE1Ni0xCithbHdheXMgXHU2OTA1XHU1YjUwIDE2LTQtMTI1LTE1Ni0xCithbHdheXMgXHU2OTMwXHU1YjUwIDM0Ni0yLTEyNS0xNTYtMQorYWx3YXlzIFx1Njk1NFx1NWI1MCAxNS0zNDYtNS0xMjUtMTU2LTEKK2Fsd2F5cyBcdTY5ZDNcdTViNTAgMTMtMTM0Ni01LTEyNS0xNTYtMQorYWx3YXlzIFx1NmEwMlx1NTI4NyAyMzYtNS0xMy0xMjU2LTUKK2Fsd2F5cyBcdTZhMDJcdTU2NjggMjM2LTUtMjQ1LTE2LTUKK2Fsd2F5cyBcdTZhMDJcdTU3MTggMjM2LTUtMTI0LTEyNDU2LTIKK2Fsd2F5cyBcdTZhMDJcdTU4YzcgMjM2LTUtMTI0LTEyMzYtMgorYWx3YXlzIFx1NmEwMlx1NWI5OCAyMzYtNS0xMy0xMjQ1Ni0zCithbHdheXMgXHU2YTAyXHU1ZTJiIDIzNi01LTI0LTE1Ni0zCithbHdheXMgXHU2YTAyXHU1ZTljIDIzNi01LTEyMzQ1LTM0LTQKK2Fsd2F5cyBcdTZhMDJcdTYyNGIgMjM2LTUtMjQtMTIzNTYtNAorYWx3YXlzIFx1NmEwMlx1NjZmMiAyMzYtNS0yNDUtMTI1Ni00CithbHdheXMgXHU2YTAyXHU2YmI1IDIzNi01LTE0NS0xMjQ1Ni01CithbHdheXMgXHU2YTAyXHU2YzM0IDI0Ni01LTI0LTEyNDYtNAorYWx3YXlzIFx1NmEwMlx1NmQzZSAyMzYtNS0xMjM0LTI0NTYtNQorYWx3YXlzIFx1NmEwMlx1NzQwNiAyMzYtNS0xNC0xNi00CithbHdheXMgXHU2YTAyXHU3YWUwIDIzNi01LTEtMTM0Ni0zCithbHdheXMgXHU2YTAyXHU3YzRkIDIzNi01LTEzLTE2LTIKK2Fsd2F5cyBcdTZhMDJcdThiNWMgMjM2LTUtMTIzNC0zNC00CithbHdheXMgXHU2YTAyXHU4ZmY3IDIzNi01LTEzNC0xNi0yCithbHdheXMgXHU2YTAyXHU5NjhhIDIzNi01LTE0NS0xMjQ2LTUKK2Fsd2F5cyBcdTZhMDJcdTk3ZjMgMjM2LTUtMTQ1Ni0zCithbHdheXMgXHU2YTAyXHU5OGE4IDIzNi01LTEyMzQ1LTEzNTYtMworYWx3YXlzIFx1NmExM1x1NWI1MCAxNC0xMjM1Ni0yLTEyNS0xNTYtMQorYWx3YXlzIFx1NmEyMVx1NWI1MCAxMzQtMTI2LTItMTI1LTE1Ni0xCithbHdheXMgXHU2YTIxXHU2YTIzIDEzNC0zNC0yLTQ2LTUKK2Fsd2F5cyBcdTZhMjNcdTViNTAgNDYtNS0xMjUtMTU2LTEKK2Fsd2F5cyBcdTZhNThcdTViNTAgMTMtMTI1Ni0yLTEyNS0xNTYtMQorYWx3YXlzIFx1NmE2Ylx1NjZiNCAxMjM1LTEzNTYtNS0xMzUtMTQ2LTUKK2Fsd2F5cyBcdTZhNmJcdTZiN2IgMTIzNS0xMzU2LTUtMTUtMTU2LTQKK2Fsd2F5cyBcdTZhNmJcdTc5OGQgMTIzNS0xMzU2LTUtMTIzNS0yNS01CithbHdheXMgXHU2YTZiXHU4MDg5IDEyMzUtMTM1Ni01LTEyNDUtMTIzNTYtNQorYWx3YXlzIFx1NmE2Ylx1ODg0YyAxMjM1LTEzNTYtNS0xNS0xMzQ1Ni0yCithbHdheXMgXHU2YTZiXHU4Y2ExIDEyMzUtMTM1Ni01LTI0NS0yNDU2LTIKK2Fsd2F5cyBcdTZhYzNcdTViNTAgMTMtMTI0Ni01LTEyNS0xNTYtMQorYWx3YXlzIFx1NmFkYlx1NmJkNCAxMy0zNDYtMi0xMzUtMTYtNQorYWx3YXlzIFx1NmIyMVx1OTU3NyAyNDUtMTU2LTUtMS0xMzQ2LTQKK2Fsd2F5cyBcdTZiMjNcdTdmYTEgMTUtMTQ1Ni0zLTE1LTIzNDUtNQorYWx3YXlzIFx1NmIzOFx1NGU0MyAyNDU2LTQtMTM0NS0yNDU2LTQKK2Fsd2F5cyBcdTZiM2RcdTVkZWUgMjQ1LTE0NTYtMy0xMi0yNDU2LTMKK2Fsd2F5cyBcdTZiM2VcdTViNTAgMTIzLTEyNDU2LTQtMTI1LTE1Ni0xCithbHdheXMgXHU2YjY1XHU1YjUwIDEzNS0zNC01LTEyNS0xNTYtMQorYWx3YXlzIFx1NmI2Nlx1NWMwNyAzNC00LTEzLTQ2LTUKK2Fsd2F5cyBcdTZiNmFcdTY2ZjIgMjM1Ni0zLTI0NS0xMjU2LTMKK2Fsd2F5cyBcdTZiNzhcdTkwODQgMTMtMTI0Ni0zLTEyMzUtMTI0NTYtMgorYWx3YXlzIFx1NmI3OFx1OTY0ZCAxMy0xMjQ2LTMtMTUtNDYtMgorYWx3YXlzIFx1NmI3Ylx1NzU3NiAxNS0xNTYtNC0xNDUtMTM0Ni01CithbHdheXMgXHU2YjdiXHU5NmUzIDE1LTE1Ni00LTEzNDUtMTIzNi01CithbHdheXMgXHU2Yjg5XHU5NmUzIDE1LTI1Ni01LTEzNDUtMTIzNi01CithbHdheXMgXHU2YjllXHU2YzkyIDI1Ni00LTEzNC0xMjYtNQorYWx3YXlzIFx1NmJiYVx1NGYxMCAyNC0zNDUtMy0xMjM0NS0zNDUtMworYWx3YXlzIFx1NmJiY1x1NWI1MCAxMjMtMjM0Ni0yLTEyNS0xNTYtMQorYWx3YXlzIFx1NmJjZlx1ODg0YyAxMzQtMzU2LTQtMTIzNS0xMzQ2LTIKK2Fsd2F5cyBcdTZiZDRcdTUzY2EgMTM1LTE2LTUtMTMtMTYtMgorYWx3YXlzIFx1NmJkNFx1NmJkNCAxMzUtMTYtNS0xMzUtMTYtNQorYWx3YXlzIFx1NmJkNFx1ODBhOSAxMzUtMTYtNS0xMy0yMzQ1LTMKK2Fsd2F5cyBcdTZiZDRcdTkxMzAgMTM1LTE2LTUtMTQtMTQ1Ni0yCithbHdheXMgXHU2YmVmXHU1YjUwIDEyNC0xMjM2LTQtMTI1LTE1Ni0xCithbHdheXMgXHU2YmZkXHU1YjUwIDEzLTIzNDUtNS0xMjUtMTU2LTEKK2Fsd2F5cyBcdTZjMDhcdTViNTAgMS0xMjM2LTMtMTI1LTE1Ni0xCithbHdheXMgXHU2YzM0XHU1MjA2IDI0LTEyNDYtNC0xMjM0NS0xMzYtNQorYWx3YXlzIFx1NmM1N1x1NGY0ZCAxMjM1LTEyMzYtMi0xMjQ2LTUKK2Fsd2F5cyBcdTZjNTdcdTU3MGIgMTIzNS0xMjM2LTItMTMtMjUtMgorYWx3YXlzIFx1NmM1N1x1NzM4YiAxMjM1LTEyMzYtMi00NTYtMgorYWx3YXlzIFx1NmM1Zlx1OTBmZCAxMy00Ni0zLTE0NS0zNC0zCithbHdheXMgXHU2YzYwXHU1YjUwIDEyLTE1Ni0yLTEyNS0xNTYtMQorYWx3YXlzIFx1NmM4OFx1NjJlYyAyNC0xMzYtNC0xMy0zNS0zCithbHdheXMgXHU2Yzg4XHU2YzkyIDEyLTEzNi0yLTEzNC0xMjYtNQorYWx3YXlzIFx1NmM4OFx1ODQ1NyAxMi0xMzYtMi0xLTI1LTIKK2Fsd2F5cyBcdTZjOGZcdTgzMzYgMjQ1LTE2LTUtMTItMzQ1LTIKK2Fsd2F5cyBcdTZjOTJcdTRlMTYgMTM0LTEyNi01LTI0LTE1Ni01CithbHdheXMgXHU2YzkyXHU1MTY1IDEzNC0xMjYtNS0xMjQ1LTM0LTUKK2Fsd2F5cyBcdTZjOTJcdTY1MzYgMTM0LTEyNi01LTI0LTEyMzU2LTMKK2Fsd2F5cyBcdTZjOTJcdTZjOTIgMTM0LTEyNi01LTEzNC0xMjYtNQorYWx3YXlzIFx1NmM5Mlx1ODQzZCAxMzQtMTI2LTUtMTQtMjUtNQorYWx3YXlzIFx1NmM5Mlx1ODVlNSAxMzQtMTI2LTUtMjQ2LTUKK2Fsd2F5cyBcdTZjOTJcdTk4MDIgMTM0LTEyNi01LTE0NS0xMzQ1Ni00CithbHdheXMgXHU2YzkyXHU5OGYyIDEzNC0xMjYtNS0xNDU2LTQKK2Fsd2F5cyBcdTZjOTJcdTlmNTIgMTM0LTEyNi01LTEyLTE1Ni00CithbHdheXMgXHU2Yzk5XHU1YjUwIDI0LTM0NS0zLTEyNS0xNTYtMQorYWx3YXlzIFx1NmNkNVx1NTcwYiAxMjM0NS0zNDUtNS0xMy0yNS0yCithbHdheXMgXHU2Y2Q1XHU1YjUwIDEyMzQ1LTM0NS0yLTEyNS0xNTYtMQorYWx3YXlzIFx1NmNkNVx1NzZmOCAxMjM0NS0zNDUtNC0xNS00Ni01CithbHdheXMgXHU2Y2Q1XHU4NjJkIDEyMzQ1LTM0NS01LTE0LTEyMzYtMgorYWx3YXlzIFx1NmNkNVx1OGE5ZSAxMjM0NS0zNDUtNS0xMjU2LTQKK2Fsd2F5cyBcdTZjZWZcdTZjOTIgMTM0LTE0NTYtNC0xMzQtMTI2LTUKK2Fsd2F5cyBcdTZkMGJcdTc2ZjggNDYtMi0xNS00Ni01CithbHdheXMgXHU2ZDBiXHU4ODRjIDQ2LTItMTIzNS0xMzQ2LTIKK2Fsd2F5cyBcdTZkM2JcdTU4NWUgMTIzNS0yNS0yLTE1LTI0NTYtMworYWx3YXlzIFx1NmQ3N1x1NTNjMyAxMjM1LTI0NTYtNC0yNC0xMzYtMworYWx3YXlzIFx1NmQ3N1x1OTZlMyAxMjM1LTI0NTYtNC0xMzQ1LTEyMzYtNQorYWx3YXlzIFx1NmQ4OFx1OTU3NyAxNS0yNDYtMy0xLTEzNDYtNAorYWx3YXlzIFx1NmRkNlx1N2QwNCAxMi0yNS01LTIzNi0zCithbHdheXMgXHU2ZGU0XHU1ODVlIDEyNTYtMy0xNS0yMzQ2LTUKK2Fsd2F5cyBcdTZkZjFcdTYwZTEgMjQtMTM2LTMtMzQtNQorYWx3YXlzIFx1NmRmMVx1NjZmNCAyNC0xMzYtMy0xMy0xMzQ1Ni0zCithbHdheXMgXHU2ZGYxXHU3NzAxIDI0LTEzNi0zLTE1LTEzNDU2LTQKK2Fsd2F5cyBcdTZkZjdcdTRlODIgMTIzNS0xMjM0NTYtNC0xNC0xMjQ1Ni01CithbHdheXMgXHU2ZGY3XHU2YzM0IDEyMzUtMTIzNDU2LTItMjQtMTI0Ni00CithbHdheXMgXHU2ZGY3XHU2ZGM2IDEyMzUtMTIzNDU2LTQtMjQ2LTIKK2Fsd2F5cyBcdTZkZjdcdTZmYzEgMTIzNS0xMjM0NTYtMi0xLTI1LTIKK2Fsd2F5cyBcdTZkZjlcdTZjOTIgMjM0NS0zLTEzNC0xMjYtNQorYWx3YXlzIFx1NmUyMVx1NTA0NyAxNDUtMzQtNS0xMy0yMzQ1Ni01CithbHdheXMgXHU2ZTIzXHU1YjUwIDEtMzQ1LTMtMTI1LTE1Ni0xCithbHdheXMgXHU2ZTJjXHU1ZWE2IDI0NS0yMzQ2LTUtMTQ1LTI1LTUKK2Fsd2F5cyBcdTZlMmNcdTkxY2YgMjQ1LTIzNDYtNS0xNC00Ni0yCithbHdheXMgXHU2ZTM4XHU4YWFhIDIzNC0yLTI0LTEyNDYtNQorYWx3YXlzIFx1NmU2ZVx1NmM5MiAyMzQ1LTMtMTM0LTEyNi01CithbHdheXMgXHU2ZTZlXHU2ZWM1IDE0NTYtMy0xMzQtMzQ2LTUKK2Fsd2F5cyBcdTZlNmZcdTZlNmYgMjQtMTM0Ni0zLTI0LTEzNDYtMworYWx3YXlzIFx1NmVjYlx1OTU3NyAxMjUtMTU2LTMtMS0xMzQ2LTQKK2Fsd2F5cyBcdTZlZDFcdTdhM2QgMTMtMzQtNC0xMy0xNi0zCithbHdheXMgXHU2ZWY0XHU3YjU0IDE0NS0xNi0zLTE0NS0zNDUtMworYWx3YXlzIFx1NmYwMlx1NGVhZSAxMjM0LTI0Ni01LTE0LTQ2LTUKK2Fsd2F5cyBcdTZmMDJcdTc2N2QgMTIzNC0yNDYtNC0xMzUtMjQ1Ni0yCithbHdheXMgXHU2ZjBmXHU1YjUwIDE0LTEyMzU2LTUtMTI1LTE1Ni0xCithbHdheXMgXHU2ZjE1XHU5MDRiIDI0NS0xNDYtMi0yNTYtNQorYWx3YXlzIFx1NmYyYlx1NTkyOSAxMzQtMTIzNi0yLTEyNC0yMzQ1LTMKK2Fsd2F5cyBcdTZmOGVcdTZlNDMgMTIzNC0xMzU2LTMtMTIzNC0yNDU2LTUKK2Fsd2F5cyBcdTZmYzBcdTVjMDcgMTMtMTYtMy0xMy00Ni01CithbHdheXMgXHU2ZmRmXHU1MzU3IDEzLTE2LTQtMTM0NS0xMjM2LTIKK2Fsd2F5cyBcdTcwN2RcdTk2ZTMgMTI1LTI0NTYtMy0xMzQ1LTEyMzYtNQorYWx3YXlzIFx1NzBhZVx1ODhmZCAxMjM0LTE0Ni0yLTEtMTU2LTUKK2Fsd2F5cyBcdTcwYjhcdTkxYWMgMS0zNDUtMi0xMy00Ni01CithbHdheXMgXHU3MGJhXHU0ZTg2IDEyNDYtNS0xNC0yMzQ2LTEKK2Fsd2F5cyBcdTcwYmFcdTRlYzAgMTI0Ni01LTI0LTIzNDYtMgorYWx3YXlzIFx1NzBiYVx1NGVkNiAxMjQ2LTUtMTI0LTM0NS0zCithbHdheXMgXHU3MGJhXHU0ZjU1IDEyNDYtNS0xMjM1LTIzNDYtMgorYWx3YXlzIFx1NzBiYVx1NGY2MCAxMjQ2LTUtMTM0NS0xNi00CithbHdheXMgXHU3MGJhXHU1NzBiIDEyNDYtNS0xMy0yNS0yCithbHdheXMgXHU3MGJhXHU1OTc5IDEyNDYtNS0xMjQtMzQ1LTMKK2Fsd2F5cyBcdTcwYmFcdTU5YjMgMTI0Ni01LTEzNDUtMTYtNAorYWx3YXlzIFx1NzBiYVx1NjBhOCAxMjQ2LTUtMTM0NS0xNDU2LTIKK2Fsd2F5cyBcdTcwYmFcdTZjMTEgMTI0Ni01LTEzNC0xNDU2LTIKK2Fsd2F5cyBcdTcwYmFcdTg2NGUgMTI0Ni01LTEyMzUtMzQtNAorYWx3YXlzIFx1NzBkOVx1NTM3MCAxNC0xNDYtNS0xNDU2LTUKK2Fsd2F5cyBcdTcwZDlcdTk0MzUgMTQtMTQ2LTUtMTI0LTM0Ni00CithbHdheXMgXHU3MGQ5XHU5OTA1IDE0LTE0Ni01LTEzNS0xMzQ1Ni00CithbHdheXMgXHU3MGY5XHU4YWJmIDEyMzQtMTM1Ni0zLTEyNC0yNDYtMgorYWx3YXlzIFx1NzEwYVx1NjNhNSAxMjM1LTEyMzYtNS0xMy0zNDYtMworYWx3YXlzIFx1NzEwYVx1Njg5ZCAxMjM1LTEyMzYtNS0xMjQtMjQ2LTIKK2Fsd2F5cyBcdTcxMjFcdTc2ODQgMzQtMi0xNDUtMTYtNQorYWx3YXlzIFx1NzEyMVx1N2UyYiAzNC0yLTEyMzQ1LTEzNTYtNQorYWx3YXlzIFx1NzEyNlx1NmZkZiAxMy0yNDYtMy0xLTE1Ni00CithbHdheXMgXHU3MTVlXHU0ZjRmIDI0LTM0NS0zLTEtMzQtNQorYWx3YXlzIFx1NzE1ZVx1OGVjYSAyNC0zNDUtMy0xMi0yMzQ2LTMKK2Fsd2F5cyBcdTcxNjdcdTYxYzkgMS0xNDYtNS0xMzQ1Ni01CithbHdheXMgXHU3MTY3XHU3NmY4IDEtMTQ2LTUtMTUtNDYtNQorYWx3YXlzIFx1NzFjZVx1NTM5ZiAxNC0yNDYtNS00NS0yCithbHdheXMgXHU3MWQ1XHU0ZWFjIDIzNDUtMy0xMy0xMzQ1Ni0zCithbHdheXMgXHU3MWQ1XHU1YjUwIDIzNDUtNS0xMjUtMTU2LTEKK2Fsd2F5cyBcdTcxZGZcdTk1NzcgMTM0NTYtMi0xLTEzNDYtNAorYWx3YXlzIFx1NzIxMFx1NWI1MCAxNC0zNC0yLTEyNS0xNTYtMQorYWx3YXlzIFx1NzIyYVx1NWI1MCAxLTM1LTQtMTI1LTE1Ni0xCithbHdheXMgXHU3MjJhXHU3MjU5IDEtMTQ2LTQtMjM0NTYtMgorYWx3YXlzIFx1NzI0N1x1NWI1MCAxMjM0LTIzNDUtNS0xMjUtMTU2LTEKK2Fsd2F5cyBcdTcyNGNcdTViNTAgMTIzNC0yNDU2LTItMTI1LTE1Ni0xCithbHdheXMgXHU3MjViXHU0ZWQ0IDEzNDUtMjM0LTItMTI1LTI0NTYtNAorYWx3YXlzIFx1NzI5Mlx1NTJkZSAxMjMtMTQ2LTUtMTQtMTQ2LTUKK2Fsd2F5cyBcdTcyOWJcdTcyNWIgMTM0LTE0Ni0yLTEzNDUtMjM0LTIKK2Fsd2F5cyBcdTcyYWZcdTk2ZTMgMTIzNDUtMTIzNi01LTEzNDUtMTIzNi01CithbHdheXMgXHU3MmMwXHU1YjUwIDEtNDU2LTUtMTI1LTE1Ni0xCithbHdheXMgXHU3MmQ3XHU0ZWQ0IDEzLTEyMzU2LTQtMTI1LTI0NTYtNAorYWx3YXlzIFx1NzJlOVx1NzM3NSAyNC0xMjM1Ni01LTE0LTM0Ni01CithbHdheXMgXHU3MmZjXHU4NWM5IDE0LTEzNDYtMi0xMy0xNi0yCithbHdheXMgXHU3MmZjXHU4NjVmIDE0LTEzNDYtMi0xMjM1LTE0Ni0yCithbHdheXMgXHU3MzFiXHU1YzA3IDEzNC0xMzU2LTQtMTMtNDYtNQorYWx3YXlzIFx1NzMxY1x1NWVhNiAyNDUtMjQ1Ni0zLTE0NS0yNS01CithbHdheXMgXHU3MzM0XHU1YjUwIDEyMzUtMTIzNTYtMi0xMjUtMTU2LTEKK2Fsd2F5cyBcdTczNDNcdTViNTAgMTQ1LTI0NTYtMy0xMjUtMTU2LTEKK2Fsd2F5cyBcdTczNDVcdTViNTAgMjQtMTU2LTMtMTI1LTE1Ni0xCithbHdheXMgXHU3MzY4XHU4NjU1IDE0NS0zNC0yLTEyLTM0LTQKK2Fsd2F5cyBcdTczODdcdTUxNDggMjQtMjM1Ni01LTE1LTIzNDUtMworYWx3YXlzIFx1NzM4N1x1NTE3NSAyNC0yMzU2LTUtMTM1LTEzNDU2LTMKK2Fsd2F5cyBcdTczODdcdTU0MGMgMjQtMjM1Ni01LTEyNC0xMjM0Ni0yCithbHdheXMgXHU3Mzg3XHU1NzE4IDI0LTIzNTYtNS0xMjQtMTI0NTYtMgorYWx3YXlzIFx1NzM4N1x1NWUyYiAyNC0yMzU2LTUtMjQtMTU2LTMKK2Fsd2F5cyBcdTczODdcdTYwMjcgMjQtMjM1Ni01LTE1LTEzNDU2LTUKK2Fsd2F5cyBcdTczODdcdTYxMGYgMjQtMjM1Ni01LTE2LTUKK2Fsd2F5cyBcdTczODdcdTcxMzYgMjQtMjM1Ni01LTEyNDUtMTIzNi0yCithbHdheXMgXHU3Mzg3XHU3NmY0IDI0LTIzNTYtNS0xLTE1Ni0yCithbHdheXMgXHU3Mzg3XHU3NzFmIDI0LTIzNTYtNS0xLTEzNi0zCithbHdheXMgXHU3Mzg3XHU3NzNlIDI0LTIzNTYtNS0xLTEyMzQ2LTUKK2Fsd2F5cyBcdTczODdcdThlY2QgMjQtMjM1Ni01LTEzLTI1Ni0zCithbHdheXMgXHU3Mzg3XHU5ODE4IDI0LTIzNTYtNS0xNC0xMzQ1Ni00CithbHdheXMgXHU3MzhiXHU1MWEwIDQ1Ni0yLTEzLTEyNDU2LTMKK2Fsd2F5cyBcdTczOGJcdTkwZmQgNDU2LTItMTQ1LTM0LTMKK2Fsd2F5cyBcdTczYTlcdTU0NzMgMTI0NTYtNS0xMjQ2LTUKK2Fsd2F5cyBcdTczYTlcdTVmZmQgMTI0NTYtNS0xMjM1LTM0LTMKK2Fsd2F5cyBcdTczZTBcdTViNTAgMS0zNC0zLTEyNS0xNTYtMQorYWx3YXlzIFx1NzNlZFx1NWI1MCAxMzUtMTIzNi0zLTEyNS0xNTYtMQorYWx3YXlzIFx1NzNlZFx1OTU3NyAxMzUtMTIzNi0zLTEtMTM0Ni00CithbHdheXMgXHU3NDA1XHU5MGFhIDE0LTEzNDYtMi0zNDYtMgorYWx3YXlzIFx1NzQzYVx1NzQ2ZiAxMjM0NS0zNDUtNS0xNC0xMjM2LTIKK2Fsd2F5cyBcdTc0NWNcdTRmM2QgMTI1Ni0yLTEzLTIzNDU2LTMKK2Fsd2F5cyBcdTc0NWZcdTdlMmUgMTUtMjM0Ni01LTE1LTM0LTUKK2Fsd2F5cyBcdTc0YTdcdTkwODQgMTM1LTE2LTUtMTIzNS0xMjQ1Ni0yCithbHdheXMgXHU3NGY2XHU1ODVlIDEyMzQtMTM0NTYtMi0xNS0yNDU2LTMKK2Fsd2F5cyBcdTc0ZjZcdTViNTAgMTIzNC0xMzQ1Ni0yLTEyNS0xNTYtMQorYWx3YXlzIFx1NzUxYVx1OWViYyAyNC0yMzQ2LTItMTM0LTIzNDYtMQorYWx3YXlzIFx1NzUxZlx1OTA4NCAyNC0xMzU2LTMtMTIzNS0xMjQ1Ni0yCithbHdheXMgXHU3NTFmXHU5NTc3IDI0LTEzNTYtMy0xLTEzNDYtNAorYWx3YXlzIFx1NzUyZlx1NjIxYSAxMzQ1LTEzNDU2LTItMjQ1LTE2LTMKK2Fsd2F5cyBcdTc1NWNcdTcyNjcgMTUtMTI1Ni01LTEzNC0zNC01CithbHdheXMgXHU3NTVjXHU3NTIyIDE1LTEyNTYtNS0xMi0xMjM2LTQKK2Fsd2F5cyBcdTc1NWNcdTdhNGQgMTUtMTI1Ni01LTEzLTE2LTMKK2Fsd2F5cyBcdTc1NWNcdThiMDAgMTUtMTI1Ni01LTEzNC0xMjM1Ni0yCithbHdheXMgXHU3NTVjXHU5OTBhIDE1LTEyNTYtNS00Ni00CithbHdheXMgXHU3NTc2XHU1ZGVlIDE0NS0xMzQ2LTMtMTItMjQ1Ni0zCithbHdheXMgXHU3NTc2XHU2Mzg5IDE0NS0xMzQ2LTUtMTQ1LTI0Ni01CithbHdheXMgXHU3NTc2XHU2YTVmIDE0NS0xMzQ2LTUtMTMtMTYtMworYWx3YXlzIFx1NzU3Nlx1NzU3NiAxNDUtMTM0Ni01LTE0NS0xMzQ2LTUKK2Fsd2F5cyBcdTc1NzZcdTc5NjggMTQ1LTEzNDYtNS0xMjM0LTI0Ni01CithbHdheXMgXHU3NTc2XHU4ZWNhIDE0NS0xMzQ2LTMtMTMtMTI1Ni0zCithbHdheXMgXHU3NTc2XHU5MmVhIDE0NS0xMzQ2LTUtMTIzNC0zNC01CithbHdheXMgXHU3NTk5XHU3NjI5IDEzLTIzNDYtMy0xNDUtMzQ1LTEKK2Fsd2F5cyBcdTc1YjlcdTViNTAgMS0xMzYtNC0xMjUtMTU2LTEKK2Fsd2F5cyBcdTc1YzBcdTUwYzIgMTMtMTI1Ni0zLTE0LTEyMzU2LTIKK2Fsd2F5cyBcdTc1YzVcdTUwNDcgMTM1LTEzNDU2LTUtMTMtMjM0NTYtNQorYWx3YXlzIFx1NzVkYlx1NjBlMSAxMjQtMTIzNDYtNS0zNC01CithbHdheXMgXHU3NWYxXHU1YjUwIDEyMzQ1LTM1Ni01LTEyNS0xNTYtMQorYWx3YXlzIFx1NzYwYlx1NWI1MCAxMjM0NS0xMzU2LTMtMTI1LTE1Ni0xCithbHdheXMgXHU3NjI2XHU1MjRhIDI0LTEyMzU2LTUtMTUtMjM2LTMKK2Fsd2F5cyBcdTc2MjZcdTViNTAgMjQtMTIzNTYtNS0xMjUtMTU2LTEKK2Fsd2F5cyBcdTc2MzhcdTViNTAgMjQ1LTIzNi0yLTEyNS0xNTYtMQorYWx3YXlzIFx1NzY1Nlx1NTk3ZCAxMjM0LTE2LTQtMTIzNS0xNDYtNQorYWx3YXlzIFx1NzY2OVx1NWI1MCAxNC0yNDU2LTUtMTI1LTE1Ni0xCithbHdheXMgXHU3NjdjXHU5MDg0IDEyMzQ1LTM0NS0zLTEyMzUtMTI0NTYtMgorYWx3YXlzIFx1NzY3Y1x1OTZlMyAxMjM0NS0zNDUtMy0xMzQ1LTEyMzYtNQorYWx3YXlzIFx1NzY3ZFx1NTM3NyAxMzUtMjQ1Ni0yLTEzLTQ1LTUKK2Fsd2F5cyBcdTc2N2VcdTRlNTggMTM1LTI0NTYtNC0yNC0xMzU2LTUKK2Fsd2F5cyBcdTc2N2VcdTRlODYgMTM1LTI0NTYtNC0xNC0yNDYtNAorYWx3YXlzIFx1NzY4NFx1Nzg2ZSAxNDUtMTYtMi0yNDUtMjM2LTUKK2Fsd2F5cyBcdTc2ODdcdTUxYTAgMTIzNS00NTYtMi0xMy0xMjQ1Ni0zCithbHdheXMgXHU3NjhiXHU5Njc2IDEzLTE0Ni0zLTI0Ni0yCithbHdheXMgXHU3NmFlXHU3NmY4IDEyMzQtMTYtMi0xNS00Ni01CithbHdheXMgXHU3NmM2XHU1YjUwIDEyMzQtMTM2LTItMTI1LTE1Ni0xCithbHdheXMgXHU3NmQyXHU1YjUwIDEyMzUtMjM0Ni0yLTEyNS0xNTYtMQorYWx3YXlzIFx1NzZlNFx1NWI1MCAxMjM0LTEyMzYtMi0xMjUtMTU2LTEKK2Fsd2F5cyBcdTc2ZWVcdTc2ODQgMTM0LTM0LTUtMTQ1LTE2LTUKK2Fsd2F5cyBcdTc2ZjRcdTczODcgMS0xNTYtMi0yNC0yMzU2LTUKK2Fsd2F5cyBcdTc2ZjhcdTRmNGQgMTUtNDYtNS0xMjQ2LTUKK2Fsd2F5cyBcdTc2ZjhcdTUwNTUgMTUtNDYtMy0xMy0zNDYtMworYWx3YXlzIFx1NzZmOFx1NTcwYiAxNS00Ni01LTEzLTI1LTIKK2Fsd2F5cyBcdTc2ZjhcdTU5MmIgMTUtNDYtNS0xMjM0NS0zNC0zCithbHdheXMgXHU3NmY4XHU2MWM5IDE1LTQ2LTMtMTM0NTYtNQorYWx3YXlzIFx1NzZmOFx1NmE1ZiAxNS00Ni01LTEzLTE2LTMKK2Fsd2F5cyBcdTc2ZjhcdTcyNDcgMTUtNDYtNS0xMjM0LTIzNDUtNQorYWx3YXlzIFx1NzZmOFx1NzM4NyAxNS00Ni0zLTI0LTIzNTYtNQorYWx3YXlzIFx1NzZmOFx1N2EzMSAxNS00Ni0zLTEyLTEzNi01CithbHdheXMgXHU3NmY4XHU3YzNmIDE1LTQ2LTUtMTM1LTM0LTUKK2Fsd2F5cyBcdTc2ZjhcdTgwNzIgMTUtNDYtNS0yNC0xMzU2LTMKK2Fsd2F5cyBcdTc2ZjhcdTg2NTUgMTUtNDYtMy0xMi0zNC00CithbHdheXMgXHU3NmY4XHU4ODUzIDE1LTQ2LTUtMjQtMzQtNQorYWx3YXlzIFx1NzZmOFx1OGM4YyAxNS00Ni01LTEzNC0xNDYtNQorYWx3YXlzIFx1NzZmOFx1OTc2MiAxNS00Ni01LTEzNC0yMzQ1LTUKK2Fsd2F5cyBcdTc3MDFcdTUyMDYgMjQtMTM1Ni00LTEyMzQ1LTEzNi01CithbHdheXMgXHU3NzAxXHU1YmRmIDE1LTEzNDU2LTQtMTItMzQ1LTIKK2Fsd2F5cyBcdTc3MDFcdTYwMWQgMTUtMTM0NTYtNC0xNS0xNTYtMworYWx3YXlzIFx1NzcwMVx1NjA5ZiAxNS0xMzQ1Ni00LTM0LTUKK2Fsd2F5cyBcdTc3MDFcdTg5YWEgMTUtMTM0NTYtNC0yNDUtMTQ1Ni0zCithbHdheXMgXHU3NzAxXHU5NTc3IDI0LTEzNTYtNC0xLTEzNDYtNAorYWx3YXlzIFx1NzcwYlx1NGUyZCAxMjMtMTIzNi01LTEtMTIzNDYtNQorYWx3YXlzIFx1NzcwYlx1NWI4OCAxMjMtMTIzNi0zLTI0LTEyMzU2LTQKK2Fsd2F5cyBcdTc3MGJcdTViYjYgMTIzLTEyMzYtMy0xMy0yMzQ1Ni0zCithbHdheXMgXHU3NzBiXHU3NmY4IDEyMy0xMjM2LTUtMTUtNDYtNQorYWx3YXlzIFx1NzcwYlx1N2JhMSAxMjMtMTIzNi0zLTEzLTEyNDU2LTQKK2Fsd2F5cyBcdTc3MGJcdThiNzcgMTIzLTEyMzYtMy0xMjM1LTM0LTUKK2Fsd2F5cyBcdTc3MGJcdTk1ODAgMTIzLTEyMzYtMy0xMzQtMTM2LTIKK2Fsd2F5cyBcdTc3MWZcdTczODcgMS0xMzYtMy0yNC0yMzU2LTUKK2Fsd2F5cyBcdTc3MWZcdTc2ZjggMS0xMzYtMy0xNS00Ni01CithbHdheXMgXHU3NzM4XHU1YjUwIDEzNC0xMjM1Ni0yLTEyNS0xNTYtMQorYWx3YXlzIFx1NzczY1x1NjY4OCAyMzQ1LTQtMjU2LTUKK2Fsd2F5cyBcdTc3M2NcdTc3MzYgMjM0NS00LTEyMy00NTYtMworYWx3YXlzIFx1Nzc2MVx1ODQ1NyAyNC0xMjQ2LTUtMS0xNDYtMgorYWx3YXlzIFx1Nzc2MVx1ODliYSAyNC0xMjQ2LTUtMTMtMjQ2LTUKK2Fsd2F5cyBcdTc3NjNcdTczODcgMTQ1LTM0LTMtMjQtMjM1Ni01CithbHdheXMgXHU3NzhlXHU1YjUwIDE1LTIzNDU2LTMtMTI1LTE1Ni0xCithbHdheXMgXHU3N2FkXHU2NzFiIDE0LTI0Ni01LTQ1Ni01CithbHdheXMgXHU3N2U1XHU0ZTg2IDEtMTU2LTMtMTQtMjQ2LTQKK2Fsd2F5cyBcdTc3ZWVcdTViNTAgMjQ1Ni00LTEyNS0xNTYtMQorYWx3YXlzIFx1NzdmM1x1NWI1MCAyNC0xNTYtMi0xMjUtMTU2LTEKK2Fsd2F5cyBcdTc3ZjNcdTgxMDggMjQtMTU2LTItMTM0LTI0NTYtNQorYWx3YXlzIFx1NzgwMlx1NWI1MCAyNC0zNDUtMy0xMjUtMTU2LTEKK2Fsd2F5cyBcdTc4MGRcdTRmMTAgMTIzLTEyMzYtNC0xMjM0NS0zNDUtMworYWx3YXlzIFx1NzgzNFx1NzZmOCAxMjM0LTEyNi01LTE1LTQ2LTUKK2Fsd2F5cyBcdTc4OTFcdTVlMTYgMTM1LTM1Ni0zLTEyNC0zNDYtNQorYWx3YXlzIFx1Nzg5Zlx1NWI1MCAxNDUtMzQ2LTItMTI1LTE1Ni0xCithbHdheXMgXHU3OGJjXHU1YjUwIDEzNC0zNDUtNC0xMjUtMTU2LTEKK2Fsd2F5cyBcdTc4YzVcdTc5MjEgMTIzNC0xMzQ2LTMtMTM1LTEyNi0yCithbHdheXMgXHU3OGU4XHU5NmUzIDEzNC0xMjYtMi0xMzQ1LTEyMzYtNQorYWx3YXlzIFx1NzkyNlx1ODEwOCAxMjMtNDU2LTUtMTM0LTI0NTYtNQorYWx3YXlzIFx1NzkzZVx1OTU3NyAyNC0yMzQ2LTUtMS0xMzQ2LTQKK2Fsd2F5cyBcdTc5NTdcdTY3MDkgMS0xNTYtNC0yMzQtNAorYWx3YXlzIFx1Nzk1N1x1ODBmZCAxLTE1Ni00LTEzNDUtMTM1Ni0yCithbHdheXMgXHU3OTU3XHU4OTgxIDEtMTU2LTQtMjQ2LTUKK2Fsd2F5cyBcdTc5NWVcdTc5NDcgMjQtMTM2LTItMjQ1LTE2LTIKK2Fsd2F5cyBcdTc5NjhcdTViNTAgMTIzNC0yNDYtNS0xMjUtMTU2LTEKK2Fsd2F5cyBcdTc5ODFcdTRlMGQgMTMtMTQ1Ni0zLTEzNS0zNC01CithbHdheXMgXHU3OThmXHU3NmY4IDEyMzQ1LTM0LTItMTUtNDYtNQorYWx3YXlzIFx1NzlhYVx1OGI5MyAyNC0xMjM2LTUtMTI0NS0xMzQ2LTUKK2Fsd2F5cyBcdTc5YWVcdTZhMDIgMTQtMTYtNC0yMzYtNQorYWx3YXlzIFx1NzliZlx1NWI1MCAxMjQtMzQtMy0xMjUtMTU2LTEKK2Fsd2F5cyBcdTc5ZDFcdTk1NzcgMTIzLTIzNDYtMy0xLTEzNDYtNAorYWx3YXlzIFx1N0EzMVx1ODA3NyAxMi0xMzU2LTUtMS0xNTYtMgorYWx3YXlzIFx1N2EyZVx1NjkwZCAxLTEyMzQ2LTUtMS0xNTYtMgorYWx3YXlzIFx1N2EyZVx1NmEzOSAxLTEyMzQ2LTUtMjQtMzQtNQorYWx3YXlzIFx1N2EzMVx1NWZjMyAxMi0xMzYtNS0xNS0xNDU2LTMKK2Fsd2F5cyBcdTdhMzFcdTYxMGYgMTItMTM2LTUtMTYtNQorYWx3YXlzIFx1N2EzYlx1NWI1MCAxNDUtMTQ2LTUtMTI1LTE1Ni0xCithbHdheXMgXHU3YTNmXHU1YjUwIDEzLTE0Ni00LTEyNS0xNTYtMQorYWx3YXlzIFx1N2E0MFx1NWI1MCAxMy0zNC00LTEyNS0xNTYtMQorYWx3YXlzIFx1N2E0ZFx1N2QyZiAxMy0xNi0zLTE0LTM1Ni00CithbHdheXMgXHU3YTY5XHU3NTc2IDEyMzQ1Ni00LTE0NS0xMzQ2LTUKK2Fsd2F5cyBcdTdhN2FcdTU3MzAgMTIzLTEyMzQ2LTUtMTQ1LTE2LTUKK2Fsd2F5cyBcdTdhN2FcdTY4M2MgMTIzLTEyMzQ2LTUtMTMtMjM0Ni0yCithbHdheXMgXHU3YTdhXHU5NTkyIDEyMy0xMjM0Ni01LTE1LTIzNDUtMgorYWx3YXlzIFx1N2E3YVx1OTY5OSAxMjMtMTIzNDYtNS0xNS0xNi01CithbHdheXMgXHU3YTdhXHU5NmUzIDEyMy0xMjM0Ni0zLTEzNDUtMTIzNi01CithbHdheXMgXHU3YTdhXHU5ODRkIDEyMy0xMjM0Ni01LTIzNDYtMgorYWx3YXlzIFx1N2E3Zlx1ODQ1NyAxMi0xMjQ1Ni0zLTEtMjUtMgorYWx3YXlzIFx1N2E5N1x1NWI1MCAxMi00NTYtMy0xMjUtMTU2LTEKK2Fsd2F5cyBcdTdhYWVcdTc2ZjggMjQ1LTIzNS0yLTE1LTQ2LTUKK2Fsd2F5cyBcdTdhYWZcdTViNTAgMjQ2LTItMTI1LTE1Ni0xCithbHdheXMgXHU3YWQ5XHU5NTc3IDEtMTIzNi01LTEtMTM0Ni00CithbHdheXMgXHU3YWQ5XHU5NTdmIDEtMTIzNi01LTEtMTM0Ni00CithbHdheXMgXHU3YjFiXHU1YjUwIDE0NS0xNi0yLTEyNS0xNTYtMQorYWx3YXlzIFx1N2IyNlx1NjFjOSAxMjM0NS0zNC0yLTEzNDU2LTUKK2Fsd2F5cyBcdTdiNDZcdTRmMTAgMTM1LTE2LTQtMTIzNDUtMzQ1LTMKK2Fsd2F5cyBcdTdiNDlcdTUyMDYgMTQ1LTEzNTYtNC0xMjM0NS0xMzYtNQorYWx3YXlzIFx1N2I1NFx1NjFjOSAxNDUtMzQ1LTMtMTM0NTYtNQorYWx3YXlzIFx1N2I1NFx1NzQwNiAxNDUtMzQ1LTMtMTQtMTYtNAorYWx3YXlzIFx1N2I1NFx1N2I1NCAxNDUtMzQ1LTMtMTQ1LTM0NS0zCithbHdheXMgXHU3YjU2XHU1MjEyIDI0NS0yMzQ2LTUtMTIzNS0zNS01CithbHdheXMgXHU3YjU2XHU2MWM5IDI0NS0yMzQ2LTUtMTM0NTYtNQorYWx3YXlzIFx1N2I3N1x1NWI1MCAxMjMtMjM1Ni01LTEyNS0xNTYtMQorYWx3YXlzIFx1N2JhMVx1NWI1MCAxMy0xMjQ1Ni00LTEyNS0xNTYtMQorYWx3YXlzIFx1N2JhMVx1NmEwMiAxMy0xMjQ1Ni00LTIzNi01CithbHdheXMgXHU3YmFkXHU5M2MzIDEzLTIzNDUtNS0yNDUtMzQtNQorYWx3YXlzIFx1N2JiMVx1NWI1MCAxNS00Ni0zLTEyNS0xNTYtMQorYWx3YXlzIFx1N2JlOVx1NWI1MCAyNC0yNDU2LTMtMTI1LTE1Ni0xCithbHdheXMgXHU3YzFlXHU5OGRmIDE0NS0xMjM2LTMtMTUtMTU2LTUKK2Fsd2F5cyBcdTdjMmFcdTViNTAgMTI1LTEyMzYtMy0xMjUtMTU2LTEKK2Fsd2F5cyBcdTdjM2RcdTdmNzIgMjQ1LTIzNDUtMy0yNC0zNC01CithbHdheXMgXHU3YzNlXHU1YjUwIDE0LTIzNDUtMi0xMjUtMTU2LTEKK2Fsd2F5cyBcdTdjM2ZcdTViNTAgMTM1LTM0LTUtMTI1LTE1Ni0xCithbHdheXMgXHU3YzQzXHU1YjUwIDE0LTEyMzYtMi0xMjUtMTU2LTEKK2Fsd2F5cyBcdTdjNGRcdTZjOTIgMTMtMTYtMi0xMzQtMTI2LTUKK2Fsd2F5cyBcdTdjNjBcdTViNTAgMTQtMTIzNDYtMi0xMjUtMTU2LTEKK2Fsd2F5cyBcdTdjNzNcdTg4NGMgMTM0LTE2LTQtMTIzNS0xMzQ2LTIKK2Fsd2F5cyBcdTdjOTdcdTczNzcgMjQ1LTM0LTMtMTIzLTQ1Ni01CithbHdheXMgXHU3Yzk3XHU3Mzg3IDI0NS0zNC0zLTI0LTIzNTYtNQorYWx3YXlzIFx1N2M5OFx1OGNiYyAxLTEyMzYtMy0xMjQtMzQ2LTMKK2Fsd2F5cyBcdTdjYmRcdTViNTAgMTI1LTEyMzQ2LTUtMTI1LTE1Ni0xCithbHdheXMgXHU3Y2Q5XHU3YzczIDI0NS0xNDYtNS0xMzQtMTYtNAorYWx3YXlzIFx1N2NmMFx1NWI1MCAxMjQtMTI0NTYtMi0xMjUtMTU2LTEKK2Fsd2F5cyBcdTdkMDBcdTUwYjMgMTMtMTYtNS0xLTEyNDU2LTUKK2Fsd2F5cyBcdTdkMTNcdTk2ZTMgMjQtMzQtMy0xMzQ1LTEyMzYtNQorYWx3YXlzIFx1N2QyMFx1ODg0YyAxNS0zNC01LTE1LTEzNDU2LTUKK2Fsd2F5cyBcdTdkMmZcdTRlMTYgMTQtMzU2LTQtMjQtMTU2LTUKK2Fsd2F5cyBcdTdkMmZcdTUyYTAgMTQtMzU2LTQtMTMtMjM0NTYtMworYWx3YXlzIFx1N2QyZlx1NTM3NSAxNC0zNTYtNC0xNC0xMjQ1Ni00CithbHdheXMgXHU3ZDJmXHU1Yjk4IDE0LTM1Ni00LTEzLTEyNDU2LTMKK2Fsd2F5cyBcdTdkMmZcdTY1ZTUgMTQtMzU2LTQtMTI0NS0xNTYtNQorYWx3YXlzIFx1N2QyZlx1NjcwOCAxNC0zNTYtNC0yMzYtNQorYWx3YXlzIFx1N2QyZlx1NmIyMSAxNC0zNTYtNC0yNDUtMTU2LTUKK2Fsd2F5cyBcdTdkMmZcdTcyYWYgMTQtMzU2LTQtMTIzNDUtMTIzNi01CithbHdheXMgXHU3ZDJmXHU3YTRkIDE0LTM1Ni00LTEzLTE2LTMKK2Fsd2F5cyBcdTdkMmZcdTdkMmYgMTQtMzU2LTQtMTQtMzU2LTQKK2Fsd2F5cyBcdTdkMmZcdThkMDUgMTQtMzU2LTQtMS0xMjQ2LTUKK2Fsd2F5cyBcdTdkMmZcdTkwMzIgMTQtMzU2LTQtMTMtMTQ1Ni01CithbHdheXMgXHU3ZDQyXHU0ZTg2IDEtMTIzNDYtMy0xNC0yNDYtNAorYWx3YXlzIFx1N2Q0NFx1OTU3NyAxMjUtMzQtNC0xLTEzNDYtNAorYWx3YXlzIFx1N2Q1MFx1NWJlNiAxMy0zNDYtMy0yNC0xNTYtMgorYWx3YXlzIFx1N2Q1MFx1NWRmNCAxMy0zNDYtMy0xMzUtMzQ1LTMKK2Fsd2F5cyBcdTdkNjZcdTRlZDggMTMtMTYtNC0xMjM0NS0zNC01CithbHdheXMgXHU3ZDY4XHU1NDYyIDEyNDUtMTIzNDYtMi0xMzQ1LTE2LTIKK2Fsd2F5cyBcdTdkNzFcdTczODcgMTI0LTEyMzQ2LTQtMjQtMjM1Ni01CithbHdheXMgXHU3ZDkzXHU1MGIzIDEzLTEzNDU2LTMtMS0xMjQ1Ni01CithbHdheXMgXHU3ZDkzXHU4MTA4IDEzLTEzNDU2LTMtMTM0LTI0NTYtNQorYWx3YXlzIFx1N2RiMlx1NWI1MCA0NTYtNC0xMjUtMTU2LTEKK2Fsd2F5cyBcdTdkYjhcdTVkZmUgMTMtMTI0NTYtMy0xMy0xNDU2LTMKK2Fsd2F5cyBcdTdkZTNcdTUyMDYgNDUtMi0xMjM0NS0xMzYtNQorYWx3YXlzIFx1N2RlOFx1ODQ1NyAxMzUtMjM0NS0zLTEtMzQtNQorYWx3YXlzIFx1N2UyM1x1NTIwNiAxNS0yMzQ1LTUtMTIzNDUtMTM2LTUKK2Fsd2F5cyBcdTdlMjNcdTk1NzcgMTUtMjM0NS01LTEtMTM0Ni00CithbHdheXMgXHU3ZTJiXHU5Njk5IDEyMzQ1LTEzNTYtNS0xNS0xNi01CithbHdheXMgXHU3ZTMxXHU2YTZiIDEyNS0xMjM0Ni0zLTEyMzUtMTM1Ni0yCithbHdheXMgXHU3ZTMxXHU4Y2FiIDEyNS0xMjM0Ni0zLTEzLTEyNDU2LTUKK2Fsd2F5cyBcdTdlM2RcdTVmOTcgMTI1LTEyMzQ2LTQtMTQ1LTM1Ni00CithbHdheXMgXHU3ZTNkXHU4ODRjIDEyNS0xMjM0Ni00LTEyMzUtMTM0Ni0yCithbHdheXMgXHU3ZTNkXHU5NTc3IDEyNS0xMjM0Ni00LTEtMTM0Ni00CithbHdheXMgXHU3ZTQzXHU1YjUwIDEzNS0xMzU2LTMtMTI1LTE1Ni0xCithbHdheXMgXHU3ZTY5XHU1YjUwIDI0LTEzNTYtMi0xMjUtMTU2LTEKK2Fsd2F5cyBcdTdlOGNcdTUwNDcgMTUtMTI1Ni01LTEzLTIzNDU2LTUKK2Fsd2F5cyBcdTdmM2FcdTdhN2EgMjQ1LTIzNi0zLTEyMy0xMjM0Ni01CithbHdheXMgXHU3ZjQ4XHU1YjUwIDEyNC0xMjM2LTItMTI1LTE1Ni0xCithbHdheXMgXHU3ZjUwXHU1YjUwIDEzLTEyNDU2LTUtMTI1LTE1Ni0xCithbHdheXMgXHU3ZjY5XHU1YjUwIDEtMTQ2LTUtMTI1LTE1Ni0xCithbHdheXMgXHU3ZjcyXHU1NDBkIDI0LTM0LTUtMTM0LTEzNDU2LTIKK2Fsd2F5cyBcdTdmNzlcdTk2ZTMgMTQtMTYtMi0xMzQ1LTEyMzYtNQorYWx3YXlzIFx1N2Y5ZVx1NjAyZiAxNS0yMzQtMy0yNDUtMjM2LTUKK2Fsd2F5cyBcdTdmOWVcdTYwZTEgMTUtMjM0LTMtMzQtNQorYWx3YXlzIFx1N2ZmOVx1Njk1YSAyNDUtMjQ2LTItMTItMzQtNAorYWx3YXlzIFx1N2ZmOVx1OTk5NiAyNDUtMjQ2LTItMjQtMTIzNTYtNAorYWx3YXlzIFx1ODAwMVx1NWMwNyAxNC0xNDYtNC0xMy00Ni01CithbHdheXMgXHU4MDAxXHU1YzExIDE0LTE0Ni00LTI0LTE0Ni01CithbHdheXMgXHU4MDAzXHU1Mzc3IDEyMy0xNDYtNC0xMy00NS01CithbHdheXMgXHU4MDAzXHU5MWNmIDEyMy0xNDYtNC0xNC00Ni0yCithbHdheXMgXHU4MDE1XHU3YTJlIDEzLTEzNTYtMy0xLTEyMzQ2LTUKK2Fsd2F5cyBcdTgwMTdcdTViNTAgMTIzNS0xNDYtNS0xMjUtMTU2LTEKK2Fsd2F5cyBcdTgwNWVcdTkwNTQgMTIzNDU2LTUtMTQ1LTM0NS0yCithbHdheXMgXHU4MDcyXHU2YTAyIDI0LTEzNTYtMy0yMzYtNQorYWx3YXlzIFx1ODA3N1x1NTIwNiAxLTE1Ni0yLTEyMzQ1LTEzNi01CithbHdheXMgXHU4MDdkXHU1OTI5IDEyNC0xMzQ1Ni01LTEyNC0yMzQ1LTMKK2Fsd2F5cyBcdTgwN2RcdTVkZWUgMTI0LTEzNDU2LTMtMTItMjQ1Ni0zCithbHdheXMgXHU4MDg2XHU2MWM5IDE1LTE1Ni01LTEzNDU2LTUKK2Fsd2F5cyBcdTgwOThcdTViNTAgMS0xMjM1Ni00LTEyNS0xNTYtMQorYWx3YXlzIFx1ODA5YVx1NWI1MCAxNDUtMzQtNS0xMjUtMTU2LTEKK2Fsd2F5cyBcdTgwYTFcdTUyMDYgMTMtMzQtNC0xMjM0NS0xMzYtNQorYWx3YXlzIFx1ODBjNlx1NWI1MCAxNDUtMTIzNi00LTEyNS0xNTYtMQorYWx3YXlzIFx1ODBkNlx1NWI1MCAxMjM0LTEzNDYtNS0xMjUtMTU2LTEKK2Fsd2F5cyBcdTgwZGFcdTViNTAgMTIzNC0zNTYtMy0xMjUtMTU2LTEKK2Fsd2F5cyBcdTgwZjBcdTViNTAgMTYtMi0xMjUtMTU2LTEKK2Fsd2F5cyBcdTgxMDhcdTViZWMgMTM0LTI0NTYtNS0xMjMtMTI0NTYtMworYWx3YXlzIFx1ODEwOFx1NWU0NSAxMzQtMjQ1Ni01LTEyMzQ1LTM0LTIKK2Fsd2F5cyBcdTgxMDhcdTY0MGYgMTM0LTI0NTYtNS0xMzUtMTI2LTIKK2Fsd2F5cyBcdTgxMDhcdTc0MDYgMTM0LTI0NTYtNS0xNC0xNi00CithbHdheXMgXHU4MTA4XHU3OGJjIDEzNC0yNDU2LTUtMTM0LTM0NS00CithbHdheXMgXHU4MTA4XHU3ZDYxIDEzNC0yNDU2LTUtMTQtMjUtNQorYWx3YXlzIFx1ODEwOFx1OTgzYiAxMzQtMjQ1Ni01LTEyMzQtMTQ1Ni0yCithbHdheXMgXHU4MTE2XHU1YjUwIDEzNS0xMjYtMi0xMjUtMTU2LTEKK2Fsd2F5cyBcdTgxNjZcdTViNTAgMTM0NS0xNDYtNC0xMjUtMTU2LTEKK2Fsd2F5cyBcdTgxNzhcdTViNTAgMTItMTM0Ni0yLTEyNS0xNTYtMQorYWx3YXlzIFx1ODE3Zlx1NWI1MCAxMjQtMTI0Ni00LTEyNS0xNTYtMQorYWx3YXlzIFx1ODE4MFx1NWI1MCAxMzUtMTM0Ni00LTEyNS0xNTYtMQorYWx3YXlzIFx1ODE4MFx1ODBmMSAxMjM0LTEzNDYtMi0xMy00NTYtMworYWx3YXlzIFx1ODE4MFx1ODFjMiAxMzUtMTM0Ni00LTEzNS0xNi01CithbHdheXMgXHU4MTljXHU2MmRjIDEzNC0xMjYtMi0xMzUtMjQ1Ni01CithbHdheXMgXHU4MWJkXHU1YjUwIDE0NS0xMjM2LTQtMTI1LTE1Ni0xCithbHdheXMgXHU4MWJkXHU2MDJmIDE0NS0xMjM2LTQtMjQ1LTIzNi01CithbHdheXMgXHU4MWM2XHU1ZWE2IDE2LTUtMTQ1LTI1LTUKK2Fsd2F5cyBcdTgxZTVcdTkyZWEgMjUtNS0xMjM0LTM0LTUKK2Fsd2F5cyBcdTgxZTdcdTU0MjYgMTI1LTEzNDYtMy0xMjM0LTE2LTQKK2Fsd2F5cyBcdTgxZThcdTZkMmUgMTQtMTQ1Ni0yLTI0Ni0yCithbHdheXMgXHU4MWU4XHU5NmUzIDE0LTE0NTYtMi0xMzQ1LTEyMzYtNQorYWx3YXlzIFx1ODFlYVx1NTBiMyAxMjUtMTU2LTUtMS0xMjQ1Ni01CithbHdheXMgXHU4MWVhXHU3NzAxIDEyNS0xNTYtNS0xNS0xMzQ1Ni00CithbHdheXMgXHU4MWVhXHU3ZDY2IDEyNS0xNTYtNS0xMy0xNi00CithbHdheXMgXHU4MjA1XHU1YjUwIDEzLTIzNC01LTEyNS0xNTYtMQorYWx3YXlzIFx1ODIwOFx1NTQ3MyAxNS0xMzQ1Ni01LTEyNDYtNQorYWx3YXlzIFx1ODIwOFx1N2RmYiAxNS0xMzQ1Ni01LTEtMTU2LTUKK2Fsd2F5cyBcdTgyMDhcdTgyMDggMTUtMTM0NTYtNS0xNS0xMzQ1Ni01CithbHdheXMgXHU4MjA4XHU4ZGEzIDE1LTEzNDU2LTUtMjQ1LTEyNTYtNQorYWx3YXlzIFx1ODIwYVx1OTBmZCAxMy0yMzQtNS0xNDUtMzQtMworYWx3YXlzIFx1ODIwY1x1ODJkNCAyNC0yMzQ2LTItMTI0LTI0NTYtMworYWx3YXlzIFx1ODIwZFx1NjhjNCAyNC0yMzQ2LTQtMjQ1LTE2LTUKK2Fsd2F5cyBcdTgyMTZcdTVmMzUgMTIzNC0zNC0zLTEtMTM0Ni0zCithbHdheXMgXHU4MjE2XHU2MzkyIDEyMzQtMzQtMy0xMjM0LTI0NTYtMgorYWx3YXlzIFx1ODIyY1x1ODJlNSAxMzUtMTI2LTMtMTI0NS0yMzQ2LTQKK2Fsd2F5cyBcdTgyMzlcdTk1NzcgMTItMTI0NTYtMi0xLTEzNDYtNAorYWx3YXlzIFx1ODIzOVx1OTZlMyAxMi0xMjQ1Ni0yLTEzNDUtMTIzNi01CithbHdheXMgXHU4MjY2XHU5NTc3IDEzLTIzNDUtNS0xLTEzNDYtNAorYWx3YXlzIFx1ODI2Zlx1NWMwNyAxNC00Ni0yLTEzLTQ2LTUKK2Fsd2F5cyBcdTgyNzJcdTc2ZjggMTUtMjM0Ni01LTE1LTQ2LTUKK2Fsd2F5cyBcdTgyYjFcdTUxYTAgMTIzNS0zNS0zLTEzLTEyNDU2LTMKK2Fsd2F5cyBcdTgyZTVcdTVlNzkgMTI0NS0yNS01LTEzLTEyMzYtMworYWx3YXlzIFx1ODJlNlx1OTZlMyAxMjMtMzQtNC0xMzQ1LTEyMzYtNQorYWx3YXlzIFx1ODJmMVx1NmNkNSAxMzQ1Ni0zLTEyMzQ1LTM0NS01CithbHdheXMgXHU4MzA0XHU1YjUwIDI0NS0zNDYtMi0xMjUtMTU2LTEKK2Fsd2F5cyBcdTgzMDVcdTU4NWUgMTM0LTE0Ni0yLTE1LTIzNDYtNQorYWx3YXlzIFx1ODM0OVx1NzM4NyAyNDUtMTQ2LTQtMjQtMjM1Ni01CithbHdheXMgXHU4Mzc4XHU4NWJhIDEzNS0xNi0yLTI0NS0xNi0yCithbHdheXMgXHU4M2YyXHU4NTg0IDEyMzQ1LTM1Ni00LTEzNS0xMjYtMgorYWx3YXlzIFx1ODQwZVx1N2UyZSAxMjQ2LTMtMTUtMjUtMworYWx3YXlzIFx1ODQyY1x1NGU1OCAxMjQ1Ni01LTI0LTEzNTYtNQorYWx3YXlzIFx1ODQyY1x1NTM3NyAxMjQ1Ni01LTEzLTQ1LTUKK2Fsd2F5cyBcdTg0M2RcdTk2ZTMgMTQtMjUtNS0xMzQ1LTEyMzYtNQorYWx3YXlzIFx1ODQzZFx1OWI0NCAxNC0yNS01LTEyNC0yNS01CithbHdheXMgXHU4NDQ5XHU1YjUwIDM0Ni01LTEyNS0xNTYtMQorYWx3YXlzIFx1ODQ0OVx1ODEwOCAzNDYtNS0xMzQtMjQ1Ni01CithbHdheXMgXHU4NDU3XHU0ZjVjIDEtMzQtNS0xMjUtMjUtNQorYWx3YXlzIFx1ODQ1N1x1NTI5YiAxLTI1LTItMTQtMTYtNQorYWx3YXlzIFx1ODQ1N1x1NTQwZCAxLTM0LTUtMTM0LTEzNDU2LTIKK2Fsd2F5cyBcdTg0NTdcdTViZTYgMS0yNS0yLTI0LTE1Ni0yCithbHdheXMgXHU4NDU3XHU1ZThhIDEtMjUtMi0xMi00NTYtMgorYWx3YXlzIFx1ODQ1N1x1NjAyNSAxLTE0Ni0zLTEzLTE2LTIKK2Fsd2F5cyBcdTg0NTdcdTYwZjMgMS0xNDYtMi0xNS00Ni00CithbHdheXMgXHU4NDU3XHU2MTRjIDEtMTQ2LTItMTIzNS00NTYtMworYWx3YXlzIFx1ODQ1N1x1NjI0YiAxLTI1LTItMjQtMTIzNTYtNAorYWx3YXlzIFx1ODQ1N1x1NjZmOCAxLTM0LTUtMjQtMzQtMworYWx3YXlzIFx1ODQ1N1x1NjcwOSAxLTM0LTUtMjM0LTQKK2Fsd2F5cyBcdTg0NTdcdTY4Y2IgMS0yNS0yLTI0NS0xNi0yCithbHdheXMgXHU4NDU3XHU2ZGJjIDEtMTQ2LTMtMTQtNDYtMgorYWx3YXlzIFx1ODQ1N1x1NzA2YiAxLTE0Ni0yLTEyMzUtMjUtNAorYWx3YXlzIFx1ODQ1N1x1ODAwNSAxLTM0LTUtMS0yMzQ2LTQKK2Fsd2F5cyBcdTg0NTdcdTgyNzIgMS0yNS0yLTE1LTIzNDYtNQorYWx3YXlzIFx1ODQ1N1x1ODQzZCAxLTE0Ni0yLTE0LTI1LTUKK2Fsd2F5cyBcdTg0NTdcdTg0NTcgMS0yNS0yLTEtMjM0Ni0xCithbHdheXMgXHU4NDU3XHU4ODYzIDEtMjUtMi0xNi0zCithbHdheXMgXHU4NDU3XHU4ZmYwIDEtMzQtNS0yNC0zNC01CithbHdheXMgXHU4NDU3XHU5MWNkIDEtMjUtMi0xLTEyMzQ2LTUKK2Fsd2F5cyBcdTg0NTdcdTk2NzggMS0yNS0yLTE0LTM0LTUKK2Fsd2F5cyBcdTg0OTlcdTk2ZTMgMTM0LTEzNTYtMi0xMzQ1LTEyMzYtNQorYWx3YXlzIFx1ODRjNlx1NWI1MCAxNS0xNi0yLTEyNS0xNTYtMQorYWx3YXlzIFx1ODRjYlx1NWI1MCAxMy0yNDU2LTUtMTI1LTE1Ni0xCithbHdheXMgXHU4NGZjXHU4M2FhIDE0LTM0LTUtMjM0Ni0yCithbHdheXMgXHU4NTg0XHU4Mzc3IDEzNS0xMjYtNS0xMjM1LTIzNDYtMgorYWx3YXlzIFx1ODU4NFx1ODg0YyAxMzUtMTI2LTItMTUtMTM0NTYtNQorYWx3YXlzIFx1ODVjOVx1ODVjOSAxMy0xNi0yLTEzLTE2LTIKK2Fsd2F5cyBcdTg1ZTRcdTViNTAgMTI0LTEzNTYtMi0xMjUtMTU2LTEKK2Fsd2F5cyBcdTg1ZTVcdTg4NGMgMjQ2LTUtMTIzNS0xMzQ2LTIKK2Fsd2F5cyBcdTg1ZTVcdTkyZWEgMjQ2LTUtMTIzNC0zNC01CithbHdheXMgXHU4NjU1XHU0ZThiIDEyLTM0LTQtMjQtMTU2LTUKK2Fsd2F5cyBcdTg2NTVcdTRlOGUgMTItMzQtNC0xMjU2LTIKK2Fsd2F5cyBcdTg2NTVcdTUyMDYgMTItMzQtNC0xMjM0NS0xMzYtNQorYWx3YXlzIFx1ODY1NVx1NTg4MyAxMi0zNC00LTEzLTEzNDU2LTUKK2Fsd2F5cyBcdTg2NTVcdTY1YmMgMTItMzQtNC0xMjU2LTIKK2Fsd2F5cyBcdTg2NTVcdTc0MDYgMTItMzQtNC0xNC0xNi00CithbHdheXMgXHU4NjU1XHU3ZjcwIDEyLTM0LTQtMTIzNDUtMzQ1LTIKK2Fsd2F5cyBcdTg2NTVcdTk1NzcgMTItMzQtNS0xLTEzNDYtNAorYWx3YXlzIFx1ODY1Zlx1NTRlZCAxMjM1LTE0Ni0yLTEyMy0zNC0zCithbHdheXMgXHU4NjhhXHU1YjUwIDEyMzQ1Ni0yLTEyNS0xNTYtMQorYWx3YXlzIFx1ODZlNFx1ODY4YyAxMy0yMzQ2LTQtMTM1LTEzNDYtNQorYWx3YXlzIFx1ODZlNFx1ODZhNyAxMy0yMzQ2LTQtMTMtMzQ2LTUKK2Fsd2F5cyBcdTg2ZTRcdTg3MGEgMTMtMjM0Ni00LTE0LTE2LTUKK2Fsd2F5cyBcdTg2ZmJcdTUzMTYgMTI0LTEyNDYtNS0xMjM1LTM1LTUKK2Fsd2F5cyBcdTg3NjZcdTg3YzYgMTIzNS0zNDUtMi0xMzQtMzQ1LTEKK2Fsd2F5cyBcdTg3NjhcdTViNTAgMjQtMTU2LTMtMTI1LTE1Ni0xCithbHdheXMgXHU4N2VjXHU4NmZiIDEyLTEyMzYtMi0xMjQtMTI0Ni01CithbHdheXMgXHU4N2YyXHU1YjUwIDEyLTEyMzQ2LTItMTI1LTE1Ni0xCithbHdheXMgXHU4ODNiXHU2YTZiIDEzNC0xMjM2LTItMTIzNS0xMzU2LTUKK2Fsd2F5cyBcdTg4NDBcdTY2ODggMTUtMzQ2LTQtMjU2LTUKK2Fsd2F5cyBcdTg4NDBcdTkwODQgMTUtMzQ2LTQtMTIzNS0xMjQ1Ni0yCithbHdheXMgXHU4ODRjXHU0ZTFhIDEyMzUtMTM0Ni0yLTM0Ni01CithbHdheXMgXHU4ODRjXHU0ZjBkIDEyMzUtMTM0Ni0yLTM0LTQKK2Fsd2F5cyBcdTg4NGNcdTUyMTcgMTIzNS0xMzQ2LTItMTQtMzQ2LTUKK2Fsd2F5cyBcdTg4NGNcdTU0ZTEgMTIzNS0xMzQ2LTItNDUtMgorYWx3YXlzIFx1ODg0Y1x1NWJiNiAxMjM1LTEzNDYtMi0xMy0yMzQ1Ni0zCithbHdheXMgXHU4ODRjXHU1ZWFiIDEyMzUtMTM0Ni0yLTEyMy0zNC01CithbHdheXMgXHU4ODRjXHU2MGM1IDEyMzUtMTM0Ni0yLTI0NS0xMzQ1Ni0yCithbHdheXMgXHU4ODRjXHU2NTc4IDEyMzUtMTM0Ni0yLTI0LTM0LTUKK2Fsd2F5cyBcdTg4NGNcdTY3MDMgMTIzNS0xMzQ2LTItMTIzNS0xMjQ2LTUKK2Fsd2F5cyBcdTg4NGNcdTY5NmQgMTIzNS0xMzQ2LTItMzQ2LTUKK2Fsd2F5cyBcdTg4NGNcdTZiM2UgMTIzNS0xMzQ2LTItMTIzLTEyNDU2LTQKK2Fsd2F5cyBcdTg4NGNcdTcyYzAgMTUtMTM0NTYtNS0xLTQ1Ni01CithbHdheXMgXHU4ODRjXHU4NjVmIDEyMzUtMTM0Ni0yLTEyMzUtMTQ2LTUKK2Fsd2F5cyBcdTg4NGNcdTg4NGMgMTIzNS0xMzQ2LTItMTUtMTM0NTYtMgorYWx3YXlzIFx1ODg0Y1x1ODk4ZiAxMjM1LTEzNDYtMi0xMy0xMjQ2LTMKK2Fsd2F5cyBcdTg4NGNcdThhNzEgMTIzNS0xMzQ2LTItMTIzNS0zNS01CithbHdheXMgXHU4ODRjXHU5NTkzIDEyMzUtMTM0Ni0yLTEzLTIzNDUtMworYWx3YXlzIFx1ODg1ZFx1NTFhMCAxMi0xMjM0Ni0zLTEzLTEyNDU2LTMKK2Fsd2F5cyBcdTg4NjFcdTkxY2YgMTIzNS0xMzU2LTItMTQtNDYtMgorYWx3YXlzIFx1ODg2M1x1NTFhMCAxNi0zLTEzLTEyNDU2LTMKK2Fsd2F5cyBcdTg4NjNcdTg0NTcgMTYtMy0xLTI1LTIKK2Fsd2F5cyBcdTg4NjNcdTg4ZjMgMTYtMy0yNC0xMzQ2LTEKK2Fsd2F5cyBcdTg4NjhcdTczODcgMTM1LTI0Ni00LTI0LTIzNTYtNQorYWx3YXlzIFx1ODg2OFx1NzZmOCAxMzUtMjQ2LTQtMTUtNDYtNQorYWx3YXlzIFx1ODg4Ylx1NWI1MCAxNDUtMjQ1Ni01LTEyNS0xNTYtMQorYWx3YXlzIFx1ODg5Nlx1NWI1MCAxNS0yMzQtNS0xMjUtMTU2LTEKK2Fsd2F5cyBcdTg4YWJcdTViNTAgMTM1LTM1Ni01LTEyNS0xNTYtMQorYWx3YXlzIFx1ODhjMVx1NWVhNiAyNDUtMjQ1Ni0yLTE0NS0yNS01CithbHdheXMgXHU4OGMxXHU5MWNmIDI0NS0yNDU2LTItMTQtNDYtMgorYWx3YXlzIFx1ODhjMlx1N2UyYiAxNC0zNDYtNS0xMjM0NS0xMzU2LTUKK2Fsd2F5cyBcdTg4ZDlcdTViNTAgMjQ1LTI1Ni0yLTEyNS0xNTYtMQorYWx3YXlzIFx1ODhkY1x1NTA0NyAxMzUtMzQtNC0xMy0yMzQ1Ni01CithbHdheXMgXHU4OGRjXHU3ZDY2IDEzNS0zNC00LTEzLTE2LTQKK2Fsd2F5cyBcdTg4ZGNcdTkwODQgMTM1LTM0LTQtMTIzNS0xMjQ1Ni0yCithbHdheXMgXHU4OGRjXHU5NWQ1IDEzNS0zNC00LTI0NS0yMzYtMworYWx3YXlzIFx1ODhlMVx1NWI1MCAxNC0xNi00LTEyNS0xNTYtMQorYWx3YXlzIFx1ODkwMlx1NWI1MCAxMy0zNS01LTEyNS0xNTYtMQorYWx3YXlzIFx1ODkzMlx1NWI1MCAxMjMtMzQtNS0xMjUtMTU2LTEKK2Fsd2F5cyBcdTg5M2JcdTczYTkgMTUtMzQ2LTUtMTI0NTYtNQorYWx3YXlzIFx1ODk2YVx1NWI1MCAzNS01LTEyNS0xNTYtMQorYWx3YXlzIFx1ODk3Zlx1NmEwMiAxNS0xNi0zLTIzNi01CithbHdheXMgXHU4OTgxXHU2MzNlIDI0Ni0zLTE1LTM0Ni0yCithbHdheXMgXHU4OTgxXHU2YzQyIDI0Ni0zLTI0NS0yMzQtMgorYWx3YXlzIFx1ODk4MVx1ODEwNSAyNDYtMy0xNS0zNDYtMgorYWx3YXlzIFx1ODk4Nlx1NjgyMSAxMjM0NS0zNC01LTEzLTI0Ni01CithbHdheXMgXHU4OTg2XHU2YzkyIDEyMzQ1LTM0LTUtMTM0LTEyNi01CithbHdheXMgXHU4OWFhXHU1YmI2IDI0NS0xMzQ1Ni01LTEzLTIzNDU2LTMKK2Fsd2F5cyBcdThhMGVcdTRmMTAgMTI0LTE0Ni00LTEyMzQ1LTM0NS0zCithbHdheXMgXHU4YTNhXHU4MTA4IDEtMTM2LTQtMTM0LTI0NTYtNQorYWx3YXlzIFx1OGE1MFx1OTY0ZCAxLTM0NS01LTE1LTQ2LTIKK2Fsd2F5cyBcdThhNTVcdTUwYjMgMTIzNC0xMzQ1Ni0yLTEtMTI0NTYtNQorYWx3YXlzIFx1OGE1NVx1OTFjZiAxMjM0LTEzNDU2LTItMTQtNDYtMgorYWx3YXlzIFx1OGE2Nlx1NTM3NyAyNC0xNTYtNS0xMy00NS01CithbHdheXMgXHU4YTcyXHU4ODRjIDEzLTI0NTYtMy0xMjM1LTEzNDYtMgorYWx3YXlzIFx1OGE4Nlx1OWExOSAxMjMtNDU2LTMtMTIzNC0yMzQ1LTUKK2Fsd2F5cyBcdThhYWFcdTViYTIgMjQtMTI0Ni01LTEyMy0yMzQ2LTUKK2Fsd2F5cyBcdThhYWFcdTY3MGQgMjQtMTI0Ni01LTEyMzQ1LTM0LTIKK2Fsd2F5cyBcdThhYmZcdTUwNWMgMTI0LTI0Ni0yLTEyNC0xMzQ1Ni0yCithbHdheXMgXHU4YWJmXHU1NDA4IDEyNC0yNDYtMi0xMjM1LTIzNDYtMgorYWx3YXlzIFx1OGFiZlx1NWI1MCAxNDUtMjQ2LTUtMTI1LTE1Ni0xCithbHdheXMgXHU4YWJmXHU2NTc0IDEyNC0yNDYtMi0xLTEzNTYtNAorYWx3YXlzIFx1OGFiZlx1N2JjMCAxMjQtMjQ2LTItMTMtMzQ2LTIKK2Fsd2F5cyBcdThhYmZcdTg5ZTMgMTI0LTI0Ni0yLTEzLTM0Ni00CithbHdheXMgXHU4YWJmXHU5NTc3IDEyNC0yNDYtMi0xLTEzNDYtNAorYWx3YXlzIFx1OGFiZlx1OTkwYSAxMjQtMjQ2LTItNDYtNAorYWx3YXlzIFx1OGFjYlx1NTA0NyAyNDUtMTM0NTYtNC0xMy0yMzQ1Ni01CithbHdheXMgXHU4YWQ2XHU4NDU3IDE0LTEyMzQ1Ni01LTEtMzQtNQorYWx3YXlzIFx1OGFkNlx1OGE5ZSAxNC0xMjM0NTYtMi0xMjU2LTQKK2Fsd2F5cyBcdThiMWRcdTY3MTMgMTUtMzQ2LTUtMTI0LTI0Ni01CithbHdheXMgXHU4YjNlXHU3Zjc1IDEzNC0xMjM2LTUtMTM0LTM0NS01CithbHdheXMgXHU4YjU4XHU3NmY4IDI0LTE1Ni01LTE1LTQ2LTUKK2Fsd2F5cyBcdThiNWNcdTViNTAgMTIzNC0zNC00LTEyNS0xNTYtMQorYWx3YXlzIFx1OGI3MFx1ODY1NSAxNi01LTEyLTM0LTQKK2Fsd2F5cyBcdThiNzBcdTk1NzcgMTYtNS0xLTEzNDYtNAorYWx3YXlzIFx1OGI4YVx1NjZmNCAxMzUtMjM0NS01LTEzLTEzNTYtMworYWx3YXlzIFx1OGI4YVx1NzZmOCAxMzUtMjM0NS01LTE1LTQ2LTUKK2Fsd2F5cyBcdThiYTFcdTUyMTIgMTMtMTYtNS0xMjM1LTM1LTUKK2Fsd2F5cyBcdThjNDZcdTViNTAgMTQ1LTEyMzU2LTUtMTI1LTE1Ni0xCithbHdheXMgXHU4YzQ2XHU4YzQ5IDE0NS0xMjM1Ni01LTEyLTE1Ni00CithbHdheXMgXHU4YzZjXHU0ZWQ0IDEtMzQtMy0xMjUtMjQ1Ni00CithbHdheXMgXHU4YzZjXHU1NzA4IDEtMzQtMy0xMy00NS01CithbHdheXMgXHU4Yzc5XHU1YjUwIDEzNS0xNDYtNS0xMjUtMTU2LTEKK2Fsd2F5cyBcdThjOGNcdTc2ZjggMTM0LTE0Ni01LTE1LTQ2LTUKK2Fsd2F5cyBcdThjYTBcdTdkMmYgMTIzNDUtMzQtNS0xNC0zNTYtNAorYWx3YXlzIFx1OGNhMFx1ODM3NyAxMjM0NS0zNC01LTEyMzUtMjM0Ni01CithbHdheXMgXHU4Y2ExXHU3NmY4IDI0NS0yNDU2LTItMTUtNDYtNQorYWx3YXlzIFx1OGNhMVx1OTU3NyAyNDUtMjQ1Ni0yLTEtMTM0Ni00CithbHdheXMgXHU4Y2E5XHU1YjUwIDEyMzQ1LTEyMzYtNS0xMjUtMTU2LTEKK2Fsd2F5cyBcdThjZGVcdTczYTkgMjQtMTM0Ni00LTEyNDU2LTUKK2Fsd2F5cyBcdThjZTJcdTc2ZjggMTUtMjM0NS0yLTE1LTQ2LTUKK2Fsd2F5cyBcdThkNzRcdTk2ZTMgMTIzNDUtMzQtNS0xMzQ1LTEyMzYtNQorYWx3YXlzIFx1OGQ3N1x1NWI1MCAyNDUtMTYtNC0xMjUtMTU2LTEKK2Fsd2F5cyBcdThkZGJcdTViNTAgMTM1LTEyNi00LTEyNS0xNTYtMQorYWx3YXlzIFx1OGRlZlx1NWI1MCAxNC0zNC01LTEyNS0xNTYtMQorYWx3YXlzIFx1OGRmM1x1ODg0YyAxMjQtMjQ2LTUtMTIzNS0xMzQ2LTIKK2Fsd2F5cyBcdThlMDlcdThlNGMgMTQtNDYtNS0yNDUtNDYtNQorYWx3YXlzIFx1OGU0NFx1NWI1MCAxMjQtMTYtMi0xMjUtMTU2LTEKK2Fsd2F5cyBcdThlNGFcdThlN2EgMTUtMTYtMy0yNDUtMjQ2LTUKK2Fsd2F5cyBcdThlYWJcdTUyMDYgMjQtMTM2LTMtMTIzNDUtMTM2LTUKK2Fsd2F5cyBcdThlYWJcdTViNTAgMjQtMTM2LTMtMTI1LTE1Ni0xCithbHdheXMgXHU4ZWNhXHU1YjUwIDEyLTIzNDYtMy0xMjUtMTU2LTEKK2Fsd2F5cyBcdThlY2FcdTg4NGMgMTItMjM0Ni0zLTEyMzUtMTM0Ni0yCithbHdheXMgXHU4ZWNhXHU5NTc3IDEyLTIzNDYtMy0xLTEzNDYtNAorYWx3YXlzIFx1OGVjYlx1NjIzMiAxMy0zNDUtMy0xNS0xNi01CithbHdheXMgXHU4ZWNkXHU2YTAyIDEzLTI1Ni0zLTIzNi01CithbHdheXMgXHU4ZWNkXHU5NTc3IDEzLTI1Ni0zLTEtMTM0Ni00CithbHdheXMgXHU4ZjE1XHU3Mzg3IDI0NS0xMzQ1Ni0zLTI0LTIzNTYtNQorYWx3YXlzIFx1OGYyOVx1NTIwNiAxMzUtMzU2LTUtMTIzNDUtMTM2LTUKK2Fsd2F5cyBcdThmMjlcdTViNTAgMTM1LTM1Ni01LTEyNS0xNTYtMQorYWx3YXlzIFx1OGYyYVx1NWI1MCAxNC0xMjM0NTYtMi0xMjUtMTU2LTEKK2Fsd2F5cyBcdThmYWVcdTViNTAgMTM1LTIzNDUtNS0xMjUtMTU2LTEKK2Fsd2F5cyBcdThmYjFcdTZjOTIgMTI0NS0zNC01LTEzNC0xMjYtNQorYWx3YXlzIFx1OGZkNFx1OTA4NCAxMjM0NS0xMjM2LTQtMTIzNS0xMjQ1Ni0yCithbHdheXMgXHU5MDAwXHU5MDg0IDEyNC0xMjQ2LTUtMTIzNS0xMjQ1Ni0yCithbHdheXMgXHU5MDAyXHU1NDA4IDI0LTE1Ni01LTEyMzUtMjM0Ni0yCithbHdheXMgXHU5MDAzXHU5NmUzIDEyNC0xNDYtMi0xMzQ1LTEyMzYtNQorYWx3YXlzIFx1OTAyM1x1OTU3NyAxNC0yMzQ1LTItMS0xMzQ2LTQKK2Fsd2F5cyBcdTkwM2VcdTUyMDYgMTI1Ni0yLTEyMzQ1LTEzNi01CithbHdheXMgXHU5MDQ3XHU5NmUzIDEyNTYtNS0xMzQ1LTEyMzYtNQorYWx3YXlzIFx1OTA0YVx1OGFhYSAyMzQtMi0yNC0xMjQ2LTUKK2Fsd2F5cyBcdTkwNGVcdTUyMDYgMTMtMjUtNS0xMjM0NS0xMzYtNQorYWx3YXlzIFx1OTA0ZVx1NzU3NiAxMy0yNS01LTE0NS0xMzQ2LTUKK2Fsd2F5cyBcdTkwNTNcdTg5YzAgMTQ1LTE0Ni01LTEzLTEyNDU2LTUKK2Fsd2F5cyBcdTkwNWJcdTkwNTQgMTQtMjM0LTMtMTQ1LTM0NS0zCithbHdheXMgXHU5MDYzXHU1YzA3IDI0NS0yMzQ1LTQtMTMtNDYtNQorYWx3YXlzIFx1OTA2OVx1NjFjOSAyNC0xNTYtNS0xMzQ1Ni01CithbHdheXMgXHU5MDY5XHU3NTc2IDI0LTE1Ni01LTE0NS0xMzQ2LTUKK2Fsd2F5cyBcdTkwNmRcdTk2ZTMgMTI1LTE0Ni0zLTEzNDUtMTIzNi01CithbHdheXMgXHU5MDc3XHU5MGZkIDI0NS0yMzQ1LTMtMTQ1LTM0LTMKK2Fsd2F5cyBcdTkwN2ZcdTk2ZTMgMTM1LTE2LTUtMTM0NS0xMjM2LTUKK2Fsd2F5cyBcdTkwODRcdTRmZDcgMTIzNS0xMjQ1Ni0yLTE1LTM0LTIKK2Fsd2F5cyBcdTkwODRcdTUwZjkgMTIzNS0xMjQ1Ni0yLTEzLTIzNDU2LTUKK2Fsd2F5cyBcdTkwODRcdTUzOWYgMTIzNS0xMjQ1Ni0yLTQ1LTIKK2Fsd2F5cyBcdTkwODRcdTYyNGIgMTIzNS0xMjQ1Ni0yLTI0LTEyMzU2LTQKK2Fsd2F5cyBcdTkwODRcdTY3MmMgMTIzNS0xMjQ1Ni0yLTEzNS0xMzYtNAorYWx3YXlzIFx1OTA4NFx1NzI1OSAxMjM1LTEyNDU2LTItMjM0NTYtMgorYWx3YXlzIFx1OTA4NFx1NzczYyAxMjM1LTEyNDU2LTItMjM0NS00CithbHdheXMgXHU5MDg0XHU3OWFlIDEyMzUtMTI0NTYtMi0xNC0xNi00CithbHdheXMgXHU5MDg0XHU4MWYzIDEyMzUtMTI0NTYtMi0xLTE1Ni01CithbHdheXMgXHU5MDg0XHU5MTA5IDEyMzUtMTI0NTYtMi0xNS00Ni0zCithbHdheXMgXHU5MDg0XHU5ODU4IDEyMzUtMTI0NTYtMi00NS01CithbHdheXMgXHU5MDg0XHU5YjQyIDEyMzUtMTI0NTYtMi0xMjM1LTEyMzQ1Ni0yCithbHdheXMgXHU5MDhhXHU1ZmJjIDEzNS0yMzQ1LTMtMTMtMjQ2LTUKK2Fsd2F5cyBcdTkwYTNcdTRlNDggMTM0NS0zNDUtNS0xMzQtMjM0Ni0xCithbHdheXMgXHU5MGEzXHU1ODJhIDEzNDUtMzQ1LTQtMTIzLTEyMzYtMworYWx3YXlzIFx1OTBhM1x1NjcwOSAxMzQ1LTM0NS00LTIzNC00CithbHdheXMgXHU5MGEzXHU4MGZkIDEzNDUtMzQ1LTQtMTM0NS0xMzU2LTIKK2Fsd2F5cyBcdTkwYWFcdTg4NGMgMTUtMzQ2LTItMTUtMTM0NTYtNQorYWx3YXlzIFx1OTBlMVx1OTU3NyAxMy0yNTYtNS0xLTEzNDYtNAorYWx3YXlzIFx1OTBlMlx1OTBmZCAxMzQ1Ni00LTE0NS0zNC0zCithbHdheXMgXHU5MGU4XHU1MjA2IDEzNS0zNC01LTEyMzQ1LTEzNi01CithbHdheXMgXHU5MGU4XHU1YzA3IDEzNS0zNC01LTEzLTQ2LTUKK2Fsd2F5cyBcdTkwZThcdTk1NzcgMTM1LTM0LTUtMS0xMzQ2LTQKK2Fsd2F5cyBcdTkwZjVcdTVkZWUgMjM0LTItMTItMjQ1Ni0zCithbHdheXMgXHU5MGZkXHU1MTc1IDE0NS0zNC0zLTEzNS0xMzQ1Ni0zCithbHdheXMgXHU5MGZkXHU1M2Y4IDE0NS0zNC0zLTE1LTE1Ni0zCithbHdheXMgXHU5MGZkXHU1N2NlIDE0NS0zNC0zLTEyLTEzNTYtMgorYWx3YXlzIFx1OTBmZFx1NWJkZiAxNDUtMzQtMy0xMi0zNDUtMgorYWx3YXlzIFx1OTBmZFx1NWMwOSAxNDUtMzQtMy0xMjQ2LTUKK2Fsd2F5cyBcdTkwZmRcdTVlMDIgMTQ1LTM0LTMtMjQtMTU2LTUKK2Fsd2F5cyBcdTkwZmRcdTVlYzEgMTQ1LTM0LTMtMjQ1LTIzNDYtNQorYWx3YXlzIFx1OTBmZFx1NzIzZSAxNDUtMzQtMy0xNTYtNAorYWx3YXlzIFx1OTBmZFx1Nzc2MyAxNDUtMzQtMy0xNDUtMzQtMworYWx3YXlzIFx1OTBmZFx1N2Q3MSAxNDUtMzQtMy0xMjQtMTIzNDYtNAorYWx3YXlzIFx1OTBmZFx1OGVjZCAxNDUtMzQtMy0xMy0yNTYtMworYWx3YXlzIFx1OTBmZFx1OTA5MSAxNDUtMzQtMy0xNi01CithbHdheXMgXHU5MTA5XHU1YzBlIDE1LTQ2LTUtMTQ1LTE0Ni00CithbHdheXMgXHU5MTA5XHU5NTc3IDE1LTQ2LTMtMS0xMzQ2LTQKK2Fsd2F5cyBcdTkxNGJcdTk1NzcgMjQ1LTIzNC0yLTEtMTM0Ni00CithbHdheXMgXHU5MTRkXHU2YTAyIDEyMzQtMzU2LTUtMjM2LTUKK2Fsd2F5cyBcdTkxNGRcdTdkNjYgMTIzNC0zNTYtNS0xMy0xNi00CithbHdheXMgXHU5MTZjXHU2MWM5IDEyLTEyMzU2LTItMTM0NTYtNQorYWx3YXlzIFx1OTFjYlx1NTM3NyAyNC0xNTYtNS0xMy00NS01CithbHdheXMgXHU5MWNjXHU5NTc3IDE0LTE2LTQtMS0xMzQ2LTQKK2Fsd2F5cyBcdTkxY2RcdTRlNWQgMTItMTIzNDYtMi0xMy0yMzQtNAorYWx3YXlzIFx1OTFjZFx1NGYzMCAxMi0xMjM0Ni0yLTEzLTM0LTMKK2Fsd2F5cyBcdTkxY2RcdTRmODYgMTItMTIzNDYtMi0xNC0yNDU2LTIKK2Fsd2F5cyBcdTkxY2RcdTRmZWUgMTItMTIzNDYtMi0xNS0yMzQtMworYWx3YXlzIFx1OTFjZFx1NTE0NCAxMi0xMjM0Ni0yLTE1LTIzNS0zCithbHdheXMgXHU5MWNkXHU1MTQ5IDEyLTEyMzQ2LTItMTMtNDU2LTMKK2Fsd2F5cyBcdTkxY2RcdTUxNjUgMTItMTIzNDYtMi0xMjQ1LTM0LTUKK2Fsd2F5cyBcdTkxY2RcdTUyMGEgMTItMTIzNDYtMi0xMjMtMTIzNi0zCithbHdheXMgXHU5MWNkXHU1MzcwIDEyLTEyMzQ2LTItMTQ1Ni01CithbHdheXMgXHU5MWNkXHU1NmRlIDEyLTEyMzQ2LTItMTIzNS0xMjQ2LTIKK2Fsd2F5cyBcdTkxY2RcdTU3MGQgMTItMTIzNDYtMi0xMjQ2LTIKK2Fsd2F5cyBcdTkxY2RcdTU5NGYgMTItMTIzNDYtMi0xMjUtMTIzNTYtNQorYWx3YXlzIFx1OTFjZFx1NWE1YSAxMi0xMjM0Ni0yLTEyMzUtMTIzNDU2LTMKK2Fsd2F5cyBcdTkxY2RcdTViNmIgMTItMTIzNDYtMi0xNS0xMjM0NTYtMworYWx3YXlzIFx1OTFjZFx1NWI5YSAxMi0xMjM0Ni0yLTE0NS0xMzQ1Ni01CithbHdheXMgXHU5MWNkXHU1YmViIDEyLTEyMzQ2LTItMTUtMzQ2LTQKK2Fsd2F5cyBcdTkxY2RcdTVlZmEgMTItMTIzNDYtMi0xMy0yMzQ1LTUKK2Fsd2F5cyBcdTkxY2RcdTVmYTkgMTItMTIzNDYtMi0xMjM0NS0zNC01CithbHdheXMgXHU5MWNkXHU2MTc2IDEyLTEyMzQ2LTItMjQ1LTEzNDU2LTUKK2Fsd2F5cyBcdTkxY2RcdTYyODQgMTItMTIzNDYtMi0xMi0xNDYtMworYWx3YXlzIFx1OTFjZFx1NjMyZiAxMi0xMjM0Ni0yLTEtMTM2LTUKK2Fsd2F5cyBcdTkxY2RcdTY1NzQgMTItMTIzNDYtMi0xLTEzNTYtNAorYWx3YXlzIFx1OTFjZFx1NjViMCAxMi0xMjM0Ni0yLTE1LTE0NTYtMworYWx3YXlzIFx1OTFjZFx1NmQwYiAxMi0xMjM0Ni0yLTQ2LTIKK2Fsd2F5cyBcdTkxY2RcdTZlMmMgMTItMTIzNDYtMi0yNDUtMjM0Ni01CithbHdheXMgXHU5MWNkXHU2ZjE0IDEyLTEyMzQ2LTItMjM0NS00CithbHdheXMgXHU5MWNkXHU3MzcyIDEyLTEyMzQ2LTItMTIzNS0yNS01CithbHdheXMgXHU5MWNkXHU3M2ZlIDEyLTEyMzQ2LTItMTUtMjM0NS01CithbHdheXMgXHU5MWNkXHU3NTMzIDEyLTEyMzQ2LTItMjQtMTM2LTMKK2Fsd2F5cyBcdTkxY2RcdTc1OGEgMTItMTIzNDYtMi0xNDUtMzQ2LTIKK2Fsd2F5cyBcdTkxY2RcdTdkNDQgMTItMTIzNDYtMi0xMjUtMzQtNAorYWx3YXlzIFx1OTFjZFx1N2Y2ZSAxMi0xMjM0Ni0yLTEtMTU2LTUKK2Fsd2F5cyBcdTkxY2RcdTgwMDMgMTItMTIzNDYtMi0xMjMtMTQ2LTQKK2Fsd2F5cyBcdTkxY2RcdTg5MDcgMTItMTIzNDYtMi0xMjM0NS0zNC01CithbHdheXMgXHU5MWNkXHU4YTJkIDEyLTEyMzQ2LTItMjQtMjM0Ni01CithbHdheXMgXHU5MWNkXHU4ZTQ4IDEyLTEyMzQ2LTItMTQ1LTE0Ni01CithbHdheXMgXHU5MWNkXHU4ZmQ0IDEyLTEyMzQ2LTItMTIzNDUtMTIzNi00CithbHdheXMgXHU5MWNkXHU4ZmYwIDEyLTEyMzQ2LTItMjQtMzQtNQorYWx3YXlzIFx1OTFjZFx1OTAyMiAxMi0xMjM0Ni0yLTEyMzQ1LTEzNTYtMgorYWx3YXlzIFx1OTFjZFx1OTFjZCAxMi0xMjM0Ni0yLTEyLTEyMzQ2LTIKK2Fsd2F5cyBcdTkxY2RcdTk2N2QgMTItMTIzNDYtMi00Ni0yCithbHdheXMgXHU5MWQxXHU1YjUwIDEzLTE0NTYtMy0xMjUtMTU2LTEKK2Fsd2F5cyBcdTkxZDhcdTViNTAgMTQ1LTEzNDU2LTMtMTI1LTE1Ni0xCithbHdheXMgXHU5MWU2XHU1YjUwIDEyMy0xMjM1Ni01LTEyNS0xNTYtMQorYWx3YXlzIFx1OTI0NVx1ODQ1NyAxMy0xMjU2LTUtMS0zNC01CithbHdheXMgXHU5MjU3XHU1YjUwIDI0NS0yMzQ1LTItMTI1LTE1Ni0xCithbHdheXMgXHU5MjY0XHU1YjUwIDEzLTEyMzU2LTMtMTI1LTE1Ni0xCithbHdheXMgXHU5MjgwXHU1YjUwIDE0NTYtMi0xMjUtMTU2LTEKK2Fsd2F5cyBcdTkyODBcdTg4NGMgMTQ1Ni0yLTEyMzUtMTM0Ni0yCithbHdheXMgXHU5MmI3XHU1MDQ3IDE1LTI0Ni0zLTEzLTIzNDU2LTUKK2Fsd2F5cyBcdTkyZWFcdTRmNGQgMTIzNC0zNC01LTEyNDYtNQorYWx3YXlzIFx1OTJlYVx1NWI1MCAxMjM0LTM0LTUtMTI1LTE1Ni0xCithbHdheXMgXHU5MmVhXHU5NzYyIDEyMzQtMzQtNS0xMzQtMjM0NS01CithbHdheXMgXHU5MmY4XHU1YjUwIDEzLTEyNTYtNS0xMjUtMTU2LTEKK2Fsd2F5cyBcdTkzMjBcdTViNTAgMTQ1LTEzNDU2LTUtMTI1LTE1Ni0xCithbHdheXMgXHU5MzRhXHU1YjUwIDE0LTIzNDUtNS0xMjUtMTU2LTEKK2Fsd2F5cyBcdTkzNGJcdTViNTAgMTMtMjUtMy0xMjUtMTU2LTEKK2Fsd2F5cyBcdTkzOWFcdTViNTAgMTItMTI0Ni0yLTEyNS0xNTYtMQorYWx3YXlzIFx1OTNhY1x1NGVhYyAxMjM1LTE0Ni01LTEzLTEzNDU2LTMKK2Fsd2F5cyBcdTkzZTFcdTViNTAgMTMtMTM0NTYtNS0xMjUtMTU2LTEKK2Fsd2F5cyBcdTk0MzVcdTlhMGUgMTI0LTM0Ni00LTEzLTE2LTUKK2Fsd2F5cyBcdTk0NzBcdTUzMTkgMjQ2LTUtMjQtMTU2LTQKK2Fsd2F5cyBcdTk0NzJcdTVkNGMgMTUtNDYtMy0yNDUtMjM0NS01CithbHdheXMgXHU5NDdkXHU2MjEyIDEyNS0xMjQ1Ni01LTEzLTM0Ni01CithbHdheXMgXHU5NDdkXHU3N2YzIDEyNS0xMjQ1Ni01LTI0LTE1Ni0yCithbHdheXMgXHU5NDdmXHU1YjUwIDEyNS0xNDYtMi0xMjUtMTU2LTEKK2Fsd2F5cyBcdTk1NzdcdTRmN2YgMS0xMzQ2LTQtMjQtMTU2LTQKK2Fsd2F5cyBcdTk1NzdcdTUwNDcgMTItMTM0Ni0yLTEzLTIzNDU2LTUKK2Fsd2F5cyBcdTk1NzdcdTUwY2YgMS0xMzQ2LTQtMTUtNDYtNQorYWx3YXlzIFx1OTU3N1x1NTE0NCAxLTEzNDYtNC0xNS0yMzUtMworYWx3YXlzIFx1OTU3N1x1NTkyNyAxLTEzNDYtNC0xNDUtMzQ1LTUKK2Fsd2F5cyBcdTk1NzdcdTU5NzMgMS0xMzQ2LTQtMTM0NS0xMjU2LTQKK2Fsd2F5cyBcdTk1NzdcdTViNTAgMS0xMzQ2LTQtMTI1LTE1Ni00CithbHdheXMgXHU5NTc3XHU1YjZiIDEtMTM0Ni00LTE1LTEyMzQ1Ni0zCithbHdheXMgXHU5NTc3XHU1Yjk4IDEtMTM0Ni00LTEzLTEyNDU2LTMKK2Fsd2F5cyBcdTk1NzdcdTVlN2MgMS0xMzQ2LTQtMjM0LTUKK2Fsd2F5cyBcdTk1NzdcdTYyM2YgMS0xMzQ2LTQtMTIzNDUtMTM0Ni0yCithbHdheXMgXHU5NTc3XHU3NTM3IDEtMTM0Ni00LTEzNDUtMTIzNi0yCithbHdheXMgXHU5NTc3XHU4MDAxIDEtMTM0Ni00LTE0LTE0Ni00CithbHdheXMgXHU5NTc3XHU4MDA1IDEtMTM0Ni00LTEtMjM0Ni00CithbHdheXMgXHU5NTc3XHU4NDU3IDEtMTM0Ni00LTEtMjM0Ni0xCithbHdheXMgXHU5NTc3XHU4NjVmIDEyLTEzNDYtMi0xMjM1LTE0Ni0yCithbHdheXMgXHU5NTc3XHU4ZjI5IDEtMTM0Ni00LTEzNS0zNTYtNQorYWx3YXlzIFx1OTU3N1x1OTAzMiAxLTEzNDYtNC0xMy0xNDU2LTUKK2Fsd2F5cyBcdTk1ODBcdTViNTAgMTM0LTEzNi0yLTEyNS0xNTYtMQorYWx3YXlzIFx1OTU4MFx1Njg0NiAxMzQtMTM2LTItMTIzLTQ1Ni01CithbHdheXMgXHU5NTgwXHU2YWJiIDEzNC0xMzYtMi0xMjMtMTIzNi00CithbHdheXMgXHU5NTgwXHU3ZTJiIDEzNC0xMzYtMi0xMjM0NS0xMzU2LTUKK2Fsd2F5cyBcdTk1ODlcdTU4NWUgMTM1LTE2LTUtMTUtMjM0Ni01CithbHdheXMgXHU5NThiXHU4ODY5IDEyMy0yNDU2LTMtMTItMzQ1LTUKK2Fsd2F5cyBcdTk1OTJcdTY1NjMgMTUtMjM0NS0yLTE1LTEyMzYtNAorYWx3YXlzIFx1OTU5Mlx1N2E3YSAxNS0yMzQ1LTItMTIzLTEyMzQ2LTUKK2Fsd2F5cyBcdTk1OTNcdTYzYTUgMTMtMjM0NS01LTEzLTM0Ni0zCithbHdheXMgXHU5NTkzXHU2NWI3IDEzLTIzNDUtNS0xNDUtMTI0NTYtNQorYWx3YXlzIFx1OTU5M1x1NmI0NyAxMy0yMzQ1LTUtMTUtMzQ2LTMKK2Fsd2F5cyBcdTk1OTNcdThhZGMgMTMtMjM0NS01LTE0NS0zNDYtMgorYWx3YXlzIFx1OTU5M1x1OTY5NCAxMy0yMzQ1LTUtMTMtMjM0Ni0yCithbHdheXMgXHU5NTkzXHU5Njk5IDEzLTIzNDUtNS0xNS0xNi01CithbHdheXMgXHU5NWEzXHU1YjUwIDEzLTIzNDYtMi0xMjUtMTU2LTEKK2Fsd2F5cyBcdTk1YjFcdTUzNzcgMjM2LTUtMTMtNDUtNQorYWx3YXlzIFx1OTVkNVx1NTkzMSAyNDUtMjM2LTMtMjQtMTU2LTMKK2Fsd2F5cyBcdTk1ZDVcdTU5ODIgMjQ1LTIzNi0zLTEyNDUtMzQtMgorYWx3YXlzIFx1OTVkNVx1NmYwZiAyNDUtMjM2LTMtMTQtMTIzNTYtNQorYWx3YXlzIFx1OTVkNVx1NzU5MSAyNDUtMjM2LTMtMTYtMgorYWx3YXlzIFx1OTYzYlx1NTY4NyAxMjUtMzQtNC0xMjM1LTIzNDYtNQorYWx3YXlzIFx1OTYzYlx1NTg1ZSAxMjUtMzQtNC0xNS0yMzQ2LTUKK2Fsd2F5cyBcdTk2M2ZcdTRmZDcgMjM0Ni0zLTE1LTM0LTIKK2Fsd2F5cyBcdTk2M2ZcdThhZGIgMjM0Ni0zLTEyNTYtMgorYWx3YXlzIFx1OTY0NFx1NTQ4YyAxMjM0NS0zNC01LTEyMzUtMjM0Ni01CithbHdheXMgXHU5NjQ0XHU4NDU3IDEyMzQ1LTM0LTUtMS0yNS0yCithbHdheXMgXHU5NjRkXHU0ZjBmIDE1LTQ2LTItMTIzNDUtMzQtMgorYWx3YXlzIFx1OTY0ZFx1NWMwNyAxNS00Ni0yLTEzLTQ2LTUKK2Fsd2F5cyBcdTk2NGRcdTY1NzUgMTUtNDYtMi0xNDUtMTYtMgorYWx3YXlzIFx1OTY0ZFx1NjZmOCAxNS00Ni0yLTI0LTM0LTMKK2Fsd2F5cyBcdTk2NGRcdTY3MGQgMTUtNDYtMi0xMjM0NS0zNC0yCithbHdheXMgXHU5NjRkXHU5ZjhkIDE1LTQ2LTItMTQtMTIzNDYtMgorYWx3YXlzIFx1OTY2Mlx1NWI1MCA0NS01LTEyNS0xNTYtMQorYWx3YXlzIFx1OTY2Mlx1OTU3NyA0NS01LTEtMTM0Ni00CithbHdheXMgXHU5NjYzXHU1YjUwIDEtMTM2LTUtMTI1LTE1Ni0xCithbHdheXMgXHU5Njc4XHUzMDAxIDE0LTIzNC01LTYtMAorYWx3YXlzIFx1OTY4YVx1OTU3NyAxNDUtMTI0Ni01LTEtMTM0Ni00CithbHdheXMgXHU5NmE4XHU4MjA4IDE1LTEyNDYtMi0xNS0xMzQ1Ni01CithbHdheXMgXHU5NmIxXHU2YzkyIDE0NTYtNC0xMzQtMTI2LTUKK2Fsd2F5cyBcdTk2YzVcdTZhMDIgMjM0NTYtNC0yMzYtNQorYWx3YXlzIFx1OTZkOVx1OTFjZCAyNC00NTYtMy0xMi0xMjM0Ni0yCithbHdheXMgXHU5NmUyXHU5NTkzIDE0LTE2LTItMTMtMjM0NS01CithbHdheXMgXHU5NmUzXHU1NzMwIDEzNDUtMTIzNi01LTE0NS0xNi01CithbHdheXMgXHU5NmUzXHU2YzExIDEzNDUtMTIzNi01LTEzNC0xNDU2LTIKK2Fsd2F5cyBcdTk2ZTNcdTgwZjggMTM0NS0xMjM2LTUtMTUtMjM1LTMKK2Fsd2F5cyBcdTk2ZWFcdTgzMDQgMTUtMjM2LTQtMTMtMjM0NTYtMworYWx3YXlzIFx1OTZmYlx1NzEwYSAxNDUtMjM0NS01LTEyMzUtMTIzNi01CithbHdheXMgXHU5NzMyXHU3NjdkIDE0LTEyMzU2LTUtMTM1LTI0NTYtMgorYWx3YXlzIFx1OTczMlx1NzZmOCAxNC0xMjM1Ni01LTE1LTQ2LTUKK2Fsd2F5cyBcdTk3MzJcdTgxYzkgMTQtMTIzNTYtNS0xNC0yMzQ1LTQKK2Fsd2F5cyBcdTk3MzJcdTk3NjIgMTQtMTIzNTYtNS0xMzQtMjM0NS01CithbHdheXMgXHU5NzU2XHU5NmUzIDEzLTEzNDU2LTUtMTM0NS0xMjM2LTUKK2Fsd2F5cyBcdTk3NWNcdTgxMDggMTMtMTM0NTYtNS0xMzQtMjQ1Ni01CithbHdheXMgXHU5NzVlXHU1MjA2IDEyMzQ1LTM1Ni0zLTEyMzQ1LTEzNi01CithbHdheXMgXHU5NzVlXHU5NmUzIDEyMzQ1LTM1Ni0zLTEzNDUtMTIzNi01CithbHdheXMgXHU5NzYyXHU1YjUwIDEzNC0yMzQ1LTUtMTI1LTE1Ni0xCithbHdheXMgXHU5Nzc0XHU1YjUwIDE1LTIzNi0zLTEyNS0xNTYtMQorYWx3YXlzIFx1OTc4Ylx1NWI1MCAxNS0zNDYtMi0xMjUtMTU2LTEKK2Fsd2F5cyBcdTk3OGRcdTViNTAgMTIzNi0zLTEyNS0xNTYtMQorYWx3YXlzIFx1OTdmM1x1NmEwMiAxNDU2LTMtMjM2LTUKK2Fsd2F5cyBcdTk3ZmZcdTYxYzkgMTUtNDYtNC0xMzQ1Ni01CithbHdheXMgXHU5ODA2XHU2MWM5IDI0LTEyMzQ1Ni01LTEzNDU2LTUKK2Fsd2F5cyBcdTk4MThcdTViNTAgMTQtMTM0NTYtNC0xMjUtMTU2LTEKK2Fsd2F5cyBcdTk4MmRcdTViNTAgMTI0LTEyMzU2LTItMTI1LTE1Ni0xCithbHdheXMgXHU5ODM4XHU1YjUwIDEzLTEzNDU2LTQtMTI1LTE1Ni0xCithbHdheXMgXHU5ODZmXHU4NDU3IDE1LTIzNDUtNC0xLTM0LTUKK2Fsd2F5cyBcdTk4ZGJcdTZmMzIgMTIzNDUtMzU2LTMtMS0xMzQ2LTUKK2Fsd2F5cyBcdTk5MDNcdTViNTAgMTMtMjQ2LTQtMTI1LTE1Ni0xCithbHdheXMgXHU5OTBhXHU1MjA2IDQ2LTQtMTIzNDUtMTM2LTUKK2Fsd2F5cyBcdTk5MThcdTgyMDggMTI1Ni0yLTE1LTEzNDU2LTUKK2Fsd2F5cyBcdTk5MjhcdTViNTAgMTMtMTI0NTYtNC0xMjUtMTU2LTEKK2Fsd2F5cyBcdTk5MjhcdTk1NzcgMTMtMTI0NTYtNC0xLTEzNDYtNAorYWx3YXlzIFx1OTk5Nlx1NzZmOCAyNC0xMjM1Ni00LTE1LTQ2LTUKK2Fsd2F5cyBcdTk5OTZcdTkwZmQgMjQtMTIzNTYtNC0xNDUtMzQtMworYWx3YXlzIFx1OTk5Nlx1OTU3NyAyNC0xMjM1Ni00LTEtMTM0Ni00CithbHdheXMgXHU5OWFjXHU1YjUwIDEzNC0zNDUtNC0xMjUtMTU2LTEKK2Fsd2F5cyBcdTk5YWNcdTg2NGUgMTM0LTM0NS00LTEyMzUtMzQtMworYWx3YXlzIFx1OTlhZVx1NmNiMyAxMjM0LTEzNDU2LTItMTIzNS0yMzQ2LTIKK2Fsd2F5cyBcdTlhMGVcdTUxNzUgMTMtMTYtNS0xMzUtMTM0NTYtMworYWx3YXlzIFx1OWExOVx1NWI1MCAxMjM0LTIzNDUtNS0xMjUtMTU2LTEKK2Fsd2F5cyBcdTlhM2VcdTViNTAgMTQtMjUtMi0xMjUtMTU2LTEKK2Fsd2F5cyBcdTlhNGRcdTlhMGUgMTUtMjQ2LTMtMTMtMTYtNQorYWx3YXlzIFx1OWE1NVx1NmE2YiAxMy0yNDYtMy0xMjM1LTEzNTYtNQorYWx3YXlzIFx1OWFhOFx1NWI1MCAxMy0zNC00LTEyNS0xNTYtMQorYWx3YXlzIFx1OWFhOFx1NzZmOCAxMy0zNC00LTE1LTQ2LTUKK2Fsd2F5cyBcdTlhZDRcdTgwZDYgMTI0LTE2LTQtMTIzNC0xMjM2LTIKK2Fsd2F5cyBcdTlhZDhcdTY2ZjQgMTMtMTQ2LTMtMTMtMTM1Ni0zCithbHdheXMgXHU5YWQ4XHU4MjA4IDEzLTE0Ni0zLTE1LTEzNDU2LTUKK2Fsd2F5cyBcdTlhZDhcdTllOTcgMTMtMTQ2LTMtMTQtMTYtMgorYWx3YXlzIFx1OWIwNlx1NjU2MyAxNS0xMjM0Ni0zLTE1LTEyMzYtNAorYWx3YXlzIFx1OWIwZFx1NWI1MCAxMjM1LTM0LTItMTI1LTE1Ni0xCithbHdheXMgXHU5YjFhXHU1YjUwIDE1LTEyNTYtMy0xMjUtMTU2LTEKK2Fsd2F5cyBcdTliM2NcdTViNTAgMTMtMTI0Ni00LTEyNS0xNTYtMQorYWx3YXlzIFx1OWJhZVx1NWMxMSAxNS0yMzQ1LTQtMjQtMTQ2LTQKK2Fsd2F5cyBcdTliYWVcdTYwNjUgMTUtMjM0NS00LTEyLTE1Ni00CithbHdheXMgXHU5ZDI4XHU1YjUwIDIzNDU2LTMtMTI1LTE1Ni0xCithbHdheXMgXHU5ZDNiXHU3MjJhIDEyMzUtMTIzNDYtMi0xLTE0Ni00CithbHdheXMgXHU5ZDNmXHU1YjUwIDEzLTIzNDYtMy0xMjUtMTU2LTEKK2Fsd2F5cyBcdTlkNjBcdTc2ODQgMTIzNS0zNC0yLTE0NS0xNi01CithbHdheXMgXHU5ZWE1XHU1YjUwIDEzNC0yNDU2LTUtMTI1LTE1Ni0xCithbHdheXMgXHU5ZWJiXHU1YjUwIDEzNC0zNDUtMi0xMjUtMTU2LTEKK2Fsd2F5cyBcdTllYzNcdTUxYTAgMTIzNS00NTYtMi0xMy0xMjQ1Ni0zCithbHdheXMgXHU5ZWRlXHU1YjUwIDE0NS0yMzQ1LTQtMTI1LTE1Ni0xCithbHdheXMgXHU5ZjEzXHU4YjVmIDEzLTM0LTQtMTI1LTE0Ni01CithbHdheXMgXHU5ZjNiXHU1YjUwIDEzNS0xNi0yLTEyNS0xNTYtMQorYWx3YXlzIFx1OWY5Y1x1ODMzMiAyNDUtMjM0LTMtMjQ1LTE1Ni0yCithbHdheXMgXHU5ZjljXHU4OGMyIDEzLTI1Ni0zLTE0LTM0Ni01CmRpZmYgLS1naXQgYS9UYWJsZXMvQ29udHJhY3Rpb24venUuY3RiIGIvVGFibGVzL0NvbnRyYWN0aW9uL3p1LmN0YgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMDNiYmQzCi0tLSAvZGV2L251bGwKKysrIGIvVGFibGVzL0NvbnRyYWN0aW9uL3p1LmN0YgpAQCAtMCwwICsxLDM0IEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisjICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorIworIyBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisjCisjIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisjCisjIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyMgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorIyBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyMKKyMgV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworIworIyBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIyBCUkxUVFkgQ29udHJhY3Rpb24gVGFibGUgLSBadWx1IChjb250cmFjdGVkKQorIworIyBTYW11ZWwgVGhpYmF1bHQgPHNhbXVlbC50aGliYXVsdEBlbnMtbHlvbi5vcmc+CisjIAorIyBUaGlzIHRhYmxlIGlzIGJhc2VkIG9uIHRoZSBVbmVzY28gcmVwb3J0IG9uIHRoZSBwcm9ncmVzcyBvZiB1bmlmaWNhdGlvbiBvZgorIyBicmFpbGxlIHdyaXRpbmcgwqvCoEwnw4lDUklUVVJFIEJSQUlMTEUgREFOUyBMRSBNT05ERcKgwrssIGJ5IFNpciBDbHV0aGEKKyMgTUFDS0VOWklFOiBodHRwOi8vdW5lc2RvYy51bmVzY28ub3JnL2ltYWdlcy8wMDEzLzAwMTM1Mi8xMzUyNTFmby5wZGYKKyMgVGhlIGRvY3VtZW50IGlzIGRhdGVkIDE5NTQsIHNvIHRoaXMgdGFibGUgbWF5IGJlIHF1aXRlIG91dGRhdGVkLgorCitpbmNsdWRlIGxldHRlcnMtbGF0aW4uY3RpCisKK2Fsd2F5cyAnYiAyMworYWx3YXlzIGdxIDEyNgorCisjIGlubGluZSBjb250cmFjdGlvbiBvZiBlbW9qaSBkZXNjcmlwdGlvbnMKK2Vtb2ppIHp1CmRpZmYgLS1naXQgYS9UYWJsZXMvSW5wdXQvYWwvYWJ0X2Jhc2ljLmt0aSBiL1RhYmxlcy9JbnB1dC9hbC9hYnRfYmFzaWMua3RpCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ3NjFiNzMKLS0tIC9kZXYvbnVsbAorKysgYi9UYWJsZXMvSW5wdXQvYWwvYWJ0X2Jhc2ljLmt0aQpAQCAtMCwwICsxLDk3IEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisjICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorIworIyBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisjCisjIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisjCisjIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyMgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorIyBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyMKKyMgV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworIworIyBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIyBUaGlzIGtleSBzdWJ0YWJsZSBpcyBmb3IgQWx2YSBtb2RlbHMgd2hpY2ggaGF2ZSB0aGUgYmFzaWMgQUJUL0RlbHBoaSBrZXlzLgorbm90ZSBUaGUgdHdvIGxvbmcga2V5cyBhcmUgbmFtZWQgTGVmdCBhbmQgUmlnaHQuCitub3RlIFRoZSBzbWFsbCBrZXlzIGltbWVkaWF0ZWx5IHRvIHRoZWlyIGxlZnQgYW5kIHJpZ2h0IGFyZSBuYW1lZCBVcCBhbmQgRG93bi4KK25vdGUgVGhlIHRocmVlIHNtYWxsIGtleXMgYXQgdGhlIGxlZnQgYXJlIG5hbWVkIFByb2csIEhvbWUsIGFuZCBDdXJzb3IuCisKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgRGVmYXVsdCBCaW5kaW5ncyAjCisjIyMjIyMjIyMjIyMjIyMjIyMjIworCitiaW5kICFMZWZ0IEZXSU5MVAorYmluZCAhUmlnaHQgRldJTlJUCitiaW5kIEhvbWUrIUxlZnQgTE5CRUcKK2JpbmQgSG9tZSshUmlnaHQgTE5FTkQKK2JpbmQgQ3Vyc29yKyFMZWZ0IEhXSU5MVAorYmluZCBDdXJzb3IrIVJpZ2h0IEhXSU5SVAorYmluZCBQcm9nKyFMZWZ0IENIUkxUCitiaW5kIFByb2crIVJpZ2h0IENIUlJUCisKK2JpbmQgIVVwIExOVVAKK2JpbmQgIURvd24gTE5ETgorYmluZCBIb21lIFRPUF9MRUZUCitiaW5kIEhvbWUrIVVwIFRPUAorYmluZCBIb21lKyFEb3duIEJPVAorYmluZCBDdXJzb3IrIVVwIEFUVFJVUAorYmluZCBDdXJzb3IrIURvd24gQVRUUkROCitiaW5kIEhvbWUrQ3Vyc29yKyFVcCBQUkRJRkxOCitiaW5kIEhvbWUrQ3Vyc29yKyFEb3duIE5YRElGTE4KK2JpbmQgUHJvZytIb21lKyFVcCBQUlBST01QVAorCitiaW5kIEhvbWUrQ3Vyc29yIENTUlRSSworYmluZCBDdXJzb3IgUkVUVVJOCisKK2JpbmQgIVJvdXRpbmdLZXkxIFJPVVRFCitiaW5kIFByb2crSG9tZSshUm91dGluZ0tleTEgREVTQ0NIQVIKK2JpbmQgSG9tZStDdXJzb3IrIVJvdXRpbmdLZXkxIFNFVExFRlQKKworYmluZCBQcm9nKyFSb3V0aW5nS2V5MSBDTElQX05FVworYmluZCBIb21lKyFSb3V0aW5nS2V5MSBDT1BZX1JFQ1QKK2JpbmQgUHJvZytIb21lKyFEb3duIFBBU1RFCisKK2JpbmQgUHJvZyBIRUxQCitiaW5kIFByb2crSG9tZSBESVNQTUQKK2JpbmQgUHJvZytDdXJzb3IgUFJFRk1FTlUKK2JpbmQgUHJvZyshVXAgSU5GTworYmluZCBQcm9nKyFEb3duIEZSRUVaRQorCitiaW5kICFTdGF0dXMxQSBDQVBCTElOSworYmluZCAhU3RhdHVzMUIgQ1NSVklTCitiaW5kICFTdGF0dXMxQyBDU1JCTElOSworYmluZCBDdXJzb3IrIVN0YXR1czFBIFNJWERPVFMKK2JpbmQgQ3Vyc29yKyFTdGF0dXMxQiBDU1JTSVpFCitiaW5kIEN1cnNvcishU3RhdHVzMUMgU0xJREVXSU4KKworYmluZCBIb21lK0N1cnNvcishTGVmdCBNVVRFCitiaW5kIEhvbWUrQ3Vyc29yKyFSaWdodCBTQVlfTElORQorYmluZCBQcm9nK0hvbWUrIUxlZnQgUkVTVEFSVFNQRUVDSAorYmluZCBQcm9nK0hvbWUrIVJpZ2h0IFNBWV9CRUxPVworCisKKyMjIyMjIyMjIyMjIyMjIyMjCisjIE1lbnUgQmluZGluZ3MgIworIyMjIyMjIyMjIyMjIyMjIyMKKworY29udGV4dCBtZW51CisKK2JpbmQgIVVwIE1FTlVfUFJFVl9JVEVNCitiaW5kICFEb3duIE1FTlVfTkVYVF9JVEVNCitiaW5kIEhvbWUrIVVwIE1FTlVfRklSU1RfSVRFTQorYmluZCBIb21lKyFEb3duIE1FTlVfTEFTVF9JVEVNCisKK2JpbmQgIUxlZnQgRldJTkxUCitiaW5kICFSaWdodCBGV0lOUlQKK2JpbmQgSG9tZSshTGVmdCBQUkVGTE9BRAorYmluZCBIb21lKyFSaWdodCBQUkVGU0FWRQorCitiaW5kIFByb2cgUFJFRk1FTlUKK2JpbmQgSG9tZSBNRU5VX1BSRVZfU0VUVElORworYmluZCBDdXJzb3IgTUVOVV9ORVhUX1NFVFRJTkcKZGlmZiAtLWdpdCBhL1RhYmxlcy9JbnB1dC9hbC9hYnRfZXh0cmEua3RpIGIvVGFibGVzL0lucHV0L2FsL2FidF9leHRyYS5rdGkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmVjNTU2ZAotLS0gL2Rldi9udWxsCisrKyBiL1RhYmxlcy9JbnB1dC9hbC9hYnRfZXh0cmEua3RpCkBAIC0wLDAgKzEsMjEgQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyMgICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisjCisjIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyMKKyMgQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjIFRoaXMga2V5IHN1YnRhYmxlIGlzIGZvciBBbHZhIG1vZGVscyB3aGljaCBoYXZlIHRoZSBleHRyYSBBQlQvRGVscGhpIGtleXMuCitub3RlIFRoZSB0aHJlZSBzbWFsbCBrZXlzIGF0IHRoZSByaWdodCBhcmUgbmFtZWQgQ3Vyc29yMiwgSG9tZTIsIGFuZCBQcm9nMi4KKwpkaWZmIC0tZ2l0IGEvVGFibGVzL0lucHV0L2FsL2FidF9sYXJnZS5rdGIgYi9UYWJsZXMvSW5wdXQvYWwvYWJ0X2xhcmdlLmt0YgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kODNlY2NkCi0tLSAvZGV2L251bGwKKysrIGIvVGFibGVzL0lucHV0L2FsL2FidF9sYXJnZS5rdGIKQEAgLTAsMCArMSwyNiBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorIyAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyMKKyMgQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorIworIyBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorIworIyBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisjIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyMgbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisjCisjIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK3RpdGxlIEFsdmEgQUJUIDM4MCAvIERlbHBoaSA0ODAKKworY29udGV4dCBkZWZhdWx0CitpbmNsdWRlIGFidF9iYXNpYy5rdGkKKworY29udGV4dCBkZWZhdWx0CitpbmNsdWRlIGFidF9leHRyYS5rdGkKKwpkaWZmIC0tZ2l0IGEvVGFibGVzL0lucHV0L2FsL2FidF9zbWFsbC5rdGIgYi9UYWJsZXMvSW5wdXQvYWwvYWJ0X3NtYWxsLmt0YgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MDgwZDk0Ci0tLSAvZGV2L251bGwKKysrIGIvVGFibGVzL0lucHV0L2FsL2FidF9zbWFsbC5rdGIKQEAgLTAsMCArMSwyMyBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorIyAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyMKKyMgQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorIworIyBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorIworIyBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisjIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyMgbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisjCisjIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK3RpdGxlIEFsdmEgQUJUIDMyMCwzNDAgLyBEZWxwaGkgNDIwLDQ0MAorCitjb250ZXh0IGRlZmF1bHQKK2luY2x1ZGUgYWJ0X2Jhc2ljLmt0aQorCmRpZmYgLS1naXQgYS9UYWJsZXMvSW5wdXQvYWwvYmMtZXRvdWNoLmt0aSBiL1RhYmxlcy9JbnB1dC9hbC9iYy1ldG91Y2gua3RpCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE0M2Y2ZTcKLS0tIC9kZXYvbnVsbAorKysgYi9UYWJsZXMvSW5wdXQvYWwvYmMtZXRvdWNoLmt0aQpAQCAtMCwwICsxLDIzIEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisjICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorIworIyBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisjCisjIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisjCisjIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyMgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorIyBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyMKKyMgV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworIworIyBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworbm90ZSBUaGVyZSBhcmUgZm91ciBFVG91Y2gga2V5cywgdHdvIGF0IGVhY2ggZW5kIG9mIHRoZSB0ZXh0IGNlbGwgYXJlYS4KK25vdGUgKiBFYWNoIGlzIHN1Ym5hbWVkIGFjY29yZGluZyB0byB0aGUgc2lkZSBpdCdzIG9uIChMZWZ0LCBSaWdodCksCitub3RlICogYW5kIGFjY29yZGluZyB0byBpdHMgcG9zaXRpb24gb24gdGhhdCBzaWRlIChSZWFyLCBGcm9udCkuCitub3RlICogVGhlIHR3byBSZWFyIGtleXMgYXJlIGlkZW50aWZpZWQgYnkgdHdvIHZlcnRpY2FsIGJhcnMuCitub3RlICogVGhlIHR3byBGcm9udCBrZXlzIGFyZSBpZGVudGlmaWVkIGJ5IG9uZSBob3Jpem9udGFsIGJhci4KZGlmZiAtLWdpdCBhL1RhYmxlcy9JbnB1dC9hbC9iYy1zbWFydHBhZC5rdGkgYi9UYWJsZXMvSW5wdXQvYWwvYmMtc21hcnRwYWQua3RpCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA1Y2RhZjQKLS0tIC9kZXYvbnVsbAorKysgYi9UYWJsZXMvSW5wdXQvYWwvYmMtc21hcnRwYWQua3RpCkBAIC0wLDAgKzEsODUgQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyMgICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisjCisjIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyMKKyMgQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitub3RlICogVGhlIG91dGVyIGtleSBvbiB0aGUgbGVmdCwgaWRlbnRpZmllZCBieSB0aHJlZSBob3Jpem9udGFsIGJhcnMsIGlzIHN1Ym5hbWVkIEYxLgorbm90ZSAqIFRoZSBpbm5lciBrZXkgb24gdGhlIGxlZnQsIGlkZW50aWZpZWQgYnkgb25lIGhvcml6b250YWwgYmFyLCBpcyBzdWJuYW1lZCBGMi4KK25vdGUgKiBUaGUgaW5uZXIga2V5IG9uIHRoZSByaWdodCwgaWRlbnRpZmllZCBieSBvbmUgdmVydGljYWwgYmFyLCBpcyBzdWJuYW1lZCBGMy4KK25vdGUgKiBUaGUgb3V0ZXIga2V5IG9uIHRoZSByaWdodCwgaWRlbnRpZmllZCBieSB0aHJlZSB2ZXJ0aWNhbCBiYXJzLCBpcyBzdWJuYW1lZCBGNC4KK25vdGUgKiBUaGUga2V5cyBpbiB0aGUgbWlkZGxlIGZvcm0gYSBmaXZlLXdheSBkaXJlY3Rpb25hbCBwYWQ6Citub3RlICsgVGhlIHJvdW5kIGtleSBpbiB0aGUgbWlkZGxlIGlzIHN1Ym5hbWVkIEVudGVyLgorbm90ZSArIFRoZSBzaG9ydCwgdGhpbiBrZXlzIHRoYXQgZm9ybSBhIHNxdWFyZSBhcm91bmQgaXQgYXJlIHN1Ym5hbWVkIExlZnQsIFJpZ2h0LCBVcCwgYW5kIERvd24uCisKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgRGVmYXVsdCBCaW5kaW5ncyAjCisjIyMjIyMjIyMjIyMjIyMjIyMjIworCitiaW5kIFNtYXJ0cGFkTGVmdCBLRVlfQ1VSU09SX0xFRlQKK2JpbmQgU21hcnRwYWRSaWdodCBLRVlfQ1VSU09SX1JJR0hUCitiaW5kIFNtYXJ0cGFkVXAgS0VZX0NVUlNPUl9VUAorYmluZCBTbWFydHBhZERvd24gS0VZX0NVUlNPUl9ET1dOCitiaW5kIFNtYXJ0cGFkRW50ZXIgUEFTVEUKKworYmluZCBTbWFydHBhZEYyIFRJTUUKKworYmluZCBTbWFydHBhZEYxK1NtYXJ0cGFkTGVmdCBTV0lUQ0hWVF9QUkVWCitiaW5kIFNtYXJ0cGFkRjErU21hcnRwYWRSaWdodCBTV0lUQ0hWVF9ORVhUCitiaW5kIFNtYXJ0cGFkRjErU21hcnRwYWRFbnRlciBLRVlfSU5TRVJUCitiaW5kIFNtYXJ0cGFkRjErIVJvdXRpbmdLZXkxIFNXSVRDSFZUCisKK2JpbmQgU21hcnRwYWRGMitTbWFydHBhZFVwIEtFWV9QQUdFX1VQCitiaW5kIFNtYXJ0cGFkRjIrU21hcnRwYWREb3duIEtFWV9QQUdFX0RPV04KK2JpbmQgU21hcnRwYWRGMitTbWFydHBhZExlZnQgS0VZX0hPTUUKK2JpbmQgU21hcnRwYWRGMitTbWFydHBhZFJpZ2h0IEtFWV9FTkQKK2JpbmQgU21hcnRwYWRGMitTbWFydHBhZEVudGVyIEtFWV9ERUxFVEUKK2JpbmQgU21hcnRwYWRGMishUm91dGluZ0tleTEgS0VZX0ZVTkNUSU9OCisKK2JpbmQgU21hcnRwYWRGMytTbWFydHBhZEY0IE1VVEUKKworYmluZCBTbWFydHBhZEYzK1NtYXJ0cGFkUmlnaHQgU0FZX0xJTkUKK2JpbmQgU21hcnRwYWRGMytTbWFydHBhZFVwIFNBWV9BQk9WRQorYmluZCBTbWFydHBhZEYzK1NtYXJ0cGFkRG93biBTQVlfQkVMT1cKK2JpbmQgU21hcnRwYWRGMytTbWFydHBhZEVudGVyIFNQS0hPTUUKKworYmluZCBTbWFydHBhZEY0K1NtYXJ0cGFkTGVmdCBTQVlfU0xPV0VSCitiaW5kIFNtYXJ0cGFkRjQrU21hcnRwYWRSaWdodCBTQVlfRkFTVEVSCitiaW5kIFNtYXJ0cGFkRjQrU21hcnRwYWREb3duIFNBWV9TT0ZURVIKK2JpbmQgU21hcnRwYWRGNCtTbWFydHBhZFVwIFNBWV9MT1VERVIKK2JpbmQgU21hcnRwYWRGNCtTbWFydHBhZEVudGVyIEFVVE9TUEVBSworCitiaW5kIFNtYXJ0cGFkRjErU21hcnRwYWRGMitTbWFydHBhZEVudGVyIFJFU1RBUlRCUkwKK2JpbmQgU21hcnRwYWRGMytTbWFydHBhZEY0K1NtYXJ0cGFkRW50ZXIgUkVTVEFSVFNQRUVDSAorCisKKyMjIyMjIyMjIyMjIyMjIyMjCisjIE1lbnUgQmluZGluZ3MgIworIyMjIyMjIyMjIyMjIyMjIyMKKworY29udGV4dCBtZW51CisKK2JpbmQgU21hcnRwYWRGMSBQUkVGTUVOVQorYmluZCBTbWFydHBhZEYyIE1FTlVfUFJFVl9MRVZFTAorYmluZCBTbWFydHBhZEY0IFBSRUZMT0FECisKK2JpbmQgU21hcnRwYWRVcCBNRU5VX1BSRVZfSVRFTQorYmluZCBTbWFydHBhZERvd24gTUVOVV9ORVhUX0lURU0KK2JpbmQgU21hcnRwYWRMZWZ0IE1FTlVfUFJFVl9TRVRUSU5HCitiaW5kIFNtYXJ0cGFkUmlnaHQgTUVOVV9ORVhUX1NFVFRJTkcKK2JpbmQgU21hcnRwYWRFbnRlciBQUkVGU0FWRQorCisKZGlmZiAtLWdpdCBhL1RhYmxlcy9JbnB1dC9hbC9iYy10aHVtYi5rdGkgYi9UYWJsZXMvSW5wdXQvYWwvYmMtdGh1bWIua3RpCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIxMDNmYWMKLS0tIC9kZXYvbnVsbAorKysgYi9UYWJsZXMvSW5wdXQvYWwvYmMtdGh1bWIua3RpCkBAIC0wLDAgKzEsMjMgQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyMgICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisjCisjIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyMKKyMgQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitub3RlICogVGhlIEhvbWUga2V5IGlzIGlkZW50aWZpZWQgYnkgYSB2ZXJ0aWNhbCBiYXIgaW4gdGhlIG1pZGRsZS4KK25vdGUgKiBUaGUgTGVmdCBrZXkgaXMgaWRlbnRpZmllZCBieSBhIHZlcnRpY2FsIGJhciBuZWFyIGl0cyBsZWZ0IGVkZ2UuCitub3RlICogVGhlIFJpZ2h0IGtleSBpcyBpZGVudGlmaWVkIGJ5IGEgdmVydGljYWwgYmFyIG5lYXIgaXRzIHJpZ2h0IGVkZ2UuCitub3RlICogVGhlIFVwIGtleSBpcyBpZGVudGlmaWVkIGJ5IGEgaG9yaXpvbnRhbCBiYXIgYWxvbmcgaXRzIHRvcCBlZGdlLgorbm90ZSAqIFRoZSBEb3duIGtleSBpcyBpZGVudGlmaWVkIGJ5IGEgaG9yaXpvbnRhbCBiYXIgYWxvbmcgaXRzIGJvdHRvbSBlZGdlLgpkaWZmIC0tZ2l0IGEvVGFibGVzL0lucHV0L2FsL2JjLmt0aSBiL1RhYmxlcy9JbnB1dC9hbC9iYy5rdGkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWExMjAwZAotLS0gL2Rldi9udWxsCisrKyBiL1RhYmxlcy9JbnB1dC9hbC9iYy5rdGkKQEAgLTAsMCArMSwxMjAgQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyMgICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisjCisjIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyMKKyMgQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBEZWZhdWx0IEJpbmRpbmdzICMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK2JpbmQgRVRvdWNoTGVmdFJlYXIrRVRvdWNoUmlnaHRSZWFyIEhFTFAKK2JpbmQgRVRvdWNoTGVmdFJlYXIrRVRvdWNoUmlnaHRGcm9udCBMRUFSTgorYmluZCBFVG91Y2hMZWZ0RnJvbnQrRVRvdWNoUmlnaHRSZWFyIElORk8KK2JpbmQgRVRvdWNoTGVmdEZyb250K0VUb3VjaFJpZ2h0RnJvbnQgUFJFRk1FTlUKKworYmluZCBUaHVtYlVwKyFUaHVtYkRvd24gQ1NSVFJLK29uCitiaW5kIFRodW1iRG93bishVGh1bWJVcCBDU1JUUksrb2ZmCitiaW5kIFRodW1iSG9tZSBSRVRVUk4KK2JpbmQgVGh1bWJMZWZ0K1RodW1iUmlnaHQgQ1NSSk1QX1ZFUlQKKworYmluZCBUaHVtYlVwIExOVVAKK2JpbmQgVGh1bWJEb3duIExORE4KK2JpbmQgVGh1bWJMZWZ0IEZXSU5MVAorYmluZCBUaHVtYlJpZ2h0IEZXSU5SVAorCitiaW5kIFRodW1iSG9tZStUaHVtYlVwIFBSRElGTE4KK2JpbmQgVGh1bWJIb21lK1RodW1iRG93biBOWERJRkxOCitiaW5kIFRodW1iSG9tZStUaHVtYkxlZnQgRldJTkxUU0tJUAorYmluZCBUaHVtYkhvbWUrVGh1bWJSaWdodCBGV0lOUlRTS0lQCisKK2JpbmQgVGh1bWJMZWZ0K1RodW1iVXAgVE9QX0xFRlQKK2JpbmQgVGh1bWJMZWZ0K1RodW1iRG93biBCT1RfTEVGVAorYmluZCBUaHVtYlJpZ2h0K1RodW1iVXAgQVRUUlVQCitiaW5kIFRodW1iUmlnaHQrVGh1bWJEb3duIEFUVFJETgorCitiaW5kIEVUb3VjaExlZnRSZWFyK1RodW1iVXAgUFJQUk9NUFQKK2JpbmQgRVRvdWNoTGVmdFJlYXIrVGh1bWJEb3duIE5YUFJPTVBUCitiaW5kIEVUb3VjaExlZnRGcm9udCtUaHVtYlVwIFBSUEdSUEgKK2JpbmQgRVRvdWNoTGVmdEZyb250K1RodW1iRG93biBOWFBHUlBICitiaW5kIEVUb3VjaFJpZ2h0UmVhcitUaHVtYlVwIFBSU0VBUkNICitiaW5kIEVUb3VjaFJpZ2h0UmVhcitUaHVtYkRvd24gTlhTRUFSQ0gKKworYmluZCBFVG91Y2hMZWZ0UmVhciBMTkJFRworYmluZCBFVG91Y2hSaWdodFJlYXIgTE5FTkQKK2JpbmQgRVRvdWNoTGVmdEZyb250IENIUkxUCitiaW5kIEVUb3VjaFJpZ2h0RnJvbnQgQ0hSUlQKKworYmluZCBSb3V0aW5nS2V5MSBST1VURQorCitiaW5kIEVUb3VjaExlZnRSZWFyK0VUb3VjaExlZnRGcm9udCtSb3V0aW5nS2V5MSBERVNDQ0hBUgorYmluZCBSb3V0aW5nS2V5MSshUm91dGluZ0tleTEgQ0xJUF9DT1BZCitiaW5kIEVUb3VjaExlZnRSZWFyK1JvdXRpbmdLZXkxIENMSVBfTkVXCitiaW5kIEVUb3VjaExlZnRGcm9udCtSb3V0aW5nS2V5MSBDTElQX0FERAorYmluZCBFVG91Y2hSaWdodFJlYXIrUm91dGluZ0tleTEgQ09QWV9MSU5FCitiaW5kIEVUb3VjaFJpZ2h0RnJvbnQrUm91dGluZ0tleTEgQ09QWV9SRUNUCitiaW5kIEVUb3VjaFJpZ2h0UmVhcitFVG91Y2hSaWdodEZyb250IFBBU1RFCisKK2JpbmQgVGh1bWJMZWZ0K1JvdXRpbmdLZXkxIFBSSU5ERU5UCitiaW5kIFRodW1iUmlnaHQrUm91dGluZ0tleTEgTlhJTkRFTlQKK2JpbmQgVGh1bWJVcCtSb3V0aW5nS2V5MSBQUkRJRkNIQVIKK2JpbmQgVGh1bWJEb3duK1JvdXRpbmdLZXkxIE5YRElGQ0hBUgorYmluZCBUaHVtYkhvbWUrUm91dGluZ0tleTEgU0VUTEVGVAorCitiaW5kIEVUb3VjaExlZnRSZWFyK0VUb3VjaExlZnRGcm9udCtFVG91Y2hSaWdodFJlYXIgRlJFRVpFCitiaW5kIEVUb3VjaExlZnRSZWFyK0VUb3VjaFJpZ2h0UmVhcitFVG91Y2hSaWdodEZyb250IERJU1BNRAorCitiaW5kIFRodW1iTGVmdCtFVG91Y2hMZWZ0UmVhciBDU1JWSVMKK2JpbmQgVGh1bWJMZWZ0K0VUb3VjaExlZnRGcm9udCBBVFRSVklTCitiaW5kIFRodW1iTGVmdCtFVG91Y2hSaWdodEZyb250IFNJWERPVFMKKworbWFwIERvdDEgRE9UMQorbWFwIERvdDIgRE9UMgorbWFwIERvdDMgRE9UMworbWFwIERvdDQgRE9UNAorbWFwIERvdDUgRE9UNQorbWFwIERvdDYgRE9UNgorbWFwIERvdDcgRE9UNworbWFwIERvdDggRE9UOAorbWFwIFNwYWNlIFNQQUNFCittYXAgQ29udHJvbCBDT05UUk9MCittYXAgQWx0IE1FVEEKK2JpbmQgRW50ZXIgS0VZX0VOVEVSCitiaW5kIFdpbmRvd3MgS0VZX0VTQ0FQRQorCithc3NpZ24gY2hvcmQgU3BhY2UrCitpbmNsdWRlIC4uL2Nob3Jkcy5rdGkKKworCisjIyMjIyMjIyMjIyMjIyMjIworIyBNZW51IEJpbmRpbmdzICMKKyMjIyMjIyMjIyMjIyMjIyMjCisKK2NvbnRleHQgbWVudQorCitiaW5kIFRodW1iTGVmdCBGV0lOTFQKK2JpbmQgVGh1bWJSaWdodCBGV0lOUlQKK2JpbmQgVGh1bWJVcCBNRU5VX1BSRVZfSVRFTQorYmluZCBUaHVtYkRvd24gTUVOVV9ORVhUX0lURU0KK2JpbmQgRVRvdWNoTGVmdFJlYXIgTUVOVV9GSVJTVF9JVEVNCitiaW5kIEVUb3VjaExlZnRGcm9udCBNRU5VX0xBU1RfSVRFTQorYmluZCBFVG91Y2hSaWdodFJlYXIgTUVOVV9QUkVWX1NFVFRJTkcKK2JpbmQgRVRvdWNoUmlnaHRGcm9udCBNRU5VX05FWFRfU0VUVElORworCitiaW5kIFRodW1iSG9tZSBQUkVGTUVOVQorYmluZCBFVG91Y2hMZWZ0UmVhcitFVG91Y2hMZWZ0RnJvbnQgUFJFRkxPQUQKK2JpbmQgRVRvdWNoUmlnaHRSZWFyK0VUb3VjaFJpZ2h0RnJvbnQgUFJFRlNBVkUKKworCmRpZmYgLS1naXQgYS9UYWJsZXMvSW5wdXQvYWwvYmM2NDAua3RiIGIvVGFibGVzL0lucHV0L2FsL2JjNjQwLmt0YgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MDIyMDEyCi0tLSAvZGV2L251bGwKKysrIGIvVGFibGVzL0lucHV0L2FsL2JjNjQwLmt0YgpAQCAtMCwwICsxLDMwIEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisjICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorIworIyBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisjCisjIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisjCisjIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyMgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorIyBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyMKKyMgV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworIworIyBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKwordGl0bGUgQWx2YSBCQzY0MCwgQkM2MjQKKworaW5jbHVkZSBiYy1ldG91Y2gua3RpCisKK25vdGUgVGhlcmUncyBhIFNtYXJ0cGFkIGluIGZyb250IG9mIHRoZSB0ZXh0IGNlbGwgYXJlYS4KK2luY2x1ZGUgYmMtc21hcnRwYWQua3RpCisKK25vdGUgVGhlIGZpdmUgVGh1bWIga2V5cyBvbiB0aGUgZnJvbnQsIGZyb20gbGVmdCB0byByaWdodCwgYXJlIHN1Ym5hbWVkOgorbm90ZSAqIExlZnQsIFVwLCBIb21lLCBEb3duLCBSaWdodC4KK2luY2x1ZGUgYmMtdGh1bWIua3RpCisKK2luY2x1ZGUgYmMua3RpCmRpZmYgLS1naXQgYS9UYWJsZXMvSW5wdXQvYWwvYmM2ODAua3RiIGIvVGFibGVzL0lucHV0L2FsL2JjNjgwLmt0YgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YmI5ZDM3Ci0tLSAvZGV2L251bGwKKysrIGIvVGFibGVzL0lucHV0L2FsL2JjNjgwLmt0YgpAQCAtMCwwICsxLDMyIEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisjICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorIworIyBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisjCisjIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisjCisjIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyMgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorIyBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyMKKyMgV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworIworIyBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKwordGl0bGUgQWx2YSBCQzY4MAorCitpbmNsdWRlIGJjLWV0b3VjaC5rdGkKKworbm90ZSBUaGVyZSBhcmUgdHdvIFNtYXJ0cGFkcyBpbiBmcm9udCBvZiB0aGUgdGV4dCBjZWxsIGFyZWEuCitpbmNsdWRlIGJjLXNtYXJ0cGFkLmt0aQorCitub3RlIFRoZXJlJ3MgYSBncm91cCBvZiBmaXZlIFRodW1iIGtleXMgYXQgZWFjaCBlbmQgb2YgdGhlIGZyb250Lgorbm90ZSAqIFRoZSBvdXRlciBrZXkgb2YgZWFjaCBncm91cCBpcyBzdWJuYW1lZCBIb21lLgorbm90ZSAqIFRoZSBmb3VyIGlubmVyIGtleXMgb2YgZWFjaCBncm91cCwgZnJvbSBsZWZ0IHRvIHJpZ2h0LCBhcmUgc3VibmFtZWQ6Citub3RlICogTGVmdCwgVXAsIERvd24sIFJpZ2h0LgoraW5jbHVkZSBiYy10aHVtYi5rdGkKKworaW5jbHVkZSBiYy5rdGkKZGlmZiAtLWdpdCBhL1RhYmxlcy9JbnB1dC9hbC9lbC5rdGIgYi9UYWJsZXMvSW5wdXQvYWwvZWwua3RiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQwNTU0ZTcKLS0tIC9kZXYvbnVsbAorKysgYi9UYWJsZXMvSW5wdXQvYWwvZWwua3RiCkBAIC0wLDAgKzEsMjEgQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyMgICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisjCisjIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyMKKyMgQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCit0aXRsZSBPcHRlbGVjIEVhc3lMaW5rIDEyIFRvdWNoCisKK2luY2x1ZGUgLi4vYnAvYWxsLmt0aQpkaWZmIC0tZ2l0IGEvVGFibGVzL0lucHV0L2FsL3NhdF9jb21tb24ua3RpIGIvVGFibGVzL0lucHV0L2FsL3NhdF9jb21tb24ua3RpCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE2NDBkMjIKLS0tIC9kZXYvbnVsbAorKysgYi9UYWJsZXMvSW5wdXQvYWwvc2F0X2NvbW1vbi5rdGkKQEAgLTAsMCArMSw5OCBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorIyAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyMKKyMgQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorIworIyBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorIworIyBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisjIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyMgbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisjCisjIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMgVGhpcyBrZXkgc3VidGFibGUgaXMgZm9yIEFsdmEgbW9kZWxzIHdoaWNoIGhhdmUgdGhlIGJhc2ljIFNhdGVsbGl0ZSBrZXlzLgorbm90ZSBUaGUgdHdvIGxvbmcsIGZsYXQga2V5cyBhcmUgbmFtZWQgVXAgYW5kIERvd24uCitub3RlIFRoZSB0d28gbG9uZywgYmVudCBrZXlzIGFyZSBuYW1lZCBMZWZ0IGFuZCBSaWdodC4KK25vdGUgVGhlIHR3byByb3VuZCBrZXlzIGFyZSBuYW1lZCBIb21lIGFuZCBDdXJzb3IuCitub3RlIFRoZSByb3cgb2Yga2V5cyBpbW1lZGlhdGVseSBiZWhpbmQgdGhlIGJyYWlsbGUgY2VsbHMgaXMgbmFtZWQgUm91dGluZ0tleTEsCitub3RlICogYW5kIHRoZSByb3cgb2Yga2V5cyBmdXJ0aGVyIGJhY2sgaXMgbmFtZWQgUm91dGluZ0tleTIuCitub3RlIFRoZSBrZXlwYWQgYXQgdGhlIGxlZnQgc2lkZSBvZiB0aGUgdG9wIGlzIG5hbWVkIFNwZWVjaFBhZCwKK25vdGUgKiBhbmQgdGhlIG9uZSBhdCB0aGUgcmlnaHQgc2lkZSBvZiB0aGUgdG9wIGlzIG5hbWVkIE5hdlBhZC4KK25vdGUgKiBUaGV5IGNhbiBiZSBzd2FwcGVkIHZpYSB0aGUgaW50ZXJuYWwgbWVudS4KK25vdGUgKiBUaGUgZm91ciBpbm5lciBrZXlzIG9mIGVhY2ggYXJlIHN1Ym5hbWVkIExlZnQsIFJpZ2h0LCBVcCwgYW5kIERvd24uCitub3RlICogVGhlIHR3byBvdXRlciBrZXlzIG9mIGVhY2ggYXJlIHN1Ym5hbWVkIEYxIGFuZCBGMi4KKworCisjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBEZWZhdWx0IEJpbmRpbmdzICMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK25vdGUgRW50ZXIgdGhlIGludGVybmFsIG1lbnUgYnkgcHJlc3Npbmc6Citub3RlICogU3BlZWNoUGFkRjEgKyBTcGVlY2hQYWRGMiArIE5hdlBhZEYxICsgTmF2UGFkRjIKK2JpbmQgU3BlZWNoUGFkRjErU3BlZWNoUGFkRjIrTmF2UGFkRjErTmF2UGFkRjIgTk9PUAorCitpbmNsdWRlIHNhdF9zcGVlY2gua3RpCitpbmNsdWRlIHNhdF9uYXYua3RpCisKK2JpbmQgIVVwIExOVVAKK2JpbmQgIURvd24gTE5ETgorYmluZCBIb21lKyFVcCBUT1BfTEVGVAorYmluZCBIb21lKyFEb3duIEJPVF9MRUZUCitiaW5kIEN1cnNvcishVXAgVE9QCitiaW5kIEN1cnNvcishRG93biBCT1QKKworYmluZCAhTGVmdCBGV0lOTFQKK2JpbmQgIVJpZ2h0IEZXSU5SVAorYmluZCBIb21lKyFMZWZ0IExOQkVHCitiaW5kIEhvbWUrIVJpZ2h0IExORU5ECitiaW5kIEN1cnNvcishTGVmdCBGV0lOTFRTS0lQCitiaW5kIEN1cnNvcishUmlnaHQgRldJTlJUU0tJUAorCitiaW5kIFJvdXRpbmdLZXkxIFJPVVRFCitiaW5kIFJvdXRpbmdLZXkyIERFU0NDSEFSCisKK2JpbmQgUm91dGluZ0tleTErIVJvdXRpbmdLZXkxIENMSVBfQ09QWQorYmluZCBSb3V0aW5nS2V5MishUm91dGluZ0tleTIgQ0xJUF9BUFBFTkQKKworYmluZCBIb21lKyFSb3V0aW5nS2V5MiBTRVRNQVJLCitiaW5kIEhvbWUrIVJvdXRpbmdLZXkxIEdPVE9NQVJLCitiaW5kIEN1cnNvcishUm91dGluZ0tleTIgUFJJTkRFTlQKK2JpbmQgQ3Vyc29yKyFSb3V0aW5nS2V5MSBOWElOREVOVAorCitiaW5kICFTdGF0dXMxQSBDU1JWSVMKK2JpbmQgIVN0YXR1czJBIFNLUElETE5TCitiaW5kICFTdGF0dXMxQiBBVFRSVklTCitiaW5kICFTdGF0dXMyQiBESVNQTUQKK2JpbmQgIVN0YXR1czFDIENBUEJMSU5LCitiaW5kICFTdGF0dXMyQyBTS1BCTE5LV0lOUworCitiaW5kIEhvbWUgQkFDSworYmluZCBDdXJzb3IgSE9NRQorYmluZCBIb21lK0N1cnNvciBDU1JUUksKKworCisjIyMjIyMjIyMjIyMjIyMjIworIyBNZW51IEJpbmRpbmdzICMKKyMjIyMjIyMjIyMjIyMjIyMjCisKK2NvbnRleHQgbWVudQorCitiaW5kICFVcCBNRU5VX1BSRVZfSVRFTQorYmluZCAhRG93biBNRU5VX05FWFRfSVRFTQorYmluZCBIb21lKyFVcCBNRU5VX0ZJUlNUX0lURU0KK2JpbmQgSG9tZSshRG93biBNRU5VX0xBU1RfSVRFTQorCitiaW5kICFMZWZ0IEZXSU5MVAorYmluZCAhUmlnaHQgRldJTlJUCitiaW5kIEhvbWUrIUxlZnQgUFJFRkxPQUQKK2JpbmQgSG9tZSshUmlnaHQgUFJFRlNBVkUKKworYmluZCBIb21lIE1FTlVfUFJFVl9TRVRUSU5HCitiaW5kIEN1cnNvciBNRU5VX05FWFRfU0VUVElORworYmluZCBIb21lK0N1cnNvciBQUkVGTUVOVQpkaWZmIC0tZ2l0IGEvVGFibGVzL0lucHV0L2FsL3NhdF9sYXJnZS5rdGIgYi9UYWJsZXMvSW5wdXQvYWwvc2F0X2xhcmdlLmt0YgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYmU3NzBjCi0tLSAvZGV2L251bGwKKysrIGIvVGFibGVzL0lucHV0L2FsL3NhdF9sYXJnZS5rdGIKQEAgLTAsMCArMSwyMiBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorIyAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyMKKyMgQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorIworIyBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorIworIyBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisjIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyMgbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisjCisjIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK3RpdGxlIEFsdmEgU2F0ZWxsaXRlIDU3MCw1ODQKKworaW5jbHVkZSBzYXRfdHVtYmxlcnMua3RpCitpbmNsdWRlIHNhdF9jb21tb24ua3RpCmRpZmYgLS1naXQgYS9UYWJsZXMvSW5wdXQvYWwvc2F0X25hdi5rdGkgYi9UYWJsZXMvSW5wdXQvYWwvc2F0X25hdi5rdGkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWQwMjc5ZAotLS0gL2Rldi9udWxsCisrKyBiL1RhYmxlcy9JbnB1dC9hbC9zYXRfbmF2Lmt0aQpAQCAtMCwwICsxLDUzIEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisjICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorIworIyBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisjCisjIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisjCisjIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyMgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorIyBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyMKKyMgV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworIworIyBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIyBUaGlzIGtleSBzdWJ0YWJsZSBpcyBmb3IgdGhlIEFsdmEgU2F0ZWxsaXRlIG5hdiBrZXlwYWQuCisKK2JpbmQgTmF2UGFkRjErIVVwIFBSRElGTE4KK2JpbmQgTmF2UGFkRjErIURvd24gTlhESUZMTgorYmluZCBOYXZQYWRGMishVXAgQVRUUlVQCitiaW5kIE5hdlBhZEYyKyFEb3duIEFUVFJETgorCitiaW5kIE5hdlBhZEYxKyFMZWZ0IENIUkxUCitiaW5kIE5hdlBhZEYxKyFSaWdodCBDSFJSVAorYmluZCBOYXZQYWRGMishTGVmdCBIV0lOTFQKK2JpbmQgTmF2UGFkRjIrIVJpZ2h0IEhXSU5SVAorCitiaW5kIE5hdlBhZEYxKyFSb3V0aW5nS2V5MSBDTElQX05FVworYmluZCBOYXZQYWRGMSshUm91dGluZ0tleTIgQ0xJUF9BREQKK2JpbmQgTmF2UGFkRjIrIVJvdXRpbmdLZXkxIENPUFlfUkVDVAorYmluZCBOYXZQYWRGMishUm91dGluZ0tleTIgQ09QWV9MSU5FCisKK2JpbmQgTmF2UGFkTGVmdCBQUkVGTUVOVQorYmluZCBOYXZQYWRSaWdodCBJTkZPCitiaW5kIE5hdlBhZEYxK05hdlBhZExlZnQgRlJFRVpFCitiaW5kIE5hdlBhZEYxK05hdlBhZFJpZ2h0IFNJWERPVFMKK2JpbmQgTmF2UGFkRjIrTmF2UGFkTGVmdCBQQVNURQorYmluZCBOYXZQYWRGMitOYXZQYWRSaWdodCBDU1JKTVBfVkVSVAorCitiaW5kIE5hdlBhZFVwIFBSUFJPTVBUCitiaW5kIE5hdlBhZERvd24gTlhQUk9NUFQKK2JpbmQgTmF2UGFkRjErTmF2UGFkVXAgUFJQR1JQSAorYmluZCBOYXZQYWRGMStOYXZQYWREb3duIE5YUEdSUEgKK2JpbmQgTmF2UGFkRjIrTmF2UGFkVXAgUFJTRUFSQ0gKK2JpbmQgTmF2UGFkRjIrTmF2UGFkRG93biBOWFNFQVJDSAorCitiaW5kIE5hdlBhZEYxIEhFTFAKK2JpbmQgTmF2UGFkRjIgTEVBUk4KK2JpbmQgTmF2UGFkRjErTmF2UGFkRjIgUkVTVEFSVEJSTAorCmRpZmYgLS1naXQgYS9UYWJsZXMvSW5wdXQvYWwvc2F0X3NtYWxsLmt0YiBiL1RhYmxlcy9JbnB1dC9hbC9zYXRfc21hbGwua3RiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRhNzE5NGEKLS0tIC9kZXYvbnVsbAorKysgYi9UYWJsZXMvSW5wdXQvYWwvc2F0X3NtYWxsLmt0YgpAQCAtMCwwICsxLDIxIEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisjICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorIworIyBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisjCisjIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisjCisjIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyMgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorIyBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyMKKyMgV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworIworIyBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKwordGl0bGUgQWx2YSBTYXRlbGxpdGUgNTQ0CisKK2luY2x1ZGUgc2F0X2NvbW1vbi5rdGkKZGlmZiAtLWdpdCBhL1RhYmxlcy9JbnB1dC9hbC9zYXRfc3BlZWNoLmt0aSBiL1RhYmxlcy9JbnB1dC9hbC9zYXRfc3BlZWNoLmt0aQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMjQ4ZTgzCi0tLSAvZGV2L251bGwKKysrIGIvVGFibGVzL0lucHV0L2FsL3NhdF9zcGVlY2gua3RpCkBAIC0wLDAgKzEsMzQgQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyMgICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisjCisjIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyMKKyMgQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjIFRoaXMga2V5IHN1YnRhYmxlIGlzIGZvciB0aGUgQWx2YSBTYXRlbGxpdGUgc3BlZWNoIGtleXBhZC4KKworYmluZCBTcGVlY2hQYWRMZWZ0IE1VVEUKK2JpbmQgU3BlZWNoUGFkUmlnaHQgU0FZX0xJTkUKK2JpbmQgU3BlZWNoUGFkVXAgU0FZX0FCT1ZFCitiaW5kIFNwZWVjaFBhZERvd24gU0FZX0JFTE9XCisKK2JpbmQgU3BlZWNoUGFkRjIrU3BlZWNoUGFkTGVmdCBTQVlfU0xPV0VSCitiaW5kIFNwZWVjaFBhZEYyK1NwZWVjaFBhZFJpZ2h0IFNBWV9GQVNURVIKK2JpbmQgU3BlZWNoUGFkRjIrU3BlZWNoUGFkRG93biBTQVlfU09GVEVSCitiaW5kIFNwZWVjaFBhZEYyK1NwZWVjaFBhZFVwIFNBWV9MT1VERVIKKworYmluZCBTcGVlY2hQYWRGMSBTUEtIT01FCitiaW5kIFNwZWVjaFBhZEYyIEFVVE9TUEVBSworYmluZCBTcGVlY2hQYWRGMStTcGVlY2hQYWRGMiBSRVNUQVJUU1BFRUNICisKZGlmZiAtLWdpdCBhL1RhYmxlcy9JbnB1dC9hbC9zYXRfdHVtYmxlcnMua3RpIGIvVGFibGVzL0lucHV0L2FsL3NhdF90dW1ibGVycy5rdGkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWYwMjFmYgotLS0gL2Rldi9udWxsCisrKyBiL1RhYmxlcy9JbnB1dC9hbC9zYXRfdHVtYmxlcnMua3RpCkBAIC0wLDAgKzEsMjYgQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyMgICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisjCisjIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyMKKyMgQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjIFRoaXMga2V5IHN1YnRhYmxlIGlzIGZvciBBbHZhIFNhdGVsbGl0ZSBtb2RlbHMgd2hpY2ggaGF2ZSB0dW1ibGVyIGtleXMuCitub3RlIFRoZSB0d28gdGhyZWUtcG9zaXRpb24sIHNsaWRpbmcga2V5cyBhcmUgbmFtZWQgTGVmdFR1bWJsZXIgYW5kIFJpZ2h0VHVtYmxlci4KKworYmluZCBMZWZ0VHVtYmxlckxlZnQgQ0hSTFQKK2JpbmQgTGVmdFR1bWJsZXJSaWdodCBDSFJSVAorYmluZCBSaWdodFR1bWJsZXJMZWZ0IExOQkVHICAgICAKK2JpbmQgUmlnaHRUdW1ibGVyUmlnaHQgTE5FTkQKKwpkaWZmIC0tZ2l0IGEvVGFibGVzL0lucHV0L2FsL3ZveWFnZXIua3RiIGIvVGFibGVzL0lucHV0L2FsL3ZveWFnZXIua3RiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU3NDA5MGQKLS0tIC9kZXYvbnVsbAorKysgYi9UYWJsZXMvSW5wdXQvYWwvdm95YWdlci5rdGIKQEAgLTAsMCArMSwyMSBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorIyAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyMKKyMgQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorIworIyBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorIworIyBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisjIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyMgbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisjCisjIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK3RpdGxlIFZveWFnZXIgUHJvdG9jb2wgQ29udmVydGVyCisKK2luY2x1ZGUgLi4vdm8vYWxsLmt0aQpkaWZmIC0tZ2l0IGEvVGFibGVzL0lucHV0L2FuZHJvaWQtY2hvcmRzLmt0aSBiL1RhYmxlcy9JbnB1dC9hbmRyb2lkLWNob3Jkcy5rdGkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjlmNGY5MQotLS0gL2Rldi9udWxsCisrKyBiL1RhYmxlcy9JbnB1dC9hbmRyb2lkLWNob3Jkcy5rdGkKQEAgLTAsMCArMSw2MSBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorIyAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyMKKyMgQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorIworIyBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorIworIyBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisjIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyMgbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisjCisjIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK2Fzc2lnbiBwcmVmaXggXHtjaG9yZH1Eb3Q3K0RvdDgKK2JpbmQgXHtwcmVmaXh9K0RvdDErRG90MitEb3QzK0RvdDQrRG90NStEb3Q2IEdVSV9CUkxfQUNUSU9OUworCitiaW5kIFx7cHJlZml4fStce2F9IFRYVFNFTF9BTEwKK2JpbmQgXHtwcmVmaXh9K0RvdDQgVFhUU0VMX0NMRUFSCitiaW5kIFx7cHJlZml4fStce2N9IEhPU1RfQ09QWQorYmluZCBce3ByZWZpeH0rXHt2fSBIT1NUX1BBU1RFCitiaW5kIFx7cHJlZml4fStce3h9IEhPU1RfQ1VUCisKK2JpbmQgXHtwcmVmaXh9K1x7Yn0gR1VJX0JBQ0sKK2JpbmQgXHtwcmVmaXh9K1x7aH0gR1VJX0hPTUUKK2JpbmQgXHtwcmVmaXh9K1x7aX0gSU5ESUNBVE9SUworYmluZCBce3ByZWZpeH0rXHttfSBHVUlfQVBQX01FTlUKK2JpbmQgXHtwcmVmaXh9K1x7bn0gR1VJX0FQUF9BTEVSVFMKK2JpbmQgXHtwcmVmaXh9K1x7b30gR1VJX0RFVl9PUFRJT05TCitiaW5kIFx7cHJlZml4fStce3J9IEdVSV9BUFBfTElTVAorYmluZCBce3ByZWZpeH0rXHtzfSBHVUlfREVWX1NFVFRJTkdTCitiaW5kIFx7cHJlZml4fStce3R9IEdVSV9USVRMRQorCitiaW5kIFx7cHJlZml4fStEb3QzK0RvdDYgR1VJX0FSRUFfQUNUVgorYmluZCBce3ByZWZpeH0rRG90MyBHVUlfQVJFQV9QUkVWCitiaW5kIFx7cHJlZml4fStEb3Q2IEdVSV9BUkVBX05FWFQKKworYmluZCBce3ByZWZpeH0rRG90MiBHVUlfSVRFTV9QUkVWCitiaW5kIFx7cHJlZml4fStEb3Q1IEdVSV9JVEVNX05FWFQKKworYmluZCBce3ByZWZpeH0rRG90MitEb3QzIEdVSV9JVEVNX0ZSU1QKK2JpbmQgXHtwcmVmaXh9K0RvdDUrRG90NiBHVUlfSVRFTV9MQVNUCisKK2JpbmQgXHtwcmVmaXh9K0RvdDIrRG90NSBDT05URVhUK2Nocm9tZQorY29udGV4dCBjaHJvbWUgV2ViIFBhZ2UgTmF2aWdhdGlvbgorYmluZCBEb3Q3K0RvdDggQ09OVEVYVCtkZWZhdWx0CisKK3N1cGVyaW1wb3NlIG1ldGEKK21hcCBEb3QxIERPVDEKK21hcCBEb3QyIERPVDIKK21hcCBEb3QzIERPVDMKK21hcCBEb3Q0IERPVDQKK21hcCBEb3Q1IERPVDUKK21hcCBEb3Q2IERPVDYKK21hcCBEb3Q3IERPVDcKK21hcCBEb3Q4IERPVDgKKwpkaWZmIC0tZ2l0IGEvVGFibGVzL0lucHV0L2F0L2FsbC5rdGIgYi9UYWJsZXMvSW5wdXQvYXQvYWxsLmt0YgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MTlmZmFlCi0tLSAvZGV2L251bGwKKysrIGIvVGFibGVzL0lucHV0L2F0L2FsbC5rdGIKQEAgLTAsMCArMSw5NSBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorIyAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyMKKyMgQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorIworIyBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorIworIyBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisjIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyMgbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisjCisjIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK3RpdGxlIEFsYmF0cm9zcworCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIERlZmF1bHQgQmluZGluZ3MgIworIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworYmluZCBIb21lMSBUT1BfTEVGVAorYmluZCBIb21lMiBUT1BfTEVGVAorCitiaW5kIEVuZDEgQk9UX0xFRlQKK2JpbmQgRW5kMiBCT1RfTEVGVAorCitiaW5kIEV4dHJhQ3Vyc29yMSBCQUNLCitiaW5kIEV4dHJhQ3Vyc29yMiBCQUNLCisKK2JpbmQgQ3Vyc29yMSBIT01FCitiaW5kIEN1cnNvcjIgSE9NRQorCitiaW5kICFVcDEgTE5VUAorYmluZCAhVXAyIExOVVAKK2JpbmQgIVVwMyBMTlVQCisKK2JpbmQgIURvd24xIExORE4KK2JpbmQgIURvd24yIExORE4KK2JpbmQgIURvd24zIExORE4KKworYmluZCAhTGVmdCBGV0lOTFQKK2JpbmQgIVJpZ2h0IEZXSU5SVAorCitiaW5kIEYxIEFUVFJETgorYmluZCBGMiBBVFRSVVAKK2JpbmQgIUYzIFBBU1RFCitiaW5kICFGNCBDU1JUUksKK2JpbmQgIUY1IEhFTFAKK2JpbmQgIUY2IExFQVJOCitiaW5kIEY3IFBSUFJPTVBUCitiaW5kIEY4IE5YUFJPTVBUCisKK2JpbmQgRjkgTlhESUZMTgorYmluZCBGMTAgUFJESUZMTgorYmluZCAhRjExIENTUkpNUF9WRVJUCitiaW5kICFGMTIgU0lYRE9UUworYmluZCAhRjEzIFBSRUZNRU5VCitiaW5kICFGMTQgSU5GTworYmluZCBGMTUgUFJQR1JQSAorYmluZCBGMTYgTlhQR1JQSAorCitiaW5kIEF0dHJpYnV0ZTEgRlJFRVpFCitiaW5kIEF0dHJpYnV0ZTIgRElTUE1ECitiaW5kIEF0dHJpYnV0ZTMgQ1NSVklTCitiaW5kIEF0dHJpYnV0ZTQgQVRUUlZJUworCitiaW5kICFMZWZ0V2hlZWxMZWZ0IENIUkxUCitiaW5kICFSaWdodFdoZWVsTGVmdCBDSFJMVAorCitiaW5kICFMZWZ0V2hlZWxSaWdodCBDSFJSVAorYmluZCAhUmlnaHRXaGVlbFJpZ2h0IENIUlJUCisKK2JpbmQgIUxlZnRXaGVlbFVwIExOVVAKK2JpbmQgIVJpZ2h0V2hlZWxVcCBMTlVQCisKK2JpbmQgIUxlZnRXaGVlbERvd24gTE5ETgorYmluZCAhUmlnaHRXaGVlbERvd24gTE5ETgorCitiaW5kICFSb3V0aW5nS2V5MSBST1VURQorYmluZCBBdHRyaWJ1dGUyKyFSb3V0aW5nS2V5MSBDTElQX05FVworYmluZCBBdHRyaWJ1dGUxKyFSb3V0aW5nS2V5MSBDTElQX0FERAorYmluZCBBdHRyaWJ1dGU0KyFSb3V0aW5nS2V5MSBDT1BZX0xJTkUKK2JpbmQgQXR0cmlidXRlMyshUm91dGluZ0tleTEgQ09QWV9SRUNUCisKK2JpbmQgIVJvdXRpbmdLZXkyIERFU0NDSEFSCitiaW5kIEF0dHJpYnV0ZTIrIVJvdXRpbmdLZXkyIFBSSU5ERU5UCitiaW5kIEF0dHJpYnV0ZTErIVJvdXRpbmdLZXkyIE5YSU5ERU5UCitiaW5kIEF0dHJpYnV0ZTQrIVJvdXRpbmdLZXkyIFBSRElGQ0hBUgorYmluZCBBdHRyaWJ1dGUzKyFSb3V0aW5nS2V5MiBOWERJRkNIQVIKKwpkaWZmIC0tZ2l0IGEvVGFibGVzL0lucHV0L2JhL2FsbC50eHQgYi9UYWJsZXMvSW5wdXQvYmEvYWxsLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNTM0NWE0Ci0tLSAvZGV2L251bGwKKysrIGIvVGFibGVzL0lucHV0L2JhL2FsbC50eHQKQEAgLTAsMCArMSwzIEBACitIZWxwOiBCcmxBUEkgKGNsaWVudCkKKworTm8gaGVscCBhdmFpbGFibGUgZm9yIHRoaXMgZHJpdmVyLgpkaWZmIC0tZ2l0IGEvVGFibGVzL0lucHV0L2JkL2FsbC50eHQgYi9UYWJsZXMvSW5wdXQvYmQvYWxsLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMGM0ODExCi0tLSAvZGV2L251bGwKKysrIGIvVGFibGVzL0lucHV0L2JkL2FsbC50eHQKQEAgLTAsMCArMSwxNCBAQAorSGVscDogQnJhdWRpCisKKzE6IGdvIHRvIHRvcC1sZWZ0IGNvcm5lcgorMjogZ28gbGVmdCBvbmUgd2luZG93CiszOiBnbyBkb3duIG9uZSBsaW5lCis0OiBnbyB1cCBvbmUgbGluZQorNTogZ28gcmlnaHQgb25lIHdpbmRvdworNjogZ28gdG8gYm90dG9tLWxlZnQgY29ybmVyCisyMzogZ28gdG8gYmVnaW5uaW5nIG9mIGxpbmUKKzU2OiBnbyB0byBlbmQgb2YgbGluZQorMTQ6IHRvZ2dsZSBjdXJzb3IgdmlzaWJpbGl0eQorMjU6IHRvZ2dsZSBhdHRyaWJ1dGVzIGRpc3BsYXkKKzI2OiB0b2dnbGUgc3RhdHVzIGRpc3BsYXkKKzM2OiBnbyB0byBjdXJzb3IKZGlmZiAtLWdpdCBhL1RhYmxlcy9JbnB1dC9iZy9hbGwua3RiIGIvVGFibGVzL0lucHV0L2JnL2FsbC5rdGIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWJhMmZmNQotLS0gL2Rldi9udWxsCisrKyBiL1RhYmxlcy9JbnB1dC9iZy9hbGwua3RiCkBAIC0wLDAgKzEsMTE4IEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisjICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorIworIyBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisjCisjIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisjCisjIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyMgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorIyBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyMKKyMgV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworIworIyBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKwordGl0bGUgQjJHCisKK25vdGUgVGhlIGVpZ2h0LCByZWN0YW5ndWxhciwgY29uY2F2ZSBrZXlzIChpbiB0d28gZ3JvdXBzIG9mIGZvdXIpIG5lYXIgdGhlIGJhY2sgYXJlIGEgYnJhaWxsZSBrZXlib2FyZC4KK25vdGUgKiBUaGUgZm91ciBvbiB0aGUgbGVmdCwgZnJvbSBsZWZ0IHRvIHJpZ2h0LCBhcmU6IERvdDcsIERvdDMsIERvdDIsIERvdDEuCitub3RlICogVGhlIGZvdXIgb24gdGhlIHJpZ2h0LCBmcm9tIGxlZnQgdG8gcmlnaHQsIGFyZTogRG90NCwgRG90NSwgRG90NiwgRG90OC4KK25vdGUgVGhlIHNxdWFyZSBwYWQgd2l0aCBhIHNtYWxsLCByb3VuZCBidXR0b24gaW4gdGhlIG1pZGRsZSwgaW4gYmV0d2VlbiBEb3QxIGFuZCBEb3Q0LCBpcyB0aGUgRC1QYWQgKGRpcmVjdGlvbmFsIHBhZCkuCitub3RlICogSXRzIGZvdXIgZWRnZXMgYXJlIHRoZSBVcCwgRG93biwgTGVmdCwgYW5kIFJpZ2h0IGtleXMuCitub3RlICogVGhlIGJ1dHRvbiBpbiB0aGUgbWlkZGxlIGlzIHRoZSBDZW50ZXIga2V5Lgorbm90ZSBUaGUgbG9uZywgcmVjdGFuZ3VsYXIga2V5IGluIGZyb250IG9mIERvdDEsIHRoZSBELVBhZCwgYW5kIERvdDQgaXMgdGhlIFNwYWNlIGJhci4KK25vdGUgVGhlIHNtYWxsLCByb3VuZCBidXR0b25zIGp1c3QgYmVoaW5kIGVhY2ggY2VsbCBhcmUgdGhlIHJvdXRpbmcga2V5cy4KK25vdGUgVGhlIGNvbnZleCwgc3F1YXJlIGJ1dHRvbiB0byB0aGUgbGVmdCBvZiB0aGUgcm91dGluZyBrZXlzIGlzIHRoZSBCYWNrd2FyZCBrZXkuCitub3RlIFRoZSBjb252ZXgsIHNxdWFyZSBidXR0b24gdG8gdGhlIHJpZ2h0IG9mIHRoZSByb3V0aW5nIGtleXMgaXMgdGhlIEZvcndhcmQga2V5Lgorbm90ZSBUaGUgdHdvIHNtYWxsLCByb3VuZCBidXR0b25zIG9uIHRoZSByaWdodCBzaWRlIG5lYXIgdGhlIGZyb250IGFyZSB0aGUgdm9sdW1lIGtleXMuCitub3RlICogRnJvbSBmcm9udCB0byBiYWNrLCB0aGV5IGFyZTogU29mdGVyLCBMb3VkZXIuCisKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgRGVmYXVsdCBCaW5kaW5ncyAjCisjIyMjIyMjIyMjIyMjIyMjIyMjIworCittYXAgRG90MSBET1QxCittYXAgRG90MiBET1QyCittYXAgRG90MyBET1QzCittYXAgRG90NCBET1Q0CittYXAgRG90NSBET1Q1CittYXAgRG90NiBET1Q2CittYXAgRG90NyBET1Q3CittYXAgRG90OCBET1Q4CittYXAgU3BhY2UgU1BBQ0UKKworbWFwIFVwIFVQUEVSCittYXAgRG93biBDT05UUk9MCittYXAgTGVmdCBNRVRBCittYXAgUmlnaHQgQUxUR1IKK21hcCBDZW50ZXIgR1VJCisKK2Fzc2lnbiBjaG9yZCBTcGFjZSsKK2luY2x1ZGUgLi4vY2hvcmRzLmt0aQorCitiaW5kIEJhY2t3YXJkIEZXSU5MVAorYmluZCBGb3J3YXJkIEZXSU5SVAorCitiaW5kIFNwYWNlK0JhY2t3YXJkIEZXSU5MVFNLSVAKK2JpbmQgU3BhY2UrRm9yd2FyZCBGV0lOUlRTS0lQCisKK2JpbmQgQ2VudGVyIEhPTUUKK2JpbmQgU3BhY2UrQ2VudGVyIEJBQ0sKKworYmluZCBVcCBMTlVQCitiaW5kIERvd24gTE5ETgorYmluZCBMZWZ0IExOQkVHCitiaW5kIFJpZ2h0IExORU5ECisKK2JpbmQgU3BhY2UrVXAgVE9QCitiaW5kIFNwYWNlK0Rvd24gQk9UCitiaW5kIFNwYWNlK0xlZnQgQ0hSTFQKK2JpbmQgU3BhY2UrUmlnaHQgQ0hSUlQKKworYmluZCBCYWNrd2FyZCtDZW50ZXIgUFJTRUFSQ0gKK2JpbmQgRm9yd2FyZCtDZW50ZXIgTlhTRUFSQ0gKKworYmluZCBCYWNrd2FyZCtVcCBQUkRJRkxOCitiaW5kIEJhY2t3YXJkK0Rvd24gTlhESUZMTgorYmluZCBCYWNrd2FyZCtMZWZ0IEFUVFJVUAorYmluZCBCYWNrd2FyZCtSaWdodCBBVFRSRE4KKworYmluZCBGb3J3YXJkK1VwIFBSUFJPTVBUCitiaW5kIEZvcndhcmQrRG93biBOWFBST01QVAorYmluZCBGb3J3YXJkK0xlZnQgUFJQR1JQSAorYmluZCBGb3J3YXJkK1JpZ2h0IE5YUEdSUEgKKworYmluZCBSb3V0aW5nS2V5IFJPVVRFCitiaW5kIFJvdXRpbmdLZXkrUm91dGluZ0tleSBDTElQX0NPUFkKK2JpbmQgUm91dGluZ0tleStSb3V0aW5nS2V5K1NwYWNlIENMSVBfQVBQRU5ECisKK2JpbmQgRG90NytSb3V0aW5nS2V5IENMSVBfTkVXCitiaW5kIERvdDMrUm91dGluZ0tleSBDTElQX0FERAorYmluZCBEb3Q2K1JvdXRpbmdLZXkgQ09QWV9MSU5FCitiaW5kIERvdDgrUm91dGluZ0tleSBDT1BZX1JFQ1QKKworYmluZCBEb3QyK1JvdXRpbmdLZXkgU1dJVENIVlQKK2JpbmQgRG90NStSb3V0aW5nS2V5IFNFTEVDVFZUCisKK2JpbmQgRG90MStSb3V0aW5nS2V5IFNFVE1BUksKK2JpbmQgRG90NCtSb3V0aW5nS2V5IEdPVE9NQVJLCisKK2JpbmQgU3BhY2UrUm91dGluZ0tleSBLRVlfRlVOQ1RJT04KKworYmluZCBCYWNrd2FyZCtSb3V0aW5nS2V5IFNFVExFRlQKK2JpbmQgRm9yd2FyZCtSb3V0aW5nS2V5IERFU0NDSEFSCisKK2JpbmQgQ2VudGVyK1JvdXRpbmdLZXkgUEFTVEVfSElTVE9SWQorYmluZCBVcCtSb3V0aW5nS2V5IFBSSU5ERU5UCitiaW5kIERvd24rUm91dGluZ0tleSBOWElOREVOVAorYmluZCBMZWZ0K1JvdXRpbmdLZXkgUFJESUZDSEFSCitiaW5kIFJpZ2h0K1JvdXRpbmdLZXkgTlhESUZDSEFSCisKK2JpbmQgTG91ZGVyK1NvZnRlciBCUkxfU1RPUAorCisKZGlmZiAtLWdpdCBhL1RhYmxlcy9JbnB1dC9ibC8xOC50eHQgYi9UYWJsZXMvSW5wdXQvYmwvMTgudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc5YzBjZWEKLS0tIC9kZXYvbnVsbAorKysgYi9UYWJsZXMvSW5wdXQvYmwvMTgudHh0CkBAIC0wLDAgKzEsOTIgQEAKK0hlbHA6IEJyYWlsbGUgTGl0ZSAxOAorCitBZHZhbmNlIGJhciBsZWZ0L3JpZ2h0OiBmdWxsIHdpbmRvdyBsZWZ0L3JpZ2h0CisxOiBsaW5lIHVwIC8gNDogbGluZSBkb3duCiszOiBjaGFyYWN0ZXIgbGVmdCAvIDY6IGNoYXJhY3RlciByaWdodAorMjM1OiBsaW5lIHN0YXJ0IC8gMjU2OiBsaW5lIGVuZAorMTIzOiB0b3AgbGVmdCAvIDQ1NjogYm90dG9tIGxlZnQKKzEyMzY6IG5leHQgdmlydHVhbCB0ZXJtaW5hbCAvIDM0NTY6IHByZXZpb3VzIFZUCisyMzQ6IHNlYXJjaCBmb3J3YXJkIC8gMTU2OiBzZWFyY2ggYmFja3dhcmQgKHVzZSBjdXQgdG8gc2V0IHNlYXJjaCBzdHJpbmcpCisxMjM1NjogbmV4dCBwcm9tcHQgLyAyMzQ1NjogcHJldmlvdXMgcHJvbXB0IChzYW1lIHByb21wdCBhcyBjdXJyZW50IGxpbmUpCisxMzQ1OiBuZXh0IHBhcmFncmFwaCAvIDEyNDY6IHByZXZpb3VzIHBhcmFncmFwaCAobGluZSBhZnRlciBibGFuayBsaW5lKQorCisyOiBrZXlib2FyZCBsZWZ0IGFycm93IC8gNToga2V5Ym9hcmQgcmlnaHQgYXJyb3cKKzIzOiBrZXlib2FyZCB1cCBhcnJvdyAvIDU2OiBrZXlib2FyZCBkb3duIGFycm93CisxMiBjaG9yZDoga2V5Ym9hcmQgYmFja3NwYWNlCisxNDUgY2hvcmQ6IGtleWJvYXJkIGRlbGV0ZQorMjM0NSBjaG9yZDoga2V5Ym9hcmQgdGFiCis0NiBjaG9yZDoga2V5Ym9hcmQgcmV0dXJuCisyNDYgY2hvcmQ6IGtleWJvYXJkIGVzY2FwZQorCisxMjU6IGhvbWUgKGdvdG8gY3Vyc29yKQorMTI1NjogZ290byBjdXJzb3IgcHJldmlvdXMgcG9zaXRpb24KKzE0OiBjdXJzb3IgdHJhY2tpbmcgKHRvZ2dsZSkKKzEyNCBjaG9yZDogZnJlZXplIHNjcmVlbiAodG9nZ2xlKQorMTQ1NjogaGVscCBtb2RlICh0b2dnbGUpCisxMjQ1NjogbGVhcm4gbW9kZSAoa2V5IGRlc2NyaWJlcikgKHRvZ2dsZSkKKzM0OiBzdGF0dXMgbW9kZSAodG9nZ2xlKQorMjQ6IGF0dHJpYnV0ZSBkaXNwbGF5ICh0b2dnbGUpCisyMzQ2OiBzaXggZG90cyBtb2RlICh0b2dnbGUpCisKKzI0NSBjaG9yZDogcm91dGUgY3Vyc29yIHRvIGJlZ2lubmluZyBvZiBsaW5lCis0NSBjaG9yZDogcm91dGUgY3Vyc29yIHRvIGN1cnJlbnQgbGluZQorMjM2IGNob3JkOiBjdXQgc3RhcnQKKzEyNiBjaG9yZDogY3V0IGFwcGVuZAorMzU2IGNob3JkOiBjdXQgZW5kIHJlY3Rhbmd1bGFyCisxNiBjaG9yZDogY3V0IGVuZCBsaW5lYXIKKzEyMzQgY2hvcmQ6IHBhc3RlCisKKzM2OiBzcGVhayBsaW5lCisxMzQ6IG11dGUgc3BlZWNoCisKKzEyMzUgY2hvcmQ6IHJlc3RhcnQgYnJhaWxsZSBkcml2ZXIKKworMjUgY2hvcmQ6IHByZWZlcmVuY2VzIG9wdGlvbnM6CisgIDEzNDogbWVudQorICAxMjM1OiByZXNldAorICAyMzQ6IHNhdmUKKyAgMTM1NjogY2FuY2VsCisKK0Nob3JkIHJlcXVpcmVkIGZvciAqZGFuZ2Vyb3VzKiBjb21tYW5kcywgZS5nLiByb3V0aW5nLCBjdXQvcGFzdGUsCityZXN0YXJ0IGRyaXZlciwgZXRjLgorCitJbnRlcm5hbDoKKworMTI0NSBjaG9yZDogcG9zaXRpb24gaW50ZXJuYWwgY3Vyc29yIGZvciBjb2x1bW4tc3BlY2lmaWMgZnVuY3Rpb246CisgIFRvIG1vdmUgaW50ZXJuYWwgY3Vyc29yOgorICAgIDEyNTogY2VudHJlIG9mIHdpbmRvdworICAgIDIzNTogbGVmdCBlbmQgb2Ygd2luZG93CisgICAgMjU2OiByaWdodCBlbmQgb2Ygd2luZG93CisgICAgMzogY2hhcmFjdGVyIGxlZnQKKyAgICA2OiBjaGFyYWN0ZXIgcmlnaHQKKyAgICBBZHZhbmNlIGJhciBsZWZ0L3JpZ2h0OiBxdWFydGVyIHdpbmRvdyBsZWZ0L3JpZ2h0CisgIFRvIHRlcm1pbmF0ZToKKyAgICAyMzYgY2hvcmQ6IGN1dCBzdGFydAorICAgIDEyNiBjaG9yZDogY3V0IGFwcGVuZAorICAgIDM1NiBjaG9yZDogY3V0IGVuZCByZWN0YW5ndWxhcgorICAgIDE2IGNob3JkOiBjdXQgZW5kIGxpbmVhcgorICAgIDI0OiBkZXNjcmliZSBhdHRyaWJ1dGVzIG9mIHNlbGVjdGVkIGNoYXJhY3RlcgorICAgIDEzNTY6IGNhbmNlbAorCitrIGNob3JkIHRvZ2dsZXMga2V5Ym9hcmQgZW11bGF0aW9uIG1vZGUgLSBpbml0aWFsbHkgb2ZmLgorV2hlbiBvbiwgdW5jaG9yZGVkIGNoYXJhY3RlcnMgcGFzc2VkIGRpcmVjdGx5IHRvIGluc2tleSgpLCB1bmxlc3MgcHJlZml4ZWQKK2J5OgorCit1IGNob3JkOiB1cHBlcmNhc2UgKHR3aWNlIHRvIGxvY2spCitxIGNob3JkOiB1bmxvY2sKKzI2IGNob3JkOiBhZGQgOHRoIGRvdCB0byBuZXh0IGNoYXIgdHlwZWQKKzM1IGNob3JkOiBwcmVwZW5kIEVTQ0FQRSB0byBuZXh0IGNoYXJhY3RlciAoQUxUKQoreCBjaG9yZDogY29udHJvbCBjaGFyYWN0ZXIKK3ogY2hvcmQ6IGNhbmNlbCBwcmVjZWRpbmcgbWV0YS9jb250cm9sCisKK090aGVyIGludGVybmFsczoKKworMjM1NiBjaG9yZDogcm90YXRlIEJyYWlsbGVMaXRlIGJ5IDE4MCBkZWdyZWVzCitvIGNob3JkOiBzZXQgcmVwZWF0IGNvdW50IGZvciBmb2xsb3dpbmcgY29tbWFuZCAodXAgdG8gMmRpZ2l0cykuCisgIFR5cGUgbnVtYmVycywgdGhlbiB0eXBlIG1vdmVtZW50IGNvbW1hbmQgb3IgY2hhcmFjdGVyIChpZiBpbgorICAgIGtleWJvYXJkIGVtdWxhdGlvbikuCisgIHogY2hvcmQ6IGNhbmNlbHMgc3BlY2lhbCBjb250ZXh0LgorICBlIGNob3JkOiBjb25maXJtcyBjb3VudCBhbmQgd2FpdHMgZm9yIGtleSB0byByZXBlYXQuCitHb3RvIHZpcnR1YWwgdGVybWluYWw6IHVzZSBvIGNob3JkLCBmb2xsb3dlZCBieSBWVCBudW1iZXIsCisgIGZvbGxvd2VkIGJ5IHYgY2hvcmQgb3IgIyBjaG9yZC4KK1NldC9nb3RvIG1hcms6IHVzZSBvIGNob3JkIGZvbGxvd2VkIGJ5ICMgZm9sbG93ZWQgYnkgcyB0byBzZXQgb3IgbSB0byBnby4KZGlmZiAtLWdpdCBhL1RhYmxlcy9JbnB1dC9ibC80MF9tMjBfbTQwLnR4dCBiL1RhYmxlcy9JbnB1dC9ibC80MF9tMjBfbTQwLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MTY4NjZlCi0tLSAvZGV2L251bGwKKysrIGIvVGFibGVzL0lucHV0L2JsLzQwX20yMF9tNDAudHh0CkBAIC0wLDAgKzEsMTIyIEBACitIZWxwOiBCcmFpbGxlIExpdGUgNDAsIE0yMCwgYW5kIE00MAorCitsZWZ0IGJhciBsZWZ0OiBmdWxsIHdpbmRvdyBsZWZ0CitsZWZ0IGJhciByaWdodDogbGluZSB1cAorcmlnaHQgYmFyIGxlZnQ6IGxpbmUgZG93bgorcmlnaHQgYmFyIHJpZ2h0OiBmdWxsIHdpbmRvdyByaWdodAorCisxOiBsaW5lIHVwIC8gNDogbGluZSBkb3duCiszOiBjaGFyYWN0ZXIgbGVmdCAvIDY6IGNoYXJhY3RlciByaWdodAorMjM1OiBsaW5lIHN0YXJ0IC8gMjU2OiBsaW5lIGVuZAorMTIzOiB0b3AgbGVmdCAvIDQ1NjogYm90dG9tIGxlZnQKKzEyMzY6IG5leHQgdmlydHVhbCB0ZXJtaW5hbCAvIDM0NTY6IHByZXZpb3VzIFZUCisyMzQ6IHNlYXJjaCBmb3J3YXJkIC8gMTU2OiBzZWFyY2ggYmFja3dhcmQgKHVzZSBjdXQgdG8gc2V0IHNlYXJjaCBzdHJpbmcpCisxMjM1NjogbmV4dCBwcm9tcHQgLyAyMzQ1NjogcHJldmlvdXMgcHJvbXB0IChzYW1lIHByb21wdCBhcyBjdXJyZW50IGxpbmUpCisxMzQ1OiBuZXh0IHBhcmFncmFwaCAvIDEyNDY6IHByZXZpb3VzIHBhcmFncmFwaCAobGluZSBhZnRlciBibGFuayBsaW5lKQorCisyOiBrZXlib2FyZCBsZWZ0IGFycm93IC8gNToga2V5Ym9hcmQgcmlnaHQgYXJyb3cKKzIzOiBrZXlib2FyZCB1cCBhcnJvdyAvIDU2OiBrZXlib2FyZCBkb3duIGFycm93CisxMiBjaG9yZDoga2V5Ym9hcmQgYmFja3NwYWNlCisxNDUgY2hvcmQ6IGtleWJvYXJkIGRlbGV0ZQorMjM0NSBjaG9yZDoga2V5Ym9hcmQgdGFiCis0NiBjaG9yZDoga2V5Ym9hcmQgcmV0dXJuCisyNDYgY2hvcmQ6IGtleWJvYXJkIGVzY2FwZQorCisxMjU6IGhvbWUgKGdvdG8gY3Vyc29yKQorMTI1NjogZ290byBjdXJzb3IgcHJldmlvdXMgcG9zaXRpb24KKzE0OiBjdXJzb3IgdHJhY2tpbmcgKHRvZ2dsZSkKKzEyNCBjaG9yZDogZnJlZXplIHNjcmVlbiAodG9nZ2xlKQorMTQ1NjogaGVscCBtb2RlICh0b2dnbGUpCisxMjQ1NjogbGVhcm4gbW9kZSAoa2V5IGRlc2NyaWJlcikgKHRvZ2dsZSkKKzM0OiBzdGF0dXMgbW9kZSAodG9nZ2xlKQorMjQ6IGF0dHJpYnV0ZSBkaXNwbGF5ICh0b2dnbGUpCisyMzQ2OiBzaXggZG90cyBtb2RlICh0b2dnbGUpCisKKzI0NSBjaG9yZDogcm91dGUgY3Vyc29yIHRvIGJlZ2lubmluZyBvZiBsaW5lCis0NSBjaG9yZDogcm91dGUgY3Vyc29yIHRvIGN1cnJlbnQgbGluZQorMjM2IGNob3JkOiBjdXQgc3RhcnQKKzEyNiBjaG9yZDogY3V0IGFwcGVuZAorMzU2IGNob3JkOiBjdXQgZW5kIHJlY3Rhbmd1bGFyCisxNiBjaG9yZDogY3V0IGVuZCBsaW5lYXIKKzEyMzQgY2hvcmQ6IHBhc3RlCisKKzM2OiBzcGVhayBsaW5lCisxMzQ6IG11dGUgc3BlZWNoCisKKzEyMzUgY2hvcmQ6IHJlc3RhcnQgYnJhaWxsZSBkcml2ZXIKKworMjUgY2hvcmQ6IHByZWZlcmVuY2VzIG9wdGlvbnM6CisgIDEzNDogbWVudQorICAxMjM1OiByZXNldAorICAyMzQ6IHNhdmUKKyAgMTM1NjogY2FuY2VsCisKK0Nob3JkIHJlcXVpcmVkIGZvciAqZGFuZ2Vyb3VzKiBjb21tYW5kcywgZS5nLiByb3V0aW5nLCBjdXQvcGFzdGUsCityZXN0YXJ0IGRyaXZlciwgZXRjLgorCitBZHZhbmNlIEJhciBDb21iaW5hdGlvbnM6CitMZWZ0ICAgUmlnaHQgIERlc2NyaXB0aW9uCitjZW50ZXIgLS0tLS0tIGhhbGYgd2luZG93IGxlZnQKKy0tLS0tLSBjZW50ZXIgaGFsZiB3aW5kb3cgcmlnaHQKK2xlZnQgICBsZWZ0ICAgdXAgdG8gbGluZSB3aXRoIGRpZmZlcmVudCBjb250ZW50CitsZWZ0ICAgcmlnaHQgIGRvd24gdG8gbGluZSB3aXRoIGRpZmZlcmVudCBjb250ZW50CityaWdodCAgbGVmdCAgIHVwIHRvIGxpbmUgd2l0aCBkaWZmZXJlbnQgaGlnaGxpZ2h0aW5nCityaWdodCAgcmlnaHQgIGRvd24gdG8gbGluZSB3aXRoIGRpZmZlcmVudCBoaWdobGlnaHRpbmcKK2NlbnRlciBsZWZ0ICAgdXAgdG8gdG9wIGxpbmUKK2NlbnRlciByaWdodCAgZG93biB0byBib3R0b20gbGluZQorCitXaGl6IFdoZWVscyAoTWlsbGVubml1bSBtb2RlbHMpOgorV2hlZWwgTW90aW9uIERlc2NyaXB0aW9uCitsZWZ0ICB1cCAgICAgb25lIGxpbmUgdXAKK2xlZnQgIGRvd24gICBvbmUgbGluZSBkb3duCityaWdodCB1cCAgICAgZnVsbCB3aW5kb3cgbGVmdAorcmlnaHQgZG93biAgIGZ1bGwgd2luZG93IHJpZ2h0CitsZWZ0ICBwcmVzcyAgYXR0cmlidXRlIHVuZGVybGluaW5nICh0b2dnbGUpCityaWdodCBwcmVzcyAgc2hvdyBjdXJzb3IgKHRvZ2dsZSkKKworSW50ZXJuYWw6CisKKzEyNDUgY2hvcmQ6IHBvc2l0aW9uIGludGVybmFsIGN1cnNvciBmb3IgY29sdW1uLXNwZWNpZmljIGZ1bmN0aW9uOgorICBUbyBtb3ZlIGludGVybmFsIGN1cnNvcjoKKyAgICAxMjU6IGNlbnRyZSBvZiB3aW5kb3cKKyAgICAyMzU6IGxlZnQgZW5kIG9mIHdpbmRvdworICAgIDI1NjogcmlnaHQgZW5kIG9mIHdpbmRvdworICAgIDM6IGNoYXJhY3RlciBsZWZ0CisgICAgNjogY2hhcmFjdGVyIHJpZ2h0CisgICAgbGVmdCBiYXIgbGVmdDogcXVhcnRlciB3aW5kb3cgbGVmdAorICAgIHJpZ2h0IGJhciByaWdodDogcXVhcnRlciB3aW5kb3cgcmlnaHQKKyAgICByb3V0aW5nIGtleTogZ28gdG8gY2hhcmFjdGVyCisgIFRvIHRlcm1pbmF0ZToKKyAgICAyMzYgY2hvcmQ6IGN1dCBzdGFydAorICAgIDEyNiBjaG9yZDogY3V0IGFwcGVuZAorICAgIDM1NiBjaG9yZDogY3V0IGVuZCByZWN0YW5ndWxhcgorICAgIDE2IGNob3JkOiBjdXQgZW5kIGxpbmVhcgorICAgIDI0OiBkZXNjcmliZSBhdHRyaWJ1dGVzIG9mIHNlbGVjdGVkIGNoYXJhY3RlcgorICAgIDEzNTY6IGNhbmNlbAorCitrIGNob3JkIHRvZ2dsZXMga2V5Ym9hcmQgZW11bGF0aW9uIG1vZGUgLSBpbml0aWFsbHkgb2ZmLgorV2hlbiBvbiwgdW5jaG9yZGVkIGNoYXJhY3RlcnMgcGFzc2VkIGRpcmVjdGx5IHRvIGluc2tleSgpLCB1bmxlc3MgcHJlZml4ZWQKK2J5OgorCit1IGNob3JkOiB1cHBlcmNhc2UgKHR3aWNlIHRvIGxvY2spCitxIGNob3JkOiB1bmxvY2sKKzI2IGNob3JkOiBhZGQgOHRoIGRvdCB0byBuZXh0IGNoYXIgdHlwZWQKKzM1IGNob3JkOiBwcmVwZW5kIEVTQ0FQRSB0byBuZXh0IGNoYXJhY3RlciAoQUxUKQoreCBjaG9yZDogY29udHJvbCBjaGFyYWN0ZXIKK3ogY2hvcmQ6IGNhbmNlbCBwcmVjZWRpbmcgbWV0YS9jb250cm9sCisKK0NvbWJpbmF0aW9ucyB3aXRoOgorZG90IDc6IHNoaWZ0Citkb3QgNzg6IGNvbnRyb2wKKworT3RoZXIgaW50ZXJuYWxzOgorCisyMzU2IGNob3JkOiByb3RhdGUgQnJhaWxsZUxpdGUgYnkgMTgwIGRlZ3JlZXMKK28gY2hvcmQ6IHNldCByZXBlYXQgY291bnQgZm9yIGZvbGxvd2luZyBjb21tYW5kICh1cCB0byAyZGlnaXRzKS4KKyAgVHlwZSBudW1iZXJzLCB0aGVuIHR5cGUgbW92ZW1lbnQgY29tbWFuZCBvciBjaGFyYWN0ZXIgKGlmIGluCisgICAga2V5Ym9hcmQgZW11bGF0aW9uKS4KKyAgeiBjaG9yZDogY2FuY2VscyBzcGVjaWFsIGNvbnRleHQuCisgIGUgY2hvcmQ6IGNvbmZpcm1zIGNvdW50IGFuZCB3YWl0cyBmb3Iga2V5IHRvIHJlcGVhdC4KK0dvdG8gdmlydHVhbCB0ZXJtaW5hbDogdXNlIG8gY2hvcmQsIGZvbGxvd2VkIGJ5IFZUIG51bWJlciwKKyAgZm9sbG93ZWQgYnkgdiBjaG9yZCBvciAjIGNob3JkLgorU2V0L2dvdG8gbWFyazogdXNlIG8gY2hvcmQgZm9sbG93ZWQgYnkgIyBmb2xsb3dlZCBieSBzIHRvIHNldCBvciBtIHRvIGdvLgpkaWZmIC0tZ2l0IGEvVGFibGVzL0lucHV0L2JtL05MU19ab29tYXgua3RiIGIvVGFibGVzL0lucHV0L2JtL05MU19ab29tYXgua3RiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM0ZjEyZjYKLS0tIC9kZXYvbnVsbAorKysgYi9UYWJsZXMvSW5wdXQvYm0vTkxTX1pvb21heC5rdGIKQEAgLTAsMCArMSwxMDcgQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyMgICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisjCisjIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyMKKyMgQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCit0aXRsZSBOTFMgZVJlYWRlciBab29tYXgKKworbm90ZSBBbiBlaWdodC1kb3Qgc3RhbmRhcmQgYnJhaWxsZSBrZXlib2FyZCBpcyBhbG9uZyB0aGUgYmFjayBlZGdlIG9mIHRoZSB0b3AuCitub3RlICogRnJvbSBsZWZ0IHRvIHJpZ2h0LCBpdHMga2V5cyBhcmU6IERvdDcsIERvdDMsIERvdDIsIERvdDEsIERvdDQsIERvdDUsIERvdDYsIERvdDguCitub3RlICogVGhlIFNwYWNlIGtleSBpcyBpbiBiZXR3ZWVuIERvdDEgYW5kIERvdDQuCisKK25vdGUgVGhlIHR3byByb3VuZCBrZXlzIGF0IGVhY2ggZW5kIG9mIHRoZSBmcm9udCBhcmUgc3lzdGVtIGtleXMuIEZyb20gbGVmdCB0byByaWdodDoKK25vdGUgKiB0aGUgdHdvIG9uIHRoZSBsZWZ0IGFyZSBTMSBhbmQgUzIsIGFuZCB0aGUgdHdvIG9uIHRoZSByaWdodCBhcmUgUzMgYW5kIFM0LgorCithc3NpZ24gc3BhY2UgU3BhY2UKK2luY2x1ZGUgbmF2cGFkLmt0aQorbm90ZSBUaGVyZSdzIGEgcmVjdGFuZ3VsYXIga2V5IG9uIGVpdGhlciBzaWRlIG9mIHRoZSBuYXZpZ2F0aW9uIHBhZC4KK25vdGUgKiBUaGUgb25lIHRvIHRoZSBsZWZ0IGlzIG5hbWVkIEJMLCBhbmQgdGhlIG9uZSB0byB0aGUgcmlnaHQgaXMgbmFtZWQgQlIuCisKK2JpbmQgQkwgS0VZX0JBQ0tTUEFDRQorYmluZCBCTCtSb3V0aW5nS2V5IFNFVExFRlQKKworbWFwIFMxIEdVSQorbWFwIFMyIENPTlRST0wKK21hcCBTMyBNRVRBCittYXAgUzQgQUxUR1IKKworYmluZCBTMSBIRUxQCitiaW5kIFMyIFRJTUUKK2JpbmQgUzMgSU5GTworYmluZCBTNCBMRUFSTgorCitiaW5kIEJMK1NlbGVjdCBQUkVGTUVOVQorYmluZCBCTCtVcCBQUkVGTE9BRAorYmluZCBCTCtEb3duIFBSRUZTQVZFCisKK2JpbmQgQkwrTGVmdCBQUk5CV0lOCitiaW5kIEJMK1JpZ2h0IE5YTkJXSU4KKworYmluZCBTZWxlY3QrTGVmdCBGV0lOTFRTS0lQCitiaW5kIFNlbGVjdCtSaWdodCBGV0lOUlRTS0lQCisKK2JpbmQgTGVmdCtVcCBUT1BfTEVGVAorYmluZCBMZWZ0K0Rvd24gQk9UX0xFRlQKKworYmluZCBSaWdodCtVcCBUT1AKK2JpbmQgUmlnaHQrRG93biBCT1QKKworYmluZCBTMStVcCBBVFRSVVAKK2JpbmQgUzErRG93biBBVFRSRE4KKworYmluZCBTMitVcCBQUkRJRkxOCitiaW5kIFMyK0Rvd24gTlhESUZMTgorCitiaW5kIFMzK1VwIFBSUFJPTVBUCitiaW5kIFMzK0Rvd24gTlhQUk9NUFQKKworYmluZCBTNCtVcCBQUlBHUlBICitiaW5kIFM0K0Rvd24gTlhQR1JQSAorCitiaW5kIFMxK0xlZnQgTE5CRUcKK2JpbmQgUzErUmlnaHQgTE5FTkQKKworYmluZCBTMitMZWZ0IENIUkxUCitiaW5kIFMyK1JpZ2h0IENIUlJUCisKK2JpbmQgUzMrTGVmdCBIV0lOTFQKK2JpbmQgUzMrUmlnaHQgSFdJTlJUCisKK2JpbmQgUzQrTGVmdCBQUlNFQVJDSAorYmluZCBTNCtSaWdodCBOWFNFQVJDSAorCitiaW5kIFMxK1JvdXRpbmdLZXkgUFJESUZDSEFSCitiaW5kIFMyK1JvdXRpbmdLZXkgTlhESUZDSEFSCisKK2JpbmQgUzMrUm91dGluZ0tleSBQUklOREVOVAorYmluZCBTNCtSb3V0aW5nS2V5IE5YSU5ERU5UCisKK2JpbmQgU2VsZWN0K1MxIEFUVFJWSVMKK2JpbmQgU2VsZWN0K1MyIENTUlZJUworYmluZCBTZWxlY3QrUzMgQ1NSVFJLCitiaW5kIFNlbGVjdCtTNCBTSVhET1RTCisKK2JpbmQgQkwrUzMgRElTUE1ECitiaW5kIEJMK1M0IEZSRUVaRQorCitiaW5kIExlZnQrUmlnaHQgUEFTVEUKK2JpbmQgUzIrUzMgQ1NSSk1QX1ZFUlQKKworaW5jbHVkZSBkaXNwbGF5Ni5rdGkKK2luY2x1ZGUgcm91dGluZzYua3RpCisKK2Fzc2lnbiBzcGVlY2ggQkwrCitpbmNsdWRlIC4uL3NwZWVjaC5rdGkKZGlmZiAtLWdpdCBhL1RhYmxlcy9JbnB1dC9ibS9iMmcua3RiIGIvVGFibGVzL0lucHV0L2JtL2IyZy5rdGIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYThiODc2YwotLS0gL2Rldi9udWxsCisrKyBiL1RhYmxlcy9JbnB1dC9ibS9iMmcua3RiCkBAIC0wLDAgKzEsNDcgQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyMgICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisjCisjIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyMKKyMgQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCit0aXRsZSBOQlAgQjJHCisKK25vdGUgUHJlc3MgU3BhY2Ugd2hpbGUgaG9sZGluZyBCYWNrd2FyZCB0byBzd2l0Y2ggdG8gbmF2aWdhdGlvbiBtb2RlLgorbm90ZSBJbiBuYXZpZ2F0aW9uIG1vZGU6IEJhY2t3YXJkIGlzIEYxLCBGb3J3YXJkIGlzIEY0LCBEb3RzMS02IGFyZSBkaXNwbGF5IGtleXMgMS02LCBEb3Q3IGlzIEYyLCBEb3Q4IGlzIEYzLgorbm90ZSBQcmVzcyBTcGFjZSB3aGlsZSBob2xkaW5nIEZvcndhcmQgdG8gc3dpdGNoIHRvIGtleWJvYXJkIG1vZGUuCitub3RlIEluIGtleWJvYXJkIG1vZGU6IEJhY2t3YXJkIGlzIEI5LCBGb3J3YXJkIGlzIEIxMCwgU3BhY2UgaXMgQjExLgorCitpbmNsdWRlIGQ2Lmt0aQoraW5jbHVkZSByb3V0aW5nNi5rdGkKKworYmluZCBGMSBGV0lOTFQKK2JpbmQgRjQgRldJTlJUCisKK2JpbmQgQjkgRldJTkxUCitiaW5kIEIxMCBGV0lOUlQKKworYXNzaWduIHNwYWNlIEIxMQorYXNzaWduIHByZXNzIFNlbGVjdAoraW5jbHVkZSBuYXZwYWQua3RpCisKK2JpbmQgQjkrUm91dGluZ0tleSBTRVRMRUZUCitiaW5kIEIxMCtSb3V0aW5nS2V5IFNXSVRDSFZUCisKK2JpbmQgQjExK1VwIFRPUAorYmluZCBCMTErRG93biBCT1QKK2JpbmQgQjExK0xlZnQgRldJTkxUU0tJUAorYmluZCBCMTErUmlnaHQgRldJTlJUU0tJUAorYmluZCBCMTErU2VsZWN0IFBBU1RFCisKZGlmZiAtLWdpdCBhL1RhYmxlcy9JbnB1dC9ibS9iOWIxMC5rdGkgYi9UYWJsZXMvSW5wdXQvYm0vYjliMTAua3RpCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY4MTAyZDEKLS0tIC9kZXYvbnVsbAorKysgYi9UYWJsZXMvSW5wdXQvYm0vYjliMTAua3RpCkBAIC0wLDAgKzEsMjQgQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyMgICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisjCisjIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyMKKyMgQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitub3RlIEI5IGFuZCBCMTAgYXJlIHRoZSBrZXlzIGltbWVkaWF0ZWx5IHRvIHRoZSBsZWZ0IGFuZCByaWdodCBvZiB0aGUgam95c3RpY2suCisKK21hcCBCOSBTUEFDRQorYXNzaWduIHNwYWNlIEIxMAoraW5jbHVkZSBqb3lzdGljay5rdGkKK2JpbmQgQjkrUm91dGluZ0tleSBTRVRMRUZUCmRpZmYgLS1naXQgYS9UYWJsZXMvSW5wdXQvYm0vYjliMTFiMTAua3RpIGIvVGFibGVzL0lucHV0L2JtL2I5YjExYjEwLmt0aQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNTlmN2VhCi0tLSAvZGV2L251bGwKKysrIGIvVGFibGVzL0lucHV0L2JtL2I5YjExYjEwLmt0aQpAQCAtMCwwICsxLDM4IEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisjICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorIworIyBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisjCisjIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisjCisjIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyMgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorIyBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyMKKyMgV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworIworIyBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworbm90ZSBCOSBhbmQgQjEwIGFyZSB0aGUga2V5cyBpbW1lZGlhdGVseSB0byB0aGUgbGVmdCBhbmQgcmlnaHQgb2YgdGhlIGpveXN0aWNrLgorbm90ZSAqIElmIGVpdGhlciBvciBib3RoIGFyZSB1c2VkIGluIGEgY29tYmluYXRpb24gdGhhdCBpbmNsdWRlcyBhdCBsZWFzdAorbm90ZSAqIG9uZSBvZiB0aGUgRG90MS02IGtleXMgd2hpbGUgdGhlIGRldmljZSBpcyBpbiA4LWRvdCBicmFpbGxlIG1vZGUKK25vdGUgKiB0aGVuIHRoZXkgYmVjb21lIHRoZSBEb3Q3IGFuZCBEb3Q4IGtleXMuCitub3RlIEIxMSBpcyB0aGUga2V5IGJldHdlZW4gdGhlIERvdDEgYW5kIERvdDQga2V5cy4KKworYmluZCBCOSBLRVlfQkFDS1NQQUNFCitiaW5kIEIxMCBLRVlfRU5URVIKKworYXNzaWduIHNwYWNlIEIxMQoraW5jbHVkZSBqb3lzdGljay5rdGkKK2JpbmQgQjkrUm91dGluZ0tleSBTRVRMRUZUCitiaW5kIEIxMCtSb3V0aW5nS2V5IFNXSVRDSFZUCisKK2JpbmQgQjExK1VwIFRPUAorYmluZCBCMTErRG93biBCT1QKK2JpbmQgQjExK0xlZnQgRldJTkxUU0tJUAorYmluZCBCMTErUmlnaHQgRldJTlJUU0tJUAorYmluZCBCMTErUHJlc3MgUEFTVEUKKwpkaWZmIC0tZ2l0IGEvVGFibGVzL0lucHV0L2JtL2NvbW1hbmQua3RpIGIvVGFibGVzL0lucHV0L2JtL2NvbW1hbmQua3RpCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQyYmRkMGIKLS0tIC9kZXYvbnVsbAorKysgYi9UYWJsZXMvSW5wdXQvYm0vY29tbWFuZC5rdGkKQEAgLTAsMCArMSwzNiBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorIyAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyMKKyMgQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorIworIyBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorIworIyBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisjIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyMgbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisjCisjIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMgVGhpcyBrZXkgc3VidGFibGUgaXMgZm9yIEJhdW0gZGlzcGxheXMgd2hpY2ggaGF2ZSBjb21tYW5kIGtleXMuCitub3RlIFRoZSBjb21tYW5kIGtleXMgYXJlIGluIHRoZSBtaWRkbGUsIGp1c3QgYmVoaW5kIHRoZSBjdXJzb3Igcm91dGluZyBrZXlzLAorbm90ZSBhbmQsIGZyb20gbGVmdCB0byByaWdodCwgYXJlIG5hbWVkIENvbW1hbmQxIHRocm91Z2ggQ29tbWFuZDcuCisKK21hcCBDb21tYW5kNCBTUEFDRQorbWFwIENvbW1hbmQzIERPVDEKK21hcCBDb21tYW5kMiBET1QyCittYXAgQ29tbWFuZDEgRE9UMworbWFwIENvbW1hbmQ1IERPVDQKK21hcCBDb21tYW5kNiBET1Q1CittYXAgQ29tbWFuZDcgRE9UNgorCitiaW5kIENvbW1hbmQ0K0NvbW1hbmQ1IEtFWV9FTlRFUgorYmluZCBDb21tYW5kNCtDb21tYW5kMiBLRVlfQkFDS1NQQUNFCitiaW5kIENvbW1hbmQ0K0NvbW1hbmQ2IEtFWV9UQUIKK2JpbmQgQ29tbWFuZDQrQ29tbWFuZDEgS0VZX0NVUlNPUl9MRUZUCitiaW5kIENvbW1hbmQ0K0NvbW1hbmQ3IEtFWV9DVVJTT1JfUklHSFQKKwpkaWZmIC0tZ2l0IGEvVGFibGVzL0lucHV0L2JtL2Nvbm5lY3Qua3RiIGIvVGFibGVzL0lucHV0L2JtL2Nvbm5lY3Qua3RiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ0ZTVjNWIKLS0tIC9kZXYvbnVsbAorKysgYi9UYWJsZXMvSW5wdXQvYm0vY29ubmVjdC5rdGIKQEAgLTAsMCArMSwyMyBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorIyAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyMKKyMgQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorIworIyBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorIworIyBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisjIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyMgbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisjCisjIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK3RpdGxlIEJhdW0gVmFyaW9Db25uZWN0IC8gSFdHIEJyYWlsbGVDb25uZWN0CisKK2luY2x1ZGUgZGlzcGxheTYua3RpCitpbmNsdWRlIHJvdXRpbmc2Lmt0aQoraW5jbHVkZSBiOWIxMC5rdGkKZGlmZiAtLWdpdCBhL1RhYmxlcy9JbnB1dC9ibS9jb25ueS5rdGIgYi9UYWJsZXMvSW5wdXQvYm0vY29ubnkua3RiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVmYzJmMDMKLS0tIC9kZXYvbnVsbAorKysgYi9UYWJsZXMvSW5wdXQvYm0vY29ubnkua3RiCkBAIC0wLDAgKzEsMjMgQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyMgICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisjCisjIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyMKKyMgQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCit0aXRsZSBCYXVtIENvbm55CisKK2luY2x1ZGUgZGlzcGxheTYua3RpCitpbmNsdWRlIHJvdXRpbmc2Lmt0aQoraW5jbHVkZSBiOWIxMWIxMC5rdGkKZGlmZiAtLWdpdCBhL1RhYmxlcy9JbnB1dC9ibS9kNi5rdGkgYi9UYWJsZXMvSW5wdXQvYm0vZDYua3RpCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgzZGE0ODkKLS0tIC9kZXYvbnVsbAorKysgYi9UYWJsZXMvSW5wdXQvYm0vZDYua3RpCkBAIC0wLDAgKzEsODYgQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyMgICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisjCisjIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyMKKyMgQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitiaW5kIERpc3BsYXkyIEZXSU5MVAorYmluZCBEaXNwbGF5NSBGV0lOUlQKKworYmluZCBEaXNwbGF5MStEaXNwbGF5MyBDSFJMVAorYmluZCBEaXNwbGF5NCtEaXNwbGF5NiBDSFJSVAorCitiaW5kIERpc3BsYXkxK0Rpc3BsYXkyK0Rpc3BsYXkzIExOQkVHCitiaW5kIERpc3BsYXk0K0Rpc3BsYXk1K0Rpc3BsYXk2IExORU5ECisKK2JpbmQgRGlzcGxheTQgTE5VUAorYmluZCBEaXNwbGF5NiBMTkROCisKK2JpbmQgRGlzcGxheTErRGlzcGxheTQgVE9QCitiaW5kIERpc3BsYXkzK0Rpc3BsYXk2IEJPVAorCitiaW5kIERpc3BsYXkyK0Rpc3BsYXk0IFRPUF9MRUZUCitiaW5kIERpc3BsYXkyK0Rpc3BsYXk2IEJPVF9MRUZUCisKK2JpbmQgRGlzcGxheTUrRGlzcGxheTQgUFJESUZMTgorYmluZCBEaXNwbGF5NStEaXNwbGF5NiBOWERJRkxOCisKK2JpbmQgRGlzcGxheTIrRGlzcGxheTEgQVRUUlVQCitiaW5kIERpc3BsYXkyK0Rpc3BsYXkzIEFUVFJETgorCitiaW5kIERpc3BsYXkyK0Rpc3BsYXk1K0Rpc3BsYXkxK0Rpc3BsYXk0IFBSUFJPTVBUCitiaW5kIERpc3BsYXkyK0Rpc3BsYXk1K0Rpc3BsYXkzK0Rpc3BsYXk2IE5YUFJPTVBUCisKK2JpbmQgRGlzcGxheTIrRGlzcGxheTUrRGlzcGxheTQgUFJQR1JQSAorYmluZCBEaXNwbGF5MitEaXNwbGF5NStEaXNwbGF5NiBOWFBHUlBICisKK2JpbmQgRGlzcGxheTIrRGlzcGxheTQrRGlzcGxheTYrRGlzcGxheTEgUFJTRUFSQ0gKK2JpbmQgRGlzcGxheTIrRGlzcGxheTQrRGlzcGxheTYrRGlzcGxheTMgTlhTRUFSQ0gKKworYmluZCBEaXNwbGF5MSBDU1JUUksrb24KK2JpbmQgRGlzcGxheTMgQ1NSVFJLK29mZgorCitiaW5kIERpc3BsYXkxK0Rpc3BsYXk2IEJBQ0sKKworYmluZCBEaXNwbGF5MitEaXNwbGF5NCtEaXNwbGF5NiBIT01FCitiaW5kIERpc3BsYXkxK0Rpc3BsYXkzK0Rpc3BsYXk1IFNQS0hPTUUKKworYmluZCBEaXNwbGF5MStEaXNwbGF5MytEaXNwbGF5NCtEaXNwbGF5NiBDU1JKTVBfVkVSVAorYmluZCBEaXNwbGF5MitEaXNwbGF5NSBJTkZPCisKK2JpbmQgRGlzcGxheTErRGlzcGxheTQrRGlzcGxheTUgRElTUE1ECitiaW5kIERpc3BsYXkxK0Rpc3BsYXk1IFRJTUUKK2JpbmQgRGlzcGxheTErRGlzcGxheTIrRGlzcGxheTQgRlJFRVpFCitiaW5kIERpc3BsYXkxK0Rpc3BsYXkyK0Rpc3BsYXk1IEhFTFAKK2JpbmQgRGlzcGxheTErRGlzcGxheTMrRGlzcGxheTQgUFJFRk1FTlUKK2JpbmQgRGlzcGxheTErRGlzcGxheTIrRGlzcGxheTMrRGlzcGxheTQgUEFTVEUKK2JpbmQgRGlzcGxheTErRGlzcGxheTIrRGlzcGxheTMrRGlzcGxheTUgUFJFRkxPQUQKK2JpbmQgRGlzcGxheTIrRGlzcGxheTMrRGlzcGxheTQgUkVTVEFSVFNQRUVDSAorYmluZCBEaXNwbGF5MitEaXNwbGF5MytEaXNwbGF5NCtEaXNwbGF5NSBBVFRSVklTCitiaW5kIERpc3BsYXkyK0Rpc3BsYXk0K0Rpc3BsYXk1K0Rpc3BsYXk2IFBSRUZTQVZFCisKK2JpbmQgRGlzcGxheTIrRGlzcGxheTMrRGlzcGxheTUgU0lYRE9UUytvbgorYmluZCBEaXNwbGF5MitEaXNwbGF5MytEaXNwbGF5NiBTSVhET1RTK29mZgorCitiaW5kIERpc3BsYXkxK0Rpc3BsYXk0K0Rpc3BsYXk1K0Rpc3BsYXk2IExFQVJOCitiaW5kIERpc3BsYXkxK0Rpc3BsYXkyK0Rpc3BsYXkzK0Rpc3BsYXk2IFNXSVRDSFZUX05FWFQKK2JpbmQgRGlzcGxheTMrRGlzcGxheTQrRGlzcGxheTUrRGlzcGxheTYgU1dJVENIVlRfUFJFVgorCitiaW5kIERpc3BsYXkzK0Rpc3BsYXk0IE1VVEUKK2JpbmQgRGlzcGxheTMrRGlzcGxheTUgU0FZX0xJTkUKK2JpbmQgRGlzcGxheTMrRGlzcGxheTUrRGlzcGxheTQgU0FZX0FCT1ZFCitiaW5kIERpc3BsYXkzK0Rpc3BsYXk1K0Rpc3BsYXk2IFNBWV9CRUxPVworYmluZCBEaXNwbGF5MytEaXNwbGF5NCtEaXNwbGF5NiBBVVRPU1BFQUsKKwpkaWZmIC0tZ2l0IGEvVGFibGVzL0lucHV0L2JtL2RlZmF1bHQua3RiIGIvVGFibGVzL0lucHV0L2JtL2RlZmF1bHQua3RiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcxYmRjZTUKLS0tIC9kZXYvbnVsbAorKysgYi9UYWJsZXMvSW5wdXQvYm0vZGVmYXVsdC5rdGIKQEAgLTAsMCArMSwyMyBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorIyAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyMKKyMgQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorIworIyBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorIworIyBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisjIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyMgbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisjCisjIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK3RpdGxlIEJhdW0gKGRlZmF1bHQpCisKK2luY2x1ZGUgZGlzcGxheTYua3RpCitpbmNsdWRlIHJvdXRpbmc2Lmt0aQoraW5jbHVkZSBiOWIxMC5rdGkKZGlmZiAtLWdpdCBhL1RhYmxlcy9JbnB1dC9ibS9kaXNwbGF5Ni5rdGkgYi9UYWJsZXMvSW5wdXQvYm0vZGlzcGxheTYua3RpCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA4Y2VlOGMKLS0tIC9kZXYvbnVsbAorKysgYi9UYWJsZXMvSW5wdXQvYm0vZGlzcGxheTYua3RpCkBAIC0wLDAgKzEsMjQgQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyMgICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisjCisjIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyMKKyMgQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitub3RlIFRoZXJlIGFyZSB0aHJlZSBkaXNwbGF5IGtleXMgYXQgZWFjaCBlbmQgb2YgdGhlIGJyYWlsbGUgY2VsbHMuCitub3RlICogRnJvbSB0b3AgdG8gYm90dG9tOgorbm90ZSArIFRoZSB0aHJlZSBhdCB0aGUgbGVmdCBhcmUgbmFtZWQgRGlzcGxheTEsIERpc3BsYXkyLCBhbmQgRGlzcGxheTMuCitub3RlICsgVGhlIHRocmVlIGF0IHRoZSByaWdodCBhcmUgbmFtZWQgRGlzcGxheTQsIERpc3BsYXk1LCBhbmQgRGlzcGxheTYuCisKK2luY2x1ZGUgZDYua3RpCmRpZmYgLS1naXQgYS9UYWJsZXMvSW5wdXQvYm0vZGlzcGxheTcua3RpIGIvVGFibGVzL0lucHV0L2JtL2Rpc3BsYXk3Lmt0aQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMWI2ZWNiCi0tLSAvZGV2L251bGwKKysrIGIvVGFibGVzL0lucHV0L2JtL2Rpc3BsYXk3Lmt0aQpAQCAtMCwwICsxLDY2IEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisjICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorIworIyBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisjCisjIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisjCisjIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyMgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorIyBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyMKKyMgV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworIworIyBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIyBUaGlzIGtleSBzdWJ0YWJsZSBpcyBmb3IgQmF1bSBkaXNwbGF5cyB3aGljaCBoYXZlIDcgZGlzcGxheSBrZXlzLgorbm90ZSBUaGUgZGlzcGxheSBrZXlzIGFyZSBhdCBib3RoIGVuZHMgb2YgdGhlIHRleHQgY2VsbCBhcmVhLCBqdXN0IGFib3ZlIGl0Lgorbm90ZSAqIFRoZSB0d28gYXQgdGhlIGxlZnQgYXJlIG5hbWVkIERpc3BsYXkxIGFuZCBEaXNwbGF5Mi4KK25vdGUgKiBUaGUgbGFyZ2Uga2V5IGF0IHRoZSByaWdodCBpcyBuYW1lZCBEaXNwbGF5NS4KK25vdGUgKiBUaGUgdHdvIGltbWVkaWF0ZWx5IHRvIGl0cyBsZWZ0IGFyZSBuYW1lZCBEaXNwbGF5MyBhbmQgRGlzcGxheTQuCitub3RlICogVGhlIHR3byBpbW1lZGlhdGVseSB0byBpdHMgcmlnaHQgYXJlIG5hbWVkIERpc3BsYXk2IGFuZCBEaXNwbGF5Ny4KKworYmluZCBEaXNwbGF5NSBSRVRVUk4KK2JpbmQgRGlzcGxheTMgTE5VUAorYmluZCBEaXNwbGF5NCBMTkROCitiaW5kIERpc3BsYXk2IEZXSU5MVAorYmluZCBEaXNwbGF5NyBGV0lOUlQKKworYmluZCBEaXNwbGF5MSBUT1BfTEVGVAorYmluZCBEaXNwbGF5MiBCT1RfTEVGVAorCitiaW5kIERpc3BsYXk1K0Rpc3BsYXkzIFBSRElGTE4KK2JpbmQgRGlzcGxheTUrRGlzcGxheTQgTlhESUZMTgorYmluZCBEaXNwbGF5NStEaXNwbGF5NiBBVFRSVVAKK2JpbmQgRGlzcGxheTUrRGlzcGxheTcgQVRUUkROCisKK2JpbmQgRGlzcGxheTIrRGlzcGxheTUgRlJFRVpFCitiaW5kIERpc3BsYXkyK0Rpc3BsYXkzIFBSUFJPTVBUCitiaW5kIERpc3BsYXkyK0Rpc3BsYXk0IE5YUFJPTVBUCitiaW5kIERpc3BsYXkyK0Rpc3BsYXk2IFBSUEdSUEgKK2JpbmQgRGlzcGxheTIrRGlzcGxheTcgTlhQR1JQSAorCitiaW5kIERpc3BsYXkxK0Rpc3BsYXk1IENTUlRSSworYmluZCBEaXNwbGF5MStEaXNwbGF5MyBESVNQTUQKK2JpbmQgRGlzcGxheTErRGlzcGxheTQgU0lYRE9UUworYmluZCBEaXNwbGF5MStEaXNwbGF5NiBBVFRSVklTCitiaW5kIERpc3BsYXkxK0Rpc3BsYXk3IENTUlZJUworCitiaW5kIERpc3BsYXkxK0Rpc3BsYXkyK0Rpc3BsYXk1IEFVVE9TUEVBSworYmluZCBEaXNwbGF5MStEaXNwbGF5MitEaXNwbGF5MyBNVVRFCitiaW5kIERpc3BsYXkxK0Rpc3BsYXkyK0Rpc3BsYXk0IFNBWV9MSU5FCitiaW5kIERpc3BsYXkxK0Rpc3BsYXkyK0Rpc3BsYXk2IFNBWV9BQk9WRQorYmluZCBEaXNwbGF5MStEaXNwbGF5MitEaXNwbGF5NyBTQVlfQkVMT1cKKworYmluZCBEaXNwbGF5MStEaXNwbGF5MiBIRUxQCitiaW5kIERpc3BsYXkzK0Rpc3BsYXk0IExFQVJOCitiaW5kIERpc3BsYXk2K0Rpc3BsYXk3IFBSRUZNRU5VCitiaW5kIERpc3BsYXkzK0Rpc3BsYXk2IFBSRUZMT0FECitiaW5kIERpc3BsYXk0K0Rpc3BsYXk3IFBSRUZTQVZFCisKK2JpbmQgRGlzcGxheTUrRGlzcGxheTMrRGlzcGxheTYgQ1NSSk1QX1ZFUlQKK2JpbmQgRGlzcGxheTUrRGlzcGxheTQrRGlzcGxheTcgUEFTVEUKKwpkaWZmIC0tZ2l0IGEvVGFibGVzL0lucHV0L2JtL2RtODBwLmt0YiBiL1RhYmxlcy9JbnB1dC9ibS9kbTgwcC5rdGIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjVkOTQxYQotLS0gL2Rldi9udWxsCisrKyBiL1RhYmxlcy9JbnB1dC9ibS9kbTgwcC5rdGIKQEAgLTAsMCArMSwyMiBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorIyAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyMKKyMgQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorIworIyBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorIworIyBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisjIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyMgbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisjCisjIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK3RpdGxlIEJhdW0gRE0gODAgUGx1cworCitpbmNsdWRlIGRpc3BsYXk3Lmt0aQoraW5jbHVkZSByb3V0aW5nNy5rdGkKZGlmZiAtLWdpdCBhL1RhYmxlcy9JbnB1dC9ibS9lbXVsYXRlNi5rdGkgYi9UYWJsZXMvSW5wdXQvYm0vZW11bGF0ZTYua3RpCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJiMzA1ZDcKLS0tIC9kZXYvbnVsbAorKysgYi9UYWJsZXMvSW5wdXQvYm0vZW11bGF0ZTYua3RpCkBAIC0wLDAgKzEsMjEgQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyMgICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisjCisjIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyMKKyMgQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitub3RlIEFueSBkaXNwbGF5IGtleSBjb21iaW5hdGlvbiBjYW4gYmUgZW11bGF0ZWQgYnkgaG9sZGluZyBce3ByZXNzfQorbm90ZSAqIHdoaWxlIHR5cGluZyB0aGUgY29ycmVzcG9uZGluZyBjb21iaW5hdGlvbiBvZiBkb3RzIDEtNi4KK2luY2x1ZGUgZDYua3RpCmRpZmYgLS1naXQgYS9UYWJsZXMvSW5wdXQvYm0vZnJvbnQxMC5rdGkgYi9UYWJsZXMvSW5wdXQvYm0vZnJvbnQxMC5rdGkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2VkMDRiZgotLS0gL2Rldi9udWxsCisrKyBiL1RhYmxlcy9JbnB1dC9ibS9mcm9udDEwLmt0aQpAQCAtMCwwICsxLDYzIEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisjICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorIworIyBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisjCisjIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisjCisjIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyMgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorIyBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyMKKyMgV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworIworIyBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIyBUaGlzIGtleSBzdWJ0YWJsZSBpcyBmb3IgQmF1bSBkaXNwbGF5cyB3aGljaCBoYXZlIDEwIGZyb250IGtleXMuCitub3RlIFRoZSBrZXlzIGluIHRoZSB1cHBlciByb3cgb24gdGhlIGZyb250IGFyZSBuYW1lZDoKK25vdGUgKiBGcm9udDEsIEZyb250MywgRnJvbnQ1LCBGcm9udDcsIEZyb250OS4KK25vdGUgVGhlIGtleXMgaW4gdGhlIGxvd2VyIHJvdyBvbiB0aGUgZnJvbnQgYXJlIG5hbWVkOgorbm90ZSAqIEZyb250MiwgRnJvbnQ0LCBGcm9udDYsIEZyb250OCwgRnJvbnQxMC4KK25vdGUgVGhlIGtleXMgaW4gdGhlIHVwcGVyIHJvdyBvbiB0aGUgYmFjayBhcmUgbmFtZWQ6Citub3RlICogQmFjazEsIEJhY2szLCBCYWNrNSwgQmFjazcsIEJhY2s5Lgorbm90ZSBUaGUga2V5cyBpbiB0aGUgbG93ZXIgcm93IG9uIHRoZSBiYWNrIGFyZSBuYW1lZDoKK25vdGUgKiBCYWNrMiwgQmFjazQsIEJhY2s2LCBCYWNrOCwgQmFjazEwLgorCitiaW5kIEZyb250MSBMTlVQCitiaW5kIEZyb250MiBMTkROCisKK2JpbmQgRnJvbnQzIExOVVAKK2JpbmQgRnJvbnQ0IExORE4KKworYmluZCBGcm9udDUgTE5VUAorYmluZCBGcm9udDYgTE5ETgorCitiaW5kIEZyb250NyBMTlVQCitiaW5kIEZyb250OCBMTkROCisKK2JpbmQgRnJvbnQ5IExOVVAKK2JpbmQgRnJvbnQxMCBMTkROCisKK2JpbmQgRnJvbnQ1K0Zyb250MSBUT1BfTEVGVAorYmluZCBGcm9udDUrRnJvbnQyIEJPVF9MRUZUCitiaW5kIEZyb250NitGcm9udDEgVE9QCitiaW5kIEZyb250NitGcm9udDIgQk9UCisKK2JpbmQgRnJvbnQ1K0Zyb250MyBQUlBST01QVAorYmluZCBGcm9udDUrRnJvbnQ0IE5YUFJPTVBUCitiaW5kIEZyb250NitGcm9udDMgUFJQR1JQSAorYmluZCBGcm9udDYrRnJvbnQ0IE5YUEdSUEgKKworI2JpbmQgRnJvbnQ1K0Zyb250NyBMTlVQCisjYmluZCBGcm9udDUrRnJvbnQ4IExORE4KKyNiaW5kIEZyb250NitGcm9udDcgTE5VUAorI2JpbmQgRnJvbnQ2K0Zyb250OCBMTkROCisKK2JpbmQgRnJvbnQ1K0Zyb250OSBQUkRJRkxOCitiaW5kIEZyb250NStGcm9udDEwIE5YRElGTE4KK2JpbmQgRnJvbnQ2K0Zyb250OSBBVFRSVVAKK2JpbmQgRnJvbnQ2K0Zyb250MTAgQVRUUkROCisKZGlmZiAtLWdpdCBhL1RhYmxlcy9JbnB1dC9ibS9mcm9udDYua3RpIGIvVGFibGVzL0lucHV0L2JtL2Zyb250Ni5rdGkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTBkYWE1YgotLS0gL2Rldi9udWxsCisrKyBiL1RhYmxlcy9JbnB1dC9ibS9mcm9udDYua3RpCkBAIC0wLDAgKzEsMjggQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyMgICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisjCisjIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyMKKyMgQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjIFRoaXMga2V5IHN1YnRhYmxlIGlzIGZvciBCYXVtIGRpc3BsYXlzIHdoaWNoIGhhdmUgNiBmcm9udCBrZXlzLgorbm90ZSBUaGUga2V5cyBpbiB0aGUgdXBwZXIgcm93IG9uIHRoZSBmcm9udCBhcmUgbmFtZWQ6Citub3RlICogRnJvbnQxLCBGcm9udDMsIEZyb250NS4KK25vdGUgVGhlIGtleXMgaW4gdGhlIGxvd2VyIHJvdyBvbiB0aGUgZnJvbnQgYXJlIG5hbWVkOgorbm90ZSAqIEZyb250MiwgRnJvbnQ0LCBGcm9udDYuCitub3RlIFRoZSBrZXlzIGluIHRoZSB1cHBlciByb3cgb24gdGhlIGJhY2sgYXJlIG5hbWVkOgorbm90ZSAqIEJhY2sxLCBCYWNrMywgQmFjazUuCitub3RlIFRoZSBrZXlzIGluIHRoZSBsb3dlciByb3cgb24gdGhlIGJhY2sgYXJlIG5hbWVkOgorbm90ZSAqIEJhY2syLCBCYWNrNCwgQmFjazYuCisKZGlmZiAtLWdpdCBhL1RhYmxlcy9JbnB1dC9ibS9ob3Jpem9udGFsLmt0aSBiL1RhYmxlcy9JbnB1dC9ibS9ob3Jpem9udGFsLmt0aQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NDI5OTViCi0tLSAvZGV2L251bGwKKysrIGIvVGFibGVzL0lucHV0L2JtL2hvcml6b250YWwua3RpCkBAIC0wLDAgKzEsMzkgQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyMgICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisjCisjIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyMKKyMgQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjIFRoaXMga2V5IHN1YnRhYmxlIGlzIGZvciBCYXVtIGRpc3BsYXlzIHdoaWNoIGhhdmUgaG9yaXpvbnRhbCBzZW5zb3JzLgorCitiaW5kICFIb3Jpem9udGFsU2Vuc29yIFJPVVRFCisKK2JpbmQgRGlzcGxheTErIUhvcml6b250YWxTZW5zb3IgQ0xJUF9ORVcKK2JpbmQgRGlzcGxheTIrIUhvcml6b250YWxTZW5zb3IgQ0xJUF9BREQKK2JpbmQgRGlzcGxheTQrIUhvcml6b250YWxTZW5zb3IgQ09QWV9MSU5FCitiaW5kIERpc3BsYXk1KyFIb3Jpem9udGFsU2Vuc29yIENPUFlfUkVDVAorCitiaW5kIERpc3BsYXkzKyFIb3Jpem9udGFsU2Vuc29yIERFU0NDSEFSCitiaW5kIERpc3BsYXk2KyFIb3Jpem9udGFsU2Vuc29yIFNFVExFRlQKKworYmluZCBEaXNwbGF5MitEaXNwbGF5MSshSG9yaXpvbnRhbFNlbnNvciBQUklOREVOVAorYmluZCBEaXNwbGF5MitEaXNwbGF5MyshSG9yaXpvbnRhbFNlbnNvciBOWElOREVOVAorCitiaW5kIERpc3BsYXk1K0Rpc3BsYXk0KyFIb3Jpem9udGFsU2Vuc29yIFBSRElGQ0hBUgorYmluZCBEaXNwbGF5NStEaXNwbGF5NishSG9yaXpvbnRhbFNlbnNvciBOWERJRkNIQVIKKworYmluZCBEaXNwbGF5MStEaXNwbGF5MyshSG9yaXpvbnRhbFNlbnNvciBTRVRNQVJLCitiaW5kIERpc3BsYXk0K0Rpc3BsYXk2KyFIb3Jpem9udGFsU2Vuc29yIEdPVE9NQVJLCisKZGlmZiAtLWdpdCBhL1RhYmxlcy9JbnB1dC9ibS9pbmthLmt0YiBiL1RhYmxlcy9JbnB1dC9ibS9pbmthLmt0YgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ODkyNDBmCi0tLSAvZGV2L251bGwKKysrIGIvVGFibGVzL0lucHV0L2JtL2lua2Eua3RiCkBAIC0wLDAgKzEsMjkgQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyMgICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisjCisjIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyMKKyMgQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCit0aXRsZSBCYXVtIElua2EKKworaW5jbHVkZSBkaXNwbGF5Ni5rdGkKK2luY2x1ZGUgaG9yaXpvbnRhbC5rdGkKK2luY2x1ZGUgdmVydGljYWwua3RpCisKK25vdGUgVGhlIHN3aXRjaGVzIGFyZSBvZmYgd2hlbiB0byB0aGUgbGVmdCBhbmQgb24gd2hlbiB0byB0aGUgcmlnaHQuCitub3RlICogU3dpdGNoMSAodXBwZXItbGVmdCk6IGRpc2FibGUgYWxsIHNlbnNvcnMuCitub3RlICogU3dpdGNoMiAobG93ZXItbGVmdCk6IHNjYWxlZCB2ZXJ0aWNhbCBzZW5zb3IgbGluZSBzZWxlY3Rpb24uCitub3RlICogU3dpdGNoMyAodXBwZXItcmlnaHQpOiBzaG93IHNlbGVjdGVkIGhvcml6b250YWwgc2Vuc29yIChhbGwgZG90cyByYWlzZWQpLgorbm90ZSAqIFN3aXRjaDQgKGxvd2VyLXJpZ2h0KTogZW5hYmxlIGJyYWlsbGUga2V5Ym9hcmQuCmRpZmYgLS1naXQgYS9UYWJsZXMvSW5wdXQvYm0vam95c3RpY2sua3RpIGIvVGFibGVzL0lucHV0L2JtL2pveXN0aWNrLmt0aQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lOTBmMTcwCi0tLSAvZGV2L251bGwKKysrIGIvVGFibGVzL0lucHV0L2JtL2pveXN0aWNrLmt0aQpAQCAtMCwwICsxLDIxIEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisjICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorIworIyBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisjCisjIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisjCisjIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyMgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorIyBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyMKKyMgV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworIworIyBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworYXNzaWduRGVmYXVsdCBwcmVzcyBQcmVzcworbm90ZSBUaGUgZml2ZSBqb3lzdGljayBtb3Rpb25zIGFyZSBuYW1lZCBMZWZ0LCBSaWdodCwgVXAsIERvd24sIGFuZCBce3ByZXNzfS4KK2luY2x1ZGUga2V5Ym9hcmQua3RpCmRpZmYgLS1naXQgYS9UYWJsZXMvSW5wdXQvYm0va2V5Ym9hcmQua3RpIGIvVGFibGVzL0lucHV0L2JtL2tleWJvYXJkLmt0aQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMTNhNWI1Ci0tLSAvZGV2L251bGwKKysrIGIvVGFibGVzL0lucHV0L2JtL2tleWJvYXJkLmt0aQpAQCAtMCwwICsxLDY2IEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisjICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorIworIyBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisjCisjIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisjCisjIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyMgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorIyBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyMKKyMgV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworIworIyBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworbWFwIERvdDEgRE9UMQorbWFwIERvdDIgRE9UMgorbWFwIERvdDMgRE9UMworbWFwIERvdDQgRE9UNAorbWFwIERvdDUgRE9UNQorbWFwIERvdDYgRE9UNgorbWFwIERvdDcgRE9UNworbWFwIERvdDggRE9UOAorbWFwIFx7c3BhY2V9IFNQQUNFCisKK2Fzc2lnbiBjaG9yZCBce3NwYWNlfSsKK2luY2x1ZGUgLi4vY2hvcmRzLmt0aQorCitiaW5kIFx7cHJlc3N9IFJFVFVSTgoraW5jbHVkZSAuLi9uYXYua3RpCisKK2lmS2V5IFJvdXRpbmdLZXkKK2JpbmQgXHtzcGFjZX0rUm91dGluZ0tleSBLRVlfRlVOQ1RJT04KK2JpbmQgXHtzcGFjZX0rUm91dGluZ0tleSshUm91dGluZ0tleSBDTElQX0FQUEVORAorCitiaW5kIFJvdXRpbmdLZXkrXHtwcmVzc30gREVTQ0NIQVIKK2JpbmQgUm91dGluZ0tleStMZWZ0IENMSVBfTkVXCitiaW5kIFJvdXRpbmdLZXkrVXAgQ0xJUF9BREQKK2JpbmQgUm91dGluZ0tleStSaWdodCBDT1BZX0xJTkUKK2JpbmQgUm91dGluZ0tleStEb3duIENPUFlfUkVDVAorZW5kSWYKKworCisjIyMjIyMjIyMjIyMjIyMjIworIyBNZW51IEJpbmRpbmdzICMKKyMjIyMjIyMjIyMjIyMjIyMjCisKK2NvbnRleHQgbWVudQorCitiaW5kIFx7cHJlc3N9IFBSRUZNRU5VCitiaW5kIFVwIE1FTlVfUFJFVl9JVEVNCitiaW5kIERvd24gTUVOVV9ORVhUX0lURU0KK2JpbmQgTGVmdCBNRU5VX1BSRVZfU0VUVElORworYmluZCBSaWdodCBNRU5VX05FWFRfU0VUVElORworCitiaW5kIFx7c3BhY2V9IE1FTlVfUFJFVl9MRVZFTAorYmluZCBce3NwYWNlfStce3ByZXNzfSBQUkVGU0FWRQorYmluZCBce3NwYWNlfStVcCBNRU5VX0ZJUlNUX0lURU0KK2JpbmQgXHtzcGFjZX0rRG93biBNRU5VX0xBU1RfSVRFTQorYmluZCBce3NwYWNlfStMZWZ0IEZXSU5MVAorYmluZCBce3NwYWNlfStSaWdodCBGV0lOUlQKKworY29udGV4dCBkZWZhdWx0CmRpZmYgLS1naXQgYS9UYWJsZXMvSW5wdXQvYm0vbmF2cGFkLmt0aSBiL1RhYmxlcy9JbnB1dC9ibS9uYXZwYWQua3RpCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhiMmY2NTIKLS0tIC9kZXYvbnVsbAorKysgYi9UYWJsZXMvSW5wdXQvYm0vbmF2cGFkLmt0aQpAQCAtMCwwICsxLDIxIEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisjICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorIworIyBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisjCisjIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisjCisjIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyMgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorIyBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyMKKyMgV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworIworIyBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworYXNzaWduRGVmYXVsdCBwcmVzcyBTZWxlY3QKK25vdGUgVGhlIGZpdmUgbmF2aWdhdGlvbiBwYWQga2V5cyBhcmUgbmFtZWQgTGVmdCwgUmlnaHQsIFVwLCBEb3duLCBhbmQgXHtwcmVzc30uCitpbmNsdWRlIGtleWJvYXJkLmt0aQpkaWZmIC0tZ2l0IGEvVGFibGVzL0lucHV0L2JtL29yYml0Lmt0YiBiL1RhYmxlcy9JbnB1dC9ibS9vcmJpdC5rdGIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjZkZTIyMAotLS0gL2Rldi9udWxsCisrKyBiL1RhYmxlcy9JbnB1dC9ibS9vcmJpdC5rdGIKQEAgLTAsMCArMSwzNSBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorIyAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyMKKyMgQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorIworIyBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorIworIyBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisjIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyMgbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisjCisjIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK3RpdGxlIE9yYml0IFJlYWRlcgorCitub3RlIEEgc2l4LWRvdCBzdGFuZGFyZCBicmFpbGxlIGtleWJvYXJkIGlzIGFsb25nIHRoZSBiYWNrIGVkZ2Ugb2YgdGhlIHRvcC4KK25vdGUgKiBGcm9tIGxlZnQgdG8gcmlnaHQsIGl0cyBrZXlzIGFyZTogRG90MywgRG90MiwgRG90MSAtIERvdDQsIERvdDUsIERvdDYuCitub3RlIFRoZXJlJ3MgYSBmaXZlLWtleSBuYXZpZ2F0aW9uIHBhZCBpbiBiZXR3ZWVuIERvdDEgYW5kIERvdDQuCitub3RlIFNwYWNlIGlzIHRoZSBsb25nIGtleSBpbiB0aGUgbWlkZGxlLCBqdXN0IGluIGZyb250IG9mIHRoZSBuYXZpZ2F0aW9uIHBhZC4KK25vdGUgRG90NyBhbmQgRG90OCBhcmUgdGhlIGtleXMgaW1tZWRpYXRlbHkgdG8gdGhlIGxlZnQgYW5kIHJpZ2h0IG9mIFNwYWNlLgorCithc3NpZ24gc3BhY2UgU3BhY2UKK2luY2x1ZGUgbmF2cGFkLmt0aQorCithc3NpZ24gcHJlc3MgU2VsZWN0CitpbmNsdWRlIGVtdWxhdGU2Lmt0aQoraW5jbHVkZSByb3V0aW5nLmt0aQorCitub3RlIFRoZSByb2NrZXIgdG8gdGhlIGxlZnQgb2YgdGhlIGJyYWlsbGUgY2VsbHMgZW11bGF0ZXMgdGhlIERpc3BsYXkyIGtleSwKK25vdGUgKiBhbmQgdGhlIG9uZSB0byB0aGVpciByaWdodCBlbXVsYXRlcyB0aGUgRGlzcGxheTUga2V5LgpkaWZmIC0tZ2l0IGEvVGFibGVzL0lucHV0L2JtL3Byby5rdGIgYi9UYWJsZXMvSW5wdXQvYm0vcHJvLmt0YgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZmU3ZWUwCi0tLSAvZGV2L251bGwKKysrIGIvVGFibGVzL0lucHV0L2JtL3Byby5rdGIKQEAgLTAsMCArMSwyNCBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorIyAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyMKKyMgQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorIworIyBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorIworIyBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisjIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyMgbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisjCisjIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK3RpdGxlIEJhdW0gVmFyaW8gUHJvCisKK2luY2x1ZGUgZGlzcGxheTYua3RpCitpbmNsdWRlIHdoZWVscy5rdGkKK2luY2x1ZGUgc3RhdHVzLmt0aQoraW5jbHVkZSByb3V0aW5nNi5rdGkKZGlmZiAtLWdpdCBhL1RhYmxlcy9JbnB1dC9ibS9wcm9udG8ua3RiIGIvVGFibGVzL0lucHV0L2JtL3Byb250by5rdGIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDhhYTQ4OQotLS0gL2Rldi9udWxsCisrKyBiL1RhYmxlcy9JbnB1dC9ibS9wcm9udG8ua3RiCkBAIC0wLDAgKzEsMjMgQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyMgICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisjCisjIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyMKKyMgQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCit0aXRsZSBCYXVtIFByb250byEKKworaW5jbHVkZSBkaXNwbGF5Ni5rdGkKK2luY2x1ZGUgcm91dGluZzYua3RpCitpbmNsdWRlIGI5YjEwLmt0aQpkaWZmIC0tZ2l0IGEvVGFibGVzL0lucHV0L2JtL3B2Lmt0YiBiL1RhYmxlcy9JbnB1dC9ibS9wdi5rdGIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2I2NGE0NgotLS0gL2Rldi9udWxsCisrKyBiL1RhYmxlcy9JbnB1dC9ibS9wdi5rdGIKQEAgLTAsMCArMSwyMyBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorIyAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyMKKyMgQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorIworIyBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorIworIyBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisjIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyMgbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisjCisjIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK3RpdGxlIEJhdW0gUG9ja2V0VmFyaW8KKworaW5jbHVkZSBkaXNwbGF5Ni5rdGkKK2luY2x1ZGUgcm91dGluZzYua3RpCitpbmNsdWRlIGI5YjEwLmt0aQpkaWZmIC0tZ2l0IGEvVGFibGVzL0lucHV0L2JtL3JiLmt0YiBiL1RhYmxlcy9JbnB1dC9ibS9yYi5rdGIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjBkOWFiNgotLS0gL2Rldi9udWxsCisrKyBiL1RhYmxlcy9JbnB1dC9ibS9yYi5rdGIKQEAgLTAsMCArMSwzMCBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorIyAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyMKKyMgQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorIworIyBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorIworIyBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisjIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyMgbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisjCisjIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK3RpdGxlIEFQSCBSZWZyZXNoYWJyYWlsbGUKKworbm90ZSBCOSBpcyB0aGUgbG9uZyBrZXkgaW4gdGhlIG1pZGRsZSwganVzdCBpbiBmcm9udCBvZiB0aGUgam95c3RpY2suCitub3RlIERvdDcgYW5kIERvdDggYXJlIHRoZSBrZXlzIGltbWVkaWF0ZWx5IHRvIHRoZSBsZWZ0IGFuZCByaWdodCBvZiBCOS4KK25vdGUgQjEwIGlzIHRoZSBuYXJyb3cga2V5IGJldHdlZW4gYW5kIGp1c3QgYmVoaW5kIHRoZSBzaXgtZG90IGtleWJvYXJkLgorCithc3NpZ24gcHJlc3MgUHJlc3MKK2luY2x1ZGUgZW11bGF0ZTYua3RpCitpbmNsdWRlIHJvdXRpbmc2Lmt0aQorCithc3NpZ24gc3BhY2UgQjkKK2luY2x1ZGUgam95c3RpY2sua3RpCmRpZmYgLS1naXQgYS9UYWJsZXMvSW5wdXQvYm0vcm91dGluZy5rdGkgYi9UYWJsZXMvSW5wdXQvYm0vcm91dGluZy5rdGkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjg4YmM0NwotLS0gL2Rldi9udWxsCisrKyBiL1RhYmxlcy9JbnB1dC9ibS9yb3V0aW5nLmt0aQpAQCAtMCwwICsxLDIxIEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisjICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorIworIyBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisjCisjIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisjCisjIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyMgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorIyBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyMKKyMgV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworIworIyBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworbm90ZSBSb3V0aW5nS2V5IHJlZmVycyB0byBhbnkgb2YgdGhlIGtleXMgaW1tZWRpYXRlbHkgYmVoaW5kIHRoZSBicmFpbGxlIGNlbGxzLgorCitiaW5kIFJvdXRpbmdLZXkgUk9VVEUKZGlmZiAtLWdpdCBhL1RhYmxlcy9JbnB1dC9ibS9yb3V0aW5nNi5rdGkgYi9UYWJsZXMvSW5wdXQvYm0vcm91dGluZzYua3RpCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMzMmIzNjYKLS0tIC9kZXYvbnVsbAorKysgYi9UYWJsZXMvSW5wdXQvYm0vcm91dGluZzYua3RpCkBAIC0wLDAgKzEsNDQgQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyMgICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisjCisjIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyMKKyMgQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjIFRoaXMga2V5IHN1YnRhYmxlIGlzIGZvciBCYXVtIGRpc3BsYXlzIHdoaWNoIGhhdmUgcm91dGluZyBrZXlzIGFuZCA2IGRpc3BsYXkga2V5cy4KKworaW5jbHVkZSByb3V0aW5nLmt0aQorCitiaW5kIERpc3BsYXkxK1JvdXRpbmdLZXkgQ0xJUF9ORVcKK2JpbmQgRGlzcGxheTIrUm91dGluZ0tleSBDTElQX0FERAorYmluZCBEaXNwbGF5NCtSb3V0aW5nS2V5IENPUFlfTElORQorYmluZCBEaXNwbGF5NStSb3V0aW5nS2V5IENPUFlfUkVDVAorCitiaW5kIFJvdXRpbmdLZXkrIVJvdXRpbmdLZXkgQ0xJUF9DT1BZCitiaW5kIERpc3BsYXkyK1JvdXRpbmdLZXkrIVJvdXRpbmdLZXkgQ0xJUF9BUFBFTkQKKworYmluZCBEaXNwbGF5MytSb3V0aW5nS2V5IERFU0NDSEFSCitiaW5kIERpc3BsYXk2K1JvdXRpbmdLZXkgU0VUTEVGVAorCitiaW5kIERpc3BsYXkyK0Rpc3BsYXkxK1JvdXRpbmdLZXkgUFJJTkRFTlQKK2JpbmQgRGlzcGxheTIrRGlzcGxheTMrUm91dGluZ0tleSBOWElOREVOVAorCitiaW5kIERpc3BsYXk1K0Rpc3BsYXk0K1JvdXRpbmdLZXkgUFJESUZDSEFSCitiaW5kIERpc3BsYXk1K0Rpc3BsYXk2K1JvdXRpbmdLZXkgTlhESUZDSEFSCisKK2JpbmQgRGlzcGxheTErRGlzcGxheTMrUm91dGluZ0tleSBTRVRNQVJLCitiaW5kIERpc3BsYXk0K0Rpc3BsYXk2K1JvdXRpbmdLZXkgR09UT01BUksKKworYmluZCBEaXNwbGF5NCtEaXNwbGF5NStEaXNwbGF5NitSb3V0aW5nS2V5IFNXSVRDSFZUCisKZGlmZiAtLWdpdCBhL1RhYmxlcy9JbnB1dC9ibS9yb3V0aW5nNy5rdGkgYi9UYWJsZXMvSW5wdXQvYm0vcm91dGluZzcua3RpCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRiZWI2NDAKLS0tIC9kZXYvbnVsbAorKysgYi9UYWJsZXMvSW5wdXQvYm0vcm91dGluZzcua3RpCkBAIC0wLDAgKzEsMzkgQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyMgICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisjCisjIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyMKKyMgQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjIFRoaXMga2V5IHN1YnRhYmxlIGlzIGZvciBCYXVtIGRpc3BsYXlzIHdoaWNoIGhhdmUgcm91dGluZyBrZXlzIGFuZCA3IGRpc3BsYXkga2V5cy4KKworaW5jbHVkZSByb3V0aW5nLmt0aQorCitiaW5kIERpc3BsYXk1KyFSb3V0aW5nS2V5IERFU0NDSEFSCisKK2JpbmQgRGlzcGxheTMrIVJvdXRpbmdLZXkgQ0xJUF9ORVcKK2JpbmQgRGlzcGxheTQrIVJvdXRpbmdLZXkgQ0xJUF9BREQKK2JpbmQgRGlzcGxheTYrIVJvdXRpbmdLZXkgQ09QWV9MSU5FCitiaW5kIERpc3BsYXk3KyFSb3V0aW5nS2V5IENPUFlfUkVDVAorCitiaW5kIERpc3BsYXk1K0Rpc3BsYXkzKyFSb3V0aW5nS2V5IFBSSU5ERU5UCitiaW5kIERpc3BsYXk1K0Rpc3BsYXk0KyFSb3V0aW5nS2V5IE5YSU5ERU5UCisKK2JpbmQgRGlzcGxheTUrRGlzcGxheTYrIVJvdXRpbmdLZXkgUFJESUZDSEFSCitiaW5kIERpc3BsYXk1K0Rpc3BsYXk3KyFSb3V0aW5nS2V5IE5YRElGQ0hBUgorCitiaW5kIERpc3BsYXkxKyFSb3V0aW5nS2V5IFNFVE1BUksKK2JpbmQgRGlzcGxheTIrIVJvdXRpbmdLZXkgR09UT01BUksKK2JpbmQgRGlzcGxheTErRGlzcGxheTIrIVJvdXRpbmdLZXkgU0VUTEVGVAorCmRpZmYgLS1naXQgYS9UYWJsZXMvSW5wdXQvYm0vc3RhdHVzLmt0aSBiL1RhYmxlcy9JbnB1dC9ibS9zdGF0dXMua3RpCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRmMGI0NjYKLS0tIC9kZXYvbnVsbAorKysgYi9UYWJsZXMvSW5wdXQvYm0vc3RhdHVzLmt0aQpAQCAtMCwwICsxLDM0IEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisjICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorIworIyBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisjCisjIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisjCisjIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyMgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorIyBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyMKKyMgV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworIworIyBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIyBUaGlzIGtleSBzdWJ0YWJsZSBpcyBmb3IgQmF1bSBkaXNwbGF5cyB3aGljaCBoYXZlIGEgc3RhdHVzIG1vZHVsZS4KK25vdGUgVGhlIGxhcmdlciBjb250cm9scyBvbiB0aGUgc3RhdHVzIG1vZHVsZSwgZnJvbSBsZWZ0IHRvIHJpZ2h0LAorbm90ZSBhcmUgbmFtZWQgU3RhdHVzQnV0dG9uMSB0aHJvdWdoIFN0YXR1c0J1dHRvbjQuCitub3RlIFRoZSBzbWFsbGVyIGNvbnRyb2xzIG9uIHRoZSBzdGF0dXMgbW9kdWxlLCBmcm9tIGxlZnQgdG8gcmlnaHQsCitub3RlIGFyZSBuYW1lZCBTdGF0dXNLZXkxIHRocm91Z2ggU3RhdHVzS2V5NC4KKworYmluZCBTdGF0dXNCdXR0b24xIEhFTFAKK2JpbmQgU3RhdHVzQnV0dG9uMiBMRUFSTgorYmluZCBTdGF0dXNCdXR0b24zIElORk8KK2JpbmQgU3RhdHVzQnV0dG9uNCBQUkVGTUVOVQorCitiaW5kIFN0YXR1c0tleTEgQ1NSVklTCitiaW5kIFN0YXR1c0tleTIgQVRUUlZJUworYmluZCBTdGF0dXNLZXkzIEZSRUVaRQorYmluZCBTdGF0dXNLZXk0IFNJWERPVFMKKwpkaWZmIC0tZ2l0IGEvVGFibGVzL0lucHV0L2JtL3N2Lmt0YiBiL1RhYmxlcy9JbnB1dC9ibS9zdi5rdGIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDJhM2MzZgotLS0gL2Rldi9udWxsCisrKyBiL1RhYmxlcy9JbnB1dC9ibS9zdi5rdGIKQEAgLTAsMCArMSwyMiBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorIyAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyMKKyMgQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorIworIyBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorIworIyBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisjIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyMgbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisjCisjIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK3RpdGxlIEJhdW0gU3VwZXJWYXJpbyAvIEhXRyBCcmFpbGxpYW50CisKK2luY2x1ZGUgZGlzcGxheTYua3RpCitpbmNsdWRlIHJvdXRpbmc2Lmt0aQpkaWZmIC0tZ2l0IGEvVGFibGVzL0lucHV0L2JtL3VsdHJhLmt0YiBiL1RhYmxlcy9JbnB1dC9ibS91bHRyYS5rdGIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmYxMjFlNwotLS0gL2Rldi9udWxsCisrKyBiL1RhYmxlcy9JbnB1dC9ibS91bHRyYS5rdGIKQEAgLTAsMCArMSwyMyBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorIyAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyMKKyMgQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorIworIyBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorIworIyBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisjIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyMgbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisjCisjIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK3RpdGxlIEJhdW0gVmFyaW9VbHRyYQorCitpbmNsdWRlIGRpc3BsYXk2Lmt0aQoraW5jbHVkZSByb3V0aW5nNi5rdGkKK2luY2x1ZGUgYjliMTAua3RpCmRpZmYgLS1naXQgYS9UYWJsZXMvSW5wdXQvYm0vdjQwLmt0YiBiL1RhYmxlcy9JbnB1dC9ibS92NDAua3RiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIxNzU3YzAKLS0tIC9kZXYvbnVsbAorKysgYi9UYWJsZXMvSW5wdXQvYm0vdjQwLmt0YgpAQCAtMCwwICsxLDIyIEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisjICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorIworIyBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisjCisjIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisjCisjIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyMgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorIyBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyMKKyMgV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworIworIyBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKwordGl0bGUgQmF1bSBWYXJpbyA0MAorCitpbmNsdWRlIGRpc3BsYXk2Lmt0aQoraW5jbHVkZSByb3V0aW5nNi5rdGkKZGlmZiAtLWdpdCBhL1RhYmxlcy9JbnB1dC9ibS92ODAua3RiIGIvVGFibGVzL0lucHV0L2JtL3Y4MC5rdGIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTVlODg0ZgotLS0gL2Rldi9udWxsCisrKyBiL1RhYmxlcy9JbnB1dC9ibS92ODAua3RiCkBAIC0wLDAgKzEsMjQgQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyMgICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisjCisjIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyMKKyMgQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCit0aXRsZSBCYXVtIFZhcmlvIDgwCisKK2luY2x1ZGUgZGlzcGxheTYua3RpCitpbmNsdWRlIGNvbW1hbmQua3RpCitpbmNsdWRlIGZyb250MTAua3RpCitpbmNsdWRlIHJvdXRpbmc2Lmt0aQpkaWZmIC0tZ2l0IGEvVGFibGVzL0lucHV0L2JtL3ZlcnRpY2FsLmt0aSBiL1RhYmxlcy9JbnB1dC9ibS92ZXJ0aWNhbC5rdGkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmI4MTYzZgotLS0gL2Rldi9udWxsCisrKyBiL1RhYmxlcy9JbnB1dC9ibS92ZXJ0aWNhbC5rdGkKQEAgLTAsMCArMSwyNCBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorIyAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyMKKyMgQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorIworIyBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorIworIyBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisjIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyMgbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisjCisjIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMgVGhpcyBrZXkgc3VidGFibGUgaXMgZm9yIEJhdW0gZGlzcGxheXMgd2hpY2ggaGF2ZSB2ZXJ0aWNhbCBzZW5zb3JzLgorCitiaW5kICFMZWZ0U2Vuc29yIEdPVE9MSU5FK3RvbGVmdAorYmluZCAhUmlnaHRTZW5zb3IgR09UT0xJTkUKK2JpbmQgIVNjYWxlZExlZnRTZW5zb3IgR09UT0xJTkUrdG9sZWZ0K3NjYWxlZAorYmluZCAhU2NhbGVkUmlnaHRTZW5zb3IgR09UT0xJTkUrc2NhbGVkCmRpZmYgLS1naXQgYS9UYWJsZXMvSW5wdXQvYm0vdmsua3RiIGIvVGFibGVzL0lucHV0L2JtL3ZrLmt0YgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMmFmZjE4Ci0tLSAvZGV2L251bGwKKysrIGIvVGFibGVzL0lucHV0L2JtL3ZrLmt0YgpAQCAtMCwwICsxLDQyIEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisjICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorIworIyBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisjCisjIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisjCisjIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyMgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorIyBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyMKKyMgV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworIworIyBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKwordGl0bGUgQmF1bSAodmFyaW9rZXlzPXllcykKKworYmluZCBEaXNwbGF5MiBGV0lOTFQKK2JpbmQgRGlzcGxheTUgRldJTlJUCisKK2JpbmQgRGlzcGxheTEgTE5VUAorYmluZCBEaXNwbGF5MyBMTkROCisKK2JpbmQgRGlzcGxheTQgS0VZX0NVUlNPUl9VUAorYmluZCBEaXNwbGF5NiBLRVlfQ1VSU09SX0RPV04KKworYmluZCBEaXNwbGF5MStEaXNwbGF5MyBIT01FCitiaW5kIERpc3BsYXkyK0Rpc3BsYXkxIFRPUF9MRUZUCitiaW5kIERpc3BsYXkyK0Rpc3BsYXkzIEJPVF9MRUZUCisKK2JpbmQgRGlzcGxheTErRGlzcGxheTQgUFJFRk1FTlUKK2JpbmQgRGlzcGxheTErRGlzcGxheTIrRGlzcGxheTQgRlJFRVpFCitiaW5kIERpc3BsYXkxK0Rpc3BsYXkyK0Rpc3BsYXk1IEhFTFAKK2JpbmQgRGlzcGxheTIrRGlzcGxheTQgSU5GTworYmluZCBEaXNwbGF5MitEaXNwbGF5MytEaXNwbGF5NCtEaXNwbGF5NSBDU1JUUksKK2JpbmQgRGlzcGxheTErRGlzcGxheTMrRGlzcGxheTYgQVRUUlZJUworYmluZCBEaXNwbGF5MStEaXNwbGF5MitEaXNwbGF5MytEaXNwbGF5NiBESVNQTUQKKworaW5jbHVkZSByb3V0aW5nNi5rdGkKZGlmZiAtLWdpdCBhL1RhYmxlcy9JbnB1dC9ibS93aGVlbHMua3RpIGIvVGFibGVzL0lucHV0L2JtL3doZWVscy5rdGkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYThhMzVlMAotLS0gL2Rldi9udWxsCisrKyBiL1RhYmxlcy9JbnB1dC9ibS93aGVlbHMua3RpCkBAIC0wLDAgKzEsMzggQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyMgICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisjCisjIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyMKKyMgQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjIFRoaXMga2V5IHN1YnRhYmxlIGlzIGZvciBCYXVtIGRpc3BsYXlzIHdoaWNoIGhhdmUgd2hlZWxzLgorbm90ZSBUaGUgd2hlZWxzIG9uIHRoZSBkaXNwbGF5IG1vZHVsZSBhcmUgaWRlbnRpZmllZCBieSB0aGVpciBvcmRpbmFsIHBvc2l0aW9uCitub3RlIChmaXJzdCB0aHJvdWdoIGZvdXJ0aCkgZnJvbSB0aGUgbGVmdC4KKworYmluZCAhRmlyc3RXaGVlbFVwIExOVVAKK2JpbmQgIUZpcnN0V2hlZWxEb3duIExORE4KK2JpbmQgIUZpcnN0V2hlZWxQcmVzcyBIT01FCisKK2JpbmQgIVNlY29uZFdoZWVsVXAgTE5VUAorYmluZCAhU2Vjb25kV2hlZWxEb3duIExORE4KK2JpbmQgIVNlY29uZFdoZWVsUHJlc3MgSE9NRQorCitiaW5kICFUaGlyZFdoZWVsVXAgTE5VUAorYmluZCAhVGhpcmRXaGVlbERvd24gTE5ETgorYmluZCAhVGhpcmRXaGVlbFByZXNzIEhPTUUKKworYmluZCAhRm91cnRoV2hlZWxVcCBMTlVQCitiaW5kICFGb3VydGhXaGVlbERvd24gTE5ETgorYmluZCAhRm91cnRoV2hlZWxQcmVzcyBIT01FCisKZGlmZiAtLWdpdCBhL1RhYmxlcy9JbnB1dC9ibi9hbGwua3RiIGIvVGFibGVzL0lucHV0L2JuL2FsbC5rdGIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2E3NmM4YgotLS0gL2Rldi9udWxsCisrKyBiL1RhYmxlcy9JbnB1dC9ibi9hbGwua3RiCkBAIC0wLDAgKzEsMjEyIEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisjICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorIworIyBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisjCisjIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisjCisjIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyMgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorIyBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyMKKyMgV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworIworIyBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKwordGl0bGUgQnJhaWxsZSBOb3RlCisKK2JpbmQgUHJldmlvdXMgRldJTkxUCitiaW5kIE5leHQgRldJTlJUCitiaW5kIEJhY2sgTE5VUAorYmluZCBBZHZhbmNlIExORE4KK2JpbmQgUHJldmlvdXMrQmFjayBMTkJFRworYmluZCBOZXh0K0FkdmFuY2UgTE5FTkQKK2JpbmQgUHJldmlvdXMrQWR2YW5jZSBUT1BfTEVGVAorYmluZCBQcmV2aW91cytOZXh0IEJPVF9MRUZUCitiaW5kIEJhY2srQWR2YW5jZSBCQUNLCitiaW5kIEJhY2srTmV4dCBDU1JUUksKKworYmluZCBSb3V0aW5nS2V5IFJPVVRFCisKK2JpbmQgRG90MSBDSFJMVAorYmluZCBEb3QxK0RvdDIgSFdJTkxUCitiaW5kIERvdDIgRldJTkxUCitiaW5kIERvdDIrRG90MyBGV0lOTFRTS0lQCitiaW5kIERvdDMgTE5CRUcKK2JpbmQgRG90MStEb3QzIExOVVAKK2JpbmQgRG90MStEb3QyK0RvdDMgVE9QX0xFRlQKK2JpbmQgRG90NCBDSFJSVAorYmluZCBEb3Q0K0RvdDUgSFdJTlJUCitiaW5kIERvdDUgRldJTlJUCitiaW5kIERvdDUrRG90NiBGV0lOUlRTS0lQCitiaW5kIERvdDYgTE5FTkQKK2JpbmQgRG90NCtEb3Q2IExORE4KK2JpbmQgRG90NCtEb3Q1K0RvdDYgQk9UX0xFRlQKK2JpbmQgRG90MStEb3Q0IFRPUAorYmluZCBEb3QyK0RvdDUgSE9NRQorYmluZCBEb3QzK0RvdDYgQk9UCitiaW5kIERvdDErRG90NCtEb3Q1IFBSRElGTE4KK2JpbmQgRG90MitEb3Q1K0RvdDYgTlhESUZMTgorYmluZCBEb3QxK0RvdDIrRG90NCBQUlNFQVJDSAorYmluZCBEb3QyK0RvdDMrRG90NSBOWFNFQVJDSAorYmluZCBEb3QxK0RvdDIrRG90NSBBVFRSVVAKK2JpbmQgRG90MitEb3QzK0RvdDYgQVRUUkROCitiaW5kIERvdDIrRG90NCBDT05URVhUK1BSSU5ERU5UCitiaW5kIERvdDMrRG90NSBDT05URVhUK05YSU5ERU5UCitiaW5kIERvdDIrRG90NCtEb3Q1IFdJTlVQCitiaW5kIERvdDMrRG90NStEb3Q2IFdJTkROCisKK2JpbmQgU3BhY2UgSE9NRQorYmluZCBTcGFjZStEb3QxK0RvdDQrRG90NiBOT09QICMgYWNrbm93bGVkZ2UgYWxhcm0KK2JpbmQgU3BhY2UrRG90MitEb3QzK0RvdDUgTk9PUCAjIGdvIHRvIHRhc2sgbWVudQorYmluZCBTcGFjZStEb3QxK0RvdDIrRG90MytEb3Q0K0RvdDUrRG90NiBOT09QICMgZ28gdG8gbWFpbiBtZW51CitiaW5kIFNwYWNlK0RvdDErRG90NCBQUkVGTUVOVQorYmluZCBTcGFjZStEb3QxK0RvdDQrRG90NSBQUkVGTE9BRAorYmluZCBTcGFjZStEb3QxK0RvdDUgTk9PUCAjIGV4aXQgY3VycmVudCBvcGVyYXRpb24KK2JpbmQgU3BhY2UrRG90MStEb3QyK0RvdDUgTk9PUCAjIGhlbHAgZm9yIGN1cnJlbnQgb3BlcmF0aW9uCitiaW5kIFNwYWNlK0RvdDErRG90MitEb3QzIENPTlRFWFQrU0VUTEVGVAorYmluZCBTcGFjZStEb3QxK0RvdDMrRG90NCBNVVRFCitiaW5kIFNwYWNlK0RvdDErRG90MytEb3Q0K0RvdDUgQ09OVEVYVCtkZWZhdWx0ICMgbmF2aWdhdGlvbiBtb2RlCitiaW5kIFNwYWNlK0RvdDErRG90MytEb3Q1IE5PT1AgIyBnbyB0byBvcHRpb25zIG1lbnUKK2JpbmQgU3BhY2UrRG90MStEb3QyK0RvdDMrRG90NCBQQVNURQorYmluZCBTcGFjZStEb3QxK0RvdDIrRG90MytEb3Q1IE5PT1AgIyByZXBlYXQgY3VycmVudCBwcm9tcHQKK2JpbmQgU3BhY2UrRG90MitEb3QzK0RvdDQgU0FZX0xJTkUKK2JpbmQgU3BhY2UrRG90MStEb3QzK0RvdDYgTk9PUCAjIHVwcGVyY2FzZSBmb3IgY29tcHV0ZXIgYnJhaWxsZQorYmluZCBTcGFjZStEb3QyK0RvdDQrRG90NStEb3Q2IFBSRUZTQVZFCitiaW5kIFNwYWNlK0RvdDErRG90MytEb3Q1K0RvdDYgTk9PUCAjIGV4aXQgY3VycmVudCBvcGVyYXRpb24KK2JpbmQgU3BhY2UrRG90MStEb3QyK0RvdDMrRG90NStEb3Q2IENPTlRFWFQrQ0xJUF9ORVcKK2JpbmQgU3BhY2UrRG90MitEb3Q0K0RvdDYgQ09OVEVYVCtDTElQX0FERAorYmluZCBTcGFjZStEb3QyK0RvdDMrRG90NCtEb3Q1K0RvdDYgQ09OVEVYVCtDT1BZX1JFQ1QKK2JpbmQgU3BhY2UrRG90MStEb3QyK0RvdDQrRG90NStEb3Q2IENPTlRFWFQrQ09QWV9MSU5FCitiaW5kIFNwYWNlK0RvdDErRG90MitEb3Q1K0RvdDYgQ1NSSk1QX1ZFUlQKK2JpbmQgU3BhY2UrRG90MStEb3Q0K0RvdDUrRG90NiBMRUFSTgorYmluZCBTcGFjZStEb3QyK0RvdDMrRG90NStEb3Q2IEtFWV9UQUIKK2JpbmQgU3BhY2UrRG90MitEb3QzIEtFWV9DVVJTT1JfTEVGVAorYmluZCBTcGFjZStEb3Q1K0RvdDYgS0VZX0NVUlNPUl9SSUdIVAorYmluZCBTcGFjZStEb3QyK0RvdDUgS0VZX0NVUlNPUl9VUAorYmluZCBTcGFjZStEb3QzK0RvdDYgS0VZX0NVUlNPUl9ET1dOCitiaW5kIFNwYWNlK0RvdDIgS0VZX0hPTUUKK2JpbmQgU3BhY2UrRG90MyBLRVlfRU5ECitiaW5kIFNwYWNlK0RvdDUgS0VZX1BBR0VfVVAKK2JpbmQgU3BhY2UrRG90NiBLRVlfUEFHRV9ET1dOCitiaW5kIFNwYWNlK0RvdDMrRG90NSBLRVlfSU5TRVJUCitiaW5kIFNwYWNlK0RvdDIrRG90NStEb3Q2IEtFWV9ERUxFVEUKK2JpbmQgU3BhY2UrRG90MitEb3Q2IEtFWV9FU0NBUEUKKworYmluZCBCYWNrc3BhY2UgS0VZX0JBQ0tTUEFDRQorYmluZCBCYWNrc3BhY2UrRG90MSBESVNQTUQrb24KK2JpbmQgQmFja3NwYWNlK0RvdDErRG90MiBTS1BCTE5LV0lOUytvZmYKK2JpbmQgQmFja3NwYWNlK0RvdDErRG90NCtEb3Q1IENPTlRFWFQrREVTQ0NIQVIKK2JpbmQgQmFja3NwYWNlK0RvdDErRG90MitEb3Q1IEhFTFAKK2JpbmQgQmFja3NwYWNlK0RvdDIrRG90NCBTS1BJRExOUytvZmYKK2JpbmQgQmFja3NwYWNlK0RvdDErRG90MytEb3Q0IENPTlRFWFQrU0VUTUFSSworYmluZCBCYWNrc3BhY2UrRG90MitEb3QzK0RvdDQgSU5GTworYmluZCBCYWNrc3BhY2UrRG90MitEb3QzK0RvdDQrRG90NSBESVNQTUQrb2ZmCitiaW5kIEJhY2tzcGFjZStEb3QxK0RvdDIrRG90MytEb3Q2IFNXSVRDSFZUX1BSRVYKK2JpbmQgQmFja3NwYWNlK0RvdDIrRG90NCtEb3Q1K0RvdDYgU0xJREVXSU4rb2ZmCitiaW5kIEJhY2tzcGFjZStEb3QyK0RvdDMrRG90NSBTSVhET1RTK29uCitiaW5kIEJhY2tzcGFjZStEb3QyK0RvdDMrRG90NiBTSVhET1RTK29mZgorYmluZCBCYWNrc3BhY2UrRG90MStEb3QyK0RvdDMrRG90NCtEb3Q1K0RvdDYgUkVTVEFSVFNQRUVDSAorCitiaW5kIEVudGVyIEtFWV9FTlRFUgorYmluZCBFbnRlcitEb3QxIE5PT1AgIyBkZWNyZWFzZSBzcGVlY2ggdm9sdW1lCitiaW5kIEVudGVyK0RvdDQgTk9PUCAjIGluY3JlYXNlIHNwZWVjaCB2b2x1bWUKK2JpbmQgRW50ZXIrRG90MiBOT09QICMgZGVjcmVhc2Ugc3BlZWNoIHBpdGNoCitiaW5kIEVudGVyK0RvdDUgTk9PUCAjIGluY3JlYXNlIHNwZWVjaCBwaXRjaAorYmluZCBFbnRlcitEb3QzIE5PT1AgIyBkZWNyZWFzZSBzcGVlY2ggc3BlZWQKK2JpbmQgRW50ZXIrRG90NiBOT09QICMgaW5jcmVhc2Ugc3BlZWNoIHNwZWVkCitiaW5kIEVudGVyK0RvdDErRG90MiBTS1BCTE5LV0lOUytvbgorYmluZCBFbnRlcitEb3QxK0RvdDQrRG90NSBOT09QICMgZGlzcGxheSB0aGUgZGF0ZQorYmluZCBFbnRlcitEb3QxK0RvdDIrRG90NCBGUkVFWkUKK2JpbmQgRW50ZXIrRG90MStEb3QyK0RvdDUgTk9PUCAjIGhlYXIgcHVuY3R1YXRpb24gaW4gY3VycmVudCBwcm9tcHQKK2JpbmQgRW50ZXIrRG90MitEb3Q0IFNLUElETE5TK29uCitiaW5kIEVudGVyK0RvdDErRG90MytEb3Q0IENPTlRFWFQrR09UT01BUksKK2JpbmQgRW50ZXIrRG90MitEb3QzK0RvdDQgTk9PUCAjIHNwZWxsIG5hbWUgaW4gY3VycmVudCBwcm9tcHQKK2JpbmQgRW50ZXIrRG90MitEb3QzK0RvdDQrRG90NSBOT09QICMgZGlzcGxheSB0aGUgdGltZQorYmluZCBFbnRlcitEb3QxK0RvdDIrRG90MytEb3Q2IFNXSVRDSFZUX05FWFQKK2JpbmQgRW50ZXIrRG90MitEb3Q0K0RvdDUrRG90NiBTTElERVdJTitvbgorYmluZCBFbnRlcitEb3QxK0RvdDIrRG90MytEb3Q0K0RvdDUrRG90NiBSRVNUQVJUQlJMCisKK25vdGUgVG8gdGVtcG9yYXJpbHkgKGZvciB0aGUgbmV4dCBjaGFyYWN0ZXIpIHN3aXRjaCB0byBhbiBpbnB1dCBtb2RlLAorbm90ZSB1c2UgWzRdIHRvZ2V0aGVyIHdpdGggY29tYmluYXRpb25zIG9mIFszXSBhbmQgXTZdLgorbm90ZSBUbyBwZXJtYW5lbnRseSBzd2l0Y2ggdG8gYW4gaW5wdXQgbW9kZSwKK25vdGUgdXNlIFs0NV0gdG9nZXRoZXIgd2l0aCBjb21iaW5hdGlvbnMgb2YgWzNdIGFuZCBdNl0uCitub3RlIFRvIHR1cm4gb24gZG90IDcsIGFkZCBbM10uICBUbyB0dXJuIG9uIGRvdCA4LCBhZGQgWzZdLgorbm90ZSBUbyBzd2l0Y2ggYmFjayB0byAobilhdmlnYXRpb24gbW9kZSwgdXNlIHNwYWNlK1sxMzQ1XS4KKworaGlkZSBvbgorYmluZCBTcGFjZStEb3Q0IENPTlRFWFQrdGVtcG9yYXJ5SW5wdXQKK2JpbmQgU3BhY2UrRG90NCtEb3Q1IENPTlRFWFQrcGVyc2lzdGVudElucHV0CitiaW5kIFNwYWNlK0RvdDQrRG90MyBDT05URVhUK3RlbXBvcmFyeUlucHV0NworYmluZCBTcGFjZStEb3Q0K0RvdDUrRG90MyBDT05URVhUK3BlcnNpc3RlbnRJbnB1dDcKK2JpbmQgU3BhY2UrRG90NCtEb3Q2IENPTlRFWFQrdGVtcG9yYXJ5SW5wdXQ4CitiaW5kIFNwYWNlK0RvdDQrRG90NStEb3Q2IENPTlRFWFQrcGVyc2lzdGVudElucHV0OAorYmluZCBTcGFjZStEb3Q0K0RvdDMrRG90NiBDT05URVhUK3RlbXBvcmFyeUlucHV0NzgKK2JpbmQgU3BhY2UrRG90NCtEb3Q1K0RvdDMrRG90NiBDT05URVhUK3BlcnNpc3RlbnRJbnB1dDc4CisKK2NvbnRleHQgdGVtcG9yYXJ5SW5wdXQKK2luY2x1ZGUgaW5wdXQua3RpCisKK2NvbnRleHQgcGVyc2lzdGVudElucHV0IElucHV0IE1vZGUKK2luY2x1ZGUgaW5wdXQua3RpCisKK2NvbnRleHQgdGVtcG9yYXJ5SW5wdXQ3CitpbmNsdWRlIGlucHV0Lmt0aQorc3VwZXJpbXBvc2UgRE9UNworCitjb250ZXh0IHBlcnNpc3RlbnRJbnB1dDcgSW5wdXQgTW9kZSAoZG90IDcpCitpbmNsdWRlIGlucHV0Lmt0aQorc3VwZXJpbXBvc2UgRE9UNworCitjb250ZXh0IHRlbXBvcmFyeUlucHV0OAoraW5jbHVkZSBpbnB1dC5rdGkKK3N1cGVyaW1wb3NlIERPVDgKKworY29udGV4dCBwZXJzaXN0ZW50SW5wdXQ4IElucHV0IE1vZGUgKGRvdCA4KQoraW5jbHVkZSBpbnB1dC5rdGkKK3N1cGVyaW1wb3NlIERPVDgKKworY29udGV4dCB0ZW1wb3JhcnlJbnB1dDc4CitpbmNsdWRlIGlucHV0Lmt0aQorc3VwZXJpbXBvc2UgRE9UNworc3VwZXJpbXBvc2UgRE9UOAorCitjb250ZXh0IHBlcnNpc3RlbnRJbnB1dDc4IElucHV0IE1vZGUgKGRvdHMgNyBhbmQgOCkKK2luY2x1ZGUgaW5wdXQua3RpCitzdXBlcmltcG9zZSBET1Q3CitzdXBlcmltcG9zZSBET1Q4CitoaWRlIG9mZgorCitjb250ZXh0IERFU0NDSEFSCitiaW5kIFJvdXRpbmdLZXkgREVTQ0NIQVIKKworY29udGV4dCBTRVRMRUZUCitiaW5kIFJvdXRpbmdLZXkgU0VUTEVGVAorCitjb250ZXh0IENMSVBfTkVXCitiaW5kIFJvdXRpbmdLZXkgQ0xJUF9ORVcKKworY29udGV4dCBDTElQX0FERAorYmluZCBSb3V0aW5nS2V5IENMSVBfQURECisKK2NvbnRleHQgQ09QWV9SRUNUCitiaW5kIFJvdXRpbmdLZXkgQ09QWV9SRUNUCisKK2NvbnRleHQgQ09QWV9MSU5FCitiaW5kIFJvdXRpbmdLZXkgQ09QWV9MSU5FCisKK2NvbnRleHQgU0VUTUFSSworYmluZCBSb3V0aW5nS2V5IFNFVE1BUksKKworY29udGV4dCBHT1RPTUFSSworYmluZCBSb3V0aW5nS2V5IEdPVE9NQVJLCisKK2NvbnRleHQgUFJJTkRFTlQKK2JpbmQgUm91dGluZ0tleSBQUklOREVOVAorCitjb250ZXh0IE5YSU5ERU5UCitiaW5kIFJvdXRpbmdLZXkgTlhJTkRFTlQKKwpkaWZmIC0tZ2l0IGEvVGFibGVzL0lucHV0L2JuL2lucHV0Lmt0aSBiL1RhYmxlcy9JbnB1dC9ibi9pbnB1dC5rdGkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2I2ZmQ0YwotLS0gL2Rldi9udWxsCisrKyBiL1RhYmxlcy9JbnB1dC9ibi9pbnB1dC5rdGkKQEAgLTAsMCArMSwyNyBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorIyAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyMKKyMgQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorIworIyBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorIworIyBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisjIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyMgbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisjCisjIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMgVGhpcyBrZXkgc3VidGFibGUgaXMgZm9yIEJyYWlsbGUgTm90ZSBpbnB1dCBtb2Rlcy4KKworbWFwIFNwYWNlIFNQQUNFCittYXAgRG90MSBET1QxCittYXAgRG90MiBET1QyCittYXAgRG90MyBET1QzCittYXAgRG90NCBET1Q0CittYXAgRG90NSBET1Q1CittYXAgRG90NiBET1Q2CmRpZmYgLS1naXQgYS9UYWJsZXMvSW5wdXQvYnAvYWxsLmt0aSBiL1RhYmxlcy9JbnB1dC9icC9hbGwua3RpCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIyZTJmNjYKLS0tIC9kZXYvbnVsbAorKysgYi9UYWJsZXMvSW5wdXQvYnAvYWxsLmt0aQpAQCAtMCwwICsxLDE5NiBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorIyAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyMKKyMgQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorIworIyBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorIworIyBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisjIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyMgbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisjCisjIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK25vdGUgVGhlIHNpeCByb3VuZCBrZXlzIG5lYXIgdGhlIGJhY2sgYXJlIGEgYnJhaWxsZSBrZXlib2FyZC4KK25vdGUgRnJvbSBsZWZ0IHRvIHJpZ2h0LCB0aGV5J3JlIG5hbWVkOiBEb3QzLCBEb3QyLCBEb3QxLCBEb3Q0LCBEb3Q1LCBEb3Q2Lgorbm90ZSBGcm9tIGxlZnQgdG8gcmlnaHQsIHRoZSB0aHJlZSBsb25nIGZ1bmN0aW9uIGtleXMgYXJlIG5hbWVkOiBTaGlmdCwgU3BhY2UsIENvbnRyb2wuCitub3RlIFRoaXMgdGFibGUgbWFwcyBTaGlmdCB0byBEb3Q3LCBhbmQgQ29udHJvbCB0byBEb3Q4Lgorbm90ZSBUaGUgam95c3RpY2sgYmV0d2VlbiB0aGUgZG90IGFuZCBmdW5jdGlvbiBrZXlzIGhhcyBmaXZlIHBvc2l0aW9ucyBuYW1lZDogVXAsIERvd24sIExlZnQsIFJpZ2h0LCBFbnRlci4KK25vdGUgVGhlIHJvdW5kIHNjcm9sbCBrZXlzIGF0IGVpdGhlciBlbmQgb2YgdGhlIGJyYWlsbGUgZGlzcGxheSBhcmUgbmFtZWQ6IExlZnQsIFJpZ2h0LgorCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIERlZmF1bHQgQmluZGluZ3MgIworIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworaWZLZXkgUm91dGluZ0tleSBiaW5kIFJvdXRpbmdLZXkgUk9VVEUKKworYmluZCBTY3JvbGxMZWZ0K1Njcm9sbFJpZ2h0IEhPTUUKK2JpbmQgU2Nyb2xsTGVmdCBGV0lOTFQKK2JpbmQgU2Nyb2xsUmlnaHQgRldJTlJUCitiaW5kIFNjcm9sbExlZnQrU3BhY2UgTE5VUAorYmluZCBTY3JvbGxSaWdodCtTcGFjZSBMTkROCitiaW5kIFNjcm9sbExlZnQrU2hpZnQgRldJTkxUU0tJUAorYmluZCBTY3JvbGxSaWdodCtDb250cm9sIEZXSU5SVFNLSVAKKworYmluZCBTY3JvbGxMZWZ0K0pveXN0aWNrRW50ZXIgU0VUTEVGVAorYmluZCBTY3JvbGxMZWZ0K0pveXN0aWNrTGVmdCBDSFJMVAorYmluZCBTY3JvbGxMZWZ0K0pveXN0aWNrUmlnaHQgQ0hSUlQKK2JpbmQgU2Nyb2xsTGVmdCtKb3lzdGlja1VwIFBSRElGTE4KK2JpbmQgU2Nyb2xsTGVmdCtKb3lzdGlja0Rvd24gTlhESUZMTgorCitiaW5kIFNjcm9sbFJpZ2h0K0pveXN0aWNrRW50ZXIgREVTQ0NIQVIKK2JpbmQgU2Nyb2xsUmlnaHQrSm95c3RpY2tMZWZ0IEhXSU5MVAorYmluZCBTY3JvbGxSaWdodCtKb3lzdGlja1JpZ2h0IEhXSU5SVAorYmluZCBTY3JvbGxSaWdodCtKb3lzdGlja1VwIEFUVFJVUAorYmluZCBTY3JvbGxSaWdodCtKb3lzdGlja0Rvd24gQVRUUkROCisKK2JpbmQgU2Nyb2xsTGVmdCtTY3JvbGxSaWdodCtKb3lzdGlja0VudGVyIEJBQ0sKK2JpbmQgU2Nyb2xsTGVmdCtTY3JvbGxSaWdodCtKb3lzdGlja0xlZnQgUFJQR1JQSAorYmluZCBTY3JvbGxMZWZ0K1Njcm9sbFJpZ2h0K0pveXN0aWNrUmlnaHQgTlhQR1JQSAorYmluZCBTY3JvbGxMZWZ0K1Njcm9sbFJpZ2h0K0pveXN0aWNrVXAgUFJQUk9NUFQKK2JpbmQgU2Nyb2xsTGVmdCtTY3JvbGxSaWdodCtKb3lzdGlja0Rvd24gTlhQUk9NUFQKKworYmluZCBTaGlmdCtKb3lzdGlja0VudGVyIENTUkpNUF9WRVJUCitiaW5kIFNoaWZ0K0pveXN0aWNrTGVmdCBMTkJFRworYmluZCBTaGlmdCtKb3lzdGlja1JpZ2h0IExORU5ECitiaW5kIFNoaWZ0K0pveXN0aWNrVXAgVE9QCitiaW5kIFNoaWZ0K0pveXN0aWNrRG93biBCT1QKKworYmluZCBDb250cm9sK0pveXN0aWNrTGVmdCBDTElQX05FVworYmluZCBDb250cm9sK0pveXN0aWNrVXAgQ0xJUF9BREQKK2JpbmQgQ29udHJvbCtKb3lzdGlja1JpZ2h0IENPUFlfTElORQorYmluZCBDb250cm9sK0pveXN0aWNrRG93biBDT1BZX1JFQ1QKK2JpbmQgQ29udHJvbCtKb3lzdGlja0VudGVyIFBBU1RFCisKK2JpbmQgRG90MStKb3lzdGlja0VudGVyIERJU1BNRAorYmluZCBEb3QxK0pveXN0aWNrTGVmdCBESVNQTUQrb2ZmCitiaW5kIERvdDErSm95c3RpY2tSaWdodCBESVNQTUQrb24KK2JpbmQgRG90MStEb3QyK0pveXN0aWNrRW50ZXIgU0tQQkxOS1dJTlMKK2JpbmQgRG90MStEb3QyK0pveXN0aWNrTGVmdCBTS1BCTE5LV0lOUytvZmYKK2JpbmQgRG90MStEb3QyK0pveXN0aWNrUmlnaHQgU0tQQkxOS1dJTlMrb24KK2JpbmQgRG90MStEb3Q0K0pveXN0aWNrRW50ZXIgQ1NSVklTCitiaW5kIERvdDErRG90NCtKb3lzdGlja0xlZnQgQ1NSVklTK29mZgorYmluZCBEb3QxK0RvdDQrSm95c3RpY2tSaWdodCBDU1JWSVMrb24KK2JpbmQgRG90MStEb3QyK0RvdDQrSm95c3RpY2tFbnRlciBGUkVFWkUKK2JpbmQgRG90MStEb3QyK0RvdDUrSm95c3RpY2tFbnRlciBIRUxQCitiaW5kIERvdDIrRG90NCtKb3lzdGlja0VudGVyIFNLUElETE5TCitiaW5kIERvdDIrRG90NCtKb3lzdGlja0xlZnQgU0tQSURMTlMrb2ZmCitiaW5kIERvdDIrRG90NCtKb3lzdGlja1JpZ2h0IFNLUElETE5TK29uCitiaW5kIERvdDErRG90MitEb3QzK0pveXN0aWNrRW50ZXIgTEVBUk4KK2JpbmQgRG90MStEb3QyK0RvdDMrRG90NCtKb3lzdGlja0VudGVyIFBSRUZNRU5VCitiaW5kIERvdDErRG90MitEb3QzK0RvdDQrSm95c3RpY2tMZWZ0IFBSRUZMT0FECitiaW5kIERvdDErRG90MitEb3QzK0RvdDQrSm95c3RpY2tSaWdodCBQUkVGU0FWRQorYmluZCBEb3QyK0RvdDMrRG90NCtKb3lzdGlja0VudGVyIElORk8KK2JpbmQgRG90MitEb3QzK0RvdDQrRG90NStKb3lzdGlja0VudGVyIENTUlRSSworYmluZCBEb3QyK0RvdDMrRG90NCtEb3Q1K0pveXN0aWNrTGVmdCBDU1JUUksrb2ZmCitiaW5kIERvdDIrRG90MytEb3Q0K0RvdDUrSm95c3RpY2tSaWdodCBDU1JUUksrb24KK2JpbmQgRG90MStEb3QzK0RvdDYrSm95c3RpY2tFbnRlciBBVFRSVklTCitiaW5kIERvdDErRG90MytEb3Q2K0pveXN0aWNrTGVmdCBBVFRSVklTK29mZgorYmluZCBEb3QxK0RvdDMrRG90NitKb3lzdGlja1JpZ2h0IEFUVFJWSVMrb24KK2JpbmQgRG90MitEb3Q0K0RvdDUrRG90NitKb3lzdGlja0VudGVyIFNMSURFV0lOCitiaW5kIERvdDIrRG90NCtEb3Q1K0RvdDYrSm95c3RpY2tMZWZ0IFNMSURFV0lOK29mZgorYmluZCBEb3QyK0RvdDQrRG90NStEb3Q2K0pveXN0aWNrUmlnaHQgU0xJREVXSU4rb24KK2JpbmQgRG90MitEb3QzK0RvdDUrSm95c3RpY2tFbnRlciBTSVhET1RTK29uCitiaW5kIERvdDIrRG90MytEb3Q2K0pveXN0aWNrRW50ZXIgU0lYRE9UUytvZmYKKworbWFwIERvdDEgRE9UMQorbWFwIERvdDIgRE9UMgorbWFwIERvdDMgRE9UMworbWFwIERvdDQgRE9UNAorbWFwIERvdDUgRE9UNQorbWFwIERvdDYgRE9UNgorbWFwIFNoaWZ0IERPVDcKK21hcCBDb250cm9sIERPVDgKK21hcCBTcGFjZSBTUEFDRQorCitiaW5kIFNwYWNlK1NoaWZ0IEtFWV9CQUNLU1BBQ0UKK2JpbmQgU3BhY2UrQ29udHJvbCBLRVlfRU5URVIKK2JpbmQgU3BhY2UrU2hpZnQrQ29udHJvbCBLRVlfRVNDQVBFCisKK2JpbmQgU3BhY2UrRG90MSBLRVlfQ1VSU09SX0xFRlQKK2JpbmQgU3BhY2UrRG90NCBLRVlfQ1VSU09SX1JJR0hUCitiaW5kIFNwYWNlK0RvdDIgS0VZX0NVUlNPUl9VUAorYmluZCBTcGFjZStEb3Q1IEtFWV9DVVJTT1JfRE9XTgorYmluZCBTcGFjZStEb3QzIEtFWV9QQUdFX1VQCitiaW5kIFNwYWNlK0RvdDYgS0VZX1BBR0VfRE9XTgorCitiaW5kIFNwYWNlK0RvdDErRG90MiBLRVlfQkFDS1NQQUNFCitiaW5kIFNwYWNlK0RvdDErRG90NCtEb3Q1IEtFWV9ERUxFVEUKK2JpbmQgU3BhY2UrRG90MStEb3Q1IEtFWV9FTkQKK2JpbmQgU3BhY2UrRG90MStEb3QyK0RvdDUgS0VZX0hPTUUKK2JpbmQgU3BhY2UrRG90MitEb3Q0IEtFWV9JTlNFUlQKK2JpbmQgU3BhY2UrRG90MStEb3QyK0RvdDMrRG90NSBLRVlfRU5URVIKK2JpbmQgU3BhY2UrRG90MitEb3QzK0RvdDQrRG90NSBLRVlfVEFCCitiaW5kIFNwYWNlK0RvdDErRG90MytEb3Q0K0RvdDYgS0VZX0VTQ0FQRQorCitiaW5kIEpveXN0aWNrRW50ZXIgUk9VVEUKK2JpbmQgSm95c3RpY2tMZWZ0IEtFWV9DVVJTT1JfTEVGVAorYmluZCBKb3lzdGlja1JpZ2h0IEtFWV9DVVJTT1JfUklHSFQKK2JpbmQgSm95c3RpY2tVcCBLRVlfQ1VSU09SX1VQCitiaW5kIEpveXN0aWNrRG93biBLRVlfQ1VSU09SX0RPV04KKworYmluZCBTcGFjZStKb3lzdGlja0VudGVyIEtFWV9JTlNFUlQKK2JpbmQgU3BhY2UrSm95c3RpY2tMZWZ0IEtFWV9IT01FCitiaW5kIFNwYWNlK0pveXN0aWNrUmlnaHQgS0VZX0VORAorYmluZCBTcGFjZStKb3lzdGlja1VwIEtFWV9QQUdFX1VQCitiaW5kIFNwYWNlK0pveXN0aWNrRG93biBLRVlfUEFHRV9ET1dOCisKK2JpbmQgU3BhY2UrU2hpZnQrRG90MSBLRVlfRlVOQ1RJT04rMAorYmluZCBTcGFjZStTaGlmdCtEb3QxK0RvdDIgS0VZX0ZVTkNUSU9OKzEKK2JpbmQgU3BhY2UrU2hpZnQrRG90MStEb3Q0IEtFWV9GVU5DVElPTisyCitiaW5kIFNwYWNlK1NoaWZ0K0RvdDErRG90NCtEb3Q1IEtFWV9GVU5DVElPTiszCitiaW5kIFNwYWNlK1NoaWZ0K0RvdDErRG90NSBLRVlfRlVOQ1RJT04rNAorYmluZCBTcGFjZStTaGlmdCtEb3QxK0RvdDIrRG90NCBLRVlfRlVOQ1RJT04rNQorYmluZCBTcGFjZStTaGlmdCtEb3QxK0RvdDIrRG90NCtEb3Q1IEtFWV9GVU5DVElPTis2CitiaW5kIFNwYWNlK1NoaWZ0K0RvdDErRG90MitEb3Q1IEtFWV9GVU5DVElPTis3CitiaW5kIFNwYWNlK1NoaWZ0K0RvdDIrRG90NCBLRVlfRlVOQ1RJT04rOAorYmluZCBTcGFjZStTaGlmdCtEb3QyK0RvdDQrRG90NSBLRVlfRlVOQ1RJT04rOQorYmluZCBTcGFjZStTaGlmdCtEb3QxK0RvdDMgS0VZX0ZVTkNUSU9OKzEwCitiaW5kIFNwYWNlK1NoaWZ0K0RvdDErRG90MitEb3QzIEtFWV9GVU5DVElPTisxMQorYmluZCBTcGFjZStTaGlmdCtEb3QxK0RvdDMrRG90NCBLRVlfRlVOQ1RJT04rMTIKK2JpbmQgU3BhY2UrU2hpZnQrRG90MStEb3QzK0RvdDQrRG90NSBLRVlfRlVOQ1RJT04rMTMKK2JpbmQgU3BhY2UrU2hpZnQrRG90MStEb3QzK0RvdDUgS0VZX0ZVTkNUSU9OKzE0CitiaW5kIFNwYWNlK1NoaWZ0K0RvdDErRG90MitEb3QzK0RvdDQgS0VZX0ZVTkNUSU9OKzE1CitiaW5kIFNwYWNlK1NoaWZ0K0RvdDErRG90MitEb3QzK0RvdDQrRG90NSBLRVlfRlVOQ1RJT04rMTYKK2JpbmQgU3BhY2UrU2hpZnQrRG90MStEb3QyK0RvdDMrRG90NSBLRVlfRlVOQ1RJT04rMTcKK2JpbmQgU3BhY2UrU2hpZnQrRG90MitEb3QzK0RvdDQgS0VZX0ZVTkNUSU9OKzE4CitiaW5kIFNwYWNlK1NoaWZ0K0RvdDIrRG90MytEb3Q0K0RvdDUgS0VZX0ZVTkNUSU9OKzE5CisKK2JpbmQgU3BhY2UrQ29udHJvbCtEb3QxIFNXSVRDSFZUKzAKK2JpbmQgU3BhY2UrQ29udHJvbCtEb3QxK0RvdDIgU1dJVENIVlQrMQorYmluZCBTcGFjZStDb250cm9sK0RvdDErRG90NCBTV0lUQ0hWVCsyCitiaW5kIFNwYWNlK0NvbnRyb2wrRG90MStEb3Q0K0RvdDUgU1dJVENIVlQrMworYmluZCBTcGFjZStDb250cm9sK0RvdDErRG90NSBTV0lUQ0hWVCs0CitiaW5kIFNwYWNlK0NvbnRyb2wrRG90MStEb3QyK0RvdDQgU1dJVENIVlQrNQorYmluZCBTcGFjZStDb250cm9sK0RvdDErRG90MitEb3Q0K0RvdDUgU1dJVENIVlQrNgorYmluZCBTcGFjZStDb250cm9sK0RvdDErRG90MitEb3Q1IFNXSVRDSFZUKzcKK2JpbmQgU3BhY2UrQ29udHJvbCtEb3QyK0RvdDQgU1dJVENIVlQrOAorYmluZCBTcGFjZStDb250cm9sK0RvdDIrRG90NCtEb3Q1IFNXSVRDSFZUKzkKK2JpbmQgU3BhY2UrQ29udHJvbCtEb3QxK0RvdDMgU1dJVENIVlQrMTAKK2JpbmQgU3BhY2UrQ29udHJvbCtEb3QxK0RvdDIrRG90MyBTV0lUQ0hWVCsxMQorYmluZCBTcGFjZStDb250cm9sK0RvdDErRG90MytEb3Q0IFNXSVRDSFZUKzEyCitiaW5kIFNwYWNlK0NvbnRyb2wrRG90MStEb3QzK0RvdDQrRG90NSBTV0lUQ0hWVCsxMworYmluZCBTcGFjZStDb250cm9sK0RvdDErRG90MytEb3Q1IFNXSVRDSFZUKzE0CitiaW5kIFNwYWNlK0NvbnRyb2wrRG90MStEb3QyK0RvdDMrRG90NCBTV0lUQ0hWVCsxNQorYmluZCBTcGFjZStDb250cm9sK0RvdDErRG90MitEb3QzK0RvdDQrRG90NSBTV0lUQ0hWVCsxNgorYmluZCBTcGFjZStDb250cm9sK0RvdDErRG90MitEb3QzK0RvdDUgU1dJVENIVlQrMTcKK2JpbmQgU3BhY2UrQ29udHJvbCtEb3QyK0RvdDMrRG90NCBTV0lUQ0hWVCsxOAorYmluZCBTcGFjZStDb250cm9sK0RvdDIrRG90MytEb3Q0K0RvdDUgU1dJVENIVlQrMTkKKworCisjIyMjIyMjIyMjIyMjIyMjIworIyBNZW51IEJpbmRpbmdzICMKKyMjIyMjIyMjIyMjIyMjIyMjCisKK2NvbnRleHQgbWVudQorYmluZCBKb3lzdGlja1VwIE1FTlVfUFJFVl9JVEVNCitiaW5kIEpveXN0aWNrRG93biBNRU5VX05FWFRfSVRFTQorYmluZCBKb3lzdGlja0xlZnQgTUVOVV9QUkVWX1NFVFRJTkcKK2JpbmQgSm95c3RpY2tSaWdodCBNRU5VX05FWFRfU0VUVElORworYmluZCBKb3lzdGlja0VudGVyIFBSRUZTQVZFCmRpZmYgLS1naXQgYS9UYWJsZXMvSW5wdXQvY2IvYWxsLmt0YiBiL1RhYmxlcy9JbnB1dC9jYi9hbGwua3RiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVmYzRmYTgKLS0tIC9kZXYvbnVsbAorKysgYi9UYWJsZXMvSW5wdXQvY2IvYWxsLmt0YgpAQCAtMCwwICsxLDEwOCBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorIyAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyMKKyMgQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorIworIyBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorIworIyBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisjIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyMgbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisjCisjIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK3RpdGxlIENvbWJpQnJhaWxsZQorCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIERlZmF1bHQgQmluZGluZ3MgIworIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworYmluZCBUaHVtYjEgRldJTkxUCitiaW5kIFRodW1iMiBMTlVQCitiaW5kIFRodW1iMyBDU1JUUksKK2JpbmQgVGh1bWI0IExORE4KK2JpbmQgVGh1bWI1IEZXSU5SVAorCitiaW5kIFRodW1iMStUaHVtYjIgVE9QX0xFRlQKK2JpbmQgVGh1bWIyK1RodW1iMyBUT1AKK2JpbmQgVGh1bWIzK1RodW1iNCBCT1QKK2JpbmQgVGh1bWI0K1RodW1iNSBCT1RfTEVGVAorCitiaW5kIFRodW1iMStUaHVtYjMgTE5CRUcKK2JpbmQgVGh1bWIzK1RodW1iNSBMTkVORAorCitiaW5kIFRodW1iMStUaHVtYjQgSFdJTkxUCitiaW5kIFRodW1iMitUaHVtYjUgSFdJTlJUCisKK2JpbmQgVGh1bWIxK1RodW1iNSBTQVlfTElORQorYmluZCBUaHVtYjIrVGh1bWI0IE1VVEUKKworYmluZCBEb3QxIExOVVAKK2JpbmQgRG90NCBMTkROCitiaW5kIERvdDErRG90MitEb3QzIFRPUAorYmluZCBEb3Q0K0RvdDUrRG90NiBCT1QKK2JpbmQgRG90MStEb3QyIFdJTlVQCitiaW5kIERvdDQrRG90NSBXSU5ETgorCitiaW5kIERvdDMgRldJTkxUCitiaW5kIERvdDYgRldJTlJUCitiaW5kIERvdDIrRG90NCtEb3Q2IEhXSU5MVAorYmluZCBEb3QxK0RvdDMrRG90NSBIV0lOUlQKK2JpbmQgRG90MStEb3QzIENIUkxUCitiaW5kIERvdDQrRG90NiBDSFJSVAorYmluZCBEb3QyK0RvdDMgTE5CRUcKK2JpbmQgRG90NStEb3Q2IExORU5ECisKK2JpbmQgRG90MytEb3Q2IEhPTUUKK2JpbmQgRG90MStEb3Q0IENTUlRSSworYmluZCBEb3Q1IENTUlZJUworYmluZCBEb3QyK0RvdDQrRG90NSBTS1BJRExOUworYmluZCBEb3QyK0RvdDQrRG90NStEb3Q2IFNMSURFV0lOCitiaW5kIERvdDIrRG90MytEb3Q1IFNJWERPVFMKK2JpbmQgRG90MitEb3QzK0RvdDQgVFVORVMKKworYmluZCBEb3QxK0RvdDIrRG90NCBGUkVFWkUKK2JpbmQgRG90MStEb3QzK0RvdDQgRElTUE1ECisKK2JpbmQgRG90MStEb3QyK0RvdDUgSEVMUAorYmluZCBEb3QzK0RvdDQgSU5GTworYmluZCBEb3QxK0RvdDMrRG90NCtEb3Q2IFBSRUZNRU5VCitiaW5kIERvdDErRG90MitEb3QzK0RvdDUgUFJFRkxPQUQKK2JpbmQgRG90MStEb3QyK0RvdDMrRG90NCtEb3Q1K0RvdDYgUFJFRlNBVkUKKworYmluZCBEb3QxK0RvdDIrRG90MytEb3Q0IFBBU1RFCisKK2JpbmQgRG90MStEb3Q2IE1VVEUKK2JpbmQgRG90MStEb3Q1K0RvdDYgU0FZX0xJTkUKKworYmluZCBTdGF0dXMxIENPTlRFWFQrQ0xJUF9ORVcKK2JpbmQgU3RhdHVzMiBDT05URVhUK0NMSVBfQURECitiaW5kIFN0YXR1czMgQ09OVEVYVCtDT1BZX0xJTkUKK2JpbmQgU3RhdHVzNCBDT05URVhUK0NPUFlfUkVDVAorYmluZCBTdGF0dXM1IExFQVJOCitiaW5kIFN0YXR1czYgSEVMUAorCitiaW5kIFJvdXRpbmdLZXkgUk9VVEUKKworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIFJvdXRpbmcgS2V5IEFsdGVybmF0aXZlcyAjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK2NvbnRleHQgQ0xJUF9ORVcKK2JpbmQgIVJvdXRpbmdLZXkgQ0xJUF9ORVcKKworY29udGV4dCBDTElQX0FERAorYmluZCAhUm91dGluZ0tleSBDTElQX0FERAorCitjb250ZXh0IENPUFlfTElORQorYmluZCAhUm91dGluZ0tleSBDT1BZX0xJTkUKKworY29udGV4dCBDT1BZX1JFQ1QKK2JpbmQgIVJvdXRpbmdLZXkgQ09QWV9SRUNUCmRpZmYgLS1naXQgYS9UYWJsZXMvSW5wdXQvY2UvYWxsLmt0YiBiL1RhYmxlcy9JbnB1dC9jZS9hbGwua3RiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNhMzQ4ZWUKLS0tIC9kZXYvbnVsbAorKysgYi9UYWJsZXMvSW5wdXQvY2UvYWxsLmt0YgpAQCAtMCwwICsxLDEyNiBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorIyAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyMKKyMgQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorIworIyBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorIworIyBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisjIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyMgbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisjCisjIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK3RpdGxlIENlYnJhCisKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgRGVmYXVsdCBCaW5kaW5ncyAjCisjIyMjIyMjIyMjIyMjIyMjIyMjIworCitiaW5kIFBhZENlbnRlcjEgSE9NRQorYmluZCBQYWRMZWZ0MSBGV0lOTFQKK2JpbmQgUGFkUmlnaHQxIEZXSU5SVAorYmluZCBQYWRVcDEgTE5VUAorYmluZCBQYWREb3duMSBMTkROCisKK2JpbmQgTGVmdFVwcGVyMSBUT1BfTEVGVAorYmluZCBMZWZ0TG93ZXIxIEJPVF9MRUZUCitiaW5kIFJpZ2h0VXBwZXIxIFBSRElGTE4KK2JpbmQgUmlnaHRMb3dlcjEgTlhESUZMTgorYmluZCBMZWZ0TWlkZGxlMSBTSVhET1RTCitiaW5kIFJpZ2h0TWlkZGxlMSBDU1JUUksKKworYmluZCBMZWZ0TWlkZGxlMStQYWRDZW50ZXIxIEJBQ0sKK2JpbmQgTGVmdE1pZGRsZTErUGFkTGVmdDEgTE5CRUcKK2JpbmQgTGVmdE1pZGRsZTErUGFkUmlnaHQxIExORU5ECitiaW5kIExlZnRNaWRkbGUxK1BhZFVwMSBBVFRSVVAKK2JpbmQgTGVmdE1pZGRsZTErUGFkRG93bjEgQVRUUkROCisKK2JpbmQgTGVmdFVwcGVyMStQYWRDZW50ZXIxIFBBU1RFCitiaW5kIExlZnRVcHBlcjErUGFkTGVmdDEgUFJTRUFSQ0gKK2JpbmQgTGVmdFVwcGVyMStQYWRSaWdodDEgTlhTRUFSQ0gKK2JpbmQgTGVmdFVwcGVyMStQYWRVcDEgUFJQR1JQSAorYmluZCBMZWZ0VXBwZXIxK1BhZERvd24xIE5YUEdSUEgKKworYmluZCBMZWZ0TG93ZXIxK1BhZENlbnRlcjEgQ1NSSk1QX1ZFUlQKK2JpbmQgTGVmdExvd2VyMStQYWRMZWZ0MSBGV0lOTFRTS0lQCitiaW5kIExlZnRMb3dlcjErUGFkUmlnaHQxIEZXSU5SVFNLSVAKK2JpbmQgTGVmdExvd2VyMStQYWRVcDEgUFJQUk9NUFQKK2JpbmQgTGVmdExvd2VyMStQYWREb3duMSBOWFBST01QVAorCitiaW5kIFJpZ2h0TWlkZGxlMStQYWRDZW50ZXIxIE5PT1AKK2JpbmQgUmlnaHRNaWRkbGUxK1BhZExlZnQxIENIUkxUCitiaW5kIFJpZ2h0TWlkZGxlMStQYWRSaWdodDEgQ0hSUlQKK2JpbmQgUmlnaHRNaWRkbGUxK1BhZFVwMSBUT1AKK2JpbmQgUmlnaHRNaWRkbGUxK1BhZERvd24xIEJPVAorCitiaW5kIFJpZ2h0VXBwZXIxK1BhZENlbnRlcjEgTk9PUAorYmluZCBSaWdodFVwcGVyMStQYWRMZWZ0MSBBVFRSVklTCitiaW5kIFJpZ2h0VXBwZXIxK1BhZFJpZ2h0MSBDU1JWSVMKK2JpbmQgUmlnaHRVcHBlcjErUGFkVXAxIEZSRUVaRQorYmluZCBSaWdodFVwcGVyMStQYWREb3duMSBESVNQTUQKKworYmluZCBSaWdodExvd2VyMStQYWRDZW50ZXIxIE5PT1AKK2JpbmQgUmlnaHRMb3dlcjErUGFkTGVmdDEgUFJFRkxPQUQKK2JpbmQgUmlnaHRMb3dlcjErUGFkUmlnaHQxIFBSRUZTQVZFCitiaW5kIFJpZ2h0TG93ZXIxK1BhZFVwMSBBVVRPU1BFQUsKK2JpbmQgUmlnaHRMb3dlcjErUGFkRG93bjEgQVVUT1JFUEVBVAorCitiaW5kIFBhZENlbnRlcjErUGFkTGVmdDEgSEVMUAorYmluZCBQYWRDZW50ZXIxK1BhZFJpZ2h0MSBMRUFSTgorYmluZCBQYWRDZW50ZXIxK1BhZFVwMSBJTkZPCitiaW5kIFBhZENlbnRlcjErUGFkRG93bjEgUFJFRk1FTlUKKworYmluZCAhUm91dGluZ0tleSBST1VURQorYmluZCBQYWRDZW50ZXIxKyFSb3V0aW5nS2V5IERFU0NDSEFSCitiaW5kIFBhZFVwMSshUm91dGluZ0tleSBQUklOREVOVAorYmluZCBQYWREb3duMSshUm91dGluZ0tleSBOWElOREVOVAorYmluZCBQYWRMZWZ0MSshUm91dGluZ0tleSBQUkRJRkNIQVIKK2JpbmQgUGFkUmlnaHQxKyFSb3V0aW5nS2V5IE5YRElGQ0hBUgorYmluZCBMZWZ0TWlkZGxlMSshUm91dGluZ0tleSBTRVRMRUZUCitiaW5kIExlZnRVcHBlcjErIVJvdXRpbmdLZXkgQ0xJUF9ORVcKK2JpbmQgTGVmdExvd2VyMSshUm91dGluZ0tleSBDTElQX0FERAorYmluZCBSaWdodFVwcGVyMSshUm91dGluZ0tleSBDT1BZX0xJTkUKK2JpbmQgUmlnaHRMb3dlcjErIVJvdXRpbmdLZXkgQ09QWV9SRUNUCisKK2hpZGUgb24KK2JpbmQgUmlnaHRNaWRkbGUxKyFSb3V0aW5nS2V5IFJPVVRFKzgwCitiaW5kIFBhZENlbnRlcjErUmlnaHRNaWRkbGUxKyFSb3V0aW5nS2V5IERFU0NDSEFSKzgwCitiaW5kIFBhZFVwMStSaWdodE1pZGRsZTErIVJvdXRpbmdLZXkgUFJJTkRFTlQrODAKK2JpbmQgUGFkRG93bjErUmlnaHRNaWRkbGUxKyFSb3V0aW5nS2V5IE5YSU5ERU5UKzgwCitiaW5kIFBhZExlZnQxK1JpZ2h0TWlkZGxlMSshUm91dGluZ0tleSBQUkRJRkNIQVIrODAKK2JpbmQgUGFkUmlnaHQxK1JpZ2h0TWlkZGxlMSshUm91dGluZ0tleSBOWERJRkNIQVIrODAKK2JpbmQgTGVmdE1pZGRsZTErUmlnaHRNaWRkbGUxKyFSb3V0aW5nS2V5IFNFVExFRlQrODAKK2JpbmQgTGVmdFVwcGVyMStSaWdodE1pZGRsZTErIVJvdXRpbmdLZXkgQ0xJUF9ORVcrODAKK2JpbmQgTGVmdExvd2VyMStSaWdodE1pZGRsZTErIVJvdXRpbmdLZXkgQ0xJUF9BREQrODAKK2JpbmQgUmlnaHRVcHBlcjErUmlnaHRNaWRkbGUxKyFSb3V0aW5nS2V5IENPUFlfTElORSs4MAorYmluZCBSaWdodExvd2VyMStSaWdodE1pZGRsZTErIVJvdXRpbmdLZXkgQ09QWV9SRUNUKzgwCitoaWRlIG9mZgorCisKKyMjIyMjIyMjIyMjIyMjIyMjCisjIE1lbnUgQmluZGluZ3MgIworIyMjIyMjIyMjIyMjIyMjIyMKKworY29udGV4dCBtZW51CisKK2JpbmQgUGFkVXAxIE1FTlVfUFJFVl9JVEVNCitiaW5kIFBhZERvd24xIE1FTlVfTkVYVF9JVEVNCitiaW5kIFBhZExlZnQxIE1FTlVfUFJFVl9TRVRUSU5HCitiaW5kIFBhZFJpZ2h0MSBNRU5VX05FWFRfU0VUVElORworYmluZCBQYWRDZW50ZXIxIFBSRUZNRU5VCisKK2JpbmQgTGVmdE1pZGRsZTEgRldJTkxUCitiaW5kIFJpZ2h0TWlkZGxlMSBGV0lOUlQKK2JpbmQgTGVmdFVwcGVyMSBNRU5VX0ZJUlNUX0lURU0KK2JpbmQgTGVmdExvd2VyMSBNRU5VX0xBU1RfSVRFTQorYmluZCBSaWdodFVwcGVyMSBQUkVGTE9BRAorYmluZCBSaWdodExvd2VyMSBQUkVGU0FWRQorCisKZGlmZiAtLWdpdCBhL1RhYmxlcy9JbnB1dC9jZS9ub3ZlbS5rdGIgYi9UYWJsZXMvSW5wdXQvY2Uvbm92ZW0ua3RiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJhZjBhYTEKLS0tIC9kZXYvbnVsbAorKysgYi9UYWJsZXMvSW5wdXQvY2Uvbm92ZW0ua3RiCkBAIC0wLDAgKzEsMzEgQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyMgICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisjCisjIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyMKKyMgQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCit0aXRsZSBOb3ZlbSBCcmFpbGxlIEtleWJvYXJkCisKK21hcCBEb3QxIERPVDEKK21hcCBEb3QyIERPVDIKK21hcCBEb3QzIERPVDMKK21hcCBEb3Q0IERPVDQKK21hcCBEb3Q1IERPVDUKK21hcCBEb3Q2IERPVDYKK21hcCBEb3Q3IERPVDcKK21hcCBEb3Q4IERPVDgKK21hcCBMZWZ0U3BhY2UgU1BBQ0UKK2JpbmQgUmlnaHRTcGFjZSBLRVlfRU5URVIKKwpkaWZmIC0tZ2l0IGEvVGFibGVzL0lucHV0L2Nob3Jkcy5rdGkgYi9UYWJsZXMvSW5wdXQvY2hvcmRzLmt0aQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNjBkZjM4Ci0tLSAvZGV2L251bGwKKysrIGIvVGFibGVzL0lucHV0L2Nob3Jkcy5rdGkKQEAgLTAsMCArMSwxNzUgQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyMgICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisjCisjIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyMKKyMgQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCithc3NpZ24gYSBEb3QxCithc3NpZ24gYiBEb3QxK0RvdDIKK2Fzc2lnbiBjIERvdDErRG90NAorYXNzaWduIGQgRG90MStEb3Q0K0RvdDUKK2Fzc2lnbiBlIERvdDErRG90NQorYXNzaWduIGYgRG90MStEb3QyK0RvdDQKK2Fzc2lnbiBnIERvdDErRG90MitEb3Q0K0RvdDUKK2Fzc2lnbiBoIERvdDErRG90MitEb3Q1Cithc3NpZ24gaSBEb3QyK0RvdDQKK2Fzc2lnbiBqIERvdDIrRG90NCtEb3Q1Cithc3NpZ24gayBEb3QxK0RvdDMKK2Fzc2lnbiBsIERvdDErRG90MitEb3QzCithc3NpZ24gbSBEb3QxK0RvdDMrRG90NAorYXNzaWduIG4gRG90MStEb3QzK0RvdDQrRG90NQorYXNzaWduIG8gRG90MStEb3QzK0RvdDUKK2Fzc2lnbiBwIERvdDErRG90MitEb3QzK0RvdDQKK2Fzc2lnbiBxIERvdDErRG90MitEb3QzK0RvdDQrRG90NQorYXNzaWduIHIgRG90MStEb3QyK0RvdDMrRG90NQorYXNzaWduIHMgRG90MitEb3QzK0RvdDQKK2Fzc2lnbiB0IERvdDIrRG90MytEb3Q0K0RvdDUKK2Fzc2lnbiB1IERvdDErRG90MytEb3Q2Cithc3NpZ24gdiBEb3QxK0RvdDIrRG90MytEb3Q2Cithc3NpZ24gdyBEb3QyK0RvdDQrRG90NStEb3Q2Cithc3NpZ24geCBEb3QxK0RvdDMrRG90NCtEb3Q2Cithc3NpZ24geSBEb3QxK0RvdDMrRG90NCtEb3Q1K0RvdDYKK2Fzc2lnbiB6IERvdDErRG90MytEb3Q1K0RvdDYKKworYXNzaWduIHRvZ2dsZU9mZiBEb3Q3Cithc3NpZ24gdG9nZ2xlT24gRG90OAorCitiZWdpblZhcmlhYmxlcworYXNzaWduIHRvZ2dsZUtleXMgXHtjaG9yZH1ce2J9Cithc3NpZ24gdG9nZ2xlQ29tbWFuZCBTS1BCTE5LV0lOUworaW5jbHVkZSB0b2dnbGUua3RpCitlbmRWYXJpYWJsZXMKKworYmVnaW5WYXJpYWJsZXMKK2Fzc2lnbiB0b2dnbGVLZXlzIFx7Y2hvcmR9XHtjfQorYXNzaWduIHRvZ2dsZUNvbW1hbmQgQ1NSVklTCitpbmNsdWRlIHRvZ2dsZS5rdGkKK2VuZFZhcmlhYmxlcworCitiZWdpblZhcmlhYmxlcworYXNzaWduIHRvZ2dsZUtleXMgXHtjaG9yZH1ce2R9Cithc3NpZ24gdG9nZ2xlQ29tbWFuZCBESVNQTUQKK2luY2x1ZGUgdG9nZ2xlLmt0aQorZW5kVmFyaWFibGVzCisKK2JlZ2luVmFyaWFibGVzCithc3NpZ24gdG9nZ2xlS2V5cyBce2Nob3JkfVx7Zn0KK2Fzc2lnbiB0b2dnbGVDb21tYW5kIEZSRUVaRQoraW5jbHVkZSB0b2dnbGUua3RpCitlbmRWYXJpYWJsZXMKKworYmVnaW5WYXJpYWJsZXMKK2Fzc2lnbiB0b2dnbGVLZXlzIFx7Y2hvcmR9XHtnfQorYXNzaWduIHRvZ2dsZUNvbW1hbmQgQ09OVFJBQ1RFRAoraW5jbHVkZSB0b2dnbGUua3RpCitlbmRWYXJpYWJsZXMKKworYmluZCBce2Nob3JkfVx7aH0gSEVMUAorCitiZWdpblZhcmlhYmxlcworYXNzaWduIHRvZ2dsZUtleXMgXHtjaG9yZH1ce2l9Cithc3NpZ24gdG9nZ2xlQ29tbWFuZCBTS1BJRExOUworaW5jbHVkZSB0b2dnbGUua3RpCitlbmRWYXJpYWJsZXMKKworYmluZCBce2Nob3JkfVx7bH0gTEVBUk4KKworYmluZCBce2Nob3JkfVx7cH0gUFJFRk1FTlUKK2JpbmQgXHtjaG9yZH1ce3B9K1x7dG9nZ2xlT2ZmfSBQUkVGTE9BRAorYmluZCBce2Nob3JkfVx7cH0rXHt0b2dnbGVPbn0gUFJFRlNBVkUKK2JpbmQgXHtjaG9yZH1ce3B9K1x7dG9nZ2xlT2ZmfStce3RvZ2dsZU9ufSBQUkVGUkVTRVQKKworYmVnaW5WYXJpYWJsZXMKK2Fzc2lnbiB0b2dnbGVLZXlzIFx7Y2hvcmR9XHtyfQorYXNzaWduIHRvZ2dsZUNvbW1hbmQgQVVUT1JFUEVBVAoraW5jbHVkZSB0b2dnbGUua3RpCitlbmRWYXJpYWJsZXMKKworYmluZCBce2Nob3JkfVx7c30gSU5GTworCitiZWdpblZhcmlhYmxlcworYXNzaWduIHRvZ2dsZUtleXMgXHtjaG9yZH1ce3R9Cithc3NpZ24gdG9nZ2xlQ29tbWFuZCBDU1JUUksKK2luY2x1ZGUgdG9nZ2xlLmt0aQorZW5kVmFyaWFibGVzCisKK2JlZ2luVmFyaWFibGVzCithc3NpZ24gdG9nZ2xlS2V5cyBce2Nob3JkfVx7dX0KK2Fzc2lnbiB0b2dnbGVDb21tYW5kIEFUVFJWSVMKK2luY2x1ZGUgdG9nZ2xlLmt0aQorZW5kVmFyaWFibGVzCisKK2JpbmQgXHtjaG9yZH1ce3Z9IENTUkpNUF9WRVJUCitiaW5kIFx7Y2hvcmR9XHt2fStce3RvZ2dsZU9mZn0gU1dJVENIVlRfUFJFVgorYmluZCBce2Nob3JkfVx7dn0rXHt0b2dnbGVPbn0gU1dJVENIVlRfTkVYVAorCitiZWdpblZhcmlhYmxlcworYXNzaWduIHRvZ2dsZUtleXMgXHtjaG9yZH1ce3d9Cithc3NpZ24gdG9nZ2xlQ29tbWFuZCBTTElERVdJTgoraW5jbHVkZSB0b2dnbGUua3RpCitlbmRWYXJpYWJsZXMKKworYmluZCBce2Nob3JkfVx7eH0gUEFTVEUKK2JpbmQgXHtjaG9yZH1ce3h9K1x7dG9nZ2xlT2ZmfSBDTElQX1JFU1RPUkUKK2JpbmQgXHtjaG9yZH1ce3h9K1x7dG9nZ2xlT259IENMSVBfU0FWRQorCitiaW5kIFx7Y2hvcmR9RG90MitEb3QzK0RvdDUgQ09NUEJSTDYrb24KK2JpbmQgXHtjaG9yZH1Eb3QyK0RvdDMrRG90NiBDT01QQlJMNitvZmYKKworYmluZCBce2Nob3JkfURvdDErRG90Mytce3RvZ2dsZU9mZn0gQlJMS0JEK29mZgorYmluZCBce2Nob3JkfURvdDErRG90Mytce3RvZ2dsZU9ufSBCUkxLQkQrb24KKworYmluZCBce2Nob3JkfURvdDQrRG90Nitce3RvZ2dsZU9mZn0gQlJMVUNET1RTK29mZgorYmluZCBce2Nob3JkfURvdDQrRG90Nitce3RvZ2dsZU9ufSBCUkxVQ0RPVFMrb24KKworYmluZCBce2Nob3JkfURvdDMgS0VZX0NVUlNPUl9MRUZUCitiaW5kIFx7Y2hvcmR9RG90NiBLRVlfQ1VSU09SX1JJR0hUCitiaW5kIFx7Y2hvcmR9RG90MiBLRVlfSE9NRQorYmluZCBce2Nob3JkfURvdDUgS0VZX0VORAorYmluZCBce2Nob3JkfURvdDEgS0VZX0NVUlNPUl9VUAorYmluZCBce2Nob3JkfURvdDQgS0VZX0NVUlNPUl9ET1dOCisKK2JpbmQgXHtjaG9yZH1Eb3QyK0RvdDMgS0VZX1BBR0VfVVAKK2JpbmQgXHtjaG9yZH1Eb3Q1K0RvdDYgS0VZX1BBR0VfRE9XTgorYmluZCBce2Nob3JkfURvdDQrRG90NSBLRVlfVEFCCisKK2JpbmQgXHtjaG9yZH1Eb3QyK0RvdDUrRG90NiBLRVlfREVMRVRFCitiaW5kIFx7Y2hvcmR9RG90MitEb3Q2IEtFWV9FU0NBUEUKK2JpbmQgXHtjaG9yZH1Eb3QzK0RvdDUgS0VZX0lOU0VSVAorCitiaW5kIFx7Y2hvcmR9RG90MStEb3Q4IEdVSQorYmluZCBce2Nob3JkfURvdDQrRG90OCBTSElGVAorYmluZCBce2Nob3JkfURvdDIrRG90OCBNRVRBCitiaW5kIFx7Y2hvcmR9RG90NStEb3Q4IEFMVEdSCitiaW5kIFx7Y2hvcmR9RG90MytEb3Q4IENPTlRST0wKK2JpbmQgXHtjaG9yZH1Eb3Q2K0RvdDggVVBQRVIKK2JpbmQgXHtjaG9yZH1Eb3Q3K0RvdDggVU5TVElDSworCitpZk5vdFZhciBub1VuY2hvcmRlZAorYXNzaWduRGVmYXVsdCBjb21tYW5kRG90NyBLRVlfQkFDS1NQQUNFCithc3NpZ25EZWZhdWx0IGNvbW1hbmREb3Q4IEtFWV9FTlRFUgorCitiaW5kIERvdDcgXHtjb21tYW5kRG90N30KK2JpbmQgRG90OCBce2NvbW1hbmREb3Q4fQorCitiaW5kIFx7Y2hvcmR9RG90NyBQQVNTRE9UUytkb3Q3CitiaW5kIFx7Y2hvcmR9RG90OCBQQVNTRE9UUytkb3Q4CisKK2luY2x1ZGUgbWVudS5rdGkKK2VuZElmCisKK2lmUGxhdGZvcm0gYW5kcm9pZAoraW5jbHVkZSBhbmRyb2lkLWNob3Jkcy5rdGkKK2VuZGlmCmRpZmYgLS1naXQgYS9UYWJsZXMvSW5wdXQvY24vYWxsLmt0YiBiL1RhYmxlcy9JbnB1dC9jbi9hbGwua3RiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYxYTdmN2EKLS0tIC9kZXYvbnVsbAorKysgYi9UYWJsZXMvSW5wdXQvY24vYWxsLmt0YgpAQCAtMCwwICsxLDYzIEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisjICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorIworIyBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisjCisjIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisjCisjIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyMgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorIyBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyMKKyMgV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworIworIyBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKwordGl0bGUgQ2FudXRlCisKK25vdGUgVGhlIGtleXMgb24gdGhlIGZyb250LCBmcm9tIGxlZnQgdG8gcmlnaHQsIGFyZTogQmFjaywgTWVudSwgRm9yd2FyZC4KK25vdGUgVGhlIHRyaWFuZ3VsYXIga2V5cyB0byB0aGUgbGVmdCBvZiBlYWNoIHJvdyBvZiBjZWxscyBhcmUgc2VsZWN0aW9uIGtleXMuCitub3RlICsgRnJvbSB0b3AgdG8gYm90dG9tLCB0aGV5J3JlIG5hbWVkIExpbmUxIHRocm91Z2ggTGluZTkuCitub3RlICsgVGhlIHJvdW5kIGtleSBhYm92ZSB0aGVtIChsYWJlbGxlZCBIKSBpcyBuYW1lZCBIZWxwLgorbm90ZSArIFRoZSBzcXVhcmUga2V5IGJlbG93IHRoZW0gKGxhYmVsbGVkIDApIGlzIG5hbWVkIFJlZnJlc2guCisKK2JpbmQgSGVscCBIRUxQCitiaW5kIEhlbHArTWVudSBQUkVGTUVOVQorYmluZCBIZWxwK0JhY2sgUFJFRkxPQUQKK2JpbmQgSGVscCtGb3J3YXJkIFBSRUZTQVZFCisKK2JpbmQgTWVudSBIT01FCitiaW5kIEJhY2sgV0lOVVAKK2JpbmQgRm9yd2FyZCBXSU5ETgorCitiaW5kIE1lbnUrQmFjayBGV0lOTFQKK2JpbmQgTWVudStGb3J3YXJkIEZXSU5SVAorCitiaW5kIFJlZnJlc2grQmFjayBUT1BfTEVGVAorYmluZCBSZWZyZXNoK01lbnUgTE5CRUcKK2JpbmQgUmVmcmVzaCtGb3J3YXJkIEJPVF9MRUZUCisKK2JpbmQgTGluZTEgUk9VVEVfTElORSswCitiaW5kIExpbmUyIFJPVVRFX0xJTkUrMQorYmluZCBMaW5lMyBST1VURV9MSU5FKzIKK2JpbmQgTGluZTQgUk9VVEVfTElORSszCitiaW5kIExpbmU1IFJPVVRFX0xJTkUrNAorYmluZCBMaW5lNiBST1VURV9MSU5FKzUKK2JpbmQgTGluZTcgUk9VVEVfTElORSs2CitiaW5kIExpbmU4IFJPVVRFX0xJTkUrNworYmluZCBMaW5lOSBST1VURV9MSU5FKzgKKworYmluZCBSZWZyZXNoK0hlbHAgUkVGUkVTSAorYmluZCBSZWZyZXNoK0xpbmUxIFJFRlJFU0hfTElORSswCitiaW5kIFJlZnJlc2grTGluZTIgUkVGUkVTSF9MSU5FKzEKK2JpbmQgUmVmcmVzaCtMaW5lMyBSRUZSRVNIX0xJTkUrMgorYmluZCBSZWZyZXNoK0xpbmU0IFJFRlJFU0hfTElORSszCitiaW5kIFJlZnJlc2grTGluZTUgUkVGUkVTSF9MSU5FKzQKK2JpbmQgUmVmcmVzaCtMaW5lNiBSRUZSRVNIX0xJTkUrNQorYmluZCBSZWZyZXNoK0xpbmU3IFJFRlJFU0hfTElORSs2CitiaW5kIFJlZnJlc2grTGluZTggUkVGUkVTSF9MSU5FKzcKK2JpbmQgUmVmcmVzaCtMaW5lOSBSRUZSRVNIX0xJTkUrOAorCmRpZmYgLS1naXQgYS9UYWJsZXMvSW5wdXQvZHAvYWxsLmt0YiBiL1RhYmxlcy9JbnB1dC9kcC9hbGwua3RiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNlYTcxMjUKLS0tIC9kZXYvbnVsbAorKysgYi9UYWJsZXMvSW5wdXQvZHAvYWxsLmt0YgpAQCAtMCwwICsxLDQ0IEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisjICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorIworIyBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisjCisjIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisjCisjIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyMgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorIyBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyMKKyMgV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworIworIyBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKwordGl0bGUgRG90UGFkCisKK2lmS2V5IFJpZ2h0TmV4dAoraW5jbHVkZSBzY3JvbGwua3RpCitlbmRJZgorCitpZktleSBTcGFjZQoraW5jbHVkZSBrZXlib2FyZC5rdGkKK2VuZElmCisKK2lmS2V5IFBhbkxlZnQKK2luY2x1ZGUgcGFubmluZy5rdGkKK2VuZElmCisKK2lmS2V5IE5hdkNlbnRlcgoraW5jbHVkZSBuYXZpZ2F0aW9uLmt0aQorZW5kSWYKKworaWZLZXkgUm91dGluZ0tleQoraW5jbHVkZSByb3V0aW5nLmt0aQorZW5kSWYKKworaWZLZXkgRnVuY3Rpb25LZXkKK2luY2x1ZGUgZnVuY3Rpb24ua3RpCitlbmRJZgorCmRpZmYgLS1naXQgYS9UYWJsZXMvSW5wdXQvZHAvZnVuY3Rpb24ua3RpIGIvVGFibGVzL0lucHV0L2RwL2Z1bmN0aW9uLmt0aQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjc1OGQzCi0tLSAvZGV2L251bGwKKysrIGIvVGFibGVzL0lucHV0L2RwL2Z1bmN0aW9uLmt0aQpAQCAtMCwwICsxLDM5IEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisjICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorIworIyBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisjCisjIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisjCisjIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyMgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorIyBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyMKKyMgV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworIworIyBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworYmluZCBGdW5jdGlvbktleS4xIExOVVA6VE9QCitiaW5kIEZ1bmN0aW9uS2V5LjQgTE5ETjpCT1QKKworYmluZCBGdW5jdGlvbktleS4yIFBSRElGTE46QVRUUlVQCitiaW5kIEZ1bmN0aW9uS2V5LjMgTlhESUZMTjpBVFRSRE4KKworYmluZCBGdW5jdGlvbktleS4xK0Z1bmN0aW9uS2V5LjIgUFJQUk9NUFQ6SEVMUAorYmluZCBGdW5jdGlvbktleS4yK0Z1bmN0aW9uS2V5LjQgTlhQUk9NUFQKKworYmluZCBGdW5jdGlvbktleS4zK0Z1bmN0aW9uS2V5LjEgUFJQR1JQSAorYmluZCBGdW5jdGlvbktleS4zK0Z1bmN0aW9uS2V5LjQgTlhQR1JQSDpMRUFSTgorCitiaW5kIEZ1bmN0aW9uS2V5LjErRnVuY3Rpb25LZXkuNCBIT01FOkJBQ0sKK2JpbmQgRnVuY3Rpb25LZXkuMitGdW5jdGlvbktleS4zIFRJTUU6UFJFRk1FTlUKKworY29udGV4dCBtZW51CitiaW5kIEZ1bmN0aW9uS2V5LjEgTUVOVV9QUkVWX0lURU06TUVOVV9GSVJTVF9JVEVNCitiaW5kIEZ1bmN0aW9uS2V5LjIgTUVOVV9QUkVWX1NFVFRJTkc6UFJFRkxPQUQKK2JpbmQgRnVuY3Rpb25LZXkuMyBNRU5VX05FWFRfU0VUVElORzpQUkVGU0FWRQorYmluZCBGdW5jdGlvbktleS40IE1FTlVfTkVYVF9JVEVNOk1FTlVfTEFTVF9JVEVNCisKZGlmZiAtLWdpdCBhL1RhYmxlcy9JbnB1dC9kcC9rZXlib2FyZC5rdGkgYi9UYWJsZXMvSW5wdXQvZHAva2V5Ym9hcmQua3RpCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY0ZDdmNjcKLS0tIC9kZXYvbnVsbAorKysgYi9UYWJsZXMvSW5wdXQvZHAva2V5Ym9hcmQua3RpCkBAIC0wLDAgKzEsMzAgQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyMgICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisjCisjIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyMKKyMgQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCittYXAgU3BhY2UgU1BBQ0UKK21hcCBEb3QxIERPVDEKK21hcCBEb3QyIERPVDIKK21hcCBEb3QzIERPVDMKK21hcCBEb3Q0IERPVDQKK21hcCBEb3Q1IERPVDUKK21hcCBEb3Q2IERPVDYKK21hcCBEb3Q3IERPVDcKK21hcCBEb3Q4IERPVDgKKworYXNzaWduIGNob3JkIFNwYWNlKworaW5jbHVkZSAuLi9jaG9yZHMua3RpCmRpZmYgLS1naXQgYS9UYWJsZXMvSW5wdXQvZHAvbmF2aWdhdGlvbi5rdGkgYi9UYWJsZXMvSW5wdXQvZHAvbmF2aWdhdGlvbi5rdGkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWUzOTQ4MwotLS0gL2Rldi9udWxsCisrKyBiL1RhYmxlcy9JbnB1dC9kcC9uYXZpZ2F0aW9uLmt0aQpAQCAtMCwwICsxLDI0IEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisjICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorIworIyBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisjCisjIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisjCisjIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyMgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorIyBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyMKKyMgV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworIworIyBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworYmluZCBOYXZMZWZ0IEZXSU5MVDpMTkJFRworYmluZCBOYXZSaWdodCBGV0lOUlQ6TE5FTkQKK2JpbmQgTmF2VXAgTE5VUDpUT1AKK2JpbmQgTmF2RG93biBMTkROOkJPVAorYmluZCBOYXZDZW50ZXIgSE9NRTpCQUNLCisKZGlmZiAtLWdpdCBhL1RhYmxlcy9JbnB1dC9kcC9wYW5mbjQua3RiIGIvVGFibGVzL0lucHV0L2RwL3BhbmZuNC5rdGIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTc3OGMwZAotLS0gL2Rldi9udWxsCisrKyBiL1RhYmxlcy9JbnB1dC9kcC9wYW5mbjQua3RiCkBAIC0wLDAgKzEsMjIgQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyMgICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisjCisjIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyMKKyMgQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCit0aXRsZSBEb3RQYWQgd2l0aCBQYW5uaW5nIEtleXMgYW5kIDQgRnVuY3Rpb24gS2V5cworCitpbmNsdWRlIHBhbm5pbmcua3RpCitpbmNsdWRlIGZ1bmN0aW9uLmt0aQpkaWZmIC0tZ2l0IGEvVGFibGVzL0lucHV0L2RwL3Bhbm5pbmcua3RpIGIvVGFibGVzL0lucHV0L2RwL3Bhbm5pbmcua3RpCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBmODczZGYKLS0tIC9kZXYvbnVsbAorKysgYi9UYWJsZXMvSW5wdXQvZHAvcGFubmluZy5rdGkKQEAgLTAsMCArMSwzMCBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorIyAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyMKKyMgQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorIworIyBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorIworIyBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisjIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyMgbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisjCisjIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK2JpbmQgUGFuTGVmdCBGV0lOTFQ6TE5CRUcKK2JpbmQgUGFuUmlnaHQgRldJTlJUOkxORU5ECisKKyMgQSBzaG9ydCBwcmVzcyBvZiBib3RoIHBhbm5pbmcga2V5cyBpcyBleHBlY3RlZCB0byByZWZyZXNoIHRoZSB3aG9sZSBkaXNwbGF5LgorIyBBIGxvbmcgcHJlc3Mgb2YgYm90aCBwYW5uaW5nIGtleXMgaXMgaW1sZW1lbnRlZCBpbnRlcm5hbGx5OworIyBpdCBnaXZlcyBoYXB0aWMgZmVlZGJhY2sgcmVnYXJkaW5nIGhvdyBjaGFyZ2VkIHRoZSBiYXR0ZXJ5IGlzLgorYmluZCBQYW5MZWZ0K1BhblJpZ2h0IFJFRlJFU0g6Tk9PUAorCitjb250ZXh0IG1lbnUKK2JpbmQgUGFuTGVmdCBGV0lOTFQ6TUVOVV9QUkVWX0xFVkVMCitiaW5kIFBhblJpZ2h0IEZXSU5SVDpQUkVGTUVOVQorCmRpZmYgLS1naXQgYS9UYWJsZXMvSW5wdXQvZHAvcm91dGluZy5rdGkgYi9UYWJsZXMvSW5wdXQvZHAvcm91dGluZy5rdGkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzJjNGU5OQotLS0gL2Rldi9udWxsCisrKyBiL1RhYmxlcy9JbnB1dC9kcC9yb3V0aW5nLmt0aQpAQCAtMCwwICsxLDIwIEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisjICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorIworIyBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisjCisjIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisjCisjIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyMgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorIyBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyMKKyMgV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworIworIyBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworYmluZCBSb3V0aW5nS2V5IFJPVVRFCisKZGlmZiAtLWdpdCBhL1RhYmxlcy9JbnB1dC9kcC9zY3JvbGwua3RpIGIvVGFibGVzL0lucHV0L2RwL3Njcm9sbC5rdGkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODc5MmQ0MwotLS0gL2Rldi9udWxsCisrKyBiL1RhYmxlcy9JbnB1dC9kcC9zY3JvbGwua3RpCkBAIC0wLDAgKzEsMjQgQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyMgICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisjCisjIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyMKKyMgQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitiaW5kIExlZnRQcmV2IExOVVA6VE9QCitiaW5kIExlZnROZXh0IExORE46Qk9UCisKK2JpbmQgUmlnaHRQcmV2IEZXSU5MVDpMTkJFRworYmluZCBSaWdodE5leHQgRldJTlJUOkxORU5ECisKZGlmZiAtLWdpdCBhL1RhYmxlcy9JbnB1dC9lYy9hbGwudHh0IGIvVGFibGVzL0lucHV0L2VjL2FsbC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDFlMWY1NQotLS0gL2Rldi9udWxsCisrKyBiL1RhYmxlcy9JbnB1dC9lYy9hbGwudHh0CkBAIC0wLDAgKzEsMjYgQEAKK0hlbHA6IEVjb0JyYWlsbGUgKEVuZ2xpc2gpCitGcm9tIGxlZnQgdG8gcmlnaHQsIGZyb250IGtleXMgYXJlOgorICBVUCAgIExFRlQgICBDTElDSyAgIFJJR0hUICAgRE9XTgorCitNb3ZlbWVudCBrZXlzOgorVVAgICAgICAgICAgICAgICAgdXAgb25lIGxpbmUKK0xFRlQgICAgICAgICAgICAgIGxlZnQgb25lIGZ1bGwgd2luZG93CitSSUdIVCAgICAgICAgICAgICByaWdodCBvbmUgZnVsbCB3aW5kb3cKK0RPV04gICAgICAgICAgICAgIGRvd24gb25lIGxpbmUKK0NMSUNLICAgICAgICAgICAgIGdvdG8gY3Vyc29yIHBvc2l0aW9uIChvbmx5IEVjbzIwIG1vZGVsKQorQ1VSU09SICsgTEVGVCAgICAgbGVmdCBvbmUgaGFsZiB3aW5kb3cKK0NVUlNPUiArIFJJR0hUICAgIHJpZ2h0IG9uZSBoYWxmIHdpbmRvdworQ1VSU09SICsgVVAgICAgICAgdG9wIG9mIGZ1bGwgd2luZG93CitDVVJTT1IgKyBET1dOICAgICBib3R0b20gb2YgZnVsbCB3aW5kb3cKKworCitPdGhlciBmdW5jdGlvbnM6CitTVEFUVVMgU0VOU09SIDEgICB0b2dnbGUgaGVscCBkaXNwbGF5CitTVEFUVVMgU0VOU09SIDIgICBhY3RpdmF0ZSBwcmVmZXJlbmNlcyBtZW51CitTVEFUVVMgU0VOU09SIDMgICB0b2dnbGUgYXR0cmlidXRlIGRpc3BsYXkgKG9ubHkgRWNvNDAgYW5kIEVjbzgwKQorU1RBVFVTIFNFTlNPUiA0ICAgZ2V0IHN0YXR1cyBpbmZvcm1hdGlvbiAob25seSBFY280MCBhbmQgRWNvODApCisKK0YyICAgICAgICAgICAgICAgIGdvdG8gY3Vyc29yIHBvc2l0aW9uCitGNSAgICAgICAgICAgICAgICB0b2dnbGUgY3Vyc29yIHZpc2liaWxpdHkKK0Y4ICAgICAgICAgICAgICAgIHRvZ2dsZSBzaXgtZG90cyBtb2RlCitTSElGVCArIEY4ICAgICAgICB0b2dnbGUgY3Vyc29yIHRyYWNraW5nCmRpZmYgLS1naXQgYS9UYWJsZXMvSW5wdXQvZWMvc3BhbmlzaC50eHQgYi9UYWJsZXMvSW5wdXQvZWMvc3BhbmlzaC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDQ0NDgzNAotLS0gL2Rldi9udWxsCisrKyBiL1RhYmxlcy9JbnB1dC9lYy9zcGFuaXNoLnR4dApAQCAtMCwwICsxLDI1IEBACitIZWxwOiBFY29CcmFpbGxlIChTcGFuaXNoKQorVGVjbGFkbyBmcm9udGFsIGRlIGl6cXVpZXJkYSBhIGRlcmVjaGEKKyAgQVJSSUJBICAgSVpRVUlFUkRBICAgQ0VOVFJPICAgREVSRUNIQSAgIEFCQUpPCisKK1RlY2xhcyBkZSBtb3ZpbWllbnRvOgorQVJSSUJBCQkgICAgdW5hIGxpbmVhIGhhY2lhIGFycmliYQorSVpRVUlFUkRBICAgICAgICAgICBzZSBtdWV2ZSBhIGxhcyBjZWxkYXMgYW50ZXJpb3JlcworREVSRUNIQQkJICAgIHNlIG11ZXZlIGEgbGFzIGNlbGRhcyBzaWd1aWVudGVzCitBQkFKTwkJICAgIHVuYSBsaW5lYSBoYWNpYSBhYmFqbworQ0VOVFJPICAgICAgICAgICAgICBzaW5jcm9uaXphIGN1cnNvcmVzLCBzb2xvIGVuIGxhIEVjbzIwCitDRU5UUk8gKyBJWlFVSUVSREEgIHByaW5jaXBpbyBkZSBsaW5lYQorQ0VOVFJPICsgREVSRUNIQSAgICBmaW5hbCBkZSBsaW5lYQorQ0VOVFJPICsgQVJSSUJBICAgICBwcmluY2lwaW8gZGUgcGFnaW5hCitDRU5UUk8gKyBBQkFKTyAgICAgIGZpbmFsIGRlIHBhZ2luYQorCitPdHJhcyBmdW5jaW9uZXM6CitTZW5zb3IgZGUgZXN0YWRvIDEgIGNhbWJpYSBhIGxhIHZlbnRhbmEgZGUgYXl1ZGEKK1NlbnNvciBkZSBlc3RhZG8gMiAgQWN0aXZhIGVsIG1lbnUgZGUgY29uZmlndXJhY2lvbgorU2Vuc29yIGRlIGVzdGFkbyAzICB2aXN1YWxpemEgYXRyaWJ1dG9zIChzb2xvIGVuIG1vZGVsb3MgRWNvNDAgeSBFY284MCkKK1NlbnNvciBkZSBlc3RhZG8gNCAgY29nZSBsYSBpbmZvcm1hY2lvbiBkZSBlc3RhZG8gKEVjbzQwIHkgRWNvODApCisKK0YyICAgICAgICAgICAgICAgICAgc2luY3Jvbml6YSBjdXJzb3JlcworRjUgICAgICAgICAgICAgICAgICBjdXJzb3IgdmlzaWJsZQorRjggICAgICAgICAgICAgICAgICBjYW1iaWEgbW9kbyA2IHB1bnRvcworU0hJRlQgKyBGOCAgICAgICAgICBjYW1iaWEgZWwgc2VndWltaWVudG8gZGUgY3Vyc29yCmRpZmYgLS1naXQgYS9UYWJsZXMvSW5wdXQvZXUvYWxsLnR4dCBiL1RhYmxlcy9JbnB1dC9ldS9hbGwudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEzNWRiYzQKLS0tIC9kZXYvbnVsbAorKysgYi9UYWJsZXMvSW5wdXQvZXUvYWxsLnR4dApAQCAtMCwwICsxLDI4IEBACitIZWxwOiBFdXJvQnJhaWxsZQorICAgICAgRHJpdmVyIGRldmVsb3BwZWQgYnkgWWFubmljayBQTEFTU0lBUkQgYW5kIE9saXZpZXIgQkVSVAorCitUbyBlbnRlciBpbiB0aGUgTGVhcm4tTW9kZSwgcHJlc3MgIytMIChvbiBub3RlYnJhaWxsZS9jbGlvKSwgQWxwaGErTDggKGZvciAKK1NjcmliYSkgb3IgTGV2ZWwxK0w3IChvbiBJcmlzIC0gTGV2ZWwxIG1heSBiZSBwZXJmb3JtZWQgYnkgcHJlc3NpbmcgCitGRytGQiBzaW11bHRhbmVvdXNseSkuCitGb3IgRXN5cyBwdXQgTGVmdEpveXN0aWNrIGluIHRoZSAiUmlnaHQiIHBvc2l0aW9uIGFuZCBSaWdodEpveXN0aWNrIGluIHRoZSAKKyJVcCIgcG9zaXRpb24uCisKK1VzaW5nIEN1dCBBbmQgUGFzdGUKKy0tLS0tLS0tLS0tLS0tLS0tLS0KKwlUbyBiZWdpbiBhIGJsb2NrLCBwcmVzcyAiKkUiIG9yIEJldGErTDEgb3IgTGF5ZXIyK0wxIGRlcGVuZGluZyBvbiB5b3VyCiticmFpbGxlIGRpc3BsYXkgYW5kIHRoZW4gY2xpY2sgb24gdGhlIGNlbGwgd2hlcmUgeW91IHdhbnQgdG8gc3RhcnQgdGhlIGJsb2NrLgorVG8gZW5kIGEgYmxvY2sgcHJlc3MgIipNIiBvciBCZXRhK0w5IG9yIExheWVyMitsOCBkZXBlbmRpbmcgb24geW91ciBicmFpbGxlIAorZGlzcGxheSwgYW5kIGNsaWNrIG9uIHRoZSBjZWxsIHdoZXJlIHlvdSB3YW50IHRvIGVuZCB0aGUgYmxvY2suIAorV2hlbiB5b3UgZG8gdGhpcywgdGhlIGJsb2NrIGlzIGNvcGllZCBpbnRvIHRoZSBCUkxUVFkgY2xpcGJvYXJkLCB3YWl0aW5nIHRvIAorYmUgcGFzdGVkIGFueXdoZXJlIHlvdSB3YW50LiBUbyBwYXN0ZSBhIGJsb2NrLAorcHJlc3MgdGhlICIqTCIgb3IgQmV0YStMOCBvciBMYXllcjIrTDcgZGVwZW5kaW5nIG9uIHlvdXIgYnJhaWxsZSBkaXNwbGF5LiAKK0Egc2VwYXJhdGUgaGVscCBmaWxlIGZvciBlYWNoIG1vZGVsIHdpbGwgYmUgY3JlYXRlZCBzb29uLgorCitOb3RlCistLS0tCitQbGVhc2Ugbm90ZSB0aGF0IHRoZSBSRUFETUUgZmlsZSBjb250YWlucyBhbHNvIHZlcnNpb24gaW5mb3JtYXRpb24gYW5kCitjb3B5cmlnaHQgbm90aWNlLCBzbyBpZiB5b3UgZmluZCBhIGJ1ZyB0aGF0IHdhcyBub3QgbGlzdGVkIG91dCBpbiB0aGUgUkVBRE1FCitmaWxlLCBmZWVsIGZyZWUgdG8gc2VuZCBhbiBlLW1haWwgdG8gbWUgKHlhbkBtaXN0aWdyaS5vcmcpLCBiZWNhdXNlIGl0J3MKK2hhcmQgdG8gdGVzdCBhbGwgcG9zc2libGUgZnVuY3Rpb25zLCBldmVuIGlmIEkgdXNlIHRoZSBkcml2ZXIgMTAgaG91cnMgYSBkYXkuIAorCitUaGFuayB5b3UuCmRpZmYgLS1naXQgYS9UYWJsZXMvSW5wdXQvZXUvYnJhaWxsZS5rdGkgYi9UYWJsZXMvSW5wdXQvZXUvYnJhaWxsZS5rdGkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmM1MjQ3NAotLS0gL2Rldi9udWxsCisrKyBiL1RhYmxlcy9JbnB1dC9ldS9icmFpbGxlLmt0aQpAQCAtMCwwICsxLDcwIEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisjICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorIworIyBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisjCisjIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisjCisjIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyMgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorIyBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyMKKyMgV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworIworIyBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworbm90ZSBUaGUgZWlnaHQgZG90IGtleXMgb2YgdGhlIGJyYWlsbGUga2V5Ym9hcmQgYXJlIGJlaGluZCB0aGUgY3Vyc29yIHJvdXRpbmcga2V5cy4KK25vdGUgRnJvbSBsZWZ0IHRvIHJpZ2h0LCB0aGV5IGFyZTogRG90NywgRG90MywgRG90MiwgRG90MSwgRG90NCwgRG90NSwgRG90NiwgRG90OC4KK25vdGUgVGhlIHR3byBrZXlzIG9mIHRoZSBicmFpbGxlIGtleWJvYXJkIGluIGZyb250IG9mIHRoZSBicmFpbGxlIGNlbGxzLCBmcm9tIGxlZnQgdG8gcmlnaHQsIGFyZTogQmFja3NwYWNlLCBTcGFjZS4KKworbWFwIERvdDEgRE9UMQorbWFwIERvdDIgRE9UMgorbWFwIERvdDMgRE9UMworbWFwIERvdDQgRE9UNAorbWFwIERvdDUgRE9UNQorbWFwIERvdDYgRE9UNgorbWFwIERvdDcgRE9UNworbWFwIERvdDggRE9UOAorCittYXAgU3BhY2UgU1BBQ0UKK2JpbmQgQmFja3NwYWNlIEtFWV9CQUNLU1BBQ0UKK2JpbmQgQmFja3NwYWNlK1NwYWNlIEtFWV9FTlRFUgorCitiaW5kIFNwYWNlK0RvdDcgU0hJRlQKK2JpbmQgU3BhY2UrRG90OCBNRVRBCitiaW5kIFNwYWNlK0RvdDcrRG90OCBDT05UUk9MCisKK2JpbmQgU3BhY2UrRG90MitEb3Q1K0RvdDYgS0VZX1RBQgorYmluZCBTcGFjZStEb3QyK0RvdDMrRG90NiBLRVlfVEFCK3NoaWZ0CisKK2JpbmQgU3BhY2UrRG90NCBLRVlfQ1VSU09SX1VQCitiaW5kIFNwYWNlK0RvdDYgS0VZX0NVUlNPUl9ET1dOCitiaW5kIFNwYWNlK0RvdDIgS0VZX0NVUlNPUl9MRUZUCitiaW5kIFNwYWNlK0RvdDUgS0VZX0NVUlNPUl9SSUdIVAorCitiaW5kIFNwYWNlK0RvdDErRG90MyBLRVlfUEFHRV9VUAorYmluZCBTcGFjZStEb3Q0K0RvdDYgS0VZX1BBR0VfRE9XTgorCitiaW5kIFNwYWNlK0RvdDErRG90MitEb3QzIEtFWV9IT01FCitiaW5kIFNwYWNlK0RvdDQrRG90NStEb3Q2IEtFWV9FTkQKKworYmluZCBTcGFjZStEb3QzK0RvdDYgS0VZX0RFTEVURQorYmluZCBTcGFjZStEb3QxK0RvdDIrRG90NCtEb3Q1IEtFWV9FU0NBUEUKK2JpbmQgU3BhY2UrRG90MStEb3QzK0RvdDUgS0VZX0lOU0VSVAorCitiaW5kIEJhY2tzcGFjZStEb3QxIEtFWV9GVU5DVElPTiswCitiaW5kIEJhY2tzcGFjZStEb3QxK0RvdDIgS0VZX0ZVTkNUSU9OKzEKK2JpbmQgQmFja3NwYWNlK0RvdDErRG90NCBLRVlfRlVOQ1RJT04rMgorYmluZCBCYWNrc3BhY2UrRG90MStEb3Q0K0RvdDUgS0VZX0ZVTkNUSU9OKzMKK2JpbmQgQmFja3NwYWNlK0RvdDErRG90NSBLRVlfRlVOQ1RJT04rNAorYmluZCBCYWNrc3BhY2UrRG90MStEb3QyK0RvdDQgS0VZX0ZVTkNUSU9OKzUKK2JpbmQgQmFja3NwYWNlK0RvdDErRG90MitEb3Q0K0RvdDUgS0VZX0ZVTkNUSU9OKzYKK2JpbmQgQmFja3NwYWNlK0RvdDErRG90MitEb3Q1IEtFWV9GVU5DVElPTis3CitiaW5kIEJhY2tzcGFjZStEb3QyK0RvdDQgS0VZX0ZVTkNUSU9OKzgKK2JpbmQgQmFja3NwYWNlK0RvdDIrRG90NCtEb3Q1IEtFWV9GVU5DVElPTis5CitiaW5kIEJhY2tzcGFjZStEb3QxK0RvdDMgS0VZX0ZVTkNUSU9OKzEwCitiaW5kIEJhY2tzcGFjZStEb3QxK0RvdDIrRG90MyBLRVlfRlVOQ1RJT04rMTEKKwpkaWZmIC0tZ2l0IGEvVGFibGVzL0lucHV0L2V1L2NsaW8ua3RiIGIvVGFibGVzL0lucHV0L2V1L2NsaW8ua3RiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE0YTI0NTYKLS0tIC9kZXYvbnVsbAorKysgYi9UYWJsZXMvSW5wdXQvZXUvY2xpby5rdGIKQEAgLTAsMCArMSwxMDIgQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyMgICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisjCisjIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyMKKyMgQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCit0aXRsZSBFdXJvQnJhaWxsZSBBemVyQnJhaWxsZSwgQ2xpbywgTm90ZUJyYWlsbGUsIFB1cGlCcmFpbGxlLCBTY3JpYmEKKworaW5jbHVkZSBicmFpbGxlLmt0aQorCitiaW5kICFTdGFyIENPTlRFWFQrYWx0MQorYmluZCAhU2hhcnAgQ09OVEVYVCthbHQyCitiaW5kICFSb3V0aW5nS2V5IFJPVVRFCisKK2JpbmQgIVVwIEtFWV9DVVJTT1JfVVAKK2JpbmQgIUxlZnQgS0VZX0NVUlNPUl9MRUZUCitiaW5kICFSaWdodCBLRVlfQ1VSU09SX1JpZ2h0CitiaW5kICFEb3duIEtFWV9DVVJTT1JfRE9XTgorCitiaW5kICFGaXZlIEhPTUUKK2JpbmQgIU9uZSBUT1BfTEVGVAorYmluZCAhU2V2ZW4gQk9UX0xFRlQKK2JpbmQgIVRocmVlIFBSRElGTE4KK2JpbmQgIU5pbmUgTlhESUZMTgorYmluZCAhWmVybyBDU1JUUksKKworYmluZCAhQSBGUkVFWkUKKworYmluZCAhRSBGV0lOTFQKK2JpbmQgIUYgTE5VUAorYmluZCAhRyBQUlBST01QVAorYmluZCAhSCBQUkVGTUVOVQorYmluZCAhSSBJTkZPCitiaW5kICFLIE5YUFJPTVBUCitiaW5kICFMIExORE4KK2JpbmQgIU0gRldJTlJUCisKKworY29udGV4dCBhbHQxCitiaW5kICFTdGFyIENPTlRFWFQrZGVmYXVsdAorCitiaW5kICFEb3duIENTUlRSSworYmluZCAhUmlnaHQgVFVORVMKKworYmluZCAhRSBDT05URVhUK0NMSVBfTkVXCitiaW5kICFGIENPTlRFWFQrQ0xJUF9BREQKK2JpbmQgIUcgQ1NSVklTCitiaW5kICFLIENPTlRFWFQrQ09QWV9SRUNUCitiaW5kICFMIFBBU1RFCitiaW5kICFNIENPTlRFWFQrQ09QWV9MSU5FCisKKworY29udGV4dCBhbHQyCitiaW5kICFTaGFycCBDT05URVhUK2RlZmF1bHQKKworYmluZCAhTGVmdCBMTkJFRworYmluZCAhUmlnaHQgTE5FTkQKK2JpbmQgIVVwIEhPTUUKK2JpbmQgIURvd24gQkFDSworCitiaW5kICFPbmUgTEVBUk4KK2JpbmQgIVRocmVlIFRPUF9MRUZUCitiaW5kICFOaW5lIEJPVF9MRUZUCisKK2JpbmQgIUEgRElTUE1ECisKK2JpbmQgIUUgVE9QX0xFRlQKK2JpbmQgIUcgUFJTRUFSQ0gKK2JpbmQgIUggSEVMUAorYmluZCAhSyBOWFNFQVJDSAorYmluZCAhTCBMRUFSTgorYmluZCAhTSBCT1RfTEVGVAorCisKK2NvbnRleHQgQ0xJUF9ORVcKK2JpbmQgIVJvdXRpbmdLZXkgQ0xJUF9ORVcKKworCitjb250ZXh0IENMSVBfQURECitiaW5kICFSb3V0aW5nS2V5IENMSVBfQURECisKKworY29udGV4dCBDT1BZX1JFQ1QKK2JpbmQgIVJvdXRpbmdLZXkgQ09QWV9SRUNUCisKKworY29udGV4dCBDT1BZX0xJTkUKK2JpbmQgIVJvdXRpbmdLZXkgQ09QWV9MSU5FCisKKwpkaWZmIC0tZ2l0IGEvVGFibGVzL0lucHV0L2V1L2NvbW1vbi5rdGkgYi9UYWJsZXMvSW5wdXQvZXUvY29tbW9uLmt0aQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNGY2NzQ4Ci0tLSAvZGV2L251bGwKKysrIGIvVGFibGVzL0lucHV0L2V1L2NvbW1vbi5rdGkKQEAgLTAsMCArMSwyMCBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorIyAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyMKKyMgQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorIworIyBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorIworIyBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisjIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyMgbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisjCisjIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK2luY2x1ZGUgYnJhaWxsZS5rdGkKK2luY2x1ZGUgcm91dGluZy5rdGkKZGlmZiAtLWdpdCBhL1RhYmxlcy9JbnB1dC9ldS9lc3lzX2xhcmdlLmt0YiBiL1RhYmxlcy9JbnB1dC9ldS9lc3lzX2xhcmdlLmt0YgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NTk0ZmU3Ci0tLSAvZGV2L251bGwKKysrIGIvVGFibGVzL0lucHV0L2V1L2VzeXNfbGFyZ2Uua3RiCkBAIC0wLDAgKzEsMjUgQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyMgICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisjCisjIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyMKKyMgQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCit0aXRsZSBFdXJvQnJhaWxsZSBFc3lzIDgwCisKK2luY2x1ZGUgY29tbW9uLmt0aQoraW5jbHVkZSBqb3lzdGlja3Mua3RpCitpbmNsdWRlIHN3MTIua3RpCitpbmNsdWRlIHN3MzQua3RpCitpbmNsdWRlIHN3NTYua3RpCmRpZmYgLS1naXQgYS9UYWJsZXMvSW5wdXQvZXUvZXN5c19tZWRpdW0ua3RiIGIvVGFibGVzL0lucHV0L2V1L2VzeXNfbWVkaXVtLmt0YgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NThlNjE4Ci0tLSAvZGV2L251bGwKKysrIGIvVGFibGVzL0lucHV0L2V1L2VzeXNfbWVkaXVtLmt0YgpAQCAtMCwwICsxLDI0IEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisjICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorIworIyBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisjCisjIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisjCisjIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyMgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorIyBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyMKKyMgV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworIworIyBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKwordGl0bGUgRXVyb0JyYWlsbGUgRXN5cyA0MCw2NAorCitpbmNsdWRlIGNvbW1vbi5rdGkKK2luY2x1ZGUgam95c3RpY2tzLmt0aQoraW5jbHVkZSBzdzEyLmt0aQoraW5jbHVkZSBzdzM0Lmt0aQpkaWZmIC0tZ2l0IGEvVGFibGVzL0lucHV0L2V1L2VzeXNfc21hbGwua3RiIGIvVGFibGVzL0lucHV0L2V1L2VzeXNfc21hbGwua3RiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZhYzRhMmQKLS0tIC9kZXYvbnVsbAorKysgYi9UYWJsZXMvSW5wdXQvZXUvZXN5c19zbWFsbC5rdGIKQEAgLTAsMCArMSwyMyBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorIyAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyMKKyMgQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorIworIyBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorIworIyBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisjIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyMgbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisjCisjIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK3RpdGxlIEV1cm9CcmFpbGxlIEVzeXMgMTIsMjQKKworaW5jbHVkZSBjb21tb24ua3RpCitpbmNsdWRlIGpveXN0aWNrcy5rdGkKK2luY2x1ZGUgc3cxMi5rdGkKZGlmZiAtLWdpdCBhL1RhYmxlcy9JbnB1dC9ldS9lc3l0aW1lLmt0YiBiL1RhYmxlcy9JbnB1dC9ldS9lc3l0aW1lLmt0YgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMWZkNjhhCi0tLSAvZGV2L251bGwKKysrIGIvVGFibGVzL0lucHV0L2V1L2VzeXRpbWUua3RiCkBAIC0wLDAgKzEsMTI2IEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisjICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorIworIyBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisjCisjIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisjCisjIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyMgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorIyBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyMKKyMgV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworIworIyBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKwordGl0bGUgRXVyb0JyYWlsbGUgRXN5dGltZQorCitpbmNsdWRlIGNvbW1vbi5rdGkKKworbm90ZSBUaGUgZm91ciBrZXlzIGJlbG93IHRoZSBsZWZ0IGpveXN0aWNrLCBmcm9tIHRvcCB0byBib3R0b20sIGFyZToKK25vdGUgKiBMMSwgRXNjYXBlLCBUYWIsIFNoaWZ0Lgorbm90ZSBUaGUgZm91ciBrZXlzIGJlbG93IHRoZSByaWdodCBqb3lzdGljaywgZnJvbSB0b3AgdG8gYm90dG9tLCBhcmU6Citub3RlICogTDgsIEluc2VydCwgQWx0LCBDb250cm9sLgorbm90ZSBTb21lIGtleSBjb21iaW5hdGlvbnMgaGF2ZSBiZWVuIHJlc2VydmVkIGZvciBpbnRlcm5hbCB1c2U6Citub3RlICsgTGVmdEpveXN0aWNrRG93bjogdGhlIEFsdCBrZXkKK25vdGUgKyBMZWZ0Sm95c3RpY2tQcmVzczogdGhlIEFsdCBrZXkgcHJlc3NlZCB0d2ljZSBpbiBhIHJvdworbm90ZSArIExlZnRKb3lzdGlja0Rvd24gKyBSaWdodEpveXN0aWNrKFJpZ2h0L0xlZnQpOiBlbmFibGUvZGlzYWJsZSBicmFpbGxlIGZ1bmN0aW9ucworbm90ZSArIExlZnRKb3lzdGlja0Rvd24gKyBSaWdodEpveXN0aWNrKFVwL0Rvd24pOiBzd2l0Y2ggdG8gaW50ZXJuYWwvZXh0ZXJuYWwgKEVzeXRpbWUvUEMpIFVTQiBpbnRlcmZhY2UKK25vdGUgKyBMZWZ0Sm95c3RpY2tEb3duICsgTDEgKyBFc2NhcGU6IHN3aXRjaCB0byBzaW5nbGUtaGFuZCBicmFpbGxlIGtleWJvYXJkIDEKK25vdGUgKyBMZWZ0Sm95c3RpY2tEb3duICsgU2hpZnQgKyBUYWI6IHN3aXRjaCB0byBzaW5nbGUtaGFuZCBicmFpbGxlIGtleWJvYXJkIDIKK25vdGUgKyBMZWZ0Sm95c3RpY2tEb3duICsgSW5zZXJ0ICsgTDg6IHN3aXRjaCB0byBzdGFuZGFyZCAodHdvLWhhbmQpIGJyYWlsbGUga2V5Ym9hcmQKK25vdGUgKyBSaWdodEpveXN0aWNrUHJlc3M6IHRoZSBFbnRlciBrZXkKK25vdGUgKyBSaWdodEpveXN0aWNrKGxlZnQvcmlnaHQvdXAvZG93bik6IHRoZSBBcnJvdyBMZWZ0L1JpZ2h0L1VwL0Rvd24ga2V5CisKK2JpbmQgTDErTDggSE9NRQorYmluZCBMZWZ0Sm95c3RpY2tQcmVzcytSaWdodEpveXN0aWNrUHJlc3MgQkFDSworCitiaW5kIEwxIEZXSU5MVAorYmluZCBMOCBGV0lOUlQKKworYmluZCBMZWZ0Sm95c3RpY2tMZWZ0IExOVVAKK2JpbmQgTGVmdEpveXN0aWNrUmlnaHQgTE5ETgorYmluZCBMZWZ0Sm95c3RpY2tVcCBDU1JUUksKK2JpbmQgTGVmdEpveXN0aWNrRG93biBOT09QICMgaW50ZXJuYWw6IHRoZSBBbHQga2V5CitiaW5kIExlZnRKb3lzdGlja1ByZXNzIE5PT1AgIyBpbnRlcm5hbDogdGhlIEFsdCBrZXkgcHJlc3NlZCB0d2ljZSBpbiBhIHJvdworCitiaW5kIFJpZ2h0Sm95c3RpY2tMZWZ0IE5PT1AgIyBpbnRlcm5hbDogdGhlIEFycm93IExlZnQga2V5CitiaW5kIFJpZ2h0Sm95c3RpY2tSaWdodCBOT09QICMgaW50ZXJuYWw6IHRoZSBBcnJvdyBSaWdodCBrZXkKK2JpbmQgUmlnaHRKb3lzdGlja1VwIE5PT1AgIyBpbnRlcm5hbDogdGhlIEFycm93IFVwIGtleQorYmluZCBSaWdodEpveXN0aWNrRG93biBOT09QICMgaW50ZXJuYWw6IHRoZSBBcnJvdyBEb3duIGtleQorYmluZCBSaWdodEpveXN0aWNrUHJlc3MgTk9PUCAjIGludGVybmFsOiB0aGUgRW50ZXIga2V5CisKK2JpbmQgTGVmdEpveXN0aWNrTGVmdCtSaWdodEpveXN0aWNrUHJlc3MgVE9QCitiaW5kIExlZnRKb3lzdGlja0xlZnQrUmlnaHRKb3lzdGlja0xlZnQgUFJQUk9NUFQKK2JpbmQgTGVmdEpveXN0aWNrTGVmdCtSaWdodEpveXN0aWNrUmlnaHQgUFJQR1JQSAorYmluZCBMZWZ0Sm95c3RpY2tMZWZ0K1JpZ2h0Sm95c3RpY2tVcCBQUkRJRkxOCitiaW5kIExlZnRKb3lzdGlja0xlZnQrUmlnaHRKb3lzdGlja0Rvd24gQVRUUlVQCisKK2JpbmQgTGVmdEpveXN0aWNrUmlnaHQrUmlnaHRKb3lzdGlja1ByZXNzIEJPVAorYmluZCBMZWZ0Sm95c3RpY2tSaWdodCtSaWdodEpveXN0aWNrTGVmdCBOWFBST01QVAorYmluZCBMZWZ0Sm95c3RpY2tSaWdodCtSaWdodEpveXN0aWNrUmlnaHQgTlhQR1JQSAorYmluZCBMZWZ0Sm95c3RpY2tSaWdodCtSaWdodEpveXN0aWNrVXAgTlhESUZMTgorYmluZCBMZWZ0Sm95c3RpY2tSaWdodCtSaWdodEpveXN0aWNrRG93biBBVFRSRE4KKworYmluZCBMZWZ0Sm95c3RpY2tVcCtSaWdodEpveXN0aWNrUHJlc3MgRElTUE1ECitiaW5kIExlZnRKb3lzdGlja1VwK1JpZ2h0Sm95c3RpY2tMZWZ0IENTUlZJUworYmluZCBMZWZ0Sm95c3RpY2tVcCtSaWdodEpveXN0aWNrUmlnaHQgQVRUUlZJUworYmluZCBMZWZ0Sm95c3RpY2tVcCtSaWdodEpveXN0aWNrVXAgU0lYRE9UUytvbgorYmluZCBMZWZ0Sm95c3RpY2tVcCtSaWdodEpveXN0aWNrRG93biBTSVhET1RTK29mZgorCitiaW5kIExlZnRKb3lzdGlja0Rvd24rUmlnaHRKb3lzdGlja1ByZXNzIElORk8KK2JpbmQgTGVmdEpveXN0aWNrRG93bitSaWdodEpveXN0aWNrTGVmdCBOT09QICMgaW50ZXJuYWw6IGRpc2FibGUgYnJhaWxsZSBmdW5jdGlvbnMKK2JpbmQgTGVmdEpveXN0aWNrRG93bitSaWdodEpveXN0aWNrUmlnaHQgTk9PUCAjIGludGVybmFsOiBlbmFibGUgYnJhaWxsZSBmdW5jdGlvbnMKK2JpbmQgTGVmdEpveXN0aWNrRG93bitSaWdodEpveXN0aWNrVXAgTk9PUCAjIGludGVybmFsOiBzd2l0Y2ggdG8gaW50ZXJuYWwgKEVzeXRpbWUpIFVTQiBpbnRlcmZhY2UKK2JpbmQgTGVmdEpveXN0aWNrRG93bitSaWdodEpveXN0aWNrRG93biBOT09QICMgaW50ZXJuYWw6IHN3aXRjaCB0byBleHRlcm5hbCAoUEMpIFVTQiBpbnRlcmZhY2UKKworYmluZCBMZWZ0Sm95c3RpY2tQcmVzcytSaWdodEpveXN0aWNrTGVmdCBOT09QCitiaW5kIExlZnRKb3lzdGlja1ByZXNzK1JpZ2h0Sm95c3RpY2tSaWdodCBOT09QCitiaW5kIExlZnRKb3lzdGlja1ByZXNzK1JpZ2h0Sm95c3RpY2tVcCBOT09QCitiaW5kIExlZnRKb3lzdGlja1ByZXNzK1JpZ2h0Sm95c3RpY2tEb3duIE5PT1AKKworYmluZCBMZWZ0Sm95c3RpY2tQcmVzcytSb3V0aW5nS2V5MSBTRVRMRUZUCitiaW5kIExlZnRKb3lzdGlja0xlZnQrUm91dGluZ0tleTEgUFJESUZDSEFSCitiaW5kIExlZnRKb3lzdGlja1JpZ2h0K1JvdXRpbmdLZXkxIE5YRElGQ0hBUgorYmluZCBMZWZ0Sm95c3RpY2tVcCtSb3V0aW5nS2V5MSBQUklOREVOVAorYmluZCBMZWZ0Sm95c3RpY2tEb3duK1JvdXRpbmdLZXkxIE5YSU5ERU5UCisKK2JpbmQgUmlnaHRKb3lzdGlja1ByZXNzK1JvdXRpbmdLZXkxIERFU0NDSEFSCitiaW5kIFJpZ2h0Sm95c3RpY2tMZWZ0K1JvdXRpbmdLZXkxIENMSVBfTkVXCitiaW5kIFJpZ2h0Sm95c3RpY2tVcCtSb3V0aW5nS2V5MSBDTElQX0FERAorYmluZCBSaWdodEpveXN0aWNrUmlnaHQrUm91dGluZ0tleTEgQ09QWV9MSU5FCitiaW5kIFJpZ2h0Sm95c3RpY2tEb3duK1JvdXRpbmdLZXkxIENPUFlfUkVDVAorCitiaW5kIEwxK0xlZnRKb3lzdGlja1ByZXNzIFRJTUUKK2JpbmQgTDErTGVmdEpveXN0aWNrTGVmdCBDSFJMVAorYmluZCBMMStMZWZ0Sm95c3RpY2tSaWdodCBDSFJSVAorYmluZCBMMStMZWZ0Sm95c3RpY2tVcCBQUlNFQVJDSAorYmluZCBMMStMZWZ0Sm95c3RpY2tEb3duIE5YU0VBUkNICisKK2JpbmQgTDgrTGVmdEpveXN0aWNrUHJlc3MgQ1NSSk1QX1ZFUlQKK2JpbmQgTDgrTGVmdEpveXN0aWNrTGVmdCBGV0lOTFRTS0lQCitiaW5kIEw4K0xlZnRKb3lzdGlja1JpZ2h0IEZXSU5SVFNLSVAKK2JpbmQgTDgrTGVmdEpveXN0aWNrVXAgTE5CRUcKK2JpbmQgTDgrTGVmdEpveXN0aWNrRG93biBMTkVORAorCitiaW5kIEwxK1JpZ2h0Sm95c3RpY2tQcmVzcyBQUkVGTUVOVQorYmluZCBMMStSaWdodEpveXN0aWNrTGVmdCBQUkVGTE9BRAorYmluZCBMMStSaWdodEpveXN0aWNrUmlnaHQgUFJFRlNBVkUKK2JpbmQgTDErUmlnaHRKb3lzdGlja1VwIEhFTFAKK2JpbmQgTDErUmlnaHRKb3lzdGlja0Rvd24gTEVBUk4KKworYmluZCBMOCtSaWdodEpveXN0aWNrUHJlc3MgUEFTVEUKK2JpbmQgTDgrUmlnaHRKb3lzdGlja0xlZnQgQ0xJUF9SRVNUT1JFCitiaW5kIEw4K1JpZ2h0Sm95c3RpY2tSaWdodCBDTElQX1NBVkUKK2JpbmQgTDgrUmlnaHRKb3lzdGlja1VwIEZSRUVaRQorYmluZCBMOCtSaWdodEpveXN0aWNrRG93biBBVVRPUkVQRUFUCisKK2NvbnRleHQgbWVudQorYmluZCBMOCtSaWdodEpveXN0aWNrVXAgTUVOVV9QUkVWX0lURU0KK2JpbmQgTDgrUmlnaHRKb3lzdGlja0Rvd24gTUVOVV9ORVhUX0lURU0KK2JpbmQgTDgrUmlnaHRKb3lzdGlja0xlZnQgTUVOVV9QUkVWX1NFVFRJTkcKK2JpbmQgTDgrUmlnaHRKb3lzdGlja1JpZ2h0IE1FTlVfTkVYVF9TRVRUSU5HCitiaW5kIEw4K1JpZ2h0Sm95c3RpY2tQcmVzcyBNRU5VX1BSRVZfTEVWRUwKZGlmZiAtLWdpdCBhL1RhYmxlcy9JbnB1dC9ldS9pcmlzLmt0YiBiL1RhYmxlcy9JbnB1dC9ldS9pcmlzLmt0YgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNmVkYzVmCi0tLSAvZGV2L251bGwKKysrIGIvVGFibGVzL0lucHV0L2V1L2lyaXMua3RiCkBAIC0wLDAgKzEsODggQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyMgICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisjCisjIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyMKKyMgQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCit0aXRsZSBFdXJvQnJhaWxsZSBJcmlzCisKK2luY2x1ZGUgY29tbW9uLmt0aQorbm90ZSBUaGUgTWVudSBrZXkgaXMgdGhlIHNtYWxsLCByb3VuZCBidXR0b24gdG8gdGhlIGxlZnQgb2YgdGhlIGN1cnNvciByb3V0aW5nIGtleXMuCitub3RlIFRoZSBaIGtleSBpcyB0aGUgc21hbGwsIHJvdW5kIGJ1dHRvbiB0byB0aGUgcmlnaHQgb2YgdGhlIGN1cnNvciByb3V0aW5nIGtleXMuCisKK2JpbmQgRG93bitMZWZ0IENPTlRFWFQrYWx0MQorYmluZCBEb3duK1JpZ2h0IENPTlRFWFQrYWx0MgorCitiaW5kIEwxIEZXSU5MVAorYmluZCBMMiBMTlVQCitiaW5kIEwzIFBSUFJPTVBUCitiaW5kIEw0IFBSRUZNRU5VCitiaW5kIEw1IElORk8KK2JpbmQgTDYgTlhQUk9NUFQKK2JpbmQgTDcgTE5ETgorYmluZCBMOCBGV0lOUlQKK2JpbmQgTGVmdCBLRVlfQ1VSU09SX0xFRlQKK2JpbmQgUmlnaHQgS0VZX0NVUlNPUl9SSUdIVAorYmluZCBVcCBLRVlfQ1VSU09SX1VQCitiaW5kIERvd24gS0VZX0NVUlNPUl9ET1dOCitiaW5kIEwxK0wyIFRPUF9MRUZUCitiaW5kIEwzK0w0IEZSRUVaRQorYmluZCBMNitMNyBIT01FCitiaW5kIEw3K0w4IEJPVF9MRUZUCitiaW5kIEwxK0wyK0wzK0w0IFJFU1RBUlRCUkwKK2JpbmQgTDUrTDYrTDcrTDggUkVTVEFSVFNQRUVDSAorCisKK2NvbnRleHQgYWx0MQorYmluZCBMMSBUT1BfTEVGVAorYmluZCBMMyBQUlNFQVJDSAorYmluZCBMNCBIRUxQCitiaW5kIEw1IExFQVJOCitiaW5kIEw2IE5YU0VBUkNICitiaW5kIEw4IEJPVF9MRUZUCitiaW5kIExlZnQgTE5CRUcKK2JpbmQgUmlnaHQgTE5FTkQKK2JpbmQgVXAgSE9NRQorYmluZCBEb3duIEJBQ0sKKworCitjb250ZXh0IGFsdDIKK2JpbmQgTDEgQ09OVEVYVCtDTElQX05FVworYmluZCBMMiBDT05URVhUK0NMSVBfQURECitiaW5kIEwzIENTUlZJUworYmluZCBMNiBDT05URVhUK0NPUFlfUkVDVAorYmluZCBMNyBQQVNURQorYmluZCBMOCBDT05URVhUK0NPUFlfTElORQorYmluZCBVcCBQUkVGTUVOVQorYmluZCBEb3duIENTUlRSSworYmluZCBSaWdodCBUVU5FUworCisKK2NvbnRleHQgQ0xJUF9ORVcKK2JpbmQgUm91dGluZ0tleTEgQ0xJUF9ORVcKKworCitjb250ZXh0IENMSVBfQURECitiaW5kIFJvdXRpbmdLZXkxIENMSVBfQURECisKKworY29udGV4dCBDT1BZX1JFQ1QKK2JpbmQgUm91dGluZ0tleTEgQ09QWV9SRUNUCisKKworY29udGV4dCBDT1BZX0xJTkUKK2JpbmQgUm91dGluZ0tleTEgQ09QWV9MSU5FCisKKwpkaWZmIC0tZ2l0IGEvVGFibGVzL0lucHV0L2V1L2pveXN0aWNrcy5rdGkgYi9UYWJsZXMvSW5wdXQvZXUvam95c3RpY2tzLmt0aQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYmI2NTlmCi0tLSAvZGV2L251bGwKKysrIGIvVGFibGVzL0lucHV0L2V1L2pveXN0aWNrcy5rdGkKQEAgLTAsMCArMSw2NCBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorIyAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyMKKyMgQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorIworIyBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorIworIyBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisjIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyMgbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisjCisjIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK25vdGUgVGhlIGpveXN0aWNrcyBhcmUgdGhlIHNtYWxsLCByb3VuZCwgZml2ZS13YXkgKGxlZnQsIHJpZ2h0LCB1cCwgZG93biwgcHJlc3MpIGNvbnRyb2xzIHRvIHRoZSBsZWZ0IGFuZCByaWdodCBvZiB0aGUgY3Vyc29yIHJvdXRpbmcga2V5cy4KKworYmluZCBSaWdodEpveXN0aWNrUHJlc3MgSE9NRQorYmluZCBSaWdodEpveXN0aWNrTGVmdCBGV0lOTFQKK2JpbmQgUmlnaHRKb3lzdGlja1JpZ2h0IEZXSU5SVAorYmluZCBSaWdodEpveXN0aWNrVXAgTE5VUAorYmluZCBSaWdodEpveXN0aWNrRG93biBMTkROCisKK2JpbmQgTGVmdEpveXN0aWNrTGVmdCBQUlBST01QVAorYmluZCBMZWZ0Sm95c3RpY2tSaWdodCBOWFBST01QVAorYmluZCBMZWZ0Sm95c3RpY2tVcCBUT1BfTEVGVAorYmluZCBMZWZ0Sm95c3RpY2tEb3duIEJPVF9MRUZUCisKK2JpbmQgTGVmdEpveXN0aWNrRG93bitSaWdodEpveXN0aWNrTGVmdCBDT05URVhUK0NMSVBfTkVXCitiaW5kIExlZnRKb3lzdGlja0Rvd24rUmlnaHRKb3lzdGlja1VwIENPTlRFWFQrQ0xJUF9BREQKK2JpbmQgTGVmdEpveXN0aWNrRG93bitSaWdodEpveXN0aWNrRG93biBDT05URVhUK0NPUFlfUkVDVAorYmluZCBMZWZ0Sm95c3RpY2tEb3duK1JpZ2h0Sm95c3RpY2tSaWdodCBDT05URVhUK0NPUFlfTElORQorYmluZCBMZWZ0Sm95c3RpY2tEb3duK1JpZ2h0Sm95c3RpY2tQcmVzcyBQQVNURQorCitiaW5kIExlZnRKb3lzdGlja0xlZnQrUmlnaHRKb3lzdGlja1ByZXNzIFNBWV9MSU5FCitiaW5kIExlZnRKb3lzdGlja0xlZnQrUmlnaHRKb3lzdGlja1VwIFNBWV9BQk9WRQorYmluZCBMZWZ0Sm95c3RpY2tMZWZ0K1JpZ2h0Sm95c3RpY2tEb3duIFNBWV9CRUxPVworYmluZCBMZWZ0Sm95c3RpY2tMZWZ0K1JpZ2h0Sm95c3RpY2tMZWZ0IFNBWV9TT0ZURVIKK2JpbmQgTGVmdEpveXN0aWNrTGVmdCtSaWdodEpveXN0aWNrUmlnaHQgU0FZX0xPVURFUgorCitiaW5kIExlZnRKb3lzdGlja1JpZ2h0K1JpZ2h0Sm95c3RpY2tVcCBMRUFSTgorYmluZCBMZWZ0Sm95c3RpY2tSaWdodCtSaWdodEpveXN0aWNrRG93biBIRUxQCisKKworY29udGV4dCBDTElQX05FVworYmluZCBSb3V0aW5nS2V5MSBDTElQX05FVworCisKK2NvbnRleHQgQ0xJUF9BREQKK2JpbmQgUm91dGluZ0tleTEgQ0xJUF9BREQKKworCitjb250ZXh0IENPUFlfUkVDVAorYmluZCBSb3V0aW5nS2V5MSBDT1BZX1JFQ1QKKworCitjb250ZXh0IENPUFlfTElORQorYmluZCBSb3V0aW5nS2V5MSBDT1BZX0xJTkUKKworCitjb250ZXh0IGRlZmF1bHQKZGlmZiAtLWdpdCBhL1RhYmxlcy9JbnB1dC9ldS9yb3V0aW5nLmt0aSBiL1RhYmxlcy9JbnB1dC9ldS9yb3V0aW5nLmt0aQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZjRkZDE1Ci0tLSAvZGV2L251bGwKKysrIGIvVGFibGVzL0lucHV0L2V1L3JvdXRpbmcua3RpCkBAIC0wLDAgKzEsMjUgQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyMgICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisjCisjIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyMKKyMgQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitub3RlIFRoZSBjdXJzb3Igcm91dGluZyBrZXlzIGFyZSB0aGUgc21hbGwsIHJvdW5kIGJ1dHRvbnMganVzdCBiZWhpbmQgdGhlIGJyYWlsbGUgY2VsbHMuCitub3RlIFJvdXRpbmdLZXkxIG1lYW5zIHByZXNzaW5nIGEgY3Vyc29yIHJvdXRpbmcga2V5IG9uY2UgKGEgc2luZ2xlIGNsaWNrKS4KK25vdGUgUm91dGluZ0tleTIgbWVhbnMgcHJlc3NpbmcgYSBjdXJzb3Igcm91dGluZyBrZXkgdHdpY2UgcXVpY2tseSAoYSBkb3VibGUgY2xpY2spLgorCitiaW5kIFJvdXRpbmdLZXkxIFJPVVRFCitiaW5kIFJvdXRpbmdLZXkyIERFU0NDSEFSCisKZGlmZiAtLWdpdCBhL1RhYmxlcy9JbnB1dC9ldS9zdzEyLmt0aSBiL1RhYmxlcy9JbnB1dC9ldS9zdzEyLmt0aQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYzM5MTM0Ci0tLSAvZGV2L251bGwKKysrIGIvVGFibGVzL0lucHV0L2V1L3N3MTIua3RpCkBAIC0wLDAgKzEsMzUgQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyMgICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisjCisjIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyMKKyMgQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitub3RlIFRoZSBzd2l0Y2hlcyBhcmUgdGhyZWUtd2F5IChsZWZ0LCByaWdodCwgcHJlc3MpIGNvbnRyb2xzIG9uIHRoZSBmcm9udCBzdXJmYWNlLgorbm90ZSBTd2l0Y2gxIGlzIHRoZSBsZWZ0IG91dGVyIHN3aXRjaC4KK25vdGUgU3dpdGNoMiBpcyB0aGUgcmlnaHQgb3V0ZXIgc3dpdGNoLgorCitiaW5kIFN3aXRjaDFMZWZ0IEZXSU5MVAorYmluZCBTd2l0Y2gxUmlnaHQgRldJTlJUCisKK2JpbmQgTGVmdEpveXN0aWNrTGVmdCtTd2l0Y2gxTGVmdCtTd2l0Y2gxUmlnaHQgTVVURQorYmluZCBMZWZ0Sm95c3RpY2tMZWZ0K1N3aXRjaDFMZWZ0IFNBWV9TTE9XRVIKK2JpbmQgTGVmdEpveXN0aWNrTGVmdCtTd2l0Y2gxUmlnaHQgU0FZX0ZBU1RFUgorCitiaW5kIExlZnRKb3lzdGlja1JpZ2h0K1N3aXRjaDFMZWZ0IExOQkVHCitiaW5kIExlZnRKb3lzdGlja1JpZ2h0K1N3aXRjaDFSaWdodCBMTkVORAorCitiaW5kIExlZnRKb3lzdGlja1JpZ2h0K1N3aXRjaDFMZWZ0K1N3aXRjaDFSaWdodCBQUkVGTUVOVQorYmluZCBMZWZ0Sm95c3RpY2tSaWdodCtTd2l0Y2gyTGVmdCtTd2l0Y2gyUmlnaHQgQ1NSVFJLCisKZGlmZiAtLWdpdCBhL1RhYmxlcy9JbnB1dC9ldS9zdzM0Lmt0aSBiL1RhYmxlcy9JbnB1dC9ldS9zdzM0Lmt0aQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMGVkOTY2Ci0tLSAvZGV2L251bGwKKysrIGIvVGFibGVzL0lucHV0L2V1L3N3MzQua3RpCkBAIC0wLDAgKzEsMjEgQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyMgICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisjCisjIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyMKKyMgQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitub3RlIFN3aXRjaDMgaXMgdGhlIGxlZnQgaW5uZXIgc3dpdGNoLgorbm90ZSBTd2l0Y2g0IGlzIHRoZSByaWdodCBpbm5lciBzd2l0Y2guCisKZGlmZiAtLWdpdCBhL1RhYmxlcy9JbnB1dC9ldS9zdzU2Lmt0aSBiL1RhYmxlcy9JbnB1dC9ldS9zdzU2Lmt0aQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYzQzYWEyCi0tLSAvZGV2L251bGwKKysrIGIvVGFibGVzL0lucHV0L2V1L3N3NTYua3RpCkBAIC0wLDAgKzEsMjEgQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyMgICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisjCisjIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyMKKyMgQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitub3RlIFN3aXRjaDUgaXMgYmV0d2VlbiBTd2l0Y2gxIGFuZCBTd2l0Y2gzLgorbm90ZSBTd2l0Y2g2IGlzIGJldHdlZW4gU3dpdGNoMiBhbmQgU3dpdGNoNC4KKwpkaWZmIC0tZ2l0IGEvVGFibGVzL0lucHV0L2ZhL2FsbC5rdGIgYi9UYWJsZXMvSW5wdXQvZmEvYWxsLmt0YgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNTZlYmJhCi0tLSAvZGV2L251bGwKKysrIGIvVGFibGVzL0lucHV0L2ZhL2FsbC5rdGIKQEAgLTAsMCArMSwxNTEgQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyMgICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisjCisjIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyMKKyMgQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCit0aXRsZSBGcmFuayBBdWRpb2RhdGEKKworbm90ZSBSb3V0aW5nS2V5IG1lYW5zIGFueSBvZiB0aGUgc21hbGwga2V5cyBqdXN0IGJlaGluZCBlYWNoIG9mIHRoZSB0ZXh0IGNlbGxzLgorbm90ZSBGcm9tIGxlZnQgdG8gcmlnaHQ6Citub3RlICsgVGhlIHRocmVlIGNvbnZleCBrZXlzIHRvIHRoZSBsZWZ0IG9mIHRoZSByb3V0aW5nIGtleXMgYXJlOiBGMSwgRjIsIEYzLgorbm90ZSArIFRoZSB0aHJlZSBjb252ZXgga2V5cyB0byB0aGUgcmlnaHQgb2YgdGhlIHJvdXRpbmcga2V5cyBhcmU6IEY0LCBGNSwgRjYuCitub3RlICsgVGhlIHRocmVlIGNvbmNhdmUga2V5cyBhdCB0aGUgbGVmdCBhbG9uZyB0aGUgZnJvbnQgYXJlOiBLMSwgSzIsIEszLgorbm90ZSArIFRoZSB0aHJlZSBjb25jYXZlIGtleXMgaW4gdGhlIG1pZGRsZSBhbG9uZyB0aGUgZnJvbnQgYXJlOiBLNCwgSzUsIEs2Lgorbm90ZSArIFRoZSB0aHJlZSBjb25jYXZlIGtleXMgYXQgdGhlIHJpZ2h0IGFsb25nIHRoZSBmcm9udCBhcmU6IEs3LCBLOCwgSzkuCisKK2JpbmQgRjEgSEVMUAorYmluZCBGMiBQUkVGTUVOVQorYmluZCBGMyBMRUFSTgorCitiaW5kIEYyK0YxIFBSRUZMT0FECitiaW5kIEYyK0YzIFBSRUZTQVZFCisKK2JpbmQgRjErRjMgSU5GTworYmluZCBGMStGMitGMyBUSU1FCisKK2JpbmQgRjQgQ1NSVklTCitiaW5kIEY1IENTUlRSSworYmluZCBGNiBTSVhET1RTCisKK2JpbmQgRjUrRjQgQVRUUlZJUworYmluZCBGNStGNiBESVNQTUQKKworYmluZCBGNCtGNiBBVVRPUkVQRUFUCitiaW5kIEY0K0Y1K0Y2IEZSRUVaRQorCitiaW5kIEs0IEZXSU5MVAorYmluZCBLNiBGV0lOUlQKK2JpbmQgSzQrSzYgU0tQQkxOS1dJTlMKKworYmluZCBLNStLNCBMTkJFRworYmluZCBLNStLNiBMTkVORAorCitiaW5kIEs1IEhPTUU6QkFDSworYmluZCBLNCtLNStLNiBDU1JKTVBfVkVSVAorCitiaW5kIEsxK0s0IEhXSU5MVAorYmluZCBLMStLNiBIV0lOUlQKKworYmluZCBLMitLNCBGV0lOTFRTS0lQCitiaW5kIEsyK0s2IEZXSU5SVFNLSVAKKworYmluZCBLMytLNCBQUk5CV0lOCitiaW5kIEszK0s2IE5YTkJXSU4KKworYmluZCBLMStLNStLNCBDSFJMVAorYmluZCBLMStLNStLNiBDSFJSVAorCitiaW5kIEsyK0s1K0s0IENMSVBfUkVTVE9SRQorYmluZCBLMitLNStLNiBDTElQX1NBVkUKKworYmluZCBLMytLNStLNCBQUlNFQVJDSAorYmluZCBLMytLNStLNiBOWFNFQVJDSAorCitiaW5kIEs3IExOVVAKK2JpbmQgSzkgTE5ETgorYmluZCBLNytLOSBTS1BJRExOUworCitiaW5kIEs4K0s3IFRPUAorYmluZCBLOCtLOSBCT1QKKworYmluZCBLOCBTQVlfTElORTpNVVRFCitiaW5kIEs3K0s4K0s5IFBBU1RFCisKK2JpbmQgSzErSzcgUFJQUk9NUFQKK2JpbmQgSzErSzkgTlhQUk9NUFQKKworYmluZCBLMitLNyBQUkRJRkxOCitiaW5kIEsyK0s5IE5YRElGTE4KKworYmluZCBLMytLNyBQUlBHUlBICitiaW5kIEszK0s5IE5YUEdSUEgKKworYmluZCBLMStLOCtLNyBUT1BfTEVGVAorYmluZCBLMStLOCtLOSBCT1RfTEVGVAorCitiaW5kIEsyK0s4K0s3IEFUVFJVUAorYmluZCBLMitLOCtLOSBBVFRSRE4KKworYmluZCBLMytLOCtLNyBOT09QCitiaW5kIEszK0s4K0s5IE5PT1AKKworYmluZCBLOCtLMiBBVVRPU1BFQUsKK2JpbmQgSzgrSzEgU0FZX1NPRlRFUgorYmluZCBLOCtLMyBTQVlfTE9VREVSCitiaW5kIEs4K0syK0sxIFNBWV9TTE9XRVIKK2JpbmQgSzgrSzIrSzMgU0FZX0ZBU1RFUgorCitiaW5kIEs4K0s1IFNQS0hPTUUKK2JpbmQgSzgrSzQgU0FZX0FCT1ZFCitiaW5kIEs4K0s2IFNBWV9CRUxPVworCitiaW5kIFJvdXRpbmdLZXkgUk9VVEUKK2JpbmQgUm91dGluZ0tleStSb3V0aW5nS2V5IENMSVBfQ09QWQorCitiaW5kIEYxK1JvdXRpbmdLZXkgQ0xJUF9ORVcKK2JpbmQgRjYrUm91dGluZ0tleSBDT1BZX0xJTkUKKworYmluZCBGMitSb3V0aW5nS2V5IENMSVBfQVBQRU5ECitiaW5kIEY1K1JvdXRpbmdLZXkgQ09QWV9SRUNUCisKK2JpbmQgRjMrUm91dGluZ0tleSBTRVRMRUZUCitiaW5kIEY0K1JvdXRpbmdLZXkgREVTQ0NIQVIKKworYmluZCBGNCtGNitSb3V0aW5nS2V5IFNXSVRDSFZUCitiaW5kIEY0K0Y2K0YxIFNXSVRDSFZUX1BSRVYKK2JpbmQgRjQrRjYrRjMgU1dJVENIVlRfTkVYVAorCitiaW5kIEY0K0Y1K1JvdXRpbmdLZXkgU0VUTUFSSworYmluZCBGNStGNitSb3V0aW5nS2V5IEdPVE9NQVJLCitiaW5kIEY0K0Y1K0Y2K1JvdXRpbmdLZXkgS0VZX0ZVTkNUSU9OCisKK2JpbmQgSzcrUm91dGluZ0tleSBQUklOREVOVAorYmluZCBLOStSb3V0aW5nS2V5IE5YSU5ERU5UCitiaW5kIEs4K0s3K1JvdXRpbmdLZXkgUFJESUZDSEFSCitiaW5kIEs4K0s5K1JvdXRpbmdLZXkgTlhESUZDSEFSCisKK2JpbmQgU0xJREVSIEdPVE9MSU5FK3NjYWxlZAorCisKK2NvbnRleHQgbWVudQorYmluZCBGNCBNRU5VX1BSRVZfSVRFTQorYmluZCBGNiBNRU5VX05FWFRfSVRFTQorYmluZCBGNStGNCBNRU5VX0ZJUlNUX0lURU0KK2JpbmQgRjUrRjYgTUVOVV9MQVNUX0lURU0KK2JpbmQgRjUgTUVOVV9ORVhUX1NFVFRJTkcKK2JpbmQgRjQrRjYgTUVOVV9QUkVWX1NFVFRJTkcKK2JpbmQgRjQrRjUrRjYgTUVOVV9QUkVWX0xFVkVMCisKZGlmZiAtLWdpdCBhL1RhYmxlcy9JbnB1dC9mcy9idW1wZXJzLmt0aSBiL1RhYmxlcy9JbnB1dC9mcy9idW1wZXJzLmt0aQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kN2JmYzhlCi0tLSAvZGV2L251bGwKKysrIGIvVGFibGVzL0lucHV0L2ZzL2J1bXBlcnMua3RpCkBAIC0wLDAgKzEsNTQgQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyMgICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisjCisjIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyMKKyMgQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjIFRoaXMga2V5IHN1YnRhYmxlIGlzIGZvciBGcmVlZG9tU2NpZW50aWZpYyBkaXNwbGF5cyB3aGljaCBoYXZlIGJ1bXBlciBiYXJzLgorCitub3RlIFRoZSBsZWZ0IGFuZCByaWdodCBidW1wZXJzIGFyZSBsb25nLCB1cC9kb3duLCByb2NrZXIgYmFycy4KK25vdGUgKiBOZXdlciBtb2RlbHMgcmVmZXIgdG8gdGhlbSBhcyBwYW5uaW5nIHJvY2tlcnMuCitub3RlICogT24gc29tZSBtb2RlbHMsIGVhY2ggYnVtcGVyIGlzIGEgcGFpciBvZiBzaG9ydGVyIGJhcnMuCisKK2JpbmQgTGVmdEJ1bXBlclVwIEZXSU5MVAorYmluZCBMZWZ0QnVtcGVyRG93biBGV0lOUlQKK2JpbmQgUmlnaHRCdW1wZXJVcCBGV0lOTFQKK2JpbmQgUmlnaHRCdW1wZXJEb3duIEZXSU5SVAorCitiaW5kIExlZnRCdW1wZXJVcCtQYW5MZWZ0IENIUkxUCitiaW5kIExlZnRCdW1wZXJEb3duK1BhbkxlZnQgQ0hSUlQKK2JpbmQgUmlnaHRCdW1wZXJVcCtQYW5MZWZ0IEhXSU5MVAorYmluZCBSaWdodEJ1bXBlckRvd24rUGFuTGVmdCBIV0lOUlQKKworYmluZCBMZWZ0QnVtcGVyVXArTGVmdFNlbGVjdG9yIEZXSU5MVFNLSVAKK2JpbmQgTGVmdEJ1bXBlckRvd24rTGVmdFNlbGVjdG9yIEZXSU5SVFNLSVAKK2JpbmQgUmlnaHRCdW1wZXJVcCtMZWZ0U2VsZWN0b3IgUFJOQldJTgorYmluZCBSaWdodEJ1bXBlckRvd24rTGVmdFNlbGVjdG9yIE5YTkJXSU4KKworYmluZCBMZWZ0QnVtcGVyVXArUmlnaHRTZWxlY3RvciBQUlBST01QVAorYmluZCBMZWZ0QnVtcGVyRG93bitSaWdodFNlbGVjdG9yIE5YUFJPTVBUCitiaW5kIFJpZ2h0QnVtcGVyVXArUmlnaHRTZWxlY3RvciBQUlBHUlBICitiaW5kIFJpZ2h0QnVtcGVyRG93bitSaWdodFNlbGVjdG9yIE5YUEdSUEgKKworYmluZCBMZWZ0QnVtcGVyVXArUGFuUmlnaHQgRlJFRVpFK29uCitiaW5kIExlZnRCdW1wZXJEb3duK1BhblJpZ2h0IEZSRUVaRStvZmYKK2JpbmQgUmlnaHRCdW1wZXJVcCtQYW5SaWdodCBESVNQTUQrb24KK2JpbmQgUmlnaHRCdW1wZXJEb3duK1BhblJpZ2h0IERJU1BNRCtvZmYKKworYmluZCBMZWZ0QnVtcGVyVXArUm91dGluZ0tleSBQUkRJRkNIQVIKK2JpbmQgTGVmdEJ1bXBlckRvd24rUm91dGluZ0tleSBOWERJRkNIQVIKK2JpbmQgUmlnaHRCdW1wZXJVcCtSb3V0aW5nS2V5IFBSSU5ERU5UCitiaW5kIFJpZ2h0QnVtcGVyRG93bitSb3V0aW5nS2V5IE5YSU5ERU5UCisKZGlmZiAtLWdpdCBhL1RhYmxlcy9JbnB1dC9mcy9jb21tb24ua3RpIGIvVGFibGVzL0lucHV0L2ZzL2NvbW1vbi5rdGkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2E2ZjQ2OQotLS0gL2Rldi9udWxsCisrKyBiL1RhYmxlcy9JbnB1dC9mcy9jb21tb24ua3RpCkBAIC0wLDAgKzEsNjggQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyMgICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisjCisjIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyMKKyMgQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitiaW5kIExlZnRce25hdktleVR5cGV9UHJlc3MgTE5CRUcKK2JpbmQgUmlnaHRce25hdktleVR5cGV9UHJlc3MgTE5FTkQKKworYmluZCBMZWZ0U2VsZWN0b3IgQkFDSzpUT1BfTEVGVAorYmluZCBSaWdodFNlbGVjdG9yIEhPTUU6Qk9UX0xFRlQKK2JpbmQgTGVmdFNlbGVjdG9yK1JpZ2h0U2VsZWN0b3IgUEFTVEUKKworYmluZCBQYW5MZWZ0IEZXSU5MVAorYmluZCBQYW5SaWdodCBGV0lOUlQKK2JpbmQgUGFuTGVmdCtQYW5SaWdodCBDU1JKTVBfVkVSVAorCitiaW5kIExlZnRTZWxlY3RvcitQYW5MZWZ0IFRPUF9MRUZUCitiaW5kIExlZnRTZWxlY3RvcitQYW5SaWdodCBCT1RfTEVGVAorCitiaW5kIFJpZ2h0U2VsZWN0b3IrUGFuTGVmdCBUT1AKK2JpbmQgUmlnaHRTZWxlY3RvcitQYW5SaWdodCBCT1QKKworYmluZCAhTGVmdFx7bmF2S2V5VHlwZX1VcCBMTlVQCitiaW5kICFMZWZ0XHtuYXZLZXlUeXBlfURvd24gTE5ETgorCitiaW5kICFSaWdodFx7bmF2S2V5VHlwZX1VcCBGV0lOTFQKK2JpbmQgIVJpZ2h0XHtuYXZLZXlUeXBlfURvd24gRldJTlJUCisKK2JpbmQgTGVmdFx7bmF2S2V5VHlwZX1QcmVzcyshTGVmdFx7bmF2S2V5VHlwZX1VcCBQUkRJRkxOCitiaW5kIExlZnRce25hdktleVR5cGV9UHJlc3MrIUxlZnRce25hdktleVR5cGV9RG93biBOWERJRkxOCisKK2JpbmQgUmlnaHRce25hdktleVR5cGV9UHJlc3MrIVJpZ2h0XHtuYXZLZXlUeXBlfVVwIENIUkxUCitiaW5kIFJpZ2h0XHtuYXZLZXlUeXBlfVByZXNzKyFSaWdodFx7bmF2S2V5VHlwZX1Eb3duIENIUlJUCisKK2JpbmQgUGFuTGVmdCshTGVmdFx7bmF2S2V5VHlwZX1VcCBQUlBST01QVAorYmluZCBQYW5MZWZ0KyFMZWZ0XHtuYXZLZXlUeXBlfURvd24gTlhQUk9NUFQKKworYmluZCBQYW5SaWdodCshTGVmdFx7bmF2S2V5VHlwZX1VcCBQUlBHUlBICitiaW5kIFBhblJpZ2h0KyFMZWZ0XHtuYXZLZXlUeXBlfURvd24gTlhQR1JQSAorCitiaW5kIExlZnRTZWxlY3RvcishTGVmdFx7bmF2S2V5VHlwZX1VcCBBVFRSVVAKK2JpbmQgTGVmdFNlbGVjdG9yKyFMZWZ0XHtuYXZLZXlUeXBlfURvd24gQVRUUkROCisKK2JpbmQgUmlnaHRTZWxlY3RvcishTGVmdFx7bmF2S2V5VHlwZX1VcCBQUlNFQVJDSAorYmluZCBSaWdodFNlbGVjdG9yKyFMZWZ0XHtuYXZLZXlUeXBlfURvd24gTlhTRUFSQ0gKKworYmluZCBSb3V0aW5nS2V5IFJPVVRFCitiaW5kIExlZnRce25hdktleVR5cGV9UHJlc3MrUm91dGluZ0tleSBTRVRMRUZUCitiaW5kIFJpZ2h0XHtuYXZLZXlUeXBlfVByZXNzK1JvdXRpbmdLZXkgREVTQ0NIQVIKKworYmluZCBSb3V0aW5nS2V5KyFSb3V0aW5nS2V5IENMSVBfQ09QWQorYmluZCBQYW5MZWZ0K1JvdXRpbmdLZXkgQ0xJUF9ORVcKK2JpbmQgUGFuUmlnaHQrUm91dGluZ0tleSBDT1BZX1JFQ1QKK2JpbmQgTGVmdFNlbGVjdG9yK1JvdXRpbmdLZXkgQ0xJUF9BREQKK2JpbmQgUmlnaHRTZWxlY3RvcitSb3V0aW5nS2V5IENPUFlfTElORQpkaWZmIC0tZ2l0IGEvVGFibGVzL0lucHV0L2ZzL2ZvY3VzLmt0aSBiL1RhYmxlcy9JbnB1dC9mcy9mb2N1cy5rdGkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmJkYmQwZgotLS0gL2Rldi9udWxsCisrKyBiL1RhYmxlcy9JbnB1dC9mcy9mb2N1cy5rdGkKQEAgLTAsMCArMSw1MiBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorIyAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyMKKyMgQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorIworIyBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorIworIyBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisjIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyMgbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisjCisjIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMgVGhpcyBrZXkgc3VidGFibGUgaXMgZm9yIGFsbCBGcmVlZG9tU2NpZW50aWZpYyBGb2N1cyBkaXNwbGF5cy4KKworbm90ZSBUaGlzIGRlc2NyaXB0aW9uIGlzIGdlbmVyYWwgYmVjYXVzZSB0aGUga2V5IGxheW91dCBkaWZmZXJzIGZyb20gbW9kZWwgdG8gbW9kZWwuCisKK25vdGUgVGhlcmUgaXMgYSByb3V0aW5nIGtleSBpbW1lZGlhdGVseSBiZWhpbmQgZWFjaCBicmFpbGxlIGNlbGwuCitub3RlICogU29tZSBtb2RlbHMgaGF2ZSBhIG5hdnJvdyBrZXkgaW1tZWRpYXRlbHkgYmVoaW5kIGVhY2ggcm91dGluZyBrZXkuCitub3RlICogT24gb3RoZXJzLCBhIG5hdnJvdyBrZXkgY2FuIGJlIGVtdWxhdGVkIGJ5IGxvbmctcHJlc3NpbmcgdGhlIGNvcnJlc3BvbmRpbmcgcm91dGluZyBrZXkuCisKK25vdGUgVGhlcmUgYXJlIHR3byBOYXYgY29udHJvbHMgLSBvbmUgYXQgZWFjaCBlbmQgb2YgdGhlIGJyYWlsbGUgY2VsbHMuCitub3RlICogRWFjaCBoYXMgdGhyZWUgYWN0aW9uczogVXAsIERvd24sIGFuZCBQcmVzcy4KK25vdGUgKiBPbiBuZXdlciBtb2RlbHMsIGVhY2ggaXMgYSByb2NrZXIgY29tYmluZWQgd2l0aCBhIGJ1dHRvbi4KK25vdGUgKiBPbiBvbGRlciBtb2RlbHMsIGVhY2ggaXMgYSB3aGVlbCB0aGF0IGNhbiBiZSBib3RoIHJvbGxlZCBhbmQgcHJlc3NlZC4KKworbm90ZSBUaGUga2V5cyBvbiB0aGUgZnJvbnQsIGZyb20gbGVmdCB0byByaWdodCwgYXJlOgorbm90ZSAqIFx7ZnJvbnRLZXlzTGVmdH0gLSBce2Zyb250S2V5c1JpZ2h0fS4KKworbm90ZSBUaGUgbGVmdCBhbmQgcmlnaHQgcGFuIGtleXMgYXJlIHNob3J0IGJhcnMuCitub3RlICogT24gc29tZSBtb2RlbHMsIGVhY2ggaGFzIGEgcmFpc2VkIGRvdWJsZS1hcnJvdy4KKworbm90ZSBUaGUgbGVmdCBhbmQgcmlnaHQgc2VsZWN0b3JzIGFyZSByb3VuZC4KK25vdGUgKiBPbiBvbGRlciBtb2RlbHMsIHRoZXkncmUga25vd24gYXMgR0RGIChHZW5lcmFsIERpc3BsYXkgRnVuY3Rpb24pIGtleXMuCisKK2Fzc2lnbiBuYXZLZXlUeXBlIE5hdgoraW5jbHVkZSBjb21tb24ua3RpCitpbmNsdWRlIGtleWJvYXJkLmt0aQoraW5jbHVkZSBzcGVlY2gua3RpCisKK2JpbmQgTmF2cm93S2V5IERFU0NDSEFSCitiaW5kIFBhbkxlZnQrTmF2cm93S2V5IFBSSU5ERU5UCitiaW5kIFBhblJpZ2h0K05hdnJvd0tleSBOWElOREVOVAorYmluZCBMZWZ0U2VsZWN0b3IrTmF2cm93S2V5IFBSRElGQ0hBUgorYmluZCBSaWdodFNlbGVjdG9yK05hdnJvd0tleSBOWERJRkNIQVIKK2JpbmQgTmF2cm93S2V5KyFOYXZyb3dLZXkgQ0xJUF9BUFBFTkQKKwpkaWZmIC0tZ2l0IGEvVGFibGVzL0lucHV0L2ZzL2ZvY3VzMS5rdGIgYi9UYWJsZXMvSW5wdXQvZnMvZm9jdXMxLmt0YgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43Y2Y5NGY1Ci0tLSAvZGV2L251bGwKKysrIGIvVGFibGVzL0lucHV0L2ZzL2ZvY3VzMS5rdGIKQEAgLTAsMCArMSwyNCBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorIyAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyMKKyMgQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorIworIyBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorIworIyBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisjIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyMgbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisjCisjIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK3RpdGxlIEZyZWVkb21TY2llbnRpZmljIEZvY3VzMSAob3JpZ2luYWwpCisKK2Fzc2lnbiBmcm9udEtleXNMZWZ0IHBhblxzbGVmdCxcc2xlZnRcc3NlbGVjdG9yLFxzbGVmdFxzc2hpZnQKK2Fzc2lnbiBmcm9udEtleXNSaWdodCByaWdodFxzc2hpZnQsXHNyaWdodFxzc2VsZWN0b3IsXHNwYW5cc3JpZ2h0CisKK2luY2x1ZGUgZm9jdXMua3RpCmRpZmYgLS1naXQgYS9UYWJsZXMvSW5wdXQvZnMvZm9jdXMxNC5rdGIgYi9UYWJsZXMvSW5wdXQvZnMvZm9jdXMxNC5rdGIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjFkNTk2NAotLS0gL2Rldi9udWxsCisrKyBiL1RhYmxlcy9JbnB1dC9mcy9mb2N1czE0Lmt0YgpAQCAtMCwwICsxLDI1IEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisjICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorIworIyBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisjCisjIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisjCisjIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyMgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorIyBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyMKKyMgV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworIworIyBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKwordGl0bGUgRnJlZWRvbVNjaWVudGlmaWMgRm9jdXMgMTQKKworYXNzaWduIGZyb250S2V5c0xlZnQgbGVmdFxzc2VsZWN0b3IsXHNsZWZ0XHNyb2NrZXIsXHNwYW5cc2xlZnQsXHNsZWZ0XHNzaGlmdAorYXNzaWduIGZyb250S2V5c1JpZ2h0IHJpZ2h0XHNzaGlmdCxcc3BhblxzcmlnaHQsXHNyaWdodFxzcm9ja2VyLFxzcmlnaHRcc3NlbGVjdG9yCisKK2luY2x1ZGUgZm9jdXMua3RpCitpbmNsdWRlIHJvY2tlcnMua3RpCmRpZmYgLS1naXQgYS9UYWJsZXMvSW5wdXQvZnMvZm9jdXM0MC5rdGIgYi9UYWJsZXMvSW5wdXQvZnMvZm9jdXM0MC5rdGIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWFkYjdhNAotLS0gL2Rldi9udWxsCisrKyBiL1RhYmxlcy9JbnB1dC9mcy9mb2N1czQwLmt0YgpAQCAtMCwwICsxLDI1IEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisjICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorIworIyBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisjCisjIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisjCisjIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyMgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorIyBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyMKKyMgV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworIworIyBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKwordGl0bGUgRnJlZWRvbVNjaWVudGlmaWMgRm9jdXMgNDAKKworYXNzaWduIGZyb250S2V5c0xlZnQgcGFuXHNsZWZ0LFxzbGVmdFxzcm9ja2VyLFxzbGVmdFxzc2VsZWN0b3IsXHNsZWZ0XHNzaGlmdAorYXNzaWduIGZyb250S2V5c1JpZ2h0IHJpZ2h0XHNzaGlmdCxcc3JpZ2h0XHNzZWxlY3Rvcixcc3JpZ2h0XHNyb2NrZXIsXHNwYW5cc3JpZ2h0CisKK2luY2x1ZGUgZm9jdXMua3RpCitpbmNsdWRlIHJvY2tlcnMua3RpCmRpZmYgLS1naXQgYS9UYWJsZXMvSW5wdXQvZnMvZm9jdXM4MC5rdGIgYi9UYWJsZXMvSW5wdXQvZnMvZm9jdXM4MC5rdGIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGZlOTJjMgotLS0gL2Rldi9udWxsCisrKyBiL1RhYmxlcy9JbnB1dC9mcy9mb2N1czgwLmt0YgpAQCAtMCwwICsxLDI2IEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisjICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorIworIyBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisjCisjIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisjCisjIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyMgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorIyBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyMKKyMgV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworIworIyBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKwordGl0bGUgRnJlZWRvbVNjaWVudGlmaWMgRm9jdXMgODAKKworYXNzaWduIGZyb250S2V5c0xlZnQgcGFuXHNsZWZ0LFxzbGVmdFxzcm9ja2VyLFxzbGVmdFxzc2VsZWN0b3IsXHNsZWZ0XHNidW1wZXIsXHNsZWZ0XHNzaGlmdAorYXNzaWduIGZyb250S2V5c1JpZ2h0IHJpZ2h0XHNzaGlmdCxcc3JpZ2h0XHNidW1wZXIsXHNyaWdodFxzc2VsZWN0b3IsXHNyaWdodFxzcm9ja2VyLFxzcGFuXHNyaWdodAorCitpbmNsdWRlIGZvY3VzLmt0aQoraW5jbHVkZSByb2NrZXJzLmt0aQoraW5jbHVkZSBidW1wZXJzLmt0aQpkaWZmIC0tZ2l0IGEvVGFibGVzL0lucHV0L2ZzL2tleWJvYXJkLmt0aSBiL1RhYmxlcy9JbnB1dC9mcy9rZXlib2FyZC5rdGkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDIxOWQ5MQotLS0gL2Rldi9udWxsCisrKyBiL1RhYmxlcy9JbnB1dC9mcy9rZXlib2FyZC5rdGkKQEAgLTAsMCArMSw0OCBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorIyAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyMKKyMgQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorIworIyBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorIworIyBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisjIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyMgbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisjCisjIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK25vdGUgQW4gZWlnaHQtZG90LCBQZXJraW5zLXN0eWxlLCBicmFpbGxlIGtleWJvYXJkIGlzIG5lYXIgdGhlIHJlYXIgb2YgdGhlIHRvcC4KK25vdGUgKiBJdHMga2V5cywgRnJvbSBsZWZ0IHRvIHJpZ2h0LCBhcmU6IERvdDcsIERvdDMsIERvdDIsIERvdDEgLSBEb3Q0LCBEb3Q1LCBEb3Q2LCBEb3Q4Lgorbm90ZSAqIFRoZSBzcGFjZSBiYXIgaXMgaW4gZnJvbnQgb2YgdGhlIGJyYWlsbGUgY2VsbHMuCitub3RlICogT24gc29tZSBtb2RlbHMsIHRoZSBlaWdodCBkb3Qga2V5cyBhcmUgaW4gYSBzdHJhaWdodCBsaW5lCitub3RlICogYmVoaW5kIHRoZSBzcGFjZSBiYXIgYnV0IGluIGZyb250IG9mIHRoZSBicmFpbGxlIGNlbGxzLgorCitub3RlIFRoZSBsZWZ0IGFuZCByaWdodCBzaGlmdCBrZXlzIGFyZSBzcXVhcmlzaC4KK25vdGUgKiBPbiBzb21lIG1vZGVscywgdGhleSdyZSBhdCB0aGUgY2VudGVyIG9mIHRoZSBmcm9udC4KK25vdGUgKiBPbiBvdGhlcnMsIHRoZXkncmUgb24gZWl0aGVyIHNpZGUgb2YgdGhlIHNwYWNlIGJhci4KKworbWFwIERvdDEgRE9UMQorbWFwIERvdDIgRE9UMgorbWFwIERvdDMgRE9UMworbWFwIERvdDQgRE9UNAorbWFwIERvdDUgRE9UNQorbWFwIERvdDYgRE9UNgorbWFwIERvdDcgRE9UNworbWFwIERvdDggRE9UOAorCittYXAgU3BhY2UgU1BBQ0UKK21hcCBMZWZ0U2hpZnQgQ09OVFJPTAorbWFwIFJpZ2h0U2hpZnQgTUVUQQorCithc3NpZ24gY2hvcmQgU3BhY2UrCitpbmNsdWRlIC4uL2Nob3Jkcy5rdGkKKworYmluZCBTcGFjZStSb3V0aW5nS2V5IEtFWV9GVU5DVElPTgorYmluZCBMZWZ0U2hpZnQrUm91dGluZ0tleSBTRVRMRUZUCitiaW5kIFJpZ2h0U2hpZnQrUm91dGluZ0tleSBTV0lUQ0hWVAorCmRpZmYgLS1naXQgYS9UYWJsZXMvSW5wdXQvZnMvcGFjbWF0ZS5rdGIgYi9UYWJsZXMvSW5wdXQvZnMvcGFjbWF0ZS5rdGIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTQ1OWZjNQotLS0gL2Rldi9udWxsCisrKyBiL1RhYmxlcy9JbnB1dC9mcy9wYWNtYXRlLmt0YgpAQCAtMCwwICsxLDQ2IEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisjICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorIworIyBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisjCisjIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisjCisjIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyMgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorIyBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyMKKyMgV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworIworIyBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKwordGl0bGUgRnJlZWRvbVNjaWVudGlmaWMgUEFDIE1hdGUKKworbm90ZSBUaGUgcmVhciByb3cgb2YgY3Vyc29yIHJvdXRpbmcga2V5cyBpcyBhY3R1YWxseSBhIHNldCBvZiBuYXZpZ2F0aW9uIGtleXMuCitub3RlIFRoZSAxMCBtaWRkbGUga2V5cyAoNSBvbiBlYWNoIHNpZGUgb2YgdGhlIGNlbnRlcikgYXJlIHNwZWNpYWwuCitub3RlIFRoZSB0d28gb3V0ZXIgb25lcyBhcmUgbmFtZWQgTGVmdFNlbGVjdG9yIGFuZCBSaWdodFNlbGVjdG9yLgorbm90ZSBUaGUgZWlnaHQgaW5uZXIgb25lcyBhcmUgbmFtZWQgSG90MSB0aHJvdWdoIEhvdDguCitub3RlIFRoZSBQYW5MZWZ0IGtleSBpcyBhbnkga2V5IHRvIHRoZSBsZWZ0IG9mIHRoZSBzcGVjaWFsIGtleXMuCitub3RlIFRoZSBQYW5SaWdodCBrZXkgaXMgYW55IGtleSB0byB0aGUgcmlnaHQgb2YgdGhlIHNwZWNpYWwga2V5cy4KKworYmluZCBIb3QxIFNLUElETE5TCitiaW5kIFJpZ2h0U2VsZWN0b3IrSG90MSBTS1BCTE5LV0lOUworYmluZCBIb3QyIERJU1BNRAorYmluZCBSaWdodFNlbGVjdG9yK0hvdDIgQVRUUlZJUworYmluZCBIb3QzIENTUlRSSworYmluZCBSaWdodFNlbGVjdG9yK0hvdDMgQ1NSVklTCitiaW5kIEhvdDQgU0lYRE9UUworYmluZCBSaWdodFNlbGVjdG9yK0hvdDQgQVVUT1JFUEVBVAorYmluZCBIb3Q1IEhFTFAKK2JpbmQgUmlnaHRTZWxlY3RvcitIb3Q1IEZSRUVaRQorYmluZCBIb3Q2IExFQVJOCitiaW5kIFJpZ2h0U2VsZWN0b3IrSG90NiBQUkVGTE9BRAorYmluZCBIb3Q3IFBSRUZNRU5VCitiaW5kIFJpZ2h0U2VsZWN0b3IrSG90NyBQUkVGU0FWRQorYmluZCBIb3Q4IElORk8KK2JpbmQgUmlnaHRTZWxlY3RvcitIb3Q4IENTUkpNUF9WRVJUCisKK2Fzc2lnbiBuYXZLZXlUeXBlIFdoZWVsCitpbmNsdWRlIGNvbW1vbi5rdGkKZGlmZiAtLWdpdCBhL1RhYmxlcy9JbnB1dC9mcy9yb2NrZXJzLmt0aSBiL1RhYmxlcy9JbnB1dC9mcy9yb2NrZXJzLmt0aQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MDUwZTk3Ci0tLSAvZGV2L251bGwKKysrIGIvVGFibGVzL0lucHV0L2ZzL3JvY2tlcnMua3RpCkBAIC0wLDAgKzEsNTggQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyMgICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisjCisjIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyMKKyMgQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjIFRoaXMga2V5IHN1YnRhYmxlIGlzIGZvciBGcmVlZG9tU2NpZW50aWZpYyBkaXNwbGF5cyB3aGljaCBoYXZlIHJvY2tlcnMuCisKK25vdGUgVGhlIGxlZnQgYW5kIHJpZ2h0IHJvY2tlcnMgYXJlIHNob3J0LCB1cC9kb3duLCByb2NrZXIga2V5cy4KKworYmluZCBMZWZ0Um9ja2VyVXAgS0VZX0NVUlNPUl9VUAorYmluZCBMZWZ0Um9ja2VyRG93biBLRVlfQ1VSU09SX0RPV04KKworYmluZCBMZWZ0Um9ja2VyVXArUGFuTGVmdCBLRVlfQ1VSU09SX0xFRlQKK2JpbmQgTGVmdFJvY2tlckRvd24rUGFuTGVmdCBLRVlfQ1VSU09SX1JJR0hUCisKK2JpbmQgTGVmdFJvY2tlclVwK0xlZnRTZWxlY3RvciBLRVlfSE9NRQorYmluZCBMZWZ0Um9ja2VyRG93bitMZWZ0U2VsZWN0b3IgS0VZX0VORAorCitiaW5kIExlZnRSb2NrZXJVcCtSaWdodFNlbGVjdG9yIEtFWV9QQUdFX1VQCitiaW5kIExlZnRSb2NrZXJEb3duK1JpZ2h0U2VsZWN0b3IgS0VZX1BBR0VfRE9XTgorCitiaW5kIExlZnRSb2NrZXJVcCtQYW5SaWdodCBDU1JUUksrb2ZmCitiaW5kIExlZnRSb2NrZXJEb3duK1BhblJpZ2h0IENTUlRSSytvbgorCitiaW5kIFJpZ2h0Um9ja2VyVXAgTE5VUAorYmluZCBSaWdodFJvY2tlckRvd24gTE5ETgorCitiaW5kIFJpZ2h0Um9ja2VyVXArUGFuTGVmdCBMTkJFRworYmluZCBSaWdodFJvY2tlckRvd24rUGFuTGVmdCBMTkVORAorCitiaW5kIFJpZ2h0Um9ja2VyVXArTGVmdFNlbGVjdG9yIFBSU0VBUkNICitiaW5kIFJpZ2h0Um9ja2VyRG93bitMZWZ0U2VsZWN0b3IgTlhTRUFSQ0gKKworYmluZCBSaWdodFJvY2tlclVwK1JpZ2h0U2VsZWN0b3IgQVRUUlVQCitiaW5kIFJpZ2h0Um9ja2VyRG93bitSaWdodFNlbGVjdG9yIEFUVFJETgorCitiaW5kIFJpZ2h0Um9ja2VyVXArUGFuUmlnaHQgU0lYRE9UUytvZmYKK2JpbmQgUmlnaHRSb2NrZXJEb3duK1BhblJpZ2h0IFNJWERPVFMrb24KKworYmluZCBSaWdodFJvY2tlclVwK1JvdXRpbmdLZXkgU0VUTUFSSworYmluZCBSaWdodFJvY2tlckRvd24rUm91dGluZ0tleSBHT1RPTUFSSworCitiaW5kIExlZnRSb2NrZXJVcCtSaWdodFJvY2tlclVwIElORk8KK2JpbmQgTGVmdFJvY2tlckRvd24rUmlnaHRSb2NrZXJEb3duIFRJTUUKKwpkaWZmIC0tZ2l0IGEvVGFibGVzL0lucHV0L2ZzL3NwZWVjaC5rdGkgYi9UYWJsZXMvSW5wdXQvZnMvc3BlZWNoLmt0aQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYmRkODIwCi0tLSAvZGV2L251bGwKKysrIGIvVGFibGVzL0lucHV0L2ZzL3NwZWVjaC5rdGkKQEAgLTAsMCArMSw1MyBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorIyAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyMKKyMgQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorIworIyBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorIworIyBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisjIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyMgbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisjCisjIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK2JpbmQgUGFuTGVmdCtTcGFjZSBTUEVBS19DVVJSX0NIQVI6REVTQ19DVVJSX0NIQVIKK2JpbmQgUGFuTGVmdCtMZWZ0U2hpZnQgU1BFQUtfUFJFVl9DSEFSCitiaW5kIFBhbkxlZnQrUmlnaHRTaGlmdCBTUEVBS19ORVhUX0NIQVIKK2JpbmQgUGFuTGVmdCtMZWZ0U2hpZnQrU3BhY2UgU1BFQUtfRlJTVF9DSEFSCitiaW5kIFBhbkxlZnQrUmlnaHRTaGlmdCtTcGFjZSBTUEVBS19MQVNUX0NIQVIKKworYmluZCBMZWZ0U2VsZWN0b3IrU3BhY2UgU1BFQUtfQ1VSUl9XT1JEOlNQRUxMX0NVUlJfV09SRAorYmluZCBMZWZ0U2VsZWN0b3IrTGVmdFNoaWZ0IFNQRUFLX1BSRVZfV09SRAorYmluZCBMZWZ0U2VsZWN0b3IrUmlnaHRTaGlmdCBTUEVBS19ORVhUX1dPUkQKK2JpbmQgTGVmdFNlbGVjdG9yK0xlZnRTaGlmdCtTcGFjZSBTUEVBS19DVVJSX0xPQ04KK2JpbmQgTGVmdFNlbGVjdG9yK1JpZ2h0U2hpZnQrU3BhY2UgUk9VVEVfQ1VSUl9MT0NOCisKK2JpbmQgUmlnaHRTZWxlY3RvcitTcGFjZSBTUEVBS19DVVJSX0xJTkUKK2JpbmQgUmlnaHRTZWxlY3RvcitMZWZ0U2hpZnQgU1BFQUtfUFJFVl9MSU5FCitiaW5kIFJpZ2h0U2VsZWN0b3IrUmlnaHRTaGlmdCBTUEVBS19ORVhUX0xJTkUKK2JpbmQgUmlnaHRTZWxlY3RvcitMZWZ0U2hpZnQrU3BhY2UgU1BFQUtfRlJTVF9MSU5FCitiaW5kIFJpZ2h0U2VsZWN0b3IrUmlnaHRTaGlmdCtTcGFjZSBTUEVBS19MQVNUX0xJTkUKKworYmluZCBQYW5SaWdodCtTcGFjZSBBVVRPU1BFQUsKK2JpbmQgUGFuUmlnaHQrTGVmdFNoaWZ0IE1VVEUKK2JpbmQgUGFuUmlnaHQrUmlnaHRTaGlmdCBTQVlfTElORQorCitiaW5kIFBhblJpZ2h0K0xlZnRTaGlmdCtTcGFjZSBTQVlfQUJPVkUKK2JpbmQgUGFuUmlnaHQrUmlnaHRTaGlmdCtTcGFjZSBTQVlfQkVMT1cKK2JpbmQgUGFuUmlnaHQrTGVmdFNoaWZ0K1JpZ2h0U2hpZnQrU3BhY2UgU0FZX0FMTAorCitiaW5kIFNwYWNlK0xlZnRce25hdktleVR5cGV9RG93biBTQVlfU09GVEVSCitiaW5kIFNwYWNlK0xlZnRce25hdktleVR5cGV9VXAgU0FZX0xvdWRlcgorCitiaW5kIExlZnRTaGlmdCtMZWZ0XHtuYXZLZXlUeXBlfURvd24gU0FZX1NMT1dFUgorYmluZCBMZWZ0U2hpZnQrTGVmdFx7bmF2S2V5VHlwZX1VcCBTQVlfRkFTVEVSCisKK2JpbmQgUmlnaHRTaGlmdCtMZWZ0XHtuYXZLZXlUeXBlfURvd24gU0FZX0xPV0VSCitiaW5kIFJpZ2h0U2hpZnQrTGVmdFx7bmF2S2V5VHlwZX1VcCBTQVlfSElHSEVSCisKZGlmZiAtLWdpdCBhL1RhYmxlcy9JbnB1dC9oZC9tYmwua3RiIGIvVGFibGVzL0lucHV0L2hkL21ibC5rdGIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2IxZDE0MQotLS0gL2Rldi9udWxsCisrKyBiL1RhYmxlcy9JbnB1dC9oZC9tYmwua3RiCkBAIC0wLDAgKzEsMTE1IEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisjICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorIworIyBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisjCisjIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisjCisjIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyMgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorIyBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyMKKyMgV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworIworIyBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKwordGl0bGUgSGVkbyBNb2JpbExpbmUKKworbm90ZSBUaGUga2V5cyBiZWhpbmQgdGhlIHRleHQgY2VsbHMgYXJlIG5hbWVkIHJvdXRpbmcga2V5cy4KK25vdGUgVGhlIHJlY3Rhbmd1bGFyIG5hdmlnYXRpb24ga2V5cyBhcmUgbmFtZWQgSzEgdGhyb3VnaCBLMy4KK25vdGUgVGhlIHNxdWFyZSBuYXZpZ2F0aW9uIGtleXMgYXJlIG5hbWVkIEIxIHRocm91Z2ggQjYuCitub3RlIEZyb20gbGVmdCB0byByaWdodCwgdGhlIG5hdmlnYXRpb24ga2V5cyBhcmU6IEIzIEIyIEIxIEsxIEsyIEszIEI0IEI1IEI2CisKK2JpbmQgSzIrSzEgSEVMUAorYmluZCBLMitLMyBMRUFSTgorCitiaW5kIEsxK0szIFBSRUZNRU5VCitiaW5kIEsxK0szK0IxIFBSRUZMT0FECitiaW5kIEsxK0szK0I0IFBSRUZTQVZFCisKK2JpbmQgSzIgSE9NRQorYmluZCBLMSBGV0lOTFQKK2JpbmQgSzMgRldJTlJUCisKK2JpbmQgQjMgVE9QCitiaW5kIEI2IEJPVAorCitiaW5kIEIyIExOVVAKK2JpbmQgQjUgTE5ETgorCitiaW5kIEIxIFBSRElGTE4KK2JpbmQgQjQgTlhESUZMTgorCitiaW5kIEIxK0IzIEFUVFJVUAorYmluZCBCNCtCNiBBVFRSRE4KKworYmluZCBCMStCMiBQUlBHUlBICitiaW5kIEI0K0I1IE5YUEdSUEgKKworYmluZCBCMitCMyBQUlBST01QVAorYmluZCBCNStCNiBOWFBST01QVAorCitiaW5kIEIxK0IyK0IzIFBSU0VBUkNICitiaW5kIEI0K0I1K0I2IE5YU0VBUkNICisKK2JpbmQgQjErSzEgQ0hSTFQKK2JpbmQgQjErSzMgQ0hSUlQKKworYmluZCBCMitLMSBGV0lOTFRTS0lQCitiaW5kIEIyK0szIEZXSU5SVFNLSVAKKworYmluZCBCMytLMSBMTkJFRworYmluZCBCMytLMyBMTkVORAorCitiaW5kIEI0K0sxIFBBU1RFCitiaW5kIEI0K0szIENTUkpNUF9WRVJUCisKK2JpbmQgQjUrSzEgVElNRQorYmluZCBCNStLMyBJTkZPCisKK2JpbmQgQjYrSzEgQ0xJUF9SRVNUT1JFCitiaW5kIEI2K0szIENMSVBfU0FWRQorCithc3NpZ24gdG9nZ2xlT2ZmIEsxCithc3NpZ24gdG9nZ2xlT24gSzMKKworYXNzaWduIHRvZ2dsZUtleXMgQjErSzIKK2Fzc2lnbiB0b2dnbGVDb21tYW5kIFNJWERPVFMKK2luY2x1ZGUgLi4vdG9nZ2xlLmt0aQorCithc3NpZ24gdG9nZ2xlS2V5cyBCMitLMgorYXNzaWduIHRvZ2dsZUNvbW1hbmQgQ1NSVFJLCitpbmNsdWRlIC4uL3RvZ2dsZS5rdGkKKworYXNzaWduIHRvZ2dsZUtleXMgQjMrSzIKK2Fzc2lnbiB0b2dnbGVDb21tYW5kIERJU1BNRAoraW5jbHVkZSAuLi90b2dnbGUua3RpCisKK2Fzc2lnbiB0b2dnbGVLZXlzIEI0K0syCithc3NpZ24gdG9nZ2xlQ29tbWFuZCBGUkVFWkUKK2luY2x1ZGUgLi4vdG9nZ2xlLmt0aQorCithc3NpZ24gdG9nZ2xlS2V5cyBCNStLMgorYXNzaWduIHRvZ2dsZUNvbW1hbmQgQ1NSVklTCitpbmNsdWRlIC4uL3RvZ2dsZS5rdGkKKworYXNzaWduIHRvZ2dsZUtleXMgQjYrSzIKK2Fzc2lnbiB0b2dnbGVDb21tYW5kIEFUVFJWSVMKK2luY2x1ZGUgLi4vdG9nZ2xlLmt0aQorCitiaW5kIFJvdXRpbmdLZXkgUk9VVEUKKworYmluZCBCMytSb3V0aW5nS2V5IENMSVBfTkVXCitiaW5kIEIyK1JvdXRpbmdLZXkgQ0xJUF9BREQKK2JpbmQgQjUrUm91dGluZ0tleSBDT1BZX1JFQ1QKK2JpbmQgQjYrUm91dGluZ0tleSBDT1BZX0xJTkUKKworYmluZCBCMStSb3V0aW5nS2V5IFBSSU5ERU5UCitiaW5kIEI0K1JvdXRpbmdLZXkgTlhJTkRFTlQKKworYmluZCBLMStSb3V0aW5nS2V5IFNFVExFRlQKK2JpbmQgSzIrUm91dGluZ0tleSBERVNDQ0hBUgorCmRpZmYgLS1naXQgYS9UYWJsZXMvSW5wdXQvaGQvcGZsLmt0YiBiL1RhYmxlcy9JbnB1dC9oZC9wZmwua3RiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ4MjJjNDQKLS0tIC9kZXYvbnVsbAorKysgYi9UYWJsZXMvSW5wdXQvaGQvcGZsLmt0YgpAQCAtMCwwICsxLDExOCBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorIyAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyMKKyMgQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorIworIyBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorIworIyBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisjIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyMgbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisjCisjIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK3RpdGxlIEhlZG8gUHJvZmlMaW5lCisKK25vdGUgVGhlIGtleXMgYmVoaW5kIHRoZSB0ZXh0IGNlbGxzIGFyZSBuYW1lZCByb3V0aW5nIGtleXMuCitub3RlIFRoZSByZWN0YW5ndWxhciBuYXZpZ2F0aW9uIGtleXMgYXJlIG5hbWVkIEsxIHRocm91Z2ggSzMuCitub3RlIFRoZSBzcXVhcmUgbmF2aWdhdGlvbiBrZXlzIGFyZSBuYW1lZCBCMSB0aHJvdWdoIEI4Lgorbm90ZSBGcm9tIGxlZnQgdG8gcmlnaHQsIHRoZSBuYXZpZ2F0aW9uIGtleXMgYXJlOiBLMSBCNyBCMyBCMiBCMSBLMSBLMiBLMyBCNCBCNSBCNiBCOCBLMworbm90ZSBCb3RoIEsxIGtleXMgYXJlIGhhcmQtd2lyZWQgdG9nZXRoZXIuCitub3RlIEJvdGggSzMga2V5cyBhcmUgaGFyZC13aXJlZCB0b2dldGhlci4KK25vdGUgVGhlIEsyIGFuZCBCMSBrZXlzIGFyZSBoYXJkLXdpcmVkIHRvZ2V0aGVyLgorCitiaW5kIEsyK0sxIEhFTFAKK2JpbmQgSzIrSzMgTEVBUk4KKworYmluZCBLMStLMyBQUkVGTUVOVQorYmluZCBLMStLMytCMiBQUkVGTE9BRAorYmluZCBLMStLMytCNSBQUkVGU0FWRQorCitiaW5kIEsyIEhPTUUKK2JpbmQgSzEgRldJTkxUCitiaW5kIEszIEZXSU5SVAorCitiaW5kIEI3IFRPUAorYmluZCBCOCBCT1QKKworYmluZCBCMyBMTlVQCitiaW5kIEI2IExORE4KKworYmluZCBCMiBQUkRJRkxOCitiaW5kIEI1IE5YRElGTE4KKworYmluZCBCMitCNyBBVFRSVVAKK2JpbmQgQjUrQjggQVRUUkROCisKK2JpbmQgQjIrQjMgUFJQR1JQSAorYmluZCBCNStCNiBOWFBHUlBICisKK2JpbmQgQjMrQjcgUFJQUk9NUFQKK2JpbmQgQjYrQjggTlhQUk9NUFQKKworYmluZCBCMitCMytCNyBQUlNFQVJDSAorYmluZCBCNStCNitCOCBOWFNFQVJDSAorCitiaW5kIEIyK0sxIENIUkxUCitiaW5kIEIyK0szIENIUlJUCisKK2JpbmQgQjMrSzEgRldJTkxUU0tJUAorYmluZCBCMytLMyBGV0lOUlRTS0lQCisKK2JpbmQgQjcrSzEgTE5CRUcKK2JpbmQgQjcrSzMgTE5FTkQKKworYmluZCBCNStLMSBQQVNURQorYmluZCBCNStLMyBDU1JKTVBfVkVSVAorCitiaW5kIEI2K0sxIFRJTUUKK2JpbmQgQjYrSzMgSU5GTworCitiaW5kIEI4K0sxIENMSVBfUkVTVE9SRQorYmluZCBCOCtLMyBDTElQX1NBVkUKKworYXNzaWduIHRvZ2dsZU9mZiBLMQorYXNzaWduIHRvZ2dsZU9uIEszCisKK2Fzc2lnbiB0b2dnbGVLZXlzIEIyK0syCithc3NpZ24gdG9nZ2xlQ29tbWFuZCBTSVhET1RTCitpbmNsdWRlIC4uL3RvZ2dsZS5rdGkKKworYXNzaWduIHRvZ2dsZUtleXMgQjMrSzIKK2Fzc2lnbiB0b2dnbGVDb21tYW5kIENTUlRSSworaW5jbHVkZSAuLi90b2dnbGUua3RpCisKK2Fzc2lnbiB0b2dnbGVLZXlzIEI3K0syCithc3NpZ24gdG9nZ2xlQ29tbWFuZCBESVNQTUQKK2luY2x1ZGUgLi4vdG9nZ2xlLmt0aQorCithc3NpZ24gdG9nZ2xlS2V5cyBCNStLMgorYXNzaWduIHRvZ2dsZUNvbW1hbmQgRlJFRVpFCitpbmNsdWRlIC4uL3RvZ2dsZS5rdGkKKworYXNzaWduIHRvZ2dsZUtleXMgQjYrSzIKK2Fzc2lnbiB0b2dnbGVDb21tYW5kIENTUlZJUworaW5jbHVkZSAuLi90b2dnbGUua3RpCisKK2Fzc2lnbiB0b2dnbGVLZXlzIEI4K0syCithc3NpZ24gdG9nZ2xlQ29tbWFuZCBBVFRSVklTCitpbmNsdWRlIC4uL3RvZ2dsZS5rdGkKKworYmluZCBSb3V0aW5nS2V5IFJPVVRFCisKK2JpbmQgQjcrUm91dGluZ0tleSBDTElQX05FVworYmluZCBCMytSb3V0aW5nS2V5IENMSVBfQURECitiaW5kIEI2K1JvdXRpbmdLZXkgQ09QWV9SRUNUCitiaW5kIEI4K1JvdXRpbmdLZXkgQ09QWV9MSU5FCisKK2JpbmQgQjIrUm91dGluZ0tleSBQUklOREVOVAorYmluZCBCNStSb3V0aW5nS2V5IE5YSU5ERU5UCisKK2JpbmQgSzErUm91dGluZ0tleSBTRVRMRUZUCitiaW5kIEsyK1JvdXRpbmdLZXkgREVTQ0NIQVIKKwpkaWZmIC0tZ2l0IGEvVGFibGVzL0lucHV0L2htL2JlZXRsZS5rdGIgYi9UYWJsZXMvSW5wdXQvaG0vYmVldGxlLmt0YgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMWI0ZDhlCi0tLSAvZGV2L251bGwKKysrIGIvVGFibGVzL0lucHV0L2htL2JlZXRsZS5rdGIKQEAgLTAsMCArMSwyNCBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorIyAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyMKKyMgQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorIworIyBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorIworIyBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisjIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyMgbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisjCisjIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK3RpdGxlIEhJTVMgU21hcnQgQmVldGxlCisKK2luY2x1ZGUgY29tbW9uLmt0aQoraW5jbHVkZSBicmFpbGxlLmt0aQoraW5jbHVkZSBmMTQua3RpCitpbmNsdWRlIHBhbi5rdGkKZGlmZiAtLWdpdCBhL1RhYmxlcy9JbnB1dC9obS9icmFpbGxlLmt0aSBiL1RhYmxlcy9JbnB1dC9obS9icmFpbGxlLmt0aQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYzU2YjhjCi0tLSAvZGV2L251bGwKKysrIGIvVGFibGVzL0lucHV0L2htL2JyYWlsbGUua3RpCkBAIC0wLDAgKzEsMzcgQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyMgICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisjCisjIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyMKKyMgQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCittYXAgRG90MSBET1QxCittYXAgRG90MiBET1QyCittYXAgRG90MyBET1QzCittYXAgRG90NCBET1Q0CittYXAgRG90NSBET1Q1CittYXAgRG90NiBET1Q2CittYXAgRG90NyBET1Q3CittYXAgRG90OCBET1Q4CittYXAgU3BhY2UgU1BBQ0UKKworYXNzaWduRGVmYXVsdCBtZXRhTW9kaWZpZXIgRjIKK21hcCBce21ldGFNb2RpZmllcn0gTUVUQQorCithc3NpZ25EZWZhdWx0IGNvbnRyb2xNb2RpZmllciBGMworbWFwIFx7Y29udHJvbE1vZGlmaWVyfSBDT05UUk9MCisKK2Fzc2lnbiBjaG9yZCBTcGFjZSsKK2luY2x1ZGUgLi4vY2hvcmRzLmt0aQorCmRpZmYgLS1naXQgYS9UYWJsZXMvSW5wdXQvaG0vY29tbW9uLmt0aSBiL1RhYmxlcy9JbnB1dC9obS9jb21tb24ua3RpCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIyMTkzNTMKLS0tIC9kZXYvbnVsbAorKysgYi9UYWJsZXMvSW5wdXQvaG0vY29tbW9uLmt0aQpAQCAtMCwwICsxLDE5IEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisjICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorIworIyBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisjCisjIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisjCisjIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyMgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorIyBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyMKKyMgV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworIworIyBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworYmluZCBSb3V0aW5nS2V5IFJPVVRFCmRpZmYgLS1naXQgYS9UYWJsZXMvSW5wdXQvaG0vY29udGV4dHMua3RpIGIvVGFibGVzL0lucHV0L2htL2NvbnRleHRzLmt0aQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZTJmNGFiCi0tLSAvZGV2L251bGwKKysrIGIvVGFibGVzL0lucHV0L2htL2NvbnRleHRzLmt0aQpAQCAtMCwwICsxLDQzIEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisjICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorIworIyBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisjCisjIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisjCisjIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyMgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorIyBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyMKKyMgV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworIworIyBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBSb3V0aW5nIEtleSBBbHRlcm5hdGl2ZXMgIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitjb250ZXh0IENMSVBfTkVXCitiaW5kICFSb3V0aW5nS2V5IENMSVBfTkVXCisKK2NvbnRleHQgQ0xJUF9BREQKK2JpbmQgIVJvdXRpbmdLZXkgQ0xJUF9BREQKKworY29udGV4dCBDT1BZX0xJTkUKK2JpbmQgIVJvdXRpbmdLZXkgQ09QWV9MSU5FCisKK2NvbnRleHQgQ09QWV9SRUNUCitiaW5kICFSb3V0aW5nS2V5IENPUFlfUkVDVAorCitjb250ZXh0IFNFVExFRlQKK2JpbmQgIVJvdXRpbmdLZXkgU0VUTEVGVAorCitjb250ZXh0IERFU0NDSEFSCitiaW5kICFSb3V0aW5nS2V5IERFU0NDSEFSCisKK2NvbnRleHQgS0VZX0ZVTkNUSU9OCitiaW5kIFJvdXRpbmdLZXkgS0VZX0ZVTkNUSU9OCisKZGlmZiAtLWdpdCBhL1RhYmxlcy9JbnB1dC9obS9lZGdlLmt0YiBiL1RhYmxlcy9JbnB1dC9obS9lZGdlLmt0YgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YmMzNzRkCi0tLSAvZGV2L251bGwKKysrIGIvVGFibGVzL0lucHV0L2htL2VkZ2Uua3RiCkBAIC0wLDAgKzEsNDQgQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyMgICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisjCisjIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyMKKyMgQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCit0aXRsZSBISU1TIEJyYWlsbGUgRWRnZSBhbmQgUUJyYWlsbGVYTAorCitpbmNsdWRlIGNvbW1vbi5rdGkKK2luY2x1ZGUgc2Nyb2xsLmt0aQoraW5jbHVkZSBsZWZ0Lmt0aQoraW5jbHVkZSByaWdodC5rdGkKK2luY2x1ZGUgZjE4Lmt0aQoraW5jbHVkZSBjb250ZXh0cy5rdGkKKworYXNzaWduIG1ldGFNb2RpZmllciBGNAorYXNzaWduIGNvbnRyb2xNb2RpZmllciBGNQoraW5jbHVkZSBicmFpbGxlLmt0aQorCisKK2NvbnRleHQgUFJESUZDSEFSCitiaW5kIFJvdXRpbmdLZXkgUFJESUZDSEFSCisKK2NvbnRleHQgTlhESUZDSEFSCitiaW5kIFJvdXRpbmdLZXkgTlhESUZDSEFSCisKK2NvbnRleHQgUFJJTkRFTlQKK2JpbmQgUm91dGluZ0tleSBQUklOREVOVAorCitjb250ZXh0IE5YSU5ERU5UCitiaW5kIFJvdXRpbmdLZXkgTlhJTkRFTlQKKwpkaWZmIC0tZ2l0IGEvVGFibGVzL0lucHV0L2htL2YxNC5rdGkgYi9UYWJsZXMvSW5wdXQvaG0vZjE0Lmt0aQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MjQ1OGZjCi0tLSAvZGV2L251bGwKKysrIGIvVGFibGVzL0lucHV0L2htL2YxNC5rdGkKQEAgLTAsMCArMSwzOCBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorIyAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyMKKyMgQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorIworIyBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorIworIyBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisjIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyMgbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisjCisjIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK2JpbmQgRjQgUkVUVVJOCitiaW5kIEYxK0Y0IENPTlRFWFQrS0VZX0ZVTkNUSU9OCitiaW5kIEYyK0YzIENTUkpNUF9WRVJUCisKK2JpbmQgRjIgTE5VUAorYmluZCBGMyBMTkROCisKK2JpbmQgRjErRjIgRldJTkxUU0tJUAorYmluZCBGMytGNCBGV0lOUlRTS0lQCisKK2JpbmQgRjErRjMrRjQgQ09OVEVYVCtDTElQX05FVworYmluZCBGMitGMytGNCBDT05URVhUK0NMSVBfQURECitiaW5kIEYxK0YyK0YzIENPTlRFWFQrQ09QWV9MSU5FCitiaW5kIEYxK0YyK0Y0IENPTlRFWFQrQ09QWV9SRUNUCitiaW5kIEYxK0YyK0YzK0Y0IFBBU1RFCisKK2JpbmQgRjErRjMgQ09OVEVYVCtTRVRMRUZUCitiaW5kIEYyK0Y0IENPTlRFWFQrREVTQ0NIQVIKKworaW5jbHVkZSBjb250ZXh0cy5rdGkKZGlmZiAtLWdpdCBhL1RhYmxlcy9JbnB1dC9obS9mMTgua3RpIGIvVGFibGVzL0lucHV0L2htL2YxOC5rdGkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDhmYzYyYQotLS0gL2Rldi9udWxsCisrKyBiL1RhYmxlcy9JbnB1dC9obS9mMTgua3RpCkBAIC0wLDAgKzEsNDEgQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyMgICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisjCisjIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyMKKyMgQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitiaW5kIEYxIFBSUFJPTVBUCitiaW5kIEYyIE5YUFJPTVBUCitiaW5kIEYzIFBSUEdSUEgKK2JpbmQgRjQgTlhQR1JQSAorCitiaW5kIEY1IExFQVJOCitiaW5kIEY2IFRJTUUKK2JpbmQgRjcgQ0hSTFQKK2JpbmQgRjggQ0hSUlQKKworYmluZCBTcGFjZStGMSBCUkxLQkQKK2JpbmQgU3BhY2UrRjIgQlJMVUNET1RTCitiaW5kIFNwYWNlK0YzIFNLUElETE5TCitiaW5kIFNwYWNlK0Y0IENPTlRFWFQrS0VZX0ZVTkNUSU9OCisKK2JpbmQgU3BhY2UrRjUgQ09OVEVYVCtTV0lUQ0hWVAorYmluZCBTcGFjZStGNiBTS1BCTE5LV0lOUworYmluZCBTcGFjZStGNyBBVFRSVklTCitiaW5kIFNwYWNlK0Y4IENTUlZJUworCitjb250ZXh0IFNXSVRDSFZUCitiaW5kIFJvdXRpbmdLZXkgU1dJVENIVlQKKwpkaWZmIC0tZ2l0IGEvVGFibGVzL0lucHV0L2htL2Zua2V5Lmt0aSBiL1RhYmxlcy9JbnB1dC9obS9mbmtleS5rdGkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2EyYzI2ZAotLS0gL2Rldi9udWxsCisrKyBiL1RhYmxlcy9JbnB1dC9obS9mbmtleS5rdGkKQEAgLTAsMCArMSw0OSBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorIyAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyMKKyMgQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorIworIyBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorIworIyBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisjIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyMgbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisjCisjIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK25vdGUgRnVuY3Rpb24gS2V5IEJpbmRpbmdzCitub3RlICsgRnVuY3Rpb24tYjogc2tpcCBibGFuayB3aW5kb3dzIG9uL29mZgorbm90ZSArIEZ1bmN0aW9uLWM6IGN1cnNvciBzaG93L2hpZGUKK25vdGUgKyBGdW5jdGlvbi1kOiBkaXNwbGF5IG1vZGUgYXR0cmlidXRlcy90ZXh0Citub3RlICsgRnVuY3Rpb24tZjogc2NyZWVuIGltYWdlIGZyb3plbi91bmZyb3plbgorbm90ZSArIEZ1bmN0aW9uLWg6IGhlbHAgc2NyZWVuIGVudGVyL2xlYXZlCitub3RlICsgRnVuY3Rpb24taTogc2tpcCBpZGVudGljYWwgbGluZXMgb24vb2ZmCitub3RlICsgRnVuY3Rpb24tbDogbGVhcm4gbW9kZSBlbnRlci9sZWF2ZQorbm90ZSArIEZ1bmN0aW9uLXA6IHByZWZlcmVuY2VzIG1lbnUgZW50ZXIvbGVhdmUKK25vdGUgKyBGdW5jdGlvbi1zOiBzdGF0dXMgbGluZSBlbnRlci9sZWF2ZQorbm90ZSArIEZ1bmN0aW9uLXQ6IGN1cnNvciB0cmFja2luZyBvbi9vZmYKK25vdGUgKyBGdW5jdGlvbi11OiBoaWdobGlnaHQgdW5kZXJsaW5lIG9uL29mZgorbm90ZSArIEZ1bmN0aW9uLXY6IGJyaW5nIGN1cnNvciB0byBjdXJyZW50IGxpbmUKK25vdGUgKyBGdW5jdGlvbi13OiBzbGlkaW5nIHdpbmRvdyBvbi9vZmYKKworaGlkZSBvbgorYXNzaWduIGZ1bmN0aW9uIEYyK1NwYWNlCitiaW5kIFx7ZnVuY3Rpb259K0RvdDErRG90MiBTS1BCTE5LV0lOUworYmluZCBce2Z1bmN0aW9ufStEb3QxK0RvdDQgQ1NSVklTCitiaW5kIFx7ZnVuY3Rpb259K0RvdDErRG90NCtEb3Q1IERJU1BNRAorYmluZCBce2Z1bmN0aW9ufStEb3QxK0RvdDIrRG90NCBGUkVFWkUKK2JpbmQgXHtmdW5jdGlvbn0rRG90MStEb3QyK0RvdDUgSEVMUAorYmluZCBce2Z1bmN0aW9ufStEb3QyK0RvdDQgU0tQSURMTlMKK2JpbmQgXHtmdW5jdGlvbn0rRG90MStEb3QyK0RvdDMgTEVBUk4KK2JpbmQgXHtmdW5jdGlvbn0rRG90MStEb3QyK0RvdDMrRG90NCBQUkVGTUVOVQorYmluZCBce2Z1bmN0aW9ufStEb3QyK0RvdDMrRG90NCBJTkZPCitiaW5kIFx7ZnVuY3Rpb259K0RvdDIrRG90MytEb3Q0K0RvdDUgQ1NSVFJLCitiaW5kIFx7ZnVuY3Rpb259K0RvdDErRG90MytEb3Q2IEFUVFJWSVMKK2JpbmQgXHtmdW5jdGlvbn0rRG90MStEb3QyK0RvdDMrRG90NiBDU1JKTVBfVkVSVAorYmluZCBce2Z1bmN0aW9ufStEb3QyK0RvdDQrRG90NStEb3Q2IFNMSURFV0lOCitoaWRlIG9mZgpkaWZmIC0tZ2l0IGEvVGFibGVzL0lucHV0L2htL2xlZnQua3RpIGIvVGFibGVzL0lucHV0L2htL2xlZnQua3RpCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAyNjIxZDQKLS0tIC9kZXYvbnVsbAorKysgYi9UYWJsZXMvSW5wdXQvaG0vbGVmdC5rdGkKQEAgLTAsMCArMSwzMiBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorIyAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyMKKyMgQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorIworIyBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorIworIyBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisjIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyMgbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisjCisjIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK2JpbmQgTGVmdFBhZExlZnQrTGVmdFBhZFJpZ2h0IENTUkpNUF9WRVJUCitiaW5kIExlZnRQYWRVcCtMZWZ0UGFkRG93biBDT05URVhUK1NFVExFRlQKKworYmluZCBMZWZ0UGFkVXAgQVRUUlVQCitiaW5kIExlZnRQYWREb3duIEFUVFJETgorYmluZCBMZWZ0UGFkTGVmdCBQUlNFQVJDSAorYmluZCBMZWZ0UGFkUmlnaHQgTlhTRUFSQ0gKKworYmluZCBMZWZ0UGFkTGVmdCtMZWZ0UGFkVXAgQ09OVEVYVCtQUkRJRkNIQVIKK2JpbmQgTGVmdFBhZExlZnQrTGVmdFBhZERvd24gQ09OVEVYVCtOWERJRkNIQVIKKworYmluZCBMZWZ0UGFkUmlnaHQrTGVmdFBhZFVwIENPTlRFWFQrUFJJTkRFTlQKK2JpbmQgTGVmdFBhZFJpZ2h0K0xlZnRQYWREb3duIENPTlRFWFQrTlhJTkRFTlQKKwpkaWZmIC0tZ2l0IGEvVGFibGVzL0lucHV0L2htL2xldHRlcnMua3RpIGIvVGFibGVzL0lucHV0L2htL2xldHRlcnMua3RpCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFjNzgyNmEKLS0tIC9kZXYvbnVsbAorKysgYi9UYWJsZXMvSW5wdXQvaG0vbGV0dGVycy5rdGkKQEAgLTAsMCArMSw0NCBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorIyAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyMKKyMgQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorIworIyBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorIworIyBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisjIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyMgbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisjCisjIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK2JpbmQgXHtrZXlzfURvdDEgUEFTU0RPVFNce2ZsYWdzfStkb3QxCitiaW5kIFx7a2V5c31Eb3QxK0RvdDIgUEFTU0RPVFNce2ZsYWdzfStkb3QxK2RvdDIKK2JpbmQgXHtrZXlzfURvdDErRG90NCBQQVNTRE9UU1x7ZmxhZ3N9K2RvdDErZG90NAorYmluZCBce2tleXN9RG90MStEb3Q0K0RvdDUgUEFTU0RPVFNce2ZsYWdzfStkb3QxK2RvdDQrZG90NQorYmluZCBce2tleXN9RG90MStEb3Q1IFBBU1NET1RTXHtmbGFnc30rZG90MStkb3Q1CitiaW5kIFx7a2V5c31Eb3QxK0RvdDIrRG90NCBQQVNTRE9UU1x7ZmxhZ3N9K2RvdDErZG90Mitkb3Q0CitiaW5kIFx7a2V5c31Eb3QxK0RvdDIrRG90NCtEb3Q1IFBBU1NET1RTXHtmbGFnc30rZG90MStkb3QyK2RvdDQrZG90NQorYmluZCBce2tleXN9RG90MStEb3QyK0RvdDUgUEFTU0RPVFNce2ZsYWdzfStkb3QxK2RvdDIrZG90NQorYmluZCBce2tleXN9RG90MitEb3Q0IFBBU1NET1RTXHtmbGFnc30rZG90Mitkb3Q0CitiaW5kIFx7a2V5c31Eb3QyK0RvdDQrRG90NSBQQVNTRE9UU1x7ZmxhZ3N9K2RvdDIrZG90NCtkb3Q1CitiaW5kIFx7a2V5c31Eb3QxK0RvdDMgUEFTU0RPVFNce2ZsYWdzfStkb3QxK2RvdDMKK2JpbmQgXHtrZXlzfURvdDErRG90MitEb3QzIFBBU1NET1RTXHtmbGFnc30rZG90MStkb3QyK2RvdDMKK2JpbmQgXHtrZXlzfURvdDErRG90MytEb3Q0IFBBU1NET1RTXHtmbGFnc30rZG90MStkb3QzK2RvdDQKK2JpbmQgXHtrZXlzfURvdDErRG90MytEb3Q0K0RvdDUgUEFTU0RPVFNce2ZsYWdzfStkb3QxK2RvdDMrZG90NCtkb3Q1CitiaW5kIFx7a2V5c31Eb3QxK0RvdDMrRG90NSBQQVNTRE9UU1x7ZmxhZ3N9K2RvdDErZG90Mytkb3Q1CitiaW5kIFx7a2V5c31Eb3QxK0RvdDIrRG90MytEb3Q0IFBBU1NET1RTXHtmbGFnc30rZG90MStkb3QyK2RvdDMrZG90NAorYmluZCBce2tleXN9RG90MStEb3QyK0RvdDMrRG90NCtEb3Q1IFBBU1NET1RTXHtmbGFnc30rZG90MStkb3QyK2RvdDMrZG90NCtkb3Q1CitiaW5kIFx7a2V5c31Eb3QxK0RvdDIrRG90MytEb3Q1IFBBU1NET1RTXHtmbGFnc30rZG90MStkb3QyK2RvdDMrZG90NQorYmluZCBce2tleXN9RG90MitEb3QzK0RvdDQgUEFTU0RPVFNce2ZsYWdzfStkb3QyK2RvdDMrZG90NAorYmluZCBce2tleXN9RG90MitEb3QzK0RvdDQrRG90NSBQQVNTRE9UU1x7ZmxhZ3N9K2RvdDIrZG90Mytkb3Q0K2RvdDUKK2JpbmQgXHtrZXlzfURvdDErRG90MytEb3Q2IFBBU1NET1RTXHtmbGFnc30rZG90MStkb3QzK2RvdDYKK2JpbmQgXHtrZXlzfURvdDErRG90MitEb3QzK0RvdDYgUEFTU0RPVFNce2ZsYWdzfStkb3QxK2RvdDIrZG90Mytkb3Q2CitiaW5kIFx7a2V5c31Eb3QyK0RvdDQrRG90NStEb3Q2IFBBU1NET1RTXHtmbGFnc30rZG90Mitkb3Q0K2RvdDUrZG90NgorYmluZCBce2tleXN9RG90MStEb3QzK0RvdDQrRG90NiBQQVNTRE9UU1x7ZmxhZ3N9K2RvdDErZG90Mytkb3Q0K2RvdDYKK2JpbmQgXHtrZXlzfURvdDErRG90MytEb3Q0K0RvdDUrRG90NiBQQVNTRE9UU1x7ZmxhZ3N9K2RvdDErZG90Mytkb3Q0K2RvdDUrZG90NgorYmluZCBce2tleXN9RG90MStEb3QzK0RvdDUrRG90NiBQQVNTRE9UU1x7ZmxhZ3N9K2RvdDErZG90Mytkb3Q1K2RvdDYKZGlmZiAtLWdpdCBhL1RhYmxlcy9JbnB1dC9obS9wYW4ua3RiIGIvVGFibGVzL0lucHV0L2htL3Bhbi5rdGIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzFkNmYwYwotLS0gL2Rldi9udWxsCisrKyBiL1RhYmxlcy9JbnB1dC9obS9wYW4ua3RiCkBAIC0wLDAgKzEsMjQgQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyMgICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisjCisjIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyMKKyMgQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCit0aXRsZSBISU1TIEJyYWlsbGUgU2Vuc2UgKHdpdGggdHdvIHNjcm9sbCBrZXlzKQorCitpbmNsdWRlIGNvbW1vbi5rdGkKK2luY2x1ZGUgYnJhaWxsZS5rdGkKK2luY2x1ZGUgZjE0Lmt0aQoraW5jbHVkZSBwYW4ua3RpCmRpZmYgLS1naXQgYS9UYWJsZXMvSW5wdXQvaG0vcGFuLmt0aSBiL1RhYmxlcy9JbnB1dC9obS9wYW4ua3RpCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBiOTE3ZDcKLS0tIC9kZXYvbnVsbAorKysgYi9UYWJsZXMvSW5wdXQvaG0vcGFuLmt0aQpAQCAtMCwwICsxLDQwIEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisjICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorIworIyBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisjCisjIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisjCisjIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyMgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorIyBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyMKKyMgV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworIworIyBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworYmluZCBCYWNrd2FyZCBGV0lOTFQKK2JpbmQgRm9yd2FyZCBGV0lOUlQKK2JpbmQgQmFja3dhcmQrRm9yd2FyZCBMTkJFRworCitiaW5kIEYxK0JhY2t3YXJkIFBSUFJPTVBUCitiaW5kIEYxK0ZvcndhcmQgTlhQUk9NUFQKKworYmluZCBGMitCYWNrd2FyZCBQUkRJRkxOCitiaW5kIEYyK0ZvcndhcmQgTlhESUZMTgorCitiaW5kIEYzK0JhY2t3YXJkIEFUVFJVUAorYmluZCBGMytGb3J3YXJkIEFUVFJETgorCitiaW5kIEY0K0JhY2t3YXJkIFBSUEdSUEgKK2JpbmQgRjQrRm9yd2FyZCBOWFBHUlBICisKK2JpbmQgRjErRjIrQmFja3dhcmQgVE9QX0xFRlQKK2JpbmQgRjErRjIrRm9yd2FyZCBCT1RfTEVGVAorCitiaW5kIEYzK0Y0K0JhY2t3YXJkIENIUkxUCitiaW5kIEYzK0Y0K0ZvcndhcmQgQ0hSUlQKKwpkaWZmIC0tZ2l0IGEvVGFibGVzL0lucHV0L2htL3F3ZXJ0eS5rdGIgYi9UYWJsZXMvSW5wdXQvaG0vcXdlcnR5Lmt0YgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NjQ2YTE4Ci0tLSAvZGV2L251bGwKKysrIGIvVGFibGVzL0lucHV0L2htL3F3ZXJ0eS5rdGIKQEAgLTAsMCArMSwyMyBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorIyAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyMKKyMgQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorIworIyBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorIworIyBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisjIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyMgbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisjCisjIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK3RpdGxlIEhJTVMgQnJhaWxsZSBTZW5zZSAod2l0aCBRV0VSVFkga2V5Ym9hcmQpCisKK2luY2x1ZGUgY29tbW9uLmt0aQoraW5jbHVkZSBzY3JvbGwua3RpCitpbmNsdWRlIHF3ZXJ0eS5rdGkKZGlmZiAtLWdpdCBhL1RhYmxlcy9JbnB1dC9obS9xd2VydHkua3RpIGIvVGFibGVzL0lucHV0L2htL3F3ZXJ0eS5rdGkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjFlMWNjNQotLS0gL2Rldi9udWxsCisrKyBiL1RhYmxlcy9JbnB1dC9obS9xd2VydHkua3RpCkBAIC0wLDAgKzEsMTU2IEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisjICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorIworIyBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisjCisjIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisjCisjIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyMgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorIyBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyMKKyMgV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworIworIyBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworaW5jbHVkZSBmbmtleS5rdGkKK2hpZGUgb24KKworYmluZCBEb3Q3IEtFWV9CQUNLU1BBQ0UKK2JpbmQgRG90OCBLRVlfRU5URVIKKworYmluZCBTcGFjZStEb3QxK0RvdDMrRG90NiBVUFBFUgorYmluZCBTcGFjZStEb3QxK0RvdDMrRG90NCBNRVRBCisKK2JpbmQgU3BhY2UrRG90MStEb3Q1IEtFWV9FU0NBUEUKK2JpbmQgU3BhY2UrRG90MitEb3Q0IEtFWV9JTlNFUlQKK2JpbmQgU3BhY2UrRG90MStEb3Q0K0RvdDUgS0VZX0RFTEVURQorCitiaW5kIEYyK0RvdDErRG90MitEb3QzK0RvdDQrRG90OCBLRVlfSU5TRVJUK2NvbnRyb2wKK2JpbmQgRjErRG90MStEb3QyK0RvdDMrRG90NCtEb3Q4IEtFWV9JTlNFUlQrc2hpZnQrY29udHJvbAorCitiaW5kIFNwYWNlK0RvdDQrRG90NSBLRVlfVEFCCitiaW5kIFNwYWNlK0RvdDErRG90MiBLRVlfVEFCK3NoaWZ0CitiaW5kIFNwYWNlK0RvdDErRG90MitEb3Q4IEtFWV9UQUIrY29udHJvbAorYmluZCBGMitGMyBLRVlfVEFCK21ldGEKK2JpbmQgRjErRjIrRjMgS0VZX1RBQitzaGlmdCttZXRhCisKK2JpbmQgU3BhY2UrRG90MStEb3QzIEtFWV9IT01FCitiaW5kIFNwYWNlK0RvdDQrRG90NiBLRVlfRU5ECisKK2JpbmQgU3BhY2UrRG90MStEb3QyK0RvdDMgS0VZX0hPTUUrY29udHJvbAorYmluZCBTcGFjZStEb3Q0K0RvdDUrRG90NiBLRVlfRU5EK2NvbnRyb2wKKworYmluZCBTcGFjZStEb3QxK0RvdDIrRG90NiBLRVlfUEFHRV9VUAorYmluZCBTcGFjZStEb3QzK0RvdDQrRG90NSBLRVlfUEFHRV9ET1dOCisKK2JpbmQgU3BhY2UrRG90MStEb3QyK0RvdDYrRG90OCBLRVlfUEFHRV9VUCtjb250cm9sCitiaW5kIFNwYWNlK0RvdDMrRG90NCtEb3Q1K0RvdDggS0VZX1BBR0VfRE9XTitjb250cm9sCisKK2JpbmQgU3BhY2UrRG90MSBLRVlfQ1VSU09SX1VQCitiaW5kIFNwYWNlK0RvdDQgS0VZX0NVUlNPUl9ET1dOCisKK2JpbmQgU3BhY2UrUmlnaHRTY3JvbGxVcCBLRVlfQ1VSU09SX1VQK3NoaWZ0CitiaW5kIFNwYWNlK1JpZ2h0U2Nyb2xsRG93biBLRVlfQ1VSU09SX0RPV04rc2hpZnQKKworYmluZCBTcGFjZStEb3QyK0RvdDMgS0VZX0NVUlNPUl9VUCtjb250cm9sCitiaW5kIFNwYWNlK0RvdDUrRG90NiBLRVlfQ1VSU09SX0RPV04rY29udHJvbAorCitiaW5kIEYxK1NwYWNlK0RvdDIrRG90MytEb3Q4IEtFWV9DVVJTT1JfVVArc2hpZnQrY29udHJvbAorYmluZCBGMStTcGFjZStEb3Q1K0RvdDYrRG90OCBLRVlfQ1VSU09SX0RPV04rc2hpZnQrY29udHJvbAorCitiaW5kIERvdDIrRG90MytEb3Q3IEtFWV9DVVJTT1JfVVArbWV0YQorYmluZCBEb3Q1K0RvdDYrRG90NyBLRVlfQ1VSU09SX0RPV04rbWV0YQorCitiaW5kIEYxK0RvdDIrRG90MytEb3Q3IEtFWV9DVVJTT1JfVVArc2hpZnQrbWV0YQorYmluZCBGMStEb3Q1K0RvdDYrRG90NyBLRVlfQ1VSU09SX0RPV04rc2hpZnQrbWV0YQorCitiaW5kIFNwYWNlK0RvdDMgS0VZX0NVUlNPUl9MRUZUCitiaW5kIFNwYWNlK0RvdDYgS0VZX0NVUlNPUl9SSUdIVAorCitiaW5kIFNwYWNlK0RvdDIgS0VZX0NVUlNPUl9MRUZUK2NvbnRyb2wKK2JpbmQgU3BhY2UrRG90NSBLRVlfQ1VSU09SX1JJR0hUK2NvbnRyb2wKKworYmluZCBGMStTcGFjZStEb3QyK0RvdDggS0VZX0NVUlNPUl9MRUZUK3NoaWZ0K2NvbnRyb2wKK2JpbmQgRjErU3BhY2UrRG90NStEb3Q4IEtFWV9DVVJTT1JfUklHSFQrc2hpZnQrY29udHJvbAorCitiaW5kIERvdDIrRG90NyBLRVlfQ1VSU09SX0xFRlQrbWV0YQorYmluZCBEb3Q1K0RvdDcgS0VZX0NVUlNPUl9SSUdIVCttZXRhCisKK2JpbmQgRjErRG90MitEb3Q3IEtFWV9DVVJTT1JfTEVGVCtzaGlmdCttZXRhCitiaW5kIEYxK0RvdDUrRG90NyBLRVlfQ1VSU09SX1JJR0hUK3NoaWZ0K21ldGEKKworYmluZCBTcGFjZStEb3QxK0RvdDIrRG90NSBLRVlfRlVOQ1RJT04rMAorYmluZCBGNCtTcGFjZStEb3QxK0RvdDIgS0VZX0ZVTkNUSU9OKzEKK2JpbmQgRjQrRG90MStEb3QyK0RvdDQrRG90OCBLRVlfRlVOQ1RJT04rMgorYmluZCBGMytEb3Q3IEtFWV9GVU5DVElPTiszCitiaW5kIEYyK0RvdDcgS0VZX0ZVTkNUSU9OKzQKK2JpbmQgRjQrRG90NyBLRVlfRlVOQ1RJT04rNQorYmluZCBGNCtTcGFjZSBLRVlfRlVOQ1RJT04rNgorYmluZCBGNCtEb3Q4IEtFWV9GVU5DVElPTis3CitiaW5kIERvdDMrRG90NCtEb3Q1K0RvdDYrRG90NyBLRVlfRlVOQ1RJT04rOAorYmluZCBTcGFjZStEb3QxK0RvdDMrRG90NSBLRVlfRlVOQ1RJT04rOQorYmluZCBEb3QxK0RvdDQrRG90NStEb3Q2K0RvdDcgS0VZX0ZVTkNUSU9OKzEwCitiaW5kIEY0K0RvdDErRG90MitEb3Q0K0RvdDUrRG90OCBLRVlfRlVOQ1RJT04rMTEKKworYmluZCBGMStEb3Q3IEtFWV9GVU5DVElPTis1K3NoaWZ0CitiaW5kIEYxK1NwYWNlIEtFWV9GVU5DVElPTis2K3NoaWZ0CitiaW5kIEYxK0RvdDggS0VZX0ZVTkNUSU9OKzcrc2hpZnQKK2JpbmQgRjErRjQgS0VZX0ZVTkNUSU9OKzkrbWV0YQorCittYXAgU3BhY2UgU1BBQ0UKK21hcCBEb3QxIGRvdDEKK21hcCBEb3QyIGRvdDIKK21hcCBEb3QzIGRvdDMKK21hcCBEb3Q0IGRvdDQKK21hcCBEb3Q1IGRvdDUKK21hcCBEb3Q2IGRvdDYKKworYmluZCBTcGFjZStEb3Q3K0RvdDQgUEFTU0RPVFMrZG90NAorYmluZCBTcGFjZStEb3Q3K0RvdDIrRG90NCtEb3Q2IFBBU1NET1RTK2RvdDIrZG90NCtkb3Q2CitiaW5kIFNwYWNlK0RvdDcrRG90MStEb3QyK0RvdDUrRG90NiBQQVNTRE9UUytkb3QxK2RvdDIrZG90NStkb3Q2CitiaW5kIFNwYWNlK0RvdDcrRG90MitEb3QzK0RvdDQrRG90NStEb3Q2IFBBU1NET1RTK2RvdDIrZG90Mytkb3Q0K2RvdDUrZG90NgorYmluZCBTcGFjZStEb3Q3K0RvdDQrRG90NSBQQVNTRE9UUytkb3Q0K2RvdDUKKworYmVnaW5WYXJpYWJsZXMKK2Fzc2lnbiBrZXlzCithc3NpZ24gZmxhZ3MKK2luY2x1ZGUgbGV0dGVycy5rdGkKK2VuZFZhcmlhYmxlcworCitiZWdpblZhcmlhYmxlcworYXNzaWduIGtleXMgU3BhY2UrRG90NysKK2Fzc2lnbiBmbGFncyArc2hpZnQKK2luY2x1ZGUgbGV0dGVycy5rdGkKK2VuZFZhcmlhYmxlcworCitiZWdpblZhcmlhYmxlcworYXNzaWduIGtleXMgRjErRG90NysKK2Fzc2lnbiBmbGFncyArc2hpZnQrbWV0YQoraW5jbHVkZSBsZXR0ZXJzLmt0aQorZW5kVmFyaWFibGVzCisKK2JlZ2luVmFyaWFibGVzCithc3NpZ24ga2V5cyBEb3Q3KworIyB0aGVzZSBjb25mbGljdCB3aXRoIHNoaWZ0ZWQgbGV0dGVycworI2Fzc2lnbiBmbGFncyArbWV0YQorYXNzaWduIGZsYWdzICtzaGlmdAoraW5jbHVkZSBsZXR0ZXJzLmt0aQorZW5kVmFyaWFibGVzCisKK2JlZ2luVmFyaWFibGVzCithc3NpZ24ga2V5cyBEb3Q4KworYXNzaWduIGZsYWdzICtjb250cm9sCitpbmNsdWRlIGxldHRlcnMua3RpCitlbmRWYXJpYWJsZXMKKworYmVnaW5WYXJpYWJsZXMKK2Fzc2lnbiBrZXlzIEYxKworYXNzaWduIGZsYWdzICtndWkKK2luY2x1ZGUgbGV0dGVycy5rdGkKK2VuZFZhcmlhYmxlcworCitoaWRlIG9mZgpkaWZmIC0tZ2l0IGEvVGFibGVzL0lucHV0L2htL3JpZ2h0Lmt0aSBiL1RhYmxlcy9JbnB1dC9obS9yaWdodC5rdGkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjU2ODMxNgotLS0gL2Rldi9udWxsCisrKyBiL1RhYmxlcy9JbnB1dC9obS9yaWdodC5rdGkKQEAgLTAsMCArMSwzMiBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorIyAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyMKKyMgQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorIworIyBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorIworIyBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisjIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyMgbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisjCisjIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK2JpbmQgUmlnaHRQYWRVcCBQUkRJRkxOCitiaW5kIFJpZ2h0UGFkRG93biBOWERJRkxOCitiaW5kIFJpZ2h0UGFkTGVmdCBGV0lOTFRTS0lQCitiaW5kIFJpZ2h0UGFkUmlnaHQgRldJTlJUU0tJUAorCitiaW5kIFJpZ2h0UGFkTGVmdCtSaWdodFBhZFVwIENPTlRFWFQrQ0xJUF9ORVcKK2JpbmQgUmlnaHRQYWRMZWZ0K1JpZ2h0UGFkRG93biBDT05URVhUK0NMSVBfQURECisKK2JpbmQgUmlnaHRQYWRSaWdodCtSaWdodFBhZFVwIENPTlRFWFQrQ09QWV9MSU5FCitiaW5kIFJpZ2h0UGFkUmlnaHQrUmlnaHRQYWREb3duIENPTlRFWFQrQ09QWV9SRUNUCitiaW5kIFJpZ2h0UGFkTGVmdCtSaWdodFBhZFJpZ2h0IFBBU1RFCisKK2JpbmQgUmlnaHRQYWRVcCtSaWdodFBhZERvd24gQ09OVEVYVCtERVNDQ0hBUgorCmRpZmYgLS1naXQgYS9UYWJsZXMvSW5wdXQvaG0vc2Nyb2xsLmt0YiBiL1RhYmxlcy9JbnB1dC9obS9zY3JvbGwua3RiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI0NmI1NzQKLS0tIC9kZXYvbnVsbAorKysgYi9UYWJsZXMvSW5wdXQvaG0vc2Nyb2xsLmt0YgpAQCAtMCwwICsxLDI0IEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisjICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorIworIyBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisjCisjIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisjCisjIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyMgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorIyBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyMKKyMgV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworIworIyBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKwordGl0bGUgSElNUyBCcmFpbGxlIFNlbnNlICh3aXRoIGZvdXIgc2Nyb2xsIGtleXMpCisKK2luY2x1ZGUgY29tbW9uLmt0aQoraW5jbHVkZSBicmFpbGxlLmt0aQoraW5jbHVkZSBmMTQua3RpCitpbmNsdWRlIHNjcm9sbC5rdGkKZGlmZiAtLWdpdCBhL1RhYmxlcy9JbnB1dC9obS9zY3JvbGwua3RpIGIvVGFibGVzL0lucHV0L2htL3Njcm9sbC5rdGkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWRkYzA5MQotLS0gL2Rldi9udWxsCisrKyBiL1RhYmxlcy9JbnB1dC9obS9zY3JvbGwua3RpCkBAIC0wLDAgKzEsNzEgQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyMgICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisjCisjIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyMKKyMgQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIERlZmF1bHQgQmluZGluZ3MgIworIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworYmluZCBMZWZ0U2Nyb2xsVXAgTE5VUAorYmluZCBMZWZ0U2Nyb2xsRG93biBMTkROCisKK2JpbmQgUmlnaHRTY3JvbGxVcCBGV0lOTFQKK2JpbmQgUmlnaHRTY3JvbGxEb3duIEZXSU5SVAorCitiaW5kIExlZnRTY3JvbGxVcCtMZWZ0U2Nyb2xsRG93biBMTkJFRworYmluZCBSaWdodFNjcm9sbFVwK1JpZ2h0U2Nyb2xsRG93biBSRVRVUk4KKworYmluZCBMZWZ0U2Nyb2xsVXArUmlnaHRTY3JvbGxVcCBDU1JUUksKK2JpbmQgTGVmdFNjcm9sbFVwK1JpZ2h0U2Nyb2xsRG93biBTSVhET1RTCitiaW5kIExlZnRTY3JvbGxEb3duK1JpZ2h0U2Nyb2xsVXAgRlJFRVpFCitiaW5kIExlZnRTY3JvbGxEb3duK1JpZ2h0U2Nyb2xsRG93biBESVNQTUQKKworYmluZCBMZWZ0U2Nyb2xsVXArTGVmdFNjcm9sbERvd24rUmlnaHRTY3JvbGxVcCBUT1AKK2JpbmQgTGVmdFNjcm9sbFVwK0xlZnRTY3JvbGxEb3duK1JpZ2h0U2Nyb2xsRG93biBCT1QKKworYmluZCBSaWdodFNjcm9sbFVwK1JpZ2h0U2Nyb2xsRG93bitMZWZ0U2Nyb2xsVXAgSU5GTworYmluZCBSaWdodFNjcm9sbFVwK1JpZ2h0U2Nyb2xsRG93bitMZWZ0U2Nyb2xsRG93biBQUkVGTUVOVQorCitiaW5kIExlZnRTY3JvbGxVcCtMZWZ0U2Nyb2xsRG93bitSaWdodFNjcm9sbFVwK1JpZ2h0U2Nyb2xsRG93biBIRUxQCisKKworIyMjIyMjIyMjIyMjIyMjIyMKKyMgTWVudSBCaW5kaW5ncyAjCisjIyMjIyMjIyMjIyMjIyMjIworCitjb250ZXh0IG1lbnUKKworYmluZCBMZWZ0U2Nyb2xsVXAgTUVOVV9QUkVWX0lURU0KK2JpbmQgTGVmdFNjcm9sbERvd24gTUVOVV9ORVhUX0lURU0KKworYmluZCBSaWdodFNjcm9sbFVwIE1FTlVfUFJFVl9TRVRUSU5HCitiaW5kIFJpZ2h0U2Nyb2xsRG93biBNRU5VX05FWFRfU0VUVElORworCitiaW5kIExlZnRTY3JvbGxVcCtMZWZ0U2Nyb2xsRG93biBGV0lOTFQKK2JpbmQgUmlnaHRTY3JvbGxVcCtSaWdodFNjcm9sbERvd24gRldJTlJUCisKK2JpbmQgTGVmdFNjcm9sbFVwK1JpZ2h0U2Nyb2xsVXAgTUVOVV9GSVJTVF9JVEVNCitiaW5kIExlZnRTY3JvbGxEb3duK1JpZ2h0U2Nyb2xsRG93biBNRU5VX0xBU1RfSVRFTQorCitiaW5kIExlZnRTY3JvbGxVcCtMZWZ0U2Nyb2xsRG93bitSaWdodFNjcm9sbFVwIFBSRUZMT0FECitiaW5kIExlZnRTY3JvbGxVcCtMZWZ0U2Nyb2xsRG93bitSaWdodFNjcm9sbERvd24gUFJFRlNBVkUKKworYmluZCBSaWdodFNjcm9sbFVwK1JpZ2h0U2Nyb2xsRG93bitMZWZ0U2Nyb2xsVXAgTUVOVV9QUkVWX0xFVkVMCitiaW5kIFJpZ2h0U2Nyb2xsVXArUmlnaHRTY3JvbGxEb3duK0xlZnRTY3JvbGxEb3duIFBSRUZNRU5VCisKKwpkaWZmIC0tZ2l0IGEvVGFibGVzL0lucHV0L2htL3N5bmMua3RiIGIvVGFibGVzL0lucHV0L2htL3N5bmMua3RiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRlNjVlN2QKLS0tIC9kZXYvbnVsbAorKysgYi9UYWJsZXMvSW5wdXQvaG0vc3luYy5rdGIKQEAgLTAsMCArMSwyNyBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorIyAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyMKKyMgQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorIworIyBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorIworIyBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisjIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyMgbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisjCisjIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK3RpdGxlIEhJTVMgU3luY0JyYWlsbGUKKworCisjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBEZWZhdWx0IEJpbmRpbmdzICMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK2luY2x1ZGUgY29tbW9uLmt0aQoraW5jbHVkZSBzY3JvbGwua3RpCmRpZmYgLS1naXQgYS9UYWJsZXMvSW5wdXQvaHQvYWIua3RiIGIvVGFibGVzL0lucHV0L2h0L2FiLmt0YgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YjQ4NGJhCi0tLSAvZGV2L251bGwKKysrIGIvVGFibGVzL0lucHV0L2h0L2FiLmt0YgpAQCAtMCwwICsxLDIxIEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisjICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorIworIyBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisjCisjIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisjCisjIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyMgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorIyBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyMKKyMgV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworIworIyBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKwordGl0bGUgSGFuZHlUZWNoIEFjdGl2ZSBCcmFpbGxlCisKK2luY2x1ZGUgYWIua3RpCmRpZmYgLS1naXQgYS9UYWJsZXMvSW5wdXQvaHQvYWIua3RpIGIvVGFibGVzL0lucHV0L2h0L2FiLmt0aQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40Zjc2OGY2Ci0tLSAvZGV2L251bGwKKysrIGIvVGFibGVzL0lucHV0L2h0L2FiLmt0aQpAQCAtMCwwICsxLDIzIEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisjICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorIworIyBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisjCisjIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisjCisjIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyMgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorIyBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyMKKyMgV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworIworIyBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIyBLZXkgc3VidGFibGUgZm9yIEhhbmR5VGVjaCBBY3RpdmUgQnJhaWxsZQorCitiaW5kIEIxK0I0K1NwYWNlTGVmdCBUT1VDSF9OQVYKKworaW5jbHVkZSBicy5rdGkKZGlmZiAtLWdpdCBhL1RhYmxlcy9JbnB1dC9odC9hYl9zLmt0YiBiL1RhYmxlcy9JbnB1dC9odC9hYl9zLmt0YgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNjJlNDAyCi0tLSAvZGV2L251bGwKKysrIGIvVGFibGVzL0lucHV0L2h0L2FiX3Mua3RiCkBAIC0wLDAgKzEsMjIgQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyMgICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisjCisjIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyMKKyMgQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCit0aXRsZSBIYW5keVRlY2ggQWN0aXZlIEJyYWlsbGUgUworCitpbmNsdWRlIGFiLmt0aQoraW5jbHVkZSBqb3lzdGljay5rdGkKZGlmZiAtLWdpdCBhL1RhYmxlcy9JbnB1dC9odC9hYzQua3RiIGIvVGFibGVzL0lucHV0L2h0L2FjNC5rdGIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjQwNDM1NAotLS0gL2Rldi9udWxsCisrKyBiL1RhYmxlcy9JbnB1dC9odC9hYzQua3RiCkBAIC0wLDAgKzEsNTIgQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyMgICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisjCisjIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyMKKyMgQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCit0aXRsZSBIYW5keVRlY2ggQWN0aXZhdG9yCisKK2JpbmQgQjErQjQrU3BhY2VMZWZ0IFRPVUNIX05BVgorCitpbmNsdWRlIGpveXN0aWNrLmt0aQorCitiaW5kIFNwYWNlTGVmdCtSb3V0aW5nS2V5IFBSSU5ERU5UCitiaW5kIFNwYWNlUmlnaHQrUm91dGluZ0tleSBOWElOREVOVAorCitiaW5kIFNwYWNlTGVmdCBGV0lOTFQKK2JpbmQgU3BhY2VSaWdodCBGV0lOUlQKK2JpbmQgU3BhY2VMZWZ0K1NwYWNlUmlnaHQgUEFTVEUKKworYmluZCBCMStTcGFjZUxlZnQgTE5CRUcKK2JpbmQgQjErU3BhY2VSaWdodCBMTkVORAorYmluZCBCMitTcGFjZUxlZnQgVE9QCitiaW5kIEIyK1NwYWNlUmlnaHQgQk9UCitiaW5kIEIzK1NwYWNlTGVmdCBIV0lOTFQKK2JpbmQgQjMrU3BhY2VSaWdodCBIV0lOUlQKK2JpbmQgQjYrU3BhY2VMZWZ0IENIUkxUCitiaW5kIEI2K1NwYWNlUmlnaHQgQ0hSUlQKK2JpbmQgQjIrQjMrU3BhY2VMZWZ0IE1VVEUKK2JpbmQgQjIrQjMrU3BhY2VSaWdodCBTQVlfTElORQorCitpbmNsdWRlIGRvdHMua3RpCisKK2Fzc2lnbiBicmFpbGxlT24gQjErQjgrU3BhY2VSaWdodAorYXNzaWduIGJyYWlsbGVPZmYgQjErQjgrU3BhY2VMZWZ0Cithc3NpZ24gc3BhY2UgU3BhY2VMZWZ0Cithc3NpZ24gZW50ZXIgU3BhY2VSaWdodAoraW5jbHVkZSBpbnB1dC5rdGkKKworaW5jbHVkZSAuLi9ibS9kaXNwbGF5Ni5rdGkKK2luY2x1ZGUgLi4vYm0vcm91dGluZzYua3RpCmRpZmYgLS1naXQgYS9UYWJsZXMvSW5wdXQvaHQvYWxvLmt0YiBiL1RhYmxlcy9JbnB1dC9odC9hbG8ua3RiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk0MTQwYTkKLS0tIC9kZXYvbnVsbAorKysgYi9UYWJsZXMvSW5wdXQvaHQvYWxvLmt0YgpAQCAtMCwwICsxLDI0IEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisjICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorIworIyBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisjCisjIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisjCisjIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyMgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorIyBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyMKKyMgV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworIworIyBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKwordGl0bGUgSGFuZHlUZWNoIEFjdGlsaW5vCisKK2JpbmQgQjErQjQrU3BhY2VMZWZ0IFRPVUNIX05BVgorCitpbmNsdWRlIGpveXN0aWNrLmt0aQoraW5jbHVkZSBicy5rdGkKZGlmZiAtLWdpdCBhL1RhYmxlcy9JbnB1dC9odC9hczQwLmt0YiBiL1RhYmxlcy9JbnB1dC9odC9hczQwLmt0YgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZDY0ZmUzCi0tLSAvZGV2L251bGwKKysrIGIvVGFibGVzL0lucHV0L2h0L2FzNDAua3RiCkBAIC0wLDAgKzEsMjMgQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyMgICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisjCisjIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyMKKyMgQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCit0aXRsZSBIYW5keVRlY2ggQWN0aXZlIFN0YXIgNDAKKworYmluZCBCMStCNCtTcGFjZUxlZnQgVE9VQ0hfTkFWCisKK2luY2x1ZGUgYnMua3RpCmRpZmYgLS1naXQgYS9UYWJsZXMvSW5wdXQvaHQvYmIua3RiIGIvVGFibGVzL0lucHV0L2h0L2JiLmt0YgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MmE0YWUyCi0tLSAvZGV2L251bGwKKysrIGIvVGFibGVzL0lucHV0L2h0L2JiLmt0YgpAQCAtMCwwICsxLDIyIEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisjICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorIworIyBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisjCisjIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisjCisjIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyMgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorIyBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyMKKyMgV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworIworIyBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKwordGl0bGUgSGFuZHlUZWNoIEJhc2ljIEJyYWlsbGUKKworaW5jbHVkZSAuLi9ibS9kaXNwbGF5Ni5rdGkKK2luY2x1ZGUgLi4vYm0vcm91dGluZzYua3RpCmRpZmYgLS1naXQgYS9UYWJsZXMvSW5wdXQvaHQvYmJwLmt0YiBiL1RhYmxlcy9JbnB1dC9odC9iYnAua3RiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY5ODQ1MWQKLS0tIC9kZXYvbnVsbAorKysgYi9UYWJsZXMvSW5wdXQvaHQvYmJwLmt0YgpAQCAtMCwwICsxLDIxIEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisjICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorIworIyBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisjCisjIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisjCisjIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyMgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorIyBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyMKKyMgV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworIworIyBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKwordGl0bGUgSGFuZHlUZWNoIEJhc2ljIEJyYWlsbGUgUGx1cworCitpbmNsdWRlIGJzLmt0aQpkaWZmIC0tZ2l0IGEvVGFibGVzL0lucHV0L2h0L2Jrd20ua3RiIGIvVGFibGVzL0lucHV0L2h0L2Jrd20ua3RiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA2NjhhOGEKLS0tIC9kZXYvbnVsbAorKysgYi9UYWJsZXMvSW5wdXQvaHQvYmt3bS5rdGIKQEAgLTAsMCArMSw2MSBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorIyAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyMKKyMgQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorIworIyBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorIworIyBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisjIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyMgbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisjCisjIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK3RpdGxlIEhhbmR5VGVjaCBCb29rd29ybQorCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIERlZmF1bHQgQmluZGluZ3MgIworIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworYmluZCBCYWNrd2FyZCBGV0lOTFQKK2JpbmQgRm9yd2FyZCBGV0lOUlQKK2JpbmQgRXNjYXBlIENTUlRSSworYmluZCBFc2NhcGUrQmFja3dhcmQgQkFDSworYmluZCBFc2NhcGUrRm9yd2FyZCBESVNQTUQKK2JpbmQgRW50ZXIgUk9VVEUKK2JpbmQgRW50ZXIrQmFja3dhcmQgTE5VUAorYmluZCBFbnRlcitGb3J3YXJkIExORE4KK2JpbmQgRXNjYXBlK0VudGVyIFBSRUZNRU5VCitiaW5kIEVzY2FwZStFbnRlcitCYWNrd2FyZCBMTkJFRworYmluZCBFc2NhcGUrRW50ZXIrRm9yd2FyZCBMTkVORAorYmluZCBCYWNrd2FyZCtGb3J3YXJkIEhFTFAKK2JpbmQgQmFja3dhcmQrRm9yd2FyZCtFc2NhcGUgQ1NSU0laRQorYmluZCBCYWNrd2FyZCtGb3J3YXJkK0VudGVyIEZSRUVaRQorCisKKyMjIyMjIyMjIyMjIyMjIyMjCisjIE1lbnUgQmluZGluZ3MgIworIyMjIyMjIyMjIyMjIyMjIyMKKworY29udGV4dCBtZW51CisKK2JpbmQgQmFja3dhcmQgRldJTkxUCitiaW5kIEZvcndhcmQgRldJTlJUCitiaW5kIEVzY2FwZSBQUkVGTE9BRAorYmluZCBFc2NhcGUrQmFja3dhcmQgTUVOVV9QUkVWX1NFVFRJTkcKK2JpbmQgRXNjYXBlK0ZvcndhcmQgTUVOVV9ORVhUX1NFVFRJTkcKK2JpbmQgRW50ZXIgUFJFRk1FTlUKK2JpbmQgRW50ZXIrQmFja3dhcmQgTUVOVV9QUkVWX0lURU0KK2JpbmQgRW50ZXIrRm9yd2FyZCBNRU5VX05FWFRfSVRFTQorYmluZCBFc2NhcGUrRW50ZXIgUFJFRlNBVkUKK2JpbmQgRXNjYXBlK0VudGVyK0JhY2t3YXJkIE1FTlVfRklSU1RfSVRFTQorYmluZCBFc2NhcGUrRW50ZXIrRm9yd2FyZCBNRU5VX0xBU1RfSVRFTQorYmluZCBCYWNrd2FyZCtGb3J3YXJkIE5PT1AKK2JpbmQgQmFja3dhcmQrRm9yd2FyZCtFc2NhcGUgTk9PUAorYmluZCBCYWNrd2FyZCtGb3J3YXJkK0VudGVyIE5PT1AKZGlmZiAtLWdpdCBhL1RhYmxlcy9JbnB1dC9odC9icmxuLmt0YiBiL1RhYmxlcy9JbnB1dC9odC9icmxuLmt0YgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNGFmNjEyCi0tLSAvZGV2L251bGwKKysrIGIvVGFibGVzL0lucHV0L2h0L2JybG4ua3RiCkBAIC0wLDAgKzEsMjEgQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyMgICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisjCisjIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyMKKyMgQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCit0aXRsZSBIYW5keVRlY2ggQnJhaWxsaW5vCisKK2luY2x1ZGUgYnMua3RpCmRpZmYgLS1naXQgYS9UYWJsZXMvSW5wdXQvaHQvYnMua3RpIGIvVGFibGVzL0lucHV0L2h0L2JzLmt0aQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42N2ZlNDg5Ci0tLSAvZGV2L251bGwKKysrIGIvVGFibGVzL0lucHV0L2h0L2JzLmt0aQpAQCAtMCwwICsxLDQ5IEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisjICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorIworIyBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisjCisjIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisjCisjIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyMgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorIyBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyMKKyMgV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworIworIyBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIyBLZXkgc3VidGFibGUgZm9yIEhhbmR5VGVjaCBCcmFpbGxlIFN0YXIKKworYmluZCBSb3V0aW5nS2V5IFJPVVRFCitiaW5kIFJvdXRpbmdLZXkrIVJvdXRpbmdLZXkgQ0xJUF9DT1BZCisKK2JpbmQgU3BhY2VMZWZ0K1JvdXRpbmdLZXkgUFJJTkRFTlQKK2JpbmQgU3BhY2VSaWdodCtSb3V0aW5nS2V5IE5YSU5ERU5UCisKK2JpbmQgU3BhY2VMZWZ0IEZXSU5MVAorYmluZCBTcGFjZVJpZ2h0IEZXSU5SVAorYmluZCBTcGFjZUxlZnQrU3BhY2VSaWdodCBQQVNURQorCitiaW5kIEIxK1NwYWNlTGVmdCBMTkJFRworYmluZCBCMStTcGFjZVJpZ2h0IExORU5ECitiaW5kIEIyK1NwYWNlTGVmdCBUT1AKK2JpbmQgQjIrU3BhY2VSaWdodCBCT1QKK2JpbmQgQjMrU3BhY2VMZWZ0IEhXSU5MVAorYmluZCBCMytTcGFjZVJpZ2h0IEhXSU5SVAorYmluZCBCNitTcGFjZUxlZnQgQ0hSTFQKK2JpbmQgQjYrU3BhY2VSaWdodCBDSFJSVAorYmluZCBCMitCMytTcGFjZUxlZnQgTVVURQorYmluZCBCMitCMytTcGFjZVJpZ2h0IFNBWV9MSU5FCisKK2luY2x1ZGUgZG90cy5rdGkKK2luY2x1ZGUgcm9ja2Vycy5rdGkKKworYXNzaWduIGJyYWlsbGVPbiBCMStCOCtTcGFjZVJpZ2h0Cithc3NpZ24gYnJhaWxsZU9mZiBCMStCOCtTcGFjZUxlZnQKK2Fzc2lnbiBzcGFjZSBTcGFjZUxlZnQKK2Fzc2lnbiBlbnRlciBTcGFjZVJpZ2h0CitpbmNsdWRlIGlucHV0Lmt0aQpkaWZmIC0tZ2l0IGEvVGFibGVzL0lucHV0L2h0L2JzNDAua3RiIGIvVGFibGVzL0lucHV0L2h0L2JzNDAua3RiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc1ZmFkZmEKLS0tIC9kZXYvbnVsbAorKysgYi9UYWJsZXMvSW5wdXQvaHQvYnM0MC5rdGIKQEAgLTAsMCArMSwyMSBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorIyAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyMKKyMgQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorIworIyBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorIworIyBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisjIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyMgbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisjCisjIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK3RpdGxlIEhhbmR5VGVjaCBCcmFpbGxlIFN0YXIgNDAKKworaW5jbHVkZSBicy5rdGkKZGlmZiAtLWdpdCBhL1RhYmxlcy9JbnB1dC9odC9iczgwLmt0YiBiL1RhYmxlcy9JbnB1dC9odC9iczgwLmt0YgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMzY1MTVlCi0tLSAvZGV2L251bGwKKysrIGIvVGFibGVzL0lucHV0L2h0L2JzODAua3RiCkBAIC0wLDAgKzEsMjIgQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyMgICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisjCisjIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyMKKyMgQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCit0aXRsZSBIYW5keVRlY2ggQnJhaWxsZSBTdGFyIDgwCisKK2luY2x1ZGUgYnMua3RpCitpbmNsdWRlIGtleXBhZC5rdGkKZGlmZiAtLWdpdCBhL1RhYmxlcy9JbnB1dC9odC9jYjQwLmt0YiBiL1RhYmxlcy9JbnB1dC9odC9jYjQwLmt0YgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kOTY3MmQ1Ci0tLSAvZGV2L251bGwKKysrIGIvVGFibGVzL0lucHV0L2h0L2NiNDAua3RiCkBAIC0wLDAgKzEsMjEgQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyMgICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisjCisjIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyMKKyMgQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCit0aXRsZSBIYW5keVRlY2ggQ29ubmVjdCBCcmFpbGxlIDQwCisKK2luY2x1ZGUgYnMua3RpCmRpZmYgLS1naXQgYS9UYWJsZXMvSW5wdXQvaHQvZG90cy5rdGkgYi9UYWJsZXMvSW5wdXQvaHQvZG90cy5rdGkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDVmMmY0NQotLS0gL2Rldi9udWxsCisrKyBiL1RhYmxlcy9JbnB1dC9odC9kb3RzLmt0aQpAQCAtMCwwICsxLDY1IEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisjICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorIworIyBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisjCisjIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisjCisjIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyMgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorIyBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyMKKyMgV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworIworIyBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIyBLZXkgc3VidGFibGUgZm9yIEhhbmR5VGVjaCBicmFpbGxlIGRvdCBrZXlzCisKK2JpbmQgQjEgSE9NRQorYmluZCBCMiBUT1BfTEVGVAorYmluZCBCMyBCQUNLCitiaW5kIEI0IExOVVAKK2JpbmQgQjUgTE5ETgorYmluZCBCMStCNCBQUlBHUlBICitiaW5kIEIxK0I1IE5YUEdSUEgKK2JpbmQgQjIrQjQgUFJQUk9NUFQKK2JpbmQgQjIrQjUgTlhQUk9NUFQKK2JpbmQgQjMrQjQgUFJTRUFSQ0gKK2JpbmQgQjMrQjUgTlhTRUFSQ0gKK2JpbmQgQjQrQjUgTEVBUk4KK2JpbmQgQjYrQjQgQVRUUlVQCitiaW5kIEI2K0I1IEFUVFJETgorYmluZCBCNytCNCBXSU5VUAorYmluZCBCNytCNSBXSU5ETgorYmluZCBCOCtCNCBQUkRJRkxOCitiaW5kIEI4K0I1IE5YRElGTE4KK2JpbmQgQjggSEVMUAorYmluZCBCOCtCMSBDU1JUUksKK2JpbmQgQjgrQjIgQ1NSVklTCitiaW5kIEI4K0IzIEFUVFJWSVMKK2JpbmQgQjgrQjYgRlJFRVpFCitiaW5kIEI4K0I3IFRVTkVTCitiaW5kIEI3IFNJWERPVFMKK2JpbmQgQjcrQjEgUFJFRk1FTlUKK2JpbmQgQjcrQjIgUFJFRkxPQUQKK2JpbmQgQjcrQjMgUFJFRlNBVkUKK2JpbmQgQjcrQjYgSU5GTworYmluZCBCNiBESVNQTUQKK2JpbmQgQjYrQjEgU0tQSURMTlMKK2JpbmQgQjYrQjIgU0tQQkxOS1dJTlMKK2JpbmQgQjYrQjMgU0xJREVXSU4KKworYmluZCBCMitCMytCNStCNiBUSU1FCisKK2JpbmQgQjErUm91dGluZ0tleSBTRVRMRUZUCitiaW5kIEIyK1JvdXRpbmdLZXkgREVTQ0NIQVIKK2JpbmQgQjMrUm91dGluZ0tleSBDTElQX0FERAorYmluZCBCNCtSb3V0aW5nS2V5IENMSVBfTkVXCitiaW5kIEI1K1JvdXRpbmdLZXkgQ09QWV9SRUNUCitiaW5kIEI2K1JvdXRpbmdLZXkgQ09QWV9MSU5FCitiaW5kIEI3K1JvdXRpbmdLZXkgU0VUTUFSSworYmluZCBCOCtSb3V0aW5nS2V5IEdPVE9NQVJLCisKZGlmZiAtLWdpdCBhL1RhYmxlcy9JbnB1dC9odC9lYXN5Lmt0YiBiL1RhYmxlcy9JbnB1dC9odC9lYXN5Lmt0YgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMjliYjlkCi0tLSAvZGV2L251bGwKKysrIGIvVGFibGVzL0lucHV0L2h0L2Vhc3kua3RiCkBAIC0wLDAgKzEsNDMgQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyMgICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisjCisjIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyMKKyMgQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCit0aXRsZSBIYW5keVRlY2ggRWFzeSBCcmFpbGxlCisKK2JpbmQgTGVmdCBGV0lOTFQKK2JpbmQgUmlnaHQgRldJTlJUCisKK2JpbmQgUm91dGluZ0tleSBST1VURQorYmluZCBSb3V0aW5nS2V5KyFSb3V0aW5nS2V5IENMSVBfQ09QWQorCitiaW5kIExlZnQrUm91dGluZ0tleSBQUklOREVOVAorYmluZCBSaWdodCtSb3V0aW5nS2V5IE5YSU5ERU5UCisKK2JpbmQgTGVmdCtSaWdodCBQQVNURQorCitiaW5kIEIxK0xlZnQgTE5CRUcKK2JpbmQgQjErUmlnaHQgTE5FTkQKK2JpbmQgQjIrTGVmdCBUT1AKK2JpbmQgQjIrUmlnaHQgQk9UCitiaW5kIEIzK0xlZnQgSFdJTkxUCitiaW5kIEIzK1JpZ2h0IEhXSU5SVAorYmluZCBCNitMZWZ0IENIUkxUCitiaW5kIEI2K1JpZ2h0IENIUlJUCitiaW5kIEIyK0IzK0xlZnQgTVVURQorYmluZCBCMitCMytSaWdodCBTQVlfTElORQorCitpbmNsdWRlIGRvdHMua3RpCmRpZmYgLS1naXQgYS9UYWJsZXMvSW5wdXQvaHQvaW5wdXQua3RpIGIvVGFibGVzL0lucHV0L2h0L2lucHV0Lmt0aQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mOThmMTBjCi0tLSAvZGV2L251bGwKKysrIGIvVGFibGVzL0lucHV0L2h0L2lucHV0Lmt0aQpAQCAtMCwwICsxLDM3IEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisjICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorIworIyBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisjCisjIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisjCisjIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyMgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorIyBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyMKKyMgV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworIworIyBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworY29udGV4dCBicmFpbGxlIEJyYWlsbGUgSW5wdXQgTW9kZQorbWFwIEI0IERPVDEKK21hcCBCMyBET1QyCittYXAgQjIgRE9UMworbWFwIEI1IERPVDQKK21hcCBCNiBET1Q1CittYXAgQjcgRE9UNgorbWFwIEIxIERPVDcKK21hcCBCOCBET1Q4CitiaW5kIFx7c3BhY2V9IFBBU1NET1RTCitiaW5kIFx7ZW50ZXJ9IEtFWV9FTlRFUgorYmluZCBce3NwYWNlfStCMSBLRVlfQkFDS1NQQUNFCittYXAgXHtzcGFjZX0gQ09OVFJPTAorbWFwIFx7ZW50ZXJ9IE1FVEEKK2JpbmQgXHticmFpbGxlT2ZmfSBDT05URVhUK2RlZmF1bHQKKworY29udGV4dCBkZWZhdWx0CitiaW5kIFx7YnJhaWxsZU9ufSBDT05URVhUK2JyYWlsbGUKK2JpbmQgXHticmFpbGxlT2ZmfSBDT05URVhUK2RlZmF1bHQKZGlmZiAtLWdpdCBhL1RhYmxlcy9JbnB1dC9odC9qb3lzdGljay5rdGkgYi9UYWJsZXMvSW5wdXQvaHQvam95c3RpY2sua3RpCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc0YzNmMmMKLS0tIC9kZXYvbnVsbAorKysgYi9UYWJsZXMvSW5wdXQvaHQvam95c3RpY2sua3RpCkBAIC0wLDAgKzEsMjcgQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyMgICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisjCisjIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyMKKyMgQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjIEtleSBzdWJ0YWJsZSBmb3IgSGFuZHlUZWNoOiBBY3RpbGlubywgQWN0aXZhdG9yCisKK2JpbmQgTGVmdCBLRVlfQ1VSU09SX0xFRlQKK2JpbmQgUmlnaHQgS0VZX0NVUlNPUl9SSUdIVAorYmluZCBVcCBLRVlfQ1VSU09SX1VQCitiaW5kIERvd24gS0VZX0NVUlNPUl9ET1dOCitiaW5kIEFjdGlvbiBLRVlfRU5URVIKKworCmRpZmYgLS1naXQgYS9UYWJsZXMvSW5wdXQvaHQva2V5cGFkLmt0aSBiL1RhYmxlcy9JbnB1dC9odC9rZXlwYWQua3RpCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI4ZTM3ZDYKLS0tIC9kZXYvbnVsbAorKysgYi9UYWJsZXMvSW5wdXQvaHQva2V5cGFkLmt0aQpAQCAtMCwwICsxLDEwNCBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorIyAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyMKKyMgQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorIworIyBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorIworIyBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisjIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyMgbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisjCisjIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMgS2V5IHN1YnRhYmxlIGZvciBIYW5keVRlY2gga2V5cGFkIGtleXMKK25vdGUgVGhlIDE2LWtleSBwYWQgaXMgYXJyYW5nZWQgaW4gZm91ciBjb2x1bW5zIGFuZCBmb3VyIHJvd3MuCitub3RlICogVGhlIGtleXMgaW4gdGhlIGZpcnN0ICh0b3ApIHJvdyBhcmUgbmFtZWQ6IEI5LCBPbmUsIFR3bywgVGhyZWUuCitub3RlICogVGhlIGtleXMgaW4gdGhlIHNlY29uZCByb3cgYXJlIG5hbWVkOiBCMTAsIEZvdXIsIEZpdmUsIFNpeC4KK25vdGUgKiBUaGUga2V5cyBpbiB0aGUgdGhpcmQgcm93IGFyZSBuYW1lZDogQjExLCBTZXZlbiwgRWlnaHQsIE5pbmUuCitub3RlICogVGhlIGtleXMgaW4gdGhlIGZvdXJ0aCAoYm90dG9tKSByb3cgYXJlIG5hbWVkOiBCMTIsIEIxMywgWmVybywgQjE0LgorCitiaW5kIEI5IFNBWV9BQk9WRQorYmluZCBCMTAgU0FZX0xJTkUKK2JpbmQgQjExIFNBWV9CRUxPVworYmluZCBCMTIgTVVURQorYmluZCBaZXJvIFNQS0hPTUUKK2JpbmQgQjEzIFNXSVRDSFZUX1BSRVYKK2JpbmQgQjE0IFNXSVRDSFZUX05FWFQKK2JpbmQgRWlnaHQgTUVOVV9QUkVWX0lURU0KK2JpbmQgTmluZSBNRU5VX0ZJUlNUX0lURU0KK2JpbmQgRm91ciBNRU5VX1BSRVZfU0VUVElORworYmluZCBGaXZlIFBSRUZTQVZFCitiaW5kIFNpeCBNRU5VX05FWFRfU0VUVElORworYmluZCBPbmUgUFJFRk1FTlUKK2JpbmQgVHdvIE1FTlVfTkVYVF9JVEVNCitiaW5kIFRocmVlIE1FTlVfTEFTVF9JVEVNCisKK2JpbmQgWmVybytTZXZlbiBLRVlfSE9NRQorYmluZCBaZXJvK0VpZ2h0IEtFWV9DVVJTT1JfVVAKK2JpbmQgWmVybytOaW5lIEtFWV9QQUdFX1VQCitiaW5kIFplcm8rRm91ciBLRVlfQ1VSU09SX0xFRlQKK2JpbmQgWmVybytTaXggS0VZX0NVUlNPUl9SSUdIVAorYmluZCBaZXJvK09uZSBLRVlfRU5ECitiaW5kIFplcm8rVHdvIEtFWV9DVVJTT1JfRE9XTgorYmluZCBaZXJvK1RocmVlIEtFWV9QQUdFX0RPV04KK2JpbmQgWmVybytCMTMgS0VZX0lOU0VSVAorYmluZCBaZXJvK0IxNCBLRVlfREVMRVRFCisKK2JpbmQgQjkrT25lIFNFVE1BUksrMAorYmluZCBCOStUd28gU0VUTUFSSysxCitiaW5kIEI5K1RocmVlIFNFVE1BUksrMgorYmluZCBCOStGb3VyIFNFVE1BUksrMworYmluZCBCOStGaXZlIFNFVE1BUksrNAorYmluZCBCOStTaXggU0VUTUFSSys1CitiaW5kIEI5K1NldmVuIFNFVE1BUksrNgorYmluZCBCOStFaWdodCBTRVRNQVJLKzcKK2JpbmQgQjkrTmluZSBTRVRNQVJLKzgKK2JpbmQgQjkrWmVybyBTRVRNQVJLKzkKK2JpbmQgQjkrQjEzIFNFVE1BUksrMTAKK2JpbmQgQjkrQjE0IFNFVE1BUksrMTEKKworYmluZCBCMTArT25lIEdPVE9NQVJLKzAKK2JpbmQgQjEwK1R3byBHT1RPTUFSSysxCitiaW5kIEIxMCtUaHJlZSBHT1RPTUFSSysyCitiaW5kIEIxMCtGb3VyIEdPVE9NQVJLKzMKK2JpbmQgQjEwK0ZpdmUgR09UT01BUksrNAorYmluZCBCMTArU2l4IEdPVE9NQVJLKzUKK2JpbmQgQjEwK1NldmVuIEdPVE9NQVJLKzYKK2JpbmQgQjEwK0VpZ2h0IEdPVE9NQVJLKzcKK2JpbmQgQjEwK05pbmUgR09UT01BUksrOAorYmluZCBCMTArWmVybyBHT1RPTUFSSys5CitiaW5kIEIxMCtCMTMgR09UT01BUksrMTAKK2JpbmQgQjEwK0IxNCBHT1RPTUFSSysxMQorCitiaW5kIEIxMStPbmUgU1dJVENIVlQrMAorYmluZCBCMTErVHdvIFNXSVRDSFZUKzEKK2JpbmQgQjExK1RocmVlIFNXSVRDSFZUKzIKK2JpbmQgQjExK0ZvdXIgU1dJVENIVlQrMworYmluZCBCMTErRml2ZSBTV0lUQ0hWVCs0CitiaW5kIEIxMStTaXggU1dJVENIVlQrNQorYmluZCBCMTErU2V2ZW4gU1dJVENIVlQrNgorYmluZCBCMTErRWlnaHQgU1dJVENIVlQrNworYmluZCBCMTErTmluZSBTV0lUQ0hWVCs4CitiaW5kIEIxMStaZXJvIFNXSVRDSFZUKzkKK2JpbmQgQjExK0IxMyBTV0lUQ0hWVCsxMAorYmluZCBCMTErQjE0IFNXSVRDSFZUKzExCisKK2JpbmQgQjEyK09uZSBLRVlfRlVOQ1RJT04rMAorYmluZCBCMTIrVHdvIEtFWV9GVU5DVElPTisxCitiaW5kIEIxMitUaHJlZSBLRVlfRlVOQ1RJT04rMgorYmluZCBCMTIrRm91ciBLRVlfRlVOQ1RJT04rMworYmluZCBCMTIrRml2ZSBLRVlfRlVOQ1RJT04rNAorYmluZCBCMTIrU2l4IEtFWV9GVU5DVElPTis1CitiaW5kIEIxMitTZXZlbiBLRVlfRlVOQ1RJT04rNgorYmluZCBCMTIrRWlnaHQgS0VZX0ZVTkNUSU9OKzcKK2JpbmQgQjEyK05pbmUgS0VZX0ZVTkNUSU9OKzgKK2JpbmQgQjEyK1plcm8gS0VZX0ZVTkNUSU9OKzkKK2JpbmQgQjEyK0IxMyBLRVlfRlVOQ1RJT04rMTAKK2JpbmQgQjEyK0IxNCBLRVlfRlVOQ1RJT04rMTEKKwpkaWZmIC0tZ2l0IGEvVGFibGVzL0lucHV0L2h0L21jODgua3RiIGIvVGFibGVzL0lucHV0L2h0L21jODgua3RiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ5NWE0MzEKLS0tIC9kZXYvbnVsbAorKysgYi9UYWJsZXMvSW5wdXQvaHQvbWM4OC5rdGIKQEAgLTAsMCArMSwyMiBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorIyAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyMKKyMgQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorIworIyBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorIworIyBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisjIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyMgbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisjCisjIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK3RpdGxlIEhhbmR5VGVjaCBNb2R1bGFyIENvbm5lY3QgODgKKworaW5jbHVkZSBtZS5rdGkKK2luY2x1ZGUga2V5cGFkLmt0aQpkaWZmIC0tZ2l0IGEvVGFibGVzL0lucHV0L2h0L21kbHIua3RiIGIvVGFibGVzL0lucHV0L2h0L21kbHIua3RiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNiMWIyNWQKLS0tIC9kZXYvbnVsbAorKysgYi9UYWJsZXMvSW5wdXQvaHQvbWRsci5rdGIKQEAgLTAsMCArMSw0OCBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorIyAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyMKKyMgQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorIworIyBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorIworIyBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisjIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyMgbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisjCisjIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK3RpdGxlIEhhbmR5VGVjaCBNb2R1bGFyCisKK2JpbmQgUm91dGluZ0tleSBST1VURQorYmluZCBSb3V0aW5nS2V5KyFSb3V0aW5nS2V5IENMSVBfQ09QWQorCitiaW5kIExlZnQrUm91dGluZ0tleSBQUklOREVOVAorYmluZCBSaWdodCtSb3V0aW5nS2V5IE5YSU5ERU5UCisKK2JpbmQgTGVmdCBGV0lOTFQKK2JpbmQgUmlnaHQgRldJTlJUCitiaW5kIExlZnQrUmlnaHQgUEFTVEUKKworYmluZCBCMStMZWZ0IExOQkVHCitiaW5kIEIxK1JpZ2h0IExORU5ECitiaW5kIEIyK0xlZnQgVE9QCitiaW5kIEIyK1JpZ2h0IEJPVAorYmluZCBCMytMZWZ0IEhXSU5MVAorYmluZCBCMytSaWdodCBIV0lOUlQKK2JpbmQgQjYrTGVmdCBDSFJMVAorYmluZCBCNitSaWdodCBDSFJSVAorYmluZCBCMitCMytMZWZ0IE1VVEUKK2JpbmQgQjIrQjMrUmlnaHQgU0FZX0xJTkUKKworYmluZCBTdGF0dXMxIEhFTFAKK2JpbmQgU3RhdHVzMiBQUkVGTUVOVQorYmluZCBTdGF0dXMzIElORk8KK2JpbmQgU3RhdHVzNCBGUkVFWkUKKworaW5jbHVkZSBkb3RzLmt0aQoraW5jbHVkZSBrZXlwYWQua3RpCmRpZmYgLS1naXQgYS9UYWJsZXMvSW5wdXQvaHQvbWUua3RpIGIvVGFibGVzL0lucHV0L2h0L21lLmt0aQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OTZiNDU3Ci0tLSAvZGV2L251bGwKKysrIGIvVGFibGVzL0lucHV0L2h0L21lLmt0aQpAQCAtMCwwICsxLDQ2IEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisjICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorIworIyBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisjCisjIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisjCisjIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyMgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorIyBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyMKKyMgV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworIworIyBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIyBLZXkgc3VidGFibGUgZm9yIEhhbmR5VGVjaCBNb2R1bGFyIEV2b2x1dGlvbgorCitiaW5kIExlZnQgRldJTkxUCitiaW5kIFJpZ2h0IEZXSU5SVAoraW5jbHVkZSByb2NrZXJzLmt0aQorCitiaW5kIFJvdXRpbmdLZXkgUk9VVEUKK2JpbmQgUm91dGluZ0tleSshUm91dGluZ0tleSBDTElQX0NPUFkKKworYmluZCBMZWZ0K1JvdXRpbmdLZXkgUFJJTkRFTlQKK2JpbmQgUmlnaHQrUm91dGluZ0tleSBOWElOREVOVAorCitiaW5kIExlZnQrUmlnaHQgUEFTVEUKKworYmluZCBCMStMZWZ0IExOQkVHCitiaW5kIEIxK1JpZ2h0IExORU5ECitiaW5kIEIyK0xlZnQgVE9QCitiaW5kIEIyK1JpZ2h0IEJPVAorYmluZCBCMytMZWZ0IEhXSU5MVAorYmluZCBCMytSaWdodCBIV0lOUlQKK2JpbmQgQjYrTGVmdCBDSFJMVAorYmluZCBCNitSaWdodCBDSFJSVAorYmluZCBCMitCMytMZWZ0IE1VVEUKK2JpbmQgQjIrQjMrUmlnaHQgU0FZX0xJTkUKKworYmluZCBCMStCNCtMZWZ0IFRPVUNIX05BVgorCitpbmNsdWRlIGRvdHMua3RpCmRpZmYgLS1naXQgYS9UYWJsZXMvSW5wdXQvaHQvbWU2NC5rdGIgYi9UYWJsZXMvSW5wdXQvaHQvbWU2NC5rdGIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTc1ZjRlYgotLS0gL2Rldi9udWxsCisrKyBiL1RhYmxlcy9JbnB1dC9odC9tZTY0Lmt0YgpAQCAtMCwwICsxLDIxIEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisjICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorIworIyBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisjCisjIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisjCisjIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyMgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorIyBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyMKKyMgV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworIworIyBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKwordGl0bGUgSGFuZHlUZWNoIE1vZHVsYXIgRXZvbHV0aW9uIDY0CisKK2luY2x1ZGUgbWUua3RpCmRpZmYgLS1naXQgYS9UYWJsZXMvSW5wdXQvaHQvbWU4OC5rdGIgYi9UYWJsZXMvSW5wdXQvaHQvbWU4OC5rdGIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWYxYjU3OQotLS0gL2Rldi9udWxsCisrKyBiL1RhYmxlcy9JbnB1dC9odC9tZTg4Lmt0YgpAQCAtMCwwICsxLDIyIEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisjICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorIworIyBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisjCisjIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisjCisjIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyMgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorIyBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyMKKyMgV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworIworIyBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKwordGl0bGUgSGFuZHlUZWNoIE1vZHVsYXIgRXZvbHV0aW9uIDg4CisKK2luY2x1ZGUgbWUua3RpCitpbmNsdWRlIGtleXBhZC5rdGkKZGlmZiAtLWdpdCBhL1RhYmxlcy9JbnB1dC9odC9yb2NrZXJzLmt0aSBiL1RhYmxlcy9JbnB1dC9odC9yb2NrZXJzLmt0aQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZmYyNDEwCi0tLSAvZGV2L251bGwKKysrIGIvVGFibGVzL0lucHV0L2h0L3JvY2tlcnMua3RpCkBAIC0wLDAgKzEsNjggQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyMgICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisjCisjIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyMKKyMgQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjIEtleSBzdWJ0YWJsZSBmb3IgSGFuZHlUZWNoIHJvY2tlciBrZXlzCisKK2JpbmQgTGVmdFJvY2tlclRvcCBLRVlfQ1VSU09SX1VQCitiaW5kIExlZnRSb2NrZXJCb3R0b20gS0VZX0NVUlNPUl9ET1dOCitiaW5kIFJpZ2h0Um9ja2VyVG9wIExOVVAKK2JpbmQgUmlnaHRSb2NrZXJCb3R0b20gTE5ETgorYmluZCBMZWZ0Um9ja2VyVG9wK0xlZnRSb2NrZXJCb3R0b20gRldJTkxUCitiaW5kIFJpZ2h0Um9ja2VyVG9wK1JpZ2h0Um9ja2VyQm90dG9tIEZXSU5SVAorYmluZCBMZWZ0Um9ja2VyVG9wK0xlZnRSb2NrZXJCb3R0b20rUmlnaHRSb2NrZXJUb3ArUmlnaHRSb2NrZXJCb3R0b20gSE9NRQorYmluZCBMZWZ0Um9ja2VyVG9wK0xlZnRSb2NrZXJCb3R0b20rQjMgSE9NRQorYmluZCBSaWdodFJvY2tlclRvcCtSaWdodFJvY2tlckJvdHRvbStCNiBIT01FCitiaW5kIFJpZ2h0Um9ja2VyVG9wK1JpZ2h0Um9ja2VyQm90dG9tK0xlZnRSb2NrZXJUb3AgVE9QX0xFRlQKK2JpbmQgUmlnaHRSb2NrZXJUb3ArUmlnaHRSb2NrZXJCb3R0b20rQjUgVE9QX0xFRlQKK2JpbmQgTGVmdFJvY2tlclRvcCtCMyBUT1BfTEVGVAorYmluZCBSaWdodFJvY2tlclRvcCtSaWdodFJvY2tlckJvdHRvbStMZWZ0Um9ja2VyQm90dG9tIEJPVF9MRUZUCitiaW5kIFJpZ2h0Um9ja2VyVG9wK1JpZ2h0Um9ja2VyQm90dG9tK0I3IEJPVF9MRUZUCitiaW5kIExlZnRSb2NrZXJCb3R0b20rQjMgQk9UX0xFRlQKK2JpbmQgTGVmdFJvY2tlclRvcCtMZWZ0Um9ja2VyQm90dG9tK1JpZ2h0Um9ja2VyVG9wIFRPUAorYmluZCBMZWZ0Um9ja2VyVG9wK0xlZnRSb2NrZXJCb3R0b20rQjQgVE9QCitiaW5kIFJpZ2h0Um9ja2VyVG9wK0I2IFRPUAorYmluZCBMZWZ0Um9ja2VyVG9wK0xlZnRSb2NrZXJCb3R0b20rUmlnaHRSb2NrZXJCb3R0b20gQk9UCitiaW5kIExlZnRSb2NrZXJUb3ArTGVmdFJvY2tlckJvdHRvbStCMiBCT1QKK2JpbmQgUmlnaHRSb2NrZXJCb3R0b20rQjYgQk9UCitiaW5kIExlZnRSb2NrZXJUb3ArUmlnaHRSb2NrZXJUb3AgUFJESUZMTgorYmluZCBMZWZ0Um9ja2VyVG9wK0I0IFBSRElGTE4KK2JpbmQgUmlnaHRSb2NrZXJUb3ArQjUgUFJESUZMTgorYmluZCBMZWZ0Um9ja2VyVG9wK1JpZ2h0Um9ja2VyQm90dG9tIE5YRElGTE4KK2JpbmQgTGVmdFJvY2tlclRvcCtCMiBOWERJRkxOCitiaW5kIFJpZ2h0Um9ja2VyQm90dG9tK0I1IE5YRElGTE4KK2JpbmQgTGVmdFJvY2tlckJvdHRvbStSaWdodFJvY2tlclRvcCBBVFRSVVAKK2JpbmQgTGVmdFJvY2tlckJvdHRvbStCNCBBVFRSVVAKK2JpbmQgUmlnaHRSb2NrZXJUb3ArQjcgQVRUUlVQCitiaW5kIExlZnRSb2NrZXJCb3R0b20rUmlnaHRSb2NrZXJCb3R0b20gQVRUUkROCitiaW5kIExlZnRSb2NrZXJCb3R0b20rQjIgQVRUUkROCitiaW5kIFJpZ2h0Um9ja2VyQm90dG9tK0I3IEFUVFJETgorCitiaW5kIExlZnRSb2NrZXJUb3ArUm91dGluZ0tleSBDTElQX05FVworYmluZCBMZWZ0Um9ja2VyVG9wK0xlZnRSb2NrZXJCb3R0b20rUm91dGluZ0tleSBLRVlfRlVOQ1RJT04KK2JpbmQgTGVmdFJvY2tlckJvdHRvbStSb3V0aW5nS2V5IENMSVBfQURECitiaW5kIFJpZ2h0Um9ja2VyVG9wK1JvdXRpbmdLZXkgQ09QWV9MSU5FCitiaW5kIFJpZ2h0Um9ja2VyVG9wK1JpZ2h0Um9ja2VyQm90dG9tK1JvdXRpbmdLZXkgU1dJVENIVlQKK2JpbmQgUmlnaHRSb2NrZXJCb3R0b20rUm91dGluZ0tleSBDT1BZX1JFQ1QKKworCitjb250ZXh0IG1lbnUKK2JpbmQgUmlnaHRSb2NrZXJUb3AgTUVOVV9QUkVWX0lURU0KK2JpbmQgUmlnaHRSb2NrZXJCb3R0b20gTUVOVV9ORVhUX0lURU0KK2JpbmQgTGVmdFJvY2tlclRvcCBNRU5VX1BSRVZfU0VUVElORworYmluZCBMZWZ0Um9ja2VyQm90dG9tIE1FTlVfTkVYVF9TRVRUSU5HCisKZGlmZiAtLWdpdCBhL1RhYmxlcy9JbnB1dC9odC93YXZlLmt0YiBiL1RhYmxlcy9JbnB1dC9odC93YXZlLmt0YgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNjBlNjYzCi0tLSAvZGV2L251bGwKKysrIGIvVGFibGVzL0lucHV0L2h0L3dhdmUua3RiCkBAIC0wLDAgKzEsNDEgQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyMgICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisjCisjIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyMKKyMgQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCit0aXRsZSBIYW5keVRlY2ggQnJhaWxsZSBXYXZlCisKK2JpbmQgTGVmdCBGV0lOTFQKK2JpbmQgUmlnaHQgRldJTlJUCisKK2JpbmQgUm91dGluZ0tleSBST1VURQorYmluZCBSb3V0aW5nS2V5KyFSb3V0aW5nS2V5IENMSVBfQ09QWQorCitiaW5kIExlZnQrUm91dGluZ0tleSBQUklOREVOVAorYmluZCBSaWdodCtSb3V0aW5nS2V5IE5YSU5ERU5UCisKK2JpbmQgTGVmdCtSaWdodCBQQVNURQorCitpbmNsdWRlIGRvdHMua3RpCisKK2JpbmQgRXNjYXBlK1NwYWNlK1JldHVybiBJTkZPCisKK2Fzc2lnbiBicmFpbGxlT24gQjErQjgrUmlnaHQKK2Fzc2lnbiBicmFpbGxlT2ZmIEIxK0I4K0xlZnQKK2Fzc2lnbiBzcGFjZSBTcGFjZQorYXNzaWduIGVudGVyIFJldHVybgoraW5jbHVkZSBpbnB1dC5rdGkKKwpkaWZmIC0tZ2l0IGEvVGFibGVzL0lucHV0L2h3L0I4MC5rdGIgYi9UYWJsZXMvSW5wdXQvaHcvQjgwLmt0YgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MWJiMjA1Ci0tLSAvZGV2L251bGwKKysrIGIvVGFibGVzL0lucHV0L2h3L0I4MC5rdGIKQEAgLTAsMCArMSwyMiBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorIyAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyMKKyMgQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorIworIyBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorIworIyBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisjIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyMgbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisjCisjIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK3RpdGxlIEh1bWFuV2FyZSBCcmFpbGxpYW50IEIgODAKKworaW5jbHVkZSB0aHVtYi5rdGkKK2luY2x1ZGUgY29tbWFuZC5rdGkKZGlmZiAtLWdpdCBhL1RhYmxlcy9JbnB1dC9ody9CSTE0Lmt0YiBiL1RhYmxlcy9JbnB1dC9ody9CSTE0Lmt0YgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMWYyYTAzCi0tLSAvZGV2L251bGwKKysrIGIvVGFibGVzL0lucHV0L2h3L0JJMTQua3RiCkBAIC0wLDAgKzEsMjQgQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyMgICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisjCisjIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyMKKyMgQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCit0aXRsZSBIdW1hbldhcmUgQnJhaWxsaWFudCBCSSAxNAorCitpbmNsdWRlIHRodW1iLmt0aQoraW5jbHVkZSBicmFpbGxlLmt0aQoraW5jbHVkZSBqb3lzdGljay5rdGkKK2luY2x1ZGUgcm91dGluZy5rdGkKZGlmZiAtLWdpdCBhL1RhYmxlcy9JbnB1dC9ody9CSTIwWC5rdGIgYi9UYWJsZXMvSW5wdXQvaHcvQkkyMFgua3RiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI0ZTcxMDcKLS0tIC9kZXYvbnVsbAorKysgYi9UYWJsZXMvSW5wdXQvaHcvQkkyMFgua3RiCkBAIC0wLDAgKzEsMjMgQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyMgICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisjCisjIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyMKKyMgQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCit0aXRsZSBIdW1hbldhcmUgQnJhaWxsaWFudCBCSSAyMFgKKworaW5jbHVkZSB0aHVtYi5rdGkKK2luY2x1ZGUgYnJhaWxsZS5rdGkKK2luY2x1ZGUgcm91dGluZy5rdGkKZGlmZiAtLWdpdCBhL1RhYmxlcy9JbnB1dC9ody9CSTMyLmt0YiBiL1RhYmxlcy9JbnB1dC9ody9CSTMyLmt0YgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZDU0NTQwCi0tLSAvZGV2L251bGwKKysrIGIvVGFibGVzL0lucHV0L2h3L0JJMzIua3RiCkBAIC0wLDAgKzEsMjMgQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyMgICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisjCisjIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyMKKyMgQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCit0aXRsZSBIdW1hbldhcmUgQnJhaWxsaWFudCBCSSAzMgorCitpbmNsdWRlIHRodW1iLmt0aQoraW5jbHVkZSBicmFpbGxlLmt0aQoraW5jbHVkZSBjb21tYW5kLmt0aQpkaWZmIC0tZ2l0IGEvVGFibGVzL0lucHV0L2h3L0JJNDAua3RiIGIvVGFibGVzL0lucHV0L2h3L0JJNDAua3RiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIwNmFjYmYKLS0tIC9kZXYvbnVsbAorKysgYi9UYWJsZXMvSW5wdXQvaHcvQkk0MC5rdGIKQEAgLTAsMCArMSwyMyBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorIyAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyMKKyMgQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorIworIyBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorIworIyBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisjIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyMgbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisjCisjIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK3RpdGxlIEh1bWFuV2FyZSBCcmFpbGxpYW50IEJJIDQwCisKK2luY2x1ZGUgdGh1bWIua3RpCitpbmNsdWRlIGJyYWlsbGUua3RpCitpbmNsdWRlIGNvbW1hbmQua3RpCmRpZmYgLS1naXQgYS9UYWJsZXMvSW5wdXQvaHcvQkk0MFgua3RiIGIvVGFibGVzL0lucHV0L2h3L0JJNDBYLmt0YgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NTdmZmNiCi0tLSAvZGV2L251bGwKKysrIGIvVGFibGVzL0lucHV0L2h3L0JJNDBYLmt0YgpAQCAtMCwwICsxLDIzIEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisjICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorIworIyBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisjCisjIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisjCisjIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyMgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorIyBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyMKKyMgV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworIworIyBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKwordGl0bGUgSHVtYW5XYXJlIEJyYWlsbGlhbnQgQkkgNDBYCisKK2luY2x1ZGUgdGh1bWIua3RpCitpbmNsdWRlIGJyYWlsbGUua3RpCitpbmNsdWRlIGNvbW1hbmQua3RpCmRpZmYgLS1naXQgYS9UYWJsZXMvSW5wdXQvaHcvQzIwLmt0YiBiL1RhYmxlcy9JbnB1dC9ody9DMjAua3RiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcwNmFjMjgKLS0tIC9kZXYvbnVsbAorKysgYi9UYWJsZXMvSW5wdXQvaHcvQzIwLmt0YgpAQCAtMCwwICsxLDIzIEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisjICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorIworIyBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisjCisjIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisjCisjIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyMgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorIyBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyMKKyMgV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworIworIyBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKwordGl0bGUgQVBIIENoYW1lbGVvbiAyMAorCitpbmNsdWRlIHRodW1iLmt0aQoraW5jbHVkZSBicmFpbGxlLmt0aQoraW5jbHVkZSByb3V0aW5nLmt0aQpkaWZmIC0tZ2l0IGEvVGFibGVzL0lucHV0L2h3L000MC5rdGIgYi9UYWJsZXMvSW5wdXQvaHcvTTQwLmt0YgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNWU1YmU5Ci0tLSAvZGV2L251bGwKKysrIGIvVGFibGVzL0lucHV0L2h3L000MC5rdGIKQEAgLTAsMCArMSwyMiBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorIyAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyMKKyMgQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorIworIyBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorIworIyBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisjIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyMgbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisjCisjIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK3RpdGxlIEFQSCBNYW50aXMgUTQwCisKK2luY2x1ZGUgdGh1bWIua3RpCitpbmNsdWRlIHJvdXRpbmcua3RpCmRpZmYgLS1naXQgYS9UYWJsZXMvSW5wdXQvaHcvTkxTLmt0YiBiL1RhYmxlcy9JbnB1dC9ody9OTFMua3RiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMxYTQxYWEKLS0tIC9kZXYvbnVsbAorKysgYi9UYWJsZXMvSW5wdXQvaHcvTkxTLmt0YgpAQCAtMCwwICsxLDIzIEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisjICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorIworIyBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisjCisjIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisjCisjIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyMgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorIyBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyMKKyMgV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworIworIyBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKwordGl0bGUgTkxTIGVSZWFkZXIKKworaW5jbHVkZSB0aHVtYi5rdGkKK2luY2x1ZGUgYnJhaWxsZS5rdGkKK2luY2x1ZGUgcm91dGluZy5rdGkKZGlmZiAtLWdpdCBhL1RhYmxlcy9JbnB1dC9ody9icmFpbGxlLmt0aSBiL1RhYmxlcy9JbnB1dC9ody9icmFpbGxlLmt0aQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNzM1ZGJiCi0tLSAvZGV2L251bGwKKysrIGIvVGFibGVzL0lucHV0L2h3L2JyYWlsbGUua3RpCkBAIC0wLDAgKzEsNDEgQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyMgICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisjCisjIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyMKKyMgQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitub3RlIFRoZXJlJ3MgYW4gZWlnaHQta2V5IGJyYWlsbGUga2V5Ym9hcmQgbmVhciB0aGUgYmFjayBvZiB0aGUgdG9wLgorbm90ZSAqIEZyb20gbGVmdCB0byByaWdodCwgaXRzIGtleXMgYXJlOiBEb3Q3LCBEb3QzLCBEb3QyLCBEb3QxLCBEb3Q0LCBEb3Q1LCBEb3Q2LCBEb3Q4LgorCithc3NpZ24gY2hvcmQgU3BhY2UrCitpbmNsdWRlIC4uL2Nob3Jkcy5rdGkKKworbWFwIERvdDEgRE9UMQorbWFwIERvdDIgRE9UMgorbWFwIERvdDMgRE9UMworbWFwIERvdDQgRE9UNAorbWFwIERvdDUgRE9UNQorbWFwIERvdDYgRE9UNgorbWFwIERvdDcgRE9UNworbWFwIERvdDggRE9UOAorbWFwIFNwYWNlIFNQQUNFCittYXAgVGh1bWJMZWZ0IE1FVEEKK21hcCBUaHVtYlJpZ2h0IENPTlRST0wKKworYmluZCBTcGFjZStSb3V0aW5nS2V5IEtFWV9GVU5DVElPTgorYmluZCBUaHVtYkxlZnQrU3BhY2UrUm91dGluZ0tleSBLRVlfRlVOQ1RJT04rbWV0YQorYmluZCBUaHVtYlJpZ2h0K1NwYWNlK1JvdXRpbmdLZXkgS0VZX0ZVTkNUSU9OK2NvbnRyb2wKK2JpbmQgVGh1bWJMZWZ0K1RodW1iUmlnaHQrU3BhY2UrUm91dGluZ0tleSBLRVlfRlVOQ1RJT04rbWV0YStjb250cm9sCisKZGlmZiAtLWdpdCBhL1RhYmxlcy9JbnB1dC9ody9jb21tYW5kLmt0aSBiL1RhYmxlcy9JbnB1dC9ody9jb21tYW5kLmt0aQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMDAyOWVjCi0tLSAvZGV2L251bGwKKysrIGIvVGFibGVzL0lucHV0L2h3L2NvbW1hbmQua3RpCkBAIC0wLDAgKzEsMjAgQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyMgICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisjCisjIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyMKKyMgQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitpbmNsdWRlIC4uL2JtL2Rpc3BsYXk2Lmt0aQoraW5jbHVkZSAuLi9ibS9yb3V0aW5nNi5rdGkKZGlmZiAtLWdpdCBhL1RhYmxlcy9JbnB1dC9ody9qb3lzdGljay5rdGkgYi9UYWJsZXMvSW5wdXQvaHcvam95c3RpY2sua3RpCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFjZjhhNDQKLS0tIC9kZXYvbnVsbAorKysgYi9UYWJsZXMvSW5wdXQvaHcvam95c3RpY2sua3RpCkBAIC0wLDAgKzEsODIgQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyMgICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisjCisjIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyMKKyMgQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitub3RlIFRoZXJlJ3MgYSBmaXZlLXdheSBqb3lzdGljayBiZXR3ZWVuIHRoZSBEb3QxIGFuZCBEb3Q0IGtleXMuCitub3RlICogVGhlIGZvdXIgZGlyZWN0aW9ucyBhcmUgaW50dWl0aXZlbHkgbmFtZWQ6IFVwLCBEb3duLCBMZWZ0LCBSaWdodC4KK25vdGUgKiBQcmVzc2luZyB0aGUgam95c3RpY2sgaXMgbmFtZWQ6IEFjdGlvbi4KKworYmluZCBVcCBMTlVQCitiaW5kIERvd24gTE5ETgorYmluZCBMZWZ0IEZXSU5MVAorYmluZCBSaWdodCBGV0lOUlQKK2JpbmQgQWN0aW9uIEhPTUUKKworYmluZCBEb3QxK1VwIFRPUAorYmluZCBEb3QxK0Rvd24gQk9UCitiaW5kIERvdDErTGVmdCBMTkJFRworYmluZCBEb3QxK1JpZ2h0IExORU5ECitiaW5kIERvdDErQWN0aW9uIEJBQ0sKKworYmluZCBEb3QyK1VwIEtFWV9DVVJTT1JfVVAKK2JpbmQgRG90MitEb3duIEtFWV9DVVJTT1JfRE9XTgorYmluZCBEb3QyK0xlZnQgS0VZX0NVUlNPUl9MRUZUCitiaW5kIERvdDIrUmlnaHQgS0VZX0NVUlNPUl9SSUdIVAorYmluZCBEb3QyK0FjdGlvbiBLRVlfREVMRVRFCisKK2JpbmQgRG90MytVcCBLRVlfUEFHRV9VUAorYmluZCBEb3QzK0Rvd24gS0VZX1BBR0VfRE9XTgorYmluZCBEb3QzK0xlZnQgS0VZX0hPTUUKK2JpbmQgRG90MytSaWdodCBLRVlfRU5ECitiaW5kIERvdDMrQWN0aW9uIEtFWV9JTlNFUlQKKworYmluZCBEb3Q0K1VwIFBSUFJPTVBUCitiaW5kIERvdDQrRG93biBOWFBST01QVAorYmluZCBEb3Q0K0xlZnQgUFJQR1JQSAorYmluZCBEb3Q0K1JpZ2h0IE5YUEdSUEgKK2JpbmQgRG90NCtBY3Rpb24gQ1NSVFJLCisKK2JpbmQgRG90NStVcCBQUkRJRkxOCitiaW5kIERvdDUrRG93biBOWERJRkxOCitiaW5kIERvdDUrTGVmdCBGV0lOTFRTS0lQCitiaW5kIERvdDUrUmlnaHQgRldJTlJUU0tJUAorYmluZCBEb3Q1K0FjdGlvbiBDU1JWSVMKKworYmluZCBEb3Q2K1VwIEFUVFJVUAorYmluZCBEb3Q2K0Rvd24gQVRUUkROCitiaW5kIERvdDYrTGVmdCBDSFJMVAorYmluZCBEb3Q2K1JpZ2h0IENIUlJUCitiaW5kIERvdDYrQWN0aW9uIEFUVFJWSVMKKworYmluZCBEb3Q3K1VwIFNBWV9BQk9WRQorYmluZCBEb3Q3K0Rvd24gU0FZX0JFTE9XCitiaW5kIERvdDcrTGVmdCBNVVRFCitiaW5kIERvdDcrUmlnaHQgU0FZX0xJTkUKK2JpbmQgRG90NytBY3Rpb24gQVVUT1NQRUFLCisKK2JpbmQgRG90OCtVcCBTQVlfTE9VREVSCitiaW5kIERvdDgrRG93biBTQVlfU09GVEVSCitiaW5kIERvdDgrTGVmdCBTQVlfU0xPV0VSCitiaW5kIERvdDgrUmlnaHQgU0FZX0ZBU1RFUgorYmluZCBEb3Q4K0FjdGlvbiBTUEtIT01FCisKK2JpbmQgUm91dGluZ0tleStVcCBQUklOREVOVAorYmluZCBSb3V0aW5nS2V5K0Rvd24gTlhJTkRFTlQKK2JpbmQgUm91dGluZ0tleStMZWZ0IFBSRElGQ0hBUgorYmluZCBSb3V0aW5nS2V5K1JpZ2h0IE5YRElGQ0hBUgorYmluZCBSb3V0aW5nS2V5K0FjdGlvbiBERVNDQ0hBUgorCmRpZmYgLS1naXQgYS9UYWJsZXMvSW5wdXQvaHcvb25lLmt0YiBiL1RhYmxlcy9JbnB1dC9ody9vbmUua3RiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRlMDBjMjcKLS0tIC9kZXYvbnVsbAorKysgYi9UYWJsZXMvSW5wdXQvaHcvb25lLmt0YgpAQCAtMCwwICsxLDIzIEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisjICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorIworIyBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisjCisjIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisjCisjIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyMgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorIyBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyMKKyMgV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworIworIyBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKwordGl0bGUgSHVtYW5XYXJlIEJyYWlsbGVPbmUKKworaW5jbHVkZSB0aHVtYi5rdGkKK2luY2x1ZGUgYnJhaWxsZS5rdGkKK2luY2x1ZGUgcm91dGluZy5rdGkKZGlmZiAtLWdpdCBhL1RhYmxlcy9JbnB1dC9ody9yb3V0aW5nLmt0aSBiL1RhYmxlcy9JbnB1dC9ody9yb3V0aW5nLmt0aQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mODhiYzQ3Ci0tLSAvZGV2L251bGwKKysrIGIvVGFibGVzL0lucHV0L2h3L3JvdXRpbmcua3RpCkBAIC0wLDAgKzEsMjEgQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyMgICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisjCisjIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyMKKyMgQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitub3RlIFJvdXRpbmdLZXkgcmVmZXJzIHRvIGFueSBvZiB0aGUga2V5cyBpbW1lZGlhdGVseSBiZWhpbmQgdGhlIGJyYWlsbGUgY2VsbHMuCisKK2JpbmQgUm91dGluZ0tleSBST1VURQpkaWZmIC0tZ2l0IGEvVGFibGVzL0lucHV0L2h3L3RodW1iLmt0aSBiL1RhYmxlcy9JbnB1dC9ody90aHVtYi5rdGkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGFlMjE4NgotLS0gL2Rldi9udWxsCisrKyBiL1RhYmxlcy9JbnB1dC9ody90aHVtYi5rdGkKQEAgLTAsMCArMSw2OCBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorIyAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyMKKyMgQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorIworIyBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorIworIyBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisjIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyMgbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisjCisjIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK2Fzc2lnbkRlZmF1bHQgcHJldmlvdXMgVGh1bWJQcmV2aW91cworYXNzaWduRGVmYXVsdCBsZWZ0IFRodW1iTGVmdAorYXNzaWduRGVmYXVsdCByaWdodCBUaHVtYlJpZ2h0Cithc3NpZ25EZWZhdWx0IG5leHQgVGh1bWJOZXh0CisKK25vdGUgVGhlcmUgYXJlIGZvdXIgcmVjdGFuZ3VsYXIgdGh1bWIga2V5cyBvbiB0aGUgZnJvbnQuIEZyb20gbGVmdCB0byByaWdodDoKK25vdGUgKiBUaGUgb3V0ZXIgb25lcyBhcmUgbmFtZWQgVGh1bWJQcmV2aW91cyBhbmQgVGh1bWJOZXh0Lgorbm90ZSAqIFRoZSBpbm5lciBvbmVzIGFyZSBuYW1lZCBUaHVtYkxlZnQgYW5kIFRodW1iUmlnaHQuCitub3RlICogU29tZSBtb2RlbHMgaGF2ZSBhIHJvdW5kIGtleSBpbiB0aGUgbWlkZGxlIC0gaXQncyB0aGUgaW50ZXJuYWwgbWVudSBrZXkuCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIERlZmF1bHQgQmluZGluZ3MgIworIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworYmluZCBUaHVtYkxlZnQrVGh1bWJSaWdodCBIT01FCitiaW5kIFx7bGVmdH0gRldJTkxUCitiaW5kIFx7cmlnaHR9IEZXSU5SVAorYmluZCBce3ByZXZpb3VzfSBMTlVQCitiaW5kIFx7bmV4dH0gTE5ETgorCitiaW5kIFx7bGVmdH0rXHtwcmV2aW91c30gVE9QX0xFRlQKK2JpbmQgXHtsZWZ0fStce25leHR9IEJPVF9MRUZUCitiaW5kIFx7cmlnaHR9K1x7cHJldmlvdXN9IFBSRElGTE4KK2JpbmQgXHtyaWdodH0rXHtuZXh0fSBOWERJRkxOCisKK2JpbmQgVGh1bWJQcmV2aW91cytSb3V0aW5nS2V5IENMSVBfTkVXCitiaW5kIFRodW1iTGVmdCtSb3V0aW5nS2V5IENMSVBfQURECitiaW5kIFx7cmlnaHR9K1JvdXRpbmdLZXkgQ09QWV9MSU5FCitiaW5kIFx7bmV4dH0rUm91dGluZ0tleSBDT1BZX1JFQ1QKK2JpbmQgVGh1bWJQcmV2aW91cytUaHVtYk5leHQgUEFTVEUKKworCisjIyMjIyMjIyMjIyMjIyMjIworIyBNZW51IEJpbmRpbmdzICMKKyMjIyMjIyMjIyMjIyMjIyMjCisKK2NvbnRleHQgbWVudQorCitiaW5kIFx7bGVmdH0gRldJTkxUCitiaW5kIFx7cmlnaHR9IEZXSU5SVAorYmluZCBce3ByZXZpb3VzfSBNRU5VX1BSRVZfSVRFTQorYmluZCBce25leHR9IE1FTlVfTkVYVF9JVEVNCitiaW5kIFx7bGVmdH0rXHtwcmV2aW91c30gTUVOVV9GSVJTVF9JVEVNCitiaW5kIFx7bGVmdH0rXHtuZXh0fSBNRU5VX0xBU1RfSVRFTQorYmluZCBce3JpZ2h0fStce3ByZXZpb3VzfSBNRU5VX1BSRVZfU0VUVElORworYmluZCBce3JpZ2h0fStce25leHR9IE1FTlVfTkVYVF9TRVRUSU5HCitiaW5kIFRodW1iTGVmdCtUaHVtYlJpZ2h0IFBSRUZNRU5VCitiaW5kIFRodW1iTGVmdCtUaHVtYlJpZ2h0K1RodW1iUHJldmlvdXMgUFJFRkxPQUQKK2JpbmQgVGh1bWJMZWZ0K1RodW1iUmlnaHQrVGh1bWJOZXh0IFBSRUZTQVZFCisKZGlmZiAtLWdpdCBhL1RhYmxlcy9JbnB1dC9ody90aHVtYl9sZWdhY3kua3RpIGIvVGFibGVzL0lucHV0L2h3L3RodW1iX2xlZ2FjeS5rdGkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzRiMGNmMgotLS0gL2Rldi9udWxsCisrKyBiL1RhYmxlcy9JbnB1dC9ody90aHVtYl9sZWdhY3kua3RpCkBAIC0wLDAgKzEsMjcgQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyMgICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisjCisjIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyMKKyMgQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjIElmIHlvdSdkIGxpa2UgdG8gaGF2ZSB0aGUgb2xkIChwcmUtNi40KSB0aHVtYiBrZXkgYmluZGluZ3MgdGhlbgorIyBjb3B5IHRoaXMgZmlsZSBpbnRvIHRoZSB1c2VyIGN1c3RvbWl6YXRpb25zIGRpcmVjdG9yeSBsaWtlIHRoaXM6CisjIGNwIHRodW1iX2xlZ2FjeS5rdGkgL2V0Yy94ZGcvYnJsdHR5L3RodW1iLmt0aQorCithc3NpZ24gcHJldmlvdXMgVGh1bWJMZWZ0Cithc3NpZ24gbGVmdCBUaHVtYlByZXZpb3VzCithc3NpZ24gcmlnaHQgVGh1bWJOZXh0Cithc3NpZ24gbmV4dCBUaHVtYlJpZ2h0CitpbmNsdWRlIHRodW1iLmt0aQpkaWZmIC0tZ2l0IGEvVGFibGVzL0lucHV0L2h3L3RvdWNoLmt0YiBiL1RhYmxlcy9JbnB1dC9ody90b3VjaC5rdGIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjBlOTRmNAotLS0gL2Rldi9udWxsCisrKyBiL1RhYmxlcy9JbnB1dC9ody90b3VjaC5rdGIKQEAgLTAsMCArMSwyMyBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorIyAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyMKKyMgQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorIworIyBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorIworIyBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisjIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyMgbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisjCisjIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK3RpdGxlIEh1bWFuV2FyZSBCcmFpbGxlTm90ZSBUb3VjaAorCitpbmNsdWRlIHRodW1iLmt0aQoraW5jbHVkZSBicmFpbGxlLmt0aQoraW5jbHVkZSByb3V0aW5nLmt0aQpkaWZmIC0tZ2l0IGEvVGFibGVzL0lucHV0L2ljL2JiLmt0YiBiL1RhYmxlcy9JbnB1dC9pYy9iYi5rdGIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjJmZDU1YQotLS0gL2Rldi9udWxsCisrKyBiL1RhYmxlcy9JbnB1dC9pYy9iYi5rdGIKQEAgLTAsMCArMSwzOCBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorIyAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyMKKyMgQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorIworIyBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorIworIyBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisjIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyMgbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisjCisjIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK3RpdGxlIEJyYWlsbGVNZSAoaW4gQnJhaWxsZUJhY2sgbW9kZSkKKworaW5jbHVkZSBjb21tb24ua3RpCitpbmNsdWRlIGNob3Jkcy5rdGkKK2luY2x1ZGUgcm91dGUua3RpCisKK2JpbmQgU3BhY2UrRG90MSBUT1AKK2JpbmQgU3BhY2UrRG90NCBCT1QKKworYmluZCBTcGFjZStEb3Q0K0RvdDMgTE5CRUcKK2JpbmQgU3BhY2UrRG90NCtEb3Q2IExORU5ECisKK2JpbmQgU3BhY2UrRG90MStEb3QyIENPTlRFWFQrY2hvcmRzCitiaW5kIFNwYWNlK0RvdDIrRG90NCBSRVRVUk4KK2JpbmQgU3BhY2UrRG90MStEb3QyK0RvdDMrRG90NSBDT05URVhUK3JvdXRpbmdLZXlzCisKK2JpbmQgRG90OCtEb3QxK0RvdDIrRG90NCBDU1JUUksKK2JpbmQgRG90OCtEb3QxK0RvdDIrRG90MyBIRUxQCitiaW5kIERvdDgrRG90MitEb3QzK0RvdDQgUFJFRk1FTlUKKwpkaWZmIC0tZ2l0IGEvVGFibGVzL0lucHV0L2ljL2Nob3Jkcy5rdGkgYi9UYWJsZXMvSW5wdXQvaWMvY2hvcmRzLmt0aQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OGE2NjFjCi0tLSAvZGV2L251bGwKKysrIGIvVGFibGVzL0lucHV0L2ljL2Nob3Jkcy5rdGkKQEAgLTAsMCArMSwxMjYgQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyMgICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisjCisjIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyMKKyMgQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitjb250ZXh0IGNob3JkcworYmluZCBEb3Q3IENPTlRFWFQrdG9nZ2xlT2ZmCitiaW5kIERvdDggQ09OVEVYVCt0b2dnbGVPbgorCitiaW5kIERvdDErRG90MitEb3Q1IEhFTFAKK2JpbmQgRG90MStEb3QyK0RvdDMgTEVBUk4KK2JpbmQgRG90MitEb3QzK0RvdDQgSU5GTworICAgCitiaW5kIERvdDErRG90MitEb3QzK0RvdDQgUFJFRk1FTlUKK2JpbmQgRG90MStEb3QyK0RvdDMrRG90NiBDU1JKTVBfVkVSVAorYmluZCBEb3QxK0RvdDMrRG90NCtEb3Q2IFBBU1RFCisKK2JpbmQgRG90MitEb3QzK0RvdDUgU0lYRE9UUytvbgorYmluZCBEb3QyK0RvdDMrRG90NiBTSVhET1RTK29mZgorCitiZWdpblZhcmlhYmxlcworYXNzaWduIHRvZ2dsZUtleXMgRG90MStEb3QyCithc3NpZ24gdG9nZ2xlQ29tbWFuZCBTS1BCTE5LV0lOUworaW5jbHVkZSB0b2dnbGUua3RpCitlbmRWYXJpYWJsZXMKKworYmVnaW5WYXJpYWJsZXMKK2Fzc2lnbiB0b2dnbGVLZXlzIERvdDErRG90NAorYXNzaWduIHRvZ2dsZUNvbW1hbmQgQ1NSVklTCitpbmNsdWRlIHRvZ2dsZS5rdGkKK2VuZFZhcmlhYmxlcworCitiZWdpblZhcmlhYmxlcworYXNzaWduIHRvZ2dsZUtleXMgRG90MStEb3Q0K0RvdDUKK2Fzc2lnbiB0b2dnbGVDb21tYW5kIERJU1BNRAoraW5jbHVkZSB0b2dnbGUua3RpCitlbmRWYXJpYWJsZXMKKworYmVnaW5WYXJpYWJsZXMKK2Fzc2lnbiB0b2dnbGVLZXlzIERvdDErRG90MitEb3Q0Cithc3NpZ24gdG9nZ2xlQ29tbWFuZCBGUkVFWkUKK2luY2x1ZGUgdG9nZ2xlLmt0aQorZW5kVmFyaWFibGVzCisKK2JlZ2luVmFyaWFibGVzCithc3NpZ24gdG9nZ2xlS2V5cyBEb3QyK0RvdDQKK2Fzc2lnbiB0b2dnbGVDb21tYW5kIFNLUElETE5TCitpbmNsdWRlIHRvZ2dsZS5rdGkKK2VuZFZhcmlhYmxlcworCitiZWdpblZhcmlhYmxlcworYXNzaWduIHRvZ2dsZUtleXMgRG90MStEb3QyK0RvdDMrRG90NQorYXNzaWduIHRvZ2dsZUNvbW1hbmQgQVVUT1JFUEVBVAoraW5jbHVkZSB0b2dnbGUua3RpCitlbmRWYXJpYWJsZXMKKworYmVnaW5WYXJpYWJsZXMKK2Fzc2lnbiB0b2dnbGVLZXlzIERvdDIrRG90MytEb3Q0K0RvdDUKK2Fzc2lnbiB0b2dnbGVDb21tYW5kIENTUlRSSworaW5jbHVkZSB0b2dnbGUua3RpCitlbmRWYXJpYWJsZXMKKworYmVnaW5WYXJpYWJsZXMKK2Fzc2lnbiB0b2dnbGVLZXlzIERvdDErRG90MytEb3Q2Cithc3NpZ24gdG9nZ2xlQ29tbWFuZCBBVFRSVklTCitpbmNsdWRlIHRvZ2dsZS5rdGkKK2VuZFZhcmlhYmxlcworCitiZWdpblZhcmlhYmxlcworYXNzaWduIHRvZ2dsZUtleXMgRG90MitEb3Q0K0RvdDUrRG90NgorYXNzaWduIHRvZ2dsZUNvbW1hbmQgU0xJREVXSU4KK2luY2x1ZGUgdG9nZ2xlLmt0aQorZW5kVmFyaWFibGVzCisKK2JpbmQgRG90MyBLRVlfQ1VSU09SX0xFRlQKK2JpbmQgRG90NiBLRVlfQ1VSU09SX1JJR0hUCitiaW5kIERvdDIgS0VZX0hPTUUKK2JpbmQgRG90NSBLRVlfRU5ECitiaW5kIERvdDEgS0VZX0NVUlNPUl9VUAorYmluZCBEb3Q0IEtFWV9DVVJTT1JfRE9XTgorCitiaW5kIERvdDIrRG90MyBLRVlfUEFHRV9VUAorYmluZCBEb3Q1K0RvdDYgS0VZX1BBR0VfRE9XTgorYmluZCBEb3Q0K0RvdDUgS0VZX1RBQgorCitiaW5kIERvdDIrRG90NStEb3Q2IEtFWV9ERUxFVEUKK2JpbmQgRG90MitEb3Q2IEtFWV9FU0NBUEUKK2JpbmQgRG90MytEb3Q1IEtFWV9JTlNFUlQKKworY29udGV4dCB0b2dnbGVPZmYKK2JpbmQgRG90MStEb3QyK0RvdDMrRG90NCBQUkVGTE9BRAorYmluZCBEb3QxK0RvdDIrRG90MytEb3Q2IFNXSVRDSFZUX1BSRVYKK2JpbmQgRG90MStEb3QzK0RvdDQrRG90NiBDTElQX1JFU1RPUkUKKworYmluZCBEb3QxK0RvdDMgQlJMS0JEK29mZgorYmluZCBEb3Q0K0RvdDYgQlJMVUNET1RTK29mZgorCitjb250ZXh0IHRvZ2dsZU9uCitiaW5kIERvdDErRG90MitEb3QzK0RvdDQgUFJFRlNBVkUKK2JpbmQgRG90MStEb3QyK0RvdDMrRG90NiBTV0lUQ0hWVF9ORVhUCitiaW5kIERvdDErRG90MytEb3Q0K0RvdDYgQ0xJUF9TQVZFCisKK2JpbmQgRG90MStEb3QzIEJSTEtCRCtvbgorYmluZCBEb3Q0K0RvdDYgQlJMVUNET1RTK29uCisKK2JpbmQgRG90MSBHVUkKK2JpbmQgRG90MiBNRVRBCitiaW5kIERvdDMgQ09OVFJPTAorYmluZCBEb3Q0IFNISUZUCitiaW5kIERvdDUgQUxUR1IKK2JpbmQgRG90NiBVUFBFUgorYmluZCBEb3Q3IFVOU1RJQ0sKKwpkaWZmIC0tZ2l0IGEvVGFibGVzL0lucHV0L2ljL2NvbW1vbi5rdGkgYi9UYWJsZXMvSW5wdXQvaWMvY29tbW9uLmt0aQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZjFkNmE0Ci0tLSAvZGV2L251bGwKKysrIGIvVGFibGVzL0lucHV0L2ljL2NvbW1vbi5rdGkKQEAgLTAsMCArMSw1MSBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorIyAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyMKKyMgQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorIworIyBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorIworIyBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisjIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyMgbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisjCisjIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK25vdGUgVGhlIHRocmVlIGtleXMgYWxvbmcgdGhlIGZyb250IGVkZ2Ugb2YgdGhlIHRvcCBhcmU6IERvdDcsIFNwYWNlLCBEb3Q4Lgorbm90ZSBCZWhpbmQgdGhlbSBpcyBhIHNpeC1kb3QgYnJhaWxsZSBrZXlib2FyZC4KK25vdGUgKiBGcm9tIGxlZnQgdG8gcmlnaHQsIHRoZXkgYXJlOiBEb3QzLCBEb3QyLCBEb3QxLCBEb3Q0LCBEb3Q1LCBEb3Q2Lgorbm90ZSAqIFRoZXJlJ3MgYSBnYXAgdGhlIHdpZHRoIG9mIHRoZSBzcGFjZWJhciBiZXR3ZWVuIHRoZSBEb3QxIGFuZCBEb3Q0IGtleXMuCitub3RlIEJlaGluZCB0aGUgYnJhaWxsZSBrZXlib2FyZCBpcyB0aGUgcm93IG9mIGN1cnNvciByb3V0aW5nIGtleXMsCitub3RlICogYW5kIGJlaGluZCBpdCBhcmUgdGhlIGJyYWlsbGUgY2VsbHMuCitub3RlIFRvIHRoZSBsZWZ0IG9mIHRoZSBicmFpbGxlIGNlbGxzIGFyZSB0aGUgTW92ZVVwIGFuZCBNb3ZlRG93biBrZXlzLAorbm90ZSAqIGFuZCB0byB0aGVpciByaWdodCBhcmUgdGhlIFBhbkxlZnQgYW5kIFBhblJpZ2h0IGtleXMuCitub3RlICogTW92ZVVwIGlzIGJlaGluZCBNb3ZlRG93biwgYW5kIFBhbkxlZnQgaXMgYmVoaW5kIFBhblJpZ2h0Lgorbm90ZSAqIFRoZSBNb3ZlIGFuZCBQYW4ga2V5IHBhaXJzIGNhbiBiZSBzd2FwcGVkIHZpYSB0aGUgaW50ZXJuYWwgU2V0dGluZ3MgbWVudS4KKworbWFwIFNwYWNlIFNQQUNFCittYXAgRG90MSBET1QxCittYXAgRG90MiBET1QyCittYXAgRG90MyBET1QzCittYXAgRG90NCBET1Q0CittYXAgRG90NSBET1Q1CittYXAgRG90NiBET1Q2CittYXAgRG90NyBET1Q3CittYXAgRG90OCBET1Q4CisKK2JpbmQgRG90NyBLRVlfQkFDS1NQQUNFCitiaW5kIERvdDggS0VZX0VOVEVSCisKK2JpbmQgTW92ZVVwIExOVVAKK2JpbmQgTW92ZURvd24gTE5ETgorCitiaW5kIFBhbkxlZnQgRldJTkxUCitiaW5kIFBhblJpZ2h0IEZXSU5SVAorCitiaW5kIFJvdXRpbmdLZXkgUk9VVEUKKworaW5jbHVkZSAuLi9tZW51Lmt0aQpkaWZmIC0tZ2l0IGEvVGFibGVzL0lucHV0L2ljL252ZGEua3RiIGIvVGFibGVzL0lucHV0L2ljL252ZGEua3RiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZlNDZlZTMKLS0tIC9kZXYvbnVsbAorKysgYi9UYWJsZXMvSW5wdXQvaWMvbnZkYS5rdGIKQEAgLTAsMCArMSw3MiBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorIyAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyMKKyMgQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorIworIyBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorIworIyBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisjIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyMgbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisjCisjIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK3RpdGxlIEJyYWlsbGVNZSAoaW4gTlZEQSBtb2RlKQorCitpbmNsdWRlIGNvbW1vbi5rdGkKK2luY2x1ZGUgY2hvcmRzLmt0aQoraW5jbHVkZSByb3V0ZS5rdGkKKworYmluZCBTcGFjZStNb3ZlVXAgUFJESUZMTgorYmluZCBTcGFjZStNb3ZlRG93biBOWERJRkxOCisKK2JpbmQgRG90OCtNb3ZlVXAgVE9QCitiaW5kIERvdDgrTW92ZURvd24gQk9UCisKK2JpbmQgRG90OCtEb3QxIExOQkVHCitiaW5kIERvdDgrRG90NCBMTkVORAorCitiaW5kIFNwYWNlK1BhbkxlZnQgRldJTkxUU0tJUAorYmluZCBTcGFjZStQYW5SaWdodCBGV0lOUlRTS0lQCisKK2JpbmQgU3BhY2UrRG90MyBQUk5CV0lOCitiaW5kIFNwYWNlK0RvdDYgTlhOQldJTgorCitiaW5kIFNwYWNlK0RvdDIrRG90MyBQUlBST01QVAorYmluZCBTcGFjZStEb3Q1K0RvdDYgTlhQUk9NUFQKKworYmluZCBTcGFjZStEb3QxK0RvdDIrRG90MyBQUlBHUlBICitiaW5kIFNwYWNlK0RvdDQrRG90NStEb3Q2IE5YUEdSUEgKKworYmluZCBTcGFjZStEb3QxK0RvdDQrRG90NStEb3Q2IFBSU0VBUkNICitiaW5kIFNwYWNlK0RvdDMrRG90NCtEb3Q1K0RvdDYgTlhTRUFSQ0gKKworYmluZCBTcGFjZStEb3QxK0RvdDIgQ09OVEVYVCtjaG9yZHMKK2JpbmQgU3BhY2UrRG90MStEb3Q0K0RvdDUgTk9PUAorYmluZCBTcGFjZStEb3QxK0RvdDUgTk9PUAorYmluZCBTcGFjZStEb3QxK0RvdDIrRG90NCBGUkVFWkUKK2JpbmQgU3BhY2UrRG90MStEb3QyK0RvdDUgSEVMUAorYmluZCBTcGFjZStEb3QxK0RvdDMrRG90NCtEb3Q1IE5PT1AKK2JpbmQgU3BhY2UrRG90MStEb3QyK0RvdDMrRG90NSBDT05URVhUK3JvdXRpbmdLZXlzCitiaW5kIFNwYWNlK0RvdDIrRG90MytEb3Q0IE5PT1AKK2JpbmQgU3BhY2UrRG90MitEb3QzK0RvdDQrRG90NSBDU1JUUksKK2JpbmQgU3BhY2UrRG90MitEb3Q0K0RvdDUrRG90NiBOT09QCisKK2JpbmQgU3BhY2UrRG90MStEb3QyK0RvdDUrRG90NiBDU1JKTVBfVkVSVAorYmluZCBTcGFjZStEb3QyK0RvdDUgUkVUVVJOCitiaW5kIFNwYWNlK0RvdDQgVVBQRVIKK2JpbmQgU3BhY2UrRG90NCtEb3Q2IENPTlRST0wKK2JpbmQgU3BhY2UrRG90OCBUSU1FCisKK2JpbmQgRG90NytEb3Q2IFBSRUZNRU5VCisKK2JpbmQgRG90OCtSb3V0aW5nS2V5LjIwIENTUlZJUworYmluZCBEb3Q4K1JvdXRpbmdLZXkuMTkgQ1NSU0laRQorYmluZCBEb3Q4K1JvdXRpbmdLZXkuMTggQ1NSQkxJTksKK2JpbmQgRG90OCtSb3V0aW5nS2V5LjE3IENBUEJMSU5LCisKZGlmZiAtLWdpdCBhL1RhYmxlcy9JbnB1dC9pYy9yb3V0ZS5rdGkgYi9UYWJsZXMvSW5wdXQvaWMvcm91dGUua3RpCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk4YmEyNjkKLS0tIC9kZXYvbnVsbAorKysgYi9UYWJsZXMvSW5wdXQvaWMvcm91dGUua3RpCkBAIC0wLDAgKzEsNzUgQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyMgICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisjCisjIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyMKKyMgQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitjb250ZXh0IHJvdXRpbmdLZXlzCitiaW5kIFJvdXRpbmdLZXkgS0VZX0ZVTkNUSU9OCisKK2JpbmQgRG90MSBDT05URVhUK2NsaXBOZXcKK2JpbmQgRG90MiBDT05URVhUK2NsaXBBZGQKK2JpbmQgRG90NCBDT05URVhUK2NvcHlMaW5lYXIKK2JpbmQgRG90NSBDT05URVhUK2NvcHlSZWN0YW5ndWxhcgorYmluZCBEb3QzIENPTlRFWFQrc2V0TGVmdAorYmluZCBEb3Q2IENPTlRFWFQrZGVzY3JpYmVDaGFyYWN0ZXIKK2JpbmQgRG90NyBDT05URVhUK3NldE1hcmsKK2JpbmQgRG90OCBDT05URVhUK2dvVG9NYXJrCitiaW5kIFNwYWNlIENPTlRFWFQrc3dpdGNoVmlydHVhbFRlcm1pbmFsCisKK2JpbmQgTW92ZVVwIENPTlRFWFQrdXBTYW1lSW5kZW50CitiaW5kIE1vdmVEb3duIENPTlRFWFQrZG93blNhbWVJbmRlbnQKK2JpbmQgUGFuTGVmdCBDT05URVhUK3VwRGlmZmVyZW50Q2hhcmFjdGVyCitiaW5kIFBhblJpZ2h0IENPTlRFWFQrZG93bkRpZmZlcmVudENoYXJhY3RlcgorCitjb250ZXh0IGNsaXBOZXcKK2JpbmQgUm91dGluZ0tleSBDTElQX05FVworCitjb250ZXh0IGNsaXBBZGQKK2JpbmQgUm91dGluZ0tleSBDTElQX0FERAorCitjb250ZXh0IGNvcHlMaW5lYXIKK2JpbmQgUm91dGluZ0tleSBDT1BZX0xJTkUKKworY29udGV4dCBjb3B5UmVjdGFuZ3VsYXIKK2JpbmQgUm91dGluZ0tleSBDT1BZX1JFQ1QKKworY29udGV4dCBzZXRMZWZ0CitiaW5kIFJvdXRpbmdLZXkgU0VUTEVGVAorCitjb250ZXh0IGRlc2NyaWJlQ2hhcmFjdGVyCitiaW5kIFJvdXRpbmdLZXkgREVTQ0NIQVIKKworY29udGV4dCBzZXRNYXJrCitiaW5kIFJvdXRpbmdLZXkgU0VUTUFSSworCitjb250ZXh0IGdvVG9NYXJrCitiaW5kIFJvdXRpbmdLZXkgR09UT01BUksKKworY29udGV4dCBzd2l0Y2hWaXJ0dWFsVGVybWluYWwKK2JpbmQgUm91dGluZ0tleSBTV0lUQ0hWVAorCitjb250ZXh0IHVwU2FtZUluZGVudAorYmluZCBSb3V0aW5nS2V5IFBSSU5ERU5UCisKK2NvbnRleHQgZG93blNhbWVJbmRlbnQKK2JpbmQgUm91dGluZ0tleSBOWElOREVOVAorCitjb250ZXh0IHVwRGlmZmVyZW50Q2hhcmFjdGVyCitiaW5kIFJvdXRpbmdLZXkgUFJESUZDSEFSCisKK2NvbnRleHQgZG93bkRpZmZlcmVudENoYXJhY3RlcgorYmluZCBSb3V0aW5nS2V5IE5YRElGQ0hBUgorCmRpZmYgLS1naXQgYS9UYWJsZXMvSW5wdXQvaWMvdG9nZ2xlLmt0aSBiL1RhYmxlcy9JbnB1dC9pYy90b2dnbGUua3RpCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdkMDA4YWIKLS0tIC9kZXYvbnVsbAorKysgYi9UYWJsZXMvSW5wdXQvaWMvdG9nZ2xlLmt0aQpAQCAtMCwwICsxLDI3IEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisjICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorIworIyBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisjCisjIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisjCisjIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyMgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorIyBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyMKKyMgV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworIworIyBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworY29udGV4dCBjaG9yZHMKK2JpbmQgXHt0b2dnbGVLZXlzfSBce3RvZ2dsZUNvbW1hbmR9CisKK2NvbnRleHQgdG9nZ2xlT2ZmCitiaW5kIFx7dG9nZ2xlS2V5c30gXHt0b2dnbGVDb21tYW5kfStvZmYKKworY29udGV4dCB0b2dnbGVPbgorYmluZCBce3RvZ2dsZUtleXN9IFx7dG9nZ2xlQ29tbWFuZH0rb24KKwpkaWZmIC0tZ2l0IGEvVGFibGVzL0lucHV0L2lyL2FsbC5rdGkgYi9UYWJsZXMvSW5wdXQvaXIvYWxsLmt0aQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iM2U1ZTdhCi0tLSAvZGV2L251bGwKKysrIGIvVGFibGVzL0lucHV0L2lyL2FsbC5rdGkKQEAgLTAsMCArMSwzOSBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorIyAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyMKKyMgQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorIworIyBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorIworIyBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisjIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyMgbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisjCisjIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMgVGhpcyBrZXkgc3VidGFibGUgaXMgZm9yIGJpbmRpbmdzIGNvbW1vbiB0byBhbGwgSXJpcyBkaXNwbGF5cy4KK25vdGUgUm91dGluZ0tleSByZWZlcnMgdG8gYW55IG9mIHRoZSBrZXlzIGJlaGluZCB0aGUgdGV4dCBjZWxscy4KKworYmluZCBce0RvdDF9K1x7RG90Mn0rXHtEb3Q0fSBGUkVFWkUKK2JpbmQgXHtEb3QxfStce0RvdDJ9K1x7RG90NX0gSEVMUAorYmluZCBce0RvdDJ9K1x7RG90NH0gSU5GTworYmluZCBce0RvdDF9K1x7RG90Mn0rXHtEb3QzfSBMRUFSTgorYmluZCBce0RvdDF9K1x7RG90Mn0rXHtEb3QzfStce0RvdDR9IFBSRUZNRU5VCitiaW5kIFx7RG90Mn0rXHtEb3QzfStce0RvdDV9IFNJWERPVFMrb24KK2JpbmQgXHtEb3QyfStce0RvdDN9K1x7RG90Nn0gU0lYRE9UUytvZmYKKworYmluZCAhUm91dGluZ0tleSBST1VURQorYmluZCBMMSshUm91dGluZ0tleSBDTElQX05FVworYmluZCBMMishUm91dGluZ0tleSBDTElQX0FERAorYmluZCBMOCshUm91dGluZ0tleSBDT1BZX0xJTkUKK2JpbmQgTDcrIVJvdXRpbmdLZXkgQ09QWV9SRUNUCitiaW5kIEwzKyFSb3V0aW5nS2V5IFNFVExFRlQKK2JpbmQgTDYrIVJvdXRpbmdLZXkgREVTQ0NIQVIKKworY29udGV4dCBQQVNURV9ISVNUT1JZCitiaW5kIFJvdXRpbmdLZXkgUEFTVEVfSElTVE9SWQpkaWZmIC0tZ2l0IGEvVGFibGVzL0lucHV0L2lyL2JybC5rdGIgYi9UYWJsZXMvSW5wdXQvaXIvYnJsLmt0YgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YzYzMTcyCi0tLSAvZGV2L251bGwKKysrIGIvVGFibGVzL0lucHV0L2lyL2JybC5rdGIKQEAgLTAsMCArMSwxMTQgQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyMgICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisjCisjIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyMKKyMgQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCit0aXRsZSBJcmlzICh3aXRoIGJyYWlsbGUga2V5Ym9hcmQpCisKK25vdGUgVGhlIGJyYWlsbGUga2V5Ym9hcmQgaGFzIHR3byB0aHVtYiBrZXlzIHJhdGhlciB0aGFuIGEgc2luZ2xlIHNwYWNlIGJhci4KK25vdGUgKiBUaGUgbGVmdCBvbmUgaXMgbmFtZWQgQmFja3NwYWNlLCBhbmQgdGhlIHJpZ2h0IG9uZSBpcyBuYW1lZCBTcGFjZS4KK25vdGUgVGhlIGVpZ2h0IGtleXMgYmVoaW5kIHRoZSBicmFpbGxlIGtleWJvYXJkIGFyZSBrbm93biBhcyBsaW5lYXIga2V5cy4KK25vdGUgKiBGcm9tIGxlZnQgdG8gcmlnaHQsIHRoZXkncmUgbmFtZWQgTDEgdGhyb3VnaCBMOC4KKworYXNzaWduIERvdDEgTDQKK2Fzc2lnbiBEb3QyIEwzCithc3NpZ24gRG90MyBMMgorYXNzaWduIERvdDQgTDUKK2Fzc2lnbiBEb3Q1IEw2Cithc3NpZ24gRG90NiBMNworYXNzaWduIERvdDcgTDEKK2Fzc2lnbiBEb3Q4IEw4CitpbmNsdWRlIGFsbC5rdGkKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgRGVmYXVsdCBCaW5kaW5ncyAjCisjIyMjIyMjIyMjIyMjIyMjIyMjIworCitiaW5kIEwxIEZXSU5MVAorYmluZCBMMiBMTlVQCitiaW5kIEwzIFBSUFJPTVBUCitiaW5kIEw0IFBSRUZNRU5VCitiaW5kIEw1IElORk8KK2JpbmQgTDYgTlhQUk9NUFQKK2JpbmQgTDcgTE5ETgorYmluZCBMOCBGV0lOUlQKK2JpbmQgTDErTDIgVE9QCitiaW5kIEw3K0w4IEJPVAorYmluZCBMMitMMyBDU1JWSVMKK2JpbmQgTDYrTDcgVFVORVMKK2JpbmQgTDYrTDggUkVTVEFSVFNQRUVDSAorYmluZCBMNStMNyBQQVNURQorYmluZCBMNStMNitMNyBDT05URVhUK1BBU1RFX0hJU1RPUlkKKworCittYXAgRG90MSBET1QxCittYXAgRG90MiBET1QyCittYXAgRG90MyBET1QzCittYXAgRG90NCBET1Q0CittYXAgRG90NSBET1Q1CittYXAgRG90NiBET1Q2CittYXAgRG90NyBET1Q3CittYXAgRG90OCBET1Q4CittYXAgU3BhY2UgU1BBQ0UKK21hcCBMNCBDT05UUk9MCittYXAgTDUgTUVUQQorbWFwIEwzIFVQUEVSCisKK2JpbmQgQmFja3NwYWNlIEtFWV9CQUNLU1BBQ0UKK2JpbmQgQmFja3NwYWNlK1NwYWNlIEtFWV9FTlRFUgorCitiaW5kIFNwYWNlK0RvdDIgS0VZX0NVUlNPUl9MRUZUCitiaW5kIFNwYWNlK0RvdDUgS0VZX0NVUlNPUl9SSUdIVAorYmluZCBTcGFjZStEb3Q0IEtFWV9DVVJTT1JfVVAKK2JpbmQgU3BhY2UrRG90NiBLRVlfQ1VSU09SX0RPV04KK2JpbmQgU3BhY2UrRG90NCtEb3Q1IEtFWV9QQUdFX1VQCitiaW5kIFNwYWNlK0RvdDUrRG90NiBLRVlfUEFHRV9ET1dOCitiaW5kIFNwYWNlK0RvdDEgS0VZX0hPTUUKK2JpbmQgU3BhY2UrRG90MyBLRVlfRU5ECisKK2JpbmQgU3BhY2UrRG90MStEb3Q0K0RvdDUgS0VZX0RFTEVURQorYmluZCBTcGFjZStEb3QxK0RvdDUgS0VZX0VTQ0FQRQorYmluZCBTcGFjZStEb3QyK0RvdDQgS0VZX0lOU0VSVAorYmluZCBTcGFjZStEb3QyK0RvdDMrRG90NCtEb3Q1IEtFWV9UQUIKKworYmluZCBCYWNrc3BhY2UrRG90MSBLRVlfRlVOQ1RJT04rMAorYmluZCBCYWNrc3BhY2UrRG90MStEb3QyIEtFWV9GVU5DVElPTisxCitiaW5kIEJhY2tzcGFjZStEb3QxK0RvdDQgS0VZX0ZVTkNUSU9OKzIKK2JpbmQgQmFja3NwYWNlK0RvdDErRG90NCtEb3Q1IEtFWV9GVU5DVElPTiszCitiaW5kIEJhY2tzcGFjZStEb3QxK0RvdDUgS0VZX0ZVTkNUSU9OKzQKK2JpbmQgQmFja3NwYWNlK0RvdDErRG90MitEb3Q0IEtFWV9GVU5DVElPTis1CitiaW5kIEJhY2tzcGFjZStEb3QxK0RvdDIrRG90NCtEb3Q1IEtFWV9GVU5DVElPTis2CitiaW5kIEJhY2tzcGFjZStEb3QxK0RvdDIrRG90NSBLRVlfRlVOQ1RJT04rNworYmluZCBCYWNrc3BhY2UrRG90MitEb3Q0IEtFWV9GVU5DVElPTis4CitiaW5kIEJhY2tzcGFjZStEb3QyK0RvdDQrRG90NSBLRVlfRlVOQ1RJT04rOQorYmluZCBCYWNrc3BhY2UrRG90MStEb3QzIEtFWV9GVU5DVElPTisxMAorYmluZCBCYWNrc3BhY2UrRG90MStEb3QyK0RvdDMgS0VZX0ZVTkNUSU9OKzExCisKK2JpbmQgQmFja3NwYWNlK0RvdDIgU1dJVENIVlQrMAorYmluZCBCYWNrc3BhY2UrRG90MitEb3QzIFNXSVRDSFZUKzEKK2JpbmQgQmFja3NwYWNlK0RvdDIrRG90NSBTV0lUQ0hWVCsyCitiaW5kIEJhY2tzcGFjZStEb3QyK0RvdDUrRG90NiBTV0lUQ0hWVCszCitiaW5kIEJhY2tzcGFjZStEb3QyK0RvdDYgU1dJVENIVlQrNAorYmluZCBCYWNrc3BhY2UrRG90MitEb3QzK0RvdDUgU1dJVENIVlQrNQorYmluZCBCYWNrc3BhY2UrRG90MitEb3QzK0RvdDUrRG90NiBTV0lUQ0hWVCs2CitiaW5kIEJhY2tzcGFjZStEb3QyK0RvdDMrRG90NiBTV0lUQ0hWVCs3CitiaW5kIEJhY2tzcGFjZStEb3QzK0RvdDUgU1dJVENIVlQrOAorYmluZCBCYWNrc3BhY2UrRG90MytEb3Q1K0RvdDYgU1dJVENIVlQrOQorYmluZCBCYWNrc3BhY2UrRG90MitEb3Q3IFNXSVRDSFZUKzEwCitiaW5kIEJhY2tzcGFjZStEb3QyK0RvdDMrRG90NyBTV0lUQ0hWVCsxMQorYmluZCBCYWNrc3BhY2UrRG90MyBTV0lUQ0hWVF9QUkVWCitiaW5kIEJhY2tzcGFjZStEb3Q2IFNXSVRDSFZUX05FWFQKKwpkaWZmIC0tZ2l0IGEvVGFibGVzL0lucHV0L2lyL3BjLmt0YiBiL1RhYmxlcy9JbnB1dC9pci9wYy5rdGIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTMxNjMzNQotLS0gL2Rldi9udWxsCisrKyBiL1RhYmxlcy9JbnB1dC9pci9wYy5rdGIKQEAgLTAsMCArMSw1NCBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorIyAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyMKKyMgQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorIworIyBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorIworIyBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisjIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyMgbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisjCisjIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK3RpdGxlIElyaXMgKHdpdGggUEMga2V5Ym9hcmQpCisKK25vdGUgVGhlIGVpZ2h0IGV4dHJhIGtleXMgYXQgdGhlIGVuZHMgb2YgdGhlIGtleWJvYXJkIGFyZSBrbm93biBhcyBsaW5lYXIga2V5cy4KK25vdGUgKiBUaGUgZm91ciBhdCB0aGUgbGVmdCwgZnJvbSB0b3AgdG8gYm90dG9tLCBhcmUgbmFtZWQgTDEgdGhyb3VnaCBMNC4KK25vdGUgKiBUaGUgZm91ciBhdCB0aGUgcmlnaHQsIGZyb20gYm90dG9tIHRvIHRvcCwgYXJlIG5hbWVkIEw1IHRocm91Z2ggTDguCisKK2Fzc2lnbiBEb3QxIEwxCithc3NpZ24gRG90MiBMMgorYXNzaWduIERvdDMgTDMKK2Fzc2lnbiBEb3Q0IEw4Cithc3NpZ24gRG90NSBMNworYXNzaWduIERvdDYgTDYKK2Fzc2lnbiBEb3Q3IEw0Cithc3NpZ24gRG90OCBMNQoraW5jbHVkZSBhbGwua3RpCisKK2JpbmQgTDEgRldJTkxUU0tJUAorYmluZCBMMitMMyBQQVNURQorYmluZCBMMitMMytMNCBDT05URVhUK1BBU1RFX0hJU1RPUlkKK2JpbmQgTDQgQ1NSVklTCitiaW5kIEw4IEZXSU5SVFNLSVAKK2JpbmQgTDcgVE9QX0xFRlQKK2JpbmQgTDYgQk9UX0xFRlQKK2JpbmQgTDcrTDYgSE9NRQorYmluZCBMMStMMiBUVU5FUworYmluZCBMNCtMNSBTSVhET1RTCisKK2JpbmQgIVh0IFBBU1NYVAorYmluZCAhWHRFMCBQQVNTWFQrZW11bDAKK2JpbmQgIVh0RTEgUEFTU1hUK2VtdWwxCisKKyMgVGhlIFhUIGtleSBudW1iZXJzIG5lZWQgdG8gYmUgMSBncmVhdGVyIHRoYW4gdGhlIGFjdHVhbCBYVCBrZXkgY29kZXMuCitiaW5kIEw1KyFYdEUwLjBYNEMgRldJTkxUCitiaW5kIEw1KyFYdEUwLjBYNEUgRldJTlJUCitiaW5kIEw1KyFYdEUwLjBYNDkgTE5VUAorYmluZCBMNSshWHRFMC4wWDUxIExORE4KZGlmZiAtLWdpdCBhL1RhYmxlcy9JbnB1dC9sYi9hbGwudHh0IGIvVGFibGVzL0lucHV0L2xiL2FsbC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2JkZjNlMAotLS0gL2Rldi9udWxsCisrKyBiL1RhYmxlcy9JbnB1dC9sYi9hbGwudHh0CkBAIC0wLDAgKzEsMyBAQAorSGVscDogTGliYnJhaWxsZSAod3JhcHBlcikKKworTm8gaGVscCBhdmFpbGFibGUgZm9yIHRoaXMgZHJpdmVyLgpkaWZmIC0tZ2l0IGEvVGFibGVzL0lucHV0L2x0L2FsbC50eHQgYi9UYWJsZXMvSW5wdXQvbHQvYWxsLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42Njk4Y2RhCi0tLSAvZGV2L251bGwKKysrIGIvVGFibGVzL0lucHV0L2x0L2FsbC50eHQKQEAgLTAsMCArMSwzNSBAQAorSGVscDogTG9nVGV4dCAoRGFuaXNoKQorCitTcGVjaWVsbGUga29tbWFuZG9lciB0aWwgYnJsdHR5IHN0YXJ0ZXMgbWVkIGRvdCAzNywKK2VmdGVyZnVsZ3QgYWYgbmVkZW5zdOVlbmRlIGtvZGVyLgorRnguIDM3IDEyMzU3IGZvciBnZW5zdGFydCBhZiBicmx0dHkuCisKKzEyNDogZiBGcnlzIHNr5nJtCisxMjQ3OiBGIE9wdPggc2vmcm0KKworMzY4OiAtIEZvcnJpZ2UgdmlydHVlbGxlIGtvbnNvbAorMjM1ODogKyBO5nN0ZSB2aXJ0dWVsbGUga29uc29sCisxODogMSAxLiB2aXJ0dWVsbGUga29uc29sCisxMjg6IDIgMi4gdmlydHVlbGxlIGtvbnNvbAorMTQ4OiAzIDMuIHZpcnR1ZWxsZSBrb25zb2wKKzE0NTg6IDQgNC4gdmlydHVlbGxlIGtvbnNvbAorMTU4OiA1IDUuIHZpcnR1ZWxsZSBrb25zb2wKKzEyNDg6IDYgNi4gdmlydHVlbGxlIGtvbnNvbAorCitEb3dubG9hZCBkYXRhIGZyYSBjb21wdXRlciB0aWwgTG9nVGV4dDoKKzE6IFRhc3QgZG90IDM3IG9nIGRlcmVmdGVyIGV0IHN0b3J0IEQgKGRvdCAxNDU3KQorMjogU2tyaXYgc3RpZW4gdGlsIGZpbGVuIGRlciBza2FsIGRvd25sb2FkZXMgb2cgdGFzdCBlbnRlcgorMzogVGFzdCBDdHJsKzUgcOUgTG9nVGV4dGVuIG9nIHRhc3QgcOUgZW50ZXIgMiBnYW5nZQorCisyNDc6IEkgSW5mb3JtYXRpb24gb20gYnJsdHR5CisxMjM1NzogUiBHZW5zdGFydCBicmx0dHkKKzE0NTc6IEQgRG93bmxvYWQgbWVudQorCisxMjM0NzogUCBPcHPmdG5pbmcKKzIzNDc6IFMgR2VtIG9wc+Z0bmluZworMTIzNzogTCBIZW50IG9wc+Z0bmluZworCisxMzY6IHUgU2lkZSBvcCAocGFnZSB1cCkKKzE0NTogZCBTaWRlIG5lZCAocGFnZSBkb3duKQorCitMb2dUZXh0IGlzIG9ubHkgc29sZCBpbiBEZW5tYXJrLiBIZWxwIG9ubHkgaW4gRGFuaXNoLgpkaWZmIC0tZ2l0IGEvVGFibGVzL0lucHV0L21iL2FsbC50eHQgYi9UYWJsZXMvSW5wdXQvbWIvYWxsLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZGM3NDdmCi0tLSAvZGV2L251bGwKKysrIGIvVGFibGVzL0lucHV0L21iL2FsbC50eHQKQEAgLTAsMCArMSw1NSBAQAorSGVscDogTXVsdGlCcmFpbGxlCisKK01vdmVtZW50IGtleXM6CiszMjEgICAgICAgICAgdG9wIG9mIHNjcmVlbgorICAgIDQ1NiAgICAgIGJvdHRvbSBvZiBzY3JlZW4KKyAyMSAgICAgICAgICB1cCBzZXZlcmFsIGxpbmVzCisgICAgNDUgICAgICAgZG93biBzZXZlcmFsIGxpbmVzCisgIDEgICAgIChCKSAgdXAgb25lIGxpbmUKKyAgICA0ICAgKEQpICBkb3duIG9uZSBsaW5lCiszICAgICA2IChDQykgY3Vyc29yIHBvc2l0aW9uCiszMiAgICAgICAgICAgYmVnaW5uaW5nIG9mIGxpbmUKKyAgICAgNTYgICAgICBlbmQgb2YgbGluZQorMyAxICAgICAgICAgIGxlZnQgb25lIGNoYXJhY3RlcgorICAgIDQgNiAgICAgIHJpZ2h0IG9uZSBjaGFyYWN0ZXIKKyAyICA0IDYgICAgICBsZWZ0IG9uZSBoYWxmIHdpbmRvdworMyAxICA1ICAgICAgIHJpZ2h0IG9uZSBoYWxmIHdpbmRvdworMyAgICAgICAoQSkgIGxlZnQgb25lIGZ1bGwgd2luZG93CisgICAgICA2IChFKSAgcmlnaHQgb25lIGZ1bGwgd2luZG93CisKK090aGVyIGZ1bmN0aW9uczoKKyAgMSAgNTYgICAgICBzcGVhayBjdXJyZW50IGxpbmUKKyAgMSAgIDYgICAgICAgbXV0ZSBzcGVlY2gKKyAyMSA0NSAgICAgICByb3V0ZSBjdXJzb3IgdG8gc3RhcnQgb2Ygd2luZG93CiszMiAgICA2ICAgICAgY3V0IHN0YXJ0CiszICAgIDU2ICAgICAgY3V0IGVuZAorMzIxIDQgICAgICAgIHBhc3RlCisgICAgIDUgICAgICAgY3Vyc29yIHZpc2liaWxpdHkgb24vb2ZmCisgIDEgNCAgIChDKSAgY3Vyc29yIHRyYWNraW5nIG9uL29mZgorIDIgICAgICAgICAgIGN1cnNvciBibGluayBvbi9vZmYKKyAgMSA0IDYgICAgICBjYXBpdGFsIGxldHRlciBibGluayBvbi9vZmYKKyAyICAgNSAgICAgICBibG9jay91bmRlcmxpbmUgY3Vyc29yCiszMiAgIDUgICAgICAgc2l4L2VpZ2h0IGRvdCBicmFpbGxlIHRleHQKKyAyICA0NTYgICAgICBzbGlkaW5nIHdpbmRvdyBvbi9vZmYKKyAyICA0NSAgICAgICBza2lwIGlkZW50aWNhbCBsaW5lcyBvbi9vZmYKKzMyICA0ICAgICAgICBhdWRpbyBzaWduYWxzIG9uL29mZgorMyAxIDQgICAgICAgIGF0dHJpYnV0ZSBkaXNwbGF5IG9uL29mZgorIDIxIDQgICAgICAgIGZyZWV6ZSBtb2RlIG9uL29mZgorIDIxICA1ICAgICAgIGhlbHAgZGlzcGxheSBvbi9vZmYKKzMgICA0ICAgICAgICBzdGF0dXMgbW9kZSBvbi9vZmYKKworUHJlZmVyZW5jZXMgY29udHJvbDoKKzMyMSA0NTYgICAgICBzYXZlIHByZWZlcmVuY2VzCiszIDEgNCA2ICAgICAgZW50ZXIgcHJlZmVyZW5jZXMgbWVudQorMzIxICA1ICAgICAgIHJlc3RvcmUgcHJlZmVyZW5jZXMKKworU3RhdHVzIGluZm9ybWF0aW9uIChjZWxsIDUpOgorRG90IE51bWJlciAgIERvdCBQcmVzZW50IE1lYW5zCisgICAgMSAgICAgICAgVGhlIHNjcmVlbiBpcyBmcm96ZW4KKyAgICAyICAgICAgICBBdHRyaWJ1dGUgZGlzcGxheSBpcyBvbgorICAgIDMgICAgICAgIEF1ZGlvIHNpZ25hbHMgYXJlIG9uCisgICAgNCAgICAgICAgVGhlIGN1cnNvciBpcyB2aXNpYmxlCisgICAgNSAgICAgICAgQ3Vyc29yIHNoYXBlIGlzIGJsb2NrCisgICAgNiAgICAgICAgQ3Vyc29yIGJsaW5rIGlzIG9uCisgICAgNyAgICAgICAgQ3Vyc29yIHRyYWNraW5nIGlzIG9uCisgICAgOCAgICAgICAgU2xpZGluZyB3aW5kb3cgaXMgb24KZGlmZiAtLWdpdCBhL1RhYmxlcy9JbnB1dC9tZC9jb21tb24ua3RpIGIvVGFibGVzL0lucHV0L21kL2NvbW1vbi5rdGkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzQ2NDg5OQotLS0gL2Rldi9udWxsCisrKyBiL1RhYmxlcy9JbnB1dC9tZC9jb21tb24ua3RpCkBAIC0wLDAgKzEsNTYgQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyMgICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisjCisjIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyMKKyMgQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitub3RlIFJvdXRpbmdLZXkgcmVmZXJzIHRvIGFueSBvZiB0aGUga2V5cyBpbW1lZGlhdGVseSBiZWhpbmQgdGhlIHRleHQgY2VsbHMuCitub3RlIFRoZSBsb25nIGtleSBpbiB0aGUgY2VudGVyIG9mIHRoZSBmcm9udCBzdXJmYWNlIGlzIG5hbWVkIFNoaWZ0Lgorbm90ZSAqIFRoZSB0d28gcm91bmQga2V5cyB0byBpdHMgbGVmdCwgZnJvbSBsZWZ0IHRvIHJpZ2h0LCBhcmUgbmFtZWQ6IExlZnQsIFVwLgorbm90ZSAqIFRoZSB0d28gcm91bmQga2V5cyB0byBpdHMgcmlnaHQsIGZyb20gbGVmdCB0byByaWdodCwgYXJlIG5hbWVkOiBEb3duLCBSaWdodC4KKworYmluZCBMZWZ0IEZXSU5MVAorYmluZCBSaWdodCBGV0lOUlQKK2JpbmQgVXAgTE5VUAorYmluZCBEb3duIExORE4KKworYmluZCBTaGlmdCtMZWZ0IEtFWV9DVVJTT1JfTEVGVAorYmluZCBTaGlmdCtSaWdodCBLRVlfQ1VSU09SX1JJR0hUCitiaW5kIFNoaWZ0K1VwIEtFWV9DVVJTT1JfVVAKK2JpbmQgU2hpZnQrRG93biBLRVlfQ1VSU09SX0RPV04KKworYmluZCBMb25nK0xlZnQgTE5CRUcKK2JpbmQgTG9uZytSaWdodCBMTkVORAorYmluZCBMb25nK1VwIFRPUAorYmluZCBMb25nK0Rvd24gQk9UCisKK2JpbmQgU2hpZnQrTG9uZytMZWZ0IFBSUEdSUEgKK2JpbmQgU2hpZnQrTG9uZytSaWdodCBOWFBHUlBICitiaW5kIFNoaWZ0K0xvbmcrVXAgUFJQUk9NUFQKK2JpbmQgU2hpZnQrTG9uZytEb3duIE5YUFJPTVBUCisKK2JpbmQgUm91dGluZ0tleSBST1VURQorYmluZCBSb3V0aW5nS2V5K0xlZnQgQ0xJUF9ORVcKK2JpbmQgUm91dGluZ0tleStVcCBDTElQX0FQUEVORAorYmluZCBSb3V0aW5nS2V5K1JpZ2h0IENPUFlfTElORQorYmluZCBSb3V0aW5nS2V5K0Rvd24gQ09QWV9SRUNUCitiaW5kIFJvdXRpbmdLZXkrUm91dGluZ0tleSBDTElQX0NPUFkKK2JpbmQgUm91dGluZ0tleS4yK1JvdXRpbmdLZXkuMyBQQVNURQorCitjb250ZXh0IG1lbnUKKworYmluZCBVcCBNRU5VX1BSRVZfSVRFTQorYmluZCBEb3duIE1FTlVfTkVYVF9JVEVNCisKZGlmZiAtLWdpdCBhL1RhYmxlcy9JbnB1dC9tZC9kZWZhdWx0Lmt0YiBiL1RhYmxlcy9JbnB1dC9tZC9kZWZhdWx0Lmt0YgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZmYxOTIzCi0tLSAvZGV2L251bGwKKysrIGIvVGFibGVzL0lucHV0L21kL2RlZmF1bHQua3RiCkBAIC0wLDAgKzEsMjQgQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyMgICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisjCisjIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyMKKyMgQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCit0aXRsZSBNRFYgKHVucmVjb2duaXplZCBtb2RlbCAtIGFsbCBrZXlzIGRlZmluZWQpCisKK2luY2x1ZGUgY29tbW9uLmt0aQoraW5jbHVkZSBrZXlib2FyZC5rdGkKK2luY2x1ZGUgZmtleXMua3RpCitpbmNsdWRlIHN0YXR1cy5rdGkKZGlmZiAtLWdpdCBhL1RhYmxlcy9JbnB1dC9tZC9may5rdGIgYi9UYWJsZXMvSW5wdXQvbWQvZmsua3RiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVhNzViYjEKLS0tIC9kZXYvbnVsbAorKysgYi9UYWJsZXMvSW5wdXQvbWQvZmsua3RiCkBAIC0wLDAgKzEsMjIgQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyMgICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisjCisjIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyMKKyMgQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCit0aXRsZSBNRFYgKHdpdGggZnVuY3Rpb24ga2V5cykKKworaW5jbHVkZSBjb21tb24ua3RpCitpbmNsdWRlIGZrZXlzLmt0aQpkaWZmIC0tZ2l0IGEvVGFibGVzL0lucHV0L21kL2ZrX3Mua3RiIGIvVGFibGVzL0lucHV0L21kL2ZrX3Mua3RiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMxNWMwYWQKLS0tIC9kZXYvbnVsbAorKysgYi9UYWJsZXMvSW5wdXQvbWQvZmtfcy5rdGIKQEAgLTAsMCArMSwyMyBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorIyAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyMKKyMgQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorIworIyBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorIworIyBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisjIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyMgbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisjCisjIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK3RpdGxlIE1EViAod2l0aCBmdW5jdGlvbiBrZXlzIGFuZCBzdGF0dXMgY2VsbHMpCisKK2luY2x1ZGUgY29tbW9uLmt0aQoraW5jbHVkZSBma2V5cy5rdGkKK2luY2x1ZGUgc3RhdHVzLmt0aQpkaWZmIC0tZ2l0IGEvVGFibGVzL0lucHV0L21kL2ZrZXlzLmt0aSBiL1RhYmxlcy9JbnB1dC9tZC9ma2V5cy5rdGkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTg3NWViOAotLS0gL2Rldi9udWxsCisrKyBiL1RhYmxlcy9JbnB1dC9tZC9ma2V5cy5rdGkKQEAgLTAsMCArMSw2NCBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorIyAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyMKKyMgQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorIworIyBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorIworIyBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisjIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyMgbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisjCisjIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK25vdGUgVGhlcmUgYXJlIGZpdmUgc3F1YXJlIGtleXMgYXQgZWFjaCBlbmQgb2YgdGhlIGZyb250IHN1cmZhY2UuCitub3RlICogVGhlIG9uZXMgYXQgdGhlIGxlZnQsIGZyb20gbGVmdCB0byByaWdodCwgYXJlIG5hbWVkOiBGNSwgRjQsIEYzLCBGMiwgRjEuCitub3RlICogVGhlIG9uZXMgYXQgdGhlIHJpZ2h0LCBmcm9tIGxlZnQgdG8gcmlnaHQsIGFyZSBuYW1lZDogRjYsIEY3LCBGOCwgRjksIEYxMC4KKworYmluZCBGMyBDSFJMVAorYmluZCBGOCBDSFJSVAorCitiaW5kIFNoaWZ0K0YzIEhXSU5MVAorYmluZCBTaGlmdCtGOCBIV0lOUlQKKworYmluZCBGMSBUT1BfTEVGVAorYmluZCBGMiBCT1RfTEVGVAorCitiaW5kIFNoaWZ0K0YxIEZSRUVaRQorYmluZCBTaGlmdCtGMiBJTkZPCisKK2JpbmQgRjQgSE9NRQorYmluZCBTaGlmdCtGNCBDU1JTSVpFCitiaW5kIExvbmcrRjQgQ1NSQkxJTksKKworYmluZCBGNSBDU1JUUksKK2JpbmQgU2hpZnQrRjUgQ1NSVklTCitiaW5kIExvbmcrRjUgQ0FQQkxJTksKKworYmluZCBGNiBTS1BJRExOUworYmluZCBTaGlmdCtGNiBESVNQTUQKK2JpbmQgU2hpZnQrTG9uZytGNiBBVFRSVklTCitiaW5kIExvbmcrRjYgQVRUUkJMSU5LCisKK2JpbmQgRjcgU0tQQkxOS1dJTlMKKworYmluZCBGOSBIRUxQCitiaW5kIFNoaWZ0K0Y5IExFQVJOCitiaW5kIExvbmcrRjkgVElNRQorCitiaW5kIEYxMCBQUkVGTUVOVQorYmluZCBTaGlmdCtGMTAgUEFTVEUKK2JpbmQgbG9uZytGMTAgUFJFRkxPQUQKK2JpbmQgU2hpZnQrbG9uZytGMTAgUFJFRlNBVkUKKworY29udGV4dCBtZW51CisKK2JpbmQgRjkgTUVOVV9ORVhUX1NFVFRJTkcKK2JpbmQgU2hpZnQrRjkgTUVOVV9QUkVWX1NFVFRJTkcKK2JpbmQgU2hpZnQrRjEwIE1FTlVfUFJFVl9MRVZFTAorCmRpZmYgLS1naXQgYS9UYWJsZXMvSW5wdXQvbWQva2JkLmt0YiBiL1RhYmxlcy9JbnB1dC9tZC9rYmQua3RiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBkNDFiM2EKLS0tIC9kZXYvbnVsbAorKysgYi9UYWJsZXMvSW5wdXQvbWQva2JkLmt0YgpAQCAtMCwwICsxLDIyIEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisjICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorIworIyBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisjCisjIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisjCisjIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyMgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorIyBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyMKKyMgV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworIworIyBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKwordGl0bGUgTURWICh3aXRoIGtleWJvYXJkKQorCitpbmNsdWRlIGNvbW1vbi5rdGkKK2luY2x1ZGUga2V5Ym9hcmQua3RpCmRpZmYgLS1naXQgYS9UYWJsZXMvSW5wdXQvbWQva2V5Ym9hcmQua3RpIGIvVGFibGVzL0lucHV0L21kL2tleWJvYXJkLmt0aQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iM2QyMmNjCi0tLSAvZGV2L251bGwKKysrIGIvVGFibGVzL0lucHV0L21kL2tleWJvYXJkLmt0aQpAQCAtMCwwICsxLDMxIEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisjICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorIworIyBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisjCisjIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisjCisjIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyMgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorIyBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyMKKyMgV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworIworIyBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworbWFwIFNwYWNlIFNQQUNFCittYXAgRG90MSBET1QxCittYXAgRG90MiBET1QyCittYXAgRG90MyBET1QzCittYXAgRG90NCBET1Q0CittYXAgRG90NSBET1Q1CittYXAgRG90NiBET1Q2CittYXAgRG90NyBET1Q3CittYXAgRG90OCBET1Q4CisKK2Fzc2lnbiBjaG9yZCBTcGFjZSsKK2luY2x1ZGUgLi4vY2hvcmRzLmt0aQorCmRpZmYgLS1naXQgYS9UYWJsZXMvSW5wdXQvbWQvc3RhdHVzLmt0aSBiL1RhYmxlcy9JbnB1dC9tZC9zdGF0dXMua3RpCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMyMzk4NDIKLS0tIC9kZXYvbnVsbAorKysgYi9UYWJsZXMvSW5wdXQvbWQvc3RhdHVzLmt0aQpAQCAtMCwwICsxLDIyIEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisjICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorIworIyBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisjCisjIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisjCisjIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyMgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorIyBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyMKKyMgV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworIworIyBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworbm90ZSBTdGF0dXNLZXkgcmVmZXJzIHRvIGFueSBvZiB0aGUga2V5cyBpbW1lZGlhdGVseSBiZWhpbmQgdGhlIHN0YXR1cyBjZWxscy4KKworaG90a2V5IFN0YXR1c0tleS4xIENTUkhJREUrb24gQ1NSSElERStvZmYKKwpkaWZmIC0tZ2l0IGEvVGFibGVzL0lucHV0L21lbnUua3RpIGIvVGFibGVzL0lucHV0L21lbnUua3RpCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc4MzJmYzgKLS0tIC9kZXYvbnVsbAorKysgYi9UYWJsZXMvSW5wdXQvbWVudS5rdGkKQEAgLTAsMCArMSwzMiBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorIyAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyMKKyMgQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorIworIyBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorIworIyBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisjIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyMgbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisjCisjIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK2NvbnRleHQgbWVudQorCitiaW5kIERvdDEgTUVOVV9QUkVWX0lURU0KK2JpbmQgRG90NCBNRU5VX05FWFRfSVRFTQorCitiaW5kIERvdDIgTUVOVV9GSVJTVF9JVEVNCitiaW5kIERvdDUgTUVOVV9MQVNUX0lURU0KKworYmluZCBEb3QzIE1FTlVfUFJFVl9TRVRUSU5HCitiaW5kIERvdDYgTUVOVV9ORVhUX1NFVFRJTkcKKworYmluZCBEb3Q3IE1FTlVfUFJFVl9MRVZFTAorYmluZCBEb3Q4IFBSRUZNRU5VCisKZGlmZiAtLWdpdCBhL1RhYmxlcy9JbnB1dC9tbS9jb21tb24ua3RpIGIvVGFibGVzL0lucHV0L21tL2NvbW1vbi5rdGkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTcwNDFjOQotLS0gL2Rldi9udWxsCisrKyBiL1RhYmxlcy9JbnB1dC9tbS9jb21tb24ua3RpCkBAIC0wLDAgKzEsMTAwIEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisjICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorIworIyBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisjCisjIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisjCisjIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyMgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorIyBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyMKKyMgV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworIworIyBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgRGVmYXVsdCBCaW5kaW5ncyAjCisjIyMjIyMjIyMjIyMjIyMjIyMjIworCitjb250ZXh0IGRlZmF1bHQKKworYmluZCBSb3V0aW5nS2V5IFJPVVRFCisKK2JpbmQgQXJyb3dVcCBMTlVQCitiaW5kIEFycm93RG93biBMTkROCitiaW5kIFBhbkxlZnQgRldJTkxUCitiaW5kIFBhblJpZ2h0IEZXSU5SVAorCitiaW5kIENvbnRyb2wrQXJyb3dVcCBUT1BfTEVGVAorYmluZCBDb250cm9sK0Fycm93RG93biBCT1RfTEVGVAorYmluZCBDb250cm9sK1BhbkxlZnQgUFJTRUFSQ0gKK2JpbmQgQ29udHJvbCtQYW5SaWdodCBOWFNFQVJDSAorCitiaW5kIEFsdCtBcnJvd1VwIEFUVFJVUAorYmluZCBBbHQrQXJyb3dEb3duIEFUVFJETgorYmluZCBBbHQrUGFuTGVmdCBDSFJMVAorYmluZCBBbHQrUGFuUmlnaHQgQ0hSUlQKKworYmluZCBTZWxlY3QrQXJyb3dVcCBUT1AKK2JpbmQgU2VsZWN0K0Fycm93RG93biBCT1QKK2JpbmQgU2VsZWN0K1BhbkxlZnQgTE5CRUcKK2JpbmQgU2VsZWN0K1BhblJpZ2h0IExORU5ECisKK2JpbmQgUmVhZCtBcnJvd1VwIFBSRElGTE4KK2JpbmQgUmVhZCtBcnJvd0Rvd24gTlhESUZMTgorYmluZCBSZWFkK1BhbkxlZnQgRldJTkxUU0tJUAorYmluZCBSZWFkK1BhblJpZ2h0IEZXSU5SVFNLSVAKKworYmluZCBDb250cm9sK0FsdCtBcnJvd1VwIFBSUEdSUEgKK2JpbmQgQ29udHJvbCtBbHQrQXJyb3dEb3duIE5YUEdSUEgKKworYmluZCBTZWxlY3QrUmVhZCtBcnJvd1VwIFBSUFJPTVBUCitiaW5kIFNlbGVjdCtSZWFkK0Fycm93RG93biBOWFBST01QVAorCitiaW5kIENvbnRyb2wgVElNRQorYmluZCBBbHQgSU5GTworCitiaW5kIENvbnRyb2wrUm91dGluZ0tleSBDTElQX05FVworYmluZCBBbHQrUm91dGluZ0tleSBDTElQX0FERAorYmluZCBTZWxlY3QrUm91dGluZ0tleSBDT1BZX0xJTkUKK2JpbmQgUmVhZCtSb3V0aW5nS2V5IENPUFlfUkVDVAorYmluZCBDb250cm9sK0FsdCBQQVNURQorCitiaW5kIENvbnRyb2wrQWx0K1JvdXRpbmdLZXkgU0VUTEVGVAorYmluZCBTZWxlY3QrUmVhZCtSb3V0aW5nS2V5IERFU0NDSEFSCisKK21hcCBEb3QxIERPVDEKK21hcCBEb3QyIERPVDIKK21hcCBEb3QzIERPVDMKK21hcCBEb3Q0IERPVDQKK21hcCBEb3Q1IERPVDUKK21hcCBEb3Q2IERPVDYKK21hcCBEb3Q3IERPVDcKK21hcCBEb3Q4IERPVDgKKworbWFwIENvbnRyb2wgQ09OVFJPTAorbWFwIEFsdCBNRVRBCisKK2JpbmQgSW5zZXJ0IEtFWV9JTlNFUlQKK2JpbmQgRGVsZXRlIEtFWV9ERUxFVEUKK2JpbmQgQmFja3NwYWNlIEtFWV9CQUNLU1BBQ0UKKworYmluZCBCYWNrd2FyZCBLRVlfSE9NRQorYmluZCBGb3J3YXJkIEtFWV9FTkQKKworYmluZCBTY3JvbGxMZWZ0IEtFWV9QQUdFX1VQCitiaW5kIFNjcm9sbFJpZ2h0IEtFWV9QQUdFX0RPV04KKworYmluZCBBcnJvd0xlZnQgS0VZX0NVUlNPUl9MRUZUCitiaW5kIEFycm93UmlnaHQgS0VZX0NVUlNPUl9SSUdIVAorCitiaW5kIEVzY2FwZSBLRVlfRVNDQVBFCisKK2Fzc2lnbiBjaG9yZCBSZWFkKworYXNzaWduIGNvbW1hbmREb3Q3IEtFWV9FTlRFUgorYXNzaWduIGNvbW1hbmREb3Q4IFBBU1NET1RTK3NwYWNlCitpbmNsdWRlIC4uL2Nob3Jkcy5rdGkKZGlmZiAtLWdpdCBhL1RhYmxlcy9JbnB1dC9tbS9wb2NrZXQua3RiIGIvVGFibGVzL0lucHV0L21tL3BvY2tldC5rdGIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmU2ODE4MgotLS0gL2Rldi9udWxsCisrKyBiL1RhYmxlcy9JbnB1dC9tbS9wb2NrZXQua3RiCkBAIC0wLDAgKzEsNjQgQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyMgICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisjCisjIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyMKKyMgQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCit0aXRsZSBCcmFpbGxlIE1lbW8gUG9ja2V0CisKK25vdGUgVGhlIHNpeCByb3VuZCBrZXlzIGFsb25nIHRoZSB0b3AgYXJlIGEgYnJhaWxsZSBrZXlib2FyZC4KK25vdGUgKiBGcm9tIGxlZnQgdG8gcmlnaHQsIHRoZWlyIG5hbWVzIGFyZTogRG90MywgRG90MiwgRG90MSwgRG90NCwgRG90NSwgRG90Ni4KK25vdGUgVGhlIHR3byBrZXlzIHRvIHRoZSBsZWZ0IG9mIERvdDMsIGZyb20gdG9wIHRvIGJvdHRvbSwgYXJlIG5hbWVkOiBDb250cm9sLCBBbHQuCitub3RlIFRoZSB0d28ga2V5cyB0byB0aGUgcmlnaHQgb2YgRG90NiwgZnJvbSB0b3AgdG8gYm90dG9tLCBhcmUgbmFtZWQ6IFNlbGVjdCwgUmVhZC4KK25vdGUgVGhlIHRocmVlIGtleXMgYmVsb3cgRG90MSBhbmQgRG90NCwgZnJvbSBsZWZ0IHRvIHJpZ2h0LCBhcmUgbmFtZWQ6IERvdDcsIEV4dGVuc2lvbiwgRG90OC4KK25vdGUgQXQgdGhlIGJvdHRvbSBsZWZ0IGlzIGEgZ3JvdXAgb2YgZm91ciBrZXlzIGFycmFuZ2VkIGluIGEgY3Jvc3MuCitub3RlICogU3RhcnRpbmcgd2l0aCB0aGUgbGVmdG1vc3Qga2V5IGFuZCBtb3ZpbmcgY2xvY2t3aXNlLCB0aGVpciBuYW1lcyBhcmU6Citub3RlICogQXJyb3dMZWZ0LCBBcnJvd1VwLCBBcnJvd1JpZ2h0LCBBcnJvd0Rvd24uCitub3RlIEEgZHJpdmVyIGltcGxlbWVudGF0aW9uIGNvbnN0cmFpbnQgcmVxdWlyZXMgdGhhdCBzb21lIG9mIHRoZSBiaW5kaW5ncworbm90ZSAqIHJlZmVyIHRvIHRoZSBBcnJvd0xlZnQgYW5kIEFycm93UmlnaHQga2V5cyBhcyBQYW5MZWZ0IGFuZCBQYW5SaWdodC4KK25vdGUgU29tZSBrZXlzIGFyZSBlbnRlcmVkIGJ5IHByZXNzaW5nIGEgc2V0IG9mIGtleXMgc2ltdWx0YW5lb3VzbHk6Citub3RlICsgUmV0dXJuOiBEb3Q3Citub3RlICsgU3BhY2U6IERvdDgKK25vdGUgKyBBcnJvd1VwOiBFeHRlbnNpb24gKyBEb3QxCitub3RlICsgQXJyb3dEb3duOiBFeHRlbnNpb24gKyBEb3Q0Citub3RlICsgQXJyb3dMZWZ0OiBFeHRlbnNpb24gKyBEb3QyCitub3RlICsgQXJyb3dSaWdodDogRXh0ZW5zaW9uICsgRG90NQorbm90ZSArIEluc2VydDogRXh0ZW5zaW9uICsgRG90Mworbm90ZSArIENoYW5nZTogRXh0ZW5zaW9uICsgRG90Ngorbm90ZSArIEJhY2tzcGFjZTogRXh0ZW5zaW9uICsgRG90Nworbm90ZSArIERlbGV0ZTogRXh0ZW5zaW9uICsgRG90OAorbm90ZSArIEVzY2FwZTogRXh0ZW5zaW9uICsgQXJyb3dVcAorbm90ZSArIEluZm86IEV4dGVuc2lvbiArIEFycm93RG93bgorbm90ZSArIEJhY2t3YXJkOiBFeHRlbnNpb24gKyBBcnJvd1JpZ2h0ICsgRG90MQorbm90ZSArIEZvcndhcmQ6IEV4dGVuc2lvbiArIEFycm93UmlnaHQgKyBEb3Q0Citub3RlICsgU2Nyb2xsTGVmdDogRXh0ZW5zaW9uICsgQXJyb3dSaWdodCArIERvdDIKK25vdGUgKyBTY3JvbGxSaWdodDogRXh0ZW5zaW9uICsgQXJyb3dSaWdodCArIERvdDUKK25vdGUgKyBPSzogRXh0ZW5zaW9uICsgQXJyb3dSaWdodCArIERvdDcKK25vdGUgKyBTZXQ6IEV4dGVuc2lvbiArIEFycm93UmlnaHQgKyBEb3Q4CisKK2JpbmQgQXJyb3dVcCtBcnJvd0Rvd24gQ1NSSk1QX1ZFUlQKK2JpbmQgUGFuTGVmdCtQYW5SaWdodCBSRVRVUk4KKworaW5jbHVkZSBjb21tb24ua3RpCitjb250ZXh0IGRlZmF1bHQKKworYmluZCBBcnJvd1VwK0Fycm93TGVmdCBDU1JWSVMKK2JpbmQgQXJyb3dVcCtBcnJvd1JpZ2h0IEFUVFJWSVMKKworYmluZCBBcnJvd0Rvd24rQXJyb3dMZWZ0IENTUlRSSworYmluZCBBcnJvd0Rvd24rQXJyb3dSaWdodCBTSVhET1RTCisKK2JpbmQgRXh0ZW5zaW9uIEtFWV9UQUIKK2JpbmQgRXh0ZW5zaW9uK1JvdXRpbmdLZXkgS0VZX0ZVTkNUSU9OCmRpZmYgLS1naXQgYS9UYWJsZXMvSW5wdXQvbW0vc21hcnQua3RiIGIvVGFibGVzL0lucHV0L21tL3NtYXJ0Lmt0YgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kN2FmY2VhCi0tLSAvZGV2L251bGwKKysrIGIvVGFibGVzL0lucHV0L21tL3NtYXJ0Lmt0YgpAQCAtMCwwICsxLDcwIEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisjICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorIworIyBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisjCisjIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisjCisjIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyMgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorIyBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyMKKyMgV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworIworIyBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKwordGl0bGUgQnJhaWxsZSBNZW1vIFNtYXJ0CisKK25vdGUgVGhlIHNpeCBzbGlnaHRseSBhbmdsZWQga2V5cyBhbG9uZyB0aGUgdG9wIGFyZSBhIGJyYWlsbGUga2V5Ym9hcmQuCitub3RlICogRnJvbSBsZWZ0IHRvIHJpZ2h0LCB0aGVpciBuYW1lcyBhcmU6IERvdDMsIERvdDIsIERvdDEsIERvdDQsIERvdDUsIERvdDYuCitub3RlIFRoZSB0d28ga2V5cyB0byB0aGUgbGVmdCBvZiBEb3QzLCBmcm9tIHRvcCB0byBib3R0b20sIGFyZSBuYW1lZDogQ29udHJvbCwgQWx0Lgorbm90ZSBUaGUgdHdvIGtleXMgdG8gdGhlIHJpZ2h0IG9mIERvdDYsIGZyb20gdG9wIHRvIGJvdHRvbSwgYXJlIG5hbWVkOiBTZWxlY3QsIFJlYWQuCitub3RlIFRoZSBrZXkgaW1tZWRpYXRlbHkgYmVsb3cgRG90MiBpcyBuYW1lZCBCYWNrc3BhY2UuCitub3RlIFRoZSBrZXkgaW1tZWRpYXRlbHkgYmVsb3cgRG90NSBpcyBuYW1lZCBEZWxldGUuCitub3RlIFRoZSB0aHJlZSBrZXlzIGJlbG93IERvdDEgYW5kIERvdDQsIGZyb20gbGVmdCB0byByaWdodCwgYXJlIG5hbWVkOiBEb3Q3LCBFeHRlbnNpb24sIERvdDguCitub3RlIFRoZSBrZXlzIHRvIHRoZSBsZWZ0IGFuZCByaWdodCBvZiB0aGUgYnJhaWxsZSBjZWxscyBhcmUgbmFtZWQ6IFBhbkxlZnQsIFBhblJpZ2h0Lgorbm90ZSBUaGUgdHdvIGtleXMgb24gdGhlIGZyb250IGF0IHRoZSBsZWZ0IGFyZSBuYW1lZDogQXJyb3dVcCwgQXJyb3dEb3duLgorbm90ZSBUaGUgdHdvIGtleXMgb24gdGhlIGZyb250IGF0IHRoZSByaWdodCBhcmUgbmFtZWQ6IEFycm93TGVmdCwgQXJyb3dSaWdodC4KK25vdGUgU29tZSBrZXlzIGFyZSBlbnRlcmVkIGJ5IHByZXNzaW5nIGEgc2V0IG9mIGtleXMgc2ltdWx0YW5lb3VzbHk6Citub3RlICsgUmV0dXJuOiBEb3Q3Citub3RlICsgU3BhY2U6IERvdDgKK25vdGUgKyBBcnJvd1VwOiBFeHRlbnNpb24gKyBEb3QxCitub3RlICsgQXJyb3dEb3duOiBFeHRlbnNpb24gKyBEb3Q0Citub3RlICsgQ29udHJvbCtBcnJvd0xlZnQ6IEV4dGVuc2lvbiArIERvdDIKK25vdGUgKyBDb250cm9sK0Fycm93UmlnaHQ6IEV4dGVuc2lvbiArIERvdDUKK25vdGUgKyBBcnJvd0xlZnQ6IEV4dGVuc2lvbiArIERvdDMKK25vdGUgKyBBcnJvd1JpZ2h0OiBFeHRlbnNpb24gKyBEb3Q2Citub3RlICsgT0s6IEV4dGVuc2lvbiArIERvdDcKK25vdGUgKyBTZXQ6IEV4dGVuc2lvbiArIERvdDgKK25vdGUgKyBJbmZvIChUYWIpOiBFeHRlbnNpb24gKyBEb3Q0ICsgRG90NQorbm90ZSArIFNlbGVjdCtJbmZvIChTaGlmdCtUYWIpOiBFeHRlbnNpb24gKyBEb3QxICsgRG90Mgorbm90ZSArIEVzY2FwZTogRXh0ZW5zaW9uICsgRG90MSArIERvdDUKK25vdGUgKyBJbnNlcnQ6IEV4dGVuc2lvbiArIERvdDIgKyBEb3Q0Citub3RlICsgQmFja3dhcmQ6IEV4dGVuc2lvbiArIEFycm93VXAKK25vdGUgKyBGb3J3YXJkOiBFeHRlbnNpb24gKyBBcnJvd0Rvd24KK25vdGUgKyBTY3JvbGxMZWZ0OiBFeHRlbnNpb24gKyBBcnJvd0xlZnQKK25vdGUgKyBTY3JvbGxSaWdodDogRXh0ZW5zaW9uICsgQXJyb3dSaWdodAorCitoaWRlIG9uCitiaW5kIEluZm8gS0VZX1RBQgorYmluZCBTZWxlY3QrSW5mbyBLRVlfVEFCK3NoaWZ0CitoaWRlIG9mZgorCitiaW5kIFJlYWQgSE9NRQorYmluZCBTZWxlY3QgQkFDSworYmluZCBTZWxlY3QrUmVhZCBDU1JKTVBfVkVSVAorCitpbmNsdWRlIGNvbW1vbi5rdGkKK2NvbnRleHQgZGVmYXVsdAorCitiaW5kIENvbnRyb2wrQXJyb3dMZWZ0IENTUlZJUworYmluZCBDb250cm9sK0Fycm93UmlnaHQgQVRUUlZJUworCitiaW5kIEFsdCtBcnJvd0xlZnQgQ1NSVFJLCitiaW5kIEFsdCtBcnJvd1JpZ2h0IFNJWERPVFMKKworYmluZCBQYW5MZWZ0K1JvdXRpbmdLZXkgU1dJVENIVlQKK2JpbmQgUGFuUmlnaHQrUm91dGluZ0tleSBLRVlfRlVOQ1RJT04KZGlmZiAtLWdpdCBhL1RhYmxlcy9JbnB1dC9tbi9hbGwudHh0IGIvVGFibGVzL0lucHV0L21uL2FsbC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjhjNTUxMAotLS0gL2Rldi9udWxsCisrKyBiL1RhYmxlcy9JbnB1dC9tbi9hbGwudHh0CkBAIC0wLDAgKzEsNjggQEAKK0hlbHA6IE1pbmlCcmFpbGxlCisKK0tleXMgKGZyb20gbGVmdCB0byByaWdodCk6IEYxIEYyIExlZnQgVXAgQ2VudGVyIERvd24gUmlnaHQKKworQmFzaWMgTW9kZToKK0YxOiBpbml0aWF0ZSB0d28tbGV2ZWwgbW9kZSBzZWxlY3Rpb24gKG5leHQga2V5IHNlbGVjdHMgbW9kZSkKK0YyOiBzZWxlY3QgRjIgbW9kZQorTGVmdC9SaWdodDogZ28gbGVmdC9yaWdodCBvbmUgd2luZG93CitVcC9Eb3duOiBnbyB1cC9kb3duIG9uZSBsaW5lCitDZW50ZXI6IGdvIHRvIGN1cnNvciBvciB1bmRvIHVuZXhwZWN0ZWQgY3Vyc29yIHRyYWNraW5nIG1vdGlvbgorCitGMiBNb2RlOgorRjEvRjI6IGdvIHRvIGJlZ2lubmluZyBvZiB0b3AvYm90dG9tIGxpbmUKK0xlZnQvUmlnaHQ6IGdvIHRvIGJlZ2lubmluZy9lbmQgb2YgY3VycmVudCBsaW5lCitVcC9Eb3duOiBnbyB0byB0b3AvYm90dG9tIGxpbmUKK0NlbnRlcjogdG9nZ2xlIGN1cnNvciB0cmFja2luZworCitGMS1GMSBNb2RlOworRjE6IHRvZ2dsZSBoZWxwIHNjcmVlbgorRjI6IHRvZ2dsZSBsZWFybiBtb2RlCitMZWZ0OiB0b2dnbGUgc3RhdHVzIGxpbmUKK1VwOiByZXN0b3JlIHByZWZlcmVuY2VzIGZyb20gZGlzaworQ2VudGVyOiBzYXZlIHByZWZlcmVuY2VzIHRvIGRpc2sKK0Rvd246IGVudGVyL2xlYXZlIHByZWZlcmVuY2VzIG1lbnUKK1JpZ2h0OiBzaG93IGRhdGUgYW5kIHRpbWUKKworRjEtRjIgTW9kZToKK0YxOiB0b2dnbGUgZnJvemVuIHNjcmVlbgorRjI6IHRvZ2dsZSB0ZXh0L2F0dHJpYnV0ZXMgZGlzcGxheQorTGVmdDogdG9nZ2xlIGF0dHJpYnV0ZSB1bmRlcmxpbmluZworVXA6IHRvZ2dsZSBza2lwIGJsYW5rIHdpbmRvd3MKK0NlbnRlcjogdG9nZ2xlIHNpeC1kb3QgYnJhaWxsZQorRG93bjogdG9nZ2xlIHNraXAgaWRlbnRpY2FsIGxpbmVzCitSaWdodDogdG9nZ2xlIGN1cnNvciB2aXNpYmlsaXR5CisKK0YxLVVwIE1vZGU6CitGMS9GMjogc2VhcmNoIHNjcmVlbiBiYWNrd2FyZC9mb3J3YXJkIGZvciBjdXQgdGV4dAorTGVmdC9SaWdodDogZ28gdG8gcHJldmlvdXMvbmV4dCBsaW5lIHdpdCBkaWZmZXJlbnQgaGlnaGxpZ2h0aW5nCitVcC9Eb3duOiBnbyB0byBwcmV2aW91cy9uZXh0IHBhcmFncmFwaCAoYmxhbmsgbGluZSBzZXBhcmF0aW9uKQorQ2VudGVyOiByb3V0ZSBjdXJzb3IgdG8gY3VycmVudCBsaW5lCisKK0YxLURvd24gTW9kZToKK0YxL0YyOiBnbyB0byBwcmV2aW91cy9uZXh0IHByb21wdCAoc2FtZSBwcm9tcHQgYXMgY3VycmVudCBsaW5lKQorTGVmdC9SaWdodDogZ28gdG8gcHJldmlvdXMvbmV4dCBub24tYmxhbmsgd2luZG93CitVcC9Eb3duOiBnbyB0byBwcmV2aW91cy9uZXh0IGxpbmUgd2l0aCBkaWZmZXJlbnQgY29udGVudAorQ2VudGVyOiBwYXN0ZSBjdXQgdGV4dCBhdCBjdXJzb3IKKworRjEtUmlnaHQgKFNwZWVjaCkgTW9kZQorRjI6IHRvZ2dsZSBhdXRvc3BlYWsKK0xlZnQ6IHNwZWFrIGZyb20gdG9wIG9mIHNjcmVlbiB0byBjdXJyZW50IGxpbmUKK1VwOiBzdG9wIHNwZWFraW5nCitDZW50ZXI6IGdvIHRvIGN1cnJlbnQgKG1vc3QgcmVjZW50KSBzcGVlY2ggcG9zaXRpb24KK0Rvd246IHNwZWFrIGN1cnJlbnQgbGluZQorUmlnaHQ6IHNwZWFrIGZyb20gY3VycmVudCBsaW5lIHRvIGJvdHRvbSBvZiBzY3JlZW4KKworRjEtQ2VudGVyIChDaGFyKSBNb2RlCitGMTogc2VsZWN0IENoYXItRjEgbW9kZQorTGVmdC9SaWdodDogbW92ZSBjaGFyYWN0ZXIgc2VsZWN0aW9uIGN1cnNvciBsZWZ0L3JpZ2h0IG9uZSBwb3NpdGlvbgorVXAvRG93bjogZ28gdXAvZG93biBvbmUgbGluZQorCitDaGFyLUYxIE1vZGUKK0YxOiBwb3NpdGlvbiBsZWZ0IGVuZCBvZiB3aW5kb3cgYXQgc2VsZWN0ZWQgY2hhcmFjdGVyCitGMjogZGVzY3JpYmUgc2VsZWN0ZWQgY2hhcmFjdGVyCitMZWZ0OiBhcHBlbmQgdG8gZXhpc3RpbmcgY3V0IGJ1ZmZlciBmcm9tIHNlbGVjdGVkIGNoYXJhY3RlcgorVXA6IHN0YXJ0IG5ldyBjdXQgYnVmZmVyIGF0IHNlbGVjdGVkIGNoYXJhY3RlcgorQ2VudGVyOiByb3V0ZSBjdXJzb3IgdG8gc2VsZWN0ZWQgY2hhcmFjdGVyCitEb3duOiByZWN0YW5ndWxhciBjdXQgdG8gc2VsZWN0ZWQgY2hhcmFjdGVyCitSaWdodDogbGluZWFyIGN1dCB0byBzZWxlY3RlZCBjaGFyYWN0ZXIKZGlmZiAtLWdpdCBhL1RhYmxlcy9JbnB1dC9tdC9iZDFfMy5rdGIgYi9UYWJsZXMvSW5wdXQvbXQvYmQxXzMua3RiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFlNTZhNjkKLS0tIC9kZXYvbnVsbAorKysgYi9UYWJsZXMvSW5wdXQvbXQvYmQxXzMua3RiCkBAIC0wLDAgKzEsMjEgQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyMgICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisjCisjIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyMKKyMgQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCit0aXRsZSBNZXRlYyBCRCBJICh3aXRoIDMga2V5cykKKworaW5jbHVkZSBiZDFfMy5rdGkKZGlmZiAtLWdpdCBhL1RhYmxlcy9JbnB1dC9tdC9iZDFfMy5rdGkgYi9UYWJsZXMvSW5wdXQvbXQvYmQxXzMua3RpCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc3MDk1YzQKLS0tIC9kZXYvbnVsbAorKysgYi9UYWJsZXMvSW5wdXQvbXQvYmQxXzMua3RpCkBAIC0wLDAgKzEsNjQgQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyMgICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisjCisjIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyMKKyMgQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBEZWZhdWx0IEJpbmRpbmdzICMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK2JpbmQgVXAgTE5VUAorYmluZCBEb3duIExORE4KKworYmluZCBTZWxlY3QgRldJTlJUCitiaW5kIFVwK0Rvd24gRldJTlJUCisKK2JpbmQgU2VsZWN0K1VwIFRPUAorYmluZCBTZWxlY3QrRG93biBCT1QKKworYmluZCBTZWxlY3QrVXArRG93biBSRVRVUk4KKworYmluZCAhUm91dGluZ0tleSBST1VURQorYmluZCBTZWxlY3QrIVJvdXRpbmdLZXkuMSBIRUxQCitiaW5kIFNlbGVjdCshUm91dGluZ0tleS4yIExFQVJOCitiaW5kIFNlbGVjdCshUm91dGluZ0tleS4zIFBSRUZNRU5VCitiaW5kIFNlbGVjdCshUm91dGluZ0tleS40IElORk8KKworYmluZCBVcCshUm91dGluZ0tleSBDTElQX05FVworYmluZCBVcCtTZWxlY3QrIVJvdXRpbmdLZXkgQ0xJUF9BUFBFTkQKK2JpbmQgRG93bishUm91dGluZ0tleSBDT1BZX0xJTkUKK2JpbmQgRG93bitTZWxlY3QrIVJvdXRpbmdLZXkgQ09QWV9SRUNUCisKKworIyMjIyMjIyMjIyMjIyMjIyMKKyMgTWVudSBCaW5kaW5ncyAjCisjIyMjIyMjIyMjIyMjIyMjIworCitjb250ZXh0IG1lbnUKKworYmluZCBVcCBNRU5VX1BSRVZfSVRFTQorYmluZCBEb3duIE1FTlVfTkVYVF9JVEVNCisKK2JpbmQgU2VsZWN0K1VwIE1FTlVfRklSU1RfSVRFTQorYmluZCBTZWxlY3QrRG93biBNRU5VX0xBU1RfSVRFTQorCitiaW5kIFNlbGVjdCBNRU5VX05FWFRfU0VUVElORworYmluZCBVcCtEb3duIE1FTlVfUFJFVl9TRVRUSU5HCisKK2JpbmQgU2VsZWN0K1VwK0Rvd24gUFJFRk1FTlUKKworCitjb250ZXh0IGRlZmF1bHQKZGlmZiAtLWdpdCBhL1RhYmxlcy9JbnB1dC9tdC9iZDFfM3Mua3RiIGIvVGFibGVzL0lucHV0L210L2JkMV8zcy5rdGIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDliOTU0NQotLS0gL2Rldi9udWxsCisrKyBiL1RhYmxlcy9JbnB1dC9tdC9iZDFfM3Mua3RiCkBAIC0wLDAgKzEsMjIgQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyMgICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisjCisjIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyMKKyMgQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCit0aXRsZSBNZXRlYyBCRCBJICh3aXRoIDMga2V5cyBhbmQgc3RhdHVzIGNlbGxzKQorCitpbmNsdWRlIGJkMV8zLmt0aQoraW5jbHVkZSBzdGF0dXMua3RpCmRpZmYgLS1naXQgYS9UYWJsZXMvSW5wdXQvbXQvYmQxXzYua3RiIGIvVGFibGVzL0lucHV0L210L2JkMV82Lmt0YgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNTdjODg3Ci0tLSAvZGV2L251bGwKKysrIGIvVGFibGVzL0lucHV0L210L2JkMV82Lmt0YgpAQCAtMCwwICsxLDIxIEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisjICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorIworIyBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisjCisjIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisjCisjIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyMgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorIyBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyMKKyMgV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworIworIyBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKwordGl0bGUgTWV0ZWMgQkQgSSAod2l0aCA2IGtleXMpCisKK2luY2x1ZGUgYmQxXzYua3RpCmRpZmYgLS1naXQgYS9UYWJsZXMvSW5wdXQvbXQvYmQxXzYua3RpIGIvVGFibGVzL0lucHV0L210L2JkMV82Lmt0aQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMzE4NDkwCi0tLSAvZGV2L251bGwKKysrIGIvVGFibGVzL0lucHV0L210L2JkMV82Lmt0aQpAQCAtMCwwICsxLDY0IEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisjICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorIworIyBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisjCisjIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisjCisjIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyMgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorIyBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyMKKyMgV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworIworIyBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgRGVmYXVsdCBCaW5kaW5ncyAjCisjIyMjIyMjIyMjIyMjIyMjIyMjIworCitiaW5kIExlZnRVcCBUT1AKK2JpbmQgTGVmdERvd24gQk9UCisKK2JpbmQgUmlnaHRVcCBMTlVQCitiaW5kIFJpZ2h0RG93biBMTkROCisKK2JpbmQgTGVmdFNlbGVjdCBGV0lOTFQKK2JpbmQgUmlnaHRTZWxlY3QgRldJTlJUCisKK2JpbmQgTGVmdFNlbGVjdCtMZWZ0VXArTGVmdERvd24gQkFDSworYmluZCBSaWdodFNlbGVjdCtSaWdodFVwK1JpZ2h0RG93biBIT01FCisKK2JpbmQgIVJvdXRpbmdLZXkgUk9VVEUKKworYmluZCBMZWZ0VXArIVJvdXRpbmdLZXkgQ0xJUF9ORVcKK2JpbmQgTGVmdFNlbGVjdCshUm91dGluZ0tleSBDTElQX0FQUEVORAorYmluZCBSaWdodFVwKyFSb3V0aW5nS2V5IENPUFlfTElORQorYmluZCBSaWdodFNlbGVjdCshUm91dGluZ0tleSBDT1BZX1JFQ1QKKworYmluZCBMZWZ0RG93bishUm91dGluZ0tleSBTRVRMRUZUCitiaW5kIFJpZ2h0RG93bishUm91dGluZ0tleSBERVNDQ0hBUgorCisKKyMjIyMjIyMjIyMjIyMjIyMjCisjIE1lbnUgQmluZGluZ3MgIworIyMjIyMjIyMjIyMjIyMjIyMKKworY29udGV4dCBtZW51CisKK2JpbmQgTGVmdFVwIE1FTlVfRklSU1RfSVRFTQorYmluZCBMZWZ0RG93biBNRU5VX0xBU1RfSVRFTQorCitiaW5kIFJpZ2h0VXAgTUVOVV9QUkVWX0lURU0KK2JpbmQgUmlnaHREb3duIE1FTlVfTkVYVF9JVEVNCisKK2JpbmQgTGVmdFNlbGVjdCBNRU5VX1BSRVZfU0VUVElORworYmluZCBSaWdodFNlbGVjdCBNRU5VX05FWFRfU0VUVElORworCitiaW5kIExlZnRTZWxlY3QrTGVmdFVwK0xlZnREb3duIFBSRUZNRU5VCisKKworY29udGV4dCBkZWZhdWx0CmRpZmYgLS1naXQgYS9UYWJsZXMvSW5wdXQvbXQvYmQxXzZzLmt0YiBiL1RhYmxlcy9JbnB1dC9tdC9iZDFfNnMua3RiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI2MjgxZjIKLS0tIC9kZXYvbnVsbAorKysgYi9UYWJsZXMvSW5wdXQvbXQvYmQxXzZzLmt0YgpAQCAtMCwwICsxLDIyIEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisjICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorIworIyBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisjCisjIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisjCisjIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyMgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorIyBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyMKKyMgV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworIworIyBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKwordGl0bGUgTWV0ZWMgQkQgSSAod2l0aCA2IGtleXMgYW5kIHN0YXR1cyBjZWxscykKKworaW5jbHVkZSBiZDFfNi5rdGkKK2luY2x1ZGUgc3RhdHVzLmt0aQpkaWZmIC0tZ2l0IGEvVGFibGVzL0lucHV0L210L2JkMi5rdGIgYi9UYWJsZXMvSW5wdXQvbXQvYmQyLmt0YgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOTYyMWY5Ci0tLSAvZGV2L251bGwKKysrIGIvVGFibGVzL0lucHV0L210L2JkMi5rdGIKQEAgLTAsMCArMSwyMCBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorIyAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyMKKyMgQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorIworIyBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorIworIyBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisjIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyMgbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisjCisjIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK3RpdGxlIE1ldGVjIEJEIElJCisKZGlmZiAtLWdpdCBhL1RhYmxlcy9JbnB1dC9tdC9zdGF0dXMua3RpIGIvVGFibGVzL0lucHV0L210L3N0YXR1cy5rdGkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzc3MzNhYwotLS0gL2Rldi9udWxsCisrKyBiL1RhYmxlcy9JbnB1dC9tdC9zdGF0dXMua3RpCkBAIC0wLDAgKzEsMTkgQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyMgICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisjCisjIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyMKKyMgQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitiaW5kIFN0YXR1c0tleS4xIFNJWERPVFMKZGlmZiAtLWdpdCBhL1RhYmxlcy9JbnB1dC9uYXYua3RpIGIvVGFibGVzL0lucHV0L25hdi5rdGkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTRhZDY5NQotLS0gL2Rldi9udWxsCisrKyBiL1RhYmxlcy9JbnB1dC9uYXYua3RpCkBAIC0wLDAgKzEsODggQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyMgICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisjCisjIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyMKKyMgQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitiaW5kIFVwIExOVVAKK2JpbmQgRG93biBMTkROCitiaW5kIExlZnQgRldJTkxUCitiaW5kIFJpZ2h0IEZXSU5SVAorCitiaW5kIERvdDQrVXAgVE9QCitiaW5kIERvdDQrRG93biBCT1QKK2JpbmQgRG90NCtMZWZ0IExOQkVHCitiaW5kIERvdDQrUmlnaHQgTE5FTkQKKworYmluZCBEb3Q1K1VwIFBSRElGTE4KK2JpbmQgRG90NStEb3duIE5YRElGTE4KK2JpbmQgRG90NStMZWZ0IEZXSU5MVFNLSVAKK2JpbmQgRG90NStSaWdodCBGV0lOUlRTS0lQCisKK2JpbmQgRG90NitVcCBBVFRSVVAKK2JpbmQgRG90NitEb3duIEFUVFJETgorYmluZCBEb3Q2K0xlZnQgQ0hSTFQKK2JpbmQgRG90NitSaWdodCBDSFJSVAorCitCaW5kIERvdDQrRG90NitVcCBQUlBHUlBICitCaW5kIERvdDQrRG90NitEb3duIE5YUEdSUEgKK0JpbmQgRG90NCtEb3Q2K0xlZnQgUFJQUk9NUFQKK0JpbmQgRG90NCtEb3Q2K1JpZ2h0IE5YUFJPTVBUCisKK0JpbmQgRG90NCtEb3Q1K0RvdDYrVXAgUFJFRk1FTlUKK0JpbmQgRG90NCtEb3Q1K0RvdDYrRG93biBUSU1FCitCaW5kIERvdDQrRG90NStEb3Q2K0xlZnQgUFJFRkxPQUQKK0JpbmQgRG90NCtEb3Q1K0RvdDYrUmlnaHQgUFJFRlNBVkUKKworQmluZCBEb3Q0K0RvdDUrVXAgRlJFRVpFCitCaW5kIERvdDQrRG90NStEb3duIERJU1BNRAorQmluZCBEb3Q0K0RvdDUrTGVmdCBDT01QQlJMNgorQmluZCBEb3Q0K0RvdDUrUmlnaHQgQ09OVFJBQ1RFRAorCitCaW5kIERvdDUrRG90NitVcCBQUlNFQVJDSAorQmluZCBEb3Q1K0RvdDYrRG93biBOWFNFQVJDSAorQmluZCBEb3Q1K0RvdDYrTGVmdCBTV0lUQ0hWVF9QUkVWCitCaW5kIERvdDUrRG90NitSaWdodCBTV0lUQ0hWVF9ORVhUCisKK2JpbmQgRG90MStVcCBLRVlfQ1VSU09SX1VQCitiaW5kIERvdDErRG93biBLRVlfQ1VSU09SX0RPV04KK2JpbmQgRG90MStMZWZ0IEtFWV9DVVJTT1JfTEVGVAorYmluZCBEb3QxK1JpZ2h0IEtFWV9DVVJTT1JfUklHSFQKKworYmluZCBEb3QyK1VwIEtFWV9QQUdFX1VQCitiaW5kIERvdDIrRG93biBLRVlfUEFHRV9ET1dOCitiaW5kIERvdDIrTGVmdCBLRVlfSE9NRQorYmluZCBEb3QyK1JpZ2h0IEtFWV9FTkQKKworYmluZCBEb3QzK1VwIEtFWV9FU0NBUEUKK2JpbmQgRG90MytEb3duIEtFWV9UQUIKK2JpbmQgRG90MytMZWZ0IEtFWV9ERUxFVEUKK2JpbmQgRG90MytSaWdodCBLRVlfSU5TRVJUCisKK2JpbmQgRG90MStEb3QyK1VwIFNBWV9BQk9WRQorYmluZCBEb3QxK0RvdDIrRG93biBTQVlfQkVMT1cKK2JpbmQgRG90MStEb3QyK0xlZnQgTVVURQorYmluZCBEb3QxK0RvdDIrUmlnaHQgU0FZX0xJTkUKKworYmluZCBEb3QyK0RvdDMrVXAgU0FZX0xPVURFUgorYmluZCBEb3QyK0RvdDMrRG93biBTQVlfU09GVEVSCitiaW5kIERvdDIrRG90MytMZWZ0IFNBWV9TTE9XRVIKK2JpbmQgRG90MitEb3QzK1JpZ2h0IFNBWV9GQVNURVIKKworYmluZCBEb3QxK0RvdDMrVXAgQVVUT1NQRUFLCitiaW5kIERvdDErRG90MytEb3duIFNQS0hPTUUKK2JpbmQgRG90MStEb3QzK0xlZnQgU1BFQUtfSU5ERU5UCitiaW5kIERvdDErRG90MytSaWdodCBTQVlfQUxMCisKZGlmZiAtLWdpdCBhL1RhYmxlcy9JbnB1dC9uby9hbGwudHh0IGIvVGFibGVzL0lucHV0L25vL2FsbC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTUwZmQ4YgotLS0gL2Rldi9udWxsCisrKyBiL1RhYmxlcy9JbnB1dC9uby9hbGwudHh0CkBAIC0wLDAgKzEgQEAKK25vIGJyYWlsbGUgZGlzcGxheQpkaWZmIC0tZ2l0IGEvVGFibGVzL0lucHV0L25wL2FsbC5rdGIgYi9UYWJsZXMvSW5wdXQvbnAvYWxsLmt0YgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NjI2NTViCi0tLSAvZGV2L251bGwKKysrIGIvVGFibGVzL0lucHV0L25wL2FsbC5rdGIKQEAgLTAsMCArMSw0NSBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorIyAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyMKKyMgQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorIworIyBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorIworIyBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisjIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyMgbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisjCisjIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK3RpdGxlIE5pbmVQb2ludAorCitiaW5kIFJvdXRpbmdLZXkgUk9VVEUKKworYmluZCBQYWRMZWZ0IEZXSU5MVAorYmluZCBQYWRSaWdodCBGV0lOUlQKK2JpbmQgUGFkVXAgTE5VUAorYmluZCBQYWREb3duIExORE4KK2JpbmQgUGFkQ2VudGVyIEhPTUUKKworYmluZCBOYXZMZWZ0IEZXSU5MVAorYmluZCBOYXZSaWdodCBGV0lOUlQKKworYmluZCBTcGFjZStCcmwxK0JybDYrQnJsNytCcmw4IFBSRUZNRU5VCitiaW5kIFNwYWNlK0JybDIrQnJsNytCcmw4IEhFTFAKKworbWFwIEJybDEgRE9UNAorbWFwIEJybDIgRE9UNQorbWFwIEJybDMgRE9UNgorbWFwIEJybDQgRE9UOAorbWFwIEJybDUgRE9UNworbWFwIEJybDYgRE9UMworbWFwIEJybDcgRE9UMgorbWFwIEJybDggRE9UMQorbWFwIFNwYWNlIFNQQUNFCitiaW5kIEVudGVyIEtFWV9FTlRFUgorCmRpZmYgLS1naXQgYS9UYWJsZXMvSW5wdXQvcGcvYWxsLmt0YiBiL1RhYmxlcy9JbnB1dC9wZy9hbGwua3RiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYxOTBiYmQKLS0tIC9kZXYvbnVsbAorKysgYi9UYWJsZXMvSW5wdXQvcGcvYWxsLmt0YgpAQCAtMCwwICsxLDEwNyBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorIyAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyMKKyMgQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorIworIyBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorIworIyBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisjIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyMgbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisjCisjIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK3RpdGxlIFBlZ2FzdXMKKworCisjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBEZWZhdWx0IEJpbmRpbmdzICMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK2JpbmQgIVN0YXR1czEgSEVMUAorYmluZCAhU3RhdHVzMiBMRUFSTgorCitiaW5kICFSb3V0aW5nS2V5IFJPVVRFCisKK2JpbmQgIUxlZnQgRldJTkxUCitiaW5kICFSaWdodCBGV0lOUlQKK2JpbmQgIVVwIExOVVAKK2JpbmQgIURvd24gTE5ETgorCitiaW5kICFIb21lIFRPUF9MRUZUCitiaW5kICFFbnRlciBCT1RfTEVGVAorYmluZCAhRW5kIFJFVFVSTgorYmluZCAhRXNjYXBlIENTUlRSSworCitiaW5kIExlZnRDb250cm9sKyFMZWZ0IEFUVFJVUAorYmluZCBMZWZ0Q29udHJvbCshUmlnaHQgQVRUUkROCitiaW5kIExlZnRDb250cm9sKyFVcCBQUkRJRkxOCitiaW5kIExlZnRDb250cm9sKyFEb3duIE5YRElGTE4KKworYmluZCBMZWZ0Q29udHJvbCshRW50ZXIgRlJFRVpFCitiaW5kIExlZnRDb250cm9sKyFFbmQgUFJFRk1FTlUKK2JpbmQgTGVmdENvbnRyb2wrIUVzY2FwZSBJTkZPCisKK2JpbmQgTGVmdFNoaWZ0KyFMZWZ0IERJU1BNRAorYmluZCBMZWZ0U2hpZnQrIVJpZ2h0IFNJWERPVFMKK2JpbmQgTGVmdFNoaWZ0KyFEb3duIENTUkpNUF9WRVJUCisKK2JpbmQgTGVmdFNoaWZ0KyFIb21lIFBSUFJPTVBUCitiaW5kIExlZnRTaGlmdCshRW50ZXIgTlhQUk9NUFQKK2JpbmQgTGVmdFNoaWZ0KyFFbmQgUFJQR1JQSAorYmluZCBMZWZ0U2hpZnQrIUVzY2FwZSBOWFBHUlBICisKK2JpbmQgUmlnaHRTaGlmdCshTGVmdCBDT05URVhUK1NFVExFRlQKK2JpbmQgUmlnaHRTaGlmdCshUmlnaHQgUEFTVEUKK2JpbmQgUmlnaHRTaGlmdCshRG93biBDT05URVhUK0RFU0NDSEFSCisKK2JpbmQgUmlnaHRTaGlmdCshSG9tZSBDT05URVhUK0NMSVBfTkVXCitiaW5kIFJpZ2h0U2hpZnQrIUVudGVyIENPTlRFWFQrQ0xJUF9BREQKK2JpbmQgUmlnaHRTaGlmdCshRW5kIENPTlRFWFQrQ09QWV9MSU5FCitiaW5kIFJpZ2h0U2hpZnQrIUVzY2FwZSBDT05URVhUK0NPUFlfUkVDVAorCisKKyMjIyMjIyMjIyMjIyMjIyMjCisjIE1lbnUgQmluZGluZ3MgIworIyMjIyMjIyMjIyMjIyMjIyMKKworY29udGV4dCBtZW51CisKK2JpbmQgTGVmdCBGV0lOTFQKK2JpbmQgUmlnaHQgRldJTlJUCitiaW5kIFVwIE1FTlVfUFJFVl9JVEVNCitiaW5kIERvd24gTUVOVV9ORVhUX0lURU0KKworYmluZCBIb21lIE1FTlVfRklSU1RfSVRFTQorYmluZCBFbnRlciBNRU5VX0xBU1RfSVRFTQorYmluZCBFbmQgTUVOVV9QUkVWX1NFVFRJTkcKK2JpbmQgRXNjYXBlIE1FTlVfTkVYVF9TRVRUSU5HCisKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBSb3V0aW5nIEtleSBBbHRlcm5hdGl2ZXMgIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitjb250ZXh0IENMSVBfTkVXCitiaW5kICFSb3V0aW5nS2V5IENMSVBfTkVXCisKK2NvbnRleHQgQ0xJUF9BREQKK2JpbmQgIVJvdXRpbmdLZXkgQ0xJUF9BREQKKworY29udGV4dCBDT1BZX0xJTkUKK2JpbmQgIVJvdXRpbmdLZXkgQ09QWV9MSU5FCisKK2NvbnRleHQgQ09QWV9SRUNUCitiaW5kICFSb3V0aW5nS2V5IENPUFlfUkVDVAorCitjb250ZXh0IFNFVExFRlQKK2JpbmQgIVJvdXRpbmdLZXkgU0VUTEVGVAorCitjb250ZXh0IERFU0NDSEFSCitiaW5kICFSb3V0aW5nS2V5IERFU0NDSEFSCisKZGlmZiAtLWdpdCBhL1RhYmxlcy9JbnB1dC9wbS8yZF9sLmt0YiBiL1RhYmxlcy9JbnB1dC9wbS8yZF9sLmt0YgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41M2I4ZjRmCi0tLSAvZGV2L251bGwKKysrIGIvVGFibGVzL0lucHV0L3BtLzJkX2wua3RiCkBAIC0wLDAgKzEsMjIgQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyMgICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisjCisjIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyMKKyMgQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCit0aXRsZSBQYXBlbm1laWVyIEJyYWlsbGVYIDJEIExpdGUgKHBsdXMpCisKK2Fzc2lnbiBzdGF0dXNLZXlzIDEzCitpbmNsdWRlIGZyb250OS5rdGkKZGlmZiAtLWdpdCBhL1RhYmxlcy9JbnB1dC9wbS8yZF9zLmt0YiBiL1RhYmxlcy9JbnB1dC9wbS8yZF9zLmt0YgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMDViZjZkCi0tLSAvZGV2L251bGwKKysrIGIvVGFibGVzL0lucHV0L3BtLzJkX3Mua3RiCkBAIC0wLDAgKzEsMjIgQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyMgICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisjCisjIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyMKKyMgQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCit0aXRsZSBQYXBlbm1laWVyIEJyYWlsbGVYIDJEIFNjcmVlbiBTb2Z0CisKK2Fzc2lnbiBzdGF0dXNLZXlzIDIyCitpbmNsdWRlIGZyb250MTMua3RpCmRpZmYgLS1naXQgYS9UYWJsZXMvSW5wdXQvcG0vYmFyLmt0aSBiL1RhYmxlcy9JbnB1dC9wbS9iYXIua3RpCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjllOGJlNjEKLS0tIC9kZXYvbnVsbAorKysgYi9UYWJsZXMvSW5wdXQvcG0vYmFyLmt0aQpAQCAtMCwwICsxLDk4IEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisjICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorIworIyBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisjCisjIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisjCisjIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyMgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorIyBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyMKKyMgV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworIworIyBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIyBUaGlzIGtleSBzdWJ0YWJsZSBpcyBmb3IgUGFwZW5tZWllciBkaXNwbGF5cyB3aGljaCBoYXZlIGFuIEVhc3kgQWNjZXNzIEJhci4KKworbm90ZSBUaGUgbG9uZyBrZXkgb24gdGhlIGZyb250IGlzIHRoZSBFYXN5IEFjY2VzcyBCYXIuCisKK2lmVmFyIGhhc1NpbmdsZVN0ZXBCYXIKKyAgbm90ZSAqIEl0IGNhbiBvbmx5IGJlIG1vdmVkIG9uZSBzdGVwIGluIGVhY2ggZGlyZWN0aW9uIChsZWZ0LCByaWdodCwgdXAsIGRvd24pLgorICBub3RlICogVG8gZW11bGF0ZSB0aGUgc2Vjb25kIHN0ZXAsIGFsc28gcHJlc3MgYW55IG9mIHRoZSBsb3dlciByb3V0aW5nIGtleXMKKyAgbm90ZSAqICh0aG9zZSBpbiB0aGUgcm93IGp1c3QgYmVoaW5kIHRoZSB0ZXh0IGNlbGxzKS4KK2Vsc2UKKyAgbm90ZSAqIEl0IGNhbiBiZSBtb3ZlZCB0d28gc3RlcHMgaW4gZWFjaCBkaXJlY3Rpb24gKGxlZnQsIHJpZ2h0LCB1cCwgZG93bikuCitlbmRJZgorCitiaW5kIEJhclVwMSBMTlVQCitiaW5kIEJhckRvd24xIExORE4KK2JpbmQgQmFyTGVmdDEgRldJTkxUCitiaW5kIEJhclJpZ2h0MSBGV0lOUlQKKworYmluZCBCYXJVcDIgVE9QCitiaW5kIEJhckRvd24yIEJPVAorYmluZCBCYXJMZWZ0MiBMTkJFRworYmluZCBCYXJSaWdodDIgTE5FTkQKKworaGlkZSBvbgorYmluZCBCYXJVcDErQmFyVXAyIFRPUAorYmluZCBCYXJEb3duMStCYXJEb3duMiBCT1QKK2JpbmQgQmFyTGVmdDErQmFyTGVmdDIgTE5CRUcKK2JpbmQgQmFyUmlnaHQxK0JhclJpZ2h0MiBMTkVORAoraGlkZSBvZmYKKworaW5jbHVkZSByb3V0aW5nLmt0aQorCitpZk5vdFZhciBoYXNTaW5nbGVTdGVwQmFyCisgIGJpbmQgQmFyVXAxK1JvdXRpbmdLZXkxIFBSSU5ERU5UCisgIGJpbmQgQmFyRG93bjErUm91dGluZ0tleTEgTlhJTkRFTlQKKyAgYmluZCBCYXJMZWZ0MStSb3V0aW5nS2V5MSBDTElQX0FERAorICBiaW5kIEJhclJpZ2h0MStSb3V0aW5nS2V5MSBDT1BZX0xJTkUKKworICBiaW5kIEJhclVwMitSb3V0aW5nS2V5MSBTRVRMRUZUCisgIGJpbmQgQmFyRG93bjIrUm91dGluZ0tleTEgREVTQ0NIQVIKKyAgYmluZCBCYXJMZWZ0MitSb3V0aW5nS2V5MSBDTElQX05FVworICBiaW5kIEJhclJpZ2h0MitSb3V0aW5nS2V5MSBDT1BZX1JFQ1QKKworICBoaWRlIG9uCisgIGJpbmQgQmFyVXAxK0JhclVwMitSb3V0aW5nS2V5MSBTRVRMRUZUCisgIGJpbmQgQmFyRG93bjErQmFyRG93bjIrUm91dGluZ0tleTEgREVTQ0NIQVIKKyAgYmluZCBCYXJMZWZ0MStCYXJMZWZ0MitSb3V0aW5nS2V5MSBDTElQX05FVworICBiaW5kIEJhclJpZ2h0MStCYXJSaWdodDIrUm91dGluZ0tleTEgQ09QWV9SRUNUCisgIGhpZGUgb2ZmCitlbmRJZgorCithc3NpZ24gdG9nZ2xlT2ZmIEJhckxlZnQxCithc3NpZ24gdG9nZ2xlT24gQmFyUmlnaHQxCitpbmNsdWRlIHN0YXR1c1x7c3RhdHVzS2V5c30ua3RpCisKK2luY2x1ZGUga2V5cy5rdGkKKworaWZLZXkgUm91dGluZ0tleTIKK2VuZElmCisKK2lmS2V5IFN0YXR1c0tleTIgYmluZCAhU3RhdHVzS2V5MiBHT1RPTElORQorCisKK2NvbnRleHQgbWVudQorYmluZCBCYXJVcDEgTUVOVV9QUkVWX0lURU0KK2JpbmQgQmFyRG93bjEgTUVOVV9ORVhUX0lURU0KK2JpbmQgQmFyVXAyIE1FTlVfRklSU1RfSVRFTQorYmluZCBCYXJEb3duMiBNRU5VX0xBU1RfSVRFTQorYmluZCBCYXJMZWZ0MSBNRU5VX1BSRVZfU0VUVElORworYmluZCBCYXJSaWdodDEgTUVOVV9ORVhUX1NFVFRJTkcKK2JpbmQgQmFyTGVmdDIgUFJFRkxPQUQKK2JpbmQgQmFyUmlnaHQyIFBSRUZTQVZFCisKK2hpZGUgb24KK2JpbmQgQmFyVXAxK0JhclVwMiBNRU5VX0ZJUlNUX0lURU0KK2JpbmQgQmFyRG93bjErQmFyRG93bjIgTUVOVV9MQVNUX0lURU0KK2JpbmQgQmFyTGVmdDErQmFyTGVmdDIgUFJFRkxPQUQKK2JpbmQgQmFyUmlnaHQxK0JhclJpZ2h0MiBQUkVGU0FWRQoraGlkZSBvZmYKKworCmRpZmYgLS1naXQgYS9UYWJsZXMvSW5wdXQvcG0vYy5rdGIgYi9UYWJsZXMvSW5wdXQvcG0vYy5rdGIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWFlMDAzOQotLS0gL2Rldi9udWxsCisrKyBiL1RhYmxlcy9JbnB1dC9wbS9jLmt0YgpAQCAtMCwwICsxLDIyIEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisjICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorIworIyBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisjCisjIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisjCisjIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyMgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorIyBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyMKKyMgV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworIworIyBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKwordGl0bGUgUGFwZW5tZWllciBCcmFpbGxlWCBDb21wYWN0L1RpbnkKKworYXNzaWduIHN0YXR1c0tleXMgMAoraW5jbHVkZSBmcm9udDkua3RpCmRpZmYgLS1naXQgYS9UYWJsZXMvSW5wdXQvcG0vY180ODYua3RiIGIvVGFibGVzL0lucHV0L3BtL2NfNDg2Lmt0YgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40Mzg3MTgyCi0tLSAvZGV2L251bGwKKysrIGIvVGFibGVzL0lucHV0L3BtL2NfNDg2Lmt0YgpAQCAtMCwwICsxLDIyIEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisjICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorIworIyBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisjCisjIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisjCisjIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyMgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorIyBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyMKKyMgV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworIworIyBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKwordGl0bGUgUGFwZW5tZWllciBCcmFpbGxlWCBDb21wYWN0IDQ4NgorCithc3NpZ24gc3RhdHVzS2V5cyAwCitpbmNsdWRlIGZyb250OS5rdGkKZGlmZiAtLWdpdCBhL1RhYmxlcy9JbnB1dC9wbS9lbDJkXzgwcy5rdGIgYi9UYWJsZXMvSW5wdXQvcG0vZWwyZF84MHMua3RiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJiMDU1NDAKLS0tIC9kZXYvbnVsbAorKysgYi9UYWJsZXMvSW5wdXQvcG0vZWwyZF84MHMua3RiCkBAIC0wLDAgKzEsMjIgQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyMgICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisjCisjIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyMKKyMgQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCit0aXRsZSBQYXBlbm1laWVyIEJyYWlsbGVYIEVMMkQtODBzCisKK2Fzc2lnbiBzdGF0dXNLZXlzIDIwCitpbmNsdWRlIGJhci5rdGkKZGlmZiAtLWdpdCBhL1RhYmxlcy9JbnB1dC9wbS9lbDQwYy5rdGIgYi9UYWJsZXMvSW5wdXQvcG0vZWw0MGMua3RiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgxZjMwM2YKLS0tIC9kZXYvbnVsbAorKysgYi9UYWJsZXMvSW5wdXQvcG0vZWw0MGMua3RiCkBAIC0wLDAgKzEsMjMgQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyMgICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisjCisjIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyMKKyMgQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCit0aXRsZSBQYXBlbm1laWVyIEJyYWlsbGVYIEVMNDBjCisKK2Fzc2lnbiBoYXNTaW5nbGVTdGVwQmFyCithc3NpZ24gc3RhdHVzS2V5cyAwCitpbmNsdWRlIGJhci5rdGkKZGlmZiAtLWdpdCBhL1RhYmxlcy9JbnB1dC9wbS9lbDQwcy5rdGIgYi9UYWJsZXMvSW5wdXQvcG0vZWw0MHMua3RiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjljNzQzYTQKLS0tIC9kZXYvbnVsbAorKysgYi9UYWJsZXMvSW5wdXQvcG0vZWw0MHMua3RiCkBAIC0wLDAgKzEsMjIgQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyMgICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisjCisjIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyMKKyMgQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCit0aXRsZSBQYXBlbm1laWVyIEJyYWlsbGVYIEVMNDBzCisKK2Fzc2lnbiBzdGF0dXNLZXlzIDAKK2luY2x1ZGUgYmFyLmt0aQpkaWZmIC0tZ2l0IGEvVGFibGVzL0lucHV0L3BtL2VsNjBjLmt0YiBiL1RhYmxlcy9JbnB1dC9wbS9lbDYwYy5rdGIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjllOGM5NwotLS0gL2Rldi9udWxsCisrKyBiL1RhYmxlcy9JbnB1dC9wbS9lbDYwYy5rdGIKQEAgLTAsMCArMSwyMyBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorIyAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyMKKyMgQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorIworIyBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorIworIyBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisjIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyMgbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisjCisjIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK3RpdGxlIFBhcGVubWVpZXIgQnJhaWxsZVggRUw2MGMKKworYXNzaWduIGhhc1NpbmdsZVN0ZXBCYXIKK2Fzc2lnbiBzdGF0dXNLZXlzIDAKK2luY2x1ZGUgYmFyLmt0aQpkaWZmIC0tZ2l0IGEvVGFibGVzL0lucHV0L3BtL2VsNjZzLmt0YiBiL1RhYmxlcy9JbnB1dC9wbS9lbDY2cy5rdGIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzNjZmI2MQotLS0gL2Rldi9udWxsCisrKyBiL1RhYmxlcy9JbnB1dC9wbS9lbDY2cy5rdGIKQEAgLTAsMCArMSwyMiBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorIyAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyMKKyMgQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorIworIyBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorIworIyBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisjIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyMgbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisjCisjIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK3RpdGxlIFBhcGVubWVpZXIgQnJhaWxsZVggRUw2NnMKKworYXNzaWduIHN0YXR1c0tleXMgMAoraW5jbHVkZSBiYXIua3RpCmRpZmYgLS1naXQgYS9UYWJsZXMvSW5wdXQvcG0vZWw3MHMua3RiIGIvVGFibGVzL0lucHV0L3BtL2VsNzBzLmt0YgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OTQ2NzEzCi0tLSAvZGV2L251bGwKKysrIGIvVGFibGVzL0lucHV0L3BtL2VsNzBzLmt0YgpAQCAtMCwwICsxLDIyIEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisjICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorIworIyBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisjCisjIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisjCisjIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyMgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorIyBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyMKKyMgV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworIworIyBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKwordGl0bGUgUGFwZW5tZWllciBCcmFpbGxlWCBFTDcwcworCithc3NpZ24gc3RhdHVzS2V5cyAwCitpbmNsdWRlIGJhci5rdGkKZGlmZiAtLWdpdCBhL1RhYmxlcy9JbnB1dC9wbS9lbDgwX2lpLmt0YiBiL1RhYmxlcy9JbnB1dC9wbS9lbDgwX2lpLmt0YgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mODVkMjI5Ci0tLSAvZGV2L251bGwKKysrIGIvVGFibGVzL0lucHV0L3BtL2VsODBfaWkua3RiCkBAIC0wLDAgKzEsMjIgQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyMgICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisjCisjIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyMKKyMgQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCit0aXRsZSBQYXBlbm1laWVyIEJyYWlsbGVYIEVMODAtSUkKKworYXNzaWduIHN0YXR1c0tleXMgMgoraW5jbHVkZSBiYXIua3RpCmRpZmYgLS1naXQgYS9UYWJsZXMvSW5wdXQvcG0vZWw4MGMua3RiIGIvVGFibGVzL0lucHV0L3BtL2VsODBjLmt0YgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZWNiYWI5Ci0tLSAvZGV2L251bGwKKysrIGIvVGFibGVzL0lucHV0L3BtL2VsODBjLmt0YgpAQCAtMCwwICsxLDIzIEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisjICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorIworIyBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisjCisjIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisjCisjIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyMgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorIyBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyMKKyMgV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworIworIyBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKwordGl0bGUgUGFwZW5tZWllciBCcmFpbGxlWCBFTDgwYworCithc3NpZ24gaGFzU2luZ2xlU3RlcEJhcgorYXNzaWduIHN0YXR1c0tleXMgMAoraW5jbHVkZSBiYXIua3RpCmRpZmYgLS1naXQgYS9UYWJsZXMvSW5wdXQvcG0vZWw4MHMua3RiIGIvVGFibGVzL0lucHV0L3BtL2VsODBzLmt0YgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NGI2MWJjCi0tLSAvZGV2L251bGwKKysrIGIvVGFibGVzL0lucHV0L3BtL2VsODBzLmt0YgpAQCAtMCwwICsxLDIyIEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisjICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorIworIyBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisjCisjIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisjCisjIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyMgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorIyBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyMKKyMgV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworIworIyBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKwordGl0bGUgUGFwZW5tZWllciBCcmFpbGxlWCBFTDgwcworCithc3NpZ24gc3RhdHVzS2V5cyAwCitpbmNsdWRlIGJhci5rdGkKZGlmZiAtLWdpdCBhL1RhYmxlcy9JbnB1dC9wbS9lbF8yZF80MC5rdGIgYi9UYWJsZXMvSW5wdXQvcG0vZWxfMmRfNDAua3RiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEyYjNiODMKLS0tIC9kZXYvbnVsbAorKysgYi9UYWJsZXMvSW5wdXQvcG0vZWxfMmRfNDAua3RiCkBAIC0wLDAgKzEsMjMgQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyMgICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisjCisjIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyMKKyMgQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCit0aXRsZSBQYXBlbm1laWVyIEJyYWlsbGVYIEVMIDJELTQwCisKK2Fzc2lnbiBzdGF0dXNLZXlzIDEzCitpbmNsdWRlIGJhci5rdGkKK2luY2x1ZGUgc3dpdGNoZXMua3RpCmRpZmYgLS1naXQgYS9UYWJsZXMvSW5wdXQvcG0vZWxfMmRfNjYua3RiIGIvVGFibGVzL0lucHV0L3BtL2VsXzJkXzY2Lmt0YgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZTJlM2FmCi0tLSAvZGV2L251bGwKKysrIGIvVGFibGVzL0lucHV0L3BtL2VsXzJkXzY2Lmt0YgpAQCAtMCwwICsxLDIzIEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisjICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorIworIyBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisjCisjIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisjCisjIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyMgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorIyBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyMKKyMgV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworIworIyBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKwordGl0bGUgUGFwZW5tZWllciBCcmFpbGxlWCBFTCAyRC02NgorCithc3NpZ24gc3RhdHVzS2V5cyAxMworaW5jbHVkZSBiYXIua3RpCitpbmNsdWRlIHN3aXRjaGVzLmt0aQpkaWZmIC0tZ2l0IGEvVGFibGVzL0lucHV0L3BtL2VsXzJkXzgwLmt0YiBiL1RhYmxlcy9JbnB1dC9wbS9lbF8yZF84MC5rdGIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2E1ZWNhOQotLS0gL2Rldi9udWxsCisrKyBiL1RhYmxlcy9JbnB1dC9wbS9lbF8yZF84MC5rdGIKQEAgLTAsMCArMSwyMyBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorIyAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyMKKyMgQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorIworIyBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorIworIyBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisjIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyMgbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisjCisjIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK3RpdGxlIFBhcGVubWVpZXIgQnJhaWxsZVggRUwgMkQtODAKKworYXNzaWduIHN0YXR1c0tleXMgMjAKK2luY2x1ZGUgYmFyLmt0aQoraW5jbHVkZSBzd2l0Y2hlcy5rdGkKZGlmZiAtLWdpdCBhL1RhYmxlcy9JbnB1dC9wbS9lbF80MF9wLmt0YiBiL1RhYmxlcy9JbnB1dC9wbS9lbF80MF9wLmt0YgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MjE0Njg4Ci0tLSAvZGV2L251bGwKKysrIGIvVGFibGVzL0lucHV0L3BtL2VsXzQwX3Aua3RiCkBAIC0wLDAgKzEsMjQgQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyMgICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisjCisjIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyMKKyMgQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCit0aXRsZSBQYXBlbm1laWVyIEJyYWlsbGVYIEVMIDQwIFAKKworYXNzaWduIG5vUmlnaHRLZXkKK2Fzc2lnbiBzdGF0dXNLZXlzIDAKK2luY2x1ZGUgYmFyLmt0aQoraW5jbHVkZSBzd2l0Y2hlcy5rdGkKZGlmZiAtLWdpdCBhL1RhYmxlcy9JbnB1dC9wbS9lbF84MC5rdGIgYi9UYWJsZXMvSW5wdXQvcG0vZWxfODAua3RiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE5NTNkZGQKLS0tIC9kZXYvbnVsbAorKysgYi9UYWJsZXMvSW5wdXQvcG0vZWxfODAua3RiCkBAIC0wLDAgKzEsMjMgQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyMgICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisjCisjIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyMKKyMgQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCit0aXRsZSBQYXBlbm1laWVyIEJyYWlsbGVYIEVMIDgwCisKK2Fzc2lnbiBzdGF0dXNLZXlzIDIKK2luY2x1ZGUgYmFyLmt0aQoraW5jbHVkZSBzd2l0Y2hlcy5rdGkKZGlmZiAtLWdpdCBhL1RhYmxlcy9JbnB1dC9wbS9lbGJfdHJfMjAua3RiIGIvVGFibGVzL0lucHV0L3BtL2VsYl90cl8yMC5rdGIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDFkY2JkNAotLS0gL2Rldi9udWxsCisrKyBiL1RhYmxlcy9JbnB1dC9wbS9lbGJfdHJfMjAua3RiCkBAIC0wLDAgKzEsMjIgQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyMgICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisjCisjIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyMKKyMgQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCit0aXRsZSBQYXBlbm1laWVyIEJyYWlsbGVYIEVsYmEgKFRyaW8gMjApCisKK2Fzc2lnbiBzdGF0dXNLZXlzIDAKK2luY2x1ZGUgYmFyLmt0aQpkaWZmIC0tZ2l0IGEvVGFibGVzL0lucHV0L3BtL2VsYl90cl8zMi5rdGIgYi9UYWJsZXMvSW5wdXQvcG0vZWxiX3RyXzMyLmt0YgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOGJjMzcwCi0tLSAvZGV2L251bGwKKysrIGIvVGFibGVzL0lucHV0L3BtL2VsYl90cl8zMi5rdGIKQEAgLTAsMCArMSwyMiBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorIyAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyMKKyMgQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorIworIyBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorIworIyBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisjIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyMgbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisjCisjIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK3RpdGxlIFBhcGVubWVpZXIgQnJhaWxsZVggRWxiYSAoVHJpbyAzMikKKworYXNzaWduIHN0YXR1c0tleXMgMAoraW5jbHVkZSBiYXIua3RpCmRpZmYgLS1naXQgYS9UYWJsZXMvSW5wdXQvcG0vZWxiYV8yMC5rdGIgYi9UYWJsZXMvSW5wdXQvcG0vZWxiYV8yMC5rdGIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGRhZDBhMQotLS0gL2Rldi9udWxsCisrKyBiL1RhYmxlcy9JbnB1dC9wbS9lbGJhXzIwLmt0YgpAQCAtMCwwICsxLDI0IEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisjICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorIworIyBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisjCisjIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisjCisjIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyMgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorIyBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyMKKyMgV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworIworIyBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKwordGl0bGUgUGFwZW5tZWllciBCcmFpbGxlWCBFbGJhIDIwCisKK2Fzc2lnbiBrZXlFbXVsYXRpb24KK2Fzc2lnbiBzdGF0dXNLZXlzIDAKK2luY2x1ZGUgYmFyLmt0aQoraW5jbHVkZSBzd2l0Y2hlcy5rdGkKZGlmZiAtLWdpdCBhL1RhYmxlcy9JbnB1dC9wbS9lbGJhXzMyLmt0YiBiL1RhYmxlcy9JbnB1dC9wbS9lbGJhXzMyLmt0YgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMDZjMzVhCi0tLSAvZGV2L251bGwKKysrIGIvVGFibGVzL0lucHV0L3BtL2VsYmFfMzIua3RiCkBAIC0wLDAgKzEsMjQgQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyMgICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisjCisjIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyMKKyMgQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCit0aXRsZSBQYXBlbm1laWVyIEJyYWlsbGVYIEVsYmEgMzIKKworYXNzaWduIGtleUVtdWxhdGlvbgorYXNzaWduIHN0YXR1c0tleXMgMAoraW5jbHVkZSBiYXIua3RpCitpbmNsdWRlIHN3aXRjaGVzLmt0aQpkaWZmIC0tZ2l0IGEvVGFibGVzL0lucHV0L3BtL2Zyb250MTMua3RpIGIvVGFibGVzL0lucHV0L3BtL2Zyb250MTMua3RpCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgzZDAzMmYKLS0tIC9kZXYvbnVsbAorKysgYi9UYWJsZXMvSW5wdXQvcG0vZnJvbnQxMy5rdGkKQEAgLTAsMCArMSwxNTEgQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyMgICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisjCisjIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyMKKyMgQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjIFRoaXMga2V5IHN1YnRhYmxlIGlzIGZvciBQYXBlbm1laWVyIGRpc3BsYXlzIHdoaWNoIGhhdmUgMTMgZnJvbnQga2V5cy4KK25vdGUgVGhlcmUgYXJlIDEzIGtleXMgb24gdGhlIGZyb250Lgorbm90ZSAqIFRoZSByZWN0YW5ndWxhciBrZXkgYXQgdGhlIGNlbnRlciBpcyBuYW1lZCBTaGlmdC4KK25vdGUgKiBUaGUgc3F1YXJlIGtleXMgaW1tZWRpYXRlbHkgdG8gaXRzIGxlZnQgYW5kIHJpZ2h0IGFyZSBuYW1lZCBIb21lIGFuZCBFbmQuCitub3RlICogVGhlIGxlZnQgYW5kIHJpZ2h0IGJhcnMgYXJlIG5hbWVkIFVwIGFuZCBEb3duLgorbm90ZSAqIFRoZSBmb3VyIHNxdWFyZSBrZXlzIGF0IHRoZSB2ZXJ5IGxlZnQgYXJlIG5hbWVkOiBEb3Q3LCBEb3QzLCBEb3QyLCBEb3QxLgorbm90ZSAqIFRoZSBmb3VyIHNxdWFyZSBrZXlzIGF0IHRoZSB2ZXJ5IHJpZ2h0IGFyZSBuYW1lZDogRG90NCwgRG90NSwgRG90NiwgRG90OC4KKworYmluZCAhU2hpZnQgSE9NRQorYmluZCAhSG9tZSBUT1AKK2JpbmQgIUVuZCBCT1QKK2JpbmQgIVVwIExOVVAKK2JpbmQgIURvd24gTE5ETgorYmluZCBEb3QxIFBSRElGTE4KK2JpbmQgRG90NCBOWERJRkxOCitiaW5kIERvdDIgQVRUUlVQCitiaW5kIERvdDUgQVRUUkROCitiaW5kIERvdDMgUFJQR1JQSAorYmluZCBEb3Q2IE5YUEdSUEgKK2JpbmQgRG90NyBQUlBST01QVAorYmluZCBEb3Q4IE5YUFJPTVBUCisKK2JpbmQgRG90MStEb3QyIFdJTlVQCitiaW5kIERvdDQrRG90NSBXSU5ETgorYmluZCBEb3QzK0RvdDcgUFJTRUFSQ0gKK2JpbmQgRG90NitEb3Q4IE5YU0VBUkNICisKK2JpbmQgRG90MStEb3QyKyFSb3V0aW5nS2V5MSBQUkRJRkNIQVIKK2JpbmQgRG90NCtEb3Q1KyFSb3V0aW5nS2V5MSBOWERJRkNIQVIKK2JpbmQgRG90MytEb3Q3KyFSb3V0aW5nS2V5MSBQUklOREVOVAorYmluZCBEb3Q2K0RvdDgrIVJvdXRpbmdLZXkxIE5YSU5ERU5UCisKK2JpbmQgRG90MSshVXAgRldJTkxUCitiaW5kIERvdDErIURvd24gRldJTlJUCitiaW5kIERvdDErIUhvbWUgVE9QX0xFRlQKK2JpbmQgRG90MSshRW5kIEJPVF9MRUZUCisKK2JpbmQgRG90NCshVXAgSFdJTkxUCitiaW5kIERvdDQrIURvd24gSFdJTlJUCitiaW5kIERvdDQrIUhvbWUgQ0hSTFQKK2JpbmQgRG90NCshRW5kIENIUlJUCisKK2JpbmQgRG90MSshU2hpZnQgTE5CRUcKK2JpbmQgRG90NCshU2hpZnQgTE5FTkQKKworYmluZCBEb3QxKyFSb3V0aW5nS2V5MSBTRVRMRUZUCitiaW5kIERvdDQrIVJvdXRpbmdLZXkxIERFU0NDSEFSCisKK2JpbmQgRG90MishU2hpZnQgS0VZX1RBQgorYmluZCBEb3QyKyFIb21lIEtFWV9DVVJTT1JfTEVGVAorYmluZCBEb3QyKyFFbmQgS0VZX0NVUlNPUl9SSUdIVAorYmluZCBEb3QyKyFVcCBLRVlfQ1VSU09SX1VQCitiaW5kIERvdDIrIURvd24gS0VZX0NVUlNPUl9ET1dOCitiaW5kIERvdDIrIVJvdXRpbmdLZXkxIEtFWV9GVU5DVElPTgorCitiaW5kIERvdDUrIVNoaWZ0IEtFWV9JTlNFUlQKK2JpbmQgRG90NSshSG9tZSBLRVlfSE9NRQorYmluZCBEb3Q1KyFFbmQgS0VZX0VORAorYmluZCBEb3Q1KyFVcCBLRVlfUEFHRV9VUAorYmluZCBEb3Q1KyFEb3duIEtFWV9QQUdFX0RPV04KK2JpbmQgRG90NSshUm91dGluZ0tleTEgU1dJVENIVlQKKworYmluZCBEb3Q2KyFTaGlmdCBVTlNUSUNLCitiaW5kIERvdDYrIUhvbWUgTUVUQQorYmluZCBEb3Q2KyFFbmQgR1VJCitiaW5kIERvdDYrIVVwIFNISUZUCitiaW5kIERvdDYrIURvd24gQ09OVFJPTAorCitiaW5kIERvdDcrIVNoaWZ0IFNQS0hPTUUKK2JpbmQgRG90NyshSG9tZSBTQVlfQUJPVkUKK2JpbmQgRG90NyshRW5kIFNBWV9CRUxPVworYmluZCBEb3Q3KyFVcCBNVVRFCitiaW5kIERvdDcrIURvd24gU0FZX0xJTkUKKworYmluZCBEb3Q4KyFTaGlmdCBSRVNUQVJUU1BFRUNICitiaW5kIERvdDgrIUhvbWUgU0FZX1NMT1dFUgorYmluZCBEb3Q4KyFFbmQgU0FZX0ZBU1RFUgorYmluZCBEb3Q4KyFVcCBTQVlfU09GVEVSCitiaW5kIERvdDgrIURvd24gU0FZX0xPVURFUgorCitiaW5kIERvdDcrIVJvdXRpbmdLZXkxIENMSVBfTkVXCitiaW5kIERvdDMrIVJvdXRpbmdLZXkxIENMSVBfQURECitiaW5kIERvdDYrIVJvdXRpbmdLZXkxIENPUFlfTElORQorYmluZCBEb3Q4KyFSb3V0aW5nS2V5MSBDT1BZX1JFQ1QKKworYmluZCBEb3QxK0RvdDIrRG90MytEb3Q3IFRJTUUKKworaW5jbHVkZSByb3V0aW5nLmt0aQorCithc3NpZ24gdG9nZ2xlT2ZmIERvdDcKK2Fzc2lnbiB0b2dnbGVPbiBEb3Q4CitpbmNsdWRlIHN0YXR1c1x7c3RhdHVzS2V5c30ua3RpCisKKworYmluZCBEb3QyK0RvdDMrIVNoaWZ0IENPTlRFWFQrZGVmYXVsdAorYmluZCBEb3QyK0RvdDMrIUhvbWUgQ09OVEVYVCtjaG9yZHMKK2JpbmQgRG90MitEb3QzKyFFbmQgQ09OVEVYVCticmFpbGxlCisKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQ2hvcmQgSW5wdXQgTW9kZSAjCisjIyMjIyMjIyMjIyMjIyMjIyMjIworCitjb250ZXh0IGNob3JkcyBDaG9yZGVkIENvbW1hbmRzIE1vZGUKKworYXNzaWduIG5vVW5jaG9yZGVkCithc3NpZ24gY2hvcmQKK2luY2x1ZGUgLi4vY2hvcmRzLmt0aQoraW5jbHVkZSAuLi9tZW51Lmt0aQorCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQnJhaWxsZSBJbnB1dCBNb2RlICMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworY29udGV4dCBicmFpbGxlIEJyYWlsbGUgSW5wdXQgTW9kZQorCittYXAgRG90MSBET1QxCittYXAgRG90MiBET1QyCittYXAgRG90MyBET1QzCittYXAgRG90NCBET1Q0CittYXAgRG90NSBET1Q1CittYXAgRG90NiBET1Q2CittYXAgRG90NyBET1Q3CittYXAgRG90OCBET1Q4CisKK2JpbmQgRG90MyshU2hpZnQgS0VZX0VTQ0FQRQorYmluZCBEb3QzKyFIb21lIEtFWV9CQUNLU1BBQ0UKK2JpbmQgRG90MyshRW5kIEtFWV9ERUxFVEUKK2JpbmQgRG90MyshVXAgS0VZX0VOVEVSCitiaW5kIERvdDMrIURvd24gUEFTU0RPVFMKKworCmRpZmYgLS1naXQgYS9UYWJsZXMvSW5wdXQvcG0vZnJvbnQ5Lmt0aSBiL1RhYmxlcy9JbnB1dC9wbS9mcm9udDkua3RpCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUyM2ViZjkKLS0tIC9kZXYvbnVsbAorKysgYi9UYWJsZXMvSW5wdXQvcG0vZnJvbnQ5Lmt0aQpAQCAtMCwwICsxLDYxIEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisjICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorIworIyBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisjCisjIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisjCisjIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyMgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorIyBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyMKKyMgV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworIworIyBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIyBUaGlzIGtleSBzdWJ0YWJsZSBpcyBmb3IgUGFwZW5tZWllciBkaXNwbGF5cyB3aGljaCBoYXZlIDkgZnJvbnQga2V5cy4KKworYmluZCAhSG9tZSBIT01FCitiaW5kICFVcCBXSU5VUAorYmluZCAhRG93biBXSU5ETgorYmluZCAhQmFja3dhcmQgTE5VUAorYmluZCAhRm9yd2FyZCBMTkROCitiaW5kIEN1cnNvciBIV0lOTFQKK2JpbmQgQnJhaWxsZSBIV0lOUlQKK2JpbmQgRnVuY3Rpb24gRldJTkxUCitiaW5kIEF0dHJpYnV0ZSBGV0lOUlQKKworYmluZCBGdW5jdGlvbishSG9tZSBMTkJFRworYmluZCBBdHRyaWJ1dGUrIUhvbWUgTE5FTkQKK2JpbmQgQ3Vyc29yKyFIb21lIENIUkxUCitiaW5kIEJyYWlsbGUrIUhvbWUgQ0hSUlQKKworYmluZCBGdW5jdGlvbishVXAgUFJESUZMTgorYmluZCBBdHRyaWJ1dGUrIVVwIEFUVFJVUAorYmluZCBDdXJzb3IrIVVwIFBSUEdSUEgKK2JpbmQgQnJhaWxsZSshVXAgUFJTRUFSQ0gKK2JpbmQgRnVuY3Rpb24rIURvd24gTlhESUZMTgorYmluZCBBdHRyaWJ1dGUrIURvd24gQVRUUkROCitiaW5kIEN1cnNvcishRG93biBOWFBHUlBICitiaW5kIEJyYWlsbGUrIURvd24gTlhTRUFSQ0gKKworYmluZCBGdW5jdGlvbishQmFja3dhcmQgVE9QX0xFRlQKK2JpbmQgQXR0cmlidXRlKyFCYWNrd2FyZCBUT1AKK2JpbmQgRnVuY3Rpb24rIUZvcndhcmQgQk9UX0xFRlQKK2JpbmQgQXR0cmlidXRlKyFGb3J3YXJkIEJPVAorCitiaW5kIEZ1bmN0aW9uKyFSb3V0aW5nS2V5MSBDTElQX05FVworYmluZCBBdHRyaWJ1dGUrIVJvdXRpbmdLZXkxIENPUFlfUkVDVAorYmluZCBDdXJzb3IrIVJvdXRpbmdLZXkxIFBSSU5ERU5UCitiaW5kIEJyYWlsbGUrIVJvdXRpbmdLZXkxIE5YSU5ERU5UCisKK2JpbmQgRnVuY3Rpb24rQXR0cmlidXRlIFBBU1RFCisKK2luY2x1ZGUgcm91dGluZy5rdGkKKworYXNzaWduIHRvZ2dsZU9mZiBGdW5jdGlvbgorYXNzaWduIHRvZ2dsZU9uIEF0dHJpYnV0ZQoraW5jbHVkZSBzdGF0dXNce3N0YXR1c0tleXN9Lmt0aQpkaWZmIC0tZ2l0IGEvVGFibGVzL0lucHV0L3BtL2liXzgwLmt0YiBiL1RhYmxlcy9JbnB1dC9wbS9pYl84MC5rdGIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjM3M2FhYgotLS0gL2Rldi9udWxsCisrKyBiL1RhYmxlcy9JbnB1dC9wbS9pYl84MC5rdGIKQEAgLTAsMCArMSwyMiBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorIyAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyMKKyMgQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorIworIyBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorIworIyBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisjIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyMgbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisjCisjIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK3RpdGxlIFBhcGVubWVpZXIgQnJhaWxsZVggSUIgODAgQ1IgU29mdAorCithc3NpZ24gc3RhdHVzS2V5cyA0CitpbmNsdWRlIGZyb250OS5rdGkKZGlmZiAtLWdpdCBhL1RhYmxlcy9JbnB1dC9wbS9rZXlib2FyZC5rdGkgYi9UYWJsZXMvSW5wdXQvcG0va2V5Ym9hcmQua3RpCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQxOTEwMTUKLS0tIC9kZXYvbnVsbAorKysgYi9UYWJsZXMvSW5wdXQvcG0va2V5Ym9hcmQua3RpCkBAIC0wLDAgKzEsNDUgQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyMgICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisjCisjIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyMKKyMgQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjIFRoaXMga2V5IHN1YnRhYmxlIGlzIGZvciBQYXBlbm1laWVyIGRpc3BsYXlzIHdoaWNoIGhhdmUgYSBicmFpbGxlIGtleWJvYXJkLgorCittYXAgRG90MSBET1QxCittYXAgRG90MiBET1QyCittYXAgRG90MyBET1QzCittYXAgRG90NCBET1Q0CittYXAgRG90NSBET1Q1CittYXAgRG90NiBET1Q2CittYXAgRG90NyBET1Q3CittYXAgRG90OCBET1Q4CisKK21hcCBMZWZ0U3BhY2UgU1BBQ0UKK21hcCBSaWdodFNwYWNlIFNQQUNFCittYXAgTGVmdFRodW1iIENPTlRST0wKK21hcCBSaWdodFRodW1iIE1FVEEKKworYXNzaWduIGNob3JkIFNwYWNlKworaW5jbHVkZSAuLi9jaG9yZHMua3RpCithc3NpZ24gbm9VbmNob3JkZWQKKworaGlkZSBvbgorYXNzaWduIGNob3JkIExlZnRTcGFjZSsKK2luY2x1ZGUgLi4vY2hvcmRzLmt0aQorCithc3NpZ24gY2hvcmQgUmlnaHRTcGFjZSsKK2luY2x1ZGUgLi4vY2hvcmRzLmt0aQoraGlkZSBvZmYKZGlmZiAtLWdpdCBhL1RhYmxlcy9JbnB1dC9wbS9rZXlzLmt0aSBiL1RhYmxlcy9JbnB1dC9wbS9rZXlzLmt0aQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMGMzNDkxCi0tLSAvZGV2L251bGwKKysrIGIvVGFibGVzL0lucHV0L3BtL2tleXMua3RpCkBAIC0wLDAgKzEsMTE0IEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisjICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorIworIyBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisjCisjIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisjCisjIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyMgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorIyBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyMKKyMgV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworIworIyBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIyBUaGlzIGtleSBzdWJ0YWJsZSBpcyBmb3IgUGFwZW5tZWllciBkaXNwbGF5cyB3aGljaCBoYXZlIGtleXMuCisKK2lmVmFyIGtleUVtdWxhdGlvbgorICBub3RlIFRoZSBsZWZ0IGFuZCByaWdodCBrZXlzIGFyZSBlbXVsYXRlZC4gRW50ZXIga2V5IGVtdWxhdGlvbiBtb2RlIGJ5CisgIG5vdGUgKiBwcmVzc2luZyBUaHVtYjEgKyBUaHVtYjIgKExlZnQgV2luZG93cyArIFJpZ2h0IFdpbmRvd3MpLiBUaGVuIHByZXNzOgorICBub3RlICsgTGVmdCBLZXkgUmVhcjogTGVmdCBUaHVtYiAoTGVmdCBXaW5kb3dzKQorICBub3RlICsgTGVmdCBLZXkgRnJvbnQ6IFNwYWNlICsgTGVmdCBUaHVtYiAoQ29udGV4dCArIExlZnQgV2luZG93cykKKyAgbm90ZSArIFJpZ2h0IEtleSBSZWFyOiBSaWdodCBUaHVtYiAoUmlnaHQgV2luZG93cykKKyAgbm90ZSArIFJpZ2h0IEtleSBGcm9udDogU3BhY2UgKyBSaWdodCBUaHVtYiAoQ29udGV4dCArIFJpZ2h0IFdpbmRvd3MpCitlbHNlCisgIGlmVmFyIG5vUmlnaHRLZXkKKyAgICBub3RlIFRoZSByb2NrZXIgYXQgdGhlIGxlZnQgc2lkZSBvZiB0aGUgdG9wIHRoYXQgZG9lc24ndCBzdGF5IHdoZW4gcHJlc3NlZAorICAgIG5vdGUgKiBpcyBuYW1lZCB0aGUgTGVmdCBLZXkuCisgIGVsc2UKKyAgICBub3RlIFRoZSByb2NrZXJzIGF0IGVhY2ggc2lkZSBvZiB0aGUgdG9wIHRoYXQgZG9uJ3Qgc3RheSB3aGVuIHByZXNzZWQKKyAgICBub3RlICogYXJlIG5hbWVkIHRoZSBMZWZ0IGFuZCBSaWdodCBLZXkuCisgIGVuZElmCitlbmRJZgorCitiaW5kIExlZnRLZXlSZWFyIEJBQ0sKK2JpbmQgTGVmdEtleUZyb250IEhPTUUKKworYmluZCBMZWZ0S2V5UmVhcitCYXJMZWZ0MSBESVNQTUQKK2JpbmQgTGVmdEtleVJlYXIrQmFyUmlnaHQxIENTUlRSSworYmluZCBMZWZ0S2V5UmVhcitCYXJVcDEgU0lYRE9UUworYmluZCBMZWZ0S2V5UmVhcitCYXJEb3duMSBQQVNURQorCitiaW5kIExlZnRLZXlSZWFyK0JhckxlZnQyIEFUVFJWSVMKK2JpbmQgTGVmdEtleVJlYXIrQmFyUmlnaHQyIENTUlZJUworYmluZCBMZWZ0S2V5UmVhcitCYXJVcDIgQ0FQQkxJTksKK2JpbmQgTGVmdEtleVJlYXIrQmFyRG93bjIgQ1NSSk1QX1ZFUlQKKworaGlkZSBvbgorYmluZCBMZWZ0S2V5UmVhcitCYXJMZWZ0MStCYXJMZWZ0MiBBVFRSVklTCitiaW5kIExlZnRLZXlSZWFyK0JhclJpZ2h0MStCYXJSaWdodDIgQ1NSVklTCitiaW5kIExlZnRLZXlSZWFyK0JhclVwMStCYXJVcDIgQ0FQQkxJTksKK2JpbmQgTGVmdEtleVJlYXIrQmFyRG93bjErQmFyRG93bjIgQ1NSSk1QX1ZFUlQKK2hpZGUgb2ZmCisKK2JpbmQgTGVmdEtleUZyb250K0JhckxlZnQxIElORk8KK2JpbmQgTGVmdEtleUZyb250K0JhclJpZ2h0MSBQUkVGTUVOVQorYmluZCBMZWZ0S2V5RnJvbnQrQmFyVXAxIEFVVE9TUEVBSworYmluZCBMZWZ0S2V5RnJvbnQrQmFyRG93bjEgQVVUT1JFUEVBVAorCitiaW5kIExlZnRLZXlGcm9udCtCYXJMZWZ0MiBQUkVGTE9BRAorYmluZCBMZWZ0S2V5RnJvbnQrQmFyUmlnaHQyIFBSRUZTQVZFCitiaW5kIExlZnRLZXlGcm9udCtCYXJVcDIgUkVTVEFSVEJSTAorYmluZCBMZWZ0S2V5RnJvbnQrQmFyRG93bjIgRlJFRVpFCisKK2hpZGUgb24KK2JpbmQgTGVmdEtleUZyb250K0JhckxlZnQxK0JhckxlZnQyIFBSRUZMT0FECitiaW5kIExlZnRLZXlGcm9udCtCYXJSaWdodDErQmFyUmlnaHQyIFBSRUZTQVZFCitiaW5kIExlZnRLZXlGcm9udCtCYXJVcDErQmFyVXAyIFJFU1RBUlRCUkwKK2JpbmQgTGVmdEtleUZyb250K0JhckRvd24xK0JhckRvd24yIEZSRUVaRQoraGlkZSBvZmYKKworaWZOb3RWYXIgbm9SaWdodEtleQorICBiaW5kIFJpZ2h0S2V5UmVhciBIRUxQCisgIGJpbmQgUmlnaHRLZXlGcm9udCBMRUFSTgorCisgIGJpbmQgUmlnaHRLZXlSZWFyK0JhckxlZnQxIE1VVEUKKyAgYmluZCBSaWdodEtleVJlYXIrQmFyUmlnaHQxIFNBWV9MSU5FCisgIGJpbmQgUmlnaHRLZXlSZWFyK0JhclVwMSBTQVlfQUJPVkUKKyAgYmluZCBSaWdodEtleVJlYXIrQmFyRG93bjEgU0FZX0JFTE9XCisKKyAgYmluZCBSaWdodEtleVJlYXIrQmFyTGVmdDIgU0FZX1NMT1dFUgorICBiaW5kIFJpZ2h0S2V5UmVhcitCYXJSaWdodDIgU0FZX0ZBU1RFUgorICBiaW5kIFJpZ2h0S2V5UmVhcitCYXJVcDIgU0FZX0xPVURFUgorICBiaW5kIFJpZ2h0S2V5UmVhcitCYXJEb3duMiBTQVlfU09GVEVSCisKKyAgaGlkZSBvbgorICBiaW5kIFJpZ2h0S2V5UmVhcitCYXJMZWZ0MStCYXJMZWZ0MiBTQVlfU0xPV0VSCisgIGJpbmQgUmlnaHRLZXlSZWFyK0JhclJpZ2h0MStCYXJSaWdodDIgU0FZX0ZBU1RFUgorICBiaW5kIFJpZ2h0S2V5UmVhcitCYXJVcDErQmFyVXAyIFNBWV9MT1VERVIKKyAgYmluZCBSaWdodEtleVJlYXIrQmFyRG93bjErQmFyRG93bjIgU0FZX1NPRlRFUgorICBoaWRlIG9mZgorCisgIGJpbmQgUmlnaHRLZXlGcm9udCtCYXJMZWZ0MSBTS1BJRExOUworICBiaW5kIFJpZ2h0S2V5RnJvbnQrQmFyUmlnaHQxIFNLUEJMTktXSU5TCisgIGJpbmQgUmlnaHRLZXlGcm9udCtCYXJVcDEgU1BLSE9NRQorICBiaW5kIFJpZ2h0S2V5RnJvbnQrQmFyRG93bjEgVFVORVMKKworICBiaW5kIFJpZ2h0S2V5RnJvbnQrQmFyVXAyIFJFU1RBUlRTUEVFQ0gKKyAgYmluZCBSaWdodEtleUZyb250K0JhclJpZ2h0MiBTTElERVdJTgorCisgIGhpZGUgb24KKyAgYmluZCBSaWdodEtleUZyb250K0JhclVwMStCYXJVcDIgUkVTVEFSVFNQRUVDSAorICBiaW5kIFJpZ2h0S2V5RnJvbnQrQmFyUmlnaHQxK0JhclJpZ2h0MiBTTElERVdJTgorICBoaWRlIG9mZgorCisgIGJpbmQgTGVmdEtleVJlYXIrUm91dGluZ0tleTEgQ0xJUF9ORVcKKyAgYmluZCBMZWZ0S2V5RnJvbnQrUm91dGluZ0tleTEgQ0xJUF9BREQKKyAgYmluZCBSaWdodEtleVJlYXIrUm91dGluZ0tleTEgQ09QWV9MSU5FCisgIGJpbmQgUmlnaHRLZXlGcm9udCtSb3V0aW5nS2V5MSBDT1BZX1JFQ1QKK2VuZElmCisKZGlmZiAtLWdpdCBhL1RhYmxlcy9JbnB1dC9wbS9saXZlLmt0YiBiL1RhYmxlcy9JbnB1dC9wbS9saXZlLmt0YgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYWUzZGE4Ci0tLSAvZGV2L251bGwKKysrIGIvVGFibGVzL0lucHV0L3BtL2xpdmUua3RiCkBAIC0wLDAgKzEsMjQgQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyMgICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisjCisjIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyMKKyMgQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCit0aXRsZSBQYXBlbm1laWVyIEJyYWlsbGVYIExpdmUKKworYXNzaWduIGhhc1NpbmdsZVN0ZXBCYXIKK2Fzc2lnbiBzdGF0dXNLZXlzIDAKK2luY2x1ZGUgYmFyLmt0aQoraW5jbHVkZSBrZXlib2FyZC5rdGkKZGlmZiAtLWdpdCBhL1RhYmxlcy9JbnB1dC9wbS9yb3V0aW5nLmt0aSBiL1RhYmxlcy9JbnB1dC9wbS9yb3V0aW5nLmt0aQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40Zjg0MDBhCi0tLSAvZGV2L251bGwKKysrIGIvVGFibGVzL0lucHV0L3BtL3JvdXRpbmcua3RpCkBAIC0wLDAgKzEsMjggQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyMgICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisjCisjIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyMKKyMgQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjIFRoaXMga2V5IHN1YnRhYmxlIGlzIGZvciBQYXBlbm1laWVyIGRpc3BsYXlzIHdoaWNoIGhhdmUgcHJpbWFyeSByb3V0aW5nIGtleXMuCisKK25vdGUgUm91dGluZ0tleTEgcmVmZXJzIHRvIHRoZSByb3cgb2Yga2V5cyBqdXN0IGJlaGluZCB0aGUgdGV4dCBjZWxscy4KK2JpbmQgUm91dGluZ0tleTEgUk9VVEUKKworaWZLZXkgUm91dGluZ0tleTIKKyAgbm90ZSBSb3V0aW5nS2V5MiByZWZlcnMgdG8gdGhlIHJvdyBvZiBrZXlzIGJlaGluZCB0aGUgUm91dGluZ0tleTEgcm93LgorICBiaW5kIFJvdXRpbmdLZXkyIERFU0NDSEFSCitlbmRJZgorCmRpZmYgLS1naXQgYS9UYWJsZXMvSW5wdXQvcG0vc3RhdHVzMC5rdGkgYi9UYWJsZXMvSW5wdXQvcG0vc3RhdHVzMC5rdGkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWE4Zjk4YQotLS0gL2Rldi9udWxsCisrKyBiL1RhYmxlcy9JbnB1dC9wbS9zdGF0dXMwLmt0aQpAQCAtMCwwICsxLDIwIEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisjICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorIworIyBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisjCisjIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisjCisjIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyMgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorIyBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyMKKyMgV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworIworIyBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIyBUaGlzIGtleSBzdWJ0YWJsZSBpcyBmb3IgUGFwZW5tZWllciBkaXNwbGF5cyB3aGljaCBoYXZlIG5vIHN0YXR1cyBrZXlzLgorCmRpZmYgLS1naXQgYS9UYWJsZXMvSW5wdXQvcG0vc3RhdHVzMTMua3RpIGIvVGFibGVzL0lucHV0L3BtL3N0YXR1czEzLmt0aQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZDRhMThkCi0tLSAvZGV2L251bGwKKysrIGIvVGFibGVzL0lucHV0L3BtL3N0YXR1czEzLmt0aQpAQCAtMCwwICsxLDUxIEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisjICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorIworIyBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisjCisjIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisjCisjIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyMgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorIyBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyMKKyMgV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworIworIyBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIyBUaGlzIGtleSBzdWJ0YWJsZSBpcyBmb3IgUGFwZW5tZWllciBkaXNwbGF5cyB3aGljaCBoYXZlIDEzIHN0YXR1cyBrZXlzLgorbm90ZSBUaGUga2V5cyB0byB0aGUgbGVmdCBvZiB0aGUgc3RhdHVzIGNlbGxzIGFyZSBuYW1lZCBTdGF0dXMuMSB0aHJvdWdoIFN0YXR1cy4xMy4KKworYmluZCAhU3RhdHVzLjEgSEVMUAorYmluZCAhU3RhdHVzLjIgTEVBUk4KK2JpbmQgIVN0YXR1cy4zIENTUkpNUF9WRVJUCitiaW5kICFTdGF0dXMuNCBJTkZPCitiaW5kICFTdGF0dXMuNSBCQUNLCisKK2Fzc2lnbiB0b2dnbGVLZXlzIFN0YXR1cy42Cithc3NpZ24gdG9nZ2xlQ29tbWFuZCBDU1JUUksKK2luY2x1ZGUgLi4vdG9nZ2xlLmt0aQorCithc3NpZ24gdG9nZ2xlS2V5cyBTdGF0dXMuNworYXNzaWduIHRvZ2dsZUNvbW1hbmQgRElTUE1ECitpbmNsdWRlIC4uL3RvZ2dsZS5rdGkKKworYXNzaWduIHRvZ2dsZUtleXMgU3RhdHVzLjgKK2Fzc2lnbiB0b2dnbGVDb21tYW5kIEZSRUVaRQoraW5jbHVkZSAuLi90b2dnbGUua3RpCisKK2JpbmQgIVN0YXR1cy45IFBSRUZNRU5VCisKK2Fzc2lnbiB0b2dnbGVLZXlzIFN0YXR1cy4xMAorYXNzaWduIHRvZ2dsZUNvbW1hbmQgQ1NSVklTCitpbmNsdWRlIC4uL3RvZ2dsZS5rdGkKKworYXNzaWduIHRvZ2dsZUtleXMgU3RhdHVzLjExCithc3NpZ24gdG9nZ2xlQ29tbWFuZCBBVFRSVklTCitpbmNsdWRlIC4uL3RvZ2dsZS5rdGkKKworYmluZCAhU3RhdHVzLjEyIFRJTUUKK2JpbmQgIVN0YXR1cy4xMyBQQVNURQpkaWZmIC0tZ2l0IGEvVGFibGVzL0lucHV0L3BtL3N0YXR1czIua3RpIGIvVGFibGVzL0lucHV0L3BtL3N0YXR1czIua3RpCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIyYjIwYWIKLS0tIC9kZXYvbnVsbAorKysgYi9UYWJsZXMvSW5wdXQvcG0vc3RhdHVzMi5rdGkKQEAgLTAsMCArMSwyMyBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorIyAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyMKKyMgQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorIworIyBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorIworIyBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisjIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyMgbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisjCisjIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMgVGhpcyBrZXkgc3VidGFibGUgaXMgZm9yIFBhcGVubWVpZXIgZGlzcGxheXMgd2hpY2ggaGF2ZSAyIHN0YXR1cyBrZXlzLgorbm90ZSBUaGUga2V5cyBiZWhpbmQgdGhlIHN0YXR1cyBjZWxscyBhcmUgbmFtZWQgU3RhdHVzLjEgYW5kIFN0YXR1cy4yLgorCitiaW5kICFTdGF0dXMuMSBIRUxQCitiaW5kICFTdGF0dXMuMiBMRUFSTgpkaWZmIC0tZ2l0IGEvVGFibGVzL0lucHV0L3BtL3N0YXR1czIwLmt0aSBiL1RhYmxlcy9JbnB1dC9wbS9zdGF0dXMyMC5rdGkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjBkYzlhNQotLS0gL2Rldi9udWxsCisrKyBiL1RhYmxlcy9JbnB1dC9wbS9zdGF0dXMyMC5rdGkKQEAgLTAsMCArMSw3MSBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorIyAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyMKKyMgQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorIworIyBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorIworIyBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisjIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyMgbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisjCisjIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMgVGhpcyBrZXkgc3VidGFibGUgaXMgZm9yIFBhcGVubWVpZXIgZGlzcGxheXMgd2hpY2ggaGF2ZSAyMCBzdGF0dXMga2V5cy4KK25vdGUgVGhlIGtleXMgdG8gdGhlIGxlZnQgb2YgdGhlIHN0YXR1cyBjZWxscyBhcmUgbmFtZWQgU3RhdHVzLjEgdGhyb3VnaCBTdGF0dXMuMjAuCisKK2JpbmQgIVN0YXR1cy4xIEhFTFAKK2JpbmQgIVN0YXR1cy4yIExFQVJOCitiaW5kICFTdGF0dXMuMyBDU1JKTVBfVkVSVAorYmluZCAhU3RhdHVzLjQgSU5GTworYmluZCAhU3RhdHVzLjUgQkFDSworCithc3NpZ24gdG9nZ2xlS2V5cyBTdGF0dXMuNgorYXNzaWduIHRvZ2dsZUNvbW1hbmQgQ1NSVFJLCitpbmNsdWRlIC4uL3RvZ2dsZS5rdGkKKworYXNzaWduIHRvZ2dsZUtleXMgU3RhdHVzLjcKK2Fzc2lnbiB0b2dnbGVDb21tYW5kIERJU1BNRAoraW5jbHVkZSAuLi90b2dnbGUua3RpCisKK2Fzc2lnbiB0b2dnbGVLZXlzIFN0YXR1cy44Cithc3NpZ24gdG9nZ2xlQ29tbWFuZCBGUkVFWkUKK2luY2x1ZGUgLi4vdG9nZ2xlLmt0aQorCitiaW5kICFTdGF0dXMuOSBQUkVGTE9BRAorYmluZCAhU3RhdHVzLjEwIFBSRUZNRU5VCitiaW5kICFTdGF0dXMuMTEgUFJFRlNBVkUKKworYXNzaWduIHRvZ2dsZUtleXMgU3RhdHVzLjEyCithc3NpZ24gdG9nZ2xlQ29tbWFuZCBDU1JWSVMKK2luY2x1ZGUgLi4vdG9nZ2xlLmt0aQorCithc3NpZ24gdG9nZ2xlS2V5cyBTdGF0dXMuMTMKK2Fzc2lnbiB0b2dnbGVDb21tYW5kIEFUVFJWSVMKK2luY2x1ZGUgLi4vdG9nZ2xlLmt0aQorCithc3NpZ24gdG9nZ2xlS2V5cyBTdGF0dXMuMTQKK2Fzc2lnbiB0b2dnbGVDb21tYW5kIFNLUElETE5TCitpbmNsdWRlIC4uL3RvZ2dsZS5rdGkKKworYXNzaWduIHRvZ2dsZUtleXMgU3RhdHVzLjE1Cithc3NpZ24gdG9nZ2xlQ29tbWFuZCBTSVhET1RTCitpbmNsdWRlIC4uL3RvZ2dsZS5rdGkKKworYmluZCBTdGF0dXMuMTYgUkVTVEFSVEJSTAorCithc3NpZ24gdG9nZ2xlS2V5cyBTdGF0dXMuMTcKK2Fzc2lnbiB0b2dnbGVDb21tYW5kIEFVVE9TUEVBSworaW5jbHVkZSAuLi90b2dnbGUua3RpCisKK2Fzc2lnbiB0b2dnbGVLZXlzIFN0YXR1cy4xOAorYXNzaWduIHRvZ2dsZUNvbW1hbmQgQVVUT1JFUEVBVAoraW5jbHVkZSAuLi90b2dnbGUua3RpCisKK2JpbmQgU3RhdHVzLjE5IFRJTUUKK2JpbmQgIVN0YXR1cy4yMCBQQVNURQpkaWZmIC0tZ2l0IGEvVGFibGVzL0lucHV0L3BtL3N0YXR1czIyLmt0aSBiL1RhYmxlcy9JbnB1dC9wbS9zdGF0dXMyMi5rdGkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjQ5NmYzYwotLS0gL2Rldi9udWxsCisrKyBiL1RhYmxlcy9JbnB1dC9wbS9zdGF0dXMyMi5rdGkKQEAgLTAsMCArMSw3NiBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorIyAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyMKKyMgQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorIworIyBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorIworIyBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisjIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyMgbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisjCisjIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMgVGhpcyBrZXkgc3VidGFibGUgaXMgZm9yIFBhcGVubWVpZXIgZGlzcGxheXMgd2hpY2ggaGF2ZSAyMiBzdGF0dXMga2V5cy4KK25vdGUgVGhlIGtleXMgdG8gdGhlIGxlZnQgb2YgdGhlIHN0YXR1cyBjZWxscyBhcmUgbmFtZWQgU3RhdHVzLjEgdGhyb3VnaCBTdGF0dXMuMjIuCisKK2JpbmQgIVN0YXR1cy4xIEhFTFAKK2JpbmQgIVN0YXR1cy4yIExFQVJOCitiaW5kICFTdGF0dXMuMyBDU1JKTVBfVkVSVAorYmluZCAhU3RhdHVzLjQgSU5GTworYmluZCAhU3RhdHVzLjUgQkFDSworCithc3NpZ24gdG9nZ2xlS2V5cyBTdGF0dXMuNgorYXNzaWduIHRvZ2dsZUNvbW1hbmQgQ1NSVFJLCitpbmNsdWRlIC4uL3RvZ2dsZS5rdGkKKworYXNzaWduIHRvZ2dsZUtleXMgU3RhdHVzLjcKK2Fzc2lnbiB0b2dnbGVDb21tYW5kIERJU1BNRAoraW5jbHVkZSAuLi90b2dnbGUua3RpCisKK2Fzc2lnbiB0b2dnbGVLZXlzIFN0YXR1cy44Cithc3NpZ24gdG9nZ2xlQ29tbWFuZCBGUkVFWkUKK2luY2x1ZGUgLi4vdG9nZ2xlLmt0aQorCitiaW5kICFTdGF0dXMuOSBQUkVGTE9BRAorYmluZCAhU3RhdHVzLjEwIFBSRUZNRU5VCitiaW5kICFTdGF0dXMuMTEgUFJFRlNBVkUKKworYXNzaWduIHRvZ2dsZUtleXMgU3RhdHVzLjEyCithc3NpZ24gdG9nZ2xlQ29tbWFuZCBDU1JWSVMKK2luY2x1ZGUgLi4vdG9nZ2xlLmt0aQorCithc3NpZ24gdG9nZ2xlS2V5cyBTdGF0dXMuMTMKK2Fzc2lnbiB0b2dnbGVDb21tYW5kIEFUVFJWSVMKK2luY2x1ZGUgLi4vdG9nZ2xlLmt0aQorCithc3NpZ24gdG9nZ2xlS2V5cyBTdGF0dXMuMTQKK2Fzc2lnbiB0b2dnbGVDb21tYW5kIFNLUElETE5TCitpbmNsdWRlIC4uL3RvZ2dsZS5rdGkKKworYXNzaWduIHRvZ2dsZUtleXMgU3RhdHVzLjE1Cithc3NpZ24gdG9nZ2xlQ29tbWFuZCBTSVhET1RTCitpbmNsdWRlIC4uL3RvZ2dsZS5rdGkKKworYmluZCAhU3RhdHVzLjE2IFJFU1RBUlRCUkwKK2JpbmQgIVN0YXR1cy4xNyBSRVNUQVJUU1BFRUNICisKK2Fzc2lnbiB0b2dnbGVLZXlzIFN0YXR1cy4xOAorYXNzaWduIHRvZ2dsZUNvbW1hbmQgQVVUT1NQRUFLCitpbmNsdWRlIC4uL3RvZ2dsZS5rdGkKKworYXNzaWduIHRvZ2dsZUtleXMgU3RhdHVzLjE5Cithc3NpZ24gdG9nZ2xlQ29tbWFuZCBBVVRPUkVQRUFUCitpbmNsdWRlIC4uL3RvZ2dsZS5rdGkKKworYXNzaWduIHRvZ2dsZUtleXMgU3RhdHVzLjIwCithc3NpZ24gdG9nZ2xlQ29tbWFuZCBCUkxVQ0RPVFMKK2luY2x1ZGUgLi4vdG9nZ2xlLmt0aQorCitiaW5kICFTdGF0dXMuMjEgVElNRQorYmluZCAhU3RhdHVzLjIyIFBBU1RFCmRpZmYgLS1naXQgYS9UYWJsZXMvSW5wdXQvcG0vc3RhdHVzNC5rdGkgYi9UYWJsZXMvSW5wdXQvcG0vc3RhdHVzNC5rdGkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjdiM2ZhMQotLS0gL2Rldi9udWxsCisrKyBiL1RhYmxlcy9JbnB1dC9wbS9zdGF0dXM0Lmt0aQpAQCAtMCwwICsxLDI1IEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisjICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorIworIyBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisjCisjIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisjCisjIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyMgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorIyBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyMKKyMgV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworIworIyBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIyBUaGlzIGtleSBzdWJ0YWJsZSBpcyBmb3IgUGFwZW5tZWllciBkaXNwbGF5cyB3aGljaCBoYXZlIDQgc3RhdHVzIGtleXMuCitub3RlIFRoZSBrZXlzIGJlaGluZCB0aGUgc3RhdHVzIGNlbGxzIGFyZSBuYW1lZCBTdGF0dXMuMSB0aHJvdWdoIFN0YXR1cy40LgorCitiaW5kICFTdGF0dXMuMSBIRUxQCitiaW5kICFTdGF0dXMuMiBMRUFSTgorYmluZCAhU3RhdHVzLjMgQ1NSSk1QX1ZFUlQKK2JpbmQgIVN0YXR1cy40IElORk8KZGlmZiAtLWdpdCBhL1RhYmxlcy9JbnB1dC9wbS9zd2l0Y2hlcy5rdGkgYi9UYWJsZXMvSW5wdXQvcG0vc3dpdGNoZXMua3RpCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY3NGNkYWMKLS0tIC9kZXYvbnVsbAorKysgYi9UYWJsZXMvSW5wdXQvcG0vc3dpdGNoZXMua3RpCkBAIC0wLDAgKzEsMTY0IEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisjICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorIworIyBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisjCisjIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisjCisjIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyMgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorIyBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyMKKyMgV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworIworIyBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIyBUaGlzIGtleSBzdWJ0YWJsZSBpcyBmb3IgUGFwZW5tZWllciBkaXNwbGF5cyB3aGljaCBoYXZlIHN3aXRjaGVzLgorCitpZlZhciBrZXlFbXVsYXRpb24KKyAgbm90ZSBUaGUgbGVmdCBhbmQgcmlnaHQgc3dpdGNoZXMgYXJlIGVtdWxhdGVkLiBFbnRlciBrZXkgZW11bGF0aW9uIG1vZGUgYnkKKyAgbm90ZSAqIHByZXNzaW5nIFRodW1iMSArIFRodW1iMiAoTGVmdCBXaW5kb3dzICsgUmlnaHQgV2luZG93cykuIFRoZW4gcHJlc3M6CisgIG5vdGUgKyBMZWZ0IFN3aXRjaCBSZWFyOiBEb3QgMSAoZikKKyAgbm90ZSArIExlZnQgU3dpdGNoIENlbnRlcjogRG90IDIgKGQpCisgIG5vdGUgKyBMZWZ0IFN3aXRjaCBGcm9udDogRG90IDMgKHMpCisgIG5vdGUgKyBSaWdodCBTd2l0Y2ggUmVhcjogRG90IDQgKGopCisgIG5vdGUgKyBSaWdodCBTd2l0Y2ggQ2VudGVyOiBEb3QgNSAoaykKKyAgbm90ZSArIFJpZ2h0IFN3aXRjaCBGcm9udDogRG90IDYgKGwpCisgIG5vdGUgKyBjZW50ZXIgYm90aCBzd2l0Y2hlczogRG90IDcgKGEpCitlbHNlCisgIG5vdGUgVGhlIHJvY2tlcnMgYXQgZWFjaCBzaWRlIG9mIHRoZSB0b3AgdGhhdCBzdGF5IHdoZW4gcHJlc3NlZAorICBub3RlICogYXJlIG5hbWVkIHRoZSBMZWZ0IGFuZCBSaWdodCBTd2l0Y2guCitlbmRJZgorCitjb250ZXh0IHN3aXRjaGVzUmVhckNlbnRlciBBZHZhbmNlZCBWZXJ0aWNhbCBOYXZpZ2F0aW9uIChsZWZ0IHN3aXRjaCByZWFyKQorCitiaW5kIEJhclVwMSBQUkRJRkxOCitiaW5kIEJhckRvd24xIE5YRElGTE4KK2JpbmQgQmFyVXAyIEFUVFJVUAorYmluZCBCYXJEb3duMiBBVFRSRE4KK2JpbmQgQmFyTGVmdDEgUFJQUk9NUFQKK2JpbmQgQmFyUmlnaHQxIE5YUFJPTVBUCitiaW5kIEJhckxlZnQyIFBSUEdSUEgKK2JpbmQgQmFyUmlnaHQyIE5YUEdSUEgKKworaGlkZSBvbgorYmluZCBCYXJVcDErQmFyVXAyIEFUVFJVUAorYmluZCBCYXJEb3duMStCYXJEb3duMiBBVFRSRE4KK2JpbmQgQmFyTGVmdDErQmFyTGVmdDIgUFJQR1JQSAorYmluZCBCYXJSaWdodDErQmFyUmlnaHQyIE5YUEdSUEgKK2hpZGUgb2ZmCisKKworY29udGV4dCBzd2l0Y2hlc0Zyb250Q2VudGVyIFNwZWNpYWxpemVkIE5hdmlnYXRpb24gKGxlZnQgc3dpdGNoIGZyb250KQorCitiaW5kIEJhclVwMSBQUlNFQVJDSAorYmluZCBCYXJEb3duMSBOWFNFQVJDSAorYmluZCBCYXJVcDIgSEVMUAorYmluZCBCYXJEb3duMiBMRUFSTgorYmluZCBCYXJMZWZ0MSBDSFJMVAorYmluZCBCYXJSaWdodDEgQ0hSUlQKK2JpbmQgQmFyTGVmdDIgSFdJTkxUCitiaW5kIEJhclJpZ2h0MiBIV0lOUlQKKworaGlkZSBvbgorYmluZCBCYXJVcDErQmFyVXAyIEhFTFAKK2JpbmQgQmFyRG93bjErQmFyRG93bjIgTEVBUk4KK2JpbmQgQmFyTGVmdDErQmFyTGVmdDIgSFdJTkxUCitiaW5kIEJhclJpZ2h0MStCYXJSaWdodDIgSFdJTlJUCitoaWRlIG9mZgorCisKK2NvbnRleHQgc3dpdGNoZXNDZW50ZXJSZWFyIENvbnRlbnQtYmFzZWQgTmF2aWdhdGlvbiAocmlnaHQgc3dpdGNoIHJlYXIpCisKK2JpbmQgQmFyVXAxIEtFWV9DVVJTT1JfVVAKK2JpbmQgQmFyRG93bjEgS0VZX0NVUlNPUl9ET1dOCitiaW5kIEJhclVwMiBLRVlfUEFHRV9VUAorYmluZCBCYXJEb3duMiBLRVlfUEFHRV9ET1dOCitiaW5kIEJhckxlZnQxIEZXSU5MVCtyb3V0ZQorYmluZCBCYXJSaWdodDEgRldJTlJUK3JvdXRlCitiaW5kIEJhckxlZnQyIExOQkVHK3JvdXRlCitiaW5kIEJhclJpZ2h0MiBMTkVORCtyb3V0ZQorCitoaWRlIG9uCitiaW5kIEJhclVwMStCYXJVcDIgS0VZX1BBR0VfVVAKK2JpbmQgQmFyRG93bjErQmFyRG93bjIgS0VZX1BBR0VfRE9XTgorYmluZCBCYXJMZWZ0MStCYXJMZWZ0MiBMTkJFRytyb3V0ZQorYmluZCBCYXJSaWdodDErQmFyUmlnaHQyIExORU5EK3JvdXRlCitoaWRlIG9mZgorCisKK2NvbnRleHQgc3dpdGNoZXNDZW50ZXJGcm9udCBGdW5jdGlvbiBLZXkgRW11bGF0aW9uIChyaWdodCBzd2l0Y2ggZnJvbnQpCisKK2JpbmQgQmFyVXAxIEtFWV9DVVJTT1JfVVAKK2JpbmQgQmFyRG93bjEgS0VZX0NVUlNPUl9ET1dOCitiaW5kIEJhclVwMiBLRVlfUEFHRV9VUAorYmluZCBCYXJEb3duMiBLRVlfUEFHRV9ET1dOCitiaW5kIEJhckxlZnQxIEtFWV9DVVJTT1JfTEVGVAorYmluZCBCYXJSaWdodDEgS0VZX0NVUlNPUl9SSUdIVAorYmluZCBCYXJMZWZ0MiBLRVlfSE9NRQorYmluZCBCYXJSaWdodDIgS0VZX0VORAorCitoaWRlIG9uCitiaW5kIEJhclVwMStCYXJVcDIgS0VZX1BBR0VfVVAKK2JpbmQgQmFyRG93bjErQmFyRG93bjIgS0VZX1BBR0VfRE9XTgorYmluZCBCYXJMZWZ0MStCYXJMZWZ0MiBLRVlfSE9NRQorYmluZCBCYXJSaWdodDErQmFyUmlnaHQyIEtFWV9FTkQKK2hpZGUgb2ZmCisKKworY29udGV4dCBzd2l0Y2hlc1JlYXJSZWFyIFVudXNlZCAobGVmdCBzd2l0Y2ggcmVhciwgcmlnaHQgc3dpdGNoIHJlYXIpCisKKworY29udGV4dCBzd2l0Y2hlc1JlYXJGcm9udCBVbnVzZWQgKGxlZnQgc3dpdGNoIHJlYXIsIHJpZ2h0IHN3aXRjaCBmcm9udCkKKworCitjb250ZXh0IHN3aXRjaGVzRnJvbnRSZWFyIFVudXNlZCAobGVmdCBzd2l0Y2ggZnJvbnQsIHJpZ2h0IHN3aXRjaCByZWFyKQorCisKK2NvbnRleHQgc3dpdGNoZXNGcm9udEZyb250IFVudXNlZCAobGVmdCBzd2l0Y2ggZnJvbnQsIHJpZ2h0IHN3aXRjaCBmcm9udCkKKworCitjb250ZXh0IHN3aXRjaGVzUmVhckNlbnRlcgoraG90a2V5IExlZnRTd2l0Y2hSZWFyIE5PT1AgQ09OVEVYVCtkZWZhdWx0Citob3RrZXkgUmlnaHRTd2l0Y2hSZWFyIENPTlRFWFQrc3dpdGNoZXNSZWFyUmVhciBOT09QCitob3RrZXkgUmlnaHRTd2l0Y2hGcm9udCBDT05URVhUK3N3aXRjaGVzUmVhckZyb250IE5PT1AKKworY29udGV4dCBzd2l0Y2hlc0Zyb250Q2VudGVyCitob3RrZXkgTGVmdFN3aXRjaEZyb250IE5PT1AgQ09OVEVYVCtkZWZhdWx0Citob3RrZXkgUmlnaHRTd2l0Y2hSZWFyIENPTlRFWFQrc3dpdGNoZXNGcm9udFJlYXIgTk9PUAoraG90a2V5IFJpZ2h0U3dpdGNoRnJvbnQgQ09OVEVYVCtzd2l0Y2hlc0Zyb250RnJvbnQgTk9PUAorCitjb250ZXh0IHN3aXRjaGVzQ2VudGVyUmVhcgoraG90a2V5IFJpZ2h0U3dpdGNoUmVhciBOT09QIENPTlRFWFQrZGVmYXVsdAoraG90a2V5IExlZnRTd2l0Y2hSZWFyIENPTlRFWFQrc3dpdGNoZXNSZWFyUmVhciBOT09QCitob3RrZXkgTGVmdFN3aXRjaEZyb250IENPTlRFWFQrc3dpdGNoZXNGcm9udFJlYXIgTk9PUAorCitjb250ZXh0IHN3aXRjaGVzQ2VudGVyRnJvbnQKK2hvdGtleSBSaWdodFN3aXRjaEZyb250IE5PT1AgQ09OVEVYVCtkZWZhdWx0Citob3RrZXkgTGVmdFN3aXRjaFJlYXIgQ09OVEVYVCtzd2l0Y2hlc1JlYXJGcm9udCBOT09QCitob3RrZXkgTGVmdFN3aXRjaEZyb250IENPTlRFWFQrc3dpdGNoZXNGcm9udEZyb250IE5PT1AKKworY29udGV4dCBzd2l0Y2hlc1JlYXJSZWFyCitob3RrZXkgTGVmdFN3aXRjaFJlYXIgTk9PUCBDT05URVhUK3N3aXRjaGVzQ2VudGVyUmVhcgoraG90a2V5IFJpZ2h0U3dpdGNoUmVhciBOT09QIENPTlRFWFQrc3dpdGNoZXNSZWFyQ2VudGVyCisKK2NvbnRleHQgc3dpdGNoZXNSZWFyRnJvbnQKK2hvdGtleSBMZWZ0U3dpdGNoUmVhciBOT09QIENPTlRFWFQrc3dpdGNoZXNDZW50ZXJGcm9udAoraG90a2V5IFJpZ2h0U3dpdGNoRnJvbnQgTk9PUCBDT05URVhUK3N3aXRjaGVzUmVhckNlbnRlcgorCitjb250ZXh0IHN3aXRjaGVzRnJvbnRSZWFyCitob3RrZXkgTGVmdFN3aXRjaEZyb250IE5PT1AgQ09OVEVYVCtzd2l0Y2hlc0NlbnRlclJlYXIKK2hvdGtleSBSaWdodFN3aXRjaFJlYXIgTk9PUCBDT05URVhUK3N3aXRjaGVzRnJvbnRDZW50ZXIKKworY29udGV4dCBzd2l0Y2hlc0Zyb250RnJvbnQKK2hvdGtleSBMZWZ0U3dpdGNoRnJvbnQgTk9PUCBDT05URVhUK3N3aXRjaGVzQ2VudGVyRnJvbnQKK2hvdGtleSBSaWdodFN3aXRjaEZyb250IE5PT1AgQ09OVEVYVCtzd2l0Y2hlc0Zyb250Q2VudGVyCisKK2NvbnRleHQgZGVmYXVsdAoraG90a2V5IExlZnRTd2l0Y2hSZWFyIENPTlRFWFQrc3dpdGNoZXNSZWFyQ2VudGVyIE5PT1AKK2hvdGtleSBMZWZ0U3dpdGNoRnJvbnQgQ09OVEVYVCtzd2l0Y2hlc0Zyb250Q2VudGVyIE5PT1AKK2hvdGtleSBSaWdodFN3aXRjaFJlYXIgQ09OVEVYVCtzd2l0Y2hlc0NlbnRlclJlYXIgTk9PUAoraG90a2V5IFJpZ2h0U3dpdGNoRnJvbnQgQ09OVEVYVCtzd2l0Y2hlc0NlbnRlckZyb250IE5PT1AKZGlmZiAtLWdpdCBhL1RhYmxlcy9JbnB1dC9wbS90cmlvLmt0YiBiL1RhYmxlcy9JbnB1dC9wbS90cmlvLmt0YgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNzAyNTU2Ci0tLSAvZGV2L251bGwKKysrIGIvVGFibGVzL0lucHV0L3BtL3RyaW8ua3RiCkBAIC0wLDAgKzEsMjMgQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyMgICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisjCisjIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyMKKyMgQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCit0aXRsZSBQYXBlbm1laWVyIEJyYWlsbGVYIFRyaW8KKworYXNzaWduIHN0YXR1c0tleXMgMAoraW5jbHVkZSBiYXIua3RpCitpbmNsdWRlIGtleWJvYXJkLmt0aQpkaWZmIC0tZ2l0IGEvVGFibGVzL0lucHV0L3NrL2JkcC5rdGIgYi9UYWJsZXMvSW5wdXQvc2svYmRwLmt0YgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ODUxMTliCi0tLSAvZGV2L251bGwKKysrIGIvVGFibGVzL0lucHV0L3NrL2JkcC5rdGIKQEAgLTAsMCArMSwxMzggQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyMgICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisjCisjIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyMKKyMgQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCit0aXRsZSBTZWlrYSBCcmFpbGxlIERpc3BsYXlzCisKK25vdGUgVGhlIHJvdW5kIGtleXMgdG8gdGhlIGxlZnQvcmlnaHQgb2YgdGhlIGJyYWlsbGUgY2VsbHMgYXJlIG5hbWVkIEsxIGFuZCBLOC4KK25vdGUgVGhlIGxlZnQvcmlnaHQgZW5kcyBvZiB0aGUgbGVmdCByb2NrZXIgYXJlIG5hbWVkIEsyIGFuZCBLMy4KK25vdGUgVGhlIGxvbmcga2V5cyB0byB0aGUgbGVmdC9yaWdodCBvZiB0aGUgY2VudGVyIGFyZSBuYW1lZCBLNCBhbmQgSzUuCitub3RlIFRoZSBsZWZ0L3JpZ2h0IGVuZHMgb2YgdGhlIHJpZ2h0IHJvY2tlciBhcmUgbmFtZWQgSzYgYW5kIEs3LgorCisjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBEZWZhdWx0IEJpbmRpbmdzICMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK2JpbmQgIVJvdXRpbmdLZXkgUk9VVEUKKworYmluZCBLMSBGV0lOTFQKK2JpbmQgSzggRldJTlJUCisKK2JpbmQgSzIgTE5VUAorYmluZCBLMyBMTkROCitiaW5kIEsyK0szIExOQkVHCisKK2JpbmQgSzYgRldJTkxUU0tJUAorYmluZCBLNyBGV0lOUlRTS0lQCitiaW5kIEs2K0s3IFBBU1RFCisKK2JpbmQgSzQgQ1NSVFJLCitiaW5kIEs1IFJFVFVSTgorYmluZCBLNCtLNSBDU1JKTVBfVkVSVAorCitiaW5kIEs2K0syIFRPUF9MRUZUCitiaW5kIEs2K0szIEJPVF9MRUZUCitiaW5kIEs3K0syIFRPUAorYmluZCBLNytLMyBCT1QKKworYmluZCBLNCtLMiBBVFRSVVAKK2JpbmQgSzQrSzMgQVRUUkROCitiaW5kIEs1K0syIFBSRElGTE4KK2JpbmQgSzUrSzMgTlhESUZMTgorYmluZCBLNCtLNiBQUlBST01QVAorYmluZCBLNCtLNyBOWFBST01QVAorYmluZCBLNStLNiBQUlBHUlBICitiaW5kIEs1K0s3IE5YUEdSUEgKKworYmluZCBLMStLOCtLMiBDT05URVhUK1BSSU5ERU5UCitiaW5kIEsxK0s4K0szIENPTlRFWFQrTlhJTkRFTlQKK2JpbmQgSzErSzgrSzQgQ09OVEVYVCtTRVRMRUZUCitiaW5kIEsxK0s4K0s1IENPTlRFWFQrREVTQ0NIQVIKK2JpbmQgSzErSzgrSzYgQ09OVEVYVCtQUkRJRkNIQVIKK2JpbmQgSzErSzgrSzcgQ09OVEVYVCtOWERJRkNIQVIKKworYmluZCBLMStLOCtLMitLNiBDT05URVhUK0NMSVBfTkVXCitiaW5kIEsxK0s4K0syK0s3IENPTlRFWFQrQ0xJUF9BREQKK2JpbmQgSzErSzgrSzMrSzYgQ09OVEVYVCtDT1BZX0xJTkUKK2JpbmQgSzErSzgrSzMrSzcgQ09OVEVYVCtDT1BZX1JFQ1QKKworYmluZCBLMStLMiBIRUxQCitiaW5kIEsxK0szIExFQVJOCitiaW5kIEsxK0s0IFBSRUZMT0FECitiaW5kIEsxK0s1IFBSRUZTQVZFCitiaW5kIEsxK0s2IFBSRUZNRU5VCitiaW5kIEsxK0s3IElORk8KKworYmluZCBLOCtLMiBESVNQTUQKK2JpbmQgSzgrSzMgRlJFRVpFCitiaW5kIEs4K0s2IFNJWERPVFMKK2JpbmQgSzgrSzcgU0tQSURMTlMKKworCisjIyMjIyMjIyMjIyMjIyMjIworIyBNZW51IEJpbmRpbmdzICMKKyMjIyMjIyMjIyMjIyMjIyMjCisKK2NvbnRleHQgbWVudQorCitiaW5kIEsxIEZXSU5MVAorYmluZCBLOCBGV0lOUlQKKworYmluZCBLMiBNRU5VX1BSRVZfSVRFTQorYmluZCBLMyBNRU5VX05FWFRfSVRFTQorCitiaW5kIEs2IE1FTlVfUFJFVl9TRVRUSU5HCitiaW5kIEs3IE1FTlVfTkVYVF9TRVRUSU5HCisKK2JpbmQgSzQgTUVOVV9GSVJTVF9JVEVNCitiaW5kIEs1IE1FTlVfTEFTVF9JVEVNCisKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBSb3V0aW5nIEtleSBBbHRlcm5hdGl2ZXMgIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitjb250ZXh0IENMSVBfTkVXCitiaW5kICFSb3V0aW5nS2V5IENMSVBfTkVXCisKK2NvbnRleHQgQ0xJUF9BREQKK2JpbmQgIVJvdXRpbmdLZXkgQ0xJUF9BREQKKworY29udGV4dCBDT1BZX0xJTkUKK2JpbmQgIVJvdXRpbmdLZXkgQ09QWV9MSU5FCisKK2NvbnRleHQgQ09QWV9SRUNUCitiaW5kICFSb3V0aW5nS2V5IENPUFlfUkVDVAorCitjb250ZXh0IFNFVExFRlQKK2JpbmQgIVJvdXRpbmdLZXkgU0VUTEVGVAorCitjb250ZXh0IERFU0NDSEFSCitiaW5kICFSb3V0aW5nS2V5IERFU0NDSEFSCisKK2NvbnRleHQgUFJJTkRFTlQKK2JpbmQgIVJvdXRpbmdLZXkgUFJJTkRFTlQKKworY29udGV4dCBOWElOREVOVAorYmluZCAhUm91dGluZ0tleSBOWElOREVOVAorCitjb250ZXh0IFBSRElGQ0hBUgorYmluZCAhUm91dGluZ0tleSBQUkRJRkNIYXIKKworY29udGV4dCBOWERJRkNIQVIKK2JpbmQgIVJvdXRpbmdLZXkgTlhESUZDSGFyCisKZGlmZiAtLWdpdCBhL1RhYmxlcy9JbnB1dC9zay9udGsua3RiIGIvVGFibGVzL0lucHV0L3NrL250ay5rdGIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGVmMTI3NQotLS0gL2Rldi9udWxsCisrKyBiL1RhYmxlcy9JbnB1dC9zay9udGsua3RiCkBAIC0wLDAgKzEsMTQ0IEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisjICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorIworIyBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisjCisjIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisjCisjIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyMgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorIyBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyMKKyMgV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworIworIyBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKwordGl0bGUgU2Vpa2EgTm90ZSBUYWtlcnMKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgRGVmYXVsdCBCaW5kaW5ncyAjCisjIyMjIyMjIyMjIyMjIyMjIyMjIworCitiaW5kIExlZnRKb3lzdGlja1ByZXNzIEhFTFAKK2JpbmQgUmlnaHRKb3lzdGlja1ByZXNzIExFQVJOCisKK2JpbmQgTGVmdEJ1dHRvbitSaWdodEJ1dHRvbiBIT01FCitiaW5kIExlZnRCdXR0b24gRldJTkxUCitiaW5kIFJpZ2h0QnV0dG9uIEZXSU5SVAorCitiaW5kIExlZnRKb3lzdGlja1VwIHRvcAorYmluZCBMZWZ0Sm95c3RpY2tEb3duIEJPVAorYmluZCBMZWZ0Sm95c3RpY2tMZWZ0IExOQkVHCitiaW5kIExlZnRKb3lzdGlja1JpZ2h0IExORU5ECisKK2JpbmQgUmlnaHRKb3lzdGlja1VwIExOVVAKK2JpbmQgUmlnaHRKb3lzdGlja0Rvd24gTE5ETgorYmluZCBSaWdodEpveXN0aWNrTGVmdCBDSFJMVAorYmluZCBSaWdodEpveXN0aWNrUmlnaHQgQ0hSUlQKKworYmluZCBMZWZ0Sm95c3RpY2tMZWZ0K1JpZ2h0Sm95c3RpY2tVcCBBVFRSVVAKK2JpbmQgTGVmdEpveXN0aWNrTGVmdCtSaWdodEpveXN0aWNrRG93biBBVFRSRE4KK2JpbmQgTGVmdEpveXN0aWNrUmlnaHQrUmlnaHRKb3lzdGlja1VwIFBSRElGTE4KK2JpbmQgTGVmdEpveXN0aWNrUmlnaHQrUmlnaHRKb3lzdGlja0Rvd24gTlhESUZMTgorYmluZCBMZWZ0Sm95c3RpY2tVcCtSaWdodEpveXN0aWNrVXAgUFJQUk9NUFQKK2JpbmQgTGVmdEpveXN0aWNrVXArUmlnaHRKb3lzdGlja0Rvd24gTlhQUk9NUFQKK2JpbmQgTGVmdEpveXN0aWNrRG93bitSaWdodEpveXN0aWNrVXAgUFJQR1JQSAorYmluZCBMZWZ0Sm95c3RpY2tEb3duK1JpZ2h0Sm95c3RpY2tEb3duIE5YUEdSUEgKKworYmluZCBMZWZ0Sm95c3RpY2tMZWZ0K1JpZ2h0Sm95c3RpY2tMZWZ0IEhXSU5MVAorYmluZCBMZWZ0Sm95c3RpY2tMZWZ0K1JpZ2h0Sm95c3RpY2tSaWdodCBIV0lOUlQKK2JpbmQgTGVmdEpveXN0aWNrUmlnaHQrUmlnaHRKb3lzdGlja0xlZnQgRldJTkxUU0tJUAorYmluZCBMZWZ0Sm95c3RpY2tSaWdodCtSaWdodEpveXN0aWNrUmlnaHQgRldJTlJUU0tJUAorYmluZCBMZWZ0Sm95c3RpY2tVcCtSaWdodEpveXN0aWNrTGVmdCBQUlNFQVJDSAorYmluZCBMZWZ0Sm95c3RpY2tVcCtSaWdodEpveXN0aWNrUmlnaHQgTlhTRUFSQ0gKK2JpbmQgTGVmdEpveXN0aWNrRG93bitSaWdodEpveXN0aWNrTGVmdCBCQUNLCitiaW5kIExlZnRKb3lzdGlja0Rvd24rUmlnaHRKb3lzdGlja1JpZ2h0IENTUkpNUF9WRVJUCisKK2JpbmQgTGVmdEpveXN0aWNrUHJlc3MrUmlnaHRKb3lzdGlja1VwIElORk8KK2JpbmQgTGVmdEpveXN0aWNrUHJlc3MrUmlnaHRKb3lzdGlja0Rvd24gUFJFRk1FTlUKK2JpbmQgTGVmdEpveXN0aWNrUHJlc3MrUmlnaHRKb3lzdGlja0xlZnQgUFJFRkxPQUQKK2JpbmQgTGVmdEpveXN0aWNrUHJlc3MrUmlnaHRKb3lzdGlja1JpZ2h0IFBSRUZTQVZFCisKK2JpbmQgUm91dGluZ0tleSBST1VURQorYmluZCBMZWZ0QnV0dG9uK1JvdXRpbmdLZXkgU0VUTEVGVAorYmluZCBSaWdodEJ1dHRvbitSb3V0aW5nS2V5IERFU0NDSEFSCisKK2JpbmQgUmlnaHRKb3lzdGlja1VwK1JvdXRpbmdLZXkgUFJJTkRFTlQKK2JpbmQgUmlnaHRKb3lzdGlja0Rvd24rUm91dGluZ0tleSBOWElOREVOVAorYmluZCBSaWdodEpveXN0aWNrTGVmdCtSb3V0aW5nS2V5IFBSRElGQ0hBUgorYmluZCBSaWdodEpveXN0aWNrUmlnaHQrUm91dGluZ0tleSBOWERJRkNIQVIKKworYmluZCBMZWZ0Sm95c3RpY2tQcmVzcytSb3V0aW5nS2V5IFNFVE1BUksKK2JpbmQgUmlnaHRKb3lzdGlja1ByZXNzK1JvdXRpbmdLZXkgR09UT01BUksKKworYmluZCBMZWZ0Sm95c3RpY2tQcmVzcytSaWdodEpveXN0aWNrUHJlc3MgUEFTVEUKK2JpbmQgUm91dGluZ0tleStSb3V0aW5nS2V5IENMSVBfQ09QWQorYmluZCBMZWZ0Sm95c3RpY2tVcCtSb3V0aW5nS2V5K1JvdXRpbmdLZXkgQ0xJUF9BUFBFTkQKK2JpbmQgTGVmdEpveXN0aWNrTGVmdCtSb3V0aW5nS2V5IENMSVBfTkVXCitiaW5kIExlZnRKb3lzdGlja1VwK1JvdXRpbmdLZXkgQ0xJUF9BREQKK2JpbmQgTGVmdEpveXN0aWNrUmlnaHQrUm91dGluZ0tleSBDT1BZX0xJTkUKK2JpbmQgTGVmdEpveXN0aWNrRG93bitSb3V0aW5nS2V5IENPUFlfUkVDVAorCithc3NpZ24gY2hvcmQgU3BhY2UrCitpbmNsdWRlIC4uL2Nob3Jkcy5rdGkKKworbWFwIERvdDEgRE9UMQorbWFwIERvdDIgRE9UMgorbWFwIERvdDMgRE9UMworbWFwIERvdDQgRE9UNAorbWFwIERvdDUgRE9UNQorbWFwIERvdDYgRE9UNgorbWFwIERvdDcgRE9UNworbWFwIERvdDggRE9UOAorbWFwIEJhY2tzcGFjZSBNRVRBCittYXAgU3BhY2UgU1BBQ0UKKworYmluZCBTcGFjZStMZWZ0Sm95c3RpY2tVcCBLRVlfUEFHRV9VUAorYmluZCBTcGFjZStMZWZ0Sm95c3RpY2tEb3duIEtFWV9QQUdFX0RPV04KK2JpbmQgU3BhY2UrTGVmdEpveXN0aWNrTGVmdCBLRVlfSE9NRQorYmluZCBTcGFjZStMZWZ0Sm95c3RpY2tSaWdodCBLRVlfRU5ECitiaW5kIFNwYWNlK0xlZnRKb3lzdGlja1ByZXNzIEtFWV9JTlNFUlQKKworYmluZCBTcGFjZStSaWdodEpveXN0aWNrVXAgS0VZX0NVUlNPUl9VUAorYmluZCBTcGFjZStSaWdodEpveXN0aWNrRG93biBLRVlfQ1VSU09SX0RPV04KK2JpbmQgU3BhY2UrUmlnaHRKb3lzdGlja0xlZnQgS0VZX0NVUlNPUl9MRUZUCitiaW5kIFNwYWNlK1JpZ2h0Sm95c3RpY2tSaWdodCBLRVlfQ1VSU09SX1JJR0hUCitiaW5kIFNwYWNlK1JpZ2h0Sm95c3RpY2tQcmVzcyBLRVlfREVMRVRFCisKK2JpbmQgU3BhY2UrUm91dGluZ0tleSBLRVlfRlVOQ1RJT04KK2JpbmQgQmFja3NwYWNlK1JvdXRpbmdLZXkgU1dJVENIVlQKKworYmluZCBCYWNrc3BhY2UrTGVmdEpveXN0aWNrVXAgU0FZX0xPVURFUgorYmluZCBCYWNrc3BhY2UrTGVmdEpveXN0aWNrRG93biBTQVlfU09GVEVSCitiaW5kIEJhY2tzcGFjZStMZWZ0Sm95c3RpY2tMZWZ0IFNBWV9TTE9XRVIKK2JpbmQgQmFja3NwYWNlK0xlZnRKb3lzdGlja1JpZ2h0IFNBWV9GQVNURVIKK2JpbmQgQmFja3NwYWNlK0xlZnRKb3lzdGlja1ByZXNzIEFVVE9TUEVBSworCitiaW5kIEJhY2tzcGFjZStSaWdodEpveXN0aWNrVXAgU0FZX0FCT1ZFCitiaW5kIEJhY2tzcGFjZStSaWdodEpveXN0aWNrRG93biBTQVlfQkVMT1cKK2JpbmQgQmFja3NwYWNlK1JpZ2h0Sm95c3RpY2tMZWZ0IE1VVEUKK2JpbmQgQmFja3NwYWNlK1JpZ2h0Sm95c3RpY2tSaWdodCBTQVlfTElORQorYmluZCBCYWNrc3BhY2UrUmlnaHRKb3lzdGlja1ByZXNzIFNQS0hPTUUKKworCisjIyMjIyMjIyMjIyMjIyMjIworIyBNZW51IEJpbmRpbmdzICMKKyMjIyMjIyMjIyMjIyMjIyMjCisKK2NvbnRleHQgbWVudQorCitiaW5kIFJpZ2h0Sm95c3RpY2tQcmVzcyBQUkVGTUVOVQorYmluZCBSaWdodEpveXN0aWNrVXAgTUVOVV9QUkVWX0lURU0KK2JpbmQgUmlnaHRKb3lzdGlja0Rvd24gTUVOVV9ORVhUX0lURU0KK2JpbmQgUmlnaHRKb3lzdGlja0xlZnQgTUVOVV9QUkVWX1NFVFRJTkcKK2JpbmQgUmlnaHRKb3lzdGlja1JpZ2h0IE1FTlVfTkVYVF9TRVRUSU5HCisKK2JpbmQgTGVmdEpveXN0aWNrVXAgTUVOVV9GSVJTVF9JVEVNCitiaW5kIExlZnRKb3lzdGlja0Rvd24gTUVOVV9MQVNUX0lURU0KK2JpbmQgTGVmdEpveXN0aWNrTGVmdCBQUkVGTE9BRAorYmluZCBMZWZ0Sm95c3RpY2tSaWdodCBQUkVGU0FWRQorCisKZGlmZiAtLWdpdCBhL1RhYmxlcy9JbnB1dC9zcGVlY2gua3RpIGIvVGFibGVzL0lucHV0L3NwZWVjaC5rdGkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTY3ZjFhMQotLS0gL2Rldi9udWxsCisrKyBiL1RhYmxlcy9JbnB1dC9zcGVlY2gua3RpCkBAIC0wLDAgKzEsNTcgQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyMgICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisjCisjIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyMKKyMgQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitiaW5kIFx7c3BlZWNofURvdDEgQVVUT1NQRUFLK29uCitiaW5kIFx7c3BlZWNofURvdDIgTVVURQorYmluZCBce3NwZWVjaH1Eb3QzIEFVVE9TUEVBSytvZmYKK2JpbmQgXHtzcGVlY2h9RG90NyBTUEVBS19DVVJSX0xPQ04KKworYmluZCBce3NwZWVjaH1Eb3Q0IFNBWV9BQk9WRQorYmluZCBce3NwZWVjaH1Eb3Q1IFNBWV9MSU5FCitiaW5kIFx7c3BlZWNofURvdDYgU0FZX0JFTE9XCitiaW5kIFx7c3BlZWNofURvdDggU0FZX0FMTAorCitiaW5kIFx7c3BlZWNofURvdDErRG90NCBTUEVBS19QUkVWX0xJTkUKK2JpbmQgXHtzcGVlY2h9RG90MStEb3Q1IFNQRUFLX0NVUlJfTElORQorYmluZCBce3NwZWVjaH1Eb3QxK0RvdDYgU1BFQUtfTkVYVF9MSU5FCitiaW5kIFx7c3BlZWNofURvdDErRG90OCBTUEVBS19JTkRFTlQKKworYmluZCBce3NwZWVjaH1Eb3QyK0RvdDQgU1BFQUtfUFJFVl9XT1JECitiaW5kIFx7c3BlZWNofURvdDIrRG90NSBTUEVBS19DVVJSX1dPUkQKK2JpbmQgXHtzcGVlY2h9RG90MitEb3Q2IFNQRUFLX05FWFRfV09SRAorYmluZCBce3NwZWVjaH1Eb3QyK0RvdDggU1BFTExfQ1VSUl9XT1JECisKK2JpbmQgXHtzcGVlY2h9RG90MytEb3Q0IFNQRUFLX1BSRVZfQ0hBUgorYmluZCBce3NwZWVjaH1Eb3QzK0RvdDUgU1BFQUtfQ1VSUl9DSEFSCitiaW5kIFx7c3BlZWNofURvdDMrRG90NiBTUEVBS19ORVhUX0NIQVIKK2JpbmQgXHtzcGVlY2h9RG90MytEb3Q4IERFU0NfQ1VSUl9DSEFSCisKK2JpbmQgXHtzcGVlY2h9RG90NytEb3Q0IFNQRUFLX0ZSU1RfTElORQorYmluZCBce3NwZWVjaH1Eb3Q3K0RvdDUgU1BFQUtfRlJTVF9DSEFSCitiaW5kIFx7c3BlZWNofURvdDcrRG90NiBTUEVBS19MQVNUX0NIQVIKK2JpbmQgXHtzcGVlY2h9RG90NytEb3Q4IFNQRUFLX0xBU1RfTElORQorCitiaW5kIFx7c3BlZWNofVNwYWNlK0RvdDEgU0FZX1NPRlRFUgorYmluZCBce3NwZWVjaH1TcGFjZStEb3Q0IFNBWV9MT1VERVIKK2JpbmQgXHtzcGVlY2h9U3BhY2UrRG90MiBTQVlfU0xPV0VSCitiaW5kIFx7c3BlZWNofVNwYWNlK0RvdDUgU0FZX0ZBU1RFUgorYmluZCBce3NwZWVjaH1TcGFjZStEb3QzIFNBWV9MT1dFUgorYmluZCBce3NwZWVjaH1TcGFjZStEb3Q2IFNBWV9ISUdIRVIKK2JpbmQgXHtzcGVlY2h9U3BhY2UrRG90NyBST1VURV9DVVJSX0xPQ04KK2JpbmQgXHtzcGVlY2h9U3BhY2UrRG90OCBSRVRVUk4KKwpkaWZmIC0tZ2l0IGEvVGFibGVzL0lucHV0L3RuL2FsbC50eHQgYi9UYWJsZXMvSW5wdXQvdG4vYWxsLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNWE1OGY0Ci0tLSAvZGV2L251bGwKKysrIGIvVGFibGVzL0lucHV0L3RuL2FsbC50eHQKQEAgLTAsMCArMSw1MSBAQAorSGVscDogVGVjaG5pQnJhaWxsZQorCitDb21iaW5hdGlvbnMgb2YgZG90cyAxLTg6IEtleWJvYXJkIGlucHV0LgorS2V5IGJlbG93IGRvdCA3OiBFc2NhcGUga2V5LgorS2V5IGJlbG93IGRvdCA4OiBUYWIga2V5LgorTGVmdCBUaHVtYjogQmFja3NwYWNlIGtleS4KK1JpZ2h0IFRodW1iOiBTcGFjZSBiYXIuCitCb3RoIFRodW1iczogRW50ZXIga2V5LgorCitUaGUgdHdvIGtleXMgYXQgdGhlIGxlZnQgcmVhciAoMiBjb2x1bW5zLCAxIHJvdyk6CitFU0MgWzEsMV06IEVudGVyL2xlYXZlIGxlYXJuIG1vZGUuCitNIFsyLDFdOiBFbnRlci9sZWF2ZSBwcmVmZXJlbmNlcyBtZW51LgorCitUaGUgZm91ciBrZXlzIGF0IHRoZSBsZWZ0IG1pZGRsZSAoY3Jvc3MpOgorVG9wL0JvdHRvbTogR28gdXAvZG93biBvbmUgbGluZS4KK0xlZnQvUmlnaHQ6IEdvIGxlZnQvcmlnaHQgb25lIHdpbmRvdy4KKworVGhlIHNpeCBrZXlzIGF0IHRoZSBsZWZ0IGZyb250ICgyIGNvbHVtbnMsIDMgcm93KToKK0lucyBbMSwxXTogR28gdG8gY3Vyc29yIChvciB1bmRvIGN1cnNvciB0cmFja2luZyBtb3Rpb24pLgorRSBbMiwxXTogR28gdG8gdG9wIGxpbmUuCitTdXBwIFsxLDJdOiBUb2dnbGUgY3Vyc29yIHRyYWNraW5nLgorTCBbMiwyXTogR28gdG8gYm90dG9tIGxpbmUuCitYMSBbMSwzXTogR28gbGVmdCBvbmUgY2hhcmFjdGVyLgorWDIgWzIsM106IEdvIHJpZ2h0IG9uZSBjaGFyYWN0ZXIuCisKK1RoZSBvbmUga2V5IGF0IHRoZSByaWdodCByZWFyICgxIGNvbHVtbiwgMSByb3cpOgorWDMgWzEsMV06IEVudGVyL2xlYXZlIHN0YXR1cyBkaXNwbGF5LgorCitUaGUgdHdvIGtleXMgYXQgdGhlIHJpZ2h0IHJlYXIgKDEgY29sdW1uLCAyIHJvd3MpOgorWDQgWzEsMV06IEdvIHVwIHRvIGxpbmUgd2l0aCBkaWZmZXJlbnQgY29udGVudC4KK1g1IFsxLDJdOiBHbyBkb3duIHRvIGxpbmUgd2l0aCBkaWZmZXJlbnQgY29udGVudC4KKworVGhlIGZvdXIga2V5cyBhdCB0aGUgcmlnaHQgcmVhciAoMSBjb2x1bW4sIDQgcm93cyk6CisvIFsxLDF9OiBUb2dnbGUgZnJvemVuIHNjcmVlbi4KKyogWzEsMn06IFRvZ2dsZSBhdHRyaWJ1dGVzIGRpc3BsYXkuCistIFsxLDN9OiBUb2dnbGUgaGlnaGxpZ2h0IHVuZGVybGluZS4KKysgWzEsNH06IFRvZ2dsZSBjdXJzb3IgdmlzaWJpbGl0eS4KKworVGhlIHR3ZWx2ZSBrZXlzIG9mIHRoZSBudW1lcmljIHBhZCAoMyBjb2x1bW5zLCA0IHJvd3MpOgorNyBbMSwxXTogSG9tZSBrZXkuCis4IFsyLDFdOiBDdXJzb3JVcCBrZXkuCis5IFszLDFdOiBQYWdlVXAga2V5LgorNCBbMSwyXTogQ3Vyc29yTGVmdCBrZXkuCis1IFsyLDJdOiBSb3V0ZSBjdXJzb3IgdG8gY3VycmVudCBsaW5lLgorNiBbMywyXTogQ3Vyc29yUmlnaHQga2V5LgorMSBbMSwzXTogRW5kIGtleS4KKzIgWzIsM106IEN1cnNvckRvd24ga2V5LgorMyBbMywzXTogUGFnZURvd24ga2V5LgorVmVyck4zbSBbMSw0XTogVG9nZ2xlIHNpeC1kb3QgYnJhaWxsZS4KKzAgWzIsNF06IEluc2VydCBrZXkuCisuIFszLDRdOiBEZWxldGUga2V5LgpkaWZmIC0tZ2l0IGEvVGFibGVzL0lucHV0L3RvZ2dsZS5rdGkgYi9UYWJsZXMvSW5wdXQvdG9nZ2xlLmt0aQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NTYxNWQ5Ci0tLSAvZGV2L251bGwKKysrIGIvVGFibGVzL0lucHV0L3RvZ2dsZS5rdGkKQEAgLTAsMCArMSwyMSBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorIyAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyMKKyMgQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorIworIyBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorIworIyBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisjIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyMgbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisjCisjIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK2JpbmQgXHt0b2dnbGVLZXlzfSBce3RvZ2dsZUNvbW1hbmR9CitiaW5kIFx7dG9nZ2xlS2V5c30rXHt0b2dnbGVPbn0gXHt0b2dnbGVDb21tYW5kfStvbgorYmluZCBce3RvZ2dsZUtleXN9K1x7dG9nZ2xlT2ZmfSBce3RvZ2dsZUNvbW1hbmR9K29mZgpkaWZmIC0tZ2l0IGEvVGFibGVzL0lucHV0L3RzL25hdi5rdGkgYi9UYWJsZXMvSW5wdXQvdHMvbmF2Lmt0aQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMTA1YWVkCi0tLSAvZGV2L251bGwKKysrIGIvVGFibGVzL0lucHV0L3RzL25hdi5rdGkKQEAgLTAsMCArMSwxMjQgQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyMgICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisjCisjIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyMKKyMgQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitiaW5kIFx7a2V5TmF2VXB9IExOVVAKK2JpbmQgXHtrZXlOYXZEb3dufSBMTkROCisKK2JpbmQgXHtrZXlOYXZMZWZ0fSBGV0lOTFQKK2JpbmQgXHtrZXlOYXZSaWdodH0gRldJTlJUCisKK2JpbmQgXHtrZXlUaHVtYlJpZ2h0fSBIT01FCitiaW5kIFx7a2V5VGh1bWJSaWdodH0rXHtrZXlDdXJzb3JVcH0gQkFDSworCitiaW5kIFx7a2V5VGh1bWJMZWZ0fSBDU1JUUksKKworYmluZCBce2tleU5hdkxlZnR9K1x7a2V5TmF2VXB9IFRPUF9MRUZUCitiaW5kIFx7a2V5TmF2TGVmdH0rXHtrZXlOYXZEb3dufSBCT1RfTEVGVAorCitiaW5kIFx7a2V5VGh1bWJSaWdodH0rXHtrZXlOYXZVcH0gUFJESUZMTgorYmluZCBce2tleVRodW1iUmlnaHR9K1x7a2V5TmF2RG93bn0gTlhESUZMTgorCitiaW5kIFx7a2V5VGh1bWJMZWZ0fStce2tleU5hdlVwfSBBVFRSVVAKK2JpbmQgXHtrZXlUaHVtYkxlZnR9K1x7a2V5TmF2RG93bn0gQVRUUkROCisKK2lmVmFyIGtleUN1cnNvckxlZnQgIGJpbmQgXHtrZXlUaHVtYkxlZnR9K1x7a2V5Q3Vyc29yTGVmdH0gQ0hSTFQKK2lmVmFyIGtleUN1cnNvclJpZ2h0ICBiaW5kIFx7a2V5VGh1bWJMZWZ0fStce2tleUN1cnNvclJpZ2h0fSBDSFJSVAorCitpZlZhciBrZXlDdXJzb3JMZWZ0ICBiaW5kIFx7a2V5Q3Vyc29yVXB9K1x7a2V5Q3Vyc29yTGVmdH0gSFdJTkxUCitpZlZhciBrZXlDdXJzb3JSaWdodCAgYmluZCBce2tleUN1cnNvclVwfStce2tleUN1cnNvclJpZ2h0fSBIV0lOUlQKKworYmluZCBce2tleVRodW1iTGVmdH0rXHtrZXlDdXJzb3JVcH0gV0lOVVAKK2JpbmQgXHtrZXlUaHVtYkxlZnR9K1x7a2V5Q3Vyc29yRG93bn0gV0lORE4KKworYmluZCBce2tleUN1cnNvclVwfStce2tleU5hdkxlZnR9IExOQkVHCitiaW5kIFx7a2V5Q3Vyc29yVXB9K1x7a2V5TmF2UmlnaHR9IExORU5ECisKK2lmVmFyIGtleUN1cnNvckxlZnQgIGJpbmQgXHtrZXlDdXJzb3JMZWZ0fSBLRVlfQ1VSU09SX0xFRlQKK2lmVmFyIGtleUN1cnNvclJpZ2h0ICBiaW5kIFx7a2V5Q3Vyc29yUmlnaHR9IEtFWV9DVVJTT1JfUklHSFQKK2JpbmQgXHtrZXlDdXJzb3JVcH0gS0VZX0NVUlNPUl9VUAorYmluZCBce2tleUN1cnNvckRvd259IEtFWV9DVVJTT1JfRE9XTgorCitpZlZhciBrZXlDdXJzb3JMZWZ0CisgIGlmVmFyIGtleUN1cnNvclJpZ2h0CisgICAgYmluZCBce2tleUN1cnNvckxlZnR9K1x7a2V5Q3Vyc29yUmlnaHR9IEhFTFAKKyAgICBiaW5kIFx7a2V5Q3Vyc29yTGVmdH0rXHtrZXlDdXJzb3JSaWdodH0rXHtrZXlDdXJzb3JVcH0rXHtrZXlDdXJzb3JEb3dufSBMRUFSTgorICBlbmRJZgorZW5kSWYKKworYmluZCBce2tleVRodW1iTGVmdH0rXHtrZXlUaHVtYlJpZ2h0fSBGUkVFWkUKK2JpbmQgXHtrZXlDdXJzb3JVcH0rXHtrZXlOYXZEb3dufSBJTkZPCitiaW5kIFx7a2V5Q3Vyc29yRG93bn0rXHtrZXlOYXZVcH0gQVRUUlZJUworYmluZCBce2tleUN1cnNvckRvd259K1x7a2V5TmF2VXB9K1x7a2V5VGh1bWJMZWZ0fSBESVNQTUQKKworYmluZCBce2tleUN1cnNvckRvd259K1x7a2V5TmF2RG93bn0gQ1NSSk1QX1ZFUlQKKworYmluZCBce2tleU5hdlJpZ2h0fStce2tleU5hdkRvd259IFNBWV9MSU5FCitiaW5kIFx7a2V5TmF2TGVmdH0rXHtrZXlOYXZSaWdodH0rXHtrZXlOYXZEb3dufSBTQVlfQkVMT1cKK2JpbmQgXHtrZXlUaHVtYlJpZ2h0fStce2tleU5hdlJpZ2h0fSBTUEtIT01FCitiaW5kIFx7a2V5TmF2UmlnaHR9K1x7a2V5TmF2VXB9IE1VVEUKK2JpbmQgXHtrZXlDdXJzb3JVcH0rXHtrZXlOYXZVcH0rXHtrZXlOYXZMZWZ0fStce2tleU5hdlJpZ2h0fSBSRVNUQVJUU1BFRUNICisKK2lmVmFyIGtleUN1cnNvclJpZ2h0CisgIGJpbmQgXHtrZXlDdXJzb3JSaWdodH0rXHtrZXlOYXZMZWZ0fSBTQVlfTElORQorICBiaW5kIFx7a2V5Q3Vyc29yUmlnaHR9K1x7a2V5Q3Vyc29yVXB9K1x7a2V5TmF2TGVmdH0rXHtrZXlOYXZVcH0gTVVURQorZW5kSWYKKworYmluZCBce2tleU5hdkxlZnR9K1x7a2V5TmF2UmlnaHR9IFBSRUZNRU5VCitiaW5kIFx7a2V5TmF2TGVmdH0rXHtrZXlOYXZSaWdodH0rXHtrZXlUaHVtYlJpZ2h0fSBQUkVGU0FWRQorYmluZCBce2tleU5hdkxlZnR9K1x7a2V5TmF2UmlnaHR9K1x7a2V5VGh1bWJMZWZ0fStce2tleVRodW1iUmlnaHR9IFBSRUZMT0FECisKK2JpbmQgXHtrZXlOYXZMZWZ0fStce2tleU5hdlJpZ2h0fStce2tleU5hdkRvd259K1x7a2V5VGh1bWJMZWZ0fSBTS1BJRExOUworYmluZCBce2tleU5hdkxlZnR9K1x7a2V5TmF2UmlnaHR9K1x7a2V5TmF2RG93bn0rXHtrZXlUaHVtYlJpZ2h0fSBTS1BJRExOUworYmluZCBce2tleU5hdkxlZnR9K1x7a2V5TmF2UmlnaHR9K1x7a2V5Q3Vyc29yVXB9IENTUlZJUworYmluZCBce2tleU5hdkxlZnR9K1x7a2V5TmF2UmlnaHR9K1x7a2V5Q3Vyc29yVXB9K1x7a2V5VGh1bWJMZWZ0fSBDU1JCTElOSworYmluZCBce2tleU5hdkxlZnR9K1x7a2V5TmF2UmlnaHR9K1x7a2V5Q3Vyc29yRG93bn0gU0lYRE9UUworYmluZCBce2tleU5hdkxlZnR9K1x7a2V5TmF2UmlnaHR9K1x7a2V5Q3Vyc29yRG93bn0rXHtrZXlUaHVtYkxlZnR9IENBUEJMSU5LCitiaW5kIFx7a2V5TmF2TGVmdH0rXHtrZXlOYXZSaWdodH0rXHtrZXlOYXZVcH0rXHtrZXlUaHVtYkxlZnR9IEFUVFJCTElOSworCitpZlZhciBrZXlDdXJzb3JMZWZ0CisgIGJpbmQgXHtrZXlOYXZMZWZ0fStce2tleU5hdlJpZ2h0fStce2tleUN1cnNvckxlZnR9IFNMSURFV0lOCisgIGJpbmQgXHtrZXlOYXZMZWZ0fStce2tleU5hdlJpZ2h0fStce2tleUN1cnNvckxlZnR9K1x7a2V5VGh1bWJMZWZ0fSBUVU5FUworZW5kSWYKKworaWZWYXIga2V5Q3Vyc29yUmlnaHQKKyAgYmluZCBce2tleU5hdkxlZnR9K1x7a2V5TmF2UmlnaHR9K1x7a2V5Q3Vyc29yUmlnaHR9K1x7a2V5VGh1bWJMZWZ0fSBBVFRSQkxJTksKK2VuZElmCisKK2lmS2V5IFJvdXRpbmdLZXkKKyAgYXNzaWduIGtleVJvdXRpbmdVcCBce2tleU5hdlVwfQorICBhc3NpZ24ga2V5Um91dGluZ0Rvd24gXHtrZXlOYXZEb3dufQorICBpbmNsdWRlIHJvdXRpbmcua3RpCisKKyAgYmluZCBSb3V0aW5nS2V5K1x7a2V5TmF2TGVmdH0gQ0xJUF9ORVcKKyAgaWZWYXIga2V5Q3Vyc29yTGVmdCAgYmluZCBSb3V0aW5nS2V5K1x7a2V5Q3Vyc29yTGVmdH0gQ0xJUF9BREQKKyAgYmluZCBSb3V0aW5nS2V5K1x7a2V5TmF2UmlnaHR9IENPUFlfUkVDVAorICBpZlZhciBrZXlDdXJzb3JSaWdodCAgYmluZCBSb3V0aW5nS2V5K1x7a2V5Q3Vyc29yUmlnaHR9IENPUFlfTElORQorCisgIGJpbmQgUm91dGluZ0tleStce2tleUN1cnNvclVwfSBTRVRMRUZUCisgIGJpbmQgUm91dGluZ0tleStce2tleUN1cnNvckRvd259IERFU0NDSEFSCisKKyAgYmluZCBSb3V0aW5nS2V5K1x7a2V5VGh1bWJMZWZ0fSBTRVRNQVJLCisgIGJpbmQgUm91dGluZ0tleStce2tleVRodW1iUmlnaHR9IEdPVE9NQVJLCitlbmRJZgorCitjb250ZXh0IG1lbnUKK2JpbmQgXHtrZXlUaHVtYkxlZnR9IE1FTlVfUFJFVl9TRVRUSU5HCitiaW5kIFx7a2V5VGh1bWJSaWdodH0gTUVOVV9ORVhUX1NFVFRJTkcKK2JpbmQgXHtrZXlDdXJzb3JVcH0gTUVOVV9QUkVWX1NFVFRJTkcKK2JpbmQgXHtrZXlDdXJzb3JEb3dufSBNRU5VX05FWFRfU0VUVElORworCmRpZmYgLS1naXQgYS9UYWJsZXMvSW5wdXQvdHMvbmF2MjAua3RiIGIvVGFibGVzL0lucHV0L3RzL25hdjIwLmt0YgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ODA2YWI3Ci0tLSAvZGV2L251bGwKKysrIGIvVGFibGVzL0lucHV0L3RzL25hdjIwLmt0YgpAQCAtMCwwICsxLDIxIEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisjICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorIworIyBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisjCisjIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisjCisjIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyMgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorIyBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyMKKyMgV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworIworIyBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKwordGl0bGUgTmF2aWdhdG9yIDIwCisKK2luY2x1ZGUgbmF2X3NtYWxsLmt0aQpkaWZmIC0tZ2l0IGEvVGFibGVzL0lucHV0L3RzL25hdjQwLmt0YiBiL1RhYmxlcy9JbnB1dC90cy9uYXY0MC5rdGIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2EwNDIyMAotLS0gL2Rldi9udWxsCisrKyBiL1RhYmxlcy9JbnB1dC90cy9uYXY0MC5rdGIKQEAgLTAsMCArMSwyMSBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorIyAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyMKKyMgQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorIworIyBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorIworIyBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisjIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyMgbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisjCisjIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK3RpdGxlIE5hdmlnYXRvciA0MAorCitpbmNsdWRlIG5hdl9zbWFsbC5rdGkKZGlmZiAtLWdpdCBhL1RhYmxlcy9JbnB1dC90cy9uYXY4MC5rdGIgYi9UYWJsZXMvSW5wdXQvdHMvbmF2ODAua3RiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE5ZjMyZDIKLS0tIC9kZXYvbnVsbAorKysgYi9UYWJsZXMvSW5wdXQvdHMvbmF2ODAua3RiCkBAIC0wLDAgKzEsMjQgQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyMgICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisjCisjIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyMKKyMgQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCit0aXRsZSBOYXZpZ2F0b3IgODAKKworYXNzaWduIHJvdXRpbmdSaWdodDEgODAKK2Fzc2lnbiByb3V0aW5nUmlnaHQyIDc5Cithc3NpZ24gcm91dGluZ1JpZ2h0MyA3OAoraW5jbHVkZSBuYXZfbGFyZ2Uua3RpCmRpZmYgLS1naXQgYS9UYWJsZXMvSW5wdXQvdHMvbmF2X2xhcmdlLmt0aSBiL1RhYmxlcy9JbnB1dC90cy9uYXZfbGFyZ2Uua3RpCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM5NDNkZmQKLS0tIC9kZXYvbnVsbAorKysgYi9UYWJsZXMvSW5wdXQvdHMvbmF2X2xhcmdlLmt0aQpAQCAtMCwwICsxLDM4IEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisjICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorIworIyBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisjCisjIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisjCisjIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyMgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorIyBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyMKKyMgV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworIworIyBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworYXNzaWduIGtleUN1cnNvckxlZnQgQ3Vyc29yTGVmdAorYXNzaWduIGtleUN1cnNvclJpZ2h0IEN1cnNvclJpZ2h0Cithc3NpZ24ga2V5Q3Vyc29yVXAgQ3Vyc29yVXAKK2Fzc2lnbiBrZXlDdXJzb3JEb3duIEN1cnNvckRvd24KKworYXNzaWduIGtleU5hdkxlZnQgTGVmdE91dGVyCithc3NpZ24ga2V5TmF2UmlnaHQgUmlnaHRPdXRlcgorYXNzaWduIGtleU5hdlVwIExlZnRJbm5lcgorYXNzaWduIGtleU5hdkRvd24gUmlnaHRJbm5lcgorCithc3NpZ24ga2V5VGh1bWJMZWZ0IExlZnRUaHVtYgorYXNzaWduIGtleVRodW1iUmlnaHQgUmlnaHRUaHVtYgorCitub3RlIFRoZSBrZXlzIG9mIHRoZSBmb3VyLWtleSBwYWQgaW4gdGhlIG1pZGRsZSBhcmUgbmFtZWQ6Citub3RlIFx7a2V5Q3Vyc29yTGVmdH0sIFx7a2V5Q3Vyc29yUmlnaHR9LCBce2tleUN1cnNvclVwfSwgXHtrZXlDdXJzb3JEb3dufS4KK25vdGUgVGhlIGtleXMgb24gZWFjaCBzaWRlIG9mIHRoZSBwYWQgYXJlIG5hbWVkOiBce2tleVRodW1iTGVmdH0sIFx7a2V5VGh1bWJSaWdodH0uCitub3RlIFRoZSBvdXRlciBlbmQga2V5cyBhcmUgbmFtZWQ6IFx7a2V5TmF2TGVmdH0sIFx7a2V5TmF2UmlnaHR9Lgorbm90ZSBUaGUgaW5uZXIgZW5kIGtleXMgYXJlIG5hbWVkOiBce2tleU5hdlVwfSwgXHtrZXlOYXZEb3dufS4KKworaW5jbHVkZSBuYXYua3RpCmRpZmYgLS1naXQgYS9UYWJsZXMvSW5wdXQvdHMvbmF2X3NtYWxsLmt0aSBiL1RhYmxlcy9JbnB1dC90cy9uYXZfc21hbGwua3RpCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU5YjQ4NzcKLS0tIC9kZXYvbnVsbAorKysgYi9UYWJsZXMvSW5wdXQvdHMvbmF2X3NtYWxsLmt0aQpAQCAtMCwwICsxLDM4IEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisjICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorIworIyBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisjCisjIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisjCisjIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyMgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorIyBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyMKKyMgV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworIworIyBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworYXNzaWduIGtleUN1cnNvckxlZnQgQ3Vyc29yTGVmdAorYXNzaWduIGtleUN1cnNvclJpZ2h0IEN1cnNvclJpZ2h0Cithc3NpZ24ga2V5Q3Vyc29yVXAgQ3Vyc29yVXAKK2Fzc2lnbiBrZXlDdXJzb3JEb3duIEN1cnNvckRvd24KKworYXNzaWduIGtleU5hdkxlZnQgTmF2TGVmdAorYXNzaWduIGtleU5hdlJpZ2h0IE5hdlJpZ2h0Cithc3NpZ24ga2V5TmF2VXAgTmF2VXAKK2Fzc2lnbiBrZXlOYXZEb3duIE5hdkRvd24KKworYXNzaWduIGtleVRodW1iTGVmdCBUaHVtYkxlZnQKK2Fzc2lnbiBrZXlUaHVtYlJpZ2h0IFRodW1iUmlnaHQKKworbm90ZSBUaGUga2V5cyBvZiB0aGUgZm91ci1rZXkgcGFkIG9uIHRoZSBsZWZ0IGFyZSBuYW1lZDoKK25vdGUgXHtrZXlDdXJzb3JMZWZ0fSwgXHtrZXlDdXJzb3JSaWdodH0sIFx7a2V5Q3Vyc29yVXB9LCBce2tleUN1cnNvckRvd259Lgorbm90ZSBUaGUga2V5cyBvZiB0aGUgZm91ci1rZXkgcGFkIG9uIHRoZSByaWdodCBhcmUgbmFtZWQ6Citub3RlIFx7a2V5TmF2TGVmdH0sIFx7a2V5TmF2UmlnaHR9LCBce2tleU5hdlVwfSwgXHtrZXlOYXZEb3dufS4KK25vdGUgVGhlIGtleXMgaW4gYmV0d2VlbiB0aGUgcGFkcyBhcmUgbmFtZWQ6IFx7a2V5VGh1bWJMZWZ0fSwgXHtrZXlUaHVtYlJpZ2h0fS4KKworaW5jbHVkZSBuYXYua3RpCmRpZmYgLS1naXQgYS9UYWJsZXMvSW5wdXQvdHMvcGIua3RpIGIvVGFibGVzL0lucHV0L3RzL3BiLmt0aQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZDAwZjVhCi0tLSAvZGV2L251bGwKKysrIGIvVGFibGVzL0lucHV0L3RzL3BiLmt0aQpAQCAtMCwwICsxLDEyMSBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorIyAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyMKKyMgQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorIworIyBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorIworIyBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisjIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyMgbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisjCisjIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK2JpbmQgUmlnaHRSb2NrZXJVcCBMTlVQCitiaW5kIFJpZ2h0Um9ja2VyRG93biBMTkROCisKK2JpbmQgQmFyMSBMTlVQCitiaW5kIEJhcjIgTE5ETgorYmluZCBCYXIzIExORE4KK2JpbmQgQmFyNCBMTkROCisKK2JpbmQgQnV0dG9uMyBGV0lOTFQKK2JpbmQgQnV0dG9uNCBGV0lOUlQKKworYmluZCBDb25jYXZlIEhPTUUKK2JpbmQgQ29uY2F2ZStMZWZ0Um9ja2VyVXAgQkFDSworCitiaW5kIENvbnZleCBDU1JUUksKKworYmluZCBCdXR0b24xK0JhcjEgVE9QX0xFRlQKK2JpbmQgQnV0dG9uMStCYXIyIEJPVF9MRUZUCisKK2JpbmQgQnV0dG9uMitCYXIxIFBSRElGTE4KK2JpbmQgQnV0dG9uMitCYXIyIE5YRElGTE4KK2JpbmQgQnV0dG9uMitCYXIzIE5YRElGTE4KK2JpbmQgQnV0dG9uMitCYXI0IE5YRElGTE4KKworYmluZCBCdXR0b24yK1JpZ2h0Um9ja2VyVXAgQVRUUlVQCitiaW5kIEJ1dHRvbjIrUmlnaHRSb2NrZXJEb3duIEFUVFJETgorCitiaW5kIENvbnZleCtCdXR0b24xIENIUkxUCitiaW5kIENvbnZleCtCdXR0b24yIENIUlJUCisKK2JpbmQgTGVmdFJvY2tlclVwK0J1dHRvbjEgSFdJTkxUCitiaW5kIExlZnRSb2NrZXJVcCtCdXR0b24yIEhXSU5SVAorCitiaW5kIENvbnZleCtMZWZ0Um9ja2VyVXAgV0lOVVAKK2JpbmQgQ29udmV4K0xlZnRSb2NrZXJEb3duIFdJTkROCisKK2JpbmQgQnV0dG9uMStCdXR0b24yK0JhcjEgV0lOVVAKK2JpbmQgQnV0dG9uMStCdXR0b24yK0JhcjIgV0lORE4KKworYmluZCBMZWZ0Um9ja2VyVXArQnV0dG9uMyBMTkJFRworYmluZCBMZWZ0Um9ja2VyVXArQnV0dG9uNCBMTkVORAorCitiaW5kIEJ1dHRvbjEgS0VZX0NVUlNPUl9MRUZUCitiaW5kIEJ1dHRvbjIgS0VZX0NVUlNPUl9SSUdIVAorYmluZCBMZWZ0Um9ja2VyVXAgS0VZX0NVUlNPUl9VUAorYmluZCBMZWZ0Um9ja2VyRG93biBLRVlfQ1VSU09SX0RPV04KKworYmluZCBCdXR0b24xK0J1dHRvbjIgSEVMUAorYmluZCBCdXR0b24xK0J1dHRvbjIrQnV0dG9uMytCdXR0b240IExFQVJOCitiaW5kIEJ1dHRvbjMrQnV0dG9uNCBJTkZPCisKK2JpbmQgTGVmdFJvY2tlckRvd24rUmlnaHRSb2NrZXJEb3duIENTUkpNUF9WRVJUCisKK2JpbmQgQmFyMitSaWdodFJvY2tlckRvd24gU0FZX0xJTkUKK2JpbmQgQmFyMStCYXIyK1JpZ2h0Um9ja2VyRG93biBTQVlfQkVMT1cKK2JpbmQgQ29uY2F2ZStCYXIyIFNQS0hPTUUKK2JpbmQgQmFyMitSaWdodFJvY2tlclVwIE1VVEUKK2JpbmQgQmFyMStCYXIyK0xlZnRSb2NrZXJVcCtSaWdodFJvY2tlclVwIFJFU1RBUlRTUEVFQ0gKKworYmluZCBCYXIxK0JhcjIgUFJFRk1FTlUKK2JpbmQgQmFyMStCYXIyK0NvbmNhdmUgUFJFRlNBVkUKK2JpbmQgQmFyMStCYXIyK0NvbnZleCtDb25jYXZlIFBSRUZMT0FECisKK2JpbmQgQmFyMStCYXIyK0J1dHRvbjEgQ1NSVklTCitiaW5kIEJhcjErQmFyMitCdXR0b24xK0NvbnZleCBDU1JCTElOSworYmluZCBCYXIxK0JhcjIrQnV0dG9uMiBUVU5FUworYmluZCBCYXIxK0JhcjIrQnV0dG9uMitDb252ZXggQ0FQQkxJTksKK2JpbmQgQmFyMStCYXIyK0xlZnRSb2NrZXJEb3duIFNJWERPVFMKKworYmluZCBTd2l0Y2gxVXAgQVRUUlZJUytvbgorYmluZCBTd2l0Y2gxRG93biBBVFRSVklTK29mZgorCitiaW5kIFN3aXRjaDFVcCtDb252ZXggQVRUUkJMSU5LK29uCitiaW5kIFN3aXRjaDFEb3duK0NvbnZleCBBVFRSQkxJTksrb2ZmCisKK2JpbmQgU3dpdGNoMlVwIEZSRUVaRStvbgorYmluZCBTd2l0Y2gyRG93biBGUkVFWkUrb2ZmCisKK2JpbmQgU3dpdGNoM1VwIFNLUElETE5TK29uCitiaW5kIFN3aXRjaDNEb3duIFNLUElETE5TK29mZgorCitiaW5kIFN3aXRjaDRVcCBESVNQTUQrb24KK2JpbmQgU3dpdGNoNERvd24gRElTUE1EK29mZgorCithc3NpZ24ga2V5Um91dGluZ1VwIFJpZ2h0Um9ja2VyVXAKK2Fzc2lnbiBrZXlSb3V0aW5nRG93biBSaWdodFJvY2tlckRvd24KK2luY2x1ZGUgcm91dGluZy5rdGkKKworYmluZCBSb3V0aW5nS2V5K0J1dHRvbjEgQ0xJUF9ORVcKK2JpbmQgUm91dGluZ0tleStCdXR0b24yIENMSVBfQURECitiaW5kIFJvdXRpbmdLZXkrQnV0dG9uMyBDT1BZX1JFQ1QKK2JpbmQgUm91dGluZ0tleStCdXR0b240IENPUFlfTElORQorCitiaW5kIFJvdXRpbmdLZXkrTGVmdFJvY2tlclVwIFNFVExFRlQKK2JpbmQgUm91dGluZ0tleStMZWZ0Um9ja2VyRG93biBTV0lUQ0hWVAorCitiaW5kIFJvdXRpbmdLZXkrQ29udmV4IFNFVE1BUksKK2JpbmQgUm91dGluZ0tleStDb25jYXZlIEdPVE9NQVJLCisKK2NvbnRleHQgbWVudQorYmluZCBDb252ZXggTUVOVV9QUkVWX1NFVFRJTkcKK2JpbmQgQ29uY2F2ZSBNRU5VX05FWFRfU0VUVElORworCmRpZmYgLS1naXQgYS9UYWJsZXMvSW5wdXQvdHMvcGI0MC5rdGIgYi9UYWJsZXMvSW5wdXQvdHMvcGI0MC5rdGIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjhhOWY2YgotLS0gL2Rldi9udWxsCisrKyBiL1RhYmxlcy9JbnB1dC90cy9wYjQwLmt0YgpAQCAtMCwwICsxLDI0IEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisjICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorIworIyBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisjCisjIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisjCisjIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyMgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorIyBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyMKKyMgV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworIworIyBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKwordGl0bGUgUG93ZXIgQnJhaWxsZSA0MAorCithc3NpZ24gcm91dGluZ1JpZ2h0MSA0MAorYXNzaWduIHJvdXRpbmdSaWdodDIgMzkKK2Fzc2lnbiByb3V0aW5nUmlnaHQzIDM4CitpbmNsdWRlIHBiX3NtYWxsLmt0aQpkaWZmIC0tZ2l0IGEvVGFibGVzL0lucHV0L3RzL3BiNjUua3RiIGIvVGFibGVzL0lucHV0L3RzL3BiNjUua3RiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAyM2FkNWEKLS0tIC9kZXYvbnVsbAorKysgYi9UYWJsZXMvSW5wdXQvdHMvcGI2NS5rdGIKQEAgLTAsMCArMSwyNCBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorIyAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyMKKyMgQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorIworIyBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorIworIyBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisjIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyMgbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisjCisjIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK3RpdGxlIFBvd2VyIEJyYWlsbGUgNjUKKworYXNzaWduIHJvdXRpbmdSaWdodDEgNjUKK2Fzc2lnbiByb3V0aW5nUmlnaHQyIDY0Cithc3NpZ24gcm91dGluZ1JpZ2h0MyA2MworaW5jbHVkZSBwYl9sYXJnZS5rdGkKZGlmZiAtLWdpdCBhL1RhYmxlcy9JbnB1dC90cy9wYjgwLmt0YiBiL1RhYmxlcy9JbnB1dC90cy9wYjgwLmt0YgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNDdhODEzCi0tLSAvZGV2L251bGwKKysrIGIvVGFibGVzL0lucHV0L3RzL3BiODAua3RiCkBAIC0wLDAgKzEsMjQgQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyMgICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisjCisjIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyMKKyMgQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCit0aXRsZSBQb3dlciBCcmFpbGxlIDgwCisKK2Fzc2lnbiByb3V0aW5nUmlnaHQxIDgxCithc3NpZ24gcm91dGluZ1JpZ2h0MiA4MAorYXNzaWduIHJvdXRpbmdSaWdodDMgNzkKK2luY2x1ZGUgcGJfbGFyZ2Uua3RpCmRpZmYgLS1naXQgYS9UYWJsZXMvSW5wdXQvdHMvcGJfbGFyZ2Uua3RpIGIvVGFibGVzL0lucHV0L3RzL3BiX2xhcmdlLmt0aQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NWJjOGYwCi0tLSAvZGV2L251bGwKKysrIGIvVGFibGVzL0lucHV0L3RzL3BiX2xhcmdlLmt0aQpAQCAtMCwwICsxLDI0IEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisjICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorIworIyBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisjCisjIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisjCisjIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyMgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorIyBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyMKKyMgV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworIworIyBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworbm90ZSBUaGUga2V5cyBvbiB0aGUgdG9wLCBmcm9tIGxlZnQgdG8gcmlnaHQsIGFyZSBuYW1lZDoKK25vdGUgQnV0dG9uMSwgQnV0dG9uMiwgQmFyMSwgQmFyMiwgQmFyMywgQmFyNCwgQnV0dG9uMywgQnV0dG9uNC4KK25vdGUgVGhlIGtleXMgb24gdGhlIGZyb250LCBmcm9tIGxlZnQgdG8gcmlnaHQsIGFyZSBuYW1lZDoKK25vdGUgU3dpdGNoMSwgU3dpdGNoMiwgTGVmdFJvY2tlciwgQ29udmV4LCBDb25jYXZlLCBSaWdodFJvY2tlciwgU3dpdGNoMywgU3dpdGNoNC4KKworaW5jbHVkZSBwYi5rdGkKZGlmZiAtLWdpdCBhL1RhYmxlcy9JbnB1dC90cy9wYl9zbWFsbC5rdGkgYi9UYWJsZXMvSW5wdXQvdHMvcGJfc21hbGwua3RpCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI0M2Q4MDUKLS0tIC9kZXYvbnVsbAorKysgYi9UYWJsZXMvSW5wdXQvdHMvcGJfc21hbGwua3RpCkBAIC0wLDAgKzEsMzUgQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyMgICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisjCisjIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyMKKyMgQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCithc3NpZ24ga2V5Q3Vyc29yVXAgTGVmdFJvY2tlclVwCithc3NpZ24ga2V5Q3Vyc29yRG93biBMZWZ0Um9ja2VyRG93bgorCithc3NpZ24ga2V5TmF2TGVmdCBCYWNrd2FyZAorYXNzaWduIGtleU5hdlJpZ2h0IEZvcndhcmQKK2Fzc2lnbiBrZXlOYXZVcCBSaWdodFJvY2tlclVwCithc3NpZ24ga2V5TmF2RG93biBSaWdodFJvY2tlckRvd24KKworYXNzaWduIGtleVRodW1iTGVmdCBDb252ZXgKK2Fzc2lnbiBrZXlUaHVtYlJpZ2h0IENvbmNhdmUKKworbm90ZSBUaGUgcG9zaXRpb25zIG9mIHRoZSBsZWZ0IGJhciBhcmUgbmFtZWQ6IFx7a2V5Q3Vyc29yVXB9LCBce2tleUN1cnNvckRvd259Lgorbm90ZSBUaGUgcG9zaXRpb25zIG9mIHRoZSByaWdodCBiYXIgYXJlIG5hbWVkOiBce2tleU5hdlVwfSwgXHtrZXlOYXZEb3dufS4KK25vdGUgVGhlIGtleXMgaW4gdGhlIG1pZGRsZSBhcmUgbmFtZWQ6IFx7a2V5VGh1bWJMZWZ0fSwgXHtrZXlUaHVtYlJpZ2h0fS4KK25vdGUgVGhlIGtleXMgb24gdGhlIHRvcCBhcmUgbmFtZWQ6IFx7a2V5TmF2TGVmdH0gKG9uIHRoZSBsZWZ0KSwgXHtrZXlOYXZSaWdodH0gKG9uIHRoZSByaWdodCkuCisKK2luY2x1ZGUgbmF2Lmt0aQpkaWZmIC0tZ2l0IGEvVGFibGVzL0lucHV0L3RzL3JvdXRpbmcua3RpIGIvVGFibGVzL0lucHV0L3RzL3JvdXRpbmcua3RpCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk5NTEyZDkKLS0tIC9kZXYvbnVsbAorKysgYi9UYWJsZXMvSW5wdXQvdHMvcm91dGluZy5rdGkKQEAgLTAsMCArMSw0NCBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorIyAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyMKKyMgQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorIworIyBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorIworIyBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisjIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyMgbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisjCisjIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK2JpbmQgUm91dGluZ0tleSBST1VURQorYmluZCBSb3V0aW5nS2V5K1JvdXRpbmdLZXkgQ0xJUF9DT1BZCisKK2JpbmQgUm91dGluZ0tleS4xK1JvdXRpbmdLZXkuXHtyb3V0aW5nUmlnaHQxfSBIRUxQCitiaW5kIFJvdXRpbmdLZXkuMStSb3V0aW5nS2V5LjIrUm91dGluZ0tleS5ce3JvdXRpbmdSaWdodDJ9K1JvdXRpbmdLZXkuXHtyb3V0aW5nUmlnaHQxfSBMRUFSTgorCitiaW5kIFJvdXRpbmdLZXkuMStSb3V0aW5nS2V5LjIgQ0hSTFQKK2JpbmQgUm91dGluZ0tleS5ce3JvdXRpbmdSaWdodDJ9K1JvdXRpbmdLZXkuXHtyb3V0aW5nUmlnaHQxfSBDSFJSVAorCitiaW5kIFJvdXRpbmdLZXkuMStSb3V0aW5nS2V5LjMgSFdJTkxUCitiaW5kIFJvdXRpbmdLZXkuXHtyb3V0aW5nUmlnaHQzfStSb3V0aW5nS2V5Llx7cm91dGluZ1JpZ2h0MX0gSFdJTlJUCisKK2JpbmQgUm91dGluZ0tleS4yK1JvdXRpbmdLZXkuMyBQQVNURQorCitiaW5kIFJvdXRpbmdLZXkrXHtrZXlSb3V0aW5nVXB9IFBSSU5ERU5UCitiaW5kIFJvdXRpbmdLZXkrXHtrZXlSb3V0aW5nRG93bn0gTlhJTkRFTlQKKworYmluZCBSb3V0aW5nS2V5LjErUm91dGluZ0tleS4yK1x7a2V5Um91dGluZ1VwfSBQUlBHUlBICitiaW5kIFJvdXRpbmdLZXkuMStSb3V0aW5nS2V5LjIrXHtrZXlSb3V0aW5nRG93bn0gTlhQR1JQSAorCitiaW5kIFJvdXRpbmdLZXkuMStSb3V0aW5nS2V5LjMrXHtrZXlSb3V0aW5nVXB9IFBSU0VBUkNICitiaW5kIFJvdXRpbmdLZXkuMStSb3V0aW5nS2V5LjMrXHtrZXlSb3V0aW5nRG93bn0gTlhTRUFSQ0gKKworYmluZCBSb3V0aW5nS2V5LjIrUm91dGluZ0tleS4zK1x7a2V5Um91dGluZ1VwfSBQUlBST01QVAorYmluZCBSb3V0aW5nS2V5LjIrUm91dGluZ0tleS4zK1x7a2V5Um91dGluZ0Rvd259IE5YUFJPTVBUCisKZGlmZiAtLWdpdCBhL1RhYmxlcy9JbnB1dC90dC9hbGwudHh0IGIvVGFibGVzL0lucHV0L3R0L2FsbC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2Q5MzNiNQotLS0gL2Rldi9udWxsCisrKyBiL1RhYmxlcy9JbnB1dC90dC9hbGwudHh0CkBAIC0wLDAgKzEsMjMgQEAKK0hlbHA6IFRUWQorCitCYXNpYyBOYXZpZ2F0aW9uOgorTGVmdC9SaWdodCBBcnJvdzogR28gbGVmdC9yaWdodCBvbmUgd2luZG93LgorVXAvRG93biBBcnJvdzogR28gdXAvZG93biBvbmUgbGluZS4KK1ByZXZpb3VzL05leHQgUGFnZTogR28gdG8gdG9wL2JvdHRvbSAgbGluZS4KK0hvbWUvRW5kOiBHbyB0byB0b3AtbGVmdC9ib3R0b20tbGVmdCBjb3JuZXIuCitJbnNlcnQ6IEdvIHRvIGN1cnNvci4KKworQWR2YW5jZWQgTmF2aWdhdGlvbjoKK0Y1L0Y2OiBHbyB0byBwcmV2aW91cy9uZXh0IGxpbmUgd2l0aCBkaWZmZXJlbnQgY29udGVudC4KK0Y3L0Y4OiBHbyB0byBwcmV2aW91cy9uZXh0IGxpbmUgd2l0aCBkaWZmZXJlbnQgaGlnaGxpZ2h0aW5nLgorRjkvRjEyOiBHbyB0byBiZWdpbm5pbmcvZW5kIG9mIGxpbmUuCitGMTAvRjExOiBHbyBsZWZ0L3JpZ2h0IG9uZSBjaGFyYWN0ZXIuCitGMTcvRjE4OiBHbyB0byBwcmV2aW91cy9uZXh0IGNvbW1hbmQgcHJvbXB0LgorRjE5L0YyMDogR28gdG8gbmVhcmVzdCBsaW5lIG9mIHByZXZpb3VzL25leHQgcGFyYWdyYXBoLgorCitNb2RlcyBhbmQgRmVhdHVyZXM6CitGMTogSGVscCBzY3JlZW4gKHRvZ2dsZSkuCitGMjogQ29tbWFuZCBsZWFybiBtb2RlICh0b2dnbGUpLgorRjM6IFN0YXR1cyBsaW5lICh0b2dnbGUpLgorRjQ6IFByZWZlcmVuY2VzIG1lbnUgKHRvZ2dsZSkuCitEZWxldGU6IEN1cnNvciB0cmFja2luZyAodG9nZ2xlKS4KZGlmZiAtLWdpdCBhL1RhYmxlcy9JbnB1dC92ZC9hbGwudHh0IGIvVGFibGVzL0lucHV0L3ZkL2FsbC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGRiNGE1MwotLS0gL2Rldi9udWxsCisrKyBiL1RhYmxlcy9JbnB1dC92ZC9hbGwudHh0CkBAIC0wLDAgKzEsMjYgQEAKK0hlbHA6IFZpZGVvQnJhaWxsZQorCitNb3ZlbWVudCBrZXlzOgorICAgIFVwICBVcCBvbmUgbGluZQorICAgIExlZnQrVXAgIFRvcCBsZWZ0IGNvcm5lciBvZiBzY3JlZW4KKyAgICBMZWZ0ICBHbyBsZWZ0IG9uZSB3aW5kb3cKKyAgICBEb3duICBEb3duIG9uZSBsaW5lCisgICAgUmlnaHQrRG93biAgQm90dG9tIGxlZnQgY29ybmVyIG9mIHNjcmVlbgorICAgIFJpZ2h0ICBHbyByaWdodCBvbmUgd2luZG93CisgICAgRWRpdCAgR28gYmFjayB0byBjdXJzb3IKKyAgICBMZWZ0K0N1cnMgIE9uZSBjaGFyYWN0ZXIgbGVmdAorICAgIFJpZ2h0K0VkaXQgIE9uZSBjaGFyYWN0ZXIgcmlnaHQKKworT3RoZXIgZnVuY3Rpb25zOgorICAgIEN1cnMgIFRvZ2dsZSBjdXJzb3IgdHJhY2tpbmcKKyAgICBNZW51ICBFbnRlciBwcmVmZXJlbmNlcyBtZW51CisgICAgQXR0ciAgVG9nZ2xlIGF0dHJpYnV0ZXMKKyAgICBNZW51K0N1cnMgIFZpZXcgaW5mbworICAgIEF0dHIrRG93biAgVmlldyBoZWxwCisKK0N1dCAmIFBhc3RlCisgICAgU21hbGwgYnV0dG9uK0VkaXQgIE1hcmsgYmVnaW5uaW5nIG9mIGJsb2NrCisgICAgU21hbGwgYnV0dG9uK01lbnUgIE1hcmsgdGhlIGVuZCBvZiBibG9jaworICAgIEF0dHIrTWVudSAgUGFzdGUKK1dhcm5pbmc6IHNtYWxsIGJ1dHRvbiBzdGFuZHMgZm9yIG9uZSBvZiB0aGUgNDAgc21hbGwgYnV0dG9ucyBvbiB0aGUgZGlzcGxheS4KK1dhcm5pbmc6IGRvbid0IHByZXNzIEVkaXQgb3IgTWVudSBiZWZvcmUgdGhlIHNtYWxsIGJ1dHRvbi4KZGlmZiAtLWdpdCBhL1RhYmxlcy9JbnB1dC92by9hbGwua3RiIGIvVGFibGVzL0lucHV0L3ZvL2FsbC5rdGIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTUzOTI4ZQotLS0gL2Rldi9udWxsCisrKyBiL1RhYmxlcy9JbnB1dC92by9hbGwua3RiCkBAIC0wLDAgKzEsMjEgQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyMgICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisjCisjIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyMKKyMgQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCit0aXRsZSBWb3lhZ2VyCisKK2luY2x1ZGUgYWxsLmt0aQpkaWZmIC0tZ2l0IGEvVGFibGVzL0lucHV0L3ZvL2FsbC5rdGkgYi9UYWJsZXMvSW5wdXQvdm8vYWxsLmt0aQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZTU1NzNiCi0tLSAvZGV2L251bGwKKysrIGIvVGFibGVzL0lucHV0L3ZvL2FsbC5rdGkKQEAgLTAsMCArMSwxMTggQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyMgICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisjCisjIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyMKKyMgQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBEZWZhdWx0IEJpbmRpbmdzICMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK2JpbmQgVGh1bWIxK1RodW1iNCBUSU1FCisKK2JpbmQgUm91dGluZ0tleSBST1VURQorCitiaW5kIFRodW1iMSBGV0lOTFQKK2JpbmQgVGh1bWI0IEZXSU5SVAorYmluZCBUaHVtYjIgTE5VUAorYmluZCBUaHVtYjMgTE5ETgorCitiaW5kIFRodW1iMStUaHVtYjIgVE9QX0xFRlQKK2JpbmQgVGh1bWIxK1RodW1iMyBCT1RfTEVGVAorYmluZCBUaHVtYjQrVGh1bWIyIFRPUAorYmluZCBUaHVtYjQrVGh1bWIzIEJPVAorCitiaW5kIFVwIEtFWV9DVVJTT1JfVVAKK2JpbmQgRG93biBLRVlfQ1VSU09SX0RPV04KKworYmluZCBMZWZ0IEJBQ0sKK2JpbmQgUmlnaHQgSE9NRQorYmluZCBMZWZ0K1JpZ2h0IENTUlRSSworCitiaW5kIExlZnQrVXAgRElTUE1ECitiaW5kIExlZnQrRG93biBTSVhET1RTCitiaW5kIFJpZ2h0K1VwIEFVVE9SRVBFQVQKK2JpbmQgUmlnaHQrRG93biBBVVRPU1BFQUsKKworYXNzaWduIGNob3JkIFRodW1iMisKK2luY2x1ZGUgLi4vY2hvcmRzLmt0aQorCitiaW5kIFRodW1iMStSb3V0aW5nS2V5IENMSVBfTkVXCitiaW5kIFRodW1iMitSb3V0aW5nS2V5IENMSVBfQURECitiaW5kIFRodW1iMytSb3V0aW5nS2V5IENPUFlfTElORQorYmluZCBUaHVtYjQrUm91dGluZ0tleSBDT1BZX1JFQ1QKK2JpbmQgUm91dGluZ0tleSshUm91dGluZ0tleSBDTElQX0NPUFkKK2JpbmQgVGh1bWIyK1RodW1iMyBQQVNURQorCitiaW5kIFRodW1iMStVcCBBVFRSVVAKK2JpbmQgVGh1bWIxK0Rvd24gQVRUUkROCitiaW5kIFRodW1iMitVcCBQUkRJRkxOCitiaW5kIFRodW1iMitEb3duIE5YRElGTE4KK2JpbmQgVGh1bWIzK1VwIFBSUFJPTVBUCitiaW5kIFRodW1iMytEb3duIE5YUFJPTVBUCitiaW5kIFRodW1iNCtVcCBQUlBHUlBICitiaW5kIFRodW1iNCtEb3duIE5YUEdSUEgKKworYmluZCBUaHVtYjErTGVmdCBQUlNFQVJDSAorYmluZCBUaHVtYjErUmlnaHQgTlhTRUFSQ0gKK2JpbmQgVGh1bWIyK0xlZnQgRldJTkxUU0tJUAorYmluZCBUaHVtYjIrUmlnaHQgRldJTlJUU0tJUAorYmluZCBUaHVtYjMrTGVmdCBDSFJMVAorYmluZCBUaHVtYjMrUmlnaHQgQ0hSUlQKK2JpbmQgVGh1bWI0K0xlZnQgTE5CRUcKK2JpbmQgVGh1bWI0K1JpZ2h0IExORU5ECisKK0JpbmQgTGVmdCtSb3V0aW5nS2V5IFNFVExFRlQKK0JpbmQgUmlnaHQrUm91dGluZ0tleSBERVNDQ0hBUgorYmluZCBVcCtSb3V0aW5nS2V5IFNXSVRDSFZUCitiaW5kIERvd24rUm91dGluZ0tleSBLRVlfRlVOQ1RJT04KKworYmluZCBUaHVtYjErVGh1bWIyK1JvdXRpbmdLZXkgUFJJTkRFTlQKK2JpbmQgVGh1bWIxK1RodW1iMytSb3V0aW5nS2V5IE5YSU5ERU5UCitiaW5kIFRodW1iNCtUaHVtYjIrUm91dGluZ0tleSBQUkRJRkNIQVIKK2JpbmQgVGh1bWI0K1RodW1iMytSb3V0aW5nS2V5IE5YRElGQ0hBUgorCittYXAgRG90MSBET1QxCittYXAgRG90MiBET1QyCittYXAgRG90MyBET1QzCittYXAgRG90NCBET1Q0CittYXAgRG90NSBET1Q1CittYXAgRG90NiBET1Q2CittYXAgRG90NyBET1Q3CittYXAgRG90OCBET1Q4CittYXAgVGh1bWIyIFNQQUNFCittYXAgVGh1bWIzIFNQQUNFCittYXAgTGVmdCBVUFBFUgorbWFwIFJpZ2h0IENPTlRST0wKKworCisjIyMjIyMjIyMjIyMjIyMjIworIyBNZW51IEJpbmRpbmdzICMKKyMjIyMjIyMjIyMjIyMjIyMjCisKK2NvbnRleHQgbWVudQorCitiaW5kIFRodW1iMiBNRU5VX1BSRVZfSVRFTQorYmluZCBUaHVtYjMgTUVOVV9ORVhUX0lURU0KKworYmluZCBVcCBNRU5VX0ZJUlNUX0lURU0KK2JpbmQgRG93biBNRU5VX0xBU1RfSVRFTQorCitiaW5kIExlZnQgTUVOVV9QUkVWX1NFVFRJTkcKK2JpbmQgUmlnaHQgTUVOVV9ORVhUX1NFVFRJTkcKKworYmluZCBMZWZ0K1JpZ2h0IFBSRUZNRU5VCitiaW5kIExlZnQrVXAgUFJFRkxPQUQKK2JpbmQgTGVmdCtEb3duIFBSRUZTQVZFCmRpZmYgLS1naXQgYS9UYWJsZXMvSW5wdXQvdm8vYnAua3RiIGIvVGFibGVzL0lucHV0L3ZvL2JwLmt0YgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZjZjZWFiCi0tLSAvZGV2L251bGwKKysrIGIvVGFibGVzL0lucHV0L3ZvL2JwLmt0YgpAQCAtMCwwICsxLDIxIEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisjICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorIworIyBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisjCisjIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisjCisjIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyMgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorIyBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyMKKyMgV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworIworIyBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKwordGl0bGUgQnJhaWxsZSBQZW4gMTIKKworaW5jbHVkZSAuLi9icC9hbGwua3RpCmRpZmYgLS1naXQgYS9UYWJsZXMvSW5wdXQvdnIvYWxsLnR4dCBiL1RhYmxlcy9JbnB1dC92ci9hbGwudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJlYjYzZjQKLS0tIC9kZXYvbnVsbAorKysgYi9UYWJsZXMvSW5wdXQvdnIvYWxsLnR4dApAQCAtMCwwICsxLDMgQEAKK0hlbHA6IFZpcnR1YWwgKGNsaWVudC9zZXJ2ZXIpCisKK05vIGhlbHAgYXZhaWxhYmxlIGZvciB0aGlzIGRyaXZlci4KZGlmZiAtLWdpdCBhL1RhYmxlcy9JbnB1dC92cy9hbGwudHh0IGIvVGFibGVzL0lucHV0L3ZzL2FsbC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWIyNWRkYwotLS0gL2Rldi9udWxsCisrKyBiL1RhYmxlcy9JbnB1dC92cy9hbGwudHh0CkBAIC0wLDAgKzEsOSBAQAorSGVscDogVmlzaW9CcmFpbGxlCisKK0xlcyB0b3VjaGVzIGR1IGNsYXZpZXIgYXV4aWxpYWlyZSBzJ3V0aWxpc2VudCBjb21tZSBzb3VzIERPUy9XaW5kb3dzLgorTGVzIG9w6XJhdGlvbnMgZGUgY2hhbmdlbWVudCBkZSBtb2RlIGQnYWZmaWNoYWdlICg2LTggcG9pbnRzKSwgZGUgc2ltdWxhdGlvbiBkZQordG91Y2hlcy4uLiBzZSBmb250IOlnYWxlbWVudCBjb21tZSBzb3VzIERPUy9XaW5kb3dzLgorRW4gb3V0cmUsIHF1ZWxxdWVzIGNvbW1hbmRlcyB+fiBzdWl2aSBkJ3VuZSBsZXR0cmUgc29udCBkaXNwb25pYmxlcywKK3JlcG9ydGV6LXZvdXMgYXUgZmljaGllciBSRUFETUUgZHUgculwZXJ0b2lyZSBWaXNpb0JyYWlsbGUgcG91ciBlbiBzYXZvaXIKK3BsdXMuCisgCmRpZmYgLS1naXQgYS9UYWJsZXMvSW5wdXQveHcvYWxsLnR4dCBiL1RhYmxlcy9JbnB1dC94dy9hbGwudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcwMjAyNDQKLS0tIC9kZXYvbnVsbAorKysgYi9UYWJsZXMvSW5wdXQveHcvYWxsLnR4dApAQCAtMCwwICsxLDMgQEAKK0hlbHA6IFhXaW5kb3cgKGdyYXBoaWNhbCB1c2VyIGludGVyZmFjZSkKKworTm8gaGVscCBhdmFpbGFibGUgZm9yIHRoaXMgZHJpdmVyLgpkaWZmIC0tZ2l0IGEvVGFibGVzL0tleWJvYXJkL2JyYWlsbGUua3RiIGIvVGFibGVzL0tleWJvYXJkL2JyYWlsbGUua3RiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU0Mjk3OTgKLS0tIC9kZXYvbnVsbAorKysgYi9UYWJsZXMvS2V5Ym9hcmQvYnJhaWxsZS5rdGIKQEAgLTAsMCArMSw2MCBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorIyAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyMKKyMgQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorIworIyBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorIworIyBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisjIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyMgbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisjCisjIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK3RpdGxlIEJpbmRpbmdzIGZvciBCcmFpbGxlIEtleWJvYXJkcworCitiaW5kIEJhY2t3YXJkIEZXSU5MVFNLSVAKK2JpbmQgRm9yd2FyZCBGV0lOUlRTS0lQCisKK2JpbmQgQmFja3dhcmQrQXJyb3dMZWZ0IExOQkVHCitiaW5kIEJhY2t3YXJkK0Fycm93UmlnaHQgTE5FTkQKK2JpbmQgQmFja3dhcmQrQXJyb3dVcCBUT1AKK2JpbmQgQmFja3dhcmQrQXJyb3dEb3duIEJPVAorYmluZCBCYWNrd2FyZCtTZWxlY3QgQkFDSworCitiaW5kIEZvcndhcmQrQXJyb3dMZWZ0IEZXSU5MVAorYmluZCBGb3J3YXJkK0Fycm93UmlnaHQgRldJTlJUCitiaW5kIEZvcndhcmQrQXJyb3dVcCBMTlVQCitiaW5kIEZvcndhcmQrQXJyb3dEb3duIExORE4KK2JpbmQgRm9yd2FyZCtTZWxlY3QgSE9NRQorCitiaW5kIFJvdXRpbmdLZXkgUk9VVEUKK2JpbmQgQmFja3dhcmQrUm91dGluZ0tleSBTRVRMRUZUCitiaW5kIEZvcndhcmQrUm91dGluZ0tleSBERVNDQ0hBUgorCitiaW5kIEJhY2t3YXJkK0ZvcndhcmQgUEFTVEUKK2JpbmQgUm91dGluZ0tleSshUm91dGluZ0tleSBDTElQX0NPUFkKK2JpbmQgQXJyb3dMZWZ0K1JvdXRpbmdLZXkgQ0xJUF9ORVcKK2JpbmQgQXJyb3dVcCtSb3V0aW5nS2V5IENMSVBfQURECitiaW5kIEFycm93UmlnaHQrUm91dGluZ0tleSBDT1BZX0xJTkUKK2JpbmQgQXJyb3dEb3duK1JvdXRpbmdLZXkgQ09QWV9SRUNUCisKK21hcCBEb3QxIERPVDEKK21hcCBEb3QyIERPVDIKK21hcCBEb3QzIERPVDMKK21hcCBEb3Q0IERPVDQKK21hcCBEb3Q1IERPVDUKK21hcCBEb3Q2IERPVDYKK21hcCBEb3Q3IERPVDcKK21hcCBEb3Q4IERPVDgKK21hcCBCUkFJTExFX1NwYWNlIFNQQUNFCisKK2Fzc2lnbiBjaG9yZCBCUkFJTExFX1NwYWNlKworaW5jbHVkZSAuLi9JbnB1dC9jaG9yZHMua3RpCitiaW5kIEJSQUlMTEVfU3BhY2UrUm91dGluZ0tleSBLRVlfRlVOQ1RJT04KKwpkaWZmIC0tZ2l0IGEvVGFibGVzL0tleWJvYXJkL2JyYWlsbGUua3RpIGIvVGFibGVzL0tleWJvYXJkL2JyYWlsbGUua3RpCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMxZmJiN2EKLS0tIC9kZXYvbnVsbAorKysgYi9UYWJsZXMvS2V5Ym9hcmQvYnJhaWxsZS5rdGkKQEAgLTAsMCArMSw3MCBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorIyAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyMKKyMgQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorIworIyBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorIworIyBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisjIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyMgbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisjCisjIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK2NvbnRleHQgYnJhaWxsZSBCcmFpbGxlIElucHV0IE1vZGUKKworaWdub3JlIEdyYXZlCitpZ25vcmUgTWludXMKK2lnbm9yZSBFcXVhbHMKK2lnbm9yZSBCYWNrc2xhc2gKKworaWdub3JlIHEKK2lnbm9yZSB3CitpZ25vcmUgZQoraWdub3JlIHIKK2lnbm9yZSB0CitpZ25vcmUgeQoraWdub3JlIHUKK2lnbm9yZSBpCitpZ25vcmUgbworaWdub3JlIHAKK2lnbm9yZSBMZWZ0QnJhY2tldAoraWdub3JlIFJpZ2h0QnJhY2tldAorCittYXAgYSBET1Q3CittYXAgcyBET1QzCittYXAgZCBET1QyCittYXAgZiBET1QxCittYXAgZyBTUEFDRQorbWFwIGggU1BBQ0UKK21hcCBqIERPVDQKK21hcCBrIERPVDUKK21hcCBsIERPVDYKK21hcCBTZW1pY29sb24gRE9UOAoraWdub3JlIEFwb3N0cm9waGUKKworaWdub3JlIHoKK2lnbm9yZSB4CitpZ25vcmUgYworaWdub3JlIHYKK2lnbm9yZSBiCitpZ25vcmUgbgoraWdub3JlIG0KK2lnbm9yZSBDb21tYQoraWdub3JlIFBlcmlvZAoraWdub3JlIFNsYXNoCisKK21hcCBTaGlmdExlZnQgVVBQRVIKK21hcCBTaGlmdFJpZ2h0IFVQUEVSCittYXAgQ29udHJvbExlZnQgQ09OVFJPTAorbWFwIENvbnRyb2xSaWdodCBDT05UUk9MCittYXAgQWx0TGVmdCBNRVRBCisKK2NvbnRleHQgZGVmYXVsdAorYmluZCBce2JyYWlsbGVPbn0gQ09OVEVYVCticmFpbGxlCitiaW5kIFx7YnJhaWxsZU9mZn0gQ09OVEVYVCtkZWZhdWx0CmRpZmYgLS1naXQgYS9UYWJsZXMvS2V5Ym9hcmQvZGVza3RvcC5rdGIgYi9UYWJsZXMvS2V5Ym9hcmQvZGVza3RvcC5rdGIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmRhMTMxZAotLS0gL2Rldi9udWxsCisrKyBiL1RhYmxlcy9LZXlib2FyZC9kZXNrdG9wLmt0YgpAQCAtMCwwICsxLDIxIEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisjICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorIworIyBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisjCisjIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisjCisjIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyMgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorIyBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyMKKyMgV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworIworIyBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKwordGl0bGUgQmluZGluZ3MgZm9yIEZ1bGwgS2V5Ym9hcmRzCisKK2luY2x1ZGUgZGVza3RvcC5rdGkKZGlmZiAtLWdpdCBhL1RhYmxlcy9LZXlib2FyZC9kZXNrdG9wLmt0aSBiL1RhYmxlcy9LZXlib2FyZC9kZXNrdG9wLmt0aQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MzRjMjRkCi0tLSAvZGV2L251bGwKKysrIGIvVGFibGVzL0tleWJvYXJkL2Rlc2t0b3Aua3RpCkBAIC0wLDAgKzEsNjIgQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyMgICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisjCisjIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyMKKyMgQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitiaW5kIEtQMCshS1A1IFNBWV9MSU5FCitiaW5kIEtQMCshS1A4IExOVVAKK2JpbmQgS1AwKyFLUDIgTE5ETgorYmluZCBTaGlmdExlZnQrS1AwKyFLUDggUFJQUk9NUFQKK2JpbmQgU2hpZnRMZWZ0K0tQMCshS1AyIE5YUFJPTVBUCitiaW5kIFNoaWZ0TGVmdCtLUDArIUtQNyBMTkJFRworYmluZCBTaGlmdExlZnQrS1AwKyFLUDEgTE5FTkQKK2JpbmQgQ29udHJvbExlZnQrS1AwKyFLUDggUFJQR1JQSAorYmluZCBDb250cm9sTGVmdCtLUDArIUtQMiBOWFBHUlBICitiaW5kIENvbnRyb2xMZWZ0K0tQMCshS1A1IERFU0NDSEFSCitiaW5kIEtQMCshS1A3IFRPUF9MRUZUCitiaW5kIEtQMCshS1AxIEJPVF9MRUZUCitiaW5kIEtQMCshS1A5IFNBWV9BQk9WRQorYmluZCBLUDArIUtQMyBTQVlfQkVMT1cKK2JpbmQgS1AwKyFLUDQgTVVURQorYmluZCBDb250cm9sTGVmdCBNVVRFCitiaW5kIENvbnRyb2xSaWdodCBNVVRFCitiaW5kIEtQMCshS1A2IEFVVE9zUEVBSworYmluZCBLUDArIUtQUGVyaW9kIENTUlRSSworYmluZCBLUDArIUtQRW50ZXIgSE9NRQorYmluZCBLUDArIUtQRGl2aWRlIENMSVBfTkVXCitiaW5kIEtQMCshS1BNdWx0aXBseSBDT1BZX0xJTkUKK2JpbmQgS1AwKyFLUE1pbnVzIENPUFlfUkVDVAorYmluZCBLUDArIUtQUGx1cyBQQVNURQorYmluZCBDb250cm9sTGVmdCtLUDArIUtQUGx1cyBDTElQX0FERAorYmluZCBDb250cm9sTGVmdCtTaGlmdExlZnQrS1AwKyFLUDIgUFJFRk1FTlUKK2JpbmQgQ29udHJvbExlZnQrU2hpZnRMZWZ0K0tQMCshS1A0IFBSRUZMT0FECitiaW5kIENvbnRyb2xMZWZ0K1NoaWZ0TGVmdCtLUDArIUtQNiBQUkVGU0FWRQorYmluZCBDb250cm9sTGVmdCtTaGlmdExlZnQrS1AwKyFLUDcgSEVMUAorYmluZCBDb250cm9sTGVmdCtTaGlmdExlZnQrS1AwKyFLUDggSU5GTworYmluZCBDb250cm9sTGVmdCtTaGlmdExlZnQrS1AwKyFLUDkgTEVBUk4KK2JpbmQgQ29udHJvbExlZnQrU2hpZnRMZWZ0K0tQMCshS1AxIFJFU1RBUlRCUkwKK2JpbmQgQ29udHJvbExlZnQrU2hpZnRMZWZ0K0tQMCshS1AzIFJFU1RBUlRTUEVFQ0gKK2JpbmQgS1AwK1QgVElNRQorYmluZCBLUDArIVMgU0VUTUFSSworYmluZCBLUDArIUcgR09UT01BUksKK2JpbmQgQ29udHJvbFJpZ2h0K0tQMCshT25lIFNFVE1BUksrMQorYmluZCBLUDArIU9uZSBHT1RPTUFSSysxCitiaW5kIENvbnRyb2xSaWdodCtLUDArIVR3byBTRVRNQVJLKzIKK2JpbmQgS1AwKyFUd28gR09UT01BUksrMgorYmluZCBDb250cm9sUmlnaHQrS1AwKyFUaHJlZSBTRVRNQVJLKzMKK2JpbmQgS1AwKyFUaHJlZSBHT1RPTUFSSyszCitiaW5kIENvbnRyb2xSaWdodCtLUDArIUZvdXIgU0VUTUFSSys0CitiaW5kIEtQMCshRm91ciBHT1RPTUFSSys0CmRpZmYgLS1naXQgYS9UYWJsZXMvS2V5Ym9hcmQva2V5cGFkLmt0YiBiL1RhYmxlcy9LZXlib2FyZC9rZXlwYWQua3RiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJlMWViMjEKLS0tIC9kZXYvbnVsbAorKysgYi9UYWJsZXMvS2V5Ym9hcmQva2V5cGFkLmt0YgpAQCAtMCwwICsxLDEzNSBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorIyAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyMKKyMgQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorIworIyBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorIworIyBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisjIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyMgbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisjCisjIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK3RpdGxlIEJpbmRpbmdzIGZvciBLZXlwYWQtYmFzZWQgTmF2aWdhdGlvbgorCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIERlZmF1bHQgQmluZGluZ3MgIworIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworYmluZCBLUDArIUtQNSBIT01FCitiaW5kIEtQMCshS1A0IEZXSU5MVAorYmluZCBLUDArIUtQNiBGV0lOUlQKK2JpbmQgS1AwKyFLUDggTE5VUAorYmluZCBLUDArIUtQMiBMTkROCitiaW5kIEtQMCshS1A3IFRPUF9MRUZUCitiaW5kIEtQMCshS1AxIEJPVF9MRUZUCitiaW5kIEtQMCshS1A5IFBSRElGTE4KK2JpbmQgS1AwKyFLUDMgTlhESUZMTgorYmluZCBLUDArIUtQRGl2aWRlIENTUlRSSworYmluZCBLUDArIUtQTXVsdGlwbHkgRElTUE1ECitiaW5kIEtQMCshS1BNaW51cyBTSVhET1RTK29mZgorYmluZCBLUDArIUtQUGx1cyBTSVhET1RTK29uCisKK2JpbmQgS1BQZXJpb2QrIUtQNSBCQUNLCitiaW5kIEtQUGVyaW9kKyFLUDQgRldJTkxUU0tJUAorYmluZCBLUFBlcmlvZCshS1A2IEZXSU5SVFNLSVAKK2JpbmQgS1BQZXJpb2QrIUtQOCBQUlBHUlBICitiaW5kIEtQUGVyaW9kKyFLUDIgTlhQR1JQSAorYmluZCBLUFBlcmlvZCshS1A3IFBSUFJPTVBUCitiaW5kIEtQUGVyaW9kKyFLUDEgTlhQUk9NUFQKK2JpbmQgS1BQZXJpb2QrIUtQOSBBVFRSVVAKK2JpbmQgS1BQZXJpb2QrIUtQMyBBVFRSRE4KK2JpbmQgS1BQZXJpb2QrIUtQRGl2aWRlIENTUlZJUworYmluZCBLUFBlcmlvZCshS1BNdWx0aXBseSBBVFRSVklTCitiaW5kIEtQUGVyaW9kKyFLUE1pbnVzIEJSTFVDRE9UUytvZmYKK2JpbmQgS1BQZXJpb2QrIUtQUGx1cyBCUkxVQ0RPVFMrb24KKworYmluZCBLUDArS1BQZXJpb2QrIUtQMSBDSFJMVAorYmluZCBLUDArS1BQZXJpb2QrIUtQMiBDU1JKTVBfVkVSVAorYmluZCBLUDArS1BQZXJpb2QrIUtQMyBDSFJSVAorYmluZCBLUDArS1BQZXJpb2QrIUtQNCBMTkJFRworYmluZCBLUDArS1BQZXJpb2QrIUtQNSBTRVRMRUZUCitiaW5kIEtQMCtLUFBlcmlvZCshS1A2IExORU5ECisKK2JpbmQgS1BNaW51cyshS1A1IFBSRUZNRU5VCitiaW5kIEtQTWludXMrIUtQNCBQUkVGTE9BRAorYmluZCBLUE1pbnVzKyFLUDYgUFJFRlNBVkUKK2JpbmQgS1BNaW51cyshS1A4IElORk8KK2JpbmQgS1BNaW51cyshS1A3IEhFTFAKK2JpbmQgS1BNaW51cyshS1A5IExFQVJOCitiaW5kIEtQTWludXMrIUtQMiBGUkVFWkUKK2JpbmQgS1BNaW51cyshS1AxIFRJTUUKK2JpbmQgS1BNaW51cyshS1AzIERFU0NDSEFSCitiaW5kIEtQTWludXMrIUtQRGl2aWRlIFJFU1RBUlRCUkwKK2JpbmQgS1BNaW51cyshS1BNdWx0aXBseSBSRVNUQVJUU1BFRUNICisKK2JpbmQgS1BNdWx0aXBseSshS1A1IFBBU1RFCitiaW5kIEtQTXVsdGlwbHkrIUtQNyBDTElQX05FVworYmluZCBLUE11bHRpcGx5KyFLUDEgQ0xJUF9BREQKK2JpbmQgS1BNdWx0aXBseSshS1A5IENPUFlfTElORQorYmluZCBLUE11bHRpcGx5KyFLUDMgQ09QWV9SRUNUCitiaW5kIEtQTXVsdGlwbHkrIUtQOCBQUklOREVOVAorYmluZCBLUE11bHRpcGx5KyFLUDIgTlhJTkRFTlQKK2JpbmQgS1BNdWx0aXBseSshS1A0IFBSRElGQ0hBUgorYmluZCBLUE11bHRpcGx5KyFLUDYgTlhESUZDSEFSCitiaW5kIEtQTXVsdGlwbHkrIUtQTWludXMgUFJTRUFSQ0gKK2JpbmQgS1BNdWx0aXBseSshS1BQbHVzIE5YU0VBUkNICisKK2Fzc2lnbiBrcEFsdCBLUDAKK2Fzc2lnbiBrcE9uZSBLUDEKK2Fzc2lnbiBrcFR3byBLUDIKK2Fzc2lnbiBrcFRocmVlIEtQMworYXNzaWduIGtwRm91ciBLUDQKK2Fzc2lnbiBrcEZpdmUgS1A1Cithc3NpZ24ga3BTaXggS1A2Cithc3NpZ24ga3BTZXZlbiBLUDcKK2Fzc2lnbiBrcEVpZ2h0IEtQOAorYXNzaWduIGtwTmluZSBLUDkKK2Fzc2lnbiBrcERpdmlkZSBLUERpdmlkZQorYXNzaWduIGtwTXVsdGlwbHkgS1BNdWx0aXBseQorYXNzaWduIGtwTWludXMgS1BNaW51cworCithc3NpZ24ga3BTYXkgS1BFbnRlcgoraW5jbHVkZSBrcF9zYXkua3RpCisKK2Fzc2lnbiBrcFNwZWFrIEtQUGx1cworaW5jbHVkZSBrcF9zcGVhay5rdGkKKworCisjIyMjIyMjIyMjIyMjIyMjIworIyBNZW51IEJpbmRpbmdzICMKKyMjIyMjIyMjIyMjIyMjIyMjCisKK2NvbnRleHQgbWVudQorCitiaW5kIEtQMCshS1A0IEZXSU5MVAorYmluZCBLUDArIUtQNiBGV0lOUlQKK2JpbmQgS1AwKyFLUDggTUVOVV9QUkVWX0lURU0KK2JpbmQgS1AwKyFLUDIgTUVOVV9ORVhUX0lURU0KK2JpbmQgS1AwKyFLUDcgTUVOVV9GSVJTVF9JVEVNCitiaW5kIEtQMCshS1AxIE1FTlVfTEFTVF9JVEVNCitiaW5kIEtQMCshS1A5IE1FTlVfUFJFVl9TRVRUSU5HCitiaW5kIEtQMCshS1AzIE1FTlVfTkVYVF9TRVRUSU5HCitiaW5kIEtQMCshS1A1IE1FTlVfUFJFVl9MRVZFTAorCitiaW5kIEtQMCshS1BFbnRlciBQUkVGTUVOVQorYmluZCBLUDArIUtQUGx1cyBQUkVGU0FWRQorYmluZCBLUDArIUtQTWludXMgUFJFRkxPQUQKKworCisjIyMjIyMjIyMjIyMjIyMjIworIyBCcmFpbGxlIElucHV0ICMKKyMjIyMjIyMjIyMjIyMjIyMjCisKK2Fzc2lnbiBicmFpbGxlT2ZmIEtQRW50ZXIrIUtQTWludXMKK2Fzc2lnbiBicmFpbGxlT24gS1BFbnRlcishS1BQbHVzCitpbmNsdWRlIGJyYWlsbGUua3RpCisKKwpkaWZmIC0tZ2l0IGEvVGFibGVzL0tleWJvYXJkL2twX3NheS5rdGkgYi9UYWJsZXMvS2V5Ym9hcmQva3Bfc2F5Lmt0aQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ODlkNTFkCi0tLSAvZGV2L251bGwKKysrIGIvVGFibGVzL0tleWJvYXJkL2twX3NheS5rdGkKQEAgLTAsMCArMSwzNiBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorIyAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyMKKyMgQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorIworIyBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorIworIyBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisjIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyMgbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisjCisjIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK2JpbmQgXHtrcFNheX0rIVx7a3BGaXZlfSBTQVlfTElORQorYmluZCBce2twU2F5fSshXHtrcEVpZ2h0fSBTQVlfQUJPVkUKK2JpbmQgXHtrcFNheX0rIVx7a3BUd299IFNBWV9CRUxPVworYmluZCBce2twU2F5fSshXHtrcEZvdXJ9IE1VVEUKK2JpbmQgXHtrcFNheX0rIVx7a3BTaXh9IEFVVE9TUEVBSworYmluZCBce2twU2F5fSshXHtrcFNldmVufSBTQVlfU0xPV0VSCitiaW5kIFx7a3BTYXl9KyFce2twTmluZX0gU0FZX0ZBU1RFUgorYmluZCBce2twU2F5fSshXHtrcE9uZX0gU0FZX1NPRlRFUgorYmluZCBce2twU2F5fSshXHtrcFRocmVlfSBTQVlfTE9VREVSCitiaW5kIFx7a3BTYXl9KyFce2twRGl2aWRlfSBTUEtIT01FCisKK2JpbmQgXHtrcFNheX0rXHtrcEFsdH0rIVx7a3BPbmV9IEFTUEtfREVMX0NIQVJTCitiaW5kIFx7a3BTYXl9K1x7a3BBbHR9KyFce2twVHdvfSBBU1BLX1JFUF9DSEFSUworYmluZCBce2twU2F5fStce2twQWx0fSshXHtrcFRocmVlfSBBU1BLX0lOU19DSEFSUworYmluZCBce2twU2F5fStce2twQWx0fSshXHtrcEZvdXJ9IEFTUEtfU0VMX0NIQVIKK2JpbmQgXHtrcFNheX0rXHtrcEFsdH0rIVx7a3BGaXZlfSBBU1BLX1NFTF9MSU5FCitiaW5kIFx7a3BTYXl9K1x7a3BBbHR9KyFce2twU2l4fSBBU1BLX0NNUF9XT1JEUworCmRpZmYgLS1naXQgYS9UYWJsZXMvS2V5Ym9hcmQva3Bfc3BlYWsua3RpIGIvVGFibGVzL0tleWJvYXJkL2twX3NwZWFrLmt0aQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YzYxZWU5Ci0tLSAvZGV2L251bGwKKysrIGIvVGFibGVzL0tleWJvYXJkL2twX3NwZWFrLmt0aQpAQCAtMCwwICsxLDQzIEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisjICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorIworIyBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisjCisjIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisjCisjIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyMgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorIyBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyMKKyMgV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworIworIyBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworYmluZCBce2twU3BlYWt9KyFce2twVHdvfSBTUEVBS19DVVJSX0NIQVIKK2JpbmQgXHtrcFNwZWFrfStce2twQWx0fSshXHtrcFR3b30gREVTQ19DVVJSX0NIQVIKK2JpbmQgXHtrcFNwZWFrfSshXHtrcE9uZX0gU1BFQUtfUFJFVl9DSEFSCitiaW5kIFx7a3BTcGVha30rXHtrcEFsdH0rIVx7a3BPbmV9IFNQRUFLX0ZSU1RfQ0hBUgorYmluZCBce2twU3BlYWt9KyFce2twVGhyZWV9IFNQRUFLX05FWFRfQ0hBUgorYmluZCBce2twU3BlYWt9K1x7a3BBbHR9KyFce2twVGhyZWV9IFNQRUFLX0xBU1RfQ0hBUgorCitiaW5kIFx7a3BTcGVha30rIVx7a3BGaXZlfSBTUEVBS19DVVJSX1dPUkQKK2JpbmQgXHtrcFNwZWFrfStce2twQWx0fSshXHtrcEZpdmV9IFNQRUxMX0NVUlJfV09SRAorYmluZCBce2twU3BlYWt9KyFce2twRm91cn0gU1BFQUtfUFJFVl9XT1JECitiaW5kIFx7a3BTcGVha30rIVx7a3BTaXh9IFNQRUFLX05FWFRfV09SRAorCitiaW5kIFx7a3BTcGVha30rIVx7a3BFaWdodH0gU1BFQUtfQ1VSUl9MSU5FCitiaW5kIFx7a3BTcGVha30rIVx7a3BTZXZlbn0gU1BFQUtfUFJFVl9MSU5FCitiaW5kIFx7a3BTcGVha30rXHtrcEFsdH0rIVx7a3BTZXZlbn0gU1BFQUtfRlJTVF9MSU5FCitiaW5kIFx7a3BTcGVha30rIVx7a3BOaW5lfSBTUEVBS19ORVhUX0xJTkUKK2JpbmQgXHtrcFNwZWFrfStce2twQWx0fSshXHtrcE5pbmV9IFNQRUFLX0xBU1RfTElORQorCitiaW5kIFx7a3BTcGVha30rIVx7a3BEaXZpZGV9IFNQRUFLX0NVUlJfTE9DTgorYmluZCBce2twU3BlYWt9K1x7a3BBbHR9KyFce2twRGl2aWRlfSBTSE9XX0NVUlJfTE9DTgorYmluZCBce2twU3BlYWt9KyFce2twTXVsdGlwbHl9IFJPVVRFX0NVUlJfTE9DTgorCitiaW5kIFx7a3BTcGVha30rIVx7a3BNaW51c30gU1BFQUtfSU5ERU5UCitiaW5kIFx7a3BTcGVha30rXHtrcEFsdH0rIVx7a3BNaW51c30gQVNQS19JTkRFTlQKKwpkaWZmIC0tZ2l0IGEvVGFibGVzL0tleWJvYXJkL2xhcHRvcC5rdGIgYi9UYWJsZXMvS2V5Ym9hcmQvbGFwdG9wLmt0YgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZTg3ODJkCi0tLSAvZGV2L251bGwKKysrIGIvVGFibGVzL0tleWJvYXJkL2xhcHRvcC5rdGIKQEAgLTAsMCArMSwxMzggQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyMgICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisjCisjIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyMKKyMgQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCit0aXRsZSBCaW5kaW5ncyBmb3IgS2V5Ym9hcmRzIHdpdGhvdXQgYSBLZXlwYWQKKworCisjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBEZWZhdWx0IEJpbmRpbmdzICMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK2JpbmQgQ2Fwc0xvY2srIUYxIEhFTFAKK2JpbmQgQ2Fwc0xvY2srU2hpZnRMZWZ0KyFGMSBMRUFSTgorCitiaW5kIENhcHNMb2NrKyFGMiBQUkVGTUVOVQorYmluZCBDYXBzTG9jaytTaGlmdExlZnQrIUYyIFBSRUZTQVZFCisKK2JpbmQgQ2Fwc0xvY2srIUY1IFNBWV9TTE9XRVIKK2JpbmQgQ2Fwc0xvY2srIUY2IFNBWV9GQVNURVIKK2JpbmQgQ2Fwc0xvY2srIUY3IFNBWV9TT0ZURVIKK2JpbmQgQ2Fwc0xvY2srIUY4IFNBWV9MT1VERVIKKworYmluZCBDYXBzTG9jayshRjkgQVVUT1NQRUFLCisKK2JpbmQgQ2Fwc0xvY2srIUFycm93VXAgTE5VUAorYmluZCBDYXBzTG9jayshQXJyb3dEb3duIExORE4KK2JpbmQgQ2Fwc0xvY2srIUFycm93TGVmdCBDSFJMVAorYmluZCBDYXBzTG9jayshQXJyb3dSaWdodCBDSFJSVAorYmluZCBDYXBzTG9jayshSG9tZSBUT1BfTEVGVAorYmluZCBDYXBzTG9jayshRW5kIEJPVF9MRUZUCisKK2JpbmQgQ2Fwc0xvY2srU2hpZnRMZWZ0KyFBcnJvd1VwIFBSRElGTE4KK2JpbmQgQ2Fwc0xvY2srU2hpZnRMZWZ0KyFBcnJvd0Rvd24gTlhESUZMTgorYmluZCBDYXBzTG9jaytTaGlmdExlZnQrIUFycm93TGVmdCBMTkJFRworYmluZCBDYXBzTG9jaytTaGlmdExlZnQrIUFycm93UmlnaHQgTE5FTkQKK2JpbmQgQ2Fwc0xvY2srU2hpZnRMZWZ0KyFIb21lIFRPUAorYmluZCBDYXBzTG9jaytTaGlmdExlZnQrIUVuZCBCT1QKKworYmluZCBDYXBzTG9jayshRW50ZXIgQ1NSVFJLCitiaW5kIENhcHNMb2NrK1NoaWZ0TGVmdCshRW50ZXIgQ1NSVFJLK29mZgorYmluZCBDYXBzTG9jayshRGVsZXRlQmFja3dhcmQgQkFDSworCitiaW5kIENhcHNMb2NrKyFEIERFU0NDSEFSCitiaW5kIENhcHNMb2NrKyFGIEZSRUVaRQorYmluZCBDYXBzTG9jayshUiBSRVNUQVJUQlJMCitiaW5kIENhcHNMb2NrKyFUIFRJTUUKKworIyBtYXJrcworYmluZCBDYXBzTG9jayshTSBTRVRNQVJLCitiaW5kIENhcHNMb2NrKyFKIEdPVE9NQVJLCitiaW5kIENhcHNMb2NrK1NoaWZ0TGVmdCshT25lIFNFVE1BUksrMQorYmluZCBDYXBzTG9jayshT25lIEdPVE9NQVJLKzEKK2JpbmQgQ2Fwc0xvY2srU2hpZnRMZWZ0KyFUd28gU0VUTUFSSysyCitiaW5kIENhcHNMb2NrKyFUd28gR09UT01BUksrMgorYmluZCBDYXBzTG9jaytTaGlmdExlZnQrIVRocmVlIFNFVE1BUksrMworYmluZCBDYXBzTG9jayshVGhyZWUgR09UT01BUksrMworYmluZCBDYXBzTG9jaytTaGlmdExlZnQrIUZvdXIgU0VUTUFSSys0CitiaW5kIENhcHNMb2NrKyFGb3VyIEdPVE9NQVJLKzQKKworIyBjb3B5IGFuZCBwYXN0ZQorYmluZCBDYXBzTG9jayshWCBDTElQX05FVworYmluZCBDYXBzTG9jaytTaGlmdExlZnQrIVggQ0xJUF9BREQKK2JpbmQgQ2Fwc0xvY2srIUMgQ09QWV9SRUNUCitiaW5kIENhcHNMb2NrK1NoaWZ0TGVmdCshQyBDT1BZX0xJTkUKK2JpbmQgQ2Fwc0xvY2srIVYgUEFTVEUKKworIyBzcGVlY2gKK2JpbmQgQ29udHJvbExlZnQgTVVURQorYmluZCBDb250cm9sUmlnaHQgTVVURQorYmluZCBDYXBzTG9jayshU3BhY2UgU0FZX0xJTkUKK2JpbmQgQ2Fwc0xvY2srIVBhZ2VVcCBTQVlfQUJPVkUKK2JpbmQgQ2Fwc0xvY2srIVBhZ2VEb3duIFNBWV9CRUxPVworCitiaW5kIFNoaWZ0UmlnaHQrIUFycm93TGVmdCBTUEVBS19QUkVWX1dPUkQKK2JpbmQgU2hpZnRSaWdodCshQXJyb3dSaWdodCBTUEVBS19ORVhUX1dPUkQKK2JpbmQgU2hpZnRSaWdodCshQXJyb3dVcCBTUEVBS19QUkVWX0xJTkUKK2JpbmQgU2hpZnRSaWdodCshQXJyb3dEb3duIFNQRUFLX05FWFRfTElORQorYmluZCBDb250cm9sUmlnaHQrIUFycm93TGVmdCBTUEVBS19GUlNUX0NIQVIKK2JpbmQgQ29udHJvbFJpZ2h0KyFBcnJvd1JpZ2h0IFNQRUFLX0xBU1RfQ0hBUgorYmluZCBDb250cm9sUmlnaHQrIUFycm93VXAgU1BFQUtfRlJTVF9MSU5FCitiaW5kIENvbnRyb2xSaWdodCshQXJyb3dEb3duIFNQRUFLX0xBU1RfTElORQorYmluZCBDb250cm9sUmlnaHQrU2hpZnRSaWdodCBST1VURV9DVVJSX0xPQ04KK2JpbmQgU2hpZnRSaWdodCshRW50ZXIgU1BFQUtfQ1VSUl9MT0NOCisKK2Fzc2lnbiBrcEFsdCBDb250cm9sTGVmdAorYXNzaWduIGtwT25lIE0KK2Fzc2lnbiBrcFR3byBDb21tYQorYXNzaWduIGtwVGhyZWUgUGVyaW9kCithc3NpZ24ga3BGb3VyIEoKK2Fzc2lnbiBrcEZpdmUgSworYXNzaWduIGtwU2l4IEwKK2Fzc2lnbiBrcFNldmVuIFUKK2Fzc2lnbiBrcEVpZ2h0IEkKK2Fzc2lnbiBrcE5pbmUgTworYXNzaWduIGtwRGl2aWRlIEVpZ2h0Cithc3NpZ24ga3BNdWx0aXBseSBOaW5lCithc3NpZ24ga3BNaW51cyBaZXJvCisKK2Fzc2lnbiBrcFNheSBDYXBzTG9jaytTaGlmdExlZnQKK2luY2x1ZGUga3Bfc2F5Lmt0aQorCithc3NpZ24ga3BTcGVhayBUYWIKK2luY2x1ZGUga3Bfc3BlYWsua3RpCisKKworIyMjIyMjIyMjIyMjIyMjIyMKKyMgTWVudSBCaW5kaW5ncyAjCisjIyMjIyMjIyMjIyMjIyMjIworCitjb250ZXh0IG1lbnUKKworYmluZCBDYXBzTG9jayshQXJyb3dVcCBNRU5VX1BSRVZfSVRFTQorYmluZCBDYXBzTG9jayshQXJyb3dEb3duIE1FTlVfTkVYVF9JVEVNCitiaW5kIENhcHNMb2NrKyFBcnJvd0xlZnQgTUVOVV9QUkVWX1NFVFRJTkcKK2JpbmQgQ2Fwc0xvY2srIUFycm93UmlnaHQgTUVOVV9ORVhUX1NFVFRJTkcKK2JpbmQgQ2Fwc0xvY2srIUhvbWUgTUVOVV9GSVJTVF9JVEVNCitiaW5kIENhcHNMb2NrKyFFbmQgTUVOVV9MQVNUX0lURU0KKworYmluZCBDYXBzTG9jaytTaGlmdExlZnQrIUFycm93VXAgTUVOVV9QUkVWX0xFVkVMCitiaW5kIENhcHNMb2NrK1NoaWZ0TGVmdCshQXJyb3dEb3duIFBSRUZNRU5VCitiaW5kIENhcHNMb2NrK1NoaWZ0TGVmdCshQXJyb3dMZWZ0IFBSRUZMT0FECitiaW5kIENhcHNMb2NrK1NoaWZ0TGVmdCshQXJyb3dSaWdodCBQUkVGU0FWRQorCisKZGlmZiAtLWdpdCBhL1RhYmxlcy9LZXlib2FyZC9zdW5fdHlwZTYua3RiIGIvVGFibGVzL0tleWJvYXJkL3N1bl90eXBlNi5rdGIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmMyMThkMwotLS0gL2Rldi9udWxsCisrKyBiL1RhYmxlcy9LZXlib2FyZC9zdW5fdHlwZTYua3RiCkBAIC0wLDAgKzEsNDUgQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyMgICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisjCisjIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyMKKyMgQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCit0aXRsZSBCaW5kaW5ncyBmb3IgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBUeXBlIDYgS2V5Ym9hcmRzCisKK2luY2x1ZGUgZGVza3RvcC5rdGkKKworYmluZCBNRURJQV9NdXRlIE1VVEUKK2JpbmQgQ29udHJvbExlZnQrIU1FRElBX011dGUgVFVORVMKK2JpbmQgTUVESUFfVm9sdW1lRG93biBTQVlfU09GVEVSCitiaW5kIE1FRElBX1ZvbHVtZVVwIFNBWV9MT1VERVIKK2JpbmQgQUNUSU9OX1Bvd2VyIFJFU1RBUlRCUkwKK2JpbmQgQ29udHJvbExlZnQrIUFDVElPTl9Qb3dlciBSRVNUQVJUU1BFRUNICisKK2JpbmQgQUNUSU9OX1N0b3AgRlJFRVpFK29uCitiaW5kIEFDVElPTl9BZ2FpbiBGUkVFWkUrb2ZmCitiaW5kIEFDVElPTl9TdG9wKyFBQ1RJT05fQWdhaW4gRlJFRVpFCitoaWRlIG9uCitiaW5kIEFDVElPTl9BZ2FpbishQUNUSU9OX1N0b3AgRlJFRVpFCitoaWRlIG9mZgorYmluZCAhQUNUSU9OX1VuZG8gUkVUVVJOCitiaW5kIENvbnRyb2xMZWZ0KyFBQ1RJT05fVW5kbyBCQUNLCitiaW5kICFBQ1RJT05fUGFzdGUgUEFTVEUKK2JpbmQgQ29udHJvbExlZnQrIUFDVElPTl9QYXN0ZSBDTElQX1JFU1RPUkUKK2JpbmQgU2hpZnRMZWZ0KyFBQ1RJT05fUGFzdGUgQ0xJUF9TQVZFCitiaW5kICFBQ1RJT05fRmluZCBOWFNFQVJDSAorYmluZCBDb250cm9sTGVmdCshQUNUSU9OX0ZpbmQgUFJTRUFSQ0gKKworYmluZCAhQUNUSU9OX0hlbHAgSEVMUAorYmluZCBDb250cm9sTGVmdCtBQ1RJT05fSGVscCBMRUFSTgpkaWZmIC0tZ2l0IGEvVGFibGVzL1RleHQvYWxpYXMudHRpIGIvVGFibGVzL1RleHQvYWxpYXMudHRpCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRkMGQzOWQKLS0tIC9kZXYvbnVsbAorKysgYi9UYWJsZXMvVGV4dC9hbGlhcy50dGkKQEAgLTAsMCArMSw3NSBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorIyAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyMKKyMgQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorIworIyBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorIworIyBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisjIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyMgbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisjCisjIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMgVGhpcyBCUkxUVFkgdGV4dCBzdWJ0YWJsZSBkZWZpbmVzIHNldmVyYWwgdXNlZnVsIGNoYXJhY3RlciBhbGlhc2VzCisKKyMgZW5zdXJlIHRoYXQgc3BhY2UgaXMgZGVmaW5lZAoraWZOb3RHbHlwaCBccyAgZ2x5cGggXHMgMAoraWZOb3RJbnB1dCAwICBpbnB1dCBccyAwCisKKyMgY2hhcmFjdGVycyB0aGF0IHJlcHJlc2VudCBhIHNwYWNlCithbGlhcwlceEEwCVxzCSMgbm8tYnJlYWsgc3BhY2UKK2FsaWFzCVx1MjAwMglccwkjIGVuIHNwYWNlCithbGlhcwlcdTIwMDMJXHMJIyBlbSBzcGFjZQorYWxpYXMJXHUyMDA0CVxzCSMgdGhyZWUtcGVyLWVtIHNwYWNlCithbGlhcwlcdTIwMDUJXHMJIyBmb3VyLXBlci1lbSBzcGFjZQorYWxpYXMJXHUyMDA2CVxzCSMgc2l4LXBlci1lbSBzcGFjZQorYWxpYXMJXHUyMDA3CVxzCSMgZmlndXJlIHNwYWNlCithbGlhcwlcdTIwMDgJXHMJIyBwdW5jdHVhdGlvbiBzcGFjZQorYWxpYXMJXHUyMDA5CVxzCSMgdGhpbiBzcGFjZQorYWxpYXMJXHUyMDBBCVxzCSMgaGFpciBzcGFjZQorYWxpYXMJXHUyMDJGCVxzCSMgbmFycm93IG5vLWJyZWFrIHNwYWNlCithbGlhcwlcdTIwNUYJXHMJIyBtZWRpdW0gbWF0aGVtYXRpY2FsIHNwYWNlCisKK2lmR2x5cGggLQorICAjIGNoYXJhY3RlcnMgdGhhdCByZXByZXNlbnQgYSBkYXNoCisgIGFsaWFzCVx1MjAxMgktCSMgZmlndXJlIGRhc2gKKyAgYWxpYXMJXHUyMDEzCS0JIyBlbiBkYXNoCisgIGFsaWFzCVx1MjAxNAktCSMgZW0gZGFzaAorICBhbGlhcwlcdTI0NDgJLQkjIG9jciBkYXNoCisgIGFsaWFzCVx1MzAxQwktCSMgd2F2ZSBkYXNoCisgIGFsaWFzCVx1MzAzMAktCSMgd2F2eSBkYXNoCisgIGFsaWFzCVx1RkU1OAktCSMgc21hbGwgZW0gZGFzaAorCisgICMgY2hhcmFjdGVycyB0aGF0IHJlcHJlc2VudCBhIGh5cGhlbgorICBhbGlhcwlceEFECS0JIyBzb2Z0IGh5cGhlbgorICBhbGlhcwlcdTIwMTAJLQkjIGh5cGhlbgorICBhbGlhcwlcdTIwMTEJLQkjIG5vbi1icmVha2luZyBoeXBoZW4KKworICAjIGNoYXJhY3RlcnMgdGhhdCByZXByZXNlbnQgYSBtaW51cyBzaWduCisgIGFsaWFzCVx1MjA1MgktCSMgY29tbWVyY2lhbCBtaW51cyBzaWduCisgIGFsaWFzCVx1MjIxMgktCSMgbWludXMgc2lnbgorCisgICMgY2hhcmFjdGVycyB0aGF0IGNhbiByZXByZXNlbnQgZWl0aGVyIGEgaHlwaGVuIG9yIGEgbWludXMgc2lnbgorICBhbGlhcwlcdUZFNjMJLQkjIHNtYWxsIGh5cGhlbi1taW51cworICBhbGlhcwlcdUZGMEQJLQkjIGZ1bGx3aWR0aCBoeXBoZW4tbWludXMKKworICAjIG90aGVyIGNoYXJhY3RlcnMgdGhhdCBjYW4gbG9vayBsaWtlIGEgZGFzaAorICBhbGlhcwlcdTIwMTUJLQkjIGhvcml6b250YWwgYmFyCitlbmRJZgorCitpZkdseXBoICcKKyAgIyBjaGFyYWN0ZXJzIGNvbW1vbmx5IChtaXMpdXNlZCB0byByZXByZXNlbnQgYW4gYXBvc3Ryb3BoZQorICBhbGlhcwlcdTIwMTgJJwkjIGxlZnQgc2luZ2xlIHF1b3RhdGlvbiBtYXJrCisgIGFsaWFzCVx1MjAxOQknCSMgcmlnaHQgc2luZ2xlIHF1b3RhdGlvbiBtYXJrCitlbmRJZgorCisjIGRlZ3JlZSBzaWducworaWZHbHlwaAlDCWFsaWFzCVx1MjEwMwlDCSMgZGVncmVlIENlbHNpdXMKK2lmR2x5cGgJRglhbGlhcwlcdTIxMDkJRgkjIGRlZ3JlZSBGYWhyZW5oZWl0CisKZGlmZiAtLWdpdCBhL1RhYmxlcy9UZXh0L2FyLnR0YiBiL1RhYmxlcy9UZXh0L2FyLnR0YgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYjI5ZmMwCi0tLSAvZGV2L251bGwKKysrIGIvVGFibGVzL1RleHQvYXIudHRiCkBAIC0wLDAgKzEsMTg0IEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisjICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorIworIyBDb3B5cmlnaHQgKEMpIDIwMDgtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisjCisjIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisjCisjIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyMgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorIyBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyMKKyMgV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworIworIyBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIyBCUkxUVFkgVGV4dCBUYWJsZSAtIEFyYWJpYyAoZ2VuZXJpYykKKyMKKyMgVGhpcyB0ZXh0IHRhYmxlIHdhcyBjb252ZXJ0ZWQgZnJvbSBMaWJMb3VpcydzIGFyLWFyLWNvbXA4IHRhYmxlLgorIyBNYWludGFpbmVyOiBEYXZlIE1pZWxrZSA8RGF2ZUBNaWVsa2UuY2M+CisjIEFkdmlzb3I6IElrcmFtaSBBaG1hZCA8SWtyYW1pQGJsaW5kLmdvdi5xYT4KKworY2hhcglceDIxCSggMjMgNSAgICkJIyDioJYgISBbRVhDTEFNQVRJT04gTUFSS10KK2NoYXIJXHgyMgkoIDIzIDU2ICApCSMg4qC2ICIgW1FVT1RBVElPTiBNQVJLXQorY2hhcglceDIzCSggIDM0NTYgICkJIyDioLwgIyBbTlVNQkVSIFNJR05dCitjaGFyCVx4MjQJKDEyIDQgNiA4KQkjIOKiqyAkIFtET0xMQVIgU0lHTl0KK2NoYXIJXHgyNQkoMSAgNCA2IDgpCSMg4qKpICUgW1BFUkNFTlQgU0lHTl0KK2NoYXIJXHgyNgkoMTIzNCA2NyApCSMg4qGvICYgW0FNUEVSU0FORF0KK2NoYXIJXHgyNwkoICAzICAgNyApCSMg4qGEICcgW0FQT1NUUk9QSEVdCitjaGFyCVx4MjgJKCAyMyAgNjcgKQkjIOKhpiAoIFtMRUZUIFBBUkVOVEhFU0lTXQorY2hhcglceDI5CSggIDMgNTYgOCkJIyDiorQgKSBbUklHSFQgUEFSRU5USEVTSVNdCitjaGFyCVx4MkEJKCAgMyA1ICA4KQkjIOKilCAqIFtBU1RFUklTS10KK2NoYXIJXHgyQgkoIDIzIDUgIDgpCSMg4qKWICsgW1BMVVMgU0lHTl0KK2NoYXIJXHgyQwkoIDIgICAgNyApCSMg4qGCICwgW0NPTU1BXQorY2hhcglceDJECSggIDMgIDYgICkJIyDioKQgLSBbSFlQSEVOLU1JTlVTXQorY2hhcglceDJFCSggMiAgNTYgICkJIyDioLIgLiBbRlVMTCBTVE9QXQorY2hhcglceDJGCSggIDM0ICAgOCkJIyDioowgLyBbU09MSURVU10KK2NoYXIJXHgzQQkoIDIgIDUgNyApCSMg4qGSIDogW0NPTE9OXQorY2hhcglceDNCCSggICAgNTY3OCkJIyDio7AgOyBbU0VNSUNPTE9OXQorY2hhcglceDNDCSggMiA0IDYgOCkJIyDioqogPCBbTEVTUy1USEFOIFNJR05dCitjaGFyCVx4M0QJKCAyMyA1Njc4KQkjIOKjtiA9IFtFUVVBTFMgU0lHTl0KK2NoYXIJXHgzRQkoMSAzIDUgIDgpCSMg4qKVID4gW0dSRUFURVItVEhBTiBTSUdOXQorY2hhcglceDNGCSggMjMgIDY3OCkJIyDio6YgPyBbUVVFU1RJT04gTUFSS10KK2NoYXIJXHg0MAkoICAgNCAgNyApCSMg4qGIIEAgW0NPTU1FUkNJQUwgQVRdCitjaGFyCVx4NUIJKDEyMyA1NjcgKQkjIOKhtyBbIFtMRUZUIFNRVUFSRSBCUkFDS0VUXQorY2hhcglceDVDCSggIDM0ICA3ICkJIyDioYwgXCBbUkVWRVJTRSBTT0xJRFVTXQorY2hhcglceDVECSggMjM0NTYgOCkJIyDior4gXSBbUklHSFQgU1FVQVJFIEJSQUNLRVRdCitjaGFyCVx4NUUJKCAyMzQgNiA4KQkjIOKiriBeIFtDSVJDVU1GTEVYIEFDQ0VOVF0KK2NoYXIJXHg1RgkoICAgNDU2NyApCSMg4qG4IF8gW0xPVyBMSU5FXQorY2hhcglceDYwCSggICAgIDYgOCkJIyDioqAgYCBbR1JBVkUgQUNDRU5UXQorY2hhcglceDdCCSggMjMgNTY3ICkJIyDiobYgeyBbTEVGVCBDVVJMWSBCUkFDS0VUXQorY2hhcglceDdDCSgxMiAgNTYgOCkJIyDiorMgfCBbVkVSVElDQUwgTElORV0KK2NoYXIJXHg3RAkoIDIzIDU2IDgpCSMg4qK2IH0gW1JJR0hUIENVUkxZIEJSQUNLRVRdCitjaGFyCVx4N0UJKCAgMzQ1ICA4KQkjIOKinCB+IFtUSUxERV0KKworY2hhcglceEEyCSgxMiA0IDY3ICkJIyDioasgwqIgW0NFTlQgU0lHTl0KK2NoYXIJXHhBNwkoIDIzNCAgIDgpCSMg4qKOIMKnIFtTRUNUSU9OIFNJR05dCitjaGFyCVx4QTkJKDEyMzQgNiA4KQkjIOKiryDCqSBbQ09QWVJJR0hUIFNJR05dCitjaGFyCVx4QUIJKDEyMzQ1NjcgKQkjIOKhvyDCqyBbTEVGVC1QT0lOVElORyBET1VCTEUgQU5HTEUgUVVPVEFUSU9OIE1BUktdCitjaGFyCVx4QUUJKDEyMyA1ICA4KQkjIOKilyDCriBbUkVHSVNURVJFRCBTSUdOXQorY2hhcglceEIwCSgxMjM0NSAgOCkJIyDiop8gwrAgW0RFR1JFRSBTSUdOXQorY2hhcglceEI1CSgxIDM0ICAgOCkJIyDioo0gwrUgW01JQ1JPIFNJR05dCitjaGFyCVx4QjYJKDEyMzQgICA4KQkjIOKijyDCtiBbUElMQ1JPVyBTSUdOXQorY2hhcglceEJCCSgxMjM0NTYgOCkJIyDior8gwrsgW1JJR0hULVBPSU5USU5HIERPVUJMRSBBTkdMRSBRVU9UQVRJT04gTUFSS10KK2dseXBoCVx4QkYJKCAyMyAgNjc4KQkjIOKjpiDCvyBbSU5WRVJURUQgUVVFU1RJT04gTUFSS10KK2NoYXIJXHhENwkoIDIzICA2IDgpCSMg4qKmIMOXIFtNVUxUSVBMSUNBVElPTiBTSUdOXQorY2hhcglceEY3CSggMiAgNTYgOCkJIyDiorIgw7cgW0RJVklTSU9OIFNJR05dCisKK2NoYXIJXHUwNjBDCSggICAgNSA3ICkJIyDioZAg2IwgW0FSQUJJQyBDT01NQV0KK2NoYXIJXHUwNjFCCSggICAgNTY3ICkJIyDiobAg2JsgW0FSQUJJQyBTRU1JQ09MT05dCitjaGFyCVx1MDYxRgkoIDIzICA2ICApCSMg4qCmINifIFtBUkFCSUMgUVVFU1RJT04gTUFSS10KK2NoYXIJXHUwNjIxCSggIDMgICAgICkJIyDioIQg2KEgW0FSQUJJQyBMRVRURVIgSEFNWkFdCitjaGFyCVx1MDYyMgkoICAzNDUgICApCSMg4qCcINiiIFtBUkFCSUMgTEVUVEVSIEFMRUYgV0lUSCBNQUREQSBBQk9WRV0KK2NoYXIJXHUwNjIzCSggIDM0ICAgICkJIyDioIwg2KMgW0FSQUJJQyBMRVRURVIgQUxFRiBXSVRIIEhBTVpBIEFCT1ZFXQorY2hhcglcdTA2MjQJKDEyICA1NiAgKQkjIOKgsyDYpCBbQVJBQklDIExFVFRFUiBXQVcgV0lUSCBIQU1aQSBBQk9WRV0KK2NoYXIJXHUwNjI1CSggICA0IDYgICkJIyDioKgg2KUgW0FSQUJJQyBMRVRURVIgQUxFRiBXSVRIIEhBTVpBIEJFTE9XXQorY2hhcglcdTA2MjYJKDEgMzQ1NiAgKQkjIOKgvSDYpiBbQVJBQklDIExFVFRFUiBZRUggV0lUSCBIQU1aQSBBQk9WRV0KK2NoYXIJXHUwNjI3CSgxICAgICAgICkJIyDioIEg2KcgW0FSQUJJQyBMRVRURVIgQUxFRl0KK2NoYXIJXHUwNjI4CSgxMiAgICAgICkJIyDioIMg2KggW0FSQUJJQyBMRVRURVIgQkVIXQorY2hhcglcdTA2MjkJKDEgICAgNiAgKQkjIOKgoSDYqSBbQVJBQklDIExFVFRFUiBURUggTUFSQlVUQV0KK2NoYXIJXHUwNjJBCSggMjM0NSAgICkJIyDioJ4g2KogW0FSQUJJQyBMRVRURVIgVEVIXQorY2hhcglcdTA2MkIJKDEgIDQ1NiAgKQkjIOKguSDYqyBbQVJBQklDIExFVFRFUiBUSEVIXQorY2hhcglcdTA2MkMJKCAyIDQ1ICAgKQkjIOKgmiDYrCBbQVJBQklDIExFVFRFUiBKRUVNXQorY2hhcglcdTA2MkQJKDEgICA1NiAgKQkjIOKgsSDYrSBbQVJBQklDIExFVFRFUiBIQUhdCitjaGFyCVx1MDYyRQkoMSAzNCA2ICApCSMg4qCtINiuIFtBUkFCSUMgTEVUVEVSIEtIQUhdCitjaGFyCVx1MDYyRgkoMSAgNDUgICApCSMg4qCZINivIFtBUkFCSUMgTEVUVEVSIERBTF0KK2NoYXIJXHUwNjMwCSggMjM0IDYgICkJIyDioK4g2LAgW0FSQUJJQyBMRVRURVIgVEhBTF0KK2NoYXIJXHUwNjMxCSgxMjMgNSAgICkJIyDioJcg2LEgW0FSQUJJQyBMRVRURVIgUkVIXQorY2hhcglcdTA2MzIJKDEgMyA1NiAgKQkjIOKgtSDYsiBbQVJBQklDIExFVFRFUiBaQUlOXQorY2hhcglcdTA2MzMJKCAyMzQgICAgKQkjIOKgjiDYsyBbQVJBQklDIExFVFRFUiBTRUVOXQorY2hhcglcdTA2MzQJKDEgIDQgNiAgKQkjIOKgqSDYtCBbQVJBQklDIExFVFRFUiBTSEVFTl0KK2NoYXIJXHUwNjM1CSgxMjM0IDYgICkJIyDioK8g2LUgW0FSQUJJQyBMRVRURVIgU0FEXQorY2hhcglcdTA2MzYJKDEyIDQgNiAgKQkjIOKgqyDYtiBbQVJBQklDIExFVFRFUiBEQURdCitjaGFyCVx1MDYzNwkoIDIzNDU2ICApCSMg4qC+INi3IFtBUkFCSUMgTEVUVEVSIFRBSF0KK2NoYXIJXHUwNjM4CSgxMjM0NTYgICkJIyDioL8g2LggW0FSQUJJQyBMRVRURVIgWkFIXQorY2hhcglcdTA2MzkJKDEyMyA1NiAgKQkjIOKgtyDYuSBbQVJBQklDIExFVFRFUiBBSU5dCitjaGFyCVx1MDYzQQkoMTIgICA2ICApCSMg4qCjINi6IFtBUkFCSUMgTEVUVEVSIEdIQUlOXQorY2hhcglcdTA2NDEJKDEyIDQgICAgKQkjIOKgiyDZgSBbQVJBQklDIExFVFRFUiBGRUhdCitjaGFyCVx1MDY0MgkoMTIzNDUgICApCSMg4qCfINmCIFtBUkFCSUMgTEVUVEVSIFFBRl0KK2NoYXIJXHUwNjQzCSgxIDMgICAgICkJIyDioIUg2YMgW0FSQUJJQyBMRVRURVIgS0FGXQorY2hhcglcdTA2NDQJKDEyMyAgICAgKQkjIOKghyDZhCBbQVJBQklDIExFVFRFUiBMQU1dCitjaGFyCVx1MDY0NQkoMSAzNCAgICApCSMg4qCNINmFIFtBUkFCSUMgTEVUVEVSIE1FRU1dCitjaGFyCVx1MDY0NgkoMSAzNDUgICApCSMg4qCdINmGIFtBUkFCSUMgTEVUVEVSIE5PT05dCitjaGFyCVx1MDY0NwkoMTIgIDUgICApCSMg4qCTINmHIFtBUkFCSUMgTEVUVEVSIEhFSF0KK2NoYXIJXHUwNjQ4CSggMiA0NTYgICkJIyDioLog2YggW0FSQUJJQyBMRVRURVIgV0FXXQorY2hhcglcdTA2NDkJKDEgMyA1ICAgKQkjIOKglSDZiSBbQVJBQklDIExFVFRFUiBBTEVGIE1BS1NVUkFdCitjaGFyCVx1MDY0QQkoIDIgNCAgICApCSMg4qCKINmKIFtBUkFCSUMgTEVUVEVSIFlFSF0KK2NoYXIJXHUwNjRCCSggMjMgICAgICkJIyDioIYg2YsgW0FSQUJJQyBGQVRIQVRBTl0KK2NoYXIJXHUwNjRDCSggMiAgIDYgICkJIyDioKIg2YwgW0FSQUJJQyBEQU1NQVRBTl0KK2NoYXIJXHUwNjRECSggIDMgNSAgICkJIyDioJQg2Y0gW0FSQUJJQyBLQVNSQVRBTl0KK2NoYXIJXHUwNjRFCSggMiAgICAgICkJIyDioIIg2Y4gW0FSQUJJQyBGQVRIQV0KK2NoYXIJXHUwNjRGCSgxIDMgIDYgICkJIyDioKUg2Y8gW0FSQUJJQyBEQU1NQV0KK2NoYXIJXHUwNjUwCSgxICAgNSAgICkJIyDioJEg2ZAgW0FSQUJJQyBLQVNSQV0KK2NoYXIJXHUwNjUxCSggICAgIDYgICkJIyDioKAg2ZEgW0FSQUJJQyBTSEFEREFdCitjaGFyCVx1MDY1MgkoIDIgIDUgICApCSMg4qCSINmSIFtBUkFCSUMgU1VLVU5dCitjaGFyCVx1MDY3RQkoMTIzNCAgICApCSMg4qCPINm+IFtBUkFCSUMgTEVUVEVSIFBFSF0KK2NoYXIJXHUwNjg2CSgxICA0ICAgICkJIyDioIkg2oYgW0FSQUJJQyBMRVRURVIgVENIRUhdCitnbHlwaAlcdTA2OTgJKDEgMyA1NiAgKQkjIOKgtSDamCBbQVJBQklDIExFVFRFUiBKRUhdCitjaGFyCVx1MDZBNAkoMTIzICA2IDgpCSMg4qKnINqkIFtBUkFCSUMgTEVUVEVSIFZFSF0KK2NoYXIJXHUwNkFGCSgxMiA0NSAgICkJIyDioJsg2q8gW0FSQUJJQyBMRVRURVIgR0FGXQorZ2x5cGgJXHUwNkQ0CSggMiAgNTYgICkJIyDioLIg25QgW0FSQUJJQyBGVUxMIFNUT1BdCitjaGFyCVx1MjAyNgkoIDIgIDU2NzgpCSMg4qOyIOKApiBbSE9SSVpPTlRBTCBFTExJUFNJU10KK2NoYXIJXHUyMjEyCSggIDMgIDYgOCkJIyDioqQg4oiSIFtNSU5VUyBTSUdOXQorY2hhcglcdUZFRkMJKDEyMyAgNiAgKQkjIOKgpyDvu7wgW0FSQUJJQyBMSUdBVFVSRSBMQU0gV0lUSCBBTEVGIEZJTkFMIEZPUk1dCisKKyMgVGhlIEVuZ2xpc2ggbGV0dGVycyBtdXN0IGJlIGRlZmluZWQgYWZ0ZXIgdGhlIEFyYWJpYyBvbmVzIHNvIHRoYXQKKyMgdHlwaW5nIG9uIGEgYnJhaWxsZSBrZXlib2FyZCB3aWxsIHlpZWxkIHRoZSBBcmFiaWMgb25lcy4KK2luY2x1ZGUgbHRyLWxhdGluLnR0aQorCisjIFRoZSBFbmdsaXNoIGRpZ2l0cyBhcmUgdGhlaXIgY29ycmVzcG9uZGluZyBsZXR0ZXJzIHdpdGggZG90IDggYWRkZWQuCitpbmNsdWRlIG51bS1kb3Q4LnR0aQorYWxpYXMJXHUwNjYwCTAJIyDZoCBbQVJBQklDLUlORElDIERJR0lUIFpFUk9dCithbGlhcwlcdTA2NjEJMQkjINmhIFtBUkFCSUMtSU5ESUMgRElHSVQgT05FXQorYWxpYXMJXHUwNjYyCTIJIyDZoiBbQVJBQklDLUlORElDIERJR0lUIFRXT10KK2FsaWFzCVx1MDY2MwkzCSMg2aMgW0FSQUJJQy1JTkRJQyBESUdJVCBUSFJFRV0KK2FsaWFzCVx1MDY2NAk0CSMg2aQgW0FSQUJJQy1JTkRJQyBESUdJVCBGT1VSXQorYWxpYXMJXHUwNjY1CTUJIyDZpSBbQVJBQklDLUlORElDIERJR0lUIEZJVkVdCithbGlhcwlcdTA2NjYJNgkjINmmIFtBUkFCSUMtSU5ESUMgRElHSVQgU0lYXQorYWxpYXMJXHUwNjY3CTcJIyDZpyBbQVJBQklDLUlORElDIERJR0lUIFNFVkVOXQorYWxpYXMJXHUwNjY4CTgJIyDZqCBbQVJBQklDLUlORElDIERJR0lUIEVJR0hUXQorYWxpYXMJXHUwNjY5CTkJIyDZqSBbQVJBQklDLUlORElDIERJR0lUIE5JTkVdCisKK2FsaWFzCVx4QUQJLQkjIMKtIFtTT0ZUIEhZUEhFTl0KK2FsaWFzCVx1MjAxMAktCSMg4oCQIFtIWVBIRU5dCithbGlhcwlcdTIwMTEJLQkjIOKAkSBbTk9OLUJSRUFLSU5HIEhZUEhFTl0KKworYWxpYXMJXHUyMDE4CSIJIyDigJggW0xFRlQgU0lOR0xFIFFVT1RBVElPTiBNQVJLXQorYWxpYXMJXHUyMDE5CSIJIyDigJkgW1JJR0hUIFNJTkdMRSBRVU9UQVRJT04gTUFSS10KK2FsaWFzCVx1MjAxQwkiCSMg4oCcIFtMRUZUIERPVUJMRSBRVU9UQVRJT04gTUFSS10KK2FsaWFzCVx1MjAxRAkiCSMg4oCdIFtSSUdIVCBET1VCTEUgUVVPVEFUSU9OIE1BUktdCithbGlhcwlcdTIwMUUJIgkjIOKAniBbRE9VQkxFIExPVy05IFFVT1RBVElPTiBNQVJLXQorYWxpYXMJXHUyMDFGCSIJIyDigJ8gW0RPVUJMRSBISUdILVJFVkVSU0VELTkgUVVPVEFUSU9OIE1BUktdCisKKyMgRW5nbGlzaCBsZXR0ZXJzIGNhbiBiZSB0eXBlZCBieSBhZGRpbmcgYm90aCBkb3RzIDcgYW5kIDguCitpbnB1dAlhCSgxICAgICA3OCkKK2lucHV0CWIJKDEyICAgIDc4KQoraW5wdXQJYwkoMSAgNCAgNzgpCitpbnB1dAlkCSgxICA0NSA3OCkKK2lucHV0CWUJKDEgICA1IDc4KQoraW5wdXQJZgkoMTIgNCAgNzgpCitpbnB1dAlnCSgxMiA0NSA3OCkKK2lucHV0CWgJKDEyICA1IDc4KQoraW5wdXQJaQkoIDIgNCAgNzgpCitpbnB1dAlqCSggMiA0NSA3OCkKK2lucHV0CWsJKDEgMyAgIDc4KQoraW5wdXQJbAkoMTIzICAgNzgpCitpbnB1dAltCSgxIDM0ICA3OCkKK2lucHV0CW4JKDEgMzQ1IDc4KQoraW5wdXQJbwkoMSAzIDUgNzgpCitpbnB1dAlwCSgxMjM0ICA3OCkKK2lucHV0CXEJKDEyMzQ1IDc4KQoraW5wdXQJcgkoMTIzIDUgNzgpCitpbnB1dAlzCSggMjM0ICA3OCkKK2lucHV0CXQJKCAyMzQ1IDc4KQoraW5wdXQJdQkoMSAzICA2NzgpCitpbnB1dAl2CSgxMjMgIDY3OCkKK2lucHV0CXcJKCAyIDQ1Njc4KQoraW5wdXQJeAkoMSAzNCA2NzgpCitpbnB1dAl5CSgxIDM0NTY3OCkKK2lucHV0CXoJKDEgMyA1Njc4KQorCitpbmNsdWRlIGNvbW1vbi50dGkKZGlmZiAtLWdpdCBhL1RhYmxlcy9UZXh0L2FzLnR0YiBiL1RhYmxlcy9UZXh0L2FzLnR0YgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mN2ZmMWYyCi0tLSAvZGV2L251bGwKKysrIGIvVGFibGVzL1RleHQvYXMudHRiCkBAIC0wLDAgKzEsMjQgQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyMgICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisjCisjIENvcHlyaWdodCAoQykgMjAwOC0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyMKKyMgQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjIEJSTFRUWSBUZXh0IFRhYmxlIC0gQXNzYW1lc2UKKworaW5jbHVkZSBiZW5nYWxpLnR0aQoraW5jbHVkZSBhc2NpaS1iYXNpYy50dGkKKworaW5jbHVkZSBjb21tb24udHRpCmRpZmYgLS1naXQgYS9UYWJsZXMvVGV4dC9hc2NpaS1iYXNpYy50dGkgYi9UYWJsZXMvVGV4dC9hc2NpaS1iYXNpYy50dGkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWI1ZWIyMgotLS0gL2Rldi9udWxsCisrKyBiL1RhYmxlcy9UZXh0L2FzY2lpLWJhc2ljLnR0aQpAQCAtMCwwICsxLDI0IEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisjICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorIworIyBDb3B5cmlnaHQgKEMpIDIwMDgtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisjCisjIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisjCisjIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyMgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorIyBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyMKKyMgV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworIworIyBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIyBUaGlzIEJSTFRUWSB0ZXh0IHN1YnRhYmxlIGRlZmluZXMgYSBzZXQgb2YgYnJhaWxsZSByZXByZXNlbnRhdGlvbnMgZm9yIHRoZSAKKyMgQVNDSUkgY2hhcmFjdGVyIHNldCBkZXNpZ25lZCBmb3IgbGFuZ3VhZ2VzIHdoaWNoIGRvbid0IHVzZSB0aGVtIHRoZW1zZWx2ZXMuCisKK2luY2x1ZGUgbHRyLWxhdGluLnR0aQoraW5jbHVkZSBudW0tZG90OC50dGkKK2luY2x1ZGUgcHVuYy1iYXNpYy50dGkKZGlmZiAtLWdpdCBhL1RhYmxlcy9UZXh0L2F3YS50dGIgYi9UYWJsZXMvVGV4dC9hd2EudHRiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ0YTU4ZTQKLS0tIC9kZXYvbnVsbAorKysgYi9UYWJsZXMvVGV4dC9hd2EudHRiCkBAIC0wLDAgKzEsMjQgQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyMgICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisjCisjIENvcHlyaWdodCAoQykgMjAwOC0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyMKKyMgQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjIEJSTFRUWSBUZXh0IFRhYmxlIC0gQXdhZGhpCisKK2luY2x1ZGUgZGV2YW5hZ2FyaS50dGkKK2luY2x1ZGUgYXNjaWktYmFzaWMudHRpCisKK2luY2x1ZGUgY29tbW9uLnR0aQpkaWZmIC0tZ2l0IGEvVGFibGVzL1RleHQvYmVuZ2FsaS50dGkgYi9UYWJsZXMvVGV4dC9iZW5nYWxpLnR0aQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MmFmOTI0Ci0tLSAvZGV2L251bGwKKysrIGIvVGFibGVzL1RleHQvYmVuZ2FsaS50dGkKQEAgLTAsMCArMSwxMDkgQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyMgICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisjCisjIENvcHlyaWdodCAoQykgMjAwOC0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyMKKyMgQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjIFRoaXMgQlJMVFRZIHRleHQgc3VidGFibGUgZGVmaW5lcyB0aGUgYnJhaWxsZSByZXByZXNlbnRhdGlvbnMKKyMgZm9yIHRoZSBCZW5nYWxpIHNjcmlwdC4KKworIyBNYWludGFpbmVkIGJ5IEpvaG4gSi4gQm95ZXIsIGRpcmVjdG9yQGNocGkub3JnLCB3d3cuY2hwaS5vcmcKKyMKKyMgVGhpcyB0YWJsZSBpcyBidWlsdCBhbmQgbWFpbnRhaW5lZCBieSBMZW9uIFVuZ2llciA8TGVvbi5VbmdpZXJAVmlld1BsdXMuY29tPgorIyB3aXRoIGhlbHAgYW5kIGd1aWRhbmNlIGZyb20gTW9oYW1tZWQgUi4gUmFtYWRhbiA8bXJhbWFkYW5AbmF0dGlxLmNvbT4KKyMKKyMgQ29udmVydGVkIGZyb20gbGlibG91aXMgdGFibGUgYnkgU2FtdWVsIFRoaWJhdWx0IDxzYW11ZWwudGhpYmF1bHRAZW5zLWx5b24ub3JnPgorCisjIGdlbmVyYXRlZCBieSB0dGJ0ZXN0OgorY2hhciBcdTA5ODEJKCAgMyAgICAgKSAgIyDioIQg4KaBIFtCRU5HQUxJIFNJR04gQ0FORFJBQklORFVdCitjaGFyIFx1MDk4MgkoICAgIDU2ICApICAjIOKgsCDgpoIgW0JFTkdBTEkgU0lHTiBBTlVTVkFSQV0KK2NoYXIgXHUwOTgzCSggICAgIDYgICkgICMg4qCgIOCmgyBbQkVOR0FMSSBTSUdOIFZJU0FSR0FdCitjaGFyIFx1MDk4NQkoMSAgICAgICApICAjIOKggSDgpoUgW0JFTkdBTEkgTEVUVEVSIEFdCitjaGFyIFx1MDk4NgkoICAzNDUgICApICAjIOKgnCDgpoYgW0JFTkdBTEkgTEVUVEVSIEFBXQorY2hhciBcdTA5ODcJKCAyIDQgICAgKSAgIyDioIog4KaHIFtCRU5HQUxJIExFVFRFUiBJXQorY2hhciBcdTA5ODgJKCAgMyA1ICAgKSAgIyDioJQg4KaIIFtCRU5HQUxJIExFVFRFUiBJSV0KK2NoYXIgXHUwOTg5CSgxIDMgIDYgICkgICMg4qClIOCmiSBbQkVOR0FMSSBMRVRURVIgVV0KK2NoYXIgXHUwOThBCSgxMiAgNTYgICkgICMg4qCzIOCmiiBbQkVOR0FMSSBMRVRURVIgVVVdCisKKworY2hhciBcdTA5OEYJKDEgICA1ICAgKSAgIyDioJEg4KaPIFtCRU5HQUxJIExFVFRFUiBFXQorY2hhciBcdTA5OTAJKCAgMzQgICAgKSAgIyDioIwg4KaQIFtCRU5HQUxJIExFVFRFUiBBSV0KKworCitjaGFyIFx1MDk5MwkoMSAzIDUgICApICAjIOKglSDgppMgW0JFTkdBTEkgTEVUVEVSIE9dCitjaGFyIFx1MDk5NAkoIDIgNCA2ICApICAjIOKgqiDgppQgW0JFTkdBTEkgTEVUVEVSIEFVXQorY2hhciBcdTA5OTUJKDEgMyAgICAgKSAgIyDioIUg4KaVIFtCRU5HQUxJIExFVFRFUiBLQV0KK2NoYXIgXHUwOTk2CSggICA0IDYgICkgICMg4qCoIOCmliBbQkVOR0FMSSBMRVRURVIgS0hBXQorY2hhciBcdTA5OTcJKDEyMzQgICAgKSAgIyDioI8g4KaXIFtCRU5HQUxJIExFVFRFUiBHQV0KK2NoYXIgXHUwOTk4CSgxMiAgIDYgICkgICMg4qCjIOCmmCBbQkVOR0FMSSBMRVRURVIgR0hBXQorY2hhciBcdTA5OTkJKCAgMzQgNiAgKSAgIyDioKwg4KaZIFtCRU5HQUxJIExFVFRFUiBOR0FdCitjaGFyIFx1MDk5QQkoMSAgNCAgICApICAjIOKgiSDgppogW0JFTkdBTEkgTEVUVEVSIENBXQorY2hhciBcdTA5OUIJKDEgICAgNiAgKSAgIyDioKEg4KabIFtCRU5HQUxJIExFVFRFUiBDSEFdCitjaGFyIFx1MDk5QwkoIDIgNDUgICApICAjIOKgmiDgppwgW0JFTkdBTEkgTEVUVEVSIEpBXQorY2hhciBcdTA5OUQJKCAgMyA1NiAgKSAgIyDioLQg4KadIFtCRU5HQUxJIExFVFRFUiBKSEFdCitjaGFyIFx1MDk5RQkoIDIgIDUgICApICAjIOKgkiDgpp4gW0JFTkdBTEkgTEVUVEVSIE5ZQV0KK2NoYXIgXHUwOTlGCSggMjM0NTYgICkgICMg4qC+IOCmnyBbQkVOR0FMSSBMRVRURVIgVFRBXQorY2hhciBcdTA5QTAJKCAyIDQ1NiAgKSAgIyDioLog4KagIFtCRU5HQUxJIExFVFRFUiBUVEhBXQorY2hhciBcdTA5QTEJKDEyIDQgNiAgKSAgIyDioKsg4KahIFtCRU5HQUxJIExFVFRFUiBEREFdCitjaGFyIFx1MDlBMgkoMTIzNDU2ICApICAjIOKgvyDgpqIgW0JFTkdBTEkgTEVUVEVSIERESEFdCitjaGFyIFx1MDlBMwkoICAzNDU2ICApICAjIOKgvCDgpqMgW0JFTkdBTEkgTEVUVEVSIE5OQV0KK2NoYXIgXHUwOUE0CSggMjM0NSAgICkgICMg4qCeIOCmpCBbQkVOR0FMSSBMRVRURVIgVEFdCitjaGFyIFx1MDlBNQkoMSAgNDU2ICApICAjIOKguSDgpqUgW0JFTkdBTEkgTEVUVEVSIFRIQV0KK2NoYXIgXHUwOUE2CSgxICA0NSAgICkgICMg4qCZIOCmpiBbQkVOR0FMSSBMRVRURVIgREFdCitjaGFyIFx1MDlBNwkoIDIzNCA2ICApICAjIOKgriDgpqcgW0JFTkdBTEkgTEVUVEVSIERIQV0KK2NoYXIgXHUwOUE4CSgxIDM0NSAgICkgICMg4qCdIOCmqCBbQkVOR0FMSSBMRVRURVIgTkFdCisKK2NoYXIgXHUwOUFBCSgxMjM0ICAgICkgICMg4qCPIOCmqiBbQkVOR0FMSSBMRVRURVIgUEFdCitjaGFyIFx1MDlBQgkoIDIzIDUgICApICAjIOKgliDgpqsgW0JFTkdBTEkgTEVUVEVSIFBIQV0KK2NoYXIgXHUwOUFDCSgxMiAgICAgICkgICMg4qCDIOCmrCBbQkVOR0FMSSBMRVRURVIgQkFdCitjaGFyIFx1MDlBRAkoICAgNDUgICApICAjIOKgmCDgpq0gW0JFTkdBTEkgTEVUVEVSIEJIQV0KK2NoYXIgXHUwOUFFCSgxIDM0ICAgICkgICMg4qCNIOCmriBbQkVOR0FMSSBMRVRURVIgTUFdCitjaGFyIFx1MDlBRgkoMSAzNDU2ICApICAjIOKgvSDgpq8gW0JFTkdBTEkgTEVUVEVSIFlBXQorY2hhciBcdTA5QjAJKDEyMyA1ICAgKSAgIyDioJcg4KawIFtCRU5HQUxJIExFVFRFUiBSQV0KKworY2hhciBcdTA5QjIJKDEyMyAgICAgKSAgIyDioIcg4KayIFtCRU5HQUxJIExFVFRFUiBMQV0KKworCisKK2NoYXIgXHUwOUI2CSgxICA0IDYgICkgICMg4qCpIOCmtiBbQkVOR0FMSSBMRVRURVIgU0hBXQorY2hhciBcdTA5QjcJKDEyMzQgNiAgKSAgIyDioK8g4Ka3IFtCRU5HQUxJIExFVFRFUiBTU0FdCitjaGFyIFx1MDlCOAkoIDIzNCAgICApICAjIOKgjiDgprggW0JFTkdBTEkgTEVUVEVSIFNBXQorY2hhciBcdTA5QjkJKDEyICA1ICAgKSAgIyDioJMg4Ka5IFtCRU5HQUxJIExFVFRFUiBIQV0KK2NoYXIgXHUwOUJECSggMiAgICAgICkgICMg4qCCIOCmvSBbQkVOR0FMSSBTSUdOIEFWQUdSQUhBXQorY2hhciBcdTA5QkUJKCAgMzQ1ICAgKSAgIyDioJwg4Ka+IFtCRU5HQUxJIFZPV0VMIFNJR04gQUFdCitjaGFyIFx1MDlCRgkoIDIgNCAgICApICAjIOKgiiDgpr8gW0JFTkdBTEkgVk9XRUwgU0lHTiBJXQorY2hhciBcdTA5QzAJKCAgMyA1ICAgKSAgIyDioJQg4KeAIFtCRU5HQUxJIFZPV0VMIFNJR04gSUldCitjaGFyIFx1MDlDMQkoMSAzICA2ICApICAjIOKgpSDgp4EgW0JFTkdBTEkgVk9XRUwgU0lHTiBVXQorY2hhciBcdTA5QzIJKDEyICA1NiAgKSAgIyDioLMg4KeCIFtCRU5HQUxJIFZPV0VMIFNJR04gVVVdCisKKworY2hhciBcdTA5QzcJKDEgICA1ICAgKSAgIyDioJEg4KeHIFtCRU5HQUxJIFZPV0VMIFNJR04gRV0KK2NoYXIgXHUwOUM4CSggIDM0ICAgICkgICMg4qCMIOCniCBbQkVOR0FMSSBWT1dFTCBTSUdOIEFJXQorCisKK2NoYXIgXHUwOUNCCSgxIDMgNSAgICkgICMg4qCVIOCniyBbQkVOR0FMSSBWT1dFTCBTSUdOIE9dCitjaGFyIFx1MDlDQwkoIDIgNCA2ICApICAjIOKgqiDgp4wgW0JFTkdBTEkgVk9XRUwgU0lHTiBBVV0KK2NoYXIgXHUwOUNECSggICA0ICAgICkgICMg4qCIIOCnjSBbQkVOR0FMSSBTSUdOIFZJUkFNQV0KKworY2hhciBcdTA5RTYJKCAyIDQ1ICAgKSAgIyDioJog4KemIFtCRU5HQUxJIERJR0lUIFpFUk9dCitjaGFyIFx1MDlFNwkoMSAgICAgICApICAjIOKggSDgp6cgW0JFTkdBTEkgRElHSVQgT05FXQorY2hhciBcdTA5RTgJKDEyICAgICAgKSAgIyDioIMg4KeoIFtCRU5HQUxJIERJR0lUIFRXT10KK2NoYXIgXHUwOUU5CSgxICA0ICAgICkgICMg4qCJIOCnqSBbQkVOR0FMSSBESUdJVCBUSFJFRV0KK2NoYXIgXHUwOUVBCSgxICA0NSAgICkgICMg4qCZIOCnqiBbQkVOR0FMSSBESUdJVCBGT1VSXQorY2hhciBcdTA5RUIJKDEgICA1ICAgKSAgIyDioJEg4KerIFtCRU5HQUxJIERJR0lUIEZJVkVdCitjaGFyIFx1MDlFQwkoMTIgNCAgICApICAjIOKgiyDgp6wgW0JFTkdBTEkgRElHSVQgU0lYXQorY2hhciBcdTA5RUQJKDEyIDQ1ICAgKSAgIyDioJsg4KetIFtCRU5HQUxJIERJR0lUIFNFVkVOXQorY2hhciBcdTA5RUUJKDEyICA1ICAgKSAgIyDioJMg4KeuIFtCRU5HQUxJIERJR0lUIEVJR0hUXQorY2hhciBcdTA5RUYJKCAyIDQgICAgKSAgIyDioIog4KevIFtCRU5HQUxJIERJR0lUIE5JTkVdCmRpZmYgLS1naXQgYS9UYWJsZXMvVGV4dC9iZy50dGIgYi9UYWJsZXMvVGV4dC9iZy50dGIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTFkMGFhNgotLS0gL2Rldi9udWxsCisrKyBiL1RhYmxlcy9UZXh0L2JnLnR0YgpAQCAtMCwwICsxLDM0IEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisjICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorIworIyBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisjCisjIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisjCisjIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyMgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorIyBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyMKKyMgV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworIworIyBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIyBCUkxUVFkgVGV4dCBUYWJsZSAtIEJ1bGdhcmlhbgorIworIyBTYW11ZWwgVGhpYmF1bHQgPHNhbXVlbC50aGliYXVsdEBlbnMtbHlvbi5vcmc+CisjIAorIyBUaGlzIHRhYmxlIGlzIGJhc2VkIG9uIHRoZSBVbmVzY28gcmVwb3J0IG9uIHRoZSBwcm9ncmVzcyBvZiB1bmlmaWNhdGlvbiBvZgorIyBicmFpbGxlIHdyaXRpbmcgwqvCoEwnw4lDUklUVVJFIEJSQUlMTEUgREFOUyBMRSBNT05ERcKgwrssIGJ5IFNpciBDbHV0aGEKKyMgTUFDS0VOWklFOiBodHRwOi8vdW5lc2RvYy51bmVzY28ub3JnL2ltYWdlcy8wMDEzLzAwMTM1Mi8xMzUyNTFmby5wZGYKKyMgVGhlIGRvY3VtZW50IGlzIGRhdGVkIDE5NTQsIHNvIHRoaXMgdGFibGUgbWF5IGJlIHF1aXRlIG91dGRhdGVkLgorCisjIHRoZSBzdGFuZGFyZCByZXByZXNlbnRhdGlvbnMgZm9yIHRoZSBsZXR0ZXJzIG9mIHRoZSBDeXJpbGxpYyBhbHBoYWJldAoraW5jbHVkZSBsdHItY3lyaWxsaWMudHRpCisKK2luY2x1ZGUgbHRyLWRvdDgudHRpCitpbmNsdWRlIG51bS1uZW1ldGgudHRpCitpbmNsdWRlIHB1bmMtYWx0ZXJuYXRlLnR0aQoraW5jbHVkZSBjb21tb24udHRpCmRpZmYgLS1naXQgYS9UYWJsZXMvVGV4dC9iaC50dGIgYi9UYWJsZXMvVGV4dC9iaC50dGIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWQ5M2FhNgotLS0gL2Rldi9udWxsCisrKyBiL1RhYmxlcy9UZXh0L2JoLnR0YgpAQCAtMCwwICsxLDI0IEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisjICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorIworIyBDb3B5cmlnaHQgKEMpIDIwMDgtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisjCisjIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisjCisjIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyMgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorIyBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyMKKyMgV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworIworIyBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIyBCUkxUVFkgVGV4dCBUYWJsZSAtIEJpaGFyaQorCitpbmNsdWRlIGRldmFuYWdhcmkudHRpCitpbmNsdWRlIGFzY2lpLWJhc2ljLnR0aQorCitpbmNsdWRlIGNvbW1vbi50dGkKZGlmZiAtLWdpdCBhL1RhYmxlcy9UZXh0L2Jsb2Nrcy50dGkgYi9UYWJsZXMvVGV4dC9ibG9ja3MudHRpCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYyZjIyMmQKLS0tIC9kZXYvbnVsbAorKysgYi9UYWJsZXMvVGV4dC9ibG9ja3MudHRpCkBAIC0wLDAgKzEsMjggQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyMgICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisjCisjIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyMKKyMgQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjIFRoaXMgQlJMVFRZIHRleHQgc3VidGFibGUgaW1wbGVtZW50cyBhIHBvcnRhYmxlIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBibG9jaworIyBlbGVtZW50IGNoYXJhY3RlcnMuCisKK2dseXBoIFx1MjU4MAkoMTIgNDUgICApICAjIOKgmyDiloAgW1VQUEVSIEhBTEYgQkxPQ0tdCitnbHlwaCBcdTI1ODIJKCAgICAgIDc4KSAgIyDio4Ag4paCIFtMT1dFUiBPTkUgUVVBUlRFUiBCTE9DS10KK2dseXBoIFx1MjU4NAkoICAzICA2NzgpICAjIOKjpCDiloQgW0xPV0VSIEhBTEYgQkxPQ0tdCitnbHlwaCBcdTI1ODYJKCAyMyA1Njc4KSAgIyDio7Yg4paGIFtMT1dFUiBUSFJFRSBRVUFSVEVSUyBCTE9DS10KK2dseXBoIFx1MjU4OAkoMTIzNDU2NzgpICAjIOKjvyDiloggW0ZVTEwgQkxPQ0tdCitnbHlwaCBcdTI1OEMJKDEyMyAgIDcgKSAgIyDioYcg4paMIFtMRUZUIEhBTEYgQkxPQ0tdCitnbHlwaCBcdTI1OTAJKCAgIDQ1NiA4KSAgIyDiorgg4paQIFtSSUdIVCBIQUxGIEJMT0NLXQpkaWZmIC0tZ2l0IGEvVGFibGVzL1RleHQvYm4udHRiIGIvVGFibGVzL1RleHQvYm4udHRiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdjZjQzZDgKLS0tIC9kZXYvbnVsbAorKysgYi9UYWJsZXMvVGV4dC9ibi50dGIKQEAgLTAsMCArMSwyNCBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorIyAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyMKKyMgQ29weXJpZ2h0IChDKSAyMDA4LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorIworIyBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorIworIyBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisjIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyMgbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisjCisjIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMgQlJMVFRZIFRleHQgVGFibGUgLSBCZW5nYWxpCisKK2luY2x1ZGUgYmVuZ2FsaS50dGkKK2luY2x1ZGUgYXNjaWktYmFzaWMudHRpCisKK2luY2x1ZGUgY29tbW9uLnR0aQpkaWZmIC0tZ2l0IGEvVGFibGVzL1RleHQvYm8udHRiIGIvVGFibGVzL1RleHQvYm8udHRiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE4YzNjNmYKLS0tIC9kZXYvbnVsbAorKysgYi9UYWJsZXMvVGV4dC9iby50dGIKQEAgLTAsMCArMSwyOCBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorIyAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyMKKyMgQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorIworIyBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorIworIyBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisjIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyMgbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisjCisjIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMgQlJMVFRZIFRleHQgVGFibGUgLSBUaWJldGFuCisKK2luY2x1ZGUgbHRyLXRpYmV0YW4udHRpCitpbmNsdWRlIHB1bmMtdGliZXRhbi50dGkKKworaW5jbHVkZSBsdHItZG90OC50dGkKK2luY2x1ZGUgbnVtLW5lbWV0aC50dGkKK2luY2x1ZGUgcHVuYy1hbHRlcm5hdGUudHRpCisKK2luY2x1ZGUgY29tbW9uLnR0aQpkaWZmIC0tZ2l0IGEvVGFibGVzL1RleHQvYm94ZXMudHRpIGIvVGFibGVzL1RleHQvYm94ZXMudHRpCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg0YWZjMTcKLS0tIC9kZXYvbnVsbAorKysgYi9UYWJsZXMvVGV4dC9ib3hlcy50dGkKQEAgLTAsMCArMSwxNjggQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyMgICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisjCisjIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyMKKyMgQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjIFRoaXMgQlJMVFRZIHRleHQgc3VidGFibGUgaW1wbGVtZW50cyBhIHBvcnRhYmxlIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBib3gKKyMgZHJhd2luZyBjaGFyYWN0ZXJzLmFObyBkaXN0aW5jdGlvbiBpcyBtYWRlIGJldHdlZW4gdGhlIHRocmVlIHR5cGVzIG9mIGJveGVzOgorIyBsaWdodCwgaGVhdnksIGFuZCBkb3VibGUuIENoYXJhY3RlcnMgd2l0aCBubyB2ZXJ0aWNhbCBjb21wb25lbnQgKGhvcml6b250YWwKKyMgZWRnZXMpIGFyZSByZXByZXNlbnRlZCBieSB0aGUgZm91ciBtaWRkbGUgZG90cyBbMjM1Nl0uIFRob3NlIHdpdGggYSB2ZXJ0aWNhbAorIyBjb21wb25lbnQgYWJvdmUgdGhlIGNlbnRlciAoZS5nLiBib3R0b20gY29ybmVycykgYWRkIHRoZSB0d28gdG9wIGRvdHMgWzE0XSwKKyMgYW5kIHRob3NlIHdpdGggYSB2ZXJ0aWNhbCBjb21wb25lbnQgYmVsb3cgdGhlIGNlbnRlciAoZS5nLiB0b3AgY29ybmVycykgYWRkCisjIHRoZSB0d28gYm90dG9tIGRvdHMgWzc4XS4gVGhpcyBtZWFucywgZm9yIGV4YW1wbGUsIHRoYXQgc2lkZSBlZGdlcyBhbmQgdGhlCisjIGNyb3NzIGFyZSByZXByZXNlbnRlZCBieSBhIGZ1bGwgY2VsbCBbMTIzNDU2NzhdLgorCisjIEZvciBkaWFnb25hbHMgd2l0aGluIGJveGVzLCB0aGUgdG9wLWxlZnQgYW5kIGJvdHRvbS1yaWdodCBkb3RzIFsxOF0gYXJlIHVzZWQKKyMgdG8gcmVwcmVzZW50IHRoZSBsaW5lIHdoaWNoIGRlc2NlbmRzIHRvd2FyZCB0aGUgcmlnaHQsIGFuZCB0aGUgdG9wLXJpZ2h0IGFuZAorIyBib3R0b20tbGVmdCBkb3RzIFs0N10gYXJlIHVzZWQgdG8gcmVwcmVzZW50IHRoZSBsaW5lIHdoaWNoIGFzY2VuZHMgdG93YXJkIHRoZQorIyByaWdodC4gVGhlIFggaXMgcmVwcmVzZW50ZWQgYnkgYWxsIGZvdXIgb2YgdGhlc2UgZG90cyBbMTQ3OF0uCisKK2dseXBoIFx1MjUwMAkoIDIzIDU2ICApICAjIOKgtiDilIAgW0JPWCBEUkFXSU5HUyBMSUdIVCBIT1JJWk9OVEFMXQorZ2x5cGggXHUyNTRDCSggMjMgNTYgICkgICMg4qC2IOKVjCBbQk9YIERSQVdJTkdTIExJR0hUIERPVUJMRSBEQVNIIEhPUklaT05UQUxdCitnbHlwaCBcdTI1MDQJKCAyMyA1NiAgKSAgIyDioLYg4pSEIFtCT1ggRFJBV0lOR1MgTElHSFQgVFJJUExFIERBU0ggSE9SSVpPTlRBTF0KK2dseXBoIFx1MjUwOAkoIDIzIDU2ICApICAjIOKgtiDilIggW0JPWCBEUkFXSU5HUyBMSUdIVCBRVUFEUlVQTEUgREFTSCBIT1JJWk9OVEFMXQorZ2x5cGggXHUyNTAyCSgxMjM0NTY3OCkgICMg4qO/IOKUgiBbQk9YIERSQVdJTkdTIExJR0hUIFZFUlRJQ0FMXQorZ2x5cGggXHUyNTRFCSgxMjM0NTY3OCkgICMg4qO/IOKVjiBbQk9YIERSQVdJTkdTIExJR0hUIERPVUJMRSBEQVNIIFZFUlRJQ0FMXQorZ2x5cGggXHUyNTA2CSgxMjM0NTY3OCkgICMg4qO/IOKUhiBbQk9YIERSQVdJTkdTIExJR0hUIFRSSVBMRSBEQVNIIFZFUlRJQ0FMXQorZ2x5cGggXHUyNTBBCSgxMjM0NTY3OCkgICMg4qO/IOKUiiBbQk9YIERSQVdJTkdTIExJR0hUIFFVQURSVVBMRSBEQVNIIFZFUlRJQ0FMXQorZ2x5cGggXHUyNTBDCSggMjMgNTY3OCkgICMg4qO2IOKUjCBbQk9YIERSQVdJTkdTIExJR0hUIERPV04gQU5EIFJJR0hUXQorZ2x5cGggXHUyNTEwCSggMjMgNTY3OCkgICMg4qO2IOKUkCBbQk9YIERSQVdJTkdTIExJR0hUIERPV04gQU5EIExFRlRdCitnbHlwaCBcdTI1MTQJKDEyMzQ1NiAgKSAgIyDioL8g4pSUIFtCT1ggRFJBV0lOR1MgTElHSFQgVVAgQU5EIFJJR0hUXQorZ2x5cGggXHUyNTE4CSgxMjM0NTYgICkgICMg4qC/IOKUmCBbQk9YIERSQVdJTkdTIExJR0hUIFVQIEFORCBMRUZUXQorZ2x5cGggXHUyNTFDCSgxMjM0NTY3OCkgICMg4qO/IOKUnCBbQk9YIERSQVdJTkdTIExJR0hUIFZFUlRJQ0FMIEFORCBSSUdIVF0KK2dseXBoIFx1MjUyNAkoMTIzNDU2NzgpICAjIOKjvyDilKQgW0JPWCBEUkFXSU5HUyBMSUdIVCBWRVJUSUNBTCBBTkQgTEVGVF0KK2dseXBoIFx1MjUyQwkoIDIzIDU2NzgpICAjIOKjtiDilKwgW0JPWCBEUkFXSU5HUyBMSUdIVCBET1dOIEFORCBIT1JJWk9OVEFMXQorZ2x5cGggXHUyNTM0CSgxMjM0NTYgICkgICMg4qC/IOKUtCBbQk9YIERSQVdJTkdTIExJR0hUIFVQIEFORCBIT1JJWk9OVEFMXQorZ2x5cGggXHUyNTNDCSgxMjM0NTY3OCkgICMg4qO/IOKUvCBbQk9YIERSQVdJTkdTIExJR0hUIFZFUlRJQ0FMIEFORCBIT1JJWk9OVEFMXQorCitnbHlwaCBcdTI1MDEJKCAyMyA1NiAgKSAgIyDioLYg4pSBIFtCT1ggRFJBV0lOR1MgSEVBVlkgSE9SSVpPTlRBTF0KK2dseXBoIFx1MjU0RAkoIDIzIDU2ICApICAjIOKgtiDilY0gW0JPWCBEUkFXSU5HUyBIRUFWWSBET1VCTEUgREFTSCBIT1JJWk9OVEFMXQorZ2x5cGggXHUyNTA1CSggMjMgNTYgICkgICMg4qC2IOKUhSBbQk9YIERSQVdJTkdTIEhFQVZZIFRSSVBMRSBEQVNIIEhPUklaT05UQUxdCitnbHlwaCBcdTI1MDkJKCAyMyA1NiAgKSAgIyDioLYg4pSJIFtCT1ggRFJBV0lOR1MgSEVBVlkgUVVBRFJVUExFIERBU0ggSE9SSVpPTlRBTF0KK2dseXBoIFx1MjUwMwkoMTIzNDU2NzgpICAjIOKjvyDilIMgW0JPWCBEUkFXSU5HUyBIRUFWWSBWRVJUSUNBTF0KK2dseXBoIFx1MjU0RgkoMTIzNDU2NzgpICAjIOKjvyDilY8gW0JPWCBEUkFXSU5HUyBIRUFWWSBET1VCTEUgREFTSCBWRVJUSUNBTF0KK2dseXBoIFx1MjUwNwkoMTIzNDU2NzgpICAjIOKjvyDilIcgW0JPWCBEUkFXSU5HUyBIRUFWWSBUUklQTEUgREFTSCBWRVJUSUNBTF0KK2dseXBoIFx1MjUwQgkoMTIzNDU2NzgpICAjIOKjvyDilIsgW0JPWCBEUkFXSU5HUyBIRUFWWSBRVUFEUlVQTEUgREFTSCBWRVJUSUNBTF0KK2dseXBoIFx1MjUwRgkoIDIzIDU2NzgpICAjIOKjtiDilI8gW0JPWCBEUkFXSU5HUyBIRUFWWSBET1dOIEFORCBSSUdIVF0KK2dseXBoIFx1MjUxMwkoIDIzIDU2NzgpICAjIOKjtiDilJMgW0JPWCBEUkFXSU5HUyBIRUFWWSBET1dOIEFORCBMRUZUXQorZ2x5cGggXHUyNTE3CSgxMjM0NTYgICkgICMg4qC/IOKUlyBbQk9YIERSQVdJTkdTIEhFQVZZIFVQIEFORCBSSUdIVF0KK2dseXBoIFx1MjUxQgkoMTIzNDU2ICApICAjIOKgvyDilJsgW0JPWCBEUkFXSU5HUyBIRUFWWSBVUCBBTkQgTEVGVF0KK2dseXBoIFx1MjUyMwkoMTIzNDU2NzgpICAjIOKjvyDilKMgW0JPWCBEUkFXSU5HUyBIRUFWWSBWRVJUSUNBTCBBTkQgUklHSFRdCitnbHlwaCBcdTI1MkIJKDEyMzQ1Njc4KSAgIyDio78g4pSrIFtCT1ggRFJBV0lOR1MgSEVBVlkgVkVSVElDQUwgQU5EIExFRlRdCitnbHlwaCBcdTI1MzMJKCAyMyA1Njc4KSAgIyDio7Yg4pSzIFtCT1ggRFJBV0lOR1MgSEVBVlkgRE9XTiBBTkQgSE9SSVpPTlRBTF0KK2dseXBoIFx1MjUzQgkoMTIzNDU2ICApICAjIOKgvyDilLsgW0JPWCBEUkFXSU5HUyBIRUFWWSBVUCBBTkQgSE9SSVpPTlRBTF0KK2dseXBoIFx1MjU0QgkoMTIzNDU2NzgpICAjIOKjvyDilYsgW0JPWCBEUkFXSU5HUyBIRUFWWSBWRVJUSUNBTCBBTkQgSE9SSVpPTlRBTF0KKworZ2x5cGggXHUyNTUwCSggMjMgNTYgICkgICMg4qC2IOKVkCBbQk9YIERSQVdJTkdTIERPVUJMRSBIT1JJWk9OVEFMXQorZ2x5cGggXHUyNTUxCSgxMjM0NTY3OCkgICMg4qO/IOKVkSBbQk9YIERSQVdJTkdTIERPVUJMRSBWRVJUSUNBTF0KK2dseXBoIFx1MjU1NAkoIDIzIDU2NzgpICAjIOKjtiDilZQgW0JPWCBEUkFXSU5HUyBET1VCTEUgRE9XTiBBTkQgUklHSFRdCitnbHlwaCBcdTI1NTcJKCAyMyA1Njc4KSAgIyDio7Yg4pWXIFtCT1ggRFJBV0lOR1MgRE9VQkxFIERPV04gQU5EIExFRlRdCitnbHlwaCBcdTI1NUEJKDEyMzQ1NiAgKSAgIyDioL8g4pWaIFtCT1ggRFJBV0lOR1MgRE9VQkxFIFVQIEFORCBSSUdIVF0KK2dseXBoIFx1MjU1RAkoMTIzNDU2ICApICAjIOKgvyDilZ0gW0JPWCBEUkFXSU5HUyBET1VCTEUgVVAgQU5EIExFRlRdCitnbHlwaCBcdTI1NjAJKDEyMzQ1Njc4KSAgIyDio78g4pWgIFtCT1ggRFJBV0lOR1MgRE9VQkxFIFZFUlRJQ0FMIEFORCBSSUdIVF0KK2dseXBoIFx1MjU2MwkoMTIzNDU2NzgpICAjIOKjvyDilaMgW0JPWCBEUkFXSU5HUyBET1VCTEUgVkVSVElDQUwgQU5EIExFRlRdCitnbHlwaCBcdTI1NjYJKCAyMyA1Njc4KSAgIyDio7Yg4pWmIFtCT1ggRFJBV0lOR1MgRE9VQkxFIERPV04gQU5EIEhPUklaT05UQUxdCitnbHlwaCBcdTI1NjkJKDEyMzQ1NiAgKSAgIyDioL8g4pWpIFtCT1ggRFJBV0lOR1MgRE9VQkxFIFVQIEFORCBIT1JJWk9OVEFMXQorZ2x5cGggXHUyNTZDCSgxMjM0NTY3OCkgICMg4qO/IOKVrCBbQk9YIERSQVdJTkdTIERPVUJMRSBWRVJUSUNBTCBBTkQgSE9SSVpPTlRBTF0KKworZ2x5cGggXHUyNTBECSggMjMgNTY3OCkgICMg4qO2IOKUjSBbQk9YIERSQVdJTkdTIERPV04gTElHSFQgQU5EIFJJR0hUIEhFQVZZXQorZ2x5cGggXHUyNTBFCSggMjMgNTY3OCkgICMg4qO2IOKUjiBbQk9YIERSQVdJTkdTIERPV04gSEVBVlkgQU5EIFJJR0hUIExJR0hUXQorZ2x5cGggXHUyNTExCSggMjMgNTY3OCkgICMg4qO2IOKUkSBbQk9YIERSQVdJTkdTIERPV04gTElHSFQgQU5EIExFRlQgSEVBVlldCitnbHlwaCBcdTI1MTIJKCAyMyA1Njc4KSAgIyDio7Yg4pSSIFtCT1ggRFJBV0lOR1MgRE9XTiBIRUFWWSBBTkQgTEVGVCBMSUdIVF0KK2dseXBoIFx1MjUxNQkoMTIzNDU2ICApICAjIOKgvyDilJUgW0JPWCBEUkFXSU5HUyBVUCBMSUdIVCBBTkQgUklHSFQgSEVBVlldCitnbHlwaCBcdTI1MTYJKDEyMzQ1NiAgKSAgIyDioL8g4pSWIFtCT1ggRFJBV0lOR1MgVVAgSEVBVlkgQU5EIFJJR0hUIExJR0hUXQorZ2x5cGggXHUyNTE5CSgxMjM0NTYgICkgICMg4qC/IOKUmSBbQk9YIERSQVdJTkdTIFVQIExJR0hUIEFORCBMRUZUIEhFQVZZXQorZ2x5cGggXHUyNTFBCSgxMjM0NTYgICkgICMg4qC/IOKUmiBbQk9YIERSQVdJTkdTIFVQIEhFQVZZIEFORCBMRUZUIExJR0hUXQorZ2x5cGggXHUyNTFECSgxMjM0NTY3OCkgICMg4qO/IOKUnSBbQk9YIERSQVdJTkdTIFZFUlRJQ0FMIExJR0hUIEFORCBSSUdIVCBIRUFWWV0KK2dseXBoIFx1MjUxRQkoMTIzNDU2NzgpICAjIOKjvyDilJ4gW0JPWCBEUkFXSU5HUyBVUCBIRUFWWSBBTkQgUklHSFQgRE9XTiBMSUdIVF0KK2dseXBoIFx1MjUxRgkoMTIzNDU2NzgpICAjIOKjvyDilJ8gW0JPWCBEUkFXSU5HUyBET1dOIEhFQVZZIEFORCBSSUdIVCBVUCBMSUdIVF0KK2dseXBoIFx1MjUyMAkoMTIzNDU2NzgpICAjIOKjvyDilKAgW0JPWCBEUkFXSU5HUyBWRVJUSUNBTCBIRUFWWSBBTkQgUklHSFQgTElHSFRdCitnbHlwaCBcdTI1MjEJKDEyMzQ1Njc4KSAgIyDio78g4pShIFtCT1ggRFJBV0lOR1MgRE9XTiBMSUdIVCBBTkQgUklHSFQgVVAgSEVBVlldCitnbHlwaCBcdTI1MjIJKDEyMzQ1Njc4KSAgIyDio78g4pSiIFtCT1ggRFJBV0lOR1MgVVAgTElHSFQgQU5EIFJJR0hUIERPV04gSEVBVlldCitnbHlwaCBcdTI1MjUJKDEyMzQ1Njc4KSAgIyDio78g4pSlIFtCT1ggRFJBV0lOR1MgVkVSVElDQUwgTElHSFQgQU5EIExFRlQgSEVBVlldCitnbHlwaCBcdTI1MjYJKDEyMzQ1Njc4KSAgIyDio78g4pSmIFtCT1ggRFJBV0lOR1MgVVAgSEVBVlkgQU5EIExFRlQgRE9XTiBMSUdIVF0KK2dseXBoIFx1MjUyNwkoMTIzNDU2NzgpICAjIOKjvyDilKcgW0JPWCBEUkFXSU5HUyBET1dOIEhFQVZZIEFORCBMRUZUIFVQIExJR0hUXQorZ2x5cGggXHUyNTI4CSgxMjM0NTY3OCkgICMg4qO/IOKUqCBbQk9YIERSQVdJTkdTIFZFUlRJQ0FMIEhFQVZZIEFORCBMRUZUIExJR0hUXQorZ2x5cGggXHUyNTI5CSgxMjM0NTY3OCkgICMg4qO/IOKUqSBbQk9YIERSQVdJTkdTIERPV04gTElHSFQgQU5EIExFRlQgVVAgSEVBVlldCitnbHlwaCBcdTI1MkEJKDEyMzQ1Njc4KSAgIyDio78g4pSqIFtCT1ggRFJBV0lOR1MgVVAgTElHSFQgQU5EIExFRlQgRE9XTiBIRUFWWV0KK2dseXBoIFx1MjUyRAkoIDIzIDU2NzgpICAjIOKjtiDilK0gW0JPWCBEUkFXSU5HUyBMRUZUIEhFQVZZIEFORCBSSUdIVCBET1dOIExJR0hUXQorZ2x5cGggXHUyNTJFCSggMjMgNTY3OCkgICMg4qO2IOKUriBbQk9YIERSQVdJTkdTIFJJR0hUIEhFQVZZIEFORCBMRUZUIERPV04gTElHSFRdCitnbHlwaCBcdTI1MkYJKCAyMyA1Njc4KSAgIyDio7Yg4pSvIFtCT1ggRFJBV0lOR1MgRE9XTiBMSUdIVCBBTkQgSE9SSVpPTlRBTCBIRUFWWV0KK2dseXBoIFx1MjUzMAkoIDIzIDU2NzgpICAjIOKjtiDilLAgW0JPWCBEUkFXSU5HUyBET1dOIEhFQVZZIEFORCBIT1JJWk9OVEFMIExJR0hUXQorZ2x5cGggXHUyNTMxCSggMjMgNTY3OCkgICMg4qO2IOKUsSBbQk9YIERSQVdJTkdTIFJJR0hUIExJR0hUIEFORCBMRUZUIERPV04gSEVBVlldCitnbHlwaCBcdTI1MzIJKCAyMyA1Njc4KSAgIyDio7Yg4pSyIFtCT1ggRFJBV0lOR1MgTEVGVCBMSUdIVCBBTkQgUklHSFQgRE9XTiBIRUFWWV0KK2dseXBoIFx1MjUzNQkoMTIzNDU2ICApICAjIOKgvyDilLUgW0JPWCBEUkFXSU5HUyBMRUZUIEhFQVZZIEFORCBSSUdIVCBVUCBMSUdIVF0KK2dseXBoIFx1MjUzNgkoMTIzNDU2ICApICAjIOKgvyDilLYgW0JPWCBEUkFXSU5HUyBSSUdIVCBIRUFWWSBBTkQgTEVGVCBVUCBMSUdIVF0KK2dseXBoIFx1MjUzNwkoMTIzNDU2ICApICAjIOKgvyDilLcgW0JPWCBEUkFXSU5HUyBVUCBMSUdIVCBBTkQgSE9SSVpPTlRBTCBIRUFWWV0KK2dseXBoIFx1MjUzOAkoMTIzNDU2ICApICAjIOKgvyDilLggW0JPWCBEUkFXSU5HUyBVUCBIRUFWWSBBTkQgSE9SSVpPTlRBTCBMSUdIVF0KK2dseXBoIFx1MjUzOQkoMTIzNDU2ICApICAjIOKgvyDilLkgW0JPWCBEUkFXSU5HUyBSSUdIVCBMSUdIVCBBTkQgTEVGVCBVUCBIRUFWWV0KK2dseXBoIFx1MjUzQQkoMTIzNDU2ICApICAjIOKgvyDilLogW0JPWCBEUkFXSU5HUyBMRUZUIExJR0hUIEFORCBSSUdIVCBVUCBIRUFWWV0KK2dseXBoIFx1MjUzRAkoMTIzNDU2NzgpICAjIOKjvyDilL0gW0JPWCBEUkFXSU5HUyBMRUZUIEhFQVZZIEFORCBSSUdIVCBWRVJUSUNBTCBMSUdIVF0KK2dseXBoIFx1MjUzRQkoMTIzNDU2NzgpICAjIOKjvyDilL4gW0JPWCBEUkFXSU5HUyBSSUdIVCBIRUFWWSBBTkQgTEVGVCBWRVJUSUNBTCBMSUdIVF0KK2dseXBoIFx1MjUzRgkoMTIzNDU2NzgpICAjIOKjvyDilL8gW0JPWCBEUkFXSU5HUyBWRVJUSUNBTCBMSUdIVCBBTkQgSE9SSVpPTlRBTCBIRUFWWV0KK2dseXBoIFx1MjU0MAkoMTIzNDU2NzgpICAjIOKjvyDilYAgW0JPWCBEUkFXSU5HUyBVUCBIRUFWWSBBTkQgRE9XTiBIT1JJWk9OVEFMIExJR0hUXQorZ2x5cGggXHUyNTQxCSgxMjM0NTY3OCkgICMg4qO/IOKVgSBbQk9YIERSQVdJTkdTIERPV04gSEVBVlkgQU5EIFVQIEhPUklaT05UQUwgTElHSFRdCitnbHlwaCBcdTI1NDIJKDEyMzQ1Njc4KSAgIyDio78g4pWCIFtCT1ggRFJBV0lOR1MgVkVSVElDQUwgSEVBVlkgQU5EIEhPUklaT05UQUwgTElHSFRdCitnbHlwaCBcdTI1NDMJKDEyMzQ1Njc4KSAgIyDio78g4pWDIFtCT1ggRFJBV0lOR1MgTEVGVCBVUCBIRUFWWSBBTkQgUklHSFQgRE9XTiBMSUdIVF0KK2dseXBoIFx1MjU0NAkoMTIzNDU2NzgpICAjIOKjvyDilYQgW0JPWCBEUkFXSU5HUyBSSUdIVCBVUCBIRUFWWSBBTkQgTEVGVCBET1dOIExJR0hUXQorZ2x5cGggXHUyNTQ1CSgxMjM0NTY3OCkgICMg4qO/IOKVhSBbQk9YIERSQVdJTkdTIExFRlQgRE9XTiBIRUFWWSBBTkQgUklHSFQgVVAgTElHSFRdCitnbHlwaCBcdTI1NDYJKDEyMzQ1Njc4KSAgIyDio78g4pWGIFtCT1ggRFJBV0lOR1MgUklHSFQgRE9XTiBIRUFWWSBBTkQgTEVGVCBVUCBMSUdIVF0KK2dseXBoIFx1MjU0NwkoMTIzNDU2NzgpICAjIOKjvyDilYcgW0JPWCBEUkFXSU5HUyBET1dOIExJR0hUIEFORCBVUCBIT1JJWk9OVEFMIEhFQVZZXQorZ2x5cGggXHUyNTQ4CSgxMjM0NTY3OCkgICMg4qO/IOKViCBbQk9YIERSQVdJTkdTIFVQIExJR0hUIEFORCBET1dOIEhPUklaT05UQUwgSEVBVlldCitnbHlwaCBcdTI1NDkJKDEyMzQ1Njc4KSAgIyDio78g4pWJIFtCT1ggRFJBV0lOR1MgUklHSFQgTElHSFQgQU5EIExFRlQgVkVSVElDQUwgSEVBVlldCitnbHlwaCBcdTI1NEEJKDEyMzQ1Njc4KSAgIyDio78g4pWKIFtCT1ggRFJBV0lOR1MgTEVGVCBMSUdIVCBBTkQgUklHSFQgVkVSVElDQUwgSEVBVlldCisKK2dseXBoIFx1MjU1MgkoIDIzIDU2NzgpICAjIOKjtiDilZIgW0JPWCBEUkFXSU5HUyBET1dOIFNJTkdMRSBBTkQgUklHSFQgRE9VQkxFXQorZ2x5cGggXHUyNTUzCSggMjMgNTY3OCkgICMg4qO2IOKVkyBbQk9YIERSQVdJTkdTIERPV04gRE9VQkxFIEFORCBSSUdIVCBTSU5HTEVdCitnbHlwaCBcdTI1NTUJKCAyMyA1Njc4KSAgIyDio7Yg4pWVIFtCT1ggRFJBV0lOR1MgRE9XTiBTSU5HTEUgQU5EIExFRlQgRE9VQkxFXQorZ2x5cGggXHUyNTU2CSggMjMgNTY3OCkgICMg4qO2IOKVliBbQk9YIERSQVdJTkdTIERPV04gRE9VQkxFIEFORCBMRUZUIFNJTkdMRV0KK2dseXBoIFx1MjU1OAkoMTIzNDU2ICApICAjIOKgvyDilZggW0JPWCBEUkFXSU5HUyBVUCBTSU5HTEUgQU5EIFJJR0hUIERPVUJMRV0KK2dseXBoIFx1MjU1OQkoMTIzNDU2ICApICAjIOKgvyDilZkgW0JPWCBEUkFXSU5HUyBVUCBET1VCTEUgQU5EIFJJR0hUIFNJTkdMRV0KK2dseXBoIFx1MjU1QgkoMTIzNDU2ICApICAjIOKgvyDilZsgW0JPWCBEUkFXSU5HUyBVUCBTSU5HTEUgQU5EIExFRlQgRE9VQkxFXQorZ2x5cGggXHUyNTVDCSgxMjM0NTYgICkgICMg4qC/IOKVnCBbQk9YIERSQVdJTkdTIFVQIERPVUJMRSBBTkQgTEVGVCBTSU5HTEVdCitnbHlwaCBcdTI1NUUJKDEyMzQ1Njc4KSAgIyDio78g4pWeIFtCT1ggRFJBV0lOR1MgVkVSVElDQUwgU0lOR0xFIEFORCBSSUdIVCBET1VCTEVdCitnbHlwaCBcdTI1NUYJKDEyMzQ1Njc4KSAgIyDio78g4pWfIFtCT1ggRFJBV0lOR1MgVkVSVElDQUwgRE9VQkxFIEFORCBSSUdIVCBTSU5HTEVdCitnbHlwaCBcdTI1NjEJKDEyMzQ1Njc4KSAgIyDio78g4pWhIFtCT1ggRFJBV0lOR1MgVkVSVElDQUwgU0lOR0xFIEFORCBMRUZUIERPVUJMRV0KK2dseXBoIFx1MjU2MgkoMTIzNDU2NzgpICAjIOKjvyDilaIgW0JPWCBEUkFXSU5HUyBWRVJUSUNBTCBET1VCTEUgQU5EIExFRlQgU0lOR0xFXQorZ2x5cGggXHUyNTY0CSggMjMgNTY3OCkgICMg4qO2IOKVpCBbQk9YIERSQVdJTkdTIERPV04gU0lOR0xFIEFORCBIT1JJWk9OVEFMIERPVUJMRV0KK2dseXBoIFx1MjU2NQkoIDIzIDU2NzgpICAjIOKjtiDilaUgW0JPWCBEUkFXSU5HUyBET1dOIERPVUJMRSBBTkQgSE9SSVpPTlRBTCBTSU5HTEVdCitnbHlwaCBcdTI1NjcJKDEyMzQ1NiAgKSAgIyDioL8g4pWnIFtCT1ggRFJBV0lOR1MgVVAgU0lOR0xFIEFORCBIT1JJWk9OVEFMIERPVUJMRV0KK2dseXBoIFx1MjU2OAkoMTIzNDU2ICApICAjIOKgvyDilaggW0JPWCBEUkFXSU5HUyBVUCBET1VCTEUgQU5EIEhPUklaT05UQUwgU0lOR0xFXQorZ2x5cGggXHUyNTZBCSgxMjM0NTY3OCkgICMg4qO/IOKVqiBbQk9YIERSQVdJTkdTIFZFUlRJQ0FMIFNJTkdMRSBBTkQgSE9SSVpPTlRBTCBET1VCTEVdCitnbHlwaCBcdTI1NkIJKDEyMzQ1Njc4KSAgIyDio78g4pWrIFtCT1ggRFJBV0lOR1MgVkVSVElDQUwgRE9VQkxFIEFORCBIT1JJWk9OVEFMIFNJTkdMRV0KKworZ2x5cGggXHUyNTZECSggMjMgNTY3OCkgICMg4qO2IOKVrSBbQk9YIERSQVdJTkdTIExJR0hUIEFSQyBET1dOIEFORCBSSUdIVF0KK2dseXBoIFx1MjU2RQkoIDIzIDU2NzgpICAjIOKjtiDila4gW0JPWCBEUkFXSU5HUyBMSUdIVCBBUkMgRE9XTiBBTkQgTEVGVF0KK2dseXBoIFx1MjU2RgkoMTIzNDU2ICApICAjIOKgvyDila8gW0JPWCBEUkFXSU5HUyBMSUdIVCBBUkMgVVAgQU5EIExFRlRdCitnbHlwaCBcdTI1NzAJKDEyMzQ1NiAgKSAgIyDioL8g4pWwIFtCT1ggRFJBV0lOR1MgTElHSFQgQVJDIFVQIEFORCBSSUdIVF0KKworZ2x5cGggXHUyNTc0CSggMjMgNTYgICkgICMg4qC2IOKVtCBbQk9YIERSQVdJTkdTIExJR0hUIExFRlRdCitnbHlwaCBcdTI1NzUJKDEyMzQ1NiAgKSAgIyDioL8g4pW1IFtCT1ggRFJBV0lOR1MgTElHSFQgVVBdCitnbHlwaCBcdTI1NzYJKCAyMyA1NiAgKSAgIyDioLYg4pW2IFtCT1ggRFJBV0lOR1MgTElHSFQgUklHSFRdCitnbHlwaCBcdTI1NzcJKCAyMyA1Njc4KSAgIyDio7Yg4pW3IFtCT1ggRFJBV0lOR1MgTElHSFQgRE9XTl0KK2dseXBoIFx1MjU3OAkoIDIzIDU2ICApICAjIOKgtiDilbggW0JPWCBEUkFXSU5HUyBIRUFWWSBMRUZUXQorZ2x5cGggXHUyNTc5CSgxMjM0NTYgICkgICMg4qC/IOKVuSBbQk9YIERSQVdJTkdTIEhFQVZZIFVQXQorZ2x5cGggXHUyNTdBCSggMjMgNTYgICkgICMg4qC2IOKVuiBbQk9YIERSQVdJTkdTIEhFQVZZIFJJR0hUXQorZ2x5cGggXHUyNTdCCSggMjMgNTY3OCkgICMg4qO2IOKVuyBbQk9YIERSQVdJTkdTIEhFQVZZIERPV05dCisKK2dseXBoIFx1MjU3QwkoIDIzIDU2ICApICAjIOKgtiDilbwgW0JPWCBEUkFXSU5HUyBMSUdIVCBMRUZUIEFORCBIRUFWWSBSSUdIVF0KK2dseXBoIFx1MjU3RAkoMTIzNDU2NzgpICAjIOKjvyDilb0gW0JPWCBEUkFXSU5HUyBMSUdIVCBVUCBBTkQgSEVBVlkgRE9XTl0KK2dseXBoIFx1MjU3RQkoIDIzIDU2ICApICAjIOKgtiDilb4gW0JPWCBEUkFXSU5HUyBIRUFWWSBMRUZUIEFORCBMSUdIVCBSSUdIVF0KK2dseXBoIFx1MjU3RgkoMTIzNDU2NzgpICAjIOKjvyDilb8gW0JPWCBEUkFXSU5HUyBIRUFWWSBVUCBBTkQgTElHSFQgRE9XTl0KKworZ2x5cGggXHUyNTcxCSggICA0ICA3ICkgICMg4qGIIOKVsSBbQk9YIERSQVdJTkdTIExJR0hUIERJQUdPTkFMIFVQUEVSIFJJR0hUIFRPIExPV0VSIExFRlRdCitnbHlwaCBcdTI1NzIJKDEgICAgICA4KSAgIyDiooEg4pWyIFtCT1ggRFJBV0lOR1MgTElHSFQgRElBR09OQUwgVVBQRVIgTEVGVCBUTyBMT1dFUiBSSUdIVF0KK2dseXBoIFx1MjU3MwkoMSAgNCAgNzgpICAjIOKjiSDilbMgW0JPWCBEUkFXSU5HUyBMSUdIVCBESUFHT05BTCBDUk9TU10KZGlmZiAtLWdpdCBhL1RhYmxlcy9UZXh0L2JyYS50dGIgYi9UYWJsZXMvVGV4dC9icmEudHRiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFkNTY3ODMKLS0tIC9kZXYvbnVsbAorKysgYi9UYWJsZXMvVGV4dC9icmEudHRiCkBAIC0wLDAgKzEsMjQgQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyMgICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisjCisjIENvcHlyaWdodCAoQykgMjAwOC0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyMKKyMgQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjIEJSTFRUWSBUZXh0IFRhYmxlIC0gQnJhagorCitpbmNsdWRlIGRldmFuYWdhcmkudHRpCitpbmNsdWRlIGFzY2lpLWJhc2ljLnR0aQorCitpbmNsdWRlIGNvbW1vbi50dGkKZGlmZiAtLWdpdCBhL1RhYmxlcy9UZXh0L2JyZi50dGIgYi9UYWJsZXMvVGV4dC9icmYudHRiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA1ZjdhNjkKLS0tIC9kZXYvbnVsbAorKysgYi9UYWJsZXMvVGV4dC9icmYudHRiCkBAIC0wLDAgKzEsMTMxIEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisjICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorIworIyBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisjCisjIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisjCisjIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyMgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorIyBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyMKKyMgV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworIworIyBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIyBCUkxUVFkgVGV4dCBUYWJsZSAtIEJyYWlsbGUgUmVhZHkgRm9ybWF0IChmb3Igdmlld2luZyAuYnJmIGZpbGVzIHdpdGhpbiBhbiBlZGl0b3Igb3IgcGFnZXIpCisKK2NoYXIJXHMJKCAgICAgICkKKworZ2x5cGgJQQkoMSAgICAgKQorZ2x5cGgJQgkoMTIgICAgKQorZ2x5cGgJQwkoMSAgNCAgKQorZ2x5cGgJRAkoMSAgNDUgKQorZ2x5cGgJRQkoMSAgIDUgKQorZ2x5cGgJRgkoMTIgNCAgKQorZ2x5cGgJRwkoMTIgNDUgKQorZ2x5cGgJSAkoMTIgIDUgKQorZ2x5cGgJSQkoIDIgNCAgKQorZ2x5cGgJSgkoIDIgNDUgKQorCitnbHlwaAlLCSgxIDMgICApCitnbHlwaAlMCSgxMjMgICApCitnbHlwaAlNCSgxIDM0ICApCitnbHlwaAlOCSgxIDM0NSApCitnbHlwaAlPCSgxIDMgNSApCitnbHlwaAlQCSgxMjM0ICApCitnbHlwaAlRCSgxMjM0NSApCitnbHlwaAlSCSgxMjMgNSApCitnbHlwaAlTCSggMjM0ICApCitnbHlwaAlUCSggMjM0NSApCisKK2dseXBoCVUJKDEgMyAgNikKK2dseXBoCVYJKDEyMyAgNikKK2dseXBoCVgJKDEgMzQgNikKK2dseXBoCVkJKDEgMzQ1NikKK2dseXBoCVoJKDEgMyA1NikKK2NoYXIJJgkoMTIzNCA2KQorY2hhcgk9CSgxMjM0NTYpCitjaGFyCSgJKDEyMyA1NikKK2NoYXIJIQkoIDIzNCA2KQorY2hhcgkpCSggMjM0NTYpCisKK2NoYXIJKgkoMSAgICA2KQorY2hhcgk8CSgxMiAgIDYpCitjaGFyCSUJKDEgIDQgNikKK2NoYXIJPwkoMSAgNDU2KQorY2hhcgk6CSgxICAgNTYpCitjaGFyCSQJKDEyIDQgNikKK2dseXBoCV0JKDEyIDQ1NikKK2dseXBoCVxcCSgxMiAgNTYpCitnbHlwaAlbCSggMiA0IDYpCitnbHlwaAlXCSggMiA0NTYpCisKK2NoYXIJMQkoIDIgICAgKQorY2hhcgkyCSggMjMgICApCitjaGFyCTMJKCAyICA1ICkKK2NoYXIJNAkoIDIgIDU2KQorY2hhcgk1CSggMiAgIDYpCitjaGFyCTYJKCAyMyA1ICkKK2NoYXIJNwkoIDIzIDU2KQorY2hhcgk4CSggMjMgIDYpCitjaGFyCTkJKCAgMyA1ICkKK2NoYXIJMAkoICAzIDU2KQorCitjaGFyCS8JKCAgMzQgICkKK2NoYXIJKwkoICAzNCA2KQorY2hhcglcIwkoICAzNDU2KQorY2hhcgk+CSggIDM0NSApCitjaGFyCScJKCAgMyAgICkKK2NoYXIJLQkoICAzICA2KQorCitnbHlwaAlACSggICA0ICApCitnbHlwaAleCSggICA0NSApCitjaGFyCV8JKCAgIDQ1NikKK2NoYXIJIgkoICAgIDUgKQorY2hhcgkuCSggICA0IDYpCitjaGFyCTsJKCAgICA1NikKK2NoYXIJLAkoICAgICA2KQorCisjIEZvciBjb252ZW5pZW5jZSwgbG93ZXJjYXNlIGFscGhhYmV0aWMgY2hhcmFjdGVycyBhcmUgYWxzbyBkZWZpbmVkCisjIHNvIGFzIHRvIGhhdmUgcmVhZGFibGUgdGV4dCB3aGVuIG5vdCB2aWV3aW5nIGEgLmJyZiBmaWxlCisjIChsaWtlIEJSTFRUWSdzIGNvbmZpZyBtZW51IGZvciBzd2l0Y2hpbmcgdG8gYW5vdGhlciBicmFpbGxlIHRhYmxlKS4KK2NoYXIJYQkoMSAgICAgKQorY2hhcgliCSgxMiAgICApCitjaGFyCWMJKDEgIDQgICkKK2NoYXIJZAkoMSAgNDUgKQorY2hhcgllCSgxICAgNSApCitjaGFyCWYJKDEyIDQgICkKK2NoYXIJZwkoMTIgNDUgKQorY2hhcgloCSgxMiAgNSApCitjaGFyCWkJKCAyIDQgICkKK2NoYXIJagkoIDIgNDUgKQorY2hhcglrCSgxIDMgICApCitjaGFyCWwJKDEyMyAgICkKK2NoYXIJbQkoMSAzNCAgKQorY2hhcgluCSgxIDM0NSApCitjaGFyCW8JKDEgMyA1ICkKK2NoYXIJcAkoMTIzNCAgKQorY2hhcglxCSgxMjM0NSApCitjaGFyCXIJKDEyMyA1ICkKK2NoYXIJcwkoIDIzNCAgKQorY2hhcgl0CSggMjM0NSApCitjaGFyCXUJKDEgMyAgNikKK2NoYXIJdgkoMTIzICA2KQorY2hhcgl3CSggMiA0NTYpCitjaGFyCXgJKDEgMzQgNikKK2NoYXIJeQkoMSAzNDU2KQorY2hhcgl6CSgxIDMgNTYpCisKKyMgVGhlIGZvbGxvd2luZyBhZGRpdGlvbmFsIGNoYXJhY3RlcnMgbmVlZCB0byBiZSBkZWZpbmVkCisjIGJlY2F1c2Ugc29tZSAuYnJmIGZpbGVzIGNvbnRhaW4gbm9uLXN0YW5kYXJkIGNoYXJhY3RlcnMKKyMgYW5kIGJlY2F1c2Ugc29tZSBicmFpbGxlIHRyYW5zbGF0b3JzIG91dHB1dCBub24tc3RhbmRhcmQgY2hhcmFjdGVycy4KK2NoYXIJewkoIDIgNCA2KQorY2hhcgl9CSgxMiA0NTYpCitjaGFyCXwJKDEyICA1NikKK2NoYXIJfgkoICAgNDUgKQorY2hhcglgCSggICA0ICApCitnbHlwaAlcWDdGCSggICA0NTYpCmRpZmYgLS1naXQgYS9UYWJsZXMvVGV4dC9jb21tb24udHRpIGIvVGFibGVzL1RleHQvY29tbW9uLnR0aQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNzBkOGY2Ci0tLSAvZGV2L251bGwKKysrIGIvVGFibGVzL1RleHQvY29tbW9uLnR0aQpAQCAtMCwwICsxLDI2IEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisjICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorIworIyBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisjCisjIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisjCisjIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyMgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorIyBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyMKKyMgV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworIworIyBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIyBUaGlzIEJSTFRUWSB0ZXh0IHN1YnRhYmxlIGlzIGluY2x1ZGVkIGJ5IGFsbCBnZW5lcmFsIHB1cnBvc2UgdGV4dCB0YWJsZXMuIEl0cworIyBzb2xlIHB1cnBvc2UgaXMgdG8gYmUgYSBjb21tb24gcGxhY2Ugd2hlcmVpbiB0byBpbmNsdWRlIHRleHQgc3VidGFibGVzIHdoaWNoCisjIGRlZmluZSBicmFpbGxlIHJlcHJlc2VudGF0aW9ucyB0aGF0IGFyZSBnZW5lcmFsbHkgdXNlZnVsIGluIGFsbCBjb250ZXh0cy4KKworaW5jbHVkZSBhbGlhcy50dGkKK2luY2x1ZGUgYm94ZXMudHRpCitpbmNsdWRlIGJsb2Nrcy50dGkKK2luY2x1ZGUgd2luLTEyNTIudHRpCmRpZmYgLS1naXQgYS9UYWJsZXMvVGV4dC9jcy50dGIgYi9UYWJsZXMvVGV4dC9jcy50dGIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzEyODAxNgotLS0gL2Rldi9udWxsCisrKyBiL1RhYmxlcy9UZXh0L2NzLnR0YgpAQCAtMCwwICsxLDE3NiBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorIyAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyMKKyMgQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorIworIyBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorIworIyBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisjIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyMgbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisjCisjIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMgQlJMVFRZIFRleHQgVGFibGUgLSBDemVjaAorCisjIHRoZSBudW1iZXJzIDAtOSBhcmUgcmVwcmVzZW50ZWQgYnkgdGhlIGxldHRlcnMgaixhLWkgd2l0aCBkb3QgOCBhZGRlZAoraW5jbHVkZSBudW0tZG90OC50dGkKKworIyBnZW5lcmF0ZWQgYnkgdHRidGVzdDogY2hhcnNldD1pc28tODg1OS0yCitjaGFyIFx4MDEJKDEgICAgIDc4KSAgIyAwMSDio4EgICBbU1RBUlQgT0YgSEVBRElOR10KK2NoYXIgXHgwMgkoMTIgICAgNzgpICAjIDAyIOKjgyAgIFtTVEFSVCBPRiBURVhUXQorY2hhciBceDAzCSgxICA0ICA3OCkgICMgMDMg4qOJICAgW0VORCBPRiBURVhUXQorY2hhciBceDA0CSgxICA0NSA3OCkgICMgMDQg4qOZICAgW0VORCBPRiBUUkFOU01JU1NJT05dCitjaGFyIFx4MDUJKDEgICA1IDc4KSAgIyAwNSDio5EgICBbRU5RVUlSWV0KK2NoYXIgXHgwNgkoMTIgNCAgNzgpICAjIDA2IOKjiyAgIFtBQ0tOT1dMRURHRV0KK2NoYXIgXHgwNwkoMTIgNDUgNzgpICAjIDA3IOKjmyAgIFtCRUxMXQorY2hhciBceDA4CSgxMiAgNSA3OCkgICMgMDgg4qOTICAgW0JBQ0tTUEFDRV0KK2NoYXIgXHgwOQkoIDIgNCAgNzgpICAjIDA5IOKjiiAgIFtDSEFSQUNURVIgVEFCVUxBVElPTl0KK2NoYXIgXHgwQQkoIDIgNDUgNzgpICAjIDBBIOKjmiAgIFtMSU5FIEZFRUQgKExGKV0KK2NoYXIgXHgwQgkoMSAzICAgNzgpICAjIDBCIOKjhSAgIFtMSU5FIFRBQlVMQVRJT05dCitjaGFyIFx4MEMJKDEyMyAgIDc4KSAgIyAwQyDio4cgICBbRk9STSBGRUVEIChGRildCitjaGFyIFx4MEQJKDEgMzQgIDc4KSAgIyAwRCDio40gICBbQ0FSUklBR0UgUkVUVVJOIChDUildCitjaGFyIFx4MEUJKDEgMzQ1IDc4KSAgIyAwRSDio50gICBbU0hJRlQgT1VUXQorY2hhciBceDBGCSgxIDMgNSA3OCkgICMgMEYg4qOVICAgW1NISUZUIElOXQorY2hhciBceDEwCSgxMjM0ICA3OCkgICMgMTAg4qOPICAgW0RBVEEgTElOSyBFU0NBUEVdCitjaGFyIFx4MTEJKDEyMzQ1IDc4KSAgIyAxMSDio58gICBbREVWSUNFIENPTlRST0wgT05FXQorY2hhciBceDEyCSgxMjMgNSA3OCkgICMgMTIg4qOXICAgW0RFVklDRSBDT05UUk9MIFRXT10KK2NoYXIgXHgxMwkoIDIzNCAgNzgpICAjIDEzIOKjjiAgIFtERVZJQ0UgQ09OVFJPTCBUSFJFRV0KK2NoYXIgXHgxNAkoIDIzNDUgNzgpICAjIDE0IOKjniAgIFtERVZJQ0UgQ09OVFJPTCBGT1VSXQorY2hhciBceDE1CSgxIDMgIDY3OCkgICMgMTUg4qOlICAgW05FR0FUSVZFIEFDS05PV0xFREdFXQorY2hhciBceDE2CSgxMjMgIDY3OCkgICMgMTYg4qOnICAgW1NZTkNIUk9OT1VTIElETEVdCitjaGFyIFx4MTcJKDEyMyA1Njc4KSAgIyAxNyDio7cgICBbRU5EIE9GIFRSQU5TTUlTU0lPTiBCTE9DS10KK2NoYXIgXHgxOAkoMSAzNCA2NzgpICAjIDE4IOKjrSAgIFtDQU5DRUxdCitjaGFyIFx4MTkJKDEgMzQ1Njc4KSAgIyAxOSDio70gICBbRU5EIE9GIE1FRElVTV0KK2NoYXIgXHgxQQkoMSAzIDU2NzgpICAjIDFBIOKjtSAgIFtTVUJTVElUVVRFXQorY2hhciBceDIwCSggICAgICAgICkgICMgMjAg4qCAICAgW1NQQUNFXQorY2hhciBceDIxCSggMjMgNSAgICkgICMgMjEg4qCWICEgW0VYQ0xBTUFUSU9OIE1BUktdCitjaGFyIFx4MjIJKCAyMyA1NiAgKSAgIyAyMiDioLYgIiBbUVVPVEFUSU9OIE1BUktdCitjaGFyIFx4MjMJKCAgMzQ1NjcgKSAgIyAyMyDiobwgIyBbTlVNQkVSIFNJR05dCitjaGFyIFx4MjQJKCAyMyA1ICA4KSAgIyAyNCDiopYgJCBbRE9MTEFSIFNJR05dCitjaGFyIFx4MjUJKDEyMzQgICA4KSAgIyAyNSDioo8gJSBbUEVSQ0VOVCBTSUdOXQorY2hhciBceDI2CSggMjMgNSA3OCkgICMgMjYg4qOWICYgW0FNUEVSU0FORF0KK2NoYXIgXHgyNwkoICAgNCAgICApICAjIDI3IOKgiCAnIFtBUE9TVFJPUEhFXQorY2hhciBceDI4CSggMjMgIDYgICkgICMgMjgg4qCmICggW0xFRlQgUEFSRU5USEVTSVNdCitjaGFyIFx4MjkJKCAgMyA1NiAgKSAgIyAyOSDioLQgKSBbUklHSFQgUEFSRU5USEVTSVNdCitjaGFyIFx4MkEJKCAgMyA1ICAgKSAgIyAyQSDioJQgKiBbQVNURVJJU0tdCitjaGFyIFx4MkIJKCAyICA1NiAgKSAgIyAyQiDioLIgKyBbUExVUyBTSUdOXQorY2hhciBceDJDCSggMiAgICAgICkgICMgMkMg4qCCICwgW0NPTU1BXQorY2hhciBceDJECSggIDMgIDYgICkgICMgMkQg4qCkIC0gW0hZUEhFTi1NSU5VU10KK2NoYXIgXHgyRQkoICAzICAgICApICAjIDJFIOKghCAuIFtGVUxMIFNUT1BdCitjaGFyIFx4MkYJKDEyIDQ1NiAgKSAgIyAyRiDioLsgLyBbU09MSURVU10KKyMgSGluZHUtQXJhYmljIG51bWVyYWxzICAgICAjIDMwLTM5CitjaGFyIFx4M0EJKCAyICA1ICAgKSAgIyAzQSDioJIgOiBbQ09MT05dCitjaGFyIFx4M0IJKCAyMyAgICAgKSAgIyAzQiDioIYgOyBbU0VNSUNPTE9OXQorY2hhciBceDNDCSggMjMgICAgOCkgICMgM0Mg4qKGIDwgW0xFU1MtVEhBTiBTSUdOXQorY2hhciBceDNECSggMjMgNTY3OCkgICMgM0Qg4qO2ID0gW0VRVUFMUyBTSUdOXQorY2hhciBceDNFCSggICAgNTY3ICkgICMgM0Ug4qGwID4gW0dSRUFURVItVEhBTiBTSUdOXQorY2hhciBceDNGCSggMiAgIDYgICkgICMgM0Yg4qCiID8gW1FVRVNUSU9OIE1BUktdCitjaGFyIFx4NDAJKDEyIDQ1NiA4KSAgIyA0MCDiorsgQCBbQ09NTUVSQ0lBTCBBVF0KK2NoYXIgXHg0MQkoMSAgICAgNyApICAjIDQxIOKhgSBBIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBBXQorY2hhciBceDQyCSgxMiAgICA3ICkgICMgNDIg4qGDIEIgW0xBVElOIENBUElUQUwgTEVUVEVSIEJdCitjaGFyIFx4NDMJKDEgIDQgIDcgKSAgIyA0MyDioYkgQyBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgQ10KK2NoYXIgXHg0NAkoMSAgNDUgNyApICAjIDQ0IOKhmSBEIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBEXQorY2hhciBceDQ1CSgxICAgNSA3ICkgICMgNDUg4qGRIEUgW0xBVElOIENBUElUQUwgTEVUVEVSIEVdCitjaGFyIFx4NDYJKDEyIDQgIDcgKSAgIyA0NiDioYsgRiBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgRl0KK2NoYXIgXHg0NwkoMTIgNDUgNyApICAjIDQ3IOKhmyBHIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBHXQorY2hhciBceDQ4CSgxMiAgNSA3ICkgICMgNDgg4qGTIEggW0xBVElOIENBUElUQUwgTEVUVEVSIEhdCitjaGFyIFx4NDkJKCAyIDQgIDcgKSAgIyA0OSDioYogSSBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgSV0KK2NoYXIgXHg0QQkoIDIgNDUgNyApICAjIDRBIOKhmiBKIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBKXQorY2hhciBceDRCCSgxIDMgICA3ICkgICMgNEIg4qGFIEsgW0xBVElOIENBUElUQUwgTEVUVEVSIEtdCitjaGFyIFx4NEMJKDEyMyAgIDcgKSAgIyA0QyDioYcgTCBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgTF0KK2NoYXIgXHg0RAkoMSAzNCAgNyApICAjIDREIOKhjSBNIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBNXQorY2hhciBceDRFCSgxIDM0NSA3ICkgICMgNEUg4qGdIE4gW0xBVElOIENBUElUQUwgTEVUVEVSIE5dCitjaGFyIFx4NEYJKDEgMyA1IDcgKSAgIyA0RiDioZUgTyBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgT10KK2NoYXIgXHg1MAkoMTIzNCAgNyApICAjIDUwIOKhjyBQIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBQXQorY2hhciBceDUxCSgxMjM0NSA3ICkgICMgNTEg4qGfIFEgW0xBVElOIENBUElUQUwgTEVUVEVSIFFdCitjaGFyIFx4NTIJKDEyMyA1IDcgKSAgIyA1MiDioZcgUiBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgUl0KK2NoYXIgXHg1MwkoIDIzNCAgNyApICAjIDUzIOKhjiBTIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBTXQorY2hhciBceDU0CSggMjM0NSA3ICkgICMgNTQg4qGeIFQgW0xBVElOIENBUElUQUwgTEVUVEVSIFRdCitjaGFyIFx4NTUJKDEgMyAgNjcgKSAgIyA1NSDioaUgVSBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgVV0KK2NoYXIgXHg1NgkoMTIzICA2NyApICAjIDU2IOKhpyBWIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBWXQorY2hhciBceDU3CSgxMjMgNTY3ICkgICMgNTcg4qG3IFcgW0xBVElOIENBUElUQUwgTEVUVEVSIFddCitjaGFyIFx4NTgJKDEgMzQgNjcgKSAgIyA1OCDioa0gWCBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgWF0KK2NoYXIgXHg1OQkoMSAzNDU2NyApICAjIDU5IOKhvSBZIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBZXQorY2hhciBceDVBCSgxIDMgNTY3ICkgICMgNUEg4qG1IFogW0xBVElOIENBUElUQUwgTEVUVEVSIFpdCitjaGFyIFx4NUIJKCAyMyAgNjcgKSAgIyA1QiDioaYgWyBbTEVGVCBTUVVBUkUgQlJBQ0tFVF0KK2NoYXIgXHg1QwkoIDIzICA2IDgpICAjIDVDIOKipiBcIFtSRVZFUlNFIFNPTElEVVNdCitjaGFyIFx4NUQJKCAgMyA1NjcgKSAgIyA1RCDiobQgXSBbUklHSFQgU1FVQVJFIEJSQUNLRVRdCitjaGFyIFx4NUUJKCAgIDQ1IDcgKSAgIyA1RSDioZggXiBbQ0lSQ1VNRkxFWCBBQ0NFTlRdCitjaGFyIFx4NUYJKCAgMyAgNjcgKSAgIyA1RiDioaQgXyBbTE9XIExJTkVdCitjaGFyIFx4NjAJKCAgIDQgIDcgKSAgIyA2MCDioYggYCBbR1JBVkUgQUNDRU5UXQorY2hhciBceDYxCSgxICAgICAgICkgICMgNjEg4qCBIGEgW0xBVElOIFNNQUxMIExFVFRFUiBBXQorY2hhciBceDYyCSgxMiAgICAgICkgICMgNjIg4qCDIGIgW0xBVElOIFNNQUxMIExFVFRFUiBCXQorY2hhciBceDYzCSgxICA0ICAgICkgICMgNjMg4qCJIGMgW0xBVElOIFNNQUxMIExFVFRFUiBDXQorY2hhciBceDY0CSgxICA0NSAgICkgICMgNjQg4qCZIGQgW0xBVElOIFNNQUxMIExFVFRFUiBEXQorY2hhciBceDY1CSgxICAgNSAgICkgICMgNjUg4qCRIGUgW0xBVElOIFNNQUxMIExFVFRFUiBFXQorY2hhciBceDY2CSgxMiA0ICAgICkgICMgNjYg4qCLIGYgW0xBVElOIFNNQUxMIExFVFRFUiBGXQorY2hhciBceDY3CSgxMiA0NSAgICkgICMgNjcg4qCbIGcgW0xBVElOIFNNQUxMIExFVFRFUiBHXQorY2hhciBceDY4CSgxMiAgNSAgICkgICMgNjgg4qCTIGggW0xBVElOIFNNQUxMIExFVFRFUiBIXQorY2hhciBceDY5CSggMiA0ICAgICkgICMgNjkg4qCKIGkgW0xBVElOIFNNQUxMIExFVFRFUiBJXQorY2hhciBceDZBCSggMiA0NSAgICkgICMgNkEg4qCaIGogW0xBVElOIFNNQUxMIExFVFRFUiBKXQorY2hhciBceDZCCSgxIDMgICAgICkgICMgNkIg4qCFIGsgW0xBVElOIFNNQUxMIExFVFRFUiBLXQorY2hhciBceDZDCSgxMjMgICAgICkgICMgNkMg4qCHIGwgW0xBVElOIFNNQUxMIExFVFRFUiBMXQorY2hhciBceDZECSgxIDM0ICAgICkgICMgNkQg4qCNIG0gW0xBVElOIFNNQUxMIExFVFRFUiBNXQorY2hhciBceDZFCSgxIDM0NSAgICkgICMgNkUg4qCdIG4gW0xBVElOIFNNQUxMIExFVFRFUiBOXQorY2hhciBceDZGCSgxIDMgNSAgICkgICMgNkYg4qCVIG8gW0xBVElOIFNNQUxMIExFVFRFUiBPXQorY2hhciBceDcwCSgxMjM0ICAgICkgICMgNzAg4qCPIHAgW0xBVElOIFNNQUxMIExFVFRFUiBQXQorY2hhciBceDcxCSgxMjM0NSAgICkgICMgNzEg4qCfIHEgW0xBVElOIFNNQUxMIExFVFRFUiBRXQorY2hhciBceDcyCSgxMjMgNSAgICkgICMgNzIg4qCXIHIgW0xBVElOIFNNQUxMIExFVFRFUiBSXQorY2hhciBceDczCSggMjM0ICAgICkgICMgNzMg4qCOIHMgW0xBVElOIFNNQUxMIExFVFRFUiBTXQorY2hhciBceDc0CSggMjM0NSAgICkgICMgNzQg4qCeIHQgW0xBVElOIFNNQUxMIExFVFRFUiBUXQorY2hhciBceDc1CSgxIDMgIDYgICkgICMgNzUg4qClIHUgW0xBVElOIFNNQUxMIExFVFRFUiBVXQorY2hhciBceDc2CSgxMjMgIDYgICkgICMgNzYg4qCnIHYgW0xBVElOIFNNQUxMIExFVFRFUiBWXQorY2hhciBceDc3CSgxMjMgNTYgICkgICMgNzcg4qC3IHcgW0xBVElOIFNNQUxMIExFVFRFUiBXXQorY2hhciBceDc4CSgxIDM0IDYgICkgICMgNzgg4qCtIHggW0xBVElOIFNNQUxMIExFVFRFUiBYXQorY2hhciBceDc5CSgxIDM0NTYgICkgICMgNzkg4qC9IHkgW0xBVElOIFNNQUxMIExFVFRFUiBZXQorY2hhciBceDdBCSgxIDMgNTYgICkgICMgN0Eg4qC1IHogW0xBVElOIFNNQUxMIExFVFRFUiBaXQorY2hhciBceDdCCSggMjMgIDY3OCkgICMgN0Ig4qOmIHsgW0xFRlQgQ1VSTFkgQlJBQ0tFVF0KK2NoYXIgXHg3QwkoICAgNDU2ICApICAjIDdDIOKguCB8IFtWRVJUSUNBTCBMSU5FXQorY2hhciBceDdECSggIDMgNTY3OCkgICMgN0Qg4qO0IH0gW1JJR0hUIENVUkxZIEJSQUNLRVRdCitjaGFyIFx4N0UJKCAgICA1IDcgKSAgIyA3RSDioZAgfiBbVElMREVdCitjaGFyIFx4N0YJKCAyMzQgNjc4KSAgIyA3RiDio64gICBbREVMRVRFXQorY2hhciBcdTAxNjAJKDEgICA1NjcgKSAgIyBBOSDiobEgxaAgW0xBVElOIENBUElUQUwgTEVUVEVSIFMgV0lUSCBDQVJPTl0KK2NoYXIgXHUwMTY0CSgxMiAgNTY3ICkgICMgQUIg4qGzIMWkIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBUIFdJVEggQ0FST05dCitjaGFyIFx1MDE3RAkoIDIzNCA2NyApICAjIEFFIOKhriDFvSBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgWiBXSVRIIENBUk9OXQorY2hhciBcdTAxNjEJKDEgICA1NiAgKSAgIyBCOSDioLEgxaEgW0xBVElOIFNNQUxMIExFVFRFUiBTIFdJVEggQ0FST05dCitjaGFyIFx1MDE2NQkoMTIgIDU2ICApICAjIEJCIOKgsyDFpSBbTEFUSU4gU01BTEwgTEVUVEVSIFQgV0lUSCBDQVJPTl0KK2NoYXIgXHUwMTdFCSggMjM0IDYgICkgICMgQkUg4qCuIMW+IFtMQVRJTiBTTUFMTCBMRVRURVIgWiBXSVRIIENBUk9OXQorY2hhciBceEMxCSgxICAgIDY3ICkgICMgQzEg4qGhIMOBIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBBIFdJVEggQUNVVEVdCitjaGFyIFx4QzQJKCAgMzQ1IDc4KSAgIyBDNCDio5wgw4QgW0xBVElOIENBUElUQUwgTEVUVEVSIEEgV0lUSCBESUFFUkVTSVNdCitjaGFyIFx1MDEwQwkoMSAgNCA2NyApICAjIEM4IOKhqSDEjCBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgQyBXSVRIIENBUk9OXQorY2hhciBceEM5CSggIDM0NSA3ICkgICMgQzkg4qGcIMOJIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBFIFdJVEggQUNVVEVdCitjaGFyIFx1MDExQQkoMTIgICA2NyApICAjIENDIOKhoyDEmiBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgRSBXSVRIIENBUk9OXQorY2hhciBceENECSggIDM0ICA3ICkgICMgQ0Qg4qGMIMONIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBJIFdJVEggQUNVVEVdCitjaGFyIFx1MDEwRQkoMSAgNDU2NyApICAjIENGIOKhuSDEjiBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgRCBXSVRIIENBUk9OXQorY2hhciBcdTAxNDcJKDEyIDQgNjcgKSAgIyBEMiDioasgxYcgW0xBVElOIENBUElUQUwgTEVUVEVSIE4gV0lUSCBDQVJPTl0KK2NoYXIgXHhEMwkoIDIgNCA2NyApICAjIEQzIOKhqiDDkyBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgTyBXSVRIIEFDVVRFXQorY2hhciBceEQ2CSggMiA0IDY3OCkgICMgRDYg4qOqIMOWIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBPIFdJVEggRElBRVJFU0lTXQorY2hhciBcdTAxNTgJKCAyIDQ1NjcgKSAgIyBEOCDiobogxZggW0xBVElOIENBUElUQUwgTEVUVEVSIFIgV0lUSCBDQVJPTl0KK2NoYXIgXHUwMTZFCSggMjM0NTY3ICkgICMgRDkg4qG+IMWuIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBVIFdJVEggUklORyBBQk9WRV0KK2NoYXIgXHhEQQkoICAzNCA2NyApICAjIERBIOKhrCDDmiBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgVSBXSVRIIEFDVVRFXQorY2hhciBceERDCSgxMiAgNTY3OCkgICMgREMg4qOzIMOcIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBVIFdJVEggRElBRVJFU0lTXQorY2hhciBceERECSgxMjM0IDY3ICkgICMgREQg4qGvIMOdIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBZIFdJVEggQUNVVEVdCitjaGFyIFx4REYJKCAyMzQgNiA4KSAgIyBERiDioq4gw58gW0xBVElOIFNNQUxMIExFVFRFUiBTSEFSUCBTXQorY2hhciBceEUxCSgxICAgIDYgICkgICMgRTEg4qChIMOhIFtMQVRJTiBTTUFMTCBMRVRURVIgQSBXSVRIIEFDVVRFXQorY2hhciBceEU0CSggIDM0NSAgOCkgICMgRTQg4qKcIMOkIFtMQVRJTiBTTUFMTCBMRVRURVIgQSBXSVRIIERJQUVSRVNJU10KK2NoYXIgXHUwMTBECSgxICA0IDYgICkgICMgRTgg4qCpIMSNIFtMQVRJTiBTTUFMTCBMRVRURVIgQyBXSVRIIENBUk9OXQorY2hhciBceEU5CSggIDM0NSAgICkgICMgRTkg4qCcIMOpIFtMQVRJTiBTTUFMTCBMRVRURVIgRSBXSVRIIEFDVVRFXQorY2hhciBcdTAxMUIJKDEyICAgNiAgKSAgIyBFQyDioKMgxJsgW0xBVElOIFNNQUxMIExFVFRFUiBFIFdJVEggQ0FST05dCitjaGFyIFx4RUQJKCAgMzQgICAgKSAgIyBFRCDioIwgw60gW0xBVElOIFNNQUxMIExFVFRFUiBJIFdJVEggQUNVVEVdCitjaGFyIFx1MDEwRgkoMSAgNDU2ICApICAjIEVGIOKguSDEjyBbTEFUSU4gU01BTEwgTEVUVEVSIEQgV0lUSCBDQVJPTl0KK2NoYXIgXHUwMTQ4CSgxMiA0IDYgICkgICMgRjIg4qCrIMWIIFtMQVRJTiBTTUFMTCBMRVRURVIgTiBXSVRIIENBUk9OXQorY2hhciBceEYzCSggMiA0IDYgICkgICMgRjMg4qCqIMOzIFtMQVRJTiBTTUFMTCBMRVRURVIgTyBXSVRIIEFDVVRFXQorY2hhciBceEY2CSggMiA0IDYgOCkgICMgRjYg4qKqIMO2IFtMQVRJTiBTTUFMTCBMRVRURVIgTyBXSVRIIERJQUVSRVNJU10KK2NoYXIgXHUwMTU5CSggMiA0NTYgICkgICMgRjgg4qC6IMWZIFtMQVRJTiBTTUFMTCBMRVRURVIgUiBXSVRIIENBUk9OXQorY2hhciBcdTAxNkYJKCAyMzQ1NiAgKSAgIyBGOSDioL4gxa8gW0xBVElOIFNNQUxMIExFVFRFUiBVIFdJVEggUklORyBBQk9WRV0KK2NoYXIgXHhGQQkoICAzNCA2ICApICAjIEZBIOKgrCDDuiBbTEFUSU4gU01BTEwgTEVUVEVSIFUgV0lUSCBBQ1VURV0KK2NoYXIgXHhGQwkoMTIgIDU2IDgpICAjIEZDIOKisyDDvCBbTEFUSU4gU01BTEwgTEVUVEVSIFUgV0lUSCBESUFFUkVTSVNdCitjaGFyIFx4RkQJKDEyMzQgNiAgKSAgIyBGRCDioK8gw70gW0xBVElOIFNNQUxMIExFVFRFUiBZIFdJVEggQUNVVEVdCisKK2luY2x1ZGUgY29tbW9uLnR0aQpkaWZmIC0tZ2l0IGEvVGFibGVzL1RleHQvY3RsLWxhdGluLnR0aSBiL1RhYmxlcy9UZXh0L2N0bC1sYXRpbi50dGkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmRiNTVjNwotLS0gL2Rldi9udWxsCisrKyBiL1RhYmxlcy9UZXh0L2N0bC1sYXRpbi50dGkKQEAgLTAsMCArMSw0NyBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorIyAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyMKKyMgQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorIworIyBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorIworIyBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisjIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyMgbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisjCisjIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMgVGhpcyBCUkxUVFkgdGV4dCBzdWJ0YWJsZSBkZWZpbmVzIHRoZSBzdGFuZGFyZCBicmFpbGxlIHJlcHJlc2VudGF0aW9ucyBmb3IKKyMgdGhlIDI2IExhdGluIGNvbnRyb2wgY2hhcmFjdGVycy4KKworY2hhciBceDAxCSgxICAgICA3OCkgICMgMDEg4qOBICAgW1NUQVJUIE9GIEhFQURJTkddCitjaGFyIFx4MDIJKDEyICAgIDc4KSAgIyAwMiDio4MgICBbU1RBUlQgT0YgVEVYVF0KK2NoYXIgXHgwMwkoMSAgNCAgNzgpICAjIDAzIOKjiSAgIFtFTkQgT0YgVEVYVF0KK2NoYXIgXHgwNAkoMSAgNDUgNzgpICAjIDA0IOKjmSAgIFtFTkQgT0YgVFJBTlNNSVNTSU9OXQorY2hhciBceDA1CSgxICAgNSA3OCkgICMgMDUg4qORICAgW0VOUVVJUlldCitjaGFyIFx4MDYJKDEyIDQgIDc4KSAgIyAwNiDio4sgICBbQUNLTk9XTEVER0VdCitjaGFyIFx4MDcJKDEyIDQ1IDc4KSAgIyAwNyDio5sgICBbQkVMTF0KK2NoYXIgXHgwOAkoMTIgIDUgNzgpICAjIDA4IOKjkyAgIFtCQUNLU1BBQ0VdCitjaGFyIFx4MDkJKCAyIDQgIDc4KSAgIyAwOSDio4ogICBbQ0hBUkFDVEVSIFRBQlVMQVRJT05dCitjaGFyIFx4MEEJKCAyIDQ1IDc4KSAgIyAwQSDio5ogICBbTElORSBGRUVEIChMRildCitjaGFyIFx4MEIJKDEgMyAgIDc4KSAgIyAwQiDio4UgICBbTElORSBUQUJVTEFUSU9OXQorY2hhciBceDBDCSgxMjMgICA3OCkgICMgMEMg4qOHICAgW0ZPUk0gRkVFRCAoRkYpXQorY2hhciBceDBECSgxIDM0ICA3OCkgICMgMEQg4qONICAgW0NBUlJJQUdFIFJFVFVSTiAoQ1IpXQorY2hhciBceDBFCSgxIDM0NSA3OCkgICMgMEUg4qOdICAgW1NISUZUIE9VVF0KK2NoYXIgXHgwRgkoMSAzIDUgNzgpICAjIDBGIOKjlSAgIFtTSElGVCBJTl0KK2NoYXIgXHgxMAkoMTIzNCAgNzgpICAjIDEwIOKjjyAgIFtEQVRBIExJTksgRVNDQVBFXQorY2hhciBceDExCSgxMjM0NSA3OCkgICMgMTEg4qOfICAgW0RFVklDRSBDT05UUk9MIE9ORV0KK2NoYXIgXHgxMgkoMTIzIDUgNzgpICAjIDEyIOKjlyAgIFtERVZJQ0UgQ09OVFJPTCBUV09dCitjaGFyIFx4MTMJKCAyMzQgIDc4KSAgIyAxMyDio44gICBbREVWSUNFIENPTlRST0wgVEhSRUVdCitjaGFyIFx4MTQJKCAyMzQ1IDc4KSAgIyAxNCDio54gICBbREVWSUNFIENPTlRST0wgRk9VUl0KK2NoYXIgXHgxNQkoMSAzICA2NzgpICAjIDE1IOKjpSAgIFtORUdBVElWRSBBQ0tOT1dMRURHRV0KK2NoYXIgXHgxNgkoMTIzICA2NzgpICAjIDE2IOKjpyAgIFtTWU5DSFJPTk9VUyBJRExFXQorY2hhciBceDE3CSggMiA0NTY3OCkgICMgMTcg4qO6ICAgW0VORCBPRiBUUkFOU01JU1NJT04gQkxPQ0tdCitjaGFyIFx4MTgJKDEgMzQgNjc4KSAgIyAxOCDio60gICBbQ0FOQ0VMXQorY2hhciBceDE5CSgxIDM0NTY3OCkgICMgMTkg4qO9ICAgW0VORCBPRiBNRURJVU1dCitjaGFyIFx4MUEJKDEgMyA1Njc4KSAgIyAxQSDio7UgICBbU1VCU1RJVFVURV0KZGlmZiAtLWdpdCBhL1RhYmxlcy9UZXh0L2N5LnR0YiBiL1RhYmxlcy9UZXh0L2N5LnR0YgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NGRiYzg0Ci0tLSAvZGV2L251bGwKKysrIGIvVGFibGVzL1RleHQvY3kudHRiCkBAIC0wLDAgKzEsOTcgQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyMgICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisjCisjIENvcHlyaWdodCAoQykgMjAwOC0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyMKKyMgQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjIEJSTFRUWSBUZXh0IFRhYmxlIC0gV2Vsc2gKKworIyBNYWludGFpbmVkIGJ5IEpvaG4gSi4gQm95ZXIsIGRpcmVjdG9yQGNocGkub3JnLCB3d3cuY2hwaS5vcmcKKyMKKyMgVGhpcyB0YWJsZSBpcyBidWlsdCBhbmQgbWFpbnRhaW5lZCBieSBMZW9uIFVuZ2llciA8TGVvbi5VbmdpZXJAVmlld1BsdXMuY29tPgorIyB3aXRoIGhlbHAgYW5kIGd1aWRhbmNlIGZyb20gTW9oYW1tZWQgUi4gUmFtYWRhbiA8bXJhbWFkYW5AbmF0dGlxLmNvbT4KKyMKKyMgQ29udmVydGVkIGZyb20gbGlibG91aXMgdGFibGUgYnkgU2FtdWVsIFRoaWJhdWx0IDxzYW11ZWwudGhpYmF1bHRAZW5zLWx5b24ub3JnPgorCisjIGdlbmVyYXRlZCBieSB0dGJ0ZXN0OiBjaGFyc2V0PWlzby04ODU5LTE0CitpbmNsdWRlIGx0ci1sYXRpbi50dGkKKworY2hhciBceDJFCSggMiAgICAgICkgICMgMkUg4qCCIC4gW0ZVTEwgU1RPUF0KK2NoYXIgXHgzMAkoIDIgNDUgICApICAjIDMwIOKgmiAwIFtESUdJVCBaRVJPXQorY2hhciBceDMxCSgxICAgICAgICkgICMgMzEg4qCBIDEgW0RJR0lUIE9ORV0KK2NoYXIgXHgzMgkoMTIgICAgICApICAjIDMyIOKggyAyIFtESUdJVCBUV09dCitjaGFyIFx4MzMJKDEgIDQgICAgKSAgIyAzMyDioIkgMyBbRElHSVQgVEhSRUVdCitjaGFyIFx4MzQJKDEgIDQ1ICAgKSAgIyAzNCDioJkgNCBbRElHSVQgRk9VUl0KK2NoYXIgXHgzNQkoMSAgIDUgICApICAjIDM1IOKgkSA1IFtESUdJVCBGSVZFXQorY2hhciBceDM2CSgxMiA0ICAgICkgICMgMzYg4qCLIDYgW0RJR0lUIFNJWF0KK2NoYXIgXHgzNwkoMTIgNDUgICApICAjIDM3IOKgmyA3IFtESUdJVCBTRVZFTl0KK2NoYXIgXHgzOAkoMTIgIDUgICApICAjIDM4IOKgkyA4IFtESUdJVCBFSUdIVF0KK2NoYXIgXHgzOQkoIDIgNCAgICApICAjIDM5IOKgiiA5IFtESUdJVCBOSU5FXQorY2hhciBcdTFFRjIJKDEgMzQ1NiAgKSAgIyBBQyDioL0g4buyIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBZIFdJVEggR1JBVkVdCitjaGFyIFx1MDE3OAkoMSAzNDU2ICApICAjIEFGIOKgvSDFuCBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgWSBXSVRIIERJQUVSRVNJU10KK2NoYXIgXHUxRUYzCSgxIDM0NTYgICkgICMgQkMg4qC9IOG7syBbTEFUSU4gU01BTEwgTEVUVEVSIFkgV0lUSCBHUkFWRV0KK2NoYXIgXHhDMAkoMSAgICAgICApICAjIEMwIOKggSDDgCBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgQSBXSVRIIEdSQVZFXQorY2hhciBceEMxCSgxICAgICAgICkgICMgQzEg4qCBIMOBIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBBIFdJVEggQUNVVEVdCitjaGFyIFx4QzIJKDEgICAgICAgKSAgIyBDMiDioIEgw4IgW0xBVElOIENBUElUQUwgTEVUVEVSIEEgV0lUSCBDSVJDVU1GTEVYXQorY2hhciBceEM0CSgxICAgICAgICkgICMgQzQg4qCBIMOEIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBBIFdJVEggRElBRVJFU0lTXQorY2hhciBceEM2CSgxICAgICAgICkgICMgQzYg4qCBIMOGIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBBRV0KK2NoYXIgXHhDOAkoMSAgIDUgICApICAjIEM4IOKgkSDDiCBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgRSBXSVRIIEdSQVZFXQorY2hhciBceEM5CSgxICAgNSAgICkgICMgQzkg4qCRIMOJIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBFIFdJVEggQUNVVEVdCitjaGFyIFx4Q0EJKDEgICA1ICAgKSAgIyBDQSDioJEgw4ogW0xBVElOIENBUElUQUwgTEVUVEVSIEUgV0lUSCBDSVJDVU1GTEVYXQorY2hhciBceENCCSgxICAgNSAgICkgICMgQ0Ig4qCRIMOLIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBFIFdJVEggRElBRVJFU0lTXQorY2hhciBceENDCSggMiA0ICAgICkgICMgQ0Mg4qCKIMOMIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBJIFdJVEggR1JBVkVdCitjaGFyIFx4Q0QJKCAyIDQgICAgKSAgIyBDRCDioIogw40gW0xBVElOIENBUElUQUwgTEVUVEVSIEkgV0lUSCBBQ1VURV0KK2NoYXIgXHhDRQkoIDIgNCAgICApICAjIENFIOKgiiDDjiBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgSSBXSVRIIENJUkNVTUZMRVhdCitjaGFyIFx4Q0YJKCAyIDQgICAgKSAgIyBDRiDioIogw48gW0xBVElOIENBUElUQUwgTEVUVEVSIEkgV0lUSCBESUFFUkVTSVNdCitjaGFyIFx1MDE3NAkoIDIgNDU2ICApICAjIEQwIOKguiDFtCBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgVyBXSVRIIENJUkNVTUZMRVhdCitjaGFyIFx4RDIJKDEgMyA1ICAgKSAgIyBEMiDioJUgw5IgW0xBVElOIENBUElUQUwgTEVUVEVSIE8gV0lUSCBHUkFWRV0KK2NoYXIgXHhEMwkoMSAzIDUgICApICAjIEQzIOKglSDDkyBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgTyBXSVRIIEFDVVRFXQorY2hhciBceEQ0CSgxIDMgNSAgICkgICMgRDQg4qCVIMOUIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBPIFdJVEggQ0lSQ1VNRkxFWF0KK2NoYXIgXHhENgkoMSAzIDUgICApICAjIEQ2IOKglSDDliBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgTyBXSVRIIERJQUVSRVNJU10KK2NoYXIgXHhEOQkoMSAzICA2ICApICAjIEQ5IOKgpSDDmSBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgVSBXSVRIIEdSQVZFXQorY2hhciBceERBCSgxIDMgIDYgICkgICMgREEg4qClIMOaIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBVIFdJVEggQUNVVEVdCitjaGFyIFx4REIJKDEgMyAgNiAgKSAgIyBEQiDioKUgw5sgW0xBVElOIENBUElUQUwgTEVUVEVSIFUgV0lUSCBDSVJDVU1GTEVYXQorY2hhciBceERDCSgxIDMgIDYgICkgICMgREMg4qClIMOcIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBVIFdJVEggRElBRVJFU0lTXQorY2hhciBceERECSgxIDM0NTYgICkgICMgREQg4qC9IMOdIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBZIFdJVEggQUNVVEVdCitjaGFyIFx1MDE3NgkoMSAzNDU2ICApICAjIERFIOKgvSDFtiBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgWSBXSVRIIENJUkNVTUZMRVhdCitjaGFyIFx4REYJKCAyMzQgNiAgKSAgIyBERiDioK4gw58gW0xBVElOIFNNQUxMIExFVFRFUiBTSEFSUCBTXQorY2hhciBceEUwCSgxICAgICAgICkgICMgRTAg4qCBIMOgIFtMQVRJTiBTTUFMTCBMRVRURVIgQSBXSVRIIEdSQVZFXQorY2hhciBceEUxCSgxICAgICAgICkgICMgRTEg4qCBIMOhIFtMQVRJTiBTTUFMTCBMRVRURVIgQSBXSVRIIEFDVVRFXQorY2hhciBceEUyCSgxICAgICAgICkgICMgRTIg4qCBIMOiIFtMQVRJTiBTTUFMTCBMRVRURVIgQSBXSVRIIENJUkNVTUZMRVhdCitjaGFyIFx4RTQJKDEgICAgICAgKSAgIyBFNCDioIEgw6QgW0xBVElOIFNNQUxMIExFVFRFUiBBIFdJVEggRElBRVJFU0lTXQorY2hhciBceEU2CSgxICAgICAgICkgICMgRTYg4qCBIMOmIFtMQVRJTiBTTUFMTCBMRVRURVIgQUVdCitjaGFyIFx4RTgJKDEgICA1ICAgKSAgIyBFOCDioJEgw6ggW0xBVElOIFNNQUxMIExFVFRFUiBFIFdJVEggR1JBVkVdCitjaGFyIFx4RTkJKDEgICA1ICAgKSAgIyBFOSDioJEgw6kgW0xBVElOIFNNQUxMIExFVFRFUiBFIFdJVEggQUNVVEVdCitjaGFyIFx4RUEJKDEgICA1ICAgKSAgIyBFQSDioJEgw6ogW0xBVElOIFNNQUxMIExFVFRFUiBFIFdJVEggQ0lSQ1VNRkxFWF0KK2NoYXIgXHhFQgkoMSAgIDUgICApICAjIEVCIOKgkSDDqyBbTEFUSU4gU01BTEwgTEVUVEVSIEUgV0lUSCBESUFFUkVTSVNdCitjaGFyIFx4RUMJKCAyIDQgICAgKSAgIyBFQyDioIogw6wgW0xBVElOIFNNQUxMIExFVFRFUiBJIFdJVEggR1JBVkVdCitjaGFyIFx4RUQJKCAyIDQgICAgKSAgIyBFRCDioIogw60gW0xBVElOIFNNQUxMIExFVFRFUiBJIFdJVEggQUNVVEVdCitjaGFyIFx4RUUJKCAyIDQgICAgKSAgIyBFRSDioIogw64gW0xBVElOIFNNQUxMIExFVFRFUiBJIFdJVEggQ0lSQ1VNRkxFWF0KK2NoYXIgXHhFRgkoIDIgNCAgICApICAjIEVGIOKgiiDDryBbTEFUSU4gU01BTEwgTEVUVEVSIEkgV0lUSCBESUFFUkVTSVNdCitjaGFyIFx1MDE3NQkoIDIgNDU2ICApICAjIEYwIOKguiDFtSBbTEFUSU4gU01BTEwgTEVUVEVSIFcgV0lUSCBDSVJDVU1GTEVYXQorY2hhciBceEYyCSgxIDMgNSAgICkgICMgRjIg4qCVIMOyIFtMQVRJTiBTTUFMTCBMRVRURVIgTyBXSVRIIEdSQVZFXQorY2hhciBceEYzCSgxIDMgNSAgICkgICMgRjMg4qCVIMOzIFtMQVRJTiBTTUFMTCBMRVRURVIgTyBXSVRIIEFDVVRFXQorY2hhciBceEY0CSgxIDMgNSAgICkgICMgRjQg4qCVIMO0IFtMQVRJTiBTTUFMTCBMRVRURVIgTyBXSVRIIENJUkNVTUZMRVhdCitjaGFyIFx4RjYJKDEgMyA1ICAgKSAgIyBGNiDioJUgw7YgW0xBVElOIFNNQUxMIExFVFRFUiBPIFdJVEggRElBRVJFU0lTXQorY2hhciBceEY5CSgxIDMgIDYgICkgICMgRjkg4qClIMO5IFtMQVRJTiBTTUFMTCBMRVRURVIgVSBXSVRIIEdSQVZFXQorY2hhciBceEZBCSgxIDMgIDYgICkgICMgRkEg4qClIMO6IFtMQVRJTiBTTUFMTCBMRVRURVIgVSBXSVRIIEFDVVRFXQorY2hhciBceEZCCSgxIDMgIDYgICkgICMgRkIg4qClIMO7IFtMQVRJTiBTTUFMTCBMRVRURVIgVSBXSVRIIENJUkNVTUZMRVhdCitjaGFyIFx4RkMJKDEgMyAgNiAgKSAgIyBGQyDioKUgw7wgW0xBVElOIFNNQUxMIExFVFRFUiBVIFdJVEggRElBRVJFU0lTXQorY2hhciBceEZECSgxIDM0NTYgICkgICMgRkQg4qC9IMO9IFtMQVRJTiBTTUFMTCBMRVRURVIgWSBXSVRIIEFDVVRFXQorY2hhciBcdTAxNzcJKDEgMzQ1NiAgKSAgIyBGRSDioL0gxbcgW0xBVElOIFNNQUxMIExFVFRFUiBZIFdJVEggQ0lSQ1VNRkxFWF0KK2NoYXIgXHhGRgkoMSAzNDU2ICApICAjIEZGIOKgvSDDvyBbTEFUSU4gU01BTEwgTEVUVEVSIFkgV0lUSCBESUFFUkVTSVNdCitjaGFyIFx1MjAxMQkoIDIzNCAgNzgpICAjICAgIOKjjiDigJEgW05PTi1CUkVBS0lORyBIWVBIRU5dCisKK2luY2x1ZGUgY29tbW9uLnR0aQpkaWZmIC0tZ2l0IGEvVGFibGVzL1RleHQvZGEtMTI1Mi50dGIgYi9UYWJsZXMvVGV4dC9kYS0xMjUyLnR0YgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ODcxOWQ3Ci0tLSAvZGV2L251bGwKKysrIGIvVGFibGVzL1RleHQvZGEtMTI1Mi50dGIKQEAgLTAsMCArMSwyMjYgQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyMgICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisjCisjIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyMKKyMgQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjIEJSTFRUWSBUZXh0IFRhYmxlIC0gRGFuaXNoIChTdmVuZCBUaG91Z2FhcmQsIDIwMDItMTEtMTgpCisKKyMgVGhpcyBpcyB0aGUgc3RhbmRhcmQgdGFibGUgZGVmaW5lZCBieSBTdmVuZCBUaG91Z2FhcmQgWzIwMDItMTEtMThdLiBJdCBpcworIyBwcmltYXJpbHkgZGVmaW5lZCBmb3IgdXNlIHdpdGggdGhlIFdpbmRvd3MtMTI1MiBjaGFyYWN0ZXIgdGFibGUuIEl0IGlzIG9ubHkKKyMgaW4gdGhlIEJSTFRUWSBwYWNrYWdlIGZvciByZWZlcmVuY2UgYXMgbW9zdCBvZiB0aGUgY29udHJvbCBjaGFyYWN0ZXJzIGhhdmUKKyMgYmVlbiBtYXBwZWQgdG8gdW51c3VhbCBicmFpbGxlIHBhdHRlcm5zLiBUaGUgbGVmdCBicmFjZSAoeykgYW5kIHBlcmNlbnQgc2lnbgorIyAoJSkgZG9uJ3QgaGF2ZSBsb2dpY2FsIHJlcHJlc2VudGF0aW9ucy4KKworIyB0aGUgc3RhbmRhcmQgcmVwcmVzZW50YXRpb25zIGZvciB0aGUgbGV0dGVycyBvZiB0aGUgTGF0aW4gYWxwaGFiZXQKK2luY2x1ZGUgbHRyLWxhdGluLnR0aQorCisjIHRoZSBudW1iZXJzIDAtOSBhcmUgcmVwcmVzZW50ZWQgYnkgdGhlIGxldHRlcnMgaixhLWkgd2l0aCBkb3QgOCBhZGRlZAoraW5jbHVkZSBudW0tZG90OC50dGkKKworIyBnZW5lcmF0ZWQgYnkgdHRidGVzdDogY2hhcnNldD1jcDEyNTIKK2NoYXIgXHgwMAkoICAgICAgIDgpICAjIDAwIOKigCAgIFtOVUxMXQorY2hhciBceDAxCSgxICAgICA3OCkgICMgMDEg4qOBICAgW1NUQVJUIE9GIEhFQURJTkddCitjaGFyIFx4MDIJKDEyICAgIDc4KSAgIyAwMiDio4MgICBbU1RBUlQgT0YgVEVYVF0KK2NoYXIgXHgwMwkoMSAgNCAgNzgpICAjIDAzIOKjiSAgIFtFTkQgT0YgVEVYVF0KK2NoYXIgXHgwNAkoMSAgNDUgNzgpICAjIDA0IOKjmSAgIFtFTkQgT0YgVFJBTlNNSVNTSU9OXQorY2hhciBceDA1CSggMiA0NTYgOCkgICMgMDUg4qK6ICAgW0VOUVVJUlldCitjaGFyIFx4MDYJKDEyIDQgIDc4KSAgIyAwNiDio4sgICBbQUNLTk9XTEVER0VdCitjaGFyIFx4MDcJKDEyIDQ1IDc4KSAgIyAwNyDio5sgICBbQkVMTF0KK2NoYXIgXHgwOAkoMTIgIDUgNzgpICAjIDA4IOKjkyAgIFtCQUNLU1BBQ0VdCitjaGFyIFx4MDkJKCAyIDQgIDc4KSAgIyAwOSDio4ogICBbQ0hBUkFDVEVSIFRBQlVMQVRJT05dCitjaGFyIFx4MEEJKCAgICAgNjc4KSAgIyAwQSDio6AgICBbTElORSBGRUVEIChMRildCitjaGFyIFx4MEIJKDEgMyAgNiA4KSAgIyAwQiDioqUgICBbTElORSBUQUJVTEFUSU9OXQorY2hhciBceDBDCSgxMjMgICA3OCkgICMgMEMg4qOHICAgW0ZPUk0gRkVFRCAoRkYpXQorY2hhciBceDBECSggMiAgNSA3ICkgICMgMEQg4qGSICAgW0NBUlJJQUdFIFJFVFVSTiAoQ1IpXQorY2hhciBceDBFCSgxIDM0NSA3OCkgICMgMEUg4qOdICAgW1NISUZUIE9VVF0KK2NoYXIgXHgwRgkoMTIzIDUgIDgpICAjIDBGIOKilyAgIFtTSElGVCBJTl0KK2NoYXIgXHgxMAkoMTIzNCAgNzgpICAjIDEwIOKjjyAgIFtEQVRBIExJTksgRVNDQVBFXQorY2hhciBceDExCSgxMjM0NSA3OCkgICMgMTEg4qOfICAgW0RFVklDRSBDT05UUk9MIE9ORV0KK2NoYXIgXHgxMgkoMSAzIDU2IDgpICAjIDEyIOKitSAgIFtERVZJQ0UgQ09OVFJPTCBUV09dCitjaGFyIFx4MTMJKCAgIDQ1IDc4KSAgIyAxMyDio5ggICBbREVWSUNFIENPTlRST0wgVEhSRUVdCitjaGFyIFx4MTQJKCAyICAgNiA4KSAgIyAxNCDioqIgICBbREVWSUNFIENPTlRST0wgRk9VUl0KK2NoYXIgXHgxNQkoMSAzICA2NzgpICAjIDE1IOKjpSAgIFtORUdBVElWRSBBQ0tOT1dMRURHRV0KK2NoYXIgXHgxNgkoIDIgICAgNzgpICAjIDE2IOKjgiAgIFtTWU5DSFJPTk9VUyBJRExFXQorY2hhciBceDE3CSggIDMgNSA3OCkgICMgMTcg4qOUICAgW0VORCBPRiBUUkFOU01JU1NJT04gQkxPQ0tdCitjaGFyIFx4MTgJKCAgICAgIDc4KSAgIyAxOCDio4AgICBbQ0FOQ0VMXQorY2hhciBceDE5CSggICAgIDYgOCkgICMgMTkg4qKgICAgW0VORCBPRiBNRURJVU1dCitjaGFyIFx4MUEJKDEgMyA1Njc4KSAgIyAxQSDio7UgICBbU1VCU1RJVFVURV0KK2NoYXIgXHgxQgkoIDIgICA2NzgpICAjIDFCIOKjoiAgIFtFU0NBUEVdCitjaGFyIFx4MUMJKCAgIDQ1Njc4KSAgIyAxQyDio7ggICBbSU5GT1JNQVRJT04gU0VQQVJBVE9SIEZPVVJdCitjaGFyIFx4MUQJKDEyMyAgNiA4KSAgIyAxRCDioqcgICBbSU5GT1JNQVRJT04gU0VQQVJBVE9SIFRIUkVFXQorY2hhciBceDFFCSgxMjM0IDY3OCkgICMgMUUg4qOvICAgW0lORk9STUFUSU9OIFNFUEFSQVRPUiBUV09dCitjaGFyIFx4MUYJKCAyMyA1Njc4KSAgIyAxRiDio7YgICBbSU5GT1JNQVRJT04gU0VQQVJBVE9SIE9ORV0KK2NoYXIgXHgyMAkoICAgICAgICApICAjIDIwIOKggCAgIFtTUEFDRV0KK2NoYXIgXHgyMQkoIDIzIDUgICApICAjIDIxIOKgliAhIFtFWENMQU1BVElPTiBNQVJLXQorY2hhciBceDIyCSggMjMgNTYgICkgICMgMjIg4qC2ICIgW1FVT1RBVElPTiBNQVJLXQorY2hhciBceDIzCSggIDM0NTYgOCkgICMgMjMg4qK8ICMgW05VTUJFUiBTSUdOXQorY2hhciBceDI0CSggMiAgNTY3OCkgICMgMjQg4qOyICQgW0RPTExBUiBTSUdOXQorY2hhciBceDI1CSggMiA0NSA3OCkgICMgMjUg4qOaICUgW1BFUkNFTlQgU0lHTl0KK2NoYXIgXHgyNgkoMTIzNCA2IDgpICAjIDI2IOKiryAmIFtBTVBFUlNBTkRdCitjaGFyIFx4MjcJKCAgIDQgICAgKSAgIyAyNyDioIggJyBbQVBPU1RST1BIRV0KK2NoYXIgXHgyOAkoIDIzICA2IDgpICAjIDI4IOKipiAoIFtMRUZUIFBBUkVOVEhFU0lTXQorY2hhciBceDI5CSggIDMgNTYgOCkgICMgMjkg4qK0ICkgW1JJR0hUIFBBUkVOVEhFU0lTXQorY2hhciBceDJBCSggIDMgNSAgICkgICMgMkEg4qCUICogW0FTVEVSSVNLXQorY2hhciBceDJCCSggMjMgNSAgOCkgICMgMkIg4qKWICsgW1BMVVMgU0lHTl0KK2NoYXIgXHgyQwkoIDIgICAgICApICAjIDJDIOKggiAsIFtDT01NQV0KK2NoYXIgXHgyRAkoICAzICA2IDgpICAjIDJEIOKipCAtIFtIWVBIRU4tTUlOVVNdCitjaGFyIFx4MkUJKCAgMyAgICAgKSAgIyAyRSDioIQgLiBbRlVMTCBTVE9QXQorY2hhciBceDJGCSggIDM0ICAgOCkgICMgMkYg4qKMIC8gW1NPTElEVVNdCisjIEhpbmR1LUFyYWJpYyBudW1lcmFscyAgICAgIyAzMC0zOQorY2hhciBceDNBCSggMiAgNSAgICkgICMgM0Eg4qCSIDogW0NPTE9OXQorY2hhciBceDNCCSggMjMgICAgICkgICMgM0Ig4qCGIDsgW1NFTUlDT0xPTl0KK2NoYXIgXHgzQwkoICAzIDUgIDgpICAjIDNDIOKilCA8IFtMRVNTLVRIQU4gU0lHTl0KK2NoYXIgXHgzRAkoIDIzIDU2IDgpICAjIDNEIOKitiA9IFtFUVVBTFMgU0lHTl0KK2NoYXIgXHgzRQkoIDIgICA2NyApICAjIDNFIOKhoiA+IFtHUkVBVEVSLVRIQU4gU0lHTl0KK2NoYXIgXHgzRgkoIDIgICA2ICApICAjIDNGIOKgoiA/IFtRVUVTVElPTiBNQVJLXQorY2hhciBceDQwCSggICA0ICA3OCkgICMgNDAg4qOIIEAgW0NPTU1FUkNJQUwgQVRdCisjIHVwcGVyY2FzZSBMYXRpbiBhbHBoYWJldCAgIyA0MS01QQorY2hhciBceDVCCSggMjMgIDY3OCkgICMgNUIg4qOmIFsgW0xFRlQgU1FVQVJFIEJSQUNLRVRdCitjaGFyIFx4NUMJKCAgMzQgIDcgKSAgIyA1QyDioYwgXCBbUkVWRVJTRSBTT0xJRFVTXQorY2hhciBceDVECSggIDMgNTY3OCkgICMgNUQg4qO0IF0gW1JJR0hUIFNRVUFSRSBCUkFDS0VUXQorY2hhciBceDVFCSgxMjM0ICAgOCkgICMgNUUg4qKPIF4gW0NJUkNVTUZMRVggQUNDRU5UXQorY2hhciBceDVGCSggIDMgIDY3OCkgICMgNUYg4qOkIF8gW0xPVyBMSU5FXQorY2hhciBceDYwCSggICAgNSAgICkgICMgNjAg4qCQIGAgW0dSQVZFIEFDQ0VOVF0KKyMgbG93ZXJjYXNlIExhdGluIGFscGhhYmV0ICAjIDYxLTdBCitjaGFyIFx4N0IJKDEyMyAgNjc4KSAgIyA3QiDio6cgeyBbTEVGVCBDVVJMWSBCUkFDS0VUXQorY2hhciBceDdDCSggICA0NTYgOCkgICMgN0Mg4qK4IHwgW1ZFUlRJQ0FMIExJTkVdCitjaGFyIFx4N0QJKCAgMzQ1Njc4KSAgIyA3RCDio7wgfSBbUklHSFQgQ1VSTFkgQlJBQ0tFVF0KK2NoYXIgXHg3RQkoICAgNCA2NyApICAjIDdFIOKhqCB+IFtUSUxERV0KK2NoYXIgXHg3RgkoMTIzNDU2NzgpICAjIDdGIOKjvyAgIFtERUxFVEVdCitjaGFyIFx1MjBBQwkoMSAgIDUgNzgpICAjIDgwIOKjkSDigqwgW0VVUk8gU0lHTl0KK2NoYXIgXHUyMDFBCSggICA0NSA3ICkgICMgODIg4qGYIOKAmiBbU0lOR0xFIExPVy05IFFVT1RBVElPTiBNQVJLXQorY2hhciBcdTAxOTIJKCAgICA1ICA4KSAgIyA4MyDiopAgxpIgW0xBVElOIFNNQUxMIExFVFRFUiBGIFdJVEggSE9PS10KK2NoYXIgXHUyMDFFCSggMjMgICA3OCkgICMgODQg4qOGIOKAniBbRE9VQkxFIExPVy05IFFVT1RBVElPTiBNQVJLXQorY2hhciBcdTIwMjYJKCAgICAgNiAgKSAgIyA4NSDioKAg4oCmIFtIT1JJWk9OVEFMIEVMTElQU0lTXQorY2hhciBcdTIwMjAJKCAyMyA1IDcgKSAgIyA4NiDioZYg4oCgIFtEQUdHRVJdCitjaGFyIFx1MjAyMQkoIDIzIDUgNzgpICAjIDg3IOKjliDigKEgW0RPVUJMRSBEQUdHRVJdCitjaGFyIFx1MDJDNgkoICAgIDU2NzgpICAjIDg4IOKjsCDLhiBbTU9ESUZJRVIgTEVUVEVSIENJUkNVTUZMRVggQUNDRU5UXQorY2hhciBcdTIwMzAJKCAyIDQ1Njc4KSAgIyA4OSDio7og4oCwIFtQRVIgTUlMTEUgU0lHTl0KK2NoYXIgXHUwMTYwCSggMjM0ICA3OCkgICMgOEEg4qOOIMWgIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBTIFdJVEggQ0FST05dCitjaGFyIFx1MjAzOQkoICAgNDU2ICApICAjIDhCIOKguCDigLkgW1NJTkdMRSBMRUZULVBPSU5USU5HIEFOR0xFIFFVT1RBVElPTiBNQVJLXQorY2hhciBcdTAxNTIJKDEgMyA1IDc4KSAgIyA4QyDio5UgxZIgW0xBVElOIENBUElUQUwgTElHQVRVUkUgT0VdCitjaGFyIFx1MDE3RAkoICAzNCA2NyApICAjIDhFIOKhrCDFvSBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgWiBXSVRIIENBUk9OXQorY2hhciBcdTIwMTgJKCAgIDQgIDcgKSAgIyA5MSDioYgg4oCYIFtMRUZUIFNJTkdMRSBRVU9UQVRJT04gTUFSS10KK2NoYXIgXHUyMDE5CSggICA0ICAgOCkgICMgOTIg4qKIIOKAmSBbUklHSFQgU0lOR0xFIFFVT1RBVElPTiBNQVJLXQorY2hhciBcdTIwMUMJKCAyMyAgIDcgKSAgIyA5MyDioYYg4oCcIFtMRUZUIERPVUJMRSBRVU9UQVRJT04gTUFSS10KK2NoYXIgXHUyMDFECSggICAgNTYgOCkgICMgOTQg4qKwIOKAnSBbUklHSFQgRE9VQkxFIFFVT1RBVElPTiBNQVJLXQorY2hhciBcdTIwMjIJKCAgMyAgIDcgKSAgIyA5NSDioYQg4oCiIFtCVUxMRVRdCitjaGFyIFx1MjAxMwkoICAzICA2ICApICAjIDk2IOKgpCDigJMgW0VOIERBU0hdCitjaGFyIFx1MjAxNAkoICAzICA2NyApICAjIDk3IOKhpCDigJQgW0VNIERBU0hdCitjaGFyIFx1MDJEQwkoICAgNCA2ICApICAjIDk4IOKgqCDLnCBbU01BTEwgVElMREVdCitjaGFyIFx1MjEyMgkoIDIzNDUgNzgpICAjIDk5IOKjniDihKIgW1RSQURFIE1BUksgU0lHTl0KK2NoYXIgXHUwMTYxCSggMjM0ICAgOCkgICMgOUEg4qKOIMWhIFtMQVRJTiBTTUFMTCBMRVRURVIgUyBXSVRIIENBUk9OXQorY2hhciBcdTIwM0EJKCAgIDQ1NjcgKSAgIyA5QiDiobgg4oC6IFtTSU5HTEUgUklHSFQtUE9JTlRJTkcgQU5HTEUgUVVPVEFUSU9OIE1BUktdCitjaGFyIFx1MDE1MwkoMSAzIDUgIDgpICAjIDlDIOKilSDFkyBbTEFUSU4gU01BTEwgTElHQVRVUkUgT0VdCitjaGFyIFx1MDE3RQkoICAzNCA2ICApICAjIDlFIOKgrCDFviBbTEFUSU4gU01BTEwgTEVUVEVSIFogV0lUSCBDQVJPTl0KK2NoYXIgXHUwMTc4CSggMjM0NTY3OCkgICMgOUYg4qO+IMW4IFtMQVRJTiBDQVBJVEFMIExFVFRFUiBZIFdJVEggRElBRVJFU0lTXQorY2hhciBceEExCSggMiAgNTYgICkgICMgQTEg4qCyIMKhIFtJTlZFUlRFRCBFWENMQU1BVElPTiBNQVJLXQorY2hhciBceEEyCSggMiAgNSA3OCkgICMgQTIg4qOSIMKiIFtDRU5UIFNJR05dCitjaGFyIFx4QTMJKDEyMyAgICA4KSAgIyBBMyDioocgwqMgW1BPVU5EIFNJR05dCitjaGFyIFx4QTQJKCAyMyAgNjcgKSAgIyBBNCDioaYgwqQgW0NVUlJFTkNZIFNJR05dCitjaGFyIFx4QTUJKCAgICAgNjcgKSAgIyBBNSDioaAgwqUgW1lFTiBTSUdOXQorY2hhciBceEE2CSggIDM0ICA3OCkgICMgQTYg4qOMIMKmIFtCUk9LRU4gQkFSXQorY2hhciBceEE3CSggICAgNSA3OCkgICMgQTcg4qOQIMKnIFtTRUNUSU9OIFNJR05dCitjaGFyIFx4QTgJKCAgICA1NiAgKSAgIyBBOCDioLAgwqggW0RJQUVSRVNJU10KK2NoYXIgXHhBOQkoMSAzNCA2NzgpICAjIEE5IOKjrSDCqSBbQ09QWVJJR0hUIFNJR05dCitjaGFyIFx4QUEJKCAyMzQgNjc4KSAgIyBBQSDio64gwqogW0ZFTUlOSU5FIE9SRElOQUwgSU5ESUNBVE9SXQorY2hhciBceEFCCSggICAgNSA3ICkgICMgQUIg4qGQIMKrIFtMRUZULVBPSU5USU5HIERPVUJMRSBBTkdMRSBRVU9UQVRJT04gTUFSS10KK2NoYXIgXHhBQwkoICAzNDU2NyApICAjIEFDIOKhvCDCrCBbTk9UIFNJR05dCitjaGFyIFx4QUQJKCAgMyAgIDc4KSAgIyBBRCDio4Qgwq0gW1NPRlQgSFlQSEVOXQorY2hhciBceEFFCSgxMjMgNSA3OCkgICMgQUUg4qOXIMKuIFtSRUdJU1RFUkVEIFNJR05dCitjaGFyIFx4QUYJKCAyMyA1NjcgKSAgIyBBRiDiobYgwq8gW01BQ1JPTl0KK2NoYXIgXHhCMAkoICAzIDU2ICApICAjIEIwIOKgtCDCsCBbREVHUkVFIFNJR05dCitjaGFyIFx4QjEJKDEyMzQ1ICA4KSAgIyBCMSDiop8gwrEgW1BMVVMtTUlOVVMgU0lHTl0KK2NoYXIgXHhCMgkoIDIzICAgIDgpICAjIEIyIOKihiDCsiBbU1VQRVJTQ1JJUFQgVFdPXQorY2hhciBceEIzCSggMiAgNSAgOCkgICMgQjMg4qKSIMKzIFtTVVBFUlNDUklQVCBUSFJFRV0KK2NoYXIgXHhCNAkoICAgNCA2IDgpICAjIEI0IOKiqCDCtCBbQUNVVEUgQUNDRU5UXQorY2hhciBceEI1CSggMjMgIDYgICkgICMgQjUg4qCmIMK1IFtNSUNSTyBTSUdOXQorY2hhciBceEI2CSgxMjM0NTYgOCkgICMgQjYg4qK/IMK2IFtQSUxDUk9XIFNJR05dCitjaGFyIFx4QjcJKCAgMyAgICA4KSAgIyBCNyDiooQgwrcgW01JRERMRSBET1RdCitjaGFyIFx4QjgJKCAgIDQgNjc4KSAgIyBCOCDio6ggwrggW0NFRElMTEFdCitjaGFyIFx4QjkJKCAyICAgICA4KSAgIyBCOSDiooIgwrkgW1NVUEVSU0NSSVBUIE9ORV0KK2NoYXIgXHhCQQkoICAgICAgNyApICAjIEJBIOKhgCDCuiBbTUFTQ1VMSU5FIE9SRElOQUwgSU5ESUNBVE9SXQorY2hhciBceEJCCSggICAgNTY3ICkgICMgQkIg4qGwIMK7IFtSSUdIVC1QT0lOVElORyBET1VCTEUgQU5HTEUgUVVPVEFUSU9OIE1BUktdCitjaGFyIFx4QkMJKDEgMzQ1ICA4KSAgIyBCQyDiop0gwrwgW1ZVTEdBUiBGUkFDVElPTiBPTkUgUVVBUlRFUl0KK2NoYXIgXHhCRAkoICAgNDUgIDgpICAjIEJEIOKimCDCvSBbVlVMR0FSIEZSQUNUSU9OIE9ORSBIQUxGXQorY2hhciBceEJFCSggIDM0NTYgICkgICMgQkUg4qC8IMK+IFtWVUxHQVIgRlJBQ1RJT04gVEhSRUUgUVVBUlRFUlNdCitjaGFyIFx4QkYJKCAgMzQgICAgKSAgIyBCRiDioIwgwr8gW0lOVkVSVEVEIFFVRVNUSU9OIE1BUktdCitjaGFyIFx4QzAJKDEyMyA1NjcgKSAgIyBDMCDiobcgw4AgW0xBVElOIENBUElUQUwgTEVUVEVSIEEgV0lUSCBHUkFWRV0KK2NoYXIgXHhDMQkoMTIzIDU2NzgpICAjIEMxIOKjtyDDgSBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgQSBXSVRIIEFDVVRFXQorY2hhciBceEMyCSgxICAgIDY3OCkgICMgQzIg4qOhIMOCIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBBIFdJVEggQ0lSQ1VNRkxFWF0KK2NoYXIgXHhDMwkoMSAgNCA2NzgpICAjIEMzIOKjqSDDgyBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgQSBXSVRIIFRJTERFXQorY2hhciBceEM0CSggIDM0NSA3OCkgICMgQzQg4qOcIMOEIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBBIFdJVEggRElBRVJFU0lTXQorY2hhciBceEM1CSgxICAgIDY3ICkgICMgQzUg4qGhIMOFIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBBIFdJVEggUklORyBBQk9WRV0KK2NoYXIgXHhDNgkoICAzNDUgNyApICAjIEM2IOKhnCDDhiBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgQUVdCitjaGFyIFx4QzcJKDEyMzQgNjcgKSAgIyBDNyDioa8gw4cgW0xBVElOIENBUElUQUwgTEVUVEVSIEMgV0lUSCBDRURJTExBXQorY2hhciBceEM4CSggMjM0IDY3ICkgICMgQzgg4qGuIMOIIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBFIFdJVEggR1JBVkVdCitjaGFyIFx4QzkJKDEyMzQ1NjcgKSAgIyBDOSDiob8gw4kgW0xBVElOIENBUElUQUwgTEVUVEVSIEUgV0lUSCBBQ1VURV0KK2NoYXIgXHhDQQkoMTIgICA2NyApICAjIENBIOKhoyDDiiBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgRSBXSVRIIENJUkNVTUZMRVhdCitjaGFyIFx4Q0IJKDEyIDQgNjcgKSAgIyBDQiDioasgw4sgW0xBVElOIENBUElUQUwgTEVUVEVSIEUgV0lUSCBESUFFUkVTSVNdCitjaGFyIFx4Q0MJKDEgICA1Njc4KSAgIyBDQyDio7Egw4wgW0xBVElOIENBUElUQUwgTEVUVEVSIEkgV0lUSCBHUkFWRV0KK2NoYXIgXHhDRAkoMTIgICA2NzgpICAjIENEIOKjoyDDjSBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgSSBXSVRIIEFDVVRFXQorY2hhciBceENFCSgxICA0IDY3ICkgICMgQ0Ug4qGpIMOOIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBJIFdJVEggQ0lSQ1VNRkxFWF0KK2NoYXIgXHhDRgkoMTIgNDU2NyApICAjIENGIOKhuyDDjyBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgSSBXSVRIIERJQUVSRVNJU10KK2NoYXIgXHhEMAkoMSAzNDU2NzgpICAjIEQwIOKjvSDDkCBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgRVRIXQorY2hhciBceEQxCSgxMiA0NTY3OCkgICMgRDEg4qO7IMORIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBOIFdJVEggVElMREVdCitjaGFyIFx4RDIJKDEyIDQgNjc4KSAgIyBEMiDio6sgw5IgW0xBVElOIENBUElUQUwgTEVUVEVSIE8gV0lUSCBHUkFWRV0KK2NoYXIgXHhEMwkoICAzNCA2NzgpICAjIEQzIOKjrCDDkyBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgTyBXSVRIIEFDVVRFXQorY2hhciBceEQ0CSgxICA0NTY3ICkgICMgRDQg4qG5IMOUIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBPIFdJVEggQ0lSQ1VNRkxFWF0KK2NoYXIgXHhENQkoMSAgNDU2NzgpICAjIEQ1IOKjuSDDlSBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgTyBXSVRIIFRJTERFXQorY2hhciBceEQ2CSggMiA0IDY3OCkgICMgRDYg4qOqIMOWIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBPIFdJVEggRElBRVJFU0lTXQorY2hhciBceEQ3CSgxIDM0IDYgOCkgICMgRDcg4qKtIMOXIFtNVUxUSVBMSUNBVElPTiBTSUdOXQorY2hhciBceEQ4CSggMiA0IDY3ICkgICMgRDgg4qGqIMOYIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBPIFdJVEggU1RST0tFXQorY2hhciBceEQ5CSggMjM0NTY3ICkgICMgRDkg4qG+IMOZIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBVIFdJVEggR1JBVkVdCitjaGFyIFx4REEJKDEyICA1Njc4KSAgIyBEQSDio7Mgw5ogW0xBVElOIENBUElUQUwgTEVUVEVSIFUgV0lUSCBBQ1VURV0KK2NoYXIgXHhEQgkoMSAgIDU2NyApICAjIERCIOKhsSDDmyBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgVSBXSVRIIENJUkNVTUZMRVhdCitjaGFyIFx4REMJKDEyICA1NjcgKSAgIyBEQyDiobMgw5wgW0xBVElOIENBUElUQUwgTEVUVEVSIFUgV0lUSCBESUFFUkVTSVNdCitjaGFyIFx4REQJKDEgMzQgIDc4KSAgIyBERCDio40gw50gW0xBVElOIENBUElUQUwgTEVUVEVSIFkgV0lUSCBBQ1VURV0KK2NoYXIgXHhERQkoMSAzICAgNzgpICAjIERFIOKjhSDDniBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgVEhPUk5dCitjaGFyIFx4REYJKCAyMzQgNiA4KSAgIyBERiDioq4gw58gW0xBVElOIFNNQUxMIExFVFRFUiBTSEFSUCBTXQorY2hhciBceEUwCSgxMjMgNTYgICkgICMgRTAg4qC3IMOgIFtMQVRJTiBTTUFMTCBMRVRURVIgQSBXSVRIIEdSQVZFXQorY2hhciBceEUxCSgxMjMgNTYgOCkgICMgRTEg4qK3IMOhIFtMQVRJTiBTTUFMTCBMRVRURVIgQSBXSVRIIEFDVVRFXQorY2hhciBceEUyCSgxICAgIDYgOCkgICMgRTIg4qKhIMOiIFtMQVRJTiBTTUFMTCBMRVRURVIgQSBXSVRIIENJUkNVTUZMRVhdCitjaGFyIFx4RTMJKDEgIDQgNiA4KSAgIyBFMyDioqkgw6MgW0xBVElOIFNNQUxMIExFVFRFUiBBIFdJVEggVElMREVdCitjaGFyIFx4RTQJKCAgMzQ1ICA4KSAgIyBFNCDiopwgw6QgW0xBVElOIFNNQUxMIExFVFRFUiBBIFdJVEggRElBRVJFU0lTXQorY2hhciBceEU1CSgxICAgIDYgICkgICMgRTUg4qChIMOlIFtMQVRJTiBTTUFMTCBMRVRURVIgQSBXSVRIIFJJTkcgQUJPVkVdCitjaGFyIFx4RTYJKCAgMzQ1ICAgKSAgIyBFNiDioJwgw6YgW0xBVElOIFNNQUxMIExFVFRFUiBBRV0KK2NoYXIgXHhFNwkoMTIzNCA2ICApICAjIEU3IOKgryDDpyBbTEFUSU4gU01BTEwgTEVUVEVSIEMgV0lUSCBDRURJTExBXQorY2hhciBceEU4CSggMjM0IDYgICkgICMgRTgg4qCuIMOoIFtMQVRJTiBTTUFMTCBMRVRURVIgRSBXSVRIIEdSQVZFXQorY2hhciBceEU5CSgxMjM0NTYgICkgICMgRTkg4qC/IMOpIFtMQVRJTiBTTUFMTCBMRVRURVIgRSBXSVRIIEFDVVRFXQorY2hhciBceEVBCSgxMiAgIDYgICkgICMgRUEg4qCjIMOqIFtMQVRJTiBTTUFMTCBMRVRURVIgRSBXSVRIIENJUkNVTUZMRVhdCitjaGFyIFx4RUIJKDEyIDQgNiAgKSAgIyBFQiDioKsgw6sgW0xBVElOIFNNQUxMIExFVFRFUiBFIFdJVEggRElBRVJFU0lTXQorY2hhciBceEVDCSgxICAgNTYgOCkgICMgRUMg4qKxIMOsIFtMQVRJTiBTTUFMTCBMRVRURVIgSSBXSVRIIEdSQVZFXQorY2hhciBceEVECSgxMiAgIDYgOCkgICMgRUQg4qKjIMOtIFtMQVRJTiBTTUFMTCBMRVRURVIgSSBXSVRIIEFDVVRFXQorY2hhciBceEVFCSgxICA0IDYgICkgICMgRUUg4qCpIMOuIFtMQVRJTiBTTUFMTCBMRVRURVIgSSBXSVRIIENJUkNVTUZMRVhdCitjaGFyIFx4RUYJKDEyIDQ1NiAgKSAgIyBFRiDioLsgw68gW0xBVElOIFNNQUxMIExFVFRFUiBJIFdJVEggRElBRVJFU0lTXQorY2hhciBceEYwCSgxIDM0NTYgOCkgICMgRjAg4qK9IMOwIFtMQVRJTiBTTUFMTCBMRVRURVIgRVRIXQorY2hhciBceEYxCSgxMiA0NTYgOCkgICMgRjEg4qK7IMOxIFtMQVRJTiBTTUFMTCBMRVRURVIgTiBXSVRIIFRJTERFXQorY2hhciBceEYyCSgxMiA0IDYgOCkgICMgRjIg4qKrIMOyIFtMQVRJTiBTTUFMTCBMRVRURVIgTyBXSVRIIEdSQVZFXQorY2hhciBceEYzCSggIDM0IDYgOCkgICMgRjMg4qKsIMOzIFtMQVRJTiBTTUFMTCBMRVRURVIgTyBXSVRIIEFDVVRFXQorY2hhciBceEY0CSgxICA0NTYgICkgICMgRjQg4qC5IMO0IFtMQVRJTiBTTUFMTCBMRVRURVIgTyBXSVRIIENJUkNVTUZMRVhdCitjaGFyIFx4RjUJKDEgIDQ1NiA4KSAgIyBGNSDiorkgw7UgW0xBVElOIFNNQUxMIExFVFRFUiBPIFdJVEggVElMREVdCitjaGFyIFx4RjYJKCAyIDQgNiA4KSAgIyBGNiDioqogw7YgW0xBVElOIFNNQUxMIExFVFRFUiBPIFdJVEggRElBRVJFU0lTXQorY2hhciBceEY3CSggMiAgNTYgOCkgICMgRjcg4qKyIMO3IFtESVZJU0lPTiBTSUdOXQorY2hhciBceEY4CSggMiA0IDYgICkgICMgRjgg4qCqIMO4IFtMQVRJTiBTTUFMTCBMRVRURVIgTyBXSVRIIFNUUk9LRV0KK2NoYXIgXHhGOQkoIDIzNDU2ICApICAjIEY5IOKgviDDuSBbTEFUSU4gU01BTEwgTEVUVEVSIFUgV0lUSCBHUkFWRV0KK2NoYXIgXHhGQQkoMTIgIDU2IDgpICAjIEZBIOKisyDDuiBbTEFUSU4gU01BTEwgTEVUVEVSIFUgV0lUSCBBQ1VURV0KK2NoYXIgXHhGQgkoMSAgIDU2ICApICAjIEZCIOKgsSDDuyBbTEFUSU4gU01BTEwgTEVUVEVSIFUgV0lUSCBDSVJDVU1GTEVYXQorY2hhciBceEZDCSgxMiAgNTYgICkgICMgRkMg4qCzIMO8IFtMQVRJTiBTTUFMTCBMRVRURVIgVSBXSVRIIERJQUVSRVNJU10KK2NoYXIgXHhGRAkoMSAzNCAgIDgpICAjIEZEIOKijSDDvSBbTEFUSU4gU01BTEwgTEVUVEVSIFkgV0lUSCBBQ1VURV0KK2NoYXIgXHhGRQkoMSAzICAgIDgpICAjIEZFIOKihSDDviBbTEFUSU4gU01BTEwgTEVUVEVSIFRIT1JOXQorY2hhciBceEZGCSggMjM0NTYgOCkgICMgRkYg4qK+IMO/IFtMQVRJTiBTTUFMTCBMRVRURVIgWSBXSVRIIERJQUVSRVNJU10KKworaW5jbHVkZSBjb21tb24udHRpCmRpZmYgLS1naXQgYS9UYWJsZXMvVGV4dC9kYS1sdC50dGIgYi9UYWJsZXMvVGV4dC9kYS1sdC50dGIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2MzNzFiZgotLS0gL2Rldi9udWxsCisrKyBiL1RhYmxlcy9UZXh0L2RhLWx0LnR0YgpAQCAtMCwwICsxLDIwNyBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorIyAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyMKKyMgQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorIworIyBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorIworIyBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisjIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyMgbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisjCisjIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMgQlJMVFRZIFRleHQgVGFibGUgLSBEYW5pc2ggKExvZ1RleHQpCisKKyMgRGFuaXNoIExvZ1RleHQgdXNlcnMgYXJlIGFjY3VzdG9tZWQgdG8gdGhlIHBlcmNlbnQgc2lnbiAoJSkgYW5kIHRoZQorIyBleGNsYW1hdGlvbiBwb2ludCAoISkgYmVpbmcgbWFwcGVkIHRvIHBhdHRlcm5zIHdoaWNoIGRpZmZlciBmcm9tIHRoZSBuZXcgMTI1MgorIyBzdGFuZGFyZC4gTG9nVGV4dCB1c2VycyB3aWxsIGJlIG1vcmUgY29tZm9ydGFibGUgd2l0aCB0aGlzIHRhYmxlLgorCisjIHRoZSBzdGFuZGFyZCByZXByZXNlbnRhdGlvbnMgZm9yIHRoZSBsZXR0ZXJzIG9mIHRoZSBMYXRpbiBhbHBoYWJldAoraW5jbHVkZSBsdHItbGF0aW4udHRpCisKKyMgdGhlIHN0YW5kYXJkIHJlcHJlc2VudGF0aW9ucyBmb3IgdGhlIExhdGluIGNvbnRyb2wgY2hhcmFjdGVycworaW5jbHVkZSBjdGwtbGF0aW4udHRpCisKKyMgdGhlIG51bWJlcnMgMC05IGFyZSByZXByZXNlbnRlZCBieSB0aGUgbGV0dGVycyBqLGEtaSB3aXRoIGRvdCA4IGFkZGVkCitpbmNsdWRlIG51bS1kb3Q4LnR0aQorCisjIGdlbmVyYXRlZCBieSB0dGJ0ZXN0OiBjaGFyc2V0PWlzby04ODU5LTEKK2NoYXIgXHgwMAkoMTIzNDU2NzgpICAjIDAwIOKjvyAgIFtOVUxMXQorIyBMYXRpbiBjb250cm9sIGNoYXJhY3RlcnMgICMgMDEtMUEKK2NoYXIgXHgxQgkoICAzNDUgNzgpICAjIDFCIOKjnCAgIFtFU0NBUEVdCitjaGFyIFx4MUMJKCAgIDQ1Njc4KSAgIyAxQyDio7ggICBbSU5GT1JNQVRJT04gU0VQQVJBVE9SIEZPVVJdCitjaGFyIFx4MUQJKCAyICAgIDc4KSAgIyAxRCDio4IgICBbSU5GT1JNQVRJT04gU0VQQVJBVE9SIFRIUkVFXQorY2hhciBceDFFCSgxMjM0IDY3OCkgICMgMUUg4qOvICAgW0lORk9STUFUSU9OIFNFUEFSQVRPUiBUV09dCitjaGFyIFx4MUYJKCAyMyA1Njc4KSAgIyAxRiDio7YgICBbSU5GT1JNQVRJT04gU0VQQVJBVE9SIE9ORV0KK2NoYXIgXHgyMAkoICAgICAgICApICAjIDIwIOKggCAgIFtTUEFDRV0KK2NoYXIgXHgyMQkoICAgIDU2ICApICAjIDIxIOKgsCAhIFtFWENMQU1BVElPTiBNQVJLXQorY2hhciBceDIyCSggMjMgNTYgICkgICMgMjIg4qC2ICIgW1FVT1RBVElPTiBNQVJLXQorY2hhciBceDIzCSggIDM0NTYgOCkgICMgMjMg4qK8ICMgW05VTUJFUiBTSUdOXQorY2hhciBceDI0CSgxICAgNTYgOCkgICMgMjQg4qKxICQgW0RPTExBUiBTSUdOXQorY2hhciBceDI1CSggIDMgNTYgOCkgICMgMjUg4qK0ICUgW1BFUkNFTlQgU0lHTl0KK2NoYXIgXHgyNgkoMTIzNCA2IDgpICAjIDI2IOKiryAmIFtBTVBFUlNBTkRdCitjaGFyIFx4MjcJKCAgICAgNiAgKSAgIyAyNyDioKAgJyBbQVBPU1RST1BIRV0KK2NoYXIgXHgyOAkoMTIgICA2IDgpICAjIDI4IOKioyAoIFtMRUZUIFBBUkVOVEhFU0lTXQorY2hhciBceDI5CSggIDM0NSAgOCkgICMgMjkg4qKcICkgW1JJR0hUIFBBUkVOVEhFU0lTXQorY2hhciBceDJBCSgxIDM0IDYgOCkgICMgMkEg4qKtICogW0FTVEVSSVNLXQorY2hhciBceDJCCSggMjMgNSAgOCkgICMgMkIg4qKWICsgW1BMVVMgU0lHTl0KK2NoYXIgXHgyQwkoIDIgICAgICApICAjIDJDIOKggiAsIFtDT01NQV0KK2NoYXIgXHgyRAkoICAzICA2IDgpICAjIDJEIOKipCAtIFtIWVBIRU4tTUlOVVNdCitjaGFyIFx4MkUJKCAgMyAgICAgKSAgIyAyRSDioIQgLiBbRlVMTCBTVE9QXQorY2hhciBceDJGCSggMiAgNSAgOCkgICMgMkYg4qKSIC8gW1NPTElEVVNdCisjIEhpbmR1LUFyYWJpYyBudW1lcmFscyAgICAgIyAzMC0zOQorY2hhciBceDNBCSggMiAgNSAgICkgICMgM0Eg4qCSIDogW0NPTE9OXQorY2hhciBceDNCCSggMjMgICAgICkgICMgM0Ig4qCGIDsgW1NFTUlDT0xPTl0KK2NoYXIgXHgzQwkoMSAzNCAgIDgpICAjIDNDIOKijSA8IFtMRVNTLVRIQU4gU0lHTl0KK2NoYXIgXHgzRAkoIDIzIDU2IDgpICAjIDNEIOKitiA9IFtFUVVBTFMgU0lHTl0KK2NoYXIgXHgzRQkoIDIzNCAgIDgpICAjIDNFIOKijiA+IFtHUkVBVEVSLVRIQU4gU0lHTl0KK2NoYXIgXHgzRgkoIDIgICA2ICApICAjIDNGIOKgoiA/IFtRVUVTVElPTiBNQVJLXQorY2hhciBceDQwCSggICA0ICA3OCkgICMgNDAg4qOIIEAgW0NPTU1FUkNJQUwgQVRdCisjIHVwcGVyY2FzZSBMYXRpbiBhbHBoYWJldCAgIyA0MS01QQorY2hhciBceDVCCSgxMjMgIDYgOCkgICMgNUIg4qKnIFsgW0xFRlQgU1FVQVJFIEJSQUNLRVRdCitjaGFyIFx4NUMJKDEgICAgNiA4KSAgIyA1QyDioqEgXCBbUkVWRVJTRSBTT0xJRFVTXQorY2hhciBceDVECSgxICA0NTYgOCkgICMgNUQg4qK5IF0gW1JJR0hUIFNRVUFSRSBCUkFDS0VUXQorY2hhciBceDVFCSggICAgIDY3ICkgICMgNUUg4qGgIF4gW0NJUkNVTUZMRVggQUNDRU5UXQorY2hhciBceDVGCSggICAgICA3OCkgICMgNUYg4qOAIF8gW0xPVyBMSU5FXQorY2hhciBceDYwCSggMjMgNTY3ICkgICMgNjAg4qG2IGAgW0dSQVZFIEFDQ0VOVF0KKyMgbG93ZXJjYXNlIExhdGluIGFscGhhYmV0ICAjIDYxLTdBCitjaGFyIFx4N0IJKCAyIDQgNiA4KSAgIyA3QiDioqogeyBbTEVGVCBDVVJMWSBCUkFDS0VUXQorY2hhciBceDdDCSggICA0NTYgOCkgICMgN0Mg4qK4IHwgW1ZFUlRJQ0FMIExJTkVdCitjaGFyIFx4N0QJKDEgMyA1ICA4KSAgIyA3RCDiopUgfSBbUklHSFQgQ1VSTFkgQlJBQ0tFVF0KK2NoYXIgXHg3RQkoICAgICA2IDgpICAjIDdFIOKioCB+IFtUSUxERV0KK2NoYXIgXHg3RgkoICAgICAgIDgpICAjIDdGIOKigCAgIFtERUxFVEVdCitjaGFyIFx4ODAJKCAgIDQgICAgKSAgIyA4MCDioIggICBbPGNvbnRyb2wtMDA4MD5dCitjaGFyIFx4ODEJKCAgIDQ1ICAgKSAgIyA4MSDioJggICBbPGNvbnRyb2wtMDA4MT5dCitjaGFyIFx4ODIJKCAgIDQ1IDcgKSAgIyA4MiDioZggICBbQlJFQUsgUEVSTUlUVEVEIEhFUkVdCitjaGFyIFx4ODMJKCAgICA1ICAgKSAgIyA4MyDioJAgICBbTk8gQlJFQUsgSEVSRV0KK2NoYXIgXHg4NAkoIDIzICAgNzgpICAjIDg0IOKjhiAgIFs8Y29udHJvbC0wMDg0Pl0KK2NoYXIgXHg4NQkoIDIzIDUgICApICAjIDg1IOKgliAgIFtORVhUIExJTkUgKE5FTCldCitjaGFyIFx4ODYJKCAyMyA1IDcgKSAgIyA4NiDioZYgICBbU1RBUlQgT0YgU0VMRUNURUQgQVJFQV0KK2NoYXIgXHg4NwkoIDIzIDUgNzgpICAjIDg3IOKjliAgIFtFTkQgT0YgU0VMRUNURUQgQVJFQV0KK2NoYXIgXHg4OAkoICAgIDU2NzgpICAjIDg4IOKjsCAgIFtDSEFSQUNURVIgVEFCVUxBVElPTiBTRVRdCitjaGFyIFx4ODkJKCAgICAgNjc4KSAgIyA4OSDio6AgICBbQ0hBUkFDVEVSIFRBQlVMQVRJT04gV0lUSCBKVVNUSUZJQ0FUSU9OXQorY2hhciBceDhBCSggMjMgIDYgOCkgICMgOEEg4qKmICAgW0xJTkUgVEFCVUxBVElPTiBTRVRdCitjaGFyIFx4OEIJKCAgIDQ1NiAgKSAgIyA4QiDioLggICBbUEFSVElBTCBMSU5FIEZPUldBUkRdCitjaGFyIFx4OEMJKCAgMzQgIDcgKSAgIyA4QyDioYwgICBbUEFSVElBTCBMSU5FIEJBQ0tXQVJEXQorY2hhciBceDhECSggIDMgNTY3ICkgICMgOEQg4qG0ICAgW1JFVkVSU0UgTElORSBGRUVEXQorY2hhciBceDhFCSggIDM0IDY3ICkgICMgOEUg4qGsICAgW1NJTkdMRSBTSElGVCBUV09dCitjaGFyIFx4OEYJKCAyICAgIDcgKSAgIyA4RiDioYIgICBbU0lOR0xFIFNISUZUIFRIUkVFXQorY2hhciBceDkwCSggIDMgNSA3ICkgICMgOTAg4qGUICAgW0RFVklDRSBDT05UUk9MIFNUUklOR10KK2NoYXIgXHg5MQkoICAgNCAgNyApICAjIDkxIOKhiCAgIFtQUklWQVRFIFVTRSBPTkVdCitjaGFyIFx4OTIJKCAgIDQgICA4KSAgIyA5MiDiooggICBbUFJJVkFURSBVU0UgVFdPXQorY2hhciBceDkzCSggMjMgICA3ICkgICMgOTMg4qGGICAgW1NFVCBUUkFOU01JVCBTVEFURV0KK2NoYXIgXHg5NAkoICAgIDU2IDgpICAjIDk0IOKisCAgIFtDQU5DRUwgQ0hBUkFDVEVSXQorY2hhciBceDk1CSggIDMgICA3ICkgICMgOTUg4qGEICAgW01FU1NBR0UgV0FJVElOR10KK2NoYXIgXHg5NgkoICAzICA2ICApICAjIDk2IOKgpCAgIFtTVEFSVCBPRiBHVUFSREVEIEFSRUFdCitjaGFyIFx4OTcJKCAgMyAgNjcgKSAgIyA5NyDioaQgICBbRU5EIE9GIEdVQVJERUQgQVJFQV0KK2NoYXIgXHg5OAkoICAgNCA2ICApICAjIDk4IOKgqCAgIFtTVEFSVCBPRiBTVFJJTkddCitjaGFyIFx4OTkJKCAyICA1IDcgKSAgIyA5OSDioZIgICBbPGNvbnRyb2wtMDA5OT5dCitjaGFyIFx4OUEJKCAgMzQgICAgKSAgIyA5QSDioIwgICBbU0lOR0xFIENIQVJBQ1RFUiBJTlRST0RVQ0VSXQorY2hhciBceDlCCSggICA0NTY3ICkgICMgOUIg4qG4ICAgW0NPTlRST0wgU0VRVUVOQ0UgSU5UUk9EVUNFUl0KK2NoYXIgXHg5QwkoICAgNCA2NyApICAjIDlDIOKhqCAgIFtTVFJJTkcgVEVSTUlOQVRPUl0KK2NoYXIgXHg5RAkoIDIzNDUgIDgpICAjIDlEIOKiniAgIFtPUEVSQVRJTkcgU1lTVEVNIENPTU1BTkRdCitjaGFyIFx4OUUJKCAgMzQgNiAgKSAgIyA5RSDioKwgICBbUFJJVkFDWSBNRVNTQUdFXQorY2hhciBceDlGCSggMjM0NTY3OCkgICMgOUYg4qO+ICAgW0FQUExJQ0FUSU9OIFBST0dSQU0gQ09NTUFORF0KK2NoYXIgXHhBMQkoIDIgIDU2ICApICAjIEExIOKgsiDCoSBbSU5WRVJURUQgRVhDTEFNQVRJT04gTUFSS10KK2NoYXIgXHhBMgkoIDIgIDUgNzgpICAjIEEyIOKjkiDCoiBbQ0VOVCBTSUdOXQorY2hhciBceEEzCSgxMjMgICAgOCkgICMgQTMg4qKHIMKjIFtQT1VORCBTSUdOXQorY2hhciBceEE0CSggMjMgIDY3ICkgICMgQTQg4qGmIMKkIFtDVVJSRU5DWSBTSUdOXQorY2hhciBceEE1CSggMiAgNTY3OCkgICMgQTUg4qOyIMKlIFtZRU4gU0lHTl0KK2NoYXIgXHhBNgkoICAzNCAgNzgpICAjIEE2IOKjjCDCpiBbQlJPS0VOIEJBUl0KK2NoYXIgXHhBNwkoICAgIDUgNzgpICAjIEE3IOKjkCDCpyBbU0VDVElPTiBTSUdOXQorY2hhciBceEE4CSggMjMgIDY3OCkgICMgQTgg4qOmIMKoIFtESUFFUkVTSVNdCitjaGFyIFx4QTkJKCAgMzQ1Njc4KSAgIyBBOSDio7wgwqkgW0NPUFlSSUdIVCBTSUdOXQorY2hhciBceEFBCSggMjM0IDY3OCkgICMgQUEg4qOuIMKqIFtGRU1JTklORSBPUkRJTkFMIElORElDQVRPUl0KK2NoYXIgXHhBQgkoICAgIDUgNyApICAjIEFCIOKhkCDCqyBbTEVGVC1QT0lOVElORyBET1VCTEUgQU5HTEUgUVVPVEFUSU9OIE1BUktdCitjaGFyIFx4QUMJKCAgMzQ1NjcgKSAgIyBBQyDiobwgwqwgW05PVCBTSUdOXQorY2hhciBceEFECSggIDMgICA3OCkgICMgQUQg4qOEIMKtIFtTT0ZUIEhZUEhFTl0KK2NoYXIgXHhBRQkoICAgNDUgNzgpICAjIEFFIOKjmCDCriBbUkVHSVNURVJFRCBTSUdOXQorY2hhciBceEFGCSggMiAgIDY3ICkgICMgQUYg4qGiIMKvIFtNQUNST05dCitjaGFyIFx4QjAJKCAgMyA1NiAgKSAgIyBCMCDioLQgwrAgW0RFR1JFRSBTSUdOXQorY2hhciBceEIxCSgxMjM0NSAgOCkgICMgQjEg4qKfIMKxIFtQTFVTLU1JTlVTIFNJR05dCitjaGFyIFx4QjIJKCAyMyAgICA4KSAgIyBCMiDiooYgwrIgW1NVUEVSU0NSSVBUIFRXT10KK2NoYXIgXHhCMwkoMTIzNCAgIDgpICAjIEIzIOKijyDCsyBbU1VQRVJTQ1JJUFQgVEhSRUVdCitjaGFyIFx4QjQJKCAgIDQgNiA4KSAgIyBCNCDioqggwrQgW0FDVVRFIEFDQ0VOVF0KK2NoYXIgXHhCNQkoIDIzICA2ICApICAjIEI1IOKgpiDCtSBbTUlDUk8gU0lHTl0KK2NoYXIgXHhCNgkoMTIzNDU2IDgpICAjIEI2IOKivyDCtiBbUElMQ1JPVyBTSUdOXQorY2hhciBceEI3CSggIDMgICAgOCkgICMgQjcg4qKEIMK3IFtNSURETEUgRE9UXQorY2hhciBceEI4CSggICA0IDY3OCkgICMgQjgg4qOoIMK4IFtDRURJTExBXQorY2hhciBceEI5CSggMiAgICAgOCkgICMgQjkg4qKCIMK5IFtTVVBFUlNDUklQVCBPTkVdCitjaGFyIFx4QkEJKCAgICAgIDcgKSAgIyBCQSDioYAgwrogW01BU0NVTElORSBPUkRJTkFMIElORElDQVRPUl0KK2NoYXIgXHhCQgkoICAgIDU2NyApICAjIEJCIOKhsCDCuyBbUklHSFQtUE9JTlRJTkcgRE9VQkxFIEFOR0xFIFFVT1RBVElPTiBNQVJLXQorY2hhciBceEJDCSgxIDM0NSAgOCkgICMgQkMg4qKdIMK8IFtWVUxHQVIgRlJBQ1RJT04gT05FIFFVQVJURVJdCitjaGFyIFx4QkQJKCAgIDQ1ICA4KSAgIyBCRCDiopggwr0gW1ZVTEdBUiBGUkFDVElPTiBPTkUgSEFMRl0KK2NoYXIgXHhCRQkoICAzNDU2ICApICAjIEJFIOKgvCDCviBbVlVMR0FSIEZSQUNUSU9OIFRIUkVFIFFVQVJURVJTXQorY2hhciBceEJGCSggIDM0ICAgOCkgICMgQkYg4qKMIMK/IFtJTlZFUlRFRCBRVUVTVElPTiBNQVJLXQorY2hhciBceEMwCSgxMjMgNTY3ICkgICMgQzAg4qG3IMOAIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBBIFdJVEggR1JBVkVdCitjaGFyIFx4QzEJKDEyMyA1Njc4KSAgIyBDMSDio7cgw4EgW0xBVElOIENBUElUQUwgTEVUVEVSIEEgV0lUSCBBQ1VURV0KK2NoYXIgXHhDMgkoMSAgICA2NzgpICAjIEMyIOKjoSDDgiBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgQSBXSVRIIENJUkNVTUZMRVhdCitjaGFyIFx4QzMJKDEgIDQgNjc4KSAgIyBDMyDio6kgw4MgW0xBVElOIENBUElUQUwgTEVUVEVSIEEgV0lUSCBUSUxERV0KK2NoYXIgXHhDNAkoICAzIDUgIDgpICAjIEM0IOKilCDDhCBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgQSBXSVRIIERJQUVSRVNJU10KK2NoYXIgXHhDNQkoMSAgICA2NyApICAjIEM1IOKhoSDDhSBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgQSBXSVRIIFJJTkcgQUJPVkVdCitjaGFyIFx4QzYJKCAgMzQ1IDcgKSAgIyBDNiDioZwgw4YgW0xBVElOIENBUElUQUwgTEVUVEVSIEFFXQorY2hhciBceEM3CSgxMjM0IDY3ICkgICMgQzcg4qGvIMOHIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBDIFdJVEggQ0VESUxMQV0KK2NoYXIgXHhDOAkoIDIzNCA2NyApICAjIEM4IOKhriDDiCBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgRSBXSVRIIEdSQVZFXQorY2hhciBceEM5CSgxMjM0NTY3ICkgICMgQzkg4qG/IMOJIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBFIFdJVEggQUNVVEVdCitjaGFyIFx4Q0EJKDEyICAgNjcgKSAgIyBDQSDioaMgw4ogW0xBVElOIENBUElUQUwgTEVUVEVSIEUgV0lUSCBDSVJDVU1GTEVYXQorY2hhciBceENCCSgxMiA0IDY3ICkgICMgQ0Ig4qGrIMOLIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBFIFdJVEggRElBRVJFU0lTXQorY2hhciBceENDCSgxICAgNTY3OCkgICMgQ0Mg4qOxIMOMIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBJIFdJVEggR1JBVkVdCitjaGFyIFx4Q0QJKDEyICAgNjc4KSAgIyBDRCDio6Mgw40gW0xBVElOIENBUElUQUwgTEVUVEVSIEkgV0lUSCBBQ1VURV0KK2NoYXIgXHhDRQkoMSAgNCA2NyApICAjIENFIOKhqSDDjiBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgSSBXSVRIIENJUkNVTUZMRVhdCitjaGFyIFx4Q0YJKDEyIDQ1NjcgKSAgIyBDRiDiobsgw48gW0xBVElOIENBUElUQUwgTEVUVEVSIEkgV0lUSCBESUFFUkVTSVNdCitjaGFyIFx4RDAJKCAgMyA1Njc4KSAgIyBEMCDio7Qgw5AgW0xBVElOIENBUElUQUwgTEVUVEVSIEVUSF0KK2NoYXIgXHhEMQkoMTIgNDU2NzgpICAjIEQxIOKjuyDDkSBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgTiBXSVRIIFRJTERFXQorY2hhciBceEQyCSgxMiA0IDY3OCkgICMgRDIg4qOrIMOSIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBPIFdJVEggR1JBVkVdCitjaGFyIFx4RDMJKCAgMzQgNjc4KSAgIyBEMyDio6wgw5MgW0xBVElOIENBUElUQUwgTEVUVEVSIE8gV0lUSCBBQ1VURV0KK2NoYXIgXHhENAkoMSAgNDU2NyApICAjIEQ0IOKhuSDDlCBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgTyBXSVRIIENJUkNVTUZMRVhdCitjaGFyIFx4RDUJKDEgIDQ1Njc4KSAgIyBENSDio7kgw5UgW0xBVElOIENBUElUQUwgTEVUVEVSIE8gV0lUSCBUSUxERV0KK2NoYXIgXHhENgkoIDIgNCA2NzgpICAjIEQ2IOKjqiDDliBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgTyBXSVRIIERJQUVSRVNJU10KK2NoYXIgXHhENwkoMSAzIDU2IDgpICAjIEQ3IOKitSDDlyBbTVVMVElQTElDQVRJT04gU0lHTl0KK2NoYXIgXHhEOAkoIDIgNCA2NyApICAjIEQ4IOKhqiDDmCBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgTyBXSVRIIFNUUk9LRV0KK2NoYXIgXHhEOQkoIDIzNDU2NyApICAjIEQ5IOKhviDDmSBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgVSBXSVRIIEdSQVZFXQorY2hhciBceERBCSgxMiAgNTY3OCkgICMgREEg4qOzIMOaIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBVIFdJVEggQUNVVEVdCitjaGFyIFx4REIJKDEgICA1NjcgKSAgIyBEQiDiobEgw5sgW0xBVElOIENBUElUQUwgTEVUVEVSIFUgV0lUSCBDSVJDVU1GTEVYXQorY2hhciBceERDCSgxMiAgNTY3ICkgICMgREMg4qGzIMOcIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBVIFdJVEggRElBRVJFU0lTXQorY2hhciBceERECSggIDMgNSA3OCkgICMgREQg4qOUIMOdIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBZIFdJVEggQUNVVEVdCitjaGFyIFx4REUJKCAyICAgNjc4KSAgIyBERSDio6Igw54gW0xBVElOIENBUElUQUwgTEVUVEVSIFRIT1JOXQorY2hhciBceERGCSggMjM0IDYgOCkgICMgREYg4qKuIMOfIFtMQVRJTiBTTUFMTCBMRVRURVIgU0hBUlAgU10KK2NoYXIgXHhFMAkoMTIzIDU2ICApICAjIEUwIOKgtyDDoCBbTEFUSU4gU01BTEwgTEVUVEVSIEEgV0lUSCBHUkFWRV0KK2NoYXIgXHhFMQkoMTIzIDU2IDgpICAjIEUxIOKityDDoSBbTEFUSU4gU01BTEwgTEVUVEVSIEEgV0lUSCBBQ1VURV0KK2NoYXIgXHhFMgkoIDIgICA2IDgpICAjIEUyIOKioiDDoiBbTEFUSU4gU01BTEwgTEVUVEVSIEEgV0lUSCBDSVJDVU1GTEVYXQorY2hhciBceEUzCSgxICA0IDYgOCkgICMgRTMg4qKpIMOjIFtMQVRJTiBTTUFMTCBMRVRURVIgQSBXSVRIIFRJTERFXQorY2hhciBceEU0CSggICAgNSAgOCkgICMgRTQg4qKQIMOkIFtMQVRJTiBTTUFMTCBMRVRURVIgQSBXSVRIIERJQUVSRVNJU10KK2NoYXIgXHhFNQkoMSAgICA2ICApICAjIEU1IOKgoSDDpSBbTEFUSU4gU01BTEwgTEVUVEVSIEEgV0lUSCBSSU5HIEFCT1ZFXQorY2hhciBceEU2CSggIDM0NSAgICkgICMgRTYg4qCcIMOmIFtMQVRJTiBTTUFMTCBMRVRURVIgQUVdCitjaGFyIFx4RTcJKDEyMzQgNiAgKSAgIyBFNyDioK8gw6cgW0xBVElOIFNNQUxMIExFVFRFUiBDIFdJVEggQ0VESUxMQV0KK2NoYXIgXHhFOAkoIDIzNCA2ICApICAjIEU4IOKgriDDqCBbTEFUSU4gU01BTEwgTEVUVEVSIEUgV0lUSCBHUkFWRV0KK2NoYXIgXHhFOQkoMTIzNDU2ICApICAjIEU5IOKgvyDDqSBbTEFUSU4gU01BTEwgTEVUVEVSIEUgV0lUSCBBQ1VURV0KK2NoYXIgXHhFQQkoMTIgICA2ICApICAjIEVBIOKgoyDDqiBbTEFUSU4gU01BTEwgTEVUVEVSIEUgV0lUSCBDSVJDVU1GTEVYXQorY2hhciBceEVCCSgxMiA0IDYgICkgICMgRUIg4qCrIMOrIFtMQVRJTiBTTUFMTCBMRVRURVIgRSBXSVRIIERJQUVSRVNJU10KK2NoYXIgXHhFQwkoICAzICA2NzgpICAjIEVDIOKjpCDDrCBbTEFUSU4gU01BTEwgTEVUVEVSIEkgV0lUSCBHUkFWRV0KK2NoYXIgXHhFRAkoMSAzICA2IDgpICAjIEVEIOKipSDDrSBbTEFUSU4gU01BTEwgTEVUVEVSIEkgV0lUSCBBQ1VURV0KK2NoYXIgXHhFRQkoMSAgNCA2ICApICAjIEVFIOKgqSDDriBbTEFUSU4gU01BTEwgTEVUVEVSIEkgV0lUSCBDSVJDVU1GTEVYXQorY2hhciBceEVGCSgxMiA0NTYgICkgICMgRUYg4qC7IMOvIFtMQVRJTiBTTUFMTCBMRVRURVIgSSBXSVRIIERJQUVSRVNJU10KK2NoYXIgXHhGMAkoMSAzNDU2IDgpICAjIEYwIOKivSDDsCBbTEFUSU4gU01BTEwgTEVUVEVSIEVUSF0KK2NoYXIgXHhGMQkoMTIgNDU2IDgpICAjIEYxIOKiuyDDsSBbTEFUSU4gU01BTEwgTEVUVEVSIE4gV0lUSCBUSUxERV0KK2NoYXIgXHhGMgkoMTIgNCA2IDgpICAjIEYyIOKiqyDDsiBbTEFUSU4gU01BTEwgTEVUVEVSIE8gV0lUSCBHUkFWRV0KK2NoYXIgXHhGMwkoICAzNCA2IDgpICAjIEYzIOKirCDDsyBbTEFUSU4gU01BTEwgTEVUVEVSIE8gV0lUSCBBQ1VURV0KK2NoYXIgXHhGNAkoMSAgNDU2ICApICAjIEY0IOKguSDDtCBbTEFUSU4gU01BTEwgTEVUVEVSIE8gV0lUSCBDSVJDVU1GTEVYXQorY2hhciBceEY1CSgxMjMgNSAgOCkgICMgRjUg4qKXIMO1IFtMQVRJTiBTTUFMTCBMRVRURVIgTyBXSVRIIFRJTERFXQorY2hhciBceEY2CSggIDMgNSAgICkgICMgRjYg4qCUIMO2IFtMQVRJTiBTTUFMTCBMRVRURVIgTyBXSVRIIERJQUVSRVNJU10KK2NoYXIgXHhGNwkoIDIgIDU2IDgpICAjIEY3IOKisiDDtyBbRElWSVNJT04gU0lHTl0KK2NoYXIgXHhGOAkoIDIgNCA2ICApICAjIEY4IOKgqiDDuCBbTEFUSU4gU01BTEwgTEVUVEVSIE8gV0lUSCBTVFJPS0VdCitjaGFyIFx4RjkJKCAyMzQ1NiAgKSAgIyBGOSDioL4gw7kgW0xBVElOIFNNQUxMIExFVFRFUiBVIFdJVEggR1JBVkVdCitjaGFyIFx4RkEJKDEyICA1NiA4KSAgIyBGQSDiorMgw7ogW0xBVElOIFNNQUxMIExFVFRFUiBVIFdJVEggQUNVVEVdCitjaGFyIFx4RkIJKDEgICA1NiAgKSAgIyBGQiDioLEgw7sgW0xBVElOIFNNQUxMIExFVFRFUiBVIFdJVEggQ0lSQ1VNRkxFWF0KK2NoYXIgXHhGQwkoMTIgIDU2ICApICAjIEZDIOKgsyDDvCBbTEFUSU4gU01BTEwgTEVUVEVSIFUgV0lUSCBESUFFUkVTSVNdCitjaGFyIFx4RkQJKCAyIDQ1NiA4KSAgIyBGRCDiorogw70gW0xBVElOIFNNQUxMIExFVFRFUiBZIFdJVEggQUNVVEVdCitjaGFyIFx4RkUJKDEgMyAgICA4KSAgIyBGRSDiooUgw74gW0xBVElOIFNNQUxMIExFVFRFUiBUSE9STl0KK2NoYXIgXHhGRgkoIDIzNDU2IDgpICAjIEZGIOKiviDDvyBbTEFUSU4gU01BTEwgTEVUVEVSIFkgV0lUSCBESUFFUkVTSVNdCisKK2luY2x1ZGUgY29tbW9uLnR0aQpkaWZmIC0tZ2l0IGEvVGFibGVzL1RleHQvZGEudHRiIGIvVGFibGVzL1RleHQvZGEudHRiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIxNDkzYzQKLS0tIC9kZXYvbnVsbAorKysgYi9UYWJsZXMvVGV4dC9kYS50dGIKQEAgLTAsMCArMSwyMDcgQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyMgICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisjCisjIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyMKKyMgQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjIEJSTFRUWSBUZXh0IFRhYmxlIC0gRGFuaXNoCisKKyMgVGhpcyBpcyB0aGUgdGFibGUgd2hpY2ggY29tZXMgY2xvc2VzdCB0byB0aGUgRGFuaXNoIHN0YW5kYXJkIDEyNTIgdGFibGUuIEFsbAorIyBjb250cm9sIGNoYXJhY3RlcnMgYXJlIG1hcHBlZCBhcyB0aGVpciBjb3JyZXNwb25kaW5nIGNhcGl0YWwgbGV0dGVycyB3aXRoCisjIGRvdC04IGFkZGVkLiBNb3N0IERhbmlzaCBicmFpbGxlIHVzZXJzIHNob3VsZCB1c2UgdGhpcyB0YWJsZS4KKworIyB0aGUgc3RhbmRhcmQgcmVwcmVzZW50YXRpb25zIGZvciB0aGUgbGV0dGVycyBvZiB0aGUgTGF0aW4gYWxwaGFiZXQKK2luY2x1ZGUgbHRyLWxhdGluLnR0aQorCisjIHRoZSBzdGFuZGFyZCByZXByZXNlbnRhdGlvbnMgZm9yIHRoZSBMYXRpbiBjb250cm9sIGNoYXJhY3RlcnMKK2luY2x1ZGUgY3RsLWxhdGluLnR0aQorCisjIHRoZSBudW1iZXJzIDAtOSBhcmUgcmVwcmVzZW50ZWQgYnkgdGhlIGxldHRlcnMgaixhLWkgd2l0aCBkb3QgOCBhZGRlZAoraW5jbHVkZSBudW0tZG90OC50dGkKKworIyBnZW5lcmF0ZWQgYnkgdHRidGVzdDogY2hhcnNldD1pc28tODg1OS0xCitjaGFyIFx4MDAJKDEyMzQ1Njc4KSAgIyAwMCDio78gICBbTlVMTF0KKyMgTGF0aW4gY29udHJvbCBjaGFyYWN0ZXJzICAjIDAxLTFBCitjaGFyIFx4MUIJKCAyICAgNjc4KSAgIyAxQiDio6IgICBbRVNDQVBFXQorY2hhciBceDFDCSggICA0NTY3OCkgICMgMUMg4qO4ICAgW0lORk9STUFUSU9OIFNFUEFSQVRPUiBGT1VSXQorY2hhciBceDFECSgxMjMgIDYgOCkgICMgMUQg4qKnICAgW0lORk9STUFUSU9OIFNFUEFSQVRPUiBUSFJFRV0KK2NoYXIgXHgxRQkoMTIzNCA2NzgpICAjIDFFIOKjryAgIFtJTkZPUk1BVElPTiBTRVBBUkFUT1IgVFdPXQorY2hhciBceDFGCSggMjMgNTY3OCkgICMgMUYg4qO2ICAgW0lORk9STUFUSU9OIFNFUEFSQVRPUiBPTkVdCitjaGFyIFx4MjAJKCAgICAgICAgKSAgIyAyMCDioIAgICBbU1BBQ0VdCitjaGFyIFx4MjEJKCAyMyA1ICAgKSAgIyAyMSDioJYgISBbRVhDTEFNQVRJT04gTUFSS10KK2NoYXIgXHgyMgkoIDIzIDU2ICApICAjIDIyIOKgtiAiIFtRVU9UQVRJT04gTUFSS10KK2NoYXIgXHgyMwkoICAzNDU2IDgpICAjIDIzIOKivCAjIFtOVU1CRVIgU0lHTl0KK2NoYXIgXHgyNAkoIDIgIDU2NzgpICAjIDI0IOKjsiAkIFtET0xMQVIgU0lHTl0KK2NoYXIgXHgyNQkoICAgICA2NzgpICAjIDI1IOKjoCAlIFtQRVJDRU5UIFNJR05dCitjaGFyIFx4MjYJKDEyMzQgNiA4KSAgIyAyNiDioq8gJiBbQU1QRVJTQU5EXQorY2hhciBceDI3CSggICA0ICAgICkgICMgMjcg4qCIICcgW0FQT1NUUk9QSEVdCitjaGFyIFx4MjgJKCAyMyAgNiA4KSAgIyAyOCDioqYgKCBbTEVGVCBQQVJFTlRIRVNJU10KK2NoYXIgXHgyOQkoICAzIDU2IDgpICAjIDI5IOKitCApIFtSSUdIVCBQQVJFTlRIRVNJU10KK2NoYXIgXHgyQQkoICAzIDUgICApICAjIDJBIOKglCAqIFtBU1RFUklTS10KK2NoYXIgXHgyQgkoIDIzIDUgIDgpICAjIDJCIOKiliArIFtQTFVTIFNJR05dCitjaGFyIFx4MkMJKCAyICAgICAgKSAgIyAyQyDioIIgLCBbQ09NTUFdCitjaGFyIFx4MkQJKCAgMyAgNiA4KSAgIyAyRCDioqQgLSBbSFlQSEVOLU1JTlVTXQorY2hhciBceDJFCSggIDMgICAgICkgICMgMkUg4qCEIC4gW0ZVTEwgU1RPUF0KK2NoYXIgXHgyRgkoICAzNCAgICApICAjIDJGIOKgjCAvIFtTT0xJRFVTXQorIyBIaW5kdS1BcmFiaWMgbnVtZXJhbHMgICAgICMgMzAtMzkKK2NoYXIgXHgzQQkoIDIgIDUgICApICAjIDNBIOKgkiA6IFtDT0xPTl0KK2NoYXIgXHgzQgkoIDIzICAgICApICAjIDNCIOKghiA7IFtTRU1JQ09MT05dCitjaGFyIFx4M0MJKCAgMyA1ICA4KSAgIyAzQyDiopQgPCBbTEVTUy1USEFOIFNJR05dCitjaGFyIFx4M0QJKCAyMyA1NiA4KSAgIyAzRCDiorYgPSBbRVFVQUxTIFNJR05dCitjaGFyIFx4M0UJKCAyICAgNjcgKSAgIyAzRSDioaIgPiBbR1JFQVRFUi1USEFOIFNJR05dCitjaGFyIFx4M0YJKCAyICAgNiAgKSAgIyAzRiDioKIgPyBbUVVFU1RJT04gTUFSS10KK2NoYXIgXHg0MAkoICAgNCAgNzgpICAjIDQwIOKjiCBAIFtDT01NRVJDSUFMIEFUXQorIyB1cHBlcmNhc2UgTGF0aW4gYWxwaGFiZXQgICMgNDEtNUEKK2NoYXIgXHg1QgkoIDIzICA2NzgpICAjIDVCIOKjpiBbIFtMRUZUIFNRVUFSRSBCUkFDS0VUXQorY2hhciBceDVDCSggIDM0ICA3ICkgICMgNUMg4qGMIFwgW1JFVkVSU0UgU09MSURVU10KK2NoYXIgXHg1RAkoICAzIDU2NzgpICAjIDVEIOKjtCBdIFtSSUdIVCBTUVVBUkUgQlJBQ0tFVF0KK2NoYXIgXHg1RQkoMTIzNCAgIDgpICAjIDVFIOKijyBeIFtDSVJDVU1GTEVYIEFDQ0VOVF0KK2NoYXIgXHg1RgkoICAzICA2NzgpICAjIDVGIOKjpCBfIFtMT1cgTElORV0KK2NoYXIgXHg2MAkoICAgIDUgIDgpICAjIDYwIOKikCBgIFtHUkFWRSBBQ0NFTlRdCisjIGxvd2VyY2FzZSBMYXRpbiBhbHBoYWJldCAgIyA2MS03QQorY2hhciBceDdCCSggMiAgICA3OCkgICMgN0Ig4qOCIHsgW0xFRlQgQ1VSTFkgQlJBQ0tFVF0KK2NoYXIgXHg3QwkoICAgNDU2IDgpICAjIDdDIOKiuCB8IFtWRVJUSUNBTCBMSU5FXQorY2hhciBceDdECSggIDM0NTY3OCkgICMgN0Qg4qO8IH0gW1JJR0hUIENVUkxZIEJSQUNLRVRdCitjaGFyIFx4N0UJKCAgIDQgNjcgKSAgIyA3RSDioaggfiBbVElMREVdCitjaGFyIFx4N0YJKCAgICAgICA4KSAgIyA3RiDiooAgICBbREVMRVRFXQorY2hhciBceDgwCSggMiA0NTYgOCkgICMgODAg4qK6ICAgWzxjb250cm9sLTAwODA+XQorY2hhciBceDgxCSggICA0NSAgICkgICMgODEg4qCYICAgWzxjb250cm9sLTAwODE+XQorY2hhciBceDgyCSggICA0NSA3ICkgICMgODIg4qGYICAgW0JSRUFLIFBFUk1JVFRFRCBIRVJFXQorY2hhciBceDgzCSggICAgNSAgICkgICMgODMg4qCQICAgW05PIEJSRUFLIEhFUkVdCitjaGFyIFx4ODQJKCAyMyAgIDc4KSAgIyA4NCDio4YgICBbPGNvbnRyb2wtMDA4ND5dCitjaGFyIFx4ODUJKCAgICAgNiAgKSAgIyA4NSDioKAgICBbTkVYVCBMSU5FIChORUwpXQorY2hhciBceDg2CSggMjMgNSA3ICkgICMgODYg4qGWICAgW1NUQVJUIE9GIFNFTEVDVEVEIEFSRUFdCitjaGFyIFx4ODcJKCAyMyA1IDc4KSAgIyA4NyDio5YgICBbRU5EIE9GIFNFTEVDVEVEIEFSRUFdCitjaGFyIFx4ODgJKCAgICA1Njc4KSAgIyA4OCDio7AgICBbQ0hBUkFDVEVSIFRBQlVMQVRJT04gU0VUXQorY2hhciBceDg5CSggIDMgNSA3OCkgICMgODkg4qOUICAgW0NIQVJBQ1RFUiBUQUJVTEFUSU9OIFdJVEggSlVTVElGSUNBVElPTl0KK2NoYXIgXHg4QQkoICAgNDUgNzgpICAjIDhBIOKjmCAgIFtMSU5FIFRBQlVMQVRJT04gU0VUXQorY2hhciBceDhCCSggICA0NTYgICkgICMgOEIg4qC4ICAgW1BBUlRJQUwgTElORSBGT1JXQVJEXQorY2hhciBceDhDCSgxMjMgNSAgOCkgICMgOEMg4qKXICAgW1BBUlRJQUwgTElORSBCQUNLV0FSRF0KK2NoYXIgXHg4RAkoICAzIDU2NyApICAjIDhEIOKhtCAgIFtSRVZFUlNFIExJTkUgRkVFRF0KK2NoYXIgXHg4RQkoICAzNCA2NyApICAjIDhFIOKhrCAgIFtTSU5HTEUgU0hJRlQgVFdPXQorY2hhciBceDhGCSggMiAgICA3ICkgICMgOEYg4qGCICAgW1NJTkdMRSBTSElGVCBUSFJFRV0KK2NoYXIgXHg5MAkoICAzIDUgNyApICAjIDkwIOKhlCAgIFtERVZJQ0UgQ09OVFJPTCBTVFJJTkddCitjaGFyIFx4OTEJKCAgIDQgIDcgKSAgIyA5MSDioYggICBbUFJJVkFURSBVU0UgT05FXQorY2hhciBceDkyCSggICA0ICAgOCkgICMgOTIg4qKIICAgW1BSSVZBVEUgVVNFIFRXT10KK2NoYXIgXHg5MwkoIDIzICAgNyApICAjIDkzIOKhhiAgIFtTRVQgVFJBTlNNSVQgU1RBVEVdCitjaGFyIFx4OTQJKCAgICA1NiA4KSAgIyA5NCDiorAgICBbQ0FOQ0VMIENIQVJBQ1RFUl0KK2NoYXIgXHg5NQkoICAzICAgNyApICAjIDk1IOKhhCAgIFtNRVNTQUdFIFdBSVRJTkddCitjaGFyIFx4OTYJKCAgMyAgNiAgKSAgIyA5NiDioKQgICBbU1RBUlQgT0YgR1VBUkRFRCBBUkVBXQorY2hhciBceDk3CSggIDMgIDY3ICkgICMgOTcg4qGkICAgW0VORCBPRiBHVUFSREVEIEFSRUFdCitjaGFyIFx4OTgJKCAgIDQgNiAgKSAgIyA5OCDioKggICBbU1RBUlQgT0YgU1RSSU5HXQorY2hhciBceDk5CSggMiAgIDYgOCkgICMgOTkg4qKiICAgWzxjb250cm9sLTAwOTk+XQorY2hhciBceDlBCSggMjM0ICAgOCkgICMgOUEg4qKOICAgW1NJTkdMRSBDSEFSQUNURVIgSU5UUk9EVUNFUl0KK2NoYXIgXHg5QgkoICAgNDU2NyApICAjIDlCIOKhuCAgIFtDT05UUk9MIFNFUVVFTkNFIElOVFJPRFVDRVJdCitjaGFyIFx4OUMJKDEgMyA1ICA4KSAgIyA5QyDiopUgICBbU1RSSU5HIFRFUk1JTkFUT1JdCitjaGFyIFx4OUQJKCAyMzQ1ICA4KSAgIyA5RCDiop4gICBbT1BFUkFUSU5HIFNZU1RFTSBDT01NQU5EXQorY2hhciBceDlFCSggIDM0IDYgICkgICMgOUUg4qCsICAgW1BSSVZBQ1kgTUVTU0FHRV0KK2NoYXIgXHg5RgkoIDIzNDU2NzgpICAjIDlGIOKjviAgIFtBUFBMSUNBVElPTiBQUk9HUkFNIENPTU1BTkRdCitjaGFyIFx4QTEJKCAyICA1NiAgKSAgIyBBMSDioLIgwqEgW0lOVkVSVEVEIEVYQ0xBTUFUSU9OIE1BUktdCitjaGFyIFx4QTIJKCAyICA1IDc4KSAgIyBBMiDio5IgwqIgW0NFTlQgU0lHTl0KK2NoYXIgXHhBMwkoMTIzICAgIDgpICAjIEEzIOKihyDCoyBbUE9VTkQgU0lHTl0KK2NoYXIgXHhBNAkoIDIzICA2NyApICAjIEE0IOKhpiDCpCBbQ1VSUkVOQ1kgU0lHTl0KK2NoYXIgXHhBNQkoICAgICA2NyApICAjIEE1IOKhoCDCpSBbWUVOIFNJR05dCitjaGFyIFx4QTYJKCAgMzQgIDc4KSAgIyBBNiDio4wgwqYgW0JST0tFTiBCQVJdCitjaGFyIFx4QTcJKCAgICA1IDc4KSAgIyBBNyDio5AgwqcgW1NFQ1RJT04gU0lHTl0KK2NoYXIgXHhBOAkoICAgIDU2ICApICAjIEE4IOKgsCDCqCBbRElBRVJFU0lTXQorY2hhciBceEE5CSggICAgICA3OCkgICMgQTkg4qOAIMKpIFtDT1BZUklHSFQgU0lHTl0KK2NoYXIgXHhBQQkoIDIzNCA2NzgpICAjIEFBIOKjriDCqiBbRkVNSU5JTkUgT1JESU5BTCBJTkRJQ0FUT1JdCitjaGFyIFx4QUIJKCAgICA1IDcgKSAgIyBBQiDioZAgwqsgW0xFRlQtUE9JTlRJTkcgRE9VQkxFIEFOR0xFIFFVT1RBVElPTiBNQVJLXQorY2hhciBceEFDCSggIDM0NTY3ICkgICMgQUMg4qG8IMKsIFtOT1QgU0lHTl0KK2NoYXIgXHhBRAkoICAzICAgNzgpICAjIEFEIOKjhCDCrSBbU09GVCBIWVBIRU5dCitjaGFyIFx4QUUJKDEgMyA1NiA4KSAgIyBBRSDiorUgwq4gW1JFR0lTVEVSRUQgU0lHTl0KK2NoYXIgXHhBRgkoIDIzIDU2NyApICAjIEFGIOKhtiDCryBbTUFDUk9OXQorY2hhciBceEIwCSggIDMgNTYgICkgICMgQjAg4qC0IMKwIFtERUdSRUUgU0lHTl0KK2NoYXIgXHhCMQkoMTIzNDUgIDgpICAjIEIxIOKinyDCsSBbUExVUy1NSU5VUyBTSUdOXQorY2hhciBceEIyCSggMjMgICAgOCkgICMgQjIg4qKGIMKyIFtTVVBFUlNDUklQVCBUV09dCitjaGFyIFx4QjMJKCAyICA1ICA4KSAgIyBCMyDiopIgwrMgW1NVUEVSU0NSSVBUIFRIUkVFXQorY2hhciBceEI0CSggICA0IDYgOCkgICMgQjQg4qKoIMK0IFtBQ1VURSBBQ0NFTlRdCitjaGFyIFx4QjUJKCAyMyAgNiAgKSAgIyBCNSDioKYgwrUgW01JQ1JPIFNJR05dCitjaGFyIFx4QjYJKDEyMzQ1NiA4KSAgIyBCNiDior8gwrYgW1BJTENST1cgU0lHTl0KK2NoYXIgXHhCNwkoICAzICAgIDgpICAjIEI3IOKihCDCtyBbTUlERExFIERPVF0KK2NoYXIgXHhCOAkoICAgNCA2NzgpICAjIEI4IOKjqCDCuCBbQ0VESUxMQV0KK2NoYXIgXHhCOQkoIDIgICAgIDgpICAjIEI5IOKigiDCuSBbU1VQRVJTQ1JJUFQgT05FXQorY2hhciBceEJBCSggICAgICA3ICkgICMgQkEg4qGAIMK6IFtNQVNDVUxJTkUgT1JESU5BTCBJTkRJQ0FUT1JdCitjaGFyIFx4QkIJKCAgICA1NjcgKSAgIyBCQiDiobAgwrsgW1JJR0hULVBPSU5USU5HIERPVUJMRSBBTkdMRSBRVU9UQVRJT04gTUFSS10KK2NoYXIgXHhCQwkoMSAzNDUgIDgpICAjIEJDIOKinSDCvCBbVlVMR0FSIEZSQUNUSU9OIE9ORSBRVUFSVEVSXQorY2hhciBceEJECSggICA0NSAgOCkgICMgQkQg4qKYIMK9IFtWVUxHQVIgRlJBQ1RJT04gT05FIEhBTEZdCitjaGFyIFx4QkUJKCAgMzQ1NiAgKSAgIyBCRSDioLwgwr4gW1ZVTEdBUiBGUkFDVElPTiBUSFJFRSBRVUFSVEVSU10KK2NoYXIgXHhCRgkoICAzNCAgIDgpICAjIEJGIOKijCDCvyBbSU5WRVJURUQgUVVFU1RJT04gTUFSS10KK2NoYXIgXHhDMAkoMTIzIDU2NyApICAjIEMwIOKhtyDDgCBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgQSBXSVRIIEdSQVZFXQorY2hhciBceEMxCSgxMjMgNTY3OCkgICMgQzEg4qO3IMOBIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBBIFdJVEggQUNVVEVdCitjaGFyIFx4QzIJKDEgICAgNjc4KSAgIyBDMiDio6Egw4IgW0xBVElOIENBUElUQUwgTEVUVEVSIEEgV0lUSCBDSVJDVU1GTEVYXQorY2hhciBceEMzCSgxICA0IDY3OCkgICMgQzMg4qOpIMODIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBBIFdJVEggVElMREVdCitjaGFyIFx4QzQJKCAgMzQ1IDc4KSAgIyBDNCDio5wgw4QgW0xBVElOIENBUElUQUwgTEVUVEVSIEEgV0lUSCBESUFFUkVTSVNdCitjaGFyIFx4QzUJKDEgICAgNjcgKSAgIyBDNSDioaEgw4UgW0xBVElOIENBUElUQUwgTEVUVEVSIEEgV0lUSCBSSU5HIEFCT1ZFXQorY2hhciBceEM2CSggIDM0NSA3ICkgICMgQzYg4qGcIMOGIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBBRV0KK2NoYXIgXHhDNwkoMTIzNCA2NyApICAjIEM3IOKhryDDhyBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgQyBXSVRIIENFRElMTEFdCitjaGFyIFx4QzgJKCAyMzQgNjcgKSAgIyBDOCDioa4gw4ggW0xBVElOIENBUElUQUwgTEVUVEVSIEUgV0lUSCBHUkFWRV0KK2NoYXIgXHhDOQkoMTIzNDU2NyApICAjIEM5IOKhvyDDiSBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgRSBXSVRIIEFDVVRFXQorY2hhciBceENBCSgxMiAgIDY3ICkgICMgQ0Eg4qGjIMOKIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBFIFdJVEggQ0lSQ1VNRkxFWF0KK2NoYXIgXHhDQgkoMTIgNCA2NyApICAjIENCIOKhqyDDiyBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgRSBXSVRIIERJQUVSRVNJU10KK2NoYXIgXHhDQwkoMSAgIDU2NzgpICAjIENDIOKjsSDDjCBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgSSBXSVRIIEdSQVZFXQorY2hhciBceENECSgxMiAgIDY3OCkgICMgQ0Qg4qOjIMONIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBJIFdJVEggQUNVVEVdCitjaGFyIFx4Q0UJKDEgIDQgNjcgKSAgIyBDRSDioakgw44gW0xBVElOIENBUElUQUwgTEVUVEVSIEkgV0lUSCBDSVJDVU1GTEVYXQorY2hhciBceENGCSgxMiA0NTY3ICkgICMgQ0Yg4qG7IMOPIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBJIFdJVEggRElBRVJFU0lTXQorY2hhciBceEQwCSggICAgIDYgOCkgICMgRDAg4qKgIMOQIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBFVEhdCitjaGFyIFx4RDEJKDEyIDQ1Njc4KSAgIyBEMSDio7sgw5EgW0xBVElOIENBUElUQUwgTEVUVEVSIE4gV0lUSCBUSUxERV0KK2NoYXIgXHhEMgkoMTIgNCA2NzgpICAjIEQyIOKjqyDDkiBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgTyBXSVRIIEdSQVZFXQorY2hhciBceEQzCSggIDM0IDY3OCkgICMgRDMg4qOsIMOTIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBPIFdJVEggQUNVVEVdCitjaGFyIFx4RDQJKDEgIDQ1NjcgKSAgIyBENCDiobkgw5QgW0xBVElOIENBUElUQUwgTEVUVEVSIE8gV0lUSCBDSVJDVU1GTEVYXQorY2hhciBceEQ1CSgxICA0NTY3OCkgICMgRDUg4qO5IMOVIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBPIFdJVEggVElMREVdCitjaGFyIFx4RDYJKCAyIDQgNjc4KSAgIyBENiDio6ogw5YgW0xBVElOIENBUElUQUwgTEVUVEVSIE8gV0lUSCBESUFFUkVTSVNdCitjaGFyIFx4RDcJKDEgMzQgNiA4KSAgIyBENyDioq0gw5cgW01VTFRJUExJQ0FUSU9OIFNJR05dCitjaGFyIFx4RDgJKCAyIDQgNjcgKSAgIyBEOCDioaogw5ggW0xBVElOIENBUElUQUwgTEVUVEVSIE8gV0lUSCBTVFJPS0VdCitjaGFyIFx4RDkJKCAyMzQ1NjcgKSAgIyBEOSDiob4gw5kgW0xBVElOIENBUElUQUwgTEVUVEVSIFUgV0lUSCBHUkFWRV0KK2NoYXIgXHhEQQkoMTIgIDU2NzgpICAjIERBIOKjsyDDmiBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgVSBXSVRIIEFDVVRFXQorY2hhciBceERCCSgxICAgNTY3ICkgICMgREIg4qGxIMObIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBVIFdJVEggQ0lSQ1VNRkxFWF0KK2NoYXIgXHhEQwkoMTIgIDU2NyApICAjIERDIOKhsyDDnCBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgVSBXSVRIIERJQUVSRVNJU10KK2NoYXIgXHhERAkoIDIgIDUgNyApICAjIEREIOKhkiDDnSBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgWSBXSVRIIEFDVVRFXQorY2hhciBceERFCSgxIDMgIDYgOCkgICMgREUg4qKlIMOeIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBUSE9STl0KK2NoYXIgXHhERgkoIDIzNCA2IDgpICAjIERGIOKiriDDnyBbTEFUSU4gU01BTEwgTEVUVEVSIFNIQVJQIFNdCitjaGFyIFx4RTAJKDEyMyA1NiAgKSAgIyBFMCDioLcgw6AgW0xBVElOIFNNQUxMIExFVFRFUiBBIFdJVEggR1JBVkVdCitjaGFyIFx4RTEJKDEyMyA1NiA4KSAgIyBFMSDiorcgw6EgW0xBVElOIFNNQUxMIExFVFRFUiBBIFdJVEggQUNVVEVdCitjaGFyIFx4RTIJKDEgICAgNiA4KSAgIyBFMiDioqEgw6IgW0xBVElOIFNNQUxMIExFVFRFUiBBIFdJVEggQ0lSQ1VNRkxFWF0KK2NoYXIgXHhFMwkoMSAgNCA2IDgpICAjIEUzIOKiqSDDoyBbTEFUSU4gU01BTEwgTEVUVEVSIEEgV0lUSCBUSUxERV0KK2NoYXIgXHhFNAkoICAzNDUgIDgpICAjIEU0IOKinCDDpCBbTEFUSU4gU01BTEwgTEVUVEVSIEEgV0lUSCBESUFFUkVTSVNdCitjaGFyIFx4RTUJKDEgICAgNiAgKSAgIyBFNSDioKEgw6UgW0xBVElOIFNNQUxMIExFVFRFUiBBIFdJVEggUklORyBBQk9WRV0KK2NoYXIgXHhFNgkoICAzNDUgICApICAjIEU2IOKgnCDDpiBbTEFUSU4gU01BTEwgTEVUVEVSIEFFXQorY2hhciBceEU3CSgxMjM0IDYgICkgICMgRTcg4qCvIMOnIFtMQVRJTiBTTUFMTCBMRVRURVIgQyBXSVRIIENFRElMTEFdCitjaGFyIFx4RTgJKCAyMzQgNiAgKSAgIyBFOCDioK4gw6ggW0xBVElOIFNNQUxMIExFVFRFUiBFIFdJVEggR1JBVkVdCitjaGFyIFx4RTkJKDEyMzQ1NiAgKSAgIyBFOSDioL8gw6kgW0xBVElOIFNNQUxMIExFVFRFUiBFIFdJVEggQUNVVEVdCitjaGFyIFx4RUEJKDEyICAgNiAgKSAgIyBFQSDioKMgw6ogW0xBVElOIFNNQUxMIExFVFRFUiBFIFdJVEggQ0lSQ1VNRkxFWF0KK2NoYXIgXHhFQgkoMTIgNCA2ICApICAjIEVCIOKgqyDDqyBbTEFUSU4gU01BTEwgTEVUVEVSIEUgV0lUSCBESUFFUkVTSVNdCitjaGFyIFx4RUMJKDEgICA1NiA4KSAgIyBFQyDiorEgw6wgW0xBVElOIFNNQUxMIExFVFRFUiBJIFdJVEggR1JBVkVdCitjaGFyIFx4RUQJKDEyICAgNiA4KSAgIyBFRCDioqMgw60gW0xBVElOIFNNQUxMIExFVFRFUiBJIFdJVEggQUNVVEVdCitjaGFyIFx4RUUJKDEgIDQgNiAgKSAgIyBFRSDioKkgw64gW0xBVElOIFNNQUxMIExFVFRFUiBJIFdJVEggQ0lSQ1VNRkxFWF0KK2NoYXIgXHhFRgkoMTIgNDU2ICApICAjIEVGIOKguyDDryBbTEFUSU4gU01BTEwgTEVUVEVSIEkgV0lUSCBESUFFUkVTSVNdCitjaGFyIFx4RjAJKDEgMzQ1NiA4KSAgIyBGMCDior0gw7AgW0xBVElOIFNNQUxMIExFVFRFUiBFVEhdCitjaGFyIFx4RjEJKDEyIDQ1NiA4KSAgIyBGMSDiorsgw7EgW0xBVElOIFNNQUxMIExFVFRFUiBOIFdJVEggVElMREVdCitjaGFyIFx4RjIJKDEyIDQgNiA4KSAgIyBGMiDioqsgw7IgW0xBVElOIFNNQUxMIExFVFRFUiBPIFdJVEggR1JBVkVdCitjaGFyIFx4RjMJKCAgMzQgNiA4KSAgIyBGMyDioqwgw7MgW0xBVElOIFNNQUxMIExFVFRFUiBPIFdJVEggQUNVVEVdCitjaGFyIFx4RjQJKDEgIDQ1NiAgKSAgIyBGNCDioLkgw7QgW0xBVElOIFNNQUxMIExFVFRFUiBPIFdJVEggQ0lSQ1VNRkxFWF0KK2NoYXIgXHhGNQkoMSAgNDU2IDgpICAjIEY1IOKiuSDDtSBbTEFUSU4gU01BTEwgTEVUVEVSIE8gV0lUSCBUSUxERV0KK2NoYXIgXHhGNgkoIDIgNCA2IDgpICAjIEY2IOKiqiDDtiBbTEFUSU4gU01BTEwgTEVUVEVSIE8gV0lUSCBESUFFUkVTSVNdCitjaGFyIFx4RjcJKCAyICA1NiA4KSAgIyBGNyDiorIgw7cgW0RJVklTSU9OIFNJR05dCitjaGFyIFx4RjgJKCAyIDQgNiAgKSAgIyBGOCDioKogw7ggW0xBVElOIFNNQUxMIExFVFRFUiBPIFdJVEggU1RST0tFXQorY2hhciBceEY5CSggMjM0NTYgICkgICMgRjkg4qC+IMO5IFtMQVRJTiBTTUFMTCBMRVRURVIgVSBXSVRIIEdSQVZFXQorY2hhciBceEZBCSgxMiAgNTYgOCkgICMgRkEg4qKzIMO6IFtMQVRJTiBTTUFMTCBMRVRURVIgVSBXSVRIIEFDVVRFXQorY2hhciBceEZCCSgxICAgNTYgICkgICMgRkIg4qCxIMO7IFtMQVRJTiBTTUFMTCBMRVRURVIgVSBXSVRIIENJUkNVTUZMRVhdCitjaGFyIFx4RkMJKDEyICA1NiAgKSAgIyBGQyDioLMgw7wgW0xBVElOIFNNQUxMIExFVFRFUiBVIFdJVEggRElBRVJFU0lTXQorY2hhciBceEZECSgxIDM0ICAgOCkgICMgRkQg4qKNIMO9IFtMQVRJTiBTTUFMTCBMRVRURVIgWSBXSVRIIEFDVVRFXQorY2hhciBceEZFCSgxIDMgICAgOCkgICMgRkUg4qKFIMO+IFtMQVRJTiBTTUFMTCBMRVRURVIgVEhPUk5dCitjaGFyIFx4RkYJKCAyMzQ1NiA4KSAgIyBGRiDior4gw78gW0xBVElOIFNNQUxMIExFVFRFUiBZIFdJVEggRElBRVJFU0lTXQorCitpbmNsdWRlIGNvbW1vbi50dGkKZGlmZiAtLWdpdCBhL1RhYmxlcy9UZXh0L2RlLWNoZXNzLnR0aSBiL1RhYmxlcy9UZXh0L2RlLWNoZXNzLnR0aQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YTE3Y2EzCi0tLSAvZGV2L251bGwKKysrIGIvVGFibGVzL1RleHQvZGUtY2hlc3MudHRpCkBAIC0wLDAgKzEsMzUgQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyMgICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisjCisjIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyMKKyMgQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjIFRoaXMgdGV4dCBzdWJ0YWJsZSBkZWZpbmVzIGJyYWlsbGUgcmVwcmVzZW50YXRpb25zIGZvciB0aGUgY2hlc3MgZmlndXJlcyBpbgorIyB0ZXJtcyBvZiB0aGUgbGV0dGVycyB0aGF0IGFyZSB1c2VkIGZvciB0aGVtIGluIHRoZSBHZXJtYW4gbGFuZ3VhZ2UuCisKKyMgU2VlOiBodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0NoZXNzX3N5bWJvbHNfaW5fVW5pY29kZQorCithbGlhcyBcdTI2NTQgSyAjIOKZlCBbV0hJVEUgQ0hFU1MgS0lOR10KK2FsaWFzIFx1MjY1NSBEICMg4pmVIFtXSElURSBDSEVTUyBRVUVFTl0KK2FsaWFzIFx1MjY1NiBUICMg4pmWIFtXSElURSBDSEVTUyBST09LXQorYWxpYXMgXHUyNjU3IEwgIyDimZcgW1dISVRFIENIRVNTIEJJU0hPUF0KK2FsaWFzIFx1MjY1OCBTICMg4pmYIFtXSElURSBDSEVTUyBLTklHSFRdCithbGlhcyBcdTI2NTkgQiAjIOKZmSBbV0hJVEUgQ0hFU1MgUEFXTl0KK2FsaWFzIFx1MjY1QSBrICMg4pmaIFtCTEFDSyBDSEVTUyBLSU5HXQorYWxpYXMgXHUyNjVCIGQgIyDimZsgW0JMQUNLIENIRVNTIFFVRUVOXQorYWxpYXMgXHUyNjVDIHQgIyDimZwgW0JMQUNLIENIRVNTIFJPT0tdCithbGlhcyBcdTI2NUQgbCAjIOKZnSBbQkxBQ0sgQ0hFU1MgQklTSE9QXQorYWxpYXMgXHUyNjVFIHMgIyDimZ4gW0JMQUNLIENIRVNTIEtOSUdIVF0KK2FsaWFzIFx1MjY1RiBiICMg4pmfIFtCTEFDSyBDSEVTUyBQQVdOXQpkaWZmIC0tZ2l0IGEvVGFibGVzL1RleHQvZGUudHRiIGIvVGFibGVzL1RleHQvZGUudHRiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRhYjQyYmMKLS0tIC9kZXYvbnVsbAorKysgYi9UYWJsZXMvVGV4dC9kZS50dGIKQEAgLTAsMCArMSwxODMgQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyMgICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisjCisjIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyMKKyMgQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjIEJSTFRUWSBUZXh0IFRhYmxlIC0gR2VybWFuCisKKyMgdGhlIHN0YW5kYXJkIHJlcHJlc2VudGF0aW9ucyBmb3IgdGhlIGxldHRlcnMgb2YgdGhlIExhdGluIGFscGhhYmV0CitpbmNsdWRlIGx0ci1sYXRpbi50dGkKKworIyB0aGUgc3RhbmRhcmQgcmVwcmVzZW50YXRpb25zIGZvciB0aGUgTGF0aW4gY29udHJvbCBjaGFyYWN0ZXJzCitpbmNsdWRlIGN0bC1sYXRpbi50dGkKKworIyB0aGUgbnVtYmVycyAxLTkgYXJlIHJlcHJlc2VudGVkIGJ5IHRoZSBsZXR0ZXJzIGEtaSB3aXRoIGRvdCA2IGFkZGVkCisjIHRoZSBudW1iZXIgMCBpcyByZXByZXNlbnRlZCBieSBkb3RzIDM0NgoraW5jbHVkZSBudW0tZG90Ni50dGkKKworIyBzcGVjaWFsIGNoYXJhY3RlcnMKK2NoYXIgXHUyMEFDCSggICA0NSA3ICkgICMg4qGYIOKCrCBbRVVSTyBTSUdOXQorCisjIGdlbmVyYXRlZCBieSB0dGJ0ZXN0OiBjaGFyc2V0PWlzby04ODU5LTEKK2NoYXIgXHgwMAkoICAzNDUgNzgpICAjIDAwIOKjnCAgIFtOVUxMXQorIyBMYXRpbiBjb250cm9sIGNoYXJhY3RlcnMgICMgMDEtMUEKK2NoYXIgXHgxQgkoMTIzIDU2NzgpICAjIDFCIOKjtyAgIFtFU0NBUEVdCitjaGFyIFx4MUMJKCAgMzQgIDc4KSAgIyAxQyDio4wgICBbSU5GT1JNQVRJT04gU0VQQVJBVE9SIEZPVVJdCitjaGFyIFx4MUQJKCAyMzQ1Njc4KSAgIyAxRCDio74gICBbSU5GT1JNQVRJT04gU0VQQVJBVE9SIFRIUkVFXQorY2hhciBceDFFCSggMjM0IDY3OCkgICMgMUUg4qOuICAgW0lORk9STUFUSU9OIFNFUEFSQVRPUiBUV09dCitjaGFyIFx4MUYJKCAgIDQ1Njc4KSAgIyAxRiDio7ggICBbSU5GT1JNQVRJT04gU0VQQVJBVE9SIE9ORV0KK2NoYXIgXHgyMAkoICAgICAgICApICAjIDIwIOKggCAgIFtTUEFDRV0KK2NoYXIgXHgyMQkoICAgIDUgICApICAjIDIxIOKgkCAhIFtFWENMQU1BVElPTiBNQVJLXQorY2hhciBceDIyCSggICA0ICAgICkgICMgMjIg4qCIICIgW1FVT1RBVElPTiBNQVJLXQorY2hhciBceDIzCSggIDM0NTYgICkgICMgMjMg4qC8ICMgW05VTUJFUiBTSUdOXQorY2hhciBceDI0CSggICA0IDYgICkgICMgMjQg4qCoICQgW0RPTExBUiBTSUdOXQorY2hhciBceDI1CSgxMjM0NTYgICkgICMgMjUg4qC/ICUgW1BFUkNFTlQgU0lHTl0KK2NoYXIgXHgyNgkoMTIzNCA2ICApICAjIDI2IOKgryAmIFtBTVBFUlNBTkRdCitjaGFyIFx4MjcJKCAgICAgNiAgKSAgIyAyNyDioKAgJyBbQVBPU1RST1BIRV0KK2NoYXIgXHgyOAkoIDIzICA2ICApICAjIDI4IOKgpiAoIFtMRUZUIFBBUkVOVEhFU0lTXQorY2hhciBceDI5CSggIDMgNTYgICkgICMgMjkg4qC0ICkgW1JJR0hUIFBBUkVOVEhFU0lTXQorY2hhciBceDJBCSggIDMgNSAgICkgICMgMkEg4qCUICogW0FTVEVSSVNLXQorY2hhciBceDJCCSggMjMgNSAgICkgICMgMkIg4qCWICsgW1BMVVMgU0lHTl0KK2NoYXIgXHgyQwkoIDIgICAgICApICAjIDJDIOKggiAsIFtDT01NQV0KK2NoYXIgXHgyRAkoICAzICA2ICApICAjIDJEIOKgpCAtIFtIWVBIRU4tTUlOVVNdCitjaGFyIFx4MkUJKCAgMyAgICAgKSAgIyAyRSDioIQgLiBbRlVMTCBTVE9QXQorY2hhciBceDJGCSggMiAgNTYgICkgICMgMkYg4qCyIC8gW1NPTElEVVNdCisjIEhpbmR1LUFyYWJpYyBudW1lcmFscyAgICAgIyAzMC0zOQorY2hhciBceDNBCSggMiAgNSAgICkgICMgM0Eg4qCSIDogW0NPTE9OXQorY2hhciBceDNCCSggMjMgICAgICkgICMgM0Ig4qCGIDsgW1NFTUlDT0xPTl0KK2NoYXIgXHgzQwkoICAgIDU2ICApICAjIDNDIOKgsCA8IFtMRVNTLVRIQU4gU0lHTl0KK2NoYXIgXHgzRAkoIDIzIDU2ICApICAjIDNEIOKgtiA9IFtFUVVBTFMgU0lHTl0KK2NoYXIgXHgzRQkoICAgNDUgICApICAjIDNFIOKgmCA+IFtHUkVBVEVSLVRIQU4gU0lHTl0KK2NoYXIgXHgzRgkoIDIgICA2ICApICAjIDNGIOKgoiA/IFtRVUVTVElPTiBNQVJLXQorY2hhciBceDQwCSggIDM0NSA3ICkgICMgNDAg4qGcIEAgW0NPTU1FUkNJQUwgQVRdCisjIHVwcGVyY2FzZSBMYXRpbiBhbHBoYWJldCAgIyA0MS01QQorY2hhciBceDVCCSgxMjMgNTY3ICkgICMgNUIg4qG3IFsgW0xFRlQgU1FVQVJFIEJSQUNLRVRdCitjaGFyIFx4NUMJKCAgMzQgIDcgKSAgIyA1QyDioYwgXCBbUkVWRVJTRSBTT0xJRFVTXQorY2hhciBceDVECSggMjM0NTY3ICkgICMgNUQg4qG+IF0gW1JJR0hUIFNRVUFSRSBCUkFDS0VUXQorY2hhciBceDVFCSggMjM0IDY3ICkgICMgNUUg4qGuIF4gW0NJUkNVTUZMRVggQUNDRU5UXQorY2hhciBceDVGCSggICA0NTY3ICkgICMgNUYg4qG4IF8gW0xPVyBMSU5FXQorY2hhciBceDYwCSggIDM0NSAgICkgICMgNjAg4qCcIGAgW0dSQVZFIEFDQ0VOVF0KKyMgbG93ZXJjYXNlIExhdGluIGFscGhhYmV0ICAjIDYxLTdBCitjaGFyIFx4N0IJKDEyMyA1NiAgKSAgIyA3QiDioLcgeyBbTEVGVCBDVVJMWSBCUkFDS0VUXQorY2hhciBceDdDCSggIDM0ICAgICkgICMgN0Mg4qCMIHwgW1ZFUlRJQ0FMIExJTkVdCitjaGFyIFx4N0QJKCAyMzQ1NiAgKSAgIyA3RCDioL4gfSBbUklHSFQgQ1VSTFkgQlJBQ0tFVF0KK2NoYXIgXHg3RQkoIDIzNCA2ICApICAjIDdFIOKgriB+IFtUSUxERV0KK2NoYXIgXHg3RgkoICAgNDU2ICApICAjIDdGIOKguCAgIFtERUxFVEVdCitjaGFyIFx4QTEJKCAgMyAgNjcgKSAgIyBBMSDioaQgwqEgW0lOVkVSVEVEIEVYQ0xBTUFUSU9OIE1BUktdCitjaGFyIFx4QTIJKCAgICA1ICA4KSAgIyBBMiDiopAgwqIgW0NFTlQgU0lHTl0KK2NoYXIgXHhBMwkoICAgNCA2NyApICAjIEEzIOKhqCDCoyBbUE9VTkQgU0lHTl0KK2NoYXIgXHhBNAkoICAzICA2NzgpICAjIEE0IOKjpCDCpCBbQ1VSUkVOQ1kgU0lHTl0KK2NoYXIgXHhBNQkoICAgNCA2IDgpICAjIEE1IOKiqCDCpSBbWUVOIFNJR05dCitjaGFyIFx4QTYJKCAyICAgNjc4KSAgIyBBNiDio6IgwqYgW0JST0tFTiBCQVJdCitjaGFyIFx4QTcJKDEyMzQ1Njc4KSAgIyBBNyDio78gwqcgW1NFQ1RJT04gU0lHTl0KK2NoYXIgXHhBOAkoIDIgICAgNzgpICAjIEE4IOKjgiDCqCBbRElBRVJFU0lTXQorY2hhciBceEE5CSgxICA0NTY3ICkgICMgQTkg4qG5IMKpIFtDT1BZUklHSFQgU0lHTl0KK2NoYXIgXHhBQQkoMTIgIDUgIDgpICAjIEFBIOKikyDCqiBbRkVNSU5JTkUgT1JESU5BTCBJTkRJQ0FUT1JdCitjaGFyIFx4QUIJKCAgICA1Njc4KSAgIyBBQiDio7AgwqsgW0xFRlQtUE9JTlRJTkcgRE9VQkxFIEFOR0xFIFFVT1RBVElPTiBNQVJLXQorY2hhciBceEFDCSggMiAgNTY3OCkgICMgQUMg4qOyIMKsIFtOT1QgU0lHTl0KK2NoYXIgXHhBRAkoMTIgNCAgIDgpICAjIEFEIOKiiyDCrSBbU09GVCBIWVBIRU5dCitjaGFyIFx4QUUJKCAgIDQgNjc4KSAgIyBBRSDio6ggwq4gW1JFR0lTVEVSRUQgU0lHTl0KK2NoYXIgXHhBRgkoMTIgNDUgIDgpICAjIEFGIOKimyDCryBbTUFDUk9OXQorY2hhciBceEIwCSggICA0NTYgOCkgICMgQjAg4qK4IMKwIFtERUdSRUUgU0lHTl0KK2NoYXIgXHhCMQkoIDIzIDUgNzgpICAjIEIxIOKjliDCsSBbUExVUy1NSU5VUyBTSUdOXQorY2hhciBceEIyCSgxMiAgICAgOCkgICMgQjIg4qKDIMKyIFtTVVBFUlNDUklQVCBUV09dCitjaGFyIFx4QjMJKCAyMyAgIDcgKSAgIyBCMyDioYYgwrMgW1NVUEVSU0NSSVBUIFRIUkVFXQorY2hhciBceEI0CSgxIDMgNTYgOCkgICMgQjQg4qK1IMK0IFtBQ1VURSBBQ0NFTlRdCitjaGFyIFx4QjUJKDEgMzQgICA4KSAgIyBCNSDioo0gwrUgW01JQ1JPIFNJR05dCitjaGFyIFx4QjYJKDEyMzQ1Njc4KSAgIyBCNiDio78gwrYgW1BJTENST1cgU0lHTl0KK2NoYXIgXHhCNwkoICAzICAgNyApICAjIEI3IOKhhCDCtyBbTUlERExFIERPVF0KK2NoYXIgXHhCOAkoMSAgNCAgIDgpICAjIEI4IOKiiSDCuCBbQ0VESUxMQV0KK2NoYXIgXHhCOQkoICAgNDUgNyApICAjIEI5IOKhmCDCuSBbU1VQRVJTQ1JJUFQgT05FXQorY2hhciBceEJBCSggMiA0NSAgOCkgICMgQkEg4qKaIMK6IFtNQVNDVUxJTkUgT1JESU5BTCBJTkRJQ0FUT1JdCitjaGFyIFx4QkIJKCAgIDQ1IDc4KSAgIyBCQiDio5ggwrsgW1JJR0hULVBPSU5USU5HIERPVUJMRSBBTkdMRSBRVU9UQVRJT04gTUFSS10KK2NoYXIgXHhCQwkoMSAzICA2IDgpICAjIEJDIOKipSDCvCBbVlVMR0FSIEZSQUNUSU9OIE9ORSBRVUFSVEVSXQorY2hhciBceEJECSgxMjMgIDYgOCkgICMgQkQg4qKnIMK9IFtWVUxHQVIgRlJBQ1RJT04gT05FIEhBTEZdCitjaGFyIFx4QkUJKCAgMzQgNjc4KSAgIyBCRSDio6wgwr4gW1ZVTEdBUiBGUkFDVElPTiBUSFJFRSBRVUFSVEVSU10KK2NoYXIgXHhCRgkoICAzICAgIDgpICAjIEJGIOKihCDCvyBbSU5WRVJURUQgUVVFU1RJT04gTUFSS10KK2NoYXIgXHhDMAkoICAzICAgNzgpICAjIEMwIOKjhCDDgCBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgQSBXSVRIIEdSQVZFXQorY2hhciBceEMxCSggMiAgICA3ICkgICMgQzEg4qGCIMOBIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBBIFdJVEggQUNVVEVdCitjaGFyIFx4QzIJKDEgMyAgICA4KSAgIyBDMiDiooUgw4IgW0xBVElOIENBUElUQUwgTEVUVEVSIEEgV0lUSCBDSVJDVU1GTEVYXQorY2hhciBceEMzCSggMjMgIDY3ICkgICMgQzMg4qGmIMODIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBBIFdJVEggVElMREVdCitjaGFyIFx4QzQJKCAgICA1NjcgKSAgIyBDNCDiobAgw4QgW0xBVElOIENBUElUQUwgTEVUVEVSIEEgV0lUSCBESUFFUkVTSVNdCitjaGFyIFx4QzUJKCAgMzQ1NjcgKSAgIyBDNSDiobwgw4UgW0xBVElOIENBUElUQUwgTEVUVEVSIEEgV0lUSCBSSU5HIEFCT1ZFXQorY2hhciBceEM2CSggICA0ICA3ICkgICMgQzYg4qGIIMOGIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBBRV0KK2NoYXIgXHhDNwkoMTIzNCA2NyApICAjIEM3IOKhryDDhyBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgQyBXSVRIIENFRElMTEFdCitjaGFyIFx4QzgJKCAyMyAgIDc4KSAgIyBDOCDio4Ygw4ggW0xBVElOIENBUElUQUwgTEVUVEVSIEUgV0lUSCBHUkFWRV0KK2NoYXIgXHhDOQkoIDIzICAgIDgpICAjIEM5IOKihiDDiSBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgRSBXSVRIIEFDVVRFXQorY2hhciBceENBCSggICAgICAgOCkgICMgQ0Eg4qKAIMOKIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBFIFdJVEggQ0lSQ1VNRkxFWF0KK2NoYXIgXHhDQgkoMTIzNDUgIDgpICAjIENCIOKinyDDiyBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgRSBXSVRIIERJQUVSRVNJU10KK2NoYXIgXHhDQwkoMTIzICAgIDgpICAjIENDIOKihyDDjCBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgSSBXSVRIIEdSQVZFXQorY2hhciBceENECSggMiAgNSA3OCkgICMgQ0Qg4qOSIMONIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBJIFdJVEggQUNVVEVdCitjaGFyIFx4Q0UJKDEyIDQ1Njc4KSAgIyBDRSDio7sgw44gW0xBVElOIENBUElUQUwgTEVUVEVSIEkgV0lUSCBDSVJDVU1GTEVYXQorY2hhciBceENGCSgxICAgIDY3ICkgICMgQ0Yg4qGhIMOPIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBJIFdJVEggRElBRVJFU0lTXQorY2hhciBceEQwCSggICAgNSA3ICkgICMgRDAg4qGQIMOQIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBFVEhdCitjaGFyIFx4RDEJKCAyICA1NjcgKSAgIyBEMSDiobIgw5EgW0xBVElOIENBUElUQUwgTEVUVEVSIE4gV0lUSCBUSUxERV0KK2NoYXIgXHhEMgkoIDIgICAgIDgpICAjIEQyIOKigiDDkiBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgTyBXSVRIIEdSQVZFXQorY2hhciBceEQzCSggMiA0IDY3OCkgICMgRDMg4qOqIMOTIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBPIFdJVEggQUNVVEVdCitjaGFyIFx4RDQJKCAyIDQgICA4KSAgIyBENCDiooogw5QgW0xBVElOIENBUElUQUwgTEVUVEVSIE8gV0lUSCBDSVJDVU1GTEVYXQorY2hhciBceEQ1CSgxMjM0IDYgOCkgICMgRDUg4qKvIMOVIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBPIFdJVEggVElMREVdCitjaGFyIFx4RDYJKCAgMyA1ICA4KSAgIyBENiDiopQgw5YgW0xBVElOIENBUElUQUwgTEVUVEVSIE8gV0lUSCBESUFFUkVTSVNdCitjaGFyIFx4RDcJKDEyMyA1ICA4KSAgIyBENyDiopcgw5cgW01VTFRJUExJQ0FUSU9OIFNJR05dCitjaGFyIFx4RDgJKCAgMyA1NjcgKSAgIyBEOCDiobQgw5ggW0xBVElOIENBUElUQUwgTEVUVEVSIE8gV0lUSCBTVFJPS0VdCitjaGFyIFx4RDkJKCAgICAgNjc4KSAgIyBEOSDio6Agw5kgW0xBVElOIENBUElUQUwgTEVUVEVSIFUgV0lUSCBHUkFWRV0KK2NoYXIgXHhEQQkoIDIgIDUgNyApICAjIERBIOKhkiDDmiBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgVSBXSVRIIEFDVVRFXQorY2hhciBceERCCSgxMjM0NTY3OCkgICMgREIg4qO/IMObIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBVIFdJVEggQ0lSQ1VNRkxFWF0KK2NoYXIgXHhEQwkoIDIzICA2IDgpICAjIERDIOKipiDDnCBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgVSBXSVRIIERJQUVSRVNJU10KK2NoYXIgXHhERAkoIDIzICA2NzgpICAjIEREIOKjpiDDnSBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgWSBXSVRIIEFDVVRFXQorY2hhciBceERFCSggIDMgNTY3OCkgICMgREUg4qO0IMOeIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBUSE9STl0KK2NoYXIgXHhERgkoICAzNDU2IDgpICAjIERGIOKivCDDnyBbTEFUSU4gU01BTEwgTEVUVEVSIFNIQVJQIFNdCitjaGFyIFx4RTAJKDEyMyA1NiA4KSAgIyBFMCDiorcgw6AgW0xBVElOIFNNQUxMIExFVFRFUiBBIFdJVEggR1JBVkVdCitjaGFyIFx4RTEJKDEgICAgNiA4KSAgIyBFMSDioqEgw6EgW0xBVElOIFNNQUxMIExFVFRFUiBBIFdJVEggQUNVVEVdCitjaGFyIFx4RTIJKDEgICAgNjc4KSAgIyBFMiDio6Egw6IgW0xBVElOIFNNQUxMIExFVFRFUiBBIFdJVEggQ0lSQ1VNRkxFWF0KK2NoYXIgXHhFMwkoMTIzNCAgIDgpICAjIEUzIOKijyDDoyBbTEFUSU4gU01BTEwgTEVUVEVSIEEgV0lUSCBUSUxERV0KK2NoYXIgXHhFNAkoICAzNDUgIDgpICAjIEU0IOKinCDDpCBbTEFUSU4gU01BTEwgTEVUVEVSIEEgV0lUSCBESUFFUkVTSVNdCitjaGFyIFx4RTUJKCAgMzQ1Njc4KSAgIyBFNSDio7wgw6UgW0xBVElOIFNNQUxMIExFVFRFUiBBIFdJVEggUklORyBBQk9WRV0KK2NoYXIgXHhFNgkoICAgNCAgNzgpICAjIEU2IOKjiCDDpiBbTEFUSU4gU01BTEwgTEVUVEVSIEFFXQorY2hhciBceEU3CSgxMjM0IDY3OCkgICMgRTcg4qOvIMOnIFtMQVRJTiBTTUFMTCBMRVRURVIgQyBXSVRIIENFRElMTEFdCitjaGFyIFx4RTgJKCAyMzQgNiA4KSAgIyBFOCDioq4gw6ggW0xBVElOIFNNQUxMIExFVFRFUiBFIFdJVEggR1JBVkVdCitjaGFyIFx4RTkJKDEyICAgNiA4KSAgIyBFOSDioqMgw6kgW0xBVElOIFNNQUxMIExFVFRFUiBFIFdJVEggQUNVVEVdCitjaGFyIFx4RUEJKDEyICAgNjc4KSAgIyBFQSDio6Mgw6ogW0xBVElOIFNNQUxMIExFVFRFUiBFIFdJVEggQ0lSQ1VNRkxFWF0KK2NoYXIgXHhFQgkoMTIgNCA2IDgpICAjIEVCIOKiqyDDqyBbTEFUSU4gU01BTEwgTEVUVEVSIEUgV0lUSCBESUFFUkVTSVNdCitjaGFyIFx4RUMJKCAgMzQgICA4KSAgIyBFQyDioowgw6wgW0xBVElOIFNNQUxMIExFVFRFUiBJIFdJVEggR1JBVkVdCitjaGFyIFx4RUQJKDEgIDQgNiA4KSAgIyBFRCDioqkgw60gW0xBVElOIFNNQUxMIExFVFRFUiBJIFdJVEggQUNVVEVdCitjaGFyIFx4RUUJKDEgIDQgNjc4KSAgIyBFRSDio6kgw64gW0xBVElOIFNNQUxMIExFVFRFUiBJIFdJVEggQ0lSQ1VNRkxFWF0KK2NoYXIgXHhFRgkoMTIgNDU2IDgpICAjIEVGIOKiuyDDryBbTEFUSU4gU01BTEwgTEVUVEVSIEkgV0lUSCBESUFFUkVTSVNdCitjaGFyIFx4RjAJKCAyMyA1NiA4KSAgIyBGMCDiorYgw7AgW0xBVElOIFNNQUxMIExFVFRFUiBFVEhdCitjaGFyIFx4RjEJKDEgMzQ1ICA4KSAgIyBGMSDiop0gw7EgW0xBVElOIFNNQUxMIExFVFRFUiBOIFdJVEggVElMREVdCitjaGFyIFx4RjIJKCAgMzQgNiA4KSAgIyBGMiDioqwgw7IgW0xBVElOIFNNQUxMIExFVFRFUiBPIFdJVEggR1JBVkVdCitjaGFyIFx4RjMJKDEgIDQ1NiA4KSAgIyBGMyDiorkgw7MgW0xBVElOIFNNQUxMIExFVFRFUiBPIFdJVEggQUNVVEVdCitjaGFyIFx4RjQJKDEgIDQ1Njc4KSAgIyBGNCDio7kgw7QgW0xBVElOIFNNQUxMIExFVFRFUiBPIFdJVEggQ0lSQ1VNRkxFWF0KK2NoYXIgXHhGNQkoMSAgIDU2NyApICAjIEY1IOKhsSDDtSBbTEFUSU4gU01BTEwgTEVUVEVSIE8gV0lUSCBUSUxERV0KK2NoYXIgXHhGNgkoIDIgNCA2IDgpICAjIEY2IOKiqiDDtiBbTEFUSU4gU01BTEwgTEVUVEVSIE8gV0lUSCBESUFFUkVTSVNdCitjaGFyIFx4RjcJKDEyICA1Njc4KSAgIyBGNyDio7Mgw7cgW0RJVklTSU9OIFNJR05dCitjaGFyIFx4RjgJKCAgICAgIDc4KSAgIyBGOCDio4Agw7ggW0xBVElOIFNNQUxMIExFVFRFUiBPIFdJVEggU1RST0tFXQorY2hhciBceEY5CSggMjM0NTYgOCkgICMgRjkg4qK+IMO5IFtMQVRJTiBTTUFMTCBMRVRURVIgVSBXSVRIIEdSQVZFXQorY2hhciBceEZBCSgxICAgNTYgOCkgICMgRkEg4qKxIMO6IFtMQVRJTiBTTUFMTCBMRVRURVIgVSBXSVRIIEFDVVRFXQorY2hhciBceEZCCSgxICAgNTY3OCkgICMgRkIg4qOxIMO7IFtMQVRJTiBTTUFMTCBMRVRURVIgVSBXSVRIIENJUkNVTUZMRVhdCitjaGFyIFx4RkMJKDEyICA1NiA4KSAgIyBGQyDiorMgw7wgW0xBVElOIFNNQUxMIExFVFRFUiBVIFdJVEggRElBRVJFU0lTXQorY2hhciBceEZECSggMjMgNTY3OCkgICMgRkQg4qO2IMO9IFtMQVRJTiBTTUFMTCBMRVRURVIgWSBXSVRIIEFDVVRFXQorY2hhciBceEZFCSgxMjM0NTY3ICkgICMgRkUg4qG/IMO+IFtMQVRJTiBTTUFMTCBMRVRURVIgVEhPUk5dCitjaGFyIFx4RkYJKDEyMzQ1NiA4KSAgIyBGRiDior8gw78gW0xBVElOIFNNQUxMIExFVFRFUiBZIFdJVEggRElBRVJFU0lTXQorCithbGlhcwlcdTIwMTkJXHgyNwkjIOKAmSBbUklHSFQgU0lOR0xFIFFVT1RBVElPTiBNQVJLXQorYWxpYXMJXHUyMjk1CVx4MkIJIyDiipUgW0NJUkNMRUQgUExVU10KK2FsaWFzCVx1MjI5NglceDJECSMg4oqWIFtDSVJDTEVEIE1JTlVTXQorYWxpYXMJXHUyMjk4CVx4MkYJIyDiipggW0NJUkNMRUQgRElWSVNJT04gU0xBU0hdCithbGlhcwlcdTIyOUIJXHgyQQkjIOKKmyBbQ0lSQ0xFRCBBU1RFUklTSyBPUEVSQVRPUl0KK2FsaWFzCVx1MjI5QwlceDNECSMg4oqcIFtDSVJDTEVEIEVRVUFMU10KKworaW5jbHVkZSBkZS1jaGVzcy50dGkKK2luY2x1ZGUgY29tbW9uLnR0aQpkaWZmIC0tZ2l0IGEvVGFibGVzL1RleHQvZGV2YW5hZ2FyaS50dGkgYi9UYWJsZXMvVGV4dC9kZXZhbmFnYXJpLnR0aQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNGY5Y2QwCi0tLSAvZGV2L251bGwKKysrIGIvVGFibGVzL1RleHQvZGV2YW5hZ2FyaS50dGkKQEAgLTAsMCArMSwxMDkgQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyMgICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisjCisjIENvcHlyaWdodCAoQykgMjAwOC0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyMKKyMgQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjIFRoaXMgQlJMVFRZIHRleHQgc3VidGFibGUgZGVmaW5lcyB0aGUgYnJhaWxsZSByZXByZXNlbnRhdGlvbnMKKyMgZm9yIHRoZSBEZXZhbmFnYXJpIHNjcmlwdC4KKworIyBNYWludGFpbmVkIGJ5IEpvaG4gSi4gQm95ZXIsIGRpcmVjdG9yQGNocGkub3JnLCB3d3cuY2hwaS5vcmcKKyMKKyMgVGhpcyB0YWJsZSBpcyBidWlsdCBhbmQgbWFpbnRhaW5lZCBieSBMZW9uIFVuZ2llciA8TGVvbi5VbmdpZXJAVmlld1BsdXMuY29tPgorIyB3aXRoIGhlbHAgYW5kIGd1aWRhbmNlIGZyb20gTW9oYW1tZWQgUi4gUmFtYWRhbiA8bXJhbWFkYW5AbmF0dGlxLmNvbT4KKyMKKyMgQ29udmVydGVkIGZyb20gbGlibG91aXMgdGFibGUgYnkgU2FtdWVsIFRoaWJhdWx0IDxzYW11ZWwudGhpYmF1bHRAZW5zLWx5b24ub3JnPgorCisjIGdlbmVyYXRlZCBieSB0dGJ0ZXN0OgorY2hhciBcdTA5MDEJKCAgMyAgICAgKSAgIyDioIQg4KSBIFtERVZBTkFHQVJJIFNJR04gQ0FORFJBQklORFVdCitjaGFyIFx1MDkwMgkoICAgIDU2ICApICAjIOKgsCDgpIIgW0RFVkFOQUdBUkkgU0lHTiBBTlVTVkFSQV0KK2NoYXIgXHUwOTAzCSggICAgIDYgICkgICMg4qCgIOCkgyBbREVWQU5BR0FSSSBTSUdOIFZJU0FSR0FdCitjaGFyIFx1MDkwNQkoMSAgICAgICApICAjIOKggSDgpIUgW0RFVkFOQUdBUkkgTEVUVEVSIEFdCitjaGFyIFx1MDkwNgkoICAzNDUgICApICAjIOKgnCDgpIYgW0RFVkFOQUdBUkkgTEVUVEVSIEFBXQorY2hhciBcdTA5MDcJKCAyIDQgICAgKSAgIyDioIog4KSHIFtERVZBTkFHQVJJIExFVFRFUiBJXQorY2hhciBcdTA5MDgJKCAgMyA1ICAgKSAgIyDioJQg4KSIIFtERVZBTkFHQVJJIExFVFRFUiBJSV0KK2NoYXIgXHUwOTA5CSgxIDMgIDYgICkgICMg4qClIOCkiSBbREVWQU5BR0FSSSBMRVRURVIgVV0KK2NoYXIgXHUwOTBBCSgxMiAgNTYgICkgICMg4qCzIOCkiiBbREVWQU5BR0FSSSBMRVRURVIgVVVdCitjaGFyIFx1MDkwRAkoMSAgIDUgNyApICAjIOKhkSDgpI0gW0RFVkFOQUdBUkkgTEVUVEVSIENBTkRSQSBFXQorY2hhciBcdTA5MEUJKCAgMzQgIDcgKSAgIyDioYwg4KSOIFtERVZBTkFHQVJJIExFVFRFUiBTSE9SVCBFXQorY2hhciBcdTA5MEYJKDEgICA1ICAgKSAgIyDioJEg4KSPIFtERVZBTkFHQVJJIExFVFRFUiBFXQorY2hhciBcdTA5MTAJKCAgMzQgICAgKSAgIyDioIwg4KSQIFtERVZBTkFHQVJJIExFVFRFUiBBSV0KK2NoYXIgXHUwOTExCSgxIDMgNSA3ICkgICMg4qGVIOCkkSBbREVWQU5BR0FSSSBMRVRURVIgQ0FORFJBIE9dCitjaGFyIFx1MDkxMgkoIDIgNCA2NyApICAjIOKhqiDgpJIgW0RFVkFOQUdBUkkgTEVUVEVSIFNIT1JUIE9dCitjaGFyIFx1MDkxMwkoMSAzIDUgICApICAjIOKglSDgpJMgW0RFVkFOQUdBUkkgTEVUVEVSIE9dCitjaGFyIFx1MDkxNAkoIDIgNCA2ICApICAjIOKgqiDgpJQgW0RFVkFOQUdBUkkgTEVUVEVSIEFVXQorY2hhciBcdTA5MTUJKDEgMyAgICAgKSAgIyDioIUg4KSVIFtERVZBTkFHQVJJIExFVFRFUiBLQV0KK2NoYXIgXHUwOTE2CSggICA0IDYgICkgICMg4qCoIOCkliBbREVWQU5BR0FSSSBMRVRURVIgS0hBXQorY2hhciBcdTA5MTcJKDEyMzQgICAgKSAgIyDioI8g4KSXIFtERVZBTkFHQVJJIExFVFRFUiBHQV0KK2NoYXIgXHUwOTE4CSgxMiAgIDYgICkgICMg4qCjIOCkmCBbREVWQU5BR0FSSSBMRVRURVIgR0hBXQorY2hhciBcdTA5MTkJKCAgMzQgNiAgKSAgIyDioKwg4KSZIFtERVZBTkFHQVJJIExFVFRFUiBOR0FdCitjaGFyIFx1MDkxQQkoMSAgNCAgICApICAjIOKgiSDgpJogW0RFVkFOQUdBUkkgTEVUVEVSIENBXQorY2hhciBcdTA5MUIJKDEgICAgNiAgKSAgIyDioKEg4KSbIFtERVZBTkFHQVJJIExFVFRFUiBDSEFdCitjaGFyIFx1MDkxQwkoIDIgNDUgICApICAjIOKgmiDgpJwgW0RFVkFOQUdBUkkgTEVUVEVSIEpBXQorY2hhciBcdTA5MUQJKCAgMyA1NiAgKSAgIyDioLQg4KSdIFtERVZBTkFHQVJJIExFVFRFUiBKSEFdCitjaGFyIFx1MDkxRQkoIDIgIDUgICApICAjIOKgkiDgpJ4gW0RFVkFOQUdBUkkgTEVUVEVSIE5ZQV0KK2NoYXIgXHUwOTFGCSggMjM0NTYgICkgICMg4qC+IOCknyBbREVWQU5BR0FSSSBMRVRURVIgVFRBXQorY2hhciBcdTA5MjAJKCAyIDQ1NiAgKSAgIyDioLog4KSgIFtERVZBTkFHQVJJIExFVFRFUiBUVEhBXQorY2hhciBcdTA5MjEJKDEyIDQgNiAgKSAgIyDioKsg4KShIFtERVZBTkFHQVJJIExFVFRFUiBEREFdCitjaGFyIFx1MDkyMgkoMTIzNDU2ICApICAjIOKgvyDgpKIgW0RFVkFOQUdBUkkgTEVUVEVSIERESEFdCitjaGFyIFx1MDkyMwkoICAzNDU2ICApICAjIOKgvCDgpKMgW0RFVkFOQUdBUkkgTEVUVEVSIE5OQV0KK2NoYXIgXHUwOTI0CSggMjM0NSAgICkgICMg4qCeIOCkpCBbREVWQU5BR0FSSSBMRVRURVIgVEFdCitjaGFyIFx1MDkyNQkoMSAgNDU2ICApICAjIOKguSDgpKUgW0RFVkFOQUdBUkkgTEVUVEVSIFRIQV0KK2NoYXIgXHUwOTI2CSgxICA0NSAgICkgICMg4qCZIOCkpiBbREVWQU5BR0FSSSBMRVRURVIgREFdCitjaGFyIFx1MDkyNwkoIDIzNCA2ICApICAjIOKgriDgpKcgW0RFVkFOQUdBUkkgTEVUVEVSIERIQV0KK2NoYXIgXHUwOTI4CSgxIDM0NSAgICkgICMg4qCdIOCkqCBbREVWQU5BR0FSSSBMRVRURVIgTkFdCitjaGFyIFx1MDkyOQkoICAgIDU2ICApICAjIOKgsCDgpKkgW0RFVkFOQUdBUkkgTEVUVEVSIE5OTkFdCitjaGFyIFx1MDkyQQkoMTIzNCAgICApICAjIOKgjyDgpKogW0RFVkFOQUdBUkkgTEVUVEVSIFBBXQorY2hhciBcdTA5MkIJKCAyMyA1ICAgKSAgIyDioJYg4KSrIFtERVZBTkFHQVJJIExFVFRFUiBQSEFdCitjaGFyIFx1MDkyQwkoMTIgICAgICApICAjIOKggyDgpKwgW0RFVkFOQUdBUkkgTEVUVEVSIEJBXQorY2hhciBcdTA5MkQJKCAgIDQ1ICAgKSAgIyDioJgg4KStIFtERVZBTkFHQVJJIExFVFRFUiBCSEFdCitjaGFyIFx1MDkyRQkoMSAzNCAgICApICAjIOKgjSDgpK4gW0RFVkFOQUdBUkkgTEVUVEVSIE1BXQorY2hhciBcdTA5MkYJKDEgMzQ1NiAgKSAgIyDioL0g4KSvIFtERVZBTkFHQVJJIExFVFRFUiBZQV0KK2NoYXIgXHUwOTMwCSgxMjMgNSAgICkgICMg4qCXIOCksCBbREVWQU5BR0FSSSBMRVRURVIgUkFdCitjaGFyIFx1MDkzMQkoMTIzIDUgNyApICAjIOKhlyDgpLEgW0RFVkFOQUdBUkkgTEVUVEVSIFJSQV0KK2NoYXIgXHUwOTMyCSgxMjMgICAgICkgICMg4qCHIOCksiBbREVWQU5BR0FSSSBMRVRURVIgTEFdCitjaGFyIFx1MDkzMwkoMTIzICAgNyApICAjIOKhhyDgpLMgW0RFVkFOQUdBUkkgTEVUVEVSIExMQV0KK2NoYXIgXHUwOTM0CSgxMjMgICA3OCkgICMg4qOHIOCktCBbREVWQU5BR0FSSSBMRVRURVIgTExMQV0KK2NoYXIgXHUwOTM1CSgxMjMgIDYgICkgICMg4qCnIOCktSBbREVWQU5BR0FSSSBMRVRURVIgVkFdCitjaGFyIFx1MDkzNgkoMSAgNCA2ICApICAjIOKgqSDgpLYgW0RFVkFOQUdBUkkgTEVUVEVSIFNIQV0KK2NoYXIgXHUwOTM3CSgxMjM0IDYgICkgICMg4qCvIOCktyBbREVWQU5BR0FSSSBMRVRURVIgU1NBXQorY2hhciBcdTA5MzgJKCAyMzQgICAgKSAgIyDioI4g4KS4IFtERVZBTkFHQVJJIExFVFRFUiBTQV0KK2NoYXIgXHUwOTM5CSgxMiAgNSAgICkgICMg4qCTIOCkuSBbREVWQU5BR0FSSSBMRVRURVIgSEFdCitjaGFyIFx1MDkzRAkoIDIgICAgICApICAjIOKggiDgpL0gW0RFVkFOQUdBUkkgU0lHTiBBVkFHUkFIQV0KK2NoYXIgXHUwOTNFCSggIDM0NSAgICkgICMg4qCcIOCkviBbREVWQU5BR0FSSSBWT1dFTCBTSUdOIEFBXQorY2hhciBcdTA5M0YJKCAyIDQgICAgKSAgIyDioIog4KS/IFtERVZBTkFHQVJJIFZPV0VMIFNJR04gSV0KK2NoYXIgXHUwOTQwCSggIDMgNSAgICkgICMg4qCUIOClgCBbREVWQU5BR0FSSSBWT1dFTCBTSUdOIElJXQorY2hhciBcdTA5NDEJKDEgMyAgNiAgKSAgIyDioKUg4KWBIFtERVZBTkFHQVJJIFZPV0VMIFNJR04gVV0KK2NoYXIgXHUwOTQyCSgxMiAgNTYgICkgICMg4qCzIOClgiBbREVWQU5BR0FSSSBWT1dFTCBTSUdOIFVVXQorY2hhciBcdTA5NDUJKDEgICA1IDcgKSAgIyDioZEg4KWFIFtERVZBTkFHQVJJIFZPV0VMIFNJR04gQ0FORFJBIEVdCitjaGFyIFx1MDk0NgkoICAzNCAgNyApICAjIOKhjCDgpYYgW0RFVkFOQUdBUkkgVk9XRUwgU0lHTiBTSE9SVCBFXQorY2hhciBcdTA5NDcJKDEgICA1ICAgKSAgIyDioJEg4KWHIFtERVZBTkFHQVJJIFZPV0VMIFNJR04gRV0KK2NoYXIgXHUwOTQ4CSggIDM0ICAgICkgICMg4qCMIOCliCBbREVWQU5BR0FSSSBWT1dFTCBTSUdOIEFJXQorY2hhciBcdTA5NDkJKDEgMyA1IDcgKSAgIyDioZUg4KWJIFtERVZBTkFHQVJJIFZPV0VMIFNJR04gQ0FORFJBIE9dCitjaGFyIFx1MDk0QQkoIDIgNCA2NyApICAjIOKhqiDgpYogW0RFVkFOQUdBUkkgVk9XRUwgU0lHTiBTSE9SVCBPXQorY2hhciBcdTA5NEIJKDEgMyA1ICAgKSAgIyDioJUg4KWLIFtERVZBTkFHQVJJIFZPV0VMIFNJR04gT10KK2NoYXIgXHUwOTRDCSggMiA0IDYgICkgICMg4qCqIOCljCBbREVWQU5BR0FSSSBWT1dFTCBTSUdOIEFVXQorY2hhciBcdTA5NEQJKCAgIDQgICAgKSAgIyDioIgg4KWNIFtERVZBTkFHQVJJIFNJR04gVklSQU1BXQorY2hhciBcdTA5NjQJKCAyICA1NiAgKSAgIyDioLIg4KWkIFtERVZBTkFHQVJJIERBTkRBXQorY2hhciBcdTA5NjYJKCAyIDQ1ICAgKSAgIyDioJog4KWmIFtERVZBTkFHQVJJIERJR0lUIFpFUk9dCitjaGFyIFx1MDk2NwkoMSAgICAgICApICAjIOKggSDgpacgW0RFVkFOQUdBUkkgRElHSVQgT05FXQorY2hhciBcdTA5NjgJKDEyICAgICAgKSAgIyDioIMg4KWoIFtERVZBTkFHQVJJIERJR0lUIFRXT10KK2NoYXIgXHUwOTY5CSgxICA0ICAgICkgICMg4qCJIOClqSBbREVWQU5BR0FSSSBESUdJVCBUSFJFRV0KK2NoYXIgXHUwOTZBCSgxICA0NSAgICkgICMg4qCZIOClqiBbREVWQU5BR0FSSSBESUdJVCBGT1VSXQorY2hhciBcdTA5NkIJKDEgICA1ICAgKSAgIyDioJEg4KWrIFtERVZBTkFHQVJJIERJR0lUIEZJVkVdCitjaGFyIFx1MDk2QwkoMTIgNCAgICApICAjIOKgiyDgpawgW0RFVkFOQUdBUkkgRElHSVQgU0lYXQorY2hhciBcdTA5NkQJKDEyIDQ1ICAgKSAgIyDioJsg4KWtIFtERVZBTkFHQVJJIERJR0lUIFNFVkVOXQorY2hhciBcdTA5NkUJKDEyICA1ICAgKSAgIyDioJMg4KWuIFtERVZBTkFHQVJJIERJR0lUIEVJR0hUXQorY2hhciBcdTA5NkYJKCAyIDQgICAgKSAgIyDioIog4KWvIFtERVZBTkFHQVJJIERJR0lUIE5JTkVdCmRpZmYgLS1naXQgYS9UYWJsZXMvVGV4dC9kcmEudHRiIGIvVGFibGVzL1RleHQvZHJhLnR0YgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wN2JiMWQ3Ci0tLSAvZGV2L251bGwKKysrIGIvVGFibGVzL1RleHQvZHJhLnR0YgpAQCAtMCwwICsxLDI0IEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisjICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorIworIyBDb3B5cmlnaHQgKEMpIDIwMDgtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisjCisjIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisjCisjIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyMgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorIyBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyMKKyMgV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworIworIyBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIyBCUkxUVFkgVGV4dCBUYWJsZSAtIERyYXZpZGlhbgorCitpbmNsdWRlIHRhbWlsLnR0aQoraW5jbHVkZSBhc2NpaS1iYXNpYy50dGkKKworaW5jbHVkZSBjb21tb24udHRpCmRpZmYgLS1naXQgYS9UYWJsZXMvVGV4dC9lbC50dGIgYi9UYWJsZXMvVGV4dC9lbC50dGIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWEyMjg1ZgotLS0gL2Rldi9udWxsCisrKyBiL1RhYmxlcy9UZXh0L2VsLnR0YgpAQCAtMCwwICsxLDk1IEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisjICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorIworIyBDb3B5cmlnaHQgKEMpIDIwMDgtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisjCisjIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisjCisjIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyMgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorIyBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyMKKyMgV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworIworIyBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIyBCUkxUVFkgVGV4dCBUYWJsZSAtIEdyZWVrCisKKyMgQ3JlYXRlZCBieSBMZW9uIFVuZ2llciA8TGVvbi5VbmdpZXJAVmlld1BsdXMuY29tPi4KKyMKKyMgQ29udmVydGVkIGZyb20gbGlibG91aXMgdGFibGUgYnkgU2FtdWVsIFRoaWJhdWx0IDxzYW11ZWwudGhpYmF1bHRAZW5zLWx5b24ub3JnPgorCitpbmNsdWRlIGdyZWVrLnR0aQoraW5jbHVkZSBsdHItbGF0aW4udHRpCisKK2NoYXIJXHgyRAkoICAzICA2ICApCSMg4qCkIC0gW0hZUEhFTi1NSU5VU10KKworY2hhcglceDI3CSggIDMgICAgICkJIyDioIQgJyBbQVBPU1RST1BIRV0KK2NoYXIJXHgyQwkoIDIgICAgICApCSMg4qCCICwgW0NPTU1BXQorY2hhcglceDNBCSggMiAgNSAgICkJIyDioJIgOiBbQ09MT05dCitjaGFyCVx4MkUJKCAyICA1NiAgKQkjIOKgsiAuIFtGVUxMIFNUT1BdCitjaGFyCVx4MjEJKCAyMyA1ICAgKQkjIOKgliAhIFtFWENMQU1BVElPTiBNQVJLXQorCitjaGFyCVx4MjgJKDEyMyA1NiAgKQkjIOKgtyAoIFtMRUZUIFBBUkVOVEhFU0lTXQorY2hhcglceDI5CSggMjM0NTYgICkJIyDioL4gKSBbUklHSFQgUEFSRU5USEVTSVNdCisKK2NoYXIJXHg1QgkoMTIzIDU2NzgpCeKjtyDDgCBbIFtMRUZUIFNRVUFSRSBCUkFDS0VUXQorY2hhcglceDVECSggMjM0NTY3OCkJIyDio74gXSBbUklHSFQgU1FVQVJFIEJSQUNLRVRdCisKK2NoYXIJXHg3QgkoMTIzNCA2NzgpCSMg4qOvIHsgW0xFRlQgQ1VSTFkgQlJBQ0tFVF0KK2NoYXIJXHg3RAkoMSAzNDU2NzgpCSMg4qO9IH0gW1JJR0hUIENVUkxZIEJSQUNLRVRdCisKK2NoYXIJXHgyMgkoIDIzIDU2ICApCSMg4qC2ICIgW1FVT1RBVElPTiBNQVJLXQorY2hhcglceEFCCSggMjMgIDYgICkJIyDioKYgwqsgW0xFRlQtUE9JTlRJTkcgRE9VQkxFIEFOR0xFIFFVT1RBVElPTiBNQVJLXQorY2hhcglceEJCCSggIDMgNTYgICkJIyDioLQgwrsgW1JJR0hULVBPSU5USU5HIERPVUJMRSBBTkdMRSBRVU9UQVRJT04gTUFSS10KKworY2hhcglceDJGCSggIDM0ICAgICkJIyDioIwgLyBbU09MSURVU10KK2NoYXIJXHg1QwkoMSAgICA2ICApCSMg4qChIFwgW1JFVkVSU0UgU09MSURVU10KKworY2hhcglceDYwCSggICA0ICAgICkJIyDioIggYCBbR1JBVkUgQUNDRU5UXQorY2hhcglceDVFCSggICAgIDYgICkJIyDioKAgXiBbQ0lSQ1VNRkxFWCBBQ0NFTlRdCitjaGFyCVx4N0UJKCAgIDQ1ICAgKQkjIOKgmCB+IFtUSUxERV0KK2NoYXIJXHg1RgkoICAgNDU2ICApCSMg4qC4IF8gW0xPVyBMSU5FXQorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgVGhlIGNoYXJhY3RlcnMgYmVsb3cgaGF2ZSBub3QgeWV0IGJlZW4gYXVkaXRlZC4gIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK2NoYXIJXHgyMwkoICAzNDU2NyApCSMg4qC8ICMgW05VTUJFUiBTSUdOXQorY2hhcglceDI2CSgxMjM0IDYgICkJIyDioK8gJiBbQU1QRVJTQU5EXQorY2hhcglceDJBCSggIDMgNSAgICkJIyDioJQgKiBbQVNURVJJU0tdCitjaGFyCVx4MkIJKCAyICAgNiAgKQkjIOKgoiArIFtQTFVTIFNJR05dCitjaGFyCVx4M0IJKCAyICAgNiAgKQkjIOKgoiA7IFtTRU1JQ09MT05dCitjaGFyCVx4M0QJKCAgMyAgNiAgKQkjIOKgpCA9IFtFUVVBTFMgU0lHTl0KK2NoYXIJXHgzRgkoIDIzICA2ICApCSMg4qCmID8gW1FVRVNUSU9OIE1BUktdCitjaGFyCVx4NDAJKCAgMzQ1ICAgKQkjIOKgnCBAIFtDT01NRVJDSUFMIEFUXQorY2hhcglceDdDCSgxMiAgNTYgICkJIyDioLMgfCBbVkVSVElDQUwgTElORV0KKworY2hhciBceDMwCSggMiA0NSAgICkgICMg4qCaIDAgW0RJR0lUIFpFUk9dCitjaGFyIFx4MzEJKDEgICAgICAgKSAgIyDioIEgMSBbRElHSVQgT05FXQorY2hhciBceDMyCSgxMiAgICAgICkgICMg4qCDIDIgW0RJR0lUIFRXT10KK2NoYXIgXHgzMwkoMSAgNCAgICApICAjIOKgiSAzIFtESUdJVCBUSFJFRV0KK2NoYXIgXHgzNAkoMSAgNDUgICApICAjIOKgmSA0IFtESUdJVCBGT1VSXQorY2hhciBceDM1CSgxICAgNSAgICkgICMg4qCRIDUgW0RJR0lUIEZJVkVdCitjaGFyIFx4MzYJKDEyIDQgICAgKSAgIyDioIsgNiBbRElHSVQgU0lYXQorY2hhciBceDM3CSgxMiA0NSAgICkgICMg4qCbIDcgW0RJR0lUIFNFVkVOXQorY2hhciBceDM4CSgxMiAgNSAgICkgICMg4qCTIDggW0RJR0lUIEVJR0hUXQorY2hhciBceDM5CSggMiA0ICAgICkgICMg4qCKIDkgW0RJR0lUIE5JTkVdCisKK2NoYXIgXHUyMDE4CSggIDMgICAgICkgICMg4qCEIOKAmCBbTEVGVCBTSU5HTEUgUVVPVEFUSU9OIE1BUktdCitjaGFyIFx1MjAxOQkoICAzICAgICApICAjIOKghCDigJkgW1JJR0hUIFNJTkdMRSBRVU9UQVRJT04gTUFSS10KK2NoYXIgXHUyMEFDCSgxICAgNSAgICkgICMg4qCRIOKCrCBbRVVSTyBTSUdOXQorY2hhciBceEE3CSggIDM0IDYgICkgICMg4qCsIMKnIFtTRUNUSU9OIFNJR05dCitjaGFyIFx4QjAJKCAgMyA1NiAgKSAgIyDioLQgwrAgW0RFR1JFRSBTSUdOXQorY2hhciBceEI3CSggMjMgICAgICkgICMg4qCGIMK3IFtNSURETEUgRE9UXQorY2hhciBceEEyCSgxICA0ICAgICkgICMg4qCJIMKiIFtDRU5UIFNJR05dCitjaGFyIFx4QTUJKDEgMzQ1NiAgKSAgIyDioL0gwqUgW1lFTiBTSUdOXQorY2hhciBceEFBCSggICA0IDYgICkgICMg4qCoIMKqIFtGRU1JTklORSBPUkRJTkFMIElORElDQVRPUl0KK2NoYXIgXHhCNQkoMTIzNDU2ICApICAjIOKgvyDCtSBbTUlDUk8gU0lHTl0KK2NoYXIgXHhCOAkoICAgNDUgICApICAjIOKgmCDCuCBbQ0VESUxMQV0KK2NoYXIgXHhCRgkoICAzIDUgICApICAjIOKglCDCvyBbSU5WRVJURUQgUVVFU1RJT04gTUFSS10KKworaW5jbHVkZSBjb21tb24udHRpCmRpZmYgLS1naXQgYS9UYWJsZXMvVGV4dC9lbi1jaGVzcy50dGkgYi9UYWJsZXMvVGV4dC9lbi1jaGVzcy50dGkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTk1MWU1OAotLS0gL2Rldi9udWxsCisrKyBiL1RhYmxlcy9UZXh0L2VuLWNoZXNzLnR0aQpAQCAtMCwwICsxLDM1IEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisjICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorIworIyBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisjCisjIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisjCisjIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyMgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorIyBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyMKKyMgV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworIworIyBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIyBUaGlzIHRleHQgc3VidGFibGUgZGVmaW5lcyBicmFpbGxlIHJlcHJlc2VudGF0aW9ucyBmb3IgdGhlIGNoZXNzIGZpZ3VyZXMgaW4KKyMgdGVybXMgb2YgdGhlIGxldHRlcnMgdGhhdCBhcmUgdXNlZCBmb3IgdGhlbSBpbiB0aGUgRW5nbGlzaCBsYW5ndWFnZS4KKworIyBTZWU6IGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvQ2hlc3Nfc3ltYm9sc19pbl9Vbmljb2RlCisKK2FsaWFzIFx1MjY1NCBLICMg4pmUIFtXSElURSBDSEVTUyBLSU5HXQorYWxpYXMgXHUyNjU1IFEgIyDimZUgW1dISVRFIENIRVNTIFFVRUVOXQorYWxpYXMgXHUyNjU2IFIgIyDimZYgW1dISVRFIENIRVNTIFJPT0tdCithbGlhcyBcdTI2NTcgQiAjIOKZlyBbV0hJVEUgQ0hFU1MgQklTSE9QXQorYWxpYXMgXHUyNjU4IE4gIyDimZggW1dISVRFIENIRVNTIEtOSUdIVF0KK2FsaWFzIFx1MjY1OSBQICMg4pmZIFtXSElURSBDSEVTUyBQQVdOXQorYWxpYXMgXHUyNjVBIGsgIyDimZogW0JMQUNLIENIRVNTIEtJTkddCithbGlhcyBcdTI2NUIgcSAjIOKZmyBbQkxBQ0sgQ0hFU1MgUVVFRU5dCithbGlhcyBcdTI2NUMgciAjIOKZnCBbQkxBQ0sgQ0hFU1MgUk9PS10KK2FsaWFzIFx1MjY1RCBiICMg4pmdIFtCTEFDSyBDSEVTUyBCSVNIT1BdCithbGlhcyBcdTI2NUUgbiAjIOKZniBbQkxBQ0sgQ0hFU1MgS05JR0hUXQorYWxpYXMgXHUyNjVGIHAgIyDimZ8gW0JMQUNLIENIRVNTIFBBV05dCmRpZmYgLS1naXQgYS9UYWJsZXMvVGV4dC9lbi1uYS1hc2NpaS50dGkgYi9UYWJsZXMvVGV4dC9lbi1uYS1hc2NpaS50dGkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmQ2ZWRhOQotLS0gL2Rldi9udWxsCisrKyBiL1RhYmxlcy9UZXh0L2VuLW5hLWFzY2lpLnR0aQpAQCAtMCwwICsxLDYzIEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisjICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorIworIyBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisjCisjIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisjCisjIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyMgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorIyBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyMKKyMgV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworIworIyBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIyBUaGlzIEJSTFRUWSB0ZXh0IHN1YnRhYmxlIGRlZmluZXMgdGhlIGJyYWlsbGUgcmVwcmVzZW50YXRpb25zIHRoYXQgYXJlIHVzZWQKKyMgYnkgRW5nbGlzaC1zcGVha2luZyBOb3J0aCBBbWVyaWNhbiB1c2VycyBmb3IgdGhlIEFTQ0lJIGNoYXJhY3RlciBzZXQuCisKKyMgdGhlIHN0YW5kYXJkIHJlcHJlc2VudGF0aW9ucyBmb3IgdGhlIGxldHRlcnMgb2YgdGhlIExhdGluIGFscGhhYmV0CitpbmNsdWRlIGx0ci1sYXRpbi50dGkKKworIyB0aGUgbnVtYmVycyAwLTkgYXJlIHJlcHJlc2VudGVkIHVzaW5nIHRoZSBOZW1ldGggKGxvd2VyIG51bWJlcnMpIHNjaGVtZQoraW5jbHVkZSBudW0tbmVtZXRoLnR0aQorCitjaGFyIFx4MjAJKCAgICAgICAgKSAgIyDioIAgICBbU1BBQ0VdCitjaGFyIFx4MjEJKCAyMzQgNiAgKSAgIyDioK4gISBbRVhDTEFNQVRJT04gTUFSS10KK2NoYXIgXHgyMgkoICAgIDUgICApICAjIOKgkCAiIFtRVU9UQVRJT04gTUFSS10KK2NoYXIgXHgyMwkoICAzNDU2ICApICAjIOKgvCAjIFtOVU1CRVIgU0lHTl0KK2NoYXIgXHgyNAkoMTIgNCA2ICApICAjIOKgqyAkIFtET0xMQVIgU0lHTl0KK2NoYXIgXHgyNQkoMSAgNCA2ICApICAjIOKgqSAlIFtQRVJDRU5UIFNJR05dCitjaGFyIFx4MjYJKDEyMzQgNiAgKSAgIyDioK8gJiBbQU1QRVJTQU5EXQorY2hhciBceDI3CSggIDMgICAgICkgICMg4qCEICcgW0FQT1NUUk9QSEVdCitjaGFyIFx4MjgJKDEyMyA1NiAgKSAgIyDioLcgKCBbTEVGVCBQQVJFTlRIRVNJU10KK2NoYXIgXHgyOQkoIDIzNDU2ICApICAjIOKgviApIFtSSUdIVCBQQVJFTlRIRVNJU10KK2NoYXIgXHgyQQkoMSAgICA2ICApICAjIOKgoSAqIFtBU1RFUklTS10KK2NoYXIgXHgyQgkoICAzNCA2ICApICAjIOKgrCArIFtQTFVTIFNJR05dCitjaGFyIFx4MkMJKCAgICAgNiAgKSAgIyDioKAgLCBbQ09NTUFdCitjaGFyIFx4MkQJKCAgMyAgNiAgKSAgIyDioKQgLSBbSFlQSEVOLU1JTlVTXQorY2hhciBceDJFCSggICA0IDYgICkgICMg4qCoIC4gW0ZVTEwgU1RPUF0KK2NoYXIgXHgyRgkoICAzNCAgICApICAjIOKgjCAvIFtTT0xJRFVTXQorIyBIaW5kdS1BcmFiaWMgbnVtZXJhbHMgICAgICMgMzAtMzkKK2NoYXIgXHgzQQkoMSAgIDU2ICApICAjIOKgsSA6IFtDT0xPTl0KK2NoYXIgXHgzQgkoICAgIDU2ICApICAjIOKgsCA7IFtTRU1JQ09MT05dCitjaGFyIFx4M0MJKDEyICAgNiAgKSAgIyDioKMgPCBbTEVTUy1USEFOIFNJR05dCitjaGFyIFx4M0QJKDEyMzQ1NiAgKSAgIyDioL8gPSBbRVFVQUxTIFNJR05dCitjaGFyIFx4M0UJKCAgMzQ1ICAgKSAgIyDioJwgPiBbR1JFQVRFUi1USEFOIFNJR05dCitjaGFyIFx4M0YJKDEgIDQ1NiAgKSAgIyDioLkgPyBbUVVFU1RJT04gTUFSS10KK2NoYXIgXHg0MAkoICAgNCAgNyApICAjIOKhiCBAIFtDT01NRVJDSUFMIEFUXQorIyB1cHBlcmNhc2UgTGF0aW4gYWxwaGFiZXQgICMgNDEtNUEKK2NoYXIgXHg1QgkoIDIgNCA2NyApICAjIOKhqiBbIFtMRUZUIFNRVUFSRSBCUkFDS0VUXQorY2hhciBceDVDCSgxMiAgNTY3ICkgICMg4qGzIFwgW1JFVkVSU0UgU09MSURVU10KK2NoYXIgXHg1RAkoMTIgNDU2NyApICAjIOKhuyBdIFtSSUdIVCBTUVVBUkUgQlJBQ0tFVF0KK2NoYXIgXHg1RQkoICAgNDUgNyApICAjIOKhmCBeIFtDSVJDVU1GTEVYIEFDQ0VOVF0KK2NoYXIgXHg1RgkoICAgNDU2ICApICAjIOKguCBfIFtMT1cgTElORV0KK2NoYXIgXHg2MAkoICAgNCAgICApICAjIOKgiCBgIFtHUkFWRSBBQ0NFTlRdCisjIGxvd2VyY2FzZSBMYXRpbiBhbHBoYWJldCAgIyA2MS03QQorY2hhciBceDdCCSggMiA0IDYgICkgICMg4qCqIHsgW0xFRlQgQ1VSTFkgQlJBQ0tFVF0KK2NoYXIgXHg3QwkoMTIgIDU2ICApICAjIOKgsyB8IFtWRVJUSUNBTCBMSU5FXQorY2hhciBceDdECSgxMiA0NTYgICkgICMg4qC7IH0gW1JJR0hUIENVUkxZIEJSQUNLRVRdCitjaGFyIFx4N0UJKCAgIDQ1ICAgKSAgIyDioJggfiBbVElMREVdCmRpZmYgLS1naXQgYS9UYWJsZXMvVGV4dC9lbi1uYWJjYy50dGIgYi9UYWJsZXMvVGV4dC9lbi1uYWJjYy50dGIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWMyNGRjNAotLS0gL2Rldi9udWxsCisrKyBiL1RhYmxlcy9UZXh0L2VuLW5hYmNjLnR0YgpAQCAtMCwwICsxLDQyMSBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorIyAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyMKKyMgQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorIworIyBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorIworIyBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisjIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyMgbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisjCisjIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMgQlJMVFRZIFRleHQgVGFibGUgLSBFbmdsaXNoIChOb3J0aCBBbWVyaWNhbiBCcmFpbGxlIENvbXB1dGVyIENvZGUpCisKKyMgVGhpcyBpcyBhIGRlc2NyaXB0aW9uIG9mIHRoZSBkZWZhdWx0IHRleHQgdGFibGUgdXNlZCBieSBCUkxUVFkuICAKKyMgSXQncyBiYXNlZCBvbiB0aGUgTm9ydGggQW1lcmljYW4gQnJhaWxsZSBDb21wdXRlciBDb2RlLCBidXQgZGVmaW5lcyB0aGUgZnVsbAorIyBMYXRpbjEgKElTTy04ODU5LTEpIGNoYXJhY3RlciBzZXQuCisKKyMgVGhlIDk1IHByaW50YWJsZSBjaGFyYWN0ZXJzIG9mIHRoZSBzdGFuZGFyZCA3LWJpdCBVUy1BU0NJSSBjaGFyYWN0ZXIgc2V0CisjICgzMi0xMjYpIGFyZSBpZGVudGljYWwgdG8gdGhlaXIgcmVwcmVzZW50YXRpb25zIHdpdGhpbiB0aGUgTm9ydGggQW1lcmljYW4KKyMgQnJhaWxsZSBDb21wdXRlciBDb2RlICh0aGVzZSBhcmUgdGhlIG9ubHkgY2hhcmFjdGVycyB3aGljaCB0aGUgTkFCQ0MgYWN0dWFsbHkKKyMgZGVmaW5lcykuIENoYXJhY3RlcnMgZnJvbSBsaXRlcmFyeSBicmFpbGxlLCBzeW1ib2xzIGZyb20gVGhlIE5lbWV0aCBCcmFpbGxlCisjIENvZGUgZm9yIE1hdGhlbWF0aWNzIGFuZCBTY2llbmNlIE5vdGF0aW9uLCBhbmQgYSBiaXQgb2YgaHVtYW4gaW1hZ2luYXRpb24KKyMgaGF2ZSBhbGwgYmVlbiBjb21iaW5lZCB0byBjcmVhdGUgYW4gZWFzeS10by1yZW1lbWJlciwgb25lLXRvLW9uZSBtYXBwaW5nCisjIGJldHdlZW4gZWFjaCBjaGFyYWN0ZXIgYW5kIGl0cyBicmFpbGxlIGNvdW50ZXJwYXJ0LiBBbGwgcG9zc2libGUgY29tYmluYXRpb25zCisjIGludm9sdmluZyBvbmx5IHRoZSBvcmlnaW5hbCA2IGJyYWlsbGUgZG90cyBhcmUgdXNlZCwgYnV0IHRoYXQgb25seSBhbGxvd3MgZm9yCisjIDY0IG91dCBvZiB0aGUgcmVxdWlyZWQgOTUgY2hhcmFjdGVyIHJlcHJlc2VudGF0aW9ucy4gVGhlIHByZXNlbmNlIG9yIGFic2VuY2UKKyMgb2YgZG90IDcgaXMgdXNlZCB0byBkaWZmZXJlbnRpYXRlIGJldHdlZW4gcGFpcnMgb2YgY2hhcmFjdGVycyB3aGljaCBlaXRoZXIKKyMgYXJlIHZlcnkgY2xvc2VseSByZWxhdGVkIGluIG1lYW5pbmcgb3IsIGluIGEgZmV3IGNhc2VzIHdoZXJlIGEgbW9yZSBpbnR1aXRpdmUKKyMgcmVhc29uIGNvdWxkbid0IGJlIGZvdW5kLCBoYXZlIGEgdmVyeSBjbG9zZSBsb2dpY2FsIHJlbGF0aW9uc2hpcCB3aXRoaW4gdGhlCisjIFVTLUFTQ0lJIGNvZGUuIERvdCA4IGlzbid0IHVzZWQgYXQgYWxsLgorCisjIFRoZSBzcGFjZSBhbmQgdGhlIDI2IGxvd2VyY2FzZSBsZXR0ZXJzIChhLXopIGFyZSB0aGUgc2FtZSBhcyBpbiBsaXRlcmFyeSAKKyMgYnJhaWxsZToKKworICAgICAjSGV4ICAgIERvdHMgICAgICAgRGVjIENoYXIgRGVzY3JpcHRpb24KK2NoYXIgXFgyMCAoICAgICAgICApICAjICAzMiAgICAgIHNwYWNlCitjaGFyIFxYNjEgKDEgICAgICAgKSAgIyAgOTcgICBhICBsYXRpbiBzbWFsbCBsZXR0ZXIgYQorY2hhciBcWDYyICgxMiAgICAgICkgICMgIDk4ICAgYiAgbGF0aW4gc21hbGwgbGV0dGVyIGIKK2NoYXIgXFg2MyAoMSAgNCAgICApICAjICA5OSAgIGMgIGxhdGluIHNtYWxsIGxldHRlciBjCitjaGFyIFxYNjQgKDEgIDQ1ICAgKSAgIyAxMDAgICBkICBsYXRpbiBzbWFsbCBsZXR0ZXIgZAorY2hhciBcWDY1ICgxICAgNSAgICkgICMgMTAxICAgZSAgbGF0aW4gc21hbGwgbGV0dGVyIGUKK2NoYXIgXFg2NiAoMTIgNCAgICApICAjIDEwMiAgIGYgIGxhdGluIHNtYWxsIGxldHRlciBmCitjaGFyIFxYNjcgKDEyIDQ1ICAgKSAgIyAxMDMgICBnICBsYXRpbiBzbWFsbCBsZXR0ZXIgZworY2hhciBcWDY4ICgxMiAgNSAgICkgICMgMTA0ICAgaCAgbGF0aW4gc21hbGwgbGV0dGVyIGgKK2NoYXIgXFg2OSAoIDIgNCAgICApICAjIDEwNSAgIGkgIGxhdGluIHNtYWxsIGxldHRlciBpCitjaGFyIFxYNkEgKCAyIDQ1ICAgKSAgIyAxMDYgICBqICBsYXRpbiBzbWFsbCBsZXR0ZXIgagorY2hhciBcWDZCICgxIDMgICAgICkgICMgMTA3ICAgayAgbGF0aW4gc21hbGwgbGV0dGVyIGsKK2NoYXIgXFg2QyAoMTIzICAgICApICAjIDEwOCAgIGwgIGxhdGluIHNtYWxsIGxldHRlciBsCitjaGFyIFxYNkQgKDEgMzQgICAgKSAgIyAxMDkgICBtICBsYXRpbiBzbWFsbCBsZXR0ZXIgbQorY2hhciBcWDZFICgxIDM0NSAgICkgICMgMTEwICAgbiAgbGF0aW4gc21hbGwgbGV0dGVyIG4KK2NoYXIgXFg2RiAoMSAzIDUgICApICAjIDExMSAgIG8gIGxhdGluIHNtYWxsIGxldHRlciBvCitjaGFyIFxYNzAgKDEyMzQgICAgKSAgIyAxMTIgICBwICBsYXRpbiBzbWFsbCBsZXR0ZXIgcAorY2hhciBcWDcxICgxMjM0NSAgICkgICMgMTEzICAgcSAgbGF0aW4gc21hbGwgbGV0dGVyIHEKK2NoYXIgXFg3MiAoMTIzIDUgICApICAjIDExNCAgIHIgIGxhdGluIHNtYWxsIGxldHRlciByCitjaGFyIFxYNzMgKCAyMzQgICAgKSAgIyAxMTUgICBzICBsYXRpbiBzbWFsbCBsZXR0ZXIgcworY2hhciBcWDc0ICggMjM0NSAgICkgICMgMTE2ICAgdCAgbGF0aW4gc21hbGwgbGV0dGVyIHQKK2NoYXIgXFg3NSAoMSAzICA2ICApICAjIDExNyAgIHUgIGxhdGluIHNtYWxsIGxldHRlciB1CitjaGFyIFxYNzYgKDEyMyAgNiAgKSAgIyAxMTggICB2ICBsYXRpbiBzbWFsbCBsZXR0ZXIgdgorY2hhciBcWDc3ICggMiA0NTYgICkgICMgMTE5ICAgdyAgbGF0aW4gc21hbGwgbGV0dGVyIHcKK2NoYXIgXFg3OCAoMSAzNCA2ICApICAjIDEyMCAgIHggIGxhdGluIHNtYWxsIGxldHRlciB4CitjaGFyIFxYNzkgKDEgMzQ1NiAgKSAgIyAxMjEgICB5ICBsYXRpbiBzbWFsbCBsZXR0ZXIgeQorY2hhciBcWDdBICgxIDMgNTYgICkgICMgMTIyICAgeiAgbGF0aW4gc21hbGwgbGV0dGVyIHoKKworIyBUaGUgMjYgdXBwZXJjYXNlIGxldHRlcnMgKEEtWikgYXJlIHRoZSBzYW1lIGFzIHRoZWlyIGxvd2VyY2FzZSBjb3VudGVycGFydHMgCisjIGV4Y2VwdCB0aGF0IGRvdCA3IGlzIGFkZGVkOgorCisgICAgICNIZXggICAgRG90cyAgICAgICBEZWMgQ2hhciBEZXNjcmlwdGlvbgorY2hhciBcWDQxICgxICAgICA3ICkgICMgIDY1ICAgQSAgbGF0aW4gY2FwaXRhbCBsZXR0ZXIgYQorY2hhciBcWDQyICgxMiAgICA3ICkgICMgIDY2ICAgQiAgbGF0aW4gY2FwaXRhbCBsZXR0ZXIgYgorY2hhciBcWDQzICgxICA0ICA3ICkgICMgIDY3ICAgQyAgbGF0aW4gY2FwaXRhbCBsZXR0ZXIgYworY2hhciBcWDQ0ICgxICA0NSA3ICkgICMgIDY4ICAgRCAgbGF0aW4gY2FwaXRhbCBsZXR0ZXIgZAorY2hhciBcWDQ1ICgxICAgNSA3ICkgICMgIDY5ICAgRSAgbGF0aW4gY2FwaXRhbCBsZXR0ZXIgZQorY2hhciBcWDQ2ICgxMiA0ICA3ICkgICMgIDcwICAgRiAgbGF0aW4gY2FwaXRhbCBsZXR0ZXIgZgorY2hhciBcWDQ3ICgxMiA0NSA3ICkgICMgIDcxICAgRyAgbGF0aW4gY2FwaXRhbCBsZXR0ZXIgZworY2hhciBcWDQ4ICgxMiAgNSA3ICkgICMgIDcyICAgSCAgbGF0aW4gY2FwaXRhbCBsZXR0ZXIgaAorY2hhciBcWDQ5ICggMiA0ICA3ICkgICMgIDczICAgSSAgbGF0aW4gY2FwaXRhbCBsZXR0ZXIgaQorY2hhciBcWDRBICggMiA0NSA3ICkgICMgIDc0ICAgSiAgbGF0aW4gY2FwaXRhbCBsZXR0ZXIgagorY2hhciBcWDRCICgxIDMgICA3ICkgICMgIDc1ICAgSyAgbGF0aW4gY2FwaXRhbCBsZXR0ZXIgaworY2hhciBcWDRDICgxMjMgICA3ICkgICMgIDc2ICAgTCAgbGF0aW4gY2FwaXRhbCBsZXR0ZXIgbAorY2hhciBcWDREICgxIDM0ICA3ICkgICMgIDc3ICAgTSAgbGF0aW4gY2FwaXRhbCBsZXR0ZXIgbQorY2hhciBcWDRFICgxIDM0NSA3ICkgICMgIDc4ICAgTiAgbGF0aW4gY2FwaXRhbCBsZXR0ZXIgbgorY2hhciBcWDRGICgxIDMgNSA3ICkgICMgIDc5ICAgTyAgbGF0aW4gY2FwaXRhbCBsZXR0ZXIgbworY2hhciBcWDUwICgxMjM0ICA3ICkgICMgIDgwICAgUCAgbGF0aW4gY2FwaXRhbCBsZXR0ZXIgcAorY2hhciBcWDUxICgxMjM0NSA3ICkgICMgIDgxICAgUSAgbGF0aW4gY2FwaXRhbCBsZXR0ZXIgcQorY2hhciBcWDUyICgxMjMgNSA3ICkgICMgIDgyICAgUiAgbGF0aW4gY2FwaXRhbCBsZXR0ZXIgcgorY2hhciBcWDUzICggMjM0ICA3ICkgICMgIDgzICAgUyAgbGF0aW4gY2FwaXRhbCBsZXR0ZXIgcworY2hhciBcWDU0ICggMjM0NSA3ICkgICMgIDg0ICAgVCAgbGF0aW4gY2FwaXRhbCBsZXR0ZXIgdAorY2hhciBcWDU1ICgxIDMgIDY3ICkgICMgIDg1ICAgVSAgbGF0aW4gY2FwaXRhbCBsZXR0ZXIgdQorY2hhciBcWDU2ICgxMjMgIDY3ICkgICMgIDg2ICAgViAgbGF0aW4gY2FwaXRhbCBsZXR0ZXIgdgorY2hhciBcWDU3ICggMiA0NTY3ICkgICMgIDg3ICAgVyAgbGF0aW4gY2FwaXRhbCBsZXR0ZXIgdworY2hhciBcWDU4ICgxIDM0IDY3ICkgICMgIDg4ICAgWCAgbGF0aW4gY2FwaXRhbCBsZXR0ZXIgeAorY2hhciBcWDU5ICgxIDM0NTY3ICkgICMgIDg5ICAgWSAgbGF0aW4gY2FwaXRhbCBsZXR0ZXIgeQorY2hhciBcWDVBICgxIDMgNTY3ICkgICMgIDkwICAgWiAgbGF0aW4gY2FwaXRhbCBsZXR0ZXIgegorCisjIFRoZSAxMCBkZWNpbWFsIGRpZ2l0cyAoMC05KSBhcmUgdGhlIHNhbWUgYXMgaW4gdGhlIE5lbWV0aCBDb2RlOgorCisgICAgICNIZXggICAgRG90cyAgICAgICBEZWMgQ2hhciBEZXNjcmlwdGlvbgorY2hhciBcWDMwICggIDMgNTYgICkgICMgIDQ4ICAgMCAgZGlnaXQgemVybworY2hhciBcWDMxICggMiAgICAgICkgICMgIDQ5ICAgMSAgZGlnaXQgb25lCitjaGFyIFxYMzIgKCAyMyAgICAgKSAgIyAgNTAgICAyICBkaWdpdCB0d28KK2NoYXIgXFgzMyAoIDIgIDUgICApICAjICA1MSAgIDMgIGRpZ2l0IHRocmVlCitjaGFyIFxYMzQgKCAyICA1NiAgKSAgIyAgNTIgICA0ICBkaWdpdCBmb3VyCitjaGFyIFxYMzUgKCAyICAgNiAgKSAgIyAgNTMgICA1ICBkaWdpdCBmaXZlCitjaGFyIFxYMzYgKCAyMyA1ICAgKSAgIyAgNTQgICA2ICBkaWdpdCBzaXgKK2NoYXIgXFgzNyAoIDIzIDU2ICApICAjICA1NSAgIDcgIGRpZ2l0IHNldmVuCitjaGFyIFxYMzggKCAyMyAgNiAgKSAgIyAgNTYgICA4ICBkaWdpdCBlaWdodAorY2hhciBcWDM5ICggIDMgNSAgICkgICMgIDU3ICAgOSAgZGlnaXQgbmluZQorCisjIENvbW1vbiBzeW1ib2xzIHVzZWQgd2l0aGluIG1hdGhlbWF0aWNhbCBleHByZXNzaW9ucyBieSBwb3B1bGFyIGNvbXB1dGVyCisjIHByb2dyYW1taW5nIGxhbmd1YWdlcyBhcmUgdGhlIHNhbWUgYXMgaW4gdGhlIE5lbWV0aCBDb2RlOgorCisgICAgICNIZXggICAgRG90cyAgICAgICBEZWMgQ2hhciBEZXNjcmlwdGlvbgorY2hhciBcWDJFICggICA0IDYgICkgICMgIDQ2ICAgLiAgZnVsbCBzdG9wCitjaGFyIFxYMkIgKCAgMzQgNiAgKSAgIyAgNDMgICArICBwbHVzIHNpZ24KK2NoYXIgXFgyRCAoICAzICA2ICApICAjICA0NSAgIC0gIGh5cGhlbi1taW51cworY2hhciBcWDJBICgxICAgIDYgICkgICMgIDQyICAgKiAgYXN0ZXJpc2sKK2NoYXIgXFgyRiAoICAzNCAgICApICAjICA0NyAgIC8gIHNvbGlkdXMKK2NoYXIgXFgyOCAoMTIzIDU2ICApICAjICA0MCAgICggIGxlZnQgcGFyZW50aGVzaXMKK2NoYXIgXFgyOSAoIDIzNDU2ICApICAjICA0MSAgICkgIHJpZ2h0IHBhcmVudGhlc2lzCisKKyMgV2l0aCBhbGwgb2YgdGhlc2UgbWFqb3IgY29uc2lkZXJhdGlvbnMgaGF2aW5nIGJlZW4gdGFrZW4gaW50byBhY2NvdW50LCAKKyMgY29udmVuaWVudCByZXByZXNlbnRhdGlvbnMgd2VyZSBzdGlsbCBhdmFpbGFibGUsIGFuZCBhcmUgdXNlZCwgZm9yIHNvbWUgb2YgCisjIHRoZSByZW1haW5pbmcgY2hhcmFjdGVyczoKKworICAgICAjSGV4ICAgIERvdHMgICAgICAgRGVjIENoYXIgRGVzY3JpcHRpb24KK2NoYXIgXFgyNiAoMTIzNCA2ICApICAjICAzOCAgICYgIGFtcGVyc2FuZAorY2hhciBcWDIzICggIDM0NTYgICkgICMgIDM1ICAgIyAgbnVtYmVyIHNpZ24KKworIyBUaGUgcmVtYWluaW5nIGNoYXJhY3RlcnMgYXJlIHdoYXQgdGhleSBhcmUuIERvdCA3IGlzbid0IHVzZWQgZWl0aGVyIHdpdGhpbiAKKyMgdGhlIG51bWJlciBibG9jayAoMzItNjMpIG9yLCB3aXRoIHRoZSBleGNlcHRpb24gb2YgdGhlIERFTCBjb250cm9sIGNoYXJhY3RlcgorIyAoMTI3KSwgd2l0aGluIHRoZSBsb3dlcmNhc2UgYmxvY2sgKDk2LTEyNykuIFdpdGggdGhlIGV4Y2VwdGlvbiBvZiB0aGUKKyMgdW5kZXJzY29yZSAoOTUpLCBkb3QgNyBpcyB1c2VkIGZvciBldmVyeSBjaGFyYWN0ZXIgd2l0aGluIHRoZSB1cHBlcmNhc2UgYmxvY2sKKyMgKDY0LTk1KS4gQWRkaW5nIGRvdCA3IHRvIGFueSBjaGFyYWN0ZXIgd2l0aGluIHRoZSBsb3dlcmNhc2UgYmxvY2sgKDk2LTEyNykKKyMgeWllbGRzIGl0cyBjb3JyZXNwb25kaW5nIGNoYXJhY3RlciB3aXRoaW4gdGhlIHVwcGVyY2FzZSBibG9jayAoNjQtOTUpIGV4Y2VwdAorIyB0aGF0IHJlbW92aW5nIGRvdCA3IGZyb20gdGhlIERFTCBjb250cm9sIGNoYXJhY3RlciB5aWVsZHMgdGhlIHVuZGVyc2NvcmUuCisKKyAgICAgI0hleCAgICBEb3RzICAgICAgIERlYyBDaGFyIERlc2NyaXB0aW9uCitjaGFyIFxYMkMgKCAgICAgNiAgKSAgIyAgNDQgICAsICBjb21tYQorY2hhciBcWDNCICggICAgNTYgICkgICMgIDU5ICAgOyAgc2VtaWNvbG9uCitjaGFyIFxYM0EgKDEgICA1NiAgKSAgIyAgNTggICA6ICBjb2xvbgorY2hhciBcWDIxICggMjM0IDYgICkgICMgIDMzICAgISAgZXhjbGFtYXRpb24gbWFyaworY2hhciBcWDNGICgxICA0NTYgICkgICMgIDYzICAgPyAgcXVlc3Rpb24gbWFyaworY2hhciBcWDIyICggICAgNSAgICkgICMgIDM0ICAgIiAgcXVvdGF0aW9uIG1hcmsKK2NoYXIgXFgyNyAoICAzICAgICApICAjICAzOSAgICcgIGFwb3N0cm9waGUKK2NoYXIgXFg2MCAoICAgNCAgICApICAjICA5NiAgIGAgIGdyYXZlIGFjY2VudAorY2hhciBcWDVFICggICA0NSA3ICkgICMgIDk0ICAgXiAgY2lyY3VtZmxleCBhY2NlbnQKK2NoYXIgXFg3RSAoICAgNDUgICApICAjIDEyNiAgIH4gIHRpbGRlCitjaGFyIFxYNUIgKCAyIDQgNjcgKSAgIyAgOTEgICBbICBsZWZ0IHNxdWFyZSBicmFja2V0CitjaGFyIFxYNUQgKDEyIDQ1NjcgKSAgIyAgOTMgICBdICByaWdodCBzcXVhcmUgYnJhY2tldAorY2hhciBcWDdCICggMiA0IDYgICkgICMgMTIzICAgeyAgbGVmdCBjdXJseSBicmFja2V0CitjaGFyIFxYN0QgKDEyIDQ1NiAgKSAgIyAxMjUgICB9ICByaWdodCBjdXJseSBicmFja2V0CitjaGFyIFxYM0QgKDEyMzQ1NiAgKSAgIyAgNjEgICA9ICBlcXVhbHMgc2lnbgorY2hhciBcWDNDICgxMiAgIDYgICkgICMgIDYwICAgPCAgbGVzcy10aGFuIHNpZ24KK2NoYXIgXFgzRSAoICAzNDUgICApICAjICA2MiAgID4gIGdyZWF0ZXItdGhhbiBzaWduCitjaGFyIFxYMjQgKDEyIDQgNiAgKSAgIyAgMzYgICAkICBkb2xsYXIgc2lnbgorY2hhciBcWDI1ICgxICA0IDYgICkgICMgIDM3ICAgJSAgcGVyY2VudCBzaWduCitjaGFyIFxYNDAgKCAgIDQgIDcgKSAgIyAgNjQgICBAICBjb21tZXJjaWFsIGF0CitjaGFyIFxYN0MgKDEyICA1NiAgKSAgIyAxMjQgICB8ICB2ZXJ0aWNhbCBsaW5lCitjaGFyIFxYNUMgKDEyICA1NjcgKSAgIyAgOTIgICBcICByZXZlcnNlIHNvbGlkdXMKK2NoYXIgXFg1RiAoICAgNDU2ICApICAjICA5NSAgIF8gIGxvdyBsaW5lCisKKyMgRWFjaCBvZiB0aGUgY2hhcmFjdGVycyB3aXRoaW4gdGhlIGJhc2ljIGNvbnRyb2wgY2hhcmFjdGVyIGJsb2NrICgwLTMxKSBpcyB0aGUKKyMgc2FtZSBhcyBpdHMgY29ycmVzcG9uZGluZyBjaGFyYWN0ZXIgd2l0aGluIGJvdGggdGhlIHVwcGVyY2FzZSBibG9jayAoNjQtOTUpCisjIGFuZCB0aGUgbG93ZXJjYXNlIGJsb2NrICg5Ni0xMjcpIGV4Y2VwdCB0aGF0IGRvdHMgNyBhbmQgOCBhcmUgYm90aCB1c2VkLgorCisgICAgICNIZXggICAgRG90cyAgICAgICBEZWMgQ2hhciBEZXNjcmlwdGlvbgorY2hhciBcWDAwICggICA0ICA3OCkgICMgICAwICBeQCAgbnVsbAorY2hhciBcWDAxICgxICAgICA3OCkgICMgICAxICBeQSAgc3RhcnQgb2YgaGVhZGluZworY2hhciBcWDAyICgxMiAgICA3OCkgICMgICAyICBeQiAgc3RhcnQgb2YgdGV4dAorY2hhciBcWDAzICgxICA0ICA3OCkgICMgICAzICBeQyAgZW5kIG9mIHRleHQKK2NoYXIgXFgwNCAoMSAgNDUgNzgpICAjICAgNCAgXkQgIGVuZCBvZiB0cmFuc21pc3Npb24KK2NoYXIgXFgwNSAoMSAgIDUgNzgpICAjICAgNSAgXkUgIGVucXVpcnkKK2NoYXIgXFgwNiAoMTIgNCAgNzgpICAjICAgNiAgXkYgIGFja25vd2xlZGdlCitjaGFyIFxYMDcgKDEyIDQ1IDc4KSAgIyAgIDcgIF5HICBiZWxsCitjaGFyIFxYMDggKDEyICA1IDc4KSAgIyAgIDggIF5IICBiYWNrc3BhY2UKK2NoYXIgXFgwOSAoIDIgNCAgNzgpICAjICAgOSAgXkkgIGhvcml6b250YWwgdGFidWxhdGlvbgorY2hhciBcWDBBICggMiA0NSA3OCkgICMgIDEwICBeSiAgbGluZSBmZWVkCitjaGFyIFxYMEIgKDEgMyAgIDc4KSAgIyAgMTEgIF5LICB2ZXJ0aWNhbCB0YWJ1bGF0aW9uCitjaGFyIFxYMEMgKDEyMyAgIDc4KSAgIyAgMTIgIF5MICBmb3JtIGZlZWQKK2NoYXIgXFgwRCAoMSAzNCAgNzgpICAjICAxMyAgXk0gIGNhcnJpYWdlIHJldHVybgorY2hhciBcWDBFICgxIDM0NSA3OCkgICMgIDE0ICBeTiAgc2hpZnQgb3V0CitjaGFyIFxYMEYgKDEgMyA1IDc4KSAgIyAgMTUgIF5PICBzaGlmdCBpbgorY2hhciBcWDEwICgxMjM0ICA3OCkgICMgIDE2ICBeUCAgZGF0YSBsaW5rIGVzY2FwZQorY2hhciBcWDExICgxMjM0NSA3OCkgICMgIDE3ICBeUSAgZGV2aWNlIGNvbnRyb2wgb25lCitjaGFyIFxYMTIgKDEyMyA1IDc4KSAgIyAgMTggIF5SICBkZXZpY2UgY29udHJvbCB0d28KK2NoYXIgXFgxMyAoIDIzNCAgNzgpICAjICAxOSAgXlMgIGRldmljZSBjb250cm9sIHRocmVlCitjaGFyIFxYMTQgKCAyMzQ1IDc4KSAgIyAgMjAgIF5UICBkZXZpY2UgY29udHJvbCBmb3VyCitjaGFyIFxYMTUgKDEgMyAgNjc4KSAgIyAgMjEgIF5VICBuZWdhdGl2ZSBhY2tub3dsZWRnZQorY2hhciBcWDE2ICgxMjMgIDY3OCkgICMgIDIyICBeViAgc3luY2hyb25vdXMgaWRsZQorY2hhciBcWDE3ICggMiA0NTY3OCkgICMgIDIzICBeVyAgZW5kIG9mIHRyYW5zbWlzc2lvbiBibG9jaworY2hhciBcWDE4ICgxIDM0IDY3OCkgICMgIDI0ICBeWCAgY2FuY2VsCitjaGFyIFxYMTkgKDEgMzQ1Njc4KSAgIyAgMjUgIF5ZICBlbmQgb2YgbWVkaXVtCitjaGFyIFxYMUEgKDEgMyA1Njc4KSAgIyAgMjYgIF5aICBzdWJzdGl0dXRlCitjaGFyIFxYMUIgKCAyIDQgNjc4KSAgIyAgMjcgIF5bICBlc2NhcGUKK2NoYXIgXFgxQyAoMTIgIDU2NzgpICAjICAyOCAgXlwgIGZpbGUgc2VwYXJhdG9yCitjaGFyIFxYMUQgKDEyIDQ1Njc4KSAgIyAgMjkgIF5dICBncm91cCBzZXBhcmF0b3IKK2NoYXIgXFgxRSAoICAgNDUgNzgpICAjICAzMCAgXl4gIHJlY29yZCBzZXBhcmF0b3IKK2NoYXIgXFgxRiAoICAgNDU2NzgpICAjICAzMSAgXl8gIHVuaXQgc2VwYXJhdG9yCisKKyMgRWFjaCBvZiB0aGUgY2hhcmFjdGVycyB3aXRoaW4gdGhlIGV4dGVuZGVkIGNvbnRyb2wgY2hhcmFjdGVyIGJsb2NrICgxMjgtMTU5KSAgCisjIGlzIHRoZSBzYW1lIGFzIGl0cyBjb3JyZXNwb25kaW5nIGNoYXJhY3RlciB3aXRoaW4gdGhlIGJhc2ljIGNvbnRyb2wgY2hhcmFjdGVyCisjIGJsb2NrICgwLTMxKSBleGNlcHQgdGhhdCBvbmx5IGRvdCA4IGlzIHVzZWQuCisKKyAgICAgI0hleCAgICBEb3RzICAgICAgIERlYyBDaGFyIERlc2NyaXB0aW9uCitjaGFyIFxYODAgKCAgIDQgICA4KSAgIyAxMjggIH5AICA8Y29udHJvbD4KK2NoYXIgXFg4MSAoMSAgICAgIDgpICAjIDEyOSAgfkEgIDxjb250cm9sPgorY2hhciBcWDgyICgxMiAgICAgOCkgICMgMTMwICB+QiAgYnJlYWsgcGVybWl0dGVkIGhlcmUKK2NoYXIgXFg4MyAoMSAgNCAgIDgpICAjIDEzMSAgfkMgIG5vIGJyZWFrIGhlcmUKK2NoYXIgXFg4NCAoMSAgNDUgIDgpICAjIDEzMiAgfkQgIDxjb250cm9sPgorY2hhciBcWDg1ICgxICAgNSAgOCkgICMgMTMzICB+RSAgbmV4dCBsaW5lCitjaGFyIFxYODYgKDEyIDQgICA4KSAgIyAxMzQgIH5GICBzdGFydCBvZiBzZWxlY3RlZCBhcmVhCitjaGFyIFxYODcgKDEyIDQ1ICA4KSAgIyAxMzUgIH5HICBlbmQgb2Ygc2VsZWN0ZWQgYXJlYQorY2hhciBcWDg4ICgxMiAgNSAgOCkgICMgMTM2ICB+SCAgY2hhcmFjdGVyIHRhYnVsYXRpb24gc2V0CitjaGFyIFxYODkgKCAyIDQgICA4KSAgIyAxMzcgIH5JICBjaGFyYWN0ZXIgdGFidWxhdGlvbiB3aXRoIGp1c3RpZmljYXRpb24KK2NoYXIgXFg4QSAoIDIgNDUgIDgpICAjIDEzOCAgfkogIGxpbmUgdGFidWxhdGlvbiBzZXQKK2NoYXIgXFg4QiAoMSAzICAgIDgpICAjIDEzOSAgfksgIHBhcnRpYWwgbGluZSBkb3duCitjaGFyIFxYOEMgKDEyMyAgICA4KSAgIyAxNDAgIH5MICBwYXJ0aWFsIGxpbmUgdXAKK2NoYXIgXFg4RCAoMSAzNCAgIDgpICAjIDE0MSAgfk0gIHJldmVyc2UgbGluZSBmZWVkCitjaGFyIFxYOEUgKDEgMzQ1ICA4KSAgIyAxNDIgIH5OICBzaW5nbGUgc2hpZnQgdHdvCitjaGFyIFxYOEYgKDEgMyA1ICA4KSAgIyAxNDMgIH5PICBzaW5nbGUgc2hpZnQgdGhyZWUKK2NoYXIgXFg5MCAoMTIzNCAgIDgpICAjIDE0NCAgflAgIGRldmljZSBjb250cm9sIHN0cmluZworY2hhciBcWDkxICgxMjM0NSAgOCkgICMgMTQ1ICB+USAgcHJpdmF0ZSB1c2Ugb25lCitjaGFyIFxYOTIgKDEyMyA1ICA4KSAgIyAxNDYgIH5SICBwcml2YXRlIHVzZSB0d28KK2NoYXIgXFg5MyAoIDIzNCAgIDgpICAjIDE0NyAgflMgIHNldCB0cmFuc21pdCBzdGF0ZQorY2hhciBcWDk0ICggMjM0NSAgOCkgICMgMTQ4ICB+VCAgY2FuY2VsIGNoYXJhY3RlcgorY2hhciBcWDk1ICgxIDMgIDYgOCkgICMgMTQ5ICB+VSAgbWVzc2FnZSB3YWl0aW5nCitjaGFyIFxYOTYgKDEyMyAgNiA4KSAgIyAxNTAgIH5WICBzdGFydCBvZiBndWFyZGVkIGFyZWEKK2NoYXIgXFg5NyAoIDIgNDU2IDgpICAjIDE1MSAgflcgIGVuZCBvZiBndWFyZGVkIGFyZWEKK2NoYXIgXFg5OCAoMSAzNCA2IDgpICAjIDE1MiAgflggIHN0YXJ0IG9mIHN0cmluZworY2hhciBcWDk5ICgxIDM0NTYgOCkgICMgMTUzICB+WSAgPGNvbnRyb2w+CitjaGFyIFxYOUEgKDEgMyA1NiA4KSAgIyAxNTQgIH5aICBzaW5nbGUgY2hhcmFjdGVyIGludHJvZHVjZXIKK2NoYXIgXFg5QiAoIDIgNCA2IDgpICAjIDE1NSAgflsgIGNvbnRyb2wgc2VxdWVuY2UgaW50cm9kdWNlcgorY2hhciBcWDlDICgxMiAgNTYgOCkgICMgMTU2ICB+XCAgc3RyaW5nIHRlcm1pbmF0b3IKK2NoYXIgXFg5RCAoMTIgNDU2IDgpICAjIDE1NyAgfl0gIG9wZXJhdGluZyBzeXN0ZW0gY29tbWFuZAorY2hhciBcWDlFICggICA0NSAgOCkgICMgMTU4ICB+XiAgcHJpdmFjeSBtZXNzYWdlCitjaGFyIFxYOUYgKCAgIDQ1NiA4KSAgIyAxNTkgIH5fICBhcHBsaWNhdGlvbiBwcm9ncmFtIGNvbW1hbmQKKworIyBSZXByZXNlbnRhdGlvbnMgZm9yIHRoZSB1cHBlcmNhc2UgYWNjZW50ZWQgbGV0dGVycyBhcmUgZHJhd24gZnJvbSB0aGUKKyMgcmVtYWluaW5nIGNvbWJpbmF0aW9ucyB3aGljaCB1c2UgYm90aCBkb3RzIDcgYW5kIDguIFRoZSByZXByZXNlbnRhdGlvbiBmb3IgYQorIyBsb3dlcmNhc2UgYWNjZW50ZWQgbGV0dGVyIGlzIHRoZSBzYW1lIGFzIGl0cyB1cHBlcmNhc2UgY291bnRlcnBhcnQgZXhjZXB0CisjIHRoYXQgZG90IDcgaXNuJ3QgdXNlZC4gVGhpcyBzY2hlbWUgcmV0YWlucyB0aGUgdXNlIG9mIGRvdCA3IGFzIHRoZSBtb2RpZmllcgorIyBmb3IgYSBjYXBpdGFsaXplZCBsZXR0ZXIuIFRoZSBvbmx5IGV4Y2VwdGlvbiB0byB0aGVzZSBydWxlcyBpcyB0aGF0LCBkdWUgdG8KKyMgdGhlIG5hdHVyZSBvZiB0aGUgTGF0aW4xIGNoYXJhY3RlciBzZXQsIHRoZSBHZXJtYW4gbG93ZXJjYXNlIGRvdWJsZS1zIGlzCisjIHRyZWF0ZWQgYXMgdGhvdWdoIGl0IHdlcmUgYW4gdXBwZXJjYXNlIHktZGllcmVzaXMgKG5laXRoZXIgaGFzIGFuIHVwcGVyY2FzZQorIyBkZWZpbml0aW9uKS4gVGhlc2UgcmVwcmVzZW50YXRpb25zIGhhdmUgYmVlbiBnYXRoZXJlZCwgYXMgbXVjaCBhcyBwb3NzaWJsZSwKKyMgaW50byBsb2dpY2FsIGdyb3VwaW5ncy4KKworIyBUaGUgNSBsZXR0ZXJzIHdpdGggYSBjaXJjdW1mbGV4IGFjY2VudCAoXikgdXNlIHRoZSBbMS01XSBkb3QgY29tYmluYXRpb25zOgorCisgICAgICNIZXggICAgRG90cyAgICAgICBEZWMgQ2hhciBEZXNjcmlwdGlvbgorY2hhciBcWEMyICggMiAgICA3OCkgICMgMTk0ICAgw4IgIGxhdGluIGNhcGl0YWwgbGV0dGVyIGEgd2l0aCBjaXJjdW1mbGV4CitjaGFyIFxYQ0EgKCAyMyAgIDc4KSAgIyAyMDIgICDDiiAgbGF0aW4gY2FwaXRhbCBsZXR0ZXIgZSB3aXRoIGNpcmN1bWZsZXgKK2NoYXIgXFhDRSAoIDIgIDUgNzgpICAjIDIwNiAgIMOOICBsYXRpbiBjYXBpdGFsIGxldHRlciBpIHdpdGggY2lyY3VtZmxleAorY2hhciBcWEQ0ICggMiAgNTY3OCkgICMgMjEyICAgw5QgIGxhdGluIGNhcGl0YWwgbGV0dGVyIG8gd2l0aCBjaXJjdW1mbGV4CitjaGFyIFxYREIgKCAyICAgNjc4KSAgIyAyMTkgICDDmyAgbGF0aW4gY2FwaXRhbCBsZXR0ZXIgdSB3aXRoIGNpcmN1bWZsZXgKK2NoYXIgXFhFMiAoIDIgICAgIDgpICAjIDIyNiAgIMOiICBsYXRpbiBzbWFsbCBsZXR0ZXIgYSB3aXRoIGNpcmN1bWZsZXgKK2NoYXIgXFhFQSAoIDIzICAgIDgpICAjIDIzNCAgIMOqICBsYXRpbiBzbWFsbCBsZXR0ZXIgZSB3aXRoIGNpcmN1bWZsZXgKK2NoYXIgXFhFRSAoIDIgIDUgIDgpICAjIDIzOCAgIMOuICBsYXRpbiBzbWFsbCBsZXR0ZXIgaSB3aXRoIGNpcmN1bWZsZXgKK2NoYXIgXFhGNCAoIDIgIDU2IDgpICAjIDI0NCAgIMO0ICBsYXRpbiBzbWFsbCBsZXR0ZXIgbyB3aXRoIGNpcmN1bWZsZXgKK2NoYXIgXFhGQiAoIDIgICA2IDgpICAjIDI1MSAgIMO7ICBsYXRpbiBzbWFsbCBsZXR0ZXIgdSB3aXRoIGNpcmN1bWZsZXgKKworIyBUaGUgNSBsZXR0ZXJzIHdpdGggYSBncmF2ZSBhY2NlbnQgKGApIHVzZSB0aGUgWzYtMF0gZG90IGNvbWJpbmF0aW9uczoKKworICAgICAjSGV4ICAgIERvdHMgICAgICAgRGVjIENoYXIgRGVzY3JpcHRpb24KK2NoYXIgXFhDMCAoIDIzIDUgNzgpICAjIDE5MiAgIMOAICBsYXRpbiBjYXBpdGFsIGxldHRlciBhIHdpdGggZ3JhdmUKK2NoYXIgXFhDOCAoIDIzIDU2NzgpICAjIDIwMCAgIMOIICBsYXRpbiBjYXBpdGFsIGxldHRlciBlIHdpdGggZ3JhdmUKK2NoYXIgXFhDQyAoIDIzICA2NzgpICAjIDIwNCAgIMOMICBsYXRpbiBjYXBpdGFsIGxldHRlciBpIHdpdGggZ3JhdmUKK2NoYXIgXFhEMiAoICAzIDUgNzgpICAjIDIxMCAgIMOSICBsYXRpbiBjYXBpdGFsIGxldHRlciBvIHdpdGggZ3JhdmUKK2NoYXIgXFhEOSAoICAzIDU2NzgpICAjIDIxNyAgIMOZICBsYXRpbiBjYXBpdGFsIGxldHRlciB1IHdpdGggZ3JhdmUKK2NoYXIgXFhFMCAoIDIzIDUgIDgpICAjIDIyNCAgIMOgICBsYXRpbiBzbWFsbCBsZXR0ZXIgYSB3aXRoIGdyYXZlCitjaGFyIFxYRTggKCAyMyA1NiA4KSAgIyAyMzIgICDDqCAgbGF0aW4gc21hbGwgbGV0dGVyIGUgd2l0aCBncmF2ZQorY2hhciBcWEVDICggMjMgIDYgOCkgICMgMjM2ICAgw6wgIGxhdGluIHNtYWxsIGxldHRlciBpIHdpdGggZ3JhdmUKK2NoYXIgXFhGMiAoICAzIDUgIDgpICAjIDI0MiAgIMOyICBsYXRpbiBzbWFsbCBsZXR0ZXIgbyB3aXRoIGdyYXZlCitjaGFyIFxYRjkgKCAgMyA1NiA4KSAgIyAyNDkgICDDuSAgbGF0aW4gc21hbGwgbGV0dGVyIHUgd2l0aCBncmF2ZQorCisjIFRoZSA2IGxldHRlcnMgd2l0aCBhbiBhY3V0ZSBhY2NlbnQgKCcpIHVzZSB0aGUgW2EtZl0gZG90IGNvbWJpbmF0aW9ucyB3aXRoCisjIGRvdHMgMyBhbmQgNiBhZGRlZDoKKworICAgICAjSGV4ICAgIERvdHMgICAgICAgRGVjIENoYXIgRGVzY3JpcHRpb24KK2NoYXIgXFhDMSAoMSAgICA2NzgpICAjIDE5MyAgIMOBICBsYXRpbiBjYXBpdGFsIGxldHRlciBhIHdpdGggYWN1dGUKK2NoYXIgXFhDOSAoMTIgICA2NzgpICAjIDIwMSAgIMOJICBsYXRpbiBjYXBpdGFsIGxldHRlciBlIHdpdGggYWN1dGUKK2NoYXIgXFhDRCAoMSAgNCA2NzgpICAjIDIwNSAgIMONICBsYXRpbiBjYXBpdGFsIGxldHRlciBpIHdpdGggYWN1dGUKK2NoYXIgXFhEMyAoMSAgNDU2NzgpICAjIDIxMSAgIMOTICBsYXRpbiBjYXBpdGFsIGxldHRlciBvIHdpdGggYWN1dGUKK2NoYXIgXFhEQSAoMSAgIDU2NzgpICAjIDIxOCAgIMOaICBsYXRpbiBjYXBpdGFsIGxldHRlciB1IHdpdGggYWN1dGUKK2NoYXIgXFhERCAoMTIgNCA2NzgpICAjIDIyMSAgIMOdICBsYXRpbiBjYXBpdGFsIGxldHRlciB5IHdpdGggYWN1dGUKK2NoYXIgXFhFMSAoMSAgICA2IDgpICAjIDIyNSAgIMOhICBsYXRpbiBzbWFsbCBsZXR0ZXIgYSB3aXRoIGFjdXRlCitjaGFyIFxYRTkgKDEyICAgNiA4KSAgIyAyMzMgICDDqSAgbGF0aW4gc21hbGwgbGV0dGVyIGUgd2l0aCBhY3V0ZQorY2hhciBcWEVEICgxICA0IDYgOCkgICMgMjM3ICAgw60gIGxhdGluIHNtYWxsIGxldHRlciBpIHdpdGggYWN1dGUKK2NoYXIgXFhGMyAoMSAgNDU2IDgpICAjIDI0MyAgIMOzICBsYXRpbiBzbWFsbCBsZXR0ZXIgbyB3aXRoIGFjdXRlCitjaGFyIFxYRkEgKDEgICA1NiA4KSAgIyAyNTAgICDDuiAgbGF0aW4gc21hbGwgbGV0dGVyIHUgd2l0aCBhY3V0ZQorY2hhciBcWEZEICgxMiA0IDYgOCkgICMgMjUzICAgw70gIGxhdGluIHNtYWxsIGxldHRlciB5IHdpdGggYWN1dGUKKworIyBUaGUgNiBsZXR0ZXJzIHdpdGggYSBkaWVyZXNpcyBhY2NlbnQgKCIpIHVzZSB0aGUgW2Ytal0gZG90IGNvbWJpbmF0aW9ucyB3aXRoCisjIGRvdHMgMyBhbmQgNiBhZGRlZCwgYW5kIHRoZSBudW1iZXIgc2lnbiAoYmVjYXVzZSBpdCBmaXRzIHRoZSBzZXF1ZW5jZQorIyByZWFzb25hYmx5IHdlbGwpOgorCisgICAgICNIZXggICAgRG90cyAgICAgICBEZWMgQ2hhciBEZXNjcmlwdGlvbgorY2hhciBcWEM0ICgxMjM0IDY3OCkgICMgMTk2ICAgw4QgIGxhdGluIGNhcGl0YWwgbGV0dGVyIGEgd2l0aCBkaWFlcmVzaXMKK2NoYXIgXFhDQiAoMTIzNDU2NzgpICAjIDIwMyAgIMOLICBsYXRpbiBjYXBpdGFsIGxldHRlciBlIHdpdGggZGlhZXJlc2lzCitjaGFyIFxYQ0YgKDEyMyA1Njc4KSAgIyAyMDcgICDDjyAgbGF0aW4gY2FwaXRhbCBsZXR0ZXIgaSB3aXRoIGRpYWVyZXNpcworY2hhciBcWEQ2ICggMjM0IDY3OCkgICMgMjE0ICAgw5YgIGxhdGluIGNhcGl0YWwgbGV0dGVyIG8gd2l0aCBkaWFlcmVzaXMKK2NoYXIgXFhEQyAoIDIzNDU2NzgpICAjIDIyMCAgIMOcICBsYXRpbiBjYXBpdGFsIGxldHRlciB1IHdpdGggZGlhZXJlc2lzCitjaGFyIFxYRTQgKDEyMzQgNiA4KSAgIyAyMjggICDDpCAgbGF0aW4gc21hbGwgbGV0dGVyIGEgd2l0aCBkaWFlcmVzaXMKK2NoYXIgXFhFQiAoMTIzNDU2IDgpICAjIDIzNSAgIMOrICBsYXRpbiBzbWFsbCBsZXR0ZXIgZSB3aXRoIGRpYWVyZXNpcworY2hhciBcWEVGICgxMjMgNTYgOCkgICMgMjM5ICAgw68gIGxhdGluIHNtYWxsIGxldHRlciBpIHdpdGggZGlhZXJlc2lzCitjaGFyIFxYRjYgKCAyMzQgNiA4KSAgIyAyNDYgICDDtiAgbGF0aW4gc21hbGwgbGV0dGVyIG8gd2l0aCBkaWFlcmVzaXMKK2NoYXIgXFhGQyAoIDIzNDU2IDgpICAjIDI1MiAgIMO8ICBsYXRpbiBzbWFsbCBsZXR0ZXIgdSB3aXRoIGRpYWVyZXNpcworY2hhciBcWEZGICggIDM0NTYgOCkgICMgMjU1ICAgw78gIGxhdGluIHNtYWxsIGxldHRlciB5IHdpdGggZGlhZXJlc2lzCisKKyMgVGhlcmUgaXMgbm8gdXBwZXJjYXNlIHktZGllcmVzaXMgaW4gdGhlIExhdGluMSBjaGFyYWN0ZXIgc2V0LiBUaGUgR2VybWFuCisjIGxvd2VyY2FzZSBkb3VibGUtcywgd2hpY2ggYWxzbyBkb2Vzbid0IGhhdmUgYW4gdXBwZXJjYXNlIGNvdW50ZXJwYXJ0IGluIHRoZQorIyBMYXRpbjEgY2hhcmFjdGVyIHNldCwgdXNlcyBpdHMgcmVwcmVzZW50YXRpb246CisKKyAgICAgI0hleCAgICBEb3RzICAgICAgIERlYyBDaGFyIERlc2NyaXB0aW9uCitjaGFyIFxYREYgKCAgMzQ1Njc4KSAgIyAyMjMgICDDnyAgbGF0aW4gc21hbGwgbGV0dGVyIHNoYXJwIHMKKworIyBUaGUgcmVtYWluaW5nIGFjY2VudGVkIGxldHRlcnMgYXJlOgorCisgICAgICNIZXggICAgRG90cyAgICAgICBEZWMgQ2hhciBEZXNjcmlwdGlvbgorY2hhciBcWEMzICggICAgNSA3OCkgICMgMTk1ICAgw4MgIGxhdGluIGNhcGl0YWwgbGV0dGVyIGEgd2l0aCB0aWxkZQorY2hhciBcWEQxICggICA0IDY3OCkgICMgMjA5ICAgw5EgIGxhdGluIGNhcGl0YWwgbGV0dGVyIG4gd2l0aCB0aWxkZQorY2hhciBcWEQ1ICggICAgNTY3OCkgICMgMjEzICAgw5UgIGxhdGluIGNhcGl0YWwgbGV0dGVyIG8gd2l0aCB0aWxkZQorY2hhciBcWEM1ICggIDM0NSA3OCkgICMgMTk3ICAgw4UgIGxhdGluIGNhcGl0YWwgbGV0dGVyIGEgd2l0aCByaW5nIGFib3ZlCitjaGFyIFxYQzcgKCAgMzQgNjc4KSAgIyAxOTkgICDDhyAgbGF0aW4gY2FwaXRhbCBsZXR0ZXIgYyB3aXRoIGNlZGlsbGEKK2NoYXIgXFhEOCAoICAzNCAgNzgpICAjIDIxNiAgIMOYICBsYXRpbiBjYXBpdGFsIGxldHRlciBvIHdpdGggc3Ryb2tlCitjaGFyIFxYQzYgKCAgMyAgIDc4KSAgIyAxOTggICDDhiAgbGF0aW4gY2FwaXRhbCBsZXR0ZXIgYWUKK2NoYXIgXFhEMCAoICAgICA2NzgpICAjIDIwOCAgIMOQICBsYXRpbiBjYXBpdGFsIGxldHRlciBldGgKK2NoYXIgXFhERSAoICAzICA2NzgpICAjIDIyMiAgIMOeICBsYXRpbiBjYXBpdGFsIGxldHRlciB0aG9ybgorY2hhciBcWEUzICggICAgNSAgOCkgICMgMjI3ICAgw6MgIGxhdGluIHNtYWxsIGxldHRlciBhIHdpdGggdGlsZGUKK2NoYXIgXFhGMSAoICAgNCA2IDgpICAjIDI0MSAgIMOxICBsYXRpbiBzbWFsbCBsZXR0ZXIgbiB3aXRoIHRpbGRlCitjaGFyIFxYRjUgKCAgICA1NiA4KSAgIyAyNDUgICDDtSAgbGF0aW4gc21hbGwgbGV0dGVyIG8gd2l0aCB0aWxkZQorY2hhciBcWEU1ICggIDM0NSAgOCkgICMgMjI5ICAgw6UgIGxhdGluIHNtYWxsIGxldHRlciBhIHdpdGggcmluZyBhYm92ZQorY2hhciBcWEU3ICggIDM0IDYgOCkgICMgMjMxICAgw6cgIGxhdGluIHNtYWxsIGxldHRlciBjIHdpdGggY2VkaWxsYQorY2hhciBcWEY4ICggIDM0ICAgOCkgICMgMjQ4ICAgw7ggIGxhdGluIHNtYWxsIGxldHRlciBvIHdpdGggc3Ryb2tlCitjaGFyIFxYRTYgKCAgMyAgICA4KSAgIyAyMzAgICDDpiAgbGF0aW4gc21hbGwgbGV0dGVyIGFlCitjaGFyIFxYRjAgKCAgICAgNiA4KSAgIyAyNDAgICDDsCAgbGF0aW4gc21hbGwgbGV0dGVyIGV0aAorY2hhciBcWEZFICggIDMgIDYgOCkgICMgMjU0ICAgw74gIGxhdGluIHNtYWxsIGxldHRlciB0aG9ybgorCisjIFNvbWUgY2hhcmFjdGVycyBhcmUgdGhlIHNhbWUgYXMgb3RoZXIgY2hhcmFjdGVycyB3aGljaCB0aGV5IHJlc2VtYmxlIGJ1dCB3aXRoCisjIGRvdCA3IGFkZGVkOgorCisgICAgICNIZXggICAgRG90cyAgICAgICBEZWMgQ2hhciBEZXNjcmlwdGlvbgorY2hhciBcWEFEICggIDMgIDY3ICkgICMgMTczICAgwq0gIHNvZnQgaHlwaGVuCitjaGFyIFxYQUIgKDEyICAgNjcgKSAgIyAxNzEgICDCqyAgbGVmdC1wb2ludGluZyBkb3VibGUgYW5nbGUgcXVvdGF0aW9uIG1hcmsKK2NoYXIgXFhCQiAoICAzNDUgNyApICAjIDE4NyAgIMK7ICByaWdodC1wb2ludGluZyBkb3VibGUgYW5nbGUgcXVvdGF0aW9uIG1hcmsKK2NoYXIgXFhBNiAoMSAgIDU2NyApICAjIDE2NiAgIMKmICBicm9rZW4gYmFyCitjaGFyIFxYQjkgKCAyICAgIDcgKSAgIyAxODUgICDCuSAgc3VwZXJzY3JpcHQgb25lCitjaGFyIFxYQjIgKCAyMyAgIDcgKSAgIyAxNzggICDCsiAgc3VwZXJzY3JpcHQgdHdvCitjaGFyIFxYQjMgKCAyICA1IDcgKSAgIyAxNzkgICDCsyAgc3VwZXJzY3JpcHQgdGhyZWUKK2NoYXIgXFhCMSAoICAzNCA2NyApICAjIDE3NyAgIMKxICBwbHVzLW1pbnVzIHNpZ24KK2NoYXIgXFhENyAoMSAgICA2NyApICAjIDIxNSAgIMOXICBtdWx0aXBsaWNhdGlvbiBzaWduCitjaGFyIFxYRjcgKCAgMzQgIDcgKSAgIyAyNDcgICDDtyAgZGl2aXNpb24gc2lnbgorY2hhciBcWEI3ICggICA0IDY3ICkgICMgMTgzICAgwrcgIG1pZGRsZSBkb3QKK2NoYXIgXFhBMSAoIDIzNCA2NyApICAjIDE2MSAgIMKhICBpbnZlcnRlZCBleGNsYW1hdGlvbiBtYXJrCitjaGFyIFxYQkYgKDEgIDQ1NjcgKSAgIyAxOTEgICDCvyAgaW52ZXJ0ZWQgcXVlc3Rpb24gbWFyaworY2hhciBcWEEyICgxMiA0IDY3ICkgICMgMTYyICAgwqIgIGNlbnQgc2lnbgorY2hhciBcWEEzICggIDM0NTY3ICkgICMgMTYzICAgwqMgIHBvdW5kIHNpZ24KKworIyBBIGZldyBtb3JlIGNoYXJhY3RlcnMgZm9sbG93IHRoaXMgc2FtZSBjb252ZW50aW9uIGJ1dCB0aGVpciByZWxhdGlvbnNoaXBzCisjIHRvIHRoZWlyIGJhc2UgY2hhcmFjdGVycyBpcyBhIGJpdCBvYnNjdXJlOgorCisgICAgICNIZXggICAgRG90cyAgICAgICBEZWMgQ2hhciBEZXNjcmlwdGlvbgorY2hhciBcWEE0ICgxICA0IDY3ICkgICMgMTY0ICAgwqQgIGN1cnJlbmN5IHNpZ24KK2NoYXIgXFhBNSAoMTIzNCA2NyApICAjIDE2NSAgIMKlICB5ZW4gc2lnbgorCisjIFNvbWUgY2hhcmFjdGVycyBhcmUgcmVwcmVzZW50ZWQgYnkgdGhlIGZpcnN0IGxldHRlcnMgb2YgdGhlaXIgbmFtZXMgbG93ZXJlZAorIyBieSBvbmUgcm93IG9mIGRvdHM6CisKKyAgICAgI0hleCAgICBEb3RzICAgICAgIERlYyBDaGFyIERlc2NyaXB0aW9uCitjaGFyIFxYQUMgKCAyICA1NjcgKSAgIyAxNzIgICDCrCAgbm90IHNpZ24KK2NoYXIgXFhCNiAoIDIzIDUgNyApICAjIDE4MiAgIMK2ICBwaWxjcm93IHNpZ24KK2NoYXIgXFhBOSAoIDIzIDU2NyApICAjIDE2OSAgIMKpICBjb3B5cmlnaHQgc2lnbgorY2hhciBcWEFFICggMjMgIDY3ICkgICMgMTc0ICAgwq4gIHJlZ2lzdGVyZWQgc2lnbgorY2hhciBcWEE3ICggIDMgNSA3ICkgICMgMTY3ICAgwqcgIHNlY3Rpb24gc2lnbgorY2hhciBcWEIwICggIDMgNTY3ICkgICMgMTc2ICAgwrAgIGRlZ3JlZSBzaWduCisKKyMgVGhlIHRocmVlIGZyYWN0aW9uIGNoYXJhY3RlcnMgdXNlIGNvbWJpbmF0aW9ucyBvZiBkb3RzIDEgYW5kIDQgKHdoaWNoCisjIHByb2dyZXNzIGZyb20gbGVmdCB0byByaWdodCBhcyB0aGUgdmFsdWUgb2YgdGhlIGZyYWN0aW9uIGluY3JlYXNlcykgdG9nZXRoZXIKKyMgd2l0aCBkb3RzIDIsMyw1LDYsNzoKKworICAgICAjSGV4ICAgIERvdHMgICAgICAgRGVjIENoYXIgRGVzY3JpcHRpb24KK2NoYXIgXFhCQyAoMTIzIDU2NyApICAjIDE4OCAgIMK8ICB2dWxnYXIgZnJhY3Rpb24gb25lIHF1YXJ0ZXIKK2NoYXIgXFhCRCAoMTIzNDU2NyApICAjIDE4OSAgIMK9ICB2dWxnYXIgZnJhY3Rpb24gb25lIGhhbGYKK2NoYXIgXFhCRSAoIDIzNDU2NyApICAjIDE5MCAgIMK+ICB2dWxnYXIgZnJhY3Rpb24gdGhyZWUgcXVhcnRlcnMKKworIyBFYWNoIG9mIHRoZSB0aHJlZSBleHRlbmRlZCBhY2NlbnQgY2hhcmFjdGVycyBpcyB0aGUgc2FtZSBhcyBpdHMgY29udmVudGlvbmFsCisjIGNvbXBvc2UgY2hhcmFjdGVyIGJ1dCB3aXRoIGRvdCA3IGFkZGVkOgorCisgICAgICNIZXggICAgRG90cyAgICAgICBEZWMgQ2hhciBEZXNjcmlwdGlvbgorY2hhciBcWEI0ICggIDMgICA3ICkgICMgMTgwICAgwrQgIGFjdXRlIGFjY2VudAorY2hhciBcWEI4ICggICAgIDY3ICkgICMgMTg0ICAgwrggIGNlZGlsbGEKK2NoYXIgXFhBOCAoICAgIDUgNyApICAjIDE2OCAgIMKoICBkaWFlcmVzaXMKKworIyBUaGUgdHdvIGdlbmRlciBzeW1ib2xzIGFyZToKKworICAgICAjSGV4ICAgIERvdHMgICAgICAgRGVjIENoYXIgRGVzY3JpcHRpb24KK2NoYXIgXFhCQSAoICAgICAgNyApICAjIDE4NiAgIMK6ICBtYXNjdWxpbmUgb3JkaW5hbCBpbmRpY2F0b3IKK2NoYXIgXFhBQSAoICAgICAgIDgpICAjIDE3MCAgIMKqICBmZW1pbmluZSBvcmRpbmFsIGluZGljYXRvcgorCisjIFRoZSB0aHJlZSByZW1haW5pbmcgY2hhcmFjdGVycyBhcmU6CisKKyAgICAgI0hleCAgICBEb3RzICAgICAgIERlYyBDaGFyIERlc2NyaXB0aW9uCitjaGFyIFxYQUYgKCAyICAgNjcgKSAgIyAxNzUgICDCryAgbWFjcm9uCitjaGFyIFxYQjUgKCAgICA1NjcgKSAgIyAxODEgICDCtSAgbWljcm8gc2lnbgorCisjIFRoZSBub25icmVha2luZyBzcGFjZSBpcyBkb3RzIDcgYW5kIDggYmVjYXVzZSB0aGlzIHByZXNlbnRzIGEgc2VxdWVuY2Ugb2YKKyMgbm9uYnJlYWtpbmcgc3BhY2VzIGFzIGEgc21vb3RoIGxvdyBsaW5lIHNlZ21lbnQuCisKKyAgICAgI0hleCAgICBEb3RzICAgICAgIERlYyBDaGFyIERlc2NyaXB0aW9uCitjaGFyIFxYN0YgKCAgIDQ1NjcgKSAgIyAxMjcgIF4/ICBkZWxldGUKKworaW5jbHVkZSBsdHItYWxpYXMudHRpCitpbmNsdWRlIG51bS1hbGlhcy50dGkKK2luY2x1ZGUgY29tbW9uLnR0aQpkaWZmIC0tZ2l0IGEvVGFibGVzL1RleHQvZW4udHRiIGIvVGFibGVzL1RleHQvZW4udHRiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI1MzdlNDcKLS0tIC9kZXYvbnVsbAorKysgYi9UYWJsZXMvVGV4dC9lbi50dGIKQEAgLTAsMCArMSwyMSBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorIyAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyMKKyMgQ29weXJpZ2h0IChDKSAyMDA4LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorIworIyBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorIworIyBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisjIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyMgbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisjCisjIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMgQlJMVFRZIFRleHQgVGFibGUgLSBFbmdsaXNoCisKK2luY2x1ZGUgZW4tbmFiY2MudHRiCmRpZmYgLS1naXQgYS9UYWJsZXMvVGV4dC9lbl9DQS50dGIgYi9UYWJsZXMvVGV4dC9lbl9DQS50dGIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTdiMTRmYQotLS0gL2Rldi9udWxsCisrKyBiL1RhYmxlcy9UZXh0L2VuX0NBLnR0YgpAQCAtMCwwICsxLDEzNiBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorIyAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyMKKyMgQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorIworIyBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorIworIyBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisjIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyMgbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisjCisjIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMgQlJMVFRZIFRleHQgVGFibGUgLSBFbmdsaXNoIChDYW5hZGEpCisjIERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4KKworIyBUaGlzIHRleHQgdGFibGUgaW1wbGVtZW50cyBOb3J0aCBBbWVyaWNhbiBzdHlsZSBFbmdsaXNoIGJyYWlsbGUsIHRoZQorIyBhZGRpdGlvbmFsIGxldHRlcnMgb2YgdGhlIEZyZW5jaCwgR2VybWFuLCBhbmQgSXRhbGlhbiBhbHBoYWJldHMsIGFuZAorIyBlYXN5LXRvLXJlbWVtYmVyIHJlcHJlc2VudGF0aW9ucyBmb3IgbWFueSBjb21tb24gZXh0cmEgc3ltYm9scy4KKworIyBBU0NJSSBjaGFyYWN0ZXIgcmVwcmVzZW50YXRpb25zIGFzIHVzZWQgYnkgRW5nbGlzaC1zcGVha2luZyBOb3J0aCBBbWVyaWNhbnMKK2luY2x1ZGUgZW4tbmEtYXNjaWkudHRpCisKKyMgdGhlIGNvbnRyb2wgbGV0dGVycworY2hhciBceDAxCSgxICAgICA3OCkgICMg4qOBICAgW1NUQVJUIE9GIEhFQURJTkddCitjaGFyIFx4MDIJKDEyICAgIDc4KSAgIyDio4MgICBbU1RBUlQgT0YgVEVYVF0KK2NoYXIgXHgwMwkoMSAgNCAgNzgpICAjIOKjiSAgIFtFTkQgT0YgVEVYVF0KK2NoYXIgXHgwNAkoMSAgNDUgNzgpICAjIOKjmSAgIFtFTkQgT0YgVFJBTlNNSVNTSU9OXQorY2hhciBceDA1CSgxICAgNSA3OCkgICMg4qORICAgW0VOUVVJUlldCitjaGFyIFx4MDYJKDEyIDQgIDc4KSAgIyDio4sgICBbQUNLTk9XTEVER0VdCitjaGFyIFx4MDcJKDEyIDQ1IDc4KSAgIyDio5sgICBbQkVMTF0KK2NoYXIgXHgwOAkoMTIgIDUgNzgpICAjIOKjkyAgIFtCQUNLU1BBQ0VdCitjaGFyIFx4MDkJKCAyIDQgIDc4KSAgIyDio4ogICBbQ0hBUkFDVEVSIFRBQlVMQVRJT05dCitjaGFyIFx4MEEJKCAyIDQ1IDc4KSAgIyDio5ogICBbTElORSBGRUVEIChMRildCitjaGFyIFx4MEIJKDEgMyAgIDc4KSAgIyDio4UgICBbTElORSBUQUJVTEFUSU9OXQorY2hhciBceDBDCSgxMjMgICA3OCkgICMg4qOHICAgW0ZPUk0gRkVFRCAoRkYpXQorY2hhciBceDBECSgxIDM0ICA3OCkgICMg4qONICAgW0NBUlJJQUdFIFJFVFVSTiAoQ1IpXQorY2hhciBceDBFCSgxIDM0NSA3OCkgICMg4qOdICAgW1NISUZUIE9VVF0KK2NoYXIgXHgwRgkoMSAzIDUgNzgpICAjIOKjlSAgIFtTSElGVCBJTl0KK2NoYXIgXHgxMAkoMTIzNCAgNzgpICAjIOKjjyAgIFtEQVRBIExJTksgRVNDQVBFXQorY2hhciBceDExCSgxMjM0NSA3OCkgICMg4qOfICAgW0RFVklDRSBDT05UUk9MIE9ORV0KK2NoYXIgXHgxMgkoMTIzIDUgNzgpICAjIOKjlyAgIFtERVZJQ0UgQ09OVFJPTCBUV09dCitjaGFyIFx4MTMJKCAyMzQgIDc4KSAgIyDio44gICBbREVWSUNFIENPTlRST0wgVEhSRUVdCitjaGFyIFx4MTQJKCAyMzQ1IDc4KSAgIyDio54gICBbREVWSUNFIENPTlRST0wgRk9VUl0KK2NoYXIgXHgxNQkoMSAzICA2NzgpICAjIOKjpSAgIFtORUdBVElWRSBBQ0tOT1dMRURHRV0KK2NoYXIgXHgxNgkoMTIzICA2NzgpICAjIOKjpyAgIFtTWU5DSFJPTk9VUyBJRExFXQorY2hhciBceDE3CSggMiA0NTY3OCkgICMg4qO6ICAgW0VORCBPRiBUUkFOU01JU1NJT04gQkxPQ0tdCitjaGFyIFx4MTgJKDEgMzQgNjc4KSAgIyDio60gICBbQ0FOQ0VMXQorY2hhciBceDE5CSgxIDM0NTY3OCkgICMg4qO9ICAgW0VORCBPRiBNRURJVU1dCitjaGFyIFx4MUEJKDEgMyA1Njc4KSAgIyDio7UgICBbU1VCU1RJVFVURV0KKworIyBlcXVpdmFsZW50cyB0byBceDJEIFtIWVBIRU4tTUlOVVNdCisKKyMgZXF1aXZhbGVudHMgdG8gXHg3QyBbVkVSVElDQUwgTElORV0KK2NoYXIgXHhBNgkoMTIgIDU2ICApICAjIOKgsyDCpiBbQlJPS0VOIEJBUl0KKworIyBzeW1ib2xzIHJlcHJlc2VudGVkIHVzaW5nIExldHRlcnMgd2l0aCBkb3QgOCBhZGRlZAorY2hhciBceEE5CSgxICA0ICAgOCkgICMg4qKJIMKpIFtDT1BZUklHSFQgU0lHTl0KK2NoYXIgXHhCMAkoMSAgNDUgIDgpICAjIOKimSDCsCBbREVHUkVFIFNJR05dCitjaGFyIFx1MjBBQwkoMSAgIDUgIDgpICAjIOKikSDigqwgW0VVUk8gU0lHTl0KK2NoYXIgXHhCNQkoMSAzNCAgIDgpICAjIOKijSDCtSBbTUlDUk8gU0lHTl0KK2NoYXIgXHhBQwkoMSAzNDUgIDgpICAjIOKinSDCrCBbTk9UIFNJR05dCitjaGFyIFx4QjYJKDEyMzQgICA4KSAgIyDioo8gwrYgW1BJTENST1cgU0lHTl0KK2NoYXIgXHhBRQkoMTIzIDUgIDgpICAjIOKilyDCriBbUkVHSVNURVJFRCBTSUdOXQorY2hhciBceEE3CSggMjM0ICAgOCkgICMg4qKOIMKnIFtTRUNUSU9OIFNJR05dCitjaGFyIFx1MjEyMgkoIDIzNDUgIDgpICAjIOKiniDihKIgW1RSQURFIE1BUksgU0lHTl0KK2NoYXIgXHhBNQkoMSAzNDU2IDgpICAjIOKivSDCpSBbWUVOIFNJR05dCisKKyMgc3ltYm9scyByZXByZXNlbnRlZCB1c2luZyBwdW5jdHVhdGlvbiB3aXRoIGRvdCA3IGFkZGVkCitjaGFyIFx4QTEJKCAyMzQgNjcgKSAgIyDioa4gwqEgW0lOVkVSVEVEIEVYQ0xBTUFUSU9OIE1BUktdCitjaGFyIFx4QkYJKDEgIDQ1NjcgKSAgIyDiobkgwr8gW0lOVkVSVEVEIFFVRVNUSU9OIE1BUktdCitjaGFyIFx4QjcJKCAgIDQgNjcgKSAgIyDioaggwrcgW01JRERMRSBET1RdCitjaGFyIFx4QUIJKDEyMyA1NjcgKSAgIyDiobcgwqsgW0xFRlQtUE9JTlRJTkcgRE9VQkxFIEFOR0xFIFFVT1RBVElPTiBNQVJLXQorY2hhciBceEJCCSggMjM0NTY3ICkgICMg4qG+IMK7IFtSSUdIVC1QT0lOVElORyBET1VCTEUgQU5HTEUgUVVPVEFUSU9OIE1BUktdCitjaGFyIFx4QjEJKCAgMzQgNjcgKSAgIyDioawgwrEgW1BMVVMtTUlOVVMgU0lHTl0KK2NoYXIgXHhENwkoMSAgICA2NyApICAjIOKhoSDDlyBbTVVMVElQTElDQVRJT04gU0lHTl0KK2NoYXIgXHhGNwkoICAzNCAgNyApICAjIOKhjCDDtyBbRElWSVNJT04gU0lHTl0KK2NoYXIgXHUyMjYwCSgxMjM0NTY3ICkgICMg4qG/IOKJoCBbTk9UIEVRVUFMIFRPXQorY2hhciBcdTIyNjQJKDEyICAgNjcgKSAgIyDioaMg4omkIFtMRVNTLVRIQU4gT1IgRVFVQUwgVE9dCitjaGFyIFx1MjI2NQkoICAzNDUgNyApICAjIOKhnCDiiaUgW0dSRUFURVItVEhBTiBPUiBFUVVBTCBUT10KK2NoYXIgXHhBMgkoMTIgNCA2NyApICAjIOKhqyDCoiBbQ0VOVCBTSUdOXQorY2hhciBceEEzCSggIDM0NTY3ICkgICMg4qG8IMKjIFtQT1VORCBTSUdOXQorCisjIEZyZW5jaCBsb3dlcmNhc2UgYWNjZW50ZWQgbGV0dGVycworY2hhciBceEU3CSgxMjM0IDYgOCkgICMg4qKvIMOnIFtMQVRJTiBTTUFMTCBMRVRURVIgQyBXSVRIIENFRElMTEFdCitjaGFyIFx4RTkJKDEyMzQ1NiA4KSAgIyDior8gw6kgW0xBVElOIFNNQUxMIExFVFRFUiBFIFdJVEggQUNVVEVdCitjaGFyIFx4RTAJKDEyMyA1NiA4KSAgIyDiorcgw6AgW0xBVElOIFNNQUxMIExFVFRFUiBBIFdJVEggR1JBVkVdCitjaGFyIFx4RTgJKCAyMzQgNiA4KSAgIyDioq4gw6ggW0xBVElOIFNNQUxMIExFVFRFUiBFIFdJVEggR1JBVkVdCitjaGFyIFx4RjkJKCAyMzQ1NiA4KSAgIyDior4gw7kgW0xBVElOIFNNQUxMIExFVFRFUiBVIFdJVEggR1JBVkVdCitjaGFyIFx4RTIJKDEgICAgNiA4KSAgIyDioqEgw6IgW0xBVElOIFNNQUxMIExFVFRFUiBBIFdJVEggQ0lSQ1VNRkxFWF0KK2NoYXIgXHhFQQkoMTIgICA2IDgpICAjIOKioyDDqiBbTEFUSU4gU01BTEwgTEVUVEVSIEUgV0lUSCBDSVJDVU1GTEVYXQorY2hhciBceEVFCSgxICA0IDYgOCkgICMg4qKpIMOuIFtMQVRJTiBTTUFMTCBMRVRURVIgSSBXSVRIIENJUkNVTUZMRVhdCitjaGFyIFx4RjQJKDEgIDQ1NiA4KSAgIyDiorkgw7QgW0xBVElOIFNNQUxMIExFVFRFUiBPIFdJVEggQ0lSQ1VNRkxFWF0KK2NoYXIgXHhGQgkoMSAgIDU2IDgpICAjIOKisSDDuyBbTEFUSU4gU01BTEwgTEVUVEVSIFUgV0lUSCBDSVJDVU1GTEVYXQorY2hhciBceEVCCSgxMiA0IDYgOCkgICMg4qKrIMOrIFtMQVRJTiBTTUFMTCBMRVRURVIgRSBXSVRIIERJQUVSRVNJU10KK2NoYXIgXHhFRgkoMTIgNDU2IDgpICAjIOKiuyDDryBbTEFUSU4gU01BTEwgTEVUVEVSIEkgV0lUSCBESUFFUkVTSVNdCisKKyMgRnJlbmNoIHVwcGVyY2FzZSBhY2NlbnRlZCBsZXR0ZXJzCitjaGFyIFx4QzcJKDEyMzQgNjc4KSAgIyDio68gw4cgW0xBVElOIENBUElUQUwgTEVUVEVSIEMgV0lUSCBDRURJTExBXQorY2hhciBceEM5CSgxMjM0NTY3OCkgICMg4qO/IMOJIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBFIFdJVEggQUNVVEVdCitjaGFyIFx4QzAJKDEyMyA1Njc4KSAgIyDio7cgw4AgW0xBVElOIENBUElUQUwgTEVUVEVSIEEgV0lUSCBHUkFWRV0KK2NoYXIgXHhDOAkoIDIzNCA2NzgpICAjIOKjriDDiCBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgRSBXSVRIIEdSQVZFXQorY2hhciBceEQ5CSggMjM0NTY3OCkgICMg4qO+IMOZIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBVIFdJVEggR1JBVkVdCitjaGFyIFx4QzIJKDEgICAgNjc4KSAgIyDio6Egw4IgW0xBVElOIENBUElUQUwgTEVUVEVSIEEgV0lUSCBDSVJDVU1GTEVYXQorY2hhciBceENBCSgxMiAgIDY3OCkgICMg4qOjIMOKIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBFIFdJVEggQ0lSQ1VNRkxFWF0KK2NoYXIgXHhDRQkoMSAgNCA2NzgpICAjIOKjqSDDjiBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgSSBXSVRIIENJUkNVTUZMRVhdCitjaGFyIFx4RDQJKDEgIDQ1Njc4KSAgIyDio7kgw5QgW0xBVElOIENBUElUQUwgTEVUVEVSIE8gV0lUSCBDSVJDVU1GTEVYXQorY2hhciBceERCCSgxICAgNTY3OCkgICMg4qOxIMObIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBVIFdJVEggQ0lSQ1VNRkxFWF0KK2NoYXIgXHhDQgkoMTIgNCA2NzgpICAjIOKjqyDDiyBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgRSBXSVRIIERJQUVSRVNJU10KK2NoYXIgXHhDRgkoMTIgNDU2NzgpICAjIOKjuyDDjyBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgSSBXSVRIIERJQUVSRVNJU10KKworIyBHZXJtYW4gbG93ZXJjYXNlIGFjY2VudGVkIGxldHRlcnMKK2NoYXIgXHhFNAkoICAzNDUgIDgpICAjIOKinCDDpCBbTEFUSU4gU01BTEwgTEVUVEVSIEEgV0lUSCBESUFFUkVTSVNdCitjaGFyIFx4RjYJKCAyIDQgNiA4KSAgIyDioqogw7YgW0xBVElOIFNNQUxMIExFVFRFUiBPIFdJVEggRElBRVJFU0lTXQorY2hhciBceEZDCSgxMiAgNTYgOCkgICMg4qKzIMO8IFtMQVRJTiBTTUFMTCBMRVRURVIgVSBXSVRIIERJQUVSRVNJU10KK2NoYXIgXHhERgkoICAzNDU2IDgpICAjIOKivCDDnyBbTEFUSU4gU01BTEwgTEVUVEVSIFNIQVJQIFNdCisKKyMgR2VybWFuIHVwcGVyY2FzZSBhY2NlbnRlZCBsZXR0ZXJzCitjaGFyIFx4QzQJKCAgMzQ1IDc4KSAgIyDio5wgw4QgW0xBVElOIENBUElUQUwgTEVUVEVSIEEgV0lUSCBESUFFUkVTSVNdCitjaGFyIFx4RDYJKCAyIDQgNjc4KSAgIyDio6ogw5YgW0xBVElOIENBUElUQUwgTEVUVEVSIE8gV0lUSCBESUFFUkVTSVNdCitjaGFyIFx4REMJKDEyICA1Njc4KSAgIyDio7Mgw5wgW0xBVElOIENBUElUQUwgTEVUVEVSIFUgV0lUSCBESUFFUkVTSVNdCisKKyMgSXRhbGlhbiBsb3dlcmNhc2UgYWNjZW50ZWQgbGV0dGVycworY2hhciBceEVDCSggIDM0ICAgOCkgICMg4qKMIMOsIFtMQVRJTiBTTUFMTCBMRVRURVIgSSBXSVRIIEdSQVZFXQorY2hhciBceEYyCSggIDM0IDYgOCkgICMg4qKsIMOyIFtMQVRJTiBTTUFMTCBMRVRURVIgTyBXSVRIIEdSQVZFXQorCisjIEl0YWxpYW4gdXBwZXJjYXNlIGFjY2VudGVkIGxldHRlcnMKK2NoYXIgXHhDQwkoICAzNCAgNzgpICAjIOKjjCDDjCBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgSSBXSVRIIEdSQVZFXQorY2hhciBceEQyCSggIDM0IDY3OCkgICMg4qOsIMOSIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBPIFdJVEggR1JBVkVdCisKK2luY2x1ZGUgY29tbW9uLnR0aQpkaWZmIC0tZ2l0IGEvVGFibGVzL1RleHQvZW5fR0IudHRiIGIvVGFibGVzL1RleHQvZW5fR0IudHRiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNhYzczODcKLS0tIC9kZXYvbnVsbAorKysgYi9UYWJsZXMvVGV4dC9lbl9HQi50dGIKQEAgLTAsMCArMSwxNzcgQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyMgICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisjCisjIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyMKKyMgQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjIEJSTFRUWSBUZXh0IFRhYmxlIC0gRW5nbGlzaCAoVW5pdGVkIEtpbmdkb20pCisKKyMgdGhlIHN0YW5kYXJkIHJlcHJlc2VudGF0aW9ucyBmb3IgdGhlIGxldHRlcnMgb2YgdGhlIExhdGluIGFscGhhYmV0CitpbmNsdWRlIGx0ci1sYXRpbi50dGkKKworIyB0aGUgc3RhbmRhcmQgcmVwcmVzZW50YXRpb25zIGZvciB0aGUgTGF0aW4gY29udHJvbCBjaGFyYWN0ZXJzCitpbmNsdWRlIGN0bC1sYXRpbi50dGkKKworIyBnZW5lcmF0ZWQgYnkgdHRidGVzdDogY2hhcnNldD1pc28tODg1OS0xCitjaGFyIFx4MDAJKCAyMzQgNjc4KSAgIyAwMCDio64gICBbTlVMTF0KKyMgTGF0aW4gY29udHJvbCBjaGFyYWN0ZXJzICAjIDAxLTFBCitjaGFyIFx4MUIJKDEyMyA1Njc4KSAgIyAxQiDio7cgICBbRVNDQVBFXQorY2hhciBceDFDCSggIDM0IDY3OCkgICMgMUMg4qOsICAgW0lORk9STUFUSU9OIFNFUEFSQVRPUiBGT1VSXQorY2hhciBceDFECSggMjM0NTY3OCkgICMgMUQg4qO+ICAgW0lORk9STUFUSU9OIFNFUEFSQVRPUiBUSFJFRV0KK2NoYXIgXHgxRQkoICAgICA2NzgpICAjIDFFIOKjoCAgIFtJTkZPUk1BVElPTiBTRVBBUkFUT1IgVFdPXQorY2hhciBceDFGCSggICAgNSA3OCkgICMgMUYg4qOQICAgW0lORk9STUFUSU9OIFNFUEFSQVRPUiBPTkVdCitjaGFyIFx4MjAJKCAgICAgICAgKSAgIyAyMCDioIAgICBbU1BBQ0VdCitjaGFyIFx4MjEJKCAgMzQ1NiAgKSAgIyAyMSDioLwgISBbRVhDTEFNQVRJT04gTUFSS10KK2NoYXIgXHgyMgkoICAgNCAgICApICAjIDIyIOKgiCAiIFtRVU9UQVRJT04gTUFSS10KK2NoYXIgXHgyMwkoICAgIDU2ICApICAjIDIzIOKgsCAjIFtOVU1CRVIgU0lHTl0KK2NoYXIgXHgyNAkoICAgNDU2ICApICAjIDI0IOKguCAkIFtET0xMQVIgU0lHTl0KK2NoYXIgXHgyNQkoICAgNCA2ICApICAjIDI1IOKgqCAlIFtQRVJDRU5UIFNJR05dCitjaGFyIFx4MjYJKDEyMzQgNiAgKSAgIyAyNiDioK8gJiBbQU1QRVJTQU5EXQorY2hhciBceDI3CSggIDMgICAgICkgICMgMjcg4qCEICcgW0FQT1NUUk9QSEVdCitjaGFyIFx4MjgJKCAgIDQ1ICAgKSAgIyAyOCDioJggKCBbTEVGVCBQQVJFTlRIRVNJU10KK2NoYXIgXHgyOQkoICAzNDUgICApICAjIDI5IOKgnCApIFtSSUdIVCBQQVJFTlRIRVNJU10KK2NoYXIgXHgyQQkoICAzIDUgICApICAjIDJBIOKglCAqIFtBU1RFUklTS10KK2NoYXIgXHgyQgkoIDIzIDUgICApICAjIDJCIOKgliArIFtQTFVTIFNJR05dCitjaGFyIFx4MkMJKCAyICAgICAgKSAgIyAyQyDioIIgLCBbQ09NTUFdCitjaGFyIFx4MkQJKCAgMyAgNiAgKSAgIyAyRCDioKQgLSBbSFlQSEVOLU1JTlVTXQorY2hhciBceDJFCSggMiAgNTYgICkgICMgMkUg4qCyIC4gW0ZVTEwgU1RPUF0KK2NoYXIgXHgyRgkoICAzNCAgICApICAjIDJGIOKgjCAvIFtTT0xJRFVTXQorY2hhciBceDMwCSgxMjM0NTYgICkgICMgMzAg4qC/IDAgW0RJR0lUIFpFUk9dCitjaGFyIFx4MzEJKDEgICAgNiAgKSAgIyAzMSDioKEgMSBbRElHSVQgT05FXQorY2hhciBceDMyCSgxMiAgIDYgICkgICMgMzIg4qCjIDIgW0RJR0lUIFRXT10KK2NoYXIgXHgzMwkoMSAgNCA2ICApICAjIDMzIOKgqSAzIFtESUdJVCBUSFJFRV0KK2NoYXIgXHgzNAkoMSAgNDU2ICApICAjIDM0IOKguSA0IFtESUdJVCBGT1VSXQorY2hhciBceDM1CSgxICAgNTYgICkgICMgMzUg4qCxIDUgW0RJR0lUIEZJVkVdCitjaGFyIFx4MzYJKDEyIDQgNiAgKSAgIyAzNiDioKsgNiBbRElHSVQgU0lYXQorY2hhciBceDM3CSgxMiA0NTYgICkgICMgMzcg4qC7IDcgW0RJR0lUIFNFVkVOXQorY2hhciBceDM4CSgxMiAgNTYgICkgICMgMzgg4qCzIDggW0RJR0lUIEVJR0hUXQorY2hhciBceDM5CSggMiA0IDYgICkgICMgMzkg4qCqIDkgW0RJR0lUIE5JTkVdCitjaGFyIFx4M0EJKCAyICA1ICAgKSAgIyAzQSDioJIgOiBbQ09MT05dCitjaGFyIFx4M0IJKCAyMyAgICAgKSAgIyAzQiDioIYgOyBbU0VNSUNPTE9OXQorY2hhciBceDNDCSggMjMgIDYgICkgICMgM0Mg4qCmIDwgW0xFU1MtVEhBTiBTSUdOXQorY2hhciBceDNECSggMjMgNTYgICkgICMgM0Qg4qC2ID0gW0VRVUFMUyBTSUdOXQorY2hhciBceDNFCSggIDMgNTYgICkgICMgM0Ug4qC0ID4gW0dSRUFURVItVEhBTiBTSUdOXQorY2hhciBceDNGCSggMiAgIDYgICkgICMgM0Yg4qCiID8gW1FVRVNUSU9OIE1BUktdCitjaGFyIFx4NDAJKCAyMzQgNjcgKSAgIyA0MCDioa4gQCBbQ09NTUVSQ0lBTCBBVF0KKyMgdXBwZXJjYXNlIExhdGluIGFscGhhYmV0ICAjIDQxLTVBCitjaGFyIFx4NUIJKDEyMyA1NjcgKSAgIyA1QiDiobcgWyBbTEVGVCBTUVVBUkUgQlJBQ0tFVF0KK2NoYXIgXHg1QwkoICAzNCA2NyApICAjIDVDIOKhrCBcIFtSRVZFUlNFIFNPTElEVVNdCitjaGFyIFx4NUQJKCAyMzQ1NjcgKSAgIyA1RCDiob4gXSBbUklHSFQgU1FVQVJFIEJSQUNLRVRdCitjaGFyIFx4NUUJKCAgICAgNjcgKSAgIyA1RSDioaAgXiBbQ0lSQ1VNRkxFWCBBQ0NFTlRdCitjaGFyIFx4NUYJKCAgICA1ICAgKSAgIyA1RiDioJAgXyBbTE9XIExJTkVdCitjaGFyIFx4NjAJKCAyMzQgNiAgKSAgIyA2MCDioK4gYCBbR1JBVkUgQUNDRU5UXQorIyBsb3dlcmNhc2UgTGF0aW4gYWxwaGFiZXQgICMgNjEtN0EKK2NoYXIgXHg3QgkoMTIzIDU2ICApICAjIDdCIOKgtyB7IFtMRUZUIENVUkxZIEJSQUNLRVRdCitjaGFyIFx4N0MJKCAgMzQgNiAgKSAgIyA3QyDioKwgfCBbVkVSVElDQUwgTElORV0KK2NoYXIgXHg3RAkoIDIzNDU2ICApICAjIDdEIOKgviB9IFtSSUdIVCBDVVJMWSBCUkFDS0VUXQorY2hhciBceDdFCSggICAgIDYgICkgICMgN0Ug4qCgIH4gW1RJTERFXQorY2hhciBceDdGCSggICAgNSA3ICkgICMgN0Yg4qGQICAgW0RFTEVURV0KK2NoYXIgXHhBMQkoICAzICA2NyApICAjIEExIOKhpCDCoSBbSU5WRVJURUQgRVhDTEFNQVRJT04gTUFSS10KK2NoYXIgXHhBMgkoICAgIDUgIDgpICAjIEEyIOKikCDCoiBbQ0VOVCBTSUdOXQorY2hhciBceEEzCSggICA0IDY3ICkgICMgQTMg4qGoIMKjIFtQT1VORCBTSUdOXQorY2hhciBceEE0CSggIDMgIDY3OCkgICMgQTQg4qOkIMKkIFtDVVJSRU5DWSBTSUdOXQorY2hhciBceEE1CSggICA0IDYgOCkgICMgQTUg4qKoIMKlIFtZRU4gU0lHTl0KK2NoYXIgXHhBNgkoIDIgICA2NzgpICAjIEE2IOKjoiDCpiBbQlJPS0VOIEJBUl0KK2NoYXIgXHhBNwkoMTIzNDU2NzgpICAjIEE3IOKjvyDCpyBbU0VDVElPTiBTSUdOXQorY2hhciBceEE4CSggMiAgICA3OCkgICMgQTgg4qOCIMKoIFtESUFFUkVTSVNdCitjaGFyIFx4QTkJKDEgIDQ1NjcgKSAgIyBBOSDiobkgwqkgW0NPUFlSSUdIVCBTSUdOXQorY2hhciBceEFBCSgxMiAgNSAgOCkgICMgQUEg4qKTIMKqIFtGRU1JTklORSBPUkRJTkFMIElORElDQVRPUl0KK2NoYXIgXHhBQgkoICAgIDU2NzgpICAjIEFCIOKjsCDCqyBbTEVGVC1QT0lOVElORyBET1VCTEUgQU5HTEUgUVVPVEFUSU9OIE1BUktdCitjaGFyIFx4QUMJKCAyICA1Njc4KSAgIyBBQyDio7IgwqwgW05PVCBTSUdOXQorY2hhciBceEFECSgxMiA0ICAgOCkgICMgQUQg4qKLIMKtIFtTT0ZUIEhZUEhFTl0KK2NoYXIgXHhBRQkoICAgNCA2NzgpICAjIEFFIOKjqCDCriBbUkVHSVNURVJFRCBTSUdOXQorY2hhciBceEFGCSgxMiA0NSAgOCkgICMgQUYg4qKbIMKvIFtNQUNST05dCitjaGFyIFx4QjAJKCAgIDQ1NiA4KSAgIyBCMCDiorggwrAgW0RFR1JFRSBTSUdOXQorY2hhciBceEIxCSggMjMgNSA3OCkgICMgQjEg4qOWIMKxIFtQTFVTLU1JTlVTIFNJR05dCitjaGFyIFx4QjIJKDEyICAgICA4KSAgIyBCMiDiooMgwrIgW1NVUEVSU0NSSVBUIFRXT10KK2NoYXIgXHhCMwkoIDIzICAgNyApICAjIEIzIOKhhiDCsyBbU1VQRVJTQ1JJUFQgVEhSRUVdCitjaGFyIFx4QjQJKDEgMyA1NiA4KSAgIyBCNCDiorUgwrQgW0FDVVRFIEFDQ0VOVF0KK2NoYXIgXHhCNQkoMSAzNCAgIDgpICAjIEI1IOKijSDCtSBbTUlDUk8gU0lHTl0KK2NoYXIgXHhCNgkoMTIzNDU2NzgpICAjIEI2IOKjvyDCtiBbUElMQ1JPVyBTSUdOXQorY2hhciBceEI3CSggIDMgICA3ICkgICMgQjcg4qGEIMK3IFtNSURETEUgRE9UXQorY2hhciBceEI4CSgxICA0ICAgOCkgICMgQjgg4qKJIMK4IFtDRURJTExBXQorY2hhciBceEI5CSggICA0NSA3ICkgICMgQjkg4qGYIMK5IFtTVVBFUlNDUklQVCBPTkVdCitjaGFyIFx4QkEJKCAyIDQ1ICA4KSAgIyBCQSDiopogwrogW01BU0NVTElORSBPUkRJTkFMIElORElDQVRPUl0KK2NoYXIgXHhCQgkoICAgNDUgNzgpICAjIEJCIOKjmCDCuyBbUklHSFQtUE9JTlRJTkcgRE9VQkxFIEFOR0xFIFFVT1RBVElPTiBNQVJLXQorY2hhciBceEJDCSgxIDMgIDYgOCkgICMgQkMg4qKlIMK8IFtWVUxHQVIgRlJBQ1RJT04gT05FIFFVQVJURVJdCitjaGFyIFx4QkQJKDEyMyAgNiA4KSAgIyBCRCDioqcgwr0gW1ZVTEdBUiBGUkFDVElPTiBPTkUgSEFMRl0KK2NoYXIgXHhCRQkoICAzNCAgNzgpICAjIEJFIOKjjCDCviBbVlVMR0FSIEZSQUNUSU9OIFRIUkVFIFFVQVJURVJTXQorY2hhciBceEJGCSggIDMgICAgOCkgICMgQkYg4qKEIMK/IFtJTlZFUlRFRCBRVUVTVElPTiBNQVJLXQorY2hhciBceEMwCSggIDMgICA3OCkgICMgQzAg4qOEIMOAIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBBIFdJVEggR1JBVkVdCitjaGFyIFx4QzEJKCAyICAgIDcgKSAgIyBDMSDioYIgw4EgW0xBVElOIENBUElUQUwgTEVUVEVSIEEgV0lUSCBBQ1VURV0KK2NoYXIgXHhDMgkoMSAzICAgIDgpICAjIEMyIOKihSDDgiBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgQSBXSVRIIENJUkNVTUZMRVhdCitjaGFyIFx4QzMJKCAyMyAgNjcgKSAgIyBDMyDioaYgw4MgW0xBVElOIENBUElUQUwgTEVUVEVSIEEgV0lUSCBUSUxERV0KK2NoYXIgXHhDNAkoICAgIDU2NyApICAjIEM0IOKhsCDDhCBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgQSBXSVRIIERJQUVSRVNJU10KK2NoYXIgXHhDNQkoICAzNDU2NyApICAjIEM1IOKhvCDDhSBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgQSBXSVRIIFJJTkcgQUJPVkVdCitjaGFyIFx4QzYJKCAgIDQgIDcgKSAgIyBDNiDioYggw4YgW0xBVElOIENBUElUQUwgTEVUVEVSIEFFXQorY2hhciBceEM3CSgxMjM0IDY3ICkgICMgQzcg4qGvIMOHIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBDIFdJVEggQ0VESUxMQV0KK2NoYXIgXHhDOAkoIDIzICAgNzgpICAjIEM4IOKjhiDDiCBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgRSBXSVRIIEdSQVZFXQorY2hhciBceEM5CSggMjMgICAgOCkgICMgQzkg4qKGIMOJIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBFIFdJVEggQUNVVEVdCitjaGFyIFx4Q0EJKCAgICAgICA4KSAgIyBDQSDiooAgw4ogW0xBVElOIENBUElUQUwgTEVUVEVSIEUgV0lUSCBDSVJDVU1GTEVYXQorY2hhciBceENCCSgxMjM0NSAgOCkgICMgQ0Ig4qKfIMOLIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBFIFdJVEggRElBRVJFU0lTXQorY2hhciBceENDCSgxMjMgICAgOCkgICMgQ0Mg4qKHIMOMIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBJIFdJVEggR1JBVkVdCitjaGFyIFx4Q0QJKCAyICA1IDc4KSAgIyBDRCDio5Igw40gW0xBVElOIENBUElUQUwgTEVUVEVSIEkgV0lUSCBBQ1VURV0KK2NoYXIgXHhDRQkoMTIgNDU2NzgpICAjIENFIOKjuyDDjiBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgSSBXSVRIIENJUkNVTUZMRVhdCitjaGFyIFx4Q0YJKDEgICAgNjcgKSAgIyBDRiDioaEgw48gW0xBVElOIENBUElUQUwgTEVUVEVSIEkgV0lUSCBESUFFUkVTSVNdCitjaGFyIFx4RDAJKCAgMzQ1IDcgKSAgIyBEMCDioZwgw5AgW0xBVElOIENBUElUQUwgTEVUVEVSIEVUSF0KK2NoYXIgXHhEMQkoIDIgIDU2NyApICAjIEQxIOKhsiDDkSBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgTiBXSVRIIFRJTERFXQorY2hhciBceEQyCSggMiAgICAgOCkgICMgRDIg4qKCIMOSIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBPIFdJVEggR1JBVkVdCitjaGFyIFx4RDMJKCAyIDQgNjc4KSAgIyBEMyDio6ogw5MgW0xBVElOIENBUElUQUwgTEVUVEVSIE8gV0lUSCBBQ1VURV0KK2NoYXIgXHhENAkoIDIgNCAgIDgpICAjIEQ0IOKiiiDDlCBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgTyBXSVRIIENJUkNVTUZMRVhdCitjaGFyIFx4RDUJKDEyMzQgNiA4KSAgIyBENSDioq8gw5UgW0xBVElOIENBUElUQUwgTEVUVEVSIE8gV0lUSCBUSUxERV0KK2NoYXIgXHhENgkoICAzIDUgIDgpICAjIEQ2IOKilCDDliBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgTyBXSVRIIERJQUVSRVNJU10KK2NoYXIgXHhENwkoMTIzIDUgIDgpICAjIEQ3IOKilyDDlyBbTVVMVElQTElDQVRJT04gU0lHTl0KK2NoYXIgXHhEOAkoICAzIDU2NyApICAjIEQ4IOKhtCDDmCBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgTyBXSVRIIFNUUk9LRV0KK2NoYXIgXHhEOQkoICAgNDU2NzgpICAjIEQ5IOKjuCDDmSBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgVSBXSVRIIEdSQVZFXQorY2hhciBceERBCSggMiAgNSA3ICkgICMgREEg4qGSIMOaIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBVIFdJVEggQUNVVEVdCitjaGFyIFx4REIJKDEyMzQ1Njc4KSAgIyBEQiDio78gw5sgW0xBVElOIENBUElUQUwgTEVUVEVSIFUgV0lUSCBDSVJDVU1GTEVYXQorY2hhciBceERDCSggMjMgIDYgOCkgICMgREMg4qKmIMOcIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBVIFdJVEggRElBRVJFU0lTXQorY2hhciBceERECSggMjMgIDY3OCkgICMgREQg4qOmIMOdIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBZIFdJVEggQUNVVEVdCitjaGFyIFx4REUJKCAgMyA1Njc4KSAgIyBERSDio7Qgw54gW0xBVElOIENBUElUQUwgTEVUVEVSIFRIT1JOXQorY2hhciBceERGCSggIDM0NTYgOCkgICMgREYg4qK8IMOfIFtMQVRJTiBTTUFMTCBMRVRURVIgU0hBUlAgU10KK2NoYXIgXHhFMAkoMTIzIDU2IDgpICAjIEUwIOKityDDoCBbTEFUSU4gU01BTEwgTEVUVEVSIEEgV0lUSCBHUkFWRV0KK2NoYXIgXHhFMQkoMSAgICA2IDgpICAjIEUxIOKioSDDoSBbTEFUSU4gU01BTEwgTEVUVEVSIEEgV0lUSCBBQ1VURV0KK2NoYXIgXHhFMgkoMSAgICA2NzgpICAjIEUyIOKjoSDDoiBbTEFUSU4gU01BTEwgTEVUVEVSIEEgV0lUSCBDSVJDVU1GTEVYXQorY2hhciBceEUzCSgxMjM0ICAgOCkgICMgRTMg4qKPIMOjIFtMQVRJTiBTTUFMTCBMRVRURVIgQSBXSVRIIFRJTERFXQorY2hhciBceEU0CSggIDM0NSAgOCkgICMgRTQg4qKcIMOkIFtMQVRJTiBTTUFMTCBMRVRURVIgQSBXSVRIIERJQUVSRVNJU10KK2NoYXIgXHhFNQkoICAzNDU2NzgpICAjIEU1IOKjvCDDpSBbTEFUSU4gU01BTEwgTEVUVEVSIEEgV0lUSCBSSU5HIEFCT1ZFXQorY2hhciBceEU2CSggICA0ICA3OCkgICMgRTYg4qOIIMOmIFtMQVRJTiBTTUFMTCBMRVRURVIgQUVdCitjaGFyIFx4RTcJKDEyMzQgNjc4KSAgIyBFNyDio68gw6cgW0xBVElOIFNNQUxMIExFVFRFUiBDIFdJVEggQ0VESUxMQV0KK2NoYXIgXHhFOAkoIDIzNCA2IDgpICAjIEU4IOKiriDDqCBbTEFUSU4gU01BTEwgTEVUVEVSIEUgV0lUSCBHUkFWRV0KK2NoYXIgXHhFOQkoMTIgICA2IDgpICAjIEU5IOKioyDDqSBbTEFUSU4gU01BTEwgTEVUVEVSIEUgV0lUSCBBQ1VURV0KK2NoYXIgXHhFQQkoMTIgICA2NzgpICAjIEVBIOKjoyDDqiBbTEFUSU4gU01BTEwgTEVUVEVSIEUgV0lUSCBDSVJDVU1GTEVYXQorY2hhciBceEVCCSgxMiA0IDYgOCkgICMgRUIg4qKrIMOrIFtMQVRJTiBTTUFMTCBMRVRURVIgRSBXSVRIIERJQUVSRVNJU10KK2NoYXIgXHhFQwkoICAzNCAgIDgpICAjIEVDIOKijCDDrCBbTEFUSU4gU01BTEwgTEVUVEVSIEkgV0lUSCBHUkFWRV0KK2NoYXIgXHhFRAkoMSAgNCA2IDgpICAjIEVEIOKiqSDDrSBbTEFUSU4gU01BTEwgTEVUVEVSIEkgV0lUSCBBQ1VURV0KK2NoYXIgXHhFRQkoMSAgNCA2NzgpICAjIEVFIOKjqSDDriBbTEFUSU4gU01BTEwgTEVUVEVSIEkgV0lUSCBDSVJDVU1GTEVYXQorY2hhciBceEVGCSgxMiA0NTYgOCkgICMgRUYg4qK7IMOvIFtMQVRJTiBTTUFMTCBMRVRURVIgSSBXSVRIIERJQUVSRVNJU10KK2NoYXIgXHhGMAkoIDIzIDU2IDgpICAjIEYwIOKitiDDsCBbTEFUSU4gU01BTEwgTEVUVEVSIEVUSF0KK2NoYXIgXHhGMQkoMSAzNDUgIDgpICAjIEYxIOKinSDDsSBbTEFUSU4gU01BTEwgTEVUVEVSIE4gV0lUSCBUSUxERV0KK2NoYXIgXHhGMgkoICAzNCA2IDgpICAjIEYyIOKirCDDsiBbTEFUSU4gU01BTEwgTEVUVEVSIE8gV0lUSCBHUkFWRV0KK2NoYXIgXHhGMwkoMSAgNDU2IDgpICAjIEYzIOKiuSDDsyBbTEFUSU4gU01BTEwgTEVUVEVSIE8gV0lUSCBBQ1VURV0KK2NoYXIgXHhGNAkoMSAgNDU2NzgpICAjIEY0IOKjuSDDtCBbTEFUSU4gU01BTEwgTEVUVEVSIE8gV0lUSCBDSVJDVU1GTEVYXQorY2hhciBceEY1CSgxICAgNTY3ICkgICMgRjUg4qGxIMO1IFtMQVRJTiBTTUFMTCBMRVRURVIgTyBXSVRIIFRJTERFXQorY2hhciBceEY2CSggMiA0IDYgOCkgICMgRjYg4qKqIMO2IFtMQVRJTiBTTUFMTCBMRVRURVIgTyBXSVRIIERJQUVSRVNJU10KK2NoYXIgXHhGNwkoMTIgIDU2NzgpICAjIEY3IOKjsyDDtyBbRElWSVNJT04gU0lHTl0KK2NoYXIgXHhGOAkoICAgICAgNzgpICAjIEY4IOKjgCDDuCBbTEFUSU4gU01BTEwgTEVUVEVSIE8gV0lUSCBTVFJPS0VdCitjaGFyIFx4RjkJKCAyMzQ1NiA4KSAgIyBGOSDior4gw7kgW0xBVElOIFNNQUxMIExFVFRFUiBVIFdJVEggR1JBVkVdCitjaGFyIFx4RkEJKDEgICA1NiA4KSAgIyBGQSDiorEgw7ogW0xBVElOIFNNQUxMIExFVFRFUiBVIFdJVEggQUNVVEVdCitjaGFyIFx4RkIJKDEgICA1Njc4KSAgIyBGQiDio7Egw7sgW0xBVElOIFNNQUxMIExFVFRFUiBVIFdJVEggQ0lSQ1VNRkxFWF0KK2NoYXIgXHhGQwkoMTIgIDU2IDgpICAjIEZDIOKisyDDvCBbTEFUSU4gU01BTEwgTEVUVEVSIFUgV0lUSCBESUFFUkVTSVNdCitjaGFyIFx4RkQJKCAyMyA1Njc4KSAgIyBGRCDio7Ygw70gW0xBVElOIFNNQUxMIExFVFRFUiBZIFdJVEggQUNVVEVdCitjaGFyIFx4RkUJKDEyMzQ1NjcgKSAgIyBGRSDiob8gw74gW0xBVElOIFNNQUxMIExFVFRFUiBUSE9STl0KK2NoYXIgXHhGRgkoMTIzNDU2IDgpICAjIEZGIOKivyDDvyBbTEFUSU4gU01BTEwgTEVUVEVSIFkgV0lUSCBESUFFUkVTSVNdCisKK2luY2x1ZGUgY29tbW9uLnR0aQpkaWZmIC0tZ2l0IGEvVGFibGVzL1RleHQvZW5fVVMudHRiIGIvVGFibGVzL1RleHQvZW5fVVMudHRiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFlOTM4MmYKLS0tIC9kZXYvbnVsbAorKysgYi9UYWJsZXMvVGV4dC9lbl9VUy50dGIKQEAgLTAsMCArMSwxNzEgQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyMgICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisjCisjIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyMKKyMgQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjIEJSTFRUWSBUZXh0IFRhYmxlIC0gRW5nbGlzaCAoVW5pdGVkIFN0YXRlcykKKworIyB0aGUgc3RhbmRhcmQgcmVwcmVzZW50YXRpb25zIGZvciB0aGUgbGV0dGVycyBvZiB0aGUgTGF0aW4gYWxwaGFiZXQKK2luY2x1ZGUgbHRyLWxhdGluLnR0aQorCisjIHRoZSBzdGFuZGFyZCByZXByZXNlbnRhdGlvbnMgZm9yIHRoZSBMYXRpbiBjb250cm9sIGNoYXJhY3RlcnMKK2luY2x1ZGUgY3RsLWxhdGluLnR0aQorCisjIHRoZSBudW1iZXJzIDAtOSBhcmUgcmVwcmVzZW50ZWQgdXNpbmcgdGhlIE5lbWV0aCAobG93ZXIgbnVtYmVycykgc2NoZW1lCitpbmNsdWRlIG51bS1uZW1ldGgudHRpCisKKyMgZ2VuZXJhdGVkIGJ5IHR0YnRlc3Q6IGNoYXJzZXQ9aXNvLTg4NTktMQorY2hhciBceDAwCSggICA0ICA3OCkgICMgMDAg4qOIICAgW05VTExdCisjIExhdGluIGNvbnRyb2wgY2hhcmFjdGVycyAgIyAwMS0xQQorY2hhciBceDFCCSggMiA0IDY3OCkgICMgMUIg4qOqICAgW0VTQ0FQRV0KK2NoYXIgXHgxQwkoMTIgIDU2NzgpICAjIDFDIOKjsyAgIFtJTkZPUk1BVElPTiBTRVBBUkFUT1IgRk9VUl0KK2NoYXIgXHgxRAkoMTIgNDU2NzgpICAjIDFEIOKjuyAgIFtJTkZPUk1BVElPTiBTRVBBUkFUT1IgVEhSRUVdCitjaGFyIFx4MUUJKCAgIDQ1IDc4KSAgIyAxRSDio5ggICBbSU5GT1JNQVRJT04gU0VQQVJBVE9SIFRXT10KK2NoYXIgXHgxRgkoICAgNDU2NzgpICAjIDFGIOKjuCAgIFtJTkZPUk1BVElPTiBTRVBBUkFUT1IgT05FXQorY2hhciBceDIwCSggICAgICAgICkgICMgMjAg4qCAICAgW1NQQUNFXQorY2hhciBceDIxCSggMjM0IDYgICkgICMgMjEg4qCuICEgW0VYQ0xBTUFUSU9OIE1BUktdCitjaGFyIFx4MjIJKCAgICA1ICAgKSAgIyAyMiDioJAgIiBbUVVPVEFUSU9OIE1BUktdCitjaGFyIFx4MjMJKCAgMzQ1NiAgKSAgIyAyMyDioLwgIyBbTlVNQkVSIFNJR05dCitjaGFyIFx4MjQJKDEyIDQgNiAgKSAgIyAyNCDioKsgJCBbRE9MTEFSIFNJR05dCitjaGFyIFx4MjUJKDEgIDQgNiAgKSAgIyAyNSDioKkgJSBbUEVSQ0VOVCBTSUdOXQorY2hhciBceDI2CSgxMjM0IDYgICkgICMgMjYg4qCvICYgW0FNUEVSU0FORF0KK2NoYXIgXHgyNwkoICAzICAgICApICAjIDI3IOKghCAnIFtBUE9TVFJPUEhFXQorY2hhciBceDI4CSgxMjMgNTYgICkgICMgMjgg4qC3ICggW0xFRlQgUEFSRU5USEVTSVNdCitjaGFyIFx4MjkJKCAyMzQ1NiAgKSAgIyAyOSDioL4gKSBbUklHSFQgUEFSRU5USEVTSVNdCitjaGFyIFx4MkEJKDEgICAgNiAgKSAgIyAyQSDioKEgKiBbQVNURVJJU0tdCitjaGFyIFx4MkIJKCAgMzQgNiAgKSAgIyAyQiDioKwgKyBbUExVUyBTSUdOXQorY2hhciBceDJDCSggICAgIDYgICkgICMgMkMg4qCgICwgW0NPTU1BXQorY2hhciBceDJECSggIDMgIDYgICkgICMgMkQg4qCkIC0gW0hZUEhFTi1NSU5VU10KK2NoYXIgXHgyRQkoICAgNCA2ICApICAjIDJFIOKgqCAuIFtGVUxMIFNUT1BdCitjaGFyIFx4MkYJKCAgMzQgICAgKSAgIyAyRiDioIwgLyBbU09MSURVU10KKyMgSGluZHUtQXJhYmljIG51bWVyYWxzICAgICAjIDMwLTM5CitjaGFyIFx4M0EJKDEgICA1NiAgKSAgIyAzQSDioLEgOiBbQ09MT05dCitjaGFyIFx4M0IJKCAgICA1NiAgKSAgIyAzQiDioLAgOyBbU0VNSUNPTE9OXQorY2hhciBceDNDCSgxMiAgIDYgICkgICMgM0Mg4qCjIDwgW0xFU1MtVEhBTiBTSUdOXQorY2hhciBceDNECSgxMjM0NTYgICkgICMgM0Qg4qC/ID0gW0VRVUFMUyBTSUdOXQorY2hhciBceDNFCSggIDM0NSAgICkgICMgM0Ug4qCcID4gW0dSRUFURVItVEhBTiBTSUdOXQorY2hhciBceDNGCSgxICA0NTYgICkgICMgM0Yg4qC5ID8gW1FVRVNUSU9OIE1BUktdCitjaGFyIFx4NDAJKCAgIDQgIDcgKSAgIyA0MCDioYggQCBbQ09NTUVSQ0lBTCBBVF0KKyMgdXBwZXJjYXNlIExhdGluIGFscGhhYmV0ICAjIDQxLTVBCitjaGFyIFx4NUIJKCAyIDQgNjcgKSAgIyA1QiDioaogWyBbTEVGVCBTUVVBUkUgQlJBQ0tFVF0KK2NoYXIgXHg1QwkoMTIgIDU2NyApICAjIDVDIOKhsyBcIFtSRVZFUlNFIFNPTElEVVNdCitjaGFyIFx4NUQJKDEyIDQ1NjcgKSAgIyA1RCDiobsgXSBbUklHSFQgU1FVQVJFIEJSQUNLRVRdCitjaGFyIFx4NUUJKCAgIDQ1IDcgKSAgIyA1RSDioZggXiBbQ0lSQ1VNRkxFWCBBQ0NFTlRdCitjaGFyIFx4NUYJKCAgIDQ1NiAgKSAgIyA1RiDioLggXyBbTE9XIExJTkVdCitjaGFyIFx4NjAJKCAgIDQgICAgKSAgIyA2MCDioIggYCBbR1JBVkUgQUNDRU5UXQorIyBsb3dlcmNhc2UgTGF0aW4gYWxwaGFiZXQgICMgNjEtN0EKK2NoYXIgXHg3QgkoIDIgNCA2ICApICAjIDdCIOKgqiB7IFtMRUZUIENVUkxZIEJSQUNLRVRdCitjaGFyIFx4N0MJKDEyICA1NiAgKSAgIyA3QyDioLMgfCBbVkVSVElDQUwgTElORV0KK2NoYXIgXHg3RAkoMTIgNDU2ICApICAjIDdEIOKguyB9IFtSSUdIVCBDVVJMWSBCUkFDS0VUXQorY2hhciBceDdFCSggICA0NSAgICkgICMgN0Ug4qCYIH4gW1RJTERFXQorY2hhciBceDdGCSggICA0NTY3ICkgICMgN0Yg4qG4ICAgW0RFTEVURV0KK2NoYXIgXHhBMQkoICAzICA2NyApICAjIEExIOKhpCDCoSBbSU5WRVJURUQgRVhDTEFNQVRJT04gTUFSS10KK2NoYXIgXHhBMgkoICAgIDUgIDgpICAjIEEyIOKikCDCoiBbQ0VOVCBTSUdOXQorY2hhciBceEEzCSggICA0IDY3ICkgICMgQTMg4qGoIMKjIFtQT1VORCBTSUdOXQorY2hhciBceEE0CSggIDMgIDY3OCkgICMgQTQg4qOkIMKkIFtDVVJSRU5DWSBTSUdOXQorY2hhciBceEE1CSggICA0IDYgOCkgICMgQTUg4qKoIMKlIFtZRU4gU0lHTl0KK2NoYXIgXHhBNgkoIDIgICA2NzgpICAjIEE2IOKjoiDCpiBbQlJPS0VOIEJBUl0KK2NoYXIgXHhBNwkoMTIzNDU2NzgpICAjIEE3IOKjvyDCpyBbU0VDVElPTiBTSUdOXQorY2hhciBceEE4CSggMiAgICA3OCkgICMgQTgg4qOCIMKoIFtESUFFUkVTSVNdCitjaGFyIFx4QTkJKDEgIDQ1NjcgKSAgIyBBOSDiobkgwqkgW0NPUFlSSUdIVCBTSUdOXQorY2hhciBceEFBCSgxMiAgNSAgOCkgICMgQUEg4qKTIMKqIFtGRU1JTklORSBPUkRJTkFMIElORElDQVRPUl0KK2NoYXIgXHhBQgkoMTIzIDU2NzgpICAjIEFCIOKjtyDCqyBbTEVGVC1QT0lOVElORyBET1VCTEUgQU5HTEUgUVVPVEFUSU9OIE1BUktdCitjaGFyIFx4QUMJKCAyICA1Njc4KSAgIyBBQyDio7IgwqwgW05PVCBTSUdOXQorY2hhciBceEFECSggMjM0IDY3ICkgICMgQUQg4qGuIMKtIFtTT0ZUIEhZUEhFTl0KK2NoYXIgXHhBRQkoICAgNCA2NzgpICAjIEFFIOKjqCDCriBbUkVHSVNURVJFRCBTSUdOXQorY2hhciBceEFGCSgxMiA0NSAgOCkgICMgQUYg4qKbIMKvIFtNQUNST05dCitjaGFyIFx4QjAJKCAgIDQ1NiA4KSAgIyBCMCDiorggwrAgW0RFR1JFRSBTSUdOXQorY2hhciBceEIxCSggMjMgNSA3OCkgICMgQjEg4qOWIMKxIFtQTFVTLU1JTlVTIFNJR05dCitjaGFyIFx4QjIJKDEyICAgICA4KSAgIyBCMiDiooMgwrIgW1NVUEVSU0NSSVBUIFRXT10KK2NoYXIgXHhCMwkoIDIzICAgNyApICAjIEIzIOKhhiDCsyBbU1VQRVJTQ1JJUFQgVEhSRUVdCitjaGFyIFx4QjQJKDEgMyA1NiA4KSAgIyBCNCDiorUgwrQgW0FDVVRFIEFDQ0VOVF0KK2NoYXIgXHhCNQkoMSAzNCAgIDgpICAjIEI1IOKijSDCtSBbTUlDUk8gU0lHTl0KK2NoYXIgXHhCNgkoMTIzNDU2NzgpICAjIEI2IOKjvyDCtiBbUElMQ1JPVyBTSUdOXQorY2hhciBceEI3CSggIDMgICA3ICkgICMgQjcg4qGEIMK3IFtNSURETEUgRE9UXQorY2hhciBceEI4CSgxICA0ICAgOCkgICMgQjgg4qKJIMK4IFtDRURJTExBXQorY2hhciBceEI5CSgxMjMgNTY3ICkgICMgQjkg4qG3IMK5IFtTVVBFUlNDUklQVCBPTkVdCitjaGFyIFx4QkEJKCAyIDQ1ICA4KSAgIyBCQSDiopogwrogW01BU0NVTElORSBPUkRJTkFMIElORElDQVRPUl0KK2NoYXIgXHhCQgkoIDIzNDU2NzgpICAjIEJCIOKjviDCuyBbUklHSFQtUE9JTlRJTkcgRE9VQkxFIEFOR0xFIFFVT1RBVElPTiBNQVJLXQorY2hhciBceEJDCSgxIDMgIDYgOCkgICMgQkMg4qKlIMK8IFtWVUxHQVIgRlJBQ1RJT04gT05FIFFVQVJURVJdCitjaGFyIFx4QkQJKDEyMyAgNiA4KSAgIyBCRCDioqcgwr0gW1ZVTEdBUiBGUkFDVElPTiBPTkUgSEFMRl0KK2NoYXIgXHhCRQkoICAzNCA2NzgpICAjIEJFIOKjrCDCviBbVlVMR0FSIEZSQUNUSU9OIFRIUkVFIFFVQVJURVJTXQorY2hhciBceEJGCSggIDMgICAgOCkgICMgQkYg4qKEIMK/IFtJTlZFUlRFRCBRVUVTVElPTiBNQVJLXQorY2hhciBceEMwCSggIDMgICA3OCkgICMgQzAg4qOEIMOAIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBBIFdJVEggR1JBVkVdCitjaGFyIFx4QzEJKCAyICAgIDcgKSAgIyBDMSDioYIgw4EgW0xBVElOIENBUElUQUwgTEVUVEVSIEEgV0lUSCBBQ1VURV0KK2NoYXIgXHhDMgkoMSAzICAgIDgpICAjIEMyIOKihSDDgiBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgQSBXSVRIIENJUkNVTUZMRVhdCitjaGFyIFx4QzMJKCAyMyAgNjcgKSAgIyBDMyDioaYgw4MgW0xBVElOIENBUElUQUwgTEVUVEVSIEEgV0lUSCBUSUxERV0KK2NoYXIgXHhDNAkoICAgIDU2NyApICAjIEM0IOKhsCDDhCBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgQSBXSVRIIERJQUVSRVNJU10KK2NoYXIgXHhDNQkoICAzNDU2NyApICAjIEM1IOKhvCDDhSBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgQSBXSVRIIFJJTkcgQUJPVkVdCitjaGFyIFx4QzYJKCAgMzQ1IDcgKSAgIyBDNiDioZwgw4YgW0xBVElOIENBUElUQUwgTEVUVEVSIEFFXQorY2hhciBceEM3CSgxMjM0IDY3ICkgICMgQzcg4qGvIMOHIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBDIFdJVEggQ0VESUxMQV0KK2NoYXIgXHhDOAkoIDIzICAgNzgpICAjIEM4IOKjhiDDiCBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgRSBXSVRIIEdSQVZFXQorY2hhciBceEM5CSggMjMgICAgOCkgICMgQzkg4qKGIMOJIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBFIFdJVEggQUNVVEVdCitjaGFyIFx4Q0EJKCAgICAgICA4KSAgIyBDQSDiooAgw4ogW0xBVElOIENBUElUQUwgTEVUVEVSIEUgV0lUSCBDSVJDVU1GTEVYXQorY2hhciBceENCCSgxMjM0NSAgOCkgICMgQ0Ig4qKfIMOLIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBFIFdJVEggRElBRVJFU0lTXQorY2hhciBceENDCSgxMiA0ICAgOCkgICMgQ0Mg4qKLIMOMIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBJIFdJVEggR1JBVkVdCitjaGFyIFx4Q0QJKCAyICA1IDc4KSAgIyBDRCDio5Igw40gW0xBVElOIENBUElUQUwgTEVUVEVSIEkgV0lUSCBBQ1VURV0KK2NoYXIgXHhDRQkoICAgIDU2NzgpICAjIENFIOKjsCDDjiBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgSSBXSVRIIENJUkNVTUZMRVhdCitjaGFyIFx4Q0YJKDEgICAgNjcgKSAgIyBDRiDioaEgw48gW0xBVElOIENBUElUQUwgTEVUVEVSIEkgV0lUSCBESUFFUkVTSVNdCitjaGFyIFx4RDAJKCAgICA1IDcgKSAgIyBEMCDioZAgw5AgW0xBVElOIENBUElUQUwgTEVUVEVSIEVUSF0KK2NoYXIgXHhEMQkoIDIgIDU2NyApICAjIEQxIOKhsiDDkSBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgTiBXSVRIIFRJTERFXQorY2hhciBceEQyCSggMiAgICAgOCkgICMgRDIg4qKCIMOSIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBPIFdJVEggR1JBVkVdCitjaGFyIFx4RDMJKDEyMyAgICA4KSAgIyBEMyDioocgw5MgW0xBVElOIENBUElUQUwgTEVUVEVSIE8gV0lUSCBBQ1VURV0KK2NoYXIgXHhENAkoIDIgNCAgIDgpICAjIEQ0IOKiiiDDlCBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgTyBXSVRIIENJUkNVTUZMRVhdCitjaGFyIFx4RDUJKDEyMzQgNiA4KSAgIyBENSDioq8gw5UgW0xBVElOIENBUElUQUwgTEVUVEVSIE8gV0lUSCBUSUxERV0KK2NoYXIgXHhENgkoICAzIDUgIDgpICAjIEQ2IOKilCDDliBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgTyBXSVRIIERJQUVSRVNJU10KK2NoYXIgXHhENwkoMTIzIDUgIDgpICAjIEQ3IOKilyDDlyBbTVVMVElQTElDQVRJT04gU0lHTl0KK2NoYXIgXHhEOAkoICAzIDU2NyApICAjIEQ4IOKhtCDDmCBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgTyBXSVRIIFNUUk9LRV0KK2NoYXIgXHhEOQkoICAgICA2NzgpICAjIEQ5IOKjoCDDmSBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgVSBXSVRIIEdSQVZFXQorY2hhciBceERBCSggMiAgNSA3ICkgICMgREEg4qGSIMOaIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBVIFdJVEggQUNVVEVdCitjaGFyIFx4REIJKDEyMzQ1Njc4KSAgIyBEQiDio78gw5sgW0xBVElOIENBUElUQUwgTEVUVEVSIFUgV0lUSCBDSVJDVU1GTEVYXQorY2hhciBceERDCSggMjMgIDYgOCkgICMgREMg4qKmIMOcIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBVIFdJVEggRElBRVJFU0lTXQorY2hhciBceERECSggMjMgIDY3OCkgICMgREQg4qOmIMOdIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBZIFdJVEggQUNVVEVdCitjaGFyIFx4REUJKCAgMyA1Njc4KSAgIyBERSDio7Qgw54gW0xBVElOIENBUElUQUwgTEVUVEVSIFRIT1JOXQorY2hhciBceERGCSggIDM0NTYgOCkgICMgREYg4qK8IMOfIFtMQVRJTiBTTUFMTCBMRVRURVIgU0hBUlAgU10KK2NoYXIgXHhFMAkoMTIzIDU2IDgpICAjIEUwIOKityDDoCBbTEFUSU4gU01BTEwgTEVUVEVSIEEgV0lUSCBHUkFWRV0KK2NoYXIgXHhFMQkoMSAgICA2IDgpICAjIEUxIOKioSDDoSBbTEFUSU4gU01BTEwgTEVUVEVSIEEgV0lUSCBBQ1VURV0KK2NoYXIgXHhFMgkoMSAgICA2NzgpICAjIEUyIOKjoSDDoiBbTEFUSU4gU01BTEwgTEVUVEVSIEEgV0lUSCBDSVJDVU1GTEVYXQorY2hhciBceEUzCSgxMjM0ICAgOCkgICMgRTMg4qKPIMOjIFtMQVRJTiBTTUFMTCBMRVRURVIgQSBXSVRIIFRJTERFXQorY2hhciBceEU0CSggIDM0NSAgOCkgICMgRTQg4qKcIMOkIFtMQVRJTiBTTUFMTCBMRVRURVIgQSBXSVRIIERJQUVSRVNJU10KK2NoYXIgXHhFNQkoICAzNDU2NzgpICAjIEU1IOKjvCDDpSBbTEFUSU4gU01BTEwgTEVUVEVSIEEgV0lUSCBSSU5HIEFCT1ZFXQorY2hhciBceEU2CSggIDM0NSA3OCkgICMgRTYg4qOcIMOmIFtMQVRJTiBTTUFMTCBMRVRURVIgQUVdCitjaGFyIFx4RTcJKDEyMzQgNjc4KSAgIyBFNyDio68gw6cgW0xBVElOIFNNQUxMIExFVFRFUiBDIFdJVEggQ0VESUxMQV0KK2NoYXIgXHhFOAkoIDIzNCA2IDgpICAjIEU4IOKiriDDqCBbTEFUSU4gU01BTEwgTEVUVEVSIEUgV0lUSCBHUkFWRV0KK2NoYXIgXHhFOQkoMTIgICA2IDgpICAjIEU5IOKioyDDqSBbTEFUSU4gU01BTEwgTEVUVEVSIEUgV0lUSCBBQ1VURV0KK2NoYXIgXHhFQQkoMTIgICA2NzgpICAjIEVBIOKjoyDDqiBbTEFUSU4gU01BTEwgTEVUVEVSIEUgV0lUSCBDSVJDVU1GTEVYXQorY2hhciBceEVCCSgxMiA0IDYgOCkgICMgRUIg4qKrIMOrIFtMQVRJTiBTTUFMTCBMRVRURVIgRSBXSVRIIERJQUVSRVNJU10KK2NoYXIgXHhFQwkoICAzNCAgIDgpICAjIEVDIOKijCDDrCBbTEFUSU4gU01BTEwgTEVUVEVSIEkgV0lUSCBHUkFWRV0KK2NoYXIgXHhFRAkoMSAgNCA2IDgpICAjIEVEIOKiqSDDrSBbTEFUSU4gU01BTEwgTEVUVEVSIEkgV0lUSCBBQ1VURV0KK2NoYXIgXHhFRQkoMSAgNCA2NzgpICAjIEVFIOKjqSDDriBbTEFUSU4gU01BTEwgTEVUVEVSIEkgV0lUSCBDSVJDVU1GTEVYXQorY2hhciBceEVGCSgxMiA0NTYgOCkgICMgRUYg4qK7IMOvIFtMQVRJTiBTTUFMTCBMRVRURVIgSSBXSVRIIERJQUVSRVNJU10KK2NoYXIgXHhGMAkoIDIzIDU2IDgpICAjIEYwIOKitiDDsCBbTEFUSU4gU01BTEwgTEVUVEVSIEVUSF0KK2NoYXIgXHhGMQkoMSAzNDUgIDgpICAjIEYxIOKinSDDsSBbTEFUSU4gU01BTEwgTEVUVEVSIE4gV0lUSCBUSUxERV0KK2NoYXIgXHhGMgkoICAzNCA2IDgpICAjIEYyIOKirCDDsiBbTEFUSU4gU01BTEwgTEVUVEVSIE8gV0lUSCBHUkFWRV0KK2NoYXIgXHhGMwkoMSAgNDU2IDgpICAjIEYzIOKiuSDDsyBbTEFUSU4gU01BTEwgTEVUVEVSIE8gV0lUSCBBQ1VURV0KK2NoYXIgXHhGNAkoMSAgNDU2NzgpICAjIEY0IOKjuSDDtCBbTEFUSU4gU01BTEwgTEVUVEVSIE8gV0lUSCBDSVJDVU1GTEVYXQorY2hhciBceEY1CSgxICAgNTY3ICkgICMgRjUg4qGxIMO1IFtMQVRJTiBTTUFMTCBMRVRURVIgTyBXSVRIIFRJTERFXQorY2hhciBceEY2CSggMiA0IDYgOCkgICMgRjYg4qKqIMO2IFtMQVRJTiBTTUFMTCBMRVRURVIgTyBXSVRIIERJQUVSRVNJU10KK2NoYXIgXHhGNwkoICAzNCAgNzgpICAjIEY3IOKjjCDDtyBbRElWSVNJT04gU0lHTl0KK2NoYXIgXHhGOAkoICAgICAgNzgpICAjIEY4IOKjgCDDuCBbTEFUSU4gU01BTEwgTEVUVEVSIE8gV0lUSCBTVFJPS0VdCitjaGFyIFx4RjkJKCAyMzQ1NiA4KSAgIyBGOSDior4gw7kgW0xBVElOIFNNQUxMIExFVFRFUiBVIFdJVEggR1JBVkVdCitjaGFyIFx4RkEJKDEgICA1NiA4KSAgIyBGQSDiorEgw7ogW0xBVElOIFNNQUxMIExFVFRFUiBVIFdJVEggQUNVVEVdCitjaGFyIFx4RkIJKDEgICA1Njc4KSAgIyBGQiDio7Egw7sgW0xBVElOIFNNQUxMIExFVFRFUiBVIFdJVEggQ0lSQ1VNRkxFWF0KK2NoYXIgXHhGQwkoMTIgIDU2IDgpICAjIEZDIOKisyDDvCBbTEFUSU4gU01BTEwgTEVUVEVSIFUgV0lUSCBESUFFUkVTSVNdCitjaGFyIFx4RkQJKCAyMyA1Njc4KSAgIyBGRCDio7Ygw70gW0xBVElOIFNNQUxMIExFVFRFUiBZIFdJVEggQUNVVEVdCitjaGFyIFx4RkUJKDEyMzQ1NjcgKSAgIyBGRSDiob8gw74gW0xBVElOIFNNQUxMIExFVFRFUiBUSE9STl0KK2NoYXIgXHhGRgkoMTIzNDU2IDgpICAjIEZGIOKivyDDvyBbTEFUSU4gU01BTEwgTEVUVEVSIFkgV0lUSCBESUFFUkVTSVNdCisKK2luY2x1ZGUgY29tbW9uLnR0aQpkaWZmIC0tZ2l0IGEvVGFibGVzL1RleHQvZW8udHRiIGIvVGFibGVzL1RleHQvZW8udHRiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk4Y2IxZDcKLS0tIC9kZXYvbnVsbAorKysgYi9UYWJsZXMvVGV4dC9lby50dGIKQEAgLTAsMCArMSw1NSBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorIyAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyMKKyMgQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorIworIyBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorIworIyBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisjIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyMgbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisjCisjIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMgQlJMVFRZIFRleHQgVGFibGUgLSBFc3BlcmFudG8KKyMKKyMgU2FtdWVsIFRoaWJhdWx0IDxzYW11ZWwudGhpYmF1bHRAZW5zLWx5b24ub3JnPgorIworIyBCYXNlZCBvbiB0aGUgZG9jdW1lbnQgZnJvbSBNdXPDqWUgbmF0aW9uYWwgZGUgbCdFc3DDqXJhbnRvIMOgIEdyYXkKKyMgIk1haXNvbiBwb3VyIHRvdXMiLCAxOSBydWUgVmljdG9yIEh1Z28gNzAxMDAgR1JBWQorIyBlc3BlcmFudG8tbXV6ZW9Ad2FuYWRvby5mcgorCisjIHRoZSBzdGFuZGFyZCByZXByZXNlbnRhdGlvbnMgZm9yIHRoZSBsZXR0ZXJzIG9mIHRoZSBMYXRpbiBhbHBoYWJldAoraW5jbHVkZSBsdHItbGF0aW4udHRpCisKKyMgdyBpcyBub24tc3RhbmRhcmQgYmVjYXVzZSBkb3RzIDI0NTYgaXMgaiB3aXRoIGNpcmN1bWZsZXgKK2NoYXIgXHg3NwkoIDIzNDU2ICApICAjIOKgviB3IFtMQVRJTiBTTUFMTCBMRVRURVIgV10KK2NoYXIgXHg1NwkoIDIzNDU2NyApICAjIOKhviBXIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBXXQorCisjIGxvd2VyY2FzZSBhY2NlbnRlZCBsZXR0ZXJzCitjaGFyIFx1MDEwOQkoMSAgNCA2ICApICAjIOKgqSDEiSBbTEFUSU4gU01BTEwgTEVUVEVSIEMgV0lUSCBDSVJDVU1GTEVYXQorY2hhciBcdTAxMUQJKDEyIDQ1NiAgKSAgIyDioLsgxJ0gW0xBVElOIFNNQUxMIExFVFRFUiBHIFdJVEggQ0lSQ1VNRkxFWF0KK2NoYXIgXHUwMTI1CSgxMiAgNTYgICkgICMg4qCzIMSlIFtMQVRJTiBTTUFMTCBMRVRURVIgSCBXSVRIIENJUkNVTUZMRVhdCitjaGFyIFx1MDEzNQkoIDIgNDU2ICApICAjIOKguiDEtSBbTEFUSU4gU01BTEwgTEVUVEVSIEogV0lUSCBDSVJDVU1GTEVYXQorY2hhciBcdTAxNUQJKCAyMzQgNiAgKSAgIyDioK4gxZ0gW0xBVElOIFNNQUxMIExFVFRFUiBTIFdJVEggQ0lSQ1VNRkxFWF0KK2NoYXIgXHUwMTZECSggIDM0IDYgICkgICMg4qCsIMWtIFtMQVRJTiBTTUFMTCBMRVRURVIgVSBXSVRIIEJSRVZFXQorCisjIHVwcGVyY2FzZSBhY2NlbnRlZCBsZXR0ZXJzCitjaGFyIFx1MDEwOAkoMSAgNCA2NyApICAjIOKhqSDEiCBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgQyBXSVRIIENJUkNVTUZMRVhdCitjaGFyIFx1MDExQwkoMTIgNDU2NyApICAjIOKhuyDEnCBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgRyBXSVRIIENJUkNVTUZMRVhdCitjaGFyIFx1MDEyNAkoMTIgIDU2NyApICAjIOKhsyDEpCBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgSCBXSVRIIENJUkNVTUZMRVhdCitjaGFyIFx1MDEzNAkoIDIgNDU2NyApICAjIOKhuiDEtCBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgSiBXSVRIIENJUkNVTUZMRVhdCitjaGFyIFx1MDE1QwkoIDIzNCA2NyApICAjIOKhriDFnCBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgUyBXSVRIIENJUkNVTUZMRVhdCitjaGFyIFx1MDE2QwkoICAzNCA2NyApICAjIOKhrCDFrCBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgVSBXSVRIIEJSRVZFXQorCisjIHRoZSBudW1iZXJzIDAtOSBhcmUgcmVwcmVzZW50ZWQgYnkgdGhlIGxldHRlcnMgaixhLWkgd2l0aCBkb3QgOCBhZGRlZAoraW5jbHVkZSBudW0tZG90OC50dGkKKworaW5jbHVkZSBwdW5jLWJhc2ljLnR0aQorCitpbmNsdWRlIGNvbW1vbi50dGkKZGlmZiAtLWdpdCBhL1RhYmxlcy9UZXh0L2VzLnR0YiBiL1RhYmxlcy9UZXh0L2VzLnR0YgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMGE1NTVhCi0tLSAvZGV2L251bGwKKysrIGIvVGFibGVzL1RleHQvZXMudHRiCkBAIC0wLDAgKzEsMTk5IEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisjICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorIworIyBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisjCisjIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisjCisjIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyMgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorIyBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyMKKyMgV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworIworIyBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIyBCUkxUVFkgVGV4dCBUYWJsZSAtIFNwYW5pc2gKKworIyB0aGUgc3RhbmRhcmQgcmVwcmVzZW50YXRpb25zIGZvciB0aGUgbGV0dGVycyBvZiB0aGUgTGF0aW4gYWxwaGFiZXQKK2luY2x1ZGUgbHRyLWxhdGluLnR0aQorCisjIGdlbmVyYXRlZCBieSB0dGJ0ZXN0OiBjaGFyc2V0PWlzby04ODU5LTEKK2NoYXIgXHgwMAkoICAgIDUgNzgpICAjIDAwIOKjkCAgIFtOVUxMXQorY2hhciBceDAxCSggMiAgICA3OCkgICMgMDEg4qOCICAgW1NUQVJUIE9GIEhFQURJTkddCitjaGFyIFx4MDIJKDEyICAgIDc4KSAgIyAwMiDio4MgICBbU1RBUlQgT0YgVEVYVF0KK2NoYXIgXHgwMwkoMSAgNCAgNzgpICAjIDAzIOKjiSAgIFtFTkQgT0YgVEVYVF0KK2NoYXIgXHgwNAkoMSAgNDUgNzgpICAjIDA0IOKjmSAgIFtFTkQgT0YgVFJBTlNNSVNTSU9OXQorY2hhciBceDA1CSggMiAgIDY3OCkgICMgMDUg4qOiICAgW0VOUVVJUlldCitjaGFyIFx4MDYJKDEyIDQgIDc4KSAgIyAwNiDio4sgICBbQUNLTk9XTEVER0VdCitjaGFyIFx4MDcJKDEyIDQ1IDc4KSAgIyAwNyDio5sgICBbQkVMTF0KK2NoYXIgXHgwOAkoMTIgIDUgNzgpICAjIDA4IOKjkyAgIFtCQUNLU1BBQ0VdCitjaGFyIFx4MDkJKCAgMyA1IDc4KSAgIyAwOSDio5QgICBbQ0hBUkFDVEVSIFRBQlVMQVRJT05dCitjaGFyIFx4MEEJKCAyIDQ1IDc4KSAgIyAwQSDio5ogICBbTElORSBGRUVEIChMRildCitjaGFyIFx4MEIJKDEgMyAgIDc4KSAgIyAwQiDio4UgICBbTElORSBUQUJVTEFUSU9OXQorY2hhciBceDBDCSgxMjMgICA3OCkgICMgMEMg4qOHICAgW0ZPUk0gRkVFRCAoRkYpXQorY2hhciBceDBECSgxIDM0ICA3OCkgICMgMEQg4qONICAgW0NBUlJJQUdFIFJFVFVSTiAoQ1IpXQorY2hhciBceDBFCSgxIDM0NSA3OCkgICMgMEUg4qOdICAgW1NISUZUIE9VVF0KK2NoYXIgXHgwRgkoIDIzICA2NzgpICAjIDBGIOKjpiAgIFtTSElGVCBJTl0KK2NoYXIgXHgxMAkoMTIzNCAgNzgpICAjIDEwIOKjjyAgIFtEQVRBIExJTksgRVNDQVBFXQorY2hhciBceDExCSgxMjM0NSA3OCkgICMgMTEg4qOfICAgW0RFVklDRSBDT05UUk9MIE9ORV0KK2NoYXIgXHgxMgkoMTIzIDUgNzgpICAjIDEyIOKjlyAgIFtERVZJQ0UgQ09OVFJPTCBUV09dCitjaGFyIFx4MTMJKCAyMzQgIDc4KSAgIyAxMyDio44gICBbREVWSUNFIENPTlRST0wgVEhSRUVdCitjaGFyIFx4MTQJKCAyMzQ1IDc4KSAgIyAxNCDio54gICBbREVWSUNFIENPTlRST0wgRk9VUl0KK2NoYXIgXHgxNQkoICAzIDU2NzgpICAjIDE1IOKjtCAgIFtORUdBVElWRSBBQ0tOT1dMRURHRV0KK2NoYXIgXHgxNgkoMTIzICA2NzgpICAjIDE2IOKjpyAgIFtTWU5DSFJPTk9VUyBJRExFXQorY2hhciBceDE3CSggMiA0NTY3OCkgICMgMTcg4qO6ICAgW0VORCBPRiBUUkFOU01JU1NJT04gQkxPQ0tdCitjaGFyIFx4MTgJKDEgMzQgNjc4KSAgIyAxOCDio60gICBbQ0FOQ0VMXQorY2hhciBceDE5CSgxIDM0NTY3OCkgICMgMTkg4qO9ICAgW0VORCBPRiBNRURJVU1dCitjaGFyIFx4MUEJKDEgMyA1Njc4KSAgIyAxQSDio7UgICBbU1VCU1RJVFVURV0KK2NoYXIgXHgxQgkoICAzNDU2NzgpICAjIDFCIOKjvCAgIFtFU0NBUEVdCitjaGFyIFx4MUMJKDEyMzQ1Njc4KSAgIyAxQyDio78gICBbSU5GT1JNQVRJT04gU0VQQVJBVE9SIEZPVVJdCitjaGFyIFx4MUQJKCAgIDQgNjc4KSAgIyAxRCDio6ggICBbSU5GT1JNQVRJT04gU0VQQVJBVE9SIFRIUkVFXQorY2hhciBceDFFCSggICA0NSA3OCkgICMgMUUg4qOYICAgW0lORk9STUFUSU9OIFNFUEFSQVRPUiBUV09dCitjaGFyIFx4MUYJKCAgICAgNjc4KSAgIyAxRiDio6AgICBbSU5GT1JNQVRJT04gU0VQQVJBVE9SIE9ORV0KK2NoYXIgXHgyMAkoICAgICAgICApICAjIDIwIOKggCAgIFtTUEFDRV0KK2NoYXIgXHgyMQkoIDIzIDUgNyApICAjIDIxIOKhliAhIFtFWENMQU1BVElPTiBNQVJLXQorY2hhciBceDIyCSggICAgNTYgICkgICMgMjIg4qCwICIgW1FVT1RBVElPTiBNQVJLXQorY2hhciBceDIzCSggIDM0NTYgICkgICMgMjMg4qC8ICMgW05VTUJFUiBTSUdOXQorY2hhciBceDI0CSgxMjM0IDY3ICkgICMgMjQg4qGvICQgW0RPTExBUiBTSUdOXQorY2hhciBceDI1CSggICA0NTYgICkgICMgMjUg4qC4ICUgW1BFUkNFTlQgU0lHTl0KK2NoYXIgXHgyNgkoMTIzNCA2ICApICAjIDI2IOKgryAmIFtBTVBFUlNBTkRdCitjaGFyIFx4MjcJKCAgIDQgICAgKSAgIyAyNyDioIggJyBbQVBPU1RST1BIRV0KK2NoYXIgXHgyOAkoMTIgICA2IDgpICAjIDI4IOKioyAoIFtMRUZUIFBBUkVOVEhFU0lTXQorY2hhciBceDI5CSggIDM0NSA3ICkgICMgMjkg4qGcICkgW1JJR0hUIFBBUkVOVEhFU0lTXQorY2hhciBceDJBCSggMiAgNTYgICkgICMgMkEg4qCyICogW0FTVEVSSVNLXQorY2hhciBceDJCCSggMjMgNSAgICkgICMgMkIg4qCWICsgW1BMVVMgU0lHTl0KK2NoYXIgXHgyQwkoIDIgICAgICApICAjIDJDIOKggiAsIFtDT01NQV0KK2NoYXIgXHgyRAkoICAzICA2ICApICAjIDJEIOKgpCAtIFtIWVBIRU4tTUlOVVNdCitjaGFyIFx4MkUJKCAgMyAgICAgKSAgIyAyRSDioIQgLiBbRlVMTCBTVE9QXQorY2hhciBceDJGCSggIDM0ICA3OCkgICMgMkYg4qOMIC8gW1NPTElEVVNdCitjaGFyIFx4MzAJKCAgMzQgNjc4KSAgIyAzMCDio6wgMCBbRElHSVQgWkVST10KK2NoYXIgXHgzMQkoMSAgICA2ICApICAjIDMxIOKgoSAxIFtESUdJVCBPTkVdCitjaGFyIFx4MzIJKDEyICAgNiAgKSAgIyAzMiDioKMgMiBbRElHSVQgVFdPXQorY2hhciBceDMzCSgxICA0IDYgICkgICMgMzMg4qCpIDMgW0RJR0lUIFRIUkVFXQorY2hhciBceDM0CSgxICA0NTYgICkgICMgMzQg4qC5IDQgW0RJR0lUIEZPVVJdCitjaGFyIFx4MzUJKDEgICA1NiAgKSAgIyAzNSDioLEgNSBbRElHSVQgRklWRV0KK2NoYXIgXHgzNgkoMTIgNCA2ICApICAjIDM2IOKgqyA2IFtESUdJVCBTSVhdCitjaGFyIFx4MzcJKDEyIDQ1NiAgKSAgIyAzNyDioLsgNyBbRElHSVQgU0VWRU5dCitjaGFyIFx4MzgJKDEyICA1NiAgKSAgIyAzOCDioLMgOCBbRElHSVQgRUlHSFRdCitjaGFyIFx4MzkJKCAyIDQgNiAgKSAgIyAzOSDioKogOSBbRElHSVQgTklORV0KK2NoYXIgXHgzQQkoIDIgIDUgICApICAjIDNBIOKgkiA6IFtDT0xPTl0KK2NoYXIgXHgzQgkoIDIzICAgICApICAjIDNCIOKghiA7IFtTRU1JQ09MT05dCitjaGFyIFx4M0MJKCAyMyAgNiAgKSAgIyAzQyDioKYgPCBbTEVTUy1USEFOIFNJR05dCitjaGFyIFx4M0QJKCAyMyA1NiAgKSAgIyAzRCDioLYgPSBbRVFVQUxTIFNJR05dCitjaGFyIFx4M0UJKCAgMyA1NiAgKSAgIyAzRSDioLQgPiBbR1JFQVRFUi1USEFOIFNJR05dCitjaGFyIFx4M0YJKCAyICAgNiAgKSAgIyAzRiDioKIgPyBbUVVFU1RJT04gTUFSS10KK2NoYXIgXHg0MAkoICAgIDUgICApICAjIDQwIOKgkCBAIFtDT01NRVJDSUFMIEFUXQorIyB1cHBlcmNhc2UgTGF0aW4gYWxwaGFiZXQgICMgNDEtNUEKK2NoYXIgXHg1QgkoIDIzICA2NyApICAjIDVCIOKhpiBbIFtMRUZUIFNRVUFSRSBCUkFDS0VUXQorY2hhciBceDVDCSgxMjM0NTYgICkgICMgNUMg4qC/IFwgW1JFVkVSU0UgU09MSURVU10KK2NoYXIgXHg1RAkoICAzIDU2IDgpICAjIDVEIOKitCBdIFtSSUdIVCBTUVVBUkUgQlJBQ0tFVF0KK2NoYXIgXHg1RQkoICAgNDUgICApICAjIDVFIOKgmCBeIFtDSVJDVU1GTEVYIEFDQ0VOVF0KK2NoYXIgXHg1RgkoICAgICA2ICApICAjIDVGIOKgoCBfIFtMT1cgTElORV0KK2NoYXIgXHg2MAkoICAgIDUgIDgpICAjIDYwIOKikCBgIFtHUkFWRSBBQ0NFTlRdCisjIGxvd2VyY2FzZSBMYXRpbiBhbHBoYWJldCAgIyA2MS03QQorY2hhciBceDdCCSggICA0IDYgICkgICMgN0Ig4qCoIHsgW0xFRlQgQ1VSTFkgQlJBQ0tFVF0KK2NoYXIgXHg3QwkoICAgNDU2IDgpICAjIDdDIOKiuCB8IFtWRVJUSUNBTCBMSU5FXQorY2hhciBceDdECSggIDMgNSAgICkgICMgN0Qg4qCUIH0gW1JJR0hUIENVUkxZIEJSQUNLRVRdCitjaGFyIFx4N0UJKCAgICA1IDcgKSAgIyA3RSDioZAgfiBbVElMREVdCitjaGFyIFx4N0YJKCAgICAgIDcgKSAgIyA3RiDioYAgICBbREVMRVRFXQorY2hhciBceEExCSggMjMgNSA3OCkgICMgQTEg4qOWIMKhIFtJTlZFUlRFRCBFWENMQU1BVElPTiBNQVJLXQorY2hhciBceEEyCSgxMiAgIDY3OCkgICMgQTIg4qOjIMKiIFtDRU5UIFNJR05dCitjaGFyIFx4QTMJKCAyMyAgIDc4KSAgIyBBMyDio4YgwqMgW1BPVU5EIFNJR05dCitjaGFyIFx4QTQJKCAyICA1NjcgKSAgIyBBNCDiobIgwqQgW0NVUlJFTkNZIFNJR05dCitjaGFyIFx4QTUJKDEgIDQ1Njc4KSAgIyBBNSDio7kgwqUgW1lFTiBTSUdOXQorY2hhciBceEE2CSggICA0ICA3OCkgICMgQTYg4qOIIMKmIFtCUk9LRU4gQkFSXQorY2hhciBceEE3CSgxICAgIDY3ICkgICMgQTcg4qGhIMKnIFtTRUNUSU9OIFNJR05dCitjaGFyIFx4QTgJKCAyICAgNiA4KSAgIyBBOCDioqIgwqggW0RJQUVSRVNJU10KK2NoYXIgXHhBOQkoIDIzIDU2NyApICAjIEE5IOKhtiDCqSBbQ09QWVJJR0hUIFNJR05dCitjaGFyIFx4QUEJKCAyMyA1NiA4KSAgIyBBQSDiorYgwqogW0ZFTUlOSU5FIE9SRElOQUwgSU5ESUNBVE9SXQorY2hhciBceEFCCSggMjMgICAgOCkgICMgQUIg4qKGIMKrIFtMRUZULVBPSU5USU5HIERPVUJMRSBBTkdMRSBRVU9UQVRJT04gTUFSS10KK2NoYXIgXHhBQwkoIDIgIDUgNyApICAjIEFDIOKhkiDCrCBbTk9UIFNJR05dCitjaGFyIFx4QUQJKCAyMyA1ICA4KSAgIyBBRCDiopYgwq0gW1NPRlQgSFlQSEVOXQorY2hhciBceEFFCSggMjMgIDYgOCkgICMgQUUg4qKmIMKuIFtSRUdJU1RFUkVEIFNJR05dCitjaGFyIFx4QUYJKCAyIDQ1NiA4KSAgIyBBRiDiorogwq8gW01BQ1JPTl0KK2NoYXIgXHhCMAkoICAgICAgIDgpICAjIEIwIOKigCDCsCBbREVHUkVFIFNJR05dCitjaGFyIFx4QjEJKDEyIDQgNjcgKSAgIyBCMSDioasgwrEgW1BMVVMtTUlOVVMgU0lHTl0KK2NoYXIgXHhCMgkoICAgNCAgNyApICAjIEIyIOKhiCDCsiBbU1VQRVJTQ1JJUFQgVFdPXQorY2hhciBceEIzCSggICAgNTYgOCkgICMgQjMg4qKwIMKzIFtTVVBFUlNDUklQVCBUSFJFRV0KK2NoYXIgXHhCNAkoICAgNCA2NyApICAjIEI0IOKhqCDCtCBbQUNVVEUgQUNDRU5UXQorY2hhciBceEI1CSgxIDM0IDYgOCkgICMgQjUg4qKtIMK1IFtNSUNSTyBTSUdOXQorY2hhciBceEI2CSgxICA0NTY3ICkgICMgQjYg4qG5IMK2IFtQSUxDUk9XIFNJR05dCitjaGFyIFx4QjcJKDEgIDQgNjc4KSAgIyBCNyDio6kgwrcgW01JRERMRSBET1RdCitjaGFyIFx4QjgJKDEyMzQ1NjcgKSAgIyBCOCDiob8gwrggW0NFRElMTEFdCitjaGFyIFx4QjkJKCAyMyAgIDcgKSAgIyBCOSDioYYgwrkgW1NVUEVSU0NSSVBUIE9ORV0KK2NoYXIgXHhCQQkoICAgIDU2NzgpICAjIEJBIOKjsCDCuiBbTUFTQ1VMSU5FIE9SRElOQUwgSU5ESUNBVE9SXQorY2hhciBceEJCCSggICAgNTY3ICkgICMgQkIg4qGwIMK7IFtSSUdIVC1QT0lOVElORyBET1VCTEUgQU5HTEUgUVVPVEFUSU9OIE1BUktdCitjaGFyIFx4QkMJKDEgIDQgNjcgKSAgIyBCQyDioakgwrwgW1ZVTEdBUiBGUkFDVElPTiBPTkUgUVVBUlRFUl0KK2NoYXIgXHhCRAkoICAgNCA2IDgpICAjIEJEIOKiqCDCvSBbVlVMR0FSIEZSQUNUSU9OIE9ORSBIQUxGXQorY2hhciBceEJFCSggICA0ICAgOCkgICMgQkUg4qKIIMK+IFtWVUxHQVIgRlJBQ1RJT04gVEhSRUUgUVVBUlRFUlNdCitjaGFyIFx4QkYJKCAyICAgNjcgKSAgIyBCRiDioaIgwr8gW0lOVkVSVEVEIFFVRVNUSU9OIE1BUktdCitjaGFyIFx4QzAJKDEyMyA1Njc4KSAgIyBDMCDio7cgw4AgW0xBVElOIENBUElUQUwgTEVUVEVSIEEgV0lUSCBHUkFWRV0KK2NoYXIgXHhDMQkoMTIzIDU2NyApICAjIEMxIOKhtyDDgSBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgQSBXSVRIIEFDVVRFXQorY2hhciBceEMyCSgxICAgICA3OCkgICMgQzIg4qOBIMOCIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBBIFdJVEggQ0lSQ1VNRkxFWF0KK2NoYXIgXHhDMwkoICAzIDU2NyApICAjIEMzIOKhtCDDgyBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgQSBXSVRIIFRJTERFXQorY2hhciBceEM0CSggIDM0NSA3OCkgICMgQzQg4qOcIMOEIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBBIFdJVEggRElBRVJFU0lTXQorY2hhciBceEM1CSgxMjMgIDYgOCkgICMgQzUg4qKnIMOFIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBBIFdJVEggUklORyBBQk9WRV0KK2NoYXIgXHhDNgkoICAzICAgIDgpICAjIEM2IOKihCDDhiBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgQUVdCitjaGFyIFx4QzcJKDEyMzQgNjc4KSAgIyBDNyDio68gw4cgW0xBVElOIENBUElUQUwgTEVUVEVSIEMgV0lUSCBDRURJTExBXQorY2hhciBceEM4CSggMjM0IDY3OCkgICMgQzgg4qOuIMOIIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBFIFdJVEggR1JBVkVdCitjaGFyIFx4QzkJKCAyMzQgNjcgKSAgIyBDOSDioa4gw4kgW0xBVElOIENBUElUQUwgTEVUVEVSIEUgV0lUSCBBQ1VURV0KK2NoYXIgXHhDQQkoMSAgIDUgNzgpICAjIENBIOKjkSDDiiBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgRSBXSVRIIENJUkNVTUZMRVhdCitjaGFyIFx4Q0IJKDEyIDQgNjc4KSAgIyBDQiDio6sgw4sgW0xBVElOIENBUElUQUwgTEVUVEVSIEUgV0lUSCBESUFFUkVTSVNdCitjaGFyIFx4Q0MJKCAgMzQ1ICAgKSAgIyBDQyDioJwgw4wgW0xBVElOIENBUElUQUwgTEVUVEVSIEkgV0lUSCBHUkFWRV0KK2NoYXIgXHhDRAkoICAzNCAgNyApICAjIENEIOKhjCDDjSBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgSSBXSVRIIEFDVVRFXQorY2hhciBceENFCSggMiA0ICA3OCkgICMgQ0Ug4qOKIMOOIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBJIFdJVEggQ0lSQ1VNRkxFWF0KK2NoYXIgXHhDRgkoMTIgNDU2NzgpICAjIENGIOKjuyDDjyBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgSSBXSVRIIERJQUVSRVNJU10KK2NoYXIgXHhEMAkoMSAzNDUgIDgpICAjIEQwIOKinSDDkCBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgRVRIXQorY2hhciBceEQxCSgxMiA0NTY3ICkgICMgRDEg4qG7IMORIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBOIFdJVEggVElMREVdCitjaGFyIFx4RDIJKCAyIDQ1ICA4KSAgIyBEMiDiopogw5IgW0xBVElOIENBUElUQUwgTEVUVEVSIE8gV0lUSCBHUkFWRV0KK2NoYXIgXHhEMwkoICAzNCA2NyApICAjIEQzIOKhrCDDkyBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgTyBXSVRIIEFDVVRFXQorY2hhciBceEQ0CSgxIDMgNSA3OCkgICMgRDQg4qOVIMOUIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBPIFdJVEggQ0lSQ1VNRkxFWF0KK2NoYXIgXHhENQkoMTIgNDUgIDgpICAjIEQ1IOKimyDDlSBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgTyBXSVRIIFRJTERFXQorY2hhciBceEQ2CSggMiA0IDY3OCkgICMgRDYg4qOqIMOWIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBPIFdJVEggRElBRVJFU0lTXQorY2hhciBceEQ3CSgxICAgIDY3OCkgICMgRDcg4qOhIMOXIFtNVUxUSVBMSUNBVElPTiBTSUdOXQorY2hhciBceEQ4CSggIDM0NTY3ICkgICMgRDgg4qG8IMOYIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBPIFdJVEggU1RST0tFXQorY2hhciBceEQ5CSggMjM0NTY3OCkgICMgRDkg4qO+IMOZIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBVIFdJVEggR1JBVkVdCitjaGFyIFx4REEJKCAyMzQ1NjcgKSAgIyBEQSDiob4gw5ogW0xBVElOIENBUElUQUwgTEVUVEVSIFUgV0lUSCBBQ1VURV0KK2NoYXIgXHhEQgkoMSAzICA2NzgpICAjIERCIOKjpSDDmyBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgVSBXSVRIIENJUkNVTUZMRVhdCitjaGFyIFx4REMJKDEyICA1Njc4KSAgIyBEQyDio7Mgw5wgW0xBVElOIENBUElUQUwgTEVUVEVSIFUgV0lUSCBESUFFUkVTSVNdCitjaGFyIFx4REQJKDEgICA1NjcgKSAgIyBERCDiobEgw50gW0xBVElOIENBUElUQUwgTEVUVEVSIFkgV0lUSCBBQ1VURV0KK2NoYXIgXHhERQkoMTIzNDUgIDgpICAjIERFIOKinyDDniBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgVEhPUk5dCitjaGFyIFx4REYJKDEyICAgICA4KSAgIyBERiDiooMgw58gW0xBVElOIFNNQUxMIExFVFRFUiBTSEFSUCBTXQorY2hhciBceEUwCSgxMjMgNTYgOCkgICMgRTAg4qK3IMOgIFtMQVRJTiBTTUFMTCBMRVRURVIgQSBXSVRIIEdSQVZFXQorY2hhciBceEUxCSgxMjMgNTYgICkgICMgRTEg4qC3IMOhIFtMQVRJTiBTTUFMTCBMRVRURVIgQSBXSVRIIEFDVVRFXQorY2hhciBceEUyCSgxICAgICAgOCkgICMgRTIg4qKBIMOiIFtMQVRJTiBTTUFMTCBMRVRURVIgQSBXSVRIIENJUkNVTUZMRVhdCitjaGFyIFx4RTMJKDEgICAgNiA4KSAgIyBFMyDioqEgw6MgW0xBVElOIFNNQUxMIExFVFRFUiBBIFdJVEggVElMREVdCitjaGFyIFx4RTQJKCAgMzQ1ICA4KSAgIyBFNCDiopwgw6QgW0xBVElOIFNNQUxMIExFVFRFUiBBIFdJVEggRElBRVJFU0lTXQorY2hhciBceEU1CSgxICAgNTY3OCkgICMgRTUg4qOxIMOlIFtMQVRJTiBTTUFMTCBMRVRURVIgQSBXSVRIIFJJTkcgQUJPVkVdCitjaGFyIFx4RTYJKDEgMzQgICA4KSAgIyBFNiDioo0gw6YgW0xBVElOIFNNQUxMIExFVFRFUiBBRV0KK2NoYXIgXHhFNwkoMTIzNCA2IDgpICAjIEU3IOKiryDDpyBbTEFUSU4gU01BTEwgTEVUVEVSIEMgV0lUSCBDRURJTExBXQorY2hhciBceEU4CSggMjM0IDYgOCkgICMgRTgg4qKuIMOoIFtMQVRJTiBTTUFMTCBMRVRURVIgRSBXSVRIIEdSQVZFXQorY2hhciBceEU5CSggMjM0IDYgICkgICMgRTkg4qCuIMOpIFtMQVRJTiBTTUFMTCBMRVRURVIgRSBXSVRIIEFDVVRFXQorY2hhciBceEVBCSgxICAgNSAgOCkgICMgRUEg4qKRIMOqIFtMQVRJTiBTTUFMTCBMRVRURVIgRSBXSVRIIENJUkNVTUZMRVhdCitjaGFyIFx4RUIJKDEyIDQgNiA4KSAgIyBFQiDioqsgw6sgW0xBVElOIFNNQUxMIExFVFRFUiBFIFdJVEggRElBRVJFU0lTXQorY2hhciBceEVDCSggIDM0ICAgOCkgICMgRUMg4qKMIMOsIFtMQVRJTiBTTUFMTCBMRVRURVIgSSBXSVRIIEdSQVZFXQorY2hhciBceEVECSggIDM0ICAgICkgICMgRUQg4qCMIMOtIFtMQVRJTiBTTUFMTCBMRVRURVIgSSBXSVRIIEFDVVRFXQorY2hhciBceEVFCSggMiA0ICAgOCkgICMgRUUg4qKKIMOuIFtMQVRJTiBTTUFMTCBMRVRURVIgSSBXSVRIIENJUkNVTUZMRVhdCitjaGFyIFx4RUYJKCAyICA1ICA4KSAgIyBFRiDiopIgw68gW0xBVElOIFNNQUxMIExFVFRFUiBJIFdJVEggRElBRVJFU0lTXQorY2hhciBceEYwCSggMjMgNTY3OCkgICMgRjAg4qO2IMOwIFtMQVRJTiBTTUFMTCBMRVRURVIgRVRIXQorY2hhciBceEYxCSgxMiA0NTYgOCkgICMgRjEg4qK7IMOxIFtMQVRJTiBTTUFMTCBMRVRURVIgTiBXSVRIIFRJTERFXQorY2hhciBceEYyCSggIDM0IDYgOCkgICMgRjIg4qKsIMOyIFtMQVRJTiBTTUFMTCBMRVRURVIgTyBXSVRIIEdSQVZFXQorY2hhciBceEYzCSggIDM0IDYgICkgICMgRjMg4qCsIMOzIFtMQVRJTiBTTUFMTCBMRVRURVIgTyBXSVRIIEFDVVRFXQorY2hhciBceEY0CSgxIDMgNSAgOCkgICMgRjQg4qKVIMO0IFtMQVRJTiBTTUFMTCBMRVRURVIgTyBXSVRIIENJUkNVTUZMRVhdCitjaGFyIFx4RjUJKCAgIDQ1NjcgKSAgIyBGNSDiobggw7UgW0xBVElOIFNNQUxMIExFVFRFUiBPIFdJVEggVElMREVdCitjaGFyIFx4RjYJKCAyIDQgNiA4KSAgIyBGNiDioqogw7YgW0xBVElOIFNNQUxMIExFVFRFUiBPIFdJVEggRElBRVJFU0lTXQorY2hhciBceEY3CSggMiAgNSA3OCkgICMgRjcg4qOSIMO3IFtESVZJU0lPTiBTSUdOXQorY2hhciBceEY4CSggICA0NSA3ICkgICMgRjgg4qGYIMO4IFtMQVRJTiBTTUFMTCBMRVRURVIgTyBXSVRIIFNUUk9LRV0KK2NoYXIgXHhGOQkoIDIzNDU2IDgpICAjIEY5IOKiviDDuSBbTEFUSU4gU01BTEwgTEVUVEVSIFUgV0lUSCBHUkFWRV0KK2NoYXIgXHhGQQkoIDIzNDU2ICApICAjIEZBIOKgviDDuiBbTEFUSU4gU01BTEwgTEVUVEVSIFUgV0lUSCBBQ1VURV0KK2NoYXIgXHhGQgkoMSAzICA2IDgpICAjIEZCIOKipSDDuyBbTEFUSU4gU01BTEwgTEVUVEVSIFUgV0lUSCBDSVJDVU1GTEVYXQorY2hhciBceEZDCSgxMiAgNTYgOCkgICMgRkMg4qKzIMO8IFtMQVRJTiBTTUFMTCBMRVRURVIgVSBXSVRIIERJQUVSRVNJU10KK2NoYXIgXHhGRAkoIDIzNCAgIDgpICAjIEZEIOKijiDDvSBbTEFUSU4gU01BTEwgTEVUVEVSIFkgV0lUSCBBQ1VURV0KK2NoYXIgXHhGRQkoMSAgIDU2IDgpICAjIEZFIOKisSDDviBbTEFUSU4gU01BTEwgTEVUVEVSIFRIT1JOXQorY2hhciBceEZGCSggICAgIDY3ICkgICMgRkYg4qGgIMO/IFtMQVRJTiBTTUFMTCBMRVRURVIgWSBXSVRIIERJQUVSRVNJU10KKworaW5jbHVkZSBjb21tb24udHRpCmRpZmYgLS1naXQgYS9UYWJsZXMvVGV4dC9ldC50dGIgYi9UYWJsZXMvVGV4dC9ldC50dGIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzRiNDI0NAotLS0gL2Rldi9udWxsCisrKyBiL1RhYmxlcy9UZXh0L2V0LnR0YgpAQCAtMCwwICsxLDQ4IEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisjICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorIworIyBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisjCisjIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisjCisjIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyMgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorIyBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyMKKyMgV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworIworIyBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIyBCUkxUVFkgVGV4dCBUYWJsZSAtIEVzdG9uaWFuCisjCisjIFNhbXVlbCBUaGliYXVsdCA8c2FtdWVsLnRoaWJhdWx0QGVucy1seW9uLm9yZz4KKyMgCisjIFRoaXMgdGFibGUgaXMgYmFzZWQgb24gdGhlIFVuZXNjbyByZXBvcnQgb24gdGhlIHByb2dyZXNzIG9mIHVuaWZpY2F0aW9uIG9mCisjIGJyYWlsbGUgd3JpdGluZyDCq8KgTCfDiUNSSVRVUkUgQlJBSUxMRSBEQU5TIExFIE1PTkRFwqDCuywgYnkgU2lyIENsdXRoYQorIyBNQUNLRU5aSUU6IGh0dHA6Ly91bmVzZG9jLnVuZXNjby5vcmcvaW1hZ2VzLzAwMTMvMDAxMzUyLzEzNTI1MWZvLnBkZgorIyBUaGUgZG9jdW1lbnQgaXMgZGF0ZWQgMTk1NCwgc28gdGhpcyB0YWJsZSBtYXkgYmUgcXVpdGUgb3V0ZGF0ZWQuCisKKyMgdGhlIHN0YW5kYXJkIHJlcHJlc2VudGF0aW9ucyBmb3IgdGhlIGxldHRlcnMgb2YgdGhlIExhdGluIGFscGhhYmV0CitpbmNsdWRlIGx0ci1sYXRpbi50dGkKKworIyBsb3dlcmNhc2UgYWNjZW50ZWQgbGV0dGVycworY2hhciBceEU0CSggIDM0NSAgICkgICMg4qCcIMOkIFtMQVRJTiBTTUFMTCBMRVRURVIgQSBXSVRIIERJQUVSRVNJU10KK2NoYXIgXHhGNQkoIDIzNCA2ICApICAjIOKgriDDtSBbTEFUSU4gU01BTEwgTEVUVEVSIE8gV0lUSCBUSUxERV0KK2NoYXIgXHhGNgkoIDIgNCA2ICApICAjIOKgqiDDtiBbTEFUSU4gU01BTEwgTEVUVEVSIE8gV0lUSCBESUFFUkVTSVNdCitjaGFyIFx4RkMJKDEyICA1NiAgKSAgIyDioLMgw7wgW0xBVElOIFNNQUxMIExFVFRFUiBVIFdJVEggRElBRVJFU0lTXQorCisjIHVwcGVyY2FzZSBhY2NlbnRlZCBsZXR0ZXJzCitjaGFyIFx4QzQJKCAgMzQ1IDcgKSAgIyDioZwgw4QgW0xBVElOIENBUElUQUwgTEVUVEVSIEEgV0lUSCBESUFFUkVTSVNdCitjaGFyIFx4RDUJKCAyMzQgNjcgKSAgIyDioa4gw5UgW0xBVElOIENBUElUQUwgTEVUVEVSIE8gV0lUSCBUSUxERV0KK2NoYXIgXHhENgkoIDIgNCA2NyApICAjIOKhqiDDliBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgTyBXSVRIIERJQUVSRVNJU10KK2NoYXIgXHhEQwkoMTIgIDU2NyApICAjIOKhsyDDnCBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgVSBXSVRIIERJQUVSRVNJU10KKworIyB0aGUgbnVtYmVycyAwLTkgYXJlIHJlcHJlc2VudGVkIGJ5IHRoZSBsZXR0ZXJzIGosYS1pIHdpdGggZG90IDggYWRkZWQKK2luY2x1ZGUgbnVtLWRvdDgudHRpCisKK2luY2x1ZGUgcHVuYy1iYXNpYy50dGkKKworaW5jbHVkZSBjb21tb24udHRpCmRpZmYgLS1naXQgYS9UYWJsZXMvVGV4dC9maS50dGIgYi9UYWJsZXMvVGV4dC9maS50dGIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2E3YjZmZAotLS0gL2Rldi9udWxsCisrKyBiL1RhYmxlcy9UZXh0L2ZpLnR0YgpAQCAtMCwwICsxLDE3MiBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorIyAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyMKKyMgQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorIworIyBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorIworIyBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisjIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyMgbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisjCisjIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMgQlJMVFRZIFRleHQgVGFibGUgLSBGaW5uaXNoCisKKyMgVGhpcyB0YWJsZSBpcyB2ZXJ5IGNsb3NlIHRvIHRoZSBvZmZpY2lhbCBGaW5uaXNoIHNpeCBkb3RicmFpbGxlIGNoYXJhY3RlciBzZXQuCisKKyMgdGhlIHN0YW5kYXJkIHJlcHJlc2VudGF0aW9ucyBmb3IgdGhlIGxldHRlcnMgb2YgdGhlIExhdGluIGFscGhhYmV0CitpbmNsdWRlIGx0ci1sYXRpbi50dGkKKworIyB0aGUgc3RhbmRhcmQgcmVwcmVzZW50YXRpb25zIGZvciB0aGUgTGF0aW4gY29udHJvbCBjaGFyYWN0ZXJzCitpbmNsdWRlIGN0bC1sYXRpbi50dGkKKworIyB0aGUgbnVtYmVycyAwLTkgYXJlIHJlcHJlc2VudGVkIGJ5IHRoZSBsZXR0ZXJzIGosYS1pIHdpdGggZG90IDggYWRkZWQKK2luY2x1ZGUgbnVtLWRvdDgudHRpCisKKyMgZ2VuZXJhdGVkIGJ5IHR0YnRlc3Q6IGNoYXJzZXQ9aXNvLTg4NTktMQorY2hhciBceDAwCSggICA0ICA3OCkgICMgMDAg4qOIICAgW05VTExdCisjIExhdGluIGNvbnRyb2wgY2hhcmFjdGVycyAgIyAwMS0xQQorY2hhciBceDFCCSgxMiAgIDY3OCkgICMgMUIg4qOjICAgW0VTQ0FQRV0KK2NoYXIgXHgxQwkoMTIgIDU2NzgpICAjIDFDIOKjsyAgIFtJTkZPUk1BVElPTiBTRVBBUkFUT1IgRk9VUl0KK2NoYXIgXHgxRAkoICAzIDUgNzgpICAjIDFEIOKjlCAgIFtJTkZPUk1BVElPTiBTRVBBUkFUT1IgVEhSRUVdCitjaGFyIFx4MUUJKCAyICAgIDc4KSAgIyAxRSDio4IgICBbSU5GT1JNQVRJT04gU0VQQVJBVE9SIFRXT10KK2NoYXIgXHgxRgkoICAgIDUgNzgpICAjIDFGIOKjkCAgIFtJTkZPUk1BVElPTiBTRVBBUkFUT1IgT05FXQorY2hhciBceDIwCSggICAgICAgICkgICMgMjAg4qCAICAgW1NQQUNFXQorY2hhciBceDIxCSggMiAgNTYgICkgICMgMjEg4qCyICEgW0VYQ0xBTUFUSU9OIE1BUktdCitjaGFyIFx4MjIJKCAgICA1NiAgKSAgIyAyMiDioLAgIiBbUVVPVEFUSU9OIE1BUktdCitjaGFyIFx4MjMJKCAgMzQ1NiAgKSAgIyAyMyDioLwgIyBbTlVNQkVSIFNJR05dCitjaGFyIFx4MjQJKCAyMzQgNiAgKSAgIyAyNCDioK4gJCBbRE9MTEFSIFNJR05dCitjaGFyIFx4MjUJKDEgIDQ1NiAgKSAgIyAyNSDioLkgJSBbUEVSQ0VOVCBTSUdOXQorY2hhciBceDI2CSgxMjM0IDYgICkgICMgMjYg4qCvICYgW0FNUEVSU0FORF0KK2NoYXIgXHgyNwkoICAgIDUgICApICAjIDI3IOKgkCAnIFtBUE9TVFJPUEhFXQorY2hhciBceDI4CSggMjMgIDYgICkgICMgMjgg4qCmICggW0xFRlQgUEFSRU5USEVTSVNdCitjaGFyIFx4MjkJKCAgMyA1NiAgKSAgIyAyOSDioLQgKSBbUklHSFQgUEFSRU5USEVTSVNdCitjaGFyIFx4MkEJKCAgMyA1ICAgKSAgIyAyQSDioJQgKiBbQVNURVJJU0tdCitjaGFyIFx4MkIJKCAyMyA1ICAgKSAgIyAyQiDioJYgKyBbUExVUyBTSUdOXQorY2hhciBceDJDCSggMiAgICAgICkgICMgMkMg4qCCICwgW0NPTU1BXQorY2hhciBceDJECSggIDMgIDYgICkgICMgMkQg4qCkIC0gW0hZUEhFTi1NSU5VU10KK2NoYXIgXHgyRQkoICAzICAgICApICAjIDJFIOKghCAuIFtGVUxMIFNUT1BdCitjaGFyIFx4MkYJKCAgMzQgICAgKSAgIyAyRiDioIwgLyBbU09MSURVU10KKyMgSGluZHUtQXJhYmljIG51bWVyYWxzICAgICAjIDMwLTM5CitjaGFyIFx4M0EJKCAyICA1ICAgKSAgIyAzQSDioJIgOiBbQ09MT05dCitjaGFyIFx4M0IJKCAyMyAgICAgKSAgIyAzQiDioIYgOyBbU0VNSUNPTE9OXQorY2hhciBceDNDCSgxMiAgIDYgICkgICMgM0Mg4qCjIDwgW0xFU1MtVEhBTiBTSUdOXQorY2hhciBceDNECSggMjMgNTYgICkgICMgM0Qg4qC2ID0gW0VRVUFMUyBTSUdOXQorY2hhciBceDNFCSgxICAgNTYgICkgICMgM0Ug4qCxID4gW0dSRUFURVItVEhBTiBTSUdOXQorY2hhciBceDNGCSggMiAgIDYgICkgICMgM0Yg4qCiID8gW1FVRVNUSU9OIE1BUktdCitjaGFyIFx4NDAJKCAgIDQgICAgKSAgIyA0MCDioIggQCBbQ09NTUVSQ0lBTCBBVF0KKyMgdXBwZXJjYXNlIExhdGluIGFscGhhYmV0ICAjIDQxLTVBCitjaGFyIFx4NUIJKDEyMyA1NiAgKSAgIyA1QiDioLcgWyBbTEVGVCBTUVVBUkUgQlJBQ0tFVF0KK2NoYXIgXHg1QwkoMSAgNCA2ICApICAjIDVDIOKgqSBcIFtSRVZFUlNFIFNPTElEVVNdCitjaGFyIFx4NUQJKCAyMzQ1NiAgKSAgIyA1RCDioL4gXSBbUklHSFQgU1FVQVJFIEJSQUNLRVRdCitjaGFyIFx4NUUJKCAgIDQ1IDcgKSAgIyA1RSDioZggXiBbQ0lSQ1VNRkxFWCBBQ0NFTlRdCitjaGFyIFx4NUYJKCAgMzQgNiAgKSAgIyA1RiDioKwgXyBbTE9XIExJTkVdCitjaGFyIFx4NjAJKCAgIDQgIDcgKSAgIyA2MCDioYggYCBbR1JBVkUgQUNDRU5UXQorIyBsb3dlcmNhc2UgTGF0aW4gYWxwaGFiZXQgICMgNjEtN0EKK2NoYXIgXHg3QgkoMTIgNCA2ICApICAjIDdCIOKgqyB7IFtMRUZUIENVUkxZIEJSQUNLRVRdCitjaGFyIFx4N0MJKCAgIDQ1NiAgKSAgIyA3QyDioLggfCBbVkVSVElDQUwgTElORV0KK2NoYXIgXHg3RAkoMTIgNDU2ICApICAjIDdEIOKguyB9IFtSSUdIVCBDVVJMWSBCUkFDS0VUXQorY2hhciBceDdFCSggICA0NSAgICkgICMgN0Ug4qCYIH4gW1RJTERFXQorY2hhciBceEExCSggMjMgNSAgOCkgICMgQTEg4qKWIMKhIFtJTlZFUlRFRCBFWENMQU1BVElPTiBNQVJLXQorY2hhciBceEEyCSgxIDMgNTYgOCkgICMgQTIg4qK1IMKiIFtDRU5UIFNJR05dCitjaGFyIFx4QTMJKDEyMyAgICA4KSAgIyBBMyDioocgwqMgW1BPVU5EIFNJR05dCitjaGFyIFx4QTQJKDEgICA1IDc4KSAgIyBBNCDio5EgwqQgW0NVUlJFTkNZIFNJR05dCitjaGFyIFx4QTUJKDEgMyAgNiA4KSAgIyBBNSDioqUgwqUgW1lFTiBTSUdOXQorY2hhciBceEE2CSggICA0IDYgOCkgICMgQTYg4qKoIMKmIFtCUk9LRU4gQkFSXQorY2hhciBceEE3CSggICA0IDY3OCkgICMgQTcg4qOoIMKnIFtTRUNUSU9OIFNJR05dCitjaGFyIFx4QTgJKCAyICA1ICA4KSAgIyBBOCDiopIgwqggW0RJQUVSRVNJU10KK2NoYXIgXHhBOQkoMSAzICAgIDgpICAjIEE5IOKihSDCqSBbQ09QWVJJR0hUIFNJR05dCitjaGFyIFx4QUEJKCAgIDQgIDc4KSAgIyBBQSDio4ggwqogW0ZFTUlOSU5FIE9SRElOQUwgSU5ESUNBVE9SXQorY2hhciBceEFCCSggMjMgICA3OCkgICMgQUIg4qOGIMKrIFtMRUZULVBPSU5USU5HIERPVUJMRSBBTkdMRSBRVU9UQVRJT04gTUFSS10KK2NoYXIgXHhBQwkoICAzIDUgNyApICAjIEFDIOKhlCDCrCBbTk9UIFNJR05dCitjaGFyIFx4QUQJKCAgICAgICA4KSAgIyBBRCDiooAgwq0gW1NPRlQgSFlQSEVOXQorY2hhciBceEFFCSgxMjMgNSAgOCkgICMgQUUg4qKXIMKuIFtSRUdJU1RFUkVEIFNJR05dCitjaGFyIFx4QUYJKCAyMyA1NiA4KSAgIyBBRiDiorYgwq8gW01BQ1JPTl0KK2NoYXIgXHhCMAkoICAgIDU2IDgpICAjIEIwIOKisCDCsCBbREVHUkVFIFNJR05dCitjaGFyIFx4QjEJKCAgMyAgICA4KSAgIyBCMSDiooQgwrEgW1BMVVMtTUlOVVMgU0lHTl0KK2NoYXIgXHhCMgkoIDIzICAgNyApICAjIEIyIOKhhiDCsiBbU1VQRVJTQ1JJUFQgVFdPXQorY2hhciBceEIzCSggMiAgNSA3ICkgICMgQjMg4qGSIMKzIFtTVVBFUlNDUklQVCBUSFJFRV0KK2NoYXIgXHhCNAkoICAgNCAgIDgpICAjIEI0IOKiiCDCtCBbQUNVVEUgQUNDRU5UXQorY2hhciBceEI1CSggMjMgIDYgOCkgICMgQjUg4qKmIMK1IFtNSUNSTyBTSUdOXQorY2hhciBceEI2CSggICA0IDY3ICkgICMgQjYg4qGoIMK2IFtQSUxDUk9XIFNJR05dCitjaGFyIFx4QjcJKCAgMyAgIDc4KSAgIyBCNyDio4QgwrcgW01JRERMRSBET1RdCitjaGFyIFx4QjgJKCAgMyA1Njc4KSAgIyBCOCDio7QgwrggW0NFRElMTEFdCitjaGFyIFx4QjkJKCAyICAgIDcgKSAgIyBCOSDioYIgwrkgW1NVUEVSU0NSSVBUIE9ORV0KK2NoYXIgXHhCQQkoMSAzIDUgIDgpICAjIEJBIOKilSDCuiBbTUFTQ1VMSU5FIE9SRElOQUwgSU5ESUNBVE9SXQorY2hhciBceEJCCSggICAgNTY3OCkgICMgQkIg4qOwIMK7IFtSSUdIVC1QT0lOVElORyBET1VCTEUgQU5HTEUgUVVPVEFUSU9OIE1BUktdCitjaGFyIFx4QkMJKCAgMzQ1NiA4KSAgIyBCQyDiorwgwrwgW1ZVTEdBUiBGUkFDVElPTiBPTkUgUVVBUlRFUl0KK2NoYXIgXHhCRAkoICAzNDU2NyApICAjIEJEIOKhvCDCvSBbVlVMR0FSIEZSQUNUSU9OIE9ORSBIQUxGXQorY2hhciBceEJFCSggIDM0NTY3OCkgICMgQkUg4qO8IMK+IFtWVUxHQVIgRlJBQ1RJT04gVEhSRUUgUVVBUlRFUlNdCitjaGFyIFx4QkYJKCAyICAgNiA4KSAgIyBCRiDioqIgwr8gW0lOVkVSVEVEIFFVRVNUSU9OIE1BUktdCitjaGFyIFx4QzAJKDEyMyA1Njc4KSAgIyBDMCDio7cgw4AgW0xBVElOIENBUElUQUwgTEVUVEVSIEEgV0lUSCBHUkFWRV0KK2NoYXIgXHhDMQkoMTIzIDU2NyApICAjIEMxIOKhtyDDgSBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgQSBXSVRIIEFDVVRFXQorY2hhciBceEMyCSgxICAgIDY3OCkgICMgQzIg4qOhIMOCIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBBIFdJVEggQ0lSQ1VNRkxFWF0KK2NoYXIgXHhDMwkoMSAgNCA2NzgpICAjIEMzIOKjqSDDgyBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgQSBXSVRIIFRJTERFXQorY2hhciBceEM0CSggIDM0NSA3ICkgICMgQzQg4qGcIMOEIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBBIFdJVEggRElBRVJFU0lTXQorY2hhciBceEM1CSgxICAgIDY3ICkgICMgQzUg4qGhIMOFIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBBIFdJVEggUklORyBBQk9WRV0KK2NoYXIgXHhDNgkoICAzNDUgNzgpICAjIEM2IOKjnCDDhiBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgQUVdCitjaGFyIFx4QzcJKDEyMzQgNjcgKSAgIyBDNyDioa8gw4cgW0xBVElOIENBUElUQUwgTEVUVEVSIEMgV0lUSCBDRURJTExBXQorY2hhciBceEM4CSggMjM0IDY3OCkgICMgQzgg4qOuIMOIIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBFIFdJVEggR1JBVkVdCitjaGFyIFx4QzkJKCAyMzQgNjcgKSAgIyBDOSDioa4gw4kgW0xBVElOIENBUElUQUwgTEVUVEVSIEUgV0lUSCBBQ1VURV0KK2NoYXIgXHhDQQkoMTIgICA2NyApICAjIENBIOKhoyDDiiBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgRSBXSVRIIENJUkNVTUZMRVhdCitjaGFyIFx4Q0IJKDEyIDQgNjcgKSAgIyBDQiDioasgw4sgW0xBVElOIENBUElUQUwgTEVUVEVSIEUgV0lUSCBESUFFUkVTSVNdCitjaGFyIFx4Q0MJKCAgMzQgIDc4KSAgIyBDQyDio4wgw4wgW0xBVElOIENBUElUQUwgTEVUVEVSIEkgV0lUSCBHUkFWRV0KK2NoYXIgXHhDRAkoICAzNCAgNyApICAjIENEIOKhjCDDjSBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgSSBXSVRIIEFDVVRFXQorY2hhciBceENFCSgxICA0IDY3ICkgICMgQ0Ug4qGpIMOOIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBJIFdJVEggQ0lSQ1VNRkxFWF0KK2NoYXIgXHhDRgkoMTIgNDU2NyApICAjIENGIOKhuyDDjyBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgSSBXSVRIIERJQUVSRVNJU10KK2NoYXIgXHhEMAkoMSAgIDU2NzgpICAjIEQwIOKjsSDDkCBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgRVRIXQorY2hhciBceEQxCSgxMiA0NTY3OCkgICMgRDEg4qO7IMORIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBOIFdJVEggVElMREVdCitjaGFyIFx4RDIJKCAgMzQgNjc4KSAgIyBEMiDio6wgw5IgW0xBVElOIENBUElUQUwgTEVUVEVSIE8gV0lUSCBHUkFWRV0KK2NoYXIgXHhEMwkoICAzNCA2NyApICAjIEQzIOKhrCDDkyBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgTyBXSVRIIEFDVVRFXQorY2hhciBceEQ0CSgxICA0NTY3ICkgICMgRDQg4qG5IMOUIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBPIFdJVEggQ0lSQ1VNRkxFWF0KK2NoYXIgXHhENQkoMSAgNDU2NzgpICAjIEQ1IOKjuSDDlSBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgTyBXSVRIIFRJTERFXQorY2hhciBceEQ2CSggMiA0IDY3ICkgICMgRDYg4qGqIMOWIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBPIFdJVEggRElBRVJFU0lTXQorY2hhciBceEQ3CSggIDMgICA3ICkgICMgRDcg4qGEIMOXIFtNVUxUSVBMSUNBVElPTiBTSUdOXQorY2hhciBceEQ4CSggMiA0IDY3OCkgICMgRDgg4qOqIMOYIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBPIFdJVEggU1RST0tFXQorY2hhciBceEQ5CSggMjM0NTY3OCkgICMgRDkg4qO+IMOZIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBVIFdJVEggR1JBVkVdCitjaGFyIFx4REEJKCAyMzQ1NjcgKSAgIyBEQSDiob4gw5ogW0xBVElOIENBUElUQUwgTEVUVEVSIFUgV0lUSCBBQ1VURV0KK2NoYXIgXHhEQgkoMSAgIDU2NyApICAjIERCIOKhsSDDmyBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgVSBXSVRIIENJUkNVTUZMRVhdCitjaGFyIFx4REMJKDEyICA1NjcgKSAgIyBEQyDiobMgw5wgW0xBVElOIENBUElUQUwgTEVUVEVSIFUgV0lUSCBESUFFUkVTSVNdCitjaGFyIFx4REQJKDEyMzQgNjc4KSAgIyBERCDio68gw50gW0xBVElOIENBUElUQUwgTEVUVEVSIFkgV0lUSCBBQ1VURV0KK2NoYXIgXHhERQkoMTIgNCA2IDgpICAjIERFIOKiqyDDniBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgVEhPUk5dCitjaGFyIFx4REYJKCAyMzQgICA4KSAgIyBERiDioo4gw58gW0xBVElOIFNNQUxMIExFVFRFUiBTSEFSUCBTXQorY2hhciBceEUwCSgxMjMgNTYgOCkgICMgRTAg4qK3IMOgIFtMQVRJTiBTTUFMTCBMRVRURVIgQSBXSVRIIEdSQVZFXQorY2hhciBceEUxCSgxMjMgNTYgICkgICMgRTEg4qC3IMOhIFtMQVRJTiBTTUFMTCBMRVRURVIgQSBXSVRIIEFDVVRFXQorY2hhciBceEUyCSgxICAgIDYgICkgICMgRTIg4qChIMOiIFtMQVRJTiBTTUFMTCBMRVRURVIgQSBXSVRIIENJUkNVTUZMRVhdCitjaGFyIFx4RTMJKDEgIDQgNiA4KSAgIyBFMyDioqkgw6MgW0xBVElOIFNNQUxMIExFVFRFUiBBIFdJVEggVElMREVdCitjaGFyIFx4RTQJKCAgMzQ1ICAgKSAgIyBFNCDioJwgw6QgW0xBVElOIFNNQUxMIExFVFRFUiBBIFdJVEggRElBRVJFU0lTXQorY2hhciBceEU1CSgxICAgIDYgICkgICMgRTUg4qChIMOlIFtMQVRJTiBTTUFMTCBMRVRURVIgQSBXSVRIIFJJTkcgQUJPVkVdCitjaGFyIFx4RTYJKCAgMzQ1ICA4KSAgIyBFNiDiopwgw6YgW0xBVElOIFNNQUxMIExFVFRFUiBBRV0KK2NoYXIgXHhFNwkoMTIzNCA2ICApICAjIEU3IOKgryDDpyBbTEFUSU4gU01BTEwgTEVUVEVSIEMgV0lUSCBDRURJTExBXQorY2hhciBceEU4CSggMjM0IDYgOCkgICMgRTgg4qKuIMOoIFtMQVRJTiBTTUFMTCBMRVRURVIgRSBXSVRIIEdSQVZFXQorY2hhciBceEU5CSggMjM0IDYgICkgICMgRTkg4qCuIMOpIFtMQVRJTiBTTUFMTCBMRVRURVIgRSBXSVRIIEFDVVRFXQorY2hhciBceEVBCSgxMiAgIDYgICkgICMgRUEg4qCjIMOqIFtMQVRJTiBTTUFMTCBMRVRURVIgRSBXSVRIIENJUkNVTUZMRVhdCitjaGFyIFx4RUIJKDEyIDQgNiAgKSAgIyBFQiDioKsgw6sgW0xBVElOIFNNQUxMIExFVFRFUiBFIFdJVEggRElBRVJFU0lTXQorY2hhciBceEVDCSggIDM0ICAgOCkgICMgRUMg4qKMIMOsIFtMQVRJTiBTTUFMTCBMRVRURVIgSSBXSVRIIEdSQVZFXQorY2hhciBceEVECSggIDM0ICAgICkgICMgRUQg4qCMIMOtIFtMQVRJTiBTTUFMTCBMRVRURVIgSSBXSVRIIEFDVVRFXQorY2hhciBceEVFCSgxICA0IDYgICkgICMgRUUg4qCpIMOuIFtMQVRJTiBTTUFMTCBMRVRURVIgSSBXSVRIIENJUkNVTUZMRVhdCitjaGFyIFx4RUYJKDEyIDQ1NiAgKSAgIyBFRiDioLsgw68gW0xBVElOIFNNQUxMIExFVFRFUiBJIFdJVEggRElBRVJFU0lTXQorY2hhciBceEYwCSgxICAgNTYgOCkgICMgRjAg4qKxIMOwIFtMQVRJTiBTTUFMTCBMRVRURVIgRVRIXQorY2hhciBceEYxCSgxMiA0NTYgOCkgICMgRjEg4qK7IMOxIFtMQVRJTiBTTUFMTCBMRVRURVIgTiBXSVRIIFRJTERFXQorY2hhciBceEYyCSggIDM0IDYgOCkgICMgRjIg4qKsIMOyIFtMQVRJTiBTTUFMTCBMRVRURVIgTyBXSVRIIEdSQVZFXQorY2hhciBceEYzCSggIDM0IDYgICkgICMgRjMg4qCsIMOzIFtMQVRJTiBTTUFMTCBMRVRURVIgTyBXSVRIIEFDVVRFXQorY2hhciBceEY0CSgxICA0NTYgICkgICMgRjQg4qC5IMO0IFtMQVRJTiBTTUFMTCBMRVRURVIgTyBXSVRIIENJUkNVTUZMRVhdCitjaGFyIFx4RjUJKDEgIDQ1NiA4KSAgIyBGNSDiorkgw7UgW0xBVElOIFNNQUxMIExFVFRFUiBPIFdJVEggVElMREVdCitjaGFyIFx4RjYJKCAyIDQgNiAgKSAgIyBGNiDioKogw7YgW0xBVElOIFNNQUxMIExFVFRFUiBPIFdJVEggRElBRVJFU0lTXQorY2hhciBceEY3CSggMiAgNTY3ICkgICMgRjcg4qGyIMO3IFtESVZJU0lPTiBTSUdOXQorY2hhciBceEY4CSggMiA0IDYgOCkgICMgRjgg4qKqIMO4IFtMQVRJTiBTTUFMTCBMRVRURVIgTyBXSVRIIFNUUk9LRV0KK2NoYXIgXHhGOQkoIDIzNDU2IDgpICAjIEY5IOKiviDDuSBbTEFUSU4gU01BTEwgTEVUVEVSIFUgV0lUSCBHUkFWRV0KK2NoYXIgXHhGQQkoIDIzNDU2ICApICAjIEZBIOKgviDDuiBbTEFUSU4gU01BTEwgTEVUVEVSIFUgV0lUSCBBQ1VURV0KK2NoYXIgXHhGQgkoMSAgIDU2ICApICAjIEZCIOKgsSDDuyBbTEFUSU4gU01BTEwgTEVUVEVSIFUgV0lUSCBDSVJDVU1GTEVYXQorY2hhciBceEZDCSgxMiAgNTYgICkgICMgRkMg4qCzIMO8IFtMQVRJTiBTTUFMTCBMRVRURVIgVSBXSVRIIERJQUVSRVNJU10KK2NoYXIgXHhGRAkoMTIzNCA2IDgpICAjIEZEIOKiryDDvSBbTEFUSU4gU01BTEwgTEVUVEVSIFkgV0lUSCBBQ1VURV0KK2NoYXIgXHhGRQkoMTIgNCA2NzgpICAjIEZFIOKjqyDDviBbTEFUSU4gU01BTEwgTEVUVEVSIFRIT1JOXQorY2hhciBceEZGCSgxIDM0NTYgOCkgICMgRkYg4qK9IMO/IFtMQVRJTiBTTUFMTCBMRVRURVIgWSBXSVRIIERJQUVSRVNJU10KKworaW5jbHVkZSBjb21tb24udHRpCmRpZmYgLS1naXQgYS9UYWJsZXMvVGV4dC9mci0yMDA3LnR0YiBiL1RhYmxlcy9UZXh0L2ZyLTIwMDcudHRiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE3ODE3OTQKLS0tIC9kZXYvbnVsbAorKysgYi9UYWJsZXMvVGV4dC9mci0yMDA3LnR0YgpAQCAtMCwwICsxLDIyNiBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorIyAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyMKKyMgQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorIworIyBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorIworIyBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisjIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyMgbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisjCisjIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMgQlJMVFRZIFRleHQgVGFibGUgLSBGcmVuY2ggKHVuaWZpZWQgMjAwNykKKworIyBUaGlzIGlzIHRoZSAyMDA3IHVuaWZpY2F0aW9uIG9mIGZyZW5jaCBjb21wdXRlciBicmFpbGxlIHRhYmxlcywgYmFzZWQgb24gdGhlCisjIGNwMTI1MiBjaGFyYWN0ZXIgc2V0CisjCisjIGh0dHA6Ly93d3cuYXZoLmFzc28uZnIvcnVicmlxdWVzL2luZm9zX2JyYWlsbGUvdGFibGVfYnJhaWxsZV9pbmZvcm1hdGlxdWUucGhwCisKKyMgdGhlIHN0YW5kYXJkIHJlcHJlc2VudGF0aW9ucyBmb3IgdGhlIGxldHRlcnMgb2YgdGhlIExhdGluIGFscGhhYmV0CitpbmNsdWRlIGx0ci1sYXRpbi50dGkKKworIyB0aGUgbnVtYmVycyAxLTkgYXJlIHJlcHJlc2VudGVkIGJ5IHRoZSBsZXR0ZXJzIGEtaSB3aXRoIGRvdCA2IGFkZGVkCisjIHRoZSBudW1iZXIgMCBpcyByZXByZXNlbnRlZCBieSBkb3RzIDM0NTYKK2luY2x1ZGUgbnVtLWZyZW5jaC50dGkKKworIyBnZW5lcmF0ZWQgYnkgdHRidGVzdDogY2hhcnNldD1jcDEyNTIKK2NoYXIgXHgwMAkoMTIzNDUgIDgpICAjIDAwIOKinyAgIFtOVUxMXQorY2hhciBceDAxCSgxMjM0IDY3OCkgICMgMDEg4qOvICAgW1NUQVJUIE9GIEhFQURJTkddCitjaGFyIFx4MDIJKDEyICA1ICA4KSAgIyAwMiDiopMgICBbU1RBUlQgT0YgVEVYVF0KK2NoYXIgXHgwMwkoMTIzNCA2IDgpICAjIDAzIOKiryAgIFtFTkQgT0YgVEVYVF0KK2NoYXIgXHgwNAkoMSAgNDUgNzgpICAjIDA0IOKjmSAgIFtFTkQgT0YgVFJBTlNNSVNTSU9OXQorY2hhciBceDA1CSgxICAgNSAgOCkgICMgMDUg4qKRICAgW0VOUVVJUlldCitjaGFyIFx4MDYJKDEyIDQgIDc4KSAgIyAwNiDio4sgICBbQUNLTk9XTEVER0VdCitjaGFyIFx4MDcJKDEyIDQ1ICA4KSAgIyAwNyDiopsgICBbQkVMTF0KK2NoYXIgXHgwOAkoMTIgIDUgNzgpICAjIDA4IOKjkyAgIFtCQUNLU1BBQ0VdCitjaGFyIFx4MDkJKDEyIDQgNjc4KSAgIyAwOSDio6sgICBbQ0hBUkFDVEVSIFRBQlVMQVRJT05dCitjaGFyIFx4MEEJKCAyIDQ1NiA4KSAgIyAwQSDiorogICBbTElORSBGRUVEIChMRildCitjaGFyIFx4MEIJKDEgMyAgICA4KSAgIyAwQiDiooUgICBbTElORSBUQUJVTEFUSU9OXQorY2hhciBceDBDCSgxMjMgICA3OCkgICMgMEMg4qOHICAgW0ZPUk0gRkVFRCAoRkYpXQorY2hhciBceDBECSgxIDM0ICA3OCkgICMgMEQg4qONICAgW0NBUlJJQUdFIFJFVFVSTiAoQ1IpXQorY2hhciBceDBFCSgxIDM0NSAgOCkgICMgMEUg4qKdICAgW1NISUZUIE9VVF0KK2NoYXIgXHgwRgkoIDIzICA2IDgpICAjIDBGIOKipiAgIFtTSElGVCBJTl0KK2NoYXIgXHgxMAkoMTIzNCAgNzgpICAjIDEwIOKjjyAgIFtEQVRBIExJTksgRVNDQVBFXQorY2hhciBceDExCSgxMjM0NSA3OCkgICMgMTEg4qOfICAgW0RFVklDRSBDT05UUk9MIE9ORV0KK2NoYXIgXHgxMgkoMTIzIDUgNzgpICAjIDEyIOKjlyAgIFtERVZJQ0UgQ09OVFJPTCBUV09dCitjaGFyIFx4MTMJKCAyMzQgIDc4KSAgIyAxMyDio44gICBbREVWSUNFIENPTlRST0wgVEhSRUVdCitjaGFyIFx4MTQJKCAyMzQ1IDc4KSAgIyAxNCDio54gICBbREVWSUNFIENPTlRST0wgRk9VUl0KK2NoYXIgXHgxNQkoMSAzICA2NzgpICAjIDE1IOKjpSAgIFtORUdBVElWRSBBQ0tOT1dMRURHRV0KK2NoYXIgXHgxNgkoMTIzICA2NzgpICAjIDE2IOKjpyAgIFtTWU5DSFJPTk9VUyBJRExFXQorY2hhciBceDE3CSggMiA0NTY3OCkgICMgMTcg4qO6ICAgW0VORCBPRiBUUkFOU01JU1NJT04gQkxPQ0tdCitjaGFyIFx4MTgJKDEgMzQgNjc4KSAgIyAxOCDio60gICBbQ0FOQ0VMXQorY2hhciBceDE5CSgxMjMgIDYgOCkgICMgMTkg4qKnICAgW0VORCBPRiBNRURJVU1dCitjaGFyIFx4MUEJKDEgICA1Njc4KSAgIyAxQSDio7EgICBbU1VCU1RJVFVURV0KK2NoYXIgXHgxQgkoMTIgIDU2NzgpICAjIDFCIOKjsyAgIFtFU0NBUEVdCitjaGFyIFx4MUMJKDEgIDQgNjc4KSAgIyAxQyDio6kgICBbSU5GT1JNQVRJT04gU0VQQVJBVE9SIEZPVVJdCitjaGFyIFx4MUQJKDEyICAgNjc4KSAgIyAxRCDio6MgICBbSU5GT1JNQVRJT04gU0VQQVJBVE9SIFRIUkVFXQorY2hhciBceDFFCSggMjMgNSA3ICkgICMgMUUg4qGWICAgW0lORk9STUFUSU9OIFNFUEFSQVRPUiBUV09dCitjaGFyIFx4MUYJKCAyMyAgNjcgKSAgIyAxRiDioaYgICBbSU5GT1JNQVRJT04gU0VQQVJBVE9SIE9ORV0KK2NoYXIgXHgyMAkoICAgICAgICApICAjIDIwIOKggCAgIFtTUEFDRV0KK2NoYXIgXHgyMQkoIDIzIDUgICApICAjIDIxIOKgliAhIFtFWENMQU1BVElPTiBNQVJLXQorY2hhciBceDIyCSggMjMgNTYgICkgICMgMjIg4qC2ICIgW1FVT1RBVElPTiBNQVJLXQorY2hhciBceDIzCSggIDM0NTYgOCkgICMgMjMg4qK8ICMgW05VTUJFUiBTSUdOXQorY2hhciBceDI0CSggIDMgNSA3ICkgICMgMjQg4qGUICQgW0RPTExBUiBTSUdOXQorY2hhciBceDI1CSggIDM0IDYgOCkgICMgMjUg4qKsICUgW1BFUkNFTlQgU0lHTl0KK2NoYXIgXHgyNgkoMTIzNDU2IDgpICAjIDI2IOKivyAmIFtBTVBFUlNBTkRdCitjaGFyIFx4MjcJKCAgMyAgICAgKSAgIyAyNyDioIQgJyBbQVBPU1RST1BIRV0KK2NoYXIgXHgyOAkoIDIzICA2ICApICAjIDI4IOKgpiAoIFtMRUZUIFBBUkVOVEhFU0lTXQorY2hhciBceDI5CSggIDMgNTYgICkgICMgMjkg4qC0ICkgW1JJR0hUIFBBUkVOVEhFU0lTXQorY2hhciBceDJBCSggIDMgNSAgICkgICMgMkEg4qCUICogW0FTVEVSSVNLXQorY2hhciBceDJCCSggMjMgNSA3OCkgICMgMkIg4qOWICsgW1BMVVMgU0lHTl0KK2NoYXIgXHgyQwkoIDIgICAgICApICAjIDJDIOKggiAsIFtDT01NQV0KK2NoYXIgXHgyRAkoICAzICA2ICApICAjIDJEIOKgpCAtIFtIWVBIRU4tTUlOVVNdCitjaGFyIFx4MkUJKCAyICA1NiAgKSAgIyAyRSDioLIgLiBbRlVMTCBTVE9QXQorY2hhciBceDJGCSggIDM0ICAgICkgICMgMkYg4qCMIC8gW1NPTElEVVNdCisjIEhpbmR1LUFyYWJpYyBudW1lcmFscyAgICAgIyAzMC0zOQorY2hhciBceDNBCSggMiAgNSAgICkgICMgM0Eg4qCSIDogW0NPTE9OXQorY2hhciBceDNCCSggMjMgICAgICkgICMgM0Ig4qCGIDsgW1NFTUlDT0xPTl0KK2NoYXIgXHgzQwkoIDIzICAgIDgpICAjIDNDIOKihiA8IFtMRVNTLVRIQU4gU0lHTl0KK2NoYXIgXHgzRAkoIDIzIDU2NzgpICAjIDNEIOKjtiA9IFtFUVVBTFMgU0lHTl0KK2NoYXIgXHgzRQkoICAgIDU2NyApICAjIDNFIOKhsCA+IFtHUkVBVEVSLVRIQU4gU0lHTl0KK2NoYXIgXHgzRgkoIDIgICA2ICApICAjIDNGIOKgoiA/IFtRVUVTVElPTiBNQVJLXQorY2hhciBceDQwCSggIDM0NSAgICkgICMgNDAg4qCcIEAgW0NPTU1FUkNJQUwgQVRdCisjIHVwcGVyY2FzZSBMYXRpbiBhbHBoYWJldCAgIyA0MS01QQorY2hhciBceDVCCSggMjMgIDY3OCkgICMgNUIg4qOmIFsgW0xFRlQgU1FVQVJFIEJSQUNLRVRdCitjaGFyIFx4NUMJKCAgMzQgICA4KSAgIyA1QyDioowgXCBbUkVWRVJTRSBTT0xJRFVTXQorY2hhciBceDVECSggIDMgNTY3OCkgICMgNUQg4qO0IF0gW1JJR0hUIFNRVUFSRSBCUkFDS0VUXQorY2hhciBceDVFCSggICA0ICAgICkgICMgNUUg4qCIIF4gW0NJUkNVTUZMRVggQUNDRU5UXQorY2hhciBceDVGCSggICAgNSA3OCkgICMgNUYg4qOQIF8gW0xPVyBMSU5FXQorY2hhciBceDYwCSggICAgIDYgICkgICMgNjAg4qCgIGAgW0dSQVZFIEFDQ0VOVF0KKyMgbG93ZXJjYXNlIExhdGluIGFscGhhYmV0ICAjIDYxLTdBCitjaGFyIFx4N0IJKCAyMyAgIDc4KSAgIyA3QiDio4YgeyBbTEVGVCBDVVJMWSBCUkFDS0VUXQorY2hhciBceDdDCSggICA0NTYgOCkgICMgN0Mg4qK4IHwgW1ZFUlRJQ0FMIExJTkVdCitjaGFyIFx4N0QJKCAgICA1Njc4KSAgIyA3RCDio7AgfSBbUklHSFQgQ1VSTFkgQlJBQ0tFVF0KK2NoYXIgXHg3RQkoICAzICAgIDgpICAjIDdFIOKihCB+IFtUSUxERV0KK2NoYXIgXHg3RgkoMTIzICAgIDgpICAjIDdGIOKihyAgIFtERUxFVEVdCitjaGFyIFx1MjBBQwkoMSAgIDUgNzgpICAjIDgwIOKjkSDigqwgW0VVUk8gU0lHTl0KK2NoYXIgXHUyMDFBCSggICAgIDY3ICkgICMgODIg4qGgIOKAmiBbU0lOR0xFIExPVy05IFFVT1RBVElPTiBNQVJLXQorY2hhciBcdTAxOTIJKDEyIDQgICA4KSAgIyA4MyDioosgxpIgW0xBVElOIFNNQUxMIExFVFRFUiBGIFdJVEggSE9PS10KK2NoYXIgXHUyMDFFCSggICAgNTYgICkgICMgODQg4qCwIOKAniBbRE9VQkxFIExPVy05IFFVT1RBVElPTiBNQVJLXQorY2hhciBcdTIwMjYJKCAgMyAgNiA4KSAgIyA4NSDioqQg4oCmIFtIT1JJWk9OVEFMIEVMTElQU0lTXQorY2hhciBcdTIwMjAJKCAgMyA1NiA4KSAgIyA4NiDiorQg4oCgIFtEQUdHRVJdCitjaGFyIFx1MjAyMQkoICAzIDU2NyApICAjIDg3IOKhtCDigKEgW0RPVUJMRSBEQUdHRVJdCitjaGFyIFx1MDJDNgkoICAgNCAgIDgpICAjIDg4IOKiiCDLhiBbTU9ESUZJRVIgTEVUVEVSIENJUkNVTUZMRVggQUNDRU5UXQorY2hhciBcdTIwMzAJKCAgMzQgNjc4KSAgIyA4OSDio6wg4oCwIFtQRVIgTUlMTEUgU0lHTl0KK2NoYXIgXHUwMTYwCSggMjM0IDY3OCkgICMgOEEg4qOuIMWgIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBTIFdJVEggQ0FST05dCitjaGFyIFx1MjAzOQkoICAgIDUgNyApICAjIDhCIOKhkCDigLkgW1NJTkdMRSBMRUZULVBPSU5USU5HIEFOR0xFIFFVT1RBVElPTiBNQVJLXQorY2hhciBcdTAxNTIJKCAyIDQgNjcgKSAgIyA4QyDioaogxZIgW0xBVElOIENBUElUQUwgTElHQVRVUkUgT0VdCitjaGFyIFx1MDE3RAkoMSAzIDU2NzgpICAjIDhFIOKjtSDFvSBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgWiBXSVRIIENBUk9OXQorY2hhciBcdTIwMTgJKCAgICAgNiA4KSAgIyA5MSDioqAg4oCYIFtMRUZUIFNJTkdMRSBRVU9UQVRJT04gTUFSS10KK2NoYXIgXHUyMDE5CSggIDMgICA3ICkgICMgOTIg4qGEIOKAmSBbUklHSFQgU0lOR0xFIFFVT1RBVElPTiBNQVJLXQorY2hhciBcdTIwMUMJKCAgMyAgIDc4KSAgIyA5MyDio4Qg4oCcIFtMRUZUIERPVUJMRSBRVU9UQVRJT04gTUFSS10KK2NoYXIgXHUyMDFECSggICAgIDY3OCkgICMgOTQg4qOgIOKAnSBbUklHSFQgRE9VQkxFIFFVT1RBVElPTiBNQVJLXQorY2hhciBcdTIwMjIJKDEyIDQ1IDc4KSAgIyA5NSDio5sg4oCiIFtCVUxMRVRdCitjaGFyIFx1MjAxMwkoICAgNCAgNzgpICAjIDk2IOKjiCDigJMgW0VOIERBU0hdCitjaGFyIFx1MjAxNAkoICAgNDUgNzgpICAjIDk3IOKjmCDigJQgW0VNIERBU0hdCitjaGFyIFx1MDJEQwkoICAgNCA2NyApICAjIDk4IOKhqCDLnCBbU01BTEwgVElMREVdCitjaGFyIFx1MjEyMgkoIDIzNDUgIDgpICAjIDk5IOKiniDihKIgW1RSQURFIE1BUksgU0lHTl0KK2NoYXIgXHUwMTYxCSggMjM0IDYgOCkgICMgOUEg4qKuIMWhIFtMQVRJTiBTTUFMTCBMRVRURVIgUyBXSVRIIENBUk9OXQorY2hhciBcdTIwM0EJKCAgICA1ICA4KSAgIyA5QiDiopAg4oC6IFtTSU5HTEUgUklHSFQtUE9JTlRJTkcgQU5HTEUgUVVPVEFUSU9OIE1BUktdCitjaGFyIFx1MDE1MwkoIDIgNCA2IDgpICAjIDlDIOKiqiDFkyBbTEFUSU4gU01BTEwgTElHQVRVUkUgT0VdCitjaGFyIFx1MDE3RQkoMSAzIDU2IDgpICAjIDlFIOKitSDFviBbTEFUSU4gU01BTEwgTEVUVEVSIFogV0lUSCBDQVJPTl0KK2NoYXIgXHUwMTc4CSgxICA0NTY3OCkgICMgOUYg4qO5IMW4IFtMQVRJTiBDQVBJVEFMIExFVFRFUiBZIFdJVEggRElBRVJFU0lTXQorY2hhciBceEExCSggMjMgNSAgOCkgICMgQTEg4qKWIMKhIFtJTlZFUlRFRCBFWENMQU1BVElPTiBNQVJLXQorY2hhciBceEEyCSgxICA0ICA3OCkgICMgQTIg4qOJIMKiIFtDRU5UIFNJR05dCitjaGFyIFx4QTMJKCAyMyAgIDcgKSAgIyBBMyDioYYgwqMgW1BPVU5EIFNJR05dCitjaGFyIFx4QTQJKCAgIDQ1ICAgKSAgIyBBNCDioJggwqQgW0NVUlJFTkNZIFNJR05dCitjaGFyIFx4QTUJKCAyICA1Njc4KSAgIyBBNSDio7IgwqUgW1lFTiBTSUdOXQorY2hhciBceEE2CSggICA0NSAgOCkgICMgQTYg4qKYIMKmIFtCUk9LRU4gQkFSXQorY2hhciBceEE3CSgxMjM0ICAgOCkgICMgQTcg4qKPIMKnIFtTRUNUSU9OIFNJR05dCitjaGFyIFx4QTgJKCAgIDQgNiAgKSAgIyBBOCDioKggwqggW0RJQUVSRVNJU10KK2NoYXIgXHhBOQkoMSAgNCAgIDgpICAjIEE5IOKiiSDCqSBbQ09QWVJJR0hUIFNJR05dCitjaGFyIFx4QUEJKDEgICAgNjc4KSAgIyBBQSDio6EgwqogW0ZFTUlOSU5FIE9SRElOQUwgSU5ESUNBVE9SXQorY2hhciBceEFCCSggMjMgNTYgOCkgICMgQUIg4qK2IMKrIFtMRUZULVBPSU5USU5HIERPVUJMRSBBTkdMRSBRVU9UQVRJT04gTUFSS10KK2NoYXIgXHhBQwkoIDIgIDU2NyApICAjIEFDIOKhsiDCrCBbTk9UIFNJR05dCitjaGFyIFx4QUQJKCAgICAgIDc4KSAgIyBBRCDio4Agwq0gW1NPRlQgSFlQSEVOXQorY2hhciBceEFFCSgxMjMgNSAgOCkgICMgQUUg4qKXIMKuIFtSRUdJU1RFUkVEIFNJR05dCitjaGFyIFx4QUYJKDEgMzQgICA4KSAgIyBBRiDioo0gwq8gW01BQ1JPTl0KK2NoYXIgXHhCMAkoIDIgICA2NyApICAjIEIwIOKhoiDCsCBbREVHUkVFIFNJR05dCitjaGFyIFx4QjEJKCAgMyAgNjc4KSAgIyBCMSDio6QgwrEgW1BMVVMtTUlOVVMgU0lHTl0KK2NoYXIgXHhCMgkoICAgNDUgNyApICAjIEIyIOKhmCDCsiBbU1VQRVJTQ1JJUFQgVFdPXQorY2hhciBceEIzCSggICA0NTY3ICkgICMgQjMg4qG4IMKzIFtTVVBFUlNDUklQVCBUSFJFRV0KK2NoYXIgXHhCNAkoICAgIDUgICApICAjIEI0IOKgkCDCtCBbQUNVVEUgQUNDRU5UXQorY2hhciBceEI1CSggMiAgNSA3ICkgICMgQjUg4qGSIMK1IFtNSUNSTyBTSUdOXQorY2hhciBceEI2CSggICA0NTY3OCkgICMgQjYg4qO4IMK2IFtQSUxDUk9XIFNJR05dCitjaGFyIFx4QjcJKCAgICAgICA4KSAgIyBCNyDiooAgwrcgW01JRERMRSBET1RdCitjaGFyIFx4QjgJKCAgIDQ1NiAgKSAgIyBCOCDioLggwrggW0NFRElMTEFdCitjaGFyIFx4QjkJKCAgIDQgIDcgKSAgIyBCOSDioYggwrkgW1NVUEVSU0NSSVBUIE9ORV0KK2NoYXIgXHhCQQkoIDIgICA2NzgpICAjIEJBIOKjoiDCuiBbTUFTQ1VMSU5FIE9SRElOQUwgSU5ESUNBVE9SXQorY2hhciBceEJCCSggMjMgNTY3ICkgICMgQkIg4qG2IMK7IFtSSUdIVC1QT0lOVElORyBET1VCTEUgQU5HTEUgUVVPVEFUSU9OIE1BUktdCitjaGFyIFx4QkMJKDEgMyAgNiA4KSAgIyBCQyDioqUgwrwgW1ZVTEdBUiBGUkFDVElPTiBPTkUgUVVBUlRFUl0KK2NoYXIgXHhCRAkoICAgNCA2IDgpICAjIEJEIOKiqCDCvSBbVlVMR0FSIEZSQUNUSU9OIE9ORSBIQUxGXQorY2hhciBceEJFCSgxIDM0IDYgOCkgICMgQkUg4qKtIMK+IFtWVUxHQVIgRlJBQ1RJT04gVEhSRUUgUVVBUlRFUlNdCitjaGFyIFx4QkYJKCAyICAgNiA4KSAgIyBCRiDioqIgwr8gW0lOVkVSVEVEIFFVRVNUSU9OIE1BUktdCitjaGFyIFx4QzAJKDEyMyA1NjcgKSAgIyBDMCDiobcgw4AgW0xBVElOIENBUElUQUwgTEVUVEVSIEEgV0lUSCBHUkFWRV0KK2NoYXIgXHhDMQkoMTIzIDU2NzgpICAjIEMxIOKjtyDDgSBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgQSBXSVRIIEFDVVRFXQorY2hhciBceEMyCSgxICAgIDY3ICkgICMgQzIg4qGhIMOCIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBBIFdJVEggQ0lSQ1VNRkxFWF0KK2NoYXIgXHhDMwkoMSAgICAgNzgpICAjIEMzIOKjgSDDgyBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgQSBXSVRIIFRJTERFXQorY2hhciBceEM0CSggIDM0NTY3ICkgICMgQzQg4qG8IMOEIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBBIFdJVEggRElBRVJFU0lTXQorY2hhciBceEM1CSggMiAgICA3ICkgICMgQzUg4qGCIMOFIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBBIFdJVEggUklORyBBQk9WRV0KK2NoYXIgXHhDNgkoICAzNDUgNyApICAjIEM2IOKhnCDDhiBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgQUVdCitjaGFyIFx4QzcJKDEyMzQgNjcgKSAgIyBDNyDioa8gw4cgW0xBVElOIENBUElUQUwgTEVUVEVSIEMgV0lUSCBDRURJTExBXQorY2hhciBceEM4CSggMjM0IDY3ICkgICMgQzgg4qGuIMOIIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBFIFdJVEggR1JBVkVdCitjaGFyIFx4QzkJKDEyMzQ1NjcgKSAgIyBDOSDiob8gw4kgW0xBVElOIENBUElUQUwgTEVUVEVSIEUgV0lUSCBBQ1VURV0KK2NoYXIgXHhDQQkoMTIgICA2NyApICAjIENBIOKhoyDDiiBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgRSBXSVRIIENJUkNVTUZMRVhdCitjaGFyIFx4Q0IJKDEyIDQgNjcgKSAgIyBDQiDioasgw4sgW0xBVElOIENBUElUQUwgTEVUVEVSIEUgV0lUSCBESUFFUkVTSVNdCitjaGFyIFx4Q0MJKCAyIDQgIDc4KSAgIyBDQyDio4ogw4wgW0xBVElOIENBUElUQUwgTEVUVEVSIEkgV0lUSCBHUkFWRV0KK2NoYXIgXHhDRAkoICAzNCAgNyApICAjIENEIOKhjCDDjSBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgSSBXSVRIIEFDVVRFXQorY2hhciBceENFCSgxICA0IDY3ICkgICMgQ0Ug4qGpIMOOIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBJIFdJVEggQ0lSQ1VNRkxFWF0KK2NoYXIgXHhDRgkoMTIgNDU2NyApICAjIENGIOKhuyDDjyBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgSSBXSVRIIERJQUVSRVNJU10KK2NoYXIgXHhEMAkoMTIgICAgNzgpICAjIEQwIOKjgyDDkCBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgRVRIXQorY2hhciBceEQxCSgxIDM0NSA3OCkgICMgRDEg4qOdIMORIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBOIFdJVEggVElMREVdCitjaGFyIFx4RDIJKDEgMyA1IDc4KSAgIyBEMiDio5Ugw5IgW0xBVElOIENBUElUQUwgTEVUVEVSIE8gV0lUSCBHUkFWRV0KK2NoYXIgXHhEMwkoICAzNCA2NyApICAjIEQzIOKhrCDDkyBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgTyBXSVRIIEFDVVRFXQorY2hhciBceEQ0CSgxICA0NTY3ICkgICMgRDQg4qG5IMOUIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBPIFdJVEggQ0lSQ1VNRkxFWF0KK2NoYXIgXHhENQkoMSAzICAgNzgpICAjIEQ1IOKjhSDDlSBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgTyBXSVRIIFRJTERFXQorY2hhciBceEQ2CSggMiA0IDY3OCkgICMgRDYg4qOqIMOWIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBPIFdJVEggRElBRVJFU0lTXQorY2hhciBceEQ3CSggIDMgNSA3OCkgICMgRDcg4qOUIMOXIFtNVUxUSVBMSUNBVElPTiBTSUdOXQorY2hhciBceEQ4CSggIDM0NTY3OCkgICMgRDgg4qO8IMOYIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBPIFdJVEggU1RST0tFXQorY2hhciBceEQ5CSggMjM0NTY3ICkgICMgRDkg4qG+IMOZIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBVIFdJVEggR1JBVkVdCitjaGFyIFx4REEJKCAyMzQ1Njc4KSAgIyBEQSDio74gw5ogW0xBVElOIENBUElUQUwgTEVUVEVSIFUgV0lUSCBBQ1VURV0KK2NoYXIgXHhEQgkoMSAgIDU2NyApICAjIERCIOKhsSDDmyBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgVSBXSVRIIENJUkNVTUZMRVhdCitjaGFyIFx4REMJKDEyICA1NjcgKSAgIyBEQyDiobMgw5wgW0xBVElOIENBUElUQUwgTEVUVEVSIFUgV0lUSCBESUFFUkVTSVNdCitjaGFyIFx4REQJKDEgMzQ1Njc4KSAgIyBERCDio70gw50gW0xBVElOIENBUElUQUwgTEVUVEVSIFkgV0lUSCBBQ1VURV0KK2NoYXIgXHhERQkoIDIgNDUgNzgpICAjIERFIOKjmiDDniBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgVEhPUk5dCitjaGFyIFx4REYJKCAyMzQgICA4KSAgIyBERiDioo4gw58gW0xBVElOIFNNQUxMIExFVFRFUiBTSEFSUCBTXQorY2hhciBceEUwCSgxMjMgNTYgICkgICMgRTAg4qC3IMOgIFtMQVRJTiBTTUFMTCBMRVRURVIgQSBXSVRIIEdSQVZFXQorY2hhciBceEUxCSgxMjMgNTYgOCkgICMgRTEg4qK3IMOhIFtMQVRJTiBTTUFMTCBMRVRURVIgQSBXSVRIIEFDVVRFXQorY2hhciBceEUyCSgxICAgIDYgOCkgICMgRTIg4qKhIMOiIFtMQVRJTiBTTUFMTCBMRVRURVIgQSBXSVRIIENJUkNVTUZMRVhdCitjaGFyIFx4RTMJKDEgICAgICA4KSAgIyBFMyDiooEgw6MgW0xBVElOIFNNQUxMIExFVFRFUiBBIFdJVEggVElMREVdCitjaGFyIFx4RTQJKCAgMzQ1IDc4KSAgIyBFNCDio5wgw6QgW0xBVElOIFNNQUxMIExFVFRFUiBBIFdJVEggRElBRVJFU0lTXQorY2hhciBceEU1CSggMiAgICAgOCkgICMgRTUg4qKCIMOlIFtMQVRJTiBTTUFMTCBMRVRURVIgQSBXSVRIIFJJTkcgQUJPVkVdCitjaGFyIFx4RTYJKCAgMzQ1ICA4KSAgIyBFNiDiopwgw6YgW0xBVElOIFNNQUxMIExFVFRFUiBBRV0KK2NoYXIgXHhFNwkoMTIzNCA2ICApICAjIEU3IOKgryDDpyBbTEFUSU4gU01BTEwgTEVUVEVSIEMgV0lUSCBDRURJTExBXQorY2hhciBceEU4CSggMjM0IDYgICkgICMgRTgg4qCuIMOoIFtMQVRJTiBTTUFMTCBMRVRURVIgRSBXSVRIIEdSQVZFXQorY2hhciBceEU5CSgxMjM0NTYgICkgICMgRTkg4qC/IMOpIFtMQVRJTiBTTUFMTCBMRVRURVIgRSBXSVRIIEFDVVRFXQorY2hhciBceEVBCSgxMiAgIDYgOCkgICMgRUEg4qKjIMOqIFtMQVRJTiBTTUFMTCBMRVRURVIgRSBXSVRIIENJUkNVTUZMRVhdCitjaGFyIFx4RUIJKDEyIDQgNiA4KSAgIyBFQiDioqsgw6sgW0xBVElOIFNNQUxMIExFVFRFUiBFIFdJVEggRElBRVJFU0lTXQorY2hhciBceEVDCSggMiA0ICAgOCkgICMgRUMg4qKKIMOsIFtMQVRJTiBTTUFMTCBMRVRURVIgSSBXSVRIIEdSQVZFXQorY2hhciBceEVECSggIDM0ICA3OCkgICMgRUQg4qOMIMOtIFtMQVRJTiBTTUFMTCBMRVRURVIgSSBXSVRIIEFDVVRFXQorY2hhciBceEVFCSgxICA0IDYgOCkgICMgRUUg4qKpIMOuIFtMQVRJTiBTTUFMTCBMRVRURVIgSSBXSVRIIENJUkNVTUZMRVhdCitjaGFyIFx4RUYJKDEyIDQ1NiA4KSAgIyBFRiDiorsgw68gW0xBVElOIFNNQUxMIExFVFRFUiBJIFdJVEggRElBRVJFU0lTXQorY2hhciBceEYwCSgxMiAgICAgOCkgICMgRjAg4qKDIMOwIFtMQVRJTiBTTUFMTCBMRVRURVIgRVRIXQorY2hhciBceEYxCSgxMiA0NTY3OCkgICMgRjEg4qO7IMOxIFtMQVRJTiBTTUFMTCBMRVRURVIgTiBXSVRIIFRJTERFXQorY2hhciBceEYyCSgxIDMgNSAgOCkgICMgRjIg4qKVIMOyIFtMQVRJTiBTTUFMTCBMRVRURVIgTyBXSVRIIEdSQVZFXQorY2hhciBceEYzCSggIDM0IDYgICkgICMgRjMg4qCsIMOzIFtMQVRJTiBTTUFMTCBMRVRURVIgTyBXSVRIIEFDVVRFXQorY2hhciBceEY0CSgxICA0NTYgOCkgICMgRjQg4qK5IMO0IFtMQVRJTiBTTUFMTCBMRVRURVIgTyBXSVRIIENJUkNVTUZMRVhdCitjaGFyIFx4RjUJKCAgIDQgNjc4KSAgIyBGNSDio6ggw7UgW0xBVElOIFNNQUxMIExFVFRFUiBPIFdJVEggVElMREVdCitjaGFyIFx4RjYJKCAgMyA1ICA4KSAgIyBGNiDiopQgw7YgW0xBVElOIFNNQUxMIExFVFRFUiBPIFdJVEggRElBRVJFU0lTXQorY2hhciBceEY3CSggMiAgNSA3OCkgICMgRjcg4qOSIMO3IFtESVZJU0lPTiBTSUdOXQorY2hhciBceEY4CSggICAgNTYgOCkgICMgRjgg4qKwIMO4IFtMQVRJTiBTTUFMTCBMRVRURVIgTyBXSVRIIFNUUk9LRV0KK2NoYXIgXHhGOQkoIDIzNDU2ICApICAjIEY5IOKgviDDuSBbTEFUSU4gU01BTEwgTEVUVEVSIFUgV0lUSCBHUkFWRV0KK2NoYXIgXHhGQQkoIDIzNDU2IDgpICAjIEZBIOKiviDDuiBbTEFUSU4gU01BTEwgTEVUVEVSIFUgV0lUSCBBQ1VURV0KK2NoYXIgXHhGQgkoMSAgIDU2IDgpICAjIEZCIOKisSDDuyBbTEFUSU4gU01BTEwgTEVUVEVSIFUgV0lUSCBDSVJDVU1GTEVYXQorY2hhciBceEZDCSgxMiAgNTYgOCkgICMgRkMg4qKzIMO8IFtMQVRJTiBTTUFMTCBMRVRURVIgVSBXSVRIIERJQUVSRVNJU10KK2NoYXIgXHhGRAkoMSAzNDU2IDgpICAjIEZEIOKivSDDvSBbTEFUSU4gU01BTEwgTEVUVEVSIFkgV0lUSCBBQ1VURV0KK2NoYXIgXHhGRQkoIDIgNDUgIDgpICAjIEZFIOKimiDDviBbTEFUSU4gU01BTEwgTEVUVEVSIFRIT1JOXQorY2hhciBceEZGCSggMiAgNTYgOCkgICMgRkYg4qKyIMO/IFtMQVRJTiBTTUFMTCBMRVRURVIgWSBXSVRIIERJQUVSRVNJU10KKworaW5jbHVkZSBjb21tb24udHRpCmRpZmYgLS1naXQgYS9UYWJsZXMvVGV4dC9mci1jYmlmcy50dGIgYi9UYWJsZXMvVGV4dC9mci1jYmlmcy50dGIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDM2MjlkMQotLS0gL2Rldi9udWxsCisrKyBiL1RhYmxlcy9UZXh0L2ZyLWNiaWZzLnR0YgpAQCAtMCwwICsxLDIwNCBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorIyAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyMKKyMgQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorIworIyBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorIworIyBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisjIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyMgbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisjCisjIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMgQlJMVFRZIFRleHQgVGFibGUgLSBGcmVuY2ggKENvZGUgQnJhaWxsZSBJbmZvcm1hdGlxdWUgRnJhbsOnYWlzIFN0YW5kYXJkKQorCisjIHRoZSBzdGFuZGFyZCByZXByZXNlbnRhdGlvbnMgZm9yIHRoZSBsZXR0ZXJzIG9mIHRoZSBMYXRpbiBhbHBoYWJldAoraW5jbHVkZSBsdHItbGF0aW4udHRpCisKKyMgdGhlIHN0YW5kYXJkIHJlcHJlc2VudGF0aW9ucyBmb3IgdGhlIExhdGluIGNvbnRyb2wgY2hhcmFjdGVycworaW5jbHVkZSBjdGwtbGF0aW4udHRpCisKKyMgdGhlIG51bWJlcnMgMS05IGFyZSByZXByZXNlbnRlZCBieSB0aGUgbGV0dGVycyBhLWkgd2l0aCBkb3QgNiBhZGRlZAorIyB0aGUgbnVtYmVyIDAgaXMgcmVwcmVzZW50ZWQgYnkgZG90cyAzNDU2CitpbmNsdWRlIG51bS1mcmVuY2gudHRpCisKKyMgZ2VuZXJhdGVkIGJ5IHR0YnRlc3Q6IGNoYXJzZXQ9aXNvLTg4NTktMQorY2hhciBceDAwCSggIDM0NSA3OCkgICMgMDAg4qOcICAgW05VTExdCisjIExhdGluIGNvbnRyb2wgY2hhcmFjdGVycyAgIyAwMS0xQQorY2hhciBceDFCCSggMiA0IDY3OCkgICMgMUIg4qOqICAgW0VTQ0FQRV0KK2NoYXIgXHgxQwkoMTIgIDU2NzgpICAjIDFDIOKjsyAgIFtJTkZPUk1BVElPTiBTRVBBUkFUT1IgRk9VUl0KK2NoYXIgXHgxRAkoMTIgNDU2NzgpICAjIDFEIOKjuyAgIFtJTkZPUk1BVElPTiBTRVBBUkFUT1IgVEhSRUVdCitjaGFyIFx4MUUJKCAgIDQ1IDc4KSAgIyAxRSDio5ggICBbSU5GT1JNQVRJT04gU0VQQVJBVE9SIFRXT10KK2NoYXIgXHgxRgkoICAgNDU2NzgpICAjIDFGIOKjuCAgIFtJTkZPUk1BVElPTiBTRVBBUkFUT1IgT05FXQorY2hhciBceDIwCSggICAgICAgICkgICMgMjAg4qCAICAgW1NQQUNFXQorY2hhciBceDIxCSggMjMgNSAgICkgICMgMjEg4qCWICEgW0VYQ0xBTUFUSU9OIE1BUktdCitjaGFyIFx4MjIJKCAyMyA1NiAgKSAgIyAyMiDioLYgIiBbUVVPVEFUSU9OIE1BUktdCitjaGFyIFx4MjMJKCAgMzQgNiAgKSAgIyAyMyDioKwgIyBbTlVNQkVSIFNJR05dCitjaGFyIFx4MjQJKCAgIDQ1NiAgKSAgIyAyNCDioLggJCBbRE9MTEFSIFNJR05dCitjaGFyIFx4MjUJKDEyMzQgNiAgKSAgIyAyNSDioK8gJSBbUEVSQ0VOVCBTSUdOXQorY2hhciBceDI2CSgxMjM0NTYgICkgICMgMjYg4qC/ICYgW0FNUEVSU0FORF0KK2NoYXIgXHgyNwkoICAgICA2ICApICAjIDI3IOKgoCAnIFtBUE9TVFJPUEhFXQorY2hhciBceDI4CSggMjMgIDYgICkgICMgMjgg4qCmICggW0xFRlQgUEFSRU5USEVTSVNdCitjaGFyIFx4MjkJKCAgMyA1NiAgKSAgIyAyOSDioLQgKSBbUklHSFQgUEFSRU5USEVTSVNdCitjaGFyIFx4MkEJKCAgMyA1ICAgKSAgIyAyQSDioJQgKiBbQVNURVJJU0tdCitjaGFyIFx4MkIJKCAyMyA1IDc4KSAgIyAyQiDio5YgKyBbUExVUyBTSUdOXQorY2hhciBceDJDCSggMiAgICAgICkgICMgMkMg4qCCICwgW0NPTU1BXQorY2hhciBceDJECSggIDMgIDYgICkgICMgMkQg4qCkIC0gW0hZUEhFTi1NSU5VU10KK2NoYXIgXHgyRQkoICAzICAgICApICAjIDJFIOKghCAuIFtGVUxMIFNUT1BdCitjaGFyIFx4MkYJKCAyICA1NiAgKSAgIyAyRiDioLIgLyBbU09MSURVU10KKyMgSGluZHUtQXJhYmljIG51bWVyYWxzICAgICAjIDMwLTM5CitjaGFyIFx4M0EJKCAyICA1ICAgKSAgIyAzQSDioJIgOiBbQ09MT05dCitjaGFyIFx4M0IJKCAyMyAgICAgKSAgIyAzQiDioIYgOyBbU0VNSUNPTE9OXQorY2hhciBceDNDCSggICAgNTYgICkgICMgM0Mg4qCwIDwgW0xFU1MtVEhBTiBTSUdOXQorY2hhciBceDNECSggMjMgNTY3OCkgICMgM0Qg4qO2ID0gW0VRVUFMUyBTSUdOXQorY2hhciBceDNFCSggICA0NSAgICkgICMgM0Ug4qCYID4gW0dSRUFURVItVEhBTiBTSUdOXQorY2hhciBceDNGCSggMiAgIDYgICkgICMgM0Yg4qCiID8gW1FVRVNUSU9OIE1BUktdCitjaGFyIFx4NDAJKCAgMzQ1ICAgKSAgIyA0MCDioJwgQCBbQ09NTUVSQ0lBTCBBVF0KKyMgdXBwZXJjYXNlIExhdGluIGFscGhhYmV0ICAjIDQxLTVBCitjaGFyIFx4NUIJKDEyMyA1NiAgKSAgIyA1QiDioLcgWyBbTEVGVCBTUVVBUkUgQlJBQ0tFVF0KK2NoYXIgXHg1QwkoIDIzNCA2ICApICAjIDVDIOKgriBcIFtSRVZFUlNFIFNPTElEVVNdCitjaGFyIFx4NUQJKCAyMzQ1NiAgKSAgIyA1RCDioL4gXSBbUklHSFQgU1FVQVJFIEJSQUNLRVRdCitjaGFyIFx4NUUJKCAgMzQgICAgKSAgIyA1RSDioIwgXiBbQ0lSQ1VNRkxFWCBBQ0NFTlRdCitjaGFyIFx4NUYJKCAgIDQ1NjcgKSAgIyA1RiDiobggXyBbTE9XIExJTkVdCitjaGFyIFx4NjAJKCAgMzQ1IDcgKSAgIyA2MCDioZwgYCBbR1JBVkUgQUNDRU5UXQorIyBsb3dlcmNhc2UgTGF0aW4gYWxwaGFiZXQgICMgNjEtN0EKK2NoYXIgXHg3QgkoMTIzIDU2NyApICAjIDdCIOKhtyB7IFtMRUZUIENVUkxZIEJSQUNLRVRdCitjaGFyIFx4N0MJKCAyMzQgNjcgKSAgIyA3QyDioa4gfCBbVkVSVElDQUwgTElORV0KK2NoYXIgXHg3RAkoIDIzNDU2NyApICAjIDdEIOKhviB9IFtSSUdIVCBDVVJMWSBCUkFDS0VUXQorY2hhciBceDdFCSggIDM0ICA3ICkgICMgN0Ug4qGMIH4gW1RJTERFXQorY2hhciBceDdGCSggICA0NTYgOCkgICMgN0Yg4qK4ICAgW0RFTEVURV0KK2NoYXIgXHg4MAkoMTIzNCA2NyApICAjIDgwIOKhryAgIFs8Y29udHJvbC0wMDgwPl0KK2NoYXIgXHg4MQkoMTIgIDU2IDgpICAjIDgxIOKisyAgIFs8Y29udHJvbC0wMDgxPl0KK2NoYXIgXHg4MgkoMTIzNDU2IDgpICAjIDgyIOKivyAgIFtCUkVBSyBQRVJNSVRURUQgSEVSRV0KK2NoYXIgXHg4MwkoMSAgICA2NzgpICAjIDgzIOKjoSAgIFtOTyBCUkVBSyBIRVJFXQorY2hhciBceDg0CSggICA0ICAgOCkgICMgODQg4qKIICAgWzxjb250cm9sLTAwODQ+XQorY2hhciBceDg1CSgxMjMgNTYgOCkgICMgODUg4qK3ICAgW05FWFQgTElORSAoTkVMKV0KK2NoYXIgXHg4NgkoMSAgNCA2IDgpICAjIDg2IOKiqSAgIFtTVEFSVCBPRiBTRUxFQ1RFRCBBUkVBXQorY2hhciBceDg3CSgxMjM0IDYgOCkgICMgODcg4qKvICAgW0VORCBPRiBTRUxFQ1RFRCBBUkVBXQorY2hhciBceDg4CSgxMiAgIDY3OCkgICMgODgg4qOjICAgW0NIQVJBQ1RFUiBUQUJVTEFUSU9OIFNFVF0KK2NoYXIgXHg4OQkoMTIgNCA2IDgpICAjIDg5IOKiqyAgIFtDSEFSQUNURVIgVEFCVUxBVElPTiBXSVRIIEpVU1RJRklDQVRJT05dCitjaGFyIFx4OEEJKCAyMzQgNiA4KSAgIyA4QSDioq4gICBbTElORSBUQUJVTEFUSU9OIFNFVF0KK2NoYXIgXHg4QgkoMTIgNDU2IDgpICAjIDhCIOKiuyAgIFtQQVJUSUFMIExJTkUgRk9SV0FSRF0KK2NoYXIgXHg4QwkoMSAgNCA2NzgpICAjIDhDIOKjqSAgIFtQQVJUSUFMIExJTkUgQkFDS1dBUkRdCitjaGFyIFx4OEQJKDEgIDQgNiA4KSAgIyA4RCDioqkgICBbUkVWRVJTRSBMSU5FIEZFRURdCitjaGFyIFx4OEUJKDEyIDQgNjc4KSAgIyA4RSDio6sgICBbU0lOR0xFIFNISUZUIFRXT10KK2NoYXIgXHg4RgkoMSAgNCA2NzgpICAjIDhGIOKjqSAgIFtTSU5HTEUgU0hJRlQgVEhSRUVdCitjaGFyIFx4OTAJKCAyMzQ1Njc4KSAgIyA5MCDio74gICBbREVWSUNFIENPTlRST0wgU1RSSU5HXQorY2hhciBceDkxCSggMiAgIDY3ICkgICMgOTEg4qGiICAgW1BSSVZBVEUgVVNFIE9ORV0KK2NoYXIgXHg5MgkoMTIzNCA2NzgpICAjIDkyIOKjryAgIFtQUklWQVRFIFVTRSBUV09dCitjaGFyIFx4OTMJKDEgIDQ1Njc4KSAgIyA5MyDio7kgICBbU0VUIFRSQU5TTUlUIFNUQVRFXQorY2hhciBceDk0CSggMjMgNTYgOCkgICMgOTQg4qK2ICAgW0NBTkNFTCBDSEFSQUNURVJdCitjaGFyIFx4OTUJKDEgIDQgNiA4KSAgIyA5NSDioqkgICBbTUVTU0FHRSBXQUlUSU5HXQorY2hhciBceDk2CSgxICAgNTY3OCkgICMgOTYg4qOxICAgW1NUQVJUIE9GIEdVQVJERUQgQVJFQV0KK2NoYXIgXHg5NwkoIDIzNDU2IDgpICAjIDk3IOKiviAgIFtFTkQgT0YgR1VBUkRFRCBBUkVBXQorY2hhciBceDk4CSgxICA0NTY3OCkgICMgOTgg4qO5ICAgW1NUQVJUIE9GIFNUUklOR10KK2NoYXIgXHg5OQkoIDIzIDUgNzgpICAjIDk5IOKjliAgIFs8Y29udHJvbC0wMDk5Pl0KK2NoYXIgXHg5QQkoMTIgICA2NzgpICAjIDlBIOKjoyAgIFtTSU5HTEUgQ0hBUkFDVEVSIElOVFJPRFVDRVJdCitjaGFyIFx4OUIJKCAyICA1ICA4KSAgIyA5QiDiopIgICBbQ09OVFJPTCBTRVFVRU5DRSBJTlRST0RVQ0VSXQorY2hhciBceDlDCSggMjMgNTY3ICkgICMgOUMg4qG2ICAgW1NUUklORyBURVJNSU5BVE9SXQorY2hhciBceDlECSggMiAgICA3OCkgICMgOUQg4qOCICAgW09QRVJBVElORyBTWVNURU0gQ09NTUFORF0KK2NoYXIgXHg5RQkoICAgNDUgIDgpICAjIDlFIOKimCAgIFtQUklWQUNZIE1FU1NBR0VdCitjaGFyIFx4OUYJKCAgIDQ1NiA4KSAgIyA5RiDiorggICBbQVBQTElDQVRJT04gUFJPR1JBTSBDT01NQU5EXQorY2hhciBceEExCSggIDMgIDY3ICkgICMgQTEg4qGkIMKhIFtJTlZFUlRFRCBFWENMQU1BVElPTiBNQVJLXQorY2hhciBceEEyCSggMiA0IDYgOCkgICMgQTIg4qKqIMKiIFtDRU5UIFNJR05dCitjaGFyIFx4QTMJKDEyICA1NiA4KSAgIyBBMyDiorMgwqMgW1BPVU5EIFNJR05dCitjaGFyIFx4QTQJKCAyICAgIDcgKSAgIyBBNCDioYIgwqQgW0NVUlJFTkNZIFNJR05dCitjaGFyIFx4QTUJKDEyIDQ1NiA4KSAgIyBBNSDiorsgwqUgW1lFTiBTSUdOXQorY2hhciBceEE2CSgxMiAgIDY3ICkgICMgQTYg4qGjIMKmIFtCUk9LRU4gQkFSXQorY2hhciBceEE3CSgxMjM0NTY3OCkgICMgQTcg4qO/IMKnIFtTRUNUSU9OIFNJR05dCitjaGFyIFx4QTgJKDEgIDQ1NjcgKSAgIyBBOCDiobkgwqggW0RJQUVSRVNJU10KK2NoYXIgXHhBOQkoIDIzNDU2NyApICAjIEE5IOKhviDCqSBbQ09QWVJJR0hUIFNJR05dCitjaGFyIFx4QUEJKDEyMzQgNjcgKSAgIyBBQSDioa8gwqogW0ZFTUlOSU5FIE9SRElOQUwgSU5ESUNBVE9SXQorY2hhciBceEFCCSggICA0IDY3ICkgICMgQUIg4qGoIMKrIFtMRUZULVBPSU5USU5HIERPVUJMRSBBTkdMRSBRVU9UQVRJT04gTUFSS10KK2NoYXIgXHhBQwkoMSAgICA2NyApICAjIEFDIOKhoSDCrCBbTk9UIFNJR05dCitjaGFyIFx4QUQJKCAgMyAgNiA4KSAgIyBBRCDioqQgwq0gW1NPRlQgSFlQSEVOXQorY2hhciBceEFFCSgxMjM0NTY3ICkgICMgQUUg4qG/IMKuIFtSRUdJU1RFUkVEIFNJR05dCitjaGFyIFx4QUYJKCAgICA1NjcgKSAgIyBBRiDiobAgwq8gW01BQ1JPTl0KK2NoYXIgXHhCMAkoIDIzICA2IDgpICAjIEIwIOKipiDCsCBbREVHUkVFIFNJR05dCitjaGFyIFx4QjEJKCAyICAgICA4KSAgIyBCMSDiooIgwrEgW1BMVVMtTUlOVVMgU0lHTl0KK2NoYXIgXHhCMgkoMTIzNDU2IDgpICAjIEIyIOKivyDCsiBbU1VQRVJTQ1JJUFQgVFdPXQorY2hhciBceEIzCSggMiAgNSA3ICkgICMgQjMg4qGSIMKzIFtTVVBFUlNDUklQVCBUSFJFRV0KK2NoYXIgXHhCNAkoIDIgIDU2NyApICAjIEI0IOKhsiDCtCBbQUNVVEUgQUNDRU5UXQorY2hhciBceEI1CSgxMjM0IDYgOCkgICMgQjUg4qKvIMK1IFtNSUNSTyBTSUdOXQorY2hhciBceEI2CSgxMjM0NTY3OCkgICMgQjYg4qO/IMK2IFtQSUxDUk9XIFNJR05dCitjaGFyIFx4QjcJKDEgICA1NiA4KSAgIyBCNyDiorEgwrcgW01JRERMRSBET1RdCitjaGFyIFx4QjgJKCAyMyAgNjcgKSAgIyBCOCDioaYgwrggW0NFRElMTEFdCitjaGFyIFx4QjkJKCAgMyA1IDcgKSAgIyBCOSDioZQgwrkgW1NVUEVSU0NSSVBUIE9ORV0KK2NoYXIgXHhCQQkoICAzICAgNyApICAjIEJBIOKhhCDCuiBbTUFTQ1VMSU5FIE9SRElOQUwgSU5ESUNBVE9SXQorY2hhciBceEJCCSggIDM0ICA3ICkgICMgQkIg4qGMIMK7IFtSSUdIVC1QT0lOVElORyBET1VCTEUgQU5HTEUgUVVPVEFUSU9OIE1BUktdCitjaGFyIFx4QkMJKCAgICAgNjcgKSAgIyBCQyDioaAgwrwgW1ZVTEdBUiBGUkFDVElPTiBPTkUgUVVBUlRFUl0KK2NoYXIgXHhCRAkoICAzNCA2NyApICAjIEJEIOKhrCDCvSBbVlVMR0FSIEZSQUNUSU9OIE9ORSBIQUxGXQorY2hhciBceEJFCSggIDM0NSA3ICkgICMgQkUg4qGcIMK+IFtWVUxHQVIgRlJBQ1RJT04gVEhSRUUgUVVBUlRFUlNdCitjaGFyIFx4QkYJKDEyMyA1NjcgKSAgIyBCRiDiobcgwr8gW0lOVkVSVEVEIFFVRVNUSU9OIE1BUktdCitjaGFyIFx4QzAJKCAgICAgIDc4KSAgIyBDMCDio4Agw4AgW0xBVElOIENBUElUQUwgTEVUVEVSIEEgV0lUSCBHUkFWRV0KK2NoYXIgXHhDMQkoIDIzNCA2NzgpICAjIEMxIOKjriDDgSBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgQSBXSVRIIEFDVVRFXQorY2hhciBceEMyCSggICAgNSA3OCkgICMgQzIg4qOQIMOCIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBBIFdJVEggQ0lSQ1VNRkxFWF0KK2NoYXIgXHhDMwkoICAzNDU2NzgpICAjIEMzIOKjvCDDgyBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgQSBXSVRIIFRJTERFXQorY2hhciBceEM0CSgxIDM0NSAgOCkgICMgQzQg4qKdIMOEIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBBIFdJVEggRElBRVJFU0lTXQorY2hhciBceEM1CSgxIDMgNSAgOCkgICMgQzUg4qKVIMOFIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBBIFdJVEggUklORyBBQk9WRV0KK2NoYXIgXHhDNgkoMTIzIDUgIDgpICAjIEM2IOKilyDDhiBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgQUVdCitjaGFyIFx4QzcJKCAgIDQgICA4KSAgIyBDNyDiooggw4cgW0xBVElOIENBUElUQUwgTEVUVEVSIEMgV0lUSCBDRURJTExBXQorY2hhciBceEM4CSgxMjMgNTY3OCkgICMgQzgg4qO3IMOIIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBFIFdJVEggR1JBVkVdCitjaGFyIFx4QzkJKDEyMzQgICA4KSAgIyBDOSDioo8gw4kgW0xBVElOIENBUElUQUwgTEVUVEVSIEUgV0lUSCBBQ1VURV0KK2NoYXIgXHhDQQkoMSAgICA2NzgpICAjIENBIOKjoSDDiiBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgRSBXSVRIIENJUkNVTUZMRVhdCitjaGFyIFx4Q0IJKCAgMzQgNjc4KSAgIyBDQiDio6wgw4sgW0xBVElOIENBUElUQUwgTEVUVEVSIEUgV0lUSCBESUFFUkVTSVNdCitjaGFyIFx4Q0MJKCAgICAgNjc4KSAgIyBDQyDio6Agw4wgW0xBVElOIENBUElUQUwgTEVUVEVSIEkgV0lUSCBHUkFWRV0KK2NoYXIgXHhDRAkoICAzICA2NzgpICAjIENEIOKjpCDDjSBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgSSBXSVRIIEFDVVRFXQorY2hhciBceENFCSggICA0IDY3OCkgICMgQ0Ug4qOoIMOOIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBJIFdJVEggQ0lSQ1VNRkxFWF0KK2NoYXIgXHhDRgkoICAzNCAgNzgpICAjIENGIOKjjCDDjyBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgSSBXSVRIIERJQUVSRVNJU10KK2NoYXIgXHhEMAkoICAzIDU2NzgpICAjIEQwIOKjtCDDkCBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgRVRIXQorY2hhciBceEQxCSgxICA0IDY3ICkgICMgRDEg4qGpIMORIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBOIFdJVEggVElMREVdCitjaGFyIFx4RDIJKCAyMyAgIDc4KSAgIyBEMiDio4Ygw5IgW0xBVElOIENBUElUQUwgTEVUVEVSIE8gV0lUSCBHUkFWRV0KK2NoYXIgXHhEMwkoIDIgIDUgNzgpICAjIEQzIOKjkiDDkyBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgTyBXSVRIIEFDVVRFXQorY2hhciBceEQ0CSggMiAgNTY3OCkgICMgRDQg4qOyIMOUIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBPIFdJVEggQ0lSQ1VNRkxFWF0KK2NoYXIgXHhENQkoIDIgICA2NzgpICAjIEQ1IOKjoiDDlSBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgTyBXSVRIIFRJTERFXQorY2hhciBceEQ2CSgxIDM0NTYgOCkgICMgRDYg4qK9IMOWIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBPIFdJVEggRElBRVJFU0lTXQorY2hhciBceEQ3CSggMjMgNTY3OCkgICMgRDcg4qO2IMOXIFtNVUxUSVBMSUNBVElPTiBTSUdOXQorY2hhciBceEQ4CSggMjMgIDY3OCkgICMgRDgg4qOmIMOYIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBPIFdJVEggU1RST0tFXQorY2hhciBceEQ5CSggIDMgNSA3OCkgICMgRDkg4qOUIMOZIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBVIFdJVEggR1JBVkVdCitjaGFyIFx4REEJKDEgICA1Njc4KSAgIyBEQSDio7Egw5ogW0xBVElOIENBUElUQUwgTEVUVEVSIFUgV0lUSCBBQ1VURV0KK2NoYXIgXHhEQgkoICAgIDU2NzgpICAjIERCIOKjsCDDmyBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgVSBXSVRIIENJUkNVTUZMRVhdCitjaGFyIFx4REMJKDEgMyA1NiA4KSAgIyBEQyDiorUgw5wgW0xBVElOIENBUElUQUwgTEVUVEVSIFUgV0lUSCBESUFFUkVTSVNdCitjaGFyIFx4REQJKDEyMzQ1Njc4KSAgIyBERCDio78gw50gW0xBVElOIENBUElUQUwgTEVUVEVSIFkgV0lUSCBBQ1VURV0KK2NoYXIgXHhERQkoICAzNDUgNzgpICAjIERFIOKjnCDDniBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgVEhPUk5dCitjaGFyIFx4REYJKCAyMzQgNiA4KSAgIyBERiDioq4gw58gW0xBVElOIFNNQUxMIExFVFRFUiBTSEFSUCBTXQorY2hhciBceEUwCSgxMjMgNTYgICkgICMgRTAg4qC3IMOgIFtMQVRJTiBTTUFMTCBMRVRURVIgQSBXSVRIIEdSQVZFXQorY2hhciBceEUxCSggICAgICA3ICkgICMgRTEg4qGAIMOhIFtMQVRJTiBTTUFMTCBMRVRURVIgQSBXSVRIIEFDVVRFXQorY2hhciBceEUyCSgxICAgIDYgICkgICMgRTIg4qChIMOiIFtMQVRJTiBTTUFMTCBMRVRURVIgQSBXSVRIIENJUkNVTUZMRVhdCitjaGFyIFx4RTMJKCAgMzQ1NiA4KSAgIyBFMyDiorwgw6MgW0xBVElOIFNNQUxMIExFVFRFUiBBIFdJVEggVElMREVdCitjaGFyIFx4RTQJKDEgIDQ1ICA4KSAgIyBFNCDiopkgw6QgW0xBVElOIFNNQUxMIExFVFRFUiBBIFdJVEggRElBRVJFU0lTXQorY2hhciBceEU1CSgxMiA0ICAgOCkgICMgRTUg4qKLIMOlIFtMQVRJTiBTTUFMTCBMRVRURVIgQSBXSVRIIFJJTkcgQUJPVkVdCitjaGFyIFx4RTYJKDEyMzQ1ICA4KSAgIyBFNiDiop8gw6YgW0xBVElOIFNNQUxMIExFVFRFUiBBRV0KK2NoYXIgXHhFNwkoMTIzNCA2ICApICAjIEU3IOKgryDDpyBbTEFUSU4gU01BTEwgTEVUVEVSIEMgV0lUSCBDRURJTExBXQorY2hhciBceEU4CSggMjM0IDYgICkgICMgRTgg4qCuIMOoIFtMQVRJTiBTTUFMTCBMRVRURVIgRSBXSVRIIEdSQVZFXQorY2hhciBceEU5CSgxMjM0NTYgICkgICMgRTkg4qC/IMOpIFtMQVRJTiBTTUFMTCBMRVRURVIgRSBXSVRIIEFDVVRFXQorY2hhciBceEVBCSgxMiAgIDYgICkgICMgRUEg4qCjIMOqIFtMQVRJTiBTTUFMTCBMRVRURVIgRSBXSVRIIENJUkNVTUZMRVhdCitjaGFyIFx4RUIJKDEyIDQgNiAgKSAgIyBFQiDioKsgw6sgW0xBVElOIFNNQUxMIExFVFRFUiBFIFdJVEggRElBRVJFU0lTXQorY2hhciBceEVDCSgxIDM0ICAgOCkgICMgRUMg4qKNIMOsIFtMQVRJTiBTTUFMTCBMRVRURVIgSSBXSVRIIEdSQVZFXQorY2hhciBceEVECSggMjM0IDY3ICkgICMgRUQg4qGuIMOtIFtMQVRJTiBTTUFMTCBMRVRURVIgSSBXSVRIIEFDVVRFXQorY2hhciBceEVFCSgxICA0IDYgICkgICMgRUUg4qCpIMOuIFtMQVRJTiBTTUFMTCBMRVRURVIgSSBXSVRIIENJUkNVTUZMRVhdCitjaGFyIFx4RUYJKDEyIDQ1NiAgKSAgIyBFRiDioLsgw68gW0xBVElOIFNNQUxMIExFVFRFUiBJIFdJVEggRElBRVJFU0lTXQorY2hhciBceEYwCSggIDMgNTYgOCkgICMgRjAg4qK0IMOwIFtMQVRJTiBTTUFMTCBMRVRURVIgRVRIXQorY2hhciBceEYxCSgxMiA0IDY3ICkgICMgRjEg4qGrIMOxIFtMQVRJTiBTTUFMTCBMRVRURVIgTiBXSVRIIFRJTERFXQorY2hhciBceEYyCSgxIDMgIDYgOCkgICMgRjIg4qKlIMOyIFtMQVRJTiBTTUFMTCBMRVRURVIgTyBXSVRIIEdSQVZFXQorY2hhciBceEYzCSggICAgNSA3ICkgICMgRjMg4qGQIMOzIFtMQVRJTiBTTUFMTCBMRVRURVIgTyBXSVRIIEFDVVRFXQorY2hhciBceEY0CSgxICA0NTYgICkgICMgRjQg4qC5IMO0IFtMQVRJTiBTTUFMTCBMRVRURVIgTyBXSVRIIENJUkNVTUZMRVhdCitjaGFyIFx4RjUJKCAyICAgNiA4KSAgIyBGNSDioqIgw7UgW0xBVElOIFNNQUxMIExFVFRFUiBPIFdJVEggVElMREVdCitjaGFyIFx4RjYJKCAyMzQ1ICA4KSAgIyBGNiDiop4gw7YgW0xBVElOIFNNQUxMIExFVFRFUiBPIFdJVEggRElBRVJFU0lTXQorY2hhciBceEY3CSggMjMgNSAgOCkgICMgRjcg4qKWIMO3IFtESVZJU0lPTiBTSUdOXQorY2hhciBceEY4CSgxIDMgNSA3ICkgICMgRjgg4qGVIMO4IFtMQVRJTiBTTUFMTCBMRVRURVIgTyBXSVRIIFNUUk9LRV0KK2NoYXIgXHhGOQkoIDIzNDU2ICApICAjIEY5IOKgviDDuSBbTEFUSU4gU01BTEwgTEVUVEVSIFUgV0lUSCBHUkFWRV0KK2NoYXIgXHhGQQkoICAzNDU2NyApICAjIEZBIOKhvCDDuiBbTEFUSU4gU01BTEwgTEVUVEVSIFUgV0lUSCBBQ1VURV0KK2NoYXIgXHhGQgkoMSAgIDU2ICApICAjIEZCIOKgsSDDuyBbTEFUSU4gU01BTEwgTEVUVEVSIFUgV0lUSCBDSVJDVU1GTEVYXQorY2hhciBceEZDCSgxMiAgNTYgICkgICMgRkMg4qCzIMO8IFtMQVRJTiBTTUFMTCBMRVRURVIgVSBXSVRIIERJQUVSRVNJU10KK2NoYXIgXHhGRAkoIDIzICAgNyApICAjIEZEIOKhhiDDvSBbTEFUSU4gU01BTEwgTEVUVEVSIFkgV0lUSCBBQ1VURV0KK2NoYXIgXHhGRQkoICAzNDUgIDgpICAjIEZFIOKinCDDviBbTEFUSU4gU01BTEwgTEVUVEVSIFRIT1JOXQorY2hhciBceEZGCSgxICAgNTY3ICkgICMgRkYg4qGxIMO/IFtMQVRJTiBTTUFMTCBMRVRURVIgWSBXSVRIIERJQUVSRVNJU10KKworaW5jbHVkZSBjb21tb24udHRpCmRpZmYgLS1naXQgYS9UYWJsZXMvVGV4dC9mci12cy50dGIgYi9UYWJsZXMvVGV4dC9mci12cy50dGIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWEzODg2YgotLS0gL2Rldi9udWxsCisrKyBiL1RhYmxlcy9UZXh0L2ZyLXZzLnR0YgpAQCAtMCwwICsxLDI0MSBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorIyAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyMKKyMgQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorIworIyBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorIworIyBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisjIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyMgbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisjCisjIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMgQlJMVFRZIFRleHQgVGFibGUgLSBGcmVuY2ggKFZpc2lvQnJhaWxsZSkKKworIyBUaGlzIHRhYmxlIGlzIHRoZSBkZWZhdWx0IG9uZSBmb3IgVmlzaW9CcmFpbGxlIGJyYWlsbGUgdGVybWluYWxzLgorIyBJdCB3YXMgZmlyc3QgdXNlZCBieSBTYWdlbSBwcmludGVycywgYmVmb3JlIGJlaW5nIGFkb3B0ZWQgYnkgSGFuZGlhbG9nIGFzCisjIHRoZSBkZWZhdWx0IGJyYWlsbGUgdGFibGUuCisjIEFsdGhvdWdoIGl0IGlzIGEgYml0IG9sZCwgVmlzaW9CcmFpbGxlIHVzZXJzIG1heSBmaW5kIHRoaXMgdGFibGUgbW9yZQorIyBjb21mb3J0YWJsZSB0aGFuIHN0YW5kYXJkIEZyZW5jaCBicmFpbGxlIHRhYmxlcy4KKworIyB0aGUgc3RhbmRhcmQgcmVwcmVzZW50YXRpb25zIGZvciB0aGUgbGV0dGVycyBvZiB0aGUgTGF0aW4gYWxwaGFiZXQKK2luY2x1ZGUgbHRyLWxhdGluLnR0aQorCisjIHRoZSBudW1iZXJzIDEtOSBhcmUgcmVwcmVzZW50ZWQgYnkgdGhlIGxldHRlcnMgYS1pIHdpdGggZG90IDYgYWRkZWQKKyMgdGhlIG51bWJlciAwIGlzIHJlcHJlc2VudGVkIGJ5IGRvdHMgMzQ1NgoraW5jbHVkZSBudW0tZnJlbmNoLnR0aQorCisjIGdlbmVyYXRlZCBieSB0dGJ0ZXN0OiBjaGFyc2V0PWlzby04ODU5LTEKK2NoYXIgXHgwMAkoICAzNDUgNzgpICAjIDAwIOKjnCAgIFtOVUxMXQorY2hhciBceDAxCSgxICAgICAgOCkgICMgMDEg4qKBICAgW1NUQVJUIE9GIEhFQURJTkddCitjaGFyIFx4MDIJKDEyICAgICA4KSAgIyAwMiDiooMgICBbU1RBUlQgT0YgVEVYVF0KK2NoYXIgXHgwMwkoMSAgNCAgIDgpICAjIDAzIOKiiSAgIFtFTkQgT0YgVEVYVF0KK2NoYXIgXHgwNAkoMSAgNDUgIDgpICAjIDA0IOKimSAgIFtFTkQgT0YgVFJBTlNNSVNTSU9OXQorY2hhciBceDA1CSgxICAgNSAgOCkgICMgMDUg4qKRICAgW0VOUVVJUlldCitjaGFyIFx4MDYJKDEyIDQgICA4KSAgIyAwNiDioosgICBbQUNLTk9XTEVER0VdCitjaGFyIFx4MDcJKDEyIDQ1ICA4KSAgIyAwNyDiopsgICBbQkVMTF0KK2NoYXIgXHgwOAkoMTIgIDUgIDgpICAjIDA4IOKikyAgIFtCQUNLU1BBQ0VdCitjaGFyIFx4MDkJKCAyIDQgICA4KSAgIyAwOSDiooogICBbQ0hBUkFDVEVSIFRBQlVMQVRJT05dCitjaGFyIFx4MEEJKCAyIDQ1ICA4KSAgIyAwQSDiopogICBbTElORSBGRUVEIChMRildCitjaGFyIFx4MEIJKDEgMyAgICA4KSAgIyAwQiDiooUgICBbTElORSBUQUJVTEFUSU9OXQorY2hhciBceDBDCSgxMjMgICAgOCkgICMgMEMg4qKHICAgW0ZPUk0gRkVFRCAoRkYpXQorY2hhciBceDBECSgxIDM0ICAgOCkgICMgMEQg4qKNICAgW0NBUlJJQUdFIFJFVFVSTiAoQ1IpXQorY2hhciBceDBFCSgxIDM0NSAgOCkgICMgMEUg4qKdICAgW1NISUZUIE9VVF0KK2NoYXIgXHgwRgkoMSAzIDUgIDgpICAjIDBGIOKilSAgIFtTSElGVCBJTl0KK2NoYXIgXHgxMAkoMTIzNCAgIDgpICAjIDEwIOKijyAgIFtEQVRBIExJTksgRVNDQVBFXQorY2hhciBceDExCSgxMjM0NSAgOCkgICMgMTEg4qKfICAgW0RFVklDRSBDT05UUk9MIE9ORV0KK2NoYXIgXHgxMgkoMTIzIDUgIDgpICAjIDEyIOKilyAgIFtERVZJQ0UgQ09OVFJPTCBUV09dCitjaGFyIFx4MTMJKCAyMzQgICA4KSAgIyAxMyDioo4gICBbREVWSUNFIENPTlRST0wgVEhSRUVdCitjaGFyIFx4MTQJKCAyMzQ1ICA4KSAgIyAxNCDiop4gICBbREVWSUNFIENPTlRST0wgRk9VUl0KK2NoYXIgXHgxNQkoMSAzICA2IDgpICAjIDE1IOKipSAgIFtORUdBVElWRSBBQ0tOT1dMRURHRV0KK2NoYXIgXHgxNgkoMTIzICA2IDgpICAjIDE2IOKipyAgIFtTWU5DSFJPTk9VUyBJRExFXQorY2hhciBceDE3CSggMiA0NTYgOCkgICMgMTcg4qK6ICAgW0VORCBPRiBUUkFOU01JU1NJT04gQkxPQ0tdCitjaGFyIFx4MTgJKDEgMzQgNiA4KSAgIyAxOCDioq0gICBbQ0FOQ0VMXQorY2hhciBceDE5CSgxIDM0NTYgOCkgICMgMTkg4qK9ICAgW0VORCBPRiBNRURJVU1dCitjaGFyIFx4MUEJKDEgMyA1NiA4KSAgIyAxQSDiorUgICBbU1VCU1RJVFVURV0KK2NoYXIgXHgxQgkoICAzNDU2NzgpICAjIDFCIOKjvCAgIFtFU0NBUEVdCitjaGFyIFx4MUMJKDEgICAgNiA4KSAgIyAxQyDioqEgICBbSU5GT1JNQVRJT04gU0VQQVJBVE9SIEZPVVJdCitjaGFyIFx4MUQJKDEyICAgNiA4KSAgIyAxRCDioqMgICBbSU5GT1JNQVRJT04gU0VQQVJBVE9SIFRIUkVFXQorY2hhciBceDFFCSgxICA0IDYgOCkgICMgMUUg4qKpICAgW0lORk9STUFUSU9OIFNFUEFSQVRPUiBUV09dCitjaGFyIFx4MUYJKDEgIDQ1NiA4KSAgIyAxRiDiorkgICBbSU5GT1JNQVRJT04gU0VQQVJBVE9SIE9ORV0KK2NoYXIgXHgyMAkoICAgICAgICApICAjIDIwIOKggCAgIFtTUEFDRV0KK2NoYXIgXHgyMQkoIDIzIDUgICApICAjIDIxIOKgliAhIFtFWENMQU1BVElPTiBNQVJLXQorY2hhciBceDIyCSggICA0ICAgICkgICMgMjIg4qCIICIgW1FVT1RBVElPTiBNQVJLXQorY2hhciBceDIzCSggICA0IDYgICkgICMgMjMg4qCoICMgW05VTUJFUiBTSUdOXQorY2hhciBceDI0CSggICA0NTYgICkgICMgMjQg4qC4ICQgW0RPTExBUiBTSUdOXQorY2hhciBceDI1CSggICA0NSAgICkgICMgMjUg4qCYICUgW1BFUkNFTlQgU0lHTl0KK2NoYXIgXHgyNgkoICAzNDUgICApICAjIDI2IOKgnCAmIFtBTVBFUlNBTkRdCitjaGFyIFx4MjcJKCAgMyAgICAgKSAgIyAyNyDioIQgJyBbQVBPU1RST1BIRV0KK2NoYXIgXHgyOAkoICAgICA2ICApICAjIDI4IOKgoCAoIFtMRUZUIFBBUkVOVEhFU0lTXQorY2hhciBceDI5CSggIDMgNSAgICkgICMgMjkg4qCUICkgW1JJR0hUIFBBUkVOVEhFU0lTXQorY2hhciBceDJBCSggIDM0ICAgICkgICMgMkEg4qCMICogW0FTVEVSSVNLXQorY2hhciBceDJCCSggICAgNTYgICkgICMgMkIg4qCwICsgW1BMVVMgU0lHTl0KK2NoYXIgXHgyQwkoIDIgICAgICApICAjIDJDIOKggiAsIFtDT01NQV0KK2NoYXIgXHgyRAkoICAzICA2ICApICAjIDJEIOKgpCAtIFtIWVBIRU4tTUlOVVNdCitjaGFyIFx4MkUJKCAyICA1NiAgKSAgIyAyRSDioLIgLiBbRlVMTCBTVE9QXQorY2hhciBceDJGCSgxMjM0NTYgICkgICMgMkYg4qC/IC8gW1NPTElEVVNdCisjIEhpbmR1LUFyYWJpYyBudW1lcmFscyAgICAgIyAzMC0zOQorY2hhciBceDNBCSggMiAgNSAgICkgICMgM0Eg4qCSIDogW0NPTE9OXQorY2hhciBceDNCCSggMjMgICAgICkgICMgM0Ig4qCGIDsgW1NFTUlDT0xPTl0KK2NoYXIgXHgzQwkoIDIzICA2ICApICAjIDNDIOKgpiA8IFtMRVNTLVRIQU4gU0lHTl0KK2NoYXIgXHgzRAkoIDIzIDU2ICApICAjIDNEIOKgtiA9IFtFUVVBTFMgU0lHTl0KK2NoYXIgXHgzRQkoICAzIDU2ICApICAjIDNFIOKgtCA+IFtHUkVBVEVSLVRIQU4gU0lHTl0KK2NoYXIgXHgzRgkoIDIgICA2ICApICAjIDNGIOKgoiA/IFtRVUVTVElPTiBNQVJLXQorY2hhciBceDQwCSgxMjM0IDYgICkgICMgNDAg4qCvIEAgW0NPTU1FUkNJQUwgQVRdCisjIHVwcGVyY2FzZSBMYXRpbiBhbHBoYWJldCAgIyA0MS01QQorY2hhciBceDVCCSgxMjMgNTYgICkgICMgNUIg4qC3IFsgW0xFRlQgU1FVQVJFIEJSQUNLRVRdCitjaGFyIFx4NUMJKCAyMzQgNiAgKSAgIyA1QyDioK4gXCBbUkVWRVJTRSBTT0xJRFVTXQorY2hhciBceDVECSggMjM0NTYgICkgICMgNUQg4qC+IF0gW1JJR0hUIFNRVUFSRSBCUkFDS0VUXQorY2hhciBceDVFCSggIDM0IDYgICkgICMgNUUg4qCsIF4gW0NJUkNVTUZMRVggQUNDRU5UXQorY2hhciBceDVGCSggIDMgICAgOCkgICMgNUYg4qKEIF8gW0xPVyBMSU5FXQorY2hhciBceDYwCSggIDMgICA3ICkgICMgNjAg4qGEIGAgW0dSQVZFIEFDQ0VOVF0KKyMgbG93ZXJjYXNlIExhdGluIGFscGhhYmV0ICAjIDYxLTdBCitjaGFyIFx4N0IJKCAgICAgNjcgKSAgIyA3QiDioaAgeyBbTEVGVCBDVVJMWSBCUkFDS0VUXQorY2hhciBceDdDCSggMjMgNSAgOCkgICMgN0Mg4qKWIHwgW1ZFUlRJQ0FMIExJTkVdCitjaGFyIFx4N0QJKCAgMyA1ICA4KSAgIyA3RCDiopQgfSBbUklHSFQgQ1VSTFkgQlJBQ0tFVF0KK2NoYXIgXHg3RQkoICAgIDUgNzgpICAjIDdFIOKjkCB+IFtUSUxERV0KK2NoYXIgXHg3RgkoICAgICAgICApICAjIDdGIOKggCAgIFtERUxFVEVdCitjaGFyIFx4ODAJKDEyMzQgNjc4KSAgIyA4MCDio68gICBbPGNvbnRyb2wtMDA4MD5dCitjaGFyIFx4ODEJKDEyICA1NiA4KSAgIyA4MSDiorMgICBbPGNvbnRyb2wtMDA4MT5dCitjaGFyIFx4ODIJKCAgICAgICAgKSAgIyA4MiDioIAgICBbQlJFQUsgUEVSTUlUVEVEIEhFUkVdCitjaGFyIFx4ODMJKDEgICAgNiA4KSAgIyA4MyDioqEgICBbTk8gQlJFQUsgSEVSRV0KK2NoYXIgXHg4NAkoICAzNDUgIDgpICAjIDg0IOKinCAgIFs8Y29udHJvbC0wMDg0Pl0KK2NoYXIgXHg4NQkoMTIzIDU2IDgpICAjIDg1IOKityAgIFtORVhUIExJTkUgKE5FTCldCitjaGFyIFx4ODYJKCAgICAgICAgKSAgIyA4NiDioIAgICBbU1RBUlQgT0YgU0VMRUNURUQgQVJFQV0KK2NoYXIgXHg4NwkoMTIzNCA2IDgpICAjIDg3IOKiryAgIFtFTkQgT0YgU0VMRUNURUQgQVJFQV0KK2NoYXIgXHg4OAkoMTIgICA2IDgpICAjIDg4IOKioyAgIFtDSEFSQUNURVIgVEFCVUxBVElPTiBTRVRdCitjaGFyIFx4ODkJKDEyIDQgNiA4KSAgIyA4OSDioqsgICBbQ0hBUkFDVEVSIFRBQlVMQVRJT04gV0lUSCBKVVNUSUZJQ0FUSU9OXQorY2hhciBceDhBCSggMjM0IDYgOCkgICMgOEEg4qKuICAgW0xJTkUgVEFCVUxBVElPTiBTRVRdCitjaGFyIFx4OEIJKDEyIDQ1NiA4KSAgIyA4QiDiorsgICBbUEFSVElBTCBMSU5FIEZPUldBUkRdCitjaGFyIFx4OEMJKDEgIDQgNiA4KSAgIyA4QyDioqkgICBbUEFSVElBTCBMSU5FIEJBQ0tXQVJEXQorY2hhciBceDhECSggICAgICAgICkgICMgOEQg4qCAICAgW1JFVkVSU0UgTElORSBGRUVEXQorY2hhciBceDhFCSggIDM0NSA3OCkgICMgOEUg4qOcICAgW1NJTkdMRSBTSElGVCBUV09dCitjaGFyIFx4OEYJKCAgICAgICAgKSAgIyA4RiDioIAgICBbU0lOR0xFIFNISUZUIFRIUkVFXQorY2hhciBceDkwCSgxMjM0NTY3OCkgICMgOTAg4qO/ICAgW0RFVklDRSBDT05UUk9MIFNUUklOR10KK2NoYXIgXHg5MQkoICAgICAgICApICAjIDkxIOKggCAgIFtQUklWQVRFIFVTRSBPTkVdCitjaGFyIFx4OTIJKCAgICAgICAgKSAgIyA5MiDioIAgICBbUFJJVkFURSBVU0UgVFdPXQorY2hhciBceDkzCSgxICA0NTYgOCkgICMgOTMg4qK5ICAgW1NFVCBUUkFOU01JVCBTVEFURV0KK2NoYXIgXHg5NAkoIDIgNCA2IDgpICAjIDk0IOKiqiAgIFtDQU5DRUwgQ0hBUkFDVEVSXQorY2hhciBceDk1CSggICAgICAgICkgICMgOTUg4qCAICAgW01FU1NBR0UgV0FJVElOR10KK2NoYXIgXHg5NgkoMSAgIDU2IDgpICAjIDk2IOKisSAgIFtTVEFSVCBPRiBHVUFSREVEIEFSRUFdCitjaGFyIFx4OTcJKCAyMzQ1NiA4KSAgIyA5NyDior4gICBbRU5EIE9GIEdVQVJERUQgQVJFQV0KK2NoYXIgXHg5OAkoMTIgNDU2IDgpICAjIDk4IOKiuyAgIFtTVEFSVCBPRiBTVFJJTkddCitjaGFyIFx4OTkJKCAyIDQgNjc4KSAgIyA5OSDio6ogICBbPGNvbnRyb2wtMDA5OT5dCitjaGFyIFx4OUEJKDEyICA1Njc4KSAgIyA5QSDio7MgICBbU0lOR0xFIENIQVJBQ1RFUiBJTlRST0RVQ0VSXQorY2hhciBceDlCCSggICAgICAgICkgICMgOUIg4qCAICAgW0NPTlRST0wgU0VRVUVOQ0UgSU5UUk9EVUNFUl0KK2NoYXIgXHg5QwkoICAgICAgICApICAjIDlDIOKggCAgIFtTVFJJTkcgVEVSTUlOQVRPUl0KK2NoYXIgXHg5RAkoICAgICAgICApICAjIDlEIOKggCAgIFtPUEVSQVRJTkcgU1lTVEVNIENPTU1BTkRdCitjaGFyIFx4OUUJKCAgICAgICAgKSAgIyA5RSDioIAgICBbUFJJVkFDWSBNRVNTQUdFXQorY2hhciBceDlGCSggICAgICAgICkgICMgOUYg4qCAICAgW0FQUExJQ0FUSU9OIFBST0dSQU0gQ09NTUFORF0KK2NoYXIgXHhBMAkoICAgICAgICApICAjIEEwIOKggCDCoCBbTk8tQlJFQUsgU1BBQ0VdCitjaGFyIFx4QTEJKCAgICAgICAgKSAgIyBBMSDioIAgwqEgW0lOVkVSVEVEIEVYQ0xBTUFUSU9OIE1BUktdCitjaGFyIFx4QTIJKCAgICAgICAgKSAgIyBBMiDioIAgwqIgW0NFTlQgU0lHTl0KK2NoYXIgXHhBMwkoICAgICAgICApICAjIEEzIOKggCDCoyBbUE9VTkQgU0lHTl0KK2NoYXIgXHhBNAkoICAgICAgICApICAjIEE0IOKggCDCpCBbQ1VSUkVOQ1kgU0lHTl0KK2NoYXIgXHhBNQkoICAgICAgICApICAjIEE1IOKggCDCpSBbWUVOIFNJR05dCitjaGFyIFx4QTYJKCAgICAgICAgKSAgIyBBNiDioIAgwqYgW0JST0tFTiBCQVJdCitjaGFyIFx4QTcJKCAgICAgICAgKSAgIyBBNyDioIAgwqcgW1NFQ1RJT04gU0lHTl0KK2NoYXIgXHhBOAkoICAgICAgICApICAjIEE4IOKggCDCqCBbRElBRVJFU0lTXQorY2hhciBceEE5CSggICAgICAgICkgICMgQTkg4qCAIMKpIFtDT1BZUklHSFQgU0lHTl0KK2NoYXIgXHhBQQkoICAgICAgICApICAjIEFBIOKggCDCqiBbRkVNSU5JTkUgT1JESU5BTCBJTkRJQ0FUT1JdCitjaGFyIFx4QUIJKCAyMyAgNiA4KSAgIyBBQiDioqYgwqsgW0xFRlQtUE9JTlRJTkcgRE9VQkxFIEFOR0xFIFFVT1RBVElPTiBNQVJLXQorY2hhciBceEFDCSggICAgICAgICkgICMgQUMg4qCAIMKsIFtOT1QgU0lHTl0KK2NoYXIgXHhBRAkoICAgICAgICApICAjIEFEIOKggCDCrSBbU09GVCBIWVBIRU5dCitjaGFyIFx4QUUJKCAgICAgICAgKSAgIyBBRSDioIAgwq4gW1JFR0lTVEVSRUQgU0lHTl0KK2NoYXIgXHhBRgkoICAgICAgICApICAjIEFGIOKggCDCryBbTUFDUk9OXQorY2hhciBceEIwCSggICAgICAgICkgICMgQjAg4qCAIMKwIFtERUdSRUUgU0lHTl0KK2NoYXIgXHhCMQkoICAgICAgICApICAjIEIxIOKggCDCsSBbUExVUy1NSU5VUyBTSUdOXQorY2hhciBceEIyCSggICAgICAgICkgICMgQjIg4qCAIMKyIFtTVVBFUlNDUklQVCBUV09dCitjaGFyIFx4QjMJKCAgICAgICAgKSAgIyBCMyDioIAgwrMgW1NVUEVSU0NSSVBUIFRIUkVFXQorY2hhciBceEI0CSggICAgICAgICkgICMgQjQg4qCAIMK0IFtBQ1VURSBBQ0NFTlRdCitjaGFyIFx4QjUJKCAgICAgICAgKSAgIyBCNSDioIAgwrUgW01JQ1JPIFNJR05dCitjaGFyIFx4QjYJKCAgICAgICAgKSAgIyBCNiDioIAgwrYgW1BJTENST1cgU0lHTl0KK2NoYXIgXHhCNwkoICAgICAgICApICAjIEI3IOKggCDCtyBbTUlERExFIERPVF0KK2NoYXIgXHhCOAkoICAgICAgICApICAjIEI4IOKggCDCuCBbQ0VESUxMQV0KK2NoYXIgXHhCOQkoICAgICAgICApICAjIEI5IOKggCDCuSBbU1VQRVJTQ1JJUFQgT05FXQorY2hhciBceEJBCSggICAgICAgICkgICMgQkEg4qCAIMK6IFtNQVNDVUxJTkUgT1JESU5BTCBJTkRJQ0FUT1JdCitjaGFyIFx4QkIJKCAgMyA1NjcgKSAgIyBCQiDiobQgwrsgW1JJR0hULVBPSU5USU5HIERPVUJMRSBBTkdMRSBRVU9UQVRJT04gTUFSS10KK2NoYXIgXHhCQwkoICAgICAgICApICAjIEJDIOKggCDCvCBbVlVMR0FSIEZSQUNUSU9OIE9ORSBRVUFSVEVSXQorY2hhciBceEJECSggICAgICAgICkgICMgQkQg4qCAIMK9IFtWVUxHQVIgRlJBQ1RJT04gT05FIEhBTEZdCitjaGFyIFx4QkUJKCAgICAgICAgKSAgIyBCRSDioIAgwr4gW1ZVTEdBUiBGUkFDVElPTiBUSFJFRSBRVUFSVEVSU10KK2NoYXIgXHhCRgkoICAgICAgICApICAjIEJGIOKggCDCvyBbSU5WRVJURUQgUVVFU1RJT04gTUFSS10KK2NoYXIgXHhDMAkoMTIzIDU2NzgpICAjIEMwIOKjtyDDgCBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgQSBXSVRIIEdSQVZFXQorY2hhciBceEMxCSggICAgICAgICkgICMgQzEg4qCAIMOBIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBBIFdJVEggQUNVVEVdCitjaGFyIFx4QzIJKDEgICAgIDc4KSAgIyBDMiDio4Egw4IgW0xBVElOIENBUElUQUwgTEVUVEVSIEEgV0lUSCBDSVJDVU1GTEVYXQorY2hhciBceEMzCSggICAgICAgICkgICMgQzMg4qCAIMODIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBBIFdJVEggVElMREVdCitjaGFyIFx4QzQJKCAgMyA1IDc4KSAgIyBDNCDio5Qgw4QgW0xBVElOIENBUElUQUwgTEVUVEVSIEEgV0lUSCBESUFFUkVTSVNdCitjaGFyIFx4QzUJKCAgICAgICAgKSAgIyBDNSDioIAgw4UgW0xBVElOIENBUElUQUwgTEVUVEVSIEEgV0lUSCBSSU5HIEFCT1ZFXQorY2hhciBceEM2CSggICAgICAgICkgICMgQzYg4qCAIMOGIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBBRV0KK2NoYXIgXHhDNwkoMTIzNCA2NzgpICAjIEM3IOKjryDDhyBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgQyBXSVRIIENFRElMTEFdCitjaGFyIFx4QzgJKCAgICAgICAgKSAgIyBDOCDioIAgw4ggW0xBVElOIENBUElUQUwgTEVUVEVSIEUgV0lUSCBHUkFWRV0KK2NoYXIgXHhDOQkoMTIzNDU2NzgpICAjIEM5IOKjvyDDiSBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgRSBXSVRIIEFDVVRFXQorY2hhciBceENBCSgxMiAgIDY3OCkgICMgQ0Eg4qOjIMOKIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBFIFdJVEggQ0lSQ1VNRkxFWF0KK2NoYXIgXHhDQgkoMTIgNCA2NzgpICAjIENCIOKjqyDDiyBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgRSBXSVRIIERJQUVSRVNJU10KK2NoYXIgXHhDQwkoICAgICAgICApICAjIENDIOKggCDDjCBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgSSBXSVRIIEdSQVZFXQorY2hhciBceENECSggICAgICAgICkgICMgQ0Qg4qCAIMONIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBJIFdJVEggQUNVVEVdCitjaGFyIFx4Q0UJKDEgIDQgNjc4KSAgIyBDRSDio6kgw44gW0xBVElOIENBUElUQUwgTEVUVEVSIEkgV0lUSCBDSVJDVU1GTEVYXQorY2hhciBceENGCSgxMiA0NTY3OCkgICMgQ0Yg4qO7IMOPIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBJIFdJVEggRElBRVJFU0lTXQorY2hhciBceEQwCSggICAgICAgICkgICMgRDAg4qCAIMOQIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBFVEhdCitjaGFyIFx4RDEJKCAgICAgICAgKSAgIyBEMSDioIAgw5EgW0xBVElOIENBUElUQUwgTEVUVEVSIE4gV0lUSCBUSUxERV0KK2NoYXIgXHhEMgkoICAgICAgICApICAjIEQyIOKggCDDkiBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgTyBXSVRIIEdSQVZFXQorY2hhciBceEQzCSggICAgICAgICkgICMgRDMg4qCAIMOTIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBPIFdJVEggQUNVVEVdCitjaGFyIFx4RDQJKDEgMyA1Njc4KSAgIyBENCDio7Ugw5QgW0xBVElOIENBUElUQUwgTEVUVEVSIE8gV0lUSCBDSVJDVU1GTEVYXQorY2hhciBceEQ1CSggICAgICAgICkgICMgRDUg4qCAIMOVIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBPIFdJVEggVElMREVdCitjaGFyIFx4RDYJKCAyIDQgNjc4KSAgIyBENiDio6ogw5YgW0xBVElOIENBUElUQUwgTEVUVEVSIE8gV0lUSCBESUFFUkVTSVNdCitjaGFyIFx4RDcJKCAgICAgICAgKSAgIyBENyDioIAgw5cgW01VTFRJUExJQ0FUSU9OIFNJR05dCitjaGFyIFx4RDgJKCAgICAgICAgKSAgIyBEOCDioIAgw5ggW0xBVElOIENBUElUQUwgTEVUVEVSIE8gV0lUSCBTVFJPS0VdCitjaGFyIFx4RDkJKCAyMzQ1Njc4KSAgIyBEOSDio74gw5kgW0xBVElOIENBUElUQUwgTEVUVEVSIFUgV0lUSCBHUkFWRV0KK2NoYXIgXHhEQQkoICAgICAgICApICAjIERBIOKggCDDmiBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgVSBXSVRIIEFDVVRFXQorY2hhciBceERCCSgxICAgNTY3OCkgICMgREIg4qOxIMObIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBVIFdJVEggQ0lSQ1VNRkxFWF0KK2NoYXIgXHhEQwkoMTIgIDU2NzgpICAjIERDIOKjsyDDnCBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgVSBXSVRIIERJQUVSRVNJU10KK2NoYXIgXHhERAkoICAgICAgICApICAjIEREIOKggCDDnSBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgWSBXSVRIIEFDVVRFXQorY2hhciBceERFCSggICAgICAgICkgICMgREUg4qCAIMOeIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBUSE9STl0KK2NoYXIgXHhERgkoICAgICAgICApICAjIERGIOKggCDDnyBbTEFUSU4gU01BTEwgTEVUVEVSIFNIQVJQIFNdCitjaGFyIFx4RTAJKDEyMyA1NiA4KSAgIyBFMCDiorcgw6AgW0xBVElOIFNNQUxMIExFVFRFUiBBIFdJVEggR1JBVkVdCitjaGFyIFx4RTEJKCAgICAgICAgKSAgIyBFMSDioIAgw6EgW0xBVElOIFNNQUxMIExFVFRFUiBBIFdJVEggQUNVVEVdCitjaGFyIFx4RTIJKDEgICAgNiA4KSAgIyBFMiDioqEgw6IgW0xBVElOIFNNQUxMIExFVFRFUiBBIFdJVEggQ0lSQ1VNRkxFWF0KK2NoYXIgXHhFMwkoICAgICAgICApICAjIEUzIOKggCDDoyBbTEFUSU4gU01BTEwgTEVUVEVSIEEgV0lUSCBUSUxERV0KK2NoYXIgXHhFNAkoICAzNDUgIDgpICAjIEU0IOKinCDDpCBbTEFUSU4gU01BTEwgTEVUVEVSIEEgV0lUSCBESUFFUkVTSVNdCitjaGFyIFx4RTUJKCAgICAgICAgKSAgIyBFNSDioIAgw6UgW0xBVElOIFNNQUxMIExFVFRFUiBBIFdJVEggUklORyBBQk9WRV0KK2NoYXIgXHhFNgkoICAgICAgICApICAjIEU2IOKggCDDpiBbTEFUSU4gU01BTEwgTEVUVEVSIEFFXQorY2hhciBceEU3CSgxMjM0IDYgOCkgICMgRTcg4qKvIMOnIFtMQVRJTiBTTUFMTCBMRVRURVIgQyBXSVRIIENFRElMTEFdCitjaGFyIFx4RTgJKCAyMzQgNiA4KSAgIyBFOCDioq4gw6ggW0xBVElOIFNNQUxMIExFVFRFUiBFIFdJVEggR1JBVkVdCitjaGFyIFx4RTkJKDEyMzQ1NiA4KSAgIyBFOSDior8gw6kgW0xBVElOIFNNQUxMIExFVFRFUiBFIFdJVEggQUNVVEVdCitjaGFyIFx4RUEJKDEyICAgNiA4KSAgIyBFQSDioqMgw6ogW0xBVElOIFNNQUxMIExFVFRFUiBFIFdJVEggQ0lSQ1VNRkxFWF0KK2NoYXIgXHhFQgkoMTIgNCA2IDgpICAjIEVCIOKiqyDDqyBbTEFUSU4gU01BTEwgTEVUVEVSIEUgV0lUSCBESUFFUkVTSVNdCitjaGFyIFx4RUMJKCAgICAgICAgKSAgIyBFQyDioIAgw6wgW0xBVElOIFNNQUxMIExFVFRFUiBJIFdJVEggR1JBVkVdCitjaGFyIFx4RUQJKCAgICAgICAgKSAgIyBFRCDioIAgw60gW0xBVElOIFNNQUxMIExFVFRFUiBJIFdJVEggQUNVVEVdCitjaGFyIFx4RUUJKDEgIDQgNiA4KSAgIyBFRSDioqkgw64gW0xBVElOIFNNQUxMIExFVFRFUiBJIFdJVEggQ0lSQ1VNRkxFWF0KK2NoYXIgXHhFRgkoMTIgNDU2IDgpICAjIEVGIOKiuyDDryBbTEFUSU4gU01BTEwgTEVUVEVSIEkgV0lUSCBESUFFUkVTSVNdCitjaGFyIFx4RjAJKCAgICAgICAgKSAgIyBGMCDioIAgw7AgW0xBVElOIFNNQUxMIExFVFRFUiBFVEhdCitjaGFyIFx4RjEJKCAgICAgICAgKSAgIyBGMSDioIAgw7EgW0xBVElOIFNNQUxMIExFVFRFUiBOIFdJVEggVElMREVdCitjaGFyIFx4RjIJKCAgICAgICAgKSAgIyBGMiDioIAgw7IgW0xBVElOIFNNQUxMIExFVFRFUiBPIFdJVEggR1JBVkVdCitjaGFyIFx4RjMJKCAgICAgICAgKSAgIyBGMyDioIAgw7MgW0xBVElOIFNNQUxMIExFVFRFUiBPIFdJVEggQUNVVEVdCitjaGFyIFx4RjQJKDEgIDQ1NiA4KSAgIyBGNCDiorkgw7QgW0xBVElOIFNNQUxMIExFVFRFUiBPIFdJVEggQ0lSQ1VNRkxFWF0KK2NoYXIgXHhGNQkoICAgICAgICApICAjIEY1IOKggCDDtSBbTEFUSU4gU01BTEwgTEVUVEVSIE8gV0lUSCBUSUxERV0KK2NoYXIgXHhGNgkoIDIgNCA2IDgpICAjIEY2IOKiqiDDtiBbTEFUSU4gU01BTEwgTEVUVEVSIE8gV0lUSCBESUFFUkVTSVNdCitjaGFyIFx4RjcJKCAgICAgICAgKSAgIyBGNyDioIAgw7cgW0RJVklTSU9OIFNJR05dCitjaGFyIFx4RjgJKCAgICAgICAgKSAgIyBGOCDioIAgw7ggW0xBVElOIFNNQUxMIExFVFRFUiBPIFdJVEggU1RST0tFXQorY2hhciBceEY5CSggMjM0NTYgOCkgICMgRjkg4qK+IMO5IFtMQVRJTiBTTUFMTCBMRVRURVIgVSBXSVRIIEdSQVZFXQorY2hhciBceEZBCSggICAgICAgICkgICMgRkEg4qCAIMO6IFtMQVRJTiBTTUFMTCBMRVRURVIgVSBXSVRIIEFDVVRFXQorY2hhciBceEZCCSgxICAgNTYgOCkgICMgRkIg4qKxIMO7IFtMQVRJTiBTTUFMTCBMRVRURVIgVSBXSVRIIENJUkNVTUZMRVhdCitjaGFyIFx4RkMJKDEyICA1NiA4KSAgIyBGQyDiorMgw7wgW0xBVElOIFNNQUxMIExFVFRFUiBVIFdJVEggRElBRVJFU0lTXQorY2hhciBceEZECSggICAgICAgICkgICMgRkQg4qCAIMO9IFtMQVRJTiBTTUFMTCBMRVRURVIgWSBXSVRIIEFDVVRFXQorY2hhciBceEZFCSggICAgICAgICkgICMgRkUg4qCAIMO+IFtMQVRJTiBTTUFMTCBMRVRURVIgVEhPUk5dCitjaGFyIFx4RkYJKCAgICAgICAgKSAgIyBGRiDioIAgw78gW0xBVElOIFNNQUxMIExFVFRFUiBZIFdJVEggRElBRVJFU0lTXQorCitjaGFyIFx1MDE1MwkoIDIgNCA2IDgpICAjIOKiqiDFkyBbTEFUSU4gU01BTEwgTElHQVRVUkUgT0VdCisKK2dseXBoIFx1MjAxOQkoICAzICAgICApICAjIOKghCDigJkgW1JJR0hUIFNJTkdMRSBRVU9UQVRJT04gTUFSS10KK2NoYXIgXHUyMEFDCSgxICAgNSAgOCkgICMg4qKRIOKCrCBbRVVSTyBTSUdOXQorY2hhciBceEE3CSgxMjM0IDYgOCkgICMg4qKvIMKnIFtTRUNUSU9OIFNJR05dCitjaGFyIFx4QjcgKCAgICA1IDcgKSAgIyBCNyDil4ggwrcgW01JRERMRSBET1RdCitjaGFyIFx4QkQJKDEgMzQ1NjcgKSAgIyDiob0gwr0gW1ZVTEdBUiBGUkFDVElPTiBPTkUgSEFMRl0KKworaW5jbHVkZSBjb21tb24udHRpCmRpZmYgLS1naXQgYS9UYWJsZXMvVGV4dC9mci50dGIgYi9UYWJsZXMvVGV4dC9mci50dGIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjQ3YjBmYgotLS0gL2Rldi9udWxsCisrKyBiL1RhYmxlcy9UZXh0L2ZyLnR0YgpAQCAtMCwwICsxLDIxIEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisjICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorIworIyBDb3B5cmlnaHQgKEMpIDIwMDgtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisjCisjIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisjCisjIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyMgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorIyBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyMKKyMgV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworIworIyBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIyBCUkxUVFkgVGV4dCBUYWJsZSAtIEZyZW5jaAorCitpbmNsdWRlIGZyLTIwMDcudHRiCmRpZmYgLS1naXQgYS9UYWJsZXMvVGV4dC9mcl9DQS50dGIgYi9UYWJsZXMvVGV4dC9mcl9DQS50dGIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmVkMWVlZQotLS0gL2Rldi9udWxsCisrKyBiL1RhYmxlcy9UZXh0L2ZyX0NBLnR0YgpAQCAtMCwwICsxLDE3MCBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorIyAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyMKKyMgQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorIworIyBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorIworIyBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisjIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyMgbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisjCisjIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMgQlJMVFRZIFRleHQgVGFibGUgLSBGcmVuY2ggKENhbmFkYSkKKworIyB0aGUgc3RhbmRhcmQgcmVwcmVzZW50YXRpb25zIGZvciB0aGUgbGV0dGVycyBvZiB0aGUgTGF0aW4gYWxwaGFiZXQKK2luY2x1ZGUgbHRyLWxhdGluLnR0aQorCisjIHRoZSBzdGFuZGFyZCByZXByZXNlbnRhdGlvbnMgZm9yIHRoZSBMYXRpbiBjb250cm9sIGNoYXJhY3RlcnMKK2luY2x1ZGUgY3RsLWxhdGluLnR0aQorCisjIGdlbmVyYXRlZCBieSB0dGJ0ZXN0OiBjaGFyc2V0PWlzby04ODU5LTEKK2NoYXIgXHgwMAkoICAgNCAgNzgpICAjIDAwIOKjiCAgIFtOVUxMXQorIyBMYXRpbiBjb250cm9sIGNoYXJhY3RlcnMgICMgMDEtMUEKK2NoYXIgXHgxQgkoIDIgNCA2NzgpICAjIDFCIOKjqiAgIFtFU0NBUEVdCitjaGFyIFx4MUMJKDEyICA1Njc4KSAgIyAxQyDio7MgICBbSU5GT1JNQVRJT04gU0VQQVJBVE9SIEZPVVJdCitjaGFyIFx4MUQJKDEyIDQ1Njc4KSAgIyAxRCDio7sgICBbSU5GT1JNQVRJT04gU0VQQVJBVE9SIFRIUkVFXQorY2hhciBceDFFCSggICA0NSA3OCkgICMgMUUg4qOYICAgW0lORk9STUFUSU9OIFNFUEFSQVRPUiBUV09dCitjaGFyIFx4MUYJKCAgIDQ1Njc4KSAgIyAxRiDio7ggICBbSU5GT1JNQVRJT04gU0VQQVJBVE9SIE9ORV0KK2NoYXIgXHgyMAkoICAgICAgICApICAjIDIwIOKggCAgIFtTUEFDRV0KK2NoYXIgXHgyMQkoIDIzIDUgICApICAjIDIxIOKgliAhIFtFWENMQU1BVElPTiBNQVJLXQorY2hhciBceDIyCSgxICA0ICAgOCkgICMgMjIg4qKJICIgW1FVT1RBVElPTiBNQVJLXQorY2hhciBceDIzCSggIDM0NTYgICkgICMgMjMg4qC8ICMgW05VTUJFUiBTSUdOXQorY2hhciBceDI0CSgxMiA0IDYgICkgICMgMjQg4qCrICQgW0RPTExBUiBTSUdOXQorY2hhciBceDI1CSgxICA0IDYgOCkgICMgMjUg4qKpICUgW1BFUkNFTlQgU0lHTl0KK2NoYXIgXHgyNgkoMTIzNCA2IDgpICAjIDI2IOKiryAmIFtBTVBFUlNBTkRdCitjaGFyIFx4MjcJKCAgMyAgICAgKSAgIyAyNyDioIQgJyBbQVBPU1RST1BIRV0KK2NoYXIgXHgyOAkoMTIzIDU2NyApICAjIDI4IOKhtyAoIFtMRUZUIFBBUkVOVEhFU0lTXQorY2hhciBceDI5CSggMjM0NTY3ICkgICMgMjkg4qG+ICkgW1JJR0hUIFBBUkVOVEhFU0lTXQorY2hhciBceDJBCSggIDMgNSAgICkgICMgMkEg4qCUICogW0FTVEVSSVNLXQorY2hhciBceDJCCSggMjMgNSA3ICkgICMgMkIg4qGWICsgW1BMVVMgU0lHTl0KK2NoYXIgXHgyQwkoIDIgICAgICApICAjIDJDIOKggiAsIFtDT01NQV0KK2NoYXIgXHgyRAkoICAzICA2ICApICAjIDJEIOKgpCAtIFtIWVBIRU4tTUlOVVNdCitjaGFyIFx4MkUJKCAyICA1NiAgKSAgIyAyRSDioLIgLiBbRlVMTCBTVE9QXQorY2hhciBceDJGCSggIDM0ICA3ICkgICMgMkYg4qGMIC8gW1NPTElEVVNdCisKK2luY2x1ZGUgbnVtLW5lbWQ4LnR0aQorCitjaGFyIFx4M0EJKCAyICA1ICAgKSAgIyAzQSDioJIgOiBbQ09MT05dCitjaGFyIFx4M0IJKCAyMyAgICAgKSAgIyAzQiDioIYgOyBbU0VNSUNPTE9OXQorY2hhciBceDNDCSggMjMgIDYgICkgICMgM0Mg4qCmIDwgW0xFU1MtVEhBTiBTSUdOXQorY2hhciBceDNECSgxMjM0NTY3ICkgICMgM0Qg4qG/ID0gW0VRVUFMUyBTSUdOXQorY2hhciBceDNFCSggIDMgNTYgICkgICMgM0Ug4qC0ID4gW0dSRUFURVItVEhBTiBTSUdOXQorY2hhciBceDNGCSgxICA0NTYgICkgICMgM0Yg4qC5ID8gW1FVRVNUSU9OIE1BUktdCitjaGFyIFx4NDAJKCAgIDQgIDcgKSAgIyA0MCDioYggQCBbQ09NTUVSQ0lBTCBBVF0KKyMgdXBwZXJjYXNlIExhdGluIGFscGhhYmV0ICAjIDQxLTVBCitjaGFyIFx4NUIJKCAyIDQgNjcgKSAgIyA1QiDioaogWyBbTEVGVCBTUVVBUkUgQlJBQ0tFVF0KK2NoYXIgXHg1QwkoMSAgICA2NyApICAjIDVDIOKhoSBcIFtSRVZFUlNFIFNPTElEVVNdCitjaGFyIFx4NUQJKDEyIDQ1NjcgKSAgIyA1RCDiobsgXSBbUklHSFQgU1FVQVJFIEJSQUNLRVRdCitjaGFyIFx4NUUJKCAgIDQ1IDcgKSAgIyA1RSDioZggXiBbQ0lSQ1VNRkxFWCBBQ0NFTlRdCitjaGFyIFx4NUYJKCAgIDQ1NiAgKSAgIyA1RiDioLggXyBbTE9XIExJTkVdCitjaGFyIFx4NjAJKCAgIDQgICAgKSAgIyA2MCDioIggYCBbR1JBVkUgQUNDRU5UXQorIyBsb3dlcmNhc2UgTGF0aW4gYWxwaGFiZXQgICMgNjEtN0EKK2NoYXIgXHg3QgkoIDIgNCA2ICApICAjIDdCIOKgqiB7IFtMRUZUIENVUkxZIEJSQUNLRVRdCitjaGFyIFx4N0MJKDEyICA1NiAgKSAgIyA3QyDioLMgfCBbVkVSVElDQUwgTElORV0KK2NoYXIgXHg3RAkoMTIgNDU2ICApICAjIDdEIOKguyB9IFtSSUdIVCBDVVJMWSBCUkFDS0VUXQorY2hhciBceDdFCSggICA0NSAgICkgICMgN0Ug4qCYIH4gW1RJTERFXQorY2hhciBceDdGCSggICA0NTY3ICkgICMgN0Yg4qG4ICAgW0RFTEVURV0KK2NoYXIgXHhBMQkoICAzICA2NyApICAjIEExIOKhpCDCoSBbSU5WRVJURUQgRVhDTEFNQVRJT04gTUFSS10KK2NoYXIgXHhBMgkoIDIgNCA2IDgpICAjIEEyIOKiqiDCoiBbQ0VOVCBTSUdOXQorY2hhciBceEEzCSgxMiAgNTYgOCkgICMgQTMg4qKzIMKjIFtQT1VORCBTSUdOXQorY2hhciBceEE0CSggMiAgICA3ICkgICMgQTQg4qGCIMKkIFtDVVJSRU5DWSBTSUdOXQorY2hhciBceEE1CSgxMiA0NTYgOCkgICMgQTUg4qK7IMKlIFtZRU4gU0lHTl0KK2NoYXIgXHhBNgkoMTIgICA2NyApICAjIEE2IOKhoyDCpiBbQlJPS0VOIEJBUl0KK2NoYXIgXHhBNwkoMTIzNDU2NzgpICAjIEE3IOKjvyDCpyBbU0VDVElPTiBTSUdOXQorY2hhciBceEE4CSgxICA0NTY3ICkgICMgQTgg4qG5IMKoIFtESUFFUkVTSVNdCitjaGFyIFx4QTkJKCAyMzQ1NjcgKSAgIyBBOSDiob4gwqkgW0NPUFlSSUdIVCBTSUdOXQorY2hhciBceEFBCSgxMjM0IDY3ICkgICMgQUEg4qGvIMKqIFtGRU1JTklORSBPUkRJTkFMIElORElDQVRPUl0KK2NoYXIgXHhBQgkoICAgNCA2NyApICAjIEFCIOKhqCDCqyBbTEVGVC1QT0lOVElORyBET1VCTEUgQU5HTEUgUVVPVEFUSU9OIE1BUktdCitjaGFyIFx4QUMJKDEgICAgNjcgKSAgIyBBQyDioaEgwqwgW05PVCBTSUdOXQorY2hhciBceEFECSggIDMgIDYgOCkgICMgQUQg4qKkIMKtIFtTT0ZUIEhZUEhFTl0KK2NoYXIgXHhBRQkoMTIzNDU2NyApICAjIEFFIOKhvyDCriBbUkVHSVNURVJFRCBTSUdOXQorY2hhciBceEFGCSggICAgNTY3ICkgICMgQUYg4qGwIMKvIFtNQUNST05dCitjaGFyIFx4QjAJKCAyMyAgNiA4KSAgIyBCMCDioqYgwrAgW0RFR1JFRSBTSUdOXQorY2hhciBceEIxCSggMiAgICAgOCkgICMgQjEg4qKCIMKxIFtQTFVTLU1JTlVTIFNJR05dCitjaGFyIFx4QjIJKDEyMzQ1NiA4KSAgIyBCMiDior8gwrIgW1NVUEVSU0NSSVBUIFRXT10KK2NoYXIgXHhCMwkoIDIgIDUgNyApICAjIEIzIOKhkiDCsyBbU1VQRVJTQ1JJUFQgVEhSRUVdCitjaGFyIFx4QjQJKCAyICA1NjcgKSAgIyBCNCDiobIgwrQgW0FDVVRFIEFDQ0VOVF0KK2NoYXIgXHhCNQkoMTIzNCA2IDgpICAjIEI1IOKiryDCtSBbTUlDUk8gU0lHTl0KK2NoYXIgXHhCNgkoMTIzNDU2NzgpICAjIEI2IOKjvyDCtiBbUElMQ1JPVyBTSUdOXQorY2hhciBceEI3CSgxICAgNTYgOCkgICMgQjcg4qKxIMK3IFtNSURETEUgRE9UXQorY2hhciBceEI4CSggMjMgIDY3ICkgICMgQjgg4qGmIMK4IFtDRURJTExBXQorY2hhciBceEI5CSggIDMgNSA3ICkgICMgQjkg4qGUIMK5IFtTVVBFUlNDUklQVCBPTkVdCitjaGFyIFx4QkEJKCAgMyAgIDcgKSAgIyBCQSDioYQgwrogW01BU0NVTElORSBPUkRJTkFMIElORElDQVRPUl0KK2NoYXIgXHhCQgkoICAzNCAgNyApICAjIEJCIOKhjCDCuyBbUklHSFQtUE9JTlRJTkcgRE9VQkxFIEFOR0xFIFFVT1RBVElPTiBNQVJLXQorY2hhciBceEJDCSggICAgIDY3ICkgICMgQkMg4qGgIMK8IFtWVUxHQVIgRlJBQ1RJT04gT05FIFFVQVJURVJdCitjaGFyIFx4QkQJKCAgMzQgNjcgKSAgIyBCRCDioawgwr0gW1ZVTEdBUiBGUkFDVElPTiBPTkUgSEFMRl0KK2NoYXIgXHhCRQkoICAzNDUgNyApICAjIEJFIOKhnCDCviBbVlVMR0FSIEZSQUNUSU9OIFRIUkVFIFFVQVJURVJTXQorY2hhciBceEJGCSgxMjMgNTY3ICkgICMgQkYg4qG3IMK/IFtJTlZFUlRFRCBRVUVTVElPTiBNQVJLXQorY2hhciBceEMwCSggICAgICA3OCkgICMgQzAg4qOAIMOAIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBBIFdJVEggR1JBVkVdCitjaGFyIFx4QzEJKCAyMzQgNjc4KSAgIyBDMSDio64gw4EgW0xBVElOIENBUElUQUwgTEVUVEVSIEEgV0lUSCBBQ1VURV0KK2NoYXIgXHhDMgkoICAgIDUgNzgpICAjIEMyIOKjkCDDgiBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgQSBXSVRIIENJUkNVTUZMRVhdCitjaGFyIFx4QzMJKCAgMzQ1Njc4KSAgIyBDMyDio7wgw4MgW0xBVElOIENBUElUQUwgTEVUVEVSIEEgV0lUSCBUSUxERV0KK2NoYXIgXHhDNAkoMSAzNDUgIDgpICAjIEM0IOKinSDDhCBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgQSBXSVRIIERJQUVSRVNJU10KK2NoYXIgXHhDNQkoMSAzIDUgIDgpICAjIEM1IOKilSDDhSBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgQSBXSVRIIFJJTkcgQUJPVkVdCitjaGFyIFx4QzYJKDEyMyA1ICA4KSAgIyBDNiDiopcgw4YgW0xBVElOIENBUElUQUwgTEVUVEVSIEFFXQorY2hhciBceEM3CSggICA0ICAgOCkgICMgQzcg4qKIIMOHIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBDIFdJVEggQ0VESUxMQV0KK2NoYXIgXHhDOAkoMTIzIDU2NzgpICAjIEM4IOKjtyDDiCBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgRSBXSVRIIEdSQVZFXQorY2hhciBceEM5CSgxMjM0ICAgOCkgICMgQzkg4qKPIMOJIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBFIFdJVEggQUNVVEVdCitjaGFyIFx4Q0EJKDEgICAgNjc4KSAgIyBDQSDio6Egw4ogW0xBVElOIENBUElUQUwgTEVUVEVSIEUgV0lUSCBDSVJDVU1GTEVYXQorY2hhciBceENCCSggIDM0IDY3OCkgICMgQ0Ig4qOsIMOLIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBFIFdJVEggRElBRVJFU0lTXQorY2hhciBceENDCSggICAgIDY3OCkgICMgQ0Mg4qOgIMOMIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBJIFdJVEggR1JBVkVdCitjaGFyIFx4Q0QJKCAgMyAgNjc4KSAgIyBDRCDio6Qgw40gW0xBVElOIENBUElUQUwgTEVUVEVSIEkgV0lUSCBBQ1VURV0KK2NoYXIgXHhDRQkoICAgNCA2NzgpICAjIENFIOKjqCDDjiBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgSSBXSVRIIENJUkNVTUZMRVhdCitjaGFyIFx4Q0YJKCAgMzQgIDc4KSAgIyBDRiDio4wgw48gW0xBVElOIENBUElUQUwgTEVUVEVSIEkgV0lUSCBESUFFUkVTSVNdCitjaGFyIFx4RDAJKCAgMyA1Njc4KSAgIyBEMCDio7Qgw5AgW0xBVElOIENBUElUQUwgTEVUVEVSIEVUSF0KK2NoYXIgXHhEMQkoMSAgNCA2NyApICAjIEQxIOKhqSDDkSBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgTiBXSVRIIFRJTERFXQorY2hhciBceEQyCSggMjMgICA3OCkgICMgRDIg4qOGIMOSIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBPIFdJVEggR1JBVkVdCitjaGFyIFx4RDMJKCAyICA1IDc4KSAgIyBEMyDio5Igw5MgW0xBVElOIENBUElUQUwgTEVUVEVSIE8gV0lUSCBBQ1VURV0KK2NoYXIgXHhENAkoIDIgIDU2NzgpICAjIEQ0IOKjsiDDlCBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgTyBXSVRIIENJUkNVTUZMRVhdCitjaGFyIFx4RDUJKCAyICAgNjc4KSAgIyBENSDio6Igw5UgW0xBVElOIENBUElUQUwgTEVUVEVSIE8gV0lUSCBUSUxERV0KK2NoYXIgXHhENgkoMSAzNDU2IDgpICAjIEQ2IOKivSDDliBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgTyBXSVRIIERJQUVSRVNJU10KK2NoYXIgXHhENwkoIDIzIDU2NzgpICAjIEQ3IOKjtiDDlyBbTVVMVElQTElDQVRJT04gU0lHTl0KK2NoYXIgXHhEOAkoIDIzICA2NzgpICAjIEQ4IOKjpiDDmCBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgTyBXSVRIIFNUUk9LRV0KK2NoYXIgXHhEOQkoICAzIDUgNzgpICAjIEQ5IOKjlCDDmSBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgVSBXSVRIIEdSQVZFXQorY2hhciBceERBCSgxICAgNTY3OCkgICMgREEg4qOxIMOaIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBVIFdJVEggQUNVVEVdCitjaGFyIFx4REIJKCAgICA1Njc4KSAgIyBEQiDio7Agw5sgW0xBVElOIENBUElUQUwgTEVUVEVSIFUgV0lUSCBDSVJDVU1GTEVYXQorY2hhciBceERDCSgxIDMgNTYgOCkgICMgREMg4qK1IMOcIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBVIFdJVEggRElBRVJFU0lTXQorY2hhciBceERECSgxMjM0NTY3OCkgICMgREQg4qO/IMOdIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBZIFdJVEggQUNVVEVdCitjaGFyIFx4REUJKCAgMzQ1IDc4KSAgIyBERSDio5wgw54gW0xBVElOIENBUElUQUwgTEVUVEVSIFRIT1JOXQorY2hhciBceERGCSggMjM0IDYgOCkgICMgREYg4qKuIMOfIFtMQVRJTiBTTUFMTCBMRVRURVIgU0hBUlAgU10KK2NoYXIgXHhFMAkoMTIzIDU2ICApICAjIEUwIOKgtyDDoCBbTEFUSU4gU01BTEwgTEVUVEVSIEEgV0lUSCBHUkFWRV0KK2NoYXIgXHhFMQkoICAgICAgNyApICAjIEUxIOKhgCDDoSBbTEFUSU4gU01BTEwgTEVUVEVSIEEgV0lUSCBBQ1VURV0KK2NoYXIgXHhFMgkoMSAgICA2ICApICAjIEUyIOKgoSDDoiBbTEFUSU4gU01BTEwgTEVUVEVSIEEgV0lUSCBDSVJDVU1GTEVYXQorY2hhciBceEUzCSggIDM0NTYgOCkgICMgRTMg4qK8IMOjIFtMQVRJTiBTTUFMTCBMRVRURVIgQSBXSVRIIFRJTERFXQorY2hhciBceEU0CSgxICA0NSAgOCkgICMgRTQg4qKZIMOkIFtMQVRJTiBTTUFMTCBMRVRURVIgQSBXSVRIIERJQUVSRVNJU10KK2NoYXIgXHhFNQkoMTIgNCAgIDgpICAjIEU1IOKiiyDDpSBbTEFUSU4gU01BTEwgTEVUVEVSIEEgV0lUSCBSSU5HIEFCT1ZFXQorY2hhciBceEU2CSgxMjM0NSAgOCkgICMgRTYg4qKfIMOmIFtMQVRJTiBTTUFMTCBMRVRURVIgQUVdCitjaGFyIFx4RTcJKDEyMzQgNiAgKSAgIyBFNyDioK8gw6cgW0xBVElOIFNNQUxMIExFVFRFUiBDIFdJVEggQ0VESUxMQV0KK2NoYXIgXHhFOAkoIDIzNCA2ICApICAjIEU4IOKgriDDqCBbTEFUSU4gU01BTEwgTEVUVEVSIEUgV0lUSCBHUkFWRV0KK2NoYXIgXHhFOQkoMTIzNDU2ICApICAjIEU5IOKgvyDDqSBbTEFUSU4gU01BTEwgTEVUVEVSIEUgV0lUSCBBQ1VURV0KK2NoYXIgXHhFQQkoMTIgICA2ICApICAjIEVBIOKgoyDDqiBbTEFUSU4gU01BTEwgTEVUVEVSIEUgV0lUSCBDSVJDVU1GTEVYXQorY2hhciBceEVCCSgxMiA0IDYgICkgICMgRUIg4qCrIMOrIFtMQVRJTiBTTUFMTCBMRVRURVIgRSBXSVRIIERJQUVSRVNJU10KK2NoYXIgXHhFQwkoMSAzNCAgIDgpICAjIEVDIOKijSDDrCBbTEFUSU4gU01BTEwgTEVUVEVSIEkgV0lUSCBHUkFWRV0KK2NoYXIgXHhFRAkoIDIzNCA2NyApICAjIEVEIOKhriDDrSBbTEFUSU4gU01BTEwgTEVUVEVSIEkgV0lUSCBBQ1VURV0KK2NoYXIgXHhFRQkoMSAgNCA2ICApICAjIEVFIOKgqSDDriBbTEFUSU4gU01BTEwgTEVUVEVSIEkgV0lUSCBDSVJDVU1GTEVYXQorY2hhciBceEVGCSgxMiA0NTYgICkgICMgRUYg4qC7IMOvIFtMQVRJTiBTTUFMTCBMRVRURVIgSSBXSVRIIERJQUVSRVNJU10KK2NoYXIgXHhGMAkoICAzIDU2IDgpICAjIEYwIOKitCDDsCBbTEFUSU4gU01BTEwgTEVUVEVSIEVUSF0KK2NoYXIgXHhGMQkoMTIgNCA2NyApICAjIEYxIOKhqyDDsSBbTEFUSU4gU01BTEwgTEVUVEVSIE4gV0lUSCBUSUxERV0KK2NoYXIgXHhGMgkoMSAzICA2IDgpICAjIEYyIOKipSDDsiBbTEFUSU4gU01BTEwgTEVUVEVSIE8gV0lUSCBHUkFWRV0KK2NoYXIgXHhGMwkoICAgIDUgNyApICAjIEYzIOKhkCDDsyBbTEFUSU4gU01BTEwgTEVUVEVSIE8gV0lUSCBBQ1VURV0KK2NoYXIgXHhGNAkoMSAgNDU2ICApICAjIEY0IOKguSDDtCBbTEFUSU4gU01BTEwgTEVUVEVSIE8gV0lUSCBDSVJDVU1GTEVYXQorY2hhciBceEY1CSggMiAgIDYgOCkgICMgRjUg4qKiIMO1IFtMQVRJTiBTTUFMTCBMRVRURVIgTyBXSVRIIFRJTERFXQorY2hhciBceEY2CSggMjM0NSAgOCkgICMgRjYg4qKeIMO2IFtMQVRJTiBTTUFMTCBMRVRURVIgTyBXSVRIIERJQUVSRVNJU10KK2NoYXIgXHhGNwkoIDIzIDUgIDgpICAjIEY3IOKiliDDtyBbRElWSVNJT04gU0lHTl0KK2NoYXIgXHhGOAkoICAzIDU2NyApICAjIEY4IOKhtCDDuCBbTEFUSU4gU01BTEwgTEVUVEVSIE8gV0lUSCBTVFJPS0VdCitjaGFyIFx4RjkJKCAyMzQ1NiAgKSAgIyBGOSDioL4gw7kgW0xBVElOIFNNQUxMIExFVFRFUiBVIFdJVEggR1JBVkVdCitjaGFyIFx4RkEJKCAgMzQ1NjcgKSAgIyBGQSDiobwgw7ogW0xBVElOIFNNQUxMIExFVFRFUiBVIFdJVEggQUNVVEVdCitjaGFyIFx4RkIJKDEgICA1NiAgKSAgIyBGQiDioLEgw7sgW0xBVElOIFNNQUxMIExFVFRFUiBVIFdJVEggQ0lSQ1VNRkxFWF0KK2NoYXIgXHhGQwkoMTIgIDU2ICApICAjIEZDIOKgsyDDvCBbTEFUSU4gU01BTEwgTEVUVEVSIFUgV0lUSCBESUFFUkVTSVNdCitjaGFyIFx4RkQJKCAyMyAgIDcgKSAgIyBGRCDioYYgw70gW0xBVElOIFNNQUxMIExFVFRFUiBZIFdJVEggQUNVVEVdCitjaGFyIFx4RkUJKCAgMzQ1ICA4KSAgIyBGRSDiopwgw74gW0xBVElOIFNNQUxMIExFVFRFUiBUSE9STl0KK2NoYXIgXHhGRgkoMSAgIDU2NyApICAjIEZGIOKhsSDDvyBbTEFUSU4gU01BTEwgTEVUVEVSIFkgV0lUSCBESUFFUkVTSVNdCisKK2luY2x1ZGUgY29tbW9uLnR0aQpkaWZmIC0tZ2l0IGEvVGFibGVzL1RleHQvZnJfRlIudHRiIGIvVGFibGVzL1RleHQvZnJfRlIudHRiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk1ODQxNmYKLS0tIC9kZXYvbnVsbAorKysgYi9UYWJsZXMvVGV4dC9mcl9GUi50dGIKQEAgLTAsMCArMSwxNzUgQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyMgICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisjCisjIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyMKKyMgQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjIEJSTFRUWSBUZXh0IFRhYmxlIC0gRnJlbmNoIChGcmFuY2UpCisKKyMgVGhpcyBpcyB0aGUgcmVpbXBsZW1lbnRhdGlvbiBvZiB0aGUgZnItY2JpZnMgdGFibGUgdXNpbmcgdGhlCisjIElTTy04ODU5LTEgKExhdGluIDEpIGNoYXJhY3RlciBzZXQuCisKKyMgdGhlIHN0YW5kYXJkIHJlcHJlc2VudGF0aW9ucyBmb3IgdGhlIGxldHRlcnMgb2YgdGhlIExhdGluIGFscGhhYmV0CitpbmNsdWRlIGx0ci1sYXRpbi50dGkKKworIyB0aGUgc3RhbmRhcmQgcmVwcmVzZW50YXRpb25zIGZvciB0aGUgTGF0aW4gY29udHJvbCBjaGFyYWN0ZXJzCitpbmNsdWRlIGN0bC1sYXRpbi50dGkKKworIyB0aGUgbnVtYmVycyAxLTkgYXJlIHJlcHJlc2VudGVkIGJ5IHRoZSBsZXR0ZXJzIGEtaSB3aXRoIGRvdCA2IGFkZGVkCisjIHRoZSBudW1iZXIgMCBpcyByZXByZXNlbnRlZCBieSBkb3RzIDM0NTYKK2luY2x1ZGUgbnVtLWZyZW5jaC50dGkKKworIyBnZW5lcmF0ZWQgYnkgdHRidGVzdDogY2hhcnNldD1pc28tODg1OS0xCitjaGFyIFx4MDAJKCAgMzQ1IDc4KSAgIyAwMCDio5wgICBbTlVMTF0KKyMgTGF0aW4gY29udHJvbCBjaGFyYWN0ZXJzICAjIDAxLTFBCitjaGFyIFx4MUIJKCAgIDQgNjc4KSAgIyAxQiDio6ggICBbRVNDQVBFXQorY2hhciBceDFDCSggICAgNSA3OCkgICMgMUMg4qOQICAgW0lORk9STUFUSU9OIFNFUEFSQVRPUiBGT1VSXQorY2hhciBceDFECSggICAgNTY3OCkgICMgMUQg4qOwICAgW0lORk9STUFUSU9OIFNFUEFSQVRPUiBUSFJFRV0KK2NoYXIgXHgxRQkoICAgICA2NzgpICAjIDFFIOKjoCAgIFtJTkZPUk1BVElPTiBTRVBBUkFUT1IgVFdPXQorY2hhciBceDFGCSggICA0NTY3OCkgICMgMUYg4qO4ICAgW0lORk9STUFUSU9OIFNFUEFSQVRPUiBPTkVdCitjaGFyIFx4MjAJKCAgICAgICAgKSAgIyAyMCDioIAgICBbU1BBQ0VdCitjaGFyIFx4MjEJKCAyMyA1ICAgKSAgIyAyMSDioJYgISBbRVhDTEFNQVRJT04gTUFSS10KK2NoYXIgXHgyMgkoIDIzIDU2ICApICAjIDIyIOKgtiAiIFtRVU9UQVRJT04gTUFSS10KK2NoYXIgXHgyMwkoICAzNCA2ICApICAjIDIzIOKgrCAjIFtOVU1CRVIgU0lHTl0KK2NoYXIgXHgyNAkoICAgNDU2ICApICAjIDI0IOKguCAkIFtET0xMQVIgU0lHTl0KK2NoYXIgXHgyNQkoMTIzNCA2ICApICAjIDI1IOKgryAlIFtQRVJDRU5UIFNJR05dCitjaGFyIFx4MjYJKDEyMzQ1NiAgKSAgIyAyNiDioL8gJiBbQU1QRVJTQU5EXQorY2hhciBceDI3CSggICAgIDYgICkgICMgMjcg4qCgICcgW0FQT1NUUk9QSEVdCitjaGFyIFx4MjgJKCAyMyAgNiAgKSAgIyAyOCDioKYgKCBbTEVGVCBQQVJFTlRIRVNJU10KK2NoYXIgXHgyOQkoICAzIDU2ICApICAjIDI5IOKgtCApIFtSSUdIVCBQQVJFTlRIRVNJU10KK2NoYXIgXHgyQQkoICAzIDUgICApICAjIDJBIOKglCAqIFtBU1RFUklTS10KK2NoYXIgXHgyQgkoIDIzIDUgNzgpICAjIDJCIOKjliArIFtQTFVTIFNJR05dCitjaGFyIFx4MkMJKCAyICAgICAgKSAgIyAyQyDioIIgLCBbQ09NTUFdCitjaGFyIFx4MkQJKCAgMyAgNiAgKSAgIyAyRCDioKQgLSBbSFlQSEVOLU1JTlVTXQorY2hhciBceDJFCSggIDMgICAgICkgICMgMkUg4qCEIC4gW0ZVTEwgU1RPUF0KK2NoYXIgXHgyRgkoIDIgIDU2ICApICAjIDJGIOKgsiAvIFtTT0xJRFVTXQorIyBIaW5kdS1BcmFiaWMgbnVtZXJhbHMgICAgICMgMzAtMzkKK2NoYXIgXHgzQQkoIDIgIDUgICApICAjIDNBIOKgkiA6IFtDT0xPTl0KK2NoYXIgXHgzQgkoIDIzICAgICApICAjIDNCIOKghiA7IFtTRU1JQ09MT05dCitjaGFyIFx4M0MJKCAgICA1NiAgKSAgIyAzQyDioLAgPCBbTEVTUy1USEFOIFNJR05dCitjaGFyIFx4M0QJKCAyMyA1Njc4KSAgIyAzRCDio7YgPSBbRVFVQUxTIFNJR05dCitjaGFyIFx4M0UJKCAgIDQ1ICAgKSAgIyAzRSDioJggPiBbR1JFQVRFUi1USEFOIFNJR05dCitjaGFyIFx4M0YJKCAyICAgNiAgKSAgIyAzRiDioKIgPyBbUVVFU1RJT04gTUFSS10KK2NoYXIgXHg0MAkoICAzNDUgICApICAjIDQwIOKgnCBAIFtDT01NRVJDSUFMIEFUXQorIyB1cHBlcmNhc2UgTGF0aW4gYWxwaGFiZXQgICMgNDEtNUEKK2NoYXIgXHg1QgkoMTIzIDU2ICApICAjIDVCIOKgtyBbIFtMRUZUIFNRVUFSRSBCUkFDS0VUXQorY2hhciBceDVDCSggMjM0IDYgICkgICMgNUMg4qCuIFwgW1JFVkVSU0UgU09MSURVU10KK2NoYXIgXHg1RAkoIDIzNDU2ICApICAjIDVEIOKgviBdIFtSSUdIVCBTUVVBUkUgQlJBQ0tFVF0KK2NoYXIgXHg1RQkoICAzNCAgICApICAjIDVFIOKgjCBeIFtDSVJDVU1GTEVYIEFDQ0VOVF0KK2NoYXIgXHg1RgkoICAgNDU2NyApICAjIDVGIOKhuCBfIFtMT1cgTElORV0KK2NoYXIgXHg2MAkoICAzNDUgNyApICAjIDYwIOKhnCBgIFtHUkFWRSBBQ0NFTlRdCisjIGxvd2VyY2FzZSBMYXRpbiBhbHBoYWJldCAgIyA2MS03QQorY2hhciBceDdCCSgxMjMgNTY3ICkgICMgN0Ig4qG3IHsgW0xFRlQgQ1VSTFkgQlJBQ0tFVF0KK2NoYXIgXHg3QwkoIDIzNCA2NyApICAjIDdDIOKhriB8IFtWRVJUSUNBTCBMSU5FXQorY2hhciBceDdECSggMjM0NTY3ICkgICMgN0Qg4qG+IH0gW1JJR0hUIENVUkxZIEJSQUNLRVRdCitjaGFyIFx4N0UJKCAgMzQgIDcgKSAgIyA3RSDioYwgfiBbVElMREVdCitjaGFyIFx4N0YJKCAgIDQgNjcgKSAgIyA3RiDioaggICBbREVMRVRFXQorY2hhciBceEExCSggIDMgIDY3ICkgICMgQTEg4qGkIMKhIFtJTlZFUlRFRCBFWENMQU1BVElPTiBNQVJLXQorY2hhciBceEEyCSgxICA0ICAgOCkgICMgQTIg4qKJIMKiIFtDRU5UIFNJR05dCitjaGFyIFx4QTMJKDEyMyAgICA4KSAgIyBBMyDioocgwqMgW1BPVU5EIFNJR05dCitjaGFyIFx1MjBBQwkoMSAgIDUgIDgpICAjIOKikSDigqwgW0VVUk8gU0lHTl0KK2NoYXIgXHhBNQkoMSAzNDU2IDgpICAjIEE1IOKivSDCpSBbWUVOIFNJR05dCitjaGFyIFx4QTYJKCAgMyA1IDc4KSAgIyBBNiDio5QgwqYgW0JST0tFTiBCQVJdCitjaGFyIFx4QTcJKCAyMzQgICA4KSAgIyBBNyDioo4gwqcgW1NFQ1RJT04gU0lHTl0KK2NoYXIgXHhBOAkoICAgIDUgICApICAjIEE4IOKgkCDCqCBbRElBRVJFU0lTXQorY2hhciBceEE5CSgxMjM0NSAgOCkgICMgQTkg4qKfIMKpIFtDT1BZUklHSFQgU0lHTl0KK2NoYXIgXHhBQQkoMTIgNCAgIDgpICAjIEFBIOKiiyDCqiBbRkVNSU5JTkUgT1JESU5BTCBJTkRJQ0FUT1JdCitjaGFyIFx4QUIJKCAyMyAgNjc4KSAgIyBBQiDio6YgwqsgW0xFRlQtUE9JTlRJTkcgRE9VQkxFIEFOR0xFIFFVT1RBVElPTiBNQVJLXQorY2hhciBceEFDCSgxIDM0NSAgOCkgICMgQUMg4qKdIMKsIFtOT1QgU0lHTl0KK2NoYXIgXHhBRAkoICAzICA2NzgpICAjIEFEIOKjpCDCrSBbU09GVCBIWVBIRU5dCitjaGFyIFx4QUUJKDEyMyA1ICA4KSAgIyBBRSDiopcgwq4gW1JFR0lTVEVSRUQgU0lHTl0KK2NoYXIgXHhBRgkoMTIzNDU2NzgpICAjIEFGIOKjvyDCryBbTUFDUk9OXQorY2hhciBceEIwCSgxIDMgNSAgOCkgICMgQjAg4qKVIMKwIFtERUdSRUUgU0lHTl0KK2NoYXIgXHhCMQkoMSAzNCA2IDgpICAjIEIxIOKirSDCsSBbUExVUy1NSU5VUyBTSUdOXQorY2hhciBceEIyCSggICA0NSA3OCkgICMgQjIg4qOYIMKyIFtTVVBFUlNDUklQVCBUV09dCitjaGFyIFx4QjMJKCAgMyAgIDc4KSAgIyBCMyDio4QgwrMgW1NVUEVSU0NSSVBUIFRIUkVFXQorY2hhciBceEI0CSggICA0ICAgICkgICMgQjQg4qCIIMK0IFtBQ1VURSBBQ0NFTlRdCitjaGFyIFx4QjUJKDEgMyAgNiA4KSAgIyBCNSDioqUgwrUgW01JQ1JPIFNJR05dCitjaGFyIFx4QjYJKDEyMzQgICA4KSAgIyBCNiDioo8gwrYgW1BJTENST1cgU0lHTl0KK2NoYXIgXHhCNwkoICAgIDUgNyApICAjIEI3IOKhkCDCtyBbTUlERExFIERPVF0KK2NoYXIgXHhCOAkoICAgNCA2ICApICAjIEI4IOKgqCDCuCBbQ0VESUxMQV0KK2NoYXIgXHhCOQkoICAgNCAgNzgpICAjIEI5IOKjiCDCuSBbU1VQRVJTQ1JJUFQgT05FXQorY2hhciBceEJBCSgxIDM0ICAgOCkgICMgQkEg4qKNIMK6IFtNQVNDVUxJTkUgT1JESU5BTCBJTkRJQ0FUT1JdCitjaGFyIFx4QkIJKCAgMyA1Njc4KSAgIyBCQiDio7QgwrsgW1JJR0hULVBPSU5USU5HIERPVUJMRSBBTkdMRSBRVU9UQVRJT04gTUFSS10KK2NoYXIgXHhCQwkoICAzNCAgNzgpICAjIEJDIOKjjCDCvCBbVlVMR0FSIEZSQUNUSU9OIE9ORSBRVUFSVEVSXQorY2hhciBceEJECSggIDM0IDY3OCkgICMgQkQg4qOsIMK9IFtWVUxHQVIgRlJBQ1RJT04gT05FIEhBTEZdCitjaGFyIFx4QkUJKCAgMzQ1Njc4KSAgIyBCRSDio7wgwr4gW1ZVTEdBUiBGUkFDVElPTiBUSFJFRSBRVUFSVEVSU10KK2NoYXIgXHhCRgkoICAzNCAgIDgpICAjIEJGIOKijCDCvyBbSU5WRVJURUQgUVVFU1RJT04gTUFSS10KK2NoYXIgXHhDMAkoMTIzIDU2NzgpICAjIEMwIOKjtyDDgCBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgQSBXSVRIIEdSQVZFXQorY2hhciBceEMxCSggMiAgICA3ICkgICMgQzEg4qGCIMOBIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBBIFdJVEggQUNVVEVdCitjaGFyIFx4QzIJKCAyICAgIDc4KSAgIyBDMiDio4Igw4IgW0xBVElOIENBUElUQUwgTEVUVEVSIEEgV0lUSCBDSVJDVU1GTEVYXQorY2hhciBceEMzCSggMiAgICAgOCkgICMgQzMg4qKCIMODIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBBIFdJVEggVElMREVdCitjaGFyIFx4QzQJKCAgIDQgIDcgKSAgIyBDNCDioYggw4QgW0xBVElOIENBUElUQUwgTEVUVEVSIEEgV0lUSCBESUFFUkVTSVNdCitjaGFyIFx4QzUJKCAgMzQ1NjcgKSAgIyBDNSDiobwgw4UgW0xBVElOIENBUElUQUwgTEVUVEVSIEEgV0lUSCBSSU5HIEFCT1ZFXQorY2hhciBceEM2CSggICA0NSA3ICkgICMgQzYg4qGYIMOGIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBBRV0KK2NoYXIgXHhDNwkoMTIzNCA2NyApICAjIEM3IOKhryDDhyBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgQyBXSVRIIENFRElMTEFdCitjaGFyIFx4QzgJKCAyMzQgNjc4KSAgIyBDOCDio64gw4ggW0xBVElOIENBUElUQUwgTEVUVEVSIEUgV0lUSCBHUkFWRV0KK2NoYXIgXHhDOQkoMTIzNDU2NyApICAjIEM5IOKhvyDDiSBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgRSBXSVRIIEFDVVRFXQorY2hhciBceENBCSggMjMgICA3OCkgICMgQ0Eg4qOGIMOKIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBFIFdJVEggQ0lSQ1VNRkxFWF0KK2NoYXIgXHhDQgkoIDIzIDUgIDgpICAjIENCIOKiliDDiyBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgRSBXSVRIIERJQUVSRVNJU10KK2NoYXIgXHhDQwkoIDIgIDUgIDgpICAjIENDIOKikiDDjCBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgSSBXSVRIIEdSQVZFXQorY2hhciBceENECSggMiAgNSA3ICkgICMgQ0Qg4qGSIMONIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBJIFdJVEggQUNVVEVdCitjaGFyIFx4Q0UJKCAyICA1IDc4KSAgIyBDRSDio5Igw44gW0xBVElOIENBUElUQUwgTEVUVEVSIEkgV0lUSCBDSVJDVU1GTEVYXQorY2hhciBceENGCSggMjMgNTYgOCkgICMgQ0Yg4qK2IMOPIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBJIFdJVEggRElBRVJFU0lTXQorY2hhciBceEQwCSggMjMgICAgOCkgICMgRDAg4qKGIMOQIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBFVEhdCitjaGFyIFx4RDEJKDEyIDQ1NjcgKSAgIyBEMSDiobsgw5EgW0xBVElOIENBUElUQUwgTEVUVEVSIE4gV0lUSCBUSUxERV0KK2NoYXIgXHhEMgkoIDIgIDU2IDgpICAjIEQyIOKisiDDkiBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgTyBXSVRIIEdSQVZFXQorY2hhciBceEQzCSggMiAgNTY3ICkgICMgRDMg4qGyIMOTIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBPIFdJVEggQUNVVEVdCitjaGFyIFx4RDQJKCAyICA1Njc4KSAgIyBENCDio7Igw5QgW0xBVElOIENBUElUQUwgTEVUVEVSIE8gV0lUSCBDSVJDVU1GTEVYXQorY2hhciBceEQ1CSgxMiA0IDY3ICkgICMgRDUg4qGrIMOVIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBPIFdJVEggVElMREVdCitjaGFyIFx4RDYJKCAyIDQgNjcgKSAgIyBENiDioaogw5YgW0xBVElOIENBUElUQUwgTEVUVEVSIE8gV0lUSCBESUFFUkVTSVNdCitjaGFyIFx4RDcJKCAyMzQ1ICA4KSAgIyBENyDiop4gw5cgW01VTFRJUExJQ0FUSU9OIFNJR05dCitjaGFyIFx4RDgJKCAyICAgNiA4KSAgIyBEOCDioqIgw5ggW0xBVElOIENBUElUQUwgTEVUVEVSIE8gV0lUSCBTVFJPS0VdCitjaGFyIFx4RDkJKCAyMzQ1Njc4KSAgIyBEOSDio74gw5kgW0xBVElOIENBUElUQUwgTEVUVEVSIFUgV0lUSCBHUkFWRV0KK2NoYXIgXHhEQQkoIDIgICA2NyApICAjIERBIOKhoiDDmiBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgVSBXSVRIIEFDVVRFXQorY2hhciBceERCCSggMiAgIDY3OCkgICMgREIg4qOiIMObIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBVIFdJVEggQ0lSQ1VNRkxFWF0KK2NoYXIgXHhEQwkoMTIgIDU2NyApICAjIERDIOKhsyDDnCBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgVSBXSVRIIERJQUVSRVNJU10KK2NoYXIgXHhERAkoIDIzICAgNyApICAjIEREIOKhhiDDnSBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgWSBXSVRIIEFDVVRFXQorY2hhciBceERFCSggIDM0IDY3ICkgICMgREUg4qGsIMOeIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBUSE9STl0KK2NoYXIgXHhERgkoIDIgNCA2NzgpICAjIERGIOKjqiDDnyBbTEFUSU4gU01BTEwgTEVUVEVSIFNIQVJQIFNdCitjaGFyIFx4RTAJKDEyMyA1NiA4KSAgIyBFMCDiorcgw6AgW0xBVElOIFNNQUxMIExFVFRFUiBBIFdJVEggR1JBVkVdCitjaGFyIFx4RTEJKDEgICAgNjcgKSAgIyBFMSDioaEgw6EgW0xBVElOIFNNQUxMIExFVFRFUiBBIFdJVEggQUNVVEVdCitjaGFyIFx4RTIJKDEgICAgNjc4KSAgIyBFMiDio6Egw6IgW0xBVElOIFNNQUxMIExFVFRFUiBBIFdJVEggQ0lSQ1VNRkxFWF0KK2NoYXIgXHhFMwkoMSAgICA2IDgpICAjIEUzIOKioSDDoyBbTEFUSU4gU01BTEwgTEVUVEVSIEEgV0lUSCBUSUxERV0KK2NoYXIgXHhFNAkoICAgNCAgIDgpICAjIEU0IOKiiCDDpCBbTEFUSU4gU01BTEwgTEVUVEVSIEEgV0lUSCBESUFFUkVTSVNdCitjaGFyIFx4RTUJKCAgMzQ1NiA4KSAgIyBFNSDiorwgw6UgW0xBVElOIFNNQUxMIExFVFRFUiBBIFdJVEggUklORyBBQk9WRV0KK2NoYXIgXHhFNgkoICAgNDUgIDgpICAjIEU2IOKimCDDpiBbTEFUSU4gU01BTEwgTEVUVEVSIEFFXQorY2hhciBceEU3CSgxMjM0IDYgOCkgICMgRTcg4qKvIMOnIFtMQVRJTiBTTUFMTCBMRVRURVIgQyBXSVRIIENFRElMTEFdCitjaGFyIFx4RTgJKCAyMzQgNiA4KSAgIyBFOCDioq4gw6ggW0xBVElOIFNNQUxMIExFVFRFUiBFIFdJVEggR1JBVkVdCitjaGFyIFx4RTkJKDEyMzQ1NiA4KSAgIyBFOSDior8gw6kgW0xBVElOIFNNQUxMIExFVFRFUiBFIFdJVEggQUNVVEVdCitjaGFyIFx4RUEJKDEyICAgNjc4KSAgIyBFQSDio6Mgw6ogW0xBVElOIFNNQUxMIExFVFRFUiBFIFdJVEggQ0lSQ1VNRkxFWF0KK2NoYXIgXHhFQgkoMTIgNCA2IDgpICAjIEVCIOKiqyDDqyBbTEFUSU4gU01BTEwgTEVUVEVSIEUgV0lUSCBESUFFUkVTSVNdCitjaGFyIFx4RUMJKDEgIDQgNiA4KSAgIyBFQyDioqkgw6wgW0xBVElOIFNNQUxMIExFVFRFUiBJIFdJVEggR1JBVkVdCitjaGFyIFx4RUQJKDEgIDQgNjcgKSAgIyBFRCDioakgw60gW0xBVElOIFNNQUxMIExFVFRFUiBJIFdJVEggQUNVVEVdCitjaGFyIFx4RUUJKDEgIDQgNjc4KSAgIyBFRSDio6kgw64gW0xBVElOIFNNQUxMIExFVFRFUiBJIFdJVEggQ0lSQ1VNRkxFWF0KK2NoYXIgXHhFRgkoMTIgNDU2IDgpICAjIEVGIOKiuyDDryBbTEFUSU4gU01BTEwgTEVUVEVSIEkgV0lUSCBESUFFUkVTSVNdCitjaGFyIFx4RjAJKDEyICAgNiA4KSAgIyBGMCDioqMgw7AgW0xBVElOIFNNQUxMIExFVFRFUiBFVEhdCitjaGFyIFx4RjEJKDEyIDQ1Njc4KSAgIyBGMSDio7sgw7EgW0xBVElOIFNNQUxMIExFVFRFUiBOIFdJVEggVElMREVdCitjaGFyIFx4RjIJKDEgIDQ1NiA4KSAgIyBGMiDiorkgw7IgW0xBVElOIFNNQUxMIExFVFRFUiBPIFdJVEggR1JBVkVdCitjaGFyIFx4RjMJKDEgIDQ1NjcgKSAgIyBGMyDiobkgw7MgW0xBVElOIFNNQUxMIExFVFRFUiBPIFdJVEggQUNVVEVdCitjaGFyIFx4RjQJKDEgIDQ1Njc4KSAgIyBGNCDio7kgw7QgW0xBVElOIFNNQUxMIExFVFRFUiBPIFdJVEggQ0lSQ1VNRkxFWF0KK2NoYXIgXHhGNQkoMTIgNCA2NzgpICAjIEY1IOKjqyDDtSBbTEFUSU4gU01BTEwgTEVUVEVSIE8gV0lUSCBUSUxERV0KK2NoYXIgXHhGNgkoIDIgNCA2IDgpICAjIEY2IOKiqiDDtiBbTEFUSU4gU01BTEwgTEVUVEVSIE8gV0lUSCBESUFFUkVTSVNdCitjaGFyIFx4RjcJKDEgIDQ1ICA4KSAgIyBGNyDiopkgw7cgW0RJVklTSU9OIFNJR05dCitjaGFyIFx4RjgJKDEgICA1NiA4KSAgIyBGOCDiorEgw7ggW0xBVElOIFNNQUxMIExFVFRFUiBPIFdJVEggU1RST0tFXQorY2hhciBceEY5CSggMjM0NTYgOCkgICMgRjkg4qK+IMO5IFtMQVRJTiBTTUFMTCBMRVRURVIgVSBXSVRIIEdSQVZFXQorY2hhciBceEZBCSgxICAgNTY3ICkgICMgRkEg4qGxIMO6IFtMQVRJTiBTTUFMTCBMRVRURVIgVSBXSVRIIEFDVVRFXQorY2hhciBceEZCCSgxICAgNTY3OCkgICMgRkIg4qOxIMO7IFtMQVRJTiBTTUFMTCBMRVRURVIgVSBXSVRIIENJUkNVTUZMRVhdCitjaGFyIFx4RkMJKDEyICA1NiA4KSAgIyBGQyDiorMgw7wgW0xBVElOIFNNQUxMIExFVFRFUiBVIFdJVEggRElBRVJFU0lTXQorY2hhciBceEZECSgxMiAgIDY3ICkgICMgRkQg4qGjIMO9IFtMQVRJTiBTTUFMTCBMRVRURVIgWSBXSVRIIEFDVVRFXQorY2hhciBceEZFCSggIDM0IDYgOCkgICMgRkUg4qKsIMO+IFtMQVRJTiBTTUFMTCBMRVRURVIgVEhPUk5dCitjaGFyIFx4RkYJKDEyICA1Njc4KSAgIyBGRiDio7Mgw78gW0xBVElOIFNNQUxMIExFVFRFUiBZIFdJVEggRElBRVJFU0lTXQorCitpbmNsdWRlIGNvbW1vbi50dGkKZGlmZiAtLWdpdCBhL1RhYmxlcy9UZXh0L2dhLnR0YiBiL1RhYmxlcy9UZXh0L2dhLnR0YgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZjAyMmIxCi0tLSAvZGV2L251bGwKKysrIGIvVGFibGVzL1RleHQvZ2EudHRiCkBAIC0wLDAgKzEsNDkgQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyMgICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisjCisjIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyMKKyMgQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjIEJSTFRUWSBUZXh0IFRhYmxlIC0gSXJpc2gKKyMKKyMgU2FtdWVsIFRoaWJhdWx0IDxzYW11ZWwudGhpYmF1bHRAZW5zLWx5b24ub3JnPgorIyAKKyMgVGhpcyB0YWJsZSBpcyBiYXNlZCBvbiB0aGUgVW5lc2NvIHJlcG9ydCBvbiB0aGUgcHJvZ3Jlc3Mgb2YgdW5pZmljYXRpb24gb2YKKyMgYnJhaWxsZSB3cml0aW5nIMKrwqBMJ8OJQ1JJVFVSRSBCUkFJTExFIERBTlMgTEUgTU9OREXCoMK7LCBieSBTaXIgQ2x1dGhhCisjIE1BQ0tFTlpJRTogaHR0cDovL3VuZXNkb2MudW5lc2NvLm9yZy9pbWFnZXMvMDAxMy8wMDEzNTIvMTM1MjUxZm8ucGRmCisjIFRoZSBkb2N1bWVudCBpcyBkYXRlZCAxOTU0LCBzbyB0aGlzIHRhYmxlIG1heSBiZSBxdWl0ZSBvdXRkYXRlZC4KKworIyB0aGUgc3RhbmRhcmQgcmVwcmVzZW50YXRpb25zIGZvciB0aGUgbGV0dGVycyBvZiB0aGUgTGF0aW4gYWxwaGFiZXQKK2luY2x1ZGUgbHRyLWxhdGluLnR0aQorCisjIGdlbmVyYXRlZCBieSB0dGJ0ZXN0OiBjaGFyc2V0PWxhdGluMQorY2hhciBceEMxCSgxMjM0IDY3ICkgICMgQzEg4qGvIMOBIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBBIFdJVEggQUNVVEVdCitjaGFyIFx4QzkJKDEyMzQ1NjcgKSAgIyBDOSDiob8gw4kgW0xBVElOIENBUElUQUwgTEVUVEVSIEUgV0lUSCBBQ1VURV0KK2NoYXIgXHhDRAkoMTIzIDU2NyApICAjIENEIOKhtyDDjSBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgSSBXSVRIIEFDVVRFXQorY2hhciBceEQzCSggMjM0IDY3ICkgICMgRDMg4qGuIMOTIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBPIFdJVEggQUNVVEVdCitjaGFyIFx4REEJKCAyMzQ1NjcgKSAgIyBEQSDiob4gw5ogW0xBVElOIENBUElUQUwgTEVUVEVSIFUgV0lUSCBBQ1VURV0KK2NoYXIgXHhFMQkoMTIzNCA2ICApICAjIEUxIOKgryDDoSBbTEFUSU4gU01BTEwgTEVUVEVSIEEgV0lUSCBBQ1VURV0KK2NoYXIgXHhFOQkoMTIzNDU2ICApICAjIEU5IOKgvyDDqSBbTEFUSU4gU01BTEwgTEVUVEVSIEUgV0lUSCBBQ1VURV0KK2NoYXIgXHhFRAkoMTIzIDU2ICApICAjIEVEIOKgtyDDrSBbTEFUSU4gU01BTEwgTEVUVEVSIEkgV0lUSCBBQ1VURV0KK2NoYXIgXHhGMwkoIDIzNCA2ICApICAjIEYzIOKgriDDsyBbTEFUSU4gU01BTEwgTEVUVEVSIE8gV0lUSCBBQ1VURV0KK2NoYXIgXHhGQQkoIDIzNDU2ICApICAjIEZBIOKgviDDuiBbTEFUSU4gU01BTEwgTEVUVEVSIFUgV0lUSCBBQ1VURV0KKworCisjIHRoZSBudW1iZXJzIDAtOSBhcmUgcmVwcmVzZW50ZWQgYnkgdGhlIGxldHRlcnMgaixhLWkgd2l0aCBkb3QgOCBhZGRlZAoraW5jbHVkZSBudW0tZG90OC50dGkKKworaW5jbHVkZSBwdW5jLWJhc2ljLnR0aQorCitpbmNsdWRlIGNvbW1vbi50dGkKZGlmZiAtLWdpdCBhL1RhYmxlcy9UZXh0L2dkLnR0YiBiL1RhYmxlcy9UZXh0L2dkLnR0YgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42Yzc4OWQyCi0tLSAvZGV2L251bGwKKysrIGIvVGFibGVzL1RleHQvZ2QudHRiCkBAIC0wLDAgKzEsNjggQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyMgICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisjCisjIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyMKKyMgQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjIEJSTFRUWSBUZXh0IFRhYmxlIC0gR2FlbGljCisjCisjIFNhbXVlbCBUaGliYXVsdCA8c2FtdWVsLnRoaWJhdWx0QGVucy1seW9uLm9yZz4KKyMgCisjIFRoaXMgdGFibGUgaXMgYmFzZWQgb24gdGhlIFVuZXNjbyByZXBvcnQgb24gdGhlIHByb2dyZXNzIG9mIHVuaWZpY2F0aW9uIG9mCisjIGJyYWlsbGUgd3JpdGluZyDCq8KgTCfDiUNSSVRVUkUgQlJBSUxMRSBEQU5TIExFIE1PTkRFwqDCuywgYnkgU2lyIENsdXRoYQorIyBNQUNLRU5aSUU6IGh0dHA6Ly91bmVzZG9jLnVuZXNjby5vcmcvaW1hZ2VzLzAwMTMvMDAxMzUyLzEzNTI1MWZvLnBkZgorIyBUaGUgZG9jdW1lbnQgaXMgZGF0ZWQgMTk1NCwgc28gdGhpcyB0YWJsZSBtYXkgYmUgcXVpdGUgb3V0ZGF0ZWQuCisKKyMgdGhlIHN0YW5kYXJkIHJlcHJlc2VudGF0aW9ucyBmb3IgdGhlIGxldHRlcnMgb2YgdGhlIExhdGluIGFscGhhYmV0CitpbmNsdWRlIGx0ci1sYXRpbi50dGkKKworIyBsb3dlcmNhc2UgYWNjZW50ZWQgbGV0dGVycworY2hhciBceEUxCSgxMjM0IDYgICkgICMg4qCvIMOhIFtMQVRJTiBTTUFMTCBMRVRURVIgQSBXSVRIIEFDVVRFXQorY2hhciBceEU5CSgxMjM0NTYgICkgICMg4qC/IMOpIFtMQVRJTiBTTUFMTCBMRVRURVIgRSBXSVRIIEFDVVRFXQorY2hhciBceEVECSgxMjMgNTYgICkgICMg4qC3IMOtIFtMQVRJTiBTTUFMTCBMRVRURVIgSSBXSVRIIEFDVVRFXQorY2hhciBceEYzCSggMjM0IDYgICkgICMg4qCuIMOzIFtMQVRJTiBTTUFMTCBMRVRURVIgTyBXSVRIIEFDVVRFXQorY2hhciBceEZBCSggMjM0NTYgICkgICMg4qC+IMO6IFtMQVRJTiBTTUFMTCBMRVRURVIgVSBXSVRIIEFDVVRFXQorY2hhciBcdTFFMDMJKDEyICAgNiAgKSAgIyDioKMg4biDIFtMQVRJTiBTTUFMTCBMRVRURVIgQiBXSVRIIERPVCBBQk9WRV0KK2NoYXIgXHUwMTBCCSgxICA0IDYgICkgICMg4qCpIMSLIFtMQVRJTiBTTUFMTCBMRVRURVIgQyBXSVRIIERPVCBBQk9WRV0KK2NoYXIgXHUxRTBCCSgxICA0NTYgICkgICMg4qC5IOG4iyBbTEFUSU4gU01BTEwgTEVUVEVSIEQgV0lUSCBET1QgQUJPVkVdCitjaGFyIFx1MUUxRgkoMSAgIDU2ICApICAjIOKgsSDhuJ8gW0xBVElOIFNNQUxMIExFVFRFUiBGIFdJVEggRE9UIEFCT1ZFXQorY2hhciBcdTAxMjEJKDEyIDQgNiAgKSAgIyDioKsgxKEgW0xBVElOIFNNQUxMIExFVFRFUiBHIFdJVEggRE9UIEFCT1ZFXQorY2hhciBcdTFFNDEJKDEyIDQ1NiAgKSAgIyDioLsg4bmBIFtMQVRJTiBTTUFMTCBMRVRURVIgTSBXSVRIIERPVCBBQk9WRV0KK2NoYXIgXHUxRTU3CSgxMiAgNTYgICkgICMg4qCzIOG5lyBbTEFUSU4gU01BTEwgTEVUVEVSIFAgV0lUSCBET1QgQUJPVkVdCitjaGFyIFx1MUU2MQkoIDIgNCA2ICApICAjIOKgqiDhuaEgW0xBVElOIFNNQUxMIExFVFRFUiBTIFdJVEggRE9UIEFCT1ZFXQorY2hhciBcdTFFNkIJKCAyIDQ1NiAgKSAgIyDioLog4bmrIFtMQVRJTiBTTUFMTCBMRVRURVIgVCBXSVRIIERPVCBBQk9WRV0KKworIyB1cHBlcmNhc2UgYWNjZW50ZWQgbGV0dGVycworY2hhciBceEMxCSgxMjM0IDY3ICkgICMg4qGvIMOBIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBBIFdJVEggQUNVVEVdCitjaGFyIFx4QzkJKDEyMzQ1NjcgKSAgIyDiob8gw4kgW0xBVElOIENBUElUQUwgTEVUVEVSIEUgV0lUSCBBQ1VURV0KK2NoYXIgXHhDRAkoMTIzIDU2NyApICAjIOKhtyDDjSBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgSSBXSVRIIEFDVVRFXQorY2hhciBceEQzCSggMjM0IDY3ICkgICMg4qGuIMOTIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBPIFdJVEggQUNVVEVdCitjaGFyIFx4REEJKCAyMzQ1NjcgKSAgIyDiob4gw5ogW0xBVElOIENBUElUQUwgTEVUVEVSIFUgV0lUSCBBQ1VURV0KK2NoYXIgXHUxRTAyCSgxMiAgIDY3ICkgICMg4qGjIOG4giBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgQiBXSVRIIERPVCBBQk9WRV0KK2NoYXIgXHUwMTBBCSgxICA0IDY3ICkgICMg4qGpIMSKIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBDIFdJVEggRE9UIEFCT1ZFXQorY2hhciBcdTFFMEEJKDEgIDQ1NjcgKSAgIyDiobkg4biKIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBEIFdJVEggRE9UIEFCT1ZFXQorY2hhciBcdTFFMUUJKDEgICA1NjcgKSAgIyDiobEg4bieIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBGIFdJVEggRE9UIEFCT1ZFXQorY2hhciBcdTAxMjAJKDEyIDQgNjcgKSAgIyDioasgxKAgW0xBVElOIENBUElUQUwgTEVUVEVSIEcgV0lUSCBET1QgQUJPVkVdCitjaGFyIFx1MUU0MAkoMTIgNDU2NyApICAjIOKhuyDhuYAgW0xBVElOIENBUElUQUwgTEVUVEVSIE0gV0lUSCBET1QgQUJPVkVdCitjaGFyIFx1MUU1NgkoMTIgIDU2NyApICAjIOKhsyDhuZYgW0xBVElOIENBUElUQUwgTEVUVEVSIFAgV0lUSCBET1QgQUJPVkVdCitjaGFyIFx1MUU2MAkoIDIgNCA2NyApICAjIOKhqiDhuaAgW0xBVElOIENBUElUQUwgTEVUVEVSIFMgV0lUSCBET1QgQUJPVkVdCitjaGFyIFx1MUU2QQkoIDIgNDU2NyApICAjIOKhuiDhuaogW0xBVElOIENBUElUQUwgTEVUVEVSIFQgV0lUSCBET1QgQUJPVkVdCisKKyMgdGhlIG51bWJlcnMgMC05IGFyZSByZXByZXNlbnRlZCBieSB0aGUgbGV0dGVycyBqLGEtaSB3aXRoIGRvdCA4IGFkZGVkCitpbmNsdWRlIG51bS1kb3Q4LnR0aQorCitpbmNsdWRlIHB1bmMtYmFzaWMudHRpCisKK2luY2x1ZGUgY29tbW9uLnR0aQpkaWZmIC0tZ2l0IGEvVGFibGVzL1RleHQvZ29uLnR0YiBiL1RhYmxlcy9UZXh0L2dvbi50dGIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDk4OTUzNQotLS0gL2Rldi9udWxsCisrKyBiL1RhYmxlcy9UZXh0L2dvbi50dGIKQEAgLTAsMCArMSwyNSBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorIyAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyMKKyMgQ29weXJpZ2h0IChDKSAyMDA4LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorIworIyBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorIworIyBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisjIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyMgbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisjCisjIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMgQlJMVFRZIFRleHQgVGFibGUgLSBHb25kaQorCitpbmNsdWRlIGRldmFuYWdhcmkudHRpCitpbmNsdWRlIHRlbHVndS50dGkKK2luY2x1ZGUgYXNjaWktYmFzaWMudHRpCisKK2luY2x1ZGUgY29tbW9uLnR0aQpkaWZmIC0tZ2l0IGEvVGFibGVzL1RleHQvZ3JlZWsudHRpIGIvVGFibGVzL1RleHQvZ3JlZWsudHRpCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI0MjAwMWMKLS0tIC9kZXYvbnVsbAorKysgYi9UYWJsZXMvVGV4dC9ncmVlay50dGkKQEAgLTAsMCArMSwzMjMgQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyMgICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisjCisjIENvcHlyaWdodCAoQykgMjAwOC0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyMKKyMgQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjIFRoaXMgQlJMVFRZIHRleHQgc3VidGFibGUgZGVmaW5lcyB0aGUgYnJhaWxsZSByZXByZXNlbnRhdGlvbnMKKyMgZm9yIGNoYXJhY3RlcnMgdGhhdCBhcmUgdW5pcXVlIHRvIHRoZSBHcmVlayBsYW5ndWFnZS4KKyMgRG90IDcgcmVwcmVzZW50cyB1cHBlcmNhc2UuCisjIERvdCA4IHJlcHJlc2VudHMgdGhlIGFjdXRlICh0b25vcyBvciBveGlhKSBhY2NlbnQuCisjIE1haW50YWluZWQgYnk6IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4KKworY2hhcglcdTAzN0UJKCAyICAgNiAgKQkjIOKgoiDNviBbR1JFRUsgUVVFU1RJT04gTUFSS10KK2dseXBoCVx1MDM4NAkoICAgIDUgICApCSMg4qCQIM6EIFtHUkVFSyBUT05PU10KK2NoYXIJXHUwMzg2CSgxICAgICA3OCkJIyDio4EgzoYgW0dSRUVLIENBUElUQUwgTEVUVEVSIEFMUEhBIFdJVEggVE9OT1NdCitjaGFyCVx1MDM4NwkoIDIzICAgICApCSMg4qCGIM6HIFtHUkVFSyBBTk8gVEVMRUlBXQorY2hhcglcdTAzODgJKDEgICA1IDc4KQkjIOKjkSDOiCBbR1JFRUsgQ0FQSVRBTCBMRVRURVIgRVBTSUxPTiBXSVRIIFRPTk9TXQorY2hhcglcdTAzODkJKCAgMzQ1IDc4KQkjIOKjnCDOiSBbR1JFRUsgQ0FQSVRBTCBMRVRURVIgRVRBIFdJVEggVE9OT1NdCitjaGFyCVx1MDM4QQkoIDIgNCAgNzgpCSMg4qOKIM6KIFtHUkVFSyBDQVBJVEFMIExFVFRFUiBJT1RBIFdJVEggVE9OT1NdCitjaGFyCVx1MDM4QwkoMSAzIDUgNzgpCSMg4qOVIM6MIFtHUkVFSyBDQVBJVEFMIExFVFRFUiBPTUlDUk9OIFdJVEggVE9OT1NdCitjaGFyCVx1MDM4RQkoMSAzNDU2NzgpCSMg4qO9IM6OIFtHUkVFSyBDQVBJVEFMIExFVFRFUiBVUFNJTE9OIFdJVEggVE9OT1NdCitjaGFyCVx1MDM4RgkoIDIgNDUgNzgpCSMg4qOaIM6PIFtHUkVFSyBDQVBJVEFMIExFVFRFUiBPTUVHQSBXSVRIIFRPTk9TXQorZ2x5cGgJXHUwMzkwCSggMiA0ICAgOCkJIyDiooogzpAgW0dSRUVLIFNNQUxMIExFVFRFUiBJT1RBIFdJVEggRElBTFlUSUtBIEFORCBUT05PU10KK2NoYXIJXHUwMzkxCSgxICAgICA3ICkJIyDioYEgzpEgW0dSRUVLIENBUElUQUwgTEVUVEVSIEFMUEhBXQorY2hhcglcdTAzOTIJKDEyICAgIDcgKQkjIOKhgyDOkiBbR1JFRUsgQ0FQSVRBTCBMRVRURVIgQkVUQV0KK2NoYXIJXHUwMzkzCSgxMiA0NSA3ICkJIyDioZsgzpMgW0dSRUVLIENBUElUQUwgTEVUVEVSIEdBTU1BXQorY2hhcglcdTAzOTQJKDEgIDQ1IDcgKQkjIOKhmSDOlCBbR1JFRUsgQ0FQSVRBTCBMRVRURVIgREVMVEFdCitjaGFyCVx1MDM5NQkoMSAgIDUgNyApCSMg4qGRIM6VIFtHUkVFSyBDQVBJVEFMIExFVFRFUiBFUFNJTE9OXQorY2hhcglcdTAzOTYJKDEgMyA1NjcgKQkjIOKhtSDOliBbR1JFRUsgQ0FQSVRBTCBMRVRURVIgWkVUQV0KK2NoYXIJXHUwMzk3CSggIDM0NSA3ICkJIyDioZwgzpcgW0dSRUVLIENBUElUQUwgTEVUVEVSIEVUQV0KK2NoYXIJXHUwMzk4CSgxICA0NTY3ICkJIyDiobkgzpggW0dSRUVLIENBUElUQUwgTEVUVEVSIFRIRVRBXQorY2hhcglcdTAzOTkJKCAyIDQgIDcgKQkjIOKhiiDOmSBbR1JFRUsgQ0FQSVRBTCBMRVRURVIgSU9UQV0KK2NoYXIJXHUwMzlBCSgxIDMgICA3ICkJIyDioYUgzpogW0dSRUVLIENBUElUQUwgTEVUVEVSIEtBUFBBXQorY2hhcglcdTAzOUIJKDEyMyAgIDcgKQkjIOKhhyDOmyBbR1JFRUsgQ0FQSVRBTCBMRVRURVIgTEFNREFdCitjaGFyCVx1MDM5QwkoMSAzNCAgNyApCSMg4qGNIM6cIFtHUkVFSyBDQVBJVEFMIExFVFRFUiBNVV0KK2NoYXIJXHUwMzlECSgxIDM0NSA3ICkJIyDioZ0gzp0gW0dSRUVLIENBUElUQUwgTEVUVEVSIE5VXQorY2hhcglcdTAzOUUJKDEgMzQgNjcgKQkjIOKhrSDOniBbR1JFRUsgQ0FQSVRBTCBMRVRURVIgWEldCitjaGFyCVx1MDM5RgkoMSAzIDUgNyApCSMg4qGVIM6fIFtHUkVFSyBDQVBJVEFMIExFVFRFUiBPTUlDUk9OXQorY2hhcglcdTAzQTAJKDEyMzQgIDcgKQkjIOKhjyDOoCBbR1JFRUsgQ0FQSVRBTCBMRVRURVIgUEldCitjaGFyCVx1MDNBMQkoMTIzIDUgNyApCSMg4qGXIM6hIFtHUkVFSyBDQVBJVEFMIExFVFRFUiBSSE9dCitjaGFyCVx1MDNBMwkoIDIzNCAgNyApCSMg4qGOIM6jIFtHUkVFSyBDQVBJVEFMIExFVFRFUiBTSUdNQV0KK2NoYXIJXHUwM0E0CSggMjM0NSA3ICkJIyDioZ4gzqQgW0dSRUVLIENBUElUQUwgTEVUVEVSIFRBVV0KK2NoYXIJXHUwM0E1CSgxIDM0NTY3ICkJIyDiob0gzqUgW0dSRUVLIENBUElUQUwgTEVUVEVSIFVQU0lMT05dCitjaGFyCVx1MDNBNgkoMTIgNCAgNyApCSMg4qGLIM6mIFtHUkVFSyBDQVBJVEFMIExFVFRFUiBQSEldCitjaGFyCVx1MDNBNwkoMTIgIDUgNyApCSMg4qGTIM6nIFtHUkVFSyBDQVBJVEFMIExFVFRFUiBDSEldCitjaGFyCVx1MDNBOAkoMTIzNCA2NyApCSMg4qGvIM6oIFtHUkVFSyBDQVBJVEFMIExFVFRFUiBQU0ldCitjaGFyCVx1MDNBOQkoIDIgNDUgNyApCSMg4qGaIM6pIFtHUkVFSyBDQVBJVEFMIExFVFRFUiBPTUVHQV0KK2dseXBoCVx1MDNBQQkoIDIgNCAgNyApCSMg4qGKIM6qIFtHUkVFSyBDQVBJVEFMIExFVFRFUiBJT1RBIFdJVEggRElBTFlUSUtBXQorZ2x5cGgJXHUwM0FCCSgxIDM0NTY3ICkJIyDiob0gzqsgW0dSRUVLIENBUElUQUwgTEVUVEVSIFVQU0lMT04gV0lUSCBESUFMWVRJS0FdCitjaGFyCVx1MDNBQwkoMSAgICAgIDgpCSMg4qKBIM6sIFtHUkVFSyBTTUFMTCBMRVRURVIgQUxQSEEgV0lUSCBUT05PU10KK2NoYXIJXHUwM0FECSgxICAgNSAgOCkJIyDiopEgzq0gW0dSRUVLIFNNQUxMIExFVFRFUiBFUFNJTE9OIFdJVEggVE9OT1NdCitjaGFyCVx1MDNBRQkoICAzNDUgIDgpCSMg4qKcIM6uIFtHUkVFSyBTTUFMTCBMRVRURVIgRVRBIFdJVEggVE9OT1NdCitjaGFyCVx1MDNBRgkoIDIgNCAgIDgpCSMg4qKKIM6vIFtHUkVFSyBTTUFMTCBMRVRURVIgSU9UQSBXSVRIIFRPTk9TXQorZ2x5cGgJXHUwM0IwCSgxIDM0NTYgOCkJIyDior0gzrAgW0dSRUVLIFNNQUxMIExFVFRFUiBVUFNJTE9OIFdJVEggRElBTFlUSUtBIEFORCBUT05PU10KK2NoYXIJXHUwM0IxCSgxICAgICAgICkJIyDioIEgzrEgW0dSRUVLIFNNQUxMIExFVFRFUiBBTFBIQV0KK2NoYXIJXHUwM0IyCSgxMiAgICAgICkJIyDioIMgzrIgW0dSRUVLIFNNQUxMIExFVFRFUiBCRVRBXQorY2hhcglcdTAzQjMJKDEyIDQ1ICAgKQkjIOKgmyDOsyBbR1JFRUsgU01BTEwgTEVUVEVSIEdBTU1BXQorY2hhcglcdTAzQjQJKDEgIDQ1ICAgKQkjIOKgmSDOtCBbR1JFRUsgU01BTEwgTEVUVEVSIERFTFRBXQorY2hhcglcdTAzQjUJKDEgICA1ICAgKQkjIOKgkSDOtSBbR1JFRUsgU01BTEwgTEVUVEVSIEVQU0lMT05dCitjaGFyCVx1MDNCNgkoMSAzIDU2ICApCSMg4qC1IM62IFtHUkVFSyBTTUFMTCBMRVRURVIgWkVUQV0KK2NoYXIJXHUwM0I3CSggIDM0NSAgICkJIyDioJwgzrcgW0dSRUVLIFNNQUxMIExFVFRFUiBFVEFdCitjaGFyCVx1MDNCOAkoMSAgNDU2ICApCSMg4qC5IM64IFtHUkVFSyBTTUFMTCBMRVRURVIgVEhFVEFdCitjaGFyCVx1MDNCOQkoIDIgNCAgICApCSMg4qCKIM65IFtHUkVFSyBTTUFMTCBMRVRURVIgSU9UQV0KK2NoYXIJXHUwM0JBCSgxIDMgICAgICkJIyDioIUgzrogW0dSRUVLIFNNQUxMIExFVFRFUiBLQVBQQV0KK2NoYXIJXHUwM0JCCSgxMjMgICAgICkJIyDioIcgzrsgW0dSRUVLIFNNQUxMIExFVFRFUiBMQU1EQV0KK2NoYXIJXHUwM0JDCSgxIDM0ICAgICkJIyDioI0gzrwgW0dSRUVLIFNNQUxMIExFVFRFUiBNVV0KK2NoYXIJXHUwM0JECSgxIDM0NSAgICkJIyDioJ0gzr0gW0dSRUVLIFNNQUxMIExFVFRFUiBOVV0KK2NoYXIJXHUwM0JFCSgxIDM0IDYgICkJIyDioK0gzr4gW0dSRUVLIFNNQUxMIExFVFRFUiBYSV0KK2NoYXIJXHUwM0JGCSgxIDMgNSAgICkJIyDioJUgzr8gW0dSRUVLIFNNQUxMIExFVFRFUiBPTUlDUk9OXQorY2hhcglcdTAzQzAJKDEyMzQgICAgKQkjIOKgjyDPgCBbR1JFRUsgU01BTEwgTEVUVEVSIFBJXQorY2hhcglcdTAzQzEJKDEyMyA1ICAgKQkjIOKglyDPgSBbR1JFRUsgU01BTEwgTEVUVEVSIFJIT10KK2dseXBoCVx1MDNDMgkoIDIzNCAgICApCSMg4qCOIM+CIFtHUkVFSyBTTUFMTCBMRVRURVIgRklOQUwgU0lHTUFdCitjaGFyCVx1MDNDMwkoIDIzNCAgICApCSMg4qCOIM+DIFtHUkVFSyBTTUFMTCBMRVRURVIgU0lHTUFdCitjaGFyCVx1MDNDNAkoIDIzNDUgICApCSMg4qCeIM+EIFtHUkVFSyBTTUFMTCBMRVRURVIgVEFVXQorY2hhcglcdTAzQzUJKDEgMzQ1NiAgKQkjIOKgvSDPhSBbR1JFRUsgU01BTEwgTEVUVEVSIFVQU0lMT05dCitjaGFyCVx1MDNDNgkoMTIgNCAgICApCSMg4qCLIM+GIFtHUkVFSyBTTUFMTCBMRVRURVIgUEhJXQorY2hhcglcdTAzQzcJKDEyICA1ICAgKQkjIOKgkyDPhyBbR1JFRUsgU01BTEwgTEVUVEVSIENISV0KK2NoYXIJXHUwM0M4CSgxMjM0IDYgICkJIyDioK8gz4ggW0dSRUVLIFNNQUxMIExFVFRFUiBQU0ldCitjaGFyCVx1MDNDOQkoIDIgNDUgICApCSMg4qCaIM+JIFtHUkVFSyBTTUFMTCBMRVRURVIgT01FR0FdCitnbHlwaAlcdTAzQ0EJKCAyIDQgICAgKQkjIOKgiiDPiiBbR1JFRUsgU01BTEwgTEVUVEVSIElPVEEgV0lUSCBESUFMWVRJS0FdCitnbHlwaAlcdTAzQ0IJKDEgMzQ1NiAgKQkjIOKgvSDPiyBbR1JFRUsgU01BTEwgTEVUVEVSIFVQU0lMT04gV0lUSCBESUFMWVRJS0FdCitjaGFyCVx1MDNDQwkoMSAzIDUgIDgpCSMg4qKVIM+MIFtHUkVFSyBTTUFMTCBMRVRURVIgT01JQ1JPTiBXSVRIIFRPTk9TXQorY2hhcglcdTAzQ0QJKDEgMzQ1NiA4KQkjIOKivSDPjSBbR1JFRUsgU01BTEwgTEVUVEVSIFVQU0lMT04gV0lUSCBUT05PU10KK2NoYXIJXHUwM0NFCSggMiA0NSAgOCkJIyDiopogz44gW0dSRUVLIFNNQUxMIExFVFRFUiBPTUVHQSBXSVRIIFRPTk9TXQorZ2x5cGgJXHUxRjAwCSgxICAgICAgICkJIyDioIEg4byAIFtHUkVFSyBTTUFMTCBMRVRURVIgQUxQSEEgV0lUSCBQU0lMSV0KK2dseXBoCVx1MUYwMQkoMSAgICAgICApCSMg4qCBIOG8gSBbR1JFRUsgU01BTEwgTEVUVEVSIEFMUEhBIFdJVEggREFTSUFdCitnbHlwaAlcdTFGMDIJKDEgICAgICAgKQkjIOKggSDhvIIgW0dSRUVLIFNNQUxMIExFVFRFUiBBTFBIQSBXSVRIIFBTSUxJIEFORCBWQVJJQV0KK2dseXBoCVx1MUYwMwkoMSAgICAgICApCSMg4qCBIOG8gyBbR1JFRUsgU01BTEwgTEVUVEVSIEFMUEhBIFdJVEggREFTSUEgQU5EIFZBUklBXQorZ2x5cGgJXHUxRjA0CSgxICAgICAgOCkJIyDiooEg4byEIFtHUkVFSyBTTUFMTCBMRVRURVIgQUxQSEEgV0lUSCBQU0lMSSBBTkQgT1hJQV0KK2dseXBoCVx1MUYwNQkoMSAgICAgIDgpCSMg4qKBIOG8hSBbR1JFRUsgU01BTEwgTEVUVEVSIEFMUEhBIFdJVEggREFTSUEgQU5EIE9YSUFdCitnbHlwaAlcdTFGMDYJKDEgICAgICAgKQkjIOKggSDhvIYgW0dSRUVLIFNNQUxMIExFVFRFUiBBTFBIQSBXSVRIIFBTSUxJIEFORCBQRVJJU1BPTUVOSV0KK2dseXBoCVx1MUYwNwkoMSAgICAgICApCSMg4qCBIOG8hyBbR1JFRUsgU01BTEwgTEVUVEVSIEFMUEhBIFdJVEggREFTSUEgQU5EIFBFUklTUE9NRU5JXQorZ2x5cGgJXHUxRjA4CSgxICAgICA3ICkJIyDioYEg4byIIFtHUkVFSyBDQVBJVEFMIExFVFRFUiBBTFBIQSBXSVRIIFBTSUxJXQorZ2x5cGgJXHUxRjA5CSgxICAgICA3ICkJIyDioYEg4byJIFtHUkVFSyBDQVBJVEFMIExFVFRFUiBBTFBIQSBXSVRIIERBU0lBXQorZ2x5cGgJXHUxRjBBCSgxICAgICA3ICkJIyDioYEg4byKIFtHUkVFSyBDQVBJVEFMIExFVFRFUiBBTFBIQSBXSVRIIFBTSUxJIEFORCBWQVJJQV0KK2dseXBoCVx1MUYwQgkoMSAgICAgNyApCSMg4qGBIOG8iyBbR1JFRUsgQ0FQSVRBTCBMRVRURVIgQUxQSEEgV0lUSCBEQVNJQSBBTkQgVkFSSUFdCitnbHlwaAlcdTFGMEMJKDEgICAgIDc4KQkjIOKjgSDhvIwgW0dSRUVLIENBUElUQUwgTEVUVEVSIEFMUEhBIFdJVEggUFNJTEkgQU5EIE9YSUFdCitnbHlwaAlcdTFGMEQJKDEgICAgIDc4KQkjIOKjgSDhvI0gW0dSRUVLIENBUElUQUwgTEVUVEVSIEFMUEhBIFdJVEggREFTSUEgQU5EIE9YSUFdCitnbHlwaAlcdTFGMEUJKDEgICAgIDcgKQkjIOKhgSDhvI4gW0dSRUVLIENBUElUQUwgTEVUVEVSIEFMUEhBIFdJVEggUFNJTEkgQU5EIFBFUklTUE9NRU5JXQorZ2x5cGgJXHUxRjBGCSgxICAgICA3ICkJIyDioYEg4byPIFtHUkVFSyBDQVBJVEFMIExFVFRFUiBBTFBIQSBXSVRIIERBU0lBIEFORCBQRVJJU1BPTUVOSV0KK2dseXBoCVx1MUYxMAkoMSAgIDUgICApCSMg4qCRIOG8kCBbR1JFRUsgU01BTEwgTEVUVEVSIEVQU0lMT04gV0lUSCBQU0lMSV0KK2dseXBoCVx1MUYxMQkoMSAgIDUgICApCSMg4qCRIOG8kSBbR1JFRUsgU01BTEwgTEVUVEVSIEVQU0lMT04gV0lUSCBEQVNJQV0KK2dseXBoCVx1MUYxMgkoMSAgIDUgICApCSMg4qCRIOG8kiBbR1JFRUsgU01BTEwgTEVUVEVSIEVQU0lMT04gV0lUSCBQU0lMSSBBTkQgVkFSSUFdCitnbHlwaAlcdTFGMTMJKDEgICA1ICAgKQkjIOKgkSDhvJMgW0dSRUVLIFNNQUxMIExFVFRFUiBFUFNJTE9OIFdJVEggREFTSUEgQU5EIFZBUklBXQorZ2x5cGgJXHUxRjE0CSgxICAgNSAgOCkJIyDiopEg4byUIFtHUkVFSyBTTUFMTCBMRVRURVIgRVBTSUxPTiBXSVRIIFBTSUxJIEFORCBPWElBXQorZ2x5cGgJXHUxRjE1CSgxICAgNSAgOCkJIyDiopEg4byVIFtHUkVFSyBTTUFMTCBMRVRURVIgRVBTSUxPTiBXSVRIIERBU0lBIEFORCBPWElBXQorZ2x5cGgJXHUxRjE4CSgxICAgNSA3ICkJIyDioZEg4byYIFtHUkVFSyBDQVBJVEFMIExFVFRFUiBFUFNJTE9OIFdJVEggUFNJTEldCitnbHlwaAlcdTFGMTkJKDEgICA1IDcgKQkjIOKhkSDhvJkgW0dSRUVLIENBUElUQUwgTEVUVEVSIEVQU0lMT04gV0lUSCBEQVNJQV0KK2dseXBoCVx1MUYxQQkoMSAgIDUgNyApCSMg4qGRIOG8miBbR1JFRUsgQ0FQSVRBTCBMRVRURVIgRVBTSUxPTiBXSVRIIFBTSUxJIEFORCBWQVJJQV0KK2dseXBoCVx1MUYxQgkoMSAgIDUgNyApCSMg4qGRIOG8myBbR1JFRUsgQ0FQSVRBTCBMRVRURVIgRVBTSUxPTiBXSVRIIERBU0lBIEFORCBWQVJJQV0KK2dseXBoCVx1MUYxQwkoMSAgIDUgNzgpCSMg4qORIOG8nCBbR1JFRUsgQ0FQSVRBTCBMRVRURVIgRVBTSUxPTiBXSVRIIFBTSUxJIEFORCBPWElBXQorZ2x5cGgJXHUxRjFECSgxICAgNSA3OCkJIyDio5Eg4bydIFtHUkVFSyBDQVBJVEFMIExFVFRFUiBFUFNJTE9OIFdJVEggREFTSUEgQU5EIE9YSUFdCitnbHlwaAlcdTFGMjAJKCAgMzQ1ICAgKQkjIOKgnCDhvKAgW0dSRUVLIFNNQUxMIExFVFRFUiBFVEEgV0lUSCBQU0lMSV0KK2dseXBoCVx1MUYyMQkoICAzNDUgICApCSMg4qCcIOG8oSBbR1JFRUsgU01BTEwgTEVUVEVSIEVUQSBXSVRIIERBU0lBXQorZ2x5cGgJXHUxRjIyCSggIDM0NSAgICkJIyDioJwg4byiIFtHUkVFSyBTTUFMTCBMRVRURVIgRVRBIFdJVEggUFNJTEkgQU5EIFZBUklBXQorZ2x5cGgJXHUxRjIzCSggIDM0NSAgICkJIyDioJwg4byjIFtHUkVFSyBTTUFMTCBMRVRURVIgRVRBIFdJVEggREFTSUEgQU5EIFZBUklBXQorZ2x5cGgJXHUxRjI0CSggIDM0NSAgOCkJIyDiopwg4bykIFtHUkVFSyBTTUFMTCBMRVRURVIgRVRBIFdJVEggUFNJTEkgQU5EIE9YSUFdCitnbHlwaAlcdTFGMjUJKCAgMzQ1ICA4KQkjIOKinCDhvKUgW0dSRUVLIFNNQUxMIExFVFRFUiBFVEEgV0lUSCBEQVNJQSBBTkQgT1hJQV0KK2dseXBoCVx1MUYyNgkoICAzNDUgICApCSMg4qCcIOG8piBbR1JFRUsgU01BTEwgTEVUVEVSIEVUQSBXSVRIIFBTSUxJIEFORCBQRVJJU1BPTUVOSV0KK2dseXBoCVx1MUYyNwkoICAzNDUgICApCSMg4qCcIOG8pyBbR1JFRUsgU01BTEwgTEVUVEVSIEVUQSBXSVRIIERBU0lBIEFORCBQRVJJU1BPTUVOSV0KK2dseXBoCVx1MUYyOAkoICAzNDUgNyApCSMg4qGcIOG8qCBbR1JFRUsgQ0FQSVRBTCBMRVRURVIgRVRBIFdJVEggUFNJTEldCitnbHlwaAlcdTFGMjkJKCAgMzQ1IDcgKQkjIOKhnCDhvKkgW0dSRUVLIENBUElUQUwgTEVUVEVSIEVUQSBXSVRIIERBU0lBXQorZ2x5cGgJXHUxRjJBCSggIDM0NSA3ICkJIyDioZwg4byqIFtHUkVFSyBDQVBJVEFMIExFVFRFUiBFVEEgV0lUSCBQU0lMSSBBTkQgVkFSSUFdCitnbHlwaAlcdTFGMkIJKCAgMzQ1IDcgKQkjIOKhnCDhvKsgW0dSRUVLIENBUElUQUwgTEVUVEVSIEVUQSBXSVRIIERBU0lBIEFORCBWQVJJQV0KK2dseXBoCVx1MUYyQwkoICAzNDUgNzgpCSMg4qOcIOG8rCBbR1JFRUsgQ0FQSVRBTCBMRVRURVIgRVRBIFdJVEggUFNJTEkgQU5EIE9YSUFdCitnbHlwaAlcdTFGMkQJKCAgMzQ1IDc4KQkjIOKjnCDhvK0gW0dSRUVLIENBUElUQUwgTEVUVEVSIEVUQSBXSVRIIERBU0lBIEFORCBPWElBXQorZ2x5cGgJXHUxRjJFCSggIDM0NSA3ICkJIyDioZwg4byuIFtHUkVFSyBDQVBJVEFMIExFVFRFUiBFVEEgV0lUSCBQU0lMSSBBTkQgUEVSSVNQT01FTkldCitnbHlwaAlcdTFGMkYJKCAgMzQ1IDcgKQkjIOKhnCDhvK8gW0dSRUVLIENBUElUQUwgTEVUVEVSIEVUQSBXSVRIIERBU0lBIEFORCBQRVJJU1BPTUVOSV0KK2dseXBoCVx1MUYzMAkoIDIgNCAgICApCSMg4qCKIOG8sCBbR1JFRUsgU01BTEwgTEVUVEVSIElPVEEgV0lUSCBQU0lMSV0KK2dseXBoCVx1MUYzMQkoIDIgNCAgICApCSMg4qCKIOG8sSBbR1JFRUsgU01BTEwgTEVUVEVSIElPVEEgV0lUSCBEQVNJQV0KK2dseXBoCVx1MUYzMgkoIDIgNCAgICApCSMg4qCKIOG8siBbR1JFRUsgU01BTEwgTEVUVEVSIElPVEEgV0lUSCBQU0lMSSBBTkQgVkFSSUFdCitnbHlwaAlcdTFGMzMJKCAyIDQgICAgKQkjIOKgiiDhvLMgW0dSRUVLIFNNQUxMIExFVFRFUiBJT1RBIFdJVEggREFTSUEgQU5EIFZBUklBXQorZ2x5cGgJXHUxRjM0CSggMiA0ICAgOCkJIyDiooog4by0IFtHUkVFSyBTTUFMTCBMRVRURVIgSU9UQSBXSVRIIFBTSUxJIEFORCBPWElBXQorZ2x5cGgJXHUxRjM1CSggMiA0ICAgOCkJIyDiooog4by1IFtHUkVFSyBTTUFMTCBMRVRURVIgSU9UQSBXSVRIIERBU0lBIEFORCBPWElBXQorZ2x5cGgJXHUxRjM2CSggMiA0ICAgICkJIyDioIog4by2IFtHUkVFSyBTTUFMTCBMRVRURVIgSU9UQSBXSVRIIFBTSUxJIEFORCBQRVJJU1BPTUVOSV0KK2dseXBoCVx1MUYzNwkoIDIgNCAgICApCSMg4qCKIOG8tyBbR1JFRUsgU01BTEwgTEVUVEVSIElPVEEgV0lUSCBEQVNJQSBBTkQgUEVSSVNQT01FTkldCitnbHlwaAlcdTFGMzgJKCAyIDQgIDcgKQkjIOKhiiDhvLggW0dSRUVLIENBUElUQUwgTEVUVEVSIElPVEEgV0lUSCBQU0lMSV0KK2dseXBoCVx1MUYzOQkoIDIgNCAgNyApCSMg4qGKIOG8uSBbR1JFRUsgQ0FQSVRBTCBMRVRURVIgSU9UQSBXSVRIIERBU0lBXQorZ2x5cGgJXHUxRjNBCSggMiA0ICA3ICkJIyDioYog4by6IFtHUkVFSyBDQVBJVEFMIExFVFRFUiBJT1RBIFdJVEggUFNJTEkgQU5EIFZBUklBXQorZ2x5cGgJXHUxRjNCCSggMiA0ICA3ICkJIyDioYog4by7IFtHUkVFSyBDQVBJVEFMIExFVFRFUiBJT1RBIFdJVEggREFTSUEgQU5EIFZBUklBXQorZ2x5cGgJXHUxRjNDCSggMiA0ICA3OCkJIyDio4og4by8IFtHUkVFSyBDQVBJVEFMIExFVFRFUiBJT1RBIFdJVEggUFNJTEkgQU5EIE9YSUFdCitnbHlwaAlcdTFGM0QJKCAyIDQgIDc4KQkjIOKjiiDhvL0gW0dSRUVLIENBUElUQUwgTEVUVEVSIElPVEEgV0lUSCBEQVNJQSBBTkQgT1hJQV0KK2dseXBoCVx1MUYzRQkoIDIgNCAgNyApCSMg4qGKIOG8viBbR1JFRUsgQ0FQSVRBTCBMRVRURVIgSU9UQSBXSVRIIFBTSUxJIEFORCBQRVJJU1BPTUVOSV0KK2dseXBoCVx1MUYzRgkoIDIgNCAgNyApCSMg4qGKIOG8vyBbR1JFRUsgQ0FQSVRBTCBMRVRURVIgSU9UQSBXSVRIIERBU0lBIEFORCBQRVJJU1BPTUVOSV0KK2dseXBoCVx1MUY0MAkoMSAzIDUgICApCSMg4qCVIOG9gCBbR1JFRUsgU01BTEwgTEVUVEVSIE9NSUNST04gV0lUSCBQU0lMSV0KK2dseXBoCVx1MUY0MQkoMSAzIDUgICApCSMg4qCVIOG9gSBbR1JFRUsgU01BTEwgTEVUVEVSIE9NSUNST04gV0lUSCBEQVNJQV0KK2dseXBoCVx1MUY0MgkoMSAzIDUgICApCSMg4qCVIOG9giBbR1JFRUsgU01BTEwgTEVUVEVSIE9NSUNST04gV0lUSCBQU0lMSSBBTkQgVkFSSUFdCitnbHlwaAlcdTFGNDMJKDEgMyA1ICAgKQkjIOKglSDhvYMgW0dSRUVLIFNNQUxMIExFVFRFUiBPTUlDUk9OIFdJVEggREFTSUEgQU5EIFZBUklBXQorZ2x5cGgJXHUxRjQ0CSgxIDMgNSAgOCkJIyDiopUg4b2EIFtHUkVFSyBTTUFMTCBMRVRURVIgT01JQ1JPTiBXSVRIIFBTSUxJIEFORCBPWElBXQorZ2x5cGgJXHUxRjQ1CSgxIDMgNSAgOCkJIyDiopUg4b2FIFtHUkVFSyBTTUFMTCBMRVRURVIgT01JQ1JPTiBXSVRIIERBU0lBIEFORCBPWElBXQorZ2x5cGgJXHUxRjQ4CSgxIDMgNSA3ICkJIyDioZUg4b2IIFtHUkVFSyBDQVBJVEFMIExFVFRFUiBPTUlDUk9OIFdJVEggUFNJTEldCitnbHlwaAlcdTFGNDkJKDEgMyA1IDcgKQkjIOKhlSDhvYkgW0dSRUVLIENBUElUQUwgTEVUVEVSIE9NSUNST04gV0lUSCBEQVNJQV0KK2dseXBoCVx1MUY0QQkoMSAzIDUgNyApCSMg4qGVIOG9iiBbR1JFRUsgQ0FQSVRBTCBMRVRURVIgT01JQ1JPTiBXSVRIIFBTSUxJIEFORCBWQVJJQV0KK2dseXBoCVx1MUY0QgkoMSAzIDUgNyApCSMg4qGVIOG9iyBbR1JFRUsgQ0FQSVRBTCBMRVRURVIgT01JQ1JPTiBXSVRIIERBU0lBIEFORCBWQVJJQV0KK2dseXBoCVx1MUY0QwkoMSAzIDUgNzgpCSMg4qOVIOG9jCBbR1JFRUsgQ0FQSVRBTCBMRVRURVIgT01JQ1JPTiBXSVRIIFBTSUxJIEFORCBPWElBXQorZ2x5cGgJXHUxRjRECSgxIDMgNSA3OCkJIyDio5Ug4b2NIFtHUkVFSyBDQVBJVEFMIExFVFRFUiBPTUlDUk9OIFdJVEggREFTSUEgQU5EIE9YSUFdCitnbHlwaAlcdTFGNTAJKDEgMzQ1NiAgKQkjIOKgvSDhvZAgW0dSRUVLIFNNQUxMIExFVFRFUiBVUFNJTE9OIFdJVEggUFNJTEldCitnbHlwaAlcdTFGNTEJKDEgMzQ1NiAgKQkjIOKgvSDhvZEgW0dSRUVLIFNNQUxMIExFVFRFUiBVUFNJTE9OIFdJVEggREFTSUFdCitnbHlwaAlcdTFGNTIJKDEgMzQ1NiAgKQkjIOKgvSDhvZIgW0dSRUVLIFNNQUxMIExFVFRFUiBVUFNJTE9OIFdJVEggUFNJTEkgQU5EIFZBUklBXQorZ2x5cGgJXHUxRjUzCSgxIDM0NTYgICkJIyDioL0g4b2TIFtHUkVFSyBTTUFMTCBMRVRURVIgVVBTSUxPTiBXSVRIIERBU0lBIEFORCBWQVJJQV0KK2dseXBoCVx1MUY1NAkoMSAzNDU2IDgpCSMg4qK9IOG9lCBbR1JFRUsgU01BTEwgTEVUVEVSIFVQU0lMT04gV0lUSCBQU0lMSSBBTkQgT1hJQV0KK2dseXBoCVx1MUY1NQkoMSAzNDU2IDgpCSMg4qK9IOG9lSBbR1JFRUsgU01BTEwgTEVUVEVSIFVQU0lMT04gV0lUSCBEQVNJQSBBTkQgT1hJQV0KK2dseXBoCVx1MUY1NgkoMSAzNDU2ICApCSMg4qC9IOG9liBbR1JFRUsgU01BTEwgTEVUVEVSIFVQU0lMT04gV0lUSCBQU0lMSSBBTkQgUEVSSVNQT01FTkldCitnbHlwaAlcdTFGNTcJKDEgMzQ1NiAgKQkjIOKgvSDhvZcgW0dSRUVLIFNNQUxMIExFVFRFUiBVUFNJTE9OIFdJVEggREFTSUEgQU5EIFBFUklTUE9NRU5JXQorZ2x5cGgJXHUxRjU5CSgxIDM0NTY3ICkJIyDiob0g4b2ZIFtHUkVFSyBDQVBJVEFMIExFVFRFUiBVUFNJTE9OIFdJVEggREFTSUFdCitnbHlwaAlcdTFGNUIJKDEgMzQ1NjcgKQkjIOKhvSDhvZsgW0dSRUVLIENBUElUQUwgTEVUVEVSIFVQU0lMT04gV0lUSCBEQVNJQSBBTkQgVkFSSUFdCitnbHlwaAlcdTFGNUQJKDEgMzQ1Njc4KQkjIOKjvSDhvZ0gW0dSRUVLIENBUElUQUwgTEVUVEVSIFVQU0lMT04gV0lUSCBEQVNJQSBBTkQgT1hJQV0KK2dseXBoCVx1MUY1RgkoMSAzNDU2NyApCSMg4qG9IOG9nyBbR1JFRUsgQ0FQSVRBTCBMRVRURVIgVVBTSUxPTiBXSVRIIERBU0lBIEFORCBQRVJJU1BPTUVOSV0KK2dseXBoCVx1MUY2MAkoIDIgNDUgICApCSMg4qCaIOG9oCBbR1JFRUsgU01BTEwgTEVUVEVSIE9NRUdBIFdJVEggUFNJTEldCitnbHlwaAlcdTFGNjEJKCAyIDQ1ICAgKQkjIOKgmiDhvaEgW0dSRUVLIFNNQUxMIExFVFRFUiBPTUVHQSBXSVRIIERBU0lBXQorZ2x5cGgJXHUxRjYyCSggMiA0NSAgICkJIyDioJog4b2iIFtHUkVFSyBTTUFMTCBMRVRURVIgT01FR0EgV0lUSCBQU0lMSSBBTkQgVkFSSUFdCitnbHlwaAlcdTFGNjMJKCAyIDQ1ICAgKQkjIOKgmiDhvaMgW0dSRUVLIFNNQUxMIExFVFRFUiBPTUVHQSBXSVRIIERBU0lBIEFORCBWQVJJQV0KK2dseXBoCVx1MUY2NAkoIDIgNDUgIDgpCSMg4qKaIOG9pCBbR1JFRUsgU01BTEwgTEVUVEVSIE9NRUdBIFdJVEggUFNJTEkgQU5EIE9YSUFdCitnbHlwaAlcdTFGNjUJKCAyIDQ1ICA4KQkjIOKimiDhvaUgW0dSRUVLIFNNQUxMIExFVFRFUiBPTUVHQSBXSVRIIERBU0lBIEFORCBPWElBXQorZ2x5cGgJXHUxRjY2CSggMiA0NSAgICkJIyDioJog4b2mIFtHUkVFSyBTTUFMTCBMRVRURVIgT01FR0EgV0lUSCBQU0lMSSBBTkQgUEVSSVNQT01FTkldCitnbHlwaAlcdTFGNjcJKCAyIDQ1ICAgKQkjIOKgmiDhvacgW0dSRUVLIFNNQUxMIExFVFRFUiBPTUVHQSBXSVRIIERBU0lBIEFORCBQRVJJU1BPTUVOSV0KK2dseXBoCVx1MUY2OAkoIDIgNDUgNyApCSMg4qGaIOG9qCBbR1JFRUsgQ0FQSVRBTCBMRVRURVIgT01FR0EgV0lUSCBQU0lMSV0KK2dseXBoCVx1MUY2OQkoIDIgNDUgNyApCSMg4qGaIOG9qSBbR1JFRUsgQ0FQSVRBTCBMRVRURVIgT01FR0EgV0lUSCBEQVNJQV0KK2dseXBoCVx1MUY2QQkoIDIgNDUgNyApCSMg4qGaIOG9qiBbR1JFRUsgQ0FQSVRBTCBMRVRURVIgT01FR0EgV0lUSCBQU0lMSSBBTkQgVkFSSUFdCitnbHlwaAlcdTFGNkIJKCAyIDQ1IDcgKQkjIOKhmiDhvasgW0dSRUVLIENBUElUQUwgTEVUVEVSIE9NRUdBIFdJVEggREFTSUEgQU5EIFZBUklBXQorZ2x5cGgJXHUxRjZDCSggMiA0NSA3OCkJIyDio5og4b2sIFtHUkVFSyBDQVBJVEFMIExFVFRFUiBPTUVHQSBXSVRIIFBTSUxJIEFORCBPWElBXQorZ2x5cGgJXHUxRjZECSggMiA0NSA3OCkJIyDio5og4b2tIFtHUkVFSyBDQVBJVEFMIExFVFRFUiBPTUVHQSBXSVRIIERBU0lBIEFORCBPWElBXQorZ2x5cGgJXHUxRjZFCSggMiA0NSA3ICkJIyDioZog4b2uIFtHUkVFSyBDQVBJVEFMIExFVFRFUiBPTUVHQSBXSVRIIFBTSUxJIEFORCBQRVJJU1BPTUVOSV0KK2dseXBoCVx1MUY2RgkoIDIgNDUgNyApCSMg4qGaIOG9ryBbR1JFRUsgQ0FQSVRBTCBMRVRURVIgT01FR0EgV0lUSCBEQVNJQSBBTkQgUEVSSVNQT01FTkldCitnbHlwaAlcdTFGNzAJKDEgICAgICAgKQkjIOKggSDhvbAgW0dSRUVLIFNNQUxMIExFVFRFUiBBTFBIQSBXSVRIIFZBUklBXQorZ2x5cGgJXHUxRjcxCSgxICAgICAgOCkJIyDiooEg4b2xIFtHUkVFSyBTTUFMTCBMRVRURVIgQUxQSEEgV0lUSCBPWElBXQorZ2x5cGgJXHUxRjcyCSgxICAgNSAgICkJIyDioJEg4b2yIFtHUkVFSyBTTUFMTCBMRVRURVIgRVBTSUxPTiBXSVRIIFZBUklBXQorZ2x5cGgJXHUxRjczCSgxICAgNSAgOCkJIyDiopEg4b2zIFtHUkVFSyBTTUFMTCBMRVRURVIgRVBTSUxPTiBXSVRIIE9YSUFdCitnbHlwaAlcdTFGNzQJKCAgMzQ1ICAgKQkjIOKgnCDhvbQgW0dSRUVLIFNNQUxMIExFVFRFUiBFVEEgV0lUSCBWQVJJQV0KK2dseXBoCVx1MUY3NQkoICAzNDUgIDgpCSMg4qKcIOG9tSBbR1JFRUsgU01BTEwgTEVUVEVSIEVUQSBXSVRIIE9YSUFdCitnbHlwaAlcdTFGNzYJKCAyIDQgICAgKQkjIOKgiiDhvbYgW0dSRUVLIFNNQUxMIExFVFRFUiBJT1RBIFdJVEggVkFSSUFdCitnbHlwaAlcdTFGNzcJKCAyIDQgICA4KQkjIOKiiiDhvbcgW0dSRUVLIFNNQUxMIExFVFRFUiBJT1RBIFdJVEggT1hJQV0KK2dseXBoCVx1MUY3OAkoMSAzIDUgICApCSMg4qCVIOG9uCBbR1JFRUsgU01BTEwgTEVUVEVSIE9NSUNST04gV0lUSCBWQVJJQV0KK2dseXBoCVx1MUY3OQkoMSAzIDUgIDgpCSMg4qKVIOG9uSBbR1JFRUsgU01BTEwgTEVUVEVSIE9NSUNST04gV0lUSCBPWElBXQorZ2x5cGgJXHUxRjdBCSgxIDM0NTYgICkJIyDioL0g4b26IFtHUkVFSyBTTUFMTCBMRVRURVIgVVBTSUxPTiBXSVRIIFZBUklBXQorZ2x5cGgJXHUxRjdCCSgxIDM0NTYgOCkJIyDior0g4b27IFtHUkVFSyBTTUFMTCBMRVRURVIgVVBTSUxPTiBXSVRIIE9YSUFdCitnbHlwaAlcdTFGN0MJKCAyIDQ1ICAgKQkjIOKgmiDhvbwgW0dSRUVLIFNNQUxMIExFVFRFUiBPTUVHQSBXSVRIIFZBUklBXQorZ2x5cGgJXHUxRjdECSggMiA0NSAgOCkJIyDiopog4b29IFtHUkVFSyBTTUFMTCBMRVRURVIgT01FR0EgV0lUSCBPWElBXQorZ2x5cGgJXHUxRjgwCSggIDMgNSAgICkJIyDioJQg4b6AIFtHUkVFSyBTTUFMTCBMRVRURVIgQUxQSEEgV0lUSCBQU0lMSSBBTkQgWVBPR0VHUkFNTUVOSV0KK2dseXBoCVx1MUY4MQkoICAzIDUgICApCSMg4qCUIOG+gSBbR1JFRUsgU01BTEwgTEVUVEVSIEFMUEhBIFdJVEggREFTSUEgQU5EIFlQT0dFR1JBTU1FTkldCitnbHlwaAlcdTFGODIJKCAgMyA1ICAgKQkjIOKglCDhvoIgW0dSRUVLIFNNQUxMIExFVFRFUiBBTFBIQSBXSVRIIFBTSUxJIEFORCBWQVJJQSBBTkQgWVBPR0VHUkFNTUVOSV0KK2dseXBoCVx1MUY4MwkoICAzIDUgICApCSMg4qCUIOG+gyBbR1JFRUsgU01BTEwgTEVUVEVSIEFMUEhBIFdJVEggREFTSUEgQU5EIFZBUklBIEFORCBZUE9HRUdSQU1NRU5JXQorZ2x5cGgJXHUxRjg0CSggIDMgNSAgOCkJIyDiopQg4b6EIFtHUkVFSyBTTUFMTCBMRVRURVIgQUxQSEEgV0lUSCBQU0lMSSBBTkQgT1hJQSBBTkQgWVBPR0VHUkFNTUVOSV0KK2dseXBoCVx1MUY4NQkoICAzIDUgIDgpCSMg4qKUIOG+hSBbR1JFRUsgU01BTEwgTEVUVEVSIEFMUEhBIFdJVEggREFTSUEgQU5EIE9YSUEgQU5EIFlQT0dFR1JBTU1FTkldCitnbHlwaAlcdTFGODYJKCAgMyA1ICAgKQkjIOKglCDhvoYKK2dseXBoCVx1MUY4NwkoICAzIDUgICApCSMg4qCUIOG+hworZ2x5cGgJXHUxRjg4CSggIDMgNSA3ICkJIyDioZQg4b6IIFtHUkVFSyBDQVBJVEFMIExFVFRFUiBBTFBIQSBXSVRIIFBTSUxJIEFORCBQUk9TR0VHUkFNTUVOSV0KK2dseXBoCVx1MUY4OQkoICAzIDUgNyApCSMg4qGUIOG+iSBbR1JFRUsgQ0FQSVRBTCBMRVRURVIgQUxQSEEgV0lUSCBEQVNJQSBBTkQgUFJPU0dFR1JBTU1FTkldCitnbHlwaAlcdTFGOEEJKDEgICAgIDcgKQkjIOKhgSDhvooKK2dseXBoCVx1MUY4QgkoMSAgICAgNyApCSMg4qGBIOG+iworZ2x5cGgJXHUxRjhDCSgxICAgICA3OCkJIyDio4Eg4b6MCitnbHlwaAlcdTFGOEQJKDEgICAgIDc4KQkjIOKjgSDhvo0KK2dseXBoCVx1MUY4RQkoMSAgICAgNyApCSMg4qGBIOG+jgorZ2x5cGgJXHUxRjhGCSgxICAgICA3ICkJIyDioYEg4b6PCitnbHlwaAlcdTFGOTAJKCAgMzQ1NiAgKQkjIOKgvCDhvpAgW0dSRUVLIFNNQUxMIExFVFRFUiBFVEEgV0lUSCBQU0lMSSBBTkQgWVBPR0VHUkFNTUVOSV0KK2dseXBoCVx1MUY5MQkoICAzNDU2ICApCSMg4qC8IOG+kSBbR1JFRUsgU01BTEwgTEVUVEVSIEVUQSBXSVRIIERBU0lBIEFORCBZUE9HRUdSQU1NRU5JXQorZ2x5cGgJXHUxRjkyCSggIDM0NTYgICkJIyDioLwg4b6SIFtHUkVFSyBTTUFMTCBMRVRURVIgRVRBIFdJVEggUFNJTEkgQU5EIFZBUklBIEFORCBZUE9HRUdSQU1NRU5JXQorZ2x5cGgJXHUxRjkzCSggIDM0NTYgICkJIyDioLwg4b6TIFtHUkVFSyBTTUFMTCBMRVRURVIgRVRBIFdJVEggREFTSUEgQU5EIFZBUklBIEFORCBZUE9HRUdSQU1NRU5JXQorZ2x5cGgJXHUxRjk0CSggIDM0NTYgOCkJIyDiorwg4b6UIFtHUkVFSyBTTUFMTCBMRVRURVIgRVRBIFdJVEggUFNJTEkgQU5EIE9YSUEgQU5EIFlQT0dFR1JBTU1FTkldCitnbHlwaAlcdTFGOTUJKCAgMzQ1NiA4KQkjIOKivCDhvpUgW0dSRUVLIFNNQUxMIExFVFRFUiBFVEEgV0lUSCBEQVNJQSBBTkQgT1hJQSBBTkQgWVBPR0VHUkFNTUVOSV0KK2dseXBoCVx1MUY5NgkoICAzNDU2ICApCSMg4qC8IOG+lgorZ2x5cGgJXHUxRjk3CSggIDM0NTYgICkJIyDioLwg4b6XCitnbHlwaAlcdTFGOTgJKCAgMzQ1NjcgKQkjIOKhvCDhvpggW0dSRUVLIENBUElUQUwgTEVUVEVSIEVUQSBXSVRIIFBTSUxJIEFORCBQUk9TR0VHUkFNTUVOSV0KK2dseXBoCVx1MUY5OQkoICAzNDU2NyApCSMg4qG8IOG+mSBbR1JFRUsgQ0FQSVRBTCBMRVRURVIgRVRBIFdJVEggREFTSUEgQU5EIFBST1NHRUdSQU1NRU5JXQorZ2x5cGgJXHUxRjlBCSggIDM0NTY3ICkJIyDiobwg4b6aIFtHUkVFSyBDQVBJVEFMIExFVFRFUiBFVEEgV0lUSCBQU0lMSSBBTkQgVkFSSUEgQU5EIFBST1NHRUdSQU1NRU5JXQorZ2x5cGgJXHUxRjlCCSggIDM0NTY3ICkJIyDiobwg4b6bIFtHUkVFSyBDQVBJVEFMIExFVFRFUiBFVEEgV0lUSCBEQVNJQSBBTkQgVkFSSUEgQU5EIFBST1NHRUdSQU1NRU5JXQorZ2x5cGgJXHUxRjlDCSggIDM0NTY3OCkJIyDio7wg4b6cIFtHUkVFSyBDQVBJVEFMIExFVFRFUiBFVEEgV0lUSCBQU0lMSSBBTkQgT1hJQSBBTkQgUFJPU0dFR1JBTU1FTkldCitnbHlwaAlcdTFGOUQJKCAgMzQ1Njc4KQkjIOKjvCDhvp0gW0dSRUVLIENBUElUQUwgTEVUVEVSIEVUQSBXSVRIIERBU0lBIEFORCBPWElBIEFORCBQUk9TR0VHUkFNTUVOSV0KK2dseXBoCVx1MUY5RQkoICAzNDUgNyApCSMg4qGcIOG+ngorZ2x5cGgJXHUxRjlGCSggIDM0NSA3ICkJIyDioZwg4b6fCitnbHlwaAlcdTFGQTAJKCAyIDQ1NiAgKQkjIOKguiDhvqAgW0dSRUVLIFNNQUxMIExFVFRFUiBPTUVHQSBXSVRIIFBTSUxJIEFORCBZUE9HRUdSQU1NRU5JXQorZ2x5cGgJXHUxRkExCSggMiA0NTYgICkJIyDioLog4b6hIFtHUkVFSyBTTUFMTCBMRVRURVIgT01FR0EgV0lUSCBEQVNJQSBBTkQgWVBPR0VHUkFNTUVOSV0KK2dseXBoCVx1MUZBMgkoIDIgNDU2ICApCSMg4qC6IOG+oiBbR1JFRUsgU01BTEwgTEVUVEVSIE9NRUdBIFdJVEggUFNJTEkgQU5EIFZBUklBIEFORCBZUE9HRUdSQU1NRU5JXQorZ2x5cGgJXHUxRkEzCSggMiA0NTYgICkJIyDioLog4b6jIFtHUkVFSyBTTUFMTCBMRVRURVIgT01FR0EgV0lUSCBEQVNJQSBBTkQgVkFSSUEgQU5EIFlQT0dFR1JBTU1FTkldCitnbHlwaAlcdTFGQTQJKCAyIDQ1NiA4KQkjIOKiuiDhvqQgW0dSRUVLIFNNQUxMIExFVFRFUiBPTUVHQSBXSVRIIFBTSUxJIEFORCBPWElBIEFORCBZUE9HRUdSQU1NRU5JXQorZ2x5cGgJXHUxRkE1CSggMiA0NTYgOCkJIyDiorog4b6lIFtHUkVFSyBTTUFMTCBMRVRURVIgT01FR0EgV0lUSCBEQVNJQSBBTkQgT1hJQSBBTkQgWVBPR0VHUkFNTUVOSV0KK2dseXBoCVx1MUZBNgkoIDIgNDU2ICApCSMg4qC6IOG+pgorZ2x5cGgJXHUxRkE3CSggMiA0NTYgICkJIyDioLog4b6nCitnbHlwaAlcdTFGQTgJKCAyIDQ1NjcgKQkjIOKhuiDhvqggW0dSRUVLIENBUElUQUwgTEVUVEVSIE9NRUdBIFdJVEggUFNJTEkgQU5EIFBST1NHRUdSQU1NRU5JXQorZ2x5cGgJXHUxRkE5CSggMiA0NTY3ICkJIyDiobog4b6pIFtHUkVFSyBDQVBJVEFMIExFVFRFUiBPTUVHQSBXSVRIIERBU0lBIEFORCBQUk9TR0VHUkFNTUVOSV0KK2dseXBoCVx1MUZBQQkoIDIgNDUgNyApCSMg4qGaIOG+qgorZ2x5cGgJXHUxRkFCCSggMiA0NSA3ICkJIyDioZog4b6rCitnbHlwaAlcdTFGQUMJKCAyIDQ1IDc4KQkjIOKjmiDhvqwKK2dseXBoCVx1MUZBRAkoIDIgNDUgNzgpCSMg4qOaIOG+rQorZ2x5cGgJXHUxRkFFCSggMiA0NSA3ICkJIyDioZog4b6uCitnbHlwaAlcdTFGQUYJKCAyIDQ1IDcgKQkjIOKhmiDhvq8KK2dseXBoCVx1MUZCMAkoMSAgICAgICApCSMg4qCBIOG+sCBbR1JFRUsgU01BTEwgTEVUVEVSIEFMUEhBIFdJVEggVlJBQ0hZXQorZ2x5cGgJXHUxRkIxCSgxICAgICAgICkJIyDioIEg4b6xIFtHUkVFSyBTTUFMTCBMRVRURVIgQUxQSEEgV0lUSCBNQUNST05dCitnbHlwaAlcdTFGQjIJKCAgMyA1ICAgKQkjIOKglCDhvrIgW0dSRUVLIFNNQUxMIExFVFRFUiBBTFBIQSBXSVRIIFZBUklBIEFORCBZUE9HRUdSQU1NRU5JXQorY2hhcglcdTFGQjMJKCAgMyA1ICAgKQkjIOKglCDhvrMgW0dSRUVLIFNNQUxMIExFVFRFUiBBTFBIQSBXSVRIIFlQT0dFR1JBTU1FTkldCitnbHlwaAlcdTFGQjQJKCAgMyA1ICA4KQkjIOKilCDhvrQgW0dSRUVLIFNNQUxMIExFVFRFUiBBTFBIQSBXSVRIIE9YSUEgQU5EIFlQT0dFR1JBTU1FTkldCitnbHlwaAlcdTFGQjYJKDEgICAgICAgKQkjIOKggSDhvrYgW0dSRUVLIFNNQUxMIExFVFRFUiBBTFBIQSBXSVRIIFBFUklTUE9NRU5JXQorZ2x5cGgJXHUxRkI3CSggIDMgNSAgICkJIyDioJQg4b63IFtHUkVFSyBTTUFMTCBMRVRURVIgQUxQSEEgV0lUSCBQRVJJU1BPTUVOSSBBTkQgWVBPR0VHUkFNTUVOSV0KK2dseXBoCVx1MUZCOAkoMSAgICAgNyApCSMg4qGBIOG+uCBbR1JFRUsgQ0FQSVRBTCBMRVRURVIgQUxQSEEgV0lUSCBWUkFDSFldCitnbHlwaAlcdTFGQjkJKDEgICAgIDcgKQkjIOKhgSDhvrkgW0dSRUVLIENBUElUQUwgTEVUVEVSIEFMUEhBIFdJVEggTUFDUk9OXQorZ2x5cGgJXHUxRkJBCSgxICAgICA3ICkJIyDioYEg4b66IFtHUkVFSyBDQVBJVEFMIExFVFRFUiBBTFBIQSBXSVRIIFZBUklBXQorZ2x5cGgJXHUxRkJCCSgxICAgICA3OCkJIyDio4Eg4b67IFtHUkVFSyBDQVBJVEFMIExFVFRFUiBBTFBIQSBXSVRIIE9YSUFdCitjaGFyCVx1MUZCQwkoICAzIDUgNyApCSMg4qGUIOG+vCBbR1JFRUsgQ0FQSVRBTCBMRVRURVIgQUxQSEEgV0lUSCBQUk9TR0VHUkFNTUVOSV0KK2dseXBoCVx1MUZDMAkoICAgICA2ICApCSMg4qCgIOG/gCBbR1JFRUsgUEVSSVNQT01FTkldCitnbHlwaAlcdTFGQzIJKCAgMzQ1NiAgKQkjIOKgvCDhv4IgW0dSRUVLIFNNQUxMIExFVFRFUiBFVEEgV0lUSCBWQVJJQSBBTkQgWVBPR0VHUkFNTUVOSV0KK2NoYXIJXHUxRkMzCSggIDM0NTYgICkJIyDioLwg4b+DIFtHUkVFSyBTTUFMTCBMRVRURVIgRVRBIFdJVEggWVBPR0VHUkFNTUVOSV0KK2dseXBoCVx1MUZDNAkoICAzNDU2IDgpCSMg4qK8IOG/hCBbR1JFRUsgU01BTEwgTEVUVEVSIEVUQSBXSVRIIE9YSUEgQU5EIFlQT0dFR1JBTU1FTkldCitnbHlwaAlcdTFGQzYJKCAgMzQ1ICAgKQkjIOKgnCDhv4YgW0dSRUVLIFNNQUxMIExFVFRFUiBFVEEgV0lUSCBQRVJJU1BPTUVOSV0KK2dseXBoCVx1MUZDNwkoICAzNDU2ICApCSMg4qC8IOG/hyBbR1JFRUsgU01BTEwgTEVUVEVSIEVUQSBXSVRIIFBFUklTUE9NRU5JIEFORCBZUE9HRUdSQU1NRU5JXQorZ2x5cGgJXHUxRkM4CSgxICAgNSA3ICkJIyDioZEg4b+IIFtHUkVFSyBDQVBJVEFMIExFVFRFUiBFUFNJTE9OIFdJVEggVkFSSUFdCitnbHlwaAlcdTFGQzkJKDEgICA1IDc4KQkjIOKjkSDhv4kgW0dSRUVLIENBUElUQUwgTEVUVEVSIEVQU0lMT04gV0lUSCBPWElBXQorZ2x5cGgJXHUxRkNBCSggIDM0NSA3ICkJIyDioZwg4b+KIFtHUkVFSyBDQVBJVEFMIExFVFRFUiBFVEEgV0lUSCBWQVJJQV0KK2dseXBoCVx1MUZDQgkoICAzNDUgNzgpCSMg4qOcIOG/iyBbR1JFRUsgQ0FQSVRBTCBMRVRURVIgRVRBIFdJVEggT1hJQV0KK2NoYXIJXHUxRkNDCSggIDM0NTY3ICkJIyDiobwg4b+MIFtHUkVFSyBDQVBJVEFMIExFVFRFUiBFVEEgV0lUSCBQUk9TR0VHUkFNTUVOSV0KK2dseXBoCVx1MUZDRAkoIDIzNDU2ICApCSMg4qC+IOG/jSBbR1JFRUsgUFNJTEkgQU5EIFZBUklBXQorZ2x5cGgJXHUxRkNFCSggIDMgNTYgICkJIyDioLQg4b+OIFtHUkVFSyBQU0lMSSBBTkQgT1hJQV0KK2dseXBoCVx1MUZDRgkoIDIgIDU2ICApCSMg4qCyIOG/jyBbR1JFRUsgUFNJTEkgQU5EIFBFUklTUE9NRU5JXQorZ2x5cGgJXHUxRkQwCSggMiA0ICAgICkJIyDioIog4b+QIFtHUkVFSyBTTUFMTCBMRVRURVIgSU9UQSBXSVRIIFZSQUNIWV0KK2dseXBoCVx1MUZEMQkoIDIgNCAgICApCSMg4qCKIOG/kSBbR1JFRUsgU01BTEwgTEVUVEVSIElPVEEgV0lUSCBNQUNST05dCitnbHlwaAlcdTFGRDIJKCAyIDQgICAgKQkjIOKgiiDhv5IgW0dSRUVLIFNNQUxMIExFVFRFUiBJT1RBIFdJVEggRElBTFlUSUtBIEFORCBWQVJJQV0KK2dseXBoCVx1MUZEMwkoIDIgNCAgIDgpCSMg4qKKIOG/kyBbR1JFRUsgU01BTEwgTEVUVEVSIElPVEEgV0lUSCBESUFMWVRJS0EgQU5EIE9YSUFdCitnbHlwaAlcdTFGRDYJKCAyIDQgICAgKQkjIOKgiiDhv5YgW0dSRUVLIFNNQUxMIExFVFRFUiBJT1RBIFdJVEggUEVSSVNQT01FTkldCitnbHlwaAlcdTFGRDcJKCAyIDQgICAgKQkjIOKgiiDhv5cgW0dSRUVLIFNNQUxMIExFVFRFUiBJT1RBIFdJVEggRElBTFlUSUtBIEFORCBQRVJJU1BPTUVOSV0KK2dseXBoCVx1MUZEOAkoIDIgNCAgNyApCSMg4qGKIOG/mCBbR1JFRUsgQ0FQSVRBTCBMRVRURVIgSU9UQSBXSVRIIFZSQUNIWV0KK2dseXBoCVx1MUZEOQkoIDIgNCAgNyApCSMg4qGKIOG/mSBbR1JFRUsgQ0FQSVRBTCBMRVRURVIgSU9UQSBXSVRIIE1BQ1JPTl0KK2dseXBoCVx1MUZEQQkoIDIgNCAgNyApCSMg4qGKIOG/miBbR1JFRUsgQ0FQSVRBTCBMRVRURVIgSU9UQSBXSVRIIFZBUklBXQorZ2x5cGgJXHUxRkRCCSggMiA0ICA3OCkJIyDio4og4b+bIFtHUkVFSyBDQVBJVEFMIExFVFRFUiBJT1RBIFdJVEggT1hJQV0KK2dseXBoCVx1MUZERAkoMTIzIDU2ICApCSMg4qC3IOG/nSBbR1JFRUsgREFTSUEgQU5EIFZBUklBXQorZ2x5cGgJXHUxRkRFCSggMiAgIDYgICkJIyDioKIg4b+eIFtHUkVFSyBEQVNJQSBBTkQgT1hJQV0KK2dseXBoCVx1MUZERgkoIDIzIDUgICApCSMg4qCWIOG/nyBbR1JFRUsgREFTSUEgQU5EIFBFUklTUE9NRU5JXQorZ2x5cGgJXHUxRkUwCSgxIDM0NTYgICkJIyDioL0g4b+gIFtHUkVFSyBTTUFMTCBMRVRURVIgVVBTSUxPTiBXSVRIIFZSQUNIWV0KK2dseXBoCVx1MUZFMQkoMSAzNDU2ICApCSMg4qC9IOG/oSBbR1JFRUsgU01BTEwgTEVUVEVSIFVQU0lMT04gV0lUSCBNQUNST05dCitnbHlwaAlcdTFGRTIJKDEgMzQ1NiAgKQkjIOKgvSDhv6IgW0dSRUVLIFNNQUxMIExFVFRFUiBVUFNJTE9OIFdJVEggRElBTFlUSUtBIEFORCBWQVJJQV0KK2dseXBoCVx1MUZFMwkoMSAzNDU2IDgpCSMg4qK9IOG/oyBbR1JFRUsgU01BTEwgTEVUVEVSIFVQU0lMT04gV0lUSCBESUFMWVRJS0EgQU5EIE9YSUFdCitnbHlwaAlcdTFGRTQJKDEyMyA1ICAgKQkjIOKglyDhv6QgW0dSRUVLIFNNQUxMIExFVFRFUiBSSE8gV0lUSCBQU0lMSV0KK2dseXBoCVx1MUZFNQkoMTIzIDUgICApCSMg4qCXIOG/pSBbR1JFRUsgU01BTEwgTEVUVEVSIFJITyBXSVRIIERBU0lBXQorZ2x5cGgJXHUxRkU2CSgxIDM0NTYgICkJIyDioL0g4b+mIFtHUkVFSyBTTUFMTCBMRVRURVIgVVBTSUxPTiBXSVRIIFBFUklTUE9NRU5JXQorZ2x5cGgJXHUxRkU3CSgxIDM0NTYgICkJIyDioL0g4b+nIFtHUkVFSyBTTUFMTCBMRVRURVIgVVBTSUxPTiBXSVRIIERJQUxZVElLQSBBTkQgUEVSSVNQT01FTkldCitnbHlwaAlcdTFGRTgJKDEgMzQ1NjcgKQkjIOKhvSDhv6ggW0dSRUVLIENBUElUQUwgTEVUVEVSIFVQU0lMT04gV0lUSCBWUkFDSFldCitnbHlwaAlcdTFGRTkJKDEgMzQ1NjcgKQkjIOKhvSDhv6kgW0dSRUVLIENBUElUQUwgTEVUVEVSIFVQU0lMT04gV0lUSCBNQUNST05dCitnbHlwaAlcdTFGRUEJKDEgMzQ1NjcgKQkjIOKhvSDhv6ogW0dSRUVLIENBUElUQUwgTEVUVEVSIFVQU0lMT04gV0lUSCBWQVJJQV0KK2dseXBoCVx1MUZFQgkoMSAzNDU2NzgpCSMg4qO9IOG/qyBbR1JFRUsgQ0FQSVRBTCBMRVRURVIgVVBTSUxPTiBXSVRIIE9YSUFdCitnbHlwaAlcdTFGRUMJKDEyMyA1IDcgKQkjIOKhlyDhv6wgW0dSRUVLIENBUElUQUwgTEVUVEVSIFJITyBXSVRIIERBU0lBXQorZ2x5cGgJXHUxRkVGCSggICA0ICAgICkJIyDioIgg4b+vIFtHUkVFSyBWQVJJQV0KK2dseXBoCVx1MUZGMgkoIDIgNDU2ICApCSMg4qC6IOG/siBbR1JFRUsgU01BTEwgTEVUVEVSIE9NRUdBIFdJVEggVkFSSUEgQU5EIFlQT0dFR1JBTU1FTkldCitjaGFyCVx1MUZGMwkoIDIgNDU2ICApCSMg4qC6IOG/syBbR1JFRUsgU01BTEwgTEVUVEVSIE9NRUdBIFdJVEggWVBPR0VHUkFNTUVOSV0KK2dseXBoCVx1MUZGNAkoIDIgNDU2IDgpCSMg4qK6IOG/tCBbR1JFRUsgU01BTEwgTEVUVEVSIE9NRUdBIFdJVEggT1hJQSBBTkQgWVBPR0VHUkFNTUVOSV0KK2dseXBoCVx1MUZGNgkoIDIgNDUgICApCSMg4qCaIOG/tiBbR1JFRUsgU01BTEwgTEVUVEVSIE9NRUdBIFdJVEggUEVSSVNQT01FTkldCitnbHlwaAlcdTFGRjcJKCAyIDQ1NiAgKQkjIOKguiDhv7cgW0dSRUVLIFNNQUxMIExFVFRFUiBPTUVHQSBXSVRIIFBFUklTUE9NRU5JIEFORCBZUE9HRUdSQU1NRU5JXQorZ2x5cGgJXHUxRkY4CSgxIDMgNSA3ICkJIyDioZUg4b+4IFtHUkVFSyBDQVBJVEFMIExFVFRFUiBPTUlDUk9OIFdJVEggVkFSSUFdCitnbHlwaAlcdTFGRjkJKDEgMyA1IDc4KQkjIOKjlSDhv7kgW0dSRUVLIENBUElUQUwgTEVUVEVSIE9NSUNST04gV0lUSCBPWElBXQorZ2x5cGgJXHUxRkZBCSggMiA0NSA3ICkJIyDioZog4b+6IFtHUkVFSyBDQVBJVEFMIExFVFRFUiBPTUVHQSBXSVRIIFZBUklBXQorZ2x5cGgJXHUxRkZCCSggMiA0NSA3OCkJIyDio5og4b+7IFtHUkVFSyBDQVBJVEFMIExFVFRFUiBPTUVHQSBXSVRIIE9YSUFdCitjaGFyCVx1MUZGQwkoIDIgNDU2NyApCSMg4qG6IOG/vCBbR1JFRUsgQ0FQSVRBTCBMRVRURVIgT01FR0EgV0lUSCBQUk9TR0VHUkFNTUVOSV0KK2dseXBoCVx1MUZGRAkoICAgIDUgICApCSMg4qCQIOG/vSBbR1JFRUsgT1hJQV0KK2dseXBoCVx1MUZGRQkoMTIzICA2ICApCSMg4qCnIOG/viBbR1JFRUsgREFTSUFdCmRpZmYgLS1naXQgYS9UYWJsZXMvVGV4dC9ndS50dGIgYi9UYWJsZXMvVGV4dC9ndS50dGIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGMzOTBmYwotLS0gL2Rldi9udWxsCisrKyBiL1RhYmxlcy9UZXh0L2d1LnR0YgpAQCAtMCwwICsxLDI0IEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisjICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorIworIyBDb3B5cmlnaHQgKEMpIDIwMDgtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisjCisjIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisjCisjIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyMgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorIyBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyMKKyMgV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworIworIyBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIyBCUkxUVFkgVGV4dCBUYWJsZSAtIEd1amFyYXRpCisKK2luY2x1ZGUgZ3VqYXJhdGkudHRpCitpbmNsdWRlIGFzY2lpLWJhc2ljLnR0aQorCitpbmNsdWRlIGNvbW1vbi50dGkKZGlmZiAtLWdpdCBhL1RhYmxlcy9UZXh0L2d1amFyYXRpLnR0aSBiL1RhYmxlcy9UZXh0L2d1amFyYXRpLnR0aQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZWE4YjYzCi0tLSAvZGV2L251bGwKKysrIGIvVGFibGVzL1RleHQvZ3VqYXJhdGkudHRpCkBAIC0wLDAgKzEsMTA5IEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisjICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorIworIyBDb3B5cmlnaHQgKEMpIDIwMDgtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisjCisjIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisjCisjIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyMgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorIyBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyMKKyMgV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworIworIyBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIyBUaGlzIEJSTFRUWSB0ZXh0IHN1YnRhYmxlIGRlZmluZXMgdGhlIGJyYWlsbGUgcmVwcmVzZW50YXRpb25zCisjIGZvciB0aGUgR3VqYXJhdGkgc2NyaXB0LgorCisjIE1haW50YWluZWQgYnkgSm9obiBKLiBCb3llciwgZGlyZWN0b3JAY2hwaS5vcmcsIHd3dy5jaHBpLm9yZworIworIyBUaGlzIHRhYmxlIGlzIGJ1aWx0IGFuZCBtYWludGFpbmVkIGJ5IExlb24gVW5naWVyIDxMZW9uLlVuZ2llckBWaWV3UGx1cy5jb20+CisjIHdpdGggaGVscCBhbmQgZ3VpZGFuY2UgZnJvbSBNb2hhbW1lZCBSLiBSYW1hZGFuIDxtcmFtYWRhbkBuYXR0aXEuY29tPgorIworIyBDb252ZXJ0ZWQgZnJvbSBsaWJsb3VpcyB0YWJsZSBieSBTYW11ZWwgVGhpYmF1bHQgPHNhbXVlbC50aGliYXVsdEBlbnMtbHlvbi5vcmc+CisKKyMgZ2VuZXJhdGVkIGJ5IHR0YnRlc3Q6CitjaGFyIFx1MEE4MQkoICAzICAgICApICAjIOKghCDgqoEgW0dVSkFSQVRJIFNJR04gQ0FORFJBQklORFVdCitjaGFyIFx1MEE4MgkoICAgIDU2ICApICAjIOKgsCDgqoIgW0dVSkFSQVRJIFNJR04gQU5VU1ZBUkFdCitjaGFyIFx1MEE4MwkoICAgICA2ICApICAjIOKgoCDgqoMgW0dVSkFSQVRJIFNJR04gVklTQVJHQV0KK2NoYXIgXHUwQTg1CSgxICAgICAgICkgICMg4qCBIOCqhSBbR1VKQVJBVEkgTEVUVEVSIEFdCitjaGFyIFx1MEE4NgkoICAzNDUgICApICAjIOKgnCDgqoYgW0dVSkFSQVRJIExFVFRFUiBBQV0KK2NoYXIgXHUwQTg3CSggMiA0ICAgICkgICMg4qCKIOCqhyBbR1VKQVJBVEkgTEVUVEVSIEldCitjaGFyIFx1MEE4OAkoICAzIDUgICApICAjIOKglCDgqoggW0dVSkFSQVRJIExFVFRFUiBJSV0KK2NoYXIgXHUwQTg5CSgxIDMgIDYgICkgICMg4qClIOCqiSBbR1VKQVJBVEkgTEVUVEVSIFVdCitjaGFyIFx1MEE4QQkoMTIgIDU2ICApICAjIOKgsyDgqoogW0dVSkFSQVRJIExFVFRFUiBVVV0KK2NoYXIgXHUwQThECSgxICAgNSA3ICkgICMg4qGRIOCqjSBbR1VKQVJBVEkgVk9XRUwgQ0FORFJBIEVdCisKK2NoYXIgXHUwQThGCSgxICAgNSAgICkgICMg4qCRIOCqjyBbR1VKQVJBVEkgTEVUVEVSIEVdCitjaGFyIFx1MEE5MAkoICAzNCAgICApICAjIOKgjCDgqpAgW0dVSkFSQVRJIExFVFRFUiBBSV0KK2NoYXIgXHUwQTkxCSgxIDMgNSA3ICkgICMg4qGVIOCqkSBbR1VKQVJBVEkgVk9XRUwgQ0FORFJBIE9dCisKK2NoYXIgXHUwQTkzCSgxIDMgNSAgICkgICMg4qCVIOCqkyBbR1VKQVJBVEkgTEVUVEVSIE9dCitjaGFyIFx1MEE5NAkoIDIgNCA2ICApICAjIOKgqiDgqpQgW0dVSkFSQVRJIExFVFRFUiBBVV0KK2NoYXIgXHUwQTk1CSgxIDMgICAgICkgICMg4qCFIOCqlSBbR1VKQVJBVEkgTEVUVEVSIEtBXQorY2hhciBcdTBBOTYJKCAgIDQgNiAgKSAgIyDioKgg4KqWIFtHVUpBUkFUSSBMRVRURVIgS0hBXQorY2hhciBcdTBBOTcJKDEyMzQgICAgKSAgIyDioI8g4KqXIFtHVUpBUkFUSSBMRVRURVIgR0FdCitjaGFyIFx1MEE5OAkoMTIgICA2ICApICAjIOKgoyDgqpggW0dVSkFSQVRJIExFVFRFUiBHSEFdCitjaGFyIFx1MEE5OQkoICAzNCA2ICApICAjIOKgrCDgqpkgW0dVSkFSQVRJIExFVFRFUiBOR0FdCitjaGFyIFx1MEE5QQkoMSAgNCAgICApICAjIOKgiSDgqpogW0dVSkFSQVRJIExFVFRFUiBDQV0KK2NoYXIgXHUwQTlCCSgxICAgIDYgICkgICMg4qChIOCqmyBbR1VKQVJBVEkgTEVUVEVSIENIQV0KK2NoYXIgXHUwQTlDCSggMiA0NSAgICkgICMg4qCaIOCqnCBbR1VKQVJBVEkgTEVUVEVSIEpBXQorY2hhciBcdTBBOUQJKCAgMyA1NiAgKSAgIyDioLQg4KqdIFtHVUpBUkFUSSBMRVRURVIgSkhBXQorY2hhciBcdTBBOUUJKCAyICA1ICAgKSAgIyDioJIg4KqeIFtHVUpBUkFUSSBMRVRURVIgTllBXQorY2hhciBcdTBBOUYJKCAyMzQ1NiAgKSAgIyDioL4g4KqfIFtHVUpBUkFUSSBMRVRURVIgVFRBXQorY2hhciBcdTBBQTAJKCAyIDQ1NiAgKSAgIyDioLog4KqgIFtHVUpBUkFUSSBMRVRURVIgVFRIQV0KK2NoYXIgXHUwQUExCSgxMiA0IDYgICkgICMg4qCrIOCqoSBbR1VKQVJBVEkgTEVUVEVSIEREQV0KK2NoYXIgXHUwQUEyCSgxMjM0NTYgICkgICMg4qC/IOCqoiBbR1VKQVJBVEkgTEVUVEVSIERESEFdCitjaGFyIFx1MEFBMwkoICAzNDU2ICApICAjIOKgvCDgqqMgW0dVSkFSQVRJIExFVFRFUiBOTkFdCitjaGFyIFx1MEFBNAkoIDIzNDUgICApICAjIOKgniDgqqQgW0dVSkFSQVRJIExFVFRFUiBUQV0KK2NoYXIgXHUwQUE1CSgxICA0NTYgICkgICMg4qC5IOCqpSBbR1VKQVJBVEkgTEVUVEVSIFRIQV0KK2NoYXIgXHUwQUE2CSgxICA0NSAgICkgICMg4qCZIOCqpiBbR1VKQVJBVEkgTEVUVEVSIERBXQorY2hhciBcdTBBQTcJKCAyMzQgNiAgKSAgIyDioK4g4KqnIFtHVUpBUkFUSSBMRVRURVIgREhBXQorY2hhciBcdTBBQTgJKDEgMzQ1ICAgKSAgIyDioJ0g4KqoIFtHVUpBUkFUSSBMRVRURVIgTkFdCisKK2NoYXIgXHUwQUFBCSgxMjM0ICAgICkgICMg4qCPIOCqqiBbR1VKQVJBVEkgTEVUVEVSIFBBXQorY2hhciBcdTBBQUIJKCAyMyA1ICAgKSAgIyDioJYg4KqrIFtHVUpBUkFUSSBMRVRURVIgUEhBXQorY2hhciBcdTBBQUMJKDEyICAgICAgKSAgIyDioIMg4KqsIFtHVUpBUkFUSSBMRVRURVIgQkFdCitjaGFyIFx1MEFBRAkoICAgNDUgICApICAjIOKgmCDgqq0gW0dVSkFSQVRJIExFVFRFUiBCSEFdCitjaGFyIFx1MEFBRQkoMSAzNCAgICApICAjIOKgjSDgqq4gW0dVSkFSQVRJIExFVFRFUiBNQV0KK2NoYXIgXHUwQUFGCSgxIDM0NTYgICkgICMg4qC9IOCqryBbR1VKQVJBVEkgTEVUVEVSIFlBXQorY2hhciBcdTBBQjAJKDEyMyA1ICAgKSAgIyDioJcg4KqwIFtHVUpBUkFUSSBMRVRURVIgUkFdCisKK2NoYXIgXHUwQUIyCSgxMjMgICAgICkgICMg4qCHIOCqsiBbR1VKQVJBVEkgTEVUVEVSIExBXQorY2hhciBcdTBBQjMJKDEyMyAgIDcgKSAgIyDioYcg4KqzIFtHVUpBUkFUSSBMRVRURVIgTExBXQorCitjaGFyIFx1MEFCNQkoMTIzICA2ICApICAjIOKgpyDgqrUgW0dVSkFSQVRJIExFVFRFUiBWQV0KK2NoYXIgXHUwQUI2CSgxICA0IDYgICkgICMg4qCpIOCqtiBbR1VKQVJBVEkgTEVUVEVSIFNIQV0KK2NoYXIgXHUwQUI3CSgxMjM0IDYgICkgICMg4qCvIOCqtyBbR1VKQVJBVEkgTEVUVEVSIFNTQV0KK2NoYXIgXHUwQUI4CSggMjM0ICAgICkgICMg4qCOIOCquCBbR1VKQVJBVEkgTEVUVEVSIFNBXQorY2hhciBcdTBBQjkJKDEyICA1ICAgKSAgIyDioJMg4Kq5IFtHVUpBUkFUSSBMRVRURVIgSEFdCitjaGFyIFx1MEFCRAkoIDIgICAgICApICAjIOKggiDgqr0gW0dVSkFSQVRJIFNJR04gQVZBR1JBSEFdCitjaGFyIFx1MEFCRQkoICAzNDUgICApICAjIOKgnCDgqr4gW0dVSkFSQVRJIFZPV0VMIFNJR04gQUFdCitjaGFyIFx1MEFCRgkoIDIgNCAgICApICAjIOKgiiDgqr8gW0dVSkFSQVRJIFZPV0VMIFNJR04gSV0KK2NoYXIgXHUwQUMwCSggIDMgNSAgICkgICMg4qCUIOCrgCBbR1VKQVJBVEkgVk9XRUwgU0lHTiBJSV0KK2NoYXIgXHUwQUMxCSgxIDMgIDYgICkgICMg4qClIOCrgSBbR1VKQVJBVEkgVk9XRUwgU0lHTiBVXQorY2hhciBcdTBBQzIJKDEyICA1NiAgKSAgIyDioLMg4KuCIFtHVUpBUkFUSSBWT1dFTCBTSUdOIFVVXQorY2hhciBcdTBBQzUJKDEgICA1IDcgKSAgIyDioZEg4KuFIFtHVUpBUkFUSSBWT1dFTCBTSUdOIENBTkRSQSBFXQorCitjaGFyIFx1MEFDNwkoMSAgIDUgICApICAjIOKgkSDgq4cgW0dVSkFSQVRJIFZPV0VMIFNJR04gRV0KK2NoYXIgXHUwQUM4CSggIDM0ICAgICkgICMg4qCMIOCriCBbR1VKQVJBVEkgVk9XRUwgU0lHTiBBSV0KK2NoYXIgXHUwQUM5CSgxIDMgNSA3ICkgICMg4qGVIOCriSBbR1VKQVJBVEkgVk9XRUwgU0lHTiBDQU5EUkEgT10KKworY2hhciBcdTBBQ0IJKDEgMyA1ICAgKSAgIyDioJUg4KuLIFtHVUpBUkFUSSBWT1dFTCBTSUdOIE9dCitjaGFyIFx1MEFDQwkoIDIgNCA2ICApICAjIOKgqiDgq4wgW0dVSkFSQVRJIFZPV0VMIFNJR04gQVVdCitjaGFyIFx1MEFDRAkoICAgNCAgICApICAjIOKgiCDgq40gW0dVSkFSQVRJIFNJR04gVklSQU1BXQorCitjaGFyIFx1MEFFNgkoIDIgNDUgICApICAjIOKgmiDgq6YgW0dVSkFSQVRJIERJR0lUIFpFUk9dCitjaGFyIFx1MEFFNwkoMSAgICAgICApICAjIOKggSDgq6cgW0dVSkFSQVRJIERJR0lUIE9ORV0KK2NoYXIgXHUwQUU4CSgxMiAgICAgICkgICMg4qCDIOCrqCBbR1VKQVJBVEkgRElHSVQgVFdPXQorY2hhciBcdTBBRTkJKDEgIDQgICAgKSAgIyDioIkg4KupIFtHVUpBUkFUSSBESUdJVCBUSFJFRV0KK2NoYXIgXHUwQUVBCSgxICA0NSAgICkgICMg4qCZIOCrqiBbR1VKQVJBVEkgRElHSVQgRk9VUl0KK2NoYXIgXHUwQUVCCSgxICAgNSAgICkgICMg4qCRIOCrqyBbR1VKQVJBVEkgRElHSVQgRklWRV0KK2NoYXIgXHUwQUVDCSgxMiA0ICAgICkgICMg4qCLIOCrrCBbR1VKQVJBVEkgRElHSVQgU0lYXQorY2hhciBcdTBBRUQJKDEyIDQ1ICAgKSAgIyDioJsg4KutIFtHVUpBUkFUSSBESUdJVCBTRVZFTl0KK2NoYXIgXHUwQUVFCSgxMiAgNSAgICkgICMg4qCTIOCrriBbR1VKQVJBVEkgRElHSVQgRUlHSFRdCitjaGFyIFx1MEFFRgkoIDIgNCAgICApICAjIOKgiiDgq68gW0dVSkFSQVRJIERJR0lUIE5JTkVdCmRpZmYgLS1naXQgYS9UYWJsZXMvVGV4dC9ndXJtdWtoaS50dGkgYi9UYWJsZXMvVGV4dC9ndXJtdWtoaS50dGkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTgwNzcxNgotLS0gL2Rldi9udWxsCisrKyBiL1RhYmxlcy9UZXh0L2d1cm11a2hpLnR0aQpAQCAtMCwwICsxLDEwOSBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorIyAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyMKKyMgQ29weXJpZ2h0IChDKSAyMDA4LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorIworIyBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorIworIyBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisjIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyMgbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisjCisjIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMgVGhpcyBCUkxUVFkgdGV4dCBzdWJ0YWJsZSBkZWZpbmVzIHRoZSBicmFpbGxlIHJlcHJlc2VudGF0aW9ucworIyBmb3IgdGhlIEd1cm11a2hpIHNjcmlwdC4KKworIyBNYWludGFpbmVkIGJ5IEpvaG4gSi4gQm95ZXIsIGRpcmVjdG9yQGNocGkub3JnLCB3d3cuY2hwaS5vcmcKKyMKKyMgVGhpcyB0YWJsZSBpcyBidWlsdCBhbmQgbWFpbnRhaW5lZCBieSBMZW9uIFVuZ2llciA8TGVvbi5VbmdpZXJAVmlld1BsdXMuY29tPgorIyB3aXRoIGhlbHAgYW5kIGd1aWRhbmNlIGZyb20gTW9oYW1tZWQgUi4gUmFtYWRhbiA8bXJhbWFkYW5AbmF0dGlxLmNvbT4KKyMKKyMgQ29udmVydGVkIGZyb20gbGlibG91aXMgdGFibGUgYnkgU2FtdWVsIFRoaWJhdWx0IDxzYW11ZWwudGhpYmF1bHRAZW5zLWx5b24ub3JnPgorCisjIGdlbmVyYXRlZCBieSB0dGJ0ZXN0OgorY2hhciBcdTBBMDEJKCAgMyAgICAgKSAgIyDioIQg4KiBIFtHVVJNVUtISSBTSUdOIEFEQUsgQklOREldCitjaGFyIFx1MEEwMgkoICAgIDU2ICApICAjIOKgsCDgqIIgW0dVUk1VS0hJIFNJR04gQklOREldCitjaGFyIFx1MEEwMwkoICAgICA2ICApICAjIOKgoCDgqIMgW0dVUk1VS0hJIFNJR04gVklTQVJHQV0KK2NoYXIgXHUwQTA1CSgxICAgICAgICkgICMg4qCBIOCohSBbR1VSTVVLSEkgTEVUVEVSIEFdCitjaGFyIFx1MEEwNgkoICAzNDUgICApICAjIOKgnCDgqIYgW0dVUk1VS0hJIExFVFRFUiBBQV0KK2NoYXIgXHUwQTA3CSggMiA0ICAgICkgICMg4qCKIOCohyBbR1VSTVVLSEkgTEVUVEVSIEldCitjaGFyIFx1MEEwOAkoICAzIDUgICApICAjIOKglCDgqIggW0dVUk1VS0hJIExFVFRFUiBJSV0KK2NoYXIgXHUwQTA5CSgxIDMgIDYgICkgICMg4qClIOCoiSBbR1VSTVVLSEkgTEVUVEVSIFVdCitjaGFyIFx1MEEwQQkoMTIgIDU2ICApICAjIOKgsyDgqIogW0dVUk1VS0hJIExFVFRFUiBVVV0KKworCitjaGFyIFx1MEEwRgkoMSAgIDUgICApICAjIOKgkSDgqI8gW0dVUk1VS0hJIExFVFRFUiBFRV0KK2NoYXIgXHUwQTEwCSggIDM0ICAgICkgICMg4qCMIOCokCBbR1VSTVVLSEkgTEVUVEVSIEFJXQorCisKK2NoYXIgXHUwQTEzCSgxIDMgNSAgICkgICMg4qCVIOCokyBbR1VSTVVLSEkgTEVUVEVSIE9PXQorY2hhciBcdTBBMTQJKCAyIDQgNiAgKSAgIyDioKog4KiUIFtHVVJNVUtISSBMRVRURVIgQVVdCitjaGFyIFx1MEExNQkoMSAzICAgICApICAjIOKghSDgqJUgW0dVUk1VS0hJIExFVFRFUiBLQV0KK2NoYXIgXHUwQTE2CSggICA0IDYgICkgICMg4qCoIOColiBbR1VSTVVLSEkgTEVUVEVSIEtIQV0KK2NoYXIgXHUwQTE3CSgxMjM0ICAgICkgICMg4qCPIOColyBbR1VSTVVLSEkgTEVUVEVSIEdBXQorY2hhciBcdTBBMTgJKDEyICAgNiAgKSAgIyDioKMg4KiYIFtHVVJNVUtISSBMRVRURVIgR0hBXQorY2hhciBcdTBBMTkJKCAgMzQgNiAgKSAgIyDioKwg4KiZIFtHVVJNVUtISSBMRVRURVIgTkdBXQorY2hhciBcdTBBMUEJKDEgIDQgICAgKSAgIyDioIkg4KiaIFtHVVJNVUtISSBMRVRURVIgQ0FdCitjaGFyIFx1MEExQgkoMSAgICA2ICApICAjIOKgoSDgqJsgW0dVUk1VS0hJIExFVFRFUiBDSEFdCitjaGFyIFx1MEExQwkoIDIgNDUgICApICAjIOKgmiDgqJwgW0dVUk1VS0hJIExFVFRFUiBKQV0KK2NoYXIgXHUwQTFECSggIDMgNTYgICkgICMg4qC0IOConSBbR1VSTVVLSEkgTEVUVEVSIEpIQV0KK2NoYXIgXHUwQTFFCSggMiAgNSAgICkgICMg4qCSIOConiBbR1VSTVVLSEkgTEVUVEVSIE5ZQV0KK2NoYXIgXHUwQTFGCSggMjM0NTYgICkgICMg4qC+IOConyBbR1VSTVVLSEkgTEVUVEVSIFRUQV0KK2NoYXIgXHUwQTIwCSggMiA0NTYgICkgICMg4qC6IOCooCBbR1VSTVVLSEkgTEVUVEVSIFRUSEFdCitjaGFyIFx1MEEyMQkoMTIgNCA2ICApICAjIOKgqyDgqKEgW0dVUk1VS0hJIExFVFRFUiBEREFdCitjaGFyIFx1MEEyMgkoMTIzNDU2ICApICAjIOKgvyDgqKIgW0dVUk1VS0hJIExFVFRFUiBEREhBXQorY2hhciBcdTBBMjMJKCAgMzQ1NiAgKSAgIyDioLwg4KijIFtHVVJNVUtISSBMRVRURVIgTk5BXQorY2hhciBcdTBBMjQJKCAyMzQ1ICAgKSAgIyDioJ4g4KikIFtHVVJNVUtISSBMRVRURVIgVEFdCitjaGFyIFx1MEEyNQkoMSAgNDU2ICApICAjIOKguSDgqKUgW0dVUk1VS0hJIExFVFRFUiBUSEFdCitjaGFyIFx1MEEyNgkoMSAgNDUgICApICAjIOKgmSDgqKYgW0dVUk1VS0hJIExFVFRFUiBEQV0KK2NoYXIgXHUwQTI3CSggMjM0IDYgICkgICMg4qCuIOCopyBbR1VSTVVLSEkgTEVUVEVSIERIQV0KK2NoYXIgXHUwQTI4CSgxIDM0NSAgICkgICMg4qCdIOCoqCBbR1VSTVVLSEkgTEVUVEVSIE5BXQorCitjaGFyIFx1MEEyQQkoMTIzNCAgICApICAjIOKgjyDgqKogW0dVUk1VS0hJIExFVFRFUiBQQV0KK2NoYXIgXHUwQTJCCSggMjMgNSAgICkgICMg4qCWIOCoqyBbR1VSTVVLSEkgTEVUVEVSIFBIQV0KK2NoYXIgXHUwQTJDCSgxMiAgICAgICkgICMg4qCDIOCorCBbR1VSTVVLSEkgTEVUVEVSIEJBXQorY2hhciBcdTBBMkQJKCAgIDQ1ICAgKSAgIyDioJgg4KitIFtHVVJNVUtISSBMRVRURVIgQkhBXQorY2hhciBcdTBBMkUJKDEgMzQgICAgKSAgIyDioI0g4KiuIFtHVVJNVUtISSBMRVRURVIgTUFdCitjaGFyIFx1MEEyRgkoMSAzNDU2ICApICAjIOKgvSDgqK8gW0dVUk1VS0hJIExFVFRFUiBZQV0KK2NoYXIgXHUwQTMwCSgxMjMgNSAgICkgICMg4qCXIOCosCBbR1VSTVVLSEkgTEVUVEVSIFJBXQorCitjaGFyIFx1MEEzMgkoMTIzICAgICApICAjIOKghyDgqLIgW0dVUk1VS0hJIExFVFRFUiBMQV0KK2NoYXIgXHUwQTMzCSgxMjMgICA3ICkgICMg4qGHIOCosyBbR1VSTVVLSEkgTEVUVEVSIExMQV0KKworY2hhciBcdTBBMzUJKDEyMyAgNiAgKSAgIyDioKcg4Ki1IFtHVVJNVUtISSBMRVRURVIgVkFdCitjaGFyIFx1MEEzNgkoMSAgNCA2ICApICAjIOKgqSDgqLYgW0dVUk1VS0hJIExFVFRFUiBTSEFdCisKK2NoYXIgXHUwQTM4CSggMjM0ICAgICkgICMg4qCOIOCouCBbR1VSTVVLSEkgTEVUVEVSIFNBXQorY2hhciBcdTBBMzkJKDEyICA1ICAgKSAgIyDioJMg4Ki5IFtHVVJNVUtISSBMRVRURVIgSEFdCisKK2NoYXIgXHUwQTNFCSggIDM0NSAgICkgICMg4qCcIOCoviBbR1VSTVVLSEkgVk9XRUwgU0lHTiBBQV0KK2NoYXIgXHUwQTNGCSggMiA0ICAgICkgICMg4qCKIOCovyBbR1VSTVVLSEkgVk9XRUwgU0lHTiBJXQorY2hhciBcdTBBNDAJKCAgMyA1ICAgKSAgIyDioJQg4KmAIFtHVVJNVUtISSBWT1dFTCBTSUdOIElJXQorY2hhciBcdTBBNDEJKDEgMyAgNiAgKSAgIyDioKUg4KmBIFtHVVJNVUtISSBWT1dFTCBTSUdOIFVdCitjaGFyIFx1MEE0MgkoMTIgIDU2ICApICAjIOKgsyDgqYIgW0dVUk1VS0hJIFZPV0VMIFNJR04gVVVdCisKKworY2hhciBcdTBBNDcJKDEgICA1ICAgKSAgIyDioJEg4KmHIFtHVVJNVUtISSBWT1dFTCBTSUdOIEVFXQorY2hhciBcdTBBNDgJKCAgMzQgICAgKSAgIyDioIwg4KmIIFtHVVJNVUtISSBWT1dFTCBTSUdOIEFJXQorCisKK2NoYXIgXHUwQTRCCSgxIDMgNSAgICkgICMg4qCVIOCpiyBbR1VSTVVLSEkgVk9XRUwgU0lHTiBPT10KK2NoYXIgXHUwQTRDCSggMiA0IDYgICkgICMg4qCqIOCpjCBbR1VSTVVLSEkgVk9XRUwgU0lHTiBBVV0KK2NoYXIgXHUwQTRECSggICA0ICAgICkgICMg4qCIIOCpjSBbR1VSTVVLSEkgU0lHTiBWSVJBTUFdCisKK2NoYXIgXHUwQTY2CSggMiA0NSAgICkgICMg4qCaIOCppiBbR1VSTVVLSEkgRElHSVQgWkVST10KK2NoYXIgXHUwQTY3CSgxICAgICAgICkgICMg4qCBIOCppyBbR1VSTVVLSEkgRElHSVQgT05FXQorY2hhciBcdTBBNjgJKDEyICAgICAgKSAgIyDioIMg4KmoIFtHVVJNVUtISSBESUdJVCBUV09dCitjaGFyIFx1MEE2OQkoMSAgNCAgICApICAjIOKgiSDgqakgW0dVUk1VS0hJIERJR0lUIFRIUkVFXQorY2hhciBcdTBBNkEJKDEgIDQ1ICAgKSAgIyDioJkg4KmqIFtHVVJNVUtISSBESUdJVCBGT1VSXQorY2hhciBcdTBBNkIJKDEgICA1ICAgKSAgIyDioJEg4KmrIFtHVVJNVUtISSBESUdJVCBGSVZFXQorY2hhciBcdTBBNkMJKDEyIDQgICAgKSAgIyDioIsg4KmsIFtHVVJNVUtISSBESUdJVCBTSVhdCitjaGFyIFx1MEE2RAkoMTIgNDUgICApICAjIOKgmyDgqa0gW0dVUk1VS0hJIERJR0lUIFNFVkVOXQorY2hhciBcdTBBNkUJKDEyICA1ICAgKSAgIyDioJMg4KmuIFtHVVJNVUtISSBESUdJVCBFSUdIVF0KK2NoYXIgXHUwQTZGCSggMiA0ICAgICkgICMg4qCKIOCpryBbR1VSTVVLSEkgRElHSVQgTklORV0KZGlmZiAtLWdpdCBhL1RhYmxlcy9UZXh0L2hlLnR0YiBiL1RhYmxlcy9UZXh0L2hlLnR0YgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZTNmY2I0Ci0tLSAvZGV2L251bGwKKysrIGIvVGFibGVzL1RleHQvaGUudHRiCkBAIC0wLDAgKzEsMTA4IEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisjICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorIworIyBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisjCisjIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisjCisjIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyMgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorIyBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyMKKyMgV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworIworIyBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIyBCUkxUVFkgVGV4dCBUYWJsZSAtIEhlYnJldworIworIyBBZGkgS3VzaG5pciA8YWRpa3VzaG5pckBnbWFpbC5jb20+CisKK2luY2x1ZGUgbHRyLWxhdGluLnR0aQoraW5jbHVkZSBudW0tbmVtZXRoLnR0aQorCitjaGFyCVx4MjEJKCAyMyA1ICA4KSAgIyDiopYgISBbRVhDTEFNQVRJT04gTUFSS10KK2NoYXIJXHgyMgkoICAgIDUgICApICAjIOKgkCAiIFtRVU9UQVRJT04gTUFSS10KK2NoYXIJXHgyMwkoICAzNDU2ICApICAjIOKgvCAjIFtOVU1CRVIgU0lHTl0KK2NoYXIJXHgyNAkoMTIgNCA2ICApICAjIOKgqyAkIFtET0xMQVIgU0lHTl0KK2NoYXIJXHgyNQkoMSAgNCA2NyApICAjIOKhqSAlIFtQRVJDRU5UIFNJR05dCitjaGFyCVx4MjYJKCAyMzQgNiAgKSAgIyDioK4gJiBbQU1QRVJTQU5EXQorY2hhcglceDI3CSggIDMgICAgICkgICMg4qCEICcgW0FQT1NUUk9QSEVdCitjaGFyCVx4MjgJKDEyMyA1NiAgKSAgIyDioLcgKCBbTEVGVCBQQVJFTlRIRVNJU10KK2NoYXIJXHgyOQkoIDIzNDU2ICApICAjIOKgviApIFtSSUdIVCBQQVJFTlRIRVNJU10KK2NoYXIJXHgyQQkoMSAgICA2ICApICAjIOKgoSAqIFtBU1RFUklTS10KK2NoYXIJXHgyQgkoICAzNCA2ICApICAjIOKgrCArIFtQTFVTIFNJR05dCitjaGFyCVx4MkMJKCAgICAgNiAgKSAgIyDioKAgLCBbQ09NTUFdCitjaGFyCVx4MkQJKCAgMyAgNiAgKSAgIyDioKQgLSBbSFlQSEVOLU1JTlVTXQorY2hhcglceDJFCSggICA0IDYgICkgICMg4qCoIC4gW0ZVTEwgU1RPUF0KK2NoYXIJXHgyRgkoICAzNCAgICApICAjIOKgjCAvIFtTT0xJRFVTXQorY2hhcglceDNBCSgxICAgNTYgICkgICMg4qCxIDogW0NPTE9OXQorY2hhcglceDNCCSggICAgNTYgICkgICMg4qCwIDsgW1NFTUlDT0xPTl0KK2NoYXIJXHgzQwkoMTIgICA2ICApICAjIOKgoyA8IFtMRVNTLVRIQU4gU0lHTl0KK2NoYXIJXHgzRAkoMTIzNDU2ICApICAjIOKgvyA9IFtFUVVBTFMgU0lHTl0KK2NoYXIJXHgzRQkoICAzNDUgICApICAjIOKgnCA+IFtHUkVBVEVSLVRIQU4gU0lHTl0KK2NoYXIJXHgzRgkoIDIgICA2IDgpICAjIOKioiA/IFtRVUVTVElPTiBNQVJLXQorY2hhcglceDQwCSggICA0ICA3ICkgICMg4qGIIEAgW0NPTU1FUkNJQUwgQVRdCitjaGFyCVx4NUIJKCAyIDQgNjcgKSAgIyDioaogWyBbTEVGVCBTUVVBUkUgQlJBQ0tFVF0KK2NoYXIJXHg1QwkoMTIgIDU2NyApICAjIOKhsyBcIFtSRVZFUlNFIFNPTElEVVNdCitjaGFyCVx4NUQJKDEyIDQ1NjcgKSAgIyDiobsgXSBbUklHSFQgU1FVQVJFIEJSQUNLRVRdCitjaGFyCVx4NUUJKCAgIDQ1IDcgKSAgIyDioZggXiBbQ0lSQ1VNRkxFWCBBQ0NFTlRdCitjaGFyCVx4NUYJKCAgIDQ1NjcgKSAgIyDiobggXyBbTE9XIExJTkVdCitjaGFyCVx4NjAJKCAgIDQgICAgKSAgIyDioIggYCBbR1JBVkUgQUNDRU5UXQorZ2x5cGgJXHg3QgkoIDIzICA2ICApICAjIOKgpiB7IFtMRUZUIENVUkxZIEJSQUNLRVRdCitjaGFyCVx4N0MJKDEyICA1NiAgKSAgIyDioLMgfCBbVkVSVElDQUwgTElORV0KK2NoYXIJXHg3RAkoMTIgNDU2ICApICAjIOKguyB9IFtSSUdIVCBDVVJMWSBCUkFDS0VUXQorY2hhcglceDdFCSggICA0NSAgICkgICMg4qCYIH4gW1RJTERFXQorCitnbHlwaAlcdTA1QjEJKCAyICAgNiAgKSAgIyDioKIg1rEgW0hFQlJFVyBQT0lOVCBIQVRBRiBTRUdPTF0KK2dseXBoCVx1MDVCMgkoIDIgIDUgICApICAjIOKgkiDWsiBbSEVCUkVXIFBPSU5UIEhBVEFGIFBBVEFIXQorZ2x5cGgJXHUwNUIzCSggIDM0NSAgICkgICMg4qCcINazIFtIRUJSRVcgUE9JTlQgSEFUQUYgUUFNQVRTXQorZ2x5cGgJXHUwNUI0CSggMiA0ICAgICkgICMg4qCKINa0IFtIRUJSRVcgUE9JTlQgSElSSVFdCitnbHlwaAlcdTA1QjUJKCAgMzQgICAgKSAgIyDioIwg1rUgW0hFQlJFVyBQT0lOVCBUU0VSRV0KK2dseXBoCVx1MDVCNgkoMSAgIDUgICApICAjIOKgkSDWtiBbSEVCUkVXIFBPSU5UIFNFR09MXQorZ2x5cGgJXHUwNUI3CSgxICA0ICAgICkgICMg4qCJINa3IFtIRUJSRVcgUE9JTlQgUEFUQUhdCitnbHlwaAlcdTA1QjgJKDEyICAgNiAgKSAgIyDioKMg1rggW0hFQlJFVyBQT0lOVCBRQU1BVFNdCitnbHlwaAlcdTA1QjkJKDEgMyA1ICAgKSAgIyDioJUg1rkgW0hFQlJFVyBQT0lOVCBIT0xBTV0KK2dseXBoCVx1MDVCQgkoMSAzICA2ICApICAjIOKgpSDWuyBbSEVCUkVXIFBPSU5UIFFVQlVUU10KK2dseXBoCVx1MDVEMAkoMSAgICAgICApICAjIOKggSDXkCBbSEVCUkVXIExFVFRFUiBBTEVGXQorZ2x5cGgJXHUwNUQxCSgxMjMgIDYgICkgICMg4qCnINeRIFtIRUJSRVcgTEVUVEVSIEJFVF0KK2dseXBoCVx1MDVEMgkoMTIgNDUgICApICAjIOKgmyDXkiBbSEVCUkVXIExFVFRFUiBHSU1FTF0KK2dseXBoCVx1MDVEMwkoMSAgNDUgICApICAjIOKgmSDXkyBbSEVCUkVXIExFVFRFUiBEQUxFVF0KK2dseXBoCVx1MDVENAkoMTIgIDUgICApICAjIOKgkyDXlCBbSEVCUkVXIExFVFRFUiBIRV0KK2dseXBoCVx1MDVENQkoIDIgNDU2ICApICAjIOKguiDXlSBbSEVCUkVXIExFVFRFUiBWQVZdCitnbHlwaAlcdTA1RDYJKDEgMyA1NiAgKSAgIyDioLUg15YgW0hFQlJFVyBMRVRURVIgWkFZSU5dCitnbHlwaAlcdTA1RDcJKDEgMzQgNiAgKSAgIyDioK0g15cgW0hFQlJFVyBMRVRURVIgSEVUXQorZ2x5cGgJXHUwNUQ4CSggMjM0NSAgICkgICMg4qCeINeYIFtIRUJSRVcgTEVUVEVSIFRFVF0KK2dseXBoCVx1MDVEOQkoIDIgNDUgICApICAjIOKgmiDXmSBbSEVCUkVXIExFVFRFUiBZT0RdCitjaGFyCVx1MDVEQQkoMSAgICA2IDgpICAjIOKioSDXmiBbSEVCUkVXIExFVFRFUiBGSU5BTCBLQUZdCitnbHlwaAlcdTA1REIJKDEgICAgNiAgKSAgIyDioKEg15sgW0hFQlJFVyBMRVRURVIgS0FGXQorZ2x5cGgJXHUwNURDCSgxMjMgICAgICkgICMg4qCHINecIFtIRUJSRVcgTEVUVEVSIExBTUVEXQorY2hhcglcdTA1REQJKDEgMzQgICA4KSAgIyDioo0g150gW0hFQlJFVyBMRVRURVIgRklOQUwgTUVNXQorZ2x5cGgJXHUwNURFCSgxIDM0ICAgICkgICMg4qCNINeeIFtIRUJSRVcgTEVUVEVSIE1FTV0KK2NoYXIJXHUwNURGCSgxIDM0NSAgOCkgICMg4qKdINefIFtIRUJSRVcgTEVUVEVSIEZJTkFMIE5VTl0KK2dseXBoCVx1MDVFMAkoMSAzNDUgICApICAjIOKgnSDXoCBbSEVCUkVXIExFVFRFUiBOVU5dCitnbHlwaAlcdTA1RTEJKCAyMzQgICAgKSAgIyDioI4g16EgW0hFQlJFVyBMRVRURVIgU0FNRUtIXQorZ2x5cGgJXHUwNUUyCSgxMiA0IDYgICkgICMg4qCrINeiIFtIRUJSRVcgTEVUVEVSIEFZSU5dCitjaGFyCVx1MDVFMwkoMTIgNCAgIDgpICAjIOKiiyDXoyBbSEVCUkVXIExFVFRFUiBGSU5BTCBQRV0KK2dseXBoCVx1MDVFNAkoMTIzNCAgICApICAjIOKgjyDXpCBbSEVCUkVXIExFVFRFUiBQRV0KK2NoYXIJXHUwNUU1CSggMjM0IDYgOCkgICMg4qKuINelIFtIRUJSRVcgTEVUVEVSIEZJTkFMIFRTQURJXQorZ2x5cGgJXHUwNUU2CSggMjM0IDYgICkgICMg4qCuINemIFtIRUJSRVcgTEVUVEVSIFRTQURJXQorZ2x5cGgJXHUwNUU3CSgxMjM0NSAgICkgICMg4qCfINenIFtIRUJSRVcgTEVUVEVSIFFPRl0KK2dseXBoCVx1MDVFOAkoMTIzIDUgICApICAjIOKglyDXqCBbSEVCUkVXIExFVFRFUiBSRVNIXQorY2hhcglcdTA1RTkJKDEgIDQgNiAgKSAgIyDioKkg16kgW0hFQlJFVyBMRVRURVIgU0hJTl0KK2NoYXIJXHUwNUVBCSgxICA0NTYgICkgICMg4qC5INeqIFtIRUJSRVcgTEVUVEVSIFRBVl0KKworZ2x5cGgJXHVGQjFECSggIDMgNSAgICkgICMg4qCUIO+snSBbSEVCUkVXIExFVFRFUiBZT0QgV0lUSCBISVJJUV0KK2dseXBoCVx1RkIyQQkoMSAgNCA2ICApICAjIOKgqSDvrKogW0hFQlJFVyBMRVRURVIgU0hJTiBXSVRIIFNISU4gRE9UXQorZ2x5cGgJXHVGQjJCCSgxICAgNTYgICkgICMg4qCxIO+sqyBbSEVCUkVXIExFVFRFUiBTSElOIFdJVEggU0lOIERPVF0KK2dseXBoCVx1RkIzMQkoMTIgICAgICApICAjIOKggyDvrLEgW0hFQlJFVyBMRVRURVIgQkVUIFdJVEggREFHRVNIXQorZ2x5cGgJXHVGQjM1CSggIDM0IDYgICkgICMg4qCsIO+stSBbSEVCUkVXIExFVFRFUiBWQVYgV0lUSCBEQUdFU0hdCitnbHlwaAlcdUZCM0EJKDEgMyAgICAgKSAgIyDioIUg76y6IFtIRUJSRVcgTEVUVEVSIEZJTkFMIEtBRiBXSVRIIERBR0VTSF0KK2dseXBoCVx1RkIzQgkoMSAzICAgICApICAjIOKghSDvrLsgW0hFQlJFVyBMRVRURVIgS0FGIFdJVEggREFHRVNIXQorZ2x5cGgJXHVGQjQzCSgxMjM0ICAgICkgICMg4qCPIO+tgyBbSEVCUkVXIExFVFRFUiBGSU5BTCBQRSBXSVRIIERBR0VTSF0KK2dseXBoCVx1RkI0NAkoMTIzNCAgICApICAjIOKgjyDvrYQgW0hFQlJFVyBMRVRURVIgUEUgV0lUSCBEQUdFU0hdCitnbHlwaAlcdUZCNEEJKDEyICA1NiAgKSAgIyDioLMg762KIFtIRUJSRVcgTEVUVEVSIFRBViBXSVRIIERBR0VTSF0KKworaW5jbHVkZSBjb21tb24udHRpCmRpZmYgLS1naXQgYS9UYWJsZXMvVGV4dC9oaS50dGIgYi9UYWJsZXMvVGV4dC9oaS50dGIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTVmMmY3ZAotLS0gL2Rldi9udWxsCisrKyBiL1RhYmxlcy9UZXh0L2hpLnR0YgpAQCAtMCwwICsxLDI0IEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisjICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorIworIyBDb3B5cmlnaHQgKEMpIDIwMDgtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisjCisjIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisjCisjIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyMgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorIyBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyMKKyMgV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworIworIyBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIyBCUkxUVFkgVGV4dCBUYWJsZSAtIEhpbmRpCisKK2luY2x1ZGUgZGV2YW5hZ2FyaS50dGkKK2luY2x1ZGUgYXNjaWktYmFzaWMudHRpCisKK2luY2x1ZGUgY29tbW9uLnR0aQpkaWZmIC0tZ2l0IGEvVGFibGVzL1RleHQvaHIudHRiIGIvVGFibGVzL1RleHQvaHIudHRiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk3M2M3MzIKLS0tIC9kZXYvbnVsbAorKysgYi9UYWJsZXMvVGV4dC9oci50dGIKQEAgLTAsMCArMSwyMDUgQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyMgICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisjCisjIENvcHlyaWdodCAoQykgMjAwOC0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyMKKyMgQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjIEJSTFRUWSBUZXh0IFRhYmxlIC0gQ3JvYXRpYW4KKyMKKyMgQ29weXJpZ2h0IChDKSAyMDA1IGJ5IFNlYmFzdGllbiBTYWJsZSwgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKworIyBUYWJsZSBnZW5lcmF0ZWQgYnkgU8OpYmFzdGllbiBTYWJsw6kgPHNhYmxlQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4gZm9yCisjIGxpYmJyYWlsbGUgaHR0cDovL2xpYmJyYWlsbGUub3JnIGFuZCBnbm9tZS1icmFpbGxlCisjIGh0dHA6Ly9jdnMuZ25vbWUub3JnL3ZpZXdjdnMvZ25vbWUtYnJhaWxsZS8KKyMKKyMgVGFibGUgYWRhcHRlZCBmb3IgQlJMVFRZIGJ5IFNhbXVlbCBUaGliYXVsdCA8c2FtdWVsLnRoaWJhdWx0QGVucy1seW9uLm9yZz4KKyMKKyMgKk1hbnkgdGhhbmtzIHRvIERhbmtvIEJ1dG9yYWMgPGRhbmtvIGF0IGlwc2lzLmhyPiBmb3IgaGlzIGhlbHAqCisjIFRhYmxlIGJhc2VkIG9uICJDcm9hdGlhbiBjb2RlIHBhZ2UgZm9yIGNvbXB1dGVyIDgtZG90IEJyYWlsbGUKKyMgYWxwaGFiZXQgQU5TSS0xMjUwIiBmcm9tIHRoZSAiQ3JvYXRpYW4gQXNzb2NpYXRpb24gb2YgdGhlIEJsaW5kIiBhdAorIyBodHRwOi8vd3d3LnNhdmV6LXNsaWplcGloLmhyL2VuL2Rvd25sb2FkLmh0bQorCisjIHRoZSBzdGFuZGFyZCByZXByZXNlbnRhdGlvbnMgZm9yIHRoZSBsZXR0ZXJzIG9mIHRoZSBMYXRpbiBhbHBoYWJldAoraW5jbHVkZSBsdHItbGF0aW4udHRpCisKKyMgZ2VuZXJhdGVkIGJ5IHR0YnRlc3Q6IGNoYXJzZXQ9aXNvLTg4NTktMgorY2hhciBceDIwCSggICAgICAgICkgICMgMjAg4qCAICAgW1NQQUNFXQorY2hhciBceDIyCSggMjMgNTYgICkgICMgMjIg4qC2ICIgW1FVT1RBVElPTiBNQVJLXQorY2hhciBceDI0CSggMjM0IDYgICkgICMgMjQg4qCuICQgW0RPTExBUiBTSUdOXQorY2hhciBceDI1CSggICA0IDYgICkgICMgMjUg4qCoICUgW1BFUkNFTlQgU0lHTl0KK2NoYXIgXHgyNgkoMTIzNCA2ICApICAjIDI2IOKgryAmIFtBTVBFUlNBTkRdCitjaGFyIFx4MjcJKCAgICAgNiAgKSAgIyAyNyDioKAgJyBbQVBPU1RST1BIRV0KK2NoYXIgXHgyOAkoMTIgICA2ICApICAjIDI4IOKgoyAoIFtMRUZUIFBBUkVOVEhFU0lTXQorY2hhciBceDI5CSggIDM0NSAgICkgICMgMjkg4qCcICkgW1JJR0hUIFBBUkVOVEhFU0lTXQorY2hhciBceDJBCSggIDMgNSAgICkgICMgMkEg4qCUICogW0FTVEVSSVNLXQorY2hhciBceDJCCSggMjMgNSAgICkgICMgMkIg4qCWICsgW1BMVVMgU0lHTl0KK2NoYXIgXHgyQwkoIDIgICAgICApICAjIDJDIOKggiAsIFtDT01NQV0KK2NoYXIgXHgyRAkoICAzICA2ICApICAjIDJEIOKgpCAtIFtIWVBIRU4tTUlOVVNdCitjaGFyIFx4MkUJKCAgMyAgICAgKSAgIyAyRSDioIQgLiBbRlVMTCBTVE9QXQorY2hhciBceDJGCSggMiAgNTYgICkgICMgMkYg4qCyIC8gW1NPTElEVVNdCitjaGFyIFx4MzAJKCAgMzQgNiAgKSAgIyAzMCDioKwgMCBbRElHSVQgWkVST10KK2NoYXIgXHgzMQkoMSAgICA2ICApICAjIDMxIOKgoSAxIFtESUdJVCBPTkVdCitjaGFyIFx4MzIJKCAgMzQgICAgKSAgIyAzMiDioIwgMiBbRElHSVQgVFdPXQorY2hhciBceDMzCSgxICA0IDYgICkgICMgMzMg4qCpIDMgW0RJR0lUIFRIUkVFXQorY2hhciBceDM0CSgxICA0NTYgICkgICMgMzQg4qC5IDQgW0RJR0lUIEZPVVJdCitjaGFyIFx4MzUJKDEgICA1NiAgKSAgIyAzNSDioLEgNSBbRElHSVQgRklWRV0KK2NoYXIgXHgzNgkoMTIgNCA2ICApICAjIDM2IOKgqyA2IFtESUdJVCBTSVhdCitjaGFyIFx4MzcJKDEyIDQ1NiAgKSAgIyAzNyDioLsgNyBbRElHSVQgU0VWRU5dCitjaGFyIFx4MzgJKDEyICA1NiAgKSAgIyAzOCDioLMgOCBbRElHSVQgRUlHSFRdCitjaGFyIFx4MzkJKCAyIDQgNiAgKSAgIyAzOSDioKogOSBbRElHSVQgTklORV0KK2NoYXIgXHgzQQkoIDIgIDUgICApICAjIDNBIOKgkiA6IFtDT0xPTl0KK2NoYXIgXHgzQgkoIDIzICAgICApICAjIDNCIOKghiA7IFtTRU1JQ09MT05dCitjaGFyIFx4M0MJKCAyMyAgNiAgKSAgIyAzQyDioKYgPCBbTEVTUy1USEFOIFNJR05dCitjaGFyIFx4M0QJKDEyMzQ1NiAgKSAgIyAzRCDioL8gPSBbRVFVQUxTIFNJR05dCitjaGFyIFx4M0UJKCAgMyA1NiAgKSAgIyAzRSDioLQgPiBbR1JFQVRFUi1USEFOIFNJR05dCitjaGFyIFx4M0YJKCAyICAgNiAgKSAgIyAzRiDioKIgPyBbUVVFU1RJT04gTUFSS10KK2NoYXIgXHg0MAkoICAgNCAgNyApICAjIDQwIOKhiCBAIFtDT01NRVJDSUFMIEFUXQorIyB1cHBlcmNhc2UgTGF0aW4gYWxwaGFiZXQgICMgNDEtNUEKK2NoYXIgXHg1QgkoMTIzIDU2NyApICAjIDVCIOKhtyBbIFtMRUZUIFNRVUFSRSBCUkFDS0VUXQorY2hhciBceDVDCSggICA0NSA3ICkgICMgNUMg4qGYIFwgW1JFVkVSU0UgU09MSURVU10KK2NoYXIgXHg1RAkoIDIzNDU2NyApICAjIDVEIOKhviBdIFtSSUdIVCBTUVVBUkUgQlJBQ0tFVF0KK2NoYXIgXHg1RQkoICAgIDU2NyApICAjIDVFIOKhsCBeIFtDSVJDVU1GTEVYIEFDQ0VOVF0KK2NoYXIgXHg1RgkoICAgNDU2NyApICAjIDVGIOKhuCBfIFtMT1cgTElORV0KK2NoYXIgXHg2MAkoICAgNCAgICApICAjIDYwIOKgiCBgIFtHUkFWRSBBQ0NFTlRdCisjIGxvd2VyY2FzZSBMYXRpbiBhbHBoYWJldCAgIyA2MS03QQorY2hhciBceDdCCSgxMjMgNTYgICkgICMgN0Ig4qC3IHsgW0xFRlQgQ1VSTFkgQlJBQ0tFVF0KK2NoYXIgXHg3QwkoICAgNDUgICApICAjIDdDIOKgmCB8IFtWRVJUSUNBTCBMSU5FXQorY2hhciBceDdECSggMjM0NTYgICkgICMgN0Qg4qC+IH0gW1JJR0hUIENVUkxZIEJSQUNLRVRdCitjaGFyIFx4N0UJKCAgICA1NiAgKSAgIyA3RSDioLAgfiBbVElMREVdCitjaGFyIFx1MDEwNAkoICAzNDUgNzgpICAjIEExIOKjnCDEhCBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgQSBXSVRIIE9HT05FS10KK2NoYXIgXHUwMkQ4CSggICA0IDY3ICkgICMgQTIg4qGoIMuYIFtCUkVWRV0KK2NoYXIgXHUwMTQxCSgxMjMgIDYgOCkgICMgQTMg4qKnIMWBIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBMIFdJVEggU1RST0tFXQorY2hhciBceEE0CSggICA0IDY3OCkgICMgQTQg4qOoIMKkIFtDVVJSRU5DWSBTSUdOXQorY2hhciBcdTAxM0QJKCAgIDQ1NiA4KSAgIyBBNSDiorggxL0gW0xBVElOIENBUElUQUwgTEVUVEVSIEwgV0lUSCBDQVJPTl0KK2NoYXIgXHUwMTVBCSggMjM0ICAgOCkgICMgQTYg4qKOIMWaIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBTIFdJVEggQUNVVEVdCitjaGFyIFx4QTcJKCAgMyA1IDc4KSAgIyBBNyDio5QgwqcgW1NFQ1RJT04gU0lHTl0KK2NoYXIgXHhBOAkoICAgICAgIDgpICAjIEE4IOKigCDCqCBbRElBRVJFU0lTXQorY2hhciBcdTAxNjAJKDEgICA1NjcgKSAgIyBBOSDiobEgxaAgW0xBVElOIENBUElUQUwgTEVUVEVSIFMgV0lUSCBDQVJPTl0KK2NoYXIgXHUwMTVFCSggMjM0NTYgOCkgICMgQUEg4qK+IMWeIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBTIFdJVEggQ0VESUxMQV0KK2NoYXIgXHUwMTY0CSgxMjM0NSAgOCkgICMgQUIg4qKfIMWkIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBUIFdJVEggQ0FST05dCitjaGFyIFx1MDE3OQkoMSAzIDU2IDgpICAjIEFDIOKitSDFuSBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgWiBXSVRIIEFDVVRFXQorY2hhciBceEFECSggICAgICA3OCkgICMgQUQg4qOAIMKtIFtTT0ZUIEhZUEhFTl0KK2NoYXIgXHUwMTdECSggMjM0IDY3ICkgICMgQUUg4qGuIMW9IFtMQVRJTiBDQVBJVEFMIExFVFRFUiBaIFdJVEggQ0FST05dCitjaGFyIFx1MDE3QgkoMTIgICA2NzgpICAjIEFGIOKjoyDFuyBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgWiBXSVRIIERPVCBBQk9WRV0KK2NoYXIgXHhCMAkoICAgIDUgNzgpICAjIEIwIOKjkCDCsCBbREVHUkVFIFNJR05dCitjaGFyIFx1MDEwNQkoICAgIDU2NyApICAjIEIxIOKhsCDEhSBbTEFUSU4gU01BTEwgTEVUVEVSIEEgV0lUSCBPR09ORUtdCitjaGFyIFx1MDJEQgkoICAgIDUgIDgpICAjIEIyIOKikCDLmyBbT0dPTkVLXQorY2hhciBcdTAxNDIJKCAyMyAgIDc4KSAgIyBCMyDio4YgxYIgW0xBVElOIFNNQUxMIExFVFRFUiBMIFdJVEggU1RST0tFXQorY2hhciBceEI0CSggICA0ICAgOCkgICMgQjQg4qKIIMK0IFtBQ1VURSBBQ0NFTlRdCitjaGFyIFx1MDEzRQkoMTIgICAgIDgpICAjIEI1IOKigyDEviBbTEFUSU4gU01BTEwgTEVUVEVSIEwgV0lUSCBDQVJPTl0KK2NoYXIgXHUwMTVCCSggIDMgNSA3ICkgICMgQjYg4qGUIMWbIFtMQVRJTiBTTUFMTCBMRVRURVIgUyBXSVRIIEFDVVRFXQorY2hhciBcdTAyQzcJKCAgIDQ1ICA4KSAgIyBCNyDiopggy4cgW0NBUk9OXQorY2hhciBceEI4CSggICAgNTYgOCkgICMgQjgg4qKwIMK4IFtDRURJTExBXQorY2hhciBcdTAxNjEJKDEgICA1NiA4KSAgIyBCOSDiorEgxaEgW0xBVElOIFNNQUxMIExFVFRFUiBTIFdJVEggQ0FST05dCitjaGFyIFx1MDE1RgkoICAzIDU2NzgpICAjIEJBIOKjtCDFnyBbTEFUSU4gU01BTEwgTEVUVEVSIFMgV0lUSCBDRURJTExBXQorY2hhciBcdTAxNjUJKCAyMyA1NjcgKSAgIyBCQiDiobYgxaUgW0xBVElOIFNNQUxMIExFVFRFUiBUIFdJVEggQ0FST05dCitjaGFyIFx1MDE3QQkoIDIgICA2NzgpICAjIEJDIOKjoiDFuiBbTEFUSU4gU01BTEwgTEVUVEVSIFogV0lUSCBBQ1VURV0KK2NoYXIgXHUwMkRECSggICAgIDYgOCkgICMgQkQg4qKgIMudIFtET1VCTEUgQUNVVEUgQUNDRU5UXQorY2hhciBcdTAxN0UJKCAyMzQgNiA4KSAgIyBCRSDioq4gxb4gW0xBVElOIFNNQUxMIExFVFRFUiBaIFdJVEggQ0FST05dCitjaGFyIFx1MDE3QwkoMSAgICA2NzgpICAjIEJGIOKjoSDFvCBbTEFUSU4gU01BTEwgTEVUVEVSIFogV0lUSCBET1QgQUJPVkVdCitjaGFyIFx1MDE1NAkoMTIzIDUgIDgpICAjIEMwIOKilyDFlCBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgUiBXSVRIIEFDVVRFXQorY2hhciBceEMxCSgxIDMgICAgOCkgICMgQzEg4qKFIMOBIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBBIFdJVEggQUNVVEVdCitjaGFyIFx4QzIJKDEyMyA1NiA4KSAgIyBDMiDiorcgw4IgW0xBVElOIENBUElUQUwgTEVUVEVSIEEgV0lUSCBDSVJDVU1GTEVYXQorY2hhciBcdTAxMDIJKDEgICAgICA4KSAgIyBDMyDiooEgxIIgW0xBVElOIENBUElUQUwgTEVUVEVSIEEgV0lUSCBCUkVWRV0KK2NoYXIgXHhDNAkoICAzNDUgNyApICAjIEM0IOKhnCDDhCBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgQSBXSVRIIERJQUVSRVNJU10KK2NoYXIgXHUwMTM5CSgxMjMgICAgOCkgICMgQzUg4qKHIMS5IFtMQVRJTiBDQVBJVEFMIExFVFRFUiBMIFdJVEggQUNVVEVdCitjaGFyIFx1MDEwNgkoMSAgNCA2NyApICAjIEM2IOKhqSDEhiBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgQyBXSVRIIEFDVVRFXQorY2hhciBceEM3CSgxMjM0IDY3ICkgICMgQzcg4qGvIMOHIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBDIFdJVEggQ0VESUxMQV0KK2NoYXIgXHUwMTBDCSgxICAgIDY3ICkgICMgQzgg4qGhIMSMIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBDIFdJVEggQ0FST05dCitjaGFyIFx4QzkJKDEyMzQ1NjcgKSAgIyBDOSDiob8gw4kgW0xBVElOIENBUElUQUwgTEVUVEVSIEUgV0lUSCBBQ1VURV0KK2NoYXIgXHUwMTE4CSgxICAgNTY3OCkgICMgQ0Eg4qOxIMSYIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBFIFdJVEggT0dPTkVLXQorY2hhciBceENCCSgxMiA0IDY3ICkgICMgQ0Ig4qGrIMOLIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBFIFdJVEggRElBRVJFU0lTXQorY2hhciBcdTAxMUEJKDEyICAgNjcgKSAgIyBDQyDioaMgxJogW0xBVElOIENBUElUQUwgTEVUVEVSIEUgV0lUSCBDQVJPTl0KK2NoYXIgXHhDRAkoICAzNCAgNyApICAjIENEIOKhjCDDjSBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgSSBXSVRIIEFDVVRFXQorY2hhciBceENFCSgxMiA0NTY3ICkgICMgQ0Ug4qG7IMOOIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBJIFdJVEggQ0lSQ1VNRkxFWF0KK2NoYXIgXHUwMTBFCSgxICA0NSAgOCkgICMgQ0Yg4qKZIMSOIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBEIFdJVEggQ0FST05dCitjaGFyIFx1MDExMAkoMSAgNDU2NyApICAjIEQwIOKhuSDEkCBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgRCBXSVRIIFNUUk9LRV0KK2NoYXIgXHUwMTQzCSgxIDM0NSAgOCkgICMgRDEg4qKdIMWDIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBOIFdJVEggQUNVVEVdCitjaGFyIFx1MDE0NwkoMTIgNCA2NzgpICAjIEQyIOKjqyDFhyBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgTiBXSVRIIENBUk9OXQorY2hhciBceEQzCSgxIDMgNSAgOCkgICMgRDMg4qKVIMOTIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBPIFdJVEggQUNVVEVdCitjaGFyIFx4RDQJKDEgIDQ1Njc4KSAgIyBENCDio7kgw5QgW0xBVElOIENBUElUQUwgTEVUVEVSIE8gV0lUSCBDSVJDVU1GTEVYXQorY2hhciBcdTAxNTAJKCAyIDQgNjc4KSAgIyBENSDio6ogxZAgW0xBVElOIENBUElUQUwgTEVUVEVSIE8gV0lUSCBET1VCTEUgQUNVVEVdCitjaGFyIFx4RDYJKCAyIDQgNjcgKSAgIyBENiDioaogw5YgW0xBVElOIENBUElUQUwgTEVUVEVSIE8gV0lUSCBESUFFUkVTSVNdCitjaGFyIFx4RDcJKDEgMzQgNiA4KSAgIyBENyDioq0gw5cgW01VTFRJUExJQ0FUSU9OIFNJR05dCitjaGFyIFx1MDE1OAkoIDIgNDU2IDgpICAjIEQ4IOKiuiDFmCBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgUiBXSVRIIENBUk9OXQorY2hhciBcdTAxNkUJKCAgMzQgNjcgKSAgIyBEOSDioawgxa4gW0xBVElOIENBUElUQUwgTEVUVEVSIFUgV0lUSCBSSU5HIEFCT1ZFXQorY2hhciBceERBCSgxIDMgIDYgOCkgICMgREEg4qKlIMOaIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBVIFdJVEggQUNVVEVdCitjaGFyIFx1MDE3MAkoICAzNCA2NzgpICAjIERCIOKjrCDFsCBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgVSBXSVRIIERPVUJMRSBBQ1VURV0KK2NoYXIgXHhEQwkoMTIgIDU2NyApICAjIERDIOKhsyDDnCBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgVSBXSVRIIERJQUVSRVNJU10KK2NoYXIgXHhERAkoMSAzNDU2IDgpICAjIEREIOKivSDDnSBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgWSBXSVRIIEFDVVRFXQorY2hhciBcdTAxNjIJKCAyMzQ1ICA4KSAgIyBERSDiop4gxaIgW0xBVElOIENBUElUQUwgTEVUVEVSIFQgV0lUSCBDRURJTExBXQorY2hhciBceERGCSggMjM0IDY3OCkgICMgREYg4qOuIMOfIFtMQVRJTiBTTUFMTCBMRVRURVIgU0hBUlAgU10KK2NoYXIgXHUwMTU1CSggMjMgIDY3ICkgICMgRTAg4qGmIMWVIFtMQVRJTiBTTUFMTCBMRVRURVIgUiBXSVRIIEFDVVRFXQorY2hhciBceEUxCSggMiAgICA3ICkgICMgRTEg4qGCIMOhIFtMQVRJTiBTTUFMTCBMRVRURVIgQSBXSVRIIEFDVVRFXQorY2hhciBceEUyCSggMjMgIDY3OCkgICMgRTIg4qOmIMOiIFtMQVRJTiBTTUFMTCBMRVRURVIgQSBXSVRIIENJUkNVTUZMRVhdCitjaGFyIFx1MDEwMwkoIDIgICAgIDgpICAjIEUzIOKigiDEgyBbTEFUSU4gU01BTEwgTEVUVEVSIEEgV0lUSCBCUkVWRV0KK2NoYXIgXHhFNAkoICAzNDUgIDgpICAjIEU0IOKinCDDpCBbTEFUSU4gU01BTEwgTEVUVEVSIEEgV0lUSCBESUFFUkVTSVNdCitjaGFyIFx1MDEzQQkoIDIzICAgNyApICAjIEU1IOKhhiDEuiBbTEFUSU4gU01BTEwgTEVUVEVSIEwgV0lUSCBBQ1VURV0KK2NoYXIgXHUwMTA3CSgxICA0IDYgOCkgICMgRTYg4qKpIMSHIFtMQVRJTiBTTUFMTCBMRVRURVIgQyBXSVRIIEFDVVRFXQorY2hhciBceEU3CSgxMjM0IDYgOCkgICMgRTcg4qKvIMOnIFtMQVRJTiBTTUFMTCBMRVRURVIgQyBXSVRIIENFRElMTEFdCitjaGFyIFx1MDEwRAkoMSAgICA2IDgpICAjIEU4IOKioSDEjSBbTEFUSU4gU01BTEwgTEVUVEVSIEMgV0lUSCBDQVJPTl0KK2NoYXIgXHhFOQkoMTIzNDU2IDgpICAjIEU5IOKivyDDqSBbTEFUSU4gU01BTEwgTEVUVEVSIEUgV0lUSCBBQ1VURV0KK2NoYXIgXHUwMTE5CSggMiAgIDYgOCkgICMgRUEg4qKiIMSZIFtMQVRJTiBTTUFMTCBMRVRURVIgRSBXSVRIIE9HT05FS10KK2NoYXIgXHhFQgkoMTIgNCA2IDgpICAjIEVCIOKiqyDDqyBbTEFUSU4gU01BTEwgTEVUVEVSIEUgV0lUSCBESUFFUkVTSVNdCitjaGFyIFx1MDExQgkoIDIzICAgIDgpICAjIEVDIOKihiDEmyBbTEFUSU4gU01BTEwgTEVUVEVSIEUgV0lUSCBDQVJPTl0KK2NoYXIgXHhFRAkoICAzNCAgIDgpICAjIEVEIOKijCDDrSBbTEFUSU4gU01BTEwgTEVUVEVSIEkgV0lUSCBBQ1VURV0KK2NoYXIgXHhFRQkoMTIgNDU2IDgpICAjIEVFIOKiuyDDriBbTEFUSU4gU01BTEwgTEVUVEVSIEkgV0lUSCBDSVJDVU1GTEVYXQorY2hhciBcdTAxMEYJKCAgMyAgNiA4KSAgIyBFRiDioqQgxI8gW0xBVElOIFNNQUxMIExFVFRFUiBEIFdJVEggQ0FST05dCitjaGFyIFx1MDExMQkoMSAgNDU2IDgpICAjIEYwIOKiuSDEkSBbTEFUSU4gU01BTEwgTEVUVEVSIEQgV0lUSCBTVFJPS0VdCitjaGFyIFx1MDE0NAkoIDIgIDU2NyApICAjIEYxIOKhsiDFhCBbTEFUSU4gU01BTEwgTEVUVEVSIE4gV0lUSCBBQ1VURV0KK2NoYXIgXHUwMTQ4CSggMjMgNSAgOCkgICMgRjIg4qKWIMWIIFtMQVRJTiBTTUFMTCBMRVRURVIgTiBXSVRIIENBUk9OXQorY2hhciBceEYzCSggMiAgIDY3ICkgICMgRjMg4qGiIMOzIFtMQVRJTiBTTUFMTCBMRVRURVIgTyBXSVRIIEFDVVRFXQorY2hhciBceEY0CSggMiAgNTYgOCkgICMgRjQg4qKyIMO0IFtMQVRJTiBTTUFMTCBMRVRURVIgTyBXSVRIIENJUkNVTUZMRVhdCitjaGFyIFx1MDE1MQkoICAzIDUgIDgpICAjIEY1IOKilCDFkSBbTEFUSU4gU01BTEwgTEVUVEVSIE8gV0lUSCBET1VCTEUgQUNVVEVdCitjaGFyIFx4RjYJKCAyIDQgNiA4KSAgIyBGNiDioqogw7YgW0xBVElOIFNNQUxMIExFVFRFUiBPIFdJVEggRElBRVJFU0lTXQorY2hhciBceEY3CSggMiAgNSA3OCkgICMgRjcg4qOSIMO3IFtESVZJU0lPTiBTSUdOXQorY2hhciBcdTAxNTkJKCAgMyA1NiA4KSAgIyBGOCDiorQgxZkgW0xBVElOIFNNQUxMIExFVFRFUiBSIFdJVEggQ0FST05dCitjaGFyIFx1MDE2RgkoICAzNCA2IDgpICAjIEY5IOKirCDFryBbTEFUSU4gU01BTEwgTEVUVEVSIFUgV0lUSCBSSU5HIEFCT1ZFXQorY2hhciBceEZBCSggMiAgICA3OCkgICMgRkEg4qOCIMO6IFtMQVRJTiBTTUFMTCBMRVRURVIgVSBXSVRIIEFDVVRFXQorY2hhciBcdTAxNzEJKDEgIDQgNjc4KSAgIyBGQiDio6kgxbEgW0xBVElOIFNNQUxMIExFVFRFUiBVIFdJVEggRE9VQkxFIEFDVVRFXQorY2hhciBceEZDCSgxMiAgNTYgOCkgICMgRkMg4qKzIMO8IFtMQVRJTiBTTUFMTCBMRVRURVIgVSBXSVRIIERJQUVSRVNJU10KK2NoYXIgXHhGRAkoIDIgIDU2NzgpICAjIEZEIOKjsiDDvSBbTEFUSU4gU01BTEwgTEVUVEVSIFkgV0lUSCBBQ1VURV0KK2NoYXIgXHUwMTYzCSggIDMgNTY3ICkgICMgRkUg4qG0IMWjIFtMQVRJTiBTTUFMTCBMRVRURVIgVCBXSVRIIENFRElMTEFdCitjaGFyIFx1MDJEOQkoICAgICA2NyApICAjIEZGIOKhoCDLmSBbRE9UIEFCT1ZFXQorCitjaGFyIFx4QTYJKCAgIDQgNiA4KSAgIyAgICDioqggwqYgW0JST0tFTiBCQVJdCitjaGFyIFx4QTkJKDEyIDQ1ICA4KSAgIyAgICDiopsgwqkgW0NPUFlSSUdIVCBTSUdOXQorY2hhciBceEFCCSggIDMgICA3OCkgICMgICAg4qOEIMKrIFtMRUZULVBPSU5USU5HIERPVUJMRSBBTkdMRSBRVU9UQVRJT04gTUFSS10KK2NoYXIgXHhBQwkoIDIzIDUgNyApICAjICAgIOKhliDCrCBbTk9UIFNJR05dCitjaGFyIFx4QUUJKDEyIDQ1Njc4KSAgIyAgICDio7sgwq4gW1JFR0lTVEVSRUQgU0lHTl0KK2NoYXIgXHhCMQkoMTIzNCA2NzgpICAjICAgIOKjryDCsSBbUExVUy1NSU5VUyBTSUdOXQorY2hhciBceEI1CSggIDM0NTY3ICkgICMgICAg4qG8IMK1IFtNSUNSTyBTSUdOXQorY2hhciBceEI2CSgxMjM0ICAgOCkgICMgICAg4qKPIMK2IFtQSUxDUk9XIFNJR05dCitjaGFyIFx4QjcJKCAgMyAgICA4KSAgIyAgICDiooQgwrcgW01JRERMRSBET1RdCitjaGFyIFx4QkIJKCAgICAgNjc4KSAgIyAgICDio6AgwrsgW1JJR0hULVBPSU5USU5HIERPVUJMRSBBTkdMRSBRVU9UQVRJT04gTUFSS10KK2NoYXIgXHUyMDEzCSgxICA0ICAgOCkgICMgICAg4qKJIOKAkyBbRU4gREFTSF0KK2NoYXIgXHUyMDE0CSggIDMgIDY3OCkgICMgICAg4qOkIOKAlCBbRU0gREFTSF0KK2NoYXIgXHUyMDE4CSgxMiA0ICAgOCkgICMgICAg4qKLIOKAmCBbTEVGVCBTSU5HTEUgUVVPVEFUSU9OIE1BUktdCitjaGFyIFx1MjAxOQkoMSAgIDUgIDgpICAjICAgIOKikSDigJkgW1JJR0hUIFNJTkdMRSBRVU9UQVRJT04gTUFSS10KK2NoYXIgXHUyMDFBCSggMjMgNTY3OCkgICMgICAg4qO2IOKAmiBbU0lOR0xFIExPVy05IFFVT1RBVElPTiBNQVJLXQorY2hhciBcdTIwMUMJKDEyICA1ICA4KSAgIyAgICDiopMg4oCcIFtMRUZUIERPVUJMRSBRVU9UQVRJT04gTUFSS10KK2NoYXIgXHUyMDFECSggMiA0NSAgOCkgICMgICAg4qKaIOKAnSBbUklHSFQgRE9VQkxFIFFVT1RBVElPTiBNQVJLXQorY2hhciBcdTIwMUUJKCAyMyA1NiA4KSAgIyAgICDiorYg4oCeIFtET1VCTEUgTE9XLTkgUVVPVEFUSU9OIE1BUktdCitjaGFyIFx1MjAyMAkoICAzICA2NyApICAjICAgIOKhpCDigKAgW0RBR0dFUl0KK2NoYXIgXHUyMDIxCSggMjMgNSA3OCkgICMgICAg4qOWIOKAoSBbRE9VQkxFIERBR0dFUl0KK2NoYXIgXHUyMDIyCSgxMjM0NTY3OCkgICMgICAg4qO/IOKAoiBbQlVMTEVUXQorY2hhciBcdTIwMjYJKCAyIDQgICA4KSAgIyAgICDiooog4oCmIFtIT1JJWk9OVEFMIEVMTElQU0lTXQorY2hhciBcdTIwMzAJKDEgMzQgICA4KSAgIyAgICDioo0g4oCwIFtQRVIgTUlMTEUgU0lHTl0KK2NoYXIgXHUyMDM5CSggMiAgNSA3ICkgICMgICAg4qGSIOKAuSBbU0lOR0xFIExFRlQtUE9JTlRJTkcgQU5HTEUgUVVPVEFUSU9OIE1BUktdCitjaGFyIFx1MjAzQQkoIDIgIDUgIDgpICAjICAgIOKikiDigLogW1NJTkdMRSBSSUdIVC1QT0lOVElORyBBTkdMRSBRVU9UQVRJT04gTUFSS10KK2NoYXIgXHUyMEFDCSgxMiAgNTY3OCkgICMgICAg4qOzIOKCrCBbRVVSTyBTSUdOXQorY2hhciBcdTIxMjIJKCAyMyAgNiA4KSAgIyAgICDioqYg4oSiIFtUUkFERSBNQVJLIFNJR05dCisKK2luY2x1ZGUgY29tbW9uLnR0aQpkaWZmIC0tZ2l0IGEvVGFibGVzL1RleHQvaHUudHRiIGIvVGFibGVzL1RleHQvaHUudHRiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmExMjUyMWQKLS0tIC9kZXYvbnVsbAorKysgYi9UYWJsZXMvVGV4dC9odS50dGIKQEAgLTAsMCArMSw5MiBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorIyAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyMKKyMgQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorIworIyBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorIworIyBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisjIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyMgbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisjCisjIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMgQlJMVFRZIFRleHQgVGFibGUgLSBIdW5nYXJpYW4KKyMKKyMgU2FtdWVsIFRoaWJhdWx0IDxzYW11ZWwudGhpYmF1bHRAZW5zLWx5b24ub3JnPgorIyBUaGlzIHRhYmxlIGlzIGJhc2VkIG9uIHRoZSBVbmVzY28gcmVwb3J0IG9uIHRoZSBwcm9ncmVzcyBvZiB1bmlmaWNhdGlvbiBvZgorIyBicmFpbGxlIHdyaXRpbmcgwqvCoEwnw4lDUklUVVJFIEJSQUlMTEUgREFOUyBMRSBNT05ERcKgwrssIGJ5IFNpciBDbHV0aGEKKyMgTUFDS0VOWklFOiBodHRwOi8vdW5lc2RvYy51bmVzY28ub3JnL2ltYWdlcy8wMDEzLzAwMTM1Mi8xMzUyNTFmby5wZGYKKyMgVGhlIGRvY3VtZW50IGlzIGRhdGVkIDE5NTQsIHNvIHRoaXMgdGFibGUgbWF5IGJlIHF1aXRlIG91dGRhdGVkLgorCisjIFVwZGF0ZWQgYnkgWnNvbHQgVG9ybWEgPHRvcm1hLnpzb2x0QGluZm9hbGFwLmh1PgorCisjIHRoZSBzdGFuZGFyZCByZXByZXNlbnRhdGlvbnMgZm9yIHRoZSBsZXR0ZXJzIG9mIHRoZSBMYXRpbiBhbHBoYWJldAoraW5jbHVkZSBsdHItbGF0aW4udHRpCisKKyMgZ2VuZXJhdGVkIGJ5IHR0YnRlc3Q6IGNoYXJzZXQ9bGF0aW4yCitjaGFyIFx4QzEJKCAgIDQgIDc4KSAgIyBDMSDio4ggw4EgW0xBVElOIENBUElUQUwgTEVUVEVSIEEgV0lUSCBBQ1VURV0KK2NoYXIgXHhDNAkoICAgNDUgNzgpICAjIEM0IOKjmCDDhCBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgQSBXSVRIIERJQUVSRVNJU10KK2NoYXIgXHhDOQkoMSAgICA2NzgpICAjIEM5IOKjoSDDiSBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgRSBXSVRIIEFDVVRFXQorY2hhciBceENECSggIDM0ICA3OCkgICMgQ0Qg4qOMIMONIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBJIFdJVEggQUNVVEVdCitjaGFyIFx4RDMJKCAyIDQgNjc4KSAgIyBEMyDio6ogw5MgW0xBVElOIENBUElUQUwgTEVUVEVSIE8gV0lUSCBBQ1VURV0KK2NoYXIgXHUwMTUwCSgxMiA0NTY3OCkgICMgRDUg4qO7IMWQIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBPIFdJVEggRE9VQkxFIEFDVVRFXQorY2hhciBceEQ2CSgxMjM0NSA3OCkgICMgRDYg4qOfIMOWIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBPIFdJVEggRElBRVJFU0lTXQorY2hhciBceERBCSggIDM0IDY3OCkgICMgREEg4qOsIMOaIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBVIFdJVEggQUNVVEVdCitjaGFyIFx1MDE3MAkoIDIzNDU2NzgpICAjIERCIOKjviDFsCBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgVSBXSVRIIERPVUJMRSBBQ1VURV0KK2NoYXIgXHhEQwkoMTIzIDU2NzgpICAjIERDIOKjtyDDnCBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgVSBXSVRIIERJQUVSRVNJU10KK2NoYXIgXHhFMQkoICAgNCAgIDgpICAjIEUxIOKiiCDDoSBbTEFUSU4gU01BTEwgTEVUVEVSIEEgV0lUSCBBQ1VURV0KK2NoYXIgXHhFNAkoICAgNDUgIDgpICAjIEU0IOKimCDDpCBbTEFUSU4gU01BTEwgTEVUVEVSIEEgV0lUSCBESUFFUkVTSVNdCitjaGFyIFx4RTkJKDEgICAgNiA4KSAgIyBFOSDioqEgw6kgW0xBVElOIFNNQUxMIExFVFRFUiBFIFdJVEggQUNVVEVdCitjaGFyIFx4RUQJKCAgMzQgICA4KSAgIyBFRCDioowgw60gW0xBVElOIFNNQUxMIExFVFRFUiBJIFdJVEggQUNVVEVdCitjaGFyIFx4RjMJKCAyIDQgNiA4KSAgIyBGMyDioqogw7MgW0xBVElOIFNNQUxMIExFVFRFUiBPIFdJVEggQUNVVEVdCitjaGFyIFx1MDE1MQkoMTIgNDU2IDgpICAjIEY1IOKiuyDFkSBbTEFUSU4gU01BTEwgTEVUVEVSIE8gV0lUSCBET1VCTEUgQUNVVEVdCitjaGFyIFx4RjYJKDEyMzQ1ICA4KSAgIyBGNiDiop8gw7YgW0xBVElOIFNNQUxMIExFVFRFUiBPIFdJVEggRElBRVJFU0lTXQorY2hhciBceEZBCSggIDM0IDYgOCkgICMgRkEg4qKsIMO6IFtMQVRJTiBTTUFMTCBMRVRURVIgVSBXSVRIIEFDVVRFXQorY2hhciBcdTAxNzEJKCAyMzQ1NiA4KSAgIyBGQiDior4gxbEgW0xBVElOIFNNQUxMIExFVFRFUiBVIFdJVEggRE9VQkxFIEFDVVRFXQorY2hhciBceEZDCSgxMjMgNTYgOCkgICMgRkMg4qK3IMO8IFtMQVRJTiBTTUFMTCBMRVRURVIgVSBXSVRIIERJQUVSRVNJU10KKyNjaGFyIFx1MDI1RgkoMSAgNDU2ICApICAjICAgIOKguSDJnyBbTEFUSU4gU01BTEwgTEVUVEVSIERPVExFU1MgSiBXSVRIIFNUUk9LRV0KKworIyB0aGUgbnVtYmVycyAwLTkgYXJlIHJlcHJlc2VudGVkIGJ5IHRoZSBsZXR0ZXJzIGosYS1pIHdpdGggZG90IDYgYWRkZWQKK2luY2x1ZGUgbnVtLWRvdDYudHRpCisKKworaW5jbHVkZSBjb21tb24udHRpCitjaGFyIFx4MjEJKCAgICA1ICAgKSAgIyDioJAgISBbRVhDTEFNQVRJT04gTUFSS10KK2NoYXIgXHgyMgkoICAgNCAgICApICAjIOKgiCAiIFtRVU9UQVRJT04gTUFSS10KK2NoYXIgXHgyMwkoICAzNDU2ICApICAjIOKgvCAjIFtOVU1CRVIgU0lHTl0KK2NoYXIgXHgyNAkoICAgNCA2ICApICAjIOKgqCAkIFtET0xMQVIgU0lHTl0KK2NoYXIgXHgyNQkoMTIzNDU2ICApICAjIOKgvyAlIFtQRVJDRU5UIFNJR05dCitjaGFyIFx4MjYJKDEyMzQgNiAgKSAgIyDioK8gJiBbQU1QRVJTQU5EXQorY2hhciBceDI3CSggICAgIDYgICkgICMg4qCgICcgW0FQT1NUUk9QSEVdCitjaGFyIFx4MjgJKCAyMyAgNiAgKSAgIyDioKYgKCBbTEVGVCBQQVJFTlRIRVNJU10KK2NoYXIgXHgyOQkoICAzIDU2ICApICAjIOKgtCApIFtSSUdIVCBQQVJFTlRIRVNJU10KK2NoYXIgXHgyQQkoICAzIDUgICApICAjIOKglCAqIFtBU1RFUklTS10KK2NoYXIgXHgyQgkoIDIzIDUgICApICAjIOKgliArIFtQTFVTIFNJR05dCitjaGFyIFx4MkMJKCAyICAgICAgKSAgIyDioIIgLCBbQ09NTUFdCitjaGFyIFx4MkQJKCAgMyAgNiAgKSAgIyDioKQgLSBbSFlQSEVOLU1JTlVTXQorY2hhciBceDJFCSggIDMgICAgICkgICMg4qCEIC4gW0ZVTEwgU1RPUF0KK2NoYXIgXHgyRgkoIDIgIDU2ICApICAjIOKgsiAvIFtTT0xJRFVTXQorY2hhciBceDNBCSggMiAgNSAgICkgICMg4qCSIDogW0NPTE9OXQorY2hhciBceDNCCSggMjMgICAgICkgICMg4qCGIDsgW1NFTUlDT0xPTl0KK2NoYXIgXHgzQwkoICAgIDU2ICApICAjIOKgsCA8IFtMRVNTLVRIQU4gU0lHTl0KK2NoYXIgXHgzRAkoIDIzIDU2ICApICAjIOKgtiA9IFtFUVVBTFMgU0lHTl0KK2NoYXIgXHgzRQkoICAgNDUgICApICAjIOKgmCA+IFtHUkVBVEVSLVRIQU4gU0lHTl0KK2NoYXIgXHgzRgkoIDIgICA2ICApICAjIOKgoiA/IFtRVUVTVElPTiBNQVJLXQorY2hhciBceDQwCSggIDM0NSA3ICkgICMg4qGcIEAgW0NPTU1FUkNJQUwgQVRdCitjaGFyIFx4NUIJKDEyMyA1NjcgKSAgIyDiobcgWyBbTEVGVCBTUVVBUkUgQlJBQ0tFVF0KK2NoYXIgXHg1QwkoICAzNCAgNyApICAjIOKhjCBcIFtSRVZFUlNFIFNPTElEVVNdCitjaGFyIFx4NUQJKCAyMzQ1NjcgKSAgIyDiob4gXSBbUklHSFQgU1FVQVJFIEJSQUNLRVRdCitjaGFyIFx4NUUJKCAyMzQgNjcgKSAgIyDioa4gXiBbQ0lSQ1VNRkxFWCBBQ0NFTlRdCitjaGFyIFx4NUYJKCAgIDQ1NjcgKSAgIyDiobggXyBbTE9XIExJTkVdCitjaGFyIFx4NjAJKCAgMzQ1ICAgKSAgIyDioJwgYCBbR1JBVkUgQUNDRU5UXQorY2hhciBceDdCCSgxMjMgNTYgICkgICMg4qC3IHsgW0xFRlQgQ1VSTFkgQlJBQ0tFVF0KK2NoYXIgXHg3QwkoICAzNCAgICApICAjIOKgjCB8IFtWRVJUSUNBTCBMSU5FXQorY2hhciBceDdECSggMjM0NTYgICkgICMg4qC+IH0gW1JJR0hUIENVUkxZIEJSQUNLRVRdCitjaGFyIFx4N0UJKCAyMzQgNiAgKSAgIyDioK4gfiBbVElMREVdCitjaGFyIFx4N0YJKCAgIDQ1NiAgKSAgIyDioLggICBbREVMRVRFXQpkaWZmIC0tZ2l0IGEvVGFibGVzL1RleHQvaHkudHRiIGIvVGFibGVzL1RleHQvaHkudHRiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA4ZDkwZmYKLS0tIC9kZXYvbnVsbAorKysgYi9UYWJsZXMvVGV4dC9oeS50dGIKQEAgLTAsMCArMSwxMTUgQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyMgICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisjCisjIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyMKKyMgQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjIEJSTFRUWSBUZXh0IFRhYmxlIC0gQXJtZW5pYW4KKyMKKyMgU2FtdWVsIFRoaWJhdWx0IDxzYW11ZWwudGhpYmF1bHRAZW5zLWx5b24ub3JnPgorIyAKKyMgVGhpcyB0YWJsZSBpcyBiYXNlZCBvbiB0aGUgVW5lc2NvIHJlcG9ydCBvbiB0aGUgcHJvZ3Jlc3Mgb2YgdW5pZmljYXRpb24gb2YKKyMgYnJhaWxsZSB3cml0aW5nIMKrwqBMJ8OJQ1JJVFVSRSBCUkFJTExFIERBTlMgTEUgTU9OREXCoMK7LCBieSBTaXIgQ2x1dGhhCisjIE1BQ0tFTlpJRTogaHR0cDovL3VuZXNkb2MudW5lc2NvLm9yZy9pbWFnZXMvMDAxMy8wMDEzNTIvMTM1MjUxZm8ucGRmCisjIFRoZSBkb2N1bWVudCBpcyBkYXRlZCAxOTU0LCBzbyB0aGlzIHRhYmxlIG1heSBiZSBxdWl0ZSBvdXRkYXRlZC4KKworIyBsb3dlcmNhc2UgbGV0dGVycworY2hhciBcdTA1NjEJKDEgICAgICAgKSAgIyDioIEg1aEgW0FSTUVOSUFOIFNNQUxMIExFVFRFUiBBWUJdCitjaGFyIFx1MDU2MgkoMTIzNCAgICApICAjIOKgjyDVoiBbQVJNRU5JQU4gU01BTEwgTEVUVEVSIEJFTl0KK2NoYXIgXHUwNTYzCSgxMjM0NSAgICkgICMg4qCfINWjIFtBUk1FTklBTiBTTUFMTCBMRVRURVIgR0lNXQorY2hhciBcdTA1NjQJKDEgIDQ1NiAgKSAgIyDioLkg1aQgW0FSTUVOSUFOIFNNQUxMIExFVFRFUiBEQV0KK2NoYXIgXHUwNTY1CSgxIDM0NTYgICkgICMg4qC9INWlIFtBUk1FTklBTiBTTUFMTCBMRVRURVIgRUNIXQorY2hhciBcdTA1NjYJKDEgMyA1NiAgKSAgIyDioLUg1aYgW0FSTUVOSUFOIFNNQUxMIExFVFRFUiBaQV0KK2NoYXIgXHUwNTY3CSgxICAgNSAgICkgICMg4qCRINWnIFtBUk1FTklBTiBTTUFMTCBMRVRURVIgRUhdCitjaGFyIFx1MDU2OAkoMSAzICA2ICApICAjIOKgpSDVqCBbQVJNRU5JQU4gU01BTEwgTEVUVEVSIEVUXQorY2hhciBcdTA1NjkJKCAyMzQ1ICAgKSAgIyDioJ4g1akgW0FSTUVOSUFOIFNNQUxMIExFVFRFUiBUT10KK2NoYXIgXHUwNTZBCSggIDM0NSAgICkgICMg4qCcINWqIFtBUk1FTklBTiBTTUFMTCBMRVRURVIgWkhFXQorY2hhciBcdTA1NkIJKCAyIDQgICAgKSAgIyDioIog1asgW0FSTUVOSUFOIFNNQUxMIExFVFRFUiBJTkldCitjaGFyIFx1MDU2QwkoMTIzICAgICApICAjIOKghyDVrCBbQVJNRU5JQU4gU01BTEwgTEVUVEVSIExJV05dCitjaGFyIFx1MDU2RAkoMSAzNCA2ICApICAjIOKgrSDVrSBbQVJNRU5JQU4gU01BTEwgTEVUVEVSIFhFSF0KK2NoYXIgXHUwNTZFCSggIDM0ICAgICkgICMg4qCMINWuIFtBUk1FTklBTiBTTUFMTCBMRVRURVIgQ0FdCitjaGFyIFx1MDU2RgkoMTIgNDUgICApICAjIOKgmyDVryBbQVJNRU5JQU4gU01BTEwgTEVUVEVSIEtFTl0KK2NoYXIgXHUwNTcwCSgxMiAgNSAgICkgICMg4qCTINWwIFtBUk1FTklBTiBTTUFMTCBMRVRURVIgSE9dCitjaGFyIFx1MDU3MQkoICAzNCA2ICApICAjIOKgrCDVsSBbQVJNRU5JQU4gU01BTEwgTEVUVEVSIEpBXQorY2hhciBcdTA1NzIJKDEyICAgNiAgKSAgIyDioKMg1bIgW0FSTUVOSUFOIFNNQUxMIExFVFRFUiBHSEFEXQorY2hhciBcdTA1NzMJKCAyIDQ1ICAgKSAgIyDioJog1bMgW0FSTUVOSUFOIFNNQUxMIExFVFRFUiBDSEVIXQorY2hhciBcdTA1NzQJKDEgMzQgICAgKSAgIyDioI0g1bQgW0FSTUVOSUFOIFNNQUxMIExFVFRFUiBNRU5dCitjaGFyIFx1MDU3NQkoMSAgIDU2ICApICAjIOKgsSDVtSBbQVJNRU5JQU4gU01BTEwgTEVUVEVSIFlJXQorY2hhciBcdTA1NzYJKDEgMzQ1ICAgKSAgIyDioJ0g1bYgW0FSTUVOSUFOIFNNQUxMIExFVFRFUiBOT1ddCitjaGFyIFx1MDU3NwkoMSAgNCA2ICApICAjIOKgqSDVtyBbQVJNRU5JQU4gU01BTEwgTEVUVEVSIFNIQV0KK2NoYXIgXHUwNTc4CSggMiA0IDYgICkgICMg4qCqINW4IFtBUk1FTklBTiBTTUFMTCBMRVRURVIgVk9dCitjaGFyIFx1MDU3OQkoMSAgICA2ICApICAjIOKgoSDVuSBbQVJNRU5JQU4gU01BTEwgTEVUVEVSIENIQV0KK2NoYXIgXHUwNTdBCSgxMiAgICAgICkgICMg4qCDINW6IFtBUk1FTklBTiBTTUFMTCBMRVRURVIgUEVIXQorY2hhciBcdTA1N0IJKDEgIDQgICAgKSAgIyDioIkg1bsgW0FSTUVOSUFOIFNNQUxMIExFVFRFUiBKSEVIXQorY2hhciBcdTA1N0MJKDEyIDQ1NiAgKSAgIyDioLsg1bwgW0FSTUVOSUFOIFNNQUxMIExFVFRFUiBSQV0KK2NoYXIgXHUwNTdECSggMjM0ICAgICkgICMg4qCOINW9IFtBUk1FTklBTiBTTUFMTCBMRVRURVIgU0VIXQorY2hhciBcdTA1N0UJKDEyMyAgNiAgKSAgIyDioKcg1b4gW0FSTUVOSUFOIFNNQUxMIExFVFRFUiBWRVddCitjaGFyIFx1MDU3RgkoMSAgNDUgICApICAjIOKgmSDVvyBbQVJNRU5JQU4gU01BTEwgTEVUVEVSIFRJV05dCitjaGFyIFx1MDU4MAkoMTIzIDUgICApICAjIOKglyDWgCBbQVJNRU5JQU4gU01BTEwgTEVUVEVSIFJFSF0KK2NoYXIgXHUwNTgxCSggMjM0IDYgICkgICMg4qCuINaBIFtBUk1FTklBTiBTTUFMTCBMRVRURVIgQ09dCitjaGFyIFx1MDU4MgkoIDIgNDU2ICApICAjIOKguiDWgiBbQVJNRU5JQU4gU01BTEwgTEVUVEVSIFlJV05dCitjaGFyIFx1MDU4MwkoMTIgNCA2ICApICAjIOKgqyDWgyBbQVJNRU5JQU4gU01BTEwgTEVUVEVSIFBJV1JdCitjaGFyIFx1MDU4NAkoMSAzICAgICApICAjIOKghSDWhCBbQVJNRU5JQU4gU01BTEwgTEVUVEVSIEtFSF0KK2NoYXIgXHUwNTg1CSgxIDMgNSAgICkgICMg4qCVINaFIFtBUk1FTklBTiBTTUFMTCBMRVRURVIgT0hdCitjaGFyIFx1MDU4NgkoMTIgNCAgICApICAjIOKgiyDWhiBbQVJNRU5JQU4gU01BTEwgTEVUVEVSIEZFSF0KK2NoYXIgXHUwNTg3CSgxMjM0IDYgICkgICMg4qCvINaHIFtBUk1FTklBTiBTTUFMTCBMSUdBVFVSRSBFQ0ggWUlXTl0KKworIyB1cHBlcmNhc2UgbGV0dGVycworY2hhciBcdTA1MzEJKDEgICAgIDcgKSAgIyDioYEg1LEgW0FSTUVOSUFOIENBUElUQUwgTEVUVEVSIEFZQl0KK2NoYXIgXHUwNTMyCSgxMjM0ICA3ICkgICMg4qGPINSyIFtBUk1FTklBTiBDQVBJVEFMIExFVFRFUiBCRU5dCitjaGFyIFx1MDUzMwkoMTIzNDUgNyApICAjIOKhnyDUsyBbQVJNRU5JQU4gQ0FQSVRBTCBMRVRURVIgR0lNXQorY2hhciBcdTA1MzQJKDEgIDQ1NjcgKSAgIyDiobkg1LQgW0FSTUVOSUFOIENBUElUQUwgTEVUVEVSIERBXQorY2hhciBcdTA1MzUJKDEgMzQ1NjcgKSAgIyDiob0g1LUgW0FSTUVOSUFOIENBUElUQUwgTEVUVEVSIEVDSF0KK2NoYXIgXHUwNTM2CSgxIDMgNTY3ICkgICMg4qG1INS2IFtBUk1FTklBTiBDQVBJVEFMIExFVFRFUiBaQV0KK2NoYXIgXHUwNTM3CSgxICAgNSA3ICkgICMg4qGRINS3IFtBUk1FTklBTiBDQVBJVEFMIExFVFRFUiBFSF0KK2NoYXIgXHUwNTM4CSgxIDMgIDY3ICkgICMg4qGlINS4IFtBUk1FTklBTiBDQVBJVEFMIExFVFRFUiBFVF0KK2NoYXIgXHUwNTM5CSggMjM0NSA3ICkgICMg4qGeINS5IFtBUk1FTklBTiBDQVBJVEFMIExFVFRFUiBUT10KK2NoYXIgXHUwNTNBCSggIDM0NSA3ICkgICMg4qGcINS6IFtBUk1FTklBTiBDQVBJVEFMIExFVFRFUiBaSEVdCitjaGFyIFx1MDUzQgkoIDIgNCAgNyApICAjIOKhiiDUuyBbQVJNRU5JQU4gQ0FQSVRBTCBMRVRURVIgSU5JXQorY2hhciBcdTA1M0MJKDEyMyAgIDcgKSAgIyDioYcg1LwgW0FSTUVOSUFOIENBUElUQUwgTEVUVEVSIExJV05dCitjaGFyIFx1MDUzRAkoMSAzNCA2NyApICAjIOKhrSDUvSBbQVJNRU5JQU4gQ0FQSVRBTCBMRVRURVIgWEVIXQorY2hhciBcdTA1M0UJKCAgMzQgIDcgKSAgIyDioYwg1L4gW0FSTUVOSUFOIENBUElUQUwgTEVUVEVSIENBXQorY2hhciBcdTA1M0YJKDEyIDQ1IDcgKSAgIyDioZsg1L8gW0FSTUVOSUFOIENBUElUQUwgTEVUVEVSIEtFTl0KK2NoYXIgXHUwNTQwCSgxMiAgNSA3ICkgICMg4qGTINWAIFtBUk1FTklBTiBDQVBJVEFMIExFVFRFUiBIT10KK2NoYXIgXHUwNTQxCSggIDM0IDY3ICkgICMg4qGsINWBIFtBUk1FTklBTiBDQVBJVEFMIExFVFRFUiBKQV0KK2NoYXIgXHUwNTQyCSgxMiAgIDY3ICkgICMg4qGjINWCIFtBUk1FTklBTiBDQVBJVEFMIExFVFRFUiBHSEFEXQorY2hhciBcdTA1NDMJKCAyIDQ1IDcgKSAgIyDioZog1YMgW0FSTUVOSUFOIENBUElUQUwgTEVUVEVSIENIRUhdCitjaGFyIFx1MDU0NAkoMSAzNCAgNyApICAjIOKhjSDVhCBbQVJNRU5JQU4gQ0FQSVRBTCBMRVRURVIgTUVOXQorY2hhciBcdTA1NDUJKDEgICA1NjcgKSAgIyDiobEg1YUgW0FSTUVOSUFOIENBUElUQUwgTEVUVEVSIFlJXQorY2hhciBcdTA1NDYJKDEgMzQ1IDcgKSAgIyDioZ0g1YYgW0FSTUVOSUFOIENBUElUQUwgTEVUVEVSIE5PV10KK2NoYXIgXHUwNTQ3CSgxICA0IDY3ICkgICMg4qGpINWHIFtBUk1FTklBTiBDQVBJVEFMIExFVFRFUiBTSEFdCitjaGFyIFx1MDU0OAkoIDIgNCA2NyApICAjIOKhqiDViCBbQVJNRU5JQU4gQ0FQSVRBTCBMRVRURVIgVk9dCitjaGFyIFx1MDU0OQkoMSAgICA2NyApICAjIOKhoSDViSBbQVJNRU5JQU4gQ0FQSVRBTCBMRVRURVIgQ0hBXQorY2hhciBcdTA1NEEJKDEyICAgIDcgKSAgIyDioYMg1YogW0FSTUVOSUFOIENBUElUQUwgTEVUVEVSIFBFSF0KK2NoYXIgXHUwNTRCCSgxICA0ICA3ICkgICMg4qGJINWLIFtBUk1FTklBTiBDQVBJVEFMIExFVFRFUiBKSEVIXQorY2hhciBcdTA1NEMJKDEyIDQ1NjcgKSAgIyDiobsg1YwgW0FSTUVOSUFOIENBUElUQUwgTEVUVEVSIFJBXQorY2hhciBcdTA1NEQJKCAyMzQgIDcgKSAgIyDioY4g1Y0gW0FSTUVOSUFOIENBUElUQUwgTEVUVEVSIFNFSF0KK2NoYXIgXHUwNTRFCSgxMjMgIDY3ICkgICMg4qGnINWOIFtBUk1FTklBTiBDQVBJVEFMIExFVFRFUiBWRVddCitjaGFyIFx1MDU0RgkoMSAgNDUgNyApICAjIOKhmSDVjyBbQVJNRU5JQU4gQ0FQSVRBTCBMRVRURVIgVElXTl0KK2NoYXIgXHUwNTUwCSgxMjMgNSA3ICkgICMg4qGXINWQIFtBUk1FTklBTiBDQVBJVEFMIExFVFRFUiBSRUhdCitjaGFyIFx1MDU1MQkoIDIzNCA2NyApICAjIOKhriDVkSBbQVJNRU5JQU4gQ0FQSVRBTCBMRVRURVIgQ09dCitjaGFyIFx1MDU1MgkoIDIgNDU2NyApICAjIOKhuiDVkiBbQVJNRU5JQU4gQ0FQSVRBTCBMRVRURVIgWUlXTl0KK2NoYXIgXHUwNTUzCSgxMiA0IDY3ICkgICMg4qGrINWTIFtBUk1FTklBTiBDQVBJVEFMIExFVFRFUiBQSVdSXQorY2hhciBcdTA1NTQJKDEgMyAgIDcgKSAgIyDioYUg1ZQgW0FSTUVOSUFOIENBUElUQUwgTEVUVEVSIEtFSF0KK2NoYXIgXHUwNTU1CSgxIDMgNSA3ICkgICMg4qGVINWVIFtBUk1FTklBTiBDQVBJVEFMIExFVFRFUiBPSF0KK2NoYXIgXHUwNTU2CSgxMiA0ICA3ICkgICMg4qGLINWWIFtBUk1FTklBTiBDQVBJVEFMIExFVFRFUiBGRUhdCisKKyMgcHVuY3R1YXRpb24KK2NoYXIgXHUwNTVECSggICAgIDYgICkgICMg4qCgINWdIFtBUk1FTklBTiBDT01NQV0KKworaW5jbHVkZSBsdHItZG90OC50dGkKK2luY2x1ZGUgbnVtLW5lbWV0aC50dGkKK2luY2x1ZGUgcHVuYy1hbHRlcm5hdGUudHRpCitpbmNsdWRlIGNvbW1vbi50dGkKZGlmZiAtLWdpdCBhL1RhYmxlcy9UZXh0L2lzLnR0YiBiL1RhYmxlcy9UZXh0L2lzLnR0YgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNmQ2NzIyCi0tLSAvZGV2L251bGwKKysrIGIvVGFibGVzL1RleHQvaXMudHRiCkBAIC0wLDAgKzEsMTg1IEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisjICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorIworIyBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisjCisjIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisjCisjIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyMgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorIyBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyMKKyMgV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworIworIyBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIyBCUkxUVFkgVGV4dCBUYWJsZSAtIEljZWxhbmRpYworIworIyBTYW11ZWwgVGhpYmF1bHQgPHNhbXVlbC50aGliYXVsdEBlbnMtbHlvbi5vcmc+CisjIAorIyBUaGlzIGNvbmZvcm1zIHRvIHRoZSBJY2VCcmFpbGxlIHN0YW5kYXJkLCB2MS4wLgorIyBCaXJraXIgR3VubmFyc3NvbiwgYmlya2lyQG1pZHN0b2QuaXMKKyMgU3BlY2lhbCB0aGFua3MgdG8gQmVuIFZhbiBQb3BlbCBmb3IgaGVscCB3aXRoIGRyYWZ0aW5nIHRoZSBzdGFuZGFyZC4KKworIyBjb250cm9sIGNoYXJhY3RlcnMKK2NoYXIgXHgwMCAgICAgICAoICAzNDUgNzgpICAjIOKjnCAwMCBbTlVMTF0KK2luY2x1ZGUgY3RsLWxhdGluLnR0aQorY2hhciBceDFCICAgICAgICgxMjMgNTY3OCkgICMg4qO3IDFCIFtFU0NBUEVdCitjaGFyIFx4MUMgICAgICAgKCAgMzQgIDc4KSAgIyDio4wgMUMgW0lORk9STUFUSU9OIFNFUEFSQVRPUiBGT1VSXQorY2hhciBceDFEICAgICAgICggMjM0NTY3OCkgICMg4qO+IDFEIFtJTkZPUk1BVElPTiBTRVBBUkFUT1IgVEhSRUVdCitjaGFyIFx4MUUgICAgICAgKCAyMzQgNjc4KSAgIyDio64gMUUgW0lORk9STUFUSU9OIFNFUEFSQVRPUiBUV09dCitjaGFyIFx4MUYgICAgICAgKCAgIDQ1Njc4KSAgIyDio7ggMUYgW0lORk9STUFUSU9OIFNFUEFSQVRPUiBPTkVdCisKKyMgdGhlIHN0YW5kYXJkIHJlcHJlc2VudGF0aW9ucyBmb3IgdGhlIGxldHRlcnMgb2YgdGhlIExhdGluIGFscGhhYmV0CitpbmNsdWRlIGx0ci1sYXRpbi50dGkKKworIyB0aGUgbnVtYmVycyAwLTkgYXJlIHJlcHJlc2VudGVkIGJ5IHRoZSBsZXR0ZXJzIGosYS1pIHdpdGggZG90IDggYWRkZWQKK2luY2x1ZGUgbnVtLWRvdDgudHRpCisKK2luY2x1ZGUgcHVuYy1iYXNpYy50dGkKKworY2hhciBceDIxCSggMjMgNSA3ICkgICMg4qGWICEgW0VYQ0xBTUFUSU9OIE1BUktdCitjaGFyIFx4MjIJKCAgICA1NiAgKSAgIyDioLAgIiBbUVVPVEFUSU9OIE1BUktdCitjaGFyIFx4MjMJKCAgMzQ1NiAgKSAgIyDioLwgIyBbTlVNQkVSIFNJR05dCitjaGFyIFx4MjQJKDEgIDQ1IDc4KSAgIyDio5kgJCBbRE9MTEFSIFNJR05dCitjaGFyIFx4MjUJKCAgIDQgNiAgKSAgIyDioKggJSBbUEVSQ0VOVCBTSUdOXQorY2hhciBceDI2CSgxMjM0IDYgOCkgICMg4qKvICYgW0FNUEVSU0FORF0KK2NoYXIgXHgyNwkoICAgIDUgICApICAjIOKgkCAnIFtBUE9TVFJPUEhFXQorY2hhciBceDJBCSggIDMgNSAgICkgICMg4qCUICogW0FTVEVSSVNLXQorY2hhciBceDJCCSggMjMgNSAgICkgICMg4qCWICsgW1BMVVMgU0lHTl0KK2NoYXIgXHgyRQkoICAzICAgICApICAjIOKghCAuIFtGVUxMIFNUT1BdCitjaGFyIFx4MkYJKCAgMzQgICAgKSAgIyDioIwgLyBbU09MSURVU10KK2NoYXIgXHgzQwkoICAzIDUgIDgpICAjIOKilCA8IFtMRVNTLVRIQU4gU0lHTl0KK2NoYXIgXHgzRAkoIDIzIDU2ICApICAjIOKgtiA9IFtFUVVBTFMgU0lHTl0KK2NoYXIgXHgzRQkoIDIgICA2NyApICAjIOKhoiA+IFtHUkVBVEVSLVRIQU4gU0lHTl0KK2NoYXIgXHgzRgkoIDIgICA2ICApICAjIOKgoiA/IFtRVUVTVElPTiBNQVJLXQorY2hhciBceDQwCSgxMjM0NTYgICkgICMg4qC/IEAgW0NPTU1FUkNJQUwgQVRdCisKK2NoYXIgXHg1QgkoMTIzIDU2ICApICAjIOKgtyBbIFtMRUZUIFNRVUFSRSBCUkFDS0VUXQorY2hhciBceDVDCSggIDM0ICA3ICkgICMg4qGMIFwgW1JFVkVSU0UgU09MSURVU10KK2NoYXIgXHg1RAkoIDIzNDU2ICApICAjIOKgviBdIFtSSUdIVCBTUVVBUkUgQlJBQ0tFVF0KK2NoYXIgXHg1RQkoICAzNCA2ICApICAjIOKgrCBeIFtDSVJDVU1GTEVYIEFDQ0VOVF0KK2NoYXIgXHg1RgkoICAzICA2NzgpICAjIOKjpCBfIFtMT1cgTElORV0KK2NoYXIgXHg2MAkoICAgNCAgICApICAjIOKgiCBgIFtHUkFWRSBBQ0NFTlRdCisKK2NoYXIgXHg3QgkoMTIzIDU2NyApICAjIOKhtyB7IFtMRUZUIENVUkxZIEJSQUNLRVRdCitjaGFyIFx4N0MJKCAgIDQ1NiAgKSAgIyDioLggfCBbVkVSVElDQUwgTElORV0KK2NoYXIgXHg3RAkoIDIzNDU2IDgpICAjIOKiviB9IFtSSUdIVCBDVVJMWSBCUkFDS0VUXQorY2hhciBceDdFCSggICA0NSAgICkgICMg4qCYIH4gW1RJTERFXQorY2hhciBceDdGCSggICAgICA3ICkgICMg4qGAICAgW0RFTEVURV0KKworY2hhciBceEExCSggIDMgNTYgOCkgICMg4qK0IMKhIFtJTlZFUlRFRCBFWENMQU1BVElPTiBNQVJLXQorY2hhciBceEEyCSggMiAgNSA3OCkgICMg4qOSIMKiIFtDRU5UIFNJR05dCitjaGFyIFx4QTMJKDEyMzQgIDc4KSAgIyDio48gwqMgW1BPVU5EIFNJR05dCitjaGFyIFx4QTQJKDEgMzQgNjc4KSAgIyDio60gwqQgW0NVUlJFTkNZIFNJR05dCitjaGFyIFx4QTUJKDEgMzQ1Njc4KSAgIyDio70gwqUgW1lFTiBTSUdOXQorY2hhciBceEE2CSggIDM0ICA3OCkgICMg4qOMIMKmIFtCUk9LRU4gQkFSXQorY2hhciBceEE3CSggMjM0ICAgOCkgICMg4qKOIMKnIFtTRUNUSU9OIFNJR05dCitjaGFyIFx4QTgJKCAgICA1IDc4KSAgIyDio5AgwqggW0RJQUVSRVNJU10KK2NoYXIgXHhBOQkoMSAgNCAgNzgpICAjIOKjiSDCqSBbQ09QWVJJR0hUIFNJR05dCitjaGFyIFx4QUEJKCAyMzQgNjc4KSAgIyDio64gwqogW0ZFTUlOSU5FIE9SRElOQUwgSU5ESUNBVE9SXQorY2hhciBceEFCCSggICAgNSA3ICkgICMg4qGQIMKrIFtMRUZULVBPSU5USU5HIERPVUJMRSBBTkdMRSBRVU9UQVRJT04gTUFSS10KK2NoYXIgXHhBQwkoICAzNDU2NyApICAjIOKhvCDCrCBbTk9UIFNJR05dCitjaGFyIFx4QUQJKCAgMyAgIDc4KSAgIyDio4Qgwq0gW1NPRlQgSFlQSEVOXQorY2hhciBceEFFCSgxMjMgNSA3OCkgICMg4qOXIMKuIFtSRUdJU1RFUkVEIFNJR05dCitjaGFyIFx4QUYJKCAyMyA1NjcgKSAgIyDiobYgwq8gW01BQ1JPTl0KK2NoYXIgXHhCMAkoIDIgIDU2ICApICAjIOKgsiDCsCBbREVHUkVFIFNJR05dCitjaGFyIFx4QjEJKDEyMzQ1ICA4KSAgIyDiop8gwrEgW1BMVVMtTUlOVVMgU0lHTl0KK2NoYXIgXHhCMgkoIDIzICAgIDgpICAjIOKihiDCsiBbU1VQRVJTQ1JJUFQgVFdPXQorY2hhciBceEIzCSggMiAgNSAgOCkgICMg4qKSIMKzIFtTVVBFUlNDUklQVCBUSFJFRV0KK2NoYXIgXHhCNAkoICAgNCA2IDgpICAjIOKiqCDCtCBbQUNVVEUgQUNDRU5UXQorY2hhciBceEI1CSggMjMgIDY3OCkgICMg4qOmIMK1IFtNSUNSTyBTSUdOXQorY2hhciBceEI2CSggIDM0NTY3OCkgICMg4qO8IMK2IFtQSUxDUk9XIFNJR05dCitjaGFyIFx4QjcJKCAgMyAgICA4KSAgIyDiooQgwrcgW01JRERMRSBET1RdCitjaGFyIFx4QjgJKCAyIDQ1Njc4KSAgIyDio7ogwrggW0NFRElMTEFdCitjaGFyIFx4QjkJKCAyICAgICA4KSAgIyDiooIgwrkgW1NVUEVSU0NSSVBUIE9ORV0KK2NoYXIgXHhCQQkoMTIzNDU2NzgpICAjIOKjvyDCuiBbTUFTQ1VMSU5FIE9SRElOQUwgSU5ESUNBVE9SXQorY2hhciBceEJCCSggICAgNTY3ICkgICMg4qGwIMK7IFtSSUdIVC1QT0lOVElORyBET1VCTEUgQU5HTEUgUVVPVEFUSU9OIE1BUktdCitjaGFyIFx4QkMJKDEgMzQ1ICA4KSAgIyDiop0gwrwgW1ZVTEdBUiBGUkFDVElPTiBPTkUgUVVBUlRFUl0KK2NoYXIgXHhCRAkoICAgNDUgIDgpICAjIOKimCDCvSBbVlVMR0FSIEZSQUNUSU9OIE9ORSBIQUxGXQorY2hhciBceEJFCSggIDM0NTYgOCkgICMg4qK8IMK+IFtWVUxHQVIgRlJBQ1RJT04gVEhSRUUgUVVBUlRFUlNdCitjaGFyIFx4QkYJKCAgICAgNjcgKSAgIyDioaAgwr8gW0lOVkVSVEVEIFFVRVNUSU9OIE1BUktdCitjaGFyIFx4QzAJKDEgMyAgNjc4KSAgIyDio6Ugw4AgW0xBVElOIENBUElUQUwgTEVUVEVSIEEgV0lUSCBHUkFWRV0KK2NoYXIgXHhDMQkoMSAgICA2NyApICAjIOKhoSDDgSBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgQSBXSVRIIEFDVVRFXQorY2hhciBceEMyCSgxICAgIDY3OCkgICMg4qOhIMOCIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBBIFdJVEggQ0lSQ1VNRkxFWF0KK2NoYXIgXHhDMwkoMSAgNCA2NzgpICAjIOKjqSDDgyBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgQSBXSVRIIFRJTERFXQorY2hhciBceEM0CSggIDM0NSA3OCkgICMg4qOcIMOEIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBBIFdJVEggRElBRVJFU0lTXQorY2hhciBceEM1CSgxMjMgNTY3OCkgICMg4qO3IMOFIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBBIFdJVEggUklORyBBQk9WRV0KK2NoYXIgXHhDNgkoICAzNDUgNyApICAjIOKhnCDDhiBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgQUVdCitjaGFyIFx4QzcJKDEyICA1Njc4KSAgIyDio7Mgw4cgW0xBVElOIENBUElUQUwgTEVUVEVSIEMgV0lUSCBDRURJTExBXQorY2hhciBceEM4CSggICA0ICA3OCkgICMg4qOIIMOIIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBFIFdJVEggR1JBVkVdCitjaGFyIFx4QzkJKCAyMzQgNjcgKSAgIyDioa4gw4kgW0xBVElOIENBUElUQUwgTEVUVEVSIEUgV0lUSCBBQ1VURV0KK2NoYXIgXHhDQQkoMTIzNDU2NyApICAjIOKhvyDDiiBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgRSBXSVRIIENJUkNVTUZMRVhdCitjaGFyIFx4Q0IJKCAgMyA1Njc4KSAgIyDio7Qgw4sgW0xBVElOIENBUElUQUwgTEVUVEVSIEUgV0lUSCBESUFFUkVTSVNdCitjaGFyIFx4Q0MJKDEgICA1Njc4KSAgIyDio7Egw4wgW0xBVElOIENBUElUQUwgTEVUVEVSIEkgV0lUSCBHUkFWRV0KK2NoYXIgXHhDRAkoMTIgICA2NyApICAjIOKhoyDDjSBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgSSBXSVRIIEFDVVRFXQorY2hhciBceENFCSgxICA0IDY3ICkgICMg4qGpIMOOIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBJIFdJVEggQ0lSQ1VNRkxFWF0KK2NoYXIgXHhDRgkoMTIgICA2NzgpICAjIOKjoyDDjyBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgSSBXSVRIIERJQUVSRVNJU10KK2NoYXIgXHhEMAkoMSAgIDU2NyApICAjIOKhsSDDkCBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgRVRIXQorY2hhciBceEQxCSgxMiA0NTY3OCkgICMg4qO7IMORIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBOIFdJVEggVElMREVdCitjaGFyIFx4RDIJKDEyIDQgNjc4KSAgIyDio6sgw5IgW0xBVElOIENBUElUQUwgTEVUVEVSIE8gV0lUSCBHUkFWRV0KK2NoYXIgXHhEMwkoMSAgNDU2NyApICAjIOKhuSDDkyBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgTyBXSVRIIEFDVVRFXQorY2hhciBceEQ0CSggIDM0IDY3OCkgICMg4qOsIMOUIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBPIFdJVEggQ0lSQ1VNRkxFWF0KK2NoYXIgXHhENQkoMSAgNDU2NzgpICAjIOKjuSDDlSBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgTyBXSVRIIFRJTERFXQorY2hhciBceEQ2CSggMiA0IDY3ICkgICMg4qGqIMOWIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBPIFdJVEggRElBRVJFU0lTXQorY2hhciBceEQ3CSgxIDM0IDYgOCkgICMg4qKtIMOXIFtNVUxUSVBMSUNBVElPTiBTSUdOXQorY2hhciBceEQ4CSggMiA0IDY3OCkgICMg4qOqIMOYIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBPIFdJVEggU1RST0tFXQorY2hhciBceEQ5CSggMjM0NTY3ICkgICMg4qG+IMOZIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBVIFdJVEggR1JBVkVdCitjaGFyIFx4REEJKDEyIDQ1NjcgKSAgIyDiobsgw5ogW0xBVElOIENBUElUQUwgTEVUVEVSIFUgV0lUSCBBQ1VURV0KK2NoYXIgXHhEQgkoICAzNCAgIDgpICAjIOKijCDDmyBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgVSBXSVRIIENJUkNVTUZMRVhdCitjaGFyIFx4REMJKDEyICA1NjcgKSAgIyDiobMgw5wgW0xBVElOIENBUElUQUwgTEVUVEVSIFUgV0lUSCBESUFFUkVTSVNdCitjaGFyIFx4REQJKDEyMzQgNjcgKSAgIyDioa8gw50gW0xBVElOIENBUElUQUwgTEVUVEVSIFkgV0lUSCBBQ1VURV0KK2NoYXIgXHhERQkoMTIgNCA2NyApICAjIOKhqyDDniBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgVEhPUk5dCitjaGFyIFx4REYJKCAyMzQgNiA4KSAgIyDioq4gw58gW0xBVElOIFNNQUxMIExFVFRFUiBTSEFSUCBTXQorY2hhciBceEUwCSgxIDMgICA3OCkgICMg4qOFIMOgIFtMQVRJTiBTTUFMTCBMRVRURVIgQSBXSVRIIEdSQVZFXQorY2hhciBceEUxCSgxICAgIDYgICkgICMg4qChIMOhIFtMQVRJTiBTTUFMTCBMRVRURVIgQSBXSVRIIEFDVVRFXQorY2hhciBceEUyCSgxICAgIDYgOCkgICMg4qKhIMOiIFtMQVRJTiBTTUFMTCBMRVRURVIgQSBXSVRIIENJUkNVTUZMRVhdCitjaGFyIFx4RTMJKDEgIDQgNiA4KSAgIyDioqkgw6MgW0xBVElOIFNNQUxMIExFVFRFUiBBIFdJVEggVElMREVdCitjaGFyIFx4RTQJKCAgMzQ1ICA4KSAgIyDiopwgw6QgW0xBVElOIFNNQUxMIExFVFRFUiBBIFdJVEggRElBRVJFU0lTXQorY2hhciBceEU1CSgxMjMgNTYgOCkgICMg4qK3IMOlIFtMQVRJTiBTTUFMTCBMRVRURVIgQSBXSVRIIFJJTkcgQUJPVkVdCitjaGFyIFx4RTYJKCAgMzQ1ICAgKSAgIyDioJwgw6YgW0xBVElOIFNNQUxMIExFVFRFUiBBRV0KK2NoYXIgXHhFNwkoMSAzNCAgIDgpICAjIOKijSDDpyBbTEFUSU4gU01BTEwgTEVUVEVSIEMgV0lUSCBDRURJTExBXQorY2hhciBceEU4CSggMjMgNTYgOCkgICMg4qK2IMOoIFtMQVRJTiBTTUFMTCBMRVRURVIgRSBXSVRIIEdSQVZFXQorY2hhciBceEU5CSggMjM0IDYgICkgICMg4qCuIMOpIFtMQVRJTiBTTUFMTCBMRVRURVIgRSBXSVRIIEFDVVRFXQorY2hhciBceEVBCSgxMiAgIDYgOCkgICMg4qKjIMOqIFtMQVRJTiBTTUFMTCBMRVRURVIgRSBXSVRIIENJUkNVTUZMRVhdCitjaGFyIFx4RUIJKDEgMyAgICA4KSAgIyDiooUgw6sgW0xBVElOIFNNQUxMIExFVFRFUiBFIFdJVEggRElBRVJFU0lTXQorY2hhciBceEVDCSgxICAgNTYgOCkgICMg4qKxIMOsIFtMQVRJTiBTTUFMTCBMRVRURVIgSSBXSVRIIEdSQVZFXQorY2hhciBceEVECSgxMiAgIDYgICkgICMg4qCjIMOtIFtMQVRJTiBTTUFMTCBMRVRURVIgSSBXSVRIIEFDVVRFXQorY2hhciBceEVFCSggMiA0NSA3OCkgICMg4qOaIMOuIFtMQVRJTiBTTUFMTCBMRVRURVIgSSBXSVRIIENJUkNVTUZMRVhdCitjaGFyIFx4RUYJKDEyICA1NiA4KSAgIyDiorMgw68gW0xBVElOIFNNQUxMIExFVFRFUiBJIFdJVEggRElBRVJFU0lTXQorY2hhciBceEYwCSgxICAgNTYgICkgICMg4qCxIMOwIFtMQVRJTiBTTUFMTCBMRVRURVIgRVRIXQorY2hhciBceEYxCSgxMiA0NTYgOCkgICMg4qK7IMOxIFtMQVRJTiBTTUFMTCBMRVRURVIgTiBXSVRIIFRJTERFXQorY2hhciBceEYyCSgxMiA0IDYgOCkgICMg4qKrIMOyIFtMQVRJTiBTTUFMTCBMRVRURVIgTyBXSVRIIEdSQVZFXQorY2hhciBceEYzCSgxICA0NTYgICkgICMg4qC5IMOzIFtMQVRJTiBTTUFMTCBMRVRURVIgTyBXSVRIIEFDVVRFXQorY2hhciBceEY0CSggIDM0IDYgOCkgICMg4qKsIMO0IFtMQVRJTiBTTUFMTCBMRVRURVIgTyBXSVRIIENJUkNVTUZMRVhdCitjaGFyIFx4RjUJKDEgIDQ1NiA4KSAgIyDiorkgw7UgW0xBVElOIFNNQUxMIExFVFRFUiBPIFdJVEggVElMREVdCitjaGFyIFx4RjYJKCAyIDQgNiAgKSAgIyDioKogw7YgW0xBVElOIFNNQUxMIExFVFRFUiBPIFdJVEggRElBRVJFU0lTXQorY2hhciBceEY3CSgxMiAgNTYgICkgICMg4qCzIMO3IFtESVZJU0lPTiBTSUdOXQorY2hhciBceEY4CSggMiA0IDYgOCkgICMg4qKqIMO4IFtMQVRJTiBTTUFMTCBMRVRURVIgTyBXSVRIIFNUUk9LRV0KK2NoYXIgXHhGOQkoIDIzICA2IDgpICAjIOKipiDDuSBbTEFUSU4gU01BTEwgTEVUVEVSIFUgV0lUSCBHUkFWRV0KK2NoYXIgXHhGQQkoMTIgNDU2ICApICAjIOKguyDDuiBbTEFUSU4gU01BTEwgTEVUVEVSIFUgV0lUSCBBQ1VURV0KK2NoYXIgXHhGQgkoMTIzNCAgIDgpICAjIOKijyDDuyBbTEFUSU4gU01BTEwgTEVUVEVSIFUgV0lUSCBDSVJDVU1GTEVYXQorY2hhciBceEZDCSgxMiAgNTYgOCkgICMg4qKzIMO8IFtMQVRJTiBTTUFMTCBMRVRURVIgVSBXSVRIIERJQUVSRVNJU10KK2NoYXIgXHhGRAkoMTIzNCA2ICApICAjIOKgryDDvSBbTEFUSU4gU01BTEwgTEVUVEVSIFkgV0lUSCBBQ1VURV0KK2NoYXIgXHhGRQkoMTIgNCA2ICApICAjIOKgqyDDviBbTEFUSU4gU01BTEwgTEVUVEVSIFRIT1JOXQorY2hhciBceEZGCSggMjM0NTYgOCkgICMg4qK+IMO/IFtMQVRJTiBTTUFMTCBMRVRURVIgWSBXSVRIIERJQUVSRVNJU10KKworY2hhciBcdTAxNTIJKDEgMyA1IDc4KSAgIyDio5UgxZIgW0xBVElOIENBUElUQUwgTElHQVRVUkUgT0VdCitjaGFyIFx1MDE5MgkoICAgIDUgIDgpICAjIOKikCDGkiBbTEFUSU4gU01BTEwgTEVUVEVSIEYgV0lUSCBIT09LXQorCitjaGFyIFx1MjAxMwkoICAzICA2IDgpICAjIOKipCDigJMgW0VOIERBU0hdCitjaGFyIFx1MjAxNAkoICAzICA2NyApICAjIOKhpCDigJQgW0VNIERBU0hdCitjaGFyIFx1MjAxQwkoIDIzICAgNyApICAjIOKhhiDigJwgW0xFRlQgRE9VQkxFIFFVT1RBVElPTiBNQVJLXQorY2hhciBcdTIwMUQJKCAgIDQ1ICA4KSAgIyDiopgg4oCdIFtSSUdIVCBET1VCTEUgUVVPVEFUSU9OIE1BUktdCitjaGFyIFx1MjAyMAkoIDIzIDUgIDgpICAjIOKiliDigKAgW0RBR0dFUl0KK2NoYXIgXHUyMDIxCSggMjMgNSA3OCkgICMg4qOWIOKAoSBbRE9VQkxFIERBR0dFUl0KK2NoYXIgXHUyMDIyCSggIDMgICA3ICkgICMg4qGEIOKAoiBbQlVMTEVUXQorY2hhciBcdTIwMjYJKCAgICAgNiAgKSAgIyDioKAg4oCmIFtIT1JJWk9OVEFMIEVMTElQU0lTXQorY2hhciBcdTIwMzAJKCAgIDQgNjc4KSAgIyDio6gg4oCwIFtQRVIgTUlMTEUgU0lHTl0KK2NoYXIgXHUyMEFDICAgICAoMSAgIDUgNzgpICAjIOKjkSDigqwgW0VVUk8gU0lHTl0KK2NoYXIgXHUyMTIyCSggMjM0NSA3OCkgICMg4qOeIOKEoiBbVFJBREUgTUFSSyBTSUdOXQorCitpbmNsdWRlIGNvbW1vbi50dGkKZGlmZiAtLWdpdCBhL1RhYmxlcy9UZXh0L2l0LnR0YiBiL1RhYmxlcy9UZXh0L2l0LnR0YgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMTRkNTY4Ci0tLSAvZGV2L251bGwKKysrIGIvVGFibGVzL1RleHQvaXQudHRiCkBAIC0wLDAgKzEsMTcyIEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisjICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorIworIyBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisjCisjIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisjCisjIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyMgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorIyBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyMKKyMgV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworIworIyBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIyBCUkxUVFkgVGV4dCBUYWJsZSAtIEl0YWxpYW4KKworIyB0aGUgc3RhbmRhcmQgcmVwcmVzZW50YXRpb25zIGZvciB0aGUgbGV0dGVycyBvZiB0aGUgTGF0aW4gYWxwaGFiZXQKK2luY2x1ZGUgbHRyLWxhdGluLnR0aQorCisjIHRoZSBzdGFuZGFyZCByZXByZXNlbnRhdGlvbnMgZm9yIHRoZSBMYXRpbiBjb250cm9sIGNoYXJhY3RlcnMKK2luY2x1ZGUgY3RsLWxhdGluLnR0aQorCisjIHRoZSBudW1iZXJzIDEtOSBhcmUgcmVwcmVzZW50ZWQgYnkgdGhlIGxldHRlcnMgYS1pIHdpdGggZG90IDYgYWRkZWQKKyMgdGhlIG51bWJlciAwIGlzIHJlcHJlc2VudGVkIGJ5IGRvdHMgMzQ2CitpbmNsdWRlIG51bS1kb3Q2LnR0aQorCisjIGdlbmVyYXRlZCBieSB0dGJ0ZXN0OiBjaGFyc2V0PWlzby04ODU5LTEKK2NoYXIgXHgwMAkoICAzNDUgNzgpICAjIDAwIOKjnCAgIFtOVUxMXQorIyBMYXRpbiBjb250cm9sIGNoYXJhY3RlcnMgICMgMDEtMUEKK2NoYXIgXHgxQgkoMTIzIDU2NzgpICAjIDFCIOKjtyAgIFtFU0NBUEVdCitjaGFyIFx4MUMJKCAgMzQgIDc4KSAgIyAxQyDio4wgICBbSU5GT1JNQVRJT04gU0VQQVJBVE9SIEZPVVJdCitjaGFyIFx4MUQJKCAyMzQ1Njc4KSAgIyAxRCDio74gICBbSU5GT1JNQVRJT04gU0VQQVJBVE9SIFRIUkVFXQorY2hhciBceDFFCSggMjM0IDY3OCkgICMgMUUg4qOuICAgW0lORk9STUFUSU9OIFNFUEFSQVRPUiBUV09dCitjaGFyIFx4MUYJKCAgIDQ1Njc4KSAgIyAxRiDio7ggICBbSU5GT1JNQVRJT04gU0VQQVJBVE9SIE9ORV0KK2NoYXIgXHgyMAkoICAgICAgICApICAjIDIwIOKggCAgIFtTUEFDRV0KK2NoYXIgXHgyMQkoICAgIDUgICApICAjIDIxIOKgkCAhIFtFWENMQU1BVElPTiBNQVJLXQorY2hhciBceDIyCSggICA0ICAgICkgICMgMjIg4qCIICIgW1FVT1RBVElPTiBNQVJLXQorY2hhciBceDIzCSggIDM0NTYgICkgICMgMjMg4qC8ICMgW05VTUJFUiBTSUdOXQorY2hhciBceDI0CSggICA0IDYgICkgICMgMjQg4qCoICQgW0RPTExBUiBTSUdOXQorY2hhciBceDI1CSgxMjM0NTYgICkgICMgMjUg4qC/ICUgW1BFUkNFTlQgU0lHTl0KK2NoYXIgXHgyNgkoMTIzNCA2ICApICAjIDI2IOKgryAmIFtBTVBFUlNBTkRdCitjaGFyIFx4MjcJKCAgICAgNiAgKSAgIyAyNyDioKAgJyBbQVBPU1RST1BIRV0KK2NoYXIgXHgyOAkoIDIzICA2ICApICAjIDI4IOKgpiAoIFtMRUZUIFBBUkVOVEhFU0lTXQorY2hhciBceDI5CSggIDMgNTYgICkgICMgMjkg4qC0ICkgW1JJR0hUIFBBUkVOVEhFU0lTXQorY2hhciBceDJBCSggIDMgNSAgICkgICMgMkEg4qCUICogW0FTVEVSSVNLXQorY2hhciBceDJCCSggMjMgNSAgICkgICMgMkIg4qCWICsgW1BMVVMgU0lHTl0KK2NoYXIgXHgyQwkoIDIgICAgICApICAjIDJDIOKggiAsIFtDT01NQV0KK2NoYXIgXHgyRAkoICAzICA2ICApICAjIDJEIOKgpCAtIFtIWVBIRU4tTUlOVVNdCitjaGFyIFx4MkUJKCAgMyAgICAgKSAgIyAyRSDioIQgLiBbRlVMTCBTVE9QXQorY2hhciBceDJGCSggMiAgNTYgICkgICMgMkYg4qCyIC8gW1NPTElEVVNdCisjIEhpbmR1LUFyYWJpYyBudW1lcmFscyAgICAgIyAzMC0zOQorY2hhciBceDNBCSggMiAgNSAgICkgICMgM0Eg4qCSIDogW0NPTE9OXQorY2hhciBceDNCCSggMjMgICAgICkgICMgM0Ig4qCGIDsgW1NFTUlDT0xPTl0KK2NoYXIgXHgzQwkoICAgIDU2ICApICAjIDNDIOKgsCA8IFtMRVNTLVRIQU4gU0lHTl0KK2NoYXIgXHgzRAkoIDIzIDU2ICApICAjIDNEIOKgtiA9IFtFUVVBTFMgU0lHTl0KK2NoYXIgXHgzRQkoICAgNDUgICApICAjIDNFIOKgmCA+IFtHUkVBVEVSLVRIQU4gU0lHTl0KK2NoYXIgXHgzRgkoIDIgICA2ICApICAjIDNGIOKgoiA/IFtRVUVTVElPTiBNQVJLXQorY2hhciBceDQwCSggIDM0IDY3ICkgICMgNDAg4qGsIEAgW0NPTU1FUkNJQUwgQVRdCisjIHVwcGVyY2FzZSBMYXRpbiBhbHBoYWJldCAgIyA0MS01QQorY2hhciBceDVCCSggMjMgIDY3ICkgICMgNUIg4qGmIFsgW0xFRlQgU1FVQVJFIEJSQUNLRVRdCitjaGFyIFx4NUMJKCAyICA1NjcgKSAgIyA1QyDiobIgXCBbUkVWRVJTRSBTT0xJRFVTXQorY2hhciBceDVECSggIDMgNTY3ICkgICMgNUQg4qG0IF0gW1JJR0hUIFNRVUFSRSBCUkFDS0VUXQorY2hhciBceDVFCSggMjM0IDY3ICkgICMgNUUg4qGuIF4gW0NJUkNVTUZMRVggQUNDRU5UXQorY2hhciBceDVGCSggICA0NTYgICkgICMgNUYg4qC4IF8gW0xPVyBMSU5FXQorY2hhciBceDYwCSggIDM0NSAgICkgICMgNjAg4qCcIGAgW0dSQVZFIEFDQ0VOVF0KKyMgbG93ZXJjYXNlIExhdGluIGFscGhhYmV0ICAjIDYxLTdBCitjaGFyIFx4N0IJKCAyMyAgNiA4KSAgIyA3QiDioqYgeyBbTEVGVCBDVVJMWSBCUkFDS0VUXQorY2hhciBceDdDCSggMiAgNTYgOCkgICMgN0Mg4qKyIHwgW1ZFUlRJQ0FMIExJTkVdCitjaGFyIFx4N0QJKCAgMyA1NiA4KSAgIyA3RCDiorQgfSBbUklHSFQgQ1VSTFkgQlJBQ0tFVF0KK2NoYXIgXHg3RQkoIDIzNCA2IDgpICAjIDdFIOKiriB+IFtUSUxERV0KK2NoYXIgXHg3RgkoICAgICAgNzgpICAjIDdGIOKjgCAgIFtERUxFVEVdCitjaGFyIFx4QTEJKCAgMyAgNjcgKSAgIyBBMSDioaQgwqEgW0lOVkVSVEVEIEVYQ0xBTUFUSU9OIE1BUktdCitjaGFyIFx4QTIJKDEgIDQgNiA4KSAgIyBBMiDioqkgwqIgW0NFTlQgU0lHTl0KK2NoYXIgXHhBMwkoICAgNCA2NyApICAjIEEzIOKhqCDCoyBbUE9VTkQgU0lHTl0KK2NoYXIgXHhBNAkoMTIzNDU2NzgpICAjIEE0IOKjvyDCpCBbQ1VSUkVOQ1kgU0lHTl0KK2NoYXIgXHhBNQkoICAgNCA2IDgpICAjIEE1IOKiqCDCpSBbWUVOIFNJR05dCitjaGFyIFx4QTYJKCAyMyA1NiAgKSAgIyBBNiDioLYgwqYgW0JST0tFTiBCQVJdCitjaGFyIFx4QTcJKDEyMzQ1Njc4KSAgIyBBNyDio78gwqcgW1NFQ1RJT04gU0lHTl0KK2NoYXIgXHhBOAkoICAzICA2ICApICAjIEE4IOKgpCDCqCBbRElBRVJFU0lTXQorY2hhciBceEE5CSggIDMgIDYgICkgICMgQTkg4qCkIMKpIFtDT1BZUklHSFQgU0lHTl0KK2NoYXIgXHhBQQkoMTIgIDUgIDgpICAjIEFBIOKikyDCqiBbRkVNSU5JTkUgT1JESU5BTCBJTkRJQ0FUT1JdCitjaGFyIFx4QUIJKCAgICA1Njc4KSAgIyBBQiDio7AgwqsgW0xFRlQtUE9JTlRJTkcgRE9VQkxFIEFOR0xFIFFVT1RBVElPTiBNQVJLXQorY2hhciBceEFDCSggIDMgIDYgICkgICMgQUMg4qCkIMKsIFtOT1QgU0lHTl0KK2NoYXIgXHhBRAkoICAgIDUgNzgpICAjIEFEIOKjkCDCrSBbU09GVCBIWVBIRU5dCitjaGFyIFx4QUUJKCAgMyAgNiAgKSAgIyBBRSDioKQgwq4gW1JFR0lTVEVSRUQgU0lHTl0KK2NoYXIgXHhBRgkoIDIzIDU2ICApICAjIEFGIOKgtiDCryBbTUFDUk9OXQorY2hhciBceEIwCSggIDM0ICAgOCkgICMgQjAg4qKMIMKwIFtERUdSRUUgU0lHTl0KK2NoYXIgXHhCMQkoIDIzIDUgNzgpICAjIEIxIOKjliDCsSBbUExVUy1NSU5VUyBTSUdOXQorY2hhciBceEIyCSgxMiAgICAgOCkgICMgQjIg4qKDIMKyIFtTVVBFUlNDUklQVCBUV09dCitjaGFyIFx4QjMJKCAgIDQ1NiA4KSAgIyBCMyDiorggwrMgW1NVUEVSU0NSSVBUIFRIUkVFXQorY2hhciBceEI0CSggICA0NTYgOCkgICMgQjQg4qK4IMK0IFtBQ1VURSBBQ0NFTlRdCitjaGFyIFx4QjUJKDEgMzQgNiA4KSAgIyBCNSDioq0gwrUgW01JQ1JPIFNJR05dCitjaGFyIFx4QjYJKDEyMzQ1Njc4KSAgIyBCNiDio78gwrYgW1BJTENST1cgU0lHTl0KK2NoYXIgXHhCNwkoICAgICAgNyApICAjIEI3IOKhgCDCtyBbTUlERExFIERPVF0KK2NoYXIgXHhCOAkoIDIzIDU2ICApICAjIEI4IOKgtiDCuCBbQ0VESUxMQV0KK2NoYXIgXHhCOQkoICAgNDU2IDgpICAjIEI5IOKiuCDCuSBbU1VQRVJTQ1JJUFQgT05FXQorY2hhciBceEJBCSggMiA0NSAgOCkgICMgQkEg4qKaIMK6IFtNQVNDVUxJTkUgT1JESU5BTCBJTkRJQ0FUT1JdCitjaGFyIFx4QkIJKCAgIDQ1IDc4KSAgIyBCQiDio5ggwrsgW1JJR0hULVBPSU5USU5HIERPVUJMRSBBTkdMRSBRVU9UQVRJT04gTUFSS10KK2NoYXIgXHhCQwkoMTIzICA2IDgpICAjIEJDIOKipyDCvCBbVlVMR0FSIEZSQUNUSU9OIE9ORSBRVUFSVEVSXQorY2hhciBceEJECSggIDMgICA3ICkgICMgQkQg4qGEIMK9IFtWVUxHQVIgRlJBQ1RJT04gT05FIEhBTEZdCitjaGFyIFx4QkUJKCAyMyA1NiAgKSAgIyBCRSDioLYgwr4gW1ZVTEdBUiBGUkFDVElPTiBUSFJFRSBRVUFSVEVSU10KK2NoYXIgXHhCRgkoICAgICA2IDgpICAjIEJGIOKioCDCvyBbSU5WRVJURUQgUVVFU1RJT04gTUFSS10KK2NoYXIgXHhDMAkoICAzICA2ICApICAjIEMwIOKgpCDDgCBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgQSBXSVRIIEdSQVZFXQorY2hhciBceEMxCSggIDMgIDYgICkgICMgQzEg4qCkIMOBIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBBIFdJVEggQUNVVEVdCitjaGFyIFx4QzIJKCAgMyAgNiAgKSAgIyBDMiDioKQgw4IgW0xBVElOIENBUElUQUwgTEVUVEVSIEEgV0lUSCBDSVJDVU1GTEVYXQorY2hhciBceEMzCSggICA0NTYgOCkgICMgQzMg4qK4IMODIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBBIFdJVEggVElMREVdCitjaGFyIFx4QzQJKDEyMyA1NjcgKSAgIyBDNCDiobcgw4QgW0xBVElOIENBUElUQUwgTEVUVEVSIEEgV0lUSCBESUFFUkVTSVNdCitjaGFyIFx4QzUJKCAgMzQ1Njc4KSAgIyBDNSDio7wgw4UgW0xBVElOIENBUElUQUwgTEVUVEVSIEEgV0lUSCBSSU5HIEFCT1ZFXQorY2hhciBceEM2CSggICA0ICA3OCkgICMgQzYg4qOIIMOGIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBBRV0KK2NoYXIgXHhDNwkoMTIzNCA2NyApICAjIEM3IOKhryDDhyBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgQyBXSVRIIENFRElMTEFdCitjaGFyIFx4QzgJKCAyMyA1NiAgKSAgIyBDOCDioLYgw4ggW0xBVElOIENBUElUQUwgTEVUVEVSIEUgV0lUSCBHUkFWRV0KK2NoYXIgXHhDOQkoIDIgICA2NzgpICAjIEM5IOKjoiDDiSBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgRSBXSVRIIEFDVVRFXQorY2hhciBceENBCSggMjMgNTYgICkgICMgQ0Eg4qC2IMOKIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBFIFdJVEggQ0lSQ1VNRkxFWF0KK2NoYXIgXHhDQgkoIDIzIDU2ICApICAjIENCIOKgtiDDiyBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgRSBXSVRIIERJQUVSRVNJU10KK2NoYXIgXHhDQwkoICAgNDU2IDgpICAjIENDIOKiuCDDjCBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgSSBXSVRIIEdSQVZFXQorY2hhciBceENECSggMjMgNTYgICkgICMgQ0Qg4qC2IMONIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBJIFdJVEggQUNVVEVdCitjaGFyIFx4Q0UJKCAgIDQ1NiA4KSAgIyBDRSDiorggw44gW0xBVElOIENBUElUQUwgTEVUVEVSIEkgV0lUSCBDSVJDVU1GTEVYXQorY2hhciBceENGCSggMjMgNTYgICkgICMgQ0Yg4qC2IMOPIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBJIFdJVEggRElBRVJFU0lTXQorY2hhciBceEQwCSggIDMgIDYgICkgICMgRDAg4qCkIMOQIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBFVEhdCitjaGFyIFx4RDEJKDEgMzQgICA4KSAgIyBEMSDioo0gw5EgW0xBVElOIENBUElUQUwgTEVUVEVSIE4gV0lUSCBUSUxERV0KK2NoYXIgXHhEMgkoICAzICA2ICApICAjIEQyIOKgpCDDkiBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgTyBXSVRIIEdSQVZFXQorY2hhciBceEQzCSggIDMgIDYgICkgICMgRDMg4qCkIMOTIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBPIFdJVEggQUNVVEVdCitjaGFyIFx4RDQJKCAyMyA1NiAgKSAgIyBENCDioLYgw5QgW0xBVElOIENBUElUQUwgTEVUVEVSIE8gV0lUSCBDSVJDVU1GTEVYXQorY2hhciBceEQ1CSggMjMgNTYgICkgICMgRDUg4qC2IMOVIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBPIFdJVEggVElMREVdCitjaGFyIFx4RDYJKCAgMzQgIDcgKSAgIyBENiDioYwgw5YgW0xBVElOIENBUElUQUwgTEVUVEVSIE8gV0lUSCBESUFFUkVTSVNdCitjaGFyIFx4RDcJKCAgIDQ1NiA4KSAgIyBENyDiorggw5cgW01VTFRJUExJQ0FUSU9OIFNJR05dCitjaGFyIFx4RDgJKCAgIDQ1NiA4KSAgIyBEOCDiorggw5ggW0xBVElOIENBUElUQUwgTEVUVEVSIE8gV0lUSCBTVFJPS0VdCitjaGFyIFx4RDkJKCAgMyAgNiAgKSAgIyBEOSDioKQgw5kgW0xBVElOIENBUElUQUwgTEVUVEVSIFUgV0lUSCBHUkFWRV0KK2NoYXIgXHhEQQkoICAzICA2ICApICAjIERBIOKgpCDDmiBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgVSBXSVRIIEFDVVRFXQorY2hhciBceERCCSgxMjM0NTY3OCkgICMgREIg4qO/IMObIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBVIFdJVEggQ0lSQ1VNRkxFWF0KK2NoYXIgXHhEQwkoIDIzNDU2NyApICAjIERDIOKhviDDnCBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgVSBXSVRIIERJQUVSRVNJU10KK2NoYXIgXHhERAkoICAgNDU2IDgpICAjIEREIOKiuCDDnSBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgWSBXSVRIIEFDVVRFXQorY2hhciBceERFCSggICA0NTYgOCkgICMgREUg4qK4IMOeIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBUSE9STl0KK2NoYXIgXHhERgkoIDIzNCA2ICApICAjIERGIOKgriDDnyBbTEFUSU4gU01BTEwgTEVUVEVSIFNIQVJQIFNdCitjaGFyIFx4RTAJKDEgICAgICA4KSAgIyBFMCDiooEgw6AgW0xBVElOIFNNQUxMIExFVFRFUiBBIFdJVEggR1JBVkVdCitjaGFyIFx4RTEJKDEgICAgNiA4KSAgIyBFMSDioqEgw6EgW0xBVElOIFNNQUxMIExFVFRFUiBBIFdJVEggQUNVVEVdCitjaGFyIFx4RTIJKDEgICAgNjc4KSAgIyBFMiDio6Egw6IgW0xBVElOIFNNQUxMIExFVFRFUiBBIFdJVEggQ0lSQ1VNRkxFWF0KK2NoYXIgXHhFMwkoMTIzNCAgIDgpICAjIEUzIOKijyDDoyBbTEFUSU4gU01BTEwgTEVUVEVSIEEgV0lUSCBUSUxERV0KK2NoYXIgXHhFNAkoMTIzIDU2ICApICAjIEU0IOKgtyDDpCBbTEFUSU4gU01BTEwgTEVUVEVSIEEgV0lUSCBESUFFUkVTSVNdCitjaGFyIFx4RTUJKCAgMzQ1NjcgKSAgIyBFNSDiobwgw6UgW0xBVElOIFNNQUxMIExFVFRFUiBBIFdJVEggUklORyBBQk9WRV0KK2NoYXIgXHhFNgkoICAgNCAgNyApICAjIEU2IOKhiCDDpiBbTEFUSU4gU01BTEwgTEVUVEVSIEFFXQorY2hhciBceEU3CSgxMjM0IDY3OCkgICMgRTcg4qOvIMOnIFtMQVRJTiBTTUFMTCBMRVRURVIgQyBXSVRIIENFRElMTEFdCitjaGFyIFx4RTgJKDEgICA1ICA4KSAgIyBFOCDiopEgw6ggW0xBVElOIFNNQUxMIExFVFRFUiBFIFdJVEggR1JBVkVdCitjaGFyIFx4RTkJKDEgICA1NiA4KSAgIyBFOSDiorEgw6kgW0xBVElOIFNNQUxMIExFVFRFUiBFIFdJVEggQUNVVEVdCitjaGFyIFx4RUEJKDEyICAgNjc4KSAgIyBFQSDio6Mgw6ogW0xBVElOIFNNQUxMIExFVFRFUiBFIFdJVEggQ0lSQ1VNRkxFWF0KK2NoYXIgXHhFQgkoMTIgNCA2IDgpICAjIEVCIOKiqyDDqyBbTEFUSU4gU01BTEwgTEVUVEVSIEUgV0lUSCBESUFFUkVTSVNdCitjaGFyIFx4RUMJKCAyIDQgICA4KSAgIyBFQyDiooogw6wgW0xBVElOIFNNQUxMIExFVFRFUiBJIFdJVEggR1JBVkVdCitjaGFyIFx4RUQJKCAgMyA1IDcgKSAgIyBFRCDioZQgw60gW0xBVElOIFNNQUxMIExFVFRFUiBJIFdJVEggQUNVVEVdCitjaGFyIFx4RUUJKDEgIDQgNjcgKSAgIyBFRSDioakgw64gW0xBVElOIFNNQUxMIExFVFRFUiBJIFdJVEggQ0lSQ1VNRkxFWF0KK2NoYXIgXHhFRgkoMTIgNDU2IDgpICAjIEVGIOKiuyDDryBbTEFUSU4gU01BTEwgTEVUVEVSIEkgV0lUSCBESUFFUkVTSVNdCitjaGFyIFx4RjAJKCAgMyAgNiA4KSAgIyBGMCDioqQgw7AgW0xBVElOIFNNQUxMIExFVFRFUiBFVEhdCitjaGFyIFx4RjEJKDEgMzQ1ICA4KSAgIyBGMSDiop0gw7EgW0xBVElOIFNNQUxMIExFVFRFUiBOIFdJVEggVElMREVdCitjaGFyIFx4RjIJKDEgMyA1ICA4KSAgIyBGMiDiopUgw7IgW0xBVElOIFNNQUxMIExFVFRFUiBPIFdJVEggR1JBVkVdCitjaGFyIFx4RjMJKCAyIDQgNiA4KSAgIyBGMyDioqogw7MgW0xBVElOIFNNQUxMIExFVFRFUiBPIFdJVEggQUNVVEVdCitjaGFyIFx4RjQJKDEgIDQ1Njc4KSAgIyBGNCDio7kgw7QgW0xBVElOIFNNQUxMIExFVFRFUiBPIFdJVEggQ0lSQ1VNRkxFWF0KK2NoYXIgXHhGNQkoICAzNDUgIDgpICAjIEY1IOKinCDDtSBbTEFUSU4gU01BTEwgTEVUVEVSIE8gV0lUSCBUSUxERV0KK2NoYXIgXHhGNgkoICAzNCAgICApICAjIEY2IOKgjCDDtiBbTEFUSU4gU01BTEwgTEVUVEVSIE8gV0lUSCBESUFFUkVTSVNdCitjaGFyIFx4RjcJKDEyICA1Njc4KSAgIyBGNyDio7Mgw7cgW0RJVklTSU9OIFNJR05dCitjaGFyIFx4RjgJKDEyMzQ1Njc4KSAgIyBGOCDio78gw7ggW0xBVElOIFNNQUxMIExFVFRFUiBPIFdJVEggU1RST0tFXQorY2hhciBceEY5CSgxIDMgIDYgOCkgICMgRjkg4qKlIMO5IFtMQVRJTiBTTUFMTCBMRVRURVIgVSBXSVRIIEdSQVZFXQorY2hhciBceEZBCSgxIDMgIDY3OCkgICMgRkEg4qOlIMO6IFtMQVRJTiBTTUFMTCBMRVRURVIgVSBXSVRIIEFDVVRFXQorY2hhciBceEZCCSgxICAgNTY3OCkgICMgRkIg4qOxIMO7IFtMQVRJTiBTTUFMTCBMRVRURVIgVSBXSVRIIENJUkNVTUZMRVhdCitjaGFyIFx4RkMJKCAyMzQ1NiAgKSAgIyBGQyDioL4gw7wgW0xBVElOIFNNQUxMIExFVFRFUiBVIFdJVEggRElBRVJFU0lTXQorY2hhciBceEZECSgxMjM0NTY3OCkgICMgRkQg4qO/IMO9IFtMQVRJTiBTTUFMTCBMRVRURVIgWSBXSVRIIEFDVVRFXQorY2hhciBceEZFCSggIDMgIDY3OCkgICMgRkUg4qOkIMO+IFtMQVRJTiBTTUFMTCBMRVRURVIgVEhPUk5dCitjaGFyIFx4RkYJKCAgIDQ1NiA4KSAgIyBGRiDiorggw78gW0xBVElOIFNNQUxMIExFVFRFUiBZIFdJVEggRElBRVJFU0lTXQorCitpbmNsdWRlIGNvbW1vbi50dGkKZGlmZiAtLWdpdCBhL1RhYmxlcy9UZXh0L2thbm5hZGEudHRpIGIvVGFibGVzL1RleHQva2FubmFkYS50dGkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjYwMmFkYQotLS0gL2Rldi9udWxsCisrKyBiL1RhYmxlcy9UZXh0L2thbm5hZGEudHRpCkBAIC0wLDAgKzEsMTA5IEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisjICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorIworIyBDb3B5cmlnaHQgKEMpIDIwMDgtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisjCisjIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisjCisjIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyMgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorIyBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyMKKyMgV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworIworIyBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIyBUaGlzIEJSTFRUWSB0ZXh0IHN1YnRhYmxlIGRlZmluZXMgdGhlIGJyYWlsbGUgcmVwcmVzZW50YXRpb25zCisjIGZvciB0aGUgS2FubmFkYSBzY3JpcHQuCisKKyMgTWFpbnRhaW5lZCBieSBKb2huIEouIEJveWVyLCBkaXJlY3RvckBjaHBpLm9yZywgd3d3LmNocGkub3JnCisjCisjIFRoaXMgdGFibGUgaXMgYnVpbHQgYW5kIG1haW50YWluZWQgYnkgTGVvbiBVbmdpZXIgPExlb24uVW5naWVyQFZpZXdQbHVzLmNvbT4KKyMgd2l0aCBoZWxwIGFuZCBndWlkYW5jZSBmcm9tIE1vaGFtbWVkIFIuIFJhbWFkYW4gPG1yYW1hZGFuQG5hdHRpcS5jb20+CisjCisjIENvbnZlcnRlZCBmcm9tIGxpYmxvdWlzIHRhYmxlIGJ5IFNhbXVlbCBUaGliYXVsdCA8c2FtdWVsLnRoaWJhdWx0QGVucy1seW9uLm9yZz4KKworIyBnZW5lcmF0ZWQgYnkgdHRidGVzdDoKKworY2hhciBcdTBDODIJKCAgICA1NiAgKSAgIyDioLAg4LKCIFtLQU5OQURBIFNJR04gQU5VU1ZBUkFdCitjaGFyIFx1MEM4MwkoICAgICA2ICApICAjIOKgoCDgsoMgW0tBTk5BREEgU0lHTiBWSVNBUkdBXQorY2hhciBcdTBDODUJKDEgICAgICAgKSAgIyDioIEg4LKFIFtLQU5OQURBIExFVFRFUiBBXQorY2hhciBcdTBDODYJKCAgMzQ1ICAgKSAgIyDioJwg4LKGIFtLQU5OQURBIExFVFRFUiBBQV0KK2NoYXIgXHUwQzg3CSggMiA0ICAgICkgICMg4qCKIOCyhyBbS0FOTkFEQSBMRVRURVIgSV0KK2NoYXIgXHUwQzg4CSggIDMgNSAgICkgICMg4qCUIOCyiCBbS0FOTkFEQSBMRVRURVIgSUldCitjaGFyIFx1MEM4OQkoMSAzICA2ICApICAjIOKgpSDgsokgW0tBTk5BREEgTEVUVEVSIFVdCitjaGFyIFx1MEM4QQkoMTIgIDU2ICApICAjIOKgsyDgsoogW0tBTk5BREEgTEVUVEVSIFVVXQorCitjaGFyIFx1MEM4RQkoICAzNCAgNyApICAjIOKhjCDgso4gW0tBTk5BREEgTEVUVEVSIEVdCitjaGFyIFx1MEM4RgkoMSAgIDUgICApICAjIOKgkSDgso8gW0tBTk5BREEgTEVUVEVSIEVFXQorY2hhciBcdTBDOTAJKCAgMzQgICAgKSAgIyDioIwg4LKQIFtLQU5OQURBIExFVFRFUiBBSV0KKworY2hhciBcdTBDOTIJKCAyIDQgNjcgKSAgIyDioaog4LKSIFtLQU5OQURBIExFVFRFUiBPXQorY2hhciBcdTBDOTMJKDEgMyA1ICAgKSAgIyDioJUg4LKTIFtLQU5OQURBIExFVFRFUiBPT10KK2NoYXIgXHUwQzk0CSggMiA0IDYgICkgICMg4qCqIOCylCBbS0FOTkFEQSBMRVRURVIgQVVdCitjaGFyIFx1MEM5NQkoMSAzICAgICApICAjIOKghSDgspUgW0tBTk5BREEgTEVUVEVSIEtBXQorY2hhciBcdTBDOTYJKCAgIDQgNiAgKSAgIyDioKgg4LKWIFtLQU5OQURBIExFVFRFUiBLSEFdCitjaGFyIFx1MEM5NwkoMTIzNCAgICApICAjIOKgjyDgspcgW0tBTk5BREEgTEVUVEVSIEdBXQorY2hhciBcdTBDOTgJKDEyICAgNiAgKSAgIyDioKMg4LKYIFtLQU5OQURBIExFVFRFUiBHSEFdCitjaGFyIFx1MEM5OQkoICAzNCA2ICApICAjIOKgrCDgspkgW0tBTk5BREEgTEVUVEVSIE5HQV0KK2NoYXIgXHUwQzlBCSgxICA0ICAgICkgICMg4qCJIOCymiBbS0FOTkFEQSBMRVRURVIgQ0FdCitjaGFyIFx1MEM5QgkoMSAgICA2ICApICAjIOKgoSDgspsgW0tBTk5BREEgTEVUVEVSIENIQV0KK2NoYXIgXHUwQzlDCSggMiA0NSAgICkgICMg4qCaIOCynCBbS0FOTkFEQSBMRVRURVIgSkFdCitjaGFyIFx1MEM5RAkoICAzIDU2ICApICAjIOKgtCDgsp0gW0tBTk5BREEgTEVUVEVSIEpIQV0KK2NoYXIgXHUwQzlFCSggMiAgNSAgICkgICMg4qCSIOCyniBbS0FOTkFEQSBMRVRURVIgTllBXQorY2hhciBcdTBDOUYJKCAyMzQ1NiAgKSAgIyDioL4g4LKfIFtLQU5OQURBIExFVFRFUiBUVEFdCitjaGFyIFx1MENBMAkoIDIgNDU2ICApICAjIOKguiDgsqAgW0tBTk5BREEgTEVUVEVSIFRUSEFdCitjaGFyIFx1MENBMQkoMTIgNCA2ICApICAjIOKgqyDgsqEgW0tBTk5BREEgTEVUVEVSIEREQV0KK2NoYXIgXHUwQ0EyCSgxMjM0NTYgICkgICMg4qC/IOCyoiBbS0FOTkFEQSBMRVRURVIgRERIQV0KK2NoYXIgXHUwQ0EzCSggIDM0NTYgICkgICMg4qC8IOCyoyBbS0FOTkFEQSBMRVRURVIgTk5BXQorY2hhciBcdTBDQTQJKCAyMzQ1ICAgKSAgIyDioJ4g4LKkIFtLQU5OQURBIExFVFRFUiBUQV0KK2NoYXIgXHUwQ0E1CSgxICA0NTYgICkgICMg4qC5IOCypSBbS0FOTkFEQSBMRVRURVIgVEhBXQorY2hhciBcdTBDQTYJKDEgIDQ1ICAgKSAgIyDioJkg4LKmIFtLQU5OQURBIExFVFRFUiBEQV0KK2NoYXIgXHUwQ0E3CSggMjM0IDYgICkgICMg4qCuIOCypyBbS0FOTkFEQSBMRVRURVIgREhBXQorY2hhciBcdTBDQTgJKDEgMzQ1ICAgKSAgIyDioJ0g4LKoIFtLQU5OQURBIExFVFRFUiBOQV0KKworY2hhciBcdTBDQUEJKDEyMzQgICAgKSAgIyDioI8g4LKqIFtLQU5OQURBIExFVFRFUiBQQV0KK2NoYXIgXHUwQ0FCCSggMjMgNSAgICkgICMg4qCWIOCyqyBbS0FOTkFEQSBMRVRURVIgUEhBXQorY2hhciBcdTBDQUMJKDEyICAgICAgKSAgIyDioIMg4LKsIFtLQU5OQURBIExFVFRFUiBCQV0KK2NoYXIgXHUwQ0FECSggICA0NSAgICkgICMg4qCYIOCyrSBbS0FOTkFEQSBMRVRURVIgQkhBXQorY2hhciBcdTBDQUUJKDEgMzQgICAgKSAgIyDioI0g4LKuIFtLQU5OQURBIExFVFRFUiBNQV0KK2NoYXIgXHUwQ0FGCSgxIDM0NTYgICkgICMg4qC9IOCyryBbS0FOTkFEQSBMRVRURVIgWUFdCitjaGFyIFx1MENCMAkoMTIzIDUgICApICAjIOKglyDgsrAgW0tBTk5BREEgTEVUVEVSIFJBXQorY2hhciBcdTBDQjEJKDEyMyA1IDcgKSAgIyDioZcg4LKxIFtLQU5OQURBIExFVFRFUiBSUkFdCitjaGFyIFx1MENCMgkoMTIzICAgICApICAjIOKghyDgsrIgW0tBTk5BREEgTEVUVEVSIExBXQorY2hhciBcdTBDQjMJKDEyMyAgIDcgKSAgIyDioYcg4LKzIFtLQU5OQURBIExFVFRFUiBMTEFdCisKK2NoYXIgXHUwQ0I1CSgxMjMgIDYgICkgICMg4qCnIOCytSBbS0FOTkFEQSBMRVRURVIgVkFdCitjaGFyIFx1MENCNgkoMSAgNCA2ICApICAjIOKgqSDgsrYgW0tBTk5BREEgTEVUVEVSIFNIQV0KK2NoYXIgXHUwQ0I3CSgxMjM0IDYgICkgICMg4qCvIOCytyBbS0FOTkFEQSBMRVRURVIgU1NBXQorY2hhciBcdTBDQjgJKCAyMzQgICAgKSAgIyDioI4g4LK4IFtLQU5OQURBIExFVFRFUiBTQV0KK2NoYXIgXHUwQ0I5CSgxMiAgNSAgICkgICMg4qCTIOCyuSBbS0FOTkFEQSBMRVRURVIgSEFdCitjaGFyIFx1MENCRAkoIDIgICAgICApICAjIOKggiDgsr0gW0tBTk5BREEgU0lHTiBBVkFHUkFIQV0KK2NoYXIgXHUwQ0JFCSggIDM0NSAgICkgICMg4qCcIOCyviBbS0FOTkFEQSBWT1dFTCBTSUdOIEFBXQorY2hhciBcdTBDQkYJKCAyIDQgICAgKSAgIyDioIog4LK/IFtLQU5OQURBIFZPV0VMIFNJR04gSV0KK2NoYXIgXHUwQ0MwCSggIDMgNSAgICkgICMg4qCUIOCzgCBbS0FOTkFEQSBWT1dFTCBTSUdOIElJXQorY2hhciBcdTBDQzEJKDEgMyAgNiAgKSAgIyDioKUg4LOBIFtLQU5OQURBIFZPV0VMIFNJR04gVV0KK2NoYXIgXHUwQ0MyCSgxMiAgNTYgICkgICMg4qCzIOCzgiBbS0FOTkFEQSBWT1dFTCBTSUdOIFVVXQorCitjaGFyIFx1MENDNgkoICAzNCAgNyApICAjIOKhjCDgs4YgW0tBTk5BREEgVk9XRUwgU0lHTiBFXQorY2hhciBcdTBDQzcJKDEgICA1ICAgKSAgIyDioJEg4LOHIFtLQU5OQURBIFZPV0VMIFNJR04gRUVdCitjaGFyIFx1MENDOAkoICAzNCAgICApICAjIOKgjCDgs4ggW0tBTk5BREEgVk9XRUwgU0lHTiBBSV0KKworY2hhciBcdTBDQ0EJKCAyIDQgNjcgKSAgIyDioaog4LOKIFtLQU5OQURBIFZPV0VMIFNJR04gT10KK2NoYXIgXHUwQ0NCCSgxIDMgNSAgICkgICMg4qCVIOCziyBbS0FOTkFEQSBWT1dFTCBTSUdOIE9PXQorY2hhciBcdTBDQ0MJKCAyIDQgNiAgKSAgIyDioKog4LOMIFtLQU5OQURBIFZPV0VMIFNJR04gQVVdCitjaGFyIFx1MENDRAkoICAgNCAgICApICAjIOKgiCDgs40gW0tBTk5BREEgU0lHTiBWSVJBTUFdCisKK2NoYXIgXHUwQ0U2CSggMiA0NSAgICkgICMg4qCaIOCzpiBbS0FOTkFEQSBESUdJVCBaRVJPXQorY2hhciBcdTBDRTcJKDEgICAgICAgKSAgIyDioIEg4LOnIFtLQU5OQURBIERJR0lUIE9ORV0KK2NoYXIgXHUwQ0U4CSgxMiAgICAgICkgICMg4qCDIOCzqCBbS0FOTkFEQSBESUdJVCBUV09dCitjaGFyIFx1MENFOQkoMSAgNCAgICApICAjIOKgiSDgs6kgW0tBTk5BREEgRElHSVQgVEhSRUVdCitjaGFyIFx1MENFQQkoMSAgNDUgICApICAjIOKgmSDgs6ogW0tBTk5BREEgRElHSVQgRk9VUl0KK2NoYXIgXHUwQ0VCCSgxICAgNSAgICkgICMg4qCRIOCzqyBbS0FOTkFEQSBESUdJVCBGSVZFXQorY2hhciBcdTBDRUMJKDEyIDQgICAgKSAgIyDioIsg4LOsIFtLQU5OQURBIERJR0lUIFNJWF0KK2NoYXIgXHUwQ0VECSgxMiA0NSAgICkgICMg4qCbIOCzrSBbS0FOTkFEQSBESUdJVCBTRVZFTl0KK2NoYXIgXHUwQ0VFCSgxMiAgNSAgICkgICMg4qCTIOCzriBbS0FOTkFEQSBESUdJVCBFSUdIVF0KK2NoYXIgXHUwQ0VGCSggMiA0ICAgICkgICMg4qCKIOCzryBbS0FOTkFEQSBESUdJVCBOSU5FXQpkaWZmIC0tZ2l0IGEvVGFibGVzL1RleHQva2hhLnR0YiBiL1RhYmxlcy9UZXh0L2toYS50dGIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWQ5N2FjYwotLS0gL2Rldi9udWxsCisrKyBiL1RhYmxlcy9UZXh0L2toYS50dGIKQEAgLTAsMCArMSwyNCBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorIyAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyMKKyMgQ29weXJpZ2h0IChDKSAyMDA4LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorIworIyBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorIworIyBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisjIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyMgbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisjCisjIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMgQlJMVFRZIFRleHQgVGFibGUgLSBLaGFzaQorCitpbmNsdWRlIGJlbmdhbGkudHRpCitpbmNsdWRlIGFzY2lpLWJhc2ljLnR0aQorCitpbmNsdWRlIGNvbW1vbi50dGkKZGlmZiAtLWdpdCBhL1RhYmxlcy9UZXh0L2tuLnR0YiBiL1RhYmxlcy9UZXh0L2tuLnR0YgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YjM3NTgyCi0tLSAvZGV2L251bGwKKysrIGIvVGFibGVzL1RleHQva24udHRiCkBAIC0wLDAgKzEsMjQgQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyMgICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisjCisjIENvcHlyaWdodCAoQykgMjAwOC0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyMKKyMgQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjIEJSTFRUWSBUZXh0IFRhYmxlIC0gS2FubmFkYQorCitpbmNsdWRlIGthbm5hZGEudHRpCitpbmNsdWRlIGFzY2lpLWJhc2ljLnR0aQorCitpbmNsdWRlIGNvbW1vbi50dGkKZGlmZiAtLWdpdCBhL1RhYmxlcy9UZXh0L2tvay50dGIgYi9UYWJsZXMvVGV4dC9rb2sudHRiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBhMDQ5ZWEKLS0tIC9kZXYvbnVsbAorKysgYi9UYWJsZXMvVGV4dC9rb2sudHRiCkBAIC0wLDAgKzEsMjQgQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyMgICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisjCisjIENvcHlyaWdodCAoQykgMjAwOC0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyMKKyMgQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjIEJSTFRUWSBUZXh0IFRhYmxlIC0gS29ua2FuaQorCitpbmNsdWRlIGRldmFuYWdhcmkudHRpCitpbmNsdWRlIGFzY2lpLWJhc2ljLnR0aQorCitpbmNsdWRlIGNvbW1vbi50dGkKZGlmZiAtLWdpdCBhL1RhYmxlcy9UZXh0L2tydS50dGIgYi9UYWJsZXMvVGV4dC9rcnUudHRiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUzNWEwMDgKLS0tIC9kZXYvbnVsbAorKysgYi9UYWJsZXMvVGV4dC9rcnUudHRiCkBAIC0wLDAgKzEsMjQgQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyMgICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisjCisjIENvcHlyaWdodCAoQykgMjAwOC0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyMKKyMgQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjIEJSTFRUWSBUZXh0IFRhYmxlIC0gS3VydWtoCisKK2luY2x1ZGUgZGV2YW5hZ2FyaS50dGkKK2luY2x1ZGUgYXNjaWktYmFzaWMudHRpCisKK2luY2x1ZGUgY29tbW9uLnR0aQpkaWZmIC0tZ2l0IGEvVGFibGVzL1RleHQvbHQudHRiIGIvVGFibGVzL1RleHQvbHQudHRiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI1ODA0MzMKLS0tIC9kZXYvbnVsbAorKysgYi9UYWJsZXMvVGV4dC9sdC50dGIKQEAgLTAsMCArMSwxODMgQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyMgICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisjCisjIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyMKKyMgQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjIEJSTFRUWSBUZXh0IFRhYmxlIC0gTGl0dWFuaWFuCisjCisjIENvcHlyaWdodCAoQykgMjAxNyBSaW1hcyBLdWRlbGlzIDxycUBha2wubHQ+CisjCisjIFRoZSBMaXRodWFuaWFuIDgtZG90IEJyYWlsbGUgd3JpdGluZyBzeXN0ZW0gaXMgZGVzY3JpYmVkIGluIGEgZGVjcmVlIG9mIHRoZSBNaW5pc3RlciBvZgorIyBTb2NpYWwgU2VjdXJpdHkgYW5kIExhYm9yLCBjYWxsZWQgIkTEl2wgdmllbmluZ29zIGHFoXR1b25pxbMgdGHFoWvFsyBCcmFpbGlvIHJhxaF0byBzaXN0ZW1vcworIyBuYXVkb2ppbW8gdHZhcmtvcyBhcHJhxaFvIHBhdHZpcnRpbmltbyIsIHdoaWNoIGlzIGluIGVmZmVjdCBzaW5jZSAyMDExLTA0LTEzLiBEb2N1bWVudAorIyBudW1iZXIgaXMgQTEtMTgzLiBBdCB0aGUgdGltZSBvZiB3cml0aW5nIHRoaXMgZmlsZSwgdGhlIGRvY3VtZW50IHdhcyBhY2Nlc3NpYmxlIGF0CisjIGh0dHBzOi8vd3d3LmUtdGFyLmx0L3BvcnRhbC9sdC9sZWdhbEFjdC9UQVIuNDQzRDY2N0NBMDQ3IC4KKyMgVGhlIGRvY3VtZW50IGlzIHJlZmVycmVkIHRvIGFzICJ0aGUgc3RhbmRhcmQiIGJlbG93LgorIworIyBUaGUgc3RhbmRhcmQgbWFwcyBJU08tODg1OS0xMyBjaGFyYWN0ZXIgc2V0IHRvIDgtZG90IEJyYWlsbGUgd3JpdGluZyBzeXN0ZW0uIEhvd2V2ZXIsCisjIGV2ZW4gdGhvdWdoIGl0IGRlZmluZXMgZGlmZmVyZW50IG1hcHBpbmdzIGZvciBsaXRlcmFyeSBhbmQgY29tcHV0ZXIgYnJhaWxsZSBtb2RlcywgaXQKKyMgZG9lc24ndCBzZWVtIGxpa2UgdGhlIGF1dGhvcnMgaGFkIGEgZ29vZCB1bmRlcnN0YW5kaW5nIG9mIHdoeSB0aGVzZSB0d28gbW9kZXMgZXhpc3QKKyMgYW5kIGhvdyB0aGV5IGRpZmZlci4gRnVydGhlcm1vcmUsIHRoZSBzdGFuZGFyZCBjb250YWlucyBhIGZldyBlcnJvcnMgKGluY29ycmVjdGx5IG5hbWVkCisjIGNoYXJhY3RlcnMgYXMgd2VsbCBhcyBtYXBwaW5nIGNvbmZsaWN0cykuIEkgd291bGQgc2F5IGl0IG5lZWRzIGZ1cnRoZXIgaW1wcm92ZW1lbnRzLgorIworIyBUaGlzIGZpbGUgaXMgYmFzZWQgb24gdGhlIHN0YW5kYXJkLCBidXQgZG9lcyBub3QgZXhhY3RseSBmb2xsb3cgaXQuIFNvbWUgc3RhbmRhcmQKKyMgZGVmaW5pdGlvbnMgYXJlIGNvbW1lbnRlZCBvdXQsIHNvbWUgY2hhbmdlZCwgYW5kIHNvbWUgZXh0cmEgb25lcyBhcmUgYWRkZWQuCisjCisjIFRoaXMgdGFibGUgaXMgYmFzZWQgb24gdGhlIHJlc3BlY3RpdmUgbGlibG91aXMgdGFibGUuCisKKworIyMjCisjIyMgTEVUVEVSUworIyMjCisKKyMgU3RhbmRhcmQgcmVwcmVzZW50YXRpb25zIGZvciB0aGUgbGV0dGVycyBvZiB0aGUgTGF0aW4gYWxwaGFiZXQKK2luY2x1ZGUgbHRyLWxhdGluLnR0aQorCisjIExvd2VyY2FzZSBhY2NlbnRlZCBsZXR0ZXJzCitjaGFyIFx1MDEwNQkoMSAgICA2ICApICAjIOKgoSDEhSBbTEFUSU4gU01BTEwgTEVUVEVSIEEgV0lUSCBPR09ORUtdCitjaGFyIFx1MDEwRAkoMSAgNCA2ICApICAjIOKgqSDEjSBbTEFUSU4gU01BTEwgTEVUVEVSIEMgV0lUSCBDQVJPTl0KK2NoYXIgXHUwMTE5CSgxICAgNTYgICkgICMg4qCxIMSZIFtMQVRJTiBTTUFMTCBMRVRURVIgRSBXSVRIIE9HT05FS10KK2NoYXIgXHUwMTE3CSggIDM0NSAgICkgICMg4qCcIMSXIFtMQVRJTiBTTUFMTCBMRVRURVIgRSBXSVRIIERPVCBBQk9WRV0KK2NoYXIgXHUwMTJGCSggMiA0IDYgICkgICMg4qCqIMSvIFtMQVRJTiBTTUFMTCBMRVRURVIgSSBXSVRIIE9HT05FS10KK2NoYXIgXHUwMTYxCSggMjM0IDYgICkgICMg4qCuIMWhIFtMQVRJTiBTTUFMTCBMRVRURVIgUyBXSVRIIENBUk9OXQorY2hhciBcdTAxNzMJKCAgMzQgNiAgKSAgIyDioKwgxbMgW0xBVElOIFNNQUxMIExFVFRFUiBVIFdJVEggT0dPTkVLXQorY2hhciBcdTAxNkIJKDEyICA1NiAgKSAgIyDioLMgxasgW0xBVElOIFNNQUxMIExFVFRFUiBVIFdJVEggTUFDUk9OXQorY2hhciBcdTAxN0UJKDEyICAgNiAgKSAgIyDioKMgxb4gW0xBVElOIFNNQUxMIExFVFRFUiBaIFdJVEggTUFDUk9OXQorCisjIFVwcGVyY2FzZSBhY2NlbnRlZCBsZXR0ZXJzCitjaGFyIFx1MDEwNAkoMSAgICA2NyApICAjIOKhoSDEhCBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgQSBXSVRIIE9HT05FS10KK2NoYXIgXHUwMTBDCSgxICA0IDY3ICkgICMg4qGpIMSMIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBDIFdJVEggQ0FST05dCitjaGFyIFx1MDExOAkoMSAgIDU2NyApICAjIOKhsSDEmCBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgRSBXSVRIIE9HT05FS10KK2NoYXIgXHUwMTE2CSggIDM0NSA3ICkgICMg4qGcIMSWIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBFIFdJVEggRE9UIEFCT1ZFXQorY2hhciBcdTAxMkUJKCAyIDQgNjcgKSAgIyDioaogxK4gW0xBVElOIENBUElUQUwgTEVUVEVSIEkgV0lUSCBPR09ORUtdCitjaGFyIFx1MDE2MAkoIDIzNCA2NyApICAjIOKhriDFoCBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgUyBXSVRIIENBUk9OXQorY2hhciBcdTAxNzIJKCAgMzQgNjcgKSAgIyDioawgxbIgW0xBVElOIENBUElUQUwgTEVUVEVSIFUgV0lUSCBPR09ORUtdCitjaGFyIFx1MDE2QQkoMTIgIDU2NyApICAjIOKhsyDFqiBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgVSBXSVRIIE1BQ1JPTl0KK2NoYXIgXHUwMTdECSgxMiAgIDY3ICkgICMg4qGjIMW9IFtMQVRJTiBDQVBJVEFMIExFVFRFUiBaIFdJVEggQ0FST05dCisKKworIyMjCisjIyMgRElHSVRTCisjIyMKKworIyBEaWdpdHMgMC05IGFyZSByZXByZXNlbnRlZCBieSB0aGUgbGV0dGVycyBqLGEtaSB3aXRoIGRvdCA4IGFkZGVkCitpbmNsdWRlIG51bS1kb3Q4LnR0aQorCisKKyMjIworIyMjIFBVTkNUVUFUSU9OCisjIyMKKworY2hhciBceDJDCSggMiAgICAgICkgICMg4qCCICwgW0NPTU1BXQorY2hhciBceDJFCSggMiAgNTYgICkgICMg4qCyIC4gW0ZVTEwgU1RPUF0KK2NoYXIgXHgzRgkoIDIgICA2ICApICAjIOKgoiA/IFtRVUVTVElPTiBNQVJLXQorY2hhciBceDIxCSggMjMgNSAgICkgICMg4qCWICEgW0VYQ0xBTUFUSU9OIE1BUktdCitjaGFyIFx4M0EJKCAyICA1ICAgKSAgIyDioJIgOiBbQ09MT05dCitjaGFyIFx4M0IJKCAyMyAgICAgKSAgIyDioIYgOyBbU0VNSUNPTE9OXQorY2hhciBceDIyCSggICA0ICAgICkgICMg4qCIICIgW1FVT1RBVElPTiBNQVJLXQorY2hhciBceDI3CSggIDMgICAgICkgICMg4qCEICcgW0FQT1NUUk9QSEVdCisjIFRoZSBmb2xsb3dpbmcgY2hhcmFjdGVyIGlzIGRlZmluZWQgYXMgMTM0NTY4IGluIHRoZSBzdGFuZGFyZCwgYnV0IHRoYXQgaXMgaGFyZGx5IHVzZWZ1bC4KKyMgQWNjb3JkaW5nIHRvIFVuaWNvZGUsIGl0IGlzIHRoZSBwcmVmZXJyZWQgY2hhcmFjdGVyIHRvIHVzZSBmb3IgYXBvc3Ryb3BoZSwgaGVuY2UKKyMgZGVmaW5pbmcgaXQgYXMgb25lIGhlcmUuCithbGlhcyBcdTIwMTkJXHgyNyAgICAgICAgIyAgIOKAmSBbUklHSFQgU0lOR0xFIFFVT1RBVElPTiBNQVJLXQorCitjaGFyIFx4MjgJKCAyMyA1NjcgKSAgIyDiobYgKCBbTEVGVCBQQVJFTlRIRVNJU10KK2NoYXIgXHgyOQkoIDIzIDU2IDgpICAjIOKitiApIFtSSUdIVCBQQVJFTlRIRVNJU10KK2NoYXIgXHg1QgkoMTIzIDU2ICApICAjIOKgtyBbIExFRlQgU1FVQVJFIEJSQUNLRVQKK2NoYXIgXHg1RAkoIDIzNDU2ICApICAjIOKgviBdIFJJR0hUIFNRVUFSRSBCUkFDS0VUCitjaGFyIFx4N0IJKCAyIDQgNjc4KSAgIyDio6ogeyBMRUZUIENVUkxZIEJSQUNLRVQKK2NoYXIgXHg3RAkoMSAzIDUgNzgpICAjIOKjlSB9IFJJR0hUIENVUkxZIEJSQUNLRVQKKworY2hhciBceDJECSggIDMgIDYgICkgICMg4qCkIC0gW0hZUEhFTi1NSU5VU10KKyMgU29mdCBoeXBoZW4gaXMgZGVmaW5lZCBhcyAzNjggaW4gdGhlIHN0YW5kYXJkLgorY2hhciBceEFECSggIDMgIDYgOCkgICMg4qKkIMKtIFtTT0ZUIEhZUEhFTl0KKworIyBUaGUgZm9sbG93aW5nIGNoYXJhY3RlcnMgYXJlIG5vdCBkZWZpbmVkIGluIHRoZSBzdGFuZGFyZC4KKworIyBUaGVzZSBhcmUgdGhlIHR5cG9ncmFwaGljYWxseSBjb3JyZWN0IHF1b3RlcyBpbiBMaXRodWFuaWFuIHRleHRzLgorY2hhciBcdTIwMUUJKCAyMyAgNjcgKSAgIyDioaYg4oCeIFtET1VCTEUgTE9XLTkgUVVPVEFUSU9OIE1BUktdCitjaGFyIFx1MjAxQwkoICAzIDU2NyApICAjIOKhtCDigJwgW0xFRlQgRE9VQkxFIFFVT1RBVElPTiBNQVJLXQorIyBUaGUgZm9sbG93aW5nIGNoYXJhY3RlcnMgYXJlIGRlZmluZWQgaW4gdGhlIHN0YW5kYXJkLCBiZWNhdXNlIHRoZXkgZXhpc3QgaW4gSVNPLTg4NTktMTMKKyMgY2hhcmFjdGVyIHNldCwgZXZlbiB0aG91Z2ggdGhleSBzaG91bGQgbm90IGJlIHVzZWQgaW4gTGl0aHVhbmlhbiB0ZXh0cy4KK2NoYXIgXHUyMDFECSggIDMgIDY3ICkgICMg4qGkIOKAnSBbUklHSFQgRE9VQkxFIFFVT1RBVElPTiBNQVJLXQorY2hhciBceEFCCSggICAgNTY3OCkgICMg4qOwIMKrIFtMRUZULVBPSU5USU5HIERPVUJMRSBBTkdMRSBRVU9UQVRJT04gTUFSS10KK2NoYXIgXHhCQgkoICAgNDUgNzgpICAjIOKjmCDCuyBbUklHSFQtUE9JTlRJTkcgRE9VQkxFIEFOR0xFIFFVT1RBVElPTiBNQVJLXQorCisKKyMjIworIyMjIE1BVEhFTUFUSUNBTCBTWU1CT0xTCisjIyMKKworY2hhciBceDJCCSggMjMgNSAgOCkgICMg4qKWICsgW1BMVVMgU0lHTl0KKyMgUmVhbCBtaW51cyBpcyBub3QgZGVmaW5lZCBpbiB0aGUgc3RhbmRhcmQuCitjaGFyIFx4M0MJKCAyIDQgNiA4KSAgIyDioqogPCBbTEVTUy1USEFOIFNJR05dCitjaGFyIFx4M0QJKCAyMyA1NiAgKSAgIyDioLYgPSBbRVFVQUxTIFNJR05dCitjaGFyIFx4M0UJKDEgMyA1ICA4KSAgIyDiopUgPiBbR1JFQVRFUi1USEFOIFNJR05dCitjaGFyIFx4QjEJKCAyMyA1IDc4KSAgIyDio5YgwrEgW1BMVVMtTUlOVVMgU0lHTl0KK2NoYXIgXHhENwkoIDIzNCAgIDgpICAjIOKijiDDlyBNVUxUSVBMSUNBVElPTiBTSUdOXQorY2hhciBceEY3CSgxMiAgNTY3OCkgICMg4qOzIMO3IFtESVZJU0lPTiBTSUdOXQorCisKKyMjIworIyMjIE9USEVSIENIQVJBQ1RFUlMKKyMjIworCitjaGFyIFx4MjMJKCAgMzQ1NiAgKSAgIyDioLwgIyBbTlVNQkVSIFNJR05dCitjaGFyIFx4MjQJKCAgIDQgNiAgKSAgIyDioKggJCBbRE9MTEFSIFNJR05dCitjaGFyIFx4MjUJKDEyMzQ1NiAgKSAgIyDioL8gJSBbUEVSQ0VOVCBTSUdOXQorY2hhciBceDI2CSgxMjM0IDYgICkgICMg4qCvICYgW0FNUEVSU0FORF0KK2NoYXIgXHgyQQkoICAzIDUgICApICAjIOKglCAqIFtBU1RFUklTS10KK2NoYXIgXHgyRgkoICAzNCAgICApICAjIOKgjCAvIFtTT0xJRFVTXQorY2hhciBceDQwCSggIDM0NSA3OCkgICMg4qOcIEAgW0NPTU1FUkNJQUwgQVRdCitjaGFyIFx4NUMJKCAgMzQgIDcgKSAgIyDioYwgXCBbUkVWRVJTRSBTT0xJRFVTXQorY2hhciBceDVFCSggMiAgNTYgOCkgICMg4qKyIF4gW0NJUkNVTUZMRVggQUNDRU5UXQorY2hhciBceDVGCSggICA0NTY3ICkgICMg4qG4IF8gW0xPVyBMSU5FXQorY2hhciBceDdDCSggICA0NTYgICkgICMg4qC4IHwgW1ZFUlRJQ0FMIExJTkVdCitjaGFyIFx4QTYJKDEgIDQ1NiAgKSAgIyDioLkgwqYgW0JST0tFTiBCQVJdCitjaGFyIFx4QTcJKCAgMzQgNiA4KSAgIyDioqwgwqcgW1NFQ1RJT04gU0lHTl0KK2NoYXIgXHhBQwkoICAgIDUgICApICAjIOKgkCDCrCBbTk9UIFNJR05dCitjaGFyIFx4QjUJKDEgMzQgICA4KSAgIyDioo0gwrUgW01JQ1JPIFNJR05dCitjaGFyIFx4QjYJKDEyMzQgICA4KSAgIyDioo8gwrYgW1BJTENST1cgU0lHTl0KKworY2hhciBceDYwCSggICAgIDYgICkgICMg4qCgIGAgW0dSQVZFIEFDQ0VOVF0KK2NoYXIgXHg3RQkoIDIgICA2IDgpICAjIOKioiB+IFtUSUxERV0KKworY2hhciBceEEyCSggICAgNSAgOCkgICMg4qKQIMKiIFtDRU5UIFNJR05dCitjaGFyIFx4QTMJKCAgIDQgNjcgKSAgIyDioaggwqMgW1BPVU5EIFNJR05dCisjIEV1cm8gc2lnbiBpcyBub3QgZGVmaW5lZCBpbiB0aGUgc3RhbmRhcmQsIGJ1dCBjb2RlcG9pbnQgMHg4MCBvZiBJU08tODg1OS0xMyBpcy4KKyMgSW4gV2luZG93cy0xMjU3LCAweDgwIGlzIHRoZSBFdXJvIHNpZ24uCisjIFRoZSB1bm9mZmljaWFsbHkgZGlzdHJpYnV0ZWQgTGl0aHVhbmlhbiBKQVdTIHRhYmxlIHNwZWNpZmllZCBhbGwgY2hhcmFjdGVycyBhcworIyBBTlNJIGNvZGVzLCB0aHVzIHJlbmRlcmluZyBFdXJvIGFzIDQ1Ny4KKyMgTm90IHN1cmUgaWYgSSB3YW50IHRvIHJlcGxpY2F0ZSB0aGF0IGhlcmUgdGhvdWdoOiB3aG8ga25vd3MgaG93IHRoaXMgdGFibGUgd2lsbAorIyBlbmQgdXAgYmVpbmcgdXNlZCBhbmQgZm9yIGhvdyBsb25nLiBBbGlhc2luZyB0byBFIGluc3RlYWQuCisjIGNoYXIgXHUyMEFDCSggICA0NSA3ICkgICMg4qGYIOKCrCBbRVVSTyBTSUdOXQorYWxpYXMgXHUyMEFDCVx4NDUgICAgICAgICMgICDigqwgW0VVUk8gU0lHTl0KKworY2hhciBceEE0CSggICA0IDY3OCkgICMg4qOoIMKkIFtDVVJSRU5DWSBTSUdOXQorCitjaGFyIFx4QTkJKDEyMzQgNiA4KSAgIyDioq8gwqkgQ09QWVJJR0hUIFNJR04KK2NoYXIgXHhBRQkoMTIzIDUgIDgpICAjIOKilyDCriBbUkVHSVNURVJFRCBTSUdOXQorCisjIE1pZGRsZSBkb3QgaXMgdW5saWtlbHkgdG8gYXBwZWFyIGluIHRleHQsIGV4Y2VwdCBwZXJoYXBzIGFzIGEgbXVsdGlwbGljYXRpb24gc2lnbiAoZG90IG9wZXJhdG9yKS4KK2NoYXIgXHhCNwkoICAzICAgNyApICAjIOKhhCDCtyBbTUlERExFIERPVF0KKworY2hhciBceEIwCSggICA0NTYgOCkgICMg4qK4IMKwIFtERUdSRUUgU0lHTl0KKworY2hhciBceEI5CSgxICAgICA3OCkgICMg4qOBIMK5IFtTVVBFUlNDUklQVCBPTkVdCitjaGFyIFx4QjIJKDEyICAgIDc4KSAgIyDio4MgwrIgW1NVUEVSU0NSSVBUIFRXT10KK2NoYXIgXHhCMwkoMSAgNCAgNzgpICAjIOKjiSDCsyBbU1VQRVJTQ1JJUFQgVEhSRUVdCisKK2luY2x1ZGUgY29tbW9uLnR0aQpkaWZmIC0tZ2l0IGEvVGFibGVzL1RleHQvbHRyLWFsaWFzLnR0aSBiL1RhYmxlcy9UZXh0L2x0ci1hbGlhcy50dGkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2Q0ZTQxNgotLS0gL2Rldi9udWxsCisrKyBiL1RhYmxlcy9UZXh0L2x0ci1hbGlhcy50dGkKQEAgLTAsMCArMSw5NjQgQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyMgICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisjCisjIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyMKKyMgQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjIFRoaXMgQlJMVFRZIHRleHQgc3VidGFibGUgZGVmaW5lcyBhbGlhc2VzIGZvciBhZGRpdGlvbmFsIExhdGluIGFscGhhYmV0IHN0eWxlcy4KKworYWxpYXMJXHUyNDlDCVx4NjEJIyDikpwgW1BBUkVOVEhFU0laRUQgTEFUSU4gU01BTEwgTEVUVEVSIEFdCithbGlhcwlcdTI0OUQJXHg2MgkjIOKSnSBbUEFSRU5USEVTSVpFRCBMQVRJTiBTTUFMTCBMRVRURVIgQl0KK2FsaWFzCVx1MjQ5RQlceDYzCSMg4pKeIFtQQVJFTlRIRVNJWkVEIExBVElOIFNNQUxMIExFVFRFUiBDXQorYWxpYXMJXHUyNDlGCVx4NjQJIyDikp8gW1BBUkVOVEhFU0laRUQgTEFUSU4gU01BTEwgTEVUVEVSIERdCithbGlhcwlcdTI0QTAJXHg2NQkjIOKSoCBbUEFSRU5USEVTSVpFRCBMQVRJTiBTTUFMTCBMRVRURVIgRV0KK2FsaWFzCVx1MjRBMQlceDY2CSMg4pKhIFtQQVJFTlRIRVNJWkVEIExBVElOIFNNQUxMIExFVFRFUiBGXQorYWxpYXMJXHUyNEEyCVx4NjcJIyDikqIgW1BBUkVOVEhFU0laRUQgTEFUSU4gU01BTEwgTEVUVEVSIEddCithbGlhcwlcdTI0QTMJXHg2OAkjIOKSoyBbUEFSRU5USEVTSVpFRCBMQVRJTiBTTUFMTCBMRVRURVIgSF0KK2FsaWFzCVx1MjRBNAlceDY5CSMg4pKkIFtQQVJFTlRIRVNJWkVEIExBVElOIFNNQUxMIExFVFRFUiBJXQorYWxpYXMJXHUyNEE1CVx4NkEJIyDikqUgW1BBUkVOVEhFU0laRUQgTEFUSU4gU01BTEwgTEVUVEVSIEpdCithbGlhcwlcdTI0QTYJXHg2QgkjIOKSpiBbUEFSRU5USEVTSVpFRCBMQVRJTiBTTUFMTCBMRVRURVIgS10KK2FsaWFzCVx1MjRBNwlceDZDCSMg4pKnIFtQQVJFTlRIRVNJWkVEIExBVElOIFNNQUxMIExFVFRFUiBMXQorYWxpYXMJXHUyNEE4CVx4NkQJIyDikqggW1BBUkVOVEhFU0laRUQgTEFUSU4gU01BTEwgTEVUVEVSIE1dCithbGlhcwlcdTI0QTkJXHg2RQkjIOKSqSBbUEFSRU5USEVTSVpFRCBMQVRJTiBTTUFMTCBMRVRURVIgTl0KK2FsaWFzCVx1MjRBQQlceDZGCSMg4pKqIFtQQVJFTlRIRVNJWkVEIExBVElOIFNNQUxMIExFVFRFUiBPXQorYWxpYXMJXHUyNEFCCVx4NzAJIyDikqsgW1BBUkVOVEhFU0laRUQgTEFUSU4gU01BTEwgTEVUVEVSIFBdCithbGlhcwlcdTI0QUMJXHg3MQkjIOKSrCBbUEFSRU5USEVTSVpFRCBMQVRJTiBTTUFMTCBMRVRURVIgUV0KK2FsaWFzCVx1MjRBRAlceDcyCSMg4pKtIFtQQVJFTlRIRVNJWkVEIExBVElOIFNNQUxMIExFVFRFUiBSXQorYWxpYXMJXHUyNEFFCVx4NzMJIyDikq4gW1BBUkVOVEhFU0laRUQgTEFUSU4gU01BTEwgTEVUVEVSIFNdCithbGlhcwlcdTI0QUYJXHg3NAkjIOKSryBbUEFSRU5USEVTSVpFRCBMQVRJTiBTTUFMTCBMRVRURVIgVF0KK2FsaWFzCVx1MjRCMAlceDc1CSMg4pKwIFtQQVJFTlRIRVNJWkVEIExBVElOIFNNQUxMIExFVFRFUiBVXQorYWxpYXMJXHUyNEIxCVx4NzYJIyDikrEgW1BBUkVOVEhFU0laRUQgTEFUSU4gU01BTEwgTEVUVEVSIFZdCithbGlhcwlcdTI0QjIJXHg3NwkjIOKSsiBbUEFSRU5USEVTSVpFRCBMQVRJTiBTTUFMTCBMRVRURVIgV10KK2FsaWFzCVx1MjRCMwlceDc4CSMg4pKzIFtQQVJFTlRIRVNJWkVEIExBVElOIFNNQUxMIExFVFRFUiBYXQorYWxpYXMJXHUyNEI0CVx4NzkJIyDikrQgW1BBUkVOVEhFU0laRUQgTEFUSU4gU01BTEwgTEVUVEVSIFldCithbGlhcwlcdTI0QjUJXHg3QQkjIOKStSBbUEFSRU5USEVTSVpFRCBMQVRJTiBTTUFMTCBMRVRURVIgWl0KKworYWxpYXMJXHUyNEI2CVx4NDEJIyDikrYgW0NJUkNMRUQgTEFUSU4gQ0FQSVRBTCBMRVRURVIgQV0KK2FsaWFzCVx1MjRCNwlceDQyCSMg4pK3IFtDSVJDTEVEIExBVElOIENBUElUQUwgTEVUVEVSIEJdCithbGlhcwlcdTI0QjgJXHg0MwkjIOKSuCBbQ0lSQ0xFRCBMQVRJTiBDQVBJVEFMIExFVFRFUiBDXQorYWxpYXMJXHUyNEI5CVx4NDQJIyDikrkgW0NJUkNMRUQgTEFUSU4gQ0FQSVRBTCBMRVRURVIgRF0KK2FsaWFzCVx1MjRCQQlceDQ1CSMg4pK6IFtDSVJDTEVEIExBVElOIENBUElUQUwgTEVUVEVSIEVdCithbGlhcwlcdTI0QkIJXHg0NgkjIOKSuyBbQ0lSQ0xFRCBMQVRJTiBDQVBJVEFMIExFVFRFUiBGXQorYWxpYXMJXHUyNEJDCVx4NDcJIyDikrwgW0NJUkNMRUQgTEFUSU4gQ0FQSVRBTCBMRVRURVIgR10KK2FsaWFzCVx1MjRCRAlceDQ4CSMg4pK9IFtDSVJDTEVEIExBVElOIENBUElUQUwgTEVUVEVSIEhdCithbGlhcwlcdTI0QkUJXHg0OQkjIOKSviBbQ0lSQ0xFRCBMQVRJTiBDQVBJVEFMIExFVFRFUiBJXQorYWxpYXMJXHUyNEJGCVx4NEEJIyDikr8gW0NJUkNMRUQgTEFUSU4gQ0FQSVRBTCBMRVRURVIgSl0KK2FsaWFzCVx1MjRDMAlceDRCCSMg4pOAIFtDSVJDTEVEIExBVElOIENBUElUQUwgTEVUVEVSIEtdCithbGlhcwlcdTI0QzEJXHg0QwkjIOKTgSBbQ0lSQ0xFRCBMQVRJTiBDQVBJVEFMIExFVFRFUiBMXQorYWxpYXMJXHUyNEMyCVx4NEQJIyDik4IgW0NJUkNMRUQgTEFUSU4gQ0FQSVRBTCBMRVRURVIgTV0KK2FsaWFzCVx1MjRDMwlceDRFCSMg4pODIFtDSVJDTEVEIExBVElOIENBUElUQUwgTEVUVEVSIE5dCithbGlhcwlcdTI0QzQJXHg0RgkjIOKThCBbQ0lSQ0xFRCBMQVRJTiBDQVBJVEFMIExFVFRFUiBPXQorYWxpYXMJXHUyNEM1CVx4NTAJIyDik4UgW0NJUkNMRUQgTEFUSU4gQ0FQSVRBTCBMRVRURVIgUF0KK2FsaWFzCVx1MjRDNglceDUxCSMg4pOGIFtDSVJDTEVEIExBVElOIENBUElUQUwgTEVUVEVSIFFdCithbGlhcwlcdTI0QzcJXHg1MgkjIOKThyBbQ0lSQ0xFRCBMQVRJTiBDQVBJVEFMIExFVFRFUiBSXQorYWxpYXMJXHUyNEM4CVx4NTMJIyDik4ggW0NJUkNMRUQgTEFUSU4gQ0FQSVRBTCBMRVRURVIgU10KK2FsaWFzCVx1MjRDOQlceDU0CSMg4pOJIFtDSVJDTEVEIExBVElOIENBUElUQUwgTEVUVEVSIFRdCithbGlhcwlcdTI0Q0EJXHg1NQkjIOKTiiBbQ0lSQ0xFRCBMQVRJTiBDQVBJVEFMIExFVFRFUiBVXQorYWxpYXMJXHUyNENCCVx4NTYJIyDik4sgW0NJUkNMRUQgTEFUSU4gQ0FQSVRBTCBMRVRURVIgVl0KK2FsaWFzCVx1MjRDQwlceDU3CSMg4pOMIFtDSVJDTEVEIExBVElOIENBUElUQUwgTEVUVEVSIFddCithbGlhcwlcdTI0Q0QJXHg1OAkjIOKTjSBbQ0lSQ0xFRCBMQVRJTiBDQVBJVEFMIExFVFRFUiBYXQorYWxpYXMJXHUyNENFCVx4NTkJIyDik44gW0NJUkNMRUQgTEFUSU4gQ0FQSVRBTCBMRVRURVIgWV0KK2FsaWFzCVx1MjRDRglceDVBCSMg4pOPIFtDSVJDTEVEIExBVElOIENBUElUQUwgTEVUVEVSIFpdCisKK2FsaWFzCVx1MjREMAlceDYxCSMg4pOQIFtDSVJDTEVEIExBVElOIFNNQUxMIExFVFRFUiBBXQorYWxpYXMJXHUyNEQxCVx4NjIJIyDik5EgW0NJUkNMRUQgTEFUSU4gU01BTEwgTEVUVEVSIEJdCithbGlhcwlcdTI0RDIJXHg2MwkjIOKTkiBbQ0lSQ0xFRCBMQVRJTiBTTUFMTCBMRVRURVIgQ10KK2FsaWFzCVx1MjREMwlceDY0CSMg4pOTIFtDSVJDTEVEIExBVElOIFNNQUxMIExFVFRFUiBEXQorYWxpYXMJXHUyNEQ0CVx4NjUJIyDik5QgW0NJUkNMRUQgTEFUSU4gU01BTEwgTEVUVEVSIEVdCithbGlhcwlcdTI0RDUJXHg2NgkjIOKTlSBbQ0lSQ0xFRCBMQVRJTiBTTUFMTCBMRVRURVIgRl0KK2FsaWFzCVx1MjRENglceDY3CSMg4pOWIFtDSVJDTEVEIExBVElOIFNNQUxMIExFVFRFUiBHXQorYWxpYXMJXHUyNEQ3CVx4NjgJIyDik5cgW0NJUkNMRUQgTEFUSU4gU01BTEwgTEVUVEVSIEhdCithbGlhcwlcdTI0RDgJXHg2OQkjIOKTmCBbQ0lSQ0xFRCBMQVRJTiBTTUFMTCBMRVRURVIgSV0KK2FsaWFzCVx1MjREOQlceDZBCSMg4pOZIFtDSVJDTEVEIExBVElOIFNNQUxMIExFVFRFUiBKXQorYWxpYXMJXHUyNERBCVx4NkIJIyDik5ogW0NJUkNMRUQgTEFUSU4gU01BTEwgTEVUVEVSIEtdCithbGlhcwlcdTI0REIJXHg2QwkjIOKTmyBbQ0lSQ0xFRCBMQVRJTiBTTUFMTCBMRVRURVIgTF0KK2FsaWFzCVx1MjREQwlceDZECSMg4pOcIFtDSVJDTEVEIExBVElOIFNNQUxMIExFVFRFUiBNXQorYWxpYXMJXHUyNERECVx4NkUJIyDik50gW0NJUkNMRUQgTEFUSU4gU01BTEwgTEVUVEVSIE5dCithbGlhcwlcdTI0REUJXHg2RgkjIOKTniBbQ0lSQ0xFRCBMQVRJTiBTTUFMTCBMRVRURVIgT10KK2FsaWFzCVx1MjRERglceDcwCSMg4pOfIFtDSVJDTEVEIExBVElOIFNNQUxMIExFVFRFUiBQXQorYWxpYXMJXHUyNEUwCVx4NzEJIyDik6AgW0NJUkNMRUQgTEFUSU4gU01BTEwgTEVUVEVSIFFdCithbGlhcwlcdTI0RTEJXHg3MgkjIOKToSBbQ0lSQ0xFRCBMQVRJTiBTTUFMTCBMRVRURVIgUl0KK2FsaWFzCVx1MjRFMglceDczCSMg4pOiIFtDSVJDTEVEIExBVElOIFNNQUxMIExFVFRFUiBTXQorYWxpYXMJXHUyNEUzCVx4NzQJIyDik6MgW0NJUkNMRUQgTEFUSU4gU01BTEwgTEVUVEVSIFRdCithbGlhcwlcdTI0RTQJXHg3NQkjIOKTpCBbQ0lSQ0xFRCBMQVRJTiBTTUFMTCBMRVRURVIgVV0KK2FsaWFzCVx1MjRFNQlceDc2CSMg4pOlIFtDSVJDTEVEIExBVElOIFNNQUxMIExFVFRFUiBWXQorYWxpYXMJXHUyNEU2CVx4NzcJIyDik6YgW0NJUkNMRUQgTEFUSU4gU01BTEwgTEVUVEVSIFddCithbGlhcwlcdTI0RTcJXHg3OAkjIOKTpyBbQ0lSQ0xFRCBMQVRJTiBTTUFMTCBMRVRURVIgWF0KK2FsaWFzCVx1MjRFOAlceDc5CSMg4pOoIFtDSVJDTEVEIExBVElOIFNNQUxMIExFVFRFUiBZXQorYWxpYXMJXHUyNEU5CVx4N0EJIyDik6kgW0NJUkNMRUQgTEFUSU4gU01BTEwgTEVUVEVSIFpdCisKK2FsaWFzCVx1RkYyMQlceDQxCSMg77yhIFtGVUxMV0lEVEggTEFUSU4gQ0FQSVRBTCBMRVRURVIgQV0KK2FsaWFzCVx1RkYyMglceDQyCSMg77yiIFtGVUxMV0lEVEggTEFUSU4gQ0FQSVRBTCBMRVRURVIgQl0KK2FsaWFzCVx1RkYyMwlceDQzCSMg77yjIFtGVUxMV0lEVEggTEFUSU4gQ0FQSVRBTCBMRVRURVIgQ10KK2FsaWFzCVx1RkYyNAlceDQ0CSMg77ykIFtGVUxMV0lEVEggTEFUSU4gQ0FQSVRBTCBMRVRURVIgRF0KK2FsaWFzCVx1RkYyNQlceDQ1CSMg77ylIFtGVUxMV0lEVEggTEFUSU4gQ0FQSVRBTCBMRVRURVIgRV0KK2FsaWFzCVx1RkYyNglceDQ2CSMg77ymIFtGVUxMV0lEVEggTEFUSU4gQ0FQSVRBTCBMRVRURVIgRl0KK2FsaWFzCVx1RkYyNwlceDQ3CSMg77ynIFtGVUxMV0lEVEggTEFUSU4gQ0FQSVRBTCBMRVRURVIgR10KK2FsaWFzCVx1RkYyOAlceDQ4CSMg77yoIFtGVUxMV0lEVEggTEFUSU4gQ0FQSVRBTCBMRVRURVIgSF0KK2FsaWFzCVx1RkYyOQlceDQ5CSMg77ypIFtGVUxMV0lEVEggTEFUSU4gQ0FQSVRBTCBMRVRURVIgSV0KK2FsaWFzCVx1RkYyQQlceDRBCSMg77yqIFtGVUxMV0lEVEggTEFUSU4gQ0FQSVRBTCBMRVRURVIgSl0KK2FsaWFzCVx1RkYyQglceDRCCSMg77yrIFtGVUxMV0lEVEggTEFUSU4gQ0FQSVRBTCBMRVRURVIgS10KK2FsaWFzCVx1RkYyQwlceDRDCSMg77ysIFtGVUxMV0lEVEggTEFUSU4gQ0FQSVRBTCBMRVRURVIgTF0KK2FsaWFzCVx1RkYyRAlceDRECSMg77ytIFtGVUxMV0lEVEggTEFUSU4gQ0FQSVRBTCBMRVRURVIgTV0KK2FsaWFzCVx1RkYyRQlceDRFCSMg77yuIFtGVUxMV0lEVEggTEFUSU4gQ0FQSVRBTCBMRVRURVIgTl0KK2FsaWFzCVx1RkYyRglceDRGCSMg77yvIFtGVUxMV0lEVEggTEFUSU4gQ0FQSVRBTCBMRVRURVIgT10KK2FsaWFzCVx1RkYzMAlceDUwCSMg77ywIFtGVUxMV0lEVEggTEFUSU4gQ0FQSVRBTCBMRVRURVIgUF0KK2FsaWFzCVx1RkYzMQlceDUxCSMg77yxIFtGVUxMV0lEVEggTEFUSU4gQ0FQSVRBTCBMRVRURVIgUV0KK2FsaWFzCVx1RkYzMglceDUyCSMg77yyIFtGVUxMV0lEVEggTEFUSU4gQ0FQSVRBTCBMRVRURVIgUl0KK2FsaWFzCVx1RkYzMwlceDUzCSMg77yzIFtGVUxMV0lEVEggTEFUSU4gQ0FQSVRBTCBMRVRURVIgU10KK2FsaWFzCVx1RkYzNAlceDU0CSMg77y0IFtGVUxMV0lEVEggTEFUSU4gQ0FQSVRBTCBMRVRURVIgVF0KK2FsaWFzCVx1RkYzNQlceDU1CSMg77y1IFtGVUxMV0lEVEggTEFUSU4gQ0FQSVRBTCBMRVRURVIgVV0KK2FsaWFzCVx1RkYzNglceDU2CSMg77y2IFtGVUxMV0lEVEggTEFUSU4gQ0FQSVRBTCBMRVRURVIgVl0KK2FsaWFzCVx1RkYzNwlceDU3CSMg77y3IFtGVUxMV0lEVEggTEFUSU4gQ0FQSVRBTCBMRVRURVIgV10KK2FsaWFzCVx1RkYzOAlceDU4CSMg77y4IFtGVUxMV0lEVEggTEFUSU4gQ0FQSVRBTCBMRVRURVIgWF0KK2FsaWFzCVx1RkYzOQlceDU5CSMg77y5IFtGVUxMV0lEVEggTEFUSU4gQ0FQSVRBTCBMRVRURVIgWV0KK2FsaWFzCVx1RkYzQQlceDVBCSMg77y6IFtGVUxMV0lEVEggTEFUSU4gQ0FQSVRBTCBMRVRURVIgWl0KKworYWxpYXMJXHVGRjQxCVx4NjEJIyDvvYEgW0ZVTExXSURUSCBMQVRJTiBTTUFMTCBMRVRURVIgQV0KK2FsaWFzCVx1RkY0MglceDYyCSMg772CIFtGVUxMV0lEVEggTEFUSU4gU01BTEwgTEVUVEVSIEJdCithbGlhcwlcdUZGNDMJXHg2MwkjIO+9gyBbRlVMTFdJRFRIIExBVElOIFNNQUxMIExFVFRFUiBDXQorYWxpYXMJXHVGRjQ0CVx4NjQJIyDvvYQgW0ZVTExXSURUSCBMQVRJTiBTTUFMTCBMRVRURVIgRF0KK2FsaWFzCVx1RkY0NQlceDY1CSMg772FIFtGVUxMV0lEVEggTEFUSU4gU01BTEwgTEVUVEVSIEVdCithbGlhcwlcdUZGNDYJXHg2NgkjIO+9hiBbRlVMTFdJRFRIIExBVElOIFNNQUxMIExFVFRFUiBGXQorYWxpYXMJXHVGRjQ3CVx4NjcJIyDvvYcgW0ZVTExXSURUSCBMQVRJTiBTTUFMTCBMRVRURVIgR10KK2FsaWFzCVx1RkY0OAlceDY4CSMg772IIFtGVUxMV0lEVEggTEFUSU4gU01BTEwgTEVUVEVSIEhdCithbGlhcwlcdUZGNDkJXHg2OQkjIO+9iSBbRlVMTFdJRFRIIExBVElOIFNNQUxMIExFVFRFUiBJXQorYWxpYXMJXHVGRjRBCVx4NkEJIyDvvYogW0ZVTExXSURUSCBMQVRJTiBTTUFMTCBMRVRURVIgSl0KK2FsaWFzCVx1RkY0QglceDZCCSMg772LIFtGVUxMV0lEVEggTEFUSU4gU01BTEwgTEVUVEVSIEtdCithbGlhcwlcdUZGNEMJXHg2QwkjIO+9jCBbRlVMTFdJRFRIIExBVElOIFNNQUxMIExFVFRFUiBMXQorYWxpYXMJXHVGRjRECVx4NkQJIyDvvY0gW0ZVTExXSURUSCBMQVRJTiBTTUFMTCBMRVRURVIgTV0KK2FsaWFzCVx1RkY0RQlceDZFCSMg772OIFtGVUxMV0lEVEggTEFUSU4gU01BTEwgTEVUVEVSIE5dCithbGlhcwlcdUZGNEYJXHg2RgkjIO+9jyBbRlVMTFdJRFRIIExBVElOIFNNQUxMIExFVFRFUiBPXQorYWxpYXMJXHVGRjUwCVx4NzAJIyDvvZAgW0ZVTExXSURUSCBMQVRJTiBTTUFMTCBMRVRURVIgUF0KK2FsaWFzCVx1RkY1MQlceDcxCSMg772RIFtGVUxMV0lEVEggTEFUSU4gU01BTEwgTEVUVEVSIFFdCithbGlhcwlcdUZGNTIJXHg3MgkjIO+9kiBbRlVMTFdJRFRIIExBVElOIFNNQUxMIExFVFRFUiBSXQorYWxpYXMJXHVGRjUzCVx4NzMJIyDvvZMgW0ZVTExXSURUSCBMQVRJTiBTTUFMTCBMRVRURVIgU10KK2FsaWFzCVx1RkY1NAlceDc0CSMg772UIFtGVUxMV0lEVEggTEFUSU4gU01BTEwgTEVUVEVSIFRdCithbGlhcwlcdUZGNTUJXHg3NQkjIO+9lSBbRlVMTFdJRFRIIExBVElOIFNNQUxMIExFVFRFUiBVXQorYWxpYXMJXHVGRjU2CVx4NzYJIyDvvZYgW0ZVTExXSURUSCBMQVRJTiBTTUFMTCBMRVRURVIgVl0KK2FsaWFzCVx1RkY1NwlceDc3CSMg772XIFtGVUxMV0lEVEggTEFUSU4gU01BTEwgTEVUVEVSIFddCithbGlhcwlcdUZGNTgJXHg3OAkjIO+9mCBbRlVMTFdJRFRIIExBVElOIFNNQUxMIExFVFRFUiBYXQorYWxpYXMJXHVGRjU5CVx4NzkJIyDvvZkgW0ZVTExXSURUSCBMQVRJTiBTTUFMTCBMRVRURVIgWV0KK2FsaWFzCVx1RkY1QQlceDdBCSMg772aIFtGVUxMV0lEVEggTEFUSU4gU01BTEwgTEVUVEVSIFpdCisKK2FsaWFzCVxVMDAwMUQ0MDAJXHg0MQkjIPCdkIAgW01BVEhFTUFUSUNBTCBCT0xEIENBUElUQUwgQV0KK2FsaWFzCVxVMDAwMUQ0MDEJXHg0MgkjIPCdkIEgW01BVEhFTUFUSUNBTCBCT0xEIENBUElUQUwgQl0KK2FsaWFzCVxVMDAwMUQ0MDIJXHg0MwkjIPCdkIIgW01BVEhFTUFUSUNBTCBCT0xEIENBUElUQUwgQ10KK2FsaWFzCVxVMDAwMUQ0MDMJXHg0NAkjIPCdkIMgW01BVEhFTUFUSUNBTCBCT0xEIENBUElUQUwgRF0KK2FsaWFzCVxVMDAwMUQ0MDQJXHg0NQkjIPCdkIQgW01BVEhFTUFUSUNBTCBCT0xEIENBUElUQUwgRV0KK2FsaWFzCVxVMDAwMUQ0MDUJXHg0NgkjIPCdkIUgW01BVEhFTUFUSUNBTCBCT0xEIENBUElUQUwgRl0KK2FsaWFzCVxVMDAwMUQ0MDYJXHg0NwkjIPCdkIYgW01BVEhFTUFUSUNBTCBCT0xEIENBUElUQUwgR10KK2FsaWFzCVxVMDAwMUQ0MDcJXHg0OAkjIPCdkIcgW01BVEhFTUFUSUNBTCBCT0xEIENBUElUQUwgSF0KK2FsaWFzCVxVMDAwMUQ0MDgJXHg0OQkjIPCdkIggW01BVEhFTUFUSUNBTCBCT0xEIENBUElUQUwgSV0KK2FsaWFzCVxVMDAwMUQ0MDkJXHg0QQkjIPCdkIkgW01BVEhFTUFUSUNBTCBCT0xEIENBUElUQUwgSl0KK2FsaWFzCVxVMDAwMUQ0MEEJXHg0QgkjIPCdkIogW01BVEhFTUFUSUNBTCBCT0xEIENBUElUQUwgS10KK2FsaWFzCVxVMDAwMUQ0MEIJXHg0QwkjIPCdkIsgW01BVEhFTUFUSUNBTCBCT0xEIENBUElUQUwgTF0KK2FsaWFzCVxVMDAwMUQ0MEMJXHg0RAkjIPCdkIwgW01BVEhFTUFUSUNBTCBCT0xEIENBUElUQUwgTV0KK2FsaWFzCVxVMDAwMUQ0MEQJXHg0RQkjIPCdkI0gW01BVEhFTUFUSUNBTCBCT0xEIENBUElUQUwgTl0KK2FsaWFzCVxVMDAwMUQ0MEUJXHg0RgkjIPCdkI4gW01BVEhFTUFUSUNBTCBCT0xEIENBUElUQUwgT10KK2FsaWFzCVxVMDAwMUQ0MEYJXHg1MAkjIPCdkI8gW01BVEhFTUFUSUNBTCBCT0xEIENBUElUQUwgUF0KK2FsaWFzCVxVMDAwMUQ0MTAJXHg1MQkjIPCdkJAgW01BVEhFTUFUSUNBTCBCT0xEIENBUElUQUwgUV0KK2FsaWFzCVxVMDAwMUQ0MTEJXHg1MgkjIPCdkJEgW01BVEhFTUFUSUNBTCBCT0xEIENBUElUQUwgUl0KK2FsaWFzCVxVMDAwMUQ0MTIJXHg1MwkjIPCdkJIgW01BVEhFTUFUSUNBTCBCT0xEIENBUElUQUwgU10KK2FsaWFzCVxVMDAwMUQ0MTMJXHg1NAkjIPCdkJMgW01BVEhFTUFUSUNBTCBCT0xEIENBUElUQUwgVF0KK2FsaWFzCVxVMDAwMUQ0MTQJXHg1NQkjIPCdkJQgW01BVEhFTUFUSUNBTCBCT0xEIENBUElUQUwgVV0KK2FsaWFzCVxVMDAwMUQ0MTUJXHg1NgkjIPCdkJUgW01BVEhFTUFUSUNBTCBCT0xEIENBUElUQUwgVl0KK2FsaWFzCVxVMDAwMUQ0MTYJXHg1NwkjIPCdkJYgW01BVEhFTUFUSUNBTCBCT0xEIENBUElUQUwgV10KK2FsaWFzCVxVMDAwMUQ0MTcJXHg1OAkjIPCdkJcgW01BVEhFTUFUSUNBTCBCT0xEIENBUElUQUwgWF0KK2FsaWFzCVxVMDAwMUQ0MTgJXHg1OQkjIPCdkJggW01BVEhFTUFUSUNBTCBCT0xEIENBUElUQUwgWV0KK2FsaWFzCVxVMDAwMUQ0MTkJXHg1QQkjIPCdkJkgW01BVEhFTUFUSUNBTCBCT0xEIENBUElUQUwgWl0KKworYWxpYXMJXFUwMDAxRDQxQQlceDYxCSMg8J2QmiBbTUFUSEVNQVRJQ0FMIEJPTEQgU01BTEwgQV0KK2FsaWFzCVxVMDAwMUQ0MUIJXHg2MgkjIPCdkJsgW01BVEhFTUFUSUNBTCBCT0xEIFNNQUxMIEJdCithbGlhcwlcVTAwMDFENDFDCVx4NjMJIyDwnZCcIFtNQVRIRU1BVElDQUwgQk9MRCBTTUFMTCBDXQorYWxpYXMJXFUwMDAxRDQxRAlceDY0CSMg8J2QnSBbTUFUSEVNQVRJQ0FMIEJPTEQgU01BTEwgRF0KK2FsaWFzCVxVMDAwMUQ0MUUJXHg2NQkjIPCdkJ4gW01BVEhFTUFUSUNBTCBCT0xEIFNNQUxMIEVdCithbGlhcwlcVTAwMDFENDFGCVx4NjYJIyDwnZCfIFtNQVRIRU1BVElDQUwgQk9MRCBTTUFMTCBGXQorYWxpYXMJXFUwMDAxRDQyMAlceDY3CSMg8J2QoCBbTUFUSEVNQVRJQ0FMIEJPTEQgU01BTEwgR10KK2FsaWFzCVxVMDAwMUQ0MjEJXHg2OAkjIPCdkKEgW01BVEhFTUFUSUNBTCBCT0xEIFNNQUxMIEhdCithbGlhcwlcVTAwMDFENDIyCVx4NjkJIyDwnZCiIFtNQVRIRU1BVElDQUwgQk9MRCBTTUFMTCBJXQorYWxpYXMJXFUwMDAxRDQyMwlceDZBCSMg8J2QoyBbTUFUSEVNQVRJQ0FMIEJPTEQgU01BTEwgSl0KK2FsaWFzCVxVMDAwMUQ0MjQJXHg2QgkjIPCdkKQgW01BVEhFTUFUSUNBTCBCT0xEIFNNQUxMIEtdCithbGlhcwlcVTAwMDFENDI1CVx4NkMJIyDwnZClIFtNQVRIRU1BVElDQUwgQk9MRCBTTUFMTCBMXQorYWxpYXMJXFUwMDAxRDQyNglceDZECSMg8J2QpiBbTUFUSEVNQVRJQ0FMIEJPTEQgU01BTEwgTV0KK2FsaWFzCVxVMDAwMUQ0MjcJXHg2RQkjIPCdkKcgW01BVEhFTUFUSUNBTCBCT0xEIFNNQUxMIE5dCithbGlhcwlcVTAwMDFENDI4CVx4NkYJIyDwnZCoIFtNQVRIRU1BVElDQUwgQk9MRCBTTUFMTCBPXQorYWxpYXMJXFUwMDAxRDQyOQlceDcwCSMg8J2QqSBbTUFUSEVNQVRJQ0FMIEJPTEQgU01BTEwgUF0KK2FsaWFzCVxVMDAwMUQ0MkEJXHg3MQkjIPCdkKogW01BVEhFTUFUSUNBTCBCT0xEIFNNQUxMIFFdCithbGlhcwlcVTAwMDFENDJCCVx4NzIJIyDwnZCrIFtNQVRIRU1BVElDQUwgQk9MRCBTTUFMTCBSXQorYWxpYXMJXFUwMDAxRDQyQwlceDczCSMg8J2QrCBbTUFUSEVNQVRJQ0FMIEJPTEQgU01BTEwgU10KK2FsaWFzCVxVMDAwMUQ0MkQJXHg3NAkjIPCdkK0gW01BVEhFTUFUSUNBTCBCT0xEIFNNQUxMIFRdCithbGlhcwlcVTAwMDFENDJFCVx4NzUJIyDwnZCuIFtNQVRIRU1BVElDQUwgQk9MRCBTTUFMTCBVXQorYWxpYXMJXFUwMDAxRDQyRglceDc2CSMg8J2QryBbTUFUSEVNQVRJQ0FMIEJPTEQgU01BTEwgVl0KK2FsaWFzCVxVMDAwMUQ0MzAJXHg3NwkjIPCdkLAgW01BVEhFTUFUSUNBTCBCT0xEIFNNQUxMIFddCithbGlhcwlcVTAwMDFENDMxCVx4NzgJIyDwnZCxIFtNQVRIRU1BVElDQUwgQk9MRCBTTUFMTCBYXQorYWxpYXMJXFUwMDAxRDQzMglceDc5CSMg8J2QsiBbTUFUSEVNQVRJQ0FMIEJPTEQgU01BTEwgWV0KK2FsaWFzCVxVMDAwMUQ0MzMJXHg3QQkjIPCdkLMgW01BVEhFTUFUSUNBTCBCT0xEIFNNQUxMIFpdCisKK2FsaWFzCVxVMDAwMUQ0MzQJXHg0MQkjIPCdkLQgW01BVEhFTUFUSUNBTCBJVEFMSUMgQ0FQSVRBTCBBXQorYWxpYXMJXFUwMDAxRDQzNQlceDQyCSMg8J2QtSBbTUFUSEVNQVRJQ0FMIElUQUxJQyBDQVBJVEFMIEJdCithbGlhcwlcVTAwMDFENDM2CVx4NDMJIyDwnZC2IFtNQVRIRU1BVElDQUwgSVRBTElDIENBUElUQUwgQ10KK2FsaWFzCVxVMDAwMUQ0MzcJXHg0NAkjIPCdkLcgW01BVEhFTUFUSUNBTCBJVEFMSUMgQ0FQSVRBTCBEXQorYWxpYXMJXFUwMDAxRDQzOAlceDQ1CSMg8J2QuCBbTUFUSEVNQVRJQ0FMIElUQUxJQyBDQVBJVEFMIEVdCithbGlhcwlcVTAwMDFENDM5CVx4NDYJIyDwnZC5IFtNQVRIRU1BVElDQUwgSVRBTElDIENBUElUQUwgRl0KK2FsaWFzCVxVMDAwMUQ0M0EJXHg0NwkjIPCdkLogW01BVEhFTUFUSUNBTCBJVEFMSUMgQ0FQSVRBTCBHXQorYWxpYXMJXFUwMDAxRDQzQglceDQ4CSMg8J2QuyBbTUFUSEVNQVRJQ0FMIElUQUxJQyBDQVBJVEFMIEhdCithbGlhcwlcVTAwMDFENDNDCVx4NDkJIyDwnZC8IFtNQVRIRU1BVElDQUwgSVRBTElDIENBUElUQUwgSV0KK2FsaWFzCVxVMDAwMUQ0M0QJXHg0QQkjIPCdkL0gW01BVEhFTUFUSUNBTCBJVEFMSUMgQ0FQSVRBTCBKXQorYWxpYXMJXFUwMDAxRDQzRQlceDRCCSMg8J2QviBbTUFUSEVNQVRJQ0FMIElUQUxJQyBDQVBJVEFMIEtdCithbGlhcwlcVTAwMDFENDNGCVx4NEMJIyDwnZC/IFtNQVRIRU1BVElDQUwgSVRBTElDIENBUElUQUwgTF0KK2FsaWFzCVxVMDAwMUQ0NDAJXHg0RAkjIPCdkYAgW01BVEhFTUFUSUNBTCBJVEFMSUMgQ0FQSVRBTCBNXQorYWxpYXMJXFUwMDAxRDQ0MQlceDRFCSMg8J2RgSBbTUFUSEVNQVRJQ0FMIElUQUxJQyBDQVBJVEFMIE5dCithbGlhcwlcVTAwMDFENDQyCVx4NEYJIyDwnZGCIFtNQVRIRU1BVElDQUwgSVRBTElDIENBUElUQUwgT10KK2FsaWFzCVxVMDAwMUQ0NDMJXHg1MAkjIPCdkYMgW01BVEhFTUFUSUNBTCBJVEFMSUMgQ0FQSVRBTCBQXQorYWxpYXMJXFUwMDAxRDQ0NAlceDUxCSMg8J2RhCBbTUFUSEVNQVRJQ0FMIElUQUxJQyBDQVBJVEFMIFFdCithbGlhcwlcVTAwMDFENDQ1CVx4NTIJIyDwnZGFIFtNQVRIRU1BVElDQUwgSVRBTElDIENBUElUQUwgUl0KK2FsaWFzCVxVMDAwMUQ0NDYJXHg1MwkjIPCdkYYgW01BVEhFTUFUSUNBTCBJVEFMSUMgQ0FQSVRBTCBTXQorYWxpYXMJXFUwMDAxRDQ0NwlceDU0CSMg8J2RhyBbTUFUSEVNQVRJQ0FMIElUQUxJQyBDQVBJVEFMIFRdCithbGlhcwlcVTAwMDFENDQ4CVx4NTUJIyDwnZGIIFtNQVRIRU1BVElDQUwgSVRBTElDIENBUElUQUwgVV0KK2FsaWFzCVxVMDAwMUQ0NDkJXHg1NgkjIPCdkYkgW01BVEhFTUFUSUNBTCBJVEFMSUMgQ0FQSVRBTCBWXQorYWxpYXMJXFUwMDAxRDQ0QQlceDU3CSMg8J2RiiBbTUFUSEVNQVRJQ0FMIElUQUxJQyBDQVBJVEFMIFddCithbGlhcwlcVTAwMDFENDRCCVx4NTgJIyDwnZGLIFtNQVRIRU1BVElDQUwgSVRBTElDIENBUElUQUwgWF0KK2FsaWFzCVxVMDAwMUQ0NEMJXHg1OQkjIPCdkYwgW01BVEhFTUFUSUNBTCBJVEFMSUMgQ0FQSVRBTCBZXQorYWxpYXMJXFUwMDAxRDQ0RAlceDVBCSMg8J2RjSBbTUFUSEVNQVRJQ0FMIElUQUxJQyBDQVBJVEFMIFpdCisKK2FsaWFzCVxVMDAwMUQ0NEUJXHg2MQkjIPCdkY4gW01BVEhFTUFUSUNBTCBJVEFMSUMgU01BTEwgQV0KK2FsaWFzCVxVMDAwMUQ0NEYJXHg2MgkjIPCdkY8gW01BVEhFTUFUSUNBTCBJVEFMSUMgU01BTEwgQl0KK2FsaWFzCVxVMDAwMUQ0NTAJXHg2MwkjIPCdkZAgW01BVEhFTUFUSUNBTCBJVEFMSUMgU01BTEwgQ10KK2FsaWFzCVxVMDAwMUQ0NTEJXHg2NAkjIPCdkZEgW01BVEhFTUFUSUNBTCBJVEFMSUMgU01BTEwgRF0KK2FsaWFzCVxVMDAwMUQ0NTIJXHg2NQkjIPCdkZIgW01BVEhFTUFUSUNBTCBJVEFMSUMgU01BTEwgRV0KK2FsaWFzCVxVMDAwMUQ0NTMJXHg2NgkjIPCdkZMgW01BVEhFTUFUSUNBTCBJVEFMSUMgU01BTEwgRl0KK2FsaWFzCVxVMDAwMUQ0NTQJXHg2NwkjIPCdkZQgW01BVEhFTUFUSUNBTCBJVEFMSUMgU01BTEwgR10KK2FsaWFzCVxVMDAwMUQ0NTUJXHg2OAkjICAgWzx1bmFzc2lnbmVkLTFENDU1Pl0KK2FsaWFzCVxVMDAwMUQ0NTYJXHg2OQkjIPCdkZYgW01BVEhFTUFUSUNBTCBJVEFMSUMgU01BTEwgSV0KK2FsaWFzCVxVMDAwMUQ0NTcJXHg2QQkjIPCdkZcgW01BVEhFTUFUSUNBTCBJVEFMSUMgU01BTEwgSl0KK2FsaWFzCVxVMDAwMUQ0NTgJXHg2QgkjIPCdkZggW01BVEhFTUFUSUNBTCBJVEFMSUMgU01BTEwgS10KK2FsaWFzCVxVMDAwMUQ0NTkJXHg2QwkjIPCdkZkgW01BVEhFTUFUSUNBTCBJVEFMSUMgU01BTEwgTF0KK2FsaWFzCVxVMDAwMUQ0NUEJXHg2RAkjIPCdkZogW01BVEhFTUFUSUNBTCBJVEFMSUMgU01BTEwgTV0KK2FsaWFzCVxVMDAwMUQ0NUIJXHg2RQkjIPCdkZsgW01BVEhFTUFUSUNBTCBJVEFMSUMgU01BTEwgTl0KK2FsaWFzCVxVMDAwMUQ0NUMJXHg2RgkjIPCdkZwgW01BVEhFTUFUSUNBTCBJVEFMSUMgU01BTEwgT10KK2FsaWFzCVxVMDAwMUQ0NUQJXHg3MAkjIPCdkZ0gW01BVEhFTUFUSUNBTCBJVEFMSUMgU01BTEwgUF0KK2FsaWFzCVxVMDAwMUQ0NUUJXHg3MQkjIPCdkZ4gW01BVEhFTUFUSUNBTCBJVEFMSUMgU01BTEwgUV0KK2FsaWFzCVxVMDAwMUQ0NUYJXHg3MgkjIPCdkZ8gW01BVEhFTUFUSUNBTCBJVEFMSUMgU01BTEwgUl0KK2FsaWFzCVxVMDAwMUQ0NjAJXHg3MwkjIPCdkaAgW01BVEhFTUFUSUNBTCBJVEFMSUMgU01BTEwgU10KK2FsaWFzCVxVMDAwMUQ0NjEJXHg3NAkjIPCdkaEgW01BVEhFTUFUSUNBTCBJVEFMSUMgU01BTEwgVF0KK2FsaWFzCVxVMDAwMUQ0NjIJXHg3NQkjIPCdkaIgW01BVEhFTUFUSUNBTCBJVEFMSUMgU01BTEwgVV0KK2FsaWFzCVxVMDAwMUQ0NjMJXHg3NgkjIPCdkaMgW01BVEhFTUFUSUNBTCBJVEFMSUMgU01BTEwgVl0KK2FsaWFzCVxVMDAwMUQ0NjQJXHg3NwkjIPCdkaQgW01BVEhFTUFUSUNBTCBJVEFMSUMgU01BTEwgV10KK2FsaWFzCVxVMDAwMUQ0NjUJXHg3OAkjIPCdkaUgW01BVEhFTUFUSUNBTCBJVEFMSUMgU01BTEwgWF0KK2FsaWFzCVxVMDAwMUQ0NjYJXHg3OQkjIPCdkaYgW01BVEhFTUFUSUNBTCBJVEFMSUMgU01BTEwgWV0KK2FsaWFzCVxVMDAwMUQ0NjcJXHg3QQkjIPCdkacgW01BVEhFTUFUSUNBTCBJVEFMSUMgU01BTEwgWl0KKworYWxpYXMJXFUwMDAxRDQ2OAlceDQxCSMg8J2RqCBbTUFUSEVNQVRJQ0FMIEJPTEQgSVRBTElDIENBUElUQUwgQV0KK2FsaWFzCVxVMDAwMUQ0NjkJXHg0MgkjIPCdkakgW01BVEhFTUFUSUNBTCBCT0xEIElUQUxJQyBDQVBJVEFMIEJdCithbGlhcwlcVTAwMDFENDZBCVx4NDMJIyDwnZGqIFtNQVRIRU1BVElDQUwgQk9MRCBJVEFMSUMgQ0FQSVRBTCBDXQorYWxpYXMJXFUwMDAxRDQ2QglceDQ0CSMg8J2RqyBbTUFUSEVNQVRJQ0FMIEJPTEQgSVRBTElDIENBUElUQUwgRF0KK2FsaWFzCVxVMDAwMUQ0NkMJXHg0NQkjIPCdkawgW01BVEhFTUFUSUNBTCBCT0xEIElUQUxJQyBDQVBJVEFMIEVdCithbGlhcwlcVTAwMDFENDZECVx4NDYJIyDwnZGtIFtNQVRIRU1BVElDQUwgQk9MRCBJVEFMSUMgQ0FQSVRBTCBGXQorYWxpYXMJXFUwMDAxRDQ2RQlceDQ3CSMg8J2RriBbTUFUSEVNQVRJQ0FMIEJPTEQgSVRBTElDIENBUElUQUwgR10KK2FsaWFzCVxVMDAwMUQ0NkYJXHg0OAkjIPCdka8gW01BVEhFTUFUSUNBTCBCT0xEIElUQUxJQyBDQVBJVEFMIEhdCithbGlhcwlcVTAwMDFENDcwCVx4NDkJIyDwnZGwIFtNQVRIRU1BVElDQUwgQk9MRCBJVEFMSUMgQ0FQSVRBTCBJXQorYWxpYXMJXFUwMDAxRDQ3MQlceDRBCSMg8J2RsSBbTUFUSEVNQVRJQ0FMIEJPTEQgSVRBTElDIENBUElUQUwgSl0KK2FsaWFzCVxVMDAwMUQ0NzIJXHg0QgkjIPCdkbIgW01BVEhFTUFUSUNBTCBCT0xEIElUQUxJQyBDQVBJVEFMIEtdCithbGlhcwlcVTAwMDFENDczCVx4NEMJIyDwnZGzIFtNQVRIRU1BVElDQUwgQk9MRCBJVEFMSUMgQ0FQSVRBTCBMXQorYWxpYXMJXFUwMDAxRDQ3NAlceDRECSMg8J2RtCBbTUFUSEVNQVRJQ0FMIEJPTEQgSVRBTElDIENBUElUQUwgTV0KK2FsaWFzCVxVMDAwMUQ0NzUJXHg0RQkjIPCdkbUgW01BVEhFTUFUSUNBTCBCT0xEIElUQUxJQyBDQVBJVEFMIE5dCithbGlhcwlcVTAwMDFENDc2CVx4NEYJIyDwnZG2IFtNQVRIRU1BVElDQUwgQk9MRCBJVEFMSUMgQ0FQSVRBTCBPXQorYWxpYXMJXFUwMDAxRDQ3NwlceDUwCSMg8J2RtyBbTUFUSEVNQVRJQ0FMIEJPTEQgSVRBTElDIENBUElUQUwgUF0KK2FsaWFzCVxVMDAwMUQ0NzgJXHg1MQkjIPCdkbggW01BVEhFTUFUSUNBTCBCT0xEIElUQUxJQyBDQVBJVEFMIFFdCithbGlhcwlcVTAwMDFENDc5CVx4NTIJIyDwnZG5IFtNQVRIRU1BVElDQUwgQk9MRCBJVEFMSUMgQ0FQSVRBTCBSXQorYWxpYXMJXFUwMDAxRDQ3QQlceDUzCSMg8J2RuiBbTUFUSEVNQVRJQ0FMIEJPTEQgSVRBTElDIENBUElUQUwgU10KK2FsaWFzCVxVMDAwMUQ0N0IJXHg1NAkjIPCdkbsgW01BVEhFTUFUSUNBTCBCT0xEIElUQUxJQyBDQVBJVEFMIFRdCithbGlhcwlcVTAwMDFENDdDCVx4NTUJIyDwnZG8IFtNQVRIRU1BVElDQUwgQk9MRCBJVEFMSUMgQ0FQSVRBTCBVXQorYWxpYXMJXFUwMDAxRDQ3RAlceDU2CSMg8J2RvSBbTUFUSEVNQVRJQ0FMIEJPTEQgSVRBTElDIENBUElUQUwgVl0KK2FsaWFzCVxVMDAwMUQ0N0UJXHg1NwkjIPCdkb4gW01BVEhFTUFUSUNBTCBCT0xEIElUQUxJQyBDQVBJVEFMIFddCithbGlhcwlcVTAwMDFENDdGCVx4NTgJIyDwnZG/IFtNQVRIRU1BVElDQUwgQk9MRCBJVEFMSUMgQ0FQSVRBTCBYXQorYWxpYXMJXFUwMDAxRDQ4MAlceDU5CSMg8J2SgCBbTUFUSEVNQVRJQ0FMIEJPTEQgSVRBTElDIENBUElUQUwgWV0KK2FsaWFzCVxVMDAwMUQ0ODEJXHg1QQkjIPCdkoEgW01BVEhFTUFUSUNBTCBCT0xEIElUQUxJQyBDQVBJVEFMIFpdCisKK2FsaWFzCVxVMDAwMUQ0ODIJXHg2MQkjIPCdkoIgW01BVEhFTUFUSUNBTCBCT0xEIElUQUxJQyBTTUFMTCBBXQorYWxpYXMJXFUwMDAxRDQ4MwlceDYyCSMg8J2SgyBbTUFUSEVNQVRJQ0FMIEJPTEQgSVRBTElDIFNNQUxMIEJdCithbGlhcwlcVTAwMDFENDg0CVx4NjMJIyDwnZKEIFtNQVRIRU1BVElDQUwgQk9MRCBJVEFMSUMgU01BTEwgQ10KK2FsaWFzCVxVMDAwMUQ0ODUJXHg2NAkjIPCdkoUgW01BVEhFTUFUSUNBTCBCT0xEIElUQUxJQyBTTUFMTCBEXQorYWxpYXMJXFUwMDAxRDQ4NglceDY1CSMg8J2ShiBbTUFUSEVNQVRJQ0FMIEJPTEQgSVRBTElDIFNNQUxMIEVdCithbGlhcwlcVTAwMDFENDg3CVx4NjYJIyDwnZKHIFtNQVRIRU1BVElDQUwgQk9MRCBJVEFMSUMgU01BTEwgRl0KK2FsaWFzCVxVMDAwMUQ0ODgJXHg2NwkjIPCdkoggW01BVEhFTUFUSUNBTCBCT0xEIElUQUxJQyBTTUFMTCBHXQorYWxpYXMJXFUwMDAxRDQ4OQlceDY4CSMg8J2SiSBbTUFUSEVNQVRJQ0FMIEJPTEQgSVRBTElDIFNNQUxMIEhdCithbGlhcwlcVTAwMDFENDhBCVx4NjkJIyDwnZKKIFtNQVRIRU1BVElDQUwgQk9MRCBJVEFMSUMgU01BTEwgSV0KK2FsaWFzCVxVMDAwMUQ0OEIJXHg2QQkjIPCdkosgW01BVEhFTUFUSUNBTCBCT0xEIElUQUxJQyBTTUFMTCBKXQorYWxpYXMJXFUwMDAxRDQ4QwlceDZCCSMg8J2SjCBbTUFUSEVNQVRJQ0FMIEJPTEQgSVRBTElDIFNNQUxMIEtdCithbGlhcwlcVTAwMDFENDhECVx4NkMJIyDwnZKNIFtNQVRIRU1BVElDQUwgQk9MRCBJVEFMSUMgU01BTEwgTF0KK2FsaWFzCVxVMDAwMUQ0OEUJXHg2RAkjIPCdko4gW01BVEhFTUFUSUNBTCBCT0xEIElUQUxJQyBTTUFMTCBNXQorYWxpYXMJXFUwMDAxRDQ4RglceDZFCSMg8J2SjyBbTUFUSEVNQVRJQ0FMIEJPTEQgSVRBTElDIFNNQUxMIE5dCithbGlhcwlcVTAwMDFENDkwCVx4NkYJIyDwnZKQIFtNQVRIRU1BVElDQUwgQk9MRCBJVEFMSUMgU01BTEwgT10KK2FsaWFzCVxVMDAwMUQ0OTEJXHg3MAkjIPCdkpEgW01BVEhFTUFUSUNBTCBCT0xEIElUQUxJQyBTTUFMTCBQXQorYWxpYXMJXFUwMDAxRDQ5MglceDcxCSMg8J2SkiBbTUFUSEVNQVRJQ0FMIEJPTEQgSVRBTElDIFNNQUxMIFFdCithbGlhcwlcVTAwMDFENDkzCVx4NzIJIyDwnZKTIFtNQVRIRU1BVElDQUwgQk9MRCBJVEFMSUMgU01BTEwgUl0KK2FsaWFzCVxVMDAwMUQ0OTQJXHg3MwkjIPCdkpQgW01BVEhFTUFUSUNBTCBCT0xEIElUQUxJQyBTTUFMTCBTXQorYWxpYXMJXFUwMDAxRDQ5NQlceDc0CSMg8J2SlSBbTUFUSEVNQVRJQ0FMIEJPTEQgSVRBTElDIFNNQUxMIFRdCithbGlhcwlcVTAwMDFENDk2CVx4NzUJIyDwnZKWIFtNQVRIRU1BVElDQUwgQk9MRCBJVEFMSUMgU01BTEwgVV0KK2FsaWFzCVxVMDAwMUQ0OTcJXHg3NgkjIPCdkpcgW01BVEhFTUFUSUNBTCBCT0xEIElUQUxJQyBTTUFMTCBWXQorYWxpYXMJXFUwMDAxRDQ5OAlceDc3CSMg8J2SmCBbTUFUSEVNQVRJQ0FMIEJPTEQgSVRBTElDIFNNQUxMIFddCithbGlhcwlcVTAwMDFENDk5CVx4NzgJIyDwnZKZIFtNQVRIRU1BVElDQUwgQk9MRCBJVEFMSUMgU01BTEwgWF0KK2FsaWFzCVxVMDAwMUQ0OUEJXHg3OQkjIPCdkpogW01BVEhFTUFUSUNBTCBCT0xEIElUQUxJQyBTTUFMTCBZXQorYWxpYXMJXFUwMDAxRDQ5QglceDdBCSMg8J2SmyBbTUFUSEVNQVRJQ0FMIEJPTEQgSVRBTElDIFNNQUxMIFpdCisKK2FsaWFzCVxVMDAwMUQ0OUMJXHg0MQkjIPCdkpwgW01BVEhFTUFUSUNBTCBTQ1JJUFQgQ0FQSVRBTCBBXQorYWxpYXMJXFUwMDAxRDQ5RAlceDQyCSMgICBbPHVuYXNzaWduZWQtMUQ0OUQ+XQorYWxpYXMJXFUwMDAxRDQ5RQlceDQzCSMg8J2SniBbTUFUSEVNQVRJQ0FMIFNDUklQVCBDQVBJVEFMIENdCithbGlhcwlcVTAwMDFENDlGCVx4NDQJIyDwnZKfIFtNQVRIRU1BVElDQUwgU0NSSVBUIENBUElUQUwgRF0KK2FsaWFzCVxVMDAwMUQ0QTAJXHg0NQkjICAgWzx1bmFzc2lnbmVkLTFENEEwPl0KK2FsaWFzCVxVMDAwMUQ0QTEJXHg0NgkjICAgWzx1bmFzc2lnbmVkLTFENEExPl0KK2FsaWFzCVxVMDAwMUQ0QTIJXHg0NwkjIPCdkqIgW01BVEhFTUFUSUNBTCBTQ1JJUFQgQ0FQSVRBTCBHXQorYWxpYXMJXFUwMDAxRDRBMwlceDQ4CSMgICBbPHVuYXNzaWduZWQtMUQ0QTM+XQorYWxpYXMJXFUwMDAxRDRBNAlceDQ5CSMgICBbPHVuYXNzaWduZWQtMUQ0QTQ+XQorYWxpYXMJXFUwMDAxRDRBNQlceDRBCSMg8J2SpSBbTUFUSEVNQVRJQ0FMIFNDUklQVCBDQVBJVEFMIEpdCithbGlhcwlcVTAwMDFENEE2CVx4NEIJIyDwnZKmIFtNQVRIRU1BVElDQUwgU0NSSVBUIENBUElUQUwgS10KK2FsaWFzCVxVMDAwMUQ0QTcJXHg0QwkjICAgWzx1bmFzc2lnbmVkLTFENEE3Pl0KK2FsaWFzCVxVMDAwMUQ0QTgJXHg0RAkjICAgWzx1bmFzc2lnbmVkLTFENEE4Pl0KK2FsaWFzCVxVMDAwMUQ0QTkJXHg0RQkjIPCdkqkgW01BVEhFTUFUSUNBTCBTQ1JJUFQgQ0FQSVRBTCBOXQorYWxpYXMJXFUwMDAxRDRBQQlceDRGCSMg8J2SqiBbTUFUSEVNQVRJQ0FMIFNDUklQVCBDQVBJVEFMIE9dCithbGlhcwlcVTAwMDFENEFCCVx4NTAJIyDwnZKrIFtNQVRIRU1BVElDQUwgU0NSSVBUIENBUElUQUwgUF0KK2FsaWFzCVxVMDAwMUQ0QUMJXHg1MQkjIPCdkqwgW01BVEhFTUFUSUNBTCBTQ1JJUFQgQ0FQSVRBTCBRXQorYWxpYXMJXFUwMDAxRDRBRAlceDUyCSMgICBbPHVuYXNzaWduZWQtMUQ0QUQ+XQorYWxpYXMJXFUwMDAxRDRBRQlceDUzCSMg8J2SriBbTUFUSEVNQVRJQ0FMIFNDUklQVCBDQVBJVEFMIFNdCithbGlhcwlcVTAwMDFENEFGCVx4NTQJIyDwnZKvIFtNQVRIRU1BVElDQUwgU0NSSVBUIENBUElUQUwgVF0KK2FsaWFzCVxVMDAwMUQ0QjAJXHg1NQkjIPCdkrAgW01BVEhFTUFUSUNBTCBTQ1JJUFQgQ0FQSVRBTCBVXQorYWxpYXMJXFUwMDAxRDRCMQlceDU2CSMg8J2SsSBbTUFUSEVNQVRJQ0FMIFNDUklQVCBDQVBJVEFMIFZdCithbGlhcwlcVTAwMDFENEIyCVx4NTcJIyDwnZKyIFtNQVRIRU1BVElDQUwgU0NSSVBUIENBUElUQUwgV10KK2FsaWFzCVxVMDAwMUQ0QjMJXHg1OAkjIPCdkrMgW01BVEhFTUFUSUNBTCBTQ1JJUFQgQ0FQSVRBTCBYXQorYWxpYXMJXFUwMDAxRDRCNAlceDU5CSMg8J2StCBbTUFUSEVNQVRJQ0FMIFNDUklQVCBDQVBJVEFMIFldCithbGlhcwlcVTAwMDFENEI1CVx4NUEJIyDwnZK1IFtNQVRIRU1BVElDQUwgU0NSSVBUIENBUElUQUwgWl0KKworYWxpYXMJXFUwMDAxRDRCNglceDYxCSMg8J2StiBbTUFUSEVNQVRJQ0FMIFNDUklQVCBTTUFMTCBBXQorYWxpYXMJXFUwMDAxRDRCNwlceDYyCSMg8J2StyBbTUFUSEVNQVRJQ0FMIFNDUklQVCBTTUFMTCBCXQorYWxpYXMJXFUwMDAxRDRCOAlceDYzCSMg8J2SuCBbTUFUSEVNQVRJQ0FMIFNDUklQVCBTTUFMTCBDXQorYWxpYXMJXFUwMDAxRDRCOQlceDY0CSMg8J2SuSBbTUFUSEVNQVRJQ0FMIFNDUklQVCBTTUFMTCBEXQorYWxpYXMJXFUwMDAxRDRCQQlceDY1CSMgICBbPHVuYXNzaWduZWQtMUQ0QkE+XQorYWxpYXMJXFUwMDAxRDRCQglceDY2CSMg8J2SuyBbTUFUSEVNQVRJQ0FMIFNDUklQVCBTTUFMTCBGXQorYWxpYXMJXFUwMDAxRDRCQwlceDY3CSMgICBbPHVuYXNzaWduZWQtMUQ0QkM+XQorYWxpYXMJXFUwMDAxRDRCRAlceDY4CSMg8J2SvSBbTUFUSEVNQVRJQ0FMIFNDUklQVCBTTUFMTCBIXQorYWxpYXMJXFUwMDAxRDRCRQlceDY5CSMg8J2SviBbTUFUSEVNQVRJQ0FMIFNDUklQVCBTTUFMTCBJXQorYWxpYXMJXFUwMDAxRDRCRglceDZBCSMg8J2SvyBbTUFUSEVNQVRJQ0FMIFNDUklQVCBTTUFMTCBKXQorYWxpYXMJXFUwMDAxRDRDMAlceDZCCSMg8J2TgCBbTUFUSEVNQVRJQ0FMIFNDUklQVCBTTUFMTCBLXQorYWxpYXMJXFUwMDAxRDRDMQlceDZDCSMg8J2TgSBbTUFUSEVNQVRJQ0FMIFNDUklQVCBTTUFMTCBMXQorYWxpYXMJXFUwMDAxRDRDMglceDZECSMg8J2TgiBbTUFUSEVNQVRJQ0FMIFNDUklQVCBTTUFMTCBNXQorYWxpYXMJXFUwMDAxRDRDMwlceDZFCSMg8J2TgyBbTUFUSEVNQVRJQ0FMIFNDUklQVCBTTUFMTCBOXQorYWxpYXMJXFUwMDAxRDRDNAlceDZGCSMgICBbPHVuYXNzaWduZWQtMUQ0QzQ+XQorYWxpYXMJXFUwMDAxRDRDNQlceDcwCSMg8J2ThSBbTUFUSEVNQVRJQ0FMIFNDUklQVCBTTUFMTCBQXQorYWxpYXMJXFUwMDAxRDRDNglceDcxCSMg8J2ThiBbTUFUSEVNQVRJQ0FMIFNDUklQVCBTTUFMTCBRXQorYWxpYXMJXFUwMDAxRDRDNwlceDcyCSMg8J2ThyBbTUFUSEVNQVRJQ0FMIFNDUklQVCBTTUFMTCBSXQorYWxpYXMJXFUwMDAxRDRDOAlceDczCSMg8J2TiCBbTUFUSEVNQVRJQ0FMIFNDUklQVCBTTUFMTCBTXQorYWxpYXMJXFUwMDAxRDRDOQlceDc0CSMg8J2TiSBbTUFUSEVNQVRJQ0FMIFNDUklQVCBTTUFMTCBUXQorYWxpYXMJXFUwMDAxRDRDQQlceDc1CSMg8J2TiiBbTUFUSEVNQVRJQ0FMIFNDUklQVCBTTUFMTCBVXQorYWxpYXMJXFUwMDAxRDRDQglceDc2CSMg8J2TiyBbTUFUSEVNQVRJQ0FMIFNDUklQVCBTTUFMTCBWXQorYWxpYXMJXFUwMDAxRDRDQwlceDc3CSMg8J2TjCBbTUFUSEVNQVRJQ0FMIFNDUklQVCBTTUFMTCBXXQorYWxpYXMJXFUwMDAxRDRDRAlceDc4CSMg8J2TjSBbTUFUSEVNQVRJQ0FMIFNDUklQVCBTTUFMTCBYXQorYWxpYXMJXFUwMDAxRDRDRQlceDc5CSMg8J2TjiBbTUFUSEVNQVRJQ0FMIFNDUklQVCBTTUFMTCBZXQorYWxpYXMJXFUwMDAxRDRDRglceDdBCSMg8J2TjyBbTUFUSEVNQVRJQ0FMIFNDUklQVCBTTUFMTCBaXQorCithbGlhcwlcVTAwMDFENEQwCVx4NDEJIyDwnZOQIFtNQVRIRU1BVElDQUwgQk9MRCBTQ1JJUFQgQ0FQSVRBTCBBXQorYWxpYXMJXFUwMDAxRDREMQlceDQyCSMg8J2TkSBbTUFUSEVNQVRJQ0FMIEJPTEQgU0NSSVBUIENBUElUQUwgQl0KK2FsaWFzCVxVMDAwMUQ0RDIJXHg0MwkjIPCdk5IgW01BVEhFTUFUSUNBTCBCT0xEIFNDUklQVCBDQVBJVEFMIENdCithbGlhcwlcVTAwMDFENEQzCVx4NDQJIyDwnZOTIFtNQVRIRU1BVElDQUwgQk9MRCBTQ1JJUFQgQ0FQSVRBTCBEXQorYWxpYXMJXFUwMDAxRDRENAlceDQ1CSMg8J2TlCBbTUFUSEVNQVRJQ0FMIEJPTEQgU0NSSVBUIENBUElUQUwgRV0KK2FsaWFzCVxVMDAwMUQ0RDUJXHg0NgkjIPCdk5UgW01BVEhFTUFUSUNBTCBCT0xEIFNDUklQVCBDQVBJVEFMIEZdCithbGlhcwlcVTAwMDFENEQ2CVx4NDcJIyDwnZOWIFtNQVRIRU1BVElDQUwgQk9MRCBTQ1JJUFQgQ0FQSVRBTCBHXQorYWxpYXMJXFUwMDAxRDRENwlceDQ4CSMg8J2TlyBbTUFUSEVNQVRJQ0FMIEJPTEQgU0NSSVBUIENBUElUQUwgSF0KK2FsaWFzCVxVMDAwMUQ0RDgJXHg0OQkjIPCdk5ggW01BVEhFTUFUSUNBTCBCT0xEIFNDUklQVCBDQVBJVEFMIEldCithbGlhcwlcVTAwMDFENEQ5CVx4NEEJIyDwnZOZIFtNQVRIRU1BVElDQUwgQk9MRCBTQ1JJUFQgQ0FQSVRBTCBKXQorYWxpYXMJXFUwMDAxRDREQQlceDRCCSMg8J2TmiBbTUFUSEVNQVRJQ0FMIEJPTEQgU0NSSVBUIENBUElUQUwgS10KK2FsaWFzCVxVMDAwMUQ0REIJXHg0QwkjIPCdk5sgW01BVEhFTUFUSUNBTCBCT0xEIFNDUklQVCBDQVBJVEFMIExdCithbGlhcwlcVTAwMDFENERDCVx4NEQJIyDwnZOcIFtNQVRIRU1BVElDQUwgQk9MRCBTQ1JJUFQgQ0FQSVRBTCBNXQorYWxpYXMJXFUwMDAxRDRERAlceDRFCSMg8J2TnSBbTUFUSEVNQVRJQ0FMIEJPTEQgU0NSSVBUIENBUElUQUwgTl0KK2FsaWFzCVxVMDAwMUQ0REUJXHg0RgkjIPCdk54gW01BVEhFTUFUSUNBTCBCT0xEIFNDUklQVCBDQVBJVEFMIE9dCithbGlhcwlcVTAwMDFENERGCVx4NTAJIyDwnZOfIFtNQVRIRU1BVElDQUwgQk9MRCBTQ1JJUFQgQ0FQSVRBTCBQXQorYWxpYXMJXFUwMDAxRDRFMAlceDUxCSMg8J2ToCBbTUFUSEVNQVRJQ0FMIEJPTEQgU0NSSVBUIENBUElUQUwgUV0KK2FsaWFzCVxVMDAwMUQ0RTEJXHg1MgkjIPCdk6EgW01BVEhFTUFUSUNBTCBCT0xEIFNDUklQVCBDQVBJVEFMIFJdCithbGlhcwlcVTAwMDFENEUyCVx4NTMJIyDwnZOiIFtNQVRIRU1BVElDQUwgQk9MRCBTQ1JJUFQgQ0FQSVRBTCBTXQorYWxpYXMJXFUwMDAxRDRFMwlceDU0CSMg8J2ToyBbTUFUSEVNQVRJQ0FMIEJPTEQgU0NSSVBUIENBUElUQUwgVF0KK2FsaWFzCVxVMDAwMUQ0RTQJXHg1NQkjIPCdk6QgW01BVEhFTUFUSUNBTCBCT0xEIFNDUklQVCBDQVBJVEFMIFVdCithbGlhcwlcVTAwMDFENEU1CVx4NTYJIyDwnZOlIFtNQVRIRU1BVElDQUwgQk9MRCBTQ1JJUFQgQ0FQSVRBTCBWXQorYWxpYXMJXFUwMDAxRDRFNglceDU3CSMg8J2TpiBbTUFUSEVNQVRJQ0FMIEJPTEQgU0NSSVBUIENBUElUQUwgV10KK2FsaWFzCVxVMDAwMUQ0RTcJXHg1OAkjIPCdk6cgW01BVEhFTUFUSUNBTCBCT0xEIFNDUklQVCBDQVBJVEFMIFhdCithbGlhcwlcVTAwMDFENEU4CVx4NTkJIyDwnZOoIFtNQVRIRU1BVElDQUwgQk9MRCBTQ1JJUFQgQ0FQSVRBTCBZXQorYWxpYXMJXFUwMDAxRDRFOQlceDVBCSMg8J2TqSBbTUFUSEVNQVRJQ0FMIEJPTEQgU0NSSVBUIENBUElUQUwgWl0KKworYWxpYXMJXFUwMDAxRDRFQQlceDYxCSMg8J2TqiBbTUFUSEVNQVRJQ0FMIEJPTEQgU0NSSVBUIFNNQUxMIEFdCithbGlhcwlcVTAwMDFENEVCCVx4NjIJIyDwnZOrIFtNQVRIRU1BVElDQUwgQk9MRCBTQ1JJUFQgU01BTEwgQl0KK2FsaWFzCVxVMDAwMUQ0RUMJXHg2MwkjIPCdk6wgW01BVEhFTUFUSUNBTCBCT0xEIFNDUklQVCBTTUFMTCBDXQorYWxpYXMJXFUwMDAxRDRFRAlceDY0CSMg8J2TrSBbTUFUSEVNQVRJQ0FMIEJPTEQgU0NSSVBUIFNNQUxMIERdCithbGlhcwlcVTAwMDFENEVFCVx4NjUJIyDwnZOuIFtNQVRIRU1BVElDQUwgQk9MRCBTQ1JJUFQgU01BTEwgRV0KK2FsaWFzCVxVMDAwMUQ0RUYJXHg2NgkjIPCdk68gW01BVEhFTUFUSUNBTCBCT0xEIFNDUklQVCBTTUFMTCBGXQorYWxpYXMJXFUwMDAxRDRGMAlceDY3CSMg8J2TsCBbTUFUSEVNQVRJQ0FMIEJPTEQgU0NSSVBUIFNNQUxMIEddCithbGlhcwlcVTAwMDFENEYxCVx4NjgJIyDwnZOxIFtNQVRIRU1BVElDQUwgQk9MRCBTQ1JJUFQgU01BTEwgSF0KK2FsaWFzCVxVMDAwMUQ0RjIJXHg2OQkjIPCdk7IgW01BVEhFTUFUSUNBTCBCT0xEIFNDUklQVCBTTUFMTCBJXQorYWxpYXMJXFUwMDAxRDRGMwlceDZBCSMg8J2TsyBbTUFUSEVNQVRJQ0FMIEJPTEQgU0NSSVBUIFNNQUxMIEpdCithbGlhcwlcVTAwMDFENEY0CVx4NkIJIyDwnZO0IFtNQVRIRU1BVElDQUwgQk9MRCBTQ1JJUFQgU01BTEwgS10KK2FsaWFzCVxVMDAwMUQ0RjUJXHg2QwkjIPCdk7UgW01BVEhFTUFUSUNBTCBCT0xEIFNDUklQVCBTTUFMTCBMXQorYWxpYXMJXFUwMDAxRDRGNglceDZECSMg8J2TtiBbTUFUSEVNQVRJQ0FMIEJPTEQgU0NSSVBUIFNNQUxMIE1dCithbGlhcwlcVTAwMDFENEY3CVx4NkUJIyDwnZO3IFtNQVRIRU1BVElDQUwgQk9MRCBTQ1JJUFQgU01BTEwgTl0KK2FsaWFzCVxVMDAwMUQ0RjgJXHg2RgkjIPCdk7ggW01BVEhFTUFUSUNBTCBCT0xEIFNDUklQVCBTTUFMTCBPXQorYWxpYXMJXFUwMDAxRDRGOQlceDcwCSMg8J2TuSBbTUFUSEVNQVRJQ0FMIEJPTEQgU0NSSVBUIFNNQUxMIFBdCithbGlhcwlcVTAwMDFENEZBCVx4NzEJIyDwnZO6IFtNQVRIRU1BVElDQUwgQk9MRCBTQ1JJUFQgU01BTEwgUV0KK2FsaWFzCVxVMDAwMUQ0RkIJXHg3MgkjIPCdk7sgW01BVEhFTUFUSUNBTCBCT0xEIFNDUklQVCBTTUFMTCBSXQorYWxpYXMJXFUwMDAxRDRGQwlceDczCSMg8J2TvCBbTUFUSEVNQVRJQ0FMIEJPTEQgU0NSSVBUIFNNQUxMIFNdCithbGlhcwlcVTAwMDFENEZECVx4NzQJIyDwnZO9IFtNQVRIRU1BVElDQUwgQk9MRCBTQ1JJUFQgU01BTEwgVF0KK2FsaWFzCVxVMDAwMUQ0RkUJXHg3NQkjIPCdk74gW01BVEhFTUFUSUNBTCBCT0xEIFNDUklQVCBTTUFMTCBVXQorYWxpYXMJXFUwMDAxRDRGRglceDc2CSMg8J2TvyBbTUFUSEVNQVRJQ0FMIEJPTEQgU0NSSVBUIFNNQUxMIFZdCithbGlhcwlcVTAwMDFENTAwCVx4NzcJIyDwnZSAIFtNQVRIRU1BVElDQUwgQk9MRCBTQ1JJUFQgU01BTEwgV10KK2FsaWFzCVxVMDAwMUQ1MDEJXHg3OAkjIPCdlIEgW01BVEhFTUFUSUNBTCBCT0xEIFNDUklQVCBTTUFMTCBYXQorYWxpYXMJXFUwMDAxRDUwMglceDc5CSMg8J2UgiBbTUFUSEVNQVRJQ0FMIEJPTEQgU0NSSVBUIFNNQUxMIFldCithbGlhcwlcVTAwMDFENTAzCVx4N0EJIyDwnZSDIFtNQVRIRU1BVElDQUwgQk9MRCBTQ1JJUFQgU01BTEwgWl0KKworYWxpYXMJXFUwMDAxRDUwNAlceDQxCSMg8J2UhCBbTUFUSEVNQVRJQ0FMIEZSQUtUVVIgQ0FQSVRBTCBBXQorYWxpYXMJXFUwMDAxRDUwNQlceDQyCSMg8J2UhSBbTUFUSEVNQVRJQ0FMIEZSQUtUVVIgQ0FQSVRBTCBCXQorYWxpYXMJXFUwMDAxRDUwNglceDQzCSMgICBbPHVuYXNzaWduZWQtMUQ1MDY+XQorYWxpYXMJXFUwMDAxRDUwNwlceDQ0CSMg8J2UhyBbTUFUSEVNQVRJQ0FMIEZSQUtUVVIgQ0FQSVRBTCBEXQorYWxpYXMJXFUwMDAxRDUwOAlceDQ1CSMg8J2UiCBbTUFUSEVNQVRJQ0FMIEZSQUtUVVIgQ0FQSVRBTCBFXQorYWxpYXMJXFUwMDAxRDUwOQlceDQ2CSMg8J2UiSBbTUFUSEVNQVRJQ0FMIEZSQUtUVVIgQ0FQSVRBTCBGXQorYWxpYXMJXFUwMDAxRDUwQQlceDQ3CSMg8J2UiiBbTUFUSEVNQVRJQ0FMIEZSQUtUVVIgQ0FQSVRBTCBHXQorYWxpYXMJXFUwMDAxRDUwQglceDQ4CSMgICBbPHVuYXNzaWduZWQtMUQ1MEI+XQorYWxpYXMJXFUwMDAxRDUwQwlceDQ5CSMgICBbPHVuYXNzaWduZWQtMUQ1MEM+XQorYWxpYXMJXFUwMDAxRDUwRAlceDRBCSMg8J2UjSBbTUFUSEVNQVRJQ0FMIEZSQUtUVVIgQ0FQSVRBTCBKXQorYWxpYXMJXFUwMDAxRDUwRQlceDRCCSMg8J2UjiBbTUFUSEVNQVRJQ0FMIEZSQUtUVVIgQ0FQSVRBTCBLXQorYWxpYXMJXFUwMDAxRDUwRglceDRDCSMg8J2UjyBbTUFUSEVNQVRJQ0FMIEZSQUtUVVIgQ0FQSVRBTCBMXQorYWxpYXMJXFUwMDAxRDUxMAlceDRECSMg8J2UkCBbTUFUSEVNQVRJQ0FMIEZSQUtUVVIgQ0FQSVRBTCBNXQorYWxpYXMJXFUwMDAxRDUxMQlceDRFCSMg8J2UkSBbTUFUSEVNQVRJQ0FMIEZSQUtUVVIgQ0FQSVRBTCBOXQorYWxpYXMJXFUwMDAxRDUxMglceDRGCSMg8J2UkiBbTUFUSEVNQVRJQ0FMIEZSQUtUVVIgQ0FQSVRBTCBPXQorYWxpYXMJXFUwMDAxRDUxMwlceDUwCSMg8J2UkyBbTUFUSEVNQVRJQ0FMIEZSQUtUVVIgQ0FQSVRBTCBQXQorYWxpYXMJXFUwMDAxRDUxNAlceDUxCSMg8J2UlCBbTUFUSEVNQVRJQ0FMIEZSQUtUVVIgQ0FQSVRBTCBRXQorYWxpYXMJXFUwMDAxRDUxNQlceDUyCSMgICBbPHVuYXNzaWduZWQtMUQ1MTU+XQorYWxpYXMJXFUwMDAxRDUxNglceDUzCSMg8J2UliBbTUFUSEVNQVRJQ0FMIEZSQUtUVVIgQ0FQSVRBTCBTXQorYWxpYXMJXFUwMDAxRDUxNwlceDU0CSMg8J2UlyBbTUFUSEVNQVRJQ0FMIEZSQUtUVVIgQ0FQSVRBTCBUXQorYWxpYXMJXFUwMDAxRDUxOAlceDU1CSMg8J2UmCBbTUFUSEVNQVRJQ0FMIEZSQUtUVVIgQ0FQSVRBTCBVXQorYWxpYXMJXFUwMDAxRDUxOQlceDU2CSMg8J2UmSBbTUFUSEVNQVRJQ0FMIEZSQUtUVVIgQ0FQSVRBTCBWXQorYWxpYXMJXFUwMDAxRDUxQQlceDU3CSMg8J2UmiBbTUFUSEVNQVRJQ0FMIEZSQUtUVVIgQ0FQSVRBTCBXXQorYWxpYXMJXFUwMDAxRDUxQglceDU4CSMg8J2UmyBbTUFUSEVNQVRJQ0FMIEZSQUtUVVIgQ0FQSVRBTCBYXQorYWxpYXMJXFUwMDAxRDUxQwlceDU5CSMg8J2UnCBbTUFUSEVNQVRJQ0FMIEZSQUtUVVIgQ0FQSVRBTCBZXQorYWxpYXMJXFUwMDAxRDUxRAlceDVBCSMgICBbPHVuYXNzaWduZWQtMUQ1MUQ+XQorCithbGlhcwlcVTAwMDFENTFFCVx4NjEJIyDwnZSeIFtNQVRIRU1BVElDQUwgRlJBS1RVUiBTTUFMTCBBXQorYWxpYXMJXFUwMDAxRDUxRglceDYyCSMg8J2UnyBbTUFUSEVNQVRJQ0FMIEZSQUtUVVIgU01BTEwgQl0KK2FsaWFzCVxVMDAwMUQ1MjAJXHg2MwkjIPCdlKAgW01BVEhFTUFUSUNBTCBGUkFLVFVSIFNNQUxMIENdCithbGlhcwlcVTAwMDFENTIxCVx4NjQJIyDwnZShIFtNQVRIRU1BVElDQUwgRlJBS1RVUiBTTUFMTCBEXQorYWxpYXMJXFUwMDAxRDUyMglceDY1CSMg8J2UoiBbTUFUSEVNQVRJQ0FMIEZSQUtUVVIgU01BTEwgRV0KK2FsaWFzCVxVMDAwMUQ1MjMJXHg2NgkjIPCdlKMgW01BVEhFTUFUSUNBTCBGUkFLVFVSIFNNQUxMIEZdCithbGlhcwlcVTAwMDFENTI0CVx4NjcJIyDwnZSkIFtNQVRIRU1BVElDQUwgRlJBS1RVUiBTTUFMTCBHXQorYWxpYXMJXFUwMDAxRDUyNQlceDY4CSMg8J2UpSBbTUFUSEVNQVRJQ0FMIEZSQUtUVVIgU01BTEwgSF0KK2FsaWFzCVxVMDAwMUQ1MjYJXHg2OQkjIPCdlKYgW01BVEhFTUFUSUNBTCBGUkFLVFVSIFNNQUxMIEldCithbGlhcwlcVTAwMDFENTI3CVx4NkEJIyDwnZSnIFtNQVRIRU1BVElDQUwgRlJBS1RVUiBTTUFMTCBKXQorYWxpYXMJXFUwMDAxRDUyOAlceDZCCSMg8J2UqCBbTUFUSEVNQVRJQ0FMIEZSQUtUVVIgU01BTEwgS10KK2FsaWFzCVxVMDAwMUQ1MjkJXHg2QwkjIPCdlKkgW01BVEhFTUFUSUNBTCBGUkFLVFVSIFNNQUxMIExdCithbGlhcwlcVTAwMDFENTJBCVx4NkQJIyDwnZSqIFtNQVRIRU1BVElDQUwgRlJBS1RVUiBTTUFMTCBNXQorYWxpYXMJXFUwMDAxRDUyQglceDZFCSMg8J2UqyBbTUFUSEVNQVRJQ0FMIEZSQUtUVVIgU01BTEwgTl0KK2FsaWFzCVxVMDAwMUQ1MkMJXHg2RgkjIPCdlKwgW01BVEhFTUFUSUNBTCBGUkFLVFVSIFNNQUxMIE9dCithbGlhcwlcVTAwMDFENTJECVx4NzAJIyDwnZStIFtNQVRIRU1BVElDQUwgRlJBS1RVUiBTTUFMTCBQXQorYWxpYXMJXFUwMDAxRDUyRQlceDcxCSMg8J2UriBbTUFUSEVNQVRJQ0FMIEZSQUtUVVIgU01BTEwgUV0KK2FsaWFzCVxVMDAwMUQ1MkYJXHg3MgkjIPCdlK8gW01BVEhFTUFUSUNBTCBGUkFLVFVSIFNNQUxMIFJdCithbGlhcwlcVTAwMDFENTMwCVx4NzMJIyDwnZSwIFtNQVRIRU1BVElDQUwgRlJBS1RVUiBTTUFMTCBTXQorYWxpYXMJXFUwMDAxRDUzMQlceDc0CSMg8J2UsSBbTUFUSEVNQVRJQ0FMIEZSQUtUVVIgU01BTEwgVF0KK2FsaWFzCVxVMDAwMUQ1MzIJXHg3NQkjIPCdlLIgW01BVEhFTUFUSUNBTCBGUkFLVFVSIFNNQUxMIFVdCithbGlhcwlcVTAwMDFENTMzCVx4NzYJIyDwnZSzIFtNQVRIRU1BVElDQUwgRlJBS1RVUiBTTUFMTCBWXQorYWxpYXMJXFUwMDAxRDUzNAlceDc3CSMg8J2UtCBbTUFUSEVNQVRJQ0FMIEZSQUtUVVIgU01BTEwgV10KK2FsaWFzCVxVMDAwMUQ1MzUJXHg3OAkjIPCdlLUgW01BVEhFTUFUSUNBTCBGUkFLVFVSIFNNQUxMIFhdCithbGlhcwlcVTAwMDFENTM2CVx4NzkJIyDwnZS2IFtNQVRIRU1BVElDQUwgRlJBS1RVUiBTTUFMTCBZXQorYWxpYXMJXFUwMDAxRDUzNwlceDdBCSMg8J2UtyBbTUFUSEVNQVRJQ0FMIEZSQUtUVVIgU01BTEwgWl0KKworYWxpYXMJXFUwMDAxRDUzOAlceDQxCSMg8J2UuCBbTUFUSEVNQVRJQ0FMIERPVUJMRS1TVFJVQ0sgQ0FQSVRBTCBBXQorYWxpYXMJXFUwMDAxRDUzOQlceDQyCSMg8J2UuSBbTUFUSEVNQVRJQ0FMIERPVUJMRS1TVFJVQ0sgQ0FQSVRBTCBCXQorYWxpYXMJXFUwMDAxRDUzQQlceDQzCSMgICBbPHVuYXNzaWduZWQtMUQ1M0E+XQorYWxpYXMJXFUwMDAxRDUzQglceDQ0CSMg8J2UuyBbTUFUSEVNQVRJQ0FMIERPVUJMRS1TVFJVQ0sgQ0FQSVRBTCBEXQorYWxpYXMJXFUwMDAxRDUzQwlceDQ1CSMg8J2UvCBbTUFUSEVNQVRJQ0FMIERPVUJMRS1TVFJVQ0sgQ0FQSVRBTCBFXQorYWxpYXMJXFUwMDAxRDUzRAlceDQ2CSMg8J2UvSBbTUFUSEVNQVRJQ0FMIERPVUJMRS1TVFJVQ0sgQ0FQSVRBTCBGXQorYWxpYXMJXFUwMDAxRDUzRQlceDQ3CSMg8J2UviBbTUFUSEVNQVRJQ0FMIERPVUJMRS1TVFJVQ0sgQ0FQSVRBTCBHXQorYWxpYXMJXFUwMDAxRDUzRglceDQ4CSMgICBbPHVuYXNzaWduZWQtMUQ1M0Y+XQorYWxpYXMJXFUwMDAxRDU0MAlceDQ5CSMg8J2VgCBbTUFUSEVNQVRJQ0FMIERPVUJMRS1TVFJVQ0sgQ0FQSVRBTCBJXQorYWxpYXMJXFUwMDAxRDU0MQlceDRBCSMg8J2VgSBbTUFUSEVNQVRJQ0FMIERPVUJMRS1TVFJVQ0sgQ0FQSVRBTCBKXQorYWxpYXMJXFUwMDAxRDU0MglceDRCCSMg8J2VgiBbTUFUSEVNQVRJQ0FMIERPVUJMRS1TVFJVQ0sgQ0FQSVRBTCBLXQorYWxpYXMJXFUwMDAxRDU0MwlceDRDCSMg8J2VgyBbTUFUSEVNQVRJQ0FMIERPVUJMRS1TVFJVQ0sgQ0FQSVRBTCBMXQorYWxpYXMJXFUwMDAxRDU0NAlceDRECSMg8J2VhCBbTUFUSEVNQVRJQ0FMIERPVUJMRS1TVFJVQ0sgQ0FQSVRBTCBNXQorYWxpYXMJXFUwMDAxRDU0NQlceDRFCSMgICBbPHVuYXNzaWduZWQtMUQ1NDU+XQorYWxpYXMJXFUwMDAxRDU0NglceDRGCSMg8J2VhiBbTUFUSEVNQVRJQ0FMIERPVUJMRS1TVFJVQ0sgQ0FQSVRBTCBPXQorYWxpYXMJXFUwMDAxRDU0NwlceDUwCSMgICBbPHVuYXNzaWduZWQtMUQ1NDc+XQorYWxpYXMJXFUwMDAxRDU0OAlceDUxCSMgICBbPHVuYXNzaWduZWQtMUQ1NDg+XQorYWxpYXMJXFUwMDAxRDU0OQlceDUyCSMgICBbPHVuYXNzaWduZWQtMUQ1NDk+XQorYWxpYXMJXFUwMDAxRDU0QQlceDUzCSMg8J2ViiBbTUFUSEVNQVRJQ0FMIERPVUJMRS1TVFJVQ0sgQ0FQSVRBTCBTXQorYWxpYXMJXFUwMDAxRDU0QglceDU0CSMg8J2ViyBbTUFUSEVNQVRJQ0FMIERPVUJMRS1TVFJVQ0sgQ0FQSVRBTCBUXQorYWxpYXMJXFUwMDAxRDU0QwlceDU1CSMg8J2VjCBbTUFUSEVNQVRJQ0FMIERPVUJMRS1TVFJVQ0sgQ0FQSVRBTCBVXQorYWxpYXMJXFUwMDAxRDU0RAlceDU2CSMg8J2VjSBbTUFUSEVNQVRJQ0FMIERPVUJMRS1TVFJVQ0sgQ0FQSVRBTCBWXQorYWxpYXMJXFUwMDAxRDU0RQlceDU3CSMg8J2VjiBbTUFUSEVNQVRJQ0FMIERPVUJMRS1TVFJVQ0sgQ0FQSVRBTCBXXQorYWxpYXMJXFUwMDAxRDU0RglceDU4CSMg8J2VjyBbTUFUSEVNQVRJQ0FMIERPVUJMRS1TVFJVQ0sgQ0FQSVRBTCBYXQorYWxpYXMJXFUwMDAxRDU1MAlceDU5CSMg8J2VkCBbTUFUSEVNQVRJQ0FMIERPVUJMRS1TVFJVQ0sgQ0FQSVRBTCBZXQorYWxpYXMJXFUwMDAxRDU1MQlceDVBCSMgICBbPHVuYXNzaWduZWQtMUQ1NTE+XQorCithbGlhcwlcVTAwMDFENTUyCVx4NjEJIyDwnZWSIFtNQVRIRU1BVElDQUwgRE9VQkxFLVNUUlVDSyBTTUFMTCBBXQorYWxpYXMJXFUwMDAxRDU1MwlceDYyCSMg8J2VkyBbTUFUSEVNQVRJQ0FMIERPVUJMRS1TVFJVQ0sgU01BTEwgQl0KK2FsaWFzCVxVMDAwMUQ1NTQJXHg2MwkjIPCdlZQgW01BVEhFTUFUSUNBTCBET1VCTEUtU1RSVUNLIFNNQUxMIENdCithbGlhcwlcVTAwMDFENTU1CVx4NjQJIyDwnZWVIFtNQVRIRU1BVElDQUwgRE9VQkxFLVNUUlVDSyBTTUFMTCBEXQorYWxpYXMJXFUwMDAxRDU1NglceDY1CSMg8J2VliBbTUFUSEVNQVRJQ0FMIERPVUJMRS1TVFJVQ0sgU01BTEwgRV0KK2FsaWFzCVxVMDAwMUQ1NTcJXHg2NgkjIPCdlZcgW01BVEhFTUFUSUNBTCBET1VCTEUtU1RSVUNLIFNNQUxMIEZdCithbGlhcwlcVTAwMDFENTU4CVx4NjcJIyDwnZWYIFtNQVRIRU1BVElDQUwgRE9VQkxFLVNUUlVDSyBTTUFMTCBHXQorYWxpYXMJXFUwMDAxRDU1OQlceDY4CSMg8J2VmSBbTUFUSEVNQVRJQ0FMIERPVUJMRS1TVFJVQ0sgU01BTEwgSF0KK2FsaWFzCVxVMDAwMUQ1NUEJXHg2OQkjIPCdlZogW01BVEhFTUFUSUNBTCBET1VCTEUtU1RSVUNLIFNNQUxMIEldCithbGlhcwlcVTAwMDFENTVCCVx4NkEJIyDwnZWbIFtNQVRIRU1BVElDQUwgRE9VQkxFLVNUUlVDSyBTTUFMTCBKXQorYWxpYXMJXFUwMDAxRDU1QwlceDZCCSMg8J2VnCBbTUFUSEVNQVRJQ0FMIERPVUJMRS1TVFJVQ0sgU01BTEwgS10KK2FsaWFzCVxVMDAwMUQ1NUQJXHg2QwkjIPCdlZ0gW01BVEhFTUFUSUNBTCBET1VCTEUtU1RSVUNLIFNNQUxMIExdCithbGlhcwlcVTAwMDFENTVFCVx4NkQJIyDwnZWeIFtNQVRIRU1BVElDQUwgRE9VQkxFLVNUUlVDSyBTTUFMTCBNXQorYWxpYXMJXFUwMDAxRDU1RglceDZFCSMg8J2VnyBbTUFUSEVNQVRJQ0FMIERPVUJMRS1TVFJVQ0sgU01BTEwgTl0KK2FsaWFzCVxVMDAwMUQ1NjAJXHg2RgkjIPCdlaAgW01BVEhFTUFUSUNBTCBET1VCTEUtU1RSVUNLIFNNQUxMIE9dCithbGlhcwlcVTAwMDFENTYxCVx4NzAJIyDwnZWhIFtNQVRIRU1BVElDQUwgRE9VQkxFLVNUUlVDSyBTTUFMTCBQXQorYWxpYXMJXFUwMDAxRDU2MglceDcxCSMg8J2VoiBbTUFUSEVNQVRJQ0FMIERPVUJMRS1TVFJVQ0sgU01BTEwgUV0KK2FsaWFzCVxVMDAwMUQ1NjMJXHg3MgkjIPCdlaMgW01BVEhFTUFUSUNBTCBET1VCTEUtU1RSVUNLIFNNQUxMIFJdCithbGlhcwlcVTAwMDFENTY0CVx4NzMJIyDwnZWkIFtNQVRIRU1BVElDQUwgRE9VQkxFLVNUUlVDSyBTTUFMTCBTXQorYWxpYXMJXFUwMDAxRDU2NQlceDc0CSMg8J2VpSBbTUFUSEVNQVRJQ0FMIERPVUJMRS1TVFJVQ0sgU01BTEwgVF0KK2FsaWFzCVxVMDAwMUQ1NjYJXHg3NQkjIPCdlaYgW01BVEhFTUFUSUNBTCBET1VCTEUtU1RSVUNLIFNNQUxMIFVdCithbGlhcwlcVTAwMDFENTY3CVx4NzYJIyDwnZWnIFtNQVRIRU1BVElDQUwgRE9VQkxFLVNUUlVDSyBTTUFMTCBWXQorYWxpYXMJXFUwMDAxRDU2OAlceDc3CSMg8J2VqCBbTUFUSEVNQVRJQ0FMIERPVUJMRS1TVFJVQ0sgU01BTEwgV10KK2FsaWFzCVxVMDAwMUQ1NjkJXHg3OAkjIPCdlakgW01BVEhFTUFUSUNBTCBET1VCTEUtU1RSVUNLIFNNQUxMIFhdCithbGlhcwlcVTAwMDFENTZBCVx4NzkJIyDwnZWqIFtNQVRIRU1BVElDQUwgRE9VQkxFLVNUUlVDSyBTTUFMTCBZXQorYWxpYXMJXFUwMDAxRDU2QglceDdBCSMg8J2VqyBbTUFUSEVNQVRJQ0FMIERPVUJMRS1TVFJVQ0sgU01BTEwgWl0KKworYWxpYXMJXFUwMDAxRDU2QwlceDQxCSMg8J2VrCBbTUFUSEVNQVRJQ0FMIEJPTEQgRlJBS1RVUiBDQVBJVEFMIEFdCithbGlhcwlcVTAwMDFENTZECVx4NDIJIyDwnZWtIFtNQVRIRU1BVElDQUwgQk9MRCBGUkFLVFVSIENBUElUQUwgQl0KK2FsaWFzCVxVMDAwMUQ1NkUJXHg0MwkjIPCdla4gW01BVEhFTUFUSUNBTCBCT0xEIEZSQUtUVVIgQ0FQSVRBTCBDXQorYWxpYXMJXFUwMDAxRDU2RglceDQ0CSMg8J2VryBbTUFUSEVNQVRJQ0FMIEJPTEQgRlJBS1RVUiBDQVBJVEFMIERdCithbGlhcwlcVTAwMDFENTcwCVx4NDUJIyDwnZWwIFtNQVRIRU1BVElDQUwgQk9MRCBGUkFLVFVSIENBUElUQUwgRV0KK2FsaWFzCVxVMDAwMUQ1NzEJXHg0NgkjIPCdlbEgW01BVEhFTUFUSUNBTCBCT0xEIEZSQUtUVVIgQ0FQSVRBTCBGXQorYWxpYXMJXFUwMDAxRDU3MglceDQ3CSMg8J2VsiBbTUFUSEVNQVRJQ0FMIEJPTEQgRlJBS1RVUiBDQVBJVEFMIEddCithbGlhcwlcVTAwMDFENTczCVx4NDgJIyDwnZWzIFtNQVRIRU1BVElDQUwgQk9MRCBGUkFLVFVSIENBUElUQUwgSF0KK2FsaWFzCVxVMDAwMUQ1NzQJXHg0OQkjIPCdlbQgW01BVEhFTUFUSUNBTCBCT0xEIEZSQUtUVVIgQ0FQSVRBTCBJXQorYWxpYXMJXFUwMDAxRDU3NQlceDRBCSMg8J2VtSBbTUFUSEVNQVRJQ0FMIEJPTEQgRlJBS1RVUiBDQVBJVEFMIEpdCithbGlhcwlcVTAwMDFENTc2CVx4NEIJIyDwnZW2IFtNQVRIRU1BVElDQUwgQk9MRCBGUkFLVFVSIENBUElUQUwgS10KK2FsaWFzCVxVMDAwMUQ1NzcJXHg0QwkjIPCdlbcgW01BVEhFTUFUSUNBTCBCT0xEIEZSQUtUVVIgQ0FQSVRBTCBMXQorYWxpYXMJXFUwMDAxRDU3OAlceDRECSMg8J2VuCBbTUFUSEVNQVRJQ0FMIEJPTEQgRlJBS1RVUiBDQVBJVEFMIE1dCithbGlhcwlcVTAwMDFENTc5CVx4NEUJIyDwnZW5IFtNQVRIRU1BVElDQUwgQk9MRCBGUkFLVFVSIENBUElUQUwgTl0KK2FsaWFzCVxVMDAwMUQ1N0EJXHg0RgkjIPCdlbogW01BVEhFTUFUSUNBTCBCT0xEIEZSQUtUVVIgQ0FQSVRBTCBPXQorYWxpYXMJXFUwMDAxRDU3QglceDUwCSMg8J2VuyBbTUFUSEVNQVRJQ0FMIEJPTEQgRlJBS1RVUiBDQVBJVEFMIFBdCithbGlhcwlcVTAwMDFENTdDCVx4NTEJIyDwnZW8IFtNQVRIRU1BVElDQUwgQk9MRCBGUkFLVFVSIENBUElUQUwgUV0KK2FsaWFzCVxVMDAwMUQ1N0QJXHg1MgkjIPCdlb0gW01BVEhFTUFUSUNBTCBCT0xEIEZSQUtUVVIgQ0FQSVRBTCBSXQorYWxpYXMJXFUwMDAxRDU3RQlceDUzCSMg8J2VviBbTUFUSEVNQVRJQ0FMIEJPTEQgRlJBS1RVUiBDQVBJVEFMIFNdCithbGlhcwlcVTAwMDFENTdGCVx4NTQJIyDwnZW/IFtNQVRIRU1BVElDQUwgQk9MRCBGUkFLVFVSIENBUElUQUwgVF0KK2FsaWFzCVxVMDAwMUQ1ODAJXHg1NQkjIPCdloAgW01BVEhFTUFUSUNBTCBCT0xEIEZSQUtUVVIgQ0FQSVRBTCBVXQorYWxpYXMJXFUwMDAxRDU4MQlceDU2CSMg8J2WgSBbTUFUSEVNQVRJQ0FMIEJPTEQgRlJBS1RVUiBDQVBJVEFMIFZdCithbGlhcwlcVTAwMDFENTgyCVx4NTcJIyDwnZaCIFtNQVRIRU1BVElDQUwgQk9MRCBGUkFLVFVSIENBUElUQUwgV10KK2FsaWFzCVxVMDAwMUQ1ODMJXHg1OAkjIPCdloMgW01BVEhFTUFUSUNBTCBCT0xEIEZSQUtUVVIgQ0FQSVRBTCBYXQorYWxpYXMJXFUwMDAxRDU4NAlceDU5CSMg8J2WhCBbTUFUSEVNQVRJQ0FMIEJPTEQgRlJBS1RVUiBDQVBJVEFMIFldCithbGlhcwlcVTAwMDFENTg1CVx4NUEJIyDwnZaFIFtNQVRIRU1BVElDQUwgQk9MRCBGUkFLVFVSIENBUElUQUwgWl0KKworYWxpYXMJXFUwMDAxRDU4NglceDYxCSMg8J2WhiBbTUFUSEVNQVRJQ0FMIEJPTEQgRlJBS1RVUiBTTUFMTCBBXQorYWxpYXMJXFUwMDAxRDU4NwlceDYyCSMg8J2WhyBbTUFUSEVNQVRJQ0FMIEJPTEQgRlJBS1RVUiBTTUFMTCBCXQorYWxpYXMJXFUwMDAxRDU4OAlceDYzCSMg8J2WiCBbTUFUSEVNQVRJQ0FMIEJPTEQgRlJBS1RVUiBTTUFMTCBDXQorYWxpYXMJXFUwMDAxRDU4OQlceDY0CSMg8J2WiSBbTUFUSEVNQVRJQ0FMIEJPTEQgRlJBS1RVUiBTTUFMTCBEXQorYWxpYXMJXFUwMDAxRDU4QQlceDY1CSMg8J2WiiBbTUFUSEVNQVRJQ0FMIEJPTEQgRlJBS1RVUiBTTUFMTCBFXQorYWxpYXMJXFUwMDAxRDU4QglceDY2CSMg8J2WiyBbTUFUSEVNQVRJQ0FMIEJPTEQgRlJBS1RVUiBTTUFMTCBGXQorYWxpYXMJXFUwMDAxRDU4QwlceDY3CSMg8J2WjCBbTUFUSEVNQVRJQ0FMIEJPTEQgRlJBS1RVUiBTTUFMTCBHXQorYWxpYXMJXFUwMDAxRDU4RAlceDY4CSMg8J2WjSBbTUFUSEVNQVRJQ0FMIEJPTEQgRlJBS1RVUiBTTUFMTCBIXQorYWxpYXMJXFUwMDAxRDU4RQlceDY5CSMg8J2WjiBbTUFUSEVNQVRJQ0FMIEJPTEQgRlJBS1RVUiBTTUFMTCBJXQorYWxpYXMJXFUwMDAxRDU4RglceDZBCSMg8J2WjyBbTUFUSEVNQVRJQ0FMIEJPTEQgRlJBS1RVUiBTTUFMTCBKXQorYWxpYXMJXFUwMDAxRDU5MAlceDZCCSMg8J2WkCBbTUFUSEVNQVRJQ0FMIEJPTEQgRlJBS1RVUiBTTUFMTCBLXQorYWxpYXMJXFUwMDAxRDU5MQlceDZDCSMg8J2WkSBbTUFUSEVNQVRJQ0FMIEJPTEQgRlJBS1RVUiBTTUFMTCBMXQorYWxpYXMJXFUwMDAxRDU5MglceDZECSMg8J2WkiBbTUFUSEVNQVRJQ0FMIEJPTEQgRlJBS1RVUiBTTUFMTCBNXQorYWxpYXMJXFUwMDAxRDU5MwlceDZFCSMg8J2WkyBbTUFUSEVNQVRJQ0FMIEJPTEQgRlJBS1RVUiBTTUFMTCBOXQorYWxpYXMJXFUwMDAxRDU5NAlceDZGCSMg8J2WlCBbTUFUSEVNQVRJQ0FMIEJPTEQgRlJBS1RVUiBTTUFMTCBPXQorYWxpYXMJXFUwMDAxRDU5NQlceDcwCSMg8J2WlSBbTUFUSEVNQVRJQ0FMIEJPTEQgRlJBS1RVUiBTTUFMTCBQXQorYWxpYXMJXFUwMDAxRDU5NglceDcxCSMg8J2WliBbTUFUSEVNQVRJQ0FMIEJPTEQgRlJBS1RVUiBTTUFMTCBRXQorYWxpYXMJXFUwMDAxRDU5NwlceDcyCSMg8J2WlyBbTUFUSEVNQVRJQ0FMIEJPTEQgRlJBS1RVUiBTTUFMTCBSXQorYWxpYXMJXFUwMDAxRDU5OAlceDczCSMg8J2WmCBbTUFUSEVNQVRJQ0FMIEJPTEQgRlJBS1RVUiBTTUFMTCBTXQorYWxpYXMJXFUwMDAxRDU5OQlceDc0CSMg8J2WmSBbTUFUSEVNQVRJQ0FMIEJPTEQgRlJBS1RVUiBTTUFMTCBUXQorYWxpYXMJXFUwMDAxRDU5QQlceDc1CSMg8J2WmiBbTUFUSEVNQVRJQ0FMIEJPTEQgRlJBS1RVUiBTTUFMTCBVXQorYWxpYXMJXFUwMDAxRDU5QglceDc2CSMg8J2WmyBbTUFUSEVNQVRJQ0FMIEJPTEQgRlJBS1RVUiBTTUFMTCBWXQorYWxpYXMJXFUwMDAxRDU5QwlceDc3CSMg8J2WnCBbTUFUSEVNQVRJQ0FMIEJPTEQgRlJBS1RVUiBTTUFMTCBXXQorYWxpYXMJXFUwMDAxRDU5RAlceDc4CSMg8J2WnSBbTUFUSEVNQVRJQ0FMIEJPTEQgRlJBS1RVUiBTTUFMTCBYXQorYWxpYXMJXFUwMDAxRDU5RQlceDc5CSMg8J2WniBbTUFUSEVNQVRJQ0FMIEJPTEQgRlJBS1RVUiBTTUFMTCBZXQorYWxpYXMJXFUwMDAxRDU5RglceDdBCSMg8J2WnyBbTUFUSEVNQVRJQ0FMIEJPTEQgRlJBS1RVUiBTTUFMTCBaXQorCithbGlhcwlcVTAwMDFENUEwCVx4NDEJIyDwnZagIFtNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBDQVBJVEFMIEFdCithbGlhcwlcVTAwMDFENUExCVx4NDIJIyDwnZahIFtNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBDQVBJVEFMIEJdCithbGlhcwlcVTAwMDFENUEyCVx4NDMJIyDwnZaiIFtNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBDQVBJVEFMIENdCithbGlhcwlcVTAwMDFENUEzCVx4NDQJIyDwnZajIFtNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBDQVBJVEFMIERdCithbGlhcwlcVTAwMDFENUE0CVx4NDUJIyDwnZakIFtNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBDQVBJVEFMIEVdCithbGlhcwlcVTAwMDFENUE1CVx4NDYJIyDwnZalIFtNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBDQVBJVEFMIEZdCithbGlhcwlcVTAwMDFENUE2CVx4NDcJIyDwnZamIFtNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBDQVBJVEFMIEddCithbGlhcwlcVTAwMDFENUE3CVx4NDgJIyDwnZanIFtNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBDQVBJVEFMIEhdCithbGlhcwlcVTAwMDFENUE4CVx4NDkJIyDwnZaoIFtNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBDQVBJVEFMIEldCithbGlhcwlcVTAwMDFENUE5CVx4NEEJIyDwnZapIFtNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBDQVBJVEFMIEpdCithbGlhcwlcVTAwMDFENUFBCVx4NEIJIyDwnZaqIFtNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBDQVBJVEFMIEtdCithbGlhcwlcVTAwMDFENUFCCVx4NEMJIyDwnZarIFtNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBDQVBJVEFMIExdCithbGlhcwlcVTAwMDFENUFDCVx4NEQJIyDwnZasIFtNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBDQVBJVEFMIE1dCithbGlhcwlcVTAwMDFENUFECVx4NEUJIyDwnZatIFtNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBDQVBJVEFMIE5dCithbGlhcwlcVTAwMDFENUFFCVx4NEYJIyDwnZauIFtNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBDQVBJVEFMIE9dCithbGlhcwlcVTAwMDFENUFGCVx4NTAJIyDwnZavIFtNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBDQVBJVEFMIFBdCithbGlhcwlcVTAwMDFENUIwCVx4NTEJIyDwnZawIFtNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBDQVBJVEFMIFFdCithbGlhcwlcVTAwMDFENUIxCVx4NTIJIyDwnZaxIFtNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBDQVBJVEFMIFJdCithbGlhcwlcVTAwMDFENUIyCVx4NTMJIyDwnZayIFtNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBDQVBJVEFMIFNdCithbGlhcwlcVTAwMDFENUIzCVx4NTQJIyDwnZazIFtNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBDQVBJVEFMIFRdCithbGlhcwlcVTAwMDFENUI0CVx4NTUJIyDwnZa0IFtNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBDQVBJVEFMIFVdCithbGlhcwlcVTAwMDFENUI1CVx4NTYJIyDwnZa1IFtNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBDQVBJVEFMIFZdCithbGlhcwlcVTAwMDFENUI2CVx4NTcJIyDwnZa2IFtNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBDQVBJVEFMIFddCithbGlhcwlcVTAwMDFENUI3CVx4NTgJIyDwnZa3IFtNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBDQVBJVEFMIFhdCithbGlhcwlcVTAwMDFENUI4CVx4NTkJIyDwnZa4IFtNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBDQVBJVEFMIFldCithbGlhcwlcVTAwMDFENUI5CVx4NUEJIyDwnZa5IFtNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBDQVBJVEFMIFpdCisKK2FsaWFzCVxVMDAwMUQ1QkEJXHg2MQkjIPCdlrogW01BVEhFTUFUSUNBTCBTQU5TLVNFUklGIFNNQUxMIEFdCithbGlhcwlcVTAwMDFENUJCCVx4NjIJIyDwnZa7IFtNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBTTUFMTCBCXQorYWxpYXMJXFUwMDAxRDVCQwlceDYzCSMg8J2WvCBbTUFUSEVNQVRJQ0FMIFNBTlMtU0VSSUYgU01BTEwgQ10KK2FsaWFzCVxVMDAwMUQ1QkQJXHg2NAkjIPCdlr0gW01BVEhFTUFUSUNBTCBTQU5TLVNFUklGIFNNQUxMIERdCithbGlhcwlcVTAwMDFENUJFCVx4NjUJIyDwnZa+IFtNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBTTUFMTCBFXQorYWxpYXMJXFUwMDAxRDVCRglceDY2CSMg8J2WvyBbTUFUSEVNQVRJQ0FMIFNBTlMtU0VSSUYgU01BTEwgRl0KK2FsaWFzCVxVMDAwMUQ1QzAJXHg2NwkjIPCdl4AgW01BVEhFTUFUSUNBTCBTQU5TLVNFUklGIFNNQUxMIEddCithbGlhcwlcVTAwMDFENUMxCVx4NjgJIyDwnZeBIFtNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBTTUFMTCBIXQorYWxpYXMJXFUwMDAxRDVDMglceDY5CSMg8J2XgiBbTUFUSEVNQVRJQ0FMIFNBTlMtU0VSSUYgU01BTEwgSV0KK2FsaWFzCVxVMDAwMUQ1QzMJXHg2QQkjIPCdl4MgW01BVEhFTUFUSUNBTCBTQU5TLVNFUklGIFNNQUxMIEpdCithbGlhcwlcVTAwMDFENUM0CVx4NkIJIyDwnZeEIFtNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBTTUFMTCBLXQorYWxpYXMJXFUwMDAxRDVDNQlceDZDCSMg8J2XhSBbTUFUSEVNQVRJQ0FMIFNBTlMtU0VSSUYgU01BTEwgTF0KK2FsaWFzCVxVMDAwMUQ1QzYJXHg2RAkjIPCdl4YgW01BVEhFTUFUSUNBTCBTQU5TLVNFUklGIFNNQUxMIE1dCithbGlhcwlcVTAwMDFENUM3CVx4NkUJIyDwnZeHIFtNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBTTUFMTCBOXQorYWxpYXMJXFUwMDAxRDVDOAlceDZGCSMg8J2XiCBbTUFUSEVNQVRJQ0FMIFNBTlMtU0VSSUYgU01BTEwgT10KK2FsaWFzCVxVMDAwMUQ1QzkJXHg3MAkjIPCdl4kgW01BVEhFTUFUSUNBTCBTQU5TLVNFUklGIFNNQUxMIFBdCithbGlhcwlcVTAwMDFENUNBCVx4NzEJIyDwnZeKIFtNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBTTUFMTCBRXQorYWxpYXMJXFUwMDAxRDVDQglceDcyCSMg8J2XiyBbTUFUSEVNQVRJQ0FMIFNBTlMtU0VSSUYgU01BTEwgUl0KK2FsaWFzCVxVMDAwMUQ1Q0MJXHg3MwkjIPCdl4wgW01BVEhFTUFUSUNBTCBTQU5TLVNFUklGIFNNQUxMIFNdCithbGlhcwlcVTAwMDFENUNECVx4NzQJIyDwnZeNIFtNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBTTUFMTCBUXQorYWxpYXMJXFUwMDAxRDVDRQlceDc1CSMg8J2XjiBbTUFUSEVNQVRJQ0FMIFNBTlMtU0VSSUYgU01BTEwgVV0KK2FsaWFzCVxVMDAwMUQ1Q0YJXHg3NgkjIPCdl48gW01BVEhFTUFUSUNBTCBTQU5TLVNFUklGIFNNQUxMIFZdCithbGlhcwlcVTAwMDFENUQwCVx4NzcJIyDwnZeQIFtNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBTTUFMTCBXXQorYWxpYXMJXFUwMDAxRDVEMQlceDc4CSMg8J2XkSBbTUFUSEVNQVRJQ0FMIFNBTlMtU0VSSUYgU01BTEwgWF0KK2FsaWFzCVxVMDAwMUQ1RDIJXHg3OQkjIPCdl5IgW01BVEhFTUFUSUNBTCBTQU5TLVNFUklGIFNNQUxMIFldCithbGlhcwlcVTAwMDFENUQzCVx4N0EJIyDwnZeTIFtNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBTTUFMTCBaXQorCithbGlhcwlcVTAwMDFENUQ0CVx4NDEJIyDwnZeUIFtNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBCT0xEIENBUElUQUwgQV0KK2FsaWFzCVxVMDAwMUQ1RDUJXHg0MgkjIPCdl5UgW01BVEhFTUFUSUNBTCBTQU5TLVNFUklGIEJPTEQgQ0FQSVRBTCBCXQorYWxpYXMJXFUwMDAxRDVENglceDQzCSMg8J2XliBbTUFUSEVNQVRJQ0FMIFNBTlMtU0VSSUYgQk9MRCBDQVBJVEFMIENdCithbGlhcwlcVTAwMDFENUQ3CVx4NDQJIyDwnZeXIFtNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBCT0xEIENBUElUQUwgRF0KK2FsaWFzCVxVMDAwMUQ1RDgJXHg0NQkjIPCdl5ggW01BVEhFTUFUSUNBTCBTQU5TLVNFUklGIEJPTEQgQ0FQSVRBTCBFXQorYWxpYXMJXFUwMDAxRDVEOQlceDQ2CSMg8J2XmSBbTUFUSEVNQVRJQ0FMIFNBTlMtU0VSSUYgQk9MRCBDQVBJVEFMIEZdCithbGlhcwlcVTAwMDFENURBCVx4NDcJIyDwnZeaIFtNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBCT0xEIENBUElUQUwgR10KK2FsaWFzCVxVMDAwMUQ1REIJXHg0OAkjIPCdl5sgW01BVEhFTUFUSUNBTCBTQU5TLVNFUklGIEJPTEQgQ0FQSVRBTCBIXQorYWxpYXMJXFUwMDAxRDVEQwlceDQ5CSMg8J2XnCBbTUFUSEVNQVRJQ0FMIFNBTlMtU0VSSUYgQk9MRCBDQVBJVEFMIEldCithbGlhcwlcVTAwMDFENURECVx4NEEJIyDwnZedIFtNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBCT0xEIENBUElUQUwgSl0KK2FsaWFzCVxVMDAwMUQ1REUJXHg0QgkjIPCdl54gW01BVEhFTUFUSUNBTCBTQU5TLVNFUklGIEJPTEQgQ0FQSVRBTCBLXQorYWxpYXMJXFUwMDAxRDVERglceDRDCSMg8J2XnyBbTUFUSEVNQVRJQ0FMIFNBTlMtU0VSSUYgQk9MRCBDQVBJVEFMIExdCithbGlhcwlcVTAwMDFENUUwCVx4NEQJIyDwnZegIFtNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBCT0xEIENBUElUQUwgTV0KK2FsaWFzCVxVMDAwMUQ1RTEJXHg0RQkjIPCdl6EgW01BVEhFTUFUSUNBTCBTQU5TLVNFUklGIEJPTEQgQ0FQSVRBTCBOXQorYWxpYXMJXFUwMDAxRDVFMglceDRGCSMg8J2XoiBbTUFUSEVNQVRJQ0FMIFNBTlMtU0VSSUYgQk9MRCBDQVBJVEFMIE9dCithbGlhcwlcVTAwMDFENUUzCVx4NTAJIyDwnZejIFtNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBCT0xEIENBUElUQUwgUF0KK2FsaWFzCVxVMDAwMUQ1RTQJXHg1MQkjIPCdl6QgW01BVEhFTUFUSUNBTCBTQU5TLVNFUklGIEJPTEQgQ0FQSVRBTCBRXQorYWxpYXMJXFUwMDAxRDVFNQlceDUyCSMg8J2XpSBbTUFUSEVNQVRJQ0FMIFNBTlMtU0VSSUYgQk9MRCBDQVBJVEFMIFJdCithbGlhcwlcVTAwMDFENUU2CVx4NTMJIyDwnZemIFtNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBCT0xEIENBUElUQUwgU10KK2FsaWFzCVxVMDAwMUQ1RTcJXHg1NAkjIPCdl6cgW01BVEhFTUFUSUNBTCBTQU5TLVNFUklGIEJPTEQgQ0FQSVRBTCBUXQorYWxpYXMJXFUwMDAxRDVFOAlceDU1CSMg8J2XqCBbTUFUSEVNQVRJQ0FMIFNBTlMtU0VSSUYgQk9MRCBDQVBJVEFMIFVdCithbGlhcwlcVTAwMDFENUU5CVx4NTYJIyDwnZepIFtNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBCT0xEIENBUElUQUwgVl0KK2FsaWFzCVxVMDAwMUQ1RUEJXHg1NwkjIPCdl6ogW01BVEhFTUFUSUNBTCBTQU5TLVNFUklGIEJPTEQgQ0FQSVRBTCBXXQorYWxpYXMJXFUwMDAxRDVFQglceDU4CSMg8J2XqyBbTUFUSEVNQVRJQ0FMIFNBTlMtU0VSSUYgQk9MRCBDQVBJVEFMIFhdCithbGlhcwlcVTAwMDFENUVDCVx4NTkJIyDwnZesIFtNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBCT0xEIENBUElUQUwgWV0KK2FsaWFzCVxVMDAwMUQ1RUQJXHg1QQkjIPCdl60gW01BVEhFTUFUSUNBTCBTQU5TLVNFUklGIEJPTEQgQ0FQSVRBTCBaXQorCithbGlhcwlcVTAwMDFENUVFCVx4NjEJIyDwnZeuIFtNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBCT0xEIFNNQUxMIEFdCithbGlhcwlcVTAwMDFENUVGCVx4NjIJIyDwnZevIFtNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBCT0xEIFNNQUxMIEJdCithbGlhcwlcVTAwMDFENUYwCVx4NjMJIyDwnZewIFtNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBCT0xEIFNNQUxMIENdCithbGlhcwlcVTAwMDFENUYxCVx4NjQJIyDwnZexIFtNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBCT0xEIFNNQUxMIERdCithbGlhcwlcVTAwMDFENUYyCVx4NjUJIyDwnZeyIFtNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBCT0xEIFNNQUxMIEVdCithbGlhcwlcVTAwMDFENUYzCVx4NjYJIyDwnZezIFtNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBCT0xEIFNNQUxMIEZdCithbGlhcwlcVTAwMDFENUY0CVx4NjcJIyDwnZe0IFtNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBCT0xEIFNNQUxMIEddCithbGlhcwlcVTAwMDFENUY1CVx4NjgJIyDwnZe1IFtNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBCT0xEIFNNQUxMIEhdCithbGlhcwlcVTAwMDFENUY2CVx4NjkJIyDwnZe2IFtNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBCT0xEIFNNQUxMIEldCithbGlhcwlcVTAwMDFENUY3CVx4NkEJIyDwnZe3IFtNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBCT0xEIFNNQUxMIEpdCithbGlhcwlcVTAwMDFENUY4CVx4NkIJIyDwnZe4IFtNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBCT0xEIFNNQUxMIEtdCithbGlhcwlcVTAwMDFENUY5CVx4NkMJIyDwnZe5IFtNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBCT0xEIFNNQUxMIExdCithbGlhcwlcVTAwMDFENUZBCVx4NkQJIyDwnZe6IFtNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBCT0xEIFNNQUxMIE1dCithbGlhcwlcVTAwMDFENUZCCVx4NkUJIyDwnZe7IFtNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBCT0xEIFNNQUxMIE5dCithbGlhcwlcVTAwMDFENUZDCVx4NkYJIyDwnZe8IFtNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBCT0xEIFNNQUxMIE9dCithbGlhcwlcVTAwMDFENUZECVx4NzAJIyDwnZe9IFtNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBCT0xEIFNNQUxMIFBdCithbGlhcwlcVTAwMDFENUZFCVx4NzEJIyDwnZe+IFtNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBCT0xEIFNNQUxMIFFdCithbGlhcwlcVTAwMDFENUZGCVx4NzIJIyDwnZe/IFtNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBCT0xEIFNNQUxMIFJdCithbGlhcwlcVTAwMDFENjAwCVx4NzMJIyDwnZiAIFtNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBCT0xEIFNNQUxMIFNdCithbGlhcwlcVTAwMDFENjAxCVx4NzQJIyDwnZiBIFtNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBCT0xEIFNNQUxMIFRdCithbGlhcwlcVTAwMDFENjAyCVx4NzUJIyDwnZiCIFtNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBCT0xEIFNNQUxMIFVdCithbGlhcwlcVTAwMDFENjAzCVx4NzYJIyDwnZiDIFtNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBCT0xEIFNNQUxMIFZdCithbGlhcwlcVTAwMDFENjA0CVx4NzcJIyDwnZiEIFtNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBCT0xEIFNNQUxMIFddCithbGlhcwlcVTAwMDFENjA1CVx4NzgJIyDwnZiFIFtNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBCT0xEIFNNQUxMIFhdCithbGlhcwlcVTAwMDFENjA2CVx4NzkJIyDwnZiGIFtNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBCT0xEIFNNQUxMIFldCithbGlhcwlcVTAwMDFENjA3CVx4N0EJIyDwnZiHIFtNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBCT0xEIFNNQUxMIFpdCisKK2FsaWFzCVxVMDAwMUQ2MDgJXHg0MQkjIPCdmIggW01BVEhFTUFUSUNBTCBTQU5TLVNFUklGIElUQUxJQyBDQVBJVEFMIEFdCithbGlhcwlcVTAwMDFENjA5CVx4NDIJIyDwnZiJIFtNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBJVEFMSUMgQ0FQSVRBTCBCXQorYWxpYXMJXFUwMDAxRDYwQQlceDQzCSMg8J2YiiBbTUFUSEVNQVRJQ0FMIFNBTlMtU0VSSUYgSVRBTElDIENBUElUQUwgQ10KK2FsaWFzCVxVMDAwMUQ2MEIJXHg0NAkjIPCdmIsgW01BVEhFTUFUSUNBTCBTQU5TLVNFUklGIElUQUxJQyBDQVBJVEFMIERdCithbGlhcwlcVTAwMDFENjBDCVx4NDUJIyDwnZiMIFtNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBJVEFMSUMgQ0FQSVRBTCBFXQorYWxpYXMJXFUwMDAxRDYwRAlceDQ2CSMg8J2YjSBbTUFUSEVNQVRJQ0FMIFNBTlMtU0VSSUYgSVRBTElDIENBUElUQUwgRl0KK2FsaWFzCVxVMDAwMUQ2MEUJXHg0NwkjIPCdmI4gW01BVEhFTUFUSUNBTCBTQU5TLVNFUklGIElUQUxJQyBDQVBJVEFMIEddCithbGlhcwlcVTAwMDFENjBGCVx4NDgJIyDwnZiPIFtNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBJVEFMSUMgQ0FQSVRBTCBIXQorYWxpYXMJXFUwMDAxRDYxMAlceDQ5CSMg8J2YkCBbTUFUSEVNQVRJQ0FMIFNBTlMtU0VSSUYgSVRBTElDIENBUElUQUwgSV0KK2FsaWFzCVxVMDAwMUQ2MTEJXHg0QQkjIPCdmJEgW01BVEhFTUFUSUNBTCBTQU5TLVNFUklGIElUQUxJQyBDQVBJVEFMIEpdCithbGlhcwlcVTAwMDFENjEyCVx4NEIJIyDwnZiSIFtNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBJVEFMSUMgQ0FQSVRBTCBLXQorYWxpYXMJXFUwMDAxRDYxMwlceDRDCSMg8J2YkyBbTUFUSEVNQVRJQ0FMIFNBTlMtU0VSSUYgSVRBTElDIENBUElUQUwgTF0KK2FsaWFzCVxVMDAwMUQ2MTQJXHg0RAkjIPCdmJQgW01BVEhFTUFUSUNBTCBTQU5TLVNFUklGIElUQUxJQyBDQVBJVEFMIE1dCithbGlhcwlcVTAwMDFENjE1CVx4NEUJIyDwnZiVIFtNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBJVEFMSUMgQ0FQSVRBTCBOXQorYWxpYXMJXFUwMDAxRDYxNglceDRGCSMg8J2YliBbTUFUSEVNQVRJQ0FMIFNBTlMtU0VSSUYgSVRBTElDIENBUElUQUwgT10KK2FsaWFzCVxVMDAwMUQ2MTcJXHg1MAkjIPCdmJcgW01BVEhFTUFUSUNBTCBTQU5TLVNFUklGIElUQUxJQyBDQVBJVEFMIFBdCithbGlhcwlcVTAwMDFENjE4CVx4NTEJIyDwnZiYIFtNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBJVEFMSUMgQ0FQSVRBTCBRXQorYWxpYXMJXFUwMDAxRDYxOQlceDUyCSMg8J2YmSBbTUFUSEVNQVRJQ0FMIFNBTlMtU0VSSUYgSVRBTElDIENBUElUQUwgUl0KK2FsaWFzCVxVMDAwMUQ2MUEJXHg1MwkjIPCdmJogW01BVEhFTUFUSUNBTCBTQU5TLVNFUklGIElUQUxJQyBDQVBJVEFMIFNdCithbGlhcwlcVTAwMDFENjFCCVx4NTQJIyDwnZibIFtNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBJVEFMSUMgQ0FQSVRBTCBUXQorYWxpYXMJXFUwMDAxRDYxQwlceDU1CSMg8J2YnCBbTUFUSEVNQVRJQ0FMIFNBTlMtU0VSSUYgSVRBTElDIENBUElUQUwgVV0KK2FsaWFzCVxVMDAwMUQ2MUQJXHg1NgkjIPCdmJ0gW01BVEhFTUFUSUNBTCBTQU5TLVNFUklGIElUQUxJQyBDQVBJVEFMIFZdCithbGlhcwlcVTAwMDFENjFFCVx4NTcJIyDwnZieIFtNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBJVEFMSUMgQ0FQSVRBTCBXXQorYWxpYXMJXFUwMDAxRDYxRglceDU4CSMg8J2YnyBbTUFUSEVNQVRJQ0FMIFNBTlMtU0VSSUYgSVRBTElDIENBUElUQUwgWF0KK2FsaWFzCVxVMDAwMUQ2MjAJXHg1OQkjIPCdmKAgW01BVEhFTUFUSUNBTCBTQU5TLVNFUklGIElUQUxJQyBDQVBJVEFMIFldCithbGlhcwlcVTAwMDFENjIxCVx4NUEJIyDwnZihIFtNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBJVEFMSUMgQ0FQSVRBTCBaXQorCithbGlhcwlcVTAwMDFENjIyCVx4NjEJIyDwnZiiIFtNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBJVEFMSUMgU01BTEwgQV0KK2FsaWFzCVxVMDAwMUQ2MjMJXHg2MgkjIPCdmKMgW01BVEhFTUFUSUNBTCBTQU5TLVNFUklGIElUQUxJQyBTTUFMTCBCXQorYWxpYXMJXFUwMDAxRDYyNAlceDYzCSMg8J2YpCBbTUFUSEVNQVRJQ0FMIFNBTlMtU0VSSUYgSVRBTElDIFNNQUxMIENdCithbGlhcwlcVTAwMDFENjI1CVx4NjQJIyDwnZilIFtNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBJVEFMSUMgU01BTEwgRF0KK2FsaWFzCVxVMDAwMUQ2MjYJXHg2NQkjIPCdmKYgW01BVEhFTUFUSUNBTCBTQU5TLVNFUklGIElUQUxJQyBTTUFMTCBFXQorYWxpYXMJXFUwMDAxRDYyNwlceDY2CSMg8J2YpyBbTUFUSEVNQVRJQ0FMIFNBTlMtU0VSSUYgSVRBTElDIFNNQUxMIEZdCithbGlhcwlcVTAwMDFENjI4CVx4NjcJIyDwnZioIFtNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBJVEFMSUMgU01BTEwgR10KK2FsaWFzCVxVMDAwMUQ2MjkJXHg2OAkjIPCdmKkgW01BVEhFTUFUSUNBTCBTQU5TLVNFUklGIElUQUxJQyBTTUFMTCBIXQorYWxpYXMJXFUwMDAxRDYyQQlceDY5CSMg8J2YqiBbTUFUSEVNQVRJQ0FMIFNBTlMtU0VSSUYgSVRBTElDIFNNQUxMIEldCithbGlhcwlcVTAwMDFENjJCCVx4NkEJIyDwnZirIFtNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBJVEFMSUMgU01BTEwgSl0KK2FsaWFzCVxVMDAwMUQ2MkMJXHg2QgkjIPCdmKwgW01BVEhFTUFUSUNBTCBTQU5TLVNFUklGIElUQUxJQyBTTUFMTCBLXQorYWxpYXMJXFUwMDAxRDYyRAlceDZDCSMg8J2YrSBbTUFUSEVNQVRJQ0FMIFNBTlMtU0VSSUYgSVRBTElDIFNNQUxMIExdCithbGlhcwlcVTAwMDFENjJFCVx4NkQJIyDwnZiuIFtNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBJVEFMSUMgU01BTEwgTV0KK2FsaWFzCVxVMDAwMUQ2MkYJXHg2RQkjIPCdmK8gW01BVEhFTUFUSUNBTCBTQU5TLVNFUklGIElUQUxJQyBTTUFMTCBOXQorYWxpYXMJXFUwMDAxRDYzMAlceDZGCSMg8J2YsCBbTUFUSEVNQVRJQ0FMIFNBTlMtU0VSSUYgSVRBTElDIFNNQUxMIE9dCithbGlhcwlcVTAwMDFENjMxCVx4NzAJIyDwnZixIFtNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBJVEFMSUMgU01BTEwgUF0KK2FsaWFzCVxVMDAwMUQ2MzIJXHg3MQkjIPCdmLIgW01BVEhFTUFUSUNBTCBTQU5TLVNFUklGIElUQUxJQyBTTUFMTCBRXQorYWxpYXMJXFUwMDAxRDYzMwlceDcyCSMg8J2YsyBbTUFUSEVNQVRJQ0FMIFNBTlMtU0VSSUYgSVRBTElDIFNNQUxMIFJdCithbGlhcwlcVTAwMDFENjM0CVx4NzMJIyDwnZi0IFtNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBJVEFMSUMgU01BTEwgU10KK2FsaWFzCVxVMDAwMUQ2MzUJXHg3NAkjIPCdmLUgW01BVEhFTUFUSUNBTCBTQU5TLVNFUklGIElUQUxJQyBTTUFMTCBUXQorYWxpYXMJXFUwMDAxRDYzNglceDc1CSMg8J2YtiBbTUFUSEVNQVRJQ0FMIFNBTlMtU0VSSUYgSVRBTElDIFNNQUxMIFVdCithbGlhcwlcVTAwMDFENjM3CVx4NzYJIyDwnZi3IFtNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBJVEFMSUMgU01BTEwgVl0KK2FsaWFzCVxVMDAwMUQ2MzgJXHg3NwkjIPCdmLggW01BVEhFTUFUSUNBTCBTQU5TLVNFUklGIElUQUxJQyBTTUFMTCBXXQorYWxpYXMJXFUwMDAxRDYzOQlceDc4CSMg8J2YuSBbTUFUSEVNQVRJQ0FMIFNBTlMtU0VSSUYgSVRBTElDIFNNQUxMIFhdCithbGlhcwlcVTAwMDFENjNBCVx4NzkJIyDwnZi6IFtNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBJVEFMSUMgU01BTEwgWV0KK2FsaWFzCVxVMDAwMUQ2M0IJXHg3QQkjIPCdmLsgW01BVEhFTUFUSUNBTCBTQU5TLVNFUklGIElUQUxJQyBTTUFMTCBaXQorCithbGlhcwlcVTAwMDFENjNDCVx4NDEJIyDwnZi8IFtNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBCT0xEIElUQUxJQyBDQVBJVEFMIEFdCithbGlhcwlcVTAwMDFENjNECVx4NDIJIyDwnZi9IFtNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBCT0xEIElUQUxJQyBDQVBJVEFMIEJdCithbGlhcwlcVTAwMDFENjNFCVx4NDMJIyDwnZi+IFtNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBCT0xEIElUQUxJQyBDQVBJVEFMIENdCithbGlhcwlcVTAwMDFENjNGCVx4NDQJIyDwnZi/IFtNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBCT0xEIElUQUxJQyBDQVBJVEFMIERdCithbGlhcwlcVTAwMDFENjQwCVx4NDUJIyDwnZmAIFtNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBCT0xEIElUQUxJQyBDQVBJVEFMIEVdCithbGlhcwlcVTAwMDFENjQxCVx4NDYJIyDwnZmBIFtNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBCT0xEIElUQUxJQyBDQVBJVEFMIEZdCithbGlhcwlcVTAwMDFENjQyCVx4NDcJIyDwnZmCIFtNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBCT0xEIElUQUxJQyBDQVBJVEFMIEddCithbGlhcwlcVTAwMDFENjQzCVx4NDgJIyDwnZmDIFtNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBCT0xEIElUQUxJQyBDQVBJVEFMIEhdCithbGlhcwlcVTAwMDFENjQ0CVx4NDkJIyDwnZmEIFtNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBCT0xEIElUQUxJQyBDQVBJVEFMIEldCithbGlhcwlcVTAwMDFENjQ1CVx4NEEJIyDwnZmFIFtNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBCT0xEIElUQUxJQyBDQVBJVEFMIEpdCithbGlhcwlcVTAwMDFENjQ2CVx4NEIJIyDwnZmGIFtNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBCT0xEIElUQUxJQyBDQVBJVEFMIEtdCithbGlhcwlcVTAwMDFENjQ3CVx4NEMJIyDwnZmHIFtNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBCT0xEIElUQUxJQyBDQVBJVEFMIExdCithbGlhcwlcVTAwMDFENjQ4CVx4NEQJIyDwnZmIIFtNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBCT0xEIElUQUxJQyBDQVBJVEFMIE1dCithbGlhcwlcVTAwMDFENjQ5CVx4NEUJIyDwnZmJIFtNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBCT0xEIElUQUxJQyBDQVBJVEFMIE5dCithbGlhcwlcVTAwMDFENjRBCVx4NEYJIyDwnZmKIFtNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBCT0xEIElUQUxJQyBDQVBJVEFMIE9dCithbGlhcwlcVTAwMDFENjRCCVx4NTAJIyDwnZmLIFtNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBCT0xEIElUQUxJQyBDQVBJVEFMIFBdCithbGlhcwlcVTAwMDFENjRDCVx4NTEJIyDwnZmMIFtNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBCT0xEIElUQUxJQyBDQVBJVEFMIFFdCithbGlhcwlcVTAwMDFENjRECVx4NTIJIyDwnZmNIFtNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBCT0xEIElUQUxJQyBDQVBJVEFMIFJdCithbGlhcwlcVTAwMDFENjRFCVx4NTMJIyDwnZmOIFtNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBCT0xEIElUQUxJQyBDQVBJVEFMIFNdCithbGlhcwlcVTAwMDFENjRGCVx4NTQJIyDwnZmPIFtNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBCT0xEIElUQUxJQyBDQVBJVEFMIFRdCithbGlhcwlcVTAwMDFENjUwCVx4NTUJIyDwnZmQIFtNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBCT0xEIElUQUxJQyBDQVBJVEFMIFVdCithbGlhcwlcVTAwMDFENjUxCVx4NTYJIyDwnZmRIFtNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBCT0xEIElUQUxJQyBDQVBJVEFMIFZdCithbGlhcwlcVTAwMDFENjUyCVx4NTcJIyDwnZmSIFtNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBCT0xEIElUQUxJQyBDQVBJVEFMIFddCithbGlhcwlcVTAwMDFENjUzCVx4NTgJIyDwnZmTIFtNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBCT0xEIElUQUxJQyBDQVBJVEFMIFhdCithbGlhcwlcVTAwMDFENjU0CVx4NTkJIyDwnZmUIFtNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBCT0xEIElUQUxJQyBDQVBJVEFMIFldCithbGlhcwlcVTAwMDFENjU1CVx4NUEJIyDwnZmVIFtNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBCT0xEIElUQUxJQyBDQVBJVEFMIFpdCisKK2FsaWFzCVxVMDAwMUQ2NTYJXHg2MQkjIPCdmZYgW01BVEhFTUFUSUNBTCBTQU5TLVNFUklGIEJPTEQgSVRBTElDIFNNQUxMIEFdCithbGlhcwlcVTAwMDFENjU3CVx4NjIJIyDwnZmXIFtNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBCT0xEIElUQUxJQyBTTUFMTCBCXQorYWxpYXMJXFUwMDAxRDY1OAlceDYzCSMg8J2ZmCBbTUFUSEVNQVRJQ0FMIFNBTlMtU0VSSUYgQk9MRCBJVEFMSUMgU01BTEwgQ10KK2FsaWFzCVxVMDAwMUQ2NTkJXHg2NAkjIPCdmZkgW01BVEhFTUFUSUNBTCBTQU5TLVNFUklGIEJPTEQgSVRBTElDIFNNQUxMIERdCithbGlhcwlcVTAwMDFENjVBCVx4NjUJIyDwnZmaIFtNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBCT0xEIElUQUxJQyBTTUFMTCBFXQorYWxpYXMJXFUwMDAxRDY1QglceDY2CSMg8J2ZmyBbTUFUSEVNQVRJQ0FMIFNBTlMtU0VSSUYgQk9MRCBJVEFMSUMgU01BTEwgRl0KK2FsaWFzCVxVMDAwMUQ2NUMJXHg2NwkjIPCdmZwgW01BVEhFTUFUSUNBTCBTQU5TLVNFUklGIEJPTEQgSVRBTElDIFNNQUxMIEddCithbGlhcwlcVTAwMDFENjVECVx4NjgJIyDwnZmdIFtNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBCT0xEIElUQUxJQyBTTUFMTCBIXQorYWxpYXMJXFUwMDAxRDY1RQlceDY5CSMg8J2ZniBbTUFUSEVNQVRJQ0FMIFNBTlMtU0VSSUYgQk9MRCBJVEFMSUMgU01BTEwgSV0KK2FsaWFzCVxVMDAwMUQ2NUYJXHg2QQkjIPCdmZ8gW01BVEhFTUFUSUNBTCBTQU5TLVNFUklGIEJPTEQgSVRBTElDIFNNQUxMIEpdCithbGlhcwlcVTAwMDFENjYwCVx4NkIJIyDwnZmgIFtNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBCT0xEIElUQUxJQyBTTUFMTCBLXQorYWxpYXMJXFUwMDAxRDY2MQlceDZDCSMg8J2ZoSBbTUFUSEVNQVRJQ0FMIFNBTlMtU0VSSUYgQk9MRCBJVEFMSUMgU01BTEwgTF0KK2FsaWFzCVxVMDAwMUQ2NjIJXHg2RAkjIPCdmaIgW01BVEhFTUFUSUNBTCBTQU5TLVNFUklGIEJPTEQgSVRBTElDIFNNQUxMIE1dCithbGlhcwlcVTAwMDFENjYzCVx4NkUJIyDwnZmjIFtNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBCT0xEIElUQUxJQyBTTUFMTCBOXQorYWxpYXMJXFUwMDAxRDY2NAlceDZGCSMg8J2ZpCBbTUFUSEVNQVRJQ0FMIFNBTlMtU0VSSUYgQk9MRCBJVEFMSUMgU01BTEwgT10KK2FsaWFzCVxVMDAwMUQ2NjUJXHg3MAkjIPCdmaUgW01BVEhFTUFUSUNBTCBTQU5TLVNFUklGIEJPTEQgSVRBTElDIFNNQUxMIFBdCithbGlhcwlcVTAwMDFENjY2CVx4NzEJIyDwnZmmIFtNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBCT0xEIElUQUxJQyBTTUFMTCBRXQorYWxpYXMJXFUwMDAxRDY2NwlceDcyCSMg8J2ZpyBbTUFUSEVNQVRJQ0FMIFNBTlMtU0VSSUYgQk9MRCBJVEFMSUMgU01BTEwgUl0KK2FsaWFzCVxVMDAwMUQ2NjgJXHg3MwkjIPCdmaggW01BVEhFTUFUSUNBTCBTQU5TLVNFUklGIEJPTEQgSVRBTElDIFNNQUxMIFNdCithbGlhcwlcVTAwMDFENjY5CVx4NzQJIyDwnZmpIFtNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBCT0xEIElUQUxJQyBTTUFMTCBUXQorYWxpYXMJXFUwMDAxRDY2QQlceDc1CSMg8J2ZqiBbTUFUSEVNQVRJQ0FMIFNBTlMtU0VSSUYgQk9MRCBJVEFMSUMgU01BTEwgVV0KK2FsaWFzCVxVMDAwMUQ2NkIJXHg3NgkjIPCdmasgW01BVEhFTUFUSUNBTCBTQU5TLVNFUklGIEJPTEQgSVRBTElDIFNNQUxMIFZdCithbGlhcwlcVTAwMDFENjZDCVx4NzcJIyDwnZmsIFtNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBCT0xEIElUQUxJQyBTTUFMTCBXXQorYWxpYXMJXFUwMDAxRDY2RAlceDc4CSMg8J2ZrSBbTUFUSEVNQVRJQ0FMIFNBTlMtU0VSSUYgQk9MRCBJVEFMSUMgU01BTEwgWF0KK2FsaWFzCVxVMDAwMUQ2NkUJXHg3OQkjIPCdma4gW01BVEhFTUFUSUNBTCBTQU5TLVNFUklGIEJPTEQgSVRBTElDIFNNQUxMIFldCithbGlhcwlcVTAwMDFENjZGCVx4N0EJIyDwnZmvIFtNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBCT0xEIElUQUxJQyBTTUFMTCBaXQorCithbGlhcwlcVTAwMDFENjcwCVx4NDEJIyDwnZmwIFtNQVRIRU1BVElDQUwgTU9OT1NQQUNFIENBUElUQUwgQV0KK2FsaWFzCVxVMDAwMUQ2NzEJXHg0MgkjIPCdmbEgW01BVEhFTUFUSUNBTCBNT05PU1BBQ0UgQ0FQSVRBTCBCXQorYWxpYXMJXFUwMDAxRDY3MglceDQzCSMg8J2ZsiBbTUFUSEVNQVRJQ0FMIE1PTk9TUEFDRSBDQVBJVEFMIENdCithbGlhcwlcVTAwMDFENjczCVx4NDQJIyDwnZmzIFtNQVRIRU1BVElDQUwgTU9OT1NQQUNFIENBUElUQUwgRF0KK2FsaWFzCVxVMDAwMUQ2NzQJXHg0NQkjIPCdmbQgW01BVEhFTUFUSUNBTCBNT05PU1BBQ0UgQ0FQSVRBTCBFXQorYWxpYXMJXFUwMDAxRDY3NQlceDQ2CSMg8J2ZtSBbTUFUSEVNQVRJQ0FMIE1PTk9TUEFDRSBDQVBJVEFMIEZdCithbGlhcwlcVTAwMDFENjc2CVx4NDcJIyDwnZm2IFtNQVRIRU1BVElDQUwgTU9OT1NQQUNFIENBUElUQUwgR10KK2FsaWFzCVxVMDAwMUQ2NzcJXHg0OAkjIPCdmbcgW01BVEhFTUFUSUNBTCBNT05PU1BBQ0UgQ0FQSVRBTCBIXQorYWxpYXMJXFUwMDAxRDY3OAlceDQ5CSMg8J2ZuCBbTUFUSEVNQVRJQ0FMIE1PTk9TUEFDRSBDQVBJVEFMIEldCithbGlhcwlcVTAwMDFENjc5CVx4NEEJIyDwnZm5IFtNQVRIRU1BVElDQUwgTU9OT1NQQUNFIENBUElUQUwgSl0KK2FsaWFzCVxVMDAwMUQ2N0EJXHg0QgkjIPCdmbogW01BVEhFTUFUSUNBTCBNT05PU1BBQ0UgQ0FQSVRBTCBLXQorYWxpYXMJXFUwMDAxRDY3QglceDRDCSMg8J2ZuyBbTUFUSEVNQVRJQ0FMIE1PTk9TUEFDRSBDQVBJVEFMIExdCithbGlhcwlcVTAwMDFENjdDCVx4NEQJIyDwnZm8IFtNQVRIRU1BVElDQUwgTU9OT1NQQUNFIENBUElUQUwgTV0KK2FsaWFzCVxVMDAwMUQ2N0QJXHg0RQkjIPCdmb0gW01BVEhFTUFUSUNBTCBNT05PU1BBQ0UgQ0FQSVRBTCBOXQorYWxpYXMJXFUwMDAxRDY3RQlceDRGCSMg8J2ZviBbTUFUSEVNQVRJQ0FMIE1PTk9TUEFDRSBDQVBJVEFMIE9dCithbGlhcwlcVTAwMDFENjdGCVx4NTAJIyDwnZm/IFtNQVRIRU1BVElDQUwgTU9OT1NQQUNFIENBUElUQUwgUF0KK2FsaWFzCVxVMDAwMUQ2ODAJXHg1MQkjIPCdmoAgW01BVEhFTUFUSUNBTCBNT05PU1BBQ0UgQ0FQSVRBTCBRXQorYWxpYXMJXFUwMDAxRDY4MQlceDUyCSMg8J2agSBbTUFUSEVNQVRJQ0FMIE1PTk9TUEFDRSBDQVBJVEFMIFJdCithbGlhcwlcVTAwMDFENjgyCVx4NTMJIyDwnZqCIFtNQVRIRU1BVElDQUwgTU9OT1NQQUNFIENBUElUQUwgU10KK2FsaWFzCVxVMDAwMUQ2ODMJXHg1NAkjIPCdmoMgW01BVEhFTUFUSUNBTCBNT05PU1BBQ0UgQ0FQSVRBTCBUXQorYWxpYXMJXFUwMDAxRDY4NAlceDU1CSMg8J2ahCBbTUFUSEVNQVRJQ0FMIE1PTk9TUEFDRSBDQVBJVEFMIFVdCithbGlhcwlcVTAwMDFENjg1CVx4NTYJIyDwnZqFIFtNQVRIRU1BVElDQUwgTU9OT1NQQUNFIENBUElUQUwgVl0KK2FsaWFzCVxVMDAwMUQ2ODYJXHg1NwkjIPCdmoYgW01BVEhFTUFUSUNBTCBNT05PU1BBQ0UgQ0FQSVRBTCBXXQorYWxpYXMJXFUwMDAxRDY4NwlceDU4CSMg8J2ahyBbTUFUSEVNQVRJQ0FMIE1PTk9TUEFDRSBDQVBJVEFMIFhdCithbGlhcwlcVTAwMDFENjg4CVx4NTkJIyDwnZqIIFtNQVRIRU1BVElDQUwgTU9OT1NQQUNFIENBUElUQUwgWV0KK2FsaWFzCVxVMDAwMUQ2ODkJXHg1QQkjIPCdmokgW01BVEhFTUFUSUNBTCBNT05PU1BBQ0UgQ0FQSVRBTCBaXQorCithbGlhcwlcVTAwMDFENjhBCVx4NjEJIyDwnZqKIFtNQVRIRU1BVElDQUwgTU9OT1NQQUNFIFNNQUxMIEFdCithbGlhcwlcVTAwMDFENjhCCVx4NjIJIyDwnZqLIFtNQVRIRU1BVElDQUwgTU9OT1NQQUNFIFNNQUxMIEJdCithbGlhcwlcVTAwMDFENjhDCVx4NjMJIyDwnZqMIFtNQVRIRU1BVElDQUwgTU9OT1NQQUNFIFNNQUxMIENdCithbGlhcwlcVTAwMDFENjhECVx4NjQJIyDwnZqNIFtNQVRIRU1BVElDQUwgTU9OT1NQQUNFIFNNQUxMIERdCithbGlhcwlcVTAwMDFENjhFCVx4NjUJIyDwnZqOIFtNQVRIRU1BVElDQUwgTU9OT1NQQUNFIFNNQUxMIEVdCithbGlhcwlcVTAwMDFENjhGCVx4NjYJIyDwnZqPIFtNQVRIRU1BVElDQUwgTU9OT1NQQUNFIFNNQUxMIEZdCithbGlhcwlcVTAwMDFENjkwCVx4NjcJIyDwnZqQIFtNQVRIRU1BVElDQUwgTU9OT1NQQUNFIFNNQUxMIEddCithbGlhcwlcVTAwMDFENjkxCVx4NjgJIyDwnZqRIFtNQVRIRU1BVElDQUwgTU9OT1NQQUNFIFNNQUxMIEhdCithbGlhcwlcVTAwMDFENjkyCVx4NjkJIyDwnZqSIFtNQVRIRU1BVElDQUwgTU9OT1NQQUNFIFNNQUxMIEldCithbGlhcwlcVTAwMDFENjkzCVx4NkEJIyDwnZqTIFtNQVRIRU1BVElDQUwgTU9OT1NQQUNFIFNNQUxMIEpdCithbGlhcwlcVTAwMDFENjk0CVx4NkIJIyDwnZqUIFtNQVRIRU1BVElDQUwgTU9OT1NQQUNFIFNNQUxMIEtdCithbGlhcwlcVTAwMDFENjk1CVx4NkMJIyDwnZqVIFtNQVRIRU1BVElDQUwgTU9OT1NQQUNFIFNNQUxMIExdCithbGlhcwlcVTAwMDFENjk2CVx4NkQJIyDwnZqWIFtNQVRIRU1BVElDQUwgTU9OT1NQQUNFIFNNQUxMIE1dCithbGlhcwlcVTAwMDFENjk3CVx4NkUJIyDwnZqXIFtNQVRIRU1BVElDQUwgTU9OT1NQQUNFIFNNQUxMIE5dCithbGlhcwlcVTAwMDFENjk4CVx4NkYJIyDwnZqYIFtNQVRIRU1BVElDQUwgTU9OT1NQQUNFIFNNQUxMIE9dCithbGlhcwlcVTAwMDFENjk5CVx4NzAJIyDwnZqZIFtNQVRIRU1BVElDQUwgTU9OT1NQQUNFIFNNQUxMIFBdCithbGlhcwlcVTAwMDFENjlBCVx4NzEJIyDwnZqaIFtNQVRIRU1BVElDQUwgTU9OT1NQQUNFIFNNQUxMIFFdCithbGlhcwlcVTAwMDFENjlCCVx4NzIJIyDwnZqbIFtNQVRIRU1BVElDQUwgTU9OT1NQQUNFIFNNQUxMIFJdCithbGlhcwlcVTAwMDFENjlDCVx4NzMJIyDwnZqcIFtNQVRIRU1BVElDQUwgTU9OT1NQQUNFIFNNQUxMIFNdCithbGlhcwlcVTAwMDFENjlECVx4NzQJIyDwnZqdIFtNQVRIRU1BVElDQUwgTU9OT1NQQUNFIFNNQUxMIFRdCithbGlhcwlcVTAwMDFENjlFCVx4NzUJIyDwnZqeIFtNQVRIRU1BVElDQUwgTU9OT1NQQUNFIFNNQUxMIFVdCithbGlhcwlcVTAwMDFENjlGCVx4NzYJIyDwnZqfIFtNQVRIRU1BVElDQUwgTU9OT1NQQUNFIFNNQUxMIFZdCithbGlhcwlcVTAwMDFENkEwCVx4NzcJIyDwnZqgIFtNQVRIRU1BVElDQUwgTU9OT1NQQUNFIFNNQUxMIFddCithbGlhcwlcVTAwMDFENkExCVx4NzgJIyDwnZqhIFtNQVRIRU1BVElDQUwgTU9OT1NQQUNFIFNNQUxMIFhdCithbGlhcwlcVTAwMDFENkEyCVx4NzkJIyDwnZqiIFtNQVRIRU1BVElDQUwgTU9OT1NQQUNFIFNNQUxMIFldCithbGlhcwlcVTAwMDFENkEzCVx4N0EJIyDwnZqjIFtNQVRIRU1BVElDQUwgTU9OT1NQQUNFIFNNQUxMIFpdCisKK2FsaWFzCVxVMDAwMUYxMTAJXHg0MQkjICAgW1BBUkVOVEhFU0laRUQgTEFUSU4gQ0FQSVRBTCBMRVRURVIgQV0KK2FsaWFzCVxVMDAwMUYxMTEJXHg0MgkjICAgW1BBUkVOVEhFU0laRUQgTEFUSU4gQ0FQSVRBTCBMRVRURVIgQl0KK2FsaWFzCVxVMDAwMUYxMTIJXHg0MwkjICAgW1BBUkVOVEhFU0laRUQgTEFUSU4gQ0FQSVRBTCBMRVRURVIgQ10KK2FsaWFzCVxVMDAwMUYxMTMJXHg0NAkjICAgW1BBUkVOVEhFU0laRUQgTEFUSU4gQ0FQSVRBTCBMRVRURVIgRF0KK2FsaWFzCVxVMDAwMUYxMTQJXHg0NQkjICAgW1BBUkVOVEhFU0laRUQgTEFUSU4gQ0FQSVRBTCBMRVRURVIgRV0KK2FsaWFzCVxVMDAwMUYxMTUJXHg0NgkjICAgW1BBUkVOVEhFU0laRUQgTEFUSU4gQ0FQSVRBTCBMRVRURVIgRl0KK2FsaWFzCVxVMDAwMUYxMTYJXHg0NwkjICAgW1BBUkVOVEhFU0laRUQgTEFUSU4gQ0FQSVRBTCBMRVRURVIgR10KK2FsaWFzCVxVMDAwMUYxMTcJXHg0OAkjICAgW1BBUkVOVEhFU0laRUQgTEFUSU4gQ0FQSVRBTCBMRVRURVIgSF0KK2FsaWFzCVxVMDAwMUYxMTgJXHg0OQkjICAgW1BBUkVOVEhFU0laRUQgTEFUSU4gQ0FQSVRBTCBMRVRURVIgSV0KK2FsaWFzCVxVMDAwMUYxMTkJXHg0QQkjICAgW1BBUkVOVEhFU0laRUQgTEFUSU4gQ0FQSVRBTCBMRVRURVIgSl0KK2FsaWFzCVxVMDAwMUYxMUEJXHg0QgkjICAgW1BBUkVOVEhFU0laRUQgTEFUSU4gQ0FQSVRBTCBMRVRURVIgS10KK2FsaWFzCVxVMDAwMUYxMUIJXHg0QwkjICAgW1BBUkVOVEhFU0laRUQgTEFUSU4gQ0FQSVRBTCBMRVRURVIgTF0KK2FsaWFzCVxVMDAwMUYxMUMJXHg0RAkjICAgW1BBUkVOVEhFU0laRUQgTEFUSU4gQ0FQSVRBTCBMRVRURVIgTV0KK2FsaWFzCVxVMDAwMUYxMUQJXHg0RQkjICAgW1BBUkVOVEhFU0laRUQgTEFUSU4gQ0FQSVRBTCBMRVRURVIgTl0KK2FsaWFzCVxVMDAwMUYxMUUJXHg0RgkjICAgW1BBUkVOVEhFU0laRUQgTEFUSU4gQ0FQSVRBTCBMRVRURVIgT10KK2FsaWFzCVxVMDAwMUYxMUYJXHg1MAkjICAgW1BBUkVOVEhFU0laRUQgTEFUSU4gQ0FQSVRBTCBMRVRURVIgUF0KK2FsaWFzCVxVMDAwMUYxMjAJXHg1MQkjICAgW1BBUkVOVEhFU0laRUQgTEFUSU4gQ0FQSVRBTCBMRVRURVIgUV0KK2FsaWFzCVxVMDAwMUYxMjEJXHg1MgkjICAgW1BBUkVOVEhFU0laRUQgTEFUSU4gQ0FQSVRBTCBMRVRURVIgUl0KK2FsaWFzCVxVMDAwMUYxMjIJXHg1MwkjICAgW1BBUkVOVEhFU0laRUQgTEFUSU4gQ0FQSVRBTCBMRVRURVIgU10KK2FsaWFzCVxVMDAwMUYxMjMJXHg1NAkjICAgW1BBUkVOVEhFU0laRUQgTEFUSU4gQ0FQSVRBTCBMRVRURVIgVF0KK2FsaWFzCVxVMDAwMUYxMjQJXHg1NQkjICAgW1BBUkVOVEhFU0laRUQgTEFUSU4gQ0FQSVRBTCBMRVRURVIgVV0KK2FsaWFzCVxVMDAwMUYxMjUJXHg1NgkjICAgW1BBUkVOVEhFU0laRUQgTEFUSU4gQ0FQSVRBTCBMRVRURVIgVl0KK2FsaWFzCVxVMDAwMUYxMjYJXHg1NwkjICAgW1BBUkVOVEhFU0laRUQgTEFUSU4gQ0FQSVRBTCBMRVRURVIgV10KK2FsaWFzCVxVMDAwMUYxMjcJXHg1OAkjICAgW1BBUkVOVEhFU0laRUQgTEFUSU4gQ0FQSVRBTCBMRVRURVIgWF0KK2FsaWFzCVxVMDAwMUYxMjgJXHg1OQkjICAgW1BBUkVOVEhFU0laRUQgTEFUSU4gQ0FQSVRBTCBMRVRURVIgWV0KK2FsaWFzCVxVMDAwMUYxMjkJXHg1QQkjICAgW1BBUkVOVEhFU0laRUQgTEFUSU4gQ0FQSVRBTCBMRVRURVIgWl0KKworYWxpYXMJXFUwMDAxRjEzMAlceDQxCSMgICBbU1FVQVJFRCBMQVRJTiBDQVBJVEFMIExFVFRFUiBBXQorYWxpYXMJXFUwMDAxRjEzMQlceDQyCSMgICBbU1FVQVJFRCBMQVRJTiBDQVBJVEFMIExFVFRFUiBCXQorYWxpYXMJXFUwMDAxRjEzMglceDQzCSMgICBbU1FVQVJFRCBMQVRJTiBDQVBJVEFMIExFVFRFUiBDXQorYWxpYXMJXFUwMDAxRjEzMwlceDQ0CSMgICBbU1FVQVJFRCBMQVRJTiBDQVBJVEFMIExFVFRFUiBEXQorYWxpYXMJXFUwMDAxRjEzNAlceDQ1CSMgICBbU1FVQVJFRCBMQVRJTiBDQVBJVEFMIExFVFRFUiBFXQorYWxpYXMJXFUwMDAxRjEzNQlceDQ2CSMgICBbU1FVQVJFRCBMQVRJTiBDQVBJVEFMIExFVFRFUiBGXQorYWxpYXMJXFUwMDAxRjEzNglceDQ3CSMgICBbU1FVQVJFRCBMQVRJTiBDQVBJVEFMIExFVFRFUiBHXQorYWxpYXMJXFUwMDAxRjEzNwlceDQ4CSMgICBbU1FVQVJFRCBMQVRJTiBDQVBJVEFMIExFVFRFUiBIXQorYWxpYXMJXFUwMDAxRjEzOAlceDQ5CSMgICBbU1FVQVJFRCBMQVRJTiBDQVBJVEFMIExFVFRFUiBJXQorYWxpYXMJXFUwMDAxRjEzOQlceDRBCSMgICBbU1FVQVJFRCBMQVRJTiBDQVBJVEFMIExFVFRFUiBKXQorYWxpYXMJXFUwMDAxRjEzQQlceDRCCSMgICBbU1FVQVJFRCBMQVRJTiBDQVBJVEFMIExFVFRFUiBLXQorYWxpYXMJXFUwMDAxRjEzQglceDRDCSMgICBbU1FVQVJFRCBMQVRJTiBDQVBJVEFMIExFVFRFUiBMXQorYWxpYXMJXFUwMDAxRjEzQwlceDRECSMgICBbU1FVQVJFRCBMQVRJTiBDQVBJVEFMIExFVFRFUiBNXQorYWxpYXMJXFUwMDAxRjEzRAlceDRFCSMgICBbU1FVQVJFRCBMQVRJTiBDQVBJVEFMIExFVFRFUiBOXQorYWxpYXMJXFUwMDAxRjEzRQlceDRGCSMgICBbU1FVQVJFRCBMQVRJTiBDQVBJVEFMIExFVFRFUiBPXQorYWxpYXMJXFUwMDAxRjEzRglceDUwCSMgICBbU1FVQVJFRCBMQVRJTiBDQVBJVEFMIExFVFRFUiBQXQorYWxpYXMJXFUwMDAxRjE0MAlceDUxCSMgICBbU1FVQVJFRCBMQVRJTiBDQVBJVEFMIExFVFRFUiBRXQorYWxpYXMJXFUwMDAxRjE0MQlceDUyCSMgICBbU1FVQVJFRCBMQVRJTiBDQVBJVEFMIExFVFRFUiBSXQorYWxpYXMJXFUwMDAxRjE0MglceDUzCSMgICBbU1FVQVJFRCBMQVRJTiBDQVBJVEFMIExFVFRFUiBTXQorYWxpYXMJXFUwMDAxRjE0MwlceDU0CSMgICBbU1FVQVJFRCBMQVRJTiBDQVBJVEFMIExFVFRFUiBUXQorYWxpYXMJXFUwMDAxRjE0NAlceDU1CSMgICBbU1FVQVJFRCBMQVRJTiBDQVBJVEFMIExFVFRFUiBVXQorYWxpYXMJXFUwMDAxRjE0NQlceDU2CSMgICBbU1FVQVJFRCBMQVRJTiBDQVBJVEFMIExFVFRFUiBWXQorYWxpYXMJXFUwMDAxRjE0NglceDU3CSMgICBbU1FVQVJFRCBMQVRJTiBDQVBJVEFMIExFVFRFUiBXXQorYWxpYXMJXFUwMDAxRjE0NwlceDU4CSMgICBbU1FVQVJFRCBMQVRJTiBDQVBJVEFMIExFVFRFUiBYXQorYWxpYXMJXFUwMDAxRjE0OAlceDU5CSMgICBbU1FVQVJFRCBMQVRJTiBDQVBJVEFMIExFVFRFUiBZXQorYWxpYXMJXFUwMDAxRjE0OQlceDVBCSMgICBbU1FVQVJFRCBMQVRJTiBDQVBJVEFMIExFVFRFUiBaXQorCithbGlhcwlcVTAwMDFGMTUwCVx4NDEJIyAgIFtORUdBVElWRSBDSVJDTEVEIExBVElOIENBUElUQUwgTEVUVEVSIEFdCithbGlhcwlcVTAwMDFGMTUxCVx4NDIJIyAgIFtORUdBVElWRSBDSVJDTEVEIExBVElOIENBUElUQUwgTEVUVEVSIEJdCithbGlhcwlcVTAwMDFGMTUyCVx4NDMJIyAgIFtORUdBVElWRSBDSVJDTEVEIExBVElOIENBUElUQUwgTEVUVEVSIENdCithbGlhcwlcVTAwMDFGMTUzCVx4NDQJIyAgIFtORUdBVElWRSBDSVJDTEVEIExBVElOIENBUElUQUwgTEVUVEVSIERdCithbGlhcwlcVTAwMDFGMTU0CVx4NDUJIyAgIFtORUdBVElWRSBDSVJDTEVEIExBVElOIENBUElUQUwgTEVUVEVSIEVdCithbGlhcwlcVTAwMDFGMTU1CVx4NDYJIyAgIFtORUdBVElWRSBDSVJDTEVEIExBVElOIENBUElUQUwgTEVUVEVSIEZdCithbGlhcwlcVTAwMDFGMTU2CVx4NDcJIyAgIFtORUdBVElWRSBDSVJDTEVEIExBVElOIENBUElUQUwgTEVUVEVSIEddCithbGlhcwlcVTAwMDFGMTU3CVx4NDgJIyAgIFtORUdBVElWRSBDSVJDTEVEIExBVElOIENBUElUQUwgTEVUVEVSIEhdCithbGlhcwlcVTAwMDFGMTU4CVx4NDkJIyAgIFtORUdBVElWRSBDSVJDTEVEIExBVElOIENBUElUQUwgTEVUVEVSIEldCithbGlhcwlcVTAwMDFGMTU5CVx4NEEJIyAgIFtORUdBVElWRSBDSVJDTEVEIExBVElOIENBUElUQUwgTEVUVEVSIEpdCithbGlhcwlcVTAwMDFGMTVBCVx4NEIJIyAgIFtORUdBVElWRSBDSVJDTEVEIExBVElOIENBUElUQUwgTEVUVEVSIEtdCithbGlhcwlcVTAwMDFGMTVCCVx4NEMJIyAgIFtORUdBVElWRSBDSVJDTEVEIExBVElOIENBUElUQUwgTEVUVEVSIExdCithbGlhcwlcVTAwMDFGMTVDCVx4NEQJIyAgIFtORUdBVElWRSBDSVJDTEVEIExBVElOIENBUElUQUwgTEVUVEVSIE1dCithbGlhcwlcVTAwMDFGMTVECVx4NEUJIyAgIFtORUdBVElWRSBDSVJDTEVEIExBVElOIENBUElUQUwgTEVUVEVSIE5dCithbGlhcwlcVTAwMDFGMTVFCVx4NEYJIyAgIFtORUdBVElWRSBDSVJDTEVEIExBVElOIENBUElUQUwgTEVUVEVSIE9dCithbGlhcwlcVTAwMDFGMTVGCVx4NTAJIyAgIFtORUdBVElWRSBDSVJDTEVEIExBVElOIENBUElUQUwgTEVUVEVSIFBdCithbGlhcwlcVTAwMDFGMTYwCVx4NTEJIyAgIFtORUdBVElWRSBDSVJDTEVEIExBVElOIENBUElUQUwgTEVUVEVSIFFdCithbGlhcwlcVTAwMDFGMTYxCVx4NTIJIyAgIFtORUdBVElWRSBDSVJDTEVEIExBVElOIENBUElUQUwgTEVUVEVSIFJdCithbGlhcwlcVTAwMDFGMTYyCVx4NTMJIyAgIFtORUdBVElWRSBDSVJDTEVEIExBVElOIENBUElUQUwgTEVUVEVSIFNdCithbGlhcwlcVTAwMDFGMTYzCVx4NTQJIyAgIFtORUdBVElWRSBDSVJDTEVEIExBVElOIENBUElUQUwgTEVUVEVSIFRdCithbGlhcwlcVTAwMDFGMTY0CVx4NTUJIyAgIFtORUdBVElWRSBDSVJDTEVEIExBVElOIENBUElUQUwgTEVUVEVSIFVdCithbGlhcwlcVTAwMDFGMTY1CVx4NTYJIyAgIFtORUdBVElWRSBDSVJDTEVEIExBVElOIENBUElUQUwgTEVUVEVSIFZdCithbGlhcwlcVTAwMDFGMTY2CVx4NTcJIyAgIFtORUdBVElWRSBDSVJDTEVEIExBVElOIENBUElUQUwgTEVUVEVSIFddCithbGlhcwlcVTAwMDFGMTY3CVx4NTgJIyAgIFtORUdBVElWRSBDSVJDTEVEIExBVElOIENBUElUQUwgTEVUVEVSIFhdCithbGlhcwlcVTAwMDFGMTY4CVx4NTkJIyAgIFtORUdBVElWRSBDSVJDTEVEIExBVElOIENBUElUQUwgTEVUVEVSIFldCithbGlhcwlcVTAwMDFGMTY5CVx4NUEJIyAgIFtORUdBVElWRSBDSVJDTEVEIExBVElOIENBUElUQUwgTEVUVEVSIFpdCisKK2FsaWFzCVxVMDAwMUYxNzAJXHg0MQkjICAgW05FR0FUSVZFIFNRVUFSRUQgTEFUSU4gQ0FQSVRBTCBMRVRURVIgQV0KK2FsaWFzCVxVMDAwMUYxNzEJXHg0MgkjICAgW05FR0FUSVZFIFNRVUFSRUQgTEFUSU4gQ0FQSVRBTCBMRVRURVIgQl0KK2FsaWFzCVxVMDAwMUYxNzIJXHg0MwkjICAgW05FR0FUSVZFIFNRVUFSRUQgTEFUSU4gQ0FQSVRBTCBMRVRURVIgQ10KK2FsaWFzCVxVMDAwMUYxNzMJXHg0NAkjICAgW05FR0FUSVZFIFNRVUFSRUQgTEFUSU4gQ0FQSVRBTCBMRVRURVIgRF0KK2FsaWFzCVxVMDAwMUYxNzQJXHg0NQkjICAgW05FR0FUSVZFIFNRVUFSRUQgTEFUSU4gQ0FQSVRBTCBMRVRURVIgRV0KK2FsaWFzCVxVMDAwMUYxNzUJXHg0NgkjICAgW05FR0FUSVZFIFNRVUFSRUQgTEFUSU4gQ0FQSVRBTCBMRVRURVIgRl0KK2FsaWFzCVxVMDAwMUYxNzYJXHg0NwkjICAgW05FR0FUSVZFIFNRVUFSRUQgTEFUSU4gQ0FQSVRBTCBMRVRURVIgR10KK2FsaWFzCVxVMDAwMUYxNzcJXHg0OAkjICAgW05FR0FUSVZFIFNRVUFSRUQgTEFUSU4gQ0FQSVRBTCBMRVRURVIgSF0KK2FsaWFzCVxVMDAwMUYxNzgJXHg0OQkjICAgW05FR0FUSVZFIFNRVUFSRUQgTEFUSU4gQ0FQSVRBTCBMRVRURVIgSV0KK2FsaWFzCVxVMDAwMUYxNzkJXHg0QQkjICAgW05FR0FUSVZFIFNRVUFSRUQgTEFUSU4gQ0FQSVRBTCBMRVRURVIgSl0KK2FsaWFzCVxVMDAwMUYxN0EJXHg0QgkjICAgW05FR0FUSVZFIFNRVUFSRUQgTEFUSU4gQ0FQSVRBTCBMRVRURVIgS10KK2FsaWFzCVxVMDAwMUYxN0IJXHg0QwkjICAgW05FR0FUSVZFIFNRVUFSRUQgTEFUSU4gQ0FQSVRBTCBMRVRURVIgTF0KK2FsaWFzCVxVMDAwMUYxN0MJXHg0RAkjICAgW05FR0FUSVZFIFNRVUFSRUQgTEFUSU4gQ0FQSVRBTCBMRVRURVIgTV0KK2FsaWFzCVxVMDAwMUYxN0QJXHg0RQkjICAgW05FR0FUSVZFIFNRVUFSRUQgTEFUSU4gQ0FQSVRBTCBMRVRURVIgTl0KK2FsaWFzCVxVMDAwMUYxN0UJXHg0RgkjICAgW05FR0FUSVZFIFNRVUFSRUQgTEFUSU4gQ0FQSVRBTCBMRVRURVIgT10KK2FsaWFzCVxVMDAwMUYxN0YJXHg1MAkjICAgW05FR0FUSVZFIFNRVUFSRUQgTEFUSU4gQ0FQSVRBTCBMRVRURVIgUF0KK2FsaWFzCVxVMDAwMUYxODAJXHg1MQkjICAgW05FR0FUSVZFIFNRVUFSRUQgTEFUSU4gQ0FQSVRBTCBMRVRURVIgUV0KK2FsaWFzCVxVMDAwMUYxODEJXHg1MgkjICAgW05FR0FUSVZFIFNRVUFSRUQgTEFUSU4gQ0FQSVRBTCBMRVRURVIgUl0KK2FsaWFzCVxVMDAwMUYxODIJXHg1MwkjICAgW05FR0FUSVZFIFNRVUFSRUQgTEFUSU4gQ0FQSVRBTCBMRVRURVIgU10KK2FsaWFzCVxVMDAwMUYxODMJXHg1NAkjICAgW05FR0FUSVZFIFNRVUFSRUQgTEFUSU4gQ0FQSVRBTCBMRVRURVIgVF0KK2FsaWFzCVxVMDAwMUYxODQJXHg1NQkjICAgW05FR0FUSVZFIFNRVUFSRUQgTEFUSU4gQ0FQSVRBTCBMRVRURVIgVV0KK2FsaWFzCVxVMDAwMUYxODUJXHg1NgkjICAgW05FR0FUSVZFIFNRVUFSRUQgTEFUSU4gQ0FQSVRBTCBMRVRURVIgVl0KK2FsaWFzCVxVMDAwMUYxODYJXHg1NwkjICAgW05FR0FUSVZFIFNRVUFSRUQgTEFUSU4gQ0FQSVRBTCBMRVRURVIgV10KK2FsaWFzCVxVMDAwMUYxODcJXHg1OAkjICAgW05FR0FUSVZFIFNRVUFSRUQgTEFUSU4gQ0FQSVRBTCBMRVRURVIgWF0KK2FsaWFzCVxVMDAwMUYxODgJXHg1OQkjICAgW05FR0FUSVZFIFNRVUFSRUQgTEFUSU4gQ0FQSVRBTCBMRVRURVIgWV0KK2FsaWFzCVxVMDAwMUYxODkJXHg1QQkjICAgW05FR0FUSVZFIFNRVUFSRUQgTEFUSU4gQ0FQSVRBTCBMRVRURVIgWl0KZGlmZiAtLWdpdCBhL1RhYmxlcy9UZXh0L2x0ci1jeXJpbGxpYy50dGkgYi9UYWJsZXMvVGV4dC9sdHItY3lyaWxsaWMudHRpCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY4YjlmZGEKLS0tIC9kZXYvbnVsbAorKysgYi9UYWJsZXMvVGV4dC9sdHItY3lyaWxsaWMudHRpCkBAIC0wLDAgKzEsMTA3IEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisjICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorIworIyBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisjCisjIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisjCisjIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyMgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorIyBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyMKKyMgV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworIworIyBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIyBUaGlzIEJSTFRUWSB0ZXh0IHN1YnRhYmxlIGRlZmluZXMgdGhlIHN0YW5kYXJkIGJyYWlsbGUgcmVwcmVzZW50YXRpb25zCisjIGZvciB0aGUgbGV0dGVycyBvZiB0aGUgQ3lyaWxsaWMgYWxwaGFiZXQuCisKKyMgbG93ZXJjYXNlIGxldHRlcnMKK2NoYXIgXHUwNDMwCSgxICAgICAgICkgICMg4qCBINCwIFtDWVJJTExJQyBTTUFMTCBMRVRURVIgQV0KK2NoYXIgXHUwNDMxCSgxMiAgICAgICkgICMg4qCDINCxIFtDWVJJTExJQyBTTUFMTCBMRVRURVIgQkVdCitjaGFyIFx1MDQzMgkoIDIgNDU2ICApICAjIOKguiDQsiBbQ1lSSUxMSUMgU01BTEwgTEVUVEVSIFZFXQorY2hhciBcdTA0MzMJKDEyIDQ1ICAgKSAgIyDioJsg0LMgW0NZUklMTElDIFNNQUxMIExFVFRFUiBHSEVdCitjaGFyIFx1MDQzNAkoMSAgNDUgICApICAjIOKgmSDQtCBbQ1lSSUxMSUMgU01BTEwgTEVUVEVSIERFXQorY2hhciBcdTA0MzUJKDEgICA1ICAgKSAgIyDioJEg0LUgW0NZUklMTElDIFNNQUxMIExFVFRFUiBJRV0KK2NoYXIgXHUwNDM2CSggMiA0NSAgICkgICMg4qCaINC2IFtDWVJJTExJQyBTTUFMTCBMRVRURVIgWkhFXQorY2hhciBcdTA0MzcJKDEgMyA1NiAgKSAgIyDioLUg0LcgW0NZUklMTElDIFNNQUxMIExFVFRFUiBaRV0KK2NoYXIgXHUwNDM4CSggMiA0ICAgICkgICMg4qCKINC4IFtDWVJJTExJQyBTTUFMTCBMRVRURVIgSV0KK2NoYXIgXHUwNDM5CSgxMjM0IDYgICkgICMg4qCvINC5IFtDWVJJTExJQyBTTUFMTCBMRVRURVIgU0hPUlQgSV0KK2NoYXIgXHUwNDNBCSgxIDMgICAgICkgICMg4qCFINC6IFtDWVJJTExJQyBTTUFMTCBMRVRURVIgS0FdCitjaGFyIFx1MDQzQgkoMTIzICAgICApICAjIOKghyDQuyBbQ1lSSUxMSUMgU01BTEwgTEVUVEVSIEVMXQorY2hhciBcdTA0M0MJKDEgMzQgICAgKSAgIyDioI0g0LwgW0NZUklMTElDIFNNQUxMIExFVFRFUiBFTV0KK2NoYXIgXHUwNDNECSgxIDM0NSAgICkgICMg4qCdINC9IFtDWVJJTExJQyBTTUFMTCBMRVRURVIgRU5dCitjaGFyIFx1MDQzRQkoMSAzIDUgICApICAjIOKglSDQviBbQ1lSSUxMSUMgU01BTEwgTEVUVEVSIE9dCitjaGFyIFx1MDQzRgkoMTIzNCAgICApICAjIOKgjyDQvyBbQ1lSSUxMSUMgU01BTEwgTEVUVEVSIFBFXQorY2hhciBcdTA0NDAJKDEyMyA1ICAgKSAgIyDioJcg0YAgW0NZUklMTElDIFNNQUxMIExFVFRFUiBFUl0KK2NoYXIgXHUwNDQxCSggMjM0ICAgICkgICMg4qCOINGBIFtDWVJJTExJQyBTTUFMTCBMRVRURVIgRVNdCitjaGFyIFx1MDQ0MgkoIDIzNDUgICApICAjIOKgniDRgiBbQ1lSSUxMSUMgU01BTEwgTEVUVEVSIFRFXQorY2hhciBcdTA0NDMJKDEgMyAgNiAgKSAgIyDioKUg0YMgW0NZUklMTElDIFNNQUxMIExFVFRFUiBVXQorY2hhciBcdTA0NDQJKDEyIDQgICAgKSAgIyDioIsg0YQgW0NZUklMTElDIFNNQUxMIExFVFRFUiBFRl0KK2NoYXIgXHUwNDQ1CSgxMiAgNSAgICkgICMg4qCTINGFIFtDWVJJTExJQyBTTUFMTCBMRVRURVIgSEFdCitjaGFyIFx1MDQ0NgkoMSAgNCAgICApICAjIOKgiSDRhiBbQ1lSSUxMSUMgU01BTEwgTEVUVEVSIFRTRV0KK2NoYXIgXHUwNDQ3CSgxMjM0NSAgICkgICMg4qCfINGHIFtDWVJJTExJQyBTTUFMTCBMRVRURVIgQ0hFXQorY2hhciBcdTA0NDgJKDEgICA1NiAgKSAgIyDioLEg0YggW0NZUklMTElDIFNNQUxMIExFVFRFUiBTSEFdCitjaGFyIFx1MDQ0OQkoMSAzNCA2ICApICAjIOKgrSDRiSBbQ1lSSUxMSUMgU01BTEwgTEVUVEVSIFNIQ0hBXQorY2hhciBcdTA0NEEJKDEyMyA1NiAgKSAgIyDioLcg0YogW0NZUklMTElDIFNNQUxMIExFVFRFUiBIQVJEIFNJR05dCitjaGFyIFx1MDQ0QgkoIDIzNCA2ICApICAjIOKgriDRiyBbQ1lSSUxMSUMgU01BTEwgTEVUVEVSIFlFUlVdCitjaGFyIFx1MDQ0QwkoIDIzNDU2ICApICAjIOKgviDRjCBbQ1lSSUxMSUMgU01BTEwgTEVUVEVSIFNPRlQgU0lHTl0KK2NoYXIgXHUwNDRECSggMiA0IDYgICkgICMg4qCqINGNIFtDWVJJTExJQyBTTUFMTCBMRVRURVIgRV0KK2NoYXIgXHUwNDRFCSgxMiAgNTYgICkgICMg4qCzINGOIFtDWVJJTExJQyBTTUFMTCBMRVRURVIgWVVdCitjaGFyIFx1MDQ0RgkoMTIgNCA2ICApICAjIOKgqyDRjyBbQ1lSSUxMSUMgU01BTEwgTEVUVEVSIFlBXQorY2hhciBcdTA0NTEJKDEgICAgNiAgKSAgIyDioKEg0ZEgW0NZUklMTElDIFNNQUxMIExFVFRFUiBJT10KK2NoYXIgXHUwNDU0CSggIDM0NSAgICkgICMg4qCcINGUIFtDWVJJTExJQyBTTUFMTCBMRVRURVIgVUtSQUlOSUFOIElFXQorY2hhciBcdTA0NTYJKDEgMzQ1NiAgKSAgIyDioL0g0ZYgW0NZUklMTElDIFNNQUxMIExFVFRFUiBCWUVMT1JVU1NJQU4tVUtSQUlOSUFOIEldCitjaGFyIFx1MDQ1NwkoMSAgNDU2ICApICAjIOKguSDRlyBbQ1lSSUxMSUMgU01BTEwgTEVUVEVSIFlJXQorY2hhciBcdTA0OTEJKDEyIDQ1NiAgKSAgIyDioLsg0pEgW0NZUklMTElDIFNNQUxMIExFVFRFUiBHSEUgV0lUSCBVUFRVUk5dCisKKyMgdXBwZXJjYXNlIGxldHRlcnMKK2NoYXIgXHUwNDEwCSgxICAgICA3ICkgICMg4qGBINCQIFtDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBBXQorY2hhciBcdTA0MTEJKDEyICAgIDcgKSAgIyDioYMg0JEgW0NZUklMTElDIENBUElUQUwgTEVUVEVSIEJFXQorY2hhciBcdTA0MTIJKCAyIDQ1NjcgKSAgIyDiobog0JIgW0NZUklMTElDIENBUElUQUwgTEVUVEVSIFZFXQorY2hhciBcdTA0MTMJKDEyIDQ1IDcgKSAgIyDioZsg0JMgW0NZUklMTElDIENBUElUQUwgTEVUVEVSIEdIRV0KK2NoYXIgXHUwNDE0CSgxICA0NSA3ICkgICMg4qGZINCUIFtDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBERV0KK2NoYXIgXHUwNDE1CSgxICAgNSA3ICkgICMg4qGRINCVIFtDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBJRV0KK2NoYXIgXHUwNDE2CSggMiA0NSA3ICkgICMg4qGaINCWIFtDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBaSEVdCitjaGFyIFx1MDQxNwkoMSAzIDU2NyApICAjIOKhtSDQlyBbQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgWkVdCitjaGFyIFx1MDQxOAkoIDIgNCAgNyApICAjIOKhiiDQmCBbQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgSV0KK2NoYXIgXHUwNDE5CSgxMjM0IDY3ICkgICMg4qGvINCZIFtDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBTSE9SVCBJXQorY2hhciBcdTA0MUEJKDEgMyAgIDcgKSAgIyDioYUg0JogW0NZUklMTElDIENBUElUQUwgTEVUVEVSIEtBXQorY2hhciBcdTA0MUIJKDEyMyAgIDcgKSAgIyDioYcg0JsgW0NZUklMTElDIENBUElUQUwgTEVUVEVSIEVMXQorY2hhciBcdTA0MUMJKDEgMzQgIDcgKSAgIyDioY0g0JwgW0NZUklMTElDIENBUElUQUwgTEVUVEVSIEVNXQorY2hhciBcdTA0MUQJKDEgMzQ1IDcgKSAgIyDioZ0g0J0gW0NZUklMTElDIENBUElUQUwgTEVUVEVSIEVOXQorY2hhciBcdTA0MUUJKDEgMyA1IDcgKSAgIyDioZUg0J4gW0NZUklMTElDIENBUElUQUwgTEVUVEVSIE9dCitjaGFyIFx1MDQxRgkoMTIzNCAgNyApICAjIOKhjyDQnyBbQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgUEVdCitjaGFyIFx1MDQyMAkoMTIzIDUgNyApICAjIOKhlyDQoCBbQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgRVJdCitjaGFyIFx1MDQyMQkoIDIzNCAgNyApICAjIOKhjiDQoSBbQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgRVNdCitjaGFyIFx1MDQyMgkoIDIzNDUgNyApICAjIOKhniDQoiBbQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgVEVdCitjaGFyIFx1MDQyMwkoMSAzICA2NyApICAjIOKhpSDQoyBbQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgVV0KK2NoYXIgXHUwNDI0CSgxMiA0ICA3ICkgICMg4qGLINCkIFtDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBFRl0KK2NoYXIgXHUwNDI1CSgxMiAgNSA3ICkgICMg4qGTINClIFtDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBIQV0KK2NoYXIgXHUwNDI2CSgxICA0ICA3ICkgICMg4qGJINCmIFtDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBUU0VdCitjaGFyIFx1MDQyNwkoMTIzNDUgNyApICAjIOKhnyDQpyBbQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgQ0hFXQorY2hhciBcdTA0MjgJKDEgICA1NjcgKSAgIyDiobEg0KggW0NZUklMTElDIENBUElUQUwgTEVUVEVSIFNIQV0KK2NoYXIgXHUwNDI5CSgxIDM0IDY3ICkgICMg4qGtINCpIFtDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBTSENIQV0KK2NoYXIgXHUwNDJBCSgxMjMgNTY3ICkgICMg4qG3INCqIFtDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBIQVJEIFNJR05dCitjaGFyIFx1MDQyQgkoIDIzNCA2NyApICAjIOKhriDQqyBbQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgWUVSVV0KK2NoYXIgXHUwNDJDCSggMjM0NTY3ICkgICMg4qG+INCsIFtDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBTT0ZUIFNJR05dCitjaGFyIFx1MDQyRAkoIDIgNCA2NyApICAjIOKhqiDQrSBbQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgRV0KK2NoYXIgXHUwNDJFCSgxMiAgNTY3ICkgICMg4qGzINCuIFtDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBZVV0KK2NoYXIgXHUwNDJGCSgxMiA0IDY3ICkgICMg4qGrINCvIFtDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBZQV0KK2NoYXIgXHUwNDAxCSgxICAgIDY3ICkgICMg4qGhINCBIFtDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBJT10KK2NoYXIgXHUwNDA0CSggIDM0NSA3ICkgICMg4qGcINCEIFtDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBVS1JBSU5JQU4gSUVdCitjaGFyIFx1MDQwNgkoMSAzNDU2NyApICAjIOKhvSDQhiBbQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgQllFTE9SVVNTSUFOLVVLUkFJTklBTiBJXQorY2hhciBcdTA0MDcJKDEgIDQ1NjcgKSAgIyDiobkg0IcgW0NZUklMTElDIENBUElUQUwgTEVUVEVSIFlJXQorY2hhciBcdTA0OTAJKDEyIDQ1NjcgKSAgIyDiobsg0pAgW0NZUklMTElDIENBUElUQUwgTEVUVEVSIEdIRSBXSVRIIFVQVFVSTl0KKworIyBvYnNvbGV0ZSBsb3dlcmNhc2UgbGV0dGVycworY2hhciBcdTA0NjMJKCAgMzQ1ICAgKSAgIyDioJwg0aMgW0NZUklMTElDIFNNQUxMIExFVFRFUiBZQVRdCitjaGFyIFx1MDQ2QgkoIDIgNCA2ICApICAjIOKgqiDRqyBbQ1lSSUxMSUMgU01BTEwgTEVUVEVSIEJJRyBZVVNdCisKKyMgb2Jzb2xldGUgdXBwZXJjYXNlIGxldHRlcnMKK2NoYXIgXHUwNDYyCSggIDM0NSA3ICkgICMg4qGcINGiIFtDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBZQVRdCitjaGFyIFx1MDQ2QQkoIDIgNCA2NyApICAjIOKhqiDRqiBbQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgQklHIFlVU10KKwpkaWZmIC0tZ2l0IGEvVGFibGVzL1RleHQvbHRyLWRvdDgudHRpIGIvVGFibGVzL1RleHQvbHRyLWRvdDgudHRpCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhlOWVkYmMKLS0tIC9kZXYvbnVsbAorKysgYi9UYWJsZXMvVGV4dC9sdHItZG90OC50dGkKQEAgLTAsMCArMSw3NyBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorIyAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyMKKyMgQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorIworIyBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorIworIyBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisjIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyMgbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisjCisjIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMgVGhpcyBCUkxUVFkgdGV4dCBzdWJ0YWJsZSBkZWZpbmVzIHRoZSBicmFpbGxlIHJlcHJlc2VudGF0aW9ucyBmb3IgdGhlIGxldHRlcnMKKyMgb2YgdGhlIExhdGluIGFscGhhYmV0IGJ5IGFkZGluZyBkb3QgOCB0byB0aGVpciBzdGFuZGFyZCByZXByZXNlbnRhdGlvbnMuCisKKyMgbG93ZXJjYXNlIGxldHRlcnMKK2NoYXIgXHg2MQkoMSAgICAgIDgpICAjIOKigSBhIFtMQVRJTiBTTUFMTCBMRVRURVIgQV0KK2NoYXIgXHg2MgkoMTIgICAgIDgpICAjIOKigyBiIFtMQVRJTiBTTUFMTCBMRVRURVIgQl0KK2NoYXIgXHg2MwkoMSAgNCAgIDgpICAjIOKiiSBjIFtMQVRJTiBTTUFMTCBMRVRURVIgQ10KK2NoYXIgXHg2NAkoMSAgNDUgIDgpICAjIOKimSBkIFtMQVRJTiBTTUFMTCBMRVRURVIgRF0KK2NoYXIgXHg2NQkoMSAgIDUgIDgpICAjIOKikSBlIFtMQVRJTiBTTUFMTCBMRVRURVIgRV0KK2NoYXIgXHg2NgkoMTIgNCAgIDgpICAjIOKiiyBmIFtMQVRJTiBTTUFMTCBMRVRURVIgRl0KK2NoYXIgXHg2NwkoMTIgNDUgIDgpICAjIOKimyBnIFtMQVRJTiBTTUFMTCBMRVRURVIgR10KK2NoYXIgXHg2OAkoMTIgIDUgIDgpICAjIOKikyBoIFtMQVRJTiBTTUFMTCBMRVRURVIgSF0KK2NoYXIgXHg2OQkoIDIgNCAgIDgpICAjIOKiiiBpIFtMQVRJTiBTTUFMTCBMRVRURVIgSV0KK2NoYXIgXHg2QQkoIDIgNDUgIDgpICAjIOKimiBqIFtMQVRJTiBTTUFMTCBMRVRURVIgSl0KK2NoYXIgXHg2QgkoMSAzICAgIDgpICAjIOKihSBrIFtMQVRJTiBTTUFMTCBMRVRURVIgS10KK2NoYXIgXHg2QwkoMTIzICAgIDgpICAjIOKihyBsIFtMQVRJTiBTTUFMTCBMRVRURVIgTF0KK2NoYXIgXHg2RAkoMSAzNCAgIDgpICAjIOKijSBtIFtMQVRJTiBTTUFMTCBMRVRURVIgTV0KK2NoYXIgXHg2RQkoMSAzNDUgIDgpICAjIOKinSBuIFtMQVRJTiBTTUFMTCBMRVRURVIgTl0KK2NoYXIgXHg2RgkoMSAzIDUgIDgpICAjIOKilSBvIFtMQVRJTiBTTUFMTCBMRVRURVIgT10KK2NoYXIgXHg3MAkoMTIzNCAgIDgpICAjIOKijyBwIFtMQVRJTiBTTUFMTCBMRVRURVIgUF0KK2NoYXIgXHg3MQkoMTIzNDUgIDgpICAjIOKinyBxIFtMQVRJTiBTTUFMTCBMRVRURVIgUV0KK2NoYXIgXHg3MgkoMTIzIDUgIDgpICAjIOKilyByIFtMQVRJTiBTTUFMTCBMRVRURVIgUl0KK2NoYXIgXHg3MwkoIDIzNCAgIDgpICAjIOKijiBzIFtMQVRJTiBTTUFMTCBMRVRURVIgU10KK2NoYXIgXHg3NAkoIDIzNDUgIDgpICAjIOKiniB0IFtMQVRJTiBTTUFMTCBMRVRURVIgVF0KK2NoYXIgXHg3NQkoMSAzICA2IDgpICAjIOKipSB1IFtMQVRJTiBTTUFMTCBMRVRURVIgVV0KK2NoYXIgXHg3NgkoMTIzICA2IDgpICAjIOKipyB2IFtMQVRJTiBTTUFMTCBMRVRURVIgVl0KK2NoYXIgXHg3NwkoIDIgNDU2IDgpICAjIOKiuiB3IFtMQVRJTiBTTUFMTCBMRVRURVIgV10KK2NoYXIgXHg3OAkoMSAzNCA2IDgpICAjIOKirSB4IFtMQVRJTiBTTUFMTCBMRVRURVIgWF0KK2NoYXIgXHg3OQkoMSAzNDU2IDgpICAjIOKivSB5IFtMQVRJTiBTTUFMTCBMRVRURVIgWV0KK2NoYXIgXHg3QQkoMSAzIDU2IDgpICAjIOKitSB6IFtMQVRJTiBTTUFMTCBMRVRURVIgWl0KKworIyB1cHBlcmNhc2UgbGV0dGVycworY2hhciBceDQxCSgxICAgICA3OCkgICMg4qOBIEEgW0xBVElOIENBUElUQUwgTEVUVEVSIEFdCitjaGFyIFx4NDIJKDEyICAgIDc4KSAgIyDio4MgQiBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgQl0KK2NoYXIgXHg0MwkoMSAgNCAgNzgpICAjIOKjiSBDIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBDXQorY2hhciBceDQ0CSgxICA0NSA3OCkgICMg4qOZIEQgW0xBVElOIENBUElUQUwgTEVUVEVSIERdCitjaGFyIFx4NDUJKDEgICA1IDc4KSAgIyDio5EgRSBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgRV0KK2NoYXIgXHg0NgkoMTIgNCAgNzgpICAjIOKjiyBGIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBGXQorY2hhciBceDQ3CSgxMiA0NSA3OCkgICMg4qObIEcgW0xBVElOIENBUElUQUwgTEVUVEVSIEddCitjaGFyIFx4NDgJKDEyICA1IDc4KSAgIyDio5MgSCBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgSF0KK2NoYXIgXHg0OQkoIDIgNCAgNzgpICAjIOKjiiBJIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBJXQorY2hhciBceDRBCSggMiA0NSA3OCkgICMg4qOaIEogW0xBVElOIENBUElUQUwgTEVUVEVSIEpdCitjaGFyIFx4NEIJKDEgMyAgIDc4KSAgIyDio4UgSyBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgS10KK2NoYXIgXHg0QwkoMTIzICAgNzgpICAjIOKjhyBMIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBMXQorY2hhciBceDRECSgxIDM0ICA3OCkgICMg4qONIE0gW0xBVElOIENBUElUQUwgTEVUVEVSIE1dCitjaGFyIFx4NEUJKDEgMzQ1IDc4KSAgIyDio50gTiBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgTl0KK2NoYXIgXHg0RgkoMSAzIDUgNzgpICAjIOKjlSBPIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBPXQorY2hhciBceDUwCSgxMjM0ICA3OCkgICMg4qOPIFAgW0xBVElOIENBUElUQUwgTEVUVEVSIFBdCitjaGFyIFx4NTEJKDEyMzQ1IDc4KSAgIyDio58gUSBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgUV0KK2NoYXIgXHg1MgkoMTIzIDUgNzgpICAjIOKjlyBSIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBSXQorY2hhciBceDUzCSggMjM0ICA3OCkgICMg4qOOIFMgW0xBVElOIENBUElUQUwgTEVUVEVSIFNdCitjaGFyIFx4NTQJKCAyMzQ1IDc4KSAgIyDio54gVCBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgVF0KK2NoYXIgXHg1NQkoMSAzICA2NzgpICAjIOKjpSBVIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBVXQorY2hhciBceDU2CSgxMjMgIDY3OCkgICMg4qOnIFYgW0xBVElOIENBUElUQUwgTEVUVEVSIFZdCitjaGFyIFx4NTcJKCAyIDQ1Njc4KSAgIyDio7ogVyBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgV10KK2NoYXIgXHg1OAkoMSAzNCA2NzgpICAjIOKjrSBYIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBYXQorY2hhciBceDU5CSgxIDM0NTY3OCkgICMg4qO9IFkgW0xBVElOIENBUElUQUwgTEVUVEVSIFldCitjaGFyIFx4NUEJKDEgMyA1Njc4KSAgIyDio7UgWiBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgWl0KKwpkaWZmIC0tZ2l0IGEvVGFibGVzL1RleHQvbHRyLWxhdGluLnR0aSBiL1RhYmxlcy9UZXh0L2x0ci1sYXRpbi50dGkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODFlMTZmZAotLS0gL2Rldi9udWxsCisrKyBiL1RhYmxlcy9UZXh0L2x0ci1sYXRpbi50dGkKQEAgLTAsMCArMSw3NiBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorIyAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyMKKyMgQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorIworIyBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorIworIyBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisjIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyMgbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisjCisjIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMgVGhpcyBCUkxUVFkgdGV4dCBzdWJ0YWJsZSBkZWZpbmVzIHRoZSBzdGFuZGFyZCBicmFpbGxlIHJlcHJlc2VudGF0aW9ucworIyBmb3IgdGhlIGxldHRlcnMgb2YgdGhlIExhdGluIGFscGhhYmV0LgorCitjaGFyIFx4NDEJKDEgICAgIDcgKSAgIyDioYEgQSBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgQV0KK2NoYXIgXHg0MgkoMTIgICAgNyApICAjIOKhgyBCIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBCXQorY2hhciBceDQzCSgxICA0ICA3ICkgICMg4qGJIEMgW0xBVElOIENBUElUQUwgTEVUVEVSIENdCitjaGFyIFx4NDQJKDEgIDQ1IDcgKSAgIyDioZkgRCBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgRF0KK2NoYXIgXHg0NQkoMSAgIDUgNyApICAjIOKhkSBFIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBFXQorY2hhciBceDQ2CSgxMiA0ICA3ICkgICMg4qGLIEYgW0xBVElOIENBUElUQUwgTEVUVEVSIEZdCitjaGFyIFx4NDcJKDEyIDQ1IDcgKSAgIyDioZsgRyBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgR10KK2NoYXIgXHg0OAkoMTIgIDUgNyApICAjIOKhkyBIIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBIXQorY2hhciBceDQ5CSggMiA0ICA3ICkgICMg4qGKIEkgW0xBVElOIENBUElUQUwgTEVUVEVSIEldCitjaGFyIFx4NEEJKCAyIDQ1IDcgKSAgIyDioZogSiBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgSl0KK2NoYXIgXHg0QgkoMSAzICAgNyApICAjIOKhhSBLIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBLXQorY2hhciBceDRDCSgxMjMgICA3ICkgICMg4qGHIEwgW0xBVElOIENBUElUQUwgTEVUVEVSIExdCitjaGFyIFx4NEQJKDEgMzQgIDcgKSAgIyDioY0gTSBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgTV0KK2NoYXIgXHg0RQkoMSAzNDUgNyApICAjIOKhnSBOIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBOXQorY2hhciBceDRGCSgxIDMgNSA3ICkgICMg4qGVIE8gW0xBVElOIENBUElUQUwgTEVUVEVSIE9dCitjaGFyIFx4NTAJKDEyMzQgIDcgKSAgIyDioY8gUCBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgUF0KK2NoYXIgXHg1MQkoMTIzNDUgNyApICAjIOKhnyBRIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBRXQorY2hhciBceDUyCSgxMjMgNSA3ICkgICMg4qGXIFIgW0xBVElOIENBUElUQUwgTEVUVEVSIFJdCitjaGFyIFx4NTMJKCAyMzQgIDcgKSAgIyDioY4gUyBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgU10KK2NoYXIgXHg1NAkoIDIzNDUgNyApICAjIOKhniBUIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBUXQorY2hhciBceDU1CSgxIDMgIDY3ICkgICMg4qGlIFUgW0xBVElOIENBUElUQUwgTEVUVEVSIFVdCitjaGFyIFx4NTYJKDEyMyAgNjcgKSAgIyDioacgViBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgVl0KK2NoYXIgXHg1NwkoIDIgNDU2NyApICAjIOKhuiBXIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBXXQorY2hhciBceDU4CSgxIDM0IDY3ICkgICMg4qGtIFggW0xBVElOIENBUElUQUwgTEVUVEVSIFhdCitjaGFyIFx4NTkJKDEgMzQ1NjcgKSAgIyDiob0gWSBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgWV0KK2NoYXIgXHg1QQkoMSAzIDU2NyApICAjIOKhtSBaIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBaXQorCitjaGFyIFx4NjEJKDEgICAgICAgKSAgIyDioIEgYSBbTEFUSU4gU01BTEwgTEVUVEVSIEFdCitjaGFyIFx4NjIJKDEyICAgICAgKSAgIyDioIMgYiBbTEFUSU4gU01BTEwgTEVUVEVSIEJdCitjaGFyIFx4NjMJKDEgIDQgICAgKSAgIyDioIkgYyBbTEFUSU4gU01BTEwgTEVUVEVSIENdCitjaGFyIFx4NjQJKDEgIDQ1ICAgKSAgIyDioJkgZCBbTEFUSU4gU01BTEwgTEVUVEVSIERdCitjaGFyIFx4NjUJKDEgICA1ICAgKSAgIyDioJEgZSBbTEFUSU4gU01BTEwgTEVUVEVSIEVdCitjaGFyIFx4NjYJKDEyIDQgICAgKSAgIyDioIsgZiBbTEFUSU4gU01BTEwgTEVUVEVSIEZdCitjaGFyIFx4NjcJKDEyIDQ1ICAgKSAgIyDioJsgZyBbTEFUSU4gU01BTEwgTEVUVEVSIEddCitjaGFyIFx4NjgJKDEyICA1ICAgKSAgIyDioJMgaCBbTEFUSU4gU01BTEwgTEVUVEVSIEhdCitjaGFyIFx4NjkJKCAyIDQgICAgKSAgIyDioIogaSBbTEFUSU4gU01BTEwgTEVUVEVSIEldCitjaGFyIFx4NkEJKCAyIDQ1ICAgKSAgIyDioJogaiBbTEFUSU4gU01BTEwgTEVUVEVSIEpdCitjaGFyIFx4NkIJKDEgMyAgICAgKSAgIyDioIUgayBbTEFUSU4gU01BTEwgTEVUVEVSIEtdCitjaGFyIFx4NkMJKDEyMyAgICAgKSAgIyDioIcgbCBbTEFUSU4gU01BTEwgTEVUVEVSIExdCitjaGFyIFx4NkQJKDEgMzQgICAgKSAgIyDioI0gbSBbTEFUSU4gU01BTEwgTEVUVEVSIE1dCitjaGFyIFx4NkUJKDEgMzQ1ICAgKSAgIyDioJ0gbiBbTEFUSU4gU01BTEwgTEVUVEVSIE5dCitjaGFyIFx4NkYJKDEgMyA1ICAgKSAgIyDioJUgbyBbTEFUSU4gU01BTEwgTEVUVEVSIE9dCitjaGFyIFx4NzAJKDEyMzQgICAgKSAgIyDioI8gcCBbTEFUSU4gU01BTEwgTEVUVEVSIFBdCitjaGFyIFx4NzEJKDEyMzQ1ICAgKSAgIyDioJ8gcSBbTEFUSU4gU01BTEwgTEVUVEVSIFFdCitjaGFyIFx4NzIJKDEyMyA1ICAgKSAgIyDioJcgciBbTEFUSU4gU01BTEwgTEVUVEVSIFJdCitjaGFyIFx4NzMJKCAyMzQgICAgKSAgIyDioI4gcyBbTEFUSU4gU01BTEwgTEVUVEVSIFNdCitjaGFyIFx4NzQJKCAyMzQ1ICAgKSAgIyDioJ4gdCBbTEFUSU4gU01BTEwgTEVUVEVSIFRdCitjaGFyIFx4NzUJKDEgMyAgNiAgKSAgIyDioKUgdSBbTEFUSU4gU01BTEwgTEVUVEVSIFVdCitjaGFyIFx4NzYJKDEyMyAgNiAgKSAgIyDioKcgdiBbTEFUSU4gU01BTEwgTEVUVEVSIFZdCitjaGFyIFx4NzcJKCAyIDQ1NiAgKSAgIyDioLogdyBbTEFUSU4gU01BTEwgTEVUVEVSIFddCitjaGFyIFx4NzgJKDEgMzQgNiAgKSAgIyDioK0geCBbTEFUSU4gU01BTEwgTEVUVEVSIFhdCitjaGFyIFx4NzkJKDEgMzQ1NiAgKSAgIyDioL0geSBbTEFUSU4gU01BTEwgTEVUVEVSIFldCitjaGFyIFx4N0EJKDEgMyA1NiAgKSAgIyDioLUgeiBbTEFUSU4gU01BTEwgTEVUVEVSIFpdCisKK2luY2x1ZGUgbHRyLWFsaWFzLnR0aQpkaWZmIC0tZ2l0IGEvVGFibGVzL1RleHQvbHRyLXRpYmV0YW4udHRpIGIvVGFibGVzL1RleHQvbHRyLXRpYmV0YW4udHRpCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc4NTk4YjEKLS0tIC9kZXYvbnVsbAorKysgYi9UYWJsZXMvVGV4dC9sdHItdGliZXRhbi50dGkKQEAgLTAsMCArMSw5MiBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorIyAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyMKKyMgQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorIworIyBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorIworIyBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisjIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyMgbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisjCisjIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMgVGhpcyBCUkxUVFkgdGV4dCBzdWJ0YWJsZSBkZWZpbmVzIHRoZSBzdGFuZGFyZCBicmFpbGxlIHJlcHJlc2VudGF0aW9ucworIyBmb3IgdGhlIGxldHRlcnMgb2YgdGhlIFRpYmV0YW4gYWxwaGFiZXQuCisjCisjIFPDqWJhc3RpZW4gSGluZGVyZXIgPFNlYmFzdGllbi5IaW5kZXJlckBlbnMtbHlvbi5vcmc+CisKKyMgbm9uIHN1YmpvaW5lZCBsZXR0ZXJzIChkb3QgNyBhZGRlZCkKK2NoYXIgXHUwRjQwCSgxIDMgICA3ICkgICMg4qGFIOC9gCBbVElCRVRBTiBMRVRURVIgS0FdCitjaGFyIFx1MEY0MQkoMSAgNCAgNyApICAjIOKhiSDgvYEgW1RJQkVUQU4gTEVUVEVSIEtIQV0KK2NoYXIgXHUwRjQyCSgxMiA0NSA3ICkgICMg4qGbIOC9giBbVElCRVRBTiBMRVRURVIgR0FdCitjaGFyIFx1MEY0NAkoIDIzIDU2NyApICAjIOKhtiDgvYQgW1RJQkVUQU4gTEVUVEVSIE5HQV0KK2NoYXIgXHUwRjQ1CSgxICA0NTY3ICkgICMg4qG5IOC9hSBbVElCRVRBTiBMRVRURVIgQ0FdCitjaGFyIFx1MEY0NgkoMSAzNDU2NyApICAjIOKhvSDgvYYgW1RJQkVUQU4gTEVUVEVSIENIQV0KK2NoYXIgXHUwRjQ3CSgxMjM0NSA3ICkgICMg4qGfIOC9hyBbVElCRVRBTiBMRVRURVIgSkFdCitjaGFyIFx1MEY0OQkoICAzNDUgNyApICAjIOKhnCDgvYkgW1RJQkVUQU4gTEVUVEVSIE5ZQV0KK2NoYXIgXHUwRjRGCSggMjM0NSA3ICkgICMg4qGeIOC9jyBbVElCRVRBTiBMRVRURVIgVEFdCitjaGFyIFx1MEY1MAkoIDIzNDU2NyApICAjIOKhviDgvZAgW1RJQkVUQU4gTEVUVEVSIFRIQV0KK2NoYXIgXHUwRjUxCSgxICA0NSA3ICkgICMg4qGZIOC9kSBbVElCRVRBTiBMRVRURVIgREFdCitjaGFyIFx1MEY1MwkoMSAzNDUgNyApICAjIOKhnSDgvZMgW1RJQkVUQU4gTEVUVEVSIE5BXQorY2hhciBcdTBGNTQJKDEyMzQgIDcgKSAgIyDioY8g4L2UIFtUSUJFVEFOIExFVFRFUiBQQV0KK2NoYXIgXHUwRjU1CSgxMjM0IDY3ICkgICMg4qGvIOC9lSBbVElCRVRBTiBMRVRURVIgUEhBXQorY2hhciBcdTBGNTYJKDEyICAgIDcgKSAgIyDioYMg4L2WIFtUSUJFVEFOIExFVFRFUiBCQV0KK2NoYXIgXHUwRjU4CSgxIDM0ICA3ICkgICMg4qGNIOC9mCBbVElCRVRBTiBMRVRURVIgTUFdCitjaGFyIFx1MEY1OQkoMSAzNCA2NyApICAjIOKhrSDgvZkgW1RJQkVUQU4gTEVUVEVSIFRTQV0KK2NoYXIgXHUwRjVBCSgxIDMgNTY3ICkgICMg4qG1IOC9miBbVElCRVRBTiBMRVRURVIgVFNIQV0KK2NoYXIgXHUwRjVCCSgxMjM0NTY3ICkgICMg4qG/IOC9myBbVElCRVRBTiBMRVRURVIgRFpBXQorY2hhciBcdTBGNUQJKCAyIDQ1NjcgKSAgIyDiobog4L2dIFtUSUJFVEFOIExFVFRFUiBXQV0KK2NoYXIgXHUwRjVFCSgxICA0IDY3ICkgICMg4qGpIOC9niBbVElCRVRBTiBMRVRURVIgWkhBXQorY2hhciBcdTBGNUYJKCAyMzQgIDcgKSAgIyDioY4g4L2fIFtUSUJFVEFOIExFVFRFUiBaQV0KK2NoYXIgXHUwRjYwCSgxMiA0IDY3ICkgICMg4qGrIOC9oCBbVElCRVRBTiBMRVRURVIgLUFdCitjaGFyIFx1MEY2MQkoIDIgNDUgNyApICAjIOKhmiDgvaEgW1RJQkVUQU4gTEVUVEVSIFlBXQorY2hhciBcdTBGNjIJKDEyMyA1IDcgKSAgIyDioZcg4L2iIFtUSUJFVEFOIExFVFRFUiBSQV0KK2NoYXIgXHUwRjYzCSgxMjMgICA3ICkgICMg4qGHIOC9oyBbVElCRVRBTiBMRVRURVIgTEFdCitjaGFyIFx1MEY2NAkoMSAgIDU2NyApICAjIOKhsSDgvaQgW1RJQkVUQU4gTEVUVEVSIFNIQV0KK2NoYXIgXHUwRjY2CSggMjM0IDY3ICkgICMg4qGuIOC9piBbVElCRVRBTiBMRVRURVIgU0FdCitjaGFyIFx1MEY2NwkoMTIgIDUgNyApICAjIOKhkyDgvacgW1RJQkVUQU4gTEVUVEVSIEhBXQorY2hhciBcdTBGNjgJKDEgICAgIDcgKSAgIyDioYEg4L2oIFtUSUJFVEFOIExFVFRFUiBBXQorCisjIHN1YmpvaW5lZCBsZXR0ZXJzCitjaGFyIFx1MEY5MAkoMSAzICAgICApICAjIOKghSAg4L6QIFtUSUJFVEFOIFNVQkpPSU5FRCBMRVRURVIgS0FdCitjaGFyIFx1MEY5MQkoMSAgNCAgICApICAjIOKgiSAg4L6RIFtUSUJFVEFOIFNVQkpPSU5FRCBMRVRURVIgS0hBXQorY2hhciBcdTBGOTIJKDEyIDQ1ICAgKSAgIyDioJsgIOC+kiBbVElCRVRBTiBTVUJKT0lORUQgTEVUVEVSIEdBXQorY2hhciBcdTBGOTQJKCAyMyA1NiAgKSAgIyDioLYgIOC+lCBbVElCRVRBTiBTVUJKT0lORUQgTEVUVEVSIE5HQV0KK2NoYXIgXHUwRjk1CSgxICA0NTYgICkgICMg4qC5ICDgvpUgW1RJQkVUQU4gU1VCSk9JTkVEIExFVFRFUiBDQV0KK2NoYXIgXHUwRjk2CSgxIDM0NTYgICkgICMg4qC9ICDgvpYgW1RJQkVUQU4gU1VCSk9JTkVEIExFVFRFUiBDSEFdCitjaGFyIFx1MEY5NwkoMTIzNDUgICApICAjIOKgnyAg4L6XIFtUSUJFVEFOIFNVQkpPSU5FRCBMRVRURVIgSkFdCitjaGFyIFx1MEY5OQkoICAzNDUgICApICAjIOKgnCAg4L6ZIFtUSUJFVEFOIFNVQkpPSU5FRCBMRVRURVIgTllBXQorY2hhciBcdTBGOUYJKCAyMzQ1ICAgKSAgIyDioJ4gIOC+nyBbVElCRVRBTiBTVUJKT0lORUQgTEVUVEVSIFRBXQorY2hhciBcdTBGQTAJKCAyMzQ1NiAgKSAgIyDioL4gIOC+oCBbVElCRVRBTiBTVUJKT0lORUQgTEVUVEVSIFRIQV0KK2NoYXIgXHUwRkExCSgxICA0NSAgICkgICMg4qCZICDgvqEgW1RJQkVUQU4gU1VCSk9JTkVEIExFVFRFUiBEQV0KK2NoYXIgXHUwRkEzCSgxIDM0NSAgICkgICMg4qCdICDgvqMgW1RJQkVUQU4gU1VCSk9JTkVEIExFVFRFUiBOQV0KK2NoYXIgXHUwRkE0CSgxMjM0ICAgICkgICMg4qCPICDgvqQgW1RJQkVUQU4gU1VCSk9JTkVEIExFVFRFUiBQQV0KK2NoYXIgXHUwRkE1CSgxMjM0IDYgICkgICMg4qCvICDgvqUgW1RJQkVUQU4gU1VCSk9JTkVEIExFVFRFUiBQSEFdCitjaGFyIFx1MEZBNgkoMTIgICAgICApICAjIOKggyAg4L6mIFtUSUJFVEFOIFNVQkpPSU5FRCBMRVRURVIgQkFdCitjaGFyIFx1MEZBOAkoMSAzNCAgICApICAjIOKgjSAg4L6oIFtUSUJFVEFOIFNVQkpPSU5FRCBMRVRURVIgTUFdCitjaGFyIFx1MEZBOQkoMSAzNCA2ICApICAjIOKgrSAg4L6pIFtUSUJFVEFOIFNVQkpPSU5FRCBMRVRURVIgVFNBXQorY2hhciBcdTBGQUEJKDEgMyA1NiAgKSAgIyDioLUgIOC+qiBbVElCRVRBTiBTVUJKT0lORUQgTEVUVEVSIFRTSEFdCitjaGFyIFx1MEZBQgkoMTIzNDU2ICApICAjIOKgvyAg4L6rIFtUSUJFVEFOIFNVQkpPSU5FRCBMRVRURVIgRFpBXQorY2hhciBcdTBGQUQJKCAyIDQ1NiAgKSAgIyDioLogIOC+rSBbVElCRVRBTiBTVUJKT0lORUQgTEVUVEVSIFdBXQorY2hhciBcdTBGQUUJKDEgIDQgNiAgKSAgIyDioKkgIOC+riBbVElCRVRBTiBTVUJKT0lORUQgTEVUVEVSIFpIQV0KK2NoYXIgXHUwRkFGCSggMjM0ICAgICkgICMg4qCOICDgvq8gW1RJQkVUQU4gU1VCSk9JTkVEIExFVFRFUiBaQV0KK2NoYXIgXHUwRkIwCSgxMiA0IDYgICkgICMg4qCrICDgvrAgW1RJQkVUQU4gU1VCSk9JTkVEIExFVFRFUiAtQV0KK2NoYXIgXHUwRkIxCSggMiA0NSAgICkgICMg4qCaICDgvrEgW1RJQkVUQU4gU1VCSk9JTkVEIExFVFRFUiBZQV0KK2NoYXIgXHUwRkIyCSgxMjMgNSAgICkgICMg4qCXICDgvrIgW1RJQkVUQU4gU1VCSk9JTkVEIExFVFRFUiBSQV0KK2NoYXIgXHUwRkIzCSgxMjMgICAgICkgICMg4qCHICDgvrMgW1RJQkVUQU4gU1VCSk9JTkVEIExFVFRFUiBMQV0KK2NoYXIgXHUwRkI0CSgxICAgNTYgICkgICMg4qCxICDgvrQgW1RJQkVUQU4gU1VCSk9JTkVEIExFVFRFUiBTSEFdCitjaGFyIFx1MEZCNgkoIDIzNCA2ICApICAjIOKgriAg4L62IFtUSUJFVEFOIFNVQkpPSU5FRCBMRVRURVIgU0FdCitjaGFyIFx1MEZCNwkoMTIgIDUgICApICAjIOKgkyAg4L63IFtUSUJFVEFOIFNVQkpPSU5FRCBMRVRURVIgSEFdCitjaGFyIFx1MEZCOAkoMSAgICAgICApICAjIOKggSAg4L64IFtUSUJFVEFOIFNVQkpPSU5FRCBMRVRURVIgQV0KKworIyB2b3dlbHMKK2NoYXIgXHUwRjcyCSggMiA0ICAgICkgICMg4qCKIOC9siBbVElCRVRBTiBWT1dFTCBTSUdOIEldCitjaGFyIFx1MEY3NAkoMSAzICA2ICApICAjIOKgpSDgvbQgW1RJQkVUQU4gVk9XRUwgU0lHTiBVXQorY2hhciBcdTBGN0EJKDEgICA1ICAgKSAgIyDioJEg4L26IFtUSUJFVEFOIFZPV0VMIFNJR04gRV0KK2NoYXIgXHUwRjdDCSgxIDMgNSAgICkgICMg4qCVIOC9vCBbVElCRVRBTiBWT1dFTCBTSUdOIE9dCmRpZmYgLS1naXQgYS9UYWJsZXMvVGV4dC9sdi50dGIgYi9UYWJsZXMvVGV4dC9sdi50dGIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTRlMjk0ZAotLS0gL2Rldi9udWxsCisrKyBiL1RhYmxlcy9UZXh0L2x2LnR0YgpAQCAtMCwwICsxLDIxOSBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorIyAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyMKKyMgQ29weXJpZ2h0IChDKSAyMDA4LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorIworIyBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorIworIyBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisjIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyMgbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisjCisjIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMgQlJMVFRZIFRleHQgVGFibGUgLSBMYXR2aWFuCisKKyMgQ3JlYXRlZCAmIG1haW50YWluZWQgYnkgTGVvbiBVbmdpZXIgPExlb24uVW5naWVyQFZpZXdQbHVzLmNvbT4uCisjCisjIENvbnZlcnRlZCBmcm9tIGxpYmxvdWlzIHRhYmxlIGJ5IFNhbXVlbCBUaGliYXVsdCA8c2FtdWVsLnRoaWJhdWx0QGVucy1seW9uLm9yZz4KKworIyBnZW5lcmF0ZWQgYnkgdHRidGVzdDogY2hhcnNldD1sYXRpbjcKK2NoYXIgXHgyMAkoICAgICAgICApICAjIDIwIOKggCAgIFtTUEFDRV0KK2NoYXIgXHgyMQkoIDIzIDUgICApICAjIDIxIOKgliAhIFtFWENMQU1BVElPTiBNQVJLXQorY2hhciBceDIyCSggIDMgNTYgICkgICMgMjIg4qC0ICIgW1FVT1RBVElPTiBNQVJLXQorY2hhciBceDIzCSggIDM0NTYgICkgICMgMjMg4qC8ICMgW05VTUJFUiBTSUdOXQorY2hhciBceDI3CSggIDMgICAgICkgICMgMjcg4qCEICcgW0FQT1NUUk9QSEVdCitjaGFyIFx4MjgJKCAyMyA1NiAgKSAgIyAyOCDioLYgKCBbTEVGVCBQQVJFTlRIRVNJU10KK2NoYXIgXHgyOQkoIDIzIDU2ICApICAjIDI5IOKgtiApIFtSSUdIVCBQQVJFTlRIRVNJU10KK2NoYXIgXHgyQwkoICAgICA2ICApICAjIDJDIOKgoCAsIFtDT01NQV0KK2NoYXIgXHgyRQkoIDIgIDU2ICApICAjIDJFIOKgsiAuIFtGVUxMIFNUT1BdCitjaGFyIFx4MkYJKCAgMzQgICAgKSAgIyAyRiDioIwgLyBbU09MSURVU10KK2NoYXIgXHgzMAkoIDIgNDUgICApICAjIDMwIOKgmiAwIFtESUdJVCBaRVJPXQorY2hhciBceDMxCSgxICAgICAgICkgICMgMzEg4qCBIDEgW0RJR0lUIE9ORV0KK2NoYXIgXHgzMgkoMTIgICAgICApICAjIDMyIOKggyAyIFtESUdJVCBUV09dCitjaGFyIFx4MzMJKDEgIDQgICAgKSAgIyAzMyDioIkgMyBbRElHSVQgVEhSRUVdCitjaGFyIFx4MzQJKDEgIDQ1ICAgKSAgIyAzNCDioJkgNCBbRElHSVQgRk9VUl0KK2NoYXIgXHgzNQkoMSAgIDUgICApICAjIDM1IOKgkSA1IFtESUdJVCBGSVZFXQorY2hhciBceDM2CSgxMiA0ICAgICkgICMgMzYg4qCLIDYgW0RJR0lUIFNJWF0KK2NoYXIgXHgzNwkoMTIgNDUgICApICAjIDM3IOKgmyA3IFtESUdJVCBTRVZFTl0KK2NoYXIgXHgzOAkoMTIgIDUgICApICAjIDM4IOKgkyA4IFtESUdJVCBFSUdIVF0KK2NoYXIgXHgzOQkoIDIgNCAgICApICAjIDM5IOKgiiA5IFtESUdJVCBOSU5FXQorY2hhciBceDNBCSggMiAgNSAgICkgICMgM0Eg4qCSIDogW0NPTE9OXQorY2hhciBceDNCCSggMjMgICAgICkgICMgM0Ig4qCGIDsgW1NFTUlDT0xPTl0KK2NoYXIgXHgzQwkoMTIgICA2ICApICAjIDNDIOKgoyA8IFtMRVNTLVRIQU4gU0lHTl0KK2NoYXIgXHgzRAkoMTIzNDU2ICApICAjIDNEIOKgvyA9IFtFUVVBTFMgU0lHTl0KK2NoYXIgXHgzRQkoICAzNDUgICApICAjIDNFIOKgnCA+IFtHUkVBVEVSLVRIQU4gU0lHTl0KK2NoYXIgXHgzRgkoIDIgICA2ICApICAjIDNGIOKgoiA/IFtRVUVTVElPTiBNQVJLXQorY2hhciBceDQxCSgxICAgICAgICkgICMgNDEg4qCBIEEgW0xBVElOIENBUElUQUwgTEVUVEVSIEFdCitjaGFyIFx4NDIJKDEyICAgICAgKSAgIyA0MiDioIMgQiBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgQl0KK2NoYXIgXHg0MwkoMSAgNCAgICApICAjIDQzIOKgiSBDIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBDXQorY2hhciBceDQ0CSgxICA0NSAgICkgICMgNDQg4qCZIEQgW0xBVElOIENBUElUQUwgTEVUVEVSIERdCitjaGFyIFx4NDUJKDEgICA1ICAgKSAgIyA0NSDioJEgRSBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgRV0KK2NoYXIgXHg0NgkoMTIgNCAgICApICAjIDQ2IOKgiyBGIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBGXQorY2hhciBceDQ3CSgxMiA0NSAgICkgICMgNDcg4qCbIEcgW0xBVElOIENBUElUQUwgTEVUVEVSIEddCitjaGFyIFx4NDgJKDEyICA1ICAgKSAgIyA0OCDioJMgSCBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgSF0KK2NoYXIgXHg0OQkoIDIgNCAgICApICAjIDQ5IOKgiiBJIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBJXQorY2hhciBceDRBCSggMiA0NSAgICkgICMgNEEg4qCaIEogW0xBVElOIENBUElUQUwgTEVUVEVSIEpdCitjaGFyIFx4NEIJKDEgMyAgICAgKSAgIyA0QiDioIUgSyBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgS10KK2NoYXIgXHg0QwkoMTIzICAgICApICAjIDRDIOKghyBMIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBMXQorY2hhciBceDRECSgxIDM0ICAgICkgICMgNEQg4qCNIE0gW0xBVElOIENBUElUQUwgTEVUVEVSIE1dCitjaGFyIFx4NEUJKDEgMzQ1ICAgKSAgIyA0RSDioJ0gTiBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgTl0KK2NoYXIgXHg0RgkoMSAzIDUgICApICAjIDRGIOKglSBPIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBPXQorY2hhciBceDUwCSgxMjM0ICAgICkgICMgNTAg4qCPIFAgW0xBVElOIENBUElUQUwgTEVUVEVSIFBdCitjaGFyIFx4NTEJKDEyMzQ1ICAgKSAgIyA1MSDioJ8gUSBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgUV0KK2NoYXIgXHg1MgkoMTIzIDUgICApICAjIDUyIOKglyBSIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBSXQorY2hhciBceDUzCSggMjM0ICAgICkgICMgNTMg4qCOIFMgW0xBVElOIENBUElUQUwgTEVUVEVSIFNdCitjaGFyIFx4NTQJKCAyMzQ1ICAgKSAgIyA1NCDioJ4gVCBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgVF0KK2NoYXIgXHg1NQkoICAzNCAgICApICAjIDU1IOKgjCBVIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBVXQorY2hhciBceDU2CSggMiA0NTYgICkgICMgNTYg4qC6IFYgW0xBVElOIENBUElUQUwgTEVUVEVSIFZdCitjaGFyIFx4NTcJKCAyIDQ1NiAgKSAgIyA1NyDioLogVyBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgV10KK2NoYXIgXHg1OAkoMSAzNCA2ICApICAjIDU4IOKgrSBYIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBYXQorY2hhciBceDU5CSgxIDM0NTYgICkgICMgNTkg4qC9IFkgW0xBVElOIENBUElUQUwgTEVUVEVSIFldCitjaGFyIFx4NUEJKCAgMzQ1ICAgKSAgIyA1QSDioJwgWiBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgWl0KK2NoYXIgXHg1RQkoICAgNDUgICApICAjIDVFIOKgmCBeIFtDSVJDVU1GTEVYIEFDQ0VOVF0KK2NoYXIgXHg2MQkoMSAgICAgICApICAjIDYxIOKggSBhIFtMQVRJTiBTTUFMTCBMRVRURVIgQV0KK2NoYXIgXHg2MgkoMTIgICAgICApICAjIDYyIOKggyBiIFtMQVRJTiBTTUFMTCBMRVRURVIgQl0KK2NoYXIgXHg2MwkoMSAgNCAgICApICAjIDYzIOKgiSBjIFtMQVRJTiBTTUFMTCBMRVRURVIgQ10KK2NoYXIgXHg2NAkoMSAgNDUgICApICAjIDY0IOKgmSBkIFtMQVRJTiBTTUFMTCBMRVRURVIgRF0KK2NoYXIgXHg2NQkoMSAgIDUgICApICAjIDY1IOKgkSBlIFtMQVRJTiBTTUFMTCBMRVRURVIgRV0KK2NoYXIgXHg2NgkoMTIgNCAgICApICAjIDY2IOKgiyBmIFtMQVRJTiBTTUFMTCBMRVRURVIgRl0KK2NoYXIgXHg2NwkoMTIgNDUgICApICAjIDY3IOKgmyBnIFtMQVRJTiBTTUFMTCBMRVRURVIgR10KK2NoYXIgXHg2OAkoMTIgIDUgICApICAjIDY4IOKgkyBoIFtMQVRJTiBTTUFMTCBMRVRURVIgSF0KK2NoYXIgXHg2OQkoIDIgNCAgICApICAjIDY5IOKgiiBpIFtMQVRJTiBTTUFMTCBMRVRURVIgSV0KK2NoYXIgXHg2QQkoIDIgNDUgICApICAjIDZBIOKgmiBqIFtMQVRJTiBTTUFMTCBMRVRURVIgSl0KK2NoYXIgXHg2QgkoMSAzICAgICApICAjIDZCIOKghSBrIFtMQVRJTiBTTUFMTCBMRVRURVIgS10KK2NoYXIgXHg2QwkoMTIzICAgICApICAjIDZDIOKghyBsIFtMQVRJTiBTTUFMTCBMRVRURVIgTF0KK2NoYXIgXHg2RAkoMSAzNCAgICApICAjIDZEIOKgjSBtIFtMQVRJTiBTTUFMTCBMRVRURVIgTV0KK2NoYXIgXHg2RQkoMSAzNDUgICApICAjIDZFIOKgnSBuIFtMQVRJTiBTTUFMTCBMRVRURVIgTl0KK2NoYXIgXHg2RgkoMSAzIDUgICApICAjIDZGIOKglSBvIFtMQVRJTiBTTUFMTCBMRVRURVIgT10KK2NoYXIgXHg3MAkoMTIzNCAgICApICAjIDcwIOKgjyBwIFtMQVRJTiBTTUFMTCBMRVRURVIgUF0KK2NoYXIgXHg3MQkoMTIzNDUgICApICAjIDcxIOKgnyBxIFtMQVRJTiBTTUFMTCBMRVRURVIgUV0KK2NoYXIgXHg3MgkoMTIzIDUgICApICAjIDcyIOKglyByIFtMQVRJTiBTTUFMTCBMRVRURVIgUl0KK2NoYXIgXHg3MwkoIDIzNCAgICApICAjIDczIOKgjiBzIFtMQVRJTiBTTUFMTCBMRVRURVIgU10KK2NoYXIgXHg3NAkoIDIzNDUgICApICAjIDc0IOKgniB0IFtMQVRJTiBTTUFMTCBMRVRURVIgVF0KK2NoYXIgXHg3NQkoICAzNCAgICApICAjIDc1IOKgjCB1IFtMQVRJTiBTTUFMTCBMRVRURVIgVV0KK2NoYXIgXHg3NgkoIDIgNDU2ICApICAjIDc2IOKguiB2IFtMQVRJTiBTTUFMTCBMRVRURVIgVl0KK2NoYXIgXHg3NwkoIDIgNDU2ICApICAjIDc3IOKguiB3IFtMQVRJTiBTTUFMTCBMRVRURVIgV10KK2NoYXIgXHg3OAkoMSAzNCA2ICApICAjIDc4IOKgrSB4IFtMQVRJTiBTTUFMTCBMRVRURVIgWF0KK2NoYXIgXHg3OQkoMSAzNDU2ICApICAjIDc5IOKgvSB5IFtMQVRJTiBTTUFMTCBMRVRURVIgWV0KK2NoYXIgXHg3QQkoICAzNDUgICApICAjIDdBIOKgnCB6IFtMQVRJTiBTTUFMTCBMRVRURVIgWl0KK2NoYXIgXHg3QwkoICAgNDU2ICApICAjIDdDIOKguCB8IFtWRVJUSUNBTCBMSU5FXQorY2hhciBceDdFCSggICAgNSAgICkgICMgN0Ug4qCQIH4gW1RJTERFXQorY2hhciBcdTIwMUQJKCAgMyA1NiAgKSAgIyBBMSDioLQg4oCdIFtSSUdIVCBET1VCTEUgUVVPVEFUSU9OIE1BUktdCitjaGFyIFx1MjAxRQkoIDIzICA2ICApICAjIEE1IOKgpiDigJ4gW0RPVUJMRSBMT1ctOSBRVU9UQVRJT04gTUFSS10KK2NoYXIgXHhBNwkoICAzNCA2ICApICAjIEE3IOKgrCDCpyBbU0VDVElPTiBTSUdOXQorY2hhciBceEQ4CSggMiA0IDYgICkgICMgQTgg4qCqIMOYIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBPIFdJVEggU1RST0tFXQorY2hhciBcdTIwMUMJKCAyMyAgNiAgKSAgIyBCNCDioKYg4oCcIFtMRUZUIERPVUJMRSBRVU9UQVRJT04gTUFSS10KK2NoYXIgXHhGOAkoIDIgNCA2ICApICAjIEI4IOKgqiDDuCBbTEFUSU4gU01BTEwgTEVUVEVSIE8gV0lUSCBTVFJPS0VdCitjaGFyIFx1MDEwNAkoMSAgICA2ICApICAjIEMwIOKgoSDEhCBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgQSBXSVRIIE9HT05FS10KK2NoYXIgXHUwMTAwCSgxICAgIDYgICkgICMgQzIg4qChIMSAIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBBIFdJVEggTUFDUk9OXQorY2hhciBcdTAxMDYJKDEgIDQgNiAgKSAgIyBDMyDioKkgxIYgW0xBVElOIENBUElUQUwgTEVUVEVSIEMgV0lUSCBBQ1VURV0KK2NoYXIgXHhDNAkoICAzNDUgICApICAjIEM0IOKgnCDDhCBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgQSBXSVRIIERJQUVSRVNJU10KK2NoYXIgXHhDNQkoMSAgICA2ICApICAjIEM1IOKgoSDDhSBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgQSBXSVRIIFJJTkcgQUJPVkVdCitjaGFyIFx1MDExOAkoMSAgIDU2ICApICAjIEM2IOKgsSDEmCBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgRSBXSVRIIE9HT05FS10KK2NoYXIgXHUwMTEyCSgxICAgNTYgICkgICMgQzcg4qCxIMSSIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBFIFdJVEggTUFDUk9OXQorY2hhciBcdTAxMEMJKDEgIDQgNiAgKSAgIyBDOCDioKkgxIwgW0xBVElOIENBUElUQUwgTEVUVEVSIEMgV0lUSCBDQVJPTl0KK2NoYXIgXHhDOQkoICAzNDUgICApICAjIEM5IOKgnCDDiSBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgRSBXSVRIIEFDVVRFXQorY2hhciBcdTAxNzkJKCAyMzQgNiAgKSAgIyBDQSDioK4gxbkgW0xBVElOIENBUElUQUwgTEVUVEVSIFogV0lUSCBBQ1VURV0KK2NoYXIgXHUwMTIyCSgxMiA0NTYgICkgICMgQ0Mg4qC7IMSiIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBHIFdJVEggQ0VESUxMQV0KK2NoYXIgXHUwMTM2CSgxIDMgIDYgICkgICMgQ0Qg4qClIMS2IFtMQVRJTiBDQVBJVEFMIExFVFRFUiBLIFdJVEggQ0VESUxMQV0KK2NoYXIgXHUwMTJBCSggMiA0IDYgICkgICMgQ0Ug4qCqIMSqIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBJIFdJVEggTUFDUk9OXQorY2hhciBcdTAxM0IJKDEyMyAgNiAgKSAgIyBDRiDioKcgxLsgW0xBVElOIENBUElUQUwgTEVUVEVSIEwgV0lUSCBDRURJTExBXQorY2hhciBcdTAxNjAJKDEgICA1NiAgKSAgIyBEMCDioLEgxaAgW0xBVElOIENBUElUQUwgTEVUVEVSIFMgV0lUSCBDQVJPTl0KK2NoYXIgXHUwMTQzCSgxICA0NTYgICkgICMgRDEg4qC5IMWDIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBOIFdJVEggQUNVVEVdCitjaGFyIFx1MDE0NQkoMSAzNDU2ICApICAjIEQyIOKgvSDFhSBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgTiBXSVRIIENFRElMTEFdCitjaGFyIFx4RDMJKCAyIDQgNiAgKSAgIyBEMyDioKogw5MgW0xBVElOIENBUElUQUwgTEVUVEVSIE8gV0lUSCBBQ1VURV0KK2NoYXIgXHUwMTRDCSgxIDMgNTYgICkgICMgRDQg4qC1IMWMIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBPIFdJVEggTUFDUk9OXQorY2hhciBceEQ1CSggMiA0IDYgICkgICMgRDUg4qCqIMOVIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBPIFdJVEggVElMREVdCitjaGFyIFx4RDYJKCAyIDQgNiAgKSAgIyBENiDioKogw5YgW0xBVElOIENBUElUQUwgTEVUVEVSIE8gV0lUSCBESUFFUkVTSVNdCitjaGFyIFx4RDcJKCAyMyAgNiAgKSAgIyBENyDioKYgw5cgW01VTFRJUExJQ0FUSU9OIFNJR05dCitjaGFyIFx1MDE0MQkoMTIgICA2ICApICAjIEQ5IOKgoyDFgSBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgTCBXSVRIIFNUUk9LRV0KK2NoYXIgXHUwMTVBCSggMiA0IDYgICkgICMgREEg4qCqIMWaIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBTIFdJVEggQUNVVEVdCitjaGFyIFx1MDE2QQkoICAzNCA2ICApICAjIERCIOKgrCDFqiBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgVSBXSVRIIE1BQ1JPTl0KK2NoYXIgXHhEQwkoMTIgIDU2ICApICAjIERDIOKgsyDDnCBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgVSBXSVRIIERJQUVSRVNJU10KK2NoYXIgXHUwMTdCCSgxMjM0IDYgICkgICMgREQg4qCvIMW7IFtMQVRJTiBDQVBJVEFMIExFVFRFUiBaIFdJVEggRE9UIEFCT1ZFXQorY2hhciBcdTAxN0QJKCAyMzQgNiAgKSAgIyBERSDioK4gxb0gW0xBVElOIENBUElUQUwgTEVUVEVSIFogV0lUSCBDQVJPTl0KK2NoYXIgXHUwMTA1CSgxICAgIDYgICkgICMgRTAg4qChIMSFIFtMQVRJTiBTTUFMTCBMRVRURVIgQSBXSVRIIE9HT05FS10KK2NoYXIgXHUwMTAxCSgxICAgIDYgICkgICMgRTIg4qChIMSBIFtMQVRJTiBTTUFMTCBMRVRURVIgQSBXSVRIIE1BQ1JPTl0KK2NoYXIgXHUwMTA3CSgxICA0IDYgICkgICMgRTMg4qCpIMSHIFtMQVRJTiBTTUFMTCBMRVRURVIgQyBXSVRIIEFDVVRFXQorY2hhciBceEU0CSggIDM0NSAgICkgICMgRTQg4qCcIMOkIFtMQVRJTiBTTUFMTCBMRVRURVIgQSBXSVRIIERJQUVSRVNJU10KK2NoYXIgXHhFNQkoMSAgICA2ICApICAjIEU1IOKgoSDDpSBbTEFUSU4gU01BTEwgTEVUVEVSIEEgV0lUSCBSSU5HIEFCT1ZFXQorY2hhciBcdTAxMTkJKDEgICA1NiAgKSAgIyBFNiDioLEgxJkgW0xBVElOIFNNQUxMIExFVFRFUiBFIFdJVEggT0dPTkVLXQorY2hhciBcdTAxMTMJKDEgICA1NiAgKSAgIyBFNyDioLEgxJMgW0xBVElOIFNNQUxMIExFVFRFUiBFIFdJVEggTUFDUk9OXQorY2hhciBcdTAxMEQJKDEgIDQgNiAgKSAgIyBFOCDioKkgxI0gW0xBVElOIFNNQUxMIExFVFRFUiBDIFdJVEggQ0FST05dCitjaGFyIFx4RTkJKCAgMzQ1ICAgKSAgIyBFOSDioJwgw6kgW0xBVElOIFNNQUxMIExFVFRFUiBFIFdJVEggQUNVVEVdCitjaGFyIFx1MDE3QQkoIDIzNCA2ICApICAjIEVBIOKgriDFuiBbTEFUSU4gU01BTEwgTEVUVEVSIFogV0lUSCBBQ1VURV0KK2NoYXIgXHUwMTIzCSgxMiA0NTYgICkgICMgRUMg4qC7IMSjIFtMQVRJTiBTTUFMTCBMRVRURVIgRyBXSVRIIENFRElMTEFdCitjaGFyIFx1MDEzNwkoMSAzICA2ICApICAjIEVEIOKgpSDEtyBbTEFUSU4gU01BTEwgTEVUVEVSIEsgV0lUSCBDRURJTExBXQorY2hhciBcdTAxMkIJKCAyIDQgNiAgKSAgIyBFRSDioKogxKsgW0xBVElOIFNNQUxMIExFVFRFUiBJIFdJVEggTUFDUk9OXQorY2hhciBcdTAxM0MJKDEyMyAgNiAgKSAgIyBFRiDioKcgxLwgW0xBVElOIFNNQUxMIExFVFRFUiBMIFdJVEggQ0VESUxMQV0KK2NoYXIgXHUwMTYxCSgxICAgNTYgICkgICMgRjAg4qCxIMWhIFtMQVRJTiBTTUFMTCBMRVRURVIgUyBXSVRIIENBUk9OXQorY2hhciBcdTAxNDQJKDEgIDQ1NiAgKSAgIyBGMSDioLkgxYQgW0xBVElOIFNNQUxMIExFVFRFUiBOIFdJVEggQUNVVEVdCitjaGFyIFx1MDE0NgkoMSAzNDU2ICApICAjIEYyIOKgvSDFhiBbTEFUSU4gU01BTEwgTEVUVEVSIE4gV0lUSCBDRURJTExBXQorY2hhciBceEYzCSggMiA0IDYgICkgICMgRjMg4qCqIMOzIFtMQVRJTiBTTUFMTCBMRVRURVIgTyBXSVRIIEFDVVRFXQorY2hhciBcdTAxNEQJKDEgMyA1NiAgKSAgIyBGNCDioLUgxY0gW0xBVElOIFNNQUxMIExFVFRFUiBPIFdJVEggTUFDUk9OXQorY2hhciBceEY1CSggMiA0IDYgICkgICMgRjUg4qCqIMO1IFtMQVRJTiBTTUFMTCBMRVRURVIgTyBXSVRIIFRJTERFXQorY2hhciBceEY2CSggMiA0IDYgICkgICMgRjYg4qCqIMO2IFtMQVRJTiBTTUFMTCBMRVRURVIgTyBXSVRIIERJQUVSRVNJU10KK2NoYXIgXHhGNwkoIDIgIDU2ICApICAjIEY3IOKgsiDDtyBbRElWSVNJT04gU0lHTl0KK2NoYXIgXHUwMTQyCSgxMiAgIDYgICkgICMgRjkg4qCjIMWCIFtMQVRJTiBTTUFMTCBMRVRURVIgTCBXSVRIIFNUUk9LRV0KK2NoYXIgXHUwMTVCCSggMiA0IDYgICkgICMgRkEg4qCqIMWbIFtMQVRJTiBTTUFMTCBMRVRURVIgUyBXSVRIIEFDVVRFXQorY2hhciBcdTAxNkIJKCAgMzQgNiAgKSAgIyBGQiDioKwgxasgW0xBVElOIFNNQUxMIExFVFRFUiBVIFdJVEggTUFDUk9OXQorY2hhciBceEZDCSgxMiAgNTYgICkgICMgRkMg4qCzIMO8IFtMQVRJTiBTTUFMTCBMRVRURVIgVSBXSVRIIERJQUVSRVNJU10KK2NoYXIgXHUwMTdDCSgxMjM0IDYgICkgICMgRkQg4qCvIMW8IFtMQVRJTiBTTUFMTCBMRVRURVIgWiBXSVRIIERPVCBBQk9WRV0KK2NoYXIgXHUwMTdFCSggMjM0IDYgICkgICMgRkUg4qCuIMW+IFtMQVRJTiBTTUFMTCBMRVRURVIgWiBXSVRIIENBUk9OXQorY2hhciBcdTIwMTkJKCAgMyAgICAgKSAgIyBGRiDioIQg4oCZIFtSSUdIVCBTSU5HTEUgUVVPVEFUSU9OIE1BUktdCitjaGFyIFx4QzAJKDEyMyA1NiAgKSAgIyAgICDioLcgw4AgW0xBVElOIENBUElUQUwgTEVUVEVSIEEgV0lUSCBHUkFWRV0KK2NoYXIgXHhDMQkoMSAgICA2ICApICAjICAgIOKgoSDDgSBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgQSBXSVRIIEFDVVRFXQorY2hhciBceEMyCSgxICAgIDYgICkgICMgICAg4qChIMOCIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBBIFdJVEggQ0lSQ1VNRkxFWF0KK2NoYXIgXHhDMwkoMTIgICA2ICApICAjICAgIOKgoyDDgyBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgQSBXSVRIIFRJTERFXQorY2hhciBceEM3CSgxMjM0IDYgICkgICMgICAg4qCvIMOHIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBDIFdJVEggQ0VESUxMQV0KK2NoYXIgXHhDOAkoIDIzNCA2ICApICAjICAgIOKgriDDiCBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgRSBXSVRIIEdSQVZFXQorY2hhciBceENBCSgxMiAgIDYgICkgICMgICAg4qCjIMOKIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBFIFdJVEggQ0lSQ1VNRkxFWF0KK2NoYXIgXHhDQgkoMTIgNCA2ICApICAjICAgIOKgqyDDiyBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgRSBXSVRIIERJQUVSRVNJU10KK2NoYXIgXHhDRAkoICAzNCAgICApICAjICAgIOKgjCDDjSBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgSSBXSVRIIEFDVVRFXQorY2hhciBceENFCSgxICA0IDYgICkgICMgICAg4qCpIMOOIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBJIFdJVEggQ0lSQ1VNRkxFWF0KK2NoYXIgXHhDRgkoMTIgNDU2ICApICAjICAgIOKguyDDjyBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgSSBXSVRIIERJQUVSRVNJU10KK2NoYXIgXHhENAkoMSAgNDU2ICApICAjICAgIOKguSDDlCBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgTyBXSVRIIENJUkNVTUZMRVhdCitjaGFyIFx4REEJKCAgMzQgNiAgKSAgIyAgICDioKwgw5ogW0xBVElOIENBUElUQUwgTEVUVEVSIFUgV0lUSCBBQ1VURV0KK2NoYXIgXHhEQgkoMSAgIDU2ICApICAjICAgIOKgsSDDmyBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgVSBXSVRIIENJUkNVTUZMRVhdCitjaGFyIFx4REQJKDEyMzQgNiAgKSAgIyAgICDioK8gw50gW0xBVElOIENBUElUQUwgTEVUVEVSIFkgV0lUSCBBQ1VURV0KK2NoYXIgXHhFMAkoMTIzIDU2ICApICAjICAgIOKgtyDDoCBbTEFUSU4gU01BTEwgTEVUVEVSIEEgV0lUSCBHUkFWRV0KK2NoYXIgXHhFMQkoMSAgICA2ICApICAjICAgIOKgoSDDoSBbTEFUSU4gU01BTEwgTEVUVEVSIEEgV0lUSCBBQ1VURV0KK2NoYXIgXHhFMgkoMSAgICA2ICApICAjICAgIOKgoSDDoiBbTEFUSU4gU01BTEwgTEVUVEVSIEEgV0lUSCBDSVJDVU1GTEVYXQorY2hhciBceEUzCSgxMiAgIDYgICkgICMgICAg4qCjIMOjIFtMQVRJTiBTTUFMTCBMRVRURVIgQSBXSVRIIFRJTERFXQorY2hhciBceEU3CSgxMjM0IDYgICkgICMgICAg4qCvIMOnIFtMQVRJTiBTTUFMTCBMRVRURVIgQyBXSVRIIENFRElMTEFdCitjaGFyIFx4RTgJKCAyMzQgNiAgKSAgIyAgICDioK4gw6ggW0xBVElOIFNNQUxMIExFVFRFUiBFIFdJVEggR1JBVkVdCitjaGFyIFx4RUEJKDEyICAgNiAgKSAgIyAgICDioKMgw6ogW0xBVElOIFNNQUxMIExFVFRFUiBFIFdJVEggQ0lSQ1VNRkxFWF0KK2NoYXIgXHhFQgkoMTIgNCA2ICApICAjICAgIOKgqyDDqyBbTEFUSU4gU01BTEwgTEVUVEVSIEUgV0lUSCBESUFFUkVTSVNdCitjaGFyIFx4RUQJKCAgMzQgICAgKSAgIyAgICDioIwgw60gW0xBVElOIFNNQUxMIExFVFRFUiBJIFdJVEggQUNVVEVdCitjaGFyIFx4RUUJKDEgIDQgNiAgKSAgIyAgICDioKkgw64gW0xBVElOIFNNQUxMIExFVFRFUiBJIFdJVEggQ0lSQ1VNRkxFWF0KK2NoYXIgXHhFRgkoMTIgNDU2ICApICAjICAgIOKguyDDryBbTEFUSU4gU01BTEwgTEVUVEVSIEkgV0lUSCBESUFFUkVTSVNdCitjaGFyIFx4RjQJKDEgIDQ1NiAgKSAgIyAgICDioLkgw7QgW0xBVElOIFNNQUxMIExFVFRFUiBPIFdJVEggQ0lSQ1VNRkxFWF0KK2NoYXIgXHhGQQkoICAzNCA2ICApICAjICAgIOKgrCDDuiBbTEFUSU4gU01BTEwgTEVUVEVSIFUgV0lUSCBBQ1VURV0KK2NoYXIgXHhGQgkoMSAgIDU2ICApICAjICAgIOKgsSDDuyBbTEFUSU4gU01BTEwgTEVUVEVSIFUgV0lUSCBDSVJDVU1GTEVYXQorY2hhciBceEZECSgxMjM0IDYgICkgICMgICAg4qCvIMO9IFtMQVRJTiBTTUFMTCBMRVRURVIgWSBXSVRIIEFDVVRFXQorY2hhciBcdTAxMEUJKDEgIDQ1NiAgKSAgIyAgICDioLkgxI4gW0xBVElOIENBUElUQUwgTEVUVEVSIEQgV0lUSCBDQVJPTl0KK2NoYXIgXHUwMTBGCSgxICA0NTYgICkgICMgICAg4qC5IMSPIFtMQVRJTiBTTUFMTCBMRVRURVIgRCBXSVRIIENBUk9OXQorY2hhciBcdTAxMUEJKDEyICAgNiAgKSAgIyAgICDioKMgxJogW0xBVElOIENBUElUQUwgTEVUVEVSIEUgV0lUSCBDQVJPTl0KK2NoYXIgXHUwMTFCCSgxMiAgIDYgICkgICMgICAg4qCjIMSbIFtMQVRJTiBTTUFMTCBMRVRURVIgRSBXSVRIIENBUk9OXQorY2hhciBcdTAxNDcJKDEyIDQgNiAgKSAgIyAgICDioKsgxYcgW0xBVElOIENBUElUQUwgTEVUVEVSIE4gV0lUSCBDQVJPTl0KK2NoYXIgXHUwMTQ4CSgxMiA0IDYgICkgICMgICAg4qCrIMWIIFtMQVRJTiBTTUFMTCBMRVRURVIgTiBXSVRIIENBUk9OXQorY2hhciBcdTAxNTYJKDEyMyA1NiAgKSAgIyAgICDioLcgxZYgW0xBVElOIFNNQUxMIExFVFRFUiBSIFdJVEggQ0VESUxMQV0KK2NoYXIgXHUwMTU3CSgxMjMgNTYgICkgICMgICAg4qC3IMWXIFtMQVRJTiBTTUFMTCBMRVRURVIgUiBXSVRIIENFRElMTEFdCitjaGFyIFx1MDE1OAkoIDIgNDU2ICApICAjICAgIOKguiDFmCBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgUiBXSVRIIENBUk9OXQorY2hhciBcdTAxNTkJKCAyIDQ1NiAgKSAgIyAgICDioLogxZkgW0xBVElOIFNNQUxMIExFVFRFUiBSIFdJVEggQ0FST05dCitjaGFyIFx1MDE2NAkoMTIgIDU2ICApICAjICAgIOKgsyDFpCBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgVCBXSVRIIENBUk9OXQorY2hhciBcdTAxNjUJKDEyICA1NiAgKSAgIyAgICDioLMgxaUgW0xBVElOIFNNQUxMIExFVFRFUiBUIFdJVEggQ0FST05dCitjaGFyIFx1MDE2QwkoIDIzNDU2ICApICAjICAgIOKgviDFrCBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgVSBXSVRIIEJSRVZFXQorY2hhciBcdTAxNkQJKCAyMzQ1NiAgKSAgIyAgICDioL4gxa0gW0xBVElOIFNNQUxMIExFVFRFUiBVIFdJVEggQlJFVkVdCitjaGFyIFx1MDE2RQkoIDIzNDU2ICApICAjICAgIOKgviDFriBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgVSBXSVRIIFJJTkcgQUJPVkVdCitjaGFyIFx1MDE2RgkoIDIzNDU2ICApICAjICAgIOKgviDFryBbTEFUSU4gU01BTEwgTEVUVEVSIFUgV0lUSCBSSU5HIEFCT1ZFXQorY2hhciBcdTIwMTgJKCAgMyAgICAgKSAgIyAgICDioIQg4oCYIFtMRUZUIFNJTkdMRSBRVU9UQVRJT04gTUFSS10KK2NoYXIgXHUyMDFGCSggIDMgNTYgICkgICMgICAg4qC0IOKAnyBbRE9VQkxFIEhJR0gtUkVWRVJTRUQtOSBRVU9UQVRJT04gTUFSS10KKworaW5jbHVkZSBjb21tb24udHRpCmRpZmYgLS1naXQgYS9UYWJsZXMvVGV4dC9tYWxheWFsYW0udHRpIGIvVGFibGVzL1RleHQvbWFsYXlhbGFtLnR0aQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNTZhNGUzCi0tLSAvZGV2L251bGwKKysrIGIvVGFibGVzL1RleHQvbWFsYXlhbGFtLnR0aQpAQCAtMCwwICsxLDEwOSBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorIyAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyMKKyMgQ29weXJpZ2h0IChDKSAyMDA4LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorIworIyBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorIworIyBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisjIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyMgbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisjCisjIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMgVGhpcyBCUkxUVFkgdGV4dCBzdWJ0YWJsZSBkZWZpbmVzIHRoZSBicmFpbGxlIHJlcHJlc2VudGF0aW9ucworIyBmb3IgdGhlIE1hbGF5YWxhbSBzY3JpcHQuCisKKyMgTWFpbnRhaW5lZCBieSBKb2huIEouIEJveWVyLCBkaXJlY3RvckBjaHBpLm9yZywgd3d3LmNocGkub3JnCisjCisjIFRoaXMgdGFibGUgaXMgYnVpbHQgYW5kIG1haW50YWluZWQgYnkgTGVvbiBVbmdpZXIgPExlb24uVW5naWVyQFZpZXdQbHVzLmNvbT4KKyMgd2l0aCBoZWxwIGFuZCBndWlkYW5jZSBmcm9tIE1vaGFtbWVkIFIuIFJhbWFkYW4gPG1yYW1hZGFuQG5hdHRpcS5jb20+CisjCisjIENvbnZlcnRlZCBmcm9tIGxpYmxvdWlzIHRhYmxlIGJ5IFNhbXVlbCBUaGliYXVsdCA8c2FtdWVsLnRoaWJhdWx0QGVucy1seW9uLm9yZz4KKworIyBnZW5lcmF0ZWQgYnkgdHRidGVzdDoKKworY2hhciBcdTBEMDIJKCAgICA1NiAgKSAgIyDioLAg4LSCIFtNQUxBWUFMQU0gU0lHTiBBTlVTVkFSQV0KK2NoYXIgXHUwRDAzCSggICAgIDYgICkgICMg4qCgIOC0gyBbTUFMQVlBTEFNIFNJR04gVklTQVJHQV0KK2NoYXIgXHUwRDA1CSgxICAgICAgICkgICMg4qCBIOC0hSBbTUFMQVlBTEFNIExFVFRFUiBBXQorY2hhciBcdTBEMDYJKCAgMzQ1ICAgKSAgIyDioJwg4LSGIFtNQUxBWUFMQU0gTEVUVEVSIEFBXQorY2hhciBcdTBEMDcJKCAyIDQgICAgKSAgIyDioIog4LSHIFtNQUxBWUFMQU0gTEVUVEVSIEldCitjaGFyIFx1MEQwOAkoICAzIDUgICApICAjIOKglCDgtIggW01BTEFZQUxBTSBMRVRURVIgSUldCitjaGFyIFx1MEQwOQkoMSAzICA2ICApICAjIOKgpSDgtIkgW01BTEFZQUxBTSBMRVRURVIgVV0KK2NoYXIgXHUwRDBBCSgxMiAgNTYgICkgICMg4qCzIOC0iiBbTUFMQVlBTEFNIExFVFRFUiBVVV0KKworY2hhciBcdTBEMEUJKCAgMzQgIDcgKSAgIyDioYwg4LSOIFtNQUxBWUFMQU0gTEVUVEVSIEVdCitjaGFyIFx1MEQwRgkoMSAgIDUgICApICAjIOKgkSDgtI8gW01BTEFZQUxBTSBMRVRURVIgRUVdCitjaGFyIFx1MEQxMAkoICAzNCAgICApICAjIOKgjCDgtJAgW01BTEFZQUxBTSBMRVRURVIgQUldCisKK2NoYXIgXHUwRDEyCSggMiA0IDY3ICkgICMg4qGqIOC0kiBbTUFMQVlBTEFNIExFVFRFUiBPXQorY2hhciBcdTBEMTMJKDEgMyA1ICAgKSAgIyDioJUg4LSTIFtNQUxBWUFMQU0gTEVUVEVSIE9PXQorY2hhciBcdTBEMTQJKCAyIDQgNiAgKSAgIyDioKog4LSUIFtNQUxBWUFMQU0gTEVUVEVSIEFVXQorY2hhciBcdTBEMTUJKDEgMyAgICAgKSAgIyDioIUg4LSVIFtNQUxBWUFMQU0gTEVUVEVSIEtBXQorY2hhciBcdTBEMTYJKCAgIDQgNiAgKSAgIyDioKgg4LSWIFtNQUxBWUFMQU0gTEVUVEVSIEtIQV0KK2NoYXIgXHUwRDE3CSgxMjM0ICAgICkgICMg4qCPIOC0lyBbTUFMQVlBTEFNIExFVFRFUiBHQV0KK2NoYXIgXHUwRDE4CSgxMiAgIDYgICkgICMg4qCjIOC0mCBbTUFMQVlBTEFNIExFVFRFUiBHSEFdCitjaGFyIFx1MEQxOQkoICAzNCA2ICApICAjIOKgrCDgtJkgW01BTEFZQUxBTSBMRVRURVIgTkdBXQorY2hhciBcdTBEMUEJKDEgIDQgICAgKSAgIyDioIkg4LSaIFtNQUxBWUFMQU0gTEVUVEVSIENBXQorY2hhciBcdTBEMUIJKDEgICAgNiAgKSAgIyDioKEg4LSbIFtNQUxBWUFMQU0gTEVUVEVSIENIQV0KK2NoYXIgXHUwRDFDCSggMiA0NSAgICkgICMg4qCaIOC0nCBbTUFMQVlBTEFNIExFVFRFUiBKQV0KK2NoYXIgXHUwRDFECSggIDMgNTYgICkgICMg4qC0IOC0nSBbTUFMQVlBTEFNIExFVFRFUiBKSEFdCitjaGFyIFx1MEQxRQkoIDIgIDUgICApICAjIOKgkiDgtJ4gW01BTEFZQUxBTSBMRVRURVIgTllBXQorY2hhciBcdTBEMUYJKCAyMzQ1NiAgKSAgIyDioL4g4LSfIFtNQUxBWUFMQU0gTEVUVEVSIFRUQV0KK2NoYXIgXHUwRDIwCSggMiA0NTYgICkgICMg4qC6IOC0oCBbTUFMQVlBTEFNIExFVFRFUiBUVEhBXQorY2hhciBcdTBEMjEJKDEyIDQgNiAgKSAgIyDioKsg4LShIFtNQUxBWUFMQU0gTEVUVEVSIEREQV0KK2NoYXIgXHUwRDIyCSgxMjM0NTYgICkgICMg4qC/IOC0oiBbTUFMQVlBTEFNIExFVFRFUiBEREhBXQorY2hhciBcdTBEMjMJKCAgMzQ1NiAgKSAgIyDioLwg4LSjIFtNQUxBWUFMQU0gTEVUVEVSIE5OQV0KK2NoYXIgXHUwRDI0CSggMjM0NSAgICkgICMg4qCeIOC0pCBbTUFMQVlBTEFNIExFVFRFUiBUQV0KK2NoYXIgXHUwRDI1CSgxICA0NTYgICkgICMg4qC5IOC0pSBbTUFMQVlBTEFNIExFVFRFUiBUSEFdCitjaGFyIFx1MEQyNgkoMSAgNDUgICApICAjIOKgmSDgtKYgW01BTEFZQUxBTSBMRVRURVIgREFdCitjaGFyIFx1MEQyNwkoIDIzNCA2ICApICAjIOKgriDgtKcgW01BTEFZQUxBTSBMRVRURVIgREhBXQorY2hhciBcdTBEMjgJKDEgMzQ1ICAgKSAgIyDioJ0g4LSoIFtNQUxBWUFMQU0gTEVUVEVSIE5BXQorCitjaGFyIFx1MEQyQQkoMTIzNCAgICApICAjIOKgjyDgtKogW01BTEFZQUxBTSBMRVRURVIgUEFdCitjaGFyIFx1MEQyQgkoIDIzIDUgICApICAjIOKgliDgtKsgW01BTEFZQUxBTSBMRVRURVIgUEhBXQorY2hhciBcdTBEMkMJKDEyICAgICAgKSAgIyDioIMg4LSsIFtNQUxBWUFMQU0gTEVUVEVSIEJBXQorY2hhciBcdTBEMkQJKCAgIDQ1ICAgKSAgIyDioJgg4LStIFtNQUxBWUFMQU0gTEVUVEVSIEJIQV0KK2NoYXIgXHUwRDJFCSgxIDM0ICAgICkgICMg4qCNIOC0riBbTUFMQVlBTEFNIExFVFRFUiBNQV0KK2NoYXIgXHUwRDJGCSgxIDM0NTYgICkgICMg4qC9IOC0ryBbTUFMQVlBTEFNIExFVFRFUiBZQV0KK2NoYXIgXHUwRDMwCSgxMjMgNSAgICkgICMg4qCXIOC0sCBbTUFMQVlBTEFNIExFVFRFUiBSQV0KK2NoYXIgXHUwRDMxCSgxMjMgNSA3ICkgICMg4qGXIOC0sSBbTUFMQVlBTEFNIExFVFRFUiBSUkFdCitjaGFyIFx1MEQzMgkoMTIzICAgICApICAjIOKghyDgtLIgW01BTEFZQUxBTSBMRVRURVIgTEFdCitjaGFyIFx1MEQzMwkoMTIzICAgNyApICAjIOKhhyDgtLMgW01BTEFZQUxBTSBMRVRURVIgTExBXQorY2hhciBcdTBEMzQJKDEyMyAgIDc4KSAgIyDio4cg4LS0IFtNQUxBWUFMQU0gTEVUVEVSIExMTEFdCitjaGFyIFx1MEQzNQkoMTIzICA2ICApICAjIOKgpyDgtLUgW01BTEFZQUxBTSBMRVRURVIgVkFdCitjaGFyIFx1MEQzNgkoMSAgNCA2ICApICAjIOKgqSDgtLYgW01BTEFZQUxBTSBMRVRURVIgU0hBXQorY2hhciBcdTBEMzcJKDEyMzQgNiAgKSAgIyDioK8g4LS3IFtNQUxBWUFMQU0gTEVUVEVSIFNTQV0KK2NoYXIgXHUwRDM4CSggMjM0ICAgICkgICMg4qCOIOC0uCBbTUFMQVlBTEFNIExFVFRFUiBTQV0KK2NoYXIgXHUwRDM5CSgxMiAgNSAgICkgICMg4qCTIOC0uSBbTUFMQVlBTEFNIExFVFRFUiBIQV0KKworY2hhciBcdTBEM0UJKCAgMzQ1ICAgKSAgIyDioJwg4LS+IFtNQUxBWUFMQU0gVk9XRUwgU0lHTiBBQV0KK2NoYXIgXHUwRDNGCSggMiA0ICAgICkgICMg4qCKIOC0vyBbTUFMQVlBTEFNIFZPV0VMIFNJR04gSV0KK2NoYXIgXHUwRDQwCSggIDMgNSAgICkgICMg4qCUIOC1gCBbTUFMQVlBTEFNIFZPV0VMIFNJR04gSUldCitjaGFyIFx1MEQ0MQkoMSAzICA2ICApICAjIOKgpSDgtYEgW01BTEFZQUxBTSBWT1dFTCBTSUdOIFVdCitjaGFyIFx1MEQ0MgkoMTIgIDU2ICApICAjIOKgsyDgtYIgW01BTEFZQUxBTSBWT1dFTCBTSUdOIFVVXQorCitjaGFyIFx1MEQ0NgkoICAzNCAgNyApICAjIOKhjCDgtYYgW01BTEFZQUxBTSBWT1dFTCBTSUdOIEVdCitjaGFyIFx1MEQ0NwkoMSAgIDUgICApICAjIOKgkSDgtYcgW01BTEFZQUxBTSBWT1dFTCBTSUdOIEVFXQorY2hhciBcdTBENDgJKCAgMzQgICAgKSAgIyDioIwg4LWIIFtNQUxBWUFMQU0gVk9XRUwgU0lHTiBBSV0KKworY2hhciBcdTBENEEJKCAyIDQgNjcgKSAgIyDioaog4LWKIFtNQUxBWUFMQU0gVk9XRUwgU0lHTiBPXQorY2hhciBcdTBENEIJKDEgMyA1ICAgKSAgIyDioJUg4LWLIFtNQUxBWUFMQU0gVk9XRUwgU0lHTiBPT10KK2NoYXIgXHUwRDRDCSggMiA0IDYgICkgICMg4qCqIOC1jCBbTUFMQVlBTEFNIFZPV0VMIFNJR04gQVVdCitjaGFyIFx1MEQ0RAkoICAgNCAgICApICAjIOKgiCDgtY0gW01BTEFZQUxBTSBTSUdOIFZJUkFNQV0KKworY2hhciBcdTBENjYJKCAyIDQ1ICAgKSAgIyDioJog4LWmIFtNQUxBWUFMQU0gRElHSVQgWkVST10KK2NoYXIgXHUwRDY3CSgxICAgICAgICkgICMg4qCBIOC1pyBbTUFMQVlBTEFNIERJR0lUIE9ORV0KK2NoYXIgXHUwRDY4CSgxMiAgICAgICkgICMg4qCDIOC1qCBbTUFMQVlBTEFNIERJR0lUIFRXT10KK2NoYXIgXHUwRDY5CSgxICA0ICAgICkgICMg4qCJIOC1qSBbTUFMQVlBTEFNIERJR0lUIFRIUkVFXQorY2hhciBcdTBENkEJKDEgIDQ1ICAgKSAgIyDioJkg4LWqIFtNQUxBWUFMQU0gRElHSVQgRk9VUl0KK2NoYXIgXHUwRDZCCSgxICAgNSAgICkgICMg4qCRIOC1qyBbTUFMQVlBTEFNIERJR0lUIEZJVkVdCitjaGFyIFx1MEQ2QwkoMTIgNCAgICApICAjIOKgiyDgtawgW01BTEFZQUxBTSBESUdJVCBTSVhdCitjaGFyIFx1MEQ2RAkoMTIgNDUgICApICAjIOKgmyDgta0gW01BTEFZQUxBTSBESUdJVCBTRVZFTl0KK2NoYXIgXHUwRDZFCSgxMiAgNSAgICkgICMg4qCTIOC1riBbTUFMQVlBTEFNIERJR0lUIEVJR0hUXQorY2hhciBcdTBENkYJKCAyIDQgICAgKSAgIyDioIog4LWvIFtNQUxBWUFMQU0gRElHSVQgTklORV0KZGlmZiAtLWdpdCBhL1RhYmxlcy9UZXh0L21nLnR0YiBiL1RhYmxlcy9UZXh0L21nLnR0YgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44Yzg5NzFkCi0tLSAvZGV2L251bGwKKysrIGIvVGFibGVzL1RleHQvbWcudHRiCkBAIC0wLDAgKzEsMzEgQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyMgICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisjCisjIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyMKKyMgQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjIEJSTFRUWSBUZXh0IFRhYmxlIC0gTWFsYWdhc3kKKyMKKyMgU2FtdWVsIFRoaWJhdWx0IDxzYW11ZWwudGhpYmF1bHRAZW5zLWx5b24ub3JnPgorIyAKKyMgVGhpcyB0YWJsZSBpcyBiYXNlZCBvbiB0aGUgVW5lc2NvIHJlcG9ydCBvbiB0aGUgcHJvZ3Jlc3Mgb2YgdW5pZmljYXRpb24gb2YKKyMgYnJhaWxsZSB3cml0aW5nIMKrwqBMJ8OJQ1JJVFVSRSBCUkFJTExFIERBTlMgTEUgTU9OREXCoMK7LCBieSBTaXIgQ2x1dGhhCisjIE1BQ0tFTlpJRTogaHR0cDovL3VuZXNkb2MudW5lc2NvLm9yZy9pbWFnZXMvMDAxMy8wMDEzNTIvMTM1MjUxZm8ucGRmCisjIFRoZSBkb2N1bWVudCBpcyBkYXRlZCAxOTU0LCBzbyB0aGlzIHRhYmxlIG1heSBiZSBxdWl0ZSBvdXRkYXRlZC4KKworaW5jbHVkZSBsdHItbGF0aW4udHRpCitpbmNsdWRlIG51bS1kb3Q4LnR0aQoraW5jbHVkZSBwdW5jLWJhc2ljLnR0aQoraW5jbHVkZSBjb21tb24udHRpCmRpZmYgLS1naXQgYS9UYWJsZXMvVGV4dC9taS50dGIgYi9UYWJsZXMvVGV4dC9taS50dGIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2JmMzVmOAotLS0gL2Rldi9udWxsCisrKyBiL1RhYmxlcy9UZXh0L21pLnR0YgpAQCAtMCwwICsxLDMxIEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisjICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorIworIyBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisjCisjIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisjCisjIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyMgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorIyBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyMKKyMgV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworIworIyBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIyBCUkxUVFkgVGV4dCBUYWJsZSAtIE1hb3JpCisjCisjIFNhbXVlbCBUaGliYXVsdCA8c2FtdWVsLnRoaWJhdWx0QGVucy1seW9uLm9yZz4KKyMgCisjIFRoaXMgdGFibGUgaXMgYmFzZWQgb24gdGhlIFVuZXNjbyByZXBvcnQgb24gdGhlIHByb2dyZXNzIG9mIHVuaWZpY2F0aW9uIG9mCisjIGJyYWlsbGUgd3JpdGluZyDCq8KgTCfDiUNSSVRVUkUgQlJBSUxMRSBEQU5TIExFIE1PTkRFwqDCuywgYnkgU2lyIENsdXRoYQorIyBNQUNLRU5aSUU6IGh0dHA6Ly91bmVzZG9jLnVuZXNjby5vcmcvaW1hZ2VzLzAwMTMvMDAxMzUyLzEzNTI1MWZvLnBkZgorIyBUaGUgZG9jdW1lbnQgaXMgZGF0ZWQgMTk1NCwgc28gdGhpcyB0YWJsZSBtYXkgYmUgcXVpdGUgb3V0ZGF0ZWQuCisKK2luY2x1ZGUgbHRyLWxhdGluLnR0aQoraW5jbHVkZSBudW0tZG90OC50dGkKK2luY2x1ZGUgcHVuYy1iYXNpYy50dGkKK2luY2x1ZGUgY29tbW9uLnR0aQpkaWZmIC0tZ2l0IGEvVGFibGVzL1RleHQvbWwudHRiIGIvVGFibGVzL1RleHQvbWwudHRiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQzZTYxODMKLS0tIC9kZXYvbnVsbAorKysgYi9UYWJsZXMvVGV4dC9tbC50dGIKQEAgLTAsMCArMSwyNCBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorIyAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyMKKyMgQ29weXJpZ2h0IChDKSAyMDA4LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorIworIyBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorIworIyBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisjIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyMgbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisjCisjIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMgQlJMVFRZIFRleHQgVGFibGUgLSBNYWxheWFsYW0KKworaW5jbHVkZSBtYWxheWFsYW0udHRpCitpbmNsdWRlIGFzY2lpLWJhc2ljLnR0aQorCitpbmNsdWRlIGNvbW1vbi50dGkKZGlmZiAtLWdpdCBhL1RhYmxlcy9UZXh0L21uaS50dGIgYi9UYWJsZXMvVGV4dC9tbmkudHRiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFhY2E4ODMKLS0tIC9kZXYvbnVsbAorKysgYi9UYWJsZXMvVGV4dC9tbmkudHRiCkBAIC0wLDAgKzEsMjQgQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyMgICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisjCisjIENvcHlyaWdodCAoQykgMjAwOC0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyMKKyMgQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjIEJSTFRUWSBUZXh0IFRhYmxlIC0gTWFuaXB1cmkKKworaW5jbHVkZSBiZW5nYWxpLnR0aQoraW5jbHVkZSBhc2NpaS1iYXNpYy50dGkKKworaW5jbHVkZSBjb21tb24udHRpCmRpZmYgLS1naXQgYS9UYWJsZXMvVGV4dC9tci50dGIgYi9UYWJsZXMvVGV4dC9tci50dGIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzYyYzUzYQotLS0gL2Rldi9udWxsCisrKyBiL1RhYmxlcy9UZXh0L21yLnR0YgpAQCAtMCwwICsxLDI0IEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisjICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorIworIyBDb3B5cmlnaHQgKEMpIDIwMDgtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisjCisjIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisjCisjIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyMgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorIyBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyMKKyMgV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworIworIyBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIyBCUkxUVFkgVGV4dCBUYWJsZSAtIE1hcmF0aGkKKworaW5jbHVkZSBkZXZhbmFnYXJpLnR0aQoraW5jbHVkZSBhc2NpaS1iYXNpYy50dGkKKworaW5jbHVkZSBjb21tb24udHRpCmRpZmYgLS1naXQgYS9UYWJsZXMvVGV4dC9tdC50dGIgYi9UYWJsZXMvVGV4dC9tdC50dGIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDRhZDQxOAotLS0gL2Rldi9udWxsCisrKyBiL1RhYmxlcy9UZXh0L210LnR0YgpAQCAtMCwwICsxLDQ5IEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisjICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorIworIyBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisjCisjIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisjCisjIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyMgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorIyBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyMKKyMgV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworIworIyBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIyBCUkxUVFkgVGV4dCBUYWJsZSAtIE1hbHRlc2UKKyMKKyMgU2FtdWVsIFRoaWJhdWx0IDxzYW11ZWwudGhpYmF1bHRAZW5zLWx5b24ub3JnPgorIyAKKyMgVGhpcyB0YWJsZSBpcyBiYXNlZCBvbiB0aGUgVW5lc2NvIHJlcG9ydCBvbiB0aGUgcHJvZ3Jlc3Mgb2YgdW5pZmljYXRpb24gb2YKKyMgYnJhaWxsZSB3cml0aW5nIMKrwqBMJ8OJQ1JJVFVSRSBCUkFJTExFIERBTlMgTEUgTU9OREXCoMK7LCBieSBTaXIgQ2x1dGhhCisjIE1BQ0tFTlpJRTogaHR0cDovL3VuZXNkb2MudW5lc2NvLm9yZy9pbWFnZXMvMDAxMy8wMDEzNTIvMTM1MjUxZm8ucGRmCisjIFRoZSBkb2N1bWVudCBpcyBkYXRlZCAxOTU0LCBzbyB0aGlzIHRhYmxlIG1heSBiZSBxdWl0ZSBvdXRkYXRlZC4KKworIyB0aGUgc3RhbmRhcmQgcmVwcmVzZW50YXRpb25zIGZvciB0aGUgbGV0dGVycyBvZiB0aGUgTGF0aW4gYWxwaGFiZXQKK2luY2x1ZGUgbHRyLWxhdGluLnR0aQorCisjIGdlbmVyYXRlZCBieSB0dGJ0ZXN0OiBjaGFyc2V0PWxhdGluMworY2hhciBceDRBCSgxIDM0NTY3ICkgICMgNEEg4qG9IEogW0xBVElOIENBUElUQUwgTEVUVEVSIEpdCitjaGFyIFx1MDEyNgkoMSAgIDU2NyApICAjIEExIOKhsSDEpiBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgSCBXSVRIIFNUUk9LRV0KK2NoYXIgXHUwMTdCCSgxIDMgNTY3ICkgICMgQUYg4qG1IMW7IFtMQVRJTiBDQVBJVEFMIExFVFRFUiBaIFdJVEggRE9UIEFCT1ZFXQorY2hhciBcdTAxMEEJKDEgICAgNjcgKSAgIyBDNSDioaEgxIogW0xBVElOIENBUElUQUwgTEVUVEVSIEMgV0lUSCBET1QgQUJPVkVdCitjaGFyIFx1MDEyMAkoIDIgNDUgNyApICAjIEQ1IOKhmiDEoCBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgRyBXSVRIIERPVCBBQk9WRV0KK2NoYXIgXHg2QQkoMSAzNDU2ICApICAjIDZBIOKgvSBqIFtMQVRJTiBTTUFMTCBMRVRURVIgSl0KK2NoYXIgXHUwMTI3CSgxICAgNTYgICkgICMgQjEg4qCxIMSnIFtMQVRJTiBTTUFMTCBMRVRURVIgSCBXSVRIIFNUUk9LRV0KK2NoYXIgXHUwMTdDCSgxIDMgNTYgICkgICMgQkYg4qC1IMW8IFtMQVRJTiBTTUFMTCBMRVRURVIgWiBXSVRIIERPVCBBQk9WRV0KK2NoYXIgXHUwMTBCCSgxICAgIDYgICkgICMgRTUg4qChIMSLIFtMQVRJTiBTTUFMTCBMRVRURVIgQyBXSVRIIERPVCBBQk9WRV0KK2NoYXIgXHUwMTIxCSggMiA0NSAgICkgICMgRjUg4qCaIMShIFtMQVRJTiBTTUFMTCBMRVRURVIgRyBXSVRIIERPVCBBQk9WRV0KKworIyB0aGUgbnVtYmVycyAwLTkgYXJlIHJlcHJlc2VudGVkIGJ5IHRoZSBsZXR0ZXJzIGosYS1pIHdpdGggZG90IDggYWRkZWQKK2luY2x1ZGUgbnVtLWRvdDgudHRpCisKK2luY2x1ZGUgcHVuYy1iYXNpYy50dGkKK2NoYXIgXHgzRgkoIDIzICA2ICApICAjIDNGIOKgpiA/IFtRVUVTVElPTiBNQVJLXQorCitpbmNsdWRlIGNvbW1vbi50dGkKZGlmZiAtLWdpdCBhL1RhYmxlcy9UZXh0L211bi50dGIgYi9UYWJsZXMvVGV4dC9tdW4udHRiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM5YWQ0ZTgKLS0tIC9kZXYvbnVsbAorKysgYi9UYWJsZXMvVGV4dC9tdW4udHRiCkBAIC0wLDAgKzEsMjQgQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyMgICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisjCisjIENvcHlyaWdodCAoQykgMjAwOC0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyMKKyMgQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjIEJSTFRUWSBUZXh0IFRhYmxlIC0gTXVuZGEKKworaW5jbHVkZSBiZW5nYWxpLnR0aQoraW5jbHVkZSBhc2NpaS1iYXNpYy50dGkKKworaW5jbHVkZSBjb21tb24udHRpCmRpZmYgLS1naXQgYS9UYWJsZXMvVGV4dC9td3IudHRiIGIvVGFibGVzL1RleHQvbXdyLnR0YgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOGEyMDkyCi0tLSAvZGV2L251bGwKKysrIGIvVGFibGVzL1RleHQvbXdyLnR0YgpAQCAtMCwwICsxLDI0IEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisjICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorIworIyBDb3B5cmlnaHQgKEMpIDIwMDgtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisjCisjIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisjCisjIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyMgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorIyBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyMKKyMgV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworIworIyBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIyBCUkxUVFkgVGV4dCBUYWJsZSAtIE1hcndhcmkKKworaW5jbHVkZSBkZXZhbmFnYXJpLnR0aQoraW5jbHVkZSBhc2NpaS1iYXNpYy50dGkKKworaW5jbHVkZSBjb21tb24udHRpCmRpZmYgLS1naXQgYS9UYWJsZXMvVGV4dC9uZS50dGIgYi9UYWJsZXMvVGV4dC9uZS50dGIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTdjYjQ4MwotLS0gL2Rldi9udWxsCisrKyBiL1RhYmxlcy9UZXh0L25lLnR0YgpAQCAtMCwwICsxLDI0IEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisjICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorIworIyBDb3B5cmlnaHQgKEMpIDIwMDgtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisjCisjIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisjCisjIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyMgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorIyBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyMKKyMgV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworIworIyBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIyBCUkxUVFkgVGV4dCBUYWJsZSAtIE5lcGFsaQorCitpbmNsdWRlIGRldmFuYWdhcmkudHRpCitpbmNsdWRlIGFzY2lpLWJhc2ljLnR0aQorCitpbmNsdWRlIGNvbW1vbi50dGkKZGlmZiAtLWdpdCBhL1RhYmxlcy9UZXh0L25ldy50dGIgYi9UYWJsZXMvVGV4dC9uZXcudHRiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA5M2E3NzcKLS0tIC9kZXYvbnVsbAorKysgYi9UYWJsZXMvVGV4dC9uZXcudHRiCkBAIC0wLDAgKzEsMjUgQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyMgICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisjCisjIENvcHlyaWdodCAoQykgMjAwOC0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyMKKyMgQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjIEJSTFRUWSBUZXh0IFRhYmxlIC0gTmV3YXJpCisKK2luY2x1ZGUgZGV2YW5hZ2FyaS50dGkKK2luY2x1ZGUgYmVuZ2FsaS50dGkKK2luY2x1ZGUgYXNjaWktYmFzaWMudHRpCisKK2luY2x1ZGUgY29tbW9uLnR0aQpkaWZmIC0tZ2l0IGEvVGFibGVzL1RleHQvbmwudHRiIGIvVGFibGVzL1RleHQvbmwudHRiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc2OTMyY2UKLS0tIC9kZXYvbnVsbAorKysgYi9UYWJsZXMvVGV4dC9ubC50dGIKQEAgLTAsMCArMSwyMSBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorIyAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyMKKyMgQ29weXJpZ2h0IChDKSAyMDA4LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorIworIyBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorIworIyBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisjIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyMgbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisjCisjIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMgQlJMVFRZIFRleHQgVGFibGUgLSBEdXRjaAorCitpbmNsdWRlIG5sX05MLnR0YgpkaWZmIC0tZ2l0IGEvVGFibGVzL1RleHQvbmxfQkUudHRiIGIvVGFibGVzL1RleHQvbmxfQkUudHRiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY1NDBhM2IKLS0tIC9kZXYvbnVsbAorKysgYi9UYWJsZXMvVGV4dC9ubF9CRS50dGIKQEAgLTAsMCArMSwxNzkgQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyMgICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisjCisjIENvcHlyaWdodCAoQykgMjAwOC0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyMKKyMgQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjIEJSTFRUWSBUZXh0IFRhYmxlIC0gRHV0Y2ggKEJlbGdpdW0pCisKKyMgQ3JlYXRlZCBieSBMZW9uIFVuZ2llciA8TGVvbi5VbmdpZXJAVmlld1BsdXMuY29tPi4KKyMgRWRpdGVkIGJ5IEVyaWMgPGVyaWNAaW50ZWdyYS1iZWxnaXVtLmNvbT4KKyMKKyMgQ29udmVydGVkIGZyb20gbGlibG91aXMgdGFibGUgYnkgU2FtdWVsIFRoaWJhdWx0IDxzYW11ZWwudGhpYmF1bHRAZW5zLWx5b24ub3JnPgorCisjIGdlbmVyYXRlZCBieSB0dGJ0ZXN0OiBjaGFyc2V0PWlzby04ODU5LTE1CitjaGFyIFx4MjAJKCAgICAgICAgKSAgIyAyMCDioIAgICBbU1BBQ0VdCitjaGFyIFx4MjEJKCAyMyA1ICAgKSAgIyAyMSDioJYgISBbRVhDTEFNQVRJT04gTUFSS10KK2NoYXIgXHgyMgkoIDIzIDU2ICApICAjIDIyIOKgtiAiIFtRVU9UQVRJT04gTUFSS10KK2NoYXIgXHgyMwkoICAgIDUgICApICAjIDIzIOKgkCAjIFtOVU1CRVIgU0lHTl0KK2NoYXIgXHgyNAkoMSAgNDUgICApICAjIDI0IOKgmSAkIFtET0xMQVIgU0lHTl0KK2NoYXIgXHgyNgkoMTIzNCA2ICApICAjIDI2IOKgryAmIFtBTVBFUlNBTkRdCitjaGFyIFx4MjcJKCAgMyAgICAgKSAgIyAyNyDioIQgJyBbQVBPU1RST1BIRV0KK2NoYXIgXHgyOAkoIDIzICA2ICApICAjIDI4IOKgpiAoIFtMRUZUIFBBUkVOVEhFU0lTXQorY2hhciBceDI5CSggIDMgNTYgICkgICMgMjkg4qC0ICkgW1JJR0hUIFBBUkVOVEhFU0lTXQorY2hhciBceDJBCSggIDMgNSAgICkgICMgMkEg4qCUICogW0FTVEVSSVNLXQorY2hhciBceDJCCSggMjMgNSAgICkgICMgMkIg4qCWICsgW1BMVVMgU0lHTl0KK2NoYXIgXHgyQwkoIDIgICAgICApICAjIDJDIOKggiAsIFtDT01NQV0KK2NoYXIgXHgyRAkoICAzICA2ICApICAjIDJEIOKgpCAtIFtIWVBIRU4tTUlOVVNdCitjaGFyIFx4MkUJKCAyICA1NiAgKSAgIyAyRSDioLIgLiBbRlVMTCBTVE9QXQorY2hhciBceDJGCSggIDM0ICAgICkgICMgMkYg4qCMIC8gW1NPTElEVVNdCitjaGFyIFx4MzAJKCAyIDQ1ICAgKSAgIyAzMCDioJogMCBbRElHSVQgWkVST10KK2NoYXIgXHgzMQkoMSAgICAgICApICAjIDMxIOKggSAxIFtESUdJVCBPTkVdCitjaGFyIFx4MzIJKDEyICAgICAgKSAgIyAzMiDioIMgMiBbRElHSVQgVFdPXQorY2hhciBceDMzCSgxICA0ICAgICkgICMgMzMg4qCJIDMgW0RJR0lUIFRIUkVFXQorY2hhciBceDM0CSgxICA0NSAgICkgICMgMzQg4qCZIDQgW0RJR0lUIEZPVVJdCitjaGFyIFx4MzUJKDEgICA1ICAgKSAgIyAzNSDioJEgNSBbRElHSVQgRklWRV0KK2NoYXIgXHgzNgkoMTIgNCAgICApICAjIDM2IOKgiyA2IFtESUdJVCBTSVhdCitjaGFyIFx4MzcJKDEyIDQ1ICAgKSAgIyAzNyDioJsgNyBbRElHSVQgU0VWRU5dCitjaGFyIFx4MzgJKDEyICA1ICAgKSAgIyAzOCDioJMgOCBbRElHSVQgRUlHSFRdCitjaGFyIFx4MzkJKCAyIDQgICAgKSAgIyAzOSDioIogOSBbRElHSVQgTklORV0KK2NoYXIgXHgzQQkoIDIgIDUgICApICAjIDNBIOKgkiA6IFtDT0xPTl0KK2NoYXIgXHgzQgkoIDIzICAgICApICAjIDNCIOKghiA7IFtTRU1JQ09MT05dCitjaGFyIFx4M0QJKCAyMyA1NiAgKSAgIyAzRCDioLYgPSBbRVFVQUxTIFNJR05dCitjaGFyIFx4M0YJKCAyICAgNiAgKSAgIyAzRiDioKIgPyBbUVVFU1RJT04gTUFSS10KK2NoYXIgXHg0MAkoICAzNDUgICApICAjIDQwIOKgnCBAIFtDT01NRVJDSUFMIEFUXQorY2hhciBceDQxCSgxICAgICAgICkgICMgNDEg4qCBIEEgW0xBVElOIENBUElUQUwgTEVUVEVSIEFdCitjaGFyIFx4NDIJKDEyICAgICAgKSAgIyA0MiDioIMgQiBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgQl0KK2NoYXIgXHg0MwkoMSAgNCAgICApICAjIDQzIOKgiSBDIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBDXQorY2hhciBceDQ0CSgxICA0NSAgICkgICMgNDQg4qCZIEQgW0xBVElOIENBUElUQUwgTEVUVEVSIERdCitjaGFyIFx4NDUJKDEgICA1ICAgKSAgIyA0NSDioJEgRSBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgRV0KK2NoYXIgXHg0NgkoMTIgNCAgICApICAjIDQ2IOKgiyBGIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBGXQorY2hhciBceDQ3CSgxMiA0NSAgICkgICMgNDcg4qCbIEcgW0xBVElOIENBUElUQUwgTEVUVEVSIEddCitjaGFyIFx4NDgJKDEyICA1ICAgKSAgIyA0OCDioJMgSCBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgSF0KK2NoYXIgXHg0OQkoIDIgNCAgICApICAjIDQ5IOKgiiBJIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBJXQorY2hhciBceDRBCSggMiA0NSAgICkgICMgNEEg4qCaIEogW0xBVElOIENBUElUQUwgTEVUVEVSIEpdCitjaGFyIFx4NEIJKDEgMyAgICAgKSAgIyA0QiDioIUgSyBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgS10KK2NoYXIgXHg0QwkoMTIzICAgICApICAjIDRDIOKghyBMIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBMXQorY2hhciBceDRECSgxIDM0ICAgICkgICMgNEQg4qCNIE0gW0xBVElOIENBUElUQUwgTEVUVEVSIE1dCitjaGFyIFx4NEUJKDEgMzQ1ICAgKSAgIyA0RSDioJ0gTiBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgTl0KK2NoYXIgXHg0RgkoMSAzIDUgICApICAjIDRGIOKglSBPIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBPXQorY2hhciBceDUwCSgxMjM0ICAgICkgICMgNTAg4qCPIFAgW0xBVElOIENBUElUQUwgTEVUVEVSIFBdCitjaGFyIFx4NTEJKDEyMzQ1ICAgKSAgIyA1MSDioJ8gUSBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgUV0KK2NoYXIgXHg1MgkoMTIzIDUgICApICAjIDUyIOKglyBSIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBSXQorY2hhciBceDUzCSggMjM0ICAgICkgICMgNTMg4qCOIFMgW0xBVElOIENBUElUQUwgTEVUVEVSIFNdCitjaGFyIFx4NTQJKCAyMzQ1ICAgKSAgIyA1NCDioJ4gVCBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgVF0KK2NoYXIgXHg1NQkoMSAzICA2ICApICAjIDU1IOKgpSBVIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBVXQorY2hhciBceDU2CSgxMjMgIDYgICkgICMgNTYg4qCnIFYgW0xBVElOIENBUElUQUwgTEVUVEVSIFZdCitjaGFyIFx4NTcJKCAyIDQ1NiAgKSAgIyA1NyDioLogVyBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgV10KK2NoYXIgXHg1OAkoMSAzNCA2ICApICAjIDU4IOKgrSBYIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBYXQorY2hhciBceDU5CSgxIDM0NTYgICkgICMgNTkg4qC9IFkgW0xBVElOIENBUElUQUwgTEVUVEVSIFldCitjaGFyIFx4NUEJKDEgMyA1NiAgKSAgIyA1QSDioLUgWiBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgWl0KK2NoYXIgXHg1QgkoMTIzIDU2ICApICAjIDVCIOKgtyBbIFtMRUZUIFNRVUFSRSBCUkFDS0VUXQorY2hhciBceDVECSggMjM0NTYgICkgICMgNUQg4qC+IF0gW1JJR0hUIFNRVUFSRSBCUkFDS0VUXQorY2hhciBceDVFCSggIDM0IDYgICkgICMgNUUg4qCsIF4gW0NJUkNVTUZMRVggQUNDRU5UXQorY2hhciBceDVGCSggICA0NTYgICkgICMgNUYg4qC4IF8gW0xPVyBMSU5FXQorY2hhciBceDYwCSggICAgIDYgICkgICMgNjAg4qCgIGAgW0dSQVZFIEFDQ0VOVF0KK2NoYXIgXHg2MQkoMSAgICAgICApICAjIDYxIOKggSBhIFtMQVRJTiBTTUFMTCBMRVRURVIgQV0KK2NoYXIgXHg2MgkoMTIgICAgICApICAjIDYyIOKggyBiIFtMQVRJTiBTTUFMTCBMRVRURVIgQl0KK2NoYXIgXHg2MwkoMSAgNCAgICApICAjIDYzIOKgiSBjIFtMQVRJTiBTTUFMTCBMRVRURVIgQ10KK2NoYXIgXHg2NAkoMSAgNDUgICApICAjIDY0IOKgmSBkIFtMQVRJTiBTTUFMTCBMRVRURVIgRF0KK2NoYXIgXHg2NQkoMSAgIDUgICApICAjIDY1IOKgkSBlIFtMQVRJTiBTTUFMTCBMRVRURVIgRV0KK2NoYXIgXHg2NgkoMTIgNCAgICApICAjIDY2IOKgiyBmIFtMQVRJTiBTTUFMTCBMRVRURVIgRl0KK2NoYXIgXHg2NwkoMTIgNDUgICApICAjIDY3IOKgmyBnIFtMQVRJTiBTTUFMTCBMRVRURVIgR10KK2NoYXIgXHg2OAkoMTIgIDUgICApICAjIDY4IOKgkyBoIFtMQVRJTiBTTUFMTCBMRVRURVIgSF0KK2NoYXIgXHg2OQkoIDIgNCAgICApICAjIDY5IOKgiiBpIFtMQVRJTiBTTUFMTCBMRVRURVIgSV0KK2NoYXIgXHg2QQkoIDIgNDUgICApICAjIDZBIOKgmiBqIFtMQVRJTiBTTUFMTCBMRVRURVIgSl0KK2NoYXIgXHg2QgkoMSAzICAgICApICAjIDZCIOKghSBrIFtMQVRJTiBTTUFMTCBMRVRURVIgS10KK2NoYXIgXHg2QwkoMTIzICAgICApICAjIDZDIOKghyBsIFtMQVRJTiBTTUFMTCBMRVRURVIgTF0KK2NoYXIgXHg2RAkoMSAzNCAgICApICAjIDZEIOKgjSBtIFtMQVRJTiBTTUFMTCBMRVRURVIgTV0KK2NoYXIgXHg2RQkoMSAzNDUgICApICAjIDZFIOKgnSBuIFtMQVRJTiBTTUFMTCBMRVRURVIgTl0KK2NoYXIgXHg2RgkoMSAzIDUgICApICAjIDZGIOKglSBvIFtMQVRJTiBTTUFMTCBMRVRURVIgT10KK2NoYXIgXHg3MAkoMTIzNCAgICApICAjIDcwIOKgjyBwIFtMQVRJTiBTTUFMTCBMRVRURVIgUF0KK2NoYXIgXHg3MQkoMTIzNDUgICApICAjIDcxIOKgnyBxIFtMQVRJTiBTTUFMTCBMRVRURVIgUV0KK2NoYXIgXHg3MgkoMTIzIDUgICApICAjIDcyIOKglyByIFtMQVRJTiBTTUFMTCBMRVRURVIgUl0KK2NoYXIgXHg3MwkoIDIzNCAgICApICAjIDczIOKgjiBzIFtMQVRJTiBTTUFMTCBMRVRURVIgU10KK2NoYXIgXHg3NAkoIDIzNDUgICApICAjIDc0IOKgniB0IFtMQVRJTiBTTUFMTCBMRVRURVIgVF0KK2NoYXIgXHg3NQkoMSAzICA2ICApICAjIDc1IOKgpSB1IFtMQVRJTiBTTUFMTCBMRVRURVIgVV0KK2NoYXIgXHg3NgkoMTIzICA2ICApICAjIDc2IOKgpyB2IFtMQVRJTiBTTUFMTCBMRVRURVIgVl0KK2NoYXIgXHg3NwkoIDIgNDU2ICApICAjIDc3IOKguiB3IFtMQVRJTiBTTUFMTCBMRVRURVIgV10KK2NoYXIgXHg3OAkoMSAzNCA2ICApICAjIDc4IOKgrSB4IFtMQVRJTiBTTUFMTCBMRVRURVIgWF0KK2NoYXIgXHg3OQkoMSAzNDU2ICApICAjIDc5IOKgvSB5IFtMQVRJTiBTTUFMTCBMRVRURVIgWV0KK2NoYXIgXHg3QQkoMSAzIDU2ICApICAjIDdBIOKgtSB6IFtMQVRJTiBTTUFMTCBMRVRURVIgWl0KK2NoYXIgXHg3QgkoMTIzIDU2ICApICAjIDdCIOKgtyB7IFtMRUZUIENVUkxZIEJSQUNLRVRdCitjaGFyIFx4N0MJKDEyMzQ1NiAgKSAgIyA3QyDioL8gfCBbVkVSVElDQUwgTElORV0KK2NoYXIgXHg3RAkoIDIzNDU2ICApICAjIDdEIOKgviB9IFtSSUdIVCBDVVJMWSBCUkFDS0VUXQorY2hhciBceEExCSggICA0ICAgICkgICMgQTEg4qCIIMKhIFtJTlZFUlRFRCBFWENMQU1BVElPTiBNQVJLXQorY2hhciBceEEyCSgxICA0ICAgICkgICMgQTIg4qCJIMKiIFtDRU5UIFNJR05dCitjaGFyIFx4QTMJKDEyMzQgICAgKSAgIyBBMyDioI8gwqMgW1BPVU5EIFNJR05dCitjaGFyIFx1MjBBQwkoMSAgIDUgICApICAjIEE0IOKgkSDigqwgW0VVUk8gU0lHTl0KK2NoYXIgXHhBNQkoMSAzNDU2ICApICAjIEE1IOKgvSDCpSBbWUVOIFNJR05dCitjaGFyIFx4QTcJKCAgMzQgNiAgKSAgIyBBNyDioKwgwqcgW1NFQ1RJT04gU0lHTl0KK2NoYXIgXHhBQQkoICAgNCA2ICApICAjIEFBIOKgqCDCqiBbRkVNSU5JTkUgT1JESU5BTCBJTkRJQ0FUT1JdCitjaGFyIFx4QUIJKCAyMyA1NiAgKSAgIyBBQiDioLYgwqsgW0xFRlQtUE9JTlRJTkcgRE9VQkxFIEFOR0xFIFFVT1RBVElPTiBNQVJLXQorY2hhciBceEI1CSgxMjM0NTYgICkgICMgQjUg4qC/IMK1IFtNSUNSTyBTSUdOXQorY2hhciBceEI3CSggICAgNTYgICkgICMgQjcg4qCwIMK3IFtNSURETEUgRE9UXQorY2hhciBceEJCCSggMjMgNTYgICkgICMgQkIg4qC2IMK7IFtSSUdIVC1QT0lOVElORyBET1VCTEUgQU5HTEUgUVVPVEFUSU9OIE1BUktdCitjaGFyIFx4QkYJKCAgMyA1ICAgKSAgIyBCRiDioJQgwr8gW0lOVkVSVEVEIFFVRVNUSU9OIE1BUktdCitjaGFyIFx4QzAJKDEyMyA1NiAgKSAgIyBDMCDioLcgw4AgW0xBVElOIENBUElUQUwgTEVUVEVSIEEgV0lUSCBHUkFWRV0KK2NoYXIgXHhDMQkoMSAgICAgICApICAjIEMxIOKggSDDgSBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgQSBXSVRIIEFDVVRFXQorY2hhciBceEMyCSgxICAgIDYgICkgICMgQzIg4qChIMOCIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBBIFdJVEggQ0lSQ1VNRkxFWF0KK2NoYXIgXHhDMwkoICAzNDUgICApICAjIEMzIOKgnCDDgyBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgQSBXSVRIIFRJTERFXQorY2hhciBceEM0CSggIDM0NSAgICkgICMgQzQg4qCcIMOEIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBBIFdJVEggRElBRVJFU0lTXQorY2hhciBceEM1CSggMiA0IDYgICkgICMgQzUg4qCqIMOFIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBBIFdJVEggUklORyBBQk9WRV0KK2NoYXIgXHhDNgkoICAzNDUgICApICAjIEM2IOKgnCDDhiBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgQUVdCitjaGFyIFx4QzcJKDEyMzQgNiAgKSAgIyBDNyDioK8gw4cgW0xBVElOIENBUElUQUwgTEVUVEVSIEMgV0lUSCBDRURJTExBXQorY2hhciBceEM4CSggMjM0IDYgICkgICMgQzgg4qCuIMOIIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBFIFdJVEggR1JBVkVdCitjaGFyIFx4QzkJKDEyMzQ1NiAgKSAgIyBDOSDioL8gw4kgW0xBVElOIENBUElUQUwgTEVUVEVSIEUgV0lUSCBBQ1VURV0KK2NoYXIgXHhDQQkoMTIgICA2ICApICAjIENBIOKgoyDDiiBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgRSBXSVRIIENJUkNVTUZMRVhdCitjaGFyIFx4Q0IJKDEyIDQgNiAgKSAgIyBDQiDioKsgw4sgW0xBVElOIENBUElUQUwgTEVUVEVSIEUgV0lUSCBESUFFUkVTSVNdCitjaGFyIFx4RDEJKDEyIDQ1NiAgKSAgIyBEMSDioLsgw5EgW0xBVElOIENBUElUQUwgTEVUVEVSIE4gV0lUSCBUSUxERV0KK2NoYXIgXHhENgkoIDIgNCA2ICApICAjIEQ2IOKgqiDDliBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgTyBXSVRIIERJQUVSRVNJU10KK2NoYXIgXHhENwkoIDIzICA2ICApICAjIEQ3IOKgpiDDlyBbTVVMVElQTElDQVRJT04gU0lHTl0KK2NoYXIgXHhFMAkoMTIzIDU2ICApICAjIEUwIOKgtyDDoCBbTEFUSU4gU01BTEwgTEVUVEVSIEEgV0lUSCBHUkFWRV0KK2NoYXIgXHhFMQkoMSAgICAgICApICAjIEUxIOKggSDDoSBbTEFUSU4gU01BTEwgTEVUVEVSIEEgV0lUSCBBQ1VURV0KK2NoYXIgXHhFMgkoMSAgICA2ICApICAjIEUyIOKgoSDDoiBbTEFUSU4gU01BTEwgTEVUVEVSIEEgV0lUSCBDSVJDVU1GTEVYXQorY2hhciBceEUzCSggIDM0NSAgICkgICMgRTMg4qCcIMOjIFtMQVRJTiBTTUFMTCBMRVRURVIgQSBXSVRIIFRJTERFXQorY2hhciBceEU0CSggIDM0NSAgICkgICMgRTQg4qCcIMOkIFtMQVRJTiBTTUFMTCBMRVRURVIgQSBXSVRIIERJQUVSRVNJU10KK2NoYXIgXHhFNQkoIDIgNCA2ICApICAjIEU1IOKgqiDDpSBbTEFUSU4gU01BTEwgTEVUVEVSIEEgV0lUSCBSSU5HIEFCT1ZFXQorY2hhciBceEU2CSggIDM0NSAgICkgICMgRTYg4qCcIMOmIFtMQVRJTiBTTUFMTCBMRVRURVIgQUVdCitjaGFyIFx4RTcJKDEyMzQgNiAgKSAgIyBFNyDioK8gw6cgW0xBVElOIFNNQUxMIExFVFRFUiBDIFdJVEggQ0VESUxMQV0KK2NoYXIgXHhFOAkoIDIzNCA2ICApICAjIEU4IOKgriDDqCBbTEFUSU4gU01BTEwgTEVUVEVSIEUgV0lUSCBHUkFWRV0KK2NoYXIgXHhFOQkoMTIzNDU2ICApICAjIEU5IOKgvyDDqSBbTEFUSU4gU01BTEwgTEVUVEVSIEUgV0lUSCBBQ1VURV0KK2NoYXIgXHhFQQkoMTIgICA2ICApICAjIEVBIOKgoyDDqiBbTEFUSU4gU01BTEwgTEVUVEVSIEUgV0lUSCBDSVJDVU1GTEVYXQorY2hhciBceEVCCSgxMiA0IDYgICkgICMgRUIg4qCrIMOrIFtMQVRJTiBTTUFMTCBMRVRURVIgRSBXSVRIIERJQUVSRVNJU10KK2NoYXIgXHhFQwkoIDIgNCAgICApICAjIEVDIOKgiiDDrCBbTEFUSU4gU01BTEwgTEVUVEVSIEkgV0lUSCBHUkFWRV0KK2NoYXIgXHhFRAkoIDIgNCAgICApICAjIEVEIOKgiiDDrSBbTEFUSU4gU01BTEwgTEVUVEVSIEkgV0lUSCBBQ1VURV0KK2NoYXIgXHhFRQkoMSAgNCA2ICApICAjIEVFIOKgqSDDriBbTEFUSU4gU01BTEwgTEVUVEVSIEkgV0lUSCBDSVJDVU1GTEVYXQorY2hhciBceEVGCSgxMiA0NTYgICkgICMgRUYg4qC7IMOvIFtMQVRJTiBTTUFMTCBMRVRURVIgSSBXSVRIIERJQUVSRVNJU10KK2NoYXIgXHhGMQkoMTIgNDU2ICApICAjIEYxIOKguyDDsSBbTEFUSU4gU01BTEwgTEVUVEVSIE4gV0lUSCBUSUxERV0KK2NoYXIgXHhGMgkoMSAzIDUgICApICAjIEYyIOKglSDDsiBbTEFUSU4gU01BTEwgTEVUVEVSIE8gV0lUSCBHUkFWRV0KK2NoYXIgXHhGMwkoICAzNCA2ICApICAjIEYzIOKgrCDDsyBbTEFUSU4gU01BTEwgTEVUVEVSIE8gV0lUSCBBQ1VURV0KK2NoYXIgXHhGNAkoMSAgNDU2ICApICAjIEY0IOKguSDDtCBbTEFUSU4gU01BTEwgTEVUVEVSIE8gV0lUSCBDSVJDVU1GTEVYXQorY2hhciBceEY1CSggMiA0IDYgICkgICMgRjUg4qCqIMO1IFtMQVRJTiBTTUFMTCBMRVRURVIgTyBXSVRIIFRJTERFXQorY2hhciBceEY2CSggMiA0IDYgICkgICMgRjYg4qCqIMO2IFtMQVRJTiBTTUFMTCBMRVRURVIgTyBXSVRIIERJQUVSRVNJU10KK2NoYXIgXHhGNwkoIDIgIDU2ICApICAjIEY3IOKgsiDDtyBbRElWSVNJT04gU0lHTl0KK2NoYXIgXHhGOQkoMTIzIDU2ICApICAjIEY5IOKgtyDDuSBbTEFUSU4gU01BTEwgTEVUVEVSIFUgV0lUSCBHUkFWRV0KK2NoYXIgXHhGQQkoMSAzICA2ICApICAjIEZBIOKgpSDDuiBbTEFUSU4gU01BTEwgTEVUVEVSIFUgV0lUSCBBQ1VURV0KK2NoYXIgXHhGQgkoMSAgIDU2ICApICAjIEZCIOKgsSDDuyBbTEFUSU4gU01BTEwgTEVUVEVSIFUgV0lUSCBDSVJDVU1GTEVYXQorY2hhciBceEZDCSgxMiAgNTYgICkgICMgRkMg4qCzIMO8IFtMQVRJTiBTTUFMTCBMRVRURVIgVSBXSVRIIERJQUVSRVNJU10KK2NoYXIgXHhCOAkoICAgNDUgICApICAjICAgIOKgmCDCuCBbQ0VESUxMQV0KK2NoYXIgXHUwMTkyCSgxMiA0ICAgICkgICMgICAg4qCLIMaSIFtMQVRJTiBTTUFMTCBMRVRURVIgRiBXSVRIIEhPT0tdCitjaGFyIFx1MjAxQwkoIDIzICA2ICApICAjICAgIOKgpiDigJwgW0xFRlQgRE9VQkxFIFFVT1RBVElPTiBNQVJLXQorY2hhciBcdTIwMUQJKCAgMyA1NiAgKSAgIyAgICDioLQg4oCdIFtSSUdIVCBET1VCTEUgUVVPVEFUSU9OIE1BUktdCitjaGFyIFx1MjAxRQkoIDIzICA2ICApICAjICAgIOKgpiDigJ4gW0RPVUJMRSBMT1ctOSBRVU9UQVRJT04gTUFSS10KK2NoYXIgXHUyMDFGCSggIDMgNTYgICkgICMgICAg4qC0IOKAnyBbRE9VQkxFIEhJR0gtUkVWRVJTRUQtOSBRVU9UQVRJT04gTUFSS10KK2NoYXIgXHUyMEFDCSgxICAgNSAgOCkgICMg4qKRIOKCrCBbRVVSTyBTSUdOXQorCitpbmNsdWRlIGNvbW1vbi50dGkKZGlmZiAtLWdpdCBhL1RhYmxlcy9UZXh0L25sX05MLnR0YiBiL1RhYmxlcy9UZXh0L25sX05MLnR0YgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZmZkYzgwCi0tLSAvZGV2L251bGwKKysrIGIvVGFibGVzL1RleHQvbmxfTkwudHRiCkBAIC0wLDAgKzEsMTcwIEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisjICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorIworIyBDb3B5cmlnaHQgKEMpIDIwMDgtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisjCisjIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisjCisjIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyMgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorIyBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyMKKyMgV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworIworIyBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIyBCUkxUVFkgVGV4dCBUYWJsZSAtIER1dGNoIChOZXRoZXJsYW5kcykKKworIyBDcmVhdGVkIGJ5IExlb24gVW5naWVyIDxMZW9uLlVuZ2llckBWaWV3UGx1cy5jb20+LgorIyBDb21waWxhdGlvbiBKdW5lIDIyLCAyMDA2CisjCisjIENvbnZlcnRlZCBmcm9tIGxpYmxvdWlzIHRhYmxlIGJ5IFNhbXVlbCBUaGliYXVsdCA8c2FtdWVsLnRoaWJhdWx0QGVucy1seW9uLm9yZz4KKworIyBnZW5lcmF0ZWQgYnkgdHRidGVzdDogY2hhcnNldD1pc28tODg1OS0xNQorY2hhciBceDIwCSggICAgICAgICkgICMgMjAg4qCAICAgW1NQQUNFXQorY2hhciBceDIxCSggMjMgNSAgICkgICMgMjEg4qCWICEgW0VYQ0xBTUFUSU9OIE1BUktdCitjaGFyIFx4MjIJKCAyMyA1NiAgKSAgIyAyMiDioLYgIiBbUVVPVEFUSU9OIE1BUktdCitjaGFyIFx4MjMJKCAgMzQ1NiAgKSAgIyAyMyDioLwgIyBbTlVNQkVSIFNJR05dCitjaGFyIFx4MjQJKDEgIDQ1ICAgKSAgIyAyNCDioJkgJCBbRE9MTEFSIFNJR05dCitjaGFyIFx4MjYJKCAgMyA1NiAgKSAgIyAyNiDioLQgJiBbQU1QRVJTQU5EXQorY2hhciBceDI3CSggIDMgICAgICkgICMgMjcg4qCEICcgW0FQT1NUUk9QSEVdCitjaGFyIFx4MjgJKCAyMyAgNiAgKSAgIyAyOCDioKYgKCBbTEVGVCBQQVJFTlRIRVNJU10KK2NoYXIgXHgyOQkoICAzIDU2ICApICAjIDI5IOKgtCApIFtSSUdIVCBQQVJFTlRIRVNJU10KK2NoYXIgXHgyQQkoICAzIDUgICApICAjIDJBIOKglCAqIFtBU1RFUklTS10KK2NoYXIgXHgyQgkoIDIzIDUgICApICAjIDJCIOKgliArIFtQTFVTIFNJR05dCitjaGFyIFx4MkMJKCAyICAgICAgKSAgIyAyQyDioIIgLCBbQ09NTUFdCitjaGFyIFx4MkQJKCAgMyAgNiAgKSAgIyAyRCDioKQgLSBbSFlQSEVOLU1JTlVTXQorY2hhciBceDJFCSggMiAgNTYgICkgICMgMkUg4qCyIC4gW0ZVTEwgU1RPUF0KK2NoYXIgXHgyRgkoICAzNCAgICApICAjIDJGIOKgjCAvIFtTT0xJRFVTXQorY2hhciBceDMwCSggMiA0NSAgICkgICMgMzAg4qCaIDAgW0RJR0lUIFpFUk9dCitjaGFyIFx4MzEJKDEgICAgICAgKSAgIyAzMSDioIEgMSBbRElHSVQgT05FXQorY2hhciBceDMyCSgxMiAgICAgICkgICMgMzIg4qCDIDIgW0RJR0lUIFRXT10KK2NoYXIgXHgzMwkoMSAgNCAgICApICAjIDMzIOKgiSAzIFtESUdJVCBUSFJFRV0KK2NoYXIgXHgzNAkoMSAgNDUgICApICAjIDM0IOKgmSA0IFtESUdJVCBGT1VSXQorY2hhciBceDM1CSgxICAgNSAgICkgICMgMzUg4qCRIDUgW0RJR0lUIEZJVkVdCitjaGFyIFx4MzYJKDEyIDQgICAgKSAgIyAzNiDioIsgNiBbRElHSVQgU0lYXQorY2hhciBceDM3CSgxMiA0NSAgICkgICMgMzcg4qCbIDcgW0RJR0lUIFNFVkVOXQorY2hhciBceDM4CSgxMiAgNSAgICkgICMgMzgg4qCTIDggW0RJR0lUIEVJR0hUXQorY2hhciBceDM5CSggMiA0ICAgICkgICMgMzkg4qCKIDkgW0RJR0lUIE5JTkVdCitjaGFyIFx4M0EJKCAyICA1ICAgKSAgIyAzQSDioJIgOiBbQ09MT05dCitjaGFyIFx4M0IJKCAyMyAgICAgKSAgIyAzQiDioIYgOyBbU0VNSUNPTE9OXQorY2hhciBceDNECSggMjMgNTYgICkgICMgM0Qg4qC2ID0gW0VRVUFMUyBTSUdOXQorY2hhciBceDNGCSggMiAgIDYgICkgICMgM0Yg4qCiID8gW1FVRVNUSU9OIE1BUktdCitjaGFyIFx4NDAJKCAgMzQ1ICAgKSAgIyA0MCDioJwgQCBbQ09NTUVSQ0lBTCBBVF0KK2NoYXIgXHg0MQkoMSAgICAgICApICAjIDQxIOKggSBBIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBBXQorY2hhciBceDQyCSgxMiAgICAgICkgICMgNDIg4qCDIEIgW0xBVElOIENBUElUQUwgTEVUVEVSIEJdCitjaGFyIFx4NDMJKDEgIDQgICAgKSAgIyA0MyDioIkgQyBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgQ10KK2NoYXIgXHg0NAkoMSAgNDUgICApICAjIDQ0IOKgmSBEIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBEXQorY2hhciBceDQ1CSgxICAgNSAgICkgICMgNDUg4qCRIEUgW0xBVElOIENBUElUQUwgTEVUVEVSIEVdCitjaGFyIFx4NDYJKDEyIDQgICAgKSAgIyA0NiDioIsgRiBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgRl0KK2NoYXIgXHg0NwkoMTIgNDUgICApICAjIDQ3IOKgmyBHIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBHXQorY2hhciBceDQ4CSgxMiAgNSAgICkgICMgNDgg4qCTIEggW0xBVElOIENBUElUQUwgTEVUVEVSIEhdCitjaGFyIFx4NDkJKCAyIDQgICAgKSAgIyA0OSDioIogSSBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgSV0KK2NoYXIgXHg0QQkoIDIgNDUgICApICAjIDRBIOKgmiBKIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBKXQorY2hhciBceDRCCSgxIDMgICAgICkgICMgNEIg4qCFIEsgW0xBVElOIENBUElUQUwgTEVUVEVSIEtdCitjaGFyIFx4NEMJKDEyMyAgICAgKSAgIyA0QyDioIcgTCBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgTF0KK2NoYXIgXHg0RAkoMSAzNCAgICApICAjIDREIOKgjSBNIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBNXQorY2hhciBceDRFCSgxIDM0NSAgICkgICMgNEUg4qCdIE4gW0xBVElOIENBUElUQUwgTEVUVEVSIE5dCitjaGFyIFx4NEYJKDEgMyA1ICAgKSAgIyA0RiDioJUgTyBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgT10KK2NoYXIgXHg1MAkoMTIzNCAgICApICAjIDUwIOKgjyBQIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBQXQorY2hhciBceDUxCSgxMjM0NSAgICkgICMgNTEg4qCfIFEgW0xBVElOIENBUElUQUwgTEVUVEVSIFFdCitjaGFyIFx4NTIJKDEyMyA1ICAgKSAgIyA1MiDioJcgUiBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgUl0KK2NoYXIgXHg1MwkoIDIzNCAgICApICAjIDUzIOKgjiBTIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBTXQorY2hhciBceDU0CSggMjM0NSAgICkgICMgNTQg4qCeIFQgW0xBVElOIENBUElUQUwgTEVUVEVSIFRdCitjaGFyIFx4NTUJKDEgMyAgNiAgKSAgIyA1NSDioKUgVSBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgVV0KK2NoYXIgXHg1NgkoMTIzICA2ICApICAjIDU2IOKgpyBWIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBWXQorY2hhciBceDU3CSggMiA0NTYgICkgICMgNTcg4qC6IFcgW0xBVElOIENBUElUQUwgTEVUVEVSIFddCitjaGFyIFx4NTgJKDEgMzQgNiAgKSAgIyA1OCDioK0gWCBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgWF0KK2NoYXIgXHg1OQkoMSAzNDU2ICApICAjIDU5IOKgvSBZIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBZXQorY2hhciBceDVBCSgxIDMgNTYgICkgICMgNUEg4qC1IFogW0xBVElOIENBUElUQUwgTEVUVEVSIFpdCitjaGFyIFx4NUIJKDEyMyA1NiAgKSAgIyA1QiDioLcgWyBbTEVGVCBTUVVBUkUgQlJBQ0tFVF0KK2NoYXIgXHg1RAkoIDIzNDU2ICApICAjIDVEIOKgviBdIFtSSUdIVCBTUVVBUkUgQlJBQ0tFVF0KK2NoYXIgXHg1RQkoIDIzIDUgICApICAjIDVFIOKgliBeIFtDSVJDVU1GTEVYIEFDQ0VOVF0KK2NoYXIgXHg1RgkoICAgNDU2ICApICAjIDVGIOKguCBfIFtMT1cgTElORV0KK2NoYXIgXHg2MAkoICAgNCAgICApICAjIDYwIOKgiCBgIFtHUkFWRSBBQ0NFTlRdCitjaGFyIFx4NjEJKDEgICAgICAgKSAgIyA2MSDioIEgYSBbTEFUSU4gU01BTEwgTEVUVEVSIEFdCitjaGFyIFx4NjIJKDEyICAgICAgKSAgIyA2MiDioIMgYiBbTEFUSU4gU01BTEwgTEVUVEVSIEJdCitjaGFyIFx4NjMJKDEgIDQgICAgKSAgIyA2MyDioIkgYyBbTEFUSU4gU01BTEwgTEVUVEVSIENdCitjaGFyIFx4NjQJKDEgIDQ1ICAgKSAgIyA2NCDioJkgZCBbTEFUSU4gU01BTEwgTEVUVEVSIERdCitjaGFyIFx4NjUJKDEgICA1ICAgKSAgIyA2NSDioJEgZSBbTEFUSU4gU01BTEwgTEVUVEVSIEVdCitjaGFyIFx4NjYJKDEyIDQgICAgKSAgIyA2NiDioIsgZiBbTEFUSU4gU01BTEwgTEVUVEVSIEZdCitjaGFyIFx4NjcJKDEyIDQ1ICAgKSAgIyA2NyDioJsgZyBbTEFUSU4gU01BTEwgTEVUVEVSIEddCitjaGFyIFx4NjgJKDEyICA1ICAgKSAgIyA2OCDioJMgaCBbTEFUSU4gU01BTEwgTEVUVEVSIEhdCitjaGFyIFx4NjkJKCAyIDQgICAgKSAgIyA2OSDioIogaSBbTEFUSU4gU01BTEwgTEVUVEVSIEldCitjaGFyIFx4NkEJKCAyIDQ1ICAgKSAgIyA2QSDioJogaiBbTEFUSU4gU01BTEwgTEVUVEVSIEpdCitjaGFyIFx4NkIJKDEgMyAgICAgKSAgIyA2QiDioIUgayBbTEFUSU4gU01BTEwgTEVUVEVSIEtdCitjaGFyIFx4NkMJKDEyMyAgICAgKSAgIyA2QyDioIcgbCBbTEFUSU4gU01BTEwgTEVUVEVSIExdCitjaGFyIFx4NkQJKDEgMzQgICAgKSAgIyA2RCDioI0gbSBbTEFUSU4gU01BTEwgTEVUVEVSIE1dCitjaGFyIFx4NkUJKDEgMzQ1ICAgKSAgIyA2RSDioJ0gbiBbTEFUSU4gU01BTEwgTEVUVEVSIE5dCitjaGFyIFx4NkYJKDEgMyA1ICAgKSAgIyA2RiDioJUgbyBbTEFUSU4gU01BTEwgTEVUVEVSIE9dCitjaGFyIFx4NzAJKDEyMzQgICAgKSAgIyA3MCDioI8gcCBbTEFUSU4gU01BTEwgTEVUVEVSIFBdCitjaGFyIFx4NzEJKDEyMzQ1ICAgKSAgIyA3MSDioJ8gcSBbTEFUSU4gU01BTEwgTEVUVEVSIFFdCitjaGFyIFx4NzIJKDEyMyA1ICAgKSAgIyA3MiDioJcgciBbTEFUSU4gU01BTEwgTEVUVEVSIFJdCitjaGFyIFx4NzMJKCAyMzQgICAgKSAgIyA3MyDioI4gcyBbTEFUSU4gU01BTEwgTEVUVEVSIFNdCitjaGFyIFx4NzQJKCAyMzQ1ICAgKSAgIyA3NCDioJ4gdCBbTEFUSU4gU01BTEwgTEVUVEVSIFRdCitjaGFyIFx4NzUJKDEgMyAgNiAgKSAgIyA3NSDioKUgdSBbTEFUSU4gU01BTEwgTEVUVEVSIFVdCitjaGFyIFx4NzYJKDEyMyAgNiAgKSAgIyA3NiDioKcgdiBbTEFUSU4gU01BTEwgTEVUVEVSIFZdCitjaGFyIFx4NzcJKCAyIDQ1NiAgKSAgIyA3NyDioLogdyBbTEFUSU4gU01BTEwgTEVUVEVSIFddCitjaGFyIFx4NzgJKDEgMzQgNiAgKSAgIyA3OCDioK0geCBbTEFUSU4gU01BTEwgTEVUVEVSIFhdCitjaGFyIFx4NzkJKDEgMzQ1NiAgKSAgIyA3OSDioL0geSBbTEFUSU4gU01BTEwgTEVUVEVSIFldCitjaGFyIFx4N0EJKDEgMyA1NiAgKSAgIyA3QSDioLUgeiBbTEFUSU4gU01BTEwgTEVUVEVSIFpdCitjaGFyIFx4QTMJKDEyMzQgICAgKSAgIyBBMyDioI8gwqMgW1BPVU5EIFNJR05dCitjaGFyIFx1MjBBQwkoMSAgIDUgICApICAjIEE0IOKgkSDigqwgW0VVUk8gU0lHTl0KK2NoYXIgXHhBNQkoMSAzNDU2ICApICAjIEE1IOKgvSDCpSBbWUVOIFNJR05dCitjaGFyIFx4QTcJKCAgMzQgNiAgKSAgIyBBNyDioKwgwqcgW1NFQ1RJT04gU0lHTl0KK2NoYXIgXHhCNwkoICAgIDU2ICApICAjIEI3IOKgsCDCtyBbTUlERExFIERPVF0KK2NoYXIgXHhDMAkoMTIzIDU2ICApICAjIEMwIOKgtyDDgCBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgQSBXSVRIIEdSQVZFXQorY2hhciBceEMxCSgxMjMgNTYgICkgICMgQzEg4qC3IMOBIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBBIFdJVEggQUNVVEVdCitjaGFyIFx4QzIJKDEgICAgNiAgKSAgIyBDMiDioKEgw4IgW0xBVElOIENBUElUQUwgTEVUVEVSIEEgV0lUSCBDSVJDVU1GTEVYXQorY2hhciBceEMzCSggIDM0NSAgICkgICMgQzMg4qCcIMODIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBBIFdJVEggVElMREVdCitjaGFyIFx4QzQJKCAgMzQ1ICAgKSAgIyBDNCDioJwgw4QgW0xBVElOIENBUElUQUwgTEVUVEVSIEEgV0lUSCBESUFFUkVTSVNdCitjaGFyIFx4QzUJKDEgICAgNiAgKSAgIyBDNSDioKEgw4UgW0xBVElOIENBUElUQUwgTEVUVEVSIEEgV0lUSCBSSU5HIEFCT1ZFXQorY2hhciBceEM2CSggIDM0NSAgICkgICMgQzYg4qCcIMOGIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBBRV0KK2NoYXIgXHhDNwkoMTIzNCA2ICApICAjIEM3IOKgryDDhyBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgQyBXSVRIIENFRElMTEFdCitjaGFyIFx4QzgJKCAyMzQgNiAgKSAgIyBDOCDioK4gw4ggW0xBVElOIENBUElUQUwgTEVUVEVSIEUgV0lUSCBHUkFWRV0KK2NoYXIgXHhDOQkoMTIzNDU2ICApICAjIEM5IOKgvyDDiSBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgRSBXSVRIIEFDVVRFXQorY2hhciBceENBCSgxMiAgIDYgICkgICMgQ0Eg4qCjIMOKIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBFIFdJVEggQ0lSQ1VNRkxFWF0KK2NoYXIgXHhDQgkoMTIgNCA2ICApICAjIENCIOKgqyDDiyBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgRSBXSVRIIERJQUVSRVNJU10KK2NoYXIgXHhEMQkoMTIgNDU2ICApICAjIEQxIOKguyDDkSBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgTiBXSVRIIFRJTERFXQorY2hhciBceEQ2CSgxMjM0NTYgICkgICMgRDYg4qC/IMOWIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBPIFdJVEggRElBRVJFU0lTXQorY2hhciBceEQ3CSggMjMgIDYgICkgICMgRDcg4qCmIMOXIFtNVUxUSVBMSUNBVElPTiBTSUdOXQorY2hhciBceERDCSgxMiAgNTYgICkgICMgREMg4qCzIMOcIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBVIFdJVEggRElBRVJFU0lTXQorY2hhciBceEUwCSgxMjMgNTYgICkgICMgRTAg4qC3IMOgIFtMQVRJTiBTTUFMTCBMRVRURVIgQSBXSVRIIEdSQVZFXQorY2hhciBceEUxCSgxMjMgNTYgICkgICMgRTEg4qC3IMOhIFtMQVRJTiBTTUFMTCBMRVRURVIgQSBXSVRIIEFDVVRFXQorY2hhciBceEUyCSgxICAgIDYgICkgICMgRTIg4qChIMOiIFtMQVRJTiBTTUFMTCBMRVRURVIgQSBXSVRIIENJUkNVTUZMRVhdCitjaGFyIFx4RTMJKCAgMzQ1ICAgKSAgIyBFMyDioJwgw6MgW0xBVElOIFNNQUxMIExFVFRFUiBBIFdJVEggVElMREVdCitjaGFyIFx4RTQJKCAgMzQ1ICAgKSAgIyBFNCDioJwgw6QgW0xBVElOIFNNQUxMIExFVFRFUiBBIFdJVEggRElBRVJFU0lTXQorY2hhciBceEU1CSgxICAgIDYgICkgICMgRTUg4qChIMOlIFtMQVRJTiBTTUFMTCBMRVRURVIgQSBXSVRIIFJJTkcgQUJPVkVdCitjaGFyIFx4RTYJKCAgMzQ1ICAgKSAgIyBFNiDioJwgw6YgW0xBVElOIFNNQUxMIExFVFRFUiBBRV0KK2NoYXIgXHhFNwkoMTIzNCA2ICApICAjIEU3IOKgryDDpyBbTEFUSU4gU01BTEwgTEVUVEVSIEMgV0lUSCBDRURJTExBXQorY2hhciBceEU4CSggMjM0IDYgICkgICMgRTgg4qCuIMOoIFtMQVRJTiBTTUFMTCBMRVRURVIgRSBXSVRIIEdSQVZFXQorY2hhciBceEU5CSgxMjM0NTYgICkgICMgRTkg4qC/IMOpIFtMQVRJTiBTTUFMTCBMRVRURVIgRSBXSVRIIEFDVVRFXQorY2hhciBceEVBCSgxMiAgIDYgICkgICMgRUEg4qCjIMOqIFtMQVRJTiBTTUFMTCBMRVRURVIgRSBXSVRIIENJUkNVTUZMRVhdCitjaGFyIFx4RUIJKDEyIDQgNiAgKSAgIyBFQiDioKsgw6sgW0xBVElOIFNNQUxMIExFVFRFUiBFIFdJVEggRElBRVJFU0lTXQorY2hhciBceEVDCSggMiA0ICAgICkgICMgRUMg4qCKIMOsIFtMQVRJTiBTTUFMTCBMRVRURVIgSSBXSVRIIEdSQVZFXQorY2hhciBceEVECSggIDM0ICAgICkgICMgRUQg4qCMIMOtIFtMQVRJTiBTTUFMTCBMRVRURVIgSSBXSVRIIEFDVVRFXQorY2hhciBceEVFCSgxICA0IDYgICkgICMgRUUg4qCpIMOuIFtMQVRJTiBTTUFMTCBMRVRURVIgSSBXSVRIIENJUkNVTUZMRVhdCitjaGFyIFx4RUYJKDEyIDQ1NiAgKSAgIyBFRiDioLsgw68gW0xBVElOIFNNQUxMIExFVFRFUiBJIFdJVEggRElBRVJFU0lTXQorY2hhciBceEYxCSgxMiA0NTYgICkgICMgRjEg4qC7IMOxIFtMQVRJTiBTTUFMTCBMRVRURVIgTiBXSVRIIFRJTERFXQorY2hhciBceEYyCSgxIDMgNSAgICkgICMgRjIg4qCVIMOyIFtMQVRJTiBTTUFMTCBMRVRURVIgTyBXSVRIIEdSQVZFXQorY2hhciBceEYzCSggIDM0IDYgICkgICMgRjMg4qCsIMOzIFtMQVRJTiBTTUFMTCBMRVRURVIgTyBXSVRIIEFDVVRFXQorY2hhciBceEY0CSgxICA0NTYgICkgICMgRjQg4qC5IMO0IFtMQVRJTiBTTUFMTCBMRVRURVIgTyBXSVRIIENJUkNVTUZMRVhdCitjaGFyIFx4RjUJKCAyIDQgNiAgKSAgIyBGNSDioKogw7UgW0xBVElOIFNNQUxMIExFVFRFUiBPIFdJVEggVElMREVdCitjaGFyIFx4RjYJKDEyMzQ1NiAgKSAgIyBGNiDioL8gw7YgW0xBVElOIFNNQUxMIExFVFRFUiBPIFdJVEggRElBRVJFU0lTXQorY2hhciBceEY3CSggMiAgNTYgICkgICMgRjcg4qCyIMO3IFtESVZJU0lPTiBTSUdOXQorY2hhciBceEY5CSgxMjMgNTYgICkgICMgRjkg4qC3IMO5IFtMQVRJTiBTTUFMTCBMRVRURVIgVSBXSVRIIEdSQVZFXQorY2hhciBceEZBCSggMjM0NTYgICkgICMgRkEg4qC+IMO6IFtMQVRJTiBTTUFMTCBMRVRURVIgVSBXSVRIIEFDVVRFXQorY2hhciBceEZCCSgxICAgNTYgICkgICMgRkIg4qCxIMO7IFtMQVRJTiBTTUFMTCBMRVRURVIgVSBXSVRIIENJUkNVTUZMRVhdCitjaGFyIFx4RkMJKDEyICA1NiAgKSAgIyBGQyDioLMgw7wgW0xBVElOIFNNQUxMIExFVFRFUiBVIFdJVEggRElBRVJFU0lTXQorY2hhciBceEI4CSggICA0NSAgICkgICMgICAg4qCYIMK4IFtDRURJTExBXQorY2hhciBcdTAxOTIJKDEyIDQgICAgKSAgIyAgICDioIsgxpIgW0xBVElOIFNNQUxMIExFVFRFUiBGIFdJVEggSE9PS10KK2NoYXIgXHUyMDFDCSggMjMgIDYgICkgICMgICAg4qCmIOKAnCBbTEVGVCBET1VCTEUgUVVPVEFUSU9OIE1BUktdCitjaGFyIFx1MjAxRAkoICAzIDU2ICApICAjICAgIOKgtCDigJ0gW1JJR0hUIERPVUJMRSBRVU9UQVRJT04gTUFSS10KK2NoYXIgXHUyMDFFCSggMjMgIDYgICkgICMgICAg4qCmIOKAniBbRE9VQkxFIExPVy05IFFVT1RBVElPTiBNQVJLXQorY2hhciBcdTIwMUYJKCAgMyA1NiAgKSAgIyAgICDioLQg4oCfIFtET1VCTEUgSElHSC1SRVZFUlNFRC05IFFVT1RBVElPTiBNQVJLXQorY2hhciBcdTIwQUMJKDEgICA1ICA4KSAgIyDiopEg4oKsIFtFVVJPIFNJR05dCisKK2luY2x1ZGUgY29tbW9uLnR0aQpkaWZmIC0tZ2l0IGEvVGFibGVzL1RleHQvbm8tZ2VuZXJpYy50dGIgYi9UYWJsZXMvVGV4dC9uby1nZW5lcmljLnR0YgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZjVlMmZhCi0tLSAvZGV2L251bGwKKysrIGIvVGFibGVzL1RleHQvbm8tZ2VuZXJpYy50dGIKQEAgLTAsMCArMSwyMDYgQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyMgICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisjCisjIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyMKKyMgQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjIEJSTFRUWSBUZXh0IFRhYmxlIC0gTm9yd2VnaWFuICh3aXRoIHN1cHBvcnQgZm9yIG90aGVyIGxhbmd1YWdlcykKKyMgU29tZSB1bm9mZmljaWFsIGNoYXJhY3RlciByZXByZXNlbnRhdGlvbnMgdG8gYWNjb21tb2RhdGUgbXVsdGlsaW5ndWFsIHVzYWdlLgorIyBGb3IgZXhhbXBsZSwgbnVtYmVycyBhcmUgcmVwcmVzZW50ZWQgd2l0aCBkb3QgNiByYXRoZXIgdGhhbiB3aXRoIGRvdCA4LgorCisjIHRoZSBzdGFuZGFyZCByZXByZXNlbnRhdGlvbnMgZm9yIHRoZSBsZXR0ZXJzIG9mIHRoZSBMYXRpbiBhbHBoYWJldAoraW5jbHVkZSBsdHItbGF0aW4udHRpCisKKyMgdGhlIHN0YW5kYXJkIHJlcHJlc2VudGF0aW9ucyBmb3IgdGhlIExhdGluIGNvbnRyb2wgY2hhcmFjdGVycworaW5jbHVkZSBjdGwtbGF0aW4udHRpCisKKyMgdGhlIG51bWJlcnMgMS05IGFyZSByZXByZXNlbnRlZCBieSB0aGUgbGV0dGVycyBhLWkgd2l0aCBkb3QgNiBhZGRlZAorIyB0aGUgbnVtYmVyIDAgaXMgcmVwcmVzZW50ZWQgYnkgZG90cyAzNDYKK2luY2x1ZGUgbnVtLWRvdDYudHRpCisKKyMgZ2VuZXJhdGVkIGJ5IHR0YnRlc3Q6IGNoYXJzZXQ9aXNvLTg4NTktMQorY2hhciBceDAwCSggICA0NSA3OCkgICMgMDAg4qOYICAgW05VTExdCisjIExhdGluIGNvbnRyb2wgY2hhcmFjdGVycyAgIyAwMS0xQQorY2hhciBceDFCCSgxMjMgNTY3OCkgICMgMUIg4qO3ICAgW0VTQ0FQRV0KK2NoYXIgXHgxQwkoICAzNCAgNzgpICAjIDFDIOKjjCAgIFtJTkZPUk1BVElPTiBTRVBBUkFUT1IgRk9VUl0KK2NoYXIgXHgxRAkoIDIzNDU2NzgpICAjIDFEIOKjviAgIFtJTkZPUk1BVElPTiBTRVBBUkFUT1IgVEhSRUVdCitjaGFyIFx4MUUJKCAyMzQgNjc4KSAgIyAxRSDio64gICBbSU5GT1JNQVRJT04gU0VQQVJBVE9SIFRXT10KK2NoYXIgXHgxRgkoICAgNDU2NzgpICAjIDFGIOKjuCAgIFtJTkZPUk1BVElPTiBTRVBBUkFUT1IgT05FXQorY2hhciBceDIwCSggICAgICAgICkgICMgMjAg4qCAICAgW1NQQUNFXQorY2hhciBceDIxCSggICAgNSAgICkgICMgMjEg4qCQICEgW0VYQ0xBTUFUSU9OIE1BUktdCitjaGFyIFx4MjIJKCAgIDQgICAgKSAgIyAyMiDioIggIiBbUVVPVEFUSU9OIE1BUktdCitjaGFyIFx4MjMJKCAgMzQ1NiAgKSAgIyAyMyDioLwgIyBbTlVNQkVSIFNJR05dCitjaGFyIFx4MjQJKCAgIDQgNiAgKSAgIyAyNCDioKggJCBbRE9MTEFSIFNJR05dCitjaGFyIFx4MjUJKDEyMzQ1NiAgKSAgIyAyNSDioL8gJSBbUEVSQ0VOVCBTSUdOXQorY2hhciBceDI2CSgxMjM0IDYgICkgICMgMjYg4qCvICYgW0FNUEVSU0FORF0KK2NoYXIgXHgyNwkoICAgICA2ICApICAjIDI3IOKgoCAnIFtBUE9TVFJPUEhFXQorY2hhciBceDI4CSggMjMgIDYgICkgICMgMjgg4qCmICggW0xFRlQgUEFSRU5USEVTSVNdCitjaGFyIFx4MjkJKCAgMyA1NiAgKSAgIyAyOSDioLQgKSBbUklHSFQgUEFSRU5USEVTSVNdCitjaGFyIFx4MkEJKCAgMyA1ICAgKSAgIyAyQSDioJQgKiBbQVNURVJJU0tdCitjaGFyIFx4MkIJKCAyMyA1ICAgKSAgIyAyQiDioJYgKyBbUExVUyBTSUdOXQorY2hhciBceDJDCSggMiAgICAgICkgICMgMkMg4qCCICwgW0NPTU1BXQorY2hhciBceDJECSggIDMgIDYgICkgICMgMkQg4qCkIC0gW0hZUEhFTi1NSU5VU10KK2NoYXIgXHgyRQkoICAzICAgICApICAjIDJFIOKghCAuIFtGVUxMIFNUT1BdCitjaGFyIFx4MkYJKCAyICA1NiAgKSAgIyAyRiDioLIgLyBbU09MSURVU10KKyMgSGluZHUtQXJhYmljIG51bWVyYWxzICAgICAjIDMwLTM5CitjaGFyIFx4M0EJKCAyICA1ICAgKSAgIyAzQSDioJIgOiBbQ09MT05dCitjaGFyIFx4M0IJKCAyMyAgICAgKSAgIyAzQiDioIYgOyBbU0VNSUNPTE9OXQorY2hhciBceDNDCSggICAgNTYgICkgICMgM0Mg4qCwIDwgW0xFU1MtVEhBTiBTSUdOXQorY2hhciBceDNECSggMjMgNTYgICkgICMgM0Qg4qC2ID0gW0VRVUFMUyBTSUdOXQorY2hhciBceDNFCSggICA0NSAgICkgICMgM0Ug4qCYID4gW0dSRUFURVItVEhBTiBTSUdOXQorY2hhciBceDNGCSggMiAgIDYgICkgICMgM0Yg4qCiID8gW1FVRVNUSU9OIE1BUktdCitjaGFyIFx4NDAJKCAgMzQ1IDcgKSAgIyA0MCDioZwgQCBbQ09NTUVSQ0lBTCBBVF0KKyMgdXBwZXJjYXNlIExhdGluIGFscGhhYmV0ICAjIDQxLTVBCitjaGFyIFx4NUIJKDEyMyA1NjcgKSAgIyA1QiDiobcgWyBbTEVGVCBTUVVBUkUgQlJBQ0tFVF0KK2NoYXIgXHg1QwkoICAzNCAgNyApICAjIDVDIOKhjCBcIFtSRVZFUlNFIFNPTElEVVNdCitjaGFyIFx4NUQJKCAyMzQ1NjcgKSAgIyA1RCDiob4gXSBbUklHSFQgU1FVQVJFIEJSQUNLRVRdCitjaGFyIFx4NUUJKCAyMzQgNjcgKSAgIyA1RSDioa4gXiBbQ0lSQ1VNRkxFWCBBQ0NFTlRdCitjaGFyIFx4NUYJKCAgIDQ1NiAgKSAgIyA1RiDioLggXyBbTE9XIExJTkVdCitjaGFyIFx4NjAJKCAgMzQ1ICAgKSAgIyA2MCDioJwgYCBbR1JBVkUgQUNDRU5UXQorIyBsb3dlcmNhc2UgTGF0aW4gYWxwaGFiZXQgICMgNjEtN0EKK2NoYXIgXHg3QgkoMTIzIDU2ICApICAjIDdCIOKgtyB7IFtMRUZUIENVUkxZIEJSQUNLRVRdCitjaGFyIFx4N0MJKCAgMzQgICAgKSAgIyA3QyDioIwgfCBbVkVSVElDQUwgTElORV0KK2NoYXIgXHg3RAkoIDIzNDU2ICApICAjIDdEIOKgviB9IFtSSUdIVCBDVVJMWSBCUkFDS0VUXQorY2hhciBceDdFCSggMjM0IDYgICkgICMgN0Ug4qCuIH4gW1RJTERFXQorY2hhciBceDdGCSggICA0NTYgOCkgICMgN0Yg4qK4ICAgW0RFTEVURV0KK2NoYXIgXHg4MAkoIDIzICA2NyApICAjIDgwIOKhpiAgIFs8Y29udHJvbC0wMDgwPl0KK2NoYXIgXHg4MQkoICAgIDU2IDgpICAjIDgxIOKisCAgIFs8Y29udHJvbC0wMDgxPl0KK2NoYXIgXHg4MgkoICAzICA2NyApICAjIDgyIOKhpCAgIFtCUkVBSyBQRVJNSVRURUQgSEVSRV0KK2NoYXIgXHg4MwkoIDIzICA2NzgpICAjIDgzIOKjpiAgIFtOTyBCUkVBSyBIRVJFXQorY2hhciBceDg0CSggMjMgNTY3OCkgICMgODQg4qO2ICAgWzxjb250cm9sLTAwODQ+XQorY2hhciBceDg1CSgxMiA0NSAgOCkgICMgODUg4qKbICAgW05FWFQgTElORSAoTkVMKV0KK2NoYXIgXHg4NgkoMTIzICAgIDgpICAjIDg2IOKihyAgIFtTVEFSVCBPRiBTRUxFQ1RFRCBBUkVBXQorY2hhciBceDg3CSgxMjM0NTY3ICkgICMgODcg4qG/ICAgW0VORCBPRiBTRUxFQ1RFRCBBUkVBXQorY2hhciBceDg4CSgxMjM0NTY3OCkgICMgODgg4qO/ICAgW0NIQVJBQ1RFUiBUQUJVTEFUSU9OIFNFVF0KK2NoYXIgXHg4OQkoICAgICA2NzgpICAjIDg5IOKjoCAgIFtDSEFSQUNURVIgVEFCVUxBVElPTiBXSVRIIEpVU1RJRklDQVRJT05dCitjaGFyIFx4OEEJKDEyMzQgNjc4KSAgIyA4QSDio68gICBbTElORSBUQUJVTEFUSU9OIFNFVF0KK2NoYXIgXHg4QgkoICAzIDU2IDgpICAjIDhCIOKitCAgIFtQQVJUSUFMIExJTkUgRk9SV0FSRF0KK2NoYXIgXHg4QwkoMSAgIDU2NzgpICAjIDhDIOKjsSAgIFtQQVJUSUFMIExJTkUgQkFDS1dBUkRdCitjaGFyIFx4OEQJKCAgMzQgNjc4KSAgIyA4RCDio6wgICBbUkVWRVJTRSBMSU5FIEZFRURdCitjaGFyIFx4OEUJKCAgICAgIDc4KSAgIyA4RSDio4AgICBbU0lOR0xFIFNISUZUIFRXT10KK2NoYXIgXHg4RgkoIDIgIDUgNzgpICAjIDhGIOKjkiAgIFtTSU5HTEUgU0hJRlQgVEhSRUVdCitjaGFyIFx4OTAJKCAyMyA1NjcgKSAgIyA5MCDiobYgICBbREVWSUNFIENPTlRST0wgU1RSSU5HXQorY2hhciBceDkxCSgxIDM0ICAgOCkgICMgOTEg4qKNICAgW1BSSVZBVEUgVVNFIE9ORV0KK2NoYXIgXHg5MgkoIDIgNDU2IDgpICAjIDkyIOKiuiAgIFtQUklWQVRFIFVTRSBUV09dCitjaGFyIFx4OTMJKCAyMzQgNiA4KSAgIyA5MyDioq4gICBbU0VUIFRSQU5TTUlUIFNUQVRFXQorY2hhciBceDk0CSggMjMgNSA3OCkgICMgOTQg4qOWICAgW0NBTkNFTCBDSEFSQUNURVJdCitjaGFyIFx4OTUJKCAgIDQ1NjcgKSAgIyA5NSDiobggICBbTUVTU0FHRSBXQUlUSU5HXQorY2hhciBceDk2CSgxMjM0NTYgOCkgICMgOTYg4qK/ICAgW1NUQVJUIE9GIEdVQVJERUQgQVJFQV0KK2NoYXIgXHg5NwkoICAzICA2IDgpICAjIDk3IOKipCAgIFtFTkQgT0YgR1VBUkRFRCBBUkVBXQorY2hhciBceDk4CSgxIDMgNTYgOCkgICMgOTgg4qK1ICAgW1NUQVJUIE9GIFNUUklOR10KK2NoYXIgXHg5OQkoICAzICA2NzgpICAjIDk5IOKjpCAgIFs8Y29udHJvbC0wMDk5Pl0KK2NoYXIgXHg5QQkoICAzNDU2NzgpICAjIDlBIOKjvCAgIFtTSU5HTEUgQ0hBUkFDVEVSIElOVFJPRFVDRVJdCitjaGFyIFx4OUIJKCAgICA1IDc4KSAgIyA5QiDio5AgICBbQ09OVFJPTCBTRVFVRU5DRSBJTlRST0RVQ0VSXQorY2hhciBceDlDCSggICAgICAgOCkgICMgOUMg4qKAICAgW1NUUklORyBURVJNSU5BVE9SXQorY2hhciBceDlECSggICA0IDY3OCkgICMgOUQg4qOoICAgW09QRVJBVElORyBTWVNURU0gQ09NTUFORF0KK2NoYXIgXHg5RQkoMSAzNCA2IDgpICAjIDlFIOKirSAgIFtQUklWQUNZIE1FU1NBR0VdCitjaGFyIFx4OUYJKDEyIDQgICA4KSAgIyA5RiDioosgICBbQVBQTElDQVRJT04gUFJPR1JBTSBDT01NQU5EXQorY2hhciBceEExCSggICAgNSAgOCkgICMgQTEg4qKQIMKhIFtJTlZFUlRFRCBFWENMQU1BVElPTiBNQVJLXQorY2hhciBceEEyCSggMiAgNSAgOCkgICMgQTIg4qKSIMKiIFtDRU5UIFNJR05dCitjaGFyIFx4QTMJKCAgMzQ1NiA4KSAgIyBBMyDiorwgwqMgW1BPVU5EIFNJR05dCitjaGFyIFx4QTQJKCAgMzQ1NjcgKSAgIyBBNCDiobwgwqQgW0NVUlJFTkNZIFNJR05dCitjaGFyIFx4QTUJKDEgIDQ1Njc4KSAgIyBBNSDio7kgwqUgW1lFTiBTSUdOXQorY2hhciBceEE2CSggIDM0ICAgOCkgICMgQTYg4qKMIMKmIFtCUk9LRU4gQkFSXQorY2hhciBceEE3CSgxMjMgIDYgOCkgICMgQTcg4qKnIMKnIFtTRUNUSU9OIFNJR05dCitjaGFyIFx4QTgJKCAgICAgIDcgKSAgIyBBOCDioYAgwqggW0RJQUVSRVNJU10KK2NoYXIgXHhBOQkoMSAgNCAgIDgpICAjIEE5IOKiiSDCqSBbQ09QWVJJR0hUIFNJR05dCitjaGFyIFx4QUEJKCAgMyAgIDcgKSAgIyBBQSDioYQgwqogW0ZFTUlOSU5FIE9SRElOQUwgSU5ESUNBVE9SXQorY2hhciBceEFCCSggICA0ICA3ICkgICMgQUIg4qGIIMKrIFtMRUZULVBPSU5USU5HIERPVUJMRSBBTkdMRSBRVU9UQVRJT04gTUFSS10KK2NoYXIgXHhBQwkoICAgICA2NyApICAjIEFDIOKhoCDCrCBbTk9UIFNJR05dCitjaGFyIFx4QUQJKCAgMyAgICA4KSAgIyBBRCDiooQgwq0gW1NPRlQgSFlQSEVOXQorY2hhciBceEFFCSgxMjMgNSAgOCkgICMgQUUg4qKXIMKuIFtSRUdJU1RFUkVEIFNJR05dCitjaGFyIFx4QUYJKCAyMyA1NiA4KSAgIyBBRiDiorYgwq8gW01BQ1JPTl0KK2NoYXIgXHhCMAkoMTIgNDU2NzgpICAjIEIwIOKjuyDCsCBbREVHUkVFIFNJR05dCitjaGFyIFx4QjEJKDEyMzQgICA4KSAgIyBCMSDioo8gwrEgW1BMVVMtTUlOVVMgU0lHTl0KK2NoYXIgXHhCMgkoICAzIDUgNzgpICAjIEIyIOKjlCDCsiBbU1VQRVJTQ1JJUFQgVFdPXQorY2hhciBceEIzCSgxICA0IDY3OCkgICMgQjMg4qOpIMKzIFtTVVBFUlNDUklQVCBUSFJFRV0KK2NoYXIgXHhCNAkoMTIgNCA2NzgpICAjIEI0IOKjqyDCtCBbQUNVVEUgQUNDRU5UXQorY2hhciBceEI1CSgxMiAgIDY3OCkgICMgQjUg4qOjIMK1IFtNSUNSTyBTSUdOXQorY2hhciBceEI2CSgxMjM0NSAgOCkgICMgQjYg4qKfIMK2IFtQSUxDUk9XIFNJR05dCitjaGFyIFx4QjcJKCAgMyAgIDc4KSAgIyBCNyDio4QgwrcgW01JRERMRSBET1RdCitjaGFyIFx4QjgJKCAgMyA1Njc4KSAgIyBCOCDio7QgwrggW0NFRElMTEFdCitjaGFyIFx4QjkJKCAgICA1Njc4KSAgIyBCOSDio7AgwrkgW1NVUEVSU0NSSVBUIE9ORV0KK2NoYXIgXHhCQQkoICAgICA2IDgpICAjIEJBIOKioCDCuiBbTUFTQ1VMSU5FIE9SRElOQUwgSU5ESUNBVE9SXQorY2hhciBceEJCCSggICA0ICAgOCkgICMgQkIg4qKIIMK7IFtSSUdIVC1QT0lOVElORyBET1VCTEUgQU5HTEUgUVVPVEFUSU9OIE1BUktdCitjaGFyIFx4QkMJKCAyICA1IDcgKSAgIyBCQyDioZIgwrwgW1ZVTEdBUiBGUkFDVElPTiBPTkUgUVVBUlRFUl0KK2NoYXIgXHhCRAkoMSAgNDUgIDgpICAjIEJEIOKimSDCvSBbVlVMR0FSIEZSQUNUSU9OIE9ORSBIQUxGXQorY2hhciBceEJFCSgxIDM0NSAgOCkgICMgQkUg4qKdIMK+IFtWVUxHQVIgRlJBQ1RJT04gVEhSRUUgUVVBUlRFUlNdCitjaGFyIFx4QkYJKCAyICAgNiA4KSAgIyBCRiDioqIgwr8gW0lOVkVSVEVEIFFVRVNUSU9OIE1BUktdCitjaGFyIFx4QzAJKCAgICA1IDcgKSAgIyBDMCDioZAgw4AgW0xBVElOIENBUElUQUwgTEVUVEVSIEEgV0lUSCBHUkFWRV0KK2NoYXIgXHhDMQkoIDIgICAgNyApICAjIEMxIOKhgiDDgSBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgQSBXSVRIIEFDVVRFXQorY2hhciBceEMyCSgxICAgIDY3ICkgICMgQzIg4qGhIMOCIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBBIFdJVEggQ0lSQ1VNRkxFWF0KK2NoYXIgXHhDMwkoMSAgNCA2NyApICAjIEMzIOKhqSDDgyBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgQSBXSVRIIFRJTERFXQorY2hhciBceEM0CSggICAgNTY3ICkgICMgQzQg4qGwIMOEIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBBIFdJVEggRElBRVJFU0lTXQorY2hhciBceEM1CSgxICAgIDY3OCkgICMgQzUg4qOhIMOFIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBBIFdJVEggUklORyBBQk9WRV0KK2NoYXIgXHhDNgkoICAzNDUgNzgpICAjIEM2IOKjnCDDhiBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgQUVdCitjaGFyIFx4QzcJKDEyMzQgNjcgKSAgIyBDNyDioa8gw4cgW0xBVElOIENBUElUQUwgTEVUVEVSIEMgV0lUSCBDRURJTExBXQorY2hhciBceEM4CSggICA0IDY3ICkgICMgQzgg4qGoIMOIIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBFIFdJVEggR1JBVkVdCitjaGFyIFx4QzkJKCAyICAgNjc4KSAgIyBDOSDio6Igw4kgW0xBVElOIENBUElUQUwgTEVUVEVSIEUgV0lUSCBBQ1VURV0KK2NoYXIgXHhDQQkoMSAgIDU2NyApICAjIENBIOKhsSDDiiBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgRSBXSVRIIENJUkNVTUZMRVhdCitjaGFyIFx4Q0IJKDEyIDQgNjcgKSAgIyBDQiDioasgw4sgW0xBVElOIENBUElUQUwgTEVUVEVSIEUgV0lUSCBESUFFUkVTSVNdCitjaGFyIFx4Q0MJKCAyMyAgIDcgKSAgIyBDQyDioYYgw4wgW0xBVElOIENBUElUQUwgTEVUVEVSIEkgV0lUSCBHUkFWRV0KK2NoYXIgXHhDRAkoIDIzICAgNzgpICAjIENEIOKjhiDDjSBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgSSBXSVRIIEFDVVRFXQorY2hhciBceENFCSggICA0NSA3ICkgICMgQ0Ug4qGYIMOOIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBJIFdJVEggQ0lSQ1VNRkxFWF0KK2NoYXIgXHhDRgkoICAzIDUgNyApICAjIENGIOKhlCDDjyBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgSSBXSVRIIERJQUVSRVNJU10KK2NoYXIgXHhEMAkoIDIgIDU2NyApICAjIEQwIOKhsiDDkCBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgRVRIXQorY2hhciBceEQxCSgxMiA0NTY3ICkgICMgRDEg4qG7IMORIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBOIFdJVEggVElMREVdCitjaGFyIFx4RDIJKCAyICAgNjcgKSAgIyBEMiDioaIgw5IgW0xBVElOIENBUElUQUwgTEVUVEVSIE8gV0lUSCBHUkFWRV0KK2NoYXIgXHhEMwkoMTIgICA2NyApICAjIEQzIOKhoyDDkyBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgTyBXSVRIIEFDVVRFXQorY2hhciBceEQ0CSgxICA0NTY3ICkgICMgRDQg4qG5IMOUIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBPIFdJVEggQ0lSQ1VNRkxFWF0KK2NoYXIgXHhENQkoIDIzIDUgNyApICAjIEQ1IOKhliDDlSBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgTyBXSVRIIFRJTERFXQorY2hhciBceEQ2CSggMiA0IDY3ICkgICMgRDYg4qGqIMOWIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBPIFdJVEggRElBRVJFU0lTXQorY2hhciBceEQ3CSgxMiAgNSAgOCkgICMgRDcg4qKTIMOXIFtNVUxUSVBMSUNBVElPTiBTSUdOXQorY2hhciBceEQ4CSggMiA0IDY3OCkgICMgRDgg4qOqIMOYIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBPIFdJVEggU1RST0tFXQorY2hhciBceEQ5CSgxMiAgNTY3OCkgICMgRDkg4qOzIMOZIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBVIFdJVEggR1JBVkVdCitjaGFyIFx4REEJKCAyICAgIDc4KSAgIyBEQSDio4Igw5ogW0xBVElOIENBUElUQUwgTEVUVEVSIFUgV0lUSCBBQ1VURV0KK2NoYXIgXHhEQgkoICAzNCA2NyApICAjIERCIOKhrCDDmyBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgVSBXSVRIIENJUkNVTUZMRVhdCitjaGFyIFx4REMJKDEyICA1NjcgKSAgIyBEQyDiobMgw5wgW0xBVElOIENBUElUQUwgTEVUVEVSIFUgV0lUSCBESUFFUkVTSVNdCitjaGFyIFx4REQJKCAyICA1Njc4KSAgIyBERCDio7Igw50gW0xBVElOIENBUElUQUwgTEVUVEVSIFkgV0lUSCBBQ1VURV0KK2NoYXIgXHhERQkoIDIzNDUgIDgpICAjIERFIOKiniDDniBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgVEhPUk5dCitjaGFyIFx4REYJKCAyMzQgICA4KSAgIyBERiDioo4gw58gW0xBVElOIFNNQUxMIExFVFRFUiBTSEFSUCBTXQorY2hhciBceEUwCSgxMjMgNTYgOCkgICMgRTAg4qK3IMOgIFtMQVRJTiBTTUFMTCBMRVRURVIgQSBXSVRIIEdSQVZFXQorY2hhciBceEUxCSggMiAgICAgOCkgICMgRTEg4qKCIMOhIFtMQVRJTiBTTUFMTCBMRVRURVIgQSBXSVRIIEFDVVRFXQorY2hhciBceEUyCSgxIDMgICAgOCkgICMgRTIg4qKFIMOiIFtMQVRJTiBTTUFMTCBMRVRURVIgQSBXSVRIIENJUkNVTUZMRVhdCitjaGFyIFx4RTMJKDEgIDQgNiA4KSAgIyBFMyDioqkgw6MgW0xBVElOIFNNQUxMIExFVFRFUiBBIFdJVEggVElMREVdCitjaGFyIFx4RTQJKDEgICAgICA4KSAgIyBFNCDiooEgw6QgW0xBVElOIFNNQUxMIExFVFRFUiBBIFdJVEggRElBRVJFU0lTXQorY2hhciBceEU1CSgxICAgIDYgOCkgICMgRTUg4qKhIMOlIFtMQVRJTiBTTUFMTCBMRVRURVIgQSBXSVRIIFJJTkcgQUJPVkVdCitjaGFyIFx4RTYJKCAgMzQ1ICA4KSAgIyBFNiDiopwgw6YgW0xBVElOIFNNQUxMIExFVFRFUiBBRV0KK2NoYXIgXHhFNwkoMTIzNCA2IDgpICAjIEU3IOKiryDDpyBbTEFUSU4gU01BTEwgTEVUVEVSIEMgV0lUSCBDRURJTExBXQorY2hhciBceEU4CSggICA0IDYgOCkgICMgRTgg4qKoIMOoIFtMQVRJTiBTTUFMTCBMRVRURVIgRSBXSVRIIEdSQVZFXQorY2hhciBceEU5CSgxICAgNSAgOCkgICMgRTkg4qKRIMOpIFtMQVRJTiBTTUFMTCBMRVRURVIgRSBXSVRIIEFDVVRFXQorY2hhciBceEVBCSgxICAgNTYgOCkgICMgRUEg4qKxIMOqIFtMQVRJTiBTTUFMTCBMRVRURVIgRSBXSVRIIENJUkNVTUZMRVhdCitjaGFyIFx4RUIJKDEyIDQgNiA4KSAgIyBFQiDioqsgw6sgW0xBVElOIFNNQUxMIExFVFRFUiBFIFdJVEggRElBRVJFU0lTXQorY2hhciBceEVDCSggMjMgICAgOCkgICMgRUMg4qKGIMOsIFtMQVRJTiBTTUFMTCBMRVRURVIgSSBXSVRIIEdSQVZFXQorY2hhciBceEVECSgxMiAgICAgOCkgICMgRUQg4qKDIMOtIFtMQVRJTiBTTUFMTCBMRVRURVIgSSBXSVRIIEFDVVRFXQorY2hhciBceEVFCSggICA0NSAgOCkgICMgRUUg4qKYIMOuIFtMQVRJTiBTTUFMTCBMRVRURVIgSSBXSVRIIENJUkNVTUZMRVhdCitjaGFyIFx4RUYJKCAyIDQgICA4KSAgIyBFRiDiooogw68gW0xBVElOIFNNQUxMIExFVFRFUiBJIFdJVEggRElBRVJFU0lTXQorY2hhciBceEYwCSggMiAgNTYgOCkgICMgRjAg4qKyIMOwIFtMQVRJTiBTTUFMTCBMRVRURVIgRVRIXQorY2hhciBceEYxCSgxMiA0NTYgOCkgICMgRjEg4qK7IMOxIFtMQVRJTiBTTUFMTCBMRVRURVIgTiBXSVRIIFRJTERFXQorY2hhciBceEYyCSgxIDMgNSAgOCkgICMgRjIg4qKVIMOyIFtMQVRJTiBTTUFMTCBMRVRURVIgTyBXSVRIIEdSQVZFXQorY2hhciBceEYzCSgxMiAgIDYgOCkgICMgRjMg4qKjIMOzIFtMQVRJTiBTTUFMTCBMRVRURVIgTyBXSVRIIEFDVVRFXQorY2hhciBceEY0CSgxICA0NTYgOCkgICMgRjQg4qK5IMO0IFtMQVRJTiBTTUFMTCBMRVRURVIgTyBXSVRIIENJUkNVTUZMRVhdCitjaGFyIFx4RjUJKCAyMyA1ICA4KSAgIyBGNSDiopYgw7UgW0xBVElOIFNNQUxMIExFVFRFUiBPIFdJVEggVElMREVdCitjaGFyIFx4RjYJKCAgMyA1ICA4KSAgIyBGNiDiopQgw7YgW0xBVElOIFNNQUxMIExFVFRFUiBPIFdJVEggRElBRVJFU0lTXQorY2hhciBceEY3CSggMiA0NSAgOCkgICMgRjcg4qKaIMO3IFtESVZJU0lPTiBTSUdOXQorY2hhciBceEY4CSggMiA0IDYgOCkgICMgRjgg4qKqIMO4IFtMQVRJTiBTTUFMTCBMRVRURVIgTyBXSVRIIFNUUk9LRV0KK2NoYXIgXHhGOQkoIDIzICA2IDgpICAjIEY5IOKipiDDuSBbTEFUSU4gU01BTEwgTEVUVEVSIFUgV0lUSCBHUkFWRV0KK2NoYXIgXHhGQQkoMSAzICA2IDgpICAjIEZBIOKipSDDuiBbTEFUSU4gU01BTEwgTEVUVEVSIFUgV0lUSCBBQ1VURV0KK2NoYXIgXHhGQgkoICAzNCA2IDgpICAjIEZCIOKirCDDuyBbTEFUSU4gU01BTEwgTEVUVEVSIFUgV0lUSCBDSVJDVU1GTEVYXQorY2hhciBceEZDCSgxMiAgNTYgOCkgICMgRkMg4qKzIMO8IFtMQVRJTiBTTUFMTCBMRVRURVIgVSBXSVRIIERJQUVSRVNJU10KK2NoYXIgXHhGRAkoMSAzNDU2IDgpICAjIEZEIOKivSDDvSBbTEFUSU4gU01BTEwgTEVUVEVSIFkgV0lUSCBBQ1VURV0KK2NoYXIgXHhGRQkoICAzIDU2NyApICAjIEZFIOKhtCDDviBbTEFUSU4gU01BTEwgTEVUVEVSIFRIT1JOXQorY2hhciBceEZGCSggMjM0NTYgOCkgICMgRkYg4qK+IMO/IFtMQVRJTiBTTUFMTCBMRVRURVIgWSBXSVRIIERJQUVSRVNJU10KKworaW5jbHVkZSBjb21tb24udHRpCmRpZmYgLS1naXQgYS9UYWJsZXMvVGV4dC9uby1vdXAudHRiIGIvVGFibGVzL1RleHQvbm8tb3VwLnR0YgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xODRhNTNiCi0tLSAvZGV2L251bGwKKysrIGIvVGFibGVzL1RleHQvbm8tb3VwLnR0YgpAQCAtMCwwICsxLDIwNiBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorIyAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyMKKyMgQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorIworIyBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorIworIyBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisjIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyMgbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisjCisjIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMgQlJMVFRZIFRleHQgVGFibGUgLSBOb3J3ZWdpYW4gKE9mZmVudGxpZyB1dHZhbGcgZm9yIHB1bmt0c2tyaWZ0LCBPVVApCisjIGJhc2VkIG9uIHRoZSBPZmZlbnRsaWcgdXR2YWxnIGZvciBwdW5rdHNrcmlmdCAoUHVibGljIENvbW1pc3Npb24gZm9yCisjIEJyYWlsbGUpIHRyYW5zbGF0aW9uIHRhYmxlIGZvciBXaW5kb3dzIDEyNTIuCisjIFVwZGF0ZWQgSmFudWFyeSAyMDA4LgorCisjIHRoZSBzdGFuZGFyZCByZXByZXNlbnRhdGlvbnMgZm9yIHRoZSBsZXR0ZXJzIG9mIHRoZSBMYXRpbiBhbHBoYWJldAoraW5jbHVkZSBsdHItbGF0aW4udHRpCisKKyMgdGhlIHN0YW5kYXJkIHJlcHJlc2VudGF0aW9ucyBmb3IgdGhlIExhdGluIGNvbnRyb2wgY2hhcmFjdGVycworaW5jbHVkZSBjdGwtbGF0aW4udHRpCisKKyMgdGhlIG51bWJlcnMgMC05IGFyZSByZXByZXNlbnRlZCBieSB0aGUgbGV0dGVycyBqLGEtaSB3aXRoIGRvdCA4IGFkZGVkCitpbmNsdWRlIG51bS1kb3Q4LnR0aQorCisjIGdlbmVyYXRlZCBieSB0dGJ0ZXN0OiBjaGFyc2V0PWlzby04ODU5LTEKK2NoYXIgXHgwMAkoICAgNDUgNzgpICAjIDAwIOKjmCAgIFtOVUxMXQorIyBMYXRpbiBjb250cm9sIGNoYXJhY3RlcnMgICMgMDEtMUEKK2NoYXIgXHgxQgkoMTIzNCAgIDgpICAjIDFCIOKijyAgIFtFU0NBUEVdCitjaGFyIFx4MUMJKDEyMzQ1ICA4KSAgIyAxQyDiop8gICBbSU5GT1JNQVRJT04gU0VQQVJBVE9SIEZPVVJdCitjaGFyIFx4MUQJKDEgMyAgNiA4KSAgIyAxRCDioqUgICBbSU5GT1JNQVRJT04gU0VQQVJBVE9SIFRIUkVFXQorY2hhciBceDFFCSggMiA0NTYgOCkgICMgMUUg4qK6ICAgW0lORk9STUFUSU9OIFNFUEFSQVRPUiBUV09dCitjaGFyIFx4MUYJKDEgMyA1NiA4KSAgIyAxRiDiorUgICBbSU5GT1JNQVRJT04gU0VQQVJBVE9SIE9ORV0KK2NoYXIgXHgyMAkoICAgICAgICApICAjIDIwIOKggCAgIFtTUEFDRV0KK2NoYXIgXHgyMQkoIDIzIDUgICApICAjIDIxIOKgliAhIFtFWENMQU1BVElPTiBNQVJLXQorY2hhciBceDIyCSggMiAgNTYgICkgICMgMjIg4qCyICIgW1FVT1RBVElPTiBNQVJLXQorY2hhciBceDIzCSggIDM0NTYgICkgICMgMjMg4qC8ICMgW05VTUJFUiBTSUdOXQorY2hhciBceDI0CSggMiAgNTY3OCkgICMgMjQg4qOyICQgW0RPTExBUiBTSUdOXQorY2hhciBceDI1CSggICA0IDYgICkgICMgMjUg4qCoICUgW1BFUkNFTlQgU0lHTl0KK2NoYXIgXHgyNgkoICAgIDUgNzgpICAjIDI2IOKjkCAmIFtBTVBFUlNBTkRdCitjaGFyIFx4MjcJKCAgICA1ICAgKSAgIyAyNyDioJAgJyBbQVBPU1RST1BIRV0KK2NoYXIgXHgyOAkoIDIzICA2ICApICAjIDI4IOKgpiAoIFtMRUZUIFBBUkVOVEhFU0lTXQorY2hhciBceDI5CSggIDMgNTYgICkgICMgMjkg4qC0ICkgW1JJR0hUIFBBUkVOVEhFU0lTXQorY2hhciBceDJBCSggIDMgNSAgICkgICMgMkEg4qCUICogW0FTVEVSSVNLXQorY2hhciBceDJCCSggMjMgNSA3ICkgICMgMkIg4qGWICsgW1BMVVMgU0lHTl0KK2NoYXIgXHgyQwkoIDIgICAgICApICAjIDJDIOKggiAsIFtDT01NQV0KK2NoYXIgXHgyRAkoICAzICA2ICApICAjIDJEIOKgpCAtIFtIWVBIRU4tTUlOVVNdCitjaGFyIFx4MkUJKCAgMyAgICAgKSAgIyAyRSDioIQgLiBbRlVMTCBTVE9QXQorY2hhciBceDJGCSggICAgNSA3ICkgICMgMkYg4qGQIC8gW1NPTElEVVNdCisjIEhpbmR1LUFyYWJpYyBudW1lcmFscyAgICAgIyAzMC0zOQorY2hhciBceDNBCSggMiAgNSAgICkgICMgM0Eg4qCSIDogW0NPTE9OXQorY2hhciBceDNCCSggMjMgICAgICkgICMgM0Ig4qCGIDsgW1NFTUlDT0xPTl0KK2NoYXIgXHgzQwkoICAzIDUgIDgpICAjIDNDIOKilCA8IFtMRVNTLVRIQU4gU0lHTl0KK2NoYXIgXHgzRAkoIDIzIDU2ICApICAjIDNEIOKgtiA9IFtFUVVBTFMgU0lHTl0KK2NoYXIgXHgzRQkoIDIgICA2NyApICAjIDNFIOKhoiA+IFtHUkVBVEVSLVRIQU4gU0lHTl0KK2NoYXIgXHgzRgkoIDIgICA2ICApICAjIDNGIOKgoiA/IFtRVUVTVElPTiBNQVJLXQorY2hhciBceDQwCSggICA0ICAgICkgICMgNDAg4qCIIEAgW0NPTU1FUkNJQUwgQVRdCisjIHVwcGVyY2FzZSBMYXRpbiBhbHBoYWJldCAgIyA0MS01QQorY2hhciBceDVCCSggMjMgIDY3OCkgICMgNUIg4qOmIFsgW0xFRlQgU1FVQVJFIEJSQUNLRVRdCitjaGFyIFx4NUMJKCAyICAgICA4KSAgIyA1QyDiooIgXCBbUkVWRVJTRSBTT0xJRFVTXQorY2hhciBceDVECSggIDMgNTY3OCkgICMgNUQg4qO0IF0gW1JJR0hUIFNRVUFSRSBCUkFDS0VUXQorY2hhciBceDVFCSggICAgNSAgOCkgICMgNUUg4qKQIF4gW0NJUkNVTUZMRVggQUNDRU5UXQorY2hhciBceDVGCSggICA0NTYgICkgICMgNUYg4qC4IF8gW0xPVyBMSU5FXQorY2hhciBceDYwCSggICA0NSAgICkgICMgNjAg4qCYIGAgW0dSQVZFIEFDQ0VOVF0KKyMgbG93ZXJjYXNlIExhdGluIGFscGhhYmV0ICAjIDYxLTdBCitjaGFyIFx4N0IJKCAyMyAgICA4KSAgIyA3QiDiooYgeyBbTEVGVCBDVVJMWSBCUkFDS0VUXQorY2hhciBceDdDCSggICAgNTYgICkgICMgN0Mg4qCwIHwgW1ZFUlRJQ0FMIExJTkVdCitjaGFyIFx4N0QJKCAgICA1NjcgKSAgIyA3RCDiobAgfSBbUklHSFQgQ1VSTFkgQlJBQ0tFVF0KK2NoYXIgXHg3RQkoICAzICAgIDgpICAjIDdFIOKihCB+IFtUSUxERV0KK2NoYXIgXHg3RgkoICAzIDUgNzgpICAjIDdGIOKjlCAgIFtERUxFVEVdCitjaGFyIFx4ODAJKCAyICAgNjc4KSAgIyA4MCDio6IgICBbPGNvbnRyb2wtMDA4MD5dCitjaGFyIFx4ODEJKDEgMzQ1ICA4KSAgIyA4MSDiop0gICBbPGNvbnRyb2wtMDA4MT5dCitjaGFyIFx4ODIJKCAgICAgNjcgKSAgIyA4MiDioaAgICBbQlJFQUsgUEVSTUlUVEVEIEhFUkVdCitjaGFyIFx4ODMJKCAgIDQ1Njc4KSAgIyA4MyDio7ggICBbTk8gQlJFQUsgSEVSRV0KK2NoYXIgXHg4NAkoICAzIDU2NyApICAjIDg0IOKhtCAgIFs8Y29udHJvbC0wMDg0Pl0KK2NoYXIgXHg4NQkoICAzICAgNyApICAjIDg1IOKhhCAgIFtORVhUIExJTkUgKE5FTCldCitjaGFyIFx4ODYJKCAgIDQgIDcgKSAgIyA4NiDioYggICBbU1RBUlQgT0YgU0VMRUNURUQgQVJFQV0KK2NoYXIgXHg4NwkoICAgNDUgNyApICAjIDg3IOKhmCAgIFtFTkQgT0YgU0VMRUNURUQgQVJFQV0KK2NoYXIgXHg4OAkoICAgNCA2IDgpICAjIDg4IOKiqCAgIFtDSEFSQUNURVIgVEFCVUxBVElPTiBTRVRdCitjaGFyIFx4ODkJKCAgIDQ1NiA4KSAgIyA4OSDiorggICBbQ0hBUkFDVEVSIFRBQlVMQVRJT04gV0lUSCBKVVNUSUZJQ0FUSU9OXQorY2hhciBceDhBCSgxICAgNTY3OCkgICMgOEEg4qOxICAgW0xJTkUgVEFCVUxBVElPTiBTRVRdCitjaGFyIFx4OEIJKCAgMyAgIDc4KSAgIyA4QiDio4QgICBbUEFSVElBTCBMSU5FIEZPUldBUkRdCitjaGFyIFx4OEMJKDEyMzQ1Njc4KSAgIyA4QyDio78gICBbUEFSVElBTCBMSU5FIEJBQ0tXQVJEXQorY2hhciBceDhECSggICA0ICA3OCkgICMgOEQg4qOIICAgW1JFVkVSU0UgTElORSBGRUVEXQorY2hhciBceDhFCSggMjM0IDY3OCkgICMgOEUg4qOuICAgW1NJTkdMRSBTSElGVCBUV09dCitjaGFyIFx4OEYJKCAyMyAgNjcgKSAgIyA4RiDioaYgICBbU0lOR0xFIFNISUZUIFRIUkVFXQorY2hhciBceDkwCSggMjMgIDYgOCkgICMgOTAg4qKmICAgW0RFVklDRSBDT05UUk9MIFNUUklOR10KK2NoYXIgXHg5MQkoICAzICA2NyApICAjIDkxIOKhpCAgIFtQUklWQVRFIFVTRSBPTkVdCitjaGFyIFx4OTIJKCAgMyAgNiA4KSAgIyA5MiDioqQgICBbUFJJVkFURSBVU0UgVFdPXQorY2hhciBceDkzCSggMjMgNTY3ICkgICMgOTMg4qG2ICAgW1NFVCBUUkFOU01JVCBTVEFURV0KK2NoYXIgXHg5NAkoIDIzIDU2IDgpICAjIDk0IOKitiAgIFtDQU5DRUwgQ0hBUkFDVEVSXQorY2hhciBceDk1CSggIDMgIDY3OCkgICMgOTUg4qOkICAgW01FU1NBR0UgV0FJVElOR10KK2NoYXIgXHg5NgkoICAgICA2IDgpICAjIDk2IOKioCAgIFtTVEFSVCBPRiBHVUFSREVEIEFSRUFdCitjaGFyIFx4OTcJKCAgICA1NiA4KSAgIyA5NyDiorAgICBbRU5EIE9GIEdVQVJERUQgQVJFQV0KK2NoYXIgXHg5OAkoIDIgIDU2IDgpICAjIDk4IOKisiAgIFtTVEFSVCBPRiBTVFJJTkddCitjaGFyIFx4OTkJKCAyMzQ1ICA4KSAgIyA5OSDiop4gICBbPGNvbnRyb2wtMDA5OT5dCitjaGFyIFx4OUEJKDEgICA1NiA4KSAgIyA5QSDiorEgICBbU0lOR0xFIENIQVJBQ1RFUiBJTlRST0RVQ0VSXQorY2hhciBceDlCCSggICAgIDY3OCkgICMgOUIg4qOgICAgW0NPTlRST0wgU0VRVUVOQ0UgSU5UUk9EVUNFUl0KK2NoYXIgXHg5QwkoMTIzNDU2IDgpICAjIDlDIOKivyAgIFtTVFJJTkcgVEVSTUlOQVRPUl0KK2NoYXIgXHg5RAkoIDIzIDU2NzgpICAjIDlEIOKjtiAgIFtPUEVSQVRJTkcgU1lTVEVNIENPTU1BTkRdCitjaGFyIFx4OUUJKCAyMzQgNiA4KSAgIyA5RSDioq4gICBbUFJJVkFDWSBNRVNTQUdFXQorY2hhciBceDlGCSgxMiAgNTY3OCkgICMgOUYg4qOzICAgW0FQUExJQ0FUSU9OIFBST0dSQU0gQ09NTUFORF0KK2NoYXIgXHhBMQkoIDIzIDUgIDgpICAjIEExIOKiliDCoSBbSU5WRVJURUQgRVhDTEFNQVRJT04gTUFSS10KK2NoYXIgXHhBMgkoIDIgIDUgNzgpICAjIEEyIOKjkiDCoiBbQ0VOVCBTSUdOXQorY2hhciBceEEzCSgxMjMgICAgOCkgICMgQTMg4qKHIMKjIFtQT1VORCBTSUdOXQorY2hhciBceEE0CSgxMjMgIDYgOCkgICMgQTQg4qKnIMKkIFtDVVJSRU5DWSBTSUdOXQorY2hhciBceEE1CSgxIDM0NTYgOCkgICMgQTUg4qK9IMKlIFtZRU4gU0lHTl0KK2NoYXIgXHhBNgkoICAgNDU2NyApICAjIEE2IOKhuCDCpiBbQlJPS0VOIEJBUl0KK2NoYXIgXHhBNwkoICAgNCA2NzgpICAjIEE3IOKjqCDCpyBbU0VDVElPTiBTSUdOXQorY2hhciBceEE4CSggMiAgNSAgOCkgICMgQTgg4qKSIMKoIFtESUFFUkVTSVNdCitjaGFyIFx4QTkJKDEgMyAgICA4KSAgIyBBOSDiooUgwqkgW0NPUFlSSUdIVCBTSUdOXQorY2hhciBceEFBCSggMiAgICA3OCkgICMgQUEg4qOCIMKqIFtGRU1JTklORSBPUkRJTkFMIElORElDQVRPUl0KK2NoYXIgXHhBQgkoIDIzICAgNzgpICAjIEFCIOKjhiDCqyBbTEVGVC1QT0lOVElORyBET1VCTEUgQU5HTEUgUVVPVEFUSU9OIE1BUktdCitjaGFyIFx4QUMJKCAgMyA1IDcgKSAgIyBBQyDioZQgwqwgW05PVCBTSUdOXQorY2hhciBceEFECSggICAgICA3OCkgICMgQUQg4qOAIMKtIFtTT0ZUIEhZUEhFTl0KK2NoYXIgXHhBRQkoMTIzIDUgIDgpICAjIEFFIOKilyDCriBbUkVHSVNURVJFRCBTSUdOXQorY2hhciBceEFGCSggICA0NSAgOCkgICMgQUYg4qKYIMKvIFtNQUNST05dCitjaGFyIFx4QjAJKCAgMyA1NiA4KSAgIyBCMCDiorQgwrAgW0RFR1JFRSBTSUdOXQorY2hhciBceEIxCSggMjMgNSA3OCkgICMgQjEg4qOWIMKxIFtQTFVTLU1JTlVTIFNJR05dCitjaGFyIFx4QjIJKCAyMyAgIDcgKSAgIyBCMiDioYYgwrIgW1NVUEVSU0NSSVBUIFRXT10KK2NoYXIgXHhCMwkoIDIgIDUgNyApICAjIEIzIOKhkiDCsyBbU1VQRVJTQ1JJUFQgVEhSRUVdCitjaGFyIFx4QjQJKCAgICAgNiAgKSAgIyBCNCDioKAgwrQgW0FDVVRFIEFDQ0VOVF0KK2NoYXIgXHhCNQkoMSAzNCAgIDgpICAjIEI1IOKijSDCtSBbTUlDUk8gU0lHTl0KK2NoYXIgXHhCNgkoICAgNCA2NyApICAjIEI2IOKhqCDCtiBbUElMQ1JPVyBTSUdOXQorY2hhciBceEI3CSggICAgICA3ICkgICMgQjcg4qGAIMK3IFtNSURETEUgRE9UXQorY2hhciBceEI4CSggICA0ICAgOCkgICMgQjgg4qKIIMK4IFtDRURJTExBXQorY2hhciBceEI5CSggMiAgICA3ICkgICMgQjkg4qGCIMK5IFtTVVBFUlNDUklQVCBPTkVdCitjaGFyIFx4QkEJKDEgMyA1ICA4KSAgIyBCQSDiopUgwrogW01BU0NVTElORSBPUkRJTkFMIElORElDQVRPUl0KK2NoYXIgXHhCQgkoICAgIDU2NzgpICAjIEJCIOKjsCDCuyBbUklHSFQtUE9JTlRJTkcgRE9VQkxFIEFOR0xFIFFVT1RBVElPTiBNQVJLXQorY2hhciBceEJDCSggIDM0NTYgOCkgICMgQkMg4qK8IMK8IFtWVUxHQVIgRlJBQ1RJT04gT05FIFFVQVJURVJdCitjaGFyIFx4QkQJKCAgMzQ1NjcgKSAgIyBCRCDiobwgwr0gW1ZVTEdBUiBGUkFDVElPTiBPTkUgSEFMRl0KK2NoYXIgXHhCRQkoICAzNDU2NzgpICAjIEJFIOKjvCDCviBbVlVMR0FSIEZSQUNUSU9OIFRIUkVFIFFVQVJURVJTXQorY2hhciBceEJGCSggMiAgIDYgOCkgICMgQkYg4qKiIMK/IFtJTlZFUlRFRCBRVUVTVElPTiBNQVJLXQorY2hhciBceEMwCSgxMjMgNTY3OCkgICMgQzAg4qO3IMOAIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBBIFdJVEggR1JBVkVdCitjaGFyIFx4QzEJKDEyMyA1NjcgKSAgIyBDMSDiobcgw4EgW0xBVElOIENBUElUQUwgTEVUVEVSIEEgV0lUSCBBQ1VURV0KK2NoYXIgXHhDMgkoMSAgICA2NzgpICAjIEMyIOKjoSDDgiBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgQSBXSVRIIENJUkNVTUZMRVhdCitjaGFyIFx4QzMJKDEyICAgNjc4KSAgIyBDMyDio6Mgw4MgW0xBVElOIENBUElUQUwgTEVUVEVSIEEgV0lUSCBUSUxERV0KK2NoYXIgXHhDNAkoICAzNDUgNzgpICAjIEM0IOKjnCDDhCBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgQSBXSVRIIERJQUVSRVNJU10KK2NoYXIgXHhDNQkoMSAgICA2NyApICAjIEM1IOKhoSDDhSBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgQSBXSVRIIFJJTkcgQUJPVkVdCitjaGFyIFx4QzYJKCAgMzQ1IDcgKSAgIyBDNiDioZwgw4YgW0xBVElOIENBUElUQUwgTEVUVEVSIEFFXQorY2hhciBceEM3CSgxMjM0IDY3OCkgICMgQzcg4qOvIMOHIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBDIFdJVEggQ0VESUxMQV0KK2NoYXIgXHhDOAkoIDIzNCA2NyApICAjIEM4IOKhriDDiCBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgRSBXSVRIIEdSQVZFXQorY2hhciBceEM5CSgxMjM0NTY3ICkgICMgQzkg4qG/IMOJIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBFIFdJVEggQUNVVEVdCitjaGFyIFx4Q0EJKDEyICAgNjcgKSAgIyBDQSDioaMgw4ogW0xBVElOIENBUElUQUwgTEVUVEVSIEUgV0lUSCBDSVJDVU1GTEVYXQorY2hhciBceENCCSgxMiA0IDY3ICkgICMgQ0Ig4qGrIMOLIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBFIFdJVEggRElBRVJFU0lTXQorY2hhciBceENDCSggIDM0ICA3OCkgICMgQ0Mg4qOMIMOMIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBJIFdJVEggR1JBVkVdCitjaGFyIFx4Q0QJKCAgMzQgIDcgKSAgIyBDRCDioYwgw40gW0xBVElOIENBUElUQUwgTEVUVEVSIEkgV0lUSCBBQ1VURV0KK2NoYXIgXHhDRQkoMSAgNCA2NyApICAjIENFIOKhqSDDjiBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgSSBXSVRIIENJUkNVTUZMRVhdCitjaGFyIFx4Q0YJKDEyIDQ1NjcgKSAgIyBDRiDiobsgw48gW0xBVElOIENBUElUQUwgTEVUVEVSIEkgV0lUSCBESUFFUkVTSVNdCitjaGFyIFx4RDAJKDEgIDQ1Njc4KSAgIyBEMCDio7kgw5AgW0xBVElOIENBUElUQUwgTEVUVEVSIEVUSF0KK2NoYXIgXHhEMQkoMTIgNDU2NzgpICAjIEQxIOKjuyDDkSBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgTiBXSVRIIFRJTERFXQorY2hhciBceEQyCSggIDM0IDY3OCkgICMgRDIg4qOsIMOSIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBPIFdJVEggR1JBVkVdCitjaGFyIFx4RDMJKCAgMzQgNjcgKSAgIyBEMyDioawgw5MgW0xBVElOIENBUElUQUwgTEVUVEVSIE8gV0lUSCBBQ1VURV0KK2NoYXIgXHhENAkoMSAgNDU2NyApICAjIEQ0IOKhuSDDlCBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgTyBXSVRIIENJUkNVTUZMRVhdCitjaGFyIFx4RDUJKDEgIDQgNjc4KSAgIyBENSDio6kgw5UgW0xBVElOIENBUElUQUwgTEVUVEVSIE8gV0lUSCBUSUxERV0KK2NoYXIgXHhENgkoIDIgNCA2NzgpICAjIEQ2IOKjqiDDliBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgTyBXSVRIIERJQUVSRVNJU10KK2NoYXIgXHhENwkoMSAzNCA2IDgpICAjIEQ3IOKirSDDlyBbTVVMVElQTElDQVRJT04gU0lHTl0KK2NoYXIgXHhEOAkoIDIgNCA2NyApICAjIEQ4IOKhqiDDmCBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgTyBXSVRIIFNUUk9LRV0KK2NoYXIgXHhEOQkoIDIzNDU2NzgpICAjIEQ5IOKjviDDmSBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgVSBXSVRIIEdSQVZFXQorY2hhciBceERBCSggMjM0NTY3ICkgICMgREEg4qG+IMOaIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBVIFdJVEggQUNVVEVdCitjaGFyIFx4REIJKDEgICA1NjcgKSAgIyBEQiDiobEgw5sgW0xBVElOIENBUElUQUwgTEVUVEVSIFUgV0lUSCBDSVJDVU1GTEVYXQorY2hhciBceERDCSgxMiAgNTY3ICkgICMgREMg4qGzIMOcIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBVIFdJVEggRElBRVJFU0lTXQorY2hhciBceERECSgxMjM0IDY3ICkgICMgREQg4qGvIMOdIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBZIFdJVEggQUNVVEVdCitjaGFyIFx4REUJKDEyIDQgNjc4KSAgIyBERSDio6sgw54gW0xBVElOIENBUElUQUwgTEVUVEVSIFRIT1JOXQorY2hhciBceERGCSggMjM0ICAgOCkgICMgREYg4qKOIMOfIFtMQVRJTiBTTUFMTCBMRVRURVIgU0hBUlAgU10KK2NoYXIgXHhFMAkoMTIzIDU2IDgpICAjIEUwIOKityDDoCBbTEFUSU4gU01BTEwgTEVUVEVSIEEgV0lUSCBHUkFWRV0KK2NoYXIgXHhFMQkoMTIzIDU2ICApICAjIEUxIOKgtyDDoSBbTEFUSU4gU01BTEwgTEVUVEVSIEEgV0lUSCBBQ1VURV0KK2NoYXIgXHhFMgkoMSAgICA2IDgpICAjIEUyIOKioSDDoiBbTEFUSU4gU01BTEwgTEVUVEVSIEEgV0lUSCBDSVJDVU1GTEVYXQorY2hhciBceEUzCSgxMiAgIDYgOCkgICMgRTMg4qKjIMOjIFtMQVRJTiBTTUFMTCBMRVRURVIgQSBXSVRIIFRJTERFXQorY2hhciBceEU0CSggIDM0NSAgOCkgICMgRTQg4qKcIMOkIFtMQVRJTiBTTUFMTCBMRVRURVIgQSBXSVRIIERJQUVSRVNJU10KK2NoYXIgXHhFNQkoMSAgICA2ICApICAjIEU1IOKgoSDDpSBbTEFUSU4gU01BTEwgTEVUVEVSIEEgV0lUSCBSSU5HIEFCT1ZFXQorY2hhciBceEU2CSggIDM0NSAgICkgICMgRTYg4qCcIMOmIFtMQVRJTiBTTUFMTCBMRVRURVIgQUVdCitjaGFyIFx4RTcJKDEyMzQgNiA4KSAgIyBFNyDioq8gw6cgW0xBVElOIFNNQUxMIExFVFRFUiBDIFdJVEggQ0VESUxMQV0KK2NoYXIgXHhFOAkoIDIzNCA2ICApICAjIEU4IOKgriDDqCBbTEFUSU4gU01BTEwgTEVUVEVSIEUgV0lUSCBHUkFWRV0KK2NoYXIgXHhFOQkoMTIzNDU2ICApICAjIEU5IOKgvyDDqSBbTEFUSU4gU01BTEwgTEVUVEVSIEUgV0lUSCBBQ1VURV0KK2NoYXIgXHhFQQkoMTIgICA2ICApICAjIEVBIOKgoyDDqiBbTEFUSU4gU01BTEwgTEVUVEVSIEUgV0lUSCBDSVJDVU1GTEVYXQorY2hhciBceEVCCSgxMiA0IDYgICkgICMgRUIg4qCrIMOrIFtMQVRJTiBTTUFMTCBMRVRURVIgRSBXSVRIIERJQUVSRVNJU10KK2NoYXIgXHhFQwkoICAzNCAgIDgpICAjIEVDIOKijCDDrCBbTEFUSU4gU01BTEwgTEVUVEVSIEkgV0lUSCBHUkFWRV0KK2NoYXIgXHhFRAkoICAzNCAgICApICAjIEVEIOKgjCDDrSBbTEFUSU4gU01BTEwgTEVUVEVSIEkgV0lUSCBBQ1VURV0KK2NoYXIgXHhFRQkoMSAgNCA2ICApICAjIEVFIOKgqSDDriBbTEFUSU4gU01BTEwgTEVUVEVSIEkgV0lUSCBDSVJDVU1GTEVYXQorY2hhciBceEVGCSgxMiA0NTYgICkgICMgRUYg4qC7IMOvIFtMQVRJTiBTTUFMTCBMRVRURVIgSSBXSVRIIERJQUVSRVNJU10KK2NoYXIgXHhGMAkoMSAgNDU2IDgpICAjIEYwIOKiuSDDsCBbTEFUSU4gU01BTEwgTEVUVEVSIEVUSF0KK2NoYXIgXHhGMQkoMTIgNDU2IDgpICAjIEYxIOKiuyDDsSBbTEFUSU4gU01BTEwgTEVUVEVSIE4gV0lUSCBUSUxERV0KK2NoYXIgXHhGMgkoICAzNCA2IDgpICAjIEYyIOKirCDDsiBbTEFUSU4gU01BTEwgTEVUVEVSIE8gV0lUSCBHUkFWRV0KK2NoYXIgXHhGMwkoICAzNCA2ICApICAjIEYzIOKgrCDDsyBbTEFUSU4gU01BTEwgTEVUVEVSIE8gV0lUSCBBQ1VURV0KK2NoYXIgXHhGNAkoMSAgNDU2ICApICAjIEY0IOKguSDDtCBbTEFUSU4gU01BTEwgTEVUVEVSIE8gV0lUSCBDSVJDVU1GTEVYXQorY2hhciBceEY1CSgxICA0IDYgOCkgICMgRjUg4qKpIMO1IFtMQVRJTiBTTUFMTCBMRVRURVIgTyBXSVRIIFRJTERFXQorY2hhciBceEY2CSggMiA0IDYgOCkgICMgRjYg4qKqIMO2IFtMQVRJTiBTTUFMTCBMRVRURVIgTyBXSVRIIERJQUVSRVNJU10KK2NoYXIgXHhGNwkoIDIgIDU2NyApICAjIEY3IOKhsiDDtyBbRElWSVNJT04gU0lHTl0KK2NoYXIgXHhGOAkoIDIgNCA2ICApICAjIEY4IOKgqiDDuCBbTEFUSU4gU01BTEwgTEVUVEVSIE8gV0lUSCBTVFJPS0VdCitjaGFyIFx4RjkJKCAyMzQ1NiA4KSAgIyBGOSDior4gw7kgW0xBVElOIFNNQUxMIExFVFRFUiBVIFdJVEggR1JBVkVdCitjaGFyIFx4RkEJKCAyMzQ1NiAgKSAgIyBGQSDioL4gw7ogW0xBVElOIFNNQUxMIExFVFRFUiBVIFdJVEggQUNVVEVdCitjaGFyIFx4RkIJKDEgICA1NiAgKSAgIyBGQiDioLEgw7sgW0xBVElOIFNNQUxMIExFVFRFUiBVIFdJVEggQ0lSQ1VNRkxFWF0KK2NoYXIgXHhGQwkoMTIgIDU2ICApICAjIEZDIOKgsyDDvCBbTEFUSU4gU01BTEwgTEVUVEVSIFUgV0lUSCBESUFFUkVTSVNdCitjaGFyIFx4RkQJKDEyMzQgNiAgKSAgIyBGRCDioK8gw70gW0xBVElOIFNNQUxMIExFVFRFUiBZIFdJVEggQUNVVEVdCitjaGFyIFx4RkUJKDEyIDQgNiA4KSAgIyBGRSDioqsgw74gW0xBVElOIFNNQUxMIExFVFRFUiBUSE9STl0KK2NoYXIgXHhGRgkoMTIgIDU2IDgpICAjIEZGIOKisyDDvyBbTEFUSU4gU01BTEwgTEVUVEVSIFkgV0lUSCBESUFFUkVTSVNdCisKK2luY2x1ZGUgY29tbW9uLnR0aQpkaWZmIC0tZ2l0IGEvVGFibGVzL1RleHQvbm8udHRiIGIvVGFibGVzL1RleHQvbm8udHRiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhiYzFiNDMKLS0tIC9kZXYvbnVsbAorKysgYi9UYWJsZXMvVGV4dC9uby50dGIKQEAgLTAsMCArMSwyMSBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorIyAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyMKKyMgQ29weXJpZ2h0IChDKSAyMDA4LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorIworIyBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorIworIyBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisjIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyMgbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisjCisjIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMgQlJMVFRZIFRleHQgVGFibGUgLSBOb3J3ZWdpYW4KKworaW5jbHVkZSBuby1vdXAudHRiCmRpZmYgLS1naXQgYS9UYWJsZXMvVGV4dC9udW0tYWxpYXMudHRpIGIvVGFibGVzL1RleHQvbnVtLWFsaWFzLnR0aQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOTFmYTRlCi0tLSAvZGV2L251bGwKKysrIGIvVGFibGVzL1RleHQvbnVtLWFsaWFzLnR0aQpAQCAtMCwwICsxLDk2IEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisjICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorIworIyBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisjCisjIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisjCisjIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyMgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorIyBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyMKKyMgV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworIworIyBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIyBUaGlzIEJSTFRUWSB0ZXh0IHN1YnRhYmxlIGRlZmluZXMgYWxpYXNlcyBmb3IgYWRkaXRpb25hbCBkZWRpbWFsIGRpZ2l0IHN0eWxlcy4KKworYWxpYXMJXHUyNDYwCVx4MzEJIyDikaAgW0NJUkNMRUQgRElHSVQgT05FXQorYWxpYXMJXHUyNDYxCVx4MzIJIyDikaEgW0NJUkNMRUQgRElHSVQgVFdPXQorYWxpYXMJXHUyNDYyCVx4MzMJIyDikaIgW0NJUkNMRUQgRElHSVQgVEhSRUVdCithbGlhcwlcdTI0NjMJXHgzNAkjIOKRoyBbQ0lSQ0xFRCBESUdJVCBGT1VSXQorYWxpYXMJXHUyNDY0CVx4MzUJIyDikaQgW0NJUkNMRUQgRElHSVQgRklWRV0KK2FsaWFzCVx1MjQ2NQlceDM2CSMg4pGlIFtDSVJDTEVEIERJR0lUIFNJWF0KK2FsaWFzCVx1MjQ2NglceDM3CSMg4pGmIFtDSVJDTEVEIERJR0lUIFNFVkVOXQorYWxpYXMJXHUyNDY3CVx4MzgJIyDikacgW0NJUkNMRUQgRElHSVQgRUlHSFRdCithbGlhcwlcdTI0NjgJXHgzOQkjIOKRqCBbQ0lSQ0xFRCBESUdJVCBOSU5FXQorYWxpYXMJXHUyNEVBCVx4MzAJIyDik6ogW0NJUkNMRUQgRElHSVQgWkVST10KKworYWxpYXMJXHVGRjEwCVx4MzAJIyDvvJAgW0ZVTExXSURUSCBESUdJVCBaRVJPXQorYWxpYXMJXHVGRjExCVx4MzEJIyDvvJEgW0ZVTExXSURUSCBESUdJVCBPTkVdCithbGlhcwlcdUZGMTIJXHgzMgkjIO+8kiBbRlVMTFdJRFRIIERJR0lUIFRXT10KK2FsaWFzCVx1RkYxMwlceDMzCSMg77yTIFtGVUxMV0lEVEggRElHSVQgVEhSRUVdCithbGlhcwlcdUZGMTQJXHgzNAkjIO+8lCBbRlVMTFdJRFRIIERJR0lUIEZPVVJdCithbGlhcwlcdUZGMTUJXHgzNQkjIO+8lSBbRlVMTFdJRFRIIERJR0lUIEZJVkVdCithbGlhcwlcdUZGMTYJXHgzNgkjIO+8liBbRlVMTFdJRFRIIERJR0lUIFNJWF0KK2FsaWFzCVx1RkYxNwlceDM3CSMg77yXIFtGVUxMV0lEVEggRElHSVQgU0VWRU5dCithbGlhcwlcdUZGMTgJXHgzOAkjIO+8mCBbRlVMTFdJRFRIIERJR0lUIEVJR0hUXQorYWxpYXMJXHVGRjE5CVx4MzkJIyDvvJkgW0ZVTExXSURUSCBESUdJVCBOSU5FXQorCithbGlhcwlcVTAwMDFEN0NFCVx4MzAJIyDwnZ+OIFtNQVRIRU1BVElDQUwgQk9MRCBESUdJVCBaRVJPXQorYWxpYXMJXFUwMDAxRDdDRglceDMxCSMg8J2fjyBbTUFUSEVNQVRJQ0FMIEJPTEQgRElHSVQgT05FXQorYWxpYXMJXFUwMDAxRDdEMAlceDMyCSMg8J2fkCBbTUFUSEVNQVRJQ0FMIEJPTEQgRElHSVQgVFdPXQorYWxpYXMJXFUwMDAxRDdEMQlceDMzCSMg8J2fkSBbTUFUSEVNQVRJQ0FMIEJPTEQgRElHSVQgVEhSRUVdCithbGlhcwlcVTAwMDFEN0QyCVx4MzQJIyDwnZ+SIFtNQVRIRU1BVElDQUwgQk9MRCBESUdJVCBGT1VSXQorYWxpYXMJXFUwMDAxRDdEMwlceDM1CSMg8J2fkyBbTUFUSEVNQVRJQ0FMIEJPTEQgRElHSVQgRklWRV0KK2FsaWFzCVxVMDAwMUQ3RDQJXHgzNgkjIPCdn5QgW01BVEhFTUFUSUNBTCBCT0xEIERJR0lUIFNJWF0KK2FsaWFzCVxVMDAwMUQ3RDUJXHgzNwkjIPCdn5UgW01BVEhFTUFUSUNBTCBCT0xEIERJR0lUIFNFVkVOXQorYWxpYXMJXFUwMDAxRDdENglceDM4CSMg8J2fliBbTUFUSEVNQVRJQ0FMIEJPTEQgRElHSVQgRUlHSFRdCithbGlhcwlcVTAwMDFEN0Q3CVx4MzkJIyDwnZ+XIFtNQVRIRU1BVElDQUwgQk9MRCBESUdJVCBOSU5FXQorCithbGlhcwlcVTAwMDFEN0Q4CVx4MzAJIyDwnZ+YIFtNQVRIRU1BVElDQUwgRE9VQkxFLVNUUlVDSyBESUdJVCBaRVJPXQorYWxpYXMJXFUwMDAxRDdEOQlceDMxCSMg8J2fmSBbTUFUSEVNQVRJQ0FMIERPVUJMRS1TVFJVQ0sgRElHSVQgT05FXQorYWxpYXMJXFUwMDAxRDdEQQlceDMyCSMg8J2fmiBbTUFUSEVNQVRJQ0FMIERPVUJMRS1TVFJVQ0sgRElHSVQgVFdPXQorYWxpYXMJXFUwMDAxRDdEQglceDMzCSMg8J2fmyBbTUFUSEVNQVRJQ0FMIERPVUJMRS1TVFJVQ0sgRElHSVQgVEhSRUVdCithbGlhcwlcVTAwMDFEN0RDCVx4MzQJIyDwnZ+cIFtNQVRIRU1BVElDQUwgRE9VQkxFLVNUUlVDSyBESUdJVCBGT1VSXQorYWxpYXMJXFUwMDAxRDdERAlceDM1CSMg8J2fnSBbTUFUSEVNQVRJQ0FMIERPVUJMRS1TVFJVQ0sgRElHSVQgRklWRV0KK2FsaWFzCVxVMDAwMUQ3REUJXHgzNgkjIPCdn54gW01BVEhFTUFUSUNBTCBET1VCTEUtU1RSVUNLIERJR0lUIFNJWF0KK2FsaWFzCVxVMDAwMUQ3REYJXHgzNwkjIPCdn58gW01BVEhFTUFUSUNBTCBET1VCTEUtU1RSVUNLIERJR0lUIFNFVkVOXQorYWxpYXMJXFUwMDAxRDdFMAlceDM4CSMg8J2foCBbTUFUSEVNQVRJQ0FMIERPVUJMRS1TVFJVQ0sgRElHSVQgRUlHSFRdCithbGlhcwlcVTAwMDFEN0UxCVx4MzkJIyDwnZ+hIFtNQVRIRU1BVElDQUwgRE9VQkxFLVNUUlVDSyBESUdJVCBOSU5FXQorCithbGlhcwlcVTAwMDFEN0UyCVx4MzAJIyDwnZ+iIFtNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBESUdJVCBaRVJPXQorYWxpYXMJXFUwMDAxRDdFMwlceDMxCSMg8J2foyBbTUFUSEVNQVRJQ0FMIFNBTlMtU0VSSUYgRElHSVQgT05FXQorYWxpYXMJXFUwMDAxRDdFNAlceDMyCSMg8J2fpCBbTUFUSEVNQVRJQ0FMIFNBTlMtU0VSSUYgRElHSVQgVFdPXQorYWxpYXMJXFUwMDAxRDdFNQlceDMzCSMg8J2fpSBbTUFUSEVNQVRJQ0FMIFNBTlMtU0VSSUYgRElHSVQgVEhSRUVdCithbGlhcwlcVTAwMDFEN0U2CVx4MzQJIyDwnZ+mIFtNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBESUdJVCBGT1VSXQorYWxpYXMJXFUwMDAxRDdFNwlceDM1CSMg8J2fpyBbTUFUSEVNQVRJQ0FMIFNBTlMtU0VSSUYgRElHSVQgRklWRV0KK2FsaWFzCVxVMDAwMUQ3RTgJXHgzNgkjIPCdn6ggW01BVEhFTUFUSUNBTCBTQU5TLVNFUklGIERJR0lUIFNJWF0KK2FsaWFzCVxVMDAwMUQ3RTkJXHgzNwkjIPCdn6kgW01BVEhFTUFUSUNBTCBTQU5TLVNFUklGIERJR0lUIFNFVkVOXQorYWxpYXMJXFUwMDAxRDdFQQlceDM4CSMg8J2fqiBbTUFUSEVNQVRJQ0FMIFNBTlMtU0VSSUYgRElHSVQgRUlHSFRdCithbGlhcwlcVTAwMDFEN0VCCVx4MzkJIyDwnZ+rIFtNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBESUdJVCBOSU5FXQorCithbGlhcwlcVTAwMDFEN0VDCVx4MzAJIyDwnZ+sIFtNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBCT0xEIERJR0lUIFpFUk9dCithbGlhcwlcVTAwMDFEN0VECVx4MzEJIyDwnZ+tIFtNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBCT0xEIERJR0lUIE9ORV0KK2FsaWFzCVxVMDAwMUQ3RUUJXHgzMgkjIPCdn64gW01BVEhFTUFUSUNBTCBTQU5TLVNFUklGIEJPTEQgRElHSVQgVFdPXQorYWxpYXMJXFUwMDAxRDdFRglceDMzCSMg8J2fryBbTUFUSEVNQVRJQ0FMIFNBTlMtU0VSSUYgQk9MRCBESUdJVCBUSFJFRV0KK2FsaWFzCVxVMDAwMUQ3RjAJXHgzNAkjIPCdn7AgW01BVEhFTUFUSUNBTCBTQU5TLVNFUklGIEJPTEQgRElHSVQgRk9VUl0KK2FsaWFzCVxVMDAwMUQ3RjEJXHgzNQkjIPCdn7EgW01BVEhFTUFUSUNBTCBTQU5TLVNFUklGIEJPTEQgRElHSVQgRklWRV0KK2FsaWFzCVxVMDAwMUQ3RjIJXHgzNgkjIPCdn7IgW01BVEhFTUFUSUNBTCBTQU5TLVNFUklGIEJPTEQgRElHSVQgU0lYXQorYWxpYXMJXFUwMDAxRDdGMwlceDM3CSMg8J2fsyBbTUFUSEVNQVRJQ0FMIFNBTlMtU0VSSUYgQk9MRCBESUdJVCBTRVZFTl0KK2FsaWFzCVxVMDAwMUQ3RjQJXHgzOAkjIPCdn7QgW01BVEhFTUFUSUNBTCBTQU5TLVNFUklGIEJPTEQgRElHSVQgRUlHSFRdCithbGlhcwlcVTAwMDFEN0Y1CVx4MzkJIyDwnZ+1IFtNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBCT0xEIERJR0lUIE5JTkVdCisKK2FsaWFzCVxVMDAwMUQ3RjYJXHgzMAkjIPCdn7YgW01BVEhFTUFUSUNBTCBNT05PU1BBQ0UgRElHSVQgWkVST10KK2FsaWFzCVxVMDAwMUQ3RjcJXHgzMQkjIPCdn7cgW01BVEhFTUFUSUNBTCBNT05PU1BBQ0UgRElHSVQgT05FXQorYWxpYXMJXFUwMDAxRDdGOAlceDMyCSMg8J2fuCBbTUFUSEVNQVRJQ0FMIE1PTk9TUEFDRSBESUdJVCBUV09dCithbGlhcwlcVTAwMDFEN0Y5CVx4MzMJIyDwnZ+5IFtNQVRIRU1BVElDQUwgTU9OT1NQQUNFIERJR0lUIFRIUkVFXQorYWxpYXMJXFUwMDAxRDdGQQlceDM0CSMg8J2fuiBbTUFUSEVNQVRJQ0FMIE1PTk9TUEFDRSBESUdJVCBGT1VSXQorYWxpYXMJXFUwMDAxRDdGQglceDM1CSMg8J2fuyBbTUFUSEVNQVRJQ0FMIE1PTk9TUEFDRSBESUdJVCBGSVZFXQorYWxpYXMJXFUwMDAxRDdGQwlceDM2CSMg8J2fvCBbTUFUSEVNQVRJQ0FMIE1PTk9TUEFDRSBESUdJVCBTSVhdCithbGlhcwlcVTAwMDFEN0ZECVx4MzcJIyDwnZ+9IFtNQVRIRU1BVElDQUwgTU9OT1NQQUNFIERJR0lUIFNFVkVOXQorYWxpYXMJXFUwMDAxRDdGRQlceDM4CSMg8J2fviBbTUFUSEVNQVRJQ0FMIE1PTk9TUEFDRSBESUdJVCBFSUdIVF0KK2FsaWFzCVxVMDAwMUQ3RkYJXHgzOQkjIPCdn78gW01BVEhFTUFUSUNBTCBNT05PU1BBQ0UgRElHSVQgTklORV0KZGlmZiAtLWdpdCBhL1RhYmxlcy9UZXh0L251bS1kb3Q2LnR0aSBiL1RhYmxlcy9UZXh0L251bS1kb3Q2LnR0aQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jODRkYWY5Ci0tLSAvZGV2L251bGwKKysrIGIvVGFibGVzL1RleHQvbnVtLWRvdDYudHRpCkBAIC0wLDAgKzEsMzQgQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyMgICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisjCisjIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyMKKyMgQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjIFRoaXMgQlJMVFRZIHRleHQgc3VidGFibGUgaW1wbGVtZW50cyBhIGNvbW1vbiBzY2hlbWUgZm9yIHJlcHJlc2VudGluZyB0aGUgMTAKKyMgSGluZHUtQXJhYmljIG51bWVyYWxzIGluIGJyYWlsbGUuIFRoZSBkaWdpdCAwIGlzIHJlcHJlc2VudGVkIGJ5IGRvdHMgMzQ2LCBhbmQKKyMgdGhlIGRpZ2l0cyAxLTkgYXJlIHJlcHJlc2VudGVkIGJ5IHRoZSBsZXR0ZXJzIGEtaSB3aXRoIGRvdCA2IGFkZGVkLgorCitjaGFyIFx4MzAJKCAgMzQgNiAgKSAgIyDioKwgMCBbRElHSVQgWkVST10KK2NoYXIgXHgzMQkoMSAgICA2ICApICAjIOKgoSAxIFtESUdJVCBPTkVdCitjaGFyIFx4MzIJKDEyICAgNiAgKSAgIyDioKMgMiBbRElHSVQgVFdPXQorY2hhciBceDMzCSgxICA0IDYgICkgICMg4qCpIDMgW0RJR0lUIFRIUkVFXQorY2hhciBceDM0CSgxICA0NTYgICkgICMg4qC5IDQgW0RJR0lUIEZPVVJdCitjaGFyIFx4MzUJKDEgICA1NiAgKSAgIyDioLEgNSBbRElHSVQgRklWRV0KK2NoYXIgXHgzNgkoMTIgNCA2ICApICAjIOKgqyA2IFtESUdJVCBTSVhdCitjaGFyIFx4MzcJKDEyIDQ1NiAgKSAgIyDioLsgNyBbRElHSVQgU0VWRU5dCitjaGFyIFx4MzgJKDEyICA1NiAgKSAgIyDioLMgOCBbRElHSVQgRUlHSFRdCitjaGFyIFx4MzkJKCAyIDQgNiAgKSAgIyDioKogOSBbRElHSVQgTklORV0KKworaW5jbHVkZSBudW0tYWxpYXMudHRpCmRpZmYgLS1naXQgYS9UYWJsZXMvVGV4dC9udW0tZG90OC50dGkgYi9UYWJsZXMvVGV4dC9udW0tZG90OC50dGkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZThjOGZiNQotLS0gL2Rldi9udWxsCisrKyBiL1RhYmxlcy9UZXh0L251bS1kb3Q4LnR0aQpAQCAtMCwwICsxLDM1IEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisjICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorIworIyBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisjCisjIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisjCisjIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyMgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorIyBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyMKKyMgV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworIworIyBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIyBUaGlzIEJSTFRUWSB0ZXh0IHN1YnRhYmxlIGltcGxlbWVudHMgYSBjb21tb24gc2NoZW1lIGZvciByZXByZXNlbnRpbmcgdGhlIDEwCisjIEhpbmR1LUFyYWJpYyBudW1lcmFscyBpbiBicmFpbGxlLiBEb3QgOCBpcyBhZGRlZCB0byB0aGUgbGV0dGVycyBhLWosIHdpdGggdGhlCisjIGxldHRlcnMgYS1pIHJlcHJlc2VudGluZyB0aGUgZGlnaXRzIDEtOSwgYW5kIHdpdGggdGhlIGxldHRlciBqIHJlcHJlc2VudGluZworIyB0aGUgZGlnaXQgMC4KKworY2hhciBceDMwCSggMiA0NSAgOCkgICMg4qKaIDAgW0RJR0lUIFpFUk9dCitjaGFyIFx4MzEJKDEgICAgICA4KSAgIyDiooEgMSBbRElHSVQgT05FXQorY2hhciBceDMyCSgxMiAgICAgOCkgICMg4qKDIDIgW0RJR0lUIFRXT10KK2NoYXIgXHgzMwkoMSAgNCAgIDgpICAjIOKiiSAzIFtESUdJVCBUSFJFRV0KK2NoYXIgXHgzNAkoMSAgNDUgIDgpICAjIOKimSA0IFtESUdJVCBGT1VSXQorY2hhciBceDM1CSgxICAgNSAgOCkgICMg4qKRIDUgW0RJR0lUIEZJVkVdCitjaGFyIFx4MzYJKDEyIDQgICA4KSAgIyDioosgNiBbRElHSVQgU0lYXQorY2hhciBceDM3CSgxMiA0NSAgOCkgICMg4qKbIDcgW0RJR0lUIFNFVkVOXQorY2hhciBceDM4CSgxMiAgNSAgOCkgICMg4qKTIDggW0RJR0lUIEVJR0hUXQorY2hhciBceDM5CSggMiA0ICAgOCkgICMg4qKKIDkgW0RJR0lUIE5JTkVdCisKK2luY2x1ZGUgbnVtLWFsaWFzLnR0aQpkaWZmIC0tZ2l0IGEvVGFibGVzL1RleHQvbnVtLWZyZW5jaC50dGkgYi9UYWJsZXMvVGV4dC9udW0tZnJlbmNoLnR0aQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NDUyMWE2Ci0tLSAvZGV2L251bGwKKysrIGIvVGFibGVzL1RleHQvbnVtLWZyZW5jaC50dGkKQEAgLTAsMCArMSwzNCBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorIyAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyMKKyMgQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorIworIyBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorIworIyBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisjIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyMgbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisjCisjIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMgVGhpcyBCUkxUVFkgdGV4dCBzdWJ0YWJsZSBpbXBsZW1lbnRzIHRoZSBGcmVuY2ggc2NoZW1lIGZvciByZXByZXNlbnRpbmcgdGhlCisjIDEwIEhpbmR1LUFyYWJpYyBudW1lcmFscyBpbiBicmFpbGxlLiBUaGUgZGlnaXQgMCBpcyByZXByZXNlbnRlZCBieSBkb3RzIDM0NTYsCisjIGFuZCB0aGUgZGlnaXRzIDEtOSBhcmUgcmVwcmVzZW50ZWQgYnkgdGhlIGxldHRlcnMgYS1pIHdpdGggZG90IDYgYWRkZWQuCisKK2NoYXIgXHgzMAkoICAzNDU2ICApICAjIOKgvCAwIFtESUdJVCBaRVJPXQorY2hhciBceDMxCSgxICAgIDYgICkgICMg4qChIDEgW0RJR0lUIE9ORV0KK2NoYXIgXHgzMgkoMTIgICA2ICApICAjIOKgoyAyIFtESUdJVCBUV09dCitjaGFyIFx4MzMJKDEgIDQgNiAgKSAgIyDioKkgMyBbRElHSVQgVEhSRUVdCitjaGFyIFx4MzQJKDEgIDQ1NiAgKSAgIyDioLkgNCBbRElHSVQgRk9VUl0KK2NoYXIgXHgzNQkoMSAgIDU2ICApICAjIOKgsSA1IFtESUdJVCBGSVZFXQorY2hhciBceDM2CSgxMiA0IDYgICkgICMg4qCrIDYgW0RJR0lUIFNJWF0KK2NoYXIgXHgzNwkoMTIgNDU2ICApICAjIOKguyA3IFtESUdJVCBTRVZFTl0KK2NoYXIgXHgzOAkoMTIgIDU2ICApICAjIOKgsyA4IFtESUdJVCBFSUdIVF0KK2NoYXIgXHgzOQkoIDIgNCA2ICApICAjIOKgqiA5IFtESUdJVCBOSU5FXQorCitpbmNsdWRlIG51bS1hbGlhcy50dGkKZGlmZiAtLWdpdCBhL1RhYmxlcy9UZXh0L251bS1uZW1kOC50dGkgYi9UYWJsZXMvVGV4dC9udW0tbmVtZDgudHRpCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhhYmZkN2UKLS0tIC9kZXYvbnVsbAorKysgYi9UYWJsZXMvVGV4dC9udW0tbmVtZDgudHRpCkBAIC0wLDAgKzEsMzUgQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyMgICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisjCisjIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyMKKyMgQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjIFRoaXMgQlJMVFRZIHRleHQgc3VidGFibGUgaW1wbGVtZW50cyBhIGNvbW1vbiBzY2hlbWUgZm9yIHJlcHJlc2VudGluZyB0aGUKKyMgMTAgSGluZHUtQXJhYmljIG51bWVyYWxzIGluIGJyYWlsbGUuIFRoZSBsZXR0ZXJzIGEtaiBhcmUgbG93ZXJlZCBieSBvbmUgZG90CisjIHBvc2l0aW9uLCB3aXRoIHRoZSBsZXR0ZXJzIGEtaSByZXByZXNlbnRpbmcgdGhlIGRpZ2l0cyAxLTksIGFuZCB3aXRoIHRoZQorIyBsZXR0ZXIgaiByZXByZXNlbnRpbmcgdGhlIGRpZ2l0IDAuICBBZGRpdGlvbmFsbHksIGRvdCA4IGlzIGFkZGVkLgorCitjaGFyCVx4MzAJKCAgMyA1NiA4KSAgIyDiorQgMCBbRElHSVQgWkVST10KK2NoYXIJXHgzMQkoIDIgICAgIDgpICAjIOKigiAxIFtESUdJVCBPTkVdCitjaGFyCVx4MzIJKCAyMyAgICA4KSAgIyDiooYgMiBbRElHSVQgVFdPXQorY2hhcglceDMzCSggMiAgNSAgOCkgICMg4qKSIDMgW0RJR0lUIFRIUkVFXQorY2hhcglceDM0CSggMiAgNTYgOCkgICMg4qKyIDQgW0RJR0lUIEZPVVJdCitjaGFyCVx4MzUJKCAyICAgNiA4KSAgIyDioqIgNSBbRElHSVQgRklWRV0KK2NoYXIJXHgzNgkoIDIzIDUgIDgpICAjIOKiliA2IFtESUdJVCBTSVhdCitjaGFyCVx4MzcJKCAyMyA1NiA4KSAgIyDiorYgNyBbRElHSVQgU0VWRU5dCitjaGFyCVx4MzgJKCAyMyAgNiA4KSAgIyDioqYgOCBbRElHSVQgRUlHSFRdCitjaGFyCVx4MzkJKCAgMyA1ICA4KSAgIyDiopQgOSBbRElHSVQgTklORV0KKworaW5jbHVkZSBudW0tYWxpYXMudHRpCmRpZmYgLS1naXQgYS9UYWJsZXMvVGV4dC9udW0tbmVtZXRoLnR0aSBiL1RhYmxlcy9UZXh0L251bS1uZW1ldGgudHRpCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAyNTVkMTcKLS0tIC9kZXYvbnVsbAorKysgYi9UYWJsZXMvVGV4dC9udW0tbmVtZXRoLnR0aQpAQCAtMCwwICsxLDM1IEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisjICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorIworIyBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisjCisjIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisjCisjIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyMgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorIyBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyMKKyMgV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworIworIyBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIyBUaGlzIEJSTFRUWSB0ZXh0IHN1YnRhYmxlIGltcGxlbWVudHMgdGhlIE5lbWV0aCBzY2hlbWUgZm9yIHJlcHJlc2VudGluZyB0aGUKKyMgMTAgSGluZHUtQXJhYmljIG51bWVyYWxzIGluIGJyYWlsbGUuIFRoZSBsZXR0ZXJzIGEtaiBhcmUgbG93ZXJlZCBieSBvbmUgZG90CisjIHBvc2l0aW9uLCB3aXRoIHRoZSBsZXR0ZXJzIGEtaSByZXByZXNlbnRpbmcgdGhlIGRpZ2l0cyAxLTksIGFuZCB3aXRoIHRoZQorIyBsZXR0ZXIgaiByZXByZXNlbnRpbmcgdGhlIGRpZ2l0IDAuCisKK2NoYXIgXHgzMAkoICAzIDU2ICApICAjIOKgtCAwIFtESUdJVCBaRVJPXQorY2hhciBceDMxCSggMiAgICAgICkgICMg4qCCIDEgW0RJR0lUIE9ORV0KK2NoYXIgXHgzMgkoIDIzICAgICApICAjIOKghiAyIFtESUdJVCBUV09dCitjaGFyIFx4MzMJKCAyICA1ICAgKSAgIyDioJIgMyBbRElHSVQgVEhSRUVdCitjaGFyIFx4MzQJKCAyICA1NiAgKSAgIyDioLIgNCBbRElHSVQgRk9VUl0KK2NoYXIgXHgzNQkoIDIgICA2ICApICAjIOKgoiA1IFtESUdJVCBGSVZFXQorY2hhciBceDM2CSggMjMgNSAgICkgICMg4qCWIDYgW0RJR0lUIFNJWF0KK2NoYXIgXHgzNwkoIDIzIDU2ICApICAjIOKgtiA3IFtESUdJVCBTRVZFTl0KK2NoYXIgXHgzOAkoIDIzICA2ICApICAjIOKgpiA4IFtESUdJVCBFSUdIVF0KK2NoYXIgXHgzOQkoICAzIDUgICApICAjIOKglCA5IFtESUdJVCBOSU5FXQorCitpbmNsdWRlIG51bS1hbGlhcy50dGkKZGlmZiAtLWdpdCBhL1RhYmxlcy9UZXh0L253Yy50dGIgYi9UYWJsZXMvVGV4dC9ud2MudHRiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFlNDU4Y2MKLS0tIC9kZXYvbnVsbAorKysgYi9UYWJsZXMvVGV4dC9ud2MudHRiCkBAIC0wLDAgKzEsMjUgQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyMgICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisjCisjIENvcHlyaWdodCAoQykgMjAwOC0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyMKKyMgQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjIEJSTFRUWSBUZXh0IFRhYmxlIC0gTmV3YXJpIChvbGQpCisKK2luY2x1ZGUgZGV2YW5hZ2FyaS50dGkKK2luY2x1ZGUgYmVuZ2FsaS50dGkKK2luY2x1ZGUgYXNjaWktYmFzaWMudHRpCisKK2luY2x1ZGUgY29tbW9uLnR0aQpkaWZmIC0tZ2l0IGEvVGFibGVzL1RleHQvb3IudHRiIGIvVGFibGVzL1RleHQvb3IudHRiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhkNzVlMmUKLS0tIC9kZXYvbnVsbAorKysgYi9UYWJsZXMvVGV4dC9vci50dGIKQEAgLTAsMCArMSwyNCBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorIyAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyMKKyMgQ29weXJpZ2h0IChDKSAyMDA4LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorIworIyBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorIworIyBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisjIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyMgbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisjCisjIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMgQlJMVFRZIFRleHQgVGFibGUgLSBPcml5YQorCitpbmNsdWRlIG9yaXlhLnR0aQoraW5jbHVkZSBhc2NpaS1iYXNpYy50dGkKKworaW5jbHVkZSBjb21tb24udHRpCmRpZmYgLS1naXQgYS9UYWJsZXMvVGV4dC9vcml5YS50dGkgYi9UYWJsZXMvVGV4dC9vcml5YS50dGkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTI3OGExNAotLS0gL2Rldi9udWxsCisrKyBiL1RhYmxlcy9UZXh0L29yaXlhLnR0aQpAQCAtMCwwICsxLDEwOSBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorIyAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyMKKyMgQ29weXJpZ2h0IChDKSAyMDA4LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorIworIyBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorIworIyBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisjIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyMgbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisjCisjIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMgVGhpcyBCUkxUVFkgdGV4dCBzdWJ0YWJsZSBkZWZpbmVzIHRoZSBicmFpbGxlIHJlcHJlc2VudGF0aW9ucworIyBmb3IgdGhlIE9yaXlhIHNjcmlwdC4KKworIyBNYWludGFpbmVkIGJ5IEpvaG4gSi4gQm95ZXIsIGRpcmVjdG9yQGNocGkub3JnLCB3d3cuY2hwaS5vcmcKKyMKKyMgVGhpcyB0YWJsZSBpcyBidWlsdCBhbmQgbWFpbnRhaW5lZCBieSBMZW9uIFVuZ2llciA8TGVvbi5VbmdpZXJAVmlld1BsdXMuY29tPgorIyB3aXRoIGhlbHAgYW5kIGd1aWRhbmNlIGZyb20gTW9oYW1tZWQgUi4gUmFtYWRhbiA8bXJhbWFkYW5AbmF0dGlxLmNvbT4KKyMKKyMgQ29udmVydGVkIGZyb20gbGlibG91aXMgdGFibGUgYnkgU2FtdWVsIFRoaWJhdWx0IDxzYW11ZWwudGhpYmF1bHRAZW5zLWx5b24ub3JnPgorCisjIGdlbmVyYXRlZCBieSB0dGJ0ZXN0OgorY2hhciBcdTBCMDEJKCAgMyAgICAgKSAgIyDioIQg4KyBIFtPUklZQSBTSUdOIENBTkRSQUJJTkRVXQorY2hhciBcdTBCMDIJKCAgICA1NiAgKSAgIyDioLAg4KyCIFtPUklZQSBTSUdOIEFOVVNWQVJBXQorY2hhciBcdTBCMDMJKCAgICAgNiAgKSAgIyDioKAg4KyDIFtPUklZQSBTSUdOIFZJU0FSR0FdCitjaGFyIFx1MEIwNQkoMSAgICAgICApICAjIOKggSDgrIUgW09SSVlBIExFVFRFUiBBXQorY2hhciBcdTBCMDYJKCAgMzQ1ICAgKSAgIyDioJwg4KyGIFtPUklZQSBMRVRURVIgQUFdCitjaGFyIFx1MEIwNwkoIDIgNCAgICApICAjIOKgiiDgrIcgW09SSVlBIExFVFRFUiBJXQorY2hhciBcdTBCMDgJKCAgMyA1ICAgKSAgIyDioJQg4KyIIFtPUklZQSBMRVRURVIgSUldCitjaGFyIFx1MEIwOQkoMSAzICA2ICApICAjIOKgpSDgrIkgW09SSVlBIExFVFRFUiBVXQorY2hhciBcdTBCMEEJKDEyICA1NiAgKSAgIyDioLMg4KyKIFtPUklZQSBMRVRURVIgVVVdCisKKworY2hhciBcdTBCMEYJKDEgICA1ICAgKSAgIyDioJEg4KyPIFtPUklZQSBMRVRURVIgRV0KK2NoYXIgXHUwQjEwCSggIDM0ICAgICkgICMg4qCMIOCskCBbT1JJWUEgTEVUVEVSIEFJXQorCisKK2NoYXIgXHUwQjEzCSgxIDMgNSAgICkgICMg4qCVIOCskyBbT1JJWUEgTEVUVEVSIE9dCitjaGFyIFx1MEIxNAkoIDIgNCA2ICApICAjIOKgqiDgrJQgW09SSVlBIExFVFRFUiBBVV0KK2NoYXIgXHUwQjE1CSgxIDMgICAgICkgICMg4qCFIOCslSBbT1JJWUEgTEVUVEVSIEtBXQorY2hhciBcdTBCMTYJKCAgIDQgNiAgKSAgIyDioKgg4KyWIFtPUklZQSBMRVRURVIgS0hBXQorY2hhciBcdTBCMTcJKDEyMzQgICAgKSAgIyDioI8g4KyXIFtPUklZQSBMRVRURVIgR0FdCitjaGFyIFx1MEIxOAkoMTIgICA2ICApICAjIOKgoyDgrJggW09SSVlBIExFVFRFUiBHSEFdCitjaGFyIFx1MEIxOQkoICAzNCA2ICApICAjIOKgrCDgrJkgW09SSVlBIExFVFRFUiBOR0FdCitjaGFyIFx1MEIxQQkoMSAgNCAgICApICAjIOKgiSDgrJogW09SSVlBIExFVFRFUiBDQV0KK2NoYXIgXHUwQjFCCSgxICAgIDYgICkgICMg4qChIOCsmyBbT1JJWUEgTEVUVEVSIENIQV0KK2NoYXIgXHUwQjFDCSggMiA0NSAgICkgICMg4qCaIOCsnCBbT1JJWUEgTEVUVEVSIEpBXQorY2hhciBcdTBCMUQJKCAgMyA1NiAgKSAgIyDioLQg4KydIFtPUklZQSBMRVRURVIgSkhBXQorY2hhciBcdTBCMUUJKCAyICA1ICAgKSAgIyDioJIg4KyeIFtPUklZQSBMRVRURVIgTllBXQorY2hhciBcdTBCMUYJKCAyMzQ1NiAgKSAgIyDioL4g4KyfIFtPUklZQSBMRVRURVIgVFRBXQorY2hhciBcdTBCMjAJKCAyIDQ1NiAgKSAgIyDioLog4KygIFtPUklZQSBMRVRURVIgVFRIQV0KK2NoYXIgXHUwQjIxCSgxMiA0IDYgICkgICMg4qCrIOCsoSBbT1JJWUEgTEVUVEVSIEREQV0KK2NoYXIgXHUwQjIyCSgxMjM0NTYgICkgICMg4qC/IOCsoiBbT1JJWUEgTEVUVEVSIERESEFdCitjaGFyIFx1MEIyMwkoICAzNDU2ICApICAjIOKgvCDgrKMgW09SSVlBIExFVFRFUiBOTkFdCitjaGFyIFx1MEIyNAkoIDIzNDUgICApICAjIOKgniDgrKQgW09SSVlBIExFVFRFUiBUQV0KK2NoYXIgXHUwQjI1CSgxICA0NTYgICkgICMg4qC5IOCspSBbT1JJWUEgTEVUVEVSIFRIQV0KK2NoYXIgXHUwQjI2CSgxICA0NSAgICkgICMg4qCZIOCspiBbT1JJWUEgTEVUVEVSIERBXQorY2hhciBcdTBCMjcJKCAyMzQgNiAgKSAgIyDioK4g4KynIFtPUklZQSBMRVRURVIgREhBXQorY2hhciBcdTBCMjgJKDEgMzQ1ICAgKSAgIyDioJ0g4KyoIFtPUklZQSBMRVRURVIgTkFdCisKK2NoYXIgXHUwQjJBCSgxMjM0ICAgICkgICMg4qCPIOCsqiBbT1JJWUEgTEVUVEVSIFBBXQorY2hhciBcdTBCMkIJKCAyMyA1ICAgKSAgIyDioJYg4KyrIFtPUklZQSBMRVRURVIgUEhBXQorY2hhciBcdTBCMkMJKDEyICAgICAgKSAgIyDioIMg4KysIFtPUklZQSBMRVRURVIgQkFdCitjaGFyIFx1MEIyRAkoICAgNDUgICApICAjIOKgmCDgrK0gW09SSVlBIExFVFRFUiBCSEFdCitjaGFyIFx1MEIyRQkoMSAzNCAgICApICAjIOKgjSDgrK4gW09SSVlBIExFVFRFUiBNQV0KK2NoYXIgXHUwQjJGCSgxIDM0NTYgICkgICMg4qC9IOCsryBbT1JJWUEgTEVUVEVSIFlBXQorY2hhciBcdTBCMzAJKDEyMyA1ICAgKSAgIyDioJcg4KywIFtPUklZQSBMRVRURVIgUkFdCisKK2NoYXIgXHUwQjMyCSgxMjMgICAgICkgICMg4qCHIOCssiBbT1JJWUEgTEVUVEVSIExBXQorY2hhciBcdTBCMzMJKDEyMyAgIDcgKSAgIyDioYcg4KyzIFtPUklZQSBMRVRURVIgTExBXQorCitjaGFyIFx1MEIzNQkoMTIzICA2ICApICAjIOKgpyDgrLUgW09SSVlBIExFVFRFUiBWQV0KK2NoYXIgXHUwQjM2CSgxICA0IDYgICkgICMg4qCpIOCstiBbT1JJWUEgTEVUVEVSIFNIQV0KK2NoYXIgXHUwQjM3CSgxMjM0IDYgICkgICMg4qCvIOCstyBbT1JJWUEgTEVUVEVSIFNTQV0KK2NoYXIgXHUwQjM4CSggMjM0ICAgICkgICMg4qCOIOCsuCBbT1JJWUEgTEVUVEVSIFNBXQorY2hhciBcdTBCMzkJKDEyICA1ICAgKSAgIyDioJMg4Ky5IFtPUklZQSBMRVRURVIgSEFdCitjaGFyIFx1MEIzRAkoIDIgICAgICApICAjIOKggiDgrL0gW09SSVlBIFNJR04gQVZBR1JBSEFdCitjaGFyIFx1MEIzRQkoICAzNDUgICApICAjIOKgnCDgrL4gW09SSVlBIFZPV0VMIFNJR04gQUFdCitjaGFyIFx1MEIzRgkoIDIgNCAgICApICAjIOKgiiDgrL8gW09SSVlBIFZPV0VMIFNJR04gSV0KK2NoYXIgXHUwQjQwCSggIDMgNSAgICkgICMg4qCUIOCtgCBbT1JJWUEgVk9XRUwgU0lHTiBJSV0KK2NoYXIgXHUwQjQxCSgxIDMgIDYgICkgICMg4qClIOCtgSBbT1JJWUEgVk9XRUwgU0lHTiBVXQorY2hhciBcdTBCNDIJKDEyICA1NiAgKSAgIyDioLMg4K2CIFtPUklZQSBWT1dFTCBTSUdOIFVVXQorCisKK2NoYXIgXHUwQjQ3CSgxICAgNSAgICkgICMg4qCRIOCthyBbT1JJWUEgVk9XRUwgU0lHTiBFXQorY2hhciBcdTBCNDgJKCAgMzQgICAgKSAgIyDioIwg4K2IIFtPUklZQSBWT1dFTCBTSUdOIEFJXQorCisKK2NoYXIgXHUwQjRCCSgxIDMgNSAgICkgICMg4qCVIOCtiyBbT1JJWUEgVk9XRUwgU0lHTiBPXQorY2hhciBcdTBCNEMJKCAyIDQgNiAgKSAgIyDioKog4K2MIFtPUklZQSBWT1dFTCBTSUdOIEFVXQorY2hhciBcdTBCNEQJKCAgIDQgICAgKSAgIyDioIgg4K2NIFtPUklZQSBTSUdOIFZJUkFNQV0KKworY2hhciBcdTBCNjYJKCAyIDQ1ICAgKSAgIyDioJog4K2mIFtPUklZQSBESUdJVCBaRVJPXQorY2hhciBcdTBCNjcJKDEgICAgICAgKSAgIyDioIEg4K2nIFtPUklZQSBESUdJVCBPTkVdCitjaGFyIFx1MEI2OAkoMTIgICAgICApICAjIOKggyDgraggW09SSVlBIERJR0lUIFRXT10KK2NoYXIgXHUwQjY5CSgxICA0ICAgICkgICMg4qCJIOCtqSBbT1JJWUEgRElHSVQgVEhSRUVdCitjaGFyIFx1MEI2QQkoMSAgNDUgICApICAjIOKgmSDgraogW09SSVlBIERJR0lUIEZPVVJdCitjaGFyIFx1MEI2QgkoMSAgIDUgICApICAjIOKgkSDgrasgW09SSVlBIERJR0lUIEZJVkVdCitjaGFyIFx1MEI2QwkoMTIgNCAgICApICAjIOKgiyDgrawgW09SSVlBIERJR0lUIFNJWF0KK2NoYXIgXHUwQjZECSgxMiA0NSAgICkgICMg4qCbIOCtrSBbT1JJWUEgRElHSVQgU0VWRU5dCitjaGFyIFx1MEI2RQkoMTIgIDUgICApICAjIOKgkyDgra4gW09SSVlBIERJR0lUIEVJR0hUXQorY2hhciBcdTBCNkYJKCAyIDQgICAgKSAgIyDioIog4K2vIFtPUklZQSBESUdJVCBOSU5FXQpkaWZmIC0tZ2l0IGEvVGFibGVzL1RleHQvcGEudHRiIGIvVGFibGVzL1RleHQvcGEudHRiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZiYmU0MDEKLS0tIC9kZXYvbnVsbAorKysgYi9UYWJsZXMvVGV4dC9wYS50dGIKQEAgLTAsMCArMSwyNCBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorIyAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyMKKyMgQ29weXJpZ2h0IChDKSAyMDA4LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorIworIyBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorIworIyBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisjIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyMgbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisjCisjIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMgQlJMVFRZIFRleHQgVGFibGUgLSBQYW5qYWJpCisKK2luY2x1ZGUgZ3VybXVraGkudHRpCitpbmNsdWRlIGFzY2lpLWJhc2ljLnR0aQorCitpbmNsdWRlIGNvbW1vbi50dGkKZGlmZiAtLWdpdCBhL1RhYmxlcy9UZXh0L3BpLnR0YiBiL1RhYmxlcy9UZXh0L3BpLnR0YgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMzk4NDgyCi0tLSAvZGV2L251bGwKKysrIGIvVGFibGVzL1RleHQvcGkudHRiCkBAIC0wLDAgKzEsMjQgQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyMgICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisjCisjIENvcHlyaWdodCAoQykgMjAwOC0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyMKKyMgQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjIEJSTFRUWSBUZXh0IFRhYmxlIC0gUGFsaQorCitpbmNsdWRlIGRldmFuYWdhcmkudHRpCitpbmNsdWRlIGFzY2lpLWJhc2ljLnR0aQorCitpbmNsdWRlIGNvbW1vbi50dGkKZGlmZiAtLWdpdCBhL1RhYmxlcy9UZXh0L3BsLnR0YiBiL1RhYmxlcy9UZXh0L3BsLnR0YgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOWMzYzY2Ci0tLSAvZGV2L251bGwKKysrIGIvVGFibGVzL1RleHQvcGwudHRiCkBAIC0wLDAgKzEsMTcwIEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisjICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorIworIyBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisjCisjIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisjCisjIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyMgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorIyBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyMKKyMgV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworIworIyBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIyBCUkxUVFkgVGV4dCBUYWJsZSAtIFBvbGlzaAorCisjIHRoZSBzdGFuZGFyZCByZXByZXNlbnRhdGlvbnMgZm9yIHRoZSBsZXR0ZXJzIG9mIHRoZSBMYXRpbiBhbHBoYWJldAoraW5jbHVkZSBsdHItbGF0aW4udHRpCisKKyMgdGhlIHN0YW5kYXJkIHJlcHJlc2VudGF0aW9ucyBmb3IgdGhlIExhdGluIGNvbnRyb2wgY2hhcmFjdGVycworaW5jbHVkZSBjdGwtbGF0aW4udHRpCisKKyMgdGhlIG51bWJlcnMgMC05IGFyZSByZXByZXNlbnRlZCBieSB0aGUgbGV0dGVycyBqLGEtaSB3aXRoIGRvdCA4IGFkZGVkCitpbmNsdWRlIG51bS1kb3Q4LnR0aQorCisjIGdlbmVyYXRlZCBieSB0dGJ0ZXN0OiBjaGFyc2V0PWlzby04ODU5LTIKK2NoYXIgXHgwMAkoICAgNCAgNzgpICAjIDAwIOKjiCAgIFtOVUxMXQorIyBMYXRpbiBjb250cm9sIGNoYXJhY3RlcnMgICMgMDEtMUEKK2NoYXIgXHgxQgkoIDIgNCA2NzgpICAjIDFCIOKjqiAgIFtFU0NBUEVdCitjaGFyIFx4MUMJKDEyICA1Njc4KSAgIyAxQyDio7MgICBbSU5GT1JNQVRJT04gU0VQQVJBVE9SIEZPVVJdCitjaGFyIFx4MUQJKDEyIDQ1Njc4KSAgIyAxRCDio7sgICBbSU5GT1JNQVRJT04gU0VQQVJBVE9SIFRIUkVFXQorY2hhciBceDFFCSggICA0NSA3OCkgICMgMUUg4qOYICAgW0lORk9STUFUSU9OIFNFUEFSQVRPUiBUV09dCitjaGFyIFx4MUYJKCAgIDQ1Njc4KSAgIyAxRiDio7ggICBbSU5GT1JNQVRJT04gU0VQQVJBVE9SIE9ORV0KK2NoYXIgXHgyMAkoICAgICAgICApICAjIDIwIOKggCAgIFtTUEFDRV0KK2NoYXIgXHgyMQkoIDIzIDUgICApICAjIDIxIOKgliAhIFtFWENMQU1BVElPTiBNQVJLXQorY2hhciBceDIyCSggICAgNSAgICkgICMgMjIg4qCQICIgW1FVT1RBVElPTiBNQVJLXQorY2hhciBceDIzCSggIDM0NTYgICkgICMgMjMg4qC8ICMgW05VTUJFUiBTSUdOXQorY2hhciBceDI0CSgxMiA0IDYgICkgICMgMjQg4qCrICQgW0RPTExBUiBTSUdOXQorY2hhciBceDI1CSgxICA0IDYgOCkgICMgMjUg4qKpICUgW1BFUkNFTlQgU0lHTl0KK2NoYXIgXHgyNgkoMTIzNCA2IDgpICAjIDI2IOKiryAmIFtBTVBFUlNBTkRdCitjaGFyIFx4MjcJKCAgMyAgICAgKSAgIyAyNyDioIQgJyBbQVBPU1RST1BIRV0KK2NoYXIgXHgyOAkoMTIzIDU2ICApICAjIDI4IOKgtyAoIFtMRUZUIFBBUkVOVEhFU0lTXQorY2hhciBceDI5CSggMjM0NTYgICkgICMgMjkg4qC+ICkgW1JJR0hUIFBBUkVOVEhFU0lTXQorY2hhciBceDJBCSggIDMgNSAgICkgICMgMkEg4qCUICogW0FTVEVSSVNLXQorY2hhciBceDJCCSggMjMgNSAgICkgICMgMkIg4qCWICsgW1BMVVMgU0lHTl0KK2NoYXIgXHgyQwkoIDIgICAgICApICAjIDJDIOKggiAsIFtDT01NQV0KK2NoYXIgXHgyRAkoICAzICA2ICApICAjIDJEIOKgpCAtIFtIWVBIRU4tTUlOVVNdCitjaGFyIFx4MkUJKCAgMyAgICAgKSAgIyAyRSDioIQgLiBbRlVMTCBTVE9QXQorY2hhciBceDJGCSggIDM0ICAgICkgICMgMkYg4qCMIC8gW1NPTElEVVNdCisjIEhpbmR1LUFyYWJpYyBudW1lcmFscyAgICAgIyAzMC0zOQorY2hhciBceDNBCSggMiAgNSAgICkgICMgM0Eg4qCSIDogW0NPTE9OXQorY2hhciBceDNCCSggMjMgICAgICkgICMgM0Ig4qCGIDsgW1NFTUlDT0xPTl0KK2NoYXIgXHgzQwkoMTIgICA2IDgpICAjIDNDIOKioyA8IFtMRVNTLVRIQU4gU0lHTl0KK2NoYXIgXHgzRAkoIDIzIDU2ICApICAjIDNEIOKgtiA9IFtFUVVBTFMgU0lHTl0KK2NoYXIgXHgzRQkoICAzNDUgIDgpICAjIDNFIOKinCA+IFtHUkVBVEVSLVRIQU4gU0lHTl0KK2NoYXIgXHgzRgkoIDIzICA2ICApICAjIDNGIOKgpiA/IFtRVUVTVElPTiBNQVJLXQorY2hhciBceDQwCSggICA0ICA3ICkgICMgNDAg4qGIIEAgW0NPTU1FUkNJQUwgQVRdCisjIHVwcGVyY2FzZSBMYXRpbiBhbHBoYWJldCAgIyA0MS01QQorY2hhciBceDVCCSggMiA0IDYgOCkgICMgNUIg4qKqIFsgW0xFRlQgU1FVQVJFIEJSQUNLRVRdCitjaGFyIFx4NUMJKDEyICA1NjcgKSAgIyA1QyDiobMgXCBbUkVWRVJTRSBTT0xJRFVTXQorY2hhciBceDVECSgxMiA0NTY3ICkgICMgNUQg4qG7IF0gW1JJR0hUIFNRVUFSRSBCUkFDS0VUXQorY2hhciBceDVFCSggICA0NSA3ICkgICMgNUUg4qGYIF4gW0NJUkNVTUZMRVggQUNDRU5UXQorY2hhciBceDVGCSggICA0NTYgICkgICMgNUYg4qC4IF8gW0xPVyBMSU5FXQorY2hhciBceDYwCSggICA0ICAgICkgICMgNjAg4qCIIGAgW0dSQVZFIEFDQ0VOVF0KKyMgbG93ZXJjYXNlIExhdGluIGFscGhhYmV0ICAjIDYxLTdBCitjaGFyIFx4N0IJKCAyMyA1NjcgKSAgIyA3QiDiobYgeyBbTEVGVCBDVVJMWSBCUkFDS0VUXQorY2hhciBceDdDCSgxMiAgNTYgICkgICMgN0Mg4qCzIHwgW1ZFUlRJQ0FMIExJTkVdCitjaGFyIFx4N0QJKCAyMyA1NiA4KSAgIyA3RCDiorYgfSBbUklHSFQgQ1VSTFkgQlJBQ0tFVF0KK2NoYXIgXHg3RQkoICAgNDUgICApICAjIDdFIOKgmCB+IFtUSUxERV0KK2NoYXIgXHg3RgkoICAgNDU2NyApICAjIDdGIOKhuCAgIFtERUxFVEVdCitjaGFyIFx1MDEwNAkoMSAgICA2NyApICAjIEExIOKhoSDEhCBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgQSBXSVRIIE9HT05FS10KK2NoYXIgXHUwMkQ4CSggICAgNSAgOCkgICMgQTIg4qKQIMuYIFtCUkVWRV0KK2NoYXIgXHUwMTQxCSgxMiAgIDY3ICkgICMgQTMg4qGjIMWBIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBMIFdJVEggU1RST0tFXQorY2hhciBceEE0CSggIDMgIDY3OCkgICMgQTQg4qOkIMKkIFtDVVJSRU5DWSBTSUdOXQorY2hhciBcdTAxM0QJKCAgIDQgNiA4KSAgIyBBNSDioqggxL0gW0xBVElOIENBUElUQUwgTEVUVEVSIEwgV0lUSCBDQVJPTl0KK2NoYXIgXHUwMTVBCSggMiA0IDY3ICkgICMgQTYg4qGqIMWaIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBTIFdJVEggQUNVVEVdCitjaGFyIFx4QTcJKDEyMzQ1Njc4KSAgIyBBNyDio78gwqcgW1NFQ1RJT04gU0lHTl0KK2NoYXIgXHhBOAkoIDIgICAgNzgpICAjIEE4IOKjgiDCqCBbRElBRVJFU0lTXQorY2hhciBcdTAxNjAJKDEgIDQ1NjcgKSAgIyBBOSDiobkgxaAgW0xBVElOIENBUElUQUwgTEVUVEVSIFMgV0lUSCBDQVJPTl0KK2NoYXIgXHUwMTVFCSgxMiAgNSAgOCkgICMgQUEg4qKTIMWeIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBTIFdJVEggQ0VESUxMQV0KK2NoYXIgXHUwMTY0CSgxMjMgNTY3OCkgICMgQUIg4qO3IMWkIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBUIFdJVEggQ0FST05dCitjaGFyIFx1MDE3OQkoIDIzNCA2NyApICAjIEFDIOKhriDFuSBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgWiBXSVRIIEFDVVRFXQorY2hhciBcdTAxN0QJKCAgIDQgNjc4KSAgIyBBRSDio6ggxb0gW0xBVElOIENBUElUQUwgTEVUVEVSIFogV0lUSCBDQVJPTl0KK2NoYXIgXHUwMTdCCSgxMjM0IDYgOCkgICMgQUYg4qKvIMW7IFtMQVRJTiBDQVBJVEFMIExFVFRFUiBaIFdJVEggRE9UIEFCT1ZFXQorY2hhciBceEIwCSggIDMgNTYgICkgICMgQjAg4qC0IMKwIFtERUdSRUUgU0lHTl0KK2NoYXIgXHUwMTA1CSgxICAgIDYgICkgICMgQjEg4qChIMSFIFtMQVRJTiBTTUFMTCBMRVRURVIgQSBXSVRIIE9HT05FS10KK2NoYXIgXHUwMkRCCSggICAgICAgOCkgICMgQjIg4qKAIMubIFtPR09ORUtdCitjaGFyIFx1MDE0MgkoMTIgICA2ICApICAjIEIzIOKgoyDFgiBbTEFUSU4gU01BTEwgTEVUVEVSIEwgV0lUSCBTVFJPS0VdCitjaGFyIFx4QjQJKCAgIDQgICAgKSAgIyBCNCDioIggwrQgW0FDVVRFIEFDQ0VOVF0KK2NoYXIgXHUwMTNFCSgxIDM0ICAgOCkgICMgQjUg4qKNIMS+IFtMQVRJTiBTTUFMTCBMRVRURVIgTCBXSVRIIENBUk9OXQorY2hhciBcdTAxNUIJKCAyIDQgNiAgKSAgIyBCNiDioKogxZsgW0xBVElOIFNNQUxMIExFVFRFUiBTIFdJVEggQUNVVEVdCitjaGFyIFx1MDJDNwkoICAzICAgNyApICAjIEI3IOKhhCDLhyBbQ0FST05dCitjaGFyIFx4QjgJKCAgICAgICA4KSAgIyBCOCDiooAgwrggW0NFRElMTEFdCitjaGFyIFx1MDE2MQkoMTIzIDU2NyApICAjIEI5IOKhtyDFoSBbTEFUSU4gU01BTEwgTEVUVEVSIFMgV0lUSCBDQVJPTl0KK2NoYXIgXHUwMTVGCSggMiA0NSAgOCkgICMgQkEg4qKaIMWfIFtMQVRJTiBTTUFMTCBMRVRURVIgUyBXSVRIIENFRElMTEFdCitjaGFyIFx1MDE2NQkoIDIzNDU2NzgpICAjIEJCIOKjviDFpSBbTEFUSU4gU01BTEwgTEVUVEVSIFQgV0lUSCBDQVJPTl0KK2NoYXIgXHUwMTdBCSggMjM0IDYgICkgICMgQkMg4qCuIMW6IFtMQVRJTiBTTUFMTCBMRVRURVIgWiBXSVRIIEFDVVRFXQorY2hhciBcdTAyREQJKCAgIDQ1ICAgKSAgIyBCRCDioJggy50gW0RPVUJMRSBBQ1VURSBBQ0NFTlRdCitjaGFyIFx1MDE3RQkoICAzNCA2NzgpICAjIEJFIOKjrCDFviBbTEFUSU4gU01BTEwgTEVUVEVSIFogV0lUSCBDQVJPTl0KK2NoYXIgXHUwMTdDCSgxMjM0IDYgICkgICMgQkYg4qCvIMW8IFtMQVRJTiBTTUFMTCBMRVRURVIgWiBXSVRIIERPVCBBQk9WRV0KK2NoYXIgXHUwMTU0CSggIDMgICA3OCkgICMgQzAg4qOEIMWUIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBSIFdJVEggQUNVVEVdCitjaGFyIFx4QzEJKCAyICAgIDcgKSAgIyBDMSDioYIgw4EgW0xBVElOIENBUElUQUwgTEVUVEVSIEEgV0lUSCBBQ1VURV0KK2NoYXIgXHhDMgkoMSAzICAgIDgpICAjIEMyIOKihSDDgiBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgQSBXSVRIIENJUkNVTUZMRVhdCitjaGFyIFx1MDEwMgkoIDIzICA2NyApICAjIEMzIOKhpiDEgiBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgQSBXSVRIIEJSRVZFXQorY2hhciBceEM0CSggICAgNTY3ICkgICMgQzQg4qGwIMOEIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBBIFdJVEggRElBRVJFU0lTXQorY2hhciBcdTAxMzkJKCAgMzQ1NjcgKSAgIyBDNSDiobwgxLkgW0xBVElOIENBUElUQUwgTEVUVEVSIEwgV0lUSCBBQ1VURV0KK2NoYXIgXHUwMTA2CSgxICA0IDY3ICkgICMgQzYg4qGpIMSGIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBDIFdJVEggQUNVVEVdCitjaGFyIFx4QzcJKDEyMzQgNjcgKSAgIyBDNyDioa8gw4cgW0xBVElOIENBUElUQUwgTEVUVEVSIEMgV0lUSCBDRURJTExBXQorY2hhciBcdTAxMEMJKCAyMyAgIDc4KSAgIyBDOCDio4YgxIwgW0xBVElOIENBUElUQUwgTEVUVEVSIEMgV0lUSCBDQVJPTl0KK2NoYXIgXHhDOQkoIDIzICAgIDgpICAjIEM5IOKihiDDiSBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgRSBXSVRIIEFDVVRFXQorY2hhciBcdTAxMTgJKDEgICA1NjcgKSAgIyBDQSDiobEgxJggW0xBVElOIENBUElUQUwgTEVUVEVSIEUgV0lUSCBPR09ORUtdCitjaGFyIFx4Q0IJKDEyMzQ1ICA4KSAgIyBDQiDiop8gw4sgW0xBVElOIENBUElUQUwgTEVUVEVSIEUgV0lUSCBESUFFUkVTSVNdCitjaGFyIFx1MDExQQkoMTIgNCAgIDgpICAjIENDIOKiiyDEmiBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgRSBXSVRIIENBUk9OXQorY2hhciBceENECSggMiAgNSA3OCkgICMgQ0Qg4qOSIMONIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBJIFdJVEggQUNVVEVdCitjaGFyIFx4Q0UJKCAgICA1Njc4KSAgIyBDRSDio7Agw44gW0xBVElOIENBUElUQUwgTEVUVEVSIEkgV0lUSCBDSVJDVU1GTEVYXQorY2hhciBcdTAxMEUJKDEgICAgNjcgKSAgIyBDRiDioaEgxI4gW0xBVElOIENBUElUQUwgTEVUVEVSIEQgV0lUSCBDQVJPTl0KK2NoYXIgXHUwMTEwCSggICAgNSA3ICkgICMgRDAg4qGQIMSQIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBEIFdJVEggU1RST0tFXQorY2hhciBcdTAxNDMJKDEgIDQ1NjcgKSAgIyBEMSDiobkgxYMgW0xBVElOIENBUElUQUwgTEVUVEVSIE4gV0lUSCBBQ1VURV0KK2NoYXIgXHUwMTQ3CSggMiAgICAgOCkgICMgRDIg4qKCIMWHIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBOIFdJVEggQ0FST05dCitjaGFyIFx4RDMJKCAgMzQgNjcgKSAgIyBEMyDioawgw5MgW0xBVElOIENBUElUQUwgTEVUVEVSIE8gV0lUSCBBQ1VURV0KK2NoYXIgXHhENAkoIDIgNCAgIDgpICAjIEQ0IOKiiiDDlCBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgTyBXSVRIIENJUkNVTUZMRVhdCitjaGFyIFx1MDE1MAkoMTIzNCA2IDgpICAjIEQ1IOKiryDFkCBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgTyBXSVRIIERPVUJMRSBBQ1VURV0KK2NoYXIgXHhENgkoICAzIDUgIDgpICAjIEQ2IOKilCDDliBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgTyBXSVRIIERJQUVSRVNJU10KK2NoYXIgXHhENwkoIDIzICA2ICApICAjIEQ3IOKgpiDDlyBbTVVMVElQTElDQVRJT04gU0lHTl0KK2NoYXIgXHUwMTU4CSggIDMgNTY3ICkgICMgRDgg4qG0IMWYIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBSIFdJVEggQ0FST05dCitjaGFyIFx1MDE2RQkoICAgICA2NzgpICAjIEQ5IOKjoCDFriBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgVSBXSVRIIFJJTkcgQUJPVkVdCitjaGFyIFx4REEJKCAyICA1IDcgKSAgIyBEQSDioZIgw5ogW0xBVElOIENBUElUQUwgTEVUVEVSIFUgV0lUSCBBQ1VURV0KK2NoYXIgXHUwMTcwCSgxMjM0NTY3OCkgICMgREIg4qO/IMWwIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBVIFdJVEggRE9VQkxFIEFDVVRFXQorY2hhciBceERDCSggMjMgIDYgOCkgICMgREMg4qKmIMOcIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBVIFdJVEggRElBRVJFU0lTXQorY2hhciBceERECSggMjMgIDY3OCkgICMgREQg4qOmIMOdIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBZIFdJVEggQUNVVEVdCitjaGFyIFx1MDE2MgkoICAzIDU2NzgpICAjIERFIOKjtCDFoiBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgVCBXSVRIIENFRElMTEFdCitjaGFyIFx4REYJKCAgMzQ1NiA4KSAgIyBERiDiorwgw58gW0xBVElOIFNNQUxMIExFVFRFUiBTSEFSUCBTXQorY2hhciBcdTAxNTUJKDEyMyA1NiA4KSAgIyBFMCDiorcgxZUgW0xBVElOIFNNQUxMIExFVFRFUiBSIFdJVEggQUNVVEVdCitjaGFyIFx4RTEJKDEgICAgNiA4KSAgIyBFMSDioqEgw6EgW0xBVElOIFNNQUxMIExFVFRFUiBBIFdJVEggQUNVVEVdCitjaGFyIFx4RTIJKDEgICAgNjc4KSAgIyBFMiDio6Egw6IgW0xBVElOIFNNQUxMIExFVFRFUiBBIFdJVEggQ0lSQ1VNRkxFWF0KK2NoYXIgXHUwMTAzCSgxMjM0ICAgOCkgICMgRTMg4qKPIMSDIFtMQVRJTiBTTUFMTCBMRVRURVIgQSBXSVRIIEJSRVZFXQorY2hhciBceEU0CSggIDM0NSAgOCkgICMgRTQg4qKcIMOkIFtMQVRJTiBTTUFMTCBMRVRURVIgQSBXSVRIIERJQUVSRVNJU10KK2NoYXIgXHUwMTNBCSggIDM0NTY3OCkgICMgRTUg4qO8IMS6IFtMQVRJTiBTTUFMTCBMRVRURVIgTCBXSVRIIEFDVVRFXQorY2hhciBcdTAxMDcJKDEgIDQgNiAgKSAgIyBFNiDioKkgxIcgW0xBVElOIFNNQUxMIExFVFRFUiBDIFdJVEggQUNVVEVdCitjaGFyIFx4RTcJKDEyMzQgNjc4KSAgIyBFNyDio68gw6cgW0xBVElOIFNNQUxMIExFVFRFUiBDIFdJVEggQ0VESUxMQV0KK2NoYXIgXHUwMTBECSggMjM0IDYgOCkgICMgRTgg4qKuIMSNIFtMQVRJTiBTTUFMTCBMRVRURVIgQyBXSVRIIENBUk9OXQorY2hhciBceEU5CSgxMiAgIDYgOCkgICMgRTkg4qKjIMOpIFtMQVRJTiBTTUFMTCBMRVRURVIgRSBXSVRIIEFDVVRFXQorY2hhciBcdTAxMTkJKDEgICA1NiAgKSAgIyBFQSDioLEgxJkgW0xBVElOIFNNQUxMIExFVFRFUiBFIFdJVEggT0dPTkVLXQorY2hhciBceEVCCSgxMiA0IDYgOCkgICMgRUIg4qKrIMOrIFtMQVRJTiBTTUFMTCBMRVRURVIgRSBXSVRIIERJQUVSRVNJU10KK2NoYXIgXHUwMTFCCSggIDM0ICAgOCkgICMgRUMg4qKMIMSbIFtMQVRJTiBTTUFMTCBMRVRURVIgRSBXSVRIIENBUk9OXQorY2hhciBceEVECSgxICA0IDYgOCkgICMgRUQg4qKpIMOtIFtMQVRJTiBTTUFMTCBMRVRURVIgSSBXSVRIIEFDVVRFXQorY2hhciBceEVFCSgxICA0IDY3OCkgICMgRUUg4qOpIMOuIFtMQVRJTiBTTUFMTCBMRVRURVIgSSBXSVRIIENJUkNVTUZMRVhdCitjaGFyIFx1MDEwRgkoMTIgNDU2IDgpICAjIEVGIOKiuyDEjyBbTEFUSU4gU01BTEwgTEVUVEVSIEQgV0lUSCBDQVJPTl0KK2NoYXIgXHUwMTExCSggMjMgNTYgOCkgICMgRjAg4qK2IMSRIFtMQVRJTiBTTUFMTCBMRVRURVIgRCBXSVRIIFNUUk9LRV0KK2NoYXIgXHUwMTQ0CSgxICA0NTYgICkgICMgRjEg4qC5IMWEIFtMQVRJTiBTTUFMTCBMRVRURVIgTiBXSVRIIEFDVVRFXQorY2hhciBcdTAxNDgJKCAgMzQgNiA4KSAgIyBGMiDioqwgxYggW0xBVElOIFNNQUxMIExFVFRFUiBOIFdJVEggQ0FST05dCitjaGFyIFx4RjMJKCAgMzQgNiAgKSAgIyBGMyDioKwgw7MgW0xBVElOIFNNQUxMIExFVFRFUiBPIFdJVEggQUNVVEVdCitjaGFyIFx4RjQJKDEgIDQ1Njc4KSAgIyBGNCDio7kgw7QgW0xBVElOIFNNQUxMIExFVFRFUiBPIFdJVEggQ0lSQ1VNRkxFWF0KK2NoYXIgXHUwMTUxCSgxICAgNTY3ICkgICMgRjUg4qGxIMWRIFtMQVRJTiBTTUFMTCBMRVRURVIgTyBXSVRIIERPVUJMRSBBQ1VURV0KK2NoYXIgXHhGNgkoIDIgNCA2IDgpICAjIEY2IOKiqiDDtiBbTEFUSU4gU01BTEwgTEVUVEVSIE8gV0lUSCBESUFFUkVTSVNdCitjaGFyIFx4RjcJKDEyICA1Njc4KSAgIyBGNyDio7Mgw7cgW0RJVklTSU9OIFNJR05dCitjaGFyIFx1MDE1OQkoICAgICAgNzgpICAjIEY4IOKjgCDFmSBbTEFUSU4gU01BTEwgTEVUVEVSIFIgV0lUSCBDQVJPTl0KK2NoYXIgXHUwMTZGCSggMjM0NTYgOCkgICMgRjkg4qK+IMWvIFtMQVRJTiBTTUFMTCBMRVRURVIgVSBXSVRIIFJJTkcgQUJPVkVdCitjaGFyIFx4RkEJKDEgICA1NiA4KSAgIyBGQSDiorEgw7ogW0xBVElOIFNNQUxMIExFVFRFUiBVIFdJVEggQUNVVEVdCitjaGFyIFx1MDE3MQkoMSAgIDU2NzgpICAjIEZCIOKjsSDFsSBbTEFUSU4gU01BTEwgTEVUVEVSIFUgV0lUSCBET1VCTEUgQUNVVEVdCitjaGFyIFx4RkMJKDEyICA1NiA4KSAgIyBGQyDiorMgw7wgW0xBVElOIFNNQUxMIExFVFRFUiBVIFdJVEggRElBRVJFU0lTXQorY2hhciBceEZECSggMjMgNTY3OCkgICMgRkQg4qO2IMO9IFtMQVRJTiBTTUFMTCBMRVRURVIgWSBXSVRIIEFDVVRFXQorY2hhciBcdTAxNjMJKDEyMzQ1NjcgKSAgIyBGRSDiob8gxaMgW0xBVElOIFNNQUxMIExFVFRFUiBUIFdJVEggQ0VESUxMQV0KK2NoYXIgXHUwMkQ5CSggICAgICAgOCkgICMgRkYg4qKAIMuZIFtET1QgQUJPVkVdCisKK2luY2x1ZGUgY29tbW9uLnR0aQpkaWZmIC0tZ2l0IGEvVGFibGVzL1RleHQvcHQudHRiIGIvVGFibGVzL1RleHQvcHQudHRiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY3ZmI4ZGIKLS0tIC9kZXYvbnVsbAorKysgYi9UYWJsZXMvVGV4dC9wdC50dGIKQEAgLTAsMCArMSwxNzEgQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyMgICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisjCisjIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyMKKyMgQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjIEJSTFRUWSBUZXh0IFRhYmxlIC0gUG9ydHVndWVzZQorCisjIHRoZSBzdGFuZGFyZCByZXByZXNlbnRhdGlvbnMgZm9yIHRoZSBsZXR0ZXJzIG9mIHRoZSBMYXRpbiBhbHBoYWJldAoraW5jbHVkZSBsdHItbGF0aW4udHRpCisKKyMgdGhlIHN0YW5kYXJkIHJlcHJlc2VudGF0aW9ucyBmb3IgdGhlIExhdGluIGNvbnRyb2wgY2hhcmFjdGVycworaW5jbHVkZSBjdGwtbGF0aW4udHRpCisKKyMgdGhlIG51bWJlcnMgMC05IGFyZSByZXByZXNlbnRlZCBieSB0aGUgbGV0dGVycyBqLGEtaSB3aXRoIGRvdCA4IGFkZGVkCitpbmNsdWRlIG51bS1kb3Q4LnR0aQorCisjIGdlbmVyYXRlZCBieSB0dGJ0ZXN0OiBjaGFyc2V0PWlzby04ODU5LTEKK2NoYXIgXHgwMAkoIDIzNCA2NzgpICAjIDAwIOKjriAgIFtOVUxMXQorIyBMYXRpbiBjb250cm9sIGNoYXJhY3RlcnMgICMgMDEtMUEKK2NoYXIgXHgxQgkoMTIzIDU2NzgpICAjIDFCIOKjtyAgIFtFU0NBUEVdCitjaGFyIFx4MUMJKCAgMzQgNjc4KSAgIyAxQyDio6wgICBbSU5GT1JNQVRJT04gU0VQQVJBVE9SIEZPVVJdCitjaGFyIFx4MUQJKCAyMzQ1Njc4KSAgIyAxRCDio74gICBbSU5GT1JNQVRJT04gU0VQQVJBVE9SIFRIUkVFXQorY2hhciBceDFFCSggICAgIDY3OCkgICMgMUUg4qOgICAgW0lORk9STUFUSU9OIFNFUEFSQVRPUiBUV09dCitjaGFyIFx4MUYJKCAgICA1IDc4KSAgIyAxRiDio5AgICBbSU5GT1JNQVRJT04gU0VQQVJBVE9SIE9ORV0KK2NoYXIgXHgyMAkoICAgICAgICApICAjIDIwIOKggCAgIFtTUEFDRV0KK2NoYXIgXHgyMQkoIDIzIDUgIDgpICAjIDIxIOKiliAhIFtFWENMQU1BVElPTiBNQVJLXQorY2hhciBceDIyCSggMjMgIDYgICkgICMgMjIg4qCmICIgW1FVT1RBVElPTiBNQVJLXQorY2hhciBceDIzCSggIDM0NTYgICkgICMgMjMg4qC8ICMgW05VTUJFUiBTSUdOXQorY2hhciBceDI0CSggICAgNTYgICkgICMgMjQg4qCwICQgW0RPTExBUiBTSUdOXQorY2hhciBceDI1CSggIDMgNTY3OCkgICMgMjUg4qO0ICUgW1BFUkNFTlQgU0lHTl0KK2NoYXIgXHgyNgkoMTIzNCA2IDgpICAjIDI2IOKiryAmIFtBTVBFUlNBTkRdCitjaGFyIFx4MjcJKCAgMyAgIDcgKSAgIyAyNyDioYQgJyBbQVBPU1RST1BIRV0KK2NoYXIgXHgyOAkoMTIgICA2IDgpICAjIDI4IOKioyAoIFtMRUZUIFBBUkVOVEhFU0lTXQorY2hhciBceDI5CSggIDM0NSAgOCkgICMgMjkg4qKcICkgW1JJR0hUIFBBUkVOVEhFU0lTXQorY2hhciBceDJBCSggIDMgNSAgICkgICMgMkEg4qCUICogW0FTVEVSSVNLXQorY2hhciBceDJCCSggMjMgNSAgICkgICMgMkIg4qCWICsgW1BMVVMgU0lHTl0KK2NoYXIgXHgyQwkoIDIgICAgICApICAjIDJDIOKggiAsIFtDT01NQV0KK2NoYXIgXHgyRAkoICAzICA2ICApICAjIDJEIOKgpCAtIFtIWVBIRU4tTUlOVVNdCitjaGFyIFx4MkUJKCAgMyAgICAgKSAgIyAyRSDioIQgLiBbRlVMTCBTVE9QXQorY2hhciBceDJGCSggICAgIDY3ICkgICMgMkYg4qGgIC8gW1NPTElEVVNdCisjIEhpbmR1LUFyYWJpYyBudW1lcmFscyAgICAgIyAzMC0zOQorY2hhciBceDNBCSggMiAgNSAgICkgICMgM0Eg4qCSIDogW0NPTE9OXQorY2hhciBceDNCCSggMjMgICAgICkgICMgM0Ig4qCGIDsgW1NFTUlDT0xPTl0KK2NoYXIgXHgzQwkoIDIgNCA2IDgpICAjIDNDIOKiqiA8IFtMRVNTLVRIQU4gU0lHTl0KK2NoYXIgXHgzRAkoIDIzIDU2ICApICAjIDNEIOKgtiA9IFtFUVVBTFMgU0lHTl0KK2NoYXIgXHgzRQkoMSAzIDUgIDgpICAjIDNFIOKilSA+IFtHUkVBVEVSLVRIQU4gU0lHTl0KK2NoYXIgXHgzRgkoIDIgICA2ICApICAjIDNGIOKgoiA/IFtRVUVTVElPTiBNQVJLXQorY2hhciBceDQwCSgxICAgNTYgOCkgICMgNDAg4qKxIEAgW0NPTU1FUkNJQUwgQVRdCisjIHVwcGVyY2FzZSBMYXRpbiBhbHBoYWJldCAgIyA0MS01QQorY2hhciBceDVCCSgxMjMgNTYgOCkgICMgNUIg4qK3IFsgW0xFRlQgU1FVQVJFIEJSQUNLRVRdCitjaGFyIFx4NUMJKCAgMyAgICA4KSAgIyA1QyDiooQgXCBbUkVWRVJTRSBTT0xJRFVTXQorY2hhciBceDVECSggMjM0NTYgOCkgICMgNUQg4qK+IF0gW1JJR0hUIFNRVUFSRSBCUkFDS0VUXQorY2hhciBceDVFCSggICA0ICAgICkgICMgNUUg4qCIIF4gW0NJUkNVTUZMRVggQUNDRU5UXQorY2hhciBceDVGCSggIDMgNSAgOCkgICMgNUYg4qKUIF8gW0xPVyBMSU5FXQorY2hhciBceDYwCSggMiAgIDYgOCkgICMgNjAg4qKiIGAgW0dSQVZFIEFDQ0VOVF0KKyMgbG93ZXJjYXNlIExhdGluIGFscGhhYmV0ICAjIDYxLTdBCitjaGFyIFx4N0IJKDEyMyAgICA4KSAgIyA3QiDioocgeyBbTEVGVCBDVVJMWSBCUkFDS0VUXQorY2hhciBceDdDCSggICA0NTYgICkgICMgN0Mg4qC4IHwgW1ZFUlRJQ0FMIExJTkVdCitjaGFyIFx4N0QJKCAgIDQ1NjcgKSAgIyA3RCDiobggfSBbUklHSFQgQ1VSTFkgQlJBQ0tFVF0KK2NoYXIgXHg3RQkoICAgIDUgICApICAjIDdFIOKgkCB+IFtUSUxERV0KK2NoYXIgXHg3RgkoICAgIDUgNyApICAjIDdGIOKhkCAgIFtERUxFVEVdCitjaGFyIFx4QTEJKCAgMyAgNjcgKSAgIyBBMSDioaQgwqEgW0lOVkVSVEVEIEVYQ0xBTUFUSU9OIE1BUktdCitjaGFyIFx4QTIJKCAgICA1NiA4KSAgIyBBMiDiorAgwqIgW0NFTlQgU0lHTl0KK2NoYXIgXHhBMwkoICAgNCA2ICApICAjIEEzIOKgqCDCoyBbUE9VTkQgU0lHTl0KK2NoYXIgXHhBNAkoICAzICA2NzgpICAjIEE0IOKjpCDCpCBbQ1VSUkVOQ1kgU0lHTl0KK2NoYXIgXHhBNQkoICAgNCA2IDgpICAjIEE1IOKiqCDCpSBbWUVOIFNJR05dCitjaGFyIFx4QTYJKCAyICAgNjc4KSAgIyBBNiDio6IgwqYgW0JST0tFTiBCQVJdCitjaGFyIFx4QTcJKDEyMzQ1Njc4KSAgIyBBNyDio78gwqcgW1NFQ1RJT04gU0lHTl0KK2NoYXIgXHhBOAkoIDIgICAgNzgpICAjIEE4IOKjgiDCqCBbRElBRVJFU0lTXQorY2hhciBceEE5CSgxICA0ICA3ICkgICMgQTkg4qGJIMKpIFtDT1BZUklHSFQgU0lHTl0KK2NoYXIgXHhBQQkoICAgNCAgNyApICAjIEFBIOKhiCDCqiBbRkVNSU5JTkUgT1JESU5BTCBJTkRJQ0FUT1JdCitjaGFyIFx4QUIJKCAyMyAgNjcgKSAgIyBBQiDioaYgwqsgW0xFRlQtUE9JTlRJTkcgRE9VQkxFIEFOR0xFIFFVT1RBVElPTiBNQVJLXQorY2hhciBceEFDCSggMiAgNTY3OCkgICMgQUMg4qOyIMKsIFtOT1QgU0lHTl0KK2NoYXIgXHhBRAkoMTIgNCAgIDgpICAjIEFEIOKiiyDCrSBbU09GVCBIWVBIRU5dCitjaGFyIFx4QUUJKDEyMyA1ICA4KSAgIyBBRSDiopcgwq4gW1JFR0lTVEVSRUQgU0lHTl0KK2NoYXIgXHhBRgkoICAgIDUgIDgpICAjIEFGIOKikCDCryBbTUFDUk9OXQorY2hhciBceEIwCSggIDMgNTY3ICkgICMgQjAg4qG0IMKwIFtERUdSRUUgU0lHTl0KK2NoYXIgXHhCMQkoIDIzIDUgNzgpICAjIEIxIOKjliDCsSBbUExVUy1NSU5VUyBTSUdOXQorY2hhciBceEIyCSggMjMgICAgOCkgICMgQjIg4qKGIMKyIFtTVVBFUlNDUklQVCBUV09dCitjaGFyIFx4QjMJKCAyICA1ICA4KSAgIyBCMyDiopIgwrMgW1NVUEVSU0NSSVBUIFRIUkVFXQorY2hhciBceEI0CSggIDMgNSA3ICkgICMgQjQg4qGUIMK0IFtBQ1VURSBBQ0NFTlRdCitjaGFyIFx4QjUJKDEgMzQgICA4KSAgIyBCNSDioo0gwrUgW01JQ1JPIFNJR05dCitjaGFyIFx4QjYJKDEyMzQ1Njc4KSAgIyBCNiDio78gwrYgW1BJTENST1cgU0lHTl0KK2NoYXIgXHhCNwkoICAzICAgNyApICAjIEI3IOKhhCDCtyBbTUlERExFIERPVF0KK2NoYXIgXHhCOAkoMSAgNCAgIDgpICAjIEI4IOKiiSDCuCBbQ0VESUxMQV0KK2NoYXIgXHhCOQkoICAgNDUgNyApICAjIEI5IOKhmCDCuSBbU1VQRVJTQ1JJUFQgT05FXQorY2hhciBceEJBCSggIDM0IDYgOCkgICMgQkEg4qKsIMK6IFtNQVNDVUxJTkUgT1JESU5BTCBJTkRJQ0FUT1JdCitjaGFyIFx4QkIJKCAyMyAgNiA4KSAgIyBCQiDioqYgwrsgW1JJR0hULVBPSU5USU5HIERPVUJMRSBBTkdMRSBRVU9UQVRJT04gTUFSS10KK2NoYXIgXHhCQwkoMSAzICA2IDgpICAjIEJDIOKipSDCvCBbVlVMR0FSIEZSQUNUSU9OIE9ORSBRVUFSVEVSXQorY2hhciBceEJECSgxMjMgIDYgOCkgICMgQkQg4qKnIMK9IFtWVUxHQVIgRlJBQ1RJT04gT05FIEhBTEZdCitjaGFyIFx4QkUJKCAgMzQgIDc4KSAgIyBCRSDio4wgwr4gW1ZVTEdBUiBGUkFDVElPTiBUSFJFRSBRVUFSVEVSU10KK2NoYXIgXHhCRgkoICAzICAgIDgpICAjIEJGIOKihCDCvyBbSU5WRVJURUQgUVVFU1RJT04gTUFSS10KK2NoYXIgXHhDMAkoMTIgNCA2NyApICAjIEMwIOKhqyDDgCBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgQSBXSVRIIEdSQVZFXQorY2hhciBceEMxCSgxMjMgNTY3ICkgICMgQzEg4qG3IMOBIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBBIFdJVEggQUNVVEVdCitjaGFyIFx4QzIJKDEgICAgNjcgKSAgIyBDMiDioaEgw4IgW0xBVElOIENBUElUQUwgTEVUVEVSIEEgV0lUSCBDSVJDVU1GTEVYXQorY2hhciBceEMzCSggIDMgNTY3ICkgICMgQzMg4qG0IMODIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBBIFdJVEggVElMREVdCitjaGFyIFx4QzQJKCAgICA1NjcgKSAgIyBDNCDiobAgw4QgW0xBVElOIENBUElUQUwgTEVUVEVSIEEgV0lUSCBESUFFUkVTSVNdCitjaGFyIFx4QzUJKCAgMzQ1NjcgKSAgIyBDNSDiobwgw4UgW0xBVElOIENBUElUQUwgTEVUVEVSIEEgV0lUSCBSSU5HIEFCT1ZFXQorY2hhciBceEM2CSggICA0ICA3ICkgICMgQzYg4qGIIMOGIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBBRV0KK2NoYXIgXHhDNwkoMTIzNCA2NyApICAjIEM3IOKhryDDhyBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgQyBXSVRIIENFRElMTEFdCitjaGFyIFx4QzgJKCAyMzQgNjcgKSAgIyBDOCDioa4gw4ggW0xBVElOIENBUElUQUwgTEVUVEVSIEUgV0lUSCBHUkFWRV0KK2NoYXIgXHhDOQkoMTIzNDU2NyApICAjIEM5IOKhvyDDiSBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgRSBXSVRIIEFDVVRFXQorY2hhciBceENBCSgxMiAgIDY3ICkgICMgQ0Eg4qGjIMOKIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBFIFdJVEggQ0lSQ1VNRkxFWF0KK2NoYXIgXHhDQgkoMTIgICA2NzgpICAjIENCIOKjoyDDiyBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgRSBXSVRIIERJQUVSRVNJU10KK2NoYXIgXHhDQwkoMSAgNCA2NyApICAjIENDIOKhqSDDjCBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgSSBXSVRIIEdSQVZFXQorY2hhciBceENECSggIDM0ICA3ICkgICMgQ0Qg4qGMIMONIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBJIFdJVEggQUNVVEVdCitjaGFyIFx4Q0UJKDEgIDQgNjc4KSAgIyBDRSDio6kgw44gW0xBVElOIENBUElUQUwgTEVUVEVSIEkgV0lUSCBDSVJDVU1GTEVYXQorY2hhciBceENGCSgxMiA0NTY3ICkgICMgQ0Yg4qG7IMOPIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBJIFdJVEggRElBRVJFU0lTXQorY2hhciBceEQwCSggIDM0NSA3ICkgICMgRDAg4qGcIMOQIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBFVEhdCitjaGFyIFx4RDEJKDEyIDQ1Njc4KSAgIyBEMSDio7sgw5EgW0xBVElOIENBUElUQUwgTEVUVEVSIE4gV0lUSCBUSUxERV0KK2NoYXIgXHhEMgkoIDIgNDU2IDgpICAjIEQyIOKiuiDDkiBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgTyBXSVRIIEdSQVZFXQorY2hhciBceEQzCSggIDM0IDY3ICkgICMgRDMg4qGsIMOTIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBPIFdJVEggQUNVVEVdCitjaGFyIFx4RDQJKDEgIDQ1NjcgKSAgIyBENCDiobkgw5QgW0xBVElOIENBUElUQUwgTEVUVEVSIE8gV0lUSCBDSVJDVU1GTEVYXQorY2hhciBceEQ1CSggMiA0IDY3ICkgICMgRDUg4qGqIMOVIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBPIFdJVEggVElMREVdCitjaGFyIFx4RDYJKDEgIDQ1Njc4KSAgIyBENiDio7kgw5YgW0xBVElOIENBUElUQUwgTEVUVEVSIE8gV0lUSCBESUFFUkVTSVNdCitjaGFyIFx4RDcJKCAyMyAgNjc4KSAgIyBENyDio6Ygw5cgW01VTFRJUExJQ0FUSU9OIFNJR05dCitjaGFyIFx4RDgJKCAgMyA1NjcgKSAgIyBEOCDiobQgw5ggW0xBVElOIENBUElUQUwgTEVUVEVSIE8gV0lUSCBTVFJPS0VdCitjaGFyIFx4RDkJKDEgICA1NjcgKSAgIyBEOSDiobEgw5kgW0xBVElOIENBUElUQUwgTEVUVEVSIFUgV0lUSCBHUkFWRV0KK2NoYXIgXHhEQQkoIDIzNDU2NyApICAjIERBIOKhviDDmiBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgVSBXSVRIIEFDVVRFXQorY2hhciBceERCCSgxICAgNTY3OCkgICMgREIg4qOxIMObIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBVIFdJVEggQ0lSQ1VNRkxFWF0KK2NoYXIgXHhEQwkoMTIgIDU2NyApICAjIERDIOKhsyDDnCBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgVSBXSVRIIERJQUVSRVNJU10KK2NoYXIgXHhERAkoMTIgIDU2NzgpICAjIEREIOKjsyDDnSBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgWSBXSVRIIEFDVVRFXQorY2hhciBceERFCSggIDMgNTY3OCkgICMgREUg4qO0IMOeIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBUSE9STl0KK2NoYXIgXHhERgkoICAzNDU2IDgpICAjIERGIOKivCDDnyBbTEFUSU4gU01BTEwgTEVUVEVSIFNIQVJQIFNdCitjaGFyIFx4RTAJKDEyIDQgNiAgKSAgIyBFMCDioKsgw6AgW0xBVElOIFNNQUxMIExFVFRFUiBBIFdJVEggR1JBVkVdCitjaGFyIFx4RTEJKDEyMyA1NiAgKSAgIyBFMSDioLcgw6EgW0xBVElOIFNNQUxMIExFVFRFUiBBIFdJVEggQUNVVEVdCitjaGFyIFx4RTIJKDEgICAgNiAgKSAgIyBFMiDioKEgw6IgW0xBVElOIFNNQUxMIExFVFRFUiBBIFdJVEggQ0lSQ1VNRkxFWF0KK2NoYXIgXHhFMwkoICAzNDUgICApICAjIEUzIOKgnCDDoyBbTEFUSU4gU01BTEwgTEVUVEVSIEEgV0lUSCBUSUxERV0KK2NoYXIgXHhFNAkoICAzNDUgNzgpICAjIEU0IOKjnCDDpCBbTEFUSU4gU01BTEwgTEVUVEVSIEEgV0lUSCBESUFFUkVTSVNdCitjaGFyIFx4RTUJKCAgMzQ1Njc4KSAgIyBFNSDio7wgw6UgW0xBVElOIFNNQUxMIExFVFRFUiBBIFdJVEggUklORyBBQk9WRV0KK2NoYXIgXHhFNgkoICAgNCAgNzgpICAjIEU2IOKjiCDDpiBbTEFUSU4gU01BTEwgTEVUVEVSIEFFXQorY2hhciBceEU3CSgxMjM0IDYgICkgICMgRTcg4qCvIMOnIFtMQVRJTiBTTUFMTCBMRVRURVIgQyBXSVRIIENFRElMTEFdCitjaGFyIFx4RTgJKCAyMzQgNiAgKSAgIyBFOCDioK4gw6ggW0xBVElOIFNNQUxMIExFVFRFUiBFIFdJVEggR1JBVkVdCitjaGFyIFx4RTkJKDEyMzQ1NiAgKSAgIyBFOSDioL8gw6kgW0xBVElOIFNNQUxMIExFVFRFUiBFIFdJVEggQUNVVEVdCitjaGFyIFx4RUEJKDEyICAgNiAgKSAgIyBFQSDioKMgw6ogW0xBVElOIFNNQUxMIExFVFRFUiBFIFdJVEggQ0lSQ1VNRkxFWF0KK2NoYXIgXHhFQgkoMTIgNCA2IDgpICAjIEVCIOKiqyDDqyBbTEFUSU4gU01BTEwgTEVUVEVSIEUgV0lUSCBESUFFUkVTSVNdCitjaGFyIFx4RUMJKDEgIDQgNiAgKSAgIyBFQyDioKkgw6wgW0xBVElOIFNNQUxMIExFVFRFUiBJIFdJVEggR1JBVkVdCitjaGFyIFx4RUQJKCAgMzQgICAgKSAgIyBFRCDioIwgw60gW0xBVElOIFNNQUxMIExFVFRFUiBJIFdJVEggQUNVVEVdCitjaGFyIFx4RUUJKDEgIDQgNjc4KSAgIyBFRSDio6kgw64gW0xBVElOIFNNQUxMIExFVFRFUiBJIFdJVEggQ0lSQ1VNRkxFWF0KK2NoYXIgXHhFRgkoMTIgNDU2ICApICAjIEVGIOKguyDDryBbTEFUSU4gU01BTEwgTEVUVEVSIEkgV0lUSCBESUFFUkVTSVNdCitjaGFyIFx4RjAJKCAyMyA1NiA4KSAgIyBGMCDiorYgw7AgW0xBVElOIFNNQUxMIExFVFRFUiBFVEhdCitjaGFyIFx4RjEJKDEgMzQ1ICA4KSAgIyBGMSDiop0gw7EgW0xBVElOIFNNQUxMIExFVFRFUiBOIFdJVEggVElMREVdCitjaGFyIFx4RjIJKCAyIDQ1NiA4KSAgIyBGMiDiorogw7IgW0xBVElOIFNNQUxMIExFVFRFUiBPIFdJVEggR1JBVkVdCitjaGFyIFx4RjMJKCAgMzQgNiAgKSAgIyBGMyDioKwgw7MgW0xBVElOIFNNQUxMIExFVFRFUiBPIFdJVEggQUNVVEVdCitjaGFyIFx4RjQJKDEgIDQ1NiAgKSAgIyBGNCDioLkgw7QgW0xBVElOIFNNQUxMIExFVFRFUiBPIFdJVEggQ0lSQ1VNRkxFWF0KK2NoYXIgXHhGNQkoIDIgNCA2ICApICAjIEY1IOKgqiDDtSBbTEFUSU4gU01BTEwgTEVUVEVSIE8gV0lUSCBUSUxERV0KK2NoYXIgXHhGNgkoIDIgNCA2NzgpICAjIEY2IOKjqiDDtiBbTEFUSU4gU01BTEwgTEVUVEVSIE8gV0lUSCBESUFFUkVTSVNdCitjaGFyIFx4RjcJKCAyICA1NiAgKSAgIyBGNyDioLIgw7cgW0RJVklTSU9OIFNJR05dCitjaGFyIFx4RjgJKCAgIDQgNiA4KSAgIyBGOCDioqggw7ggW0xBVElOIFNNQUxMIExFVFRFUiBPIFdJVEggU1RST0tFXQorY2hhciBceEY5CSgxICAgNTYgICkgICMgRjkg4qCxIMO5IFtMQVRJTiBTTUFMTCBMRVRURVIgVSBXSVRIIEdSQVZFXQorY2hhciBceEZBCSggMjM0NTYgICkgICMgRkEg4qC+IMO6IFtMQVRJTiBTTUFMTCBMRVRURVIgVSBXSVRIIEFDVVRFXQorY2hhciBceEZCCSgxICAgNTYgOCkgICMgRkIg4qKxIMO7IFtMQVRJTiBTTUFMTCBMRVRURVIgVSBXSVRIIENJUkNVTUZMRVhdCitjaGFyIFx4RkMJKDEyICA1NiAgKSAgIyBGQyDioLMgw7wgW0xBVElOIFNNQUxMIExFVFRFUiBVIFdJVEggRElBRVJFU0lTXQorY2hhciBceEZECSgxMiAgNTYgOCkgICMgRkQg4qKzIMO9IFtMQVRJTiBTTUFMTCBMRVRURVIgWSBXSVRIIEFDVVRFXQorY2hhciBceEZFCSggIDMgICAgOCkgICMgRkUg4qKEIMO+IFtMQVRJTiBTTUFMTCBMRVRURVIgVEhPUk5dCitjaGFyIFx4RkYJKDEgMzQ1NiA4KSAgIyBGRiDior0gw78gW0xBVElOIFNNQUxMIExFVFRFUiBZIFdJVEggRElBRVJFU0lTXQorCitpbmNsdWRlIGNvbW1vbi50dGkKZGlmZiAtLWdpdCBhL1RhYmxlcy9UZXh0L3B1bmMtYWx0ZXJuYXRlLnR0aSBiL1RhYmxlcy9UZXh0L3B1bmMtYWx0ZXJuYXRlLnR0aQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NzJlYTZhCi0tLSAvZGV2L251bGwKKysrIGIvVGFibGVzL1RleHQvcHVuYy1hbHRlcm5hdGUudHRpCkBAIC0wLDAgKzEsNTMgQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyMgICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisjCisjIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyMKKyMgQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjIFRoaXMgQlJMVFRZIHRleHQgc3VidGFibGUgZGVmaW5lcyBhbHRlcm5hdGUgYnJhaWxsZSByZXByZXNlbnRhdGlvbnMgZm9yIHRoZQorIyBBU0NJSSBwdW5jdHVhdGlvbiBjaGFyYWN0ZXJzLgorCitjaGFyIFx4MjEJKCAyMyA1ICA4KSAgIyDiopYgISBbRVhDTEFNQVRJT04gTUFSS10KK2NoYXIgXHgyMgkoIDIzIDU2IDgpICAjIOKitiAiIFtRVU9UQVRJT04gTUFSS10KK2NoYXIgXHgyMwkoICAzNDU2IDgpICAjIOKivCAjIFtOVU1CRVIgU0lHTl0KK2NoYXIgXHgyNAkoMTIgNCA2IDgpICAjIOKiqyAkIFtET0xMQVIgU0lHTl0KK2NoYXIgXHgyNQkoMSAgNCA2IDgpICAjIOKiqSAlIFtQRVJDRU5UIFNJR05dCitjaGFyIFx4MjYJKCAyMzQgNiA4KSAgIyDioq4gJiBbQU1QRVJTQU5EXQorY2hhciBceDI3CSggIDMgICAgICkgICMg4qCEICcgW0FQT1NUUk9QSEVdCitjaGFyIFx4MjgJKCAyMyAgNiA4KSAgIyDioqYgKCBbTEVGVCBQQVJFTlRIRVNJU10KK2NoYXIgXHgyOQkoICAzIDU2IDgpICAjIOKitCApIFtSSUdIVCBQQVJFTlRIRVNJU10KK2NoYXIgXHgyQQkoICAzIDUgIDgpICAjIOKilCAqIFtBU1RFUklTS10KK2NoYXIgXHgyQgkoICAzNCA2IDgpICAjIOKirCArIFtQTFVTIFNJR05dCitjaGFyIFx4MkMJKCAyICAgICA4KSAgIyDiooIgLCBbQ09NTUFdCitjaGFyIFx4MkQJKCAgMyAgNiAgKSAgIyDioKQgLSBbSFlQSEVOLU1JTlVTXQorY2hhciBceDJFCSggMiAgNTYgOCkgICMg4qKyIC4gW0ZVTEwgU1RPUF0KK2NoYXIgXHgyRgkoICAzNCAgIDgpICAjIOKijCAvIFtTT0xJRFVTXQorY2hhciBceDNBCSggMiAgNSAgOCkgICMg4qKSIDogW0NPTE9OXQorY2hhciBceDNCCSggMjMgICAgOCkgICMg4qKGIDsgW1NFTUlDT0xPTl0KK2NoYXIgXHgzQwkoMTIgICA2IDgpICAjIOKioyA8IFtMRVNTLVRIQU4gU0lHTl0KK2NoYXIgXHgzRAkoMTIzNDU2IDgpICAjIOKivyA9IFtFUVVBTFMgU0lHTl0KK2NoYXIgXHgzRQkoICAzNDUgIDgpICAjIOKinCA+IFtHUkVBVEVSLVRIQU4gU0lHTl0KK2NoYXIgXHgzRgkoIDIgICA2IDgpICAjIOKioiA/IFtRVUVTVElPTiBNQVJLXQorY2hhciBceDQwCSggICA0ICA3ICkgICMg4qGIIEAgW0NPTU1FUkNJQUwgQVRdCitjaGFyIFx4NUIJKDEyMyA1NiA4KSAgIyDiorcgWyBbTEVGVCBTUVVBUkUgQlJBQ0tFVF0KK2NoYXIgXHg1QwkoMSAgICA2IDgpICAjIOKioSBcIFtSRVZFUlNFIFNPTElEVVNdCitjaGFyIFx4NUQJKCAyMzQ1NiA4KSAgIyDior4gXSBbUklHSFQgU1FVQVJFIEJSQUNLRVRdCitjaGFyIFx4NUUJKCAgIDQ1IDcgKSAgIyDioZggXiBbQ0lSQ1VNRkxFWCBBQ0NFTlRdCitjaGFyIFx4NUYJKCAgIDQ1NiAgKSAgIyDioLggXyBbTE9XIExJTkVdCitjaGFyIFx4NjAJKCAgIDQgICAgKSAgIyDioIggYCBbR1JBVkUgQUNDRU5UXQorY2hhciBceDdCCSggMjMgIDY3OCkgICMg4qOmIHsgW0xFRlQgQ1VSTFkgQlJBQ0tFVF0KK2NoYXIgXHg3QwkoMTIgIDU2IDgpICAjIOKisyB8IFtWRVJUSUNBTCBMSU5FXQorY2hhciBceDdECSggIDMgNTY3OCkgICMg4qO0IH0gW1JJR0hUIENVUkxZIEJSQUNLRVRdCitjaGFyIFx4N0UJKCAgIDQ1ICAgKSAgIyDioJggfiBbVElMREVdCmRpZmYgLS1naXQgYS9UYWJsZXMvVGV4dC9wdW5jLWJhc2ljLnR0aSBiL1RhYmxlcy9UZXh0L3B1bmMtYmFzaWMudHRpCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZhZjBhODIKLS0tIC9kZXYvbnVsbAorKysgYi9UYWJsZXMvVGV4dC9wdW5jLWJhc2ljLnR0aQpAQCAtMCwwICsxLDMzIEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisjICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorIworIyBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisjCisjIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisjCisjIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyMgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorIyBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyMKKyMgV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworIworIyBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIyBUaGlzIEJSTFRUWSB0ZXh0IHN1YnRhYmxlIGRlZmluZXMgdGhlIGJyYWlsbGUgcmVwcmVzZW50YXRpb25zIGZvciB0aGUgYmFzaWMKKyMgRW5nbGlzaCBwdW5jdHVhdGlvbiBtYXJrcy4KKworY2hhciBceDIxCSggMjMgNSAgICkgICMg4qCWICEgW0VYQ0xBTUFUSU9OIE1BUktdCitjaGFyIFx4MjIJKCAyMyA1NiAgKSAgIyDioLYgIiBbUVVPVEFUSU9OIE1BUktdCitjaGFyIFx4MjcJKCAgMyAgICAgKSAgIyDioIQgJyBbQVBPU1RST1BIRV0KK2NoYXIgXHgyOAkoIDIzICA2ICApICAjIOKgpiAoIFtMRUZUIFBBUkVOVEhFU0lTXQorY2hhciBceDI5CSggIDMgNTYgICkgICMg4qC0ICkgW1JJR0hUIFBBUkVOVEhFU0lTXQorY2hhciBceDJDCSggMiAgICAgICkgICMg4qCCICwgW0NPTU1BXQorY2hhciBceDJECSggIDMgIDYgICkgICMg4qCkIC0gW0hZUEhFTi1NSU5VU10KK2NoYXIgXHgyRQkoIDIgIDU2ICApICAjIOKgsiAuIFtGVUxMIFNUT1BdCitjaGFyIFx4M0EJKCAyICA1ICAgKSAgIyDioJIgOiBbQ09MT05dCitjaGFyIFx4M0IJKCAyMyAgICAgKSAgIyDioIYgOyBbU0VNSUNPTE9OXQorY2hhciBceDNGCSggMjMgIDYgICkgICMg4qCmID8gW1FVRVNUSU9OIE1BUktdCitjaGFyIFx4QTAJKCAgICAgICAgKSAgIyDioIAgwqAgW05PLUJSRUFLIFNQQUNFXQpkaWZmIC0tZ2l0IGEvVGFibGVzL1RleHQvcHVuYy10aWJldGFuLnR0aSBiL1RhYmxlcy9UZXh0L3B1bmMtdGliZXRhbi50dGkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWE4OWQwOQotLS0gL2Rldi9udWxsCisrKyBiL1RhYmxlcy9UZXh0L3B1bmMtdGliZXRhbi50dGkKQEAgLTAsMCArMSwyNiBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorIyAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyMKKyMgQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorIworIyBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorIworIyBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisjIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyMgbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisjCisjIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMgVGhpcyBCUkxUVFkgdGV4dCBzdWJ0YWJsZSBkZWZpbmVzIHRoZSBzdGFuZGFyZCBicmFpbGxlIHJlcHJlc2VudGF0aW9ucworIyBmb3IgVGliZXRhbiBwdW5jdHVhdGlvbiBtYXJrcy4KKyMKKyMgU8OpYmFzdGllbiBIaW5kZXJlciA8U2ViYXN0aWVuLkhpbmRlcmVyQGVucy1seW9uLm9yZz4KKworY2hhciBcdTBGMEIJKCAgMyAgICAgKSAgIyDioIQg4LyLIFtUSUJFVEFOIE1BUksgSU5URVJTWUxMQUJJQyBUU0hFR10KK2NoYXIgXHUwRjBECSgxMjM0NTY3OCkgICMg4qO/IOC8jSBbVElCRVRBTiBNQVJLIFNIQURdCisKZGlmZiAtLWdpdCBhL1RhYmxlcy9UZXh0L3JvLnR0YiBiL1RhYmxlcy9UZXh0L3JvLnR0YgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYzNkOWU1Ci0tLSAvZGV2L251bGwKKysrIGIvVGFibGVzL1RleHQvcm8udHRiCkBAIC0wLDAgKzEsNTcgQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyMgICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisjCisjIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyMKKyMgQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjIEJSTFRUWSBUZXh0IFRhYmxlIC0gUm9tYW5pYW4KKyMKKyMgU2FtdWVsIFRoaWJhdWx0IDxzYW11ZWwudGhpYmF1bHRAZW5zLWx5b24ub3JnPgorIyAKKyMgVGhpcyB0YWJsZSBpcyBiYXNlZCBvbiB0aGUgVW5lc2NvIHJlcG9ydCBvbiB0aGUgcHJvZ3Jlc3Mgb2YgdW5pZmljYXRpb24gb2YKKyMgYnJhaWxsZSB3cml0aW5nIMKrwqBMJ8OJQ1JJVFVSRSBCUkFJTExFIERBTlMgTEUgTU9OREXCoMK7LCBieSBTaXIgQ2x1dGhhCisjIE1BQ0tFTlpJRTogaHR0cDovL3VuZXNkb2MudW5lc2NvLm9yZy9pbWFnZXMvMDAxMy8wMDEzNTIvMTM1MjUxZm8ucGRmCisjIFRoZSBkb2N1bWVudCBpcyBkYXRlZCAxOTU0LCBzbyB0aGlzIHRhYmxlIG1heSBiZSBxdWl0ZSBvdXRkYXRlZC4KKworIyB0aGUgc3RhbmRhcmQgcmVwcmVzZW50YXRpb25zIGZvciB0aGUgbGV0dGVycyBvZiB0aGUgTGF0aW4gYWxwaGFiZXQKK2luY2x1ZGUgbHRyLWxhdGluLnR0aQorCisjIGxvd2VyY2FzZSBhY2NlbnRlZCBsZXR0ZXJzCitjaGFyIFx1MDEwMwkoMSAgICA2ICApICAjIOKgoSDEgyBbTEFUSU4gU01BTEwgTEVUVEVSIEEgV0lUSCBCUkVWRV0KK2NoYXIgXHhFMgkoMTIgICA2ICApICAjIOKgoyDDoiBbTEFUSU4gU01BTEwgTEVUVEVSIEEgV0lUSCBDSVJDVU1GTEVYXQorY2hhciBceEVFCSgxICA0IDYgICkgICMg4qCpIMOuIFtMQVRJTiBTTUFMTCBMRVRURVIgSSBXSVRIIENJUkNVTUZMRVhdCitjaGFyIFx1MDIxOQkoMSAgIDU2ICApICAjIOKgsSDImSBbTEFUSU4gU01BTEwgTEVUVEVSIFMgV0lUSCBDT01NQSBCRUxPV10KK2NoYXIgXHUwMjFCCSggMiA0IDYgICkgICMg4qCqIMibIFtMQVRJTiBTTUFMTCBMRVRURVIgVCBXSVRIIENPTU1BIEJFTE9XXQorCisjIHVwcGVyY2FzZSBhY2NlbnRlZCBsZXR0ZXJzCitjaGFyIFx4QzIJKDEyICAgNjcgKSAgIyDioaMgw4IgW0xBVElOIENBUElUQUwgTEVUVEVSIEEgV0lUSCBDSVJDVU1GTEVYXQorY2hhciBceENFCSgxICA0IDY3ICkgICMg4qGpIMOOIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBJIFdJVEggQ0lSQ1VNRkxFWF0KK2NoYXIgXHUwMTAyCSgxICAgIDY3ICkgICMg4qGhIMSCIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBBIFdJVEggQlJFVkVdCitjaGFyIFx1MDIxOAkoMSAgIDU2NyApICAjIOKhsSDImCBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgUyBXSVRIIENPTU1BIEJFTE9XXQorY2hhciBcdTAyMUEJKCAyIDQgNjcgKSAgIyDioaogyJogW0xBVElOIENBUElUQUwgTEVUVEVSIFQgV0lUSCBDT01NQSBCRUxPV10KKworIyB0aGUgbnVtYmVycyAwLTkgYXJlIHJlcHJlc2VudGVkIGJ5IHRoZSBsZXR0ZXJzIGosYS1pIHdpdGggZG90IDggYWRkZWQKK2luY2x1ZGUgbnVtLWRvdDgudHRpCisKK2luY2x1ZGUgcHVuYy1iYXNpYy50dGkKK2NoYXIgXHgzRgkoIDIgICA2ICApICAjIOKgoiA/IFtRVUVTVElPTiBNQVJLXQorCisjIGFsaWFzIHRoZSBsZXR0ZXJzIHdpdGggYSBjb21tYSBiZWxvdyB0byB0aGVpciBjZWRpbGxhIHZhcmlhbnRzLgorYWxpYXMgXHUwMTVGCVx1MDIxOQkjIOKgsSDFnyBbTEFUSU4gU01BTEwgTEVUVEVSIFMgV0lUSCBDRURJTExBXQorYWxpYXMgXHUwMTYzCVx1MDIxQgkjIOKgqiDFoyBbTEFUSU4gU01BTEwgTEVUVEVSIFQgV0lUSCBDRURJTExBXQorYWxpYXMgXHUwMTVFCVx1MDIxOAkjIOKhsSDFniBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgUyBXSVRIIENFRElMTEFdCithbGlhcyBcdTAxNjIJXHUwMjFBCSMg4qGqIMWiIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBUIFdJVEggQ0VESUxMQV0KKworaW5jbHVkZSBjb21tb24udHRpCmRpZmYgLS1naXQgYS9UYWJsZXMvVGV4dC9ydS50dGIgYi9UYWJsZXMvVGV4dC9ydS50dGIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDNmMmRhMgotLS0gL2Rldi9udWxsCisrKyBiL1RhYmxlcy9UZXh0L3J1LnR0YgpAQCAtMCwwICsxLDc2MCBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorIyAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyMKKyMgQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorIworIyBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorIworIyBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisjIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyMgbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisjCisjIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMgQlJMVFRZIFRleHQgVGFibGUgLSBSdXNzaWFuCisjIFRoaXMgaXMgYSBjb3B5IG9mIHJ1LmN0YiBmcm9tIExpYkxvdWlzLTMuMjAgLSBlZGl0ZWQgYXMgbmVlZGVkIGZvciBCUkxUVFkgc3ludGF4CisKKyMtaW5kZXgtbmFtZTogUnVzc2lhbiwgY29tcHV0ZXIKKyMtZGlzcGxheS1uYW1lOiBSdXNzaWFuIGNvbXB1dGVyIGJyYWlsbGUKKworIytsb2NhbGU6IHJ1CisjK3R5cGU6IGNvbXB1dGVyCisjK2RvdHM6IDgKKyMrZGlyZWN0aW9uOiBib3RoCisKKyMgQ29weXJpZ2h0IChDKSAxOTk1LTIwMDggYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorIyBDb3B5cmlnaHQgKEMpIDIwMjAtMjAyMSBieSBBbmRyZXkgWWFrdWJveQorIworIyAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgbGlibG91aXMuCisjCisjICBsaWJsb3VpcyBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisjICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworIyAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUKKyMgIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisjCisjICBsaWJsb3VpcyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyMgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUKKyMgIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisjICBMaWNlbnNlIGFsb25nIHdpdGggbGlibG91aXMuIElmIG5vdCwgc2VlCisjICA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKyMgUnVzc2lhbiBDb21wdXRlciAoOC1Eb3RzKSBCcmFpbGxlIFRhYmxlCisjIGJ5IEhhbnMgU2Nob3UgPGNobG9yQHNjaG91LmRrPiBhbmQgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPgorIyBJbXByb3ZlZCBieSBBbmRyZXkgWWFrdWJveSA8YW5kcmV3aWEyMDAyQHlhbmRleC5ydT4KKworIyBUaGlzIGlzIHRoZSBSdXNzaWFuIGNvbXB1dGVyIGJyYWlsbGUgdGFibGUuIEl0IGlzIGJhc2VkIG9uIHRoZSBVbmljb2RlIGNoYXJhY3RlciBzZXQuCisjCisjIEFzIHRoZSBSdXNzaWFuIGN5cmlsbGljIGRlZmluaXRpb24gY29uZmxpY3RzIHdpdGggdGhlIGxhdGluIGRlZmluaXRpb24sIHNvbWUKKyMgZGVjaXNpb25zIGhhZCB0byBiZSB0YWtlbi4gUnVzc2lhbnMgbmVlZCB0byB0eXBlIGJvdGggbGF0aW4gZm9yIHRoZSBjb21tYW5kCisjIHByb21wdCBhbmQgY3lyaWxsaWMgd2hpbGUgcmVhZGluZyBhbmQgd3JpdGluZyBkb2N1bWVudHMgYW5kIG1haWwuCisjCisjIEluIHRoZSBmb2xsb3dpbmcsIGxhdGluIGxldHRlcnMgYXJlIHF1b3RlZCB3aXRoIGFwb3N0cm9waGVzIGxpa2UgaW4gJ2EnLCBhbmQKKyMgY3lyaWxsaWMgbGV0dGVycyBhcmUgZW5jbG9zZWQgd2l0aGluIGJyYWNrZXRzIGxpa2UgaW4gW2FdLgorIworIyBEb3QgMSBpbiB0aGUgY3lyaWxsaWMgZGVmaW5pdGlvbiBpcyB0aGUgY3lyaWxsaWMgbGV0dGVyIHdoaWNoIGxvb2tzIGFuZAorIyBzb3VuZHMgbGlrZSAnYScuIFRoZSBwcm9ibGVtIGlzIHRoYXQgaW4gdGhlIFVuaWNvZGUgY2hhcmFjdGVyIHNldCwgdGhlcmUgaXMKKyMgYm90aCBhIGxhdGluICdhJyBhbmQgYSBjeXJpbGxpYyBbYV0uIEluIGRlY2ltYWwsIHRoZWlyIGNoYXJhY3RlciBudW1iZXJzIGFyZQorIyA5NyBhbmQgMTkzIHJlc3BlY3RpdmVseS4gIFRvIGhhbmRsZSBjb25mbGljdHMgbGlrZSB0aGVzZSwgd2UgaGF2ZSBwcmlvcml0aXplZAorIyB3aGljaCBjaGFyYWN0ZXJzIGFyZSBtb3N0IGltcG9ydGFudCB0byBtYXRjaCB0aGUgc3RhbmRhcmQuCisjCisjIFJVTEVTOgorIworIyAxLiBBbGwgY3lyaWxsaWMgY2hhcmFjdGVycyBtdXN0IGZvbGxvdyB0aGUgUnVzc2lhbiBzdGFuZGFyZC4gVW5pY29kZQorIyAgICBjaGFyYWN0ZXIgMTkzIFthXSBtdXN0IGJlIGRvdC0xLCBhbmQgc28gb24uCisjIDIuIENhcGl0YWwgY3lyaWxsaWMgbGV0dGVycyBoYXZlIGRvdCA3IG9uLgorIyAzLiBUaGUgbGF0aW4gYWxwaGFiZXQgaXMgaW1wbGVtZW50ZWQgdG8gZm9sbG93IHRoZSBpbnRlcm5hdGlvbmFsIHN0YW5kYXJkCisjICAgIGV4Y2VwdCBpdCBoYXMgZG90IDggb24uCisjIDQuIENhcGl0YWwgbGF0aW4gbGV0dGVycyBoYXZlIGRvdHMgNyBhbmQgOCBvbi4KKyMgNS4gT3RoZXIgYWxwaGFiZXRzIGFuZCBkZWFjcml0aWNzIGFyZSBiYXNpY2FsbHkgaW1wbGVtZW50ZWQgdG8gZm9sbG93IHRoZSBpbnRlcm5hdGlvbmFsIHN0YW5kYXJkCisjICAgIHdpdGggcmFyZSBleGNlcHRpb25zLiBEb3RzIDcgYW5kIDggYXJlIGFsc28gYWRkZWQgdG8gdGhlc2UgbGV0dGVycworIyA2LiBOdW1iZXJzIGFyZSBkZWZpbmVkIGFzIGluIHRoZSBBbWVyaWNhbiBzdGFuZGFyZC4gVGhpcyBtZWFucyBkb3QtMiBmb3IKKyMgICAgbnVtYmVyICcxJywgYW5kIHNvIG9uLgorIyA3LiBTcGVjaWFsIGNoYXJhY3RlcnMgbGlrZSAhIiPCpCUmLygpPT8gZm9sbG93IHRoZSBzdGFuZGFyZCB0aGF0J3MgYWNjZXB0ZWQgaW4KKyMgICAgUnVzc2lhbiBjb21wdXRlciBCcmFpbGxlIHRhYmxlcyBpbiBzb21lIHByb2dyYW1zLCBzdWNoIGFzIEpBV1MsIFRTUyBhbmQKKyMgICAgb3RoZXJzLgorCisjIENvbW1lbnRzIGZyb20gUnVzc2lhbnMgYXJlIHZlcnkgd2VsY29tZS4KKworIy1tYWludGFpbmVyLW5hbWU6IEFuZHJleSBZYWt1Ym95CisKKyMgR2VuZXJhbAorY2hhciBccyAwCQlTUEFDRQorY2hhciBcdCAwCQlDSEFSQUNURVIgVEFCVUxBVElPTgorY2hhciBcbiA3OAkJTElORSBGRUVEIChMRikKK2NoYXIgXHhhMCAwCQlOTy1CUkVBSyBTUEFDRQorY2hhciBcdiAwCQlMSU5FIFRBQlVMQVRJT04KK2NoYXIgXGYgMAkJRk9STSBGRUVEIChGRikKK2NoYXIgXHIgMAkJQ0FSUklBR0UgUkVUVVJOIChDUikKK2NoYXIgISA1CQlFWENMQU1BVElPTiBNQVJLCitjaGFyICIgNAkJUVVPVEFUSU9OIE1BUksKK2NoYXIgIyAzNDU2CQlOVU1CRVIgU0lHTgorY2hhciAkIDQ2NwkJRE9MTEFSIFNJR04KK2NoYXIgJSAxNDYJCVBFUkNFTlQgU0lHTgorY2hhciAmIDEyMzQ2NzgJCUFNUEVSU0FORAorY2hhciAnIDQ3CQlBUE9TVFJPUEhFCitjaGFyICggMTI2CQlMRUZUIFBBUkVOVEhFU0lTCitjaGFyICkgMzQ1CQlSSUdIVCBQQVJFTlRIRVNJUworY2hhciAqIDM1NwkJQVNURVJJU0sKK2NoYXIgKyAyMzU3CQlQTFVTIFNJR04KK2NoYXIgLCA2CQlDT01NQQorY2hhciAtIDM2CQlIWVBIRU4tTUlOVVMKK2NoYXIgLiAzCQlGVUxMIFNUT1AKK2NoYXIgLyAzNAkJU09MSURVUworIyBkaWdpdHMKK2luY2x1ZGUgbnVtLW5lbWV0aC50dGkKK2NoYXIgOiA0NgkJQ09MT04KK2NoYXIgOyAyMzcJCVNFTUlDT0xPTgorY2hhciA8IDU2CQlMRVNTLVRIQU4gU0lHTgorY2hhciA9IDEyMzQ1NgkJRVFVQUxTIFNJR04KK2NoYXIgPiA0NQkJR1JFQVRFUi1USEFOIFNJR04KK2NoYXIgPyAxNDU2CQlRVUVTVElPTiBNQVJLCitjaGFyIEAgMzQ1NwkJQ09NTUVSQ0lBTCBBVAorY2hhciBBIDE3OAkJTEFUSU4gQ0FQSVRBTCBMRVRURVIgQQorY2hhciBCIDEyNzgJCUxBVElOIENBUElUQUwgTEVUVEVSIEIKK2NoYXIgQyAxNDc4CQlMQVRJTiBDQVBJVEFMIExFVFRFUiBDCitjaGFyIEQgMTQ1NzgJCUxBVElOIENBUElUQUwgTEVUVEVSIEQKK2NoYXIgRSAxNTc4CQlMQVRJTiBDQVBJVEFMIExFVFRFUiBFCitjaGFyIEYgMTI0NzgJCUxBVElOIENBUElUQUwgTEVUVEVSIEYKK2NoYXIgRyAxMjQ1NzgJCUxBVElOIENBUElUQUwgTEVUVEVSIEcKK2NoYXIgSCAxMjU3OAkJTEFUSU4gQ0FQSVRBTCBMRVRURVIgSAorY2hhciBJIDI0NzgJCUxBVElOIENBUElUQUwgTEVUVEVSIEkKK2NoYXIgSiAyNDU3OAkJTEFUSU4gQ0FQSVRBTCBMRVRURVIgSgorY2hhciBLIDEzNzgJCUxBVElOIENBUElUQUwgTEVUVEVSIEsKK2NoYXIgTCAxMjM3OAkJTEFUSU4gQ0FQSVRBTCBMRVRURVIgTAorY2hhciBNIDEzNDc4CQlMQVRJTiBDQVBJVEFMIExFVFRFUiBNCitjaGFyIE4gMTM0NTc4CQlMQVRJTiBDQVBJVEFMIExFVFRFUiBOCitjaGFyIE8gMTM1NzgJCUxBVElOIENBUElUQUwgTEVUVEVSIE8KK2NoYXIgUCAxMjM0NzgJCUxBVElOIENBUElUQUwgTEVUVEVSIFAKK2NoYXIgUSAxMjM0NTc4CQlMQVRJTiBDQVBJVEFMIExFVFRFUiBRCitjaGFyIFIgMTIzNTc4CQlMQVRJTiBDQVBJVEFMIExFVFRFUiBSCitjaGFyIFMgMjM0NzgJCUxBVElOIENBUElUQUwgTEVUVEVSIFMKK2NoYXIgVCAyMzQ1NzgJCUxBVElOIENBUElUQUwgTEVUVEVSIFQKK2NoYXIgVSAxMzY3OAkJTEFUSU4gQ0FQSVRBTCBMRVRURVIgVQorY2hhciBWIDEyMzY3OAkJTEFUSU4gQ0FQSVRBTCBMRVRURVIgVgorY2hhciBXIDI0NTY3OAkJTEFUSU4gQ0FQSVRBTCBMRVRURVIgVworY2hhciBYIDEzNDY3OAkJTEFUSU4gQ0FQSVRBTCBMRVRURVIgWAorY2hhciBZIDEzNDU2NzgJCUxBVElOIENBUElUQUwgTEVUVEVSIFkKK2NoYXIgWiAxMzU2NzgJCUxBVElOIENBUElUQUwgTEVUVEVSIFoKK2NoYXIgWyAxMjM1Njc4CQlMRUZUIFNRVUFSRSBCUkFDS0VUCitjaGFyIFxcIDM0NzgJCVJFVkVSU0UgU09MSURVUworY2hhciBdIDIzNDU2NzgJCVJJR0hUIFNRVUFSRSBCUkFDS0VUCitjaGFyIF4gNDU3OAkJQ0lSQ1VNRkxFWCBBQ0NFTlQKK2NoYXIgXyA0NTYJCUxPVyBMSU5FCitjaGFyIGAgMzQ2CQlHUkFWRSBBQ0NFTlQKK2NoYXIgYSAxOAkJTEFUSU4gU01BTEwgTEVUVEVSIEEKK2NoYXIgYiAxMjgJCUxBVElOIFNNQUxMIExFVFRFUiBCCitjaGFyIGMgMTQ4CQlMQVRJTiBTTUFMTCBMRVRURVIgQworY2hhciBkIDE0NTgJCUxBVElOIFNNQUxMIExFVFRFUiBECitjaGFyIGUgMTU4CQlMQVRJTiBTTUFMTCBMRVRURVIgRQorY2hhciBmIDEyNDgJCUxBVElOIFNNQUxMIExFVFRFUiBGCitjaGFyIGcgMTI0NTgJCUxBVElOIFNNQUxMIExFVFRFUiBHCitjaGFyIGggMTI1OAkJTEFUSU4gU01BTEwgTEVUVEVSIEgKK2NoYXIgaSAyNDgJCUxBVElOIFNNQUxMIExFVFRFUiBJCitjaGFyIGogMjQ1OAkJTEFUSU4gU01BTEwgTEVUVEVSIEoKK2NoYXIgayAxMzgJCUxBVElOIFNNQUxMIExFVFRFUiBLCitjaGFyIGwgMTIzOAkJTEFUSU4gU01BTEwgTEVUVEVSIEwKK2NoYXIgbSAxMzQ4CQlMQVRJTiBTTUFMTCBMRVRURVIgTQorY2hhciBuIDEzNDU4CQlMQVRJTiBTTUFMTCBMRVRURVIgTgorY2hhciBvIDEzNTgJCUxBVElOIFNNQUxMIExFVFRFUiBPCitjaGFyIHAgMTIzNDgJCUxBVElOIFNNQUxMIExFVFRFUiBQCitjaGFyIHEgMTIzNDU4CQlMQVRJTiBTTUFMTCBMRVRURVIgUQorY2hhciByIDEyMzU4CQlMQVRJTiBTTUFMTCBMRVRURVIgUgorY2hhciBzIDIzNDgJCUxBVElOIFNNQUxMIExFVFRFUiBTCitjaGFyIHQgMjM0NTgJCUxBVElOIFNNQUxMIExFVFRFUiBUCitjaGFyIHUgMTM2OAkJTEFUSU4gU01BTEwgTEVUVEVSIFUKK2NoYXIgdiAxMjM2OAkJTEFUSU4gU01BTEwgTEVUVEVSIFYKK2NoYXIgdyAyNDU2OAkJTEFUSU4gU01BTEwgTEVUVEVSIFcKK2NoYXIgeCAxMzQ2OAkJTEFUSU4gU01BTEwgTEVUVEVSIFgKK2NoYXIgeSAxMzQ1NjgJCUxBVElOIFNNQUxMIExFVFRFUiBZCitjaGFyIHogMTM1NjgJCUxBVElOIFNNQUxMIExFVFRFUiBaCitjaGFyIHsgMTI2NzgJCUxFRlQgQ1VSTFkgQlJBQ0tFVAorY2hhciB8IDQ1NjcJCVZFUlRJQ0FMIExJTkUKK2NoYXIgfSAzNDU3OAkJUklHSFQgQ1VSTFkgQlJBQ0tFVAorY2hhciB+IDEyNDU2CQlUSUxERQorY2hhciBceGE5IDEyMzQ2OAkJQ09QWVJJR0hUIFNJR04KK2NoYXIgXHhiMCA0NTY4CQlERUdSRUUgU0lHTgorY2hhciBceGI5IDE4CQlTVVBFUlNDUklQVCBPTkUKK2NoYXIgXHhiMiAxMjgJCVNVUEVSU0NSSVBUIFRXTworY2hhciBceGIzIDE0OAkJU1VQRVJTQ1JJUFQgVEhSRUUKK2NoYXIgXHhiNyAzNwkJTUlERExFIERPVAorY2hhciBceGY3IDEyNTY3OAkJRElWSVNJT04gU0lHTgorIyBDeXJpbGxpYyBhbHBoYWJldAorY2hhciBcdTA0MDEgMTY3CQlDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBJTworY2hhciBcdTA0MTAgMTcJCUNZUklMTElDIENBUElUQUwgTEVUVEVSIEEKK2NoYXIgXHUwNDExIDEyNwkJQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgQkUKK2NoYXIgXHUwNDEyIDI0NTY3CQlDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBWRQorY2hhciBcdTA0MTMgMTI0NTcJCUNZUklMTElDIENBUElUQUwgTEVUVEVSIEdIRQorY2hhciBcdTA0MTQgMTQ1NwkJQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgREUKK2NoYXIgXHUwNDE1IDE1NwkJQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgSUUKK2NoYXIgXHUwNDE2IDI0NTcJCUNZUklMTElDIENBUElUQUwgTEVUVEVSIFpIRQorY2hhciBcdTA0MTcgMTM1NjcJCUNZUklMTElDIENBUElUQUwgTEVUVEVSIFpFCitjaGFyIFx1MDQxOCAyNDcJCUNZUklMTElDIENBUElUQUwgTEVUVEVSIEkKK2NoYXIgXHUwNDE5IDEyMzQ2NwkJQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgU0hPUlQgSQorY2hhciBcdTA0MWEgMTM3CQlDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBLQQorY2hhciBcdTA0MWIgMTIzNwkJQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgRUwKK2NoYXIgXHUwNDFjIDEzNDcJCUNZUklMTElDIENBUElUQUwgTEVUVEVSIEVNCitjaGFyIFx1MDQxZCAxMzQ1NwkJQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgRU4KK2NoYXIgXHUwNDFlIDEzNTcJCUNZUklMTElDIENBUElUQUwgTEVUVEVSIE8KK2NoYXIgXHUwNDFmIDEyMzQ3CQlDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBQRQorY2hhciBcdTA0MjAgMTIzNTcJCUNZUklMTElDIENBUElUQUwgTEVUVEVSIEVSCitjaGFyIFx1MDQyMSAyMzQ3CQlDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBFUworY2hhciBcdTA0MjIgMjM0NTcJCUNZUklMTElDIENBUElUQUwgTEVUVEVSIFRFCitjaGFyIFx1MDQyMyAxMzY3CQlDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBVCitjaGFyIFx1MDQyNCAxMjQ3CQlDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBFRgorY2hhciBcdTA0MjUgMTI1NwkJQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgSEEKK2NoYXIgXHUwNDI2IDE0NwkJQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgVFNFCitjaGFyIFx1MDQyNyAxMjM0NTcJCUNZUklMTElDIENBUElUQUwgTEVUVEVSIENIRQorY2hhciBcdTA0MjggMTU2NwkJQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgU0hBCitjaGFyIFx1MDQyOSAxMzQ2NwkJQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgU0hDSEEKK2NoYXIgXHUwNDJhIDEyMzU2NwkJQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgSEFSRCBTSUdOCitjaGFyIFx1MDQyYiAyMzQ2NwkJQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgWUVSVQorY2hhciBcdTA0MmMgMjM0NTY3CQlDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBTT0ZUIFNJR04KK2NoYXIgXHUwNDJkIDI0NjcJCUNZUklMTElDIENBUElUQUwgTEVUVEVSIEUKK2NoYXIgXHUwNDJlIDEyNTY3CQlDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBZVQorY2hhciBcdTA0MmYgMTI0NjcJCUNZUklMTElDIENBUElUQUwgTEVUVEVSIFlBCitjaGFyIFx1MDQzMCAxCQlDWVJJTExJQyBTTUFMTCBMRVRURVIgQQorY2hhciBcdTA0MzEgMTIJCUNZUklMTElDIFNNQUxMIExFVFRFUiBCRQorY2hhciBcdTA0MzIgMjQ1NgkJQ1lSSUxMSUMgU01BTEwgTEVUVEVSIFZFCitjaGFyIFx1MDQzMyAxMjQ1CQlDWVJJTExJQyBTTUFMTCBMRVRURVIgR0hFCitjaGFyIFx1MDQzNCAxNDUJCUNZUklMTElDIFNNQUxMIExFVFRFUiBERQorY2hhciBcdTA0MzUgMTUJCUNZUklMTElDIFNNQUxMIExFVFRFUiBJRQorY2hhciBcdTA0MzYgMjQ1CQlDWVJJTExJQyBTTUFMTCBMRVRURVIgWkhFCitjaGFyIFx1MDQzNyAxMzU2CQlDWVJJTExJQyBTTUFMTCBMRVRURVIgWkUKK2NoYXIgXHUwNDM4IDI0CQlDWVJJTExJQyBTTUFMTCBMRVRURVIgSQorY2hhciBcdTA0MzkgMTIzNDYJCUNZUklMTElDIFNNQUxMIExFVFRFUiBTSE9SVCBJCitjaGFyIFx1MDQzYSAxMwkJQ1lSSUxMSUMgU01BTEwgTEVUVEVSIEtBCitjaGFyIFx1MDQzYiAxMjMJCUNZUklMTElDIFNNQUxMIExFVFRFUiBFTAorY2hhciBcdTA0M2MgMTM0CQlDWVJJTExJQyBTTUFMTCBMRVRURVIgRU0KK2NoYXIgXHUwNDNkIDEzNDUJCUNZUklMTElDIFNNQUxMIExFVFRFUiBFTgorY2hhciBcdTA0M2UgMTM1CQlDWVJJTExJQyBTTUFMTCBMRVRURVIgTworY2hhciBcdTA0M2YgMTIzNAkJQ1lSSUxMSUMgU01BTEwgTEVUVEVSIFBFCitjaGFyIFx1MDQ0MCAxMjM1CQlDWVJJTExJQyBTTUFMTCBMRVRURVIgRVIKK2NoYXIgXHUwNDQxIDIzNAkJQ1lSSUxMSUMgU01BTEwgTEVUVEVSIEVTCitjaGFyIFx1MDQ0MiAyMzQ1CQlDWVJJTExJQyBTTUFMTCBMRVRURVIgVEUKK2NoYXIgXHUwNDQzIDEzNgkJQ1lSSUxMSUMgU01BTEwgTEVUVEVSIFUKK2NoYXIgXHUwNDQ0IDEyNAkJQ1lSSUxMSUMgU01BTEwgTEVUVEVSIEVGCitjaGFyIFx1MDQ0NSAxMjUJCUNZUklMTElDIFNNQUxMIExFVFRFUiBIQQorY2hhciBcdTA0NDYgMTQJCUNZUklMTElDIFNNQUxMIExFVFRFUiBUU0UKK2NoYXIgXHUwNDQ3IDEyMzQ1CQlDWVJJTExJQyBTTUFMTCBMRVRURVIgQ0hFCitjaGFyIFx1MDQ0OCAxNTYJCUNZUklMTElDIFNNQUxMIExFVFRFUiBTSEEKK2NoYXIgXHUwNDQ5IDEzNDYJCUNZUklMTElDIFNNQUxMIExFVFRFUiBTSENIQQorY2hhciBcdTA0NGEgMTIzNTYJCUNZUklMTElDIFNNQUxMIExFVFRFUiBIQVJEIFNJR04KK2NoYXIgXHUwNDRiIDIzNDYJCUNZUklMTElDIFNNQUxMIExFVFRFUiBZRVJVCitjaGFyIFx1MDQ0YyAyMzQ1NgkJQ1lSSUxMSUMgU01BTEwgTEVUVEVSIFNPRlQgU0lHTgorY2hhciBcdTA0NGQgMjQ2CQlDWVJJTExJQyBTTUFMTCBMRVRURVIgRQorY2hhciBcdTA0NGUgMTI1NgkJQ1lSSUxMSUMgU01BTEwgTEVUVEVSIFlVCitjaGFyIFx1MDQ0ZiAxMjQ2CQlDWVJJTExJQyBTTUFMTCBMRVRURVIgWUEKK2NoYXIgXHUwNDUxIDE2CQlDWVJJTExJQyBTTUFMTCBMRVRURVIgSU8KK2NoYXIgXHUwNDA0IDM0NTcJCUNZUklMTElDIENBUElUQUwgTEVUVEVSIFVLUkFJTklBTiBJRQorY2hhciBcdTA0MDYgMTM0NTY3CQlDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBCWUVMT1JVU1NJQU4tVUtSQUlOSUFOIEkKK2NoYXIgXHUwNDA3IDE0NTY3CQlDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBZSQorY2hhciBcdTA0MDggMTM0NTY3CQlDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBKRQorY2hhciBcdTA0MDkgMTI2NwkJQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgTEpFCitjaGFyIFx1MDQwYSAxMjQ2NwkJQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgTkpFCitjaGFyIFx1MDQwZSAzNDY3CQlDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBTSE9SVCBVCitjaGFyIFx1MDQ1MiAxNDU2CQlDWVJJTExJQyBTTUFMTCBMRVRURVIgREpFCitjaGFyIFx1MDQ1NCAzNDUJCUNZUklMTElDIFNNQUxMIExFVFRFUiBVS1JBSU5JQU4gSUUKK2NoYXIgXHUwNDU2IDEzNDU2CQlDWVJJTExJQyBTTUFMTCBMRVRURVIgQllFTE9SVVNTSUFOLVVLUkFJTklBTiBJCitjaGFyIFx1MDQ1NyAxNDU2CQlDWVJJTExJQyBTTUFMTCBMRVRURVIgWUkKK2NoYXIgXHUwNDU4IDEzNDU2CQlDWVJJTExJQyBTTUFMTCBMRVRURVIgSkUKK2NoYXIgXHUwNDU5IDEyNgkJQ1lSSUxMSUMgU01BTEwgTEVUVEVSIExKRQorY2hhciBcdTA0NWEgMTI0NgkJQ1lSSUxMSUMgU01BTEwgTEVUVEVSIE5KRQorY2hhciBcdTA0NWUgMzQ2CQlDWVJJTExJQyBTTUFMTCBMRVRURVIgU0hPUlQgVQorY2hhciBcdTA0NjIgMzQ1NwkJQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgWUFUCitjaGFyIFx1MDQ2MyAzNDUJCUNZUklMTElDIFNNQUxMIExFVFRFUiBZQVQKK2NoYXIgXHUwNDY2IDE3CQlDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBMSVRUTEUgWVVTCitjaGFyIFx1MDQ2NyAxCQlDWVJJTExJQyBTTUFMTCBMRVRURVIgTElUVExFIFlVUworY2hhciBcdTA0NmEgMTI0NTY3CQlDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBCSUcgWVVTCitjaGFyIFx1MDQ2YiAxMjQ1NgkJQ1lSSUxMSUMgU01BTEwgTEVUVEVSIEJJRyBZVVMKK2NoYXIgXHUwNDcyIDEyMzY3CQlDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBGSVRBCitjaGFyIFx1MDQ3MyAxMjM2CQlDWVJJTExJQyBTTUFMTCBMRVRURVIgRklUQQorY2hhciBcdTA0NzQgMTQ1NjcJCUNZUklMTElDIENBUElUQUwgTEVUVEVSIElaSElUU0EKK2NoYXIgXHUwNDc1IDE0NTYJCUNZUklMTElDIFNNQUxMIExFVFRFUiBJWkhJVFNBCitjaGFyIFx1MDQ3OSAzNDY3CQlDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBVSworY2hhciBcdTA0NzkgMzQ2CQlDWVJJTExJQyBTTUFMTCBMRVRURVIgVUsKK2NoYXIgXHUwNDg0IDQ3OAkJQ09NQklOSU5HIENZUklMTElDIFBBTEFUQUxJWkFUSU9OCitjaGFyIFx1MDQ5MCAxMjQ1NjcJCUNZUklMTElDIENBUElUQUwgTEVUVEVSIEdIRSBXSVRIIFVQVFVSTgorY2hhciBcdTA0OTEgMTI0NTYJCUNZUklMTElDIFNNQUxMIExFVFRFUiBHSEUgV0lUSCBVUFRVUk4KK2NoYXIgXHUwNDkyIDEyNDU2NwkJQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgR0hFIFdJVEggU1RST0tFCitjaGFyIFx1MDQ5MyAxMjQ1NgkJQ1lSSUxMSUMgU01BTEwgTEVUVEVSIEdIRSBXSVRIIFNUUk9LRQorY2hhciBcdTA0OTggMzQ2NwkJQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgWkUgV0lUSCBERVNDRU5ERVIKK2NoYXIgXHUwNDk5IDM0NgkJQ1lSSUxMSUMgU01BTEwgTEVUVEVSIFpFIFdJVEggREVTQ0VOREVSCitjaGFyIFx1MDQ5YSAxMzQ1NjcJCUNZUklMTElDIENBUElUQUwgTEVUVEVSIEtBIFdJVEggREVTQ0VOREVSCitjaGFyIFx1MDQ5YiAxMzQ1NgkJQ1lSSUxMSUMgU01BTEwgTEVUVEVSIEtBIFdJVEggREVTQ0VOREVSCitjaGFyIFx1MDRhMCAxNDY3CQlDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBCQVNIS0lSIEtBCitjaGFyIFx1MDRhMSAxNDYJCUNZUklMTElDIFNNQUxMIExFVFRFUiBCQVNIS0lSIEtBCitjaGFyIFx1MDRhMiAxNDU2NwkJQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgRU4gV0lUSCBERVNDRU5ERVIKK2NoYXIgXHUwNGEzIDE0NTYJCUNZUklMTElDIFNNQUxMIExFVFRFUiBFTiBXSVRIIERFU0NFTkRFUgorY2hhciBcdTA0YWEgMzQ3CQlDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBFUyBXSVRIIERFU0NFTkRFUgorY2hhciBcdTA0YWIgMzQJCUNZUklMTElDIFNNQUxMIExFVFRFUiBFUyBXSVRIIERFU0NFTkRFUgorY2hhciBcdTA0YWUgMTM0NTY3CQlDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBTVFJBSUdIVCBVCitjaGFyIFx1MDRhZiAxMzQ1NgkJQ1lSSUxMSUMgU01BTEwgTEVUVEVSIFNUUkFJR0hUIFUKK2NoYXIgXHUwNGIyIDE0NTY3CQlDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBIQSBXSVRIIERFU0NFTkRFUgorY2hhciBcdTA0YjMgMTQ1NgkJQ1lSSUxMSUMgU01BTEwgTEVUVEVSIEhBIFdJVEggREVTQ0VOREVSCitjaGFyIFx1MDRiYSAxMjM2NwkJQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgU0hIQQorY2hhciBcdTA0YmIgMTIzNgkJQ1lSSUxMSUMgU01BTEwgTEVUVEVSIFNISEEKK2NoYXIgXHUwNGQ4IDM0NTcJCUNZUklMTElDIENBUElUQUwgTEVUVEVSIFNDSFdBCitjaGFyIFx1MDRkOSAzNDUJCUNZUklMTElDIFNNQUxMIExFVFRFUiBTQ0hXQQorY2hhciBcdTA0ZTggMTI2NwkJQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgQkFSUkVEIE8KK2NoYXIgXHUwNGU5IDEyNgkJQ1lSSUxMSUMgU01BTEwgTEVUVEVSIEJBUlJFRCBPCisjIFVuaWNvZGUgR3JlZWsKK2NoYXIgXHUwMzc0IDM0NTYJCUdSRUVLIE5VTUVSQUwgU0lHTgorY2hhciBcdTAzNzUgNTY3OAkJR1JFRUsgTE9XRVIgTlVNRVJBTCBTSUdOCitjaGFyIFx1MDM3ZSAyNgkJR1JFRUsgUVVFU1RJT04gTUFSSworY2hhciBcdTAzODQgNAkJR1JFRUsgVE9OT1MKK2NoYXIgXHUwMzg1IDQ1CQlHUkVFSyBESUFMWVRJS0EgVE9OT1MKK2NoYXIgXHUwMzg2IDM0NTc4CQlHUkVFSyBDQVBJVEFMIExFVFRFUiBBTFBIQSBXSVRIIFRPTk9TCitjaGFyIFx1MDM4NyA0NjcJCUdSRUVLIEFOTyBURUxFSUEKK2NoYXIgXHUwMzg4IDEyNDY3OAkJR1JFRUsgQ0FQSVRBTCBMRVRURVIgRVBTSUxPTiBXSVRIIFRPTk9TCitjaGFyIFx1MDM4OSAxMjM0NTY3OAkJR1JFRUsgQ0FQSVRBTCBMRVRURVIgRVRBIFdJVEggVE9OT1MKK2NoYXIgXHUwMzhhIDEyNDU2NzgJCUdSRUVLIENBUElUQUwgTEVUVEVSIElPVEEgV0lUSCBUT05PUworY2hhciBcdTAzOGMgMjQ2NzgJCUdSRUVLIENBUElUQUwgTEVUVEVSIE9NSUNST04gV0lUSCBUT05PUworY2hhciBcdTAzOGUgMTI1Njc4CQlHUkVFSyBDQVBJVEFMIExFVFRFUiBVUFNJTE9OIFdJVEggVE9OT1MKK2NoYXIgXHUwMzhmIDI0NTc4CQlHUkVFSyBDQVBJVEFMIExFVFRFUiBPTUVHQSBXSVRIIFRPTk9TCitjaGFyIFx1MDM5MCAyNDgJCUdSRUVLIFNNQUxMIExFVFRFUiBJT1RBIFdJVEggRElBTFlUSUtBIEFORCBUT05PUworY2hhciBcdTAzOTEgMTc4CQlHUkVFSyBDQVBJVEFMIExFVFRFUiBBTFBIQQorY2hhciBcdTAzOTIgMTI3OAkJR1JFRUsgQ0FQSVRBTCBMRVRURVIgQkVUQQorY2hhciBcdTAzOTMgMTI0NTc4CQlHUkVFSyBDQVBJVEFMIExFVFRFUiBHQU1NQQorY2hhciBcdTAzOTQgMTQ1NzgJCUdSRUVLIENBUElUQUwgTEVUVEVSIERFTFRBCitjaGFyIFx1MDM5NSAxNTc4CQlHUkVFSyBDQVBJVEFMIExFVFRFUiBFUFNJTE9OCitjaGFyIFx1MDM5NiAxMzU2NzgJCUdSRUVLIENBUElUQUwgTEVUVEVSIFpFVEEKK2NoYXIgXHUwMzk3IDI0NTc4CQlHUkVFSyBDQVBJVEFMIExFVFRFUiBFVEEKK2NoYXIgXHUwMzk4IDEyNTc4CQlHUkVFSyBDQVBJVEFMIExFVFRFUiBUSEVUQQorY2hhciBcdTAzOTkgMjQ3OAkJR1JFRUsgQ0FQSVRBTCBMRVRURVIgSU9UQQorY2hhciBcdTAzOWEgMTM3OAkJR1JFRUsgQ0FQSVRBTCBMRVRURVIgS0FQUEEKK2NoYXIgXHUwMzliIDEyMzc4CQlHUkVFSyBDQVBJVEFMIExFVFRFUiBMQU1EQQorY2hhciBcdTAzOWMgMTM0NzgJCUdSRUVLIENBUElUQUwgTEVUVEVSIE1VCitjaGFyIFx1MDM5ZCAxMzQ1NzgJCUdSRUVLIENBUElUQUwgTEVUVEVSIE5VCitjaGFyIFx1MDM5ZSAxMzQ2NzgJCUdSRUVLIENBUElUQUwgTEVUVEVSIFhJCitjaGFyIFx1MDM5ZiAxMzU3OAkJR1JFRUsgQ0FQSVRBTCBMRVRURVIgT01JQ1JPTgorY2hhciBcdTAzYTAgMTIzNDc4CQlHUkVFSyBDQVBJVEFMIExFVFRFUiBQSQorY2hhciBcdTAzYTEgMTIzNTc4CQlHUkVFSyBDQVBJVEFMIExFVFRFUiBSSE8KK2NoYXIgXHUwM2EzIDIzNDc4CQlHUkVFSyBDQVBJVEFMIExFVFRFUiBTSUdNQQorY2hhciBcdTAzYTQgMjM0NTc4CQlHUkVFSyBDQVBJVEFMIExFVFRFUiBUQVUKK2NoYXIgXHUwM2E1IDEzNjc4CQlHUkVFSyBDQVBJVEFMIExFVFRFUiBVUFNJTE9OCitjaGFyIFx1MDNhNiAxMjQ3OAkJR1JFRUsgQ0FQSVRBTCBMRVRURVIgUEhJCitjaGFyIFx1MDNhNyAxNDc4CQlHUkVFSyBDQVBJVEFMIExFVFRFUiBDSEkKK2NoYXIgXHUwM2E4IDEzNDU2NzgJCUdSRUVLIENBUElUQUwgTEVUVEVSIFBTSQorY2hhciBcdTAzYTkgMjQ1Njc4CQlHUkVFSyBDQVBJVEFMIExFVFRFUiBPTUVHQQorY2hhciBcdTAzYWEgMjQ3OAkJR1JFRUsgQ0FQSVRBTCBMRVRURVIgSU9UQSBXSVRIIERJQUxZVElLQQorY2hhciBcdTAzYWIgMTM0NTY3OAkJR1JFRUsgQ0FQSVRBTCBMRVRURVIgVVBTSUxPTiBXSVRIIERJQUxZVElLQQorY2hhciBcdTAzYWMgMzQ1OAkJR1JFRUsgU01BTEwgTEVUVEVSIEFMUEhBIFdJVEggVE9OT1MKK2NoYXIgXHUwM2FkIDEyNDY4CQlHUkVFSyBTTUFMTCBMRVRURVIgRVBTSUxPTiBXSVRIIFRPTk9TCitjaGFyIFx1MDNhZSAxMjM0NTY4CQlHUkVFSyBTTUFMTCBMRVRURVIgRVRBIFdJVEggVE9OT1MKK2NoYXIgXHUwM2FmIDEyNDU2OAkJR1JFRUsgU01BTEwgTEVUVEVSIElPVEEgV0lUSCBUT05PUworY2hhciBcdTAzYjAgMTM0NTY4CQlHUkVFSyBTTUFMTCBMRVRURVIgVVBTSUxPTiBXSVRIIERJQUxZVElLQQorY2hhciBcdTAzYjEgMTgJCUdSRUVLIFNNQUxMIExFVFRFUiBBTFBIQQorY2hhciBcdTAzYjIgMTI4CQlHUkVFSyBTTUFMTCBMRVRURVIgQkVUQQorY2hhciBcdTAzYjMgMTI0NTgJCUdSRUVLIFNNQUxMIExFVFRFUiBHQU1NQQorY2hhciBcdTAzYjQgMTQ1OAkJR1JFRUsgU01BTEwgTEVUVEVSIERFTFRBCitjaGFyIFx1MDNiNSAxNTgJCUdSRUVLIFNNQUxMIExFVFRFUiBFUFNJTE9OCitjaGFyIFx1MDNiNiAxMzU2OAkJR1JFRUsgU01BTEwgTEVUVEVSIFpFVEEKK2NoYXIgXHUwM2I3IDI0NTgJCUdSRUVLIFNNQUxMIExFVFRFUiBFVEEKK2NoYXIgXHUwM2I4IDEyNTgJCUdSRUVLIFNNQUxMIExFVFRFUiBUSEVUQQorY2hhciBcdTAzYjkgMjQ4CQlHUkVFSyBTTUFMTCBMRVRURVIgSU9UQQorY2hhciBcdTAzYmEgMTM4CQlHUkVFSyBTTUFMTCBMRVRURVIgS0FQUEEKK2NoYXIgXHUwM2JiIDEyMzgJCUdSRUVLIFNNQUxMIExFVFRFUiBMQU1EQQorY2hhciBcdTAzYmMgMTM0OAkJR1JFRUsgU01BTEwgTEVUVEVSIE1VCitjaGFyIFx1MDNiZCAxMzQ1OAkJR1JFRUsgU01BTEwgTEVUVEVSIE5VCitjaGFyIFx1MDNiZSAxMzQ2OAkJR1JFRUsgU01BTEwgTEVUVEVSIFhJCitjaGFyIFx1MDNiZiAxMzU4CQlHUkVFSyBTTUFMTCBMRVRURVIgT01JQ1JPTgorY2hhciBcdTAzYzAgMTIzNDgJCUdSRUVLIFNNQUxMIExFVFRFUiBQSQorY2hhciBcdTAzYzEgMTIzNTgJCUdSRUVLIFNNQUxMIExFVFRFUiBSSE8KK2NoYXIgXHUwM2MyIDIzNDgJCUdSRUVLIFNNQUxMIExFVFRFUiBGSU5BTCBTSUdNQQorY2hhciBcdTAzYzMgMjM0OAkJR1JFRUsgU01BTEwgTEVUVEVSIFNJR01BCitjaGFyIFx1MDNjNCAyMzQ1OAkJR1JFRUsgU01BTEwgTEVUVEVSIFRBVQorY2hhciBcdTAzYzUgMTM2OAkJR1JFRUsgU01BTEwgTEVUVEVSIFVQU0lMT04KK2NoYXIgXHUwM2M2IDEyNDgJCUdSRUVLIFNNQUxMIExFVFRFUiBQSEkKK2NoYXIgXHUwM2M3IDE0OAkJR1JFRUsgU01BTEwgTEVUVEVSIENISQorY2hhciBcdTAzYzggMTM0NTY4CQlHUkVFSyBTTUFMTCBMRVRURVIgUFNJCitjaGFyIFx1MDNjOSAyNDU2OAkJR1JFRUsgU01BTEwgTEVUVEVSIE9NRUdBCitjaGFyIFx1MDNjYSAzNDgJCUdSRUVLIFNNQUxMIExFVFRFUiBJT1RBIFdJVEggRElBTFlUSUtBCitjaGFyIFx1MDNjYiAyMzQ1NjgJCUdSRUVLIFNNQUxMIExFVFRFUiBVUFNJTE9OIFdJVEggRElBTFlUSUtBCitjaGFyIFx1MDNjYyAyNDY4CQlHUkVFSyBTTUFMTCBMRVRURVIgT01JQ1JPTiBXSVRIIFRPTk9TCitjaGFyIFx1MDNjZCAxMjU2OAkJR1JFRUsgU01BTEwgTEVUVEVSIFVQU0lMT04gV0lUSCBUT05PUworY2hhciBcdTAzY2UgMjQ1OAkJR1JFRUsgU01BTEwgTEVUVEVSIE9NRUdBIFdJVEggVE9OT1MKK2NoYXIgXHUwM2QwIDEyNzgJCUdSRUVLIEJFVEEgU1lNQk9MCitjaGFyIFx1MDNkMSAxMjU3OAkJR1JFRUsgVEhFVEEgU1lNQk9MCitjaGFyIFx1MDNkMiAxMjM2OAkJR1JFRUsgVVBTSUxPTiBXSVRIIEhPT0sgU1lNQk9MCitjaGFyIFx1MDNkMyAyMzQ1NjgJCUdSRUVLIFVQU0lMT04gV0lUSCBBQ1VURSBBTkQgSE9PSyBTWU1CT0wKK2NoYXIgXHUwM2Q0IDEzNjgJCUdSRUVLIFVQU0lMT04gV0lUSCBESUFFUkVTSVMgQU5EIEhPT0sgU1lNQk9MCitjaGFyIFx1MDNkNSAxMjQ3OAkJR1JFRUsgUEhJIFNZTUJPTAorY2hhciBcdTAzZDYgMTIzNDc4CQlHUkVFSyBQSSBTWU1CT0wKK2NoYXIgXHUwM2Q3IDEyMzQ2OAkJR1JFRUsgS0FJIFNZTUJPTAorY2hhciBcdTAzZDggMTIzNDU3OAkJR1JFRUsgTEVUVEVSIEFSQ0hBSUMgS09QUEEKK2NoYXIgXHUwM2Q5IDEyMzQ1OAkJR1JFRUsgU01BTEwgTEVUVEVSIEFSQ0hBSUMgS09QUEEKK2NoYXIgXHUwM2RhIDEyMzY3OAkJR1JFRUsgTEVUVEVSIFNUSUdNQQorY2hhciBcdTAzZGIgMTIzNjgJCUdSRUVLIFNNQUxMIExFVFRFUiBTVElHTUEKK2NoYXIgXHUwM2RjIDE0NTY3OAkJR1JFRUsgTEVUVEVSIERJR0FNTUEKK2NoYXIgXHUwM2RkIDEyMzY4CQlHUkVFSyBTTUFMTCBMRVRURVIgRElHQU1NQQorY2hhciBcdTAzZGUgMTIzNDU3OAkJR1JFRUsgTEVUVEVSIEtPUFBBCitjaGFyIFx1MDNkZiAxMjM0NTgJCUdSRUVLIFNNQUxMIExFVFRFUiBLT1BQQQorY2hhciBcdTAzZTAgMjM0Njc4CQlHUkVFSyBMRVRURVIgU0FNUEkKK2NoYXIgXHUwM2UxIDIzNDY4CQlHUkVFSyBTTUFMTCBMRVRURVIgU0FNUEkKK2NoYXIgXHUwM2YwIDEzNzgJCUdSRUVLIEtBUFBBIFNZTUJPTAorY2hhciBcdTAzZjEgMTIzNTc4CQlHUkVFSyBSSE8gU1lNQk9MCitjaGFyIFx1MDNmMiAyMzQ3OAkJR1JFRUsgTFVOQVRFIFNJR01BIFNZTUJPTAorY2hhciBcdTAzZjQgMTI1NzgJCUdSRUVLIENBUElUQUwgVEhFVEEgU1lNQk9MCitjaGFyIFx1MDNmNSAxNTc4CQlHUkVFSyBMVU5BVEUgRVBTSUxPTiBTWU1CT0wKK2NoYXIgXHUwM2ZhIDIzNDY3OAkJR1JFRUsgQ0FQSVRBTCBMRVRURVIgU0FOCitjaGFyIFx1MDNmYiAyMzQ2OAkJR1JFRUsgU01BTEwgTEVUVEVSIFNBTgorIyBIZWJyZXcgVW5pY29kZQorY2hhciBcdTA1ZDAgMTgJCUhFQlJFVyBMRVRURVIgQUxFRgorY2hhciBcdTA1ZDEgMTIzNjgJCUhFQlJFVyBMRVRURVIgQkVUCitjaGFyIFx1MDVkMiAxMjQ1OAkJSEVCUkVXIExFVFRFUiBHSU1FTAorY2hhciBcdTA1ZDMgMTQ1OAkJSEVCUkVXIExFVFRFUiBEQUxFVAorY2hhciBcdTA1ZDQgMTI1OAkJSEVCUkVXIExFVFRFUiBIRQorY2hhciBcdTA1ZDUgMjQ1NjgJCUhFQlJFVyBMRVRURVIgVkFWCitjaGFyIFx1MDVkNiAxMzU2OAkJSEVCUkVXIExFVFRFUiBaQVlJTgorY2hhciBcdTA1ZDcgMTM0NjgJCUhFQlJFVyBMRVRURVIgSEVUCitjaGFyIFx1MDVkOCAyMzQ1OAkJSEVCUkVXIExFVFRFUiBURVQKK2NoYXIgXHUwNWQ5IDI0NTgJCUhFQlJFVyBMRVRURVIgWU9ECitjaGFyIFx1MDVkYSAxMzgJCUhFQlJFVyBMRVRURVIgRklOQUwgS0FGCitjaGFyIFx1MDVkYiAxNjgJCUhFQlJFVyBMRVRURVIgS0FGCitjaGFyIFx1MDVkYyAxMjM4CQlIRUJSRVcgTEVUVEVSIExBTUVECitjaGFyIFx1MDVkZCAxMzQ4CQlIRUJSRVcgTEVUVEVSIEZJTkFMIE1FTQorY2hhciBcdTA1ZGUgMTM0OAkJSEVCUkVXIExFVFRFUiBNRU0KK2NoYXIgXHUwNWRmIDEzNDU4CQlIRUJSRVcgTEVUVEVSIEZJTkFMIE5VTgorY2hhciBcdTA1ZTAgMTM0NTgJCUhFQlJFVyBMRVRURVIgTlVOCitjaGFyIFx1MDVlMSAyMzQ4CQlIRUJSRVcgTEVUVEVSIFNBTUVLSAorY2hhciBcdTA1ZTIgMTI0NjgJCUhFQlJFVyBMRVRURVIgQVlJTgorY2hhciBcdTA1ZTMgMTI0OAkJSEVCUkVXIExFVFRFUiBGSU5BTCBQRQorY2hhciBcdTA1ZTQgMTIzNDgJCUhFQlJFVyBMRVRURVIgUEUKK2NoYXIgXHUwNWU1IDIzNDY4CQlIRUJSRVcgTEVUVEVSIEZJTkFMIFRTQURJCitjaGFyIFx1MDVlNiAyMzQ2OAkJSEVCUkVXIExFVFRFUiBUU0FESQorY2hhciBcdTA1ZTcgMTIzNDU4CQlIRUJSRVcgTEVUVEVSIFFPRgorY2hhciBcdTA1ZTggMTIzNTgJCUhFQlJFVyBMRVRURVIgUkVTSAorY2hhciBcdTA1ZTkgMTQ2OAkJSEVCUkVXIExFVFRFUiBTSElOCitjaGFyIFx1MDVlYSAxNDU2OAkJSEVCUkVXIExFVFRFUiBUQVYKK2NoYXIgXHUwNWIwIDMJCUhFQlJFVyBQT0lOVCBTSEVWQQorY2hhciBcdTA1YjEgMjYJCUhFQlJFVyBQT0lOVCBIQVRBRiBTRUdPTAorY2hhciBcdTA1YjIgMjUJCUhFQlJFVyBQT0lOVCBIQVRBRiBQQVRBSAorY2hhciBcdTA1YjMgMzQ1CQlIRUJSRVcgUE9JTlQgSEFUQUYgUUFNQVRTCitjaGFyIFx1MDViNCAyNAkJSEVCUkVXIFBPSU5UIEhJUklRCitjaGFyIFx1MDViNSAzNAkJSEVCUkVXIFBPSU5UIFRTRVJFCitjaGFyIFx1MDViNiAxNQkJSEVCUkVXIFBPSU5UIFNFR09MCitjaGFyIFx1MDViNyAxNAkJSEVCUkVXIFBPSU5UIFBBVEFICitjaGFyIFx1MDViOCAxMjYJCUhFQlJFVyBQT0lOVCBRQU1BVFMKK2NoYXIgXHUwNWI5IDEzNQkJSEVCUkVXIFBPSU5UIEhPTEFNCitjaGFyIFx1MDViYiAxMzYJCUhFQlJFVyBQT0lOVCBRVUJVVFMKK2NoYXIgXHUwNWJjIDUJCUhFQlJFVyBQT0lOVCBEQUdFU0ggT1IgTUFQSVEKK2NoYXIgXHUwNWJkIDQJCUhFQlJFVyBQT0lOVCBNRVRFRworY2hhciBcdTA1YzEgMTU2OAkJSEVCUkVXIFBPSU5UIFNISU4gRE9UCitjaGFyIFx1MDVjMiAyMzQ4CQlIRUJSRVcgUE9JTlQgU0lOIERPVAorIyBPdGhlciBzeW1ib2xzCitjaGFyIFx4MDAgMTIzNDU2NzgJCU5VTEwKK2NoYXIgXHgwMSAxNjc4CQlTVEFSVCBPRiBIRUFESU5HCitjaGFyIFx4MDIgMTI0Njc4CQlTVEFSVCBPRiBURVhUCitjaGFyIFx4MDMgMTQ2NzgJCUVORCBPRiBURVhUCitjaGFyIFx4MDQgMTQ2NwkJRU5EIE9GIFRSQU5TTUlTU0lPTgorY2hhciBceDA1IDE1Njc4CQlFTlFVSVJZCitjaGFyIFx4MDYgMjM1OAkJQUNLTk9XTEVER0UKK2NoYXIgXHgwNyAyMzU2NzgJCUJFTEwKK2NoYXIgXHgwOCAzNzgJCUJBQ0tTUEFDRQorY2hhciBceDBlIDEzNDU2NwkJU0hJRlQgT1VUCitjaGFyIFx4MGYgMTIzNTY3OAkJU0hJRlQgSU4KK2NoYXIgXHgxMCAzNDU2OAkJREFUQSBMSU5LIEVTQ0FQRQorY2hhciBceDExIDEyNDU2OAkJREVWSUNFIENPTlRST0wgT05FCitjaGFyIFx4MTIgMjM0NjgJCURFVklDRSBDT05UUk9MIFRXTworY2hhciBceDEzIDQ1NzgJCURFVklDRSBDT05UUk9MIFRIUkVFCitjaGFyIFx4MTQgMzQ1OAkJREVWSUNFIENPTlRST0wgRk9VUgorY2hhciBceDE1IDIzNTc4CQlORUdBVElWRSBBQ0tOT1dMRURHRQorY2hhciBceDE2IDEyMzYJCVNZTkNIUk9OT1VTIElETEUKK2NoYXIgXHgxNyAyNTY3OAkJRU5EIE9GIFRSQU5TTUlTU0lPTiBCTE9DSworY2hhciBceDE4IDM0NzgJCUNBTkNFTAorY2hhciBceDE5IDEzNDU2CQlFTkQgT0YgTUVESVVNCitjaGFyIFx4MWEgNDY3OAkJU1VCU1RJVFVURQorY2hhciBceDFiIDI0Njc4CQlFU0NBUEUKK2NoYXIgXHgxYyAxMjU2NzgJCUlORk9STUFUSU9OIFNFUEFSQVRPUiBGT1VSCitjaGFyIFx4MWQgMTI0NTY3OAkJSU5GT1JNQVRJT04gU0VQQVJBVE9SIFRIUkVFCitjaGFyIFx4MWUgMTIzNDY3OAkJSU5GT1JNQVRJT04gU0VQQVJBVE9SIFRXTworY2hhciBceDFmIDQ1Njc4CQlJTkZPUk1BVElPTiBTRVBBUkFUT1IgT05FCitjaGFyIFx4N2YgNDU2OAkJREVMRVRFCitjaGFyIFx4ODEgOAkJPENPTlRST0w+CitjaGFyIFx4ODYgMTI0OAkJU1RBUlQgT0YgU0VMRUNURUQgQVJFQQorY2hhciBceDg5IDI0OAkJQ0hBUkFDVEVSIFRBQlVMQVRJT04gV0lUSCBKVVNUSUZJQ0FUSU9OCitjaGFyIFx4OGQgMjU3CQlSRVZFUlNFIExJTkUgRkVFRAorY2hhciBceDhmIDEyNDY3OAkJU0lOR0xFIFNISUZUIFRIUkVFCitjaGFyIFx4OTAgMTI0Njc4CQlERVZJQ0UgQ09OVFJPTCBTVFJJTkcKK2NoYXIgXHg5NyAxMzU2OAkJRU5EIE9GIEdVQVJERUQgQVJFQQorY2hhciBceDliIDEyMzQ1OAkJQ09OVFJPTCBTRVFVRU5DRSBJTlRST0RVQ0VSCitjaGFyIFx4OWQgMTI0NTY3CQlPUEVSQVRJTkcgU1lTVEVNIENPTU1BTkQKK2NoYXIgXHg5ZSAyMzU2NzgJCVBSSVZBQ1kgTUVTU0FHRQorY2hhciBceGExIDM2NwkJSU5WRVJURUQgRVhDTEFNQVRJT04gTUFSSworY2hhciBceGEyIDU4CQlDRU5UIFNJR04KK2NoYXIgXHhhMyA0NjcJCVBPVU5EIFNJR04KK2NoYXIgXHhhNCA0Njc4CQlDVVJSRU5DWSBTSUdOCitjaGFyIFx4YTUgNDY4CQlZRU4gU0lHTgorY2hhciBceGE2IDE1OAkJQlJPS0VOIEJBUgorY2hhciBceGE3IDM1NwkJU0VDVElPTiBTSUdOCitjaGFyIFx4YTggNDgJCURJQUVSRVNJUworY2hhciBceGFhIDEyNTgJCUZFTUlOSU5FIE9SRElOQUwgSU5ESUNBVE9SCitjaGFyIFx4YWIgNTY3OAkJTEVGVC1QT0lOVElORyBET1VCTEUgQU5HTEUgUVVPVEFUSU9OIE1BUksKK2NoYXIgXHhhYyAyNTY3OAkJTk9UIFNJR04KK2NoYXIgXHhhZCAzNjgJCVNPRlQgSFlQSEVOCitjaGFyIFx4YWUgMTIzNTgJCVJFR0lTVEVSRUQgU0lHTgorY2hhciBceGFmIDQ1OAkJTUFDUk9OCitjaGFyIFx4YjEgMjM1NzgJCVBMVVMgTUlOVVMgU1lNQk9MCitjaGFyIFx4YjQgNTY4CQlBQ1VURSBBQ0NFTlQKK2NoYXIgXHhiNSAxMzQ4CQlNSUNSTyBTSUdOCitjaGFyIFx4YjYgMTQ1OAkJUElMQ1JPVyBTSUdOCitjaGFyIFx4YjggNjgJCUNFRElMTEEKK2NoYXIgXHhiYSAyNDU4CQlNQVNDVUxJTkUgT1JESU5BTCBJTkRJQ0FUT1IKK2NoYXIgXHhiYiA0NTc4CQlSSUdIVC1QT0lOVElORyBET1VCTEUgQU5HTEUgUVVPVEFUSU9OIE1BUksKK2NoYXIgXHhiYyAxMzY4CQlWVUxHQVIgRlJBQ1RJT04gT05FIFFVQVJURVIKK2NoYXIgXHhiZCAxMjM2OAkJVlVMR0FSIEZSQUNUSU9OIE9ORSBIQUxGCitjaGFyIFx4YmUgMTM0NjgJCVZVTEdBUiBGUkFDVElPTiBUSFJFRSBRVUFSVEVSUworY2hhciBceGJmIDM4CQlJTlZFUlRFRCBRVUVTVElPTiBNQVJLCitjaGFyIFx4YzAgMTIzNTY3OAkJTEFUSU4gQ0FQSVRBTCBMRVRURVIgQSBXSVRIIEdSQVZFCitjaGFyIFx4YzEgMTY3OAkJTEFUSU4gQ0FQSVRBTCBMRVRURVIgQSBXSVRIIEFDVVRFCitjaGFyIFx4YzIgMTY3OAkJTEFUSU4gQ0FQSVRBTCBMRVRURVIgQSBXSVRIIENJUkNVTUZMRVgKK2NoYXIgXHhjMyAzNDY3OAkJTEFUSU4gQ0FQSVRBTCBMRVRURVIgQSBXSVRIIFRJTERFCitjaGFyIFx4YzQgMzQ1NzgJCUxBVElOIENBUElUQUwgTEVUVEVSIEEgV0lUSCBESUFFUkVTSVMKK2NoYXIgXHhjNSAzNDU2NzgJCUxBVElOIENBUElUQUwgTEVUVEVSIEEgV0lUSCBSSU5HIEFCT1ZFCitjaGFyIFx4YzYgNDc4CQlMQVRJTiBDQVBJVEFMIExFVFRFUiBBRQorY2hhciBceGM3IDEyMzQ2NzgJCUxBVElOIENBUElUQUwgTEVUVEVSIEMgV0lUSCBDRURJTExBCitjaGFyIFx4YzggMjM0Njc4CQlMQVRJTiBDQVBJVEFMIExFVFRFUiBFIFdJVEggR1JBVkUKK2NoYXIgXHhjOSAxMjM0NTY3OAkJTEFUSU4gQ0FQSVRBTCBMRVRURVIgRSBXSVRIIEFDVVRFCitjaGFyIFx4Y2EgMTI2NzgJCUxBVElOIENBUElUQUwgTEVUVEVSIEUgV0lUSCBDSVJDVU1GTEVYCitjaGFyIFx4Y2IgMTI0Njc4CQlMQVRJTiBDQVBJVEFMIExFVFRFUiBFIFdJVEggRElBRVJFU0lTCitjaGFyIFx4Y2MgMzQ3OAkJTEFUSU4gQ0FQSVRBTCBMRVRURVIgSSBXSVRIIEdSQVZFCitjaGFyIFx4Y2QgMTQ2NzgJCUxBVElOIENBUElUQUwgTEVUVEVSIEkgV0lUSCBBQ1VURQorY2hhciBceGNlIDE0Njc4CQlMQVRJTiBDQVBJVEFMIExFVFRFUiBJIFdJVEggQ0lSQ1VNRkxFWAorY2hhciBceGNmIDEyNDU2NzgJCUxBVElOIENBUElUQUwgTEVUVEVSIEkgV0lUSCBESUFFUkVTSVMKK2NoYXIgXHhkMCAzNTY3OAkJTEFUSU4gQ0FQSVRBTCBMRVRURVIgRVRICitjaGFyIFx4ZDEgMjU2NzgJCUxBVElOIENBUElUQUwgTEVUVEVSIE4gV0lUSCBUSUxERQorY2hhciBceGQyIDM0Njc4CQlMQVRJTiBDQVBJVEFMIExFVFRFUiBPIFdJVEggR1JBVkUKK2NoYXIgXHhkMyAxNDU2NzgJCUxBVElOIENBUElUQUwgTEVUVEVSIE8gV0lUSCBBQ1VURQorY2hhciBceGQ0IDE0NTY3OAkJTEFUSU4gQ0FQSVRBTCBMRVRURVIgTyBXSVRIIENJUkNVTUZMRVgKK2NoYXIgXHhkNSAyNjc4CQlMQVRJTiBDQVBJVEFMIExFVFRFUiBPIFdJVEggVElMREUKK2NoYXIgXHhkNiAyNDY3OAkJTEFUSU4gQ0FQSVRBTCBMRVRURVIgTyBXSVRIIERJQUVSRVNJUworY2hhciBceGQ3IDIzNDgJCU1VTFRJUExJQ0FUSU9OIFNJR04KK2NoYXIgXHhkOCAyNDY3OAkJTEFUSU4gQ0FQSVRBTCBMRVRURVIgTyBXSVRIIFNUUk9LRQorY2hhciBceGQ5IDIzNDU2NzgJCUxBVElOIENBUElUQUwgTEVUVEVSIFUgV0lUSCBHUkFWRQorY2hhciBceGRhIDE1Njc4CQlMQVRJTiBDQVBJVEFMIExFVFRFUiBVIFdJVEggQUNVVEUKK2NoYXIgXHhkYiAxNTY3OAkJTEFUSU4gQ0FQSVRBTCBMRVRURVIgVSBXSVRIIENJUkNVTUZMRVgKK2NoYXIgXHhkYyAxMjU2NzgJCUxBVElOIENBUElUQUwgTEVUVEVSIFUgV0lUSCBESUFFUkVTSVMKK2NoYXIgXHhkZCAyNDU2NzgJCUxBVElOIENBUElUQUwgTEVUVEVSIFkgV0lUSCBBQ1VURQorY2hhciBceGRlIDIzNTc4CQlMQVRJTiBDQVBJVEFMIExFVFRFUiBUSE9STgorY2hhciBceGRmIDM0NTY4CQlMQVRJTiBTTUFMTCBMRVRURVIgU0hBUlAgUworY2hhciBceGUwIDEyMzU2OAkJTEFUSU4gU01BTEwgTEVUVEVSIEEgV0lUSCBHUkFWRQorY2hhciBceGUxIDE2OAkJTEFUSU4gU01BTEwgTEVUVEVSIEEgV0lUSCBBQ1VURQorY2hhciBceGUyIDE2OAkJTEFUSU4gU01BTEwgTEVUVEVSIEEgV0lUSCBDSVJDVU1GTEVYCitjaGFyIFx4ZTMgMzQ2OAkJTEFUSU4gU01BTEwgTEVUVEVSIEEgV0lUSCBUSUxERQorY2hhciBceGU0IDM0NTgJCUxBVElOIFNNQUxMIExFVFRFUiBBIFdJVEggRElBRVJFU0lTCitjaGFyIFx4ZTUgMzQ1NjgJCUxBVElOIFNNQUxMIExFVFRFUiBBIFdJVEggUklORyBBQk9WRQorY2hhciBceGU2IDQ4CQlMQVRJTiBTTUFMTCBMRVRURVIgQUUKK2NoYXIgXHhlNyAxMjM0NjgJCUxBVElOIFNNQUxMIExFVFRFUiBDIFdJVEggQ0VESUxMQQorY2hhciBceGU4IDIzNDY4CQlMQVRJTiBTTUFMTCBMRVRURVIgRSBXSVRIIEdSQVZFCitjaGFyIFx4ZTkgMTIzNDU2OAkJTEFUSU4gU01BTEwgTEVUVEVSIEUgV0lUSCBBQ1VURQorY2hhciBceGVhIDEyNjgJCUxBVElOIFNNQUxMIExFVFRFUiBFIFdJVEggQ0lSQ1VNRkxFWAorY2hhciBceGViIDEyNDY4CQlMQVRJTiBTTUFMTCBMRVRURVIgRSBXSVRIIERJQUVSRVNJUworY2hhciBceGVjIDM0OAkJTEFUSU4gU01BTEwgTEVUVEVSIEkgV0lUSCBHUkFWRQorY2hhciBceGVkIDE0NjgJCUxBVElOIFNNQUxMIExFVFRFUiBJIFdJVEggQUNVVEUKK2NoYXIgXHhlZSAxNDY4CQlMQVRJTiBTTUFMTCBMRVRURVIgSSBXSVRIIENJUkNVTUZMRVgKK2NoYXIgXHhlZiAxMjQ1NjgJCUxBVElOIFNNQUxMIExFVFRFUiBJIFdJVEggRElBRVJFU0lTCitjaGFyIFx4ZjAgMzU2OAkJTEFUSU4gU01BTEwgTEVUVEVSIEVUSAorY2hhciBceGYxIDI1NjgJCUxBVElOIFNNQUxMIExFVFRFUiBOIFdJVEggVElMREUKK2NoYXIgXHhmMiAzNDY4CQlMQVRJTiBTTUFMTCBMRVRURVIgTyBXSVRIIEdSQVZFCitjaGFyIFx4ZjMgMTQ1NjgJCUxBVElOIFNNQUxMIExFVFRFUiBPIFdJVEggQUNVVEUKK2NoYXIgXHhmNCAxNDU2OAkJTEFUSU4gU01BTEwgTEVUVEVSIE8gV0lUSCBDSVJDVU1GTEVYCitjaGFyIFx4ZjUgMjY4CQlMQVRJTiBTTUFMTCBMRVRURVIgTyBXSVRIIFRJTERFCitjaGFyIFx4ZjYgMjQ2OAkJTEFUSU4gU01BTEwgTEVUVEVSIE8gV0lUSCBESUFFUkVTSVMKK2NoYXIgXHhmNyAxMjU2NzgJCURJVklTSU9OIFNJR04KK2NoYXIgXHhmOCAyNDY4CQlMQVRJTiBTTUFMTCBMRVRURVIgTyBXSVRIIFNUUk9LRQorY2hhciBceGY5IDIzNDU2OAkJTEFUSU4gU01BTEwgTEVUVEVSIFUgV0lUSCBHUkFWRQorY2hhciBceGZhIDE1NjgJCUxBVElOIFNNQUxMIExFVFRFUiBVIFdJVEggQUNVVEUKK2NoYXIgXHhmYiAxNTY4CQlMQVRJTiBTTUFMTCBMRVRURVIgVSBXSVRIIENJUkNVTUZMRVgKK2NoYXIgXHhmYyAxMjU2OAkJVSBXSVRIIFRXTyBET1RTCitjaGFyIFx4ZmQgMjQ1NjgJCUxBVElOIFNNQUxMIExFVFRFUiBZIFdJVEggQUNVVEUKK2NoYXIgXHhmZSAyMzU4CQlMQVRJTiBTTUFMTCBMRVRURVIgVEhPUk4KK2NoYXIgXHhmZiAxMzQ1NjgJCUxBVElOIFNNQUxMIExFVFRFUiBZIFdJVEggRElBRVJFU0lTCitjaGFyIFx1MDEwMCAxNjc4CQlMQVRJTiBDQVBJVEFMIExFVFRFUiBBIFdJVEggTUFDUk9OCitjaGFyIFx1MDEwMSAxNjgJCUxBVElOIFNNQUxMIExFVFRFUiBBIFdJVEggTUFDUk9OCitjaGFyIFx1MDEwMiAxMjM1Njc4CQlMQVRJTiBDQVBJVEFMIExFVFRFUiBBIFdJVEggQlJFVkUKK2NoYXIgXHUwMTAzIDEyMzU2OAkJTEFUSU4gU01BTEwgTEVUVEVSIEEgV0lUSCBCUkVWRQorY2hhciBcdTAxMDQgMTM0NTY3OAkJTEFUSU4gQ0FQSVRBTCBMRVRURVIgQSBXSVRIIE9HT05FSworY2hhciBcdTAxMDUgMTM0NTY4CQlMQVRJTiBTTUFMTCBMRVRURVIgQSBXSVRIIE9HT05FSworY2hhciBcdTAxMDYgMTQ2NzgJCUxBVElOIENBUElUQUwgTEVUVEVSIEMgV0lUSCBBQ1VURQorY2hhciBcdTAxMDcgMTQ2OAkJTEFUSU4gU01BTEwgTEVUVEVSIEMgV0lUSCBBQ1VURQorY2hhciBcdTAxMDggMTQ2NzgJCUxBVElOIENBUElUQUwgTEVUVEVSIEMgV0lUSCBDSVJDVU1GTEVYCitjaGFyIFx1MDEwOSAxNDY4CQlMQVRJTiBTTUFMTCBMRVRURVIgQyBXSVRIIENJUkNVTUZMRVgKK2NoYXIgXHUwMTBjIDE0Njc4CQlMQVRJTiBDQVBJVEFMIExFVFRFUiBDIFdJVEggQ0FST04KK2NoYXIgXHUwMTBkIDE0NjgJCUxBVElOIFNNQUxMIExFVFRFUiBDIFdJVEggQ0FST04KK2NoYXIgXHUwMTEwIDE0NTY3OAkJTEFUSU4gQ0FQSVRBTCBMRVRURVIgRCBXSVRIIFNUUk9LRQorY2hhciBcdTAxMTEgMTQ1NjgJCUxBVElOIFNNQUxMIExFVFRFUiBEIFdJVEggU1RST0tFCitjaGFyIFx1MDExMiAxNTY3OAkJTEFUSU4gQ0FQSVRBTCBMRVRURVIgRSBXSVRIIE1BQ1JPTgorY2hhciBcdTAxMTMgMTU2OAkJTEFUSU4gU01BTEwgTEVUVEVSIEUgV0lUSCBNQUNST04KK2NoYXIgXHUwMTE4IDEyNjc4CQlMQVRJTiBDQVBJVEFMIExFVFRFUiBFIFdJVEggT0dPTkVLCitjaGFyIFx1MDExOSAxMjY4CQlMQVRJTiBDQVBJVEFMIExFVFRFUiBFIFdJVEggT0dPTkVLCitjaGFyIFx1MDExYSAxMjY3OAkJTEFUSU4gQ0FQSVRBTCBMRVRURVIgRSBXSVRIIENBUk9OCitjaGFyIFx1MDExYiAxMjY4CQlMQVRJTiBTTUFMTCBMRVRURVIgRSBXSVRIIENBUk9OCitjaGFyIFx1MDExYyAxMjQ1Njc4CQlMQVRJTiBDQVBJVEFMIExFVFRFUiBHIFdJVEggQ0lSQ1VNRkxFWAorY2hhciBcdTAxMWQgMTI0NTY4CQlMQVRJTiBTTUFMTCBMRVRURVIgRyBXSVRIIENJUkNVTUZMRVgKK2NoYXIgXHUwMTFlIDEyNDU2NzgJCUxBVElOIENBUElUQUwgTEVUVEVSIEcgV0lUSCBCUkVWRQorY2hhciBcdTAxMWYgMTI0NTY4CQlMQVRJTiBDQVBJVEFMIExFVFRFUiBHIFdJVEggQlJFVkUKK2NoYXIgXHUwMTIyIDEyNDU2NzgJCUxBVElOIENBUElUQUwgTEVUVEVSIEcgV0lUSCBDRURJTExBCitjaGFyIFx1MDEyMyAxMjQ1NjgJCUxBVElOIFNNQUxMIExFVFRFUiBHIFdJVEggQ0VESUxMQQorY2hhciBcdTAxMjQgMTI1Njc4CQlMQVRJTiBDQVBJVEFMIExFVFRFUiBIIFdJVEggQ0lSQ1VNRkxFWAorY2hhciBcdTAxMjUgMTI1NjgJCUxBVElOIFNNQUxMIExFVFRFUiBIIFdJVEggQ0lSQ1VNRkxFWAorY2hhciBcdTAxMmEgMjQ2NzgJCUxBVElOIENBUElUQUwgTEVUVEVSIEkgV0lUSCBNQUNST04KK2NoYXIgXHUwMTJiIDI0NjgJCUxBVElOIFNNQUxMIExFVFRFUiBJIFdJVEggTUFDUk9OCitjaGFyIFx1MDEzMCAzNDc4CQlMQVRJTiBDQVBJVEFMIExFVFRFUiBJIFdJVEggRE9UIEFCT1ZFCitjaGFyIFx1MDEzMSAzNDgJCUxBVElOIFNNQUxMIExFVFRFUiBJIFdJVEggRE9UIEFCT1ZFCitjaGFyIFx1MDEzNCAyNDU2NzgJCUxBVElOIENBUElUQUwgTEVUVEVSIEogV0lUSCBDSVJDVU1GTEVYCitjaGFyIFx1MDEzNSAyNDU2OAkJTEFUSU4gU01BTEwgTEVUVEVSIEogV0lUSCBDSVJDVU1GTEVYCitjaGFyIFx1MDEzNiAxMzY3OAkJTEFUSU4gQ0FQSVRBTCBMRVRURVIgSyBXSVRIIENFRElMTEEKK2NoYXIgXHUwMTM3IDEzNjgJCUxBVElOIFNNQUxMIExFVFRFUiBLIFdJVEggQ0VESUxMQQorY2hhciBcdTAxM2IgMTIzNjc4CQlMQVRJTiBDQVBJVEFMIExFVFRFUiBMIFdJVEggQ0VESUxMQQorY2hhciBcdTAxM2MgMTIzNjgJCUxBVElOIFNNQUxMIExFVFRFUiBMIFdJVEggQ0VESUxMQQorY2hhciBcdTAxNDEgMTM0NTY3OAkJTEFUSU4gQ0FQSVRBTCBMRVRURVIgTCBXSVRIIFNUUk9LRQorY2hhciBcdTAxNDIgMTM0NTY4CQlMQVRJTiBTTUFMTCBMRVRURVIgTCBXSVRIIFNUUk9LRQorY2hhciBcdTAxNDMgMTQ1Njc4CQlMQVRJTiBDQVBJVEFMIExFVFRFUiBOIFdJVEggQUNVVEUKK2NoYXIgXHUwMTQ0IDE0NTY4CQlMQVRJTiBTTUFMTCBMRVRURVIgTiBXSVRIIEFDVVRFCitjaGFyIFx1MDE0NSAxMzQ1Njc4CQlMQVRJTiBDQVBJVEFMIExFVFRFUiBOIFdJVEggQ0VESUxMQQorY2hhciBcdTAxNDYgMTM0NTY4CQlMQVRJTiBTTUFMTCBMRVRURVIgTiBXSVRIIENFRElMTEEKK2NoYXIgXHUwMTUwIDEyNDU2NzgJCUxBVElOIENBUElUQUwgTEVUVEVSIE8gV0lUSCBET1VCTEUgQUNVVEUKK2NoYXIgXHUwMTUxIDEyNDU2OAkJTEFUSU4gU01BTEwgTEVUVEVSIE8gV0lUSCBET1VCTEUgQUNVVEUKK2NoYXIgXHUwMTUyIDI0Njc4CQlMQVRJTiBDQVBJVEFMIExJR0FUVVJFIE9FCitjaGFyIFx1MDE1MyAyNDY4CQlMQVRJTiBTTUFMTCBMSUdBVFVSRSBPRQorY2hhciBcdTAxNTYgMTIzNTY3OAkJTEFUSU4gQ0FQSVRBTCBMRVRURVIgUiBXSVRIIENFRElMTEEKK2NoYXIgXHUwMTU3IDEyMzU2OAkJTEFUSU4gU01BTEwgTEVUVEVSIFIgV0lUSCBDRURJTExBCitjaGFyIFx1MDE1OCAyNDU2NzgJCUxBVElOIENBUElUQUwgTEVUVEVSIFIgV0lUSCBDQVJPTgorY2hhciBcdTAxNTkgMjQ1NjgJCUxBVElOIFNNQUxMIExFVFRFUiBSIFdJVEggQ0FST04KK2NoYXIgXHUwMTVhIDEzNDU2NzgJCUxBVElOIENBUElUQUwgTEVUVEVSIFMgV0lUSCBBQ1VURQorY2hhciBcdTAxNWIgMTM0NTY4CQlMQVRJTiBTTUFMTCBMRVRURVIgUyBXSVRIIEFDVVRFCitjaGFyIFx1MDE1YyAyMzQ2NzgJCUxBVElOIENBUElUQUwgTEVUVEVSIFMgV0lUSCBDSVJDVU1GTEVYCitjaGFyIFx1MDE1ZCAyMzQ2OAkJTEFUSU4gU01BTEwgTEVUVEVSIFMgV0lUSCBDSVJDVU1GTEVYCitjaGFyIFx1MDE1ZSAxMzQ1Njc4CQlMQVRJTiBDQVBJVEFMIExFVFRFUiBTIFdJVEggQ0VESUxMQQorY2hhciBcdTAxNWYgMTM0NTY4CQlMQVRJTiBTTUFMTCBMRVRURVIgUyBXSVRIIENFRElMTEEKK2NoYXIgXHUwMTYwIDY3OAkJTEFUSU4gQ0FQSVRBTCBMRVRURVIgUyBXSVRIIENBUk9OCitjaGFyIFx1MDE2MSA2OAkJTEFUSU4gU01BTEwgTEVUVEVSIFMgV0lUSCBDQVJPTgorY2hhciBcdTAxNjIgMjM0NTc4CQlMQVRJTiBDQVBJVEFMIExFVFRFUiBUIFdJVEggQ0VESUxMQQorY2hhciBcdTAxNjMgMjM0NTgJCUxBVElOIFNNQUxMIExFVFRFUiBUIFdJVEggQ0VESUxMQQorY2hhciBcdTAxNjQgMTI1Njc4CQlMQVRJTiBDQVBJVEFMIExFVFRFUiBUIFdJVEggQ0FST04KK2NoYXIgXHUwMTY1IDEyNTY4CQlMQVRJTiBTTUFMTCBMRVRURVIgVCBXSVRIIENBUk9OCitjaGFyIFx1MDE2YSAzNDY3OAkJTEFUSU4gQ0FQSVRBTCBMRVRURVIgVSBXSVRIIE1BQ1JPTgorY2hhciBcdTAxNmIgMzQ2OAkJTEFUSU4gU01BTEwgTEVUVEVSIFUgV0lUSCBNQUNST04KK2NoYXIgXHUwMTZjIDM0Njc4CQlMQVRJTiBDQVBJVEFMIExFVFRFUiBVIFdJVEggQlJFVkUKK2NoYXIgXHUwMTZkIDM0NjgJCUxBVElOIFNNQUxMIExFVFRFUiBVIFdJVEggQlJFVkUKK2NoYXIgXHUwMTZlIDIzNDU2NzgJCUxBVElOIENBUElUQUwgTEVUVEVSIFUgV0lUSCBSSU5HIEFCT1ZFCitjaGFyIFx1MDE2ZiAyMzQ1NjgJCUxBVElOIFNNQUxMIExFVFRFUiBVIFdJVEggUklORyBBQk9WRQorY2hhciBcdTAxNzAgMjM0NTY3OAkJTEFUSU4gQ0FQSVRBTCBMRVRURVIgVSBXSVRIIERPVUJMRSBBQ1VURQorY2hhciBcdTAxNzEgMjM0NTY4CQlMQVRJTiBTTUFMTCBMRVRURVIgVSBXSVRIIERPVUJMRSBBQ1VURQorY2hhciBcdTAxNzggMTM0NTY3OAkJTEFUSU4gQ0FQSVRBTCBMRVRURVIgWSBXSVRIIERJQUVSRVNJUworY2hhciBcdTAxNzkgMTM0NTY4CQlMQVRJTiBTTUFMTCBMRVRURVIgWSBXSVRIIERJQUVSRVNJUworY2hhciBcdTAxNzkgMTM0NTY3OAkJTEFUSU4gQ0FQSVRBTCBMRVRURVIgWiBXSVRIIEFDVVRFCitjaGFyIFx1MDE3YSAxMzQ1NjgJCUxBVElOIFNNQUxMIExFVFRFUiBaIFdJVEggQUNVVEUKK2NoYXIgXHUwMTdiIDEyMzQ2NzgJCUxBVElOIENBUElUQUwgTEVUVEVSIFogV0lUSCBET1QgQUJPVkUKK2NoYXIgXHUwMTdjIDEyMzQ2OAkJTEFUSU4gU01BTEwgTEVUVEVSIFogV0lUSCBET1QgQUJPVkUKK2NoYXIgXHUwMTdkIDEyNTY3OAkJTEFUSU4gQ0FQSVRBTCBMRVRURVIgWiBXSVRIIENBUk9OCitjaGFyIFx1MDE3ZSAxMjU2OAkJTEFUSU4gU01BTEwgTEVUVEVSIFogV0lUSCBDQVJPTgorY2hhciBcdTAxOTEgNzgJCUxBVElOIENBUElUQUwgTEVUVEVSIEYgV0lUSCBIT09LCitjaGFyIFx1MDE5MiA4CQlMQVRJTiBTTUFMTCBMRVRURVIgRiBXSVRIIEhPT0sKK2NoYXIgXHUwMWEwIDEyMzY3OAkJTEFUSU4gQ0FQSVRBTCBMRVRURVIgTyBXSVRIIEhPUk4KK2NoYXIgXHUwMWExIDEyMzY4CQlMQVRJTiBTTUFMTCBMRVRURVIgTyBXSVRIIEhPUk4KK2NoYXIgXHVhN2FiIDEzNTY3OAkJTEFUSU4gQ0FQSVRBTCBMRVRURVIgUkVWRVJTRUQgT1BFTiBFCitjaGFyIFx1MDI1YyAxMzU2OAkJTEFUSU4gU01BTEwgTEVUVEVSIFJFVkVSU0VEIE9QRU4gRQorY2hhciBcdTAyYzYgMzc4CQlNT0RJRklFUiBMRVRURVIgQ0lSQ1VNRkxFWCBBQ0NFTlQKK2NoYXIgXHUwMmM3IDEzNDU2OAkJQ0FST04KK2NoYXIgXHUwMmQ4IDEzNDU2OAkJQlJFVkUKK2NoYXIgXHUwMmQ5IDUJCURPVCBBQk9WRQorY2hhciBcdTAyZGIgMTM0NTY4CQlPR09ORUsKK2NoYXIgXHUwMmRjIDI1NzgJCVNNQUxMIFRJTERFCitjaGFyIFx1MjAwMyAwCQlFTSBTUEFDRQorY2hhciBcdTIwMTEgMzYJCU5PTi1CUkVBS0lORyBIWVBIRU4KK2NoYXIgXHUyMDEzIDM2OAkJRU4gREFTSAorY2hhciBcdTIwMTQgMzYJCUVNIERBU0gKK2NoYXIgXHUyMDE1IDM2CQlIT1JJWk9OVEFMIEJBUgorY2hhciBcdTIwMTcgMzYJCURPVUJMRSBMT1cgTElORQorY2hhciBcdTIwMTggMjM2NwkJTEVGVCBTSU5HTEUgUVVPVEFUSU9OIE1BUksKK2NoYXIgXHUyMDE5IDQ3CQlSSUdIVCBTSU5HTEUgUVVPVEFUSU9OIE1BUksKK2NoYXIgXHUyMDI5IDE0NTgJCVBBUkFHUkFQSCBTRVBBUkFUT1IKK2NoYXIgXHUyMDFhIDM2NzgJCVNJTkdMRSBMT1ctOSBRVU9UQVRJT04gTUFSSworY2hhciBcdTIwMWMgMTM4CQlMRUZUIERPVUJMRSBRVU9UQVRJT04gTUFSSworY2hhciBcdTIwMWQgMTIzOAkJUklHSFQgRE9VQkxFIFFVT1RBVElPTiBNQVJLCitjaGFyIFx1MjAxZSAxMjY4CQlET1VCTEUgTE9XLTkgUVVPVEFUSU9OIE1BUksKK2NoYXIgXHUyMDIwIDEyNDgJCURBR0dFUgorY2hhciBcdTIwMjEgMTI0NTgJCURPVUJMRSBEQUdHRVIKK2NoYXIgXHUyMDIyIDM1CQlCVUxMRVQKK2NoYXIgXHUyMDI2IDIzOAkJSE9SSVpPTlRBTCBFTExJUFNJUworY2hhciBcdTIwMzAgMjQ4CQlQRVIgTUlMTEUgU0lHTgorY2hhciBcdTIwMzkgMjcJCVNJTkdMRSBMRUZULVBPSU5USU5HIEFOR0xFIFFVT1RBVElPTiBNQVJLCitjaGFyIFx1MjAzYSAxMjM0NTgJCVNJTkdMRSBSSUdIVC1QT0lOVElORyBBTkdMRSBRVU9UQVRJT04gTUFSSworY2hhciBcdTIwM2MgNTgJCURPVUJMRSBFWENMQU1BVElPTiBNQVJLCitjaGFyIFx1MjA3ZiAxMzQ2NwkJU1VQRVJTQ1JJUFQgTEFUSU4gU01BTEwgTEVUVEVSIE4KK2NoYXIgXHUyMGFjIDQ1NwkJRVVSTyBTSUdOCitjaGFyIFx1MjBhZiAxNDU2NzgJCURSQUNITUEgU0lHTgorY2hhciBcdTIwYmQgNDU3OAkJUlVCTEUgU1lNQk9MCitjaGFyIFx1MjExNiAzNDU2CQlOVU1FUk8gU0lHTgorY2hhciBcdTIyMTkgNDgJCUJVTExFVCBPUEVSQVRPUgorY2hhciBcdTIxMjIgMTI0NTY3OAkJVFJBREUgTUFSSyBTSUdOCitjaGFyIFx1MjIxYSAxNDY3CQlTUVVBUkUgUk9PVAorY2hhciBcdTIyMWUgMjM0Njc4CQlJTkZJTklUWQorY2hhciBcdTIyMjkgNTc4CQlJTlRFUlNFQ1RJT04KK2NoYXIgXHUyMjQ4IDM1NzgJCUFMTU9TVCBFUVVBTCBUTworY2hhciBcdTIyNjEgMjM1NjgJCUlERU5USUNBTAorY2hhciBcdTIyNjQgNTY4CQlMRVNTLVRIQU4gT1IgRVFVQUwgVE8KK2NoYXIgXHUyMjY1IDQ1OAkJR1JFQVRFUi1USEFOIE9SIEVRVUFMIFRPCitjaGFyIFx1MjMxMCAxNDU2NwkJUkVWRVJTRUQgTk9UIFNJR04KK2NoYXIgXHUyMzIwIDM0NwkJVE9QIEhBTEYgSU5URUdSQUwKK2NoYXIgXHUyMzIxIDE1Njc4CQlCT1RUT00gSEFMRiBJTlRFR1JBTAorY2hhciBcdTI1MDAgNjcJCUJPWCBEUkFXSU5HUyBMSUdIVCBIT1JJWk9OVEFMCitjaGFyIFx1MjUwMiAyMzcJCUJPWCBEUkFXSU5HUyBMSUdIVCBWRVJUSUNBTAorY2hhciBcdTI1MEMgMjU3CQlCT1ggRFJBV0lOR1MgTElHSFQgRE9XTiBBTkQgUklHSFQKK2NoYXIgXHUyNTEwIDI3OAkJQk9YIERSQVdJTkdTIExJR0hUIERPV04gQU5EIExFRlQKK2NoYXIgXHUyNTE0IDM3OAkJQk9YIERSQVdJTkdTIExJR0hUIFVQIEFORCBSSUdIVAorY2hhciBcdTI1MTggNjc4CQlCT1ggRFJBV0lOR1MgTElHSFQgVVAgQU5EIExFRlQKK2NoYXIgXHUyNTFjIDIzNjcJCUJPWCBEUkFXSU5HUyBMSUdIVCBWRVJUSUNBTCBBTkQgUklHSFQKK2NoYXIgXHUyNTI0IDEzNTY4CQlCT1ggRFJBV0lOR1MgTElHSFQgVkVSVElDQUwgQU5EIExFRlQKK2NoYXIgXHUyNTJjIDEzOAkJQk9YIERSQVdJTkdTIExJR0hUIERPV04gQU5EIEhPUklaT05UQUwKK2NoYXIgXHUyNTM0IDI3CQlCT1ggRFJBV0lOR1MgTElHSFQgVVAgQU5EIEhPUklaT05UQUwKK2NoYXIgXHUyNTUwIDI1NzgJCUJPWCBEUkFXSU5HUyBET1VCTEUgSE9SSVpPTlRBTAorY2hhciBcdTI1NTEgMTIzNDU2OAkJQk9YIERSQVdJTkdTIERPVUJMRSBWRVJUSUNBTAorY2hhciBcdTI1NTIgMTIzNDY4CQlCT1ggRFJBV0lOR1MgRE9XTiBTSU5HTEUgQU5EIFJJR0hUIERPVUJMRQorY2hhciBcdTI1NTMgMTM1OAkJQk9YIERSQVdJTkdTIERPV04gRE9VQkxFIEFORCBSSUdIVCBTSU5HTEUKK2NoYXIgXHUyNTU0IDIzNTY3CQlCT1ggRFJBV0lOR1MgRE9VQkxFIERPV04gQU5EIFJJR0hUCitjaGFyIFx1MjU1NSAxNDgJCUJPWCBEUkFXSU5HUyBET1dOIFNJTkdMRSBBTkQgTEVGVCBET1VCTEUKK2NoYXIgXHUyNTU2IDM2OAkJQk9YIERSQVdJTkdTIERPV04gRE9VQkxFIEFORCBMRUZUIFNJTkdMRQorY2hhciBcdTI1NTcgMTI0NTgJCUJPWCBEUkFXSU5HUyBET1VCTEUgRE9XTiBBTkQgTEVGVAorY2hhciBcdTI1NTggMjQ4CQlCT1ggRFJBV0lOR1MgVVAgU0lOR0xFIEFORCBSSUdIVCBET1VCTEUKK2NoYXIgXHUyNTU5IDEyMzgJCUJPWCBEUkFXSU5HUyBVUCBET1VCTEUgQU5EIFJJR0hUIFNJTkdMRQorY2hhciBcdTI1NWEgMjM3OAkJQk9YIERSQVdJTkdTIERPVUJMRSBVUCBBTkQgUklHSFQKK2NoYXIgXHUyNTViIDM0Njc4CQlCT1ggRFJBV0lOR1MgVVAgU0lOR0xFIEFORCBMRUZUIERPVUJMRQorY2hhciBcdTI1NWMgNDY3OAkJQk9YIERSQVdJTkdTIFVQIERPVUJMRSBBTkQgTEVGVCBTSU5HTEUKK2NoYXIgXHUyNTVkIDI2NzgJCUJPWCBEUkFXSU5HUyBET1VCTEUgVVAgQU5EIExFRlQKK2NoYXIgXHUyNTVlIDY4CQlCT1ggRFJBV0lOR1MgVkVSVElDQUwgU0lOR0xFIEFORCBSSUdIVCBET1VCTEUKK2NoYXIgXHUyNTVmIDI1NwkJQk9YIERSQVdJTkdTIFZFUlRJQ0FMIERPVUJMRSBBTkQgUklHSFQgU0lOR0xFCitjaGFyIFx1MjU2MCAxMjQ4CQlCT1ggRFJBV0lOR1MgRE9VQkxFIFZFUlRJQ0FMIEFORCBSSUdIVAorY2hhciBcdTI1NjEgMjY4CQlCT1ggRFJBV0lOR1MgVkVSVElDQUwgU0lOR0xFIEFORCBMRUZUIERPVUJMRQorY2hhciBcdTI1NjIgMjQ1NjgJCUJPWCBEUkFXSU5HUyBWRVJUSUNBTCBET1VCTEUgQU5EIExFRlQgU0lOR0xFCitjaGFyIFx1MjU2MyAxMjM1NjcJCUJPWCBEUkFXSU5HUyBET1VCTEUgVkVSVElDQUwgQU5EIExFRlQKK2NoYXIgXHUyNTY0IDM0NjcJCUJPWCBEUkFXSU5HUyBET1dOIFNJTkdMRSBBTkQgSE9SSVpPTlRBTCBET1VCTEUKK2NoYXIgXHUyNTY1IDI4CQlCT1ggRFJBV0lOR1MgRE9XTiBET1VCTEUgQU5EIEhPUklaT05UQUwgU0lOR0xFCitjaGFyIFx1MjU2NiAxMjM0NTgJCUJPWCBEUkFXSU5HUyBET1VCTEUgRE9XTiBBTkQgSE9SSVpPTlRBTAorY2hhciBcdTI1NjcgMTY3CQlCT1ggRFJBV0lOR1MgVVAgU0lOR0xFIEFORCBIT1JJWk9OVEFMIERPVUJMRQorY2hhciBcdTI1NjggNTcJCUJPWCBEUkFXSU5HUyBVUCBET1VCTEUgQU5EIEhPUklaT05UQUwgU0lOR0xFCitjaGFyIFx1MjU2OSA4CQlCT1ggRFJBV0lOR1MgRE9VQkxFIFVQIEFORCBIT1JJWk9OVEFMCitjaGFyIFx1MjU2YSAzNTY3CQlCT1ggRFJBV0lOR1MgVkVSVElDQUwgU0lOR0xFIEFORCBIT1JJWk9OVEFMIERPVUJMRQorY2hhciBcdTI1NmIgMTIzNTgJCUJPWCBEUkFXSU5HUyBWRVJUSUNBTCBET1VCTEUgQU5EIEhPUklaT05UQUwgU0lOR0xFCitjaGFyIFx1MjU2YyA1Njc4CQlCT1ggRFJBV0lOR1MgRE9VQkxFIFZFUlRJQ0FMIEFORCBIT1JJWk9OVEFMCitjaGFyIFx1MjU4MCAyMzQ1NjcJCVVQUEVSIEhBTEYgQkxPQ0sKK2NoYXIgXHUyNTg0IDEyNjcJCUxPV0VSIEhBTEYgQkxPQ0sKK2NoYXIgXHUyNTg4IDEyMzQ1Njc4CQlGVUxMIEJMT0NLCitjaGFyIFx1MjU4YyAyMzY3OAkJTEVGVCBIQUxGIEJMT0NLCitjaGFyIFx1MjU5MCAzNTY3OAkJUklHSFQgSEFMRiBCTE9DSworY2hhciBcdTI1OTEgNzgJCUxJR0hUIFNIQURFCitjaGFyIFx1MjU5MiAzNjc4CQlNRURJVU0gU0hBREUKK2NoYXIgXHUyNTkzIDIzNTY3OAkJREFSSyBTSEFERQorY2hhciBcdTI1YTAgMTIzNDU2NwkJQkxBQ0sgU1FVQVJFCitjaGFyIFx1MjVjZiAzNQkJQkxBQ0sgQ0lSQ0xFCisKK2luY2x1ZGUgY29tbW9uLnR0aQpkaWZmIC0tZ2l0IGEvVGFibGVzL1RleHQvc2EudHRiIGIvVGFibGVzL1RleHQvc2EudHRiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNlNWEyNzEKLS0tIC9kZXYvbnVsbAorKysgYi9UYWJsZXMvVGV4dC9zYS50dGIKQEAgLTAsMCArMSwyNCBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorIyAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyMKKyMgQ29weXJpZ2h0IChDKSAyMDA4LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorIworIyBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorIworIyBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisjIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyMgbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisjCisjIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMgQlJMVFRZIFRleHQgVGFibGUgLSBTYW5za3JpdAorCitpbmNsdWRlIGRldmFuYWdhcmkudHRpCitpbmNsdWRlIGFzY2lpLWJhc2ljLnR0aQorCitpbmNsdWRlIGNvbW1vbi50dGkKZGlmZiAtLWdpdCBhL1RhYmxlcy9UZXh0L3NhdC50dGIgYi9UYWJsZXMvVGV4dC9zYXQudHRiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk0MDA3ZDAKLS0tIC9kZXYvbnVsbAorKysgYi9UYWJsZXMvVGV4dC9zYXQudHRiCkBAIC0wLDAgKzEsMjYgQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyMgICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisjCisjIENvcHlyaWdodCAoQykgMjAwOC0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyMKKyMgQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjIEJSTFRUWSBUZXh0IFRhYmxlIC0gU2FudGFsaQorCitpbmNsdWRlIGRldmFuYWdhcmkudHRpCitpbmNsdWRlIGJlbmdhbGkudHRpCitpbmNsdWRlIG9yaXlhLnR0aQoraW5jbHVkZSBhc2NpaS1iYXNpYy50dGkKKworaW5jbHVkZSBjb21tb24udHRpCmRpZmYgLS1naXQgYS9UYWJsZXMvVGV4dC9zZC50dGIgYi9UYWJsZXMvVGV4dC9zZC50dGIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWEyMTExMAotLS0gL2Rldi9udWxsCisrKyBiL1RhYmxlcy9UZXh0L3NkLnR0YgpAQCAtMCwwICsxLDI0IEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisjICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorIworIyBDb3B5cmlnaHQgKEMpIDIwMDgtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisjCisjIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisjCisjIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyMgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorIyBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyMKKyMgV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworIworIyBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIyBCUkxUVFkgVGV4dCBUYWJsZSAtIFNpbmRoaQorCitpbmNsdWRlIGRldmFuYWdhcmkudHRpCitpbmNsdWRlIGFzY2lpLWJhc2ljLnR0aQorCitpbmNsdWRlIGNvbW1vbi50dGkKZGlmZiAtLWdpdCBhL1RhYmxlcy9UZXh0L3NlLnR0YiBiL1RhYmxlcy9UZXh0L3NlLnR0YgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNTZjNWY0Ci0tLSAvZGV2L251bGwKKysrIGIvVGFibGVzL1RleHQvc2UudHRiCkBAIC0wLDAgKzEsNDQgQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyMgICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisjCisjIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyMKKyMgQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjIEJSTFRUWSBUZXh0IFRhYmxlIC0gU2FtaSAoTm9ydGhlcm4pCisjIFRvbWFzIE3DpXJkc2rDtiA8dG9tYXMubWFyZHNqb0BpY2FwLm51PgorIyBzZWU6IGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL05vcnRoZXJuX1NhbWlfQnJhaWxsZQorCitjaGFyCVx4QzEJKDEyMyA1NjcgKQkjIOKhtyDDgSBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgQSBXSVRIIEFDVVRFXQorY2hhcglceEUxCSgxMjMgNTYgICkJIyDioLcgw6EgW0xBVElOIFNNQUxMIExFVFRFUiBBIFdJVEggQUNVVEVdCisKK2NoYXIJXHUwMTBDCSgxICA0IDY3ICkJIyDioakgxIwgW0xBVElOIENBUElUQUwgTEVUVEVSIEMgV0lUSCBDQVJPTl0KK2NoYXIJXHUwMTBECSgxICA0IDYgICkJIyDioKkgxI0gW0xBVElOIFNNQUxMIExFVFRFUiBDIFdJVEggQ0FST05dCisKK2NoYXIJXHUwMTEwCSgxICA0NTY3ICkJIyDiobkgxJAgW0xBVElOIENBUElUQUwgTEVUVEVSIEQgV0lUSCBTVFJPS0VdCitjaGFyCVx1MDExMQkoMSAgNDU2ICApCSMg4qC5IMSRIFtMQVRJTiBTTUFMTCBMRVRURVIgRCBXSVRIIFNUUk9LRV0KKworY2hhcglcdTAxNEEJKDEyIDQgNjcgKQkjIOKhqyDFiiBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgRU5HXQorY2hhcglcdTAxNEIJKDEyIDQgNiAgKQkjIOKgqyDFiyBbTEFUSU4gU01BTEwgTEVUVEVSIEVOR10KKworY2hhcglcdTAxNjAJKDEgICA1NjcgKQkjIOKhsSDFoCBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgUyBXSVRIIENBUk9OXQorY2hhcglcdTAxNjEJKDEgICA1NiAgKQkjIOKgsSDFoSBbTEFUSU4gU01BTEwgTEVUVEVSIFMgV0lUSCBDQVJPTl0KKworY2hhcglcdTAxNjYJKDEyICA1NjcgKQkjIOKhsyDFpiBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgVCBXSVRIIFNUUk9LRV0KK2NoYXIJXHUwMTY3CSgxMiAgNTYgICkJIyDioLMgxacgW0xBVElOIFNNQUxMIExFVFRFUiBUIFdJVEggU1RST0tFXQorCitjaGFyCVx1MDE3RAkoIDIzNCA2NyApCSMg4qGuIMW9IFtMQVRJTiBDQVBJVEFMIExFVFRFUiBaIFdJVEggQ0FST05dCitjaGFyCVx1MDE3RQkoIDIzNCA2ICApCSMg4qCuIMW+IFtMQVRJTiBTTUFMTCBMRVRURVIgWiBXSVRIIENBUk9OXQorCitpbmNsdWRlIG5vLW91cC50dGIKZGlmZiAtLWdpdCBhL1RhYmxlcy9UZXh0L3NrLnR0YiBiL1RhYmxlcy9UZXh0L3NrLnR0YgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZWNlNDY0Ci0tLSAvZGV2L251bGwKKysrIGIvVGFibGVzL1RleHQvc2sudHRiCkBAIC0wLDAgKzEsMTA4IEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisjICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorIworIyBDb3B5cmlnaHQgKEMpIDIwMDgtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisjCisjIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisjCisjIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyMgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorIyBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyMKKyMgV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworIworIyBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIyBCUkxUVFkgVGV4dCBUYWJsZSAtIFNsb3ZhaworCisjIENyZWF0ZWQgYW5kIG1haW50YWluZWQgYnkgTWlrZSBTaXZpbGwgIzxtaWtlLnNpdmlsbEB2aWV3cGx1cy5jb20+CisjCisjIENvbnZlcnRlZCBmcm9tIGxpYmxvdWlzIHRhYmxlIGJ5IFNhbXVlbCBUaGliYXVsdCA8c2FtdWVsLnRoaWJhdWx0QGVucy1seW9uLm9yZz4KKworIyBNb2RpZmllZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+CisjIHdpdGggYWR2aWNlIGZyb20gSmFuIEJ1Y2hhbCA8YnVjaGFsQGJyYWlsY29tLm9yZz4KKyMgdGhlIG51bWJlcnMgMC05IGFyZSByZXByZXNlbnRlZCBieSB0aGUgbGV0dGVycyBqLGEtaSB3aXRoIGRvdCA4IGFkZGVkCitpbmNsdWRlIG51bS1kb3Q4LnR0aQorCisjIHRoZSBzdGFuZGFyZCByZXByZXNlbnRhdGlvbnMgZm9yIHRoZSBsZXR0ZXJzIG9mIHRoZSBMYXRpbiBhbHBoYWJldAoraW5jbHVkZSBsdHItbGF0aW4udHRpCisKKyMgU2xvdmFrIGxldHRlcnMgd2l0aCBhY2NlbnRzCitjaGFyIFx4RTEJKDEgICAgNiAgKSAgIyDioKEgw6EgW0xBVElOIFNNQUxMIExFVFRFUiBBIFdJVEggQUNVVEVdCitjaGFyIFx4QzEJKDEgICAgNjcgKSAgIyDioaEgw4EgW0xBVElOIENBUElUQUwgTEVUVEVSIEEgV0lUSCBBQ1VURV0KK2NoYXIgXHhFNAkoICAgNCAgICApICAjIOKgiCDDpCBbTEFUSU4gU01BTEwgTEVUVEVSIEEgV0lUSCBESUFFUkVTSVNdCitjaGFyIFx4QzQJKCAgIDQgIDcgKSAgIyDioYggw4QgW0xBVElOIENBUElUQUwgTEVUVEVSIEEgV0lUSCBESUFFUkVTSVNdCitjaGFyIFx1MDEwRAkoMSAgNCA2ICApICAjIOKgqSDEjSBbTEFUSU4gU01BTEwgTEVUVEVSIEMgV0lUSCBDQVJPTl0KK2NoYXIgXHUwMTBDCSgxICA0IDY3ICkgICMg4qGpIMSMIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBDIFdJVEggQ0FST05dCitjaGFyIFx1MDEwRgkoMSAgNDU2ICApICAjIOKguSDEjyBbTEFUSU4gU01BTEwgTEVUVEVSIEQgV0lUSCBDQVJPTl0KK2NoYXIgXHUwMTBFCSgxICA0NTY3ICkgICMg4qG5IMSOIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBEIFdJVEggQ0FST05dCitjaGFyIFx4RTkJKCAgMzQ1ICAgKSAgIyDioJwgw6kgW0xBVElOIFNNQUxMIExFVFRFUiBFIFdJVEggQUNVVEVdCitjaGFyIFx4QzkJKCAgMzQ1IDcgKSAgIyDioZwgw4kgW0xBVElOIENBUElUQUwgTEVUVEVSIEUgV0lUSCBBQ1VURV0KK2NoYXIgXHUwMTFCCSgxMiAgIDYgICkgICMg4qCjIMSbIFtMQVRJTiBTTUFMTCBMRVRURVIgRSBXSVRIIENBUk9OXQorY2hhciBcdTAxMUEJKDEyICAgNjcgKSAgIyDioaMgxJogW0xBVElOIENBUElUQUwgTEVUVEVSIEUgV0lUSCBDQVJPTl0KK2NoYXIgXHhFRAkoICAzNCAgICApICAjIOKgjCDDrSBbTEFUSU4gU01BTEwgTEVUVEVSIEkgV0lUSCBBQ1VURV0KK2NoYXIgXHhDRAkoICAzNCAgNyApICAjIOKhjCDDjSBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgSSBXSVRIIEFDVVRFXQorY2hhciBcdTAxM0EJKCAgIDQgNiAgKSAgIyDioKggxLogW0xBVElOIFNNQUxMIExFVFRFUiBMIFdJVEggQUNVVEVdCitjaGFyIFx1MDEzOQkoICAgNCA2NyApICAjIOKhqCDEuSBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgTCBXSVRIIEFDVVRFXQorY2hhciBcdTAxM0UJKCAgIDQ1NiAgKSAgIyDioLggxL4gW0xBVElOIFNNQUxMIExFVFRFUiBMIFdJVEggQ0FST05dCitjaGFyIFx1MDEzRAkoICAgNDU2NyApICAjIOKhuCDEvSBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgTCBXSVRIIENBUk9OXQorY2hhciBcdTAxNDgJKDEyIDQgNiAgKSAgIyDioKsgxYggW0xBVElOIFNNQUxMIExFVFRFUiBOIFdJVEggQ0FST05dCitjaGFyIFx1MDE0NwkoMTIgNCA2NyApICAjIOKhqyDFhyBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgTiBXSVRIIENBUk9OXQorY2hhciBceEYzCSggMiA0IDYgICkgICMg4qCqIMOzIFtMQVRJTiBTTUFMTCBMRVRURVIgTyBXSVRIIEFDVVRFXQorY2hhciBceEQzCSggMiA0IDY3ICkgICMg4qGqIMOTIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBPIFdJVEggQUNVVEVdCitjaGFyIFx4RjQJKCAyMzQ1NiAgKSAgIyDioL4gw7QgW0xBVElOIFNNQUxMIExFVFRFUiBPIFdJVEggQ0lSQ1VNRkxFWF0KK2NoYXIgXHhENAkoIDIzNDU2NyApICAjIOKhviDDlCBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgTyBXSVRIIENJUkNVTUZMRVhdCitjaGFyIFx1MDE1NQkoMTIzIDU2ICApICAjIOKgtyDFlSBbTEFUSU4gU01BTEwgTEVUVEVSIFIgV0lUSCBBQ1VURV0KK2NoYXIgXHUwMTU0CSgxMjMgNTY3ICkgICMg4qG3IMWUIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBSIFdJVEggQUNVVEVdCitjaGFyIFx1MDE1OQkoMTIzNDU2ICApICAjIOKgvyDFmSBbTEFUSU4gU01BTEwgTEVUVEVSIFIgV0lUSCBDQVJPTl0KK2NoYXIgXHUwMTU4CSgxMjM0NTY3ICkgICMg4qG/IMWYIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBSIFdJVEggQ0FST05dCitjaGFyIFx1MDE2MQkoMSAgIDU2ICApICAjIOKgsSDFoSBbTEFUSU4gU01BTEwgTEVUVEVSIFMgV0lUSCBDQVJPTl0KK2NoYXIgXHUwMTYwCSgxICAgNTY3ICkgICMg4qGxIMWgIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBTIFdJVEggQ0FST05dCitjaGFyIFx1MDE2NQkoMTIgIDU2ICApICAjIOKgsyDFpSBbTEFUSU4gU01BTEwgTEVUVEVSIFQgV0lUSCBDQVJPTl0KK2NoYXIgXHUwMTY0CSgxMiAgNTY3ICkgICMg4qGzIMWkIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBUIFdJVEggQ0FST05dCitjaGFyIFx4RkEJKCAgMzQgNiAgKSAgIyDioKwgw7ogW0xBVElOIFNNQUxMIExFVFRFUiBVIFdJVEggQUNVVEVdCitjaGFyIFx4REEJKCAgMzQgNjcgKSAgIyDioawgw5ogW0xBVElOIENBUElUQUwgTEVUVEVSIFUgV0lUSCBBQ1VURV0KK2NoYXIgXHUwMTZGCSggIDM0NTYgICkgICMg4qC8IMWvIFtMQVRJTiBTTUFMTCBMRVRURVIgVSBXSVRIIFJJTkcgQUJPVkVdCitjaGFyIFx1MDE2RQkoICAzNDU2NyApICAjIOKhvCDFriBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgVSBXSVRIIFJJTkcgQUJPVkVdCitjaGFyIFx4RkQJKDEyMzQgNiAgKSAgIyDioK8gw70gW0xBVElOIFNNQUxMIExFVFRFUiBZIFdJVEggQUNVVEVdCitjaGFyIFx4REQJKDEyMzQgNjcgKSAgIyDioa8gw50gW0xBVElOIENBUElUQUwgTEVUVEVSIFkgV0lUSCBBQ1VURV0KK2NoYXIgXHUwMTdFCSggMjM0IDYgICkgICMg4qCuIMW+IFtMQVRJTiBTTUFMTCBMRVRURVIgWiBXSVRIIENBUk9OXQorY2hhciBcdTAxN0QJKCAyMzQgNjcgKSAgIyDioa4gxb0gW0xBVElOIENBUElUQUwgTEVUVEVSIFogV0lUSCBDQVJPTl0KKworY2hhciBceDIxCSggMjMgNSAgICkgICMg4qCWICEgW0VYQ0xBTUFUSU9OIE1BUktdCitjaGFyIFx4MjIJKCAyMyA1NiAgKSAgIyDioLYgIiBbUVVPVEFUSU9OIE1BUktdCitjaGFyIFx4MjMJKCAgMzQ1Njc4KSAgIyDio7wgIyBbTlVNQkVSIFNJR05dCitjaGFyIFx4MjQJKCAyMyA1ICA4KSAgIyDiopYgJCBbRE9MTEFSIFNJR05dCitjaGFyIFx4MjUJKDEyMzQgICA4KSAgIyDioo8gJSBbUEVSQ0VOVCBTSUdOXQorY2hhciBceDI2CSggMjMgNSA3OCkgICMg4qOWICYgW0FNUEVSU0FORF0KK2NoYXIgXHgyNwkoICAgNCAgIDgpICAjIOKiiCAnIFtBUE9TVFJPUEhFXQorY2hhciBceDI4CSggMjMgIDYgICkgICMg4qCmICggW0xFRlQgUEFSRU5USEVTSVNdCitjaGFyIFx4MjkJKCAgMyA1NiAgKSAgIyDioLQgKSBbUklHSFQgUEFSRU5USEVTSVNdCitjaGFyIFx4MkEJKCAgMyA1ICAgKSAgIyDioJQgKiBbQVNURVJJU0tdCitjaGFyIFx4MkIJKCAyICA1NiAgKSAgIyDioLIgKyBbUExVUyBTSUdOXQorY2hhciBceDJDCSggMiAgICAgICkgICMg4qCCICwgW0NPTU1BXQorY2hhciBceDJECSggIDMgIDYgICkgICMg4qCkIC0gW0hZUEhFTi1NSU5VU10KK2NoYXIgXHgyRQkoICAzICAgICApICAjIOKghCAuIFtGVUxMIFNUT1BdCitjaGFyIFx4MkYJKDEyIDQ1NiAgKSAgIyDioLsgLyBbU09MSURVU10KK2NoYXIgXHgzQQkoIDIgIDUgICApICAjIOKgkiA6IFtDT0xPTl0KK2NoYXIgXHgzQgkoIDIzICAgICApICAjIOKghiA7IFtTRU1JQ09MT05dCitjaGFyIFx4M0MJKCAyMyAgICA4KSAgIyDiooYgPCBbTEVTUy1USEFOIFNJR05dCitjaGFyIFx4M0QJKCAyMyA1Njc4KSAgIyDio7YgPSBbRVFVQUxTIFNJR05dCitjaGFyIFx4M0UJKCAgICA1NjcgKSAgIyDiobAgPiBbR1JFQVRFUi1USEFOIFNJR05dCitjaGFyIFx4M0YJKCAyICAgNiAgKSAgIyDioKIgPyBbUVVFU1RJT04gTUFSS10KK2NoYXIgXHg0MAkoMTIgNDU2IDgpICAjIOKiuyBAIFtDT01NRVJDSUFMIEFUXQorY2hhciBceDVCCSggMjMgIDY3ICkgICMg4qGmIFsgW0xFRlQgU1FVQVJFIEJSQUNLRVRdCitjaGFyIFx4NUMJKCAyMyAgNiA4KSAgIyDioqYgXCBbUkVWRVJTRSBTT0xJRFVTXQorY2hhciBceDVECSggIDMgNTY3ICkgICMg4qG0IF0gW1JJR0hUIFNRVUFSRSBCUkFDS0VUXQorY2hhciBceDVFCSggICA0NSA3ICkgICMg4qGYIF4gW0NJUkNVTUZMRVggQUNDRU5UXQorY2hhciBceDVGCSggIDMgIDY3ICkgICMg4qGkIF8gW0xPVyBMSU5FXQorY2hhciBceDYwCSggICA0ICA3OCkgICMg4qOIIGAgW0dSQVZFIEFDQ0VOVF0KK2NoYXIgXHg3QgkoIDIzICA2NzgpICAjIOKjpiB7IFtMRUZUIENVUkxZIEJSQUNLRVRdCitjaGFyIFx4N0MJKCAgIDQ1NiA4KSAgIyDiorggfCBbVkVSVElDQUwgTElORV0KK2NoYXIgXHg3RAkoICAzIDU2NzgpICAjIOKjtCB9IFtSSUdIVCBDVVJMWSBCUkFDS0VUXQorY2hhciBceDdFCSggICAgNSA3ICkgICMg4qGQIH4gW1RJTERFXQorCitpbmNsdWRlIGNvbW1vbi50dGkKZGlmZiAtLWdpdCBhL1RhYmxlcy9UZXh0L3NsLnR0YiBiL1RhYmxlcy9UZXh0L3NsLnR0YgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NWJiNTFhCi0tLSAvZGV2L251bGwKKysrIGIvVGFibGVzL1RleHQvc2wudHRiCkBAIC0wLDAgKzEsMTc5IEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisjICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorIworIyBDb3B5cmlnaHQgKEMpIDIwMDgtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisjCisjIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisjCisjIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyMgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorIyBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyMKKyMgV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworIworIyBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIyBCUkxUVFkgVGV4dCBUYWJsZSAtIFNsb3ZlbmlhbgorIworIyBDb3B5cmlnaHQgKEMpIDIwMDUgYnkgU2ViYXN0aWVuIFNhYmxlLCBBbGwgcmlnaHRzIHJlc2VydmVkLgorCisjIFRhYmxlIGdlbmVyYXRlZCBieSBTw6liYXN0aWVuIFNhYmzDqSA8c2FibGVAdXNlcnMuc291cmNlZm9yZ2UubmV0PiBmb3IKKyMgbGliYnJhaWxsZSBodHRwOi8vbGliYnJhaWxsZS5vcmcgYW5kIGdub21lLWJyYWlsbGUKKyMgaHR0cDovL2N2cy5nbm9tZS5vcmcvdmlld2N2cy9nbm9tZS1icmFpbGxlLworIworIyBUYWJsZSBhZGFwdGVkIGZvciBCUkxUVFkgYnkgU2FtdWVsIFRoaWJhdWx0IDxzYW11ZWwudGhpYmF1bHRAZW5zLWx5b24ub3JnPgorIworIyAqTWFueSB0aGFua3MgdG8gRGFua28gQnV0b3JhYyA8ZGFua28gYXQgaXBzaXMuaHI+IGZvciBoaXMgaGVscCoKKyMgVGFibGUgYmFzZWQgb24gIkNyb2F0aWFuIGNvZGUgcGFnZSBmb3IgY29tcHV0ZXIgOC1kb3QgQnJhaWxsZQorIyBhbHBoYWJldCBBTlNJLTEyNTAiIGZyb20gdGhlICJDcm9hdGlhbiBBc3NvY2lhdGlvbiBvZiB0aGUgQmxpbmQiIGF0CisjIGh0dHA6Ly93d3cuc2F2ZXotc2xpamVwaWguaHIvZW4vZG93bmxvYWQuaHRtCisjIENoYXJhY3RlcnMgd2VyZSBjaGFuZ2VkIGJ5IEpvxb5lZiBHcmVnb3JjCisjIERhdGEgYWJvdXQgY2hhcmFjdGVycyBoYXMgYmVlbiBwcm92aWRlZCBieSBNYXRlamEgSmVuxI1pxI0KKworIyBnZW5lcmF0ZWQgYnkgYnJsdHR5LXR0YjoKKyMgdGhlIG51bWJlcnMgMC05IGFyZSByZXByZXNlbnRlZCBieSB0aGUgbGV0dGVycyBqLGEtaSB3aXRoIGRvdCA4IGFkZGVkCitpbmNsdWRlIG51bS1kb3Q4LnR0aQorCisjIHRoZSBzdGFuZGFyZCByZXByZXNlbnRhdGlvbnMgZm9yIHRoZSBsZXR0ZXJzIG9mIHRoZSBMYXRpbiBhbHBoYWJldAoraW5jbHVkZSBsdHItbGF0aW4udHRpCisKK2NoYXIJXHgyMgkoIDIzIDU2ICApICAjIOKgtiAiIFtRVU9UQVRJT04gTUFSS10KK2NoYXIJXHgyNAkoICAgNCA2ICApICAjIOKgqCAkIFtET0xMQVIgU0lHTl0KK2NoYXIJXHgyNQkoMTIzNDU2ICApICAjIOKgvyAlIFtQRVJDRU5UIFNJR05dCitjaGFyCVx4MjYJKDEyMzQgNiAgKSAgIyDioK8gJiBbQU1QRVJTQU5EXQorY2hhcglceDI3CSggIDMgICAgICkgICMg4qCEICcgW0FQT1NUUk9QSEVdCitjaGFyCVx4MjgJKCAyMyAgNiAgKSAgIyDioKYgKCBbTEVGVCBQQVJFTlRIRVNJU10KK2NoYXIJXHgyOQkoICAzIDU2ICApICAjIOKgtCApIFtSSUdIVCBQQVJFTlRIRVNJU10KK2NoYXIJXHgyQQkoICAzIDUgICApICAjIOKglCAqIFtBU1RFUklTS10KK2NoYXIJXHgyQgkoIDIzIDUgIDgpICAjIOKiliArIFtQTFVTIFNJR05dCitjaGFyCVx4MkMJKCAyICAgICAgKSAgIyDioIIgLCBbQ09NTUFdCitjaGFyCVx4MkQJKCAgMyAgNiAgKSAgIyDioKQgLSBbSFlQSEVOLU1JTlVTXQorY2hhcglceDJFCSggMiAgNTYgICkgICMg4qCyIC4gW0ZVTEwgU1RPUF0KK2NoYXIJXHgyRgkoIDIgIDU2IDgpICAjIOKisiAvIFtTT0xJRFVTXQorY2hhcglceDNBCSggMiAgNSAgICkgICMg4qCSIDogW0NPTE9OXQorY2hhcglceDNCCSggMjMgICAgICkgICMg4qCGIDsgW1NFTUlDT0xPTl0KK2NoYXIJXHgzQwkoIDIgNCA2IDgpICAjIOKiqiA8IFtMRVNTLVRIQU4gU0lHTl0KK2NoYXIJXHgzRAkoIDIzIDU2IDgpICAjIOKitiA9IFtFUVVBTFMgU0lHTl0KK2NoYXIJXHgzRQkoMSAzIDUgIDgpICAjIOKilSA+IFtHUkVBVEVSLVRIQU4gU0lHTl0KK2NoYXIJXHgzRgkoIDIgICA2ICApICAjIOKgoiA/IFtRVUVTVElPTiBNQVJLXQorY2hhcglceDQwCSgxICA0NTYgICkgICMg4qC5IEAgW0NPTU1FUkNJQUwgQVRdCitjaGFyCVx4NUIJKDEyMzQgNiA4KSAgIyDioq8gWyBbTEVGVCBTUVVBUkUgQlJBQ0tFVF0KK2NoYXIJXHg1QwkoMSAgNDU2IDgpICAjIOKiuSBcIFtSRVZFUlNFIFNPTElEVVNdCitjaGFyCVx4NUQJKDEgMzQ1NiA4KSAgIyDior0gXSBbUklHSFQgU1FVQVJFIEJSQUNLRVRdCitjaGFyCVx4NUUJKCAgICA1NjcgKSAgIyDiobAgXiBbQ0lSQ1VNRkxFWCBBQ0NFTlRdCitjaGFyCVx4NUYJKCAgIDQ1NiA4KSAgIyDiorggXyBbTE9XIExJTkVdCitjaGFyCVx4NjAJKCAgIDQgICAgKSAgIyDioIggYCBbR1JBVkUgQUNDRU5UXQorY2hhcglceDdCCSggMjMgICAgOCkgICMg4qKGIHsgW0xFRlQgQ1VSTFkgQlJBQ0tFVF0KK2NoYXIJXHg3QwkoICAgNDUgICApICAjIOKgmCB8IFtWRVJUSUNBTCBMSU5FXQorZ2x5cGgJXHg3RAkoICAgIDU2NyApICAjIOKhsCB9IFtSSUdIVCBDVVJMWSBCUkFDS0VUXQorY2hhcglceDdFCSggICAgNTYgICkgICMg4qCwIH4gW1RJTERFXQorY2hhcglceEE0CSggICA0IDY3OCkgICMg4qOoIMKkIFtDVVJSRU5DWSBTSUdOXQorY2hhcglceEE2CSggICA0IDYgOCkgICMg4qKoIMKmIFtCUk9LRU4gQkFSXQorY2hhcglceEE3CSggIDMgNSA3OCkgICMg4qOUIMKnIFtTRUNUSU9OIFNJR05dCitjaGFyCVx4QTgJKCAgICAgICA4KSAgIyDiooAgwqggW0RJQUVSRVNJU10KK2dseXBoCVx4QTkJKDEyIDQ1ICA4KSAgIyDiopsgwqkgW0NPUFlSSUdIVCBTSUdOXQorY2hhcglceEFCCSggIDMgICA3OCkgICMg4qOEIMKrIFtMRUZULVBPSU5USU5HIERPVUJMRSBBTkdMRSBRVU9UQVRJT04gTUFSS10KK2NoYXIJXHhBQwkoIDIzIDUgNyApICAjIOKhliDCrCBbTk9UIFNJR05dCitjaGFyCVx4QUQJKCAgICAgIDc4KSAgIyDio4Agwq0gW1NPRlQgSFlQSEVOXQorY2hhcglceEFFCSgxMiA0NTY3OCkgICMg4qO7IMKuIFtSRUdJU1RFUkVEIFNJR05dCitjaGFyCVx4QjAJKCAgICA1IDc4KSAgIyDio5AgwrAgW0RFR1JFRSBTSUdOXQorY2hhcglceEIxCSgxMjM0IDY3OCkgICMg4qOvIMKxIFtQTFVTLU1JTlVTIFNJR05dCitjaGFyCVx4QjQJKCAgIDQgICA4KSAgIyDiooggwrQgW0FDVVRFIEFDQ0VOVF0KK2NoYXIJXHhCNQkoICAzNDU2NyApICAjIOKhvCDCtSBbTUlDUk8gU0lHTl0KK2NoYXIJXHhCNgkoMTIzNCAgIDgpICAjIOKijyDCtiBbUElMQ1JPVyBTSUdOXQorY2hhcglceEI3CSggIDMgICAgOCkgICMg4qKEIMK3IFtNSURETEUgRE9UXQorY2hhcglceEI4CSggICAgNTYgOCkgICMg4qKwIMK4IFtDRURJTExBXQorY2hhcglceEJCCSggICAgIDY3OCkgICMg4qOgIMK7IFtSSUdIVC1QT0lOVElORyBET1VCTEUgQU5HTEUgUVVPVEFUSU9OIE1BUktdCitjaGFyCVx4QzEJKDEgMyAgICA4KSAgIyDiooUgw4EgW0xBVElOIENBUElUQUwgTEVUVEVSIEEgV0lUSCBBQ1VURV0KK2NoYXIJXHhDMgkoMTIzIDU2IDgpICAjIOKityDDgiBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgQSBXSVRIIENJUkNVTUZMRVhdCitjaGFyCVx4QzQJKCAgMzQ1IDcgKSAgIyDioZwgw4QgW0xBVElOIENBUElUQUwgTEVUVEVSIEEgV0lUSCBESUFFUkVTSVNdCitjaGFyCVx4QzcJKDEyMzQgNjcgKSAgIyDioa8gw4cgW0xBVElOIENBUElUQUwgTEVUVEVSIEMgV0lUSCBDRURJTExBXQorY2hhcglceEM5CSgxMjM0NTY3ICkgICMg4qG/IMOJIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBFIFdJVEggQUNVVEVdCitjaGFyCVx4Q0IJKDEyIDQgNjcgKSAgIyDioasgw4sgW0xBVElOIENBUElUQUwgTEVUVEVSIEUgV0lUSCBESUFFUkVTSVNdCitjaGFyCVx4Q0QJKCAgMzQgIDcgKSAgIyDioYwgw40gW0xBVElOIENBUElUQUwgTEVUVEVSIEkgV0lUSCBBQ1VURV0KK2NoYXIJXHhDRQkoMTIgNDU2NyApICAjIOKhuyDDjiBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgSSBXSVRIIENJUkNVTUZMRVhdCitnbHlwaAlceEQzCSgxIDMgNSAgOCkgICMg4qKVIMOTIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBPIFdJVEggQUNVVEVdCitjaGFyCVx4RDQJKDEgIDQ1Njc4KSAgIyDio7kgw5QgW0xBVElOIENBUElUQUwgTEVUVEVSIE8gV0lUSCBDSVJDVU1GTEVYXQorY2hhcglceEQ2CSggMiA0IDY3ICkgICMg4qGqIMOWIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBPIFdJVEggRElBRVJFU0lTXQorY2hhcglceEQ3CSgxIDM0IDYgOCkgICMg4qKtIMOXIFtNVUxUSVBMSUNBVElPTiBTSUdOXQorY2hhcglceERBCSgxIDMgIDYgOCkgICMg4qKlIMOaIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBVIFdJVEggQUNVVEVdCitjaGFyCVx4REMJKDEyICA1NjcgKSAgIyDiobMgw5wgW0xBVElOIENBUElUQUwgTEVUVEVSIFUgV0lUSCBESUFFUkVTSVNdCitnbHlwaAlceERECSgxIDM0NTYgOCkgICMg4qK9IMOdIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBZIFdJVEggQUNVVEVdCitjaGFyCVx4REYJKCAyMzQgNjc4KSAgIyDio64gw58gW0xBVElOIFNNQUxMIExFVFRFUiBTSEFSUCBTXQorY2hhcglceEUxCSggMiAgICA3ICkgICMg4qGCIMOhIFtMQVRJTiBTTUFMTCBMRVRURVIgQSBXSVRIIEFDVVRFXQorY2hhcglceEUyCSggMjMgIDY3OCkgICMg4qOmIMOiIFtMQVRJTiBTTUFMTCBMRVRURVIgQSBXSVRIIENJUkNVTUZMRVhdCitjaGFyCVx4RTQJKCAgMzQ1ICA4KSAgIyDiopwgw6QgW0xBVElOIFNNQUxMIExFVFRFUiBBIFdJVEggRElBRVJFU0lTXQorZ2x5cGgJXHhFNwkoMTIzNCA2IDgpICAjIOKiryDDpyBbTEFUSU4gU01BTEwgTEVUVEVSIEMgV0lUSCBDRURJTExBXQorY2hhcglceEU5CSgxMjM0NTYgOCkgICMg4qK/IMOpIFtMQVRJTiBTTUFMTCBMRVRURVIgRSBXSVRIIEFDVVRFXQorY2hhcglceEVCCSgxMiA0IDYgOCkgICMg4qKrIMOrIFtMQVRJTiBTTUFMTCBMRVRURVIgRSBXSVRIIERJQUVSRVNJU10KK2NoYXIJXHhFRAkoICAzNCAgIDgpICAjIOKijCDDrSBbTEFUSU4gU01BTEwgTEVUVEVSIEkgV0lUSCBBQ1VURV0KK2NoYXIJXHhFRQkoMTIgNDU2IDgpICAjIOKiuyDDriBbTEFUSU4gU01BTEwgTEVUVEVSIEkgV0lUSCBDSVJDVU1GTEVYXQorY2hhcglceEYzCSggMiAgIDY3ICkgICMg4qGiIMOzIFtMQVRJTiBTTUFMTCBMRVRURVIgTyBXSVRIIEFDVVRFXQorZ2x5cGgJXHhGNAkoIDIgIDU2IDgpICAjIOKisiDDtCBbTEFUSU4gU01BTEwgTEVUVEVSIE8gV0lUSCBDSVJDVU1GTEVYXQorZ2x5cGgJXHhGNgkoIDIgNCA2IDgpICAjIOKiqiDDtiBbTEFUSU4gU01BTEwgTEVUVEVSIE8gV0lUSCBESUFFUkVTSVNdCitjaGFyCVx4RjcJKCAyICA1IDc4KSAgIyDio5Igw7cgW0RJVklTSU9OIFNJR05dCitjaGFyCVx4RkEJKCAyICAgIDc4KSAgIyDio4Igw7ogW0xBVElOIFNNQUxMIExFVFRFUiBVIFdJVEggQUNVVEVdCitjaGFyCVx4RkMJKDEyICA1NiA4KSAgIyDiorMgw7wgW0xBVElOIFNNQUxMIExFVFRFUiBVIFdJVEggRElBRVJFU0lTXQorY2hhcglceEZECSggMiAgNTY3OCkgICMg4qOyIMO9IFtMQVRJTiBTTUFMTCBMRVRURVIgWSBXSVRIIEFDVVRFXQorZ2x5cGgJXHUwMTAyCSgxICAgICAgOCkgICMg4qKBIMSCIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBBIFdJVEggQlJFVkVdCitjaGFyCVx1MDEwMwkoIDIgICAgIDgpICAjIOKigiDEgyBbTEFUSU4gU01BTEwgTEVUVEVSIEEgV0lUSCBCUkVWRV0KK2NoYXIJXHUwMTA0CSggIDM0NSA3OCkgICMg4qOcIMSEIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBBIFdJVEggT0dPTkVLXQorZ2x5cGgJXHUwMTA1CSggICAgNTY3ICkgICMg4qGwIMSFIFtMQVRJTiBTTUFMTCBMRVRURVIgQSBXSVRIIE9HT05FS10KK2NoYXIJXHUwMTA2CSgxICA0IDY3ICkgICMg4qGpIMSGIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBDIFdJVEggQUNVVEVdCitjaGFyCVx1MDEwNwkoMSAgNCA2IDgpICAjIOKiqSDEhyBbTEFUSU4gU01BTEwgTEVUVEVSIEMgV0lUSCBBQ1VURV0KK2NoYXIJXHUwMTBDCSgxICAgIDY3ICkgICMg4qGhIMSMIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBDIFdJVEggQ0FST05dCitjaGFyCVx1MDEwRAkoMSAgICA2ICApICAjIOKgoSDEjSBbTEFUSU4gU01BTEwgTEVUVEVSIEMgV0lUSCBDQVJPTl0KK2dseXBoCVx1MDEwRQkoMSAgNDUgIDgpICAjIOKimSDEjiBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgRCBXSVRIIENBUk9OXQorY2hhcglcdTAxMEYJKCAgMyAgNiA4KSAgIyDioqQgxI8gW0xBVElOIFNNQUxMIExFVFRFUiBEIFdJVEggQ0FST05dCitjaGFyCVx1MDExMAkoMSAgNDU2NyApICAjIOKhuSDEkCBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgRCBXSVRIIFNUUk9LRV0KK2dseXBoCVx1MDExMQkoMSAgNDU2IDgpICAjIOKiuSDEkSBbTEFUSU4gU01BTEwgTEVUVEVSIEQgV0lUSCBTVFJPS0VdCitjaGFyCVx1MDExOAkoMSAgIDU2NzgpICAjIOKjsSDEmCBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgRSBXSVRIIE9HT05FS10KK2NoYXIJXHUwMTE5CSggMiAgIDYgOCkgICMg4qKiIMSZIFtMQVRJTiBTTUFMTCBMRVRURVIgRSBXSVRIIE9HT05FS10KK2NoYXIJXHUwMTFBCSgxMiAgIDY3ICkgICMg4qGjIMSaIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBFIFdJVEggQ0FST05dCitnbHlwaAlcdTAxMUIJKCAyMyAgICA4KSAgIyDiooYgxJsgW0xBVElOIFNNQUxMIExFVFRFUiBFIFdJVEggQ0FST05dCitjaGFyCVx1MDEzOQkoMTIzICAgIDgpICAjIOKihyDEuSBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgTCBXSVRIIEFDVVRFXQorY2hhcglcdTAxM0EJKCAyMyAgIDcgKSAgIyDioYYgxLogW0xBVElOIFNNQUxMIExFVFRFUiBMIFdJVEggQUNVVEVdCitnbHlwaAlcdTAxM0QJKCAgIDQ1NiA4KSAgIyDiorggxL0gW0xBVElOIENBUElUQUwgTEVUVEVSIEwgV0lUSCBDQVJPTl0KK2dseXBoCVx1MDEzRQkoMTIgICAgIDgpICAjIOKigyDEviBbTEFUSU4gU01BTEwgTEVUVEVSIEwgV0lUSCBDQVJPTl0KK2NoYXIJXHUwMTQxCSgxMjMgIDYgOCkgICMg4qKnIMWBIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBMIFdJVEggU1RST0tFXQorY2hhcglcdTAxNDIJKCAyMyAgIDc4KSAgIyDio4YgxYIgW0xBVElOIFNNQUxMIExFVFRFUiBMIFdJVEggU1RST0tFXQorY2hhcglcdTAxNDMJKDEgMzQ1ICA4KSAgIyDiop0gxYMgW0xBVElOIENBUElUQUwgTEVUVEVSIE4gV0lUSCBBQ1VURV0KK2NoYXIJXHUwMTQ0CSggMiAgNTY3ICkgICMg4qGyIMWEIFtMQVRJTiBTTUFMTCBMRVRURVIgTiBXSVRIIEFDVVRFXQorY2hhcglcdTAxNDcJKDEyIDQgNjc4KSAgIyDio6sgxYcgW0xBVElOIENBUElUQUwgTEVUVEVSIE4gV0lUSCBDQVJPTl0KK2dseXBoCVx1MDE0OAkoIDIzIDUgIDgpICAjIOKiliDFiCBbTEFUSU4gU01BTEwgTEVUVEVSIE4gV0lUSCBDQVJPTl0KK2NoYXIJXHUwMTUwCSggMiA0IDY3OCkgICMg4qOqIMWQIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBPIFdJVEggRE9VQkxFIEFDVVRFXQorY2hhcglcdTAxNTEJKCAgMyA1ICA4KSAgIyDiopQgxZEgW0xBVElOIFNNQUxMIExFVFRFUiBPIFdJVEggRE9VQkxFIEFDVVRFXQorY2hhcglcdTAxNTQJKDEyMyA1ICA4KSAgIyDiopcgxZQgW0xBVElOIENBUElUQUwgTEVUVEVSIFIgV0lUSCBBQ1VURV0KK2NoYXIJXHUwMTU1CSggMjMgIDY3ICkgICMg4qGmIMWVIFtMQVRJTiBTTUFMTCBMRVRURVIgUiBXSVRIIEFDVVRFXQorY2hhcglcdTAxNTgJKCAyIDQ1NiA4KSAgIyDiorogxZggW0xBVElOIENBUElUQUwgTEVUVEVSIFIgV0lUSCBDQVJPTl0KK2NoYXIJXHUwMTU5CSggIDMgNTYgOCkgICMg4qK0IMWZIFtMQVRJTiBTTUFMTCBMRVRURVIgUiBXSVRIIENBUk9OXQorY2hhcglcdTAxNUEJKCAyMzQgICA4KSAgIyDioo4gxZogW0xBVElOIENBUElUQUwgTEVUVEVSIFMgV0lUSCBBQ1VURV0KK2NoYXIJXHUwMTVCCSggIDMgNSA3ICkgICMg4qGUIMWbIFtMQVRJTiBTTUFMTCBMRVRURVIgUyBXSVRIIEFDVVRFXQorY2hhcglcdTAxNUUJKCAyMzQ1NiA4KSAgIyDior4gxZ4gW0xBVElOIENBUElUQUwgTEVUVEVSIFMgV0lUSCBDRURJTExBXQorY2hhcglcdTAxNUYJKCAgMyA1Njc4KSAgIyDio7QgxZ8gW0xBVElOIFNNQUxMIExFVFRFUiBTIFdJVEggQ0VESUxMQV0KK2NoYXIJXHUwMTYwCSgxICAgNTY3ICkgICMg4qGxIMWgIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBTIFdJVEggQ0FST05dCitjaGFyCVx1MDE2MQkoMSAgIDU2ICApICAjIOKgsSDFoSBbTEFUSU4gU01BTEwgTEVUVEVSIFMgV0lUSCBDQVJPTl0KK2NoYXIJXHUwMTYyCSggMjM0NSAgOCkgICMg4qKeIMWiIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBUIFdJVEggQ0VESUxMQV0KK2NoYXIJXHUwMTYzCSggIDMgNTY3ICkgICMg4qG0IMWjIFtMQVRJTiBTTUFMTCBMRVRURVIgVCBXSVRIIENFRElMTEFdCitjaGFyCVx1MDE2NAkoMTIzNDUgIDgpICAjIOKinyDFpCBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgVCBXSVRIIENBUk9OXQorY2hhcglcdTAxNjUJKCAyMyA1NjcgKSAgIyDiobYgxaUgW0xBVElOIFNNQUxMIExFVFRFUiBUIFdJVEggQ0FST05dCitjaGFyCVx1MDE2RQkoICAzNCA2NyApICAjIOKhrCDFriBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgVSBXSVRIIFJJTkcgQUJPVkVdCitjaGFyCVx1MDE2RgkoICAzNCA2IDgpICAjIOKirCDFryBbTEFUSU4gU01BTEwgTEVUVEVSIFUgV0lUSCBSSU5HIEFCT1ZFXQorY2hhcglcdTAxNzAJKCAgMzQgNjc4KSAgIyDio6wgxbAgW0xBVElOIENBUElUQUwgTEVUVEVSIFUgV0lUSCBET1VCTEUgQUNVVEVdCitjaGFyCVx1MDE3MQkoMSAgNCA2NzgpICAjIOKjqSDFsSBbTEFUSU4gU01BTEwgTEVUVEVSIFUgV0lUSCBET1VCTEUgQUNVVEVdCitjaGFyCVx1MDE3OQkoMSAzIDU2IDgpICAjIOKitSDFuSBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgWiBXSVRIIEFDVVRFXQorY2hhcglcdTAxN0EJKCAyICAgNjc4KSAgIyDio6IgxbogW0xBVElOIFNNQUxMIExFVFRFUiBaIFdJVEggQUNVVEVdCitjaGFyCVx1MDE3QgkoMTIgICA2NzgpICAjIOKjoyDFuyBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgWiBXSVRIIERPVCBBQk9WRV0KK2NoYXIJXHUwMTdDCSgxICAgIDY3OCkgICMg4qOhIMW8IFtMQVRJTiBTTUFMTCBMRVRURVIgWiBXSVRIIERPVCBBQk9WRV0KK2NoYXIJXHUwMTdECSggMjM0IDY3ICkgICMg4qGuIMW9IFtMQVRJTiBDQVBJVEFMIExFVFRFUiBaIFdJVEggQ0FST05dCitjaGFyCVx1MDE3RQkoIDIzNCA2ICApICAjIOKgriDFviBbTEFUSU4gU01BTEwgTEVUVEVSIFogV0lUSCBDQVJPTl0KK2NoYXIJXHUwMkM3CSggICA0NSAgOCkgICMg4qKYIMuHIFtDQVJPTl0KK2NoYXIJXHUwMkQ4CSggICA0IDY3ICkgICMg4qGoIMuYIFtCUkVWRV0KK2NoYXIJXHUwMkQ5CSggICAgIDY3ICkgICMg4qGgIMuZIFtET1QgQUJPVkVdCitjaGFyCVx1MDJEQgkoICAgIDUgIDgpICAjIOKikCDLmyBbT0dPTkVLXQorY2hhcglcdTAyREQJKCAgICAgNiA4KSAgIyDioqAgy50gW0RPVUJMRSBBQ1VURSBBQ0NFTlRdCisKK2luY2x1ZGUgY29tbW9uLnR0aQpkaWZmIC0tZ2l0IGEvVGFibGVzL1RleHQvc3YtMTk4OS50dGIgYi9UYWJsZXMvVGV4dC9zdi0xOTg5LnR0YgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMWRlZDFhCi0tLSAvZGV2L251bGwKKysrIGIvVGFibGVzL1RleHQvc3YtMTk4OS50dGIKQEAgLTAsMCArMSwyMDMgQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyMgICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisjCisjIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyMKKyMgQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjIEJSTFRUWSBUZXh0IFRhYmxlIC0gU3dlZGlzaCAoMTk4OSBzdGFuZGFyZCkKKworIyB0aGUgc3RhbmRhcmQgcmVwcmVzZW50YXRpb25zIGZvciB0aGUgbGV0dGVycyBvZiB0aGUgTGF0aW4gYWxwaGFiZXQKK2luY2x1ZGUgbHRyLWxhdGluLnR0aQorCisjIHRoZSBzdGFuZGFyZCByZXByZXNlbnRhdGlvbnMgZm9yIHRoZSBMYXRpbiBjb250cm9sIGNoYXJhY3RlcnMKK2luY2x1ZGUgY3RsLWxhdGluLnR0aQorCisjIHRoZSBudW1iZXJzIDAtOSBhcmUgcmVwcmVzZW50ZWQgYnkgdGhlIGxldHRlcnMgaixhLWkgd2l0aCBkb3QgOCBhZGRlZAoraW5jbHVkZSBudW0tZG90OC50dGkKKworIyBnZW5lcmF0ZWQgYnkgdHRidGVzdDogY2hhcnNldD1pc28tODg1OS0xCitjaGFyIFx4MDAJKCAgICAgICAgKSAgIyAwMCDioIAgICBbTlVMTF0KKyMgTGF0aW4gY29udHJvbCBjaGFyYWN0ZXJzICAjIDAxLTFBCitjaGFyIFx4MUIJKCAgMzQ1IDc4KSAgIyAxQiDio5wgICBbRVNDQVBFXQorY2hhciBceDFDCSggMiA0IDY3OCkgICMgMUMg4qOqICAgW0lORk9STUFUSU9OIFNFUEFSQVRPUiBGT1VSXQorY2hhciBceDFECSgxICAgIDY3OCkgICMgMUQg4qOhICAgW0lORk9STUFUSU9OIFNFUEFSQVRPUiBUSFJFRV0KK2NoYXIgXHgxRQkoICAgNDUgNzgpICAjIDFFIOKjmCAgIFtJTkZPUk1BVElPTiBTRVBBUkFUT1IgVFdPXQorY2hhciBceDFGCSggIDMgIDY3OCkgICMgMUYg4qOkICAgW0lORk9STUFUSU9OIFNFUEFSQVRPUiBPTkVdCitjaGFyIFx4MjAJKCAgICAgICAgKSAgIyAyMCDioIAgICBbU1BBQ0VdCitjaGFyIFx4MjEJKCAyMyA1ICAgKSAgIyAyMSDioJYgISBbRVhDTEFNQVRJT04gTUFSS10KK2NoYXIgXHgyMgkoICAgIDU2ICApICAjIDIyIOKgsCAiIFtRVU9UQVRJT04gTUFSS10KK2NoYXIgXHgyMwkoICAzNDU2ICApICAjIDIzIOKgvCAjIFtOVU1CRVIgU0lHTl0KK2NoYXIgXHgyNAkoIDIgIDU2ICApICAjIDI0IOKgsiAkIFtET0xMQVIgU0lHTl0KK2NoYXIgXHgyNQkoICAgNCA2NzgpICAjIDI1IOKjqCAlIFtQRVJDRU5UIFNJR05dCitjaGFyIFx4MjYJKCAgMzQgNiAgKSAgIyAyNiDioKwgJiBbQU1QRVJTQU5EXQorY2hhciBceDI3CSggICAgNSAgICkgICMgMjcg4qCQICcgW0FQT1NUUk9QSEVdCitjaGFyIFx4MjgJKCAyMyAgNjc4KSAgIyAyOCDio6YgKCBbTEVGVCBQQVJFTlRIRVNJU10KK2NoYXIgXHgyOQkoICAzIDU2NzgpICAjIDI5IOKjtCApIFtSSUdIVCBQQVJFTlRIRVNJU10KK2NoYXIgXHgyQQkoICAzIDUgICApICAjIDJBIOKglCAqIFtBU1RFUklTS10KK2NoYXIgXHgyQgkoIDIzIDUgNyApICAjIDJCIOKhliArIFtQTFVTIFNJR05dCitjaGFyIFx4MkMJKCAyICAgICAgKSAgIyAyQyDioIIgLCBbQ09NTUFdCitjaGFyIFx4MkQJKCAgMyAgNiAgKSAgIyAyRCDioKQgLSBbSFlQSEVOLU1JTlVTXQorY2hhciBceDJFCSggIDMgICAgICkgICMgMkUg4qCEIC4gW0ZVTEwgU1RPUF0KK2NoYXIgXHgyRgkoICAzNCAgICApICAjIDJGIOKgjCAvIFtTT0xJRFVTXQorIyBIaW5kdS1BcmFiaWMgbnVtZXJhbHMgICAgICMgMzAtMzkKK2NoYXIgXHgzQQkoIDIgIDUgICApICAjIDNBIOKgkiA6IFtDT0xPTl0KK2NoYXIgXHgzQgkoIDIzICAgICApICAjIDNCIOKghiA7IFtTRU1JQ09MT05dCitjaGFyIFx4M0MJKCAyICAgNiA4KSAgIyAzQyDioqIgPCBbTEVTUy1USEFOIFNJR05dCitjaGFyIFx4M0QJKCAyMyA1NiAgKSAgIyAzRCDioLYgPSBbRVFVQUxTIFNJR05dCitjaGFyIFx4M0UJKCAgMyA1IDcgKSAgIyAzRSDioZQgPiBbR1JFQVRFUi1USEFOIFNJR05dCitjaGFyIFx4M0YJKCAyICAgNiAgKSAgIyAzRiDioKIgPyBbUVVFU1RJT04gTUFSS10KK2NoYXIgXHg0MAkoICAgNCA2NyApICAjIDQwIOKhqCBAIFtDT01NRVJDSUFMIEFUXQorIyB1cHBlcmNhc2UgTGF0aW4gYWxwaGFiZXQgICMgNDEtNUEKK2NoYXIgXHg1QgkoIDIzIDUgNzgpICAjIDVCIOKjliBbIFtMRUZUIFNRVUFSRSBCUkFDS0VUXQorY2hhciBceDVDCSggICA0NTY3ICkgICMgNUMg4qG4IFwgW1JFVkVSU0UgU09MSURVU10KK2NoYXIgXHg1RAkoIDIgIDU2NzgpICAjIDVEIOKjsiBdIFtSSUdIVCBTUVVBUkUgQlJBQ0tFVF0KK2NoYXIgXHg1RQkoICAgNDUgNyApICAjIDVFIOKhmCBeIFtDSVJDVU1GTEVYIEFDQ0VOVF0KK2NoYXIgXHg1RgkoICAgICAgNzgpICAjIDVGIOKjgCBfIFtMT1cgTElORV0KK2NoYXIgXHg2MAkoICAgNCA2ICApICAjIDYwIOKgqCBgIFtHUkFWRSBBQ0NFTlRdCisjIGxvd2VyY2FzZSBMYXRpbiBhbHBoYWJldCAgIyA2MS03QQorY2hhciBceDdCCSggIDMgICA3OCkgICMgN0Ig4qOEIHsgW0xFRlQgQ1VSTFkgQlJBQ0tFVF0KK2NoYXIgXHg3QwkoICAgICAgIDgpICAjIDdDIOKigCB8IFtWRVJUSUNBTCBMSU5FXQorY2hhciBceDdECSggICAgIDY3OCkgICMgN0Qg4qOgIH0gW1JJR0hUIENVUkxZIEJSQUNLRVRdCitjaGFyIFx4N0UJKCAgIDQ1ICAgKSAgIyA3RSDioJggfiBbVElMREVdCitjaGFyIFx4N0YJKCAgIDQ1NiA4KSAgIyA3RiDiorggICBbREVMRVRFXQorY2hhciBceDgwCSggICAgICAgOCkgICMgODAg4qKAICAgWzxjb250cm9sLTAwODA+XQorY2hhciBceDgxCSggICAgICAgOCkgICMgODEg4qKAICAgWzxjb250cm9sLTAwODE+XQorY2hhciBceDgyCSggICAgICAgOCkgICMgODIg4qKAICAgW0JSRUFLIFBFUk1JVFRFRCBIRVJFXQorY2hhciBceDgzCSggICAgICAgOCkgICMgODMg4qKAICAgW05PIEJSRUFLIEhFUkVdCitjaGFyIFx4ODQJKCAgICAgICA4KSAgIyA4NCDiooAgICBbPGNvbnRyb2wtMDA4ND5dCitjaGFyIFx4ODUJKCAgICAgICA4KSAgIyA4NSDiooAgICBbTkVYVCBMSU5FIChORUwpXQorY2hhciBceDg2CSggICAgICAgOCkgICMgODYg4qKAICAgW1NUQVJUIE9GIFNFTEVDVEVEIEFSRUFdCitjaGFyIFx4ODcJKCAgICAgICA4KSAgIyA4NyDiooAgICBbRU5EIE9GIFNFTEVDVEVEIEFSRUFdCitjaGFyIFx4ODgJKCAgICAgICA4KSAgIyA4OCDiooAgICBbQ0hBUkFDVEVSIFRBQlVMQVRJT04gU0VUXQorY2hhciBceDg5CSggICAgICAgOCkgICMgODkg4qKAICAgW0NIQVJBQ1RFUiBUQUJVTEFUSU9OIFdJVEggSlVTVElGSUNBVElPTl0KK2NoYXIgXHg4QQkoICAgICAgIDgpICAjIDhBIOKigCAgIFtMSU5FIFRBQlVMQVRJT04gU0VUXQorY2hhciBceDhCCSggICAgICAgOCkgICMgOEIg4qKAICAgW1BBUlRJQUwgTElORSBGT1JXQVJEXQorY2hhciBceDhDCSggICAgICAgOCkgICMgOEMg4qKAICAgW1BBUlRJQUwgTElORSBCQUNLV0FSRF0KK2NoYXIgXHg4RAkoICAgICAgIDgpICAjIDhEIOKigCAgIFtSRVZFUlNFIExJTkUgRkVFRF0KK2NoYXIgXHg4RQkoICAgICAgIDgpICAjIDhFIOKigCAgIFtTSU5HTEUgU0hJRlQgVFdPXQorY2hhciBceDhGCSggICAgICAgOCkgICMgOEYg4qKAICAgW1NJTkdMRSBTSElGVCBUSFJFRV0KK2NoYXIgXHg5MAkoICAgICAgIDgpICAjIDkwIOKigCAgIFtERVZJQ0UgQ09OVFJPTCBTVFJJTkddCitjaGFyIFx4OTEJKCAgICAgICA4KSAgIyA5MSDiooAgICBbUFJJVkFURSBVU0UgT05FXQorY2hhciBceDkyCSggICAgICAgOCkgICMgOTIg4qKAICAgW1BSSVZBVEUgVVNFIFRXT10KK2NoYXIgXHg5MwkoICAgICAgIDgpICAjIDkzIOKigCAgIFtTRVQgVFJBTlNNSVQgU1RBVEVdCitjaGFyIFx4OTQJKCAgICAgICA4KSAgIyA5NCDiooAgICBbQ0FOQ0VMIENIQVJBQ1RFUl0KK2NoYXIgXHg5NQkoICAgICAgIDgpICAjIDk1IOKigCAgIFtNRVNTQUdFIFdBSVRJTkddCitjaGFyIFx4OTYJKCAgICAgICA4KSAgIyA5NiDiooAgICBbU1RBUlQgT0YgR1VBUkRFRCBBUkVBXQorY2hhciBceDk3CSggICAgICAgOCkgICMgOTcg4qKAICAgW0VORCBPRiBHVUFSREVEIEFSRUFdCitjaGFyIFx4OTgJKCAgICAgICA4KSAgIyA5OCDiooAgICBbU1RBUlQgT0YgU1RSSU5HXQorY2hhciBceDk5CSggICAgICAgOCkgICMgOTkg4qKAICAgWzxjb250cm9sLTAwOTk+XQorY2hhciBceDlBCSggICAgICAgOCkgICMgOUEg4qKAICAgW1NJTkdMRSBDSEFSQUNURVIgSU5UUk9EVUNFUl0KK2NoYXIgXHg5QgkoICAgICAgIDgpICAjIDlCIOKigCAgIFtDT05UUk9MIFNFUVVFTkNFIElOVFJPRFVDRVJdCitjaGFyIFx4OUMJKCAgICAgICA4KSAgIyA5QyDiooAgICBbU1RSSU5HIFRFUk1JTkFUT1JdCitjaGFyIFx4OUQJKCAgICAgICA4KSAgIyA5RCDiooAgICBbT1BFUkFUSU5HIFNZU1RFTSBDT01NQU5EXQorY2hhciBceDlFCSggICAgICAgOCkgICMgOUUg4qKAICAgW1BSSVZBQ1kgTUVTU0FHRV0KK2NoYXIgXHg5RgkoICAgICAgIDgpICAjIDlGIOKigCAgIFtBUFBMSUNBVElPTiBQUk9HUkFNIENPTU1BTkRdCitjaGFyIFx4QTEJKCAgICAgICA4KSAgIyBBMSDiooAgwqEgW0lOVkVSVEVEIEVYQ0xBTUFUSU9OIE1BUktdCitjaGFyIFx4QTIJKCAgICAgICA4KSAgIyBBMiDiooAgwqIgW0NFTlQgU0lHTl0KK2NoYXIgXHhBMwkoICAgICAgIDgpICAjIEEzIOKigCDCoyBbUE9VTkQgU0lHTl0KK2NoYXIgXHhBNAkoICAgICAgIDgpICAjIEE0IOKigCDCpCBbQ1VSUkVOQ1kgU0lHTl0KK2NoYXIgXHhBNQkoICAgICAgIDgpICAjIEE1IOKigCDCpSBbWUVOIFNJR05dCitjaGFyIFx4QTYJKCAgICAgICA4KSAgIyBBNiDiooAgwqYgW0JST0tFTiBCQVJdCitjaGFyIFx4QTcJKCAgICAgICA4KSAgIyBBNyDiooAgwqcgW1NFQ1RJT04gU0lHTl0KK2NoYXIgXHhBOAkoICAgICAgIDgpICAjIEE4IOKigCDCqCBbRElBRVJFU0lTXQorY2hhciBceEE5CSggICAgICAgOCkgICMgQTkg4qKAIMKpIFtDT1BZUklHSFQgU0lHTl0KK2NoYXIgXHhBQQkoICAgICAgIDgpICAjIEFBIOKigCDCqiBbRkVNSU5JTkUgT1JESU5BTCBJTkRJQ0FUT1JdCitjaGFyIFx4QUIJKCAgICAgICA4KSAgIyBBQiDiooAgwqsgW0xFRlQtUE9JTlRJTkcgRE9VQkxFIEFOR0xFIFFVT1RBVElPTiBNQVJLXQorY2hhciBceEFDCSggICAgICAgOCkgICMgQUMg4qKAIMKsIFtOT1QgU0lHTl0KK2NoYXIgXHhBRAkoICAgICAgIDgpICAjIEFEIOKigCDCrSBbU09GVCBIWVBIRU5dCitjaGFyIFx4QUUJKCAgICAgICA4KSAgIyBBRSDiooAgwq4gW1JFR0lTVEVSRUQgU0lHTl0KK2NoYXIgXHhBRgkoICAgICAgIDgpICAjIEFGIOKigCDCryBbTUFDUk9OXQorY2hhciBceEIwCSggICAgICAgOCkgICMgQjAg4qKAIMKwIFtERUdSRUUgU0lHTl0KK2NoYXIgXHhCMQkoICAgICAgIDgpICAjIEIxIOKigCDCsSBbUExVUy1NSU5VUyBTSUdOXQorY2hhciBceEIyCSggICAgICAgOCkgICMgQjIg4qKAIMKyIFtTVVBFUlNDUklQVCBUV09dCitjaGFyIFx4QjMJKCAgICAgICA4KSAgIyBCMyDiooAgwrMgW1NVUEVSU0NSSVBUIFRIUkVFXQorY2hhciBceEI0CSggICAgICAgOCkgICMgQjQg4qKAIMK0IFtBQ1VURSBBQ0NFTlRdCitjaGFyIFx4QjUJKCAgICAgICA4KSAgIyBCNSDiooAgwrUgW01JQ1JPIFNJR05dCitjaGFyIFx4QjYJKCAgICAgICA4KSAgIyBCNiDiooAgwrYgW1BJTENST1cgU0lHTl0KK2NoYXIgXHhCNwkoICAgICAgIDgpICAjIEI3IOKigCDCtyBbTUlERExFIERPVF0KK2NoYXIgXHhCOAkoICAgICAgIDgpICAjIEI4IOKigCDCuCBbQ0VESUxMQV0KK2NoYXIgXHhCOQkoICAgICAgIDgpICAjIEI5IOKigCDCuSBbU1VQRVJTQ1JJUFQgT05FXQorY2hhciBceEJBCSggICAgICAgOCkgICMgQkEg4qKAIMK6IFtNQVNDVUxJTkUgT1JESU5BTCBJTkRJQ0FUT1JdCitjaGFyIFx4QkIJKCAgICAgICA4KSAgIyBCQiDiooAgwrsgW1JJR0hULVBPSU5USU5HIERPVUJMRSBBTkdMRSBRVU9UQVRJT04gTUFSS10KK2NoYXIgXHhCQwkoICAgICAgIDgpICAjIEJDIOKigCDCvCBbVlVMR0FSIEZSQUNUSU9OIE9ORSBRVUFSVEVSXQorY2hhciBceEJECSggICAgICAgOCkgICMgQkQg4qKAIMK9IFtWVUxHQVIgRlJBQ1RJT04gT05FIEhBTEZdCitjaGFyIFx4QkUJKCAgICAgICA4KSAgIyBCRSDiooAgwr4gW1ZVTEdBUiBGUkFDVElPTiBUSFJFRSBRVUFSVEVSU10KK2NoYXIgXHhCRgkoIDIgICA2ICApICAjIEJGIOKgoiDCvyBbSU5WRVJURUQgUVVFU1RJT04gTUFSS10KK2NoYXIgXHhDMAkoICAgICAgIDgpICAjIEMwIOKigCDDgCBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgQSBXSVRIIEdSQVZFXQorY2hhciBceEMxCSggICAgICAgOCkgICMgQzEg4qKAIMOBIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBBIFdJVEggQUNVVEVdCitjaGFyIFx4QzIJKCAgICAgICA4KSAgIyBDMiDiooAgw4IgW0xBVElOIENBUElUQUwgTEVUVEVSIEEgV0lUSCBDSVJDVU1GTEVYXQorY2hhciBceEMzCSggICAgICAgOCkgICMgQzMg4qKAIMODIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBBIFdJVEggVElMREVdCitjaGFyIFx4QzQJKCAgMzQ1IDcgKSAgIyBDNCDioZwgw4QgW0xBVElOIENBUElUQUwgTEVUVEVSIEEgV0lUSCBESUFFUkVTSVNdCitjaGFyIFx4QzUJKDEgICAgNjcgKSAgIyBDNSDioaEgw4UgW0xBVElOIENBUElUQUwgTEVUVEVSIEEgV0lUSCBSSU5HIEFCT1ZFXQorY2hhciBceEM2CSggIDM0NSAgOCkgICMgQzYg4qKcIMOGIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBBRV0KK2NoYXIgXHhDNwkoIDIgICA2NyApICAjIEM3IOKhoiDDhyBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgQyBXSVRIIENFRElMTEFdCitjaGFyIFx4QzgJKCAgICAgICA4KSAgIyBDOCDiooAgw4ggW0xBVElOIENBUElUQUwgTEVUVEVSIEUgV0lUSCBHUkFWRV0KK2NoYXIgXHhDOQkoMTIzNDU2NyApICAjIEM5IOKhvyDDiSBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgRSBXSVRIIEFDVVRFXQorY2hhciBceENBCSggICAgICAgOCkgICMgQ0Eg4qKAIMOKIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBFIFdJVEggQ0lSQ1VNRkxFWF0KK2NoYXIgXHhDQgkoICAgICAgIDgpICAjIENCIOKigCDDiyBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgRSBXSVRIIERJQUVSRVNJU10KK2NoYXIgXHhDQwkoICAgICAgIDgpICAjIENDIOKigCDDjCBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgSSBXSVRIIEdSQVZFXQorY2hhciBceENECSggICAgICAgOCkgICMgQ0Qg4qKAIMONIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBJIFdJVEggQUNVVEVdCitjaGFyIFx4Q0UJKCAgICAgICA4KSAgIyBDRSDiooAgw44gW0xBVElOIENBUElUQUwgTEVUVEVSIEkgV0lUSCBDSVJDVU1GTEVYXQorY2hhciBceENGCSggICAgICAgOCkgICMgQ0Yg4qKAIMOPIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBJIFdJVEggRElBRVJFU0lTXQorY2hhciBceEQwCSggICAgICAgOCkgICMgRDAg4qKAIMOQIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBFVEhdCitjaGFyIFx4RDEJKDEyIDQ1Njc4KSAgIyBEMSDio7sgw5EgW0xBVElOIENBUElUQUwgTEVUVEVSIE4gV0lUSCBUSUxERV0KK2NoYXIgXHhEMgkoICAgICAgIDgpICAjIEQyIOKigCDDkiBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgTyBXSVRIIEdSQVZFXQorY2hhciBceEQzCSgxICA0NTY3ICkgICMgRDMg4qG5IMOTIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBPIFdJVEggQUNVVEVdCitjaGFyIFx4RDQJKCAgICAgICA4KSAgIyBENCDiooAgw5QgW0xBVElOIENBUElUQUwgTEVUVEVSIE8gV0lUSCBDSVJDVU1GTEVYXQorY2hhciBceEQ1CSggICAgICAgOCkgICMgRDUg4qKAIMOVIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBPIFdJVEggVElMREVdCitjaGFyIFx4RDYJKCAyIDQgNjcgKSAgIyBENiDioaogw5YgW0xBVElOIENBUElUQUwgTEVUVEVSIE8gV0lUSCBESUFFUkVTSVNdCitjaGFyIFx4RDcJKCAgICAgICA4KSAgIyBENyDiooAgw5cgW01VTFRJUExJQ0FUSU9OIFNJR05dCitjaGFyIFx4RDgJKCAyIDQgNiA4KSAgIyBEOCDioqogw5ggW0xBVElOIENBUElUQUwgTEVUVEVSIE8gV0lUSCBTVFJPS0VdCitjaGFyIFx4RDkJKCAgICAgICA4KSAgIyBEOSDiooAgw5kgW0xBVElOIENBUElUQUwgTEVUVEVSIFUgV0lUSCBHUkFWRV0KK2NoYXIgXHhEQQkoMTIgNDU2NyApICAjIERBIOKhuyDDmiBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgVSBXSVRIIEFDVVRFXQorY2hhciBceERCCSggICAgICAgOCkgICMgREIg4qKAIMObIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBVIFdJVEggQ0lSQ1VNRkxFWF0KK2NoYXIgXHhEQwkoMTIgIDU2NyApICAjIERDIOKhsyDDnCBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgVSBXSVRIIERJQUVSRVNJU10KK2NoYXIgXHhERAkoMTIzNCA2NyApICAjIEREIOKhryDDnSBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgWSBXSVRIIEFDVVRFXQorY2hhciBceERFCSgxMiA0IDYgICkgICMgREUg4qCrIMOeIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBUSE9STl0KK2NoYXIgXHhERgkoICAgICAgIDgpICAjIERGIOKigCDDnyBbTEFUSU4gU01BTEwgTEVUVEVSIFNIQVJQIFNdCitjaGFyIFx4RTAJKDEyMyA1NiAgKSAgIyBFMCDioLcgw6AgW0xBVElOIFNNQUxMIExFVFRFUiBBIFdJVEggR1JBVkVdCitjaGFyIFx4RTEJKDEyMyA1NiAgKSAgIyBFMSDioLcgw6EgW0xBVElOIFNNQUxMIExFVFRFUiBBIFdJVEggQUNVVEVdCitjaGFyIFx4RTIJKDEgICAgNiAgKSAgIyBFMiDioKEgw6IgW0xBVElOIFNNQUxMIExFVFRFUiBBIFdJVEggQ0lSQ1VNRkxFWF0KK2NoYXIgXHhFMwkoICAgICAgIDgpICAjIEUzIOKigCDDoyBbTEFUSU4gU01BTEwgTEVUVEVSIEEgV0lUSCBUSUxERV0KK2NoYXIgXHhFNAkoICAzNDUgICApICAjIEU0IOKgnCDDpCBbTEFUSU4gU01BTEwgTEVUVEVSIEEgV0lUSCBESUFFUkVTSVNdCitjaGFyIFx4RTUJKDEgICAgNiAgKSAgIyBFNSDioKEgw6UgW0xBVElOIFNNQUxMIExFVFRFUiBBIFdJVEggUklORyBBQk9WRV0KK2NoYXIgXHhFNgkoICAgIDU2NyApICAjIEU2IOKhsCDDpiBbTEFUSU4gU01BTEwgTEVUVEVSIEFFXQorY2hhciBceEU3CSgxMjM0IDYgICkgICMgRTcg4qCvIMOnIFtMQVRJTiBTTUFMTCBMRVRURVIgQyBXSVRIIENFRElMTEFdCitjaGFyIFx4RTgJKCAyMzQgNiAgKSAgIyBFOCDioK4gw6ggW0xBVElOIFNNQUxMIExFVFRFUiBFIFdJVEggR1JBVkVdCitjaGFyIFx4RTkJKDEyMzQ1NiAgKSAgIyBFOSDioL8gw6kgW0xBVElOIFNNQUxMIExFVFRFUiBFIFdJVEggQUNVVEVdCitjaGFyIFx4RUEJKDEyICAgNiAgKSAgIyBFQSDioKMgw6ogW0xBVElOIFNNQUxMIExFVFRFUiBFIFdJVEggQ0lSQ1VNRkxFWF0KK2NoYXIgXHhFQgkoMTIgNCA2ICApICAjIEVCIOKgqyDDqyBbTEFUSU4gU01BTEwgTEVUVEVSIEUgV0lUSCBESUFFUkVTSVNdCitjaGFyIFx4RUMJKCAgMzQgICAgKSAgIyBFQyDioIwgw6wgW0xBVElOIFNNQUxMIExFVFRFUiBJIFdJVEggR1JBVkVdCitjaGFyIFx4RUQJKCAgMzQgICAgKSAgIyBFRCDioIwgw60gW0xBVElOIFNNQUxMIExFVFRFUiBJIFdJVEggQUNVVEVdCitjaGFyIFx4RUUJKDEgIDQgNiAgKSAgIyBFRSDioKkgw64gW0xBVElOIFNNQUxMIExFVFRFUiBJIFdJVEggQ0lSQ1VNRkxFWF0KK2NoYXIgXHhFRgkoMTIgNDU2ICApICAjIEVGIOKguyDDryBbTEFUSU4gU01BTEwgTEVUVEVSIEkgV0lUSCBESUFFUkVTSVNdCitjaGFyIFx4RjAJKCAgICAgICA4KSAgIyBGMCDiooAgw7AgW0xBVElOIFNNQUxMIExFVFRFUiBFVEhdCitjaGFyIFx4RjEJKDEyIDQ1NiAgKSAgIyBGMSDioLsgw7EgW0xBVElOIFNNQUxMIExFVFRFUiBOIFdJVEggVElMREVdCitjaGFyIFx4RjIJKCAgMzQgNiAgKSAgIyBGMiDioKwgw7IgW0xBVElOIFNNQUxMIExFVFRFUiBPIFdJVEggR1JBVkVdCitjaGFyIFx4RjMJKCAgMzQgNiAgKSAgIyBGMyDioKwgw7MgW0xBVElOIFNNQUxMIExFVFRFUiBPIFdJVEggQUNVVEVdCitjaGFyIFx4RjQJKDEgIDQ1NiAgKSAgIyBGNCDioLkgw7QgW0xBVElOIFNNQUxMIExFVFRFUiBPIFdJVEggQ0lSQ1VNRkxFWF0KK2NoYXIgXHhGNQkoICAgICAgIDgpICAjIEY1IOKigCDDtSBbTEFUSU4gU01BTEwgTEVUVEVSIE8gV0lUSCBUSUxERV0KK2NoYXIgXHhGNgkoIDIgNCA2ICApICAjIEY2IOKgqiDDtiBbTEFUSU4gU01BTEwgTEVUVEVSIE8gV0lUSCBESUFFUkVTSVNdCitjaGFyIFx4RjcJKCAgICAgICA4KSAgIyBGNyDiooAgw7cgW0RJVklTSU9OIFNJR05dCitjaGFyIFx4RjgJKCAgMyA1ICA4KSAgIyBGOCDiopQgw7ggW0xBVElOIFNNQUxMIExFVFRFUiBPIFdJVEggU1RST0tFXQorY2hhciBceEY5CSggMjM0NTYgICkgICMgRjkg4qC+IMO5IFtMQVRJTiBTTUFMTCBMRVRURVIgVSBXSVRIIEdSQVZFXQorY2hhciBceEZBCSggMjM0NTYgICkgICMgRkEg4qC+IMO6IFtMQVRJTiBTTUFMTCBMRVRURVIgVSBXSVRIIEFDVVRFXQorY2hhciBceEZCCSgxICAgNTYgICkgICMgRkIg4qCxIMO7IFtMQVRJTiBTTUFMTCBMRVRURVIgVSBXSVRIIENJUkNVTUZMRVhdCitjaGFyIFx4RkMJKDEyICA1NiAgKSAgIyBGQyDioLMgw7wgW0xBVElOIFNNQUxMIExFVFRFUiBVIFdJVEggRElBRVJFU0lTXQorY2hhciBceEZECSgxMjM0IDYgICkgICMgRkQg4qCvIMO9IFtMQVRJTiBTTUFMTCBMRVRURVIgWSBXSVRIIEFDVVRFXQorY2hhciBceEZFCSgxMiA0IDY3ICkgICMgRkUg4qGrIMO+IFtMQVRJTiBTTUFMTCBMRVRURVIgVEhPUk5dCitjaGFyIFx4RkYJKCAgICAgICA4KSAgIyBGRiDiooAgw78gW0xBVElOIFNNQUxMIExFVFRFUiBZIFdJVEggRElBRVJFU0lTXQorCitpbmNsdWRlIGNvbW1vbi50dGkKZGlmZiAtLWdpdCBhL1RhYmxlcy9UZXh0L3N2LTE5OTYudHRiIGIvVGFibGVzL1RleHQvc3YtMTk5Ni50dGIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDA0Yjk2NwotLS0gL2Rldi9udWxsCisrKyBiL1RhYmxlcy9UZXh0L3N2LTE5OTYudHRiCkBAIC0wLDAgKzEsMTY1IEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisjICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorIworIyBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisjCisjIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisjCisjIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyMgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorIyBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyMKKyMgV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworIworIyBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIyBCUkxUVFkgVGV4dCBUYWJsZSAtIFN3ZWRpc2ggKDE5OTYgc3RhbmRhcmQpCisKKyMgVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBJU08tODg1OS0xIGNvbXBhdGlibGUgdmVyc2lvbiBvZiB0aGUgU3dlZGlzaCA4LWRvdAorIyBicmFpbGxlIHN0YW5kYXJkIGFzIGl0IHdhcyBkZWZpbmVkIGJ5IHRoZSBTd2VkaXNoIEJyYWlsbGUgQXV0aG9yaXR5CisjICh3d3cucHVua3Rza3JpZnRzbmFtbmRlbi5zZSkgb24gT2N0b2JlciA4LCAxOTk2LiBBcyBvZiBEZWNlbWJlciAyMDA1LCB0aGlzCisjIGlzIHRoZSBtb3N0IGN1cnJlbnQgYnJhaWxsZSBzdGFuZGFyZCBpbiBTd2VkZW4uCisKKyMgdGhlIHN0YW5kYXJkIHJlcHJlc2VudGF0aW9ucyBmb3IgdGhlIGxldHRlcnMgb2YgdGhlIExhdGluIGFscGhhYmV0CitpbmNsdWRlIGx0ci1sYXRpbi50dGkKKworIyB0aGUgbnVtYmVycyAwLTkgYXJlIHJlcHJlc2VudGVkIGJ5IHRoZSBsZXR0ZXJzIGosYS1pIHdpdGggZG90IDggYWRkZWQKK2luY2x1ZGUgbnVtLWRvdDgudHRpCisKKyMgZ2VuZXJhdGVkIGJ5IHR0YnRlc3Q6IGNoYXJzZXQ9aXNvLTg4NTktMQorY2hhciBceDIwCSggICAgICAgICkgICMgMjAg4qCAICAgW1NQQUNFXQorY2hhciBceDIxCSggMjMgNSAgICkgICMgMjEg4qCWICEgW0VYQ0xBTUFUSU9OIE1BUktdCitjaGFyIFx4MjIJKCAgICA1NiAgKSAgIyAyMiDioLAgIiBbUVVPVEFUSU9OIE1BUktdCitjaGFyIFx4MjMJKCAgMzQ1NiAgKSAgIyAyMyDioLwgIyBbTlVNQkVSIFNJR05dCitjaGFyIFx4MjQJKCAyMyA1ICA4KSAgIyAyNCDiopYgJCBbRE9MTEFSIFNJR05dCitjaGFyIFx4MjUJKCAgIDQgNjc4KSAgIyAyNSDio6ggJSBbUEVSQ0VOVCBTSUdOXQorY2hhciBceDI2CSggIDM0IDYgOCkgICMgMjYg4qKsICYgW0FNUEVSU0FORF0KK2NoYXIgXHgyNwkoICAgIDUgICApICAjIDI3IOKgkCAnIFtBUE9TVFJPUEhFXQorY2hhciBceDI4CSggMjMgIDYgICkgICMgMjgg4qCmICggW0xFRlQgUEFSRU5USEVTSVNdCitjaGFyIFx4MjkJKCAgMyA1NiAgKSAgIyAyOSDioLQgKSBbUklHSFQgUEFSRU5USEVTSVNdCitjaGFyIFx4MkEJKCAgMyA1ICAgKSAgIyAyQSDioJQgKiBbQVNURVJJU0tdCitjaGFyIFx4MkIJKCAyICA1NiAgKSAgIyAyQiDioLIgKyBbUExVUyBTSUdOXQorY2hhciBceDJDCSggMiAgICAgICkgICMgMkMg4qCCICwgW0NPTU1BXQorY2hhciBceDJECSggIDMgIDYgICkgICMgMkQg4qCkIC0gW0hZUEhFTi1NSU5VU10KK2NoYXIgXHgyRQkoICAzICAgICApICAjIDJFIOKghCAuIFtGVUxMIFNUT1BdCitjaGFyIFx4MkYJKCAgMzQgICAgKSAgIyAyRiDioIwgLyBbU09MSURVU10KKyMgSGluZHUtQXJhYmljIG51bWVyYWxzICAgICAjIDMwLTM5CitjaGFyIFx4M0EJKCAyICA1ICAgKSAgIyAzQSDioJIgOiBbQ09MT05dCitjaGFyIFx4M0IJKCAyMyAgICAgKSAgIyAzQiDioIYgOyBbU0VNSUNPTE9OXQorY2hhciBceDNDCSggIDMgNSAgOCkgICMgM0Mg4qKUIDwgW0xFU1MtVEhBTiBTSUdOXQorY2hhciBceDNECSggMjMgNTYgICkgICMgM0Qg4qC2ID0gW0VRVUFMUyBTSUdOXQorY2hhciBceDNFCSggMiAgIDY3ICkgICMgM0Ug4qGiID4gW0dSRUFURVItVEhBTiBTSUdOXQorY2hhciBceDNGCSggMiAgIDYgICkgICMgM0Yg4qCiID8gW1FVRVNUSU9OIE1BUktdCitjaGFyIFx4NDAJKCAgIDQgICA4KSAgIyA0MCDiooggQCBbQ09NTUVSQ0lBTCBBVF0KKyMgdXBwZXJjYXNlIExhdGluIGFscGhhYmV0ICAjIDQxLTVBCitjaGFyIFx4NUIJKDEyMyA1NiA4KSAgIyA1QiDiorcgWyBbTEVGVCBTUVVBUkUgQlJBQ0tFVF0KK2NoYXIgXHg1QwkoMSAgICA2IDgpICAjIDVDIOKioSBcIFtSRVZFUlNFIFNPTElEVVNdCitjaGFyIFx4NUQJKCAyMzQ1NiA4KSAgIyA1RCDior4gXSBbUklHSFQgU1FVQVJFIEJSQUNLRVRdCitjaGFyIFx4NUUJKCAgICA1IDc4KSAgIyA1RSDio5AgXiBbQ0lSQ1VNRkxFWCBBQ0NFTlRdCitjaGFyIFx4NUYJKCAgICAgNiAgKSAgIyA1RiDioKAgXyBbTE9XIExJTkVdCitjaGFyIFx4NjAJKCAgIDQgNiAgKSAgIyA2MCDioKggYCBbR1JBVkUgQUNDRU5UXQorIyBsb3dlcmNhc2UgTGF0aW4gYWxwaGFiZXQgICMgNjEtN0EKK2NoYXIgXHg3QgkoIDIzICA2NzgpICAjIDdCIOKjpiB7IFtMRUZUIENVUkxZIEJSQUNLRVRdCitjaGFyIFx4N0MJKCAgIDQ1NiA4KSAgIyA3QyDiorggfCBbVkVSVElDQUwgTElORV0KK2NoYXIgXHg3RAkoICAzIDU2NzgpICAjIDdEIOKjtCB9IFtSSUdIVCBDVVJMWSBCUkFDS0VUXQorY2hhciBceDdFCSggMiAgIDYgOCkgICMgN0Ug4qKiIH4gW1RJTERFXQorY2hhciBceEExCSggIDMgIDY3ICkgICMgQTEg4qGkIMKhIFtJTlZFUlRFRCBFWENMQU1BVElPTiBNQVJLXQorY2hhciBceEEyCSggMjM0IDYgOCkgICMgQTIg4qKuIMKiIFtDRU5UIFNJR05dCitjaGFyIFx4QTMJKDEyMyAgICA4KSAgIyBBMyDioocgwqMgW1BPVU5EIFNJR05dCitjaGFyIFx4QTQJKCAyIDQgIDc4KSAgIyBBNCDio4ogwqQgW0NVUlJFTkNZIFNJR05dCitjaGFyIFx4QTUJKCAyIDQgNjc4KSAgIyBBNSDio6ogwqUgW1lFTiBTSUdOXQorY2hhciBceEE2CSgxMiAgIDY3OCkgICMgQTYg4qOjIMKmIFtCUk9LRU4gQkFSXQorY2hhciBceEE3CSggIDM0IDYgICkgICMgQTcg4qCsIMKnIFtTRUNUSU9OIFNJR05dCitjaGFyIFx4QTgJKCAgMyAgNjc4KSAgIyBBOCDio6QgwqggW0RJQUVSRVNJU10KK2NoYXIgXHhBOQkoMSAgNDU2IDgpICAjIEE5IOKiuSDCqSBbQ09QWVJJR0hUIFNJR05dCitjaGFyIFx4QUEJKCAyMzQ1Njc4KSAgIyBBQSDio74gwqogW0ZFTUlOSU5FIE9SRElOQUwgSU5ESUNBVE9SXQorY2hhciBceEFCCSggMjMgICA3OCkgICMgQUIg4qOGIMKrIFtMRUZULVBPSU5USU5HIERPVUJMRSBBTkdMRSBRVU9UQVRJT04gTUFSS10KK2NoYXIgXHhBQwkoMSAzNDUgIDgpICAjIEFDIOKinSDCrCBbTk9UIFNJR05dCitjaGFyIFx4QUQJKCAyMyA1NiA4KSAgIyBBRCDiorYgwq0gW1NPRlQgSFlQSEVOXQorY2hhciBceEFFCSgxMiA0IDYgOCkgICMgQUUg4qKrIMKuIFtSRUdJU1RFUkVEIFNJR05dCitjaGFyIFx4QUYJKDEgICA1IDc4KSAgIyBBRiDio5Egwq8gW01BQ1JPTl0KK2NoYXIgXHhCMAkoMSAgIDU2NzgpICAjIEIwIOKjsSDCsCBbREVHUkVFIFNJR05dCitjaGFyIFx4QjEJKDEyMzQgNiA4KSAgIyBCMSDioq8gwrEgW1BMVVMtTUlOVVMgU0lHTl0KK2NoYXIgXHhCMgkoICAzICAgNyApICAjIEIyIOKhhCDCsiBbU1VQRVJTQ1JJUFQgVFdPXQorY2hhciBceEIzCSggMiAgNTY3ICkgICMgQjMg4qGyIMKzIFtTVVBFUlNDUklQVCBUSFJFRV0KK2NoYXIgXHhCNAkoIDIgIDUgIDgpICAjIEI0IOKikiDCtCBbQUNVVEUgQUNDRU5UXQorY2hhciBceEI1CSgxIDM0ICA3OCkgICMgQjUg4qONIMK1IFtNSUNSTyBTSUdOXQorY2hhciBceEI2CSgxMiAgIDY3ICkgICMgQjYg4qGjIMK2IFtQSUxDUk9XIFNJR05dCitjaGFyIFx4QjcJKCAgICAgICA4KSAgIyBCNyDiooAgwrcgW01JRERMRSBET1RdCitjaGFyIFx4QjgJKDEyICA1NiA4KSAgIyBCOCDiorMgwrggW0NFRElMTEFdCitjaGFyIFx4QjkJKDEgIDQgNiA4KSAgIyBCOSDioqkgwrkgW1NVUEVSU0NSSVBUIE9ORV0KK2NoYXIgXHhCQQkoMSAzIDUgIDgpICAjIEJBIOKilSDCuiBbTUFTQ1VMSU5FIE9SRElOQUwgSU5ESUNBVE9SXQorY2hhciBceEJCCSggICAgNTY3OCkgICMgQkIg4qOwIMK7IFtSSUdIVC1QT0lOVElORyBET1VCTEUgQU5HTEUgUVVPVEFUSU9OIE1BUktdCitjaGFyIFx4QkMJKDEyMyA1ICA4KSAgIyBCQyDiopcgwrwgW1ZVTEdBUiBGUkFDVElPTiBPTkUgUVVBUlRFUl0KK2NoYXIgXHhCRAkoMSAzICA2IDgpICAjIEJEIOKipSDCvSBbVlVMR0FSIEZSQUNUSU9OIE9ORSBIQUxGXQorY2hhciBceEJFCSggIDMgNSA3OCkgICMgQkUg4qOUIMK+IFtWVUxHQVIgRlJBQ1RJT04gVEhSRUUgUVVBUlRFUlNdCitjaGFyIFx4QkYJKCAgMyAgICA4KSAgIyBCRiDiooQgwr8gW0lOVkVSVEVEIFFVRVNUSU9OIE1BUktdCitjaGFyIFx4QzAJKDEgIDQgNjcgKSAgIyBDMCDioakgw4AgW0xBVElOIENBUElUQUwgTEVUVEVSIEEgV0lUSCBHUkFWRV0KK2NoYXIgXHhDMQkoMSAzIDU2NzgpICAjIEMxIOKjtSDDgSBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgQSBXSVRIIEFDVVRFXQorY2hhciBceEMyCSggMiA0NSA3OCkgICMgQzIg4qOaIMOCIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBBIFdJVEggQ0lSQ1VNRkxFWF0KK2NoYXIgXHhDMwkoMSAzIDUgNzgpICAjIEMzIOKjlSDDgyBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgQSBXSVRIIFRJTERFXQorY2hhciBceEM0CSggIDM0NSA3ICkgICMgQzQg4qGcIMOEIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBBIFdJVEggRElBRVJFU0lTXQorY2hhciBceEM1CSgxICAgIDY3ICkgICMgQzUg4qGhIMOFIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBBIFdJVEggUklORyBBQk9WRV0KK2NoYXIgXHhDNgkoICAzNDUgNzgpICAjIEM2IOKjnCDDhiBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgQUVdCitjaGFyIFx4QzcJKDEyMzQgNjcgKSAgIyBDNyDioa8gw4cgW0xBVElOIENBUElUQUwgTEVUVEVSIEMgV0lUSCBDRURJTExBXQorY2hhciBceEM4CSgxMjMgICA3OCkgICMgQzgg4qOHIMOIIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBFIFdJVEggR1JBVkVdCitjaGFyIFx4QzkJKDEyMzQ1NjcgKSAgIyBDOSDiob8gw4kgW0xBVElOIENBUElUQUwgTEVUVEVSIEUgV0lUSCBBQ1VURV0KK2NoYXIgXHhDQQkoICAgICA2IDgpICAjIENBIOKioCDDiiBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgRSBXSVRIIENJUkNVTUZMRVhdCitjaGFyIFx4Q0IJKCAyICAgIDcgKSAgIyBDQiDioYIgw4sgW0xBVElOIENBUElUQUwgTEVUVEVSIEUgV0lUSCBESUFFUkVTSVNdCitjaGFyIFx4Q0MJKCAgIDQ1IDcgKSAgIyBDQyDioZggw4wgW0xBVElOIENBUElUQUwgTEVUVEVSIEkgV0lUSCBHUkFWRV0KK2NoYXIgXHhDRAkoMSAzNCAgIDgpICAjIENEIOKijSDDjSBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgSSBXSVRIIEFDVVRFXQorY2hhciBceENFCSggICA0NSAgOCkgICMgQ0Ug4qKYIMOOIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBJIFdJVEggQ0lSQ1VNRkxFWF0KK2NoYXIgXHhDRgkoICAgICA2NyApICAjIENGIOKhoCDDjyBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgSSBXSVRIIERJQUVSRVNJU10KK2NoYXIgXHhEMAkoIDIzNCA2NyApICAjIEQwIOKhriDDkCBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgRVRIXQorY2hhciBceEQxCSgxMiA0NTY3ICkgICMgRDEg4qG7IMORIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBOIFdJVEggVElMREVdCitjaGFyIFx4RDIJKDEyMzQgIDc4KSAgIyBEMiDio48gw5IgW0xBVElOIENBUElUQUwgTEVUVEVSIE8gV0lUSCBHUkFWRV0KK2NoYXIgXHhEMwkoMSAgICAgNzgpICAjIEQzIOKjgSDDkyBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgTyBXSVRIIEFDVVRFXQorY2hhciBceEQ0CSgxMiA0NSA3OCkgICMgRDQg4qObIMOUIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBPIFdJVEggQ0lSQ1VNRkxFWF0KK2NoYXIgXHhENQkoIDIzNCAgNzgpICAjIEQ1IOKjjiDDlSBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgTyBXSVRIIFRJTERFXQorY2hhciBceEQ2CSggMiA0IDY3ICkgICMgRDYg4qGqIMOWIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBPIFdJVEggRElBRVJFU0lTXQorY2hhciBceEQ3CSgxIDM0IDYgOCkgICMgRDcg4qKtIMOXIFtNVUxUSVBMSUNBVElPTiBTSUdOXQorY2hhciBceEQ4CSgxICAgNTY3ICkgICMgRDgg4qGxIMOYIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBPIFdJVEggU1RST0tFXQorY2hhciBceEQ5CSgxICA0NSA3OCkgICMgRDkg4qOZIMOZIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBVIFdJVEggR1JBVkVdCitjaGFyIFx4REEJKDEyICA1IDc4KSAgIyBEQSDio5Mgw5ogW0xBVElOIENBUElUQUwgTEVUVEVSIFUgV0lUSCBBQ1VURV0KK2NoYXIgXHhEQgkoIDIgNDU2NzgpICAjIERCIOKjuiDDmyBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgVSBXSVRIIENJUkNVTUZMRVhdCitjaGFyIFx4REMJKDEyICA1NjcgKSAgIyBEQyDiobMgw5wgW0xBVElOIENBUElUQUwgTEVUVEVSIFUgV0lUSCBESUFFUkVTSVNdCitjaGFyIFx4REQJKDEyIDQgIDc4KSAgIyBERCDio4sgw50gW0xBVElOIENBUElUQUwgTEVUVEVSIFkgV0lUSCBBQ1VURV0KK2NoYXIgXHhERQkoMTIzNCA2NzgpICAjIERFIOKjryDDniBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgVEhPUk5dCitjaGFyIFx4REYJKDEyICAgIDc4KSAgIyBERiDio4Mgw58gW0xBVElOIFNNQUxMIExFVFRFUiBTSEFSUCBTXQorY2hhciBceEUwCSgxMjMgNTYgICkgICMgRTAg4qC3IMOgIFtMQVRJTiBTTUFMTCBMRVRURVIgQSBXSVRIIEdSQVZFXQorY2hhciBceEUxCSgxMjMgNTY3OCkgICMgRTEg4qO3IMOhIFtMQVRJTiBTTUFMTCBMRVRURVIgQSBXSVRIIEFDVVRFXQorY2hhciBceEUyCSgxICAgIDY3OCkgICMgRTIg4qOhIMOiIFtMQVRJTiBTTUFMTCBMRVRURVIgQSBXSVRIIENJUkNVTUZMRVhdCitjaGFyIFx4RTMJKDEgMyAgNjc4KSAgIyBFMyDio6Ugw6MgW0xBVElOIFNNQUxMIExFVFRFUiBBIFdJVEggVElMREVdCitjaGFyIFx4RTQJKCAgMzQ1ICAgKSAgIyBFNCDioJwgw6QgW0xBVElOIFNNQUxMIExFVFRFUiBBIFdJVEggRElBRVJFU0lTXQorY2hhciBceEU1CSgxICAgIDYgICkgICMgRTUg4qChIMOlIFtMQVRJTiBTTUFMTCBMRVRURVIgQSBXSVRIIFJJTkcgQUJPVkVdCitjaGFyIFx4RTYJKCAgMzQ1ICA4KSAgIyBFNiDiopwgw6YgW0xBVElOIFNNQUxMIExFVFRFUiBBRV0KK2NoYXIgXHhFNwkoMTIzNCA2ICApICAjIEU3IOKgryDDpyBbTEFUSU4gU01BTEwgTEVUVEVSIEMgV0lUSCBDRURJTExBXQorY2hhciBceEU4CSggMjM0IDYgICkgICMgRTgg4qCuIMOoIFtMQVRJTiBTTUFMTCBMRVRURVIgRSBXSVRIIEdSQVZFXQorY2hhciBceEU5CSgxMjM0NTYgICkgICMgRTkg4qC/IMOpIFtMQVRJTiBTTUFMTCBMRVRURVIgRSBXSVRIIEFDVVRFXQorY2hhciBceEVBCSgxMiAgIDYgICkgICMgRUEg4qCjIMOqIFtMQVRJTiBTTUFMTCBMRVRURVIgRSBXSVRIIENJUkNVTUZMRVhdCitjaGFyIFx4RUIJKDEyIDQgNiAgKSAgIyBFQiDioKsgw6sgW0xBVElOIFNNQUxMIExFVFRFUiBFIFdJVEggRElBRVJFU0lTXQorY2hhciBceEVDCSggIDM0ICA3OCkgICMgRUMg4qOMIMOsIFtMQVRJTiBTTUFMTCBMRVRURVIgSSBXSVRIIEdSQVZFXQorY2hhciBceEVECSggIDM0ICAgOCkgICMgRUQg4qKMIMOtIFtMQVRJTiBTTUFMTCBMRVRURVIgSSBXSVRIIEFDVVRFXQorY2hhciBceEVFCSgxICA0IDYgICkgICMgRUUg4qCpIMOuIFtMQVRJTiBTTUFMTCBMRVRURVIgSSBXSVRIIENJUkNVTUZMRVhdCitjaGFyIFx4RUYJKDEyIDQ1NiAgKSAgIyBFRiDioLsgw68gW0xBVElOIFNNQUxMIExFVFRFUiBJIFdJVEggRElBRVJFU0lTXQorY2hhciBceEYwCSggICAgNTYgOCkgICMgRjAg4qKwIMOwIFtMQVRJTiBTTUFMTCBMRVRURVIgRVRIXQorY2hhciBceEYxCSgxMiA0NTYgOCkgICMgRjEg4qK7IMOxIFtMQVRJTiBTTUFMTCBMRVRURVIgTiBXSVRIIFRJTERFXQorY2hhciBceEYyCSggIDM0IDY3OCkgICMgRjIg4qOsIMOyIFtMQVRJTiBTTUFMTCBMRVRURVIgTyBXSVRIIEdSQVZFXQorY2hhciBceEYzCSggIDM0IDY3ICkgICMgRjMg4qGsIMOzIFtMQVRJTiBTTUFMTCBMRVRURVIgTyBXSVRIIEFDVVRFXQorY2hhciBceEY0CSgxICA0NTYgICkgICMgRjQg4qC5IMO0IFtMQVRJTiBTTUFMTCBMRVRURVIgTyBXSVRIIENJUkNVTUZMRVhdCitjaGFyIFx4RjUJKCAyMzQgICA4KSAgIyBGNSDioo4gw7UgW0xBVElOIFNNQUxMIExFVFRFUiBPIFdJVEggVElMREVdCitjaGFyIFx4RjYJKCAyIDQgNiAgKSAgIyBGNiDioKogw7YgW0xBVElOIFNNQUxMIExFVFRFUiBPIFdJVEggRElBRVJFU0lTXQorY2hhciBceEY3CSggMiAgNTYgOCkgICMgRjcg4qKyIMO3IFtESVZJU0lPTiBTSUdOXQorY2hhciBceEY4CSggICA0NSA3OCkgICMgRjgg4qOYIMO4IFtMQVRJTiBTTUFMTCBMRVRURVIgTyBXSVRIIFNUUk9LRV0KK2NoYXIgXHhGOQkoIDIzNDU2ICApICAjIEY5IOKgviDDuSBbTEFUSU4gU01BTEwgTEVUVEVSIFUgV0lUSCBHUkFWRV0KK2NoYXIgXHhGQQkoIDIgIDU2NzgpICAjIEZBIOKjsiDDuiBbTEFUSU4gU01BTEwgTEVUVEVSIFUgV0lUSCBBQ1VURV0KK2NoYXIgXHhGQgkoMSAgIDU2ICApICAjIEZCIOKgsSDDuyBbTEFUSU4gU01BTEwgTEVUVEVSIFUgV0lUSCBDSVJDVU1GTEVYXQorY2hhciBceEZDCSgxMiAgNTYgICkgICMgRkMg4qCzIMO8IFtMQVRJTiBTTUFMTCBMRVRURVIgVSBXSVRIIERJQUVSRVNJU10KK2NoYXIgXHhGRAkoICAzNDU2IDgpICAjIEZEIOKivCDDvSBbTEFUSU4gU01BTEwgTEVUVEVSIFkgV0lUSCBBQ1VURV0KK2NoYXIgXHhGRQkoIDIzNDUgNzgpICAjIEZFIOKjniDDviBbTEFUSU4gU01BTEwgTEVUVEVSIFRIT1JOXQorY2hhciBceEZGCSgxMiAgIDYgOCkgICMgRkYg4qKjIMO/IFtMQVRJTiBTTUFMTCBMRVRURVIgWSBXSVRIIERJQUVSRVNJU10KKworaW5jbHVkZSBjb21tb24udHRpCmRpZmYgLS1naXQgYS9UYWJsZXMvVGV4dC9zdi50dGIgYi9UYWJsZXMvVGV4dC9zdi50dGIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmJiZmMyOQotLS0gL2Rldi9udWxsCisrKyBiL1RhYmxlcy9UZXh0L3N2LnR0YgpAQCAtMCwwICsxLDIxIEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisjICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorIworIyBDb3B5cmlnaHQgKEMpIDIwMDgtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisjCisjIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisjCisjIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyMgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorIyBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyMKKyMgV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworIworIyBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIyBCUkxUVFkgVGV4dCBUYWJsZSAtIFN3ZWRpc2gKKworaW5jbHVkZSBzdi0xOTk2LnR0YgpkaWZmIC0tZ2l0IGEvVGFibGVzL1RleHQvc3cudHRiIGIvVGFibGVzL1RleHQvc3cudHRiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE0NzM5YjMKLS0tIC9kZXYvbnVsbAorKysgYi9UYWJsZXMvVGV4dC9zdy50dGIKQEAgLTAsMCArMSwzMSBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorIyAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyMKKyMgQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorIworIyBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorIworIyBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisjIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyMgbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisjCisjIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMgQlJMVFRZIFRleHQgVGFibGUgLSBTd2FoaWxpCisjCisjIFNhbXVlbCBUaGliYXVsdCA8c2FtdWVsLnRoaWJhdWx0QGVucy1seW9uLm9yZz4KKyMgCisjIFRoaXMgdGFibGUgaXMgYmFzZWQgb24gdGhlIFVuZXNjbyByZXBvcnQgb24gdGhlIHByb2dyZXNzIG9mIHVuaWZpY2F0aW9uIG9mCisjIGJyYWlsbGUgd3JpdGluZyDCq8KgTCfDiUNSSVRVUkUgQlJBSUxMRSBEQU5TIExFIE1PTkRFwqDCuywgYnkgU2lyIENsdXRoYQorIyBNQUNLRU5aSUU6IGh0dHA6Ly91bmVzZG9jLnVuZXNjby5vcmcvaW1hZ2VzLzAwMTMvMDAxMzUyLzEzNTI1MWZvLnBkZgorIyBUaGUgZG9jdW1lbnQgaXMgZGF0ZWQgMTk1NCwgc28gdGhpcyB0YWJsZSBtYXkgYmUgcXVpdGUgb3V0ZGF0ZWQuCisKK2luY2x1ZGUgbHRyLWxhdGluLnR0aQoraW5jbHVkZSBudW0tZG90OC50dGkKK2luY2x1ZGUgcHVuYy1iYXNpYy50dGkKK2luY2x1ZGUgY29tbW9uLnR0aQpkaWZmIC0tZ2l0IGEvVGFibGVzL1RleHQvdGEudHRiIGIvVGFibGVzL1RleHQvdGEudHRiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQwOTU1YTYKLS0tIC9kZXYvbnVsbAorKysgYi9UYWJsZXMvVGV4dC90YS50dGIKQEAgLTAsMCArMSwyNCBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorIyAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyMKKyMgQ29weXJpZ2h0IChDKSAyMDA4LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorIworIyBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorIworIyBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisjIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyMgbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisjCisjIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMgQlJMVFRZIFRleHQgVGFibGUgLSBUYW1pbAorCitpbmNsdWRlIHRhbWlsLnR0aQoraW5jbHVkZSBhc2NpaS1iYXNpYy50dGkKKworaW5jbHVkZSBjb21tb24udHRpCmRpZmYgLS1naXQgYS9UYWJsZXMvVGV4dC90YW1pbC50dGkgYi9UYWJsZXMvVGV4dC90YW1pbC50dGkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWNjZmZjOQotLS0gL2Rldi9udWxsCisrKyBiL1RhYmxlcy9UZXh0L3RhbWlsLnR0aQpAQCAtMCwwICsxLDEwOSBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorIyAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyMKKyMgQ29weXJpZ2h0IChDKSAyMDA4LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorIworIyBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorIworIyBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisjIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyMgbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisjCisjIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMgVGhpcyBCUkxUVFkgdGV4dCBzdWJ0YWJsZSBkZWZpbmVzIHRoZSBicmFpbGxlIHJlcHJlc2VudGF0aW9ucworIyBmb3IgdGhlIFRhbWlsIHNjcmlwdC4KKworIyBNYWludGFpbmVkIGJ5IEpvaG4gSi4gQm95ZXIsIGRpcmVjdG9yQGNocGkub3JnLCB3d3cuY2hwaS5vcmcKKyMKKyMgVGhpcyB0YWJsZSBpcyBidWlsdCBhbmQgbWFpbnRhaW5lZCBieSBMZW9uIFVuZ2llciA8TGVvbi5VbmdpZXJAVmlld1BsdXMuY29tPgorIyB3aXRoIGhlbHAgYW5kIGd1aWRhbmNlIGZyb20gTW9oYW1tZWQgUi4gUmFtYWRhbiA8bXJhbWFkYW5AbmF0dGlxLmNvbT4KKyMKKyMgQ29udmVydGVkIGZyb20gbGlibG91aXMgdGFibGUgYnkgU2FtdWVsIFRoaWJhdWx0IDxzYW11ZWwudGhpYmF1bHRAZW5zLWx5b24ub3JnPgorCisjIGdlbmVyYXRlZCBieSB0dGJ0ZXN0OgorCitjaGFyIFx1MEI4MgkoICAgIDU2ICApICAjIOKgsCDgroIgW1RBTUlMIFNJR04gQU5VU1ZBUkFdCitjaGFyIFx1MEI4MwkoICAgICA2ICApICAjIOKgoCDgroMgW1RBTUlMIFNJR04gVklTQVJHQV0KK2NoYXIgXHUwQjg1CSgxICAgICAgICkgICMg4qCBIOCuhSBbVEFNSUwgTEVUVEVSIEFdCitjaGFyIFx1MEI4NgkoICAzNDUgICApICAjIOKgnCDgroYgW1RBTUlMIExFVFRFUiBBQV0KK2NoYXIgXHUwQjg3CSggMiA0ICAgICkgICMg4qCKIOCuhyBbVEFNSUwgTEVUVEVSIEldCitjaGFyIFx1MEI4OAkoICAzIDUgICApICAjIOKglCDgroggW1RBTUlMIExFVFRFUiBJSV0KK2NoYXIgXHUwQjg5CSgxIDMgIDYgICkgICMg4qClIOCuiSBbVEFNSUwgTEVUVEVSIFVdCitjaGFyIFx1MEI4QQkoMTIgIDU2ICApICAjIOKgsyDgroogW1RBTUlMIExFVFRFUiBVVV0KKworY2hhciBcdTBCOEUJKCAgMzQgIDcgKSAgIyDioYwg4K6OIFtUQU1JTCBMRVRURVIgRV0KK2NoYXIgXHUwQjhGCSgxICAgNSAgICkgICMg4qCRIOCujyBbVEFNSUwgTEVUVEVSIEVFXQorY2hhciBcdTBCOTAJKCAgMzQgICAgKSAgIyDioIwg4K6QIFtUQU1JTCBMRVRURVIgQUldCisKK2NoYXIgXHUwQjkyCSggMiA0IDY3ICkgICMg4qGqIOCukiBbVEFNSUwgTEVUVEVSIE9dCitjaGFyIFx1MEI5MwkoMSAzIDUgICApICAjIOKglSDgrpMgW1RBTUlMIExFVFRFUiBPT10KK2NoYXIgXHUwQjk0CSggMiA0IDYgICkgICMg4qCqIOCulCBbVEFNSUwgTEVUVEVSIEFVXQorY2hhciBcdTBCOTUJKDEgMyAgICAgKSAgIyDioIUg4K6VIFtUQU1JTCBMRVRURVIgS0FdCisKKworCitjaGFyIFx1MEI5OQkoICAzNCA2ICApICAjIOKgrCDgrpkgW1RBTUlMIExFVFRFUiBOR0FdCitjaGFyIFx1MEI5QQkoMSAgNCAgICApICAjIOKgiSDgrpogW1RBTUlMIExFVFRFUiBDQV0KKworY2hhciBcdTBCOUMJKCAyIDQ1ICAgKSAgIyDioJog4K6cIFtUQU1JTCBMRVRURVIgSkFdCisKK2NoYXIgXHUwQjlFCSggMiAgNSAgICkgICMg4qCSIOCuniBbVEFNSUwgTEVUVEVSIE5ZQV0KK2NoYXIgXHUwQjlGCSggMjM0NTYgICkgICMg4qC+IOCunyBbVEFNSUwgTEVUVEVSIFRUQV0KKworCisKK2NoYXIgXHUwQkEzCSggIDM0NTYgICkgICMg4qC8IOCuoyBbVEFNSUwgTEVUVEVSIE5OQV0KK2NoYXIgXHUwQkE0CSggMjM0NSAgICkgICMg4qCeIOCupCBbVEFNSUwgTEVUVEVSIFRBXQorCisKKworY2hhciBcdTBCQTgJKDEgMzQ1ICAgKSAgIyDioJ0g4K6oIFtUQU1JTCBMRVRURVIgTkFdCitjaGFyIFx1MEJBOQkoICAgIDU2ICApICAjIOKgsCDgrqkgW1RBTUlMIExFVFRFUiBOTk5BXQorY2hhciBcdTBCQUEJKDEyMzQgICAgKSAgIyDioI8g4K6qIFtUQU1JTCBMRVRURVIgUEFdCisKKworCitjaGFyIFx1MEJBRQkoMSAzNCAgICApICAjIOKgjSDgrq4gW1RBTUlMIExFVFRFUiBNQV0KK2NoYXIgXHUwQkFGCSgxIDM0NTYgICkgICMg4qC9IOCuryBbVEFNSUwgTEVUVEVSIFlBXQorY2hhciBcdTBCQjAJKDEyMyA1ICAgKSAgIyDioJcg4K6wIFtUQU1JTCBMRVRURVIgUkFdCitjaGFyIFx1MEJCMQkoMTIzIDUgNyApICAjIOKhlyDgrrEgW1RBTUlMIExFVFRFUiBSUkFdCitjaGFyIFx1MEJCMgkoMTIzICAgICApICAjIOKghyDgrrIgW1RBTUlMIExFVFRFUiBMQV0KK2NoYXIgXHUwQkIzCSgxMjMgICA3ICkgICMg4qGHIOCusyBbVEFNSUwgTEVUVEVSIExMQV0KK2NoYXIgXHUwQkI0CSgxMjMgICA3OCkgICMg4qOHIOCutCBbVEFNSUwgTEVUVEVSIExMTEFdCitjaGFyIFx1MEJCNQkoMTIzICA2ICApICAjIOKgpyDgrrUgW1RBTUlMIExFVFRFUiBWQV0KK2NoYXIgXHUwQkI2CSgxICA0IDYgICkgICMg4qCpIOCutiBbVEFNSUwgTEVUVEVSIFNIQV0KK2NoYXIgXHUwQkI3CSgxMjM0IDYgICkgICMg4qCvIOCutyBbVEFNSUwgTEVUVEVSIFNTQV0KK2NoYXIgXHUwQkI4CSggMjM0ICAgICkgICMg4qCOIOCuuCBbVEFNSUwgTEVUVEVSIFNBXQorY2hhciBcdTBCQjkJKDEyICA1ICAgKSAgIyDioJMg4K65IFtUQU1JTCBMRVRURVIgSEFdCisKK2NoYXIgXHUwQkJFCSggIDM0NSAgICkgICMg4qCcIOCuviBbVEFNSUwgVk9XRUwgU0lHTiBBQV0KK2NoYXIgXHUwQkJGCSggMiA0ICAgICkgICMg4qCKIOCuvyBbVEFNSUwgVk9XRUwgU0lHTiBJXQorY2hhciBcdTBCQzAJKCAgMyA1ICAgKSAgIyDioJQg4K+AIFtUQU1JTCBWT1dFTCBTSUdOIElJXQorY2hhciBcdTBCQzEJKDEgMyAgNiAgKSAgIyDioKUg4K+BIFtUQU1JTCBWT1dFTCBTSUdOIFVdCitjaGFyIFx1MEJDMgkoMTIgIDU2ICApICAjIOKgsyDgr4IgW1RBTUlMIFZPV0VMIFNJR04gVVVdCisKK2NoYXIgXHUwQkM2CSggIDM0ICA3ICkgICMg4qGMIOCvhiBbVEFNSUwgVk9XRUwgU0lHTiBFXQorY2hhciBcdTBCQzcJKDEgICA1ICAgKSAgIyDioJEg4K+HIFtUQU1JTCBWT1dFTCBTSUdOIEVFXQorY2hhciBcdTBCQzgJKCAgMzQgICAgKSAgIyDioIwg4K+IIFtUQU1JTCBWT1dFTCBTSUdOIEFJXQorCitjaGFyIFx1MEJDQQkoIDIgNCA2NyApICAjIOKhqiDgr4ogW1RBTUlMIFZPV0VMIFNJR04gT10KK2NoYXIgXHUwQkNCCSgxIDMgNSAgICkgICMg4qCVIOCviyBbVEFNSUwgVk9XRUwgU0lHTiBPT10KK2NoYXIgXHUwQkNDCSggMiA0IDYgICkgICMg4qCqIOCvjCBbVEFNSUwgVk9XRUwgU0lHTiBBVV0KK2NoYXIgXHUwQkNECSggICA0ICAgICkgICMg4qCIIOCvjSBbVEFNSUwgU0lHTiBWSVJBTUFdCisKK2NoYXIgXHUwQkU2CSggMiA0NSAgICkgICMg4qCaIOCvpiBbVEFNSUwgRElHSVQgWkVST10KK2NoYXIgXHUwQkU3CSgxICAgICAgICkgICMg4qCBIOCvpyBbVEFNSUwgRElHSVQgT05FXQorY2hhciBcdTBCRTgJKDEyICAgICAgKSAgIyDioIMg4K+oIFtUQU1JTCBESUdJVCBUV09dCitjaGFyIFx1MEJFOQkoMSAgNCAgICApICAjIOKgiSDgr6kgW1RBTUlMIERJR0lUIFRIUkVFXQorY2hhciBcdTBCRUEJKDEgIDQ1ICAgKSAgIyDioJkg4K+qIFtUQU1JTCBESUdJVCBGT1VSXQorY2hhciBcdTBCRUIJKDEgICA1ICAgKSAgIyDioJEg4K+rIFtUQU1JTCBESUdJVCBGSVZFXQorY2hhciBcdTBCRUMJKDEyIDQgICAgKSAgIyDioIsg4K+sIFtUQU1JTCBESUdJVCBTSVhdCitjaGFyIFx1MEJFRAkoMTIgNDUgICApICAjIOKgmyDgr60gW1RBTUlMIERJR0lUIFNFVkVOXQorY2hhciBcdTBCRUUJKDEyICA1ICAgKSAgIyDioJMg4K+uIFtUQU1JTCBESUdJVCBFSUdIVF0KK2NoYXIgXHUwQkVGCSggMiA0ICAgICkgICMg4qCKIOCvryBbVEFNSUwgRElHSVQgTklORV0KZGlmZiAtLWdpdCBhL1RhYmxlcy9UZXh0L3RlLnR0YiBiL1RhYmxlcy9UZXh0L3RlLnR0YgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jM2I2NWI4Ci0tLSAvZGV2L251bGwKKysrIGIvVGFibGVzL1RleHQvdGUudHRiCkBAIC0wLDAgKzEsMjQgQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyMgICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisjCisjIENvcHlyaWdodCAoQykgMjAwOC0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyMKKyMgQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjIEJSTFRUWSBUZXh0IFRhYmxlIC0gVGVsdWd1CisKK2luY2x1ZGUgdGVsdWd1LnR0aQoraW5jbHVkZSBhc2NpaS1iYXNpYy50dGkKKworaW5jbHVkZSBjb21tb24udHRpCmRpZmYgLS1naXQgYS9UYWJsZXMvVGV4dC90ZWx1Z3UudHRpIGIvVGFibGVzL1RleHQvdGVsdWd1LnR0aQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZGEyZmI1Ci0tLSAvZGV2L251bGwKKysrIGIvVGFibGVzL1RleHQvdGVsdWd1LnR0aQpAQCAtMCwwICsxLDEwOSBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorIyAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyMKKyMgQ29weXJpZ2h0IChDKSAyMDA4LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorIworIyBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorIworIyBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisjIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyMgbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisjCisjIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMgVGhpcyBCUkxUVFkgdGV4dCBzdWJ0YWJsZSBkZWZpbmVzIHRoZSBicmFpbGxlIHJlcHJlc2VudGF0aW9ucworIyBmb3IgdGhlIFRlbHVndSBzY3JpcHQuCisKKyMgTWFpbnRhaW5lZCBieSBKb2huIEouIEJveWVyLCBkaXJlY3RvckBjaHBpLm9yZywgd3d3LmNocGkub3JnCisjCisjIFRoaXMgdGFibGUgaXMgYnVpbHQgYW5kIG1haW50YWluZWQgYnkgTGVvbiBVbmdpZXIgPExlb24uVW5naWVyQFZpZXdQbHVzLmNvbT4KKyMgd2l0aCBoZWxwIGFuZCBndWlkYW5jZSBmcm9tIE1vaGFtbWVkIFIuIFJhbWFkYW4gPG1yYW1hZGFuQG5hdHRpcS5jb20+CisjCisjIENvbnZlcnRlZCBmcm9tIGxpYmxvdWlzIHRhYmxlIGJ5IFNhbXVlbCBUaGliYXVsdCA8c2FtdWVsLnRoaWJhdWx0QGVucy1seW9uLm9yZz4KKworIyBnZW5lcmF0ZWQgYnkgdHRidGVzdDoKK2NoYXIgXHUwQzAxCSggIDMgICAgICkgICMg4qCEIOCwgSBbVEVMVUdVIFNJR04gQ0FORFJBQklORFVdCitjaGFyIFx1MEMwMgkoICAgIDU2ICApICAjIOKgsCDgsIIgW1RFTFVHVSBTSUdOIEFOVVNWQVJBXQorY2hhciBcdTBDMDMJKCAgICAgNiAgKSAgIyDioKAg4LCDIFtURUxVR1UgU0lHTiBWSVNBUkdBXQorY2hhciBcdTBDMDUJKDEgICAgICAgKSAgIyDioIEg4LCFIFtURUxVR1UgTEVUVEVSIEFdCitjaGFyIFx1MEMwNgkoICAzNDUgICApICAjIOKgnCDgsIYgW1RFTFVHVSBMRVRURVIgQUFdCitjaGFyIFx1MEMwNwkoIDIgNCAgICApICAjIOKgiiDgsIcgW1RFTFVHVSBMRVRURVIgSV0KK2NoYXIgXHUwQzA4CSggIDMgNSAgICkgICMg4qCUIOCwiCBbVEVMVUdVIExFVFRFUiBJSV0KK2NoYXIgXHUwQzA5CSgxIDMgIDYgICkgICMg4qClIOCwiSBbVEVMVUdVIExFVFRFUiBVXQorY2hhciBcdTBDMEEJKDEyICA1NiAgKSAgIyDioLMg4LCKIFtURUxVR1UgTEVUVEVSIFVVXQorCitjaGFyIFx1MEMwRQkoICAzNCAgNyApICAjIOKhjCDgsI4gW1RFTFVHVSBMRVRURVIgRV0KK2NoYXIgXHUwQzBGCSgxICAgNSAgICkgICMg4qCRIOCwjyBbVEVMVUdVIExFVFRFUiBFRV0KK2NoYXIgXHUwQzEwCSggIDM0ICAgICkgICMg4qCMIOCwkCBbVEVMVUdVIExFVFRFUiBBSV0KKworY2hhciBcdTBDMTIJKCAyIDQgNjcgKSAgIyDioaog4LCSIFtURUxVR1UgTEVUVEVSIE9dCitjaGFyIFx1MEMxMwkoMSAzIDUgICApICAjIOKglSDgsJMgW1RFTFVHVSBMRVRURVIgT09dCitjaGFyIFx1MEMxNAkoIDIgNCA2ICApICAjIOKgqiDgsJQgW1RFTFVHVSBMRVRURVIgQVVdCitjaGFyIFx1MEMxNQkoMSAzICAgICApICAjIOKghSDgsJUgW1RFTFVHVSBMRVRURVIgS0FdCitjaGFyIFx1MEMxNgkoICAgNCA2ICApICAjIOKgqCDgsJYgW1RFTFVHVSBMRVRURVIgS0hBXQorY2hhciBcdTBDMTcJKDEyMzQgICAgKSAgIyDioI8g4LCXIFtURUxVR1UgTEVUVEVSIEdBXQorY2hhciBcdTBDMTgJKDEyICAgNiAgKSAgIyDioKMg4LCYIFtURUxVR1UgTEVUVEVSIEdIQV0KK2NoYXIgXHUwQzE5CSggIDM0IDYgICkgICMg4qCsIOCwmSBbVEVMVUdVIExFVFRFUiBOR0FdCitjaGFyIFx1MEMxQQkoMSAgNCAgICApICAjIOKgiSDgsJogW1RFTFVHVSBMRVRURVIgQ0FdCitjaGFyIFx1MEMxQgkoMSAgICA2ICApICAjIOKgoSDgsJsgW1RFTFVHVSBMRVRURVIgQ0hBXQorY2hhciBcdTBDMUMJKCAyIDQ1ICAgKSAgIyDioJog4LCcIFtURUxVR1UgTEVUVEVSIEpBXQorY2hhciBcdTBDMUQJKCAgMyA1NiAgKSAgIyDioLQg4LCdIFtURUxVR1UgTEVUVEVSIEpIQV0KK2NoYXIgXHUwQzFFCSggMiAgNSAgICkgICMg4qCSIOCwniBbVEVMVUdVIExFVFRFUiBOWUFdCitjaGFyIFx1MEMxRgkoIDIzNDU2ICApICAjIOKgviDgsJ8gW1RFTFVHVSBMRVRURVIgVFRBXQorY2hhciBcdTBDMjAJKCAyIDQ1NiAgKSAgIyDioLog4LCgIFtURUxVR1UgTEVUVEVSIFRUSEFdCitjaGFyIFx1MEMyMQkoMTIgNCA2ICApICAjIOKgqyDgsKEgW1RFTFVHVSBMRVRURVIgRERBXQorY2hhciBcdTBDMjIJKDEyMzQ1NiAgKSAgIyDioL8g4LCiIFtURUxVR1UgTEVUVEVSIERESEFdCitjaGFyIFx1MEMyMwkoICAzNDU2ICApICAjIOKgvCDgsKMgW1RFTFVHVSBMRVRURVIgTk5BXQorY2hhciBcdTBDMjQJKCAyMzQ1ICAgKSAgIyDioJ4g4LCkIFtURUxVR1UgTEVUVEVSIFRBXQorY2hhciBcdTBDMjUJKDEgIDQ1NiAgKSAgIyDioLkg4LClIFtURUxVR1UgTEVUVEVSIFRIQV0KK2NoYXIgXHUwQzI2CSgxICA0NSAgICkgICMg4qCZIOCwpiBbVEVMVUdVIExFVFRFUiBEQV0KK2NoYXIgXHUwQzI3CSggMjM0IDYgICkgICMg4qCuIOCwpyBbVEVMVUdVIExFVFRFUiBESEFdCitjaGFyIFx1MEMyOAkoMSAzNDUgICApICAjIOKgnSDgsKggW1RFTFVHVSBMRVRURVIgTkFdCisKK2NoYXIgXHUwQzJBCSgxMjM0ICAgICkgICMg4qCPIOCwqiBbVEVMVUdVIExFVFRFUiBQQV0KK2NoYXIgXHUwQzJCCSggMjMgNSAgICkgICMg4qCWIOCwqyBbVEVMVUdVIExFVFRFUiBQSEFdCitjaGFyIFx1MEMyQwkoMTIgICAgICApICAjIOKggyDgsKwgW1RFTFVHVSBMRVRURVIgQkFdCitjaGFyIFx1MEMyRAkoICAgNDUgICApICAjIOKgmCDgsK0gW1RFTFVHVSBMRVRURVIgQkhBXQorY2hhciBcdTBDMkUJKDEgMzQgICAgKSAgIyDioI0g4LCuIFtURUxVR1UgTEVUVEVSIE1BXQorY2hhciBcdTBDMkYJKDEgMzQ1NiAgKSAgIyDioL0g4LCvIFtURUxVR1UgTEVUVEVSIFlBXQorY2hhciBcdTBDMzAJKDEyMyA1ICAgKSAgIyDioJcg4LCwIFtURUxVR1UgTEVUVEVSIFJBXQorY2hhciBcdTBDMzEJKDEyMyA1IDcgKSAgIyDioZcg4LCxIFtURUxVR1UgTEVUVEVSIFJSQV0KK2NoYXIgXHUwQzMyCSgxMjMgICAgICkgICMg4qCHIOCwsiBbVEVMVUdVIExFVFRFUiBMQV0KK2NoYXIgXHUwQzMzCSgxMjMgICA3ICkgICMg4qGHIOCwsyBbVEVMVUdVIExFVFRFUiBMTEFdCisKK2NoYXIgXHUwQzM1CSgxMjMgIDYgICkgICMg4qCnIOCwtSBbVEVMVUdVIExFVFRFUiBWQV0KK2NoYXIgXHUwQzM2CSgxICA0IDYgICkgICMg4qCpIOCwtiBbVEVMVUdVIExFVFRFUiBTSEFdCitjaGFyIFx1MEMzNwkoMTIzNCA2ICApICAjIOKgryDgsLcgW1RFTFVHVSBMRVRURVIgU1NBXQorY2hhciBcdTBDMzgJKCAyMzQgICAgKSAgIyDioI4g4LC4IFtURUxVR1UgTEVUVEVSIFNBXQorY2hhciBcdTBDMzkJKDEyICA1ICAgKSAgIyDioJMg4LC5IFtURUxVR1UgTEVUVEVSIEhBXQorCitjaGFyIFx1MEMzRQkoICAzNDUgICApICAjIOKgnCDgsL4gW1RFTFVHVSBWT1dFTCBTSUdOIEFBXQorY2hhciBcdTBDM0YJKCAyIDQgICAgKSAgIyDioIog4LC/IFtURUxVR1UgVk9XRUwgU0lHTiBJXQorY2hhciBcdTBDNDAJKCAgMyA1ICAgKSAgIyDioJQg4LGAIFtURUxVR1UgVk9XRUwgU0lHTiBJSV0KK2NoYXIgXHUwQzQxCSgxIDMgIDYgICkgICMg4qClIOCxgSBbVEVMVUdVIFZPV0VMIFNJR04gVV0KK2NoYXIgXHUwQzQyCSgxMiAgNTYgICkgICMg4qCzIOCxgiBbVEVMVUdVIFZPV0VMIFNJR04gVVVdCisKK2NoYXIgXHUwQzQ2CSggIDM0ICA3ICkgICMg4qGMIOCxhiBbVEVMVUdVIFZPV0VMIFNJR04gRV0KK2NoYXIgXHUwQzQ3CSgxICAgNSAgICkgICMg4qCRIOCxhyBbVEVMVUdVIFZPV0VMIFNJR04gRUVdCitjaGFyIFx1MEM0OAkoICAzNCAgICApICAjIOKgjCDgsYggW1RFTFVHVSBWT1dFTCBTSUdOIEFJXQorCitjaGFyIFx1MEM0QQkoIDIgNCA2NyApICAjIOKhqiDgsYogW1RFTFVHVSBWT1dFTCBTSUdOIE9dCitjaGFyIFx1MEM0QgkoMSAzIDUgICApICAjIOKglSDgsYsgW1RFTFVHVSBWT1dFTCBTSUdOIE9PXQorY2hhciBcdTBDNEMJKCAyIDQgNiAgKSAgIyDioKog4LGMIFtURUxVR1UgVk9XRUwgU0lHTiBBVV0KK2NoYXIgXHUwQzRECSggICA0ICAgICkgICMg4qCIIOCxjSBbVEVMVUdVIFNJR04gVklSQU1BXQorCitjaGFyIFx1MEM2NgkoIDIgNDUgICApICAjIOKgmiDgsaYgW1RFTFVHVSBESUdJVCBaRVJPXQorY2hhciBcdTBDNjcJKDEgICAgICAgKSAgIyDioIEg4LGnIFtURUxVR1UgRElHSVQgT05FXQorY2hhciBcdTBDNjgJKDEyICAgICAgKSAgIyDioIMg4LGoIFtURUxVR1UgRElHSVQgVFdPXQorY2hhciBcdTBDNjkJKDEgIDQgICAgKSAgIyDioIkg4LGpIFtURUxVR1UgRElHSVQgVEhSRUVdCitjaGFyIFx1MEM2QQkoMSAgNDUgICApICAjIOKgmSDgsaogW1RFTFVHVSBESUdJVCBGT1VSXQorY2hhciBcdTBDNkIJKDEgICA1ICAgKSAgIyDioJEg4LGrIFtURUxVR1UgRElHSVQgRklWRV0KK2NoYXIgXHUwQzZDCSgxMiA0ICAgICkgICMg4qCLIOCxrCBbVEVMVUdVIERJR0lUIFNJWF0KK2NoYXIgXHUwQzZECSgxMiA0NSAgICkgICMg4qCbIOCxrSBbVEVMVUdVIERJR0lUIFNFVkVOXQorY2hhciBcdTBDNkUJKDEyICA1ICAgKSAgIyDioJMg4LGuIFtURUxVR1UgRElHSVQgRUlHSFRdCitjaGFyIFx1MEM2RgkoIDIgNCAgICApICAjIOKgiiDgsa8gW1RFTFVHVSBESUdJVCBOSU5FXQpkaWZmIC0tZ2l0IGEvVGFibGVzL1RleHQvdHIudHRiIGIvVGFibGVzL1RleHQvdHIudHRiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdjMjdkMWIKLS0tIC9kZXYvbnVsbAorKysgYi9UYWJsZXMvVGV4dC90ci50dGIKQEAgLTAsMCArMSw2MSBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorIyAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyMKKyMgQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorIworIyBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorIworIyBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisjIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyMgbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisjCisjIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMgQlJMVFRZIFRleHQgVGFibGUgLSBUdXJraXNoCisjCisjIFNhbXVlbCBUaGliYXVsdCA8c2FtdWVsLnRoaWJhdWx0QGVucy1seW9uLm9yZz4KKyMgCisjIFRoaXMgdGFibGUgaXMgYmFzZWQgb24gdGhlIFVuZXNjbyByZXBvcnQgb24gdGhlIHByb2dyZXNzIG9mIHVuaWZpY2F0aW9uIG9mCisjIGJyYWlsbGUgd3JpdGluZyDCq8KgTCfDiUNSSVRVUkUgQlJBSUxMRSBEQU5TIExFIE1PTkRFwqDCuywgYnkgU2lyIENsdXRoYQorIyBNQUNLRU5aSUU6IGh0dHA6Ly91bmVzZG9jLnVuZXNjby5vcmcvaW1hZ2VzLzAwMTMvMDAxMzUyLzEzNTI1MWZvLnBkZgorIyBUaGUgZG9jdW1lbnQgaXMgZGF0ZWQgMTk1NCwgc28gdGhpcyB0YWJsZSBtYXkgYmUgcXVpdGUgb3V0ZGF0ZWQuCisKKyMgdGhlIHN0YW5kYXJkIHJlcHJlc2VudGF0aW9ucyBmb3IgdGhlIGxldHRlcnMgb2YgdGhlIExhdGluIGFscGhhYmV0CitpbmNsdWRlIGx0ci1sYXRpbi50dGkKK2NoYXIgXHUwMTMxCSggIDMgNSAgICkgICMg4qCUIMSxIFtMQVRJTiBTTUFMTCBMRVRURVIgRE9UTEVTUyBJXQorY2hhciBceDQ5CSggIDMgNSA3ICkgICMg4qGUIEkgW0xBVElOIENBUElUQUwgTEVUVEVSIEldCitjaGFyIFx4NjkJKCAyIDQgICAgKSAgIyDioIogaSBbTEFUSU4gU01BTEwgTEVUVEVSIEldCitjaGFyIFx1MDEzMAkoIDIgNCAgNyApICAjIOKhiiDEsCBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgSSBXSVRIIERPVCBBQk9WRV0KKworIyBsb3dlcmNhc2UgYWNjZW50ZWQgbGV0dGVycworY2hhciBceEU3CSgxICAgIDYgICkgICMg4qChIMOnIFtMQVRJTiBTTUFMTCBMRVRURVIgQyBXSVRIIENFRElMTEFdCitjaGFyIFx1MDExRgkoMTIgICA2ICApICAjIOKgoyDEnyBbTEFUSU4gU01BTEwgTEVUVEVSIEcgV0lUSCBCUkVWRV0KK2NoYXIgXHhGNgkoIDIgNCA2ICApICAjIOKgqiDDtiBbTEFUSU4gU01BTEwgTEVUVEVSIE8gV0lUSCBESUFFUkVTSVNdCitjaGFyIFx1MDE1RgkoMSAgNCA2ICApICAjIOKgqSDFnyBbTEFUSU4gU01BTEwgTEVUVEVSIFMgV0lUSCBDRURJTExBXQorY2hhciBceEZDCSgxMiAgNTYgICkgICMg4qCzIMO8IFtMQVRJTiBTTUFMTCBMRVRURVIgVSBXSVRIIERJQUVSRVNJU10KK2NoYXIgXHhFMgkoICAzNDUgICApICAjIOKgnCDDoiBbTEFUSU4gU01BTEwgTEVUVEVSIEEgV0lUSCBDSVJDVU1GTEVYXQorY2hhciBceEVFCSggIDM0ICAgICkgICMg4qCMIMOuIFtMQVRJTiBTTUFMTCBMRVRURVIgSSBXSVRIIENJUkNVTUZMRVhdCitjaGFyIFx4RkIJKDEgICA1NiAgKSAgIyDioLEgw7sgW0xBVElOIFNNQUxMIExFVFRFUiBVIFdJVEggQ0lSQ1VNRkxFWF0KKworIyB1cHBlcmNhc2UgYWNjZW50ZWQgbGV0dGVycworY2hhciBceEM3CSgxICAgIDY3ICkgICMg4qGhIMOHIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBDIFdJVEggQ0VESUxMQV0KK2NoYXIgXHUwMTFFCSgxMiAgIDY3ICkgICMg4qGjIMSeIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBHIFdJVEggQlJFVkVdCitjaGFyIFx4RDYJKCAyIDQgNjcgKSAgIyDioaogw5YgW0xBVElOIENBUElUQUwgTEVUVEVSIE8gV0lUSCBESUFFUkVTSVNdCitjaGFyIFx1MDE1RQkoMSAgNCA2NyApICAjIOKhqSDFniBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgUyBXSVRIIENFRElMTEFdCitjaGFyIFx4REMJKDEyICA1NjcgKSAgIyDiobMgw5wgW0xBVElOIENBUElUQUwgTEVUVEVSIFUgV0lUSCBESUFFUkVTSVNdCitjaGFyIFx4QzIJKCAgMzQ1IDcgKSAgIyDioZwgw4IgW0xBVElOIENBUElUQUwgTEVUVEVSIEEgV0lUSCBDSVJDVU1GTEVYXQorY2hhciBceENFCSggIDM0ICA3ICkgICMg4qGMIMOOIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBJIFdJVEggQ0lSQ1VNRkxFWF0KK2NoYXIgXHhEQgkoMSAgIDU2NyApICAjIOKhsSDDmyBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgVSBXSVRIIENJUkNVTUZMRVhdCisKKyMgdGhlIG51bWJlcnMgMC05IGFyZSByZXByZXNlbnRlZCBieSB0aGUgbGV0dGVycyBqLGEtaSB3aXRoIGRvdCA4IGFkZGVkCitpbmNsdWRlIG51bS1kb3Q4LnR0aQorCitpbmNsdWRlIHB1bmMtYmFzaWMudHRpCitjaGFyIFx4M0YJKCAyICAgNiAgKSAgIyDioKIgPyBbUVVFU1RJT04gTUFSS10KKworaW5jbHVkZSBjb21tb24udHRpCmRpZmYgLS1naXQgYS9UYWJsZXMvVGV4dC91ay50dGIgYi9UYWJsZXMvVGV4dC91ay50dGIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTYzYzYzYwotLS0gL2Rldi9udWxsCisrKyBiL1RhYmxlcy9UZXh0L3VrLnR0YgpAQCAtMCwwICsxLDY3IEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisjICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorIworIyBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisjCisjIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisjCisjIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyMgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorIyBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyMKKyMgV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworIworIyBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIyBCUkxUVFkgVGV4dCBUYWJsZSAtIFVrcmFpbmlhbgorIyBtb2RlbGVkIGZyb20gUnVzc2lhbiBCcmFpbGxlIHRhYmxlIGJ5IFZpY3RvciBUc2FyYW4gPHZ0c2FyYW5AZ21haWwuY29tPgorCisjIFRoaXMgaXMgdGhlIFVrcmFpbmlhbiBicmFpbGxlIHRhYmxlLiBJdCBpcyBiYXNlZCBvbiB0aGUgS09JOC1VIGNoYXJhY3RlciBzZXQKKyMgd2hpY2ggaXMgdGhlIG1vc3QgdXNlZCBpbiBVa3JhaW5lLgorCisjIEFzIHRoZSBVa3JhaW5pYW4gY3lyaWxsaWMgZGVmaW5pdGlvbiBjb25mbGljdHMgd2l0aCB0aGUgbGF0aW4gZGVmaW5pdGlvbiwgc29tZQorIyBkZWNpc2lvbnMgaGFkIHRvIGJlIHRha2VuLiBVc2VycyBvZiB0aGlzIHRhYmxlIG5lZWQgdG8gdHlwZSBib3RoIGxhdGluIGZvciB0aGUgY29tbWFuZAorIyBwcm9tcHQgYW5kIGN5cmlsbGljIHdoaWxlIHJlYWRpbmcgYW5kIHdyaXRpbmcgZG9jdW1lbnRzIGFuZCBtYWlsLgorCisjIEluIHRoZSBmb2xsb3dpbmcsIGxhdGluIGxldHRlcnMgYXJlIHF1b3RlZCB3aXRoIGFwb3N0cm9waGVzIGxpa2UgaW4gJ2EnLCBhbmQKKyMgY3lyaWxsaWMgbGV0dGVycyBhcmUgZW5jbG9zZWQgd2l0aGluIGJyYWNrZXRzIGxpa2UgaW4gW2FdLgorCisjIERvdCAxIGluIHRoZSBjeXJpbGxpYyBkZWZpbml0aW9uIGlzIHRoZSBjeXJpbGxpYyBsZXR0ZXIgd2hpY2ggbG9va3MgYW5kCisjIHNvdW5kcyBsaWtlICdhJy4gVGhlIHByb2JsZW0gaXMgdGhhdCBpbiB0aGUgS09JOC1VIGNoYXJhY3RlciBzZXQsIHRoZXJlIGlzCisjIGJvdGggYSBsYXRpbiAnYScgYW5kIGEgY3lyaWxsaWMgW2FdLiBJbiBkZWNpbWFsLCB0aGVpciBjaGFyYWN0ZXIgbnVtYmVycyBhcmUKKyMgOTcgYW5kIDE5MyByZXNwZWN0aXZlbHkuICBUbyBoYW5kbGUgY29uZmxpY3RzIGxpa2UgdGhlc2UsIHdlIGhhdmUgcHJpb3JpdGl6ZWQKKyMgd2hpY2ggY2hhcmFjdGVycyBhcmUgbW9zdCBpbXBvcnRhbnQgdG8gbWF0Y2ggdGhlIHN0YW5kYXJkLgorCisjIFJVTEVTOgorIyAxLiBBbGwgY3lyaWxsaWMgY2hhcmFjdGVycyBtdXN0IGZvbGxvdyB0aGUgVWtyYWluaWFuIHN0YW5kYXJkLiBLT0k4LVUgY2hhcmFjdGVyIAorIyAgICAxOTMgW2FdIG11c3QgYmUgZG90LTEsIGFuZCBzbyBvbi4KKyMgMi4gQ2FwaXRhbCBjeXJpbGxpYyBsZXR0ZXJzIGhhdmUgZG90IDcgb24uCisjIDMuIFRoZSBsYXRpbiBhbHBoYWJldCBpcyBpbXBsZW1lbnRlZCB0byBmb2xsb3cgdGhlIGludGVybmF0aW9uYWwgc3RhbmRhcmQKKyMgICAgZXhjZXB0IGl0IGhhcyBkb3QgOCBvbi4KKyMgNC4gQ2FwaXRhbCBsYXRpbiBsZXR0ZXJzIGhhdmUgZG90cyA3IGFuZCA4IG9uLgorIyA1LiBOdW1iZXJzIGFyZSBkZWZpbmVkIGFzIGluIHRoZSBBbWVyaWNhbiBzdGFuZGFyZC4gVGhpcyBtZWFucyBkb3QtMiBmb3IKKyMgICAgbnVtYmVyICcxJywgYW5kIHNvIG9uLiBUaGlzIHdpbGwgY29uZmxpY3Qgd2l0aCB0aGUgY3lyaWxsaWMgY29tbWEgd2hpY2ggaXMKKyMgICAgYWxzbyBkb3QtMi4KKyMgNC4gU3BlY2lhbCBjaGFyYWN0ZXJzIGxpa2UgISIjwqQlJi8oKT0/IGZvbGxvdyB0aGUgQW1lcmljYW4gc3RhbmRhcmQgaWYgCisjICAgIHBvc3NpYmxlLgorIyAyLiBDb250cm9sIGNoYXJhY3RlcnMgYXJlIG9mdGVuIHVzZWQgb24gTGludXguIFRoZXNlIGFyZSBub3QgdmVyeSB3ZWxsIAorIyAgICBpbXBsZW1lbnRlZC4gTW9yZSB3b3JrIHNob3VsZCBiZSBkb25lLgorCisjIENvbW1lbnRzIGZyb20gVWtyYWluaWFucyBhcmUgdmVyeSB3ZWxjb21lLgorCitpbmNsdWRlIGx0ci1jeXJpbGxpYy50dGkKK2luY2x1ZGUgbHRyLWRvdDgudHRpCitpbmNsdWRlIG51bS1uZW1ldGgudHRpCitpbmNsdWRlIHB1bmMtYWx0ZXJuYXRlLnR0aQorCisjIGdlbmVyYXRlZCBieSB0dGJ0ZXN0OiBjaGFyc2V0PWtvaTgtdQorY2hhciBcdTIyMTkJKCAyMyAgICA4KSAgIyA5NSDiooYg4oiZIFtCVUxMRVQgT1BFUkFUT1JdCitjaGFyIFx4QjAJKCAyMyA1NjcgKSAgIyA5QyDiobYgwrAgW0RFR1JFRSBTSUdOXQorY2hhciBceEIyCSggMiAgIDYgOCkgICMgOUQg4qKiIMKyIFtTVVBFUlNDUklQVCBUV09dCitjaGFyIFx4QjcJKCAgMzQ1IDc4KSAgIyA5RSDio5wgwrcgW01JRERMRSBET1RdCitjaGFyIFx4QTkJKCAgMzQgNjc4KSAgIyBCRiDio6wgwqkgW0NPUFlSSUdIVCBTSUdOXQorCitpbmNsdWRlIGNvbW1vbi50dGkKZGlmZiAtLWdpdCBhL1RhYmxlcy9UZXh0L3ZpLnR0YiBiL1RhYmxlcy9UZXh0L3ZpLnR0YgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43Mzg3YzJjCi0tLSAvZGV2L251bGwKKysrIGIvVGFibGVzL1RleHQvdmkudHRiCkBAIC0wLDAgKzEsMjE3IEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisjICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorIworIyBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisjCisjIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisjCisjIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyMgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorIyBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyMKKyMgV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworIworIyBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIyBCUkxUVFkgVGV4dCBUYWJsZSAtIFZpZXRuYW1lc2UKKworIyB0aGUgc3RhbmRhcmQgcmVwcmVzZW50YXRpb25zIGZvciB0aGUgTGF0aW4gY29udHJvbCBjaGFyYWN0ZXJzCitpbmNsdWRlIGN0bC1sYXRpbi50dGkKKworIyBnZW5lcmF0ZWQgYnkgdHRidGVzdDogY2hhcnNldD1pc28tODg1OS0xCitjaGFyIFx4MDAJKCAgIDQgIDc4KSAgIyAwMCDio4ggICBbTlVMTF0KKyMgTGF0aW4gY29udHJvbCBjaGFyYWN0ZXJzICAjIDAxLTFBCitjaGFyIFx4MUIJKCAyIDQgNjc4KSAgIyAxQiDio6ogICBbRVNDQVBFXQorY2hhciBceDFDCSgxMiAgNTY3OCkgICMgMUMg4qOzICAgW0lORk9STUFUSU9OIFNFUEFSQVRPUiBGT1VSXQorY2hhciBceDFECSgxMiA0NTY3OCkgICMgMUQg4qO7ICAgW0lORk9STUFUSU9OIFNFUEFSQVRPUiBUSFJFRV0KK2NoYXIgXHgxRQkoICAgNDUgNzgpICAjIDFFIOKjmCAgIFtJTkZPUk1BVElPTiBTRVBBUkFUT1IgVFdPXQorY2hhciBceDFGCSggICA0NTY3OCkgICMgMUYg4qO4ICAgW0lORk9STUFUSU9OIFNFUEFSQVRPUiBPTkVdCitjaGFyIFx4MjAJKCAgICAgICAgKSAgIyAyMCDioIAgICBbU1BBQ0VdCitjaGFyIFx4MjEJKCAyMyA1ICAgKSAgIyAyMSDioJYgISBbRVhDTEFNQVRJT04gTUFSS10KK2NoYXIgXHgyMgkoICAgICA2NzgpICAjIDIyIOKjoCAiIFtRVU9UQVRJT04gTUFSS10KK2NoYXIgXHgyMwkoICAzNDU2ICApICAjIDIzIOKgvCAjIFtOVU1CRVIgU0lHTl0KK2NoYXIgXHgyNAkoICAzNDUgICApICAjIDI0IOKgnCAkIFtET0xMQVIgU0lHTl0KK2NoYXIgXHgyNQkoIDIgNCA2ICApICAjIDI1IOKgqiAlIFtQRVJDRU5UIFNJR05dCitjaGFyIFx4MjYJKCAgMzQgNiA4KSAgIyAyNiDioqwgJiBbQU1QRVJTQU5EXQorY2hhciBceDI3CSggIDMgICAgICkgICMgMjcg4qCEICcgW0FQT1NUUk9QSEVdCitjaGFyIFx4MjgJKDEyMyA1NjcgKSAgIyAyOCDiobcgKCBbTEVGVCBQQVJFTlRIRVNJU10KK2NoYXIgXHgyOQkoIDIzNDU2NyApICAjIDI5IOKhviApIFtSSUdIVCBQQVJFTlRIRVNJU10KK2NoYXIgXHgyQQkoICAzIDUgICApICAjIDJBIOKglCAqIFtBU1RFUklTS10KK2NoYXIgXHgyQgkoICAzNCA2ICApICAjIDJCIOKgrCArIFtQTFVTIFNJR05dCitjaGFyIFx4MkMJKCAyICAgICAgKSAgIyAyQyDioIIgLCBbQ09NTUFdCitjaGFyIFx4MkQJKCAgMyAgNiAgKSAgIyAyRCDioKQgLSBbSFlQSEVOLU1JTlVTXQorY2hhciBceDJFCSggMiAgNTYgICkgICMgMkUg4qCyIC4gW0ZVTEwgU1RPUF0KK2NoYXIgXHgyRgkoICAzNCAgICApICAjIDJGIOKgjCAvIFtTT0xJRFVTXQorCitpbmNsdWRlIG51bS1uZW1kOC50dGkKKworY2hhciBceDNBCSggMiAgNSAgICkgICMgM0Eg4qCSIDogW0NPTE9OXQorY2hhciBceDNCCSggMjMgICAgICkgICMgM0Ig4qCGIDsgW1NFTUlDT0xPTl0KK2NoYXIgXHgzQwkoIDIzICA2ICApICAjIDNDIOKgpiA8IFtMRVNTLVRIQU4gU0lHTl0KK2NoYXIgXHgzRAkoIDIzIDU2ICApICAjIDNEIOKgtiA9IFtFUVVBTFMgU0lHTl0KK2NoYXIgXHgzRQkoICAzIDU2ICApICAjIDNFIOKgtCA+IFtHUkVBVEVSLVRIQU4gU0lHTl0KK2NoYXIgXHgzRgkoIDIgICA2ICApICAjIDNGIOKgoiA/IFtRVUVTVElPTiBNQVJLXQorY2hhciBceDQwCSggICA0ICA3ICkgICMgNDAg4qGIIEAgW0NPTU1FUkNJQUwgQVRdCitjaGFyIFx4NDEJKDEgICAgIDcgKSAgIyA0MSDioYEgQSBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgQV0KK2NoYXIgXHg0MgkoMTIgICAgNyApICAjIDQyIOKhgyBCIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBCXQorY2hhciBceDQzCSgxICA0ICA3ICkgICMgNDMg4qGJIEMgW0xBVElOIENBUElUQUwgTEVUVEVSIENdCitjaGFyIFx4NDQJKDEgMyA1NjcgKSAgIyA0NCDiobUgRCBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgRF0KK2NoYXIgXHg0NQkoMSAgIDUgNyApICAjIDQ1IOKhkSBFIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBFXQorY2hhciBceDQ2CSgxMiA0ICA3ICkgICMgNDYg4qGLIEYgW0xBVElOIENBUElUQUwgTEVUVEVSIEZdCitjaGFyIFx4NDcJKDEyIDQ1IDcgKSAgIyA0NyDioZsgRyBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgR10KK2NoYXIgXHg0OAkoMTIgIDUgNyApICAjIDQ4IOKhkyBIIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBIXQorY2hhciBceDQ5CSggMiA0ICA3ICkgICMgNDkg4qGKIEkgW0xBVElOIENBUElUQUwgTEVUVEVSIEldCitjaGFyIFx4NEEJKCAyIDQ1IDcgKSAgIyA0QSDioZogSiBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgSl0KK2NoYXIgXHg0QgkoMSAzICAgNyApICAjIDRCIOKhhSBLIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBLXQorY2hhciBceDRDCSgxMjMgICA3ICkgICMgNEMg4qGHIEwgW0xBVElOIENBUElUQUwgTEVUVEVSIExdCitjaGFyIFx4NEQJKDEgMzQgIDcgKSAgIyA0RCDioY0gTSBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgTV0KK2NoYXIgXHg0RQkoMSAzNDUgNyApICAjIDRFIOKhnSBOIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBOXQorY2hhciBceDRGCSgxIDMgNSA3ICkgICMgNEYg4qGVIE8gW0xBVElOIENBUElUQUwgTEVUVEVSIE9dCitjaGFyIFx4NTAJKDEyMzQgIDcgKSAgIyA1MCDioY8gUCBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgUF0KK2NoYXIgXHg1MQkoMTIzNDUgNyApICAjIDUxIOKhnyBRIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBRXQorY2hhciBceDUyCSgxMjMgNSA3ICkgICMgNTIg4qGXIFIgW0xBVElOIENBUElUQUwgTEVUVEVSIFJdCitjaGFyIFx4NTMJKCAyMzQgIDcgKSAgIyA1MyDioY4gUyBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgU10KK2NoYXIgXHg1NAkoIDIzNDUgNyApICAjIDU0IOKhniBUIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBUXQorY2hhciBceDU1CSgxIDMgIDY3ICkgICMgNTUg4qGlIFUgW0xBVElOIENBUElUQUwgTEVUVEVSIFVdCitjaGFyIFx4NTYJKDEyMyAgNjcgKSAgIyA1NiDioacgViBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgVl0KK2NoYXIgXHg1NwkoIDIgNDU2NyApICAjIDU3IOKhuiBXIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBXXQorY2hhciBceDU4CSgxIDM0IDY3ICkgICMgNTgg4qGtIFggW0xBVElOIENBUElUQUwgTEVUVEVSIFhdCitjaGFyIFx4NTkJKDEgMzQ1NjcgKSAgIyA1OSDiob0gWSBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgWV0KK2NoYXIgXHg1QQkoMSAzIDU2NyApICAjIDVBIOKhtSBaIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBaXQorY2hhciBceDVCCSgxMjMgNTYgOCkgICMgNUIg4qK3IFsgW0xFRlQgU1FVQVJFIEJSQUNLRVRdCitjaGFyIFx4NUMJKDEgICAgNiA4KSAgIyA1QyDioqEgXCBbUkVWRVJTRSBTT0xJRFVTXQorY2hhciBceDVECSggMjM0NTYgOCkgICMgNUQg4qK+IF0gW1JJR0hUIFNRVUFSRSBCUkFDS0VUXQorY2hhciBceDVFCSggICA0NSA3ICkgICMgNUUg4qGYIF4gW0NJUkNVTUZMRVggQUNDRU5UXQorY2hhciBceDVGCSggICA0NTY3ICkgICMgNUYg4qG4IF8gW0xPVyBMSU5FXQorY2hhciBceDYwCSggICA0ICAgICkgICMgNjAg4qCIIGAgW0dSQVZFIEFDQ0VOVF0KK2NoYXIgXHg2MQkoMSAgICAgICApICAjIDYxIOKggSBhIFtMQVRJTiBTTUFMTCBMRVRURVIgQV0KK2NoYXIgXHg2MgkoMTIgICAgICApICAjIDYyIOKggyBiIFtMQVRJTiBTTUFMTCBMRVRURVIgQl0KK2NoYXIgXHg2MwkoMSAgNCAgICApICAjIDYzIOKgiSBjIFtMQVRJTiBTTUFMTCBMRVRURVIgQ10KK2NoYXIgXHg2NAkoMSAzIDU2ICApICAjIDY0IOKgtSBkIFtMQVRJTiBTTUFMTCBMRVRURVIgRF0KK2NoYXIgXHg2NQkoMSAgIDUgICApICAjIDY1IOKgkSBlIFtMQVRJTiBTTUFMTCBMRVRURVIgRV0KK2NoYXIgXHg2NgkoMTIgNCAgICApICAjIDY2IOKgiyBmIFtMQVRJTiBTTUFMTCBMRVRURVIgRl0KK2NoYXIgXHg2NwkoMTIgNDUgICApICAjIDY3IOKgmyBnIFtMQVRJTiBTTUFMTCBMRVRURVIgR10KK2NoYXIgXHg2OAkoMTIgIDUgICApICAjIDY4IOKgkyBoIFtMQVRJTiBTTUFMTCBMRVRURVIgSF0KK2NoYXIgXHg2OQkoIDIgNCAgICApICAjIDY5IOKgiiBpIFtMQVRJTiBTTUFMTCBMRVRURVIgSV0KK2NoYXIgXHg2QQkoIDIgNDUgICApICAjIDZBIOKgmiBqIFtMQVRJTiBTTUFMTCBMRVRURVIgSl0KK2NoYXIgXHg2QgkoMSAzICAgICApICAjIDZCIOKghSBrIFtMQVRJTiBTTUFMTCBMRVRURVIgS10KK2NoYXIgXHg2QwkoMTIzICAgICApICAjIDZDIOKghyBsIFtMQVRJTiBTTUFMTCBMRVRURVIgTF0KK2NoYXIgXHg2RAkoMSAzNCAgICApICAjIDZEIOKgjSBtIFtMQVRJTiBTTUFMTCBMRVRURVIgTV0KK2NoYXIgXHg2RQkoMSAzNDUgICApICAjIDZFIOKgnSBuIFtMQVRJTiBTTUFMTCBMRVRURVIgTl0KK2NoYXIgXHg2RgkoMSAzIDUgICApICAjIDZGIOKglSBvIFtMQVRJTiBTTUFMTCBMRVRURVIgT10KK2NoYXIgXHg3MAkoMTIzNCAgICApICAjIDcwIOKgjyBwIFtMQVRJTiBTTUFMTCBMRVRURVIgUF0KK2NoYXIgXHg3MQkoMTIzNDUgICApICAjIDcxIOKgnyBxIFtMQVRJTiBTTUFMTCBMRVRURVIgUV0KK2NoYXIgXHg3MgkoMTIzIDUgICApICAjIDcyIOKglyByIFtMQVRJTiBTTUFMTCBMRVRURVIgUl0KK2NoYXIgXHg3MwkoIDIzNCAgICApICAjIDczIOKgjiBzIFtMQVRJTiBTTUFMTCBMRVRURVIgU10KK2NoYXIgXHg3NAkoIDIzNDUgICApICAjIDc0IOKgniB0IFtMQVRJTiBTTUFMTCBMRVRURVIgVF0KK2NoYXIgXHg3NQkoMSAzICA2ICApICAjIDc1IOKgpSB1IFtMQVRJTiBTTUFMTCBMRVRURVIgVV0KK2NoYXIgXHg3NgkoMTIzICA2ICApICAjIDc2IOKgpyB2IFtMQVRJTiBTTUFMTCBMRVRURVIgVl0KK2NoYXIgXHg3NwkoIDIgNDU2ICApICAjIDc3IOKguiB3IFtMQVRJTiBTTUFMTCBMRVRURVIgV10KK2NoYXIgXHg3OAkoMSAzNCA2ICApICAjIDc4IOKgrSB4IFtMQVRJTiBTTUFMTCBMRVRURVIgWF0KK2NoYXIgXHg3OQkoMSAzNDU2ICApICAjIDc5IOKgvSB5IFtMQVRJTiBTTUFMTCBMRVRURVIgWV0KK2NoYXIgXHg3QQkoMSAzIDU2ICApICAjIDdBIOKgtSB6IFtMQVRJTiBTTUFMTCBMRVRURVIgWl0KK2NoYXIgXHg3QgkoMTIzIDU2NzgpICAjIDdCIOKjtyB7IFtMRUZUIENVUkxZIEJSQUNLRVRdCitjaGFyIFx4N0MJKCAgIDQ1NiA4KSAgIyA3QyDiorggfCBbVkVSVElDQUwgTElORV0KK2NoYXIgXHg3RAkoIDIzNDU2NzgpICAjIDdEIOKjviB9IFtSSUdIVCBDVVJMWSBCUkFDS0VUXQorY2hhciBceDdFCSggICA0NSAgICkgICMgN0Ug4qCYIH4gW1RJTERFXQorY2hhciBceDdGCSggICA0NTYgICkgICMgN0Yg4qC4ICAgW0RFTEVURV0KK2NoYXIgXHhBMQkoMTIzNDU2NzgpICAjIEExIOKjvyDCoSBbSU5WRVJURUQgRVhDTEFNQVRJT04gTUFSS10KK2NoYXIgXHhBMgkoMTIzNDU2NzgpICAjIEEyIOKjvyDCoiBbQ0VOVCBTSUdOXQorY2hhciBceEEzCSgxMjM0NTY3OCkgICMgQTMg4qO/IMKjIFtQT1VORCBTSUdOXQorY2hhciBceEE0CSgxMjM0NTY3OCkgICMgQTQg4qO/IMKkIFtDVVJSRU5DWSBTSUdOXQorY2hhciBceEE1CSgxMjM0NTY3OCkgICMgQTUg4qO/IMKlIFtZRU4gU0lHTl0KK2NoYXIgXHhBNgkoMTIzNDU2NzgpICAjIEE2IOKjvyDCpiBbQlJPS0VOIEJBUl0KK2NoYXIgXHhBNwkoMTIzNDU2NzgpICAjIEE3IOKjvyDCpyBbU0VDVElPTiBTSUdOXQorY2hhciBceEE4CSgxMjM0NTY3OCkgICMgQTgg4qO/IMKoIFtESUFFUkVTSVNdCitjaGFyIFx4QTkJKDEgIDQgIDcgKSAgIyBBOSDioYkgwqkgW0NPUFlSSUdIVCBTSUdOXQorY2hhciBceEFBCSgxMjM0NTY3OCkgICMgQUEg4qO/IMKqIFtGRU1JTklORSBPUkRJTkFMIElORElDQVRPUl0KK2NoYXIgXHhBQgkoIDIzICA2NyApICAjIEFCIOKhpiDCqyBbTEVGVC1QT0lOVElORyBET1VCTEUgQU5HTEUgUVVPVEFUSU9OIE1BUktdCitjaGFyIFx4QUMJKDEyMzQ1Njc4KSAgIyBBQyDio78gwqwgW05PVCBTSUdOXQorY2hhciBceEFECSgxMjM0NTY3OCkgICMgQUQg4qO/IMKtIFtTT0ZUIEhZUEhFTl0KK2NoYXIgXHhBRQkoMTIzNCAgNyApICAjIEFFIOKhjyDCriBbUkVHSVNURVJFRCBTSUdOXQorY2hhciBceEFGCSgxMjM0NTY3OCkgICMgQUYg4qO/IMKvIFtNQUNST05dCitjaGFyIFx4QjAJKDEyMzQ1Njc4KSAgIyBCMCDio78gwrAgW0RFR1JFRSBTSUdOXQorY2hhciBceEIxCSgxMjM0NTY3OCkgICMgQjEg4qO/IMKxIFtQTFVTLU1JTlVTIFNJR05dCitjaGFyIFx4QjIJKDEyMzQ1Njc4KSAgIyBCMiDio78gwrIgW1NVUEVSU0NSSVBUIFRXT10KK2NoYXIgXHhCMwkoMTIzNDU2NzgpICAjIEIzIOKjvyDCsyBbU1VQRVJTQ1JJUFQgVEhSRUVdCitjaGFyIFx4QjQJKDEyMzQ1Njc4KSAgIyBCNCDio78gwrQgW0FDVVRFIEFDQ0VOVF0KK2NoYXIgXHhCNQkoMTIzNDU2NzgpICAjIEI1IOKjvyDCtSBbTUlDUk8gU0lHTl0KK2NoYXIgXHhCNgkoMTIzNDU2NzgpICAjIEI2IOKjvyDCtiBbUElMQ1JPVyBTSUdOXQorY2hhciBceEI3CSggIDMgNSAgICkgICMgQjcg4qCUIMK3IFtNSURETEUgRE9UXQorY2hhciBceEI4CSgxMjM0NTY3OCkgICMgQjgg4qO/IMK4IFtDRURJTExBXQorY2hhciBceEI5CSgxMjM0NTY3OCkgICMgQjkg4qO/IMK5IFtTVVBFUlNDUklQVCBPTkVdCitjaGFyIFx4QkEJKDEyMzQ1Njc4KSAgIyBCQSDio78gwrogW01BU0NVTElORSBPUkRJTkFMIElORElDQVRPUl0KK2NoYXIgXHhCQgkoICAzIDU2NyApICAjIEJCIOKhtCDCuyBbUklHSFQtUE9JTlRJTkcgRE9VQkxFIEFOR0xFIFFVT1RBVElPTiBNQVJLXQorY2hhciBceEJDCSgxMjM0NTY3OCkgICMgQkMg4qO/IMK8IFtWVUxHQVIgRlJBQ1RJT04gT05FIFFVQVJURVJdCitjaGFyIFx4QkQJKDEyMzQ1Njc4KSAgIyBCRCDio78gwr0gW1ZVTEdBUiBGUkFDVElPTiBPTkUgSEFMRl0KK2NoYXIgXHhCRQkoMTIzNDU2NzgpICAjIEJFIOKjvyDCviBbVlVMR0FSIEZSQUNUSU9OIFRIUkVFIFFVQVJURVJTXQorY2hhciBceEJGCSgxMjM0NTY3OCkgICMgQkYg4qO/IMK/IFtJTlZFUlRFRCBRVUVTVElPTiBNQVJLXQorY2hhciBceEMwCSggICAgNTY3ICkgICMgQzAg4qGwIMOAIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBBIFdJVEggR1JBVkVdCitjaGFyIFx4QzEJKCAgMyA1IDcgKSAgIyBDMSDioZQgw4EgW0xBVElOIENBUElUQUwgTEVUVEVSIEEgV0lUSCBBQ1VURV0KK2NoYXIgXHhDMgkoICAgICAgNyApICAjIEMyIOKhgCDDgiBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgQSBXSVRIIENJUkNVTUZMRVhdCitjaGFyIFx4QzMJKCAgMyAgNjcgKSAgIyBDMyDioaQgw4MgW0xBVElOIENBUElUQUwgTEVUVEVSIEEgV0lUSCBUSUxERV0KK2NoYXIgXHhDNAkoICAgICA2NyApICAjIEM0IOKhoCDDhCBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgQSBXSVRIIERJQUVSRVNJU10KK2NoYXIgXHhDNQkoIDIgICA2NyApICAjIEM1IOKhoiDDhSBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgQSBXSVRIIFJJTkcgQUJPVkVdCitjaGFyIFx4QzYJKCAyICAgNjcgKSAgIyBDNiDioaIgw4YgW0xBVElOIENBUElUQUwgTEVUVEVSIEFFXQorY2hhciBceEM3CSgxMjM0IDY3ICkgICMgQzcg4qGvIMOHIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBDIFdJVEggQ0VESUxMQV0KK2NoYXIgXHhDOAkoICAgIDU2IDgpICAjIEM4IOKisCDDiCBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgRSBXSVRIIEdSQVZFXQorY2hhciBceEM5CSggIDMgNSAgOCkgICMgQzkg4qKUIMOJIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBFIFdJVEggQUNVVEVdCitjaGFyIFx4Q0EJKCAgICAgICA4KSAgIyBDQSDiooAgw4ogW0xBVElOIENBUElUQUwgTEVUVEVSIEUgV0lUSCBDSVJDVU1GTEVYXQorY2hhciBceENCCSggICAgIDYgOCkgICMgQ0Ig4qKgIMOLIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBFIFdJVEggRElBRVJFU0lTXQorY2hhciBceENDCSggICAgNTY3ICkgICMgQ0Mg4qGwIMOMIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBJIFdJVEggR1JBVkVdCitjaGFyIFx4Q0QJKCAgMyA1IDcgKSAgIyBDRCDioZQgw40gW0xBVElOIENBUElUQUwgTEVUVEVSIEkgV0lUSCBBQ1VURV0KK2NoYXIgXHhDRQkoMTIzNDU2NyApICAjIENFIOKhvyDDjiBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgSSBXSVRIIENJUkNVTUZMRVhdCitjaGFyIFx4Q0YJKCAgICAgNiAgKSAgIyBDRiDioKAgw48gW0xBVElOIENBUElUQUwgTEVUVEVSIEkgV0lUSCBESUFFUkVTSVNdCitjaGFyIFx4RDAJKDEyMzQ1Njc4KSAgIyBEMCDio78gw5AgW0xBVElOIENBUElUQUwgTEVUVEVSIEVUSF0KK2NoYXIgXHhEMQkoMSAgNDUgNyApICAjIEQxIOKhmSDDkSBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgTiBXSVRIIFRJTERFXQorY2hhciBceEQyCSggICAgIDY3ICkgICMgRDIg4qGgIMOSIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBPIFdJVEggR1JBVkVdCitjaGFyIFx4RDMJKCAgMyAgNjcgKSAgIyBEMyDioaQgw5MgW0xBVElOIENBUElUQUwgTEVUVEVSIE8gV0lUSCBBQ1VURV0KK2NoYXIgXHhENAkoIDIgNCA2NyApICAjIEQ0IOKhqiDDlCBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgTyBXSVRIIENJUkNVTUZMRVhdCitjaGFyIFx4RDUJKCAgMyAgNiAgKSAgIyBENSDioKQgw5UgW0xBVElOIENBUElUQUwgTEVUVEVSIE8gV0lUSCBUSUxERV0KK2NoYXIgXHhENgkoMTIgIDU2NyApICAjIEQ2IOKhsyDDliBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgTyBXSVRIIERJQUVSRVNJU10KK2NoYXIgXHhENwkoICAzIDUgICApICAjIEQ3IOKglCDDlyBbTVVMVElQTElDQVRJT04gU0lHTl0KK2NoYXIgXHhEOAkoICAgIDU2ICApICAjIEQ4IOKgsCDDmCBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgTyBXSVRIIFNUUk9LRV0KK2NoYXIgXHhEOQkoICAzIDUgICApICAjIEQ5IOKglCDDmSBbTEFUSU4gQ0FQSVRBTCBMRVRURVIgVSBXSVRIIEdSQVZFXQorY2hhciBceERBCSggMiAgIDYgOCkgICMgREEg4qKiIMOaIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBVIFdJVEggQUNVVEVdCitjaGFyIFx4REIJKCAyICAgNiAgKSAgIyBEQiDioKIgw5sgW0xBVElOIENBUElUQUwgTEVUVEVSIFUgV0lUSCBDSVJDVU1GTEVYXQorY2hhciBceERDCSggIDMgIDYgOCkgICMgREMg4qKkIMOcIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBVIFdJVEggRElBRVJFU0lTXQorY2hhciBceERECSgxIDM0NTY3ICkgICMgREQg4qG9IMOdIFtMQVRJTiBDQVBJVEFMIExFVFRFUiBZIFdJVEggQUNVVEVdCitjaGFyIFx4REUJKDEyMzQ1Njc4KSAgIyBERSDio78gw54gW0xBVElOIENBUElUQUwgTEVUVEVSIFRIT1JOXQorY2hhciBceERGCSggMjM0ICAgICkgICMgREYg4qCOIMOfIFtMQVRJTiBTTUFMTCBMRVRURVIgU0hBUlAgU10KK2NoYXIgXHhFMAkoICAgIDU2NyApICAjIEUwIOKhsCDDoCBbTEFUSU4gU01BTEwgTEVUVEVSIEEgV0lUSCBHUkFWRV0KK2NoYXIgXHhFMQkoICAzIDUgNyApICAjIEUxIOKhlCDDoSBbTEFUSU4gU01BTEwgTEVUVEVSIEEgV0lUSCBBQ1VURV0KK2NoYXIgXHhFMgkoICAgICAgNyApICAjIEUyIOKhgCDDoiBbTEFUSU4gU01BTEwgTEVUVEVSIEEgV0lUSCBDSVJDVU1GTEVYXQorY2hhciBceEUzCSggIDMgIDY3ICkgICMgRTMg4qGkIMOjIFtMQVRJTiBTTUFMTCBMRVRURVIgQSBXSVRIIFRJTERFXQorY2hhciBceEU0CSggICAgIDY3ICkgICMgRTQg4qGgIMOkIFtMQVRJTiBTTUFMTCBMRVRURVIgQSBXSVRIIERJQUVSRVNJU10KK2NoYXIgXHhFNQkoIDIgICA2NyApICAjIEU1IOKhoiDDpSBbTEFUSU4gU01BTEwgTEVUVEVSIEEgV0lUSCBSSU5HIEFCT1ZFXQorY2hhciBceEU2CSggMiAgIDYgICkgICMgRTYg4qCiIMOmIFtMQVRJTiBTTUFMTCBMRVRURVIgQUVdCitjaGFyIFx4RTcJKDEyMzQgNiAgKSAgIyBFNyDioK8gw6cgW0xBVElOIFNNQUxMIExFVFRFUiBDIFdJVEggQ0VESUxMQV0KK2NoYXIgXHhFOAkoICAgIDU2IDgpICAjIEU4IOKisCDDqCBbTEFUSU4gU01BTEwgTEVUVEVSIEUgV0lUSCBHUkFWRV0KK2NoYXIgXHhFOQkoICAzIDUgIDgpICAjIEU5IOKilCDDqSBbTEFUSU4gU01BTEwgTEVUVEVSIEUgV0lUSCBBQ1VURV0KK2NoYXIgXHhFQQkoICAgICAgIDgpICAjIEVBIOKigCDDqiBbTEFUSU4gU01BTEwgTEVUVEVSIEUgV0lUSCBDSVJDVU1GTEVYXQorY2hhciBceEVCCSggICAgIDYgOCkgICMgRUIg4qKgIMOrIFtMQVRJTiBTTUFMTCBMRVRURVIgRSBXSVRIIERJQUVSRVNJU10KK2NoYXIgXHhFQwkoICAgIDU2ICApICAjIEVDIOKgsCDDrCBbTEFUSU4gU01BTEwgTEVUVEVSIEkgV0lUSCBHUkFWRV0KK2NoYXIgXHhFRAkoICAzIDUgICApICAjIEVEIOKglCDDrSBbTEFUSU4gU01BTEwgTEVUVEVSIEkgV0lUSCBBQ1VURV0KK2NoYXIgXHhFRQkoMTIzNDU2ICApICAjIEVFIOKgvyDDriBbTEFUSU4gU01BTEwgTEVUVEVSIEkgV0lUSCBDSVJDVU1GTEVYXQorY2hhciBceEVGCSggICAgIDYgICkgICMgRUYg4qCgIMOvIFtMQVRJTiBTTUFMTCBMRVRURVIgSSBXSVRIIERJQUVSRVNJU10KK2NoYXIgXHhGMAkoMTIzNDU2NzgpICAjIEYwIOKjvyDDsCBbTEFUSU4gU01BTEwgTEVUVEVSIEVUSF0KK2NoYXIgXHhGMQkoMSAgNDUgICApICAjIEYxIOKgmSDDsSBbTEFUSU4gU01BTEwgTEVUVEVSIE4gV0lUSCBUSUxERV0KK2NoYXIgXHhGMgkoICAgICA2ICApICAjIEYyIOKgoCDDsiBbTEFUSU4gU01BTEwgTEVUVEVSIE8gV0lUSCBHUkFWRV0KK2NoYXIgXHhGMwkoICAzICA2ICApICAjIEYzIOKgpCDDsyBbTEFUSU4gU01BTEwgTEVUVEVSIE8gV0lUSCBBQ1VURV0KK2NoYXIgXHhGNAkoIDIgNCA2ICApICAjIEY0IOKgqiDDtCBbTEFUSU4gU01BTEwgTEVUVEVSIE8gV0lUSCBDSVJDVU1GTEVYXQorY2hhciBceEY1CSggIDMgIDYgICkgICMgRjUg4qCkIMO1IFtMQVRJTiBTTUFMTCBMRVRURVIgTyBXSVRIIFRJTERFXQorY2hhciBceEY2CSgxMiAgNTYgICkgICMgRjYg4qCzIMO2IFtMQVRJTiBTTUFMTCBMRVRURVIgTyBXSVRIIERJQUVSRVNJU10KK2NoYXIgXHhGNwkoICAzNCAgICApICAjIEY3IOKgjCDDtyBbRElWSVNJT04gU0lHTl0KK2NoYXIgXHhGOAkoICAgIDU2ICApICAjIEY4IOKgsCDDuCBbTEFUSU4gU01BTEwgTEVUVEVSIE8gV0lUSCBTVFJPS0VdCitjaGFyIFx4RjkJKCAgMyA1ICAgKSAgIyBGOSDioJQgw7kgW0xBVElOIFNNQUxMIExFVFRFUiBVIFdJVEggR1JBVkVdCitjaGFyIFx4RkEJKCAyICAgNiA4KSAgIyBGQSDioqIgw7ogW0xBVElOIFNNQUxMIExFVFRFUiBVIFdJVEggQUNVVEVdCitjaGFyIFx4RkIJKCAyICAgNiAgKSAgIyBGQiDioKIgw7sgW0xBVElOIFNNQUxMIExFVFRFUiBVIFdJVEggQ0lSQ1VNRkxFWF0KK2NoYXIgXHhGQwkoICAzICA2IDgpICAjIEZDIOKipCDDvCBbTEFUSU4gU01BTEwgTEVUVEVSIFUgV0lUSCBESUFFUkVTSVNdCitjaGFyIFx4RkQJKDEgMzQ1NiAgKSAgIyBGRCDioL0gw70gW0xBVElOIFNNQUxMIExFVFRFUiBZIFdJVEggQUNVVEVdCitjaGFyIFx4RkUJKDEyMzQ1Njc4KSAgIyBGRSDio78gw74gW0xBVElOIFNNQUxMIExFVFRFUiBUSE9STl0KK2NoYXIgXHhGRgkoMSAzNDU2ICApICAjIEZGIOKgvSDDvyBbTEFUSU4gU01BTEwgTEVUVEVSIFkgV0lUSCBESUFFUkVTSVNdCisKK2luY2x1ZGUgY29tbW9uLnR0aQpkaWZmIC0tZ2l0IGEvVGFibGVzL1RleHQvd2luLTEyNTIudHRpIGIvVGFibGVzL1RleHQvd2luLTEyNTIudHRpCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU1MjI3ZjkKLS0tIC9kZXYvbnVsbAorKysgYi9UYWJsZXMvVGV4dC93aW4tMTI1Mi50dGkKQEAgLTAsMCArMSwxMjAgQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyMgICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisjCisjIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyMKKyMgQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjIFRoaXMgQlJMVFRZIHRleHQgc3VidGFibGUgZGVmaW5lcyBhbGlhc2VzIHRvL2Zyb20gV2luZG93cy0xMjUyIGNoYXJhY3RlcnMuCisjIERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4KKworIyMjIyMjIyMjIyMjIyMjIworIyBJbnRyb2R1Y3Rpb24gIworIyMjIyMjIyMjIyMjIyMjIworCisjIFdpbmRvd3MtMTI1MiBkZWZpbmVzIGNoYXJhY3RlcnMgd2l0aGluIHRoZSBJU08tODg1OS0xIEMxIHJhbmdlIChceDgwLVx4OUYpLgorIyBTaW5jZSBCUkxUVFkgdXNlcyBVbmljb2RlIGNoYXJhY3RlcnMgaW50ZXJuYWxseSwgdGhlIHRyYWRpdGlvbmFsIHVzZSBvZgorIyBXaW5kb3dzLTEyNTIgY2hhcmFjdGVycyBoYXMgY2F1c2VkIGNvbmZ1c2lvbiB3aXRoaW4gYXQgbGVhc3QgdHdvIGFyZWFzOgorIworIyAqICBTb21lIGJyYWlsbGUgc3RhbmRhcmRzIGhhdmUgYmVlbiBkZXZlbG9wZWQgYXJvdW5kLCBhbmQsIHRoZXJlZm9yZSwgdGhlaXIKKyMgICAgdGFibGVzIGhhdmUgYmVlbiB3cml0dGVuIHVzaW5nLCBXaW5kb3dzLTEyNTIgY2hhcmFjdGVyIHZhbHVlcy4KKyMKKyMgKiAgU29tZSBwcm9ncmFtcyB3cml0ZSBXaW5kb3dzLTEyNTIgY2hhcmFjdGVycyB0byB0aGUgc2NyZWVuLgorIworIyBUaGlzIHRleHQgc3VidGFibGUgc2Vla3MgdG8gcmVzb2x2ZSB0aGVzZSBpc3N1ZXMgKHNlZSBpdHMgc2VjdGlvbnMgYmVsb3cpOgorCisjIFdpbmRvd3MtMTI1MiBkb2Vzbid0IGRlZmluZSBmaXZlIG9mIHRoZSAzMiBJU08tODg1OS0xIEMxIGNoYXJhY3RlcnM6CisjCisjICAgIFx4ODEsIFx4OEQsIFx4OEYsIFx4OTAsIFx4OUQKKyMKKyMgV2lraXBlZGlhIHNheXM6CisjIAorIyAgICDigJxBY2NvcmRpbmcgdG8gdGhlIGluZm9ybWF0aW9uIG9uIE1pY3Jvc29mdCdzIGFuZCB0aGUgVW5pY29kZSBDb25zb3J0aXVtJ3MKKyMgICAgd2Vic2l0ZXMsIHBvc2l0aW9ucyA4MSwgOEQsIDhGLCA5MCwgYW5kIDlEIGFyZSB1bnVzZWQ7IGhvd2V2ZXIsIHRoZQorIyAgICBXaW5kb3dzIEFQSSBNdWx0aUJ5dGVUb1dpZGVDaGFyIG1hcHMgdGhlc2UgdG8gdGhlIGNvcnJlc3BvbmRpbmcgQzEgY29udHJvbAorIyAgICBjb2Rlcy4gVGhlICJiZXN0IGZpdCIgbWFwcGluZyBkb2N1bWVudHMgdGhpcyBiZWhhdmlvciwgdG9vLuKAnQorCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEJyYWlsbGUgVGFibGVzIFdyaXR0ZW4gVXNpbmcgV2luZG93cy0xMjUyIENoYXJhY3RlciBWYWx1ZXMgIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIyBBbGlhcyBlYWNoIHJlbGV2YW50IFVuaWNvZGUgY2hhcmFjdGVyIHRvIGl0cyBjb3JyZXNwb25kaW5nIFdpbmRvd3MtMTI1MgorIyB2YWx1ZSBzbyB0aGF0IGl0cyBicmFpbGxlIHJlcHJlc2VudGF0aW9uIHdpbGwgYmUgZm91bmQuCisKK2lmR2x5cGgJXHg4MAlhbGlhcwlcdTIwQUMJXHg4MAkjIOKCrCBbRVVSTyBTSUdOXQoraWZHbHlwaAlceDgyCWFsaWFzCVx1MjAxQQlceDgyCSMg4oCaIFtTSU5HTEUgTE9XLTkgUVVPVEFUSU9OIE1BUktdCitpZkdseXBoCVx4ODMJYWxpYXMJXHUwMTkyCVx4ODMJIyDGkiBbTEFUSU4gU01BTEwgTEVUVEVSIEYgV0lUSCBIT09LXQoraWZHbHlwaAlceDg0CWFsaWFzCVx1MjAxRQlceDg0CSMg4oCeIFtET1VCTEUgTE9XLTkgUVVPVEFUSU9OIE1BUktdCitpZkdseXBoCVx4ODUJYWxpYXMJXHUyMDI2CVx4ODUJIyDigKYgW0hPUklaT05UQUwgRUxMSVBTSVNdCitpZkdseXBoCVx4ODYJYWxpYXMJXHUyMDIwCVx4ODYJIyDigKAgW0RBR0dFUl0KK2lmR2x5cGgJXHg4NwlhbGlhcwlcdTIwMjEJXHg4NwkjIOKAoSBbRE9VQkxFIERBR0dFUl0KK2lmR2x5cGgJXHg4OAlhbGlhcwlcdTAyQzYJXHg4OAkjIMuGIFtNT0RJRklFUiBMRVRURVIgQ0lSQ1VNRkxFWCBBQ0NFTlRdCitpZkdseXBoCVx4ODkJYWxpYXMJXHUyMDMwCVx4ODkJIyDigLAgW1BFUiBNSUxMRSBTSUdOXQoraWZHbHlwaAlceDhBCWFsaWFzCVx1MDE2MAlceDhBCSMgxaAgW0xBVElOIENBUElUQUwgTEVUVEVSIFMgV0lUSCBDQVJPTl0KK2lmR2x5cGgJXHg4QglhbGlhcwlcdTIwMzkJXHg4QgkjIOKAuSBbU0lOR0xFIExFRlQtUE9JTlRJTkcgQU5HTEUgUVVPVEFUSU9OIE1BUktdCitpZkdseXBoCVx4OEMJYWxpYXMJXHUwMTUyCVx4OEMJIyDFkiBbTEFUSU4gQ0FQSVRBTCBMSUdBVFVSRSBPRV0KK2lmR2x5cGgJXHg4RQlhbGlhcwlcdTAxN0QJXHg4RQkjIMW9IFtMQVRJTiBDQVBJVEFMIExFVFRFUiBaIFdJVEggQ0FST05dCitpZkdseXBoCVx4OTEJYWxpYXMJXHUyMDE4CVx4OTEJIyDigJggW0xFRlQgU0lOR0xFIFFVT1RBVElPTiBNQVJLXQoraWZHbHlwaAlceDkyCWFsaWFzCVx1MjAxOQlceDkyCSMg4oCZIFtSSUdIVCBTSU5HTEUgUVVPVEFUSU9OIE1BUktdCitpZkdseXBoCVx4OTMJYWxpYXMJXHUyMDFDCVx4OTMJIyDigJwgW0xFRlQgRE9VQkxFIFFVT1RBVElPTiBNQVJLXQoraWZHbHlwaAlceDk0CWFsaWFzCVx1MjAxRAlceDk0CSMg4oCdIFtSSUdIVCBET1VCTEUgUVVPVEFUSU9OIE1BUktdCitpZkdseXBoCVx4OTUJYWxpYXMJXHUyMDIyCVx4OTUJIyDigKIgW0JVTExFVF0KK2lmR2x5cGgJXHg5NglhbGlhcwlcdTIwMTMJXHg5NgkjIOKAkyBbRU4gREFTSF0KK2lmR2x5cGgJXHg5NwlhbGlhcwlcdTIwMTQJXHg5NwkjIOKAlCBbRU0gREFTSF0KK2lmR2x5cGgJXHg5OAlhbGlhcwlcdTAyREMJXHg5OAkjIMucIFtTTUFMTCBUSUxERV0KK2lmR2x5cGgJXHg5OQlhbGlhcwlcdTIxMjIJXHg5OQkjIOKEoiBbVFJBREUgTUFSSyBTSUdOXQoraWZHbHlwaAlceDlBCWFsaWFzCVx1MDE2MQlceDlBCSMgxaEgW0xBVElOIFNNQUxMIExFVFRFUiBTIFdJVEggQ0FST05dCitpZkdseXBoCVx4OUIJYWxpYXMJXHUyMDNBCVx4OUIJIyDigLogW1NJTkdMRSBSSUdIVC1QT0lOVElORyBBTkdMRSBRVU9UQVRJT04gTUFSS10KK2lmR2x5cGgJXHg5QwlhbGlhcwlcdTAxNTMJXHg5QwkjIMWTIFtMQVRJTiBTTUFMTCBMSUdBVFVSRSBPRV0KK2lmR2x5cGgJXHg5RQlhbGlhcwlcdTAxN0UJXHg5RQkjIMW+IFtMQVRJTiBTTUFMTCBMRVRURVIgWiBXSVRIIENBUk9OXQoraWZHbHlwaAlceDlGCWFsaWFzCVx1MDE3OAlceDlGCSMgxbggW0xBVElOIENBUElUQUwgTEVUVEVSIFkgV0lUSCBESUFFUkVTSVNdCisKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBXaW5kb3dzLTEyNTIgY2hhcmFjdGVycyBXcml0dGVuIHRvIHRoZSBTY3JlZW4gIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjIEFsaWFzIHRoZSBXaW5kb3dzLTEyNTIgY2hhcmFjdGVycyB0byB0aGVpciBjb3JyZXNwb25kaW5nIFVuaWNvZGUgdmFsdWVzIHNvCisjIHRoYXQgdGhlaXIgYnJhaWxsZSByZXByZXNlbnRhdGlvbnMgY2FuIGJlIGZvdW5kLgorCithbGlhcwlceDgwCVx1MjBBQwkjIOKCrCBbRVVSTyBTSUdOXQorYWxpYXMJXHg4MglcdTIwMUEJIyDigJogW1NJTkdMRSBMT1ctOSBRVU9UQVRJT04gTUFSS10KK2FsaWFzCVx4ODMJXHUwMTkyCSMgxpIgW0xBVElOIFNNQUxMIExFVFRFUiBGIFdJVEggSE9PS10KK2FsaWFzCVx4ODQJXHUyMDFFCSMg4oCeIFtET1VCTEUgTE9XLTkgUVVPVEFUSU9OIE1BUktdCithbGlhcwlceDg1CVx1MjAyNgkjIOKApiBbSE9SSVpPTlRBTCBFTExJUFNJU10KK2FsaWFzCVx4ODYJXHUyMDIwCSMg4oCgIFtEQUdHRVJdCithbGlhcwlceDg3CVx1MjAyMQkjIOKAoSBbRE9VQkxFIERBR0dFUl0KK2FsaWFzCVx4ODgJXHUwMkM2CSMgy4YgW01PRElGSUVSIExFVFRFUiBDSVJDVU1GTEVYIEFDQ0VOVF0KK2FsaWFzCVx4ODkJXHUyMDMwCSMg4oCwIFtQRVIgTUlMTEUgU0lHTl0KK2FsaWFzCVx4OEEJXHUwMTYwCSMgxaAgW0xBVElOIENBUElUQUwgTEVUVEVSIFMgV0lUSCBDQVJPTl0KK2FsaWFzCVx4OEIJXHUyMDM5CSMg4oC5IFtTSU5HTEUgTEVGVC1QT0lOVElORyBBTkdMRSBRVU9UQVRJT04gTUFSS10KK2FsaWFzCVx4OEMJXHUwMTUyCSMgxZIgW0xBVElOIENBUElUQUwgTElHQVRVUkUgT0VdCithbGlhcwlceDhFCVx1MDE3RAkjIMW9IFtMQVRJTiBDQVBJVEFMIExFVFRFUiBaIFdJVEggQ0FST05dCithbGlhcwlceDkxCVx1MjAxOAkjIOKAmCBbTEVGVCBTSU5HTEUgUVVPVEFUSU9OIE1BUktdCithbGlhcwlceDkyCVx1MjAxOQkjIOKAmSBbUklHSFQgU0lOR0xFIFFVT1RBVElPTiBNQVJLXQorYWxpYXMJXHg5MwlcdTIwMUMJIyDigJwgW0xFRlQgRE9VQkxFIFFVT1RBVElPTiBNQVJLXQorYWxpYXMJXHg5NAlcdTIwMUQJIyDigJ0gW1JJR0hUIERPVUJMRSBRVU9UQVRJT04gTUFSS10KK2FsaWFzCVx4OTUJXHUyMDIyCSMg4oCiIFtCVUxMRVRdCithbGlhcwlceDk2CVx1MjAxMwkjIOKAkyBbRU4gREFTSF0KK2FsaWFzCVx4OTcJXHUyMDE0CSMg4oCUIFtFTSBEQVNIXQorYWxpYXMJXHg5OAlcdTAyREMJIyDLnCBbU01BTEwgVElMREVdCithbGlhcwlceDk5CVx1MjEyMgkjIOKEoiBbVFJBREUgTUFSSyBTSUdOXQorYWxpYXMJXHg5QQlcdTAxNjEJIyDFoSBbTEFUSU4gU01BTEwgTEVUVEVSIFMgV0lUSCBDQVJPTl0KK2FsaWFzCVx4OUIJXHUyMDNBCSMg4oC6IFtTSU5HTEUgUklHSFQtUE9JTlRJTkcgQU5HTEUgUVVPVEFUSU9OIE1BUktdCithbGlhcwlceDlDCVx1MDE1MwkjIMWTIFtMQVRJTiBTTUFMTCBMSUdBVFVSRSBPRV0KK2FsaWFzCVx4OUUJXHUwMTdFCSMgxb4gW0xBVElOIFNNQUxMIExFVFRFUiBaIFdJVEggQ0FST05dCithbGlhcwlceDlGCVx1MDE3OAkjIMW4IFtMQVRJTiBDQVBJVEFMIExFVFRFUiBZIFdJVEggRElBRVJFU0lTXQorCisKZGlmZiAtLWdpdCBhL1Rvb2xzL2JyYWlsbGUudGNsIGIvVG9vbHMvYnJhaWxsZS50Y2wKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmJkYmFjNgotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL2JyYWlsbGUudGNsCkBAIC0wLDAgKzEsMjEwIEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisjICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorIworIyBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisjCisjIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisjCisjIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyMgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorIyBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyMKKyMgV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworIworIyBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworc2V0IGJybEVycm9yQ2F0ZWdvcnkgYnJhaWxsZQorc2V0IGJybFVuaWNvZGVSb3cgW2V4cHIgezBYMjgwMCArIDB9XQorCitzZXQgYnJmRG90c1RhYmxlIHsKKyAgIDAKKyAgIDIzNDYKKyAgIDUKKyAgIDM0NTYKKyAgIDEyNDYKKyAgIDE0NgorICAgMTIzNDYKKyAgIDMKKyAgIDEyMzU2CisgICAyMzQ1NgorICAgMTYKKyAgIDM0NgorICAgNgorICAgMzYKKyAgIDQ2CisgICAzNAorICAgMzU2CisgICAyCisgICAyMworICAgMjUKKyAgIDI1NgorICAgMjYKKyAgIDIzNQorICAgMjM1NgorICAgMjM2CisgICAzNQorICAgMTU2CisgICA1NgorICAgMTI2CisgICAxMjM0NTYKKyAgIDM0NQorICAgMTQ1NgorICAgNAorICAgMQorICAgMTIKKyAgIDE0CisgICAxNDUKKyAgIDE1CisgICAxMjQKKyAgIDEyNDUKKyAgIDEyNQorICAgMjQKKyAgIDI0NQorICAgMTMKKyAgIDEyMworICAgMTM0CisgICAxMzQ1CisgICAxMzUKKyAgIDEyMzQKKyAgIDEyMzQ1CisgICAxMjM1CisgICAyMzQKKyAgIDIzNDUKKyAgIDEzNgorICAgMTIzNgorICAgMjQ1NgorICAgMTM0NgorICAgMTM0NTYKKyAgIDEzNTYKKyAgIDI0NgorICAgMTI1NgorICAgMTI0NTYKKyAgIDQ1CisgICA0NTYKK30KKworcHJvYyBicmxUaHJvd0Vycm9yIHtjb2RlIHByb2JsZW0ge3ZhbHVlICIifX0geworICAgc2V0IG1lc3NhZ2UgJHByb2JsZW0KKworICAgaWYge1tzdHJpbmcgbGVuZ3RoICR2YWx1ZV0gPiAwfSB7CisgICAgICBhcHBlbmQgbWVzc2FnZSAiOiAkdmFsdWUiCisgICB9CisKKyAgIHJldHVybiAtY29kZSBlcnJvciAtZXJyb3Jjb2RlIFtsaXN0ICQ6OmJybEVycm9yQ2F0ZWdvcnkgJGNvZGUgJHByb2JsZW0gJHZhbHVlXSAkbWVzc2FnZQorfQorCitwcm9jIGJybEhleGFkZWNpbWFsVG9EZWNpbWFsIHtoZXhhZGVjaW1hbH0geworICAgaWYgeyFbc3RyaW5nIGlzIHhkaWdpdCAtc3RyaWN0ICRoZXhhZGVjaW1hbF19IHsKKyAgICAgIGJybFRocm93RXJyb3Igbm90LWhleCAibm90IGEgaGV4YWRlY2ltYWwgbnVtYmVyIiAkaGV4YWRlY2ltYWwKKyAgIH0KKworICAgc2NhbiAkaGV4YWRlY2ltYWwgIiV4IiBkZWNpbWFsCisgICByZXR1cm4gJGRlY2ltYWwKK30KKworcHJvYyBicmxDaGFyYWN0ZXJUb0NvZGVwb2ludCB7Y2hhcmFjdGVyfSB7CisgICBpZiB7W3N0cmluZyBsZW5ndGggJGNoYXJhY3Rlcl0gIT0gMX0geworICAgICAgYnJsVGhyb3dFcnJvciBub3QtY2hhciAibm90IGEgc2luZ2xlIGNoYXJhY3RlciIgJGNoYXJhY3RlcgorICAgfQorCisgICBzY2FuICRjaGFyYWN0ZXIgIiVjIiBjb2RlcG9pbnQKKyAgIHJldHVybiAkY29kZXBvaW50Cit9CisKK3Byb2MgYnJsQ29kZXBvaW50VG9DaGFyYWN0ZXIge2NvZGVwb2ludH0geworICAgaWYgeyFbc3RyaW5nIGlzIGludGVnZXIgLXN0cmljdCAkY29kZXBvaW50XX0geworICAgICAgYnJsVGhyb3dFcnJvciBub3QtaW50ICJub3QgYW4gaW50ZWdlciIgJGNvZGVwb2ludAorICAgfQorCisgICByZXR1cm4gW2Zvcm1hdCAiJWMiICIkY29kZXBvaW50Il0KK30KKworcHJvYyBicmxDaGFyYWN0ZXJUb0RvdHMge2NoYXJhY3Rlcn0geworICAgaWYge1tzdHJpbmcgbGVuZ3RoICRjaGFyYWN0ZXJdID09IDF9IHsKKyAgICAgIGdsb2JhbCBicmxVbmljb2RlUm93CisKKyAgICAgIHNldCBjb2RlcG9pbnQgW2JybENoYXJhY3RlclRvQ29kZXBvaW50ICRjaGFyYWN0ZXJdCisgICAgICBzZXQgYml0cyBbZXhwciB7JGNvZGVwb2ludCAmIDBYRkZ9XQorCisgICAgICBpZiB7KCRjb2RlcG9pbnQgLSAkYml0cykgPT0gJGJybFVuaWNvZGVSb3d9IHsKKyAgICAgICAgIHNldCBkb3RzICIiCisgICAgICAgICBzZXQgZG90IDEKKyAgICAgICAgIHNldCBiaXQgMFgwMQorCisgICAgICAgICB3aGlsZSB7JGJpdHMgIT0gMH0geworICAgICAgICAgICAgaWYgeygkYml0cyAmICRiaXQpICE9IDB9IHsKKyAgICAgICAgICAgICAgIHNldCBiaXRzIFtleHByIHskYml0cyAmIH4kYml0fV0KKyAgICAgICAgICAgICAgIGFwcGVuZCBkb3RzICRkb3QKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgc2V0IGJpdCBbZXhwciB7JGJpdCA8PCAxfV0KKyAgICAgICAgICAgIGluY3IgZG90CisgICAgICAgICB9CisKKyAgICAgICAgIGlmIHtbc3RyaW5nIGxlbmd0aCAkZG90c10gPiAwfSB7CisgICAgICAgICAgICByZXR1cm4gJGRvdHMKKyAgICAgICAgIH0KKworICAgICAgICAgcmV0dXJuICIwIgorICAgICAgfQorCisgICAgICBnbG9iYWwgYnJmRG90c1RhYmxlCisgICAgICBzZXQgaW5kZXggW2V4cHIgeyRjb2RlcG9pbnQgLSAwWDIwfV0KKworICAgICAgaWYgeygkY29kZXBvaW50ID49IDBYNjApICYmICgkY29kZXBvaW50IDw9IDBYN0UpfSB7CisgICAgICAgICBpbmNyIGluZGV4IC0wWDIwCisgICAgICB9CisKKyAgICAgIGlmIHsoJGluZGV4ID49IDApICYmICgkaW5kZXggPCBbbGxlbmd0aCAkYnJmRG90c1RhYmxlXSl9IHsKKyAgICAgICAgIHJldHVybiBbbGluZGV4ICRicmZEb3RzVGFibGUgJGluZGV4XQorICAgICAgfQorICAgfQorCisgICBicmxUaHJvd0Vycm9yIG5vdC1icmwgIm5vdCBhIGJyYWlsbGUgY2hhcmFjdGVyIiAkY2hhcmFjdGVyCit9CisKK3Byb2MgYnJsRG90c1RvQ2hhcmFjdGVyIHtkb3RzfSB7CisgICBpZiB7W3N0cmluZyBsZW5ndGggJGRvdHNdID09IDB9IHsKKyAgICAgIGJybFRocm93RXJyb3Igbm8tZG90cyAibm8gZG90IG51bWJlcnMiCisgICB9CisKKyAgIGdsb2JhbCBicmxVbmljb2RlUm93CisgICBzZXQgY29kZXBvaW50ICRicmxVbmljb2RlUm93CisKKyAgIGlmIHshW3N0cmluZyBlcXVhbCAkZG90cyAiMCJdfSB7CisgICAgICBmb3JlYWNoIGRvdCBbc3BsaXQgJGRvdHMgIiJdIHsKKyAgICAgICAgIGlmIHtbc3RyaW5nIGZpcnN0ICRkb3QgIjEyMzQ1Njc4Il0gPT0gLTF9IHsKKyAgICAgICAgICAgIGJybFRocm93RXJyb3Igbm90LWRvdCAiTm90IGEgZG90IG51bWJlciIgJGRvdAorICAgICAgICAgfQorCisgICAgICAgICBzZXQgYml0IFtleHByIHsxIDw8ICgkZG90IC0gMSl9XQorCisgICAgICAgICBpZiB7KCRjb2RlcG9pbnQgJiAkYml0KSAhPSAwfSB7CisgICAgICAgICAgICBicmxUaHJvd0Vycm9yIGR1cC1kb3QgImR1cGxpY2F0ZSBkb3QgbnVtYmVyIiAkZG90CisgICAgICAgICB9CisKKyAgICAgICAgIGluY3IgY29kZXBvaW50ICRiaXQKKyAgICAgIH0KKyAgIH0KKworICAgcmV0dXJuIFticmxDb2RlcG9pbnRUb0NoYXJhY3RlciAkY29kZXBvaW50XQorfQorCitwcm9jIGJybEZvcm1hdENvZGVwb2ludCB7Y29kZXBvaW50fSB7CisgICBzZXQgZGlnaXRzIFtmb3JtYXQgIiVYIiAkY29kZXBvaW50XQorICAgc2V0IGxlbmd0aCBbc3RyaW5nIGxlbmd0aCAkZGlnaXRzXQorICAgc2V0IGxldHRlciAieiIKKworICAgZm9yZWFjaCB7Y291bnQgbGV0dGVyfSB7MiB4IDQgdSA4IFV9IHsKKyAgICAgIGlmIHskbGVuZ3RoIDw9ICRjb3VudH0geworICAgICAgICAgc2V0IGRpZ2l0cyAiW3N0cmluZyByZXBlYXQgIjAiIFtleHByIHskY291bnQgLSAkbGVuZ3RofV1dJGRpZ2l0cyIKKyAgICAgICAgIGJyZWFrCisgICAgICB9CisgICB9CisKKyAgIHJldHVybiAiXFwkbGV0dGVyJGRpZ2l0cyIKK30KKwpkaWZmIC0tZ2l0IGEvVG9vbHMvYnJsYXBpLmQvZnV6ei1kaWN0IGIvVG9vbHMvYnJsYXBpLmQvZnV6ei1kaWN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ0YzNlZjgKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9icmxhcGkuZC9mdXp6LWRpY3QKQEAgLTAsMCArMSwyNTYgQEAKKzA9Ilx4MDBceDAwXHgwMFx4MDAiCisxPSJceDAwXHgwMFx4MDBceDAxIgorMj0iXHgwMFx4MDBceDAwXHgwMiIKKzM9Ilx4MDBceDAwXHgwMFx4MDMiCis0PSJceDAwXHgwMFx4MDBceDA0IgorNT0iXHgwMFx4MDBceDAwXHgwNSIKKzY9Ilx4MDBceDAwXHgwMFx4MDYiCis3PSJceDAwXHgwMFx4MDBceDA3IgorOD0iXHgwMFx4MDBceDAwXHgwOCIKKzk9Ilx4MDBceDAwXHgwMFx4MDkiCisxMD0iXHgwMFx4MDBceDAwXHgwQSIKKzExPSJceDAwXHgwMFx4MDBceDBCIgorMTI9Ilx4MDBceDAwXHgwMFx4MEMiCisxMz0iXHgwMFx4MDBceDAwXHgwRCIKKzE0PSJceDAwXHgwMFx4MDBceDBFIgorMTU9Ilx4MDBceDAwXHgwMFx4MEYiCisxNj0iXHgwMFx4MDBceDAwXHgxMCIKKzE3PSJceDAwXHgwMFx4MDBceDExIgorMTg9Ilx4MDBceDAwXHgwMFx4MTIiCisxOT0iXHgwMFx4MDBceDAwXHgxMyIKKzIwPSJceDAwXHgwMFx4MDBceDE0IgorMjE9Ilx4MDBceDAwXHgwMFx4MTUiCisyMj0iXHgwMFx4MDBceDAwXHgxNiIKKzIzPSJceDAwXHgwMFx4MDBceDE3IgorMjQ9Ilx4MDBceDAwXHgwMFx4MTgiCisyNT0iXHgwMFx4MDBceDAwXHgxOSIKKzI2PSJceDAwXHgwMFx4MDBceDFBIgorMjc9Ilx4MDBceDAwXHgwMFx4MUIiCisyOD0iXHgwMFx4MDBceDAwXHgxQyIKKzI5PSJceDAwXHgwMFx4MDBceDFEIgorMzA9Ilx4MDBceDAwXHgwMFx4MUUiCiszMT0iXHgwMFx4MDBceDAwXHgxRiIKKzMyPSJceDAwXHgwMFx4MDBceDIwIgorMzM9Ilx4MDBceDAwXHgwMFx4MjEiCiszND0iXHgwMFx4MDBceDAwXHgyMiIKKzM1PSJceDAwXHgwMFx4MDBceDIzIgorMzY9Ilx4MDBceDAwXHgwMFx4MjQiCiszNz0iXHgwMFx4MDBceDAwXHgyNSIKKzM4PSJceDAwXHgwMFx4MDBceDI2IgorMzk9Ilx4MDBceDAwXHgwMFx4MjciCis0MD0iXHgwMFx4MDBceDAwXHgyOCIKKzQxPSJceDAwXHgwMFx4MDBceDI5IgorNDI9Ilx4MDBceDAwXHgwMFx4MkEiCis0Mz0iXHgwMFx4MDBceDAwXHgyQiIKKzQ0PSJceDAwXHgwMFx4MDBceDJDIgorNDU9Ilx4MDBceDAwXHgwMFx4MkQiCis0Nj0iXHgwMFx4MDBceDAwXHgyRSIKKzQ3PSJceDAwXHgwMFx4MDBceDJGIgorNDg9Ilx4MDBceDAwXHgwMFx4MzAiCis0OT0iXHgwMFx4MDBceDAwXHgzMSIKKzUwPSJceDAwXHgwMFx4MDBceDMyIgorNTE9Ilx4MDBceDAwXHgwMFx4MzMiCis1Mj0iXHgwMFx4MDBceDAwXHgzNCIKKzUzPSJceDAwXHgwMFx4MDBceDM1IgorNTQ9Ilx4MDBceDAwXHgwMFx4MzYiCis1NT0iXHgwMFx4MDBceDAwXHgzNyIKKzU2PSJceDAwXHgwMFx4MDBceDM4IgorNTc9Ilx4MDBceDAwXHgwMFx4MzkiCis1OD0iXHgwMFx4MDBceDAwXHgzQSIKKzU5PSJceDAwXHgwMFx4MDBceDNCIgorNjA9Ilx4MDBceDAwXHgwMFx4M0MiCis2MT0iXHgwMFx4MDBceDAwXHgzRCIKKzYyPSJceDAwXHgwMFx4MDBceDNFIgorNjM9Ilx4MDBceDAwXHgwMFx4M0YiCis2ND0iXHgwMFx4MDBceDAwXHg0MCIKKzY1PSJceDAwXHgwMFx4MDBceDQxIgorNjY9Ilx4MDBceDAwXHgwMFx4NDIiCis2Nz0iXHgwMFx4MDBceDAwXHg0MyIKKzY4PSJceDAwXHgwMFx4MDBceDQ0IgorNjk9Ilx4MDBceDAwXHgwMFx4NDUiCis3MD0iXHgwMFx4MDBceDAwXHg0NiIKKzcxPSJceDAwXHgwMFx4MDBceDQ3IgorNzI9Ilx4MDBceDAwXHgwMFx4NDgiCis3Mz0iXHgwMFx4MDBceDAwXHg0OSIKKzc0PSJceDAwXHgwMFx4MDBceDRBIgorNzU9Ilx4MDBceDAwXHgwMFx4NEIiCis3Nj0iXHgwMFx4MDBceDAwXHg0QyIKKzc3PSJceDAwXHgwMFx4MDBceDREIgorNzg9Ilx4MDBceDAwXHgwMFx4NEUiCis3OT0iXHgwMFx4MDBceDAwXHg0RiIKKzgwPSJceDAwXHgwMFx4MDBceDUwIgorODE9Ilx4MDBceDAwXHgwMFx4NTEiCis4Mj0iXHgwMFx4MDBceDAwXHg1MiIKKzgzPSJceDAwXHgwMFx4MDBceDUzIgorODQ9Ilx4MDBceDAwXHgwMFx4NTQiCis4NT0iXHgwMFx4MDBceDAwXHg1NSIKKzg2PSJceDAwXHgwMFx4MDBceDU2IgorODc9Ilx4MDBceDAwXHgwMFx4NTciCis4OD0iXHgwMFx4MDBceDAwXHg1OCIKKzg5PSJceDAwXHgwMFx4MDBceDU5IgorOTA9Ilx4MDBceDAwXHgwMFx4NUEiCis5MT0iXHgwMFx4MDBceDAwXHg1QiIKKzkyPSJceDAwXHgwMFx4MDBceDVDIgorOTM9Ilx4MDBceDAwXHgwMFx4NUQiCis5ND0iXHgwMFx4MDBceDAwXHg1RSIKKzk1PSJceDAwXHgwMFx4MDBceDVGIgorOTY9Ilx4MDBceDAwXHgwMFx4NjAiCis5Nz0iXHgwMFx4MDBceDAwXHg2MSIKKzk4PSJceDAwXHgwMFx4MDBceDYyIgorOTk9Ilx4MDBceDAwXHgwMFx4NjMiCisxMDA9Ilx4MDBceDAwXHgwMFx4NjQiCisxMDE9Ilx4MDBceDAwXHgwMFx4NjUiCisxMDI9Ilx4MDBceDAwXHgwMFx4NjYiCisxMDM9Ilx4MDBceDAwXHgwMFx4NjciCisxMDQ9Ilx4MDBceDAwXHgwMFx4NjgiCisxMDU9Ilx4MDBceDAwXHgwMFx4NjkiCisxMDY9Ilx4MDBceDAwXHgwMFx4NkEiCisxMDc9Ilx4MDBceDAwXHgwMFx4NkIiCisxMDg9Ilx4MDBceDAwXHgwMFx4NkMiCisxMDk9Ilx4MDBceDAwXHgwMFx4NkQiCisxMTA9Ilx4MDBceDAwXHgwMFx4NkUiCisxMTE9Ilx4MDBceDAwXHgwMFx4NkYiCisxMTI9Ilx4MDBceDAwXHgwMFx4NzAiCisxMTM9Ilx4MDBceDAwXHgwMFx4NzEiCisxMTQ9Ilx4MDBceDAwXHgwMFx4NzIiCisxMTU9Ilx4MDBceDAwXHgwMFx4NzMiCisxMTY9Ilx4MDBceDAwXHgwMFx4NzQiCisxMTc9Ilx4MDBceDAwXHgwMFx4NzUiCisxMTg9Ilx4MDBceDAwXHgwMFx4NzYiCisxMTk9Ilx4MDBceDAwXHgwMFx4NzciCisxMjA9Ilx4MDBceDAwXHgwMFx4NzgiCisxMjE9Ilx4MDBceDAwXHgwMFx4NzkiCisxMjI9Ilx4MDBceDAwXHgwMFx4N0EiCisxMjM9Ilx4MDBceDAwXHgwMFx4N0IiCisxMjQ9Ilx4MDBceDAwXHgwMFx4N0MiCisxMjU9Ilx4MDBceDAwXHgwMFx4N0QiCisxMjY9Ilx4MDBceDAwXHgwMFx4N0UiCisxMjc9Ilx4MDBceDAwXHgwMFx4N0YiCisxMjg9Ilx4MDBceDAwXHgwMFx4ODAiCisxMjk9Ilx4MDBceDAwXHgwMFx4ODEiCisxMzA9Ilx4MDBceDAwXHgwMFx4ODIiCisxMzE9Ilx4MDBceDAwXHgwMFx4ODMiCisxMzI9Ilx4MDBceDAwXHgwMFx4ODQiCisxMzM9Ilx4MDBceDAwXHgwMFx4ODUiCisxMzQ9Ilx4MDBceDAwXHgwMFx4ODYiCisxMzU9Ilx4MDBceDAwXHgwMFx4ODciCisxMzY9Ilx4MDBceDAwXHgwMFx4ODgiCisxMzc9Ilx4MDBceDAwXHgwMFx4ODkiCisxMzg9Ilx4MDBceDAwXHgwMFx4OEEiCisxMzk9Ilx4MDBceDAwXHgwMFx4OEIiCisxNDA9Ilx4MDBceDAwXHgwMFx4OEMiCisxNDE9Ilx4MDBceDAwXHgwMFx4OEQiCisxNDI9Ilx4MDBceDAwXHgwMFx4OEUiCisxNDM9Ilx4MDBceDAwXHgwMFx4OEYiCisxNDQ9Ilx4MDBceDAwXHgwMFx4OTAiCisxNDU9Ilx4MDBceDAwXHgwMFx4OTEiCisxNDY9Ilx4MDBceDAwXHgwMFx4OTIiCisxNDc9Ilx4MDBceDAwXHgwMFx4OTMiCisxNDg9Ilx4MDBceDAwXHgwMFx4OTQiCisxNDk9Ilx4MDBceDAwXHgwMFx4OTUiCisxNTA9Ilx4MDBceDAwXHgwMFx4OTYiCisxNTE9Ilx4MDBceDAwXHgwMFx4OTciCisxNTI9Ilx4MDBceDAwXHgwMFx4OTgiCisxNTM9Ilx4MDBceDAwXHgwMFx4OTkiCisxNTQ9Ilx4MDBceDAwXHgwMFx4OUEiCisxNTU9Ilx4MDBceDAwXHgwMFx4OUIiCisxNTY9Ilx4MDBceDAwXHgwMFx4OUMiCisxNTc9Ilx4MDBceDAwXHgwMFx4OUQiCisxNTg9Ilx4MDBceDAwXHgwMFx4OUUiCisxNTk9Ilx4MDBceDAwXHgwMFx4OUYiCisxNjA9Ilx4MDBceDAwXHgwMFx4QTAiCisxNjE9Ilx4MDBceDAwXHgwMFx4QTEiCisxNjI9Ilx4MDBceDAwXHgwMFx4QTIiCisxNjM9Ilx4MDBceDAwXHgwMFx4QTMiCisxNjQ9Ilx4MDBceDAwXHgwMFx4QTQiCisxNjU9Ilx4MDBceDAwXHgwMFx4QTUiCisxNjY9Ilx4MDBceDAwXHgwMFx4QTYiCisxNjc9Ilx4MDBceDAwXHgwMFx4QTciCisxNjg9Ilx4MDBceDAwXHgwMFx4QTgiCisxNjk9Ilx4MDBceDAwXHgwMFx4QTkiCisxNzA9Ilx4MDBceDAwXHgwMFx4QUEiCisxNzE9Ilx4MDBceDAwXHgwMFx4QUIiCisxNzI9Ilx4MDBceDAwXHgwMFx4QUMiCisxNzM9Ilx4MDBceDAwXHgwMFx4QUQiCisxNzQ9Ilx4MDBceDAwXHgwMFx4QUUiCisxNzU9Ilx4MDBceDAwXHgwMFx4QUYiCisxNzY9Ilx4MDBceDAwXHgwMFx4QjAiCisxNzc9Ilx4MDBceDAwXHgwMFx4QjEiCisxNzg9Ilx4MDBceDAwXHgwMFx4QjIiCisxNzk9Ilx4MDBceDAwXHgwMFx4QjMiCisxODA9Ilx4MDBceDAwXHgwMFx4QjQiCisxODE9Ilx4MDBceDAwXHgwMFx4QjUiCisxODI9Ilx4MDBceDAwXHgwMFx4QjYiCisxODM9Ilx4MDBceDAwXHgwMFx4QjciCisxODQ9Ilx4MDBceDAwXHgwMFx4QjgiCisxODU9Ilx4MDBceDAwXHgwMFx4QjkiCisxODY9Ilx4MDBceDAwXHgwMFx4QkEiCisxODc9Ilx4MDBceDAwXHgwMFx4QkIiCisxODg9Ilx4MDBceDAwXHgwMFx4QkMiCisxODk9Ilx4MDBceDAwXHgwMFx4QkQiCisxOTA9Ilx4MDBceDAwXHgwMFx4QkUiCisxOTE9Ilx4MDBceDAwXHgwMFx4QkYiCisxOTI9Ilx4MDBceDAwXHgwMFx4QzAiCisxOTM9Ilx4MDBceDAwXHgwMFx4QzEiCisxOTQ9Ilx4MDBceDAwXHgwMFx4QzIiCisxOTU9Ilx4MDBceDAwXHgwMFx4QzMiCisxOTY9Ilx4MDBceDAwXHgwMFx4QzQiCisxOTc9Ilx4MDBceDAwXHgwMFx4QzUiCisxOTg9Ilx4MDBceDAwXHgwMFx4QzYiCisxOTk9Ilx4MDBceDAwXHgwMFx4QzciCisyMDA9Ilx4MDBceDAwXHgwMFx4QzgiCisyMDE9Ilx4MDBceDAwXHgwMFx4QzkiCisyMDI9Ilx4MDBceDAwXHgwMFx4Q0EiCisyMDM9Ilx4MDBceDAwXHgwMFx4Q0IiCisyMDQ9Ilx4MDBceDAwXHgwMFx4Q0MiCisyMDU9Ilx4MDBceDAwXHgwMFx4Q0QiCisyMDY9Ilx4MDBceDAwXHgwMFx4Q0UiCisyMDc9Ilx4MDBceDAwXHgwMFx4Q0YiCisyMDg9Ilx4MDBceDAwXHgwMFx4RDAiCisyMDk9Ilx4MDBceDAwXHgwMFx4RDEiCisyMTA9Ilx4MDBceDAwXHgwMFx4RDIiCisyMTE9Ilx4MDBceDAwXHgwMFx4RDMiCisyMTI9Ilx4MDBceDAwXHgwMFx4RDQiCisyMTM9Ilx4MDBceDAwXHgwMFx4RDUiCisyMTQ9Ilx4MDBceDAwXHgwMFx4RDYiCisyMTU9Ilx4MDBceDAwXHgwMFx4RDciCisyMTY9Ilx4MDBceDAwXHgwMFx4RDgiCisyMTc9Ilx4MDBceDAwXHgwMFx4RDkiCisyMTg9Ilx4MDBceDAwXHgwMFx4REEiCisyMTk9Ilx4MDBceDAwXHgwMFx4REIiCisyMjA9Ilx4MDBceDAwXHgwMFx4REMiCisyMjE9Ilx4MDBceDAwXHgwMFx4REQiCisyMjI9Ilx4MDBceDAwXHgwMFx4REUiCisyMjM9Ilx4MDBceDAwXHgwMFx4REYiCisyMjQ9Ilx4MDBceDAwXHgwMFx4RTAiCisyMjU9Ilx4MDBceDAwXHgwMFx4RTEiCisyMjY9Ilx4MDBceDAwXHgwMFx4RTIiCisyMjc9Ilx4MDBceDAwXHgwMFx4RTMiCisyMjg9Ilx4MDBceDAwXHgwMFx4RTQiCisyMjk9Ilx4MDBceDAwXHgwMFx4RTUiCisyMzA9Ilx4MDBceDAwXHgwMFx4RTYiCisyMzE9Ilx4MDBceDAwXHgwMFx4RTciCisyMzI9Ilx4MDBceDAwXHgwMFx4RTgiCisyMzM9Ilx4MDBceDAwXHgwMFx4RTkiCisyMzQ9Ilx4MDBceDAwXHgwMFx4RUEiCisyMzU9Ilx4MDBceDAwXHgwMFx4RUIiCisyMzY9Ilx4MDBceDAwXHgwMFx4RUMiCisyMzc9Ilx4MDBceDAwXHgwMFx4RUQiCisyMzg9Ilx4MDBceDAwXHgwMFx4RUUiCisyMzk9Ilx4MDBceDAwXHgwMFx4RUYiCisyNDA9Ilx4MDBceDAwXHgwMFx4RjAiCisyNDE9Ilx4MDBceDAwXHgwMFx4RjEiCisyNDI9Ilx4MDBceDAwXHgwMFx4RjIiCisyNDM9Ilx4MDBceDAwXHgwMFx4RjMiCisyNDQ9Ilx4MDBceDAwXHgwMFx4RjQiCisyNDU9Ilx4MDBceDAwXHgwMFx4RjUiCisyNDY9Ilx4MDBceDAwXHgwMFx4RjYiCisyNDc9Ilx4MDBceDAwXHgwMFx4RjciCisyNDg9Ilx4MDBceDAwXHgwMFx4RjgiCisyNDk9Ilx4MDBceDAwXHgwMFx4RjkiCisyNTA9Ilx4MDBceDAwXHgwMFx4RkEiCisyNTE9Ilx4MDBceDAwXHgwMFx4RkIiCisyNTI9Ilx4MDBceDAwXHgwMFx4RkMiCisyNTM9Ilx4MDBceDAwXHgwMFx4RkQiCisyNTQ9Ilx4MDBceDAwXHgwMFx4RkUiCisyNTU9Ilx4MDBceDAwXHgwMFx4RkYiCmRpZmYgLS1naXQgYS9Ub29scy9jZmJybHR0eSBiL1Rvb2xzL2NmYnJsdHR5Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmJkOWU4MjMKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9jZmJybHR0eQpAQCAtMCwwICsxLDQzIEBACisjIS91c3IvYmluL2VudiBiYXNoCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisjICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorIworIyBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisjCisjIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisjCisjIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyMgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorIyBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyMKKyMgV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworIworIyBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworLiAiJChkaXJuYW1lICIkezB9IikvLi4vcHJvbG9ndWUuc2giCitzZXQgLWUKKworc2V0U291cmNlUm9vdAorY2QgIiR7c291cmNlUm9vdH0iCisKK3JldmlzaW9uSWRlbnRpZmllcj0iJCguL2dldHJldmlkIC4pIiB8fCB7CisgICByZXZpc2lvbkhlYWRlcj0iJHtwcm9ncmFtc1N1YmRpcmVjdG9yeX0vcmV2aXNpb25faWRlbnRpZmllci5hdXRvLmgiCisKKyAgIHJldmlzaW9uSWRlbnRpZmllcj0iJChzZWQgLWUgJ3MvIi8vZycgIiR7cmV2aXNpb25IZWFkZXJ9IikiIHx8IHsKKyAgICAgIHJldmlzaW9uSWRlbnRpZmllcj0iJChkYXRlICsnJVklbSVkLSVIJU0lUycpIgorICAgfQorfQorCitjb25maWd1cmVPcHRpb25zPSgKKyAgIC0td2l0aC1leGVjdXRlLXJvb3Q9Ii9icmx0dHkvUkVWLSR7cmV2aXNpb25JZGVudGlmaWVyfSIKKyAgIC0td2l0aG91dC1saWJicmFpbGxlCisgICAtLXdpdGhvdXQtbWlrcm9wdWhlCisgICAtLXdpdGhvdXQtc3dpZnQKKyAgIC0td2l0aG91dC10aGV0YQorKQorCisuL2NvbmZpZ3VyZSAtLXF1aWV0ICIke2NvbmZpZ3VyZU9wdGlvbnNbQF19IiAiJHtAfSIKK2V4aXQgMApkaWZmIC0tZ2l0IGEvVG9vbHMvY3N2LnRjbCBiL1Rvb2xzL2Nzdi50Y2wKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGRlZjU3MwotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL2Nzdi50Y2wKQEAgLTAsMCArMSwxNzYgQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyMgICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisjCisjIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyMKKyMgQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitwcm9jIGNzdk5vcm1hbGl6ZVJvdyB7Y29sdW1ucyB3aWR0aH0geworICAgaWYge1tzZXQgY291bnQgW2xsZW5ndGggJGNvbHVtbnNdXSA+ICR3aWR0aH0geworICAgICAgc2V0IGNvbHVtbnMgW2xyYW5nZSAkY29sdW1ucyAwICR3aWR0aC0xXQorICAgfSBlbHNlaWYgeyRjb3VudCA8ICR3aWR0aH0geworICAgICAgbHZhcmNhdCBjb2x1bW5zIFtscmVwZWF0IFtleHByIHskd2lkdGggLSAkY291bnR9XSAiIl0KKyAgIH0KKworICAgcmV0dXJuICRjb2x1bW5zCit9CisKK3Byb2MgY3N2Tm9ybWFsaXplUm93cyB7cm93cyB3aWR0aH0geworICAgc2V0IHJlc3VsdCBbbGlzdF0KKworICAgZm9yZWFjaCBjb2x1bW5zICRyb3dzIHsKKyAgICAgIGxhcHBlbmQgcmVzdWx0IFtjc3ZOb3JtYWxpemVSb3cgJGNvbHVtbnMgJHdpZHRoXQorICAgfQorCisgICByZXR1cm4gJHJlc3VsdAorfQorCitwcm9jIGNzdlF1b3RlVGV4dCB7dGV4dH0geworICAgcmV0dXJuICJcIltyZWdzdWIgLWFsbCB7KCIpfSAkdGV4dCB7XDFcMX1dXCIiCit9CisKK3Byb2MgY3N2TWFrZUxpbmUge2NvbHVtbnN9IHsKKyAgIHJldHVybiBbam9pbiBbbG1hcCBjZWxsICRjb2x1bW5zIHtjc3ZRdW90ZVRleHQgJGNlbGx9XSAsXQorfQorCitwcm9jIGNzdk1ha2VUYWJsZSB7cm93c30geworICAgc2V0IHRhYmxlICIiCisKKyAgIGZvcmVhY2ggY29sdW1ucyAkcm93cyB7CisgICAgICBhcHBlbmQgdGFibGUgW2Nzdk1ha2VMaW5lICRjb2x1bW5zXQorICAgICAgYXBwZW5kIHRhYmxlICJcbiIKKyAgIH0KKworICAgcmV0dXJuICR0YWJsZQorfQorCitwcm9jIGNzdkFwcGx5SGVhZGVycyB7dGFibGV9IHsKKyAgIHNldCByb3dzIFtsaXN0XQorICAgc2V0IGhlYWRlcnMgW2xpbmRleCAkdGFibGUgMF0KKworICAgZm9yZWFjaCBjb2x1bW5zIFtscmFuZ2UgJHRhYmxlIDEgZW5kXSB7CisgICAgICBzZXQgcm93IFtkaWN0IGNyZWF0ZV0KKyAgICAgIHNldCBjb3VudCBbbGxlbmd0aCAkY29sdW1uc10KKyAgICAgIHNldCBpbmRleCAwCisKKyAgICAgIGZvcmVhY2ggaGVhZGVyICRoZWFkZXJzIHsKKyAgICAgICAgIGlmIHskaW5kZXggPT0gJGNvdW50fSB7CisgICAgICAgICAgICBzZXQgY29sdW1uICIiCisgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgc2V0IGNvbHVtbiBbbGluZGV4ICRjb2x1bW5zICRpbmRleF0KKyAgICAgICAgICAgIGluY3IgaW5kZXgKKyAgICAgICAgIH0KKworICAgICAgICAgZGljdCBzZXQgcm93ICRoZWFkZXIgJGNvbHVtbgorICAgICAgfQorCisgICAgICBsYXBwZW5kIHJvd3MgJHJvdworICAgfQorCisgICByZXR1cm4gJHJvd3MKK30KKworcHJvYyBjc3ZQYXJzZVN0cmluZyB7c3RyaW5nfSB7CisgICBzZXQgcm93cyBbbGlzdF0KKyAgIHNldCBjb2x1bW5zIFtsaXN0XQorICAgc2V0IGNvbHVtbiAiIgorCisgICBzZXQgZmluaXNoQ29sdW1uIHsKKyAgICAgIGxhcHBlbmQgY29sdW1ucyAkY29sdW1uCisgICAgICBzZXQgY29sdW1uICIiCisgICB9CisKKyAgIHNldCBmaW5pc2hSb3cgeworICAgICAgaWYgeyhbbGxlbmd0aCAkY29sdW1uc10gPiAwKSB8fCAoW3N0cmluZyBsZW5ndGggJGNvbHVtbl0gPiAwKX0geworICAgICAgICAgZXZhbCAkZmluaXNoQ29sdW1uCisgICAgICAgICBsYXBwZW5kIHJvd3MgJGNvbHVtbnMKKyAgICAgICAgIHNldCBjb2x1bW5zIFtsaXN0XQorICAgICAgfQorICAgfQorCisgICBzZXQgc3RhdGUgdW5xdW90ZWQKKyAgIHNldCBsZW5ndGggW3N0cmluZyBsZW5ndGggJHN0cmluZ10KKyAgIHNldCBpbmRleCAwCisKKyAgIHdoaWxlIHskaW5kZXggPCAkbGVuZ3RofSB7CisgICAgICBzZXQgY2hhcmFjdGVyIFtzdHJpbmcgaW5kZXggJHN0cmluZyAkaW5kZXhdCisgICAgICBzZXQgaXNRdW90ZSBbc3RyaW5nIGVxdWFsICRjaGFyYWN0ZXIgeyJ9XQorICAgICAgaW5jciBpbmRleAorCisgICAgICBzd2l0Y2ggLWV4YWN0ICRzdGF0ZSB7CisgICAgICAgICB1bnF1b3RlZCB7CisgICAgICAgICAgICBpZiB7JGlzUXVvdGV9IHsKKyAgICAgICAgICAgICAgIHNldCBzdGF0ZSBpblF1b3RlcworICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgc3dpdGNoIC1leGFjdCAkY2hhcmFjdGVyIHsKKyAgICAgICAgICAgICAgICIsIiB7CisgICAgICAgICAgICAgICAgICBldmFsICRmaW5pc2hDb2x1bW4KKyAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICJcbiIgeworICAgICAgICAgICAgICAgICAgZXZhbCAkZmluaXNoUm93CisgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAiXHIiIHsKKyAgICAgICAgICAgICAgICAgIGV2YWwgJGZpbmlzaFJvdworICAgICAgICAgICAgICAgICAgc2V0IHN0YXRlIHdhc0NhcnJpYWdlUmV0dXJuCisgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgfQorCisgICAgICAgICBpblF1b3RlcyB7CisgICAgICAgICAgICBpZiB7JGlzUXVvdGV9IHsKKyAgICAgICAgICAgICAgIHNldCBzdGF0ZSB3YXNRdW90ZQorICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIH0KKyAgICAgICAgIH0KKworICAgICAgICAgd2FzUXVvdGUgeworICAgICAgICAgICAgaWYgeyEkaXNRdW90ZX0geworICAgICAgICAgICAgICAgc2V0IHN0YXRlIHVucXVvdGVkCisgICAgICAgICAgICAgICBpbmNyIGluZGV4IC0xCisgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBzZXQgc3RhdGUgaW5RdW90ZXMKKyAgICAgICAgIH0KKworICAgICAgICAgd2FzQ2FycmlhZ2VSZXR1cm4geworICAgICAgICAgICAgaWYge1tzdHJpbmcgZXF1YWwgJGNoYXJhY3RlciAiXG4iXX0geworICAgICAgICAgICAgICAgc2V0IHN0YXRlIHVucXVvdGVkCisgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgfQorICAgICAgICAgfQorCisgICAgICAgICBkZWZhdWx0IHsKKyAgICAgICAgICAgIHJldHVybiAtY29kZSBlcnJvciAidW5yZWNvZ25pemVkIGNzdiBwYXJzZSBzdGF0ZTogJHN0YXRlIgorICAgICAgICAgfQorICAgICAgfQorCisgICAgICBhcHBlbmQgY29sdW1uICRjaGFyYWN0ZXIKKyAgIH0KKworICAgZXZhbCAkZmluaXNoUm93CisgICByZXR1cm4gJHJvd3MKK30KKworcHJvYyBjc3ZMb2FkRmlsZSB7ZmlsZX0geworICAgcmV0dXJuIFtjc3ZBcHBseUhlYWRlcnMgW2NzdlBhcnNlU3RyaW5nIFtyZWFkRmlsZSAkZmlsZV1dXQorfQorCmRpZmYgLS1naXQgYS9Ub29scy9nZW5kZXBzIGIvVG9vbHMvZ2VuZGVwcwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi44Y2NhZDY3Ci0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvZ2VuZGVwcwpAQCAtMCwwICsxLDIzNiBAQAorIyEvdXNyL2Jpbi9lbnYgdGNsc2gKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyMgICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisjCisjIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyMKKyMgQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitzb3VyY2UgW2ZpbGUgam9pbiBbZmlsZSBkaXJuYW1lIFtpbmZvIHNjcmlwdF1dIC4uIHByb2xvZ3VlLnRjbF0KK2NkICRzb3VyY2VSb290CisKK3Byb2MgZ2V0QnVpbGREaXJlY3RvcmllcyB7e3Jvb3QgIiJ9fSB7CisgICBzZXQgZGlyZWN0b3JpZXMgW2xpc3RdCisKKyAgIGlmIHtbc3RyaW5nIGxlbmd0aCAkcm9vdF0gPT0gMH0geworICAgICAgc2V0IHJvb3QgLgorICAgICAgc2V0IHNldFBhdGggeworICAgICAgICAgc2V0IHBhdGggJG5hbWUKKyAgICAgIH0KKyAgIH0gZWxzZSB7CisgICAgICBzZXQgc2V0UGF0aCB7CisgICAgICAgICBzZXQgcGF0aCBbZmlsZSBqb2luICRyb290ICRuYW1lXQorICAgICAgfQorICAgfQorCisgICBpZiB7W2ZpbGUgZXhpc3RzIFtmaWxlIGpvaW4gJHJvb3QgTWFrZWZpbGUuaW5dXX0geworICAgICAgbGFwcGVuZCBkaXJlY3RvcmllcyAkcm9vdAorICAgfQorCisgICBmb3JlYWNoIG5hbWUgW3JlYWRkaXIgJHJvb3RdIHsKKyAgICAgIGV2YWwgJHNldFBhdGgKKyAgICAgIHNldCB0eXBlIFtmaWxlIHR5cGUgJHBhdGhdCisKKyAgICAgIGlmIHtbc3RyaW5nIGVxdWFsICR0eXBlIGxpbmtdfSB7CisgICAgICAgICBjb250aW51ZQorICAgICAgfQorCisgICAgICBpZiB7W3N0cmluZyBlcXVhbCAkdHlwZSBkaXJlY3RvcnldfSB7CisgICAgICAgICBsdmFyY2F0IGRpcmVjdG9yaWVzIFtnZXRCdWlsZERpcmVjdG9yaWVzICRwYXRoXQorICAgICAgfQorICAgfQorCisgICByZXR1cm4gJGRpcmVjdG9yaWVzCit9CisKK3Byb2MgZ2VuZXJhdGVkRmlsZSB7ZmlsZX0geworICAgc2V0IG5hbWUgW2ZpbGUgdGFpbCAkZmlsZV0KKworICAgaWYge1tzdHJpbmcgZXF1YWwgW2ZpbGUgZXh0ZW5zaW9uIFtmaWxlIHJvb3RuYW1lICRuYW1lXV0gLmF1dG9dfSB7CisgICAgICByZXR1cm4gMQorICAgfQorCisgICBpZiB7W3JlZ2V4cCB7XC50YWJcLmMkfSAkbmFtZV19IHsKKyAgICAgIHJldHVybiAxCisgICB9CisKKyAgIGlmIHtbbGNvbnRhaW4ge2JybGFwaV9jb25zdGFudHMuaH0gJG5hbWVdfSB7CisgICAgICByZXR1cm4gMQorICAgfQorCisgICByZXR1cm4gMAorfQorCitwcm9jIHNvdXJjZUZpbGUge2ZpbGV9IHsKKyAgIHNldCBuYW1lIFtsaW5kZXggW3NldCBjb21wb25lbnRzIFtmaWxlIHNwbGl0ICRmaWxlXV0gZW5kXQorICAgcmVnc3ViIHteZm9yYnVpbGQoXC4pfSAkbmFtZSB7Y29uZmlnXDF9IG5hbWUKKyAgIHNldCBwYXRoIFtldmFsIGZpbGUgam9pbiBbbHJlcGxhY2UgJGNvbXBvbmVudHMgZW5kIGVuZCAiJG5hbWUuaW4iXV0KKworICAgaWYge1tmaWxlIGV4aXN0cyAkcGF0aF19IHsKKyAgICAgIHJldHVybiAkcGF0aAorICAgfQorCisgICByZXR1cm4gIiIKK30KKworcHJvYyBkZXBlbmRlbmN5RXhpc3RzIHtmaWxlfSB7CisgICBpZiB7W2ZpbGUgZXhpc3RzICRmaWxlXX0geworICAgICAgcmV0dXJuIDEKKyAgIH0KKworICAgaWYge1tzdHJpbmcgbGVuZ3RoIFtzZXQgc291cmNlIFtzb3VyY2VGaWxlICRmaWxlXV1dID4gMH0geworICAgICAgaWYge1tmaWxlIGV4aXN0cyAkc291cmNlXX0geworICAgICAgICAgcmV0dXJuIDEKKyAgICAgIH0KKyAgIH0KKworICAgcmV0dXJuIDAKK30KKworcHJvYyBnZXREZXBlbmRlbmNpZXMge2ZpbGV9IHsKKyAgIHVwdmFyICMwIGRlcGVuZGVuY2llcygkZmlsZSkgZGVwZW5kZW5jaWVzCisKKyAgIGlmIHshW2luZm8gZXhpc3RzIGRlcGVuZGVuY2llc119IHsKKyAgICAgIGxhcHBlbmQgZGVwZW5kZW5jaWVzICRmaWxlCisKKyAgICAgIGlmIHtbc3RyaW5nIGxlbmd0aCBbc2V0IHNvdXJjZSBbc291cmNlRmlsZSAkZmlsZV1dXSA9PSAwfSB7CisgICAgICAgICBzZXQgc291cmNlICRmaWxlCisgICAgICB9CisgICAgICBzZXQgc3RyZWFtIFtvcGVuICRzb3VyY2Uge1JET05MWX1dCisKKyAgICAgIHNldCBpbmNsdWRlcyBbbGlzdF0KKyAgICAgIHdoaWxlIHtbZ2V0cyAkc3RyZWFtIGxpbmVdID49IDB9IHsKKyAgICAgICAgIGlmIHtbcmVnZXhwIHteICojICppbmNsdWRlICoiKFteIl0qKSJ9ICRsaW5lIHggaGVhZGVyXX0geworICAgICAgICAgICAgbGFwcGVuZCBpbmNsdWRlcyAkaGVhZGVyCisgICAgICAgICB9CisgICAgICB9CisgICAgICBjbG9zZSAkc3RyZWFtOyB1bnNldCBzdHJlYW0KKworICAgICAgaWYge1tzdHJpbmcgZXF1YWwgW3NldCBkaXJlY3RvcnkgW2ZpbGUgZGlybmFtZSAkZmlsZV1dIC5dfSB7CisgICAgICAgICBzZXQgZGlyZWN0b3J5ICIiCisgICAgICB9CisKKyAgICAgIGZvcmVhY2ggaW5jbHVkZSAkaW5jbHVkZXMgeworICAgICAgICAgaWYge1tnZW5lcmF0ZWRGaWxlICRpbmNsdWRlXX0geworICAgICAgICAgICAgaWYge1tzdHJpbmcgZmlyc3QgLyAkaW5jbHVkZV0gPCAwfSB7CisgICAgICAgICAgICAgICBzZXQgaW5jbHVkZSBbZmlsZSBqb2luICRkaXJlY3RvcnkgJGluY2x1ZGVdCisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGxhcHBlbmQgZGVwZW5kZW5jaWVzICRpbmNsdWRlCisgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgc2V0IGZvdW5kIDAKKyAgICAgICAgICAgIGZvcmVhY2ggbG9jYXRpb24gW2xpc3QgJGRpcmVjdG9yeSBQcm9ncmFtcyBIZWFkZXJzICIiXSB7CisgICAgICAgICAgICAgICBpZiB7W2RlcGVuZGVuY3lFeGlzdHMgW3NldCBwYXRoIFtmaWxlIGpvaW4gJGxvY2F0aW9uICRpbmNsdWRlXV1dfSB7CisgICAgICAgICAgICAgICAgICBsdmFyY2F0IGRlcGVuZGVuY2llcyBbbGluZGV4IFtpbnRlcnNlY3QzICRkZXBlbmRlbmNpZXMgW2dldERlcGVuZGVuY2llcyAkcGF0aF1dIDJdCisgICAgICAgICAgICAgICAgICBzZXQgZm91bmQgMQorICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIHshJGZvdW5kfSB7CisgICAgICAgICAgICAgICB3cml0ZVByb2dyYW1NZXNzYWdlICJtaXNzaW5nIGRlcGVuZGVuY3k6ICRmaWxlIGluY2x1ZGVzICRpbmNsdWRlIgorICAgICAgICAgICAgfQorICAgICAgICAgfQorICAgICAgfQorICAgfQorCisgICByZXR1cm4gJGRlcGVuZGVuY2llcworfQorCitzZXQgb3B0aW9uRGVmaW5pdGlvbnMgeworfQorCitwcm9jZXNzUHJvZ3JhbUFyZ3VtZW50cyBvcHRpb25WYWx1ZXMgJG9wdGlvbkRlZmluaXRpb25zCisKK3NldCBzb3VyY2VFeHRlbnNpb25zIHtjIGNjIHl9CitzZXQgc291cmNlRXh0ZW5zaW9uc0dsb2IgIntbam9pbiAkc291cmNlRXh0ZW5zaW9ucyAsXX0iCisKK2ZvcmVhY2ggYnVpbGREaXJlY3RvcnkgW3NldCBidWlsZERpcmVjdG9yaWVzIFtnZXRCdWlsZERpcmVjdG9yaWVzXV0geworICAgZm9yZWFjaCBzb3VyY2VGaWxlIFtnbG9iIC1ub2NvbXBsYWluIFtmaWxlIGpvaW4gJGJ1aWxkRGlyZWN0b3J5ICIqLiRzb3VyY2VFeHRlbnNpb25zR2xvYiJdXSB7CisgICAgICByZWdzdWIge14oXC4vKSt9ICRzb3VyY2VGaWxlIHt9IHNvdXJjZUZpbGUKKyAgICAgIGlmIHshW2dlbmVyYXRlZEZpbGUgJHNvdXJjZUZpbGVdfSB7CisgICAgICAgICBsYXBwZW5kIHNvdXJjZUZpbGVzKCRidWlsZERpcmVjdG9yeSkgJHNvdXJjZUZpbGUKKyAgICAgICAgIGdldERlcGVuZGVuY2llcyAkc291cmNlRmlsZQorICAgICAgfQorICAgfQorfQorCitzZXQgZ2VuZXJhdGVkRGVwZW5kZW5jaWVzIFtsaXN0XQorc2V0IG9iamVjdEZpbGVzIFtsaXN0XQorc2V0IGFic29sdXRlU3RyZWFtIFtvcGVuIGFic2RlcHMubWsge1dST05MWSBDUkVBVCBUUlVOQ31dCitmb3JlYWNoIGJ1aWxkRGlyZWN0b3J5IFtsc29ydCAkYnVpbGREaXJlY3Rvcmllc10geworICAgc2V0IHJlbGF0aXZlU3RyZWFtIFtvcGVuIFtmaWxlIGpvaW4gJGJ1aWxkRGlyZWN0b3J5IHJlbGRlcHMubWtdIHtXUk9OTFkgQ1JFQVQgVFJVTkN9XQorCisgICBpZiB7W2luZm8gZXhpc3RzIHNvdXJjZUZpbGVzKCRidWlsZERpcmVjdG9yeSldfSB7CisgICAgICBmb3JlYWNoIHNvdXJjZUZpbGUgW2xzb3J0ICRzb3VyY2VGaWxlcygkYnVpbGREaXJlY3RvcnkpXSB7CisgICAgICAgICBzd2l0Y2ggLWV4YWN0IC0tIFtmaWxlIGV4dGVuc2lvbiAkc291cmNlRmlsZV0geworICAgICAgICAgICAgIi55IiB7CisgICAgICAgICAgICAgICBzZXQgb2JqZWN0RXh0ZW5zaW9uICIudGFiLmMiCisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGRlZmF1bHQgeworICAgICAgICAgICAgICAgc2V0IG9iamVjdEV4dGVuc2lvbiAiLlwkTyIKKyAgICAgICAgICAgIH0KKyAgICAgICAgIH0KKworICAgICAgICAgc2V0IG9iamVjdEZpbGUgIltmaWxlIHJvb3RuYW1lICRzb3VyY2VGaWxlXSRvYmplY3RFeHRlbnNpb24iCisgICAgICAgICBzZXQgb2JqZWN0TmFtZSBbZmlsZSB0YWlsICRvYmplY3RGaWxlXQorCisgICAgICAgICBwdXRzICRhYnNvbHV0ZVN0cmVhbSAiIyBEZXBlbmRlbmNpZXMgZm9yICRvYmplY3RGaWxlOiIKKyAgICAgICAgIHB1dHMgJHJlbGF0aXZlU3RyZWFtICIjIERlcGVuZGVuY2llcyBmb3IgJG9iamVjdE5hbWU6IgorICAgICAgICAgbGFwcGVuZCBvYmplY3RGaWxlcyAkb2JqZWN0RmlsZQorCisgICAgICAgICBmb3JlYWNoIGRlcGVuZGVuY3kgJGRlcGVuZGVuY2llcygkc291cmNlRmlsZSkgeworICAgICAgICAgICAgaWYge1tzZXQgZ2VuZXJhdGVkIFtnZW5lcmF0ZWRGaWxlICRkZXBlbmRlbmN5XV19IHsKKyAgICAgICAgICAgICAgIGxhcHBlbmQgZ2VuZXJhdGVkRGVwZW5kZW5jaWVzICRkZXBlbmRlbmN5CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIHskZ2VuZXJhdGVkIHx8IChbc3RyaW5nIGxlbmd0aCBbc291cmNlRmlsZSAkZGVwZW5kZW5jeV1dID4gMCl9IHsKKyAgICAgICAgICAgICAgIHNldCB0cmVlIEJMRAorICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgIHNldCB0cmVlIFNSQworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBwdXRzICRhYnNvbHV0ZVN0cmVhbSAiXCQoQkxEX1RPUCkkb2JqZWN0RmlsZTogXCQoJHt0cmVlfV9UT1ApJGRlcGVuZGVuY3kiCisgICAgICAgICAgICBwdXRzIC1ub25ld2xpbmUgJHJlbGF0aXZlU3RyZWFtICIkb2JqZWN0TmFtZTogIgorCisgICAgICAgICAgICBpZiB7W3N0cmluZyBlcXVhbCAkYnVpbGREaXJlY3RvcnkgW2ZpbGUgZGlybmFtZSAkZGVwZW5kZW5jeV1dfSB7CisgICAgICAgICAgICAgICBpZiB7IVtzdHJpbmcgZXF1YWwgJHRyZWUgQkxEXX0geworICAgICAgICAgICAgICAgICAgcHV0cyAtbm9uZXdsaW5lICRyZWxhdGl2ZVN0cmVhbSAiXCQoJHt0cmVlfV9ESVIpLyIKKyAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgIHB1dHMgJHJlbGF0aXZlU3RyZWFtIFtmaWxlIHRhaWwgJGRlcGVuZGVuY3ldCisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgcHV0cyAkcmVsYXRpdmVTdHJlYW0gIlwkKCR7dHJlZX1fVE9QKSRkZXBlbmRlbmN5IgorICAgICAgICAgICAgfQorICAgICAgICAgfQorCisgICAgICAgICBwdXRzICRhYnNvbHV0ZVN0cmVhbSAiXHRjZCBcJChARCkgJiYgXCQoTUFLRSkgXCQoQEYpIgorICAgICAgICAgcHV0cyAkYWJzb2x1dGVTdHJlYW0gIiIKKyAgICAgICAgIHB1dHMgJHJlbGF0aXZlU3RyZWFtICIiCisgICAgICB9CisgICB9CisKKyAgIGNsb3NlICRyZWxhdGl2ZVN0cmVhbTsgdW5zZXQgcmVsYXRpdmVTdHJlYW0KK30KKworaWYgeyFbbGVtcHR5IFtzZXQgZ2VuZXJhdGVkRGVwZW5kZW5jaWVzIFtsaW5kZXggW2ludGVyc2VjdDMgW2xybWR1cHMgJGdlbmVyYXRlZERlcGVuZGVuY2llc10gJG9iamVjdEZpbGVzXSAwXV1dfSB7CisgICBwdXRzICRhYnNvbHV0ZVN0cmVhbSAiIyBHZW5lcmF0ZWQgZGVwZW5kZW5jaWVzOiIKKyAgIGZvcmVhY2ggZGVwZW5kZW5jeSBbbHNvcnQgJGdlbmVyYXRlZERlcGVuZGVuY2llc10geworICAgICAgcHV0cyAkYWJzb2x1dGVTdHJlYW0gIlwkKEJMRF9UT1ApJGRlcGVuZGVuY3k6IgorICAgICAgcHV0cyAkYWJzb2x1dGVTdHJlYW0gIlx0Y2QgXCQoQEQpICYmIFwkKE1BS0UpIFwkKEBGKSIKKyAgIH0KKyAgIHB1dHMgJGFic29sdXRlU3RyZWFtICIiCit9CitjbG9zZSAkYWJzb2x1dGVTdHJlYW07IHVuc2V0IGFic29sdXRlU3RyZWFtCisKK2V4aXQgMApkaWZmIC0tZ2l0IGEvVG9vbHMvamF2YWNtZCBiL1Rvb2xzL2phdmFjbWQKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uODhjNTE4OQotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL2phdmFjbWQKQEAgLTAsMCArMSwxMjAgQEAKKyMhL3Vzci9iaW4vZW52IC1TIGphdmEgLS1zb3VyY2UgMTEKKy8qCisgKiBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorICogICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorICoKKyAqIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorICoKKyAqIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyAqLworCitpbXBvcnQgamF2YS5pby5GaWxlOworaW1wb3J0IGphdmEudXRpbC5BcnJheXM7CitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKKworLyogVGhpcyBpcyB0aGUgY2xhc3MgdGhhdCBjb250YWlucyB0aGUgbWFpbigpIG1ldGhvZC4KKyAqIERvbid0IGJlIG1pc2xlZCBieSB0aGUgZmFjdCB0aGF0IGl0IHNlZW1zIHRvIGhhdmUgYSByZXF1aXJlZCBuYW1lLgorICogSXQgY2FuIGFjdHVhbGx5IGhhdmUgYW55IG5hbWUgc28gd2UgY2hvc2UgdG8gZ2l2ZSBpdCBhIGRlc2NyaXB0aXZlIG9uZS4KKyAqIFRoZSBvbmx5IHJ1bGUgaXMgdGhhdCB0aGUgbWFpbigpIG1ldGhvZCBtdXN0IGJlIHdpdGhpbiB0aGUgZmlyc3QgY2xhc3MuCisgKi8KK3B1YmxpYyBjbGFzcyBTY3JpcHRJbXBsZW1lbnRhdGlvbiBleHRlbmRzIFNjcmlwdEhlbHBlciB7CisgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluIChTdHJpbmdbXSBhcmd1bWVudHMpIHsKKyAgICB2YXIgb3BlcmFuZHMgPSBuZXcgU2NyaXB0T3BlcmFuZHMoYXJndW1lbnRzKTsKKworICAgIFN0cmluZyBhY3Rpb24gPSBvcGVyYW5kcy5uZXh0KCk7CisgICAgaWYgKGFjdGlvbiA9PSBudWxsKSBzeW50YXhFcnJvcigiYWN0aW9uIG5vdCBzcGVjaWZpZWQiKTsKKworICAgIHN3aXRjaCAoYWN0aW9uKSB7CisgICAgICBjYXNlICJqdm1wYXRoIjogeworICAgICAgICB2ZXJpZnlOb01vcmVQYXJhbWV0ZXJzKG9wZXJhbmRzKTsKKworICAgICAgICBTdHJpbmcgcGF0aCA9IGdldFByb2Nlc3NJbmZvcm1hdGlvbigpLmNvbW1hbmQoKS5vckVsc2UobnVsbCk7CisgICAgICAgIGlmIChwYXRoICE9IG51bGwpIHB1dFNjcmlwdE91dHB1dCgiJXMiLCBwYXRoKTsKKworICAgICAgICBicmVhazsKKyAgICAgIH0KKworICAgICAgZGVmYXVsdDogeworICAgICAgICBzeW50YXhFcnJvcigidW5rbm93biBhY3Rpb246ICVzIiwgYWN0aW9uKTsKKyAgICAgIH0KKyAgICB9CisgIH0KK30KKworcHVibGljIGNsYXNzIFNjcmlwdEhlbHBlciB7CisgIHB1YmxpYyBzdGF0aWMgUHJvY2Vzc0hhbmRsZS5JbmZvIGdldFByb2Nlc3NJbmZvcm1hdGlvbiAoKSB7CisgICAgcmV0dXJuIFByb2Nlc3NIYW5kbGUuY3VycmVudCgpLmluZm8oKTsKKyAgfQorCisgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldFNjcmlwdFBhdGggKCkgeworICAgIFN0cmluZ1tdIGFyZ3VtZW50cyA9IGdldFByb2Nlc3NJbmZvcm1hdGlvbigpLmFyZ3VtZW50cygpLm9yRWxzZShudWxsKTsKKyAgICBpZiAoYXJndW1lbnRzID09IG51bGwpIHJldHVybiBudWxsOworCisgICAgZmluYWwgaW50IGluZGV4ID0gMjsKKyAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA8PSBpbmRleCkgcmV0dXJuIG51bGw7CisgICAgcmV0dXJuIGFyZ3VtZW50c1tpbmRleF07CisgIH0KKworICBwdWJsaWMgc3RhdGljIEZpbGUgZ2V0U2NyaXB0RmlsZSAoKSB7CisgICAgU3RyaW5nIHBhdGggPSBnZXRTY3JpcHRQYXRoKCk7CisgICAgaWYgKHBhdGggPT0gbnVsbCkgcmV0dXJuIG51bGw7CisgICAgcmV0dXJuIG5ldyBGaWxlKHBhdGgpOworICB9CisKKyAgcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0U2NyaXB0TmFtZSAoKSB7CisgICAgRmlsZSBmaWxlID0gZ2V0U2NyaXB0RmlsZSgpOworICAgIGlmIChmaWxlID09IG51bGwpIHJldHVybiBudWxsOworICAgIHJldHVybiBmaWxlLmdldE5hbWUoKTsKKyAgfQorCisgIHB1YmxpYyBzdGF0aWMgdm9pZCBwdXRTY3JpcHRNZXNzYWdlIChTdHJpbmcgZm9ybWF0LCBPYmplY3QuLi4gYXJndW1lbnRzKSB7CisgICAgU3RyaW5nIG1lc3NhZ2UgPSBTdHJpbmcuZm9ybWF0KGZvcm1hdCwgYXJndW1lbnRzKTsKKyAgICBTdHJpbmcgdGFnID0gZ2V0U2NyaXB0TmFtZSgpOworCisgICAgaWYgKCh0YWcgIT0gbnVsbCkgJiYgIXRhZy5pc0VtcHR5KCkpIHsKKyAgICAgIFN0cmluZyBwcmVmaXggPSB0YWcgKyAiOiAiOworICAgICAgbWVzc2FnZSA9IHByZWZpeCArIG1lc3NhZ2U7CisKKyAgICAgIHByZWZpeCA9ICIgIi5yZXBlYXQocHJlZml4Lmxlbmd0aCgpKTsKKyAgICAgIG1lc3NhZ2UgPSBtZXNzYWdlLnJlcGxhY2VBbGwoIihcbikiLCAoIiQxIiArIHByZWZpeCkpOworICAgIH0KKworICAgIFN5c3RlbS5lcnIucHJpbnRsbihtZXNzYWdlKTsKKyAgfQorCisgIHB1YmxpYyBzdGF0aWMgdm9pZCBzeW50YXhFcnJvciAoU3RyaW5nIGZvcm1hdCwgT2JqZWN0Li4uIGFyZ3VtZW50cykgeworICAgIHB1dFNjcmlwdE1lc3NhZ2UoZm9ybWF0LCBhcmd1bWVudHMpOworICAgIFN5c3RlbS5leGl0KDIpOworICB9CisKKyAgcHVibGljIHN0YXRpYyB2b2lkIHB1dFRvb01hbnlQYXJhbWV0ZXJzICgpIHsKKyAgICBzeW50YXhFcnJvcigidG9vIG1hbnkgcGFyYW1ldGVycyIpOworICB9CisKKyAgcHVibGljIHN0YXRpYyB2b2lkIHZlcmlmeU5vTW9yZVBhcmFtZXRlcnMgKFNjcmlwdE9wZXJhbmRzIG9wZXJhbmRzKSB7CisgICAgaWYgKCFvcGVyYW5kcy5pc0VtcHR5KCkpIHB1dFRvb01hbnlQYXJhbWV0ZXJzKCk7CisgIH0KKworICBwdWJsaWMgc3RhdGljIHZvaWQgcHV0U2NyaXB0T3V0cHV0IChTdHJpbmcgZm9ybWF0LCBPYmplY3QuLi4gYXJndW1lbnRzKSB7CisgICAgU3lzdGVtLm91dC5wcmludGxuKFN0cmluZy5mb3JtYXQoZm9ybWF0LCBhcmd1bWVudHMpKTsKKyAgfQorfQorCitwdWJsaWMgY2xhc3MgU2NyaXB0T3BlcmFuZHMgZXh0ZW5kcyBBcnJheUxpc3Q8U3RyaW5nPiB7CisgIHB1YmxpYyBTY3JpcHRPcGVyYW5kcyAoU3RyaW5nLi4uIG9wZXJhbmRzKSB7CisgICAgc3VwZXIoQXJyYXlzLmFzTGlzdChvcGVyYW5kcykpOworICB9CisKKyAgcHVibGljIFN0cmluZyBuZXh0ICgpIHsKKyAgICByZXR1cm4gaXNFbXB0eSgpPyBudWxsOiByZW1vdmUoMCk7CisgIH0KK30KZGlmZiAtLWdpdCBhL1Rvb2xzL2t0YmNoZWNrIGIvVG9vbHMva3RiY2hlY2sKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZWU1MWFkNwotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL2t0YmNoZWNrCkBAIC0wLDAgKzEsMjcgQEAKKyMhL2Jpbi9iYXNoCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisjICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorIworIyBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisjCisjIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisjCisjIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyMgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorIyBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyMKKyMgV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworIworIyBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworLiAiJChkaXJuYW1lICIkezB9IikvLi4vcHJvbG9ndWUuc2giCitzZXRCdWlsZFJvb3QKKworc2V0IC1lCitjZCAiJHtidWlsZFJvb3R9L1Byb2dyYW1zIgorbWFrZSAtLXNpbGVudCBicmx0dHkta3RiCisuL2JybHR0eS1rdGIgLVQuLi9UYWJsZXMgLUQuLi9saWIgLWEgIiR7QH0iCitleGl0IDAKZGlmZiAtLWdpdCBhL1Rvb2xzL2x1YWNtZCBiL1Rvb2xzL2x1YWNtZApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4xYmIwNDUyCi0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvbHVhY21kCkBAIC0wLDAgKzEsMjIgQEAKKyMhL2Jpbi9iYXNoCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIGxpYmJybGFwaSAtIEEgbGlicmFyeSBwcm92aWRpbmcgYWNjZXNzIHRvIGJyYWlsbGUgdGVybWluYWxzIGZvciBhcHBsaWNhdGlvbnMuCisjCisjIENvcHlyaWdodCAoQykgMjAwNi0yMDIzIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4KKyMKKyMgbGliYnJsYXBpIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisuICIkezAlLyp9Ly4uL2JybHR0eS1wcm9sb2d1ZS5zaCIKK2V4cG9ydCBMVUFfUEFUSD0iJHtwcm9ncmFtRGlyZWN0b3J5fS8uLi8/Lmx1YTs7IgorZXhlYyBsdWEgIiR7cHJvZ3JhbURpcmVjdG9yeX0vJHtwcm9ncmFtTmFtZX0ubHVhIiAiJHtAfSIKK2V4aXQgIiR7P30iCmRpZmYgLS1naXQgYS9Ub29scy9sdWFjbWQubHVhIGIvVG9vbHMvbHVhY21kLmx1YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNWFiY2E4Ci0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvbHVhY21kLmx1YQpAQCAtMCwwICsxLDQ2IEBACistLVtbCisgIGxpYmJybGFwaSAtIEEgbGlicmFyeSBwcm92aWRpbmcgYWNjZXNzIHRvIGJyYWlsbGUgdGVybWluYWxzIGZvciBhcHBsaWNhdGlvbnMuCisgCisgIENvcHlyaWdodCAoQykgMjAwNi0yMDIzIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4KKyAKKyAgbGliYnJsYXBpIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAKKyAgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIAorICBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisgCisgIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorXV0KKworcmVxdWlyZSgiYnJsdHR5LXByb2xvZ3VlIikKKworZnVuY3Rpb24gc2hvd0xpYnJhcnlEaXJlY3RvcnkgKCkKKyAgZm9yIG51bWJlciwgY29tcG9uZW50IGluIGlwYWlycyhzcGxpdFN0cmluZyhwYWNrYWdlLmNwYXRoLCAiOyIpKSBkbworICAgIGxvY2FsIGRpcmVjdG9yeSwgbmFtZSA9IGNvbXBvbmVudDptYXRjaCgiXiguKikvKC4tKSQiKQorICAgIGlmIG5hbWUgfj0gIj8uc28iIHRoZW4gZ290byBuZXh0IGVuZAorCisgICAgaWYgbm90IGRpcmVjdG9yeSB0aGVuIGdvdG8gbmV4dCBlbmQKKyAgICBpZiAjZGlyZWN0b3J5ID09IDAgdGhlbiBnb3RvIG5leHQgZW5kCisKKyAgICBpZiBkaXJlY3Rvcnk6c3ViKDEsMSkgfj0gIi8iIHRoZW4gZ290byBuZXh0IGVuZAorICAgIGlmIHN0cmluZ0NvbnRhaW5zKGRpcmVjdG9yeSwgIj8iKSB0aGVuIGdvdG8gbmV4dCBlbmQKKworICAgIHByaW50KGRpcmVjdG9yeSkKKyAgICBicmVhaworCisgIDo6bmV4dDo6CisgIGVuZAorZW5kCisKK2FjdGlvbiA9IG5leHRQcm9ncmFtQXJndW1lbnQoImFjdGlvbiIpCisKK2lmIGFjdGlvbiA9PSAibGliZGlyIiB0aGVuCisgIHNob3dMaWJyYXJ5RGlyZWN0b3J5KCkKK2Vsc2UKKyAgc3ludGF4RXJyb3Ioc3RyaW5nLmZvcm1hdCgidW5rbm93biBhY3Rpb246ICVzIiwgYWN0aW9uKSkKK2VuZAorCitvcy5leGl0KCkKZGlmZiAtLWdpdCBhL1Rvb2xzL21rYnJsdHR5IGIvVG9vbHMvbWticmx0dHkKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYTQzYzAyYgotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL21rYnJsdHR5CkBAIC0wLDAgKzEsMzggQEAKKyMhL3Vzci9iaW4vZW52IGJhc2gKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyMgICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisjCisjIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyMKKyMgQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisuICIkKGRpcm5hbWUgIiR7MH0iKS8uLi9wcm9sb2d1ZS5zaCIKK3BhcnNlUHJvZ3JhbUFyZ3VtZW50cyAiJHtAfSIKKworc2V0IC1lCitzZXRCdWlsZFJvb3QKK2NkICIke2J1aWxkUm9vdH0iCisKK21ha2VUYXJnZXRzPSgKKyAgIGJybHR0eSBicmFpbGxlLWRyaXZlcnMgc3BlZWNoLWRyaXZlcnMgc2NyZWVuLWRyaXZlcnMKKyAgIGJybHR0eS10cnR4dCBicmx0dHktdHRiIGJybHR0eS1jdGIgYnJsdHR5LWF0YiBicmx0dHkta3RiCisgICBicmx0dHktdHVuZSBicmx0dHktbW9yc2UgYnJsdHR5LXB0eQorICAgYnJsdHR5LWxzY21kcyBicmx0dHktaGlkCisgICBicmx0dHktY2xkciBicmx0dHktbHNpbmMKKyAgIGJybHRlc3Qgc3BrdGVzdCBzY3J0ZXN0IGNyY3Rlc3QgbXNndGVzdAorICAgYWxsLWFwaS1iaW5kaW5ncyBicmx0dHktY2xpcCB4YnJsYXBpIGFwaXRlc3QKKykKKworZ21ha2UgLXMgLUMgIiR7cHJvZ3JhbXNTdWJkaXJlY3Rvcnl9IiAiJHttYWtlVGFyZ2V0c1tAXX0iCitleGl0IDAKZGlmZiAtLWdpdCBhL1Rvb2xzL21rY3RiY2hhcnMgYi9Ub29scy9ta2N0YmNoYXJzCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjAwYWU5NjYKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9ta2N0YmNoYXJzCkBAIC0wLDAgKzEsOTEgQEAKKyMhL3Vzci9iaW4vZW52IHRjbHNoCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisjICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorIworIyBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisjCisjIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisjCisjIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyMgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorIyBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyMKKyMgV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworIworIyBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworc291cmNlIFtmaWxlIGpvaW4gW2ZpbGUgZGlybmFtZSBbaW5mbyBzY3JpcHRdXSAiLi4iICJwcm9sb2d1ZS50Y2wiXQorc291cmNlIFtmaWxlIGpvaW4gJHNjcmlwdERpcmVjdG9yeSBicmFpbGxlLnRjbF0KKworc2V0IG9wdGlvbkRlZmluaXRpb25zIHsKK30KKworc2V0IGlucHV0U3RyZWFtIHN0ZGluCitzZXQgb3V0cHV0U3RyZWFtIHN0ZG91dAorcHJvY2Vzc1Byb2dyYW1Bcmd1bWVudHMgb3B0aW9uVmFsdWVzICRvcHRpb25EZWZpbml0aW9ucworCitwcm9jIHByb2Nlc3NDaGFyYWN0ZXIge3RleHQgYnJhaWxsZSBkZXNjcmlwdGlvbn0geworICAgaWYge1tzdHJpbmcgbGVuZ3RoICR0ZXh0XSA9PSAxfSB7CisgICAgICBzZXQgY29kZXBvaW50IFticmxDaGFyYWN0ZXJUb0NvZGVwb2ludCAkdGV4dF0KKyAgIH0gZWxzZSB7CisgICAgICBzZXQgY29kZXBvaW50IFticmxIZXhhZGVjaW1hbFRvRGVjaW1hbCAkdGV4dF0KKyAgICAgIHNldCB0ZXh0IFticmxDb2RlcG9pbnRUb0NoYXJhY3RlciAkY29kZXBvaW50XQorICAgfQorCisgICBzZXQgbnVtYmVycyAiIgorICAgc2V0IGNlbGxzICIiCisKKyAgIGZvcmVhY2ggY2hhcmFjdGVyIFtzcGxpdCAkYnJhaWxsZSAiIl0geworICAgICAgaWYge1tzdHJpbmcgbGVuZ3RoICRudW1iZXJzXSA+IDB9IHsKKyAgICAgICAgIGFwcGVuZCBudW1iZXJzICItIgorICAgICAgfQorCisgICAgICBzZXQgZG90cyBbYnJsQ2hhcmFjdGVyVG9Eb3RzICRjaGFyYWN0ZXJdCisgICAgICBhcHBlbmQgbnVtYmVycyAkZG90cworICAgICAgYXBwZW5kIGNlbGxzIFticmxEb3RzVG9DaGFyYWN0ZXIgJGRvdHNdCisgICB9CisKKyAgIGdsb2JhbCBvdXRwdXRTdHJlYW0KKyAgIHB1dHMgJG91dHB1dFN0cmVhbSAiYWx3YXlzXHRbYnJsRm9ybWF0Q29kZXBvaW50ICRjb2RlcG9pbnRdXHQkbnVtYmVyc1x0IyAkdGV4dCAkY2VsbHNcdCRkZXNjcmlwdGlvbiIKK30KKworcHJvYyBwcm9jZXNzSW5wdXQge30geworICAgZ2xvYmFsIGlucHV0U3RyZWFtCisKKyAgIHdoaWxlIHtbZ2V0cyAkaW5wdXRTdHJlYW0gbGluZV0gPj0gMH0geworICAgICAgc2V0IGxpbmUgW3N0cmluZyB0cmltICRsaW5lXQorCisgICAgICBpZiB7W3N0cmluZyBsZW5ndGggJGxpbmVdID09IDB9IHsKKyAgICAgICAgIGNvbnRpbnVlCisgICAgICB9CisKKyAgICAgIGlmIHtbc3RyaW5nIGluZGV4ICRsaW5lIDBdID09ICIjIn0geworICAgICAgICAgY29udGludWUKKyAgICAgIH0KKworICAgICAgcmVnc3ViIC1hbGwge1xzK30gJGxpbmUgIiAiIGxpbmUKKyAgICAgIHNldCBkZXNjcmlwdGlvbiBbam9pbiBbbGFzc2lnbiBbc3BsaXQgJGxpbmUgIiAiXSB0ZXh0IGJyYWlsbGVdICIgIl0KKworICAgICAgaWYge1tzdHJpbmcgbGVuZ3RoICR0ZXh0XSA9PSAwfSB7CisgICAgICAgICBzZXQgcHJvYmxlbSAibWlzc2luZyB0ZXh0dWFsIHJlcHJlc2VudGF0aW9uIgorICAgICAgfSBlbHNlaWYge1tzdHJpbmcgbGVuZ3RoICRicmFpbGxlXSA9PSAwfSB7CisgICAgICAgICBzZXQgcHJvYmxlbSAibWlzc2luZyBicmFpbGxlIHJlcHJlc2VudGF0aW9uIgorICAgICAgfSBlbHNlaWYge1tzdHJpbmcgbGVuZ3RoICRkZXNjcmlwdGlvbl0gPT0gMH0geworICAgICAgICAgc2V0IHByb2JsZW0gIm1pc3NpbmcgY2hhcmFjdGVyIGRlc2NyaXB0aW9uIgorICAgICAgfSBlbHNlIHsKKyAgICAgICAgIHRyeSB7CisgICAgICAgICAgICBwcm9jZXNzQ2hhcmFjdGVyICR0ZXh0ICRicmFpbGxlICRkZXNjcmlwdGlvbgorICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgIH0gdHJhcCBbbGlzdCAkOjpicmxFcnJvckNhdGVnb3J5XSB7cHJvYmxlbX0geworICAgICAgICAgfQorICAgICAgfQorCisgICAgICB3cml0ZVByb2dyYW1NZXNzYWdlICIkcHJvYmxlbTogJGxpbmUiCisgICB9Cit9CisKK3Byb2Nlc3NJbnB1dAorZXhpdCAwCmRpZmYgLS1naXQgYS9Ub29scy9wYWNrYWdlcy5kL2Fway5zaCBiL1Rvb2xzL3BhY2thZ2VzLmQvYXBrLnNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM5MDlhNDgKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9wYWNrYWdlcy5kL2Fway5zaApAQCAtMCwwICsxLDQ4IEBACisjIS9iaW4vc2gKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyMgICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisjCisjIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyMKKyMgQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitsaXN0SW5zdGFsbGVkUGFja2FnZXMoKSB7CisgICBhcGsgbGlzdCAtLWluc3RhbGxlZCB8IGF3ayAnCisgICAgICB7CisgICAgICAgICBnc3ViKC8tWzAtOV0uKi8sICIiLCAkMSkKKyAgICAgICAgIHByaW50ICQxCisgICAgICB9CisgICAnIHwgc29ydCAtdQorfQorCitpbnN0YWxsUGFja2FnZXMoKSB7CisgICBhcGsgYWRkIC0tcXVpZXQgLS1uby1wcm9ncmVzcyAtLSAiJHtAfSIKK30KKworcmVtb3ZlUGFja2FnZXMoKSB7CisgICBhcGsgZGVsIC0tcXVpZXQgLS1uby1wcm9ncmVzcyAtLSAiJHtAfSIKK30KKworZGVzY3JpYmVQYWNrYWdlKCkgeworICAgYXBrIGluZm8gLS0gIiR7MX0iCit9CisKK3doaWNoUGFja2FnZSgpIHsKKyAgIHVuc3VwcG9ydGVkUGFja2FnZUFjdGlvbiB3aGljaAorfQorCitzZWFyY2hQYWNrYWdlKCkgeworICAgYXBrIHNlYXJjaCAtLWRlc2NyaXB0aW9uIC0tICIkezF9IgorfQorCmRpZmYgLS1naXQgYS9Ub29scy9wYWNrYWdlcy5kL2FwdC5zaCBiL1Rvb2xzL3BhY2thZ2VzLmQvYXB0LnNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM2ODEzZjgKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9wYWNrYWdlcy5kL2FwdC5zaApAQCAtMCwwICsxLDQzIEBACisjIS9iaW4vc2gKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyMgICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisjCisjIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyMKKyMgQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitsaXN0SW5zdGFsbGVkUGFja2FnZXMoKSB7CisgICBkcGtnLXF1ZXJ5IC0tc2hvdyAtLXNob3dmb3JtYXQgJyR7UGFja2FnZX1cbicKK30KKworaW5zdGFsbFBhY2thZ2VzKCkgeworICAgYXB0IC0teWVzIC0tcXVpZXQgLS1xdWlldCAtLXF1aWV0IGluc3RhbGwgLS0gIiR7QH0iCit9CisKK3JlbW92ZVBhY2thZ2VzKCkgeworICAgYXB0IC0teWVzIC0tcXVpZXQgLS1xdWlldCAtLXF1aWV0IHJlbW92ZSAtLSAiJHtAfSIKK30KKworZGVzY3JpYmVQYWNrYWdlKCkgeworICAgYXB0LWNhY2hlIHNob3cgLS0gIiR7MX0iCit9CisKK3doaWNoUGFja2FnZSgpIHsKKyAgIGRwa2cgLS1zZWFyY2ggLS0gIiR7MX0iCit9CisKK3NlYXJjaFBhY2thZ2UoKSB7CisgICBhcHQtY2FjaGUgc2VhcmNoIC0tICcoXnxbXls6YWxwaGE6XV0pJyIkezF9IicoJHxbXls6YWxwaGE6XV0pJworfQorCmRpZmYgLS1naXQgYS9Ub29scy9wYWNrYWdlcy5kL2JyZXcuc2ggYi9Ub29scy9wYWNrYWdlcy5kL2JyZXcuc2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmJjNTEzMgotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL3BhY2thZ2VzLmQvYnJldy5zaApAQCAtMCwwICsxLDQ1IEBACisjIS9iaW4vc2gKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyMgICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisjCisjIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyMKKyMgQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitsaXN0SW5zdGFsbGVkUGFja2FnZXMoKSB7CisgICBicmV3IGxpc3QgLTEgLS1mdWxsLW5hbWUKK30KKworaW5zdGFsbFBhY2thZ2VzKCkgeworICAgYnJldyBpbnN0YWxsICIke0B9IgorfQorCityZW1vdmVQYWNrYWdlcygpIHsKKyAgIGJyZXcgdW5pbnN0YWxsICIke0B9IgorfQorCitkZXNjcmliZVBhY2thZ2UoKSB7CisgICBicmV3IGRlc2MgLS1ldmFsLWFsbCAiJHsxfSIKK30KKword2hpY2hQYWNrYWdlKCkgeworICAgYnJldyB3aGljaC1mb3JtdWxhIC0tZXhwbGFpbiAiJHsxfSIKK30KKworc2VhcmNoUGFja2FnZSgpIHsKKyAgIGJyZXcgc2VhcmNoICIkezF9IgorfQorCitleHBvcnQgSE9NRUJSRVdfTk9fRU5WX0hJTlRTPTEKK2V4cG9ydCBIT01FQlJFV19OT19JTlNUQUxMX0NMRUFOVVA9MQpkaWZmIC0tZ2l0IGEvVG9vbHMvcGFja2FnZXMuZC9kbmYuc2ggYi9Ub29scy9wYWNrYWdlcy5kL2RuZi5zaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMjAyMGQ5Ci0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvcGFja2FnZXMuZC9kbmYuc2gKQEAgLTAsMCArMSw0MyBAQAorIyEvYmluL3NoCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisjICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorIworIyBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisjCisjIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisjCisjIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyMgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorIyBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyMKKyMgV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworIworIyBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworbGlzdEluc3RhbGxlZFBhY2thZ2VzKCkgeworICAgcnBtIC0tcXVlcnkgLS1hbGwgLS1xdWVyeWZvcm1hdCAnJXtOQU1FfVxuJworfQorCitpbnN0YWxsUGFja2FnZXMoKSB7CisgICBkbmYgLXkgLS1xdWlldCBpbnN0YWxsICIke0B9IgorfQorCityZW1vdmVQYWNrYWdlcygpIHsKKyAgIGRuZiAteSAtLXF1aWV0IHJlbW92ZSAiJHtAfSIKK30KKworZGVzY3JpYmVQYWNrYWdlKCkgeworICAgZG5mIC0tcXVpZXQgaW5mbyAiJHsxfSIKK30KKword2hpY2hQYWNrYWdlKCkgeworICAgZG5mIC0tcXVpZXQgd2hhdHByb3ZpZGVzICIkezF9IgorfQorCitzZWFyY2hQYWNrYWdlKCkgeworICAgZG5mIC0tcXVpZXQgc2VhcmNoICIkezF9IgorfQorCmRpZmYgLS1naXQgYS9Ub29scy9wYWNrYWdlcy5kL3BhY21hbi5zaCBiL1Rvb2xzL3BhY2thZ2VzLmQvcGFjbWFuLnNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVlZmU4ZjUKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9wYWNrYWdlcy5kL3BhY21hbi5zaApAQCAtMCwwICsxLDQzIEBACisjIS9iaW4vc2gKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyMgICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisjCisjIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyMKKyMgQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitsaXN0SW5zdGFsbGVkUGFja2FnZXMoKSB7CisgICBwYWNtYW4gLS1xdWVyeSAtLW5hdGl2ZSB8IGF3ayAne3ByaW50ICQxfScKK30KKworaW5zdGFsbFBhY2thZ2VzKCkgeworICAgcGFjbWFuIC0tc3luYyAtLXF1aWV0IC0tbm9wcm9ncmVzc2JhciAtLW5vY29uZmlybSAtLSAiJHtAfSIKK30KKworcmVtb3ZlUGFja2FnZXMoKSB7CisgICBwYWNtYW4gLS1yZW1vdmUgLS1ub3Byb2dyZXNzYmFyIC0tbm9jb25maXJtIC0tICIke0B9IgorfQorCitkZXNjcmliZVBhY2thZ2UoKSB7CisgICBwYWNtYW4gLS1zeW5jIC0taW5mbyAtLSAiJHsxfSIKK30KKword2hpY2hQYWNrYWdlKCkgeworICAgcGFjbWFuIC0tZmlsZXMgLS0gIiR7MX0iCit9CisKK3NlYXJjaFBhY2thZ2UoKSB7CisgICBwYWNtYW4gLS1zeW5jIC0tc2VhcmNoIC0tICIkezF9IgorfQorCmRpZmYgLS1naXQgYS9Ub29scy9wYWNrYWdlcy5kL3BrZy5zaCBiL1Rvb2xzL3BhY2thZ2VzLmQvcGtnLnNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEwNmQxODIKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9wYWNrYWdlcy5kL3BrZy5zaApAQCAtMCwwICsxLDQzIEBACisjIS9iaW4vc2gKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyMgICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisjCisjIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyMKKyMgQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitsaXN0SW5zdGFsbGVkUGFja2FnZXMoKSB7CisgICBwa2cgcXVlcnkgLS1hbGwgLS0gIiVuIgorfQorCitpbnN0YWxsUGFja2FnZXMoKSB7CisgICBwa2cgaW5zdGFsbCAtLXF1aWV0IC0teWVzIC0tICIke0B9IgorfQorCityZW1vdmVQYWNrYWdlcygpIHsKKyAgIHBrZyBkZWxldGUgLS1xdWlldCAtLXllcyAtLSAiJHtAfSIKK30KKworZGVzY3JpYmVQYWNrYWdlKCkgeworICAgcGtnIHJxdWVyeSAtLSAnJW4gJXYgJXFcbiVjXG4lZScgIiR7MX0iCit9CisKK3doaWNoUGFja2FnZSgpIHsKKyAgIHBrZyB3aGljaCAtLSAiJHsxfSIKK30KKworc2VhcmNoUGFja2FnZSgpIHsKKyAgIHBrZyBzZWFyY2ggLS1zZWFyY2ggZGVzY3JpcHRpb24gLS1sYWJlbCBwa2ctbmFtZSAtLXF1ZXJ5LW1vZGlmaWVyIGNvbW1lbnQgLS0gIiR7MX0iCit9CisKZGlmZiAtLWdpdCBhL1Rvb2xzL3BhY2thZ2VzLmQvcGtnX2luZm8uc2ggYi9Ub29scy9wYWNrYWdlcy5kL3BrZ19pbmZvLnNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgzMDNjNTYKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9wYWNrYWdlcy5kL3BrZ19pbmZvLnNoCkBAIC0wLDAgKzEsNDMgQEAKKyMhL2Jpbi9zaAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorIyAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyMKKyMgQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorIworIyBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorIworIyBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisjIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyMgbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisjCisjIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK2xpc3RJbnN0YWxsZWRQYWNrYWdlcygpIHsKKyAgIHBrZ19pbmZvIC1xIC1hIHwgc2VkIC1lICdzL15cKC4qXCktLiokL1wxLycKK30KKworaW5zdGFsbFBhY2thZ2VzKCkgeworICAgcGtnX2FkZCAtSSAteCAiJHtAfSIKK30KKworcmVtb3ZlUGFja2FnZXMoKSB7CisgICBwa2dfZGVsZXRlIC1JIC14ICIke0B9IgorfQorCitkZXNjcmliZVBhY2thZ2UoKSB7CisgICBwa2dfaW5mbyAiJHsxfSIKK30KKword2hpY2hQYWNrYWdlKCkgeworICAgcGtnX2luZm8gLUUgIiR7MX0iCit9CisKK3NlYXJjaFBhY2thZ2UoKSB7CisgICBwa2dfaW5mbyAtUSAtcSAiJHsxfSIKK30KKwpkaWZmIC0tZ2l0IGEvVG9vbHMvcGFja2FnZXMuZC9zdHVicy5zaCBiL1Rvb2xzL3BhY2thZ2VzLmQvc3R1YnMuc2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGM1MTg4NgotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL3BhY2thZ2VzLmQvc3R1YnMuc2gKQEAgLTAsMCArMSw0MyBAQAorIyEvYmluL3NoCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisjICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorIworIyBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisjCisjIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisjCisjIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyMgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorIyBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyMKKyMgV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworIworIyBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworbGlzdEluc3RhbGxlZFBhY2thZ2VzKCkgeworICAgdW5zdXBwb3J0ZWRQYWNrYWdlQWN0aW9uIGxpc3QKK30KKworaW5zdGFsbFBhY2thZ2VzKCkgeworICAgdW5zdXBwb3J0ZWRQYWNrYWdlQWN0aW9uIGluc3RhbGwKK30KKworcmVtb3ZlUGFja2FnZXMoKSB7CisgICB1bnN1cHBvcnRlZFBhY2thZ2VBY3Rpb24gcmVtb3ZlCit9CisKK2Rlc2NyaWJlUGFja2FnZSgpIHsKKyAgIHVuc3VwcG9ydGVkUGFja2FnZUFjdGlvbiBkZXNjcmliZQorfQorCit3aGljaFBhY2thZ2UoKSB7CisgICB1bnN1cHBvcnRlZFBhY2thZ2VBY3Rpb24gd2hpY2gKK30KKworc2VhcmNoUGFja2FnZSgpIHsKKyAgIHVuc3VwcG9ydGVkUGFja2FnZUFjdGlvbiBzZWFyY2gKK30KKwpkaWZmIC0tZ2l0IGEvVG9vbHMvcGFja2FnZXMuZC94YnBzLnNoIGIvVG9vbHMvcGFja2FnZXMuZC94YnBzLnNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJlMmMwMTgKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9wYWNrYWdlcy5kL3hicHMuc2gKQEAgLTAsMCArMSw0OCBAQAorIyEvYmluL3NoCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisjICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorIworIyBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisjCisjIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisjCisjIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyMgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorIyBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyMKKyMgV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworIworIyBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworbGlzdEluc3RhbGxlZFBhY2thZ2VzKCkgeworICAgeGJwcy1xdWVyeSAtLWxpc3QtcGtncyB8IGF3ayAnCisgICAgICB7CisgICAgICAgICBzdWIoLy1bMC05XS4qLywgIiIsICQyKQorICAgICAgICAgcHJpbnQgJDIKKyAgICAgIH0KKyAgICcKK30KKworaW5zdGFsbFBhY2thZ2VzKCkgeworICAgeGJwcy1pbnN0YWxsIC0teWVzIC0tICIke0B9IgorfQorCityZW1vdmVQYWNrYWdlcygpIHsKKyAgIHhicHMtcmVtb3ZlIC0teWVzIC0tICIke0B9IgorfQorCitkZXNjcmliZVBhY2thZ2UoKSB7CisgICB4YnBzLXF1ZXJ5IC0tcHJvcGVydHkgcGtndmVyLGFyY2hpdGVjdHVyZSxob21lcGFnZSxzdGF0ZSxzaG9ydF9kZXNjIC0tc2hvdyAiJHsxfSIKK30KKword2hpY2hQYWNrYWdlKCkgeworICAgeGJwcy1xdWVyeSAtLW93bmVkYnkgIiR7MX0iCit9CisKK3NlYXJjaFBhY2thZ2UoKSB7CisgICB4YnBzLXF1ZXJ5IC0tc2VhcmNoICIkezF9IgorfQorCmRpZmYgLS1naXQgYS9Ub29scy9wYWNrYWdlcy5kL3p5cHBlci5zaCBiL1Rvb2xzL3BhY2thZ2VzLmQvenlwcGVyLnNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNjNWExN2EKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9wYWNrYWdlcy5kL3p5cHBlci5zaApAQCAtMCwwICsxLDQ5IEBACisjIS9iaW4vc2gKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyMgICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisjCisjIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyMKKyMgQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitsaXN0SW5zdGFsbGVkUGFja2FnZXMoKSB7CisgICB6eXBwZXIgLS1xdWlldCBwYWNrYWdlcyAtLWluc3RhbGxlZC1vbmx5IHwgYXdrIC0tZmllbGQtc2VwYXJhdG9yICJ8IiAnCisgICAgICBOUiA+IDIgeworICAgICAgICAgc3ViKC9eXHMqLywgIiIsICQzKQorICAgICAgICAgc3ViKC9ccyokLywgIiIsICQzKQorICAgICAgICAgcHJpbnQgJDMKKyAgICAgIH0KKyAgICcgfCBzb3J0IC11Cit9CisKK2luc3RhbGxQYWNrYWdlcygpIHsKKyAgIHp5cHBlciAtLXF1aWV0IGluc3RhbGwgLS1uby1jb25maXJtIC0tICIke0B9IgorfQorCityZW1vdmVQYWNrYWdlcygpIHsKKyAgIHp5cHBlciAtLXF1aWV0IHJlbW92ZSAtLW5vLWNvbmZpcm0gLS0gIiR7QH0iCit9CisKK2Rlc2NyaWJlUGFja2FnZSgpIHsKKyAgIHp5cHBlciAtLXF1aWV0IGluZm8gLS0gIiR7MX0iCit9CisKK3doaWNoUGFja2FnZSgpIHsKKyAgIHp5cHBlciAtLXF1aWV0IHdoYXQtcHJvdmlkZXMgLS0gIiR7MX0iCit9CisKK3NlYXJjaFBhY2thZ2UoKSB7CisgICB6eXBwZXIgLS1xdWlldCBzZWFyY2ggLS1zb3J0LWJ5LW5hbWUgLS1zZWFyY2gtZGVzY3JpcHRpb25zIC0tICIkezF9IgorfQorCmRpZmYgLS1naXQgYS9Ub29scy9wYWNrYWdlcy5zaCBiL1Rvb2xzL3BhY2thZ2VzLnNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc2ZjMyOWUKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9wYWNrYWdlcy5zaApAQCAtMCwwICsxLDU4IEBACisjIS9iaW4vYmFzaAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorIyAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyMKKyMgQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorIworIyBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorIworIyBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisjIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyMgbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisjCisjIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK3NldFBhY2thZ2VNYW5hZ2VyKCkgeworICAgbG9jYWwgLXIgY29tbWFuZHM9KAorICAgICAgL3Vzci9sb2NhbC9iaW4vYnJldworCisgICAgICAvc2Jpbi9hcGsKKyAgICAgIC91c3IvYmluL2FwdAorICAgICAgL3Vzci9iaW4vZG5mCisgICAgICAvdXNyL3NiaW4vcGFjbWFuCisgICAgICAvdXNyL3NiaW4vcGtnCisgICAgICAvdXNyL3NiaW4vcGtnX2luZm8KKyAgICAgIC9zYmluL3hicHMtaW5zdGFsbAorICAgICAgL3Vzci9iaW4venlwcGVyCisgICApCisKKyAgIGxvY2FsIGNvbW1hbmQKKyAgIGZvciBjb21tYW5kIGluICIke2NvbW1hbmRzW0BdfSIKKyAgIGRvCisgICAgICBbIC14ICIke2NvbW1hbmR9IiBdICYmIHsKKyAgICAgICAgIHBhY2thZ2VNYW5hZ2VyPSIke2NvbW1hbmQjIyovfSIKKyAgICAgICAgIHBhY2thZ2VNYW5hZ2VyPSIke3BhY2thZ2VNYW5hZ2VyJSUtKn0iCisgICAgICAgICByZXR1cm4gMAorICAgICAgfQorICAgZG9uZQorCisgICBzZW1hbnRpY0Vycm9yICJ1bmtub3duIHBhY2thZ2UgbWFuYWdlciIKK30KKworbm9ybWFsaXplUGFja2FnZUxpc3QoKSB7CisgICBzb3J0IHwgdW5pcQorfQorCit1bnN1cHBvcnRlZFBhY2thZ2VBY3Rpb24oKSB7CisgICBsb2NhbCBhY3Rpb249IiR7MX0iCisgICBzZW1hbnRpY0Vycm9yICJ1bnN1cHBvcnRlZCBwYWNrYWdlIGFjdGlvbjogJHthY3Rpb259IgorfQorCitzZXRQYWNrYWdlTWFuYWdlcgorbG9nTm90ZSAicGFja2FnZSBtYW5hZ2VyOiAke3BhY2thZ2VNYW5hZ2VyfSIKKy4gIiR7cHJvZ3JhbURpcmVjdG9yeX0vcGFja2FnZXMuZC8ke3BhY2thZ2VNYW5hZ2VyfS5zaCIKZGlmZiAtLWdpdCBhL1Rvb2xzL3BrZy1kZXNjcmliZSBiL1Rvb2xzL3BrZy1kZXNjcmliZQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi41ODg1NjcxCi0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvcGtnLWRlc2NyaWJlCkBAIC0wLDAgKzEsMjkgQEAKKyMhL3Vzci9iaW4vZW52IGJhc2gKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyMgICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisjCisjIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyMKKyMgQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisuICIkKGRpcm5hbWUgIiR7MH0iKS8uLi9icmx0dHktcHJvbG9ndWUuc2giCisKK2FkZFByb2dyYW1QYXJhbWV0ZXIgInBhY2thZ2UiIHBhY2thZ2VOYW1lICJ0aGUgcGFja2FnZSB0byBkZXNjcmliZSIKK3BhcnNlUHJvZ3JhbUFyZ3VtZW50cyAiJHtAfSIKKworc2V0IC1lCisuICIke3Byb2dyYW1EaXJlY3Rvcnl9L3BhY2thZ2VzLnNoIgorCitkZXNjcmliZVBhY2thZ2UgIiR7cGFja2FnZU5hbWV9IgorZXhpdCAwCmRpZmYgLS1naXQgYS9Ub29scy9wa2ctaW5zdGFsbCBiL1Rvb2xzL3BrZy1pbnN0YWxsCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjg2YmE0MjkKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9wa2ctaW5zdGFsbApAQCAtMCwwICsxLDM0IEBACisjIS91c3IvYmluL2VudiBiYXNoCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisjICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorIworIyBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisjCisjIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisjCisjIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyMgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorIyBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyMKKyMgV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworIworIyBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworLiAiJChkaXJuYW1lICIkezB9IikvLi4vYnJsdHR5LXByb2xvZ3VlLnNoIgorCitwcm9jZXNzRXh0cmFQcm9ncmFtUGFyYW1ldGVycygpIHsKKyAgIGRlY2xhcmUgLWcgYWRkaXRpb25hbFBhY2thZ2VzPSggIiR7QH0iICkKK30KKworYWRkUHJvZ3JhbVBhcmFtZXRlciAicGFja2FnZSIgcGFja2FnZU5hbWUgInRoZSBwYWNrYWdlIHRvIGluc3RhbGwiCitvcHRpb25hbFByb2dyYW1QYXJhbWV0ZXJzICJwYWNrYWdlcyIgImFkZGl0aW9uYWwgcGFja2FnZXMgdG8gaW5zdGFsbCIKK3BhcnNlUHJvZ3JhbUFyZ3VtZW50cyAiJHtAfSIKKworc2V0IC1lCisuICIke3Byb2dyYW1EaXJlY3Rvcnl9L3BhY2thZ2VzLnNoIgorCitpbnN0YWxsUGFja2FnZXMgIiR7cGFja2FnZU5hbWV9IiAiJHthZGRpdGlvbmFsUGFja2FnZXNbQF19IgorZXhpdCAwCmRpZmYgLS1naXQgYS9Ub29scy9wa2ctbGlzdCBiL1Rvb2xzL3BrZy1saXN0Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjViYzg5MTMKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9wa2ctbGlzdApAQCAtMCwwICsxLDMzIEBACisjIS91c3IvYmluL2VudiBiYXNoCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisjICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorIworIyBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisjCisjIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisjCisjIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyMgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorIyBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyMKKyMgV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworIworIyBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworLiAiJChkaXJuYW1lICIkezB9IikvLi4vYnJsdHR5LXByb2xvZ3VlLnNoIgorCitwYXJzZVByb2dyYW1Bcmd1bWVudHMgIiR7QH0iCisKK3NldCAtZQorLiAiJHtwcm9ncmFtRGlyZWN0b3J5fS9wYWNrYWdlcy5zaCIKK2luc3RhbGxlZFBhY2thZ2VzPSggJChsaXN0SW5zdGFsbGVkUGFja2FnZXMpICkKKworZm9yIHBhY2thZ2UgaW4gIiR7aW5zdGFsbGVkUGFja2FnZXNbQF19IgorZG8KKyAgIGVjaG8gIiR7cGFja2FnZX0iCitkb25lIHwgbm9ybWFsaXplUGFja2FnZUxpc3QKKworZXhpdCAwCmRpZmYgLS1naXQgYS9Ub29scy9wa2ctcmVtb3ZlIGIvVG9vbHMvcGtnLXJlbW92ZQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5mNDdkODc4Ci0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvcGtnLXJlbW92ZQpAQCAtMCwwICsxLDM0IEBACisjIS91c3IvYmluL2VudiBiYXNoCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisjICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorIworIyBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisjCisjIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisjCisjIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyMgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorIyBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyMKKyMgV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworIworIyBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworLiAiJChkaXJuYW1lICIkezB9IikvLi4vYnJsdHR5LXByb2xvZ3VlLnNoIgorCitwcm9jZXNzRXh0cmFQcm9ncmFtUGFyYW1ldGVycygpIHsKKyAgIGRlY2xhcmUgLWcgYWRkaXRpb25hbFBhY2thZ2VzPSggIiR7QH0iICkKK30KKworYWRkUHJvZ3JhbVBhcmFtZXRlciAicGFja2FnZSIgcGFja2FnZU5hbWUgInRoZSBwYWNrYWdlIHRvIHJlbW92ZSIKK29wdGlvbmFsUHJvZ3JhbVBhcmFtZXRlcnMgInBhY2thZ2VzIiAiYWRkaXRpb25hbCBwYWNrYWdlcyB0byByZW1vdmUiCitwYXJzZVByb2dyYW1Bcmd1bWVudHMgIiR7QH0iCisKK3NldCAtZQorLiAiJHtwcm9ncmFtRGlyZWN0b3J5fS9wYWNrYWdlcy5zaCIKKworcmVtb3ZlUGFja2FnZXMgIiR7cGFja2FnZU5hbWV9IiAiJHthZGRpdGlvbmFsUGFja2FnZXNbQF19IgorZXhpdCAwCmRpZmYgLS1naXQgYS9Ub29scy9wa2ctc2VhcmNoIGIvVG9vbHMvcGtnLXNlYXJjaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4wNWNiMmU1Ci0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvcGtnLXNlYXJjaApAQCAtMCwwICsxLDI5IEBACisjIS91c3IvYmluL2VudiBiYXNoCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisjICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorIworIyBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisjCisjIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisjCisjIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyMgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorIyBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyMKKyMgV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworIworIyBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworLiAiJChkaXJuYW1lICIkezB9IikvLi4vYnJsdHR5LXByb2xvZ3VlLnNoIgorCithZGRQcm9ncmFtUGFyYW1ldGVyICJzdHJpbmciIHNlYXJjaFN0cmluZyAidGhlIHN0cmluZyB0byBzZWFyY2ggZm9yIgorcGFyc2VQcm9ncmFtQXJndW1lbnRzICIke0B9IgorCitzZXQgLWUKKy4gIiR7cHJvZ3JhbURpcmVjdG9yeX0vcGFja2FnZXMuc2giCisKK3NlYXJjaFBhY2thZ2UgIiR7c2VhcmNoU3RyaW5nfSIKK2V4aXQgMApkaWZmIC0tZ2l0IGEvVG9vbHMvcGtnLXdoaWNoIGIvVG9vbHMvcGtnLXdoaWNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjcxOWE5MzYKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9wa2ctd2hpY2gKQEAgLTAsMCArMSwyOSBAQAorIyEvdXNyL2Jpbi9lbnYgYmFzaAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorIyAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyMKKyMgQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorIworIyBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorIworIyBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisjIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyMgbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisjCisjIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKy4gIiQoZGlybmFtZSAiJHswfSIpLy4uL2JybHR0eS1wcm9sb2d1ZS5zaCIKKworYWRkUHJvZ3JhbVBhcmFtZXRlciAiZmlsZSIgZmlsZVBhdGggInRoZSBwYXRoIG9mIHRoZSBmaWxlIHRvIGJlIGxvY2F0ZWQiCitwYXJzZVByb2dyYW1Bcmd1bWVudHMgIiR7QH0iCisKK3NldCAtZQorLiAiJHtwcm9ncmFtRGlyZWN0b3J5fS9wYWNrYWdlcy5zaCIKKword2hpY2hQYWNrYWdlICIke2ZpbGVQYXRofSIKK2V4aXQgMApkaWZmIC0tZ2l0IGEvVG9vbHMvcGtndmFycyBiL1Rvb2xzL3BrZ3ZhcnMKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZDI2NzUwYgotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL3BrZ3ZhcnMKQEAgLTAsMCArMSw2MCBAQAorIyEvYmluL2Jhc2gKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyMgICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisjCisjIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyMKKyMgQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisuICIkKGRpcm5hbWUgIiR7MH0iKS8uLi9wcm9sb2d1ZS5zaCIKKworZGVmYXVsdFBhY2thZ2VOYW1lPSJicmx0dHkiCit2YXJpYWJsZU5hbWVzPSgpCisKK3Byb2Nlc3NFeHRyYVByb2dyYW1QYXJhbWV0ZXJzKCkgeworICAgdmFyaWFibGVOYW1lcys9KCAiJHtAfSIgKQorfQorCithZGRQcm9ncmFtT3B0aW9uIGIgc3RyaW5nLmRpcmVjdG9yeSBidWlsZFJvb3QgInRoZSByb290IGRpcmVjdG9yeSBvZiB0aGUgYnVpbGQiCithZGRQcm9ncmFtT3B0aW9uIHAgc3RyaW5nLm5hbWUgcGFja2FnZU5hbWUgInRoZSBuYW1lIG9mIHRoZSBwYWNrYWdlIiAiJHtkZWZhdWx0UGFja2FnZU5hbWV9Igorb3B0aW9uYWxQcm9ncmFtUGFyYW1ldGVycworcGFyc2VQcm9ncmFtQXJndW1lbnRzICIke0B9IgorCitpZiBbIC1uICIke2J1aWxkUm9vdH0iIF0KK3RoZW4KKyAgIHZlcmlmeUlucHV0RGlyZWN0b3J5ICIke2J1aWxkUm9vdH0iCitlbHNlCisgICBzZXRCdWlsZFJvb3QKK2ZpCisKK1sgLW4gIiR7cGFja2FnZU5hbWV9IiBdIHx8IHBhY2thZ2VOYW1lPSIke2RlZmF1bHRQYWNrYWdlTmFtZX0iCisKK3BrZ0NvbmZpZygpIHsKKyAgIHBrZy1jb25maWcgIiR7QH0iIC0tICIke3BhY2thZ2VOYW1lfSIgfHwgcmV0dXJuICIkez99IgorfQorCitleHBvcnQgUEtHX0NPTkZJR19QQVRIPSIke2J1aWxkUm9vdH0iCitwa2dDb25maWcgLS1leGlzdHMgfHwgc2VtYW50aWNFcnJvciAicGFja2FnZSBub3QgZm91bmQ6ICR7cGFja2FnZU5hbWV9IgorCitpZiBbICIkeyN2YXJpYWJsZU5hbWVzWypdfSIgLWVxIDAgXQordGhlbgorICAgcGtnQ29uZmlnIC0tcHJpbnQtdmFyaWFibGVzIHwgc29ydAorZWxzZQorICAgZm9yIHZhcmlhYmxlTmFtZSBpbiAiJHt2YXJpYWJsZU5hbWVzW0BdfSIKKyAgIGRvCisgICAgICBwa2dDb25maWcgLS12YXJpYWJsZT0iJHt2YXJpYWJsZU5hbWV9IgorICAgZG9uZQorZmkKKworZXhpdCAwCmRpZmYgLS1naXQgYS9Ub29scy9weXRob25jbWQgYi9Ub29scy9weXRob25jbWQKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uY2QyOWFhMwotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL3B5dGhvbmNtZApAQCAtMCwwICsxLDExOSBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIGxpYmJybGFwaSAtIEEgbGlicmFyeSBwcm92aWRpbmcgYWNjZXNzIHRvIGJyYWlsbGUgdGVybWluYWxzIGZvciBhcHBsaWNhdGlvbnMuCisjCisjIENvcHlyaWdodCAoQykgMjAwNS0yMDIzIGJ5CisjICAgQWxleGlzIFJvYmVydCA8YWxleGlzc29mdEBmcmVlLmZyPgorIyAgIFNhbXVlbCBUaGliYXVsdCA8U2FtdWVsLlRoaWJhdWx0QGVucy1seW9uLm9yZz4KKyMKKyMgbGliYnJsYXBpIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitpbXBvcnQgc3lzCitpbXBvcnQgb3MKKworZGVmIHB1dFByb2dyYW1NZXNzYWdlKG1lc3NhZ2UpOgorICBzeXMuc3RkZXJyLndyaXRlKCIlczogJXMlcyIgJSAocHJvZ3JhbU5hbWUsIG1lc3NhZ2UsIG9zLmxpbmVzZXApKQorCitkZWYgc3ludGF4RXJyb3IobWVzc2FnZSk6CisgIHB1dFByb2dyYW1NZXNzYWdlKG1lc3NhZ2UpCisgIHN5cy5leGl0KDIpCisKK2RlZiBuZXh0UHJvZ3JhbUFyZ3VtZW50KCk6CisgIHJldHVybiBzeXMuYXJndi5wb3AoMCkKKworZGVmIHZlcmlmeU5vTW9yZVByb2dyYW1Bcmd1bWVudHMoKToKKyAgaWYgKGxlbihzeXMuYXJndikgPiAwKToKKyAgICBzeW50YXhFcnJvcigidG9vIG1hbnkgcGFyYW1ldGVycyIpCisKK3Byb2dyYW1QYXRoID0gbmV4dFByb2dyYW1Bcmd1bWVudCgpCitwcm9ncmFtTmFtZSA9IG9zLnBhdGguYmFzZW5hbWUocHJvZ3JhbVBhdGgpCisKK3RyeToKKyAgYWN0aW9uTmFtZSA9IG5leHRQcm9ncmFtQXJndW1lbnQoKQorZXhjZXB0IEluZGV4RXJyb3I6CisgIHN5bnRheEVycm9yKCJhY3Rpb24gbm90IHNwZWNpZmllZCIpCisKK3RyeToKKyAgaW1wb3J0IHN5c2NvbmZpZworIyBwdXRQcm9ncmFtTWVzc2FnZSgic3lzY29uZmlnIikKKyAgaWYgaGFzYXR0cihzeXNjb25maWcsICdnZXRfZGVmYXVsdF9zY2hlbWUnKToKKyAgICBzY2hlbWUgPSBzeXNjb25maWcuZ2V0X2RlZmF1bHRfc2NoZW1lKCkKKyAgZWxzZToKKyAgICBzY2hlbWUgPSBzeXNjb25maWcuX2dldF9kZWZhdWx0X3NjaGVtZSgpCisKKyAgaWYgc2NoZW1lID09ICdwb3NpeF9sb2NhbCc6CisgICAgIyBEZWJpYW4ncyBkZWZhdWx0IHNjaGVtZSBpbnN0YWxscyB0byAvdXNyL2xvY2FsLyBidXQgd2Ugd2FudCB0byBmaW5kIGhlYWRlcnMgaW4gL3Vzci8KKyAgICBzY2hlbWUgPSAncG9zaXhfcHJlZml4JworCisgIGRlZiBnZXRJbmNsdWRlRGlyZWN0b3J5KCk6CisgICAgcmV0dXJuIHN5c2NvbmZpZy5nZXRfcGF0aCgiaW5jbHVkZSIsIHNjaGVtZSkKKworICBkZWYgZ2V0TGlicmFyeURpcmVjdG9yeSgpOgorICAgIHJldHVybiBzeXNjb25maWcuZ2V0X3BhdGgoInN0ZGxpYiIsIHNjaGVtZSkKKworICBkZWYgZ2V0UGFja2FnZURpcmVjdG9yeSgpOgorICAgIHJldHVybiBzeXNjb25maWcuZ2V0X3BhdGgoInBsYXRsaWIiLCBzY2hlbWUpCisKKyAgZGVmIGdldENvbmZpZ3VyYXRpb25WYXJpYWJsZShuYW1lKToKKyAgICByZXR1cm4gc3lzY29uZmlnLmdldF9jb25maWdfdmFyKG5hbWUpCisKK2V4Y2VwdCBNb2R1bGVOb3RGb3VuZEVycm9yOgorICBmcm9tIGRpc3R1dGlscyBpbXBvcnQgc3lzY29uZmlnCisjIHB1dFByb2dyYW1NZXNzYWdlKCJkaXN0dXRpbHMiKQorCisgIGRlZiBnZXRJbmNsdWRlRGlyZWN0b3J5KCk6CisgICAgcmV0dXJuIHN5c2NvbmZpZy5nZXRfcHl0aG9uX2luYygpCisKKyAgZGVmIGdldExpYnJhcnlEaXJlY3RvcnkoKToKKyAgICByZXR1cm4gc3lzY29uZmlnLmdldF9weXRob25fbGliKDAsIDEpCisKKyAgZGVmIGdldFBhY2thZ2VEaXJlY3RvcnkoKToKKyAgICByZXR1cm4gc3lzY29uZmlnLmdldF9weXRob25fbGliKFRydWUsIEZhbHNlKQorCisgIGRlZiBnZXRDb25maWd1cmF0aW9uVmFyaWFibGUobmFtZSk6CisgICAgcmV0dXJuIHN5c2NvbmZpZy5nZXRfY29uZmlnX3ZhcihuYW1lKQorCitjbGFzcyBBY3Rpb25IYW5sZXJzOgorICBkZWYgdmVyc2lvbigpOgorICAgIHZlcmlmeU5vTW9yZVByb2dyYW1Bcmd1bWVudHMoKQorICAgIHByaW50KHN5cy52ZXJzaW9uX2luZm9bMF0pCisKKyAgZGVmIGluY2RpcigpOgorICAgIHZlcmlmeU5vTW9yZVByb2dyYW1Bcmd1bWVudHMoKQorICAgIHByaW50KGdldEluY2x1ZGVEaXJlY3RvcnkoKSkKKworICBkZWYgbGliZGlyKCk6CisgICAgdmVyaWZ5Tm9Nb3JlUHJvZ3JhbUFyZ3VtZW50cygpCisgICAgcHJpbnQoZ2V0TGlicmFyeURpcmVjdG9yeSgpKQorCisgIGRlZiBwa2dkaXIoKToKKyAgICB2ZXJpZnlOb01vcmVQcm9ncmFtQXJndW1lbnRzKCkKKyAgICBwcmludChnZXRQYWNrYWdlRGlyZWN0b3J5KCkpCisKKyAgZGVmIGxpYm9wdHMoKToKKyAgICB2ZXJpZnlOb01vcmVQcm9ncmFtQXJndW1lbnRzKCkKKyAgICBwcmludChnZXRDb25maWd1cmF0aW9uVmFyaWFibGUoIkxJQlMiKSkKKworICBkZWYgbGlua29wdHMoKToKKyAgICB2ZXJpZnlOb01vcmVQcm9ncmFtQXJndW1lbnRzKCkKKyAgICBwcmludChnZXRDb25maWd1cmF0aW9uVmFyaWFibGUoIkxJTktGT1JTSEFSRUQiKSkKKworYWN0aW9uSGFuZGxlcnMgPSBnbG9iYWxzKClbIkFjdGlvbkhhbmxlcnMiXQorCit0cnk6CisgIGFjdGlvbkhhbmRsZXIgPSBnZXRhdHRyKGFjdGlvbkhhbmRsZXJzLCBhY3Rpb25OYW1lKQorZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICBzeW50YXhFcnJvcigidW5rbm93biBhY3Rpb246ICVzIiAlIGFjdGlvbk5hbWUpCisKK2FjdGlvbkhhbmRsZXIoKQorc3lzLmV4aXQoMCkKZGlmZiAtLWdpdCBhL1Rvb2xzL3JlcW1udHMuZC9mcmVlYnNkIGIvVG9vbHMvcmVxbW50cy5kL2ZyZWVic2QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzJhMDQwZgotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL3JlcW1udHMuZC9mcmVlYnNkCkBAIC0wLDAgKzEsMiBAQAorZmRlc2MgICAgICAgICAgIC9kZXYvZmQgICAgICAgICBmZGVzY2ZzIHJ3ICAgICAgMCAgICAgICAwCitwcm9jICAgICAgICAgICAgL3Byb2MgICAgICAgICAgIHByb2NmcyAgcncgICAgICAwICAgICAgIDAKZGlmZiAtLWdpdCBhL1Rvb2xzL3JlcXBrZ3MgYi9Ub29scy9yZXFwa2dzCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmZiZGJmMTQKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9yZXFwa2dzCkBAIC0wLDAgKzEsMTQyIEBACisjIS91c3IvYmluL2VudiBiYXNoCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisjICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorIworIyBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisjCisjIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisjCisjIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyMgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorIyBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyMKKyMgV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworIworIyBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworLiAiJChkaXJuYW1lICIkezB9IikvLi4vYnJsdHR5LXByb2xvZ3VlLnNoIgorCitwcm9jZXNzRXh0cmFQcm9ncmFtUGFyYW1ldGVycygpIHsKKyAgIHJlcXVpcmVkUGFja2FnZU5hbWVzPSggIiR7QH0iICkKK30KKworYWRkUHJvZ3JhbU9wdGlvbiBpIGZsYWcgaW5zdGFsbE5lZWRlZFBhY2thZ2VzICJpbnN0YWxsIHRoZSBuZWVkZWQgcGFja2FnZXMiCithZGRQcm9ncmFtT3B0aW9uIGwgZmxhZyBsaXN0TmVlZGVkUGFja2FnZXMgImxpc3QgdGhlIG5lZWRlZCBwYWNrYWdlcyIKK29wdGlvbmFsUHJvZ3JhbVBhcmFtZXRlcnMKK3BhcnNlUHJvZ3JhbUFyZ3VtZW50cyAiJHtAfSIKKworc2V0IC1lCisuICIke3Byb2dyYW1EaXJlY3Rvcnl9L3BhY2thZ2VzLnNoIgorCitbICIkeyNyZXF1aXJlZFBhY2thZ2VOYW1lc1tAXX0iIC1ndCAwIF0gfHwgeworICAgbG9hZFJlcXVpcmVkUGFja2FnZU5hbWVzKCkgeworICAgICAgbG9jYWwgZmlsZT0iJHtwcm9ncmFtRGlyZWN0b3J5fS8ke3Byb2dyYW1OYW1lfS5kLyR7cGxhdGZvcm1OYW1lfSIKKyAgICAgIFsgLWUgIiR7ZmlsZX0iIF0gfHwgc2VtYW50aWNFcnJvciAicGxhdGZvcm0gcGFja2FnZSBsaXN0IG5vdCBmb3VuZDogJHtmaWxlfSIKKyAgICAgIFsgLWYgIiR7ZmlsZX0iIF0gfHwgc2VtYW50aWNFcnJvciAibm90IGEgZmlsZTogJHtmaWxlfSIKKyAgICAgIFsgLXIgIiR7ZmlsZX0iIF0gfHwgc2VtYW50aWNFcnJvciAicGxhdGZvcm0gcGFja2FnZSBsaXN0IG5vdCByZWFkYWJsZTogJHtmaWxlfSIKKworICAgICAgbG9jYWwgbmFtZQorICAgICAgd2hpbGUgcmVhZCBuYW1lCisgICAgICBkbworICAgICAgICAgWyAtbiAiJHtuYW1lfSIgXSB8fCBjb250aW51ZQorICAgICAgICAgWyAiJHtuYW1lOjA6MX0iID0gIiMiIF0gJiYgY29udGludWUKKyAgICAgICAgIHJlcXVpcmVkUGFja2FnZU5hbWVzWyR7I3JlcXVpcmVkUGFja2FnZU5hbWVzWypdfV09IiR7bmFtZX0iCisgICAgICBkb25lIDwgPChjYXQgIiR7ZmlsZX0iKQorCisgICAgICBbICIkeyNyZXF1aXJlZFBhY2thZ2VOYW1lc1tAXX0iIC1ndCAwIF0gfHwgc2VtYW50aWNFcnJvciAiZW1wdHkgcGFja2FnZSBsaXN0IgorICAgfQorCisgICBjYXNlICIke3BhY2thZ2VNYW5hZ2VyfSIKKyAgIGluCisgICAgICBhcGspCisgICAgICAgICBwbGF0Zm9ybU5hbWU9ImFscGluZSIKKyAgICAgICAgIDs7CisKKyAgICAgIGFwdCkKKyAgICAgICAgIGlmIFsgIiQodW5hbWUgLXMpIiA9ICJHTlUiIF0KKyAgICAgICAgIHRoZW4KKyAgICAgICAgICAgIHBsYXRmb3JtTmFtZT0iaHVyZCIKKyAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHBsYXRmb3JtTmFtZT0iZGViaWFuIgorICAgICAgICAgZmkKKyAgICAgICAgIDs7CisKKyAgICAgIGJyZXcpCisgICAgICAgICBwbGF0Zm9ybU5hbWU9ImRhcndpbiIKKyAgICAgICAgIDs7CisKKyAgICAgIGRuZikKKyAgICAgICAgIHBsYXRmb3JtTmFtZT0iZmVkb3JhIgorICAgICAgICAgOzsKKworICAgICAgcGFjbWFuKQorICAgICAgICAgcGxhdGZvcm1OYW1lPSJhcmNoIgorICAgICAgICAgOzsKKworICAgICAgcGtnKQorICAgICAgICAgcGxhdGZvcm1OYW1lPSJmcmVlYnNkIgorICAgICAgICAgOzsKKworICAgICAgcGtnX2luZm8pCisgICAgICAgICBwbGF0Zm9ybU5hbWU9Im9wZW5ic2QiCisgICAgICAgICA7OworCisgICAgICB4YnBzKQorICAgICAgICAgcGxhdGZvcm1OYW1lPSJ2b2lkIgorICAgICAgICAgOzsKKworICAgICAgenlwcGVyKQorICAgICAgICAgcGxhdGZvcm1OYW1lPSJvcGVuc3VzZSIKKyAgICAgICAgIDs7CisKKyAgICAgICopIHNlbWFudGljRXJyb3IgInVua25vd24gaG9zdCBwbGF0Zm9ybTogJHtwYWNrYWdlTWFuYWdlcn0iOzsKKyAgIGVzYWMKKworICAgbG9nTm90ZSAicGxhdGZvcm0gbmFtZTogJHtwbGF0Zm9ybU5hbWV9IgorICAgbG9hZFJlcXVpcmVkUGFja2FnZU5hbWVzCit9CisKK2xpc3RSZXF1aXJlZFBhY2thZ2VzKCkgeworICAgbG9jYWwgbmFtZQorCisgICBmb3IgbmFtZSBpbiAiJHtyZXF1aXJlZFBhY2thZ2VOYW1lc1tAXX0iCisgICBkbworICAgICAgZWNobyAiJHtuYW1lfSIKKyAgIGRvbmUKK30KKworbmVlZGVkUGFja2FnZXM9KAorICAgJCgKKyAgICAgIGRpZmYgPChsaXN0SW5zdGFsbGVkUGFja2FnZXMgfCBub3JtYWxpemVQYWNrYWdlTGlzdCkgXAorICAgICAgICAgICA8KGxpc3RSZXF1aXJlZFBhY2thZ2VzIHwgbm9ybWFsaXplUGFja2FnZUxpc3QpIHwKKyAgICAgIHNlZCAtbiAtZSAnCisgICAgICAgICAvXi0tLSAvYgorICAgICAgICAgL14rKysgL2IKKyAgICAgICAgIHMvXisvPiAvCisJIHMvXj4gLy9wCisgICAgICAnCisgICApCispCisKK2lmIFsgIiR7I25lZWRlZFBhY2thZ2VzW0BdfSIgLWd0IDAgXQordGhlbgorICAgbG9nTWVzc2FnZSB0YXNrICJwYWNrYWdlcyBuZWVkZWQ6ICR7I25lZWRlZFBhY2thZ2VzW0BdfSIKKworICAgIiR7bGlzdE5lZWRlZFBhY2thZ2VzfSIgJiYgeworICAgICAgZm9yIHBhY2thZ2UgaW4gIiR7bmVlZGVkUGFja2FnZXNbQF19IgorICAgICAgZG8KKyAgICAgICAgIGVjaG8gIiR7cGFja2FnZX0iCisgICAgICBkb25lCisgICB9CisKKyAgICIke2luc3RhbGxOZWVkZWRQYWNrYWdlc30iICYmIHsKKyAgICAgIGluc3RhbGxQYWNrYWdlcyAiJHtuZWVkZWRQYWNrYWdlc1tAXX0iCisgICB9CitlbHNlCisgICBsb2dNZXNzYWdlIHRhc2sgIm5vIG5lZWRlZCBwYWNrYWdlcyIKK2ZpCisKK2V4aXQgMApkaWZmIC0tZ2l0IGEvVG9vbHMvcmVxcGtncy5kL2FscGluZSBiL1Rvb2xzL3JlcXBrZ3MuZC9hbHBpbmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGE2MTZhMgotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL3JlcXBrZ3MuZC9hbHBpbmUKQEAgLTAsMCArMSw1MSBAQAorI2VzcGVhay1uZworI2VzcGVhay1uZy1kZXYKKyNmZXN0aXZhbAorI2xpYmxvdWlzLWRldgorI2xpbnV4ZG9jLXRvb2xzCisjc3BlZWNoLWRpc3BhdGNoZXIKKyNzcGVlY2gtZGlzcGF0Y2hlci1kZXYKK2Fsc2EtbGliLWRldgorYXQtc3BpMi1jb3JlLWRldgorYXV0b2NvbmYKK2F1dG9tYWtlCitibHVlei1kZXYKK2NsZHItZW1vamktYW5ub3RhdGlvbgorY3l0aG9uCitkYnVzLWRldgorZG94eWdlbgorZW1hY3MKK2VzcGVhaworZXNwZWFrLWRldgorZXhwYXQtZGV2CitmbGl0ZQorZmxpdGUtZGV2CitnYXdrCitnY2MKK2dldHRleHQKK2dwbS1kZXYKK2dyb2ZmCitpY3UtZGV2CitsaWJjLWRldgorbGliY2FwLWRldgorbGlieDExLWRldgorbGlieGF3LWRldgorbGlieGV4dC1kZXYKK2xpYnhmaXhlcy1kZXYKK2xpYnh0LWRldgorbGlieHRzdC1kZXYKK2x1YTUuNAorbHVhNS40LWRldgorbWFrZQorbmN1cnNlcy1kZXYKK29jYW1sCitvY2FtbC1maW5kbGliCitvcGVuamRrMTEKK3BjcmUyLWRldgorcGtnY29uZgorcG9sa2l0LWRldgorcHkzLWRvY3V0aWxzCitweTMtc2V0dXB0b29scworcHl0aG9uMy1kZXYKK3RjbAordGNsLWRldgpkaWZmIC0tZ2l0IGEvVG9vbHMvcmVxcGtncy5kL2FyY2ggYi9Ub29scy9yZXFwa2dzLmQvYXJjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjlkZTI5Ci0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvcmVxcGtncy5kL2FyY2gKZGlmZiAtLWdpdCBhL1Rvb2xzL3JlcXBrZ3MuZC9kYXJ3aW4gYi9Ub29scy9yZXFwa2dzLmQvZGFyd2luCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJiZjZjY2MKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9yZXFwa2dzLmQvZGFyd2luCkBAIC0wLDAgKzEsMjUgQEAKK2F1dG9jb25mCithdXRvbWFrZQorYmFzaAorY3l0aG9uCitkb3h5Z2VuCitlbWFjcworZXNwZWFrCitleHBhdAorZ2F3aworZ2V0dGV4dAorZ3JvZmYKK2xpYmxvdWlzCitsaWJ4MTEKK2xpYnhmaXhlcworbGlieHQKK2xpYnh0c3QKK2x1YQorbmN1cnNlcworb2NhbWwKK29jYW1sLWZpbmRsaWIKK29wZW5qZGsKK3BjcmUKK3BrZy1jb25maWcKK3RjbC10aworeG9yZ3Byb3RvCmRpZmYgLS1naXQgYS9Ub29scy9yZXFwa2dzLmQvZGViaWFuIGIvVG9vbHMvcmVxcGtncy5kL2RlYmlhbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OWFlZThjCi0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvcmVxcGtncy5kL2RlYmlhbgpAQCAtMCwwICsxLDUxIEBACithdXRvY29uZgorYXV0b21ha2UKK2JpbnV0aWxzCitjb3JldXRpbHMKK2N5dGhvbjMKK2RlZmF1bHQtamRrCitkb3h5Z2VuCitlbWFjcworZmVzdGl2YWwKK2ZsaXRlMS1kZXYKK2dhd2sKK2djYworZ2V0dGV4dAorZ3JvZmYKK2xpYmFzb3VuZDItZGV2CitsaWJhdHNwaTIuMC1kZXYKK2xpYmJsdWV0b290aC1kZXYKK2xpYmM2LWRldgorbGliY2FwLWRldgorbGliZGJ1cy0xLWRldgorbGliZXNwZWFrLW5nLWxpYmVzcGVhay1kZXYKK2xpYmV4cGF0MS1kZXYKK2xpYmdwbS1kZXYKK2xpYmljdS1kZXYKK2xpYmxvdWlzLWRldgorbGlibHVhNS40LWRldgorbGlibmN1cnNlc3c1LWRldgorbGlicGNyZTMtZGV2CitsaWJwb2xraXQtZ29iamVjdC0xLWRldgorbGlic3BlZWNoZC1kZXYKK2xpYnN5c3RlbWQtZGV2CitsaWJ1ZGV2LWRldgorbGlieDExLWRldgorbGlieGF3Ny1kZXYKK2xpYnh0LWRldgorbGlieHRzdC1kZXYKK2xpbnV4ZG9jLXRvb2xzCitsdWE1LjQKK21ha2UKK29jYW1sCitvY2FtbC1maW5kbGliCitwa2ctY29uZmlnCitweXRob24zLWFsbC1kZXYKK3B5dGhvbjMtZG9jdXRpbHMKK3B5dGhvbjMtc2V0dXB0b29scworcHl0aG9uLWFsbC1kZXYKK3N5c3RlbWQKK3RjbC1kZXYKK3VkZXYKK3VuaWNvZGUtY2xkci1jb3JlCit4MTFwcm90by1rYi1kZXYKZGlmZiAtLWdpdCBhL1Rvb2xzL3JlcXBrZ3MuZC9mZWRvcmEgYi9Ub29scy9yZXFwa2dzLmQvZmVkb3JhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc3NzZhNzEKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9yZXFwa2dzLmQvZmVkb3JhCkBAIC0wLDAgKzEsNTYgQEAKKyNhdC1zcGktZGV2ZWwKK2Fsc2EtbGliLWRldmVsCithdC1zcGkyLWNvcmUtZGV2ZWwKK2F1dG9jb25mCithdXRvbWFrZQorYmludXRpbHMKK2JsdWV6LWxpYnMtZGV2ZWwKK2NsZHItZW1vamktYW5ub3RhdGlvbgorY29yZXV0aWxzCitkYnVzLWRldmVsCitkb3h5Z2VuCitlbWFjcy1kZXZlbAorZXNwZWFrLWRldmVsCitlc3BlYWstbmctZGV2ZWwKK2V4cGF0LWRldmVsCitmZXN0aXZhbAorZmxpdGUtZGV2ZWwKK2dhd2sKK2djYworZ2V0dGV4dAorZ2xpYjItZGV2ZWwKK2dsaWJjLWRldmVsCitncG0tZGV2ZWwKK2dyb2ZmCitqYXZhLTExLW9wZW5qZGsKK2phdmEtMTEtb3Blbmpkay1kZXZlbAorbGliY2FwLWRldmVsCitsaWJpY3UtZGV2ZWwKK2xpYmxvdWlzLWRldmVsCitsaWJYMTEtZGV2ZWwKK2xpYlh0LWRldmVsCitsaWJYdHN0LWRldmVsCitsaW51eGRvYy10b29scworbHVhLWRldmVsCittYWtlCituY3Vyc2VzLWRldmVsCituZVh0YXctZGV2ZWwKK29jYW1sCitvY2FtbC1maW5kbGliCitwY3JlMi1kZXZlbAorcGtnY29uZi1wa2ctY29uZmlnCitwb2xraXQtZGV2ZWwKK3B5dGhvbjMKK3B5dGhvbjMtQ3l0aG9uCitweXRob24zLWRldmVsCitweXRob24zLWRvY3V0aWxzCitweXRob24zLXNldHVwdG9vbHMKK3JzdDJ0eHQKK3NwZWVjaC1kaXNwYXRjaGVyLWRldmVsCitzeXN0ZW1kCitzeXN0ZW1kLWRldmVsCitzeXN0ZW1kLXJwbS1tYWNyb3MKK3N5c3RlbWQtdWRldgordGNsCit0Y2wtZGV2ZWwKK3hvcmcteDExLXByb3RvLWRldmVsCmRpZmYgLS1naXQgYS9Ub29scy9yZXFwa2dzLmQvZnJlZWJzZCBiL1Rvb2xzL3JlcXBrZ3MuZC9mcmVlYnNkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE5YmNjYTMKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9yZXFwa2dzLmQvZnJlZWJzZApAQCAtMCwwICsxLDM4IEBACithbHNhLWxpYgorYXQtc3BpMi1jb3JlCithdXRvY29uZgorYXV0b21ha2UKK2Jhc2gKK2JpbnV0aWxzCitjbGRyLWVtb2ppLWFubm90YXRpb24KK2NvcmV1dGlscworZGJ1cworZG94eWdlbgorZXNwZWFrCitleHBhdAorZmVzdGl2YWwKK2ZsaXRlCitnYXdrCitnY2MKK2dldHRleHQKK2dtYWtlCitncm9mZgoraWN1CitsaWJsb3VpcworbGliWDExCitsaWJYYXcKK2xpYlh0CitsaWJYdHN0CitsaW51eGRvYy10b29scworb2NhbWwKK29jYW1sLWZpbmRsaWIKK29wZW5qZGsxMQorcGNyZTIKK3BrZ2NvbmYKK3BvbGtpdAorcHl0aG9uMzkKK3B5MzktY3l0aG9uCitweTM5LWRvY3V0aWxzCitzcGVlY2gtZGlzcGF0Y2hlcgordGNsODcKK3hvcmdwcm90bwpkaWZmIC0tZ2l0IGEvVG9vbHMvcmVxcGtncy5kL2h1cmQgYi9Ub29scy9yZXFwa2dzLmQvaHVyZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYmMxZTFlCi0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvcmVxcGtncy5kL2h1cmQKQEAgLTAsMCArMSwzOCBAQAorYXV0b2NvbmYKK2F1dG9tYWtlCitiaW51dGlscworY29yZXV0aWxzCitjeXRob24zCitkb3h5Z2VuCitmZXN0aXZhbAorZmxpdGUxLWRldgorZ2F3aworZ2NjCitnZXR0ZXh0Citncm9mZgorbGliYXRzcGkyLjAtZGV2CitsaWJjMC4zLWRldgorbGliZGJ1cy0xLWRldgorbGliZXNwZWFrLW5nLWxpYmVzcGVhay1kZXYKK2xpYmV4cGF0MS1kZXYKK2xpYmljdS1kZXYKK2xpYmxvdWlzLWRldgorbGlibmN1cnNlc3c1LWRldgorbGlib3NzNC1zYWxzYS1kZXYKK2xpYnBjcmUzLWRldgorbGlicG9sa2l0LWdvYmplY3QtMS1kZXYKK2xpYnNwZWVjaGQtZGV2CitsaWJ4MTEtZGV2CitsaWJ4YXc3LWRldgorbGlieHQtZGV2CitsaWJ4dHN0LWRldgorbGludXhkb2MtdG9vbHMKK21ha2UKK29jYW1sCitvY2FtbC1maW5kbGliCitwa2ctY29uZmlnCitweXRob24zLWFsbC1kZXYKK3B5dGhvbjMtZG9jdXRpbHMKK3RjbC1kZXYKK3VuaWNvZGUtY2xkci1jb3JlCit4MTFwcm90by1rYi1kZXYKZGlmZiAtLWdpdCBhL1Rvb2xzL3JlcXBrZ3MuZC9vcGVuYnNkIGIvVG9vbHMvcmVxcGtncy5kL29wZW5ic2QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzc2M2NkYgotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL3JlcXBrZ3MuZC9vcGVuYnNkCkBAIC0wLDAgKzEsNyBAQAorYXV0b2NvbmYKK2F1dG9tYWtlCitiYXNoCitnbWFrZQorbGliaWNvbnYKK3B5dGhvbgordGNsCmRpZmYgLS1naXQgYS9Ub29scy9yZXFwa2dzLmQvb3BlbnN1c2UgYi9Ub29scy9yZXFwa2dzLmQvb3BlbnN1c2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWJhNWRjNAotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL3JlcXBrZ3MuZC9vcGVuc3VzZQpAQCAtMCwwICsxLDU4IEBACisjYXQtc3BpLWRldmVsCisjbGludXhkb2MtdG9vbHMKKyNuZVh0YXctZGV2ZWwKKyNyc3QydHh0CithbHNhLWRldmVsCithdC1zcGkyLWNvcmUtZGV2ZWwKK2F1dG9jb25mCithdXRvbWFrZQorYmludXRpbHMKK2JsdWV6LWRldmVsCitjbGRyLWVtb2ppLWFubm90YXRpb24KK2NvcmV1dGlscworZGJ1cy0xLWRldmVsCitkb3h5Z2VuCitlbWFjcy1lbAorZXNwZWFrCitlc3BlYWstZGV2ZWwKK2VzcGVhay1uZworZXNwZWFrLW5nLWRldmVsCitmZXN0aXZhbAorZ2F3aworZ2NjCitnZXR0ZXh0LXJ1bnRpbWUKK2dsaWIyLWRldmVsCitnbGliYy1kZXZlbAorZ3BtLWRldmVsCitncm9mZgoramF2YS0xMS1vcGVuamRrCitqYXZhLTExLW9wZW5qZGstZGV2ZWwKK2xpYlgxMS1kZXZlbAorbGliWGV4dC1kZXZlbAorbGliWGZpeGVzLWRldmVsCitsaWJYdC1kZXZlbAorbGliWHRzdC1kZXZlbAorbGliY2FwLWRldmVsCitsaWJleHBhdC1kZXZlbAorbGliaWN1LWRldmVsCitsaWJsb3Vpcy1kZXZlbAorbGlic3BlZWNoZC1kZXZlbAorbHVhNTQtZGV2ZWwKK21ha2UKK25jdXJzZXMtZGV2ZWwKK29jYW1sCitvY2FtbC1maW5kbGliCitwY3JlMi1kZXZlbAorcGtnY29uZi1wa2ctY29uZmlnCitwb2xraXQtZGV2ZWwKK3B5dGhvbjMxMAorcHl0aG9uMzEwLUN5dGhvbgorcHl0aG9uMzEwLWRldmVsCitweXRob24zMTAtZG9jdXRpbHMKK3B5dGhvbjMxMC1zZXR1cHRvb2xzCitzcGVlY2gtZGlzcGF0Y2hlcgorc3lzdGVtZAorc3lzdGVtZC1kZXZlbAordGNsCit0Y2wtZGV2ZWwKK3hjYi1wcm90by1kZXZlbApkaWZmIC0tZ2l0IGEvVG9vbHMvcmVxcGtncy5kL3ZvaWQgYi9Ub29scy9yZXFwa2dzLmQvdm9pZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjlkZTI5Ci0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvcmVxcGtncy5kL3ZvaWQKZGlmZiAtLWdpdCBhL1Rvb2xzL3N0YXRpYy5mZWRvcmEgYi9Ub29scy9zdGF0aWMuZmVkb3JhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEyZmNmY2MKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9zdGF0aWMuZmVkb3JhCkBAIC0wLDAgKzEsNiBAQAorZXhwYXQtc3RhdGljCitnbGliMi1zdGF0aWMKK2dsaWJjLXN0YXRpYworZ3BtLXN0YXRpYworbGliY2FwLXN0YXRpYworbmN1cnNlcy1zdGF0aWMKZGlmZiAtLWdpdCBhL1Rvb2xzL3RjbGNtZCBiL1Rvb2xzL3RjbGNtZApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi43N2I5MGZiCi0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvdGNsY21kCkBAIC0wLDAgKzEsNTMgQEAKKyMhL3Vzci9iaW4vZW52IHRjbHNoCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisjICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorIworIyBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisjCisjIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisjCisjIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyMgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorIyBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyMKKyMgV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworIworIyBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworc291cmNlIFtmaWxlIGpvaW4gW2ZpbGUgZGlybmFtZSBbaW5mbyBzY3JpcHRdXSAiLi4iICJwcm9sb2d1ZS50Y2wiXQorCitwcm9jIHB1dExpYnJhcnlEaXJlY3Rvcnkge30geworICBmb3JlYWNoIGRpcmVjdG9yeSBbY29uY2F0ICQ6OnRjbF9saWJyYXJ5IFtsaW5kZXggWzo6dGNsOjpwa2djb25maWcgZ2V0IGxpYmRpcixpbnN0YWxsXSAwXSAkOjphdXRvX3BhdGhdIHsKKyAgICAgc2V0IGZpbGUgW2ZpbGUgam9pbiAkZGlyZWN0b3J5IHRjbENvbmZpZy5zaF0KKworICAgICBpZiB7W2ZpbGUgaXNmaWxlICRmaWxlXX0geworICAgICAgICBwdXRzICRmaWxlCisgICAgICAgIGJyZWFrCisgICAgIH0KKyAgfQorfQorCitzZXQgb3B0aW9uRGVmaW5pdGlvbnMgeworfQorCitwcm9jZXNzUHJvZ3JhbUFyZ3VtZW50cyBvcHRpb25WYWx1ZXMgJG9wdGlvbkRlZmluaXRpb25zIHBvc2l0aW9uYWxBcmd1bWVudHMgIlx7Y29uZmlnXH0iCisKK2lmIHshW25leHRFbGVtZW50IHBvc2l0aW9uYWxBcmd1bWVudHMgYWN0aW9uXX0geworICBzeW50YXhFcnJvciAiYWN0aW9uIG5vdCBzcGVjaWZpZWQiCit9CisKK3N3aXRjaCAtZXhhY3QgIiRhY3Rpb24iIHsKKyAgY29uZmlnIHsKKyAgICBub01vcmVQb3NpdGlvbmFsQXJndW1lbnRzICRwb3NpdGlvbmFsQXJndW1lbnRzCisgICAgcHV0TGlicmFyeURpcmVjdG9yeQorICB9CisKKyAgZGVmYXVsdCB7CisgICAgc3ludGF4RXJyb3IgInVua25vd24gYWN0aW9uOiAkYWN0aW9uIgorICB9Cit9CisKK2V4aXQgMApkaWZmIC0tZ2l0IGEvVG9vbHMvdGNsdGVzdCBiL1Rvb2xzL3RjbHRlc3QKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMGUzYTIxMwotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL3RjbHRlc3QKQEAgLTAsMCArMSw0MSBAQAorIyEvdXNyL2Jpbi9lbnYgdGNsc2gKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyMgICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisjCisjIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyMKKyMgQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitzb3VyY2UgW2ZpbGUgam9pbiBbZmlsZSBkaXJuYW1lIFtpbmZvIHNjcmlwdF1dIC4uIHByb2xvZ3VlLnRjbF0KKworc2V0IG9wdGlvbkRlZmluaXRpb25zIHsKK30KKworcHJvY2Vzc1Byb2dyYW1Bcmd1bWVudHMgb3B0aW9uVmFsdWVzICRvcHRpb25EZWZpbml0aW9ucyBwb3NpdGlvbmFsQXJndW1lbnRzICJcW3Byb3BlcnR5IC4uLlxdIgorCitmb3JlYWNoIHBhdGggW2dsb2IgLWRpcmVjdG9yeSAkc2NyaXB0RGlyZWN0b3J5ICoudGNsXSB7CisgICBzb3VyY2UgJHBhdGgKK30KKworaWYge1tsZW1wdHkgJHBvc2l0aW9uYWxBcmd1bWVudHNdfSB7CisgICBwcm9jIHByaW1hcnlQcm9tcHQge30geworICAgICAgcmV0dXJuICJbZ2V0UHJvZ3JhbU5hbWVdPiAiCisgICB9CisKKyAgIGNvbW1hbmRsb29wIC1wcm9tcHQxIHByaW1hcnlQcm9tcHQKK30gZWxzZSB7CisgICBwdXRzIHN0ZG91dCBbZXZhbCAkcG9zaXRpb25hbEFyZ3VtZW50c10KK30KKworZXhpdCAwCmRpZmYgLS1naXQgYS9Ub29scy90dHl0ZXN0IGIvVG9vbHMvdHR5dGVzdApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4zMWUxZDZlCi0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvdHR5dGVzdApAQCAtMCwwICsxLDI3MCBAQAorIyEvdXNyL2Jpbi9lbnYgdGNsc2gKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyMgICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisjCisjIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyMKKyMgQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitzb3VyY2UgW2ZpbGUgam9pbiBbZmlsZSBkaXJuYW1lIFtpbmZvIHNjcmlwdF1dIC4uIGJybHR0eS1wcm9sb2d1ZS50Y2xdCisKK3NldCBzZXJpYWxQcm9wZXJ0aWVzIFtkaWN0IGNyZWF0ZV0KK3NldCBkZXZpY2VQYXRoICIvZGV2L3R0eVMwIgorCitwcm9jIGdldFNlcmlhbFByb3BlcnR5TmFtZXMge30geworICAgZ2xvYmFsIHNlcmlhbFByb3BlcnRpZXMKKyAgIHJldHVybiBbZGljdCBrZXlzICRzZXJpYWxQcm9wZXJ0aWVzXQorfQorCitwcm9jIGlzU2VyaWFsUHJvcGVydHlEZWZpbmVkIHtuYW1lfSB7CisgICByZXR1cm4gW2xjb250YWluIFtnZXRTZXJpYWxQcm9wZXJ0eU5hbWVzXSAkbmFtZV0KK30KKworcHJvYyBnZXRTZXJpYWxQcm9wZXJ0eUxhYmVsIHtuYW1lfSB7CisgICBnbG9iYWwgc2VyaWFsUHJvcGVydGllcworICAgcmV0dXJuIFtkaWN0IGdldCAkc2VyaWFsUHJvcGVydGllcyAkbmFtZSBsYWJlbF0KK30KKworcHJvYyBnZXRTZXJpYWxQcm9wZXJ0eUNob2ljZXMge25hbWV9IHsKKyAgIGdsb2JhbCBzZXJpYWxQcm9wZXJ0aWVzCisgICByZXR1cm4gW2RpY3QgZ2V0ICRzZXJpYWxQcm9wZXJ0aWVzICRuYW1lIGNob2ljZXNdCit9CisKK3Byb2MgZ2V0U2VyaWFsUHJvcGVydHlPcHRpb25zIHtuYW1lfSB7CisgICBnbG9iYWwgc2VyaWFsUHJvcGVydGllcworICAgcmV0dXJuIFtkaWN0IGdldCAkc2VyaWFsUHJvcGVydGllcyAkbmFtZSBvcHRpb25zXQorfQorCitwcm9jIGdldFNlcmlhbFByb3BlcnR5RGVmYXVsdCB7bmFtZX0geworICAgZ2xvYmFsIHNlcmlhbFByb3BlcnRpZXMKKyAgIHJldHVybiBbZGljdCBnZXQgJHNlcmlhbFByb3BlcnRpZXMgJG5hbWUgZGVmYXVsdF0KK30KKworcHJvYyBnZXRTZXJpYWxQcm9wZXJ0eVNldHRpbmcge25hbWV9IHsKKyAgIGdsb2JhbCBzZXJpYWxQcm9wZXJ0aWVzCisgICByZXR1cm4gW2RpY3QgZ2V0ICRzZXJpYWxQcm9wZXJ0aWVzICRuYW1lIHNldHRpbmddCit9CisKK3Byb2MgdmVyaWZ5U2VyaWFsUHJvcGVydHlDaG9pY2Uge25hbWUgdmFsdWV9IHsKKyAgIGlmIHshW2xjb250YWluIFtnZXRTZXJpYWxQcm9wZXJ0eUNob2ljZXMgJG5hbWVdICR2YWx1ZV19IHsKKyAgICAgIHJldHVybiAtY29kZSBlcnJvciAidW5rbm93biBzZXJpYWwgW2dldFNlcmlhbFByb3BlcnR5TGFiZWwgJG5hbWVdOiAkdmFsdWUiCisgICB9Cit9CisKK3Byb2Mgc2V0U2VyaWFsUHJvcGVydHlGaWVsZCB7bmFtZSBmaWVsZCB2YWx1ZX0geworICAgZ2xvYmFsIHNlcmlhbFByb3BlcnRpZXMKKyAgIGRpY3Qgc2V0IHNlcmlhbFByb3BlcnRpZXMgJG5hbWUgJGZpZWxkICR2YWx1ZQorfQorCitwcm9jIGRlZmluZVNlcmlhbFByb3BlcnR5IHtuYW1lIGxhYmVsIGRlZmF1bHQgYXJnc30geworICAgaWYge1tpc1NlcmlhbFByb3BlcnR5RGVmaW5lZCAkbmFtZV19IHsKKyAgICAgIHJldHVybiAtY29kZSBlcnJvciAic2VyaWFsIHByb3BlcnR5IGFscmVhZHkgZGVmaW5lZDogJG5hbWUiCisgICB9CisKKyAgIGdsb2JhbCBzZXJpYWxQcm9wZXJ0aWVzCisgICBkaWN0IHNldCBzZXJpYWxQcm9wZXJ0aWVzICRuYW1lIFtkaWN0IGNyZWF0ZSBsYWJlbCAkbGFiZWwgY2hvaWNlcyAkYXJncyBvcHRpb25zIFtkaWN0IGNyZWF0ZV1dCisgICB2ZXJpZnlTZXJpYWxQcm9wZXJ0eUNob2ljZSAkbmFtZSAkZGVmYXVsdAorICAgc2V0U2VyaWFsUHJvcGVydHlGaWVsZCAkbmFtZSBkZWZhdWx0ICRkZWZhdWx0CisgICBzZXRTZXJpYWxQcm9wZXJ0eUZpZWxkICRuYW1lIHNldHRpbmcgJGRlZmF1bHQKK30KKworcHJvYyBhZGRTZXJpYWxPcHRpb24ge29wdGlvbiBwcm9wZXJ0eSBhcmdzfSB7CisgICBpZiB7IVtpc1NlcmlhbFByb3BlcnR5RGVmaW5lZCAkcHJvcGVydHldfSB7CisgICAgICByZXR1cm4gLWNvZGUgZXJyb3IgInNlcmlhbCBwcm9wZXJ0eSBub3QgZGVmaW5lZDogJHByb3BlcnR5IgorICAgfQorCisgICBnbG9iYWwgc2VyaWFsUHJvcGVydGllcworCisgICBmb3JlYWNoIHZhbHVlICRhcmdzIHsKKyAgICAgIHZlcmlmeVNlcmlhbFByb3BlcnR5Q2hvaWNlICRwcm9wZXJ0eSAkdmFsdWUKKyAgIH0KKworICAgZGljdCBzZXQgc2VyaWFsUHJvcGVydGllcyAkcHJvcGVydHkgb3B0aW9ucyAkb3B0aW9uICRhcmdzCit9CisKK2RlZmluZVNlcmlhbFByb3BlcnR5IGxpbmVNb2RlICJtb2RlIiBsb2NhbCBsb2NhbCBtb2RlbQorZGVmaW5lU2VyaWFsUHJvcGVydHkgbGluZUJhdWQgImJhdWQiIDM4NDAwIDUwIDc1IDExMCAxMzQgMTUwIDIwMCAzMDAgNjAwIDEyMDAgMTgwMCAyNDAwIDQ4MDAgOTYwMCAxOTIwMCAzODQwMCA1NzYwMCAxMTUyMDAgMjMwNDAwIDQ2MDgwMCA1MDAwMDAgNTc2MDAwIDkyMTYwMCAxMDAwMDAwIDExNTIwMDAgMTUwMDAwMCAyMDAwMDAwIDI1MDAwMDAgMzAwMDAwMCAzNTAwMDAwIDQwMDAwMDAKK2RlZmluZVNlcmlhbFByb3BlcnR5IGZsb3dDb250cm9sICJmbG93IGNvbnRyb2wiIG5vIG5vIGhhcmR3YXJlIHNvZnR3YXJlCitkZWZpbmVTZXJpYWxQcm9wZXJ0eSBkYXRhUGFyaXR5ICJwYXJpdHkiIG5vbmUgbm9uZSBvZGQgZXZlbiBtYXJrIHNwYWNlCitkZWZpbmVTZXJpYWxQcm9wZXJ0eSBkYXRhQml0cyAiZGF0YSBiaXRzIiA4IDUgNiA3IDgKK2RlZmluZVNlcmlhbFByb3BlcnR5IHN0b3BCaXRzICJzdG9wIGJpdHMiIDEgMSAyCisKK2FkZFNlcmlhbE9wdGlvbiBjbG9jYWwgbGluZU1vZGUgbG9jYWwKK2FkZFNlcmlhbE9wdGlvbiBjcnRzY3RzIGZsb3dDb250cm9sIGhhcmR3YXJlCithZGRTZXJpYWxPcHRpb24gaXhvbiBmbG93Q29udHJvbCBzb2Z0d2FyZQorYWRkU2VyaWFsT3B0aW9uIHBhcmVuYiBkYXRhUGFyaXR5IG9kZCBldmVuIG1hcmsgc3BhY2UKK2FkZFNlcmlhbE9wdGlvbiBwYXJvZGQgZGF0YVBhcml0eSBvZGQgbWFyaworYWRkU2VyaWFsT3B0aW9uIGNtc3BhciBkYXRhUGFyaXR5IG1hcmsgc3BhY2UKK2FkZFNlcmlhbE9wdGlvbiBjc3RvcGIgc3RvcEJpdHMgMgorCitwcm9jIGxvZ1NlcmlhbENvbmZpZ3VyYXRpb24ge30geworICAgZ2xvYmFsIGRldmljZVBhdGgKKyAgIHNldCBsb2cgInNlcmlhbCBjb2ZpZ3VyYXRpb246ICRkZXZpY2VQYXRoIgorCisgICBmb3JlYWNoIG5hbWUgW2dldFNlcmlhbFByb3BlcnR5TmFtZXNdIHsKKyAgICAgIGFwcGVuZCBsb2cgIiwgW2dldFNlcmlhbFByb3BlcnR5U2V0dGluZyAkbmFtZV0iCisgICAgICBhcHBlbmQgbG9nICIgW2dldFNlcmlhbFByb3BlcnR5TGFiZWwgJG5hbWVdIgorICAgfQorCisgICBsb2dNZXNzYWdlIHRhc2sgJGxvZworfQorCitwcm9jIGNvbmZpZ3VyZVNlcmlhbFByb3BlcnR5IHtuYW1lIHZhbHVlfSB7CisgICB2ZXJpZnlTZXJpYWxQcm9wZXJ0eUNob2ljZSAkbmFtZSAkdmFsdWUKKyAgIHNldFNlcmlhbFByb3BlcnR5RmllbGQgJG5hbWUgc2V0dGluZyAkdmFsdWUKK30KKworcHJvYyB2ZXJpZnlTZXJpYWxEZXZpY2Uge3BhdGh9IHsKKyAgIGZvcmVhY2gge3Rlc3Qgd29yZH0ge2V4aXN0cyAiZm91bmQiIHJlYWRhYmxlICJyZWFkYWJsZSIgd3JpdGFibGUgIndyaXRhYmxlIn0geworICAgICAgaWYgeyFbZmlsZSAkdGVzdCAkcGF0aF19IHsKKyAgICAgICAgIHNlbWFudGljRXJyb3IgImRldmljZSBub3QgJHdvcmQ6ICRwYXRoIgorICAgICAgfQorICAgfQorCisgICBpZiB7IVtzdHJpbmcgZXF1YWwgW2ZpbGUgdHlwZSAkcGF0aF0gY2hhcmFjdGVyU3BlY2lhbF19IHsKKyAgICAgIHNlbWFudGljRXJyb3IgIm5vdCBhIHNlcmlhbCBkZXZpY2U6ICRwYXRoIgorICAgfQorfQorCitwcm9jIGNvbmZpZ3VyZVNlcmlhbERldmljZSB7e29wdGlvbnMgey1nfX19IHsKKyAgIGdsb2JhbCBkZXZpY2VQYXRoCisKKyAgIHNldCBjb21tYW5kIFtsaXN0XQorICAgbGFwcGVuZCBjb21tYW5kIHN0dHkgLUYgJGRldmljZVBhdGgKKyAgIGV2YWwgbGFwcGVuZCBjb21tYW5kICRvcHRpb25zCisgICBsb2dOb3RlICJjb21tYW5kOiBbam9pbiAkY29tbWFuZCAiICJdIgorCisgICBsdmFycHVzaCBjb21tYW5kIGV4ZWMKKyAgIGxhcHBlbmQgY29tbWFuZCAyPkAgc3RkZXJyCisKKyAgIGlmIHtbY2F0Y2ggJGNvbW1hbmQgcmVzcG9uc2VdICE9IDB9IHsKKyAgICAgIGV4aXQgOQorICAgfQorCisgICByZXR1cm4gJHJlc3BvbnNlCit9CisKK3Byb2MgYWRkU2V0dGluZ1VzYWdlIHtsaW5lc1ZhcmlhYmxlIGxhYmVsIHNwZWNpZmljYXRpb24gZGVmYXVsdH0geworICAgdXB2YXIgMSAkbGluZXNWYXJpYWJsZSBsaW5lcworICAgbGFwcGVuZCBsaW5lcyAiVG8gc2V0IHRoZSAkbGFiZWwsIHNwZWNpZnkgJHNwZWNpZmljYXRpb24gKHRoZSBkZWZhdWx0IGlzICRkZWZhdWx0KS4iCit9CisKK3Byb2MgZ2V0QXJndW1lbnRzVXNhZ2VTdW1tYXJ5IHt9IHsKKyAgIHNldCBsaW5lcyBbbGlzdF0KKworICAgZ2xvYmFsIGRldmljZVBhdGgKKyAgIGFkZFNldHRpbmdVc2FnZSBsaW5lcyAicG9ydCIgInRoZSBhYnNvbHV0ZSBwYXRoIHRvIHRoZSBjb3JyZXNwb25kaW5nIHNlcmlhbCBkZXZpY2UiICRkZXZpY2VQYXRoCisKKyAgIGZvcmVhY2ggbmFtZSBbZ2V0U2VyaWFsUHJvcGVydHlOYW1lc10geworICAgICAgc2V0IGxhYmVsIFtnZXRTZXJpYWxQcm9wZXJ0eUxhYmVsICRuYW1lXQorICAgICAgc2V0IGNob2ljZXMgW2dldFNlcmlhbFByb3BlcnR5Q2hvaWNlcyAkbmFtZV0KKyAgICAgIHNldCBkZWZhdWx0IFtnZXRTZXJpYWxQcm9wZXJ0eURlZmF1bHQgJG5hbWVdCisgICAgICBhZGRTZXR0aW5nVXNhZ2UgbGluZXMgJGxhYmVsIFtmb3JtYXRDaG9pY2VzUGhyYXNlICRjaG9pY2VzXSAkZGVmYXVsdAorICAgfQorCisgICByZXR1cm4gJGxpbmVzCit9CisKK3Byb2MgcGFyc2VDb21tYW5kTGluZSB7fSB7CisgICBzZXQgb3B0aW9uRGVmaW5pdGlvbnMgeworICAgfQorCisgICBwcm9jZXNzUHJvZ3JhbUFyZ3VtZW50cyBvcHRpb25WYWx1ZXMgJG9wdGlvbkRlZmluaXRpb25zIGFyZ3VtZW50VmFsdWVzICJcW3NldHRpbmcgLi4uXF0iIGdldEFyZ3VtZW50c1VzYWdlU3VtbWFyeQorICAgcmV0dXJuICRhcmd1bWVudFZhbHVlcworfQorCitwcm9jIGdldFJlcXVlc3RlZENvbmZpZ3VyYXRpb24ge30geworICAgc2V0IGNvbmZpZ3VyYXRpb24gW2xpc3QgcmF3IC1lY2hvIC1lY2hvZSAtZWNob2sgLWVjaG9ubF0KKyAgIGxhcHBlbmQgY29uZmlndXJhdGlvbiBbZ2V0U2VyaWFsUHJvcGVydHlTZXR0aW5nIGxpbmVCYXVkXQorICAgbGFwcGVuZCBjb25maWd1cmF0aW9uIGNzW2dldFNlcmlhbFByb3BlcnR5U2V0dGluZyBkYXRhQml0c10KKworICAgZm9yZWFjaCBwcm9wZXJ0eSBbZ2V0U2VyaWFsUHJvcGVydHlOYW1lc10geworICAgICAgc2V0IHNldHRpbmcgW2dldFNlcmlhbFByb3BlcnR5U2V0dGluZyAkcHJvcGVydHldCisgICAgICBzZXQgb3B0aW9ucyBbZ2V0U2VyaWFsUHJvcGVydHlPcHRpb25zICRwcm9wZXJ0eV0KKworICAgICAgZm9yZWFjaCBvcHRpb24gW2RpY3Qga2V5cyAkb3B0aW9uc10geworICAgICAgICAgaWYgeyFbbGNvbnRhaW4gW2RpY3QgZ2V0ICRvcHRpb25zICRvcHRpb25dICRzZXR0aW5nXX0geworICAgICAgICAgICAgc2V0IG9wdGlvbiAiLSRvcHRpb24iCisgICAgICAgICB9CisKKyAgICAgICAgIGxhcHBlbmQgY29uZmlndXJhdGlvbiAkb3B0aW9uCisgICAgICB9CisgICB9CisKKyAgIHJldHVybiAkY29uZmlndXJhdGlvbgorfQorCitmb3JlYWNoIGFyZ3VtZW50IFtwYXJzZUNvbW1hbmRMaW5lXSB7CisgICBpZiB7W2NlcXVhbCBbZmlsZSBwYXRodHlwZSAkYXJndW1lbnRdIGFic29sdXRlXX0geworICAgICAgc2V0IGRldmljZVBhdGggJGFyZ3VtZW50CisgICB9IGVsc2UgeworICAgICAgc2V0IGZvdW5kIDAKKworICAgICAgZm9yZWFjaCBuYW1lIFtnZXRTZXJpYWxQcm9wZXJ0eU5hbWVzXSB7CisgICAgICAgICBpZiB7W2xjb250YWluIFtnZXRTZXJpYWxQcm9wZXJ0eUNob2ljZXMgJG5hbWVdICRhcmd1bWVudF19IHsKKyAgICAgICAgICAgIHNldCBmb3VuZCAxCisgICAgICAgICAgICBjb25maWd1cmVTZXJpYWxQcm9wZXJ0eSAkbmFtZSAkYXJndW1lbnQKKyAgICAgICAgICAgIGJyZWFrCisgICAgICAgICB9CisgICAgICB9CisKKyAgICAgIGlmIHshJGZvdW5kfSB7CisgICAgICAgICBzeW50YXhFcnJvciAidW5yZWNvZ25pemVkIHNlcmlhbCBwcm9wZXJ0eTogJGFyZ3VtZW50IgorICAgICAgfQorICAgfQorfQorCit2ZXJpZnlTZXJpYWxEZXZpY2UgJGRldmljZVBhdGgKK2xvZ1NlcmlhbENvbmZpZ3VyYXRpb24KKworc2V0IG9yaWdpbmFsQ29uZmlndXJhdGlvbiBbY29uZmlndXJlU2VyaWFsRGV2aWNlXQorc2V0IHJlcXVlc3RlZENvbmZpZ3VyYXRpb24gW2dldFJlcXVlc3RlZENvbmZpZ3VyYXRpb25dCisKK3RyeSB7CisgICBjb25maWd1cmVTZXJpYWxEZXZpY2UgJHJlcXVlc3RlZENvbmZpZ3VyYXRpb24KKworICAgdHJ5IHsKKyAgICAgIHdpdGhDaGFubmVsIGRldmljZUNoYW5uZWwgW29wZW4gJGRldmljZVBhdGgge1JEV1IgTk9DVFRZIE5PTkJMT0NLfV0geworICAgICAgICAgZmNvbmZpZ3VyZSAkZGV2aWNlQ2hhbm5lbCAtYnVmZmVyaW5nIG5vbmUgLXRyYW5zbGF0aW9uIGJpbmFyeQorCisgICAgICAgICBmaWxlZXZlbnQgJGRldmljZUNoYW5uZWwgcmVhZGFibGUgeworICAgICAgICAgICAgZm9yZWFjaCBieXRlIFtzcGxpdCBbcmVhZCAkZGV2aWNlQ2hhbm5lbF0gIiJdIHsKKyAgICAgICAgICAgICAgIHNjYW4gJGJ5dGUgJWMgbnVtYmVyCisgICAgICAgICAgICAgICBwdXRzIC1ub25ld2xpbmUgc3Rkb3V0IFtmb3JtYXQgIiUwMnggIiAkbnVtYmVyXQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBmbHVzaCBzdGRvdXQKKyAgICAgICAgIH0KKworICAgICAgICAgZmlsZWV2ZW50IHN0ZGluIHJlYWRhYmxlIHsKKyAgICAgICAgICAgIGlmIHtbc2V0IGxlbmd0aCBbZ2V0cyBzdGRpbiBsaW5lXV0gPT0gMH0geworICAgICAgICAgICAgICAgc2V0IGV4aXRTdGF0dXMgMAorICAgICAgICAgICAgfSBlbHNlaWYgeyRsZW5ndGggPiAwfSB7CisgICAgICAgICAgICAgICBwdXRzIC1ub25ld2xpbmUgJGRldmljZUNoYW5uZWwgW3N1YnN0IC1ub2NvbW1hbmRzIC1ub3ZhcmlhYmxlcyAkbGluZV0KKyAgICAgICAgICAgICAgIGZsdXNoICRkZXZpY2VDaGFubmVsCisgICAgICAgICAgICB9IGVsc2VpZiB7W2VvZiBzdGRpbl19IHsKKyAgICAgICAgICAgICAgIHNldCBleGl0U3RhdHVzIDAKKyAgICAgICAgICAgIH0KKyAgICAgICAgIH0KKworICAgICAgICAgdndhaXQgZXhpdFN0YXR1cworICAgICAgfQorICAgfSB0cmFwIHtQT1NJWH0ge3Byb2JsZW19IHsKKyAgICAgIHNlbWFudGljRXJyb3IgJG1lc3NhZ2UKKyAgIH0KK30gZmluYWxseSB7CisgICBjb25maWd1cmVTZXJpYWxEZXZpY2UgJG9yaWdpbmFsQ29uZmlndXJhdGlvbgorfQorCitleGl0ICRleGl0U3RhdHVzCmRpZmYgLS1naXQgYS9Ub29scy91cGRjbWRyZWYgYi9Ub29scy91cGRjbWRyZWYKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMWMzOGNiNgotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL3VwZGNtZHJlZgpAQCAtMCwwICsxLDUzIEBACisjIS9iaW4vYmFzaAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorIyAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyMKKyMgQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorIworIyBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorIworIyBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisjIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyMgbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisjCisjIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKy4gImBkaXJuYW1lICIkezB9ImAvLi4vcHJvbG9ndWUuc2giCitwYXJzZVByb2dyYW1Bcmd1bWVudHMgIiR7QH0iCisKK3NldFNvdXJjZVJvb3QKK3NldCAtZQorCitjZCAiJHtzb3VyY2VSb290fS8ke3Byb2dyYW1zU3ViZGlyZWN0b3J5fSIKK21ha2UgLS1zaWxlbnQgYnJsdHR5LWxzY21kcworbmV3VGV4dD0iJCguL2JybHR0eS1sc2NtZHMpIgorCitjZCAiJHtzb3VyY2VSb290fS8ke2RvY3VtZW50c1N1YmRpcmVjdG9yeX0iCitvdXRwdXRGaWxlPSJSRUFETUUuQ29tbWFuZFJlZmVyZW5jZSIKKworaWYgWyAtZSAiJHtvdXRwdXRGaWxlfSIgXQordGhlbgorICAgWyAtZiAiJHtvdXRwdXRGaWxlfSIgXSB8fCBzZW1hbnRpY0Vycm9yICJub3QgYSBmaWxlOiAke291dHB1dEZpbGV9IgorICAgWyAtciAiJHtvdXRwdXRGaWxlfSIgXSB8fCBzZW1hbnRpY0Vycm9yICJmaWxlIG5vdCByZWFkYWJsZTogJHtvdXRwdXRGaWxlfSIKKyAgIG9sZFRleHQ9IiQoY2F0ICIke291dHB1dEZpbGV9IikiCisKKyAgIGlmIFsgIiR7b2xkVGV4dH0iID0gIiR7bmV3VGV4dH0iIF0KKyAgIHRoZW4KKyAgICAgIGxvZ1Rhc2sgIm5vdCB1cGRhdGVkIgorICAgICAgZXhpdCAwCisgICBmaQorCisgICBbIC13ICIke291dHB1dEZpbGV9IiBdIHx8IHNlbWFudGljRXJyb3IgImZpbGUgbm90IHdyaXRhYmxlOiAke291dHB1dEZpbGV9IgorICAgZmlsZVZlcmI9InVwZGF0aW5nIgorZWxzZQorICAgZmlsZVZlcmI9ImFkZGluZyIKK2ZpCisKK2xvZ05vdGljZSAiJHtmaWxlVmVyYn0gZmlsZTogJHtvdXRwdXRGaWxlfSIKK2VjaG8gIiR7bmV3VGV4dH0iID4iJHtvdXRwdXRGaWxlfSIKK2V4aXQgMApkaWZmIC0tZ2l0IGEvVG9vbHMvdXBkY3N2cyBiL1Rvb2xzL3VwZGNzdnMKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYTUwOGU4ZgotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL3VwZGNzdnMKQEAgLTAsMCArMSwxMDkgQEAKKyMhL3Vzci9iaW4vZW52IHRjbHNoCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisjICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorIworIyBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisjCisjIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisjCisjIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyMgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorIyBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyMKKyMgV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworIworIyBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworc291cmNlIFtmaWxlIGpvaW4gW2ZpbGUgZGlybmFtZSBbaW5mbyBzY3JpcHRdXSAuLiBwcm9sb2d1ZS50Y2xdCitzb3VyY2UgW2ZpbGUgam9pbiAkc2NyaXB0RGlyZWN0b3J5IGNzdi50Y2xdCisKK3NldCBvcHRpb25EZWZpbml0aW9ucyB7CisgICB7dGVzdCAgICAgIGZsYWcgImRvbid0IHVwZGF0ZSB0aGUgZmlsZXMifQorfQorCitwcm9jZXNzUHJvZ3JhbUFyZ3VtZW50cyBvcHRpb25WYWx1ZXMgJG9wdGlvbkRlZmluaXRpb25zCitjZCBbZmlsZSBqb2luICRzb3VyY2VSb290ICRkb2N1bWVudHNTdWJkaXJlY3RvcnldCisKK2FycmF5IHNldCB0YWJsZUhlYWRlcnMgeworICAgYnJhaWxsZS1kcml2ZXIge2NvZGUgbmFtZSBhbGlhc2VzIG90aGVyc30KKyAgIHNwZWVjaC1kcml2ZXIgIHtjb2RlIG5hbWUgYWxpYXNlc30KKyAgIHNjcmVlbi1kcml2ZXIgIHtjb2RlIG5hbWV9CisKKyAgIHRleHQtdGFibGUgICAgICAgIHtuYW1lIGRlc2NyaXB0aW9ufQorICAgY29udHJhY3Rpb24tdGFibGUge25hbWUgZGVzY3JpcHRpb259CisgICBhdHRyaWJ1dGVzLXRhYmxlICB7bmFtZSBkZXNjcmlwdGlvbn0KKyAgIGtleWJvYXJkLXRhYmxlICAgIHtuYW1lIGRlc2NyaXB0aW9ufQorfQorCitwcm9jIG1ha2VMaXN0cyB7ZmlsZX0geworICAgc2V0IGxpc3RzIFtkaWN0IGNyZWF0ZV0KKyAgIHNldCBwYXR0ZXJuIHteIyhcdystKD86ZHJpdmVyfHRhYmxlKSlccysoWy1cd10rKVxzKiNccyooLio/KVxzKiR9CisKKyAgIGZvckVhY2hMaW5lIGxpbmUgJGZpbGUgeworICAgICAgaWYge1tyZWdleHAgJHBhdHRlcm4gJGxpbmUgeCBkaXJlY3RpdmUgb3BlcmFuZCBjb21tZW50XX0geworICAgICAgICAgZGljdCBsYXBwZW5kIGxpc3RzIFtzdHJpbmcgdG9sb3dlciAkZGlyZWN0aXZlXSBbbGluc2VydCBbbG1hcCBjb2x1bW4gW3NwbGl0ICRjb21tZW50ICI7Il0ge3N0cmluZyB0cmltICRjb2x1bW59XSAwICRvcGVyYW5kXQorICAgICAgfQorICAgfQorCisgICByZXR1cm4gJGxpc3RzCit9CisKK3Byb2MgdXBkYXRlVGFibGUge2xpc3RzIG5hbWV9IHsKKyAgIGdsb2JhbCB0YWJsZUhlYWRlcnMKKworICAgaWYge1tpbmZvIGV4aXN0cyB0YWJsZUhlYWRlcnMoJG5hbWUpXX0geworICAgICAgc2V0IGhlYWRlcnMgJHRhYmxlSGVhZGVycygkbmFtZSkKKyAgICAgIHNldCByb3dzIFtjc3ZOb3JtYWxpemVSb3dzIFtsaW5zZXJ0IFtkaWN0IGdldCAkbGlzdHMgJG5hbWVdIDAgJGhlYWRlcnNdIFtsbGVuZ3RoICRoZWFkZXJzXV0KKworICAgICAgaWYge1tyZWdleHAge14oLiopLWRyaXZlciR9ICRuYW1lIHggZHJpdmVyVHlwZV19IHsKKyAgICAgICAgIHNldCB1c2FnZUNvbHVtbiBbbGlzdCB1c2FnZV0KKyAgICAgICAgIHNldCBkcml2ZXJzRGlyZWN0b3J5IFtmaWxlIGpvaW4gJDo6c291cmNlUm9vdCAkOjpkcml2ZXJzU3ViZGlyZWN0b3J5IFtzdHJpbmcgdG90aXRsZSAkZHJpdmVyVHlwZV1dCisKKyAgICAgICAgIGZvcmVhY2ggY29sdW1ucyBbbHJhbmdlICRyb3dzIDEgZW5kXSB7CisgICAgICAgICAgICBzZXQgZHJpdmVyTmFtZSBbbGluZGV4ICRjb2x1bW5zIDFdCisgICAgICAgICAgICBzZXQgbWFrZUZpbGUgW2ZpbGUgam9pbiAkZHJpdmVyc0RpcmVjdG9yeSAkZHJpdmVyTmFtZSBNYWtlZmlsZS5pbl0KKworICAgICAgICAgICAgaWYge1tmaWxlIGV4aXN0cyAkbWFrZUZpbGVdfSB7CisgICAgICAgICAgICAgICBzZXQgZHJpdmVyVXNhZ2UgW2dldE1ha2VGaWxlUHJvcGVydHkgJG1ha2VGaWxlIERSSVZFUl9VU0FHRV0KKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICBzZXQgZHJpdmVyVXNhZ2UgIiIKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgbGFwcGVuZCB1c2FnZUNvbHVtbiAkZHJpdmVyVXNhZ2UKKyAgICAgICAgIH0KKworICAgICAgICAgc2V0IHJvd3MgW2xtYXAgY29sdW1ucyAkcm93cyB1c2FnZSAkdXNhZ2VDb2x1bW4geworICAgICAgICAgICAgbGluc2VydCAkY29sdW1ucyBlbmQgJHVzYWdlCisgICAgICAgICB9XQorICAgICAgfQorCisgICAgICBpZiB7W3VwZGF0ZUZpbGUgIiRuYW1lLmNzdiIgW2Nzdk1ha2VUYWJsZSAkcm93c10gJDo6b3B0aW9uVmFsdWVzKHRlc3QpXX0geworICAgICAgICAgcmV0dXJuIDEKKyAgICAgIH0KKyAgIH0gZWxzZSB7CisgICAgICBsb2dXYXJuaW5nICJ0YWJsZSBoZWFkZXJzIG5vdCBkZWZpbmVkOiAkbmFtZSIKKyAgIH0KKworICAgcmV0dXJuIDAKK30KKworcHJvYyB1cGRhdGVUYWJsZXMge2xpc3RzfSB7CisgICBzZXQgdXBkYXRlZCAwCisKKyAgIGZvcmVhY2ggbmFtZSBbZGljdCBrZXlzICRsaXN0c10geworICAgICAgaWYge1t1cGRhdGVUYWJsZSAkbGlzdHMgJG5hbWVdfSB7CisgICAgICAgICBzZXQgdXBkYXRlZCAxCisgICAgICB9CisgICB9CisKKyAgIHJldHVybiAkdXBkYXRlZAorfQorCitpZiB7IVt1cGRhdGVUYWJsZXMgW21ha2VMaXN0cyAiYnJsdHR5LmNvbmYuaW4iXV19IHsKKyAgIGxvZ01lc3NhZ2UgdGFzayAibm8gZmlsZXMgdXBkYXRlZCIKK30KKworZXhpdCAwCmRpZmYgLS1naXQgYS9Ub29scy91cGRmaWxlcyBiL1Rvb2xzL3VwZGZpbGVzCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjBhNzI1ZmUKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy91cGRmaWxlcwpAQCAtMCwwICsxLDUwIEBACisjIS9iaW4vYmFzaAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorIyAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyMKKyMgQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorIworIyBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorIworIyBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisjIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyMgbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisjCisjIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKy4gIiQoZGlybmFtZSAiJHswfSIpLy4uL3Byb2xvZ3VlLnNoIgorc2V0U291cmNlUm9vdAorY2QgJHNvdXJjZVJvb3QKKworYWRkUHJvZ3JhbU9wdGlvbiBjIGZsYWcgdXBkYXRlQ29tbWFuZFJlZmVyZW5jZSAidXBkYXRlIHRoZSBjb21tYW5kIHJlZmVyZW5jZSIKK2FkZFByb2dyYW1PcHRpb24gcyBmbGFnIHVwZGF0ZUFuZHJvaWRTZXR0aW5ncyAidXBkYXRlIHRoZSBBbmRyb2lkIHNldHRpbmdzIHJlc291cmNlcyIKK2FkZFByb2dyYW1PcHRpb24gdCBmbGFnIHVwZGF0ZUNTVlRhYmxlcyAidXBkYXRlIHRoZSBDU1YgdGFibGVzIgorYWRkUHJvZ3JhbU9wdGlvbiB1IGZsYWcgdXBkYXRlVVNCRGV2aWNlcyAidXBkYXRlIHRoZSBVU0IgZGV2aWNlIGxpc3RzIgorcGFyc2VQcm9ncmFtQXJndW1lbnRzICIke0B9IgorCit1cGRhdGVBbGw9dHJ1ZQorc2V0IC0tIHVwZGF0ZUFuZHJvaWRTZXR0aW5ncyB1cGRhdGVDb21tYW5kUmVmZXJlbmNlIHVwZGF0ZUNTVlRhYmxlcyB1cGRhdGVVU0JEZXZpY2VzCisKK2ZvciB2YXJpYWJsZQorZG8KKyAgICIkeyF2YXJpYWJsZX0iICYmIHVwZGF0ZUFsbD1mYWxzZQorZG9uZQorCisiJHt1cGRhdGVBbGx9IiAmJiB7CisgICBmb3IgdmFyaWFibGUKKyAgIGRvCisgICAgICBzZXRWYXJpYWJsZSAiJHt2YXJpYWJsZX0iIHRydWUKKyAgIGRvbmUKK30KKworIiR7dXBkYXRlQW5kcm9pZFNldHRpbmdzfSIgJiYgQW5kcm9pZC9Ub29scy9ta3NldHRpbmdzCisiJHt1cGRhdGVDb21tYW5kUmVmZXJlbmNlfSIgJiYgVG9vbHMvdXBkY21kcmVmCisiJHt1cGRhdGVDU1ZUYWJsZXN9IiAmJiBUb29scy91cGRjc3ZzCisiJHt1cGRhdGVVU0JEZXZpY2VzfSIgJiYgVG9vbHMvdXBkdXNiZGV2cworCitleGl0IDAKZGlmZiAtLWdpdCBhL1Rvb2xzL3VwZHVzYmRldnMgYi9Ub29scy91cGR1c2JkZXZzCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjEzZjU3YmQKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy91cGR1c2JkZXZzCkBAIC0wLDAgKzEsNzQ3IEBACisjIS91c3IvYmluL2VudiB0Y2xzaAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorIyAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyMKKyMgQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorIworIyBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorIworIyBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisjIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyMgbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisjCisjIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK3NvdXJjZSBbZmlsZSBqb2luIFtmaWxlIGRpcm5hbWUgW2luZm8gc2NyaXB0XV0gLi4gcHJvbG9ndWUudGNsXQorCitwcm9jIGxvZ1NvdXJjZVdhcm5pbmcge2xvY2F0aW9uIG1lc3NhZ2V9IHsKKyAgIGxvZ1dhcm5pbmcgIiRtZXNzYWdlOiBbZGljdCBnZXQgJGxvY2F0aW9uIGZpbGVdXFtbZGljdCBnZXQgJGxvY2F0aW9uIGxpbmVdXF0iCit9CisKK3Byb2MgbWFrZURlY2ltYWxOdW1iZXIge3ZhbHVlfSB7CisgICByZXR1cm4gW2V4cHIgeyR2YWx1ZSArIDB9XQorfQorCitwcm9jIGZvcm1hdERldmljZUlkZW50aWZpZXIge3ZlbmRvciBwcm9kdWN0fSB7CisgICByZXR1cm4gW2Zvcm1hdCAiJTA0WDolMDRYIiBbbWFrZURlY2ltYWxOdW1iZXIgJHZlbmRvcl0gW21ha2VEZWNpbWFsTnVtYmVyICRwcm9kdWN0XV0KK30KKworcHJvYyBtYWtlR2VuZXJpY0RldmljZVRhYmxlIHtkZWZpbml0aW9uc30geworICAgc2V0IHRhYmxlIFtkaWN0IGNyZWF0ZV0KKworICAgZm9yZWFjaCBkZWZpbml0aW9uICRkZWZpbml0aW9ucyB7CisgICAgICBzZXQgZW50cnkgW2RpY3QgY3JlYXRlXQorCisgICAgICBmb3JlYWNoIHtpbmRleCBwcm9wZXJ0eX0geworICAgICAgICAgMiB2ZW5kb3IKKyAgICAgICAgIDMgcHJvZHVjdAorICAgICAgfSB7CisgICAgICAgICBpZiB7JGluZGV4IDwgW2xsZW5ndGggJGRlZmluaXRpb25dfSB7CisgICAgICAgICAgICBpZiB7W3N0cmluZyBsZW5ndGggW3NldCB2YWx1ZSBbbGluZGV4ICRkZWZpbml0aW9uICRpbmRleF1dXSA+IDB9IHsKKyAgICAgICAgICAgICAgIGRpY3Qgc2V0IGVudHJ5ICRwcm9wZXJ0eSAkdmFsdWUKKyAgICAgICAgICAgIH0KKyAgICAgICAgIH0KKyAgICAgIH0KKworICAgICAgZGljdCBzZXQgdGFibGUgW2Zvcm1hdERldmljZUlkZW50aWZpZXIgW2xpbmRleCAkZGVmaW5pdGlvbiAwXSBbbGluZGV4ICRkZWZpbml0aW9uIDFdXSAkZW50cnkKKyAgIH0KKworICAgcmV0dXJuICR0YWJsZQorfQorCitwcm9jIHBhcnNlQ2hhbm5lbERlZmluaXRpb24ge2NoYW5uZWxWYXJpYWJsZSBsaW5lcyBsb2NhdGlvbiBzdHJpbmdzQXJyYXl9IHsKKyAgIHVwdmFyIDEgJHN0cmluZ3NBcnJheSBzdHJpbmdzCisKKyAgIHNldCBjaGFubmVsIFtkaWN0IGNyZWF0ZV0KKyAgIHNldCBvayAxCisKKyAgIGZvcmVhY2ggbGluZSAkbGluZXMgeworICAgICAgaWYge1tyZWdleHAge1x7XHMqL1wqXHMqKC4qPylccypcKi9ccyokfSAkbGluZSB4IG1vZGVsXX0geworICAgICAgICAgZGljdCBzZXQgY2hhbm5lbCBtb2RlbCAkbW9kZWwKKyAgICAgICAgIGNvbnRpbnVlCisgICAgICB9CisKKyAgICAgIGZvcmVhY2ggcHJvcGVydHkge3ZlbmRvciBwcm9kdWN0IHBhcmVudFZlbmRvciBwYXJlbnRQcm9kdWN0fSB7CisgICAgICAgICBzZXQgcHJlZml4IHtcLn0KKyAgICAgICAgIHNldCBzdWZmaXgge1xzKj1ccyooXFMqPylccyosfQorICAgICAgICAgc2V0IHBhdHRlcm4gIiR7cHJlZml4fSR7cHJvcGVydHl9JHtzdWZmaXh9IgorCisgICAgICAgICBpZiB7W3JlZ2V4cCAkcGF0dGVybiAkbGluZSB4IGlkZW50aWZpZXJdfSB7CisgICAgICAgICAgICBkaWN0IHNldCBjaGFubmVsICRwcm9wZXJ0eSAkaWRlbnRpZmllcgorICAgICAgICAgfQorICAgICAgfQorCisgICAgICBmb3JlYWNoIHByb3BlcnR5IHttYW51ZmFjdHVyZXJzIHByb2R1Y3RzfSB7CisgICAgICAgICBzZXQgcHJlZml4IHtcLn0KKyAgICAgICAgIHNldCBzdWZmaXgge1xzKj1ccyooXFMqPylccyosfQorICAgICAgICAgc2V0IHBhdHRlcm4gIiR7cHJlZml4fSR7cHJvcGVydHl9JHtzdWZmaXh9IgorCisgICAgICAgICBpZiB7W3JlZ2V4cCAkcGF0dGVybiAkbGluZSB4IG5hbWVdfSB7CisgICAgICAgICAgICBkaWN0IHNldCBjaGFubmVsICRwcm9wZXJ0eSAkc3RyaW5ncygkbmFtZSkKKyAgICAgICAgIH0KKyAgICAgIH0KKyAgIH0KKworICAgZm9yZWFjaCBwcm9wZXJ0eSB7bW9kZWwgdmVuZG9yIHByb2R1Y3R9IHsKKyAgICAgIGlmIHshW2RpY3QgZXhpc3RzICRjaGFubmVsICRwcm9wZXJ0eV19IHsKKyAgICAgICAgIGxvZ1NvdXJjZVdhcm5pbmcgJGxvY2F0aW9uICJwcm9wZXJ0eSBub3QgZGVmaW5lZDogJHByb3BlcnR5IgorICAgICAgICAgc2V0IG9rIDAKKyAgICAgIH0KKyAgIH0KKworICAgaWYgeyRva30geworICAgICAgZm9yZWFjaCBwcm9wZXJ0eSB7dmVuZG9yIHByb2R1Y3R9IHsKKyAgICAgICAgIGlmIHtbc3RyaW5nIGlzIGludGVnZXIgLXN0cmljdCBbc2V0IHZhbHVlIFtkaWN0IGdldCAkY2hhbm5lbCAkcHJvcGVydHldXV19IHsKKyAgICAgICAgICAgIGRpY3Qgc2V0IGNoYW5uZWwgJHByb3BlcnR5IFttYWtlRGVjaW1hbE51bWJlciAkdmFsdWVdCisgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgbG9nU291cmNlV2FybmluZyAkbG9jYXRpb24gIiRwcm9wZXJ0eSBpcyBub3QgbnVtZXJpYzogJHZhbHVlIgorICAgICAgICAgICAgZGljdCB1bnNldCBjaGFubmVsICRwcm9wZXJ0eQorICAgICAgICAgICAgc2V0IG9rIDAKKyAgICAgICAgIH0KKyAgICAgIH0KKworICAgICAgaWYgeyRva30geworICAgICAgICAgdXBsZXZlbCAxIFtsaXN0IHNldCAkY2hhbm5lbFZhcmlhYmxlICRjaGFubmVsXQorICAgICAgICAgcmV0dXJuIDEKKyAgICAgIH0KKyAgIH0KKworICAgcmV0dXJuIDAKK30KKworcHJvYyBwYXJzZUNoYW5uZWxEZWZpbml0aW9ucyB7Y2hhbm5lbHNWYXJpYWJsZSBsaW5lcyBsb2NhdGlvbiBzdHJpbmdzQXJyYXl9IHsKKyAgIHVwdmFyIDEgJGNoYW5uZWxzVmFyaWFibGUgY2hhbm5lbHMKKyAgIHVwdmFyIDEgJHN0cmluZ3NBcnJheSBzdHJpbmdzCisKKyAgIHNldCBsaW5lTnVtYmVyIFtkaWN0IGdldCAkbG9jYXRpb24gbGluZV0KKworICAgZm9yZWFjaCBsaW5lVGV4dCAkbGluZXMgeworICAgICAgaWYge1tpbmZvIGV4aXN0cyBkZWZpbml0aW9uXX0geworICAgICAgICAgaWYge1tyZWdleHAge1x9fSAkbGluZVRleHRdfSB7CisgICAgICAgICAgICBpZiB7W3BhcnNlQ2hhbm5lbERlZmluaXRpb24gY2hhbm5lbCAkZGVmaW5pdGlvbiAkbG9jYXRpb24gc3RyaW5nc119IHsKKyAgICAgICAgICAgICAgIGxhcHBlbmQgY2hhbm5lbHMgJGNoYW5uZWwKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgdW5zZXQgZGVmaW5pdGlvbgorICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGxhcHBlbmQgZGVmaW5pdGlvbiAkbGluZVRleHQKKyAgICAgICAgIH0KKyAgICAgIH0gZWxzZWlmIHtbcmVnZXhwIHtce30gJGxpbmVUZXh0XX0geworICAgICAgICAgc2V0IGRlZmluaXRpb24gW2xpc3QgJGxpbmVUZXh0XQorICAgICAgICAgZGljdCBzZXQgbG9jYXRpb24gbGluZSAkbGluZU51bWJlcgorICAgICAgfQorCisgICAgICBpbmNyIGxpbmVOdW1iZXIKKyAgIH0KK30KKworcHJvYyBwYXJzZVNvdXJjZUZpbGUge2NoYW5uZWxzVmFyaWFibGUgZmlsZX0geworICAgdXB2YXIgMSAkY2hhbm5lbHNWYXJpYWJsZSBjaGFubmVscworCisgICBpZiB7W2NhdGNoIFtsaXN0IG9wZW4gJGZpbGUge1JET05MWX1dIHN0cmVhbV0gPT0gMH0geworICAgICAgc2V0IGxvY2F0aW9uIFtkaWN0IGNyZWF0ZV0KKyAgICAgIGRpY3Qgc2V0IGxvY2F0aW9uIGZpbGUgJGZpbGUKKyAgICAgIHNldCBsaW5lTnVtYmVyIDAKKworICAgICAgd2hpbGUge1tnZXRzICRzdHJlYW0gbGluZVRleHRdID49IDB9IHsKKyAgICAgICAgIGluY3IgbGluZU51bWJlcgorCisgICAgICAgICBpZiB7W2luZm8gZXhpc3RzIGRlZmluaXRpb25zXX0geworICAgICAgICAgICAgaWYge1tyZWdleHAge15ccypFTkRfVVNCX0NIQU5ORUxfREVGSU5JVElPTlN9ICRsaW5lVGV4dF19IHsKKyAgICAgICAgICAgICAgIHBhcnNlQ2hhbm5lbERlZmluaXRpb25zIGNoYW5uZWxzICRkZWZpbml0aW9ucyAkbG9jYXRpb24gc3RyaW5ncworICAgICAgICAgICAgICAgdW5zZXQgZGVmaW5pdGlvbnMKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICBsYXBwZW5kIGRlZmluaXRpb25zICRsaW5lVGV4dAorICAgICAgICAgICAgfQorICAgICAgICAgfSBlbHNlaWYge1tpbmZvIGV4aXN0cyBzdHJpbmdzTGlzdF19IHsKKyAgICAgICAgICAgIGlmIHtbcmVnZXhwIHteXHMqRU5EX1VTQl9TVFJJTkdfTElTVH0gJGxpbmVUZXh0XX0geworICAgICAgICAgICAgICAgc2V0IHN0cmluZ3MoJHN0cmluZ3NOYW1lKSAkc3RyaW5nc0xpc3QKKyAgICAgICAgICAgICAgIHVuc2V0IHN0cmluZ3NMaXN0CisgICAgICAgICAgICAgICB1bnNldCBzdHJpbmdzTmFtZQorICAgICAgICAgICAgfSBlbHNlaWYge1tyZWdleHAge15ccyoiKC4qKSJccyosfSAkbGluZVRleHQgeCBzdHJpbmddfSB7CisgICAgICAgICAgICAgICBsYXBwZW5kIHN0cmluZ3NMaXN0ICRzdHJpbmcKKyAgICAgICAgICAgIH0KKyAgICAgICAgIH0gZWxzZWlmIHtbcmVnZXhwIHteXHMqQkVHSU5fVVNCX0NIQU5ORUxfREVGSU5JVElPTlN9ICRsaW5lVGV4dF19IHsKKyAgICAgICAgICAgIHNldCBkZWZpbml0aW9ucyBbbGlzdF0KKyAgICAgICAgICAgIGRpY3Qgc2V0IGxvY2F0aW9uIGxpbmUgW2V4cHIgeyRsaW5lTnVtYmVyICsgMX1dCisgICAgICAgICB9IGVsc2VpZiB7W3JlZ2V4cCB7XlxzKkJFR0lOX1VTQl9TVFJJTkdfTElTVFxzKlwoXHMqKC4qPylccypcKX0gJGxpbmVUZXh0IHggc3RyaW5nc05hbWVdfSB7CisgICAgICAgICAgICBzZXQgc3RyaW5nc0xpc3QgW2xpc3RdCisgICAgICAgICB9CisgICAgICB9CisKKyAgICAgIGNsb3NlICRzdHJlYW0KKyAgIH0gZWxzZSB7CisgICAgICB3cml0ZVByb2dyYW1NZXNzYWdlICRzdHJlYW0KKyAgIH0KK30KKworcHJvYyBwYXJzZVNvdXJjZUZpbGVzIHtjaGFubmVsc1ZhcmlhYmxlIGRyaXZlckRpcmVjdG9yeX0geworICAgdXB2YXIgMSAkY2hhbm5lbHNWYXJpYWJsZSBjaGFubmVscworCisgICBmb3JlYWNoIGZpbGUgW2dsb2IgLWRpcmVjdG9yeSAkZHJpdmVyRGlyZWN0b3J5IC1ub2NvbXBsYWluIHsqLltjaF19XSB7CisgICAgICBwYXJzZVNvdXJjZUZpbGUgY2hhbm5lbHMgJGZpbGUKKyAgIH0KKworICAgcmV0dXJuICRjaGFubmVscworfQorCitwcm9jIHBhcnNlRHJpdmVyIHtkaXJlY3Rvcnl9IHsKKyAgIHNldCBkcml2ZXIgW2RpY3QgY3JlYXRlXQorICAgZGljdCBzZXQgZHJpdmVyIG5hbWUgW3NldCBuYW1lIFtmaWxlIHRhaWwgJGRpcmVjdG9yeV1dCisKKyAgIHNldCBjaGFubmVscyBbbGlzdF0KKworICAgaWYge1tzdHJpbmcgbGVuZ3RoIFtzZXQgY29kZSBbZ2V0QnJhaWxsZURyaXZlckNvZGUgJG5hbWVdXV0gPiAwfSB7CisgICAgICBkaWN0IHNldCBkcml2ZXIgY29kZSAkY29kZQorICAgICAgcGFyc2VTb3VyY2VGaWxlcyBjaGFubmVscyAkZGlyZWN0b3J5CisgICB9IGVsc2UgeworICAgICAgbG9nV2FybmluZyAiZHJpdmVyIGNvZGUgbm90IGRlZmluZWQ6ICRuYW1lIgorICAgfQorCisgICBkaWN0IHNldCBkcml2ZXIgY2hhbm5lbHMgJGNoYW5uZWxzCisgICByZXR1cm4gJGRyaXZlcgorfQorCitwcm9jIHBhcnNlRHJpdmVycyB7fSB7CisgICBnbG9iYWwgc291cmNlUm9vdAorCisgICBzZXQgZHJpdmVycyBbbGlzdF0KKworICAgZm9yZWFjaCBkaXJlY3RvcnkgW2xzb3J0IFtnbG9iIC1kaXJlY3RvcnkgW2ZpbGUgam9pbiAkc291cmNlUm9vdCBEcml2ZXJzIEJyYWlsbGVdIC10eXBlcyB7ZCByIHh9IC1ub2NvbXBsYWluICpdXSB7CisgICAgICBpZiB7W2xsZW5ndGggW2RpY3QgZ2V0IFtzZXQgZHJpdmVyIFtwYXJzZURyaXZlciAkZGlyZWN0b3J5XV0gY2hhbm5lbHNdXSA+IDB9IHsKKyAgICAgICAgIGxhcHBlbmQgZHJpdmVycyAkZHJpdmVyCisgICAgICB9CisgICB9CisKKyAgIHJldHVybiAkZHJpdmVycworfQorCitwcm9jIGZvcm1hdERldmljZURlc2NyaXB0aW9uIHtkZXZpY2V9IHsKKyAgIHJldHVybiAiW2RpY3QgZ2V0ICRkZXZpY2UgbmFtZV0gXFtbZGljdCBnZXQgJGRldmljZSBjaGFubmVsIG1vZGVsXVxdIgorfQorCitwcm9jIG1ha2VEZXZpY2VUYWJsZSB7ZHJpdmVyc30geworICAgZ2xvYmFsIGdlbmVyaWNEZXZpY2VzCisgICBzZXQgZGV2aWNlVGFibGUgW2RpY3QgY3JlYXRlXQorICAgZGljdCBzZXQgZGV2aWNlVGFibGUgdmVuZG9ycyBbZGljdCBjcmVhdGVdCisKKyAgIGZvcmVhY2ggZHJpdmVyICRkcml2ZXJzIHsKKyAgICAgIGRpY3Qgd2l0aCBkcml2ZXIgeworICAgICAgICAgZm9yZWFjaCBjaGFubmVsICRjaGFubmVscyB7CisgICAgICAgICAgICBkaWN0IHdpdGggY2hhbm5lbCB7CisgICAgICAgICAgICAgICBzZXQgaWRlbnRpZmllciBbZm9ybWF0RGV2aWNlSWRlbnRpZmllciAkdmVuZG9yICRwcm9kdWN0XQorICAgICAgICAgICAgICAgc2V0IGRldmljZSBbZGljdCBjcmVhdGUgY29kZSAkY29kZSBuYW1lICRuYW1lIGNoYW5uZWwgJGNoYW5uZWxdCisKKyAgICAgICAgICAgICAgIGlmIHtbZGljdCBleGlzdHMgJGRldmljZVRhYmxlIHZlbmRvcnMgJHZlbmRvciBwcm9kdWN0cyAkcHJvZHVjdF19IHsKKyAgICAgICAgICAgICAgICAgIHNldCBkZXZpY2VzIFtkaWN0IGdldCAkZGV2aWNlVGFibGUgdmVuZG9ycyAkdmVuZG9yIHByb2R1Y3RzICRwcm9kdWN0IGRldmljZXNdCisgICAgICAgICAgICAgICAgICBsb2dOb3RlICJkZXZpY2Ugc3BlY2lmaWVkIG1vcmUgdGhhbiBvbmNlOiAkaWRlbnRpZmllcjogW2Zvcm1hdERldmljZURlc2NyaXB0aW9uIFtsaW5kZXggJGRldmljZXMgMF1dICYgW2Zvcm1hdERldmljZURlc2NyaXB0aW9uICRkZXZpY2VdIgorICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgIHNldCBkZXZpY2VzIFtsaXN0XQorICAgICAgICAgICAgICAgICAgZGljdCBzZXQgZGV2aWNlVGFibGUgdmVuZG9ycyAkdmVuZG9yIHByb2R1Y3RzICRwcm9kdWN0IGdlbmVyaWMgW2RpY3QgZXhpc3RzICRnZW5lcmljRGV2aWNlcyAkaWRlbnRpZmllcl0KKyAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgbGFwcGVuZCBkZXZpY2VzICRkZXZpY2UKKyAgICAgICAgICAgICAgIGRpY3Qgc2V0IGRldmljZVRhYmxlIHZlbmRvcnMgJHZlbmRvciBwcm9kdWN0cyAkcHJvZHVjdCBkZXZpY2VzICRkZXZpY2VzCisKKyAgICAgICAgICAgICAgIGlmIHtbZGljdCBnZXQgJGRldmljZVRhYmxlIHZlbmRvcnMgJHZlbmRvciBwcm9kdWN0cyAkcHJvZHVjdCBnZW5lcmljXX0geworICAgICAgICAgICAgICAgICAgbG9nTm90ZSAiZ2VuZXJpYyBkZXZpY2UgaWRlbnRpZmllcjogJGlkZW50aWZpZXI6IFtmb3JtYXREZXZpY2VEZXNjcmlwdGlvbiAkZGV2aWNlXSIKKyAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgIH0KKyAgICAgIH0KKyAgIH0KKworICAgcmV0dXJuICRkZXZpY2VUYWJsZQorfQorCitwcm9jIGdldFNjaGVtZXMge30geworICAgc2V0IHNjaGVtZXMgW2xpc3RdCisgICBzZXQgbGVuZ3RoIFtzdHJpbmcgbGVuZ3RoIFtzZXQgcHJlZml4IG1ha2VMaW5lc19dXQorCisgICBmb3JlYWNoIGNvbW1hbmQgW2luZm8gcHJvY3MgJHByZWZpeCpdIHsKKyAgICAgIGxhcHBlbmQgc2NoZW1lcyBbc3RyaW5nIHJhbmdlICRjb21tYW5kICRsZW5ndGggZW5kXQorICAgfQorCisgICByZXR1cm4gJHNjaGVtZXMKK30KKworcHJvYyBwYXJzZUZpbGVBcmd1bWVudHMge2ZpbGVzQXJyYXkgc2NoZW1lcyBhcmd1bWVudHN9IHsKKyAgIHVwdmFyIDEgJGZpbGVzQXJyYXkgZmlsZXMKKworICAgZm9yZWFjaCBhcmd1bWVudCAkYXJndW1lbnRzIHsKKyAgICAgIGlmIHtbc2V0IGluZGV4IFtzdHJpbmcgZmlyc3QgOiAkYXJndW1lbnRdXSA8IDB9IHsKKyAgICAgICAgIHN5bnRheEVycm9yICJzY2hlbWUgbm90IHNwZWNpZmllZDogJGFyZ3VtZW50IgorICAgICAgfQorCisgICAgICBpZiB7W3N0cmluZyBsZW5ndGggW3NldCBzY2hlbWUgW3N0cmluZyByYW5nZSAkYXJndW1lbnQgMCAkaW5kZXgtMV1dXSA9PSAwfSB7CisgICAgICAgICBzeW50YXhFcnJvciAic2NoZW1lIG5vdCBzcGVjaWZpZWQ6ICRhcmd1bWVudCIKKyAgICAgIH0KKworICAgICAgaWYgeyFbbGNvbnRhaW4gJHNjaGVtZXMgJHNjaGVtZV19IHsKKyAgICAgICAgIHN5bnRheEVycm9yICJ1bmtub3duIHNjaGVtZTogJHNjaGVtZSIKKyAgICAgIH0KKworICAgICAgaWYge1tzdHJpbmcgbGVuZ3RoIFtzZXQgcGF0aCBbc3RyaW5nIHJhbmdlICRhcmd1bWVudCAkaW5kZXgrMSBlbmRdXV0gPT0gMH0geworICAgICAgICAgc3ludGF4RXJyb3IgInBhdGggbm90IHNwZWNpZmllZDogJGFyZ3VtZW50IgorICAgICAgfQorCisgICAgICBpZiB7IVtmaWxlIGV4aXN0cyAkcGF0aF19IHsKKyAgICAgICAgIHNlbWFudGljRXJyb3IgImZpbGUgbm90IGZvdW5kOiAkcGF0aCIKKyAgICAgIH0KKworICAgICAgaWYgeyFbZmlsZSBpc2ZpbGUgJHBhdGhdfSB7CisgICAgICAgICBzZW1hbnRpY0Vycm9yICJub3QgYSBmaWxlOiAkcGF0aCIKKyAgICAgIH0KKworICAgICAgaWYgeyFbZmlsZSByZWFkYWJsZSAkcGF0aF19IHsKKyAgICAgICAgIHNlbWFudGljRXJyb3IgImZpbGUgbm90IHJlYWRhYmxlOiAkcGF0aCIKKyAgICAgIH0KKworICAgICAgaWYgeyFbZmlsZSB3cml0YWJsZSAkcGF0aF19IHsKKyAgICAgICAgIHNlbWFudGljRXJyb3IgImZpbGUgbm90IHdyaXRhYmxlOiAkcGF0aCIKKyAgICAgIH0KKworICAgICAgbGFwcGVuZCBmaWxlcygkc2NoZW1lKSAkcGF0aAorICAgfQorfQorCitwcm9jIGNvbXBhcmVGaWx0ZXJzIHtmaWx0ZXIxIGZpbHRlcjJ9IHsKKyAgIHNldCBsZW5ndGgxIFtsbGVuZ3RoICRmaWx0ZXIxXQorICAgc2V0IGxlbmd0aDIgW2xsZW5ndGggJGZpbHRlcjJdCisKKyAgIGlmIHskbGVuZ3RoMSA+ICRsZW5ndGgyfSB7CisgICAgICByZXR1cm4gLTEKKyAgIH0KKworICAgaWYgeyRsZW5ndGgxIDwgJGxlbmd0aDJ9IHsKKyAgICAgIHJldHVybiAxCisgICB9CisKKyAgIHJldHVybiBbc3RyaW5nIGNvbXBhcmUgJGZpbHRlcjEgJGZpbHRlcjJdCit9CisKK3Byb2MgeG1sTWFrZUNvbW1lbnQge2NvbW1lbnR9IHsKKyAgIHJldHVybiAiPCEtLSAkY29tbWVudCAtLT4iCit9CisKK3Byb2MgbWFrZUNvbW1lbnRfYW5kcm9pZCB7Y29tbWVudH0geworICAgcmV0dXJuIFt4bWxNYWtlQ29tbWVudCAkY29tbWVudF0KK30KKworcHJvYyBtYWtlTGluZXNfYW5kcm9pZCB7dmVuZG9yIHByb2R1Y3QgY29kZXMgZGVzY3JpcHRpb25zIGV4Y2x1ZGUgY2hhbm5lbHN9IHsKKyAgIHNldCBsaW5lcyBbbGlzdF0KKworICAgZm9yZWFjaCBkZXNjcmlwdGlvbiAkZGVzY3JpcHRpb25zIHsKKyAgICAgIGxhcHBlbmQgbGluZXMgW21ha2VDb21tZW50X2FuZHJvaWQgJGRlc2NyaXB0aW9uXQorICAgfQorCisgICBzZXQgbGluZSAiPHVzYi1kZXZpY2UgdmVuZG9yLWlkPVwiJHZlbmRvclwiIHByb2R1Y3QtaWQ9XCIkcHJvZHVjdFwiIC8+IgorICAgaWYgeyRleGNsdWRlfSB7CisgICAgICBzZXQgbGluZSBbbWFrZUNvbW1lbnRfYW5kcm9pZCAkbGluZV0KKyAgIH0KKyAgIGxhcHBlbmQgbGluZXMgJGxpbmUKKworICAgcmV0dXJuICRsaW5lcworfQorCitwcm9jIG1ha2VDb21tZW50X2Mge2NvbW1lbnR9IHsKKyAgIHJldHVybiAiLy8gJGNvbW1lbnQiCit9CisKK3Byb2MgbWFrZUxpbmVzX2Mge3ZlbmRvciBwcm9kdWN0IGNvZGVzIGRlc2NyaXB0aW9ucyBleGNsdWRlIGNoYW5uZWxzfSB7CisgICBzZXQgbGluZXMgW2xpc3RdCisKKyAgIGZvcmVhY2ggZGVzY3JpcHRpb24gJGRlc2NyaXB0aW9ucyB7CisgICAgICBsYXBwZW5kIGxpbmVzIFttYWtlQ29tbWVudF9jICRkZXNjcmlwdGlvbl0KKyAgIH0KKworICAgc2V0IGNvZGVzIFtsbWFwIGNvZGUgJGNvZGVzIHsKKyAgICAgIHNldCBjb2RlICJcIiRjb2RlXCIiCisgICB9XQorCisgICBsYXBwZW5kIGxpbmVzIFtmb3JtYXQgIlVTQl9ERVZJQ0VfRU5UUlkoMFglMDRYLCAwWCUwNFgsIFtqb2luICRjb2RlcyAiLCAiXSksIiAkdmVuZG9yICRwcm9kdWN0XQorICAgcmV0dXJuICRsaW5lcworfQorCitwcm9jIG1ha2VDb21tZW50X2hvdHBsdWcge2NvbW1lbnR9IHsKKyAgIHJldHVybiAiIyAkY29tbWVudCIKK30KKworcHJvYyBtYWtlTGluZXNfaG90cGx1ZyB7dmVuZG9yIHByb2R1Y3QgY29kZXMgZGVzY3JpcHRpb25zIGV4Y2x1ZGUgY2hhbm5lbHN9IHsKKyAgIHNldCBsaW5lcyBbbGlzdF0KKworICAgZm9yZWFjaCBkZXNjcmlwdGlvbiAkZGVzY3JpcHRpb25zIHsKKyAgICAgIGxhcHBlbmQgbGluZXMgW21ha2VDb21tZW50X2hvdHBsdWcgJGRlc2NyaXB0aW9uXQorICAgfQorCisgICBzZXQgbGluZSBbZm9ybWF0ICJicmx0dHkgMHglMDR4IDB4JTA0eCAweCUwNHgiIDMgJHZlbmRvciAkcHJvZHVjdF0KKyAgIGlmIHskZXhjbHVkZX0geworICAgICAgc2V0IGxpbmUgW21ha2VDb21tZW50X2hvdHBsdWcgJGxpbmVdCisgICB9CisgICBsYXBwZW5kIGxpbmVzICRsaW5lCisKKyAgIHJldHVybiAkbGluZXMKK30KKworcHJvYyBtYWtlQ29tbWVudF9pbmYge2NvbW1lbnR9IHsKKyAgIHJldHVybiAiOyAkY29tbWVudCIKK30KKworcHJvYyBtYWtlTGluZXNfaW5mIHt2ZW5kb3IgcHJvZHVjdCBjb2RlcyBkZXNjcmlwdGlvbnMgZXhjbHVkZSBjaGFubmVsc30geworICAgc2V0IGxpbmVzIFtsaXN0XQorICAgc2V0IGxpbmUgW2Zvcm1hdCAiXCJcJDE6ICVzXCI9XCQyLCBVU0JcXFZJRF8lMDRYJlBJRF8lMDRYIiBbam9pbiAkZGVzY3JpcHRpb25zICIsICJdICR2ZW5kb3IgJHByb2R1Y3RdCisKKyAgIGlmIHskZXhjbHVkZX0geworICAgICAgc2V0IGxpbmUgW21ha2VDb21tZW50X2luZiAkbGluZV0KKyAgIH0KKworICAgbGFwcGVuZCBsaW5lcyAkbGluZQorICAgcmV0dXJuICRsaW5lcworfQorCitwcm9jIG1ha2VDb21tZW50X21ldGFpbmZvIHtjb21tZW50fSB7CisgICByZXR1cm4gW3htbE1ha2VDb21tZW50ICRjb21tZW50XQorfQorCitwcm9jIG1ha2VMaW5lc19tZXRhaW5mbyB7dmVuZG9yIHByb2R1Y3QgY29kZXMgZGVzY3JpcHRpb25zIGV4Y2x1ZGUgY2hhbm5lbHN9IHsKKyAgIHNldCBsaW5lcyBbbGlzdF0KKworICAgZm9yZWFjaCBkZXNjcmlwdGlvbiAkZGVzY3JpcHRpb25zIHsKKyAgICAgIGxhcHBlbmQgbGluZXMgW21ha2VDb21tZW50X21ldGFpbmZvICRkZXNjcmlwdGlvbl0KKyAgIH0KKworICAgc2V0IGxpbmUgW2Zvcm1hdCAiPG1vZGFsaWFzPnVzYjp2JTA0WHAlMDRYKjwvbW9kYWxpYXM+IiAkdmVuZG9yICRwcm9kdWN0XQorICAgaWYgeyRleGNsdWRlfSB7CisgICAgICBzZXQgbGluZSBbbWFrZUNvbW1lbnRfbWV0YWluZm8gJGxpbmVdCisgICB9CisgICBsYXBwZW5kIGxpbmVzICRsaW5lCisKKyAgIHJldHVybiAkbGluZXMKK30KKworcHJvYyBtYWtlQ29tbWVudF91ZGV2IHtjb21tZW50fSB7CisgICByZXR1cm4gIiMgJGNvbW1lbnQiCit9CisKK3Byb2MgbWFrZUxpbmVzX3VkZXYge3ZlbmRvciBwcm9kdWN0IGNvZGVzIGRlc2NyaXB0aW9ucyBleGNsdWRlIGNoYW5uZWxzfSB7CisgICBzZXQgbGluZXMgW2xpc3RdCisKKyAgIGZvcmVhY2ggZGVzY3JpcHRpb24gJGRlc2NyaXB0aW9ucyB7CisgICAgICBsYXBwZW5kIGxpbmVzIFttYWtlQ29tbWVudF91ZGV2ICRkZXNjcmlwdGlvbl0KKyAgIH0KKworICAgc2V0IGJhc2VGaWx0ZXIgW2xpc3RdCisgICBsYXBwZW5kIGJhc2VGaWx0ZXIgW2Zvcm1hdCAiRU5We1BST0RVQ1R9PT1cIiV4LyV4LypcIiIgJHZlbmRvciAkcHJvZHVjdF0KKyAgIHNldCBiYXNlTGVuZ3RoIFtsbGVuZ3RoICRiYXNlRmlsdGVyXQorCisgICBmb3JlYWNoIGNoYW5uZWwgJGNoYW5uZWxzIHsKKyAgICAgIHNldCBmaWx0ZXIgJGJhc2VGaWx0ZXIKKworICAgICAgZm9yZWFjaCB7cHJvcGVydHkgYXR0cmlidXRlfSB7CisgICAgICAgICBtYW51ZmFjdHVyZXJzIG1hbnVmYWN0dXJlcgorICAgICAgICAgcHJvZHVjdHMgICAgICBwcm9kdWN0CisgICAgICB9IHsKKyAgICAgICAgIGlmIHtbZGljdCBleGlzdHMgJGNoYW5uZWwgJHByb3BlcnR5XX0geworICAgICAgICAgICAgZm9yZWFjaCBzdHJpbmcgW2RpY3QgZ2V0ICRjaGFubmVsICRwcm9wZXJ0eV0geworICAgICAgICAgICAgICAgbGFwcGVuZCBmaWx0ZXIgIkFUVFJ7JGF0dHJpYnV0ZX09PVwiJHN0cmluZ1wiIgorICAgICAgICAgICAgfQorICAgICAgICAgfQorICAgICAgfQorCisgICAgICBmb3JlYWNoIHtwcm9wZXJ0eSBhdHRyaWJ1dGV9IHsKKyAgICAgICAgIHBhcmVudFZlbmRvciAgaWRWZW5kb3IKKyAgICAgICAgIHBhcmVudFByb2R1Y3QgaWRQcm9kdWN0CisgICAgICB9IHsKKyAgICAgICAgIGlmIHtbZGljdCBleGlzdHMgJGNoYW5uZWwgJHByb3BlcnR5XX0geworICAgICAgICAgICAgc2V0IGlkZW50aWZpZXIgW2Zvcm1hdCAiJTA0eCIgW2RpY3QgZ2V0ICRjaGFubmVsICRwcm9wZXJ0eV1dCisgICAgICAgICAgICBsYXBwZW5kIGZpbHRlciAiQVRUUlN7JGF0dHJpYnV0ZX09PVwiJGlkZW50aWZpZXJcIiIKKyAgICAgICAgIH0KKyAgICAgIH0KKworICAgICAgbGFwcGVuZCBmaWx0ZXJzKCRmaWx0ZXIpIFtkaWN0IGdldCAkY2hhbm5lbCBjb2RlXQorICAgfQorCisgICBmb3JlYWNoIGZpbHRlciBbbHNvcnQgLWNvbW1hbmQgY29tcGFyZUZpbHRlcnMgW2FycmF5IG5hbWVzIGZpbHRlcnNdXSB7CisgICAgICBzZXQgZmlsdGVyTGVuZ3RoIFtsbGVuZ3RoICRmaWx0ZXJdCisgICAgICBzZXQgY29kZXMgW2xzb3J0IC11bmlxdWUgJGZpbHRlcnMoJGZpbHRlcildCisKKyAgICAgIHNldCBydWxlICRmaWx0ZXIKKyAgICAgIGxhcHBlbmQgcnVsZSAiRU5We0JSTFRUWV9CUkFJTExFX0RSSVZFUn09XCJbam9pbiAkY29kZXMgLF1cIiIKKyAgICAgIGxhcHBlbmQgcnVsZSAiR09UTz1cImJybHR0eV91c2JfcnVuXCIiCisgICAgICBzZXQgbGluZSBbam9pbiAkcnVsZSAiLCAiXQorCisgICAgICBpZiB7JGV4Y2x1ZGV9IHsKKyAgICAgICAgIHNldCBsaW5lIFttYWtlQ29tbWVudF91ZGV2ICRsaW5lXQorICAgICAgfQorCisgICAgICBsYXBwZW5kIGxpbmVzICRsaW5lCisgICB9CisKKyAgIHJldHVybiAkbGluZXMKK30KKworcHJvYyBtYWtlTGluZXMge2xpbmVzQXJyYXkgc2NoZW1lcyBkZXZpY2VUYWJsZX0geworICAgZ2xvYmFsIGdlbmVyaWNEZXZpY2VzCisgICB1cHZhciAjMCBvcHRpb25WYWx1ZXMobm9nZW5lcmljKSBub0dlbmVyaWNEZXZpY2VzCisgICB1cHZhciAjMCBvcHRpb25WYWx1ZXMob25seWdlbmVyaWMpIG9ubHlHZW5lcmljRGV2aWNlcworICAgdXB2YXIgIzAgb3B0aW9uVmFsdWVzKGtlZXApIGtlZXBFeGNsdWRlZERldmljZXMKKworICAgZm9yZWFjaCBzY2hlbWUgJHNjaGVtZXMgeworICAgICAgc2V0IG1ha2VMaW5lcyBtYWtlTGluZXNfJHNjaGVtZQorICAgICAgc2V0IG1ha2VDb21tZW50IG1ha2VDb21tZW50XyRzY2hlbWUKKworICAgICAgdXB2YXIgMSAke2xpbmVzQXJyYXl9KCRzY2hlbWUpIGxpbmVzCisgICAgICBzZXQgbGluZXMgW2xpc3QgIiJdCisKKyAgICAgIHNldCB2ZW5kb3JzIFtkaWN0IGdldCAkZGV2aWNlVGFibGUgdmVuZG9yc10KKworICAgICAgZm9yZWFjaCB2ZW5kb3IgW2xzb3J0IC1pbnRlZ2VyIFtkaWN0IGtleXMgJHZlbmRvcnNdXSB7CisgICAgICAgICBzZXQgdmVuZG9yRW50cnkgW2RpY3QgZ2V0ICR2ZW5kb3JzICR2ZW5kb3JdCisgICAgICAgICBzZXQgcHJvZHVjdHMgW2RpY3QgZ2V0ICR2ZW5kb3JFbnRyeSBwcm9kdWN0c10KKworICAgICAgICAgZm9yZWFjaCBwcm9kdWN0IFtsc29ydCAtaW50ZWdlciBbZGljdCBrZXlzICRwcm9kdWN0c11dIHsKKyAgICAgICAgICAgIHNldCBwcm9kdWN0RW50cnkgW2RpY3QgZ2V0ICRwcm9kdWN0cyAkcHJvZHVjdF0KKworICAgICAgICAgICAgc2V0IGlzR2VuZXJpYyBbZGljdCBnZXQgJHByb2R1Y3RFbnRyeSBnZW5lcmljXQorICAgICAgICAgICAgc2V0IGV4Y2x1ZGVEZXZpY2UgW2V4cHIgeyRpc0dlbmVyaWM/ICRub0dlbmVyaWNEZXZpY2VzOiAkb25seUdlbmVyaWNEZXZpY2VzfV0KKworICAgICAgICAgICAgaWYgeyRleGNsdWRlRGV2aWNlICYmICEka2VlcEV4Y2x1ZGVkRGV2aWNlc30geworICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgc2V0IGlkZW50aWZpZXIgW2Zvcm1hdERldmljZUlkZW50aWZpZXIgJHZlbmRvciAkcHJvZHVjdF0KKyAgICAgICAgICAgIGxhcHBlbmQgbGluZXMgWyRtYWtlQ29tbWVudCAiRGV2aWNlOiAkaWRlbnRpZmllciJdCisKKyAgICAgICAgICAgIHNldCBjb2RlcyBbbGlzdF0KKyAgICAgICAgICAgIHNldCBkZXNjcmlwdGlvbnMgW2xpc3RdCisgICAgICAgICAgICBzZXQgY2hhbm5lbHMgW2xpc3RdCisKKyAgICAgICAgICAgIGZvcmVhY2ggZGV2aWNlRW50cnkgW2RpY3QgZ2V0ICRwcm9kdWN0RW50cnkgZGV2aWNlc10geworICAgICAgICAgICAgICAgbGFwcGVuZCBjb2RlcyBbc2V0IGNvZGUgW2RpY3QgZ2V0ICRkZXZpY2VFbnRyeSBjb2RlXV0KKyAgICAgICAgICAgICAgIGxhcHBlbmQgZGVzY3JpcHRpb25zIFtzZXQgZGVzY3JpcHRpb24gW2Zvcm1hdERldmljZURlc2NyaXB0aW9uICRkZXZpY2VFbnRyeV1dCisKKyAgICAgICAgICAgICAgIHNldCBjaGFubmVsIFtkaWN0IGdldCAkZGV2aWNlRW50cnkgY2hhbm5lbF0KKyAgICAgICAgICAgICAgIGRpY3Qgc2V0IGNoYW5uZWwgY29kZSAkY29kZQorICAgICAgICAgICAgICAgZGljdCBzZXQgY2hhbm5lbCBkZXNjcmlwdGlvbiAkZGVzY3JpcHRpb24KKyAgICAgICAgICAgICAgIGxhcHBlbmQgY2hhbm5lbHMgJGNoYW5uZWwKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgc2V0IGNvZGVzIFtsc29ydCAtdW5pcXVlICRjb2Rlc10KKyAgICAgICAgICAgIHNldCBkZXNjcmlwdGlvbnMgW2xzb3J0ICRkZXNjcmlwdGlvbnNdCisKKyAgICAgICAgICAgIGlmIHskaXNHZW5lcmljfSB7CisgICAgICAgICAgICAgICBsYXBwZW5kIGxpbmVzIFskbWFrZUNvbW1lbnQgIkdlbmVyaWMgSWRlbnRpZmllciJdCisgICAgICAgICAgICAgICBzZXQgZ2VuZXJpYyBbZGljdCBnZXQgJGdlbmVyaWNEZXZpY2VzICRpZGVudGlmaWVyXQorCisgICAgICAgICAgICAgICBmb3JlYWNoIHtwcm9wZXJ0eSBoZWFkZXJ9IHsKKyAgICAgICAgICAgICAgICAgIHZlbmRvciBWZW5kb3IKKyAgICAgICAgICAgICAgICAgIHByb2R1Y3QgUHJvZHVjdAorICAgICAgICAgICAgICAgfSB7CisgICAgICAgICAgICAgICAgICBpZiB7W2RpY3QgZXhpc3RzICRnZW5lcmljICRwcm9wZXJ0eV19IHsKKyAgICAgICAgICAgICAgICAgICAgIGxhcHBlbmQgbGluZXMgWyRtYWtlQ29tbWVudCAiJGhlYWRlcjogW2RpY3QgZ2V0ICRnZW5lcmljICRwcm9wZXJ0eV0iXQorICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBldmFsIFtsaXN0IGxhcHBlbmQgbGluZXNdIFskbWFrZUxpbmVzICR2ZW5kb3IgJHByb2R1Y3QgJGNvZGVzICRkZXNjcmlwdGlvbnMgJGV4Y2x1ZGVEZXZpY2UgJGNoYW5uZWxzXQorICAgICAgICAgICAgbGFwcGVuZCBsaW5lcyAiIgorICAgICAgICAgfQorICAgICAgfQorICAgfQorfQorCitwcm9jIHVwZGF0ZUZpbGUge2ZpbGUgbmV3TGluZXN9IHsKKyAgIHVwdmFyICMwIG9wdGlvblZhbHVlcyh0ZXN0KSB0ZXN0TW9kZQorCisgICBzZXQgbGluZXMgW3JlYWRMaW5lcyAkZmlsZV0KKyAgIHNldCBtYXJrZXJTdWZmaXggIl9VU0JfQlJBSUxMRV9ERVZJQ0VTIgorICAgc2V0IGJlZ2luTWFya2VyICJCRUdJTiRtYXJrZXJTdWZmaXgiCisgICBzZXQgZW5kTWFya2VyICJFTkQkbWFya2VyU3VmZml4IgorCisgICBzZXQgcmFuZ2VzIFtsaXN0XQorICAgc2V0IHJhbmdlIFtsaXN0XQorICAgc2V0IGluZGV4IDAKKworICAgZm9yZWFjaCBsaW5lICRsaW5lcyB7CisgICAgICBzZXQgbG9jYXRpb24gIiRmaWxlXFtbZXhwciB7JGluZGV4ICsgMX1dXF0iCisKKyAgICAgIGlmIHtbcmVnZXhwICJcXHMke2JlZ2luTWFya2VyfSg/OlxccysoLio/KVxccyopP1wkIiAkbGluZSB4IGFyZ3VtZW50c119IHsKKyAgICAgICAgIGlmIHtbbGxlbmd0aCAkcmFuZ2VdID4gMH0geworICAgICAgICAgICAgd3JpdGVQcm9ncmFtTWVzc2FnZSAibmVzdGVkIGJlZ2luIG1hcmtlcjogJGxvY2F0aW9uIgorICAgICAgICAgICAgcmV0dXJuIDAKKyAgICAgICAgIH0KKworICAgICAgICAgbGFwcGVuZCByYW5nZSAkaW5kZXggW2xpbmRleCBbcmVnZXhwIC1pbmxpbmUgLS0ge15ccyp9ICRsaW5lXSAwXSBbcmVnZXhwIC1pbmxpbmUgLWFsbCB7XFMrfSAkYXJndW1lbnRzXQorICAgICAgfSBlbHNlaWYge1tyZWdleHAgIlxccyR7ZW5kTWFya2VyfSg/OlxccysuKik/XCQiICRsaW5lXX0geworICAgICAgICAgaWYge1tsbGVuZ3RoICRyYW5nZV0gPT0gMH0geworICAgICAgICAgICAgd3JpdGVQcm9ncmFtTWVzc2FnZSAibWlzc2luZyBiZWdpbiBtYXJrZXI6ICRsb2NhdGlvbiIKKyAgICAgICAgICAgIHJldHVybiAwCisgICAgICAgICB9CisKKyAgICAgICAgIGxhcHBlbmQgcmFuZ2UgJGluZGV4CisgICAgICAgICBsYXBwZW5kIHJhbmdlcyAkcmFuZ2UKKyAgICAgICAgIHNldCByYW5nZSBbbGlzdF0KKyAgICAgIH0KKworICAgICAgaW5jciBpbmRleAorICAgfQorCisgICBpZiB7W2xsZW5ndGggJHJhbmdlXSA+IDB9IHsKKyAgICAgIHdyaXRlUHJvZ3JhbU1lc3NhZ2UgIm1pc3NpbmcgZW5kIG1hcmtlcjogJGZpbGVcW1tsaW5kZXggJHJhbmdlIDBdXF0iCisgICAgICByZXR1cm4gMAorICAgfQorCisgICBpZiB7W2xsZW5ndGggJHJhbmdlc10gPT0gMH0geworICAgICAgd3JpdGVQcm9ncmFtTWVzc2FnZSAibm8gcmVnaW9uKHMpIGZvdW5kOiAkZmlsZSIKKyAgICAgIHJldHVybiAwCisgICB9CisKKyAgIHNldCBoYXNDaGFuZ2VkIDAKKworICAgZm9yZWFjaCByYW5nZSBbbHJldmVyc2UgJHJhbmdlc10geworICAgICAgc2V0IGZpcnN0IFtleHByIHtbbGluZGV4ICRyYW5nZSAwXSArIDF9XQorICAgICAgc2V0IHByZWZpeCBbbGluZGV4ICRyYW5nZSAxXQorICAgICAgc2V0IGFyZ3VtZW50Q291bnQgW2xsZW5ndGggW3NldCBhcmd1bWVudExpc3QgW2xpbmRleCAkcmFuZ2UgMl1dXQorICAgICAgc2V0IGxhc3QgW2V4cHIge1tsaW5kZXggJHJhbmdlIDNdIC0gMX1dCisgICAgICBzZXQgY291bnQgW2V4cHIgeyRsYXN0IC0gJGZpcnN0ICsgMX1dCisKKyAgICAgIHNldCByZXBsYWNlbWVudCBbbGlzdF0KKyAgICAgIGZvcmVhY2ggbGluZSAkbmV3TGluZXMgeworICAgICAgICAgZm9yZWFjaCBtYXRjaCBbbHJldmVyc2UgW3JlZ2V4cCAtaW5saW5lIC1hbGwgLWluZGljZXMge1wkWzEtOV1bMC05XSp9ICRsaW5lXV0geworICAgICAgICAgICAgc2V0IGZyb20gW2xpbmRleCAkbWF0Y2ggMF0KKyAgICAgICAgICAgIHNldCB0byBbbGluZGV4ICRtYXRjaCAxXQorICAgICAgICAgICAgc2V0IGFyZ3VtZW50SW5kZXggW3N0cmluZyByYW5nZSAkbGluZSAkZnJvbSsxICR0b10KKworICAgICAgICAgICAgaWYge1tpbmNyIGFyZ3VtZW50SW5kZXggLTFdIDwgJGFyZ3VtZW50Q291bnR9IHsKKyAgICAgICAgICAgICAgIHNldCBsaW5lIFtzdHJpbmcgcmVwbGFjZSAkbGluZSAkZnJvbSAkdG8gW2xpbmRleCAkYXJndW1lbnRMaXN0ICRhcmd1bWVudEluZGV4XV0KKyAgICAgICAgICAgIH0KKyAgICAgICAgIH0KKworICAgICAgICAgaWYge1tzdHJpbmcgbGVuZ3RoICRsaW5lXSA+IDB9IHsKKyAgICAgICAgICAgIHNldCBsaW5lICIkcHJlZml4JGxpbmUiCisgICAgICAgICB9CisKKyAgICAgICAgIGxhcHBlbmQgcmVwbGFjZW1lbnQgIiRsaW5lIgorICAgICAgfQorCisgICAgICBpZiB7ISRoYXNDaGFuZ2VkfSB7CisgICAgICAgICBpZiB7W2xsZW5ndGggJG5ld0xpbmVzXSAhPSAkY291bnR9IHsKKyAgICAgICAgICAgIHNldCBoYXNDaGFuZ2VkIDEKKyAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBzZXQgaW5kZXggMAorCisgICAgICAgICAgICB3aGlsZSB7JGluZGV4IDwgJGNvdW50fSB7CisgICAgICAgICAgICAgICBpZiB7W3N0cmluZyBjb21wYXJlIFtsaW5kZXggJGxpbmVzICRmaXJzdCskaW5kZXhdIFtsaW5kZXggJHJlcGxhY2VtZW50ICRpbmRleF1dICE9IDB9IHsKKyAgICAgICAgICAgICAgICAgIHNldCBoYXNDaGFuZ2VkIDEKKyAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgIGluY3IgaW5kZXgKKyAgICAgICAgICAgIH0KKyAgICAgICAgIH0KKyAgICAgIH0KKworICAgICAgaWYgeyRoYXNDaGFuZ2VkfSB7CisgICAgICAgICBpZiB7JGNvdW50ID09IDB9IHsKKyAgICAgICAgICAgIHNldCBsaW5lcyBbZXZhbCBbbGlzdCBsaW5zZXJ0ICRsaW5lcyAkZmlyc3RdICRyZXBsYWNlbWVudF0KKyAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBzZXQgbGluZXMgW2V2YWwgW2xpc3QgbHJlcGxhY2UgJGxpbmVzICRmaXJzdCAkbGFzdF0gJHJlcGxhY2VtZW50XQorICAgICAgICAgfQorICAgICAgfQorICAgfQorCisgICBpZiB7ISRoYXNDaGFuZ2VkfSB7CisgICAgICByZXR1cm4gMAorICAgfQorCisgICBpZiB7JHRlc3RNb2RlfSB7CisgICAgICB3cml0ZVByb2dyYW1NZXNzYWdlICJ0ZXN0IG1vZGUgLSBmaWxlIG5vdCB1cGRhdGVkOiAkZmlsZSIKKyAgIH0gZWxzZSB7CisgICAgICBsb2dNZXNzYWdlIG5vdGljZSAidXBkYXRpbmcgZmlsZTogJGZpbGUiCisgICAgICByZXBsYWNlRmlsZSAkZmlsZSAiW2pvaW4gJGxpbmVzIFxuXVxuIgorICAgfQorCisgICByZXR1cm4gMQorfQorCitwcm9jIHVwZGF0ZUZpbGVzIHtmaWxlc0FycmF5IGxpbmVzQXJyYXl9IHsKKyAgIHVwdmFyIDEgJGZpbGVzQXJyYXkgZmlsZXMKKyAgIHVwdmFyIDEgJGxpbmVzQXJyYXkgbGluZXMKKyAgIHNldCB1cGRhdGVkIDAKKworICAgZm9yZWFjaCBzY2hlbWUgW2FycmF5IG5hbWVzIGZpbGVzXSB7CisgICAgICBmb3JlYWNoIGZpbGUgJGZpbGVzKCRzY2hlbWUpIHsKKyAgICAgICAgIGlmIHtbdXBkYXRlRmlsZSAkZmlsZSAkbGluZXMoJHNjaGVtZSldfSB7CisgICAgICAgICAgICBzZXQgdXBkYXRlZCAxCisgICAgICAgICB9CisgICAgICB9CisgICB9CisKKyAgIHJldHVybiAkdXBkYXRlZAorfQorCitzZXQgZ2VuZXJpY0RldmljZXMgW21ha2VHZW5lcmljRGV2aWNlVGFibGUgeworICAgeyAgMFgwNDAzIDBYNjAwMQorICAgICAgIkZ1dHVyZSBUZWNobm9sb2d5IERldmljZXMgSW50ZXJuYXRpb25hbCwgTHRkLiIKKyAgICAgICJGVDIzMiBVU0ItU2VyaWFsIChVQVJUKSBJQyIKKyAgIH0KKworICAgeyAgMFgwNDAzIDBYNjAxMAorICAgICAgIkZ1dHVyZSBUZWNobm9sb2d5IERldmljZXMgSW50ZXJuYXRpb25hbCwgTHRkIgorICAgICAgIkZUMjIzMkMvRC9IIER1YWwgVUFSVC9GSUZPIElDIgorICAgfQorCisgICB7ICAwWDEwQzQgMFhFQTYwCisgICAgICAiQ3lnbmFsIEludGVncmF0ZWQgUHJvZHVjdHMsIEluYy4iCisgICAgICAiQ1AyMTB4IFVBUlQgQnJpZGdlIC8gbXlBVlIgbXlTbWFydFVTQiBsaWdodCIKKyAgIH0KKworICAgeyAgMFgxMEM0IDBYRUE4MAorICAgICAgIkN5Z25hbCBJbnRlZ3JhdGVkIFByb2R1Y3RzLCBJbmMuIgorICAgICAgIkNQMjEweCBVQVJUIEJyaWRnZSIKKyAgIH0KKworICAgeyAgMFgxQTg2IDBYNzUyMworICAgICAgIkppYW5nc3UgUWluSGVuZywgTHRkLiIKKyAgICAgICJDSDM0MSBVU0IgQnJpZGdlIENvbnRyb2xsZXIiCisgICB9Cit9XQorCitzZXQgb3B0aW9uRGVmaW5pdGlvbnMgeworICAge2tlZXAgICAgICAgICAgZmxhZyAia2VlcCBjb21tZW50ZWQgb3V0IHJ1bGVzIGZvciBleGNsdWRlZCBkZXZpY2VzIn0KKyAgIHtub2dlbmVyaWMgICAgIGZsYWcgImRvbid0IGluY2x1ZGUgZ2VuZXJpYyBkZXZpY2VzIn0KKyAgIHtvbmx5Z2VuZXJpYyAgIGZsYWcgIm9ubHkgaW5jbHVkZSBnZW5lcmljIGRldmljZXMifQorICAge3Rlc3QgICAgICAgICAgZmxhZyAiZG9uJ3QgdXBkYXRlIHRoZSBmaWxlcyJ9Cit9CisKK3Byb2Nlc3NQcm9ncmFtQXJndW1lbnRzIG9wdGlvblZhbHVlcyAkb3B0aW9uRGVmaW5pdGlvbnMgcG9zaXRpb25hbEFyZ3VtZW50cyAiXFtzY2hlbWU6ZmlsZSAuLi5cXSIKKworaWYge1tsbGVuZ3RoICRwb3NpdGlvbmFsQXJndW1lbnRzXSA9PSAwfSB7CisgICBsYXBwZW5kIHBvc2l0aW9uYWxBcmd1bWVudHMgImFuZHJvaWQ6W2ZpbGUgam9pbiAkc291cmNlUm9vdCBBbmRyb2lkIEdyYWRsZSBhcHAgc3JjIG1haW4gcmVzIHhtbCB1c2JfZGV2aWNlcy54bWxdIgorICAgbGFwcGVuZCBwb3NpdGlvbmFsQXJndW1lbnRzICJjOltmaWxlIGpvaW4gJHNvdXJjZVJvb3QgUHJvZ3JhbXMgdXNiX2RldmljZXMuY10iCisgICBsYXBwZW5kIHBvc2l0aW9uYWxBcmd1bWVudHMgImhvdHBsdWc6W2ZpbGUgam9pbiAkc291cmNlUm9vdCBBdXRvc3RhcnQgSG90cGx1ZyBicmx0dHkudXNlcm1hcF0iCisgICBsYXBwZW5kIHBvc2l0aW9uYWxBcmd1bWVudHMgIm1ldGFpbmZvOltmaWxlIGpvaW4gJHNvdXJjZVJvb3QgQXV0b3N0YXJ0IEFwcFN0cmVhbSBvcmcuYTExeS5icmx0dHkubWV0YWluZm8ueG1sXSIKKworICAgZm9yZWFjaCBmaWxlIFtnbG9iIC1kaXJlY3RvcnkgW2ZpbGUgam9pbiAkc291cmNlUm9vdCBXaW5kb3dzXSAtbm9jb21wbGFpbiAiKi5pbmYiXSB7CisgICAgICBsYXBwZW5kIHBvc2l0aW9uYWxBcmd1bWVudHMgImluZjokZmlsZSIKKyAgIH0KK30KKworaWYge1tsbGVuZ3RoICRwb3NpdGlvbmFsQXJndW1lbnRzXSA9PSAwfSB7CisgICBzeW50YXhFcnJvciAiZmlsZXMgbm90IHNwZWNpZmllZCIKK30KKworc2V0IHNjaGVtZXMgW2dldFNjaGVtZXNdCitwYXJzZUZpbGVBcmd1bWVudHMgZmlsZXMgJHNjaGVtZXMgJHBvc2l0aW9uYWxBcmd1bWVudHMKK21ha2VMaW5lcyBsaW5lcyBbYXJyYXkgbmFtZXMgZmlsZXNdIFttYWtlRGV2aWNlVGFibGUgW3BhcnNlRHJpdmVyc11dCisKK2lmIHshW3VwZGF0ZUZpbGVzIGZpbGVzIGxpbmVzXX0geworICAgbG9nTWVzc2FnZSB0YXNrICJubyBmaWxlcyB1cGRhdGVkIgorfQorCitleGl0IDAKZGlmZiAtLWdpdCBhL1dpbmRvd3MvTGliVVNCLTEuMC5zeW1saW5rcyBiL1dpbmRvd3MvTGliVVNCLTEuMC5zeW1saW5rcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMjQzMjhiCi0tLSAvZGV2L251bGwKKysrIGIvV2luZG93cy9MaWJVU0ItMS4wLnN5bWxpbmtzCkBAIC0wLDAgKzEsMyBAQAoraW5jbHVkZS9saWJ1c2J4LTEuMCAgICAgICAgICAvbWluZ3cvaW5jbHVkZS9saWJ1c2ItMS4wCitNaW5HVzMyL2RsbC9saWJ1c2ItMS4wLmRsbCAgIC9taW5ndy9iaW4vCitNaW5HVzMyL2RsbC9saWJ1c2ItMS4wLmRsbC5hIC9taW5ndy9saWIvCmRpZmYgLS1naXQgYS9XaW5kb3dzL0xpYlVTQi1XaW4zMi5zeW1saW5rcyBiL1dpbmRvd3MvTGliVVNCLVdpbjMyLnN5bWxpbmtzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVjM2IyMDAKLS0tIC9kZXYvbnVsbAorKysgYi9XaW5kb3dzL0xpYlVTQi1XaW4zMi5zeW1saW5rcwpAQCAtMCwwICsxLDMgQEAKK2luY2x1ZGUvbHVzYjBfdXNiLmggICAgIC9taW5ndy9pbmNsdWRlL3VzYi5oCitiaW4veDg2L2xpYnVzYjBfeDg2LmRsbCAvbWluZ3cvYmluL2xpYnVzYjAuZGxsCitsaWIvZ2NjL2xpYnVzYi5hICAgICAgICAvbWluZ3cvbGliLwpkaWZmIC0tZ2l0IGEvV2luZG93cy9hZmZpbml0eS5wYXRjaCBiL1dpbmRvd3MvYWZmaW5pdHkucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTUyODI5NgotLS0gL2Rldi9udWxsCisrKyBiL1dpbmRvd3MvYWZmaW5pdHkucGF0Y2gKQEAgLTAsMCArMSw0OSBAQAorSW5kZXg6IFByb2dyYW1zL3VzYl9saWJ1c2ItMS4wLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBQcm9ncmFtcy91c2JfbGlidXNiLTEuMC5jLm9yaWcKKysrKyBQcm9ncmFtcy91c2JfbGlidXNiLTEuMC5jCitAQCAtOTQsNiArOTQsMTkgQEAgc3RhdGljIGludAorIHVzYkdldEhhbmRsZSAoVXNiRGV2aWNlRXh0ZW5zaW9uICpkZXZ4KSB7CisgICBpZiAoIWRldngtPmhhbmRsZSkgeworICAgICBpbnQgcmVzdWx0OworKyAgICBEV09SRCBtYXNrLCBkdW1teTsKKysKKysgICAgaWYgKEdldFByb2Nlc3NBZmZpbml0eU1hc2soR2V0Q3VycmVudFByb2Nlc3MoKSwgJm1hc2ssICZkdW1teSkpIHsKKysgICAgICBpbnQgaTsKKysgICAgICBEV09SRCBuZXdtYXNrID0gMDsKKysgICAgICBmb3IgKGkgPSAwOyBpIDwgc2l6ZW9mKERXT1JEKSo4OyBpKyspCisrICAgICAgICBpZiAobWFzayAmICgxPDxpKSkgeworKwkgIG5ld21hc2sgPSAxPDxpOworKwkgIGJyZWFrOworKwl9CisrICAgICAgaWYgKG5ld21hc2spCisrCVNldFByb2Nlc3NBZmZpbml0eU1hc2soR2V0Q3VycmVudFByb2Nlc3MoKSwgbmV3bWFzayk7CisrICAgIH0KKyAKKyAgICAgaWYgKChyZXN1bHQgPSBsaWJ1c2Jfb3BlbihkZXZ4LT5kZXZpY2UsICZkZXZ4LT5oYW5kbGUpKSAhPSBMSUJVU0JfU1VDQ0VTUykgeworICAgICAgIHVzYlNldEVycm5vKHJlc3VsdCwgImxpYnVzYl9vcGVuIik7CitJbmRleDogUHJvZ3JhbXMvdXNiX2xpYnVzYi5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gUHJvZ3JhbXMvdXNiX2xpYnVzYi5jLm9yaWcKKysrKyBQcm9ncmFtcy91c2JfbGlidXNiLmMKK0BAIC0zNzgsNiArMzc4LDIwIEBAIHVzYkZpbmREZXZpY2UgKFVzYkRldmljZUNob29zZXIgY2hvb3NlciwKKyAgIFVzYkRldmljZSAqZGV2aWNlID0gTlVMTDsKKyAgIGludCByZXN1bHQ7CisgCisrICAgIERXT1JEIG1hc2ssIGR1bW15OworKworKyAgICBpZiAoR2V0UHJvY2Vzc0FmZmluaXR5TWFzayhHZXRDdXJyZW50UHJvY2VzcygpLCAmbWFzaywgJmR1bW15KSkgeworKyAgICAgIGludCBpOworKyAgICAgIERXT1JEIG5ld21hc2sgPSAwOworKyAgICAgIGZvciAoaSA9IDA7IGkgPCBzaXplb2YoRFdPUkQpKjg7IGkrKykKKysgICAgICAgIGlmIChtYXNrICYgKDE8PGkpKSB7CisrCSAgbmV3bWFzayA9IDE8PGk7CisrCSAgYnJlYWs7CisrCX0KKysgICAgICBpZiAobmV3bWFzaykKKysJU2V0UHJvY2Vzc0FmZmluaXR5TWFzayhHZXRDdXJyZW50UHJvY2VzcygpLCBuZXdtYXNrKTsKKysgICAgfQorKworICAgeworICAgICBzdGF0aWMgaW50IGluaXRpYWxpemVkID0gMDsKKyAgICAgaWYgKCFpbml0aWFsaXplZCkgewpkaWZmIC0tZ2l0IGEvV2luZG93cy9icmx0dHkuY2F0IGIvV2luZG93cy9icmx0dHkuY2F0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFkNzE2ZWYKLS0tIC9kZXYvbnVsbAorKysgYi9XaW5kb3dzL2JybHR0eS5jYXQKQEAgLTAsMCArMSBAQAorbm90IHlldApkaWZmIC0tZ2l0IGEvV2luZG93cy9icmx0dHkubnNpIGIvV2luZG93cy9icmx0dHkubnNpCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBkMGU1N2YKLS0tIC9kZXYvbnVsbAorKysgYi9XaW5kb3dzL2JybHR0eS5uc2kKQEAgLTAsMCArMSwyMzIgQEAKKztCUkxUVFkgaW5zdGFsbGVyCis7YXV0aG9yOiBKYW1lcyBUZWggPGphbWllQGphbnRyaWQubmV0PgorO0Jhc2VkIG9uIHRoZSBOU0lTIE1vZGVybiBVc2VyIEludGVyZmFjZSBTdGFydCBNZW51IEZvbGRlciBTZWxlY3Rpb24gRXhhbXBsZSBTY3JpcHQKKztXcml0dGVuIGJ5IEpvb3N0IFZlcmJ1cmcKKworOy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCis7SW5jbHVkZSBNb2Rlcm4gVUkKKworCSFpbmNsdWRlICJNVUkyLm5zaCIKKwkhaW5jbHVkZSAiTGlicmFyeS5uc2giCisKKzstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorO1Byb2R1Y3QgSW5mbworCisJIWRlZmluZSBQUk9EVUNUICJCUkxUVFkiCisJIWlmbmRlZiBWRVJTSU9OCisJCSFlcnJvciAiVkVSU0lPTiBpcyBub3QgZGVmaW5lZCIKKwkhZW5kaWYKKworICFkZWZpbmUgTVVJX1dFTENPTUVQQUdFX1RJVExFICQobXNnX1dlbGNvbWVQYWdlVGl0bGUpCisKKzstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorO0dlbmVyYWwKKworCTtOYW1lIGFuZCBmaWxlCisJTmFtZSAiJHtQUk9EVUNUfSIKKwlDYXB0aW9uICIke1BST0RVQ1R9ICR7VkVSU0lPTn0gU2V0dXAiCisJIWlmZGVmIE9VVEZJTEUKKwkJT3V0RmlsZSAiJHtPVVRGSUxFfSIKKwkhZWxzZQorCQlPdXRGaWxlICJicmx0dHktd2luLSR7VkVSU0lPTn0uZXhlIgorCSFlbmRpZgorCisJIWlmbmRlZiBESVNURElSCisJCSFkZWZpbmUgRElTVERJUiAiYnJsdHR5LXdpbi0ke1ZFUlNJT059LSR7VkFSSUFOVH0iCisJIWVuZGlmCisKKwlTZXRDb21wcmVzc29yIC9TT0xJRCBMWk1BCisJU2V0T3ZlcndyaXRlIElmTmV3ZXIKKworCTtEZWZhdWx0IGluc3RhbGxhdGlvbiBmb2xkZXIKKwlJbnN0YWxsRGlyICIkUFJPR1JBTUZJTEVTXCR7UFJPRFVDVH0iCisKKwk7R2V0IGluc3RhbGxhdGlvbiBmb2xkZXIgZnJvbSByZWdpc3RyeSBpZiBhdmFpbGFibGUKKwlJbnN0YWxsRGlyUmVnS2V5IEhLTE0gIlNvZnR3YXJlXCR7UFJPRFVDVH0iICIiCisKKwk7UmVxdWVzdCBhcHBsaWNhdGlvbiBwcml2aWxlZ2VzIGZvciBXaW5kb3dzIFZpc3RhCisJUmVxdWVzdEV4ZWN1dGlvbkxldmVsIGFkbWluCisKKzstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorO1ZhcmlhYmxlcworCisJVmFyIFN0YXJ0TWVudUZvbGRlcgorCis7LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKztJbnRlcmZhY2UgU2V0dGluZ3MKKworCSFkZWZpbmUgTVVJX0FCT1JUV0FSTklORworCis7LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKztQYWdlcworCisJIWluc2VydG1hY3JvIE1VSV9QQUdFX1dFTENPTUUKKwkhaW5zZXJ0bWFjcm8gTVVJX1BBR0VfTElDRU5TRSAiJHtESVNURElSfVxMSUNFTlNFLUxHUEwudHh0IgorCSFpbnNlcnRtYWNybyBNVUlfUEFHRV9ESVJFQ1RPUlkKKworOy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKwk7U3RhcnQgTWVudSBGb2xkZXIgUGFnZSBDb25maWd1cmF0aW9uCisJIWRlZmluZSBNVUlfU1RBUlRNRU5VUEFHRV9SRUdJU1RSWV9ST09UICJIS0xNIgorCSFkZWZpbmUgTVVJX1NUQVJUTUVOVVBBR0VfUkVHSVNUUllfS0VZICJTb2Z0d2FyZVwke1BST0RVQ1R9IgorCSFkZWZpbmUgTVVJX1NUQVJUTUVOVVBBR0VfUkVHSVNUUllfVkFMVUVOQU1FICJTdGFydCBNZW51IEZvbGRlciIKKworCSFpbnNlcnRtYWNybyBNVUlfUEFHRV9TVEFSVE1FTlUgQXBwbGljYXRpb24gJFN0YXJ0TWVudUZvbGRlcgorCisJIWluc2VydG1hY3JvIE1VSV9QQUdFX0lOU1RGSUxFUworCSFkZWZpbmUgTVVJX0ZJTklTSFBBR0VfU0hPV1JFQURNRSAiJElOU1RESVJcUkVBRE1FLnR4dCIKKwkhaW5zZXJ0bWFjcm8gTVVJX1BBR0VfRklOSVNICisKKwkhaW5zZXJ0bWFjcm8gTVVJX1VOUEFHRV9DT05GSVJNCisJIWluc2VydG1hY3JvIE1VSV9VTlBBR0VfSU5TVEZJTEVTCisKKzstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorO0xhbmd1YWdlcworCishZGVmaW5lIFVOSU5TVEFMTE9HX0xPQ0FMSVpFIDsgbmVjZXNzYXJ5IGZvciBsb2NhbGl6YXRpb24gb2YgbWVzc2FnZXMgZnJvbSB0aGUgdW5pbnN0YWxsYXRpb24gbG9nIGZpbGUKKworO1JlbWVtYmVyIHRoZSBpbnN0YWxsZXIgbGFuZ3VhZ2UKKyFkZWZpbmUgTVVJX0xBTkdETExfUkVHSVNUUllfUk9PVCAiSEtDVSIKKyFkZWZpbmUgTVVJX0xBTkdETExfUkVHSVNUUllfS0VZICJTb2Z0d2FyZVwke1BST0RVQ1R9IgorIWRlZmluZSBNVUlfTEFOR0RMTF9SRUdJU1RSWV9WQUxVRU5BTUUgIkluc3RhbGxlciBMYW5ndWFnZSIKKworIWluc2VydG1hY3JvIE1VSV9MQU5HVUFHRSAiRW5nbGlzaCIgOyBkZWZhdWx0IGxhbmd1YWdlCishaW5zZXJ0bWFjcm8gTVVJX0xBTkdVQUdFICJGcmVuY2giCishaW5zZXJ0bWFjcm8gTVVJX0xBTkdVQUdFICJHZXJtYW4iCishaW5zZXJ0bWFjcm8gTVVJX0xBTkdVQUdFICJTcGFuaXNoIgorIWluc2VydG1hY3JvIE1VSV9MQU5HVUFHRSAiU2ltcENoaW5lc2UiCishaW5zZXJ0bWFjcm8gTVVJX0xBTkdVQUdFICJUcmFkQ2hpbmVzZSIKKyFpbnNlcnRtYWNybyBNVUlfTEFOR1VBR0UgIkphcGFuZXNlIgorOyFpbnNlcnRtYWNybyBNVUlfTEFOR1VBR0UgIktvcmVhbiIKKyFpbnNlcnRtYWNybyBNVUlfTEFOR1VBR0UgIkl0YWxpYW4iCis7IWluc2VydG1hY3JvIE1VSV9MQU5HVUFHRSAiRHV0Y2giCis7IWluc2VydG1hY3JvIE1VSV9MQU5HVUFHRSAiRGFuaXNoIgorIWluc2VydG1hY3JvIE1VSV9MQU5HVUFHRSAiU3dlZGlzaCIKKzshaW5zZXJ0bWFjcm8gTVVJX0xBTkdVQUdFICJOb3J3ZWdpYW4iCis7IWluc2VydG1hY3JvIE1VSV9MQU5HVUFHRSAiTm9yd2VnaWFuTnlub3JzayIKKyFpbnNlcnRtYWNybyBNVUlfTEFOR1VBR0UgIkZpbm5pc2giCis7IWluc2VydG1hY3JvIE1VSV9MQU5HVUFHRSAiR3JlZWsiCishaW5zZXJ0bWFjcm8gTVVJX0xBTkdVQUdFICJSdXNzaWFuIgorIWluc2VydG1hY3JvIE1VSV9MQU5HVUFHRSAiUG9ydHVndWVzZSIKKyFpbnNlcnRtYWNybyBNVUlfTEFOR1VBR0UgIlBvcnR1Z3Vlc2VCUiIKKyFpbnNlcnRtYWNybyBNVUlfTEFOR1VBR0UgIlBvbGlzaCIKKzshaW5zZXJ0bWFjcm8gTVVJX0xBTkdVQUdFICJVa3JhaW5pYW4iCishaW5zZXJ0bWFjcm8gTVVJX0xBTkdVQUdFICJDemVjaCIKKyFpbnNlcnRtYWNybyBNVUlfTEFOR1VBR0UgIlNsb3ZhayIKKyFpbnNlcnRtYWNybyBNVUlfTEFOR1VBR0UgIkNyb2F0aWFuIgorOyFpbnNlcnRtYWNybyBNVUlfTEFOR1VBR0UgIkJ1bGdhcmlhbiIKKyFpbnNlcnRtYWNybyBNVUlfTEFOR1VBR0UgIkh1bmdhcmlhbiIKKyFpbnNlcnRtYWNybyBNVUlfTEFOR1VBR0UgIlRoYWkiCis7IWluc2VydG1hY3JvIE1VSV9MQU5HVUFHRSAiUm9tYW5pYW4iCis7IWluc2VydG1hY3JvIE1VSV9MQU5HVUFHRSAiTGF0dmlhbiIKKzshaW5zZXJ0bWFjcm8gTVVJX0xBTkdVQUdFICJNYWNlZG9uaWFuIgorOyFpbnNlcnRtYWNybyBNVUlfTEFOR1VBR0UgIkVzdG9uaWFuIgorOyFpbnNlcnRtYWNybyBNVUlfTEFOR1VBR0UgIlR1cmtpc2giCis7IWluc2VydG1hY3JvIE1VSV9MQU5HVUFHRSAiTGl0aHVhbmlhbiIKKzshaW5zZXJ0bWFjcm8gTVVJX0xBTkdVQUdFICJDYXRhbGFuIgorOyFpbnNlcnRtYWNybyBNVUlfTEFOR1VBR0UgIlNsb3ZlbmlhbiIKKzshaW5zZXJ0bWFjcm8gTVVJX0xBTkdVQUdFICJTZXJiaWFuIgorOyFpbnNlcnRtYWNybyBNVUlfTEFOR1VBR0UgIlNlcmJpYW5MYXRpbiIKKzshaW5zZXJ0bWFjcm8gTVVJX0xBTkdVQUdFICJBcmFiaWMiCis7IWluc2VydG1hY3JvIE1VSV9MQU5HVUFHRSAiRmFyc2kiCis7IWluc2VydG1hY3JvIE1VSV9MQU5HVUFHRSAiSGVicmV3IgorOyFpbnNlcnRtYWNybyBNVUlfTEFOR1VBR0UgIkluZG9uZXNpYW4iCis7IWluc2VydG1hY3JvIE1VSV9MQU5HVUFHRSAiTW9uZ29saWFuIgorOyFpbnNlcnRtYWNybyBNVUlfTEFOR1VBR0UgIkx1eGVtYm91cmdpc2giCis7IWluc2VydG1hY3JvIE1VSV9MQU5HVUFHRSAiQWxiYW5pYW4iCis7IWluc2VydG1hY3JvIE1VSV9MQU5HVUFHRSAiQnJldG9uIgorOyFpbnNlcnRtYWNybyBNVUlfTEFOR1VBR0UgIkJlbGFydXNpYW4iCis7IWluc2VydG1hY3JvIE1VSV9MQU5HVUFHRSAiSWNlbGFuZGljIgorOyFpbnNlcnRtYWNybyBNVUlfTEFOR1VBR0UgIk1hbGF5IgorOyFpbnNlcnRtYWNybyBNVUlfTEFOR1VBR0UgIkJvc25pYW4iCis7IWluc2VydG1hY3JvIE1VSV9MQU5HVUFHRSAiS3VyZGlzaCIKKzshaW5zZXJ0bWFjcm8gTVVJX0xBTkdVQUdFICJJcmlzaCIKKzshaW5zZXJ0bWFjcm8gTVVJX0xBTkdVQUdFICJVemJlayIKKyFpbnNlcnRtYWNybyBNVUlfTEFOR1VBR0UgIkdhbGljaWFuIgorOy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKzstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCis7IExhbmd1YWdlIHN0cmluZ3MKKyFpbmNsdWRlICIke0RJU1RESVJ9XG5zaXN0cmluZ3MudHh0IgorCis7LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKztJbnN0YWxsZXIgU2VjdGlvbnMKKworU2VjdGlvbiAiaW5zdGFsbCIKKworCVNldE91dFBhdGggIiRJTlNURElSIgorCVNldFNoZWxsVmFyQ29udGV4dCBhbGwKKworCTtTdG9wIHRoZSBCUkxUVFkgc2VydmljZSBpZiBpdCBpcyBydW5uaW5nLgorCUV4ZWNXYWl0ICIkU1lTRElSXG5ldC5leGUgc3RvcCBicmxhcGkiCisKKwlGaWxlIC9yIC94IGJybHR0eS5jb25mIC94IG5zaXN0cmluZ3MudHh0ICIke0RJU1RESVJ9XCoiCisJIyBJbnN0YWxsIHRoZSBjb25maWcgZmlsZSBzZXBhcmF0ZWx5IHNvIHdlIGNhbiBhdm9pZCBvdmVyd3JpdGluZyBpdC4KKwlTZXRPdmVyd3JpdGUgb2ZmCisJRmlsZSAvb25hbWU9ZXRjXGJybHR0eS5jb25mICIke0RJU1RESVJ9XGV0Y1xicmx0dHkuY29uZiIKKwlTZXRPdmVyd3JpdGUgSWZOZXdlcgorCisJIWluc2VydG1hY3JvIEluc3RhbGxMaWIgRExMIE5PVFNIQVJFRCBSRUJPT1RfTk9UUFJPVEVDVEVEICIke0RJU1RESVJ9XGJpblxicmxhcGktMC44LmRsbCIgIiRTWVNESVJcYnJsYXBpLTAuOC5kbGwiICIkU1lTRElSIgorCSFpbnNlcnRtYWNybyBJbnN0YWxsTGliIERMTCBOT1RTSEFSRUQgUkVCT09UX05PVFBST1RFQ1RFRCAiJHtESVNURElSfVxiaW5cbXN2Y3I5MC5kbGwiICIkU1lTRElSXG1zdmNyOTAuZGxsIiAiJFNZU0RJUiIKKwkhaW5zZXJ0bWFjcm8gSW5zdGFsbExpYiBETEwgTk9UU0hBUkVEIFJFQk9PVF9OT1RQUk9URUNURUQgIiR7RElTVERJUn1cYmluXGxpYmljb252LTIuZGxsIiAiJFNZU0RJUlxsaWJpY29udi0yLmRsbCIgIiRTWVNESVIiCisJIWluc2VydG1hY3JvIEJybHR0eUluc3RhbGwKKworCTtTdG9yZSBpbnN0YWxsYXRpb24gZm9sZGVyCisJV3JpdGVSZWdTdHIgSEtMTSAiU29mdHdhcmVcJHtQUk9EVUNUfSIgIiIgJElOU1RESVIKKworCTtDcmVhdGUgdW5pbnN0YWxsZXIKKwlXcml0ZVVuaW5zdGFsbGVyICIkSU5TVERJUlxVbmluc3RhbGwuZXhlIgorCVdyaXRlUmVnU3RyIEhLTE0gIlNvZnR3YXJlXE1pY3Jvc29mdFxXaW5kb3dzXEN1cnJlbnRWZXJzaW9uXFVuaW5zdGFsbFwke1BST0RVQ1R9IiAiVW5pbnN0YWxsU3RyaW5nIiAnIiRJTlNURElSXHVuaW5zdGFsbC5leGUiJworCVdyaXRlUmVnU3RyIEhLTE0gIlNvZnR3YXJlXE1pY3Jvc29mdFxXaW5kb3dzXEN1cnJlbnRWZXJzaW9uXFVuaW5zdGFsbFwke1BST0RVQ1R9IiAiRGlzcGxheU5hbWUiICIke1BST0RVQ1R9IgorCVdyaXRlUmVnU3RyIEhLTE0gIlNvZnR3YXJlXE1pY3Jvc29mdFxXaW5kb3dzXEN1cnJlbnRWZXJzaW9uXFVuaW5zdGFsbFwke1BST0RVQ1R9IiAiRGlzcGxheVZlcnNpb24iICIke1ZFUlNJT059IgorCVdyaXRlUmVnRFdPUkQgSEtMTSAiU29mdHdhcmVcTWljcm9zb2Z0XFdpbmRvd3NcQ3VycmVudFZlcnNpb25cVW5pbnN0YWxsXCR7UFJPRFVDVH0iICJOb01vZGlmeSIgIjEiCisJV3JpdGVSZWdEV09SRCBIS0xNICJTb2Z0d2FyZVxNaWNyb3NvZnRcV2luZG93c1xDdXJyZW50VmVyc2lvblxVbmluc3RhbGxcJHtQUk9EVUNUfSIgIk5vUmVwYWlyIiAiMSIKKworCSFpbnNlcnRtYWNybyBNVUlfU1RBUlRNRU5VX1dSSVRFX0JFR0lOIEFwcGxpY2F0aW9uCisKKwkJO0NyZWF0ZSBzaG9ydGN1dHMKKwkJQ3JlYXRlRGlyZWN0b3J5ICIkU01QUk9HUkFNU1wkU3RhcnRNZW51Rm9sZGVyIgorCQlDcmVhdGVTaG9ydEN1dCAiJFNNUFJPR1JBTVNcJFN0YXJ0TWVudUZvbGRlclwkKHNob3J0Y3V0X2JybHR0eWNuZikubG5rIiAiJElOU1RESVJcYnJsdHR5Y25mLmV4ZSIgLXIKKwkJQ3JlYXRlU2hvcnRDdXQgIiRTTVBST0dSQU1TXCRTdGFydE1lbnVGb2xkZXJcJChzaG9ydGN1dF9icmx0dHlkZWJ1ZykubG5rIiAiJElOU1RESVJcZGVidWctYnJsdHR5LmJhdCIKKwkJQ3JlYXRlU2hvcnRDdXQgIiRTTVBST0dSQU1TXCRTdGFydE1lbnVGb2xkZXJcJChzaG9ydGN1dF9pbnNzcnYpLmxuayIgIiRJTlNURElSXGluc3RhbGwuYmF0IgorCQlDcmVhdGVTaG9ydEN1dCAiJFNNUFJPR1JBTVNcJFN0YXJ0TWVudUZvbGRlclwkKHNob3J0Y3V0X3JtdnNydikubG5rIiAiJElOU1RESVJcdW5pbnN0YWxsLmJhdCIKKwkJQ3JlYXRlU2hvcnRDdXQgIiRTTVBST0dSQU1TXCRTdGFydE1lbnVGb2xkZXJcJChzaG9ydGN1dF91bmluc3RhbGwpLmxuayIgIiRJTlNURElSXFVuaW5zdGFsbC5leGUiCisJCSFpbnNlcnRtYWNybyBCcmx0dHlTaG9ydGN1dAorCisJIWluc2VydG1hY3JvIE1VSV9TVEFSVE1FTlVfV1JJVEVfRU5ECisKKwk7UmVtb3ZlIHRoZSBCUkxUVFkgc2VydmljZSBpZiBpdCBleGlzdHMuCisJRXhlY1dhaXQgIiRJTlNURElSXGJpblxicmx0dHkuZXhlIC1SIgorCTtJbnN0YWxsIHVzYiBpbmYuCisJRXhlY1dhaXQgIiRJTlNURElSXGJybHR0eWNuZi5leGUiCisJIWluc2VydG1hY3JvIEJybHR0eVR3ZWFrCisJO0luc3RhbGwgYW5kIHN0YXJ0IHRoZSBCUkxUVFkgc2VydmljZQorCUV4ZWNXYWl0ICIkSU5TVERJUlxiaW5cYnJsdHR5LmV4ZSAtSSIKKwlFeGVjV2FpdCAiJFNZU0RJUlxuZXQuZXhlIHN0YXJ0IGJybGFwaSIKKworU2VjdGlvbkVuZAorCis7LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKztVbmluc3RhbGxlciBTZWN0aW9uCisKK1NlY3Rpb24gIlVuaW5zdGFsbCIKKworCVNldFNoZWxsVmFyQ29udGV4dCBhbGwKKworCTtTdG9wIGFuZCByZW1vdmUgdGhlIEJSTFRUWSBzZXJ2aWNlCisJRXhlY1dhaXQgIiRTWVNESVJcbmV0LmV4ZSBzdG9wIGJybGFwaSIKKwlFeGVjV2FpdCAiJElOU1RESVJcYmluXGJybHR0eS5leGUgLVIiCisJIWluc2VydG1hY3JvIEJybHR0eVVuaW5zdGFsbAorCisJIWluc2VydG1hY3JvIFVuaW5zdGFsbExpYiBETEwgTk9UU0hBUkVEIFJFQk9PVF9OT1RQUk9URUNURUQgIiRTWVNESVJcYnJsYXBpLTAuOC5kbGwiCisKKwlSTURpciAvciAiJElOU1RESVIiCisKKwkhaW5zZXJ0bWFjcm8gTVVJX1NUQVJUTUVOVV9HRVRGT0xERVIgQXBwbGljYXRpb24gJFN0YXJ0TWVudUZvbGRlcgorCisJUk1EaXIgL3IgIiRTTVBST0dSQU1TXCRTdGFydE1lbnVGb2xkZXIiCisKKwlEZWxldGVSZWdLZXkgSEtMTSAiU29mdHdhcmVcJHtQUk9EVUNUfSIKKwlEZWxldGVSZWdLZXkgSEtMTSAiU29mdHdhcmVcTWljcm9zb2Z0XFdpbmRvd3NcQ3VycmVudFZlcnNpb25cVW5pbnN0YWxsXCR7UFJPRFVDVH0iCisKK1NlY3Rpb25FbmQKZGlmZiAtLWdpdCBhL1dpbmRvd3MvYnJsdHR5X3g2NC5jYXQgYi9XaW5kb3dzL2JybHR0eV94NjQuY2F0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFkNzE2ZWYKLS0tIC9kZXYvbnVsbAorKysgYi9XaW5kb3dzL2JybHR0eV94NjQuY2F0CkBAIC0wLDAgKzEgQEAKK25vdCB5ZXQKZGlmZiAtLWdpdCBhL1dpbmRvd3MvYnJsdHR5Y25mLmFoayBiL1dpbmRvd3MvYnJsdHR5Y25mLmFoawpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NmEyMzhiCi0tLSAvZGV2L251bGwKKysrIGIvV2luZG93cy9icmx0dHljbmYuYWhrCkBAIC0wLDAgKzEsMjU2IEBACitWZXJzaW9uID0gMC41CisKKworOy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKzsgUGxhdGZvcm06ICAgICAgICAgV2luZG93cyBYUC9WaXN0YQorOyBBdXRob3I6ICAgICAgICAgICBNaWNoZWwgU3VjaAorOyBBdXRvSG90a2V5ICAgICAJVmVyc2lvbjogMS4wLjQ3Cis7IFZlcnNpb24gOgkJCUFscGhhIHJlbGVhc2UgMQorOworOyBTY3JpcHQgRnVuY3Rpb246Cis7CUZhY2lsaXR5IHRvIGNvbmZpZ3VyZSBCcmFpbGxlIGRldmljZSBhbmQgY29tbXVuaWNhdGlvbiBwb3J0Cis7ICBmb3IgV2luZG93cyB2ZXJzaW9uIG9mIEJSTFRUWQorCisjU2luZ2xlSW5zdGFuY2UKKyNOb1RyYXlJY29uCisKKyNOb0VudiAgOyBSZWNvbW1lbmRlZCBmb3IgcGVyZm9ybWFuY2UgYW5kIGNvbXBhdGliaWxpdHkgd2l0aCBmdXR1cmUgQXV0b0hvdGtleSByZWxlYXNlcy4KK1NlbmRNb2RlIElucHV0ICA7IFJlY29tbWVuZGVkIGZvciBuZXcgc2NyaXB0cyBkdWUgdG8gaXRzIHN1cGVyaW9yIHNwZWVkIGFuZCByZWxpYWJpbGl0eS4KK1NldFdvcmtpbmdEaXIgJUFfU2NyaXB0RGlyJSAgOyBFbnN1cmVzIGEgY29uc2lzdGVudCBzdGFydGluZyBkaXJlY3RvcnkuCisKK0NuZkZpbGUgPSAlQV9TY3JpcHREaXIlXGV0Y1xicmx0dHkuY29uZiA7IENvbmZpZ3VyYXRpb24gZmlsZSBmb3IgQlJMVFRZCitHb3N1YiBTZXRMYW5ndWFnZQorCitJZk5vdEV4aXN0LCAlQ25mRmlsZSUKK3sKKyAgTXNnYm94LCAwLCAlU2NyaXB0TmFtZSUsICVDbmZGaWxlTm90Rm91bmRNc2clCisgIEV4aXRBcHAKK30KKworR29zdWIgU2VsZWN0UG9ydEFuZERpc3BsYXkKK1JldHVybgorCitTZWxlY3RQb3J0QW5kRGlzcGxheToKKworICA7IEZpbGwgYSBsaXN0Ym94IGZvciBwb3J0IHNlbGVjdGlvbgorICAgQ29tUG9ydHMgPSBVU0I6LEJMVUVUT09USDp8VVNCOnxCTFVFVE9PVEg6CisgICBDb21Qb3J0cyA9ICVDb21Qb3J0cyV8Q09NMXxDT00yfENPTTN8Q09NNHxDT001fENPTTZ8Q09NN3xDT004fENPTTkKKyAgIENvbVBvcnRzID0gJUNvbVBvcnRzJXxDT00xMHxDT00xMXxDT00xMnxDT00xM3xDT00xNHxDT00xNXxDT00xNnwKKworICA7IEZpbGwgYSBsaXN0Ym94IGZvciB0ZXJtaW5hbCBzZWxlY3Rpb24KKyAgOyBnZXR0aW5nIGRhdGEgZnJvbSBicmx0dHkuY29uZgorICAgTG9vcCwgcmVhZCwgJUNuZkZpbGUlCisgICB7CisgICAgIElmSW5TdHJpbmcgQV9Mb29wUmVhZExpbmUsICNicmFpbGxlLWRyaXZlcgorICAgICB7CisgICAgICAgVGVybSA6PSBTdWJTdHIoQV9Mb29wUmVhZExpbmUsIDE3KQorICAgICAgIFN0cmluZ1JlcGxhY2UsIFRlcm0sIFRlcm0sICMsIC0sIDEKKyAgICAgICBUZXJtTGlzdCA9ICVUZXJtTGlzdCUlVGVybSV8CisgICAgIH0KKyAgIH0KKworICA7IERyYXcgYW5kIGRpc3BsYXkgdGhlIHdpbmRvdworICAgR3VpLCBGb250LCBTMTIgQ0RlZmF1bHQsIEFyaWFsCisgICBHdWksIEFkZCwgVGV4dCwgeDYgeTYgdzgwMCBoMTYwLCAlSGVscFRleHQlCisKKyAgIEd1aSwgQWRkLCBUZXh0LCB4NiB5MTY2IHc0MDAgaDIwLCAlU2VsZWN0QnJhaWxsZURpc3BsYXlUZXh0JQorICAgR3VpLCBBZGQsIExpc3RCb3gsIHZUZXJtaW5hbCB4NiB5MTkwIHc0MDAgaDE1MCBoc2Nyb2xsIHZzY3JvbGwgLCAlVGVybUxpc3QlCisKKyAgIEd1aSwgQWRkLCBUZXh0LCAgeDQxMiB5MTY2IHc0MDAgaDIwLCAlU2VsZWN0QnJhaWxsZVBvcnRUZXh0JQorICAgR3VpLCBBZGQsIExpc3RCb3gsIHZDb21Qb3J0IHg0MTIgeTE5MCB3NDAwIGgxNTAgaHNjcm9sbCB2c2Nyb2xsICwgJUNvbVBvcnRzJQorICAgR3VpLCBBZGQsIEJ1dHRvbiwgdlNlbmQgZ1ZhbGlkYXRlIHg2NDAgeTM1MiB3MTAwIGgyNCArRGVmYXVsdCwgJU9LQnRuJQorICAgR3VpLCBBZGQsIEJ1dHRvbiwgdkNhbmNlbCBnR3VpQ2xvc2UgeDc1MCB5MzUyIHcxMDAgaDI0LCAlQ2FuY2VsQnRuJQorCisgICBHdWksIFNob3csIEF1dG9TaXplIENlbnRlciwgICAlU2NyaXB0TmFtZSUKKworICAgO1VzZSBFc2NhcGUgdG8gaW1tZWRpYXRlbHkgbGVhdmUgdGhlIHByb2dyYW0KKyAgIEVzY2FwZTo6CisgICAgICAgIEdvc3ViIEd1aUNsb3NlCisgICByZXR1cm4KK3JldHVybgorCisKKzstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorOyBGdW5jdGlvbnMKKzstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworCitWYWxpZGF0ZToKKyAgIEd1aUNvbnRyb2xHZXQsIFRlcm1pbmFsCisgICBpZiBUZXJtaW5hbCA9CisgICB7CisgICAgIE1zZ2JveCAwLCAlU2NyaXB0TmFtZSUsICVOZWVkVG9DaG9vc2VBRmlsZU1zZyUKKyAgICAgQ29udHJvbEZvY3VzLCAlU2VsZWN0QnJhaWxsZURpc3BsYXlUZXh0JSwgJVNjcmlwdE5hbWUlCisgICAgIFJldHVybgorICAgfQorICAgR3VpQ29udHJvbEdldCwgQ29tUG9ydAorICAgaWYgQ29tUG9ydCA9CisgICB7CisgICAgIE1zZ2JveCAwLCAlU2NyaXB0TmFtZSUsICVOZWVkVG9DaG9vc2VBUG9ydE1zZyUKKyAgICAgQ29udHJvbEZvY3VzLCAlU2VsZWN0QnJhaWxsZVBvcnRUZXh0JSwgJVNjcmlwdE5hbWUlCisgICAgIFJldHVybgorICAgfQorCisgICBTZXRUaW1lciwgQ2hhbmdlQnV0dG9uTmFtZXMsIDUwCisgICBNc2dib3ggMSwgJVNjcmlwdE5hbWUlLCAlWW91SGF2ZVNlbGVjdGVkTXNnJSAlVGVybWluYWwlYG4lQ29ubmVjdGVkVG9Qb3J0TXNnJSAlQ29tUG9ydCUKKyAgIElmTXNnQm94IE9LCisgICB7CisgICAgIElmSW5TdHJpbmcgQ29tUG9ydCwgQ09NCisgICAgIHsKKyAgICAgICBGaWxlQXBwZW5kIGJyYWlsbGUtZGV2aWNlIHNlcmlhbDolQ29tUG9ydCVgbiwgJUNuZkZpbGUlCisgICAgIH0KKyAgICAgRWxzZQorICAgICB7CisgICAgICAgRmlsZUFwcGVuZCBicmFpbGxlLWRldmljZSAlQ29tUG9ydCVgbiwgJUNuZkZpbGUlCisgICAgIH0KKyAgICAgU3RyaW5nUmVwbGFjZSBUZXJtaW5hbCwgVGVybWluYWwsIC0sICMKKyAgICAgRmlsZUFwcGVuZCBicmFpbGxlLWRyaXZlciAlVGVybWluYWwlYG4sICVDbmZGaWxlJQorCisgICAgIDsgUmVzdGFydCBCUkxUVFkgaWYgdGhlIC1yIHBhcmFtZXRlciB3YXMgcGFzc2VkCisgICAgIElmIDEgPSAtcgorICAgICB7CisgICAgICAgU3BsaXRQYXRoLCBDb21TcGVjLCwgU3lzRGlyCisgICAgICAgOyBTdG9wIEJybEFQSSBhbmQgQlJMVFRZIGlmIHN0YXJ0ZWQKKyAgICAgICBSdW5XYWl0LCAlU3lzRGlyJVxuZXQuZXhlIHN0b3AgQnJsQXBpCisgICAgICAgUnVuV2FpdCwgJUFfU2NyaXB0RGlyJVxiaW5cYnJsdHR5LmV4ZSAtUgorCisgICAgICAgOyBSZXN0YXJ0IEJSTFRUWSBhbmQgQnJsQVBJCisgICAgICAgUnVuV2FpdCwgJUFfU2NyaXB0RGlyJVxiaW5cYnJsdHR5LmV4ZSAtSQorICAgICAgIFJ1bldhaXQsICVTeXNEaXIlXG5ldC5leGUgc3RhcnQgQnJsQXBpCisgICAgIH0KKyAgICAgR29zdWIgR3VpQ2xvc2UKKyAgIH0KKyAgIENvbnRyb2xGb2N1cywgJVNlbGVjdEJyYWlsbGVEaXNwbGF5VGV4dCUsICVTY3JpcHROYW1lJQorcmV0dXJuCisKKzstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKztFbmQgdGhlIHByb2dyYW0KKworR3VpQ2xvc2U6CisgICBHdWksIGNhbmNlbAorICAgR3VpRXNjYXBlOgorICAgRXhpdEFwcAorCis7LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorOyBTdXBwb3J0IGZvciBkaWZmZXJlbnQgbGFuZ3VhZ2VzCisKK1NldExhbmd1YWdlOgorCis7IFRoaXMgcHJvY2VkdXJlIHVzZXMgdGhlIEF1dG9Ib3RrZXkgQV9MYW5ndWFnZSB2YXJpYWJsZQorOyB3aGljaCBjb250YWlucyB0aGUgbGFuZ3VhZ2UgY29kZSBvZiB0aGUgc3lzdGVtIHRoZSBwcm9ncmFtIGlzIHJ1bm5pbmcgb24uCis7IFRvIGdldCBhIGxpc3Qgb2YgQV9MYW5ndWFnZSB2YWx1ZXMgYW5kIGNvcnJlc3BvbmRpbmcgbGFuZ3VhZ2VzLCBnb3RvOgorOyBodHRwOi8vd3d3LmF1dG9ob3RrZXkuY29tL2RvY3MvbWlzYy9MYW5ndWFnZXMuaHRtCisKKyAgbGFuZ3VhZ2VDb2RlXzA0MGMgPSBGcmVuY2gKKyAgbGFuZ3VhZ2VDb2RlXzA4MGMgPSBGcmVuY2gKKyAgbGFuZ3VhZ2VDb2RlXzBjMGMgPSBGcmVuY2gKKyAgbGFuZ3VhZ2VDb2RlXzEwMGMgPSBGcmVuY2gKKyAgbGFuZ3VhZ2VDb2RlXzE0MGMgPSBGcmVuY2gKKyAgbGFuZ3VhZ2VDb2RlXzE4MGMgPSBGcmVuY2gKKworICBsYW5ndWFnZUNvZGVfMDQxNiA9IFBvcnR1Z3Vlc2UKKyAgbGFuZ3VhZ2VDb2RlXzA4MTYgPSBQb3J0dWd1ZXNlCisKKyAgdGhlX2xhbmd1YWdlIDo9IGxhbmd1YWdlQ29kZV8lQV9MYW5ndWFnZSUgIDsgR2V0IHRoZSBuYW1lIG9mIHRoZSBzeXN0ZW0ncyBkZWZhdWx0IGxhbmd1YWdlLgorICBpZiB0aGVfbGFuZ3VhZ2UgPQorICB7CisgICAgdGhlX2xhbmd1YWdlIDo9ICJFbmdsaXNoIgorICB9CisgIEdvc3ViICV0aGVfbGFuZ3VhZ2UlCitSZXR1cm4KKworCitDaGFuZ2VCdXR0b25OYW1lczoKKyAgSWZXaW5Ob3RFeGlzdCwgJVNjcmlwdE5hbWUlCisgCXJldHVybiAgOyBLZWVwIHdhaXRpbmcuCisgIFNldFRpbWVyLCBDaGFuZ2VCdXR0b25OYW1lcywgb2ZmCisgIFdpbkFjdGl2YXRlCisgIENvbnRyb2xTZXRUZXh0LCBCdXR0b24xLCAlT0tCdG4lCitDb250cm9sU2V0VGV4dCwgQnV0dG9uMiwgJUNhbmNlbEJ0biUKK3JldHVybgorCitFbmdsaXNoOiA7IEVuZ2xpc2ggdHJhbnNsYXRpb24gKGRlZmF1bHQpCisKKyAgU2NyaXB0TmFtZSA9ICBCUkxUVFkgQ29uZmlndXJhdG9yICVWZXJzaW9uJQorICBDbmZGaWxlTm90Rm91bmRNc2cgPSBGaWxlICVDbmZGaWxlJSBub3QgZm91bmQuCisgIE5lZWRUb0Nob29zZUFGaWxlTXNnID0gWW91IG11c3Qgc2VsZWN0IGEgYnJhaWxsZSBkaXNwbGF5CisgIE5lZWRUb0Nob29zZUFQb3J0TXNnID0gWW91IG11c3Qgc2VsZWN0IGEgY29tbXVuaWNhdGlvbiBwb3J0CisgIFlvdUhhdmVTZWxlY3RlZE1zZyA9IFlvdSBzZWxlY3RlZCB0ZXJtaW5hbAorICBDb25uZWN0ZWRUb1BvcnRNc2cgPSBhdHRhY2hlZCB0byBwb3J0CisKKyAgSGVscFRleHQgPQorICAoCisgIFBsZWFzZSBjaG9vc2UgdGhlIGJyYWlsbGUgZGlzcGxheSB0eXBlIGFuZCBjb21tdW5pY2F0aW9uIHBvcnQuCisgIC0gSWYgeW91ciBicmFpbGxlIGRldmljZSBpcyBVU0IsCisgICAgKiBpZiB5b3UgaGF2ZSBpbnN0YWxsZWQgeW91ciBtYW51ZmFjdHVyZXIncyBkcml2ZXIsIHlvdSBzaG91bGQgcmF0aGVyIHNlbGVjdCBpdHMgdmlydHVhbCBDT00gcG9ydCBpZiBpdCBwcm92aWRlcyBvbmUsCisgICAgICBlbHNlIHNlbGVjdCAiVVNCOiIgdG8gdXNlIGxpYnVzYi13aW4zMidzIGZpbHRlciwKKyAgICAqIGlmIHlvdSBkbyBub3Qgd2FudCBvciBjYW4gbm90IGluc3RhbGwgeW91ciBtYW51ZmFjdHVyZXIncyBkcml2ZXIsIHlvdSBjYW4gc2VsZWN0ICJVU0I6IiBoZXJlIGFuZCBpbnN0YWxsCisgICAgICBsaWJ1c2Itd2luMzIncyBkcml2ZXIuCisgIC0gSWYgeW91ciBicmFpbGxlIGRldmljZSBpcyBzZXJpYWwsIGlzIGNvbm5lY3QgdGhyb3VnaCBhIHNlcmlhbCB0byBVU0IgY29udmVydGVyLCBvciB0aHJvdWdoIGJsdWV0b290aCwganVzdCBzZWxlY3QgdGhlCisgICAgcHJvcGVyIENPTSBwb3J0LiAgTWFrZSBzdXJlIHRvIHNlbGVjdCB0aGUgcHJvcGVyIGJyYWlsbGUgZGlzcGxheSBhcyBpbmNvcnJlY3QgcHJvYmluZyBzZWVtcyB0byBwb3NzaWJseSBicmljayBzb21lIGRldmljZXMuCisgICkKKworICBTZWxlY3RCcmFpbGxlRGlzcGxheVRleHQgPSBTZWxlY3QgYnJhaWxsZSBkaXNwbGF5CisgIFNlbGVjdEJyYWlsbGVQb3J0VGV4dCA9IFNlbGVjdCBjb21tdW5pY2F0aW9uIHBvcnQKKworICBPS0J0biA9ICZPSworICBDYW5jZWxCdG4gPSAmQ2FuY2VsCitSZXR1cm4KKworRnJlbmNoOiA7IEZyZW5jaCB0cmFuc2xhdGlvbgorCisgIFNjcmlwdE5hbWUgPSAgQ29uZmlndXJhdGV1ciBCUkxUVFkgJVZlcnNpb24lCisgIENuZkZpbGVOb3RGb3VuZE1zZyA9IExlIGZpY2hpZXIgJUNuZkZpbGUlIGVzdCBpbnRyb3V2YWJsZQorICBOZWVkVG9DaG9vc2VBRmlsZU1zZyA9IFZvdXMgZGV2ZXogY2hvaXNpciB1biBhZmZpY2hldXIgYnJhaWxsZQorICBOZWVkVG9DaG9vc2VBUG9ydE1zZyA9IFZvdXMgZGV2ZXogY2hvaXNpciB1biBwb3J0IGRlIGNvbW11bmljYXRpb24KKyAgWW91SGF2ZVNlbGVjdGVkTXNnID0gVm91cyBhdmV6IGNob2lzaSBsJ2FmZmljaGV1cgorICBDb25uZWN0ZWRUb1BvcnRNc2cgPSBjb25uZWN06SBhdSBwb3J0CisKKyAgSGVscFRleHQgPQorICAoCisgIFZldWlsbGV6IGNob2lzaXIgbGUgdHlwZSBkJ2FmZmljaGV1ciBicmFpbGxlIGV0IGxlIHBvcnQgZGUgY29tbXVuaWNhdGlvbi4KKyAgLSBTaSB2b3RyZSBhZmZpY2hldXIgdXRpbGlzZSB1biBwb3J0IFVTQiwKKyAgICAqIHNpIHZvdXMgYXZleiBpbnN0YWxs6SBsZSBwaWxvdGUgZGUgdm90cmUgZmFicmlxdWFudCwgdm91cyBkZXZyaWV6IGNob2lzaXIgc29uIHBvcnQgQ09NIHZpcnR1ZWwgcydpbCBlbiBmb3Vybml0IHVuLCBzaW5vbgorICAgICAgY2hvaXNpc3NleiAiVVNCOiIgcG91ciB1dGlsaXNlciBsZSBmaWx0cmUgbGlidXNiLXdpbjMyLAorICAgICogc2kgdm91cyBuZSB2b3VsZXogcGFzIG91IG5lIHBvdXZleiBwYXMgaW5zdGFsbGVyIGxlIHBpbG90ZSBkZSB2b3RyZSBmYWJyaXF1YW50LCB2b3VzIHBvdXZleiBjaG9pc2lyICJVU0I6IiBpY2kgZXQKKyAgICAgIGluc3RhbGxlciBsZSBwaWxvdGUgbGlidXNiLXdpbjMyLgorICAtIFNpIHZvdHJlIGFmZmljaGV1ciBicmFpbGxlIHV0aWxpc2UgdW4gcG9ydCBz6XJpZSwgb3UgZXN0IGNvbm5lY3TpIHZpYSB1biBhZGFwdGF0ZXVyIFVTQiB2ZXJzIHPpcmllLCBvdSB2aWEgYmx1ZXRvb3RoLCBjaG9pc2lzc2V6IHNpbXBsZW1lbnQKKyAgICBsZSBwb3J0IENPTSBhcHByb3ByaekuIEFzc3VyZXotdm91cyBkZSBjaG9pc2lyIGxlIGJvbiBhZmZpY2hldXIgY2FyIHVuIGNob2l4IGluY29ycmVjdCBzZW1ibGUgcGFyZm9pcyBwbGFudGVyIGNlcnRhaW5zIG1hdOlyaWVscy4KKyAgKQorCisgIFNlbGVjdEJyYWlsbGVEaXNwbGF5VGV4dCA9IENob2lzaXNzZXogbCdhZmZpY2hldXIgYnJhaWxsZQorICBTZWxlY3RCcmFpbGxlUG9ydFRleHQgPSBDaG9pc2lzc2V6IGxlIHBvcnQgZGUgY29tbXVuaWNhdGlvbgorCisgIE9LQnRuID0gJkFjY2VwdGVyCisgIENhbmNlbEJ0biA9IEEmbm51bGVyCitSZXR1cm4KKworCitQb3J0dWd1ZXNlOiA7IFBvcnR1Z3Vlc2UgdHJhbnNsYXRpb24KKworICBTY3JpcHROYW1lID0gIENvbmZpZ3VyYWRvciBkbyBCUkxUVFkgJVZlcnNpb24lCisgIENuZkZpbGVOb3RGb3VuZE1zZyA9IE8gZmljaGVpcm8gJUNuZkZpbGUlIG7jbyBmb2kgZW5jb250cmFkbworICBOZWVkVG9DaG9vc2VBRmlsZU1zZyA9IFRlbSBxdWUgc2VsZWNjaW9uYXIgdW1hIGxpbmhhIEJyYWlsbGUKKyAgTmVlZFRvQ2hvb3NlQVBvcnRNc2cgPSBUZW0gcXVlIHNlbGVjY2lvbmFyIHVtYSBwb3J0YSBkZSBtY29tdW5pY2Hn428KKyAgWW91SGF2ZVNlbGVjdGVkTXNnID0gU2VsZWNjaW9ub3UgbyB0ZXJtaW5hbAorICBDb25uZWN0ZWRUb1BvcnRNc2cgPSBjb25lY3RhZG8g4CBwb3J0YQorCisgIEhlbHBUZXh0ID0KKyAgKAorICBQb3IgZmF2b3IgZXNjb2xoYSBvIHRpcG8gZGEgbGluaGEgQnJhaWxsZSBlIGEgcG9ydGEgZGUgY29tdW5pY2Hn428uCisgIC0gU2UgbyBzZXUgZGlzcG9zaXRpdm8gQnJhaWxsZSDpIFVTQiwKKyAgKiBzZSB0ZW0gaW5zdGFsYWRvIG8gZHJpdmVyIGRvIGZhYnJpY2FudGUsIGRldmVy4SBzZWxlY2Npb25hciBhIHBvcnRhIGRlIHPpcmllIHJlc3BlY3RpdmEgc2UgZXhpc3RpciwgY2FzbyBjb250cuFyaW8KKyAgCXNlbGVjY2lvbmUgIlVTQjoiIHBhcmEgdXNhciBvIGZpbHRybyBsaWJ1c2Itd2luMzIncy4KKyAgKiBzZSBu428gcHJldGVuZGUgb3UgbuNvIGNvbnNlZ3VlIGluc3RhbGFyIG8gZHJpdmVyIGRvIGZhYnJpY2FudGUsIHBvZGUgc2VsZWNjaW9uYXIgYXF1aSAiVVNCOiIgZSBpbnN0YWxhcgorICAJbyBkcml2ZXIgbGlidXNiLXdpbjMyJ3MuCisgIC0gU2UgbyBzZXUgZGlzcG9zaXRpdm8gYnJhaWxsZSB0cmFiYWxoYSB2aWEgcG9ydGEgc+lyaWUsIHNlbGVjY2lvbmUgYSBhcHJvcHJpYWRhLiBUZW5oYSBhIGNlcnRlemEgcXVlIHNlbGVjY2lvbmEgYSBsaW5oYSBCcmFpbGxlIGNvcnJlY3RhIHZpc3RvIHF1ZQorICAJdXRpbGl6YXIgZHJpdmVycyBlcnJhZG9zIHBvZGVy4SBkYW5pZmljYXIgYWxndW5zIGRpc3Bvc2l0aXZvcy4uLgorICApCisKKyAgU2VsZWN0QnJhaWxsZURpc3BsYXlUZXh0ID0gU2VsZWNjaW9uZSBhIGxpbmhhIEJyYWlsbGUKKyAgU2VsZWN0QnJhaWxsZVBvcnRUZXh0ID0gU2VsZWNjaW9uZSBhIHBvcnRhIGRlIGNvbXVuaWNh5+NvCisKKyAgT0tCdG4gPSAmT0sKKyAgQ2FuY2VsQnRuID0gJkNhbmNlbGFyCitSZXR1cm4KZGlmZiAtLWdpdCBhL1dpbmRvd3MvZGVidWctYnJsdHR5LmJhdCBiL1dpbmRvd3MvZGVidWctYnJsdHR5LmJhdApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4zMDNmZDc4Ci0tLSAvZGV2L251bGwKKysrIGIvV2luZG93cy9kZWJ1Zy1icmx0dHkuYmF0CkBAIC0wLDAgKzEsOCBAQAorQGVjaG8gb2ZmCisKK3NldGxvY2FsCitzZXQgcHJvZ3JhbURpcmVjdG9yeT0lfmRwMAorc2V0IGxvZ0xldmVsPWRlYnVnLHNlcmlhbCx1c2IsYnQsaW5wa3RzLG91dHBrdHMsYnJsZHJ2LHNjcmRydgorCitjYWxsICIlcHJvZ3JhbURpcmVjdG9yeSVydW4tYnJsdHR5IiAtbCAiJWxvZ0xldmVsJSIgJSoKK2V4aXQgL0IgJUVSUk9STEVWRUwlCmRpZmYgLS1naXQgYS9XaW5kb3dzL2Rpc2FibGUtYnJsYXBpLmJhdCBiL1dpbmRvd3MvZGlzYWJsZS1icmxhcGkuYmF0Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjMxM2M1ZDYKLS0tIC9kZXYvbnVsbAorKysgYi9XaW5kb3dzL2Rpc2FibGUtYnJsYXBpLmJhdApAQCAtMCwwICsxLDEyIEBACitAZWNobyBvZmYKKworc2V0bG9jYWwKK3NldCBwcm9ncmFtRGlyZWN0b3J5PSV+ZHAwCisKK2NhbGwgIiVwcm9ncmFtRGlyZWN0b3J5JXNldHZhcnMtYnJsYXBpIgorbmV0IHN0b3AgJXNlcnZpY2VOYW1lJQorCitzZXQgcHJvZ3JhbU5hbWU9ZGlzYWJsZQorY2FsbCAiJXByb2dyYW1EaXJlY3RvcnklcnVuLWJybHR0eSIgLVIgJSoKKworZXhpdCAvQiAwCmRpZmYgLS1naXQgYS9XaW5kb3dzL2VuYWJsZS1icmxhcGkuYmF0IGIvV2luZG93cy9lbmFibGUtYnJsYXBpLmJhdApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5iZWQwYTFiCi0tLSAvZGV2L251bGwKKysrIGIvV2luZG93cy9lbmFibGUtYnJsYXBpLmJhdApAQCAtMCwwICsxLDQ3IEBACitAZWNobyBvZmYKKworc2V0bG9jYWwgRW5hYmxlRGVsYXllZEV4cGFuc2lvbgorc2V0IHByb2dyYW1EaXJlY3Rvcnk9JX5kcDAKK2NhbGwgIiVwcm9ncmFtRGlyZWN0b3J5JXNldHZhcnMtYnJsYXBpIgorCitzZXQgc2VydmljZVN0YXRlPQorZm9yIC9GICJ1c2ViYWNrcSB0b2tlbnM9MSw0IiAlJUEgaW4gKAorICAgYHNjIHF1ZXJ5ICIlc2VydmljZU5hbWUlImAKKykgZG8gKAorICAgaWYgIiUlQSIgPT0gIlNUQVRFIiAoCisgICAgICBzZXQgc2VydmljZVN0YXRlPSUlQgorICAgICAgYnJlYWsKKyAgICkKKykKKworaWYgIiVzZXJ2aWNlU3RhdGUlIiA9PSAiUlVOTklORyIgKAorICAgQGVjaG8gVGhlICVzZXJ2aWNlTmFtZSUgc2VydmljZSBpcyBhbHJlYWR5IGluc3RhbGxlZCBhbmQgcnVubmluZy4KKyAgIGV4aXQgL0IgMAorKQorCitpZiAiJXNlcnZpY2VTdGF0ZSUiID09ICIiICgKKyAgIHNldCBwcm9ncmFtTmFtZT1lbmFibGUKKyAgIGNhbGwgIiVwcm9ncmFtRGlyZWN0b3J5JXJ1bi1icmx0dHkiIC1JICUqCisgICBpZiAhRVJST1JMRVZFTCEgTkVRIDAgIGV4aXQgL0IgIUVSUk9STEVWRUwhCisKKyAgIHNldCBwcm9ncmFtTmFtZT1zZXJ2aWNlCisgICBjYWxsICIlcHJvZ3JhbURpcmVjdG9yeSVzZXR2YXJzLWJybHR0eSIKKyAgIHNldCBsb2dMZXZlbD1pbmZvCisKKyAgIGZvciAvRiAidXNlYmFja3EgdG9rZW5zPTEsMiwqIiAlJUEgaW4gKAorICAgICAgYHJlZyBxdWVyeSAiJXNlcnZpY2VLZXklIiAvViAiJWNvbW1hbmRWYWx1ZSUiYAorICAgKSBkbyAoCisgICAgICBpZiAiJSVBIiA9PSAiJWNvbW1hbmRWYWx1ZSUiICgKKyAgICAgICAgIHNldCBjb21tYW5kRGF0YT0lJUMgLVUgIiF1cGRhdGFibGVEaXJlY3RvcnkhIiAtVyAiIXdyaXRhYmxlRGlyZWN0b3J5ISIgLUwgIiFsb2dGaWxlISIgLWwgIiFsb2dMZXZlbCEiCisgICAgICAgICBzZXQgY29tbWFuZERhdGE9IWNvbW1hbmREYXRhOiI9Il4iIiEKKyAgICAgICAgIHJlZyBhZGQgIiVzZXJ2aWNlS2V5JSIgL0YgL1YgIiVjb21tYW5kVmFsdWUlIiAvRCAiIWNvbW1hbmREYXRhISIKKyAgICAgICAgIGlmICFFUlJPUkxFVkVMISBORVEgMCAgZXhpdCAvQiAhRVJST1JMRVZFTCEKKyAgICAgICAgIGJyZWFrCisgICAgICApCisgICApCispIGVsc2UgKAorICAgQGVjaG8gVGhlICVzZXJ2aWNlTmFtZSUgc2VydmljZSBpcyBhbHJlYWR5IGluc3RhbGxlZC4KKykKKworbmV0IHN0YXJ0ICIlc2VydmljZU5hbWUlIgorZXhpdCAvQiAlRVJST1JMRVZFTCUKZGlmZiAtLWdpdCBhL1dpbmRvd3Mva2lsbC1icmx0dHkuYmF0IGIvV2luZG93cy9raWxsLWJybHR0eS5iYXQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDExMDIwNgotLS0gL2Rldi9udWxsCisrKyBiL1dpbmRvd3Mva2lsbC1icmx0dHkuYmF0CkBAIC0wLDAgKzEsMTcgQEAKK0BlY2hvIG9mZgorCitzZXRsb2NhbCBFbmFibGVEZWxheWVkRXhwYW5zaW9uCitzZXQgcHJvZ3JhbURpcmVjdG9yeT0lfmRwMAorY2FsbCAiJXByb2dyYW1EaXJlY3Rvcnklc2V0dmFycy1icmx0dHkiCisKK2lmIGV4aXN0ICIlcGlkRmlsZSUiICgKKyAgIHNldCAvUCBwaWQ9IDwgIiVwaWRGaWxlJSIKKworICAgaWYgIiFwaWQhIiBORVEgIiIgKAorICAgICAgdGFza2tpbGwgL1BJRCAiIXBpZCEiIC9GIC9UCisgICAgICBleGl0IC9CICVFUlJPUkxFVkVMJQorICAgKQorKQorCitAZWNobyAlcGFja2FnZU5hbWUlIGlzbid0IHJ1bm5pbmcKK2V4aXQgL0IgMQpkaWZmIC0tZ2l0IGEvV2luZG93cy9saWJ1c2ItMS4wLmluZiBiL1dpbmRvd3MvbGlidXNiLTEuMC5pbmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODkwNDhlOQotLS0gL2Rldi9udWxsCisrKyBiL1dpbmRvd3MvbGlidXNiLTEuMC5pbmYKQEAgLTAsMCArMSw4ODIgQEAKK1tTdHJpbmdzXQorUHJvdmlkZXJOYW1lICA9ICJCUkxUVFkiCitEcml2ZXJEYXRlICAgID0gIjEyLzIxLzIwMjEiCitEcml2ZXJWZXJzaW9uID0gIjYuNC4wLjIyOCIKK0NsYXNzTmFtZSAgICAgPSAiVVNCIEJyYWlsbGUgRGV2aWNlcyIKK0NsYXNzR1VJRCAgICAgPSAiezE3MjBmYThlLWVkMTUtNDM0Ni1iNzNkLTkwOWViNDFlODllZn0iCitEZXZpY2VHVUlEICAgID0gIntmZmUxY2U4NC0xOGExLTRjZjktYWMxNi1kZjc0Yjc5NThkYWF9IgorCitXaW5VU0JfU3ZjRGVzYyA9ICJXaW5VU0IgRHJpdmVyIFNlcnZpY2UiCitEaXNrTmFtZSA9ICJsaWJ1c2IgKFdpblVTQikgRGV2aWNlIEluc3RhbGwgRGlzayIKKworOyA9PT09PT09PT09PT09PT09PT09PT09IFZlcnNpb24gPT09PT09PT09PT09PT09PT09PT09PQorCitbVmVyc2lvbl0KK0RyaXZlclZlciA9ICVEcml2ZXJEYXRlJSwlRHJpdmVyVmVyc2lvbiUKK1NpZ25hdHVyZSA9ICIkV2luZG93cyBOVCQiCitDbGFzcyA9ICVDbGFzc05hbWUlCitDbGFzc0d1aWQgPSAlQ2xhc3NHVUlEJQorUHJvdmlkZXIgPSAlUHJvdmlkZXJOYW1lJQorQ2F0YWxvZ0ZpbGUgPSBsaWJ1c2JfZGV2aWNlLmNhdAorCis7ID09PT09PT09PT09PT09PT09PT0gQ2xhc3Mgc2VjdGlvbiA9PT09PT09PT09PT09PT09PT09CisKKzsgU2luY2UgdGhlIGRldmljZSBpcyBub3QgYSBzdGFuZGFyZCBVU0IgZGV2aWNlLCB3ZSBkZWZpbmUgYSBuZXcgY2xhc3MgZm9yIGl0LgorW0NsYXNzSW5zdGFsbDMyXQorQWRkcmVnID0gV2luVVNCRGV2aWNlQ2xhc3NSZWcKKworW1dpblVTQkRldmljZUNsYXNzUmVnXQorSEtSLCwsMCwlQ2xhc3NOYW1lJQorOyAtMjAgaXMgZm9yIHRoZSBVU0IgaWNvbgorSEtSLCxJY29uLCwtMjAKKworOyA9PT09PT09PT09PSBNYW51ZmFjdHVyZXIvTW9kZWxzIHNlY3Rpb25zID09PT09PT09PT09PQorCitbTWFudWZhY3R1cmVyXQorJVByb3ZpZGVyTmFtZSUgPSBsaWJ1c2JEZXZpY2VfV2luVVNCLE5UeDg2LE5UYW1kNjQKKworW2xpYnVzYkRldmljZV9XaW5VU0IuTlR4ODZdCis7IEJFR0lOX1VTQl9CUkFJTExFX0RFVklDRVMgTGliVVNCLTEuMCBMSUJVU0JfREVWCisKKzsgRGV2aWNlOiAwNDAzOjYwMDEKKzsgR2VuZXJpYyBJZGVudGlmaWVyCis7IFZlbmRvcjogRnV0dXJlIFRlY2hub2xvZ3kgRGV2aWNlcyBJbnRlcm5hdGlvbmFsLCBMdGQuCis7IFByb2R1Y3Q6IEZUMjMyIFVTQi1TZXJpYWwgKFVBUlQpIElDCisiTGliVVNCLTEuMDogQWxiYXRyb3NzIFthbGwgbW9kZWxzXSwgQ2VicmEgW2FsbCBtb2RlbHNdLCBISU1TIFtTeW5jIEJyYWlsbGVdLCBIYW5keVRlY2ggW0ZUREkgY2hpcF0sIEhlZG8gW01vYmlsTGluZV0sIE1EViBbYWxsIG1vZGVsc10iPUxJQlVTQl9ERVYsIFVTQlxWSURfMDQwMyZQSURfNjAwMQorCis7IERldmljZTogMDQwMzo2MDEwCis7IEdlbmVyaWMgSWRlbnRpZmllcgorOyBWZW5kb3I6IEZ1dHVyZSBUZWNobm9sb2d5IERldmljZXMgSW50ZXJuYXRpb25hbCwgTHRkCis7IFByb2R1Y3Q6IEZUMjIzMkMvRC9IIER1YWwgVUFSVC9GSUZPIElDCisiTGliVVNCLTEuMDogRG90UGFkIFthbGwgbW9kZWxzXSI9TElCVVNCX0RFViwgVVNCXFZJRF8wNDAzJlBJRF82MDEwCisKKzsgRGV2aWNlOiAwNDAzOkRFNTgKKyJMaWJVU0ItMS4wOiBIZWRvIFtNb2JpbExpbmVdIj1MSUJVU0JfREVWLCBVU0JcVklEXzA0MDMmUElEX0RFNTgKKworOyBEZXZpY2U6IDA0MDM6REU1OQorIkxpYlVTQi0xLjA6IEhlZG8gW1Byb2ZpTGluZV0iPUxJQlVTQl9ERVYsIFVTQlxWSURfMDQwMyZQSURfREU1OQorCis7IERldmljZTogMDQwMzpGMjA4CisiTGliVVNCLTEuMDogUGFwZW5tZWllciBbYWxsIG1vZGVsc10iPUxJQlVTQl9ERVYsIFVTQlxWSURfMDQwMyZQSURfRjIwOAorCis7IERldmljZTogMDQwMzpGRTcwCisiTGliVVNCLTEuMDogQmF1bSBbVmFyaW8gNDAgKDQwIGNlbGxzKV0iPUxJQlVTQl9ERVYsIFVTQlxWSURfMDQwMyZQSURfRkU3MAorCis7IERldmljZTogMDQwMzpGRTcxCisiTGliVVNCLTEuMDogQmF1bSBbUG9ja2V0VmFyaW8gKDI0IGNlbGxzKV0iPUxJQlVTQl9ERVYsIFVTQlxWSURfMDQwMyZQSURfRkU3MQorCis7IERldmljZTogMDQwMzpGRTcyCisiTGliVVNCLTEuMDogQmF1bSBbU3VwZXJWYXJpbyA0MCAoNDAgY2VsbHMpXSI9TElCVVNCX0RFViwgVVNCXFZJRF8wNDAzJlBJRF9GRTcyCisKKzsgRGV2aWNlOiAwNDAzOkZFNzMKKyJMaWJVU0ItMS4wOiBCYXVtIFtTdXBlclZhcmlvIDMyICgzMiBjZWxscyldIj1MSUJVU0JfREVWLCBVU0JcVklEXzA0MDMmUElEX0ZFNzMKKworOyBEZXZpY2U6IDA0MDM6RkU3NAorIkxpYlVTQi0xLjA6IEJhdW0gW1N1cGVyVmFyaW8gNjQgKDY0IGNlbGxzKV0iPUxJQlVTQl9ERVYsIFVTQlxWSURfMDQwMyZQSURfRkU3NAorCis7IERldmljZTogMDQwMzpGRTc1CisiTGliVVNCLTEuMDogQmF1bSBbU3VwZXJWYXJpbyA4MCAoODAgY2VsbHMpXSI9TElCVVNCX0RFViwgVVNCXFZJRF8wNDAzJlBJRF9GRTc1CisKKzsgRGV2aWNlOiAwNDAzOkZFNzYKKyJMaWJVU0ItMS4wOiBCYXVtIFtWYXJpb1BybyA4MCAoODAgY2VsbHMpXSI9TElCVVNCX0RFViwgVVNCXFZJRF8wNDAzJlBJRF9GRTc2CisKKzsgRGV2aWNlOiAwNDAzOkZFNzcKKyJMaWJVU0ItMS4wOiBCYXVtIFtWYXJpb1BybyA2NCAoNjQgY2VsbHMpXSI9TElCVVNCX0RFViwgVVNCXFZJRF8wNDAzJlBJRF9GRTc3CisKKzsgRGV2aWNlOiAwNDUyOjAxMDAKKyJMaWJVU0ItMS4wOiBNZXRlYyBbYWxsIG1vZGVsc10iPUxJQlVTQl9ERVYsIFVTQlxWSURfMDQ1MiZQSURfMDEwMAorCis7IERldmljZTogMDQ1RTo5MzBBCisiTGliVVNCLTEuMDogSElNUyBbQnJhaWxsZSBTZW5zZSAoVVNCIDEuMSldLCBISU1TIFtCcmFpbGxlIFNlbnNlIChVU0IgMi4wKV0sIEhJTVMgW0JyYWlsbGUgU2Vuc2UgVTIgKFVTQiAyLjApXSI9TElCVVNCX0RFViwgVVNCXFZJRF8wNDVFJlBJRF85MzBBCisKKzsgRGV2aWNlOiAwNDVFOjkzMEIKKyJMaWJVU0ItMS4wOiBISU1TIFtCcmFpbGxlIEVkZ2UgYW5kIFFCcmFpbGxlWExdIj1MSUJVU0JfREVWLCBVU0JcVklEXzA0NUUmUElEXzkzMEIKKworOyBEZXZpY2U6IDA0ODM6QTFEMworIkxpYlVTQi0xLjA6IEJhdW0gW09yYml0IFJlYWRlciAyMCAoMjAgY2VsbHMpXSI9TElCVVNCX0RFViwgVVNCXFZJRF8wNDgzJlBJRF9BMUQzCisKKzsgRGV2aWNlOiAwNDgzOkEzNjYKKyJMaWJVU0ItMS4wOiBCYXVtIFtPcmJpdCBSZWFkZXIgNDAgKDQwIGNlbGxzKV0iPUxJQlVTQl9ERVYsIFVTQlxWSURfMDQ4MyZQSURfQTM2NgorCis7IERldmljZTogMDZCMDowMDAxCisiTGliVVNCLTEuMDogQWx2YSBbU2F0ZWxsaXRlICg1bm4pXSI9TElCVVNCX0RFViwgVVNCXFZJRF8wNkIwJlBJRF8wMDAxCisKKzsgRGV2aWNlOiAwNzk4OjAwMDEKKyJMaWJVU0ItMS4wOiBWb3lhZ2VyIFthbGwgbW9kZWxzXSI9TElCVVNCX0RFViwgVVNCXFZJRF8wNzk4JlBJRF8wMDAxCisKKzsgRGV2aWNlOiAwNzk4OjA2MDAKKyJMaWJVU0ItMS4wOiBBbHZhIFtWb3lhZ2VyIFByb3RvY29sIENvbnZlcnRlcl0iPUxJQlVTQl9ERVYsIFVTQlxWSURfMDc5OCZQSURfMDYwMAorCis7IERldmljZTogMDc5ODowNjI0CisiTGliVVNCLTEuMDogQWx2YSBbQkM2MjRdIj1MSUJVU0JfREVWLCBVU0JcVklEXzA3OTgmUElEXzA2MjQKKworOyBEZXZpY2U6IDA3OTg6MDY0MAorIkxpYlVTQi0xLjA6IEFsdmEgW0JDNjQwXSI9TElCVVNCX0RFViwgVVNCXFZJRF8wNzk4JlBJRF8wNjQwCisKKzsgRGV2aWNlOiAwNzk4OjA2ODAKKyJMaWJVU0ItMS4wOiBBbHZhIFtCQzY4MF0iPUxJQlVTQl9ERVYsIFVTQlxWSURfMDc5OCZQSURfMDY4MAorCis7IERldmljZTogMDkwNDoxMDE2CisiTGliVVNCLTEuMDogRnJhbmtBdWRpb2RhdGEgW0IySzg0IChiZWZvcmUgZmlybXdhcmUgaW5zdGFsbGF0aW9uKV0iPUxJQlVTQl9ERVYsIFVTQlxWSURfMDkwNCZQSURfMTAxNgorCis7IERldmljZTogMDkwNDoxMDE3CisiTGliVVNCLTEuMDogRnJhbmtBdWRpb2RhdGEgW0IySzg0IChhZnRlciBmaXJtd2FyZSBpbnN0YWxsYXRpb24pXSI9TElCVVNCX0RFViwgVVNCXFZJRF8wOTA0JlBJRF8xMDE3CisKKzsgRGV2aWNlOiAwOTA0OjIwMDAKKyJMaWJVU0ItMS4wOiBCYXVtIFtWYXJpb1BybyA0MCAoNDAgY2VsbHMpXSI9TElCVVNCX0RFViwgVVNCXFZJRF8wOTA0JlBJRF8yMDAwCisKKzsgRGV2aWNlOiAwOTA0OjIwMDEKKyJMaWJVU0ItMS4wOiBCYXVtIFtFY29WYXJpbyAyNCAoMjQgY2VsbHMpXSI9TElCVVNCX0RFViwgVVNCXFZJRF8wOTA0JlBJRF8yMDAxCisKKzsgRGV2aWNlOiAwOTA0OjIwMDIKKyJMaWJVU0ItMS4wOiBCYXVtIFtFY29WYXJpbyA0MCAoNDAgY2VsbHMpXSI9TElCVVNCX0RFViwgVVNCXFZJRF8wOTA0JlBJRF8yMDAyCisKKzsgRGV2aWNlOiAwOTA0OjIwMDcKKyJMaWJVU0ItMS4wOiBCYXVtIFtWYXJpb0Nvbm5lY3QgNDAgKDQwIGNlbGxzKV0iPUxJQlVTQl9ERVYsIFVTQlxWSURfMDkwNCZQSURfMjAwNworCis7IERldmljZTogMDkwNDoyMDA4CisiTGliVVNCLTEuMDogQmF1bSBbVmFyaW9Db25uZWN0IDMyICgzMiBjZWxscyldIj1MSUJVU0JfREVWLCBVU0JcVklEXzA5MDQmUElEXzIwMDgKKworOyBEZXZpY2U6IDA5MDQ6MjAwOQorIkxpYlVTQi0xLjA6IEJhdW0gW1ZhcmlvQ29ubmVjdCAyNCAoMjQgY2VsbHMpXSI9TElCVVNCX0RFViwgVVNCXFZJRF8wOTA0JlBJRF8yMDA5CisKKzsgRGV2aWNlOiAwOTA0OjIwMTAKKyJMaWJVU0ItMS4wOiBCYXVtIFtWYXJpb0Nvbm5lY3QgNjQgKDY0IGNlbGxzKV0iPUxJQlVTQl9ERVYsIFVTQlxWSURfMDkwNCZQSURfMjAxMAorCis7IERldmljZTogMDkwNDoyMDExCisiTGliVVNCLTEuMDogQmF1bSBbVmFyaW9Db25uZWN0IDgwICg4MCBjZWxscyldIj1MSUJVU0JfREVWLCBVU0JcVklEXzA5MDQmUElEXzIwMTEKKworOyBEZXZpY2U6IDA5MDQ6MjAxNAorIkxpYlVTQi0xLjA6IEJhdW0gW0Vjb1ZhcmlvIDMyICgzMiBjZWxscyldIj1MSUJVU0JfREVWLCBVU0JcVklEXzA5MDQmUElEXzIwMTQKKworOyBEZXZpY2U6IDA5MDQ6MjAxNQorIkxpYlVTQi0xLjA6IEJhdW0gW0Vjb1ZhcmlvIDY0ICg2NCBjZWxscyldIj1MSUJVU0JfREVWLCBVU0JcVklEXzA5MDQmUElEXzIwMTUKKworOyBEZXZpY2U6IDA5MDQ6MjAxNgorIkxpYlVTQi0xLjA6IEJhdW0gW0Vjb1ZhcmlvIDgwICg4MCBjZWxscyldIj1MSUJVU0JfREVWLCBVU0JcVklEXzA5MDQmUElEXzIwMTYKKworOyBEZXZpY2U6IDA5MDQ6MzAwMAorIkxpYlVTQi0xLjA6IEJhdW0gW1JlZnJlc2hhYnJhaWxsZSAxOCAoMTggY2VsbHMpXSI9TElCVVNCX0RFViwgVVNCXFZJRF8wOTA0JlBJRF8zMDAwCisKKzsgRGV2aWNlOiAwOTA0OjMwMDEKKyJMaWJVU0ItMS4wOiBCYXVtIFtPcmJpdCBpbiBSZWZyZXNoYWJyYWlsbGUgRW11bGF0aW9uIE1vZGUgKDE4IGNlbGxzKV0sIEJhdW0gW1JlZnJlc2hhYnJhaWxsZSAxOCAoMTggY2VsbHMpXSI9TElCVVNCX0RFViwgVVNCXFZJRF8wOTA0JlBJRF8zMDAxCisKKzsgRGV2aWNlOiAwOTA0OjQwMDQKKyJMaWJVU0ItMS4wOiBCYXVtIFtQcm9udG8hIFYzIDE4ICgxOCBjZWxscyldIj1MSUJVU0JfREVWLCBVU0JcVklEXzA5MDQmUElEXzQwMDQKKworOyBEZXZpY2U6IDA5MDQ6NDAwNQorIkxpYlVTQi0xLjA6IEJhdW0gW1Byb250byEgVjMgNDAgKDQwIGNlbGxzKV0iPUxJQlVTQl9ERVYsIFVTQlxWSURfMDkwNCZQSURfNDAwNQorCis7IERldmljZTogMDkwNDo0MDA3CisiTGliVVNCLTEuMDogQmF1bSBbUHJvbnRvISBWNCAxOCAoMTggY2VsbHMpXSI9TElCVVNCX0RFViwgVVNCXFZJRF8wOTA0JlBJRF80MDA3CisKKzsgRGV2aWNlOiAwOTA0OjQwMDgKKyJMaWJVU0ItMS4wOiBCYXVtIFtQcm9udG8hIFY0IDQwICg0MCBjZWxscyldIj1MSUJVU0JfREVWLCBVU0JcVklEXzA5MDQmUElEXzQwMDgKKworOyBEZXZpY2U6IDA5MDQ6NjAwMQorIkxpYlVTQi0xLjA6IEJhdW0gW1N1cGVyVmFyaW8yIDQwICg0MCBjZWxscyldIj1MSUJVU0JfREVWLCBVU0JcVklEXzA5MDQmUElEXzYwMDEKKworOyBEZXZpY2U6IDA5MDQ6NjAwMgorIkxpYlVTQi0xLjA6IEJhdW0gW1BvY2tldFZhcmlvMiAoMjQgY2VsbHMpXSI9TElCVVNCX0RFViwgVVNCXFZJRF8wOTA0JlBJRF82MDAyCisKKzsgRGV2aWNlOiAwOTA0OjYwMDMKKyJMaWJVU0ItMS4wOiBCYXVtIFtTdXBlclZhcmlvMiAzMiAoMzIgY2VsbHMpXSI9TElCVVNCX0RFViwgVVNCXFZJRF8wOTA0JlBJRF82MDAzCisKKzsgRGV2aWNlOiAwOTA0OjYwMDQKKyJMaWJVU0ItMS4wOiBCYXVtIFtTdXBlclZhcmlvMiA2NCAoNjQgY2VsbHMpXSI9TElCVVNCX0RFViwgVVNCXFZJRF8wOTA0JlBJRF82MDA0CisKKzsgRGV2aWNlOiAwOTA0OjYwMDUKKyJMaWJVU0ItMS4wOiBCYXVtIFtTdXBlclZhcmlvMiA4MCAoODAgY2VsbHMpXSI9TElCVVNCX0RFViwgVVNCXFZJRF8wOTA0JlBJRF82MDA1CisKKzsgRGV2aWNlOiAwOTA0OjYwMDYKKyJMaWJVU0ItMS4wOiBCYXVtIFtCcmFpbGxpYW50MiA0MCAoNDAgY2VsbHMpXSI9TElCVVNCX0RFViwgVVNCXFZJRF8wOTA0JlBJRF82MDA2CisKKzsgRGV2aWNlOiAwOTA0OjYwMDcKKyJMaWJVU0ItMS4wOiBCYXVtIFtCcmFpbGxpYW50MiAyNCAoMjQgY2VsbHMpXSI9TElCVVNCX0RFViwgVVNCXFZJRF8wOTA0JlBJRF82MDA3CisKKzsgRGV2aWNlOiAwOTA0OjYwMDgKKyJMaWJVU0ItMS4wOiBCYXVtIFtCcmFpbGxpYW50MiAzMiAoMzIgY2VsbHMpXSI9TElCVVNCX0RFViwgVVNCXFZJRF8wOTA0JlBJRF82MDA4CisKKzsgRGV2aWNlOiAwOTA0OjYwMDkKKyJMaWJVU0ItMS4wOiBCYXVtIFtCcmFpbGxpYW50MiA2NCAoNjQgY2VsbHMpXSI9TElCVVNCX0RFViwgVVNCXFZJRF8wOTA0JlBJRF82MDA5CisKKzsgRGV2aWNlOiAwOTA0OjYwMEEKKyJMaWJVU0ItMS4wOiBCYXVtIFtCcmFpbGxpYW50MiA4MCAoODAgY2VsbHMpXSI9TElCVVNCX0RFViwgVVNCXFZJRF8wOTA0JlBJRF82MDBBCisKKzsgRGV2aWNlOiAwOTA0OjYwMTEKKyJMaWJVU0ItMS4wOiBCYXVtIFtWYXJpb0Nvbm5lY3QgMjQgKDI0IGNlbGxzKV0iPUxJQlVTQl9ERVYsIFVTQlxWSURfMDkwNCZQSURfNjAxMQorCis7IERldmljZTogMDkwNDo2MDEyCisiTGliVVNCLTEuMDogQmF1bSBbVmFyaW9Db25uZWN0IDMyICgzMiBjZWxscyldIj1MSUJVU0JfREVWLCBVU0JcVklEXzA5MDQmUElEXzYwMTIKKworOyBEZXZpY2U6IDA5MDQ6NjAxMworIkxpYlVTQi0xLjA6IEJhdW0gW1ZhcmlvQ29ubmVjdCA0MCAoNDAgY2VsbHMpXSI9TElCVVNCX0RFViwgVVNCXFZJRF8wOTA0JlBJRF82MDEzCisKKzsgRGV2aWNlOiAwOTA0OjYxMDEKKyJMaWJVU0ItMS4wOiBCYXVtIFtWYXJpb1VsdHJhIDIwICgyMCBjZWxscyldIj1MSUJVU0JfREVWLCBVU0JcVklEXzA5MDQmUElEXzYxMDEKKworOyBEZXZpY2U6IDA5MDQ6NjEwMgorIkxpYlVTQi0xLjA6IEJhdW0gW1ZhcmlvVWx0cmEgNDAgKDQwIGNlbGxzKV0iPUxJQlVTQl9ERVYsIFVTQlxWSURfMDkwNCZQSURfNjEwMgorCis7IERldmljZTogMDkwNDo2MTAzCisiTGliVVNCLTEuMDogQmF1bSBbVmFyaW9VbHRyYSAzMiAoMzIgY2VsbHMpXSI9TElCVVNCX0RFViwgVVNCXFZJRF8wOTA0JlBJRF82MTAzCisKKzsgRGV2aWNlOiAwOTIxOjEyMDAKKyJMaWJVU0ItMS4wOiBIYW5keVRlY2ggW0dvSHVicyBjaGlwXSI9TElCVVNCX0RFViwgVVNCXFZJRF8wOTIxJlBJRF8xMjAwCisKKzsgRGV2aWNlOiAwRjRFOjAxMDAKKyJMaWJVU0ItMS4wOiBGcmVlZG9tU2NpZW50aWZpYyBbRm9jdXMgMV0iPUxJQlVTQl9ERVYsIFVTQlxWSURfMEY0RSZQSURfMDEwMAorCis7IERldmljZTogMEY0RTowMTExCisiTGliVVNCLTEuMDogRnJlZWRvbVNjaWVudGlmaWMgW1BBQyBNYXRlXSI9TElCVVNCX0RFViwgVVNCXFZJRF8wRjRFJlBJRF8wMTExCisKKzsgRGV2aWNlOiAwRjRFOjAxMTIKKyJMaWJVU0ItMS4wOiBGcmVlZG9tU2NpZW50aWZpYyBbRm9jdXMgMl0iPUxJQlVTQl9ERVYsIFVTQlxWSURfMEY0RSZQSURfMDExMgorCis7IERldmljZTogMEY0RTowMTE0CisiTGliVVNCLTEuMDogRnJlZWRvbVNjaWVudGlmaWMgW0ZvY3VzIDMrXSI9TElCVVNCX0RFViwgVVNCXFZJRF8wRjRFJlBJRF8wMTE0CisKKzsgRGV2aWNlOiAxMEM0OkVBNjAKKzsgR2VuZXJpYyBJZGVudGlmaWVyCis7IFZlbmRvcjogQ3lnbmFsIEludGVncmF0ZWQgUHJvZHVjdHMsIEluYy4KKzsgUHJvZHVjdDogQ1AyMTB4IFVBUlQgQnJpZGdlIC8gbXlBVlIgbXlTbWFydFVTQiBsaWdodAorIkxpYlVTQi0xLjA6IEJyYWlsbGVNZW1vIFtQb2NrZXRdLCBTZWlrYSBbQnJhaWxsZSBEaXNwbGF5XSI9TElCVVNCX0RFViwgVVNCXFZJRF8xMEM0JlBJRF9FQTYwCisKKzsgRGV2aWNlOiAxMEM0OkVBODAKKzsgR2VuZXJpYyBJZGVudGlmaWVyCis7IFZlbmRvcjogQ3lnbmFsIEludGVncmF0ZWQgUHJvZHVjdHMsIEluYy4KKzsgUHJvZHVjdDogQ1AyMTB4IFVBUlQgQnJpZGdlCisiTGliVVNCLTEuMDogU2Vpa2EgW05vdGUgVGFrZXJdIj1MSUJVU0JfREVWLCBVU0JcVklEXzEwQzQmUElEX0VBODAKKworOyBEZXZpY2U6IDExNDg6MDMwMQorIkxpYlVTQi0xLjA6IEJyYWlsbGVNZW1vIFtTbWFydF0iPUxJQlVTQl9ERVYsIFVTQlxWSURfMTE0OCZQSURfMDMwMQorCis7IERldmljZTogMTIwOTpBQkMwCisiTGliVVNCLTEuMDogSW5jZXB0b3IgW2FsbCBtb2RlbHNdIj1MSUJVU0JfREVWLCBVU0JcVklEXzEyMDkmUElEX0FCQzAKKworOyBEZXZpY2U6IDE2QzA6MDVFMQorIkxpYlVTQi0xLjA6IENhbnV0ZSBbYWxsIG1vZGVsc10iPUxJQlVTQl9ERVYsIFVTQlxWSURfMTZDMCZQSURfMDVFMQorCis7IERldmljZTogMUE4Njo3NTIzCis7IEdlbmVyaWMgSWRlbnRpZmllcgorOyBWZW5kb3I6IEppYW5nc3UgUWluSGVuZywgTHRkLgorOyBQcm9kdWN0OiBDSDM0MSBVU0IgQnJpZGdlIENvbnRyb2xsZXIKKyJMaWJVU0ItMS4wOiBCYXVtIFtOTFMgZVJlYWRlciBab29tYXggKDIwIGNlbGxzKV0iPUxJQlVTQl9ERVYsIFVTQlxWSURfMUE4NiZQSURfNzUyMworCis7IERldmljZTogMUM3MTpDMDA0CisiTGliVVNCLTEuMDogQnJhaWxsZU5vdGUgW0h1bWFuV2FyZSBBUEVYXSI9TElCVVNCX0RFViwgVVNCXFZJRF8xQzcxJlBJRF9DMDA0CisKKzsgRGV2aWNlOiAxQzcxOkMwMDUKKyJMaWJVU0ItMS4wOiBIdW1hbldhcmUgW0JyYWlsbGlhbnQgQkkgMzIvNDAsIEJyYWlsbGlhbnQgQiA4MCAoc2VyaWFsIHByb3RvY29sKV0iPUxJQlVTQl9ERVYsIFVTQlxWSURfMUM3MSZQSURfQzAwNQorCis7IERldmljZTogMUM3MTpDMDA2CisiTGliVVNCLTEuMDogSHVtYW5XYXJlIFtub24tVG91Y2ggbW9kZWxzIChISUQgcHJvdG9jb2wpXSI9TElCVVNCX0RFViwgVVNCXFZJRF8xQzcxJlBJRF9DMDA2CisKKzsgRGV2aWNlOiAxQzcxOkMwMEEKKyJMaWJVU0ItMS4wOiBIdW1hbldhcmUgW0JyYWlsbGVOb3RlIFRvdWNoIChISUQgcHJvdG9jb2wpXSI9TElCVVNCX0RFViwgVVNCXFZJRF8xQzcxJlBJRF9DMDBBCisKKzsgRGV2aWNlOiAxQzcxOkMwMjEKKyJMaWJVU0ItMS4wOiBIdW1hbldhcmUgW0JyYWlsbGlhbnQgQkkgMTQgKHNlcmlhbCBwcm90b2NvbCldIj1MSUJVU0JfREVWLCBVU0JcVklEXzFDNzEmUElEX0MwMjEKKworOyBEZXZpY2U6IDFDNzE6QzEwMQorIkxpYlVTQi0xLjA6IEh1bWFuV2FyZSBbQVBIIENoYW1lbGVvbiAyMCAoSElEIHByb3RvY29sLCBmaXJtd2FyZSAxLjApXSwgSHVtYW5XYXJlIFtBUEggQ2hhbWVsZW9uIDIwIChISUQgcHJvdG9jb2wsIGZpcm13YXJlIDEuMSldIj1MSUJVU0JfREVWLCBVU0JcVklEXzFDNzEmUElEX0MxMDEKKworOyBEZXZpY2U6IDFDNzE6QzEwNAorIkxpYlVTQi0xLjA6IEh1bWFuV2FyZSBbQVBIIENoYW1lbGVvbiAyMCAoc2VyaWFsIHByb3RvY29sKV0iPUxJQlVTQl9ERVYsIFVTQlxWSURfMUM3MSZQSURfQzEwNAorCis7IERldmljZTogMUM3MTpDMTExCisiTGliVVNCLTEuMDogSHVtYW5XYXJlIFtBUEggTWFudGlzIFE0MCAoSElEIHByb3RvY29sLCBmaXJtd2FyZSAxLjApXSwgSHVtYW5XYXJlIFtBUEggTWFudGlzIFE0MCAoSElEIHByb3RvY29sLCBmaXJtd2FyZSAxLjEpXSI9TElCVVNCX0RFViwgVVNCXFZJRF8xQzcxJlBJRF9DMTExCisKKzsgRGV2aWNlOiAxQzcxOkMxMTQKKyJMaWJVU0ItMS4wOiBIdW1hbldhcmUgW0FQSCBNYW50aXMgUTQwIChzZXJpYWwgcHJvdG9jb2wpXSI9TElCVVNCX0RFViwgVVNCXFZJRF8xQzcxJlBJRF9DMTE0CisKKzsgRGV2aWNlOiAxQzcxOkMxMjEKKyJMaWJVU0ItMS4wOiBIdW1hbldhcmUgW0h1bWFud2FyZSBCcmFpbGxlT25lIChISUQgcHJvdG9jb2wsIGZpcm13YXJlIDEuMCldLCBIdW1hbldhcmUgW0h1bWFud2FyZSBCcmFpbGxlT25lIChISUQgcHJvdG9jb2wsIGZpcm13YXJlIDEuMSldIj1MSUJVU0JfREVWLCBVU0JcVklEXzFDNzEmUElEX0MxMjEKKworOyBEZXZpY2U6IDFDNzE6QzEyNAorIkxpYlVTQi0xLjA6IEh1bWFuV2FyZSBbSHVtYW53YXJlIEJyYWlsbGVPbmUgKHNlcmlhbCBwcm90b2NvbCldIj1MSUJVU0JfREVWLCBVU0JcVklEXzFDNzEmUElEX0MxMjQKKworOyBEZXZpY2U6IDFDNzE6QzEzMQorIkxpYlVTQi0xLjA6IEh1bWFuV2FyZSBbSHVtYW53YXJlIEJyYWlsbGlhbnQgQkkgNDBYIChISUQgcHJvdG9jb2wsIGZpcm13YXJlIDEuMCldLCBIdW1hbldhcmUgW0h1bWFud2FyZSBCcmFpbGxpYW50IEJJIDQwWCAoSElEIHByb3RvY29sLCBmaXJtd2FyZSAxLjEpXSI9TElCVVNCX0RFViwgVVNCXFZJRF8xQzcxJlBJRF9DMTMxCisKKzsgRGV2aWNlOiAxQzcxOkMxNDEKKyJMaWJVU0ItMS4wOiBIdW1hbldhcmUgW0h1bWFud2FyZSBCcmFpbGxpYW50IEJJIDIwWCAoSElEIHByb3RvY29sLCBmaXJtd2FyZSAxLjApXSwgSHVtYW5XYXJlIFtIdW1hbndhcmUgQnJhaWxsaWFudCBCSSAyMFggKEhJRCBwcm90b2NvbCwgZmlybXdhcmUgMS4xKV0iPUxJQlVTQl9ERVYsIFVTQlxWSURfMUM3MSZQSURfQzE0MQorCis7IERldmljZTogMUM3MTpDRTAxCisiTGliVVNCLTEuMDogSHVtYW5XYXJlIFtOTFMgZVJlYWRlciAoSElEIHByb3RvY29sLCBmaXJtd2FyZSAxLjApXSwgSHVtYW5XYXJlIFtOTFMgZVJlYWRlciAoSElEIHByb3RvY29sLCBmaXJtd2FyZSAxLjEpXSI9TElCVVNCX0RFViwgVVNCXFZJRF8xQzcxJlBJRF9DRTAxCisKKzsgRGV2aWNlOiAxQzcxOkNFMDQKKyJMaWJVU0ItMS4wOiBIdW1hbldhcmUgW05MUyBlUmVhZGVyIChzZXJpYWwgcHJvdG9jb2wpXSI9TElCVVNCX0RFViwgVVNCXFZJRF8xQzcxJlBJRF9DRTA0CisKKzsgRGV2aWNlOiAxRkU0OjAwMDMKKyJMaWJVU0ItMS4wOiBIYW5keVRlY2ggW1VTQi1ISUQgYWRhcHRlcl0iPUxJQlVTQl9ERVYsIFVTQlxWSURfMUZFNCZQSURfMDAwMworCis7IERldmljZTogMUZFNDowMDQ0CisiTGliVVNCLTEuMDogSGFuZHlUZWNoIFtFYXN5IEJyYWlsbGUgKEhJRCldIj1MSUJVU0JfREVWLCBVU0JcVklEXzFGRTQmUElEXzAwNDQKKworOyBEZXZpY2U6IDFGRTQ6MDA1NAorIkxpYlVTQi0xLjA6IEhhbmR5VGVjaCBbQWN0aXZlIEJyYWlsbGVdIj1MSUJVU0JfREVWLCBVU0JcVklEXzFGRTQmUElEXzAwNTQKKworOyBEZXZpY2U6IDFGRTQ6MDA1NQorIkxpYlVTQi0xLjA6IEhhbmR5VGVjaCBbQ29ubmVjdCBCcmFpbGxlIDQwXSI9TElCVVNCX0RFViwgVVNCXFZJRF8xRkU0JlBJRF8wMDU1CisKKzsgRGV2aWNlOiAxRkU0OjAwNjEKKyJMaWJVU0ItMS4wOiBIYW5keVRlY2ggW0FjdGlsaW5vXSI9TElCVVNCX0RFViwgVVNCXFZJRF8xRkU0JlBJRF8wMDYxCisKKzsgRGV2aWNlOiAxRkU0OjAwNjQKKyJMaWJVU0ItMS4wOiBIYW5keVRlY2ggW0FjdGl2ZSBTdGFyIDQwXSI9TElCVVNCX0RFViwgVVNCXFZJRF8xRkU0JlBJRF8wMDY0CisKKzsgRGV2aWNlOiAxRkU0OjAwNzQKKyJMaWJVU0ItMS4wOiBIYW5keVRlY2ggW0JyYWlsbGUgU3RhciA0MCAoSElEKV0iPUxJQlVTQl9ERVYsIFVTQlxWSURfMUZFNCZQSURfMDA3NAorCis7IERldmljZTogMUZFNDowMDgxCisiTGliVVNCLTEuMDogSGFuZHlUZWNoIFtCYXNpYyBCcmFpbGxlIDE2XSI9TElCVVNCX0RFViwgVVNCXFZJRF8xRkU0JlBJRF8wMDgxCisKKzsgRGV2aWNlOiAxRkU0OjAwODIKKyJMaWJVU0ItMS4wOiBIYW5keVRlY2ggW0Jhc2ljIEJyYWlsbGUgMjBdIj1MSUJVU0JfREVWLCBVU0JcVklEXzFGRTQmUElEXzAwODIKKworOyBEZXZpY2U6IDFGRTQ6MDA4MworIkxpYlVTQi0xLjA6IEhhbmR5VGVjaCBbQmFzaWMgQnJhaWxsZSAzMl0iPUxJQlVTQl9ERVYsIFVTQlxWSURfMUZFNCZQSURfMDA4MworCis7IERldmljZTogMUZFNDowMDg0CisiTGliVVNCLTEuMDogSGFuZHlUZWNoIFtCYXNpYyBCcmFpbGxlIDQwXSI9TElCVVNCX0RFViwgVVNCXFZJRF8xRkU0JlBJRF8wMDg0CisKKzsgRGV2aWNlOiAxRkU0OjAwODYKKyJMaWJVU0ItMS4wOiBIYW5keVRlY2ggW0Jhc2ljIEJyYWlsbGUgNjRdIj1MSUJVU0JfREVWLCBVU0JcVklEXzFGRTQmUElEXzAwODYKKworOyBEZXZpY2U6IDFGRTQ6MDA4NworIkxpYlVTQi0xLjA6IEhhbmR5VGVjaCBbQmFzaWMgQnJhaWxsZSA4MF0iPUxJQlVTQl9ERVYsIFVTQlxWSURfMUZFNCZQSURfMDA4NworCis7IERldmljZTogMUZFNDowMDhBCisiTGliVVNCLTEuMDogSGFuZHlUZWNoIFtCYXNpYyBCcmFpbGxlIDQ4XSI9TElCVVNCX0RFViwgVVNCXFZJRF8xRkU0JlBJRF8wMDhBCisKKzsgRGV2aWNlOiAxRkU0OjAwOEIKKyJMaWJVU0ItMS4wOiBIYW5keVRlY2ggW0Jhc2ljIEJyYWlsbGUgMTYwXSI9TElCVVNCX0RFViwgVVNCXFZJRF8xRkU0JlBJRF8wMDhCCisKKzsgRGV2aWNlOiAxRkU0OjAwQTQKKyJMaWJVU0ItMS4wOiBIYW5keVRlY2ggW0FjdGl2YXRvcl0iPUxJQlVTQl9ERVYsIFVTQlxWSURfMUZFNCZQSURfMDBBNAorCis7IERldmljZTogNDI0MjowMDAxCisiTGliVVNCLTEuMDogUGVnYXN1cyBbYWxsIG1vZGVsc10iPUxJQlVTQl9ERVYsIFVTQlxWSURfNDI0MiZQSURfMDAwMQorCis7IERldmljZTogQzI1MToxMTIyCisiTGliVVNCLTEuMDogRXVyb0JyYWlsbGUgW0VzeXMgKHZlcnNpb24gPCAzLjAsIG5vIFNEIGNhcmQpXSI9TElCVVNCX0RFViwgVVNCXFZJRF9DMjUxJlBJRF8xMTIyCisKKzsgRGV2aWNlOiBDMjUxOjExMjMKKyJMaWJVU0ItMS4wOiBFdXJvQnJhaWxsZSBbcmVzZXJ2ZWRdIj1MSUJVU0JfREVWLCBVU0JcVklEX0MyNTEmUElEXzExMjMKKworOyBEZXZpY2U6IEMyNTE6MTEyNAorIkxpYlVTQi0xLjA6IEV1cm9CcmFpbGxlIFtFc3lzICh2ZXJzaW9uIDwgMy4wLCB3aXRoIFNEIGNhcmQpXSI9TElCVVNCX0RFViwgVVNCXFZJRF9DMjUxJlBJRF8xMTI0CisKKzsgRGV2aWNlOiBDMjUxOjExMjUKKyJMaWJVU0ItMS4wOiBFdXJvQnJhaWxsZSBbcmVzZXJ2ZWRdIj1MSUJVU0JfREVWLCBVU0JcVklEX0MyNTEmUElEXzExMjUKKworOyBEZXZpY2U6IEMyNTE6MTEyNgorIkxpYlVTQi0xLjA6IEV1cm9CcmFpbGxlIFtFc3lzICh2ZXJzaW9uID49IDMuMCwgbm8gU0QgY2FyZCldIj1MSUJVU0JfREVWLCBVU0JcVklEX0MyNTEmUElEXzExMjYKKworOyBEZXZpY2U6IEMyNTE6MTEyNworIkxpYlVTQi0xLjA6IEV1cm9CcmFpbGxlIFtyZXNlcnZlZF0iPUxJQlVTQl9ERVYsIFVTQlxWSURfQzI1MSZQSURfMTEyNworCis7IERldmljZTogQzI1MToxMTI4CisiTGliVVNCLTEuMDogRXVyb0JyYWlsbGUgW0VzeXMgKHZlcnNpb24gPj0gMy4wLCB3aXRoIFNEIGNhcmQpXSI9TElCVVNCX0RFViwgVVNCXFZJRF9DMjUxJlBJRF8xMTI4CisKKzsgRGV2aWNlOiBDMjUxOjExMjkKKyJMaWJVU0ItMS4wOiBFdXJvQnJhaWxsZSBbcmVzZXJ2ZWRdIj1MSUJVU0JfREVWLCBVU0JcVklEX0MyNTEmUElEXzExMjkKKworOyBEZXZpY2U6IEMyNTE6MTEyQQorIkxpYlVTQi0xLjA6IEV1cm9CcmFpbGxlIFtyZXNlcnZlZF0iPUxJQlVTQl9ERVYsIFVTQlxWSURfQzI1MSZQSURfMTEyQQorCis7IERldmljZTogQzI1MToxMTJCCisiTGliVVNCLTEuMDogRXVyb0JyYWlsbGUgW3Jlc2VydmVkXSI9TElCVVNCX0RFViwgVVNCXFZJRF9DMjUxJlBJRF8xMTJCCisKKzsgRGV2aWNlOiBDMjUxOjExMkMKKyJMaWJVU0ItMS4wOiBFdXJvQnJhaWxsZSBbcmVzZXJ2ZWRdIj1MSUJVU0JfREVWLCBVU0JcVklEX0MyNTEmUElEXzExMkMKKworOyBEZXZpY2U6IEMyNTE6MTEyRAorIkxpYlVTQi0xLjA6IEV1cm9CcmFpbGxlIFtyZXNlcnZlZF0iPUxJQlVTQl9ERVYsIFVTQlxWSURfQzI1MSZQSURfMTEyRAorCis7IERldmljZTogQzI1MToxMTJFCisiTGliVVNCLTEuMDogRXVyb0JyYWlsbGUgW3Jlc2VydmVkXSI9TElCVVNCX0RFViwgVVNCXFZJRF9DMjUxJlBJRF8xMTJFCisKKzsgRGV2aWNlOiBDMjUxOjExMkYKKyJMaWJVU0ItMS4wOiBFdXJvQnJhaWxsZSBbcmVzZXJ2ZWRdIj1MSUJVU0JfREVWLCBVU0JcVklEX0MyNTEmUElEXzExMkYKKworOyBEZXZpY2U6IEMyNTE6MTEzMAorIkxpYlVTQi0xLjA6IEV1cm9CcmFpbGxlIFtFc3l0aW1lIChmaXJtd2FyZSAxLjAzLCAyMDE0LTAzLTMxKV0sIEV1cm9CcmFpbGxlIFtFc3l0aW1lXSI9TElCVVNCX0RFViwgVVNCXFZJRF9DMjUxJlBJRF8xMTMwCisKKzsgRGV2aWNlOiBDMjUxOjExMzEKKyJMaWJVU0ItMS4wOiBFdXJvQnJhaWxsZSBbcmVzZXJ2ZWRdIj1MSUJVU0JfREVWLCBVU0JcVklEX0MyNTEmUElEXzExMzEKKworOyBEZXZpY2U6IEMyNTE6MTEzMgorIkxpYlVTQi0xLjA6IEV1cm9CcmFpbGxlIFtyZXNlcnZlZF0iPUxJQlVTQl9ERVYsIFVTQlxWSURfQzI1MSZQSURfMTEzMgorCis7IEVORF9VU0JfQlJBSUxMRV9ERVZJQ0VTCisKKzsgTWljcm9zb2Z0IE5hcnJhdG9yIERldmljZQorIkxpYlVTQi0xLjA6IE1pY3Jvc29mdCBOYXJyYXRvciI9TElCVVNCX0RFViwgVVNCXE5hcnJhdG9yT3ZlcnJpZGUKKworW2xpYnVzYkRldmljZV9XaW5VU0IuTlRhbWQ2NF0KKzsgQkVHSU5fVVNCX0JSQUlMTEVfREVWSUNFUyBMaWJVU0ItMS4wIExJQlVTQl9ERVYKKworOyBEZXZpY2U6IDA0MDM6NjAwMQorOyBHZW5lcmljIElkZW50aWZpZXIKKzsgVmVuZG9yOiBGdXR1cmUgVGVjaG5vbG9neSBEZXZpY2VzIEludGVybmF0aW9uYWwsIEx0ZC4KKzsgUHJvZHVjdDogRlQyMzIgVVNCLVNlcmlhbCAoVUFSVCkgSUMKKyJMaWJVU0ItMS4wOiBBbGJhdHJvc3MgW2FsbCBtb2RlbHNdLCBDZWJyYSBbYWxsIG1vZGVsc10sIEhJTVMgW1N5bmMgQnJhaWxsZV0sIEhhbmR5VGVjaCBbRlRESSBjaGlwXSwgSGVkbyBbTW9iaWxMaW5lXSwgTURWIFthbGwgbW9kZWxzXSI9TElCVVNCX0RFViwgVVNCXFZJRF8wNDAzJlBJRF82MDAxCisKKzsgRGV2aWNlOiAwNDAzOjYwMTAKKzsgR2VuZXJpYyBJZGVudGlmaWVyCis7IFZlbmRvcjogRnV0dXJlIFRlY2hub2xvZ3kgRGV2aWNlcyBJbnRlcm5hdGlvbmFsLCBMdGQKKzsgUHJvZHVjdDogRlQyMjMyQy9EL0ggRHVhbCBVQVJUL0ZJRk8gSUMKKyJMaWJVU0ItMS4wOiBEb3RQYWQgW2FsbCBtb2RlbHNdIj1MSUJVU0JfREVWLCBVU0JcVklEXzA0MDMmUElEXzYwMTAKKworOyBEZXZpY2U6IDA0MDM6REU1OAorIkxpYlVTQi0xLjA6IEhlZG8gW01vYmlsTGluZV0iPUxJQlVTQl9ERVYsIFVTQlxWSURfMDQwMyZQSURfREU1OAorCis7IERldmljZTogMDQwMzpERTU5CisiTGliVVNCLTEuMDogSGVkbyBbUHJvZmlMaW5lXSI9TElCVVNCX0RFViwgVVNCXFZJRF8wNDAzJlBJRF9ERTU5CisKKzsgRGV2aWNlOiAwNDAzOkYyMDgKKyJMaWJVU0ItMS4wOiBQYXBlbm1laWVyIFthbGwgbW9kZWxzXSI9TElCVVNCX0RFViwgVVNCXFZJRF8wNDAzJlBJRF9GMjA4CisKKzsgRGV2aWNlOiAwNDAzOkZFNzAKKyJMaWJVU0ItMS4wOiBCYXVtIFtWYXJpbyA0MCAoNDAgY2VsbHMpXSI9TElCVVNCX0RFViwgVVNCXFZJRF8wNDAzJlBJRF9GRTcwCisKKzsgRGV2aWNlOiAwNDAzOkZFNzEKKyJMaWJVU0ItMS4wOiBCYXVtIFtQb2NrZXRWYXJpbyAoMjQgY2VsbHMpXSI9TElCVVNCX0RFViwgVVNCXFZJRF8wNDAzJlBJRF9GRTcxCisKKzsgRGV2aWNlOiAwNDAzOkZFNzIKKyJMaWJVU0ItMS4wOiBCYXVtIFtTdXBlclZhcmlvIDQwICg0MCBjZWxscyldIj1MSUJVU0JfREVWLCBVU0JcVklEXzA0MDMmUElEX0ZFNzIKKworOyBEZXZpY2U6IDA0MDM6RkU3MworIkxpYlVTQi0xLjA6IEJhdW0gW1N1cGVyVmFyaW8gMzIgKDMyIGNlbGxzKV0iPUxJQlVTQl9ERVYsIFVTQlxWSURfMDQwMyZQSURfRkU3MworCis7IERldmljZTogMDQwMzpGRTc0CisiTGliVVNCLTEuMDogQmF1bSBbU3VwZXJWYXJpbyA2NCAoNjQgY2VsbHMpXSI9TElCVVNCX0RFViwgVVNCXFZJRF8wNDAzJlBJRF9GRTc0CisKKzsgRGV2aWNlOiAwNDAzOkZFNzUKKyJMaWJVU0ItMS4wOiBCYXVtIFtTdXBlclZhcmlvIDgwICg4MCBjZWxscyldIj1MSUJVU0JfREVWLCBVU0JcVklEXzA0MDMmUElEX0ZFNzUKKworOyBEZXZpY2U6IDA0MDM6RkU3NgorIkxpYlVTQi0xLjA6IEJhdW0gW1ZhcmlvUHJvIDgwICg4MCBjZWxscyldIj1MSUJVU0JfREVWLCBVU0JcVklEXzA0MDMmUElEX0ZFNzYKKworOyBEZXZpY2U6IDA0MDM6RkU3NworIkxpYlVTQi0xLjA6IEJhdW0gW1ZhcmlvUHJvIDY0ICg2NCBjZWxscyldIj1MSUJVU0JfREVWLCBVU0JcVklEXzA0MDMmUElEX0ZFNzcKKworOyBEZXZpY2U6IDA0NTI6MDEwMAorIkxpYlVTQi0xLjA6IE1ldGVjIFthbGwgbW9kZWxzXSI9TElCVVNCX0RFViwgVVNCXFZJRF8wNDUyJlBJRF8wMTAwCisKKzsgRGV2aWNlOiAwNDVFOjkzMEEKKyJMaWJVU0ItMS4wOiBISU1TIFtCcmFpbGxlIFNlbnNlIChVU0IgMS4xKV0sIEhJTVMgW0JyYWlsbGUgU2Vuc2UgKFVTQiAyLjApXSwgSElNUyBbQnJhaWxsZSBTZW5zZSBVMiAoVVNCIDIuMCldIj1MSUJVU0JfREVWLCBVU0JcVklEXzA0NUUmUElEXzkzMEEKKworOyBEZXZpY2U6IDA0NUU6OTMwQgorIkxpYlVTQi0xLjA6IEhJTVMgW0JyYWlsbGUgRWRnZSBhbmQgUUJyYWlsbGVYTF0iPUxJQlVTQl9ERVYsIFVTQlxWSURfMDQ1RSZQSURfOTMwQgorCis7IERldmljZTogMDQ4MzpBMUQzCisiTGliVVNCLTEuMDogQmF1bSBbT3JiaXQgUmVhZGVyIDIwICgyMCBjZWxscyldIj1MSUJVU0JfREVWLCBVU0JcVklEXzA0ODMmUElEX0ExRDMKKworOyBEZXZpY2U6IDA0ODM6QTM2NgorIkxpYlVTQi0xLjA6IEJhdW0gW09yYml0IFJlYWRlciA0MCAoNDAgY2VsbHMpXSI9TElCVVNCX0RFViwgVVNCXFZJRF8wNDgzJlBJRF9BMzY2CisKKzsgRGV2aWNlOiAwNkIwOjAwMDEKKyJMaWJVU0ItMS4wOiBBbHZhIFtTYXRlbGxpdGUgKDVubildIj1MSUJVU0JfREVWLCBVU0JcVklEXzA2QjAmUElEXzAwMDEKKworOyBEZXZpY2U6IDA3OTg6MDAwMQorIkxpYlVTQi0xLjA6IFZveWFnZXIgW2FsbCBtb2RlbHNdIj1MSUJVU0JfREVWLCBVU0JcVklEXzA3OTgmUElEXzAwMDEKKworOyBEZXZpY2U6IDA3OTg6MDYwMAorIkxpYlVTQi0xLjA6IEFsdmEgW1ZveWFnZXIgUHJvdG9jb2wgQ29udmVydGVyXSI9TElCVVNCX0RFViwgVVNCXFZJRF8wNzk4JlBJRF8wNjAwCisKKzsgRGV2aWNlOiAwNzk4OjA2MjQKKyJMaWJVU0ItMS4wOiBBbHZhIFtCQzYyNF0iPUxJQlVTQl9ERVYsIFVTQlxWSURfMDc5OCZQSURfMDYyNAorCis7IERldmljZTogMDc5ODowNjQwCisiTGliVVNCLTEuMDogQWx2YSBbQkM2NDBdIj1MSUJVU0JfREVWLCBVU0JcVklEXzA3OTgmUElEXzA2NDAKKworOyBEZXZpY2U6IDA3OTg6MDY4MAorIkxpYlVTQi0xLjA6IEFsdmEgW0JDNjgwXSI9TElCVVNCX0RFViwgVVNCXFZJRF8wNzk4JlBJRF8wNjgwCisKKzsgRGV2aWNlOiAwOTA0OjEwMTYKKyJMaWJVU0ItMS4wOiBGcmFua0F1ZGlvZGF0YSBbQjJLODQgKGJlZm9yZSBmaXJtd2FyZSBpbnN0YWxsYXRpb24pXSI9TElCVVNCX0RFViwgVVNCXFZJRF8wOTA0JlBJRF8xMDE2CisKKzsgRGV2aWNlOiAwOTA0OjEwMTcKKyJMaWJVU0ItMS4wOiBGcmFua0F1ZGlvZGF0YSBbQjJLODQgKGFmdGVyIGZpcm13YXJlIGluc3RhbGxhdGlvbildIj1MSUJVU0JfREVWLCBVU0JcVklEXzA5MDQmUElEXzEwMTcKKworOyBEZXZpY2U6IDA5MDQ6MjAwMAorIkxpYlVTQi0xLjA6IEJhdW0gW1ZhcmlvUHJvIDQwICg0MCBjZWxscyldIj1MSUJVU0JfREVWLCBVU0JcVklEXzA5MDQmUElEXzIwMDAKKworOyBEZXZpY2U6IDA5MDQ6MjAwMQorIkxpYlVTQi0xLjA6IEJhdW0gW0Vjb1ZhcmlvIDI0ICgyNCBjZWxscyldIj1MSUJVU0JfREVWLCBVU0JcVklEXzA5MDQmUElEXzIwMDEKKworOyBEZXZpY2U6IDA5MDQ6MjAwMgorIkxpYlVTQi0xLjA6IEJhdW0gW0Vjb1ZhcmlvIDQwICg0MCBjZWxscyldIj1MSUJVU0JfREVWLCBVU0JcVklEXzA5MDQmUElEXzIwMDIKKworOyBEZXZpY2U6IDA5MDQ6MjAwNworIkxpYlVTQi0xLjA6IEJhdW0gW1ZhcmlvQ29ubmVjdCA0MCAoNDAgY2VsbHMpXSI9TElCVVNCX0RFViwgVVNCXFZJRF8wOTA0JlBJRF8yMDA3CisKKzsgRGV2aWNlOiAwOTA0OjIwMDgKKyJMaWJVU0ItMS4wOiBCYXVtIFtWYXJpb0Nvbm5lY3QgMzIgKDMyIGNlbGxzKV0iPUxJQlVTQl9ERVYsIFVTQlxWSURfMDkwNCZQSURfMjAwOAorCis7IERldmljZTogMDkwNDoyMDA5CisiTGliVVNCLTEuMDogQmF1bSBbVmFyaW9Db25uZWN0IDI0ICgyNCBjZWxscyldIj1MSUJVU0JfREVWLCBVU0JcVklEXzA5MDQmUElEXzIwMDkKKworOyBEZXZpY2U6IDA5MDQ6MjAxMAorIkxpYlVTQi0xLjA6IEJhdW0gW1ZhcmlvQ29ubmVjdCA2NCAoNjQgY2VsbHMpXSI9TElCVVNCX0RFViwgVVNCXFZJRF8wOTA0JlBJRF8yMDEwCisKKzsgRGV2aWNlOiAwOTA0OjIwMTEKKyJMaWJVU0ItMS4wOiBCYXVtIFtWYXJpb0Nvbm5lY3QgODAgKDgwIGNlbGxzKV0iPUxJQlVTQl9ERVYsIFVTQlxWSURfMDkwNCZQSURfMjAxMQorCis7IERldmljZTogMDkwNDoyMDE0CisiTGliVVNCLTEuMDogQmF1bSBbRWNvVmFyaW8gMzIgKDMyIGNlbGxzKV0iPUxJQlVTQl9ERVYsIFVTQlxWSURfMDkwNCZQSURfMjAxNAorCis7IERldmljZTogMDkwNDoyMDE1CisiTGliVVNCLTEuMDogQmF1bSBbRWNvVmFyaW8gNjQgKDY0IGNlbGxzKV0iPUxJQlVTQl9ERVYsIFVTQlxWSURfMDkwNCZQSURfMjAxNQorCis7IERldmljZTogMDkwNDoyMDE2CisiTGliVVNCLTEuMDogQmF1bSBbRWNvVmFyaW8gODAgKDgwIGNlbGxzKV0iPUxJQlVTQl9ERVYsIFVTQlxWSURfMDkwNCZQSURfMjAxNgorCis7IERldmljZTogMDkwNDozMDAwCisiTGliVVNCLTEuMDogQmF1bSBbUmVmcmVzaGFicmFpbGxlIDE4ICgxOCBjZWxscyldIj1MSUJVU0JfREVWLCBVU0JcVklEXzA5MDQmUElEXzMwMDAKKworOyBEZXZpY2U6IDA5MDQ6MzAwMQorIkxpYlVTQi0xLjA6IEJhdW0gW09yYml0IGluIFJlZnJlc2hhYnJhaWxsZSBFbXVsYXRpb24gTW9kZSAoMTggY2VsbHMpXSwgQmF1bSBbUmVmcmVzaGFicmFpbGxlIDE4ICgxOCBjZWxscyldIj1MSUJVU0JfREVWLCBVU0JcVklEXzA5MDQmUElEXzMwMDEKKworOyBEZXZpY2U6IDA5MDQ6NDAwNAorIkxpYlVTQi0xLjA6IEJhdW0gW1Byb250byEgVjMgMTggKDE4IGNlbGxzKV0iPUxJQlVTQl9ERVYsIFVTQlxWSURfMDkwNCZQSURfNDAwNAorCis7IERldmljZTogMDkwNDo0MDA1CisiTGliVVNCLTEuMDogQmF1bSBbUHJvbnRvISBWMyA0MCAoNDAgY2VsbHMpXSI9TElCVVNCX0RFViwgVVNCXFZJRF8wOTA0JlBJRF80MDA1CisKKzsgRGV2aWNlOiAwOTA0OjQwMDcKKyJMaWJVU0ItMS4wOiBCYXVtIFtQcm9udG8hIFY0IDE4ICgxOCBjZWxscyldIj1MSUJVU0JfREVWLCBVU0JcVklEXzA5MDQmUElEXzQwMDcKKworOyBEZXZpY2U6IDA5MDQ6NDAwOAorIkxpYlVTQi0xLjA6IEJhdW0gW1Byb250byEgVjQgNDAgKDQwIGNlbGxzKV0iPUxJQlVTQl9ERVYsIFVTQlxWSURfMDkwNCZQSURfNDAwOAorCis7IERldmljZTogMDkwNDo2MDAxCisiTGliVVNCLTEuMDogQmF1bSBbU3VwZXJWYXJpbzIgNDAgKDQwIGNlbGxzKV0iPUxJQlVTQl9ERVYsIFVTQlxWSURfMDkwNCZQSURfNjAwMQorCis7IERldmljZTogMDkwNDo2MDAyCisiTGliVVNCLTEuMDogQmF1bSBbUG9ja2V0VmFyaW8yICgyNCBjZWxscyldIj1MSUJVU0JfREVWLCBVU0JcVklEXzA5MDQmUElEXzYwMDIKKworOyBEZXZpY2U6IDA5MDQ6NjAwMworIkxpYlVTQi0xLjA6IEJhdW0gW1N1cGVyVmFyaW8yIDMyICgzMiBjZWxscyldIj1MSUJVU0JfREVWLCBVU0JcVklEXzA5MDQmUElEXzYwMDMKKworOyBEZXZpY2U6IDA5MDQ6NjAwNAorIkxpYlVTQi0xLjA6IEJhdW0gW1N1cGVyVmFyaW8yIDY0ICg2NCBjZWxscyldIj1MSUJVU0JfREVWLCBVU0JcVklEXzA5MDQmUElEXzYwMDQKKworOyBEZXZpY2U6IDA5MDQ6NjAwNQorIkxpYlVTQi0xLjA6IEJhdW0gW1N1cGVyVmFyaW8yIDgwICg4MCBjZWxscyldIj1MSUJVU0JfREVWLCBVU0JcVklEXzA5MDQmUElEXzYwMDUKKworOyBEZXZpY2U6IDA5MDQ6NjAwNgorIkxpYlVTQi0xLjA6IEJhdW0gW0JyYWlsbGlhbnQyIDQwICg0MCBjZWxscyldIj1MSUJVU0JfREVWLCBVU0JcVklEXzA5MDQmUElEXzYwMDYKKworOyBEZXZpY2U6IDA5MDQ6NjAwNworIkxpYlVTQi0xLjA6IEJhdW0gW0JyYWlsbGlhbnQyIDI0ICgyNCBjZWxscyldIj1MSUJVU0JfREVWLCBVU0JcVklEXzA5MDQmUElEXzYwMDcKKworOyBEZXZpY2U6IDA5MDQ6NjAwOAorIkxpYlVTQi0xLjA6IEJhdW0gW0JyYWlsbGlhbnQyIDMyICgzMiBjZWxscyldIj1MSUJVU0JfREVWLCBVU0JcVklEXzA5MDQmUElEXzYwMDgKKworOyBEZXZpY2U6IDA5MDQ6NjAwOQorIkxpYlVTQi0xLjA6IEJhdW0gW0JyYWlsbGlhbnQyIDY0ICg2NCBjZWxscyldIj1MSUJVU0JfREVWLCBVU0JcVklEXzA5MDQmUElEXzYwMDkKKworOyBEZXZpY2U6IDA5MDQ6NjAwQQorIkxpYlVTQi0xLjA6IEJhdW0gW0JyYWlsbGlhbnQyIDgwICg4MCBjZWxscyldIj1MSUJVU0JfREVWLCBVU0JcVklEXzA5MDQmUElEXzYwMEEKKworOyBEZXZpY2U6IDA5MDQ6NjAxMQorIkxpYlVTQi0xLjA6IEJhdW0gW1ZhcmlvQ29ubmVjdCAyNCAoMjQgY2VsbHMpXSI9TElCVVNCX0RFViwgVVNCXFZJRF8wOTA0JlBJRF82MDExCisKKzsgRGV2aWNlOiAwOTA0OjYwMTIKKyJMaWJVU0ItMS4wOiBCYXVtIFtWYXJpb0Nvbm5lY3QgMzIgKDMyIGNlbGxzKV0iPUxJQlVTQl9ERVYsIFVTQlxWSURfMDkwNCZQSURfNjAxMgorCis7IERldmljZTogMDkwNDo2MDEzCisiTGliVVNCLTEuMDogQmF1bSBbVmFyaW9Db25uZWN0IDQwICg0MCBjZWxscyldIj1MSUJVU0JfREVWLCBVU0JcVklEXzA5MDQmUElEXzYwMTMKKworOyBEZXZpY2U6IDA5MDQ6NjEwMQorIkxpYlVTQi0xLjA6IEJhdW0gW1ZhcmlvVWx0cmEgMjAgKDIwIGNlbGxzKV0iPUxJQlVTQl9ERVYsIFVTQlxWSURfMDkwNCZQSURfNjEwMQorCis7IERldmljZTogMDkwNDo2MTAyCisiTGliVVNCLTEuMDogQmF1bSBbVmFyaW9VbHRyYSA0MCAoNDAgY2VsbHMpXSI9TElCVVNCX0RFViwgVVNCXFZJRF8wOTA0JlBJRF82MTAyCisKKzsgRGV2aWNlOiAwOTA0OjYxMDMKKyJMaWJVU0ItMS4wOiBCYXVtIFtWYXJpb1VsdHJhIDMyICgzMiBjZWxscyldIj1MSUJVU0JfREVWLCBVU0JcVklEXzA5MDQmUElEXzYxMDMKKworOyBEZXZpY2U6IDA5MjE6MTIwMAorIkxpYlVTQi0xLjA6IEhhbmR5VGVjaCBbR29IdWJzIGNoaXBdIj1MSUJVU0JfREVWLCBVU0JcVklEXzA5MjEmUElEXzEyMDAKKworOyBEZXZpY2U6IDBGNEU6MDEwMAorIkxpYlVTQi0xLjA6IEZyZWVkb21TY2llbnRpZmljIFtGb2N1cyAxXSI9TElCVVNCX0RFViwgVVNCXFZJRF8wRjRFJlBJRF8wMTAwCisKKzsgRGV2aWNlOiAwRjRFOjAxMTEKKyJMaWJVU0ItMS4wOiBGcmVlZG9tU2NpZW50aWZpYyBbUEFDIE1hdGVdIj1MSUJVU0JfREVWLCBVU0JcVklEXzBGNEUmUElEXzAxMTEKKworOyBEZXZpY2U6IDBGNEU6MDExMgorIkxpYlVTQi0xLjA6IEZyZWVkb21TY2llbnRpZmljIFtGb2N1cyAyXSI9TElCVVNCX0RFViwgVVNCXFZJRF8wRjRFJlBJRF8wMTEyCisKKzsgRGV2aWNlOiAwRjRFOjAxMTQKKyJMaWJVU0ItMS4wOiBGcmVlZG9tU2NpZW50aWZpYyBbRm9jdXMgMytdIj1MSUJVU0JfREVWLCBVU0JcVklEXzBGNEUmUElEXzAxMTQKKworOyBEZXZpY2U6IDEwQzQ6RUE2MAorOyBHZW5lcmljIElkZW50aWZpZXIKKzsgVmVuZG9yOiBDeWduYWwgSW50ZWdyYXRlZCBQcm9kdWN0cywgSW5jLgorOyBQcm9kdWN0OiBDUDIxMHggVUFSVCBCcmlkZ2UgLyBteUFWUiBteVNtYXJ0VVNCIGxpZ2h0CisiTGliVVNCLTEuMDogQnJhaWxsZU1lbW8gW1BvY2tldF0sIFNlaWthIFtCcmFpbGxlIERpc3BsYXldIj1MSUJVU0JfREVWLCBVU0JcVklEXzEwQzQmUElEX0VBNjAKKworOyBEZXZpY2U6IDEwQzQ6RUE4MAorOyBHZW5lcmljIElkZW50aWZpZXIKKzsgVmVuZG9yOiBDeWduYWwgSW50ZWdyYXRlZCBQcm9kdWN0cywgSW5jLgorOyBQcm9kdWN0OiBDUDIxMHggVUFSVCBCcmlkZ2UKKyJMaWJVU0ItMS4wOiBTZWlrYSBbTm90ZSBUYWtlcl0iPUxJQlVTQl9ERVYsIFVTQlxWSURfMTBDNCZQSURfRUE4MAorCis7IERldmljZTogMTE0ODowMzAxCisiTGliVVNCLTEuMDogQnJhaWxsZU1lbW8gW1NtYXJ0XSI9TElCVVNCX0RFViwgVVNCXFZJRF8xMTQ4JlBJRF8wMzAxCisKKzsgRGV2aWNlOiAxMjA5OkFCQzAKKyJMaWJVU0ItMS4wOiBJbmNlcHRvciBbYWxsIG1vZGVsc10iPUxJQlVTQl9ERVYsIFVTQlxWSURfMTIwOSZQSURfQUJDMAorCis7IERldmljZTogMTZDMDowNUUxCisiTGliVVNCLTEuMDogQ2FudXRlIFthbGwgbW9kZWxzXSI9TElCVVNCX0RFViwgVVNCXFZJRF8xNkMwJlBJRF8wNUUxCisKKzsgRGV2aWNlOiAxQTg2Ojc1MjMKKzsgR2VuZXJpYyBJZGVudGlmaWVyCis7IFZlbmRvcjogSmlhbmdzdSBRaW5IZW5nLCBMdGQuCis7IFByb2R1Y3Q6IENIMzQxIFVTQiBCcmlkZ2UgQ29udHJvbGxlcgorIkxpYlVTQi0xLjA6IEJhdW0gW05MUyBlUmVhZGVyIFpvb21heCAoMjAgY2VsbHMpXSI9TElCVVNCX0RFViwgVVNCXFZJRF8xQTg2JlBJRF83NTIzCisKKzsgRGV2aWNlOiAxQzcxOkMwMDQKKyJMaWJVU0ItMS4wOiBCcmFpbGxlTm90ZSBbSHVtYW5XYXJlIEFQRVhdIj1MSUJVU0JfREVWLCBVU0JcVklEXzFDNzEmUElEX0MwMDQKKworOyBEZXZpY2U6IDFDNzE6QzAwNQorIkxpYlVTQi0xLjA6IEh1bWFuV2FyZSBbQnJhaWxsaWFudCBCSSAzMi80MCwgQnJhaWxsaWFudCBCIDgwIChzZXJpYWwgcHJvdG9jb2wpXSI9TElCVVNCX0RFViwgVVNCXFZJRF8xQzcxJlBJRF9DMDA1CisKKzsgRGV2aWNlOiAxQzcxOkMwMDYKKyJMaWJVU0ItMS4wOiBIdW1hbldhcmUgW25vbi1Ub3VjaCBtb2RlbHMgKEhJRCBwcm90b2NvbCldIj1MSUJVU0JfREVWLCBVU0JcVklEXzFDNzEmUElEX0MwMDYKKworOyBEZXZpY2U6IDFDNzE6QzAwQQorIkxpYlVTQi0xLjA6IEh1bWFuV2FyZSBbQnJhaWxsZU5vdGUgVG91Y2ggKEhJRCBwcm90b2NvbCldIj1MSUJVU0JfREVWLCBVU0JcVklEXzFDNzEmUElEX0MwMEEKKworOyBEZXZpY2U6IDFDNzE6QzAyMQorIkxpYlVTQi0xLjA6IEh1bWFuV2FyZSBbQnJhaWxsaWFudCBCSSAxNCAoc2VyaWFsIHByb3RvY29sKV0iPUxJQlVTQl9ERVYsIFVTQlxWSURfMUM3MSZQSURfQzAyMQorCis7IERldmljZTogMUM3MTpDMTAxCisiTGliVVNCLTEuMDogSHVtYW5XYXJlIFtBUEggQ2hhbWVsZW9uIDIwIChISUQgcHJvdG9jb2wsIGZpcm13YXJlIDEuMCldLCBIdW1hbldhcmUgW0FQSCBDaGFtZWxlb24gMjAgKEhJRCBwcm90b2NvbCwgZmlybXdhcmUgMS4xKV0iPUxJQlVTQl9ERVYsIFVTQlxWSURfMUM3MSZQSURfQzEwMQorCis7IERldmljZTogMUM3MTpDMTA0CisiTGliVVNCLTEuMDogSHVtYW5XYXJlIFtBUEggQ2hhbWVsZW9uIDIwIChzZXJpYWwgcHJvdG9jb2wpXSI9TElCVVNCX0RFViwgVVNCXFZJRF8xQzcxJlBJRF9DMTA0CisKKzsgRGV2aWNlOiAxQzcxOkMxMTEKKyJMaWJVU0ItMS4wOiBIdW1hbldhcmUgW0FQSCBNYW50aXMgUTQwIChISUQgcHJvdG9jb2wsIGZpcm13YXJlIDEuMCldLCBIdW1hbldhcmUgW0FQSCBNYW50aXMgUTQwIChISUQgcHJvdG9jb2wsIGZpcm13YXJlIDEuMSldIj1MSUJVU0JfREVWLCBVU0JcVklEXzFDNzEmUElEX0MxMTEKKworOyBEZXZpY2U6IDFDNzE6QzExNAorIkxpYlVTQi0xLjA6IEh1bWFuV2FyZSBbQVBIIE1hbnRpcyBRNDAgKHNlcmlhbCBwcm90b2NvbCldIj1MSUJVU0JfREVWLCBVU0JcVklEXzFDNzEmUElEX0MxMTQKKworOyBEZXZpY2U6IDFDNzE6QzEyMQorIkxpYlVTQi0xLjA6IEh1bWFuV2FyZSBbSHVtYW53YXJlIEJyYWlsbGVPbmUgKEhJRCBwcm90b2NvbCwgZmlybXdhcmUgMS4wKV0sIEh1bWFuV2FyZSBbSHVtYW53YXJlIEJyYWlsbGVPbmUgKEhJRCBwcm90b2NvbCwgZmlybXdhcmUgMS4xKV0iPUxJQlVTQl9ERVYsIFVTQlxWSURfMUM3MSZQSURfQzEyMQorCis7IERldmljZTogMUM3MTpDMTI0CisiTGliVVNCLTEuMDogSHVtYW5XYXJlIFtIdW1hbndhcmUgQnJhaWxsZU9uZSAoc2VyaWFsIHByb3RvY29sKV0iPUxJQlVTQl9ERVYsIFVTQlxWSURfMUM3MSZQSURfQzEyNAorCis7IERldmljZTogMUM3MTpDMTMxCisiTGliVVNCLTEuMDogSHVtYW5XYXJlIFtIdW1hbndhcmUgQnJhaWxsaWFudCBCSSA0MFggKEhJRCBwcm90b2NvbCwgZmlybXdhcmUgMS4wKV0sIEh1bWFuV2FyZSBbSHVtYW53YXJlIEJyYWlsbGlhbnQgQkkgNDBYIChISUQgcHJvdG9jb2wsIGZpcm13YXJlIDEuMSldIj1MSUJVU0JfREVWLCBVU0JcVklEXzFDNzEmUElEX0MxMzEKKworOyBEZXZpY2U6IDFDNzE6QzE0MQorIkxpYlVTQi0xLjA6IEh1bWFuV2FyZSBbSHVtYW53YXJlIEJyYWlsbGlhbnQgQkkgMjBYIChISUQgcHJvdG9jb2wsIGZpcm13YXJlIDEuMCldLCBIdW1hbldhcmUgW0h1bWFud2FyZSBCcmFpbGxpYW50IEJJIDIwWCAoSElEIHByb3RvY29sLCBmaXJtd2FyZSAxLjEpXSI9TElCVVNCX0RFViwgVVNCXFZJRF8xQzcxJlBJRF9DMTQxCisKKzsgRGV2aWNlOiAxQzcxOkNFMDEKKyJMaWJVU0ItMS4wOiBIdW1hbldhcmUgW05MUyBlUmVhZGVyIChISUQgcHJvdG9jb2wsIGZpcm13YXJlIDEuMCldLCBIdW1hbldhcmUgW05MUyBlUmVhZGVyIChISUQgcHJvdG9jb2wsIGZpcm13YXJlIDEuMSldIj1MSUJVU0JfREVWLCBVU0JcVklEXzFDNzEmUElEX0NFMDEKKworOyBEZXZpY2U6IDFDNzE6Q0UwNAorIkxpYlVTQi0xLjA6IEh1bWFuV2FyZSBbTkxTIGVSZWFkZXIgKHNlcmlhbCBwcm90b2NvbCldIj1MSUJVU0JfREVWLCBVU0JcVklEXzFDNzEmUElEX0NFMDQKKworOyBEZXZpY2U6IDFGRTQ6MDAwMworIkxpYlVTQi0xLjA6IEhhbmR5VGVjaCBbVVNCLUhJRCBhZGFwdGVyXSI9TElCVVNCX0RFViwgVVNCXFZJRF8xRkU0JlBJRF8wMDAzCisKKzsgRGV2aWNlOiAxRkU0OjAwNDQKKyJMaWJVU0ItMS4wOiBIYW5keVRlY2ggW0Vhc3kgQnJhaWxsZSAoSElEKV0iPUxJQlVTQl9ERVYsIFVTQlxWSURfMUZFNCZQSURfMDA0NAorCis7IERldmljZTogMUZFNDowMDU0CisiTGliVVNCLTEuMDogSGFuZHlUZWNoIFtBY3RpdmUgQnJhaWxsZV0iPUxJQlVTQl9ERVYsIFVTQlxWSURfMUZFNCZQSURfMDA1NAorCis7IERldmljZTogMUZFNDowMDU1CisiTGliVVNCLTEuMDogSGFuZHlUZWNoIFtDb25uZWN0IEJyYWlsbGUgNDBdIj1MSUJVU0JfREVWLCBVU0JcVklEXzFGRTQmUElEXzAwNTUKKworOyBEZXZpY2U6IDFGRTQ6MDA2MQorIkxpYlVTQi0xLjA6IEhhbmR5VGVjaCBbQWN0aWxpbm9dIj1MSUJVU0JfREVWLCBVU0JcVklEXzFGRTQmUElEXzAwNjEKKworOyBEZXZpY2U6IDFGRTQ6MDA2NAorIkxpYlVTQi0xLjA6IEhhbmR5VGVjaCBbQWN0aXZlIFN0YXIgNDBdIj1MSUJVU0JfREVWLCBVU0JcVklEXzFGRTQmUElEXzAwNjQKKworOyBEZXZpY2U6IDFGRTQ6MDA3NAorIkxpYlVTQi0xLjA6IEhhbmR5VGVjaCBbQnJhaWxsZSBTdGFyIDQwIChISUQpXSI9TElCVVNCX0RFViwgVVNCXFZJRF8xRkU0JlBJRF8wMDc0CisKKzsgRGV2aWNlOiAxRkU0OjAwODEKKyJMaWJVU0ItMS4wOiBIYW5keVRlY2ggW0Jhc2ljIEJyYWlsbGUgMTZdIj1MSUJVU0JfREVWLCBVU0JcVklEXzFGRTQmUElEXzAwODEKKworOyBEZXZpY2U6IDFGRTQ6MDA4MgorIkxpYlVTQi0xLjA6IEhhbmR5VGVjaCBbQmFzaWMgQnJhaWxsZSAyMF0iPUxJQlVTQl9ERVYsIFVTQlxWSURfMUZFNCZQSURfMDA4MgorCis7IERldmljZTogMUZFNDowMDgzCisiTGliVVNCLTEuMDogSGFuZHlUZWNoIFtCYXNpYyBCcmFpbGxlIDMyXSI9TElCVVNCX0RFViwgVVNCXFZJRF8xRkU0JlBJRF8wMDgzCisKKzsgRGV2aWNlOiAxRkU0OjAwODQKKyJMaWJVU0ItMS4wOiBIYW5keVRlY2ggW0Jhc2ljIEJyYWlsbGUgNDBdIj1MSUJVU0JfREVWLCBVU0JcVklEXzFGRTQmUElEXzAwODQKKworOyBEZXZpY2U6IDFGRTQ6MDA4NgorIkxpYlVTQi0xLjA6IEhhbmR5VGVjaCBbQmFzaWMgQnJhaWxsZSA2NF0iPUxJQlVTQl9ERVYsIFVTQlxWSURfMUZFNCZQSURfMDA4NgorCis7IERldmljZTogMUZFNDowMDg3CisiTGliVVNCLTEuMDogSGFuZHlUZWNoIFtCYXNpYyBCcmFpbGxlIDgwXSI9TElCVVNCX0RFViwgVVNCXFZJRF8xRkU0JlBJRF8wMDg3CisKKzsgRGV2aWNlOiAxRkU0OjAwOEEKKyJMaWJVU0ItMS4wOiBIYW5keVRlY2ggW0Jhc2ljIEJyYWlsbGUgNDhdIj1MSUJVU0JfREVWLCBVU0JcVklEXzFGRTQmUElEXzAwOEEKKworOyBEZXZpY2U6IDFGRTQ6MDA4QgorIkxpYlVTQi0xLjA6IEhhbmR5VGVjaCBbQmFzaWMgQnJhaWxsZSAxNjBdIj1MSUJVU0JfREVWLCBVU0JcVklEXzFGRTQmUElEXzAwOEIKKworOyBEZXZpY2U6IDFGRTQ6MDBBNAorIkxpYlVTQi0xLjA6IEhhbmR5VGVjaCBbQWN0aXZhdG9yXSI9TElCVVNCX0RFViwgVVNCXFZJRF8xRkU0JlBJRF8wMEE0CisKKzsgRGV2aWNlOiA0MjQyOjAwMDEKKyJMaWJVU0ItMS4wOiBQZWdhc3VzIFthbGwgbW9kZWxzXSI9TElCVVNCX0RFViwgVVNCXFZJRF80MjQyJlBJRF8wMDAxCisKKzsgRGV2aWNlOiBDMjUxOjExMjIKKyJMaWJVU0ItMS4wOiBFdXJvQnJhaWxsZSBbRXN5cyAodmVyc2lvbiA8IDMuMCwgbm8gU0QgY2FyZCldIj1MSUJVU0JfREVWLCBVU0JcVklEX0MyNTEmUElEXzExMjIKKworOyBEZXZpY2U6IEMyNTE6MTEyMworIkxpYlVTQi0xLjA6IEV1cm9CcmFpbGxlIFtyZXNlcnZlZF0iPUxJQlVTQl9ERVYsIFVTQlxWSURfQzI1MSZQSURfMTEyMworCis7IERldmljZTogQzI1MToxMTI0CisiTGliVVNCLTEuMDogRXVyb0JyYWlsbGUgW0VzeXMgKHZlcnNpb24gPCAzLjAsIHdpdGggU0QgY2FyZCldIj1MSUJVU0JfREVWLCBVU0JcVklEX0MyNTEmUElEXzExMjQKKworOyBEZXZpY2U6IEMyNTE6MTEyNQorIkxpYlVTQi0xLjA6IEV1cm9CcmFpbGxlIFtyZXNlcnZlZF0iPUxJQlVTQl9ERVYsIFVTQlxWSURfQzI1MSZQSURfMTEyNQorCis7IERldmljZTogQzI1MToxMTI2CisiTGliVVNCLTEuMDogRXVyb0JyYWlsbGUgW0VzeXMgKHZlcnNpb24gPj0gMy4wLCBubyBTRCBjYXJkKV0iPUxJQlVTQl9ERVYsIFVTQlxWSURfQzI1MSZQSURfMTEyNgorCis7IERldmljZTogQzI1MToxMTI3CisiTGliVVNCLTEuMDogRXVyb0JyYWlsbGUgW3Jlc2VydmVkXSI9TElCVVNCX0RFViwgVVNCXFZJRF9DMjUxJlBJRF8xMTI3CisKKzsgRGV2aWNlOiBDMjUxOjExMjgKKyJMaWJVU0ItMS4wOiBFdXJvQnJhaWxsZSBbRXN5cyAodmVyc2lvbiA+PSAzLjAsIHdpdGggU0QgY2FyZCldIj1MSUJVU0JfREVWLCBVU0JcVklEX0MyNTEmUElEXzExMjgKKworOyBEZXZpY2U6IEMyNTE6MTEyOQorIkxpYlVTQi0xLjA6IEV1cm9CcmFpbGxlIFtyZXNlcnZlZF0iPUxJQlVTQl9ERVYsIFVTQlxWSURfQzI1MSZQSURfMTEyOQorCis7IERldmljZTogQzI1MToxMTJBCisiTGliVVNCLTEuMDogRXVyb0JyYWlsbGUgW3Jlc2VydmVkXSI9TElCVVNCX0RFViwgVVNCXFZJRF9DMjUxJlBJRF8xMTJBCisKKzsgRGV2aWNlOiBDMjUxOjExMkIKKyJMaWJVU0ItMS4wOiBFdXJvQnJhaWxsZSBbcmVzZXJ2ZWRdIj1MSUJVU0JfREVWLCBVU0JcVklEX0MyNTEmUElEXzExMkIKKworOyBEZXZpY2U6IEMyNTE6MTEyQworIkxpYlVTQi0xLjA6IEV1cm9CcmFpbGxlIFtyZXNlcnZlZF0iPUxJQlVTQl9ERVYsIFVTQlxWSURfQzI1MSZQSURfMTEyQworCis7IERldmljZTogQzI1MToxMTJECisiTGliVVNCLTEuMDogRXVyb0JyYWlsbGUgW3Jlc2VydmVkXSI9TElCVVNCX0RFViwgVVNCXFZJRF9DMjUxJlBJRF8xMTJECisKKzsgRGV2aWNlOiBDMjUxOjExMkUKKyJMaWJVU0ItMS4wOiBFdXJvQnJhaWxsZSBbcmVzZXJ2ZWRdIj1MSUJVU0JfREVWLCBVU0JcVklEX0MyNTEmUElEXzExMkUKKworOyBEZXZpY2U6IEMyNTE6MTEyRgorIkxpYlVTQi0xLjA6IEV1cm9CcmFpbGxlIFtyZXNlcnZlZF0iPUxJQlVTQl9ERVYsIFVTQlxWSURfQzI1MSZQSURfMTEyRgorCis7IERldmljZTogQzI1MToxMTMwCisiTGliVVNCLTEuMDogRXVyb0JyYWlsbGUgW0VzeXRpbWUgKGZpcm13YXJlIDEuMDMsIDIwMTQtMDMtMzEpXSwgRXVyb0JyYWlsbGUgW0VzeXRpbWVdIj1MSUJVU0JfREVWLCBVU0JcVklEX0MyNTEmUElEXzExMzAKKworOyBEZXZpY2U6IEMyNTE6MTEzMQorIkxpYlVTQi0xLjA6IEV1cm9CcmFpbGxlIFtyZXNlcnZlZF0iPUxJQlVTQl9ERVYsIFVTQlxWSURfQzI1MSZQSURfMTEzMQorCis7IERldmljZTogQzI1MToxMTMyCisiTGliVVNCLTEuMDogRXVyb0JyYWlsbGUgW3Jlc2VydmVkXSI9TElCVVNCX0RFViwgVVNCXFZJRF9DMjUxJlBJRF8xMTMyCisKKzsgRU5EX1VTQl9CUkFJTExFX0RFVklDRVMKKworOyBNaWNyb3NvZnQgTmFycmF0b3IgRGV2aWNlCisiTGliVVNCLTEuMDogTWljcm9zb2Z0IE5hcnJhdG9yIj1MSUJVU0JfREVWLCBVU0JcTmFycmF0b3JPdmVycmlkZQorCis7ID09PT09PT09PT09PT09PT09PT09IEluc3RhbGxhdGlvbiA9PT09PT09PT09PT09PT09PT09CisKKzsgVGhlIEluY2x1ZGUgYW5kIE5lZWRzIGRpcmVjdGl2ZXMgaW4gdGhlIExJQlVTQl9ERVYgc2VjdGlvbiBhcmUgcmVxdWlyZWQgZm9yIAorOyBpbnN0YWxsaW5nIFdpblVTQiBvbiBXaW5kb3dzIFZpc3RhIHN5c3RlbXMuIFdpbmRvd3MgWFAgc3lzdGVtcyBpZ25vcmUgdGhlc2UgCis7IGRpcmVjdGl2ZXMuIFRoZXNlIGRpcmVjdGl2ZXMgc2hvdWxkIG5vdCBiZSBtb2RpZmllZC4KK1tMSUJVU0JfREVWXQorSW5jbHVkZT13aW51c2IuaW5mCitOZWVkcz1XSU5VU0IuTlQKKworOyBUaGUgSW5jbHVkZSBkaXJlY3RpdmUgaW4gdGhlIExJQlVTQl9ERVYuU2VydmljZXMgc2VjdGlvbiBpbmNsdWRlcyB0aGUgc3lzdGVtLQorOyBzdXBwbGllZCBJTkYgZm9yIFdpblVTQi4gVGhpcyBJTkYgaXMgaW5zdGFsbGVkIGJ5IHRoZSBXaW5VU0IgY28taW5zdGFsbGVyIGlmIAorOyBpdCBpcyBub3QgYWxyZWFkeSBvbiB0aGUgdGFyZ2V0IHN5c3RlbS4gVGhlIEFkZFNlcnZpY2UgZGlyZWN0aXZlIHNwZWNpZmllcyAKKzsgV2luVXNiLnN5cyBhcyB0aGUgZGV2aWNlJ3MgZnVuY3Rpb24gZHJpdmVyLiBUaGVzZSBkaXJlY3RpdmVzIHNob3VsZCBub3QgYmUgCis7IG1vZGlmaWVkLgorW0xJQlVTQl9ERVYuU2VydmljZXNdCitJbmNsdWRlPXdpbnVzYi5pbmYKK0FkZFNlcnZpY2U9V2luVVNCLDB4MDAwMDAwMDIsV2luVVNCX1NlcnZpY2VJbnN0YWxsCisKKzsgVGhlIFdpblVTQl9TZXJ2aWNlSW5zdGFsbCBzZWN0aW9uIGNvbnRhaW5zIHRoZSBkYXRhIGZvciBpbnN0YWxsaW5nIFdpblVzYi5zeXMgCis7IGFzIGEgc2VydmljZS4gVGhpcyBzZWN0aW9uIHNob3VsZCBub3QgYmUgbW9kaWZpZWQuCitbV2luVVNCX1NlcnZpY2VJbnN0YWxsXQorRGlzcGxheU5hbWUgICAgID0gJVdpblVTQl9TdmNEZXNjJQorU2VydmljZVR5cGUgICAgID0gMQorU3RhcnRUeXBlICAgICAgID0gMworRXJyb3JDb250cm9sICAgID0gMQorU2VydmljZUJpbmFyeSAgID0gJTEyJVxXaW5VU0Iuc3lzCisKKzsgVGhlIEttZGZTZXJ2aWNlIGRpcmVjdGl2ZSBpbnN0YWxscyBXaW5Vc2Iuc3lzIGFzIGEga2VybmVsLW1vZGUgc2VydmljZS4gVGhlIAorOyByZWZlcmVuY2VkIFdpbkxJQlVTQl9ERVYgc2VjdGlvbiBzcGVjaWZpZXMgdGhlIEtNREYgbGlicmFyeSB2ZXJzaW9uLiAKKzsgVXN1YWxseSwgdGhlIHZlcnNpb24gY2FuIGJlIGRlcml2ZWQgZnJvbSB0aGUgV2RmQ29JbnN0YWxsZXJ4eHl5eS5kbGwgd2l0aCAKKzsgeHggPSBtYWpvciwgeXl5ID0gbWlub3IKK1tMSUJVU0JfREVWLldkZl0KK0ttZGZTZXJ2aWNlPVdJTlVTQiwgV2luTElCVVNCX0RFVgorCitbV2luTElCVVNCX0RFVl0KK0ttZGZMaWJyYXJ5VmVyc2lvbj0xLjkKKworOyBMSUJVU0JfREVWLkhXIGlzIHRoZSBrZXkgc2VjdGlvbiBpbiB0aGUgSU5GLiBJdCBzcGVjaWZpZXMgdGhlIGRldmljZSAKKzsgaW50ZXJmYWNlIGdsb2JhbGx5IHVuaXF1ZSBpZGVudGlmaWVyIChHVUlEKSBmb3IgeW91ciBkZXZpY2UuIFRoZSBBZGRSZWcgCis7IGRpcmVjdGl2ZSBwdXRzIHRoZSBpbnRlcmZhY2UgR1VJRCBpbiBhIHN0YW5kYXJkIHJlZ2lzdHJ5IHZhbHVlLiBXaGVuIAorOyBXaW5Vc2Iuc3lzIGlzIGxvYWRlZCBhcyB0aGUgZGV2aWNlJ3MgZnVuY3Rpb24gZHJpdmVyLCBpdCByZWFkcyB0aGUgcmVnaXN0cnkKKzsgdmFsdWUgYW5kIHVzZXMgdGhlIHNwZWNpZmllZCBHVUlEIHRvIHJlcHJlc2VudCB0aGUgZGV2aWNlIGludGVyZmFjZS4gWW91IAorOyBzaG91bGQgcmVwbGFjZSB0aGUgR1VJRCBpbiB0aGlzIGV4YW1wbGUgd2l0aCBvbmUgdGhhdCB5b3UgY3JlYXRlIHNwZWNpZmljYWxseQorOyBmb3IgeW91ciBkZXZpY2UuIElmIHRoZSBwcm90b2NvbHMgZm9yIHRoZSBkZXZpY2UgY2hhbmdlLCB5b3Ugc2hvdWxkIGNyZWF0ZSBhCis7IG5ldyBkZXZpY2UgaW50ZXJmYWNlIEdVSUQuCitbTElCVVNCX0RFVi5IV10KK0FkZFJlZz1EZXZfQWRkUmVnCisKK1tEZXZfQWRkUmVnXQorSEtSLCxEZXZpY2VJbnRlcmZhY2VHVUlEcywweDEwMDAwLCVEZXZpY2VHVUlEJQorCis7IFRoZSBMSUJVU0JfREVWLkNvSW5zdGFsbGVycyBzZWN0aW9uLCBpbmNsdWRpbmcgdGhlIHJlZmVyZW5jZWQgQWRkUmVnIGFuZCAKKzsgQ29weUZpbGVzIHNlY3Rpb25zLCBjb250YWlucyBkYXRhIGFuZCBpbnN0cnVjdGlvbnMgdG8gaW5zdGFsbCB0aGUgV2luVVNCIGFuZCAKKzsgS01ERiBjbyBpbnN0YWxsZXJzIGFuZCBhc3NvY2lhdGUgdGhlbSB3aXRoIHRoZSBkZXZpY2UuIE1vc3QgVVNCIGRldmljZXMgY2FuIAorOyB1c2UgdGhlc2Ugc2VjdGlvbnMgYW5kIGRpcmVjdGl2ZXMgd2l0aG91dCBtb2RpZmljYXRpb24uCitbTElCVVNCX0RFVi5Db0luc3RhbGxlcnNdCitBZGRSZWc9Q29JbnN0YWxsZXJzX0FkZFJlZworQ29weUZpbGVzPUNvSW5zdGFsbGVyc19Db3B5RmlsZXMKKworW0NvSW5zdGFsbGVyc19BZGRSZWddCitIS1IsLENvSW5zdGFsbGVyczMyLDB4MDAwMTAwMDAsIldkZkNvSW5zdGFsbGVyMDEwMDkuZGxsLFdkZkNvSW5zdGFsbGVyIiwiV2luVVNCQ29JbnN0YWxsZXIyLmRsbCIKKworW0NvSW5zdGFsbGVyc19Db3B5RmlsZXNdCitXaW5VU0JDb0luc3RhbGxlcjIuZGxsCitXZGZDb0luc3RhbGxlcjAxMDA5LmRsbAorCitbRGVzdGluYXRpb25EaXJzXQorQ29JbnN0YWxsZXJzX0NvcHlGaWxlcz0xMQorCis7ID09PT09PT09PT09PT09PSBTb3VyY2UgTWVkaWEgU2VjdGlvbiA9PT09PT09PT09PT09PT09CisgCis7IFRoZSB4ODYgYW5kIHg2NCB2ZXJzaW9ucyBvZiBXaW5kb3dzIGhhdmUgc2VwYXJhdGUgY28gaW5zdGFsbGVycy4gVGhpcyBleGFtcGxlIAorOyBzdG9yZXMgdGhlbSBvbiB0aGUgaW5zdGFsbGF0aW9uIGRpc2sgaW4gZm9sZGVycyB0aGF0IGFyZSBuYW1lZCB4ODYgYW5kIGFtZDY0CitbU291cmNlRGlza3NOYW1lc10KKzEgPSAlRGlza05hbWUlLCwsXHg4NgorMiA9ICVEaXNrTmFtZSUsLCxcYW1kNjQKKworW1NvdXJjZURpc2tzRmlsZXMueDg2XQorV2luVVNCQ29JbnN0YWxsZXIyLmRsbD0xCitXZGZDb0luc3RhbGxlcjAxMDA5LmRsbD0xCisKK1tTb3VyY2VEaXNrc0ZpbGVzLmFtZDY0XQorV2luVVNCQ29JbnN0YWxsZXIyLmRsbD0yCitXZGZDb0luc3RhbGxlcjAxMDA5LmRsbD0yCisKZGlmZiAtLWdpdCBhL1dpbmRvd3MvbGlidXNiLTEuMC5uc2kgYi9XaW5kb3dzL2xpYnVzYi0xLjAubnNpCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM0YzE3MDIKLS0tIC9kZXYvbnVsbAorKysgYi9XaW5kb3dzL2xpYnVzYi0xLjAubnNpCkBAIC0wLDAgKzEsMjUgQEAKKyFkZWZpbmUgVkFSSUFOVCAibGlidXNiLTEuMCIKKworIW1hY3JvIEJybHR0eUluc3RhbGwKKwkhaW5zZXJ0bWFjcm8gSW5zdGFsbExpYiBETEwgTk9UU0hBUkVEIFJFQk9PVF9OT1RQUk9URUNURUQgIiR7RElTVERJUn1cYmluXGxpYnVzYi0xLjAuZGxsIiAiJFNZU0RJUlxsaWJ1c2ItMS4wLmRsbCIgIiRTWVNESVIiCishbWFjcm9lbmQKKworIW1hY3JvIEJybHR0eVNob3J0Y3V0CishbWFjcm9lbmQKKworIW1hY3JvIEJybHR0eVR3ZWFrCishZGVmaW5lIHN5c1NldHVwQ29weU9FTUluZiAic2V0dXBhcGk6OlNldHVwQ29weU9FTUluZih0LCB0LCBpLCBpLCBpLCBpLCAqaSwgdCkgaSIKKwlTeXN0ZW06OkdldCAnJHtzeXNTZXR1cENvcHlPRU1JbmZ9JworCVBvcCAkMAorCVN0ckNtcCAkMCAnZXJyb3InIG5vZHJpdmVyCisJTWVzc2FnZUJveCBNQl9ZRVNOT3xNQl9ERUZCVVRUT04yICQobXNnX2luc2xpYnVzYikgSUROTyBub2RyaXZlcgorCVN5c3RlbTo6Q2FsbCAnJHtzeXNTZXR1cENvcHlPRU1JbmZ9P2UgKCIkSU5TVERJUlxiaW5cYnJsdHR5LWxpYnVzYi0xLjAuaW5mIiwgIiRJTlNURElSXGJpbiIsIDEsIDAsIDAsIDAsIDAsIDApIC5yMCcKK25vZHJpdmVyOgorIW1hY3JvZW5kCisKKyFtYWNybyBCcmx0dHlVbmluc3RhbGwKKwkhaW5zZXJ0bWFjcm8gVW5pbnN0YWxsTGliIERMTCBOT1RTSEFSRUQgUkVCT09UX05PVFBST1RFQ1RFRCAiJFNZU0RJUlxXZGZDb0luc3RhbGxlcjAxMDA5LmRsbCIKKwkhaW5zZXJ0bWFjcm8gVW5pbnN0YWxsTGliIERMTCBOT1RTSEFSRUQgUkVCT09UX05PVFBST1RFQ1RFRCAiJFNZU0RJUlx3aW51c2Jjb2luc3RhbGxlcjIuZGxsIgorIW1hY3JvZW5kCisKKyFpbmNsdWRlIGJybHR0eS5uc2kKZGlmZiAtLWdpdCBhL1dpbmRvd3MvbGlidXNiLmluZiBiL1dpbmRvd3MvbGlidXNiLmluZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ODZhNTM1Ci0tLSAvZGV2L251bGwKKysrIGIvV2luZG93cy9saWJ1c2IuaW5mCkBAIC0wLDAgKzEsODcyIEBACitbU3RyaW5nc10KK1Byb3ZpZGVyTmFtZSAgPSAiQlJMVFRZIgorRHJpdmVyRGF0ZSAgICA9ICIxMi8yMS8yMDIxIgorRHJpdmVyVmVyc2lvbiA9ICI2LjQuMC4yMjgiCitDbGFzc05hbWUgICAgID0gIlVTQiBCcmFpbGxlIERldmljZXMiCitDbGFzc0dVSUQgICAgID0gInsxNzIwZmE4ZS1lZDE1LTQzNDYtYjczZC05MDllYjQxZTg5ZWZ9IgorCitbVmVyc2lvbl0KK1NpZ25hdHVyZSA9ICIkQ2hpY2FnbyQiCitwcm92aWRlciAgPSAlUHJvdmlkZXJOYW1lJQorRHJpdmVyVmVyID0gJURyaXZlckRhdGUlLCVEcml2ZXJWZXJzaW9uJQorQ2F0YWxvZ0ZpbGUgPSBicmx0dHkuY2F0CitDYXRhbG9nRmlsZS5OVCA9IGJybHR0eS5jYXQKK0NhdGFsb2dGaWxlLk5UYW1kNjQgPSBicmx0dHlfeDY0LmNhdAorCitDbGFzcyAgICAgPSAlQ2xhc3NOYW1lJQorQ2xhc3NHVUlEID0gJUNsYXNzR1VJRCUKKworW0NsYXNzSW5zdGFsbDMyXQorQWRkUmVnPWxpYnVzYl9jbGFzc19pbnN0YWxsX2FkZF9yZWcKKworW2xpYnVzYl9jbGFzc19pbnN0YWxsX2FkZF9yZWddCitIS1IsLCwsIkxpYlVTQi1XaW4zMiBEZXZpY2VzIgorSEtSLCxJY29uLCwiLTIwIgorCitbTWFudWZhY3R1cmVyXQorJVByb3ZpZGVyTmFtZSU9RGV2aWNlcyxOVHg4NixOVGFtZDY0CisKKzstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorOyBGaWxlcworOy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1tTb3VyY2VEaXNrc05hbWVzXQorMSA9ICJMaWJ1c2ItV2luMzIgRHJpdmVyIEluc3RhbGxhdGlvbiBEaXNrIiwsCisKK1tTb3VyY2VEaXNrc0ZpbGVzXQorbGlidXNiMC5zeXMgPSAxLCwKK2xpYnVzYjAuZGxsID0gMSwsCitsaWJ1c2IwX3g2NC5zeXMgPSAxLCwKK2xpYnVzYjBfeDY0LmRsbCA9IDEsLAorCitbRGVzdGluYXRpb25EaXJzXQorbGlidXNiX2ZpbGVzX3N5cyA9IDEwLHN5c3RlbTMyXGRyaXZlcnMKK2xpYnVzYl9maWxlc19zeXNfeDY0ID0gMTAsc3lzdGVtMzJcZHJpdmVycworbGlidXNiX2ZpbGVzX2RsbCA9IDEwLHN5c3RlbTMyCitsaWJ1c2JfZmlsZXNfZGxsX3dvdzY0ID0gMTAsc3lzd293NjQKK2xpYnVzYl9maWxlc19kbGxfeDY0ID0gMTAsc3lzdGVtMzIKKworW2xpYnVzYl9maWxlc19zeXNdCitsaWJ1c2IwLnN5cworCitbbGlidXNiX2ZpbGVzX3N5c194NjRdCitsaWJ1c2IwX3g2NC5zeXMKKworW2xpYnVzYl9maWxlc19kbGxdCitsaWJ1c2IwLmRsbAorCitbbGlidXNiX2ZpbGVzX2RsbF93b3c2NF0KK2xpYnVzYjAuZGxsCisKK1tsaWJ1c2JfZmlsZXNfZGxsX3g2NF0KK2xpYnVzYjBfeDY0LmRsbAorCis7LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKzsgRGV2aWNlIGRyaXZlcgorOy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1tMSUJVU0JfREVWLk5UXQorQ29weUZpbGVzID0gbGlidXNiX2ZpbGVzX3N5cywgbGlidXNiX2ZpbGVzX2RsbAorCitbTElCVVNCX0RFVi5OVGFtZDY0XQorQ29weUZpbGVzID0gbGlidXNiX2ZpbGVzX3N5c194NjQsIGxpYnVzYl9maWxlc19kbGxfd293NjQsIGxpYnVzYl9maWxlc19kbGxfeDY0CisKK1tMSUJVU0JfREVWLk5ULkhXXQorQWRkUmVnID0gbGlidXNiX2FkZF9yZWdfaHcKKworW0xJQlVTQl9ERVYuTlRhbWQ2NC5IV10KK0FkZFJlZyA9IGxpYnVzYl9hZGRfcmVnX2h3CisKK1tMSUJVU0JfREVWLk5ULlNlcnZpY2VzXQorQWRkU2VydmljZSA9IGxpYnVzYjAsIDB4MDAwMDAwMDIsIGxpYnVzYl9hZGRfc2VydmljZQorCitbTElCVVNCX0RFVi5OVGFtZDY0LlNlcnZpY2VzXQorQWRkU2VydmljZSA9IGxpYnVzYjAsIDB4MDAwMDAwMDIsIGxpYnVzYl9hZGRfc2VydmljZV9hbWQ2NAorCis7IERldmljZSBwcm9wZXJ0aWVzCitbbGlidXNiX2FkZF9yZWdfaHddCitIS1IsLFN1cnByaXNlUmVtb3ZhbE9LLCAweDAwMDEwMDAxLCAxCisKKzstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorOyBTZXJ2aWNlcworOy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1tsaWJ1c2JfYWRkX3NlcnZpY2VdCitEaXNwbGF5TmFtZSAgICA9ICJMaWJVc2ItV2luMzIgLSBLZXJuZWwgRHJpdmVyIDAzLzMxLzIwMDcsIDAuMS4xMi4xIgorU2VydmljZVR5cGUgICAgPSAxCitTdGFydFR5cGUgICAgICA9IDMKK0Vycm9yQ29udHJvbCAgID0gMAorU2VydmljZUJpbmFyeSAgPSAlMTIlXGxpYnVzYjAuc3lzCisKK1tsaWJ1c2JfYWRkX3NlcnZpY2VfYW1kNjRdCitEaXNwbGF5TmFtZSAgICA9ICJMaWJVc2ItV2luMzIgLSBLZXJuZWwgRHJpdmVyIDAzLzMxLzIwMDcsIDAuMS4xMi4xIgorU2VydmljZVR5cGUgICAgPSAxCitTdGFydFR5cGUgICAgICA9IDMKK0Vycm9yQ29udHJvbCAgID0gMAorU2VydmljZUJpbmFyeSAgPSAlMTIlXGxpYnVzYjBfeDY0LnN5cworCisKKzstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorOyBEZXZpY2VzCis7LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworW0RldmljZXMuTlR4ODZdCis7IEJFR0lOX1VTQl9CUkFJTExFX0RFVklDRVMgTGliVVNCLVdpbjMyIExJQlVTQl9ERVYKKworOyBEZXZpY2U6IDA0MDM6NjAwMQorOyBHZW5lcmljIElkZW50aWZpZXIKKzsgVmVuZG9yOiBGdXR1cmUgVGVjaG5vbG9neSBEZXZpY2VzIEludGVybmF0aW9uYWwsIEx0ZC4KKzsgUHJvZHVjdDogRlQyMzIgVVNCLVNlcmlhbCAoVUFSVCkgSUMKKyJMaWJVU0ItV2luMzI6IEFsYmF0cm9zcyBbYWxsIG1vZGVsc10sIENlYnJhIFthbGwgbW9kZWxzXSwgSElNUyBbU3luYyBCcmFpbGxlXSwgSGFuZHlUZWNoIFtGVERJIGNoaXBdLCBIZWRvIFtNb2JpbExpbmVdLCBNRFYgW2FsbCBtb2RlbHNdIj1MSUJVU0JfREVWLCBVU0JcVklEXzA0MDMmUElEXzYwMDEKKworOyBEZXZpY2U6IDA0MDM6NjAxMAorOyBHZW5lcmljIElkZW50aWZpZXIKKzsgVmVuZG9yOiBGdXR1cmUgVGVjaG5vbG9neSBEZXZpY2VzIEludGVybmF0aW9uYWwsIEx0ZAorOyBQcm9kdWN0OiBGVDIyMzJDL0QvSCBEdWFsIFVBUlQvRklGTyBJQworIkxpYlVTQi1XaW4zMjogRG90UGFkIFthbGwgbW9kZWxzXSI9TElCVVNCX0RFViwgVVNCXFZJRF8wNDAzJlBJRF82MDEwCisKKzsgRGV2aWNlOiAwNDAzOkRFNTgKKyJMaWJVU0ItV2luMzI6IEhlZG8gW01vYmlsTGluZV0iPUxJQlVTQl9ERVYsIFVTQlxWSURfMDQwMyZQSURfREU1OAorCis7IERldmljZTogMDQwMzpERTU5CisiTGliVVNCLVdpbjMyOiBIZWRvIFtQcm9maUxpbmVdIj1MSUJVU0JfREVWLCBVU0JcVklEXzA0MDMmUElEX0RFNTkKKworOyBEZXZpY2U6IDA0MDM6RjIwOAorIkxpYlVTQi1XaW4zMjogUGFwZW5tZWllciBbYWxsIG1vZGVsc10iPUxJQlVTQl9ERVYsIFVTQlxWSURfMDQwMyZQSURfRjIwOAorCis7IERldmljZTogMDQwMzpGRTcwCisiTGliVVNCLVdpbjMyOiBCYXVtIFtWYXJpbyA0MCAoNDAgY2VsbHMpXSI9TElCVVNCX0RFViwgVVNCXFZJRF8wNDAzJlBJRF9GRTcwCisKKzsgRGV2aWNlOiAwNDAzOkZFNzEKKyJMaWJVU0ItV2luMzI6IEJhdW0gW1BvY2tldFZhcmlvICgyNCBjZWxscyldIj1MSUJVU0JfREVWLCBVU0JcVklEXzA0MDMmUElEX0ZFNzEKKworOyBEZXZpY2U6IDA0MDM6RkU3MgorIkxpYlVTQi1XaW4zMjogQmF1bSBbU3VwZXJWYXJpbyA0MCAoNDAgY2VsbHMpXSI9TElCVVNCX0RFViwgVVNCXFZJRF8wNDAzJlBJRF9GRTcyCisKKzsgRGV2aWNlOiAwNDAzOkZFNzMKKyJMaWJVU0ItV2luMzI6IEJhdW0gW1N1cGVyVmFyaW8gMzIgKDMyIGNlbGxzKV0iPUxJQlVTQl9ERVYsIFVTQlxWSURfMDQwMyZQSURfRkU3MworCis7IERldmljZTogMDQwMzpGRTc0CisiTGliVVNCLVdpbjMyOiBCYXVtIFtTdXBlclZhcmlvIDY0ICg2NCBjZWxscyldIj1MSUJVU0JfREVWLCBVU0JcVklEXzA0MDMmUElEX0ZFNzQKKworOyBEZXZpY2U6IDA0MDM6RkU3NQorIkxpYlVTQi1XaW4zMjogQmF1bSBbU3VwZXJWYXJpbyA4MCAoODAgY2VsbHMpXSI9TElCVVNCX0RFViwgVVNCXFZJRF8wNDAzJlBJRF9GRTc1CisKKzsgRGV2aWNlOiAwNDAzOkZFNzYKKyJMaWJVU0ItV2luMzI6IEJhdW0gW1ZhcmlvUHJvIDgwICg4MCBjZWxscyldIj1MSUJVU0JfREVWLCBVU0JcVklEXzA0MDMmUElEX0ZFNzYKKworOyBEZXZpY2U6IDA0MDM6RkU3NworIkxpYlVTQi1XaW4zMjogQmF1bSBbVmFyaW9Qcm8gNjQgKDY0IGNlbGxzKV0iPUxJQlVTQl9ERVYsIFVTQlxWSURfMDQwMyZQSURfRkU3NworCis7IERldmljZTogMDQ1MjowMTAwCisiTGliVVNCLVdpbjMyOiBNZXRlYyBbYWxsIG1vZGVsc10iPUxJQlVTQl9ERVYsIFVTQlxWSURfMDQ1MiZQSURfMDEwMAorCis7IERldmljZTogMDQ1RTo5MzBBCisiTGliVVNCLVdpbjMyOiBISU1TIFtCcmFpbGxlIFNlbnNlIChVU0IgMS4xKV0sIEhJTVMgW0JyYWlsbGUgU2Vuc2UgKFVTQiAyLjApXSwgSElNUyBbQnJhaWxsZSBTZW5zZSBVMiAoVVNCIDIuMCldIj1MSUJVU0JfREVWLCBVU0JcVklEXzA0NUUmUElEXzkzMEEKKworOyBEZXZpY2U6IDA0NUU6OTMwQgorIkxpYlVTQi1XaW4zMjogSElNUyBbQnJhaWxsZSBFZGdlIGFuZCBRQnJhaWxsZVhMXSI9TElCVVNCX0RFViwgVVNCXFZJRF8wNDVFJlBJRF85MzBCCisKKzsgRGV2aWNlOiAwNDgzOkExRDMKKyJMaWJVU0ItV2luMzI6IEJhdW0gW09yYml0IFJlYWRlciAyMCAoMjAgY2VsbHMpXSI9TElCVVNCX0RFViwgVVNCXFZJRF8wNDgzJlBJRF9BMUQzCisKKzsgRGV2aWNlOiAwNDgzOkEzNjYKKyJMaWJVU0ItV2luMzI6IEJhdW0gW09yYml0IFJlYWRlciA0MCAoNDAgY2VsbHMpXSI9TElCVVNCX0RFViwgVVNCXFZJRF8wNDgzJlBJRF9BMzY2CisKKzsgRGV2aWNlOiAwNkIwOjAwMDEKKyJMaWJVU0ItV2luMzI6IEFsdmEgW1NhdGVsbGl0ZSAoNW5uKV0iPUxJQlVTQl9ERVYsIFVTQlxWSURfMDZCMCZQSURfMDAwMQorCis7IERldmljZTogMDc5ODowMDAxCisiTGliVVNCLVdpbjMyOiBWb3lhZ2VyIFthbGwgbW9kZWxzXSI9TElCVVNCX0RFViwgVVNCXFZJRF8wNzk4JlBJRF8wMDAxCisKKzsgRGV2aWNlOiAwNzk4OjA2MDAKKyJMaWJVU0ItV2luMzI6IEFsdmEgW1ZveWFnZXIgUHJvdG9jb2wgQ29udmVydGVyXSI9TElCVVNCX0RFViwgVVNCXFZJRF8wNzk4JlBJRF8wNjAwCisKKzsgRGV2aWNlOiAwNzk4OjA2MjQKKyJMaWJVU0ItV2luMzI6IEFsdmEgW0JDNjI0XSI9TElCVVNCX0RFViwgVVNCXFZJRF8wNzk4JlBJRF8wNjI0CisKKzsgRGV2aWNlOiAwNzk4OjA2NDAKKyJMaWJVU0ItV2luMzI6IEFsdmEgW0JDNjQwXSI9TElCVVNCX0RFViwgVVNCXFZJRF8wNzk4JlBJRF8wNjQwCisKKzsgRGV2aWNlOiAwNzk4OjA2ODAKKyJMaWJVU0ItV2luMzI6IEFsdmEgW0JDNjgwXSI9TElCVVNCX0RFViwgVVNCXFZJRF8wNzk4JlBJRF8wNjgwCisKKzsgRGV2aWNlOiAwOTA0OjEwMTYKKyJMaWJVU0ItV2luMzI6IEZyYW5rQXVkaW9kYXRhIFtCMks4NCAoYmVmb3JlIGZpcm13YXJlIGluc3RhbGxhdGlvbildIj1MSUJVU0JfREVWLCBVU0JcVklEXzA5MDQmUElEXzEwMTYKKworOyBEZXZpY2U6IDA5MDQ6MTAxNworIkxpYlVTQi1XaW4zMjogRnJhbmtBdWRpb2RhdGEgW0IySzg0IChhZnRlciBmaXJtd2FyZSBpbnN0YWxsYXRpb24pXSI9TElCVVNCX0RFViwgVVNCXFZJRF8wOTA0JlBJRF8xMDE3CisKKzsgRGV2aWNlOiAwOTA0OjIwMDAKKyJMaWJVU0ItV2luMzI6IEJhdW0gW1ZhcmlvUHJvIDQwICg0MCBjZWxscyldIj1MSUJVU0JfREVWLCBVU0JcVklEXzA5MDQmUElEXzIwMDAKKworOyBEZXZpY2U6IDA5MDQ6MjAwMQorIkxpYlVTQi1XaW4zMjogQmF1bSBbRWNvVmFyaW8gMjQgKDI0IGNlbGxzKV0iPUxJQlVTQl9ERVYsIFVTQlxWSURfMDkwNCZQSURfMjAwMQorCis7IERldmljZTogMDkwNDoyMDAyCisiTGliVVNCLVdpbjMyOiBCYXVtIFtFY29WYXJpbyA0MCAoNDAgY2VsbHMpXSI9TElCVVNCX0RFViwgVVNCXFZJRF8wOTA0JlBJRF8yMDAyCisKKzsgRGV2aWNlOiAwOTA0OjIwMDcKKyJMaWJVU0ItV2luMzI6IEJhdW0gW1ZhcmlvQ29ubmVjdCA0MCAoNDAgY2VsbHMpXSI9TElCVVNCX0RFViwgVVNCXFZJRF8wOTA0JlBJRF8yMDA3CisKKzsgRGV2aWNlOiAwOTA0OjIwMDgKKyJMaWJVU0ItV2luMzI6IEJhdW0gW1ZhcmlvQ29ubmVjdCAzMiAoMzIgY2VsbHMpXSI9TElCVVNCX0RFViwgVVNCXFZJRF8wOTA0JlBJRF8yMDA4CisKKzsgRGV2aWNlOiAwOTA0OjIwMDkKKyJMaWJVU0ItV2luMzI6IEJhdW0gW1ZhcmlvQ29ubmVjdCAyNCAoMjQgY2VsbHMpXSI9TElCVVNCX0RFViwgVVNCXFZJRF8wOTA0JlBJRF8yMDA5CisKKzsgRGV2aWNlOiAwOTA0OjIwMTAKKyJMaWJVU0ItV2luMzI6IEJhdW0gW1ZhcmlvQ29ubmVjdCA2NCAoNjQgY2VsbHMpXSI9TElCVVNCX0RFViwgVVNCXFZJRF8wOTA0JlBJRF8yMDEwCisKKzsgRGV2aWNlOiAwOTA0OjIwMTEKKyJMaWJVU0ItV2luMzI6IEJhdW0gW1ZhcmlvQ29ubmVjdCA4MCAoODAgY2VsbHMpXSI9TElCVVNCX0RFViwgVVNCXFZJRF8wOTA0JlBJRF8yMDExCisKKzsgRGV2aWNlOiAwOTA0OjIwMTQKKyJMaWJVU0ItV2luMzI6IEJhdW0gW0Vjb1ZhcmlvIDMyICgzMiBjZWxscyldIj1MSUJVU0JfREVWLCBVU0JcVklEXzA5MDQmUElEXzIwMTQKKworOyBEZXZpY2U6IDA5MDQ6MjAxNQorIkxpYlVTQi1XaW4zMjogQmF1bSBbRWNvVmFyaW8gNjQgKDY0IGNlbGxzKV0iPUxJQlVTQl9ERVYsIFVTQlxWSURfMDkwNCZQSURfMjAxNQorCis7IERldmljZTogMDkwNDoyMDE2CisiTGliVVNCLVdpbjMyOiBCYXVtIFtFY29WYXJpbyA4MCAoODAgY2VsbHMpXSI9TElCVVNCX0RFViwgVVNCXFZJRF8wOTA0JlBJRF8yMDE2CisKKzsgRGV2aWNlOiAwOTA0OjMwMDAKKyJMaWJVU0ItV2luMzI6IEJhdW0gW1JlZnJlc2hhYnJhaWxsZSAxOCAoMTggY2VsbHMpXSI9TElCVVNCX0RFViwgVVNCXFZJRF8wOTA0JlBJRF8zMDAwCisKKzsgRGV2aWNlOiAwOTA0OjMwMDEKKyJMaWJVU0ItV2luMzI6IEJhdW0gW09yYml0IGluIFJlZnJlc2hhYnJhaWxsZSBFbXVsYXRpb24gTW9kZSAoMTggY2VsbHMpXSwgQmF1bSBbUmVmcmVzaGFicmFpbGxlIDE4ICgxOCBjZWxscyldIj1MSUJVU0JfREVWLCBVU0JcVklEXzA5MDQmUElEXzMwMDEKKworOyBEZXZpY2U6IDA5MDQ6NDAwNAorIkxpYlVTQi1XaW4zMjogQmF1bSBbUHJvbnRvISBWMyAxOCAoMTggY2VsbHMpXSI9TElCVVNCX0RFViwgVVNCXFZJRF8wOTA0JlBJRF80MDA0CisKKzsgRGV2aWNlOiAwOTA0OjQwMDUKKyJMaWJVU0ItV2luMzI6IEJhdW0gW1Byb250byEgVjMgNDAgKDQwIGNlbGxzKV0iPUxJQlVTQl9ERVYsIFVTQlxWSURfMDkwNCZQSURfNDAwNQorCis7IERldmljZTogMDkwNDo0MDA3CisiTGliVVNCLVdpbjMyOiBCYXVtIFtQcm9udG8hIFY0IDE4ICgxOCBjZWxscyldIj1MSUJVU0JfREVWLCBVU0JcVklEXzA5MDQmUElEXzQwMDcKKworOyBEZXZpY2U6IDA5MDQ6NDAwOAorIkxpYlVTQi1XaW4zMjogQmF1bSBbUHJvbnRvISBWNCA0MCAoNDAgY2VsbHMpXSI9TElCVVNCX0RFViwgVVNCXFZJRF8wOTA0JlBJRF80MDA4CisKKzsgRGV2aWNlOiAwOTA0OjYwMDEKKyJMaWJVU0ItV2luMzI6IEJhdW0gW1N1cGVyVmFyaW8yIDQwICg0MCBjZWxscyldIj1MSUJVU0JfREVWLCBVU0JcVklEXzA5MDQmUElEXzYwMDEKKworOyBEZXZpY2U6IDA5MDQ6NjAwMgorIkxpYlVTQi1XaW4zMjogQmF1bSBbUG9ja2V0VmFyaW8yICgyNCBjZWxscyldIj1MSUJVU0JfREVWLCBVU0JcVklEXzA5MDQmUElEXzYwMDIKKworOyBEZXZpY2U6IDA5MDQ6NjAwMworIkxpYlVTQi1XaW4zMjogQmF1bSBbU3VwZXJWYXJpbzIgMzIgKDMyIGNlbGxzKV0iPUxJQlVTQl9ERVYsIFVTQlxWSURfMDkwNCZQSURfNjAwMworCis7IERldmljZTogMDkwNDo2MDA0CisiTGliVVNCLVdpbjMyOiBCYXVtIFtTdXBlclZhcmlvMiA2NCAoNjQgY2VsbHMpXSI9TElCVVNCX0RFViwgVVNCXFZJRF8wOTA0JlBJRF82MDA0CisKKzsgRGV2aWNlOiAwOTA0OjYwMDUKKyJMaWJVU0ItV2luMzI6IEJhdW0gW1N1cGVyVmFyaW8yIDgwICg4MCBjZWxscyldIj1MSUJVU0JfREVWLCBVU0JcVklEXzA5MDQmUElEXzYwMDUKKworOyBEZXZpY2U6IDA5MDQ6NjAwNgorIkxpYlVTQi1XaW4zMjogQmF1bSBbQnJhaWxsaWFudDIgNDAgKDQwIGNlbGxzKV0iPUxJQlVTQl9ERVYsIFVTQlxWSURfMDkwNCZQSURfNjAwNgorCis7IERldmljZTogMDkwNDo2MDA3CisiTGliVVNCLVdpbjMyOiBCYXVtIFtCcmFpbGxpYW50MiAyNCAoMjQgY2VsbHMpXSI9TElCVVNCX0RFViwgVVNCXFZJRF8wOTA0JlBJRF82MDA3CisKKzsgRGV2aWNlOiAwOTA0OjYwMDgKKyJMaWJVU0ItV2luMzI6IEJhdW0gW0JyYWlsbGlhbnQyIDMyICgzMiBjZWxscyldIj1MSUJVU0JfREVWLCBVU0JcVklEXzA5MDQmUElEXzYwMDgKKworOyBEZXZpY2U6IDA5MDQ6NjAwOQorIkxpYlVTQi1XaW4zMjogQmF1bSBbQnJhaWxsaWFudDIgNjQgKDY0IGNlbGxzKV0iPUxJQlVTQl9ERVYsIFVTQlxWSURfMDkwNCZQSURfNjAwOQorCis7IERldmljZTogMDkwNDo2MDBBCisiTGliVVNCLVdpbjMyOiBCYXVtIFtCcmFpbGxpYW50MiA4MCAoODAgY2VsbHMpXSI9TElCVVNCX0RFViwgVVNCXFZJRF8wOTA0JlBJRF82MDBBCisKKzsgRGV2aWNlOiAwOTA0OjYwMTEKKyJMaWJVU0ItV2luMzI6IEJhdW0gW1ZhcmlvQ29ubmVjdCAyNCAoMjQgY2VsbHMpXSI9TElCVVNCX0RFViwgVVNCXFZJRF8wOTA0JlBJRF82MDExCisKKzsgRGV2aWNlOiAwOTA0OjYwMTIKKyJMaWJVU0ItV2luMzI6IEJhdW0gW1ZhcmlvQ29ubmVjdCAzMiAoMzIgY2VsbHMpXSI9TElCVVNCX0RFViwgVVNCXFZJRF8wOTA0JlBJRF82MDEyCisKKzsgRGV2aWNlOiAwOTA0OjYwMTMKKyJMaWJVU0ItV2luMzI6IEJhdW0gW1ZhcmlvQ29ubmVjdCA0MCAoNDAgY2VsbHMpXSI9TElCVVNCX0RFViwgVVNCXFZJRF8wOTA0JlBJRF82MDEzCisKKzsgRGV2aWNlOiAwOTA0OjYxMDEKKyJMaWJVU0ItV2luMzI6IEJhdW0gW1ZhcmlvVWx0cmEgMjAgKDIwIGNlbGxzKV0iPUxJQlVTQl9ERVYsIFVTQlxWSURfMDkwNCZQSURfNjEwMQorCis7IERldmljZTogMDkwNDo2MTAyCisiTGliVVNCLVdpbjMyOiBCYXVtIFtWYXJpb1VsdHJhIDQwICg0MCBjZWxscyldIj1MSUJVU0JfREVWLCBVU0JcVklEXzA5MDQmUElEXzYxMDIKKworOyBEZXZpY2U6IDA5MDQ6NjEwMworIkxpYlVTQi1XaW4zMjogQmF1bSBbVmFyaW9VbHRyYSAzMiAoMzIgY2VsbHMpXSI9TElCVVNCX0RFViwgVVNCXFZJRF8wOTA0JlBJRF82MTAzCisKKzsgRGV2aWNlOiAwOTIxOjEyMDAKKyJMaWJVU0ItV2luMzI6IEhhbmR5VGVjaCBbR29IdWJzIGNoaXBdIj1MSUJVU0JfREVWLCBVU0JcVklEXzA5MjEmUElEXzEyMDAKKworOyBEZXZpY2U6IDBGNEU6MDEwMAorIkxpYlVTQi1XaW4zMjogRnJlZWRvbVNjaWVudGlmaWMgW0ZvY3VzIDFdIj1MSUJVU0JfREVWLCBVU0JcVklEXzBGNEUmUElEXzAxMDAKKworOyBEZXZpY2U6IDBGNEU6MDExMQorIkxpYlVTQi1XaW4zMjogRnJlZWRvbVNjaWVudGlmaWMgW1BBQyBNYXRlXSI9TElCVVNCX0RFViwgVVNCXFZJRF8wRjRFJlBJRF8wMTExCisKKzsgRGV2aWNlOiAwRjRFOjAxMTIKKyJMaWJVU0ItV2luMzI6IEZyZWVkb21TY2llbnRpZmljIFtGb2N1cyAyXSI9TElCVVNCX0RFViwgVVNCXFZJRF8wRjRFJlBJRF8wMTEyCisKKzsgRGV2aWNlOiAwRjRFOjAxMTQKKyJMaWJVU0ItV2luMzI6IEZyZWVkb21TY2llbnRpZmljIFtGb2N1cyAzK10iPUxJQlVTQl9ERVYsIFVTQlxWSURfMEY0RSZQSURfMDExNAorCis7IERldmljZTogMTBDNDpFQTYwCis7IEdlbmVyaWMgSWRlbnRpZmllcgorOyBWZW5kb3I6IEN5Z25hbCBJbnRlZ3JhdGVkIFByb2R1Y3RzLCBJbmMuCis7IFByb2R1Y3Q6IENQMjEweCBVQVJUIEJyaWRnZSAvIG15QVZSIG15U21hcnRVU0IgbGlnaHQKKyJMaWJVU0ItV2luMzI6IEJyYWlsbGVNZW1vIFtQb2NrZXRdLCBTZWlrYSBbQnJhaWxsZSBEaXNwbGF5XSI9TElCVVNCX0RFViwgVVNCXFZJRF8xMEM0JlBJRF9FQTYwCisKKzsgRGV2aWNlOiAxMEM0OkVBODAKKzsgR2VuZXJpYyBJZGVudGlmaWVyCis7IFZlbmRvcjogQ3lnbmFsIEludGVncmF0ZWQgUHJvZHVjdHMsIEluYy4KKzsgUHJvZHVjdDogQ1AyMTB4IFVBUlQgQnJpZGdlCisiTGliVVNCLVdpbjMyOiBTZWlrYSBbTm90ZSBUYWtlcl0iPUxJQlVTQl9ERVYsIFVTQlxWSURfMTBDNCZQSURfRUE4MAorCis7IERldmljZTogMTE0ODowMzAxCisiTGliVVNCLVdpbjMyOiBCcmFpbGxlTWVtbyBbU21hcnRdIj1MSUJVU0JfREVWLCBVU0JcVklEXzExNDgmUElEXzAzMDEKKworOyBEZXZpY2U6IDEyMDk6QUJDMAorIkxpYlVTQi1XaW4zMjogSW5jZXB0b3IgW2FsbCBtb2RlbHNdIj1MSUJVU0JfREVWLCBVU0JcVklEXzEyMDkmUElEX0FCQzAKKworOyBEZXZpY2U6IDE2QzA6MDVFMQorIkxpYlVTQi1XaW4zMjogQ2FudXRlIFthbGwgbW9kZWxzXSI9TElCVVNCX0RFViwgVVNCXFZJRF8xNkMwJlBJRF8wNUUxCisKKzsgRGV2aWNlOiAxQTg2Ojc1MjMKKzsgR2VuZXJpYyBJZGVudGlmaWVyCis7IFZlbmRvcjogSmlhbmdzdSBRaW5IZW5nLCBMdGQuCis7IFByb2R1Y3Q6IENIMzQxIFVTQiBCcmlkZ2UgQ29udHJvbGxlcgorIkxpYlVTQi1XaW4zMjogQmF1bSBbTkxTIGVSZWFkZXIgWm9vbWF4ICgyMCBjZWxscyldIj1MSUJVU0JfREVWLCBVU0JcVklEXzFBODYmUElEXzc1MjMKKworOyBEZXZpY2U6IDFDNzE6QzAwNAorIkxpYlVTQi1XaW4zMjogQnJhaWxsZU5vdGUgW0h1bWFuV2FyZSBBUEVYXSI9TElCVVNCX0RFViwgVVNCXFZJRF8xQzcxJlBJRF9DMDA0CisKKzsgRGV2aWNlOiAxQzcxOkMwMDUKKyJMaWJVU0ItV2luMzI6IEh1bWFuV2FyZSBbQnJhaWxsaWFudCBCSSAzMi80MCwgQnJhaWxsaWFudCBCIDgwIChzZXJpYWwgcHJvdG9jb2wpXSI9TElCVVNCX0RFViwgVVNCXFZJRF8xQzcxJlBJRF9DMDA1CisKKzsgRGV2aWNlOiAxQzcxOkMwMDYKKyJMaWJVU0ItV2luMzI6IEh1bWFuV2FyZSBbbm9uLVRvdWNoIG1vZGVscyAoSElEIHByb3RvY29sKV0iPUxJQlVTQl9ERVYsIFVTQlxWSURfMUM3MSZQSURfQzAwNgorCis7IERldmljZTogMUM3MTpDMDBBCisiTGliVVNCLVdpbjMyOiBIdW1hbldhcmUgW0JyYWlsbGVOb3RlIFRvdWNoIChISUQgcHJvdG9jb2wpXSI9TElCVVNCX0RFViwgVVNCXFZJRF8xQzcxJlBJRF9DMDBBCisKKzsgRGV2aWNlOiAxQzcxOkMwMjEKKyJMaWJVU0ItV2luMzI6IEh1bWFuV2FyZSBbQnJhaWxsaWFudCBCSSAxNCAoc2VyaWFsIHByb3RvY29sKV0iPUxJQlVTQl9ERVYsIFVTQlxWSURfMUM3MSZQSURfQzAyMQorCis7IERldmljZTogMUM3MTpDMTAxCisiTGliVVNCLVdpbjMyOiBIdW1hbldhcmUgW0FQSCBDaGFtZWxlb24gMjAgKEhJRCBwcm90b2NvbCwgZmlybXdhcmUgMS4wKV0sIEh1bWFuV2FyZSBbQVBIIENoYW1lbGVvbiAyMCAoSElEIHByb3RvY29sLCBmaXJtd2FyZSAxLjEpXSI9TElCVVNCX0RFViwgVVNCXFZJRF8xQzcxJlBJRF9DMTAxCisKKzsgRGV2aWNlOiAxQzcxOkMxMDQKKyJMaWJVU0ItV2luMzI6IEh1bWFuV2FyZSBbQVBIIENoYW1lbGVvbiAyMCAoc2VyaWFsIHByb3RvY29sKV0iPUxJQlVTQl9ERVYsIFVTQlxWSURfMUM3MSZQSURfQzEwNAorCis7IERldmljZTogMUM3MTpDMTExCisiTGliVVNCLVdpbjMyOiBIdW1hbldhcmUgW0FQSCBNYW50aXMgUTQwIChISUQgcHJvdG9jb2wsIGZpcm13YXJlIDEuMCldLCBIdW1hbldhcmUgW0FQSCBNYW50aXMgUTQwIChISUQgcHJvdG9jb2wsIGZpcm13YXJlIDEuMSldIj1MSUJVU0JfREVWLCBVU0JcVklEXzFDNzEmUElEX0MxMTEKKworOyBEZXZpY2U6IDFDNzE6QzExNAorIkxpYlVTQi1XaW4zMjogSHVtYW5XYXJlIFtBUEggTWFudGlzIFE0MCAoc2VyaWFsIHByb3RvY29sKV0iPUxJQlVTQl9ERVYsIFVTQlxWSURfMUM3MSZQSURfQzExNAorCis7IERldmljZTogMUM3MTpDMTIxCisiTGliVVNCLVdpbjMyOiBIdW1hbldhcmUgW0h1bWFud2FyZSBCcmFpbGxlT25lIChISUQgcHJvdG9jb2wsIGZpcm13YXJlIDEuMCldLCBIdW1hbldhcmUgW0h1bWFud2FyZSBCcmFpbGxlT25lIChISUQgcHJvdG9jb2wsIGZpcm13YXJlIDEuMSldIj1MSUJVU0JfREVWLCBVU0JcVklEXzFDNzEmUElEX0MxMjEKKworOyBEZXZpY2U6IDFDNzE6QzEyNAorIkxpYlVTQi1XaW4zMjogSHVtYW5XYXJlIFtIdW1hbndhcmUgQnJhaWxsZU9uZSAoc2VyaWFsIHByb3RvY29sKV0iPUxJQlVTQl9ERVYsIFVTQlxWSURfMUM3MSZQSURfQzEyNAorCis7IERldmljZTogMUM3MTpDMTMxCisiTGliVVNCLVdpbjMyOiBIdW1hbldhcmUgW0h1bWFud2FyZSBCcmFpbGxpYW50IEJJIDQwWCAoSElEIHByb3RvY29sLCBmaXJtd2FyZSAxLjApXSwgSHVtYW5XYXJlIFtIdW1hbndhcmUgQnJhaWxsaWFudCBCSSA0MFggKEhJRCBwcm90b2NvbCwgZmlybXdhcmUgMS4xKV0iPUxJQlVTQl9ERVYsIFVTQlxWSURfMUM3MSZQSURfQzEzMQorCis7IERldmljZTogMUM3MTpDMTQxCisiTGliVVNCLVdpbjMyOiBIdW1hbldhcmUgW0h1bWFud2FyZSBCcmFpbGxpYW50IEJJIDIwWCAoSElEIHByb3RvY29sLCBmaXJtd2FyZSAxLjApXSwgSHVtYW5XYXJlIFtIdW1hbndhcmUgQnJhaWxsaWFudCBCSSAyMFggKEhJRCBwcm90b2NvbCwgZmlybXdhcmUgMS4xKV0iPUxJQlVTQl9ERVYsIFVTQlxWSURfMUM3MSZQSURfQzE0MQorCis7IERldmljZTogMUM3MTpDRTAxCisiTGliVVNCLVdpbjMyOiBIdW1hbldhcmUgW05MUyBlUmVhZGVyIChISUQgcHJvdG9jb2wsIGZpcm13YXJlIDEuMCldLCBIdW1hbldhcmUgW05MUyBlUmVhZGVyIChISUQgcHJvdG9jb2wsIGZpcm13YXJlIDEuMSldIj1MSUJVU0JfREVWLCBVU0JcVklEXzFDNzEmUElEX0NFMDEKKworOyBEZXZpY2U6IDFDNzE6Q0UwNAorIkxpYlVTQi1XaW4zMjogSHVtYW5XYXJlIFtOTFMgZVJlYWRlciAoc2VyaWFsIHByb3RvY29sKV0iPUxJQlVTQl9ERVYsIFVTQlxWSURfMUM3MSZQSURfQ0UwNAorCis7IERldmljZTogMUZFNDowMDAzCisiTGliVVNCLVdpbjMyOiBIYW5keVRlY2ggW1VTQi1ISUQgYWRhcHRlcl0iPUxJQlVTQl9ERVYsIFVTQlxWSURfMUZFNCZQSURfMDAwMworCis7IERldmljZTogMUZFNDowMDQ0CisiTGliVVNCLVdpbjMyOiBIYW5keVRlY2ggW0Vhc3kgQnJhaWxsZSAoSElEKV0iPUxJQlVTQl9ERVYsIFVTQlxWSURfMUZFNCZQSURfMDA0NAorCis7IERldmljZTogMUZFNDowMDU0CisiTGliVVNCLVdpbjMyOiBIYW5keVRlY2ggW0FjdGl2ZSBCcmFpbGxlXSI9TElCVVNCX0RFViwgVVNCXFZJRF8xRkU0JlBJRF8wMDU0CisKKzsgRGV2aWNlOiAxRkU0OjAwNTUKKyJMaWJVU0ItV2luMzI6IEhhbmR5VGVjaCBbQ29ubmVjdCBCcmFpbGxlIDQwXSI9TElCVVNCX0RFViwgVVNCXFZJRF8xRkU0JlBJRF8wMDU1CisKKzsgRGV2aWNlOiAxRkU0OjAwNjEKKyJMaWJVU0ItV2luMzI6IEhhbmR5VGVjaCBbQWN0aWxpbm9dIj1MSUJVU0JfREVWLCBVU0JcVklEXzFGRTQmUElEXzAwNjEKKworOyBEZXZpY2U6IDFGRTQ6MDA2NAorIkxpYlVTQi1XaW4zMjogSGFuZHlUZWNoIFtBY3RpdmUgU3RhciA0MF0iPUxJQlVTQl9ERVYsIFVTQlxWSURfMUZFNCZQSURfMDA2NAorCis7IERldmljZTogMUZFNDowMDc0CisiTGliVVNCLVdpbjMyOiBIYW5keVRlY2ggW0JyYWlsbGUgU3RhciA0MCAoSElEKV0iPUxJQlVTQl9ERVYsIFVTQlxWSURfMUZFNCZQSURfMDA3NAorCis7IERldmljZTogMUZFNDowMDgxCisiTGliVVNCLVdpbjMyOiBIYW5keVRlY2ggW0Jhc2ljIEJyYWlsbGUgMTZdIj1MSUJVU0JfREVWLCBVU0JcVklEXzFGRTQmUElEXzAwODEKKworOyBEZXZpY2U6IDFGRTQ6MDA4MgorIkxpYlVTQi1XaW4zMjogSGFuZHlUZWNoIFtCYXNpYyBCcmFpbGxlIDIwXSI9TElCVVNCX0RFViwgVVNCXFZJRF8xRkU0JlBJRF8wMDgyCisKKzsgRGV2aWNlOiAxRkU0OjAwODMKKyJMaWJVU0ItV2luMzI6IEhhbmR5VGVjaCBbQmFzaWMgQnJhaWxsZSAzMl0iPUxJQlVTQl9ERVYsIFVTQlxWSURfMUZFNCZQSURfMDA4MworCis7IERldmljZTogMUZFNDowMDg0CisiTGliVVNCLVdpbjMyOiBIYW5keVRlY2ggW0Jhc2ljIEJyYWlsbGUgNDBdIj1MSUJVU0JfREVWLCBVU0JcVklEXzFGRTQmUElEXzAwODQKKworOyBEZXZpY2U6IDFGRTQ6MDA4NgorIkxpYlVTQi1XaW4zMjogSGFuZHlUZWNoIFtCYXNpYyBCcmFpbGxlIDY0XSI9TElCVVNCX0RFViwgVVNCXFZJRF8xRkU0JlBJRF8wMDg2CisKKzsgRGV2aWNlOiAxRkU0OjAwODcKKyJMaWJVU0ItV2luMzI6IEhhbmR5VGVjaCBbQmFzaWMgQnJhaWxsZSA4MF0iPUxJQlVTQl9ERVYsIFVTQlxWSURfMUZFNCZQSURfMDA4NworCis7IERldmljZTogMUZFNDowMDhBCisiTGliVVNCLVdpbjMyOiBIYW5keVRlY2ggW0Jhc2ljIEJyYWlsbGUgNDhdIj1MSUJVU0JfREVWLCBVU0JcVklEXzFGRTQmUElEXzAwOEEKKworOyBEZXZpY2U6IDFGRTQ6MDA4QgorIkxpYlVTQi1XaW4zMjogSGFuZHlUZWNoIFtCYXNpYyBCcmFpbGxlIDE2MF0iPUxJQlVTQl9ERVYsIFVTQlxWSURfMUZFNCZQSURfMDA4QgorCis7IERldmljZTogMUZFNDowMEE0CisiTGliVVNCLVdpbjMyOiBIYW5keVRlY2ggW0FjdGl2YXRvcl0iPUxJQlVTQl9ERVYsIFVTQlxWSURfMUZFNCZQSURfMDBBNAorCis7IERldmljZTogNDI0MjowMDAxCisiTGliVVNCLVdpbjMyOiBQZWdhc3VzIFthbGwgbW9kZWxzXSI9TElCVVNCX0RFViwgVVNCXFZJRF80MjQyJlBJRF8wMDAxCisKKzsgRGV2aWNlOiBDMjUxOjExMjIKKyJMaWJVU0ItV2luMzI6IEV1cm9CcmFpbGxlIFtFc3lzICh2ZXJzaW9uIDwgMy4wLCBubyBTRCBjYXJkKV0iPUxJQlVTQl9ERVYsIFVTQlxWSURfQzI1MSZQSURfMTEyMgorCis7IERldmljZTogQzI1MToxMTIzCisiTGliVVNCLVdpbjMyOiBFdXJvQnJhaWxsZSBbcmVzZXJ2ZWRdIj1MSUJVU0JfREVWLCBVU0JcVklEX0MyNTEmUElEXzExMjMKKworOyBEZXZpY2U6IEMyNTE6MTEyNAorIkxpYlVTQi1XaW4zMjogRXVyb0JyYWlsbGUgW0VzeXMgKHZlcnNpb24gPCAzLjAsIHdpdGggU0QgY2FyZCldIj1MSUJVU0JfREVWLCBVU0JcVklEX0MyNTEmUElEXzExMjQKKworOyBEZXZpY2U6IEMyNTE6MTEyNQorIkxpYlVTQi1XaW4zMjogRXVyb0JyYWlsbGUgW3Jlc2VydmVkXSI9TElCVVNCX0RFViwgVVNCXFZJRF9DMjUxJlBJRF8xMTI1CisKKzsgRGV2aWNlOiBDMjUxOjExMjYKKyJMaWJVU0ItV2luMzI6IEV1cm9CcmFpbGxlIFtFc3lzICh2ZXJzaW9uID49IDMuMCwgbm8gU0QgY2FyZCldIj1MSUJVU0JfREVWLCBVU0JcVklEX0MyNTEmUElEXzExMjYKKworOyBEZXZpY2U6IEMyNTE6MTEyNworIkxpYlVTQi1XaW4zMjogRXVyb0JyYWlsbGUgW3Jlc2VydmVkXSI9TElCVVNCX0RFViwgVVNCXFZJRF9DMjUxJlBJRF8xMTI3CisKKzsgRGV2aWNlOiBDMjUxOjExMjgKKyJMaWJVU0ItV2luMzI6IEV1cm9CcmFpbGxlIFtFc3lzICh2ZXJzaW9uID49IDMuMCwgd2l0aCBTRCBjYXJkKV0iPUxJQlVTQl9ERVYsIFVTQlxWSURfQzI1MSZQSURfMTEyOAorCis7IERldmljZTogQzI1MToxMTI5CisiTGliVVNCLVdpbjMyOiBFdXJvQnJhaWxsZSBbcmVzZXJ2ZWRdIj1MSUJVU0JfREVWLCBVU0JcVklEX0MyNTEmUElEXzExMjkKKworOyBEZXZpY2U6IEMyNTE6MTEyQQorIkxpYlVTQi1XaW4zMjogRXVyb0JyYWlsbGUgW3Jlc2VydmVkXSI9TElCVVNCX0RFViwgVVNCXFZJRF9DMjUxJlBJRF8xMTJBCisKKzsgRGV2aWNlOiBDMjUxOjExMkIKKyJMaWJVU0ItV2luMzI6IEV1cm9CcmFpbGxlIFtyZXNlcnZlZF0iPUxJQlVTQl9ERVYsIFVTQlxWSURfQzI1MSZQSURfMTEyQgorCis7IERldmljZTogQzI1MToxMTJDCisiTGliVVNCLVdpbjMyOiBFdXJvQnJhaWxsZSBbcmVzZXJ2ZWRdIj1MSUJVU0JfREVWLCBVU0JcVklEX0MyNTEmUElEXzExMkMKKworOyBEZXZpY2U6IEMyNTE6MTEyRAorIkxpYlVTQi1XaW4zMjogRXVyb0JyYWlsbGUgW3Jlc2VydmVkXSI9TElCVVNCX0RFViwgVVNCXFZJRF9DMjUxJlBJRF8xMTJECisKKzsgRGV2aWNlOiBDMjUxOjExMkUKKyJMaWJVU0ItV2luMzI6IEV1cm9CcmFpbGxlIFtyZXNlcnZlZF0iPUxJQlVTQl9ERVYsIFVTQlxWSURfQzI1MSZQSURfMTEyRQorCis7IERldmljZTogQzI1MToxMTJGCisiTGliVVNCLVdpbjMyOiBFdXJvQnJhaWxsZSBbcmVzZXJ2ZWRdIj1MSUJVU0JfREVWLCBVU0JcVklEX0MyNTEmUElEXzExMkYKKworOyBEZXZpY2U6IEMyNTE6MTEzMAorIkxpYlVTQi1XaW4zMjogRXVyb0JyYWlsbGUgW0VzeXRpbWUgKGZpcm13YXJlIDEuMDMsIDIwMTQtMDMtMzEpXSwgRXVyb0JyYWlsbGUgW0VzeXRpbWVdIj1MSUJVU0JfREVWLCBVU0JcVklEX0MyNTEmUElEXzExMzAKKworOyBEZXZpY2U6IEMyNTE6MTEzMQorIkxpYlVTQi1XaW4zMjogRXVyb0JyYWlsbGUgW3Jlc2VydmVkXSI9TElCVVNCX0RFViwgVVNCXFZJRF9DMjUxJlBJRF8xMTMxCisKKzsgRGV2aWNlOiBDMjUxOjExMzIKKyJMaWJVU0ItV2luMzI6IEV1cm9CcmFpbGxlIFtyZXNlcnZlZF0iPUxJQlVTQl9ERVYsIFVTQlxWSURfQzI1MSZQSURfMTEzMgorCis7IEVORF9VU0JfQlJBSUxMRV9ERVZJQ0VTCisKKzsgTWljcm9zb2Z0IE5hcnJhdG9yIERldmljZQorIkxpYlVTQi1XaW4zMjogTWljcm9zb2Z0IE5hcnJhdG9yIj1MSUJVU0JfREVWLCBVU0JcTmFycmF0b3JPdmVycmlkZQorCitbRGV2aWNlcy5OVGFtZDY0XQorOyBCRUdJTl9VU0JfQlJBSUxMRV9ERVZJQ0VTIExpYlVTQi1XaW4zMiBMSUJVU0JfREVWCisKKzsgRGV2aWNlOiAwNDAzOjYwMDEKKzsgR2VuZXJpYyBJZGVudGlmaWVyCis7IFZlbmRvcjogRnV0dXJlIFRlY2hub2xvZ3kgRGV2aWNlcyBJbnRlcm5hdGlvbmFsLCBMdGQuCis7IFByb2R1Y3Q6IEZUMjMyIFVTQi1TZXJpYWwgKFVBUlQpIElDCisiTGliVVNCLVdpbjMyOiBBbGJhdHJvc3MgW2FsbCBtb2RlbHNdLCBDZWJyYSBbYWxsIG1vZGVsc10sIEhJTVMgW1N5bmMgQnJhaWxsZV0sIEhhbmR5VGVjaCBbRlRESSBjaGlwXSwgSGVkbyBbTW9iaWxMaW5lXSwgTURWIFthbGwgbW9kZWxzXSI9TElCVVNCX0RFViwgVVNCXFZJRF8wNDAzJlBJRF82MDAxCisKKzsgRGV2aWNlOiAwNDAzOjYwMTAKKzsgR2VuZXJpYyBJZGVudGlmaWVyCis7IFZlbmRvcjogRnV0dXJlIFRlY2hub2xvZ3kgRGV2aWNlcyBJbnRlcm5hdGlvbmFsLCBMdGQKKzsgUHJvZHVjdDogRlQyMjMyQy9EL0ggRHVhbCBVQVJUL0ZJRk8gSUMKKyJMaWJVU0ItV2luMzI6IERvdFBhZCBbYWxsIG1vZGVsc10iPUxJQlVTQl9ERVYsIFVTQlxWSURfMDQwMyZQSURfNjAxMAorCis7IERldmljZTogMDQwMzpERTU4CisiTGliVVNCLVdpbjMyOiBIZWRvIFtNb2JpbExpbmVdIj1MSUJVU0JfREVWLCBVU0JcVklEXzA0MDMmUElEX0RFNTgKKworOyBEZXZpY2U6IDA0MDM6REU1OQorIkxpYlVTQi1XaW4zMjogSGVkbyBbUHJvZmlMaW5lXSI9TElCVVNCX0RFViwgVVNCXFZJRF8wNDAzJlBJRF9ERTU5CisKKzsgRGV2aWNlOiAwNDAzOkYyMDgKKyJMaWJVU0ItV2luMzI6IFBhcGVubWVpZXIgW2FsbCBtb2RlbHNdIj1MSUJVU0JfREVWLCBVU0JcVklEXzA0MDMmUElEX0YyMDgKKworOyBEZXZpY2U6IDA0MDM6RkU3MAorIkxpYlVTQi1XaW4zMjogQmF1bSBbVmFyaW8gNDAgKDQwIGNlbGxzKV0iPUxJQlVTQl9ERVYsIFVTQlxWSURfMDQwMyZQSURfRkU3MAorCis7IERldmljZTogMDQwMzpGRTcxCisiTGliVVNCLVdpbjMyOiBCYXVtIFtQb2NrZXRWYXJpbyAoMjQgY2VsbHMpXSI9TElCVVNCX0RFViwgVVNCXFZJRF8wNDAzJlBJRF9GRTcxCisKKzsgRGV2aWNlOiAwNDAzOkZFNzIKKyJMaWJVU0ItV2luMzI6IEJhdW0gW1N1cGVyVmFyaW8gNDAgKDQwIGNlbGxzKV0iPUxJQlVTQl9ERVYsIFVTQlxWSURfMDQwMyZQSURfRkU3MgorCis7IERldmljZTogMDQwMzpGRTczCisiTGliVVNCLVdpbjMyOiBCYXVtIFtTdXBlclZhcmlvIDMyICgzMiBjZWxscyldIj1MSUJVU0JfREVWLCBVU0JcVklEXzA0MDMmUElEX0ZFNzMKKworOyBEZXZpY2U6IDA0MDM6RkU3NAorIkxpYlVTQi1XaW4zMjogQmF1bSBbU3VwZXJWYXJpbyA2NCAoNjQgY2VsbHMpXSI9TElCVVNCX0RFViwgVVNCXFZJRF8wNDAzJlBJRF9GRTc0CisKKzsgRGV2aWNlOiAwNDAzOkZFNzUKKyJMaWJVU0ItV2luMzI6IEJhdW0gW1N1cGVyVmFyaW8gODAgKDgwIGNlbGxzKV0iPUxJQlVTQl9ERVYsIFVTQlxWSURfMDQwMyZQSURfRkU3NQorCis7IERldmljZTogMDQwMzpGRTc2CisiTGliVVNCLVdpbjMyOiBCYXVtIFtWYXJpb1BybyA4MCAoODAgY2VsbHMpXSI9TElCVVNCX0RFViwgVVNCXFZJRF8wNDAzJlBJRF9GRTc2CisKKzsgRGV2aWNlOiAwNDAzOkZFNzcKKyJMaWJVU0ItV2luMzI6IEJhdW0gW1ZhcmlvUHJvIDY0ICg2NCBjZWxscyldIj1MSUJVU0JfREVWLCBVU0JcVklEXzA0MDMmUElEX0ZFNzcKKworOyBEZXZpY2U6IDA0NTI6MDEwMAorIkxpYlVTQi1XaW4zMjogTWV0ZWMgW2FsbCBtb2RlbHNdIj1MSUJVU0JfREVWLCBVU0JcVklEXzA0NTImUElEXzAxMDAKKworOyBEZXZpY2U6IDA0NUU6OTMwQQorIkxpYlVTQi1XaW4zMjogSElNUyBbQnJhaWxsZSBTZW5zZSAoVVNCIDEuMSldLCBISU1TIFtCcmFpbGxlIFNlbnNlIChVU0IgMi4wKV0sIEhJTVMgW0JyYWlsbGUgU2Vuc2UgVTIgKFVTQiAyLjApXSI9TElCVVNCX0RFViwgVVNCXFZJRF8wNDVFJlBJRF85MzBBCisKKzsgRGV2aWNlOiAwNDVFOjkzMEIKKyJMaWJVU0ItV2luMzI6IEhJTVMgW0JyYWlsbGUgRWRnZSBhbmQgUUJyYWlsbGVYTF0iPUxJQlVTQl9ERVYsIFVTQlxWSURfMDQ1RSZQSURfOTMwQgorCis7IERldmljZTogMDQ4MzpBMUQzCisiTGliVVNCLVdpbjMyOiBCYXVtIFtPcmJpdCBSZWFkZXIgMjAgKDIwIGNlbGxzKV0iPUxJQlVTQl9ERVYsIFVTQlxWSURfMDQ4MyZQSURfQTFEMworCis7IERldmljZTogMDQ4MzpBMzY2CisiTGliVVNCLVdpbjMyOiBCYXVtIFtPcmJpdCBSZWFkZXIgNDAgKDQwIGNlbGxzKV0iPUxJQlVTQl9ERVYsIFVTQlxWSURfMDQ4MyZQSURfQTM2NgorCis7IERldmljZTogMDZCMDowMDAxCisiTGliVVNCLVdpbjMyOiBBbHZhIFtTYXRlbGxpdGUgKDVubildIj1MSUJVU0JfREVWLCBVU0JcVklEXzA2QjAmUElEXzAwMDEKKworOyBEZXZpY2U6IDA3OTg6MDAwMQorIkxpYlVTQi1XaW4zMjogVm95YWdlciBbYWxsIG1vZGVsc10iPUxJQlVTQl9ERVYsIFVTQlxWSURfMDc5OCZQSURfMDAwMQorCis7IERldmljZTogMDc5ODowNjAwCisiTGliVVNCLVdpbjMyOiBBbHZhIFtWb3lhZ2VyIFByb3RvY29sIENvbnZlcnRlcl0iPUxJQlVTQl9ERVYsIFVTQlxWSURfMDc5OCZQSURfMDYwMAorCis7IERldmljZTogMDc5ODowNjI0CisiTGliVVNCLVdpbjMyOiBBbHZhIFtCQzYyNF0iPUxJQlVTQl9ERVYsIFVTQlxWSURfMDc5OCZQSURfMDYyNAorCis7IERldmljZTogMDc5ODowNjQwCisiTGliVVNCLVdpbjMyOiBBbHZhIFtCQzY0MF0iPUxJQlVTQl9ERVYsIFVTQlxWSURfMDc5OCZQSURfMDY0MAorCis7IERldmljZTogMDc5ODowNjgwCisiTGliVVNCLVdpbjMyOiBBbHZhIFtCQzY4MF0iPUxJQlVTQl9ERVYsIFVTQlxWSURfMDc5OCZQSURfMDY4MAorCis7IERldmljZTogMDkwNDoxMDE2CisiTGliVVNCLVdpbjMyOiBGcmFua0F1ZGlvZGF0YSBbQjJLODQgKGJlZm9yZSBmaXJtd2FyZSBpbnN0YWxsYXRpb24pXSI9TElCVVNCX0RFViwgVVNCXFZJRF8wOTA0JlBJRF8xMDE2CisKKzsgRGV2aWNlOiAwOTA0OjEwMTcKKyJMaWJVU0ItV2luMzI6IEZyYW5rQXVkaW9kYXRhIFtCMks4NCAoYWZ0ZXIgZmlybXdhcmUgaW5zdGFsbGF0aW9uKV0iPUxJQlVTQl9ERVYsIFVTQlxWSURfMDkwNCZQSURfMTAxNworCis7IERldmljZTogMDkwNDoyMDAwCisiTGliVVNCLVdpbjMyOiBCYXVtIFtWYXJpb1BybyA0MCAoNDAgY2VsbHMpXSI9TElCVVNCX0RFViwgVVNCXFZJRF8wOTA0JlBJRF8yMDAwCisKKzsgRGV2aWNlOiAwOTA0OjIwMDEKKyJMaWJVU0ItV2luMzI6IEJhdW0gW0Vjb1ZhcmlvIDI0ICgyNCBjZWxscyldIj1MSUJVU0JfREVWLCBVU0JcVklEXzA5MDQmUElEXzIwMDEKKworOyBEZXZpY2U6IDA5MDQ6MjAwMgorIkxpYlVTQi1XaW4zMjogQmF1bSBbRWNvVmFyaW8gNDAgKDQwIGNlbGxzKV0iPUxJQlVTQl9ERVYsIFVTQlxWSURfMDkwNCZQSURfMjAwMgorCis7IERldmljZTogMDkwNDoyMDA3CisiTGliVVNCLVdpbjMyOiBCYXVtIFtWYXJpb0Nvbm5lY3QgNDAgKDQwIGNlbGxzKV0iPUxJQlVTQl9ERVYsIFVTQlxWSURfMDkwNCZQSURfMjAwNworCis7IERldmljZTogMDkwNDoyMDA4CisiTGliVVNCLVdpbjMyOiBCYXVtIFtWYXJpb0Nvbm5lY3QgMzIgKDMyIGNlbGxzKV0iPUxJQlVTQl9ERVYsIFVTQlxWSURfMDkwNCZQSURfMjAwOAorCis7IERldmljZTogMDkwNDoyMDA5CisiTGliVVNCLVdpbjMyOiBCYXVtIFtWYXJpb0Nvbm5lY3QgMjQgKDI0IGNlbGxzKV0iPUxJQlVTQl9ERVYsIFVTQlxWSURfMDkwNCZQSURfMjAwOQorCis7IERldmljZTogMDkwNDoyMDEwCisiTGliVVNCLVdpbjMyOiBCYXVtIFtWYXJpb0Nvbm5lY3QgNjQgKDY0IGNlbGxzKV0iPUxJQlVTQl9ERVYsIFVTQlxWSURfMDkwNCZQSURfMjAxMAorCis7IERldmljZTogMDkwNDoyMDExCisiTGliVVNCLVdpbjMyOiBCYXVtIFtWYXJpb0Nvbm5lY3QgODAgKDgwIGNlbGxzKV0iPUxJQlVTQl9ERVYsIFVTQlxWSURfMDkwNCZQSURfMjAxMQorCis7IERldmljZTogMDkwNDoyMDE0CisiTGliVVNCLVdpbjMyOiBCYXVtIFtFY29WYXJpbyAzMiAoMzIgY2VsbHMpXSI9TElCVVNCX0RFViwgVVNCXFZJRF8wOTA0JlBJRF8yMDE0CisKKzsgRGV2aWNlOiAwOTA0OjIwMTUKKyJMaWJVU0ItV2luMzI6IEJhdW0gW0Vjb1ZhcmlvIDY0ICg2NCBjZWxscyldIj1MSUJVU0JfREVWLCBVU0JcVklEXzA5MDQmUElEXzIwMTUKKworOyBEZXZpY2U6IDA5MDQ6MjAxNgorIkxpYlVTQi1XaW4zMjogQmF1bSBbRWNvVmFyaW8gODAgKDgwIGNlbGxzKV0iPUxJQlVTQl9ERVYsIFVTQlxWSURfMDkwNCZQSURfMjAxNgorCis7IERldmljZTogMDkwNDozMDAwCisiTGliVVNCLVdpbjMyOiBCYXVtIFtSZWZyZXNoYWJyYWlsbGUgMTggKDE4IGNlbGxzKV0iPUxJQlVTQl9ERVYsIFVTQlxWSURfMDkwNCZQSURfMzAwMAorCis7IERldmljZTogMDkwNDozMDAxCisiTGliVVNCLVdpbjMyOiBCYXVtIFtPcmJpdCBpbiBSZWZyZXNoYWJyYWlsbGUgRW11bGF0aW9uIE1vZGUgKDE4IGNlbGxzKV0sIEJhdW0gW1JlZnJlc2hhYnJhaWxsZSAxOCAoMTggY2VsbHMpXSI9TElCVVNCX0RFViwgVVNCXFZJRF8wOTA0JlBJRF8zMDAxCisKKzsgRGV2aWNlOiAwOTA0OjQwMDQKKyJMaWJVU0ItV2luMzI6IEJhdW0gW1Byb250byEgVjMgMTggKDE4IGNlbGxzKV0iPUxJQlVTQl9ERVYsIFVTQlxWSURfMDkwNCZQSURfNDAwNAorCis7IERldmljZTogMDkwNDo0MDA1CisiTGliVVNCLVdpbjMyOiBCYXVtIFtQcm9udG8hIFYzIDQwICg0MCBjZWxscyldIj1MSUJVU0JfREVWLCBVU0JcVklEXzA5MDQmUElEXzQwMDUKKworOyBEZXZpY2U6IDA5MDQ6NDAwNworIkxpYlVTQi1XaW4zMjogQmF1bSBbUHJvbnRvISBWNCAxOCAoMTggY2VsbHMpXSI9TElCVVNCX0RFViwgVVNCXFZJRF8wOTA0JlBJRF80MDA3CisKKzsgRGV2aWNlOiAwOTA0OjQwMDgKKyJMaWJVU0ItV2luMzI6IEJhdW0gW1Byb250byEgVjQgNDAgKDQwIGNlbGxzKV0iPUxJQlVTQl9ERVYsIFVTQlxWSURfMDkwNCZQSURfNDAwOAorCis7IERldmljZTogMDkwNDo2MDAxCisiTGliVVNCLVdpbjMyOiBCYXVtIFtTdXBlclZhcmlvMiA0MCAoNDAgY2VsbHMpXSI9TElCVVNCX0RFViwgVVNCXFZJRF8wOTA0JlBJRF82MDAxCisKKzsgRGV2aWNlOiAwOTA0OjYwMDIKKyJMaWJVU0ItV2luMzI6IEJhdW0gW1BvY2tldFZhcmlvMiAoMjQgY2VsbHMpXSI9TElCVVNCX0RFViwgVVNCXFZJRF8wOTA0JlBJRF82MDAyCisKKzsgRGV2aWNlOiAwOTA0OjYwMDMKKyJMaWJVU0ItV2luMzI6IEJhdW0gW1N1cGVyVmFyaW8yIDMyICgzMiBjZWxscyldIj1MSUJVU0JfREVWLCBVU0JcVklEXzA5MDQmUElEXzYwMDMKKworOyBEZXZpY2U6IDA5MDQ6NjAwNAorIkxpYlVTQi1XaW4zMjogQmF1bSBbU3VwZXJWYXJpbzIgNjQgKDY0IGNlbGxzKV0iPUxJQlVTQl9ERVYsIFVTQlxWSURfMDkwNCZQSURfNjAwNAorCis7IERldmljZTogMDkwNDo2MDA1CisiTGliVVNCLVdpbjMyOiBCYXVtIFtTdXBlclZhcmlvMiA4MCAoODAgY2VsbHMpXSI9TElCVVNCX0RFViwgVVNCXFZJRF8wOTA0JlBJRF82MDA1CisKKzsgRGV2aWNlOiAwOTA0OjYwMDYKKyJMaWJVU0ItV2luMzI6IEJhdW0gW0JyYWlsbGlhbnQyIDQwICg0MCBjZWxscyldIj1MSUJVU0JfREVWLCBVU0JcVklEXzA5MDQmUElEXzYwMDYKKworOyBEZXZpY2U6IDA5MDQ6NjAwNworIkxpYlVTQi1XaW4zMjogQmF1bSBbQnJhaWxsaWFudDIgMjQgKDI0IGNlbGxzKV0iPUxJQlVTQl9ERVYsIFVTQlxWSURfMDkwNCZQSURfNjAwNworCis7IERldmljZTogMDkwNDo2MDA4CisiTGliVVNCLVdpbjMyOiBCYXVtIFtCcmFpbGxpYW50MiAzMiAoMzIgY2VsbHMpXSI9TElCVVNCX0RFViwgVVNCXFZJRF8wOTA0JlBJRF82MDA4CisKKzsgRGV2aWNlOiAwOTA0OjYwMDkKKyJMaWJVU0ItV2luMzI6IEJhdW0gW0JyYWlsbGlhbnQyIDY0ICg2NCBjZWxscyldIj1MSUJVU0JfREVWLCBVU0JcVklEXzA5MDQmUElEXzYwMDkKKworOyBEZXZpY2U6IDA5MDQ6NjAwQQorIkxpYlVTQi1XaW4zMjogQmF1bSBbQnJhaWxsaWFudDIgODAgKDgwIGNlbGxzKV0iPUxJQlVTQl9ERVYsIFVTQlxWSURfMDkwNCZQSURfNjAwQQorCis7IERldmljZTogMDkwNDo2MDExCisiTGliVVNCLVdpbjMyOiBCYXVtIFtWYXJpb0Nvbm5lY3QgMjQgKDI0IGNlbGxzKV0iPUxJQlVTQl9ERVYsIFVTQlxWSURfMDkwNCZQSURfNjAxMQorCis7IERldmljZTogMDkwNDo2MDEyCisiTGliVVNCLVdpbjMyOiBCYXVtIFtWYXJpb0Nvbm5lY3QgMzIgKDMyIGNlbGxzKV0iPUxJQlVTQl9ERVYsIFVTQlxWSURfMDkwNCZQSURfNjAxMgorCis7IERldmljZTogMDkwNDo2MDEzCisiTGliVVNCLVdpbjMyOiBCYXVtIFtWYXJpb0Nvbm5lY3QgNDAgKDQwIGNlbGxzKV0iPUxJQlVTQl9ERVYsIFVTQlxWSURfMDkwNCZQSURfNjAxMworCis7IERldmljZTogMDkwNDo2MTAxCisiTGliVVNCLVdpbjMyOiBCYXVtIFtWYXJpb1VsdHJhIDIwICgyMCBjZWxscyldIj1MSUJVU0JfREVWLCBVU0JcVklEXzA5MDQmUElEXzYxMDEKKworOyBEZXZpY2U6IDA5MDQ6NjEwMgorIkxpYlVTQi1XaW4zMjogQmF1bSBbVmFyaW9VbHRyYSA0MCAoNDAgY2VsbHMpXSI9TElCVVNCX0RFViwgVVNCXFZJRF8wOTA0JlBJRF82MTAyCisKKzsgRGV2aWNlOiAwOTA0OjYxMDMKKyJMaWJVU0ItV2luMzI6IEJhdW0gW1ZhcmlvVWx0cmEgMzIgKDMyIGNlbGxzKV0iPUxJQlVTQl9ERVYsIFVTQlxWSURfMDkwNCZQSURfNjEwMworCis7IERldmljZTogMDkyMToxMjAwCisiTGliVVNCLVdpbjMyOiBIYW5keVRlY2ggW0dvSHVicyBjaGlwXSI9TElCVVNCX0RFViwgVVNCXFZJRF8wOTIxJlBJRF8xMjAwCisKKzsgRGV2aWNlOiAwRjRFOjAxMDAKKyJMaWJVU0ItV2luMzI6IEZyZWVkb21TY2llbnRpZmljIFtGb2N1cyAxXSI9TElCVVNCX0RFViwgVVNCXFZJRF8wRjRFJlBJRF8wMTAwCisKKzsgRGV2aWNlOiAwRjRFOjAxMTEKKyJMaWJVU0ItV2luMzI6IEZyZWVkb21TY2llbnRpZmljIFtQQUMgTWF0ZV0iPUxJQlVTQl9ERVYsIFVTQlxWSURfMEY0RSZQSURfMDExMQorCis7IERldmljZTogMEY0RTowMTEyCisiTGliVVNCLVdpbjMyOiBGcmVlZG9tU2NpZW50aWZpYyBbRm9jdXMgMl0iPUxJQlVTQl9ERVYsIFVTQlxWSURfMEY0RSZQSURfMDExMgorCis7IERldmljZTogMEY0RTowMTE0CisiTGliVVNCLVdpbjMyOiBGcmVlZG9tU2NpZW50aWZpYyBbRm9jdXMgMytdIj1MSUJVU0JfREVWLCBVU0JcVklEXzBGNEUmUElEXzAxMTQKKworOyBEZXZpY2U6IDEwQzQ6RUE2MAorOyBHZW5lcmljIElkZW50aWZpZXIKKzsgVmVuZG9yOiBDeWduYWwgSW50ZWdyYXRlZCBQcm9kdWN0cywgSW5jLgorOyBQcm9kdWN0OiBDUDIxMHggVUFSVCBCcmlkZ2UgLyBteUFWUiBteVNtYXJ0VVNCIGxpZ2h0CisiTGliVVNCLVdpbjMyOiBCcmFpbGxlTWVtbyBbUG9ja2V0XSwgU2Vpa2EgW0JyYWlsbGUgRGlzcGxheV0iPUxJQlVTQl9ERVYsIFVTQlxWSURfMTBDNCZQSURfRUE2MAorCis7IERldmljZTogMTBDNDpFQTgwCis7IEdlbmVyaWMgSWRlbnRpZmllcgorOyBWZW5kb3I6IEN5Z25hbCBJbnRlZ3JhdGVkIFByb2R1Y3RzLCBJbmMuCis7IFByb2R1Y3Q6IENQMjEweCBVQVJUIEJyaWRnZQorIkxpYlVTQi1XaW4zMjogU2Vpa2EgW05vdGUgVGFrZXJdIj1MSUJVU0JfREVWLCBVU0JcVklEXzEwQzQmUElEX0VBODAKKworOyBEZXZpY2U6IDExNDg6MDMwMQorIkxpYlVTQi1XaW4zMjogQnJhaWxsZU1lbW8gW1NtYXJ0XSI9TElCVVNCX0RFViwgVVNCXFZJRF8xMTQ4JlBJRF8wMzAxCisKKzsgRGV2aWNlOiAxMjA5OkFCQzAKKyJMaWJVU0ItV2luMzI6IEluY2VwdG9yIFthbGwgbW9kZWxzXSI9TElCVVNCX0RFViwgVVNCXFZJRF8xMjA5JlBJRF9BQkMwCisKKzsgRGV2aWNlOiAxNkMwOjA1RTEKKyJMaWJVU0ItV2luMzI6IENhbnV0ZSBbYWxsIG1vZGVsc10iPUxJQlVTQl9ERVYsIFVTQlxWSURfMTZDMCZQSURfMDVFMQorCis7IERldmljZTogMUE4Njo3NTIzCis7IEdlbmVyaWMgSWRlbnRpZmllcgorOyBWZW5kb3I6IEppYW5nc3UgUWluSGVuZywgTHRkLgorOyBQcm9kdWN0OiBDSDM0MSBVU0IgQnJpZGdlIENvbnRyb2xsZXIKKyJMaWJVU0ItV2luMzI6IEJhdW0gW05MUyBlUmVhZGVyIFpvb21heCAoMjAgY2VsbHMpXSI9TElCVVNCX0RFViwgVVNCXFZJRF8xQTg2JlBJRF83NTIzCisKKzsgRGV2aWNlOiAxQzcxOkMwMDQKKyJMaWJVU0ItV2luMzI6IEJyYWlsbGVOb3RlIFtIdW1hbldhcmUgQVBFWF0iPUxJQlVTQl9ERVYsIFVTQlxWSURfMUM3MSZQSURfQzAwNAorCis7IERldmljZTogMUM3MTpDMDA1CisiTGliVVNCLVdpbjMyOiBIdW1hbldhcmUgW0JyYWlsbGlhbnQgQkkgMzIvNDAsIEJyYWlsbGlhbnQgQiA4MCAoc2VyaWFsIHByb3RvY29sKV0iPUxJQlVTQl9ERVYsIFVTQlxWSURfMUM3MSZQSURfQzAwNQorCis7IERldmljZTogMUM3MTpDMDA2CisiTGliVVNCLVdpbjMyOiBIdW1hbldhcmUgW25vbi1Ub3VjaCBtb2RlbHMgKEhJRCBwcm90b2NvbCldIj1MSUJVU0JfREVWLCBVU0JcVklEXzFDNzEmUElEX0MwMDYKKworOyBEZXZpY2U6IDFDNzE6QzAwQQorIkxpYlVTQi1XaW4zMjogSHVtYW5XYXJlIFtCcmFpbGxlTm90ZSBUb3VjaCAoSElEIHByb3RvY29sKV0iPUxJQlVTQl9ERVYsIFVTQlxWSURfMUM3MSZQSURfQzAwQQorCis7IERldmljZTogMUM3MTpDMDIxCisiTGliVVNCLVdpbjMyOiBIdW1hbldhcmUgW0JyYWlsbGlhbnQgQkkgMTQgKHNlcmlhbCBwcm90b2NvbCldIj1MSUJVU0JfREVWLCBVU0JcVklEXzFDNzEmUElEX0MwMjEKKworOyBEZXZpY2U6IDFDNzE6QzEwMQorIkxpYlVTQi1XaW4zMjogSHVtYW5XYXJlIFtBUEggQ2hhbWVsZW9uIDIwIChISUQgcHJvdG9jb2wsIGZpcm13YXJlIDEuMCldLCBIdW1hbldhcmUgW0FQSCBDaGFtZWxlb24gMjAgKEhJRCBwcm90b2NvbCwgZmlybXdhcmUgMS4xKV0iPUxJQlVTQl9ERVYsIFVTQlxWSURfMUM3MSZQSURfQzEwMQorCis7IERldmljZTogMUM3MTpDMTA0CisiTGliVVNCLVdpbjMyOiBIdW1hbldhcmUgW0FQSCBDaGFtZWxlb24gMjAgKHNlcmlhbCBwcm90b2NvbCldIj1MSUJVU0JfREVWLCBVU0JcVklEXzFDNzEmUElEX0MxMDQKKworOyBEZXZpY2U6IDFDNzE6QzExMQorIkxpYlVTQi1XaW4zMjogSHVtYW5XYXJlIFtBUEggTWFudGlzIFE0MCAoSElEIHByb3RvY29sLCBmaXJtd2FyZSAxLjApXSwgSHVtYW5XYXJlIFtBUEggTWFudGlzIFE0MCAoSElEIHByb3RvY29sLCBmaXJtd2FyZSAxLjEpXSI9TElCVVNCX0RFViwgVVNCXFZJRF8xQzcxJlBJRF9DMTExCisKKzsgRGV2aWNlOiAxQzcxOkMxMTQKKyJMaWJVU0ItV2luMzI6IEh1bWFuV2FyZSBbQVBIIE1hbnRpcyBRNDAgKHNlcmlhbCBwcm90b2NvbCldIj1MSUJVU0JfREVWLCBVU0JcVklEXzFDNzEmUElEX0MxMTQKKworOyBEZXZpY2U6IDFDNzE6QzEyMQorIkxpYlVTQi1XaW4zMjogSHVtYW5XYXJlIFtIdW1hbndhcmUgQnJhaWxsZU9uZSAoSElEIHByb3RvY29sLCBmaXJtd2FyZSAxLjApXSwgSHVtYW5XYXJlIFtIdW1hbndhcmUgQnJhaWxsZU9uZSAoSElEIHByb3RvY29sLCBmaXJtd2FyZSAxLjEpXSI9TElCVVNCX0RFViwgVVNCXFZJRF8xQzcxJlBJRF9DMTIxCisKKzsgRGV2aWNlOiAxQzcxOkMxMjQKKyJMaWJVU0ItV2luMzI6IEh1bWFuV2FyZSBbSHVtYW53YXJlIEJyYWlsbGVPbmUgKHNlcmlhbCBwcm90b2NvbCldIj1MSUJVU0JfREVWLCBVU0JcVklEXzFDNzEmUElEX0MxMjQKKworOyBEZXZpY2U6IDFDNzE6QzEzMQorIkxpYlVTQi1XaW4zMjogSHVtYW5XYXJlIFtIdW1hbndhcmUgQnJhaWxsaWFudCBCSSA0MFggKEhJRCBwcm90b2NvbCwgZmlybXdhcmUgMS4wKV0sIEh1bWFuV2FyZSBbSHVtYW53YXJlIEJyYWlsbGlhbnQgQkkgNDBYIChISUQgcHJvdG9jb2wsIGZpcm13YXJlIDEuMSldIj1MSUJVU0JfREVWLCBVU0JcVklEXzFDNzEmUElEX0MxMzEKKworOyBEZXZpY2U6IDFDNzE6QzE0MQorIkxpYlVTQi1XaW4zMjogSHVtYW5XYXJlIFtIdW1hbndhcmUgQnJhaWxsaWFudCBCSSAyMFggKEhJRCBwcm90b2NvbCwgZmlybXdhcmUgMS4wKV0sIEh1bWFuV2FyZSBbSHVtYW53YXJlIEJyYWlsbGlhbnQgQkkgMjBYIChISUQgcHJvdG9jb2wsIGZpcm13YXJlIDEuMSldIj1MSUJVU0JfREVWLCBVU0JcVklEXzFDNzEmUElEX0MxNDEKKworOyBEZXZpY2U6IDFDNzE6Q0UwMQorIkxpYlVTQi1XaW4zMjogSHVtYW5XYXJlIFtOTFMgZVJlYWRlciAoSElEIHByb3RvY29sLCBmaXJtd2FyZSAxLjApXSwgSHVtYW5XYXJlIFtOTFMgZVJlYWRlciAoSElEIHByb3RvY29sLCBmaXJtd2FyZSAxLjEpXSI9TElCVVNCX0RFViwgVVNCXFZJRF8xQzcxJlBJRF9DRTAxCisKKzsgRGV2aWNlOiAxQzcxOkNFMDQKKyJMaWJVU0ItV2luMzI6IEh1bWFuV2FyZSBbTkxTIGVSZWFkZXIgKHNlcmlhbCBwcm90b2NvbCldIj1MSUJVU0JfREVWLCBVU0JcVklEXzFDNzEmUElEX0NFMDQKKworOyBEZXZpY2U6IDFGRTQ6MDAwMworIkxpYlVTQi1XaW4zMjogSGFuZHlUZWNoIFtVU0ItSElEIGFkYXB0ZXJdIj1MSUJVU0JfREVWLCBVU0JcVklEXzFGRTQmUElEXzAwMDMKKworOyBEZXZpY2U6IDFGRTQ6MDA0NAorIkxpYlVTQi1XaW4zMjogSGFuZHlUZWNoIFtFYXN5IEJyYWlsbGUgKEhJRCldIj1MSUJVU0JfREVWLCBVU0JcVklEXzFGRTQmUElEXzAwNDQKKworOyBEZXZpY2U6IDFGRTQ6MDA1NAorIkxpYlVTQi1XaW4zMjogSGFuZHlUZWNoIFtBY3RpdmUgQnJhaWxsZV0iPUxJQlVTQl9ERVYsIFVTQlxWSURfMUZFNCZQSURfMDA1NAorCis7IERldmljZTogMUZFNDowMDU1CisiTGliVVNCLVdpbjMyOiBIYW5keVRlY2ggW0Nvbm5lY3QgQnJhaWxsZSA0MF0iPUxJQlVTQl9ERVYsIFVTQlxWSURfMUZFNCZQSURfMDA1NQorCis7IERldmljZTogMUZFNDowMDYxCisiTGliVVNCLVdpbjMyOiBIYW5keVRlY2ggW0FjdGlsaW5vXSI9TElCVVNCX0RFViwgVVNCXFZJRF8xRkU0JlBJRF8wMDYxCisKKzsgRGV2aWNlOiAxRkU0OjAwNjQKKyJMaWJVU0ItV2luMzI6IEhhbmR5VGVjaCBbQWN0aXZlIFN0YXIgNDBdIj1MSUJVU0JfREVWLCBVU0JcVklEXzFGRTQmUElEXzAwNjQKKworOyBEZXZpY2U6IDFGRTQ6MDA3NAorIkxpYlVTQi1XaW4zMjogSGFuZHlUZWNoIFtCcmFpbGxlIFN0YXIgNDAgKEhJRCldIj1MSUJVU0JfREVWLCBVU0JcVklEXzFGRTQmUElEXzAwNzQKKworOyBEZXZpY2U6IDFGRTQ6MDA4MQorIkxpYlVTQi1XaW4zMjogSGFuZHlUZWNoIFtCYXNpYyBCcmFpbGxlIDE2XSI9TElCVVNCX0RFViwgVVNCXFZJRF8xRkU0JlBJRF8wMDgxCisKKzsgRGV2aWNlOiAxRkU0OjAwODIKKyJMaWJVU0ItV2luMzI6IEhhbmR5VGVjaCBbQmFzaWMgQnJhaWxsZSAyMF0iPUxJQlVTQl9ERVYsIFVTQlxWSURfMUZFNCZQSURfMDA4MgorCis7IERldmljZTogMUZFNDowMDgzCisiTGliVVNCLVdpbjMyOiBIYW5keVRlY2ggW0Jhc2ljIEJyYWlsbGUgMzJdIj1MSUJVU0JfREVWLCBVU0JcVklEXzFGRTQmUElEXzAwODMKKworOyBEZXZpY2U6IDFGRTQ6MDA4NAorIkxpYlVTQi1XaW4zMjogSGFuZHlUZWNoIFtCYXNpYyBCcmFpbGxlIDQwXSI9TElCVVNCX0RFViwgVVNCXFZJRF8xRkU0JlBJRF8wMDg0CisKKzsgRGV2aWNlOiAxRkU0OjAwODYKKyJMaWJVU0ItV2luMzI6IEhhbmR5VGVjaCBbQmFzaWMgQnJhaWxsZSA2NF0iPUxJQlVTQl9ERVYsIFVTQlxWSURfMUZFNCZQSURfMDA4NgorCis7IERldmljZTogMUZFNDowMDg3CisiTGliVVNCLVdpbjMyOiBIYW5keVRlY2ggW0Jhc2ljIEJyYWlsbGUgODBdIj1MSUJVU0JfREVWLCBVU0JcVklEXzFGRTQmUElEXzAwODcKKworOyBEZXZpY2U6IDFGRTQ6MDA4QQorIkxpYlVTQi1XaW4zMjogSGFuZHlUZWNoIFtCYXNpYyBCcmFpbGxlIDQ4XSI9TElCVVNCX0RFViwgVVNCXFZJRF8xRkU0JlBJRF8wMDhBCisKKzsgRGV2aWNlOiAxRkU0OjAwOEIKKyJMaWJVU0ItV2luMzI6IEhhbmR5VGVjaCBbQmFzaWMgQnJhaWxsZSAxNjBdIj1MSUJVU0JfREVWLCBVU0JcVklEXzFGRTQmUElEXzAwOEIKKworOyBEZXZpY2U6IDFGRTQ6MDBBNAorIkxpYlVTQi1XaW4zMjogSGFuZHlUZWNoIFtBY3RpdmF0b3JdIj1MSUJVU0JfREVWLCBVU0JcVklEXzFGRTQmUElEXzAwQTQKKworOyBEZXZpY2U6IDQyNDI6MDAwMQorIkxpYlVTQi1XaW4zMjogUGVnYXN1cyBbYWxsIG1vZGVsc10iPUxJQlVTQl9ERVYsIFVTQlxWSURfNDI0MiZQSURfMDAwMQorCis7IERldmljZTogQzI1MToxMTIyCisiTGliVVNCLVdpbjMyOiBFdXJvQnJhaWxsZSBbRXN5cyAodmVyc2lvbiA8IDMuMCwgbm8gU0QgY2FyZCldIj1MSUJVU0JfREVWLCBVU0JcVklEX0MyNTEmUElEXzExMjIKKworOyBEZXZpY2U6IEMyNTE6MTEyMworIkxpYlVTQi1XaW4zMjogRXVyb0JyYWlsbGUgW3Jlc2VydmVkXSI9TElCVVNCX0RFViwgVVNCXFZJRF9DMjUxJlBJRF8xMTIzCisKKzsgRGV2aWNlOiBDMjUxOjExMjQKKyJMaWJVU0ItV2luMzI6IEV1cm9CcmFpbGxlIFtFc3lzICh2ZXJzaW9uIDwgMy4wLCB3aXRoIFNEIGNhcmQpXSI9TElCVVNCX0RFViwgVVNCXFZJRF9DMjUxJlBJRF8xMTI0CisKKzsgRGV2aWNlOiBDMjUxOjExMjUKKyJMaWJVU0ItV2luMzI6IEV1cm9CcmFpbGxlIFtyZXNlcnZlZF0iPUxJQlVTQl9ERVYsIFVTQlxWSURfQzI1MSZQSURfMTEyNQorCis7IERldmljZTogQzI1MToxMTI2CisiTGliVVNCLVdpbjMyOiBFdXJvQnJhaWxsZSBbRXN5cyAodmVyc2lvbiA+PSAzLjAsIG5vIFNEIGNhcmQpXSI9TElCVVNCX0RFViwgVVNCXFZJRF9DMjUxJlBJRF8xMTI2CisKKzsgRGV2aWNlOiBDMjUxOjExMjcKKyJMaWJVU0ItV2luMzI6IEV1cm9CcmFpbGxlIFtyZXNlcnZlZF0iPUxJQlVTQl9ERVYsIFVTQlxWSURfQzI1MSZQSURfMTEyNworCis7IERldmljZTogQzI1MToxMTI4CisiTGliVVNCLVdpbjMyOiBFdXJvQnJhaWxsZSBbRXN5cyAodmVyc2lvbiA+PSAzLjAsIHdpdGggU0QgY2FyZCldIj1MSUJVU0JfREVWLCBVU0JcVklEX0MyNTEmUElEXzExMjgKKworOyBEZXZpY2U6IEMyNTE6MTEyOQorIkxpYlVTQi1XaW4zMjogRXVyb0JyYWlsbGUgW3Jlc2VydmVkXSI9TElCVVNCX0RFViwgVVNCXFZJRF9DMjUxJlBJRF8xMTI5CisKKzsgRGV2aWNlOiBDMjUxOjExMkEKKyJMaWJVU0ItV2luMzI6IEV1cm9CcmFpbGxlIFtyZXNlcnZlZF0iPUxJQlVTQl9ERVYsIFVTQlxWSURfQzI1MSZQSURfMTEyQQorCis7IERldmljZTogQzI1MToxMTJCCisiTGliVVNCLVdpbjMyOiBFdXJvQnJhaWxsZSBbcmVzZXJ2ZWRdIj1MSUJVU0JfREVWLCBVU0JcVklEX0MyNTEmUElEXzExMkIKKworOyBEZXZpY2U6IEMyNTE6MTEyQworIkxpYlVTQi1XaW4zMjogRXVyb0JyYWlsbGUgW3Jlc2VydmVkXSI9TElCVVNCX0RFViwgVVNCXFZJRF9DMjUxJlBJRF8xMTJDCisKKzsgRGV2aWNlOiBDMjUxOjExMkQKKyJMaWJVU0ItV2luMzI6IEV1cm9CcmFpbGxlIFtyZXNlcnZlZF0iPUxJQlVTQl9ERVYsIFVTQlxWSURfQzI1MSZQSURfMTEyRAorCis7IERldmljZTogQzI1MToxMTJFCisiTGliVVNCLVdpbjMyOiBFdXJvQnJhaWxsZSBbcmVzZXJ2ZWRdIj1MSUJVU0JfREVWLCBVU0JcVklEX0MyNTEmUElEXzExMkUKKworOyBEZXZpY2U6IEMyNTE6MTEyRgorIkxpYlVTQi1XaW4zMjogRXVyb0JyYWlsbGUgW3Jlc2VydmVkXSI9TElCVVNCX0RFViwgVVNCXFZJRF9DMjUxJlBJRF8xMTJGCisKKzsgRGV2aWNlOiBDMjUxOjExMzAKKyJMaWJVU0ItV2luMzI6IEV1cm9CcmFpbGxlIFtFc3l0aW1lIChmaXJtd2FyZSAxLjAzLCAyMDE0LTAzLTMxKV0sIEV1cm9CcmFpbGxlIFtFc3l0aW1lXSI9TElCVVNCX0RFViwgVVNCXFZJRF9DMjUxJlBJRF8xMTMwCisKKzsgRGV2aWNlOiBDMjUxOjExMzEKKyJMaWJVU0ItV2luMzI6IEV1cm9CcmFpbGxlIFtyZXNlcnZlZF0iPUxJQlVTQl9ERVYsIFVTQlxWSURfQzI1MSZQSURfMTEzMQorCis7IERldmljZTogQzI1MToxMTMyCisiTGliVVNCLVdpbjMyOiBFdXJvQnJhaWxsZSBbcmVzZXJ2ZWRdIj1MSUJVU0JfREVWLCBVU0JcVklEX0MyNTEmUElEXzExMzIKKworOyBFTkRfVVNCX0JSQUlMTEVfREVWSUNFUworCis7IE1pY3Jvc29mdCBOYXJyYXRvciBEZXZpY2UKKyJMaWJVU0ItV2luMzI6IE1pY3Jvc29mdCBOYXJyYXRvciI9TElCVVNCX0RFViwgVVNCXE5hcnJhdG9yT3ZlcnJpZGUKKwpkaWZmIC0tZ2l0IGEvV2luZG93cy9saWJ1c2IubnNpIGIvV2luZG93cy9saWJ1c2IubnNpCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU5NDhmODEKLS0tIC9kZXYvbnVsbAorKysgYi9XaW5kb3dzL2xpYnVzYi5uc2kKQEAgLTAsMCArMSwyOCBAQAorIWRlZmluZSBWQVJJQU5UICJsaWJ1c2IiCisKKyFtYWNybyBCcmx0dHlJbnN0YWxsCisJIWluc2VydG1hY3JvIEluc3RhbGxMaWIgRExMIE5PVFNIQVJFRCBSRUJPT1RfTk9UUFJPVEVDVEVEICIke0RJU1RESVJ9XGJpblxsaWJ1c2IwLmRsbCIgIiRTWVNESVJcbGlidXNiMC5kbGwiICIkU1lTRElSIgorCSFpbnNlcnRtYWNybyBJbnN0YWxsTGliIERMTCBOT1RTSEFSRUQgUkVCT09UX05PVFBST1RFQ1RFRCAiJHtESVNURElSfVxiaW5cbGlidXNiMC5zeXMiICIkU1lTRElSXGRyaXZlcnNcbGlidXNiMC5zeXMiICIkU1lTRElSXGRyaXZlcnMiCishbWFjcm9lbmQKKworIW1hY3JvIEJybHR0eVNob3J0Y3V0CisJQ3JlYXRlU2hvcnRDdXQgIiRTTVBST0dSQU1TXCRTdGFydE1lbnVGb2xkZXJcJChzaG9ydGN1dF9pbnNsaWJ1c2IpLmxuayIgIiRTWVNESVJccnVuZGxsMzIiICJsaWJ1c2IwLmRsbCx1c2JfaW5zdGFsbF9kcml2ZXJfbnBfcnVuZGxsICRJTlNURElSXGJpblxicmx0dHktbGlidXNiLmluZiIKKwlDcmVhdGVTaG9ydEN1dCAiJFNNUFJPR1JBTVNcJFN0YXJ0TWVudUZvbGRlclwkKHNob3J0Y3V0X2luc2xpYnVzYmZpbHRlcikubG5rIiAiJFNZU0RJUlxydW5kbGwzMiIgImxpYnVzYjAuZGxsLHVzYl9pbnN0YWxsX3NlcnZpY2VfbnBfcnVuZGxsIgorCUNyZWF0ZVNob3J0Q3V0ICIkU01QUk9HUkFNU1wkU3RhcnRNZW51Rm9sZGVyXCQoc2hvcnRjdXRfdW5pbnNsaWJ1c2JmaWx0ZXIpLmxuayIgIiRTWVNESVJccnVuZGxsMzIiICJsaWJ1c2IwLmRsbCx1c2JfdW5pbnN0YWxsX3NlcnZpY2VfbnBfcnVuZGxsIgorIW1hY3JvZW5kCisKKyFtYWNybyBCcmx0dHlUd2VhaworCU1lc3NhZ2VCb3ggTUJfWUVTTk98TUJfREVGQlVUVE9OMiAkKG1zZ19pbnNsaWJ1c2IzMmZpbHRlcikgSUROTyBub2ZpbHRlcgorCUV4ZWNXYWl0ICJydW5kbGwzMiBsaWJ1c2IwLmRsbCx1c2JfaW5zdGFsbF9zZXJ2aWNlX25wX3J1bmRsbCIKK25vZmlsdGVyOgorCU1lc3NhZ2VCb3ggTUJfWUVTTk98TUJfREVGQlVUVE9OMiAkKG1zZ19pbnNsaWJ1c2IzMikgSUROTyBub2RyaXZlcgorCUV4ZWNXYWl0ICJydW5kbGwzMiBsaWJ1c2IwLmRsbCx1c2JfaW5zdGFsbF9kcml2ZXJfbnBfcnVuZGxsICRJTlNURElSXGJpblxicmx0dHktbGlidXNiLmluZiIKK25vZHJpdmVyOgorIW1hY3JvZW5kCisKKyFtYWNybyBCcmx0dHlVbmluc3RhbGwKKwlFeGVjV2FpdCAicnVuZGxsMzIgbGlidXNiMC5kbGwsdXNiX3VuaW5zdGFsbF9zZXJ2aWNlX25wX3J1bmRsbCIKKwkhaW5zZXJ0bWFjcm8gVW5pbnN0YWxsTGliIERMTCBOT1RTSEFSRUQgUkVCT09UX05PVFBST1RFQ1RFRCAiJFNZU0RJUlxsaWJ1c2IwLmRsbCIKKyFtYWNyb2VuZAorCishaW5jbHVkZSBicmx0dHkubnNpCmRpZmYgLS1naXQgYS9XaW5kb3dzL21pbmd3LnNoIGIvV2luZG93cy9taW5ndy5zaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYzU3ZmIxCi0tLSAvZGV2L251bGwKKysrIGIvV2luZG93cy9taW5ndy5zaApAQCAtMCwwICsxLDI2NSBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorIyAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyMKKyMgQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorIworIyBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorIworIyBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisjIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyMgbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisjCisjIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK2Foa05hbWU9IkF1dG9Ib3RrZXkiCithaGtMb2NhdGlvbj0iL2MvUHJvZ3JhbSBGaWxlcyAoeDg2KS9BdXRvSG90a2V5IgorYWhrRG93bmxvYWQ9Imh0dHA6Ly93d3cuYXV0b2hvdGtleS5jb20vIgorCituc2lzTmFtZT0iTlNJUyIKK25zaXNMb2NhdGlvbj0iL2MvUHJvZ3JhbSBGaWxlcyAoeDg2KS9OU0lTIgorbnNpc0Rvd25sb2FkPSJodHRwOi8vbnNpcy5zb3VyY2Vmb3JnZS5uZXQvIgorCitsaWJ1c2IwTmFtZT0iTGliVVNCIChha2EgTGliVVNCLVdpbjMyKSIKK2xpYnVzYjBWZXJzaW9uPSIxLjIuNi4wIgorbGlidXNiMExvY2F0aW9uPSIvYy9MaWJVU0ItV2luMzIiCitsaWJ1c2IwRmlsZXM9ImJpbi9saWJ1c2Itd2luMzItYmluLVJFQURNRS50eHQiCitsaWJ1c2IwRG93bmxvYWQ9Imh0dHA6Ly9saWJ1c2Itd2luMzIuc291cmNlZm9yZ2UubmV0LyIKK2xpYnVzYjBQYXR0ZXJuPSJ1c2IwIgorCitsaWJ1c2IxTmFtZT0iTGliVVNCLTEuMCAoYWthIExpYlVTQngpIgorbGlidXNiMVZlcnNpb249IjEuMC4xOCIKK2xpYnVzYjFMb2NhdGlvbj0iL2MvTGliVVNCLTEuMCIKK2xpYnVzYjFGaWxlcz0ibGlidXNiLTEuMC5kZWYiCitsaWJ1c2IxRG93bmxvYWQ9Imh0dHA6Ly93d3cubGlidXNiLm9yZy93aWtpL3dpbmRvd3NfYmFja2VuZCIKK2xpYnVzYjFQYXR0ZXJuPSJ1c2ItMS4wIgorCit3aW51c2JOYW1lPSJMaWJVU0ItMS4wIFdpblVTQiBDb2luc3RhbGxlcnMiCit3aW51c2JMb2NhdGlvbj0iL2MvV2luVVNCIgord2ludXNiRmlsZXM9ImxpYnVzYl9kZXZpY2UuaW5mIgord2ludXNiRG93bmxvYWQ9Imh0dHA6Ly93d3cubGlidXNiLm9yZy93aWtpL3dpbmRvd3NfYmFja2VuZCIKKworbXN2Y05hbWU9Ik1TVkMiCittc3ZjTG9jYXRpb249IiIKK21zdmNGaWxlcz0ibGliLmV4ZSBsaW5rLmV4ZSIKK21zdmNEb3dubG9hZD0iIgorCitweXRob25OYW1lPSJQeXRob24iCitweXRob25Mb2NhdGlvbj0iIgorcHl0aG9uRmlsZXM9IkxpYi9zaXRlLXBhY2thZ2VzIFNjcmlwdHMiCitweXRob25Eb3dubG9hZD0iaHR0cDovL3d3dy5weXRob24ub3JnLyIKKworY3l0aG9uTmFtZT0iQ3l0aG9uIgorY3l0aG9uTG9jYXRpb249IiIKK2N5dGhvbkRvd25sb2FkPSJodHRwOi8vd3d3LmN5dGhvbi5vcmcvIgorCitpY3VOYW1lPSJJQ1UiCitpY3VMb2NhdGlvbj0iL2MvSUNVIgoraWN1RmlsZXM9ImluY2x1ZGUvdW5pY29kZSIKK2ljdURvd25sb2FkPSJodHRwOi8vaWN1LXByb2plY3Qub3JnLyIKKworcHRocmVhZHNOYW1lPSJtaW5ndzMyLXB0aHJlYWRzLXczMiIKK3B0aHJlYWRzTG9jYXRpb249Ii8iCitwdGhyZWFkc0ZpbGVzPSJtaW5ndy9pbmNsdWRlL3B0aHJlYWQuaCIKKworY3Vyc2VzTmFtZT0ibWluZ3czMi1wZGN1cnNlcyIKK2N1cnNlc0xvY2F0aW9uPSIvIgorY3Vyc2VzRmlsZXM9Im1pbmd3L2luY2x1ZGUvY3Vyc2VzLmgiCisKK3ppcFBhY2thZ2U9Im1zeXMtemlwIgordW5peDJkb3NQYWNrYWdlPSJtc3lzLWRvczJ1bml4IgorZ3JvZmZQYWNrYWdlPSJtc3lzLWdyb2ZmIgorCit2ZXJpZnlQYWNrYWdlKCkgeworICAgbG9jYWwgcGFja2FnZT0iJHsxfSIKKyAgIHNoaWZ0IDEKKworICAgbG9jYWwgbmFtZT0iJChnZXRWYXJpYWJsZSAiJHtwYWNrYWdlfU5hbWUiKSIKKworICAgbG9jYWwgcm9vdD0iJChnZXRWYXJpYWJsZSAiJHtwYWNrYWdlfVJvb3QiKSIKKyAgIFsgLW4gIiR7cm9vdH0iIF0gfHwgcm9vdD0iJChnZXRWYXJpYWJsZSAiJHtwYWNrYWdlfUxvY2F0aW9uIikiCisKKyAgIGlmIFsgLXogIiR7cm9vdH0iIF0KKyAgIHRoZW4KKyAgICAgIGxvZ1dhcm5pbmcgInBhY2thZ2UgbG9jYXRpb24gbm90IGRlZmluZWQ6ICR7bmFtZX0iCisgICAgICByb290PSIiCisgICBlbGlmIFsgISAtZSAiJHtyb290fSIgXQorICAgdGhlbgorICAgICAgbG9nV2FybmluZyAiZGlyZWN0b3J5IG5vdCBmb3VuZDogJHtyb290fSIKKyAgICAgIHJvb3Q9IiIKKyAgIGVsaWYgWyAhIC1kICIke3Jvb3R9IiBdCisgICB0aGVuCisgICAgICBsb2dXYXJuaW5nICJub3QgYSBkaXJlY3Rvcnk6ICR7cm9vdH0iCisgICAgICByb290PSIiCisgICBlbHNlCisgICAgICBzZXQgLS0gJChnZXRWYXJpYWJsZSAiJHtwYWNrYWdlfUZpbGVzIikKKyAgICAgIGxvY2FsIHByZWZpeD0iJHtyb290JS99IgorICAgICAgbG9jYWwgZmlsZQorCisgICAgICBmb3IgZmlsZQorICAgICAgZG8KKyAgICAgICAgIGxvY2FsIHBhdGg9IiR7cHJlZml4fS8ke2ZpbGV9IgorCisgICAgICAgICBbIC1lICIke3BhdGh9IiBdIHx8IHsKKyAgICAgICAgICAgIGxvZ1dhcm5pbmcgIiR7bmFtZX0gZmlsZSBub3QgZm91bmQ6ICR7cGF0aH0iCisgICAgICAgICAgICByb290PSIiCisgICAgICAgICB9CisgICAgICBkb25lCisgICBmaQorCisgICBzZXRWYXJpYWJsZSAiJHtwYWNrYWdlfVJvb3QiICIke3Jvb3R9IgorICAgWyAtbiAiJHtyb290fSIgXSB8fCByZXR1cm4gMQorICAgcmV0dXJuIDAKK30KKworYWRkV2luZG93c1BhY2thZ2VPcHRpb24oKSB7CisgICBsb2NhbCBsZXR0ZXI9IiR7MX0iCisgICBsb2NhbCBwYWNrYWdlPSIkezJ9IgorCisgICBsb2NhbCBuYW1lPSIkKGdldFZhcmlhYmxlICIke3BhY2thZ2V9TmFtZSIpIgorICAgbG9jYWwgbG9jYXRpb249IiQoZ2V0VmFyaWFibGUgIiR7cGFja2FnZX1Mb2NhdGlvbiIpIgorICAgYWRkUHJvZ3JhbU9wdGlvbiAiJHtsZXR0ZXJ9IiBzdHJpbmcuZGlyZWN0b3J5ICIke3BhY2thZ2V9Um9vdCIgIndoZXJlIHRoZSAke25hbWV9IHBhY2thZ2UgaGFzIGJlZW4gaW5zdGFsbGVkIiAiJHtsb2NhdGlvbn0iCit9CisKK3ZlcmlmeVdpbmRvd3NQYWNrYWdlKCkgeworICAgbG9jYWwgcGFja2FnZT0iJHsxfSIKKworICAgdmVyaWZ5UGFja2FnZSAiJHtwYWNrYWdlfSIgfHwgeworICAgICAgbG9jYWwgbWVzc2FnZT0iV2luZG93cyBwYWNrYWdlIG5vdCBpbnN0YWxsZWQ6IgorCisgICAgICBsb2NhbCBuYW1lPSIkKGdldFZhcmlhYmxlICIke3BhY2thZ2V9TmFtZSIpIgorICAgICAgWyAteiAiJHtuYW1lfSIgXSB8fCBtZXNzYWdlPSIke21lc3NhZ2V9ICR7bmFtZX0iCisKKyAgICAgIGxvY2FsIGRvd25sb2FkPSIkKGdldFZhcmlhYmxlICIke3BhY2thZ2V9RG93bmxvYWQiKSIKKyAgICAgIFsgLXogIiR7ZG93bmxvYWR9IiBdIHx8IG1lc3NhZ2U9IiR7bWVzc2FnZX0gKGRvd25sb2FkIGZyb20gJHtkb3dubG9hZH0pIgorCisgICAgICBsb2dXYXJuaW5nICIke21lc3NhZ2V9IgorICAgICAgcmV0dXJuIDEKKyAgIH0KKworICAgcmV0dXJuIDAKK30KKwordmVyaWZ5V2luZG93c1BhY2thZ2VzKCkgeworICAgbG9jYWwgcmVzdWx0PTAKKworICAgd2hpbGUgWyAiJHsjfSIgLWd0IDAgXQorICAgZG8KKyAgICAgIGxvY2FsIHBhY2thZ2U9IiR7MX0iCisgICAgICBzaGlmdCAxCisKKyAgICAgIHZlcmlmeVdpbmRvd3NQYWNrYWdlICIke3BhY2thZ2V9IiB8fCByZXN1bHQ9MQorICAgZG9uZQorCisgICByZXR1cm4gIiR7cmVzdWx0fSIKK30KKwordmVyaWZ5TWluZ3dQYWNrYWdlKCkgeworICAgbG9jYWwgcGFja2FnZT0iJHsxfSIKKworICAgdmVyaWZ5UGFja2FnZSAiJHtwYWNrYWdlfSIgfHwgeworICAgICAgbG9jYWwgbWVzc2FnZT0iTWluR1cgcGFja2FnZSBub3QgaW5zdGFsbGVkOiIKKworICAgICAgbG9jYWwgbmFtZT0iJChnZXRWYXJpYWJsZSAiJHtwYWNrYWdlfU5hbWUiKSIKKyAgICAgIFsgLXogIiR7bmFtZX0iIF0gfHwgbWVzc2FnZT0iJHttZXNzYWdlfSAke25hbWV9IgorCisgICAgICBsb2dXYXJuaW5nICIke21lc3NhZ2V9IgorICAgICAgcmV0dXJuIDEKKyAgIH0KKworICAgcmV0dXJuIDAKK30KKwordmVyaWZ5TWluZ3dQYWNrYWdlcygpIHsKKyAgIGxvY2FsIHJlc3VsdD0wCisKKyAgIHdoaWxlIFsgIiR7I30iIC1ndCAwIF0KKyAgIGRvCisgICAgICBsb2NhbCBwYWNrYWdlPSIkezF9IgorICAgICAgc2hpZnQgMQorCisgICAgICB2ZXJpZnlNaW5nd1BhY2thZ2UgIiR7cGFja2FnZX0iIHx8IHJlc3VsdD0xCisgICBkb25lCisKKyAgIHJldHVybiAiJHtyZXN1bHR9IgorfQorCitmaW5kSG9zdENvbW1hbmQoKSB7CisgICBsb2NhbCBjb21tYW5kPSIkezF9IgorCisgICBsb2NhbCBwYXRoPSIkKGNvbW1hbmQgLXYgIiR7Y29tbWFuZH0iIDI+L2Rldi9udWxsIHx8IDopIgorICAgc2V0VmFyaWFibGUgIiR7Y29tbWFuZH1QYXRoIiAiJHtwYXRofSIKKyAgIFsgLW4gIiR7cGF0aH0iIF0gfHwgcmV0dXJuIDEKKyAgIHJldHVybiAwCit9CisKK3ZlcmlmeVdpbmRvd3NDb21tYW5kKCkgeworICAgbG9jYWwgY29tbWFuZD0iJHsxfSIKKworICAgZmluZEhvc3RDb21tYW5kICIke2NvbW1hbmR9IiB8fCB7CisgICAgICBsb2NhbCBtZXNzYWdlPSJXaW5kb3dzIGNvbW1hbmQgbm90IGZvdW5kOiAke2NvbW1hbmR9IgorCisgICAgICBsb2NhbCBkb3dubG9hZD0iJChnZXRWYXJpYWJsZSAiJHtjb21tYW5kfURvd25sb2FkIikiCisgICAgICBbIC16ICIke2Rvd25sb2FkfSIgXSB8fCB7CisgICAgICAgICBtZXNzYWdlPSIke21lc3NhZ2V9IChpbnN0YWxsIgorICAgICAgICAgbG9jYWwgbmFtZT0iJChnZXRWYXJpYWJsZSAiJHtjb21tYW5kfU5hbWUiKSIKKyAgICAgICAgIFsgLXogIiR7bmFtZX0iIF0gfHwgbWVzc2FnZT0iJHttZXNzYWdlfSAke25hbWV9IgorICAgICAgICAgbWVzc2FnZT0iJHttZXNzYWdlfSBmcm9tICR7ZG93bmxvYWR9KSIKKyAgICAgIH0KKworICAgICAgbG9nV2FybmluZyAiJHttZXNzYWdlfSIKKyAgICAgIHJldHVybiAxCisgICB9CisKKyAgIHJldHVybiAwCit9CisKK3ZlcmlmeVdpbmRvd3NDb21tYW5kcygpIHsKKyAgIGxvY2FsIHJlc3VsdD0wCisKKyAgIHdoaWxlIFsgIiR7I30iIC1ndCAwIF0KKyAgIGRvCisgICAgICBsb2NhbCBjb21tYW5kPSIkezF9IgorICAgICAgc2hpZnQgMQorCisgICAgICB2ZXJpZnlXaW5kb3dzQ29tbWFuZCAiJHtjb21tYW5kfSIgfHwgcmVzdWx0PTEKKyAgIGRvbmUKKworICAgcmV0dXJuICIke3Jlc3VsdH0iCit9CisKK3ZlcmlmeU1pbmd3Q29tbWFuZCgpIHsKKyAgIGxvY2FsIGNvbW1hbmQ9IiR7MX0iCisKKyAgIGZpbmRIb3N0Q29tbWFuZCAiJHtjb21tYW5kfSIgfHwgeworICAgICAgbG9jYWwgbWVzc2FnZT0iTWluR1cgY29tbWFuZCBub3QgZm91bmQ6ICR7Y29tbWFuZH0iCisKKyAgICAgIGxvY2FsIHBhY2thZ2U9IiQoZ2V0VmFyaWFibGUgIiR7Y29tbWFuZH1QYWNrYWdlIikiCisgICAgICBbIC16ICIke3BhY2thZ2V9IiBdIHx8IG1lc3NhZ2U9IiR7bWVzc2FnZX0gKGluc3RhbGwgcGFja2FnZSAke3BhY2thZ2V9KSIKKworICAgICAgbG9nV2FybmluZyAiJHttZXNzYWdlfSIKKyAgICAgIHJldHVybiAxCisgICB9CisKKyAgIHJldHVybiAwCit9CisKK3ZlcmlmeU1pbmd3Q29tbWFuZHMoKSB7CisgICBsb2NhbCByZXN1bHQ9MAorCisgICB3aGlsZSBbICIkeyN9IiAtZ3QgMCBdCisgICBkbworICAgICAgbG9jYWwgY29tbWFuZD0iJHsxfSIKKyAgICAgIHNoaWZ0IDEKKworICAgICAgdmVyaWZ5TWluZ3dDb21tYW5kICIke2NvbW1hbmR9IiB8fCByZXN1bHQ9MQorICAgZG9uZQorCisgICByZXR1cm4gIiR7cmVzdWx0fSIKK30KKworWyAiJHtNU1lTVEVNfSIgPSAiTUlOR1czMiIgXSB8fCBzZW1hbnRpY0Vycm9yICJ0aGlzIHNjcmlwdCBpcyBmb3IgTWluR1cgb25seSIKZGlmZiAtLWdpdCBhL1dpbmRvd3MvbWt3aW4gYi9XaW5kb3dzL21rd2luCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjAwOTRjNWUKLS0tIC9kZXYvbnVsbAorKysgYi9XaW5kb3dzL21rd2luCkBAIC0wLDAgKzEsNTc2IEBACisjIS9iaW4vYmFzaAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorIyAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyMKKyMgQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorIworIyBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorIworIyBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisjIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyMgbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisjCisjIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK3NldCAtZQordW1hc2sgMDIyCitleHBvcnQgTUFLRUZMQUdTPQorCitjb3B5UHJvcGVydGllcygpIHsKKyAgIGxvY2FsIGZyb209IiR7MX0iCisgICBsb2NhbCB0bz0iJHsyfSIKKyAgIHNoaWZ0IDIKKworICAgZm9yIHN1ZmZpeCBpbiAkeyp9CisgICBkbworICAgICAgc2V0VmFyaWFibGUgIiR7dG99JHtzdWZmaXh9IiAiJChnZXRWYXJpYWJsZSAiJHtmcm9tfSR7c3VmZml4fSIpIgorICAgZG9uZQorfQorCitpbnN0YWxsRmlsZSgpIHsKKyAgIGxvY2FsIHNvdXJjZT0iJHsxfSIKKyAgIGxvY2FsIHRhcmdldD0iJHsyfSIKKworICAgWyAiJHt0YXJnZXQlL30iID0gIiR7dGFyZ2V0fSIgXSB8fCB0YXJnZXQ9IiR7dGFyZ2V0fSR7c291cmNlIyMqL30iCisKKyAgIGlmIFsgLWUgIiR7c291cmNlfSIgXQorICAgdGhlbgorICAgICAgbG9jYWwgcGF0aD0iJHtpbnN0YWxsUm9vdH0vJHt0YXJnZXR9IgorICAgICAgbWtkaXIgLXAgIiR7cGF0aCUvKn0iCisgICAgICBjcCAiJHtzb3VyY2V9IiAiJHtwYXRofSIKKyAgIGVsc2UKKyAgICAgIGxvZ1dhcm5pbmcgImZpbGUgbm90IGluc3RhbGxlZDogJHt0YXJnZXR9IgorICAgZmkKK30KKworaW5zdGFsbEZpbGVzKCkgeworICAgbG9jYWwgdGFyZ2V0PSIkezF9IgorICAgc2hpZnQgMQorICAgbG9jYWwgc291cmNlCisKKyAgIGZvciBzb3VyY2UKKyAgIGRvCisgICAgICBpbnN0YWxsRmlsZSAiJHtzb3VyY2V9IiAiJHt0YXJnZXR9IgorICAgZG9uZQorfQorCitpbnN0YWxsUGFja2FnZXMoKSB7CisgICB3aGlsZSBbICIkeyN9IiAtZ3QgMCBdCisgICBkbworICAgICAgbG9jYWwgcGFja2FnZT0iJHsxfSIKKyAgICAgIHNoaWZ0IDEKKworICAgICAgbG9jYWwgbmFtZT0iJChnZXRWYXJpYWJsZSAiJHtwYWNrYWdlfU5hbWUiKSIKKyAgICAgIGxvZ01lc3NhZ2UgdGFzayAiaW5zdGFsbGluZyBwYWNrYWdlIGZpbGVzOiAke25hbWV9IgorICAgICAgImluc3RhbGxQYWNrYWdlXyR7cGFja2FnZX0iCisgICBkb25lCit9CisKK2luc3RhbGxQYWNrYWdlX2xpYnVzYjAoKSB7CisgICBpZiBbIC1uICIke2xpYnVzYjBSb290fSIgXQorICAgdGhlbgorICAgICAgY2QgIiR7bGlidXNiMFJvb3R9L2JpbiIKKyAgICAgIGluc3RhbGxGaWxlICJ4ODYvbGlidXNiMC5zeXMiICJiaW4vbGlidXNiMC5zeXMiCisgICAgICBpbnN0YWxsRmlsZSAieDg2L2xpYnVzYjBfeDg2LmRsbCIgImJpbi9saWJ1c2IwLmRsbCIKKyAgICAgIGluc3RhbGxGaWxlICJhbWQ2NC9saWJ1c2IwLnN5cyIgImJpbi9saWJ1c2IwX3g2NC5zeXMiCisgICAgICBpbnN0YWxsRmlsZSAiYW1kNjQvbGlidXNiMC5kbGwiICJiaW4vbGlidXNiMF94NjQuZGxsIgorICAgZWxzZQorICAgICAgbG9nV2FybmluZyAiJHtsaWJ1c2IwTmFtZX0gbm90IGluc3RhbGxhYmxlIgorICAgZmkKK30KKworaW5zdGFsbFBhY2thZ2VfbGlidXNiMSgpIHsKKyAgIGlmIFsgLW4gIiR7bGlidXNiMVJvb3R9IiBdCisgICB0aGVuCisgICAgICBjZCAiJHtsaWJ1c2IxUm9vdH0iCisgICAgICBpbnN0YWxsRmlsZSAiTWluR1czMi9kbGwvbGlidXNiLTEuMC5kbGwiICJiaW4vIgorICAgZWxzZQorICAgICAgbG9nV2FybmluZyAiJHtsaWJ1c2IxTmFtZX0gbm90IGluc3RhbGxhYmxlIgorICAgZmkKK30KKworaW5zdGFsbFBhY2thZ2Vfd2ludXNiKCkgeworICAgaWYgWyAtbiAiJHt3aW51c2JSb290fSIgXQorICAgdGhlbgorICAgICAgY2QgIiR7d2ludXNiUm9vdH0iCisgICAgICBpbnN0YWxsRmlsZSAieDg2L3dpbnVzYmNvaW5zdGFsbGVyMi5kbGwiICJiaW4veDg2LyIKKyAgICAgIGluc3RhbGxGaWxlICJhbWQ2NC93aW51c2Jjb2luc3RhbGxlcjIuZGxsIiAiYmluL2FtZDY0LyIKKyAgICAgIGluc3RhbGxGaWxlICJ4ODYvV2RmQ29JbnN0YWxsZXIwMTAwOS5kbGwiICJiaW4veDg2LyIKKyAgICAgIGluc3RhbGxGaWxlICJhbWQ2NC9XZGZDb0luc3RhbGxlcjAxMDA5LmRsbCIgImJpbi9hbWQ2NC8iCisgICBlbHNlCisgICAgICBsb2dXYXJuaW5nICIke3dpbnVzYk5hbWV9IG5vdCBpbnN0YWxsYWJsZSIKKyAgIGZpCit9CisKKy4gImBkaXJuYW1lICIkezB9ImAvLi4vYnJsdHR5LXByb2xvZ3VlLnNoIgorLiAiJHtwcm9ncmFtRGlyZWN0b3J5fS9taW5ndy5zaCIKKworZGVmYXVsdFVzYlBhY2thZ2U9ImxpYnVzYiIKK2RlZmF1bHRUZW1wb3JhcnlEaXJlY3Rvcnk9IiR7VE1QRElSOi0vdG1wfS9icmx0dHktJHtwcm9ncmFtTmFtZX0iCisKK2FkZFByb2dyYW1PcHRpb24gdSBzdHJpbmcucGFja2FnZSB1c2JQYWNrYWdlICJ3aGljaCBVU0IgcGFja2FnZSB0byB1c2UiICIke2RlZmF1bHRVc2JQYWNrYWdlfSIKK2FkZFByb2dyYW1PcHRpb24gcyBmbGFnIGludm9rZVNoZWxsICJpbnZva2UgaW50ZXJhY3RpdmUgc2hlbGwgdG8gaW5zcGVjdC9tb2RpZnkgcmVzdWx0IgorYWRkUHJvZ3JhbU9wdGlvbiB0IHN0cmluZy5kaXJlY3RvcnkgdGVtcG9yYXJ5RGlyZWN0b3J5ICJ0aGUgdGVtcG9yYXJ5IGRpcmVjdG9yeSB0byB1c2UgZm9yIHRoZSBidWlsZCIgIiR7ZGVmYXVsdFRlbXBvcmFyeURpcmVjdG9yeX0iCithZGRQcm9ncmFtT3B0aW9uIGsgZmxhZyBrZWVwQnVpbGQgImtlZXAgKGRvIG5vdCByZW1vdmUpIHRoZSB0ZW1wb3JhcnkgZGlyZWN0b3J5IgorYWRkV2luZG93c1BhY2thZ2VPcHRpb24gTSBtc3ZjCithZGRXaW5kb3dzUGFja2FnZU9wdGlvbiBBIGFoaworYWRkV2luZG93c1BhY2thZ2VPcHRpb24gTiBuc2lzCithZGRXaW5kb3dzUGFja2FnZU9wdGlvbiBVIGxpYnVzYjAKK2FkZFdpbmRvd3NQYWNrYWdlT3B0aW9uIFggbGlidXNiMQorYWRkV2luZG93c1BhY2thZ2VPcHRpb24gVyB3aW51c2IKK2FkZFdpbmRvd3NQYWNrYWdlT3B0aW9uIFAgcHl0aG9uCithZGRXaW5kb3dzUGFja2FnZU9wdGlvbiBJIGljdQorYWRkUHJvZ3JhbU9wdGlvbiBDIHN0cmluZy5kaXJlY3RvcnkgY3lnd2luUm9vdCAidGhlIHJvb3QgZGlyZWN0b3J5IG9mIGEgQ3lnd2luIGluc3RhbGxhdGlvbiIKK2FkZFByb2dyYW1QYXJhbWV0ZXIgc291cmNlIHNvdXJjZVJvb3QgInRoZSB0b3AtbGV2ZWwgZGlyZWN0b3J5IG9mIHRoZSBzb3VyY2UgdHJlZSIKK29wdGlvbmFsUHJvZ3JhbVBhcmFtZXRlcnMKK2FkZFByb2dyYW1QYXJhbWV0ZXIgcmV2aXNpb24gYnVpbGRSZXZpc2lvbiAidGhlIHJldmlzaW9uIG9mIHRoZSBidWlsZCIKK3BhcnNlUHJvZ3JhbUFyZ3VtZW50cyAiJHtAfSIKKworc291cmNlUm9vdD0iJChjZCAiJHtzb3VyY2VSb290fSIgJiYgcHdkIC1XKSIKK1sgLWYgIiR7c291cmNlUm9vdH0vY29uZmlndXJlIiBdIHx8IHNlbWFudGljRXJyb3IgIm5vdCBhIHNvdXJjZSB0cmVlOiAke3NvdXJjZVJvb3R9IgorCityZXZpc2lvbklkZW50aWZpZXI9IiQoIiR7c291cmNlUm9vdH0vZ2V0cmV2aWQiICIke3NvdXJjZVJvb3R9IikiCitsb2dNZXNzYWdlIHRhc2sgInJldmlzaW9uIGlkZW50aWZpZXI6ICR7cmV2aXNpb25JZGVudGlmaWVyfSIKKworWyAtbiAiJHtidWlsZFJldmlzaW9ufSIgXSB8fCB7CisgICBidWlsZFJldmlzaW9uPSIke3JldmlzaW9uSWRlbnRpZmllciUtZyp9LSIKKyAgIGJ1aWxkUmV2aXNpb249IiR7YnVpbGRSZXZpc2lvbiMqLX0iCisgICBidWlsZFJldmlzaW9uPSIke2J1aWxkUmV2aXNpb24jKi19IgorCisgICBpZiBbIC1uICIke2J1aWxkUmV2aXNpb259IiBdCisgICB0aGVuCisgICAgICBidWlsZFJldmlzaW9uPSIke2J1aWxkUmV2aXNpb24lLX0iCisgICBlbHNlCisgICAgICBidWlsZFJldmlzaW9uPSIwIgorICAgZmkKK30KKworWyAtbiAiJHtjeWd3aW5Sb290fSIgXSB8fCB7CisgICBkaXJlY3Rvcnk9L2N5Z3dpbgorICAgWyAtZSAiJHtkaXJlY3Rvcnl9IiBdICYmIGN5Z3dpblJvb3Q9IiR7ZGlyZWN0b3J5fSIKK30KKworWyAtbiAiJHtjeWd3aW5Sb290fSIgXSAmJiB7CisgICBpZiBbIC1mICIke2N5Z3dpblJvb3R9L2N5Z3dpbi5pY28iIF0KKyAgIHRoZW4KKyAgICAgIGV4cG9ydCBQQVRIPSIke1BBVEh9OiR7Y3lnd2luUm9vdH0vYmluIgorICAgICAgZXhwb3J0IG5vZG9zZmlsZXdhcm5pbmc9MQorICAgZWxzZQorICAgICAgbG9nV2FybmluZyAibm90IGEgQ3lnd2luIHJvb3QgZGlyZWN0b3J5OiAke2N5Z3dpblJvb3R9IgorICAgZmkKK30KKworWyAtbiAiJHt1c2JQYWNrYWdlfSIgXSB8fCB1c2JQYWNrYWdlPSIke2RlZmF1bHRVc2JQYWNrYWdlfSIKKworY2FzZSAiJHt1c2JQYWNrYWdlfSIKK2luCisgICB3aW51c2IpIHVzYldpbmRvd3NQYWNrYWdlcz0oKTs7CisgICBsaWJ1c2IpIHVzYldpbmRvd3NQYWNrYWdlcz0oImxpYnVzYjAiKTs7CisgICBsaWJ1c2ItMS4wKSB1c2JXaW5kb3dzUGFja2FnZXM9KCJsaWJ1c2IxIiAid2ludXNiIik7OworICAgKikgc3ludGF4RXJyb3IgInVucmVjb2duaXplZCBVU0IgcGFja2FnZTogJHt1c2JQYWNrYWdlfSIKK2VzYWMKKword2ludXNiRmlsdGVyPSIiCisKK2xpYnVzYjBGaWx0ZXI9IlwKKyAgICBzZWxlY3QgIlVTQjoiLCBhbmQgaW5zdGFsbCB0aGUgJHtsaWJ1c2IwTmFtZX0gZmlsdGVyIGJ5IGRvaW5nIG9uZSBvZiB0aGUKKyAgICBmb2xsb3dpbmc6CisgICAgKyBydW4gSW5zdGFsbCAke2xpYnVzYjBOYW1lfSBGaWx0ZXIgZnJvbSB0aGUgU3RhcnQgTWVudQorICAgICsgYW5zd2VyIHllcyB0byB0aGUgc2V0dXAgcHJvbXB0IGZvciBpbnN0YWxsaW5nIHRoZSAke2xpYnVzYjBOYW1lfSBmaWx0ZXIKKyAgICArIGluc3RhbGwgaXQgYnkgaGFuZCwgZnJvbSAke2xpYnVzYjBEb3dubG9hZH0iCisKK2xpYnVzYjFGaWx0ZXI9IlwKKyAgICB5b3Ugd2lsbCBuZWVkIHRvIHVzZSAke2xpYnVzYjBOYW1lfSBpbnN0ZWFkIGJlY2F1c2UKKyAgICAke2xpYnVzYjFOYW1lfSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgcmVxdWlyZW1lbnQuIgorCitzZXQgLS0gIiR7dXNiV2luZG93c1BhY2thZ2VzW0BdfSIKK2NvcHlQcm9wZXJ0aWVzICIkezF9IiB1c2IgTmFtZSBMb2NhdGlvbiBEb3dubG9hZCBWZXJzaW9uIFBhdHRlcm4gRmlsdGVyCisKK1sgLXogIiR7bXN2Y1Jvb3R9IiBdIHx8IHsKKyAgIGlmIHZlcmlmeVdpbmRvd3NQYWNrYWdlIG1zdmMKKyAgIHRoZW4KKyAgICAgIGV4cG9ydCBQQVRIPSIke21zdmNSb290fToke1BBVEh9IgorICAgZmkKK30KKworWyAtbiAiJHtweXRob25Sb290fSIgXSB8fCB7CisgICBweXRob25Mb2NhdGlvbkZpbGU9IiR7cHJvZ3JhbURpcmVjdG9yeX0vcHl0aG9uLWxvY2F0aW9uIgorCisgICBpZiBbIC1mICIke3B5dGhvbkxvY2F0aW9uRmlsZX0iIF0KKyAgIHRoZW4KKyAgICAgIHJlYWQgcHl0aG9uUm9vdCA8IiR7cHl0aG9uTG9jYXRpb25GaWxlfSIKKyAgIGZpCit9CisKK1sgLXogIiR7cHl0aG9uUm9vdH0iIF0gfHwgeworICAgaWYgdmVyaWZ5V2luZG93c1BhY2thZ2UgcHl0aG9uCisgICB0aGVuCisgICAgICBleHBvcnQgUEFUSD0iJHtweXRob25Sb290fToke3B5dGhvblJvb3R9L1NjcmlwdHM6JHtQQVRIfSIKKyAgICAgIGV4cG9ydCBQWVRIT049IiR7cHl0aG9uUm9vdH0vcHl0aG9uIgorICAgZmkKK30KKwordmVyaWZ5V2luZG93c1BhY2thZ2VzIGFoayBuc2lzIGljdSAiJHt1c2JXaW5kb3dzUGFja2FnZXNbQF19IiB8fCA6Cit2ZXJpZnlXaW5kb3dzQ29tbWFuZHMgbGliIHB5dGhvbiBjeXRob24gfHwgOgordmVyaWZ5TWluZ3dQYWNrYWdlcyBwdGhyZWFkcyBjdXJzZXMgfHwgOgordmVyaWZ5TWluZ3dDb21tYW5kcyB6aXAgdW5peDJkb3MgbGludXhkb2MgZG94eWdlbiBncm9mZiB8fCA6CisKK2lmIFsgLXogIiR7dGVtcG9yYXJ5RGlyZWN0b3J5fSIgXQordGhlbgorICAgdGVtcG9yYXJ5RGlyZWN0b3J5PSIke2RlZmF1bHRUZW1wb3JhcnlEaXJlY3Rvcnl9IgorICAgcm0gLWYgLXIgIiR7dGVtcG9yYXJ5RGlyZWN0b3J5fSIKK2VsaWYgWyAtZSAiJHt0ZW1wb3JhcnlEaXJlY3Rvcnl9IiBdCit0aGVuCisgICBzZW1hbnRpY0Vycm9yICJkaXJlY3RvcnkgYWxyZWFkeSBleGlzdHM6ICR7dGVtcG9yYXJ5RGlyZWN0b3J5fSIKK2ZpCisKK21rZGlyIC1wICIke3RlbXBvcmFyeURpcmVjdG9yeX0iCitjZCAiJHt0ZW1wb3JhcnlEaXJlY3Rvcnl9IgordGVtcG9yYXJ5RGlyZWN0b3J5PSIkKHB3ZCAtVykiCisKK2xvZ01lc3NhZ2UgdGFzayAiY29weWluZyBzb3VyY2UgdHJlZSIKK25ld1NvdXJjZVJvb3Q9IiR7dGVtcG9yYXJ5RGlyZWN0b3J5fS9zb3VyY2UiCitjcCAtYSAiJHtzb3VyY2VSb290fSIgIiR7bmV3U291cmNlUm9vdH0iCitjZCAiJHtuZXdTb3VyY2VSb290fSIKK3NvdXJjZVJvb3Q9IiR7bmV3U291cmNlUm9vdH0iCisKK2xvZ01lc3NhZ2UgdGFzayAiYXBwbHlpbmcgcGF0Y2hlcyIKK2ZvciBwYXRjaCBpbiBhZmZpbml0eQorZG8KKyAgIHBhdGNoIC1wMCA8IldpbmRvd3MvJHtwYXRjaH0ucGF0Y2giCitkb25lCisKK2luZkZpbGU9IiR7dXNiUGFja2FnZX0uaW5mIgoraW5mUGF0aD0iV2luZG93cy8ke2luZkZpbGV9IgorVG9vbHMvdXBkdXNiZGV2cyAtcSAiYzpQcm9ncmFtcy91c2JfZGV2aWNlcy5jIiAiaW5mOiR7aW5mUGF0aH0iCitUb29scy91cGRjc3ZzIC1xCisKK2J1aWxkUm9vdD0iJHt0ZW1wb3JhcnlEaXJlY3Rvcnl9L2J1aWxkIgorbWtkaXIgLXAgIiR7YnVpbGRSb290fSIKK2NkICIke2J1aWxkUm9vdH0iCisKK2xvZ01lc3NhZ2UgdGFzayAiY29uZmlndXJpbmcgYnVpbGQiCisiLi4vc291cmNlL2NmZy13aW5kb3dzIiBcCisgICAtLXByZWZpeD0vIFwKKyAgIC0tZW5hYmxlLXJlbG9jYXRhYmxlLWluc3RhbGwgXAorICAgLS13aXRoLXVzYi1wYWNrYWdlPSIke3VzYlBhY2thZ2V9IiBcCisgICAtLXF1aWV0CisKKy4gLi9icmx0dHktY29uZmlnLnNoCitidWlsZFZlcnNpb249IiR7QlJMVFRZX1ZFUlNJT059LSR7YnVpbGRSZXZpc2lvbn0iCitidWlsZE5hbWU9IiR7QlJMVFRZX1RBUk5BTUV9LXdpbi0ke2J1aWxkVmVyc2lvbn0tJHt1c2JQYWNrYWdlfSIKKworbG9nTWVzc2FnZSB0YXNrICJidWlsZGluZyBwcm9ncmFtcyIKK21ha2UgLXMKK21ha2UgLXMgLUMgRHJpdmVycy9CcmxBUEkvV2luZG93RXllcyB3ZS1keW5hbWljLWxpYnJhcnktd2luZG93cworCitsb2dNZXNzYWdlIHRhc2sgImJ1aWxkaW5nIGRvY3VtZW50cyIKK21ha2UgLXMgLUMgRG9jdW1lbnRzCisKK2xvZ01lc3NhZ2UgdGFzayAiaW5zdGFsbGluZyBmaWxlcyIKK2luc3RhbGxSb290PSIke3RlbXBvcmFyeURpcmVjdG9yeX0vaW5zdGFsbC8ke2J1aWxkTmFtZX0iCittYWtlIC1zIGluc3RhbGwgaW5zdGFsbC1tZXNzYWdlcyBcCisgICBKQVZBX0pBUl9ESVI9L2xpYiBKQVZBX0pOSV9ESVI9L2xpYiBcCisgICBQWVRIT05fUFJFRklYPSJQeXRob24iIFwKKyAgIElOU1RBTExfUk9PVD0iJHtpbnN0YWxsUm9vdH0iCisKK2xvZ01lc3NhZ2UgdGFzayAidXBkYXRpbmcgZmlsZXMiCitkb2N1bWVudERpcmVjdG9yeT0iZG9jIgorCityZWFkbWVIZWFkZXI9IlwKK1RoaXMgYnVpbGQgb2YgJHtCUkxUVFlfTkFNRX0gJHtCUkxUVFlfVkVSU0lPTn0gaW5jbHVkZXMgV2luZG93cy1zcGVjaWZpYyBwYXRjaGVzLgorCitZb3Ugc2hvdWxkIHByb2JhYmx5IHJlYWQgZG9jL0JSTFRUWS50eHQgYW5kIGRvYy9XaW5kb3dzLnR4dCBmb3IgaW5mb3JtYXRpb24KK2Fib3V0IEJSTFRUWS4KKworSGVyZSBhcmUgc29tZSBub3RlcyBvbiBob3cgdG8gZ2V0IHN0YXJ0ZWQ6CisKKy0gQlJMVFRZIG9ubHkgZ2l2ZXMgYWNjZXNzIHRvIHRleHQgY29uc29sZXMuIEZvciB0aGUgcmVzdCBvZiB0aGUgV2luZG93cworICBlbnZpcm9ubWVudCwgeW91IG5lZWQgdG8gYWxzbyBpbnN0YWxsIGFuZCBydW4gTlZEQS4KKy0gRWl0aGVyIHVzZSB0aGUgQlJMVFRZIGNvbmZpZ3VyYXRvciAoYnJsdHR5Y25mLmV4ZSkgb3IgbWFudWFsbHkgdW5jb21tZW50IHRoZQorICBhcHByb3ByaWF0ZSBsaW5lcyBpbiBldGMvYnJsdHR5LmNvbmYuCistIEZvciBQeXRob24gc3VwcG9ydCAoZS5nLiBmb3IgTlZEQSksIHJ1biBCcmxhcGktJHtCUkxBUElfUkVMRUFTRX0ud2luMzIuZXhlCisgICh3aGljaCB3aWxsIGluc3RhbGwgdGhlIC5weWQgYW5kIC5lZ2ctaW5mbyBmaWxlcykuCistIEZvciBzaWdodGVkIHVzZXJzLCB1c2UgdGhlIHh3IGJyYWlsbGUgZHJpdmVyIHRvIGdldCBhIHZpcnR1YWwgYnJhaWxsZSBib3guCisiCisKK3JlYWRtZUZvb3Rlcj0iXAorCitJZiB5b3UgYXJlIGhhdmluZyBwcm9ibGVtcywgcGxlYXNlIHJ1biBkZWJ1Zy1icmx0dHkuYmF0IGFuZCBzZW5kIHVzIHRoZQorZGVidWcubG9nIGFuZCBicmx0dHkuY29uZiBmaWxlcy4KKworRG9jdW1lbnRhdGlvbiBjYW4gYmUgZm91bmQgaW4gdGhlIGRvYy8gc3ViZGlyZWN0b3J5LgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK1RlY2huaWNhbCBub3RlcyBvbiB0aGlzIGJ1aWxkOgorCistIFNvdXJjZSBSZXZpc2lvbjogJHtyZXZpc2lvbklkZW50aWZpZXJ9CistIEJSTFRUWSBWZXJzaW9uOiAke0JSTFRUWV9WRVJTSU9OfQorLSBCcmxBUEkgVmVyc2lvbjogJHtCUkxBUElfUkVMRUFTRX0KKy0gU29tZSBNaW5HVy1zcGVjaWZpYyBwYXRoIGFuZCBmaWxlIG5hbWUgY2hhbmdlcyBoYXZlIGJlZW4gbWFkZS4KKy0gVG8gbWFrZSBsaWZlIGVhc2llciBmb3IgV2luZG93cyB1c2VycywgdGhlIEJybEFQSSBzZXJ2ZXIgd2FzIG1vZGlmaWVkIHRvOgorICAqIG5vdCB1c2UgYXV0aGVudGljYXRpb24gYnkgZGVmYXVsdCAoQlJMQVBJX0RFRkFVVEggc2V0IHRvIG5vbmUpCisgICogb25seSB1c2UgbG9jYWwgc29ja2V0cyAoOjArMTI3LjAuMC4xOjAgY2hhbmdlZCB0byA6MCkKKy0gKiR7dXNiUGF0dGVybn0qIGZpbGVzIGNvbWUgZnJvbSAke3VzYk5hbWV9ICR7dXNiVmVyc2lvbn0sIHdoaWNoIGNhbiBiZSBmb3VuZCBhdDoKKyAgJHt1c2JEb3dubG9hZH0KKy0gUHl0aG9uIGJpbmRpbmdzIGFyZSBwcm92aWRlZCBieTogQnJsYXBpLSR7QlJMQVBJX1JFTEVBU0V9LndpbjMyLmV4ZQorLSBDIGJpbmRpbmdzIGFyZSBwcm92aWRlZCBpbjogaW5jbHVkZS8sIGFuZCBsaWIvCisgIEEgLmxpYiBmaWxlIGlzIHByb3ZpZGVkIGZvciBsaW5raW5nIGluIChmb3IgZXhhbXBsZSkgVmlzdWFsIEMuIFRoZW4geW91IGNhbgorICBqdXN0IHNoaXAgYmluL2JybGFwaSR7QlJMQVBJX1JFTEVBU0UlLip9LmRsbCBhbG9uZ3NpZGUgeW91ciAuZXhlIGFwcGxpY2F0aW9uLgorIgorCitjZCAiJHtidWlsZFJvb3R9IgoraW5zdGFsbEZpbGUgIkRvY3VtZW50cy9icmx0dHkuY29uZiIgImV0Yy8iCitpbnN0YWxsRmlsZSAiRHJpdmVycy9CcmxBUEkvV2luZG93RXllcy93ZWJybG9lbTEwOS5kbGwiICJXaW5kb3dFeWVzLyIKKworaW5zdGFsbEZpbGVzICJEZWJ1Zy8iIGNvbmZpZy5oIGNvbmZpZy5tayBjb25maWcubG9nCitpbnN0YWxsRmlsZXMgIkRlYnVnLyIgUHJvZ3JhbXMvKi5leGUgUHJvZ3JhbXMvKi5kbGwKKworc2V0IC0tIEJpbmRpbmdzL1B5dGhvbi9kaXN0L0JybGFwaS0ke0JSTEFQSV9SRUxFQVNFfS4qLmV4ZQoraWYgWyAiJHsjfSIgLWd0IDAgXQordGhlbgorICAgZm9yIGZpbGUKKyAgIGRvCisgICAgICBpbnN0YWxsRmlsZSAiJHtmaWxlfSIgIlB5dGhvbi8iCisgICBkb25lCitlbHNlCisgICBsb2dXYXJuaW5nICJQeXRob24gYmluZGluZ3MgaW5zdGFsbGVyIG5vdCBmb3VuZCIKK2ZpCisKK2NkICIke3NvdXJjZVJvb3R9IgoraW5zdGFsbEZpbGUgIkxJQ0VOU0UtTEdQTCIgIkxJQ0VOU0UtTEdQTC50eHQiCitpbnN0YWxsRmlsZSAiUkVBRE1FIiAiJHtkb2N1bWVudERpcmVjdG9yeX0vQlJMVFRZLnR4dCIKK2luc3RhbGxGaWxlICJEcml2ZXJzL0JyYWlsbGUvWFdpbmRvdy9VQnJhaWxsZS50dGYiICJGb250cy8iCitpbnN0YWxsRmlsZSAiRHJpdmVycy9CcmxBUEkvV2luZG93RXllcy9SRUFETUUiICIke2RvY3VtZW50RGlyZWN0b3J5fS9XaW5kb3dFeWVzLnR4dCIKK2luc3RhbGxGaWxlICIke2luZlBhdGh9IiAiYmluL2JybHR0eS0ke2luZkZpbGV9IgoraW5zdGFsbEZpbGVzICJldGMvIiBEb2N1bWVudHMvKi5jc3YKKworZm9yIGRvY3VtZW50IGluIENoYW5nZUxvZyBISVNUT1JZIFRPRE8KK2RvCisgICBpbnN0YWxsRmlsZSAiRG9jdW1lbnRzLyR7ZG9jdW1lbnR9IiAiJHtkb2N1bWVudERpcmVjdG9yeX0vJHtkb2N1bWVudH0udHh0IgorZG9uZQorCitmb3IgZG9jdW1lbnQgaW4gV2luZG93cyBCcmFpbGxlRG90cyBUZXh0VGFibGVzIENvbnRyYWN0aW9uVGFibGVzIEF0dHJpYnV0ZXNUYWJsZXMgS2V5VGFibGVzCitkbworICAgaW5zdGFsbEZpbGUgIkRvY3VtZW50cy9SRUFETUUuJHtkb2N1bWVudH0iICIke2RvY3VtZW50RGlyZWN0b3J5fS8ke2RvY3VtZW50fS50eHQiCitkb25lCisKK2ZvciByb290IGluICIke3NvdXJjZVJvb3R9IiAiJHtidWlsZFJvb3R9IgorZG8KKyAgIGNkICIke3Jvb3R9L0RvY3VtZW50cyIKKworICAgZm9yIG1hbnVhbCBpbiBNYW51YWwtQlJMVFRZIE1hbnVhbC1CcmxBUEkgQnJsQVBJcmVmCisgICBkbworICAgICAgWyAtZCAiJHttYW51YWx9IiBdIHx8IGNvbnRpbnVlCisKKyAgICAgIGZvciBmaWxlIGluICQoZmluZCAiJHttYW51YWx9IiAtdHlwZSBmIC1wcmludCkKKyAgICAgIGRvCisgICAgICAgICBuYW1lPSIke2ZpbGUjIyovfSIKKyAgICAgICAgIGV4dGVuc2lvbj0iJHtuYW1lIyMqLn0iCisKKyAgICAgICAgIGNhc2UgIiR7ZXh0ZW5zaW9ufSIKKyAgICAgICAgIGluCisgICAgICAgICAgICB0eHQgfCBodG1sIHwgaHRtIHwgZG9jIHwgcGRmKQorICAgICAgICAgICAgICAgaW5zdGFsbEZpbGUgIiR7ZmlsZX0iICIke2RvY3VtZW50RGlyZWN0b3J5fS8ke2ZpbGV9IgorICAgICAgICAgICAgICAgOzsKKworICAgICAgICAgICAgKik7OworICAgICAgICAgZXNhYworICAgICAgZG9uZQorICAgZG9uZQorZG9uZQorCitjZCAiJHtzb3VyY2VSb290fS9Ecml2ZXJzIgorZm9yIGRvY3VtZW50IGluICQoZmluZCBCcmFpbGxlIFNwZWVjaCAtdHlwZSBmIC1uYW1lICJSRUFETUUqIiAtcHJpbnQpCitkbworICAgaW5zdGFsbEZpbGUgIiR7ZG9jdW1lbnR9IiAiJHtkb2N1bWVudERpcmVjdG9yeX0vRHJpdmVycy8ke2RvY3VtZW50fS50eHQiCitkb25lCisKK2NkICIke3Byb2dyYW1EaXJlY3Rvcnl9IgoraW5zdGFsbEZpbGVzICJiaW4vIiAqLmRsbCAqLmNhdAoraW5zdGFsbEZpbGVzICIvIiAqLmJhdAorCitsb2dNZXNzYWdlIHRhc2sgIlVTQiBwYWNrYWdlOiAke3VzYlBhY2thZ2V9IgoraW5zdGFsbFBhY2thZ2VzICIke3VzYldpbmRvd3NQYWNrYWdlc1tAXX0iCisKK2NkIC9taW5ndy9iaW4KK2ZvciBmaWxlIGluIGxpYmdjY19zX2R3Mi0xLmRsbCBsaWJpY29udi0yLmRsbCBsaWJwZGN1cnNlcyouZGxsIGxpYmludGwtOC5kbGwKK2RvCisgICBpbnN0YWxsRmlsZSAiJHtmaWxlfSIgImJpbi8iCitkb25lCisKK2NkICIke2luc3RhbGxSb290fSIKK3JtIC1mICJiaW4vYnJsdHR5LWNvbmZpZyIKK3JtIC1mICJldGMvYnJsYXBpLmtleSIKKworZWNobyAiJHtyZXZpc2lvbklkZW50aWZpZXJ9IiA+IlJFVklTSU9OLnR4dCIKKworZm9yIHNvdXJjZSBpbiAkKGZpbmQgInNoYXJlL21hbiIgLXR5cGUgZiAtbmFtZSAiKi5bMS05XSIgLXByaW50KQorZG8KKyAgIFsgLXogIiR7Z3JvZmZQYXRofSIgXSB8fCB7CisgICAgICB0YXJnZXQ9IiR7c291cmNlJS4qfS50eHQiCisKKyAgICAgICIke2dyb2ZmUGF0aH0iIC1UIGFzY2lpIC1tYW5kb2MgMj4vZGV2L251bGwgPCIke3NvdXJjZX0iIHwKKyAgICAgIHNlZCAtZSAncy8nJCdcMDMzJydcW1swLTldKm0vL2cnID4iJHt0YXJnZXR9IgorCisgICAgICBbIC1zICIke3RhcmdldH0iIF0gfHwgcm0gLWYgIiR7dGFyZ2V0fSIKKyAgIH0KKworICAgcm0gLWYgIiR7c291cmNlfSIKK2RvbmUKKworY2F0ID4iUkVBRE1FLnR4dCIgPDxFTkQtT0YtUkVBRE1FCiske3JlYWRtZUhlYWRlcn0KKy0gVG8gcmVnaXN0ZXIgQlJMVFRZIGFzIGEgc2VydmljZSBzbyB0aGF0IGl0IHdpbGwgZ2V0IHN0YXJ0ZWQgYXV0b21hdGljYWxseSBhdAorICBib290LCBydW4gZW5hYmxlLWJybGFwaS5iYXQuIFRvIHVucmVnaXN0ZXIgaXQsIHJ1biBkaXNhYmxlLWJybGFwaS5iYXQuCistIElmIHlvdXIgYnJhaWxsZSBkZXZpY2UgdXNlcyBhIFVTQiBjb25uZWN0aW9uOgorICAqIElmIHlvdSBlaXRoZXIgY2Fubm90LCBvciB3b3VsZCBwcmVmZXIgbm90IHRvLCBpbnN0YWxsIGl0cworICAgIG1hbnVmYWN0dXJlcidzIGRyaXZlciwgdGhlbiB5b3UgY2FuIHNlbGVjdCAiVVNCOiIsIGFuZCBpbnN0YWxsCisgICAgdGhlICR7dXNiTmFtZX0gZHJpdmVyIGJ5IGRvaW5nIG9uZSBvZiB0aGUgZm9sbG93aW5nOgorICAgICsgcmlnaHQtY2xpY2tpbmcgb24gYmluL2JybHR0eS0ke3VzYlBhY2thZ2V9LmluZiBhbmQgc2VsZWN0aW5nIGluc3RhbGwKKyAgICArIGFuc3dlcmluZyB5ZXMgdG8gdGhlIHNldHVwIHByb21wdCBmb3IgaW5zdGFsbGluZyB0aGUgJHt1c2JOYW1lfSBkcml2ZXIKKyAgKiBJZiB5b3UgaGF2ZSBpbnN0YWxsZWQgaXRzIG1hbnVmYWN0dXJlcidzIGRyaXZlciwgYW5kIGlmIHRoYXQgZHJpdmVyIGRlZmluZXMKKyAgICBhIHZpcnR1YWwgQ09NIHBvcnQsIHRoZW4gc2VsZWN0IHRoYXQgdmlydHVhbCBDT00gcG9ydC4KKyAgKiBJZiB5b3UgbmVlZCB0byBpbnN0YWxsIGl0cyBtYW51ZmFjdHVyZXIncyBkcml2ZXIsIGJ1dAorICAgIHRoYXQgZHJpdmVyIGRvZXMgbm90IGRlZmluZSBhIHZpcnR1YWwgQ09NIHBvcnQsIHRoZW4gCiske3VzYkZpbHRlcn0KKy0gSWYgeW91ciBicmFpbGxlIGRldmljZSB1c2VzIGEgc2VyaWFsIGNvbm5lY3Rpb24sIG9yIGlmIGl0IGlzIGNvbm5lY3RlZCB2aWEgYQorICBzZXJpYWwgdG8gVVNCIGNvbnZlcnRlciwgdGhlbiBzZWxlY3QgdGhlIGNvcnJlY3QgQ09NIHBvcnQuIE1ha2Ugc3VyZSB0bworICBzZWxlY3QgdGhlIGNvcnJlY3QgYnJhaWxsZSBkcml2ZXIgYXMgd2VsbCwgYmVjYXVzZSBzZXJpYWwgYXV0b2RldGVjdGlvbiBtYXkKKyAgYnJpY2sgc29tZSBkZXZpY2VzLgorLSBJZiB5b3VyIGJyYWlsbGUgZGV2aWNlIHVzZXMgYSBCbHVldG9vdGggY29ubmVjdGlvbiwgeW91IGNhbiBlaXRoZXIgdXNlIHRoZQorICBXaW5kb3dzIEJsdWV0b290aCBmYWNpbGl0aWVzIHRvIGNyZWF0ZSBhIHZpcnR1YWwgQ09NIHBvcnQgd2hpY2ggeW91IGNhbiB0aGVuCisgIHNlbGVjdCwgb3IgbWFudWFsbHkgY29uZmlndXJlIHRoZSBicmFpbGxlLWRldmljZSBsaW5lIGluIGJybHR0eS5jb25mLgorJHtyZWFkbWVGb290ZXJ9CitFTkQtT0YtUkVBRE1FCisKK2lmIFsgLW4gIiR7bGliUGF0aH0iIF0KK3RoZW4KKyAgIGNkICIke2luc3RhbGxSb290fS9saWIiCisgICAiJHtsaWJQYXRofSIgLy9ub2xvZ28gL2RlZjpicmxhcGkuZGVmIC9uYW1lOmJybGFwaS0ke0JSTEFQSV9WRVJTSU9OfS5kbGwgL291dDpicmxhcGkubGliIC9tYWNoaW5lOng4NgorZWxzZQorICAgbG9nV2FybmluZyAiaW1wb3J0IGxpYnJhcnkgbm90IGNyZWF0YWJsZSIKK2ZpCisKK2NkICIke2luc3RhbGxSb290fS8uLiIKK2NhdCA+IlJFQURNRS50eHQiIDw8RU5ELU9GLVJFQURNRQorJHtyZWFkbWVIZWFkZXJ9Ciske3JlYWRtZUZvb3Rlcn0KK0VORC1PRi1SRUFETUUKKworIyBmb3IgdGhlIGluc3RhbGxlciBidXQgYmVmb3JlIHRleHQgZmlsZSBjb252ZXJzaW9uCituc2lzU2NyaXB0PSIke3VzYlBhY2thZ2V9Lm5zaSIKK25zaXNTdHJpbmdzPSJuc2lzdHJpbmdzLnR4dCIKKworZm9yIGZpbGUgaW4gIiR7bnNpc1NjcmlwdH0iICJicmx0dHkubnNpIiAiJHtuc2lzU3RyaW5nc30iCitkbworICAgcGF0aD0iJHtwcm9ncmFtRGlyZWN0b3J5fS8ke2ZpbGV9IgorCisgICBpZiBbIC1mICIke3BhdGh9IiBdCisgICB0aGVuCisgICAgICBjcCAiJHtwYXRofSIgLgorICAgZWxzZQorICAgICAgbG9nV2FybmluZyAiaW5zdGFsbGVyIHNvdXJjZSBmaWxlIG5vdCBmb3VuZDogJHtmaWxlfSIKKyAgICAgIG5zaXNSb290PSIiCisgICBmaQorZG9uZQorCitpZiBbIC1uICIke2Foa1Jvb3R9IiBdCit0aGVuCisgICBsb2dNZXNzYWdlIHRhc2sgImNyZWF0aW5nIGNvbmZpZ3VyYXRvciIKKyAgIGNkICIke2luc3RhbGxSb290fSIKKyAgIGNwICIke3Byb2dyYW1EaXJlY3Rvcnl9L2JybHR0eWNuZi5haGsiIC4KKyAgICIke2Foa1Jvb3R9L0NvbXBpbGVyL0FoazJFeGUuZXhlIiAvL2luIGJybHR0eWNuZi5haGsgLy9vdXQgYnJsdHR5Y25mLmV4ZQorICAgcm0gYnJsdHR5Y25mLmFoaworZWxzZQorICAgbG9nV2FybmluZyAiY29uZmlndXJhdG9yIG5vdCBjcmVhdGFibGUiCitmaQorCitpZiBbIC1uICIke3VuaXgyZG9zUGF0aH0iIF0KK3RoZW4KKyAgIGxvZ01lc3NhZ2UgdGFzayAiY29udmVydGluZyB0ZXh0IGZpbGVzIgorICAgY2QgIiR7aW5zdGFsbFJvb3R9Ly4uIgorCisgICBmaW5kIC4gLXByaW50IHwKKyAgICAgIHdoaWxlIHJlYWQgcGF0aAorICAgICAgZG8KKyAgICAgICAgIGhhbmRsZT0iJHtwYXRoIy59IgorICAgICAgICAgWyAtbiAiJHtoYW5kbGV9IiBdIHx8IGNvbnRpbnVlCisgICAgICAgICBoYW5kbGU9IiR7aGFuZGxlIy99IgorCisgICAgICAgICBuYW1lPSIke3BhdGgjIyovfSIKKyAgICAgICAgIGV4dGVuc2lvbj0iJHtuYW1lIyMqLn0iCisKKyAgICAgICAgIGlmIFsgLWYgIiR7cGF0aH0iIF0KKyAgICAgICAgIHRoZW4KKyAgICAgICAgICAgIGlmIFsgIiR7ZXh0ZW5zaW9ufSIgIT0gIiR7bmFtZX0iIF0KKyAgICAgICAgICAgIHRoZW4KKyAgICAgICAgICAgICAgIGNhc2UgIiR7ZXh0ZW5zaW9ufSIKKyAgICAgICAgICAgICAgIGluCisgICAgICAgICAgICAgICAgICBiYXNoIHwgYmF0IHwgY2F0IHwgY29uZiB8IGNzdiB8IGggfCBodG0gfCBodG1sIHwgaW5mIHwgbG9nIHwgbHVhIHwgbWsgfCBuc2kgfCBwYyB8IHBvbGljeSB8IHNoIHwgdGNsIHwgdHh0IHwgeG1sIHwgW3RjYWtddFtiaV0pCisgICAgICAgICAgICAgICAgICAgICAiJHt1bml4MmRvc1BhdGh9IiAtcSAtbyAiJHtwYXRofSIKKyAgICAgICAgICAgICAgICAgICAgIDs7CisKKyAgICAgICAgICAgICAgICAgIGEgfCBkZWYgfCBkbGwgfCBkb2MgfCBlZ2ctaW5mbyB8IGV4ZSB8IGV4cCB8IGxpYiB8IG1vIHwgcGRmIHwgcHlkIHwgc3lzIHwgdHRmKTs7CisgICAgICAgICAgICAgICAgICAqKSBsb2dXYXJuaW5nICJ1bmV4cGVjdGVkIGZpbGUgZXh0ZW5zaW9uOiAke2hhbmRsZX0iOzsKKyAgICAgICAgICAgICAgIGVzYWMKKyAgICAgICAgICAgIGZpCisgICAgICAgICBlbGlmIFsgISAtZCAiJHtwYXRofSIgXQorICAgICAgICAgdGhlbgorICAgICAgICAgICAgbG9nV2FybmluZyAidW5zdXBwb3J0ZWQgc3BlY2lhbCBmaWxlOiAke2hhbmRsZX0iCisgICAgICAgICBmaQorICAgICAgZG9uZQorZWxzZQorICAgbG9nV2FybmluZyAidGV4dCBmaWxlcyBub3QgY29udmVydGFibGUiCitmaQorCitpZiAiJHtpbnZva2VTaGVsbH0iCit0aGVuCisgICBsb2dNZXNzYWdlIHRhc2sgImludm9raW5nIHNoZWxsIgorICAgY2QgIiR7aW5zdGFsbFJvb3R9IgorICAgIiR7U0hFTEw6LS9iaW4vc2h9IiB8fCA6CitmaQorCitpZiBbIC1uICIke3ppcFBhdGh9IiBdCit0aGVuCisgICBsb2dNZXNzYWdlIHRhc2sgImNyZWF0aW5nIGFyY2hpdmUiCisgICBhcmNoaXZlRmlsZT0iJHtpbml0aWFsRGlyZWN0b3J5fS8ke2J1aWxkTmFtZX0uemlwIgorICAgcm0gLWYgIiR7YXJjaGl2ZUZpbGV9IgorICAgY2QgIiR7aW5zdGFsbFJvb3R9Ly4uIgorICAgIiR7emlwUGF0aH0iIC1xIC1BIC1yICIke2FyY2hpdmVGaWxlfSIgIiR7YnVpbGROYW1lfSIKK2Vsc2UKKyAgIGxvZ1dhcm5pbmcgImFyY2hpdmUgbm90IGNyZWF0YWJsZSIKK2ZpCisKK2lmIFsgLW4gIiR7bnNpc1Jvb3R9IiBdCit0aGVuCisgICBsb2dNZXNzYWdlIHRhc2sgImNyZWF0aW5nIGluc3RhbGxlciIKKyAgIGNkICIke2luc3RhbGxSb290fS8uLiIKKyAgIG12ICIke25zaXNTdHJpbmdzfSIgIiR7YnVpbGROYW1lfSIKKyAgIGluc3RhbGxlckZpbGU9IiR7YnVpbGROYW1lfS5leGUiCisKKyAgICIke25zaXNSb290fS9tYWtlbnNpcyIgLVYyIFwKKyAgICAgIC1EVkVSU0lPTj0iJHtidWlsZFZlcnNpb259IiBcCisgICAgICAtRERJU1RESVI9IiR7YnVpbGROYW1lfSIgXAorICAgICAgLURPVVRGSUxFPSIke2luc3RhbGxlckZpbGV9IiBcCisgICAgICAiJHtuc2lzU2NyaXB0fSIKKworICAgcm0gLWYgIiR7aW5pdGlhbERpcmVjdG9yeX0vJHtpbnN0YWxsZXJGaWxlfSIKKyAgIGNwICIke2luc3RhbGxlckZpbGV9IiAiJHtpbml0aWFsRGlyZWN0b3J5fS8ke2luc3RhbGxlckZpbGV9IgorZWxzZQorICAgbG9nV2FybmluZyAiaW5zdGFsbGVyIG5vdCBjcmVhdGFibGUiCitmaQorCisiJHtrZWVwQnVpbGR9IiB8fCB7CisgICBsb2dNZXNzYWdlIHRhc2sgImNsZWFuaW5nIHVwIgorICAgY2QgIiR7aW5pdGlhbERpcmVjdG9yeX0iCisgICBybSAtZiAtciAiJHt0ZW1wb3JhcnlEaXJlY3Rvcnl9IgorfQorCitsb2dNZXNzYWdlIHRhc2sgImRvbmUiCitleGl0IDAKZGlmZiAtLWdpdCBhL1dpbmRvd3MvbXN2Y3I5MC5kbGwgYi9XaW5kb3dzL21zdmNyOTAuZGxsCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmE2ODI0OWEKLS0tIC9kZXYvbnVsbAorKysgYi9XaW5kb3dzL21zdmNyOTAuZGxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1dpbmRvd3MvbnNpc3RyaW5ncy50eHQgYi9XaW5kb3dzL25zaXN0cmluZ3MudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ1ODYwYWUKLS0tIC9kZXYvbnVsbAorKysgYi9XaW5kb3dzL25zaXN0cmluZ3MudHh0CkBAIC0wLDAgKzEsMzIwIEBACis7IFNvbWUgdHJhbnNsYXRpb25zIGZvciB0aGUgYnJsdHR5Lm5zaSBpbnN0YWxsZXIKKztDemVjaAorTGFuZ1N0cmluZyBtc2dfV2VsY29tZVBhZ2VUaXRsZSAke0xBTkdfQ1pFQ0h9ICJJbnN0YWxhY2UgJHtQUk9EVUNUfSwgdmVyemUgJHtWRVJTSU9OfSIKK0xhbmdTdHJpbmcgbXNnX2luc2xpYnVzYjMyZmlsdGVyICR7TEFOR19DWkVDSH0gIldvdWxkIHlvdSBsaWtlIHRvIGluc3RhbGwgdGhlIExpYlVTQi1XaW4zMiBmaWx0ZXI/JFxyJFxuKG9ubHkgdXNlZnVsIGZvciBVU0IgZGV2aWNlcyBhbmQgaWYgeW91IGhhdmUgYWxyZWFkeSBpbnN0YWxsZWQgZHJpdmVycyBmcm9tIHlvdXIgbWFudWZhY3R1cmVyIGZvciB5b3VyIFVTQiBkZXZpY2UuIERvIG5vdCBpbnN0YWxsIGl0IGlmIHlvdSBhcmUgcnVubmluZyB3aW5kb3dzIDY0Yml0LCBvciBWaXN0YSwgb3IgNykiCitMYW5nU3RyaW5nIG1zZ19pbnNsaWJ1c2IzMiAke0xBTkdfQ1pFQ0h9ICJDaGNldGUgbmFpbnN0YWxvdmF0IG92bGFkYT8gTGliVVNCLVdpbjMyPyRcciRcbih1nml0ZT9u6SBqZW4gcG9rdWQgbmVt4XRlIG5haW5zdGFsb3bhbiBVU0Igb3ZsYWRhPyBkb2ThdmFu/SB2/XJvYmNlbSBwcm8gdmGaZSB6YT/temVu7SkiCitMYW5nU3RyaW5nIG1zZ19pbnNsaWJ1c2IgJHtMQU5HX0NaRUNIfSAiQ2hjZXRlIG5haW5zdGFsb3ZhdCBvdmxhZGE/IExpYlVTQiA/IgorTGFuZ1N0cmluZyBtc2dfaW5zd2ludXNiICR7TEFOR19DWkVDSH0gIkNoY2V0ZSBuYWluc3RhbG92YXQgb3ZsYWRhPyBXaW5VU0IgPyIKKworTGFuZ1N0cmluZyBzaG9ydGN1dF9icmx0dHljbmYgJChMQU5HX0NaRUNIKSAiTmFzdGF2ZW7tIEJSTFRUWSIKK0xhbmdTdHJpbmcgc2hvcnRjdXRfYnJsdHR5ZGVidWcgJChMQU5HX0NaRUNIKSAiUnVuIEJSTFRUWSBpbiBkZWJ1Z2dpbmcgbW9kZSIKK0xhbmdTdHJpbmcgc2hvcnRjdXRfaW5zc3J2ICQoTEFOR19DWkVDSCkgIkluc3RhbGFjZSBzbHWeYnkgQlJMVFRZIgorTGFuZ1N0cmluZyBzaG9ydGN1dF9ybXZzcnYgJChMQU5HX0NaRUNIKSAiT2RpbnN0YWxhY2Ugc2x1nmJ5IEJMUlRUWSIKK0xhbmdTdHJpbmcgc2hvcnRjdXRfdW5pbnN0YWxsICQoTEFOR19DWkVDSCkgIk9kaW5zdGFsYWNlIgorTGFuZ1N0cmluZyBzaG9ydGN1dF9pbnNsaWJ1c2JmaWx0ZXIgJChMQU5HX0NaRUNIKSAiSW5zdGFsbCBMaWJVU0ItV2luMzIgZmlsdGVyIgorTGFuZ1N0cmluZyBzaG9ydGN1dF91bmluc2xpYnVzYmZpbHRlciAkKExBTkdfQ1pFQ0gpICJVbmluc3RhbGwgTGliVVNCLVdpbjMyIGZpbHRlciIKK0xhbmdTdHJpbmcgc2hvcnRjdXRfaW5zbGlidXNiICQoTEFOR19DWkVDSCkgIkluc3RhbGFjZSBvdmxhZGE/ZSBMaWJVU0ItV2luMzIiCisKKztHZXJtYW4KK0xhbmdTdHJpbmcgbXNnX1dlbGNvbWVQYWdlVGl0bGUgJHtMQU5HX0dFUk1BTn0gIlNldHVwIGZvciAke1BST0RVQ1R9LCBWZXJzaW9uICR7VkVSU0lPTn0iCitMYW5nU3RyaW5nIG1zZ19pbnNsaWJ1c2IzMmZpbHRlciAke0xBTkdfR0VSTUFOfSAiV291bGQgeW91IGxpa2UgdG8gaW5zdGFsbCB0aGUgTGliVVNCLVdpbjMyIGZpbHRlcj8kXHIkXG4ob25seSB1c2VmdWwgZm9yIFVTQiBkZXZpY2VzIGFuZCBpZiB5b3UgaGF2ZSBhbHJlYWR5IGluc3RhbGxlZCBkcml2ZXJzIGZyb20geW91ciBtYW51ZmFjdHVyZXIgZm9yIHlvdXIgVVNCIGRldmljZS4gRG8gbm90IGluc3RhbGwgaXQgaWYgeW91IGFyZSBydW5uaW5nIHdpbmRvd3MgNjRiaXQsIG9yIFZpc3RhLCBvciA3KSIKK0xhbmdTdHJpbmcgbXNnX2luc2xpYnVzYjMyICR7TEFOR19HRVJNQU59ICJXb3VsZCB5b3UgbGlrZSB0byBpbnN0YWxsIHRoZSBMaWJVU0ItV2luMzIgZHJpdmVyPyRcciRcbihvbmx5IHVzZWZ1bCBpZiB5b3UgZG8gbm90IGhhdmUgaW5zdGFsbGVkIGRyaXZlcnMgZnJvbSB5b3VyIG1hbnVmYWN0dXJlciBmb3IgeW91ciBVU0IgZGV2aWNlKSIKK0xhbmdTdHJpbmcgbXNnX2luc2xpYnVzYiAke0xBTkdfR0VSTUFOfSAiV291bGQgeW91IGxpa2UgdG8gaW5zdGFsbCB0aGUgTGliVVNCIGRyaXZlcj8iCitMYW5nU3RyaW5nIG1zZ19pbnN3aW51c2IgJHtMQU5HX0dFUk1BTn0gIldvdWxkIHlvdSBsaWtlIHRvIGluc3RhbGwgdGhlIFdpblVTQiBkcml2ZXI/IgorCitMYW5nU3RyaW5nIHNob3J0Y3V0X2JybHR0eWNuZiAkKExBTkdfR0VSTUFOKSAiQ29uZmlndXJlIEJSTFRUWSIKK0xhbmdTdHJpbmcgc2hvcnRjdXRfYnJsdHR5ZGVidWcgJChMQU5HX0dFUk1BTikgIlJ1biBCUkxUVFkgaW4gZGVidWdnaW5nIG1vZGUiCitMYW5nU3RyaW5nIHNob3J0Y3V0X0luc1NydiAkKExBTkdfR0VSTUFOKSAiSW5zdGFsbCBCUkxUVFkgU2VydmljZSIKK0xhbmdTdHJpbmcgc2hvcnRjdXRfUm12U3J2ICQoTEFOR19HRVJNQU4pICJVbmluc3RhbGwgQlJMVFRZIFNlcnZpY2UiCitMYW5nU3RyaW5nIHNob3J0Y3V0X3VuaW5zdGFsbCAkKExBTkdfR0VSTUFOKSAiVW5pbnN0YWxsIgorTGFuZ1N0cmluZyBzaG9ydGN1dF9pbnNsaWJ1c2JmaWx0ZXIgJChMQU5HX0dFUk1BTikgIkluc3RhbGwgTGliVVNCLVdpbjMyIGZpbHRlciIKK0xhbmdTdHJpbmcgc2hvcnRjdXRfdW5pbnNsaWJ1c2JmaWx0ZXIgJChMQU5HX0dFUk1BTikgIlVuaW5zdGFsbCBMaWJVU0ItV2luMzIgZmlsdGVyIgorTGFuZ1N0cmluZyBzaG9ydGN1dF9pbnNsaWJ1c2IgJChMQU5HX0dFUk1BTikgIkluc3RhbGwgTGliVVNCLVdpbjMyIGRyaXZlciIKKworO0VuZ2xpc2gKK0xhbmdTdHJpbmcgbXNnX1dlbGNvbWVQYWdlVGl0bGUgJHtMQU5HX0VOR0xJU0h9ICJTZXR1cCBmb3IgJHtQUk9EVUNUfSwgVmVyc2lvbiAke1ZFUlNJT059IgorTGFuZ1N0cmluZyBtc2dfaW5zbGlidXNiMzJmaWx0ZXIgJHtMQU5HX0VOR0xJU0h9ICJXb3VsZCB5b3UgbGlrZSB0byBpbnN0YWxsIHRoZSBMaWJVU0ItV2luMzIgZmlsdGVyPyRcciRcbihvbmx5IHVzZWZ1bCBmb3IgVVNCIGRldmljZXMgYW5kIGlmIHlvdSBoYXZlIGFscmVhZHkgaW5zdGFsbGVkIGRyaXZlcnMgZnJvbSB5b3VyIG1hbnVmYWN0dXJlciBmb3IgeW91ciBVU0IgZGV2aWNlLiBEbyBub3QgaW5zdGFsbCBpdCBpZiB5b3UgYXJlIHJ1bm5pbmcgd2luZG93cyA2NGJpdCwgb3IgVmlzdGEsIG9yIDcpIgorTGFuZ1N0cmluZyBtc2dfaW5zbGlidXNiMzIgJHtMQU5HX0VOR0xJU0h9ICJXb3VsZCB5b3UgbGlrZSB0byBpbnN0YWxsIHRoZSBMaWJVU0ItV2luMzIgZHJpdmVyPyRcciRcbihvbmx5IHVzZWZ1bCBpZiB5b3UgZG8gbm90IGhhdmUgaW5zdGFsbGVkIGRyaXZlcnMgZnJvbSB5b3VyIG1hbnVmYWN0dXJlciBmb3IgeW91ciBVU0IgZGV2aWNlKSIKK0xhbmdTdHJpbmcgbXNnX2luc2xpYnVzYiAke0xBTkdfRU5HTElTSH0gIldvdWxkIHlvdSBsaWtlIHRvIGluc3RhbGwgdGhlIExpYlVTQiBkcml2ZXI/IgorTGFuZ1N0cmluZyBtc2dfaW5zd2ludXNiICR7TEFOR19FTkdMSVNIfSAiV291bGQgeW91IGxpa2UgdG8gaW5zdGFsbCB0aGUgV2luVVNCIGRyaXZlcj8iCisKK0xhbmdTdHJpbmcgc2hvcnRjdXRfYnJsdHR5Y25mICQoTEFOR19FTkdMSVNIKSAiQ29uZmlndXJlIEJSTFRUWSIKK0xhbmdTdHJpbmcgc2hvcnRjdXRfYnJsdHR5ZGVidWcgJChMQU5HX0VOR0xJU0gpICJSdW4gQlJMVFRZIGluIGRlYnVnZ2luZyBtb2RlIgorTGFuZ1N0cmluZyBzaG9ydGN1dF9pbnNzcnYgJChMQU5HX0VOR0xJU0gpICJJbnN0YWxsIEJSTFRUWSBTZXJ2aWNlIgorTGFuZ1N0cmluZyBzaG9ydGN1dF9ybXZzcnYgJChMQU5HX0VOR0xJU0gpICJVbmluc3RhbGwgQlJMVFRZIFNlcnZpY2UiCitMYW5nU3RyaW5nIHNob3J0Y3V0X3VuaW5zdGFsbCAkKExBTkdfRU5HTElTSCkgIlVuaW5zdGFsbCIKK0xhbmdTdHJpbmcgc2hvcnRjdXRfaW5zbGlidXNiZmlsdGVyICQoTEFOR19FTkdMSVNIKSAiSW5zdGFsbCBMaWJVU0ItV2luMzIgZmlsdGVyIgorTGFuZ1N0cmluZyBzaG9ydGN1dF91bmluc2xpYnVzYmZpbHRlciAkKExBTkdfRU5HTElTSCkgIlVuaW5zdGFsbCBMaWJVU0ItV2luMzIgZmlsdGVyIgorTGFuZ1N0cmluZyBzaG9ydGN1dF9pbnNsaWJ1c2IgJChMQU5HX0VOR0xJU0gpICJJbnN0YWxsIExpYlVTQi1XaW4zMiBkcml2ZXIiCisKKztTcGFuaXNoCitMYW5nU3RyaW5nIG1zZ19XZWxjb21lUGFnZVRpdGxlICR7TEFOR19TUEFOSVNIfSAiU2V0dXAgZm9yICR7UFJPRFVDVH0sIFZlcnNpb24gJHtWRVJTSU9OfSIKK0xhbmdTdHJpbmcgbXNnX2luc2xpYnVzYjMyZmlsdGVyICR7TEFOR19TUEFOSVNIfSAiV291bGQgeW91IGxpa2UgdG8gaW5zdGFsbCB0aGUgTGliVVNCLVdpbjMyIGZpbHRlcj8kXHIkXG4ob25seSB1c2VmdWwgZm9yIFVTQiBkZXZpY2VzIGFuZCBpZiB5b3UgaGF2ZSBhbHJlYWR5IGluc3RhbGxlZCBkcml2ZXJzIGZyb20geW91ciBtYW51ZmFjdHVyZXIgZm9yIHlvdXIgVVNCIGRldmljZS4gRG8gbm90IGluc3RhbGwgaXQgaWYgeW91IGFyZSBydW5uaW5nIHdpbmRvd3MgNjRiaXQsIG9yIFZpc3RhLCBvciA3KSIKK0xhbmdTdHJpbmcgbXNnX2luc2xpYnVzYjMyICR7TEFOR19TUEFOSVNIfSAiV291bGQgeW91IGxpa2UgdG8gaW5zdGFsbCB0aGUgTGliVVNCLVdpbjMyIGRyaXZlcj8kXHIkXG4ob25seSB1c2VmdWwgaWYgeW91IGRvIG5vdCBoYXZlIGluc3RhbGxlZCBkcml2ZXJzIGZyb20geW91ciBtYW51ZmFjdHVyZXIgZm9yIHlvdXIgVVNCIGRldmljZSkiCitMYW5nU3RyaW5nIG1zZ19pbnNsaWJ1c2IgJHtMQU5HX1NQQU5JU0h9ICJXb3VsZCB5b3UgbGlrZSB0byBpbnN0YWxsIHRoZSBMaWJVU0IgZHJpdmVyPyIKK0xhbmdTdHJpbmcgbXNnX2luc3dpbnVzYiAke0xBTkdfU1BBTklTSH0gIldvdWxkIHlvdSBsaWtlIHRvIGluc3RhbGwgdGhlIFdpblVTQiBkcml2ZXI/IgorCitMYW5nU3RyaW5nIHNob3J0Y3V0X2JybHR0eWNuZiAkKExBTkdfU1BBTklTSCkgIkNvbmZpZ3VyZSBCUkxUVFkiCitMYW5nU3RyaW5nIHNob3J0Y3V0X2JybHR0eWRlYnVnICQoTEFOR19TUEFOSVNIKSAiUnVuIEJSTFRUWSBpbiBkZWJ1Z2dpbmcgbW9kZSIKK0xhbmdTdHJpbmcgc2hvcnRjdXRfSW5zU3J2ICQoTEFOR19TUEFOSVNIKSAiSW5zdGFsbCBCUkxUVFkgU2VydmljZSIKK0xhbmdTdHJpbmcgc2hvcnRjdXRfUm12U3J2ICQoTEFOR19TUEFOSVNIKSAiVW5pbnN0YWxsIEJSTFRUWSBTZXJ2aWNlIgorTGFuZ1N0cmluZyBzaG9ydGN1dF91bmluc3RhbGwgJChMQU5HX1NQQU5JU0gpICJVbmluc3RhbGwiCitMYW5nU3RyaW5nIHNob3J0Y3V0X2luc2xpYnVzYmZpbHRlciAkKExBTkdfU1BBTklTSCkgIkluc3RhbGwgTGliVVNCLVdpbjMyIGZpbHRlciIKK0xhbmdTdHJpbmcgc2hvcnRjdXRfdW5pbnNsaWJ1c2JmaWx0ZXIgJChMQU5HX1NQQU5JU0gpICJVbmluc3RhbGwgTGliVVNCLVdpbjMyIGZpbHRlciIKK0xhbmdTdHJpbmcgc2hvcnRjdXRfaW5zbGlidXNiICQoTEFOR19TUEFOSVNIKSAiSW5zdGFsbCBMaWJVU0ItV2luMzIgZHJpdmVyIgorCis7RmlubmlzaAorTGFuZ1N0cmluZyBtc2dfV2VsY29tZVBhZ2VUaXRsZSAke0xBTkdfRklOTklTSH0gIlNldHVwIGZvciAke1BST0RVQ1R9LCBWZXJzaW9uICR7VkVSU0lPTn0iCitMYW5nU3RyaW5nIG1zZ19pbnNsaWJ1c2IzMmZpbHRlciAke0xBTkdfRklOTklTSH0gIldvdWxkIHlvdSBsaWtlIHRvIGluc3RhbGwgdGhlIExpYlVTQi1XaW4zMiBmaWx0ZXI/JFxyJFxuKG9ubHkgdXNlZnVsIGZvciBVU0IgZGV2aWNlcyBhbmQgaWYgeW91IGhhdmUgYWxyZWFkeSBpbnN0YWxsZWQgZHJpdmVycyBmcm9tIHlvdXIgbWFudWZhY3R1cmVyIGZvciB5b3VyIFVTQiBkZXZpY2UuIERvIG5vdCBpbnN0YWxsIGl0IGlmIHlvdSBhcmUgcnVubmluZyB3aW5kb3dzIDY0Yml0LCBvciBWaXN0YSwgb3IgNykiCitMYW5nU3RyaW5nIG1zZ19pbnNsaWJ1c2IzMiAke0xBTkdfRklOTklTSH0gIldvdWxkIHlvdSBsaWtlIHRvIGluc3RhbGwgdGhlIExpYlVTQi1XaW4zMiBkcml2ZXI/JFxyJFxuKG9ubHkgdXNlZnVsIGlmIHlvdSBkbyBub3QgaGF2ZSBpbnN0YWxsZWQgZHJpdmVycyBmcm9tIHlvdXIgbWFudWZhY3R1cmVyIGZvciB5b3VyIFVTQiBkZXZpY2UpIgorTGFuZ1N0cmluZyBtc2dfaW5zbGlidXNiICR7TEFOR19GSU5OSVNIfSAiV291bGQgeW91IGxpa2UgdG8gaW5zdGFsbCB0aGUgTGliVVNCIGRyaXZlcj8iCitMYW5nU3RyaW5nIG1zZ19pbnN3aW51c2IgJHtMQU5HX0ZJTk5JU0h9ICJXb3VsZCB5b3UgbGlrZSB0byBpbnN0YWxsIHRoZSBXaW5VU0IgZHJpdmVyPyIKKworTGFuZ1N0cmluZyBzaG9ydGN1dF9icmx0dHljbmYgJChMQU5HX0ZJTk5JU0gpICJDb25maWd1cmUgQlJMVFRZIgorTGFuZ1N0cmluZyBzaG9ydGN1dF9icmx0dHlkZWJ1ZyAkKExBTkdfRklOTklTSCkgIlJ1biBCUkxUVFkgaW4gZGVidWdnaW5nIG1vZGUiCitMYW5nU3RyaW5nIHNob3J0Y3V0X0luc1NydiAkKExBTkdfRklOTklTSCkgIkluc3RhbGwgQlJMVFRZIFNlcnZpY2UiCitMYW5nU3RyaW5nIHNob3J0Y3V0X1JtdlNydiAkKExBTkdfRklOTklTSCkgIlVuaW5zdGFsbCBCUkxUVFkgU2VydmljZSIKK0xhbmdTdHJpbmcgc2hvcnRjdXRfdW5pbnN0YWxsICQoTEFOR19GSU5OSVNIKSAiVW5pbnN0YWxsIgorTGFuZ1N0cmluZyBzaG9ydGN1dF9pbnNsaWJ1c2JmaWx0ZXIgJChMQU5HX0ZJTk5JU0gpICJJbnN0YWxsIExpYlVTQi1XaW4zMiBmaWx0ZXIiCitMYW5nU3RyaW5nIHNob3J0Y3V0X3VuaW5zbGlidXNiZmlsdGVyICQoTEFOR19GSU5OSVNIKSAiVW5pbnN0YWxsIExpYlVTQi1XaW4zMiBmaWx0ZXIiCitMYW5nU3RyaW5nIHNob3J0Y3V0X2luc2xpYnVzYiAkKExBTkdfRklOTklTSCkgIkluc3RhbGwgTGliVVNCLVdpbjMyIGRyaXZlciIKKworO0ZyZW5jaAorTGFuZ1N0cmluZyBtc2dfV2VsY29tZVBhZ2VUaXRsZSAke0xBTkdfRlJFTkNIfSAiSW5zdGFsbGF0aW9uIGRlICR7UFJPRFVDVH0sIFZlcnNpb24gJHtWRVJTSU9OfSIKK0xhbmdTdHJpbmcgbXNnX2luc2xpYnVzYjMyZmlsdGVyICR7TEFOR19GUkVOQ0h9ICJWb3VsZXotdm91cyBpbnN0YWxsZXIgbGUgZmlsdHJlIExpYlVTQi1XaW4zMiA/JFxyJFxuKHV0aWxlIHNldWxlbWVudCBwb3VyIGxlcyBwbGFnZXMgVVNCIGV0IHNpIHZvdXMgYXZleiBk6WrgIGluc3RhbGzpIGxlIHBpbG90ZSBmb3VybmkgcGFyIGxlIGNvbnN0cnVjdGV1ciBkZSB2b3RyZSB1bml06SBVU0IuIE5lIGwnaW5zdGFsbGV6IHBhcyBzaSB2b3RyZSB3aW5kb3dzIGVzdCA2NGJpdCwgb3UgVmlzdGEsIG91IDcpIgorTGFuZ1N0cmluZyBtc2dfaW5zbGlidXNiMzIgJHtMQU5HX0ZSRU5DSH0gIlZvdWxlei12b3VzIGluc3RhbGxlciBsZSBwaWxvdGUgTGliVVNCLVdpbjMyPyRcciRcbih1dGlsZSBzZXVsZW1lbnQgc2kgdm91cyBuJ2F2ZXogcGFzIGluc3RhbGzpIGxlIHBpbG90ZSBmb3VybmkgcGFyIGxlIGNvbnN0cnVjdGV1ciBkZSB2b3RyZSB1bml06SBVU0IpIgorTGFuZ1N0cmluZyBtc2dfaW5zbGlidXNiICR7TEFOR19GUkVOQ0h9ICJWb3VsZXotdm91cyBpbnN0YWxsZXIgbGUgcGlsb3RlIExpYlVTQiA/IgorTGFuZ1N0cmluZyBtc2dfaW5zd2ludXNiICR7TEFOR19GUkVOQ0h9ICJWb3VsZXotdm91cyBpbnN0YWxsZXIgbGUgcGlsb3RlIFdpblVTQiA/IgorCitMYW5nU3RyaW5nIHNob3J0Y3V0X2JybHR0eWNuZiAkKExBTkdfRlJFTkNIKSAiQ29uZmlndXJlciBCUkxUVFkiCitMYW5nU3RyaW5nIHNob3J0Y3V0X2JybHR0eWRlYnVnICQoTEFOR19GUkVOQ0gpICJMYW5jZXIgQlJMVFRZIGVuIG1vZGUgZGVidWciCitMYW5nU3RyaW5nIHNob3J0Y3V0X0luc1NydiAkKExBTkdfRlJFTkNIKSAiSW5zdGFsbGVyIGxlIFNlcnZpY2UgQlJMVFRZIgorTGFuZ1N0cmluZyBzaG9ydGN1dF9SbXZTcnYgJChMQU5HX0ZSRU5DSCkgIkTpc2luc3RhbGxlciBsZSBTZXJ2aWNlIEJSTFRUWSIKK0xhbmdTdHJpbmcgc2hvcnRjdXRfdW5pbnN0YWxsICQoTEFOR19GUkVOQ0gpICJE6XNpbnN0YWxsZXIiCitMYW5nU3RyaW5nIHNob3J0Y3V0X2luc2xpYnVzYmZpbHRlciAkKExBTkdfRlJFTkNIKSAiSW5zdGFsbGVyIGxlIGZpbHRyZSBMaWJVU0ItV2luMzIiCitMYW5nU3RyaW5nIHNob3J0Y3V0X3VuaW5zbGlidXNiZmlsdGVyICQoTEFOR19GRVJOQ0gpICJE6XNpbnN0YWxsZXIgbGUgZmlsdHJlIExpYlVTQi1XaW4zMiIKK0xhbmdTdHJpbmcgc2hvcnRjdXRfaW5zbGlidXNiICQoTEFOR19GUkVOQ0gpICJJbnN0YWxsZXIgbGUgcGlsb3RlIExpYlVTQi1XaW4zMiIKKworO0dhbGljaWFuCitMYW5nU3RyaW5nIG1zZ19XZWxjb21lUGFnZVRpdGxlICR7TEFOR19HQUxJQ0lBTn0gIlNldHVwIGZvciAke1BST0RVQ1R9LCBWZXJzaW9uICR7VkVSU0lPTn0iCitMYW5nU3RyaW5nIG1zZ19pbnNsaWJ1c2IzMmZpbHRlciAke0xBTkdfR0FMSUNJQU59ICJXb3VsZCB5b3UgbGlrZSB0byBpbnN0YWxsIHRoZSBMaWJVU0ItV2luMzIgZmlsdGVyPyRcciRcbihvbmx5IHVzZWZ1bCBmb3IgVVNCIGRldmljZXMgYW5kIGlmIHlvdSBoYXZlIGFscmVhZHkgaW5zdGFsbGVkIGRyaXZlcnMgZnJvbSB5b3VyIG1hbnVmYWN0dXJlciBmb3IgeW91ciBVU0IgZGV2aWNlLiBEbyBub3QgaW5zdGFsbCBpdCBpZiB5b3UgYXJlIHJ1bm5pbmcgd2luZG93cyA2NGJpdCwgb3IgVmlzdGEsIG9yIDcpIgorTGFuZ1N0cmluZyBtc2dfaW5zbGlidXNiMzIgJHtMQU5HX0dBTElDSUFOfSAiV291bGQgeW91IGxpa2UgdG8gaW5zdGFsbCB0aGUgTGliVVNCLVdpbjMyIGRyaXZlcj8kXHIkXG4ob25seSB1c2VmdWwgaWYgeW91IGRvIG5vdCBoYXZlIGluc3RhbGxlZCBkcml2ZXJzIGZyb20geW91ciBtYW51ZmFjdHVyZXIgZm9yIHlvdXIgVVNCIGRldmljZSkiCitMYW5nU3RyaW5nIG1zZ19pbnNsaWJ1c2IgJHtMQU5HX0dBTElDSUFOfSAiV291bGQgeW91IGxpa2UgdG8gaW5zdGFsbCB0aGUgTGliVVNCIGRyaXZlcj8iCitMYW5nU3RyaW5nIG1zZ19pbnN3aW51c2IgJHtMQU5HX0dBTElDSUFOfSAiV291bGQgeW91IGxpa2UgdG8gaW5zdGFsbCB0aGUgV2luVVNCIGRyaXZlcj8iCisKK0xhbmdTdHJpbmcgc2hvcnRjdXRfYnJsdHR5Y25mICQoTEFOR19HQUxJQ0lBTikgIkNvbmZpZ3VyZSBCUkxUVFkiCitMYW5nU3RyaW5nIHNob3J0Y3V0X2JybHR0eWRlYnVnICQoTEFOR19HQUxJQ0lBTikgIlJ1biBCUkxUVFkgaW4gZGVidWdnaW5nIG1vZGUiCitMYW5nU3RyaW5nIHNob3J0Y3V0X0luc1NydiAkKExBTkdfR0FMSUNJQU4pICJJbnN0YWxsIEJSTFRUWSBTZXJ2aWNlIgorTGFuZ1N0cmluZyBzaG9ydGN1dF9SbXZTcnYgJChMQU5HX0dBTElDSUFOKSAiVW5pbnN0YWxsIEJSTFRUWSBTZXJ2aWNlIgorTGFuZ1N0cmluZyBzaG9ydGN1dF91bmluc3RhbGwgJChMQU5HX0dBTElDSUFOKSAiVW5pbnN0YWxsIgorTGFuZ1N0cmluZyBzaG9ydGN1dF9pbnNsaWJ1c2JmaWx0ZXIgJChMQU5HX0dBTElDSUFOKSAiSW5zdGFsbCBMaWJVU0ItV2luMzIgZmlsdGVyIgorTGFuZ1N0cmluZyBzaG9ydGN1dF91bmluc2xpYnVzYmZpbHRlciAkKExBTkdfR0FMSUNJQU4pICJVbmluc3RhbGwgTGliVVNCLVdpbjMyIGZpbHRlciIKK0xhbmdTdHJpbmcgc2hvcnRjdXRfaW5zbGlidXNiICQoTEFOR19HQUxJQ0lBTikgIkluc3RhbGwgTGliVVNCLVdpbjMyIGRyaXZlciIKKworO0Nyb2F0aWFuCitMYW5nU3RyaW5nIG1zZ19XZWxjb21lUGFnZVRpdGxlICR7TEFOR19DUk9BVElBTn0gIlNldHVwIGZvciAke1BST0RVQ1R9LCBWZXJzaW9uICR7VkVSU0lPTn0iCitMYW5nU3RyaW5nIG1zZ19pbnNsaWJ1c2IzMmZpbHRlciAke0xBTkdfQ1JPQVRJQU59ICJXb3VsZCB5b3UgbGlrZSB0byBpbnN0YWxsIHRoZSBMaWJVU0ItV2luMzIgZmlsdGVyPyRcciRcbihvbmx5IHVzZWZ1bCBmb3IgVVNCIGRldmljZXMgYW5kIGlmIHlvdSBoYXZlIGFscmVhZHkgaW5zdGFsbGVkIGRyaXZlcnMgZnJvbSB5b3VyIG1hbnVmYWN0dXJlciBmb3IgeW91ciBVU0IgZGV2aWNlLiBEbyBub3QgaW5zdGFsbCBpdCBpZiB5b3UgYXJlIHJ1bm5pbmcgd2luZG93cyA2NGJpdCwgb3IgVmlzdGEsIG9yIDcpIgorTGFuZ1N0cmluZyBtc2dfaW5zbGlidXNiMzIgJHtMQU5HX0NST0FUSUFOfSAiV291bGQgeW91IGxpa2UgdG8gaW5zdGFsbCB0aGUgTGliVVNCLVdpbjMyIGRyaXZlcj8kXHIkXG4ob25seSB1c2VmdWwgaWYgeW91IGRvIG5vdCBoYXZlIGluc3RhbGxlZCBkcml2ZXJzIGZyb20geW91ciBtYW51ZmFjdHVyZXIgZm9yIHlvdXIgVVNCIGRldmljZSkiCitMYW5nU3RyaW5nIG1zZ19pbnNsaWJ1c2IgJHtMQU5HX0NST0FUSUFOfSAiV291bGQgeW91IGxpa2UgdG8gaW5zdGFsbCB0aGUgTGliVVNCIGRyaXZlcj8iCitMYW5nU3RyaW5nIG1zZ19pbnN3aW51c2IgJHtMQU5HX0NST0FUSUFOfSAiV291bGQgeW91IGxpa2UgdG8gaW5zdGFsbCB0aGUgV2luVVNCIGRyaXZlcj8iCisKK0xhbmdTdHJpbmcgc2hvcnRjdXRfYnJsdHR5Y25mICQoTEFOR19DUk9BVElBTikgIkNvbmZpZ3VyZSBCUkxUVFkiCitMYW5nU3RyaW5nIHNob3J0Y3V0X2JybHR0eWRlYnVnICQoTEFOR19DUk9BVElBTikgIlJ1biBCUkxUVFkgaW4gZGVidWdnaW5nIG1vZGUiCitMYW5nU3RyaW5nIHNob3J0Y3V0X2luc3NydiAkKExBTkdfQ1JPQVRJQU4pICJJbnN0YWxsIEJSTFRUWSBTZXJ2aWNlIgorTGFuZ1N0cmluZyBzaG9ydGN1dF9ybXZzcnYgJChMQU5HX0NST0FUSUFOKSAiVW5pbnN0YWxsIEJSTFRUWSBTZXJ2aWNlIgorTGFuZ1N0cmluZyBzaG9ydGN1dF91bmluc3RhbGwgJChMQU5HX0NST0FUSUFOKSAiVW5pbnN0YWxsIgorTGFuZ1N0cmluZyBzaG9ydGN1dF9pbnNsaWJ1c2JmaWx0ZXIgJChMQU5HX0NST0FUSUFOKSAiSW5zdGFsbCBMaWJVU0ItV2luMzIgZmlsdGVyIgorTGFuZ1N0cmluZyBzaG9ydGN1dF91bmluc2xpYnVzYmZpbHRlciAkKExBTkdfQ1JPQVRJQU4pICJVbmluc3RhbGwgTGliVVNCLVdpbjMyIGZpbHRlciIKK0xhbmdTdHJpbmcgc2hvcnRjdXRfaW5zbGlidXNiICQoTEFOR19DUk9BVElBTikgIkluc3RhbGwgTGliVVNCLVdpbjMyIGRyaXZlciIKKworO0h1bmdhcmlhbgorTGFuZ1N0cmluZyBtc2dfV2VsY29tZVBhZ2VUaXRsZSAke0xBTkdfSFVOR0FSSUFOfSAiU2V0dXAgZm9yICR7UFJPRFVDVH0sIFZlcnNpb24gJHtWRVJTSU9OfSIKK0xhbmdTdHJpbmcgbXNnX2luc2xpYnVzYjMyZmlsdGVyICR7TEFOR19IVUdBUklBTn0gIldvdWxkIHlvdSBsaWtlIHRvIGluc3RhbGwgdGhlIExpYlVTQi1XaW4zMiBmaWx0ZXI/JFxyJFxuKG9ubHkgdXNlZnVsIGZvciBVU0IgZGV2aWNlcyBhbmQgaWYgeW91IGhhdmUgYWxyZWFkeSBpbnN0YWxsZWQgZHJpdmVycyBmcm9tIHlvdXIgbWFudWZhY3R1cmVyIGZvciB5b3VyIFVTQiBkZXZpY2UuIERvIG5vdCBpbnN0YWxsIGl0IGlmIHlvdSBhcmUgcnVubmluZyB3aW5kb3dzIDY0Yml0LCBvciBWaXN0YSwgb3IgNykiCitMYW5nU3RyaW5nIG1zZ19pbnNsaWJ1c2IzMiAke0xBTkdfSFVOR0FSSUFOfSAiV291bGQgeW91IGxpa2UgdG8gaW5zdGFsbCB0aGUgTGliVVNCLVdpbjMyIGRyaXZlcj8kXHIkXG4ob25seSB1c2VmdWwgaWYgeW91IGRvIG5vdCBoYXZlIGluc3RhbGxlZCBkcml2ZXJzIGZyb20geW91ciBtYW51ZmFjdHVyZXIgZm9yIHlvdXIgVVNCIGRldmljZSkiCitMYW5nU3RyaW5nIG1zZ19pbnNsaWJ1c2IgJHtMQU5HX0hVTkdBUklBTn0gIldvdWxkIHlvdSBsaWtlIHRvIGluc3RhbGwgdGhlIExpYlVTQiBkcml2ZXI/IgorTGFuZ1N0cmluZyBtc2dfaW5zd2ludXNiICR7TEFOR19IVU5HQVJJQU59ICJXb3VsZCB5b3UgbGlrZSB0byBpbnN0YWxsIHRoZSBXaW5VU0IgZHJpdmVyPyIKKworTGFuZ1N0cmluZyBzaG9ydGN1dF9icmx0dHljbmYgJChMQU5HX0hVTkdBUklBTikgIkNvbmZpZ3VyZSBCUkxUVFkiCitMYW5nU3RyaW5nIHNob3J0Y3V0X2JybHR0eWRlYnVnICQoTEFOR19IVU5HQVJJQU4pICJSdW4gQlJMVFRZIGluIGRlYnVnZ2luZyBtb2RlIgorTGFuZ1N0cmluZyBzaG9ydGN1dF9pbnNzcnYgJChMQU5HX0hVTkdBUklBTikgIkluc3RhbGwgQlJMVFRZIFNlcnZpY2UiCitMYW5nU3RyaW5nIHNob3J0Y3V0X3JtdnNydiAkKExBTkdfSFVOR0FSSUFOKSAiVW5pbnN0YWxsIEJSTFRUWSBTZXJ2aWNlIgorTGFuZ1N0cmluZyBzaG9ydGN1dF91bmluc3RhbGwgJChMQU5HX0hVTkdBUklBTikgIlVuaW5zdGFsbCIKK0xhbmdTdHJpbmcgc2hvcnRjdXRfaW5zbGlidXNiZmlsdGVyICQoTEFOR19IVU5HQVJJQU4pICJJbnN0YWxsIExpYlVTQi1XaW4zMiBmaWx0ZXIiCitMYW5nU3RyaW5nIHNob3J0Y3V0X3VuaW5zbGlidXNiZmlsdGVyICQoTEFOR19IVUdBUklBTikgIlVuaW5zdGFsbCBMaWJVU0ItV2luMzIgZmlsdGVyIgorTGFuZ1N0cmluZyBzaG9ydGN1dF9pbnNsaWJ1c2IgJChMQU5HX0hVTkdBUklBTikgIkluc3RhbGwgTGliVVNCLVdpbjMyIGRyaXZlciIKKworO0l0YWxpYW4KK0xhbmdTdHJpbmcgbXNnX1dlbGNvbWVQYWdlVGl0bGUgJHtMQU5HX0lUQUxJQU59ICJTZXR1cCBmb3IgJHtQUk9EVUNUfSwgVmVyc2lvbiAke1ZFUlNJT059IgorTGFuZ1N0cmluZyBtc2dfaW5zbGlidXNiMzJmaWx0ZXIgJHtMQU5HX0lUQUxJQU59ICJXb3VsZCB5b3UgbGlrZSB0byBpbnN0YWxsIHRoZSBMaWJVU0ItV2luMzIgZmlsdGVyPyRcciRcbihvbmx5IHVzZWZ1bCBmb3IgVVNCIGRldmljZXMgYW5kIGlmIHlvdSBoYXZlIGFscmVhZHkgaW5zdGFsbGVkIGRyaXZlcnMgZnJvbSB5b3VyIG1hbnVmYWN0dXJlciBmb3IgeW91ciBVU0IgZGV2aWNlLiBEbyBub3QgaW5zdGFsbCBpdCBpZiB5b3UgYXJlIHJ1bm5pbmcgd2luZG93cyA2NGJpdCwgb3IgVmlzdGEsIG9yIDcpIgorTGFuZ1N0cmluZyBtc2dfaW5zbGlidXNiMzIgJHtMQU5HX0lUQUxJQU59ICJXb3VsZCB5b3UgbGlrZSB0byBpbnN0YWxsIHRoZSBMaWJVU0ItV2luMzIgZHJpdmVyPyRcciRcbihvbmx5IHVzZWZ1bCBpZiB5b3UgZG8gbm90IGhhdmUgaW5zdGFsbGVkIGRyaXZlcnMgZnJvbSB5b3VyIG1hbnVmYWN0dXJlciBmb3IgeW91ciBVU0IgZGV2aWNlKSIKK0xhbmdTdHJpbmcgbXNnX2luc2xpYnVzYiAke0xBTkdfSVRBTElBTn0gIldvdWxkIHlvdSBsaWtlIHRvIGluc3RhbGwgdGhlIExpYlVTQiBkcml2ZXI/IgorTGFuZ1N0cmluZyBtc2dfaW5zd2ludXNiICR7TEFOR19JVEFMSUFOfSAiV291bGQgeW91IGxpa2UgdG8gaW5zdGFsbCB0aGUgV2luVVNCIGRyaXZlcj8iCisKK0xhbmdTdHJpbmcgc2hvcnRjdXRfYnJsdHR5Y25mICQoTEFOR19JVEFMSUFOKSAiQ29uZmlndXJlIEJSTFRUWSIKK0xhbmdTdHJpbmcgc2hvcnRjdXRfYnJsdHR5ZGVidWcgJChMQU5HX0lUQUxJQU4pICJSdW4gQlJMVFRZIGluIGRlYnVnZ2luZyBtb2RlIgorTGFuZ1N0cmluZyBzaG9ydGN1dF9pbnNzcnYgJChMQU5HX0lUQUxJQU4pICJJbnN0YWxsIEJSTFRUWSBTZXJ2aWNlIgorTGFuZ1N0cmluZyBzaG9ydGN1dF9ybXZzcnYgJChMQU5HX0lUQUxJQU4pICJVbmluc3RhbGwgQlJMVFRZIFNlcnZpY2UiCitMYW5nU3RyaW5nIHNob3J0Y3V0X3VuaW5zdGFsbCAkKExBTkdfSVRBTElBTikgIlVuaW5zdGFsbCIKK0xhbmdTdHJpbmcgc2hvcnRjdXRfaW5zbGlidXNiZmlsdGVyICQoTEFOR19JVEFMSUFOKSAiSW5zdGFsbCBMaWJVU0ItV2luMzIgZmlsdGVyIgorTGFuZ1N0cmluZyBzaG9ydGN1dF91bmluc2xpYnVzYmZpbHRlciAkKExBTkdfSVRBTElBTikgIlVuaW5zdGFsbCBMaWJVU0ItV2luMzIgZmlsdGVyIgorTGFuZ1N0cmluZyBzaG9ydGN1dF9pbnNsaWJ1c2IgJChMQU5HX0lUQUxJQU4pICJJbnN0YWxsIExpYlVTQi1XaW4zMiBkcml2ZXIiCisKKztKYXBhbmVzZQorTGFuZ1N0cmluZyBtc2dfV2VsY29tZVBhZ2VUaXRsZSAke0xBTkdfSkFQQU5FU0V9ICJTZXR1cCBmb3IgJHtQUk9EVUNUfSwgVmVyc2lvbiAke1ZFUlNJT059IgorTGFuZ1N0cmluZyBtc2dfaW5zbGlidXNiMzJmaWx0ZXIgJHtMQU5HX0pBUEFORVNFfSAiV291bGQgeW91IGxpa2UgdG8gaW5zdGFsbCB0aGUgTGliVVNCLVdpbjMyIGZpbHRlcj8kXHIkXG4ob25seSB1c2VmdWwgZm9yIFVTQiBkZXZpY2VzIGFuZCBpZiB5b3UgaGF2ZSBhbHJlYWR5IGluc3RhbGxlZCBkcml2ZXJzIGZyb20geW91ciBtYW51ZmFjdHVyZXIgZm9yIHlvdXIgVVNCIGRldmljZS4gRG8gbm90IGluc3RhbGwgaXQgaWYgeW91IGFyZSBydW5uaW5nIHdpbmRvd3MgNjRiaXQsIG9yIFZpc3RhLCBvciA3KSIKK0xhbmdTdHJpbmcgbXNnX2luc2xpYnVzYjMyICR7TEFOR19KQVBBTkVTRX0gIldvdWxkIHlvdSBsaWtlIHRvIGluc3RhbGwgdGhlIExpYlVTQi1XaW4zMiBkcml2ZXI/JFxyJFxuKG9ubHkgdXNlZnVsIGlmIHlvdSBkbyBub3QgaGF2ZSBpbnN0YWxsZWQgZHJpdmVycyBmcm9tIHlvdXIgbWFudWZhY3R1cmVyIGZvciB5b3VyIFVTQiBkZXZpY2UpIgorTGFuZ1N0cmluZyBtc2dfaW5zbGlidXNiICR7TEFOR19KQVBBTkVTRX0gIldvdWxkIHlvdSBsaWtlIHRvIGluc3RhbGwgdGhlIExpYlVTQiBkcml2ZXI/IgorTGFuZ1N0cmluZyBtc2dfaW5zd2ludXNiICR7TEFOR19KQVBBTkVTRX0gIldvdWxkIHlvdSBsaWtlIHRvIGluc3RhbGwgdGhlIFdpblVTQiBkcml2ZXI/IgorCitMYW5nU3RyaW5nIHNob3J0Y3V0X2JybHR0eWNuZiAkKExBTkdfSkFQQU5FU0UpICJDb25maWd1cmUgQlJMVFRZIgorTGFuZ1N0cmluZyBzaG9ydGN1dF9icmx0dHlkZWJ1ZyAkKExBTkdfSkFQQU5FU0UpICJSdW4gQlJMVFRZIGluIGRlYnVnZ2luZyBtb2RlIgorTGFuZ1N0cmluZyBzaG9ydGN1dF9pbnNzcnYgJChMQU5HX0pBUEFORVNFKSAiSW5zdGFsbCBCUkxUVFkgU2VydmljZSIKK0xhbmdTdHJpbmcgc2hvcnRjdXRfcm12c3J2ICQoTEFOR19KQVBBTkVTRSkgIlVuaW5zdGFsbCBCUkxUVFkgU2VydmljZSIKK0xhbmdTdHJpbmcgc2hvcnRjdXRfdW5pbnN0YWxsICQoTEFOR19KQVBBTkVTRSkgIlVuaW5zdGFsbCIKK0xhbmdTdHJpbmcgc2hvcnRjdXRfaW5zbGlidXNiZmlsdGVyICQoTEFOR19KQVBBTkVTRSkgIkluc3RhbGwgTGliVVNCLVdpbjMyIGZpbHRlciIKK0xhbmdTdHJpbmcgc2hvcnRjdXRfdW5pbnNsaWJ1c2JmaWx0ZXIgJChMQU5HX0pBUEFORVNFKSAiVW5pbnN0YWxsIExpYlVTQi1XaW4zMiBmaWx0ZXIiCitMYW5nU3RyaW5nIHNob3J0Y3V0X2luc2xpYnVzYiAkKExBTkdfSkFQQU5FU0UpICJJbnN0YWxsIExpYlVTQi1XaW4zMiBkcml2ZXIiCisKKztQb2xpc2gKK0xhbmdTdHJpbmcgbXNnX1dlbGNvbWVQYWdlVGl0bGUgJHtMQU5HX1BPTElTSH0gIlNldHVwIGZvciAke1BST0RVQ1R9LCBWZXJzaW9uICR7VkVSU0lPTn0iCitMYW5nU3RyaW5nIG1zZ19pbnNsaWJ1c2IzMmZpbHRlciAke0xBTkdfUE9MSVNIfSAiV291bGQgeW91IGxpa2UgdG8gaW5zdGFsbCB0aGUgTGliVVNCLVdpbjMyIGZpbHRlcj8kXHIkXG4ob25seSB1c2VmdWwgZm9yIFVTQiBkZXZpY2VzIGFuZCBpZiB5b3UgaGF2ZSBhbHJlYWR5IGluc3RhbGxlZCBkcml2ZXJzIGZyb20geW91ciBtYW51ZmFjdHVyZXIgZm9yIHlvdXIgVVNCIGRldmljZS4gRG8gbm90IGluc3RhbGwgaXQgaWYgeW91IGFyZSBydW5uaW5nIHdpbmRvd3MgNjRiaXQsIG9yIFZpc3RhLCBvciA3KSIKK0xhbmdTdHJpbmcgbXNnX2luc2xpYnVzYjMyICR7TEFOR19QT0xJU0h9ICJXb3VsZCB5b3UgbGlrZSB0byBpbnN0YWxsIHRoZSBMaWJVU0ItV2luMzIgZHJpdmVyPyRcciRcbihvbmx5IHVzZWZ1bCBpZiB5b3UgZG8gbm90IGhhdmUgaW5zdGFsbGVkIGRyaXZlcnMgZnJvbSB5b3VyIG1hbnVmYWN0dXJlciBmb3IgeW91ciBVU0IgZGV2aWNlKSIKK0xhbmdTdHJpbmcgbXNnX2luc2xpYnVzYiAke0xBTkdfUE9MSVNIfSAiV291bGQgeW91IGxpa2UgdG8gaW5zdGFsbCB0aGUgTGliVVNCIGRyaXZlcj8iCitMYW5nU3RyaW5nIG1zZ19pbnN3aW51c2IgJHtMQU5HX1BPTElTSH0gIldvdWxkIHlvdSBsaWtlIHRvIGluc3RhbGwgdGhlIFdpblVTQiBkcml2ZXI/IgorCitMYW5nU3RyaW5nIHNob3J0Y3V0X2JybHR0eWNuZiAkKExBTkdfUE9MSVNIKSAiQ29uZmlndXJlIEJSTFRUWSIKK0xhbmdTdHJpbmcgc2hvcnRjdXRfYnJsdHR5ZGVidWcgJChMQU5HX1BPTElTSCkgIlJ1biBCUkxUVFkgaW4gZGVidWdnaW5nIG1vZGUiCitMYW5nU3RyaW5nIHNob3J0Y3V0X2luc3NydiAkKExBTkdfUE9MSVNIKSAiSW5zdGFsbCBCUkxUVFkgU2VydmljZSIKK0xhbmdTdHJpbmcgc2hvcnRjdXRfcm12c3J2ICQoTEFOR19QT0xJU0gpICJVbmluc3RhbGwgQlJMVFRZIFNlcnZpY2UiCitMYW5nU3RyaW5nIHNob3J0Y3V0X3VuaW5zdGFsbCAkKExBTkdfUE9MSVNIKSAiVW5pbnN0YWxsIgorTGFuZ1N0cmluZyBzaG9ydGN1dF9pbnNsaWJ1c2JmaWx0ZXIgJChMQU5HX1BPTElTSCkgIkluc3RhbGwgTGliVVNCLVdpbjMyIGZpbHRlciIKK0xhbmdTdHJpbmcgc2hvcnRjdXRfdW5pbnNsaWJ1c2JmaWx0ZXIgJChMQU5HX1BPTElTSCkgIlVuaW5zdGFsbCBMaWJVU0ItV2luMzIgZmlsdGVyIgorTGFuZ1N0cmluZyBzaG9ydGN1dF9pbnNsaWJ1c2IgJChMQU5HX1BPTElTSCkgIkluc3RhbGwgTGliVVNCLVdpbjMyIGRyaXZlciIKKworO1BvcnR1Z3Vlc2VCcgorTGFuZ1N0cmluZyBtc2dfV2VsY29tZVBhZ2VUaXRsZSAke0xBTkdfUE9SVFVHVUVTRUJSfSAiU2V0dXAgcGFyYSBvICR7UFJPRFVDVH0sIFZlcnPjbyAke1ZFUlNJT059IgorTGFuZ1N0cmluZyBtc2dfaW5zbGlidXNiMzJmaWx0ZXIgJHtMQU5HX1BPUlRVR1VFU0VCUn0gIldvdWxkIHlvdSBsaWtlIHRvIGluc3RhbGwgdGhlIExpYlVTQi1XaW4zMiBmaWx0ZXI/JFxyJFxuKG9ubHkgdXNlZnVsIGZvciBVU0IgZGV2aWNlcyBhbmQgaWYgeW91IGhhdmUgYWxyZWFkeSBpbnN0YWxsZWQgZHJpdmVycyBmcm9tIHlvdXIgbWFudWZhY3R1cmVyIGZvciB5b3VyIFVTQiBkZXZpY2UuIERvIG5vdCBpbnN0YWxsIGl0IGlmIHlvdSBhcmUgcnVubmluZyB3aW5kb3dzIDY0Yml0LCBvciBWaXN0YSwgb3IgNykiCitMYW5nU3RyaW5nIG1zZ19pbnNsaWJ1c2IzMiAke0xBTkdfUE9SVFVHVUVTRUJSfSAiUHJldGVuZGUgaW5zdGFsYXIgbyBkcml2ZXIgTGliVVNCLVdpbjMyPyRcciRcbihzb21lbnRlIPp0aWwgc2UgbuNvIHRpdmVyIGluc3RhbGFkbyBkcml2ZXJzIGRvIGZhYnJpY2FudGUgcGFyYSBvIHNldSBkaXNwb3NpdGl2byBVU0IpIgorTGFuZ1N0cmluZyBtc2dfaW5zbGlidXNiICR7TEFOR19QT1JUVUdVRVNFQlJ9ICJQcmV0ZW5kZSBpbnN0YWxhciBvIGRyaXZlciBMaWJVU0IgPyIKK0xhbmdTdHJpbmcgbXNnX2luc3dpbnVzYiAke0xBTkdfUE9SVFVHVUVTRUJSfSAiUHJldGVuZGUgaW5zdGFsYXIgbyBkcml2ZXIgV2luVVNCID8iCisKK0xhbmdTdHJpbmcgc2hvcnRjdXRfYnJsdHR5Y25mICQoTEFOR19QT1JUVUdVRVNFQlIpICJDb25maWd1cmFyIG8gQlJMVFRZIgorTGFuZ1N0cmluZyBzaG9ydGN1dF9icmx0dHlkZWJ1ZyAkKExBTkdfUE9SVFVHVUVTRUJSKSAiUnVuIEJSTFRUWSBpbiBkZWJ1Z2dpbmcgbW9kZSIKK0xhbmdTdHJpbmcgc2hvcnRjdXRfaW5zc3J2ICQoTEFOR19QT1JUVUdVRVNFQlIpICJJbnN0YWxhciBPIFNlcnZp528gQlJMVFRZIgorTGFuZ1N0cmluZyBzaG9ydGN1dF9ybXZzcnYgJChMQU5HX1BPUlRVR1VFU0VCUikgIkRlc2luc3RhbGFyIE8gU2VydmnnbyBCUkxUVFkiCitMYW5nU3RyaW5nIHNob3J0Y3V0X3VuaW5zdGFsbCAkKExBTkdfUE9SVFVHVUVTRUJSKSAiRGVzaW5zdGFsYXIiCitMYW5nU3RyaW5nIHNob3J0Y3V0X2luc2xpYnVzYmZpbHRlciAkKExBTkdfUE9SVFVHVUVTRUJSKSAiSW5zdGFsbCBMaWJVU0ItV2luMzIgZmlsdGVyIgorTGFuZ1N0cmluZyBzaG9ydGN1dF91bmluc2xpYnVzYmZpbHRlciAkKExBTkdfUE9SVFVHVUVTRUJSKSAiVW5pbnN0YWxsIExpYlVTQi1XaW4zMiBmaWx0ZXIiCitMYW5nU3RyaW5nIHNob3J0Y3V0X2luc2xpYnVzYiAkKExBTkdfUE9SVFVHVUVTRUJSKSAiSW5zdGFsYXIgbyBkcml2ZXIgTGliVVNCLVdpbjMyIgorCis7UG9ydHVndWVzZQorTGFuZ1N0cmluZyBtc2dfV2VsY29tZVBhZ2VUaXRsZSAke0xBTkdfUE9SVFVHVUVTRX0gIlNldHVwIHBhcmEgbyAke1BST0RVQ1R9LCBWZXJz428gJHtWRVJTSU9OfSIKK0xhbmdTdHJpbmcgbXNnX2luc2xpYnVzYjMyZmlsdGVyICR7TEFOR19QT1JUVUdVRVNFfSAiV291bGQgeW91IGxpa2UgdG8gaW5zdGFsbCB0aGUgTGliVVNCLVdpbjMyIGZpbHRlcj8kXHIkXG4ob25seSB1c2VmdWwgZm9yIFVTQiBkZXZpY2VzIGFuZCBpZiB5b3UgaGF2ZSBhbHJlYWR5IGluc3RhbGxlZCBkcml2ZXJzIGZyb20geW91ciBtYW51ZmFjdHVyZXIgZm9yIHlvdXIgVVNCIGRldmljZS4gRG8gbm90IGluc3RhbGwgaXQgaWYgeW91IGFyZSBydW5uaW5nIHdpbmRvd3MgNjRiaXQsIG9yIFZpc3RhLCBvciA3KSIKK0xhbmdTdHJpbmcgbXNnX2luc2xpYnVzYjMyICR7TEFOR19QT1JUVUdVRVNFfSAiUHJldGVuZGUgaW5zdGFsYXIgbyBkcml2ZXIgTGliVVNCLVdpbjMyPyRcciRcbihzb21lbnRlIPp0aWwgc2UgbuNvIHRpdmVyIGluc3RhbGFkbyBkcml2ZXJzIGRvIGZhYnJpY2FudGUgcGFyYSBvIHNldSBkaXNwb3NpdGl2byBVU0IpIgorTGFuZ1N0cmluZyBtc2dfaW5zbGlidXNiICR7TEFOR19QT1JUVUdVRVNFfSAiUHJldGVuZGUgaW5zdGFsYXIgbyBkcml2ZXIgTGliVVNCPyIKK0xhbmdTdHJpbmcgbXNnX2luc3dpbnVzYiAke0xBTkdfUE9SVFVHVUVTRX0gIlByZXRlbmRlIGluc3RhbGFyIG8gZHJpdmVyIFdpblVTQj8iCisKK0xhbmdTdHJpbmcgc2hvcnRjdXRfYnJsdHR5Y25mICQoTEFOR19QT1JUVUdVRVNFKSAiQ29uZmlndXJhciBvIEJSTFRUWSIKK0xhbmdTdHJpbmcgc2hvcnRjdXRfYnJsdHR5ZGVidWcgJChMQU5HX1BPUlRVR1VFU0UpICJSdW4gQlJMVFRZIGluIGRlYnVnZ2luZyBtb2RlIgorTGFuZ1N0cmluZyBzaG9ydGN1dF9pbnNzcnYgJChMQU5HX1BPUlRVR1VFU0UpICJJbnN0YWxhciBPIFNlcnZp528gQlJMVFRZIgorTGFuZ1N0cmluZyBzaG9ydGN1dF9ybXZzcnYgJChMQU5HX1BPUlRVR1VFU0UpICJEZXNpbnN0YWxhciBPIFNlcnZp528gQlJMVFRZIgorTGFuZ1N0cmluZyBzaG9ydGN1dF91bmluc3RhbGwgJChMQU5HX1BPUlRVR1VFU0UpICJEZXNpbnN0YWxhciIKK0xhbmdTdHJpbmcgc2hvcnRjdXRfaW5zbGlidXNiZmlsdGVyICQoTEFOR19QT1JUVUdVRVNFKSAiSW5zdGFsbCBMaWJVU0ItV2luMzIgZmlsdGVyIgorTGFuZ1N0cmluZyBzaG9ydGN1dF91bmluc2xpYnVzYmZpbHRlciAkKExBTkdfUE9SVFVHVUVTRSkgIlVuaW5zdGFsbCBMaWJVU0ItV2luMzIgZmlsdGVyIgorTGFuZ1N0cmluZyBzaG9ydGN1dF9pbnNsaWJ1c2IgJChMQU5HX1BPUlRVR1VFU0UpICJJbnN0YWxhciBvIGRyaXZlciBMaWJVU0ItV2luMzIiCisKKztSdXNzaWFuCitMYW5nU3RyaW5nIG1zZ19XZWxjb21lUGFnZVRpdGxlICR7TEFOR19SVVNTSUFOfSAiU2V0dXAgZm9yICR7UFJPRFVDVH0sIFZlcnNpb24gJHtWRVJTSU9OfSIKK0xhbmdTdHJpbmcgbXNnX2luc2xpYnVzYjMyZmlsdGVyICR7TEFOR19SVVNTSUFOfSAiV291bGQgeW91IGxpa2UgdG8gaW5zdGFsbCB0aGUgTGliVVNCLVdpbjMyIGZpbHRlcj8kXHIkXG4ob25seSB1c2VmdWwgZm9yIFVTQiBkZXZpY2VzIGFuZCBpZiB5b3UgaGF2ZSBhbHJlYWR5IGluc3RhbGxlZCBkcml2ZXJzIGZyb20geW91ciBtYW51ZmFjdHVyZXIgZm9yIHlvdXIgVVNCIGRldmljZS4gRG8gbm90IGluc3RhbGwgaXQgaWYgeW91IGFyZSBydW5uaW5nIHdpbmRvd3MgNjRiaXQsIG9yIFZpc3RhLCBvciA3KSIKK0xhbmdTdHJpbmcgbXNnX2luc2xpYnVzYjMyICR7TEFOR19SVVNTSUFOfSAiV291bGQgeW91IGxpa2UgdG8gaW5zdGFsbCB0aGUgTGliVVNCLVdpbjMyIGRyaXZlcj8kXHIkXG4ob25seSB1c2VmdWwgaWYgeW91IGRvIG5vdCBoYXZlIGluc3RhbGxlZCBkcml2ZXJzIGZyb20geW91ciBtYW51ZmFjdHVyZXIgZm9yIHlvdXIgVVNCIGRldmljZSkiCitMYW5nU3RyaW5nIG1zZ19pbnNsaWJ1c2IgJHtMQU5HX1JVU1NJQU59ICJXb3VsZCB5b3UgbGlrZSB0byBpbnN0YWxsIHRoZSBMaWJVU0IgZHJpdmVyPyIKK0xhbmdTdHJpbmcgbXNnX2luc3dpbnVzYiAke0xBTkdfUlVTU0lBTn0gIldvdWxkIHlvdSBsaWtlIHRvIGluc3RhbGwgdGhlIFdpblVTQiBkcml2ZXI/IgorCitMYW5nU3RyaW5nIHNob3J0Y3V0X2JybHR0eWNuZiAkKExBTkdfUlVTU0lBTikgIkNvbmZpZ3VyZSBCUkxUVFkiCitMYW5nU3RyaW5nIHNob3J0Y3V0X2JybHR0eWRlYnVnICQoTEFOR19SVVNTSUFOKSAiUnVuIEJSTFRUWSBpbiBkZWJ1Z2dpbmcgbW9kZSIKK0xhbmdTdHJpbmcgc2hvcnRjdXRfaW5zc3J2ICQoTEFOR19SVVNTSUFOKSAiSW5zdGFsbCBCUkxUVFkgU2VydmljZSIKK0xhbmdTdHJpbmcgc2hvcnRjdXRfcm12c3J2ICQoTEFOR19SVVNTSUFOKSAiVW5pbnN0YWxsIEJSTFRUWSBTZXJ2aWNlIgorTGFuZ1N0cmluZyBzaG9ydGN1dF91bmluc3RhbGwgJChMQU5HX1JVU1NJQU4pICJVbmluc3RhbGwiCitMYW5nU3RyaW5nIHNob3J0Y3V0X2luc2xpYnVzYmZpbHRlciAkKExBTkdfUlVTU0lBTikgIkluc3RhbGwgTGliVVNCLVdpbjMyIGZpbHRlciIKK0xhbmdTdHJpbmcgc2hvcnRjdXRfdW5pbnNsaWJ1c2JmaWx0ZXIgJChMQU5HX1JVU1NJQU4pICJVbmluc3RhbGwgTGliVVNCLVdpbjMyIGZpbHRlciIKK0xhbmdTdHJpbmcgc2hvcnRjdXRfaW5zbGlidXNiICQoTEFOR19SVVNTSUFOKSAiSW5zdGFsbCBMaWJVU0ItV2luMzIgZHJpdmVyIgorCis7U3dlZGlzaAorTGFuZ1N0cmluZyBtc2dfV2VsY29tZVBhZ2VUaXRsZSAke0xBTkdfU1dFRElTSH0gIlNldHVwIGZvciAke1BST0RVQ1R9LCBWZXJzaW9uICR7VkVSU0lPTn0iCitMYW5nU3RyaW5nIG1zZ19pbnNsaWJ1c2IzMmZpbHRlciAke0xBTkdfU1dFRElTSH0gIldvdWxkIHlvdSBsaWtlIHRvIGluc3RhbGwgdGhlIExpYlVTQi1XaW4zMiBmaWx0ZXI/JFxyJFxuKG9ubHkgdXNlZnVsIGZvciBVU0IgZGV2aWNlcyBhbmQgaWYgeW91IGhhdmUgYWxyZWFkeSBpbnN0YWxsZWQgZHJpdmVycyBmcm9tIHlvdXIgbWFudWZhY3R1cmVyIGZvciB5b3VyIFVTQiBkZXZpY2UuIERvIG5vdCBpbnN0YWxsIGl0IGlmIHlvdSBhcmUgcnVubmluZyB3aW5kb3dzIDY0Yml0LCBvciBWaXN0YSwgb3IgNykiCitMYW5nU3RyaW5nIG1zZ19pbnNsaWJ1c2IzMiAke0xBTkdfU1dFRElTSH0gIldvdWxkIHlvdSBsaWtlIHRvIGluc3RhbGwgdGhlIExpYlVTQi1XaW4zMiBkcml2ZXI/JFxyJFxuKG9ubHkgdXNlZnVsIGlmIHlvdSBkbyBub3QgaGF2ZSBpbnN0YWxsZWQgZHJpdmVycyBmcm9tIHlvdXIgbWFudWZhY3R1cmVyIGZvciB5b3VyIFVTQiBkZXZpY2UpIgorTGFuZ1N0cmluZyBtc2dfaW5zbGlidXNiICR7TEFOR19TV0VESVNIfSAiV291bGQgeW91IGxpa2UgdG8gaW5zdGFsbCB0aGUgTGliVVNCIGRyaXZlcj8iCitMYW5nU3RyaW5nIG1zZ19pbnN3aW51c2IgJHtMQU5HX1NXRURJU0h9ICJXb3VsZCB5b3UgbGlrZSB0byBpbnN0YWxsIHRoZSBXaW5VU0IgZHJpdmVyPyIKKworTGFuZ1N0cmluZyBzaG9ydGN1dF9icmx0dHljbmYgJChMQU5HX1NXRURJU0gpICJDb25maWd1cmUgQlJMVFRZIgorTGFuZ1N0cmluZyBzaG9ydGN1dF9icmx0dHlkZWJ1ZyAkKExBTkdfU1dFRElTSCkgIlJ1biBCUkxUVFkgaW4gZGVidWdnaW5nIG1vZGUiCitMYW5nU3RyaW5nIHNob3J0Y3V0X2luc3NydiAkKExBTkdfU1dFRElTSCkgIkluc3RhbGwgQlJMVFRZIFNlcnZpY2UiCitMYW5nU3RyaW5nIHNob3J0Y3V0X3JtdnNydiAkKExBTkdfU1dFRElTSCkgIlVuaW5zdGFsbCBCUkxUVFkgU2VydmljZSIKK0xhbmdTdHJpbmcgc2hvcnRjdXRfdW5pbnN0YWxsICQoTEFOR19TV0VESVNIKSAiVW5pbnN0YWxsIgorTGFuZ1N0cmluZyBzaG9ydGN1dF9pbnNsaWJ1c2JmaWx0ZXIgJChMQU5HX1NXRURJU0gpICJJbnN0YWxsIExpYlVTQi1XaW4zMiBmaWx0ZXIiCitMYW5nU3RyaW5nIHNob3J0Y3V0X3VuaW5zbGlidXNiZmlsdGVyICQoTEFOR19TV0VESVNIKSAiVW5pbnN0YWxsIExpYlVTQi1XaW4zMiBmaWx0ZXIiCitMYW5nU3RyaW5nIHNob3J0Y3V0X2luc2xpYnVzYiAkKExBTkdfU1dFRElTSCkgIkluc3RhbGwgTGliVVNCLVdpbjMyIGRyaXZlciIKKworO1Nsb3ZhaworTGFuZ1N0cmluZyBtc2dfV2VsY29tZVBhZ2VUaXRsZSAke0xBTkdfU0xPVkFLfSAiU2V0dXAgZm9yICR7UFJPRFVDVH0sIFZlcnNpb24gJHtWRVJTSU9OfSIKK0xhbmdTdHJpbmcgbXNnX2luc2xpYnVzYjMyZmlsdGVyICR7TEFOR19TTE9WQUt9ICJXb3VsZCB5b3UgbGlrZSB0byBpbnN0YWxsIHRoZSBMaWJVU0ItV2luMzIgZmlsdGVyPyRcciRcbihvbmx5IHVzZWZ1bCBmb3IgVVNCIGRldmljZXMgYW5kIGlmIHlvdSBoYXZlIGFscmVhZHkgaW5zdGFsbGVkIGRyaXZlcnMgZnJvbSB5b3VyIG1hbnVmYWN0dXJlciBmb3IgeW91ciBVU0IgZGV2aWNlLiBEbyBub3QgaW5zdGFsbCBpdCBpZiB5b3UgYXJlIHJ1bm5pbmcgd2luZG93cyA2NGJpdCwgb3IgVmlzdGEsIG9yIDcpIgorTGFuZ1N0cmluZyBtc2dfaW5zbGlidXNiMzIgJHtMQU5HX1NMT1ZBS30gIldvdWxkIHlvdSBsaWtlIHRvIGluc3RhbGwgdGhlIExpYlVTQi1XaW4zMiBkcml2ZXI/JFxyJFxuKG9ubHkgdXNlZnVsIGlmIHlvdSBkbyBub3QgaGF2ZSBpbnN0YWxsZWQgZHJpdmVycyBmcm9tIHlvdXIgbWFudWZhY3R1cmVyIGZvciB5b3VyIFVTQiBkZXZpY2UpIgorTGFuZ1N0cmluZyBtc2dfaW5zbGlidXNiICR7TEFOR19TTE9WQUt9ICJXb3VsZCB5b3UgbGlrZSB0byBpbnN0YWxsIHRoZSBMaWJVU0IgZHJpdmVyPyIKK0xhbmdTdHJpbmcgbXNnX2luc3dpbnVzYiAke0xBTkdfU0xPVkFLfSAiV291bGQgeW91IGxpa2UgdG8gaW5zdGFsbCB0aGUgV2luVVNCIGRyaXZlcj8iCisKK0xhbmdTdHJpbmcgc2hvcnRjdXRfYnJsdHR5Y25mICQoTEFOR19TTE9WQUspICJDb25maWd1cmUgQlJMVFRZIgorTGFuZ1N0cmluZyBzaG9ydGN1dF9icmx0dHlkZWJ1ZyAkKExBTkdfU0xPVkFLKSAiUnVuIEJSTFRUWSBpbiBkZWJ1Z2dpbmcgbW9kZSIKK0xhbmdTdHJpbmcgc2hvcnRjdXRfaW5zc3J2ICQoTEFOR19TTE9WQUspICJJbnN0YWxsIEJSTFRUWSBTZXJ2aWNlIgorTGFuZ1N0cmluZyBzaG9ydGN1dF9ybXZzcnYgJChMQU5HX1NMT1ZBSykgIlVuaW5zdGFsbCBCUkxUVFkgU2VydmljZSIKK0xhbmdTdHJpbmcgc2hvcnRjdXRfdW5pbnN0YWxsICQoTEFOR19TTE9WQUspICJVbmluc3RhbGwiCitMYW5nU3RyaW5nIHNob3J0Y3V0X2luc2xpYnVzYmZpbHRlciAkKExBTkdfU0xPVkFLKSAiSW5zdGFsbCBMaWJVU0ItV2luMzIgZmlsdGVyIgorTGFuZ1N0cmluZyBzaG9ydGN1dF91bmluc2xpYnVzYmZpbHRlciAkKExBTkdfU0xPVkFLKSAiVW5pbnN0YWxsIExpYlVTQi1XaW4zMiBmaWx0ZXIiCitMYW5nU3RyaW5nIHNob3J0Y3V0X2luc2xpYnVzYiAkKExBTkdfU0xPVkFLKSAiSW5zdGFsbCBMaWJVU0ItV2luMzIgZHJpdmVyIgorCis7VGhhaQorTGFuZ1N0cmluZyBtc2dfV2VsY29tZVBhZ2VUaXRsZSAke0xBTkdfVEhBSX0gIlNldHVwIGZvciAke1BST0RVQ1R9LCBWZXJzaW9uICR7VkVSU0lPTn0iCitMYW5nU3RyaW5nIG1zZ19pbnNsaWJ1c2IzMmZpbHRlciAke0xBTkdfVEhBSX0gIldvdWxkIHlvdSBsaWtlIHRvIGluc3RhbGwgdGhlIExpYlVTQi1XaW4zMiBmaWx0ZXI/JFxyJFxuKG9ubHkgdXNlZnVsIGZvciBVU0IgZGV2aWNlcyBhbmQgaWYgeW91IGhhdmUgYWxyZWFkeSBpbnN0YWxsZWQgZHJpdmVycyBmcm9tIHlvdXIgbWFudWZhY3R1cmVyIGZvciB5b3VyIFVTQiBkZXZpY2UuIERvIG5vdCBpbnN0YWxsIGl0IGlmIHlvdSBhcmUgcnVubmluZyB3aW5kb3dzIDY0Yml0LCBvciBWaXN0YSwgb3IgNykiCitMYW5nU3RyaW5nIG1zZ19pbnNsaWJ1c2IzMiAke0xBTkdfVEhBSX0gIldvdWxkIHlvdSBsaWtlIHRvIGluc3RhbGwgdGhlIExpYlVTQi1XaW4zMiBkcml2ZXI/JFxyJFxuKG9ubHkgdXNlZnVsIGlmIHlvdSBkbyBub3QgaGF2ZSBpbnN0YWxsZWQgZHJpdmVycyBmcm9tIHlvdXIgbWFudWZhY3R1cmVyIGZvciB5b3VyIFVTQiBkZXZpY2UpIgorTGFuZ1N0cmluZyBtc2dfaW5zbGlidXNiICR7TEFOR19USEFJfSAiV291bGQgeW91IGxpa2UgdG8gaW5zdGFsbCB0aGUgTGliVVNCIGRyaXZlcj8iCitMYW5nU3RyaW5nIG1zZ19pbnN3aW51c2IgJHtMQU5HX1RIQUl9ICJXb3VsZCB5b3UgbGlrZSB0byBpbnN0YWxsIHRoZSBXaW5VU0IgZHJpdmVyPyIKKworTGFuZ1N0cmluZyBzaG9ydGN1dF9icmx0dHljbmYgJChMQU5HX1RIQUkpICJDb25maWd1cmUgQlJMVFRZIgorTGFuZ1N0cmluZyBzaG9ydGN1dF9icmx0dHlkZWJ1ZyAkKExBTkdfVEhBSSkgIlJ1biBCUkxUVFkgaW4gZGVidWdnaW5nIG1vZGUiCitMYW5nU3RyaW5nIHNob3J0Y3V0X2luc3NydiAkKExBTkdfVEhBSSkgIkluc3RhbGwgQlJMVFRZIFNlcnZpY2UiCitMYW5nU3RyaW5nIHNob3J0Y3V0X3JtdnNydiAkKExBTkdfVEhBSSkgIlVuaW5zdGFsbCBCUkxUVFkgU2VydmljZSIKK0xhbmdTdHJpbmcgc2hvcnRjdXRfdW5pbnN0YWxsICQoTEFOR19USEFJKSAiVW5pbnN0YWxsIgorTGFuZ1N0cmluZyBzaG9ydGN1dF9pbnNsaWJ1c2JmaWx0ZXIgJChMQU5HX1RIQUkpICJJbnN0YWxsIExpYlVTQi1XaW4zMiBmaWx0ZXIiCitMYW5nU3RyaW5nIHNob3J0Y3V0X3VuaW5zbGlidXNiZmlsdGVyICQoTEFOR19USEFJKSAiVW5pbnN0YWxsIExpYlVTQi1XaW4zMiBmaWx0ZXIiCitMYW5nU3RyaW5nIHNob3J0Y3V0X2luc2xpYnVzYiAkKExBTkdfVEhBSSkgIkluc3RhbGwgTGliVVNCLVdpbjMyIGRyaXZlciIKKworO0NoaW5lc2UgU2ltcGxpZmllZAorTGFuZ1N0cmluZyBtc2dfV2VsY29tZVBhZ2VUaXRsZSAke0xBTkdfU0lNUENISU5FU0V9ICJTZXR1cCBmb3IgJHtQUk9EVUNUfSwgVmVyc2lvbiAke1ZFUlNJT059IgorTGFuZ1N0cmluZyBtc2dfaW5zbGlidXNiMzJmaWx0ZXIgJHtMQU5HX1NJTVBDSElORVNFfSAiV291bGQgeW91IGxpa2UgdG8gaW5zdGFsbCB0aGUgTGliVVNCLVdpbjMyIGZpbHRlcj8kXHIkXG4ob25seSB1c2VmdWwgZm9yIFVTQiBkZXZpY2VzIGFuZCBpZiB5b3UgaGF2ZSBhbHJlYWR5IGluc3RhbGxlZCBkcml2ZXJzIGZyb20geW91ciBtYW51ZmFjdHVyZXIgZm9yIHlvdXIgVVNCIGRldmljZS4gRG8gbm90IGluc3RhbGwgaXQgaWYgeW91IGFyZSBydW5uaW5nIHdpbmRvd3MgNjRiaXQsIG9yIFZpc3RhLCBvciA3KSIKK0xhbmdTdHJpbmcgbXNnX2luc2xpYnVzYjMyICR7TEFOR19TSU1QQ0hJTkVTRX0gIldvdWxkIHlvdSBsaWtlIHRvIGluc3RhbGwgdGhlIExpYlVTQi1XaW4zMiBkcml2ZXI/JFxyJFxuKG9ubHkgdXNlZnVsIGlmIHlvdSBkbyBub3QgaGF2ZSBpbnN0YWxsZWQgZHJpdmVycyBmcm9tIHlvdXIgbWFudWZhY3R1cmVyIGZvciB5b3VyIFVTQiBkZXZpY2UpIgorTGFuZ1N0cmluZyBtc2dfaW5zbGlidXNiICR7TEFOR19TSU1QQ0hJTkVTRX0gIldvdWxkIHlvdSBsaWtlIHRvIGluc3RhbGwgdGhlIExpYlVTQiBkcml2ZXI/IgorTGFuZ1N0cmluZyBtc2dfaW5zd2ludXNiICR7TEFOR19TSU1QQ0hJTkVTRX0gIldvdWxkIHlvdSBsaWtlIHRvIGluc3RhbGwgdGhlIFdpblVTQiBkcml2ZXI/IgorCitMYW5nU3RyaW5nIHNob3J0Y3V0X2JybHR0eWNuZiAkKExBTkdfU0lNUENISU5FU0UpICJDb25maWd1cmUgQlJMVFRZIgorTGFuZ1N0cmluZyBzaG9ydGN1dF9icmx0dHlkZWJ1ZyAkKExBTkdfU0lNUENISU5FU0UpICJSdW4gQlJMVFRZIGluIGRlYnVnZ2luZyBtb2RlIgorTGFuZ1N0cmluZyBzaG9ydGN1dF9pbnNzcnYgJChMQU5HX1NJTVBDSElORVNFKSAiSW5zdGFsbCBCUkxUVFkgU2VydmljZSIKK0xhbmdTdHJpbmcgc2hvcnRjdXRfcm12c3J2ICQoTEFOR19TSU1QQ0hJTkVTRSkgIlVuaW5zdGFsbCBCUkxUVFkgU2VydmljZSIKK0xhbmdTdHJpbmcgc2hvcnRjdXRfdW5pbnN0YWxsICQoTEFOR19TSU1QQ0hJTkVTRSkgIlVuaW5zdGFsbCIKK0xhbmdTdHJpbmcgc2hvcnRjdXRfaW5zbGlidXNiZmlsdGVyICQoTEFOR19TSU1QQ0hJTkVTRSkgIkluc3RhbGwgTGliVVNCLVdpbjMyIGZpbHRlciIKK0xhbmdTdHJpbmcgc2hvcnRjdXRfdW5pbnNsaWJ1c2JmaWx0ZXIgJChMQU5HX1NJTVBDSElORVNFKSAiVW5pbnN0YWxsIExpYlVTQi1XaW4zMiBmaWx0ZXIiCitMYW5nU3RyaW5nIHNob3J0Y3V0X2luc2xpYnVzYiAkKExBTkdfU0lNUENISU5FU0UpICJJbnN0YWxsIExpYlVTQi1XaW4zMiBkcml2ZXIiCisKKztDaGluZXNlIFRyYWRpdGlvbmFsCitMYW5nU3RyaW5nIG1zZ19XZWxjb21lUGFnZVRpdGxlICR7TEFOR19UUkFEQ0hJTkVTRX0gIqZ3uMsgJHtQUk9EVUNUfSwgqqmluyAke1ZFUlNJT059IgorTGFuZ1N0cmluZyBtc2dfaW5zbGlidXNiMzJmaWx0ZXIgJHtMQU5HX1RSQURDSElORVNFfSAirE+nX61upne4yyBMaWJVU0ItV2luMzIgv3q/7765oUgkXHIkXG6hXaazpne4y63svHQgVVNCIMVYsMq1e6ahpH673a1uoUOmcKpHrE8gNjQgpuykuCBXaW5kb3dzLCCpziBWaXN0YSwgqc4gd2luNywgvdCnT6Z3uMuhXiIKK0xhbmdTdHJpbmcgbXNnX2luc2xpYnVzYjMyICR7TEFOR19UUkFEQ0hJTkVTRX0gIqxPp1+tbqZ3uMsgTGliVVNCLVdpbjMyIMVYsMq1e6ahoUhcciRcbqFdqFOms6Z3uMut7Lx0IFVTQiDFWLDKtXumoaR+u92tbqFeIgorTGFuZ1N0cmluZyBtc2dfaW5zbGlidXNiICR7TEFOR19UUkFEQ0hJTkVTRX0gIqxPp1+tbqZ3uMsgTGliVVNCIMVYsMq1e6ahoSIKK0xhbmdTdHJpbmcgbXNnX2luc3dpbnVzYiAke0xBTkdfVFJBRENISU5FU0V9ICKsT6dfrW6md7jLIFdpblVTQiDFWLDKtXumoaEiCisKK0xhbmdTdHJpbmcgc2hvcnRjdXRfYnJsdHR5Y25mICQoTEFOR19UUkFEQ0hJTkVTRSkgIrNdqXcgQlJMVFRZIgorTGFuZ1N0cmluZyBzaG9ydGN1dF9icmx0dHlkZWJ1ZyAkKExBTkdfVFJBRENISU5FU0UpICKlSLC7v/m80qahsPWm5iBCUkxUVFkiCitMYW5nU3RyaW5nIHNob3J0Y3V0X2luc3NydiAkKExBTkdfVFJBRENISU5FU0UpICKmd7jLIEJSTFRUWSCqQbDIIgorTGFuZ1N0cmluZyBzaG9ydGN1dF9ybXZzcnYgJChMQU5HX1RSQURDSElORVNFKSAisr6woyBCUkxUVFkgqkGwyCIKK0xhbmdTdHJpbmcgc2hvcnRjdXRfdW5pbnN0YWxsICQoTEFOR19UUkFEQ0hJTkVTRSkgIrK+sKMiCitMYW5nU3RyaW5nIHNob3J0Y3V0X2luc2xpYnVzYmZpbHRlciAkKExBTkdfVFJBRENISU5FU0UpICKmd7jLIExpYlVTQi1XaW4zMiC/er/vvrkiCitMYW5nU3RyaW5nIHNob3J0Y3V0X3VuaW5zbGlidXNiZmlsdGVyICQoTEFOR19UUkFEQ0hJTkVTRSkgIrK+sKMgTGliVVNCLVdpbjMyIL96v+++uSIKK0xhbmdTdHJpbmcgc2hvcnRjdXRfaW5zbGlidXNiICQoTEFOR19UUkFEQ0hJTkVTRSkgIqZ3uMsgTGliVVNCLVdpbjMyIMVYsMq1e6ahIgpkaWZmIC0tZ2l0IGEvV2luZG93cy9yZWdxdWVyeS1icmxhcGkuYmF0IGIvV2luZG93cy9yZWdxdWVyeS1icmxhcGkuYmF0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZkZjc5YTEKLS0tIC9kZXYvbnVsbAorKysgYi9XaW5kb3dzL3JlZ3F1ZXJ5LWJybGFwaS5iYXQKQEAgLTAsMCArMSw3IEBACitAZWNobyBvZmYKKworc2V0bG9jYWwgRW5hYmxlRGVsYXllZEV4cGFuc2lvbgorY2FsbCAiJXByb2dyYW1EaXJlY3Rvcnklc2V0dmFycy1icmxhcGkiCisKK3JlZyBxdWVyeSAiJXNlcnZpY2VLZXklIgorZXhpdCAvQiAlRVJST1JMRVZFTCUKZGlmZiAtLWdpdCBhL1dpbmRvd3MvcnVuLWJybHR0eS5iYXQgYi9XaW5kb3dzL3J1bi1icmx0dHkuYmF0Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjk5NDVkZDkKLS0tIC9kZXYvbnVsbAorKysgYi9XaW5kb3dzL3J1bi1icmx0dHkuYmF0CkBAIC0wLDAgKzEsMTQgQEAKK0BlY2hvIG9mZgorCitzZXRsb2NhbAorc2V0IHByb2dyYW1EaXJlY3Rvcnk9JX5kcDAKK2NhbGwgIiVwcm9ncmFtRGlyZWN0b3J5JXNldHZhcnMtYnJsdHR5Igorc2V0IGxvZ0xldmVsPWluZm8KKworaWYgIiVwcm9ncmFtTmFtZSUiID09ICIlcGFja2FnZU5hbWUlIiAoCisgICBlY2hvIFJ1bm5pbmcgJXByb2dyYW1OYW1lJS4gV2hlbiBkb25lLCBjbG9zZSB0aGlzIHdpbmRvdyBeKGZvciBleGFtcGxlLCBieSB1c2luZyB0aGUKKyAgIGVjaG8gQWx0LVNwYWNlIG1lbnVeKS4gVGhlIGxvZyBmaWxlIGlzICIlbG9nRmlsZSUiLgorKQorCisiJXByb2dyYW1EaXJlY3RvcnklYmluXGJybHR0eSIgLW4gLU4gLVUgIiV1cGRhdGFibGVEaXJlY3RvcnklIiAtVyAiJXdyaXRhYmxlRGlyZWN0b3J5JSIgLVAgIiVwaWRGaWxlJSIgLUwgIiVsb2dGaWxlJSIgLWwgIiVsb2dMZXZlbCUiIC1mICIlY29uZmlndXJhdGlvbkZpbGUlIiAlKgorZXhpdCAvQiAlRVJST1JMRVZFTCUKZGlmZiAtLWdpdCBhL1dpbmRvd3Mvc2V0dmFycy1icmxhcGkuYmF0IGIvV2luZG93cy9zZXR2YXJzLWJybGFwaS5iYXQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGE0MmJiZgotLS0gL2Rldi9udWxsCisrKyBiL1dpbmRvd3Mvc2V0dmFycy1icmxhcGkuYmF0CkBAIC0wLDAgKzEsNyBAQAorQGVjaG8gb2ZmCisKK3NldCBzZXJ2aWNlTmFtZT1CcmxBUEkKK3NldCBzZXJ2aWNlS2V5PUhLRVlfTE9DQUxfTUFDSElORVxTWVNURU1cQ3VycmVudENvbnRyb2xTZXRcU2VydmljZXNcJXNlcnZpY2VOYW1lJQorc2V0IGNvbW1hbmRWYWx1ZT1JbWFnZVBhdGgKKworZXhpdCAvQiAwCmRpZmYgLS1naXQgYS9XaW5kb3dzL3NldHZhcnMtYnJsdHR5LmJhdCBiL1dpbmRvd3Mvc2V0dmFycy1icmx0dHkuYmF0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU3M2M0MzgKLS0tIC9kZXYvbnVsbAorKysgYi9XaW5kb3dzL3NldHZhcnMtYnJsdHR5LmJhdApAQCAtMCwwICsxLDEzIEBACitAZWNobyBvZmYKKworc2V0IHBhY2thZ2VOYW1lPWJybHR0eQoraWYgIiVwcm9ncmFtTmFtZSUiID09ICIiICBzZXQgcHJvZ3JhbU5hbWU9JXBhY2thZ2VOYW1lJQorCitzZXQgdXBkYXRhYmxlRGlyZWN0b3J5PSVwcm9ncmFtRGlyZWN0b3J5JWV0Yworc2V0IHdyaXRhYmxlRGlyZWN0b3J5PSVwcm9ncmFtRGlyZWN0b3J5JXJ1bgorCitzZXQgY29uZmlndXJhdGlvbkZpbGU9JXByb2dyYW1EaXJlY3RvcnklZXRjXCVwYWNrYWdlTmFtZSUuY29uZgorc2V0IGxvZ0ZpbGU9JXByb2dyYW1EaXJlY3RvcnklJXByb2dyYW1OYW1lJS5sb2cKK3NldCBwaWRGaWxlPSV3cml0YWJsZURpcmVjdG9yeSVcJXByb2dyYW1OYW1lJS5waWQKKworZXhpdCAvQiAwCmRpZmYgLS1naXQgYS9XaW5kb3dzL3Rhc2tzLWJybHR0eS5iYXQgYi9XaW5kb3dzL3Rhc2tzLWJybHR0eS5iYXQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjk0ZGZhZAotLS0gL2Rldi9udWxsCisrKyBiL1dpbmRvd3MvdGFza3MtYnJsdHR5LmJhdApAQCAtMCwwICsxLDggQEAKK0BlY2hvIG9mZgorCitzZXRsb2NhbAorc2V0IHByb2dyYW1EaXJlY3Rvcnk9JX5kcDAKK2NhbGwgIiVwcm9ncmFtRGlyZWN0b3J5JXNldHZhcnMtYnJsdHR5IgorCit0YXNrbGlzdCAvViAvRkkgImltYWdlTmFtZSBlcSAlcGFja2FnZU5hbWUlLioiCitleGl0IC9CICVFUlJPUkxFVkVMJQpkaWZmIC0tZ2l0IGEvV2luZG93cy93aW5zZXR1cCBiL1dpbmRvd3Mvd2luc2V0dXAKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYzI1NTNiYQotLS0gL2Rldi9udWxsCisrKyBiL1dpbmRvd3Mvd2luc2V0dXAKQEAgLTAsMCArMSwzNTAgQEAKKyMhL2Jpbi9iYXNoCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisjICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorIworIyBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisjCisjIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisjCisjIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyMgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorIyBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyMKKyMgV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworIworIyBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworLiAiYGRpcm5hbWUgIiR7MH0iYC8uLi9icmx0dHktcHJvbG9ndWUuc2giCisuICIke3Byb2dyYW1EaXJlY3Rvcnl9L21pbmd3LnNoIgorCitzZXQgLWUKK3VtYXNrIDAyMgorCityZWFkb25seSBkZWZhdWx0QXJjaGl2ZVJvb3Q9Imh0dHA6Ly9icmx0dHkuYXBwL2FyY2hpdmUvV2luZG93cyIKK3JlYWRvbmx5IGRlZmF1bHRUZW1wb3JhcnlEaXJlY3Rvcnk9IiR7VE1QRElSOi0vdG1wfS9icmx0dHktJHtwcm9ncmFtTmFtZX0iCisKK2hhdmVQYXRoKCkgeworICAgbG9jYWwgcGF0aD0iJHsxfSIKKworICAgWyAtbiAiJHtwYXRofSIgXSB8fCByZXR1cm4gMQorICAgWyAtZSAiJHtwYXRofSIgXSB8fCByZXR1cm4gMgorICAgcmV0dXJuIDAKK30KKwordmVyaWZ5RGlyZWN0b3J5KCkgeworICAgbG9jYWwgcGF0aD0iJHsxfSIKKworICAgWyAtZSAiJHtwYXRofSIgXSB8fCBzZW1hbnRpY0Vycm9yICJkaXJlY3Rvcnkgbm90IGZvdW5kOiAke3BhdGh9IgorICAgWyAtZCAiJHtwYXRofSIgXSB8fCBzZW1hbnRpY0Vycm9yICJub3QgYSBkaXJlY3Rvcnk6ICR7cGF0aH0iCisgICBbIC13ICIke3BhdGh9IiBdIHx8IHNlbWFudGljRXJyb3IgImRpcmVjdG9yeSBub3Qgd3JpdGFibGU6ICR7cGF0aH0iCisgICBbIC1yICIke3BhdGh9IiBdIHx8IHNlbWFudGljRXJyb3IgImRpcmVjdG9yeSBub3QgcmVhZGFibGU6ICR7cGF0aH0iCisgICBbIC14ICIke3BhdGh9IiBdIHx8IHNlbWFudGljRXJyb3IgImRpcmVjdG9yeSBub3Qgc2VhcmNoYWJsZTogJHtwYXRofSIKK30KKworZmluZENvbW1hbmQoKSB7CisgICBsb2NhbCB2YXJpYWJsZT0iJHsxfSIKKyAgIHNoaWZ0IDEKKworICAgZm9yIG5hbWUKKyAgIGRvCisgICAgICBsb2NhbCBwYXRoPSIkKGNvbW1hbmQgLXYgIiR7bmFtZX0iKSIKKyAgICAgIFsgLW4gIiR7cGF0aH0iIF0gJiYgeworICAgICAgICAgc2V0VmFyaWFibGUgIiR7dmFyaWFibGV9IiAiJHtwYXRofSIKKyAgICAgICAgIHJldHVybiAwCisgICAgICB9CisgICBkb25lCisKKyAgIHJldHVybiAxCit9CisKK2V4ZWN1dGVDb21tYW5kKCkgeworICAgbG9nTWVzc2FnZSBkZXRhaWwgImV4ZWN1dGluZyBjb21tYW5kOiAkeyp9IgorCisgICBleGl0U3RhdHVzPTAKKyAgICIke0B9IiB8fCBleGl0U3RhdHVzPSIkez99IgorCisgICBbICIke2V4aXRTdGF0dXN9IiAtZXEgMCBdIHx8IGxvZ1dhcm5pbmcgImNvbW1hbmQgZmFpbGVkOiAkezF9OiBleGl0IHN0YXR1cyAke2V4aXRTdGF0dXN9IgorICAgcmV0dXJuICIke2V4aXRTdGF0dXN9IgorfQorCitkb3dubG9hZEZpbGUoKSB7CisgICBsb2NhbCBzb3VyY2U9IiR7MX0iCisgICBsb2NhbCB0YXJnZXQ9IiR7Mn0iCisKKyAgIGxvZ05vdGUgImRvd25sb2FkaW5nIGZpbGU6ICR7c291cmNlfSIKKyAgIFsgLXogIiR7dGFyZ2V0fSIgXSAmJiB0YXJnZXQ9IiR7c291cmNlIyMqL30iCisgICBleGVjdXRlQ29tbWFuZCB3Z2V0IC1udiAtTyAiJHt0YXJnZXR9IiAiJHthcmNoaXZlUm9vdH0vJHtzb3VyY2V9IgorfQorCit1bnBhY2tBcmNoaXZlKCkgeworICAgbG9jYWwgcGF0aD0iJHsxfSIKKworICAgY2FzZSAiJHtwYXRofSIKKyAgIGluCisgICAgICAqLnppcCkgc2V0IC0tIHVuemlwIC1xOzsKKyAgICAgICoudGFyLmd6KSBzZXQgLS0gdGFyIHhmejs7CisgICAgICAqKSBzZW1hbnRpY0Vycm9yICJ1bnN1cHBvcnRlZCBhcmNoaXZlOiAke3BhdGh9Ijs7CisgICBlc2FjCisKKyAgIGV4ZWN1dGVDb21tYW5kICIke0B9IiAiJHtwYXRofSIKK30KKworYXBwbHlQYXRjaCgpIHsKKyAgIGxvY2FsIHBhdGNoPSIkezF9IgorICAgbG9jYWwgZGlyZWN0b3J5PSIkezJ9IgorICAgbG9jYWwgZmlsZT0iJHszfSIKKyAgIGxvY2FsIHBhdHRlcm49IiR7NH0iCisKKyAgIGxvY2FsIHBhdGg9IiR7ZGlyZWN0b3J5fS8ke2ZpbGV9IgorCisgICBpZiBbIC1mICIke3BhdGh9IiBdCisgICB0aGVuCisgICAgICBncmVwIC1xICIke3BhdHRlcm59IiAiJHtwYXRofSIgfHwgeworICAgICAgICAgbG9jYWwgbmFtZT0iJHtwYXRjaCMjKi99IgorICAgICAgICAgbG9nTWVzc2FnZSB0YXNrICJhcHBseWluZyBwYXRjaDogJHtuYW1lfSIKKworICAgICAgICAgIiR7ZHJ5UnVufSIgfHwgeworICAgICAgICAgICAgZG93bmxvYWRGaWxlICIke3BhdGNofSIKKyAgICAgICAgICAgIGV4ZWN1dGVDb21tYW5kIHBhdGNoIC1OIC1pICIke3RlbXBvcmFyeURpcmVjdG9yeX0vJHtuYW1lfSIgLWQgIiR7ZGlyZWN0b3J5fSIgIiR7ZmlsZX0iCisgICAgICAgICB9CisgICAgICB9CisgICBlbHNlCisgICAgICBsb2dXYXJuaW5nICJmaWxlIG5vdCBmb3VuZDogJHtwYXRofSIKKyAgIGZpCit9CisKK2luc3RhbGxGaWxlKCkgeworICAgbG9jYWwgZmlsZT0iJHsxfSIKKyAgIGxvY2FsIGRpcmVjdG9yeT0iJHsyfSIKKworICAgbG9jYWwgc291cmNlPSIke2ZpbGUjIyovfSIKKyAgIGxvY2FsIHRhcmdldD0iJHtkaXJlY3Rvcnl9LyR7c291cmNlfSIKKworICAgWyAtZSAiJHt0YXJnZXR9IiBdIHx8IHsKKyAgICAgIGxvZ01lc3NhZ2UgdGFzayAiaW5zdGFsbGluZyBmaWxlOiAke3RhcmdldH0iCisKKyAgICAgICIke2RyeVJ1bn0iIHx8IHsKKyAgICAgICAgIGRvd25sb2FkRmlsZSAiJHtmaWxlfSIKKyAgICAgICAgIFsgLWQgIiR7ZGlyZWN0b3J5fSIgXSB8fCBleGVjdXRlQ29tbWFuZCBta2RpciAtcCAiJHtkaXJlY3Rvcnl9IgorICAgICAgICAgZXhlY3V0ZUNvbW1hbmQgY3AgIiR7c291cmNlfSIgIiR7dGFyZ2V0fSIKKyAgICAgIH0KKyAgIH0KK30KKworaW5zdGFsbExpbmsoKSB7CisgICBsb2NhbCB0bz0iJHsxfSIKKyAgIGxvY2FsIGRpcmVjdG9yeT0iJHsyfSIKKyAgIGxvY2FsIG5hbWU9IiR7M30iCisKKyAgIFsgLW4gIiR7bmFtZX0iIF0gfHwgbmFtZT0iJHt0byMjKi99IgorICAgbG9jYWwgZnJvbT0iJHtkaXJlY3Rvcnl9LyR7bmFtZX0iCisKKyAgIGhhdmVQYXRoICIke2Zyb219IiB8fCB7CisgICAgICBsb2dNZXNzYWdlIHRhc2sgImluc3RhbGxpbmcgbGluazogJHtmcm9tfSAtPiAke3RvfSIKKyAgICAgIFsgLWUgIiR7dG99IiBdIHx8IHNlbWFudGljRXJyb3IgImxpbmsgdGFyZ2V0IG5vdCBmb3VuZDogJHt0b30iCisgICAgICAiJHtkcnlSdW59IiB8fCBleGVjdXRlQ29tbWFuZCBsbiAtcyAiJHt0b30iICIke2Zyb219IgorICAgfQorfQorCitpbnN0YWxsV2luZG93c0FyY2hpdmUoKSB7CisgICBsb2NhbCBhcmNoaXZlPSIkezF9IgorICAgbG9jYWwgcGF0aD0iJHsyfSIKKworICAgaGF2ZVBhdGggIiR7cGF0aH0iIHx8IHsKKyAgICAgIGxvZ01lc3NhZ2UgdGFzayAiaW5zdGFsbGluZyBXaW5kb3dzIGFyY2hpdmU6ICR7YXJjaGl2ZX0iCisKKyAgICAgICIke2RyeVJ1bn0iIHx8IHsKKyAgICAgICAgIGRvd25sb2FkRmlsZSAiJHthcmNoaXZlfSIKKworICAgICAgICAgbG9jYWwgZGlyZWN0b3J5PSJjb250ZW50LSR7YXJjaGl2ZX0iCisgICAgICAgICBleGVjdXRlQ29tbWFuZCBta2RpciAiJHtkaXJlY3Rvcnl9IgorICAgICAgICAgZXhlY3V0ZUNvbW1hbmQgY2QgIiR7ZGlyZWN0b3J5fSIKKworICAgICAgICAgdW5wYWNrQXJjaGl2ZSAiLi4vJHthcmNoaXZlfSIKKyAgICAgICAgIHNldCAtLSAqCisKKyAgICAgICAgIGlmIFsgIiR7I30iIC1lcSAxIC1hIC1kICIkezF9IiBdCisgICAgICAgICB0aGVuCisgICAgICAgICAgICBleGVjdXRlQ29tbWFuZCBtdiAiJHsxfSIgIiR7cGF0aH0iCisgICAgICAgICAgICBleGVjdXRlQ29tbWFuZCBjZCAuLgorICAgICAgICAgICAgZXhlY3V0ZUNvbW1hbmQgcm1kaXIgIiR7ZGlyZWN0b3J5fSIKKyAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGV4ZWN1dGVDb21tYW5kIGNkIC4uCisgICAgICAgICAgICBleGVjdXRlQ29tbWFuZCBtdiAiJHtkaXJlY3Rvcnl9IiAiJHtwYXRofSIKKyAgICAgICAgIGZpCisgICAgICB9CisgICB9Cit9CisKK2luc3RhbGxNaW5nd0FyY2hpdmUoKSB7CisgICBsb2NhbCBhcmNoaXZlPSIkezF9IgorICAgbG9jYWwgcGF0aD0iJHsyfSIKKworICAgaGF2ZVBhdGggIiR7bWluZ3dEaXJlY3Rvcnl9LyR7cGF0aH0iIHx8IHsKKyAgICAgIGxvZ01lc3NhZ2UgdGFzayAiaW5zdGFsbGluZyBNaW5HVyBhcmNoaXZlOiAke2FyY2hpdmV9IgorCisgICAgICAiJHtkcnlSdW59IiB8fCB7CisgICAgICAgICBkb3dubG9hZEZpbGUgIk1pbkdXLyR7YXJjaGl2ZX0iCisgICAgICAgICBleGVjdXRlQ29tbWFuZCBjZCAiJHttaW5nd0RpcmVjdG9yeX0iCisgICAgICAgICB1bnBhY2tBcmNoaXZlICIke3RlbXBvcmFyeURpcmVjdG9yeX0vJHthcmNoaXZlfSIKKyAgICAgICAgIGV4ZWN1dGVDb21tYW5kIGNkICIke3RlbXBvcmFyeURpcmVjdG9yeX0iCisgICAgICB9CisgICB9Cit9CisKK2luc3RhbGxNaW5nd1BhY2thZ2UoKSB7CisgICBsb2NhbCBwYWNrYWdlPSIkezF9IgorICAgbG9jYWwgcGF0aD0iJHsyfSIKKworICAgaGF2ZVBhdGggIiR7cGF0aH0iIHx8IHsKKyAgICAgIGxvZ01lc3NhZ2UgdGFzayAiaW5zdGFsbGluZyBNaW5HVyBwYWNrYWdlOiAke3BhY2thZ2V9IgorICAgICAgIiR7ZHJ5UnVufSIgfHwgZXhlY3V0ZUNvbW1hbmQgbWluZ3ctZ2V0IC0tdmVyYm9zZT0wIGluc3RhbGwgIiR7cGFja2FnZX0iCisgICB9Cit9CisKK2luc3RhbGxNaWNyb3NvZnRWaXN1YWxDVG9vbHMoKSB7CisgICBsb2NhbCBmaWxlCisKKyAgIGZvciBmaWxlIGluIGxpYi5leGUgbGluay5leGUgbXNwZGIxMDAuZGxsIG1zdmNyMTAwLmRsbAorICAgZG8KKyAgICAgIGluc3RhbGxGaWxlICJNU1ZDLyR7ZmlsZX0iICIvdXNyL2xvY2FsL2JpbiIKKyAgIGRvbmUKK30KKworaW5zdGFsbFBhY2thZ2VDb25maWd1cmF0aW9uRmlsZXMoKSB7CisgICBsb2NhbCBwYWNrYWdlCisKKyAgIGZvciBwYWNrYWdlIGluIGxpYnVzYiBsaWJ1c2ItMS4wCisgICBkbworICAgICAgaW5zdGFsbEZpbGUgInBrZ2NvbmZpZy8ke3BhY2thZ2V9LnBjIiAiJHtsaWJyYXJpZXNEaXJlY3Rvcnl9L3BrZ2NvbmZpZyIKKyAgIGRvbmUKK30KKworaW5zdGFsbEJsdWV0b290aEhlYWRlcnMoKSB7CisgICBsb2NhbCBuYW1lCisKKyAgIGZvciBuYW1lIGluIHdzMmJ0aCBidGhkZWYgYnRoc2RwZGVmCisgICBkbworICAgICAgaW5zdGFsbEZpbGUgIkJsdWV0b290aC8ke25hbWV9LmgiICIke2hlYWRlcnNEaXJlY3Rvcnl9IgorICAgZG9uZQorfQorCitpbnN0YWxsTGliVVNCMCgpIHsKKyAgIGxvY2FsIGRpcmVjdG9yeT0iJHt3aW5kb3dzRGlyZWN0b3J5fS9MaWJVU0ItV2luMzIiCisgICBpbnN0YWxsV2luZG93c0FyY2hpdmUgbGlidXNiLXdpbjMyLWJpbi0xLjIuNi4wLnppcCAiJHtkaXJlY3Rvcnl9IgorICAgaW5zdGFsbExpbmsgIiR7ZGlyZWN0b3J5fS9pbmNsdWRlL2x1c2IwX3VzYi5oIiAiJHtoZWFkZXJzRGlyZWN0b3J5fSIgdXNiLmgKKyAgIGluc3RhbGxMaW5rICIke2RpcmVjdG9yeX0vbGliL2djYy9saWJ1c2IuYSIgIiR7bGlicmFyaWVzRGlyZWN0b3J5fSIKKyAgIGluc3RhbGxMaW5rICIke2RpcmVjdG9yeX0vYmluL3g4Ni9saWJ1c2IwX3g4Ni5kbGwiICIke2NvbW1hbmRzRGlyZWN0b3J5fSIgbGlidXNiMC5kbGwKK30KKworaW5zdGFsbExpYlVTQjEoKSB7CisgICBsb2NhbCBkaXJlY3Rvcnk9IiR7d2luZG93c0RpcmVjdG9yeX0vTGliVVNCLTEuMCIKKyAgIGluc3RhbGxXaW5kb3dzQXJjaGl2ZSBsaWJ1c2J4LTEuMC4xOC13aW4udGFyLmd6ICIke2RpcmVjdG9yeX0iCisgICBpbnN0YWxsTGluayAiJHtkaXJlY3Rvcnl9L2luY2x1ZGUvbGlidXNieC0xLjAiICIke2hlYWRlcnNEaXJlY3Rvcnl9IiBsaWJ1c2ItMS4wCisgICBpbnN0YWxsTGluayAiJHtkaXJlY3Rvcnl9L01pbkdXMzIvZGxsL2xpYnVzYi0xLjAuZGxsLmEiICIke2xpYnJhcmllc0RpcmVjdG9yeX0iCisgICBpbnN0YWxsTGluayAiJHtkaXJlY3Rvcnl9L01pbkdXMzIvZGxsL2xpYnVzYi0xLjAuZGxsIiAiJHtjb21tYW5kc0RpcmVjdG9yeX0iCisgICBpbnN0YWxsV2luZG93c0FyY2hpdmUgd2ludXNiLnppcCAiJHt3aW5kb3dzRGlyZWN0b3J5fS9XaW5VU0IiCit9CisKK2luc3RhbGxDeXRob24oKSB7CisgICBsb2NhbCBweXRob24KKworICAgaWYgZmluZENvbW1hbmQgcHl0aG9uIHB5dGhvbiBweQorICAgdGhlbgorICAgICAgZXhwb3J0IFBZVEhPTklPRU5DT0RJTkc9InV0Zi04IgorICAgICAgbG9jYWwgZGlyZWN0b3J5PSIke3B5dGhvbiUvKn0iCisKKyAgICAgIGZpbmRDb21tYW5kIGN5dGhvbiBjeXRob24gfHwgeworICAgICAgICAgbG9nTWVzc2FnZSB0YXNrICJpbnN0YWxsaW5nIEN5dGhvbiIKKyAgICAgICAgICIke2RyeVJ1bn0iIHx8IGV4ZWN1dGVDb21tYW5kIHBpcCAtcSBpbnN0YWxsIGN5dGhvbgorICAgICAgfQorCisgICAgICBpbnN0YWxsRmlsZSBDeXRob24vdmNydW50aW1lMTQwLmRsbCAiJHtkaXJlY3Rvcnl9L2xpYnMiCisgICAgICBpbnN0YWxsRmlsZSBDeXRob24vZGlzdHV0aWxzLmNmZyAiJHtkaXJlY3Rvcnl9L2xpYi9kaXN0dXRpbHMiCisgICAgICBhcHBseVBhdGNoICJDeXRob24vUHl0aG9uQ3lnd2luQ0NvbXBpbGVyLnBhdGNoIiAiJHtkaXJlY3Rvcnl9L2xpYi9kaXN0dXRpbHMiICJjeWd3aW5jY29tcGlsZXIucHkiICJ2Y3J1bnRpbWUxNDAiCisgICBlbHNlCisgICAgICBsb2dXYXJuaW5nICJQeXRob24gbm90IGZvdW5kIgorICAgZmkKK30KKworYWRkUHJvZ3JhbU9wdGlvbiBhIHN0cmluZy5VUkwgYXJjaGl2ZVJvb3QgInRoZSBVUkwgZm9yIEJSTFRUWSdzIFdpbmRvd3MgYXJjaGl2ZSIgIiR7ZGVmYXVsdEFyY2hpdmVSb290fSIKK2FkZFByb2dyYW1PcHRpb24gZCBmbGFnIGRyeVJ1biAiZHJ5IHJ1biAtIGRvbid0IGFjdHVhbGx5IGluc3RhbGwgYW55dGhpbmciCithZGRQcm9ncmFtT3B0aW9uIGsgZmxhZyBrZWVwRmlsZXMgImtlZXAgKGRvIG5vdCByZW1vdmUpIHRoZSB0ZW1wb3JhcnkgZGlyZWN0b3J5IgorYWRkUHJvZ3JhbU9wdGlvbiBwIHN0cmluZy5kaXJlY3RvcnkgcHl0aG9uRGlyZWN0b3J5ICJ0aGUgZGlyZWN0b3J5IHdoZXJlIFB5dGhvbiBoYXMgYmVlbiBpbnN0YWxsZWQiCithZGRQcm9ncmFtT3B0aW9uIHQgc3RyaW5nLmRpcmVjdG9yeSB0ZW1wb3JhcnlEaXJlY3RvcnkgInRoZSB0ZW1wb3JhcnkgZGlyZWN0b3J5IHRvIHVzZSIgIiR7ZGVmYXVsdFRlbXBvcmFyeURpcmVjdG9yeX0iCitwYXJzZVByb2dyYW1Bcmd1bWVudHMgIiR7QH0iCisKK1sgLW4gIiR7YXJjaGl2ZVJvb3R9IiBdIHx8IGFyY2hpdmVSb290PSIke2RlZmF1bHRBcmNoaXZlUm9vdH0iCisKK1sgLW4gIiR7cHl0aG9uRGlyZWN0b3J5fSIgXSAmJiB7CisgICBbIC1kICIke3B5dGhvbkRpcmVjdG9yeX0iIF0gfHwgc2VtYW50aWNFcnJvciAiUHl0aG9uIGRpcmVjdG9yeSBub3QgZm91bmQ6ICR7cHl0aG9uRGlyZWN0b3J5fSIKKyAgIFBBVEg9IiR7cHl0aG9uRGlyZWN0b3J5fToke3B5dGhvbkRpcmVjdG9yeX0vc2NyaXB0czoke1BBVEh9IgorfQorCityZWFkb25seSB3aW5kb3dzRGlyZWN0b3J5PSIvYyIKK3ZlcmlmeURpcmVjdG9yeSAiJHt3aW5kb3dzRGlyZWN0b3J5fSIKKworcmVhZG9ubHkgbWluZ3dEaXJlY3Rvcnk9Ii9taW5ndyIKK3ZlcmlmeURpcmVjdG9yeSAiJHttaW5nd0RpcmVjdG9yeX0iCisKK3JlYWRvbmx5IGNvbW1hbmRzRGlyZWN0b3J5PSIke21pbmd3RGlyZWN0b3J5fS9iaW4iCit2ZXJpZnlEaXJlY3RvcnkgIiR7Y29tbWFuZHNEaXJlY3Rvcnl9IgorCityZWFkb25seSBsaWJyYXJpZXNEaXJlY3Rvcnk9IiR7bWluZ3dEaXJlY3Rvcnl9L2xpYiIKK3ZlcmlmeURpcmVjdG9yeSAiJHtsaWJyYXJpZXNEaXJlY3Rvcnl9IgorCityZWFkb25seSBoZWFkZXJzRGlyZWN0b3J5PSIke21pbmd3RGlyZWN0b3J5fS9pbmNsdWRlIgordmVyaWZ5RGlyZWN0b3J5ICIke2hlYWRlcnNEaXJlY3Rvcnl9IgorCitpZiBbIC16ICIke3RlbXBvcmFyeURpcmVjdG9yeX0iIF0KK3RoZW4KKyAgIHRlbXBvcmFyeURpcmVjdG9yeT0iJHtkZWZhdWx0VGVtcG9yYXJ5RGlyZWN0b3J5fSIKKyAgIHJtIC1mIC1yICIke3RlbXBvcmFyeURpcmVjdG9yeX0iCitlbGlmIFsgLWUgIiR7dGVtcG9yYXJ5RGlyZWN0b3J5fSIgXQordGhlbgorICAgc2VtYW50aWNFcnJvciAiZGlyZWN0b3J5IGFscmVhZHkgZXhpc3RzOiAke3RlbXBvcmFyeURpcmVjdG9yeX0iCitmaQorCitta2RpciAtcCAiJHt0ZW1wb3JhcnlEaXJlY3Rvcnl9IgorY2QgIiR7dGVtcG9yYXJ5RGlyZWN0b3J5fSIKK3RlbXBvcmFyeURpcmVjdG9yeT0iJChwd2QgLVcpIgorCitpbnN0YWxsTWluZ3dQYWNrYWdlIG1zeXMtYmlzb24gL2Jpbi9iaXNvbgoraW5zdGFsbE1pbmd3UGFja2FnZSBtc3lzLWRvczJ1bml4IC9iaW4vZG9zMnVuaXgKK2luc3RhbGxNaW5nd1BhY2thZ2UgbXN5cy1ncm9mZiAvYmluL2dyb2ZmCitpbnN0YWxsTWluZ3dQYWNrYWdlIG1zeXMtbTQgL2Jpbi9tNAoraW5zdGFsbE1pbmd3UGFja2FnZSBtc3lzLXRhciAvYmluL3RhcgoraW5zdGFsbE1pbmd3UGFja2FnZSBtc3lzLXVuemlwIC9iaW4vdW56aXAKK2luc3RhbGxNaW5nd1BhY2thZ2UgbXN5cy13Z2V0IC9iaW4vd2dldAoraW5zdGFsbE1pbmd3UGFja2FnZSBtc3lzLXppcCAvYmluL3ppcAorCitpbnN0YWxsTWluZ3dQYWNrYWdlIG1pbmd3MzItbGlicGRjdXJzZXMgL21pbmd3L2luY2x1ZGUvY3Vyc2VzLmgKK2luc3RhbGxNaW5nd1BhY2thZ2UgbWluZ3czMi1wdGhyZWFkcy13MzIgL21pbmd3L2luY2x1ZGUvcHRocmVhZC5oCitpbnN0YWxsTWluZ3dQYWNrYWdlIG1pbmd3MzItdGNsIC9taW5ndy9iaW4vdGNsc2gKKworaW5zdGFsbE1pY3Jvc29mdFZpc3VhbENUb29scworaW5zdGFsbFBhY2thZ2VDb25maWd1cmF0aW9uRmlsZXMKK2luc3RhbGxCbHVldG9vdGhIZWFkZXJzCisKK2luc3RhbGxNaW5nd0FyY2hpdmUgcGtnLWNvbmZpZ18wLjI4LTFfd2luMzIuemlwICJiaW4vcGtnLWNvbmZpZy5leGUiCitpbnN0YWxsTWluZ3dBcmNoaXZlIGdsaWJfMi4zNC4zLTFfd2luMzIuemlwICJiaW4vbGliZ29iamVjdC0yLjAtMC5kbGwiCisKK2luc3RhbGxXaW5kb3dzQXJjaGl2ZSBBdXRvSG90a2V5MTA0ODA1LnRhci5neiAiJHthaGtMb2NhdGlvbn0iCitpbnN0YWxsV2luZG93c0FyY2hpdmUgbnNpcy0zLjBiMC50YXIuZ3ogIiR7bnNpc0xvY2F0aW9ufSIKK2luc3RhbGxXaW5kb3dzQXJjaGl2ZSBpY3U0Yy01M18xLVdpbjMyLW1zdmMxMC56aXAgIiR7aWN1TG9jYXRpb259IgorCitpbnN0YWxsTGliVVNCMAoraW5zdGFsbExpYlVTQjEKK2luc3RhbGxDeXRob24KKworIiR7a2VlcEZpbGVzfSIgfHwgeworICAgbG9nTWVzc2FnZSB0YXNrICJjbGVhbmluZyB1cCIKKyAgIGNkICIke2luaXRpYWxEaXJlY3Rvcnl9IgorICAgcm0gLWYgLXIgIiR7dGVtcG9yYXJ5RGlyZWN0b3J5fSIKK30KKworbG9nTWVzc2FnZSB0YXNrICJkb25lIgorZXhpdCAwCmRpZmYgLS1naXQgYS9XaW5kb3dzL3dpbnVzYi5pbmYgYi9XaW5kb3dzL3dpbnVzYi5pbmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWQ5MDM0OAotLS0gL2Rldi9udWxsCisrKyBiL1dpbmRvd3Mvd2ludXNiLmluZgpAQCAtMCwwICsxLDgxMCBAQAorW1N0cmluZ3NdCitQcm92aWRlck5hbWUgID0gIkJSTFRUWSIKK0RyaXZlckRhdGUgICAgPSAiMTIvMjEvMjAyMSIKK0RyaXZlclZlcnNpb24gPSAiNi40LjAuMjI4IgorQ2xhc3NOYW1lICAgICA9ICJVU0IgQnJhaWxsZSBEZXZpY2VzIgorQ2xhc3NHVUlEICAgICA9ICJ7MTcyMGZhOGUtZWQxNS00MzQ2LWI3M2QtOTA5ZWI0MWU4OWVmfSIKKworUkVHX01VTFRJX1NaID0gMHgwMDAxMDAwMAorCitbVmVyc2lvbl0KK1NpZ25hdHVyZSA9ICIkV2luZG93cyBOVCQiCitDbGFzcyAgICAgPSAlQ2xhc3NOYW1lJQorQ2xhc3NHVUlEID0gJUNsYXNzR1VJRCUKK1Byb3ZpZGVyICA9ICVQcm92aWRlck5hbWUlCitDYXRhbG9nRmlsZSA9IFdpblVTQkluc3RhbGxhdGlvbi5jYXQKK0RyaXZlclZlciA9ICVEcml2ZXJEYXRlJSwlRHJpdmVyVmVyc2lvbiUKKworOyA9PT09PT09PT09IE1hbnVmYWN0dXJlci9Nb2RlbHMgc2VjdGlvbnMgPT09PT09PT09PT0KKworW01hbnVmYWN0dXJlcl0KKyVQcm92aWRlck5hbWUlID0gU3RhbmRhcmQsTlR4ODYsTlRhbWQ2NAorCitbU3RhbmRhcmQuTlR4ODZdCis7IEJFR0lOX1VTQl9CUkFJTExFX0RFVklDRVMgd2ludXNiIFVTQl9JbnN0YWxsCisKKzsgRGV2aWNlOiAwNDAzOjYwMDEKKzsgR2VuZXJpYyBJZGVudGlmaWVyCis7IFZlbmRvcjogRnV0dXJlIFRlY2hub2xvZ3kgRGV2aWNlcyBJbnRlcm5hdGlvbmFsLCBMdGQuCis7IFByb2R1Y3Q6IEZUMjMyIFVTQi1TZXJpYWwgKFVBUlQpIElDCisid2ludXNiOiBBbGJhdHJvc3MgW2FsbCBtb2RlbHNdLCBDZWJyYSBbYWxsIG1vZGVsc10sIEhJTVMgW1N5bmMgQnJhaWxsZV0sIEhhbmR5VGVjaCBbRlRESSBjaGlwXSwgSGVkbyBbTW9iaWxMaW5lXSwgTURWIFthbGwgbW9kZWxzXSI9VVNCX0luc3RhbGwsIFVTQlxWSURfMDQwMyZQSURfNjAwMQorCis7IERldmljZTogMDQwMzo2MDEwCis7IEdlbmVyaWMgSWRlbnRpZmllcgorOyBWZW5kb3I6IEZ1dHVyZSBUZWNobm9sb2d5IERldmljZXMgSW50ZXJuYXRpb25hbCwgTHRkCis7IFByb2R1Y3Q6IEZUMjIzMkMvRC9IIER1YWwgVUFSVC9GSUZPIElDCisid2ludXNiOiBEb3RQYWQgW2FsbCBtb2RlbHNdIj1VU0JfSW5zdGFsbCwgVVNCXFZJRF8wNDAzJlBJRF82MDEwCisKKzsgRGV2aWNlOiAwNDAzOkRFNTgKKyJ3aW51c2I6IEhlZG8gW01vYmlsTGluZV0iPVVTQl9JbnN0YWxsLCBVU0JcVklEXzA0MDMmUElEX0RFNTgKKworOyBEZXZpY2U6IDA0MDM6REU1OQorIndpbnVzYjogSGVkbyBbUHJvZmlMaW5lXSI9VVNCX0luc3RhbGwsIFVTQlxWSURfMDQwMyZQSURfREU1OQorCis7IERldmljZTogMDQwMzpGMjA4Cisid2ludXNiOiBQYXBlbm1laWVyIFthbGwgbW9kZWxzXSI9VVNCX0luc3RhbGwsIFVTQlxWSURfMDQwMyZQSURfRjIwOAorCis7IERldmljZTogMDQwMzpGRTcwCisid2ludXNiOiBCYXVtIFtWYXJpbyA0MCAoNDAgY2VsbHMpXSI9VVNCX0luc3RhbGwsIFVTQlxWSURfMDQwMyZQSURfRkU3MAorCis7IERldmljZTogMDQwMzpGRTcxCisid2ludXNiOiBCYXVtIFtQb2NrZXRWYXJpbyAoMjQgY2VsbHMpXSI9VVNCX0luc3RhbGwsIFVTQlxWSURfMDQwMyZQSURfRkU3MQorCis7IERldmljZTogMDQwMzpGRTcyCisid2ludXNiOiBCYXVtIFtTdXBlclZhcmlvIDQwICg0MCBjZWxscyldIj1VU0JfSW5zdGFsbCwgVVNCXFZJRF8wNDAzJlBJRF9GRTcyCisKKzsgRGV2aWNlOiAwNDAzOkZFNzMKKyJ3aW51c2I6IEJhdW0gW1N1cGVyVmFyaW8gMzIgKDMyIGNlbGxzKV0iPVVTQl9JbnN0YWxsLCBVU0JcVklEXzA0MDMmUElEX0ZFNzMKKworOyBEZXZpY2U6IDA0MDM6RkU3NAorIndpbnVzYjogQmF1bSBbU3VwZXJWYXJpbyA2NCAoNjQgY2VsbHMpXSI9VVNCX0luc3RhbGwsIFVTQlxWSURfMDQwMyZQSURfRkU3NAorCis7IERldmljZTogMDQwMzpGRTc1Cisid2ludXNiOiBCYXVtIFtTdXBlclZhcmlvIDgwICg4MCBjZWxscyldIj1VU0JfSW5zdGFsbCwgVVNCXFZJRF8wNDAzJlBJRF9GRTc1CisKKzsgRGV2aWNlOiAwNDAzOkZFNzYKKyJ3aW51c2I6IEJhdW0gW1ZhcmlvUHJvIDgwICg4MCBjZWxscyldIj1VU0JfSW5zdGFsbCwgVVNCXFZJRF8wNDAzJlBJRF9GRTc2CisKKzsgRGV2aWNlOiAwNDAzOkZFNzcKKyJ3aW51c2I6IEJhdW0gW1ZhcmlvUHJvIDY0ICg2NCBjZWxscyldIj1VU0JfSW5zdGFsbCwgVVNCXFZJRF8wNDAzJlBJRF9GRTc3CisKKzsgRGV2aWNlOiAwNDUyOjAxMDAKKyJ3aW51c2I6IE1ldGVjIFthbGwgbW9kZWxzXSI9VVNCX0luc3RhbGwsIFVTQlxWSURfMDQ1MiZQSURfMDEwMAorCis7IERldmljZTogMDQ1RTo5MzBBCisid2ludXNiOiBISU1TIFtCcmFpbGxlIFNlbnNlIChVU0IgMS4xKV0sIEhJTVMgW0JyYWlsbGUgU2Vuc2UgKFVTQiAyLjApXSwgSElNUyBbQnJhaWxsZSBTZW5zZSBVMiAoVVNCIDIuMCldIj1VU0JfSW5zdGFsbCwgVVNCXFZJRF8wNDVFJlBJRF85MzBBCisKKzsgRGV2aWNlOiAwNDVFOjkzMEIKKyJ3aW51c2I6IEhJTVMgW0JyYWlsbGUgRWRnZSBhbmQgUUJyYWlsbGVYTF0iPVVTQl9JbnN0YWxsLCBVU0JcVklEXzA0NUUmUElEXzkzMEIKKworOyBEZXZpY2U6IDA0ODM6QTFEMworIndpbnVzYjogQmF1bSBbT3JiaXQgUmVhZGVyIDIwICgyMCBjZWxscyldIj1VU0JfSW5zdGFsbCwgVVNCXFZJRF8wNDgzJlBJRF9BMUQzCisKKzsgRGV2aWNlOiAwNDgzOkEzNjYKKyJ3aW51c2I6IEJhdW0gW09yYml0IFJlYWRlciA0MCAoNDAgY2VsbHMpXSI9VVNCX0luc3RhbGwsIFVTQlxWSURfMDQ4MyZQSURfQTM2NgorCis7IERldmljZTogMDZCMDowMDAxCisid2ludXNiOiBBbHZhIFtTYXRlbGxpdGUgKDVubildIj1VU0JfSW5zdGFsbCwgVVNCXFZJRF8wNkIwJlBJRF8wMDAxCisKKzsgRGV2aWNlOiAwNzk4OjAwMDEKKyJ3aW51c2I6IFZveWFnZXIgW2FsbCBtb2RlbHNdIj1VU0JfSW5zdGFsbCwgVVNCXFZJRF8wNzk4JlBJRF8wMDAxCisKKzsgRGV2aWNlOiAwNzk4OjA2MDAKKyJ3aW51c2I6IEFsdmEgW1ZveWFnZXIgUHJvdG9jb2wgQ29udmVydGVyXSI9VVNCX0luc3RhbGwsIFVTQlxWSURfMDc5OCZQSURfMDYwMAorCis7IERldmljZTogMDc5ODowNjI0Cisid2ludXNiOiBBbHZhIFtCQzYyNF0iPVVTQl9JbnN0YWxsLCBVU0JcVklEXzA3OTgmUElEXzA2MjQKKworOyBEZXZpY2U6IDA3OTg6MDY0MAorIndpbnVzYjogQWx2YSBbQkM2NDBdIj1VU0JfSW5zdGFsbCwgVVNCXFZJRF8wNzk4JlBJRF8wNjQwCisKKzsgRGV2aWNlOiAwNzk4OjA2ODAKKyJ3aW51c2I6IEFsdmEgW0JDNjgwXSI9VVNCX0luc3RhbGwsIFVTQlxWSURfMDc5OCZQSURfMDY4MAorCis7IERldmljZTogMDkwNDoxMDE2Cisid2ludXNiOiBGcmFua0F1ZGlvZGF0YSBbQjJLODQgKGJlZm9yZSBmaXJtd2FyZSBpbnN0YWxsYXRpb24pXSI9VVNCX0luc3RhbGwsIFVTQlxWSURfMDkwNCZQSURfMTAxNgorCis7IERldmljZTogMDkwNDoxMDE3Cisid2ludXNiOiBGcmFua0F1ZGlvZGF0YSBbQjJLODQgKGFmdGVyIGZpcm13YXJlIGluc3RhbGxhdGlvbildIj1VU0JfSW5zdGFsbCwgVVNCXFZJRF8wOTA0JlBJRF8xMDE3CisKKzsgRGV2aWNlOiAwOTA0OjIwMDAKKyJ3aW51c2I6IEJhdW0gW1ZhcmlvUHJvIDQwICg0MCBjZWxscyldIj1VU0JfSW5zdGFsbCwgVVNCXFZJRF8wOTA0JlBJRF8yMDAwCisKKzsgRGV2aWNlOiAwOTA0OjIwMDEKKyJ3aW51c2I6IEJhdW0gW0Vjb1ZhcmlvIDI0ICgyNCBjZWxscyldIj1VU0JfSW5zdGFsbCwgVVNCXFZJRF8wOTA0JlBJRF8yMDAxCisKKzsgRGV2aWNlOiAwOTA0OjIwMDIKKyJ3aW51c2I6IEJhdW0gW0Vjb1ZhcmlvIDQwICg0MCBjZWxscyldIj1VU0JfSW5zdGFsbCwgVVNCXFZJRF8wOTA0JlBJRF8yMDAyCisKKzsgRGV2aWNlOiAwOTA0OjIwMDcKKyJ3aW51c2I6IEJhdW0gW1ZhcmlvQ29ubmVjdCA0MCAoNDAgY2VsbHMpXSI9VVNCX0luc3RhbGwsIFVTQlxWSURfMDkwNCZQSURfMjAwNworCis7IERldmljZTogMDkwNDoyMDA4Cisid2ludXNiOiBCYXVtIFtWYXJpb0Nvbm5lY3QgMzIgKDMyIGNlbGxzKV0iPVVTQl9JbnN0YWxsLCBVU0JcVklEXzA5MDQmUElEXzIwMDgKKworOyBEZXZpY2U6IDA5MDQ6MjAwOQorIndpbnVzYjogQmF1bSBbVmFyaW9Db25uZWN0IDI0ICgyNCBjZWxscyldIj1VU0JfSW5zdGFsbCwgVVNCXFZJRF8wOTA0JlBJRF8yMDA5CisKKzsgRGV2aWNlOiAwOTA0OjIwMTAKKyJ3aW51c2I6IEJhdW0gW1ZhcmlvQ29ubmVjdCA2NCAoNjQgY2VsbHMpXSI9VVNCX0luc3RhbGwsIFVTQlxWSURfMDkwNCZQSURfMjAxMAorCis7IERldmljZTogMDkwNDoyMDExCisid2ludXNiOiBCYXVtIFtWYXJpb0Nvbm5lY3QgODAgKDgwIGNlbGxzKV0iPVVTQl9JbnN0YWxsLCBVU0JcVklEXzA5MDQmUElEXzIwMTEKKworOyBEZXZpY2U6IDA5MDQ6MjAxNAorIndpbnVzYjogQmF1bSBbRWNvVmFyaW8gMzIgKDMyIGNlbGxzKV0iPVVTQl9JbnN0YWxsLCBVU0JcVklEXzA5MDQmUElEXzIwMTQKKworOyBEZXZpY2U6IDA5MDQ6MjAxNQorIndpbnVzYjogQmF1bSBbRWNvVmFyaW8gNjQgKDY0IGNlbGxzKV0iPVVTQl9JbnN0YWxsLCBVU0JcVklEXzA5MDQmUElEXzIwMTUKKworOyBEZXZpY2U6IDA5MDQ6MjAxNgorIndpbnVzYjogQmF1bSBbRWNvVmFyaW8gODAgKDgwIGNlbGxzKV0iPVVTQl9JbnN0YWxsLCBVU0JcVklEXzA5MDQmUElEXzIwMTYKKworOyBEZXZpY2U6IDA5MDQ6MzAwMAorIndpbnVzYjogQmF1bSBbUmVmcmVzaGFicmFpbGxlIDE4ICgxOCBjZWxscyldIj1VU0JfSW5zdGFsbCwgVVNCXFZJRF8wOTA0JlBJRF8zMDAwCisKKzsgRGV2aWNlOiAwOTA0OjMwMDEKKyJ3aW51c2I6IEJhdW0gW09yYml0IGluIFJlZnJlc2hhYnJhaWxsZSBFbXVsYXRpb24gTW9kZSAoMTggY2VsbHMpXSwgQmF1bSBbUmVmcmVzaGFicmFpbGxlIDE4ICgxOCBjZWxscyldIj1VU0JfSW5zdGFsbCwgVVNCXFZJRF8wOTA0JlBJRF8zMDAxCisKKzsgRGV2aWNlOiAwOTA0OjQwMDQKKyJ3aW51c2I6IEJhdW0gW1Byb250byEgVjMgMTggKDE4IGNlbGxzKV0iPVVTQl9JbnN0YWxsLCBVU0JcVklEXzA5MDQmUElEXzQwMDQKKworOyBEZXZpY2U6IDA5MDQ6NDAwNQorIndpbnVzYjogQmF1bSBbUHJvbnRvISBWMyA0MCAoNDAgY2VsbHMpXSI9VVNCX0luc3RhbGwsIFVTQlxWSURfMDkwNCZQSURfNDAwNQorCis7IERldmljZTogMDkwNDo0MDA3Cisid2ludXNiOiBCYXVtIFtQcm9udG8hIFY0IDE4ICgxOCBjZWxscyldIj1VU0JfSW5zdGFsbCwgVVNCXFZJRF8wOTA0JlBJRF80MDA3CisKKzsgRGV2aWNlOiAwOTA0OjQwMDgKKyJ3aW51c2I6IEJhdW0gW1Byb250byEgVjQgNDAgKDQwIGNlbGxzKV0iPVVTQl9JbnN0YWxsLCBVU0JcVklEXzA5MDQmUElEXzQwMDgKKworOyBEZXZpY2U6IDA5MDQ6NjAwMQorIndpbnVzYjogQmF1bSBbU3VwZXJWYXJpbzIgNDAgKDQwIGNlbGxzKV0iPVVTQl9JbnN0YWxsLCBVU0JcVklEXzA5MDQmUElEXzYwMDEKKworOyBEZXZpY2U6IDA5MDQ6NjAwMgorIndpbnVzYjogQmF1bSBbUG9ja2V0VmFyaW8yICgyNCBjZWxscyldIj1VU0JfSW5zdGFsbCwgVVNCXFZJRF8wOTA0JlBJRF82MDAyCisKKzsgRGV2aWNlOiAwOTA0OjYwMDMKKyJ3aW51c2I6IEJhdW0gW1N1cGVyVmFyaW8yIDMyICgzMiBjZWxscyldIj1VU0JfSW5zdGFsbCwgVVNCXFZJRF8wOTA0JlBJRF82MDAzCisKKzsgRGV2aWNlOiAwOTA0OjYwMDQKKyJ3aW51c2I6IEJhdW0gW1N1cGVyVmFyaW8yIDY0ICg2NCBjZWxscyldIj1VU0JfSW5zdGFsbCwgVVNCXFZJRF8wOTA0JlBJRF82MDA0CisKKzsgRGV2aWNlOiAwOTA0OjYwMDUKKyJ3aW51c2I6IEJhdW0gW1N1cGVyVmFyaW8yIDgwICg4MCBjZWxscyldIj1VU0JfSW5zdGFsbCwgVVNCXFZJRF8wOTA0JlBJRF82MDA1CisKKzsgRGV2aWNlOiAwOTA0OjYwMDYKKyJ3aW51c2I6IEJhdW0gW0JyYWlsbGlhbnQyIDQwICg0MCBjZWxscyldIj1VU0JfSW5zdGFsbCwgVVNCXFZJRF8wOTA0JlBJRF82MDA2CisKKzsgRGV2aWNlOiAwOTA0OjYwMDcKKyJ3aW51c2I6IEJhdW0gW0JyYWlsbGlhbnQyIDI0ICgyNCBjZWxscyldIj1VU0JfSW5zdGFsbCwgVVNCXFZJRF8wOTA0JlBJRF82MDA3CisKKzsgRGV2aWNlOiAwOTA0OjYwMDgKKyJ3aW51c2I6IEJhdW0gW0JyYWlsbGlhbnQyIDMyICgzMiBjZWxscyldIj1VU0JfSW5zdGFsbCwgVVNCXFZJRF8wOTA0JlBJRF82MDA4CisKKzsgRGV2aWNlOiAwOTA0OjYwMDkKKyJ3aW51c2I6IEJhdW0gW0JyYWlsbGlhbnQyIDY0ICg2NCBjZWxscyldIj1VU0JfSW5zdGFsbCwgVVNCXFZJRF8wOTA0JlBJRF82MDA5CisKKzsgRGV2aWNlOiAwOTA0OjYwMEEKKyJ3aW51c2I6IEJhdW0gW0JyYWlsbGlhbnQyIDgwICg4MCBjZWxscyldIj1VU0JfSW5zdGFsbCwgVVNCXFZJRF8wOTA0JlBJRF82MDBBCisKKzsgRGV2aWNlOiAwOTA0OjYwMTEKKyJ3aW51c2I6IEJhdW0gW1ZhcmlvQ29ubmVjdCAyNCAoMjQgY2VsbHMpXSI9VVNCX0luc3RhbGwsIFVTQlxWSURfMDkwNCZQSURfNjAxMQorCis7IERldmljZTogMDkwNDo2MDEyCisid2ludXNiOiBCYXVtIFtWYXJpb0Nvbm5lY3QgMzIgKDMyIGNlbGxzKV0iPVVTQl9JbnN0YWxsLCBVU0JcVklEXzA5MDQmUElEXzYwMTIKKworOyBEZXZpY2U6IDA5MDQ6NjAxMworIndpbnVzYjogQmF1bSBbVmFyaW9Db25uZWN0IDQwICg0MCBjZWxscyldIj1VU0JfSW5zdGFsbCwgVVNCXFZJRF8wOTA0JlBJRF82MDEzCisKKzsgRGV2aWNlOiAwOTA0OjYxMDEKKyJ3aW51c2I6IEJhdW0gW1ZhcmlvVWx0cmEgMjAgKDIwIGNlbGxzKV0iPVVTQl9JbnN0YWxsLCBVU0JcVklEXzA5MDQmUElEXzYxMDEKKworOyBEZXZpY2U6IDA5MDQ6NjEwMgorIndpbnVzYjogQmF1bSBbVmFyaW9VbHRyYSA0MCAoNDAgY2VsbHMpXSI9VVNCX0luc3RhbGwsIFVTQlxWSURfMDkwNCZQSURfNjEwMgorCis7IERldmljZTogMDkwNDo2MTAzCisid2ludXNiOiBCYXVtIFtWYXJpb1VsdHJhIDMyICgzMiBjZWxscyldIj1VU0JfSW5zdGFsbCwgVVNCXFZJRF8wOTA0JlBJRF82MTAzCisKKzsgRGV2aWNlOiAwOTIxOjEyMDAKKyJ3aW51c2I6IEhhbmR5VGVjaCBbR29IdWJzIGNoaXBdIj1VU0JfSW5zdGFsbCwgVVNCXFZJRF8wOTIxJlBJRF8xMjAwCisKKzsgRGV2aWNlOiAwRjRFOjAxMDAKKyJ3aW51c2I6IEZyZWVkb21TY2llbnRpZmljIFtGb2N1cyAxXSI9VVNCX0luc3RhbGwsIFVTQlxWSURfMEY0RSZQSURfMDEwMAorCis7IERldmljZTogMEY0RTowMTExCisid2ludXNiOiBGcmVlZG9tU2NpZW50aWZpYyBbUEFDIE1hdGVdIj1VU0JfSW5zdGFsbCwgVVNCXFZJRF8wRjRFJlBJRF8wMTExCisKKzsgRGV2aWNlOiAwRjRFOjAxMTIKKyJ3aW51c2I6IEZyZWVkb21TY2llbnRpZmljIFtGb2N1cyAyXSI9VVNCX0luc3RhbGwsIFVTQlxWSURfMEY0RSZQSURfMDExMgorCis7IERldmljZTogMEY0RTowMTE0Cisid2ludXNiOiBGcmVlZG9tU2NpZW50aWZpYyBbRm9jdXMgMytdIj1VU0JfSW5zdGFsbCwgVVNCXFZJRF8wRjRFJlBJRF8wMTE0CisKKzsgRGV2aWNlOiAxMEM0OkVBNjAKKzsgR2VuZXJpYyBJZGVudGlmaWVyCis7IFZlbmRvcjogQ3lnbmFsIEludGVncmF0ZWQgUHJvZHVjdHMsIEluYy4KKzsgUHJvZHVjdDogQ1AyMTB4IFVBUlQgQnJpZGdlIC8gbXlBVlIgbXlTbWFydFVTQiBsaWdodAorIndpbnVzYjogQnJhaWxsZU1lbW8gW1BvY2tldF0sIFNlaWthIFtCcmFpbGxlIERpc3BsYXldIj1VU0JfSW5zdGFsbCwgVVNCXFZJRF8xMEM0JlBJRF9FQTYwCisKKzsgRGV2aWNlOiAxMEM0OkVBODAKKzsgR2VuZXJpYyBJZGVudGlmaWVyCis7IFZlbmRvcjogQ3lnbmFsIEludGVncmF0ZWQgUHJvZHVjdHMsIEluYy4KKzsgUHJvZHVjdDogQ1AyMTB4IFVBUlQgQnJpZGdlCisid2ludXNiOiBTZWlrYSBbTm90ZSBUYWtlcl0iPVVTQl9JbnN0YWxsLCBVU0JcVklEXzEwQzQmUElEX0VBODAKKworOyBEZXZpY2U6IDExNDg6MDMwMQorIndpbnVzYjogQnJhaWxsZU1lbW8gW1NtYXJ0XSI9VVNCX0luc3RhbGwsIFVTQlxWSURfMTE0OCZQSURfMDMwMQorCis7IERldmljZTogMTIwOTpBQkMwCisid2ludXNiOiBJbmNlcHRvciBbYWxsIG1vZGVsc10iPVVTQl9JbnN0YWxsLCBVU0JcVklEXzEyMDkmUElEX0FCQzAKKworOyBEZXZpY2U6IDE2QzA6MDVFMQorIndpbnVzYjogQ2FudXRlIFthbGwgbW9kZWxzXSI9VVNCX0luc3RhbGwsIFVTQlxWSURfMTZDMCZQSURfMDVFMQorCis7IERldmljZTogMUE4Njo3NTIzCis7IEdlbmVyaWMgSWRlbnRpZmllcgorOyBWZW5kb3I6IEppYW5nc3UgUWluSGVuZywgTHRkLgorOyBQcm9kdWN0OiBDSDM0MSBVU0IgQnJpZGdlIENvbnRyb2xsZXIKKyJ3aW51c2I6IEJhdW0gW05MUyBlUmVhZGVyIFpvb21heCAoMjAgY2VsbHMpXSI9VVNCX0luc3RhbGwsIFVTQlxWSURfMUE4NiZQSURfNzUyMworCis7IERldmljZTogMUM3MTpDMDA0Cisid2ludXNiOiBCcmFpbGxlTm90ZSBbSHVtYW5XYXJlIEFQRVhdIj1VU0JfSW5zdGFsbCwgVVNCXFZJRF8xQzcxJlBJRF9DMDA0CisKKzsgRGV2aWNlOiAxQzcxOkMwMDUKKyJ3aW51c2I6IEh1bWFuV2FyZSBbQnJhaWxsaWFudCBCSSAzMi80MCwgQnJhaWxsaWFudCBCIDgwIChzZXJpYWwgcHJvdG9jb2wpXSI9VVNCX0luc3RhbGwsIFVTQlxWSURfMUM3MSZQSURfQzAwNQorCis7IERldmljZTogMUM3MTpDMDA2Cisid2ludXNiOiBIdW1hbldhcmUgW25vbi1Ub3VjaCBtb2RlbHMgKEhJRCBwcm90b2NvbCldIj1VU0JfSW5zdGFsbCwgVVNCXFZJRF8xQzcxJlBJRF9DMDA2CisKKzsgRGV2aWNlOiAxQzcxOkMwMEEKKyJ3aW51c2I6IEh1bWFuV2FyZSBbQnJhaWxsZU5vdGUgVG91Y2ggKEhJRCBwcm90b2NvbCldIj1VU0JfSW5zdGFsbCwgVVNCXFZJRF8xQzcxJlBJRF9DMDBBCisKKzsgRGV2aWNlOiAxQzcxOkMwMjEKKyJ3aW51c2I6IEh1bWFuV2FyZSBbQnJhaWxsaWFudCBCSSAxNCAoc2VyaWFsIHByb3RvY29sKV0iPVVTQl9JbnN0YWxsLCBVU0JcVklEXzFDNzEmUElEX0MwMjEKKworOyBEZXZpY2U6IDFDNzE6QzEwMQorIndpbnVzYjogSHVtYW5XYXJlIFtBUEggQ2hhbWVsZW9uIDIwIChISUQgcHJvdG9jb2wsIGZpcm13YXJlIDEuMCldLCBIdW1hbldhcmUgW0FQSCBDaGFtZWxlb24gMjAgKEhJRCBwcm90b2NvbCwgZmlybXdhcmUgMS4xKV0iPVVTQl9JbnN0YWxsLCBVU0JcVklEXzFDNzEmUElEX0MxMDEKKworOyBEZXZpY2U6IDFDNzE6QzEwNAorIndpbnVzYjogSHVtYW5XYXJlIFtBUEggQ2hhbWVsZW9uIDIwIChzZXJpYWwgcHJvdG9jb2wpXSI9VVNCX0luc3RhbGwsIFVTQlxWSURfMUM3MSZQSURfQzEwNAorCis7IERldmljZTogMUM3MTpDMTExCisid2ludXNiOiBIdW1hbldhcmUgW0FQSCBNYW50aXMgUTQwIChISUQgcHJvdG9jb2wsIGZpcm13YXJlIDEuMCldLCBIdW1hbldhcmUgW0FQSCBNYW50aXMgUTQwIChISUQgcHJvdG9jb2wsIGZpcm13YXJlIDEuMSldIj1VU0JfSW5zdGFsbCwgVVNCXFZJRF8xQzcxJlBJRF9DMTExCisKKzsgRGV2aWNlOiAxQzcxOkMxMTQKKyJ3aW51c2I6IEh1bWFuV2FyZSBbQVBIIE1hbnRpcyBRNDAgKHNlcmlhbCBwcm90b2NvbCldIj1VU0JfSW5zdGFsbCwgVVNCXFZJRF8xQzcxJlBJRF9DMTE0CisKKzsgRGV2aWNlOiAxQzcxOkMxMjEKKyJ3aW51c2I6IEh1bWFuV2FyZSBbSHVtYW53YXJlIEJyYWlsbGVPbmUgKEhJRCBwcm90b2NvbCwgZmlybXdhcmUgMS4wKV0sIEh1bWFuV2FyZSBbSHVtYW53YXJlIEJyYWlsbGVPbmUgKEhJRCBwcm90b2NvbCwgZmlybXdhcmUgMS4xKV0iPVVTQl9JbnN0YWxsLCBVU0JcVklEXzFDNzEmUElEX0MxMjEKKworOyBEZXZpY2U6IDFDNzE6QzEyNAorIndpbnVzYjogSHVtYW5XYXJlIFtIdW1hbndhcmUgQnJhaWxsZU9uZSAoc2VyaWFsIHByb3RvY29sKV0iPVVTQl9JbnN0YWxsLCBVU0JcVklEXzFDNzEmUElEX0MxMjQKKworOyBEZXZpY2U6IDFDNzE6QzEzMQorIndpbnVzYjogSHVtYW5XYXJlIFtIdW1hbndhcmUgQnJhaWxsaWFudCBCSSA0MFggKEhJRCBwcm90b2NvbCwgZmlybXdhcmUgMS4wKV0sIEh1bWFuV2FyZSBbSHVtYW53YXJlIEJyYWlsbGlhbnQgQkkgNDBYIChISUQgcHJvdG9jb2wsIGZpcm13YXJlIDEuMSldIj1VU0JfSW5zdGFsbCwgVVNCXFZJRF8xQzcxJlBJRF9DMTMxCisKKzsgRGV2aWNlOiAxQzcxOkMxNDEKKyJ3aW51c2I6IEh1bWFuV2FyZSBbSHVtYW53YXJlIEJyYWlsbGlhbnQgQkkgMjBYIChISUQgcHJvdG9jb2wsIGZpcm13YXJlIDEuMCldLCBIdW1hbldhcmUgW0h1bWFud2FyZSBCcmFpbGxpYW50IEJJIDIwWCAoSElEIHByb3RvY29sLCBmaXJtd2FyZSAxLjEpXSI9VVNCX0luc3RhbGwsIFVTQlxWSURfMUM3MSZQSURfQzE0MQorCis7IERldmljZTogMUM3MTpDRTAxCisid2ludXNiOiBIdW1hbldhcmUgW05MUyBlUmVhZGVyIChISUQgcHJvdG9jb2wsIGZpcm13YXJlIDEuMCldLCBIdW1hbldhcmUgW05MUyBlUmVhZGVyIChISUQgcHJvdG9jb2wsIGZpcm13YXJlIDEuMSldIj1VU0JfSW5zdGFsbCwgVVNCXFZJRF8xQzcxJlBJRF9DRTAxCisKKzsgRGV2aWNlOiAxQzcxOkNFMDQKKyJ3aW51c2I6IEh1bWFuV2FyZSBbTkxTIGVSZWFkZXIgKHNlcmlhbCBwcm90b2NvbCldIj1VU0JfSW5zdGFsbCwgVVNCXFZJRF8xQzcxJlBJRF9DRTA0CisKKzsgRGV2aWNlOiAxRkU0OjAwMDMKKyJ3aW51c2I6IEhhbmR5VGVjaCBbVVNCLUhJRCBhZGFwdGVyXSI9VVNCX0luc3RhbGwsIFVTQlxWSURfMUZFNCZQSURfMDAwMworCis7IERldmljZTogMUZFNDowMDQ0Cisid2ludXNiOiBIYW5keVRlY2ggW0Vhc3kgQnJhaWxsZSAoSElEKV0iPVVTQl9JbnN0YWxsLCBVU0JcVklEXzFGRTQmUElEXzAwNDQKKworOyBEZXZpY2U6IDFGRTQ6MDA1NAorIndpbnVzYjogSGFuZHlUZWNoIFtBY3RpdmUgQnJhaWxsZV0iPVVTQl9JbnN0YWxsLCBVU0JcVklEXzFGRTQmUElEXzAwNTQKKworOyBEZXZpY2U6IDFGRTQ6MDA1NQorIndpbnVzYjogSGFuZHlUZWNoIFtDb25uZWN0IEJyYWlsbGUgNDBdIj1VU0JfSW5zdGFsbCwgVVNCXFZJRF8xRkU0JlBJRF8wMDU1CisKKzsgRGV2aWNlOiAxRkU0OjAwNjEKKyJ3aW51c2I6IEhhbmR5VGVjaCBbQWN0aWxpbm9dIj1VU0JfSW5zdGFsbCwgVVNCXFZJRF8xRkU0JlBJRF8wMDYxCisKKzsgRGV2aWNlOiAxRkU0OjAwNjQKKyJ3aW51c2I6IEhhbmR5VGVjaCBbQWN0aXZlIFN0YXIgNDBdIj1VU0JfSW5zdGFsbCwgVVNCXFZJRF8xRkU0JlBJRF8wMDY0CisKKzsgRGV2aWNlOiAxRkU0OjAwNzQKKyJ3aW51c2I6IEhhbmR5VGVjaCBbQnJhaWxsZSBTdGFyIDQwIChISUQpXSI9VVNCX0luc3RhbGwsIFVTQlxWSURfMUZFNCZQSURfMDA3NAorCis7IERldmljZTogMUZFNDowMDgxCisid2ludXNiOiBIYW5keVRlY2ggW0Jhc2ljIEJyYWlsbGUgMTZdIj1VU0JfSW5zdGFsbCwgVVNCXFZJRF8xRkU0JlBJRF8wMDgxCisKKzsgRGV2aWNlOiAxRkU0OjAwODIKKyJ3aW51c2I6IEhhbmR5VGVjaCBbQmFzaWMgQnJhaWxsZSAyMF0iPVVTQl9JbnN0YWxsLCBVU0JcVklEXzFGRTQmUElEXzAwODIKKworOyBEZXZpY2U6IDFGRTQ6MDA4MworIndpbnVzYjogSGFuZHlUZWNoIFtCYXNpYyBCcmFpbGxlIDMyXSI9VVNCX0luc3RhbGwsIFVTQlxWSURfMUZFNCZQSURfMDA4MworCis7IERldmljZTogMUZFNDowMDg0Cisid2ludXNiOiBIYW5keVRlY2ggW0Jhc2ljIEJyYWlsbGUgNDBdIj1VU0JfSW5zdGFsbCwgVVNCXFZJRF8xRkU0JlBJRF8wMDg0CisKKzsgRGV2aWNlOiAxRkU0OjAwODYKKyJ3aW51c2I6IEhhbmR5VGVjaCBbQmFzaWMgQnJhaWxsZSA2NF0iPVVTQl9JbnN0YWxsLCBVU0JcVklEXzFGRTQmUElEXzAwODYKKworOyBEZXZpY2U6IDFGRTQ6MDA4NworIndpbnVzYjogSGFuZHlUZWNoIFtCYXNpYyBCcmFpbGxlIDgwXSI9VVNCX0luc3RhbGwsIFVTQlxWSURfMUZFNCZQSURfMDA4NworCis7IERldmljZTogMUZFNDowMDhBCisid2ludXNiOiBIYW5keVRlY2ggW0Jhc2ljIEJyYWlsbGUgNDhdIj1VU0JfSW5zdGFsbCwgVVNCXFZJRF8xRkU0JlBJRF8wMDhBCisKKzsgRGV2aWNlOiAxRkU0OjAwOEIKKyJ3aW51c2I6IEhhbmR5VGVjaCBbQmFzaWMgQnJhaWxsZSAxNjBdIj1VU0JfSW5zdGFsbCwgVVNCXFZJRF8xRkU0JlBJRF8wMDhCCisKKzsgRGV2aWNlOiAxRkU0OjAwQTQKKyJ3aW51c2I6IEhhbmR5VGVjaCBbQWN0aXZhdG9yXSI9VVNCX0luc3RhbGwsIFVTQlxWSURfMUZFNCZQSURfMDBBNAorCis7IERldmljZTogNDI0MjowMDAxCisid2ludXNiOiBQZWdhc3VzIFthbGwgbW9kZWxzXSI9VVNCX0luc3RhbGwsIFVTQlxWSURfNDI0MiZQSURfMDAwMQorCis7IERldmljZTogQzI1MToxMTIyCisid2ludXNiOiBFdXJvQnJhaWxsZSBbRXN5cyAodmVyc2lvbiA8IDMuMCwgbm8gU0QgY2FyZCldIj1VU0JfSW5zdGFsbCwgVVNCXFZJRF9DMjUxJlBJRF8xMTIyCisKKzsgRGV2aWNlOiBDMjUxOjExMjMKKyJ3aW51c2I6IEV1cm9CcmFpbGxlIFtyZXNlcnZlZF0iPVVTQl9JbnN0YWxsLCBVU0JcVklEX0MyNTEmUElEXzExMjMKKworOyBEZXZpY2U6IEMyNTE6MTEyNAorIndpbnVzYjogRXVyb0JyYWlsbGUgW0VzeXMgKHZlcnNpb24gPCAzLjAsIHdpdGggU0QgY2FyZCldIj1VU0JfSW5zdGFsbCwgVVNCXFZJRF9DMjUxJlBJRF8xMTI0CisKKzsgRGV2aWNlOiBDMjUxOjExMjUKKyJ3aW51c2I6IEV1cm9CcmFpbGxlIFtyZXNlcnZlZF0iPVVTQl9JbnN0YWxsLCBVU0JcVklEX0MyNTEmUElEXzExMjUKKworOyBEZXZpY2U6IEMyNTE6MTEyNgorIndpbnVzYjogRXVyb0JyYWlsbGUgW0VzeXMgKHZlcnNpb24gPj0gMy4wLCBubyBTRCBjYXJkKV0iPVVTQl9JbnN0YWxsLCBVU0JcVklEX0MyNTEmUElEXzExMjYKKworOyBEZXZpY2U6IEMyNTE6MTEyNworIndpbnVzYjogRXVyb0JyYWlsbGUgW3Jlc2VydmVkXSI9VVNCX0luc3RhbGwsIFVTQlxWSURfQzI1MSZQSURfMTEyNworCis7IERldmljZTogQzI1MToxMTI4Cisid2ludXNiOiBFdXJvQnJhaWxsZSBbRXN5cyAodmVyc2lvbiA+PSAzLjAsIHdpdGggU0QgY2FyZCldIj1VU0JfSW5zdGFsbCwgVVNCXFZJRF9DMjUxJlBJRF8xMTI4CisKKzsgRGV2aWNlOiBDMjUxOjExMjkKKyJ3aW51c2I6IEV1cm9CcmFpbGxlIFtyZXNlcnZlZF0iPVVTQl9JbnN0YWxsLCBVU0JcVklEX0MyNTEmUElEXzExMjkKKworOyBEZXZpY2U6IEMyNTE6MTEyQQorIndpbnVzYjogRXVyb0JyYWlsbGUgW3Jlc2VydmVkXSI9VVNCX0luc3RhbGwsIFVTQlxWSURfQzI1MSZQSURfMTEyQQorCis7IERldmljZTogQzI1MToxMTJCCisid2ludXNiOiBFdXJvQnJhaWxsZSBbcmVzZXJ2ZWRdIj1VU0JfSW5zdGFsbCwgVVNCXFZJRF9DMjUxJlBJRF8xMTJCCisKKzsgRGV2aWNlOiBDMjUxOjExMkMKKyJ3aW51c2I6IEV1cm9CcmFpbGxlIFtyZXNlcnZlZF0iPVVTQl9JbnN0YWxsLCBVU0JcVklEX0MyNTEmUElEXzExMkMKKworOyBEZXZpY2U6IEMyNTE6MTEyRAorIndpbnVzYjogRXVyb0JyYWlsbGUgW3Jlc2VydmVkXSI9VVNCX0luc3RhbGwsIFVTQlxWSURfQzI1MSZQSURfMTEyRAorCis7IERldmljZTogQzI1MToxMTJFCisid2ludXNiOiBFdXJvQnJhaWxsZSBbcmVzZXJ2ZWRdIj1VU0JfSW5zdGFsbCwgVVNCXFZJRF9DMjUxJlBJRF8xMTJFCisKKzsgRGV2aWNlOiBDMjUxOjExMkYKKyJ3aW51c2I6IEV1cm9CcmFpbGxlIFtyZXNlcnZlZF0iPVVTQl9JbnN0YWxsLCBVU0JcVklEX0MyNTEmUElEXzExMkYKKworOyBEZXZpY2U6IEMyNTE6MTEzMAorIndpbnVzYjogRXVyb0JyYWlsbGUgW0VzeXRpbWUgKGZpcm13YXJlIDEuMDMsIDIwMTQtMDMtMzEpXSwgRXVyb0JyYWlsbGUgW0VzeXRpbWVdIj1VU0JfSW5zdGFsbCwgVVNCXFZJRF9DMjUxJlBJRF8xMTMwCisKKzsgRGV2aWNlOiBDMjUxOjExMzEKKyJ3aW51c2I6IEV1cm9CcmFpbGxlIFtyZXNlcnZlZF0iPVVTQl9JbnN0YWxsLCBVU0JcVklEX0MyNTEmUElEXzExMzEKKworOyBEZXZpY2U6IEMyNTE6MTEzMgorIndpbnVzYjogRXVyb0JyYWlsbGUgW3Jlc2VydmVkXSI9VVNCX0luc3RhbGwsIFVTQlxWSURfQzI1MSZQSURfMTEzMgorCis7IEVORF9VU0JfQlJBSUxMRV9ERVZJQ0VTCisKKzsgTWljcm9zb2Z0IE5hcnJhdG9yIERldmljZQorIldpblVTQjogTWljcm9zb2Z0IE5hcnJhdG9yIj1VU0JfSW5zdGFsbCwgVVNCXE5hcnJhdG9yT3ZlcnJpZGUKKworW1N0YW5kYXJkLk5UYW1kNjRdCis7IEJFR0lOX1VTQl9CUkFJTExFX0RFVklDRVMgd2ludXNiIFVTQl9JbnN0YWxsCisKKzsgRGV2aWNlOiAwNDAzOjYwMDEKKzsgR2VuZXJpYyBJZGVudGlmaWVyCis7IFZlbmRvcjogRnV0dXJlIFRlY2hub2xvZ3kgRGV2aWNlcyBJbnRlcm5hdGlvbmFsLCBMdGQuCis7IFByb2R1Y3Q6IEZUMjMyIFVTQi1TZXJpYWwgKFVBUlQpIElDCisid2ludXNiOiBBbGJhdHJvc3MgW2FsbCBtb2RlbHNdLCBDZWJyYSBbYWxsIG1vZGVsc10sIEhJTVMgW1N5bmMgQnJhaWxsZV0sIEhhbmR5VGVjaCBbRlRESSBjaGlwXSwgSGVkbyBbTW9iaWxMaW5lXSwgTURWIFthbGwgbW9kZWxzXSI9VVNCX0luc3RhbGwsIFVTQlxWSURfMDQwMyZQSURfNjAwMQorCis7IERldmljZTogMDQwMzo2MDEwCis7IEdlbmVyaWMgSWRlbnRpZmllcgorOyBWZW5kb3I6IEZ1dHVyZSBUZWNobm9sb2d5IERldmljZXMgSW50ZXJuYXRpb25hbCwgTHRkCis7IFByb2R1Y3Q6IEZUMjIzMkMvRC9IIER1YWwgVUFSVC9GSUZPIElDCisid2ludXNiOiBEb3RQYWQgW2FsbCBtb2RlbHNdIj1VU0JfSW5zdGFsbCwgVVNCXFZJRF8wNDAzJlBJRF82MDEwCisKKzsgRGV2aWNlOiAwNDAzOkRFNTgKKyJ3aW51c2I6IEhlZG8gW01vYmlsTGluZV0iPVVTQl9JbnN0YWxsLCBVU0JcVklEXzA0MDMmUElEX0RFNTgKKworOyBEZXZpY2U6IDA0MDM6REU1OQorIndpbnVzYjogSGVkbyBbUHJvZmlMaW5lXSI9VVNCX0luc3RhbGwsIFVTQlxWSURfMDQwMyZQSURfREU1OQorCis7IERldmljZTogMDQwMzpGMjA4Cisid2ludXNiOiBQYXBlbm1laWVyIFthbGwgbW9kZWxzXSI9VVNCX0luc3RhbGwsIFVTQlxWSURfMDQwMyZQSURfRjIwOAorCis7IERldmljZTogMDQwMzpGRTcwCisid2ludXNiOiBCYXVtIFtWYXJpbyA0MCAoNDAgY2VsbHMpXSI9VVNCX0luc3RhbGwsIFVTQlxWSURfMDQwMyZQSURfRkU3MAorCis7IERldmljZTogMDQwMzpGRTcxCisid2ludXNiOiBCYXVtIFtQb2NrZXRWYXJpbyAoMjQgY2VsbHMpXSI9VVNCX0luc3RhbGwsIFVTQlxWSURfMDQwMyZQSURfRkU3MQorCis7IERldmljZTogMDQwMzpGRTcyCisid2ludXNiOiBCYXVtIFtTdXBlclZhcmlvIDQwICg0MCBjZWxscyldIj1VU0JfSW5zdGFsbCwgVVNCXFZJRF8wNDAzJlBJRF9GRTcyCisKKzsgRGV2aWNlOiAwNDAzOkZFNzMKKyJ3aW51c2I6IEJhdW0gW1N1cGVyVmFyaW8gMzIgKDMyIGNlbGxzKV0iPVVTQl9JbnN0YWxsLCBVU0JcVklEXzA0MDMmUElEX0ZFNzMKKworOyBEZXZpY2U6IDA0MDM6RkU3NAorIndpbnVzYjogQmF1bSBbU3VwZXJWYXJpbyA2NCAoNjQgY2VsbHMpXSI9VVNCX0luc3RhbGwsIFVTQlxWSURfMDQwMyZQSURfRkU3NAorCis7IERldmljZTogMDQwMzpGRTc1Cisid2ludXNiOiBCYXVtIFtTdXBlclZhcmlvIDgwICg4MCBjZWxscyldIj1VU0JfSW5zdGFsbCwgVVNCXFZJRF8wNDAzJlBJRF9GRTc1CisKKzsgRGV2aWNlOiAwNDAzOkZFNzYKKyJ3aW51c2I6IEJhdW0gW1ZhcmlvUHJvIDgwICg4MCBjZWxscyldIj1VU0JfSW5zdGFsbCwgVVNCXFZJRF8wNDAzJlBJRF9GRTc2CisKKzsgRGV2aWNlOiAwNDAzOkZFNzcKKyJ3aW51c2I6IEJhdW0gW1ZhcmlvUHJvIDY0ICg2NCBjZWxscyldIj1VU0JfSW5zdGFsbCwgVVNCXFZJRF8wNDAzJlBJRF9GRTc3CisKKzsgRGV2aWNlOiAwNDUyOjAxMDAKKyJ3aW51c2I6IE1ldGVjIFthbGwgbW9kZWxzXSI9VVNCX0luc3RhbGwsIFVTQlxWSURfMDQ1MiZQSURfMDEwMAorCis7IERldmljZTogMDQ1RTo5MzBBCisid2ludXNiOiBISU1TIFtCcmFpbGxlIFNlbnNlIChVU0IgMS4xKV0sIEhJTVMgW0JyYWlsbGUgU2Vuc2UgKFVTQiAyLjApXSwgSElNUyBbQnJhaWxsZSBTZW5zZSBVMiAoVVNCIDIuMCldIj1VU0JfSW5zdGFsbCwgVVNCXFZJRF8wNDVFJlBJRF85MzBBCisKKzsgRGV2aWNlOiAwNDVFOjkzMEIKKyJ3aW51c2I6IEhJTVMgW0JyYWlsbGUgRWRnZSBhbmQgUUJyYWlsbGVYTF0iPVVTQl9JbnN0YWxsLCBVU0JcVklEXzA0NUUmUElEXzkzMEIKKworOyBEZXZpY2U6IDA0ODM6QTFEMworIndpbnVzYjogQmF1bSBbT3JiaXQgUmVhZGVyIDIwICgyMCBjZWxscyldIj1VU0JfSW5zdGFsbCwgVVNCXFZJRF8wNDgzJlBJRF9BMUQzCisKKzsgRGV2aWNlOiAwNDgzOkEzNjYKKyJ3aW51c2I6IEJhdW0gW09yYml0IFJlYWRlciA0MCAoNDAgY2VsbHMpXSI9VVNCX0luc3RhbGwsIFVTQlxWSURfMDQ4MyZQSURfQTM2NgorCis7IERldmljZTogMDZCMDowMDAxCisid2ludXNiOiBBbHZhIFtTYXRlbGxpdGUgKDVubildIj1VU0JfSW5zdGFsbCwgVVNCXFZJRF8wNkIwJlBJRF8wMDAxCisKKzsgRGV2aWNlOiAwNzk4OjAwMDEKKyJ3aW51c2I6IFZveWFnZXIgW2FsbCBtb2RlbHNdIj1VU0JfSW5zdGFsbCwgVVNCXFZJRF8wNzk4JlBJRF8wMDAxCisKKzsgRGV2aWNlOiAwNzk4OjA2MDAKKyJ3aW51c2I6IEFsdmEgW1ZveWFnZXIgUHJvdG9jb2wgQ29udmVydGVyXSI9VVNCX0luc3RhbGwsIFVTQlxWSURfMDc5OCZQSURfMDYwMAorCis7IERldmljZTogMDc5ODowNjI0Cisid2ludXNiOiBBbHZhIFtCQzYyNF0iPVVTQl9JbnN0YWxsLCBVU0JcVklEXzA3OTgmUElEXzA2MjQKKworOyBEZXZpY2U6IDA3OTg6MDY0MAorIndpbnVzYjogQWx2YSBbQkM2NDBdIj1VU0JfSW5zdGFsbCwgVVNCXFZJRF8wNzk4JlBJRF8wNjQwCisKKzsgRGV2aWNlOiAwNzk4OjA2ODAKKyJ3aW51c2I6IEFsdmEgW0JDNjgwXSI9VVNCX0luc3RhbGwsIFVTQlxWSURfMDc5OCZQSURfMDY4MAorCis7IERldmljZTogMDkwNDoxMDE2Cisid2ludXNiOiBGcmFua0F1ZGlvZGF0YSBbQjJLODQgKGJlZm9yZSBmaXJtd2FyZSBpbnN0YWxsYXRpb24pXSI9VVNCX0luc3RhbGwsIFVTQlxWSURfMDkwNCZQSURfMTAxNgorCis7IERldmljZTogMDkwNDoxMDE3Cisid2ludXNiOiBGcmFua0F1ZGlvZGF0YSBbQjJLODQgKGFmdGVyIGZpcm13YXJlIGluc3RhbGxhdGlvbildIj1VU0JfSW5zdGFsbCwgVVNCXFZJRF8wOTA0JlBJRF8xMDE3CisKKzsgRGV2aWNlOiAwOTA0OjIwMDAKKyJ3aW51c2I6IEJhdW0gW1ZhcmlvUHJvIDQwICg0MCBjZWxscyldIj1VU0JfSW5zdGFsbCwgVVNCXFZJRF8wOTA0JlBJRF8yMDAwCisKKzsgRGV2aWNlOiAwOTA0OjIwMDEKKyJ3aW51c2I6IEJhdW0gW0Vjb1ZhcmlvIDI0ICgyNCBjZWxscyldIj1VU0JfSW5zdGFsbCwgVVNCXFZJRF8wOTA0JlBJRF8yMDAxCisKKzsgRGV2aWNlOiAwOTA0OjIwMDIKKyJ3aW51c2I6IEJhdW0gW0Vjb1ZhcmlvIDQwICg0MCBjZWxscyldIj1VU0JfSW5zdGFsbCwgVVNCXFZJRF8wOTA0JlBJRF8yMDAyCisKKzsgRGV2aWNlOiAwOTA0OjIwMDcKKyJ3aW51c2I6IEJhdW0gW1ZhcmlvQ29ubmVjdCA0MCAoNDAgY2VsbHMpXSI9VVNCX0luc3RhbGwsIFVTQlxWSURfMDkwNCZQSURfMjAwNworCis7IERldmljZTogMDkwNDoyMDA4Cisid2ludXNiOiBCYXVtIFtWYXJpb0Nvbm5lY3QgMzIgKDMyIGNlbGxzKV0iPVVTQl9JbnN0YWxsLCBVU0JcVklEXzA5MDQmUElEXzIwMDgKKworOyBEZXZpY2U6IDA5MDQ6MjAwOQorIndpbnVzYjogQmF1bSBbVmFyaW9Db25uZWN0IDI0ICgyNCBjZWxscyldIj1VU0JfSW5zdGFsbCwgVVNCXFZJRF8wOTA0JlBJRF8yMDA5CisKKzsgRGV2aWNlOiAwOTA0OjIwMTAKKyJ3aW51c2I6IEJhdW0gW1ZhcmlvQ29ubmVjdCA2NCAoNjQgY2VsbHMpXSI9VVNCX0luc3RhbGwsIFVTQlxWSURfMDkwNCZQSURfMjAxMAorCis7IERldmljZTogMDkwNDoyMDExCisid2ludXNiOiBCYXVtIFtWYXJpb0Nvbm5lY3QgODAgKDgwIGNlbGxzKV0iPVVTQl9JbnN0YWxsLCBVU0JcVklEXzA5MDQmUElEXzIwMTEKKworOyBEZXZpY2U6IDA5MDQ6MjAxNAorIndpbnVzYjogQmF1bSBbRWNvVmFyaW8gMzIgKDMyIGNlbGxzKV0iPVVTQl9JbnN0YWxsLCBVU0JcVklEXzA5MDQmUElEXzIwMTQKKworOyBEZXZpY2U6IDA5MDQ6MjAxNQorIndpbnVzYjogQmF1bSBbRWNvVmFyaW8gNjQgKDY0IGNlbGxzKV0iPVVTQl9JbnN0YWxsLCBVU0JcVklEXzA5MDQmUElEXzIwMTUKKworOyBEZXZpY2U6IDA5MDQ6MjAxNgorIndpbnVzYjogQmF1bSBbRWNvVmFyaW8gODAgKDgwIGNlbGxzKV0iPVVTQl9JbnN0YWxsLCBVU0JcVklEXzA5MDQmUElEXzIwMTYKKworOyBEZXZpY2U6IDA5MDQ6MzAwMAorIndpbnVzYjogQmF1bSBbUmVmcmVzaGFicmFpbGxlIDE4ICgxOCBjZWxscyldIj1VU0JfSW5zdGFsbCwgVVNCXFZJRF8wOTA0JlBJRF8zMDAwCisKKzsgRGV2aWNlOiAwOTA0OjMwMDEKKyJ3aW51c2I6IEJhdW0gW09yYml0IGluIFJlZnJlc2hhYnJhaWxsZSBFbXVsYXRpb24gTW9kZSAoMTggY2VsbHMpXSwgQmF1bSBbUmVmcmVzaGFicmFpbGxlIDE4ICgxOCBjZWxscyldIj1VU0JfSW5zdGFsbCwgVVNCXFZJRF8wOTA0JlBJRF8zMDAxCisKKzsgRGV2aWNlOiAwOTA0OjQwMDQKKyJ3aW51c2I6IEJhdW0gW1Byb250byEgVjMgMTggKDE4IGNlbGxzKV0iPVVTQl9JbnN0YWxsLCBVU0JcVklEXzA5MDQmUElEXzQwMDQKKworOyBEZXZpY2U6IDA5MDQ6NDAwNQorIndpbnVzYjogQmF1bSBbUHJvbnRvISBWMyA0MCAoNDAgY2VsbHMpXSI9VVNCX0luc3RhbGwsIFVTQlxWSURfMDkwNCZQSURfNDAwNQorCis7IERldmljZTogMDkwNDo0MDA3Cisid2ludXNiOiBCYXVtIFtQcm9udG8hIFY0IDE4ICgxOCBjZWxscyldIj1VU0JfSW5zdGFsbCwgVVNCXFZJRF8wOTA0JlBJRF80MDA3CisKKzsgRGV2aWNlOiAwOTA0OjQwMDgKKyJ3aW51c2I6IEJhdW0gW1Byb250byEgVjQgNDAgKDQwIGNlbGxzKV0iPVVTQl9JbnN0YWxsLCBVU0JcVklEXzA5MDQmUElEXzQwMDgKKworOyBEZXZpY2U6IDA5MDQ6NjAwMQorIndpbnVzYjogQmF1bSBbU3VwZXJWYXJpbzIgNDAgKDQwIGNlbGxzKV0iPVVTQl9JbnN0YWxsLCBVU0JcVklEXzA5MDQmUElEXzYwMDEKKworOyBEZXZpY2U6IDA5MDQ6NjAwMgorIndpbnVzYjogQmF1bSBbUG9ja2V0VmFyaW8yICgyNCBjZWxscyldIj1VU0JfSW5zdGFsbCwgVVNCXFZJRF8wOTA0JlBJRF82MDAyCisKKzsgRGV2aWNlOiAwOTA0OjYwMDMKKyJ3aW51c2I6IEJhdW0gW1N1cGVyVmFyaW8yIDMyICgzMiBjZWxscyldIj1VU0JfSW5zdGFsbCwgVVNCXFZJRF8wOTA0JlBJRF82MDAzCisKKzsgRGV2aWNlOiAwOTA0OjYwMDQKKyJ3aW51c2I6IEJhdW0gW1N1cGVyVmFyaW8yIDY0ICg2NCBjZWxscyldIj1VU0JfSW5zdGFsbCwgVVNCXFZJRF8wOTA0JlBJRF82MDA0CisKKzsgRGV2aWNlOiAwOTA0OjYwMDUKKyJ3aW51c2I6IEJhdW0gW1N1cGVyVmFyaW8yIDgwICg4MCBjZWxscyldIj1VU0JfSW5zdGFsbCwgVVNCXFZJRF8wOTA0JlBJRF82MDA1CisKKzsgRGV2aWNlOiAwOTA0OjYwMDYKKyJ3aW51c2I6IEJhdW0gW0JyYWlsbGlhbnQyIDQwICg0MCBjZWxscyldIj1VU0JfSW5zdGFsbCwgVVNCXFZJRF8wOTA0JlBJRF82MDA2CisKKzsgRGV2aWNlOiAwOTA0OjYwMDcKKyJ3aW51c2I6IEJhdW0gW0JyYWlsbGlhbnQyIDI0ICgyNCBjZWxscyldIj1VU0JfSW5zdGFsbCwgVVNCXFZJRF8wOTA0JlBJRF82MDA3CisKKzsgRGV2aWNlOiAwOTA0OjYwMDgKKyJ3aW51c2I6IEJhdW0gW0JyYWlsbGlhbnQyIDMyICgzMiBjZWxscyldIj1VU0JfSW5zdGFsbCwgVVNCXFZJRF8wOTA0JlBJRF82MDA4CisKKzsgRGV2aWNlOiAwOTA0OjYwMDkKKyJ3aW51c2I6IEJhdW0gW0JyYWlsbGlhbnQyIDY0ICg2NCBjZWxscyldIj1VU0JfSW5zdGFsbCwgVVNCXFZJRF8wOTA0JlBJRF82MDA5CisKKzsgRGV2aWNlOiAwOTA0OjYwMEEKKyJ3aW51c2I6IEJhdW0gW0JyYWlsbGlhbnQyIDgwICg4MCBjZWxscyldIj1VU0JfSW5zdGFsbCwgVVNCXFZJRF8wOTA0JlBJRF82MDBBCisKKzsgRGV2aWNlOiAwOTA0OjYwMTEKKyJ3aW51c2I6IEJhdW0gW1ZhcmlvQ29ubmVjdCAyNCAoMjQgY2VsbHMpXSI9VVNCX0luc3RhbGwsIFVTQlxWSURfMDkwNCZQSURfNjAxMQorCis7IERldmljZTogMDkwNDo2MDEyCisid2ludXNiOiBCYXVtIFtWYXJpb0Nvbm5lY3QgMzIgKDMyIGNlbGxzKV0iPVVTQl9JbnN0YWxsLCBVU0JcVklEXzA5MDQmUElEXzYwMTIKKworOyBEZXZpY2U6IDA5MDQ6NjAxMworIndpbnVzYjogQmF1bSBbVmFyaW9Db25uZWN0IDQwICg0MCBjZWxscyldIj1VU0JfSW5zdGFsbCwgVVNCXFZJRF8wOTA0JlBJRF82MDEzCisKKzsgRGV2aWNlOiAwOTA0OjYxMDEKKyJ3aW51c2I6IEJhdW0gW1ZhcmlvVWx0cmEgMjAgKDIwIGNlbGxzKV0iPVVTQl9JbnN0YWxsLCBVU0JcVklEXzA5MDQmUElEXzYxMDEKKworOyBEZXZpY2U6IDA5MDQ6NjEwMgorIndpbnVzYjogQmF1bSBbVmFyaW9VbHRyYSA0MCAoNDAgY2VsbHMpXSI9VVNCX0luc3RhbGwsIFVTQlxWSURfMDkwNCZQSURfNjEwMgorCis7IERldmljZTogMDkwNDo2MTAzCisid2ludXNiOiBCYXVtIFtWYXJpb1VsdHJhIDMyICgzMiBjZWxscyldIj1VU0JfSW5zdGFsbCwgVVNCXFZJRF8wOTA0JlBJRF82MTAzCisKKzsgRGV2aWNlOiAwOTIxOjEyMDAKKyJ3aW51c2I6IEhhbmR5VGVjaCBbR29IdWJzIGNoaXBdIj1VU0JfSW5zdGFsbCwgVVNCXFZJRF8wOTIxJlBJRF8xMjAwCisKKzsgRGV2aWNlOiAwRjRFOjAxMDAKKyJ3aW51c2I6IEZyZWVkb21TY2llbnRpZmljIFtGb2N1cyAxXSI9VVNCX0luc3RhbGwsIFVTQlxWSURfMEY0RSZQSURfMDEwMAorCis7IERldmljZTogMEY0RTowMTExCisid2ludXNiOiBGcmVlZG9tU2NpZW50aWZpYyBbUEFDIE1hdGVdIj1VU0JfSW5zdGFsbCwgVVNCXFZJRF8wRjRFJlBJRF8wMTExCisKKzsgRGV2aWNlOiAwRjRFOjAxMTIKKyJ3aW51c2I6IEZyZWVkb21TY2llbnRpZmljIFtGb2N1cyAyXSI9VVNCX0luc3RhbGwsIFVTQlxWSURfMEY0RSZQSURfMDExMgorCis7IERldmljZTogMEY0RTowMTE0Cisid2ludXNiOiBGcmVlZG9tU2NpZW50aWZpYyBbRm9jdXMgMytdIj1VU0JfSW5zdGFsbCwgVVNCXFZJRF8wRjRFJlBJRF8wMTE0CisKKzsgRGV2aWNlOiAxMEM0OkVBNjAKKzsgR2VuZXJpYyBJZGVudGlmaWVyCis7IFZlbmRvcjogQ3lnbmFsIEludGVncmF0ZWQgUHJvZHVjdHMsIEluYy4KKzsgUHJvZHVjdDogQ1AyMTB4IFVBUlQgQnJpZGdlIC8gbXlBVlIgbXlTbWFydFVTQiBsaWdodAorIndpbnVzYjogQnJhaWxsZU1lbW8gW1BvY2tldF0sIFNlaWthIFtCcmFpbGxlIERpc3BsYXldIj1VU0JfSW5zdGFsbCwgVVNCXFZJRF8xMEM0JlBJRF9FQTYwCisKKzsgRGV2aWNlOiAxMEM0OkVBODAKKzsgR2VuZXJpYyBJZGVudGlmaWVyCis7IFZlbmRvcjogQ3lnbmFsIEludGVncmF0ZWQgUHJvZHVjdHMsIEluYy4KKzsgUHJvZHVjdDogQ1AyMTB4IFVBUlQgQnJpZGdlCisid2ludXNiOiBTZWlrYSBbTm90ZSBUYWtlcl0iPVVTQl9JbnN0YWxsLCBVU0JcVklEXzEwQzQmUElEX0VBODAKKworOyBEZXZpY2U6IDExNDg6MDMwMQorIndpbnVzYjogQnJhaWxsZU1lbW8gW1NtYXJ0XSI9VVNCX0luc3RhbGwsIFVTQlxWSURfMTE0OCZQSURfMDMwMQorCis7IERldmljZTogMTIwOTpBQkMwCisid2ludXNiOiBJbmNlcHRvciBbYWxsIG1vZGVsc10iPVVTQl9JbnN0YWxsLCBVU0JcVklEXzEyMDkmUElEX0FCQzAKKworOyBEZXZpY2U6IDE2QzA6MDVFMQorIndpbnVzYjogQ2FudXRlIFthbGwgbW9kZWxzXSI9VVNCX0luc3RhbGwsIFVTQlxWSURfMTZDMCZQSURfMDVFMQorCis7IERldmljZTogMUE4Njo3NTIzCis7IEdlbmVyaWMgSWRlbnRpZmllcgorOyBWZW5kb3I6IEppYW5nc3UgUWluSGVuZywgTHRkLgorOyBQcm9kdWN0OiBDSDM0MSBVU0IgQnJpZGdlIENvbnRyb2xsZXIKKyJ3aW51c2I6IEJhdW0gW05MUyBlUmVhZGVyIFpvb21heCAoMjAgY2VsbHMpXSI9VVNCX0luc3RhbGwsIFVTQlxWSURfMUE4NiZQSURfNzUyMworCis7IERldmljZTogMUM3MTpDMDA0Cisid2ludXNiOiBCcmFpbGxlTm90ZSBbSHVtYW5XYXJlIEFQRVhdIj1VU0JfSW5zdGFsbCwgVVNCXFZJRF8xQzcxJlBJRF9DMDA0CisKKzsgRGV2aWNlOiAxQzcxOkMwMDUKKyJ3aW51c2I6IEh1bWFuV2FyZSBbQnJhaWxsaWFudCBCSSAzMi80MCwgQnJhaWxsaWFudCBCIDgwIChzZXJpYWwgcHJvdG9jb2wpXSI9VVNCX0luc3RhbGwsIFVTQlxWSURfMUM3MSZQSURfQzAwNQorCis7IERldmljZTogMUM3MTpDMDA2Cisid2ludXNiOiBIdW1hbldhcmUgW25vbi1Ub3VjaCBtb2RlbHMgKEhJRCBwcm90b2NvbCldIj1VU0JfSW5zdGFsbCwgVVNCXFZJRF8xQzcxJlBJRF9DMDA2CisKKzsgRGV2aWNlOiAxQzcxOkMwMEEKKyJ3aW51c2I6IEh1bWFuV2FyZSBbQnJhaWxsZU5vdGUgVG91Y2ggKEhJRCBwcm90b2NvbCldIj1VU0JfSW5zdGFsbCwgVVNCXFZJRF8xQzcxJlBJRF9DMDBBCisKKzsgRGV2aWNlOiAxQzcxOkMwMjEKKyJ3aW51c2I6IEh1bWFuV2FyZSBbQnJhaWxsaWFudCBCSSAxNCAoc2VyaWFsIHByb3RvY29sKV0iPVVTQl9JbnN0YWxsLCBVU0JcVklEXzFDNzEmUElEX0MwMjEKKworOyBEZXZpY2U6IDFDNzE6QzEwMQorIndpbnVzYjogSHVtYW5XYXJlIFtBUEggQ2hhbWVsZW9uIDIwIChISUQgcHJvdG9jb2wsIGZpcm13YXJlIDEuMCldLCBIdW1hbldhcmUgW0FQSCBDaGFtZWxlb24gMjAgKEhJRCBwcm90b2NvbCwgZmlybXdhcmUgMS4xKV0iPVVTQl9JbnN0YWxsLCBVU0JcVklEXzFDNzEmUElEX0MxMDEKKworOyBEZXZpY2U6IDFDNzE6QzEwNAorIndpbnVzYjogSHVtYW5XYXJlIFtBUEggQ2hhbWVsZW9uIDIwIChzZXJpYWwgcHJvdG9jb2wpXSI9VVNCX0luc3RhbGwsIFVTQlxWSURfMUM3MSZQSURfQzEwNAorCis7IERldmljZTogMUM3MTpDMTExCisid2ludXNiOiBIdW1hbldhcmUgW0FQSCBNYW50aXMgUTQwIChISUQgcHJvdG9jb2wsIGZpcm13YXJlIDEuMCldLCBIdW1hbldhcmUgW0FQSCBNYW50aXMgUTQwIChISUQgcHJvdG9jb2wsIGZpcm13YXJlIDEuMSldIj1VU0JfSW5zdGFsbCwgVVNCXFZJRF8xQzcxJlBJRF9DMTExCisKKzsgRGV2aWNlOiAxQzcxOkMxMTQKKyJ3aW51c2I6IEh1bWFuV2FyZSBbQVBIIE1hbnRpcyBRNDAgKHNlcmlhbCBwcm90b2NvbCldIj1VU0JfSW5zdGFsbCwgVVNCXFZJRF8xQzcxJlBJRF9DMTE0CisKKzsgRGV2aWNlOiAxQzcxOkMxMjEKKyJ3aW51c2I6IEh1bWFuV2FyZSBbSHVtYW53YXJlIEJyYWlsbGVPbmUgKEhJRCBwcm90b2NvbCwgZmlybXdhcmUgMS4wKV0sIEh1bWFuV2FyZSBbSHVtYW53YXJlIEJyYWlsbGVPbmUgKEhJRCBwcm90b2NvbCwgZmlybXdhcmUgMS4xKV0iPVVTQl9JbnN0YWxsLCBVU0JcVklEXzFDNzEmUElEX0MxMjEKKworOyBEZXZpY2U6IDFDNzE6QzEyNAorIndpbnVzYjogSHVtYW5XYXJlIFtIdW1hbndhcmUgQnJhaWxsZU9uZSAoc2VyaWFsIHByb3RvY29sKV0iPVVTQl9JbnN0YWxsLCBVU0JcVklEXzFDNzEmUElEX0MxMjQKKworOyBEZXZpY2U6IDFDNzE6QzEzMQorIndpbnVzYjogSHVtYW5XYXJlIFtIdW1hbndhcmUgQnJhaWxsaWFudCBCSSA0MFggKEhJRCBwcm90b2NvbCwgZmlybXdhcmUgMS4wKV0sIEh1bWFuV2FyZSBbSHVtYW53YXJlIEJyYWlsbGlhbnQgQkkgNDBYIChISUQgcHJvdG9jb2wsIGZpcm13YXJlIDEuMSldIj1VU0JfSW5zdGFsbCwgVVNCXFZJRF8xQzcxJlBJRF9DMTMxCisKKzsgRGV2aWNlOiAxQzcxOkMxNDEKKyJ3aW51c2I6IEh1bWFuV2FyZSBbSHVtYW53YXJlIEJyYWlsbGlhbnQgQkkgMjBYIChISUQgcHJvdG9jb2wsIGZpcm13YXJlIDEuMCldLCBIdW1hbldhcmUgW0h1bWFud2FyZSBCcmFpbGxpYW50IEJJIDIwWCAoSElEIHByb3RvY29sLCBmaXJtd2FyZSAxLjEpXSI9VVNCX0luc3RhbGwsIFVTQlxWSURfMUM3MSZQSURfQzE0MQorCis7IERldmljZTogMUM3MTpDRTAxCisid2ludXNiOiBIdW1hbldhcmUgW05MUyBlUmVhZGVyIChISUQgcHJvdG9jb2wsIGZpcm13YXJlIDEuMCldLCBIdW1hbldhcmUgW05MUyBlUmVhZGVyIChISUQgcHJvdG9jb2wsIGZpcm13YXJlIDEuMSldIj1VU0JfSW5zdGFsbCwgVVNCXFZJRF8xQzcxJlBJRF9DRTAxCisKKzsgRGV2aWNlOiAxQzcxOkNFMDQKKyJ3aW51c2I6IEh1bWFuV2FyZSBbTkxTIGVSZWFkZXIgKHNlcmlhbCBwcm90b2NvbCldIj1VU0JfSW5zdGFsbCwgVVNCXFZJRF8xQzcxJlBJRF9DRTA0CisKKzsgRGV2aWNlOiAxRkU0OjAwMDMKKyJ3aW51c2I6IEhhbmR5VGVjaCBbVVNCLUhJRCBhZGFwdGVyXSI9VVNCX0luc3RhbGwsIFVTQlxWSURfMUZFNCZQSURfMDAwMworCis7IERldmljZTogMUZFNDowMDQ0Cisid2ludXNiOiBIYW5keVRlY2ggW0Vhc3kgQnJhaWxsZSAoSElEKV0iPVVTQl9JbnN0YWxsLCBVU0JcVklEXzFGRTQmUElEXzAwNDQKKworOyBEZXZpY2U6IDFGRTQ6MDA1NAorIndpbnVzYjogSGFuZHlUZWNoIFtBY3RpdmUgQnJhaWxsZV0iPVVTQl9JbnN0YWxsLCBVU0JcVklEXzFGRTQmUElEXzAwNTQKKworOyBEZXZpY2U6IDFGRTQ6MDA1NQorIndpbnVzYjogSGFuZHlUZWNoIFtDb25uZWN0IEJyYWlsbGUgNDBdIj1VU0JfSW5zdGFsbCwgVVNCXFZJRF8xRkU0JlBJRF8wMDU1CisKKzsgRGV2aWNlOiAxRkU0OjAwNjEKKyJ3aW51c2I6IEhhbmR5VGVjaCBbQWN0aWxpbm9dIj1VU0JfSW5zdGFsbCwgVVNCXFZJRF8xRkU0JlBJRF8wMDYxCisKKzsgRGV2aWNlOiAxRkU0OjAwNjQKKyJ3aW51c2I6IEhhbmR5VGVjaCBbQWN0aXZlIFN0YXIgNDBdIj1VU0JfSW5zdGFsbCwgVVNCXFZJRF8xRkU0JlBJRF8wMDY0CisKKzsgRGV2aWNlOiAxRkU0OjAwNzQKKyJ3aW51c2I6IEhhbmR5VGVjaCBbQnJhaWxsZSBTdGFyIDQwIChISUQpXSI9VVNCX0luc3RhbGwsIFVTQlxWSURfMUZFNCZQSURfMDA3NAorCis7IERldmljZTogMUZFNDowMDgxCisid2ludXNiOiBIYW5keVRlY2ggW0Jhc2ljIEJyYWlsbGUgMTZdIj1VU0JfSW5zdGFsbCwgVVNCXFZJRF8xRkU0JlBJRF8wMDgxCisKKzsgRGV2aWNlOiAxRkU0OjAwODIKKyJ3aW51c2I6IEhhbmR5VGVjaCBbQmFzaWMgQnJhaWxsZSAyMF0iPVVTQl9JbnN0YWxsLCBVU0JcVklEXzFGRTQmUElEXzAwODIKKworOyBEZXZpY2U6IDFGRTQ6MDA4MworIndpbnVzYjogSGFuZHlUZWNoIFtCYXNpYyBCcmFpbGxlIDMyXSI9VVNCX0luc3RhbGwsIFVTQlxWSURfMUZFNCZQSURfMDA4MworCis7IERldmljZTogMUZFNDowMDg0Cisid2ludXNiOiBIYW5keVRlY2ggW0Jhc2ljIEJyYWlsbGUgNDBdIj1VU0JfSW5zdGFsbCwgVVNCXFZJRF8xRkU0JlBJRF8wMDg0CisKKzsgRGV2aWNlOiAxRkU0OjAwODYKKyJ3aW51c2I6IEhhbmR5VGVjaCBbQmFzaWMgQnJhaWxsZSA2NF0iPVVTQl9JbnN0YWxsLCBVU0JcVklEXzFGRTQmUElEXzAwODYKKworOyBEZXZpY2U6IDFGRTQ6MDA4NworIndpbnVzYjogSGFuZHlUZWNoIFtCYXNpYyBCcmFpbGxlIDgwXSI9VVNCX0luc3RhbGwsIFVTQlxWSURfMUZFNCZQSURfMDA4NworCis7IERldmljZTogMUZFNDowMDhBCisid2ludXNiOiBIYW5keVRlY2ggW0Jhc2ljIEJyYWlsbGUgNDhdIj1VU0JfSW5zdGFsbCwgVVNCXFZJRF8xRkU0JlBJRF8wMDhBCisKKzsgRGV2aWNlOiAxRkU0OjAwOEIKKyJ3aW51c2I6IEhhbmR5VGVjaCBbQmFzaWMgQnJhaWxsZSAxNjBdIj1VU0JfSW5zdGFsbCwgVVNCXFZJRF8xRkU0JlBJRF8wMDhCCisKKzsgRGV2aWNlOiAxRkU0OjAwQTQKKyJ3aW51c2I6IEhhbmR5VGVjaCBbQWN0aXZhdG9yXSI9VVNCX0luc3RhbGwsIFVTQlxWSURfMUZFNCZQSURfMDBBNAorCis7IERldmljZTogNDI0MjowMDAxCisid2ludXNiOiBQZWdhc3VzIFthbGwgbW9kZWxzXSI9VVNCX0luc3RhbGwsIFVTQlxWSURfNDI0MiZQSURfMDAwMQorCis7IERldmljZTogQzI1MToxMTIyCisid2ludXNiOiBFdXJvQnJhaWxsZSBbRXN5cyAodmVyc2lvbiA8IDMuMCwgbm8gU0QgY2FyZCldIj1VU0JfSW5zdGFsbCwgVVNCXFZJRF9DMjUxJlBJRF8xMTIyCisKKzsgRGV2aWNlOiBDMjUxOjExMjMKKyJ3aW51c2I6IEV1cm9CcmFpbGxlIFtyZXNlcnZlZF0iPVVTQl9JbnN0YWxsLCBVU0JcVklEX0MyNTEmUElEXzExMjMKKworOyBEZXZpY2U6IEMyNTE6MTEyNAorIndpbnVzYjogRXVyb0JyYWlsbGUgW0VzeXMgKHZlcnNpb24gPCAzLjAsIHdpdGggU0QgY2FyZCldIj1VU0JfSW5zdGFsbCwgVVNCXFZJRF9DMjUxJlBJRF8xMTI0CisKKzsgRGV2aWNlOiBDMjUxOjExMjUKKyJ3aW51c2I6IEV1cm9CcmFpbGxlIFtyZXNlcnZlZF0iPVVTQl9JbnN0YWxsLCBVU0JcVklEX0MyNTEmUElEXzExMjUKKworOyBEZXZpY2U6IEMyNTE6MTEyNgorIndpbnVzYjogRXVyb0JyYWlsbGUgW0VzeXMgKHZlcnNpb24gPj0gMy4wLCBubyBTRCBjYXJkKV0iPVVTQl9JbnN0YWxsLCBVU0JcVklEX0MyNTEmUElEXzExMjYKKworOyBEZXZpY2U6IEMyNTE6MTEyNworIndpbnVzYjogRXVyb0JyYWlsbGUgW3Jlc2VydmVkXSI9VVNCX0luc3RhbGwsIFVTQlxWSURfQzI1MSZQSURfMTEyNworCis7IERldmljZTogQzI1MToxMTI4Cisid2ludXNiOiBFdXJvQnJhaWxsZSBbRXN5cyAodmVyc2lvbiA+PSAzLjAsIHdpdGggU0QgY2FyZCldIj1VU0JfSW5zdGFsbCwgVVNCXFZJRF9DMjUxJlBJRF8xMTI4CisKKzsgRGV2aWNlOiBDMjUxOjExMjkKKyJ3aW51c2I6IEV1cm9CcmFpbGxlIFtyZXNlcnZlZF0iPVVTQl9JbnN0YWxsLCBVU0JcVklEX0MyNTEmUElEXzExMjkKKworOyBEZXZpY2U6IEMyNTE6MTEyQQorIndpbnVzYjogRXVyb0JyYWlsbGUgW3Jlc2VydmVkXSI9VVNCX0luc3RhbGwsIFVTQlxWSURfQzI1MSZQSURfMTEyQQorCis7IERldmljZTogQzI1MToxMTJCCisid2ludXNiOiBFdXJvQnJhaWxsZSBbcmVzZXJ2ZWRdIj1VU0JfSW5zdGFsbCwgVVNCXFZJRF9DMjUxJlBJRF8xMTJCCisKKzsgRGV2aWNlOiBDMjUxOjExMkMKKyJ3aW51c2I6IEV1cm9CcmFpbGxlIFtyZXNlcnZlZF0iPVVTQl9JbnN0YWxsLCBVU0JcVklEX0MyNTEmUElEXzExMkMKKworOyBEZXZpY2U6IEMyNTE6MTEyRAorIndpbnVzYjogRXVyb0JyYWlsbGUgW3Jlc2VydmVkXSI9VVNCX0luc3RhbGwsIFVTQlxWSURfQzI1MSZQSURfMTEyRAorCis7IERldmljZTogQzI1MToxMTJFCisid2ludXNiOiBFdXJvQnJhaWxsZSBbcmVzZXJ2ZWRdIj1VU0JfSW5zdGFsbCwgVVNCXFZJRF9DMjUxJlBJRF8xMTJFCisKKzsgRGV2aWNlOiBDMjUxOjExMkYKKyJ3aW51c2I6IEV1cm9CcmFpbGxlIFtyZXNlcnZlZF0iPVVTQl9JbnN0YWxsLCBVU0JcVklEX0MyNTEmUElEXzExMkYKKworOyBEZXZpY2U6IEMyNTE6MTEzMAorIndpbnVzYjogRXVyb0JyYWlsbGUgW0VzeXRpbWUgKGZpcm13YXJlIDEuMDMsIDIwMTQtMDMtMzEpXSwgRXVyb0JyYWlsbGUgW0VzeXRpbWVdIj1VU0JfSW5zdGFsbCwgVVNCXFZJRF9DMjUxJlBJRF8xMTMwCisKKzsgRGV2aWNlOiBDMjUxOjExMzEKKyJ3aW51c2I6IEV1cm9CcmFpbGxlIFtyZXNlcnZlZF0iPVVTQl9JbnN0YWxsLCBVU0JcVklEX0MyNTEmUElEXzExMzEKKworOyBEZXZpY2U6IEMyNTE6MTEzMgorIndpbnVzYjogRXVyb0JyYWlsbGUgW3Jlc2VydmVkXSI9VVNCX0luc3RhbGwsIFVTQlxWSURfQzI1MSZQSURfMTEzMgorCis7IEVORF9VU0JfQlJBSUxMRV9ERVZJQ0VTCisKKzsgTWljcm9zb2Z0IE5hcnJhdG9yIERldmljZQorIldpblVTQjogTWljcm9zb2Z0IE5hcnJhdG9yIj1VU0JfSW5zdGFsbCwgVVNCXE5hcnJhdG9yT3ZlcnJpZGUKKworOyA9PT09PT09PT09IENsYXNzIGRlZmluaXRpb24gKGZvciBXaW5kb3dzIDggYW5kIGVhbGllciB2ZXJzaW9ucyk9PT09PT09PT09PQorCis7ID09PT09PT09PT09PT09PT09PT0gSW5zdGFsbGF0aW9uID09PT09PT09PT09PT09PT09PT0KKworW1VTQl9JbnN0YWxsXQorSW5jbHVkZSA9IHdpbnVzYi5pbmYKK05lZWRzICAgPSBXSU5VU0IuTlQKKworW1VTQl9JbnN0YWxsLlNlcnZpY2VzXQorSW5jbHVkZSA9d2ludXNiLmluZgorTmVlZHMgICA9IFdJTlVTQi5OVC5TZXJ2aWNlcworCitbVVNCX0luc3RhbGwuSFddCitBZGRSZWc9RGV2X0FkZFJlZworCitbVVNCX0luc3RhbGwuV2RmXQorS21kZlNlcnZpY2U9V0lOVVNCLCBXaW5Vc2JfSW5zdGFsbAorCitbV2luVXNiX0luc3RhbGxdCitLbWRmTGlicmFyeVZlcnNpb249MS4xMQorCitbRGV2X0FkZFJlZ10KK0hLUiwsRGV2aWNlSW50ZXJmYWNlR1VJRHMsMHgxMDAwMCwiezlmNTQzMjIzLWNlZGUtNGZhMy1iMzc2LWEyNWNlOWEzMGU3NH0iCisKKzsgW0Rlc3RpbmF0aW9uRGlyc10KKzsgSWYgeW91ciBJTkYgbmVlZHMgdG8gY29weSBmaWxlcywgeW91IG11c3Qgbm90IHVzZSB0aGUgRGVmYXVsdERlc3REaXIgZGlyZWN0aXZlIGhlcmUuCis7IFlvdSBtdXN0IGV4cGxpY2l0bHkgcmVmZXJlbmNlIGFsbCBmaWxlLWxpc3Qtc2VjdGlvbiBuYW1lcyBpbiB0aGlzIHNlY3Rpb24uCisKZGlmZiAtLWdpdCBhL1dpbmRvd3Mvd2ludXNiLm5zaSBiL1dpbmRvd3Mvd2ludXNiLm5zaQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZGMzMWVkCi0tLSAvZGV2L251bGwKKysrIGIvV2luZG93cy93aW51c2IubnNpCkBAIC0wLDAgKzEsMjQgQEAKKyFkZWZpbmUgVkFSSUFOVCAid2ludXNiIgorCishbWFjcm8gQnJsdHR5SW5zdGFsbAorIW1hY3JvZW5kCisKKyFtYWNybyBCcmx0dHlTaG9ydGN1dAorIW1hY3JvZW5kCisKKyFtYWNybyBCcmx0dHlUd2VhaworIWRlZmluZSBzeXNTZXR1cENvcHlPRU1JbmYgInNldHVwYXBpOjpTZXR1cENvcHlPRU1JbmYodCwgdCwgaSwgaSwgaSwgaSwgKmksIHQpIGkiCisJU3lzdGVtOjpHZXQgJyR7c3lzU2V0dXBDb3B5T0VNSW5mfScKKwlQb3AgJDAKKwlTdHJDbXAgJDAgJ2Vycm9yJyBub2RyaXZlcgorCU1lc3NhZ2VCb3ggTUJfWUVTTk98TUJfREVGQlVUVE9OMiAkKG1zZ19pbnN3aW51c2IpIElETk8gbm9kcml2ZXIKKwlTeXN0ZW06OkNhbGwgJyR7c3lzU2V0dXBDb3B5T0VNSW5mfT9lICgiJElOU1RESVJcYmluXGJybHR0eS13aW51c2IuaW5mIiwgIiRJTlNURElSXGJpbiIsIDEsIDAsIDAsIDAsIDAsIDApIC5yMCcKK25vZHJpdmVyOgorIW1hY3JvZW5kCisKKyFtYWNybyBCcmx0dHlVbmluc3RhbGwKKwkhaW5zZXJ0bWFjcm8gVW5pbnN0YWxsTGliIERMTCBOT1RTSEFSRUQgUkVCT09UX05PVFBST1RFQ1RFRCAiJFNZU0RJUlxXZGZDb0luc3RhbGxlcjAxMDA5LmRsbCIKKwkhaW5zZXJ0bWFjcm8gVW5pbnN0YWxsTGliIERMTCBOT1RTSEFSRUQgUkVCT09UX05PVFBST1RFQ1RFRCAiJFNZU0RJUlx3aW51c2Jjb2luc3RhbGxlcjIuZGxsIgorIW1hY3JvZW5kCisKKyFpbmNsdWRlIGJybHR0eS5uc2kKZGlmZiAtLWdpdCBhL2FjZGlyL2NvbmZpZy5ndWVzcyBiL2FjZGlyL2NvbmZpZy5ndWVzcwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4xNmZjNjI1Ci0tLSAvZGV2L251bGwKKysrIGIvYWNkaXIvY29uZmlnLmd1ZXNzCkBAIC0wLDAgKzEsMTc2OCBAQAorIyEgL2Jpbi9zaAorIyBBdHRlbXB0IHRvIGd1ZXNzIGEgY2Fub25pY2FsIHN5c3RlbSBuYW1lLgorIyAgIENvcHlyaWdodCAxOTkyLTIwMjMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyMgc2hlbGxjaGVjayBkaXNhYmxlPVNDMjAwNixTQzIyNjggIyBzZWUgYmVsb3cgZm9yIHJhdGlvbmFsZQorCit0aW1lc3RhbXA9JzIwMjItMDUtMjUnCisKKyMgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyMgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKyMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorIyBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisjIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlIDxodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisjCisjIEFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBpZiB5b3UKKyMgZGlzdHJpYnV0ZSB0aGlzIGZpbGUgYXMgcGFydCBvZiBhIHByb2dyYW0gdGhhdCBjb250YWlucyBhCisjIGNvbmZpZ3VyYXRpb24gc2NyaXB0IGdlbmVyYXRlZCBieSBBdXRvY29uZiwgeW91IG1heSBpbmNsdWRlIGl0IHVuZGVyCisjIHRoZSBzYW1lIGRpc3RyaWJ1dGlvbiB0ZXJtcyB0aGF0IHlvdSB1c2UgZm9yIHRoZSByZXN0IG9mIHRoYXQKKyMgcHJvZ3JhbS4gIFRoaXMgRXhjZXB0aW9uIGlzIGFuIGFkZGl0aW9uYWwgcGVybWlzc2lvbiB1bmRlciBzZWN0aW9uIDcKKyMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCB2ZXJzaW9uIDMgKCJHUEx2MyIpLgorIworIyBPcmlnaW5hbGx5IHdyaXR0ZW4gYnkgUGVyIEJvdGhuZXI7IG1haW50YWluZWQgc2luY2UgMjAwMCBieSBCZW4gRWxsaXN0b24uCisjCisjIFlvdSBjYW4gZ2V0IHRoZSBsYXRlc3QgdmVyc2lvbiBvZiB0aGlzIHNjcmlwdCBmcm9tOgorIyBodHRwczovL2dpdC5zYXZhbm5haC5nbnUub3JnL2NnaXQvY29uZmlnLmdpdC9wbGFpbi9jb25maWcuZ3Vlc3MKKyMKKyMgUGxlYXNlIHNlbmQgcGF0Y2hlcyB0byA8Y29uZmlnLXBhdGNoZXNAZ251Lm9yZz4uCisKKworIyBUaGUgInNoZWxsY2hlY2sgZGlzYWJsZSIgbGluZSBhYm92ZSB0aGUgdGltZXN0YW1wIGluaGliaXRzIGNvbXBsYWludHMKKyMgYWJvdXQgZmVhdHVyZXMgYW5kIGxpbWl0YXRpb25zIG9mIHRoZSBjbGFzc2ljIEJvdXJuZSBzaGVsbCB0aGF0IHdlcmUKKyMgc3VwZXJzZWRlZCBvciBsaWZ0ZWQgaW4gUE9TSVguICBIb3dldmVyLCB0aGlzIHNjcmlwdCBpZGVudGlmaWVzIGEgd2lkZQorIyB2YXJpZXR5IG9mIHByZS1QT1NJWCBzeXN0ZW1zIHRoYXQgZG8gbm90IGhhdmUgUE9TSVggc2hlbGxzIGF0IGFsbCwgYW5kCisjIGV2ZW4gc29tZSByZWFzb25hYmx5IGN1cnJlbnQgc3lzdGVtcyAoU29sYXJpcyAxMCBhcyBjYXNlLWluLXBvaW50KSBzdGlsbAorIyBoYXZlIGEgcHJlLVBPU0lYIC9iaW4vc2guCisKKworbWU9YGVjaG8gIiQwIiB8IHNlZCAtZSAncywuKi8sLCdgCisKK3VzYWdlPSJcCitVc2FnZTogJDAgW09QVElPTl0KKworT3V0cHV0IHRoZSBjb25maWd1cmF0aW9uIG5hbWUgb2YgdGhlIHN5c3RlbSBcYCRtZScgaXMgcnVuIG9uLgorCitPcHRpb25zOgorICAtaCwgLS1oZWxwICAgICAgICAgcHJpbnQgdGhpcyBoZWxwLCB0aGVuIGV4aXQKKyAgLXQsIC0tdGltZS1zdGFtcCAgIHByaW50IGRhdGUgb2YgbGFzdCBtb2RpZmljYXRpb24sIHRoZW4gZXhpdAorICAtdiwgLS12ZXJzaW9uICAgICAgcHJpbnQgdmVyc2lvbiBudW1iZXIsIHRoZW4gZXhpdAorCitSZXBvcnQgYnVncyBhbmQgcGF0Y2hlcyB0byA8Y29uZmlnLXBhdGNoZXNAZ251Lm9yZz4uIgorCit2ZXJzaW9uPSJcCitHTlUgY29uZmlnLmd1ZXNzICgkdGltZXN0YW1wKQorCitPcmlnaW5hbGx5IHdyaXR0ZW4gYnkgUGVyIEJvdGhuZXIuCitDb3B5cmlnaHQgMTk5Mi0yMDIzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitUaGlzIGlzIGZyZWUgc29mdHdhcmU7IHNlZSB0aGUgc291cmNlIGZvciBjb3B5aW5nIGNvbmRpdGlvbnMuICBUaGVyZSBpcyBOTword2FycmFudHk7IG5vdCBldmVuIGZvciBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIgorCitoZWxwPSIKK1RyeSBcYCRtZSAtLWhlbHAnIGZvciBtb3JlIGluZm9ybWF0aW9uLiIKKworIyBQYXJzZSBjb21tYW5kIGxpbmUKK3doaWxlIHRlc3QgJCMgLWd0IDAgOyBkbworICBjYXNlICQxIGluCisgICAgLS10aW1lLXN0YW1wIHwgLS10aW1lKiB8IC10ICkKKyAgICAgICBlY2hvICIkdGltZXN0YW1wIiA7IGV4aXQgOzsKKyAgICAtLXZlcnNpb24gfCAtdiApCisgICAgICAgZWNobyAiJHZlcnNpb24iIDsgZXhpdCA7OworICAgIC0taGVscCB8IC0taCogfCAtaCApCisgICAgICAgZWNobyAiJHVzYWdlIjsgZXhpdCA7OworICAgIC0tICkgICAgICMgU3RvcCBvcHRpb24gcHJvY2Vzc2luZworICAgICAgIHNoaWZ0OyBicmVhayA7OworICAgIC0gKQkjIFVzZSBzdGRpbiBhcyBpbnB1dC4KKyAgICAgICBicmVhayA7OworICAgIC0qICkKKyAgICAgICBlY2hvICIkbWU6IGludmFsaWQgb3B0aW9uICQxJGhlbHAiID4mMgorICAgICAgIGV4aXQgMSA7OworICAgICogKQorICAgICAgIGJyZWFrIDs7CisgIGVzYWMKK2RvbmUKKworaWYgdGVzdCAkIyAhPSAwOyB0aGVuCisgIGVjaG8gIiRtZTogdG9vIG1hbnkgYXJndW1lbnRzJGhlbHAiID4mMgorICBleGl0IDEKK2ZpCisKKyMgSnVzdCBpbiBjYXNlIGl0IGNhbWUgZnJvbSB0aGUgZW52aXJvbm1lbnQuCitHVUVTUz0KKworIyBDQ19GT1JfQlVJTEQgLS0gY29tcGlsZXIgdXNlZCBieSB0aGlzIHNjcmlwdC4gTm90ZSB0aGF0IHRoZSB1c2Ugb2YgYQorIyBjb21waWxlciB0byBhaWQgaW4gc3lzdGVtIGRldGVjdGlvbiBpcyBkaXNjb3VyYWdlZCBhcyBpdCByZXF1aXJlcworIyB0ZW1wb3JhcnkgZmlsZXMgdG8gYmUgY3JlYXRlZCBhbmQsIGFzIHlvdSBjYW4gc2VlIGJlbG93LCBpdCBpcyBhCisjIGhlYWRhY2hlIHRvIGRlYWwgd2l0aCBpbiBhIHBvcnRhYmxlIGZhc2hpb24uCisKKyMgSGlzdG9yaWNhbGx5LCBgQ0NfRk9SX0JVSUxEJyB1c2VkIHRvIGJlIG5hbWVkIGBIT1NUX0NDJy4gV2Ugc3RpbGwKKyMgdXNlIGBIT1NUX0NDJyBpZiBkZWZpbmVkLCBidXQgaXQgaXMgZGVwcmVjYXRlZC4KKworIyBQb3J0YWJsZSB0bXAgZGlyZWN0b3J5IGNyZWF0aW9uIGluc3BpcmVkIGJ5IHRoZSBBdXRvY29uZiB0ZWFtLgorCit0bXA9CisjIHNoZWxsY2hlY2sgZGlzYWJsZT1TQzIxNzIKK3RyYXAgJ3Rlc3QgLXogIiR0bXAiIHx8IHJtIC1mciAiJHRtcCInIDAgMSAyIDEzIDE1CisKK3NldF9jY19mb3JfYnVpbGQoKSB7CisgICAgIyBwcmV2ZW50IG11bHRpcGxlIGNhbGxzIGlmICR0bXAgaXMgYWxyZWFkeSBzZXQKKyAgICB0ZXN0ICIkdG1wIiAmJiByZXR1cm4gMAorICAgIDogIiR7VE1QRElSPS90bXB9IgorICAgICMgc2hlbGxjaGVjayBkaXNhYmxlPVNDMjAzOSxTQzMwMjgKKyAgICB7IHRtcD1gKHVtYXNrIDA3NyAmJiBta3RlbXAgLWQgIiRUTVBESVIvY2dYWFhYWFgiKSAyPi9kZXYvbnVsbGAgJiYgdGVzdCAtbiAiJHRtcCIgJiYgdGVzdCAtZCAiJHRtcCIgOyB9IHx8CisJeyB0ZXN0IC1uICIkUkFORE9NIiAmJiB0bXA9JFRNUERJUi9jZyQkLSRSQU5ET00gJiYgKHVtYXNrIDA3NyAmJiBta2RpciAiJHRtcCIgMj4vZGV2L251bGwpIDsgfSB8fAorCXsgdG1wPSRUTVBESVIvY2ctJCQgJiYgKHVtYXNrIDA3NyAmJiBta2RpciAiJHRtcCIgMj4vZGV2L251bGwpICYmIGVjaG8gIldhcm5pbmc6IGNyZWF0aW5nIGluc2VjdXJlIHRlbXAgZGlyZWN0b3J5IiA+JjIgOyB9IHx8CisJeyBlY2hvICIkbWU6IGNhbm5vdCBjcmVhdGUgYSB0ZW1wb3JhcnkgZGlyZWN0b3J5IGluICRUTVBESVIiID4mMiA7IGV4aXQgMSA7IH0KKyAgICBkdW1teT0kdG1wL2R1bW15CisgICAgY2FzZSAke0NDX0ZPUl9CVUlMRC19LCR7SE9TVF9DQy19LCR7Q0MtfSBpbgorCSwsKSAgICBlY2hvICJpbnQgeDsiID4gIiRkdW1teS5jIgorCSAgICAgICBmb3IgZHJpdmVyIGluIGNjIGdjYyBjODkgYzk5IDsgZG8KKwkJICAgaWYgKCRkcml2ZXIgLWMgLW8gIiRkdW1teS5vIiAiJGR1bW15LmMiKSA+L2Rldi9udWxsIDI+JjEgOyB0aGVuCisJCSAgICAgICBDQ19GT1JfQlVJTEQ9JGRyaXZlcgorCQkgICAgICAgYnJlYWsKKwkJICAgZmkKKwkgICAgICAgZG9uZQorCSAgICAgICBpZiB0ZXN0IHgiJENDX0ZPUl9CVUlMRCIgPSB4IDsgdGhlbgorCQkgICBDQ19GT1JfQlVJTEQ9bm9fY29tcGlsZXJfZm91bmQKKwkgICAgICAgZmkKKwkgICAgICAgOzsKKwksLCopICAgQ0NfRk9SX0JVSUxEPSRDQyA7OworCSwqLCopICBDQ19GT1JfQlVJTEQ9JEhPU1RfQ0MgOzsKKyAgICBlc2FjCit9CisKKyMgVGhpcyBpcyBuZWVkZWQgdG8gZmluZCB1bmFtZSBvbiBhIFB5cmFtaWQgT1N4IHdoZW4gcnVuIGluIHRoZSBCU0QgdW5pdmVyc2UuCisjIChnaGF6aUBub2MucnV0Z2Vycy5lZHUgMTk5NC0wOC0yNCkKK2lmIHRlc3QgLWYgLy5hdHRiaW4vdW5hbWUgOyB0aGVuCisJUEFUSD0kUEFUSDovLmF0dGJpbiA7IGV4cG9ydCBQQVRICitmaQorCitVTkFNRV9NQUNISU5FPWAodW5hbWUgLW0pIDI+L2Rldi9udWxsYCB8fCBVTkFNRV9NQUNISU5FPXVua25vd24KK1VOQU1FX1JFTEVBU0U9YCh1bmFtZSAtcikgMj4vZGV2L251bGxgIHx8IFVOQU1FX1JFTEVBU0U9dW5rbm93bgorVU5BTUVfU1lTVEVNPWAodW5hbWUgLXMpIDI+L2Rldi9udWxsYCB8fCBVTkFNRV9TWVNURU09dW5rbm93bgorVU5BTUVfVkVSU0lPTj1gKHVuYW1lIC12KSAyPi9kZXYvbnVsbGAgfHwgVU5BTUVfVkVSU0lPTj11bmtub3duCisKK2Nhc2UgJFVOQU1FX1NZU1RFTSBpbgorTGludXh8R05VfEdOVS8qKQorCUxJQkM9dW5rbm93bgorCisJc2V0X2NjX2Zvcl9idWlsZAorCWNhdCA8PC1FT0YgPiAiJGR1bW15LmMiCisJI2luY2x1ZGUgPGZlYXR1cmVzLmg+CisJI2lmIGRlZmluZWQoX19VQ0xJQkNfXykKKwlMSUJDPXVjbGliYworCSNlbGlmIGRlZmluZWQoX19kaWV0bGliY19fKQorCUxJQkM9ZGlldGxpYmMKKwkjZWxpZiBkZWZpbmVkKF9fR0xJQkNfXykKKwlMSUJDPWdudQorCSNlbHNlCisJI2luY2x1ZGUgPHN0ZGFyZy5oPgorCS8qIEZpcnN0IGhldXJpc3RpYyB0byBkZXRlY3QgbXVzbCBsaWJjLiAgKi8KKwkjaWZkZWYgX19ERUZJTkVEX3ZhX2xpc3QKKwlMSUJDPW11c2wKKwkjZW5kaWYKKwkjZW5kaWYKKwlFT0YKKwljY19zZXRfbGliYz1gJENDX0ZPUl9CVUlMRCAtRSAiJGR1bW15LmMiIDI+L2Rldi9udWxsIHwgZ3JlcCAnXkxJQkMnIHwgc2VkICdzLCAsLGcnYAorCWV2YWwgIiRjY19zZXRfbGliYyIKKworCSMgU2Vjb25kIGhldXJpc3RpYyB0byBkZXRlY3QgbXVzbCBsaWJjLgorCWlmIFsgIiRMSUJDIiA9IHVua25vd24gXSAmJgorCSAgIGNvbW1hbmQgLXYgbGRkID4vZGV2L251bGwgJiYKKwkgICBsZGQgLS12ZXJzaW9uIDI+JjEgfCBncmVwIC1xIF5tdXNsOyB0aGVuCisJCUxJQkM9bXVzbAorCWZpCisKKwkjIElmIHRoZSBzeXN0ZW0gbGFja3MgYSBjb21waWxlciwgdGhlbiBqdXN0IHBpY2sgZ2xpYmMuCisJIyBXZSBjb3VsZCBwcm9iYWJseSB0cnkgaGFyZGVyLgorCWlmIFsgIiRMSUJDIiA9IHVua25vd24gXTsgdGhlbgorCQlMSUJDPWdudQorCWZpCisJOzsKK2VzYWMKKworIyBOb3RlOiBvcmRlciBpcyBzaWduaWZpY2FudCAtIHRoZSBjYXNlIGJyYW5jaGVzIGFyZSBub3QgZXhjbHVzaXZlLgorCitjYXNlICRVTkFNRV9NQUNISU5FOiRVTkFNRV9TWVNURU06JFVOQU1FX1JFTEVBU0U6JFVOQU1FX1ZFUlNJT04gaW4KKyAgICAqOk5ldEJTRDoqOiopCisJIyBOZXRCU0QgKG5ic2QpIHRhcmdldHMgc2hvdWxkICh3aGVyZSBhcHBsaWNhYmxlKSBtYXRjaCBvbmUgb3IKKwkjIG1vcmUgb2YgdGhlIHR1cGxlczogKi0qLW5ldGJzZGVsZiosICotKi1uZXRic2Rhb3V0KiwKKwkjICotKi1uZXRic2RlY29mZiogYW5kICotKi1uZXRic2QqLiAgRm9yIHRhcmdldHMgdGhhdCByZWNlbnRseQorCSMgc3dpdGNoZWQgdG8gRUxGLCAqLSotbmV0YnNkKiB3b3VsZCBzZWxlY3QgdGhlIG9sZAorCSMgb2JqZWN0IGZpbGUgZm9ybWF0LiAgVGhpcyBwcm92aWRlcyBib3RoIGZvcndhcmQKKwkjIGNvbXBhdGliaWxpdHkgYW5kIGEgY29uc2lzdGVudCBtZWNoYW5pc20gZm9yIHNlbGVjdGluZyB0aGUKKwkjIG9iamVjdCBmaWxlIGZvcm1hdC4KKwkjCisJIyBOb3RlOiBOZXRCU0QgZG9lc24ndCBwYXJ0aWN1bGFybHkgY2FyZSBhYm91dCB0aGUgdmVuZG9yCisJIyBwb3J0aW9uIG9mIHRoZSBuYW1lLiAgV2UgYWx3YXlzIHNldCBpdCB0byAidW5rbm93biIuCisJVU5BTUVfTUFDSElORV9BUkNIPWAodW5hbWUgLXAgMj4vZGV2L251bGwgfHwgXAorCSAgICAvc2Jpbi9zeXNjdGwgLW4gaHcubWFjaGluZV9hcmNoIDI+L2Rldi9udWxsIHx8IFwKKwkgICAgL3Vzci9zYmluL3N5c2N0bCAtbiBody5tYWNoaW5lX2FyY2ggMj4vZGV2L251bGwgfHwgXAorCSAgICBlY2hvIHVua25vd24pYAorCWNhc2UgJFVOQU1FX01BQ0hJTkVfQVJDSCBpbgorCSAgICBhYXJjaDY0ZWIpIG1hY2hpbmU9YWFyY2g2NF9iZS11bmtub3duIDs7CisJICAgIGFybWViKSBtYWNoaW5lPWFybWViLXVua25vd24gOzsKKwkgICAgYXJtKikgbWFjaGluZT1hcm0tdW5rbm93biA7OworCSAgICBzaDNlbCkgbWFjaGluZT1zaGwtdW5rbm93biA7OworCSAgICBzaDNlYikgbWFjaGluZT1zaC11bmtub3duIDs7CisJICAgIHNoNWVsKSBtYWNoaW5lPXNoNWxlLXVua25vd24gOzsKKwkgICAgZWFybXYqKQorCQlhcmNoPWBlY2hvICIkVU5BTUVfTUFDSElORV9BUkNIIiB8IHNlZCAtZSAncyxeZVwoYXJtdlswLTldXCkuKiQsXDEsJ2AKKwkJZW5kaWFuPWBlY2hvICIkVU5BTUVfTUFDSElORV9BUkNIIiB8IHNlZCAtbmUgJ3MsXi4qXChlYlwpJCxcMSxwJ2AKKwkJbWFjaGluZT0ke2FyY2h9JHtlbmRpYW59LXVua25vd24KKwkJOzsKKwkgICAgKikgbWFjaGluZT0kVU5BTUVfTUFDSElORV9BUkNILXVua25vd24gOzsKKwllc2FjCisJIyBUaGUgT3BlcmF0aW5nIFN5c3RlbSBpbmNsdWRpbmcgb2JqZWN0IGZvcm1hdCwgaWYgaXQgaGFzIHN3aXRjaGVkCisJIyB0byBFTEYgcmVjZW50bHkgKG9yIHdpbGwgaW4gdGhlIGZ1dHVyZSkgYW5kIEFCSS4KKwljYXNlICRVTkFNRV9NQUNISU5FX0FSQ0ggaW4KKwkgICAgZWFybSopCisJCW9zPW5ldGJzZGVsZgorCQk7OworCSAgICBhcm0qfGkzODZ8bTY4a3xuczMya3xzaDMqfHNwYXJjfHZheCkKKwkJc2V0X2NjX2Zvcl9idWlsZAorCQlpZiBlY2hvIF9fRUxGX18gfCAkQ0NfRk9SX0JVSUxEIC1FIC0gMj4vZGV2L251bGwgXAorCQkJfCBncmVwIC1xIF9fRUxGX18KKwkJdGhlbgorCQkgICAgIyBPbmNlIGFsbCB1dGlsaXRpZXMgY2FuIGJlIEVDT0ZGIChuZXRic2RlY29mZikgb3IgYS5vdXQgKG5ldGJzZGFvdXQpLgorCQkgICAgIyBSZXR1cm4gbmV0YnNkIGZvciBlaXRoZXIuICBGSVg/CisJCSAgICBvcz1uZXRic2QKKwkJZWxzZQorCQkgICAgb3M9bmV0YnNkZWxmCisJCWZpCisJCTs7CisJICAgICopCisJCW9zPW5ldGJzZAorCQk7OworCWVzYWMKKwkjIERldGVybWluZSBBQkkgdGFncy4KKwljYXNlICRVTkFNRV9NQUNISU5FX0FSQ0ggaW4KKwkgICAgZWFybSopCisJCWV4cHI9J3MvXmVhcm12WzAtOV0vLWVhYmkvO3MvZWIkLy8nCisJCWFiaT1gZWNobyAiJFVOQU1FX01BQ0hJTkVfQVJDSCIgfCBzZWQgLWUgIiRleHByImAKKwkJOzsKKwllc2FjCisJIyBUaGUgT1MgcmVsZWFzZQorCSMgRGViaWFuIEdOVS9OZXRCU0QgbWFjaGluZXMgaGF2ZSBhIGRpZmZlcmVudCB1c2VybGFuZCwgYW5kCisJIyB0aHVzLCBuZWVkIGEgZGlzdGluY3QgdHJpcGxldC4gSG93ZXZlciwgdGhleSBkbyBub3QgbmVlZAorCSMga2VybmVsIHZlcnNpb24gaW5mb3JtYXRpb24sIHNvIGl0IGNhbiBiZSByZXBsYWNlZCB3aXRoIGEKKwkjIHN1aXRhYmxlIHRhZywgaW4gdGhlIHN0eWxlIG9mIGxpbnV4LWdudS4KKwljYXNlICRVTkFNRV9WRVJTSU9OIGluCisJICAgIERlYmlhbiopCisJCXJlbGVhc2U9Jy1nbnUnCisJCTs7CisJICAgICopCisJCXJlbGVhc2U9YGVjaG8gIiRVTkFNRV9SRUxFQVNFIiB8IHNlZCAtZSAncy9bLV9dLiovLycgfCBjdXQgLWQuIC1mMSwyYAorCQk7OworCWVzYWMKKwkjIFNpbmNlIENQVV9UWVBFLU1BTlVGQUNUVVJFUi1LRVJORUwtT1BFUkFUSU5HX1NZU1RFTToKKwkjIGNvbnRhaW5zIHJlZHVuZGFudCBpbmZvcm1hdGlvbiwgdGhlIHNob3J0ZXIgZm9ybToKKwkjIENQVV9UWVBFLU1BTlVGQUNUVVJFUi1PUEVSQVRJTkdfU1lTVEVNIGlzIHVzZWQuCisJR1VFU1M9JG1hY2hpbmUtJHtvc30ke3JlbGVhc2V9JHthYmktfQorCTs7CisgICAgKjpCaXRyaWc6KjoqKQorCVVOQU1FX01BQ0hJTkVfQVJDSD1gYXJjaCB8IHNlZCAncy9CaXRyaWcuLy8nYAorCUdVRVNTPSRVTkFNRV9NQUNISU5FX0FSQ0gtdW5rbm93bi1iaXRyaWckVU5BTUVfUkVMRUFTRQorCTs7CisgICAgKjpPcGVuQlNEOio6KikKKwlVTkFNRV9NQUNISU5FX0FSQ0g9YGFyY2ggfCBzZWQgJ3MvT3BlbkJTRC4vLydgCisJR1VFU1M9JFVOQU1FX01BQ0hJTkVfQVJDSC11bmtub3duLW9wZW5ic2QkVU5BTUVfUkVMRUFTRQorCTs7CisgICAgKjpTZWNCU0Q6KjoqKQorCVVOQU1FX01BQ0hJTkVfQVJDSD1gYXJjaCB8IHNlZCAncy9TZWNCU0QuLy8nYAorCUdVRVNTPSRVTkFNRV9NQUNISU5FX0FSQ0gtdW5rbm93bi1zZWNic2QkVU5BTUVfUkVMRUFTRQorCTs7CisgICAgKjpMaWJlcnR5QlNEOio6KikKKwlVTkFNRV9NQUNISU5FX0FSQ0g9YGFyY2ggfCBzZWQgJ3MvXi4qQlNEXC4vLydgCisJR1VFU1M9JFVOQU1FX01BQ0hJTkVfQVJDSC11bmtub3duLWxpYmVydHlic2QkVU5BTUVfUkVMRUFTRQorCTs7CisgICAgKjpNaWRuaWdodEJTRDoqOiopCisJR1VFU1M9JFVOQU1FX01BQ0hJTkUtdW5rbm93bi1taWRuaWdodGJzZCRVTkFNRV9SRUxFQVNFCisJOzsKKyAgICAqOmVra29CU0Q6KjoqKQorCUdVRVNTPSRVTkFNRV9NQUNISU5FLXVua25vd24tZWtrb2JzZCRVTkFNRV9SRUxFQVNFCisJOzsKKyAgICAqOlNvbGlkQlNEOio6KikKKwlHVUVTUz0kVU5BTUVfTUFDSElORS11bmtub3duLXNvbGlkYnNkJFVOQU1FX1JFTEVBU0UKKwk7OworICAgICo6T1MxMDg6KjoqKQorCUdVRVNTPSRVTkFNRV9NQUNISU5FLXVua25vd24tb3MxMDhfJFVOQU1FX1JFTEVBU0UKKwk7OworICAgIG1hY3BwYzpNaXJCU0Q6KjoqKQorCUdVRVNTPXBvd2VycGMtdW5rbm93bi1taXJic2QkVU5BTUVfUkVMRUFTRQorCTs7CisgICAgKjpNaXJCU0Q6KjoqKQorCUdVRVNTPSRVTkFNRV9NQUNISU5FLXVua25vd24tbWlyYnNkJFVOQU1FX1JFTEVBU0UKKwk7OworICAgICo6U29ydGl4Oio6KikKKwlHVUVTUz0kVU5BTUVfTUFDSElORS11bmtub3duLXNvcnRpeAorCTs7CisgICAgKjpUd2l6emxlcjoqOiopCisJR1VFU1M9JFVOQU1FX01BQ0hJTkUtdW5rbm93bi10d2l6emxlcgorCTs7CisgICAgKjpSZWRveDoqOiopCisJR1VFU1M9JFVOQU1FX01BQ0hJTkUtdW5rbm93bi1yZWRveAorCTs7CisgICAgbWlwczpPU0YxOiouKikKKwlHVUVTUz1taXBzLWRlYy1vc2YxCisJOzsKKyAgICBhbHBoYTpPU0YxOio6KikKKwkjIFJlc2V0IEVYSVQgdHJhcCBiZWZvcmUgZXhpdGluZyB0byBhdm9pZCBzcHVyaW91cyBub24temVybyBleGl0IGNvZGUuCisJdHJhcCAnJyAwCisJY2FzZSAkVU5BTUVfUkVMRUFTRSBpbgorCSo0LjApCisJCVVOQU1FX1JFTEVBU0U9YC91c3Ivc2Jpbi9zaXplciAtdiB8IGF3ayAne3ByaW50ICQzfSdgCisJCTs7CisJKjUuKikKKwkJVU5BTUVfUkVMRUFTRT1gL3Vzci9zYmluL3NpemVyIC12IHwgYXdrICd7cHJpbnQgJDR9J2AKKwkJOzsKKwllc2FjCisJIyBBY2NvcmRpbmcgdG8gQ29tcGFxLCAvdXNyL3NiaW4vcHNyaW5mbyBoYXMgYmVlbiBhdmFpbGFibGUgb24KKwkjIE9TRi8xIGFuZCBUcnU2NCBzeXN0ZW1zIHByb2R1Y2VkIHNpbmNlIDE5OTUuICBJIGhvcGUgdGhhdAorCSMgY292ZXJzIG1vc3Qgc3lzdGVtcyBydW5uaW5nIHRvZGF5LiAgVGhpcyBjb2RlIHBpcGVzIHRoZSBDUFUKKwkjIHR5cGVzIHRocm91Z2ggaGVhZCAtbiAxLCBzbyB3ZSBvbmx5IGRldGVjdCB0aGUgdHlwZSBvZiBDUFUgMC4KKwlBTFBIQV9DUFVfVFlQRT1gL3Vzci9zYmluL3BzcmluZm8gLXYgfCBzZWQgLW4gLWUgJ3MvXiAgVGhlIGFscGhhIFwoLipcKSBwcm9jZXNzb3IuKiQvXDEvcCcgfCBoZWFkIC1uIDFgCisJY2FzZSAkQUxQSEFfQ1BVX1RZUEUgaW4KKwkgICAgIkVWNCAoMjEwNjQpIikKKwkJVU5BTUVfTUFDSElORT1hbHBoYSA7OworCSAgICAiRVY0LjUgKDIxMDY0KSIpCisJCVVOQU1FX01BQ0hJTkU9YWxwaGEgOzsKKwkgICAgIkxDQTQgKDIxMDY2LzIxMDY4KSIpCisJCVVOQU1FX01BQ0hJTkU9YWxwaGEgOzsKKwkgICAgIkVWNSAoMjExNjQpIikKKwkJVU5BTUVfTUFDSElORT1hbHBoYWV2NSA7OworCSAgICAiRVY1LjYgKDIxMTY0QSkiKQorCQlVTkFNRV9NQUNISU5FPWFscGhhZXY1NiA7OworCSAgICAiRVY1LjYgKDIxMTY0UEMpIikKKwkJVU5BTUVfTUFDSElORT1hbHBoYXBjYTU2IDs7CisJICAgICJFVjUuNyAoMjExNjRQQykiKQorCQlVTkFNRV9NQUNISU5FPWFscGhhcGNhNTcgOzsKKwkgICAgIkVWNiAoMjEyNjQpIikKKwkJVU5BTUVfTUFDSElORT1hbHBoYWV2NiA7OworCSAgICAiRVY2LjcgKDIxMjY0QSkiKQorCQlVTkFNRV9NQUNISU5FPWFscGhhZXY2NyA7OworCSAgICAiRVY2LjhDQiAoMjEyNjRDKSIpCisJCVVOQU1FX01BQ0hJTkU9YWxwaGFldjY4IDs7CisJICAgICJFVjYuOEFMICgyMTI2NEIpIikKKwkJVU5BTUVfTUFDSElORT1hbHBoYWV2NjggOzsKKwkgICAgIkVWNi44Q1ggKDIxMjY0RCkiKQorCQlVTkFNRV9NQUNISU5FPWFscGhhZXY2OCA7OworCSAgICAiRVY2LjlBICgyMTI2NC9FVjY5QSkiKQorCQlVTkFNRV9NQUNISU5FPWFscGhhZXY2OSA7OworCSAgICAiRVY3ICgyMTM2NCkiKQorCQlVTkFNRV9NQUNISU5FPWFscGhhZXY3IDs7CisJICAgICJFVjcuOSAoMjEzNjRBKSIpCisJCVVOQU1FX01BQ0hJTkU9YWxwaGFldjc5IDs7CisJZXNhYworCSMgQSBQbi5uIHZlcnNpb24gaXMgYSBwYXRjaGVkIHZlcnNpb24uCisJIyBBIFZuLm4gdmVyc2lvbiBpcyBhIHJlbGVhc2VkIHZlcnNpb24uCisJIyBBIFRuLm4gdmVyc2lvbiBpcyBhIHJlbGVhc2VkIGZpZWxkIHRlc3QgdmVyc2lvbi4KKwkjIEEgWG4ubiB2ZXJzaW9uIGlzIGFuIHVucmVsZWFzZWQgZXhwZXJpbWVudGFsIGJhc2VsZXZlbC4KKwkjIDEuMiB1c2VzICIxLjIiIGZvciB1bmFtZSAtci4KKwlPU0ZfUkVMPWBlY2hvICIkVU5BTUVfUkVMRUFTRSIgfCBzZWQgLWUgJ3MvXltQVlRYXS8vJyB8IHRyIEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaIGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6YAorCUdVRVNTPSRVTkFNRV9NQUNISU5FLWRlYy1vc2YkT1NGX1JFTAorCTs7CisgICAgQW1pZ2EqOlVOSVhfU3lzdGVtX1Y6NC4wOiopCisJR1VFU1M9bTY4ay11bmtub3duLXN5c3Y0CisJOzsKKyAgICAqOltBYV1taWdhW09vXVtTc106KjoqKQorCUdVRVNTPSRVTkFNRV9NQUNISU5FLXVua25vd24tYW1pZ2FvcworCTs7CisgICAgKjpbTW1db3JwaFtPb11bU3NdOio6KikKKwlHVUVTUz0kVU5BTUVfTUFDSElORS11bmtub3duLW1vcnBob3MKKwk7OworICAgICo6T1MvMzkwOio6KikKKwlHVUVTUz1pMzcwLWlibS1vcGVuZWRpdGlvbgorCTs7CisgICAgKjp6L1ZNOio6KikKKwlHVUVTUz1zMzkwLWlibS16dm1vZQorCTs7CisgICAgKjpPUzQwMDoqOiopCisJR1VFU1M9cG93ZXJwYy1pYm0tb3M0MDAKKwk7OworICAgIGFybTpSSVNDKjoxLlswMTJdKjoqfGFybTpyaXNjaXg6MS5bMDEyXSo6KikKKwlHVUVTUz1hcm0tYWNvcm4tcmlzY2l4JFVOQU1FX1JFTEVBU0UKKwk7OworICAgIGFybSo6cmlzY29zOio6Knxhcm0qOlJJU0NPUzoqOiopCisJR1VFU1M9YXJtLXVua25vd24tcmlzY29zCisJOzsKKyAgICBTUjI/MDE6SEktVVgvTVBQOio6KiB8IFNSODAwMDpISS1VWC9NUFA6KjoqKQorCUdVRVNTPWhwcGExLjEtaGl0YWNoaS1oaXV4bXBwCisJOzsKKyAgICBQeXJhbWlkKjpPU3gqOio6KiB8IE1JUyo6T1N4KjoqOiogfCBNSVMqOlNNUF9EQy1PU3gqOio6KikKKwkjIGFrZWVAd3BkaXMwMy53cGFmYi5hZi5taWwgKEVhcmxlIEYuIEFrZSkgY29udHJpYnV0ZWQgTUlTIGFuZCBOSUxFLgorCWNhc2UgYCgvYmluL3VuaXZlcnNlKSAyPi9kZXYvbnVsbGAgaW4KKwkgICAgYXR0KSBHVUVTUz1weXJhbWlkLXB5cmFtaWQtc3lzdjMgOzsKKwkgICAgKikgICBHVUVTUz1weXJhbWlkLXB5cmFtaWQtYnNkICAgOzsKKwllc2FjCisJOzsKKyAgICBOSUxFKjoqOio6ZGNvc3gpCisJR1VFU1M9cHlyYW1pZC1weXJhbWlkLXN2cjQKKwk7OworICAgIERSUz82MDAwOnVuaXg6NC4wOjYqKQorCUdVRVNTPXNwYXJjLWljbC1ueDYKKwk7OworICAgIERSUz82MDAwOlVOSVhfU1Y6NC4yKjo3KiB8IERSUz82MDAwOmlzaXM6NC4yKjo3KikKKwljYXNlIGAvdXNyL2Jpbi91bmFtZSAtcGAgaW4KKwkgICAgc3BhcmMpIEdVRVNTPXNwYXJjLWljbC1ueDcgOzsKKwllc2FjCisJOzsKKyAgICBzMzkweDpTdW5PUzoqOiopCisJU1VOX1JFTD1gZWNobyAiJFVOQU1FX1JFTEVBU0UiIHwgc2VkIC1lICdzL1teLl0qLy8nYAorCUdVRVNTPSRVTkFNRV9NQUNISU5FLWlibS1zb2xhcmlzMiRTVU5fUkVMCisJOzsKKyAgICBzdW40SDpTdW5PUzo1Lio6KikKKwlTVU5fUkVMPWBlY2hvICIkVU5BTUVfUkVMRUFTRSIgfCBzZWQgLWUgJ3MvW14uXSovLydgCisJR1VFU1M9c3BhcmMtaGFsLXNvbGFyaXMyJFNVTl9SRUwKKwk7OworICAgIHN1bjQqOlN1bk9TOjUuKjoqIHwgdGFkcG9sZSo6U3VuT1M6NS4qOiopCisJU1VOX1JFTD1gZWNobyAiJFVOQU1FX1JFTEVBU0UiIHwgc2VkIC1lICdzL1teLl0qLy8nYAorCUdVRVNTPXNwYXJjLXN1bi1zb2xhcmlzMiRTVU5fUkVMCisJOzsKKyAgICBpODZwYzpBdXJvcmFVWDo1Lio6KiB8IGk4NnhlbjpBdXJvcmFVWDo1Lio6KikKKwlHVUVTUz1pMzg2LXBjLWF1cm9yYXV4JFVOQU1FX1JFTEVBU0UKKwk7OworICAgIGk4NnBjOlN1bk9TOjUuKjoqIHwgaTg2eGVuOlN1bk9TOjUuKjoqKQorCXNldF9jY19mb3JfYnVpbGQKKwlTVU5fQVJDSD1pMzg2CisJIyBJZiB0aGVyZSBpcyBhIGNvbXBpbGVyLCBzZWUgaWYgaXQgaXMgY29uZmlndXJlZCBmb3IgNjQtYml0IG9iamVjdHMuCisJIyBOb3RlIHRoYXQgdGhlIFN1biBjYyBkb2VzIG5vdCB0dXJuIF9fTFA2NF9fIGludG8gMSBsaWtlIGdjYyBkb2VzLgorCSMgVGhpcyB0ZXN0IHdvcmtzIGZvciBib3RoIGNvbXBpbGVycy4KKwlpZiB0ZXN0ICIkQ0NfRk9SX0JVSUxEIiAhPSBub19jb21waWxlcl9mb3VuZDsgdGhlbgorCSAgICBpZiAoZWNobyAnI2lmZGVmIF9fYW1kNjQnOyBlY2hvIElTXzY0QklUX0FSQ0g7IGVjaG8gJyNlbmRpZicpIHwgXAorCQkoQ0NPUFRTPSIiICRDQ19GT1JfQlVJTEQgLW02NCAtRSAtIDI+L2Rldi9udWxsKSB8IFwKKwkJZ3JlcCBJU182NEJJVF9BUkNIID4vZGV2L251bGwKKwkgICAgdGhlbgorCQlTVU5fQVJDSD14ODZfNjQKKwkgICAgZmkKKwlmaQorCVNVTl9SRUw9YGVjaG8gIiRVTkFNRV9SRUxFQVNFIiB8IHNlZCAtZSAncy9bXi5dKi8vJ2AKKwlHVUVTUz0kU1VOX0FSQ0gtcGMtc29sYXJpczIkU1VOX1JFTAorCTs7CisgICAgc3VuNCo6U3VuT1M6Nio6KikKKwkjIEFjY29yZGluZyB0byBjb25maWcuc3ViLCB0aGlzIGlzIHRoZSBwcm9wZXIgd2F5IHRvIGNhbm9uaWNhbGl6ZQorCSMgU3VuT1M2LiAgSGFyZCB0byBndWVzcyBleGFjdGx5IHdoYXQgU3VuT1M2IHdpbGwgYmUgbGlrZSwgYnV0CisJIyBpdCdzIGxpa2VseSB0byBiZSBtb3JlIGxpa2UgU29sYXJpcyB0aGFuIFN1bk9TNC4KKwlTVU5fUkVMPWBlY2hvICIkVU5BTUVfUkVMRUFTRSIgfCBzZWQgLWUgJ3MvW14uXSovLydgCisJR1VFU1M9c3BhcmMtc3VuLXNvbGFyaXMzJFNVTl9SRUwKKwk7OworICAgIHN1bjQqOlN1bk9TOio6KikKKwljYXNlIGAvdXNyL2Jpbi9hcmNoIC1rYCBpbgorCSAgICBTZXJpZXMqfFM0KikKKwkJVU5BTUVfUkVMRUFTRT1gdW5hbWUgLXZgCisJCTs7CisJZXNhYworCSMgSmFwYW5lc2UgTGFuZ3VhZ2UgdmVyc2lvbnMgaGF2ZSBhIHZlcnNpb24gbnVtYmVyIGxpa2UgYDQuMS4zLUpMJy4KKwlTVU5fUkVMPWBlY2hvICIkVU5BTUVfUkVMRUFTRSIgfCBzZWQgLWUgJ3MvLS9fLydgCisJR1VFU1M9c3BhcmMtc3VuLXN1bm9zJFNVTl9SRUwKKwk7OworICAgIHN1bjMqOlN1bk9TOio6KikKKwlHVUVTUz1tNjhrLXN1bi1zdW5vcyRVTkFNRV9SRUxFQVNFCisJOzsKKyAgICBzdW4qOio6NC4yQlNEOiopCisJVU5BTUVfUkVMRUFTRT1gKHNlZCAxcSAvZXRjL21vdGQgfCBhd2sgJ3twcmludCBzdWJzdHIoJDUsMSwzKX0nKSAyPi9kZXYvbnVsbGAKKwl0ZXN0ICJ4JFVOQU1FX1JFTEVBU0UiID0geCAmJiBVTkFNRV9SRUxFQVNFPTMKKwljYXNlIGAvYmluL2FyY2hgIGluCisJICAgIHN1bjMpCisJCUdVRVNTPW02OGstc3VuLXN1bm9zJFVOQU1FX1JFTEVBU0UKKwkJOzsKKwkgICAgc3VuNCkKKwkJR1VFU1M9c3BhcmMtc3VuLXN1bm9zJFVOQU1FX1JFTEVBU0UKKwkJOzsKKwllc2FjCisJOzsKKyAgICBhdXNocDpTdW5PUzoqOiopCisJR1VFU1M9c3BhcmMtYXVzcGV4LXN1bm9zJFVOQU1FX1JFTEVBU0UKKwk7OworICAgICMgVGhlIHNpdHVhdGlvbiBmb3IgTWlOVCBpcyBhIGxpdHRsZSBjb25mdXNpbmcuICBUaGUgbWFjaGluZSBuYW1lCisgICAgIyBjYW4gYmUgdmlydHVhbGx5IGV2ZXJ5dGhpbmcgKGV2ZXJ5dGhpbmcgd2hpY2ggaXMgbm90CisgICAgIyAiYXRhcmlzdCIgb3IgImF0YXJpc3RlIiBhdCBsZWFzdCBzaG91bGQgaGF2ZSBhIHByb2Nlc3NvcgorICAgICMgPiBtNjgwMDApLiAgVGhlIHN5c3RlbSBuYW1lIHJhbmdlcyBmcm9tICJNaU5UIiBvdmVyICJGcmVlTWlOVCIKKyAgICAjIHRvIHRoZSBsb3dlcmNhc2UgdmVyc2lvbiAibWludCIgKG9yICJmcmVlbWludCIpLiAgRmluYWxseQorICAgICMgdGhlIHN5c3RlbSBuYW1lICJUT1MiIGRlbm90ZXMgYSBzeXN0ZW0gd2hpY2ggaXMgYWN0dWFsbHkgbm90CisgICAgIyBNaU5ULiAgQnV0IE1pTlQgaXMgZG93bndhcmQgY29tcGF0aWJsZSB0byBUT1MsIHNvIHRoaXMgc2hvdWxkCisgICAgIyBiZSBubyBwcm9ibGVtLgorICAgIGF0YXJpc3RbZV06Kk1pTlQ6KjoqIHwgYXRhcmlzdFtlXToqbWludDoqOiogfCBhdGFyaXN0W2VdOipUT1M6KjoqKQorCUdVRVNTPW02OGstYXRhcmktbWludCRVTkFNRV9SRUxFQVNFCisJOzsKKyAgICBhdGFyaSo6Kk1pTlQ6KjoqIHwgYXRhcmkqOiptaW50Oio6KiB8IGF0YXJpc3RbZV06KlRPUzoqOiopCisJR1VFU1M9bTY4ay1hdGFyaS1taW50JFVOQU1FX1JFTEVBU0UKKwk7OworICAgICpmYWxjb24qOipNaU5UOio6KiB8ICpmYWxjb24qOiptaW50Oio6KiB8ICpmYWxjb24qOipUT1M6KjoqKQorCUdVRVNTPW02OGstYXRhcmktbWludCRVTkFNRV9SRUxFQVNFCisJOzsKKyAgICBtaWxhbio6Kk1pTlQ6KjoqIHwgbWlsYW4qOiptaW50Oio6KiB8ICptaWxhbio6KlRPUzoqOiopCisJR1VFU1M9bTY4ay1taWxhbi1taW50JFVOQU1FX1JFTEVBU0UKKwk7OworICAgIGhhZGVzKjoqTWlOVDoqOiogfCBoYWRlcyo6Km1pbnQ6KjoqIHwgKmhhZGVzKjoqVE9TOio6KikKKwlHVUVTUz1tNjhrLWhhZGVzLW1pbnQkVU5BTUVfUkVMRUFTRQorCTs7CisgICAgKjoqTWlOVDoqOiogfCAqOiptaW50Oio6KiB8ICo6KlRPUzoqOiopCisJR1VFU1M9bTY4ay11bmtub3duLW1pbnQkVU5BTUVfUkVMRUFTRQorCTs7CisgICAgbTY4azptYWNodGVuOio6KikKKwlHVUVTUz1tNjhrLWFwcGxlLW1hY2h0ZW4kVU5BTUVfUkVMRUFTRQorCTs7CisgICAgcG93ZXJwYzptYWNodGVuOio6KikKKwlHVUVTUz1wb3dlcnBjLWFwcGxlLW1hY2h0ZW4kVU5BTUVfUkVMRUFTRQorCTs7CisgICAgUklTQyo6TWFjaDoqOiopCisJR1VFU1M9bWlwcy1kZWMtbWFjaF9ic2Q0LjMKKwk7OworICAgIFJJU0MqOlVMVFJJWDoqOiopCisJR1VFU1M9bWlwcy1kZWMtdWx0cml4JFVOQU1FX1JFTEVBU0UKKwk7OworICAgIFZBWCo6VUxUUklYKjoqOiopCisJR1VFU1M9dmF4LWRlYy11bHRyaXgkVU5BTUVfUkVMRUFTRQorCTs7CisgICAgMjAyMDpDTElYOio6KiB8IDI0MzA6Q0xJWDoqOiopCisJR1VFU1M9Y2xpcHBlci1pbnRlcmdyYXBoLWNsaXgkVU5BTUVfUkVMRUFTRQorCTs7CisgICAgbWlwczoqOio6VU1JUFMgfCBtaXBzOio6KjpSSVNDb3MpCisJc2V0X2NjX2Zvcl9idWlsZAorCXNlZCAncy9eCS8vJyA8PCBFT0YgPiAiJGR1bW15LmMiCisjaWZkZWYgX19jcGx1c3BsdXMKKyNpbmNsdWRlIDxzdGRpby5oPiAgLyogZm9yIHByaW50ZigpIHByb3RvdHlwZSAqLworCWludCBtYWluIChpbnQgYXJnYywgY2hhciAqYXJndltdKSB7CisjZWxzZQorCWludCBtYWluIChhcmdjLCBhcmd2KSBpbnQgYXJnYzsgY2hhciAqYXJndltdOyB7CisjZW5kaWYKKwkjaWYgZGVmaW5lZCAoaG9zdF9taXBzKSAmJiBkZWZpbmVkIChNSVBTRUIpCisJI2lmIGRlZmluZWQgKFNZU1RZUEVfU1lTVikKKwkgIHByaW50ZiAoIm1pcHMtbWlwcy1yaXNjb3Mlc3N5c3ZcXG4iLCBhcmd2WzFdKTsgZXhpdCAoMCk7CisJI2VuZGlmCisJI2lmIGRlZmluZWQgKFNZU1RZUEVfU1ZSNCkKKwkgIHByaW50ZiAoIm1pcHMtbWlwcy1yaXNjb3Mlc3N2cjRcXG4iLCBhcmd2WzFdKTsgZXhpdCAoMCk7CisJI2VuZGlmCisJI2lmIGRlZmluZWQgKFNZU1RZUEVfQlNENDMpIHx8IGRlZmluZWQoU1lTVFlQRV9CU0QpCisJICBwcmludGYgKCJtaXBzLW1pcHMtcmlzY29zJXNic2RcXG4iLCBhcmd2WzFdKTsgZXhpdCAoMCk7CisJI2VuZGlmCisJI2VuZGlmCisJICBleGl0ICgtMSk7CisJfQorRU9GCisJJENDX0ZPUl9CVUlMRCAtbyAiJGR1bW15IiAiJGR1bW15LmMiICYmCisJICBkdW1teWFyZz1gZWNobyAiJFVOQU1FX1JFTEVBU0UiIHwgc2VkIC1uICdzL1woWzAtOV0qXCkuKi9cMS9wJ2AgJiYKKwkgIFNZU1RFTV9OQU1FPWAiJGR1bW15IiAiJGR1bW15YXJnImAgJiYKKwkgICAgeyBlY2hvICIkU1lTVEVNX05BTUUiOyBleGl0OyB9CisJR1VFU1M9bWlwcy1taXBzLXJpc2NvcyRVTkFNRV9SRUxFQVNFCisJOzsKKyAgICBNb3Rvcm9sYTpQb3dlck1BWF9PUzoqOiopCisJR1VFU1M9cG93ZXJwYy1tb3Rvcm9sYS1wb3dlcm1heAorCTs7CisgICAgTW90b3JvbGE6Kjo0LjM6UEw4LSopCisJR1VFU1M9cG93ZXJwYy1oYXJyaXMtcG93ZXJtYXgKKwk7OworICAgIE5pZ2h0X0hhd2s6KjoqOlBvd2VyTUFYX09TIHwgU3luZXJneTpQb3dlck1BWF9PUzoqOiopCisJR1VFU1M9cG93ZXJwYy1oYXJyaXMtcG93ZXJtYXgKKwk7OworICAgIE5pZ2h0X0hhd2s6UG93ZXJfVU5JWDoqOiopCisJR1VFU1M9cG93ZXJwYy1oYXJyaXMtcG93ZXJ1bml4CisJOzsKKyAgICBtODhrOkNYL1VYOjcqOiopCisJR1VFU1M9bTg4ay1oYXJyaXMtY3h1eDcKKwk7OworICAgIG04OGs6Kjo0KjpSNCopCisJR1VFU1M9bTg4ay1tb3Rvcm9sYS1zeXN2NAorCTs7CisgICAgbTg4azoqOjMqOlIzKikKKwlHVUVTUz1tODhrLW1vdG9yb2xhLXN5c3YzCisJOzsKKyAgICBBVmlpT046ZGd1eDoqOiopCisJIyBERy9VWCByZXR1cm5zIEFWaWlPTiBmb3IgYWxsIGFyY2hpdGVjdHVyZXMKKwlVTkFNRV9QUk9DRVNTT1I9YC91c3IvYmluL3VuYW1lIC1wYAorCWlmIHRlc3QgIiRVTkFNRV9QUk9DRVNTT1IiID0gbWM4ODEwMCB8fCB0ZXN0ICIkVU5BTUVfUFJPQ0VTU09SIiA9IG1jODgxMTAKKwl0aGVuCisJICAgIGlmIHRlc3QgIiRUQVJHRVRfQklOQVJZX0lOVEVSRkFDRSJ4ID0gbTg4a2RndXhlbGZ4IHx8IFwKKwkgICAgICAgdGVzdCAiJFRBUkdFVF9CSU5BUllfSU5URVJGQUNFInggPSB4CisJICAgIHRoZW4KKwkJR1VFU1M9bTg4ay1kZy1kZ3V4JFVOQU1FX1JFTEVBU0UKKwkgICAgZWxzZQorCQlHVUVTUz1tODhrLWRnLWRndXhiY3MkVU5BTUVfUkVMRUFTRQorCSAgICBmaQorCWVsc2UKKwkgICAgR1VFU1M9aTU4Ni1kZy1kZ3V4JFVOQU1FX1JFTEVBU0UKKwlmaQorCTs7CisgICAgTTg4KjpEb2xwaGluT1M6KjoqKQkjIERvbHBoaW5PUyAoU1ZSMykKKwlHVUVTUz1tODhrLWRvbHBoaW4tc3lzdjMKKwk7OworICAgIE04OCo6KjpSMyo6KikKKwkjIERlbHRhIDg4ayBzeXN0ZW0gcnVubmluZyBTVlIzCisJR1VFU1M9bTg4ay1tb3Rvcm9sYS1zeXN2MworCTs7CisgICAgWEQ4OCo6KjoqOiopICMgVGVrdHJvbml4IFhEODggc3lzdGVtIHJ1bm5pbmcgVVRla1YgKFNWUjMpCisJR1VFU1M9bTg4ay10ZWt0cm9uaXgtc3lzdjMKKwk7OworICAgIFRlazQzWzAtOV1bMC05XTpVVGVrOio6KikgIyBUZWt0cm9uaXggNDMwMCBzeXN0ZW0gcnVubmluZyBVVGVrIChCU0QpCisJR1VFU1M9bTY4ay10ZWt0cm9uaXgtYnNkCisJOzsKKyAgICAqOklSSVgqOio6KikKKwlJUklYX1JFTD1gZWNobyAiJFVOQU1FX1JFTEVBU0UiIHwgc2VkIC1lICdzLy0vXy9nJ2AKKwlHVUVTUz1taXBzLXNnaS1pcml4JElSSVhfUkVMCisJOzsKKyAgICA/Pz8/Pz8/PzpBSVg/OlsxMl0uMToyKSAgICMgQUlYIDIuMi4xIG9yIEFJWCAyLjEuMSBpcyBSVC9QQyBBSVguCisJR1VFU1M9cm9tcC1pYm0tYWl4ICAgICMgdW5hbWUgLW0gZ2l2ZXMgYW4gOCBoZXgtY29kZSBDUFUgaWQKKwk7OyAgICAgICAgICAgICAgICAgICAgIyBOb3RlIHRoYXQ6IGVjaG8gIidgdW5hbWUgLXNgJyIgZ2l2ZXMgJ0FJWCAnCisgICAgaSo4NjpBSVg6KjoqKQorCUdVRVNTPWkzODYtaWJtLWFpeAorCTs7CisgICAgaWE2NDpBSVg6KjoqKQorCWlmIHRlc3QgLXggL3Vzci9iaW4vb3NsZXZlbCA7IHRoZW4KKwkJSUJNX1JFVj1gL3Vzci9iaW4vb3NsZXZlbGAKKwllbHNlCisJCUlCTV9SRVY9JFVOQU1FX1ZFUlNJT04uJFVOQU1FX1JFTEVBU0UKKwlmaQorCUdVRVNTPSRVTkFNRV9NQUNISU5FLWlibS1haXgkSUJNX1JFVgorCTs7CisgICAgKjpBSVg6MjozKQorCWlmIGdyZXAgYm9zMzI1IC91c3IvaW5jbHVkZS9zdGRpby5oID4vZGV2L251bGwgMj4mMTsgdGhlbgorCQlzZXRfY2NfZm9yX2J1aWxkCisJCXNlZCAncy9eCQkvLycgPDwgRU9GID4gIiRkdW1teS5jIgorCQkjaW5jbHVkZSA8c3lzL3N5c3RlbWNmZy5oPgorCisJCW1haW4oKQorCQkJeworCQkJaWYgKCFfX3Bvd2VyX3BjKCkpCisJCQkJZXhpdCgxKTsKKwkJCXB1dHMoInBvd2VycGMtaWJtLWFpeDMuMi41Iik7CisJCQlleGl0KDApOworCQkJfQorRU9GCisJCWlmICRDQ19GT1JfQlVJTEQgLW8gIiRkdW1teSIgIiRkdW1teS5jIiAmJiBTWVNURU1fTkFNRT1gIiRkdW1teSJgCisJCXRoZW4KKwkJCUdVRVNTPSRTWVNURU1fTkFNRQorCQllbHNlCisJCQlHVUVTUz1yczYwMDAtaWJtLWFpeDMuMi41CisJCWZpCisJZWxpZiBncmVwIGJvczMyNCAvdXNyL2luY2x1ZGUvc3RkaW8uaCA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKwkJR1VFU1M9cnM2MDAwLWlibS1haXgzLjIuNAorCWVsc2UKKwkJR1VFU1M9cnM2MDAwLWlibS1haXgzLjIKKwlmaQorCTs7CisgICAgKjpBSVg6KjpbNDU2N10pCisJSUJNX0NQVV9JRD1gL3Vzci9zYmluL2xzZGV2IC1DIC1jIHByb2Nlc3NvciAtUyBhdmFpbGFibGUgfCBzZWQgMXEgfCBhd2sgJ3sgcHJpbnQgJDEgfSdgCisJaWYgL3Vzci9zYmluL2xzYXR0ciAtRWwgIiRJQk1fQ1BVX0lEIiB8IGdyZXAgJyBQT1dFUicgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisJCUlCTV9BUkNIPXJzNjAwMAorCWVsc2UKKwkJSUJNX0FSQ0g9cG93ZXJwYworCWZpCisJaWYgdGVzdCAteCAvdXNyL2Jpbi9sc2xwcCA7IHRoZW4KKwkJSUJNX1JFVj1gL3Vzci9iaW4vbHNscHAgLUxxYyBib3MucnRlLmxpYmMgfCBcCisJCQkgICBhd2sgLUY6ICd7IHByaW50ICQzIH0nIHwgc2VkIHMvWzAtOV0qJC8wL2AKKwllbHNlCisJCUlCTV9SRVY9JFVOQU1FX1ZFUlNJT04uJFVOQU1FX1JFTEVBU0UKKwlmaQorCUdVRVNTPSRJQk1fQVJDSC1pYm0tYWl4JElCTV9SRVYKKwk7OworICAgICo6QUlYOio6KikKKwlHVUVTUz1yczYwMDAtaWJtLWFpeAorCTs7CisgICAgaWJtcnQ6NC40QlNEOip8cm9tcC1pYm06NC40QlNEOiopCisJR1VFU1M9cm9tcC1pYm0tYnNkNC40CisJOzsKKyAgICBpYm1ydDoqQlNEOip8cm9tcC1pYm06QlNEOiopICAgICAgICAgICAgIyBjb3ZlcnMgUlQvUEMgQlNEIGFuZAorCUdVRVNTPXJvbXAtaWJtLWJzZCRVTkFNRV9SRUxFQVNFICAgICMgNC4zIHdpdGggdW5hbWUgYWRkZWQgdG8KKwk7OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIHJlcG9ydDogcm9tcC1pYm0gQlNEIDQuMworICAgICo6Qk9TWDoqOiopCisJR1VFU1M9cnM2MDAwLWJ1bGwtYm9zeAorCTs7CisgICAgRFBYLzI/MDA6Qi5PLlMuOio6KikKKwlHVUVTUz1tNjhrLWJ1bGwtc3lzdjMKKwk7OworICAgIDkwMDAvWzM0XT8/OjQuM2JzZDoxLio6KikKKwlHVUVTUz1tNjhrLWhwLWJzZAorCTs7CisgICAgaHAzMDA6NC40QlNEOio6KiB8IDkwMDAvWzM0XT8/OjQuM2JzZDoyLio6KikKKwlHVUVTUz1tNjhrLWhwLWJzZDQuNAorCTs7CisgICAgOTAwMC9bMzQ2NzhdPz86SFAtVVg6KjoqKQorCUhQVVhfUkVWPWBlY2hvICIkVU5BTUVfUkVMRUFTRSIgfCBzZWQgLWUgJ3MvW14uXSouWzBCXSovLydgCisJY2FzZSAkVU5BTUVfTUFDSElORSBpbgorCSAgICA5MDAwLzMxPykgICAgICAgICAgICBIUF9BUkNIPW02ODAwMCA7OworCSAgICA5MDAwL1szNF0/PykgICAgICAgICBIUF9BUkNIPW02OGsgOzsKKwkgICAgOTAwMC9bNjc4XVswLTldWzAtOV0pCisJCWlmIHRlc3QgLXggL3Vzci9iaW4vZ2V0Y29uZjsgdGhlbgorCQkgICAgc2NfY3B1X3ZlcnNpb249YC91c3IvYmluL2dldGNvbmYgU0NfQ1BVX1ZFUlNJT04gMj4vZGV2L251bGxgCisJCSAgICBzY19rZXJuZWxfYml0cz1gL3Vzci9iaW4vZ2V0Y29uZiBTQ19LRVJORUxfQklUUyAyPi9kZXYvbnVsbGAKKwkJICAgIGNhc2UgJHNjX2NwdV92ZXJzaW9uIGluCisJCSAgICAgIDUyMykgSFBfQVJDSD1ocHBhMS4wIDs7ICMgQ1BVX1BBX1JJU0MxXzAKKwkJICAgICAgNTI4KSBIUF9BUkNIPWhwcGExLjEgOzsgIyBDUFVfUEFfUklTQzFfMQorCQkgICAgICA1MzIpICAgICAgICAgICAgICAgICAgICAgICMgQ1BVX1BBX1JJU0MyXzAKKwkJCWNhc2UgJHNjX2tlcm5lbF9iaXRzIGluCisJCQkgIDMyKSBIUF9BUkNIPWhwcGEyLjBuIDs7CisJCQkgIDY0KSBIUF9BUkNIPWhwcGEyLjB3IDs7CisJCQkgICcnKSBIUF9BUkNIPWhwcGEyLjAgOzsgICAjIEhQLVVYIDEwLjIwCisJCQllc2FjIDs7CisJCSAgICBlc2FjCisJCWZpCisJCWlmIHRlc3QgIiRIUF9BUkNIIiA9ICIiOyB0aGVuCisJCSAgICBzZXRfY2NfZm9yX2J1aWxkCisJCSAgICBzZWQgJ3MvXgkJLy8nIDw8IEVPRiA+ICIkZHVtbXkuYyIKKworCQkjZGVmaW5lIF9IUFVYX1NPVVJDRQorCQkjaW5jbHVkZSA8c3RkbGliLmg+CisJCSNpbmNsdWRlIDx1bmlzdGQuaD4KKworCQlpbnQgbWFpbiAoKQorCQl7CisJCSNpZiBkZWZpbmVkKF9TQ19LRVJORUxfQklUUykKKwkJICAgIGxvbmcgYml0cyA9IHN5c2NvbmYoX1NDX0tFUk5FTF9CSVRTKTsKKwkJI2VuZGlmCisJCSAgICBsb25nIGNwdSAgPSBzeXNjb25mIChfU0NfQ1BVX1ZFUlNJT04pOworCisJCSAgICBzd2l0Y2ggKGNwdSkKKwkJCXsKKwkJCWNhc2UgQ1BVX1BBX1JJU0MxXzA6IHB1dHMgKCJocHBhMS4wIik7IGJyZWFrOworCQkJY2FzZSBDUFVfUEFfUklTQzFfMTogcHV0cyAoImhwcGExLjEiKTsgYnJlYWs7CisJCQljYXNlIENQVV9QQV9SSVNDMl8wOgorCQkjaWYgZGVmaW5lZChfU0NfS0VSTkVMX0JJVFMpCisJCQkgICAgc3dpdGNoIChiaXRzKQorCQkJCXsKKwkJCQljYXNlIDY0OiBwdXRzICgiaHBwYTIuMHciKTsgYnJlYWs7CisJCQkJY2FzZSAzMjogcHV0cyAoImhwcGEyLjBuIik7IGJyZWFrOworCQkJCWRlZmF1bHQ6IHB1dHMgKCJocHBhMi4wIik7IGJyZWFrOworCQkJCX0gYnJlYWs7CisJCSNlbHNlICAvKiAhZGVmaW5lZChfU0NfS0VSTkVMX0JJVFMpICovCisJCQkgICAgcHV0cyAoImhwcGEyLjAiKTsgYnJlYWs7CisJCSNlbmRpZgorCQkJZGVmYXVsdDogcHV0cyAoImhwcGExLjAiKTsgYnJlYWs7CisJCQl9CisJCSAgICBleGl0ICgwKTsKKwkJfQorRU9GCisJCSAgICAoQ0NPUFRTPSIiICRDQ19GT1JfQlVJTEQgLW8gIiRkdW1teSIgIiRkdW1teS5jIiAyPi9kZXYvbnVsbCkgJiYgSFBfQVJDSD1gIiRkdW1teSJgCisJCSAgICB0ZXN0IC16ICIkSFBfQVJDSCIgJiYgSFBfQVJDSD1ocHBhCisJCWZpIDs7CisJZXNhYworCWlmIHRlc3QgIiRIUF9BUkNIIiA9IGhwcGEyLjB3CisJdGhlbgorCSAgICBzZXRfY2NfZm9yX2J1aWxkCisKKwkgICAgIyBocHBhMi4wdy1ocC1ocHV4KiBoYXMgYSA2NC1iaXQga2VybmVsIGFuZCBhIGNvbXBpbGVyIGdlbmVyYXRpbmcKKwkgICAgIyAzMi1iaXQgY29kZS4gIGhwcGE2NC1ocC1ocHV4KiBoYXMgdGhlIHNhbWUga2VybmVsIGFuZCBhIGNvbXBpbGVyCisJICAgICMgZ2VuZXJhdGluZyA2NC1iaXQgY29kZS4gIEdOVSBhbmQgSFAgdXNlIGRpZmZlcmVudCBub21lbmNsYXR1cmU6CisJICAgICMKKwkgICAgIyAkIENDX0ZPUl9CVUlMRD1jYyAuL2NvbmZpZy5ndWVzcworCSAgICAjID0+IGhwcGEyLjB3LWhwLWhwdXgxMS4yMworCSAgICAjICQgQ0NfRk9SX0JVSUxEPSJjYyArREEyLjB3IiAuL2NvbmZpZy5ndWVzcworCSAgICAjID0+IGhwcGE2NC1ocC1ocHV4MTEuMjMKKworCSAgICBpZiBlY2hvIF9fTFA2NF9fIHwgKENDT1BUUz0iIiAkQ0NfRk9SX0JVSUxEIC1FIC0gMj4vZGV2L251bGwpIHwKKwkJZ3JlcCAtcSBfX0xQNjRfXworCSAgICB0aGVuCisJCUhQX0FSQ0g9aHBwYTIuMHcKKwkgICAgZWxzZQorCQlIUF9BUkNIPWhwcGE2NAorCSAgICBmaQorCWZpCisJR1VFU1M9JEhQX0FSQ0gtaHAtaHB1eCRIUFVYX1JFVgorCTs7CisgICAgaWE2NDpIUC1VWDoqOiopCisJSFBVWF9SRVY9YGVjaG8gIiRVTkFNRV9SRUxFQVNFIiB8IHNlZCAtZSAncy9bXi5dKi5bMEJdKi8vJ2AKKwlHVUVTUz1pYTY0LWhwLWhwdXgkSFBVWF9SRVYKKwk7OworICAgIDMwNTAqOkhJLVVYOio6KikKKwlzZXRfY2NfZm9yX2J1aWxkCisJc2VkICdzL14JLy8nIDw8IEVPRiA+ICIkZHVtbXkuYyIKKwkjaW5jbHVkZSA8dW5pc3RkLmg+CisJaW50CisJbWFpbiAoKQorCXsKKwkgIGxvbmcgY3B1ID0gc3lzY29uZiAoX1NDX0NQVV9WRVJTSU9OKTsKKwkgIC8qIFRoZSBvcmRlciBtYXR0ZXJzLCBiZWNhdXNlIENQVV9JU19IUF9NQzY4SyBlcnJvbmVvdXNseSByZXR1cm5zCisJICAgICB0cnVlIGZvciBDUFVfUEFfUklTQzFfMC4gIENQVV9JU19QQV9SSVNDIHJldHVybnMgY29ycmVjdAorCSAgICAgcmVzdWx0cywgaG93ZXZlci4gICovCisJICBpZiAoQ1BVX0lTX1BBX1JJU0MgKGNwdSkpCisJICAgIHsKKwkgICAgICBzd2l0Y2ggKGNwdSkKKwkJeworCQkgIGNhc2UgQ1BVX1BBX1JJU0MxXzA6IHB1dHMgKCJocHBhMS4wLWhpdGFjaGktaGl1eHdlMiIpOyBicmVhazsKKwkJICBjYXNlIENQVV9QQV9SSVNDMV8xOiBwdXRzICgiaHBwYTEuMS1oaXRhY2hpLWhpdXh3ZTIiKTsgYnJlYWs7CisJCSAgY2FzZSBDUFVfUEFfUklTQzJfMDogcHV0cyAoImhwcGEyLjAtaGl0YWNoaS1oaXV4d2UyIik7IGJyZWFrOworCQkgIGRlZmF1bHQ6IHB1dHMgKCJocHBhLWhpdGFjaGktaGl1eHdlMiIpOyBicmVhazsKKwkJfQorCSAgICB9CisJICBlbHNlIGlmIChDUFVfSVNfSFBfTUM2OEsgKGNwdSkpCisJICAgIHB1dHMgKCJtNjhrLWhpdGFjaGktaGl1eHdlMiIpOworCSAgZWxzZSBwdXRzICgidW5rbm93bi1oaXRhY2hpLWhpdXh3ZTIiKTsKKwkgIGV4aXQgKDApOworCX0KK0VPRgorCSRDQ19GT1JfQlVJTEQgLW8gIiRkdW1teSIgIiRkdW1teS5jIiAmJiBTWVNURU1fTkFNRT1gIiRkdW1teSJgICYmCisJCXsgZWNobyAiJFNZU1RFTV9OQU1FIjsgZXhpdDsgfQorCUdVRVNTPXVua25vd24taGl0YWNoaS1oaXV4d2UyCisJOzsKKyAgICA5MDAwLzc/Pzo0LjNic2Q6KjoqIHwgOTAwMC84P1s3OV06NC4zYnNkOio6KikKKwlHVUVTUz1ocHBhMS4xLWhwLWJzZAorCTs7CisgICAgOTAwMC84Pz86NC4zYnNkOio6KikKKwlHVUVTUz1ocHBhMS4wLWhwLWJzZAorCTs7CisgICAgKjk/Pyo6TVBFL2lYOio6KiB8ICozMDAwKjpNUEUvaVg6KjoqKQorCUdVRVNTPWhwcGExLjAtaHAtbXBlaXgKKwk7OworICAgIGhwNz8/Ok9TRjE6KjoqIHwgaHA4P1s3OV06T1NGMToqOiopCisJR1VFU1M9aHBwYTEuMS1ocC1vc2YKKwk7OworICAgIGhwOD8/Ok9TRjE6KjoqKQorCUdVRVNTPWhwcGExLjAtaHAtb3NmCisJOzsKKyAgICBpKjg2Ok9TRjE6KjoqKQorCWlmIHRlc3QgLXggL3Vzci9zYmluL3N5c3ZlcnNpb24gOyB0aGVuCisJICAgIEdVRVNTPSRVTkFNRV9NQUNISU5FLXVua25vd24tb3NmMW1rCisJZWxzZQorCSAgICBHVUVTUz0kVU5BTUVfTUFDSElORS11bmtub3duLW9zZjEKKwlmaQorCTs7CisgICAgcGFyaXNjKjpMaXRlcyo6KjoqKQorCUdVRVNTPWhwcGExLjEtaHAtbGl0ZXMKKwk7OworICAgIEMxKjpDb252ZXhPUzoqOiogfCBjb252ZXg6Q29udmV4T1M6QzEqOiopCisJR1VFU1M9YzEtY29udmV4LWJzZAorCTs7CisgICAgQzIqOkNvbnZleE9TOio6KiB8IGNvbnZleDpDb252ZXhPUzpDMio6KikKKwlpZiBnZXRzeXNpbmZvIC1mIHNjYWxhcl9hY2MKKwl0aGVuIGVjaG8gYzMyLWNvbnZleC1ic2QKKwllbHNlIGVjaG8gYzItY29udmV4LWJzZAorCWZpCisJZXhpdCA7OworICAgIEMzNCo6Q29udmV4T1M6KjoqIHwgY29udmV4OkNvbnZleE9TOkMzNCo6KikKKwlHVUVTUz1jMzQtY29udmV4LWJzZAorCTs7CisgICAgQzM4KjpDb252ZXhPUzoqOiogfCBjb252ZXg6Q29udmV4T1M6QzM4KjoqKQorCUdVRVNTPWMzOC1jb252ZXgtYnNkCisJOzsKKyAgICBDNCo6Q29udmV4T1M6KjoqIHwgY29udmV4OkNvbnZleE9TOkM0KjoqKQorCUdVRVNTPWM0LWNvbnZleC1ic2QKKwk7OworICAgIENSQVkqWS1NUDoqOio6KikKKwlDUkFZX1JFTD1gZWNobyAiJFVOQU1FX1JFTEVBU0UiIHwgc2VkIC1lICdzL1wuW14uXSokLy5YLydgCisJR1VFU1M9eW1wLWNyYXktdW5pY29zJENSQVlfUkVMCisJOzsKKyAgICBDUkFZKltBLVpdOTA6KjoqOiopCisJZWNobyAiJFVOQU1FX01BQ0hJTkUiLWNyYXktdW5pY29zIiRVTkFNRV9SRUxFQVNFIiBcCisJfCBzZWQgLWUgJ3MvQ1JBWS4qXChbQS1aXTkwXCkvXDEvJyBcCisJICAgICAgLWUgeS9BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWi9hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ei8gXAorCSAgICAgIC1lICdzL1wuW14uXSokLy5YLycKKwlleGl0IDs7CisgICAgQ1JBWSpUUzoqOio6KikKKwlDUkFZX1JFTD1gZWNobyAiJFVOQU1FX1JFTEVBU0UiIHwgc2VkIC1lICdzL1wuW14uXSokLy5YLydgCisJR1VFU1M9dDkwLWNyYXktdW5pY29zJENSQVlfUkVMCisJOzsKKyAgICBDUkFZKlQzRToqOio6KikKKwlDUkFZX1JFTD1gZWNobyAiJFVOQU1FX1JFTEVBU0UiIHwgc2VkIC1lICdzL1wuW14uXSokLy5YLydgCisJR1VFU1M9YWxwaGFldjUtY3JheS11bmljb3NtayRDUkFZX1JFTAorCTs7CisgICAgQ1JBWSpTVjE6KjoqOiopCisJQ1JBWV9SRUw9YGVjaG8gIiRVTkFNRV9SRUxFQVNFIiB8IHNlZCAtZSAncy9cLlteLl0qJC8uWC8nYAorCUdVRVNTPXN2MS1jcmF5LXVuaWNvcyRDUkFZX1JFTAorCTs7CisgICAgKjpVTklDT1MvbXA6KjoqKQorCUNSQVlfUkVMPWBlY2hvICIkVU5BTUVfUkVMRUFTRSIgfCBzZWQgLWUgJ3MvXC5bXi5dKiQvLlgvJ2AKKwlHVUVTUz1jcmF5bnYtY3JheS11bmljb3NtcCRDUkFZX1JFTAorCTs7CisgICAgRjMwWzAxXTpVTklYX1N5c3RlbV9WOio6KiB8IEY3MDA6VU5JWF9TeXN0ZW1fVjoqOiopCisJRlVKSVRTVV9QUk9DPWB1bmFtZSAtbSB8IHRyIEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaIGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6YAorCUZVSklUU1VfU1lTPWB1bmFtZSAtcCB8IHRyIEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaIGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6IHwgc2VkIC1lICdzL1wvLy8nYAorCUZVSklUU1VfUkVMPWBlY2hvICIkVU5BTUVfUkVMRUFTRSIgfCBzZWQgLWUgJ3MvIC9fLydgCisJR1VFU1M9JHtGVUpJVFNVX1BST0N9LWZ1aml0c3UtJHtGVUpJVFNVX1NZU30ke0ZVSklUU1VfUkVMfQorCTs7CisgICAgNTAwMDpVTklYX1N5c3RlbV9WOjQuKjoqKQorCUZVSklUU1VfU1lTPWB1bmFtZSAtcCB8IHRyIEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaIGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6IHwgc2VkIC1lICdzL1wvLy8nYAorCUZVSklUU1VfUkVMPWBlY2hvICIkVU5BTUVfUkVMRUFTRSIgfCB0ciBBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWiBhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eiB8IHNlZCAtZSAncy8gL18vJ2AKKwlHVUVTUz1zcGFyYy1mdWppdHN1LSR7RlVKSVRTVV9TWVN9JHtGVUpJVFNVX1JFTH0KKwk7OworICAgIGkqODY6QlNELzM4NjoqOiogfCBpKjg2OkJTRC9PUzoqOiogfCAqOkFzY2VuZFwgRW1iZWRkZWQvT1M6KjoqKQorCUdVRVNTPSRVTkFNRV9NQUNISU5FLXBjLWJzZGkkVU5BTUVfUkVMRUFTRQorCTs7CisgICAgc3BhcmMqOkJTRC9PUzoqOiopCisJR1VFU1M9c3BhcmMtdW5rbm93bi1ic2RpJFVOQU1FX1JFTEVBU0UKKwk7OworICAgICo6QlNEL09TOio6KikKKwlHVUVTUz0kVU5BTUVfTUFDSElORS11bmtub3duLWJzZGkkVU5BTUVfUkVMRUFTRQorCTs7CisgICAgYXJtOkZyZWVCU0Q6KjoqKQorCVVOQU1FX1BST0NFU1NPUj1gdW5hbWUgLXBgCisJc2V0X2NjX2Zvcl9idWlsZAorCWlmIGVjaG8gX19BUk1fUENTX1ZGUCB8ICRDQ19GT1JfQlVJTEQgLUUgLSAyPi9kZXYvbnVsbCBcCisJICAgIHwgZ3JlcCAtcSBfX0FSTV9QQ1NfVkZQCisJdGhlbgorCSAgICBGUkVFQlNEX1JFTD1gZWNobyAiJFVOQU1FX1JFTEVBU0UiIHwgc2VkIC1lICdzL1stKF0uKi8vJ2AKKwkgICAgR1VFU1M9JFVOQU1FX1BST0NFU1NPUi11bmtub3duLWZyZWVic2QkRlJFRUJTRF9SRUwtZ251ZWFiaQorCWVsc2UKKwkgICAgRlJFRUJTRF9SRUw9YGVjaG8gIiRVTkFNRV9SRUxFQVNFIiB8IHNlZCAtZSAncy9bLShdLiovLydgCisJICAgIEdVRVNTPSRVTkFNRV9QUk9DRVNTT1ItdW5rbm93bi1mcmVlYnNkJEZSRUVCU0RfUkVMLWdudWVhYmloZgorCWZpCisJOzsKKyAgICAqOkZyZWVCU0Q6KjoqKQorCVVOQU1FX1BST0NFU1NPUj1gL3Vzci9iaW4vdW5hbWUgLXBgCisJY2FzZSAkVU5BTUVfUFJPQ0VTU09SIGluCisJICAgIGFtZDY0KQorCQlVTkFNRV9QUk9DRVNTT1I9eDg2XzY0IDs7CisJICAgIGkzODYpCisJCVVOQU1FX1BST0NFU1NPUj1pNTg2IDs7CisJZXNhYworCUZSRUVCU0RfUkVMPWBlY2hvICIkVU5BTUVfUkVMRUFTRSIgfCBzZWQgLWUgJ3MvWy0oXS4qLy8nYAorCUdVRVNTPSRVTkFNRV9QUk9DRVNTT1ItdW5rbm93bi1mcmVlYnNkJEZSRUVCU0RfUkVMCisJOzsKKyAgICBpKjpDWUdXSU4qOiopCisJR1VFU1M9JFVOQU1FX01BQ0hJTkUtcGMtY3lnd2luCisJOzsKKyAgICAqOk1JTkdXNjQqOiopCisJR1VFU1M9JFVOQU1FX01BQ0hJTkUtcGMtbWluZ3c2NAorCTs7CisgICAgKjpNSU5HVyo6KikKKwlHVUVTUz0kVU5BTUVfTUFDSElORS1wYy1taW5ndzMyCisJOzsKKyAgICAqOk1TWVMqOiopCisJR1VFU1M9JFVOQU1FX01BQ0hJTkUtcGMtbXN5cworCTs7CisgICAgaSo6UFcqOiopCisJR1VFU1M9JFVOQU1FX01BQ0hJTkUtcGMtcHczMgorCTs7CisgICAgKjpTZXJlbml0eU9TOio6KikKKyAgICAgICAgR1VFU1M9JFVOQU1FX01BQ0hJTkUtcGMtc2VyZW5pdHkKKyAgICAgICAgOzsKKyAgICAqOkludGVyaXgqOiopCisJY2FzZSAkVU5BTUVfTUFDSElORSBpbgorCSAgICB4ODYpCisJCUdVRVNTPWk1ODYtcGMtaW50ZXJpeCRVTkFNRV9SRUxFQVNFCisJCTs7CisJICAgIGF1dGhlbnRpY2FtZCB8IGdlbnVpbmVpbnRlbCB8IEVNNjRUKQorCQlHVUVTUz14ODZfNjQtdW5rbm93bi1pbnRlcml4JFVOQU1FX1JFTEVBU0UKKwkJOzsKKwkgICAgSUE2NCkKKwkJR1VFU1M9aWE2NC11bmtub3duLWludGVyaXgkVU5BTUVfUkVMRUFTRQorCQk7OworCWVzYWMgOzsKKyAgICBpKjpVV0lOKjoqKQorCUdVRVNTPSRVTkFNRV9NQUNISU5FLXBjLXV3aW4KKwk7OworICAgIGFtZDY0OkNZR1dJTio6KjoqIHwgeDg2XzY0OkNZR1dJTio6KjoqKQorCUdVRVNTPXg4Nl82NC1wYy1jeWd3aW4KKwk7OworICAgIHByZXAqOlN1bk9TOjUuKjoqKQorCVNVTl9SRUw9YGVjaG8gIiRVTkFNRV9SRUxFQVNFIiB8IHNlZCAtZSAncy9bXi5dKi8vJ2AKKwlHVUVTUz1wb3dlcnBjbGUtdW5rbm93bi1zb2xhcmlzMiRTVU5fUkVMCisJOzsKKyAgICAqOkdOVToqOiopCisJIyB0aGUgR05VIHN5c3RlbQorCUdOVV9BUkNIPWBlY2hvICIkVU5BTUVfTUFDSElORSIgfCBzZWQgLWUgJ3MsWy0vXS4qJCwsJ2AKKwlHTlVfUkVMPWBlY2hvICIkVU5BTUVfUkVMRUFTRSIgfCBzZWQgLWUgJ3MsLy4qJCwsJ2AKKwlHVUVTUz0kR05VX0FSQ0gtdW5rbm93bi0kTElCQyRHTlVfUkVMCisJOzsKKyAgICAqOkdOVS8qOio6KikKKwkjIG90aGVyIHN5c3RlbXMgd2l0aCBHTlUgbGliYyBhbmQgdXNlcmxhbmQKKwlHTlVfU1lTPWBlY2hvICIkVU5BTUVfU1lTVEVNIiB8IHNlZCAncyxeW14vXSovLCwnIHwgdHIgIls6dXBwZXI6XSIgIls6bG93ZXI6XSJgCisJR05VX1JFTD1gZWNobyAiJFVOQU1FX1JFTEVBU0UiIHwgc2VkIC1lICdzL1stKF0uKi8vJ2AKKwlHVUVTUz0kVU5BTUVfTUFDSElORS11bmtub3duLSRHTlVfU1lTJEdOVV9SRUwtJExJQkMKKwk7OworICAgICo6TWluaXg6KjoqKQorCUdVRVNTPSRVTkFNRV9NQUNISU5FLXVua25vd24tbWluaXgKKwk7OworICAgIGFhcmNoNjQ6TGludXg6KjoqKQorCUdVRVNTPSRVTkFNRV9NQUNISU5FLXVua25vd24tbGludXgtJExJQkMKKwk7OworICAgIGFhcmNoNjRfYmU6TGludXg6KjoqKQorCVVOQU1FX01BQ0hJTkU9YWFyY2g2NF9iZQorCUdVRVNTPSRVTkFNRV9NQUNISU5FLXVua25vd24tbGludXgtJExJQkMKKwk7OworICAgIGFscGhhOkxpbnV4Oio6KikKKwljYXNlIGBzZWQgLW4gJy9eY3B1IG1vZGVsL3MvXi4qOiBcKC4qXCkvXDEvcCcgL3Byb2MvY3B1aW5mbyAyPi9kZXYvbnVsbGAgaW4KKwkgIEVWNSkgICBVTkFNRV9NQUNISU5FPWFscGhhZXY1IDs7CisJICBFVjU2KSAgVU5BTUVfTUFDSElORT1hbHBoYWV2NTYgOzsKKwkgIFBDQTU2KSBVTkFNRV9NQUNISU5FPWFscGhhcGNhNTYgOzsKKwkgIFBDQTU3KSBVTkFNRV9NQUNISU5FPWFscGhhcGNhNTYgOzsKKwkgIEVWNikgICBVTkFNRV9NQUNISU5FPWFscGhhZXY2IDs7CisJICBFVjY3KSAgVU5BTUVfTUFDSElORT1hbHBoYWV2NjcgOzsKKwkgIEVWNjgqKSBVTkFNRV9NQUNISU5FPWFscGhhZXY2OCA7OworCWVzYWMKKwlvYmpkdW1wIC0tcHJpdmF0ZS1oZWFkZXJzIC9iaW4vc2ggfCBncmVwIC1xIGxkLnNvLjEKKwlpZiB0ZXN0ICIkPyIgPSAwIDsgdGhlbiBMSUJDPWdudWxpYmMxIDsgZmkKKwlHVUVTUz0kVU5BTUVfTUFDSElORS11bmtub3duLWxpbnV4LSRMSUJDCisJOzsKKyAgICBhcmM6TGludXg6KjoqIHwgYXJjZWI6TGludXg6KjoqIHwgYXJjMzI6TGludXg6KjoqIHwgYXJjNjQ6TGludXg6KjoqKQorCUdVRVNTPSRVTkFNRV9NQUNISU5FLXVua25vd24tbGludXgtJExJQkMKKwk7OworICAgIGFybSo6TGludXg6KjoqKQorCXNldF9jY19mb3JfYnVpbGQKKwlpZiBlY2hvIF9fQVJNX0VBQklfXyB8ICRDQ19GT1JfQlVJTEQgLUUgLSAyPi9kZXYvbnVsbCBcCisJICAgIHwgZ3JlcCAtcSBfX0FSTV9FQUJJX18KKwl0aGVuCisJICAgIEdVRVNTPSRVTkFNRV9NQUNISU5FLXVua25vd24tbGludXgtJExJQkMKKwllbHNlCisJICAgIGlmIGVjaG8gX19BUk1fUENTX1ZGUCB8ICRDQ19GT1JfQlVJTEQgLUUgLSAyPi9kZXYvbnVsbCBcCisJCXwgZ3JlcCAtcSBfX0FSTV9QQ1NfVkZQCisJICAgIHRoZW4KKwkJR1VFU1M9JFVOQU1FX01BQ0hJTkUtdW5rbm93bi1saW51eC0ke0xJQkN9ZWFiaQorCSAgICBlbHNlCisJCUdVRVNTPSRVTkFNRV9NQUNISU5FLXVua25vd24tbGludXgtJHtMSUJDfWVhYmloZgorCSAgICBmaQorCWZpCisJOzsKKyAgICBhdnIzMio6TGludXg6KjoqKQorCUdVRVNTPSRVTkFNRV9NQUNISU5FLXVua25vd24tbGludXgtJExJQkMKKwk7OworICAgIGNyaXM6TGludXg6KjoqKQorCUdVRVNTPSRVTkFNRV9NQUNISU5FLWF4aXMtbGludXgtJExJQkMKKwk7OworICAgIGNyaXN2MzI6TGludXg6KjoqKQorCUdVRVNTPSRVTkFNRV9NQUNISU5FLWF4aXMtbGludXgtJExJQkMKKwk7OworICAgIGUyazpMaW51eDoqOiopCisJR1VFU1M9JFVOQU1FX01BQ0hJTkUtdW5rbm93bi1saW51eC0kTElCQworCTs7CisgICAgZnJ2OkxpbnV4Oio6KikKKwlHVUVTUz0kVU5BTUVfTUFDSElORS11bmtub3duLWxpbnV4LSRMSUJDCisJOzsKKyAgICBoZXhhZ29uOkxpbnV4Oio6KikKKwlHVUVTUz0kVU5BTUVfTUFDSElORS11bmtub3duLWxpbnV4LSRMSUJDCisJOzsKKyAgICBpKjg2OkxpbnV4Oio6KikKKwlHVUVTUz0kVU5BTUVfTUFDSElORS1wYy1saW51eC0kTElCQworCTs7CisgICAgaWE2NDpMaW51eDoqOiopCisJR1VFU1M9JFVOQU1FX01BQ0hJTkUtdW5rbm93bi1saW51eC0kTElCQworCTs7CisgICAgazFvbTpMaW51eDoqOiopCisJR1VFU1M9JFVOQU1FX01BQ0hJTkUtdW5rbm93bi1saW51eC0kTElCQworCTs7CisgICAgbG9vbmdhcmNoMzI6TGludXg6KjoqIHwgbG9vbmdhcmNoNjQ6TGludXg6KjoqIHwgbG9vbmdhcmNoeDMyOkxpbnV4Oio6KikKKwlHVUVTUz0kVU5BTUVfTUFDSElORS11bmtub3duLWxpbnV4LSRMSUJDCisJOzsKKyAgICBtMzJyKjpMaW51eDoqOiopCisJR1VFU1M9JFVOQU1FX01BQ0hJTkUtdW5rbm93bi1saW51eC0kTElCQworCTs7CisgICAgbTY4KjpMaW51eDoqOiopCisJR1VFU1M9JFVOQU1FX01BQ0hJTkUtdW5rbm93bi1saW51eC0kTElCQworCTs7CisgICAgbWlwczpMaW51eDoqOiogfCBtaXBzNjQ6TGludXg6KjoqKQorCXNldF9jY19mb3JfYnVpbGQKKwlJU19HTElCQz0wCisJdGVzdCB4IiR7TElCQ30iID0geGdudSAmJiBJU19HTElCQz0xCisJc2VkICdzL14JLy8nIDw8IEVPRiA+ICIkZHVtbXkuYyIKKwkjdW5kZWYgQ1BVCisJI3VuZGVmIG1pcHMKKwkjdW5kZWYgbWlwc2VsCisJI3VuZGVmIG1pcHM2NAorCSN1bmRlZiBtaXBzNjRlbAorCSNpZiAke0lTX0dMSUJDfSAmJiBkZWZpbmVkKF9BQkk2NCkKKwlMSUJDQUJJPWdudWFiaTY0CisJI2Vsc2UKKwkjaWYgJHtJU19HTElCQ30gJiYgZGVmaW5lZChfQUJJTjMyKQorCUxJQkNBQkk9Z251YWJpbjMyCisJI2Vsc2UKKwlMSUJDQUJJPSR7TElCQ30KKwkjZW5kaWYKKwkjZW5kaWYKKworCSNpZiAke0lTX0dMSUJDfSAmJiBkZWZpbmVkKF9fbWlwczY0KSAmJiBkZWZpbmVkKF9fbWlwc19pc2FfcmV2KSAmJiBfX21pcHNfaXNhX3Jldj49NgorCUNQVT1taXBzaXNhNjRyNgorCSNlbHNlCisJI2lmICR7SVNfR0xJQkN9ICYmICFkZWZpbmVkKF9fbWlwczY0KSAmJiBkZWZpbmVkKF9fbWlwc19pc2FfcmV2KSAmJiBfX21pcHNfaXNhX3Jldj49NgorCUNQVT1taXBzaXNhMzJyNgorCSNlbHNlCisJI2lmIGRlZmluZWQoX19taXBzNjQpCisJQ1BVPW1pcHM2NAorCSNlbHNlCisJQ1BVPW1pcHMKKwkjZW5kaWYKKwkjZW5kaWYKKwkjZW5kaWYKKworCSNpZiBkZWZpbmVkKF9fTUlQU0VMX18pIHx8IGRlZmluZWQoX19NSVBTRUwpIHx8IGRlZmluZWQoX01JUFNFTCkgfHwgZGVmaW5lZChNSVBTRUwpCisJTUlQU19FTkRJQU49ZWwKKwkjZWxzZQorCSNpZiBkZWZpbmVkKF9fTUlQU0VCX18pIHx8IGRlZmluZWQoX19NSVBTRUIpIHx8IGRlZmluZWQoX01JUFNFQikgfHwgZGVmaW5lZChNSVBTRUIpCisJTUlQU19FTkRJQU49CisJI2Vsc2UKKwlNSVBTX0VORElBTj0KKwkjZW5kaWYKKwkjZW5kaWYKK0VPRgorCWNjX3NldF92YXJzPWAkQ0NfRk9SX0JVSUxEIC1FICIkZHVtbXkuYyIgMj4vZGV2L251bGwgfCBncmVwICdeQ1BVXHxeTUlQU19FTkRJQU5cfF5MSUJDQUJJJ2AKKwlldmFsICIkY2Nfc2V0X3ZhcnMiCisJdGVzdCAieCRDUFUiICE9IHggJiYgeyBlY2hvICIkQ1BVJHtNSVBTX0VORElBTn0tdW5rbm93bi1saW51eC0kTElCQ0FCSSI7IGV4aXQ7IH0KKwk7OworICAgIG1pcHM2NGVsOkxpbnV4Oio6KikKKwlHVUVTUz0kVU5BTUVfTUFDSElORS11bmtub3duLWxpbnV4LSRMSUJDCisJOzsKKyAgICBvcGVucmlzYyo6TGludXg6KjoqKQorCUdVRVNTPW9yMWstdW5rbm93bi1saW51eC0kTElCQworCTs7CisgICAgb3IzMjpMaW51eDoqOiogfCBvcjFrKjpMaW51eDoqOiopCisJR1VFU1M9JFVOQU1FX01BQ0hJTkUtdW5rbm93bi1saW51eC0kTElCQworCTs7CisgICAgcGFkcmU6TGludXg6KjoqKQorCUdVRVNTPXNwYXJjLXVua25vd24tbGludXgtJExJQkMKKwk7OworICAgIHBhcmlzYzY0OkxpbnV4Oio6KiB8IGhwcGE2NDpMaW51eDoqOiopCisJR1VFU1M9aHBwYTY0LXVua25vd24tbGludXgtJExJQkMKKwk7OworICAgIHBhcmlzYzpMaW51eDoqOiogfCBocHBhOkxpbnV4Oio6KikKKwkjIExvb2sgZm9yIENQVSBsZXZlbAorCWNhc2UgYGdyZXAgJ15jcHVbXmEtel0qOicgL3Byb2MvY3B1aW5mbyAyPi9kZXYvbnVsbCB8IGN1dCAtZCcgJyAtZjJgIGluCisJICBQQTcqKSBHVUVTUz1ocHBhMS4xLXVua25vd24tbGludXgtJExJQkMgOzsKKwkgIFBBOCopIEdVRVNTPWhwcGEyLjAtdW5rbm93bi1saW51eC0kTElCQyA7OworCSAgKikgICAgR1VFU1M9aHBwYS11bmtub3duLWxpbnV4LSRMSUJDIDs7CisJZXNhYworCTs7CisgICAgcHBjNjQ6TGludXg6KjoqKQorCUdVRVNTPXBvd2VycGM2NC11bmtub3duLWxpbnV4LSRMSUJDCisJOzsKKyAgICBwcGM6TGludXg6KjoqKQorCUdVRVNTPXBvd2VycGMtdW5rbm93bi1saW51eC0kTElCQworCTs7CisgICAgcHBjNjRsZTpMaW51eDoqOiopCisJR1VFU1M9cG93ZXJwYzY0bGUtdW5rbm93bi1saW51eC0kTElCQworCTs7CisgICAgcHBjbGU6TGludXg6KjoqKQorCUdVRVNTPXBvd2VycGNsZS11bmtub3duLWxpbnV4LSRMSUJDCisJOzsKKyAgICByaXNjdjMyOkxpbnV4Oio6KiB8IHJpc2N2MzJiZTpMaW51eDoqOiogfCByaXNjdjY0OkxpbnV4Oio6KiB8IHJpc2N2NjRiZTpMaW51eDoqOiopCisJR1VFU1M9JFVOQU1FX01BQ0hJTkUtdW5rbm93bi1saW51eC0kTElCQworCTs7CisgICAgczM5MDpMaW51eDoqOiogfCBzMzkweDpMaW51eDoqOiopCisJR1VFU1M9JFVOQU1FX01BQ0hJTkUtaWJtLWxpbnV4LSRMSUJDCisJOzsKKyAgICBzaDY0KjpMaW51eDoqOiopCisJR1VFU1M9JFVOQU1FX01BQ0hJTkUtdW5rbm93bi1saW51eC0kTElCQworCTs7CisgICAgc2gqOkxpbnV4Oio6KikKKwlHVUVTUz0kVU5BTUVfTUFDSElORS11bmtub3duLWxpbnV4LSRMSUJDCisJOzsKKyAgICBzcGFyYzpMaW51eDoqOiogfCBzcGFyYzY0OkxpbnV4Oio6KikKKwlHVUVTUz0kVU5BTUVfTUFDSElORS11bmtub3duLWxpbnV4LSRMSUJDCisJOzsKKyAgICB0aWxlKjpMaW51eDoqOiopCisJR1VFU1M9JFVOQU1FX01BQ0hJTkUtdW5rbm93bi1saW51eC0kTElCQworCTs7CisgICAgdmF4OkxpbnV4Oio6KikKKwlHVUVTUz0kVU5BTUVfTUFDSElORS1kZWMtbGludXgtJExJQkMKKwk7OworICAgIHg4Nl82NDpMaW51eDoqOiopCisJc2V0X2NjX2Zvcl9idWlsZAorCUNQVT0kVU5BTUVfTUFDSElORQorCUxJQkNBQkk9JExJQkMKKwlpZiB0ZXN0ICIkQ0NfRk9SX0JVSUxEIiAhPSBub19jb21waWxlcl9mb3VuZDsgdGhlbgorCSAgICBBQkk9NjQKKwkgICAgc2VkICdzL14JICAgIC8vJyA8PCBFT0YgPiAiJGR1bW15LmMiCisJICAgICNpZmRlZiBfX2kzODZfXworCSAgICBBQkk9eDg2CisJICAgICNlbHNlCisJICAgICNpZmRlZiBfX0lMUDMyX18KKwkgICAgQUJJPXgzMgorCSAgICAjZW5kaWYKKwkgICAgI2VuZGlmCitFT0YKKwkgICAgY2Nfc2V0X2FiaT1gJENDX0ZPUl9CVUlMRCAtRSAiJGR1bW15LmMiIDI+L2Rldi9udWxsIHwgZ3JlcCAnXkFCSScgfCBzZWQgJ3MsICwsZydgCisJICAgIGV2YWwgIiRjY19zZXRfYWJpIgorCSAgICBjYXNlICRBQkkgaW4KKwkJeDg2KSBDUFU9aTY4NiA7OworCQl4MzIpIExJQkNBQkk9JHtMSUJDfXgzMiA7OworCSAgICBlc2FjCisJZmkKKwlHVUVTUz0kQ1BVLXBjLWxpbnV4LSRMSUJDQUJJCisJOzsKKyAgICB4dGVuc2EqOkxpbnV4Oio6KikKKwlHVUVTUz0kVU5BTUVfTUFDSElORS11bmtub3duLWxpbnV4LSRMSUJDCisJOzsKKyAgICBpKjg2OkRZTklYL3B0eDo0KjoqKQorCSMgcHR4IDQuMCBkb2VzIHVuYW1lIC1zIGNvcnJlY3RseSwgd2l0aCBEWU5JWC9wdHggaW4gdGhlcmUuCisJIyBlYXJsaWVyIHZlcnNpb25zIGFyZSBtZXNzZWQgdXAgYW5kIHB1dCB0aGUgbm9kZW5hbWUgaW4gYm90aAorCSMgc3lzbmFtZSBhbmQgbm9kZW5hbWUuCisJR1VFU1M9aTM4Ni1zZXF1ZW50LXN5c3Y0CisJOzsKKyAgICBpKjg2OlVOSVhfU1Y6NC4yTVA6Mi4qKQorCSMgVW5peHdhcmUgaXMgYW4gb2Zmc2hvb3Qgb2YgU1ZSNCwgYnV0IGl0IGhhcyBpdHMgb3duIHZlcnNpb24KKwkjIG51bWJlciBzZXJpZXMgc3RhcnRpbmcgd2l0aCAyLi4uCisJIyBJIGFtIG5vdCBwb3NpdGl2ZSB0aGF0IG90aGVyIFNWUjQgc3lzdGVtcyB3b24ndCBtYXRjaCB0aGlzLAorCSMgSSBqdXN0IGhhdmUgdG8gaG9wZS4gIC0tIHJtcy4KKwkjIFVzZSBzeXN2NC4ydXcuLi4gc28gdGhhdCBzeXN2NCogbWF0Y2hlcyBpdC4KKwlHVUVTUz0kVU5BTUVfTUFDSElORS1wYy1zeXN2NC4ydXckVU5BTUVfVkVSU0lPTgorCTs7CisgICAgaSo4NjpPUy8yOio6KikKKwkjIElmIHdlIHdlcmUgYWJsZSB0byBmaW5kIGB1bmFtZScsIHRoZW4gRU1YIFVuaXggY29tcGF0aWJpbGl0eQorCSMgaXMgcHJvYmFibHkgaW5zdGFsbGVkLgorCUdVRVNTPSRVTkFNRV9NQUNISU5FLXBjLW9zMi1lbXgKKwk7OworICAgIGkqODY6WFRTLTMwMDoqOlNUT1ApCisJR1VFU1M9JFVOQU1FX01BQ0hJTkUtdW5rbm93bi1zdG9wCisJOzsKKyAgICBpKjg2OmF0aGVvczoqOiopCisJR1VFU1M9JFVOQU1FX01BQ0hJTkUtdW5rbm93bi1hdGhlb3MKKwk7OworICAgIGkqODY6c3lsbGFibGU6KjoqKQorCUdVRVNTPSRVTkFNRV9NQUNISU5FLXBjLXN5bGxhYmxlCisJOzsKKyAgICBpKjg2Okx5bnhPUzoyLio6KiB8IGkqODY6THlueE9TOjMuWzAxXSo6KiB8IGkqODY6THlueE9TOjQuWzAyXSo6KikKKwlHVUVTUz1pMzg2LXVua25vd24tbHlueG9zJFVOQU1FX1JFTEVBU0UKKwk7OworICAgIGkqODY6KkRPUzoqOiopCisJR1VFU1M9JFVOQU1FX01BQ0hJTkUtcGMtbXNkb3NkamdwcAorCTs7CisgICAgaSo4NjoqOjQuKjoqKQorCVVOQU1FX1JFTD1gZWNobyAiJFVOQU1FX1JFTEVBU0UiIHwgc2VkICdzL1wvTVAkLy8nYAorCWlmIGdyZXAgTm92ZWxsIC91c3IvaW5jbHVkZS9saW5rLmggPi9kZXYvbnVsbCAyPi9kZXYvbnVsbDsgdGhlbgorCQlHVUVTUz0kVU5BTUVfTUFDSElORS11bml2ZWwtc3lzdiRVTkFNRV9SRUwKKwllbHNlCisJCUdVRVNTPSRVTkFNRV9NQUNISU5FLXBjLXN5c3YkVU5BTUVfUkVMCisJZmkKKwk7OworICAgIGkqODY6Kjo1Ols2NzhdKikKKwkjIFVuaXhXYXJlIDcueCwgT3BlblVOSVggYW5kIE9wZW5TZXJ2ZXIgNi4KKwljYXNlIGAvYmluL3VuYW1lIC1YIHwgZ3JlcCAiXk1hY2hpbmUiYCBpbgorCSAgICAqNDg2KikJICAgICBVTkFNRV9NQUNISU5FPWk0ODYgOzsKKwkgICAgKlBlbnRpdW0pCSAgICAgVU5BTUVfTUFDSElORT1pNTg2IDs7CisJICAgICpQZW50KnwqQ2VsZXJvbikgVU5BTUVfTUFDSElORT1pNjg2IDs7CisJZXNhYworCUdVRVNTPSRVTkFNRV9NQUNISU5FLXVua25vd24tc3lzdiR7VU5BTUVfUkVMRUFTRX0ke1VOQU1FX1NZU1RFTX0ke1VOQU1FX1ZFUlNJT059CisJOzsKKyAgICBpKjg2Oio6My4yOiopCisJaWYgdGVzdCAtZiAvdXNyL29wdGlvbnMvY2IubmFtZTsgdGhlbgorCQlVTkFNRV9SRUw9YHNlZCAtbiAncy8uKlZlcnNpb24gLy9wJyA8L3Vzci9vcHRpb25zL2NiLm5hbWVgCisJCUdVRVNTPSRVTkFNRV9NQUNISU5FLXBjLWlzYyRVTkFNRV9SRUwKKwllbGlmIC9iaW4vdW5hbWUgLVggMj4vZGV2L251bGwgPi9kZXYvbnVsbCA7IHRoZW4KKwkJVU5BTUVfUkVMPWAoL2Jpbi91bmFtZSAtWHxncmVwIFJlbGVhc2V8c2VkIC1lICdzLy4qPSAvLycpYAorCQkoL2Jpbi91bmFtZSAtWHxncmVwIGk4MDQ4NiA+L2Rldi9udWxsKSAmJiBVTkFNRV9NQUNISU5FPWk0ODYKKwkJKC9iaW4vdW5hbWUgLVh8Z3JlcCAnXk1hY2hpbmUuKlBlbnRpdW0nID4vZGV2L251bGwpIFwKKwkJCSYmIFVOQU1FX01BQ0hJTkU9aTU4NgorCQkoL2Jpbi91bmFtZSAtWHxncmVwICdeTWFjaGluZS4qUGVudCAqSUknID4vZGV2L251bGwpIFwKKwkJCSYmIFVOQU1FX01BQ0hJTkU9aTY4NgorCQkoL2Jpbi91bmFtZSAtWHxncmVwICdeTWFjaGluZS4qUGVudGl1bSBQcm8nID4vZGV2L251bGwpIFwKKwkJCSYmIFVOQU1FX01BQ0hJTkU9aTY4NgorCQlHVUVTUz0kVU5BTUVfTUFDSElORS1wYy1zY28kVU5BTUVfUkVMCisJZWxzZQorCQlHVUVTUz0kVU5BTUVfTUFDSElORS1wYy1zeXN2MzIKKwlmaQorCTs7CisgICAgcGM6KjoqOiopCisJIyBMZWZ0IGhlcmUgZm9yIGNvbXBhdGliaWxpdHk6CisJIyB1bmFtZSAtbSBwcmludHMgZm9yIERKR1BQIGFsd2F5cyAncGMnLCBidXQgaXQgcHJpbnRzIG5vdGhpbmcgYWJvdXQKKwkjIHRoZSBwcm9jZXNzb3IsIHNvIHdlIHBsYXkgc2FmZSBieSBhc3N1bWluZyBpNTg2LgorCSMgTm90ZTogd2hhdGV2ZXIgdGhpcyBpcywgaXQgTVVTVCBiZSB0aGUgc2FtZSBhcyB3aGF0IGNvbmZpZy5zdWIKKwkjIHByaW50cyBmb3IgdGhlICJkamdwcCIgaG9zdCwgb3IgZWxzZSBHREIgY29uZmlndXJlIHdpbGwgZGVjaWRlIHRoYXQKKwkjIHRoaXMgaXMgYSBjcm9zcy1idWlsZC4KKwlHVUVTUz1pNTg2LXBjLW1zZG9zZGpncHAKKwk7OworICAgIEludGVsOk1hY2g6Myo6KikKKwlHVUVTUz1pMzg2LXBjLW1hY2gzCisJOzsKKyAgICBwYXJhZ29uOio6KjoqKQorCUdVRVNTPWk4NjAtaW50ZWwtb3NmMQorCTs7CisgICAgaTg2MDoqOjQuKjoqKSAjIGk4NjAtU1ZSNAorCWlmIGdyZXAgU3RhcmRlbnQgL3Vzci9pbmNsdWRlL3N5cy91YWRtaW4uaCA+L2Rldi9udWxsIDI+JjEgOyB0aGVuCisJICBHVUVTUz1pODYwLXN0YXJkZW50LXN5c3YkVU5BTUVfUkVMRUFTRSAgICAjIFN0YXJkZW50IFZpc3RyYSBpODYwLVNWUjQKKwllbHNlICMgQWRkIG90aGVyIGk4NjAtU1ZSNCB2ZW5kb3JzIGJlbG93IGFzIHRoZXkgYXJlIGRpc2NvdmVyZWQuCisJICBHVUVTUz1pODYwLXVua25vd24tc3lzdiRVTkFNRV9SRUxFQVNFICAgICAjIFVua25vd24gaTg2MC1TVlI0CisJZmkKKwk7OworICAgIG1pbmkqOkNUSVg6U1lTKjU6KikKKwkjICJtaW5pZnJhbWUiCisJR1VFU1M9bTY4MDEwLWNvbnZlcmdlbnQtc3lzdgorCTs7CisgICAgbWM2OGs6VU5JWDpTWVNURU01OjMuNTFtKQorCUdVRVNTPW02OGstY29udmVyZ2VudC1zeXN2CisJOzsKKyAgICBNNjgwPzA6RC1OSVg6NS4zOiopCisJR1VFU1M9bTY4ay1kaWFiLWRuaXgKKwk7OworICAgIE02OCo6KjpSM1ZbNTY3OF0qOiopCisJdGVzdCAtciAvc3lzVjY4ICYmIHsgZWNobyAnbTY4ay1tb3Rvcm9sYS1zeXN2JzsgZXhpdDsgfSA7OworICAgIDNbMzQ1XT8/Oio6NC4wOjMuMCB8IDNbMzRdPz9BOio6NC4wOjMuMCB8IDNbMzRdPz8sKjoqOjQuMDozLjAgfCAzWzM0XT8/Lyo6Kjo0LjA6My4wIHwgNDQwMDoqOjQuMDozLjAgfCA0ODUwOio6NC4wOjMuMCB8IFNLQTQwOio6NC4wOjMuMCB8IFNEUzI6Kjo0LjA6My4wIHwgU0hHMjoqOjQuMDozLjAgfCBTNzUwMSo6Kjo0LjA6My4wKQorCU9TX1JFTD0nJworCXRlc3QgLXIgL2V0Yy8ucmVsaWQgXAorCSYmIE9TX1JFTD0uYHNlZCAtbiAncy9bXiBdKiBbXiBdKiBcKFswLTldWzAtOV1cKS4qL1wxL3AnIDwgL2V0Yy8ucmVsaWRgCisJL2Jpbi91bmFtZSAtcCAyPi9kZXYvbnVsbCB8IGdyZXAgODYgPi9kZXYvbnVsbCBcCisJICAmJiB7IGVjaG8gaTQ4Ni1uY3Itc3lzdjQuMyIkT1NfUkVMIjsgZXhpdDsgfQorCS9iaW4vdW5hbWUgLXAgMj4vZGV2L251bGwgfCAvYmluL2dyZXAgZW50aXVtID4vZGV2L251bGwgXAorCSAgJiYgeyBlY2hvIGk1ODYtbmNyLXN5c3Y0LjMiJE9TX1JFTCI7IGV4aXQ7IH0gOzsKKyAgICAzWzM0XT8/Oio6NC4wOiogfCAzWzM0XT8/LCo6Kjo0LjA6KikKKwkvYmluL3VuYW1lIC1wIDI+L2Rldi9udWxsIHwgZ3JlcCA4NiA+L2Rldi9udWxsIFwKKwkgICYmIHsgZWNobyBpNDg2LW5jci1zeXN2NDsgZXhpdDsgfSA7OworICAgIE5DUio6Kjo0LjI6KiB8IE1QUkFTKjoqOjQuMjoqKQorCU9TX1JFTD0nLjMnCisJdGVzdCAtciAvZXRjLy5yZWxpZCBcCisJICAgICYmIE9TX1JFTD0uYHNlZCAtbiAncy9bXiBdKiBbXiBdKiBcKFswLTldWzAtOV1cKS4qL1wxL3AnIDwgL2V0Yy8ucmVsaWRgCisJL2Jpbi91bmFtZSAtcCAyPi9kZXYvbnVsbCB8IGdyZXAgODYgPi9kZXYvbnVsbCBcCisJICAgICYmIHsgZWNobyBpNDg2LW5jci1zeXN2NC4zIiRPU19SRUwiOyBleGl0OyB9CisJL2Jpbi91bmFtZSAtcCAyPi9kZXYvbnVsbCB8IC9iaW4vZ3JlcCBlbnRpdW0gPi9kZXYvbnVsbCBcCisJICAgICYmIHsgZWNobyBpNTg2LW5jci1zeXN2NC4zIiRPU19SRUwiOyBleGl0OyB9CisJL2Jpbi91bmFtZSAtcCAyPi9kZXYvbnVsbCB8IC9iaW4vZ3JlcCBwdGVyb24gPi9kZXYvbnVsbCBcCisJICAgICYmIHsgZWNobyBpNTg2LW5jci1zeXN2NC4zIiRPU19SRUwiOyBleGl0OyB9IDs7CisgICAgbTY4KjpMeW54T1M6Mi4qOiogfCBtNjgqOkx5bnhPUzozLjAqOiopCisJR1VFU1M9bTY4ay11bmtub3duLWx5bnhvcyRVTkFNRV9SRUxFQVNFCisJOzsKKyAgICBtYzY4MDMwOlVOSVhfU3lzdGVtX1Y6NC4qOiopCisJR1VFU1M9bTY4ay1hdGFyaS1zeXN2NAorCTs7CisgICAgVFNVTkFNSTpMeW54T1M6Mi4qOiopCisJR1VFU1M9c3BhcmMtdW5rbm93bi1seW54b3MkVU5BTUVfUkVMRUFTRQorCTs7CisgICAgcnM2MDAwOkx5bnhPUzoyLio6KikKKwlHVUVTUz1yczYwMDAtdW5rbm93bi1seW54b3MkVU5BTUVfUkVMRUFTRQorCTs7CisgICAgUG93ZXJQQzpMeW54T1M6Mi4qOiogfCBQb3dlclBDOkx5bnhPUzozLlswMV0qOiogfCBQb3dlclBDOkx5bnhPUzo0LlswMl0qOiopCisJR1VFU1M9cG93ZXJwYy11bmtub3duLWx5bnhvcyRVTkFNRV9SRUxFQVNFCisJOzsKKyAgICBTTVtCRV1TOlVOSVhfU1Y6KjoqKQorCUdVRVNTPW1pcHMtZGRlLXN5c3YkVU5BTUVfUkVMRUFTRQorCTs7CisgICAgUk0qOlJlbGlhbnRVTklYLSo6KjoqKQorCUdVRVNTPW1pcHMtc25pLXN5c3Y0CisJOzsKKyAgICBSTSo6U0lOSVgtKjoqOiopCisJR1VFU1M9bWlwcy1zbmktc3lzdjQKKwk7OworICAgICo6U0lOSVgtKjoqOiopCisJaWYgdW5hbWUgLXAgMj4vZGV2L251bGwgPi9kZXYvbnVsbCA7IHRoZW4KKwkJVU5BTUVfTUFDSElORT1gKHVuYW1lIC1wKSAyPi9kZXYvbnVsbGAKKwkJR1VFU1M9JFVOQU1FX01BQ0hJTkUtc25pLXN5c3Y0CisJZWxzZQorCQlHVUVTUz1uczMyay1zbmktc3lzdgorCWZpCisJOzsKKyAgICBQRU5USVVNOio6NC4wKjoqKQkjIFVuaXN5cyBgQ2xlYXJQYXRoIEhNUCBJWCA0MDAwJyBTVlI0L01QIGVmZm9ydAorCQkJIyBzYXlzIDxSaWNoYXJkLk0uQmFydGVsQGNjTWFpbC5DZW5zdXMuR09WPgorCUdVRVNTPWk1ODYtdW5pc3lzLXN5c3Y0CisJOzsKKyAgICAqOlVOSVhfU3lzdGVtX1Y6NCo6RlRYKikKKwkjIEZyb20gR2VyYWxkIEhld2VzIDxoZXdlc0BvcGVubWFya2V0LmNvbT4uCisJIyBIb3cgYWJvdXQgZGlmZmVyZW50aWF0aW5nIGJldHdlZW4gc3RyYXR1cyBhcmNoaXRlY3R1cmVzPyAtZGptCisJR1VFU1M9aHBwYTEuMS1zdHJhdHVzLXN5c3Y0CisJOzsKKyAgICAqOio6KjpGVFgqKQorCSMgRnJvbSBzZWFuZkBzd2RjLnN0cmF0dXMuY29tLgorCUdVRVNTPWk4NjAtc3RyYXR1cy1zeXN2NAorCTs7CisgICAgaSo4NjpWT1M6KjoqKQorCSMgRnJvbSBQYXVsLkdyZWVuQHN0cmF0dXMuY29tLgorCUdVRVNTPSRVTkFNRV9NQUNISU5FLXN0cmF0dXMtdm9zCisJOzsKKyAgICAqOlZPUzoqOiopCisJIyBGcm9tIFBhdWwuR3JlZW5Ac3RyYXR1cy5jb20uCisJR1VFU1M9aHBwYTEuMS1zdHJhdHVzLXZvcworCTs7CisgICAgbWM2OCo6QS9VWDoqOiopCisJR1VFU1M9bTY4ay1hcHBsZS1hdXgkVU5BTUVfUkVMRUFTRQorCTs7CisgICAgbmV3cyo6TkVXUy1PUzo2KjoqKQorCUdVRVNTPW1pcHMtc29ueS1uZXdzb3M2CisJOzsKKyAgICBSWzM0XTAwMDoqU3lzdGVtX1YqOio6KiB8IFI0MDAwOlVOSVhfU1lTVjoqOiogfCBSKjAwMDpVTklYX1NWOio6KikKKwlpZiB0ZXN0IC1kIC91c3IvbmVjOyB0aGVuCisJCUdVRVNTPW1pcHMtbmVjLXN5c3YkVU5BTUVfUkVMRUFTRQorCWVsc2UKKwkJR1VFU1M9bWlwcy11bmtub3duLXN5c3YkVU5BTUVfUkVMRUFTRQorCWZpCisJOzsKKyAgICBCZUJveDpCZU9TOio6KikJIyBCZU9TIHJ1bm5pbmcgb24gaGFyZHdhcmUgbWFkZSBieSBCZSwgUFBDIG9ubHkuCisJR1VFU1M9cG93ZXJwYy1iZS1iZW9zCisJOzsKKyAgICBCZU1hYzpCZU9TOio6KikJIyBCZU9TIHJ1bm5pbmcgb24gTWFjIG9yIE1hYyBjbG9uZSwgUFBDIG9ubHkuCisJR1VFU1M9cG93ZXJwYy1hcHBsZS1iZW9zCisJOzsKKyAgICBCZVBDOkJlT1M6KjoqKQkjIEJlT1MgcnVubmluZyBvbiBJbnRlbCBQQyBjb21wYXRpYmxlLgorCUdVRVNTPWk1ODYtcGMtYmVvcworCTs7CisgICAgQmVQQzpIYWlrdToqOiopCSMgSGFpa3UgcnVubmluZyBvbiBJbnRlbCBQQyBjb21wYXRpYmxlLgorCUdVRVNTPWk1ODYtcGMtaGFpa3UKKwk7OworICAgIHBwYzpIYWlrdToqOiopCSMgSGFpa3UgcnVubmluZyBvbiBBcHBsZSBQb3dlclBDCisJR1VFU1M9cG93ZXJwYy1hcHBsZS1oYWlrdQorCTs7CisgICAgKjpIYWlrdToqOiopCSMgSGFpa3UgbW9kZXJuIGdjYyAobm90IGJvdW5kIGJ5IEJlT1MgY29tcGF0KQorCUdVRVNTPSRVTkFNRV9NQUNISU5FLXVua25vd24taGFpa3UKKwk7OworICAgIFNYLTQ6U1VQRVItVVg6KjoqKQorCUdVRVNTPXN4NC1uZWMtc3VwZXJ1eCRVTkFNRV9SRUxFQVNFCisJOzsKKyAgICBTWC01OlNVUEVSLVVYOio6KikKKwlHVUVTUz1zeDUtbmVjLXN1cGVydXgkVU5BTUVfUkVMRUFTRQorCTs7CisgICAgU1gtNjpTVVBFUi1VWDoqOiopCisJR1VFU1M9c3g2LW5lYy1zdXBlcnV4JFVOQU1FX1JFTEVBU0UKKwk7OworICAgIFNYLTc6U1VQRVItVVg6KjoqKQorCUdVRVNTPXN4Ny1uZWMtc3VwZXJ1eCRVTkFNRV9SRUxFQVNFCisJOzsKKyAgICBTWC04OlNVUEVSLVVYOio6KikKKwlHVUVTUz1zeDgtbmVjLXN1cGVydXgkVU5BTUVfUkVMRUFTRQorCTs7CisgICAgU1gtOFI6U1VQRVItVVg6KjoqKQorCUdVRVNTPXN4OHItbmVjLXN1cGVydXgkVU5BTUVfUkVMRUFTRQorCTs7CisgICAgU1gtQUNFOlNVUEVSLVVYOio6KikKKwlHVUVTUz1zeGFjZS1uZWMtc3VwZXJ1eCRVTkFNRV9SRUxFQVNFCisJOzsKKyAgICBQb3dlcio6UmhhcHNvZHk6KjoqKQorCUdVRVNTPXBvd2VycGMtYXBwbGUtcmhhcHNvZHkkVU5BTUVfUkVMRUFTRQorCTs7CisgICAgKjpSaGFwc29keToqOiopCisJR1VFU1M9JFVOQU1FX01BQ0hJTkUtYXBwbGUtcmhhcHNvZHkkVU5BTUVfUkVMRUFTRQorCTs7CisgICAgYXJtNjQ6RGFyd2luOio6KikKKwlHVUVTUz1hYXJjaDY0LWFwcGxlLWRhcndpbiRVTkFNRV9SRUxFQVNFCisJOzsKKyAgICAqOkRhcndpbjoqOiopCisJVU5BTUVfUFJPQ0VTU09SPWB1bmFtZSAtcGAKKwljYXNlICRVTkFNRV9QUk9DRVNTT1IgaW4KKwkgICAgdW5rbm93bikgVU5BTUVfUFJPQ0VTU09SPXBvd2VycGMgOzsKKwllc2FjCisJaWYgY29tbWFuZCAtdiB4Y29kZS1zZWxlY3QgPiAvZGV2L251bGwgMj4gL2Rldi9udWxsICYmIFwKKwkJISB4Y29kZS1zZWxlY3QgLS1wcmludC1wYXRoID4gL2Rldi9udWxsIDI+IC9kZXYvbnVsbCA7IHRoZW4KKwkgICAgIyBBdm9pZCBleGVjdXRpbmcgY2MgaWYgdGhlcmUgaXMgbm8gdG9vbGNoYWluIGluc3RhbGxlZCBhcworCSAgICAjIGNjIHdpbGwgYmUgYSBzdHViIHRoYXQgcHV0cyB1cCBhIGdyYXBoaWNhbCBhbGVydAorCSAgICAjIHByb21wdGluZyB0aGUgdXNlciB0byBpbnN0YWxsIGRldmVsb3BlciB0b29scy4KKwkgICAgQ0NfRk9SX0JVSUxEPW5vX2NvbXBpbGVyX2ZvdW5kCisJZWxzZQorCSAgICBzZXRfY2NfZm9yX2J1aWxkCisJZmkKKwlpZiB0ZXN0ICIkQ0NfRk9SX0JVSUxEIiAhPSBub19jb21waWxlcl9mb3VuZDsgdGhlbgorCSAgICBpZiAoZWNobyAnI2lmZGVmIF9fTFA2NF9fJzsgZWNobyBJU182NEJJVF9BUkNIOyBlY2hvICcjZW5kaWYnKSB8IFwKKwkJICAgKENDT1BUUz0iIiAkQ0NfRk9SX0JVSUxEIC1FIC0gMj4vZGV2L251bGwpIHwgXAorCQkgICBncmVwIElTXzY0QklUX0FSQ0ggPi9kZXYvbnVsbAorCSAgICB0aGVuCisJCWNhc2UgJFVOQU1FX1BST0NFU1NPUiBpbgorCQkgICAgaTM4NikgVU5BTUVfUFJPQ0VTU09SPXg4Nl82NCA7OworCQkgICAgcG93ZXJwYykgVU5BTUVfUFJPQ0VTU09SPXBvd2VycGM2NCA7OworCQllc2FjCisJICAgIGZpCisJICAgICMgT24gMTAuNC0xMC42IG9uZSBtaWdodCBjb21waWxlIGZvciBQb3dlclBDIHZpYSBnY2MgLWFyY2ggcHBjCisJICAgIGlmIChlY2hvICcjaWZkZWYgX19QT1dFUlBDX18nOyBlY2hvIElTX1BQQzsgZWNobyAnI2VuZGlmJykgfCBcCisJCSAgIChDQ09QVFM9IiIgJENDX0ZPUl9CVUlMRCAtRSAtIDI+L2Rldi9udWxsKSB8IFwKKwkJICAgZ3JlcCBJU19QUEMgPi9kZXYvbnVsbAorCSAgICB0aGVuCisJCVVOQU1FX1BST0NFU1NPUj1wb3dlcnBjCisJICAgIGZpCisJZWxpZiB0ZXN0ICIkVU5BTUVfUFJPQ0VTU09SIiA9IGkzODYgOyB0aGVuCisJICAgICMgdW5hbWUgLW0gcmV0dXJucyBpMzg2IG9yIHg4Nl82NAorCSAgICBVTkFNRV9QUk9DRVNTT1I9JFVOQU1FX01BQ0hJTkUKKwlmaQorCUdVRVNTPSRVTkFNRV9QUk9DRVNTT1ItYXBwbGUtZGFyd2luJFVOQU1FX1JFTEVBU0UKKwk7OworICAgICo6cHJvY250byo6KjoqIHwgKjpRTlg6WzAxMjM0NTY3ODldKjoqKQorCVVOQU1FX1BST0NFU1NPUj1gdW5hbWUgLXBgCisJaWYgdGVzdCAiJFVOQU1FX1BST0NFU1NPUiIgPSB4ODY7IHRoZW4KKwkJVU5BTUVfUFJPQ0VTU09SPWkzODYKKwkJVU5BTUVfTUFDSElORT1wYworCWZpCisJR1VFU1M9JFVOQU1FX1BST0NFU1NPUi0kVU5BTUVfTUFDSElORS1udG8tcW54JFVOQU1FX1JFTEVBU0UKKwk7OworICAgICo6UU5YOio6NCopCisJR1VFU1M9aTM4Ni1wYy1xbngKKwk7OworICAgIE5FTy0qOk5PTlNUT1BfS0VSTkVMOio6KikKKwlHVUVTUz1uZW8tdGFuZGVtLW5zayRVTkFNRV9SRUxFQVNFCisJOzsKKyAgICBOU0UtKjpOT05TVE9QX0tFUk5FTDoqOiopCisJR1VFU1M9bnNlLXRhbmRlbS1uc2skVU5BTUVfUkVMRUFTRQorCTs7CisgICAgTlNSLSo6Tk9OU1RPUF9LRVJORUw6KjoqKQorCUdVRVNTPW5zci10YW5kZW0tbnNrJFVOQU1FX1JFTEVBU0UKKwk7OworICAgIE5TVi0qOk5PTlNUT1BfS0VSTkVMOio6KikKKwlHVUVTUz1uc3YtdGFuZGVtLW5zayRVTkFNRV9SRUxFQVNFCisJOzsKKyAgICBOU1gtKjpOT05TVE9QX0tFUk5FTDoqOiopCisJR1VFU1M9bnN4LXRhbmRlbS1uc2skVU5BTUVfUkVMRUFTRQorCTs7CisgICAgKjpOb25TdG9wLVVYOio6KikKKwlHVUVTUz1taXBzLWNvbXBhcS1ub25zdG9wdXgKKwk7OworICAgIEJTMjAwMDpQT1NJWCo6KjoqKQorCUdVRVNTPWJzMjAwMC1zaWVtZW5zLXN5c3YKKwk7OworICAgIERTLyo6VU5JWF9TeXN0ZW1fVjoqOiopCisJR1VFU1M9JFVOQU1FX01BQ0hJTkUtJFVOQU1FX1NZU1RFTS0kVU5BTUVfUkVMRUFTRQorCTs7CisgICAgKjpQbGFuOToqOiopCisJIyAidW5hbWUgLW0iIGlzIG5vdCBjb25zaXN0ZW50LCBzbyB1c2UgJGNwdXR5cGUgaW5zdGVhZC4gMzg2CisJIyBpcyBjb252ZXJ0ZWQgdG8gaTM4NiBmb3IgY29uc2lzdGVuY3kgd2l0aCBvdGhlciB4ODYKKwkjIG9wZXJhdGluZyBzeXN0ZW1zLgorCWlmIHRlc3QgIiR7Y3B1dHlwZS19IiA9IDM4NjsgdGhlbgorCSAgICBVTkFNRV9NQUNISU5FPWkzODYKKwllbGlmIHRlc3QgIngke2NwdXR5cGUtfSIgIT0geDsgdGhlbgorCSAgICBVTkFNRV9NQUNISU5FPSRjcHV0eXBlCisJZmkKKwlHVUVTUz0kVU5BTUVfTUFDSElORS11bmtub3duLXBsYW45CisJOzsKKyAgICAqOlRPUFMtMTA6KjoqKQorCUdVRVNTPXBkcDEwLXVua25vd24tdG9wczEwCisJOzsKKyAgICAqOlRFTkVYOio6KikKKwlHVUVTUz1wZHAxMC11bmtub3duLXRlbmV4CisJOzsKKyAgICBLUzEwOlRPUFMtMjA6KjoqIHwgS0wxMDpUT1BTLTIwOio6KiB8IFRZUEU0OlRPUFMtMjA6KjoqKQorCUdVRVNTPXBkcDEwLWRlYy10b3BzMjAKKwk7OworICAgIFhLTC0xOlRPUFMtMjA6KjoqIHwgVFlQRTU6VE9QUy0yMDoqOiopCisJR1VFU1M9cGRwMTAteGtsLXRvcHMyMAorCTs7CisgICAgKjpUT1BTLTIwOio6KikKKwlHVUVTUz1wZHAxMC11bmtub3duLXRvcHMyMAorCTs7CisgICAgKjpJVFM6KjoqKQorCUdVRVNTPXBkcDEwLXVua25vd24taXRzCisJOzsKKyAgICBTRUk6KjoqOlNFSVVYKQorCUdVRVNTPW1pcHMtc2VpLXNlaXV4JFVOQU1FX1JFTEVBU0UKKwk7OworICAgICo6RHJhZ29uRmx5Oio6KikKKwlEUkFHT05GTFlfUkVMPWBlY2hvICIkVU5BTUVfUkVMRUFTRSIgfCBzZWQgLWUgJ3MvWy0oXS4qLy8nYAorCUdVRVNTPSRVTkFNRV9NQUNISU5FLXVua25vd24tZHJhZ29uZmx5JERSQUdPTkZMWV9SRUwKKwk7OworICAgICo6KlZNUzoqOiopCisJVU5BTUVfTUFDSElORT1gKHVuYW1lIC1wKSAyPi9kZXYvbnVsbGAKKwljYXNlICRVTkFNRV9NQUNISU5FIGluCisJICAgIEEqKSBHVUVTUz1hbHBoYS1kZWMtdm1zIDs7CisJICAgIEkqKSBHVUVTUz1pYTY0LWRlYy12bXMgOzsKKwkgICAgViopIEdVRVNTPXZheC1kZWMtdm1zIDs7CisJZXNhYyA7OworICAgICo6WEVOSVg6KjpTeXNWKQorCUdVRVNTPWkzODYtcGMteGVuaXgKKwk7OworICAgIGkqODY6c2t5b3M6KjoqKQorCVNLWU9TX1JFTD1gZWNobyAiJFVOQU1FX1JFTEVBU0UiIHwgc2VkIC1lICdzLyAuKiQvLydgCisJR1VFU1M9JFVOQU1FX01BQ0hJTkUtcGMtc2t5b3MkU0tZT1NfUkVMCisJOzsKKyAgICBpKjg2OnJkb3M6KjoqKQorCUdVRVNTPSRVTkFNRV9NQUNISU5FLXBjLXJkb3MKKwk7OworICAgIGkqODY6Rml3aXg6KjoqKQorCUdVRVNTPSRVTkFNRV9NQUNISU5FLXBjLWZpd2l4CisJOzsKKyAgICAqOkFST1M6KjoqKQorCUdVRVNTPSRVTkFNRV9NQUNISU5FLXVua25vd24tYXJvcworCTs7CisgICAgeDg2XzY0OlZNa2VybmVsOio6KikKKwlHVUVTUz0kVU5BTUVfTUFDSElORS11bmtub3duLWVzeAorCTs7CisgICAgYW1kNjQ6SXNpbG9uXCBPbmVGUzoqOiopCisJR1VFU1M9eDg2XzY0LXVua25vd24tb25lZnMKKwk7OworICAgICo6VW5sZWFzaGVkOio6KikKKwlHVUVTUz0kVU5BTUVfTUFDSElORS11bmtub3duLXVubGVhc2hlZCRVTkFNRV9SRUxFQVNFCisJOzsKK2VzYWMKKworIyBEbyB3ZSBoYXZlIGEgZ3Vlc3MgYmFzZWQgb24gdW5hbWUgcmVzdWx0cz8KK2lmIHRlc3QgIngkR1VFU1MiICE9IHg7IHRoZW4KKyAgICBlY2hvICIkR1VFU1MiCisgICAgZXhpdAorZmkKKworIyBObyB1bmFtZSBjb21tYW5kIG9yIHVuYW1lIG91dHB1dCBub3QgcmVjb2duaXplZC4KK3NldF9jY19mb3JfYnVpbGQKK2NhdCA+ICIkZHVtbXkuYyIgPDxFT0YKKyNpZmRlZiBfU0VRVUVOVF8KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMvdXRzbmFtZS5oPgorI2VuZGlmCisjaWYgZGVmaW5lZCh1bHRyaXgpIHx8IGRlZmluZWQoX3VsdHJpeCkgfHwgZGVmaW5lZChfX3VsdHJpeCkgfHwgZGVmaW5lZChfX3VsdHJpeF9fKQorI2lmIGRlZmluZWQgKHZheCkgfHwgZGVmaW5lZCAoX192YXgpIHx8IGRlZmluZWQgKF9fdmF4X18pIHx8IGRlZmluZWQobWlwcykgfHwgZGVmaW5lZChfX21pcHMpIHx8IGRlZmluZWQoX19taXBzX18pIHx8IGRlZmluZWQoTUlQUykgfHwgZGVmaW5lZChfX01JUFNfXykKKyNpbmNsdWRlIDxzaWduYWwuaD4KKyNpZiBkZWZpbmVkKF9TSVpFX1RfKSB8fCBkZWZpbmVkKFNJR0xPU1QpCisjaW5jbHVkZSA8c3lzL3V0c25hbWUuaD4KKyNlbmRpZgorI2VuZGlmCisjZW5kaWYKK21haW4gKCkKK3sKKyNpZiBkZWZpbmVkIChzb255KQorI2lmIGRlZmluZWQgKE1JUFNFQikKKyAgLyogQkZEIHdhbnRzICJic2QiIGluc3RlYWQgb2YgIm5ld3NvcyIuICBQZXJoYXBzIEJGRCBzaG91bGQgYmUgY2hhbmdlZCwKKyAgICAgSSBkb24ndCBrbm93Li4uLiAgKi8KKyAgcHJpbnRmICgibWlwcy1zb255LWJzZFxuIik7IGV4aXQgKDApOworI2Vsc2UKKyNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KKyAgcHJpbnRmICgibTY4ay1zb255LW5ld3NvcyVzXG4iLAorI2lmZGVmIE5FV1NPUzQKKyAgIjQiCisjZWxzZQorICAiIgorI2VuZGlmCisgICk7IGV4aXQgKDApOworI2VuZGlmCisjZW5kaWYKKworI2lmIGRlZmluZWQgKE5lWFQpCisjaWYgIWRlZmluZWQgKF9fQVJDSElURUNUVVJFX18pCisjZGVmaW5lIF9fQVJDSElURUNUVVJFX18gIm02OGsiCisjZW5kaWYKKyAgaW50IHZlcnNpb247CisgIHZlcnNpb249YChob3N0aW5mbyB8IHNlZCAtbiAncy8uKk5lWFQgTWFjaCBcKFswLTldKlwpLiovXDEvcCcpIDI+L2Rldi9udWxsYDsKKyAgaWYgKHZlcnNpb24gPCA0KQorICAgIHByaW50ZiAoIiVzLW5leHQtbmV4dHN0ZXAlZFxuIiwgX19BUkNISVRFQ1RVUkVfXywgdmVyc2lvbik7CisgIGVsc2UKKyAgICBwcmludGYgKCIlcy1uZXh0LW9wZW5zdGVwJWRcbiIsIF9fQVJDSElURUNUVVJFX18sIHZlcnNpb24pOworICBleGl0ICgwKTsKKyNlbmRpZgorCisjaWYgZGVmaW5lZCAoTVVMVElNQVgpIHx8IGRlZmluZWQgKG4xNikKKyNpZiBkZWZpbmVkIChVTUFYVikKKyAgcHJpbnRmICgibnMzMmstZW5jb3JlLXN5c3ZcbiIpOyBleGl0ICgwKTsKKyNlbHNlCisjaWYgZGVmaW5lZCAoQ01VKQorICBwcmludGYgKCJuczMyay1lbmNvcmUtbWFjaFxuIik7IGV4aXQgKDApOworI2Vsc2UKKyAgcHJpbnRmICgibnMzMmstZW5jb3JlLWJzZFxuIik7IGV4aXQgKDApOworI2VuZGlmCisjZW5kaWYKKyNlbmRpZgorCisjaWYgZGVmaW5lZCAoX18zODZCU0RfXykKKyAgcHJpbnRmICgiaTM4Ni1wYy1ic2RcbiIpOyBleGl0ICgwKTsKKyNlbmRpZgorCisjaWYgZGVmaW5lZCAoc2VxdWVudCkKKyNpZiBkZWZpbmVkIChpMzg2KQorICBwcmludGYgKCJpMzg2LXNlcXVlbnQtZHluaXhcbiIpOyBleGl0ICgwKTsKKyNlbmRpZgorI2lmIGRlZmluZWQgKG5zMzIwMDApCisgIHByaW50ZiAoIm5zMzJrLXNlcXVlbnQtZHluaXhcbiIpOyBleGl0ICgwKTsKKyNlbmRpZgorI2VuZGlmCisKKyNpZiBkZWZpbmVkIChfU0VRVUVOVF8pCisgIHN0cnVjdCB1dHNuYW1lIHVuOworCisgIHVuYW1lKCZ1bik7CisgIGlmIChzdHJuY21wKHVuLnZlcnNpb24sICJWMiIsIDIpID09IDApIHsKKyAgICBwcmludGYgKCJpMzg2LXNlcXVlbnQtcHR4MlxuIik7IGV4aXQgKDApOworICB9CisgIGlmIChzdHJuY21wKHVuLnZlcnNpb24sICJWMSIsIDIpID09IDApIHsgLyogWFhYIGlzIFYxIGNvcnJlY3Q/ICovCisgICAgcHJpbnRmICgiaTM4Ni1zZXF1ZW50LXB0eDFcbiIpOyBleGl0ICgwKTsKKyAgfQorICBwcmludGYgKCJpMzg2LXNlcXVlbnQtcHR4XG4iKTsgZXhpdCAoMCk7CisjZW5kaWYKKworI2lmIGRlZmluZWQgKHZheCkKKyNpZiAhZGVmaW5lZCAodWx0cml4KQorI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgorI2lmIGRlZmluZWQgKEJTRCkKKyNpZiBCU0QgPT0gNDMKKyAgcHJpbnRmICgidmF4LWRlYy1ic2Q0LjNcbiIpOyBleGl0ICgwKTsKKyNlbHNlCisjaWYgQlNEID09IDE5OTAwNgorICBwcmludGYgKCJ2YXgtZGVjLWJzZDQuM3Jlbm9cbiIpOyBleGl0ICgwKTsKKyNlbHNlCisgIHByaW50ZiAoInZheC1kZWMtYnNkXG4iKTsgZXhpdCAoMCk7CisjZW5kaWYKKyNlbmRpZgorI2Vsc2UKKyAgcHJpbnRmICgidmF4LWRlYy1ic2RcbiIpOyBleGl0ICgwKTsKKyNlbmRpZgorI2Vsc2UKKyNpZiBkZWZpbmVkKF9TSVpFX1RfKSB8fCBkZWZpbmVkKFNJR0xPU1QpCisgIHN0cnVjdCB1dHNuYW1lIHVuOworICB1bmFtZSAoJnVuKTsKKyAgcHJpbnRmICgidmF4LWRlYy11bHRyaXglc1xuIiwgdW4ucmVsZWFzZSk7IGV4aXQgKDApOworI2Vsc2UKKyAgcHJpbnRmICgidmF4LWRlYy11bHRyaXhcbiIpOyBleGl0ICgwKTsKKyNlbmRpZgorI2VuZGlmCisjZW5kaWYKKyNpZiBkZWZpbmVkKHVsdHJpeCkgfHwgZGVmaW5lZChfdWx0cml4KSB8fCBkZWZpbmVkKF9fdWx0cml4KSB8fCBkZWZpbmVkKF9fdWx0cml4X18pCisjaWYgZGVmaW5lZChtaXBzKSB8fCBkZWZpbmVkKF9fbWlwcykgfHwgZGVmaW5lZChfX21pcHNfXykgfHwgZGVmaW5lZChNSVBTKSB8fCBkZWZpbmVkKF9fTUlQU19fKQorI2lmIGRlZmluZWQoX1NJWkVfVF8pIHx8IGRlZmluZWQoU0lHTE9TVCkKKyAgc3RydWN0IHV0c25hbWUgKnVuOworICB1bmFtZSAoJnVuKTsKKyAgcHJpbnRmICgibWlwcy1kZWMtdWx0cml4JXNcbiIsIHVuLnJlbGVhc2UpOyBleGl0ICgwKTsKKyNlbHNlCisgIHByaW50ZiAoIm1pcHMtZGVjLXVsdHJpeFxuIik7IGV4aXQgKDApOworI2VuZGlmCisjZW5kaWYKKyNlbmRpZgorCisjaWYgZGVmaW5lZCAoYWxsaWFudCkgJiYgZGVmaW5lZCAoaTg2MCkKKyAgcHJpbnRmICgiaTg2MC1hbGxpYW50LWJzZFxuIik7IGV4aXQgKDApOworI2VuZGlmCisKKyAgZXhpdCAoMSk7Cit9CitFT0YKKworJENDX0ZPUl9CVUlMRCAtbyAiJGR1bW15IiAiJGR1bW15LmMiIDI+L2Rldi9udWxsICYmIFNZU1RFTV9OQU1FPWAiJGR1bW15ImAgJiYKKwl7IGVjaG8gIiRTWVNURU1fTkFNRSI7IGV4aXQ7IH0KKworIyBBcG9sbG9zIHB1dCB0aGUgc3lzdGVtIHR5cGUgaW4gdGhlIGVudmlyb25tZW50LgordGVzdCAtZCAvdXNyL2Fwb2xsbyAmJiB7IGVjaG8gIiRJU1AtYXBvbGxvLSRTWVNUWVBFIjsgZXhpdDsgfQorCitlY2hvICIkMDogdW5hYmxlIHRvIGd1ZXNzIHN5c3RlbSB0eXBlIiA+JjIKKworY2FzZSAkVU5BTUVfTUFDSElORTokVU5BTUVfU1lTVEVNIGluCisgICAgbWlwczpMaW51eCB8IG1pcHM2NDpMaW51eCkKKwkjIElmIHdlIGdvdCBoZXJlIG9uIE1JUFMgR05VL0xpbnV4LCBvdXRwdXQgZXh0cmEgaW5mb3JtYXRpb24uCisJY2F0ID4mMiA8PEVPRgorCitOT1RFOiBNSVBTIEdOVS9MaW51eCBzeXN0ZW1zIHJlcXVpcmUgYSBDIGNvbXBpbGVyIHRvIGZ1bGx5IHJlY29nbml6ZQordGhlIHN5c3RlbSB0eXBlLiBQbGVhc2UgaW5zdGFsbCBhIEMgY29tcGlsZXIgYW5kIHRyeSBhZ2Fpbi4KK0VPRgorCTs7Citlc2FjCisKK2NhdCA+JjIgPDxFT0YKKworVGhpcyBzY3JpcHQgKHZlcnNpb24gJHRpbWVzdGFtcCksIGhhcyBmYWlsZWQgdG8gcmVjb2duaXplIHRoZQorb3BlcmF0aW5nIHN5c3RlbSB5b3UgYXJlIHVzaW5nLiBJZiB5b3VyIHNjcmlwdCBpcyBvbGQsIG92ZXJ3cml0ZSAqYWxsKgorY29waWVzIG9mIGNvbmZpZy5ndWVzcyBhbmQgY29uZmlnLnN1YiB3aXRoIHRoZSBsYXRlc3QgdmVyc2lvbnMgZnJvbToKKworICBodHRwczovL2dpdC5zYXZhbm5haC5nbnUub3JnL2NnaXQvY29uZmlnLmdpdC9wbGFpbi9jb25maWcuZ3Vlc3MKK2FuZAorICBodHRwczovL2dpdC5zYXZhbm5haC5nbnUub3JnL2NnaXQvY29uZmlnLmdpdC9wbGFpbi9jb25maWcuc3ViCitFT0YKKworb3VyX3llYXI9YGVjaG8gJHRpbWVzdGFtcCB8IHNlZCAncywtLiosLCdgCit0aGlzeWVhcj1gZGF0ZSArJVlgCisjIHNoZWxsY2hlY2sgZGlzYWJsZT1TQzIwMDMKK3NjcmlwdF9hZ2U9YGV4cHIgIiR0aGlzeWVhciIgLSAiJG91cl95ZWFyImAKK2lmIHRlc3QgIiRzY3JpcHRfYWdlIiAtbHQgMyA7IHRoZW4KKyAgIGNhdCA+JjIgPDxFT0YKKworSWYgJDAgaGFzIGFscmVhZHkgYmVlbiB1cGRhdGVkLCBzZW5kIHRoZSBmb2xsb3dpbmcgZGF0YSBhbmQgYW55CitpbmZvcm1hdGlvbiB5b3UgdGhpbmsgbWlnaHQgYmUgcGVydGluZW50IHRvIGNvbmZpZy1wYXRjaGVzQGdudS5vcmcgdG8KK3Byb3ZpZGUgdGhlIG5lY2Vzc2FyeSBpbmZvcm1hdGlvbiB0byBoYW5kbGUgeW91ciBzeXN0ZW0uCisKK2NvbmZpZy5ndWVzcyB0aW1lc3RhbXAgPSAkdGltZXN0YW1wCisKK3VuYW1lIC1tID0gYCh1bmFtZSAtbSkgMj4vZGV2L251bGwgfHwgZWNobyB1bmtub3duYAordW5hbWUgLXIgPSBgKHVuYW1lIC1yKSAyPi9kZXYvbnVsbCB8fCBlY2hvIHVua25vd25gCit1bmFtZSAtcyA9IGAodW5hbWUgLXMpIDI+L2Rldi9udWxsIHx8IGVjaG8gdW5rbm93bmAKK3VuYW1lIC12ID0gYCh1bmFtZSAtdikgMj4vZGV2L251bGwgfHwgZWNobyB1bmtub3duYAorCisvdXNyL2Jpbi91bmFtZSAtcCA9IGAoL3Vzci9iaW4vdW5hbWUgLXApIDI+L2Rldi9udWxsYAorL2Jpbi91bmFtZSAtWCAgICAgPSBgKC9iaW4vdW5hbWUgLVgpIDI+L2Rldi9udWxsYAorCitob3N0aW5mbyAgICAgICAgICAgICAgID0gYChob3N0aW5mbykgMj4vZGV2L251bGxgCisvYmluL3VuaXZlcnNlICAgICAgICAgID0gYCgvYmluL3VuaXZlcnNlKSAyPi9kZXYvbnVsbGAKKy91c3IvYmluL2FyY2ggLWsgICAgICAgPSBgKC91c3IvYmluL2FyY2ggLWspIDI+L2Rldi9udWxsYAorL2Jpbi9hcmNoICAgICAgICAgICAgICA9IGAoL2Jpbi9hcmNoKSAyPi9kZXYvbnVsbGAKKy91c3IvYmluL29zbGV2ZWwgICAgICAgPSBgKC91c3IvYmluL29zbGV2ZWwpIDI+L2Rldi9udWxsYAorL3Vzci9jb252ZXgvZ2V0c3lzaW5mbyA9IGAoL3Vzci9jb252ZXgvZ2V0c3lzaW5mbykgMj4vZGV2L251bGxgCisKK1VOQU1FX01BQ0hJTkUgPSAiJFVOQU1FX01BQ0hJTkUiCitVTkFNRV9SRUxFQVNFID0gIiRVTkFNRV9SRUxFQVNFIgorVU5BTUVfU1lTVEVNICA9ICIkVU5BTUVfU1lTVEVNIgorVU5BTUVfVkVSU0lPTiA9ICIkVU5BTUVfVkVSU0lPTiIKK0VPRgorZmkKKworZXhpdCAxCisKKyMgTG9jYWwgdmFyaWFibGVzOgorIyBldmFsOiAoYWRkLWhvb2sgJ2JlZm9yZS1zYXZlLWhvb2sgJ3RpbWUtc3RhbXApCisjIHRpbWUtc3RhbXAtc3RhcnQ6ICJ0aW1lc3RhbXA9JyIKKyMgdGltZS1zdGFtcC1mb3JtYXQ6ICIlOnktJTAybS0lMDJkIgorIyB0aW1lLXN0YW1wLWVuZDogIiciCisjIEVuZDoKZGlmZiAtLWdpdCBhL2FjZGlyL2NvbmZpZy5zdWIgYi9hY2Rpci9jb25maWcuc3ViCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmJkYTEwNjYKLS0tIC9kZXYvbnVsbAorKysgYi9hY2Rpci9jb25maWcuc3ViCkBAIC0wLDAgKzEsMTg5MCBAQAorIyEgL2Jpbi9zaAorIyBDb25maWd1cmF0aW9uIHZhbGlkYXRpb24gc3Vicm91dGluZSBzY3JpcHQuCisjICAgQ29weXJpZ2h0IDE5OTItMjAyMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworIyBzaGVsbGNoZWNrIGRpc2FibGU9U0MyMDA2LFNDMjI2OCAjIHNlZSBiZWxvdyBmb3IgcmF0aW9uYWxlCisKK3RpbWVzdGFtcD0nMjAyMi0wMS0wMycKKworIyBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorIyB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgorIyAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisjIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyMgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgPGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKyMKKyMgQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGlmIHlvdQorIyBkaXN0cmlidXRlIHRoaXMgZmlsZSBhcyBwYXJ0IG9mIGEgcHJvZ3JhbSB0aGF0IGNvbnRhaW5zIGEKKyMgY29uZmlndXJhdGlvbiBzY3JpcHQgZ2VuZXJhdGVkIGJ5IEF1dG9jb25mLCB5b3UgbWF5IGluY2x1ZGUgaXQgdW5kZXIKKyMgdGhlIHNhbWUgZGlzdHJpYnV0aW9uIHRlcm1zIHRoYXQgeW91IHVzZSBmb3IgdGhlIHJlc3Qgb2YgdGhhdAorIyBwcm9ncmFtLiAgVGhpcyBFeGNlcHRpb24gaXMgYW4gYWRkaXRpb25hbCBwZXJtaXNzaW9uIHVuZGVyIHNlY3Rpb24gNworIyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIHZlcnNpb24gMyAoIkdQTHYzIikuCisKKworIyBQbGVhc2Ugc2VuZCBwYXRjaGVzIHRvIDxjb25maWctcGF0Y2hlc0BnbnUub3JnPi4KKyMKKyMgQ29uZmlndXJhdGlvbiBzdWJyb3V0aW5lIHRvIHZhbGlkYXRlIGFuZCBjYW5vbmljYWxpemUgYSBjb25maWd1cmF0aW9uIHR5cGUuCisjIFN1cHBseSB0aGUgc3BlY2lmaWVkIGNvbmZpZ3VyYXRpb24gdHlwZSBhcyBhbiBhcmd1bWVudC4KKyMgSWYgaXQgaXMgaW52YWxpZCwgd2UgcHJpbnQgYW4gZXJyb3IgbWVzc2FnZSBvbiBzdGRlcnIgYW5kIGV4aXQgd2l0aCBjb2RlIDEuCisjIE90aGVyd2lzZSwgd2UgcHJpbnQgdGhlIGNhbm9uaWNhbCBjb25maWcgdHlwZSBvbiBzdGRvdXQgYW5kIHN1Y2NlZWQuCisKKyMgWW91IGNhbiBnZXQgdGhlIGxhdGVzdCB2ZXJzaW9uIG9mIHRoaXMgc2NyaXB0IGZyb206CisjIGh0dHBzOi8vZ2l0LnNhdmFubmFoLmdudS5vcmcvY2dpdC9jb25maWcuZ2l0L3BsYWluL2NvbmZpZy5zdWIKKworIyBUaGlzIGZpbGUgaXMgc3VwcG9zZWQgdG8gYmUgdGhlIHNhbWUgZm9yIGFsbCBHTlUgcGFja2FnZXMKKyMgYW5kIHJlY29nbml6ZSBhbGwgdGhlIENQVSB0eXBlcywgc3lzdGVtIHR5cGVzIGFuZCBhbGlhc2VzCisjIHRoYXQgYXJlIG1lYW5pbmdmdWwgd2l0aCAqYW55KiBHTlUgc29mdHdhcmUuCisjIEVhY2ggcGFja2FnZSBpcyByZXNwb25zaWJsZSBmb3IgcmVwb3J0aW5nIHdoaWNoIHZhbGlkIGNvbmZpZ3VyYXRpb25zCisjIGl0IGRvZXMgbm90IHN1cHBvcnQuICBUaGUgdXNlciBzaG91bGQgYmUgYWJsZSB0byBkaXN0aW5ndWlzaAorIyBhIGZhaWx1cmUgdG8gc3VwcG9ydCBhIHZhbGlkIGNvbmZpZ3VyYXRpb24gZnJvbSBhIG1lYW5pbmdsZXNzCisjIGNvbmZpZ3VyYXRpb24uCisKKyMgVGhlIGdvYWwgb2YgdGhpcyBmaWxlIGlzIHRvIG1hcCBhbGwgdGhlIHZhcmlvdXMgdmFyaWF0aW9ucyBvZiBhIGdpdmVuCisjIG1hY2hpbmUgc3BlY2lmaWNhdGlvbiBpbnRvIGEgc2luZ2xlIHNwZWNpZmljYXRpb24gaW4gdGhlIGZvcm06CisjCUNQVV9UWVBFLU1BTlVGQUNUVVJFUi1PUEVSQVRJTkdfU1lTVEVNCisjIG9yIGluIHNvbWUgY2FzZXMsIHRoZSBuZXdlciBmb3VyLXBhcnQgZm9ybToKKyMJQ1BVX1RZUEUtTUFOVUZBQ1RVUkVSLUtFUk5FTC1PUEVSQVRJTkdfU1lTVEVNCisjIEl0IGlzIHdyb25nIHRvIGVjaG8gYW55IG90aGVyIHR5cGUgb2Ygc3BlY2lmaWNhdGlvbi4KKworIyBUaGUgInNoZWxsY2hlY2sgZGlzYWJsZSIgbGluZSBhYm92ZSB0aGUgdGltZXN0YW1wIGluaGliaXRzIGNvbXBsYWludHMKKyMgYWJvdXQgZmVhdHVyZXMgYW5kIGxpbWl0YXRpb25zIG9mIHRoZSBjbGFzc2ljIEJvdXJuZSBzaGVsbCB0aGF0IHdlcmUKKyMgc3VwZXJzZWRlZCBvciBsaWZ0ZWQgaW4gUE9TSVguICBIb3dldmVyLCB0aGlzIHNjcmlwdCBpZGVudGlmaWVzIGEgd2lkZQorIyB2YXJpZXR5IG9mIHByZS1QT1NJWCBzeXN0ZW1zIHRoYXQgZG8gbm90IGhhdmUgUE9TSVggc2hlbGxzIGF0IGFsbCwgYW5kCisjIGV2ZW4gc29tZSByZWFzb25hYmx5IGN1cnJlbnQgc3lzdGVtcyAoU29sYXJpcyAxMCBhcyBjYXNlLWluLXBvaW50KSBzdGlsbAorIyBoYXZlIGEgcHJlLVBPU0lYIC9iaW4vc2guCisKK21lPWBlY2hvICIkMCIgfCBzZWQgLWUgJ3MsLiovLCwnYAorCit1c2FnZT0iXAorVXNhZ2U6ICQwIFtPUFRJT05dIENQVS1NRlItT1BTWVMgb3IgQUxJQVMKKworQ2Fub25pY2FsaXplIGEgY29uZmlndXJhdGlvbiBuYW1lLgorCitPcHRpb25zOgorICAtaCwgLS1oZWxwICAgICAgICAgcHJpbnQgdGhpcyBoZWxwLCB0aGVuIGV4aXQKKyAgLXQsIC0tdGltZS1zdGFtcCAgIHByaW50IGRhdGUgb2YgbGFzdCBtb2RpZmljYXRpb24sIHRoZW4gZXhpdAorICAtdiwgLS12ZXJzaW9uICAgICAgcHJpbnQgdmVyc2lvbiBudW1iZXIsIHRoZW4gZXhpdAorCitSZXBvcnQgYnVncyBhbmQgcGF0Y2hlcyB0byA8Y29uZmlnLXBhdGNoZXNAZ251Lm9yZz4uIgorCit2ZXJzaW9uPSJcCitHTlUgY29uZmlnLnN1YiAoJHRpbWVzdGFtcCkKKworQ29weXJpZ2h0IDE5OTItMjAyMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworVGhpcyBpcyBmcmVlIHNvZnR3YXJlOyBzZWUgdGhlIHNvdXJjZSBmb3IgY29weWluZyBjb25kaXRpb25zLiAgVGhlcmUgaXMgTk8KK3dhcnJhbnR5OyBub3QgZXZlbiBmb3IgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiIKKworaGVscD0iCitUcnkgXGAkbWUgLS1oZWxwJyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4iCisKKyMgUGFyc2UgY29tbWFuZCBsaW5lCit3aGlsZSB0ZXN0ICQjIC1ndCAwIDsgZG8KKyAgY2FzZSAkMSBpbgorICAgIC0tdGltZS1zdGFtcCB8IC0tdGltZSogfCAtdCApCisgICAgICAgZWNobyAiJHRpbWVzdGFtcCIgOyBleGl0IDs7CisgICAgLS12ZXJzaW9uIHwgLXYgKQorICAgICAgIGVjaG8gIiR2ZXJzaW9uIiA7IGV4aXQgOzsKKyAgICAtLWhlbHAgfCAtLWgqIHwgLWggKQorICAgICAgIGVjaG8gIiR1c2FnZSI7IGV4aXQgOzsKKyAgICAtLSApICAgICAjIFN0b3Agb3B0aW9uIHByb2Nlc3NpbmcKKyAgICAgICBzaGlmdDsgYnJlYWsgOzsKKyAgICAtICkJIyBVc2Ugc3RkaW4gYXMgaW5wdXQuCisgICAgICAgYnJlYWsgOzsKKyAgICAtKiApCisgICAgICAgZWNobyAiJG1lOiBpbnZhbGlkIG9wdGlvbiAkMSRoZWxwIiA+JjIKKyAgICAgICBleGl0IDEgOzsKKworICAgICpsb2NhbCopCisgICAgICAgIyBGaXJzdCBwYXNzIHRocm91Z2ggYW55IGxvY2FsIG1hY2hpbmUgdHlwZXMuCisgICAgICAgZWNobyAiJDEiCisgICAgICAgZXhpdCA7OworCisgICAgKiApCisgICAgICAgYnJlYWsgOzsKKyAgZXNhYworZG9uZQorCitjYXNlICQjIGluCisgMCkgZWNobyAiJG1lOiBtaXNzaW5nIGFyZ3VtZW50JGhlbHAiID4mMgorICAgIGV4aXQgMTs7CisgMSkgOzsKKyAqKSBlY2hvICIkbWU6IHRvbyBtYW55IGFyZ3VtZW50cyRoZWxwIiA+JjIKKyAgICBleGl0IDE7OworZXNhYworCisjIFNwbGl0IGZpZWxkcyBvZiBjb25maWd1cmF0aW9uIHR5cGUKKyMgc2hlbGxjaGVjayBkaXNhYmxlPVNDMjE2Mgorc2F2ZWRfSUZTPSRJRlMKK0lGUz0iLSIgcmVhZCBmaWVsZDEgZmllbGQyIGZpZWxkMyBmaWVsZDQgPDxFT0YKKyQxCitFT0YKK0lGUz0kc2F2ZWRfSUZTCisKKyMgU2VwYXJhdGUgaW50byBsb2dpY2FsIGNvbXBvbmVudHMgZm9yIGZ1cnRoZXIgdmFsaWRhdGlvbgorY2FzZSAkMSBpbgorCSotKi0qLSotKikKKwkJZWNobyBJbnZhbGlkIGNvbmZpZ3VyYXRpb24gXGAiJDEiXCc6IG1vcmUgdGhhbiBmb3VyIGNvbXBvbmVudHMgPiYyCisJCWV4aXQgMQorCQk7OworCSotKi0qLSopCisJCWJhc2ljX21hY2hpbmU9JGZpZWxkMS0kZmllbGQyCisJCWJhc2ljX29zPSRmaWVsZDMtJGZpZWxkNAorCQk7OworCSotKi0qKQorCQkjIEFtYmlndW91cyB3aGV0aGVyIENPTVBBTlkgaXMgcHJlc2VudCwgb3Igc2tpcHBlZCBhbmQgS0VSTkVMLU9TIGlzIHR3bworCQkjIHBhcnRzCisJCW1heWJlX29zPSRmaWVsZDItJGZpZWxkMworCQljYXNlICRtYXliZV9vcyBpbgorCQkJbnRvLXFueCogfCBsaW51eC0qIHwgdWNsaW51eC11Y2xpYmMqIFwKKwkJCXwgdWNsaW51eC1nbnUqIHwga2ZyZWVic2QqLWdudSogfCBrbmV0YnNkKi1nbnUqIHwgbmV0YnNkKi1nbnUqIFwKKwkJCXwgbmV0YnNkKi1lYWJpKiB8IGtvcGVuc29sYXJpcyotZ251KiB8IGNsb3VkYWJpKi1lYWJpKiBcCisJCQl8IHN0b3JtLWNoYW9zKiB8IG9zMi1lbXgqIHwgcnRtay1ub3ZhKikKKwkJCQliYXNpY19tYWNoaW5lPSRmaWVsZDEKKwkJCQliYXNpY19vcz0kbWF5YmVfb3MKKwkJCQk7OworCQkJYW5kcm9pZC1saW51eCkKKwkJCQliYXNpY19tYWNoaW5lPSRmaWVsZDEtdW5rbm93bgorCQkJCWJhc2ljX29zPWxpbnV4LWFuZHJvaWQKKwkJCQk7OworCQkJKikKKwkJCQliYXNpY19tYWNoaW5lPSRmaWVsZDEtJGZpZWxkMgorCQkJCWJhc2ljX29zPSRmaWVsZDMKKwkJCQk7OworCQllc2FjCisJCTs7CisJKi0qKQorCQkjIEEgbG9uZSBjb25maWcgd2UgaGFwcGVuIHRvIG1hdGNoIG5vdCBmaXR0aW5nIGFueSBwYXR0ZXJuCisJCWNhc2UgJGZpZWxkMS0kZmllbGQyIGluCisJCQlkZWNzdGF0aW9uLTMxMDApCisJCQkJYmFzaWNfbWFjaGluZT1taXBzLWRlYworCQkJCWJhc2ljX29zPQorCQkJCTs7CisJCQkqLSopCisJCQkJIyBTZWNvbmQgY29tcG9uZW50IGlzIHVzdWFsbHksIGJ1dCBub3QgYWx3YXlzIHRoZSBPUworCQkJCWNhc2UgJGZpZWxkMiBpbgorCQkJCQkjIFByZXZlbnQgZm9sbG93aW5nIGNsYXVzZSBmcm9tIGhhbmRsaW5nIHRoaXMgdmFsaWQgb3MKKwkJCQkJc3VuKm9zKikKKwkJCQkJCWJhc2ljX21hY2hpbmU9JGZpZWxkMQorCQkJCQkJYmFzaWNfb3M9JGZpZWxkMgorCQkJCQkJOzsKKwkJCQkJemVwaHlyKikKKwkJCQkJCWJhc2ljX21hY2hpbmU9JGZpZWxkMS11bmtub3duCisJCQkJCQliYXNpY19vcz0kZmllbGQyCisJCQkJCQk7OworCQkJCQkjIE1hbnVmYWN0dXJlcnMKKwkJCQkJZGVjKiB8IG1pcHMqIHwgc2VxdWVudCogfCBlbmNvcmUqIHwgcGM1MzMqIHwgc2dpKiB8IHNvbnkqIFwKKwkJCQkJfCBhdHQqIHwgNzMwMCogfCAzMzAwKiB8IGRlbHRhKiB8IG1vdG9yb2xhKiB8IHN1blsyMzRdKiBcCisJCQkJCXwgdW5pY29tKiB8IGlibSogfCBuZXh0IHwgaHAgfCBpc2kqIHwgYXBvbGxvIHwgYWx0b3MqIFwKKwkJCQkJfCBjb252ZXJnZW50KiB8IG5jciogfCBuZXdzIHwgMzIqIHwgMzYwMCogfCAzMTAwKiBcCisJCQkJCXwgaGl0YWNoaSogfCBjWzEyM10qIHwgY29udmV4KiB8IHN1biB8IGNyZHMgfCBvbXJvbiogfCBkZyBcCisJCQkJCXwgdWx0cmEgfCB0dGkqIHwgaGFycmlzIHwgZG9scGhpbiB8IGhpZ2hsZXZlbCB8IGdvdWxkIFwKKwkJCQkJfCBjYm0gfCBucyB8IG1hc3Njb21wIHwgYXBwbGUgfCBheGlzIHwga251dGggfCBjcmF5IFwKKwkJCQkJfCBtaWNyb2JsYXplKiB8IHNpbSB8IGNpc2NvIFwKKwkJCQkJfCBva2kgfCB3ZWMgfCB3cnMgfCB3aW5ib25kKQorCQkJCQkJYmFzaWNfbWFjaGluZT0kZmllbGQxLSRmaWVsZDIKKwkJCQkJCWJhc2ljX29zPQorCQkJCQkJOzsKKwkJCQkJKikKKwkJCQkJCWJhc2ljX21hY2hpbmU9JGZpZWxkMQorCQkJCQkJYmFzaWNfb3M9JGZpZWxkMgorCQkJCQkJOzsKKwkJCQllc2FjCisJCQk7OworCQllc2FjCisJCTs7CisJKikKKwkJIyBDb252ZXJ0IHNpbmdsZS1jb21wb25lbnQgc2hvcnQtaGFuZHMgbm90IHZhbGlkIGFzIHBhcnQgb2YKKwkJIyBtdWx0aS1jb21wb25lbnQgY29uZmlndXJhdGlvbnMuCisJCWNhc2UgJGZpZWxkMSBpbgorCQkJMzg2YnNkKQorCQkJCWJhc2ljX21hY2hpbmU9aTM4Ni1wYworCQkJCWJhc2ljX29zPWJzZAorCQkJCTs7CisJCQlhMjlraGlmKQorCQkJCWJhc2ljX21hY2hpbmU9YTI5ay1hbWQKKwkJCQliYXNpY19vcz11ZGkKKwkJCQk7OworCQkJYWRvYmU2OGspCisJCQkJYmFzaWNfbWFjaGluZT1tNjgwMTAtYWRvYmUKKwkJCQliYXNpY19vcz1zY291dAorCQkJCTs7CisJCQlhbGxpYW50KQorCQkJCWJhc2ljX21hY2hpbmU9Zng4MC1hbGxpYW50CisJCQkJYmFzaWNfb3M9CisJCQkJOzsKKwkJCWFsdG9zIHwgYWx0b3MzMDY4KQorCQkJCWJhc2ljX21hY2hpbmU9bTY4ay1hbHRvcworCQkJCWJhc2ljX29zPQorCQkJCTs7CisJCQlhbTI5aykKKwkJCQliYXNpY19tYWNoaW5lPWEyOWstbm9uZQorCQkJCWJhc2ljX29zPWJzZAorCQkJCTs7CisJCQlhbWRhaGwpCisJCQkJYmFzaWNfbWFjaGluZT01ODAtYW1kYWhsCisJCQkJYmFzaWNfb3M9c3lzdgorCQkJCTs7CisJCQlhbWlnYSkKKwkJCQliYXNpY19tYWNoaW5lPW02OGstdW5rbm93bgorCQkJCWJhc2ljX29zPQorCQkJCTs7CisJCQlhbWlnYW9zIHwgYW1pZ2Fkb3MpCisJCQkJYmFzaWNfbWFjaGluZT1tNjhrLXVua25vd24KKwkJCQliYXNpY19vcz1hbWlnYW9zCisJCQkJOzsKKwkJCWFtaWdhdW5peCB8IGFtaXgpCisJCQkJYmFzaWNfbWFjaGluZT1tNjhrLXVua25vd24KKwkJCQliYXNpY19vcz1zeXN2NAorCQkJCTs7CisJCQlhcG9sbG82OCkKKwkJCQliYXNpY19tYWNoaW5lPW02OGstYXBvbGxvCisJCQkJYmFzaWNfb3M9c3lzdgorCQkJCTs7CisJCQlhcG9sbG82OGJzZCkKKwkJCQliYXNpY19tYWNoaW5lPW02OGstYXBvbGxvCisJCQkJYmFzaWNfb3M9YnNkCisJCQkJOzsKKwkJCWFyb3MpCisJCQkJYmFzaWNfbWFjaGluZT1pMzg2LXBjCisJCQkJYmFzaWNfb3M9YXJvcworCQkJCTs7CisJCQlhdXgpCisJCQkJYmFzaWNfbWFjaGluZT1tNjhrLWFwcGxlCisJCQkJYmFzaWNfb3M9YXV4CisJCQkJOzsKKwkJCWJhbGFuY2UpCisJCQkJYmFzaWNfbWFjaGluZT1uczMyay1zZXF1ZW50CisJCQkJYmFzaWNfb3M9ZHluaXgKKwkJCQk7OworCQkJYmxhY2tmaW4pCisJCQkJYmFzaWNfbWFjaGluZT1iZmluLXVua25vd24KKwkJCQliYXNpY19vcz1saW51eAorCQkJCTs7CisJCQljZWdjYykKKwkJCQliYXNpY19tYWNoaW5lPWFybS11bmtub3duCisJCQkJYmFzaWNfb3M9Y2VnY2MKKwkJCQk7OworCQkJY29udmV4LWMxKQorCQkJCWJhc2ljX21hY2hpbmU9YzEtY29udmV4CisJCQkJYmFzaWNfb3M9YnNkCisJCQkJOzsKKwkJCWNvbnZleC1jMikKKwkJCQliYXNpY19tYWNoaW5lPWMyLWNvbnZleAorCQkJCWJhc2ljX29zPWJzZAorCQkJCTs7CisJCQljb252ZXgtYzMyKQorCQkJCWJhc2ljX21hY2hpbmU9YzMyLWNvbnZleAorCQkJCWJhc2ljX29zPWJzZAorCQkJCTs7CisJCQljb252ZXgtYzM0KQorCQkJCWJhc2ljX21hY2hpbmU9YzM0LWNvbnZleAorCQkJCWJhc2ljX29zPWJzZAorCQkJCTs7CisJCQljb252ZXgtYzM4KQorCQkJCWJhc2ljX21hY2hpbmU9YzM4LWNvbnZleAorCQkJCWJhc2ljX29zPWJzZAorCQkJCTs7CisJCQljcmF5KQorCQkJCWJhc2ljX21hY2hpbmU9ajkwLWNyYXkKKwkJCQliYXNpY19vcz11bmljb3MKKwkJCQk7OworCQkJY3JkcyB8IHVub3MpCisJCQkJYmFzaWNfbWFjaGluZT1tNjhrLWNyZHMKKwkJCQliYXNpY19vcz0KKwkJCQk7OworCQkJZGEzMCkKKwkJCQliYXNpY19tYWNoaW5lPW02OGstZGEzMAorCQkJCWJhc2ljX29zPQorCQkJCTs7CisJCQlkZWNzdGF0aW9uIHwgcG1heCB8IHBtaW4gfCBkZWMzMTAwIHwgZGVjc3RhdG4pCisJCQkJYmFzaWNfbWFjaGluZT1taXBzLWRlYworCQkJCWJhc2ljX29zPQorCQkJCTs7CisJCQlkZWx0YTg4KQorCQkJCWJhc2ljX21hY2hpbmU9bTg4ay1tb3Rvcm9sYQorCQkJCWJhc2ljX29zPXN5c3YzCisJCQkJOzsKKwkJCWRpY29zKQorCQkJCWJhc2ljX21hY2hpbmU9aTY4Ni1wYworCQkJCWJhc2ljX29zPWRpY29zCisJCQkJOzsKKwkJCWRqZ3BwKQorCQkJCWJhc2ljX21hY2hpbmU9aTU4Ni1wYworCQkJCWJhc2ljX29zPW1zZG9zZGpncHAKKwkJCQk7OworCQkJZWJtb24yOWspCisJCQkJYmFzaWNfbWFjaGluZT1hMjlrLWFtZAorCQkJCWJhc2ljX29zPWVibW9uCisJCQkJOzsKKwkJCWVzMTgwMCB8IE9TRTY4ayB8IG9zZTY4ayB8IG9zZSB8IE9TRSkKKwkJCQliYXNpY19tYWNoaW5lPW02OGstZXJpY3Nzb24KKwkJCQliYXNpY19vcz1vc2UKKwkJCQk7OworCQkJZ21pY3JvKQorCQkJCWJhc2ljX21hY2hpbmU9dHJvbi1nbWljcm8KKwkJCQliYXNpY19vcz1zeXN2CisJCQkJOzsKKwkJCWdvMzIpCisJCQkJYmFzaWNfbWFjaGluZT1pMzg2LXBjCisJCQkJYmFzaWNfb3M9Z28zMgorCQkJCTs7CisJCQloODMwMGhtcykKKwkJCQliYXNpY19tYWNoaW5lPWg4MzAwLWhpdGFjaGkKKwkJCQliYXNpY19vcz1obXMKKwkJCQk7OworCQkJaDgzMDB4cmF5KQorCQkJCWJhc2ljX21hY2hpbmU9aDgzMDAtaGl0YWNoaQorCQkJCWJhc2ljX29zPXhyYXkKKwkJCQk7OworCQkJaDg1MDBobXMpCisJCQkJYmFzaWNfbWFjaGluZT1oODUwMC1oaXRhY2hpCisJCQkJYmFzaWNfb3M9aG1zCisJCQkJOzsKKwkJCWhhcnJpcykKKwkJCQliYXNpY19tYWNoaW5lPW04OGstaGFycmlzCisJCQkJYmFzaWNfb3M9c3lzdjMKKwkJCQk7OworCQkJaHAzMDAgfCBocDMwMGhwdXgpCisJCQkJYmFzaWNfbWFjaGluZT1tNjhrLWhwCisJCQkJYmFzaWNfb3M9aHB1eAorCQkJCTs7CisJCQlocDMwMGJzZCkKKwkJCQliYXNpY19tYWNoaW5lPW02OGstaHAKKwkJCQliYXNpY19vcz1ic2QKKwkJCQk7OworCQkJaHBwYW9zZikKKwkJCQliYXNpY19tYWNoaW5lPWhwcGExLjEtaHAKKwkJCQliYXNpY19vcz1vc2YKKwkJCQk7OworCQkJaHBwcm8pCisJCQkJYmFzaWNfbWFjaGluZT1ocHBhMS4xLWhwCisJCQkJYmFzaWNfb3M9cHJvZWxmCisJCQkJOzsKKwkJCWkzODZtYWNoKQorCQkJCWJhc2ljX21hY2hpbmU9aTM4Ni1tYWNoCisJCQkJYmFzaWNfb3M9bWFjaAorCQkJCTs7CisJCQlpc2k2OCB8IGlzaSkKKwkJCQliYXNpY19tYWNoaW5lPW02OGstaXNpCisJCQkJYmFzaWNfb3M9c3lzdgorCQkJCTs7CisJCQltNjhrbm9tbXUpCisJCQkJYmFzaWNfbWFjaGluZT1tNjhrLXVua25vd24KKwkJCQliYXNpY19vcz1saW51eAorCQkJCTs7CisJCQltYWdudW0gfCBtMzIzMCkKKwkJCQliYXNpY19tYWNoaW5lPW1pcHMtbWlwcworCQkJCWJhc2ljX29zPXN5c3YKKwkJCQk7OworCQkJbWVybGluKQorCQkJCWJhc2ljX21hY2hpbmU9bnMzMmstdXRlaworCQkJCWJhc2ljX29zPXN5c3YKKwkJCQk7OworCQkJbWluZ3c2NCkKKwkJCQliYXNpY19tYWNoaW5lPXg4Nl82NC1wYworCQkJCWJhc2ljX29zPW1pbmd3NjQKKwkJCQk7OworCQkJbWluZ3czMikKKwkJCQliYXNpY19tYWNoaW5lPWk2ODYtcGMKKwkJCQliYXNpY19vcz1taW5ndzMyCisJCQkJOzsKKwkJCW1pbmd3MzJjZSkKKwkJCQliYXNpY19tYWNoaW5lPWFybS11bmtub3duCisJCQkJYmFzaWNfb3M9bWluZ3czMmNlCisJCQkJOzsKKwkJCW1vbml0b3IpCisJCQkJYmFzaWNfbWFjaGluZT1tNjhrLXJvbTY4aworCQkJCWJhc2ljX29zPWNvZmYKKwkJCQk7OworCQkJbW9ycGhvcykKKwkJCQliYXNpY19tYWNoaW5lPXBvd2VycGMtdW5rbm93bgorCQkJCWJhc2ljX29zPW1vcnBob3MKKwkJCQk7OworCQkJbW94aWVib3gpCisJCQkJYmFzaWNfbWFjaGluZT1tb3hpZS11bmtub3duCisJCQkJYmFzaWNfb3M9bW94aWVib3gKKwkJCQk7OworCQkJbXNkb3MpCisJCQkJYmFzaWNfbWFjaGluZT1pMzg2LXBjCisJCQkJYmFzaWNfb3M9bXNkb3MKKwkJCQk7OworCQkJbXN5cykKKwkJCQliYXNpY19tYWNoaW5lPWk2ODYtcGMKKwkJCQliYXNpY19vcz1tc3lzCisJCQkJOzsKKwkJCW12cykKKwkJCQliYXNpY19tYWNoaW5lPWkzNzAtaWJtCisJCQkJYmFzaWNfb3M9bXZzCisJCQkJOzsKKwkJCW5hY2wpCisJCQkJYmFzaWNfbWFjaGluZT1sZTMyLXVua25vd24KKwkJCQliYXNpY19vcz1uYWNsCisJCQkJOzsKKwkJCW5jcjMwMDApCisJCQkJYmFzaWNfbWFjaGluZT1pNDg2LW5jcgorCQkJCWJhc2ljX29zPXN5c3Y0CisJCQkJOzsKKwkJCW5ldGJzZDM4NikKKwkJCQliYXNpY19tYWNoaW5lPWkzODYtcGMKKwkJCQliYXNpY19vcz1uZXRic2QKKwkJCQk7OworCQkJbmV0d2luZGVyKQorCQkJCWJhc2ljX21hY2hpbmU9YXJtdjRsLXJlYmVsCisJCQkJYmFzaWNfb3M9bGludXgKKwkJCQk7OworCQkJbmV3cyB8IG5ld3M3MDAgfCBuZXdzODAwIHwgbmV3czkwMCkKKwkJCQliYXNpY19tYWNoaW5lPW02OGstc29ueQorCQkJCWJhc2ljX29zPW5ld3NvcworCQkJCTs7CisJCQluZXdzMTAwMCkKKwkJCQliYXNpY19tYWNoaW5lPW02ODAzMC1zb255CisJCQkJYmFzaWNfb3M9bmV3c29zCisJCQkJOzsKKwkJCW5lY3Y3MCkKKwkJCQliYXNpY19tYWNoaW5lPXY3MC1uZWMKKwkJCQliYXNpY19vcz1zeXN2CisJCQkJOzsKKwkJCW5oMzAwMCkKKwkJCQliYXNpY19tYWNoaW5lPW02OGstaGFycmlzCisJCQkJYmFzaWNfb3M9Y3h1eAorCQkJCTs7CisJCQluaFs0NV0wMDApCisJCQkJYmFzaWNfbWFjaGluZT1tODhrLWhhcnJpcworCQkJCWJhc2ljX29zPWN4dXgKKwkJCQk7OworCQkJbmluZHk5NjApCisJCQkJYmFzaWNfbWFjaGluZT1pOTYwLWludGVsCisJCQkJYmFzaWNfb3M9bmluZHkKKwkJCQk7OworCQkJbW9uOTYwKQorCQkJCWJhc2ljX21hY2hpbmU9aTk2MC1pbnRlbAorCQkJCWJhc2ljX29zPW1vbjk2MAorCQkJCTs7CisJCQlub25zdG9wdXgpCisJCQkJYmFzaWNfbWFjaGluZT1taXBzLWNvbXBhcQorCQkJCWJhc2ljX29zPW5vbnN0b3B1eAorCQkJCTs7CisJCQlvczQwMCkKKwkJCQliYXNpY19tYWNoaW5lPXBvd2VycGMtaWJtCisJCQkJYmFzaWNfb3M9b3M0MDAKKwkJCQk7OworCQkJT1NFNjgwMDAgfCBvc2U2ODAwMCkKKwkJCQliYXNpY19tYWNoaW5lPW02ODAwMC1lcmljc3NvbgorCQkJCWJhc2ljX29zPW9zZQorCQkJCTs7CisJCQlvczY4aykKKwkJCQliYXNpY19tYWNoaW5lPW02OGstbm9uZQorCQkJCWJhc2ljX29zPW9zNjhrCisJCQkJOzsKKwkJCXBhcmFnb24pCisJCQkJYmFzaWNfbWFjaGluZT1pODYwLWludGVsCisJCQkJYmFzaWNfb3M9b3NmCisJCQkJOzsKKwkJCXBhcmlzYykKKwkJCQliYXNpY19tYWNoaW5lPWhwcGEtdW5rbm93bgorCQkJCWJhc2ljX29zPWxpbnV4CisJCQkJOzsKKwkJCXBzcCkKKwkJCQliYXNpY19tYWNoaW5lPW1pcHNhbGxlZ3JleGVsLXNvbnkKKwkJCQliYXNpY19vcz1wc3AKKwkJCQk7OworCQkJcHczMikKKwkJCQliYXNpY19tYWNoaW5lPWk1ODYtdW5rbm93bgorCQkJCWJhc2ljX29zPXB3MzIKKwkJCQk7OworCQkJcmRvcyB8IHJkb3M2NCkKKwkJCQliYXNpY19tYWNoaW5lPXg4Nl82NC1wYworCQkJCWJhc2ljX29zPXJkb3MKKwkJCQk7OworCQkJcmRvczMyKQorCQkJCWJhc2ljX21hY2hpbmU9aTM4Ni1wYworCQkJCWJhc2ljX29zPXJkb3MKKwkJCQk7OworCQkJcm9tNjhrKQorCQkJCWJhc2ljX21hY2hpbmU9bTY4ay1yb202OGsKKwkJCQliYXNpY19vcz1jb2ZmCisJCQkJOzsKKwkJCXNhMjkyMDApCisJCQkJYmFzaWNfbWFjaGluZT1hMjlrLWFtZAorCQkJCWJhc2ljX29zPXVkaQorCQkJCTs7CisJCQlzZWkpCisJCQkJYmFzaWNfbWFjaGluZT1taXBzLXNlaQorCQkJCWJhc2ljX29zPXNlaXV4CisJCQkJOzsKKwkJCXNlcXVlbnQpCisJCQkJYmFzaWNfbWFjaGluZT1pMzg2LXNlcXVlbnQKKwkJCQliYXNpY19vcz0KKwkJCQk7OworCQkJc3BzNykKKwkJCQliYXNpY19tYWNoaW5lPW02OGstYnVsbAorCQkJCWJhc2ljX29zPXN5c3YyCisJCQkJOzsKKwkJCXN0MjAwMCkKKwkJCQliYXNpY19tYWNoaW5lPW02OGstdGFuZGVtCisJCQkJYmFzaWNfb3M9CisJCQkJOzsKKwkJCXN0cmF0dXMpCisJCQkJYmFzaWNfbWFjaGluZT1pODYwLXN0cmF0dXMKKwkJCQliYXNpY19vcz1zeXN2NAorCQkJCTs7CisJCQlzdW4yKQorCQkJCWJhc2ljX21hY2hpbmU9bTY4MDAwLXN1bgorCQkJCWJhc2ljX29zPQorCQkJCTs7CisJCQlzdW4yb3MzKQorCQkJCWJhc2ljX21hY2hpbmU9bTY4MDAwLXN1bgorCQkJCWJhc2ljX29zPXN1bm9zMworCQkJCTs7CisJCQlzdW4yb3M0KQorCQkJCWJhc2ljX21hY2hpbmU9bTY4MDAwLXN1bgorCQkJCWJhc2ljX29zPXN1bm9zNAorCQkJCTs7CisJCQlzdW4zKQorCQkJCWJhc2ljX21hY2hpbmU9bTY4ay1zdW4KKwkJCQliYXNpY19vcz0KKwkJCQk7OworCQkJc3VuM29zMykKKwkJCQliYXNpY19tYWNoaW5lPW02OGstc3VuCisJCQkJYmFzaWNfb3M9c3Vub3MzCisJCQkJOzsKKwkJCXN1bjNvczQpCisJCQkJYmFzaWNfbWFjaGluZT1tNjhrLXN1bgorCQkJCWJhc2ljX29zPXN1bm9zNAorCQkJCTs7CisJCQlzdW40KQorCQkJCWJhc2ljX21hY2hpbmU9c3BhcmMtc3VuCisJCQkJYmFzaWNfb3M9CisJCQkJOzsKKwkJCXN1bjRvczMpCisJCQkJYmFzaWNfbWFjaGluZT1zcGFyYy1zdW4KKwkJCQliYXNpY19vcz1zdW5vczMKKwkJCQk7OworCQkJc3VuNG9zNCkKKwkJCQliYXNpY19tYWNoaW5lPXNwYXJjLXN1bgorCQkJCWJhc2ljX29zPXN1bm9zNAorCQkJCTs7CisJCQlzdW40c29sMikKKwkJCQliYXNpY19tYWNoaW5lPXNwYXJjLXN1bgorCQkJCWJhc2ljX29zPXNvbGFyaXMyCisJCQkJOzsKKwkJCXN1bjM4NiB8IHN1bjM4NmkgfCByb2FkcnVubmVyKQorCQkJCWJhc2ljX21hY2hpbmU9aTM4Ni1zdW4KKwkJCQliYXNpY19vcz0KKwkJCQk7OworCQkJc3YxKQorCQkJCWJhc2ljX21hY2hpbmU9c3YxLWNyYXkKKwkJCQliYXNpY19vcz11bmljb3MKKwkJCQk7OworCQkJc3ltbWV0cnkpCisJCQkJYmFzaWNfbWFjaGluZT1pMzg2LXNlcXVlbnQKKwkJCQliYXNpY19vcz1keW5peAorCQkJCTs7CisJCQl0M2UpCisJCQkJYmFzaWNfbWFjaGluZT1hbHBoYWV2NS1jcmF5CisJCQkJYmFzaWNfb3M9dW5pY29zCisJCQkJOzsKKwkJCXQ5MCkKKwkJCQliYXNpY19tYWNoaW5lPXQ5MC1jcmF5CisJCQkJYmFzaWNfb3M9dW5pY29zCisJCQkJOzsKKwkJCXRvYWQxKQorCQkJCWJhc2ljX21hY2hpbmU9cGRwMTAteGtsCisJCQkJYmFzaWNfb3M9dG9wczIwCisJCQkJOzsKKwkJCXRwZikKKwkJCQliYXNpY19tYWNoaW5lPXMzOTB4LWlibQorCQkJCWJhc2ljX29zPXRwZgorCQkJCTs7CisJCQl1ZGkyOWspCisJCQkJYmFzaWNfbWFjaGluZT1hMjlrLWFtZAorCQkJCWJhc2ljX29zPXVkaQorCQkJCTs7CisJCQl1bHRyYTMpCisJCQkJYmFzaWNfbWFjaGluZT1hMjlrLW55dQorCQkJCWJhc2ljX29zPXN5bTEKKwkJCQk7OworCQkJdjgxMCB8IG5lY3Y4MTApCisJCQkJYmFzaWNfbWFjaGluZT12ODEwLW5lYworCQkJCWJhc2ljX29zPW5vbmUKKwkJCQk7OworCQkJdmF4dikKKwkJCQliYXNpY19tYWNoaW5lPXZheC1kZWMKKwkJCQliYXNpY19vcz1zeXN2CisJCQkJOzsKKwkJCXZtcykKKwkJCQliYXNpY19tYWNoaW5lPXZheC1kZWMKKwkJCQliYXNpY19vcz12bXMKKwkJCQk7OworCQkJdnN0YSkKKwkJCQliYXNpY19tYWNoaW5lPWkzODYtcGMKKwkJCQliYXNpY19vcz12c3RhCisJCQkJOzsKKwkJCXZ4d29ya3M5NjApCisJCQkJYmFzaWNfbWFjaGluZT1pOTYwLXdycworCQkJCWJhc2ljX29zPXZ4d29ya3MKKwkJCQk7OworCQkJdnh3b3JrczY4KQorCQkJCWJhc2ljX21hY2hpbmU9bTY4ay13cnMKKwkJCQliYXNpY19vcz12eHdvcmtzCisJCQkJOzsKKwkJCXZ4d29ya3MyOWspCisJCQkJYmFzaWNfbWFjaGluZT1hMjlrLXdycworCQkJCWJhc2ljX29zPXZ4d29ya3MKKwkJCQk7OworCQkJeGJveCkKKwkJCQliYXNpY19tYWNoaW5lPWk2ODYtcGMKKwkJCQliYXNpY19vcz1taW5ndzMyCisJCQkJOzsKKwkJCXltcCkKKwkJCQliYXNpY19tYWNoaW5lPXltcC1jcmF5CisJCQkJYmFzaWNfb3M9dW5pY29zCisJCQkJOzsKKwkJCSopCisJCQkJYmFzaWNfbWFjaGluZT0kMQorCQkJCWJhc2ljX29zPQorCQkJCTs7CisJCWVzYWMKKwkJOzsKK2VzYWMKKworIyBEZWNvZGUgMS1jb21wb25lbnQgb3IgYWQtaG9jIGJhc2ljIG1hY2hpbmVzCitjYXNlICRiYXNpY19tYWNoaW5lIGluCisJIyBIZXJlIHdlIGhhbmRsZSB0aGUgZGVmYXVsdCBtYW51ZmFjdHVyZXIgb2YgY2VydGFpbiBDUFUgdHlwZXMuICBJdCBpcyBpbgorCSMgc29tZSBjYXNlcyB0aGUgb25seSBtYW51ZmFjdHVyZXIsIGluIG90aGVycywgaXQgaXMgdGhlIG1vc3QgcG9wdWxhci4KKwl3ODlrKQorCQljcHU9aHBwYTEuMQorCQl2ZW5kb3I9d2luYm9uZAorCQk7OworCW9wNTBuKQorCQljcHU9aHBwYTEuMQorCQl2ZW5kb3I9b2tpCisJCTs7CisJb3A2MGMpCisJCWNwdT1ocHBhMS4xCisJCXZlbmRvcj1va2kKKwkJOzsKKwlpYm0qKQorCQljcHU9aTM3MAorCQl2ZW5kb3I9aWJtCisJCTs7CisJb3Jpb24xMDUpCisJCWNwdT1jbGlwcGVyCisJCXZlbmRvcj1oaWdobGV2ZWwKKwkJOzsKKwltYWMgfCBtcHcgfCBtYWMtbXB3KQorCQljcHU9bTY4aworCQl2ZW5kb3I9YXBwbGUKKwkJOzsKKwlwbWFjIHwgcG1hYy1tcHcpCisJCWNwdT1wb3dlcnBjCisJCXZlbmRvcj1hcHBsZQorCQk7OworCisJIyBSZWNvZ25pemUgdGhlIHZhcmlvdXMgbWFjaGluZSBuYW1lcyBhbmQgYWxpYXNlcyB3aGljaCBzdGFuZAorCSMgZm9yIGEgQ1BVIHR5cGUgYW5kIGEgY29tcGFueSBhbmQgc29tZXRpbWVzIGV2ZW4gYW4gT1MuCisJM2IxIHwgNzMwMCB8IDczMDAtYXR0IHwgYXR0LTczMDAgfCBwYzczMDAgfCBzYWZhcmkgfCB1bml4cGMpCisJCWNwdT1tNjgwMDAKKwkJdmVuZG9yPWF0dAorCQk7OworCTNiKikKKwkJY3B1PXdlMzJrCisJCXZlbmRvcj1hdHQKKwkJOzsKKwlibHVlZ2VuZSopCisJCWNwdT1wb3dlcnBjCisJCXZlbmRvcj1pYm0KKwkJYmFzaWNfb3M9Y25rCisJCTs7CisJZGVjc3lzdGVtMTAqIHwgZGVjMTAqKQorCQljcHU9cGRwMTAKKwkJdmVuZG9yPWRlYworCQliYXNpY19vcz10b3BzMTAKKwkJOzsKKwlkZWNzeXN0ZW0yMCogfCBkZWMyMCopCisJCWNwdT1wZHAxMAorCQl2ZW5kb3I9ZGVjCisJCWJhc2ljX29zPXRvcHMyMAorCQk7OworCWRlbHRhIHwgMzMwMCB8IG1vdG9yb2xhLTMzMDAgfCBtb3Rvcm9sYS1kZWx0YSBcCisJICAgICAgfCAzMzAwLW1vdG9yb2xhIHwgZGVsdGEtbW90b3JvbGEpCisJCWNwdT1tNjhrCisJCXZlbmRvcj1tb3Rvcm9sYQorCQk7OworCWRweDIqKQorCQljcHU9bTY4aworCQl2ZW5kb3I9YnVsbAorCQliYXNpY19vcz1zeXN2MworCQk7OworCWVuY29yZSB8IHVtYXggfCBtbWF4KQorCQljcHU9bnMzMmsKKwkJdmVuZG9yPWVuY29yZQorCQk7OworCWVseHNpKQorCQljcHU9ZWx4c2kKKwkJdmVuZG9yPWVseHNpCisJCWJhc2ljX29zPSR7YmFzaWNfb3M6LWJzZH0KKwkJOzsKKwlmeDI4MDApCisJCWNwdT1pODYwCisJCXZlbmRvcj1hbGxpYW50CisJCTs7CisJZ2VuaXgpCisJCWNwdT1uczMyaworCQl2ZW5kb3I9bnMKKwkJOzsKKwloMzA1MHIqIHwgaGl1eCopCisJCWNwdT1ocHBhMS4xCisJCXZlbmRvcj1oaXRhY2hpCisJCWJhc2ljX29zPWhpdXh3ZTIKKwkJOzsKKwlocDNrOVswLTldWzAtOV0gfCBocDlbMC05XVswLTldKQorCQljcHU9aHBwYTEuMAorCQl2ZW5kb3I9aHAKKwkJOzsKKwlocDlrMlswLTldWzAtOV0gfCBocDlrMzFbMC05XSkKKwkJY3B1PW02ODAwMAorCQl2ZW5kb3I9aHAKKwkJOzsKKwlocDlrM1syLTldWzAtOV0pCisJCWNwdT1tNjhrCisJCXZlbmRvcj1ocAorCQk7OworCWhwOWs2WzAtOV1bMC05XSB8IGhwNlswLTldWzAtOV0pCisJCWNwdT1ocHBhMS4wCisJCXZlbmRvcj1ocAorCQk7OworCWhwOWs3WzAtNzldWzAtOV0gfCBocDdbMC03OV1bMC05XSkKKwkJY3B1PWhwcGExLjEKKwkJdmVuZG9yPWhwCisJCTs7CisJaHA5azc4WzAtOV0gfCBocDc4WzAtOV0pCisJCSMgRklYTUU6IHJlYWxseSBocHBhMi4wLWhwCisJCWNwdT1ocHBhMS4xCisJCXZlbmRvcj1ocAorCQk7OworCWhwOWs4WzY3XTEgfCBocDhbNjddMSB8IGhwOWs4MFsyNF0gfCBocDgwWzI0XSB8IGhwOWs4Wzc4XTkgfCBocDhbNzhdOSB8IGhwOWs4OTMgfCBocDg5MykKKwkJIyBGSVhNRTogcmVhbGx5IGhwcGEyLjAtaHAKKwkJY3B1PWhwcGExLjEKKwkJdmVuZG9yPWhwCisJCTs7CisJaHA5azhbMC05XVsxMzY3OV0gfCBocDhbMC05XVsxMzY3OV0pCisJCWNwdT1ocHBhMS4xCisJCXZlbmRvcj1ocAorCQk7OworCWhwOWs4WzAtOV1bMC05XSB8IGhwOFswLTldWzAtOV0pCisJCWNwdT1ocHBhMS4wCisJCXZlbmRvcj1ocAorCQk7OworCWkqODZ2MzIpCisJCWNwdT1gZWNobyAiJDEiIHwgc2VkIC1lICdzLzg2LiovODYvJ2AKKwkJdmVuZG9yPXBjCisJCWJhc2ljX29zPXN5c3YzMgorCQk7OworCWkqODZ2NCopCisJCWNwdT1gZWNobyAiJDEiIHwgc2VkIC1lICdzLzg2LiovODYvJ2AKKwkJdmVuZG9yPXBjCisJCWJhc2ljX29zPXN5c3Y0CisJCTs7CisJaSo4NnYpCisJCWNwdT1gZWNobyAiJDEiIHwgc2VkIC1lICdzLzg2LiovODYvJ2AKKwkJdmVuZG9yPXBjCisJCWJhc2ljX29zPXN5c3YKKwkJOzsKKwlpKjg2c29sMikKKwkJY3B1PWBlY2hvICIkMSIgfCBzZWQgLWUgJ3MvODYuKi84Ni8nYAorCQl2ZW5kb3I9cGMKKwkJYmFzaWNfb3M9c29sYXJpczIKKwkJOzsKKwlqOTAgfCBqOTAtY3JheSkKKwkJY3B1PWo5MAorCQl2ZW5kb3I9Y3JheQorCQliYXNpY19vcz0ke2Jhc2ljX29zOi11bmljb3N9CisJCTs7CisJaXJpcyB8IGlyaXM0ZCkKKwkJY3B1PW1pcHMKKwkJdmVuZG9yPXNnaQorCQljYXNlICRiYXNpY19vcyBpbgorCQkgICAgaXJpeCopCisJCQk7OworCQkgICAgKikKKwkJCWJhc2ljX29zPWlyaXg0CisJCQk7OworCQllc2FjCisJCTs7CisJbWluaWZyYW1lKQorCQljcHU9bTY4MDAwCisJCXZlbmRvcj1jb252ZXJnZW50CisJCTs7CisJKm1pbnQgfCBtaW50WzAtOV0qIHwgKk1pTlQgfCAqTWlOVFswLTldKikKKwkJY3B1PW02OGsKKwkJdmVuZG9yPWF0YXJpCisJCWJhc2ljX29zPW1pbnQKKwkJOzsKKwluZXdzLTM2MDAgfCByaXNjLW5ld3MpCisJCWNwdT1taXBzCisJCXZlbmRvcj1zb255CisJCWJhc2ljX29zPW5ld3NvcworCQk7OworCW5leHQgfCBtKi1uZXh0KQorCQljcHU9bTY4aworCQl2ZW5kb3I9bmV4dAorCQljYXNlICRiYXNpY19vcyBpbgorCQkgICAgb3BlbnN0ZXAqKQorCQkgICAgICAgIDs7CisJCSAgICBuZXh0c3RlcCopCisJCQk7OworCQkgICAgbnMyKikKKwkJICAgICAgYmFzaWNfb3M9bmV4dHN0ZXAyCisJCQk7OworCQkgICAgKikKKwkJICAgICAgYmFzaWNfb3M9bmV4dHN0ZXAzCisJCQk7OworCQllc2FjCisJCTs7CisJbnAxKQorCQljcHU9bnAxCisJCXZlbmRvcj1nb3VsZAorCQk7OworCW9wNTBuLSogfCBvcDYwYy0qKQorCQljcHU9aHBwYTEuMQorCQl2ZW5kb3I9b2tpCisJCWJhc2ljX29zPXByb2VsZgorCQk7OworCXBhLWhpdGFjaGkpCisJCWNwdT1ocHBhMS4xCisJCXZlbmRvcj1oaXRhY2hpCisJCWJhc2ljX29zPWhpdXh3ZTIKKwkJOzsKKwlwYmQpCisJCWNwdT1zcGFyYworCQl2ZW5kb3I9dHRpCisJCTs7CisJcGJiKQorCQljcHU9bTY4aworCQl2ZW5kb3I9dHRpCisJCTs7CisJcGM1MzIpCisJCWNwdT1uczMyaworCQl2ZW5kb3I9cGM1MzIKKwkJOzsKKwlwbikKKwkJY3B1PXBuCisJCXZlbmRvcj1nb3VsZAorCQk7OworCXBvd2VyKQorCQljcHU9cG93ZXIKKwkJdmVuZG9yPWlibQorCQk7OworCXBzMikKKwkJY3B1PWkzODYKKwkJdmVuZG9yPWlibQorCQk7OworCXJtWzQ2XTAwKQorCQljcHU9bWlwcworCQl2ZW5kb3I9c2llbWVucworCQk7OworCXJ0cGMgfCBydHBjLSopCisJCWNwdT1yb21wCisJCXZlbmRvcj1pYm0KKwkJOzsKKwlzZGUpCisJCWNwdT1taXBzaXNhMzIKKwkJdmVuZG9yPXNkZQorCQliYXNpY19vcz0ke2Jhc2ljX29zOi1lbGZ9CisJCTs7CisJc2ltc28td3JzKQorCQljcHU9c3BhcmNsaXRlCisJCXZlbmRvcj13cnMKKwkJYmFzaWNfb3M9dnh3b3JrcworCQk7OworCXRvd2VyIHwgdG93ZXItMzIpCisJCWNwdT1tNjhrCisJCXZlbmRvcj1uY3IKKwkJOzsKKwl2cHAqfHZ4fHZ4LSopCisJCWNwdT1mMzAxCisJCXZlbmRvcj1mdWppdHN1CisJCTs7CisJdzY1KQorCQljcHU9dzY1CisJCXZlbmRvcj13ZGMKKwkJOzsKKwl3ODlrLSopCisJCWNwdT1ocHBhMS4xCisJCXZlbmRvcj13aW5ib25kCisJCWJhc2ljX29zPXByb2VsZgorCQk7OworCW5vbmUpCisJCWNwdT1ub25lCisJCXZlbmRvcj1ub25lCisJCTs7CisJbGVvbnxsZW9uWzMtOV0pCisJCWNwdT1zcGFyYworCQl2ZW5kb3I9JGJhc2ljX21hY2hpbmUKKwkJOzsKKwlsZW9uLSp8bGVvblszLTldLSopCisJCWNwdT1zcGFyYworCQl2ZW5kb3I9YGVjaG8gIiRiYXNpY19tYWNoaW5lIiB8IHNlZCAncy8tLiovLydgCisJCTs7CisKKwkqLSopCisJCSMgc2hlbGxjaGVjayBkaXNhYmxlPVNDMjE2MgorCQlzYXZlZF9JRlM9JElGUworCQlJRlM9Ii0iIHJlYWQgY3B1IHZlbmRvciA8PEVPRgorJGJhc2ljX21hY2hpbmUKK0VPRgorCQlJRlM9JHNhdmVkX0lGUworCQk7OworCSMgV2UgdXNlIGBwYycgcmF0aGVyIHRoYW4gYHVua25vd24nCisJIyBiZWNhdXNlICgxKSB0aGF0J3Mgd2hhdCB0aGV5IG5vcm1hbGx5IGFyZSwgYW5kCisJIyAoMikgdGhlIHdvcmQgInVua25vd24iIHRlbmRzIHRvIGNvbmZ1c2UgYmVnaW5uaW5nIHVzZXJzLgorCWkqODYgfCB4ODZfNjQpCisJCWNwdT0kYmFzaWNfbWFjaGluZQorCQl2ZW5kb3I9cGMKKwkJOzsKKwkjIFRoZXNlIHJ1bGVzIGFyZSBkdXBsaWNhdGVkIGZyb20gYmVsb3cgZm9yIHNha2Ugb2YgdGhlIHNwZWNpYWwgY2FzZSBhYm92ZTsKKwkjIGkuZS4gdGhpbmdzIHRoYXQgbm9ybWFsaXplZCB0byB4ODYgYXJjaGVzIHNob3VsZCBhbHNvIGRlZmF1bHQgdG8gInBjIgorCXBjOTgpCisJCWNwdT1pMzg2CisJCXZlbmRvcj1wYworCQk7OworCXg2NCB8IGFtZDY0KQorCQljcHU9eDg2XzY0CisJCXZlbmRvcj1wYworCQk7OworCSMgUmVjb2duaXplIHRoZSBiYXNpYyBDUFUgdHlwZXMgd2l0aG91dCBjb21wYW55IG5hbWUuCisJKikKKwkJY3B1PSRiYXNpY19tYWNoaW5lCisJCXZlbmRvcj11bmtub3duCisJCTs7Citlc2FjCisKK3Vuc2V0IC12IGJhc2ljX21hY2hpbmUKKworIyBEZWNvZGUgYmFzaWMgbWFjaGluZXMgaW4gdGhlIGZ1bGwgYW5kIHByb3BlciBDUFUtQ29tcGFueSBmb3JtLgorY2FzZSAkY3B1LSR2ZW5kb3IgaW4KKwkjIEhlcmUgd2UgaGFuZGxlIHRoZSBkZWZhdWx0IG1hbnVmYWN0dXJlciBvZiBjZXJ0YWluIENQVSB0eXBlcyBpbiBjYW5vbmljYWwgZm9ybS4gSXQgaXMgaW4KKwkjIHNvbWUgY2FzZXMgdGhlIG9ubHkgbWFudWZhY3R1cmVyLCBpbiBvdGhlcnMsIGl0IGlzIHRoZSBtb3N0IHBvcHVsYXIuCisJY3JheW52LXVua25vd24pCisJCXZlbmRvcj1jcmF5CisJCWJhc2ljX29zPSR7YmFzaWNfb3M6LXVuaWNvc21wfQorCQk7OworCWM5MC11bmtub3duIHwgYzkwLWNyYXkpCisJCXZlbmRvcj1jcmF5CisJCWJhc2ljX29zPSR7QmFzaWNfb3M6LXVuaWNvc30KKwkJOzsKKwlmeDgwLXVua25vd24pCisJCXZlbmRvcj1hbGxpYW50CisJCTs7CisJcm9tcC11bmtub3duKQorCQl2ZW5kb3I9aWJtCisJCTs7CisJbW1peC11bmtub3duKQorCQl2ZW5kb3I9a251dGgKKwkJOzsKKwltaWNyb2JsYXplLXVua25vd24gfCBtaWNyb2JsYXplZWwtdW5rbm93bikKKwkJdmVuZG9yPXhpbGlueAorCQk7OworCXJzNjAwMC11bmtub3duKQorCQl2ZW5kb3I9aWJtCisJCTs7CisJdmF4LXVua25vd24pCisJCXZlbmRvcj1kZWMKKwkJOzsKKwlwZHAxMS11bmtub3duKQorCQl2ZW5kb3I9ZGVjCisJCTs7CisJd2UzMmstdW5rbm93bikKKwkJdmVuZG9yPWF0dAorCQk7OworCWN5ZHJhLXVua25vd24pCisJCXZlbmRvcj1jeWRyb21lCisJCTs7CisJaTM3MC1pYm0qKQorCQl2ZW5kb3I9aWJtCisJCTs7CisJb3Jpb24tdW5rbm93bikKKwkJdmVuZG9yPWhpZ2hsZXZlbAorCQk7OworCXhwcy11bmtub3duIHwgeHBzMTAwLXVua25vd24pCisJCWNwdT14cHMxMDAKKwkJdmVuZG9yPWhvbmV5d2VsbAorCQk7OworCisJIyBIZXJlIHdlIG5vcm1hbGl6ZSBDUFUgdHlwZXMgd2l0aCBhIG1pc3Npbmcgb3IgbWF0Y2hpbmcgdmVuZG9yCisJYXJtaC11bmtub3duIHwgYXJtaC1hbHQpCisJCWNwdT1hcm12N2wKKwkJdmVuZG9yPWFsdAorCQliYXNpY19vcz0ke2Jhc2ljX29zOi1saW51eC1nbnVlYWJpaGZ9CisJCTs7CisJZHB4MjAtdW5rbm93biB8IGRweDIwLWJ1bGwpCisJCWNwdT1yczYwMDAKKwkJdmVuZG9yPWJ1bGwKKwkJYmFzaWNfb3M9JHtiYXNpY19vczotYm9zeH0KKwkJOzsKKworCSMgSGVyZSB3ZSBub3JtYWxpemUgQ1BVIHR5cGVzIGlycmVzcGVjdGl2ZSBvZiB0aGUgdmVuZG9yCisJYW1kNjQtKikKKwkJY3B1PXg4Nl82NAorCQk7OworCWJsYWNrZmluLSopCisJCWNwdT1iZmluCisJCWJhc2ljX29zPWxpbnV4CisJCTs7CisJYzU0eC0qKQorCQljcHU9dGljNTR4CisJCTs7CisJYzU1eC0qKQorCQljcHU9dGljNTV4CisJCTs7CisJYzZ4LSopCisJCWNwdT10aWM2eAorCQk7OworCWU1MDB2WzEyXS0qKQorCQljcHU9cG93ZXJwYworCQliYXNpY19vcz0ke2Jhc2ljX29zfSJzcGUiCisJCTs7CisJbWlwczMqLSopCisJCWNwdT1taXBzNjQKKwkJOzsKKwltczEtKikKKwkJY3B1PW10CisJCTs7CisJbTY4a25vbW11LSopCisJCWNwdT1tNjhrCisJCWJhc2ljX29zPWxpbnV4CisJCTs7CisJbTlzMTJ6LSogfCBtNjhoY3MxMnotKiB8IGhjczEyei0qIHwgczEyei0qKQorCQljcHU9czEyegorCQk7OworCW9wZW5yaXNjLSopCisJCWNwdT1vcjMyCisJCTs7CisJcGFyaXNjLSopCisJCWNwdT1ocHBhCisJCWJhc2ljX29zPWxpbnV4CisJCTs7CisJcGVudGl1bS0qIHwgcDUtKiB8IGs1LSogfCBrNi0qIHwgbmV4Z2VuLSogfCB2aWFjMy0qKQorCQljcHU9aTU4NgorCQk7OworCXBlbnRpdW1wcm8tKiB8IHA2LSogfCA2eDg2LSogfCBhdGhsb24tKiB8IGF0aGFsb25fKi0qKQorCQljcHU9aTY4NgorCQk7OworCXBlbnRpdW1paS0qIHwgcGVudGl1bTItKiB8IHBlbnRpdW1paWktKiB8IHBlbnRpdW0zLSopCisJCWNwdT1pNjg2CisJCTs7CisJcGVudGl1bTQtKikKKwkJY3B1PWk3ODYKKwkJOzsKKwlwYzk4LSopCisJCWNwdT1pMzg2CisJCTs7CisJcHBjLSogfCBwcGNiZS0qKQorCQljcHU9cG93ZXJwYworCQk7OworCXBwY2xlLSogfCBwb3dlcnBjbGl0dGxlLSopCisJCWNwdT1wb3dlcnBjbGUKKwkJOzsKKwlwcGM2NC0qKQorCQljcHU9cG93ZXJwYzY0CisJCTs7CisJcHBjNjRsZS0qIHwgcG93ZXJwYzY0bGl0dGxlLSopCisJCWNwdT1wb3dlcnBjNjRsZQorCQk7OworCXNiMS0qKQorCQljcHU9bWlwc2lzYTY0c2IxCisJCTs7CisJc2IxZWwtKikKKwkJY3B1PW1pcHNpc2E2NHNiMWVsCisJCTs7CisJc2g1ZVtsYl0tKikKKwkJY3B1PWBlY2hvICIkY3B1IiB8IHNlZCAncy9eXChzaC5cKWVcKC5cKSQvXDFcMmUvJ2AKKwkJOzsKKwlzcHVyLSopCisJCWNwdT1zcHVyCisJCTs7CisJc3Ryb25nYXJtLSogfCB0aHVtYi0qKQorCQljcHU9YXJtCisJCTs7CisJdHgzOS0qKQorCQljcHU9bWlwc3R4MzkKKwkJOzsKKwl0eDM5ZWwtKikKKwkJY3B1PW1pcHN0eDM5ZWwKKwkJOzsKKwl4NjQtKikKKwkJY3B1PXg4Nl82NAorCQk7OworCXhzY2FsZS0qIHwgeHNjYWxlZVtibF0tKikKKwkJY3B1PWBlY2hvICIkY3B1IiB8IHNlZCAncy9eeHNjYWxlL2FybS8nYAorCQk7OworCWFybTY0LSogfCBhYXJjaDY0bGUtKikKKwkJY3B1PWFhcmNoNjQKKwkJOzsKKworCSMgUmVjb2duaXplIHRoZSBjYW5vbmljYWwgQ1BVIFR5cGVzIHRoYXQgbGltaXQgYW5kL29yIG1vZGlmeSB0aGUKKwkjIGNvbXBhbnkgbmFtZXMgdGhleSBhcmUgcGFpcmVkIHdpdGguCisJY3IxNi0qKQorCQliYXNpY19vcz0ke2Jhc2ljX29zOi1lbGZ9CisJCTs7CisJY3Jpc3YzMi0qIHwgZXRyYXhmcyotKikKKwkJY3B1PWNyaXN2MzIKKwkJdmVuZG9yPWF4aXMKKwkJOzsKKwljcmlzLSogfCBldHJheCotKikKKwkJY3B1PWNyaXMKKwkJdmVuZG9yPWF4aXMKKwkJOzsKKwljcngtKikKKwkJYmFzaWNfb3M9JHtiYXNpY19vczotZWxmfQorCQk7OworCW5lby10YW5kZW0pCisJCWNwdT1uZW8KKwkJdmVuZG9yPXRhbmRlbQorCQk7OworCW5zZS10YW5kZW0pCisJCWNwdT1uc2UKKwkJdmVuZG9yPXRhbmRlbQorCQk7OworCW5zci10YW5kZW0pCisJCWNwdT1uc3IKKwkJdmVuZG9yPXRhbmRlbQorCQk7OworCW5zdi10YW5kZW0pCisJCWNwdT1uc3YKKwkJdmVuZG9yPXRhbmRlbQorCQk7OworCW5zeC10YW5kZW0pCisJCWNwdT1uc3gKKwkJdmVuZG9yPXRhbmRlbQorCQk7OworCW1pcHNhbGxlZ3JleGVsLXNvbnkpCisJCWNwdT1taXBzYWxsZWdyZXhlbAorCQl2ZW5kb3I9c29ueQorCQk7OworCXRpbGUqLSopCisJCWJhc2ljX29zPSR7YmFzaWNfb3M6LWxpbnV4LWdudX0KKwkJOzsKKworCSopCisJCSMgUmVjb2duaXplIHRoZSBjYW5vbmljYWwgQ1BVIHR5cGVzIHRoYXQgYXJlIGFsbG93ZWQgd2l0aCBhbnkKKwkJIyBjb21wYW55IG5hbWUuCisJCWNhc2UgJGNwdSBpbgorCQkJMTc1MGEgfCA1ODAgXAorCQkJfCBhMjlrIFwKKwkJCXwgYWFyY2g2NCB8IGFhcmNoNjRfYmUgXAorCQkJfCBhYmFjdXMgXAorCQkJfCBhbHBoYSB8IGFscGhhZXZbNC04XSB8IGFscGhhZXY1NiB8IGFscGhhZXY2Wzc4XSBcCisJCQl8IGFscGhhNjQgfCBhbHBoYTY0ZXZbNC04XSB8IGFscGhhNjRldjU2IHwgYWxwaGE2NGV2Nls3OF0gXAorCQkJfCBhbHBoYXBjYTVbNjddIHwgYWxwaGE2NHBjYTVbNjddIFwKKwkJCXwgYW0zM18yLjAgXAorCQkJfCBhbWRnY24gXAorCQkJfCBhcmMgfCBhcmNlYiB8IGFyYzMyIHwgYXJjNjQgXAorCQkJfCBhcm0gfCBhcm1bbGJdZSB8IGFybWVbbGJdIHwgYXJtdiogXAorCQkJfCBhdnIgfCBhdnIzMiBcCisJCQl8IGFzbWpzIFwKKwkJCXwgYmEgXAorCQkJfCBiZTMyIHwgYmU2NCBcCisJCQl8IGJmaW4gfCBicGYgfCBiczIwMDAgXAorCQkJfCBjWzEyM10qIHwgYzMwIHwgW2NqdF05MCB8IGM0eCBcCisJCQl8IGM4MDUxIHwgY2xpcHBlciB8IGNyYXludiB8IGNza3kgfCBjeWRyYSBcCisJCQl8IGQxMHYgfCBkMzB2IHwgZGx4IHwgZHNwMTZ4eCBcCisJCQl8IGUyayB8IGVseHNpIHwgZXBpcGhhbnkgXAorCQkJfCBmMzBbMDFdIHwgZjcwMCB8IGZpZG8gfCBmcjMwIHwgZnJ2IHwgZnQzMiB8IGZ4ODAgXAorCQkJfCBoODMwMCB8IGg4NTAwIFwKKwkJCXwgaHBwYSB8IGhwcGExLlswMV0gfCBocHBhMi4wIHwgaHBwYTIuMFtud10gfCBocHBhNjQgXAorCQkJfCBoZXhhZ29uIFwKKwkJCXwgaTM3MCB8IGkqODYgfCBpODYwIHwgaTk2MCB8IGlhMTYgfCBpYTY0IFwKKwkJCXwgaXAyayB8IGlxMjAwMCBcCisJCQl8IGsxb20gXAorCQkJfCBsZTMyIHwgbGU2NCBcCisJCQl8IGxtMzIgXAorCQkJfCBsb29uZ2FyY2gzMiB8IGxvb25nYXJjaDY0IHwgbG9vbmdhcmNoeDMyIFwKKwkJCXwgbTMyYyB8IG0zMnIgfCBtMzJybGUgXAorCQkJfCBtNTIwMCB8IG02ODAwMCB8IG02ODBbMDEyMzQ2XTAgfCBtNjgzNjAgfCBtNjgzPzIgfCBtNjhrIFwKKwkJCXwgbTY4MTEgfCBtNjhoYzExIHwgbTY4MTIgfCBtNjhoYzEyIHwgbTY4aGNzMTJ4IFwKKwkJCXwgbTg4MTEwIHwgbTg4ayB8IG1heHEgfCBtYiB8IG1jb3JlIHwgbWVwIHwgbWV0YWcgXAorCQkJfCBtaWNyb2JsYXplIHwgbWljcm9ibGF6ZWVsIFwKKwkJCXwgbWlwcyB8IG1pcHNiZSB8IG1pcHNlYiB8IG1pcHNlbCB8IG1pcHNsZSBcCisJCQl8IG1pcHMxNiBcCisJCQl8IG1pcHM2NCB8IG1pcHM2NGViIHwgbWlwczY0ZWwgXAorCQkJfCBtaXBzNjRvY3Rlb24gfCBtaXBzNjRvY3Rlb25lbCBcCisJCQl8IG1pcHM2NG9yaW9uIHwgbWlwczY0b3Jpb25lbCBcCisJCQl8IG1pcHM2NHI1OTAwIHwgbWlwczY0cjU5MDBlbCBcCisJCQl8IG1pcHM2NHZyIHwgbWlwczY0dnJlbCBcCisJCQl8IG1pcHM2NHZyNDEwMCB8IG1pcHM2NHZyNDEwMGVsIFwKKwkJCXwgbWlwczY0dnI0MzAwIHwgbWlwczY0dnI0MzAwZWwgXAorCQkJfCBtaXBzNjR2cjUwMDAgfCBtaXBzNjR2cjUwMDBlbCBcCisJCQl8IG1pcHM2NHZyNTkwMCB8IG1pcHM2NHZyNTkwMGVsIFwKKwkJCXwgbWlwc2lzYTMyIHwgbWlwc2lzYTMyZWwgXAorCQkJfCBtaXBzaXNhMzJyMiB8IG1pcHNpc2EzMnIyZWwgXAorCQkJfCBtaXBzaXNhMzJyMyB8IG1pcHNpc2EzMnIzZWwgXAorCQkJfCBtaXBzaXNhMzJyNSB8IG1pcHNpc2EzMnI1ZWwgXAorCQkJfCBtaXBzaXNhMzJyNiB8IG1pcHNpc2EzMnI2ZWwgXAorCQkJfCBtaXBzaXNhNjQgfCBtaXBzaXNhNjRlbCBcCisJCQl8IG1pcHNpc2E2NHIyIHwgbWlwc2lzYTY0cjJlbCBcCisJCQl8IG1pcHNpc2E2NHIzIHwgbWlwc2lzYTY0cjNlbCBcCisJCQl8IG1pcHNpc2E2NHI1IHwgbWlwc2lzYTY0cjVlbCBcCisJCQl8IG1pcHNpc2E2NHI2IHwgbWlwc2lzYTY0cjZlbCBcCisJCQl8IG1pcHNpc2E2NHNiMSB8IG1pcHNpc2E2NHNiMWVsIFwKKwkJCXwgbWlwc2lzYTY0c3I3MWsgfCBtaXBzaXNhNjRzcjcxa2VsIFwKKwkJCXwgbWlwc3I1OTAwIHwgbWlwc3I1OTAwZWwgXAorCQkJfCBtaXBzdHgzOSB8IG1pcHN0eDM5ZWwgXAorCQkJfCBtbWl4IFwKKwkJCXwgbW4xMDIwMCB8IG1uMTAzMDAgXAorCQkJfCBtb3hpZSBcCisJCQl8IG10IFwKKwkJCXwgbXNwNDMwIFwKKwkJCXwgbmRzMzIgfCBuZHMzMmxlIHwgbmRzMzJiZSBcCisJCQl8IG5mcCBcCisJCQl8IG5pb3MgfCBuaW9zMiB8IG5pb3MyZWIgfCBuaW9zMmVsIFwKKwkJCXwgbm9uZSB8IG5wMSB8IG5zMTZrIHwgbnMzMmsgfCBudnB0eCBcCisJCQl8IG9wZW44IFwKKwkJCXwgb3IxayogXAorCQkJfCBvcjMyIFwKKwkJCXwgb3Jpb24gXAorCQkJfCBwaWNvY2hpcCBcCisJCQl8IHBkcDEwIHwgcGRwMTEgfCBwaiB8IHBqbCB8IHBuIHwgcG93ZXIgXAorCQkJfCBwb3dlcnBjIHwgcG93ZXJwYzY0IHwgcG93ZXJwYzY0bGUgfCBwb3dlcnBjbGUgfCBwb3dlcnBjc3BlIFwKKwkJCXwgcHJ1IFwKKwkJCXwgcHlyYW1pZCBcCisJCQl8IHJpc2N2IHwgcmlzY3YzMiB8IHJpc2N2MzJiZSB8IHJpc2N2NjQgfCByaXNjdjY0YmUgXAorCQkJfCBybDc4IHwgcm9tcCB8IHJzNjAwMCB8IHJ4IFwKKwkJCXwgczM5MCB8IHMzOTB4IFwKKwkJCXwgc2NvcmUgXAorCQkJfCBzaCB8IHNobCBcCisJCQl8IHNoWzEyMzRdIHwgc2hbMjRdYSB8IHNoWzI0XWFlW2xiXSB8IHNoWzIzXWUgfCBzaGVbbGJdIHwgc2hbbGJdZSBcCisJCQl8IHNoWzEyMzRdZVtsYl0gfCAgc2hbMTIzNDVdW2xiXWUgfCBzaFsyM11lbGUgfCBzaDY0IHwgc2g2NGxlIFwKKwkJCXwgc3BhcmMgfCBzcGFyYzY0IHwgc3BhcmM2NGIgfCBzcGFyYzY0diB8IHNwYXJjODZ4IHwgc3BhcmNsZXQgXAorCQkJfCBzcGFyY2xpdGUgXAorCQkJfCBzcGFyY3Y4IHwgc3BhcmN2OSB8IHNwYXJjdjliIHwgc3BhcmN2OXYgfCBzdjEgfCBzeCogXAorCQkJfCBzcHUgXAorCQkJfCB0YWhvZSBcCisJCQl8IHRodW1idjcqIFwKKwkJCXwgdGljMzAgfCB0aWM0eCB8IHRpYzU0eCB8IHRpYzU1eCB8IHRpYzZ4IHwgdGljODAgXAorCQkJfCB0cm9uIFwKKwkJCXwgdWJpY29tMzIgXAorCQkJfCB2NzAgfCB2ODUwIHwgdjg1MGUgfCB2ODUwZTEgfCB2ODUwZXMgfCB2ODUwZTIgfCB2ODUwZTJ2MyBcCisJCQl8IHZheCBcCisJCQl8IHZpc2l1bSBcCisJCQl8IHc2NSBcCisJCQl8IHdhc20zMiB8IHdhc202NCBcCisJCQl8IHdlMzJrIFwKKwkJCXwgeDg2IHwgeDg2XzY0IHwgeGMxNnggfCB4Z2F0ZSB8IHhwczEwMCBcCisJCQl8IHhzdG9ybXkxNiB8IHh0ZW5zYSogXAorCQkJfCB5bXAgXAorCQkJfCB6OGsgfCB6ODApCisJCQkJOzsKKworCQkJKikKKwkJCQllY2hvIEludmFsaWQgY29uZmlndXJhdGlvbiBcYCIkMSJcJzogbWFjaGluZSBcYCIkY3B1LSR2ZW5kb3IiXCcgbm90IHJlY29nbml6ZWQgMT4mMgorCQkJCWV4aXQgMQorCQkJCTs7CisJCWVzYWMKKwkJOzsKK2VzYWMKKworIyBIZXJlIHdlIGNhbm9uaWNhbGl6ZSBjZXJ0YWluIGFsaWFzZXMgZm9yIG1hbnVmYWN0dXJlcnMuCitjYXNlICR2ZW5kb3IgaW4KKwlkaWdpdGFsKikKKwkJdmVuZG9yPWRlYworCQk7OworCWNvbW1vZG9yZSopCisJCXZlbmRvcj1jYm0KKwkJOzsKKwkqKQorCQk7OworZXNhYworCisjIERlY29kZSBtYW51ZmFjdHVyZXItc3BlY2lmaWMgYWxpYXNlcyBmb3IgY2VydGFpbiBvcGVyYXRpbmcgc3lzdGVtcy4KKworaWYgdGVzdCB4JGJhc2ljX29zICE9IHgKK3RoZW4KKworIyBGaXJzdCByZWNvZ25pemUgc29tZSBhZC1ob2MgY2FzZXMsIG9yIHBlcmhhcHMgc3BsaXQga2VybmVsLW9zLCBvciBlbHNlIGp1c3QKKyMgc2V0IG9zLgorY2FzZSAkYmFzaWNfb3MgaW4KKwlnbnUvbGludXgqKQorCQlrZXJuZWw9bGludXgKKwkJb3M9YGVjaG8gIiRiYXNpY19vcyIgfCBzZWQgLWUgJ3N8Z251L2xpbnV4fGdudXwnYAorCQk7OworCW9zMi1lbXgpCisJCWtlcm5lbD1vczIKKwkJb3M9YGVjaG8gIiRiYXNpY19vcyIgfCBzZWQgLWUgJ3N8b3MyLWVteHxlbXh8J2AKKwkJOzsKKwludG8tcW54KikKKwkJa2VybmVsPW50bworCQlvcz1gZWNobyAiJGJhc2ljX29zIiB8IHNlZCAtZSAnc3xudG8tcW54fHFueHwnYAorCQk7OworCSotKikKKwkJIyBzaGVsbGNoZWNrIGRpc2FibGU9U0MyMTYyCisJCXNhdmVkX0lGUz0kSUZTCisJCUlGUz0iLSIgcmVhZCBrZXJuZWwgb3MgPDxFT0YKKyRiYXNpY19vcworRU9GCisJCUlGUz0kc2F2ZWRfSUZTCisJCTs7CisJIyBEZWZhdWx0IE9TIHdoZW4ganVzdCBrZXJuZWwgd2FzIHNwZWNpZmllZAorCW50byopCisJCWtlcm5lbD1udG8KKwkJb3M9YGVjaG8gIiRiYXNpY19vcyIgfCBzZWQgLWUgJ3N8bnRvfHFueHwnYAorCQk7OworCWxpbnV4KikKKwkJa2VybmVsPWxpbnV4CisJCW9zPWBlY2hvICIkYmFzaWNfb3MiIHwgc2VkIC1lICdzfGxpbnV4fGdudXwnYAorCQk7OworCSopCisJCWtlcm5lbD0KKwkJb3M9JGJhc2ljX29zCisJCTs7Citlc2FjCisKKyMgTm93LCBub3JtYWxpemUgdGhlIE9TIChrbm93aW5nIHdlIGp1c3QgaGF2ZSBvbmUgY29tcG9uZW50LCBpdCdzIG5vdCBhIGtlcm5lbCwKKyMgZXRjLikKK2Nhc2UgJG9zIGluCisJIyBGaXJzdCBtYXRjaCBzb21lIHN5c3RlbSB0eXBlIGFsaWFzZXMgdGhhdCBtaWdodCBnZXQgY29uZnVzZWQKKwkjIHdpdGggdmFsaWQgc3lzdGVtIHR5cGVzLgorCSMgc29sYXJpcyogaXMgYSBiYXNpYyBzeXN0ZW0gdHlwZSwgd2l0aCB0aGlzIG9uZSBleGNlcHRpb24uCisJYXVyb3JhdXgpCisJCW9zPWF1cm9yYXV4CisJCTs7CisJYmx1ZWdlbmUqKQorCQlvcz1jbmsKKwkJOzsKKwlzb2xhcmlzMSB8IHNvbGFyaXMxLiopCisJCW9zPWBlY2hvICIkb3MiIHwgc2VkIC1lICdzfHNvbGFyaXMxfHN1bm9zNHwnYAorCQk7OworCXNvbGFyaXMpCisJCW9zPXNvbGFyaXMyCisJCTs7CisJdW5peHdhcmUqKQorCQlvcz1zeXN2NC4ydXcKKwkJOzsKKwkjIGVzMTgwMCBpcyBoZXJlIHRvIGF2b2lkIGJlaW5nIG1hdGNoZWQgYnkgZXMqIChhIGRpZmZlcmVudCBPUykKKwllczE4MDAqKQorCQlvcz1vc2UKKwkJOzsKKwkjIFNvbWUgdmVyc2lvbiBudW1iZXJzIG5lZWQgbW9kaWZpY2F0aW9uCisJY2hvcnVzb3MqKQorCQlvcz1jaG9ydXNvcworCQk7OworCWlzYykKKwkJb3M9aXNjMi4yCisJCTs7CisJc2NvNikKKwkJb3M9c2NvNXY2CisJCTs7CisJc2NvNSkKKwkJb3M9c2NvMy4ydjUKKwkJOzsKKwlzY280KQorCQlvcz1zY28zLjJ2NAorCQk7OworCXNjbzMuMi5bNC05XSopCisJCW9zPWBlY2hvICIkb3MiIHwgc2VkIC1lICdzL3NjbzMuMi4vc2NvMy4ydi8nYAorCQk7OworCXNjbyp2KiB8IHNjb3V0KQorCQkjIERvbid0IG1hdGNoIGJlbG93CisJCTs7CisJc2NvKikKKwkJb3M9c2NvMy4ydjIKKwkJOzsKKwlwc29zKikKKwkJb3M9cHNvcworCQk7OworCXFueCopCisJCW9zPXFueAorCQk7OworCWhpdXgqKQorCQlvcz1oaXV4d2UyCisJCTs7CisJbHlueCoxNzgpCisJCW9zPWx5bnhvczE3OAorCQk7OworCWx5bngqNSkKKwkJb3M9bHlueG9zNQorCQk7OworCWx5bnhvcyopCisJCSMgZG9uJ3QgZ2V0IGNhdWdodCB1cCBpbiBuZXh0IHdpbGRjYXJkCisJCTs7CisJbHlueCopCisJCW9zPWx5bnhvcworCQk7OworCW1hY1swLTldKikKKwkJb3M9YGVjaG8gIiRvcyIgfCBzZWQgLWUgJ3N8bWFjfG1hY29zfCdgCisJCTs7CisJb3BlbmVkKikKKwkJb3M9b3BlbmVkaXRpb24KKwkJOzsKKwlvczQwMCopCisJCW9zPW9zNDAwCisJCTs7CisJc3Vub3M1KikKKwkJb3M9YGVjaG8gIiRvcyIgfCBzZWQgLWUgJ3N8c3Vub3M1fHNvbGFyaXMyfCdgCisJCTs7CisJc3Vub3M2KikKKwkJb3M9YGVjaG8gIiRvcyIgfCBzZWQgLWUgJ3N8c3Vub3M2fHNvbGFyaXMzfCdgCisJCTs7CisJd2luY2UqKQorCQlvcz13aW5jZQorCQk7OworCXV0ZWsqKQorCQlvcz1ic2QKKwkJOzsKKwlkeW5peCopCisJCW9zPWJzZAorCQk7OworCWFjaXMqKQorCQlvcz1hb3MKKwkJOzsKKwlhdGhlb3MqKQorCQlvcz1hdGhlb3MKKwkJOzsKKwlzeWxsYWJsZSopCisJCW9zPXN5bGxhYmxlCisJCTs7CisJMzg2YnNkKQorCQlvcz1ic2QKKwkJOzsKKwljdGl4KiB8IHV0cyopCisJCW9zPXN5c3YKKwkJOzsKKwlub3ZhKikKKwkJb3M9cnRtay1ub3ZhCisJCTs7CisJbnMyKQorCQlvcz1uZXh0c3RlcDIKKwkJOzsKKwkjIFByZXNlcnZlIHRoZSB2ZXJzaW9uIG51bWJlciBvZiBzaW5peDUuCisJc2luaXg1LiopCisJCW9zPWBlY2hvICIkb3MiIHwgc2VkIC1lICdzfHNpbml4fHN5c3Z8J2AKKwkJOzsKKwlzaW5peCopCisJCW9zPXN5c3Y0CisJCTs7CisJdHBmKikKKwkJb3M9dHBmCisJCTs7CisJdHJpdG9uKikKKwkJb3M9c3lzdjMKKwkJOzsKKwlvc3MqKQorCQlvcz1zeXN2MworCQk7OworCXN2cjQqKQorCQlvcz1zeXN2NAorCQk7OworCXN2cjMpCisJCW9zPXN5c3YzCisJCTs7CisJc3lzdnI0KQorCQlvcz1zeXN2NAorCQk7OworCW9zZSopCisJCW9zPW9zZQorCQk7OworCSptaW50IHwgbWludFswLTldKiB8ICpNaU5UIHwgTWlOVFswLTldKikKKwkJb3M9bWludAorCQk7OworCWRpY29zKikKKwkJb3M9ZGljb3MKKwkJOzsKKwlwaWtlb3MqKQorCQkjIFVudGlsIHJlYWwgbmVlZCBvZiBPUyBzcGVjaWZpYyBzdXBwb3J0IGZvcgorCQkjIHBhcnRpY3VsYXIgZmVhdHVyZXMgY29tZXMgdXAsIGJhcmUgbWV0YWwKKwkJIyBjb25maWd1cmF0aW9ucyBhcmUgcXVpdGUgZnVuY3Rpb25hbC4KKwkJY2FzZSAkY3B1IGluCisJCSAgICBhcm0qKQorCQkJb3M9ZWFiaQorCQkJOzsKKwkJICAgICopCisJCQlvcz1lbGYKKwkJCTs7CisJCWVzYWMKKwkJOzsKKwkqKQorCQkjIE5vIG5vcm1hbGl6YXRpb24sIGJ1dCBub3QgbmVjZXNzYXJpbHkgYWNjZXB0ZWQsIHRoYXQgY29tZXMgYmVsb3cuCisJCTs7Citlc2FjCisKK2Vsc2UKKworIyBIZXJlIHdlIGhhbmRsZSB0aGUgZGVmYXVsdCBvcGVyYXRpbmcgc3lzdGVtcyB0aGF0IGNvbWUgd2l0aCB2YXJpb3VzIG1hY2hpbmVzLgorIyBUaGUgdmFsdWUgc2hvdWxkIGJlIHdoYXQgdGhlIHZlbmRvciBjdXJyZW50bHkgc2hpcHMgb3V0IHRoZSBkb29yIHdpdGggdGhlaXIKKyMgbWFjaGluZSBvciBwdXQgYW5vdGhlciB3YXksIHRoZSBtb3N0IHBvcHVsYXIgb3MgcHJvdmlkZWQgd2l0aCB0aGUgbWFjaGluZS4KKworIyBOb3RlIHRoYXQgaWYgeW91J3JlIGdvaW5nIHRvIHRyeSB0byBtYXRjaCAiLU1BTlVGQUNUVVJFUiIgaGVyZSAoc2F5LAorIyAiLXN1biIpLCB0aGVuIHlvdSBoYXZlIHRvIHRlbGwgdGhlIGNhc2Ugc3RhdGVtZW50IHVwIHRvd2FyZHMgdGhlIHRvcAorIyB0aGF0IE1BTlVGQUNUVVJFUiBpc24ndCBhbiBvcGVyYXRpbmcgc3lzdGVtLiAgT3RoZXJ3aXNlLCBjb2RlIGFib3ZlCisjIHdpbGwgc2lnbmFsIGFuIGVycm9yIHNheWluZyB0aGF0IE1BTlVGQUNUVVJFUiBpc24ndCBhbiBvcGVyYXRpbmcKKyMgc3lzdGVtLCBhbmQgd2UnbGwgbmV2ZXIgZ2V0IHRvIHRoaXMgcG9pbnQuCisKK2tlcm5lbD0KK2Nhc2UgJGNwdS0kdmVuZG9yIGluCisJc2NvcmUtKikKKwkJb3M9ZWxmCisJCTs7CisJc3B1LSopCisJCW9zPWVsZgorCQk7OworCSotYWNvcm4pCisJCW9zPXJpc2NpeDEuMgorCQk7OworCWFybSotcmViZWwpCisJCWtlcm5lbD1saW51eAorCQlvcz1nbnUKKwkJOzsKKwlhcm0qLXNlbWkpCisJCW9zPWFvdXQKKwkJOzsKKwljNHgtKiB8IHRpYzR4LSopCisJCW9zPWNvZmYKKwkJOzsKKwljODA1MS0qKQorCQlvcz1lbGYKKwkJOzsKKwljbGlwcGVyLWludGVyZ3JhcGgpCisJCW9zPWNsaXgKKwkJOzsKKwloZXhhZ29uLSopCisJCW9zPWVsZgorCQk7OworCXRpYzU0eC0qKQorCQlvcz1jb2ZmCisJCTs7CisJdGljNTV4LSopCisJCW9zPWNvZmYKKwkJOzsKKwl0aWM2eC0qKQorCQlvcz1jb2ZmCisJCTs7CisJIyBUaGlzIG11c3QgY29tZSBiZWZvcmUgdGhlICotZGVjIGVudHJ5LgorCXBkcDEwLSopCisJCW9zPXRvcHMyMAorCQk7OworCXBkcDExLSopCisJCW9zPW5vbmUKKwkJOzsKKwkqLWRlYyB8IHZheC0qKQorCQlvcz11bHRyaXg0LjIKKwkJOzsKKwltNjgqLWFwb2xsbykKKwkJb3M9ZG9tYWluCisJCTs7CisJaTM4Ni1zdW4pCisJCW9zPXN1bm9zNC4wLjIKKwkJOzsKKwltNjgwMDAtc3VuKQorCQlvcz1zdW5vczMKKwkJOzsKKwltNjgqLWNpc2NvKQorCQlvcz1hb3V0CisJCTs7CisJbWVwLSopCisJCW9zPWVsZgorCQk7OworCW1pcHMqLWNpc2NvKQorCQlvcz1lbGYKKwkJOzsKKwltaXBzKi0qKQorCQlvcz1lbGYKKwkJOzsKKwlvcjMyLSopCisJCW9zPWNvZmYKKwkJOzsKKwkqLXR0aSkJIyBtdXN0IGJlIGJlZm9yZSBzcGFyYyBlbnRyeSBvciB3ZSBnZXQgdGhlIHdyb25nIG9zLgorCQlvcz1zeXN2MworCQk7OworCXNwYXJjLSogfCAqLXN1bikKKwkJb3M9c3Vub3M0LjEuMQorCQk7OworCXBydS0qKQorCQlvcz1lbGYKKwkJOzsKKwkqLWJlKQorCQlvcz1iZW9zCisJCTs7CisJKi1pYm0pCisJCW9zPWFpeAorCQk7OworCSota251dGgpCisJCW9zPW1taXh3YXJlCisJCTs7CisJKi13ZWMpCisJCW9zPXByb2VsZgorCQk7OworCSotd2luYm9uZCkKKwkJb3M9cHJvZWxmCisJCTs7CisJKi1va2kpCisJCW9zPXByb2VsZgorCQk7OworCSotaHApCisJCW9zPWhwdXgKKwkJOzsKKwkqLWhpdGFjaGkpCisJCW9zPWhpdXgKKwkJOzsKKwlpODYwLSogfCAqLWF0dCB8ICotbmNyIHwgKi1hbHRvcyB8ICotbW90b3JvbGEgfCAqLWNvbnZlcmdlbnQpCisJCW9zPXN5c3YKKwkJOzsKKwkqLWNibSkKKwkJb3M9YW1pZ2FvcworCQk7OworCSotZGcpCisJCW9zPWRndXgKKwkJOzsKKwkqLWRvbHBoaW4pCisJCW9zPXN5c3YzCisJCTs7CisJbTY4ay1jY3VyKQorCQlvcz1ydHUKKwkJOzsKKwltODhrLW9tcm9uKikKKwkJb3M9bHVuYQorCQk7OworCSotbmV4dCkKKwkJb3M9bmV4dHN0ZXAKKwkJOzsKKwkqLXNlcXVlbnQpCisJCW9zPXB0eAorCQk7OworCSotY3JkcykKKwkJb3M9dW5vcworCQk7OworCSotbnMpCisJCW9zPWdlbml4CisJCTs7CisJaTM3MC0qKQorCQlvcz1tdnMKKwkJOzsKKwkqLWdvdWxkKQorCQlvcz1zeXN2CisJCTs7CisJKi1oaWdobGV2ZWwpCisJCW9zPWJzZAorCQk7OworCSotZW5jb3JlKQorCQlvcz1ic2QKKwkJOzsKKwkqLXNnaSkKKwkJb3M9aXJpeAorCQk7OworCSotc2llbWVucykKKwkJb3M9c3lzdjQKKwkJOzsKKwkqLW1hc3Njb21wKQorCQlvcz1ydHUKKwkJOzsKKwlmMzBbMDFdLWZ1aml0c3UgfCBmNzAwLWZ1aml0c3UpCisJCW9zPXV4cHYKKwkJOzsKKwkqLXJvbTY4aykKKwkJb3M9Y29mZgorCQk7OworCSotKmJ1ZykKKwkJb3M9Y29mZgorCQk7OworCSotYXBwbGUpCisJCW9zPW1hY29zCisJCTs7CisJKi1hdGFyaSopCisJCW9zPW1pbnQKKwkJOzsKKwkqLXdycykKKwkJb3M9dnh3b3JrcworCQk7OworCSopCisJCW9zPW5vbmUKKwkJOzsKK2VzYWMKKworZmkKKworIyBOb3csIHZhbGlkYXRlIG91ciAocG90ZW50aWFsbHkgZml4ZWQtdXApIE9TLgorY2FzZSAkb3MgaW4KKwkjIFNvbWV0aW1lcyB3ZSBkbyAia2VybmVsLWxpYmMiLCBzbyB0aG9zZSBuZWVkIHRvIGNvdW50IGFzIE9TZXMuCisJbXVzbCogfCBuZXdsaWIqIHwgcmVsaWJjKiB8IHVjbGliYyopCisJCTs7CisJIyBMaWtld2lzZSBmb3IgImtlcm5lbC1hYmkiCisJZWFiaSogfCBnbnVlYWJpKikKKwkJOzsKKwkjIFZ4V29ya3MgcGFzc2VzIGV4dHJhIGNwdSBpbmZvIGluIHRoZSA0dGggZmlsZWQuCisJc2ltbGludXggfCBzaW13aW5kb3dzIHwgc3BlKQorCQk7OworCSMgTm93IGFjY2VwdCB0aGUgYmFzaWMgc3lzdGVtIHR5cGVzLgorCSMgVGhlIHBvcnRhYmxlIHN5c3RlbXMgY29tZXMgZmlyc3QuCisJIyBFYWNoIGFsdGVybmF0aXZlIE1VU1QgZW5kIGluIGEgKiB0byBtYXRjaCBhIHZlcnNpb24gbnVtYmVyLgorCWdudSogfCBhbmRyb2lkKiB8IGJzZCogfCBtYWNoKiB8IG1pbml4KiB8IGdlbml4KiB8IHVsdHJpeCogfCBpcml4KiBcCisJICAgICB8ICp2bXMqIHwgZXNpeCogfCBhaXgqIHwgY25rKiB8IHN1bm9zIHwgc3Vub3NbMzRdKiBcCisJICAgICB8IGhwdXgqIHwgdW5vcyogfCBvc2YqIHwgbHVuYSogfCBkZ3V4KiB8IGF1cm9yYXV4KiB8IHNvbGFyaXMqIFwKKwkgICAgIHwgc3ltKiB8ICBwbGFuOSogfCBwc3AqIHwgc2ltKiB8IHhyYXkqIHwgb3M2OGsqIHwgdjg4ciogXAorCSAgICAgfCBoaXV4KiB8IGFidWcgfCBuYWNsKiB8IG5ldHdhcmUqIHwgd2luZG93cyogXAorCSAgICAgfCBvczkqIHwgbWFjb3MqIHwgb3N4KiB8IGlvcyogXAorCSAgICAgfCBtcHcqIHwgbWFnaWMqIHwgbW1peHdhcmUqIHwgbW9uOTYwKiB8IGxuZXdzKiBcCisJICAgICB8IGFtaWdhb3MqIHwgYW1pZ2Fkb3MqIHwgbXNkb3MqIHwgbmV3c29zKiB8IHVuaWNvcyogfCBhb2YqIFwKKwkgICAgIHwgYW9zKiB8IGFyb3MqIHwgY2xvdWRhYmkqIHwgc29ydGl4KiB8IHR3aXp6bGVyKiBcCisJICAgICB8IG5pbmR5KiB8IHZ4c2ltKiB8IHZ4d29ya3MqIHwgZWJtb24qIHwgaG1zKiB8IG12cyogXAorCSAgICAgfCBjbGl4KiB8IHJpc2NvcyogfCB1bmlwbHVzKiB8IGlyaXMqIHwgaXNjKiB8IHJ0dSogfCB4ZW5peCogXAorCSAgICAgfCBtaXJic2QqIHwgbmV0YnNkKiB8IGRpY29zKiB8IG9wZW5lZGl0aW9uKiB8IG9zZSogXAorCSAgICAgfCBiaXRyaWcqIHwgb3BlbmJzZCogfCBzZWNic2QqIHwgc29saWRic2QqIHwgbGliZXJ0eWJzZCogfCBvczEwOCogXAorCSAgICAgfCBla2tvYnNkKiB8IGZyZWVic2QqIHwgcmlzY2l4KiB8IGx5bnhvcyogfCBvczQwMCogXAorCSAgICAgfCBib3N4KiB8IG5leHRzdGVwKiB8IGN4dXgqIHwgYW91dCogfCBlbGYqIHwgb2FiaSogXAorCSAgICAgfCBwdHgqIHwgY29mZiogfCBlY29mZiogfCB3aW5udCogfCBkb21haW4qIHwgdnN0YSogXAorCSAgICAgfCB1ZGkqIHwgbGl0ZXMqIHwgaWVlZSogfCBnbzMyKiB8IGF1eCogfCBoY29zKiBcCisJICAgICB8IGNob3J1c3JkYiogfCBjZWdjYyogfCBnbGlkaXgqIHwgc2VyZW5pdHkqIFwKKwkgICAgIHwgY3lnd2luKiB8IG1zeXMqIHwgcGUqIHwgbW9zcyogfCBwcm9lbGYqIHwgcnRlbXMqIFwKKwkgICAgIHwgbWlkaXBpeCogfCBtaW5ndzMyKiB8IG1pbmd3NjQqIHwgbWludCogXAorCSAgICAgfCB1eHB2KiB8IGJlb3MqIHwgbXBlaXgqIHwgdWRrKiB8IG1veGllYm94KiBcCisJICAgICB8IGludGVyaXgqIHwgdXdpbiogfCBta3MqIHwgcmhhcHNvZHkqIHwgZGFyd2luKiBcCisJICAgICB8IG9wZW5zdGVwKiB8IG9za2l0KiB8IGNvbml4KiB8IHB3MzIqIHwgbm9uc3RvcHV4KiBcCisJICAgICB8IHN0b3JtLWNoYW9zKiB8IHRvcHMxMCogfCB0ZW5leCogfCB0b3BzMjAqIHwgaXRzKiBcCisJICAgICB8IG9zMiogfCB2b3MqIHwgcGFsbW9zKiB8IHVjbGludXgqIHwgbnVjbGV1cyogfCBtb3JwaG9zKiBcCisJICAgICB8IHNjb3V0KiB8IHN1cGVydXgqIHwgc3lzdiogfCBydG1rKiB8IHRwZiogfCB3aW5kaXNzKiBcCisJICAgICB8IHBvd2VybWF4KiB8IGRuaXgqIHwgbng2IHwgbng3IHwgc2VpKiB8IGRyYWdvbmZseSogXAorCSAgICAgfCBza3lvcyogfCBoYWlrdSogfCByZG9zKiB8IHRvcHBlcnMqIHwgZHJvcHMqIHwgZXMqIFwKKwkgICAgIHwgb25lZnMqIHwgdGlydG9zKiB8IHBob2VuaXgqIHwgZnVjaHNpYSogfCByZWRveCogfCBibWUqIFwKKwkgICAgIHwgbWlkbmlnaHRic2QqIHwgYW1kaHNhKiB8IHVubGVhc2hlZCogfCBlbXNjcmlwdGVuKiB8IHdhc2kqIFwKKwkgICAgIHwgbnNrKiB8IHBvd2VydW5peCogfCBnZW5vZGUqIHwgenZtb2UqIHwgcW54KiB8IGVteCogfCB6ZXBoeXIqIFwKKwkgICAgIHwgZml3aXgqICkKKwkJOzsKKwkjIFRoaXMgb25lIGlzIGV4dHJhIHN0cmljdCB3aXRoIGFsbG93ZWQgdmVyc2lvbnMKKwlzY28zLjJ2MiB8IHNjbzMuMnZbNC05XSogfCBzY281djYqKQorCQkjIERvbid0IGZvcmdldCB2ZXJzaW9uIGlmIGl0IGlzIDMuMnY0IG9yIG5ld2VyLgorCQk7OworCW5vbmUpCisJCTs7CisJKikKKwkJZWNobyBJbnZhbGlkIGNvbmZpZ3VyYXRpb24gXGAiJDEiXCc6IE9TIFxgIiRvcyJcJyBub3QgcmVjb2duaXplZCAxPiYyCisJCWV4aXQgMQorCQk7OworZXNhYworCisjIEFzIGEgZmluYWwgc3RlcCBmb3IgT1MtcmVsYXRlZCB0aGluZ3MsIHZhbGlkYXRlIHRoZSBPUy1rZXJuZWwgY29tYmluYXRpb24KKyMgKGdpdmVuIGEgdmFsaWQgT1MpLCBpZiB0aGVyZSBpcyBhIGtlcm5lbC4KK2Nhc2UgJGtlcm5lbC0kb3MgaW4KKwlsaW51eC1nbnUqIHwgbGludXgtZGlldGxpYmMqIHwgbGludXgtYW5kcm9pZCogfCBsaW51eC1uZXdsaWIqIFwKKwkJICAgfCBsaW51eC1tdXNsKiB8IGxpbnV4LXJlbGliYyogfCBsaW51eC11Y2xpYmMqICkKKwkJOzsKKwl1Y2xpbnV4LXVjbGliYyogKQorCQk7OworCS1kaWV0bGliYyogfCAtbmV3bGliKiB8IC1tdXNsKiB8IC1yZWxpYmMqIHwgLXVjbGliYyogKQorCQkjIFRoZXNlIGFyZSBqdXN0IGxpYmMgaW1wbGVtZW50YXRpb25zLCBub3QgYWN0dWFsIE9TZXMsIGFuZCB0aHVzCisJCSMgcmVxdWlyZSBhIGtlcm5lbC4KKwkJZWNobyAiSW52YWxpZCBjb25maWd1cmF0aW9uIFxgJDEnOiBsaWJjIFxgJG9zJyBuZWVkcyBleHBsaWNpdCBrZXJuZWwuIiAxPiYyCisJCWV4aXQgMQorCQk7OworCWtmcmVlYnNkKi1nbnUqIHwga29wZW5zb2xhcmlzKi1nbnUqKQorCQk7OworCXZ4d29ya3Mtc2ltbGludXggfCB2eHdvcmtzLXNpbXdpbmRvd3MgfCB2eHdvcmtzLXNwZSkKKwkJOzsKKwludG8tcW54KikKKwkJOzsKKwlvczItZW14KQorCQk7OworCSotZWFiaSogfCAqLWdudWVhYmkqKQorCQk7OworCS0qKQorCQkjIEJsYW5rIGtlcm5lbCB3aXRoIHJlYWwgT1MgaXMgYWx3YXlzIGZpbmUuCisJCTs7CisJKi0qKQorCQllY2hvICJJbnZhbGlkIGNvbmZpZ3VyYXRpb24gXGAkMSc6IEtlcm5lbCBcYCRrZXJuZWwnIG5vdCBrbm93biB0byB3b3JrIHdpdGggT1MgXGAkb3MnLiIgMT4mMgorCQlleGl0IDEKKwkJOzsKK2VzYWMKKworIyBIZXJlIHdlIGhhbmRsZSB0aGUgY2FzZSB3aGVyZSB3ZSBrbm93IHRoZSBvcywgYW5kIHRoZSBDUFUgdHlwZSwgYnV0IG5vdCB0aGUKKyMgbWFudWZhY3R1cmVyLiAgV2UgcGljayB0aGUgbG9naWNhbCBtYW51ZmFjdHVyZXIuCitjYXNlICR2ZW5kb3IgaW4KKwl1bmtub3duKQorCQljYXNlICRjcHUtJG9zIGluCisJCQkqLXJpc2NpeCopCisJCQkJdmVuZG9yPWFjb3JuCisJCQkJOzsKKwkJCSotc3Vub3MqKQorCQkJCXZlbmRvcj1zdW4KKwkJCQk7OworCQkJKi1jbmsqIHwgKi1haXgqKQorCQkJCXZlbmRvcj1pYm0KKwkJCQk7OworCQkJKi1iZW9zKikKKwkJCQl2ZW5kb3I9YmUKKwkJCQk7OworCQkJKi1ocHV4KikKKwkJCQl2ZW5kb3I9aHAKKwkJCQk7OworCQkJKi1tcGVpeCopCisJCQkJdmVuZG9yPWhwCisJCQkJOzsKKwkJCSotaGl1eCopCisJCQkJdmVuZG9yPWhpdGFjaGkKKwkJCQk7OworCQkJKi11bm9zKikKKwkJCQl2ZW5kb3I9Y3JkcworCQkJCTs7CisJCQkqLWRndXgqKQorCQkJCXZlbmRvcj1kZworCQkJCTs7CisJCQkqLWx1bmEqKQorCQkJCXZlbmRvcj1vbXJvbgorCQkJCTs7CisJCQkqLWdlbml4KikKKwkJCQl2ZW5kb3I9bnMKKwkJCQk7OworCQkJKi1jbGl4KikKKwkJCQl2ZW5kb3I9aW50ZXJncmFwaAorCQkJCTs7CisJCQkqLW12cyogfCAqLW9wZW5lZCopCisJCQkJdmVuZG9yPWlibQorCQkJCTs7CisJCQkqLW9zNDAwKikKKwkJCQl2ZW5kb3I9aWJtCisJCQkJOzsKKwkJCXMzOTAtKiB8IHMzOTB4LSopCisJCQkJdmVuZG9yPWlibQorCQkJCTs7CisJCQkqLXB0eCopCisJCQkJdmVuZG9yPXNlcXVlbnQKKwkJCQk7OworCQkJKi10cGYqKQorCQkJCXZlbmRvcj1pYm0KKwkJCQk7OworCQkJKi12eHNpbSogfCAqLXZ4d29ya3MqIHwgKi13aW5kaXNzKikKKwkJCQl2ZW5kb3I9d3JzCisJCQkJOzsKKwkJCSotYXV4KikKKwkJCQl2ZW5kb3I9YXBwbGUKKwkJCQk7OworCQkJKi1obXMqKQorCQkJCXZlbmRvcj1oaXRhY2hpCisJCQkJOzsKKwkJCSotbXB3KiB8ICotbWFjb3MqKQorCQkJCXZlbmRvcj1hcHBsZQorCQkJCTs7CisJCQkqLSptaW50IHwgKi1taW50WzAtOV0qIHwgKi0qTWlOVCB8ICotTWlOVFswLTldKikKKwkJCQl2ZW5kb3I9YXRhcmkKKwkJCQk7OworCQkJKi12b3MqKQorCQkJCXZlbmRvcj1zdHJhdHVzCisJCQkJOzsKKwkJZXNhYworCQk7OworZXNhYworCitlY2hvICIkY3B1LSR2ZW5kb3ItJHtrZXJuZWw6KyRrZXJuZWwtfSRvcyIKK2V4aXQKKworIyBMb2NhbCB2YXJpYWJsZXM6CisjIGV2YWw6IChhZGQtaG9vayAnYmVmb3JlLXNhdmUtaG9vayAndGltZS1zdGFtcCkKKyMgdGltZS1zdGFtcC1zdGFydDogInRpbWVzdGFtcD0nIgorIyB0aW1lLXN0YW1wLWZvcm1hdDogIiU6eS0lMDJtLSUwMmQiCisjIHRpbWUtc3RhbXAtZW5kOiAiJyIKKyMgRW5kOgpkaWZmIC0tZ2l0IGEvYWNkaXIvaW5zdGFsbC1zaCBiL2FjZGlyL2luc3RhbGwtc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMmE5OWMzMwotLS0gL2Rldi9udWxsCisrKyBiL2FjZGlyL2luc3RhbGwtc2gKQEAgLTAsMCArMSwxOTEgQEAKKyMhL2Jpbi9zaAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorIyAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyMKKyMgQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorIworIyBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorIworIyBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisjIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyMgbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisjCisjIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK3VtYXNrIDA3NworCitwcm9ncmFtTmFtZT0iYGVjaG8gIiR7MH0iIHwgc2VkIC1lICdzJV4uKi8lJSdgIgorcHJvZ3JhbU1lc3NhZ2UoKSB7CisgICBlY2hvID4mMiAiJHtwcm9ncmFtTmFtZX06ICR7MX0iCit9CisKK3N5bnRheEVycm9yKCkgeworICAgcHJvZ3JhbU1lc3NhZ2UgIiR7MX0iCisgICBleGl0IDIKK30KKworZGVmYXVsdE1vZGU9IjA3NTUiCitkZWZhdWx0U3RyaXBDb21tYW5kPSJzdHJpcCIKKworY29weUNvbW1hbmQ9ImNwIgorZGlyZWN0b3J5Q29tbWFuZD0ibWtkaXIgLXAiCitncm91cENvbW1hbmQ9ImNoZ3JwIgorbW9kZUNvbW1hbmQ9ImNobW9kIgorb3duZXJDb21tYW5kPSJjaG93biIKK3N0cmlwQ29tbWFuZD0iJHtkZWZhdWx0U3RyaXBDb21tYW5kfSIKKworY3JlYXRlRGlyZWN0b3JpZXM9ZmFsc2UKK25ld0dyb3VwPSIiCituZXdNb2RlPSIke2RlZmF1bHRNb2RlfSIKK25ld093bmVyPSIiCitzaG93QWN0aW9ucz1mYWxzZQorc2hvd1VzYWdlPWZhbHNlCitzdHJpcFN5bWJvbHM9ZmFsc2UKKword2hpbGUgWyAiJHsjfSIgLWd0IDAgXQorZG8KKyAgIG9wdGlvbj0iJHsxfSIKKyAgIG9wZXJhbmQ9IiIKKworICAgY2FzZSAiJHtvcHRpb259IgorICAgaW4KKyAgICAgIC1jKSA7OworICAgICAgLWR8LS1kaXJlY3RvcnkpIGNyZWF0ZURpcmVjdG9yaWVzPXRydWU7OworICAgICAgLWd8LS1ncm91cCkgb3BlcmFuZD1uZXdHcm91cDs7CisgICAgICAtaHwtLWhlbHApIHNob3dVc2FnZT10cnVlOzsKKyAgICAgIC1tfC0tbW9kZSkgb3BlcmFuZD1uZXdNb2RlOzsKKyAgICAgIC1vfC0tb3duZXIpIG9wZXJhbmQ9bmV3T3duZXI7OworICAgICAgLXN8LS1zdHJpcCkgc3RyaXBTeW1ib2xzPXRydWU7OworICAgICAgLS1zdHJpcC1wcm9ncmFtKSBvcGVyYW5kPXN0cmlwQ29tbWFuZDs7CisgICAgICAtdnwtLXZlcmJvc2UpIHNob3dBY3Rpb25zPXRydWU7OworICAgICAgLSopIHN5bnRheEVycm9yICJ1bmtub3duIG9wdGlvbjogJHtvcHRpb259Ijs7CisgICAgICAqKSBicmVhazs7CisgICBlc2FjCisKKyAgIHNoaWZ0CisgICBbIC16ICIke29wZXJhbmR9IiBdICYmIGNvbnRpbnVlCisgICBbICIkeyN9IiAtZXEgMCBdICYmIHN5bnRheEVycm9yICJtaXNzaW5nIG9wZXJhbmQ6ICR7b3B0aW9ufSIKKyAgIGV2YWwgIiR7b3BlcmFuZH0iJz0iJHsxfSInCisgICBzaGlmdAorZG9uZQorCisiJHtzaG93VXNhZ2V9IiAmJiB7CisgICBjYXQgPDxFTkRfT0ZfVVNBR0UKK1VzYWdlOgorICAgJHtwcm9ncmFtTmFtZX0gWy1vcHRpb24gLi4uXSBzb3VyY2UgZGVzdGluYXRpb24KKyAgICR7cHJvZ3JhbU5hbWV9IFstb3B0aW9uIC4uLl0gc291cmNlIC4uLiBkZXN0aW5hdGlvbi1kaXJlY3RvcnkKKyAgICR7cHJvZ3JhbU5hbWV9IC1kIFstb3B0aW9uIC4uLl0gbmV3LWRpcmVjdG9yeSAuLi4KKworT3B0aW9uczoKKyAgIC1jICAgICAgICAgICAgICAgIGlnbm9yZWQgKGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5KQorICAgLWR8LS1kaXJlY3RvcnkgICAgY3JlYXRlIGFsbCBjb21wb25lbnRzIG9mIHNwZWNpZmllZCBkaXJlY3RvcmllcworICAgLWd8LS1ncm91cCBncm91cCAgc2V0IG93bmluZyBncm91cAorICAgLWh8LS1oZWxwICAgICAgICAgZGlzcGxheSB1c2FnZSBzdW1tYXJ5ICh0aGlzIHRleHQpLCBhbmQgdGhlbiBleGl0CisgICAtbXwtLW1vZGUgbW9kZSAgICBzZXQgcGVybWlzc2lvbiBtb2RlIChkZWZhdWx0IGlzICR7ZGVmYXVsdE1vZGV9KQorICAgLW98LS1vd25lciBvd25lciAgc2V0IG93bmluZyB1c2VyCisgICAtc3wtLXN0cmlwICAgICAgICBzdHJpcCBzeW1ib2xzIGZyb20gZXhlY3V0YWJsZXMKKyAgIC0tc3RyaXAtcHJvZ3JhbSAgIHNldCBzeW1ib2wgc3RyaXBwaW5nIGNvbW1hbmQgKGRlZmF1bHQgaXMgJHtkZWZhdWx0U3RyaXBDb21tYW5kfSkKKyAgIC12fC0tdmVyYm9zZSAgICAgIHJlW3BydCBlYWNoIHN1Y2Nlc3NmdWwgYWN0aW9uCitFTkRfT0ZfVVNBR0UKKworICAgZXhpdCAwCit9CisKK2NoYW5nZUF0dHJpYnV0ZXM9JworICAgWyAiJHtuZXdNb2RlfSIgIT0gIiIgXSAmJiB7CisgICAgICAke21vZGVDb21tYW5kfSAiJHtuZXdNb2RlfSIgIiR7cGF0aH0iIHx8IGV4aXQgMworICAgICAgIiR7c2hvd0FjdGlvbnN9IiAmJiBwcm9ncmFtTWVzc2FnZSAibW9kZSBjaGFuZ2VkOiAke3BhdGh9IgorICAgfQorCisgICBbICIke25ld0dyb3VwfSIgIT0gIiIgXSAmJiB7CisgICAgICAke2dyb3VwQ29tbWFuZH0gIiR7bmV3R3JvdXB9IiAiJHtwYXRofSIgfHwgZXhpdCAzCisgICAgICAiJHtzaG93QWN0aW9uc30iICYmIHByb2dyYW1NZXNzYWdlICJncm91cCBjaGFuZ2VkOiAke3BhdGh9IgorICAgfQorCisgICBbICIke25ld093bmVyfSIgIT0gIiIgXSAmJiB7CisgICAgICAke293bmVyQ29tbWFuZH0gIiR7bmV3T3duZXJ9IiAiJHtwYXRofSIgfHwgZXhpdCAzCisgICAgICAiJHtzaG93QWN0aW9uc30iICYmIHByb2dyYW1NZXNzYWdlICJvd25lciBjaGFuZ2VkOiAke3BhdGh9IgorICAgfQorJworCisiJHtjcmVhdGVEaXJlY3Rvcmllc30iICYmIHsKKyAgICIke3N0cmlwU3ltYm9sc30iICYmIHN5bnRheEVycm9yICJjYW5ub3Qgc3RyaXAgYSBkaXJlY3RvcnkuIgorICAgWyAiJHsjfSIgLWVxIDAgXSAmJiBzeW50YXhFcnJvciAiZGlyZWN0b3J5IG5vdCBzcGVjaWZpZWQuIgorCisgICBmb3IgZGVzdGluYXRpb24KKyAgIGRvCisgICAgICBbICIke2Rlc3RpbmF0aW9ufSIgPSAiIiBdICYmIHsKKyAgICAgICAgIHByb2dyYW1NZXNzYWdlICJudWxsIGRpcmVjdG9yeS4iCisgICAgICAgICBjb250aW51ZQorICAgICAgfQorCisgICAgICBkaXJlY3Rvcnk9IiIKKyAgICAgIHBhdGhzPSIiCisgICAgICBmb3IgY29tcG9uZW50IGluIGBlY2hvICIke2Rlc3RpbmF0aW9ufSIgfCBzZWQgLWUgJ3MlLyUgJWcnIC1lICdzJV4gJS8gJScgIC1lICdzJSAqJCUlJyAtZSAncyUgIColICVnJ2AKKyAgICAgIGRvCisgICAgICAgICBkaXJlY3Rvcnk9IiR7ZGlyZWN0b3J5fSR7Y29tcG9uZW50fSIKKyAgICAgICAgIFsgIiR7Y29tcG9uZW50fSIgPSAiLyIgXSB8fCBkaXJlY3Rvcnk9IiR7ZGlyZWN0b3J5fS8iCisKKyAgICAgICAgIFsgLWQgIiR7ZGlyZWN0b3J5fSIgXSB8fCB7CisgICAgICAgICAgICAke2RpcmVjdG9yeUNvbW1hbmR9ICIke2RpcmVjdG9yeX0iIHx8IGV4aXQgMworICAgICAgICAgICAgIiR7c2hvd0FjdGlvbnN9IiAmJiBwcm9ncmFtTWVzc2FnZSAiZGlyZWN0b3J5IGNyZWF0ZWQ6ICR7ZGlyZWN0b3J5fSIKKyAgICAgICAgICAgIHBhdGhzPSIke2RpcmVjdG9yeX0gJHtwYXRoc30iCisgICAgICAgICB9CisgICAgICBkb25lCisKKyAgICAgIFsgLW4gIiR7cGF0aHN9IiBdICYmIHsKKyAgICAgICAgIGZvciBwYXRoIGluICRwYXRocworICAgICAgICAgZG8KKyAgICAgICAgICAgIGV2YWwgIiR7Y2hhbmdlQXR0cmlidXRlc30iCisgICAgICAgICBkb25lCisgICAgICB9CisgICBkb25lCisKKyAgIGV4aXQgMAorfQorCitbICIkeyN9IiAtZXEgMCBdICYmIHN5bnRheEVycm9yICJzb3VyY2Ugbm90IHNwZWNpZmllZC4iCitbICIkeyN9IiAtZXEgMSBdICYmIHN5bnRheEVycm9yICJkZXN0aW5hdGlvbiBub3Qgc3BlY2lmaWVkLiIKKworY291bnQ9ImBleHByICIkeyN9IiAtIDFgIgorZGVzdGluYXRpb249ImAoIHNoaWZ0ICIke2NvdW50fSI7IGVjaG8gIiR7MX0iIClgIgorCitpZiBbIC1kICIke2Rlc3RpbmF0aW9ufSIgXQordGhlbgorICAgdG9EaXJlY3Rvcnk9dHJ1ZQorZWxzZQorICAgWyAiJHsjfSIgLWVxIDIgXSB8fCBzeW50YXhFcnJvciAibW9yZSB0aGFuIG9uZSBzb3VyY2UgLSBkZXN0aW5hdGlvbiBub3QgYSBkaXJlY3Rvcnk6ICR7ZGVzdGluYXRpb259IgorICAgdG9EaXJlY3Rvcnk9ZmFsc2UKK2ZpCisKK3doaWxlIFsgIiR7I30iIC1ndCAxIF0KK2RvCisgICBzb3VyY2U9IiR7MX0iCisgICBzaGlmdAorCisgICBpZiBbIC1mICIke3NvdXJjZX0iIF0KKyAgIHRoZW4KKyAgICAgIHR5cGU9ZmlsZQorICAgZWxzZQorICAgICAgc3ludGF4RXJyb3IgInNvdXJjZSBub3QgYSBmaWxlOiAke3NvdXJjZX0iCisgICBmaQorCisgICBwYXRoPSIke2Rlc3RpbmF0aW9ufSIKKyAgICIke3RvRGlyZWN0b3J5fSIgJiYgcGF0aD0iJHtwYXRofS9gYmFzZW5hbWUgJHtzb3VyY2V9YCIKKyAgICR7Y29weUNvbW1hbmR9ICIke3NvdXJjZX0iICIke3BhdGh9IiB8fCBleGl0IDMKKyAgICIke3Nob3dBY3Rpb25zfSIgJiYgcHJvZ3JhbU1lc3NhZ2UgIiR7dHlwZX0gY29waWVkOiAke3NvdXJjZX0gLT4gJHtwYXRofSIKKworICAgIiR7c3RyaXBTeW1ib2xzfSIgJiYgeworICAgICAgJHtzdHJpcENvbW1hbmR9ICIke3BhdGh9IiB8fCBleGl0IDMKKyAgICAgICIke3Nob3dBY3Rpb25zfSIgJiYgcHJvZ3JhbU1lc3NhZ2UgInN5bWJvbHMgc3RyaXBwZWQ6ICR7cGF0aH0iCisgICB9CisKKyAgIGV2YWwgIiR7Y2hhbmdlQXR0cmlidXRlc30iCitkb25lCisKK2V4aXQgMApkaWZmIC0tZ2l0IGEvYXBpdGVzdC5zaCBiL2FwaXRlc3Quc2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDE1Y2RlNAotLS0gL2Rldi9udWxsCisrKyBiL2FwaXRlc3Quc2gKQEAgLTAsMCArMSwyNSBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBsaWJicmxhcGkgLSBBIGxpYnJhcnkgcHJvdmlkaW5nIGFjY2VzcyB0byBicmFpbGxlIHRlcm1pbmFscyBmb3IgYXBwbGljYXRpb25zLgorIworIyBDb3B5cmlnaHQgKEMpIDIwMDYtMjAyMyBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+CisjCisjIGxpYmJybGFwaSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisjCisjIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyMgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorIyBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyMKKyMgV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworIworIyBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworcHJvZ3JhbU5hbWU9IiQoYmFzZW5hbWUgIiR7MH0iKSIKK2NkICIkKGRpcm5hbWUgIiR7MH0iKSIKK3Byb2dyYW1EaXJlY3Rvcnk9IiQocHdkKSIKKworWyAteiAiJHtMRF9MSUJSQVJZX1BBVEh9IiBdIHx8IExEX0xJQlJBUllfUEFUSD0iOiR7TERfTElCUkFSWV9QQVRIfSIKK2V4cG9ydCBMRF9MSUJSQVJZX1BBVEg9IiR7cHJvZ3JhbURpcmVjdG9yeX0ke0xEX0xJQlJBUllfUEFUSH0iCitleHBvcnQgTERfUFJFTE9BRD0iJHtwcm9ncmFtRGlyZWN0b3J5fS8uLi8uLi9Qcm9ncmFtcy9saWJicmxhcGkuc28iCisKZGlmZiAtLWdpdCBhL2F1dG9nZW4gYi9hdXRvZ2VuCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjc5OTNhODUKLS0tIC9kZXYvbnVsbAorKysgYi9hdXRvZ2VuCkBAIC0wLDAgKzEsMzEgQEAKKyMhL2Jpbi9zaAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorIyAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyMKKyMgQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorIworIyBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorIworIyBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisjIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyMgbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisjCisjIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK3NldCAtZQorY2QgYGRpcm5hbWUgIiR7MH0iYAorZGlyZWN0b3J5PSJgcHdkYCIKKworVG9vbHMvZ2VuZGVwcworWyAhIC1mIE1ha2VmaWxlIF0gfHwgbWFrZSAtcyBkaXN0Y2xlYW4KK2FjbG9jYWwgLUkgIiR7ZGlyZWN0b3J5fS9tNCIKK2F1dG9jb25mCitybSAtZnIgYXV0b200dGUqLmNhY2hlIHx8IDoKKworWyAiJHsjfSIgLWd0IDAgXSAmJiAuL2NvbmZpZ3VyZSAiJHtAfSIKK2V4aXQgMApkaWZmIC0tZ2l0IGEvYmluZGluZ3MubWsgYi9iaW5kaW5ncy5tawpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOTExYzNmCi0tLSAvZGV2L251bGwKKysrIGIvYmluZGluZ3MubWsKQEAgLTAsMCArMSwzNyBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorIyAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyMKKyMgQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorIworIyBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorIworIyBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisjIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyMgbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisjCisjIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK0FQSV9OQU1FID0gYnJsYXBpCitBUElfRElSID0gJChCTERfVE9QKSQoUEdNX0RJUikKK0FQSV9MSUIgPSAkKEFQSV9ESVIpLyQoTElCX1BGWCkkKEFQSV9OQU1FKS4kKExJQl9FWFQpCitBUElfTERGTEFHUyA9IC1MJChBUElfRElSKSAtbCQoQVBJX05BTUUpCisKK0FQSV9IRFIgPSAkKEFQSV9ESVIpLyQoQVBJX05BTUUpLmgKK0FQSV9BV0sgPSAkKFNSQ19UT1ApJChQR01fRElSKS8kKEFQSV9OQU1FKS5hd2sKKworQVBJX0tFWUNPREVTID0gJChTUkNfVE9QKSQoUEdNX0RJUikvJChBUElfTkFNRSlfa2V5Y29kZXMuaAorQVBJX1BBUkFNID0gJChTUkNfVE9QKSQoUEdNX0RJUikvJChBUElfTkFNRSlfcGFyYW0uaAorQVBJX0NPTlNUQU5UUyA9ICQoQVBJX0RJUikvJChBUElfTkFNRSlfY29uc3RhbnRzLmgKK0FQSV9IRFJTID0gJChBUElfSERSKSAkKEFQSV9LRVlDT0RFUykgJChBUElfUEFSQU0pICQoQVBJX0NPTlNUQU5UUykKKworQ09OU1RBTlRTX09QVElPTlMgPSAtZiAkKEFQSV9BV0spIC1mICQoU1JDX0RJUikvY29uc3RhbnRzLmF3aworQ09OU1RBTlRTX1NDUklQVFMgPSAkKENPTlNUQU5UU19PUFRJT05TOi1mPSkKK0NPTlNUQU5UU19TT1VSQ0VTID0gJChBUElfSERSKSAkKEFQSV9LRVlDT0RFUykgJChBUElfUEFSQU0pCitDT05TVEFOVFNfREVQRU5ERU5DSUVTID0gJChDT05TVEFOVFNfU0NSSVBUUykgJChDT05TVEFOVFNfU09VUkNFUykgJChDT01NQU5EU19ERVBFTkRFTkNJRVMpCitDT05TVEFOVFNfQVJHVU1FTlRTID0gJChDT05TVEFOVFNfT1BUSU9OUykgJChDT01NQU5EU19PUFRJT05TKSAkKENPTlNUQU5UU19TT1VSQ0VTKSAkKENPTU1BTkRTX1NPVVJDRVMpCisKZGlmZiAtLWdpdCBhL2JsdXplLnRleHRwcm90byBiL2JsdXplLnRleHRwcm90bwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41N2ExY2FkCi0tLSAvZGV2L251bGwKKysrIGIvYmx1emUudGV4dHByb3RvCkBAIC0wLDAgKzEsNDQgQEAKKyMgcHJvdG8tZmlsZTogZGV2dG9vbHMvYmx1ZXByaW50L2JsdWVwcmludF9maWxlLnByb3RvCisjIHByb3RvLW1lc3NhZ2U6IEJsdWVwcmludEZpbGUKKyMgRE8gTk9UIEVESVQhIFJlZ2VuZXJhdGUgdGhlIGNvbnRlbnRzIGJ5IHJ1bm5pbmcgZ28vYmx1emUgYWZ0ZXIgY2hhbmdpbmcgYW55IEJVSUxEIGZpbGUgb3IgdGhlIEJsdWVwcmludC4KKyMgT3ZlcnJpZGUgdGhlIGRlZmF1bHQgdmFsdWVzIGluIHRoaXJkX3BhcnR5LmJybHR0eS5ibHVlcHJpbnQgaW5zdGVhZC4KKworYnVpbGRhYmxlX3VuaXQ6IHsKKyAgbmFtZTogInRoaXJkX3BhcnR5LmJybHR0eSIKKyAgYnVpbGRfcGF0dGVybjogIi8vdGhpcmRfcGFydHkvYnJsdHR5Ly4uLiIKKyAgdGVzdF9wYXR0ZXJuOiAiLy90aGlyZF9wYXJ0eS9icmx0dHkvLi4uIgorICB0ZXN0X3RhZ19maWx0ZXI6ICItbm9mYXN0YnVpbGQiCisgIGJ1aWxkX3RhZ19maWx0ZXI6ICItbm9mYXN0YnVpbGQiCisgIGVuYWJsZV9jb3ZlcmFnZTogdHJ1ZQorICBlbmFibGVfcHJlc3VibWl0OiB0cnVlCisgIGVuYWJsZV9jb250aW51b3VzX2J1aWxkOiB0cnVlCisgIGNvbnRpbnVvdXNfYnVpbGRfZW1haWw6IHsKKyAgICBidWlsZF9jb3BfZW1haWxfaWQ6ICJ0YWxrYmFjay1idWlsZC1tZXNzYWdlcytidWlsZGdhcmRlbmVyQGdvb2dsZS5jb20iCisgIH0KKyAgZW5hYmxlX3JlbGVhc2U6IGZhbHNlCit9CitidWlsZGFibGVfdW5pdDogeworICBuYW1lOiAidGhpcmRfcGFydHkuYnJsdHR5Lm9wdCIKKyAgdGVzdF9wYXR0ZXJuOiAiLy90aGlyZF9wYXJ0eS9icmx0dHkvLi4uIgorICB0ZXN0X3RhZ19maWx0ZXI6ICItbm9vcHQiCisgIGJ1aWxkX2ZsYWc6ICItLWNvbXBpbGF0aW9uX21vZGU9b3B0IgorICBlbmFibGVfY292ZXJhZ2U6IGZhbHNlCisgIGVuYWJsZV9wcmVzdWJtaXQ6IGZhbHNlCisgIGVuYWJsZV9jb250aW51b3VzX2J1aWxkOiBmYWxzZQorICBjb250aW51b3VzX2J1aWxkX2VtYWlsOiB7CisgICAgYnVpbGRfY29wX2VtYWlsX2lkOiAidGFsa2JhY2stYnVpbGQtbWVzc2FnZXMrYnVpbGRnYXJkZW5lckBnb29nbGUuY29tIgorICB9CisgIGVuYWJsZV9yZWxlYXNlOiBmYWxzZQorICBbdGFwLnRhcF9zZXR0aW5nc106IHsKKyAgICBvbl9kZW1hbmQ6IHRydWUKKyAgICBvbl9kZW1hbmRfZnJlcXVlbmN5OiBFVkVSWV80X0hPVVJTCisgIH0KK30KK2NvbnRpbnVvdXNfdGVzdHM6IHsKKyAgbmFtZTogInRoaXJkX3BhcnR5LmJybHR0eSIKKyAgYnVpbGRhYmxlX3VuaXRfbmFtZTogInRoaXJkX3BhcnR5LmJybHR0eSIKK30KK2NvbnRpbnVvdXNfdGVzdHM6IHsKKyAgbmFtZTogInRoaXJkX3BhcnR5LmJybHR0eS5vcHQiCisgIGJ1aWxkYWJsZV91bml0X25hbWU6ICJ0aGlyZF9wYXJ0eS5icmx0dHkub3B0IgorfQpkaWZmIC0tZ2l0IGEvYnJhaWxsZS5tayBiL2JyYWlsbGUubWsKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2FkOGU3YwotLS0gL2Rldi9udWxsCisrKyBiL2JyYWlsbGUubWsKQEAgLTAsMCArMSw0NCBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorIyAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyMKKyMgQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorIworIyBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorIworIyBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisjIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyMgbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisjCisjIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK1RYVDJITFAgPSAkKEJMRF9UT1ApJChQR01fRElSKS90eHQyaGxwJFgKKyQoVFhUMkhMUCkkWDoKKwljZCAkKEBEKSAmJiAkKE1BS0UpICQoQEYpCisKK0JSTF9ERUZTID0gJy1ERFJJVkVSX05BTUU9JChEUklWRVJfTkFNRSknICctRERSSVZFUl9DT0RFPSQoRFJJVkVSX0NPREUpJyAnLUREUklWRVJfQ09NTUVOVD0iJChEUklWRVJfQ09NTUVOVCkiJyAnLUREUklWRVJfVkVSU0lPTj0iJChEUklWRVJfVkVSU0lPTikiJyAnLUREUklWRVJfREVWRUxPUEVSUz0iJChEUklWRVJfREVWRUxPUEVSUykiJworQlJMX0NGTEFHUyA9ICQoTElCQ0ZMQUdTKSAkKEJSTF9ERUZTKQorQlJMX0NYWEZMQUdTID0gJChMSUJDWFhGTEFHUykgJChCUkxfREVGUykKK0JSTF9NT0RfTkFNRSA9ICQoQkxEX1RPUCkkKERSVl9ESVIpLyQoTU9EX05BTUUpYiQoRFJJVkVSX0NPREUpCitCUkxfTU9EX0ZJTEUgPSAkKEJSTF9NT0RfTkFNRSkuJChNT0RfRVhUKQorJChCUkxfTU9EX0ZJTEUpOiBicmFpbGxlLiRPCisJJChJTlNUQUxMX0RJUkVDVE9SWSkgJChARCkKKwkkKE1LU0hSKSAkKEApIGJyYWlsbGUuJE8gJChCUkxfT0JKUykKK2JyYWlsbGUtZHJpdmVyOiAkKEJSTF9NT0RfRklMRSkKKworaW5zdGFsbC1hcGk6OgorCSQoSU5TVEFMTF9ESVJFQ1RPUlkpICQoSU5TVEFMTF9ST09UKSQoSU5DTFVERV9ESVJFQ1RPUlkpCisJZm9yIGZpbGUgaW4gJChTUkNfRElSKS8qLSQoRFJJVkVSX0NPREUpLmg7IGRvIHRlc3QgLWYgJCRmaWxlICYmICQoSU5TVEFMTF9EQVRBKSAkJGZpbGUgJChJTlNUQUxMX1JPT1QpJChJTkNMVURFX0RJUkVDVE9SWSk7IGRvbmUgfHwgOgorCitpbnN0YWxsOjogJChJTlNUQUxMX0FQSSkKKwordW5pbnN0YWxsOjoKKwlybSAtZiAkKElOU1RBTExfUk9PVCkkKElOQ0xVREVfRElSRUNUT1JZKS8qLSQoRFJJVkVSX0NPREUpLmgKKworY2xlYW46OgorCS1ybSAtZiAkKEJSTF9NT0RfTkFNRSkuKgorCS1ybSAtZiAkKEJMRF9UT1ApJChEQVRfRElSKS9icmx0dHktJChEUklWRVJfQ09ERSlbLS5dKgpkaWZmIC0tZ2l0IGEvYnJsdHR5LWNvbmZpZy5zaC5pbiBiL2JybHR0eS1jb25maWcuc2guaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTE2ODU5OAotLS0gL2Rldi9udWxsCisrKyBiL2JybHR0eS1jb25maWcuc2guaW4KQEAgLTAsMCArMSwxMzEgQEAKKyMhL2Jpbi9zaAorIyBAY29uZmlndXJlX2lucHV0QAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorIyAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyMKKyMgQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorIworIyBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorIworIyBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisjIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyMgbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisjCisjIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK2JybHR0eUNvbmZpZ19hc3NpZ25WYXJpYWJsZSgpIHsKKyAgIGV2YWwgIiR7MX0iJz0iJHsyfSInCit9CisKK2JybHR0eUNvbmZpZ19kZWZpbmVWYXJpYWJsZSgpIHsKKyAgIGxvY2FsIG5hbWU9IiR7MX0iCisgICBsb2NhbCB2YWx1ZT0iJHsyfSIKKworICAgd2hpbGUgdHJ1ZQorICAgZG8KKyAgICAgIGV2YWwgbG9jYWwgJ25ldz0iJyR7dmFsdWV9JyInCisgICAgICBbICIke25ld30iICE9ICIke3ZhbHVlfSIgXSB8fCBicmVhaworICAgICAgdmFsdWU9IiR7bmV3fSIKKyAgIGRvbmUKKworICAgYnJsdHR5Q29uZmlnX2Fzc2lnblZhcmlhYmxlICIke25hbWV9IiAiJHt2YWx1ZX0iCit9CisKK2JybHR0eUNvbmZpZ19kZWZpbmVWYXJpYWJsZXMoKSB7CisgICBsb2NhbCBwcmVmaXg9J0BwcmVmaXhAJworICAgbG9jYWwgc3lzY29uZmRpcj0nQHN5c2NvbmZkaXJAJworICAgbG9jYWwgZGF0YXJvb3RkaXI9J0BkYXRhcm9vdGRpckAnCisgICBsb2NhbCBkYXRhZGlyPSdAZGF0YWRpckAnCisgICBsb2NhbCBzaGFyZWRzdGF0ZWRpcj0nQHNoYXJlZHN0YXRlZGlyQCcKKyAgIGxvY2FsIGxvY2Fsc3RhdGVkaXI9J0Bsb2NhbHN0YXRlZGlyQCcKKyAgIGxvY2FsIGluY2x1ZGVkaXI9J0BpbmNsdWRlZGlyQCcKKyAgIGxvY2FsIG9sZGluY2x1ZGVkaXI9J0BvbGRpbmNsdWRlZGlyQCcKKworICAgbG9jYWwgZXhlY19wcmVmaXg9J0BleGVjX3ByZWZpeEAnCisgICBsb2NhbCBiaW5kaXI9J0BiaW5kaXJAJworICAgbG9jYWwgc2JpbmRpcj0nQHNiaW5kaXJAJworICAgbG9jYWwgbGliZGlyPSdAbGliZGlyQCcKKyAgIGxvY2FsIGxpYmV4ZWNkaXI9J0BsaWJleGVjZGlyQCcKKworICAgbG9jYWwgbG9jYWxlZGlyPSdAbG9jYWxlZGlyQCcKKyAgIGxvY2FsIG1hbmRpcj0nQG1hbmRpckAnCisgICBsb2NhbCBkb2NkaXI9J0Bkb2NkaXJAJworICAgbG9jYWwgaW5mb2Rpcj0nQGluZm9kaXJAJworICAgbG9jYWwgaHRtbGRpcj0nQGh0bWxkaXJAJworICAgbG9jYWwgcGRmZGlyPSdAcGRmZGlyQCcKKyAgIGxvY2FsIHBzZGlyPSdAcHNkaXJAJworICAgbG9jYWwgZHZpZGlyPSdAZHZpZGlyQCcKKworICAgbG9jYWwgUEFDS0FHRV9UQVJOQU1FPSdAUEFDS0FHRV9UQVJOQU1FQCcKKyAgIGxvY2FsIFBBQ0tBR0VfTkFNRT0nQFBBQ0tBR0VfTkFNRUAnCisgICBsb2NhbCBQQUNLQUdFX1ZFUlNJT049J0BQQUNLQUdFX1ZFUlNJT05AJworICAgbG9jYWwgUEFDS0FHRV9VUkw9J0BQQUNLQUdFX1VSTEAnCisgICBsb2NhbCBQQUNLQUdFX0JVR1JFUE9SVD0nQFBBQ0tBR0VfQlVHUkVQT1JUQCcKKworICAgbG9jYWwgZXhlY3V0ZV9yb290PSdAZXhlY3V0ZV9yb290QCcKKyAgIGxvY2FsIHByb2dyYW1fZGlyZWN0b3J5PSdAcHJvZ3JhbV9kaXJlY3RvcnlAJworICAgbG9jYWwgZHJpdmVyc19kaXJlY3Rvcnk9J0Bkcml2ZXJzX2RpcmVjdG9yeUAnCisgICBsb2NhbCB0YWJsZXNfZGlyZWN0b3J5PSdAdGFibGVzX2RpcmVjdG9yeUAnCisgICBsb2NhbCB1cGRhdGFibGVfZGlyZWN0b3J5PSdAdXBkYXRhYmxlX2RpcmVjdG9yeUAnCisgICBsb2NhbCB3cml0YWJsZV9kaXJlY3Rvcnk9J0B3cml0YWJsZV9kaXJlY3RvcnlAJworICAgbG9jYWwgbWFucGFnZV9kaXJlY3Rvcnk9J0BtYW5wYWdlX2RpcmVjdG9yeUAnCisgICBsb2NhbCBpbmNsdWRlX2RpcmVjdG9yeT0nQGluY2x1ZGVfZGlyZWN0b3J5QCcKKworICAgbG9jYWwgcHJpdmlsZWdlX3BhcmFtZXRlcnM9J0Bwcml2aWxlZ2VfcGFyYW1ldGVyc0AnCisKKyAgIGxvY2FsIGFwaV92ZXJzaW9uPSdAYXBpX3ZlcnNpb25AJworICAgbG9jYWwgYXBpX3JlbGVhc2U9J0BhcGlfcmVsZWFzZUAnCisgICBsb2NhbCBhcGlfYXV0aGtleWZpbGU9J0BhcGlfYXV0aGtleWZpbGVAJworCisgICBicmx0dHlDb25maWdfZGVmaW5lVmFyaWFibGUgQlJMVFRZX1BSRUZJWCAiJHtwcmVmaXh9IgorICAgYnJsdHR5Q29uZmlnX2RlZmluZVZhcmlhYmxlIEJSTFRUWV9TWVNDT05GRElSICIke3N5c2NvbmZkaXJ9IgorICAgYnJsdHR5Q29uZmlnX2RlZmluZVZhcmlhYmxlIEJSTFRUWV9EQVRBUk9PVERJUiAiJHtkYXRhcm9vdGRpcn0iCisgICBicmx0dHlDb25maWdfZGVmaW5lVmFyaWFibGUgQlJMVFRZX0RBVEFESVIgIiR7ZGF0YWRpcn0iCisgICBicmx0dHlDb25maWdfZGVmaW5lVmFyaWFibGUgQlJMVFRZX1NIQVJFRFNUQVRFRElSICIke3NoYXJlZHN0YXRlZGlyfSIKKyAgIGJybHR0eUNvbmZpZ19kZWZpbmVWYXJpYWJsZSBCUkxUVFlfTE9DQUxTVEFURURJUiAiJHtsb2NhbHN0YXRlZGlyfSIKKyAgIGJybHR0eUNvbmZpZ19kZWZpbmVWYXJpYWJsZSBCUkxUVFlfSU5DTFVERURJUiAiJHtpbmNsdWRlZGlyfSIKKyAgIGJybHR0eUNvbmZpZ19kZWZpbmVWYXJpYWJsZSBCUkxUVFlfT0xESU5DTFVERURJUiAiJHtvbGRpbmNsdWRlZGlyfSIKKworICAgYnJsdHR5Q29uZmlnX2RlZmluZVZhcmlhYmxlIEJSTFRUWV9FWEVDX1BSRUZJWCAiJHtleGVjX3ByZWZpeH0iCisgICBicmx0dHlDb25maWdfZGVmaW5lVmFyaWFibGUgQlJMVFRZX0JJTkRJUiAiJHtiaW5kaXJ9IgorICAgYnJsdHR5Q29uZmlnX2RlZmluZVZhcmlhYmxlIEJSTFRUWV9TQklORElSICIke3NiaW5kaXJ9IgorICAgYnJsdHR5Q29uZmlnX2RlZmluZVZhcmlhYmxlIEJSTFRUWV9MSUJESVIgIiR7bGliZGlyfSIKKyAgIGJybHR0eUNvbmZpZ19kZWZpbmVWYXJpYWJsZSBCUkxUVFlfTElCRVhFQ0RJUiAiJHtsaWJleGVjZGlyfSIKKworICAgYnJsdHR5Q29uZmlnX2RlZmluZVZhcmlhYmxlIEJSTFRUWV9MT0NBTEVESVIgIiR7bG9jYWxlZGlyfSIKKyAgIGJybHR0eUNvbmZpZ19kZWZpbmVWYXJpYWJsZSBCUkxUVFlfTUFORElSICIke21hbmRpcn0iCisgICBicmx0dHlDb25maWdfZGVmaW5lVmFyaWFibGUgQlJMVFRZX0lORk9ESVIgIiR7aW5mb2Rpcn0iCisgICBicmx0dHlDb25maWdfZGVmaW5lVmFyaWFibGUgQlJMVFRZX0RPQ0RJUiAiJHtkb2NkaXJ9IgorICAgYnJsdHR5Q29uZmlnX2RlZmluZVZhcmlhYmxlIEJSTFRUWV9IVE1MRElSICIke2h0bWxkaXJ9IgorICAgYnJsdHR5Q29uZmlnX2RlZmluZVZhcmlhYmxlIEJSTFRUWV9QREZESVIgIiR7cGRmZGlyfSIKKyAgIGJybHR0eUNvbmZpZ19kZWZpbmVWYXJpYWJsZSBCUkxUVFlfUFNESVIgIiR7cHNkaXJ9IgorICAgYnJsdHR5Q29uZmlnX2RlZmluZVZhcmlhYmxlIEJSTFRUWV9EVklESVIgIiR7ZHZpZGlyfSIKKworICAgYnJsdHR5Q29uZmlnX2RlZmluZVZhcmlhYmxlIEJSTFRUWV9UQVJOQU1FICIke1BBQ0tBR0VfVEFSTkFNRX0iCisgICBicmx0dHlDb25maWdfZGVmaW5lVmFyaWFibGUgQlJMVFRZX05BTUUgIiR7UEFDS0FHRV9OQU1FfSIKKyAgIGJybHR0eUNvbmZpZ19kZWZpbmVWYXJpYWJsZSBCUkxUVFlfVkVSU0lPTiAiJHtQQUNLQUdFX1ZFUlNJT059IgorICAgYnJsdHR5Q29uZmlnX2RlZmluZVZhcmlhYmxlIEJSTFRUWV9VUkwgIiR7UEFDS0FHRV9VUkx9IgorICAgYnJsdHR5Q29uZmlnX2RlZmluZVZhcmlhYmxlIEJSTFRUWV9CVUdSRVBPUlQgIiR7UEFDS0FHRV9CVUdSRVBPUlR9IgorCisgICBicmx0dHlDb25maWdfZGVmaW5lVmFyaWFibGUgQlJMVFRZX1JPT1QgIiR7ZXhlY3V0ZV9yb290fSIKKyAgIGJybHR0eUNvbmZpZ19kZWZpbmVWYXJpYWJsZSBCUkxUVFlfUFJPR1JBTVNfRElSRUNUT1JZICIke3Byb2dyYW1fZGlyZWN0b3J5fSIKKyAgIGJybHR0eUNvbmZpZ19kZWZpbmVWYXJpYWJsZSBCUkxUVFlfRFJJVkVSU19ESVJFQ1RPUlkgIiR7ZHJpdmVyc19kaXJlY3Rvcnl9IgorICAgYnJsdHR5Q29uZmlnX2RlZmluZVZhcmlhYmxlIEJSTFRUWV9UQUJMRVNfRElSRUNUT1JZICIke3RhYmxlc19kaXJlY3Rvcnl9IgorICAgYnJsdHR5Q29uZmlnX2RlZmluZVZhcmlhYmxlIEJSTFRUWV9VUERBVEFCTEVfRElSRUNUT1JZICIke3VwZGF0YWJsZV9kaXJlY3Rvcnl9IgorICAgYnJsdHR5Q29uZmlnX2RlZmluZVZhcmlhYmxlIEJSTFRUWV9XUklUQUJMRV9ESVJFQ1RPUlkgIiR7d3JpdGFibGVfZGlyZWN0b3J5fSIKKyAgIGJybHR0eUNvbmZpZ19kZWZpbmVWYXJpYWJsZSBCUkxUVFlfTUFOUEFHRV9ESVJFQ1RPUlkgIiR7bWFucGFnZV9kaXJlY3Rvcnl9IgorICAgYnJsdHR5Q29uZmlnX2RlZmluZVZhcmlhYmxlIEJSTFRUWV9JTkNMVURFX0RJUkVDVE9SWSAiJHtpbmNsdWRlX2RpcmVjdG9yeX0iCisKKyAgIGJybHR0eUNvbmZpZ19kZWZpbmVWYXJpYWJsZSBCUkxUVFlfUFJJVklMRUdFX1BBUkFNRVRFUlMgIiR7cHJpdmlsZWdlX3BhcmFtZXRlcnN9IgorCisgICBicmx0dHlDb25maWdfZGVmaW5lVmFyaWFibGUgQlJMQVBJX1ZFUlNJT04gIiR7YXBpX3ZlcnNpb259IgorICAgYnJsdHR5Q29uZmlnX2RlZmluZVZhcmlhYmxlIEJSTEFQSV9SRUxFQVNFICIke2FwaV9yZWxlYXNlfSIKKyAgIGJybHR0eUNvbmZpZ19kZWZpbmVWYXJpYWJsZSBCUkxBUElfS0VZX0ZJTEUgIiR7c3lzY29uZmRpcn0vJHthcGlfYXV0aGtleWZpbGV9IgorfQorCiticmx0dHlDb25maWdfZGVmaW5lVmFyaWFibGVzCmRpZmYgLS1naXQgYS9icmx0dHktZ2Vua2V5IGIvYnJsdHR5LWdlbmtleQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5lY2FmMTcwCi0tLSAvZGV2L251bGwKKysrIGIvYnJsdHR5LWdlbmtleQpAQCAtMCwwICsxLDYyIEBACisjIS9iaW4vc2gKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyMgICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisjCisjIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyMKKyMgQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitzZXQgLWUKK3VtYXNrIDA3NworCisuICJgZGlybmFtZSAiJHswfSJgL2JybHR0eS1wcm9sb2d1ZS5zaCIKKy4gIiR7cHJvZ3JhbURpcmVjdG9yeX0vYnJsdHR5LWNvbmZpZy5zaCIKK2RlZmF1bHRLZXlGaWxlPSIke0JSTFRUWV9FWEVDVVRFX1JPT1R9JHtCUkxBUElfS0VZX0ZJTEV9IgorCitzaG93UHJvZ3JhbVVzYWdlUHVycG9zZSgpIHsKK2NhdCA8PEVORF9PRl9QUk9HUkFNX1VTQUdFX1BVUlBPU0UKK0dlbmVyYXRlIHRoZSBCcmxBUEkgYWNjZXNzIGtleS4KK0VORF9PRl9QUk9HUkFNX1VTQUdFX1BVUlBPU0UKK30KKworYWRkUHJvZ3JhbU9wdGlvbiBmIHN0cmluZy5wYXRoIGtleUZpbGUgInRoZSBCcmxBUEkga2V5IGZpbGUiICIke2RlZmF1bHRLZXlGaWxlfSIKK3BhcnNlUHJvZ3JhbUFyZ3VtZW50cyAiJHtAfSIKKwordHJ5KCkgeworICAgKCIke0B9IjsgZXhpdCAiJHs/fSIpIDI+L2Rldi9udWxsICYmIHsKKyAgICAgIGxvZ01lc3NhZ2UgdGFzayAia2V5IGdlbmVyYXRlZCIKKyAgICAgIGV4aXQgMAorICAgfQorfQorCitbIC1uICIke2tleUZpbGV9IiBdIHx8IGtleUZpbGU9IiR7ZGVmYXVsdEtleUZpbGV9IgorCitsb2dOb3RlICJ0cnlpbmcgbWNvb2tpZSIKK3RyeSBtY29va2llID4iJHtrZXlGaWxlfSIKKworZm9yIGRldmljZSBpbiAiL2Rldi91cmFuZG9tIiAiL2Rldi9yYW5kb20iCitkbworICAgWyAtYyAiJHtkZXZpY2V9IiAtYSAtciAiJHtkZXZpY2V9IiBdICYmIHsKKyAgICAgIGxvZ05vdGUgInRyeWluZyAke2RldmljZX0iCisgICAgICB0cnkgZGQgaWY9IiR7ZGV2aWNlfSIgb2Y9IiR7a2V5RmlsZX0iIGJzPTMyIGNvdW50PTEKKyAgIH0KK2RvbmUKKworbG9nTm90ZSAidHJ5aW5nIFwkUkFORE9NIgora2V5PSIke1JBTkRPTX0iCitbIC1uICIke2tleX0iIF0gJiYgdHJ5IGVjaG8gPiIke2tleUZpbGV9IiAiJHtrZXl9IgorCitybSAtZiAtLSAiJHtrZXlGaWxlfSIKK3NlbWFudGljRXJyb3IgIm5vIHN1cHBvcnRlZCBtZWNoYW5pc20gaXMgYXZhaWxhYmxlIgorZXhpdCAzCmRpZmYgLS1naXQgYS9icmx0dHktbWt1c2VyIGIvYnJsdHR5LW1rdXNlcgpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi43NWYwMzFjCi0tLSAvZGV2L251bGwKKysrIGIvYnJsdHR5LW1rdXNlcgpAQCAtMCwwICsxLDE2MiBAQAorIyEvYmluL3NoCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisjICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorIworIyBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisjCisjIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisjCisjIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyMgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorIyBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyMKKyMgV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworIworIyBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworc2V0IC1lCisuICJgZGlybmFtZSAiJHswfSJgL2JybHR0eS1wcm9sb2d1ZS5zaCIKKy4gIiR7cHJvZ3JhbURpcmVjdG9yeX0vYnJsdHR5LWNvbmZpZy5zaCIKKworc2hvd1Byb2dyYW1Vc2FnZVB1cnBvc2UoKSB7CitjYXQgPDxFTkRfT0ZfUFJPR1JBTV9VU0FHRV9QVVJQT1NFCitTaW1wbGlmeSB0aGUgam9iIG9mIENyZWF0aW5nIGFuZCBtYWtpbmcgY2hhbmdlcyB0byBCUkxUVFkncyB1bnByaXZpbGVnZWQgdXNlci4KK0VORF9PRl9QUk9HUkFNX1VTQUdFX1BVUlBPU0UKK30KKworZGVjbGFyZSAtQSBwcml2aWxlZ2VQYXJhbWV0ZXJzCitwYXJzZVBhcmFtZXRlclN0cmluZyBwcml2aWxlZ2VQYXJhbWV0ZXJzICIke0JSTFRUWV9QUklWSUxFR0VfUEFSQU1FVEVSU30iIGx4CisKK3JlYWRvbmx5IGRlZmF1bHRVc2VyTmFtZT0iJHtwcml2aWxlZ2VQYXJhbWV0ZXJzWyJVU0VSIl19IgorcmVhZG9ubHkgZGVmYXVsdFVzZXJJbmZvcm1hdGlvbj0iQnJhaWxsZSBEZXZpY2UgRGFlbW9uIgorcmVhZG9ubHkgZGVmYXVsdEhvbWVEaXJlY3Rvcnk9IiR7QlJMVFRZX1VQREFUQUJMRV9ESVJFQ1RPUll9IgorcmVhZG9ubHkgZGVmYXVsdExvZ2luU2hlbGw9Ii9zYmluL25vbG9naW4iCisKK3Nob3dQcm9ncmFtVXNhZ2VOb3RlcygpIHsKK2NhdCA8PEVORF9PRl9QUk9HUkFNX1VTQUdFX05PVEVTCitXaGVuIGNyZWF0aW5nIGEgbmV3IHVzZXIsIHRoZXNlIG9wdGlvbnMgaGF2ZSB0aGUgZm9sbG93aW5nIGRlZmF1bHRzOgorICAtZCAgJHtkZWZhdWx0SG9tZURpcmVjdG9yeTotdGhlIGhvbWUgZGlyZWN0b3J5IGlzbid0IGRlZmluZWR9CisgIC1nICBhIG5ldyBncm91cCB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgdGhlIHVzZXIKKyAgLWkgICR7ZGVmYXVsdFVzZXJJbmZvcm1hdGlvbn0KKyAgLWwgICR7ZGVmYXVsdExvZ2luU2hlbGx9CitUaGVzZSBkZWZhdWx0cyBkb24ndCBhcHBseSB3aGVuIG1ha2luZyBjaGFuZ2VzIHRvIGFuIGV4aXN0aW5nIHVzZXIuCitFTkRfT0ZfUFJPR1JBTV9VU0FHRV9OT1RFUworfQorCitleGVjdXRlQ29tbWFuZCgpIHsKKyAgICIke3VzZVN1ZG99IiAmJiBzZXQgLS0gc3VkbyAtLSAiJHtAfSIKKworICAgaWYgIiR7dGVzdE1vZGV9IgorICAgdGhlbgorICAgICAgZWNobyAiJHsqfSIKKyAgIGVsc2UKKyAgICAgICIke0B9IgorICAgZmkKK30KKworZ3JvdXBMaXN0PSgpCithZGRHcm91cHMoKSB7CisgICB3aGlsZSBbICIkeyN9IiAtZ3QgMCBdCisgICBkbworICAgICAgbG9jYWwgZ3JvdXA9IiR7MX0iCisgICAgICBzaGlmdCAxCisgICAgICBbIC1uICIke2dyb3VwfSIgXSB8fCBjb250aW51ZQorCisgICAgICBbICIke2dyb3VwIyovfSIgPSAiJHtncm91cH0iIF0gfHwgeworICAgICAgICAgZ3JvdXA9IiQoc3RhdCAtYyAiJUciICIke2dyb3VwfSIpIiB8fCA6CisgICAgICAgICBbIC1uICIke2dyb3VwfSIgXSB8fCBjb250aW51ZQorICAgICAgfQorCisgICAgICBsb2NhbCBnCisgICAgICBmb3IgZyBpbiAiJHtncm91cExpc3RbQF19IgorICAgICAgZG8KKyAgICAgICAgIFsgIiR7Z30iID0gIiR7Z3JvdXB9IiBdICYmIHsKKyAgICAgICAgICAgIGdyb3VwPSIiCisgICAgICAgICAgICBicmVhaworICAgICAgICAgfQorICAgICAgZG9uZQorCisgICAgICBbIC1uICIke2dyb3VwfSIgXSAmJiBncm91cExpc3RbJHsjZ3JvdXBMaXN0WypdfV09IiR7Z3JvdXB9IgorICAgZG9uZQorCisgICByZXR1cm4gMAorfQorCithZGRQcm9ncmFtT3B0aW9uIGEgZmxhZyBub0FMU0EgImRvbid0IGFsbG93IHBsYXlpbmcgc291bmQgdmlhIHRoZSBBTFNBIGZyYW1ld29yayIKK2FkZFByb2dyYW1PcHRpb24gYiBmbGFnIG5vQnJsYXBpICJkb24ndCBhbGxvdyByZWFkaW5nIEJybEFQSSdzIGF1dGhvcml6YXRpb24ga2V5IGZpbGUiCithZGRQcm9ncmFtT3B0aW9uIGMgZmxhZyBub0NvbnNvbGVzICJkb24ndCBhbGxvdyBhY2Nlc3MgdG8gdGhlIHZpcnR1YWwgY29uc29sZXMiCithZGRQcm9ncmFtT3B0aW9uIGQgc3RyaW5nLnBhdGggaG9tZURpcmVjdG9yeSAic2V0L2NoYW5nZSB0aGUgaG9tZSAobG9naW4pIGRpcmVjdG9yeSIKK2FkZFByb2dyYW1PcHRpb24gZyBzdHJpbmcuZ3JvdXAgcHJpbWFyeUdyb3VwICJzZXQvY2hhbmdlIHRoZSBwcmltYXJ5IChsb2dpbikgZ3JvdXAiCithZGRQcm9ncmFtT3B0aW9uIGkgc3RyaW5nLnRleHQgdXNlckluZm9ybWF0aW9uICJzZXQvY2hhbmdlIHRoZSB1c2VyIGluZm9ybWF0aW9uIChnZWNvcykgdGV4dCIKK2FkZFByb2dyYW1PcHRpb24gayBmbGFnIG5vS2V5Ym9hcmRzICJkb24ndCBhbGxvdyBrZXlib2FyZCBtb25pdG9yaW5nIgorYWRkUHJvZ3JhbU9wdGlvbiBsIHN0cmluZy5wYXRoIGxvZ2luU2hlbGwgInNldC9jaGFuZ2UgdGhlIGxvZ2luIHNoZWxsIgorYWRkUHJvZ3JhbU9wdGlvbiBwIGZsYWcgbm9QdWxzZSAiZG9uJ3QgYWxsb3cgcGxheWluZyBzb3VuZCB2aWEgdGhlIFB1bHNlIEF1ZGlvIHNlcnZlciIKK2FkZFByb2dyYW1PcHRpb24gcyBmbGFnIG5vU2VyaWFsICJkb24ndCBhbGxvdyBhY2Nlc3MgdG8gc2VyaWFsIGRldmljZXMiCithZGRQcm9ncmFtT3B0aW9uIHUgZmxhZyBub1VTQiAiZG9uJ3QgYWxsb3cgYWNjZXNzIHRvIFVTQiBkZXZpY2VzIgorYWRkUHJvZ3JhbU9wdGlvbiBFIGZsYWcgYWxsb3dDaGFuZ2VzICJhbGxvdyBjaGFuZ2VzIHRvIGFuIGV4aXN0aW5nIHVzZXIiCithZGRQcm9ncmFtT3B0aW9uIEcgZmxhZyBub0dyb3VwcyAiZG9uJ3Qgc2V0L2NoYW5nZSB0aGUgc3VwcGxlbWVudGFyeSBncm91cCBsaXN0IgorYWRkUHJvZ3JhbU9wdGlvbiBOIGZsYWcgYWxsb3dDcmVhdGUgImFsbG93IGNyZWF0aW5nIGEgbmV3IHVzZXIiCithZGRQcm9ncmFtT3B0aW9uIFMgZmxhZyB1c2VTdWRvICJ1c2Ugc3VkbyB0byBleGVjdXRlIHRoZSBjb21tYW5kcyBhcyByb290IgorYWRkUHJvZ3JhbU9wdGlvbiBUIGZsYWcgdGVzdE1vZGUgInRlc3QgbW9kZSAtIHNob3cgdGhlIGNvbW1hbmRzIHRoYXQgd291bGQgYmUgZXhlY3V0ZWQiCithZGRQcm9ncmFtT3B0aW9uIFUgc3RyaW5nLnVzZXIgdXNlck5hbWUgInRoZSB1c2VyIHRvIGJlIGNyZWF0ZWQvY2hhbmdlZCIgIiR7ZGVmYXVsdFVzZXJOYW1lfSIKK3BhcnNlUHJvZ3JhbUFyZ3VtZW50cyAiJHtAfSIKKworWyAtbiAiJHt1c2VyTmFtZX0iIF0gfHwgdXNlck5hbWU9IiR7ZGVmYXVsdFVzZXJOYW1lfSIKK1sgLW4gIiR7dXNlck5hbWV9IiBdIHx8IHN5bnRheEVycm9yICJ1bnByaXZpbGVnZWQgdXNlciBub3QgY29uZmlndXJlZCAtIHVzZSAtVSAodXNlcikgdG8gc3BlY2lmeSIKKworaWYgaWQgLXUgIiR7dXNlck5hbWV9IiA+L2Rldi9udWxsIDI+JjEKK3RoZW4KKyAgICIke2FsbG93Q2hhbmdlc30iIHx8IHNlbWFudGljRXJyb3IgInVzZXIgYWxyZWFkeSBleGlzdHM6ICR7dXNlck5hbWV9IC0gdXNlIC1FIChleGlzdGluZykgdG8gYWxsb3ciCisgICBjb21tYW5kPSh1c2VybW9kKQorZWxzZQorICAgIiR7YWxsb3dDcmVhdGV9IiB8fCBzZW1hbnRpY0Vycm9yICJ1c2VyIGRvZXNuJ3QgZXhpc3Q6ICR7dXNlck5hbWV9IC0gdXNlIC1OIChuZXcpIHRvIGFsbG93IgorICAgY29tbWFuZD0odXNlcmFkZCAtLXN5c3RlbSkKKyAgIFsgLW4gIiR7cHJpbWFyeUdyb3VwfSIgXSB8fCBjb21tYW5kKz0oLS11c2VyLWdyb3VwKQorCisgICBbIC1uICIke3VzZXJJbmZvcm1hdGlvbn0iIF0gfHwgdXNlckluZm9ybWF0aW9uPSIke2RlZmF1bHRVc2VySW5mb3JtYXRpb259IgorICAgWyAtbiAiJHtob21lRGlyZWN0b3J5fSIgXSB8fCBob21lRGlyZWN0b3J5PSIke2RlZmF1bHRIb21lRGlyZWN0b3J5fSIKKyAgIFsgLW4gIiR7bG9naW5TaGVsbH0iIF0gfHwgbG9naW5TaGVsbD0iJHtkZWZhdWx0TG9naW5TaGVsbH0iCisKKyAgIGlmIFsgLW4gIiR7aG9tZURpcmVjdG9yeX0iIF0KKyAgIHRoZW4KKyAgICAgIGNvbW1hbmQrPSgtLWNyZWF0ZS1ob21lKQorICAgZWxzZQorICAgICAgY29tbWFuZCs9KC0tbm8tY3JlYXRlLWhvbWUpCisgICBmaQorZmkKKworWyAtbiAiJHtob21lRGlyZWN0b3J5fSIgXSAmJiBjb21tYW5kKz0oLS1ob21lICIke2hvbWVEaXJlY3Rvcnl9IikKK1sgLW4gIiR7cHJpbWFyeUdyb3VwfSIgXSAmJiBjb21tYW5kKz0oLS1naWQgIiR7cHJpbWFyeUdyb3VwfSIpCitbIC1uICIke3VzZXJJbmZvcm1hdGlvbn0iIF0gJiYgY29tbWFuZCs9KC0tY29tbWVudCAiJHt1c2VySW5mb3JtYXRpb259IikKK1sgLW4gIiR7bG9naW5TaGVsbH0iIF0gJiYgY29tbWFuZCs9KC0tc2hlbGwgIiR7bG9naW5TaGVsbH0iKQorCisiJHtub0dyb3Vwc30iIHx8IHsKKyAgICIke25vQUxTQX0iIHx8IGFkZEdyb3VwcyBhdWRpbworICAgIiR7bm9CcmxhcGl9IiB8fCBhZGRHcm91cHMgIiR7QlJMQVBJX0tFWV9GSUxFfSIKKyAgICIke25vQ29uc29sZXN9IiB8fCBhZGRHcm91cHMgdHR5IC9kZXYvdmNzMSAvZGV2L3R0eTEKKyAgICIke25vS2V5Ym9hcmRzfSIgfHwgYWRkR3JvdXBzIGlucHV0CisgICAiJHtub1B1bHNlfSIgfHwgYWRkR3JvdXBzIHB1bHNlLWFjY2VzcworICAgIiR7bm9TZXJpYWx9IiB8fCBhZGRHcm91cHMgL2Rldi90dHlTMAorICAgIiR7bm9VU0J9IiB8fCBhZGRHcm91cHMgL2Rldi9idXMvdXNiCisKKyAgIGdyb3Vwc09wZXJhbmQ9IiR7Z3JvdXBMaXN0WypdfSIKKyAgIGdyb3Vwc09wZXJhbmQ9IiR7Z3JvdXBzT3BlcmFuZC8vIC8sfSIKKyAgIGNvbW1hbmQrPSgtLWdyb3VwcyAiJHtncm91cHNPcGVyYW5kfSIpCit9CisKKyIke3Rlc3RNb2RlfSIgfHwgeworICAgaWYgIiR7dXNlU3Vkb30iCisgICB0aGVuCisgICAgICBzdWRvIC12CisgICBlbGlmIFsgIiQoaWQgLXUpIiAtbmUgMCBdCisgICB0aGVuCisgICAgICBzZW1hbnRpY0Vycm9yICJub3QgZXhlY3V0aW5nIGFzIHJvb3QiCisgICBmaQorfQorCitjb21tYW5kKz0oLS0gIiR7dXNlck5hbWV9IikKK2V4ZWN1dGVDb21tYW5kICIke2NvbW1hbmRbQF19IgorZXhpdCAwCmRpZmYgLS1naXQgYS9icmx0dHktcHJvbG9ndWUuYmFzaCBiL2JybHR0eS1wcm9sb2d1ZS5iYXNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkzNjBmYWQKLS0tIC9kZXYvbnVsbAorKysgYi9icmx0dHktcHJvbG9ndWUuYmFzaApAQCAtMCwwICsxLDU0MCBAQAorIyEvYmluL2Jhc2gKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyMgICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisjCisjIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyMKKyMgQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisuICIkKGRpcm5hbWUgIiR7QkFTSF9TT1VSQ0VbMF19IikvYnJsdHR5LXByb2xvZ3VlLnNoIgorCitnZXRFbGVtZW50KCkgeworICAgZXZhbCBzZXRWYXJpYWJsZSAiXCR7MX0iICJcIlwkeyR7Mn1bXCIkezN9XCJdfVwiIgorfQorCitzZXRFbGVtZW50KCkgeworICAgZXZhbCBzZXRWYXJpYWJsZSAiXCR7MX1bXCIkezJ9XCJdIiAiXCJcJHszfVwiIgorfQorCitzZXRFbGVtZW50cygpIHsKKyAgIGxvY2FsIF9hcnJheT0iJHsxfSIKKyAgIHNoaWZ0IDEKKyAgIGV2YWwgIiR7X2FycmF5fT0oXCJcJHtAfVwiKSIKK30KKworYXBwZW5kRWxlbWVudHMoKSB7CisgICBsb2NhbCBfYXJyYXk9IiR7MX0iCisgICBzaGlmdCAxCisgICBldmFsICIke19hcnJheX0rPShcIlwke0B9XCIpIgorfQorCitwcmVwZW5kRWxlbWVudHMoKSB7CisgICBsb2NhbCBfYXJyYXk9IiR7MX0iCisgICBzaGlmdCAxCisgICBldmFsIHNldEVsZW1lbnRzICJcJHtfYXJyYXl9IiAiXCJcJHtAfVwiIFwiXCR7JHtfYXJyYXl9W0BdfVwiIgorfQorCitzaGlmdEVsZW1lbnRzKCkgeworICAgbG9jYWwgX2FycmF5PSIkezF9IgorICAgbG9jYWwgX2NvdW50PSIkezJ9IgorCisgICBldmFsIHNldCAtLSAiXCJcJHske19hcnJheX1bQF19XCIiCisgICBzaGlmdCAiJHtfY291bnR9IgorICAgc2V0RWxlbWVudHMgIiR7X2FycmF5fSIgIiR7QH0iCit9CisKK2dldEVsZW1lbnRDb3VudCgpIHsKKyAgIGV2YWwgc2V0VmFyaWFibGUgIlwkezF9IiAiXCR7IyR7Mn1bKl19IgorfQorCitnZXRFbGVtZW50TmFtZXMoKSB7CisgICBldmFsICIkezF9PShcIlwkeyEkezJ9W0BdfVwiKSIKK30KKworZm9yRWxlbWVudHMoKSB7CisgICBsb2NhbCBfYXJyYXk9IiR7MX0iCisgICBzaGlmdCAxCisKKyAgIGxvY2FsIF9uYW1lcz0oKQorICAgZ2V0RWxlbWVudE5hbWVzIF9uYW1lcyAiJHtfYXJyYXl9IgorCisgICBsb2NhbCBuYW1lCisgICBmb3IgbmFtZSBpbiAiJHtfbmFtZXNbQF19IgorICAgZG8KKyAgICAgIGxvY2FsIHZhbHVlCisgICAgICBnZXRFbGVtZW50IHZhbHVlICIke19hcnJheX0iICIke25hbWV9IgorICAgICAgIiR7QH0iICIke25hbWV9IiAiJHt2YWx1ZX0iCisgICBkb25lCit9CisKK2dldEVsZW1lbnRzKCkgeworICAgbG9jYWwgX3RvQXJyYXk9IiR7MX0iCisgICBsb2NhbCBfZnJvbUFycmF5PSIkezJ9IgorICAgZm9yRWxlbWVudHMgIiR7X2Zyb21BcnJheX0iIHNldEVsZW1lbnQgIiR7X3RvQXJyYXl9IgorfQorCitsaXN0RWxlbWVudCgpIHsKKyAgIGxvY2FsIGFycmF5PSIkezF9IgorICAgbG9jYWwgbmFtZT0iJHsyfSIKKyAgIGxvY2FsIHZhbHVlPSIkezN9IgorICAgZWNobyAiJHthcnJheX1bJHtuYW1lfV06ICR7dmFsdWV9IgorfQorCitsaXN0RWxlbWVudHMoKSB7CisgICBsb2NhbCBfYXJyYXk9IiR7MX0iCisgICBmb3JFbGVtZW50cyAiJHtfYXJyYXl9IiBsaXN0RWxlbWVudCAiJHtfYXJyYXl9IiB8IHNvcnQKK30KKword3JpdGVFbGVtZW50KCkgeworICAgbG9jYWwgbmFtZT0iJHsxfSIKKyAgIGxvY2FsIHZhbHVlPSIkezJ9IgorICAgZWNobyAiJHtuYW1lfSAke3ZhbHVlfSIKK30KKword3JpdGVFbGVtZW50cygpIHsKKyAgIGxvY2FsIF9hcnJheT0iJHsxfSIKKyAgIGZvckVsZW1lbnRzICIke19hcnJheX0iIHdyaXRlRWxlbWVudCB8IHNvcnQKK30KKworcmVhZEVsZW1lbnRzKCkgeworICAgbG9jYWwgX2FycmF5PSIkezF9IgorCisgICBsb2NhbCBuYW1lIHZhbHVlCisgICB3aGlsZSByZWFkIG5hbWUgdmFsdWUKKyAgIGRvCisgICAgICBzZXRFbGVtZW50ICIke19hcnJheX0iICIke25hbWV9IiAiJHt2YWx1ZX0iCisgICBkb25lCit9CisKK3RvUmVsYXRpdmVQYXRoKCkgeworICAgbG9jYWwgdG9QYXRoPSIkezF9IgorICAgbG9jYWwgdmFyaWFibGU9IiR7Mn0iCisKKyAgIFsgLW4gIiR7dG9QYXRofSIgXSB8fCB0b1BhdGg9Ii4iCisgICByZXNvbHZlRGlyZWN0b3J5ICIke3RvUGF0aH0iIHRvUGF0aAorICAgbG9jYWwgZnJvbVBhdGg9IiQocHdkKSIKKworICAgWyAiJHtmcm9tUGF0aCUvfSIgPSAiJHtmcm9tUGF0aH0iIF0gJiYgZnJvbVBhdGgrPSIvIgorICAgWyAiJHt0b1BhdGglL30iID0gIiR7dG9QYXRofSIgXSAmJiB0b1BhdGgrPSIvIgorCisgICBsb2NhbCBmcm9tTGVuZ3RoPSIkeyNmcm9tUGF0aH0iCisgICBsb2NhbCB0b0xlbmd0aD0iJHsjdG9QYXRofSIKKworICAgbG9jYWwgbGltaXQ9JCgoIChmcm9tTGVuZ3RoIDwgdG9MZW5ndGgpPyBmcm9tTGVuZ3RoOiB0b0xlbmd0aCApKQorICAgbG9jYWwgaW5kZXg9MAorICAgbG9jYWwgc3RhcnQ9MAorCisgICB3aGlsZSAoKCBpbmRleCA8IGxpbWl0ICkpCisgICBkbworICAgICAgbG9jYWwgZnJvbUNoYXI9IiR7ZnJvbVBhdGg6aW5kZXg6MX0iCisgICAgICBsb2NhbCB0b0NoYXI9IiR7dG9QYXRoOmluZGV4OjF9IgorCisgICAgICBbICIke2Zyb21DaGFyfSIgPSAiJHt0b0NoYXJ9IiBdIHx8IGJyZWFrCisgICAgICBbICIke2Zyb21DaGFyfSIgPSAiLyIgXSAmJiBzdGFydD0iJCgoaW5kZXggKyAxKSkiCisgICAgICBsZXQgImluZGV4ICs9IDEiCisgICBkb25lCisKKyAgIGZyb21QYXRoPSIke2Zyb21QYXRoOnN0YXJ0fSIKKyAgIHRvUGF0aD0iJHt0b1BhdGg6c3RhcnR9IgorCisgICB3aGlsZSBbICIkeyNmcm9tUGF0aH0iIC1ndCAwIF0KKyAgIGRvCisgICAgICB0b1BhdGg9Ii4uLyR7dG9QYXRofSIKKyAgICAgIGZyb21QYXRoPSIke2Zyb21QYXRoIyovfSIKKyAgIGRvbmUKKworICAgWyAtbiAiJHt0b1BhdGh9IiBdIHx8IHRvUGF0aD0iLiIKKworICAgaWYgWyAtbiAiJHt2YXJpYWJsZX0iIF0KKyAgIHRoZW4KKyAgICAgIHNldFZhcmlhYmxlICIke3ZhcmlhYmxlfSIgIiR7dG9QYXRofSIKKyAgIGVsc2UKKyAgICAgIGVjaG8gIiR7dG9QYXRofSIKKyAgIGZpCit9CisKK3Byb2dyYW1Db25maWd1cmF0aW9uRmlsZVByZWZpeEFycmF5PSgpCittYWtlUHJvZ3JhbUNvbmZpZ3VyYXRpb25GaWxlUHJlZml4QXJyYXkoKSB7CisgICBbICIkeyNwcm9ncmFtQ29uZmlndXJhdGlvbkZpbGVQcmVmaXhBcnJheVsqXX0iIC1ndCAwIF0gfHwgeworICAgICAgcHJvZ3JhbUNvbmZpZ3VyYXRpb25GaWxlUHJlZml4QXJyYXkrPSgiJHtwcm9ncmFtRGlyZWN0b3J5fS8uIikKKworICAgICAgWyAtbiAiJHtIT01FfSIgXSAmJiB7CisgICAgICAgICBwcm9ncmFtQ29uZmlndXJhdGlvbkZpbGVQcmVmaXhBcnJheSs9KCIke0hPTUV9Ly5jb25maWcvJHtwcm9ncmFtTmFtZX0vIikKKyAgICAgICAgIHByb2dyYW1Db25maWd1cmF0aW9uRmlsZVByZWZpeEFycmF5Kz0oIiR7SE9NRX0vLiIpCisgICAgICB9CisKKyAgICAgIHByb2dyYW1Db25maWd1cmF0aW9uRmlsZVByZWZpeEFycmF5Kz0oIi9ldGMvJHtwcm9ncmFtTmFtZX0vIikKKyAgICAgIHByb2dyYW1Db25maWd1cmF0aW9uRmlsZVByZWZpeEFycmF5Kz0oIi9ldGMveGRnLyR7cHJvZ3JhbU5hbWV9LyIpCisgICAgICBwcm9ncmFtQ29uZmlndXJhdGlvbkZpbGVQcmVmaXhBcnJheSs9KCIvZXRjLyIpCisgICB9Cit9CisKK2ZpbmRQcm9ncmFtQ29uZmlndXJhdGlvbkZpbGUoKSB7CisgICBsb2NhbCBmaWxlVmFyaWFibGU9IiR7MX0iCisgICBzaGlmdCAxCisKKyAgIFsgIiR7I30iIC1ndCAwIF0gfHwgc2V0IC0tIGNvbmYgY2ZnCisgICBsb2NhbCBmaWxlRXh0ZW5zaW9ucz0oIiR7QH0iKQorCisgICBtYWtlUHJvZ3JhbUNvbmZpZ3VyYXRpb25GaWxlUHJlZml4QXJyYXkKKyAgIGxvY2FsIHByZWZpeAorCisgICBmb3IgcHJlZml4IGluICIke3Byb2dyYW1Db25maWd1cmF0aW9uRmlsZVByZWZpeEFycmF5W0BdfSIKKyAgIGRvCisgICAgICBsb2NhbCBleHRlbnNpb24KKworICAgICAgZm9yIGV4dGVuc2lvbiBpbiAiJHtmaWxlRXh0ZW5zaW9uc1tAXX0iCisgICAgICBkbworICAgICAgICAgbG9jYWwgX2ZpbGU9IiR7cHJlZml4fSR7cHJvZ3JhbU5hbWV9LiR7ZXh0ZW5zaW9ufSIKKyAgICAgICAgIFsgLWYgIiR7X2ZpbGV9IiBdIHx8IGNvbnRpbnVlCisgICAgICAgICBbIC1yICIke19maWxlfSIgXSB8fCBjb250aW51ZQorCisgICAgICAgICBzZXRWYXJpYWJsZSAiJHtmaWxlVmFyaWFibGV9IiAiJHtfZmlsZX0iCisgICAgICAgICByZXR1cm4gMAorICAgICAgZG9uZQorICAgZG9uZQorCisgICByZXR1cm4gMQorfQorCitwcm9ncmFtQ29tcG9uZW50RGlyZWN0b3J5QXJyYXk9KCkKK21ha2VQcm9ncmFtQ29tcG9uZW50RGlyZWN0b3J5QXJyYXkoKSB7CisgICBbICIkeyNwcm9ncmFtQ29tcG9uZW50RGlyZWN0b3J5QXJyYXlbKl19IiAtZ3QgMCBdIHx8IHsKKyAgICAgIGxvY2FsIHN1YmRpcmVjdG9yeT0ibGliZXhlYyIKKworICAgICAgcHJvZ3JhbUNvbXBvbmVudERpcmVjdG9yeUFycmF5Kz0oIiR7UFdEfSIpCisgICAgICBwcm9ncmFtQ29tcG9uZW50RGlyZWN0b3J5QXJyYXkrPSgiJHtQV0R9Ly4uLyR7c3ViZGlyZWN0b3J5fSIpCisKKyAgICAgIHByb2dyYW1Db21wb25lbnREaXJlY3RvcnlBcnJheSs9KCIke3Byb2dyYW1EaXJlY3Rvcnl9IikKKyAgICAgIHByb2dyYW1Db21wb25lbnREaXJlY3RvcnlBcnJheSs9KCIke3Byb2dyYW1EaXJlY3Rvcnl9Ly4uLyR7c3ViZGlyZWN0b3J5fSIpCisKKyAgICAgIFsgLW4gIiR7SE9NRX0iIF0gJiYgeworICAgICAgICAgcHJvZ3JhbUNvbXBvbmVudERpcmVjdG9yeUFycmF5Kz0oIiR7SE9NRX0vLmNvbmZpZy8ke3Byb2dyYW1OYW1lfSIpCisgICAgICAgICBwcm9ncmFtQ29tcG9uZW50RGlyZWN0b3J5QXJyYXkrPSgiJHtIT01FfS8ke3N1YmRpcmVjdG9yeX0iKQorICAgICAgfQorCisgICAgICBwcm9ncmFtQ29tcG9uZW50RGlyZWN0b3J5QXJyYXkrPSgiL3Vzci8ke3N1YmRpcmVjdG9yeX0iKQorICAgICAgcHJvZ3JhbUNvbXBvbmVudERpcmVjdG9yeUFycmF5Kz0oIi8ke3N1YmRpcmVjdG9yeX0iKQorCisgICAgICBwcm9ncmFtQ29tcG9uZW50RGlyZWN0b3J5QXJyYXkrPSgiL2V0Yy8ke3Byb2dyYW1OYW1lfSIpCisgICAgICBwcm9ncmFtQ29tcG9uZW50RGlyZWN0b3J5QXJyYXkrPSgiL2V0Yy94ZGcvJHtwcm9ncmFtTmFtZX0iKQorICAgfQorfQorCitmaW5kUHJvZ3JhbUNvbXBvbmVudCgpIHsKKyAgIGxvY2FsIGZpbGVWYXJpYWJsZT0iJHsxfSIKKyAgIGxvY2FsIG5hbWU9IiR7Mn0iCisgICBzaGlmdCAyCisgICBsb2NhbCBmaWxlRXh0ZW5zaW9ucz0oIiR7QH0iKQorCisgICBpZiBbICIkeyNmaWxlRXh0ZW5zaW9uc1sqXX0iIC1lcSAwIF0KKyAgIHRoZW4KKyAgICAgIGZpbGVFeHRlbnNpb25zPShiYXNoIHNoKQorICAgZWxzZQorICAgICAgbmFtZT0iJHtwcm9ncmFtTmFtZX0uJHtuYW1lfSIKKyAgIGZpCisKKyAgIG1ha2VQcm9ncmFtQ29tcG9uZW50RGlyZWN0b3J5QXJyYXkKKyAgIGxvY2FsIGRpcmVjdG9yeQorCisgICBmb3IgZGlyZWN0b3J5IGluICIke3Byb2dyYW1Db21wb25lbnREaXJlY3RvcnlBcnJheVtAXX0iCisgICBkbworICAgICAgbG9jYWwgZXh0ZW5zaW9uCisKKyAgICAgIGZvciBleHRlbnNpb24gaW4gIiR7ZmlsZUV4dGVuc2lvbnNbQF19IgorICAgICAgZG8KKyAgICAgICAgIGxvY2FsIF9maWxlPSIke2RpcmVjdG9yeX0vJHtuYW1lfS4ke2V4dGVuc2lvbn0iCisgICAgICAgICBbIC1mICIke19maWxlfSIgXSB8fCBjb250aW51ZQorICAgICAgICAgWyAtciAiJHtfZmlsZX0iIF0gfHwgY29udGludWUKKworICAgICAgICAgc2V0VmFyaWFibGUgIiR7ZmlsZVZhcmlhYmxlfSIgIiR7X2ZpbGV9IgorICAgICAgICAgcmV0dXJuIDAKKyAgICAgIGRvbmUKKyAgIGRvbmUKKworICAgcmV0dXJuIDEKK30KKworaW5jbHVkZVByb2dyYW1Db21wb25lbnQoKSB7CisgICBsb2NhbCBuYW1lPSIkezF9IgorCisgICBsb2NhbCBjb21wb25lbnQKKyAgIGZpbmRQcm9ncmFtQ29tcG9uZW50IGNvbXBvbmVudCAiJHtuYW1lfSIgfHwgeworICAgICAgbG9nV2FybmluZyAicHJvZ3JhbSBjb21wb25lbnQgbm90IGZvdW5kOiAke25hbWV9IgorICAgICAgcmV0dXJuIDEKKyAgIH0KKworICAgLiAiJHtjb21wb25lbnR9IiB8fCB7CisgICAgICBsb2dXYXJuaW5nICJwcm9ibGVtIGluY2x1ZGluZyBwcm9ncmFtIGNvbXBvbmVudDogJHtjb21wb25lbnR9IgorICAgICAgcmV0dXJuIDIKKyAgIH0KKworICAgbG9nTm90ZSAicHJvZ3JhbSBjb21wb25lbnQgaW5jbHVkZWQ6ICR7Y29tcG9uZW50fSIKKyAgIHJldHVybiAwCit9CisKK2RlY2xhcmUgLUEgcGVyc2lzdGVudFByb2dyYW1TZXR0aW5nc0FycmF5PSgpCitwZXJzaXN0ZW50UHJvZ3JhbVNldHRpbmdzQ2hhbmdlZD1mYWxzZQorcmVhZG9ubHkgcGVyc2lzdGVudFByb2dyYW1TZXR0aW5nc0V4dGVuc2lvbj0iY29uZiIKKworcmVzdG9yZVBlcnNpc3RlbnRQcm9ncmFtU2V0dGlucygpIHsKKyAgIGxvY2FsIHNldHRpbmdzRmlsZT0iJHsxfSIKKyAgIGxvY2FsIGZvdW5kPWZhbHNlCisKKyAgIGlmIFsgLW4gIiR7c2V0dGluZ3NGaWxlfSIgXQorICAgdGhlbgorICAgICAgWyAtZSAiJHtzZXR0aW5nc0ZpbGV9IiBdICYmIGZvdW5kPXRydWUKKyAgIGVsaWYgZmluZFByb2dyYW1Db25maWd1cmF0aW9uRmlsZSBzZXR0aW5nc0ZpbGUgIiR7cGVyc2lzdGVudFByb2dyYW1TZXR0aW5nc0V4dGVuc2lvbn0iCisgICB0aGVuCisgICAgICBmb3VuZD10cnVlCisgICBmaQorCisgICAiJHtmb3VuZH0iICYmIHsKKyAgICAgIGxvZ05vdGUgInJlc3RvcmluZyBwZXJzaXN0ZW50IHByb2dyYW0gc2V0dGluZ3M6ICR7c2V0dGluZ3NGaWxlfSIKKyAgICAgIHBlcnNpc3RlbnRQcm9ncmFtU2V0dGluZ3NBcnJheT0oKQorICAgICAgcmVhZEVsZW1lbnRzIHBlcnNpc3RlbnRQcm9ncmFtU2V0dGluZ3NBcnJheSA8IiR7c2V0dGluZ3NGaWxlfSIKKyAgICAgIHBlcnNpc3RlbnRQcm9ncmFtU2V0dGluZ3NDaGFuZ2VkPWZhbHNlCisgICB9Cit9CisKK3NhdmVQZXJzaXN0ZW50UHJvZ3JhbVNldHRpbnMoKSB7CisgICBsb2NhbCBzZXR0aW5nc0ZpbGU9IiR7MX0iCisKKyAgICIke3BlcnNpc3RlbnRQcm9ncmFtU2V0dGluZ3NDaGFuZ2VkfSIgJiYgeworICAgICAgWyAtbiAiJHtzZXR0aW5nc0ZpbGV9IiBdIHx8IHsKKyAgICAgICAgIGZpbmRQcm9ncmFtQ29uZmlndXJhdGlvbkZpbGUgc2V0dGluZ3NGaWxlICIke3BlcnNpc3RlbnRQcm9ncmFtU2V0dGluZ3NFeHRlbnNpb259IiAmJiBbIC1mICIke3NldHRpbmdzRmlsZX0iIC1hIC13ICIke3NldHRpbmdzRmlsZX0iIF0gfHwgeworICAgICAgICAgICAgc2V0dGluZ3NGaWxlPSIiCisgICAgICAgICAgICBsb2NhbCBwcmVmaXgKKworICAgICAgICAgICAgZm9yIHByZWZpeCBpbiAiJHtwcm9ncmFtQ29uZmlndXJhdGlvbkZpbGVQcmVmaXhBcnJheVtAXX0iCisgICAgICAgICAgICBkbworICAgICAgICAgICAgICAgbG9jYWwgZGlyZWN0b3J5PSIke3ByZWZpeCUvfSIKKyAgICAgICAgICAgICAgIFsgIiR7ZGlyZWN0b3J5fSIgPSAiJHtwcmVmaXh9IiBdICYmIGNvbnRpbnVlCisKKyAgICAgICAgICAgICAgIGlmIFsgLWUgIiR7ZGlyZWN0b3J5fSIgXQorICAgICAgICAgICAgICAgdGhlbgorICAgICAgICAgICAgICAgICAgWyAtZCAiJHtkaXJlY3Rvcnl9IiBdIHx8IGNvbnRpbnVlCisgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICBta2RpciAtLXBhcmVudHMgLS0gIiR7ZGlyZWN0b3J5fSIgfHwgY29udGludWUKKyAgICAgICAgICAgICAgICAgIGxvZ05vdGUgInByb2dyYW0gY29uZmlndXJhdGlvbiBkaXJlY3RvcnkgY3JlYXRlZDogJHtkaXJlY3Rvcnl9IgorICAgICAgICAgICAgICAgZmkKKworICAgICAgICAgICAgICAgWyAtdyAiJHtkaXJlY3Rvcnl9IiBdIHx8IGNvbnRpbnVlCisgICAgICAgICAgICAgICBzZXR0aW5nc0ZpbGU9IiR7ZGlyZWN0b3J5fS8ke3Byb2dyYW1OYW1lfS4ke3BlcnNpc3RlbnRQcm9ncmFtU2V0dGluZ3NFeHRlbnNpb259IgorICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIGRvbmUKKworICAgICAgICAgICAgWyAtbiAiJHtzZXR0aW5nc0ZpbGV9IiBdIHx8IHsKKyAgICAgICAgICAgICAgIGxvZ1dhcm5pbmcgIm5vIGVsaWdpYmxlIHByb2dyYW0gY29uZmlndXJhdGlvbiBkaXJlY3RvcnkiCisgICAgICAgICAgICAgICByZXR1cm4gMQorICAgICAgICAgICAgfQorICAgICAgICAgfQorICAgICAgfQorCisgICAgICBsb2dOb3RlICJzYXZpbmcgcGVyc2lzdGVudCBwcm9ncmFtIHNldHRpbmdzOiAke3NldHRpbmdzRmlsZX0iCisgICAgICB3cml0ZUVsZW1lbnRzIHBlcnNpc3RlbnRQcm9ncmFtU2V0dGluZ3NBcnJheSA+IiR7c2V0dGluZ3NGaWxlfSIKKyAgICAgIHBlcnNpc3RlbnRQcm9ncmFtU2V0dGluZ3NDaGFuZ2VkPWZhbHNlCisgICB9CisKKyAgIHJldHVybiAwCit9CisKK2dldFBlcnNpc3RlbnRQcm9ncmFtU2V0dGluZygpIHsKKyAgIGxvY2FsIHZhcmlhYmxlPSIkezF9IgorICAgbG9jYWwgbmFtZT0iJHsyfSIKKworICAgc2V0VmFyaWFibGUgIiR7dmFyaWFibGV9IiAiJHtwZXJzaXN0ZW50UHJvZ3JhbVNldHRpbmdzQXJyYXlbIiR7bmFtZX0iXX0iCit9CisKK2NoYW5nZVBlcnNpc3RlbnRQcm9ncmFtU2V0dGluZygpIHsKKyAgIGxvY2FsIG5hbWU9IiR7MX0iCisgICBsb2NhbCB2YWx1ZT0iJHsyfSIKKyAgIGxvY2FsIC1uIHNldHRpbmc9InBlcnNpc3RlbnRQcm9ncmFtU2V0dGluZ3NBcnJheVtcIiR7bmFtZX1cIl0iCisKKyAgIFsgIiR7dmFsdWV9IiA9ICIke3NldHRpbmd9IiBdIHx8IHsKKyAgICAgIHNldHRpbmc9IiR7dmFsdWV9IgorICAgICAgcGVyc2lzdGVudFByb2dyYW1TZXR0aW5nc0NoYW5nZWQ9dHJ1ZQorICAgfQorfQorCitldmFsdWF0ZUV4cHJlc3Npb24oKSB7CisgICBsb2NhbCByZXN1bHRWYXJpYWJsZT0iJHsxfSIKKyAgIGxvY2FsIGV4cHJlc3Npb249IiR7Mn0iCisKKyAgIGxvY2FsIF9yZXN1bHQKKyAgIF9yZXN1bHQ9IiQoYmMgLS1xdWlldCA8PDwiJHtleHByZXNzaW9ufSIpIiB8fCByZXR1cm4gMQorICAgWyAtbiAiJHtfcmVzdWx0fSIgXSB8fCByZXR1cm4gMQorCisgICBzZXRWYXJpYWJsZSAiJHtyZXN1bHRWYXJpYWJsZX0iICIke19yZXN1bHR9IgorICAgcmV0dXJuIDAKK30KKworaWYgWyAtbiAiJHtTUkFORE9NfSIgXQordGhlbgorICAgZGVjbGFyZSAtbiBiYXNoUmFuZG9tTnVtYmVyVmFyaWFibGU9IlNSQU5ET00iCitlbHNlCisgICBkZWNsYXJlIC1uIGJhc2hSYW5kb21OdW1iZXJWYXJpYWJsZT0iUkFORE9NIgorZmkKKworZ2V0UmFuZG9tSW50ZWdlcigpIHsKKyAgIGxvY2FsIHJlc3VsdFZhcmlhYmxlPSIkezF9IgorICAgbG9jYWwgbWF4aW11bVZhbHVlPSIkezJ9IgorICAgbG9jYWwgbWluaW11bVZhbHVlPSIkezM6LTF9IgorCisgICBzZXRWYXJpYWJsZSAiJHtyZXN1bHRWYXJpYWJsZX0iICQoKCAoYmFzaFJhbmRvbU51bWJlclZhcmlhYmxlICUgKG1heGltdW1WYWx1ZSAtIG1pbmltdW1WYWx1ZSArIDEpKSArIG1pbmltdW1WYWx1ZSApKQorfQorCitjb252ZXJ0VW5pdCgpIHsKKyAgIGxvY2FsIHJlc3VsdFZhcmlhYmxlPSIkezF9IgorICAgbG9jYWwgZnJvbT0iJHsyfSIKKyAgIGxvY2FsIHRvPSIkezN9IgorICAgbG9jYWwgcHJlY2lzaW9uPSIkezR9IgorCisgICBsb2NhbCB0b1ZhbHVlCisgICB0b1ZhbHVlPSIkKHVuaXRzIC0tdGVyc2UgLS1vdXRwdXQtZm9ybWF0ICIlLiR7cHJlY2lzaW9uOi0wfWYiICIke2Zyb219IiAiJHt0b30iKSIgfHwgcmV0dXJuIDEKKworICAgWyAiJHt0b1ZhbHVlfSIgPSAiJHt0b1ZhbHVlJS4qfSIgXSB8fCB7CisgICAgICB0b1ZhbHVlPSIke3RvVmFsdWUlJSooMCl9IgorICAgICAgdG9WYWx1ZT0iJHt0b1ZhbHVlJS59IgorICAgfQorCisgICBzZXRWYXJpYWJsZSAiJHtyZXN1bHRWYXJpYWJsZX0iICIke3RvVmFsdWV9IgorICAgcmV0dXJuIDAKK30KKworY29udmVydFNpbXBsZVVuaXQoKSB7CisgICBsb2NhbCByZXN1bHRWYXJpYWJsZT0iJHsxfSIKKyAgIGxvY2FsIGZyb21WYWx1ZT0iJHsyfSIKKyAgIGxvY2FsIGZyb21Vbml0PSIkezN9IgorICAgbG9jYWwgdG9Vbml0PSIkezR9IgorICAgbG9jYWwgcHJlY2lzaW9uPSIkezV9IgorCisgICBjb252ZXJ0VW5pdCAiJHtyZXN1bHRWYXJpYWJsZX0iICIke2Zyb21WYWx1ZX0ke2Zyb21Vbml0fSIgIiR7dG9Vbml0fSIgIiR7cHJlY2lzaW9ufSIgfHwgcmV0dXJuIDEKKyAgIHJldHVybiAwCit9CisKK2Zvcm1hdFNpbXBsZVVuaXQoKSB7CisgICBsb2NhbCB2YXJpYWJsZT0iJHsxfSIKKyAgIGxvY2FsIGZyb21Vbml0PSIkezJ9IgorICAgbG9jYWwgdG9Vbml0PSIkezN9IgorICAgbG9jYWwgcHJlY2lzaW9uPSIkezR9IgorCisgICBsb2NhbCB2YWx1ZT0iJHshdmFyaWFibGV9IgorICAgY29udmVydFNpbXBsZVVuaXQgdmFsdWUgIiR7dmFsdWV9IiAiJHtmcm9tVW5pdH0iICIke3RvVW5pdH0iICIke3ByZWNpc2lvbn0iIHx8IHJldHVybiAxCisKKyAgIHNldFZhcmlhYmxlICIke3ZhcmlhYmxlfSIgIiR7dmFsdWV9JHt0b1VuaXR9IgorICAgcmV0dXJuIDAKK30KKworY29udmVydENvbXBsZXhVbml0KCkgeworICAgbG9jYWwgcmVzdWx0VmFyaWFibGU9IiR7MX0iCisgICBsb2NhbCBmcm9tVmFsdWU9IiR7Mn0iCisgICBsb2NhbCBmcm9tVW5pdD0iJHszfSIKKyAgIGxvY2FsIHRvVW5pdD0iJHs0fSIKKyAgIGxvY2FsIHVuaXRUeXBlPSIkezV9IgorICAgbG9jYWwgcHJlY2lzaW9uPSIkezZ9IgorCisgICBjb252ZXJ0VW5pdCAiJHtyZXN1bHRWYXJpYWJsZX0iICIke3VuaXRUeXBlfSR7ZnJvbVVuaXR9KCR7ZnJvbVZhbHVlfSkiICIke3VuaXRUeXBlfSR7dG9Vbml0fSIgIiR7cHJlY2lzaW9ufSIgfHwgcmV0dXJuIDEKKyAgIHJldHVybiAwCit9CisKK2Zvcm1hdENvbXBsZXhVbml0KCkgeworICAgbG9jYWwgdmFyaWFibGU9IiR7MX0iCisgICBsb2NhbCBmcm9tVW5pdD0iJHsyfSIKKyAgIGxvY2FsIHRvVW5pdD0iJHszfSIKKyAgIGxvY2FsIHVuaXRUeXBlPSIkezR9IgorICAgbG9jYWwgcHJlY2lzaW9uPSIkezV9IgorCisgICBsb2NhbCB2YWx1ZT0iJHshdmFyaWFibGV9IgorICAgY29udmVydENvbXBsZXhVbml0IHZhbHVlICIke3ZhbHVlfSIgIiR7ZnJvbVVuaXR9IiAiJHt0b1VuaXR9IiAiJHt1bml0VHlwZX0iICIke3ByZWNpc2lvbn0iIHx8IHJldHVybiAxCisKKyAgIHNldFZhcmlhYmxlICIke3ZhcmlhYmxlfSIgIiR7dmFsdWV9JHt0b1VuaXR9IgorICAgcmV0dXJuIDAKK30KKworaXNBYmJyZXZpYXRpb24oKSB7CisgICBsb2NhbCBhYmJyZXZpYXRpb249IiR7MX0iCisgICBzaGlmdCAxCisKKyAgIGxvY2FsIGxlbmd0aD0iJHsjYWJicmV2aWF0aW9ufSIKKyAgIGxvY2FsIHdvcmQKKworICAgZm9yIHdvcmQKKyAgIGRvCisgICAgICBbICIke2xlbmd0aH0iIC1sZSAiJHsjd29yZH0iIF0gfHwgY29udGludWUKKyAgICAgIFsgIiR7YWJicmV2aWF0aW9ufSIgPSAiJHt3b3JkOjA6bGVuZ3RofSIgXSAmJiByZXR1cm4gMAorICAgZG9uZQorCisgICByZXR1cm4gMQorfQorCit2ZXJpZnlDaG9pY2UoKSB7CisgICBsb2NhbCBsYWJlbD0iJHsxfSIKKyAgIGxvY2FsIHZhbHVlVmFyaWFibGU9IiR7Mn0iCisgICBzaGlmdCAyCisKKyAgIGxvY2FsIHZhbHVlCisgICBnZXRWYXJpYWJsZSAiJHt2YWx1ZVZhcmlhYmxlfSIgdmFsdWUKKworICAgbG9jYWwgY2FuZGlkYXRlcz0oKQorICAgbG9jYWwgY2hvaWNlCisKKyAgIGZvciBjaG9pY2UKKyAgIGRvCisgICAgICBbICIke3ZhbHVlfSIgPSAiJHtjaG9pY2V9IiBdICYmIHJldHVybiAwCisgICAgICBpc0FiYnJldmlhdGlvbiAiJHt2YWx1ZX0iICIke2Nob2ljZX0iIHx8IGNvbnRpbnVlCisgICAgICBjYW5kaWRhdGVzKz0oIiR7Y2hvaWNlfSIpCisgICBkb25lCisKKyAgIGxvY2FsIGNvdW50PSIkeyNjYW5kaWRhdGVzWypdfSIKKyAgIFsgIiR7Y291bnR9IiAtZ3QgMCBdIHx8IHN5bnRheEVycm9yICJpbnZhbGlkICR7bGFiZWx9OiAke3ZhbHVlfSIKKworICAgWyAiJHtjb3VudH0iIC1lcSAxIF0gfHwgeworICAgICAgbG9jYWwgbWVzc2FnZT0iYW1iaWd1b3VzICR7bGFiZWx9OiAke3ZhbHVlfSIKKyAgICAgIGxvY2FsIGRlbGltaXRlcj0iICgiCisKKyAgICAgIGZvciBjaG9pY2UgaW4gIiR7Y2FuZGlkYXRlc1tAXX0iCisgICAgICBkbworICAgICAgICAgbWVzc2FnZSs9IiR7ZGVsaW1pdGVyfSR7Y2hvaWNlfSIKKyAgICAgICAgIGRlbGltaXRlcj0iLCAiCisgICAgICBkb25lCisKKyAgICAgIG1lc3NhZ2UrPSIpIgorICAgICAgc3ludGF4RXJyb3IgIiR7bWVzc2FnZX0iCisgICB9CisKKyAgIHNldFZhcmlhYmxlICIke3ZhbHVlVmFyaWFibGV9IiAiJHtjYW5kaWRhdGVzWzBdfSIKK30KKworY29uZmlybUFjdGlvbigpIHsKKyAgIGxvY2FsIHByb21wdD0iJHsxfSIKKworICAgbG9jYWwgbm9Xb3JkPSJubyIKKyAgIGxvY2FsIHllc1dvcmQ9InllcyIKKyAgIGxvY2FsIHJlc3BvbnNlCisKKyAgIHdoaWxlIHJlYWQgLXAgIiR7cHJvZ3JhbU5hbWV9OiAke3Byb21wdH0gKFske25vV29yZH1dIHwgJHt5ZXNXb3JkfSk/ICIgLXIgcmVzcG9uc2UKKyAgIGRvCisgICAgICBbIC1uICIke3Jlc3BvbnNlfSIgXSB8fCByZXR1cm4gMQorICAgICAgcmVzcG9uc2U9IiR7cmVzcG9uc2UsLCp9IgorCisgICAgICBpc0FiYnJldmlhdGlvbiAiJHtyZXNwb25zZX0iICIke25vV29yZH0iICYmIHJldHVybiAxIHx8CisgICAgICBpc0FiYnJldmlhdGlvbiAiJHtyZXNwb25zZX0iICIke3llc1dvcmR9IiAmJiByZXR1cm4gMCB8fAorICAgICAgcHJvZ3JhbU1lc3NhZ2UgInVucmVjb2duaXplZCByZXNwb25zZSIKKyAgIGRvbmUKKworICAgZWNobyA+JjIgIiIKKyAgIHJldHVybiAyCit9CisKZGlmZiAtLWdpdCBhL2JybHR0eS1wcm9sb2d1ZS5sdWEgYi9icmx0dHktcHJvbG9ndWUubHVhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFlZDY3ZjQKLS0tIC9kZXYvbnVsbAorKysgYi9icmx0dHktcHJvbG9ndWUubHVhCkBAIC0wLDAgKzEsNjkgQEAKKy0tW1sKKyAgbGliYnJsYXBpIC0gQSBsaWJyYXJ5IHByb3ZpZGluZyBhY2Nlc3MgdG8gYnJhaWxsZSB0ZXJtaW5hbHMgZm9yIGFwcGxpY2F0aW9ucy4KKyAKKyAgQ29weXJpZ2h0IChDKSAyMDA2LTIwMjMgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPgorIAorICBsaWJicmxhcGkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorIAorICBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAgbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisgCisgIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyAKKyAgVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCitdXQorCitwcm9ncmFtTmFtZSA9IHN0cmluZy5tYXRjaChhcmdbMF0sICIoW14vXSopJCIpCitwcm9ncmFtQXJndW1lbnRDb3VudCA9ICNhcmcKK3Byb2dyYW1Bcmd1bWVudE51bWJlciA9IDEKKworZnVuY3Rpb24gd3JpdGVQcm9ncmFtTWVzc2FnZSAobWVzc2FnZSkKKyAgaW8uc3RkZXJyOndyaXRlKHN0cmluZy5mb3JtYXQoIiVzOiAlc1xuIiwgcHJvZ3JhbU5hbWUsIG1lc3NhZ2UpKQorZW5kCisKK2Z1bmN0aW9uIHN5bnRheEVycm9yIChtZXNzYWdlKQorICB3cml0ZVByb2dyYW1NZXNzYWdlKG1lc3NhZ2UpCisgIG9zLmV4aXQoMikKK2VuZAorCitmdW5jdGlvbiBoYXZlTW9yZVByb2dyYW1Bcmd1bWVudHMgKCkgCisgIHJldHVybiBwcm9ncmFtQXJndW1lbnROdW1iZXIgPD0gcHJvZ3JhbUFyZ3VtZW50Q291bnQKK2VuZAorCitmdW5jdGlvbiBuZXh0UHJvZ3JhbUFyZ3VtZW50IChsYWJlbCkKKyAgaWYgbm90IGhhdmVNb3JlUHJvZ3JhbUFyZ3VtZW50cygpIHRoZW4KKyAgICBzeW50YXhFcnJvcihzdHJpbmcuZm9ybWF0KCJtaXNzaW5nICVzIiwgbGFiZWwpKQorICBlbmQKKworICBsb2NhbCBhcmd1bWVudCA9IGFyZ1twcm9ncmFtQXJndW1lbnROdW1iZXJdCisgIHByb2dyYW1Bcmd1bWVudE51bWJlciA9IHByb2dyYW1Bcmd1bWVudE51bWJlciArIDEKKyAgcmV0dXJuIGFyZ3VtZW50CitlbmQKKworZnVuY3Rpb24gc3RyaW5nQ29udGFpbnMgKHN0cmluZywgc3Vic3RyaW5nKQorICByZXR1cm4gbm90IG5vdCBzdHJpbmc6ZmluZChzdWJzdHJpbmcsIDEsIHRydWUpCitlbmQKKworZnVuY3Rpb24gc3BsaXRTdHJpbmcgKHN0cmluZywgZGVsaW1pdGVyKQorICBsb2NhbCBjb21wb25lbnRzID0ge30KKyAgbG9jYWwgY291bnQgPSAwCisgIGxvY2FsIG9sZFBvc2l0aW9uID0gMQorCisgIHdoaWxlIHRydWUgZG8KKyAgICBsb2NhbCBuZXdQb3NpdGlvbiA9IHN0cmluZzpmaW5kKGRlbGltaXRlciwgb2xkUG9zaXRpb24sIHRydWUpCisgICAgaWYgbm90IG5ld1Bvc2l0aW9uIHRoZW4gYnJlYWsgZW5kCisKKyAgICBjb3VudCA9IGNvdW50ICsgMQorICAgIGNvbXBvbmVudHNbY291bnRdID0gc3RyaW5nOnN1YihvbGRQb3NpdGlvbiwgbmV3UG9zaXRpb24tMSkKKworICAgIG9sZFBvc2l0aW9uID0gbmV3UG9zaXRpb24gKyAjZGVsaW1pdGVyCisgIGVuZAorCisgIGNvdW50ID0gY291bnQgKyAxCisgIGNvbXBvbmVudHNbY291bnRdID0gc3RyaW5nOnN1YihvbGRQb3NpdGlvbikKKworICByZXR1cm4gY29tcG9uZW50cworZW5kCisKZGlmZiAtLWdpdCBhL2JybHR0eS1wcm9sb2d1ZS5zaCBiL2JybHR0eS1wcm9sb2d1ZS5zaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZmQwYjdhCi0tLSAvZGV2L251bGwKKysrIGIvYnJsdHR5LXByb2xvZ3VlLnNoCkBAIC0wLDAgKzEsODM4IEBACisjIS9iaW4vc2gKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyMgICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisjCisjIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyMKKyMgQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCit0ZXN0TW9kZT1mYWxzZQorCityZWFkb25seSBpbml0aWFsRGlyZWN0b3J5PSIkKHB3ZCkiCityZWFkb25seSBwcm9ncmFtTmFtZT0iJChiYXNlbmFtZSAiJHswfSIpIgorCitwcm9ncmFtTWVzc2FnZSgpIHsKKyAgIGxvY2FsIG1lc3NhZ2U9IiR7MX0iCisKKyAgIFsgLXogIiR7bWVzc2FnZX0iIF0gfHwgZWNobyA+JjIgIiR7cHJvZ3JhbU5hbWV9OiAke21lc3NhZ2V9IgorfQorCitzZXRWYXJpYWJsZSgpIHsKKyAgIGV2YWwgIiR7MX0iJz0iJHsyfSInCit9CisKK2dldFZhcmlhYmxlKCkgeworICAgaWYgWyAtbiAiJHsyfSIgXQorICAgdGhlbgorICAgICAgZXZhbCAiJHsyfSInPSIkeyciJHsxfSInfSInCisgICBlbHNlCisgICAgICBldmFsICdlY2hvICIkeyciJHsxfSInfSInCisgICBmaQorfQorCitkZWZpbmVFbnVtZXJhdGlvbigpIHsKKyAgIGxvY2FsIHByZWZpeD0iJHsxfSIKKyAgIHNoaWZ0IDEKKworICAgbG9jYWwgbmFtZQorICAgbG9jYWwgdmFsdWU9MQorCisgICBmb3IgbmFtZQorICAgZG8KKyAgICAgIGxvY2FsIHZhcmlhYmxlPSIke3ByZWZpeH0ke25hbWV9IgorICAgICAgcmVhZG9ubHkgIiR7dmFyaWFibGV9Ij0iJHt2YWx1ZX0iCisgICAgICB2YWx1ZT0kKCh2YWx1ZSArIDEpKQorICAgZG9uZQorfQorCitkZWZpbmVFbnVtZXJhdGlvbiBwcm9ncmFtTG9nTGV2ZWxfIGVycm9yIHdhcm5pbmcgbm90aWNlIHRhc2sgbm90ZSBkZXRhaWwKK3Byb2dyYW1Mb2dMZXZlbD0kKCgke3Byb2dyYW1Mb2dMZXZlbF90YXNrfSkpCisKK2xvZ01lc3NhZ2UoKSB7CisgICBsb2NhbCBsZXZlbD0iJHsxfSIKKyAgIGxvY2FsIG1lc3NhZ2U9IiR7Mn0iCisKKyAgIGxvY2FsIHZhcmlhYmxlPSJwcm9ncmFtTG9nTGV2ZWxfJHtsZXZlbH0iCisgICBsb2NhbCB2YWx1ZT0kKCgke3ZhcmlhYmxlfSkpCisKKyAgIFsgIiR7dmFsdWV9IiAtZ3QgMCBdIHx8IHByb2dyYW1NZXNzYWdlICJ1bmtub3duIGxvZyBsZXZlbDogJHtsZXZlbH0iCisgICBbICIke3ZhbHVlfSIgLWd0ICIke3Byb2dyYW1Mb2dMZXZlbH0iIF0gfHwgcHJvZ3JhbU1lc3NhZ2UgIiR7bWVzc2FnZX0iCit9CisKK2xvZ0Vycm9yKCkgeworICAgbG9nTWVzc2FnZSBlcnJvciAiJHtAfSIKK30KKworbG9nV2FybmluZygpIHsKKyAgIGxvZ01lc3NhZ2Ugd2FybmluZyAiJHtAfSIKK30KKworbG9nTm90aWNlKCkgeworICAgbG9nTWVzc2FnZSBub3RpY2UgIiR7QH0iCit9CisKK2xvZ1Rhc2soKSB7CisgICBsb2dNZXNzYWdlIHRhc2sgIiR7QH0iCit9CisKK2xvZ05vdGUoKSB7CisgICBsb2dNZXNzYWdlIG5vdGUgIiR7QH0iCit9CisKK2xvZ0RldGFpbCgpIHsKKyAgIGxvZ01lc3NhZ2UgZGV0YWlsICIke0B9IgorfQorCitwcm9ncmFtVGVybWluYXRpb25Db21tYW5kQ291bnQ9MAorCitydW5Qcm9ncmFtVGVybWluYXRpb25Db21tYW5kcygpIHsKKyAgIHNldCArZQorCisgICB3aGlsZSBbICIke3Byb2dyYW1UZXJtaW5hdGlvbkNvbW1hbmRDb3VudH0iIC1ndCAwIF0KKyAgIGRvCisgICAgICBzZXQgLS0gJChnZXRWYXJpYWJsZSAicHJvZ3JhbVRlcm1pbmF0aW9uQ29tbWFuZCR7cHJvZ3JhbVRlcm1pbmF0aW9uQ29tbWFuZENvdW50fSIpCisgICAgICBwcm9ncmFtVGVybWluYXRpb25Db21tYW5kQ291bnQ9JCgocHJvZ3JhbVRlcm1pbmF0aW9uQ29tbWFuZENvdW50IC0gMSkpCisKKyAgICAgIGxvY2FsIHByb2Nlc3M9IiR7MX0iCisgICAgICBsb2NhbCBkaXJlY3Rvcnk9IiR7Mn0iCisgICAgICBzaGlmdCAyCisKKyAgICAgIFsgIiR7cHJvY2Vzc30iID0gIiR7JH0iIF0gJiYgeworICAgICAgICAgY2QgIiR7ZGlyZWN0b3J5fSIKKyAgICAgICAgICIke0B9IgorICAgICAgfQorICAgZG9uZQorfQorCitwdXNoUHJvZ3JhbVRlcm1pbmF0aW9uQ29tbWFuZCgpIHsKKyAgIFsgIiR7cHJvZ3JhbVRlcm1pbmF0aW9uQ29tbWFuZENvdW50fSIgLWd0IDAgXSB8fCB0cmFwIHJ1blByb2dyYW1UZXJtaW5hdGlvbkNvbW1hbmRzIGV4aXQKKyAgIHNldFZhcmlhYmxlICJwcm9ncmFtVGVybWluYXRpb25Db21tYW5kJCgocHJvZ3JhbVRlcm1pbmF0aW9uQ29tbWFuZENvdW50ICs9IDEpKSIgIiR7JH0gJChwd2QpICR7Kn0iCit9CisKK25lZWRUZW1wb3JhcnlEaXJlY3RvcnkoKSB7CisgICBsb2NhbCB2YXJpYWJsZT0iJHsxOi10ZW1wb3JhcnlEaXJlY3Rvcnl9IgorCisgICBsb2NhbCBfZGlyZWN0b3J5CisgICBnZXRWYXJpYWJsZSAiJHt2YXJpYWJsZX0iIF9kaXJlY3RvcnkKKworICAgWyAtbiAiJHtfZGlyZWN0b3J5fSIgXSB8fCB7CisgICAgICBbIC1uICIke1RNUERJUn0iIC1hIC1kICIke1RNUERJUn0iIC1hIC1yICIke1RNUERJUn0iIC1hIC13ICIke1RNUERJUn0iIC1hIC14ICIke1RNUERJUn0iIF0gfHwgZXhwb3J0IFRNUERJUj0iL3RtcCIKKyAgICAgIF9kaXJlY3Rvcnk9IiQobWt0ZW1wIC1kICIke1RNUERJUn0vJHtwcm9ncmFtTmFtZX0uJChkYXRlICsiJVklbSVkLSVIJU0lUyIpLlhYWFhYWCIpIgorICAgICAgcHVzaFByb2dyYW1UZXJtaW5hdGlvbkNvbW1hbmQgcm0gLWYgLXIgLS0gIiR7X2RpcmVjdG9yeX0iCisgICAgICBjZCAiJHtfZGlyZWN0b3J5fSIKKyAgICAgIHNldFZhcmlhYmxlICIke3ZhcmlhYmxlfSIgIiR7X2RpcmVjdG9yeX0iCisgICB9Cit9CisKK3Jlc29sdmVEaXJlY3RvcnkoKSB7CisgICBsb2NhbCBwYXRoPSIkezF9IgorICAgbG9jYWwgdmFyaWFibGU9IiR7Mn0iCisgICBsb2NhbCBhYnNvbHV0ZT0iJChjZCAiJHtwYXRofSIgJiYgcHdkKSIKKworICAgaWYgWyAtbiAiJHt2YXJpYWJsZX0iIF0KKyAgIHRoZW4KKyAgICAgIHNldFZhcmlhYmxlICIke3ZhcmlhYmxlfSIgIiR7YWJzb2x1dGV9IgorICAgZWxzZQorICAgICAgZWNobyAiJHthYnNvbHV0ZX0iCisgICBmaQorfQorCitwcm9ncmFtRGlyZWN0b3J5PSIkKGRpcm5hbWUgIiR7MH0iKSIKK3JlYWRvbmx5IHByb2dyYW1EaXJlY3Rvcnk9IiQocmVzb2x2ZURpcmVjdG9yeSAiJHtwcm9ncmFtRGlyZWN0b3J5fSIpIgorCitwYXJzZVBhcmFtZXRlclN0cmluZygpIHsKKyAgIGxvY2FsIHZhbHVlc0FycmF5PSIkezF9IgorICAgbG9jYWwgcGFyYW1ldGVycz0iJHsyfSIKKyAgIGxvY2FsIGNvZGU9IiR7M30iCisKKyAgIHNldCAtLSAke3BhcmFtZXRlcnMvLywvIH0KKyAgIGxvY2FsIHBhcmFtZXRlcgorCisgICBmb3IgcGFyYW1ldGVyCisgICBkbworICAgICAgbG9jYWwgbmFtZT0iJHtwYXJhbWV0ZXIlJT0qfSIKKyAgICAgIFsgIiR7bmFtZX0iID0gIiR7cGFyYW1ldGVyfSIgXSAmJiBjb250aW51ZQorICAgICAgWyAtbiAiJHtuYW1lfSIgXSB8fCBjb250aW51ZQorICAgICAgbG9jYWwgdmFsdWU9IiR7cGFyYW1ldGVyIyo9fSIKKworICAgICAgbG9jYWwgcXVhbGlmaWVyPSIke25hbWUlJToqfSIKKyAgICAgIFsgIiR7cXVhbGlmaWVyfSIgPSAiJHtuYW1lfSIgXSB8fCB7CisgICAgICAgICBbIC1uICIke3F1YWxpZmllcn0iIF0gfHwgY29udGludWUKKyAgICAgICAgIFsgIiR7cXVhbGlmaWVyfSIgPSAiJHtjb2RlfSIgXSB8fCBjb250aW51ZQorICAgICAgICAgbmFtZT0iJHtuYW1lIyo6fSIKKyAgICAgIH0KKworICAgICAgc2V0VmFyaWFibGUgIiR7dmFsdWVzQXJyYXl9WyR7bmFtZV5eKn1dIiAiJHt2YWx1ZX0iCisgICBkb25lCit9CisKK3N0cmluZ0hlYWQoKSB7CisgICBsb2NhbCBzdHJpbmc9IiR7MX0iCisgICBsb2NhbCBsZW5ndGg9IiR7Mn0iCisKKyAgIFsgIiR7bGVuZ3RofSIgLWVxIDAgXSB8fCBleHByIHN1YnN0ciAiJHtzdHJpbmd9IiAxICIke2xlbmd0aH0iCit9CisKK3N0cmluZ1RhaWwoKSB7CisgICBsb2NhbCBzdHJpbmc9IiR7MX0iCisgICBsb2NhbCBzdGFydD0iJHsyfSIKKworICAgbG9jYWwgbGVuZ3RoPSQoKCR7I3N0cmluZ30gLSBzdGFydCkpCisgICBbICIke2xlbmd0aH0iIC1lcSAwIF0gfHwgZXhwciBzdWJzdHIgIiR7c3RyaW5nfSIgJCgoc3RhcnQgKyAxKSkgIiR7bGVuZ3RofSIKK30KKworc3RyaW5nUmVwbGFjZSgpIHsKKyAgIGxvY2FsIHN0cmluZz0iJHsxfSIKKyAgIGxvY2FsIHBhdHRlcm49IiR7Mn0iCisgICBsb2NhbCByZXBsYWNlbWVudD0iJHszfSIKKyAgIGxvY2FsIGZsYWdzPSIkezR9IgorCisgICBlY2hvICIke3N0cmluZ30iIHwgc2VkIC1lICJzLyR7cGF0dGVybn0vJHtyZXBsYWNlbWVudH0vJHtmbGFnc30iCit9CisKK3N0cmluZ1JlcGxhY2VBbGwoKSB7CisgICBsb2NhbCBzdHJpbmc9IiR7MX0iCisgICBsb2NhbCBwYXR0ZXJuPSIkezJ9IgorICAgbG9jYWwgcmVwbGFjZW1lbnQ9IiR7M30iCisKKyAgIHN0cmluZ1JlcGxhY2UgIiR7c3RyaW5nfSIgIiR7cGF0dGVybn0iICIke3JlcGxhY2VtZW50fSIgImciCit9CisKK3N0cmluZ1F1b3RlZCgpIHsKKyAgIGxvY2FsIHN0cmluZz0iJHsxfSIKKworICAgbG9jYWwgcGF0dGVybj0iJyIKKyAgIGxvY2FsIHJlcGxhY2VtZW50PSInIiciJyInIiciJyInIgorICAgc3RyaW5nPSIkKHN0cmluZ1JlcGxhY2VBbGwgIiR7c3RyaW5nfSIgIiR7cGF0dGVybn0iICIke3JlcGxhY2VtZW50fSIpIgorICAgZWNobyAiJyR7c3RyaW5nfSciCit9CisKK3N0cmluZ1dyYXBwZWQoKSB7CisgICBsb2NhbCBzdHJpbmc9IiR7MX0iCisgICBsb2NhbCB3aWR0aD0iJHsyfSIKKworICAgbG9jYWwgcmVzdWx0PSIiCisgICBsb2NhbCBwYXJhZ3JhcGg9IiIKKworICAgd2hpbGUgdHJ1ZQorICAgZG8KKyAgICAgIGxvY2FsIGxlbmd0aD0iJChleHByICIke3N0cmluZ30iIDogJCdbXlxuXSpcbicpIgorICAgICAgbG9jYWwgbGluZQorCisgICAgICBpZiBbICIke2xlbmd0aH0iIC1lcSAwIF0KKyAgICAgIHRoZW4KKyAgICAgICAgIGxpbmU9IiR7c3RyaW5nfSIKKyAgICAgICAgIHN0cmluZz0iIgorICAgICAgZWxzZQorICAgICAgICAgbGluZT0iJChzdHJpbmdIZWFkICIke3N0cmluZ30iICQoKGxlbmd0aCAtIDEpKSkiCisgICAgICAgICBzdHJpbmc9IiQoc3RyaW5nVGFpbCAiJHtzdHJpbmd9IiAiJHtsZW5ndGh9IikiCisgICAgICBmaQorCisgICAgICBbIC16ICIke2xpbmV9IiBdIHx8IFsgIiR7bGluZX0iICE9ICIke2xpbmUjIH0iIF0gfHwgeworICAgICAgICAgWyAteiAiJHtwYXJhZ3JhcGh9IiBdIHx8IHBhcmFncmFwaD0iJHtwYXJhZ3JhcGh9ICIKKyAgICAgICAgIHBhcmFncmFwaD0iJHtwYXJhZ3JhcGh9JHtsaW5lfSIKKyAgICAgICAgIGNvbnRpbnVlCisgICAgICB9CisKKyAgICAgIHdoaWxlIFsgIiR7I3BhcmFncmFwaH0iIC1ndCAiJHt3aWR0aH0iIF0KKyAgICAgIGRvCisgICAgICAgICBsb2NhbCBoZWFkPSIkKHN0cmluZ0hlYWQgIiR7cGFyYWdyYXBofSIgJCgod2lkdGggKyAxKSkpIgorICAgICAgICAgaGVhZD0iJHtoZWFkJSAqfSIKKworICAgICAgICAgWyAiJHsjaGVhZH0iIC1sZSAiJHt3aWR0aH0iIF0gfHwgeworICAgICAgICAgICAgaGVhZD0iJHtwYXJhZ3JhcGglJSAqfSIKKyAgICAgICAgICAgIFsgIiR7aGVhZH0iICE9ICIke3BhcmFncmFwaH0iIF0gfHwgYnJlYWsKKyAgICAgICAgIH0KKworICAgICAgICAgcmVzdWx0PSIke3Jlc3VsdH0gJChzdHJpbmdRdW90ZWQgIiR7aGVhZH0iKSIKKyAgICAgICAgIHBhcmFncmFwaD0iJChzdHJpbmdUYWlsICIke3BhcmFncmFwaH0iICQoKCR7I2hlYWR9ICsgMSkpKSIKKyAgICAgIGRvbmUKKworICAgICAgWyAteiAiJHtwYXJhZ3JhcGh9IiBdIHx8IHsKKyAgICAgICAgIHJlc3VsdD0iJHtyZXN1bHR9ICQoc3RyaW5nUXVvdGVkICIke3BhcmFncmFwaH0iKSIKKyAgICAgICAgIHBhcmFncmFwaD0iIgorICAgICAgfQorCisgICAgICBbIC1uICIke3N0cmluZ30iIF0gfHwgeworICAgICAgICAgWyAteiAiJHtsaW5lfSIgXSB8fCByZXN1bHQ9IiR7cmVzdWx0fSAkKHN0cmluZ1F1b3RlZCAiJHtsaW5lfSIpIgorICAgICAgICAgYnJlYWsKKyAgICAgIH0KKworICAgICAgcmVzdWx0PSIke3Jlc3VsdH0gJChzdHJpbmdRdW90ZWQgIiR7bGluZX0iKSIKKyAgIGRvbmUKKworICAgZWNobyAiJHtyZXN1bHR9IgorfQorCitzeW50YXhFcnJvcigpIHsKKyAgIGxvY2FsIG1lc3NhZ2U9IiR7MX0iCisKKyAgIGxvZ0Vycm9yICIke21lc3NhZ2V9IgorICAgZXhpdCAyCit9CisKK3NlbWFudGljRXJyb3IoKSB7CisgICBsb2NhbCBtZXNzYWdlPSIkezF9IgorCisgICBsb2dFcnJvciAiJHttZXNzYWdlfSIKKyAgIGV4aXQgMworfQorCitpbnRlcm5hbEVycm9yKCkgeworICAgbG9jYWwgbWVzc2FnZT0iJHsxfSIKKworICAgbG9nRXJyb3IgIiR7bWVzc2FnZX0iCisgICBleGl0IDQKK30KKworZmluZFNpYmxpbmdDb21tYW5kKCkgeworICAgbG9jYWwgcmVzdWx0VmFyaWFibGU9IiR7MX0iCisgICBzaGlmdCAxCisKKyAgIGxvY2FsIGNvbW1hbmQKKyAgIGZvciBjb21tYW5kIGluICIke0B9IgorICAgZG8KKyAgICAgIGxvY2FsIHBhdGg9IiR7cHJvZ3JhbURpcmVjdG9yeX0vJHtjb21tYW5kfSIKKyAgICAgIFsgLWYgIiR7cGF0aH0iIF0gfHwgY29udGludWUKKyAgICAgIFsgLXggIiR7cGF0aH0iIF0gfHwgY29udGludWUKKworICAgICAgc2V0VmFyaWFibGUgIiR7cmVzdWx0VmFyaWFibGV9IiAiJHtwYXRofSIKKyAgICAgIHJldHVybiAwCisgICBkb25lCisKKyAgIHJldHVybiAxCit9CisKK2ZpbmRIb3N0Q29tbWFuZCgpIHsKKyAgIGxvY2FsIHBhdGhWYXJpYWJsZT0iJHsxfSIKKyAgIGxvY2FsIGNvbW1hbmQ9IiR7Mn0iCisKKyAgIGxvY2FsIHBhdGg9IiQod2hpY2ggIiR7Y29tbWFuZH0iKSIKKyAgIFsgLW4gIiR7cGF0aH0iIF0gfHwgcmV0dXJuIDEKKworICAgc2V0VmFyaWFibGUgIiR7cGF0aFZhcmlhYmxlfSIgIiR7cGF0aH0iCisgICByZXR1cm4gMAorfQorCit2ZXJpZnlIb3N0Q29tbWFuZCgpIHsKKyAgIGxvY2FsIHBhdGhWYXJpYWJsZT0iJHsxfSIKKyAgIGxvY2FsIGNvbW1hbmQ9IiR7Mn0iCisKKyAgIGZpbmRIb3N0Q29tbWFuZCAiJHtwYXRoVmFyaWFibGV9IiAiJHtjb21tYW5kfSIgfHwgeworICAgICAgc2VtYW50aWNFcnJvciAiaG9zdCBjb21tYW5kIG5vdCBmb3VuZDogJHtjb21tYW5kfSIKKyAgIH0KK30KKworZXhlY3V0ZUhvc3RDb21tYW5kKCkgeworICAgbG9nRGV0YWlsICJleGVjdXRpbmcgaG9zdCBjb21tYW5kOiAkeyp9IgorCisgICAiJHt0ZXN0TW9kZX0iIHx8ICIke0B9IiB8fCB7CisgICAgICBsb2NhbCBzdGF0dXM9IiR7P30iCisgICAgICBsb2dXYXJuaW5nICJob3N0IGNvbW1hbmQgZmFpbGVkIHdpdGggZXhpdCBzdGF0dXMgJHtzdGF0dXN9OiAkeyp9IgorICAgICAgcmV0dXJuICIke3N0YXR1c30iCisgICB9Cit9CisKK3ZlcmlmeUFjdGlvbkZsYWdzKCkgeworICAgbG9jYWwgYWxsRmxhZz0iJHsxfSIKKyAgIHNoaWZ0IDEKKworICAgbG9jYWwgYWxsUmVxdWVzdGVkCisgICBnZXRWYXJpYWJsZSAiJHthbGxGbGFnfSIgYWxsUmVxdWVzdGVkCisgICBsb2NhbCBhY3Rpb25GbGFnCisKKyAgIGZvciBhY3Rpb25GbGFnIGluICIke0B9IgorICAgZG8KKyAgICAgIGxvY2FsIGFjdGlvblJlcXVlc3RlZAorICAgICAgZ2V0VmFyaWFibGUgIiR7YWN0aW9uRmxhZ30iIGFjdGlvblJlcXVlc3RlZAorCisgICAgICAiJHthY3Rpb25SZXF1ZXN0ZWR9IiAmJiB7CisgICAgICAgICAiJHthbGxSZXF1ZXN0ZWR9IiAmJiBzeW50YXhFcnJvciAiY29uZmxpY3RpbmcgYWN0aW9ucyIKKyAgICAgICAgIHJldHVybgorICAgICAgfQorICAgZG9uZQorCisgICAiJHthbGxSZXF1ZXN0ZWR9IiB8fCBzeW50YXhFcnJvciAibm8gYWN0aW9ucyIKKworICAgZm9yIGFjdGlvbkZsYWcgaW4gIiR7QH0iCisgICBkbworICAgICAgc2V0VmFyaWFibGUgIiR7YWN0aW9uRmxhZ30iIHRydWUKKyAgIGRvbmUKK30KKwordGVzdEludGVnZXIoKSB7CisgICBsb2NhbCB2YWx1ZT0iJHsxfSIKKworICAgWyAiJHt2YWx1ZX0iID0gIjAiIF0gfHwgeworICAgICAgdmFsdWU9IiR7dmFsdWUjLX0iCisgICAgICBbIC1uICIke3ZhbHVlfSIgXSB8fCByZXR1cm4gMQorICAgICAgWyAiJChleHByICIke3ZhbHVlfSIgOiAnXlsxLTldWzAtOV0qJCcpIiAtZXEgIiR7I3ZhbHVlfSIgXSB8fCByZXR1cm4gMQorICAgfQorCisgICByZXR1cm4gMAorfQorCit2ZXJpZnlJbnRlZ2VyKCkgeworICAgbG9jYWwgbGFiZWw9IiR7MX0iCisgICBsb2NhbCB2YWx1ZT0iJHsyfSIKKyAgIGxvY2FsIG1pbmltdW09IiR7M30iCisgICBsb2NhbCBtYXhpbXVtPSIkezR9IgorCisgICB0ZXN0SW50ZWdlciAiJHt2YWx1ZX0iIHx8IHsKKyAgICAgIHNlbWFudGljRXJyb3IgIiR7bGFiZWx9IG5vdCBhbiBpbnRlZ2VyOiAke3ZhbHVlfSIKKyAgIH0KKworICAgWyAtbiAiJHttaW5pbXVtfSIgXSAmJiB7CisgICAgICBbICIke3ZhbHVlfSIgLWx0ICIke21pbmltdW19IiBdICYmIHsKKyAgICAgICAgIHNlbWFudGljRXJyb3IgIiR7bGFiZWx9IG91dCBvZiByYW5nZTogJHt2YWx1ZX0gPCAke21pbmltdW19IgorICAgICAgfQorICAgfQorCisgICBbIC1uICIke21heGltdW19IiBdICYmIHsKKyAgICAgIFsgIiR7dmFsdWV9IiAtZ3QgIiR7bWF4aW11bX0iIF0gJiYgeworICAgICAgICAgc2VtYW50aWNFcnJvciAiJHtsYWJlbH0gb3V0IG9mIHJhbmdlOiAke3ZhbHVlfSA+ICR7bWF4aW11bX0iCisgICAgICB9CisgICB9Cit9CisKK3Rlc3RDb250YWluaW5nRGlyZWN0b3J5KCkgeworICAgbG9jYWwgZGlyZWN0b3J5PSIkezF9IgorICAgc2hpZnQgMQorCisgICBsb2NhbCBwYXRoCisgICBmb3IgcGF0aAorICAgZG8KKyAgICAgIFsgLWUgIiR7ZGlyZWN0b3J5fS8ke3BhdGh9IiBdIHx8IHJldHVybiAxCisgICBkb25lCisKKyAgIHJldHVybiAwCit9CisKK2ZpbmRDb250YWluaW5nRGlyZWN0b3J5KCkgeworICAgbG9jYWwgdmFyaWFibGU9IiR7MX0iCisgICBsb2NhbCBkaXJlY3Rvcnk9IiR7Mn0iCisgICBzaGlmdCAyCisKKyAgIGxvY2FsIHZhbHVlCisgICBnZXRWYXJpYWJsZSAiJHt2YXJpYWJsZX0iIHZhbHVlCisgICBbIC1uICIke3ZhbHVlfSIgXSAmJiByZXR1cm4gMAorCisgICB3aGlsZSA6CisgICBkbworICAgICAgdGVzdENvbnRhaW5pbmdEaXJlY3RvcnkgIiR7ZGlyZWN0b3J5fSIgIiR7QH0iICYmIGJyZWFrCisgICAgICBsb2NhbCBwYXJlbnQ9IiQoZGlybmFtZSAiJHtkaXJlY3Rvcnl9IikiCisgICAgICBbICIke3BhcmVudH0iID0gIiR7ZGlyZWN0b3J5fSIgXSAmJiByZXR1cm4gMQorICAgICAgZGlyZWN0b3J5PSIke3BhcmVudH0iCisgICBkb25lCisKKyAgIGV4cG9ydCAiJHt2YXJpYWJsZX0iPSIke2RpcmVjdG9yeX0iCit9CisKK3Rlc3REaXJlY3RvcnkoKSB7CisgICBsb2NhbCBwYXRoPSIkezF9IgorCisgICBbIC1lICIke3BhdGh9IiBdIHx8IHJldHVybiAxCisgICBbIC1kICIke3BhdGh9IiBdIHx8IHNlbWFudGljRXJyb3IgIm5vdCBhIGRpcmVjdG9yeTogJHtwYXRofSIKKyAgIHJldHVybiAwCit9CisKK3ZlcmlmeVdyaXRhYmxlRGlyZWN0b3J5KCkgeworICAgbG9jYWwgcGF0aD0iJHsxfSIKKworICAgdGVzdERpcmVjdG9yeSAiJHtwYXRofSIgfHwgc2VtYW50aWNFcnJvciAiZGlyZWN0b3J5IG5vdCBmb3VuZDogJHtwYXRofSIKKyAgIFsgLXcgIiR7cGF0aH0iIF0gfHwgc2VtYW50aWNFcnJvciAiZGlyZWN0b3J5IG5vdCB3cml0YWJsZTogJHtwYXRofSIKK30KKwordGVzdEZpbGUoKSB7CisgICBsb2NhbCBwYXRoPSIkezF9IgorCisgICBbIC1lICIke3BhdGh9IiBdIHx8IHJldHVybiAxCisgICBbIC1mICIke3BhdGh9IiBdIHx8IHNlbWFudGljRXJyb3IgIm5vdCBhIGZpbGU6ICR7cGF0aH0iCisgICByZXR1cm4gMAorfQorCit2ZXJpZnlJbnB1dEZpbGUoKSB7CisgICBsb2NhbCBwYXRoPSIkezF9IgorCisgICB0ZXN0RmlsZSAiJHtwYXRofSIgfHwgc2VtYW50aWNFcnJvciAiZmlsZSBub3QgZm91bmQ6ICR7cGF0aH0iCisgICBbIC1yICIke3BhdGh9IiBdIHx8IHNlbWFudGljRXJyb3IgImZpbGUgbm90IHJlYWRhYmxlOiAke3BhdGh9IgorfQorCit2ZXJpZnlPdXRwdXRGaWxlKCkgeworICAgbG9jYWwgcGF0aD0iJHsxfSIKKworICAgaWYgdGVzdEZpbGUgIiR7cGF0aH0iCisgICB0aGVuCisgICAgICBbIC13ICIke3BhdGh9IiBdIHx8IHNlbWFudGljRXJyb3IgImZpbGUgbm90IHdyaXRhYmxlOiAke3BhdGh9IgorICAgZWxzZQorICAgICAgdmVyaWZ5V3JpdGFibGVEaXJlY3RvcnkgIiQoZGlybmFtZSAiJHtwYXRofSIpIgorICAgZmkKK30KKwordmVyaWZ5RXhlY3V0YWJsZUZpbGUoKSB7CisgICBsb2NhbCBwYXRoPSIkezF9IgorCisgICB0ZXN0RmlsZSAiJHtwYXRofSIgfHwgc2VtYW50aWNFcnJvciAiZmlsZSBub3QgZm91bmQ6ICR7cGF0aH0iCisgICBbIC14ICIke3BhdGh9IiBdIHx8IHNlbWFudGljRXJyb3IgImZpbGUgbm90IGV4ZWN1dGFibGU6ICR7cGF0aH0iCit9CisKK3ZlcmlmeUlucHV0RGlyZWN0b3J5KCkgeworICAgbG9jYWwgcGF0aD0iJHsxfSIKKworICAgdGVzdERpcmVjdG9yeSAiJHtwYXRofSIgfHwgc2VtYW50aWNFcnJvciAiZGlyZWN0b3J5IG5vdCBmb3VuZDogJHtwYXRofSIKK30KKwordmVyaWZ5T3V0cHV0RGlyZWN0b3J5KCkgeworICAgbG9jYWwgcGF0aD0iJHsxfSIKKworICAgaWYgdGVzdERpcmVjdG9yeSAiJHtwYXRofSIKKyAgIHRoZW4KKyAgICAgIFsgLXcgIiR7cGF0aH0iIF0gfHwgc2VtYW50aWNFcnJvciAiZGlyZWN0b3J5IG5vdCB3cml0YWJsZTogJHtwYXRofSIKKyAgICAgIHJtIC1mIC1yIC0tICIke3BhdGh9LyIqCisgICBlbHNlCisgICAgICBta2RpciAtcCAiJHtwYXRofSIKKyAgIGZpCit9CisKK3Byb2dyYW1QYXJhbWV0ZXJDb3VudD0wCitwcm9ncmFtUGFyYW1ldGVyQ291bnRNaW5pbXVtPS0xCitwcm9ncmFtUGFyYW1ldGVyTGFiZWxXaWR0aD0wCisKK2FkZFByb2dyYW1QYXJhbWV0ZXIoKSB7CisgICBsb2NhbCBsYWJlbD0iJHsxfSIKKyAgIGxvY2FsIHZhcmlhYmxlPSIkezJ9IgorICAgbG9jYWwgdXNhZ2U9IiR7M30iCisgICBsb2NhbCBkZWZhdWx0PSIkezR9IgorCisgICBzZXRWYXJpYWJsZSAicHJvZ3JhbVBhcmFtZXRlckxhYmVsXyR7cHJvZ3JhbVBhcmFtZXRlckNvdW50fSIgIiR7bGFiZWx9IgorICAgc2V0VmFyaWFibGUgInByb2dyYW1QYXJhbWV0ZXJWYXJpYWJsZV8ke3Byb2dyYW1QYXJhbWV0ZXJDb3VudH0iICIke3ZhcmlhYmxlfSIKKyAgIHNldFZhcmlhYmxlICJwcm9ncmFtUGFyYW1ldGVyVXNhZ2VfJHtwcm9ncmFtUGFyYW1ldGVyQ291bnR9IiAiJHt1c2FnZX0iCisgICBzZXRWYXJpYWJsZSAicHJvZ3JhbVBhcmFtZXRlckRlZmF1bHRfJHtwcm9ncmFtUGFyYW1ldGVyQ291bnR9IiAiJHtkZWZhdWx0fSIKKworICAgbG9jYWwgbGVuZ3RoPSIkeyNsYWJlbH0iCisgICBbICIke2xlbmd0aH0iIC1sZSAiJHtwcm9ncmFtUGFyYW1ldGVyTGFiZWxXaWR0aH0iIF0gfHwgcHJvZ3JhbVBhcmFtZXRlckxhYmVsV2lkdGg9IiR7bGVuZ3RofSIKKworICAgc2V0VmFyaWFibGUgIiR7dmFyaWFibGV9IiAiIgorICAgcHJvZ3JhbVBhcmFtZXRlckNvdW50PSQoKHByb2dyYW1QYXJhbWV0ZXJDb3VudCArIDEpKQorfQorCitvcHRpb25hbFByb2dyYW1QYXJhbWV0ZXJzKCkgeworICAgaWYgWyAiJHtwcm9ncmFtUGFyYW1ldGVyQ291bnRNaW5pbXVtfSIgLWx0IDAgXQorICAgdGhlbgorICAgICAgcHJvZ3JhbVBhcmFtZXRlckNvdW50TWluaW11bT0iJHtwcm9ncmFtUGFyYW1ldGVyQ291bnR9IgorICAgICAgb3B0aW9uYWxQcm9ncmFtUGFyYW1ldGVyTGFiZWw9IiR7MX0iCisgICAgICBvcHRpb25hbFByb2dyYW1QYXJhbWV0ZXJVc2FnZT0iJHsyfSIKKyAgIGVsc2UKKyAgICAgIGxvZ1dhcm5pbmcgInByb2dyYW0gcGFyYW1ldGVycyBhcmUgYWxyZWFkeSBvcHRpb25hbCIKKyAgIGZpCit9CisKK3Rvb01hbnlQcm9ncmFtUGFyYW1ldGVycygpIHsKKyAgIHN5bnRheEVycm9yICJ0b28gbWFueSBwYXJhbWV0ZXJzIgorfQorCitwcm9ncmFtT3B0aW9uTGV0dGVycz0iIgorcHJvZ3JhbU9wdGlvblN0cmluZz0iIgorcHJvZ3JhbU9wdGlvbk9wZXJhbmRXaWR0aD0wCisKK3Byb2dyYW1PcHRpb25WYWx1ZV9jb3VudGVyPTAKK3Byb2dyYW1PcHRpb25WYWx1ZV9mbGFnPWZhbHNlCitwcm9ncmFtT3B0aW9uVmFsdWVfbGlzdD0iIgorcHJvZ3JhbU9wdGlvblZhbHVlX3N0cmluZz0iIgorCithZGRQcm9ncmFtT3B0aW9uKCkgeworICAgbG9jYWwgbGV0dGVyPSIkezF9IgorICAgbG9jYWwgdHlwZT0iJHsyfSIKKyAgIGxvY2FsIHZhcmlhYmxlPSIkezN9IgorICAgbG9jYWwgdXNhZ2U9IiR7NH0iCisgICBsb2NhbCBkZWZhdWx0PSIkezV9IgorCisgICBbICIkKGV4cHIgIiR7bGV0dGVyfSIgOiAnW1s6YWxudW06XV0qJCcpIiAtZXEgMSBdIHx8IGludGVybmFsRXJyb3IgImludmFsaWQgcHJvZ3JhbSBvcHRpb246IC0ke2xldHRlcn0iCisgICBbIC16ICIkKGdldFZhcmlhYmxlICJwcm9ncmFtT3B0aW9uVHlwZV8ke2xldHRlcn0iKSIgXSB8fCBpbnRlcm5hbEVycm9yICJkdXBsaWNhdGUgcHJvZ3JhbSBvcHRpb24gZGVmaW5pdGlvbjogLSR7bGV0dGVyfSIKKworICAgbG9jYWwgb3BlcmFuZAorICAgY2FzZSAiJHt0eXBlfSIKKyAgIGluCisgICAgICBmbGFnIHwgY291bnRlcikKKyAgICAgICAgIG9wZXJhbmQ9IiIKKyAgICAgICAgIDs7CisKKyAgICAgIHN0cmluZy4qIHwgbGlzdC4qKQorICAgICAgICAgb3BlcmFuZD0iJHt0eXBlIyoufSIKKyAgICAgICAgIHR5cGU9IiR7dHlwZSUlLip9IgorICAgICAgICAgWyAtbiAiJHtvcGVyYW5kfSIgXSB8fCBpbnRlcm5hbEVycm9yICJtaXNzaW5nIHByb2dyYW0gb3B0aW9uIG9wZXJhbmQgdHlwZTogLSR7bGV0dGVyfSIKKyAgICAgICAgIDs7CisKKyAgICAgICopIGludGVybmFsRXJyb3IgImludmFsaWQgcHJvZ3JhbSBvcHRpb24gdHlwZTogJHt0eXBlfSAoLSR7bGV0dGVyfSkiOzsKKyAgIGVzYWMKKworICAgc2V0VmFyaWFibGUgInByb2dyYW1PcHRpb25UeXBlXyR7bGV0dGVyfSIgIiR7dHlwZX0iCisgICBzZXRWYXJpYWJsZSAicHJvZ3JhbU9wdGlvblZhcmlhYmxlXyR7bGV0dGVyfSIgIiR7dmFyaWFibGV9IgorICAgc2V0VmFyaWFibGUgInByb2dyYW1PcHRpb25PcGVyYW5kXyR7bGV0dGVyfSIgIiR7b3BlcmFuZH0iCisgICBzZXRWYXJpYWJsZSAicHJvZ3JhbU9wdGlvblVzYWdlXyR7bGV0dGVyfSIgIiR7dXNhZ2V9IgorICAgc2V0VmFyaWFibGUgInByb2dyYW1PcHRpb25EZWZhdWx0XyR7bGV0dGVyfSIgIiR7ZGVmYXVsdH0iCisKKyAgIGxvY2FsIHZhbHVlPSIkKGdldFZhcmlhYmxlICJwcm9ncmFtT3B0aW9uVmFsdWVfJHt0eXBlfSIpIgorICAgc2V0VmFyaWFibGUgIiR7dmFyaWFibGV9IiAiJHt2YWx1ZX0iCisKKyAgIGxvY2FsIGxlbmd0aD0iJHsjb3BlcmFuZH0iCisgICBbICIke2xlbmd0aH0iIC1sZSAiJHtwcm9ncmFtT3B0aW9uT3BlcmFuZFdpZHRofSIgXSB8fCBwcm9ncmFtT3B0aW9uT3BlcmFuZFdpZHRoPSIke2xlbmd0aH0iCisKKyAgIHByb2dyYW1PcHRpb25MZXR0ZXJzPSIke3Byb2dyYW1PcHRpb25MZXR0ZXJzfSAke2xldHRlcn0iCisgICBwcm9ncmFtT3B0aW9uU3RyaW5nPSIke3Byb2dyYW1PcHRpb25TdHJpbmd9JHtsZXR0ZXJ9IgorICAgWyAiJHtsZW5ndGh9IiAtZXEgMCBdIHx8IHByb2dyYW1PcHRpb25TdHJpbmc9IiR7cHJvZ3JhbU9wdGlvblN0cmluZ306IgorfQorCithZGRUZXN0TW9kZU9wdGlvbigpIHsKKyAgIGFkZFByb2dyYW1PcHRpb24gdCBmbGFnIHRlc3RNb2RlICJ0ZXN0IG1vZGUgLSBsb2cgKGJ1dCBkb24ndCBleGVjdXRlKSB0aGUgaG9zdCBjb21tYW5kcyIKK30KKworcHJvZ3JhbVVzYWdlTGluZUNvdW50PTAKK3Byb2dyYW1Vc2FnZUxpbmVXaWR0aD0iJHtDT0xVTU5TOi03Mn0iCisKK2FkZFByb2dyYW1Vc2FnZUxpbmUoKSB7CisgICBsb2NhbCBsaW5lPSIkezF9IgorCisgICBzZXRWYXJpYWJsZSAicHJvZ3JhbVVzYWdlTGluZV8ke3Byb2dyYW1Vc2FnZUxpbmVDb3VudH0iICIke2xpbmV9IgorICAgcHJvZ3JhbVVzYWdlTGluZUNvdW50PSQoKHByb2dyYW1Vc2FnZUxpbmVDb3VudCArIDEpKQorfQorCithZGRQcm9ncmFtVXNhZ2VUZXh0KCkgeworICAgbG9jYWwgdGV4dD0iJHsxfSIKKyAgIGxvY2FsIHByZWZpeD0iJHsyfSIKKworICAgbG9jYWwgd2lkdGg9JCgocHJvZ3JhbVVzYWdlTGluZVdpZHRoIC0gJHsjcHJlZml4fSkpCisKKyAgIHdoaWxlIFsgIiR7d2lkdGh9IiAtbHQgMSBdCisgICBkbworICAgICAgWyAiJHtwcmVmaXglICB9IiAhPSAiJHtwcmVmaXh9IiBdIHx8IGJyZWFrCisgICAgICBwcmVmaXg9IiR7cHJlZml4JT99IgorICAgICAgd2lkdGg9JCgod2lkdGggKyAxKSkKKyAgIGRvbmUKKworICAgbG9jYWwgaW5kZW50PSIkKHN0cmluZ1JlcGxhY2VBbGwgIiR7cHJlZml4fSIgJy4nICcgJykiCisKKyAgIFsgIiR7d2lkdGh9IiAtZ3QgMCBdIHx8IHsKKyAgICAgIGFkZFByb2dyYW1Vc2FnZUxpbmUgIiR7cHJlZml4fSIKKyAgICAgIGluZGVudD0iJChzdHJpbmdUYWlsICIke2luZGVudH0iICQoKC13aWR0aCArIDEpKSkiCisgICAgICBwcmVmaXg9IiR7aW5kZW50fSIKKyAgICAgIHdpZHRoPTEKKyAgIH0KKworICAgZXZhbCBzZXQgLS0gIiQoc3RyaW5nV3JhcHBlZCAiJHt0ZXh0fSIgIiR7d2lkdGh9IikiCisgICBmb3IgbGluZQorICAgZG8KKyAgICAgIGFkZFByb2dyYW1Vc2FnZUxpbmUgIiR7cHJlZml4fSR7bGluZX0iCisgICAgICBwcmVmaXg9IiR7aW5kZW50fSIKKyAgIGRvbmUKK30KKword3JpdGVQcm9ncmFtVXNhZ2VMaW5lcygpIHsKKyAgIGxvY2FsIGluZGV4PTAKKworICAgd2hpbGUgWyAiJHtpbmRleH0iIC1sdCAiJHtwcm9ncmFtVXNhZ2VMaW5lQ291bnR9IiBdCisgICBkbworICAgICAgZ2V0VmFyaWFibGUgInByb2dyYW1Vc2FnZUxpbmVfJHtpbmRleH0iCisgICAgICBpbmRleD0kKChpbmRleCArIDEpKQorICAgZG9uZQorfQorCitzaG93UHJvZ3JhbVVzYWdlU3VtbWFyeSgpIHsKKyAgIHNldCAtLSAke3Byb2dyYW1PcHRpb25MZXR0ZXJzfQorCisgICBsb2NhbCBwdXJwb3NlPSIkKHNob3dQcm9ncmFtVXNhZ2VQdXJwb3NlKSIKKyAgIFsgLXogIiR7cHVycG9zZX0iIF0gfHwgeworICAgICAgYWRkUHJvZ3JhbVVzYWdlVGV4dCAiJHtwdXJwb3NlfSIKKyAgICAgIGFkZFByb2dyYW1Vc2FnZUxpbmUKKyAgIH0KKworICAgbG9jYWwgbGluZT0iU3ludGF4OiAke3Byb2dyYW1OYW1lfSIKKyAgIFsgIiR7I30iIC1lcSAwIF0gfHwgbGluZT0iJHtsaW5lfSBbLW9wdGlvbiAuLi5dIgorCisgICBsb2NhbCBpbmRleD0wCisgICBsb2NhbCBzdWZmaXg9IiIKKworICAgd2hpbGUgWyAiJHtpbmRleH0iIC1sdCAiJHtwcm9ncmFtUGFyYW1ldGVyQ291bnR9IiBdCisgICBkbworICAgICAgbGluZT0iJHtsaW5lfSAiCisKKyAgICAgIFsgIiR7aW5kZXh9IiAtbHQgIiR7cHJvZ3JhbVBhcmFtZXRlckNvdW50TWluaW11bX0iIF0gfHwgeworICAgICAgICAgbGluZT0iJHtsaW5lfVsiCisgICAgICAgICBzdWZmaXg9IiR7c3VmZml4fV0iCisgICAgICB9CisKKyAgICAgIGxpbmU9IiR7bGluZX0kKGdldFZhcmlhYmxlICJwcm9ncmFtUGFyYW1ldGVyTGFiZWxfJHtpbmRleH0iKSIKKyAgICAgIGluZGV4PSQoKGluZGV4ICsgMSkpCisgICBkb25lCisKKyAgIFsgLXogIiR7b3B0aW9uYWxQcm9ncmFtUGFyYW1ldGVyTGFiZWx9IiBdIHx8IHsKKyAgICAgIGxpbmU9IiR7bGluZX0gWyR7b3B0aW9uYWxQcm9ncmFtUGFyYW1ldGVyTGFiZWx9IC4uLl0iCisKKyAgICAgIFsgLXogIiR7b3B0aW9uYWxQcm9ncmFtUGFyYW1ldGVyVXNhZ2V9IiBdIHx8IHsKKyAgICAgICAgIGFkZFByb2dyYW1QYXJhbWV0ZXIgIiR7b3B0aW9uYWxQcm9ncmFtUGFyYW1ldGVyTGFiZWx9IC4uLiIgb3B0aW9uYWxQcm9ncmFtUGFyYW1ldGVyVmFyaWFibGUgIiR7b3B0aW9uYWxQcm9ncmFtUGFyYW1ldGVyVXNhZ2V9IgorICAgICAgfQorICAgfQorCisgICBsaW5lPSIke2xpbmV9JHtzdWZmaXh9IgorICAgYWRkUHJvZ3JhbVVzYWdlTGluZSAiJHtsaW5lfSIKKworICAgWyAiJHtwcm9ncmFtUGFyYW1ldGVyQ291bnR9IiAtZXEgMCBdIHx8IHsKKyAgICAgIGFkZFByb2dyYW1Vc2FnZUxpbmUKKyAgICAgIGFkZFByb2dyYW1Vc2FnZUxpbmUgIlBhcmFtZXRlcnM6IgorCisgICAgICBsb2NhbCBpbmRlbnQ9JCgocHJvZ3JhbVBhcmFtZXRlckxhYmVsV2lkdGggKyAyKSkKKyAgICAgIGxvY2FsIGluZGV4PTAKKworICAgICAgd2hpbGUgWyAiJHtpbmRleH0iIC1sdCAiJHtwcm9ncmFtUGFyYW1ldGVyQ291bnR9IiBdCisgICAgICBkbworICAgICAgICAgbG9jYWwgbGluZT0iJChnZXRWYXJpYWJsZSAicHJvZ3JhbVBhcmFtZXRlckxhYmVsXyR7aW5kZXh9IikiCisKKyAgICAgICAgIHdoaWxlIFsgIiR7I2xpbmV9IiAtbHQgIiR7aW5kZW50fSIgXQorICAgICAgICAgZG8KKyAgICAgICAgICAgIGxpbmU9IiR7bGluZX0gIgorICAgICAgICAgZG9uZQorCisgICAgICAgICBsb2NhbCB1c2FnZT0iJChnZXRWYXJpYWJsZSAicHJvZ3JhbVBhcmFtZXRlclVzYWdlXyR7aW5kZXh9IikiCisgICAgICAgICBsb2NhbCBkZWZhdWx0PSIkKGdldFZhcmlhYmxlICJwcm9ncmFtUGFyYW1ldGVyRGVmYXVsdF8ke2luZGV4fSIpIgorICAgICAgICAgWyAteiAiJHtkZWZhdWx0fSIgXSB8fCB1c2FnZT0iJHt1c2FnZX0gLSB0aGUgZGVmYXVsdCBpcyAke2RlZmF1bHR9IgorICAgICAgICAgYWRkUHJvZ3JhbVVzYWdlVGV4dCAiJHt1c2FnZX0iICIgICR7bGluZX0iCisKKyAgICAgICAgIGluZGV4PSQoKGluZGV4ICsgMSkpCisgICAgICBkb25lCisgICB9CisKKyAgIFsgIiR7I30iIC1lcSAwIF0gfHwgeworICAgICAgYWRkUHJvZ3JhbVVzYWdlTGluZQorICAgICAgYWRkUHJvZ3JhbVVzYWdlTGluZSAiT3B0aW9uczoiCisKKyAgICAgIGxvY2FsIGluZGVudD0kKCgzICsgcHJvZ3JhbU9wdGlvbk9wZXJhbmRXaWR0aCArIDIpKQorICAgICAgbG9jYWwgbGV0dGVyCisKKyAgICAgIGZvciBsZXR0ZXIKKyAgICAgIGRvCisgICAgICAgICBsb2NhbCBsaW5lPSItJHtsZXR0ZXJ9ICQoZ2V0VmFyaWFibGUgInByb2dyYW1PcHRpb25PcGVyYW5kXyR7bGV0dGVyfSIpIgorCisgICAgICAgICB3aGlsZSBbICIkeyNsaW5lfSIgLWx0ICIke2luZGVudH0iIF0KKyAgICAgICAgIGRvCisgICAgICAgICAgICBsaW5lPSIke2xpbmV9ICIKKyAgICAgICAgIGRvbmUKKworICAgICAgICAgdXNhZ2U9IiQoZ2V0VmFyaWFibGUgInByb2dyYW1PcHRpb25Vc2FnZV8ke2xldHRlcn0iKSIKKyAgICAgICAgIGxvY2FsIGRlZmF1bHQ9IiQoZ2V0VmFyaWFibGUgInByb2dyYW1PcHRpb25EZWZhdWx0XyR7bGV0dGVyfSIpIgorICAgICAgICAgWyAteiAiJHtkZWZhdWx0fSIgXSB8fCB1c2FnZT0iJHt1c2FnZX0gLSB0aGUgZGVmYXVsdCBpcyAke2RlZmF1bHR9IgorICAgICAgICAgYWRkUHJvZ3JhbVVzYWdlVGV4dCAiJHt1c2FnZX0iICIgICR7bGluZX0iCisgICAgICBkb25lCisgICB9CisKKyAgIGxvY2FsIG5vdGVzPSIkKHNob3dQcm9ncmFtVXNhZ2VOb3RlcykiCisgICBbIC16ICIke25vdGVzfSIgXSB8fCB7CisgICAgICBhZGRQcm9ncmFtVXNhZ2VMaW5lCisgICAgICBhZGRQcm9ncmFtVXNhZ2VUZXh0ICIke25vdGVzfSIKKyAgIH0KKworICAgd3JpdGVQcm9ncmFtVXNhZ2VMaW5lcworfQorCithZGRQcm9ncmFtT3B0aW9uIGggZmxhZyBwcm9ncmFtT3B0aW9uX3Nob3dVc2FnZVN1bW1hcnkgInNob3cgdGhpcyB1c2FnZSBzdW1tYXJ5LCBhbmQgdGhlbiBleGl0IgorYWRkUHJvZ3JhbU9wdGlvbiBxIGNvdW50ZXIgcHJvZ3JhbU9wdGlvbl9xdWlldENvdW50ICJkZWNyZWFzZSBvdXRwdXQgdmVyYm9zaXR5IgorYWRkUHJvZ3JhbU9wdGlvbiB2IGNvdW50ZXIgcHJvZ3JhbU9wdGlvbl92ZXJib3NlQ291bnQgImluY3JlYXNlIG91dHB1dCB2ZXJib3NpdHkiCisKK3BhcnNlUHJvZ3JhbU9wdGlvbnMoKSB7CisgICBsb2NhbCBsZXR0ZXIKKworICAgd2hpbGUgZ2V0b3B0cyAiOiR7cHJvZ3JhbU9wdGlvblN0cmluZ30iIGxldHRlcgorICAgZG8KKyAgICAgIGNhc2UgIiR7bGV0dGVyfSIKKyAgICAgIGluCisgICAgICAgIFw/KSBzeW50YXhFcnJvciAidW5yZWNvZ25pemVkIG9wdGlvbjogLSR7T1BUQVJHfSI7OworICAgICAgICAgOikgc3ludGF4RXJyb3IgIm1pc3Npbmcgb3BlcmFuZDogLSR7T1BUQVJHfSI7OworCisgICAgICAgICAqKSBsb2NhbCB2YXJpYWJsZSB0eXBlCisgICAgICAgICAgICBzZXRWYXJpYWJsZSB2YXJpYWJsZSAiJChnZXRWYXJpYWJsZSAicHJvZ3JhbU9wdGlvblZhcmlhYmxlXyR7bGV0dGVyfSIpIgorICAgICAgICAgICAgc2V0VmFyaWFibGUgdHlwZSAiJChnZXRWYXJpYWJsZSAicHJvZ3JhbU9wdGlvblR5cGVfJHtsZXR0ZXJ9IikiCisKKyAgICAgICAgICAgIGNhc2UgIiR7dHlwZX0iCisgICAgICAgICAgICBpbgorICAgICAgICAgICAgICAgY291bnRlcikgc2V0VmFyaWFibGUgIiR7dmFyaWFibGV9IiAkKCgke3ZhcmlhYmxlfSArIDEpKTs7CisgICAgICAgICAgICAgICBmbGFnKSBzZXRWYXJpYWJsZSAiJHt2YXJpYWJsZX0iIHRydWU7OworICAgICAgICAgICAgICAgbGlzdCkgc2V0VmFyaWFibGUgIiR7dmFyaWFibGV9IiAiJChnZXRWYXJpYWJsZSAiJHt2YXJpYWJsZX0iKSAkKHN0cmluZ1F1b3RlZCAiJHtPUFRBUkd9IikiOzsKKyAgICAgICAgICAgICAgIHN0cmluZykgc2V0VmFyaWFibGUgIiR7dmFyaWFibGV9IiAiJHtPUFRBUkd9Ijs7CisgICAgICAgICAgICAgICAqKSBpbnRlcm5hbEVycm9yICJ1bmltcGxlbWVudGVkIHByb2dyYW0gb3B0aW9uIHR5cGU6ICR7dHlwZX0gKC0ke2xldHRlcn0pIjs7CisgICAgICAgICAgICBlc2FjCisgICAgICAgICAgICA7OworICAgICAgZXNhYworICAgZG9uZQorfQorCitwYXJzZVByb2dyYW1Bcmd1bWVudHMoKSB7CisgICBbICIke3Byb2dyYW1QYXJhbWV0ZXJDb3VudE1pbmltdW19IiAtZ2UgMCBdIHx8IHByb2dyYW1QYXJhbWV0ZXJDb3VudE1pbmltdW09IiR7cHJvZ3JhbVBhcmFtZXRlckNvdW50fSIKKworICAgcGFyc2VQcm9ncmFtT3B0aW9ucyAiJHtAfSIKKyAgIHNoaWZ0ICQoKE9QVElORCAtIDEpKQorCisgICBpZiAiJHtwcm9ncmFtT3B0aW9uX3Nob3dVc2FnZVN1bW1hcnl9IgorICAgdGhlbgorICAgICAgc2hvd1Byb2dyYW1Vc2FnZVN1bW1hcnkKKyAgICAgIGV4aXQgMAorICAgZmkKKworICAgbG9jYWwgcHJvZ3JhbVBhcmFtZXRlckluZGV4PTAKKyAgIHdoaWxlIFsgIiR7I30iIC1ndCAwIF0KKyAgIGRvCisgICAgICBbICIke3Byb2dyYW1QYXJhbWV0ZXJJbmRleH0iIC1sdCAiJHtwcm9ncmFtUGFyYW1ldGVyQ291bnR9IiBdIHx8IGJyZWFrCisgICAgICBzZXRWYXJpYWJsZSAiJChnZXRWYXJpYWJsZSAicHJvZ3JhbVBhcmFtZXRlclZhcmlhYmxlXyR7cHJvZ3JhbVBhcmFtZXRlckluZGV4fSIpIiAiJHsxfSIKKyAgICAgIHNoaWZ0IDEKKyAgICAgIHByb2dyYW1QYXJhbWV0ZXJJbmRleD0kKChwcm9ncmFtUGFyYW1ldGVySW5kZXggKyAxKSkKKyAgIGRvbmUKKworICAgWyAiJHtwcm9ncmFtUGFyYW1ldGVySW5kZXh9IiAtZ2UgIiR7cHJvZ3JhbVBhcmFtZXRlckNvdW50TWluaW11bX0iIF0gfHwgeworICAgICAgc3ludGF4RXJyb3IgIiQoZ2V0VmFyaWFibGUgInByb2dyYW1QYXJhbWV0ZXJMYWJlbF8ke3Byb2dyYW1QYXJhbWV0ZXJJbmRleH0iKSBub3Qgc3BlY2lmaWVkIgorICAgfQorCisgICByZWFkb25seSBwcm9ncmFtTG9nTGV2ZWw9JCgocHJvZ3JhbUxvZ0xldmVsICsgcHJvZ3JhbU9wdGlvbl92ZXJib3NlQ291bnQgLSBwcm9ncmFtT3B0aW9uX3F1aWV0Q291bnQpKQorICAgcHJvY2Vzc0V4dHJhUHJvZ3JhbVBhcmFtZXRlcnMgIiR7QH0iCit9CisKK2hhbmRsZUluaXRpYWxIZWxwT3B0aW9uKCkgeworICAgaWYgWyAiJHsjfSIgLWd0IDAgXQorICAgdGhlbgorICAgICAgaWYgWyAiJHsxfSIgPSAiLWgiIF0KKyAgICAgIHRoZW4KKyAgICAgICAgIGFkZFByb2dyYW1Vc2FnZVRleHQgIiQoY2F0KSIKKyAgICAgICAgIHdyaXRlUHJvZ3JhbVVzYWdlTGluZXMKKyAgICAgICAgIGV4aXQgMAorICAgICAgZmkKKyAgIGZpCit9CisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIFRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zIGFyZSBzdHVicyB0aGF0IG1heSBiZSBjb3BpZWQgaW50byB0aGUgICAgIworIyBtYWluIHNjcmlwdCBhbmQgYXVnbWVudGVkLiBUaGV5IG5lZWQgdG8gYmUgZGVmaW5lZCBhZnRlciB0aGlzICAgICMKKyMgcHJvbG9ndWUgaXMgZW1iZWRlZCBhbmQgYmVmb3JlIHRoZSBwcm9ncmFtIGFyZ3VtZW50cyBhcmUgcGFyc2VkLiAjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitzaG93UHJvZ3JhbVVzYWdlUHVycG9zZSgpIHsKK2NhdCA8PEVORF9PRl9QUk9HUkFNX1VTQUdFX1BVUlBPU0UKK0VORF9PRl9QUk9HUkFNX1VTQUdFX1BVUlBPU0UKK30KKworc2hvd1Byb2dyYW1Vc2FnZU5vdGVzKCkgeworY2F0IDw8RU5EX09GX1BST0dSQU1fVVNBR0VfTk9URVMKK0VORF9PRl9QUk9HUkFNX1VTQUdFX05PVEVTCit9CisKK3Byb2Nlc3NFeHRyYVByb2dyYW1QYXJhbWV0ZXJzKCkgeworICAgWyAiJHsjfSIgLWVxIDAgXSB8fCB0b29NYW55UHJvZ3JhbVBhcmFtZXRlcnMKK30KKwpkaWZmIC0tZ2l0IGEvYnJsdHR5LXByb2xvZ3VlLnRjbCBiL2JybHR0eS1wcm9sb2d1ZS50Y2wKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjBkM2FkMwotLS0gL2Rldi9udWxsCisrKyBiL2JybHR0eS1wcm9sb2d1ZS50Y2wKQEAgLTAsMCArMSw2OTggQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyMgICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisjCisjIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyMKKyMgQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitzZXQgaW5pdGlhbERpcmVjdG9yeSBbcHdkXQorc2V0IHNjcmlwdERpcmVjdG9yeSBbZmlsZSBub3JtYWxpemUgW2ZpbGUgZGlybmFtZSAkOjphcmd2MF1dCitzZXQgcHJvbG9ndWVEaXJlY3RvcnkgW2ZpbGUgbm9ybWFsaXplIFtmaWxlIGRpcm5hbWUgW2luZm8gc2NyaXB0XV1dCisKK3RyeSB7CisgICBwYWNrYWdlIHJlcXVpcmUgVGNseAorfSB0cmFwIHtUQ0wgUEFDS0FHRSBVTkZPVU5EfSB7fSB7CisgICBwcm9jIGludGVyc2VjdDMge2xpc3QxIGxpc3QyfSB7CisgICAgICBmb3JlYWNoIG51bWJlciB7MSAyfSB7CisgICAgICAgICBzZXQgbGVuZ3RoJG51bWJlciBbbGxlbmd0aCBbc2V0IGxpc3QkbnVtYmVyIFtsc29ydCBbc2V0IGxpc3QkbnVtYmVyXV1dXQorICAgICAgICAgc2V0IGluZGV4JG51bWJlciAwCisgICAgICAgICBzZXQgb25seSRudW1iZXIgW2xpc3RdCisgICAgICB9CisgICAgICBzZXQgYm90aCBbbGlzdF0KKworICAgICAgd2hpbGUgezF9IHsKKyAgICAgICAgIGlmIHskaW5kZXgxID09ICRsZW5ndGgxfSB7CisgICAgICAgICAgICBpZiB7JGluZGV4MiA8ICRsZW5ndGgyfSB7CisgICAgICAgICAgICAgICBsdmFyY2F0IG9ubHkyIFtscmFuZ2UgJGxpc3QyICRpbmRleDIgZW5kXQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBicmVhaworICAgICAgICAgfQorCisgICAgICAgICBpZiB7JGluZGV4MiA9PSAkbGVuZ3RoMn0geworICAgICAgICAgICAgbHZhcmNhdCBvbmx5MSBbbHJhbmdlICRsaXN0MSAkaW5kZXgxIGVuZF0KKyAgICAgICAgICAgIGJyZWFrCisgICAgICAgICB9CisKKyAgICAgICAgIHN3aXRjaCAtZXhhY3QgLS0gW3N0cmluZyBjb21wYXJlIFtsaW5kZXggJGxpc3QxICRpbmRleDFdIFtsaW5kZXggJGxpc3QyICRpbmRleDJdXSB7CisgICAgICAgICAgIC0xIHsKKyAgICAgICAgICAgICAgIGxhcHBlbmQgb25seTEgW2xpbmRleCAkbGlzdDEgJGluZGV4MV0KKyAgICAgICAgICAgICAgIGluY3IgaW5kZXgxCisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIDEgeworICAgICAgICAgICAgICAgbGFwcGVuZCBvbmx5MiBbbGluZGV4ICRsaXN0MiAkaW5kZXgyXQorICAgICAgICAgICAgICAgaW5jciBpbmRleDIKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgMCB7CisgICAgICAgICAgICAgICBsYXBwZW5kIGJvdGggW2xpbmRleCAkbGlzdDEgJGluZGV4MV0KKyAgICAgICAgICAgICAgIGluY3IgaW5kZXgxCisgICAgICAgICAgICAgICBpbmNyIGluZGV4MgorICAgICAgICAgICAgfQorICAgICAgICAgfQorICAgICAgfQorCisgICAgICByZXR1cm4gW2xpc3QgJG9ubHkxICRib3RoICRvbmx5Ml0KKyAgIH0KKworICAgcHJvYyBsY29udGFpbiB7bGlzdCBlbGVtZW50fSB7CisgICAgICByZXR1cm4gW2V4cHIge1tsc2VhcmNoIC1leGFjdCAkbGlzdCAkZWxlbWVudF0gPj0gMH1dCisgICB9CisKKyAgIHByb2MgbGVtcHR5IHtsaXN0fSB7CisgICAgICByZXR1cm4gW2V4cHIge1tsbGVuZ3RoICRsaXN0XSA9PSAwfV0KKyAgIH0KKworICAgcHJvYyBscm1kdXBzIHtsaXN0fSB7CisgICAgICByZXR1cm4gW2xzb3J0IC11bmlxdWUgJGxpc3RdCisgICB9CisKKyAgIHByb2MgbHZhcmNhdCB7bGlzdFZhcmlhYmxlIGZpcnN0IGFyZ3N9IHsKKyAgICAgIHVwdmFyIDEgJGxpc3RWYXJpYWJsZSBsaXN0CisgICAgICBldmFsIGxhcHBlbmQgbGlzdCAkZmlyc3QKKworICAgICAgZm9yZWFjaCBhcmcgJGFyZ3MgeworICAgICAgICAgZXZhbCBsYXBwZW5kIGxpc3QgJGFyZworICAgICAgfQorCisgICAgICByZXR1cm4gJGxpc3QKKyAgIH0KKworICAgcHJvYyBsdmFycG9wIHtsaXN0VmFyaWFibGUge2luZGV4IDB9fSB7CisgICAgICB1cHZhciAxICRsaXN0VmFyaWFibGUgbGlzdAorICAgICAgc2V0IHJlc3VsdCBbbGluZGV4ICRsaXN0ICRpbmRleF0KKyAgICAgIHNldCBsaXN0IFtscmVwbGFjZSAkbGlzdCAkaW5kZXggJGluZGV4XQorICAgICAgcmV0dXJuICRyZXN1bHQKKyAgIH0KKworICAgcHJvYyBsdmFycHVzaCB7bGlzdFZhcmlhYmxlIHN0cmluZyB7aW5kZXggMH19IHsKKyAgICAgIHVwdmFyIDEgJGxpc3RWYXJpYWJsZSBsaXN0CisgICAgICBzZXQgbGlzdCBbbGluc2VydCAkbGlzdCAkaW5kZXggJHN0cmluZ10KKyAgICAgIHJldHVybiAiIgorICAgfQorCisgICBpZiB7W3BhY2thZ2UgdmNvbXBhcmUgJHRjbF92ZXJzaW9uIDguNF0gPCAwfSB7CisgICAgICBwcm9jIHJlYWRkaXIge2RpcmVjdG9yeX0geworICAgICAgICAgc2V0IHdvcmtpbmdEaXJlY3RvcnkgW3B3ZF0KKyAgICAgICAgIGNkICRkaXJlY3RvcnkKKyAgICAgICAgIHNldCBuYW1lcyBbZ2xvYiAtbm9jb21wbGFpbiAqXQorICAgICAgICAgY2QgJHdvcmtpbmdEaXJlY3RvcnkKKyAgICAgICAgIHJldHVybiAkbmFtZXMKKyAgICAgIH0KKyAgIH0gZWxzZSB7CisgICAgICBwcm9jIHJlYWRkaXIge2RpcmVjdG9yeX0geworICAgICAgICAgcmV0dXJuIFtnbG9iIC1kaXJlY3RvcnkgJGRpcmVjdG9yeSAtdGFpbHMgLW5vY29tcGxhaW4gKl0KKyAgICAgIH0KKyAgIH0KK30KKworcHJvYyBtYWtlRW51bWVyYXRpb24ge2FycmF5VmFyaWFibGUgZWxlbWVudHN9IHsKKyAgIHVwdmFyIDEgJGFycmF5VmFyaWFibGUgYXJyYXkKKyAgIHNldCB2YWx1ZSAwCisKKyAgIGZvcmVhY2ggZWxlbWVudCAkZWxlbWVudHMgeworICAgICAgc2V0IGFycmF5KCRlbGVtZW50KSAkdmFsdWUKKyAgICAgIGluY3IgdmFsdWUKKyAgIH0KK30KKworcHJvYyBnZXRQcm9ncmFtTmFtZSB7fSB7CisgICByZXR1cm4gW2ZpbGUgdGFpbCBbaW5mbyBzY3JpcHRdXQorfQorCitwcm9jIHdyaXRlUHJvZ3JhbU1lc3NhZ2Uge21lc3NhZ2V9IHsKKyAgIGlmIHtbc3RyaW5nIGxlbmd0aCAkbWVzc2FnZV0gPiAwfSB7CisgICAgICBzZXQgc3RyZWFtIHN0ZGVycgorICAgICAgcHV0cyAkc3RyZWFtICJbZ2V0UHJvZ3JhbU5hbWVdOiAkbWVzc2FnZSIKKyAgICAgIGZsdXNoICRzdHJlYW0KKyAgIH0KK30KKworbWFrZUVudW1lcmF0aW9uIGxvZ0xldmVscyB7ZXJyb3Igd2FybmluZyBub3RpY2UgdGFzayBub3RlIGRldGFpbH0KK3NldCBsb2dMZXZlbCAkbG9nTGV2ZWxzKHRhc2spCisKK3Byb2MgbG9nTWVzc2FnZSB7bGV2ZWwgbWVzc2FnZX0geworICAgZ2xvYmFsIGxvZ0xldmVscyBsb2dMZXZlbAorCisgICBpZiB7JGxvZ0xldmVscygkbGV2ZWwpIDw9ICRsb2dMZXZlbH0geworICAgICAgd3JpdGVQcm9ncmFtTWVzc2FnZSAkbWVzc2FnZQorICAgfQorfQorCitwcm9jIGxvZ0Vycm9yIHt7bWVzc2FnZSAiIn19IHsKKyAgIGxvZ01lc3NhZ2UgZXJyb3IgJG1lc3NhZ2UKK30KKworcHJvYyBsb2dXYXJuaW5nIHt7bWVzc2FnZSAiIn19IHsKKyAgIGxvZ01lc3NhZ2Ugd2FybmluZyAkbWVzc2FnZQorfQorCitwcm9jIGxvZ05vdGUge3ttZXNzYWdlICIifX0geworICAgbG9nTWVzc2FnZSBub3RlICRtZXNzYWdlCit9CisKK3Byb2MgbG9nRGV0YWlsIHt7bWVzc2FnZSAiIn19IHsKKyAgIGxvZ01lc3NhZ2UgZGV0YWlsICRtZXNzYWdlCit9CisKK3Byb2Mgc3ludGF4RXJyb3Ige3ttZXNzYWdlICIifX0geworICAgbG9nRXJyb3IgJG1lc3NhZ2UKKyAgIGV4aXQgMgorfQorCitwcm9jIHNlbWFudGljRXJyb3Ige3ttZXNzYWdlICIifX0geworICAgbG9nRXJyb3IgJG1lc3NhZ2UKKyAgIGV4aXQgMworfQorCitwcm9jIHRvUmVsYXRpdmVQYXRoIHt0byB7ZnJvbSAufX0geworICAgc2V0IHZhcmlhYmxlcyB7ZnJvbSB0b30KKworICAgZm9yZWFjaCB2YXJpYWJsZSAkdmFyaWFibGVzIHsKKyAgICAgIHNldCAkdmFyaWFibGUgW2ZpbGUgc3BsaXQgW2ZpbGUgbm9ybWFsaXplIFtzZXQgJHZhcmlhYmxlXV1dCisgICB9CisKKyAgIHNldCBjb3VudCBbZXhwciB7bWluKFtsbGVuZ3RoICRmcm9tXSwgW2xsZW5ndGggJHRvXSl9XQorCisgICB3aGlsZSB7JGNvdW50ID4gMH0geworICAgICAgaWYgeyFbc3RyaW5nIGVxdWFsIFtsaW5kZXggJGZyb20gMF0gW2xpbmRleCAkdG8gMF1dfSB7CisgICAgICAgICBicmVhaworICAgICAgfQorCisgICAgICBmb3JlYWNoIHZhcmlhYmxlICR2YXJpYWJsZXMgeworICAgICAgICAgbHZhcnBvcCAkdmFyaWFibGUKKyAgICAgIH0KKworICAgICAgaW5jciBjb3VudCAtMQorICAgfQorCisgICBpZiB7W2xsZW5ndGggW3NldCB0byBbY29uY2F0IFtscmVwZWF0IFtsbGVuZ3RoICRmcm9tXSAuLl0gJHRvXV1dID09IDB9IHsKKyAgICAgIHNldCB0byB7Ln0KKyAgIH0KKworICAgcmV0dXJuIFtldmFsIGZpbGUgam9pbiAkdG9dCit9CisKK3Byb2MgdGVzdENvbnRhaW5pbmdEaXJlY3Rvcnkge2RpcmVjdG9yeSBuYW1lc30geworICAgZm9yZWFjaCBuYW1lICRuYW1lcyB7CisgICAgICBpZiB7IVtmaWxlIGV4aXN0cyBbZmlsZSBqb2luICRkaXJlY3RvcnkgJG5hbWVdXX0geworICAgICAgICAgcmV0dXJuIDAKKyAgICAgIH0KKyAgIH0KKworICAgcmV0dXJuIDEKK30KKworcHJvYyBmaW5kQ29udGFpbmluZ0RpcmVjdG9yeSB7dmFyaWFibGUgZGlyZWN0b3J5IG5hbWVzfSB7CisgICBpZiB7W2luZm8gZXhpc3RzICR2YXJpYWJsZV19IHsKKyAgICAgIGlmIHtbc3RyaW5nIGxlbmd0aCBbc2V0ICR2YXJpYWJsZV1dID4gMH0geworICAgICAgICAgcmV0dXJuIDEKKyAgICAgIH0KKyAgIH0KKworICAgc2V0IGRpcmVjdG9yeSBbZmlsZSBub3JtYWxpemUgJGRpcmVjdG9yeV0KKworICAgd2hpbGUgezF9IHsKKyAgICAgIGlmIHtbdGVzdENvbnRhaW5pbmdEaXJlY3RvcnkgJGRpcmVjdG9yeSAkbmFtZXNdfSB7CisgICAgICAgICBicmVhaworICAgICAgfQorCisgICAgICBpZiB7W3N0cmluZyBlcXVhbCBbc2V0IHBhcmVudCBbZmlsZSBkaXJuYW1lICRkaXJlY3RvcnldXSAkZGlyZWN0b3J5XX0geworICAgICAgICAgcmV0dXJuIDAKKyAgICAgIH0KKworICAgICAgc2V0IGRpcmVjdG9yeSAkcGFyZW50CisgICB9CisKKyAgIHNldCAkdmFyaWFibGUgJGRpcmVjdG9yeQorICAgcmV0dXJuIDEKK30KKworcHJvYyB3aXRoQ2hhbm5lbCB7dmFyaWFibGUgY2hhbm5lbCBib2R5fSB7CisgICB1cGxldmVsIDEgW2xpc3Qgc2V0ICR2YXJpYWJsZSAkY2hhbm5lbF0KKworICAgdHJ5IHsKKyAgICAgIHRyeSB7CisgICAgICAgICB1cGxldmVsIDEgJGJvZHkKKyAgICAgIH0gb24gcmV0dXJuIHtyZXN1bHR9IHsKKyAgICAgICAgIHJldHVybiAtbGV2ZWwgMiAkcmVzdWx0CisgICAgICB9CisgICB9IGZpbmFsbHkgeworICAgICAgY2xvc2UgJGNoYW5uZWwKKyAgICAgIHVwbGV2ZWwgMSBbbGlzdCB1bnNldCAkdmFyaWFibGVdCisgICB9Cit9CisKK3Byb2MgcmVhZEZpbGUge2ZpbGV9IHsKKyAgIHdpdGhDaGFubmVsIGNoYW5uZWwgW29wZW4gJGZpbGUge1JET05MWX1dIHsKKyAgICAgIHJldHVybiBbcmVhZCAkY2hhbm5lbF0KKyAgIH0KK30KKworcHJvYyB3cml0ZUZpbGUge2ZpbGUgZGF0YX0geworICAgd2l0aENoYW5uZWwgY2hhbm5lbCBbb3BlbiAkZmlsZSB7V1JPTkxZIENSRUFUIFRSVU5DfV0geworICAgICAgcHV0cyAtbm9uZXdsaW5lICRjaGFubmVsICRkYXRhCisgICB9Cit9CisKK3Byb2MgcmVwbGFjZUZpbGUge2ZpbGUgZGF0YX0geworICAgc2V0IGNvbXBvbmVudHMgW2ZpbGUgc3BsaXQgJGZpbGVdCisKKyAgIGlmIHtbbGxlbmd0aCAkY29tcG9uZW50c10gPT0gMH0geworICAgICAgcmV0dXJuIC1jb2RlIGVycm9yICJmaWxlIGFyZ3VtZW50IGlzIGVtcHR5IgorICAgfQorCisgICBzZXQgbmFtZSAiLltsaW5kZXggJGNvbXBvbmVudHMgZW5kXSIKKyAgIHNldCBwYXRoICJbZXZhbCBmaWxlIGpvaW4gW2xyZXBsYWNlICRjb21wb25lbnRzIGVuZCBlbmRdICRuYW1lXSIKKworICAgc2V0IG9sZEZpbGUgIiRwYXRoLm9sZCIKKyAgIHNldCBuZXdGaWxlICIkcGF0aC5uZXciCisKKyAgIGZpbGUgZGVsZXRlICRuZXdGaWxlCisgICB3cml0ZUZpbGUgJG5ld0ZpbGUgJGRhdGEKKworICAgaWYge1tmaWxlIGV4aXN0cyAkZmlsZV19IHsKKyAgICAgIGZpbGUgZGVsZXRlICRvbGRGaWxlCisgICAgICBmaWxlIHJlbmFtZSAkZmlsZSAkb2xkRmlsZQorICAgfQorCisgICBmaWxlIHJlbmFtZSAkbmV3RmlsZSAkZmlsZQorICAgZmlsZSBkZWxldGUgJG9sZEZpbGUKK30KKworcHJvYyB1cGRhdGVGaWxlIHtmaWxlIGRhdGEge2luVGVzdE1vZGUgMH19IHsKKyAgIGlmIHshW2ZpbGUgZXhpc3RzICRmaWxlXX0geworICAgICAgaWYgeyRpblRlc3RNb2RlfSB7CisgICAgICAgICBsb2dNZXNzYWdlIG5vdGljZSAidGVzdCBtb2RlIC0gZmlsZSBub3QgY3JlYXRlZDogJGZpbGUiCisgICAgICB9IGVsc2UgeworICAgICAgICAgbG9nTWVzc2FnZSBub3RpY2UgImNyZWF0aW5nIGZpbGU6ICRmaWxlIgorICAgICAgICAgd3JpdGVGaWxlICRmaWxlICRkYXRhCisgICAgICB9CisgICB9IGVsc2VpZiB7IVtzdHJpbmcgZXF1YWwgJGRhdGEgW3JlYWRGaWxlICRmaWxlXV19IHsKKyAgICAgIGlmIHskaW5UZXN0TW9kZX0geworICAgICAgICAgbG9nTWVzc2FnZSBub3RpY2UgInRlc3QgbW9kZSAtIGZpbGUgbm90IHVwZGF0ZWQ6ICRmaWxlIgorICAgICAgfSBlbHNlIHsKKyAgICAgICAgIGxvZ01lc3NhZ2Ugbm90aWNlICJ1cGRhdGluZyBmaWxlOiAkZmlsZSIKKyAgICAgICAgIHJlcGxhY2VGaWxlICRmaWxlICRkYXRhCisgICAgICB9CisgICB9IGVsc2UgeworICAgICAgcmV0dXJuIDAKKyAgIH0KKworICAgcmV0dXJuIDEKK30KKworcHJvYyBmb3JFYWNoTGluZSB7bGluZVZhcmlhYmxlIGZpbGUgYm9keX0geworICAgdXB2YXIgMSAkbGluZVZhcmlhYmxlIGxpbmUKKworICAgdHJ5IHsKKyAgICAgIHdpdGhDaGFubmVsIGNoYW5uZWwgW29wZW4gJGZpbGUge1JET05MWX1dIHsKKyAgICAgICAgIHdoaWxlIHtbZ2V0cyAkY2hhbm5lbCBsaW5lXSA+PSAwfSB7CisgICAgICAgICAgICB1cGxldmVsIDEgJGJvZHkKKyAgICAgICAgIH0KKyAgICAgIH0KKyAgIH0gb24gcmV0dXJuIHtyZXN1bHR9IHsKKyAgICAgIHJldHVybiAtbGV2ZWwgMiAkcmVzdWx0CisgICB9Cit9CisKK3Byb2MgcmVhZExpbmVzIHtmaWxlfSB7CisgICBzZXQgbGluZXMgW2xpc3RdCisKKyAgIGZvckVhY2hMaW5lIGxpbmUgJGZpbGUgeworICAgICAgbGFwcGVuZCBsaW5lcyAkbGluZQorICAgfQorCisgICByZXR1cm4gJGxpbmVzCit9CisKK3Byb2MgaXNXaGl0ZXNwYWNlIHtzdHJpbmd9IHsKKyAgIHJldHVybiBbc3RyaW5nIGlzIHNwYWNlICRzdHJpbmddCit9CisKK3Byb2Mgd3JhcExpbmUge2xpbmUgd2lkdGh9IHsKKyAgIHNldCBsaW5lcyBbbGlzdF0KKworICAgd2hpbGUge1tzZXQgbGVuZ3RoIFtzdHJpbmcgbGVuZ3RoIFtzZXQgbGluZSBbc3RyaW5nIHRyaW1sZWZ0ICRsaW5lXV1dXSA+IDB9IHsKKyAgICAgIGlmIHskd2lkdGggPCAkbGVuZ3RofSB7CisgICAgICAgICBzZXQgaW5kZXggJHdpZHRoCisKKyAgICAgICAgIHdoaWxlIHskaW5kZXggPj0gMH0geworICAgICAgICAgICAgaWYge1tpc1doaXRlc3BhY2UgW3N0cmluZyBpbmRleCAkbGluZSAkaW5kZXhdXX0geworICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaW5jciBpbmRleCAtMQorICAgICAgICAgfQorCisgICAgICAgICBpZiB7JGluZGV4IDwgMH0geworICAgICAgICAgICAgc2V0IGluZGV4ICR3aWR0aAorCisgICAgICAgICAgICB3aGlsZSB7W2luY3IgaW5kZXhdIDwgJGxlbmd0aH0geworICAgICAgICAgICAgICAgaWYge1tpc1doaXRlc3BhY2UgW3N0cmluZyBpbmRleCAkbGluZSAkaW5kZXhdXX0geworICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgIH0KKyAgICAgIH0gZWxzZSB7CisgICAgICAgICBzZXQgaW5kZXggJGxlbmd0aAorICAgICAgfQorCisgICAgICBsYXBwZW5kIGxpbmVzIFtzdHJpbmcgdHJpbXJpZ2h0IFtzdHJpbmcgcmFuZ2UgJGxpbmUgMCAkaW5kZXgtMV1dCisgICAgICBzZXQgbGluZSBbc3RyaW5nIHJhbmdlICRsaW5lICRpbmRleCBlbmRdCisgICB9CisKKyAgIHJldHVybiAkbGluZXMKK30KKworcHJvYyBmb3JtYXRMaW5lcyB7bGluZXMge3dpZHRoIDc5fX0geworICAgc2V0IHJlc3VsdCBbbGlzdF0KKyAgIHNldCBwYXJhZ3JhcGggIiIKKworICAgc2V0IGZpbmlzaFBhcmFncmFwaCB7CisgICAgICBpZiB7W3N0cmluZyBsZW5ndGggJHBhcmFncmFwaF0gPiAwfSB7CisgICAgICAgICBsdmFyY2F0IHJlc3VsdCBbd3JhcExpbmUgJHBhcmFncmFwaCAkd2lkdGhdCisgICAgICAgICBzZXQgcGFyYWdyYXBoICIiCisgICAgICB9CisgICB9CisKKyAgIGZvcmVhY2ggbGluZSAkbGluZXMgeworICAgICAgaWYge1tzZXQgbGVuZ3RoIFtzdHJpbmcgbGVuZ3RoIFtzdHJpbmcgdHJpbXJpZ2h0ICRsaW5lXV1dID4gMH0geworICAgICAgICAgaWYgeyFbc3RyaW5nIGVxdWFsIFtzdHJpbmcgaW5kZXggJGxpbmUgMF0gIiAiXX0geworICAgICAgICAgICAgaWYge1tzdHJpbmcgbGVuZ3RoICRwYXJhZ3JhcGhdID4gMH0geworICAgICAgICAgICAgICAgYXBwZW5kIHBhcmFncmFwaCAiICIKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgYXBwZW5kIHBhcmFncmFwaCAkbGluZQorICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgIH0KKyAgICAgIH0KKworICAgICAgZXZhbCAkZmluaXNoUGFyYWdyYXBoCisgICAgICBsYXBwZW5kIHJlc3VsdCAkbGluZQorICAgfQorCisgICBldmFsICRmaW5pc2hQYXJhZ3JhcGgKKyAgIHJldHVybiBbam9pbiAkcmVzdWx0IFxuXQorfQorCitwcm9jIGZvcm1hdENvbHVtbnMge3Jvd3N9IHsKKyAgIHNldCBzcGFjZXIgW3N0cmluZyByZXBlYXQgIiAiIDJdCisgICBzZXQgbGluZXMgW2xpc3RdCisKKyAgIGZvcmVhY2ggcm93ICRyb3dzIHsKKyAgICAgIHNldCBpbmRleCAwCisKKyAgICAgIGZvcmVhY2ggY2VsbCAkcm93IHsKKyAgICAgICAgIGlmIHshW2luZm8gZXhpc3RzIHdpZHRocygkaW5kZXgpXX0geworICAgICAgICAgICAgc2V0IHdpZHRocygkaW5kZXgpIDAKKyAgICAgICAgIH0KKworICAgICAgICAgc2V0IHdpZHRocygkaW5kZXgpIFttYXggJHdpZHRocygkaW5kZXgpIFtzdHJpbmcgbGVuZ3RoICRjZWxsXV0KKyAgICAgICAgIGluY3IgaW5kZXgKKyAgICAgIH0KKyAgIH0KKworICAgZm9yZWFjaCByb3cgJHJvd3MgeworICAgICAgc2V0IGxpbmUgIiIKKyAgICAgIHNldCBpbmRleCAwCisKKyAgICAgIGZvcmVhY2ggY2VsbCAkcm93IHsKKyAgICAgICAgIGlmIHtbc2V0IHdpZHRoICR3aWR0aHMoJGluZGV4KV0gPiAwfSB7CisgICAgICAgICAgICBhcHBlbmQgbGluZSAkY2VsbAorICAgICAgICAgICAgYXBwZW5kIGxpbmUgW3N0cmluZyByZXBlYXQgIiAiIFtleHByIHskd2lkdGggLSBbc3RyaW5nIGxlbmd0aCAkY2VsbF19XV0KKyAgICAgICAgICAgIGFwcGVuZCBsaW5lICRzcGFjZXIKKyAgICAgICAgIH0KKworICAgICAgICAgaW5jciBpbmRleAorICAgICAgfQorCisgICAgICBpZiB7W3N0cmluZyBsZW5ndGggW3NldCBsaW5lIFtzdHJpbmcgdHJpbXJpZ2h0ICRsaW5lXV1dID4gMH0geworICAgICAgICAgaWYge1tzdHJpbmcgbGVuZ3RoICRsaW5lc10gPiAwfSB7CisgICAgICAgICAgICBhcHBlbmQgbGluZXMgIlxuIgorICAgICAgICAgfQorCisgICAgICAgICBhcHBlbmQgbGluZXMgJGxpbmUKKyAgICAgIH0KKyAgIH0KKworICAgcmV0dXJuICRsaW5lcworfQorCitwcm9jIGZvcm1hdENob2ljZXNQaHJhc2Uge2Nob2ljZXN9IHsKKyAgIHNldCBzZXBhcmF0b3IgIiAiCisKKyAgIGlmIHtbc2V0IGNvdW50IFtsbGVuZ3RoICRjaG9pY2VzXV0gPiAyfSB7CisgICAgICBzZXQgc2VwYXJhdG9yICIsJHNlcGFyYXRvciIKKyAgIH0KKworICAgaWYgeyRjb3VudCA+IDF9IHsKKyAgICAgIGxhcHBlbmQgY2hvaWNlcyAib3IgW2x2YXJwb3AgY2hvaWNlcyBlbmRdIgorICAgfQorCisgICByZXR1cm4gW2pvaW4gJGNob2ljZXMgJHNlcGFyYXRvcl0KK30KKworcHJvYyBuZXh0RWxlbWVudCB7bGlzdFZhcmlhYmxlIHtlbGVtZW50VmFyaWFibGUgIiJ9fSB7CisgICB1cHZhciAxICRsaXN0VmFyaWFibGUgbGlzdAorCisgICBpZiB7W2xsZW5ndGggJGxpc3RdID09IDB9IHsKKyAgICAgIHJldHVybiAwCisgICB9CisKKyAgIGlmIHtbc3RyaW5nIGxlbmd0aCAkZWxlbWVudFZhcmlhYmxlXSA+IDB9IHsKKyAgICAgIHVwbGV2ZWwgMSBbbGlzdCBzZXQgJGVsZW1lbnRWYXJpYWJsZSBbbGluZGV4ICRsaXN0IDBdXQorICAgICAgc2V0IGxpc3QgW2xyZXBsYWNlICRsaXN0IDAgMF0KKyAgIH0KKworICAgcmV0dXJuIDEKK30KKworcHJvYyBwcm9jZXNzQ29tbWFuZE9wdGlvbnMge3ZhbHVlc0FycmF5IGFyZ3VtZW50c1ZhcmlhYmxlIGRlZmluaXRpb25zIHtvcHRpb25zVmFyaWFibGUgIiJ9fSB7CisgICB1cHZhciAxICR2YWx1ZXNBcnJheSB2YWx1ZXMKKyAgIHVwdmFyIDEgJGFyZ3VtZW50c1ZhcmlhYmxlIGFyZ3VtZW50cworCisgICBzZXQgcHJlZml4IC0KKyAgIHNldCBvcHRpb25zIFtkaWN0IGNyZWF0ZV0KKyAgIHNldCBvcHRpb25JbmRleCAwCisKKyAgIGZvcmVhY2ggZGVmaW5pdGlvbiAkZGVmaW5pdGlvbnMgeworICAgICAgc2V0IGRlc2NyaXB0aW9uICJvcHRpb25cWyRvcHRpb25JbmRleFxdIgorCisgICAgICBpZiB7IVtuZXh0RWxlbWVudCBkZWZpbml0aW9uIG5hbWVdfSB7CisgICAgICAgICByZXR1cm4gLWNvZGUgZXJyb3IgIm5hbWUgbm90IHNwZWNpZmllZCBmb3IgJGRlc2NyaXB0aW9uIgorICAgICAgfQorCisgICAgICBpZiB7W2RpY3QgZXhpc3RzICRvcHRpb25zICRuYW1lXX0geworICAgICAgICAgcmV0dXJuIC1jb2RlIGVycm9yICJkdXBsaWNhdGUgbmFtZSBmb3IgJGRlc2NyaXB0aW9uOiAkbmFtZSIKKyAgICAgIH0KKworICAgICAgaWYgeyFbbmV4dEVsZW1lbnQgZGVmaW5pdGlvbiB0eXBlXX0geworICAgICAgICAgcmV0dXJuIC1jb2RlIGVycm9yICJ0eXBlIG5vdCBzcGVjaWZpZWQgZm9yICRkZXNjcmlwdGlvbiIKKyAgICAgIH0KKworICAgICAgaWYge1tsY29udGFpbiB7Y291bnRlciBmbGFnIHRvZ2dsZX0gJHR5cGVdfSB7CisgICAgICAgICBzZXQgdmFsdWVzKCRuYW1lKSAwCisgICAgICB9IGVsc2UgeworICAgICAgICAgaWYge1tzZXQgaW5kZXggW3N0cmluZyBmaXJzdCAuICR0eXBlXV0gPCAwfSB7CisgICAgICAgICAgICBzZXQgb3BlcmFuZCAkdHlwZQorICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHNldCBvcGVyYW5kIFtzdHJpbmcgcmFuZ2UgJHR5cGUgJGluZGV4KzEgZW5kXQorICAgICAgICAgICAgc2V0IHR5cGUgW3N0cmluZyByYW5nZSAkdHlwZSAwICRpbmRleC0xXQorICAgICAgICAgfQorCisgICAgICAgICBpZiB7IVtzdHJpbmcgZXF1YWwgJHR5cGUgdW50eXBlZF19IHsKKyAgICAgICAgICAgIGlmIHtbY2F0Y2ggW2xpc3Qgc3RyaW5nIGlzICR0eXBlICIiXV0gIT0gMH0geworICAgICAgICAgICAgICAgcmV0dXJuIC1jb2RlIGVycm9yICJpbnZhbGlkIHR5cGUgZm9yICRkZXNjcmlwdGlvbjogJHR5cGUiCisgICAgICAgICAgICB9CisgICAgICAgICB9CisKKyAgICAgICAgIGRpY3Qgc2V0IG9wdGlvbnMgJG5hbWUgb3BlcmFuZCAkb3BlcmFuZAorICAgICAgfQorCisgICAgICBkaWN0IHNldCBvcHRpb25zICRuYW1lIHR5cGUgJHR5cGUKKworICAgICAgaWYge1tuZXh0RWxlbWVudCBkZWZpbml0aW9uIHVzYWdlXX0geworICAgICAgICAgZGljdCBzZXQgb3B0aW9ucyAkbmFtZSB1c2FnZSAkdXNhZ2UKKyAgICAgIH0KKworICAgICAgaW5jciBvcHRpb25JbmRleAorICAgfQorCisgICBpZiB7W3N0cmluZyBsZW5ndGggJG9wdGlvbnNWYXJpYWJsZV0gPiAwfSB7CisgICAgICB1cGxldmVsIDEgW2xpc3Qgc2V0ICRvcHRpb25zVmFyaWFibGUgJG9wdGlvbnNdCisgICB9CisKKyAgIHdoaWxlIHtbbGxlbmd0aCAkYXJndW1lbnRzXSA+IDB9IHsKKyAgICAgIGlmIHtbc3RyaW5nIGxlbmd0aCBbc2V0IGFyZ3VtZW50IFtsaW5kZXggJGFyZ3VtZW50cyAwXV1dID09IDB9IHsKKyAgICAgICAgIGJyZWFrCisgICAgICB9CisKKyAgICAgIGlmIHshW3N0cmluZyBlcXVhbCBbc3RyaW5nIGluZGV4ICRhcmd1bWVudCAwXSAkcHJlZml4XX0geworICAgICAgICAgYnJlYWsKKyAgICAgIH0KKworICAgICAgc2V0IGFyZ3VtZW50cyBbbHJlcGxhY2UgJGFyZ3VtZW50cyAwIDBdCisKKyAgICAgIGlmIHtbc3RyaW5nIGVxdWFsICRhcmd1bWVudCAkcHJlZml4XX0geworICAgICAgICAgYnJlYWsKKyAgICAgIH0KKworICAgICAgaWYge1tzdHJpbmcgZXF1YWwgW3NldCBuYW1lIFtzdHJpbmcgcmFuZ2UgJGFyZ3VtZW50IDEgZW5kXV0gJHByZWZpeF19IHsKKyAgICAgICAgIGJyZWFrCisgICAgICB9CisKKyAgICAgIGlmIHtbc2V0IGNvdW50IFtkaWN0IHNpemUgW3NldCBzdWJzZXQgW2RpY3QgZmlsdGVyICRvcHRpb25zIGtleSAkbmFtZSpdXV1dID09IDB9IHsKKyAgICAgICAgIGxvZ0Vycm9yICJ1bmtub3duIG9wdGlvbjogJHByZWZpeCRuYW1lIgorICAgICAgICAgcmV0dXJuIDAKKyAgICAgIH0KKworICAgICAgaWYgeyRjb3VudCA+IDF9IHsKKyAgICAgICAgIGxvZ0Vycm9yICJhbWJpZ3VvdXMgb3B0aW9uOiAkcHJlZml4JG5hbWUgKFtqb2luIFtsc29ydCBbZGljdCBrZXlzICRzdWJzZXRdXSAiLCAiXSkiCisgICAgICAgICByZXR1cm4gMAorICAgICAgfQorCisgICAgICBzZXQgbmFtZSBbbGluZGV4IFtkaWN0IGtleXMgJHN1YnNldF0gMF0KKyAgICAgIHNldCBvcHRpb24gW2RpY3QgZ2V0ICRzdWJzZXQgJG5hbWVdCisKKyAgICAgIHN3aXRjaCAtZXhhY3QgW3NldCB0eXBlIFtkaWN0IGdldCAkb3B0aW9uIHR5cGVdXSB7CisgICAgICAgICBjb3VudGVyIHsKKyAgICAgICAgICAgIHNldCB2YWx1ZSBbZXhwciB7JHZhbHVlcygkbmFtZSkgKyAxfV0KKyAgICAgICAgIH0KKworICAgICAgICAgZmxhZyB7CisgICAgICAgICAgICBzZXQgdmFsdWUgMQorICAgICAgICAgfQorCisgICAgICAgICB0b2dnbGUgeworICAgICAgICAgICAgc2V0IHZhbHVlIFtleHByIHshJHZhbHVlcygkbmFtZSl9XQorICAgICAgICAgfQorCisgICAgICAgICBkZWZhdWx0IHsKKyAgICAgICAgICAgIGlmIHtbbGxlbmd0aCAkYXJndW1lbnRzXSA9PSAwfSB7CisgICAgICAgICAgICAgICBsb2dFcnJvciAibWlzc2luZyBvcGVyYW5kOiAkcHJlZml4JG5hbWUiCisgICAgICAgICAgICAgICByZXR1cm4gMAorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBzZXQgdmFsdWUgW2xpbmRleCAkYXJndW1lbnRzIDBdCisgICAgICAgICAgICBzZXQgYXJndW1lbnRzIFtscmVwbGFjZSAkYXJndW1lbnRzIDAgMF0KKworICAgICAgICAgICAgaWYgeyFbc3RyaW5nIGVxdWFsICR0eXBlIHVudHlwZWRdfSB7CisgICAgICAgICAgICAgICBpZiB7W2NhdGNoIFtsaXN0IHN0cmluZyBpcyAkdHlwZSAtc3RyaWN0ICR2YWx1ZV0gcmVzdWx0XSAhPSAwfSB7CisgICAgICAgICAgICAgICAgICByZXR1cm4gLWNvZGUgZXJyb3IgInVuaW1wbGVtZW50ZWQgb3B0aW9uIHR5cGU6ICR0eXBlIgorICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICBpZiB7ISRyZXN1bHR9IHsKKyAgICAgICAgICAgICAgICAgIGxvZ0Vycm9yICJvcGVyYW5kIG5vdCAkdHlwZTogJHByZWZpeCRuYW1lICR2YWx1ZSIKKyAgICAgICAgICAgICAgICAgIHJldHVybiAwCisgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICB9CisgICAgICB9CisKKyAgICAgIHNldCB2YWx1ZXMoJG5hbWUpICR2YWx1ZQorICAgfQorCisgICByZXR1cm4gMQorfQorCitwcm9jIGZvcm1hdENvbW1hbmRPcHRpb25zVXNhZ2Uge29wdGlvbnN9IHsKKyAgIHNldCByb3dzIFtsaXN0XQorCisgICBmb3JlYWNoIG5hbWUgW2xzb3J0IFtkaWN0IGtleXMgJG9wdGlvbnNdXSB7CisgICAgICBzZXQgb3B0aW9uIFtkaWN0IGdldCAkb3B0aW9ucyAkbmFtZV0KKyAgICAgIHNldCByb3cgW2xpc3RdCisgICAgICBsYXBwZW5kIHJvdyAiLSRuYW1lIgorCisgICAgICBmb3JlYWNoIHByb3BlcnR5IHtvcGVyYW5kIHVzYWdlfSB7CisgICAgICAgICBpZiB7W2RpY3QgZXhpc3RzICRvcHRpb24gJHByb3BlcnR5XX0geworICAgICAgICAgICAgbGFwcGVuZCByb3cgW2RpY3QgZ2V0ICRvcHRpb24gJHByb3BlcnR5XQorICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGxhcHBlbmQgcm93ICIiCisgICAgICAgICB9CisgICAgICB9CisKKyAgICAgIGxhcHBlbmQgcm93cyAkcm93CisgICB9CisKKyAgIHJldHVybiBbZm9ybWF0Q29sdW1ucyAkcm93c10KK30KKworcHJvYyBzaG93Q29tbWFuZFVzYWdlIHtuYW1lIG9wdGlvbnNEZXNjcmlwdG9yIGFyZ3VtZW50c1VzYWdlIGdldEFyZ3VtZW50c1VzYWdlU3VtbWFyeX0geworICAgc2V0IG9wdGlvbnNVc2FnZSBbZm9ybWF0Q29tbWFuZE9wdGlvbnNVc2FnZSAkb3B0aW9uc0Rlc2NyaXB0b3JdCisgICBzZXQgdXNhZ2UgIlN5bnRheDogJG5hbWUiCisKKyAgIGlmIHtbc3RyaW5nIGxlbmd0aCAkb3B0aW9uc1VzYWdlXSA+IDB9IHsKKyAgICAgIGFwcGVuZCB1c2FnZSAiIFxbLW9wdGlvbiAuLi5cXSIKKyAgIH0KKworICAgaWYge1tzdHJpbmcgbGVuZ3RoICRhcmd1bWVudHNVc2FnZV0gPiAwfSB7CisgICAgICBhcHBlbmQgdXNhZ2UgIiAkYXJndW1lbnRzVXNhZ2UiCisgICB9CisKKyAgIGlmIHtbc3RyaW5nIGxlbmd0aCAkZ2V0QXJndW1lbnRzVXNhZ2VTdW1tYXJ5XSA+IDB9IHsKKyAgICAgIGlmIHtbc3RyaW5nIGxlbmd0aCBbc2V0IGxpbmVzIFtmb3JtYXRMaW5lcyBbJGdldEFyZ3VtZW50c1VzYWdlU3VtbWFyeV1dXV0gPiAwfSB7CisgICAgICAgICBhcHBlbmQgdXNhZ2UgXG4KKyAgICAgICAgIGFwcGVuZCB1c2FnZSAkbGluZXMKKyAgICAgIH0KKyAgIH0KKworICAgaWYge1tzdHJpbmcgbGVuZ3RoICRvcHRpb25zVXNhZ2VdID4gMH0geworICAgICAgYXBwZW5kIHVzYWdlIFxuCisgICAgICBhcHBlbmQgdXNhZ2UgIlRoZSBmb2xsb3dpbmcgb3B0aW9ucyBtYXkgYmUgc3BlY2lmaWVkOlxuJG9wdGlvbnNVc2FnZSIKKyAgIH0KKworICAgcHV0cyBzdGRvdXQgJHVzYWdlCit9CisKK3Byb2Mgbm9Nb3JlUG9zaXRpb25hbEFyZ3VtZW50cyB7YXJndW1lbnRzfSB7CisgICBpZiB7W25leHRFbGVtZW50IGFyZ3VtZW50c119IHsKKyAgICAgIHN5bnRheEVycm9yICJleGNlc3MgcG9zaXRpb25hbCBhcmd1bWVudHM6IFtqb2luICRhcmd1bWVudHMgIiAiXSIKKyAgIH0KK30KKworcHJvYyBwcm9jZXNzUHJvZ3JhbUFyZ3VtZW50cyB7CisgICBvcHRpb25WYWx1ZXNBcnJheSBvcHRpb25EZWZpbml0aW9ucworICAge2FyZ3VtZW50VmFsdWVzTGlzdCAiIn0KKyAgIHthcmd1bWVudHNVc2FnZSAiIn0KKyAgIHtnZXRBcmd1bWVudHNVc2FnZVN1bW1hcnkgIiJ9Cit9IHsKKyAgIHVwdmFyIDEgJG9wdGlvblZhbHVlc0FycmF5IG9wdGlvblZhbHVlcworICAgc2V0IGFyZ3VtZW50VmFsdWVzICQ6OmFyZ3YKKworICAgbGFwcGVuZCBvcHRpb25EZWZpbml0aW9ucyB7aGVscCBmbGFnICJzaG93IHRoaXMgdXNhZ2Ugc3VtbWFyeSBhbmQgdGhlbiBleGl0In0KKyAgIGxhcHBlbmQgb3B0aW9uRGVmaW5pdGlvbnMge3F1aWV0IGNvdW50ZXIgImRlY3JlYXNlIHZlcmJvc2l0eSJ9CisgICBsYXBwZW5kIG9wdGlvbkRlZmluaXRpb25zIHt2ZXJib3NlIGNvdW50ZXIgImluY3JlYXNlIHZlcmJvc2l0eSJ9CisKKyAgIGlmIHshW3Byb2Nlc3NDb21tYW5kT3B0aW9ucyBvcHRpb25WYWx1ZXMgYXJndW1lbnRWYWx1ZXMgJG9wdGlvbkRlZmluaXRpb25zIG9wdGlvbnNEZXNjcmlwdG9yXX0geworICAgICAgc3ludGF4RXJyb3IKKyAgIH0KKworICAgZ2xvYmFsIGxvZ0xldmVsCisgICBpbmNyIGxvZ0xldmVsICRvcHRpb25WYWx1ZXModmVyYm9zZSkKKyAgIGluY3IgbG9nTGV2ZWwgLSRvcHRpb25WYWx1ZXMocXVpZXQpCisKKyAgIGlmIHskb3B0aW9uVmFsdWVzKGhlbHApfSB7CisgICAgICBzaG93Q29tbWFuZFVzYWdlIFtnZXRQcm9ncmFtTmFtZV0gJG9wdGlvbnNEZXNjcmlwdG9yICRhcmd1bWVudHNVc2FnZSAkZ2V0QXJndW1lbnRzVXNhZ2VTdW1tYXJ5CisgICAgICBleGl0IDAKKyAgIH0KKworICAgaWYge1tzdHJpbmcgbGVuZ3RoICRhcmd1bWVudFZhbHVlc0xpc3RdID4gMH0geworICAgICAgdXBsZXZlbCAxIFtsaXN0IHNldCAkYXJndW1lbnRWYWx1ZXNMaXN0ICRhcmd1bWVudFZhbHVlc10KKyAgIH0gZWxzZSB7CisgICAgICBub01vcmVQb3NpdGlvbmFsQXJndW1lbnRzICRhcmd1bWVudFZhbHVlcworICAgfQorfQorCmRpZmYgLS1naXQgYS9icmx0dHktc2V0Y2FwcyBiL2JybHR0eS1zZXRjYXBzCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmNhMmY5YTQKLS0tIC9kZXYvbnVsbAorKysgYi9icmx0dHktc2V0Y2FwcwpAQCAtMCwwICsxLDEyNiBAQAorIyEvYmluL2Jhc2gKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyMgICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisjCisjIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyMKKyMgQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitzZXQgLWUKKy4gImBkaXJuYW1lICIkezB9ImAvYnJsdHR5LXByb2xvZ3VlLnNoIgorCitzaG93UHJvZ3JhbVVzYWdlUHVycG9zZSgpIHsKK2NhdCA8PEVORF9PRl9QUk9HUkFNX1VTQUdFX1BVUlBPU0UKK1NpbXBsaWZ5IHRoZSBqb2Igb2YgYXNzaWduaW5nIGNhcGFiaWxpdGllcyB0byB0aGUgQlJMVFRZIGV4ZWN1dGFibGUuCitFTkRfT0ZfUFJPR1JBTV9VU0FHRV9QVVJQT1NFCit9CisKK2V4ZWN1dGVDb21tYW5kKCkgeworICAgIiR7dXNlU3Vkb30iICYmIHNldCAtLSBzdWRvIC0tICIke0B9IgorCisgICBpZiAiJHt0ZXN0TW9kZX0iCisgICB0aGVuCisgICAgICBlY2hvICIkeyp9IgorICAgZWxzZQorICAgICAgIiR7QH0iCisgICBmaQorfQorCitzZXRPd25lcigpIHsKKyAgIGxvY2FsIHR5cGU9IiR7MX0iCisgICBsb2NhbCByb290PSIkezJ9IgorICAgbG9jYWwgY29tbWFuZD0iJHszfSIKKworICAgaWYgIiR7cm9vdH0iCisgICB0aGVuCisgICAgICBsb2NhbCBvd25lcj0wCisgICBlbHNlCisgICAgICBsb2NhbCBvd25lcj0iJChpZCAtIiR7dHlwZX0iKSIKKyAgIGZpCisKKyAgIGV4ZWN1dGVDb21tYW5kICIke2NvbW1hbmR9IiAiJHtvd25lcn0iIC0tICIke2V4ZWN1dGFibGVQYXRofSIKK30KKworc2V0TW9kZSgpIHsKKyAgIGxvY2FsIHR5cGU9IiR7MX0iCisgICBsb2NhbCBzZXQ9IiR7Mn0iCisKKyAgIGlmICIke3NldH0iCisgICB0aGVuCisgICAgICBsb2NhbCBvcGVyYXRvcj0iKyIKKyAgIGVsc2UKKyAgICAgIGxvY2FsIG9wZXJhdG9yPSItIgorICAgZmkKKworICAgZXhlY3V0ZUNvbW1hbmQgY2htb2QgIiR7dHlwZX0ke29wZXJhdG9yfXMiICIke2V4ZWN1dGFibGVQYXRofSIKK30KKworY2FwYWJpbGl0aWVzTGlzdD0oKQorYWRkQ2FwYWJpbGl0eSgpIHsKKyAgIGNhcGFiaWxpdGllc0xpc3RbJHsjY2FwYWJpbGl0aWVzTGlzdFsqXX1dPSIkezF9IgorfQorCithZGRQcm9ncmFtT3B0aW9uIGMgZmxhZyBub0NyZWF0aW9uICJkb24ndCBhbGxvdyBjcmVhdGluZyBtaXNzaW5nIHN0YXRlIGRpcmVjdG9yaWVzIgorYWRkUHJvZ3JhbU9wdGlvbiBkIGZsYWcgbm9EZXZpY2VzICJkb24ndCBhbGxvdyBjcmVhdGluZyBuZWVkZWQgYnV0IG1pc3NpbmcgZGV2aWNlIGZpbGVzIgorYWRkUHJvZ3JhbU9wdGlvbiBnIGZsYWcgbm9Hcm91cHMgImRvbid0IGFsbG93IHN3aXRjaGluZyB0byB0aGUgd3JpdGFibGUgZ3JvdXAgb3Igam9pbmluZyB0aGUgcmVxdWlyZWQgZ3JvdXBzIgorYWRkUHJvZ3JhbU9wdGlvbiBpIGZsYWcgbm9JbnB1dCAiZG9uJ3QgYWxsb3cgaW5qZWN0aW5nIGlucHV0IGNoYXJhY3RlcnMiCithZGRQcm9ncmFtT3B0aW9uIG0gZmxhZyBub01vZHVsZXMgImRvbid0IGFsbG93IGluc3RhbGxpbmcga2VybmVsIG1vZHVsZXMiCithZGRQcm9ncmFtT3B0aW9uIG8gZmxhZyBub093bmVyc2hpcCAiZG9uJ3QgYWxsb3cgY2xhaW1pbmcgb3duZXJzaGlwIG9mIHRoZSBzdGF0ZSBkaXJlY3RvcmllcyIKK2FkZFByb2dyYW1PcHRpb24gcCBmbGFnIG5vUGVybWlzc2lvbnMgImRvbid0IGFsbG93IGFkZGluZyBncm91cCBwZXJtaXNzaW9ucyB0byB0aGUgc3RhdGUgZGlyZWN0b3JpZXMiCithZGRQcm9ncmFtT3B0aW9uIHMgZmxhZyBub1NwZWFrZXIgImRvbid0IGFsbG93IHVzaW5nIHRoZSBidWlsdC1pbiBQQyBzcGVha2VyIgorYWRkUHJvZ3JhbU9wdGlvbiBDIGZsYWcgbm9DYXBhYmlsaXRpZXMgImRvbid0IHNldCB0aGUgY2FwYWJpbGl0aWVzIgorYWRkUHJvZ3JhbU9wdGlvbiBHIGZsYWcgcm9vdEdyb3VwICJzZXQgZ3JvdXAgcm9vdCBleGVjdXRpb24iCithZGRQcm9ncmFtT3B0aW9uIFMgZmxhZyB1c2VTdWRvICJ1c2Ugc3VkbyB0byBleGVjdXRlIHRoZSBjb21tYW5kcyBhcyByb290IgorYWRkUHJvZ3JhbU9wdGlvbiBUIGZsYWcgdGVzdE1vZGUgInRlc3QgbW9kZSAtIHNob3cgdGhlIGNvbW1hbmRzIHRoYXQgd291bGQgYmUgZXhlY3V0ZWQiCithZGRQcm9ncmFtT3B0aW9uIFUgZmxhZyByb290VXNlciAic2V0IHVzZXIgcm9vdCBleGVjdXRpb24iCithZGRQcm9ncmFtUGFyYW1ldGVyIGV4ZWN1dGFibGUgZXhlY3V0YWJsZVBhdGggInRoZSBwYXRoIHRvIHRoZSBleGVjdXRhYmxlIgorcGFyc2VQcm9ncmFtQXJndW1lbnRzICIke0B9IgorCit2ZXJpZnlFeGVjdXRhYmxlRmlsZSAiJHtleGVjdXRhYmxlUGF0aH0iCisKKyIke3Rlc3RNb2RlfSIgfHwgeworICAgaWYgIiR7dXNlU3Vkb30iCisgICB0aGVuCisgICAgICBzdWRvIC12CisgICBlbGlmIFsgIiQoaWQgLXUpIiAtbmUgMCBdCisgICB0aGVuCisgICAgICBzZW1hbnRpY0Vycm9yICJub3QgZXhlY3V0aW5nIGFzIHJvb3QiCisgICBmaQorfQorCitzZXRPd25lciB1ICIke3Jvb3RVc2VyfSIgY2hvd24KK3NldE93bmVyIGcgIiR7cm9vdEdyb3VwfSIgY2hncnAKKworc2V0TW9kZSB1ICIke3Jvb3RVc2VyfSIKK3NldE1vZGUgZyAiJHtyb290R3JvdXB9IgorCisiJHtub0NhcGFiaWxpdGllc30iIHx8IHsKKyAgICIke25vQ3JlYXRpb259IiB8fCBhZGRDYXBhYmlsaXR5ICJjYXBfZGFjX292ZXJyaWRlIgorICAgIiR7bm9EZXZpY2VzfSIgfHwgYWRkQ2FwYWJpbGl0eSAiY2FwX21rbm9kIgorICAgIiR7bm9Hcm91cHN9IiB8fCBhZGRDYXBhYmlsaXR5ICJjYXBfc2V0Z2lkIgorICAgIiR7bm9JbnB1dH0iIHx8IGFkZENhcGFiaWxpdHkgImNhcF9zeXNfYWRtaW4iCisgICAiJHtub01vZHVsZXN9IiB8fCBhZGRDYXBhYmlsaXR5ICJjYXBfc3lzX21vZHVsZSIKKyAgICIke25vT3duZXJzaGlwfSIgfHwgYWRkQ2FwYWJpbGl0eSAiY2FwX2Nob3duIgorICAgIiR7bm9QZXJtaXNzaW9uc30iIHx8IGFkZENhcGFiaWxpdHkgImNhcF9mb3duZXIiCisgICAiJHtub1NwZWFrZXJ9IiB8fCBhZGRDYXBhYmlsaXR5ICJjYXBfc3lzX3R0eV9jb25maWciCisKKyAgIFsgIiR7I2NhcGFiaWxpdGllc0xpc3RbKl19IiAtZXEgMCBdIHx8IHsKKyAgICAgIGNhcGFiaWxpdGllc09wZXJhbmQ9IiR7Y2FwYWJpbGl0aWVzTGlzdFsqXX0iCisgICAgICBjYXBhYmlsaXRpZXNPcGVyYW5kPSIke2NhcGFiaWxpdGllc09wZXJhbmQvLyAvLH0iCisgICAgICBjYXBhYmlsaXRpZXNPcGVyYW5kKz0iK3AiCisgICAgICBleGVjdXRlQ29tbWFuZCBzZXRjYXAgIiR7Y2FwYWJpbGl0aWVzT3BlcmFuZH0iICIke2V4ZWN1dGFibGVQYXRofSIKKyAgIH0KK30KKworZXhpdCAwCmRpZmYgLS1naXQgYS9icmx0dHktdGVybSBiL2JybHR0eS10ZXJtCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjM4ZjIwZmIKLS0tIC9kZXYvbnVsbAorKysgYi9icmx0dHktdGVybQpAQCAtMCwwICsxLDEyMCBAQAorIyEvdXNyL2Jpbi9lbnYgYmFzaAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorIyAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyMKKyMgQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorIworIyBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorIworIyBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisjIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyMgbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisjCisjIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKy4gIiQoZGlybmFtZSAiJHswfSIpL2JybHR0eS1wcm9sb2d1ZS5zaCIKKwordXNhZ2VTdW1tYXJ5PSJcCitSdW4gYSBzaGVsbCBvciB0ZXJtaW5hbCBtYW5hZ2VyIHZpYSB0aGUgYnJsdHR5LXB0eSB0ZXJtaW5hbCBlbXVsYXRvcgorYW5kIGJybHR0eSB1c2luZyBpdHMgVGVybWluYWwgRW11bGF0b3Igc2NyZWVuIGRyaXZlci4KKworU3ludGF4OiAke3Byb2dyYW1OYW1lfSBbc2hlbGxdIFstb3B0aW9uIC4uLl0KKworVGhpcyBzY3JpcHQgaXMgZXNwZWNpYWxseSB1c2VmdWwgb24gcGxhdGZvcm1zIHRoYXQgZG9uJ3Qgc3VwcG9ydCBhIG5hdGl2ZSBzY3JlZW4gZHJpdmVyLgorVGhpcyBuZXdlciBtZXRob2QgbWF5IChzaG91bGQpIGJlIHVzZWQgaW4gcHJlZmVyZW5jZSB0byB0aGUgb2xkZXIgbWV0aG9kIG9mCitydW5uaW5nIGJybHR0eSBpbiBjb25qdW5jdGlvbiB3aXRoIGl0cyBwcm92aWRlZCBwYXRjaCB0byB0aGUgc2NyZWVuIHByb2dyYW0uCisKK0FsbCBvZiB0aGUgYXJndW1lbnRzIHRvIHRoaXMgc2NyaXB0IGFyZSBpbnRlcnByZXRlZCBhcyBicmx0dHkgb3B0aW9ucywKK3dpdGggdGhlIGZvbGxvd2luZyBleGNlcHRpb25zOgorKiBJZiB0aGUgZmlyc3QgYXJndW1lbnQgaXMgLWggdGhlbiB0aGlzIHVzYWdlIHN1bW1hcnkgaXMgZGlzcGxheWVkLgorKiBJZiB0aGUgZmlyc3QgYXJndW1lbnQgZG9lc24ndCBiZWdpbiB3aXRoIC0gKGkuZS4gaXQgaXNuJ3QgYW4gb3B0aW9uKQorICB0aGVuIGl0J3MgaW50ZXJwcmV0ZWQgYXMgdGhlIHNoZWxsIHRvIHJ1biwgYW5kIHRoZSByZXN0IG9mIHRoZSBhcmd1bWVudHMKKyAgYXJlIGludGVycHJldGVkIGFzIGJybHR0eSBvcHRpb25zLgorCitUaGUgc2hlbGwgbWF5IGJlIHNwZWNpZmllZCB2aWEgZWl0aGVyIGl0cyBuYW1lIG9yIGl0cyBwYXRoLiBJdCdzIGFsc28gb2theQordG8gc3BlY2lmeSBhIHRlcm1pbmFsIG1hbmFnZXIgcmF0aGVyIHRoYW4gYSBzaGVsbC4gRm9yIGV4YW1wbGU6CisqICR7cHJvZ3JhbU5hbWV9IHNjcmVlbgorKiAke3Byb2dyYW1OYW1lfSB0bXV4CisKK0lmIHRoZSBzaGVsbCBpc24ndCBzcGVjaWZpZWQgb24gdGhlIGNvbW1hbmQgbGluZSB0aGVuLCBpbiBkZWNyZWFzaW5nCitwcmVjZWRlbmNlLCBvbmUgb2YgdGhlIGZvbGxvd2luZyBpcyB1c2VkOgorMTogSWYgc2V0LCB0aGUgXCRCUkxUVFlfVEVSTV9TSEVMTCBlbnZpcm9ubWVudCB2YXJpYWJsZS4KKzI6IElmIHNldCwgdGhlIFwkU0hFTEwgZW52aXJvbm1lbnQgdmFyaWFibGUuCiszOiBUaGUgZGVmYXVsdCBzaGVsbCAoc2gpLgorCitCcmx0dHkgaXMgcnVuIGFzIHJvb3Qgc28gdGhhdCBpdCBjYW4gYWNjZXNzIHRoZSBicmFpbGxlIGRldmljZS4gSWYgaXRzCitzZXQtdXNlci1pZCBiaXQgaXMgc2V0IGFuZC9vciBpZiB0aGlzIHNjcmlwdCBpcyBhbHJlYWR5IHJ1bm5pbmcgYXMgcm9vdAordGhlbiBpdCdzIHJ1biBkaXJlY3RseS4gSWYgbmVpdGhlciwgaXQncyBydW4gdmlhIHN1ZG8uIEluIHRoaXMgY2FzZSwgeW91CittYXkgd2lzaCB0byBjb25zaWRlciBjb25maWd1cmluZyBzdWRvIHNvIHRoYXQgaXQgd29uJ3QgcHJvbXB0IGZvciB0aGUKK3VzZXIncyBwYXNzd29yZCBzaW5jZSB0aGUgYnJhaWxsZSBkZXZpY2Ugd291bGRuJ3QgYmUgb3BlcmF0aW9uYWwgeWV0LgorCitJZiB0aGUgY29weSBvZiB0aGlzIHNjcmlwdCBpbiBpdHMgaW5zdGFsbGVkIGxvY2F0aW9uIGlzIHVzZWQgdGhlbiB0aGUKK2luc3RhbGxlZCBicmx0dHkgaXMgcnVuLiBJZiwgaG93ZXZlciwgdGhlIGNvcHkgaW4gdGhlIHRvcC1sZXZlbCBkaXJlY3RvcnkKK29mIHRoZSBzb3VyY2UgdHJlZSBpcyB1c2VkIHRoZW4gYnJsdHR5IGluIHRoZSBidWlsZCB0cmVlICh3aGljaCBuZWVkbid0CitiZSBpbnN0YWxsZWQpIGlzIHJ1bi4KKworIgorCitzaGVsbENvbW1hbmQ9IiIKKworWyAiJHsjfSIgLWVxIDAgXSB8fCB7CisgICBhcmd1bWVudD0iJHsxfSIKKworICAgWyAiJHthcmd1bWVudH0iID0gIi1oIiBdICYmIHsKKyAgICAgIGVjaG8gLW4gIiR7dXNhZ2VTdW1tYXJ5fSIKKyAgICAgIGV4aXQgMAorICAgfQorCisgICBbICIkeyNhcmd1bWVudH0iIC1lcSAwIF0gfHwgeworICAgICAgWyAiJHthcmd1bWVudDowOjF9IiA9ICItIiBdIHx8IHsKKyAgICAgICAgIHNoZWxsQ29tbWFuZD0iJHthcmd1bWVudH0iCisgICAgICAgICBzaGlmdCAxCisgICAgICB9CisgICB9Cit9CisKK1sgLXQgMCBdIHx8IHNlbWFudGljRXJyb3IgInN0YW5kYXJkIGlucHV0IGlzbid0IGEgdGVybWluYWwiCitbIC10IDEgXSB8fCBzZW1hbnRpY0Vycm9yICJzdGFuZGFyZCBvdXRwdXQgaXNuJ3QgYSB0ZXJtaW5hbCIKKworZmluZFNpYmxpbmdDb21tYW5kIGJybHR0eVBhdGggYnJsdHR5IHJ1bi1icmx0dHkgfHwgeworICAgc2VtYW50aWNFcnJvciAiYnJsdHR5IG5vdCBmb3VuZCIKK30KKworWyAtbiAiJHtzaGVsbENvbW1hbmR9IiBdIHx8IHNoZWxsQ29tbWFuZD0iJHtCUkxUVFlfVEVSTV9TSEVMTH0iCitbIC1uICIke3NoZWxsQ29tbWFuZH0iIF0gfHwgc2hlbGxDb21tYW5kPSIke1NIRUxMfSIKK1sgLW4gIiR7c2hlbGxDb21tYW5kfSIgXSB8fCBzaGVsbENvbW1hbmQ9InNoIgorCitmaW5kSG9zdENvbW1hbmQgc2hlbGxQYXRoICIke3NoZWxsQ29tbWFuZH0iIHx8IHsKKyAgIHNlbWFudGljRXJyb3IgInNoZWxsIG5vdCBmb3VuZDogJHtzaGVsbENvbW1hbmR9IgorfQorCitzY3JlZW5Ecml2ZXI9ImVtIgorc2NyZWVuUGFyYW1ldGVycz0oKQorCithZGRTY3JlZW5QYXJhbWV0ZXIoKSB7CisgICBsb2NhbCBuYW1lPSIkezF9IgorICAgbG9jYWwgdmFsdWU9IiR7Mn0iCisKKyAgc2NyZWVuUGFyYW1ldGVycys9KCItWCR7c2NyZWVuRHJpdmVyfToke25hbWV9PSR7dmFsdWV9IikKK30KKworY3VycmVudFVzZXI9IiQoaWQgLXUpIgorY3VycmVudEdyb3VwPSIkKGlkIC1nKSIKKworYWRkU2NyZWVuUGFyYW1ldGVyIHNoZWxsICIke3NoZWxsUGF0aH0iCithZGRTY3JlZW5QYXJhbWV0ZXIgdXNlciAiJHtjdXJyZW50VXNlcn0iCithZGRTY3JlZW5QYXJhbWV0ZXIgZ3JvdXAgIiR7Y3VycmVudEdyb3VwfSIKK2FkZFNjcmVlblBhcmFtZXRlciBkaXJlY3RvcnkgIiR7UFdEfSIKK2FkZFNjcmVlblBhcmFtZXRlciBob21lICIke0hPTUV9IgorCitTVURPPSJzdWRvIC0tYmVsbCAtLXByZXNlcnZlLWVudiAtLXByZXNlcnZlLWVudj1VU0VSLExPR05BTUUgLS0iCitbIC11ICIke2JybHR0eVBhdGh9IiBdICYmIFNVRE89IiIKK1sgIiR7Y3VycmVudFVzZXJ9IiAtZXEgMCBdICYmIFNVRE89IiIKKworZXhlYyAke1NVRE99ICIke2JybHR0eVBhdGh9IiAtbiAteiAteCIke3NjcmVlbkRyaXZlcn0iICIke3NjcmVlblBhcmFtZXRlcnNbQF19IiAiJHtAfSIKK2V4aXQgIiR7P30iCmRpZmYgLS1naXQgYS9icmx0dHktdHR5c2l6ZSBiL2JybHR0eS10dHlzaXplCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjM4YjlhMzIKLS0tIC9kZXYvbnVsbAorKysgYi9icmx0dHktdHR5c2l6ZQpAQCAtMCwwICsxLDY1IEBACisjIS91c3IvYmluL2VudiBiYXNoCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisjICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorIworIyBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisjCisjIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisjCisjIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyMgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorIyBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyMKKyMgV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworIworIyBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworLiAiJChkaXJuYW1lICIkezB9IikvYnJsdHR5LXByb2xvZ3VlLnNoIgordHR5RGVmYXVsdFBhdGg9Ii9kZXYvdHR5IgorCitzaG93UHJvZ3JhbVVzYWdlUHVycG9zZSgpIHsKK2NhdCA8PEVORF9PRl9QUk9HUkFNX1VTQUdFX1BVUlBPU0UKK0luc3BlY3Qgb3IgY2hhbmdlIHRoZSBzaXplIG9mIHRoZSBjdXJyZW50IHZpcnR1YWwgdGVybWluYWwncyBzY3JlZW4uCitFTkRfT0ZfUFJPR1JBTV9VU0FHRV9QVVJQT1NFCit9CisKK2FkZFByb2dyYW1PcHRpb24gcCBzdHJpbmcucGF0aCB0dHlQYXRoICJ0aGUgcGF0aCB0byB0aGUgZGV2aWNlIiAiJHt0dHlEZWZhdWx0UGF0aH0iCithZGRQcm9ncmFtT3B0aW9uIGMgc3RyaW5nLmNvdW50IHR0eUNvbHVtbnMgInNldCB0aGUgbnVtYmVyIG9mIGNvbHVtbnMiCithZGRQcm9ncmFtT3B0aW9uIGwgc3RyaW5nLmNvdW50IHR0eUxpbmVzICJzZXQgdGhlIG51bWJlciBvZiBsaW5lcyIKK3BhcnNlUHJvZ3JhbUFyZ3VtZW50cyAiJHtAfSIKKworWyAtbiAiJHt0dHlQYXRofSIgXSB8fCB0dHlQYXRoPSIke3R0eURlZmF1bHRQYXRofSIKK3Nob3dTaXplPXRydWUKKworaWYgWyAtbiAiJHt0dHlDb2x1bW5zfSIgXQordGhlbgorICAgdmVyaWZ5SW50ZWdlciAiY29sdW1uIGNvdW50IiAiJHt0dHlDb2x1bW5zfSIgMSAyNTUKKyAgIHNob3dTaXplPWZhbHNlCitlbHNlCisgICB0dHlDb2x1bW5zPSIkKHRwdXQgY29scykiCisgICBbIC1uICIke3R0eUNvbHVtbnN9IiBdIHx8IHNlbWFudGljRXJyb3IgImNvbHVtbiBjb3VudCBub3QgYXZhaWxhYmxlOiAke1RFUk19IgorZmkKKworaWYgWyAtbiAiJHt0dHlMaW5lc30iIF0KK3RoZW4KKyAgIHZlcmlmeUludGVnZXIgImxpbmUgY291bnQiICIke3R0eUxpbmVzfSIgMSAyNTUKKyAgIHNob3dTaXplPWZhbHNlCitlbHNlCisgICB0dHlMaW5lcz0iJCh0cHV0IGxpbmVzKSIKKyAgIFsgLW4gIiR7dHR5TGluZXN9IiBdIHx8IHNlbWFudGljRXJyb3IgImxpbmUgY291bnQgbm90IGF2YWlsYWJsZTogJHtURVJNfSIKK2ZpCisKK2lmICIke3Nob3dTaXplfSIKK3RoZW4KKyAgIGVjaG8gIiR7dHR5Q29sdW1uc314JHt0dHlMaW5lc30iCitlbGlmIFsgIiR7VEVSTSN4dGVybX0iICE9ICIke1RFUk19IiBdCit0aGVuCisgICBlY2hvID4iJHt0dHlQYXRofSIgLW4gLWUgIlxcZVs4OyR7dHR5TGluZXN9OyR7dHR5Q29sdW1uc310IgorZWxzZQorICAgc3R0eSAtRiAiJHt0dHlQYXRofSIgY29sdW1ucyAiJHt0dHlDb2x1bW5zfSIgcm93cyAiJHt0dHlMaW5lc30iCitmaQorCitleGl0IDAKZGlmZiAtLWdpdCBhL2JybHR0eS5wYy5pbiBiL2JybHR0eS5wYy5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMzlkNjMwCi0tLSAvZGV2L251bGwKKysrIGIvYnJsdHR5LnBjLmluCkBAIC0wLDAgKzEsMTYzIEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisjICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorIworIyBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisjCisjIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisjCisjIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyMgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorIyBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyMKKyMgV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworIworIyBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworTmFtZTogQFBBQ0tBR0VfVEFSTkFNRUAKK1ZlcnNpb246IEBQQUNLQUdFX1ZFUlNJT05ACitVUkw6IEBQQUNLQUdFX1VSTEAKK0Rlc2NyaXB0aW9uOiBCcmFpbGxlIERldmljZSBEYWVtb24KKworcGFja2FnZV9uYW1lPUBQQUNLQUdFX1RBUk5BTUVACitwYWNrYWdlX3ZlcnNpb249QFBBQ0tBR0VfVkVSU0lPTkAKK3BhY2thZ2VfdXJsPUBQQUNLQUdFX1VSTEAKKworZGlzcGxheV9uYW1lPUBQQUNLQUdFX05BTUVACittYWlsaW5nX2xpc3Q9QFBBQ0tBR0VfQlVHUkVQT1JUQAorCitwcmVmaXg9QHByZWZpeEAKK3N5c2NvbmZkaXI9QHN5c2NvbmZkaXJACitkYXRhcm9vdGRpcj1AZGF0YXJvb3RkaXJACisKK2V4ZWNfcHJlZml4PUBleGVjX3ByZWZpeEAKK2JpbmRpcj1AYmluZGlyQAorc2JpbmRpcj1Ac2JpbmRpckAKK2xpYmRpcj1AbGliZGlyQAorbGliZXhlY2Rpcj1AbGliZXhlY2RpckAKKwordXBkYXRhYmxlX2RpcmVjdG9yeT1AdXBkYXRhYmxlX2RpcmVjdG9yeUAKK3dyaXRhYmxlX2RpcmVjdG9yeT1Ad3JpdGFibGVfZGlyZWN0b3J5QAorCitleGVjdXRlX3Jvb3Q9QGV4ZWN1dGVfcm9vdEAKK3Byb2dyYW1fZGlyZWN0b3J5PSR7ZXhlY3V0ZV9yb290fUBwcm9ncmFtX2RpcmVjdG9yeUAKK2NvbW1hbmRzX2RpcmVjdG9yeT0ke2V4ZWN1dGVfcm9vdH1AY29tbWFuZHNfZGlyZWN0b3J5QAorZHJpdmVyc19kaXJlY3Rvcnk9JHtleGVjdXRlX3Jvb3R9QGRyaXZlcnNfZGlyZWN0b3J5QAordGFibGVzX2RpcmVjdG9yeT0ke2V4ZWN1dGVfcm9vdH1AdGFibGVzX2RpcmVjdG9yeUAKK2luY2x1ZGVfZGlyZWN0b3J5PSR7ZXhlY3V0ZV9yb290fUBpbmNsdWRlX2RpcmVjdG9yeUAKK21hbnBhZ2VfZGlyZWN0b3J5PSR7ZXhlY3V0ZV9yb290fUBtYW5wYWdlX2RpcmVjdG9yeUAKKworY29uZmlndXJhdGlvbl9maWxlPUBDT05GSUdVUkFUSU9OX0ZJTEVACitwcmVmZXJlbmNlc19maWxlPUBQUkVGRVJFTkNFU19GSUxFQAorCit0ZXh0X3RhYmxlPUB0ZXh0X3RhYmxlQAorYXR0cmlidXRlc190YWJsZT1AYXR0cmlidXRlc190YWJsZUAKKworaGF2ZV9saWJsb3Vpcz1AYnJsdHR5X2VuYWJsZWRfbGlibG91aXNACitsaWJsb3Vpc190YWJsZXNfZGlyZWN0b3J5PUBsb3Vpc190YWJsZXNfZGlyZWN0b3J5QAorCiticmFpbGxlX3BhcmFtZXRlcnM9QGJyYWlsbGVfcGFyYW1ldGVyc0AKK2JyYWlsbGVfZGV2aWNlPUBicmFpbGxlX2RldmljZUAKKworc3BlZWNoX3BhcmFtZXRlcnM9QHNwZWVjaF9wYXJhbWV0ZXJzQAoraGF2ZV9zcGVlY2g9QGJybHR0eV9lbmFibGVkX3NwZWVjaF9zdXBwb3J0QAorCitzY3JlZW5fcGFyYW1ldGVycz1Ac2NyZWVuX3BhcmFtZXRlcnNACitzY3JlZW5fZHJpdmVyPUBkZWZhdWx0X3NjcmVlbl9kcml2ZXJACisKK2FsbF9icmFpbGxlX2RyaXZlcl9jb2Rlcz1AYnJsdHR5X2l0ZW1fY29kZXNfYnJhaWxsZUAKK2FsbF9icmFpbGxlX2RyaXZlcl9uYW1lcz1AYnJsdHR5X2l0ZW1fbmFtZXNfYnJhaWxsZUAKK2ludGVybmFsX2JyYWlsbGVfZHJpdmVyX2NvZGVzPUBicmx0dHlfaW50ZXJuYWxfY29kZXNfYnJhaWxsZUAKK2ludGVybmFsX2JyYWlsbGVfZHJpdmVyX25hbWVzPUBicmx0dHlfaW50ZXJuYWxfbmFtZXNfYnJhaWxsZUAKK2V4dGVybmFsX2JyYWlsbGVfZHJpdmVyX2NvZGVzPUBicmx0dHlfZXh0ZXJuYWxfY29kZXNfYnJhaWxsZUAKK2V4dGVybmFsX2JyYWlsbGVfZHJpdmVyX25hbWVzPUBicmx0dHlfZXh0ZXJuYWxfbmFtZXNfYnJhaWxsZUAKKworYWxsX3NwZWVjaF9kcml2ZXJfY29kZXM9QGJybHR0eV9pdGVtX2NvZGVzX3NwZWVjaEAKK2FsbF9zcGVlY2hfZHJpdmVyX25hbWVzPUBicmx0dHlfaXRlbV9uYW1lc19zcGVlY2hACitpbnRlcm5hbF9zcGVlY2hfZHJpdmVyX2NvZGVzPUBicmx0dHlfaW50ZXJuYWxfY29kZXNfc3BlZWNoQAoraW50ZXJuYWxfc3BlZWNoX2RyaXZlcl9uYW1lcz1AYnJsdHR5X2ludGVybmFsX25hbWVzX3NwZWVjaEAKK2V4dGVybmFsX3NwZWVjaF9kcml2ZXJfY29kZXM9QGJybHR0eV9leHRlcm5hbF9jb2Rlc19zcGVlY2hACitleHRlcm5hbF9zcGVlY2hfZHJpdmVyX25hbWVzPUBicmx0dHlfZXh0ZXJuYWxfbmFtZXNfc3BlZWNoQAorCithbGxfc2NyZWVuX2RyaXZlcl9jb2Rlcz1AYnJsdHR5X2l0ZW1fY29kZXNfc2NyZWVuQAorYWxsX3NjcmVlbl9kcml2ZXJfbmFtZXM9QGJybHR0eV9pdGVtX25hbWVzX3NjcmVlbkAKK2ludGVybmFsX3NjcmVlbl9kcml2ZXJfY29kZXM9QGJybHR0eV9pbnRlcm5hbF9jb2Rlc19zY3JlZW5ACitpbnRlcm5hbF9zY3JlZW5fZHJpdmVyX25hbWVzPUBicmx0dHlfaW50ZXJuYWxfbmFtZXNfc2NyZWVuQAorZXh0ZXJuYWxfc2NyZWVuX2RyaXZlcl9jb2Rlcz1AYnJsdHR5X2V4dGVybmFsX2NvZGVzX3NjcmVlbkAKK2V4dGVybmFsX3NjcmVlbl9kcml2ZXJfbmFtZXM9QGJybHR0eV9leHRlcm5hbF9uYW1lc19zY3JlZW5ACisKK2xpYmJyYWlsbGVfcm9vdD1AbGliYnJhaWxsZV9yb290QAorZXNwZWFrX3Jvb3Q9QGVzcGVha19yb290QAorZXNwZWFrX25nX3Jvb3Q9QGVzcGVha19uZ19yb290QAorZmxpdGVfcm9vdD1AZmxpdGVfcm9vdEAKK2ZsaXRlX2xhbmd1YWdlPUBmbGl0ZV9sYW5ndWFnZUAKK2ZsaXRlX2xleGljb249QGZsaXRlX2xleGljb25ACitmbGl0ZV92b2ljZT1AZmxpdGVfdm9pY2VACittaWtyb3B1aGVfcm9vdD1AbWlrcm9wdWhlX3Jvb3RACitzcGVlY2hkX3Jvb3Q9QHNwZWVjaGRfcm9vdEAKK3N3aWZ0X3Jvb3Q9QHN3aWZ0X3Jvb3RACit0aGV0YV9yb290PUB0aGV0YV9yb290QAorCitwcml2aWxlZ2VfcGFyYW1ldGVycz1AcHJpdmlsZWdlX3BhcmFtZXRlcnNACityZWxvY2F0YWJsZV9pbnN0YWxsPUBicmx0dHlfZW5hYmxlZF9yZWxvY2F0YWJsZV9pbnN0YWxsQAorc3RhdGljX2V4ZWN1dGFibGVzPUBicmx0dHlfZW5hYmxlZF9zdGFuZGFsb25lX3Byb2dyYW1zQAorc3RyaXBwZWRfZXhlY3V0YWJsZXM9QGJybHR0eV9lbmFibGVkX3N0cmlwcGluZ0AKKworaGF2ZV9leHBhdD1AYnJsdHR5X2VuYWJsZWRfZXhwYXRACitoYXZlX2dwbT1AYnJsdHR5X2VuYWJsZWRfZ3BtQAoraGF2ZV9pMThuPUBicmx0dHlfZW5hYmxlZF9pMThuQAoraGF2ZV9pY29udj1AYnJsdHR5X2VuYWJsZWRfaWNvbnZACitoYXZlX2ljdT1AYnJsdHR5X2VuYWJsZWRfaWN1QAoraGF2ZV9wb2xraXQ9QGJybHR0eV9lbmFibGVkX3BvbGtpdEAKKworaGF2ZV94PUBicmx0dHlfZW5hYmxlZF94QAordG9vbGtpdF9wYWNrYWdlPUBndWlfdG9vbGtpdF9wYWNrYWdlQAorY3Vyc2VzX3BhY2thZ2U9QGN1cnNlc19wYWNrYWdlQAorCitzeXN0ZW1fcGFja2FnZT1Ac3lzdGVtX3BhY2thZ2VACitwZ21wYXRoX3BhY2thZ2U9QHBnbXBhdGhfcGFja2FnZUAKK3BnbXByaXZzX3BhY2thZ2U9QHBnbXByaXZzX3BhY2thZ2VACitzZXJ2aWNlX3BhY2thZ2U9QHNlcnZpY2VfcGFja2FnZUAKK3BhcmFtc19wYWNrYWdlPUBwYXJhbXNfcGFja2FnZUAKK2R5bmxkX3BhY2thZ2U9QGR5bmxkX3BhY2thZ2VACityZ3hfcGFja2FnZT1Acmd4X3BhY2thZ2VACitjaGFyc2V0X3BhY2thZ2U9QGNoYXJzZXRfcGFja2FnZUAKK2hvc3RjbWRfcGFja2FnZT1AaG9zdGNtZF9wYWNrYWdlQAorbW50cHRfcGFja2FnZT1AbW50cHRfcGFja2FnZUAKK21udGZzX3BhY2thZ2U9QG1udGZzX3BhY2thZ2VACitrYmRfcGFja2FnZT1Aa2JkX3BhY2thZ2VACitiZWxsX3BhY2thZ2U9QGJlbGxfcGFja2FnZUAKK2xlZHNfcGFja2FnZT1AbGVkc19wYWNrYWdlQAorYmVlcF9wYWNrYWdlPUBiZWVwX3BhY2thZ2VACitwY21fcGFja2FnZT1AcGNtX3BhY2thZ2VACittaWRpX3BhY2thZ2U9QG1pZGlfcGFja2FnZUAKK2ZtX3BhY2thZ2U9QGZtX3BhY2thZ2VACitzZXJpYWxfcGFja2FnZT1Ac2VyaWFsX3BhY2thZ2VACit1c2JfcGFja2FnZT1AdXNiX3BhY2thZ2VACitibHVldG9vdGhfcGFja2FnZT1AYmx1ZXRvb3RoX3BhY2thZ2VACitwb3J0c19wYWNrYWdlPUBwb3J0c19wYWNrYWdlQAorCitpbml0X3BhdGg9QGluaXRfcGF0aEAKK3N0ZGVycl9wYXRoPUBzdGRlcnJfcGF0aEAKKworaGF2ZV9hcGk9QGJybHR0eV9lbmFibGVkX2FwaUAKK2hhdmVfamF2YV9iaW5kaW5ncz1AYnJsdHR5X2VuYWJsZWRfamF2YV9iaW5kaW5nc0AKK2hhdmVfbGlzcF9iaW5kaW5ncz1AYnJsdHR5X2VuYWJsZWRfbGlzcF9iaW5kaW5nc0AKK2hhdmVfb2NhbWxfYmluZGluZ3M9QGJybHR0eV9lbmFibGVkX29jYW1sX2JpbmRpbmdzQAoraGF2ZV9weXRob25fYmluZGluZ3M9QGJybHR0eV9lbmFibGVkX3B5dGhvbl9iaW5kaW5nc0AKK2hhdmVfdGNsX2JpbmRpbmdzPUBicmx0dHlfZW5hYmxlZF90Y2xfYmluZGluZ3NACisKK2FwaV9uYW1lPUBhcGlfbmFtZUAKK2FwaV92ZXJzaW9uPUBhcGlfdmVyc2lvbkAKK2FwaV9yZWxlYXNlPUBhcGlfcmVsZWFzZUAKKworYXBpX21ham9yPUBhcGlfbWFqb3JACithcGlfbWlub3I9QGFwaV9taW5vckAKK2FwaV9yZXZpc2lvbj1AYXBpX3JldmlzaW9uQAorCithcGlfcGFyYW1ldGVycz1AYXBpX3BhcmFtZXRlcnNACithcGlfc29ja2V0X3BhdGg9QEJSTEFQSV9TT0NLRVRQQVRIQAorYXBpX2F1dGhrZXlfZmlsZT1AQlJMQVBJX0VUQ0RJUkAvQGFwaV9hdXRoa2V5ZmlsZUAKKwpkaWZmIC0tZ2l0IGEvYnJsdHR5LnNwZWMuaW4gYi9icmx0dHkuc3BlYy5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYjQxNThmCi0tLSAvZGV2L251bGwKKysrIGIvYnJsdHR5LnNwZWMuaW4KQEAgLTAsMCArMSw4MTYgQEAKKyMgQGNvbmZpZ3VyZV9pbnB1dEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyMgICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisjCisjIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyMKKyMgQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitOYW1lOiBAUEFDS0FHRV9UQVJOQU1FQAorVmVyc2lvbjogQFBBQ0tBR0VfVkVSU0lPTkAKK1JlbGVhc2U6IDEKK0dyb3VwOiBTeXN0ZW0gRW52aXJvbm1lbnQvRGFlbW9ucworTGljZW5zZTogTEdQTAorCitWZW5kb3I6IFRoZSBCUkxUVFkgRGV2ZWxvcGVycworUGFja2FnZXI6IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4KK1VSTDogQFBBQ0tBR0VfVVJMQAorU291cmNlOiBAUEFDS0FHRV9VUkxAL2FyY2hpdmUvJXtuYW1lfS0le3ZlcnNpb259LnRhci5negorCitCdWlsZFJvb3Q6ICV7X3RtcHBhdGh9LyV7bmFtZX0tJXt2ZXJzaW9ufS1JbnN0YWxsUm9vdAorJWRlZmluZSBfcGtnbGliZGlyICV7X2xpYmRpcn0vJXtuYW1lfQorJWRlZmluZSBfcGtnbGliZXhlY2RpciAle19saWJleGVjZGlyfS8le25hbWV9CisKK1JlcXVpcmVzOiBjbGRyLWVtb2ppLWFubm90YXRpb24KK1JlcXVpcmVzOiBkYnVzLWxpYnMKK1JlcXVpcmVzOiBleHBhdAorUmVxdWlyZXM6IGxpYmNhcAorUmVxdWlyZXM6IGxpYmljdQorUmVxdWlyZXM6IGxpYmxvdWlzCitSZXF1aXJlczogcGNyZTItdXRmMzIKK1JlcXVpcmVzOiBwb2xraXQtbGlicworCitCdWlsZFJlcXVpcmVzOiBzeXN0ZW1kLXJwbS1tYWNyb3MKKworQnVpbGRSZXF1aXJlczogL2Jpbi9zaAorQnVpbGRSZXF1aXJlczogL3Vzci9iaW4vZW52CisKK0J1aWxkUmVxdWlyZXM6IGJhc2gKK0J1aWxkUmVxdWlyZXM6IGdhd2sKK0J1aWxkUmVxdWlyZXM6IGNvcmV1dGlscworQnVpbGRSZXF1aXJlczogYmludXRpbHMKK0J1aWxkUmVxdWlyZXM6IHRjbAorCitCdWlsZFJlcXVpcmVzOiBhdXRvY29uZiA+PSAyLjUzCitCdWlsZFJlcXVpcmVzOiBhdXRvbWFrZQorQnVpbGRSZXF1aXJlczogbWFrZQorQnVpbGRSZXF1aXJlczogcGtnY29uZi1wa2ctY29uZmlnCitCdWlsZFJlcXVpcmVzOiBnY2MKKworQnVpbGRSZXF1aXJlczogYWxzYS1saWItZGV2ZWwKK0J1aWxkUmVxdWlyZXM6IGJsdWV6LWxpYnMtZGV2ZWwKK0J1aWxkUmVxdWlyZXM6IGRidXMtZGV2ZWwKK0J1aWxkUmVxdWlyZXM6IGV4cGF0LWRldmVsCitCdWlsZFJlcXVpcmVzOiBnbGliYy1kZXZlbAorQnVpbGRSZXF1aXJlczogZ2xpYjItZGV2ZWwKK0J1aWxkUmVxdWlyZXM6IGdwbS1kZXZlbAorQnVpbGRSZXF1aXJlczogbGliY2FwLWRldmVsCitCdWlsZFJlcXVpcmVzOiBsaWJpY3UtZGV2ZWwKK0J1aWxkUmVxdWlyZXM6IGxpYmxvdWlzLWRldmVsCitCdWlsZFJlcXVpcmVzOiBuY3Vyc2VzLWRldmVsCitCdWlsZFJlcXVpcmVzOiBwY3JlMi1kZXZlbAorQnVpbGRSZXF1aXJlczogcG9sa2l0LWRldmVsCitCdWlsZFJlcXVpcmVzOiBzeXN0ZW1kLWRldmVsCisKK0J1aWxkUmVxdWlyZXM6IGdldHRleHQKK0J1aWxkUmVxdWlyZXM6IGdyb2ZmCitCdWlsZFJlcXVpcmVzOiBkb3h5Z2VuCitCdWlsZFJlcXVpcmVzOiBsaW51eGRvYy10b29scworQnVpbGRSZXF1aXJlczogcHl0aG9uMy1kb2N1dGlscworQnVpbGRSZXF1aXJlczogcnN0MnR4dAorCitBdXRvUHJvdjogbm8KK0F1dG9SZXE6IHllcworCitQcm92aWRlczogYnJsYXBpLXNlcnZlcgorUHJvdmlkZXM6IGNvbmZpZygle25hbWV9KSA9ICV7dmVyc2lvbn0KKworU3VtbWFyeTogQnJhaWxsZSBkaXNwbGF5IGRyaXZlciBmb3IgTGludXgvVW5peC4KKyVkZXNjcmlwdGlvbgorQlJMVFRZIGlzIGEgYmFja2dyb3VuZCBwcm9jZXNzIChkYWVtb24pIHdoaWNoIHByb3ZpZGVzIGFjY2VzcyB0bwordGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEKK3JlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4gIEl0IGRyaXZlcyB0aGUgYnJhaWxsZSBkaXNwbGF5LCBhbmQKK3Byb3ZpZGVzIGNvbXBsZXRlIHNjcmVlbiByZXZpZXcgZnVuY3Rpb25hbGl0eS4gIFNvbWUgc3BlZWNoIGNhcGFiaWxpdHkKK2hhcyBhbHNvIGJlZW4gaW5jb3Jwb3JhdGVkLgorCitJbnN0YWxsIHRoaXMgcGFja2FnZSBpZiB5b3UgdXNlIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorCisKKyVwYWNrYWdlIC1uIGJybHR0eS1icmFpbGxlLWJybGFwaQorVmVyc2lvbjogQFBBQ0tBR0VfVkVSU0lPTkAKK1JlbGVhc2U6IDEKK0dyb3VwOiBTeXN0ZW0gRW52aXJvbm1lbnQvRGFlbW9ucworTGljZW5zZTogTEdQTAorCitBdXRvUHJvdjogbm8KK0F1dG9SZXE6IHllcworCitTdW1tYXJ5OiBCcmxBUEkgYnJhaWxsZSBkcml2ZXIgZm9yIEJSTFRUWS4KKyVkZXNjcmlwdGlvbiAtbiBicmx0dHktYnJhaWxsZS1icmxhcGkKK1RoaXMgcGFja2FnZSBwcm92aWRlcyB0aGUgQnJsQVBJIGJyYWlsbGUgZHJpdmVyIGZvciBCUkxUVFkuCisKK0luc3RhbGwgdGhpcyBwYWNrYWdlIGlmIHlvdSBuZWVkIHRvIGNvbW11bmljYXRlIHdpdGgKK2Fub3RoZXIgaW5zdGFuY2Ugb2YgQlJMVFRZIHdoaWNoIGlzIGFjdHVhbGx5IGluIGNvbnRyb2wKK29mIHRoZSBicmFpbGxlIGRldmljZS4KKworCislcGFja2FnZSAtbiBicmx0dHktYnJhaWxsZS14d2luZG93CitWZXJzaW9uOiBAUEFDS0FHRV9WRVJTSU9OQAorUmVsZWFzZTogMQorR3JvdXA6IFN5c3RlbSBFbnZpcm9ubWVudC9EYWVtb25zCitMaWNlbnNlOiBMR1BMCisKK1JlcXVpcmVzOiBsaWJYMTEKKworQnVpbGRSZXF1aXJlczogeG9yZy14MTEtcHJvdG8tZGV2ZWwKK0J1aWxkUmVxdWlyZXM6IGxpYlgxMS1kZXZlbAorQnVpbGRSZXF1aXJlczogbGliWHQtZGV2ZWwKK0J1aWxkUmVxdWlyZXM6IG5lWHRhdy1kZXZlbAorCitBdXRvUHJvdjogbm8KK0F1dG9SZXE6IHllcworCitTdW1tYXJ5OiBYV2luZG93IGJyYWlsbGUgZHJpdmVyIGZvciBCUkxUVFkuCislZGVzY3JpcHRpb24gLW4gYnJsdHR5LWJyYWlsbGUteHdpbmRvdworVGhpcyBwYWNrYWdlIHByb3ZpZGVzIHRoZSBYV2luZG93IGJyYWlsbGUgZHJpdmVyIGZvciBCUkxUVFkuCitUaGlzIGRyaXZlciBwcmVzZW50cyBhIHZpcnR1YWwgYnJhaWxsZSBkZXZpY2Ugd2l0aGluIGEgZ3JhcGhpY2FsCit1c2VyIGludGVyZmFjZS4gSXQgaXMgcHJpbWFyaWx5IGludGVuZGVkIGZvciBzaWdodGVkIGRldmVsb3BlcnMKK3dobyBkb24ndCBoYXZlIGFjY2VzcyB0byBhIHJlYWwgYnJhaWxsZSBkZXZpY2UgYnV0IHN0aWxsIHdpc2ggdG8KK2Fzc2VzcyB0aGUgYWNjZXNzaWJpbGl0eSBvZiB0aGVpciBhcHBsaWNhdGlvbnMuCisKK0luc3RhbGwgdGhpcyBwYWNrYWdlIGlmIHlvdSB3b3VsZCBsaWtlIHRvIHNlZSBob3cgdXNhYmxlIGFuCithcHBsaWNhdGlvbiB3b3VsZCBiZSBieSBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIGJyYWlsbGUgZGV2aWNlLgorCisKKyVwYWNrYWdlIC1uIGJybHR0eS1zcGVlY2gtZXNwZWFrCitWZXJzaW9uOiBAUEFDS0FHRV9WRVJTSU9OQAorUmVsZWFzZTogMQorR3JvdXA6IFN5c3RlbSBFbnZpcm9ubWVudC9EYWVtb25zCitMaWNlbnNlOiBMR1BMCisKK1JlcXVpcmVzOiBlc3BlYWsKKworQnVpbGRSZXF1aXJlczogZXNwZWFrLWRldmVsCisKK0F1dG9Qcm92OiBubworQXV0b1JlcTogeWVzCisKK1N1bW1hcnk6IGVTcGVhayBzcGVlY2ggZHJpdmVyIGZvciBCUkxUVFkuCislZGVzY3JpcHRpb24gLW4gYnJsdHR5LXNwZWVjaC1lc3BlYWsKK1RoaXMgcGFja2FnZSBwcm92aWRlcyB0aGUgZVNwZWFrIHNwZWVjaCBkcml2ZXIgZm9yIEJSTFRUWS4KKworSW5zdGFsbCB0aGlzIHBhY2thZ2UgaWYgeW91IHdvdWxkIGxpa2UgdG8gYmUgYWJsZSB0byB1c2UgdGhlCitlU3BlYWsgdGV4dC10by1zcGVlY2ggZW5naW5lLgorCisKKyVwYWNrYWdlIC1uIGJybHR0eS1zcGVlY2gtZXNwZWFrLW5nCitWZXJzaW9uOiBAUEFDS0FHRV9WRVJTSU9OQAorUmVsZWFzZTogMQorR3JvdXA6IFN5c3RlbSBFbnZpcm9ubWVudC9EYWVtb25zCitMaWNlbnNlOiBMR1BMCisKK1JlcXVpcmVzOiBlc3BlYWstbmcKKworQnVpbGRSZXF1aXJlczogZXNwZWFrLW5nLWRldmVsCisKK0F1dG9Qcm92OiBubworQXV0b1JlcTogeWVzCisKK1N1bW1hcnk6IGVTcGVhay1ORyBzcGVlY2ggZHJpdmVyIGZvciBCUkxUVFkuCislZGVzY3JpcHRpb24gLW4gYnJsdHR5LXNwZWVjaC1lc3BlYWstbmcKK1RoaXMgcGFja2FnZSBwcm92aWRlcyB0aGUgZVNwZWFrLU5HIHNwZWVjaCBkcml2ZXIgZm9yIEJSTFRUWS4KKworSW5zdGFsbCB0aGlzIHBhY2thZ2UgaWYgeW91IHdvdWxkIGxpa2UgdG8gYmUgYWJsZSB0byB1c2UgdGhlCitlU3BlYWstTkcgdGV4dC10by1zcGVlY2ggZW5naW5lLgorCisKKyVwYWNrYWdlIC1uIGJybHR0eS1zcGVlY2gtZmVzdGl2YWwKK1ZlcnNpb246IEBQQUNLQUdFX1ZFUlNJT05ACitSZWxlYXNlOiAxCitHcm91cDogU3lzdGVtIEVudmlyb25tZW50L0RhZW1vbnMKK0xpY2Vuc2U6IExHUEwKKworUmVxdWlyZXM6IGZlc3RpdmFsCisKK0F1dG9Qcm92OiBubworQXV0b1JlcTogeWVzCisKK1N1bW1hcnk6IEZlc3RpdmFsIHNwZWVjaCBkcml2ZXIgZm9yIEJSTFRUWS4KKyVkZXNjcmlwdGlvbiAtbiBicmx0dHktc3BlZWNoLWZlc3RpdmFsCitUaGlzIHBhY2thZ2UgcHJvdmlkZXMgdGhlIEZlc3RpdmFsIHNwZWVjaCBkcml2ZXIgZm9yIEJSTFRUWS4KKworSW5zdGFsbCB0aGlzIHBhY2thZ2UgaWYgeW91IHdvdWxkIGxpa2UgdG8gYmUgYWJsZSB0byB1c2UgdGhlCitGZXN0aXZhbCB0ZXh0LXRvLXNwZWVjaCBlbmdpbmUuCisKKworJXBhY2thZ2UgLW4gYnJsdHR5LXNwZWVjaC1mbGl0ZQorVmVyc2lvbjogQFBBQ0tBR0VfVkVSU0lPTkAKK1JlbGVhc2U6IDEKK0dyb3VwOiBTeXN0ZW0gRW52aXJvbm1lbnQvRGFlbW9ucworTGljZW5zZTogTEdQTAorCitSZXF1aXJlczogZmxpdGUKKworQnVpbGRSZXF1aXJlczogZmxpdGUtZGV2ZWwKKworQXV0b1Byb3Y6IG5vCitBdXRvUmVxOiB5ZXMKKworU3VtbWFyeTogRmVzdGl2YWwgTGl0ZSBzcGVlY2ggZHJpdmVyIGZvciBCUkxUVFkuCislZGVzY3JpcHRpb24gLW4gYnJsdHR5LXNwZWVjaC1mbGl0ZQorVGhpcyBwYWNrYWdlIHByb3ZpZGVzIHRoZSBGZXN0aXZhbCBMaXRlIHNwZWVjaCBkcml2ZXIgZm9yIEJSTFRUWS4KKworSW5zdGFsbCB0aGlzIHBhY2thZ2UgaWYgeW91IHdvdWxkIGxpa2UgdG8gYmUgYWJsZSB0byB1c2UgdGhlCitGZXN0aXZhbCBMaXRlIHRleHQtdG8tc3BlZWNoIGVuZ2luZS4KKworCislcGFja2FnZSAtbiBicmx0dHktc3BlZWNoLXNwZWVjaGQKK1ZlcnNpb246IEBQQUNLQUdFX1ZFUlNJT05ACitSZWxlYXNlOiAxCitHcm91cDogU3lzdGVtIEVudmlyb25tZW50L0RhZW1vbnMKK0xpY2Vuc2U6IExHUEwKKworUmVxdWlyZXM6IHNwZWVjaC1kaXNwYXRjaGVyCisKK0J1aWxkUmVxdWlyZXM6IHNwZWVjaC1kaXNwYXRjaGVyLWRldmVsCisKK0F1dG9Qcm92OiBubworQXV0b1JlcTogeWVzCisKK1N1bW1hcnk6IFNwZWVjaCBEaXNwYXRjaGVyIHNwZWVjaCBkcml2ZXIgZm9yIEJSTFRUWS4KKyVkZXNjcmlwdGlvbiAtbiBicmx0dHktc3BlZWNoLXNwZWVjaGQKK1RoaXMgcGFja2FnZSBwcm92aWRlcyB0aGUgU3BlZWNoIERpc3BhdGNoZXIgc3BlZWNoIGRyaXZlciBmb3IgQlJMVFRZLgorCitJbnN0YWxsIHRoaXMgcGFja2FnZSBpZiB5b3Ugd291bGQgbGlrZSB0byBiZSBhYmxlIHRvIHVzZSB0aGUKK1NwZWVjaCBEaXNwYXRjaGVyIHRleHQtdG8tc3BlZWNoIHNlcnZlci4KKworCislcGFja2FnZSAtbiBicmx0dHktc2NyZWVuLWF0c3BpMgorVmVyc2lvbjogQFBBQ0tBR0VfVkVSU0lPTkAKK1JlbGVhc2U6IDEKK0dyb3VwOiBTeXN0ZW0gRW52aXJvbm1lbnQvRGFlbW9ucworTGljZW5zZTogTEdQTAorCitSZXF1aXJlczogZGJ1cy1saWJzCisKK0J1aWxkUmVxdWlyZXM6IGF0LXNwaTItY29yZS1kZXZlbAorQnVpbGRSZXF1aXJlczogeG9yZy14MTEtcHJvdG8tZGV2ZWwKK0J1aWxkUmVxdWlyZXM6IGRidXMtZGV2ZWwKKworQXV0b1Byb3Y6IG5vCitBdXRvUmVxOiB5ZXMKKworU3VtbWFyeTogQVQtU1BJMiBzY3JlZW4gZHJpdmVyIGZvciBCUkxUVFkuCislZGVzY3JpcHRpb24gLW4gYnJsdHR5LXNjcmVlbi1hdHNwaTIKK1RoaXMgcGFja2FnZSBwcm92aWRlcyB0aGUgQVQtU1BJMiBzY3JlZW4gZHJpdmVyIGZvciBCUkxUVFkuCisKK0luc3RhbGwgdGhpcyBwYWNrYWdlIGlmIHlvdSB3b3VsZCBsaWtlIHRvIGJlIGFibGUgdG8KK2FjY2VzcyBncmFwaGljYWwgYXBwbGljYXRpb25zIHZpYSB0aGUgRC1CdXMgcG9ydCBvZgordGhlIEFzc2lzdGl2ZSBUZWNobm9sb2d5IFNlcnZpY2UgUHJvdmlkZXIgSW50ZXJmYWNlLgorCisKKyVwYWNrYWdlIC1uIGJybHR0eS1zY3JlZW4tc2NyZWVuCitWZXJzaW9uOiBAUEFDS0FHRV9WRVJTSU9OQAorUmVsZWFzZTogMQorR3JvdXA6IFN5c3RlbSBFbnZpcm9ubWVudC9EYWVtb25zCitMaWNlbnNlOiBMR1BMCisKK0F1dG9Qcm92OiBubworQXV0b1JlcTogeWVzCitSZXF1aXJlczogc2NyZWVuCisKK1N1bW1hcnk6IFNjcmVlbiBzY3JlZW4gZHJpdmVyIGZvciBCUkxUVFkuCislZGVzY3JpcHRpb24gLW4gYnJsdHR5LXNjcmVlbi1zY3JlZW4KK1RoaXMgcGFja2FnZSBwcm92aWRlcyB0aGUgU2NyZWVuIHNjcmVlbiBkcml2ZXIgZm9yIEJSTFRUWS4KKworSW5zdGFsbCB0aGlzIHBhY2thZ2UgaWYgeW91IHdvdWxkIGxpa2UgdG8gYmUgYWJsZSB0bworZGlyZWN0bHkgYWNjZXNzIHNlc3Npb24gd2luZG93cyBtYWludGFpbmVkIGJ5IHRoZQorc2NyZWVuIHByb2dyYW0uCisKKworJXBhY2thZ2UgLW4gYnJsdHR5LXV0aWxzCitWZXJzaW9uOiBAUEFDS0FHRV9WRVJTSU9OQAorUmVsZWFzZTogMQorR3JvdXA6IERldmVsb3BtZW50L1Rvb2xzCitMaWNlbnNlOiBMR1BMCisKK1JlcXVpcmVzOiBsaWJpY3UKK1JlcXVpcmVzOiBleHBhdAorUmVxdWlyZXM6IGNsZHItZW1vamktYW5ub3RhdGlvbgorCitCdWlsZFJlcXVpcmVzOiBsaWJpY3UtZGV2ZWwKK0J1aWxkUmVxdWlyZXM6IGV4cGF0LWRldmVsCitCdWlsZFJlcXVpcmVzOiBuY3Vyc2VzLWRldmVsCisKK0F1dG9Qcm92OiBubworQXV0b1JlcTogeWVzCisKK1N1bW1hcnk6IENvbW1hbmRzIGZvciBtYWludGFpbmluZyBCUkxUVFkgZGF0YSBmaWxlcy4KKyVkZXNjcmlwdGlvbiAtbiBicmx0dHktdXRpbHMKK1RoaXMgcGFja2FnZSBwcm92aWRlcyBhIHNldCBvZiBjb21tYW5kcyBmb3IgbWFpbnRhaW5pbmcgQlJMVFRZJ3MgZGF0YWZpbGVzLgorCisKKyVwYWNrYWdlIC1uIGJybHR0eS1kZXZlbAorVmVyc2lvbjogQFBBQ0tBR0VfVkVSU0lPTkAKK1JlbGVhc2U6IDEKK0dyb3VwOiBEZXZlbG9wbWVudC9Ub29scworTGljZW5zZTogTEdQTAorCitBdXRvUHJvdjogbm8KK0F1dG9SZXE6IHllcworCitTdW1tYXJ5OiBIZWFkZXJzIGZvciBCUkxUVFkuCislZGVzY3JpcHRpb24gLW4gYnJsdHR5LWRldmVsCitUaGlzIHBhY2thZ2UgcHJvdmlkZXMgbWFueSBvZiB0aGUgaGVhZGVyIGZpbGVzIGZvciBCUkxUVFkncyBjb3JlLCBhcyB3ZWxsIGFzCitoZWFkZXIgZmlsZXMgd2hpY2ggZGVmaW5lIHRoZSBwYWNrZXRzIGFuZCBrZXlzIGZvciBzZXZlcmFsIGJyYWlsbGUgZGV2aWNlcy4KKworSW5zdGFsbCB0aGlzIHBhY2thZ2UgaWYgeW91J3JlIGRldmVsb3Bpbmcgb3IgbWFpbnRhaW5pbmcgYW4gYXBwbGljYXRpb24gd2hpY2gKK25lZWRzIHRvIChvciB3aXNoZXMgdG8pIHVzZSBmdW5jdGlvbmFsaXR5IHByb3ZpZGVkIGJ5IEJSTFRUWSdzIGNvcmUsIHdoaWNoCituZWVkcyB0byBpbnRlcnByZXQgYW5kL29yIGNyZWF0ZSByYXcgYnJhaWxsZSBkZXZpY2UgcGFja2V0cywgb3Igd2hpY2ggbmVlZHMgdG8KK2ludGVycHJldCBrZXkgY29kZXMgYXMgZGVsaXZlcmVkIGJ5IEJybEFQSSdzIHJhdyBtb2RlLgorCisKKyVwYWNrYWdlIC1uIGJybHR0eS1zeXN0ZW1kCitWZXJzaW9uOiBAUEFDS0FHRV9WRVJTSU9OQAorUmVsZWFzZTogMQorR3JvdXA6IFN5c3RlbSBFbnZpcm9ubWVudC9EYWVtb25zCitMaWNlbnNlOiBMR1BMCitCdWlsZEFyY2g6IG5vYXJjaAorCitBdXRvUHJvdjogbm8KK0F1dG9SZXE6IHllcworUmVxdWlyZXM6IHN5c3RlbWQKKworU3VtbWFyeTogU3lzdGVtZCB1bml0cyBhbmQgd3JhcHBlcnMgZm9yIEJSTFRUWS4KKyVkZXNjcmlwdGlvbiAtbiBicmx0dHktc3lzdGVtZAorVGhpcyBwYWNrYWdlIHByb3ZpZGVzIHRoZSB1bml0cyBhbmQgd3JhcHBlciBmb3IgbWFuYWdpbmcgQlJMVFRZIHZpYSBTeXN0ZW1kLgorCitJbnN0YWxsIHRoaXMgcGFja2FnZSBpZiB5b3UnZCBsaWtlIHRvIG1hbmFnZSBCUkxUVFkgcHJvY2Vzc2VzIHZpYSBTeXN0ZW1kLgorCisKKyVwYWNrYWdlIC1uIGJybHR0eS11ZGV2CitWZXJzaW9uOiBAUEFDS0FHRV9WRVJTSU9OQAorUmVsZWFzZTogMQorR3JvdXA6IFN5c3RlbSBFbnZpcm9ubWVudC9EYWVtb25zCitMaWNlbnNlOiBMR1BMCitCdWlsZEFyY2g6IG5vYXJjaAorCitBdXRvUHJvdjogbm8KK0F1dG9SZXE6IHllcworUmVxdWlyZXM6IHN5c3RlbWQtdWRldgorCitTdW1tYXJ5OiBCUkxUVFkgVWRldiBydWxlcy4KKyVkZXNjcmlwdGlvbiAtbiBicmx0dHktdWRldgorVGhpcyBwYWNrYWdlIHByb3ZpZGVzIHRoZSBydWxlcyBhbmQgdGhlIHdyYXBwZXIgZm9yIG1hbmFnaW5nIEJSTFRUWSB2aWEgVWRldi4KKworSW5zdGFsbCB0aGlzIHBhY2thZ2UgaWYgeW91J2QgbGlrZSB0byBtYW5hZ2UgQlJMVFRZIHByb2Nlc3NlcyB2aWEgVWRldi4KK0l0IGRvZXNuJ3QgaW5jbHVkZSB0aGUgcnVsZXMgZm9yIGJyYWlsbGUgZGV2aWNlcyB0aGF0IHVzZSBnZW5lcmljIFVTQiB0byBzZXJpYWwgYWRhcHRlcnMuCisKKworJXBhY2thZ2UgLW4gYnJsdHR5LXVkZXYtZ2VuZXJpYworVmVyc2lvbjogQFBBQ0tBR0VfVkVSU0lPTkAKK1JlbGVhc2U6IDEKK0dyb3VwOiBTeXN0ZW0gRW52aXJvbm1lbnQvRGFlbW9ucworTGljZW5zZTogTEdQTAorQnVpbGRBcmNoOiBub2FyY2gKKworQXV0b1Byb3Y6IG5vCitBdXRvUmVxOiB5ZXMKK1JlcXVpcmVzOiBzeXN0ZW1kLXVkZXYKKworU3VtbWFyeTogQlJMVFRZIFVkZXYgcnVsZXMgZm9yIGJyYWlsbGUgZGV2aWNlcyB0aGF0IHVzZSBhIGdlbmVyaWMgVVNCIHRvIHNlcmlhbCBhZGFwdGVyLgorJWRlc2NyaXB0aW9uIC1uIGJybHR0eS11ZGV2LWdlbmVyaWMKK1RoaXMgcGFja2FnZSBwcm92aWRlcyBhZGRpdGlvbmFsIHJ1bGVzIGZvciBtYW5hZ2luZyBCUkxUVFkgdmlhIFVkZXYuCisKK0luc3RhbGwgdGhpcyBwYWNrYWdlIGluIG9yZGVyIHRvIHN1cHBvcnQgYnJhaWxsZSBkZXZpY2VzIHRoYXQgdXNlIGEgZ2VuZXJpYyBVU0IgdG8gc2VyaWFsIGFkYXB0ZXIuCisKKworJXBhY2thZ2UgLW4gYnJsdHR5LWRyYWN1dAorVmVyc2lvbjogQFBBQ0tBR0VfVkVSU0lPTkAKK1JlbGVhc2U6IDEKK0dyb3VwOiBTeXN0ZW0gRW52aXJvbm1lbnQvRGFlbW9ucworTGljZW5zZTogTEdQTAorQnVpbGRBcmNoOiBub2FyY2gKKworQXV0b1Byb3Y6IG5vCitBdXRvUmVxOiB5ZXMKK1JlcXVpcmVzOiBkcmFjdXQKK1JlcXVpcmVzOiBicmx0dHktdXRpbHMKKworU3VtbWFyeTogRHJhY3V0IG1vZHVsZSBmb3IgQlJMVFRZLgorJWRlc2NyaXB0aW9uIC1uIGJybHR0eS1kcmFjdXQKK1RoaXMgcGFja2FnZSBwcm92aWRlcyB0aGUgbW9kdWxlIGZvciBhZGRpbmcgQlJMVFRZIHRvIGFuIGluaXRpYWwgcmFtZGlzayBpbWFnZS4KKworSW5zdGFsbCB0aGlzIHBhY2thZ2UgaWYgeW91J2QgbGlrZSB0byBoYXZlIGJyYWlsbGUgYWNjZXNzaWJpbGl0eSBCUkxUVFkgcHJvY2Vzc2VzIHZpYSBVZGV2LgorCisKKyVwYWNrYWdlIC1uIGJybGFwaQorVmVyc2lvbjogQGFwaV9yZWxlYXNlQAorUmVsZWFzZTogMQorR3JvdXA6IFN5c3RlbSBFbnZpcm9ubWVudC9MaWJyYXJpZXMKK0xpY2Vuc2U6IExHUEwKKworQXV0b1Byb3Y6IHllcworQXV0b1JlcTogeWVzCisKK1N1bW1hcnk6IEFwcGxpYXRpb24gUHJvZ3JhbW1pbmcgSW50ZXJmYWNlIGZvciBCUkxUVFkuCislZGVzY3JpcHRpb24gLW4gYnJsYXBpCitUaGlzIHBhY2thZ2UgcHJvdmlkZXMgdGhlIHJ1bi10aW1lIHN1cHBvcnQgZm9yIHRoZSBBcHBsaWNhdGlvbgorUHJvZ3JhbW1pbmcgSW50ZXJmYWNlIHRvIEJSTFRUWS4KKworSW5zdGFsbCB0aGlzIHBhY2thZ2UgaWYgeW91IGhhdmUgYW4gYXBwbGljYXRpb24KK3doaWNoIGRpcmVjdGx5IGFjY2Vzc2VzIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorCisKKyVwYWNrYWdlIC1uIGJybGFwaS11dGlscworVmVyc2lvbjogQGFwaV9yZWxlYXNlQAorUmVsZWFzZTogMQorR3JvdXA6IEFwcGxpY2F0aW9ucy9TeXN0ZW0KK0xpY2Vuc2U6IExHUEwKKworUmVxdWlyZXM6IGxpYlgxMQorCitCdWlsZFJlcXVpcmVzOiB4b3JnLXgxMS1wcm90by1kZXZlbAorQnVpbGRSZXF1aXJlczogbGliWDExLWRldmVsCitCdWlsZFJlcXVpcmVzOiBsaWJYdHN0LWRldmVsCisKK0F1dG9Qcm92OiBubworQXV0b1JlcTogeWVzCisKK1N1bW1hcnk6IEFwcGxpYXRpb24gUHJvZ3JhbW1pbmcgSW50ZXJmYWNlIGZvciBCUkxUVFkuCislZGVzY3JpcHRpb24gLW4gYnJsYXBpLXV0aWxzCitUaGlzIHBhY2thZ2UgcHJvdmlkZXMgYSBzZXQgb2YgY29tbWFuZHMgdGhhdCB1c2UgdGhlIEJybEFQSSBpbnRlcmZhY2UuCisKKworJXBhY2thZ2UgLW4gYnJsYXBpLWRldmVsCitWZXJzaW9uOiBAYXBpX3JlbGVhc2VACitSZWxlYXNlOiAxCitHcm91cDogRGV2ZWxvcG1lbnQvTGlicmFyaWVzCitMaWNlbnNlOiBMR1BMCisKK0F1dG9Qcm92OiB5ZXMKK0F1dG9SZXE6IHllcworCitTdW1tYXJ5OiBIZWFkZXJzLCBzdGF0aWMgYXJjaGl2ZSwgYW5kIGRvY3VtZW50YXRpb24gZm9yIEJybEFQSS4KKyVkZXNjcmlwdGlvbiAtbiBicmxhcGktZGV2ZWwKK1RoaXMgcGFja2FnZSBwcm92aWRlcyB0aGUgaGVhZGVyIGZpbGVzLCBzdGF0aWMgYXJjaGl2ZSwgc2hhcmVkIG9iamVjdAorbGlua2VyIHJlZmVyZW5jZSwgYW5kIHJlZmVyZW5jZSBkb2N1bWVudGF0aW9uIGZvciBCcmxBUEkgKHRoZQorQXBwbGljYXRpb24gUHJvZ3JhbW1pbmcgSW50ZXJmYWNlIHRvIEJSTFRUWSkuICBJdCBlbmFibGVzIHRoZQoraW1wbGVtZW50YXRpb24gb2YgYXBwbGljYXRpb25zIHdoaWNoIHRha2UgZGlyZWN0IGFkdmFudGFnZSBvZiBhCityZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkgaW4gb3JkZXIgdG8gcHJlc2VudCBpbmZvcm1hdGlvbiBpbiB3YXlzCit3aGljaCBhcmUgbW9yZSBhcHByb3ByaWF0ZSBmb3IgYmxpbmQgdXNlcnMgYW5kL29yIHRvIHByb3ZpZGUgdXNlcgoraW50ZXJmYWNlcyB3aGljaCBhcmUgbW9yZSBzcGVjaWZpY2FsbHkgYXR1bmVkIHRvIHRoZWlyIG5lZWRzLgorCitJbnN0YWxsIHRoaXMgcGFja2FnZSBpZiB5b3UncmUgZGV2ZWxvcGluZyBvciBtYWludGFpbmluZyBhbiBhcHBsaWNhdGlvbgord2hpY2ggZGlyZWN0bHkgYWNjZXNzZXMgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisKKworJXBhY2thZ2UgLW4gamF2YS1icmxhcGkKK1ZlcnNpb246IEBhcGlfcmVsZWFzZUAKK1JlbGVhc2U6IDEKK0dyb3VwOiBTeXN0ZW0gRW52aXJvbm1lbnQvTGlicmFyaWVzCitMaWNlbnNlOiBMR1BMCisKK0J1aWxkUmVxdWlyZXM6IGphdmEKK0J1aWxkUmVxdWlyZXM6IGphdmEtZGV2ZWwKKworQXV0b1Byb3Y6IG5vCitBdXRvUmVxOiB5ZXMKKworU3VtbWFyeTogSmF2YSBiaW5kaW5ncyBmb3IgQnJsQVBJLgorJWRlc2NyaXB0aW9uIC1uIGphdmEtYnJsYXBpCitUaGlzIHBhY2thZ2UgcHJvdmlkZXMgdGhlIEphdmEgYmluZGluZ3MgZm9yIEJybEFQSSwKK3doaWNoIGlzIHRoZSBBcHBsaWNhdGlvbiBQcm9ncmFtbWluZyBJbnRlcmZhY2UgdG8gQlJMVFRZLgorCitJbnN0YWxsIHRoaXMgcGFja2FnZSBpZiB5b3UgaGF2ZSBhIEphdmEgYXBwbGljYXRpb24KK3doaWNoIGRpcmVjdGx5IGFjY2Vzc2VzIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorCisKKyVwYWNrYWdlIC1uIGx1YS1icmxhcGkKK1ZlcnNpb246IEBhcGlfcmVsZWFzZUAKK1JlbGVhc2U6IDEKK0dyb3VwOiBTeXN0ZW0gRW52aXJvbm1lbnQvTGlicmFyaWVzCitMaWNlbnNlOiBMR1BMCisKK0J1aWxkUmVxdWlyZXM6IGx1YQorQnVpbGRSZXF1aXJlczogbHVhLWRldmVsCisKK0F1dG9Qcm92OiBubworQXV0b1JlcTogeWVzCisKK1N1bW1hcnk6IEx1YSBiaW5kaW5ncyBmb3IgQnJsQVBJLgorJWRlc2NyaXB0aW9uIC1uIGx1YS1icmxhcGkKK1RoaXMgcGFja2FnZSBwcm92aWRlcyB0aGUgTHVhIGJpbmRpbmdzIGZvciBCcmxBUEksCit3aGljaCBpcyB0aGUgQXBwbGljYXRpb24gUHJvZ3JhbW1pbmcgSW50ZXJmYWNlIHRvIEJSTFRUWS4KKworSW5zdGFsbCB0aGlzIHBhY2thZ2UgaWYgeW91IGhhdmUgYW4gTHVhIGFwcGxpY2F0aW9uCit3aGljaCBkaXJlY3RseSBhY2Nlc3NlcyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKworCislcGFja2FnZSAtbiBvY2FtbC1icmxhcGkKK1ZlcnNpb246IEBhcGlfcmVsZWFzZUAKK1JlbGVhc2U6IDEKK0dyb3VwOiBTeXN0ZW0gRW52aXJvbm1lbnQvTGlicmFyaWVzCitMaWNlbnNlOiBMR1BMCisKK0J1aWxkUmVxdWlyZXM6IG9jYW1sCitCdWlsZFJlcXVpcmVzOiBvY2FtbC1maW5kbGliCisKK0F1dG9Qcm92OiBubworQXV0b1JlcTogeWVzCisKK1N1bW1hcnk6IE9DYW1sIGJpbmRpbmdzIGZvciBCcmxBUEkuCislZGVzY3JpcHRpb24gLW4gb2NhbWwtYnJsYXBpCitUaGlzIHBhY2thZ2UgcHJvdmlkZXMgdGhlIE9DYW1sIGJpbmRpbmdzIGZvciBCcmxBUEksCit3aGljaCBpcyB0aGUgQXBwbGljYXRpb24gUHJvZ3JhbW1pbmcgSW50ZXJmYWNlIHRvIEJSTFRUWS4KKworSW5zdGFsbCB0aGlzIHBhY2thZ2UgaWYgeW91IGhhdmUgYW4gT0NhbWwgYXBwbGljYXRpb24KK3doaWNoIGRpcmVjdGx5IGFjY2Vzc2VzIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorCisKKyVwYWNrYWdlIC1uIHB5dGhvbi1icmxhcGkKK1ZlcnNpb246IEBhcGlfcmVsZWFzZUAKK1JlbGVhc2U6IDEKK0dyb3VwOiBTeXN0ZW0gRW52aXJvbm1lbnQvTGlicmFyaWVzCitMaWNlbnNlOiBMR1BMCisKK0J1aWxkUmVxdWlyZXM6IHB5dGhvbjMKK0J1aWxkUmVxdWlyZXM6IHB5dGhvbjMtZGV2ZWwKK0J1aWxkUmVxdWlyZXM6IHB5dGhvbjMtQ3l0aG9uCisKK0F1dG9Qcm92OiBubworQXV0b1JlcTogeWVzCisKK1N1bW1hcnk6IFB5dGhvbiBiaW5kaW5ncyBmb3IgQnJsQVBJLgorJWRlc2NyaXB0aW9uIC1uIHB5dGhvbi1icmxhcGkKK1RoaXMgcGFja2FnZSBwcm92aWRlcyB0aGUgUHl0aG9uIGJpbmRpbmdzIGZvciBCcmxBUEksCit3aGljaCBpcyB0aGUgQXBwbGljYXRpb24gUHJvZ3JhbW1pbmcgSW50ZXJmYWNlIHRvIEJSTFRUWS4KKworSW5zdGFsbCB0aGlzIHBhY2thZ2UgaWYgeW91IGhhdmUgYSBQeXRob24gYXBwbGljYXRpb24KK3doaWNoIGRpcmVjdGx5IGFjY2Vzc2VzIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorCisKKyVwYWNrYWdlIC1uIHRjbC1icmxhcGkKK1ZlcnNpb246IEBhcGlfcmVsZWFzZUAKK1JlbGVhc2U6IDEKK0dyb3VwOiBTeXN0ZW0gRW52aXJvbm1lbnQvTGlicmFyaWVzCitMaWNlbnNlOiBMR1BMCisKK0J1aWxkUmVxdWlyZXM6IHRjbAorQnVpbGRSZXF1aXJlczogdGNsLWRldmVsCisKK0F1dG9Qcm92OiBubworQXV0b1JlcTogeWVzCisKK1N1bW1hcnk6IFRjbCBiaW5kaW5ncyBmb3IgQnJsQVBJLgorJWRlc2NyaXB0aW9uIC1uIHRjbC1icmxhcGkKK1RoaXMgcGFja2FnZSBwcm92aWRlcyB0aGUgVGNsIGJpbmRpbmdzIGZvciBCcmxBUEksCit3aGljaCBpcyB0aGUgQXBwbGljYXRpb24gUHJvZ3JhbW1pbmcgSW50ZXJmYWNlIHRvIEJSTFRUWS4KKworSW5zdGFsbCB0aGlzIHBhY2thZ2UgaWYgeW91IGhhdmUgYSBUY2wgYXBwbGljYXRpb24KK3doaWNoIGRpcmVjdGx5IGFjY2Vzc2VzIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorCisKKyVwcmVwCisjICVzZXR1cCAtbiAle25hbWV9LSV7dmVyc2lvbn0KKyVzZXR1cCAtbiBAUEFDS0FHRV9UQVJOQU1FQC1AUEFDS0FHRV9WRVJTSU9OQAorCislYnVpbGQKK2V4cG9ydCBQWVRIT049cHl0aG9uMworJWNvbmZpZ3VyZSAtLWRpc2FibGUtcmVsb2NhdGFibGUtaW5zdGFsbCAtLXdpdGgtaW5zdGFsbC1yb290PSIke1JQTV9CVUlMRF9ST09UfSIgLS1kaXNhYmxlLWdwbSAtLXdpdGhvdXQtbWlrcm9wdWhlIC0td2l0aG91dC1zd2lmdCAtLXdpdGhvdXQtdGhldGEgLS13aXRob3V0LXZpYXZvaWNlIC0td2l0aG91dC1saWJicmFpbGxlIC0td2l0aC1icmFpbGxlLWRyaXZlcj0tdHQsLXZyCittYWtlIGFsbAorCislaW5zdGFsbAorbWFrZSBpbnN0YWxsCittYWtlIGluc3RhbGwtbWVzc2FnZXMKK21ha2UgaW5zdGFsbC1hcHBzdHJlYW0KK21ha2UgaW5zdGFsbC1zeXN0ZW1kCittYWtlIGluc3RhbGwtdWRldiBVREVWX1JVTEVTX0xPQ0FUSU9OPSV7X3VkZXZydWxlc2Rpcn0KK21ha2UgaW5zdGFsbC1wb2xraXQKK21ha2UgaW5zdGFsbC1kcmFjdXQKK21ha2UgaW5zdGFsbC1kb2N1bWVudHMKK2luc3RhbGwgLW0gNjQ0IERvY3VtZW50cy9icmx0dHkuY29uZiAiJHtSUE1fQlVJTERfUk9PVH0le19zeXNjb25mZGlyfSIKKyVmaW5kX2xhbmcgJXtuYW1lfQorCislY2xlYW4KK3JtIC1mciAiJHtSUE1fQlVJTERfUk9PVH0iCisKKworJWZpbGVzIC1mICV7bmFtZX0ubGFuZworJWRlZmF0dHIoLSxyb290LHJvb3QpCisle19iaW5kaXJ9L2JybHR0eQorJXtfcGtnbGliZGlyfQorJXtfcGtnbGliZXhlY2Rpcn0vYnJsdHR5LXB0eQorJWV4Y2x1ZGUgJXtfcGtnbGliZGlyfS9saWJicmx0dHliYmEuc28KKyVleGNsdWRlICV7X3BrZ2xpYmRpcn0vbGliYnJsdHR5Ynh3LnNvCislZXhjbHVkZSAle19wa2dsaWJkaXJ9L2xpYmJybHR0eXNlbi5zbworJWV4Y2x1ZGUgJXtfcGtnbGliZGlyfS9saWJicmx0dHlzZXMuc28KKyVleGNsdWRlICV7X3BrZ2xpYmRpcn0vbGliYnJsdHR5c2ZsLnNvCislZXhjbHVkZSAle19wa2dsaWJkaXJ9L2xpYmJybHR0eXNmdi5zbworJWV4Y2x1ZGUgJXtfcGtnbGliZGlyfS9saWJicmx0dHlzc2Quc28KKyVleGNsdWRlICV7X3BrZ2xpYmRpcn0vbGliYnJsdHR5eGEyLnNvCislZXhjbHVkZSAle19wa2dsaWJkaXJ9L2xpYmJybHR0eXhzYy5zbworJWV4Y2x1ZGUgJXtfdW5pdGRpcn0KKyVleGNsdWRlICV7X3VkZXZydWxlc2Rpcn0KKyV7X3N5c2NvbmZkaXJ9L2JybHR0eQorJWV4Y2x1ZGUgJXtfc3lzY29uZmRpcn0vYnJsdHR5L0luaXRyYW1mcy9kcmFjdXQuY29uZgorJWV4Y2x1ZGUgJXtfc3lzY29uZmRpcn0vYnJsdHR5L0luaXRyYW1mcy9jbWRsaW5lCisle19kYXRhZGlyfS9tZXRhaW5mby9vcmcuYTExeS5icmx0dHkubWV0YWluZm8ueG1sCisle19saWJkaXJ9L3BrZ2NvbmZpZy9icmx0dHkuKgorJWRvYyAle19tYW5kaXJ9L21hbjEvYnJsdHR5LjEuZ3oKKyVkb2MgJXtfZG9jZGlyfS8qL0xJQ0VOU0UqCislZG9jICV7X2RvY2Rpcn0vKi9SRUFETUUqCislZG9jICV7X2RvY2Rpcn0vKi8qLmh0bWwKKyVkb2MgJXtfZG9jZGlyfS8qL0JVR1MKKyVkb2MgJXtfZG9jZGlyfS8qL0NoYW5nZUxvZworJWRvYyAle19kb2NkaXJ9LyovQ09OVFJJQlVUT1JTCislZG9jICV7X2RvY2Rpcn0vKi9ISVNUT1JZCislZG9jICV7X2RvY2Rpcn0vKi9UT0RPCislZG9jICV7X2RvY2Rpcn0vKi8qLmNzdgorJWRvYyAle19kb2NkaXJ9LyovYnJsdHR5LmNvbmYKKyVkb2MgJXtfZG9jZGlyfS8qL0tleVRhYmxlcworJWRvYyAle19kb2NkaXJ9LyovTWFudWFsLUJSTFRUWQorJWNvbmZpZyhub3JlcGxhY2UpICV2ZXJpZnkobm90IHNpemUgbWQ1IG10aW1lKSAle19zeXNjb25mZGlyfS9icmx0dHkuY29uZgorCislZmlsZXMgLW4gYnJsdHR5LWJyYWlsbGUtYnJsYXBpCisle19wa2dsaWJkaXJ9L2xpYmJybHR0eWJiYS5zbworCislZmlsZXMgLW4gYnJsdHR5LWJyYWlsbGUteHdpbmRvdworJXtfcGtnbGliZGlyfS9saWJicmx0dHlieHcuc28KKworJWZpbGVzIC1uIGJybHR0eS1zcGVlY2gtZXNwZWFrCisle19wa2dsaWJkaXJ9L2xpYmJybHR0eXNlcy5zbworCislZmlsZXMgLW4gYnJsdHR5LXNwZWVjaC1lc3BlYWstbmcKKyV7X3BrZ2xpYmRpcn0vbGliYnJsdHR5c2VuLnNvCisKKyVmaWxlcyAtbiBicmx0dHktc3BlZWNoLWZlc3RpdmFsCisle19wa2dsaWJkaXJ9L2xpYmJybHR0eXNmdi5zbworCislZmlsZXMgLW4gYnJsdHR5LXNwZWVjaC1mbGl0ZQorJXtfcGtnbGliZGlyfS9saWJicmx0dHlzZmwuc28KKworJWZpbGVzIC1uIGJybHR0eS1zcGVlY2gtc3BlZWNoZAorJXtfcGtnbGliZGlyfS9saWJicmx0dHlzc2Quc28KKworJWZpbGVzIC1uIGJybHR0eS1zY3JlZW4tYXRzcGkyCisle19wa2dsaWJkaXJ9L2xpYmJybHR0eXhhMi5zbworCislZmlsZXMgLW4gYnJsdHR5LXNjcmVlbi1zY3JlZW4KKyV7X3BrZ2xpYmRpcn0vbGliYnJsdHR5eHNjLnNvCisKKyVmaWxlcyAtbiBicmx0dHktdXRpbHMKKyV7X2JpbmRpcn0vYnJsdHR5LSoKKworJWZpbGVzIC1uIGJybHR0eS1kZXZlbAorJXtfaW5jbHVkZWRpcn0vYnJsdHR5CisKKyVmaWxlcyAtbiBicmx0dHktc3lzdGVtZAorJXtfdW5pdGRpcn0vKgorJXtfc3lzdXNlcnNkaXJ9LyoKKyV7X3RtcGZpbGVzZGlyfS8qCisle19wa2dsaWJleGVjZGlyfS9zeXN0ZW1kLSoKKworJWZpbGVzIC1uIGJybHR0eS11ZGV2Cisle191ZGV2cnVsZXNkaXJ9LyoKKyVleGNsdWRlICV7X3VkZXZydWxlc2Rpcn0vKi1nZW5lcmljKgorJXtfcGtnbGliZXhlY2Rpcn0vdWRldi0qCisKKyVmaWxlcyAtbiBicmx0dHktdWRldi1nZW5lcmljCisle191ZGV2cnVsZXNkaXJ9LyotZ2VuZXJpYyoKKworJWZpbGVzIC1uIGJybHR0eS1kcmFjdXQKKy91c3IvbGliL2RyYWN1dC9tb2R1bGVzLmQvOTlicmx0dHkKKyVjb25maWcobm9yZXBsYWNlKSAldmVyaWZ5KG5vdCBzaXplIG1kNSBtdGltZSkgJXtfc3lzY29uZmRpcn0vYnJsdHR5L0luaXRyYW1mcy9kcmFjdXQuY29uZgorJWNvbmZpZyhub3JlcGxhY2UpICV2ZXJpZnkobm90IHNpemUgbWQ1IG10aW1lKSAle19zeXNjb25mZGlyfS9icmx0dHkvSW5pdHJhbWZzL2NtZGxpbmUKKworJWZpbGVzIC1uIGJybGFwaQorJWRlZmF0dHIoLSxyb290LHJvb3QpCisle19saWJkaXJ9L2xpYmJybGFwaS5zby4qCisle19kYXRhZGlyfS9wb2xraXQtMS8qL29yZy5hMTF5LmJybGFwaS4qCislZG9jICV7X2RvY2Rpcn0vKi9NYW51YWwtQnJsQVBJCisKKyVmaWxlcyAtbiBicmxhcGktdXRpbHMKKyV7X2JpbmRpcn0veGJybGFwaQorJWRvYyAle19tYW5kaXJ9L21hbjEveGJybGFwaS4xLmd6Cisle19kYXRhZGlyfS9nZG0vZ3JlZXRlci9hdXRvc3RhcnQveGJybGFwaS5kZXNrdG9wCisle19zeXNjb25mZGlyfS9YMTEvWHNlc3Npb24uZC85MHhicmxhcGkKKyV7X2JpbmRpcn0vZXV0cAorJWRvYyAle19tYW5kaXJ9L21hbjEvZXV0cC4xLmd6Cisle19iaW5kaXJ9L3ZzdHAKKyVkb2MgJXtfbWFuZGlyfS9tYW4xL3ZzdHAuMS5negorCislZmlsZXMgLW4gYnJsYXBpLWRldmVsCislZGVmYXR0cigtLHJvb3Qscm9vdCkKKyV7X2xpYmRpcn0vbGliYnJsYXBpLmEKKyV7X2xpYmRpcn0vbGliYnJsYXBpLnNvCisle19pbmNsdWRlZGlyfS9icmxhcGkuaAorJXtfaW5jbHVkZWRpcn0vYnJsYXBpXyouaAorJWRvYyAle19tYW5kaXJ9L21hbjMvKgorJWRvYyAle19kb2NkaXJ9LyovQnJsQVBJcmVmCisKKyVmaWxlcyAtbiBqYXZhLWJybGFwaQorQEpBVkFfSkFSX0RJUkAvKgorQEpBVkFfSk5JX0RJUkAvKgorCislZmlsZXMgLW4gbHVhLWJybGFwaQorQExVQV9MSUJSQVJZX0RJUkVDVE9SWUAvCisKKyVmaWxlcyAtbiBvY2FtbC1icmxhcGkKK0BPQ0FNTExJQkAvYnJsYXBpCisKKyVmaWxlcyAtbiBweXRob24tYnJsYXBpCitAUFlUSE9OX1NJVEVfUEtHQC9bYkJdcmxhcGlbLS5dKgorCislZmlsZXMgLW4gdGNsLWJybGFwaQorQFRDTF9ESVJAL2JybGFwaS1AYXBpX3JlbGVhc2VAL2xpYmJybGFwaV90Y2wuc28KK0BUQ0xfRElSQC9icmxhcGktQGFwaV9yZWxlYXNlQC9wa2dJbmRleC50Y2wKKworCislY2hhbmdlbG9nCisqIFNhdCBKdWwgMjIgMjAyMyBEYXZlIE1pZWxrZSA8RGF2ZUBNaWVsa2UuY2M+IDYuNgorR2VuZXJhbCBjaGFuZ2VzOgorICAgVGhlIC1IICh1cHBlcmNhc2UpIG9wdGlvbiBhbmQgdGhlIGNvbmNlcHQgb2YgaGlkZGVuIG9wdGlvbnMgaGF2ZSBiZWVuIHJlbW92ZWQuCisgICBGb3IgY29uc2lzdGVuY3kgKHdpdGggLUEsIC1CLCAtUywgLVgpLCB0aGUgLXogYW5kIC1aIHNob3J0IG9wdGlvbnMgaGF2ZSBiZWVuIHN3YXBwZWQ6CisgICAgICAteiBpcyBub3cgLS1zdGF5LXByaXZpbGVnZWQKKyAgICAgIC1aIGlzIG5vdyAtLXByaXZpbGVnZS1wYXJhbWV0ZXJzCisgICBNdWx0aS1saW5lIGNvbnRyYWN0ZWQgYnJhaWxsZSBpcyBub3cgc3VwcG9ydGVkLgorICAgVGhlIGN1cnNvciBzdHlsZSBjYW4gbm93IGJlIHNldCB0byBubyBkb3RzLgorICAgQSByZWN0YW5ndWxhciBhcHBlbmQgdG8gdGhlIGNsaXBib2FyZCBub3cgZW5zdXJlcyBhIGxlYWRpbmcgbmV3bGluZS4KKyAgIFJFQURNRS5Db21tYW5kUmVmZXJlbmNlIGhhcyBiZWVuIGFkZGVkLgorU3BlZWNoIGNoYW5nZXM6CisgICBTcGVlY2ggY2FuIG5vdyBiZSBpbnRlcnJ1cHRlZCB3aGVuIHdyaXRpbmcgbmV3IHRleHQgdG8gdGhlIGlucHV0IEZJRk8uCisgICBBdXRvc3BlYWsgbm93IHByb3ZpZGVzIGNvcnJlY3QgY2hhcmFjdGVyIGhpZ2hsaWdodGluZyB0byB0aGUgc3BlZWNoIGRyaXZlci4KKyAgIEEgd29yZCBpcyBub3cgYSB3aGl0ZXNwYWNlLWRlbGltaXRlZCAocmF0aGVyIHRoYW4gYW4gYWxwaGFudW1lcmljKSBzZXF1ZW5jZSBvZiBjaGFyYWN0ZXJzLgorICAgV29yZCBjb21wbGV0aW9uIGZvciBzaW5nbGUtY2hhcmFjdGVyIHdvcmRzIG5vdyB3b3JrcyBjb3JyZWN0bHkuCisgICBUaGUgUk9VVEVfU1BFRUNIIGNvbW1hbmQgKGdvIHRvIHRoZSBzcGVlY2ggY3Vyc29yKSBoYXMgYmVlbiBhZGRlZC4KKyAgIFRoZSBERVNDX0NVUlJfQ0hBUiBjb21tYW5kIG5vdyBzcGVha3MgcGhvbmV0aWNhbGx5LgorUHJlZmVyZW5jZXMgTWVudSBjaGFuZ2VzOgorICAgVGhlIFBSRUZSRVNFVCBjb21tYW5kIGhhcyBiZWVuIGFkZGVkLgorICAgU3BhY2UgKyBwICsgRG90cyA3LTggaXMgYm91bmQgdG8gdGhlIG5ldyBQUkVGUkVTRVQgY29tbWFuZC4KKyAgIElmIHRoZSBwcmVmZXJlbmNlcyBmaWxlIGNhbid0IGJlIGZvdW5kIHRoZW4gdHJ5IGxvYWRpbmcgL2V0Yy9icmx0dHkvZGVmYXVsdC5wcmVmcy4KKyAgIFNhdmUgb24gRXhpdCBub3cgYWxzbyBzYXZlcyB0aGUgcHJlZmVyZW5jZXMgb24gcHJvZ3JhbSB0ZXJtaW5hdGlvbi4KKyAgIFRoZSBTcGVhayBLZXkgQ29udGV4dCBwcmVmZXJlbmNlIGhhcyBiZWVuIGFkZGVkLgorICAgVGhlIFNwZWFrIE1vZGlmaWVyIEtleSBwcmVmZXJlbmNlIGhhcyBiZWVuIGFkZGVkLgorQmF1bSBicmFpbGxlIGRyaXZlciBjaGFuZ2VzOgorICAgTW9yZSByZWNlbnQgT3JiaXQgUmVhZGVyIG1vZGVscyBoYXZlIHJvdXRpbmcga2V5cy4KK0JybEFQSSBicmFpbGxlIGRyaXZlciBjaGFuZ2VzOgorICAgVGhlIHNwZWVjaENoYW5nZXMgKG5vLCB5ZXMpIHBhcmFtZXRlciBoYXMgYmVlbiBhZGRlZC4KK0NvbWJpQnJhaWxsZSBicmFpbGxlIGRyaXZlciBjaGFuZ2VzOgorICAgVXBncmFkZWQgdG8gdXNlIGdlbmVyaWMgKHJhdGhlciB0aGFuIGRpcmVjdCBzZXJpYWwpIEkvTy4KKyAgIFRoZSByb3V0aW5nIGtleXMgYXJlIG5vdyBzdXBwb3J0ZWQuCitEb3RQYWQgYnJhaWxsZSBkcml2ZXI6CisgICBOZXcgLSBpdHMgdHdvLWxldHRlciBkcml2ZXIgY29kZSBpcyBkcC4KKyAgIEEgbXVsdGktbGluZSB0ZXh0IGRpc3BsYXkgaXMgc3VwcG9ydGVkIHdpdGhpbiBpdHMgZ3JhcGhpYyBhcmVhLgorRnJlZWRvbSBTY2llbnRpZmljIGJyYWlsbGUgZHJpdmVyIGNoYW5nZXM6CisgICBNaW5vciBGb2N1cyBrZXkgYmluZGluZyBjaGFuZ2VzOgorICAgICAgTGVmdFNoaWZ0ICsgUm91dGluZ0tleSAtPiBTRVRMRUZUCisgICAgICBSaWdodFNoaWZ0ICsgUm91dGluZ0tleSAtPiBTV0lUQ0hWVAorICAgICAgTGVmdFNlbGVjdG9yICsgTmF2cm93S2V5IC0+IFBSRElGQ0hBUgorICAgICAgUmlnaHRTZWxlY3RvciArIE5hdnJvd0tleSAtPiBOWERJRkNIQVIKK0hhbmR5VGVjaCBicmFpbGxlIGRyaXZlciBjaGFuZ2VzOgorICAgQmx1ZXRvb3RoIHNlcnZpY2UgZGlzY292ZXJ5IG5vdyBuZWVkcyB0byBiZSBwZXJmb3JtZWQgKGZvciBuZXdlciBtb2RlbHMpLgorRXh0ZXJuYWwgU3BlZWNoIHNwZWVjaCBkcml2ZXIgY2hhbmdlczoKKyAgIFRoZSB2b2x1bWUgYW5kIHBpdGNoIGNhbiBub3cgYmUgc2V0LgorICAgTm93IGRpc2Nvbm5lY3RzIGZyb20gdGhlIHNlcnZlciB3aGVuIGEgd3JpdGUgZXJyb3Igb3IgdGltZW91dCBvY2N1cnMuCisgICBOb3cgdHJpZXMgdG8gcmVjb25uZWN0IHRvIHRoZSBzZXJ2ZXIgaWYgZGlzY29ubmVjdGVkLgorICAgTm93IGNvcnJlY3RseSBoYW5kbGVzIHRoZSByZWNlaXB0IG9mIHRyYWNraW5nIGRhdGEuCitBdFNwaTIgc2NyZWVuIGRyaXZlciBjaGFuZ2VzOgorICAgQSBwb3RlbnRpYWwgY3Jhc2ggb24gcmVjZWlwdCBvZiBhIGN1cnNvciByb3V0aW5nIHJlcXVlc3QgaGFzIGJlZW4gcmVzb2x2ZWQuCitGaWxlIFZpZXdlciBzY3JlZW4gZHJpdmVyOgorICAgTmV3LiBJdHMgdHdvLWxldHRlciBkcml2ZXIgY29kZSBpcyBmdi4KKyAgIEEgdmlydHVhbCBzY3JlZW4gcHJlc2VudHMgdGhlIHNwZWNpZmllZCBmaWxlICh2aWEgaXRzIGZpbGUgcGFyYW1ldGVyKS4KKyAgIFRoZSBoZWlnaHQgb2YgdGhlIHNjcmVlbiBpcyB0aGUgbnVtYmVyIG9mIGxpbmVzIHdpdGhpbiB0aGUgZmlsZS4KKyAgIFRoZSB3aWR0aCBvZiB0aGUgc2NyZWVuIGlzIHRoZSBsZW5ndGggb2YgdGhlIGZpbGUncyBsb25nZXN0IGxpbmUuCitMaW51eCBzY3JlZW4gZHJpdmVyIGNoYW5nZXM6CisgICBBIG1lc3NhZ2UgaXMgc2hvd24gb24gdGhlIGJyYWlsbGUgZGlzcGxheSBpZiBjaGFyYWN0ZXIgaW5qZWN0aW9uIChUSU9DU1RJKSBpcyBkaXNhYmxlZC4KK1Rlcm1pbmFsIEVtdWxhdG9yIHNjcmVlbiBkcml2ZXI6CisgICBOZXcuIEl0cyB0d28tbGV0dGVyIGRyaXZlciBjb2RlIGlzIGVtLgorICAgSXQgbW9uaXRvcnMgYSBzaGFyZWQgbWVtb3J5IHNlZ21lbnQgbWFpbnRhaW5lZCBieSBhIHRlcm1pbmFsIGVtdWxhdG9yCisgICBmb3Igc2NyZWVuIGNvbnRlbnQgYW5kIHNpemUsIGN1cnNvciBwb3NpdGlvbiwgZXRjLgorICAgSXQgdXNlcyBhIG1lc3NhZ2UgcXVldWUgdG8ga25vdyB3aGVuIHRoZSBzZWdtZW50IGhhcyBiZWVuIHVwZGF0ZWQKKyAgIGFuZCB0byBzZW5kIGlucHV0IHR5cGVkIG9uIHRoZSBicmFpbGxlIGRldmljZSB0byB0aGUgdGVybWluYWwgZW11bGF0b3IuCisgICBCUkxUVFkncyBwcm92aWRlZCB0ZXJtaW5hbCBlbXVsYXRvciBpcyB0aGUgbmV3IGJybHR0eS1wdHkgY29tbWFuZCAoaW4gbGliZXhlYy9icmx0dHkvKS4KKyAgIFRoZSBuZXcgYnJsdHR5LXRlcm0gY29tbWFuZCBydW5zIGEgc2hlbGwgb3IgdGVybWluYWwgbWFuYWdlciB2aWEgYnJsdHR5LXB0eSwKKyAgIGFuZCBhbHNvIHJ1bnMgQlJMVFRZIHdpdGggaXRzIFRlcm1pbmFsIEVtdWxhdG9yIHNjcmVlbiBkcml2ZXIgdG8gaW50ZXJhY3Qgd2l0aCBpdC4KK0JybEFQSSBjaGFuZ2VzOgorICAgVGhlIHZlcnNpb24gaXMgbm93IDAuOC41IChpdCB3YXMgMC44LjQpLgorICAgRnV6emluZyBzdXBwb3J0IGhhcyBiZWVuIGFkZGVkIHRvIHRoZSBzZXJ2ZXIgKHNlZSBSRUFETUUuQVBJRnV6emluZykuCisgICBWYXJpb3VzIGZ1enplci1kZXRlY3RlZCBpc3N1ZXMgaGF2ZSBiZWVuIHJlc29sdmVkLgorQ29udHJhY3Rpb24gdGFibGVzOgorICAgVGhlIGVuLXVlYi1nMSAoRW5nbGlzaCwgVW5pZmllZCwgR3JhZGUgMSkgY29udHJhY3Rpb24gdGFibGUgaGFzIGJlZW4gYWRkZWQuCitLZXkgdGFibGVzOgorICAgQSBwb3NzaWJsZSBzdGFjayBvdmVyZmxvdyBkdXJpbmcgdGFibGUgY29tcGlsYXRpb24gaGFzIGJlZW4gcmVzb2x2ZWQuCisgICBUaGUgcnVuIGRpcmVjdGl2ZSBoYXMgYmVlbiBhZGRlZC4KKyAgIFRoZSBtYWNybyBkaXJlY3RpdmUgaGFzIGJlZW4gYWRkZWQuCisgICBUaGUgaXNvbGF0ZWQgZGlyZWN0aXZlIGhhcyBiZWVuIGFkZGVkLgorICAgVGhlIGt0YmNoZWNrIHRvb2wgaGFzIGJlZW4gYWRkZWQuCitXaW5kb3dzIGNoYW5nZXM6CisgICBUaGUgYmF0Y2ggc2NyaXB0cyBoYXZlIGJlZW4gaW1wcm92ZWQuCisgICBUaGUgdGFza3MtYnJsdHR5LmJhdCBzY3JpcHQgaGFzIGJlZW4gYWRkZWQuCisgICBUaGUgcmVncXVlcnktYnJsYXBpLmJhdCBzY3JpcHQgaGFzIGJlZW4gYWRkZWQuCisgICBUaGUgYnVpbGQgbm93IGluY2x1ZGVzIHRoZSBEZWJ1Z1wgZGlyZWN0b3J5LCB3aGljaCBjb250YWluczoKKyAgICAgIFRoZSBidWlsZCdzIGNvbmZpZy5oLCBjb25maWcubWssIGFuZCBjb25maWcubG9nIGZpbGVzLgorICAgICAgVW5zdHJpcHBlZCBleGVjdXRhYmxlcyAoLmV4ZSkgYW5kIGxpYnJhcmllcyAoLmRsbCkuCisKZGlmZiAtLWdpdCBhL2NmZy1hbmRyb2lkIGIvY2ZnLWFuZHJvaWQKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uN2U3NjFiZgotLS0gL2Rldi9udWxsCisrKyBiL2NmZy1hbmRyb2lkCkBAIC0wLDAgKzEsMTIwIEBACisjIS9iaW4vYmFzaAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorIyAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyMKKyMgQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorIworIyBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorIworIyBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisjIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyMgbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisjCisjIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKy4gImBkaXJuYW1lICIkezB9ImAvYnJsdHR5LXByb2xvZ3VlLnNoIgorCituZGtSb290VmFyaWFibGU9QU5EUk9JRF9OREsKKworc2hvd1Byb2dyYW1Vc2FnZVB1cnBvc2UoKSB7CitjYXQgPDxFTkRfT0ZfUFJPR1JBTV9VU0FHRV9QVVJQT1NFCitDb25maWd1cmUgYSBCUkxUVFkgYnVpbGQgZm9yIHRoZSBBbmRyb2lkIHBsYXRmb3JtLgorRU5EX09GX1BST0dSQU1fVVNBR0VfUFVSUE9TRQorfQorCitzaG93UHJvZ3JhbVVzYWdlTm90ZXMoKSB7CitjYXQgPDxFTkRfT0ZfUFJPR1JBTV9VU0FHRV9OT1RFUworQWxsIG9mIHRoZSBvcHRpb25zIGFyZSBwYXNzZWQgdGhyb3VnaCwgdW5tb2RpZmllZCwgYXMgYWRkaXRpb25hbCBvcHRpb25zIHRvIHRoZSBjb25maWd1cmUgc2NyaXB0LgorVGhlICR7bmRrUm9vdFZhcmlhYmxlfSBlbnZpcm9ubWVudCB2YXJpYWJsZSBtdXN0IHBvaW50IHRvIHRoZSByb290IGRpcmVjdG9yeSBmb3IgdGhlIEFuZHJvaWQgTkRLIChuYXRpdmUgZGV2ZWxvcG1lbnQga2l0KS4KK0VORF9PRl9QUk9HUkFNX1VTQUdFX05PVEVTCit9CisKK2RlZmF1bHRUb3BsZXZlbEFCST0iYXJtZWFiaS12N2EiCisKK2FkZFByb2dyYW1PcHRpb24gYSBzdHJpbmcuQUJJIHRvcGxldmVsQUJJICJ0aGUgdG9wLWxldmVsJ3MgQUJJIiAiJHtkZWZhdWx0VG9wbGV2ZWxBQkl9IgorYWRkUHJvZ3JhbU9wdGlvbiBuIGZsYWcgbm9Ub3BsZXZlbENvbmZpZ3VyZSAiZG9uJ3QgY29uZmlndXJlIHRoZSB0b3AtbGV2ZWwiCithZGRQcm9ncmFtT3B0aW9uIG8gZmxhZyBvdmVyd3JpdGVCdWlsZFByb3BlcnRpZXMgIm92ZXJ3cml0ZSBleGlzdGluZyBBQkkgYnVpbGQgcHJvcGVydGllcyIKK3BhcnNlUHJvZ3JhbUFyZ3VtZW50cyAiJHtAfSIKK3NldCAtZQorCitzb3VyY2VSb290PSIke3Byb2dyYW1EaXJlY3Rvcnl9IgorYnVpbGRSb290PSIke2luaXRpYWxEaXJlY3Rvcnl9IgorCithbmRyb2lkUm9vdD0iJHtidWlsZFJvb3R9L0FuZHJvaWQiCituZGtSb290PSIke2FuZHJvaWRSb290fS9OREsiCisKK1sgLWQgIiR7bmRrUm9vdH0iIF0gfHwgeworICAgWyAtbiAiJHshbmRrUm9vdFZhcmlhYmxlfSIgXSB8fCB7CisgICAgICBzZW1hbnRpY0Vycm9yICJBbmRyb2lkIE5ESyBkaXJlY3Rvcnkgbm90IGRlZmluZWQ6ICR7bmRrUm9vdH0iCisgICB9CisKKyAgIFsgIC1mICIkeyFuZGtSb290VmFyaWFibGV9L25kay1idWlsZCIgXSB8fCB7CisgICAgICBzZW1hbnRpY0Vycm9yICJub3QgYW4gQW5kcm9pZCBOREs6ICR7IW5ka1Jvb3RWYXJpYWJsZX0iCisgICB9CisKKyAgIGxvZ05vdGUgImNyZWF0aW5nIHN5bWJvbGljIGxpbms6ICR7bmRrUm9vdH0gLT4gJHshbmRrUm9vdFZhcmlhYmxlfSIKKyAgIGxuIC1zICIkeyFuZGtSb290VmFyaWFibGV9IiAiJHtuZGtSb290fSIgfHwgZXhpdCAiJHs/fSIKK30KKworYXJjaGl0ZWN0dXJlc1Jvb3Q9IiR7YW5kcm9pZFJvb3R9L0FCSSIKK2FuZHJvaWRQbGF0Zm9ybT1hbmRyb2lkLTIxCisKK3ByZXBhcmVBcmNoaXRlY3R1cmUoKSB7CisgICBsb2NhbCBhcmNoaXRlY3R1cmU9IiR7MX0iCisgICBsb2NhbCBzeXN0ZW09IiR7Mn0iCisgICBsb2NhbCBhYmk9IiR7M30iCisgICBsb2NhbCBjRmxhZ3M9IiR7NH0iCisgICBsb2NhbCBsZEZsYWdzPSIkezV9IgorCisgICBsb2NhbCBhYmlSb290PSIke2FyY2hpdGVjdHVyZXNSb290fS8ke2FiaX0iCisgICBta2RpciAtcCAtLSAiJHthYmlSb290fSIKKyAgIGxvY2FsIHRvb2xjaGFpblJvb3Q9IiR7YWJpUm9vdH0vVG9vbENoYWluIgorCisgICAoICBzZXQgLWUKKyAgICAgIGNkICIke2FiaVJvb3R9IgorICAgICAgbG9jYWwgcHJvcGVydGllc0ZpbGU9ImJ1aWxkLnByb3BlcnRpZXMiCisKKyAgICAgIGlmIFsgLWYgIiR7cHJvcGVydGllc0ZpbGV9IiBdCisgICAgICB0aGVuCisgICAgICAgICBpZiAiJHtvdmVyd3JpdGVCdWlsZFByb3BlcnRpZXN9IgorICAgICAgICAgdGhlbgorICAgICAgICAgICAgbG9nV2FybmluZyAib3ZlcndyaXRpbmcgQUJJIGJ1aWxkIHByb3BlcnRpZXM6ICR7YWJpfSIKKyAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGxvZ05vdGUgIkFCSSBidWlsZCBwcm9wZXJ0aWVzIGFscmVhZHkgZXhpc3Q6ICR7YWJpfSIKKyAgICAgICAgICAgIHJldHVybiAwCisgICAgICAgICBmaQorICAgICAgZWxzZQorICAgICAgICAgbG9nTm90ZSAiY3JlYXRpbmcgQUJJIGJ1aWxkIHByb3BlcnRpZXM6ICR7YWJpfSIKKyAgICAgIGZpCisKKyAgICAgIDogPiIke3Byb3BlcnRpZXNGaWxlfSIKKyAgICAgIHNldCAtLSBTT1VSQ0UgIiR7c291cmNlUm9vdH0iIE5ESyAiJHtuZGtSb290fSIgUExBVEZPUk0gIiR7YW5kcm9pZFBsYXRmb3JtfSIgQVJDSCAiJHthcmNoaXRlY3R1cmV9IiBBQkkgIiR7YWJpfSIgU1lTVEVNICIke3N5c3RlbX0iIFRPT0xDSEFJTiAiJHt0b29sY2hhaW5Sb290fSIgQ0ZMQUdTICIke2NGbGFnc30iIExERkxBR1MgIiR7bGRGbGFnc30iCisKKyAgICAgIHdoaWxlIFsgIiR7I30iIC1ndCAwIF0KKyAgICAgIGRvCisgICAgICAgICBsb2NhbCB2YXJpYWJsZT0iJHsxfSIKKyAgICAgICAgIGxvY2FsIHZhbHVlPSIkezJ9IgorICAgICAgICAgc2hpZnQgMgorICAgICAgICAgZWNobyA+PiIke3Byb3BlcnRpZXNGaWxlfSIgIkJSTFRUWV9BTkRST0lEXyR7dmFyaWFibGV9PSR7dmFsdWV9IgorICAgICAgZG9uZQorICAgKQorfQorCitsb2dNZXNzYWdlIHRhc2sgInByZXBhcmluZyBBQkkgYnVpbGQgdHJlZXMiCitwcmVwYXJlQXJjaGl0ZWN0dXJlIGFybSBhcm0tbGludXgtYW5kcm9pZGVhYmkgYXJtZWFiaS12N2EgIi1tdGh1bWIiICItV2wsLS1maXgtY29ydGV4LWE4IgorcHJlcGFyZUFyY2hpdGVjdHVyZSBhcm02NCBhYXJjaDY0LWxpbnV4LWFuZHJvaWQgYXJtNjQtdjhhCitwcmVwYXJlQXJjaGl0ZWN0dXJlIHg4NiBpNjg2LWxpbnV4LWFuZHJvaWQgeDg2CitwcmVwYXJlQXJjaGl0ZWN0dXJlIHg4Nl82NCB4ODZfNjQtbGludXgtYW5kcm9pZCB4ODZfNjQKKworIiR7bm9Ub3BsZXZlbENvbmZpZ3VyZX0iIHx8IHsKKyAgIFsgLW4gIiR7dG9wbGV2ZWxBQkl9IiBdIHx8IHRvcGxldmVsQUJJPSIke2RlZmF1bHRUb3BsZXZlbEFCSX0iCisgICBsb2dNZXNzYWdlIHRhc2sgImNvbmZpZ3VyaW5nIHRvcC1sZXZlbCBmb3IgJHt0b3BsZXZlbEFCSX0iCisgICAiJHtzb3VyY2VSb290fS9jZmctYW5kcm9pZC1hYmkiIC1mICIke3RvcGxldmVsQUJJfSIKK30KKworZXhpdCAwCmRpZmYgLS1naXQgYS9jZmctYW5kcm9pZC1hYmkgYi9jZmctYW5kcm9pZC1hYmkKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYTRhMmFkMAotLS0gL2Rldi9udWxsCisrKyBiL2NmZy1hbmRyb2lkLWFiaQpAQCAtMCwwICsxLDIwMyBAQAorIyEvYmluL2Jhc2gKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyMgICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisjCisjIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyMKKyMgQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisuICJgZGlybmFtZSAiJHswfSJgL2JybHR0eS1wcm9sb2d1ZS5zaCIKKworc2hvd1Byb2dyYW1Vc2FnZVB1cnBvc2UoKSB7CitjYXQgPDxFTkRfT0ZfUFJPR1JBTV9VU0FHRV9QVVJQT1NFCitDb25maWd1cmUgYSBCUkxUVFkgYnVpbGQgZm9yIGEgc3BlY2lmaWMgQUJJIChhcHBsaWNhdGlvbiBiaW5hcnkgaW50ZXJmYWNlKSBvZiB0aGUgQW5kcm9pZCBwbGF0Zm9ybS4KK0VORF9PRl9QUk9HUkFNX1VTQUdFX1BVUlBPU0UKK30KKworc2hvd1Byb2dyYW1Vc2FnZU5vdGVzKCkgeworY2F0IDw8RU5EX09GX1BST0dSQU1fVVNBR0VfTk9URVMKK1RoaXMgc2NyaXB0IGlzIHVzZWQgYnkgY2ZnLWFuZHJvaWQsIGFuZCBpcyBmb3IgaW50ZXJuYWwgdXNlIG9ubHkuCitFTkRfT0ZfUFJPR1JBTV9VU0FHRV9OT1RFUworfQorCisjIEJyYWlsbGUgZHJpdmVycyBhbHJlYWR5IGRpc2FibGVkOgorIyBsYiAoYnkgLS13aXRob3V0LWxpYmJyYWlsbGUpCisjIHh3IChieSAtLWRpc2FibGUteCkKK3JlYWRvbmx5IGNvbmZpZ3VyZU9wdGlvbnM9KAorICAgLS1kaXNhYmxlLWV4cGF0CisgICAtLWRpc2FibGUtZ3BtCisgICAtLWRpc2FibGUtaWNvbnYKKyAgIC0tZGlzYWJsZS1pY3UKKyAgIC0tZGlzYWJsZS1saWJsb3VpcworICAgLS1kaXNhYmxlLXBvbGtpdAorICAgLS1kaXNhYmxlLXgKKworICAgLS13aXRob3V0LWxpYmJyYWlsbGUKKyAgIC0td2l0aC1icmFpbGxlLWRyaXZlcj0tYmEsLWJnLC10dCwtdnIsYWwsYXQsYm0sYm4sY2UsZXUsZnMsaG0saHQsaHcsaWMsaXIsbWQsbW0sbXQsbnAscGcscG0sc2ssdm8KKworICAgLS13aXRob3V0LWVzcGVhaworICAgLS13aXRob3V0LWVzcGVhay1uZworICAgLS13aXRob3V0LWZsaXRlCisgICAtLXdpdGhvdXQtbWlrcm9wdWhlCisgICAtLXdpdGhvdXQtc3BlZWNoZAorICAgLS13aXRob3V0LXN3aWZ0CisgICAtLXdpdGhvdXQtdGhldGEKKyAgIC0td2l0aC1zcGVlY2gtZHJpdmVyPWFuLC1hbGwKKworICAgLS13aXRoLXNjcmVlbi1kcml2ZXI9YW4sLWFsbAorCisgICAtLXdpdGhvdXQtcGdtcGF0aC1wYWNrYWdlCisgICAtLXdpdGhvdXQtcGdtcHJpdnMtcGFja2FnZQorICAgLS13aXRob3V0LXNlcnZpY2UtcGFja2FnZQorICAgLS13aXRob3V0LXBhcmFtcy1wYWNrYWdlCisgICAtLXdpdGhvdXQtY2hhcnNldC1wYWNrYWdlCisgICAtLXdpdGhvdXQtcmd4LXBhY2thZ2UKKyAgIC0td2l0aG91dC1ob3N0Y21kLXBhY2thZ2UKKyAgIC0td2l0aG91dC1tbnRwdC1wYWNrYWdlCisgICAtLXdpdGhvdXQtbW50ZnMtcGFja2FnZQorICAgLS13aXRob3V0LWJlbGwtcGFja2FnZQorICAgLS13aXRob3V0LWxlZHMtcGFja2FnZQorICAgLS13aXRob3V0LWJlZXAtcGFja2FnZQorICAgLS13aXRob3V0LW1pZGktcGFja2FnZQorICAgLS13aXRob3V0LWZtLXBhY2thZ2UKKyAgIC0td2l0aG91dC1oaWQtcGFja2FnZQorICAgLS13aXRob3V0LXBvcnRzLXBhY2thZ2UKKworICAgLS1kaXNhYmxlLWVtYWNzLWJpbmRpbmdzCisgICAtLWRpc2FibGUtbHVhLWJpbmRpbmdzCispCisKK3NldFByb3BlcnRpZXMoKSB7CisgICBkZWNsYXJlIC1nIC1BIHByb3BlcnRpZXMKKyAgIGxvY2FsIG9rPXRydWUKKyAgIGxvY2FsIHByb3BlcnR5CisKKyAgIGZvciBwcm9wZXJ0eSBpbiBBUkNIIC1DRkxBR1MgLUxERkxBR1MgTkRLIFBMQVRGT1JNIFNPVVJDRSBTWVNURU0gVE9PTENIQUlOCisgICBkbworICAgICAgbG9jYWwgb3B0aW9uYWw9ZmFsc2UKKworICAgICAgWyAiJHtwcm9wZXJ0eTowOjF9IiAhPSAiLSIgXSB8fCB7CisgICAgICAgICBvcHRpb25hbD10cnVlCisgICAgICAgICBwcm9wZXJ0eT0iJHtwcm9wZXJ0eToxfSIKKyAgICAgIH0KKworICAgICAgbG9jYWwgdmFyaWFibGU9IkJSTFRUWV9BTkRST0lEXyR7cHJvcGVydHl9IgorICAgICAgbG9jYWwgdmFsdWU9IiR7IXZhcmlhYmxlfSIKKworICAgICAgIiR7b3B0aW9uYWx9IiB8fCB7CisgICAgICAgICBbIC1uICIke3ZhbHVlfSIgXSB8fCB7CisgICAgICAgICAgICBsb2dFcnJvciAicHJvcGVydHkgbm90IHNldDogJHtwcm9wZXJ0eX0iCisgICAgICAgICAgICBvaz1mYWxzZQorICAgICAgICAgfQorICAgICAgfQorCisgICAgICBwcm9wZXJ0aWVzWyIke3Byb3BlcnR5fSJdPSIke3ZhbHVlfSIKKyAgIGRvbmUKKworICAgIiR7b2t9IiB8fCBleGl0IDkKK30KKworbWFrZVRvb2xDaGFpbigpIHsKKyAgIFsgLWQgIiR7cHJvcGVydGllc1tUT09MQ0hBSU5dfSIgXSB8fCB7CisgICAgICBsb2dNZXNzYWdlIHRhc2sgImluc3RhbGxpbmcgdG9vbCBjaGFpbiBmb3IgQUJJOiAke2FiaU5hbWV9IgorCisgICAgICBWRVJCT1NFPW5vICIke3Byb3BlcnRpZXNbTkRLXX0vYnVpbGQvdG9vbHMvbWFrZS1zdGFuZGFsb25lLXRvb2xjaGFpbi5zaCIgXAorICAgICAgICAgLS1wbGF0Zm9ybT0iJHtwcm9wZXJ0aWVzW1BMQVRGT1JNXX0iIFwKKyAgICAgICAgIC0tYXJjaD0iJHtwcm9wZXJ0aWVzW0FSQ0hdfSIgXAorICAgICAgICAgLS1pbnN0YWxsLWRpcj0iJHtwcm9wZXJ0aWVzW1RPT0xDSEFJTl19IiB8fCBleGl0ICIkez99IgorICAgfQorfQorCitsaW5rTWlzc2luZ0hlYWRlcnMoKSB7CisgICBsb2NhbCBidWlsZEluY2x1ZGU9Ii91c3IvaW5jbHVkZSIKKyAgIGxvY2FsIGhvc3RJbmNsdWRlPSIke3Byb3BlcnRpZXNbVE9PTENIQUlOXX0vc3lzcm9vdCR7YnVpbGRJbmNsdWRlfSIKKyAgIGxvY2FsIGhlYWRlcgorCisgICBmb3IgaGVhZGVyIGluIGJsdWV0b290aAorICAgZG8KKyAgICAgIGxvY2FsIGhvc3RIZWFkZXI9IiR7aG9zdEluY2x1ZGV9LyR7aGVhZGVyfSIKKyAgICAgIFsgISAtZSAiJHtob3N0SGVhZGVyfSIgXSB8fCBjb250aW51ZQorCisgICAgICBsb2NhbCBidWlsZEhlYWRlcj0iJHtidWlsZEluY2x1ZGV9LyR7aGVhZGVyfSIKKyAgICAgIFsgLWUgIiR7YnVpbGRIZWFkZXJ9IiBdIHx8IGNvbnRpbnVlCisKKyAgICAgIGxvZ05vdGUgImFkZGluZyBzeW1ib2xpYyBsaW5rIGZvciBoZWFkZXI6ICR7YWJpTmFtZX06ICR7aGVhZGVyfSIKKyAgICAgIGxuIC1zICIke2J1aWxkSGVhZGVyfSIgIiR7aG9zdEhlYWRlcn0iIHx8IGV4aXQgIiR7P30iCisgICBkb25lCit9CisKK2ZpbmRUb29sKCkgeworICAgbG9jYWwgdmFyaWFibGU9IiR7MX0iCisgICBsb2NhbCBuYW1lPSIkezJ9IgorCisgICBsb2dEZXRhaWwgImZpbmRpbmcgdG9vbDogJHtuYW1lfSIKKyAgIGxvY2FsIHBhdGg9IiR7dG9vbHNEaXJlY3Rvcnl9LyR7cHJvcGVydGllc1siU1lTVEVNIl19LSR7bmFtZX0iCisKKyAgIFsgLWYgIiR7cGF0aH0iIF0gfHwgeworICAgICAgbG9nRXJyb3IgInRvb2wgbm90IGZvdW5kOiAke3BhdGh9IgorICAgICAgZXhpdCA4CisgICB9CisKKyAgIGxvZ05vdGUgInRvb2wgZm91bmQ6ICR7cGF0aH0iCisgICBzZXRWYXJpYWJsZSAiJHt2YXJpYWJsZX0iICIke3BhdGh9IgorICAgZXhwb3J0ICIke3ZhcmlhYmxlfSIKK30KKworYWRkUHJvZ3JhbU9wdGlvbiBmIGZsYWcgZm9yY2VSZWNvbmZpZ3VyZSAiZm9yY2UgYSByZWNvbmZpZ3VyZSIKK2FkZFByb2dyYW1QYXJhbWV0ZXIgQUJJIGFiaU5hbWUgIm5hbWUgb2YgQUJJIHRvIGNvbmZpZ3VyZSIgInRoZSBzb3VyY2UgdHJlZSIKK3BhcnNlUHJvZ3JhbUFyZ3VtZW50cyAiJHtAfSIKK3NldCAtZQorCithYmlSb290PSIke3Byb2dyYW1EaXJlY3Rvcnl9L0FuZHJvaWQvQUJJLyR7YWJpTmFtZX0iCithYmlQcm9wZXJ0aWVzRmlsZT0iJHthYmlSb290fS9idWlsZC5wcm9wZXJ0aWVzIgorWyAtZiAiJHthYmlQcm9wZXJ0aWVzRmlsZX0iIF0gfHwgc3ludGF4RXJyb3IgInVucmVjb2duaXplZCBBQkk6ICR7YWJpTmFtZX0iCisuICIke2FiaVByb3BlcnRpZXNGaWxlfSIKK3NldFByb3BlcnRpZXMKKworbWFrZVRvb2xDaGFpbgorbGlua01pc3NpbmdIZWFkZXJzCisKK2J1aWxkRGlyZWN0b3J5PSIkKHB3ZCkiCitidWlsZE1ha2VGaWxlPSIke2J1aWxkRGlyZWN0b3J5fS9NYWtlZmlsZSIKKworaWYgWyAtZiAiJHtidWlsZE1ha2VGaWxlfSIgXQordGhlbgorICAgaWYgIiR7Zm9yY2VSZWNvbmZpZ3VyZX0iCisgICB0aGVuCisgICAgICBsb2dXYXJuaW5nICJyZWNvbmZpZ3VyaW5nIGJ1aWxkOiAke2J1aWxkRGlyZWN0b3J5fSIKKyAgIGVsc2UKKyAgICAgIGxvZ05vdGUgImJ1aWxkIGFscmVhZHkgY29uZmlndXJlZDogJHtidWlsZERpcmVjdG9yeX0iCisgICAgICBleGl0IDAKKyAgIGZpCitlbHNlCisgICBsb2dNZXNzYWdlIHRhc2sgImNvbmZpZ3VyaW5nIGJ1aWxkOiAke2J1aWxkRGlyZWN0b3J5fSIKK2ZpCisKK3Rvb2xzRGlyZWN0b3J5PSIke3Byb3BlcnRpZXNbVE9PTENIQUlOXX0vYmluIgorZXhwb3J0IFBBVEg9IiR7UEFUSH06JHt0b29sc0RpcmVjdG9yeX0iCitmaW5kVG9vbCBDQyBnY2MKK2ZpbmRUb29sIExEIGxkCitmaW5kVG9vbCBTVFJJUCBzdHJpcAorZmluZFRvb2wgUkFOTElCIHJhbmxpYgorCitzeXNyb290RGlyZWN0b3J5PSIke3Byb3BlcnRpZXNbVE9PTENIQUlOXX0vc3lzcm9vdCIKK2V4cG9ydCBQS0dfQ09ORklHX1NZU1JPT1RfRElSPSIke3N5c3Jvb3REaXJlY3Rvcnl9IgorZXhwb3J0IFBLR19DT05GSUdfTElCRElSPSIke3N5c3Jvb3REaXJlY3Rvcnl9L3Vzci9saWIvcGtnY29uZmlnOiR7c3lzcm9vdERpcmVjdG9yeX0vdXNyL3NoYXJlL3BrZ2NvbmZpZyIKK2V4cG9ydCBQS0dfQ09ORklHX1BBVEg9IiIKKworZXhwb3J0IENGTEFHUz0iJHtwcm9wZXJ0aWVzW0NGTEFHU119IgorZXhwb3J0IExERkxBR1M9IiR7cHJvcGVydGllc1tMREZMQUdTXX0iCisKKyIke3Byb3BlcnRpZXNbU09VUkNFXX0vY29uZmlndXJlIiAtLXF1aWV0IC0taG9zdD0iJHtwcm9wZXJ0aWVzW1NZU1RFTV19IiAiJHtjb25maWd1cmVPcHRpb25zW0BdfSIKK2V4aXQgMApkaWZmIC0tZ2l0IGEvY2ZnLWRhcndpbiBiL2NmZy1kYXJ3aW4KbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYmMzYzJlNwotLS0gL2Rldi9udWxsCisrKyBiL2NmZy1kYXJ3aW4KQEAgLTAsMCArMSw3MSBAQAorIyEvYmluL2Jhc2ggLXAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyMgICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisjCisjIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyMKKyMgQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisuICJgZGlybmFtZSAiJHswfSJgL2JybHR0eS1wcm9sb2d1ZS5zaCIKKworaGFuZGxlSW5pdGlhbEhlbHBPcHRpb24gIiR7QH0iIDw8RU5ELU9GLUhFTFAKK0NvbmZpZ3VyZSBhIEJSTFRUWSBidWlsZCBmb3IgdGhlIERhcndpbiAoTWFjIE9TIFgpIHBsYXRmb3JtLgorCitTeW50YXg6ICR7cHJvZ3JhbU5hbWV9IHstaCB8IFstb3B0aW9uIC4uLl19CisKK0FsbCBvZiB0aGUgb3B0aW9ucyBhcmUgcGFzc2VkIHRocm91Z2gsIHVubW9kaWZpZWQsIGFzIGFkZGl0aW9uYWwgb3B0aW9ucyB0byB0aGUgY29uZmlndXJlIHNjcmlwdC4KK0VORC1PRi1IRUxQCisKK2NvbmZpZ3VyZU9wdGlvbnM9KAorICAgLS1wcmVmaXg9L3Vzci9sb2NhbCAKKworICAgLS1kaXNhYmxlLWdwbQorICAgLS1kaXNhYmxlLWljb252CisgICAtLWRpc2FibGUtaWN1CisgICAtLWRpc2FibGUtcG9sa2l0CisgICAtLWRpc2FibGUteAorCisgICAtLXdpdGhvdXQtbGliYnJhaWxsZQorCisgICAtLXdpdGhvdXQtZXNwZWFrCisgICAtLXdpdGhvdXQtZXNwZWFrLW5nCisgICAtLXdpdGhvdXQtZmxpdGUKKyAgIC0td2l0aG91dC1taWtyb3B1aGUKKyAgIC0td2l0aG91dC1zcGVlY2hkCisgICAtLXdpdGhvdXQtc3dpZnQKKyAgIC0td2l0aG91dC10aGV0YQorCisgICAtLXdpdGhvdXQtcGdtcGF0aC1wYWNrYWdlCisgICAtLXdpdGhvdXQtcGdtcHJpdnMtcGFja2FnZQorICAgLS13aXRob3V0LXNlcnZpY2UtcGFja2FnZQorICAgLS13aXRob3V0LXBhcmFtcy1wYWNrYWdlCisgICAtLXdpdGhvdXQtY2hhcnNldC1wYWNrYWdlCisgICAtLXdpdGhvdXQtbW50cHQtcGFja2FnZQorICAgLS13aXRob3V0LW1udGZzLXBhY2thZ2UKKyAgIC0td2l0aG91dC1rYmQtcGFja2FnZQorICAgLS13aXRob3V0LWJlbGwtcGFja2FnZQorICAgLS13aXRob3V0LWxlZHMtcGFja2FnZQorICAgLS13aXRob3V0LWJlZXAtcGFja2FnZQorICAgLS13aXRob3V0LXBjbS1wYWNrYWdlCisgICAtLXdpdGhvdXQtbWlkaS1wYWNrYWdlCisgICAtLXdpdGhvdXQtZm0tcGFja2FnZQorICAgLS13aXRob3V0LWhpZC1wYWNrYWdlCisgICAtLXdpdGhvdXQtcG9ydHMtcGFja2FnZQorCisgICAtLWRpc2FibGUtamF2YS1iaW5kaW5ncworICAgLS1kaXNhYmxlLXB5dGhvbi1iaW5kaW5ncworKQorCisiJHtwcm9ncmFtRGlyZWN0b3J5fS9jb25maWd1cmUiIC0tcXVpZXQgIiR7Y29uZmlndXJlT3B0aW9uc1tAXX0iICIke0B9IgorZXhpdCAiJHs/fSIKZGlmZiAtLWdpdCBhL2NmZy1kb3MgYi9jZmctZG9zCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmU0YjBmMGIKLS0tIC9kZXYvbnVsbAorKysgYi9jZmctZG9zCkBAIC0wLDAgKzEsMTA4IEBACisjIS9iaW4vYmFzaCAtcAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorIyAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyMKKyMgQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorIworIyBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorIworIyBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisjIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyMgbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisjCisjIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKy4gImBkaXJuYW1lICIkezB9ImAvYnJsdHR5LXByb2xvZ3VlLnNoIgorCit0b29sc1N5c3RlbT0iaTU4Ni1wYy1tc2Rvc2RqZ3BwIgordG9vbHNSb290VmFyaWFibGU9RE9TX1RPT0xTX1JPT1QKKworaGFuZGxlSW5pdGlhbEhlbHBPcHRpb24gIiR7QH0iIDw8RU5ELU9GLUhFTFAKK0NvbmZpZ3VyZSBhIEJSTFRUWSBidWlsZCBmb3IgdGhlIERPUyBwbGF0Zm9ybS4KKworU3ludGF4OiAke3Byb2dyYW1OYW1lfSB7LWggfCBbLW9wdGlvbiAuLi5dfQorCitBbGwgb2YgdGhlIG9wdGlvbnMgYXJlIHBhc3NlZCB0aHJvdWdoLCB1bm1vZGlmaWVkLCBhcyBhZGRpdGlvbmFsIG9wdGlvbnMgdG8gdGhlIGNvbmZpZ3VyZSBzY3JpcHQuCitUaGUgJHt0b29sc1Jvb3RWYXJpYWJsZX0gZW52aXJvbm1lbnQgdmFyaWFibGUgbXVzdCBwb2ludCB0byB0aGUgcm9vdCBkaXJlY3RvcnkgZm9yIHRoZSBESkdQUCB0b2xzLgorRU5ELU9GLUhFTFAKKwordG9vbHNSb290PSIkeyF0b29sc1Jvb3RWYXJpYWJsZX0iCitbIC1uICIke3Rvb2xzUm9vdH0iIF0gfHwgc2VtYW50aWNFcnJvciAiJHt0b29sc1Jvb3RWYXJpYWJsZX0gbm90IHNldCIKK1sgIC1mICIke3Rvb2xzUm9vdH0vYmluLyR7dG9vbHNTeXN0ZW19LWdjYyIgXSB8fCBzZW1hbnRpY0Vycm9yICJub3QgYSBET1MgdG9vbHMgcm9vdDogJHt0b29sc1Jvb3R9IgorZXhwb3J0IHRvb2xzRGlyZWN0b3J5PSIke3Rvb2xzUm9vdH0vYmluIgorZXhwb3J0IFBBVEg9IiR7dG9vbHNEaXJlY3Rvcnl9OiR7UEFUSH0iCisKK2NoZWNrVG9vbCgpIHsKKyAgIGV2YWwgZXhwb3J0ICIkezF9PVxgc2V0IC0tIFwiJHt0b29sc0RpcmVjdG9yeX0vXCIqXCItJDJcIiAmJiBlY2hvIFwiXCR7MX1cIlxgIgorfQorCitjaGVja1Rvb2wgQ0MgZ2NjCitjaGVja1Rvb2wgTEQgbGQKK2NoZWNrVG9vbCBTVFJJUCBzdHJpcAorY2hlY2tUb29sIFJBTkxJQiByYW5saWIKKworZXhwb3J0IENGTEFHUz0iLWZnbnU4OS1pbmxpbmUiCitleHBvcnQgTERGTEFHUz0iIgorCisjIEJyYWlsbGUgZHJpdmVycyBhbHJlYWR5IGRpc2FibGVkOgorIyBsYiAoYnkgLS13aXRob3V0LWxpYmJyYWlsbGUpCisjIHh3IChieSAtLWRpc2FibGUteCkKKworY29uZmlndXJlT3B0aW9ucz0oCisgICAtLXdpdGgtY29uZmlndXJhdGlvbi1maWxlPWJybHR0eS5jZmcKKyAgIC0td2l0aC13cml0YWJsZS1kaXJlY3Rvcnk9JyR7cHJlZml4fS8nCisgICAtLWVuYWJsZS1yZWxvY2F0YWJsZS1pbnN0YWxsCisKKyAgIC0tZGlzYWJsZS1hcGkKKyAgIC0tZGlzYWJsZS1leHBhdAorICAgLS1kaXNhYmxlLWdwbQorICAgLS1kaXNhYmxlLWljdQorICAgLS1kaXNhYmxlLWxpYmxvdWlzCisgICAtLWRpc2FibGUtcG9sa2l0CisgICAtLWRpc2FibGUteAorCisgICAtLXdpdGhvdXQtbGliYnJhaWxsZQorICAgLS13aXRoLWJyYWlsbGUtZHJpdmVyPS12ciwtY24sYWxsCisKKyAgIC0td2l0aG91dC1lc3BlYWsKKyAgIC0td2l0aG91dC1lc3BlYWstbmcKKyAgIC0td2l0aG91dC1mbGl0ZQorICAgLS13aXRob3V0LW1pa3JvcHVoZQorICAgLS13aXRob3V0LXNwZWVjaGQKKyAgIC0td2l0aG91dC1zd2lmdAorICAgLS13aXRob3V0LXRoZXRhCisgICAtLXdpdGgtc3BlZWNoLWRyaXZlcj0teHMsYWxsCisKKyAgIC0td2l0aC1zY3JlZW4tZHJpdmVyPXBiLC1hbGwKKworICAgLS13aXRob3V0LWJlbGwtcGFja2FnZQorICAgLS13aXRob3V0LWxlZHMtcGFja2FnZQorCisgICAtLXdpdGhvdXQtcGNtLXBhY2thZ2UKKyAgIC0td2l0aG91dC1taWRpLXBhY2thZ2UKKyAgIC0td2l0aG91dC1mbS1wYWNrYWdlCisKKyAgIC0td2l0aG91dC1wZ21wYXRoLXBhY2thZ2UKKyAgIC0td2l0aG91dC1wZ21wcml2cy1wYWNrYWdlCisgICAtLXdpdGhvdXQtc2VydmljZS1wYWNrYWdlCisgICAtLXdpdGhvdXQtcGFyYW1zLXBhY2thZ2UKKyAgIC0td2l0aG91dC1yZ3gtcGFja2FnZQorICAgLS13aXRob3V0LWhvc3RjbWQtcGFja2FnZQorICAgLS13aXRob3V0LW1udHB0LXBhY2thZ2UKKyAgIC0td2l0aG91dC1tbnRmcy1wYWNrYWdlCisgICAtLXdpdGhvdXQta2JkLXBhY2thZ2UKKworICAgLS13aXRob3V0LXVzYi1wYWNrYWdlCisgICAtLXdpdGhvdXQtYmx1ZXRvb3RoLXBhY2thZ2UKKyAgIC0td2l0aG91dC1oaWQtcGFja2FnZQorCisgICAtLWhvc3Q9IiR7dG9vbHNTeXN0ZW19IgorKQorCisiJHtwcm9ncmFtRGlyZWN0b3J5fS9jb25maWd1cmUiIC0tcXVpZXQgIiR7Y29uZmlndXJlT3B0aW9uc1tAXX0iICIke0B9IgorZXhpdCAwCmRpZmYgLS1naXQgYS9jZmctZ3J1YiBiL2NmZy1ncnViCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjdmMTc4ZjMKLS0tIC9kZXYvbnVsbAorKysgYi9jZmctZ3J1YgpAQCAtMCwwICsxLDU5IEBACisjIS9iaW4vc2gKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyMgICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisjCisjIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyMKKyMgQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisuICJgZGlybmFtZSAiJHswfSJgL2JybHR0eS1wcm9sb2d1ZS5zaCIKKworaGFuZGxlSW5pdGlhbEhlbHBPcHRpb24gIiR7QH0iIDw8RU5ELU9GLUhFTFAKK0NvbmZpZ3VyZSBhIEJSTFRUWSBidWlsZCBmb3IgcnVubmluZyB3aXRoaW4gdGhlIEdydWIgYm9vdCBsb2FkZXIuCisKK1N5bnRheDogJHtwcm9ncmFtTmFtZX0gey1oIHwgWy1vcHRpb24gLi4uXX0KKworQWxsIG9mIHRoZSBvcHRpb25zIGFyZSBwYXNzZWQgdGhyb3VnaCwgdW5tb2RpZmllZCwgYXMgYWRkaXRpb25hbCBvcHRpb25zIHRvIHRoZSBjb25maWd1cmUgc2NyaXB0LgorRU5ELU9GLUhFTFAKKworIyBCcmFpbGxlIGRyaXZlcnMgYWxyZWFkeSBkaXNhYmxlZDoKKyMgYmEgKGJ5IC0tZGlzYWJsZS1hcGkpCisjIGlsIChub3Qgb24gTGludXgpCisjIGxiIChieSAtLXdpdGhvdXQtbGliYnJhaWxsZSkKKyMgeHcgKGJ5IC0tZGlzYWJsZS14KQorCitjb25maWd1cmVPcHRpb25zPSgKKyAgIC0tZGlzYWJsZS1hcGkKKyAgIC0tZGlzYWJsZS1pY3UKKyAgIC0tZGlzYWJsZS1ncG0KKyAgIC0tZGlzYWJsZS1wb2xraXQKKyAgIC0tZGlzYWJsZS14CisKKyAgIC0td2l0aG91dC1saWJicmFpbGxlCisgICAtLXdpdGgtYnJhaWxsZS1kcml2ZXI9LWx0LC10dCwtdmQsLXZyCisKKyAgIC0tZGlzYWJsZS1zcGVlY2gtc3VwcG9ydAorCisgICAtLXdpdGhvdXQtYmVsbC1wYWNrYWdlCisgICAtLXdpdGhvdXQtbGVkcy1wYWNrYWdlCisKKyAgIC0td2l0aG91dC1wY20tcGFja2FnZQorICAgLS13aXRob3V0LW1pZGktcGFja2FnZQorICAgLS13aXRob3V0LWZtLXBhY2thZ2UKKworICAgLS1ob3N0PWkzODYtZWxmCispCisKKyIke3Byb2dyYW1EaXJlY3Rvcnl9L2NvbmZpZ3VyZSIgLS1xdWlldCAiJHtjb25maWd1cmVPcHRpb25zW0BdfSIgIiR7QH0iCitleGl0ICIkez99IgpkaWZmIC0tZ2l0IGEvY2ZnLWlyaXMgYi9jZmctaXJpcwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5hYTc4OTQ1Ci0tLSAvZGV2L251bGwKKysrIGIvY2ZnLWlyaXMKQEAgLTAsMCArMSw1OCBAQAorIyEvYmluL3NoCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisjICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorIworIyBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisjCisjIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisjCisjIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyMgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorIyBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyMKKyMgV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworIworIyBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworLiAiYGRpcm5hbWUgIiR7MH0iYC9icmx0dHktcHJvbG9ndWUuc2giCisKK2hhbmRsZUluaXRpYWxIZWxwT3B0aW9uICIke0B9IiA8PEVORC1PRi1IRUxQCitDb25maWd1cmUgYSBCUkxUVFkgYnVpbGQgZm9yIHJ1bm5pbmcgb24gYW4gSXJpcyBicmFpbGxlIGRpc3BsYXkuCisKK1N5bnRheDogJHtwcm9ncmFtTmFtZX0gey1oIHwgWy1vcHRpb24gLi4uXX0KKworQWxsIG9mIHRoZSBvcHRpb25zIGFyZSBwYXNzZWQgdGhyb3VnaCwgdW5tb2RpZmllZCwgYXMgYWRkaXRpb25hbCBvcHRpb25zIHRvIHRoZSBjb25maWd1cmUgc2NyaXB0LgorRU5ELU9GLUhFTFAKKworY29uZmlndXJlT3B0aW9ucz0oCisgICAtLWVuYWJsZS1zdGFuZGFsb25lLXByb2dyYW1zCisgICAtLXdpdGhvdXQtZHlubGQtcGFja2FnZQorCisgICAtLWRpc2FibGUtYXBpCisgICAtLWRpc2FibGUtZ3BtCisgICAtLWRpc2FibGUtaWN1CisgICAtLWRpc2FibGUtcG9sa2l0CisgICAtLWRpc2FibGUteAorICAgLS13aXRob3V0LWN1cnNlcworCisgICAtLXdpdGhvdXQtbGliYnJhaWxsZQorICAgLS13aXRoLWJyYWlsbGUtZHJpdmVyPWlyLC1hbGwKKyAgIC0tZGlzYWJsZS1zcGVlY2gtc3VwcG9ydAorICAgLS13aXRoLXNjcmVlbi1kcml2ZXI9bHgsLWFsbAorCisgICAtLXdpdGhvdXQtdXNiLXBhY2thZ2UKKyAgIC0td2l0aG91dC1ibHVldG9vdGgtcGFja2FnZQorCisgICAtLXdpdGhvdXQtcGNtLXBhY2thZ2UKKyAgIC0td2l0aG91dC1taWRpLXBhY2thZ2UKKworICAgLS13aXRob3V0LXNlcnZpY2UtcGFja2FnZQorICAgLS13aXRob3V0LW1udHB0LXBhY2thZ2UKKykKKworZXhwb3J0IENDPSJnY2MgLW0zMiIKK2VjaG8gIiR7cHJvZ3JhbURpcmVjdG9yeX0vY29uZmlndXJlIiAtLXF1aWV0ICIke2NvbmZpZ3VyZU9wdGlvbnNbQF19IiAiJHtAfSIKK2V4aXQgIiR7P30iCmRpZmYgLS1naXQgYS9jZmctb3BlbmJzZCBiL2NmZy1vcGVuYnNkCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjE5MjUxYzUKLS0tIC9kZXYvbnVsbAorKysgYi9jZmctb3BlbmJzZApAQCAtMCwwICsxLDY5IEBACisjIS91c3IvYmluL2VudiBiYXNoCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisjICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorIworIyBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisjCisjIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisjCisjIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyMgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorIyBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyMKKyMgV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworIworIyBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworLiAiYGRpcm5hbWUgIiR7MH0iYC9icmx0dHktcHJvbG9ndWUuc2giCisKK2hhbmRsZUluaXRpYWxIZWxwT3B0aW9uICIke0B9IiA8PEVORC1PRi1IRUxQCitDb25maWd1cmUgYSBCUkxUVFkgYnVpbGQgZm9yIHRoZSBPcGVuQlNEIHBsYXRmb3JtLgorCitTeW50YXg6ICR7cHJvZ3JhbU5hbWV9IHstaCB8IFstb3B0aW9uIC4uLl19CisKK0FsbCBvZiB0aGUgb3B0aW9ucyBhcmUgcGFzc2VkIHRocm91Z2gsIHVubW9kaWZpZWQsIGFzIGFkZGl0aW9uYWwgb3B0aW9ucyB0byB0aGUgY29uZmlndXJlIHNjcmlwdC4KK0VORC1PRi1IRUxQCisKK2NvbmZpZ3VyZU9wdGlvbnM9KAorICAgLS1kaXNhYmxlLWljdQorICAgLS1kaXNhYmxlLWxpYmxvdWlzCisgICAtLWRpc2FibGUtcG9sa2l0CisKKyAgIC0td2l0aG91dC1saWJicmFpbGxlCisgICAtLXdpdGhvdXQtZXNwZWFrCisgICAtLXdpdGhvdXQtZXNwZWFrLW5nCisgICAtLXdpdGhvdXQtZmxpdGUKKyAgIC0td2l0aG91dC1taWtyb3B1aGUKKyAgIC0td2l0aG91dC1zcGVlY2hkCisgICAtLXdpdGhvdXQtc3dpZnQKKyAgIC0td2l0aG91dC10aGV0YQorCisgICAtLWRpc2FibGUtZW1hY3MtYmluZGluZ3MKKyAgIC0tZGlzYWJsZS1qYXZhLWJpbmRpbmdzCisgICAtLWRpc2FibGUtbHVhLWJpbmRpbmdzCisgICAtLWRpc2FibGUtb2NhbWwtYmluZGluZ3MKKyAgIC0tZGlzYWJsZS1weXRob24tYmluZGluZ3MKKworICAgLS13aXRob3V0LXBnbXBhdGgtcGFja2FnZQorICAgLS13aXRob3V0LXBnbXByaXZzLXBhY2thZ2UKKyAgIC0td2l0aG91dC1zZXJ2aWNlLXBhY2thZ2UKKyAgIC0td2l0aG91dC1wYXJhbXMtcGFja2FnZQorICAgLS13aXRob3V0LWNoYXJzZXQtcGFja2FnZQorICAgLS13aXRob3V0LXJneC1wYWNrYWdlCisgICAtLXdpdGhvdXQtbW50cHQtcGFja2FnZQorICAgLS13aXRob3V0LW1udGZzLXBhY2thZ2UKKyAgIC0td2l0aG91dC1rYmQtcGFja2FnZQorICAgLS13aXRob3V0LWJlbGwtcGFja2FnZQorICAgLS13aXRob3V0LWxlZHMtcGFja2FnZQorICAgLS13aXRob3V0LXBjbS1wYWNrYWdlCisgICAtLXdpdGhvdXQtbWlkaS1wYWNrYWdlCisgICAtLXdpdGhvdXQtYmx1ZXRvb3RoLXBhY2thZ2UKKyAgIC0td2l0aG91dC1oaWQtcGFja2FnZQorICAgLS13aXRob3V0LXBvcnRzLXBhY2thZ2UKKykKKworIiR7cHJvZ3JhbURpcmVjdG9yeX0vY29uZmlndXJlIiAtLXF1aWV0ICIke2NvbmZpZ3VyZU9wdGlvbnNbQF19IiAiJHtAfSIKK2V4aXQgIiR7P30iCmRpZmYgLS1naXQgYS9jZmctd2luZG93cyBiL2NmZy13aW5kb3dzCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmQzMGUyNjQKLS0tIC9kZXYvbnVsbAorKysgYi9jZmctd2luZG93cwpAQCAtMCwwICsxLDYzIEBACisjIS9iaW4vYmFzaCAtcAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorIyAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyMKKyMgQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorIworIyBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorIworIyBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisjIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyMgbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisjCisjIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKy4gImBkaXJuYW1lICIkezB9ImAvYnJsdHR5LXByb2xvZ3VlLmJhc2giCisKK2hhbmRsZUluaXRpYWxIZWxwT3B0aW9uICIke0B9IiA8PEVORC1PRi1IRUxQCitDb25maWd1cmUgYSBCUkxUVFkgYnVpbGQgZm9yIHRoZSBXaW5kb3dzIHBsYXRmb3JtLgorCitTeW50YXg6ICR7cHJvZ3JhbU5hbWV9IHstaCB8IFstb3B0aW9uIC4uLl19CisKK0FsbCBvZiB0aGUgb3B0aW9ucyBhcmUgcGFzc2VkIHRocm91Z2gsIHVubW9kaWZpZWQsIGFzIGFkZGl0aW9uYWwgb3B0aW9ucyB0byB0aGUgY29uZmlndXJlIHNjcmlwdC4KK0VORC1PRi1IRUxQCisKK2NvbmZpZ3VyZU9wdGlvbnM9KAorICAgLS1lbmFibGUtcmVsb2NhdGFibGUtaW5zdGFsbAorCisgICAtLWRpc2FibGUtZXhwYXQKKyAgIC0tZGlzYWJsZS1ncG0KKyAgIC0tZGlzYWJsZS1pMThuCisgICAtLWRpc2FibGUtaWN1CisgICAtLWRpc2FibGUtbGlibG91aXMKKyAgIC0tZGlzYWJsZS1wb2xraXQKKyAgIC0tZGlzYWJsZS14CisKKyAgIC0td2l0aG91dC1saWJicmFpbGxlCisgICAtLWRpc2FibGUtc3BlZWNoLXN1cHBvcnQKKworICAgLS13aXRob3V0LXBnbXByaXZzLXBhY2thZ2UKKyAgIC0td2l0aG91dC1wYXJhbXMtcGFja2FnZQorICAgLS13aXRob3V0LXJneC1wYWNrYWdlCisgICAtLXdpdGhvdXQtbW50cHQtcGFja2FnZQorICAgLS13aXRob3V0LW1udGZzLXBhY2thZ2UKKyAgIC0td2l0aG91dC1rYmQtcGFja2FnZQorICAgLS13aXRob3V0LWJlbGwtcGFja2FnZQorICAgLS13aXRob3V0LWxlZHMtcGFja2FnZQorICAgLS13aXRob3V0LWhpZC1wYWNrYWdlCisKKyAgIC0tZGlzYWJsZS1lbWFjcy1iaW5kaW5ncworICAgLS1kaXNhYmxlLWphdmEtYmluZGluZ3MKKyAgIC0tZGlzYWJsZS1sdWEtYmluZGluZ3MKKyAgIC0tZGlzYWJsZS1vY2FtbC1iaW5kaW5ncworICAgLS1kaXNhYmxlLXRjbC1iaW5kaW5ncworKQorCit0b1JlbGF0aXZlUGF0aCAiJHtwcm9ncmFtRGlyZWN0b3J5fSIgY29uZmlndXJlRGlyZWN0b3J5CisiJHtjb25maWd1cmVEaXJlY3Rvcnl9L2NvbmZpZ3VyZSIgLS1xdWlldCAiJHtjb25maWd1cmVPcHRpb25zW0BdfSIgIiR7QH0iCitleGl0ICIkez99IgpkaWZmIC0tZ2l0IGEvY2hraGRycyBiL2Noa2hkcnMKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYWRiZmQ0NAotLS0gL2Rldi9udWxsCisrKyBiL2Noa2hkcnMKQEAgLTAsMCArMSwzMiBAQAorIyEvYmluL2Jhc2gKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyMgICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisjCisjIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyMKKyMgQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisuICJgZGlybmFtZSAiJHswfSJgL2JybHR0eS1wcm9sb2d1ZS5zaCIKK2FkZFByb2dyYW1QYXJhbWV0ZXIgZGlyZWN0b3J5IGhlYWRlcnNEaXJlY3RvcnkgInRoZSBkaXJlY3RvcnkgY29udGFpbmluZyB0aGUgaGVhZGVycyIKK3BhcnNlUHJvZ3JhbUFyZ3VtZW50cyAiJHtAfSIKKworc2V0IC1lCitjZCAiJHtoZWFkZXJzRGlyZWN0b3J5fSIKKworZGlmZiBcCisgICA8KGxzIC0xICouaCB8IHNvcnQgLXUpIFwKKyAgIDwoc2VkIC1uIC1lICdzL14gKiMgKmluY2x1ZGUgKiJcKC4qXCkiICokL1wxL3AnICouaCB8IHNvcnQgLXUpIFwKKyAgIHwgc2VkIC1uIC1lICdzL14+ICovL3AnIHwgc29ydCAtdQorCitleGl0IDAKZGlmZiAtLWdpdCBhL2NvbW1vbi5tayBiL2NvbW1vbi5tawpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45N2RlZDc4Ci0tLSAvZGV2L251bGwKKysrIGIvY29tbW9uLm1rCkBAIC0wLDAgKzEsMTQ4IEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisjICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorIworIyBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisjCisjIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisjCisjIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyMgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorIyBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyMKKyMgV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworIworIyBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworZGVmYXVsdDogYWxsCisKK0ZPUkNFOgorCitpbmNsdWRlICQoQkxEX1RPUCljb25maWcubWsKK2luY2x1ZGUgJChCTERfVE9QKWZvcmJ1aWxkLm1rCitpbmNsdWRlICQoU1JDX1RPUClhYnNkZXBzLm1rCisKKyUuJEI6ICQoU1JDX0RJUikvJS5jCisJJChDQ19GT1JfQlVJTEQpIC1ERk9SX0JVSUxEICQoQ0ZMQUdTX0ZPUl9CVUlMRCkgLW8gJEAgLWMgJDwKKworQVBJX05BTUUgPSBicmxhcGkKK0FQSV9BUkMgPSAkKEFSQ19QRlgpJChBUElfTkFNRSkuJChBUkNfRVhUKQorQVBJX0xJQiA9ICQoTElCX1BGWCkkKEFQSV9OQU1FKS4kKExJQl9FWFQpCitBUElfTElCX1ZFUlNJT05FRCA9ICQoQVBJX0xJQikuJChBUElfVkVSU0lPTikKKworQVBJX0RMTCA9ICQoTElCX1BGWCkkKEFQSV9OQU1FKS0kKEFQSV9WRVJTSU9OKS4kKExJQl9FWFQpCitBUElfSU1QTElCID0gJChBUkNfUEZYKSQoQVBJX05BTUUpLiQoTElCX0VYVCkuJChBUkNfRVhUKQorQVBJX0lNUExJQl9WRVJTSU9ORUQgPSAkKEFSQ19QRlgpJChBUElfTkFNRSktJChBUElfUkVMRUFTRSkuJChMSUJfRVhUKS4kKEFSQ19FWFQpCitBUElfREVGID0gJChBUElfTkFNRSkuZGVmCisKK0NPTU1BTkRTX09QVElPTlMgPSAtZiAkKFNSQ19UT1ApJChQR01fRElSKS9icmxfY21kcy5hd2sKK0NPTU1BTkRTX1NDUklQVFMgPSAkKENPTU1BTkRTX09QVElPTlM6LWY9KQorQ09NTUFORFNfU09VUkNFUyA9ICQoU1JDX1RPUCkkKEhEUl9ESVIpL2JybF9jbWRzLmggJChTUkNfVE9QKSQoSERSX0RJUikvYnJsX2N1c3RvbS5oCitDT01NQU5EU19ERVBFTkRFTkNJRVMgPSAkKENPTU1BTkRTX1NDUklQVFMpICQoQ09NTUFORFNfU09VUkNFUykKK0NPTU1BTkRTX0FSR1VNRU5UUyA9ICQoQ09NTUFORFNfT1BUSU9OUykgJChDT01NQU5EU19TT1VSQ0VTKQorCiticmxhcGk6CisJY2QgJChCTERfVE9QKSQoUEdNX0RJUikgJiYgJChNQUtFKSBhcGkKKworJChCTERfVE9QKSQoQlJMX0RJUikvRXVyb0JyYWlsbGUvYnJhaWxsZS4kTzogJChCTERfVE9QKSQoQlJMX0RJUikvRXVyb0JyYWlsbGUvZXVfYnJhaWxsZS4kTworJChCTERfVE9QKSQoQlJMX0RJUikvRXVyb0JyYWlsbGUvYnJhaWxsZS4kTzogJChCTERfVE9QKSQoQlJMX0RJUikvRXVyb0JyYWlsbGUvZXVfY2xpby4kTworJChCTERfVE9QKSQoQlJMX0RJUikvRXVyb0JyYWlsbGUvYnJhaWxsZS4kTzogJChCTERfVE9QKSQoQlJMX0RJUikvRXVyb0JyYWlsbGUvZXVfZXN5c2lyaXMuJE8KKwljZCAkKEBEKSAmJiAkKE1BS0UpICQoQEYpCisKK0lOU1RBTExfUFJPR1JBTV9ESVJFQ1RPUlkgPSAkKElOU1RBTExfUk9PVCkkKFBST0dSQU1fRElSRUNUT1JZKQoraW5zdGFsbC1wcm9ncmFtLWRpcmVjdG9yeToKKwkkKElOU1RBTExfRElSRUNUT1JZKSAkKElOU1RBTExfUFJPR1JBTV9ESVJFQ1RPUlkpCisKK0lOU1RBTExfQ09NTUFORFNfRElSRUNUT1JZID0gJChJTlNUQUxMX1JPT1QpJChDT01NQU5EU19ESVJFQ1RPUlkpCitpbnN0YWxsLWNvbW1hbmRzLWRpcmVjdG9yeToKKwkkKElOU1RBTExfRElSRUNUT1JZKSAkKElOU1RBTExfQ09NTUFORFNfRElSRUNUT1JZKQorCitJTlNUQUxMX0RSSVZFUlNfRElSRUNUT1JZID0gJChJTlNUQUxMX1JPT1QpJChEUklWRVJTX0RJUkVDVE9SWSkKK2luc3RhbGwtZHJpdmVycy1kaXJlY3Rvcnk6CisJJChJTlNUQUxMX0RJUkVDVE9SWSkgJChJTlNUQUxMX0RSSVZFUlNfRElSRUNUT1JZKQorCitJTlNUQUxMX1RBQkxFU19ESVJFQ1RPUlkgPSAkKElOU1RBTExfUk9PVCkkKFRBQkxFU19ESVJFQ1RPUlkpCitpbnN0YWxsLXRhYmxlcy1kaXJlY3Rvcnk6CisJJChJTlNUQUxMX0RJUkVDVE9SWSkgJChJTlNUQUxMX1RBQkxFU19ESVJFQ1RPUlkpCisKK0lOU1RBTExfVEVYVF9UQUJMRVNfRElSRUNUT1JZID0gJChJTlNUQUxMX1RBQkxFU19ESVJFQ1RPUlkpLyQoVEVYVF9UQUJMRVNfU1VCRElSRUNUT1JZKQoraW5zdGFsbC10ZXh0LXRhYmxlcy1kaXJlY3Rvcnk6CisJJChJTlNUQUxMX0RJUkVDVE9SWSkgJChJTlNUQUxMX1RFWFRfVEFCTEVTX0RJUkVDVE9SWSkKKworSU5TVEFMTF9DT05UUkFDVElPTl9UQUJMRVNfRElSRUNUT1JZID0gJChJTlNUQUxMX1RBQkxFU19ESVJFQ1RPUlkpLyQoQ09OVFJBQ1RJT05fVEFCTEVTX1NVQkRJUkVDVE9SWSkKK2luc3RhbGwtY29udHJhY3Rpb24tdGFibGVzLWRpcmVjdG9yeToKKwkkKElOU1RBTExfRElSRUNUT1JZKSAkKElOU1RBTExfQ09OVFJBQ1RJT05fVEFCTEVTX0RJUkVDVE9SWSkKKworSU5TVEFMTF9BVFRSSUJVVEVTX1RBQkxFU19ESVJFQ1RPUlkgPSAkKElOU1RBTExfVEFCTEVTX0RJUkVDVE9SWSkvJChBVFRSSUJVVEVTX1RBQkxFU19TVUJESVJFQ1RPUlkpCitpbnN0YWxsLWF0dHJpYnV0ZXMtdGFibGVzLWRpcmVjdG9yeToKKwkkKElOU1RBTExfRElSRUNUT1JZKSAkKElOU1RBTExfQVRUUklCVVRFU19UQUJMRVNfRElSRUNUT1JZKQorCitJTlNUQUxMX0tFWUJPQVJEX1RBQkxFU19ESVJFQ1RPUlkgPSAkKElOU1RBTExfVEFCTEVTX0RJUkVDVE9SWSkvJChLRVlCT0FSRF9UQUJMRVNfU1VCRElSRUNUT1JZKQoraW5zdGFsbC1rZXlib2FyZC10YWJsZXMtZGlyZWN0b3J5OgorCSQoSU5TVEFMTF9ESVJFQ1RPUlkpICQoSU5TVEFMTF9LRVlCT0FSRF9UQUJMRVNfRElSRUNUT1JZKQorCitJTlNUQUxMX0lOUFVUX1RBQkxFU19ESVJFQ1RPUlkgPSAkKElOU1RBTExfVEFCTEVTX0RJUkVDVE9SWSkvJChJTlBVVF9UQUJMRVNfU1VCRElSRUNUT1JZKQoraW5zdGFsbC1pbnB1dC10YWJsZXMtZGlyZWN0b3J5OgorCSQoSU5TVEFMTF9ESVJFQ1RPUlkpICQoSU5TVEFMTF9JTlBVVF9UQUJMRVNfRElSRUNUT1JZKQorCitJTlNUQUxMX0xPQ0FMRV9ESVJFQ1RPUlkgPSAkKElOU1RBTExfUk9PVCkkKGxvY2FsZWRpcikKK2luc3RhbGwtbG9jYWxlLWRpcmVjdG9yeToKKwkkKElOU1RBTExfRElSRUNUT1JZKSAkKElOU1RBTExfTE9DQUxFX0RJUkVDVE9SWSkKKworSU5TVEFMTF9NQU5fRElSRUNUT1JZID0gJChJTlNUQUxMX1JPT1QpJChNQU5QQUdFX0RJUkVDVE9SWSkKKworSU5TVEFMTF9NQU4xX0RJUkVDVE9SWSA9ICQoSU5TVEFMTF9NQU5fRElSRUNUT1JZKS9tYW4xCitpbnN0YWxsLW1hbjEtZGlyZWN0b3J5OgorCSQoSU5TVEFMTF9ESVJFQ1RPUlkpICQoSU5TVEFMTF9NQU4xX0RJUkVDVE9SWSkKKworSU5TVEFMTF9NQU4zX0RJUkVDVE9SWSA9ICQoSU5TVEFMTF9NQU5fRElSRUNUT1JZKS9tYW4zCitpbnN0YWxsLW1hbjMtZGlyZWN0b3J5OgorCSQoSU5TVEFMTF9ESVJFQ1RPUlkpICQoSU5TVEFMTF9NQU4zX0RJUkVDVE9SWSkKKworSU5TVEFMTF9ET0NVTUVOVF9ESVJFQ1RPUlkgPSAkKElOU1RBTExfUk9PVCkkKGRvY2RpcikKK2luc3RhbGwtZG9jdW1lbnQtZGlyZWN0b3J5OgorCSQoSU5TVEFMTF9ESVJFQ1RPUlkpICQoSU5TVEFMTF9ET0NVTUVOVF9ESVJFQ1RPUlkpCisKK0lOU1RBTExfSU5DTFVERV9ESVJFQ1RPUlkgPSAkKElOU1RBTExfUk9PVCkkKElOQ0xVREVfRElSRUNUT1JZKQoraW5zdGFsbC1pbmNsdWRlLWRpcmVjdG9yeToKKwkkKElOU1RBTExfRElSRUNUT1JZKSAkKElOU1RBTExfSU5DTFVERV9ESVJFQ1RPUlkpCisKK0lOU1RBTExfUEtHQ09ORklHX0RJUkVDVE9SWSA9ICQoSU5TVEFMTF9ST09UKSQobGliZGlyKS9wa2djb25maWcKK2luc3RhbGwtcGtnY29uZmlnLWRpcmVjdG9yeToKKwkkKElOU1RBTExfRElSRUNUT1JZKSAkKElOU1RBTExfUEtHQ09ORklHX0RJUkVDVE9SWSkKKworSU5TVEFMTF9BUElMSUJfRElSRUNUT1JZID0gJChJTlNUQUxMX1JPT1QpJChsaWJkaXIpCitpbnN0YWxsLWFwaWxpYi1kaXJlY3Rvcnk6CisJJChJTlNUQUxMX0RJUkVDVE9SWSkgJChJTlNUQUxMX0FQSUxJQl9ESVJFQ1RPUlkpCisKK0lOU1RBTExfQVBJSERSX0RJUkVDVE9SWSA9ICQoSU5TVEFMTF9ST09UKSQoaW5jbHVkZWRpcikKK2luc3RhbGwtYXBpaGRyLWRpcmVjdG9yeToKKwkkKElOU1RBTExfRElSRUNUT1JZKSAkKElOU1RBTExfQVBJSERSX0RJUkVDVE9SWSkKKworSU5TVEFMTF9BUElTT0NfRElSRUNUT1JZID0gJChJTlNUQUxMX1JPT1QpJChBUElfU09DS0VUX1BBVEgpCitpbnN0YWxsLWFwaXNvYy1kaXJlY3Rvcnk6CisJLSQoSU5TVEFMTF9ESVJFQ1RPUlkpIC1tIDE3NzcgJChJTlNUQUxMX0FQSVNPQ19ESVJFQ1RPUlkpCisKK0lOU1RBTExfWDExX0FVVE9TVEFSVF9ESVJFQ1RPUlkgPSAkKElOU1RBTExfUk9PVCkkKHN5c2NvbmZkaXIpL1gxMS9Yc2Vzc2lvbi5kCitpbnN0YWxsLXgxMS1hdXRvc3RhcnQtZGlyZWN0b3J5OgorCS0kKElOU1RBTExfRElSRUNUT1JZKSAkKElOU1RBTExfWDExX0FVVE9TVEFSVF9ESVJFQ1RPUlkpCisKK0lOU1RBTExfR0RNX0FVVE9TVEFSVF9ESVJFQ1RPUlkgPSAkKElOU1RBTExfUk9PVCkkKGRhdGFkaXIpL2dkbS9ncmVldGVyL2F1dG9zdGFydAoraW5zdGFsbC1nZG0tYXV0b3N0YXJ0LWRpcmVjdG9yeToKKwkkKElOU1RBTExfRElSRUNUT1JZKSAkKElOU1RBTExfR0RNX0FVVE9TVEFSVF9ESVJFQ1RPUlkpCisKK2NsZWFuOjoKKwktdGVzdCAtZiBjb3JlICYmIHJtIC1mIGNvcmUKKwktcm0gLWYgKi4kTyAqLmF1dG8uaCAqLmF1dG8uYyBpbXBsaWIuYQorCitkaXN0Y2xlYW46OgorCS1ybSAtZiAqfiAqb3JpZyBcIypcIyAqLnJlaiA/IGEub3V0CisJLXJtIC1mIE1ha2VmaWxlCisKK3NyYzoKKwkkKFNZTUxJTkspICQoU1JDX0RJUikgc3JjCisKKy5ERUxFVEVfT05fRVJST1I6CisKZGlmZiAtLWdpdCBhL2NvbmZpZy5oIGIvY29uZmlnLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTQyMDdiOAotLS0gL2Rldi9udWxsCisrKyBiL2NvbmZpZy5oCkBAIC0wLDAgKzEsNjkzIEBACisvKiBjb25maWcuaC4gIEdlbmVyYXRlZCBmcm9tIGNvbmZpZy5oLmluIGJ5IGNvbmZpZ3VyZS4gICovCisvKgorICogQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyAqICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyAqCisgKiBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorICoKKyAqIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyAqCisgKiBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisgKi8KKworI2lmbmRlZiBCUkxUVFlfSU5DTFVERURfQ09ORklHCisjZGVmaW5lIEJSTFRUWV9JTkNMVURFRF9DT05GSUcKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZiAvKiBfX2NwbHVzcGx1cyAqLworCisvKiBEZWZpbmUgdGhpcyB0byBiZSBhIHN0cmluZyBjb250YWluaW5nIHRoZSBjb3B5cmlnaHQgbm90aWNlLiAqLworI2RlZmluZSBQQUNLQUdFX0NPUFlSSUdIVCAiwqkgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycyIKKworLyogRGVmaW5lIHRoaXMgdG8gYmUgYSBzdHJpbmcgY29udGFpbmluZyB0aGUgZnVsbCBuYW1lIG9mIHRoZSBwYWNrYWdlLiAqLworI2RlZmluZSBQQUNLQUdFX05BTUUgIkJSTFRUWSIKKworLyogRGVmaW5lIHRoaXMgdG8gYmUgYSBzdHJpbmcgY29udGFpbmluZyB0aGUgdmVyc2lvbiBvZiB0aGUgcGFja2FnZS4gKi8KKyNkZWZpbmUgUEFDS0FHRV9WRVJTSU9OICI2LjYiCisKKy8qIERlZmluZSB0aGlzIHRvIGJlIGEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIGZ1bGwgbmFtZSBhbmQgdmVyc2lvbiBvZiB0aGUgcGFja2FnZS4gKi8KKyNkZWZpbmUgUEFDS0FHRV9TVFJJTkcgIkJSTFRUWSA2LjYiCisKKy8qIERlZmluZSB0aGlzIHRvIGJlIGEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIFVSTCBvZiB0aGUgaG9tZSBwYWdlIG9mIHRoZSBwYWNrYWdlLiAqLworI2RlZmluZSBQQUNLQUdFX1VSTCAiaHR0cHM6Ly9icmx0dHkuYXBwLyIKKworLyogRGVmaW5lIHRoaXMgdG8gYmUgYSBzdHJpbmcgY29udGFpbmluZyB0aGUgc2hvcnQgbmFtZSBvZiB0aGUgcGFja2FnZS4gKi8KKyNkZWZpbmUgUEFDS0FHRV9UQVJOQU1FICJicmx0dHkiCisKKy8qIERlZmluZSB0aGlzIHRvIGJlIGEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIGFkZHJlc3Mgd2hlcmUgYnVnIHJlcG9ydHMgc2hvdWxkIGJlIHNlbnQuICovCisjZGVmaW5lIFBBQ0tBR0VfQlVHUkVQT1JUICJCUkxUVFlAYnJsdHR5LmFwcCIKKworLyogRGVmaW5lIHRoaXMgdG8gYmUgYSBzdHJpbmcgY29udGFpbmluZyB0aGUgYmFzZSBtb2R1bGUgbmFtZS4gKi8KKyNkZWZpbmUgTU9EVUxFX05BTUUgImxpYmJybHR0eSIKKworLyogRGVmaW5lIHRoaXMgdG8gYmUgYSBzdHJpbmcgY29udGFpbmluZyB0aGUgbW9kdWxlIGV4dGVuc2lvbi4gKi8KKyNkZWZpbmUgTU9EVUxFX0VYVEVOU0lPTiAic28iCisKKy8qIERlZmluZSB0aGlzIHRvIGJlIGEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIGxpYnJhcnkgZXh0ZW5zaW9uLiAqLworI2RlZmluZSBMSUJSQVJZX0VYVEVOU0lPTiAic28iCisKKy8qIERlZmluZSBvbmx5IG9uZSBvZiB0aGUgZm9sbG93aW5nIHByb2dyYW0gcGF0aCBwYWNrYWdlcy4gKi8KKyNkZWZpbmUgVVNFX1BLR19QR01QQVRIX05PTkUgMQorLyogI3VuZGVmIFVTRV9QS0dfUEdNUEFUSF9MSU5VWCAqLworLyogI3VuZGVmIFVTRV9QS0dfUEdNUEFUSF9TT0xBUklTICovCisvKiAjdW5kZWYgVVNFX1BLR19QR01QQVRIX1dJTkRPV1MgKi8KKworLyogRGVmaW5lIG9ubHkgb25lIG9mIHRoZSBmb2xsb3dpbmcgc3lzdGVtIHNlcnZpY2UgcGFja2FnZXMuICovCisjZGVmaW5lIFVTRV9QS0dfU0VSVklDRV9OT05FIDEKKy8qICN1bmRlZiBVU0VfUEtHX1NFUlZJQ0VfV0lORE9XUyAqLworCisvKiBEZWZpbmUgb25seSBvbmUgb2YgdGhlIGZvbGxvd2luZyBib290IHBhcmFtZXRlcnMgcGFja2FnZXMuICovCisjZGVmaW5lIFVTRV9QS0dfUEFSQU1TX05PTkUgMQorLyogI3VuZGVmIFVTRV9QS0dfUEFSQU1TX0xJTlVYICovCisKKy8qIERlZmluZSBvbmx5IG9uZSBvZiB0aGUgZm9sbG93aW5nIGR5bmFtaWMgbG9hZGluZyBwYWNrYWdlcy4gKi8KKy8qICN1bmRlZiBVU0VfUEtHX0RZTkxEX05PTkUgKi8KKyNkZWZpbmUgVVNFX1BLR19EWU5MRF9ETEZDTiAxCisvKiAjdW5kZWYgVVNFX1BLR19EWU5MRF9EWUxEICovCisvKiAjdW5kZWYgVVNFX1BLR19EWU5MRF9HUlVCICovCisvKiAjdW5kZWYgVVNFX1BLR19EWU5MRF9TSEwgKi8KKy8qICN1bmRlZiBVU0VfUEtHX0RZTkxEX1dJTkRPV1MgKi8KKworLyogRGVmaW5lIG9ubHkgb25lIG9mIHRoZSBmb2xsb3dpbmcgcmVndWxhciBleHByZXNzaW9uIHBhY2thZ2VzLiAqLworI2RlZmluZSBVU0VfUEtHX1JHWF9OT05FIDEKKy8qICN1bmRlZiBVU0VfUEtHX1JHWF9MSUJQQ1JFMzIgKi8KKy8qICN1bmRlZiBVU0VfUEtHX1JHWF9MSUJQQ1JFMl8zMiAqLworCisvKiBEZWZpbmUgb25seSBvbmUgb2YgdGhlIGZvbGxvd2luZyBjaGFyYWN0ZXIgc2V0IHBhY2thZ2VzLiAqLworI2RlZmluZSBVU0VfUEtHX0NIQVJTRVRfTk9ORSAxCisvKiAjdW5kZWYgVVNFX1BLR19DSEFSU0VUX0dSVUIgKi8KKy8qICN1bmRlZiBVU0VfUEtHX0NIQVJTRVRfSUNPTlYgKi8KKy8qICN1bmRlZiBVU0VfUEtHX0NIQVJTRVRfTVNET1MgKi8KKy8qICN1bmRlZiBVU0VfUEtHX0NIQVJTRVRfV0lORE9XUyAqLworCisvKiBEZWZpbmUgb25seSBvbmUgb2YgdGhlIGZvbGxvd2luZyBob3N0IGNvbW1hbmQgcGFja2FnZXMuICovCisjZGVmaW5lIFVTRV9QS0dfSE9TVENNRF9OT05FIDEKKy8qICN1bmRlZiBVU0VfUEtHX0hPU1RDTURfVU5JWCAqLworLyogI3VuZGVmIFVTRV9QS0dfSE9TVENNRF9XSU5ET1dTICovCisKKy8qIERlZmluZSBvbmx5IG9uZSBvZiB0aGUgZm9sbG93aW5nIG1vdW50IHBvaW50IHBhY2thZ2VzLiAqLworI2RlZmluZSBVU0VfUEtHX01OVFBUX05PTkUgMQorLyogI3VuZGVmIFVTRV9QS0dfTU5UUFRfTU5URU5UICovCisvKiAjdW5kZWYgVVNFX1BLR19NTlRQVF9NTlRUQUIgKi8KKworLyogRGVmaW5lIG9ubHkgb25lIG9mIHRoZSBmb2xsb3dpbmcgbW91bnQgZmlsZSBzeXN0ZW0gcGFja2FnZXMuICovCisjZGVmaW5lIFVTRV9QS0dfTU5URlNfTk9ORSAxCisvKiAjdW5kZWYgVVNFX1BLR19NTlRGU19MSU5VWCAqLworCisvKiBEZWZpbmUgb25seSBvbmUgb2YgdGhlIGZvbGxvd2luZyBrZXlib2FyZCBwYWNrYWdlcy4gKi8KKy8qICN1bmRlZiBVU0VfUEtHX0tCRF9OT05FICovCisjZGVmaW5lIFVTRV9QS0dfS0JEX0FORFJPSUQgMQorLyogI3VuZGVmIFVTRV9QS0dfS0JEX0xJTlVYICovCisKKy8qIERlZmluZSBvbmx5IG9uZSBvZiB0aGUgZm9sbG93aW5nIGNvbnNvbGUgYmVsbCBwYWNrYWdlcy4gKi8KKyNkZWZpbmUgVVNFX1BLR19CRUxMX05PTkUgMQorLyogI3VuZGVmIFVTRV9QS0dfQkVMTF9MSU5VWCAqLworCisvKiBEZWZpbmUgb25seSBvbmUgb2YgdGhlIGZvbGxvd2luZyBrZXlib2FyZCBMRURzIHBhY2thZ2VzLiAqLworI2RlZmluZSBVU0VfUEtHX0xFRFNfTk9ORSAxCisvKiAjdW5kZWYgVVNFX1BLR19MRURTX0xJTlVYICovCisKKy8qIERlZmluZSBvbmx5IG9uZSBvZiB0aGUgZm9sbG93aW5nIGJlZXBlciBwYWNrYWdlcy4gKi8KKyNkZWZpbmUgVVNFX1BLR19CRUVQX05PTkUgMQorLyogI3VuZGVmIFVTRV9QS0dfQkVFUF9MSU5VWCAqLworLyogI3VuZGVmIFVTRV9QS0dfQkVFUF9NU0RPUyAqLworLyogI3VuZGVmIFVTRV9QS0dfQkVFUF9TT0xBUklTICovCisvKiAjdW5kZWYgVVNFX1BLR19CRUVQX1NQS1IgKi8KKy8qICN1bmRlZiBVU0VfUEtHX0JFRVBfV0lORE9XUyAqLworLyogI3VuZGVmIFVTRV9QS0dfQkVFUF9XU0tCRCAqLworCisvKiBEZWZpbmUgb25seSBvbmUgb2YgdGhlIGZvbGxvd2luZyBQQ00gcGFja2FnZXMuICovCisvKiAjdW5kZWYgVVNFX1BLR19QQ01fTk9ORSAqLworLyogI3VuZGVmIFVTRV9QS0dfUENNX0FMU0EgKi8KKyNkZWZpbmUgVVNFX1BLR19QQ01fQU5EUk9JRCAxCisvKiAjdW5kZWYgVVNFX1BLR19QQ01fQVVESU8gKi8KKy8qICN1bmRlZiBVU0VfUEtHX1BDTV9IUFVYICovCisvKiAjdW5kZWYgVVNFX1BLR19QQ01fT1NTICovCisvKiAjdW5kZWYgVVNFX1BLR19QQ01fUVNBICovCisvKiAjdW5kZWYgVVNFX1BLR19QQ01fV0lORE9XUyAqLworCisvKiBEZWZpbmUgb25seSBvbmUgb2YgdGhlIGZvbGxvd2luZyBNSURJIHBhY2thZ2VzLiAqLworI2RlZmluZSBVU0VfUEtHX01JRElfTk9ORSAxCisvKiAjdW5kZWYgVVNFX1BLR19NSURJX0FMU0EgKi8KKy8qICN1bmRlZiBVU0VfUEtHX01JRElfREFSV0lOICovCisvKiAjdW5kZWYgVVNFX1BLR19NSURJX09TUyAqLworLyogI3VuZGVmIFVTRV9QS0dfTUlESV9XSU5ET1dTICovCisKKy8qIERlZmluZSBvbmx5IG9uZSBvZiB0aGUgZm9sbG93aW5nIEZNIHBhY2thZ2VzLiAqLworI2RlZmluZSBVU0VfUEtHX0ZNX05PTkUgMQorLyogI3VuZGVmIFVTRV9QS0dfRk1fQURMSUIgKi8KKworLyogRGVmaW5lIG9ubHkgb25lIG9mIHRoZSBmb2xsb3dpbmcgc2VyaWFsIEkvTyBwYWNrYWdlcy4gKi8KKy8qICN1bmRlZiBVU0VfUEtHX1NFUklBTF9OT05FICovCisvKiAjdW5kZWYgVVNFX1BLR19TRVJJQUxfR1JVQiAqLworLyogI3VuZGVmIFVTRV9QS0dfU0VSSUFMX01TRE9TICovCisjZGVmaW5lIFVTRV9QS0dfU0VSSUFMX1RFUk1JT1MgMQorLyogI3VuZGVmIFVTRV9QS0dfU0VSSUFMX1dJTkRPV1MgKi8KKworLyogRGVmaW5lIG9ubHkgb25lIG9mIHRoZSBmb2xsb3dpbmcgVVNCIEkvTyBwYWNrYWdlcy4gKi8KKy8qICN1bmRlZiBVU0VfUEtHX1VTQl9OT05FICovCisjZGVmaW5lIFVTRV9QS0dfVVNCX0FORFJPSUQgMQorLyogI3VuZGVmIFVTRV9QS0dfVVNCX0RBUldJTiAqLworLyogI3VuZGVmIFVTRV9QS0dfVVNCX0ZSRUVCU0QgKi8KKy8qICN1bmRlZiBVU0VfUEtHX1VTQl9HUlVCICovCisvKiAjdW5kZWYgVVNFX1BLR19VU0JfS0ZSRUVCU0QgKi8KKy8qICN1bmRlZiBVU0VfUEtHX1VTQl9MSUJVU0IgKi8KKy8qICN1bmRlZiBVU0VfUEtHX1VTQl9MSUJVU0JfMV8wICovCisvKiAjdW5kZWYgVVNFX1BLR19VU0JfTElOVVggKi8KKy8qICN1bmRlZiBVU0VfUEtHX1VTQl9ORVRCU0QgKi8KKy8qICN1bmRlZiBVU0VfUEtHX1VTQl9PUEVOQlNEICovCisvKiAjdW5kZWYgVVNFX1BLR19VU0JfU09MQVJJUyAqLworCisvKiBEZWZpbmUgb25seSBvbmUgb2YgdGhlIGZvbGxvd2luZyBCbHVldG9vdGggSS9PIHBhY2thZ2VzLiAqLworLyogI3VuZGVmIFVTRV9QS0dfQkxVRVRPT1RIX05PTkUgKi8KKyNkZWZpbmUgVVNFX1BLR19CTFVFVE9PVEhfQU5EUk9JRCAxCisvKiAjdW5kZWYgVVNFX1BLR19CTFVFVE9PVEhfREFSV0lOICovCisvKiAjdW5kZWYgVVNFX1BLR19CTFVFVE9PVEhfTElOVVggKi8KKy8qICN1bmRlZiBVU0VfUEtHX0JMVUVUT09USF9XSU5ET1dTICovCisKKy8qIERlZmluZSBvbmx5IG9uZSBvZiB0aGUgZm9sbG93aW5nIEhJRCBJL08gcGFja2FnZXMuICovCisjZGVmaW5lIFVTRV9QS0dfSElEX05PTkUgMQorLyogI3VuZGVmIFVTRV9QS0dfSElEX0xJTlVYICovCisKKy8qIERlZmluZSBvbmx5IG9uZSBvZiB0aGUgZm9sbG93aW5nIEkvTyBwb3J0cyBwYWNrYWdlcy4gKi8KKyNkZWZpbmUgVVNFX1BLR19QT1JUU19OT05FIDEKKy8qICN1bmRlZiBVU0VfUEtHX1BPUlRTX0dMSUJDICovCisvKiAjdW5kZWYgVVNFX1BLR19QT1JUU19HUlVCICovCisvKiAjdW5kZWYgVVNFX1BLR19QT1JUU19LRlJFRUJTRCAqLworLyogI3VuZGVmIFVTRV9QS0dfUE9SVFNfTVNET1MgKi8KKy8qICN1bmRlZiBVU0VfUEtHX1BPUlRTX1dJTkRPV1MgKi8KKworLyogRGVmaW5lIHRoaXMgaWYgdGhlIGZ1bmN0aW9uIGFkZG1udGVudCBleGlzdHMuICovCisvKiAjdW5kZWYgSEFWRV9BRERNTlRFTlQgKi8KKworLyogRGVmaW5lIHRoaXMgaWYgdGhlIGZ1bmN0aW9uIGNsb2NrX2dldHRpbWUgZXhpc3RzLiAqLworI2RlZmluZSBIQVZFX0NMT0NLX0dFVFRJTUUgMQorCisvKiBEZWZpbmUgdGhpcyBpZiB0aGUgZnVuY3Rpb24gY2xvY2tfc2V0dGltZSBleGlzdHMuICovCisjZGVmaW5lIEhBVkVfQ0xPQ0tfU0VUVElNRSAxCisKKy8qIERlZmluZSB0aGlzIGlmIHRoZSBmdW5jdGlvbiBmY2hkaXIgZXhpc3RzLiAqLworI2RlZmluZSBIQVZFX0ZDSERJUiAxCisKKy8qIERlZmluZSB0aGlzIGlmIHRoZSBmdW5jdGlvbiBmY2htb2QgZXhpc3RzLiAqLworI2RlZmluZSBIQVZFX0ZDSE1PRCAxCisKKy8qIERlZmluZSB0aGlzIGlmIHRoZSBmdW5jdGlvbiBnYWlfc3RyZXJyb3IgZXhpc3RzLiAqLworI2RlZmluZSBIQVZFX0dBSV9TVFJFUlJPUiAxCisKKy8qIERlZmluZSB0aGlzIGlmIHRoZSBmdW5jdGlvbiBnZXRhZGRyaW5mbyBleGlzdHMuICovCisjZGVmaW5lIEhBVkVfR0VUQUREUklORk8gMQorCisvKiBEZWZpbmUgdGhpcyBpZiB0aGUgZnVuY3Rpb24gZ2V0bmFtZWluZm8gZXhpc3RzLiAqLworI2RlZmluZSBIQVZFX0dFVE5BTUVJTkZPIDEKKworLyogRGVmaW5lIHRoaXMgaWYgdGhlIGZ1bmN0aW9uIGdldG9wdF9sb25nIGV4aXN0cy4gKi8KKyNkZWZpbmUgSEFWRV9HRVRPUFRfTE9ORyAxCisKKy8qIERlZmluZSB0aGlzIGlmIHRoZSBmdW5jdGlvbiBnZXRwZWVyZWlkIGV4aXN0cy4gKi8KKy8qICN1bmRlZiBIQVZFX0dFVFBFRVJFSUQgKi8KKworLyogRGVmaW5lIHRoaXMgaWYgdGhlIGZ1bmN0aW9uIGdldHBlZXJ1Y3JlZCBleGlzdHMuICovCisvKiAjdW5kZWYgSEFWRV9HRVRQRUVSVUNSRUQgKi8KKworLyogRGVmaW5lIHRoaXMgaWYgdGhlIGZ1bmN0aW9uIGdldHRpbWVvZmRheSBleGlzdHMuICovCisjZGVmaW5lIEhBVkVfR0VUVElNRU9GREFZIDEKKworLyogRGVmaW5lIHRoaXMgaWYgdGhlIGZ1bmN0aW9uIGdldHpvbmVpZCBleGlzdHMuICovCisvKiAjdW5kZWYgSEFWRV9HRVRaT05FSUQgKi8KKworLyogRGVmaW5lIHRoaXMgaWYgdGhlIGZ1bmN0aW9uIGhzdHJlcnJvciBleGlzdHMuICovCisjZGVmaW5lIEhBVkVfSFNUUkVSUk9SIDEKKworLyogRGVmaW5lIHRoaXMgaWYgdGhlIGZ1bmN0aW9uIG1lbXBjcHkgZXhpc3RzLiAqLworLyogI3VuZGVmIEhBVkVfTUVNUENQWSAqLworCisvKiBEZWZpbmUgdGhpcyBpZiB0aGUgZnVuY3Rpb24gbmFub3NsZWVwIGV4aXN0cy4gKi8KKyNkZWZpbmUgSEFWRV9OQU5PU0xFRVAgMQorCisvKiBEZWZpbmUgdGhpcyBpZiB0aGUgZnVuY3Rpb24gcGF1c2UgZXhpc3RzLiAqLworI2RlZmluZSBIQVZFX1BBVVNFIDEKKworLyogRGVmaW5lIHRoaXMgaWYgdGhlIGZ1bmN0aW9uIHJlYWRsaW5rIGV4aXN0cy4gKi8KKyNkZWZpbmUgSEFWRV9SRUFETElOSyAxCisKKy8qIERlZmluZSB0aGlzIGlmIHRoZSBmdW5jdGlvbiByZWFscGF0aCBleGlzdHMuICovCisjZGVmaW5lIEhBVkVfUkVBTFBBVEggMQorCisvKiBEZWZpbmUgdGhpcyBpZiB0aGUgZnVuY3Rpb24gc2V0dGltZW9mZGF5IGV4aXN0cy4gKi8KKyNkZWZpbmUgSEFWRV9TRVRUSU1FT0ZEQVkgMQorCisvKiBEZWZpbmUgdGhpcyBpZiB0aGUgZnVuY3Rpb24gc2hsX2xvYWQgaXMgYXZhaWxhYmxlLiAqLworLyogI3VuZGVmIEhBVkVfU0hMX0xPQUQgKi8KKworLyogRGVmaW5lIHRoaXMgaWYgdGhlIGZ1bmN0aW9uIHNobV9vcGVuIGV4aXN0cy4gKi8KKy8qICN1bmRlZiBIQVZFX1NITV9PUEVOICovCisKKy8qIERlZmluZSB0aGlzIGlmIHRoZSBmdW5jdGlvbiBzaG1nZXQgZXhpc3RzLiAqLworLyogI3VuZGVmIEhBVkVfU0hNR0VUICovCisKKy8qIERlZmluZSB0aGlzIGlmIHRoZSBmdW5jdGlvbiBzdGltZSBleGlzdHMuICovCisvKiAjdW5kZWYgSEFWRV9TVElNRSAqLworCisvKiBEZWZpbmUgdGhpcyBpZiB0aGUgZnVuY3Rpb24gdGNkcmFpbiBleGlzdHMuICovCisjZGVmaW5lIEhBVkVfVENEUkFJTiAxCisKKy8qIERlZmluZSB0aGlzIGlmIHRoZSBmdW5jdGlvbiB0aW1lIGV4aXN0cy4gKi8KKyNkZWZpbmUgSEFWRV9USU1FIDEKKworLyogRGVmaW5lIHRoaXMgaWYgdGhlIGZ1bmN0aW9uIHZzeXNsb2cgZXhpc3RzLiAqLworI2RlZmluZSBIQVZFX1ZTWVNMT0cgMQorCisvKiBEZWZpbmUgdGhpcyBpZiB0aGUgZnVuY3Rpb24gd21lbXBjcHkgZXhpc3RzLiAqLworLyogI3VuZGVmIEhBVkVfV01FTVBDUFkgKi8KKworLyogRGVmaW5lIHRoaXMgaWYgdGhlIGhlYWRlciBmaWxlIGFsbG9jYS5oIGV4aXN0cy4gKi8KKyNkZWZpbmUgSEFWRV9BTExPQ0FfSCAxCisKKy8qIERlZmluZSB0aGlzIGlmIHRoZSBoZWFkZXIgZmlsZSBleGVjaW5mby5oIGV4aXN0cy4gKi8KKy8qICN1bmRlZiBIQVZFX0VYRUNJTkZPX0ggKi8KKworLyogRGVmaW5lIHRoaXMgaWYgdGhlIGhlYWRlciBmaWxlIGdldG9wdC5oIGV4aXN0cy4gKi8KKyNkZWZpbmUgSEFWRV9HRVRPUFRfSCAxCisKKy8qIERlZmluZSB0aGlzIGlmIHRoZSBoZWFkZXIgZmlsZSBnbG9iLmggZXhpc3RzLiAqLworI2RlZmluZSBIQVZFX0dMT0JfSCAxCisKKy8qIERlZmluZSB0aGlzIGlmIHRoZSBmdW5jdGlvbiBnbG9iIGV4aXN0cy4gKi8KKy8qICN1bmRlZiBIQVZFX0dMT0IgKi8KKworLyogRGVmaW5lIHRoaXMgaWYgdGhlIGhlYWRlciBmaWxlIGdycC5oIGV4aXN0cy4gKi8KKyNkZWZpbmUgSEFWRV9HUlBfSCAxCisKKy8qIERlZmluZSB0aGlzIGlmIHRoZSBoZWFkZXIgZmlsZSBpY29udi5oIGV4aXN0cy4gKi8KKy8qICN1bmRlZiBIQVZFX0lDT05WX0ggKi8KKworLyogRGVmaW5lIHRoaXMgaWYgdGhlIGhlYWRlciBmaWxlIGxhbmdpbmZvLmggZXhpc3RzLiAqLworI2RlZmluZSBIQVZFX0xBTkdJTkZPX0ggMQorCisvKiBEZWZpbmUgdGhpcyBpZiB0aGUgZnVuY3Rpb24gbmxfbGFuZ2luZm8gZXhpc3RzLiAqLworLyogI3VuZGVmIEhBVkVfTkxfTEFOR0lORk8gKi8KKworLyogRGVmaW5lIHRoaXMgaWYgdGhlIGhlYWRlciBmaWxlIHB3ZC5oIGV4aXN0cy4gKi8KKyNkZWZpbmUgSEFWRV9QV0RfSCAxCisKKy8qIERlZmluZSB0aGlzIGlmIHRoZSBoZWFkZXIgZmlsZSByZWdleC5oIGV4aXN0cy4gKi8KKyNkZWZpbmUgSEFWRV9SRUdFWF9IIDEKKworLyogRGVmaW5lIHRoaXMgaWYgdGhlIGhlYWRlciBmaWxlIHNjaGVkLmggZXhpc3RzLiAqLworI2RlZmluZSBIQVZFX1NDSEVEX0ggMQorCisvKiBEZWZpbmUgdGhpcyBpZiB0aGUgaGVhZGVyIGZpbGUgc2RrZGRrdmVyLmggZXhpc3RzLiAqLworLyogI3VuZGVmIEhBVkVfU0RLRERLVkVSX0ggKi8KKworLyogRGVmaW5lIHRoaXMgaWYgdGhlIGhlYWRlciBmaWxlIHNpZ25hbC5oIGV4aXN0cy4gKi8KKyNkZWZpbmUgSEFWRV9TSUdOQUxfSCAxCisKKy8qIERlZmluZSB0aGlzIGlmIHRoZSBmdW5jdGlvbiBzaWdhY3Rpb24gZXhpc3RzLiAqLworI2RlZmluZSBIQVZFX1NJR0FDVElPTiAxCisKKy8qIERlZmluZSB0aGlzIGlmIHRoZSBoZWFkZXIgZmlsZSBzeXNsb2cuaCBleGlzdHMuICovCisjZGVmaW5lIEhBVkVfU1lTTE9HX0ggMQorCisvKiBEZWZpbmUgdGhpcyBpZiB0aGUgaGVhZGVyIGZpbGUgd2NoYXIuaCBleGlzdHMuICovCisjZGVmaW5lIEhBVkVfV0NIQVJfSCAxCisKKy8qIERlZmluZSB0aGlzIGlmIHRoZSBoZWFkZXIgZmlsZSBzeXMvY2FwYWJpbGl0eS5oIGV4aXN0cy4gKi8KKyNkZWZpbmUgSEFWRV9TWVNfQ0FQQUJJTElUWV9IIDEKKworLyogRGVmaW5lIHRoaXMgaWYgdGhlIGhlYWRlciBmaWxlIHN5cy9maWxlLmggZXhpc3RzLiAqLworI2RlZmluZSBIQVZFX1NZU19GSUxFX0ggMQorCisvKiBEZWZpbmUgdGhpcyBpZiB0aGUgaGVhZGVyIGZpbGUgc3lzL2lvLmggZXhpc3RzLiAqLworLyogI3VuZGVmIEhBVkVfU1lTX0lPX0ggKi8KKworLyogRGVmaW5lIHRoaXMgaWYgdGhlIGhlYWRlciBmaWxlIHN5cy9tb2RlbS5oIGV4aXN0cy4gKi8KKy8qICN1bmRlZiBIQVZFX1NZU19NT0RFTV9IICovCisKKy8qIERlZmluZSB0aGlzIGlmIHRoZSBoZWFkZXIgZmlsZSBzeXMvcHJjdGwuaCBleGlzdHMuICovCisjZGVmaW5lIEhBVkVfU1lTX1BSQ1RMX0ggMQorCisvKiBEZWZpbmUgdGhpcyBpZiB0aGUgaGVhZGVyIGZpbGUgc3lzL3NpZ25hbGZkLmggZXhpc3RzLiAqLworI2RlZmluZSBIQVZFX1NZU19TSUdOQUxGRF9IIDEKKworLyogRGVmaW5lIHRoaXMgaWYgdGhlIGhlYWRlciBmaWxlIHN5cy9zb2NrZXQuaCBleGlzdHMuICovCisjZGVmaW5lIEhBVkVfU1lTX1NPQ0tFVF9IIDEKKworI2lmbmRlZiBfX01JTkdXMzJfXworLyogRGVmaW5lIHRoaXMgaWYgdGhlIGhlYWRlciBmaWxlIHN5cy9wb2xsLmggZXhpc3RzLiAqLworI2RlZmluZSBIQVZFX1NZU19QT0xMX0ggMQorCisvKiBEZWZpbmUgdGhpcyBpZiB0aGUgZnVuY3Rpb24gcG9sbCBleGlzdHMuICovCisjZGVmaW5lIEhBVkVfUE9MTCAxCisKKy8qIERlZmluZSB0aGlzIGlmIHRoZSBoZWFkZXIgZmlsZSBzeXMvc2VsZWN0LmggZXhpc3RzLiAqLworI2RlZmluZSBIQVZFX1NZU19TRUxFQ1RfSCAxCisKKy8qIERlZmluZSB0aGlzIGlmIHRoZSBmdW5jdGlvbiBzZWxlY3QgZXhpc3RzLiAqLworI2RlZmluZSBIQVZFX1NFTEVDVCAxCisjZW5kaWYgLyogX19NSU5HVzMyX18gKi8KKworLyogRGVmaW5lIHRoaXMgaWYgdGhlIGhlYWRlciBmaWxlIHN5cy93YWl0LmggZXhpc3RzLAorICogYnV0IG5vdCBmb3IgRE9TIHNpbmNlIGl0IHdvdWxkbid0IG1ha2Ugc2Vuc2UuIAorICovCisjaWZuZGVmIF9fTVNET1NfXworI2RlZmluZSBIQVZFX1NZU19XQUlUX0ggMQorI2VuZGlmIC8qIF9fTVNET1NfXyAqLworCisvKiBEZWZpbmUgdGhpcyBpZiB0aGUgaGVhZGVyIGZpbGUgZGV2L3NwZWFrZXIvc3BlYWtlci5oIGV4aXN0cy4gKi8KKy8qICN1bmRlZiBIQVZFX0RFVl9TUEVBS0VSX1NQRUFLRVJfSCAqLworCisvKiBEZWZpbmUgdGhpcyBpZiB0aGUgaGVhZGVyIGZpbGUgbGVnYWN5L2Rldi91c2IvdXNiLmggZXhpc3RzLiAqLworLyogI3VuZGVmIEhBVkVfTEVHQUNZX0RFVl9VU0JfVVNCX0ggKi8KKworLyogRGVmaW5lIHRoaXMgaWYgdGhlIGhlYWRlciBmaWxlIGxpbnV4L2F1ZGl0LmggZXhpc3RzLiAqLworI2RlZmluZSBIQVZFX0xJTlVYX0FVRElUX0ggMQorCisvKiBEZWZpbmUgdGhpcyBpZiB0aGUgaGVhZGVyIGZpbGUgbGludXgvZmlsdGVyLmggZXhpc3RzLiAqLworI2RlZmluZSBIQVZFX0xJTlVYX0ZJTFRFUl9IIDEKKworLyogRGVmaW5lIHRoaXMgaWYgdGhlIGhlYWRlciBmaWxlIGxpbnV4L2lucHV0LmggZXhpc3RzLiAqLworI2RlZmluZSBIQVZFX0xJTlVYX0lOUFVUX0ggMQorCisvKiBEZWZpbmUgdGhpcyBpZiB0aGUgaGVhZGVyIGZpbGUgbGludXgvc2VjY29tcC5oIGV4aXN0cy4gKi8KKyNkZWZpbmUgSEFWRV9MSU5VWF9TRUNDT01QX0ggMQorCisvKiBEZWZpbmUgdGhpcyBpZiB0aGUgaGVhZGVyIGZpbGUgbGludXgvdWlucHV0LmggZXhpc3RzLiAqLworI2RlZmluZSBIQVZFX0xJTlVYX1VJTlBVVF9IIDEKKworLyogRGVmaW5lIHRoaXMgaWYgdGhlIGhlYWRlciBmaWxlIGxpbnV4L3Z0LmggZXhpc3RzLiAqLworI2RlZmluZSBIQVZFX0xJTlVYX1ZUX0ggMQorCisvKiBEZWZpbmUgdGhpcyBpZiB0aGUgaGVhZGVyIGZpbGUgbWFjaGluZS9zcGVha2VyLmggZXhpc3RzLiAqLworLyogI3VuZGVmIEhBVkVfTUFDSElORV9TUEVBS0VSX0ggKi8KKworLyogRGVmaW5lIHRoaXMgaWYgdGhlIGhlYWRlciBmaWxlIFgxMS9leHRlbnNpb25zL1hmaXhlcy5oIGV4aXN0cy4gKi8KKy8qICN1bmRlZiBIQVZFX1gxMV9FWFRFTlNJT05TX1hGSVhFU19IICovCisKKy8qIERlZmluZSB0aGlzIGlmIHRoZSBoZWFkZXIgZmlsZSBYMTEvZXh0ZW5zaW9ucy9YS0IuaCBleGlzdHMuICovCisvKiAjdW5kZWYgSEFWRV9YMTFfRVhURU5TSU9OU19YS0JfSCAqLworCisvKiBEZWZpbmUgdGhpcyBpZiB0aGUgaGVhZGVyIGZpbGUgWDExL2V4dGVuc2lvbnMvWFRlc3QuaCBleGlzdHMuICovCisvKiAjdW5kZWYgSEFWRV9YMTFfRVhURU5TSU9OU19YVEVTVF9IICovCisKKy8qIERlZmluZSB0aGlzIGlmIHRoZSBoZWFkZXIgZmlsZSBYMTEva2V5c3ltLmggZXhpc3RzLiAqLworLyogI3VuZGVmIEhBVkVfWDExX0tFWVNZTV9IICovCisKKy8qIERlZmluZSB0aGlzIGlmIHRoZSBmdW5jdGlvbiBYU2V0SU9FcnJvckV4aXRIYW5kbGVyIGV4aXN0cy4gICovCisvKiAjdW5kZWYgSEFWRV9YU0VUSU9FUlJPUkVYSVRIQU5ETEVSICovCisKKy8qIERlZmluZSB0aGlzIGlmIHRoZSBmdW5jdGlvbiBhdHNwaV9nZXRfYTExeV9idXMgZXhpc3RzIGluIGF0c3BpMi4gKi8KKy8qICN1bmRlZiBIQVZFX0FUU1BJX0dFVF9BMTFZX0JVUyAqLworCisvKiBEZWZpbmUgdGhpcyBpZiBYTUwgcGFyc2luZyBzdXBwb3J0IGlzIHRvIGJlIGluY2x1ZGVkLiAqLworLyogI3VuZGVmIEhBVkVfRVhQQVQgKi8KKworLyogRGVmaW5lIHRoaXMgaWYgVW5pY29kZS1iYXNlZCBpbnRlcm5hdGlvbmFsaXphdGlvbiBzdXBwb3J0IGlzIHRvIGJlIGluY2x1ZGVkLiAqLworLyogI3VuZGVmIEhBVkVfSUNVICovCisKKy8qIERlZmluZSB0aGlzIGlmIHRoZSBoZWFkZXIgZmlsZSB1bmljb2RlL3Vub3JtMi5oIGV4aXN0cy4gKi8KKy8qICN1bmRlZiBIQVZFX1VOSUNPREVfVU5PUk0yX0ggKi8KKworLyogRGVmaW5lIHRoaXMgaWYgdGhlIFBvbGtpdCBhdXRob3JpemF0aW9uIG1hbmFnZXIgaXMgdG8gYmUgdXNlZC4gKi8KKy8qICN1bmRlZiBIQVZFX1BPTEtJVCAqLworCisvKiBEZWZpbmUgdGhpcyBpZiBwb3NpeCB0aHJlYWRzIGFyZSBzdXBwb3J0ZWQuICovCisjZGVmaW5lIEhBVkVfUE9TSVhfVEhSRUFEUyAxCisKKy8qIERlZmluZSB0aGlzIGlmIHRocmVhZC1sb2NhbCB2YXJpYWJsZXMgYXJlIHN1cHBvcnRlZC4gKi8KKyNkZWZpbmUgVEhSRUFEX0xPQ0FMIF9UaHJlYWRfbG9jYWwKKworLyogRGVmaW5lIHRoaXMgaWYgdGhlIGZ1bmN0aW9uIHB0aHJlYWRfYXRmb3JrIGV4aXN0cy4gKi8KKyNkZWZpbmUgSEFWRV9QVEhSRUFEX0FURk9SSyAxCisKKy8qIERlZmluZSB0aGlzIGlmIHRoZSBmdW5jdGlvbiBwdGhyZWFkX2dldG5hbWVfbnAgZXhpc3RzLiAqLworLyogI3VuZGVmIEhBVkVfUFRIUkVBRF9HRVROQU1FX05QICovCisKKy8qIERlZmluZSB0aGlzIGlmIHRoZSBmdW5jdGlvbiBzZF9zZXNzaW9uX2dldF92dCBpcyBhdmFpbGFibGUgaW4gbGlic3lzdGVtZC4gKi8KKy8qICN1bmRlZiBIQVZFX1NEX1NFU1NJT05fR0VUX1ZUICovCisKKy8qIERlZmluZSB0aGlzIGlmIHRoZSBibHVldG9vdGggbGlicmFyeSBpcyBhdmFpbGFibGUuICovCisvKiAjdW5kZWYgSEFWRV9MSUJCTFVFVE9PVEggKi8KKworLyogRGVmaW5lIHRoaXMgaWYgdGhlIGNhcChhYmlsaXRpZXMpIGxpYnJhcnkgaXMgYXZhaWxhYmxlLiAqLworLyogI3VuZGVmIEhBVkVfTElCQ0FQICovCisKKy8qIERlZmluZSB0aGlzIGlmIEdQTSBpcyB0byBiZSB1c2VkLiAqLworLyogI3VuZGVmIEhBVkVfTElCR1BNICovCisKKy8qIERlZmluZSB0aGlzIGlmIHRoZSBwYWNrYWdlIGRidXMgaXMgYXZhaWxhYmxlLiAqLworLyogI3VuZGVmIEhBVkVfUEtHX0RCVVMgKi8KKworLyogRGVmaW5lIG9ubHkgb25lIG9mIHRoZSBmb2xsb3dpbmcgY3Vyc2VzIHBhY2thZ2VzLiAqLworLyogI3VuZGVmIEhBVkVfUEtHX0NVUlNFUyAqLworLyogI3VuZGVmIEhBVkVfUEtHX05DVVJTRVMgKi8KKy8qICN1bmRlZiBIQVZFX1BLR19OQ1VSU0VTVyAqLworLyogI3VuZGVmIEhBVkVfUEtHX1BEQ1VSU0VTICovCisvKiAjdW5kZWYgSEFWRV9QS0dfUERDVVJTRVNVICovCisvKiAjdW5kZWYgSEFWRV9QS0dfUERDVVJTRVNXICovCisKKy8qIERlZmluZSB0aGlzIGlmIHRoZSBwYWNrYWdlIHgxMSBpcyBhdmFpbGFibGUuICovCisvKiAjdW5kZWYgSEFWRV9QS0dfWDExICovCisKKy8qIERlZmluZSB0aGlzIGlmIFggaXMgbm90IGF2YWlsYWJsZS4gKi8KKy8qICN1bmRlZiBYX0RJU1BMQVlfTUlTU0lORyAqLworCisvKiBEZWZpbmUgb25seSBvbmUgb2YgdGhlIGZvbGxvd2luZyBYYXcgcGFja2FnZXMuICovCisvKiAjdW5kZWYgSEFWRV9QS0dfWEFXICovCisvKiAjdW5kZWYgSEFWRV9QS0dfWEFXM0QgKi8KKy8qICN1bmRlZiBIQVZFX1BLR19ORVhUQVcgKi8KKy8qICN1bmRlZiBIQVZFX1BLR19YQVdQTFVTICovCisvKiAjdW5kZWYgSEFWRV9QS0dfWE0gKi8KKworLyogRGVmaW5lIHRoaXMgaWYgdGhlIGNvbXBpbGVyIGRvZXNuJ3QgZnVsbHkgc3VwcG9ydCB0aGUgY29uc3Qga2V5d29yZC4gKi8KKy8qICN1bmRlZiBjb25zdCAqLworCisvKiBEZWZpbmUgdGhpcyBpZiB0aGUgY29tcGlsZXIgZG9lc24ndCBmdWxseSBzdXBwb3J0IHRoZSBpbmxpbmUga2V5d29yZC4gKi8KKy8qICN1bmRlZiBpbmxpbmUgKi8KKworLyogRGVmaW5lIHRoaXMgaWYgdGhlIHBhY2tlZCB2YXJpYWJsZSBhdHRyaWJ1dGUgaXMgc3VwcG9ydGVkLiAqLworI2RlZmluZSBIQVZFX1ZBUl9BVFRSSUJVVEVfUEFDS0VEIDEKKworLyogRGVmaW5lIHRoaXMgaWYgdGhlIHVudXNlZCB2YXJpYWJsZSBhdHRyaWJ1dGUgaXMgc3VwcG9ydGVkLiAqLworI2RlZmluZSBIQVZFX1ZBUl9BVFRSSUJVVEVfVU5VU0VEIDEKKworLyogRGVmaW5lIHRoaXMgaWYgdGhlIGZvcm1hdCBmdW5jdGlvbiBhdHRyaWJ1dGUgaXMgc3VwcG9ydGVkLiAqLworI2RlZmluZSBIQVZFX0ZVTkNfQVRUUklCVVRFX0ZPUk1BVCAxCisKKy8qIERlZmluZSB0aGlzIGlmIHRoZSBmb3JtYXRfYXJnIGZ1bmN0aW9uIGF0dHJpYnV0ZSBpcyBzdXBwb3J0ZWQuICovCisjZGVmaW5lIEhBVkVfRlVOQ19BVFRSSUJVVEVfRk9STUFUX0FSRyAxCisKKy8qIERlZmluZSB0aGlzIGlmIHRoZSBub3JldHVybiBmdW5jdGlvbiBhdHRyaWJ1dGUgaXMgc3VwcG9ydGVkLiAqLworI2RlZmluZSBIQVZFX0ZVTkNfQVRUUklCVVRFX05PUkVUVVJOIDEKKworLyogRGVmaW5lIHRoaXMgaWYgdGhlIHVudXNlZCBmdW5jdGlvbiBhdHRyaWJ1dGUgaXMgc3VwcG9ydGVkLiAqLworI2RlZmluZSBIQVZFX0ZVTkNfQVRUUklCVVRFX1VOVVNFRCAxCisKKy8qIERlZmluZSB0aGlzIGlmIHRoZSBfX2FsaWdub2ZfXyBvcGVyYXRvciBpcyBzdXBwb3J0ZWQuICovCisjZGVmaW5lIEhBVkVfT1BFUkFUT1JfQUxJR05PRiAxCisjaWZuZGVmIEhBVkVfT1BFUkFUT1JfQUxJR05PRgorI2RlZmluZSBfX2FsaWdub2ZfXyh4KSA4CisjZW5kaWYgLyogSEFWRV9PUEVSQVRPUl9BTElHTk9GICovCisKKy8qIERlZmluZSB0aGlzIGlmIHRoZSBob3N0IGlzIGJpZyBlbmRpYW4uICovCisvKiAjdW5kZWYgV09SRFNfQklHRU5ESUFOICovCisKKy8qIERlZmluZSB0aGlzIHRvIGJlIGEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIHNpemUgb2YgdGhlIHdjaGFyX3QgdHlwZS4gKi8KKyNkZWZpbmUgU0laRU9GX1dDSEFSX1RfU1RSICI0IgorCisvKiBEZWZpbmUgdGhpcyBpZiB0aGUgZnVuY3Rpb24gbG9jYWx0aW1lX3IgaXMgZGVjbGFyZWQuICovCisjZGVmaW5lIEhBVkVfREVDTF9MT0NBTFRJTUVfUiAxCisKKy8qIERlZmluZSB0aGlzIGlmIHRoZSB0eXBlIFBST0NFU1NfSU5GT1JNQVRJT05fQ0xBU1MgZXhpc3RzLiAqLworLyogI3VuZGVmIEhBVkVfUFJPQ0VTU19JTkZPUk1BVElPTl9DTEFTUyAqLworCisvKiBEZWZpbmUgdGhpcyBpZiB0aGUgdmFsdWUgUHJvY2Vzc1VzZXJNb2RlSU9QTCBleGlzdHMuICovCisvKiAjdW5kZWYgSEFWRV9QUk9DRVNTVVNFUk1PREVJT1BMICovCisKKy8qIERlZmluZSB0aGlzIGlmIEJSTFRUWSBpcyB0byBiZSBydW4gYXMgaW5pdC4gKi8KKy8qICN1bmRlZiBJTklUX1BBVEggKi8KKworLyogRGVmaW5lIHRoaXMgaWYgc3RhbmRhcmQgZXJyb3IgaXMgdG8gYmUgcmVkaXJlY3RlZCB0byBhIGZpbGUuICovCisvKiAjdW5kZWYgU1RERVJSX1BBVEggKi8KKworLyogRGVmaW5lIHRoaXMgdG8gYmUgYSBzdHJpbmcgY29udGFpbmluZyB0aGUgcGF0aCB0byB0aGUgY29uZmlndXJhdGlvbiBkaXJlY3RvcnkuICovCisjZGVmaW5lIENPTkZJR1VSQVRJT05fRElSRUNUT1JZICIvZXRjIgorCisvKiBEZWZpbmUgdGhpcyB0byBiZSBhIHN0cmluZyBjb250YWluaW5nIHRoZSBuYW1lIG9mIHRoZSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gZmlsZS4gKi8KKyNkZWZpbmUgQ09ORklHVVJBVElPTl9GSUxFICJicmx0dHkuY29uZiIKKworLyogRGVmaW5lIHRoaXMgdG8gYmUgYSBzdHJpbmcgY29udGFpbmluZyB0aGUgcGF0aCB0byB0aGUgbG9jYWxlIGRpcmVjdG9yeS4gKi8KKyNkZWZpbmUgTE9DQUxFX0RJUkVDVE9SWSAiL3Vzci9zaGFyZS9sb2NhbGUiCisKKy8qIERlZmluZSB0aGlzIHRvIGJlIGEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIHBhdGggdG8gYSB3cml0YWJsZSBkaXJlY3RvcnkuICovCisjZGVmaW5lIFdSSVRBQkxFX0RJUkVDVE9SWSAiL3J1bi9icmx0dHkiCisKKy8qIERlZmluZSB0aGlzIHRvIGJlIGEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIHBhdGggdG8gYSBkaXJlY3Rvcnkgd2hpY2ggY29udGFpbnMgZmlsZXMgdGhhdCBjYW4gYmUgdXBkYXRlZC4gKi8KKyNkZWZpbmUgVVBEQVRBQkxFX0RJUkVDVE9SWSAiL3Zhci9saWIvYnJsdHR5IgorCisvKiBEZWZpbmUgdGhpcyB0byBiZSBhIHN0cmluZyBjb250YWluaW5nIHRoZSBuYW1lIG9mIHRoZSBkZWZhdWx0IHByZWZlcmVuY2VzIGZpbGUuICovCisjZGVmaW5lIFBSRUZFUkVOQ0VTX0ZJTEUgImJybHR0eS5wcmVmcyIKKworLyogRGVmaW5lIHRoaXMgdG8gYmUgYSBzdHJpbmcgY29udGFpbmluZyB0aGUgcGF0aCB0byB0aGUgaGVscGVyIGNvbW1hbmRzCisgKiBkaXJlY3RvcnkuICovCisjZGVmaW5lIENPTU1BTkRTX0RJUkVDVE9SWSAiL2xpYmV4ZWMvYnJsdHR5IgorCisvKiBEZWZpbmUgdGhpcyB0byBiZSBhIHN0cmluZyBjb250YWluaW5nIHRoZSBwYXRoIHRvIHRoZSBkcml2ZXJzIGRpcmVjdG9yeS4gKi8KKyNkZWZpbmUgRFJJVkVSU19ESVJFQ1RPUlkgIi9saWIvYnJsdHR5IgorCisvKiBEZWZpbmUgdGhpcyB0byBiZSBhIHN0cmluZyBjb250YWluaW5nIHRoZSBwYXRoIHRvIHRoZSB0YWJsZXMgZGlyZWN0b3J5LiAqLworI2RlZmluZSBUQUJMRVNfRElSRUNUT1JZICIvZXRjL2JybHR0eSIKKworLyogRGVmaW5lIHRoaXMgdG8gYmUgYSBzdHJpbmcgY29udGFpbmluZyB0aGUgcGF0aCB0byB0aGUgTGliTG91aXMgdGFibGVzIGRpcmVjdG9yeS4gKi8KKy8qICN1bmRlZiBMT1VJU19UQUJMRVNfRElSRUNUT1JZICovCisKKy8qIERlZmluZSB0aGlzIHRvIGJlIGEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIGRlZmF1bHQgcGFyYW1ldGVycyBmb3IgdGhlIHByaXZpbGVnZSBlc3RhYmxpc2htZW50IHN0YWdlLiAqLworI2RlZmluZSBQUklWSUxFR0VfUEFSQU1FVEVSUyAiIgorCisvKiBEZWZpbmUgdGhpcyB0byBiZSBhIHN0cmluZyBjb250YWluaW5nIGEgbGlzdCBvZiB0aGUgYnJhaWxsZSBkcml2ZXIgY29kZXMuICovCisjZGVmaW5lIEJSQUlMTEVfRFJJVkVSX0NPREVTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgImFsIGF0IGJtIGJuIGNlIGV1IGZzIGhtIGh0IGh3IGljIGlyIG1kIG1tIG10IG5wIHBnIHBtIHNrIHZvIGJjIGJkIGJsIGNiICIgXAorICAiY24gZHAgZWMgZmEgaGQgbHQgbWIgbW4gdG4gdHMgdmQgdnMiCisKKy8qIERlZmluZSB0aGlzIHRvIGJlIGEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIGRlZmF1bHQgcGFyYW1ldGVycyBmb3IgdGhlIGJyYWlsbGUgZHJpdmVyKHMpLiAqLworI2RlZmluZSBCUkFJTExFX1BBUkFNRVRFUlMgIiIKKworLyogRGVmaW5lIHRoaXMgdG8gYmUgYSBzdHJpbmcgY29udGFpbmluZyB0aGUgcGF0aCB0byB0aGUgZGlyZWN0b3J5IGNvbnRhaW5pbmcgdGhlIGRldmljZXMuICovCisjZGVmaW5lIERFVklDRV9ESVJFQ1RPUlkgIi9kZXYiCisKKy8qIERlZmluZSB0aGlzIHRvIGJlIGEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIHBhdGggdG8gdGhlIGRlZmF1bHQgYnJhaWxsZSBkZXZpY2UuICovCisjZGVmaW5lIEJSQUlMTEVfREVWSUNFICJ1c2I6LGJsdWV0b290aDoiCisKKy8qIERlZmluZSB0aGlzIHRvIGJlIGEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIHBhdGggdG8gdGhlIGZpcnN0IHNlcmlhbCBkZXZpY2UuICovCisjZGVmaW5lIFNFUklBTF9GSVJTVF9ERVZJQ0UgInR0eVMwIgorCisvKiBEZWZpbmUgdGhpcyB0byBiZSBhIHN0cmluZyBjb250YWluaW5nIGEgbGlzdCBvZiB0aGUgc3BlZWNoIGRyaXZlciBjb2Rlcy4gKi8KKyNkZWZpbmUgU1BFRUNIX0RSSVZFUl9DT0RFUyAiYW4iCisKKy8qIERlZmluZSB0aGlzIHRvIGJlIGEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIGRlZmF1bHQgcGFyYW1ldGVycyBmb3IgdGhlIHNwZWVjaCBkcml2ZXIocykuICovCisjZGVmaW5lIFNQRUVDSF9QQVJBTUVURVJTICIiCisKKy8qIERlZmluZSB0aGlzIHRvIGJlIGEgc3RyaW5nIGNvbnRhaW5pbmcgYSBsaXN0IG9mIHRoZSBzY3JlZW4gZHJpdmVyIGNvZGVzLiAqLworI2RlZmluZSBTQ1JFRU5fRFJJVkVSX0NPREVTICJhbiIKKworLyogRGVmaW5lIHRoaXMgdG8gYmUgYSBzdHJpbmcgY29udGFpbmluZyB0aGUgZGVmYXVsdCBzY3JlZW4gZHJpdmVyIGNvZGUuICovCisjZGVmaW5lIERFRkFVTFRfU0NSRUVOX0RSSVZFUiAiYW4iCisKKy8qIERlZmluZSB0aGlzIHRvIGJlIGEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIGRlZmF1bHQgcGFyYW1ldGVycyBmb3IgdGhlIHNjcmVlbiBkcml2ZXIocykuICovCisjZGVmaW5lIFNDUkVFTl9QQVJBTUVURVJTICIiCisKKy8qIERlZmluZSB0aGlzIHRvIGJlIGEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIG5hbWUgb2YgdGhlIGRlZmF1bHQgdGV4dCB0YWJsZS4gKi8KKyNkZWZpbmUgVEVYVF9UQUJMRSAiZW4tbmFiY2MiCisKKy8qIERlZmluZSB0aGlzIHRvIGJlIGEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIG5hbWUgb2YgdGhlIGRlZmF1bHQgY29udHJhY3Rpb24gdGFibGUuICovCisjZGVmaW5lIENPTlRSQUNUSU9OX1RBQkxFICJub25lIgorCisvKiBEZWZpbmUgdGhpcyB0byBiZSBhIHN0cmluZyBjb250YWluaW5nIHRoZSBuYW1lIG9mIHRoZSBkZWZhdWx0IGF0dHJpYnV0ZXMgdGFibGUuICovCisjZGVmaW5lIEFUVFJJQlVURVNfVEFCTEUgImxlZnRfcmlnaHQiCisKKy8qIERlZmluZSB0aGlzIHRvIGluY2x1ZGUgc3BlZWNoIHN5bnRoZXNpemVyIGFuZCB0ZXh0LXRvLXNwZWVjaCBlbmdpbmUgc3VwcG9ydC4gKi8KKyNkZWZpbmUgRU5BQkxFX1NQRUVDSF9TVVBQT1JUIDEKKworLyogRGVmaW5lIHRoaXMgdG8gYmUgYSBzdHJpbmcgY29udGFpbmluZyB0aGUgcGF0aCB0byB0aGUgcm9vdCBvZiB0aGUgRmVzdGl2YWxMaXRlIHBhY2thZ2UuICovCisvKiAjdW5kZWYgRkxJVEVfUk9PVCAqLworCisvKiBEZWZpbmUgdGhpcyB0byBiZSBhIHN0cmluZyBjb250YWluaW5nIHRoZSBwYXRoIHRvIHRoZSByb290IG9mIHRoZSBNaWtyb3B1aGUgcGFja2FnZS4gKi8KKy8qICN1bmRlZiBNSUtST1BVSEVfUk9PVCAqLworCisvKiBEZWZpbmUgdGhpcyB0byBiZSBhIHN0cmluZyBjb250YWluaW5nIHRoZSBwYXRoIHRvIHRoZSByb290IG9mIHRoZSBTcGVlY2hEaXNwYXRjaGVyIHBhY2thZ2UuICovCisvKiAjdW5kZWYgU1BFRUNIRF9ST09UICovCisKKy8qIERlZmluZSB0aGlzIHRvIGJlIGEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIHBhdGggdG8gdGhlIHJvb3Qgb2YgdGhlIFN3aWZ0IHBhY2thZ2UuICovCisvKiAjdW5kZWYgU1dJRlRfUk9PVCAqLworCisvKiBEZWZpbmUgdGhpcyB0byBiZSBhIHN0cmluZyBjb250YWluaW5nIHRoZSBwYXRoIHRvIHRoZSByb290IG9mIHRoZSBUaGV0YSBwYWNrYWdlLiAqLworLyogI3VuZGVmIFRIRVRBX1JPT1QgKi8KKworLyogRGVmaW5lIHRoaXMgaWYgdGhlIGFwcGxpY2F0aW9uIHByb2dyYW1taW5nIGludGVyZmFjZSBpcyB0byBiZSBpbmNsdWRlZC4gKi8KKyNkZWZpbmUgRU5BQkxFX0FQSSAxCisKKy8qIERlZmluZSB0aGlzIGlmIHRoZSBhcHBsaWNhdGlvbiBwcm9ncmFtbWluZyBpbnRlcmZhY2UgaXMgdG8gYmUgZnV6emVkLiAqLworLyogI3VuZGVmIEVOQUJMRV9BUElfRlVaWklORyAqLworCisvKiBEZWZpbmUgdGhpcyB0byBiZSBhIHN0cmluZyBjb250YWluaW5nIHRoZSBkZWZhdWx0IHBhcmFtZXRlcnMgZm9yIHRoZSBhcHBsaWNhdGlvbiBwcm9ncmFtbWluZyBpbnRlcmZhY2UuICovCisjZGVmaW5lIEFQSV9QQVJBTUVURVJTICIiCisKKy8qIERlZmluZSB0aGlzIHRvIGJlIGEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIHBhdGggdG8gQnJsQVBJJ3MgbG9jYWwgc29ja2V0cyBkaXJlY3RvcnkuICovCisjZGVmaW5lIEJSTEFQSV9TT0NLRVRQQVRIICIvdmFyL2xpYi9CcmxBUEkiCisKKy8qIERlZmluZSB0aGlzIHRvIGJlIGEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIHBhdGggdG8gQnJsQVBJJ3MgZGF0YSBmaWxlcyBkaXJlY3RvcnkuICovCisjZGVmaW5lIEJSTEFQSV9FVENESVIgIi9ldGMiCisKKy8qIERlZmluZSB0aGlzIHRvIGJlIGEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIG5hbWUgb2YgQnJsQVBJJ3MgYXV0aG9yaXphdGlvbiBrZXkgZmlsZS4gKi8KKyNkZWZpbmUgQlJMQVBJX0FVVEhLRVlGSUxFICJicmxhcGkua2V5IgorCisvKiBEZWZpbmUgdGhpcyBpZiBpbnRlcm5hdGlvbmFsaXphdGlvbiBzdXBwb3J0IGlzIHRvIGJlIGluY2x1ZGVkLiAqLworLyogI3VuZGVmIEVOQUJMRV9JMThOX1NVUFBPUlQgKi8KKworLyogRGVmaW5lIHRoaXMgaWYgc2hhcmVkIG9iamVjdCBzdXBwb3J0IGlzIHRvIGJlIGluY2x1ZGVkLiAqLworI2RlZmluZSBFTkFCTEVfU0hBUkVEX09CSkVDVFMgMQorCisvKiBEZWZpbmUgdGhpcyBpZiBIUC1VWCBhdWRpbyBzdXBwb3J0IGlzIGF2YWlsYWJsZS4gKi8KKy8qICN1bmRlZiBIQVZFX0hQVVhfQVVESU8gKi8KKworLyogRGVmaW5lIHRoaXMgdG8gYmUgYSBzdHJpbmcgY29udGFpbmluZyB0aGUgc3ViZGlyZWN0b3J5IGZvciB0ZXh0IHRhYmxlcy4gKi8KKyNkZWZpbmUgVEVYVF9UQUJMRVNfU1VCRElSRUNUT1JZICJUZXh0IgorCisvKiBEZWZpbmUgdGhpcyB0byBiZSBhIHN0cmluZyBjb250YWluaW5nIHRoZSBzdWJkaXJlY3RvcnkgZm9yIGNvbnRyYWN0aW9uIHRhYmxlcy4gKi8KKyNkZWZpbmUgQ09OVFJBQ1RJT05fVEFCTEVTX1NVQkRJUkVDVE9SWSAiQ29udHJhY3Rpb24iCisKKy8qIERlZmluZSB0aGlzIHRvIGJlIGEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIHN1YmRpcmVjdG9yeSBmb3IgYXR0cmlidXRlcyB0YWJsZXMuICovCisjZGVmaW5lIEFUVFJJQlVURVNfVEFCTEVTX1NVQkRJUkVDVE9SWSAiQXR0cmlidXRlcyIKKworLyogRGVmaW5lIHRoaXMgdG8gYmUgYSBzdHJpbmcgY29udGFpbmluZyB0aGUgc3ViZGlyZWN0b3J5IGZvciBrZXlib2FyZCB0YWJsZXMuICovCisjZGVmaW5lIEtFWUJPQVJEX1RBQkxFU19TVUJESVJFQ1RPUlkgIktleWJvYXJkIgorCisvKiBEZWZpbmUgdGhpcyB0byBiZSBhIHN0cmluZyBjb250YWluaW5nIHRoZSBzdWJkaXJlY3RvcnkgZm9yIGlucHV0IHRhYmxlcy4gKi8KKyNkZWZpbmUgSU5QVVRfVEFCTEVTX1NVQkRJUkVDVE9SWSAiSW5wdXQiCisKKy8qIERlZmluZSB0aGlzIHRvIGJlIGEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIGV4dGVuc2lvbiBmb3IgdGV4dCB0YWJsZXMuICovCisjZGVmaW5lIFRFWFRfVEFCTEVfRVhURU5TSU9OICIudHRiIgorCisvKiBEZWZpbmUgdGhpcyB0byBiZSBhIHN0cmluZyBjb250YWluaW5nIHRoZSBleHRlbnNpb24gZm9yIHRleHQgc3VidGFibGVzLiAqLworI2RlZmluZSBURVhUX1NVQlRBQkxFX0VYVEVOU0lPTiAiLnR0aSIKKworLyogRGVmaW5lIHRoaXMgdG8gYmUgYSBzdHJpbmcgY29udGFpbmluZyB0aGUgZXh0ZW5zaW9uIGZvciBjb250cmFjdGlvbiB0YWJsZXMuICovCisjZGVmaW5lIENPTlRSQUNUSU9OX1RBQkxFX0VYVEVOU0lPTiAiLmN0YiIKKworLyogRGVmaW5lIHRoaXMgdG8gYmUgYSBzdHJpbmcgY29udGFpbmluZyB0aGUgZXh0ZW5zaW9uIGZvciBjb250cmFjdGlvbiBzdWJ0YWJsZXMuICovCisjZGVmaW5lIENPTlRSQUNUSU9OX1NVQlRBQkxFX0VYVEVOU0lPTiAiLmN0aSIKKworLyogRGVmaW5lIHRoaXMgdG8gYmUgYSBzdHJpbmcgY29udGFpbmluZyB0aGUgZXh0ZW5zaW9uIGZvciBhdHRyaWJ1dGVzIHRhYmxlcy4gKi8KKyNkZWZpbmUgQVRUUklCVVRFU19UQUJMRV9FWFRFTlNJT04gIi5hdGIiCisKKy8qIERlZmluZSB0aGlzIHRvIGJlIGEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIGV4dGVuc2lvbiBmb3IgYXR0cmlidXRlcyBzdWJ0YWJsZXMuICovCisjZGVmaW5lIEFUVFJJQlVURVNfU1VCVEFCTEVfRVhURU5TSU9OICIuYXRpIgorCisvKiBEZWZpbmUgdGhpcyB0byBiZSBhIHN0cmluZyBjb250YWluaW5nIHRoZSBleHRlbnNpb24gZm9yIGtleSB0YWJsZXMuICovCisjZGVmaW5lIEtFWV9UQUJMRV9FWFRFTlNJT04gIi5rdGIiCisKKy8qIERlZmluZSB0aGlzIHRvIGJlIGEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIGV4dGVuc2lvbiBmb3Iga2V5IHN1YnRhYmxlcy4gKi8KKyNkZWZpbmUgS0VZX1NVQlRBQkxFX0VYVEVOU0lPTiAiLmt0aSIKKworLyogRGVmaW5lIHRoaXMgdG8gYmUgYSBzdHJpbmcgY29udGFpbmluZyB0aGUgZXh0ZW5zaW9uIGZvciBrZXkgaGVscCBmaWxlcy4gKi8KKyNkZWZpbmUgS0VZX0hFTFBfRVhURU5TSU9OICIudHh0IgorCisvKiBEZWZpbmUgdGhpcyB0byBiZSBhIHN0cmluZyBjb250YWluaW5nIHRoZSBzdWJkaXJlY3RvcnkgZm9yIHByb2ZpbGVzLiAqLworI2RlZmluZSBQUk9GSUxFU19TVUJESVJFQ1RPUlkgIlByb2ZpbGVzIgorCisvKiBEZWZpbmUgdGhpcyB0byBiZSBhIHN0cmluZyBjb250YWluaW5nIHRoZSBleHRlbnNpb24gZm9yIGxhbmd1YWdlIHByb2ZpbGVzLiAqLworI2RlZmluZSBMQU5HVUFHRV9QUk9GSUxFX0VYVEVOU0lPTiAiLmxwZiIKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYgLyogX19jcGx1c3BsdXMgKi8KKworI2VuZGlmIC8qIEJSTFRUWV9JTkNMVURFRF9DT05GSUcgKi8KZGlmZiAtLWdpdCBhL2NvbmZpZy5oLmluIGIvY29uZmlnLmguaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTM5OWE5ZgotLS0gL2Rldi9udWxsCisrKyBiL2NvbmZpZy5oLmluCkBAIC0wLDAgKzEsNjg5IEBACisvKgorICogQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyAqICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyAqCisgKiBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorICoKKyAqIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyAqCisgKiBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisgKi8KKworI2lmbmRlZiBCUkxUVFlfSU5DTFVERURfQ09ORklHCisjZGVmaW5lIEJSTFRUWV9JTkNMVURFRF9DT05GSUcKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZiAvKiBfX2NwbHVzcGx1cyAqLworCisvKiBEZWZpbmUgdGhpcyB0byBiZSBhIHN0cmluZyBjb250YWluaW5nIHRoZSBjb3B5cmlnaHQgbm90aWNlLiAqLworI3VuZGVmIFBBQ0tBR0VfQ09QWVJJR0hUCisKKy8qIERlZmluZSB0aGlzIHRvIGJlIGEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIGZ1bGwgbmFtZSBvZiB0aGUgcGFja2FnZS4gKi8KKyN1bmRlZiBQQUNLQUdFX05BTUUKKworLyogRGVmaW5lIHRoaXMgdG8gYmUgYSBzdHJpbmcgY29udGFpbmluZyB0aGUgdmVyc2lvbiBvZiB0aGUgcGFja2FnZS4gKi8KKyN1bmRlZiBQQUNLQUdFX1ZFUlNJT04KKworLyogRGVmaW5lIHRoaXMgdG8gYmUgYSBzdHJpbmcgY29udGFpbmluZyB0aGUgZnVsbCBuYW1lIGFuZCB2ZXJzaW9uIG9mIHRoZSBwYWNrYWdlLiAqLworI3VuZGVmIFBBQ0tBR0VfU1RSSU5HCisKKy8qIERlZmluZSB0aGlzIHRvIGJlIGEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIFVSTCBvZiB0aGUgaG9tZSBwYWdlIG9mIHRoZSBwYWNrYWdlLiAqLworI3VuZGVmIFBBQ0tBR0VfVVJMCisKKy8qIERlZmluZSB0aGlzIHRvIGJlIGEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIHNob3J0IG5hbWUgb2YgdGhlIHBhY2thZ2UuICovCisjdW5kZWYgUEFDS0FHRV9UQVJOQU1FCisKKy8qIERlZmluZSB0aGlzIHRvIGJlIGEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIGFkZHJlc3Mgd2hlcmUgYnVnIHJlcG9ydHMgc2hvdWxkIGJlIHNlbnQuICovCisjdW5kZWYgUEFDS0FHRV9CVUdSRVBPUlQKKworLyogRGVmaW5lIHRoaXMgdG8gYmUgYSBzdHJpbmcgY29udGFpbmluZyB0aGUgYmFzZSBtb2R1bGUgbmFtZS4gKi8KKyN1bmRlZiBNT0RVTEVfTkFNRQorCisvKiBEZWZpbmUgdGhpcyB0byBiZSBhIHN0cmluZyBjb250YWluaW5nIHRoZSBtb2R1bGUgZXh0ZW5zaW9uLiAqLworI3VuZGVmIE1PRFVMRV9FWFRFTlNJT04KKworLyogRGVmaW5lIHRoaXMgdG8gYmUgYSBzdHJpbmcgY29udGFpbmluZyB0aGUgbGlicmFyeSBleHRlbnNpb24uICovCisjdW5kZWYgTElCUkFSWV9FWFRFTlNJT04KKworLyogRGVmaW5lIG9ubHkgb25lIG9mIHRoZSBmb2xsb3dpbmcgcHJvZ3JhbSBwYXRoIHBhY2thZ2VzLiAqLworI3VuZGVmIFVTRV9QS0dfUEdNUEFUSF9OT05FCisjdW5kZWYgVVNFX1BLR19QR01QQVRIX0xJTlVYCisjdW5kZWYgVVNFX1BLR19QR01QQVRIX1NPTEFSSVMKKyN1bmRlZiBVU0VfUEtHX1BHTVBBVEhfV0lORE9XUworCisvKiBEZWZpbmUgb25seSBvbmUgb2YgdGhlIGZvbGxvd2luZyBzeXN0ZW0gc2VydmljZSBwYWNrYWdlcy4gKi8KKyN1bmRlZiBVU0VfUEtHX1NFUlZJQ0VfTk9ORQorI3VuZGVmIFVTRV9QS0dfU0VSVklDRV9XSU5ET1dTCisKKy8qIERlZmluZSBvbmx5IG9uZSBvZiB0aGUgZm9sbG93aW5nIGJvb3QgcGFyYW1ldGVycyBwYWNrYWdlcy4gKi8KKyN1bmRlZiBVU0VfUEtHX1BBUkFNU19OT05FCisjdW5kZWYgVVNFX1BLR19QQVJBTVNfTElOVVgKKworLyogRGVmaW5lIG9ubHkgb25lIG9mIHRoZSBmb2xsb3dpbmcgZHluYW1pYyBsb2FkaW5nIHBhY2thZ2VzLiAqLworI3VuZGVmIFVTRV9QS0dfRFlOTERfTk9ORQorI3VuZGVmIFVTRV9QS0dfRFlOTERfRExGQ04KKyN1bmRlZiBVU0VfUEtHX0RZTkxEX0RZTEQKKyN1bmRlZiBVU0VfUEtHX0RZTkxEX0dSVUIKKyN1bmRlZiBVU0VfUEtHX0RZTkxEX1NITAorI3VuZGVmIFVTRV9QS0dfRFlOTERfV0lORE9XUworCisvKiBEZWZpbmUgb25seSBvbmUgb2YgdGhlIGZvbGxvd2luZyByZWd1bGFyIGV4cHJlc3Npb24gcGFja2FnZXMuICovCisjdW5kZWYgVVNFX1BLR19SR1hfTk9ORQorI3VuZGVmIFVTRV9QS0dfUkdYX0xJQlBDUkUzMgorI3VuZGVmIFVTRV9QS0dfUkdYX0xJQlBDUkUyXzMyCisKKy8qIERlZmluZSBvbmx5IG9uZSBvZiB0aGUgZm9sbG93aW5nIGNoYXJhY3RlciBzZXQgcGFja2FnZXMuICovCisjdW5kZWYgVVNFX1BLR19DSEFSU0VUX05PTkUKKyN1bmRlZiBVU0VfUEtHX0NIQVJTRVRfR1JVQgorI3VuZGVmIFVTRV9QS0dfQ0hBUlNFVF9JQ09OVgorI3VuZGVmIFVTRV9QS0dfQ0hBUlNFVF9NU0RPUworI3VuZGVmIFVTRV9QS0dfQ0hBUlNFVF9XSU5ET1dTCisKKy8qIERlZmluZSBvbmx5IG9uZSBvZiB0aGUgZm9sbG93aW5nIGhvc3QgY29tbWFuZCBwYWNrYWdlcy4gKi8KKyN1bmRlZiBVU0VfUEtHX0hPU1RDTURfTk9ORQorI3VuZGVmIFVTRV9QS0dfSE9TVENNRF9VTklYCisjdW5kZWYgVVNFX1BLR19IT1NUQ01EX1dJTkRPV1MKKworLyogRGVmaW5lIG9ubHkgb25lIG9mIHRoZSBmb2xsb3dpbmcgbW91bnQgcG9pbnQgcGFja2FnZXMuICovCisjdW5kZWYgVVNFX1BLR19NTlRQVF9OT05FCisjdW5kZWYgVVNFX1BLR19NTlRQVF9NTlRFTlQKKyN1bmRlZiBVU0VfUEtHX01OVFBUX01OVFRBQgorCisvKiBEZWZpbmUgb25seSBvbmUgb2YgdGhlIGZvbGxvd2luZyBtb3VudCBmaWxlIHN5c3RlbSBwYWNrYWdlcy4gKi8KKyN1bmRlZiBVU0VfUEtHX01OVEZTX05PTkUKKyN1bmRlZiBVU0VfUEtHX01OVEZTX0xJTlVYCisKKy8qIERlZmluZSBvbmx5IG9uZSBvZiB0aGUgZm9sbG93aW5nIGtleWJvYXJkIHBhY2thZ2VzLiAqLworI3VuZGVmIFVTRV9QS0dfS0JEX05PTkUKKyN1bmRlZiBVU0VfUEtHX0tCRF9BTkRST0lECisjdW5kZWYgVVNFX1BLR19LQkRfTElOVVgKKworLyogRGVmaW5lIG9ubHkgb25lIG9mIHRoZSBmb2xsb3dpbmcgY29uc29sZSBiZWxsIHBhY2thZ2VzLiAqLworI3VuZGVmIFVTRV9QS0dfQkVMTF9OT05FCisjdW5kZWYgVVNFX1BLR19CRUxMX0xJTlVYCisKKy8qIERlZmluZSBvbmx5IG9uZSBvZiB0aGUgZm9sbG93aW5nIGtleWJvYXJkIExFRHMgcGFja2FnZXMuICovCisjdW5kZWYgVVNFX1BLR19MRURTX05PTkUKKyN1bmRlZiBVU0VfUEtHX0xFRFNfTElOVVgKKworLyogRGVmaW5lIG9ubHkgb25lIG9mIHRoZSBmb2xsb3dpbmcgYmVlcGVyIHBhY2thZ2VzLiAqLworI3VuZGVmIFVTRV9QS0dfQkVFUF9OT05FCisjdW5kZWYgVVNFX1BLR19CRUVQX0xJTlVYCisjdW5kZWYgVVNFX1BLR19CRUVQX01TRE9TCisjdW5kZWYgVVNFX1BLR19CRUVQX1NPTEFSSVMKKyN1bmRlZiBVU0VfUEtHX0JFRVBfU1BLUgorI3VuZGVmIFVTRV9QS0dfQkVFUF9XSU5ET1dTCisjdW5kZWYgVVNFX1BLR19CRUVQX1dTS0JECisKKy8qIERlZmluZSBvbmx5IG9uZSBvZiB0aGUgZm9sbG93aW5nIFBDTSBwYWNrYWdlcy4gKi8KKyN1bmRlZiBVU0VfUEtHX1BDTV9OT05FCisjdW5kZWYgVVNFX1BLR19QQ01fQUxTQQorI3VuZGVmIFVTRV9QS0dfUENNX0FORFJPSUQKKyN1bmRlZiBVU0VfUEtHX1BDTV9BVURJTworI3VuZGVmIFVTRV9QS0dfUENNX0hQVVgKKyN1bmRlZiBVU0VfUEtHX1BDTV9PU1MKKyN1bmRlZiBVU0VfUEtHX1BDTV9RU0EKKyN1bmRlZiBVU0VfUEtHX1BDTV9XSU5ET1dTCisKKy8qIERlZmluZSBvbmx5IG9uZSBvZiB0aGUgZm9sbG93aW5nIE1JREkgcGFja2FnZXMuICovCisjdW5kZWYgVVNFX1BLR19NSURJX05PTkUKKyN1bmRlZiBVU0VfUEtHX01JRElfQUxTQQorI3VuZGVmIFVTRV9QS0dfTUlESV9EQVJXSU4KKyN1bmRlZiBVU0VfUEtHX01JRElfT1NTCisjdW5kZWYgVVNFX1BLR19NSURJX1dJTkRPV1MKKworLyogRGVmaW5lIG9ubHkgb25lIG9mIHRoZSBmb2xsb3dpbmcgRk0gcGFja2FnZXMuICovCisjdW5kZWYgVVNFX1BLR19GTV9OT05FCisjdW5kZWYgVVNFX1BLR19GTV9BRExJQgorCisvKiBEZWZpbmUgb25seSBvbmUgb2YgdGhlIGZvbGxvd2luZyBzZXJpYWwgSS9PIHBhY2thZ2VzLiAqLworI3VuZGVmIFVTRV9QS0dfU0VSSUFMX05PTkUKKyN1bmRlZiBVU0VfUEtHX1NFUklBTF9HUlVCCisjdW5kZWYgVVNFX1BLR19TRVJJQUxfTVNET1MKKyN1bmRlZiBVU0VfUEtHX1NFUklBTF9URVJNSU9TCisjdW5kZWYgVVNFX1BLR19TRVJJQUxfV0lORE9XUworCisvKiBEZWZpbmUgb25seSBvbmUgb2YgdGhlIGZvbGxvd2luZyBVU0IgSS9PIHBhY2thZ2VzLiAqLworI3VuZGVmIFVTRV9QS0dfVVNCX05PTkUKKyN1bmRlZiBVU0VfUEtHX1VTQl9BTkRST0lECisjdW5kZWYgVVNFX1BLR19VU0JfREFSV0lOCisjdW5kZWYgVVNFX1BLR19VU0JfRlJFRUJTRAorI3VuZGVmIFVTRV9QS0dfVVNCX0dSVUIKKyN1bmRlZiBVU0VfUEtHX1VTQl9LRlJFRUJTRAorI3VuZGVmIFVTRV9QS0dfVVNCX0xJQlVTQgorI3VuZGVmIFVTRV9QS0dfVVNCX0xJQlVTQl8xXzAKKyN1bmRlZiBVU0VfUEtHX1VTQl9MSU5VWAorI3VuZGVmIFVTRV9QS0dfVVNCX05FVEJTRAorI3VuZGVmIFVTRV9QS0dfVVNCX09QRU5CU0QKKyN1bmRlZiBVU0VfUEtHX1VTQl9TT0xBUklTCisKKy8qIERlZmluZSBvbmx5IG9uZSBvZiB0aGUgZm9sbG93aW5nIEJsdWV0b290aCBJL08gcGFja2FnZXMuICovCisjdW5kZWYgVVNFX1BLR19CTFVFVE9PVEhfTk9ORQorI3VuZGVmIFVTRV9QS0dfQkxVRVRPT1RIX0FORFJPSUQKKyN1bmRlZiBVU0VfUEtHX0JMVUVUT09USF9EQVJXSU4KKyN1bmRlZiBVU0VfUEtHX0JMVUVUT09USF9MSU5VWAorI3VuZGVmIFVTRV9QS0dfQkxVRVRPT1RIX1dJTkRPV1MKKworLyogRGVmaW5lIG9ubHkgb25lIG9mIHRoZSBmb2xsb3dpbmcgSElEIEkvTyBwYWNrYWdlcy4gKi8KKyN1bmRlZiBVU0VfUEtHX0hJRF9OT05FCisjdW5kZWYgVVNFX1BLR19ISURfTElOVVgKKworLyogRGVmaW5lIG9ubHkgb25lIG9mIHRoZSBmb2xsb3dpbmcgSS9PIHBvcnRzIHBhY2thZ2VzLiAqLworI3VuZGVmIFVTRV9QS0dfUE9SVFNfTk9ORQorI3VuZGVmIFVTRV9QS0dfUE9SVFNfR0xJQkMKKyN1bmRlZiBVU0VfUEtHX1BPUlRTX0dSVUIKKyN1bmRlZiBVU0VfUEtHX1BPUlRTX0tGUkVFQlNECisjdW5kZWYgVVNFX1BLR19QT1JUU19NU0RPUworI3VuZGVmIFVTRV9QS0dfUE9SVFNfV0lORE9XUworCisvKiBEZWZpbmUgdGhpcyBpZiB0aGUgZnVuY3Rpb24gYWRkbW50ZW50IGV4aXN0cy4gKi8KKyN1bmRlZiBIQVZFX0FERE1OVEVOVAorCisvKiBEZWZpbmUgdGhpcyBpZiB0aGUgZnVuY3Rpb24gY2xvY2tfZ2V0dGltZSBleGlzdHMuICovCisjdW5kZWYgSEFWRV9DTE9DS19HRVRUSU1FCisKKy8qIERlZmluZSB0aGlzIGlmIHRoZSBmdW5jdGlvbiBjbG9ja19zZXR0aW1lIGV4aXN0cy4gKi8KKyN1bmRlZiBIQVZFX0NMT0NLX1NFVFRJTUUKKworLyogRGVmaW5lIHRoaXMgaWYgdGhlIGZ1bmN0aW9uIGZjaGRpciBleGlzdHMuICovCisjdW5kZWYgSEFWRV9GQ0hESVIKKworLyogRGVmaW5lIHRoaXMgaWYgdGhlIGZ1bmN0aW9uIGZjaG1vZCBleGlzdHMuICovCisjdW5kZWYgSEFWRV9GQ0hNT0QKKworLyogRGVmaW5lIHRoaXMgaWYgdGhlIGZ1bmN0aW9uIGdhaV9zdHJlcnJvciBleGlzdHMuICovCisjdW5kZWYgSEFWRV9HQUlfU1RSRVJST1IKKworLyogRGVmaW5lIHRoaXMgaWYgdGhlIGZ1bmN0aW9uIGdldGFkZHJpbmZvIGV4aXN0cy4gKi8KKyN1bmRlZiBIQVZFX0dFVEFERFJJTkZPCisKKy8qIERlZmluZSB0aGlzIGlmIHRoZSBmdW5jdGlvbiBnZXRuYW1laW5mbyBleGlzdHMuICovCisjdW5kZWYgSEFWRV9HRVROQU1FSU5GTworCisvKiBEZWZpbmUgdGhpcyBpZiB0aGUgZnVuY3Rpb24gZ2V0b3B0X2xvbmcgZXhpc3RzLiAqLworI3VuZGVmIEhBVkVfR0VUT1BUX0xPTkcKKworLyogRGVmaW5lIHRoaXMgaWYgdGhlIGZ1bmN0aW9uIGdldHBlZXJlaWQgZXhpc3RzLiAqLworI3VuZGVmIEhBVkVfR0VUUEVFUkVJRAorCisvKiBEZWZpbmUgdGhpcyBpZiB0aGUgZnVuY3Rpb24gZ2V0cGVlcnVjcmVkIGV4aXN0cy4gKi8KKyN1bmRlZiBIQVZFX0dFVFBFRVJVQ1JFRAorCisvKiBEZWZpbmUgdGhpcyBpZiB0aGUgZnVuY3Rpb24gZ2V0dGltZW9mZGF5IGV4aXN0cy4gKi8KKyN1bmRlZiBIQVZFX0dFVFRJTUVPRkRBWQorCisvKiBEZWZpbmUgdGhpcyBpZiB0aGUgZnVuY3Rpb24gZ2V0em9uZWlkIGV4aXN0cy4gKi8KKyN1bmRlZiBIQVZFX0dFVFpPTkVJRAorCisvKiBEZWZpbmUgdGhpcyBpZiB0aGUgZnVuY3Rpb24gaHN0cmVycm9yIGV4aXN0cy4gKi8KKyN1bmRlZiBIQVZFX0hTVFJFUlJPUgorCisvKiBEZWZpbmUgdGhpcyBpZiB0aGUgZnVuY3Rpb24gbWVtcGNweSBleGlzdHMuICovCisjdW5kZWYgSEFWRV9NRU1QQ1BZCisKKy8qIERlZmluZSB0aGlzIGlmIHRoZSBmdW5jdGlvbiBuYW5vc2xlZXAgZXhpc3RzLiAqLworI3VuZGVmIEhBVkVfTkFOT1NMRUVQCisKKy8qIERlZmluZSB0aGlzIGlmIHRoZSBmdW5jdGlvbiBwYXVzZSBleGlzdHMuICovCisjdW5kZWYgSEFWRV9QQVVTRQorCisvKiBEZWZpbmUgdGhpcyBpZiB0aGUgZnVuY3Rpb24gcmVhZGxpbmsgZXhpc3RzLiAqLworI3VuZGVmIEhBVkVfUkVBRExJTksKKworLyogRGVmaW5lIHRoaXMgaWYgdGhlIGZ1bmN0aW9uIHJlYWxwYXRoIGV4aXN0cy4gKi8KKyN1bmRlZiBIQVZFX1JFQUxQQVRICisKKy8qIERlZmluZSB0aGlzIGlmIHRoZSBmdW5jdGlvbiBzZXR0aW1lb2ZkYXkgZXhpc3RzLiAqLworI3VuZGVmIEhBVkVfU0VUVElNRU9GREFZCisKKy8qIERlZmluZSB0aGlzIGlmIHRoZSBmdW5jdGlvbiBzaGxfbG9hZCBpcyBhdmFpbGFibGUuICovCisjdW5kZWYgSEFWRV9TSExfTE9BRAorCisvKiBEZWZpbmUgdGhpcyBpZiB0aGUgZnVuY3Rpb24gc2htX29wZW4gZXhpc3RzLiAqLworI3VuZGVmIEhBVkVfU0hNX09QRU4KKworLyogRGVmaW5lIHRoaXMgaWYgdGhlIGZ1bmN0aW9uIHNobWdldCBleGlzdHMuICovCisjdW5kZWYgSEFWRV9TSE1HRVQKKworLyogRGVmaW5lIHRoaXMgaWYgdGhlIGZ1bmN0aW9uIHN0aW1lIGV4aXN0cy4gKi8KKyN1bmRlZiBIQVZFX1NUSU1FCisKKy8qIERlZmluZSB0aGlzIGlmIHRoZSBmdW5jdGlvbiB0Y2RyYWluIGV4aXN0cy4gKi8KKyN1bmRlZiBIQVZFX1RDRFJBSU4KKworLyogRGVmaW5lIHRoaXMgaWYgdGhlIGZ1bmN0aW9uIHRpbWUgZXhpc3RzLiAqLworI3VuZGVmIEhBVkVfVElNRQorCisvKiBEZWZpbmUgdGhpcyBpZiB0aGUgZnVuY3Rpb24gdnN5c2xvZyBleGlzdHMuICovCisjdW5kZWYgSEFWRV9WU1lTTE9HCisKKy8qIERlZmluZSB0aGlzIGlmIHRoZSBmdW5jdGlvbiB3bWVtcGNweSBleGlzdHMuICovCisjdW5kZWYgSEFWRV9XTUVNUENQWQorCisvKiBEZWZpbmUgdGhpcyBpZiB0aGUgaGVhZGVyIGZpbGUgYWxsb2NhLmggZXhpc3RzLiAqLworI3VuZGVmIEhBVkVfQUxMT0NBX0gKKworLyogRGVmaW5lIHRoaXMgaWYgdGhlIGhlYWRlciBmaWxlIGV4ZWNpbmZvLmggZXhpc3RzLiAqLworI3VuZGVmIEhBVkVfRVhFQ0lORk9fSAorCisvKiBEZWZpbmUgdGhpcyBpZiB0aGUgaGVhZGVyIGZpbGUgZ2V0b3B0LmggZXhpc3RzLiAqLworI3VuZGVmIEhBVkVfR0VUT1BUX0gKKworLyogRGVmaW5lIHRoaXMgaWYgdGhlIGhlYWRlciBmaWxlIGdsb2IuaCBleGlzdHMuICovCisjdW5kZWYgSEFWRV9HTE9CX0gKKworLyogRGVmaW5lIHRoaXMgaWYgdGhlIGZ1bmN0aW9uIGdsb2IgZXhpc3RzLiAqLworI3VuZGVmIEhBVkVfR0xPQgorCisvKiBEZWZpbmUgdGhpcyBpZiB0aGUgaGVhZGVyIGZpbGUgZ3JwLmggZXhpc3RzLiAqLworI3VuZGVmIEhBVkVfR1JQX0gKKworLyogRGVmaW5lIHRoaXMgaWYgdGhlIGhlYWRlciBmaWxlIGljb252LmggZXhpc3RzLiAqLworI3VuZGVmIEhBVkVfSUNPTlZfSAorCisvKiBEZWZpbmUgdGhpcyBpZiB0aGUgaGVhZGVyIGZpbGUgbGFuZ2luZm8uaCBleGlzdHMuICovCisjdW5kZWYgSEFWRV9MQU5HSU5GT19ICisKKy8qIERlZmluZSB0aGlzIGlmIHRoZSBmdW5jdGlvbiBubF9sYW5naW5mbyBleGlzdHMuICovCisjdW5kZWYgSEFWRV9OTF9MQU5HSU5GTworCisvKiBEZWZpbmUgdGhpcyBpZiB0aGUgaGVhZGVyIGZpbGUgcHdkLmggZXhpc3RzLiAqLworI3VuZGVmIEhBVkVfUFdEX0gKKworLyogRGVmaW5lIHRoaXMgaWYgdGhlIGhlYWRlciBmaWxlIHJlZ2V4LmggZXhpc3RzLiAqLworI3VuZGVmIEhBVkVfUkVHRVhfSAorCisvKiBEZWZpbmUgdGhpcyBpZiB0aGUgaGVhZGVyIGZpbGUgc2NoZWQuaCBleGlzdHMuICovCisjdW5kZWYgSEFWRV9TQ0hFRF9ICisKKy8qIERlZmluZSB0aGlzIGlmIHRoZSBoZWFkZXIgZmlsZSBzZGtkZGt2ZXIuaCBleGlzdHMuICovCisjdW5kZWYgSEFWRV9TREtEREtWRVJfSAorCisvKiBEZWZpbmUgdGhpcyBpZiB0aGUgaGVhZGVyIGZpbGUgc2lnbmFsLmggZXhpc3RzLiAqLworI3VuZGVmIEhBVkVfU0lHTkFMX0gKKworLyogRGVmaW5lIHRoaXMgaWYgdGhlIGZ1bmN0aW9uIHNpZ2FjdGlvbiBleGlzdHMuICovCisjdW5kZWYgSEFWRV9TSUdBQ1RJT04KKworLyogRGVmaW5lIHRoaXMgaWYgdGhlIGhlYWRlciBmaWxlIHN5c2xvZy5oIGV4aXN0cy4gKi8KKyN1bmRlZiBIQVZFX1NZU0xPR19ICisKKy8qIERlZmluZSB0aGlzIGlmIHRoZSBoZWFkZXIgZmlsZSB3Y2hhci5oIGV4aXN0cy4gKi8KKyN1bmRlZiBIQVZFX1dDSEFSX0gKKworLyogRGVmaW5lIHRoaXMgaWYgdGhlIGhlYWRlciBmaWxlIHN5cy9jYXBhYmlsaXR5LmggZXhpc3RzLiAqLworI3VuZGVmIEhBVkVfU1lTX0NBUEFCSUxJVFlfSAorCisvKiBEZWZpbmUgdGhpcyBpZiB0aGUgaGVhZGVyIGZpbGUgc3lzL2ZpbGUuaCBleGlzdHMuICovCisjdW5kZWYgSEFWRV9TWVNfRklMRV9ICisKKy8qIERlZmluZSB0aGlzIGlmIHRoZSBoZWFkZXIgZmlsZSBzeXMvaW8uaCBleGlzdHMuICovCisjdW5kZWYgSEFWRV9TWVNfSU9fSAorCisvKiBEZWZpbmUgdGhpcyBpZiB0aGUgaGVhZGVyIGZpbGUgc3lzL21vZGVtLmggZXhpc3RzLiAqLworI3VuZGVmIEhBVkVfU1lTX01PREVNX0gKKworLyogRGVmaW5lIHRoaXMgaWYgdGhlIGhlYWRlciBmaWxlIHN5cy9wcmN0bC5oIGV4aXN0cy4gKi8KKyN1bmRlZiBIQVZFX1NZU19QUkNUTF9ICisKKy8qIERlZmluZSB0aGlzIGlmIHRoZSBoZWFkZXIgZmlsZSBzeXMvc2lnbmFsZmQuaCBleGlzdHMuICovCisjdW5kZWYgSEFWRV9TWVNfU0lHTkFMRkRfSAorCisvKiBEZWZpbmUgdGhpcyBpZiB0aGUgaGVhZGVyIGZpbGUgc3lzL3NvY2tldC5oIGV4aXN0cy4gKi8KKyN1bmRlZiBIQVZFX1NZU19TT0NLRVRfSAorCisjaWZuZGVmIF9fTUlOR1czMl9fCisvKiBEZWZpbmUgdGhpcyBpZiB0aGUgaGVhZGVyIGZpbGUgc3lzL3BvbGwuaCBleGlzdHMuICovCisjdW5kZWYgSEFWRV9TWVNfUE9MTF9ICisKKy8qIERlZmluZSB0aGlzIGlmIHRoZSBmdW5jdGlvbiBwb2xsIGV4aXN0cy4gKi8KKyN1bmRlZiBIQVZFX1BPTEwKKworLyogRGVmaW5lIHRoaXMgaWYgdGhlIGhlYWRlciBmaWxlIHN5cy9zZWxlY3QuaCBleGlzdHMuICovCisjdW5kZWYgSEFWRV9TWVNfU0VMRUNUX0gKKworLyogRGVmaW5lIHRoaXMgaWYgdGhlIGZ1bmN0aW9uIHNlbGVjdCBleGlzdHMuICovCisjdW5kZWYgSEFWRV9TRUxFQ1QKKyNlbmRpZiAvKiBfX01JTkdXMzJfXyAqLworCisvKiBEZWZpbmUgdGhpcyBpZiB0aGUgaGVhZGVyIGZpbGUgc3lzL3dhaXQuaCBleGlzdHMsCisgKiBidXQgbm90IGZvciBET1Mgc2luY2UgaXQgd291bGRuJ3QgbWFrZSBzZW5zZS4gCisgKi8KKyNpZm5kZWYgX19NU0RPU19fCisjdW5kZWYgSEFWRV9TWVNfV0FJVF9ICisjZW5kaWYgLyogX19NU0RPU19fICovCisKKy8qIERlZmluZSB0aGlzIGlmIHRoZSBoZWFkZXIgZmlsZSBkZXYvc3BlYWtlci9zcGVha2VyLmggZXhpc3RzLiAqLworI3VuZGVmIEhBVkVfREVWX1NQRUFLRVJfU1BFQUtFUl9ICisKKy8qIERlZmluZSB0aGlzIGlmIHRoZSBoZWFkZXIgZmlsZSBsZWdhY3kvZGV2L3VzYi91c2IuaCBleGlzdHMuICovCisjdW5kZWYgSEFWRV9MRUdBQ1lfREVWX1VTQl9VU0JfSAorCisvKiBEZWZpbmUgdGhpcyBpZiB0aGUgaGVhZGVyIGZpbGUgbGludXgvYXVkaXQuaCBleGlzdHMuICovCisjdW5kZWYgSEFWRV9MSU5VWF9BVURJVF9ICisKKy8qIERlZmluZSB0aGlzIGlmIHRoZSBoZWFkZXIgZmlsZSBsaW51eC9maWx0ZXIuaCBleGlzdHMuICovCisjdW5kZWYgSEFWRV9MSU5VWF9GSUxURVJfSAorCisvKiBEZWZpbmUgdGhpcyBpZiB0aGUgaGVhZGVyIGZpbGUgbGludXgvaW5wdXQuaCBleGlzdHMuICovCisjdW5kZWYgSEFWRV9MSU5VWF9JTlBVVF9ICisKKy8qIERlZmluZSB0aGlzIGlmIHRoZSBoZWFkZXIgZmlsZSBsaW51eC9zZWNjb21wLmggZXhpc3RzLiAqLworI3VuZGVmIEhBVkVfTElOVVhfU0VDQ09NUF9ICisKKy8qIERlZmluZSB0aGlzIGlmIHRoZSBoZWFkZXIgZmlsZSBsaW51eC91aW5wdXQuaCBleGlzdHMuICovCisjdW5kZWYgSEFWRV9MSU5VWF9VSU5QVVRfSAorCisvKiBEZWZpbmUgdGhpcyBpZiB0aGUgaGVhZGVyIGZpbGUgbGludXgvdnQuaCBleGlzdHMuICovCisjdW5kZWYgSEFWRV9MSU5VWF9WVF9ICisKKy8qIERlZmluZSB0aGlzIGlmIHRoZSBoZWFkZXIgZmlsZSBtYWNoaW5lL3NwZWFrZXIuaCBleGlzdHMuICovCisjdW5kZWYgSEFWRV9NQUNISU5FX1NQRUFLRVJfSAorCisvKiBEZWZpbmUgdGhpcyBpZiB0aGUgaGVhZGVyIGZpbGUgWDExL2V4dGVuc2lvbnMvWGZpeGVzLmggZXhpc3RzLiAqLworI3VuZGVmIEhBVkVfWDExX0VYVEVOU0lPTlNfWEZJWEVTX0gKKworLyogRGVmaW5lIHRoaXMgaWYgdGhlIGhlYWRlciBmaWxlIFgxMS9leHRlbnNpb25zL1hLQi5oIGV4aXN0cy4gKi8KKyN1bmRlZiBIQVZFX1gxMV9FWFRFTlNJT05TX1hLQl9ICisKKy8qIERlZmluZSB0aGlzIGlmIHRoZSBoZWFkZXIgZmlsZSBYMTEvZXh0ZW5zaW9ucy9YVGVzdC5oIGV4aXN0cy4gKi8KKyN1bmRlZiBIQVZFX1gxMV9FWFRFTlNJT05TX1hURVNUX0gKKworLyogRGVmaW5lIHRoaXMgaWYgdGhlIGhlYWRlciBmaWxlIFgxMS9rZXlzeW0uaCBleGlzdHMuICovCisjdW5kZWYgSEFWRV9YMTFfS0VZU1lNX0gKKworLyogRGVmaW5lIHRoaXMgaWYgdGhlIGZ1bmN0aW9uIFhTZXRJT0Vycm9yRXhpdEhhbmRsZXIgZXhpc3RzLiAgKi8KKyN1bmRlZiBIQVZFX1hTRVRJT0VSUk9SRVhJVEhBTkRMRVIKKworLyogRGVmaW5lIHRoaXMgaWYgdGhlIGZ1bmN0aW9uIGF0c3BpX2dldF9hMTF5X2J1cyBleGlzdHMgaW4gYXRzcGkyLiAqLworI3VuZGVmIEhBVkVfQVRTUElfR0VUX0ExMVlfQlVTCisKKy8qIERlZmluZSB0aGlzIGlmIFhNTCBwYXJzaW5nIHN1cHBvcnQgaXMgdG8gYmUgaW5jbHVkZWQuICovCisjdW5kZWYgSEFWRV9FWFBBVAorCisvKiBEZWZpbmUgdGhpcyBpZiBVbmljb2RlLWJhc2VkIGludGVybmF0aW9uYWxpemF0aW9uIHN1cHBvcnQgaXMgdG8gYmUgaW5jbHVkZWQuICovCisjdW5kZWYgSEFWRV9JQ1UKKworLyogRGVmaW5lIHRoaXMgaWYgdGhlIGhlYWRlciBmaWxlIHVuaWNvZGUvdW5vcm0yLmggZXhpc3RzLiAqLworI3VuZGVmIEhBVkVfVU5JQ09ERV9VTk9STTJfSAorCisvKiBEZWZpbmUgdGhpcyBpZiB0aGUgUG9sa2l0IGF1dGhvcml6YXRpb24gbWFuYWdlciBpcyB0byBiZSB1c2VkLiAqLworI3VuZGVmIEhBVkVfUE9MS0lUCisKKy8qIERlZmluZSB0aGlzIGlmIHBvc2l4IHRocmVhZHMgYXJlIHN1cHBvcnRlZC4gKi8KKyN1bmRlZiBIQVZFX1BPU0lYX1RIUkVBRFMKKworLyogRGVmaW5lIHRoaXMgaWYgdGhyZWFkLWxvY2FsIHZhcmlhYmxlcyBhcmUgc3VwcG9ydGVkLiAqLworI3VuZGVmIFRIUkVBRF9MT0NBTAorCisvKiBEZWZpbmUgdGhpcyBpZiB0aGUgZnVuY3Rpb24gcHRocmVhZF9hdGZvcmsgZXhpc3RzLiAqLworI3VuZGVmIEhBVkVfUFRIUkVBRF9BVEZPUksKKworLyogRGVmaW5lIHRoaXMgaWYgdGhlIGZ1bmN0aW9uIHB0aHJlYWRfZ2V0bmFtZV9ucCBleGlzdHMuICovCisjdW5kZWYgSEFWRV9QVEhSRUFEX0dFVE5BTUVfTlAKKworLyogRGVmaW5lIHRoaXMgaWYgdGhlIGZ1bmN0aW9uIHNkX3Nlc3Npb25fZ2V0X3Z0IGlzIGF2YWlsYWJsZSBpbiBsaWJzeXN0ZW1kLiAqLworI3VuZGVmIEhBVkVfU0RfU0VTU0lPTl9HRVRfVlQKKworLyogRGVmaW5lIHRoaXMgaWYgdGhlIGJsdWV0b290aCBsaWJyYXJ5IGlzIGF2YWlsYWJsZS4gKi8KKyN1bmRlZiBIQVZFX0xJQkJMVUVUT09USAorCisvKiBEZWZpbmUgdGhpcyBpZiB0aGUgY2FwKGFiaWxpdGllcykgbGlicmFyeSBpcyBhdmFpbGFibGUuICovCisjdW5kZWYgSEFWRV9MSUJDQVAKKworLyogRGVmaW5lIHRoaXMgaWYgR1BNIGlzIHRvIGJlIHVzZWQuICovCisjdW5kZWYgSEFWRV9MSUJHUE0KKworLyogRGVmaW5lIHRoaXMgaWYgdGhlIHBhY2thZ2UgZGJ1cyBpcyBhdmFpbGFibGUuICovCisjdW5kZWYgSEFWRV9QS0dfREJVUworCisvKiBEZWZpbmUgb25seSBvbmUgb2YgdGhlIGZvbGxvd2luZyBjdXJzZXMgcGFja2FnZXMuICovCisjdW5kZWYgSEFWRV9QS0dfQ1VSU0VTCisjdW5kZWYgSEFWRV9QS0dfTkNVUlNFUworI3VuZGVmIEhBVkVfUEtHX05DVVJTRVNXCisjdW5kZWYgSEFWRV9QS0dfUERDVVJTRVMKKyN1bmRlZiBIQVZFX1BLR19QRENVUlNFU1UKKyN1bmRlZiBIQVZFX1BLR19QRENVUlNFU1cKKworLyogRGVmaW5lIHRoaXMgaWYgdGhlIHBhY2thZ2UgeDExIGlzIGF2YWlsYWJsZS4gKi8KKyN1bmRlZiBIQVZFX1BLR19YMTEKKworLyogRGVmaW5lIHRoaXMgaWYgWCBpcyBub3QgYXZhaWxhYmxlLiAqLworI3VuZGVmIFhfRElTUExBWV9NSVNTSU5HCisKKy8qIERlZmluZSBvbmx5IG9uZSBvZiB0aGUgZm9sbG93aW5nIFhhdyBwYWNrYWdlcy4gKi8KKyN1bmRlZiBIQVZFX1BLR19YQVcKKyN1bmRlZiBIQVZFX1BLR19YQVczRAorI3VuZGVmIEhBVkVfUEtHX05FWFRBVworI3VuZGVmIEhBVkVfUEtHX1hBV1BMVVMKKyN1bmRlZiBIQVZFX1BLR19YTQorCisvKiBEZWZpbmUgdGhpcyBpZiB0aGUgY29tcGlsZXIgZG9lc24ndCBmdWxseSBzdXBwb3J0IHRoZSBjb25zdCBrZXl3b3JkLiAqLworI3VuZGVmIGNvbnN0CisKKy8qIERlZmluZSB0aGlzIGlmIHRoZSBjb21waWxlciBkb2Vzbid0IGZ1bGx5IHN1cHBvcnQgdGhlIGlubGluZSBrZXl3b3JkLiAqLworI3VuZGVmIGlubGluZQorCisvKiBEZWZpbmUgdGhpcyBpZiB0aGUgcGFja2VkIHZhcmlhYmxlIGF0dHJpYnV0ZSBpcyBzdXBwb3J0ZWQuICovCisjdW5kZWYgSEFWRV9WQVJfQVRUUklCVVRFX1BBQ0tFRAorCisvKiBEZWZpbmUgdGhpcyBpZiB0aGUgdW51c2VkIHZhcmlhYmxlIGF0dHJpYnV0ZSBpcyBzdXBwb3J0ZWQuICovCisjdW5kZWYgSEFWRV9WQVJfQVRUUklCVVRFX1VOVVNFRAorCisvKiBEZWZpbmUgdGhpcyBpZiB0aGUgZm9ybWF0IGZ1bmN0aW9uIGF0dHJpYnV0ZSBpcyBzdXBwb3J0ZWQuICovCisjdW5kZWYgSEFWRV9GVU5DX0FUVFJJQlVURV9GT1JNQVQKKworLyogRGVmaW5lIHRoaXMgaWYgdGhlIGZvcm1hdF9hcmcgZnVuY3Rpb24gYXR0cmlidXRlIGlzIHN1cHBvcnRlZC4gKi8KKyN1bmRlZiBIQVZFX0ZVTkNfQVRUUklCVVRFX0ZPUk1BVF9BUkcKKworLyogRGVmaW5lIHRoaXMgaWYgdGhlIG5vcmV0dXJuIGZ1bmN0aW9uIGF0dHJpYnV0ZSBpcyBzdXBwb3J0ZWQuICovCisjdW5kZWYgSEFWRV9GVU5DX0FUVFJJQlVURV9OT1JFVFVSTgorCisvKiBEZWZpbmUgdGhpcyBpZiB0aGUgdW51c2VkIGZ1bmN0aW9uIGF0dHJpYnV0ZSBpcyBzdXBwb3J0ZWQuICovCisjdW5kZWYgSEFWRV9GVU5DX0FUVFJJQlVURV9VTlVTRUQKKworLyogRGVmaW5lIHRoaXMgaWYgdGhlIF9fYWxpZ25vZl9fIG9wZXJhdG9yIGlzIHN1cHBvcnRlZC4gKi8KKyN1bmRlZiBIQVZFX09QRVJBVE9SX0FMSUdOT0YKKyNpZm5kZWYgSEFWRV9PUEVSQVRPUl9BTElHTk9GCisjZGVmaW5lIF9fYWxpZ25vZl9fKHgpIDgKKyNlbmRpZiAvKiBIQVZFX09QRVJBVE9SX0FMSUdOT0YgKi8KKworLyogRGVmaW5lIHRoaXMgaWYgdGhlIGhvc3QgaXMgYmlnIGVuZGlhbi4gKi8KKyN1bmRlZiBXT1JEU19CSUdFTkRJQU4KKworLyogRGVmaW5lIHRoaXMgdG8gYmUgYSBzdHJpbmcgY29udGFpbmluZyB0aGUgc2l6ZSBvZiB0aGUgd2NoYXJfdCB0eXBlLiAqLworI3VuZGVmIFNJWkVPRl9XQ0hBUl9UX1NUUgorCisvKiBEZWZpbmUgdGhpcyBpZiB0aGUgZnVuY3Rpb24gbG9jYWx0aW1lX3IgaXMgZGVjbGFyZWQuICovCisjdW5kZWYgSEFWRV9ERUNMX0xPQ0FMVElNRV9SCisKKy8qIERlZmluZSB0aGlzIGlmIHRoZSB0eXBlIFBST0NFU1NfSU5GT1JNQVRJT05fQ0xBU1MgZXhpc3RzLiAqLworI3VuZGVmIEhBVkVfUFJPQ0VTU19JTkZPUk1BVElPTl9DTEFTUworCisvKiBEZWZpbmUgdGhpcyBpZiB0aGUgdmFsdWUgUHJvY2Vzc1VzZXJNb2RlSU9QTCBleGlzdHMuICovCisjdW5kZWYgSEFWRV9QUk9DRVNTVVNFUk1PREVJT1BMCisKKy8qIERlZmluZSB0aGlzIGlmIEJSTFRUWSBpcyB0byBiZSBydW4gYXMgaW5pdC4gKi8KKyN1bmRlZiBJTklUX1BBVEgKKworLyogRGVmaW5lIHRoaXMgaWYgc3RhbmRhcmQgZXJyb3IgaXMgdG8gYmUgcmVkaXJlY3RlZCB0byBhIGZpbGUuICovCisjdW5kZWYgU1RERVJSX1BBVEgKKworLyogRGVmaW5lIHRoaXMgdG8gYmUgYSBzdHJpbmcgY29udGFpbmluZyB0aGUgcGF0aCB0byB0aGUgY29uZmlndXJhdGlvbiBkaXJlY3RvcnkuICovCisjdW5kZWYgQ09ORklHVVJBVElPTl9ESVJFQ1RPUlkKKworLyogRGVmaW5lIHRoaXMgdG8gYmUgYSBzdHJpbmcgY29udGFpbmluZyB0aGUgbmFtZSBvZiB0aGUgZGVmYXVsdCBjb25maWd1cmF0aW9uIGZpbGUuICovCisjdW5kZWYgQ09ORklHVVJBVElPTl9GSUxFCisKKy8qIERlZmluZSB0aGlzIHRvIGJlIGEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIHBhdGggdG8gdGhlIGxvY2FsZSBkaXJlY3RvcnkuICovCisjdW5kZWYgTE9DQUxFX0RJUkVDVE9SWQorCisvKiBEZWZpbmUgdGhpcyB0byBiZSBhIHN0cmluZyBjb250YWluaW5nIHRoZSBwYXRoIHRvIGEgd3JpdGFibGUgZGlyZWN0b3J5LiAqLworI3VuZGVmIFdSSVRBQkxFX0RJUkVDVE9SWQorCisvKiBEZWZpbmUgdGhpcyB0byBiZSBhIHN0cmluZyBjb250YWluaW5nIHRoZSBwYXRoIHRvIGEgZGlyZWN0b3J5IHdoaWNoIGNvbnRhaW5zIGZpbGVzIHRoYXQgY2FuIGJlIHVwZGF0ZWQuICovCisjdW5kZWYgVVBEQVRBQkxFX0RJUkVDVE9SWQorCisvKiBEZWZpbmUgdGhpcyB0byBiZSBhIHN0cmluZyBjb250YWluaW5nIHRoZSBuYW1lIG9mIHRoZSBkZWZhdWx0IHByZWZlcmVuY2VzIGZpbGUuICovCisjdW5kZWYgUFJFRkVSRU5DRVNfRklMRQorCisvKiBEZWZpbmUgdGhpcyB0byBiZSBhIHN0cmluZyBjb250YWluaW5nIHRoZSBwYXRoIHRvIHRoZSBoZWxwZXIgY29tbWFuZHMgZGlyZWN0b3J5LiAqLworI3VuZGVmIENPTU1BTkRTX0RJUkVDVE9SWQorCisvKiBEZWZpbmUgdGhpcyB0byBiZSBhIHN0cmluZyBjb250YWluaW5nIHRoZSBwYXRoIHRvIHRoZSBkcml2ZXJzIGRpcmVjdG9yeS4gKi8KKyN1bmRlZiBEUklWRVJTX0RJUkVDVE9SWQorCisvKiBEZWZpbmUgdGhpcyB0byBiZSBhIHN0cmluZyBjb250YWluaW5nIHRoZSBwYXRoIHRvIHRoZSB0YWJsZXMgZGlyZWN0b3J5LiAqLworI3VuZGVmIFRBQkxFU19ESVJFQ1RPUlkKKworLyogRGVmaW5lIHRoaXMgdG8gYmUgYSBzdHJpbmcgY29udGFpbmluZyB0aGUgcGF0aCB0byB0aGUgTGliTG91aXMgdGFibGVzIGRpcmVjdG9yeS4gKi8KKyN1bmRlZiBMT1VJU19UQUJMRVNfRElSRUNUT1JZCisKKy8qIERlZmluZSB0aGlzIHRvIGJlIGEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIGRlZmF1bHQgcGFyYW1ldGVycyBmb3IgdGhlIHByaXZpbGVnZSBlc3RhYmxpc2htZW50IHN0YWdlLiAqLworI3VuZGVmIFBSSVZJTEVHRV9QQVJBTUVURVJTCisKKy8qIERlZmluZSB0aGlzIHRvIGJlIGEgc3RyaW5nIGNvbnRhaW5pbmcgYSBsaXN0IG9mIHRoZSBicmFpbGxlIGRyaXZlciBjb2Rlcy4gKi8KKyN1bmRlZiBCUkFJTExFX0RSSVZFUl9DT0RFUworCisvKiBEZWZpbmUgdGhpcyB0byBiZSBhIHN0cmluZyBjb250YWluaW5nIHRoZSBkZWZhdWx0IHBhcmFtZXRlcnMgZm9yIHRoZSBicmFpbGxlIGRyaXZlcihzKS4gKi8KKyN1bmRlZiBCUkFJTExFX1BBUkFNRVRFUlMKKworLyogRGVmaW5lIHRoaXMgdG8gYmUgYSBzdHJpbmcgY29udGFpbmluZyB0aGUgcGF0aCB0byB0aGUgZGlyZWN0b3J5IGNvbnRhaW5pbmcgdGhlIGRldmljZXMuICovCisjdW5kZWYgREVWSUNFX0RJUkVDVE9SWQorCisvKiBEZWZpbmUgdGhpcyB0byBiZSBhIHN0cmluZyBjb250YWluaW5nIHRoZSBwYXRoIHRvIHRoZSBkZWZhdWx0IGJyYWlsbGUgZGV2aWNlLiAqLworI3VuZGVmIEJSQUlMTEVfREVWSUNFCisKKy8qIERlZmluZSB0aGlzIHRvIGJlIGEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIHBhdGggdG8gdGhlIGZpcnN0IHNlcmlhbCBkZXZpY2UuICovCisjdW5kZWYgU0VSSUFMX0ZJUlNUX0RFVklDRQorCisvKiBEZWZpbmUgdGhpcyB0byBiZSBhIHN0cmluZyBjb250YWluaW5nIGEgbGlzdCBvZiB0aGUgc3BlZWNoIGRyaXZlciBjb2Rlcy4gKi8KKyN1bmRlZiBTUEVFQ0hfRFJJVkVSX0NPREVTCisKKy8qIERlZmluZSB0aGlzIHRvIGJlIGEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIGRlZmF1bHQgcGFyYW1ldGVycyBmb3IgdGhlIHNwZWVjaCBkcml2ZXIocykuICovCisjdW5kZWYgU1BFRUNIX1BBUkFNRVRFUlMKKworLyogRGVmaW5lIHRoaXMgdG8gYmUgYSBzdHJpbmcgY29udGFpbmluZyBhIGxpc3Qgb2YgdGhlIHNjcmVlbiBkcml2ZXIgY29kZXMuICovCisjdW5kZWYgU0NSRUVOX0RSSVZFUl9DT0RFUworCisvKiBEZWZpbmUgdGhpcyB0byBiZSBhIHN0cmluZyBjb250YWluaW5nIHRoZSBkZWZhdWx0IHNjcmVlbiBkcml2ZXIgY29kZS4gKi8KKyN1bmRlZiBERUZBVUxUX1NDUkVFTl9EUklWRVIKKworLyogRGVmaW5lIHRoaXMgdG8gYmUgYSBzdHJpbmcgY29udGFpbmluZyB0aGUgZGVmYXVsdCBwYXJhbWV0ZXJzIGZvciB0aGUgc2NyZWVuIGRyaXZlcihzKS4gKi8KKyN1bmRlZiBTQ1JFRU5fUEFSQU1FVEVSUworCisvKiBEZWZpbmUgdGhpcyB0byBiZSBhIHN0cmluZyBjb250YWluaW5nIHRoZSBuYW1lIG9mIHRoZSBkZWZhdWx0IHRleHQgdGFibGUuICovCisjdW5kZWYgVEVYVF9UQUJMRQorCisvKiBEZWZpbmUgdGhpcyB0byBiZSBhIHN0cmluZyBjb250YWluaW5nIHRoZSBuYW1lIG9mIHRoZSBkZWZhdWx0IGNvbnRyYWN0aW9uIHRhYmxlLiAqLworI3VuZGVmIENPTlRSQUNUSU9OX1RBQkxFCisKKy8qIERlZmluZSB0aGlzIHRvIGJlIGEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIG5hbWUgb2YgdGhlIGRlZmF1bHQgYXR0cmlidXRlcyB0YWJsZS4gKi8KKyN1bmRlZiBBVFRSSUJVVEVTX1RBQkxFCisKKy8qIERlZmluZSB0aGlzIHRvIGluY2x1ZGUgc3BlZWNoIHN5bnRoZXNpemVyIGFuZCB0ZXh0LXRvLXNwZWVjaCBlbmdpbmUgc3VwcG9ydC4gKi8KKyN1bmRlZiBFTkFCTEVfU1BFRUNIX1NVUFBPUlQKKworLyogRGVmaW5lIHRoaXMgdG8gYmUgYSBzdHJpbmcgY29udGFpbmluZyB0aGUgcGF0aCB0byB0aGUgcm9vdCBvZiB0aGUgRmVzdGl2YWxMaXRlIHBhY2thZ2UuICovCisjdW5kZWYgRkxJVEVfUk9PVAorCisvKiBEZWZpbmUgdGhpcyB0byBiZSBhIHN0cmluZyBjb250YWluaW5nIHRoZSBwYXRoIHRvIHRoZSByb290IG9mIHRoZSBNaWtyb3B1aGUgcGFja2FnZS4gKi8KKyN1bmRlZiBNSUtST1BVSEVfUk9PVAorCisvKiBEZWZpbmUgdGhpcyB0byBiZSBhIHN0cmluZyBjb250YWluaW5nIHRoZSBwYXRoIHRvIHRoZSByb290IG9mIHRoZSBTcGVlY2hEaXNwYXRjaGVyIHBhY2thZ2UuICovCisjdW5kZWYgU1BFRUNIRF9ST09UCisKKy8qIERlZmluZSB0aGlzIHRvIGJlIGEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIHBhdGggdG8gdGhlIHJvb3Qgb2YgdGhlIFN3aWZ0IHBhY2thZ2UuICovCisjdW5kZWYgU1dJRlRfUk9PVAorCisvKiBEZWZpbmUgdGhpcyB0byBiZSBhIHN0cmluZyBjb250YWluaW5nIHRoZSBwYXRoIHRvIHRoZSByb290IG9mIHRoZSBUaGV0YSBwYWNrYWdlLiAqLworI3VuZGVmIFRIRVRBX1JPT1QKKworLyogRGVmaW5lIHRoaXMgaWYgdGhlIGFwcGxpY2F0aW9uIHByb2dyYW1taW5nIGludGVyZmFjZSBpcyB0byBiZSBpbmNsdWRlZC4gKi8KKyN1bmRlZiBFTkFCTEVfQVBJCisKKy8qIERlZmluZSB0aGlzIGlmIHRoZSBhcHBsaWNhdGlvbiBwcm9ncmFtbWluZyBpbnRlcmZhY2UgaXMgdG8gYmUgZnV6emVkLiAqLworI3VuZGVmIEVOQUJMRV9BUElfRlVaWklORworCisvKiBEZWZpbmUgdGhpcyB0byBiZSBhIHN0cmluZyBjb250YWluaW5nIHRoZSBkZWZhdWx0IHBhcmFtZXRlcnMgZm9yIHRoZSBhcHBsaWNhdGlvbiBwcm9ncmFtbWluZyBpbnRlcmZhY2UuICovCisjdW5kZWYgQVBJX1BBUkFNRVRFUlMKKworLyogRGVmaW5lIHRoaXMgdG8gYmUgYSBzdHJpbmcgY29udGFpbmluZyB0aGUgcGF0aCB0byBCcmxBUEkncyBsb2NhbCBzb2NrZXRzIGRpcmVjdG9yeS4gKi8KKyN1bmRlZiBCUkxBUElfU09DS0VUUEFUSAorCisvKiBEZWZpbmUgdGhpcyB0byBiZSBhIHN0cmluZyBjb250YWluaW5nIHRoZSBwYXRoIHRvIEJybEFQSSdzIGRhdGEgZmlsZXMgZGlyZWN0b3J5LiAqLworI3VuZGVmIEJSTEFQSV9FVENESVIKKworLyogRGVmaW5lIHRoaXMgdG8gYmUgYSBzdHJpbmcgY29udGFpbmluZyB0aGUgbmFtZSBvZiBCcmxBUEkncyBhdXRob3JpemF0aW9uIGtleSBmaWxlLiAqLworI3VuZGVmIEJSTEFQSV9BVVRIS0VZRklMRQorCisvKiBEZWZpbmUgdGhpcyBpZiBpbnRlcm5hdGlvbmFsaXphdGlvbiBzdXBwb3J0IGlzIHRvIGJlIGluY2x1ZGVkLiAqLworI3VuZGVmIEVOQUJMRV9JMThOX1NVUFBPUlQKKworLyogRGVmaW5lIHRoaXMgaWYgc2hhcmVkIG9iamVjdCBzdXBwb3J0IGlzIHRvIGJlIGluY2x1ZGVkLiAqLworI3VuZGVmIEVOQUJMRV9TSEFSRURfT0JKRUNUUworCisvKiBEZWZpbmUgdGhpcyBpZiBIUC1VWCBhdWRpbyBzdXBwb3J0IGlzIGF2YWlsYWJsZS4gKi8KKyN1bmRlZiBIQVZFX0hQVVhfQVVESU8KKworLyogRGVmaW5lIHRoaXMgdG8gYmUgYSBzdHJpbmcgY29udGFpbmluZyB0aGUgc3ViZGlyZWN0b3J5IGZvciB0ZXh0IHRhYmxlcy4gKi8KKyN1bmRlZiBURVhUX1RBQkxFU19TVUJESVJFQ1RPUlkKKworLyogRGVmaW5lIHRoaXMgdG8gYmUgYSBzdHJpbmcgY29udGFpbmluZyB0aGUgc3ViZGlyZWN0b3J5IGZvciBjb250cmFjdGlvbiB0YWJsZXMuICovCisjdW5kZWYgQ09OVFJBQ1RJT05fVEFCTEVTX1NVQkRJUkVDVE9SWQorCisvKiBEZWZpbmUgdGhpcyB0byBiZSBhIHN0cmluZyBjb250YWluaW5nIHRoZSBzdWJkaXJlY3RvcnkgZm9yIGF0dHJpYnV0ZXMgdGFibGVzLiAqLworI3VuZGVmIEFUVFJJQlVURVNfVEFCTEVTX1NVQkRJUkVDVE9SWQorCisvKiBEZWZpbmUgdGhpcyB0byBiZSBhIHN0cmluZyBjb250YWluaW5nIHRoZSBzdWJkaXJlY3RvcnkgZm9yIGtleWJvYXJkIHRhYmxlcy4gKi8KKyN1bmRlZiBLRVlCT0FSRF9UQUJMRVNfU1VCRElSRUNUT1JZCisKKy8qIERlZmluZSB0aGlzIHRvIGJlIGEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIHN1YmRpcmVjdG9yeSBmb3IgaW5wdXQgdGFibGVzLiAqLworI3VuZGVmIElOUFVUX1RBQkxFU19TVUJESVJFQ1RPUlkKKworLyogRGVmaW5lIHRoaXMgdG8gYmUgYSBzdHJpbmcgY29udGFpbmluZyB0aGUgZXh0ZW5zaW9uIGZvciB0ZXh0IHRhYmxlcy4gKi8KKyN1bmRlZiBURVhUX1RBQkxFX0VYVEVOU0lPTgorCisvKiBEZWZpbmUgdGhpcyB0byBiZSBhIHN0cmluZyBjb250YWluaW5nIHRoZSBleHRlbnNpb24gZm9yIHRleHQgc3VidGFibGVzLiAqLworI3VuZGVmIFRFWFRfU1VCVEFCTEVfRVhURU5TSU9OCisKKy8qIERlZmluZSB0aGlzIHRvIGJlIGEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIGV4dGVuc2lvbiBmb3IgY29udHJhY3Rpb24gdGFibGVzLiAqLworI3VuZGVmIENPTlRSQUNUSU9OX1RBQkxFX0VYVEVOU0lPTgorCisvKiBEZWZpbmUgdGhpcyB0byBiZSBhIHN0cmluZyBjb250YWluaW5nIHRoZSBleHRlbnNpb24gZm9yIGNvbnRyYWN0aW9uIHN1YnRhYmxlcy4gKi8KKyN1bmRlZiBDT05UUkFDVElPTl9TVUJUQUJMRV9FWFRFTlNJT04KKworLyogRGVmaW5lIHRoaXMgdG8gYmUgYSBzdHJpbmcgY29udGFpbmluZyB0aGUgZXh0ZW5zaW9uIGZvciBhdHRyaWJ1dGVzIHRhYmxlcy4gKi8KKyN1bmRlZiBBVFRSSUJVVEVTX1RBQkxFX0VYVEVOU0lPTgorCisvKiBEZWZpbmUgdGhpcyB0byBiZSBhIHN0cmluZyBjb250YWluaW5nIHRoZSBleHRlbnNpb24gZm9yIGF0dHJpYnV0ZXMgc3VidGFibGVzLiAqLworI3VuZGVmIEFUVFJJQlVURVNfU1VCVEFCTEVfRVhURU5TSU9OCisKKy8qIERlZmluZSB0aGlzIHRvIGJlIGEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIGV4dGVuc2lvbiBmb3Iga2V5IHRhYmxlcy4gKi8KKyN1bmRlZiBLRVlfVEFCTEVfRVhURU5TSU9OCisKKy8qIERlZmluZSB0aGlzIHRvIGJlIGEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIGV4dGVuc2lvbiBmb3Iga2V5IHN1YnRhYmxlcy4gKi8KKyN1bmRlZiBLRVlfU1VCVEFCTEVfRVhURU5TSU9OCisKKy8qIERlZmluZSB0aGlzIHRvIGJlIGEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIGV4dGVuc2lvbiBmb3Iga2V5IGhlbHAgZmlsZXMuICovCisjdW5kZWYgS0VZX0hFTFBfRVhURU5TSU9OCisKKy8qIERlZmluZSB0aGlzIHRvIGJlIGEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIHN1YmRpcmVjdG9yeSBmb3IgcHJvZmlsZXMuICovCisjdW5kZWYgUFJPRklMRVNfU1VCRElSRUNUT1JZCisKKy8qIERlZmluZSB0aGlzIHRvIGJlIGEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIGV4dGVuc2lvbiBmb3IgbGFuZ3VhZ2UgcHJvZmlsZXMuICovCisjdW5kZWYgTEFOR1VBR0VfUFJPRklMRV9FWFRFTlNJT04KKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYgLyogX19jcGx1c3BsdXMgKi8KKworI2VuZGlmIC8qIEJSTFRUWV9JTkNMVURFRF9DT05GSUcgKi8KZGlmZiAtLWdpdCBhL2NvbmZpZy5tay5pbiBiL2NvbmZpZy5tay5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZDIxMjA3Ci0tLSAvZGV2L251bGwKKysrIGIvY29uZmlnLm1rLmluCkBAIC0wLDAgKzEsNDYwIEBACisjIEBjb25maWd1cmVfaW5wdXRACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisjICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorIworIyBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisjCisjIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisjCisjIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyMgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorIyBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyMKKyMgV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworIworIyBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworQFNFVF9NQUtFQAorCitCVUlMRF9BTElBUyA9IEBidWlsZF9hbGlhc0AKK0JVSUxEX1NZU1RFTSA9IEBidWlsZEAKK0JVSUxEX0NQVSA9IEBidWlsZF9jcHVACitCVUlMRF9WRU5ET1IgPSBAYnVpbGRfdmVuZG9yQAorQlVJTERfT1MgPSBAYnVpbGRfb3NACisKK0hPU1RfQUxJQVMgPSBAaG9zdF9hbGlhc0AKK0hPU1RfU1lTVEVNID0gQGhvc3RACitIT1NUX0NQVSA9IEBob3N0X2NwdUAKK0hPU1RfVkVORE9SID0gQGhvc3RfdmVuZG9yQAorSE9TVF9PUyA9IEBob3N0X29zQAorCitUQVJHRVRfQUxJQVMgPSBAdGFyZ2V0X2FsaWFzQAorVEFSR0VUX1NZU1RFTSA9IEB0YXJnZXRACitUQVJHRVRfQ1BVID0gQHRhcmdldF9jcHVACitUQVJHRVRfVkVORE9SID0gQHRhcmdldF92ZW5kb3JACitUQVJHRVRfT1MgPSBAdGFyZ2V0X29zQAorCitwcmVmaXggPSBAcHJlZml4QAorc3lzY29uZmRpciA9IEBzeXNjb25mZGlyQAorc2hhcmVkc3RhdGVkaXIgPSBAc2hhcmVkc3RhdGVkaXJACitsb2NhbHN0YXRlZGlyID0gQGxvY2Fsc3RhdGVkaXJACitpbmNsdWRlZGlyID0gQGluY2x1ZGVkaXJACitvbGRpbmNsdWRlZGlyID0gQG9sZGluY2x1ZGVkaXJACisKK2RhdGFyb290ZGlyID0gQGRhdGFyb290ZGlyQAorbG9jYWxlZGlyID0gQGxvY2FsZWRpckAKK21hbmRpciA9IEBtYW5kaXJACitpbmZvZGlyID0gQGluZm9kaXJACitkYXRhZGlyID0gQGRhdGFkaXJACisKK2RvY2RpciA9IEBkb2NkaXJACitwc2RpciA9IEBwc2RpckAKK3BkZmRpciA9IEBwZGZkaXJACitodG1sZGlyID0gQGh0bWxkaXJACitkdmlkaXIgPSBAZHZpZGlyQAorCitleGVjX3ByZWZpeCA9IEBleGVjX3ByZWZpeEAKK2JpbmRpciA9IEBiaW5kaXJACitzYmluZGlyID0gQHNiaW5kaXJACitsaWJkaXIgPSBAbGliZGlyQAorbGliZXhlY2RpciA9IEBsaWJleGVjZGlyQAorCitPID0gQE9CSkVYVEAKK1ggPSBARVhFRVhUQAorCitQQUNLQUdFX05BTUUgPSBAUEFDS0FHRV9OQU1FQAorUEFDS0FHRV9WRVJTSU9OID0gQFBBQ0tBR0VfVkVSU0lPTkAKK1BBQ0tBR0VfU1RSSU5HID0gQFBBQ0tBR0VfU1RSSU5HQAorUEFDS0FHRV9UQVJOQU1FID0gQFBBQ0tBR0VfVEFSTkFNRUAKK1BBQ0tBR0VfVVJMID0gQFBBQ0tBR0VfVVJMQAorUEFDS0FHRV9CVUdSRVBPUlQgPSBAUEFDS0FHRV9CVUdSRVBPUlRACisKK1BHTV9ESVIgPSBQcm9ncmFtcworSERSX0RJUiA9IEhlYWRlcnMKK0RPQ19ESVIgPSBEb2N1bWVudHMKK01TR19ESVIgPSBNZXNzYWdlcworVEJMX0RJUiA9IFRhYmxlcworQk5EX0RJUiA9IEJpbmRpbmdzCitCUkxfRElSID0gRHJpdmVycy9CcmFpbGxlCitTUEtfRElSID0gRHJpdmVycy9TcGVlY2gKK1NDUl9ESVIgPSBEcml2ZXJzL1NjcmVlbgorCitEUlZfRElSID0gbGliCitBUElfTElCUyA9IC1MJChCTERfVE9QKSQoUEdNX0RJUikgLWxicmxhcGkKKworSU5TVEFMTF9ST09UID0gQGluc3RhbGxfcm9vdEAKK0VYRUNVVEVfUk9PVCA9IEBleGVjdXRlX3Jvb3RACisKK1BST0dSQU1fRElSRUNUT1JZID0gQHByb2dyYW1fZGlyZWN0b3J5QAorQ09NTUFORFNfRElSRUNUT1JZID0gQGNvbW1hbmRzX2RpcmVjdG9yeUAKK0RSSVZFUlNfRElSRUNUT1JZID0gQGRyaXZlcnNfZGlyZWN0b3J5QAorVVBEQVRBQkxFX0RJUkVDVE9SWSA9IEB1cGRhdGFibGVfZGlyZWN0b3J5QAorV1JJVEFCTEVfRElSRUNUT1JZID0gQHdyaXRhYmxlX2RpcmVjdG9yeUAKK1RBQkxFU19ESVJFQ1RPUlkgPSBAdGFibGVzX2RpcmVjdG9yeUAKK01BTlBBR0VfRElSRUNUT1JZID0gQG1hbnBhZ2VfZGlyZWN0b3J5QAorSU5DTFVERV9ESVJFQ1RPUlkgPSBAaW5jbHVkZV9kaXJlY3RvcnlACisKK01BTlVBTF9ESVJFQ1RPUklFUyA9IEBicmx0dHlfbWFudWFsX2RpcmVjdG9yaWVzQAorCitQT0xLSVRfUE9MSUNZX0RJUiA9IEBQT0xLSVRfUE9MSUNZX0RJUkAKK1BPTEtJVF9SVUxFX0RJUiA9IEBQT0xLSVRfUlVMRV9ESVJACitTWVNURU1EX1NZU1VTRVJTX0RJUiA9IEBTWVNURU1EX1NZU1VTRVJTX0RJUkAKK1NZU1RFTURfVE1QRklMRVNfRElSID0gQFNZU1RFTURfVE1QRklMRVNfRElSQAorU1lTVEVNRF9VTklUX0RJUiA9IEBTWVNURU1EX1VOSVRfRElSQAorU1lTVEVNRF9DT05GX0RJUiA9IEBTWVNURU1EX0NPTkZfRElSQAorCitFWFBBVF9JTkNMVURFUyA9IEBleHBhdF9pbmNsdWRlc0AKK0VYUEFUX0xJQlMgPSBAZXhwYXRfbGlic0AKKworSUNVX0lOQ0xVREVTID0gQGljdV9pbmNsdWRlc0AKK0lDVV9MSUJTID0gQGljdV9saWJzQAorCitMT1VJU19JTkNMVURFUyA9IEBsb3Vpc19pbmNsdWRlc0AKK0xPVUlTX0xJQlMgPSBAbG91aXNfbGlic0AKKworR0xJQjJfUEFDS0FHRSA9IEBnbGliMl9wYWNrYWdlQAorR0xJQjJfSU5DTFVERVMgPSBAZ2xpYjJfaW5jbHVkZXNACitHTElCMl9MSUJTID0gQGdsaWIyX2xpYnNACisKK0RCVVNfUEFDS0FHRSA9IEBkYnVzX3BhY2thZ2VACitEQlVTX0lOQ0xVREVTID0gQGRidXNfaW5jbHVkZXNACitEQlVTX0xJQlMgPSBAZGJ1c19saWJzQAorCitQT0xLSVRfUEFDS0FHRSA9IEBwb2xraXRfcGFja2FnZUAKK1BPTEtJVF9JTkNMVURFUyA9IEBwb2xraXRfaW5jbHVkZXNACitQT0xLSVRfTElCUyA9IEBwb2xraXRfbGlic0AKKworQ1VSU0VTX1BBQ0tBR0UgPSBAY3Vyc2VzX3BhY2thZ2VACitDVVJTRVNfTElCUyA9IEBjdXJzZXNfbGlic0AKKworR1VJX1RPT0xLSVRfUEFDS0FHRSA9IEBndWlfdG9vbGtpdF9wYWNrYWdlQAorCitYMTFfUEFDS0FHRSA9IEB4MTFfcGFja2FnZUAKK1gxMV9JTkNMVURFUyA9IEB4MTFfaW5jbHVkZXNACitYMTFfTElCUyA9IEB4MTFfbGlic0AKKworWEVYVF9QQUNLQUdFID0gQHhleHRfcGFja2FnZUAKK1hFWFRfSU5DTFVERVMgPSBAeGV4dF9pbmNsdWRlc0AKK1hFWFRfTElCUyA9IEB4ZXh0X2xpYnNACisKK1hUU1RfUEFDS0FHRSA9IEB4dHN0X3BhY2thZ2VACitYVFNUX0lOQ0xVREVTID0gQHh0c3RfaW5jbHVkZXNACitYVFNUX0xJQlMgPSBAeHRzdF9saWJzQAorCitYVF9QQUNLQUdFID0gQHh0X3BhY2thZ2VACitYVF9JTkNMVURFUyA9IEB4dF9pbmNsdWRlc0AKK1hUX0xJQlMgPSBAeHRfbGlic0AKKworWEtCX0xJQlMgPSBAeGtiX2xpYnNACitYVEtfTElCUyA9IEB4dGtfbGlic0AKK1hGSVhFU19MSUJTID0gQHhmaXhlc19saWJzQAorCitDU1BJX1BBQ0tBR0UgPSBAY3NwaV9wYWNrYWdlQAorQ1NQSV9JTkNMVURFUyA9IEBjc3BpX2luY2x1ZGVzQAorQ1NQSV9MSUJTID0gQGNzcGlfbGlic0AKKworQVRTUEkyX1BBQ0tBR0UgPSBAYXRzcGkyX3BhY2thZ2VACitBVFNQSTJfSU5DTFVERVMgPSBAYXRzcGkyX2luY2x1ZGVzQAorQVRTUEkyX0xJQlMgPSBAYXRzcGkyX2xpYnNACisKK1NZU1RFTV9QQUNLQUdFID0gQHN5c3RlbV9wYWNrYWdlQAorU1lTVEVNX09CSkVDVCA9IHN5c3RlbV8kKFNZU1RFTV9QQUNLQUdFKQorU1lTVEVNX09CSkVDVFMgPSAkKFNZU1RFTV9PQkpFQ1QpLiRPICQoSE9TVENNRF9PQkpFQ1RTKQorU1lTVEVNX0lOQ0xVREVTID0gQHN5c3RlbV9pbmNsdWRlc0AKK1NZU1RFTV9MSUJTID0gQHN5c3RlbV9saWJzQAorCitQR01QQVRIX1BBQ0tBR0UgPSBAcGdtcGF0aF9wYWNrYWdlQAorUEdNUEFUSF9PQkpFQ1QgPSBwZ21wYXRoXyQoUEdNUEFUSF9QQUNLQUdFKQorUEdNUEFUSF9PQkpFQ1RTID0gJChQR01QQVRIX09CSkVDVCkuJE8KK1BHTVBBVEhfSU5DTFVERVMgPSBAcGdtcGF0aF9pbmNsdWRlc0AKK1BHTVBBVEhfTElCUyA9IEBwZ21wYXRoX2xpYnNACisKK1BHTVBSSVZTX1BBQ0tBR0UgPSBAcGdtcHJpdnNfcGFja2FnZUAKK1BHTVBSSVZTX09CSkVDVCA9IHBnbXByaXZzXyQoUEdNUFJJVlNfUEFDS0FHRSkKK1BHTVBSSVZTX09CSkVDVFMgPSAkKFBHTVBSSVZTX09CSkVDVCkuJE8KK1BHTVBSSVZTX0lOQ0xVREVTID0gQHBnbXByaXZzX2luY2x1ZGVzQAorUEdNUFJJVlNfTElCUyA9IEBwZ21wcml2c19saWJzQAorCitTRVJWSUNFX1BBQ0tBR0UgPSBAc2VydmljZV9wYWNrYWdlQAorU0VSVklDRV9PQkpFQ1QgPSBzZXJ2aWNlXyQoU0VSVklDRV9QQUNLQUdFKQorU0VSVklDRV9PQkpFQ1RTID0gJChTRVJWSUNFX09CSkVDVCkuJE8KK1NFUlZJQ0VfSU5DTFVERVMgPSBAc2VydmljZV9pbmNsdWRlc0AKK1NFUlZJQ0VfTElCUyA9IEBzZXJ2aWNlX2xpYnNACisKK1BBUkFNU19QQUNLQUdFID0gQHBhcmFtc19wYWNrYWdlQAorUEFSQU1TX09CSkVDVCA9IHBhcmFtc18kKFBBUkFNU19QQUNLQUdFKQorUEFSQU1TX09CSkVDVFMgPSAkKFBBUkFNU19PQkpFQ1QpLiRPCitQQVJBTVNfSU5DTFVERVMgPSBAcGFyYW1zX2luY2x1ZGVzQAorUEFSQU1TX0xJQlMgPSBAcGFyYW1zX2xpYnNACisKK0RZTkxEX1BBQ0tBR0UgPSBAZHlubGRfcGFja2FnZUAKK0RZTkxEX09CSkVDVCA9IGR5bmxkXyQoRFlOTERfUEFDS0FHRSkKK0RZTkxEX09CSkVDVFMgPSAkKERZTkxEX09CSkVDVCkuJE8KK0RZTkxEX0lOQ0xVREVTID0gQGR5bmxkX2luY2x1ZGVzQAorRFlOTERfTElCUyA9IEBkeW5sZF9saWJzQAorCitSR1hfUEFDS0FHRSA9IEByZ3hfcGFja2FnZUAKK1JHWF9PQkpFQ1QgPSByZ3hfJChSR1hfUEFDS0FHRSkKK1JHWF9PQkpFQ1RTID0gcmd4LiRPICQoUkdYX09CSkVDVCkuJE8KK1JHWF9JTkNMVURFUyA9IEByZ3hfaW5jbHVkZXNACitSR1hfTElCUyA9IEByZ3hfbGlic0AKKworQ0hBUlNFVF9QQUNLQUdFID0gQGNoYXJzZXRfcGFja2FnZUAKK0NIQVJTRVRfT0JKRUNUID0gY2hhcnNldF8kKENIQVJTRVRfUEFDS0FHRSkKK0NIQVJTRVRfT0JKRUNUUyA9IGNoYXJzZXQuJE8gJChDSEFSU0VUX09CSkVDVCkuJE8KK0NIQVJTRVRfSU5DTFVERVMgPSBAY2hhcnNldF9pbmNsdWRlc0AKK0NIQVJTRVRfTElCUyA9IEBjaGFyc2V0X2xpYnNACisKK0hPU1RDTURfUEFDS0FHRSA9IEBob3N0Y21kX3BhY2thZ2VACitIT1NUQ01EX09CSkVDVCA9IGhvc3RjbWRfJChIT1NUQ01EX1BBQ0tBR0UpCitIT1NUQ01EX09CSkVDVFMgPSBob3N0Y21kLiRPICQoSE9TVENNRF9PQkpFQ1QpLiRPCitIT1NUQ01EX0lOQ0xVREVTID0gQGhvc3RjbWRfaW5jbHVkZXNACitIT1NUQ01EX0xJQlMgPSBAaG9zdGNtZF9saWJzQAorCitNTlRQVF9QQUNLQUdFID0gQG1udHB0X3BhY2thZ2VACitNTlRQVF9PQkpFQ1QgPSBtbnRwdF8kKE1OVFBUX1BBQ0tBR0UpCitNTlRQVF9PQkpFQ1RTID0gbW50cHQuJE8gJChNTlRQVF9PQkpFQ1QpLiRPCitNTlRQVF9JTkNMVURFUyA9IEBtbnRwdF9pbmNsdWRlc0AKK01OVFBUX0xJQlMgPSBAbW50cHRfbGlic0AKKworTU5URlNfUEFDS0FHRSA9IEBtbnRmc19wYWNrYWdlQAorTU5URlNfT0JKRUNUID0gbW50ZnNfJChNTlRGU19QQUNLQUdFKQorTU5URlNfT0JKRUNUUyA9ICQoTU5URlNfT0JKRUNUKS4kTworTU5URlNfSU5DTFVERVMgPSBAbW50ZnNfaW5jbHVkZXNACitNTlRGU19MSUJTID0gQG1udGZzX2xpYnNACisKK0tCRF9QQUNLQUdFID0gQGtiZF9wYWNrYWdlQAorS0JEX09CSkVDVCA9IGtiZF8kKEtCRF9QQUNLQUdFKQorS0JEX09CSkVDVFMgPSBrYmQuJE8gJChLQkRfT0JKRUNUKS4kTworS0JEX0lOQ0xVREVTID0gQGtiZF9pbmNsdWRlc0AKK0tCRF9MSUJTID0gQGtiZF9saWJzQAorCitCRUxMX1BBQ0tBR0UgPSBAYmVsbF9wYWNrYWdlQAorQkVMTF9PQkpFQ1QgPSBiZWxsXyQoQkVMTF9QQUNLQUdFKQorQkVMTF9PQkpFQ1RTID0gYmVsbC4kTyAkKEJFTExfT0JKRUNUKS4kTworQkVMTF9JTkNMVURFUyA9IEBiZWxsX2luY2x1ZGVzQAorQkVMTF9MSUJTID0gQGJlbGxfbGlic0AKKworTEVEU19QQUNLQUdFID0gQGxlZHNfcGFja2FnZUAKK0xFRFNfT0JKRUNUID0gbGVkc18kKExFRFNfUEFDS0FHRSkKK0xFRFNfT0JKRUNUUyA9IGxlZHMuJE8gJChMRURTX09CSkVDVCkuJE8KK0xFRFNfSU5DTFVERVMgPSBAbGVkc19pbmNsdWRlc0AKK0xFRFNfTElCUyA9IEBsZWRzX2xpYnNACisKK0JFRVBfUEFDS0FHRSA9IEBiZWVwX3BhY2thZ2VACitCRUVQX09CSkVDVCA9IGJlZXBfJChCRUVQX1BBQ0tBR0UpCitCRUVQX09CSkVDVFMgPSBub3Rlc19iZWVwLiRPIGJlZXAuJE8gJChCRUVQX09CSkVDVCkuJE8KK0JFRVBfSU5DTFVERVMgPSBAYmVlcF9pbmNsdWRlc0AKK0JFRVBfTElCUyA9IEBiZWVwX2xpYnNACisKK1BDTV9QQUNLQUdFID0gQHBjbV9wYWNrYWdlQAorUENNX09CSkVDVCA9IHBjbV8kKFBDTV9QQUNLQUdFKQorUENNX09CSkVDVFMgPSBub3Rlc19wY20uJE8gcGNtLiRPICQoUENNX09CSkVDVCkuJE8KK1BDTV9JTkNMVURFUyA9IEBwY21faW5jbHVkZXNACitQQ01fTElCUyA9IEBwY21fbGlic0AKKworTUlESV9QQUNLQUdFID0gQG1pZGlfcGFja2FnZUAKK01JRElfT0JKRUNUID0gbWlkaV8kKE1JRElfUEFDS0FHRSkKK01JRElfT0JKRUNUUyA9IG5vdGVzX21pZGkuJE8gbWlkaS4kTyAkKE1JRElfT0JKRUNUKS4kTworTUlESV9JTkNMVURFUyA9IEBtaWRpX2luY2x1ZGVzQAorTUlESV9MSUJTID0gQG1pZGlfbGlic0AKKworRk1fUEFDS0FHRSA9IEBmbV9wYWNrYWdlQAorRk1fT0JKRUNUID0gZm1fJChGTV9QQUNLQUdFKQorRk1fT0JKRUNUUyA9IG5vdGVzX2ZtLiRPICQoRk1fT0JKRUNUKS4kTworRk1fSU5DTFVERVMgPSBAZm1faW5jbHVkZXNACitGTV9MSUJTID0gQGZtX2xpYnNACisKK1NFUklBTF9QQUNLQUdFID0gQHNlcmlhbF9wYWNrYWdlQAorU0VSSUFMX09CSkVDVCA9IHNlcmlhbF8kKFNFUklBTF9QQUNLQUdFKQorU0VSSUFMX09CSkVDVFMgPSBzZXJpYWwuJE8gJChTRVJJQUxfT0JKRUNUKS4kTworU0VSSUFMX0lOQ0xVREVTID0gQHNlcmlhbF9pbmNsdWRlc0AKK1NFUklBTF9MSUJTID0gQHNlcmlhbF9saWJzQAorCitVU0JfUEFDS0FHRSA9IEB1c2JfcGFja2FnZUAKK1VTQl9PQkpFQ1QgPSB1c2JfJChVU0JfUEFDS0FHRSkKK1VTQl9PQkpFQ1RTID0gdXNiLiRPIHVzYl9oaWQuJE8gdXNiX2RldmljZXMuJE8gdXNiX3NlcmlhbC4kTyB1c2JfYWRhcHRlcnMuJE8gdXNiX2NkY19hY20uJE8gdXNiX2JlbGtpbi4kTyB1c2JfY2gzNDEuJE8gdXNiX2NwMjEwMS4kTyB1c2JfY3AyMTEwLiRPIHVzYl9mdGRpLiRPICQoVVNCX09CSkVDVCkuJE8KK1VTQl9JTkNMVURFUyA9IEB1c2JfaW5jbHVkZXNACitVU0JfTElCUyA9IEB1c2JfbGlic0AKKworQkxVRVRPT1RIX1BBQ0tBR0UgPSBAYmx1ZXRvb3RoX3BhY2thZ2VACitCTFVFVE9PVEhfT0JKRUNUID0gYmx1ZXRvb3RoXyQoQkxVRVRPT1RIX1BBQ0tBR0UpCitCTFVFVE9PVEhfT0JKRUNUUyA9IGJsdWV0b290aC4kTyBibHVldG9vdGhfbmFtZXMuJE8gJChCTFVFVE9PVEhfT0JKRUNUKS4kTworQkxVRVRPT1RIX0lOQ0xVREVTID0gQGJsdWV0b290aF9pbmNsdWRlc0AKK0JMVUVUT09USF9MSUJTID0gQGJsdWV0b290aF9saWJzQAorCitISURfUEFDS0FHRSA9IEBoaWRfcGFja2FnZUAKK0hJRF9PQkpFQ1QgPSBoaWRfJChISURfUEFDS0FHRSkKK0hJRF9PQkpFQ1RTID0gaGlkLiRPIGhpZF9pdGVtcy4kTyBoaWRfYnJhaWxsZS4kTyAkKEhJRF9PQkpFQ1QpLiRPCitISURfSU5DTFVERVMgPSBAaGlkX2luY2x1ZGVzQAorSElEX0xJQlMgPSBAaGlkX2xpYnNACisKK1BPUlRTX1BBQ0tBR0UgPSBAcG9ydHNfcGFja2FnZUAKK1BPUlRTX09CSkVDVCA9IHBvcnRzXyQoUE9SVFNfUEFDS0FHRSkKK1BPUlRTX09CSkVDVFMgPSAkKFBPUlRTX09CSkVDVCkuJE8KK1BPUlRTX0lOQ0xVREVTID0gQHBvcnRzX2luY2x1ZGVzQAorUE9SVFNfTElCUyA9IEBwb3J0c19saWJzQAorCitGVVpaRVJfTElCUyA9IEBmdXp6ZXJfbGlic0AKKworQ0MgPSBAQ0NACitDUFBGTEFHUyA9IC1JJChCTERfRElSKSAtSSQoU1JDX0RJUikgLUkkKEJMRF9UT1A6Lz0pLyQoUEdNX0RJUikgLUkkKFNSQ19UT1A6Lz0pLyQoUEdNX0RJUikgLUkkKFNSQ19UT1A6Lz0pLyQoSERSX0RJUikgLUkkKEJMRF9UT1A6Lz0pIC1JJChTUkNfVE9QOi89KSBAQ1BQRkxBR1NAIEBERUZTQAorQ0ZMQUdTID0gJChDUFBGTEFHUykgQENGTEFHU0AKK0xJQkNGTEFHUyA9ICQoQ0ZMQUdTKSBATElCQ0ZMQUdTQAorCitDWFggPSBAQ1hYQAorQ1hYRkxBR1MgPSAkKENQUEZMQUdTKSBAQ1hYRkxBR1NACitMSUJDWFhGTEFHUyA9ICQoQ1hYRkxBR1MpIEBMSUJDWFhGTEFHU0AKKworTEQgPSBATERACitMREZMQUdTID0gQExERkxBR1NACitMRExJQlMgPSAkKElDVV9MSUJTKSAkKFNZU1RFTV9MSUJTKSAkKEZVWlpFUl9MSUJTKSBATElCU0AKKworTUtTSFIgPSBATUtTSFJACitNS1JFTCA9IEBNS1JFTEAKK01LTElCID0gQE1LTElCQAorCitTVFJJUCA9IEBTVFJJUEAKK1JBTkxJQiA9IEBSQU5MSUJACisKK0FXSyA9IEBBV0tACitTWU1MSU5LID0gQExOX1NACitET1hZR0VOID0gQERPWFlHRU5ACisKK1BLR19DT05GSUcgPSBAUEtHX0NPTkZJR0AKK01TR01FUkdFID0gQE1TR01FUkdFQAorTVNHRk1UID0gQE1TR0ZNVEAKKworSU5TVEFMTCA9IEBJTlNUQUxMQAorSU5TVEFMTF9TQ1JJUFQgPSAkKElOU1RBTEwpCitJTlNUQUxMX1BST0dSQU0gPSAkKElOU1RBTExfU0NSSVBUKSBASU5TVEFMTF9PUFRJT05fU1RSSVBACitJTlNUQUxMX0RBVEEgPSAkKElOU1RBTEwpIC1tIDY0NAorSU5TVEFMTF9ESVJFQ1RPUlkgPSAkKElOU1RBTEwpIC1kCisKK0FSQ19QRlggPSBAYXJjaGl2ZV9wcmVmaXhACitBUkNfRVhUID0gQGFyY2hpdmVfZXh0ZW5zaW9uQAorCitMSUJfUEZYID0gQGxpYnJhcnlfcHJlZml4QAorTElCX0VYVCA9IEBsaWJyYXJ5X2V4dGVuc2lvbkAKKworTU9EX05BTUUgPSBAbW9kdWxlX25hbWVACitNT0RfRVhUID0gQG1vZHVsZV9leHRlbnNpb25ACisKK0NPTkZMSUJESVIgPSBAQ09ORkxJQkRJUkAKK0xJQl9WQVIgPSBAbGlic2VhcmNoX3ZhcmlhYmxlQAorCitURVhUX1RBQkxFU19TVUJESVJFQ1RPUlkgPSBAVEVYVF9UQUJMRVNfU1VCRElSRUNUT1JZQAorQ09OVFJBQ1RJT05fVEFCTEVTX1NVQkRJUkVDVE9SWSA9IEBDT05UUkFDVElPTl9UQUJMRVNfU1VCRElSRUNUT1JZQAorQVRUUklCVVRFU19UQUJMRVNfU1VCRElSRUNUT1JZID0gQEFUVFJJQlVURVNfVEFCTEVTX1NVQkRJUkVDVE9SWUAKK0tFWUJPQVJEX1RBQkxFU19TVUJESVJFQ1RPUlkgPSBAS0VZQk9BUkRfVEFCTEVTX1NVQkRJUkVDVE9SWUAKK0lOUFVUX1RBQkxFU19TVUJESVJFQ1RPUlkgPSBASU5QVVRfVEFCTEVTX1NVQkRJUkVDVE9SWUAKKworVEVYVF9UQUJMRV9FWFRFTlNJT04gPSBAVEVYVF9UQUJMRV9FWFRFTlNJT05ACitURVhUX1NVQlRBQkxFX0VYVEVOU0lPTiA9IEBURVhUX1NVQlRBQkxFX0VYVEVOU0lPTkAKKworQ09OVFJBQ1RJT05fVEFCTEVfRVhURU5TSU9OID0gQENPTlRSQUNUSU9OX1RBQkxFX0VYVEVOU0lPTkAKK0NPTlRSQUNUSU9OX1NVQlRBQkxFX0VYVEVOU0lPTiA9IEBDT05UUkFDVElPTl9TVUJUQUJMRV9FWFRFTlNJT05ACisKK0FUVFJJQlVURVNfVEFCTEVfRVhURU5TSU9OID0gQEFUVFJJQlVURVNfVEFCTEVfRVhURU5TSU9OQAorQVRUUklCVVRFU19TVUJUQUJMRV9FWFRFTlNJT04gPSBAQVRUUklCVVRFU19TVUJUQUJMRV9FWFRFTlNJT05ACisKK0tFWV9UQUJMRV9FWFRFTlNJT04gPSBAS0VZX1RBQkxFX0VYVEVOU0lPTkAKK0tFWV9TVUJUQUJMRV9FWFRFTlNJT04gPSBAS0VZX1NVQlRBQkxFX0VYVEVOU0lPTkAKK0tFWV9IRUxQX0VYVEVOU0lPTiA9IEBLRVlfSEVMUF9FWFRFTlNJT05ACisKK1BST0ZJTEVTX1NVQkRJUkVDVE9SWSA9IEBQUk9GSUxFU19TVUJESVJFQ1RPUllACitMQU5HVUFHRV9QUk9GSUxFX0VYVEVOU0lPTiA9IEBMQU5HVUFHRV9QUk9GSUxFX0VYVEVOU0lPTkAKKworQlJBSUxMRV9EUklWRVJfQ09ERVMgPSBAYnJsdHR5X2l0ZW1fY29kZXNfYnJhaWxsZUAKK0JSQUlMTEVfRFJJVkVSX05BTUVTID0gQGJybHR0eV9pdGVtX25hbWVzX2JyYWlsbGVACitCUkFJTExFX0lOVEVSTkFMX0RSSVZFUl9DT0RFUyA9IEBicmx0dHlfaW50ZXJuYWxfY29kZXNfYnJhaWxsZUAKK0JSQUlMTEVfSU5URVJOQUxfRFJJVkVSX05BTUVTID0gQGJybHR0eV9pbnRlcm5hbF9uYW1lc19icmFpbGxlQAorQlJBSUxMRV9FWFRFUk5BTF9EUklWRVJfQ09ERVMgPSBAYnJsdHR5X2V4dGVybmFsX2NvZGVzX2JyYWlsbGVACitCUkFJTExFX0VYVEVSTkFMX0RSSVZFUl9OQU1FUyA9IEBicmx0dHlfZXh0ZXJuYWxfbmFtZXNfYnJhaWxsZUAKK0JSQUlMTEVfRFJJVkVSX09CSkVDVFMgPSBAYnJhaWxsZV9kcml2ZXJfb2JqZWN0c0AKK0JSQUlMTEVfRFJJVkVSX0xJQlJBUklFUyA9IEBicmFpbGxlX2RyaXZlcl9saWJyYXJpZXNACitCUkFJTExFX0RSSVZFUlMgPSBAYnJhaWxsZV9kcml2ZXJzQAorCitTUEVFQ0hfRFJJVkVSX0NPREVTID0gQGJybHR0eV9pdGVtX2NvZGVzX3NwZWVjaEAKK1NQRUVDSF9EUklWRVJfTkFNRVMgPSBAYnJsdHR5X2l0ZW1fbmFtZXNfc3BlZWNoQAorU1BFRUNIX0lOVEVSTkFMX0RSSVZFUl9DT0RFUyA9IEBicmx0dHlfaW50ZXJuYWxfY29kZXNfc3BlZWNoQAorU1BFRUNIX0lOVEVSTkFMX0RSSVZFUl9OQU1FUyA9IEBicmx0dHlfaW50ZXJuYWxfbmFtZXNfc3BlZWNoQAorU1BFRUNIX0VYVEVSTkFMX0RSSVZFUl9DT0RFUyA9IEBicmx0dHlfZXh0ZXJuYWxfY29kZXNfc3BlZWNoQAorU1BFRUNIX0VYVEVSTkFMX0RSSVZFUl9OQU1FUyA9IEBicmx0dHlfZXh0ZXJuYWxfbmFtZXNfc3BlZWNoQAorU1BFRUNIX0RSSVZFUl9PQkpFQ1RTID0gQHNwZWVjaF9kcml2ZXJfb2JqZWN0c0AKK1NQRUVDSF9EUklWRVJfTElCUkFSSUVTID0gQHNwZWVjaF9kcml2ZXJfbGlicmFyaWVzQAorU1BFRUNIX0RSSVZFUlMgPSBAc3BlZWNoX2RyaXZlcnNACisKK1NDUkVFTl9EUklWRVJfQ09ERVMgPSBAYnJsdHR5X2l0ZW1fY29kZXNfc2NyZWVuQAorU0NSRUVOX0RSSVZFUl9OQU1FUyA9IEBicmx0dHlfaXRlbV9uYW1lc19zY3JlZW5ACitTQ1JFRU5fSU5URVJOQUxfRFJJVkVSX0NPREVTID0gQGJybHR0eV9pbnRlcm5hbF9jb2Rlc19zY3JlZW5ACitTQ1JFRU5fSU5URVJOQUxfRFJJVkVSX05BTUVTID0gQGJybHR0eV9pbnRlcm5hbF9uYW1lc19zY3JlZW5ACitTQ1JFRU5fRVhURVJOQUxfRFJJVkVSX0NPREVTID0gQGJybHR0eV9leHRlcm5hbF9jb2Rlc19zY3JlZW5ACitTQ1JFRU5fRVhURVJOQUxfRFJJVkVSX05BTUVTID0gQGJybHR0eV9leHRlcm5hbF9uYW1lc19zY3JlZW5ACitTQ1JFRU5fRFJJVkVSX09CSkVDVFMgPSBAc2NyZWVuX2RyaXZlcl9vYmplY3RzQAorU0NSRUVOX0RSSVZFUl9MSUJSQVJJRVMgPSBAc2NyZWVuX2RyaXZlcl9saWJyYXJpZXNACitTQ1JFRU5fRFJJVkVSUyA9IEBzY3JlZW5fZHJpdmVyc0AKKworTElCQlJBSUxMRV9ST09UID0gQGxpYmJyYWlsbGVfcm9vdEAKK0VTUEVBS19ST09UID0gQGVzcGVha19yb290QAorRVNQRUFLX05HX1JPT1QgPSBAZXNwZWFrX25nX3Jvb3RACitGTElURV9ST09UID0gQGZsaXRlX3Jvb3RACitGTElURV9MQU5HVUFHRSA9IEBmbGl0ZV9sYW5ndWFnZUAKK0ZMSVRFX0xFWElDT04gPSBAZmxpdGVfbGV4aWNvbkAKK0ZMSVRFX1ZPSUNFID0gQGZsaXRlX3ZvaWNlQAorTUlLUk9QVUhFX1JPT1QgPSBAbWlrcm9wdWhlX3Jvb3RACitTUEVFQ0hEX0lOQ0xVREVTID0gQHNwZWVjaGRfaW5jbHVkZXNACitTUEVFQ0hEX0xJQlMgPSBAc3BlZWNoZF9saWJzQAorU1dJRlRfUk9PVCA9IEBzd2lmdF9yb290QAorVEhFVEFfUk9PVCA9IEB0aGV0YV9yb290QAorCitJTlNUQUxMX1RFWFRfVEFCTEVTID0gQGluc3RhbGxfdGV4dF90YWJsZXNACitJTlNUQUxMX0NPTlRSQUNUSU9OX1RBQkxFUyA9IEBpbnN0YWxsX2NvbnRyYWN0aW9uX3RhYmxlc0AKK0lOU1RBTExfQVRUUklCVVRFU19UQUJMRVMgPSBAaW5zdGFsbF9hdHRyaWJ1dGVzX3RhYmxlc0AKK0lOU1RBTExfRFJJVkVSUyA9IEBpbnN0YWxsX2RyaXZlcnNACitJTlNUQUxMX01FU1NBR0VTID0gQGluc3RhbGxfbWVzc2FnZXNACisKK1RFWFRfVEFCTEUgPSBAdGV4dF90YWJsZUAKK0NPTlRSQUNUSU9OX1RBQkxFID0gQGNvbnRyYWN0aW9uX3RhYmxlQAorQVRUUklCVVRFU19UQUJMRSA9IEBhdHRyaWJ1dGVzX3RhYmxlQAorCitDVEJfT0JKRUNUUyA9IEBjb250cmFjdGVkX2JyYWlsbGVfb2JqZWN0c0AKK1NQRUVDSF9PQkpFQ1QgPSBAc3BlZWNoX3N1cHBvcnRfb2JqZWN0QAorWFNFTF9PQkpFQ1QgPSBAeHNlbF9vYmplY3RACisKK0FQSV9WRVJTSU9OID0gQGFwaV92ZXJzaW9uQAorQVBJX1JFTEVBU0UgPSBAYXBpX3JlbGVhc2VACitBUElfU0VSVkVSX09CSkVDVFMgPSBAYXBpX3NlcnZlcl9vYmplY3RzQAorQVBJX0xJQlJBUklFUyA9IEBhcGlfbGlicmFyaWVzQAorQUxMX0FQSSA9IEBhbGxfYXBpQAorQlVJTERfQVBJID0gQGJ1aWxkX2FwaUAKK0lOU1RBTExfQVBJID0gQGluc3RhbGxfYXBpQAorQVBJX1JFRiA9IEBhcGlfcmVmQAorQVBJX0RZTkFNSUNfTElCUkFSWSA9IEBhcGlfZHluYW1pY19saWJyYXJ5QAorSU5TVEFMTF9BUElfTElCUkFSSUVTID0gQGluc3RhbGxfYXBpX2xpYnJhcmllc0AKK1VOSU5TVEFMTF9BUElfTElCUkFSSUVTID0gQHVuaW5zdGFsbF9hcGlfbGlicmFyaWVzQAorQVBJX0FVVEhGSUxFID0gQGFwaV9hdXRoa2V5ZmlsZUAKK0FQSV9TT0NLRVRfUEFUSCA9IEBCUkxBUElfU09DS0VUUEFUSEAKKworQVBJX0JJTkRJTkdTID0gQGFwaV9iaW5kaW5nc0AKK0FMTF9BUElfQklORElOR1MgPSBAYWxsX2FwaV9iaW5kaW5nc0AKK0lOU1RBTExfQVBJX0JJTkRJTkdTID0gQGluc3RhbGxfYXBpX2JpbmRpbmdzQAorCitBTExfWEJSTEFQSSA9IEBhbGxfeGJybGFwaUAKK0lOU1RBTExfWEJSTEFQSSA9IEBpbnN0YWxsX3hicmxhcGlACisKK0FMTF9CUkxUVFlfUFRZID0gQGFsbF9icmx0dHlfcHR5QAorSU5TVEFMTF9CUkxUVFlfUFRZID0gQGluc3RhbGxfYnJsdHR5X3B0eUAKKworTU9VTlRfT0JKRUNUUyA9ICQoTU5UUFRfT0JKRUNUUykgJChNTlRGU19PQkpFQ1RTKQorR0lPX09CSkVDVFMgPSBnaW8uJE8gZ2lvX3NlcmlhbC4kTyBnaW9fdXNiLiRPIGdpb19ibHVldG9vdGguJE8gZ2lvX2hpZC4kTyBnaW9fbnVsbC4kTworSU9fT0JKRUNUUyA9IGlvX2xvZy4kTyAkKFNFUklBTF9PQkpFQ1RTKSAkKFVTQl9PQkpFQ1RTKSAkKEJMVUVUT09USF9PQkpFQ1RTKSAkKEhJRF9PQkpFQ1RTKSAkKEdJT19PQkpFQ1RTKSAkKE1PVU5UX09CSkVDVFMpCitUVU5FX09CSkVDVFMgPSB0dW5lLiRPIG5vdGVzLiRPICQoQkVFUF9PQkpFQ1RTKSAkKFBDTV9PQkpFQ1RTKSAkKE1JRElfT0JKRUNUUykgJChGTV9PQkpFQ1RTKQorQVNZTkNfT0JKRUNUUyA9IGFzeW5jX2hhbmRsZS4kTyBhc3luY19kYXRhLiRPIGFzeW5jX3dhaXQuJE8gYXN5bmNfYWxhcm0uJE8gYXN5bmNfdGFzay4kTyBhc3luY19pby4kTyBhc3luY19ldmVudC4kTyBhc3luY19zaWduYWwuJE8gdGhyZWFkLiRPCitCQVNFX09CSkVDVFMgPSBtZXNzYWdlcy4kTyBsb2cuJE8gbG9nX2hpc3RvcnkuJE8gYWRkcmVzc2VzLiRPIGZpbGUuJE8gZGV2aWNlLiRPIHBhcnNlLiRPIHZhcmlhYmxlcy4kTyBkYXRhZmlsZS4kTyB1bmljb2RlLiRPIHV0ZjguJE8gdGltaW5nLiRPICQoQVNZTkNfT0JKRUNUUykgaW9fbWlzYy4kTyBxdWV1ZS4kTyBsb2NrLiRPICQoRFlOTERfT0JKRUNUUykgJChQT1JUU19PQkpFQ1RTKSAkKFNZU1RFTV9PQkpFQ1RTKQorQ01ETElORV9PQkpFQ1RTID0gY21kbGluZS4kTyAkKFBBUkFNU19PQkpFQ1RTKQorUFJPR1JBTV9PQkpFQ1RTID0gcHJvZ3JhbS4kTyAkKFBHTVBBVEhfT0JKRUNUUykgcGlkLiRPICQoQ01ETElORV9PQkpFQ1RTKSAkKEJBU0VfT0JKRUNUUykKKwpkaWZmIC0tZ2l0IGEvY29uZmlndXJlLmFjIGIvY29uZmlndXJlLmFjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUyMDhiMWEKLS0tIC9kZXYvbnVsbAorKysgYi9jb25maWd1cmUuYWMKQEAgLTAsMCArMSwyMDU0IEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisjICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorIworIyBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisjCisjIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisjCisjIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyMgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorIyBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyMKKyMgV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworIworIyBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworQUNfUFJFUkVRKFsyLjY0XSkKK0FDX0lOSVQoW0JSTFRUWV0sIFs2LjZdLCBbQlJMVFRZQGJybHR0eS5hcHBdLCBbYnJsdHR5XSwgW2h0dHBzOi8vYnJsdHR5LmFwcC9dKQorQUNfQ09ORklHX1NSQ0RJUihbUHJvZ3JhbXMvYnJsdHR5LmNdKQorCitBQ19DT05GSUdfTUFDUk9fRElSKFttNF0pCittNF9pbmNsdWRlKFtCaW5kaW5ncy9FbWFjcy9iaW5kaW5ncy5tNF0pCittNF9pbmNsdWRlKFtCaW5kaW5ncy9KYXZhL2JpbmRpbmdzLm00XSkKK200X2luY2x1ZGUoW0JpbmRpbmdzL0xpc3AvYmluZGluZ3MubTRdKQorbTRfaW5jbHVkZShbQmluZGluZ3MvTHVhL2JpbmRpbmdzLm00XSkKK200X2luY2x1ZGUoW0JpbmRpbmdzL09DYW1sL2JpbmRpbmdzLm00XSkKK200X2luY2x1ZGUoW0JpbmRpbmdzL1B5dGhvbi9iaW5kaW5ncy5tNF0pCittNF9pbmNsdWRlKFtCaW5kaW5ncy9UY2wvYmluZGluZ3MubTRdKQorCitjb3B5cmlnaHQ9IsKpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMiCitBQ19TVUJTVChbUEFDS0FHRV9DT1BZUklHSFRdLCBbIiR7Y29weXJpZ2h0fSJdKQorQUNfREVGSU5FX1VOUVVPVEVEKFtQQUNLQUdFX0NPUFlSSUdIVF0sIFsiJHtjb3B5cmlnaHR9Il0sCisgICAgICAgICAgICAgICAgICAgW0RlZmluZSB0aGlzIHRvIGJlIGEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIGNvcHlyaWdodCBub3RpY2UuXSkKKworQUNfU1VCU1QoW2FwaV9tYWpvcl0sIFswXSkKK0FDX1NVQlNUKFthcGlfbWlub3JdLCBbOF0pCitBQ19TVUJTVChbYXBpX3JldmlzaW9uXSwgWzVdKQorCitBQ19TVUJTVChbYXBpX25hbWVdLCBbQnJsQVBJXSkKK0FDX1NVQlNUKFthcGlfdmVyc2lvbl0sIFske2FwaV9tYWpvcn0uJHthcGlfbWlub3J9XSkKK0FDX1NVQlNUKFthcGlfcmVsZWFzZV0sIFske2FwaV92ZXJzaW9ufS4ke2FwaV9yZXZpc2lvbn1dKQorCitBQ19ERUZJTkVfVU5RVU9URUQoW0JSTEFQSV9SRUxFQVNFXSwgWyIke2FwaV9yZWxlYXNlfSJdLAorICAgICAgICAgICAgICAgICAgIFtEZWZpbmUgdGhpcyB0byBiZSBhIHN0cmluZyBjb250YWluaW5nIHRoZSBBUEkgbGlicmFyeSB2ZXJzaW9uLl0pCitBQ19ERUZJTkVfVU5RVU9URUQoW0JSTEFQSV9NQUpPUl0sIFske2FwaV9tYWpvcn1dLAorICAgICAgICAgICAgICAgICAgIFtEZWZpbmUgdGhpcyB0byBiZSB0aGUgQVBJIGxpYnJhcnkgbWFqb3IgdmVyc2lvbiBudW1iZXIuXSkKK0FDX0RFRklORV9VTlFVT1RFRChbQlJMQVBJX01JTk9SXSwgWyR7YXBpX21pbm9yfV0sCisgICAgICAgICAgICAgICAgICAgW0RlZmluZSB0aGlzIHRvIGJlIHRoZSBBUEkgbGlicmFyeSBtaW5vciB2ZXJzaW9uIG51bWJlci5dKQorQUNfREVGSU5FX1VOUVVPVEVEKFtCUkxBUElfUkVWSVNJT05dLCBbJHthcGlfcmV2aXNpb259XSwKKyAgICAgICAgICAgICAgICAgICBbRGVmaW5lIHRoaXMgdG8gYmUgdGhlIEFQSSBsaWJyYXJ5IHJldmlzaW9uIG51bWJlci5dKQorCitCUkxUVFlfU1VNTUFSWV9CRUdJTgorYnJsdHR5X2J1aWxkX2RpcmVjdG9yaWVzPSIuIFByb2dyYW1zIERvY3VtZW50cyBNZXNzYWdlcyIKK2JybHR0eV9zb3VyY2VfZGlyZWN0b3J5PSJgZGlybmFtZSAiJHswfSJgIgorYnJsdHR5X21hbnVhbF9kaXJlY3Rvcmllcz0iIgorCitmb3IgYnJsdHR5X2RpcmVjdG9yeSBpbiBBdXRvc3RhcnQgQXV0aG9yaXphdGlvbiBJbml0cmFtZnMgQW5kcm9pZAorZG8KKyAgIGZvciBicmx0dHlfc3ViZGlyZWN0b3J5IGluIGBjZCAiJHticmx0dHlfc291cmNlX2RpcmVjdG9yeX0vJHticmx0dHlfZGlyZWN0b3J5fSIgJiYgZWNobyAqYAorICAgZG8KKyAgICAgIGJybHR0eV9wYXRoPSIke2JybHR0eV9kaXJlY3Rvcnl9LyR7YnJsdHR5X3N1YmRpcmVjdG9yeX0iCisgICAgICB0ZXN0IC1mICIke2JybHR0eV9zb3VyY2VfZGlyZWN0b3J5fS8ke2JybHR0eV9wYXRofS9NYWtlZmlsZS5pbiIgJiYgeworICAgICAgICAgYnJsdHR5X2J1aWxkX2RpcmVjdG9yaWVzPSIke2JybHR0eV9idWlsZF9kaXJlY3Rvcmllc30gJHticmx0dHlfcGF0aH0iCisgICAgICB9CisgICBkb25lCitkb25lCisKK2ZvciBicmx0dHlfbWFudWFsX2RpcmVjdG9yeSBpbiBgKGNkICIke2JybHR0eV9zb3VyY2VfZGlyZWN0b3J5fSIgJiYgZWNobyBEb2N1bWVudHMvTWFudWFsLSovKilgCitkbworICAgdGVzdCAtZiAiJHticmx0dHlfc291cmNlX2RpcmVjdG9yeX0vJHticmx0dHlfbWFudWFsX2RpcmVjdG9yeX0vTWFrZWZpbGUuaW4iICYmIHsKKyAgICAgIGJybHR0eV9tYW51YWxfZGlyZWN0b3JpZXM9IiR7YnJsdHR5X21hbnVhbF9kaXJlY3Rvcmllc30gJHticmx0dHlfbWFudWFsX2RpcmVjdG9yeX0iCisgICB9Citkb25lCisKK0FDX1NVQlNUKFticmx0dHlfbWFudWFsX2RpcmVjdG9yaWVzXSkKK2JybHR0eV9idWlsZF9kaXJlY3Rvcmllcz0iJHticmx0dHlfYnVpbGRfZGlyZWN0b3JpZXN9ICR7YnJsdHR5X21hbnVhbF9kaXJlY3Rvcmllc30iCisKK0FDX0NPTkZJR19IRUFERVJTKFtjb25maWcuaF0pCitBQ19DT05GSUdfSEVBREVSUyhbUHJvZ3JhbXMvYnJsYXBpLmhdKQorQUNfUFJFRklYX0RFRkFVTFQoW10pCitBQ19DT05GSUdfQVVYX0RJUihbYWNkaXJdKQorQUNfQ0FOT05JQ0FMX1RBUkdFVAorCiticmx0dHlfZGVmYXVsdF9leGVjdXRlX3Jvb3Q9Ii8ke1BBQ0tBR0VfVEFSTkFNRX0tJHtQQUNLQUdFX1ZFUlNJT059IgorQlJMVFRZX0FSR19XSVRIKAorICAgW2V4ZWN1dGUtcm9vdF0sIFtESVJFQ1RPUlldLAorICAgW3doZXJlIHRoZSBwYWNrYWdlIGlzIHRvIGJlIGFuY2hvcmVkIGF0IHJ1bi10aW1lXSwKKyAgIFtleGVjdXRlX3Jvb3RdLCBbIiJdCispCitpZiB0ZXN0ICIke2V4ZWN1dGVfcm9vdH0iID0gIm5vIgordGhlbgorICAgZXhlY3V0ZV9yb290PSIiCitlbGlmIHRlc3QgIiR7ZXhlY3V0ZV9yb290fSIgPSAieWVzIgordGhlbgorICAgZXhlY3V0ZV9yb290PSIke2JybHR0eV9kZWZhdWx0X2V4ZWN1dGVfcm9vdH0iCitmaQorQUNfU1VCU1QoW2V4ZWN1dGVfcm9vdF0pCitCUkxUVFlfU1VNTUFSWV9JVEVNKFtleGVjdXRlLXJvb3RdLCBbZXhlY3V0ZV9yb290XSkKKworYnJsdHR5X2RlZmF1bHRfaW5zdGFsbF9yb290PSIvdG1wLyR7UEFDS0FHRV9UQVJOQU1FfS0ke1BBQ0tBR0VfVkVSU0lPTn0iCitCUkxUVFlfQVJHX1dJVEgoCisgICBbaW5zdGFsbC1yb290XSwgW0RJUkVDVE9SWV0sCisgICBbd2hlcmUgdG8gaW5zdGFsbCB0aGUgcGFja2FnZV0sCisgICBbaW5zdGFsbF9yb290XSwgWyIke2V4ZWN1dGVfcm9vdH0iXQorKQoraWYgdGVzdCAiJHtpbnN0YWxsX3Jvb3R9IiA9ICJubyIKK3RoZW4KKyAgIGluc3RhbGxfcm9vdD0iJHtleGVjdXRlX3Jvb3R9IgorZWxpZiB0ZXN0ICIke2luc3RhbGxfcm9vdH0iID0gInllcyIKK3RoZW4KKyAgIGluc3RhbGxfcm9vdD0iJHticmx0dHlfZGVmYXVsdF9pbnN0YWxsX3Jvb3R9IgorZmkKK0FDX1NVQlNUKFtpbnN0YWxsX3Jvb3RdKQorQlJMVFRZX1NVTU1BUllfSVRFTShbaW5zdGFsbC1yb290XSwgW2luc3RhbGxfcm9vdF0pCisKK0JSTFRUWV9BUkdfV0lUSCgKKyAgIFtjb25maWd1cmF0aW9uLWZpbGVdLCBbRklMRV0sCisgICBbbmFtZSBvZiBjb25maWd1cmF0aW9uIGZpbGVdLAorICAgW0NPTkZJR1VSQVRJT05fRklMRV0sIFsiJHtQQUNLQUdFX1RBUk5BTUV9LmNvbmYiXQorKQorQUNfU1VCU1QoW0NPTkZJR1VSQVRJT05fRklMRV0pCitCUkxUVFlfREVGSU5FX0VYUEFOREVEKFtDT05GSUdVUkFUSU9OX0ZJTEVdLCBbIiR7Q09ORklHVVJBVElPTl9GSUxFfSJdLAorICAgICAgICAgICAgICAgICAgICAgICBbRGVmaW5lIHRoaXMgdG8gYmUgYSBzdHJpbmcgY29udGFpbmluZyB0aGUgbmFtZSBvZiB0aGUgZGVmYXVsdCBjb25maWd1cmF0aW9uIGZpbGUuXSkKKworQUNfU1VCU1QoW1BSRUZFUkVOQ0VTX0ZJTEVdLCBbIiR7UEFDS0FHRV9UQVJOQU1FfS5wcmVmcyJdKQorQlJMVFRZX0RFRklORV9FWFBBTkRFRChbUFJFRkVSRU5DRVNfRklMRV0sIFsiJHtQUkVGRVJFTkNFU19GSUxFfSJdLAorICAgICAgICAgICAgICAgICAgICAgICBbRGVmaW5lIHRoaXMgdG8gYmUgYSBzdHJpbmcgY29udGFpbmluZyB0aGUgbmFtZSBvZiB0aGUgZGVmYXVsdCBwcmVmZXJlbmNlcyBmaWxlLl0pCisKK0JSTFRUWV9QT1JUQUJMRV9ESVJFQ1RPUlkoW2luY2x1ZGVkaXJdLCBbL3Vzcl0pCitCUkxUVFlfUE9SVEFCTEVfRElSRUNUT1JZKFtkYXRhcm9vdGRpcl0sIFsvdXNyXSkKK0JSTFRUWV9QT1JUQUJMRV9ESVJFQ1RPUlkoW2xvY2Fsc3RhdGVkaXJdLCBbXSkKKworQlJMVFRZX1NVTU1BUllfSVRFTShbbGliZGlyXSwgW2xpYmRpcl0pCitCUkxUVFlfU1VNTUFSWV9JVEVNKFtzeXNjb25mZGlyXSwgW3N5c2NvbmZkaXJdKQorCitCUkxUVFlfQVJHX1JFUVVJUkVEKAorICAgW3Byb2dyYW0tZGlyZWN0b3J5XSwgW0RJUkVDVE9SWV0sCisgICBbcGF0aCB0byBkaXJlY3RvcnkgY29udGFpbmluZyBleGVjdXRhYmxlc10sCisgICBbcHJvZ3JhbV9kaXJlY3RvcnldLCBbIiR7YmluZGlyfSJdCispCisKK0JSTFRUWV9BUkdfUkVRVUlSRUQoCisgICBbY29tbWFuZHMtZGlyZWN0b3J5XSwgW0RJUkVDVE9SWV0sCisgICBbcGF0aCB0byBkaXJlY3RvcnkgY29udGFpbmluZyBoZWxwZXIgY29tbWFuZHNdLAorICAgW2NvbW1hbmRzX2RpcmVjdG9yeV0sIFsiJHtsaWJleGVjZGlyfS8ke1BBQ0tBR0VfVEFSTkFNRX0iXQorKQorCitCUkxUVFlfQVJHX1JFUVVJUkVEKAorICAgW2RyaXZlcnMtZGlyZWN0b3J5XSwgW0RJUkVDVE9SWV0sCisgICBbcGF0aCB0byBkaXJlY3RvcnkgY29udGFpbmluZyBkcml2ZXJzXSwKKyAgIFtkcml2ZXJzX2RpcmVjdG9yeV0sIFsiJHtsaWJkaXJ9LyR7UEFDS0FHRV9UQVJOQU1FfSJdCispCisKK0JSTFRUWV9BUkdfV0lUSCgKKyAgIFt1cGRhdGFibGUtZGlyZWN0b3J5XSwgW0RJUkVDVE9SWV0sCisgICBbcGF0aCB0byBkaXJlY3Rvcnkgd2hpY2ggY29udGFpbnMgZmlsZXMgdGhhdCBjYW4gYmUgdXBkYXRlZF0sCisgICBbdXBkYXRhYmxlX2RpcmVjdG9yeV0sIFsieWVzIl0KKykKK2lmIHRlc3QgIiR7dXBkYXRhYmxlX2RpcmVjdG9yeX0iID0gIm5vIgordGhlbgorICAgdXBkYXRhYmxlX2RpcmVjdG9yeT0iIgorZWxpZiB0ZXN0ICIke3VwZGF0YWJsZV9kaXJlY3Rvcnl9IiA9ICJ5ZXMiCit0aGVuCisgICB1cGRhdGFibGVfZGlyZWN0b3J5PSIke2xvY2Fsc3RhdGVkaXJ9L2xpYi8ke1BBQ0tBR0VfVEFSTkFNRX0iCitmaQorQUNfU1VCU1QoW3VwZGF0YWJsZV9kaXJlY3RvcnldKQorQlJMVFRZX1NVTU1BUllfSVRFTShbdXBkYXRhYmxlLWRpcmVjdG9yeV0sIFt1cGRhdGFibGVfZGlyZWN0b3J5XSkKKworQlJMVFRZX0FSR19XSVRIKAorICAgW3dyaXRhYmxlLWRpcmVjdG9yeV0sIFtESVJFQ1RPUlldLAorICAgW3BhdGggdG8gZGlyZWN0b3J5IHdoaWNoIGNhbiBiZSB3cml0dGVuIHRvXSwKKyAgIFt3cml0YWJsZV9kaXJlY3RvcnldLCBbInllcyJdCispCitpZiB0ZXN0ICIke3dyaXRhYmxlX2RpcmVjdG9yeX0iID0gIm5vIgordGhlbgorICAgd3JpdGFibGVfZGlyZWN0b3J5PSIiCitlbGlmIHRlc3QgIiR7d3JpdGFibGVfZGlyZWN0b3J5fSIgPSAieWVzIgordGhlbgorICAgd3JpdGFibGVfZGlyZWN0b3J5PSIvcnVuLyR7UEFDS0FHRV9UQVJOQU1FfSIKK2ZpCitBQ19TVUJTVChbd3JpdGFibGVfZGlyZWN0b3J5XSkKK0JSTFRUWV9TVU1NQVJZX0lURU0oW3dyaXRhYmxlLWRpcmVjdG9yeV0sIFt3cml0YWJsZV9kaXJlY3RvcnldKQorCitCUkxUVFlfQVJHX1JFUVVJUkVEKAorICAgW3RhYmxlcy1kaXJlY3RvcnldLCBbRElSRUNUT1JZXSwKKyAgIFtwYXRoIHRvIGRpcmVjdG9yeSBjb250YWluaW5nIGRhdGEgZmlsZXNdLAorICAgW3RhYmxlc19kaXJlY3RvcnldLCBbIiR7c3lzY29uZmRpcn0vJHtQQUNLQUdFX1RBUk5BTUV9Il0KKykKKworQlJMVFRZX0RFRklORV9TVFJJTkcoW1RFWFRfVEFCTEVTX1NVQkRJUkVDVE9SWV0sIFtUZXh0XSwgW3RoZSBzdWJkaXJlY3RvcnkgZm9yIHRleHQgdGFibGVzXSkKK0JSTFRUWV9ERUZJTkVfU1RSSU5HKFtDT05UUkFDVElPTl9UQUJMRVNfU1VCRElSRUNUT1JZXSwgW0NvbnRyYWN0aW9uXSwgW3RoZSBzdWJkaXJlY3RvcnkgZm9yIGNvbnRyYWN0aW9uIHRhYmxlc10pCitCUkxUVFlfREVGSU5FX1NUUklORyhbQVRUUklCVVRFU19UQUJMRVNfU1VCRElSRUNUT1JZXSwgW0F0dHJpYnV0ZXNdLCBbdGhlIHN1YmRpcmVjdG9yeSBmb3IgYXR0cmlidXRlcyB0YWJsZXNdKQorQlJMVFRZX0RFRklORV9TVFJJTkcoW0tFWUJPQVJEX1RBQkxFU19TVUJESVJFQ1RPUlldLCBbS2V5Ym9hcmRdLCBbdGhlIHN1YmRpcmVjdG9yeSBmb3Iga2V5Ym9hcmQga2V5IHRhYmxlc10pCitCUkxUVFlfREVGSU5FX1NUUklORyhbSU5QVVRfVEFCTEVTX1NVQkRJUkVDVE9SWV0sIFtJbnB1dF0sIFt0aGUgc3ViZGlyZWN0b3J5IGZvciBicmFpbGxlIGRldmljZSBrZXkgdGFibGVzXSkKKworQlJMVFRZX0RFRklORV9TVFJJTkcoW1RFWFRfVEFCTEVfRVhURU5TSU9OXSwgWy50dGJdLCBbdGhlIGV4dGVuc2lvbiBmb3IgdGV4dCB0YWJsZXNdKQorQlJMVFRZX0RFRklORV9TVFJJTkcoW1RFWFRfU1VCVEFCTEVfRVhURU5TSU9OXSwgWy50dGldLCBbdGhlIGV4dGVuc2lvbiBmb3IgdGV4dCBzdWJ0YWJsZXNdKQorCitCUkxUVFlfREVGSU5FX1NUUklORyhbQ09OVFJBQ1RJT05fVEFCTEVfRVhURU5TSU9OXSwgWy5jdGJdLCBbdGhlIGV4dGVuc2lvbiBmb3IgY29udHJhY3Rpb24gdGFibGVzXSkKK0JSTFRUWV9ERUZJTkVfU1RSSU5HKFtDT05UUkFDVElPTl9TVUJUQUJMRV9FWFRFTlNJT05dLCBbLmN0aV0sIFt0aGUgZXh0ZW5zaW9uIGZvciBjb250cmFjdGlvbiBzdWJ0YWJsZXNdKQorCitCUkxUVFlfREVGSU5FX1NUUklORyhbQVRUUklCVVRFU19UQUJMRV9FWFRFTlNJT05dLCBbLmF0Yl0sIFt0aGUgZXh0ZW5zaW9uIGZvciBhdHRyaWJ1dGVzIHRhYmxlc10pCitCUkxUVFlfREVGSU5FX1NUUklORyhbQVRUUklCVVRFU19TVUJUQUJMRV9FWFRFTlNJT05dLCBbLmF0aV0sIFt0aGUgZXh0ZW5zaW9uIGZvciBhdHRyaWJ1dGVzIHN1YnRhYmxlc10pCisKK0JSTFRUWV9ERUZJTkVfU1RSSU5HKFtLRVlfVEFCTEVfRVhURU5TSU9OXSwgWy5rdGJdLCBbdGhlIGV4dGVuc2lvbiBmb3Iga2V5IHRhYmxlc10pCitCUkxUVFlfREVGSU5FX1NUUklORyhbS0VZX1NVQlRBQkxFX0VYVEVOU0lPTl0sIFsua3RpXSwgW3RoZSBleHRlbnNpb24gZm9yIGtleSBzdWJ0YWJsZXNdKQorQlJMVFRZX0RFRklORV9TVFJJTkcoW0tFWV9IRUxQX0VYVEVOU0lPTl0sIFsudHh0XSwgW3RoZSBleHRlbnNpb24gZm9yIGtleSBoZWxwIGZpbGVzXSkKKworQlJMVFRZX0RFRklORV9TVFJJTkcoW1BST0ZJTEVTX1NVQkRJUkVDVE9SWV0sIFtQcm9maWxlc10sIFt0aGUgc3ViZGlyZWN0b3J5IGZvciBwcm9maWxlc10pCitCUkxUVFlfREVGSU5FX1NUUklORyhbTEFOR1VBR0VfUFJPRklMRV9FWFRFTlNJT05dLCBbLmxwZl0sIFt0aGUgZXh0ZW5zaW9uIGZvciBsYW5ndWFnZSBwcm9maWxlc10pCisKK0JSTFRUWV9BUkdfUkVRVUlSRUQoCisgICBbbWFucGFnZS1kaXJlY3RvcnldLCBbRElSRUNUT1JZXSwKKyAgIFtwYXRoIHRvIGRpcmVjdG9yeSBjb250YWluaW5nIG1hbnVhbCBwYWdlc10sCisgICBbbWFucGFnZV9kaXJlY3RvcnldLCBbIiR7bWFuZGlyfSJdCispCisKK0JSTFRUWV9BUkdfUkVRVUlSRUQoCisgICBbaW5jbHVkZS1kaXJlY3RvcnldLCBbRElSRUNUT1JZXSwKKyAgIFtwYXRoIHRvIGRpcmVjdG9yeSBjb250YWluaW5nIGhlYWRlciBmaWxlc10sCisgICBbaW5jbHVkZV9kaXJlY3RvcnldLCBbIiR7aW5jbHVkZWRpcn0vJHtQQUNLQUdFX1RBUk5BTUV9Il0KKykKKworYnJsdHR5X2RlZmF1bHRfaW5pdF9wYXRoPS9zYmluL2luaXRfcmVhbAorQlJMVFRZX0FSR19XSVRIKAorICAgW2luaXQtcGF0aF0sIFtGSUxFXSwKKyAgIFtwYXRoIHRvIHJlYWwgaW5pdCBwcm9ncmFtXSwKKyAgIFtpbml0X3BhdGhdLCBbIiJdCispCitpZiB0ZXN0ICIke2luaXRfcGF0aH0iID0gIm5vIgordGhlbgorICAgaW5pdF9wYXRoPSIiCitlbGlmIHRlc3QgIiR7aW5pdF9wYXRofSIgPSAieWVzIgordGhlbgorICAgaW5pdF9wYXRoPSIke2JybHR0eV9kZWZhdWx0X2luaXRfcGF0aH0iCitmaQoraWYgdGVzdCAtbiAiJHtpbml0X3BhdGh9IgordGhlbgorICAgQUNfREVGSU5FX1VOUVVPVEVEKFtJTklUX1BBVEhdLCBbIiR7aW5pdF9wYXRofSJdLAorICAgICAgICAgICAgICAgICAgICAgIFtEZWZpbmUgdGhpcyBpZiBCUkxUVFkgaXMgdG8gYmUgcnVuIGFzIGluaXQuXSkKK2ZpCitCUkxUVFlfU1VNTUFSWV9JVEVNKFtpbml0LXBhdGhdLCBbaW5pdF9wYXRoXSkKK0FDX1NVQlNUKFtpbml0X3BhdGhdKQorCitCUkxUVFlfQVJHX1BBUkFNRVRFUlMoW3ByaXZpbGVnZV0sIFtwcml2aWxlZ2UgZXN0YWJsaXNobWVudCBzdGFnZV0sIFtQTEFURk9STTpdLCBbXSkKKworYnJsdHR5X2RlZmF1bHRfc3RkZXJyX3BhdGg9L3RtcC9icmx0dHkubG9nCitCUkxUVFlfQVJHX1dJVEgoCisgICBbc3RkZXJyLXBhdGhdLCBbRklMRV0sCisgICBbcGF0aCB0byBzdGFuZGFyZCBlcnJvciBsb2cgZmlsZV0sCisgICBbc3RkZXJyX3BhdGhdLCBbIiJdCispCitpZiB0ZXN0ICIke3N0ZGVycl9wYXRofSIgPSAibm8iCit0aGVuCisgICBzdGRlcnJfcGF0aD0iIgorZWxpZiB0ZXN0ICIke3N0ZGVycl9wYXRofSIgPSAieWVzIgordGhlbgorICAgc3RkZXJyX3BhdGg9IiR7YnJsdHR5X2RlZmF1bHRfc3RkZXJyX3BhdGh9IgorZmkKK2lmIHRlc3QgLW4gIiR7c3RkZXJyX3BhdGh9IgordGhlbgorICAgQUNfREVGSU5FX1VOUVVPVEVEKFtTVERFUlJfUEFUSF0sIFsiJHtzdGRlcnJfcGF0aH0iXSwKKyAgICAgICAgICAgICAgICAgICAgICBbRGVmaW5lIHRoaXMgaWYgc3RhbmRhcmQgZXJyb3IgaXMgdG8gYmUgcmVkaXJlY3RlZCB0byBhIGZpbGUuXSkKK2ZpCitCUkxUVFlfU1VNTUFSWV9JVEVNKFtzdGRlcnItcGF0aF0sIFtzdGRlcnJfcGF0aF0pCitBQ19TVUJTVChbc3RkZXJyX3BhdGhdKQorCitBQ19QUk9HX01BS0VfU0VUCisKK0FDX1BST0dfQ0MKK0FDX1BST0dfQ1hYCisKK2JybHR0eV9nY2NfY2ZsYWdzPSItc3RkPWdudTk5IC1XYWxsIgorYnJsdHR5X2djY19jcHBmbGFncz0iIgorCitjYXNlICIke2hvc3Rfb3N9IgoraW4KKyAgIGRhcndpbiopCisgICAgICBicmx0dHlfZ2NjX2NmbGFncz0iJHticmx0dHlfZ2NjX2NmbGFnc30gLVduby1pbml0aWFsaXplci1vdmVycmlkZXMgLVduby11bnVzZWQtY29uc3QtdmFyaWFibGUgLVduby1wb2ludGVyLWJvb2wtY29udmVyc2lvbiIKKyAgICAgIDs7CisgICBlbGYqKQorICAgICAgYnJsdHR5X2djY19jcHBmbGFncz0iJHticmx0dHlfZ2NjX2NwcGZsYWdzfSAtZmZyZWVzdGFuZGluZyAtbm9zdGRpbmMgLW5vc3RkbGliIgorICAgICAgQ1BQRkxBR1M9IiR7Q1BQRkxBR1N9IC1ER1JVQl9SVU5USU1FIC1ER1JVQl9GSUxFPV9fRklMRV9fIC1ETkVTVEVEX0ZVTkNfQVRUUj0iCisKKyAgICAgIGJybHR0eV9pbmNsdWRlX2RpcmVjdG9yeT1gJENDIC1wcmludC1maWxlLW5hbWU9aW5jbHVkZWAKKyAgICAgIENQUEZMQUdTPSIke0NQUEZMQUdTfSAtaXN5c3RlbSAkYnJsdHR5X2luY2x1ZGVfZGlyZWN0b3J5IgorCisgICAgICBicmx0dHlfZ3J1Yl9yb290PSJgcHdkYC9ncnViLXJvb3QiCisgICAgICB0ZXN0IC1kICRicmx0dHlfZ3J1Yl9yb290IHx8IHsKKyAgICAgICAgIEFDX01TR19FUlJPUihbc3ltYm9saWMgbGluayBub3QgZm91bmQ6ICRicmx0dHlfZ3J1Yl9yb290XSkKKyAgICAgIH0KKyAgICAgIENQUEZMQUdTPSIke0NQUEZMQUdTfSAtSSRicmx0dHlfZ3J1Yl9yb290IC1JJGJybHR0eV9ncnViX3Jvb3QvZ3J1Yi1jb3JlL2xpYi9wb3NpeF93cmFwL2luY2x1ZGUgLUkkYnJsdHR5X2dydWJfcm9vdC9pbmNsdWRlIgorICAgICAgOzsKK2VzYWMKKwordGVzdCAiJHtHQ0N9IiA9ICJ5ZXMiICYmIHsKKyAgIENGTEFHUz0iJHtDRkxBR1N9ICR7YnJsdHR5X2djY19jZmxhZ3N9IgorICAgQ1BQRkxBR1M9IiR7Q1BQRkxBR1N9ICR7YnJsdHR5X2djY19jcHBmbGFnc30iCisKKyAgIGV4dHJhQ0ZsYWdzPSIiCisgICBmb3IgZmxhZyBpbiB1bmtub3duLXdhcm5pbmctb3B0aW9uCisgICBkbworICAgICAgQVhfQ0hFQ0tfQ09NUElMRV9GTEFHKFstV2Vycm9yPSR7ZmxhZ31dLCBbZG5sCisgICAgICAgICBleHRyYUNGbGFncz0iJHtleHRyYUNGbGFnc30gLVdlcnJvcj0ke2ZsYWd9IgorICAgICAgXSkKKyAgIGRvbmUKKworICAgIyB3YXJuaW5ncyB0aGF0IHNob3VsZCBiZSBlcnJvcnMKKyAgIGZvciBmbGFnIGluICBmb3JtYXQtc2VjdXJpdHkKKyAgIGRvCisgICAgICBBWF9DSEVDS19DT01QSUxFX0ZMQUcoWy1XZXJyb3I9JHtmbGFnfV0sIFtkbmwKKyAgICAgICAgIENGTEFHUz0iJHtDRkxBR1N9IC1XZXJyb3I9JHtmbGFnfSIKKyAgICAgIF0sIFs6XSwgWyR7ZXh0cmFDRmxhZ3N9XSkKKyAgIGRvbmUKKworICAgIyB3YXJuaW5ncyB0aGF0IHNob3VsZCBiZSBzdXBwcmVzc2VkCisgICBmb3IgZmxhZyBpbiBhZGRyZXNzLW9mLXBhY2tlZC1tZW1iZXIgc3RyaW5nb3AtdHJ1bmNhdGlvbiBpbml0aWFsaXplci1vdmVycmlkZXMKKyAgIGRvCisgICAgICBBWF9DSEVDS19DT01QSUxFX0ZMQUcoWy1XZXJyb3I9JHtmbGFnfV0sIFtkbmwKKyAgICAgICAgIENGTEFHUz0iJHtDRkxBR1N9IC1Xbm8tJHtmbGFnfSIKKyAgICAgIF0sIFs6XSwgWyR7ZXh0cmFDRmxhZ3N9XSkKKyAgIGRvbmUKKworICAgQVhfR0NDX1ZBUl9BVFRSSUJVVEUoW3BhY2tlZF0pCisgICBBWF9HQ0NfVkFSX0FUVFJJQlVURShbdW51c2VkXSkKKworICAgQVhfR0NDX0ZVTkNfQVRUUklCVVRFKFtmb3JtYXRdKQorICAgQVhfR0NDX0ZVTkNfQVRUUklCVVRFKFtmb3JtYXRfYXJnXSkKKyAgIEFYX0dDQ19GVU5DX0FUVFJJQlVURShbbm9yZXR1cm5dKQorICAgQVhfR0NDX0ZVTkNfQVRUUklCVVRFKFt1bnVzZWRdKQorfQorCit0ZXN0ICIke0dYWH0iID0gInllcyIgJiYgeworICAgQ1hYRkxBR1M9IiR7Q1hYRkxBR1N9ICR7YnJsdHR5X2djY19jZmxhZ3N9IgorfQorCitjYXNlICIke2hvc3Rfb3N9IgoraW4KKyAgIGxpbnV4KnxnbnUqfGtmcmVlYnNkKikKKyAgICAgIGJybHR0eV9wcm9nX2NjX3N5c2ZsYWdzPSItRF9ERUZBVUxUX1NPVVJDRSAtRF9QT1NJWF9DX1NPVVJDRT0yIC1EX0JTRF9TT1VSQ0UgLURfWE9QRU5fU09VUkNFPTUwMCAtRF9YT1BFTl9TT1VSQ0VfRVhURU5ERUQgLURfR05VX1NPVVJDRSIKKyAgICAgIDs7CisgICBzb2xhcmlzMi4xPyopICMgU29sYXJpcyAxMCAmIDExIHJlcXVpcmUgX1hPUEVOX1NPVVJDRT02MDAgaWYgdXNpbmcgQzk5CisgICAgICBicmx0dHlfcHJvZ19jY19zeXNmbGFncz0iLURfWE9QRU5fU09VUkNFPTYwMCAtRF9fRVhURU5TSU9OU19fIgorICAgICAgOzsKKyAgIHNvbGFyaXMqKQorICAgICAgYnJsdHR5X3Byb2dfY2Nfc3lzZmxhZ3M9Ii1EX1hPUEVOX1NPVVJDRT01MDAgLURfX0VYVEVOU0lPTlNfXyIKKyAgICAgIDs7CisgICBocHV4KikKKyAgICAgIGJybHR0eV9wcm9nX2NjX3N5c2ZsYWdzPSItRF9YT1BFTl9TT1VSQ0VfRVhURU5ERUQgLURfSFBVWF9TT1VSQ0UiCisgICAgICA7OworICAgb3NmKikKKyAgICAgIGJybHR0eV9wcm9nX2NjX3N5c2ZsYWdzPSItRF9YT1BFTl9TT1VSQ0U9NTAwIC1EX1BPU0lYX0NfU09VUkNFIC1EX09TRl9TT1VSQ0UiCisgICAgICA7OworICAgY3lnd2luKikKKyAgICAgIGJybHR0eV9wcm9nX2NjX3N5c2ZsYWdzPSItRF9YT1BFTl9TT1VSQ0VfRVhURU5ERUQgLURfR05VX1NPVVJDRSIKKyAgICAgIDs7CisgICBtaW5ndyopCisgICAgICBicmx0dHlfcHJvZ19jY19zeXNmbGFncz0iLURfWE9QRU5fU09VUkNFX0VYVEVOREVEIC1EX0dOVV9TT1VSQ0UiCisgICAgICA7OworICAgKikKKyAgICAgIGJybHR0eV9wcm9nX2NjX3N5c2ZsYWdzPSIiCisgICAgICA7OworZXNhYworQ1BQRkxBR1M9IiR7Q1BQRkxBR1N9ICR7YnJsdHR5X3Byb2dfY2Nfc3lzZmxhZ3N9IgorCitpZiB0ZXN0ICIke0dDQ30iID0gInllcyIKK3RoZW4KKyAgIGNhc2UgIiR7aG9zdF9vc30iCisgICBpbgorICAgICAgY3lnd2luKnxtaW5ndyopCisgICAgICAgICBMSUJDRkxBR1M9IiIKKyAgICAgICAgIDs7CisgICAgICBtc2RvcyopCisgICAgICAgICBMSUJDRkxBR1M9IiIKKyAgICAgICAgIDs7CisgICAgICBkYXJ3aW4qKQorICAgICAgICAgTElCQ0ZMQUdTPSIiCisgICAgICAgICA7OworICAgICAgKikKKyAgICAgICAgIExJQkNGTEFHUz0iLWZQSUMiCisgICAgICAgICA7OworICAgZXNhYworZWxzZQorICAgY2FzZSAiJHtob3N0X29zfSIKKyAgIGluCisgICAgICAqKQorICAgICAgICAgTElCQ0ZMQUdTPSIiCisgICAgICAgICBBQ19NU0dfV0FSTihbbGlicmFyeSBmbGFncyBub3QgY29uZmlndXJlZCBmb3IgJHtob3N0X29zfV0pCisgICAgICAgICA7OworICAgZXNhYworZmkKK0FDX1NVQlNUKFtMSUJDRkxBR1NdKQorCitpZiB0ZXN0ICIkR1hYIiA9ICJ5ZXMiCit0aGVuCisgICBMSUJDWFhGTEFHUz0iLWZQSUMiCitlbHNlCisgICBjYXNlICIke2hvc3Rfb3N9IgorICAgaW4KKyAgICAgICopCisgICAgICAgICBMSUJDWFhGTEFHUz0iIgorICAgICAgICAgOzsKKyAgIGVzYWMKK2ZpCitBQ19TVUJTVChbTElCQ1hYRkxBR1NdKQorCitBQ19DSEVDS19UT09MKFtMRF0sIFtsZF0pCitBQ19DSEVDS19UT09MKFtTVFJJUF0sIFtzdHJpcF0pCitBQ19DSEVDS19UT09MKFtSQU5MSUJdLCBbcmFubGliXSkKKworQUNfUFJPR19BV0sKK0FDX1BST0dfTE5fUworCittNF9pZmRlZihbUEtHX1BST0dfUEtHX0NPTkZJR10sIFtkbmwKKyAgIFBLR19QUk9HX1BLR19DT05GSUcKK10sIFtkbmwKKyAgIEFDX1BBVEhfUFJPRyhbUEtHX0NPTkZJR10sIFtwa2ctY29uZmlnXSkKK10pCisKK2lmIHRlc3QgLXogIiR7UEtHX0NPTkZJR30iCit0aGVuCisgICBQS0dfQ09ORklHPWZhbHNlCitmaQorCitBQ19QQVRIX1BST0coW01TR01FUkdFXSwgW21zZ21lcmdlXSwgW2ZhbHNlXSkKK0FDX1BBVEhfUFJPRyhbTVNHRk1UXSwgW21zZ2ZtdF0sIFtmYWxzZV0pCisKK0FDX1BBVEhfUFJPRyhbTElOVVhET0NdLCBbbGludXhkb2NdLCBbZmFsc2VdKQorQUNfUEFUSF9QUk9HKFtET1hZR0VOXSwgW2RveHlnZW5dLCBbZmFsc2VdKQorCitjYXNlICIke2hvc3Rfb3N9IgoraW4KKyAgIGN5Z3dpbiogICkgTERGTEFHU19EWU5BTUlDPSItLWV4cG9ydC1hbGwtc3ltYm9scyAtLWVuYWJsZS1hdXRvLWltcG9ydCI7OworICAgZGFyd2luKiAgKSBMREZMQUdTX0RZTkFNSUM9IiI7OworICAgZWxmKiAgICAgKSBMREZMQUdTX0RZTkFNSUM9IiI7OworICAgZnJlZWJzZCogKSBMREZMQUdTX0RZTkFNSUM9Ii1leHBvcnQtZHluYW1pYyI7OworICAgZ251KiAgICAgKSBMREZMQUdTX0RZTkFNSUM9Ii1leHBvcnQtZHluYW1pYyI7OworICAgaGFpa3UqICAgKSBMREZMQUdTX0RZTkFNSUM9Ii1leHBvcnQtZHluYW1pYyI7OworICAgaHB1eCogICAgKSBMREZMQUdTX0RZTkFNSUM9Ii1FICtzIjs7CisgICBrZnJlZWJzZCopIExERkxBR1NfRFlOQU1JQz0iLWV4cG9ydC1keW5hbWljIjs7CisgICBsaW51eCogICApIExERkxBR1NfRFlOQU1JQz0iLWV4cG9ydC1keW5hbWljIjs7CisgICBtaW5ndyogICApIExERkxBR1NfRFlOQU1JQz0iLS1leHBvcnQtYWxsLXN5bWJvbHMgLS1lbmFibGUtYXV0by1pbXBvcnQiOzsKKyAgIG1zZG9zKiAgICkgTERGTEFHU19EWU5BTUlDPSIiOzsKKyAgIG5ldGJzZCogICkgTERGTEFHU19EWU5BTUlDPSItZXhwb3J0LWR5bmFtaWMiOzsKKyAgIG9wZW5ic2QqICkgTERGTEFHU19EWU5BTUlDPSItZXhwb3J0LWR5bmFtaWMiOzsKKyAgIG9zZiogICAgICkgTERGTEFHU19EWU5BTUlDPSIiOzsKKyAgICpxbngqICAgICkgTERGTEFHU19EWU5BTUlDPSItZXhwb3J0LWR5bmFtaWMiOzsKKyAgIHNvbGFyaXMqICkgTERGTEFHU19EWU5BTUlDPSIiOzsKKyAgICopIEFDX01TR19FUlJPUihbZHluYW1pYyBsaW5rYWdlIG5vdCBzdXBwb3J0ZWQgZm9yICR7aG9zdF9vc31dKTs7Citlc2FjCitMREZMQUdTX0RZTkFNSUM9IkJSTFRUWV9PUFRJT05TX0xEMkNDKFske0xERkxBR1NfRFlOQU1JQ31dKSIKKworaWYgdGVzdCAiJHtHQ0N9IiA9ICJ5ZXMiCit0aGVuCisgICBMREZMQUdTX1NUQVRJQz0iLXN0YXRpYyIKK2Vsc2UKKyAgIGNhc2UgIiR7aG9zdF9vc30iCisgICBpbgorICAgICAgY3lnd2luKiAgKSBMREZMQUdTX1NUQVRJQz0iLXN0YXRpYyI7OworICAgICAgZWxmKiAgICAgKSBMREZMQUdTX1NUQVRJQz0iLXN0YXRpYyI7OworICAgICAgZnJlZWJzZCogKSBMREZMQUdTX1NUQVRJQz0iLXN0YXRpYyI7OworICAgICAgZ251KiAgICAgKSBMREZMQUdTX1NUQVRJQz0iLXN0YXRpYyI7OworICAgICAgaHB1eCogICAgKSBMREZMQUdTX1NUQVRJQz0iLUJzdGF0aWMiOzsKKyAgICAgIGtmcmVlYnNkKikgTERGTEFHU19TVEFUSUM9Ii1zdGF0aWMiOzsKKyAgICAgIGxpbnV4KiAgICkgTERGTEFHU19TVEFUSUM9Ii1zdGF0aWMiOzsKKyAgICAgIG1pbmd3KiAgICkgTERGTEFHU19TVEFUSUM9Ii1zdGF0aWMiOzsKKyAgICAgIG5ldGJzZCogICkgTERGTEFHU19TVEFUSUM9Ii1Cc3RhdGljIjs7CisgICAgICBvcGVuYnNkKiApIExERkxBR1NfU1RBVElDPSItc3RhdGljIjs7CisgICAgICBvc2YqICAgICApIExERkxBR1NfU1RBVElDPSItbm9uX3NoYXJlZCI7OworICAgICAgKnFueCogICAgKSBMREZMQUdTX1NUQVRJQz0iLXN0YXRpYyI7OworICAgICAgc29sYXJpcyogKSBMREZMQUdTX1NUQVRJQz0iLWRuIjs7CisgICAgICAqKSBBQ19NU0dfRVJST1IoW3N0YXRpYyBsaW5rYWdlIG5vdCBzdXBwb3J0ZWQgZm9yICR7aG9zdF9vc31dKTs7CisgICBlc2FjCisgICBMREZMQUdTX1NUQVRJQz0iQlJMVFRZX09QVElPTlNfTEQyQ0MoWyR7TERGTEFHU19TVEFUSUN9XSkiCitmaQorCitwa2djb25maWdfZmxhZ3NfbGlicz0iLS1saWJzIgorCitCUkxUVFlfQVJHX0VOQUJMRSgKKyAgIFtzdGFuZGFsb25lLXByb2dyYW1zXSwKKyAgIFtzdGF0aWNhbGx5IGxpbmtlZCBleGVjdXRhYmxlc10sCisgICBbXSwKK1tkbmwKKyAgIExERkxBR1M9IiR7TERGTEFHU30gJHtMREZMQUdTX1NUQVRJQ30iCisgICBicmx0dHlfc3RhbmRhbG9uZV9wcm9ncmFtcz0ieWVzIgorICAgcGtnY29uZmlnX2ZsYWdzX2xpYnM9IiR7cGtnY29uZmlnX2ZsYWdzX2xpYnN9IC0tc3RhdGljIgorXSwgW2RubAorICAgTERGTEFHUz0iJHtMREZMQUdTfSAke0xERkxBR1NfRFlOQU1JQ30iCisKKyAgIEFDX0RFRklORShbRU5BQkxFX1NIQVJFRF9PQkpFQ1RTXSwgWzFdLAorICAgICAgICAgICAgIFtEZWZpbmUgdGhpcyBpZiBzaGFyZWQgb2JqZWN0IHN1cHBvcnQgaXMgdG8gYmUgaW5jbHVkZWQuXSkKK10pCisKK0FDX1BST0dfSU5TVEFMTAorQlJMVFRZX0VYRUNVVEFCTEVfUEFUSChbSU5TVEFMTF0pCisKK3Rlc3QgIiR7TElOVVhET0N9IiA9ICJmYWxzZSIgJiYgY2FuX21ha2VfbWFudWFsPW5vIHx8IGNhbl9tYWtlX21hbnVhbD15ZXMKK0FDX1NVQlNUKFtjYW5fbWFrZV9tYW51YWxdKQorCit0ZXN0ICIke0RPWFlHRU59IiA9ICJmYWxzZSIgJiYgY2FuX21ha2VfQnJsQVBJcmVmPW5vIHx8IGNhbl9tYWtlX0JybEFQSXJlZj15ZXMKK0FDX1NVQlNUKFtjYW5fbWFrZV9CcmxBUElyZWZdKQorCitBQ19DQUNIRV9DSEVDSyhbZm9yIHNoYXJlZCBvYmplY3QgY3JlYXRpb24gY29tbWFuZF0sIFticmx0dHlfY3ZfcHJvZ19tYWtlX29iamVjdF9zaGFyZWRdLCBbZG5sCisgICBjYXNlICIke2hvc3Rfb3N9IgorICAgaW4KKyAgICAgIGxpbnV4KnxnbnUqfG9wZW5ic2QqfGZyZWVic2QqfGtmcmVlYnNkKnxuZXRic2QqfCpxbngqfGN5Z3dpbip8bWluZ3cqfG1zZG9zKnxlbGYqfGhhaWt1KikKKyAgICAgICAgIGJybHR0eV9ta3Nocl9sZF9tYWtlPSItc2hhcmVkIgorICAgICAgICAgOzsKKyAgICAgIHNvbGFyaXMqKQorICAgICAgICAgYnJsdHR5X21rc2hyX2xkX21ha2U9Ii1HIgorICAgICAgICAgOzsKKyAgICAgIGhwdXgqKQorICAgICAgICAgYnJsdHR5X21rc2hyX2xkX21ha2U9Ii1iIgorICAgICAgICAgOzsKKyAgICAgIG9zZiopCisgICAgICAgICBicmx0dHlfbWtzaHJfbGRfbWFrZT0iLXNoYXJlZCIKKyAgICAgICAgIDs7CisgICAgICBkYXJ3aW4qKQorICAgICAgICAgYnJsdHR5X21rc2hyX2xkX21ha2U9Ii1idW5kbGUiCisgICAgICAgICBicmx0dHlfbWtzaHJfbGRfb3B0aW9ucz0iLWZsYXRfbmFtZXNwYWNlIC11bmRlZmluZWQgc3VwcHJlc3MiCisgICAgICAgICBicmx0dHlfbWtzaHJfZ2NjX21ha2U9Ii1idW5kbGUiCisgICAgICAgICA7OworICAgICAgKikKKyAgICAgICAgIEFDX01TR19FUlJPUihbbG9hZGFibGUgbW9kdWxlIGNyZWF0aW9uIGNvbW1hbmQgbm90IGNvbmZpZ3VyZWQgZm9yICR7aG9zdF9vc31dKQorICAgICAgICAgYnJsdHR5X21rc2hyX2xkX21ha2U9Ik5PVF9TVVBQT1JURUQiCisgICAgICAgICBicmx0dHlfbWtzaHJfbGRfb3B0aW9ucz0iTk9UX1NVUFBPUlRFRCIKKyAgICAgICAgIGJybHR0eV9ta3Nocl9nY2NfbWFrZT0iTk9UX1NVUFBPUlRFRCIKKyAgICAgICAgIDs7CisgICBlc2FjCisKKyAgIGlmIHRlc3QgIiR7R0NDfSIgPSAieWVzIgorICAgdGhlbgorICAgICAgYnJsdHR5X2N2X3Byb2dfbWFrZV9vYmplY3Rfc2hhcmVkPSJcJChDQykgJHticmx0dHlfbWtzaHJfZ2NjX21ha2U9LXNoYXJlZH0gQlJMVFRZX09QVElPTlNfTEQyQ0MoWyR7YnJsdHR5X21rc2hyX2xkX29wdGlvbnN9XSkiCisgICBlbHNlCisgICAgICBicmx0dHlfY3ZfcHJvZ19tYWtlX29iamVjdF9zaGFyZWQ9IlwkKExEKSAke2JybHR0eV9ta3Nocl9sZF9tYWtlfSAke2JybHR0eV9ta3Nocl9sZF9vcHRpb25zfSIKKyAgIGZpCisKKyAgIGJybHR0eV9jdl9wcm9nX21ha2Vfb2JqZWN0X3NoYXJlZD0iJHticmx0dHlfY3ZfcHJvZ19tYWtlX29iamVjdF9zaGFyZWR9ICR7TERGTEFHU30gLW8iCitdKQorQUNfU1VCU1QoW01LU0hSXSwgWyIke2JybHR0eV9jdl9wcm9nX21ha2Vfb2JqZWN0X3NoYXJlZH0iXSkKKworQUNfQ0FDSEVfQ0hFQ0soW2ZvciBtYWtlIHJlbG9jYXRhYmxlIG9iamVjdCBjb21tYW5kXSwgW2JybHR0eV9jdl9wcm9nX21ha2Vfb2JqZWN0X3JlbG9jYXRhYmxlXSwgW2RubAorY2FzZSAiJHtob3N0X29zfSIKK2luCisgICAqKQorICAgICAgYnJsdHR5X2N2X3Byb2dfbWFrZV9vYmplY3RfcmVsb2NhdGFibGU9IlwkKExEKSAtciAtbyIKKyAgICAgIDs7Citlc2FjXSkKK01LUkVMPSIke2JybHR0eV9jdl9wcm9nX21ha2Vfb2JqZWN0X3JlbG9jYXRhYmxlfSIKK0FDX1NVQlNUKFtNS1JFTF0pCisKK0FDX0NBQ0hFX0NIRUNLKFtmb3IgZHluYW1pYyBsaWJyYXJ5IGNyZWF0aW9uIGNvbW1hbmRdLCBbYnJsdHR5X2N2X3Byb2dfbWtsaWJdLCBbZG5sCitjYXNlICIke2hvc3Rfb3N9IgoraW4KKyAgIGxpbnV4KnxnbnUqfG9wZW5ic2QqfGZyZWVic2QqfGtmcmVlYnNkKnxuZXRic2QqfCpxbngqfGVsZip8aGFpa3UqKQorICAgICAgYnJsdHR5X21rbGliX2xkX21ha2U9Ii1zaGFyZWQiCisgICAgICBicmx0dHlfbWtsaWJfbGRfb3B0aW9ucz0iLXNvbmFtZSIKKyAgICAgIDs7CisgICBzb2xhcmlzKikKKyAgICAgIGJybHR0eV9ta2xpYl9sZF9tYWtlPSItRyIKKyAgICAgIGJybHR0eV9ta2xpYl9sZF9vcHRpb25zPSItaCIKKyAgICAgIDs7CisgICBocHV4KikKKyAgICAgIGJybHR0eV9ta2xpYl9sZF9tYWtlPSItYiIKKyAgICAgIGJybHR0eV9ta2xpYl9sZF9vcHRpb25zPSIraCIKKyAgICAgIDs7CisgICBvc2YqKQorICAgICAgYnJsdHR5X21rbGliX2xkX21ha2U9Ii1zaGFyZWQiCisgICAgICBicmx0dHlfbWtsaWJfbGRfb3B0aW9ucz0iLWV4cGVjdF91bnJlc29sdmVkICcqJyAtc29uYW1lIgorICAgICAgOzsKKyAgIGN5Z3dpbip8bWluZ3cqKQorICAgICAgYnJsdHR5X21rbGliX2xkX21ha2U9Ii1zaGFyZWQiCisgICAgICBicmx0dHlfbWtsaWJfbGRfb3B0aW9ucz0iLS1vdXQtaW1wbGliIGltcGxpYi5hIC0tb3V0cHV0LWRlZiBsaWIuZGVmIC1zb25hbWUiCisgICAgICA7OworICAgbXNkb3MqKQorICAgICAgYnJsdHR5X21rbGliX2xkX21ha2U9Im5vdF9zdXBwb3J0ZWRfb25fbXNkb3MiCisgICAgICBicmx0dHlfbWtsaWJfbGRfb3B0aW9ucz0ibm90X3N1cHBvcnRlZF9vbl9tc2RvcyIKKyAgICAgIGJybHR0eV9ta2xpYl9nY2NfbWFrZT0ibm90X3N1cHBvcnRlZF9vbl9tc2RvcyIKKyAgICAgIDs7CisgICBkYXJ3aW4qKQorICAgICAgZHlsaWJGb3VuZD1mYWxzZQorICAgICAgZHlsaWJQYXRoPS91c3IvbGliL2R5bGliMS5vCisgICAgICBzZXQgLS0gIiR7ZHlsaWJQYXRofSIKKworICAgICAgc2RrUm9vdFByZWZpeD0iL0FwcGxpY2F0aW9ucy9YY29kZS5hcHAvQ29udGVudHMvRGV2ZWxvcGVyL1BsYXRmb3Jtcy9NYWNPU1gucGxhdGZvcm0vRGV2ZWxvcGVyL1NES3MvTWFjT1NYIgorICAgICAgc2RrUm9vdFN1ZmZpeD0iLnNkay8ke2R5bGliUGF0aH0iCisgICAgICBzZGtWZXJzaW9uPWBzd192ZXJzIC1wcm9kdWN0VmVyc2lvbmAKKworICAgICAgd2hpbGUgdHJ1ZQorICAgICAgZG8KKyAgICAgICAgIHNldCAtLSAiJHtAfSIgIiR7c2RrUm9vdFByZWZpeH0ke3Nka1ZlcnNpb259JHtzZGtSb290U3VmZml4fSIKKyAgICAgICAgIHNka05leHQ9IiR7c2RrVmVyc2lvbiUuKn0iCisgICAgICAgICB0ZXN0ICIke3Nka05leHR9IiAhPSAiJHtzZGtWZXJzaW9ufSIgfHwgYnJlYWsKKyAgICAgICAgIHNka1ZlcnNpb249IiR7c2RrTmV4dH0iCisgICAgICBkb25lCisKKyAgICAgIHNldCAtLSAiJHtAfSIgIiR7c2RrUm9vdFByZWZpeH0iKiIke3Nka1Jvb3RTdWZmaXh9IgorICAgICAgZm9yIHNka1BhdGgKKyAgICAgIGRvCisgICAgICAgICB0ZXN0ICEgLWYgIiR7c2RrUGF0aH0iIHx8IHsKKyAgICAgICAgICAgIGR5bGliUGF0aD0iJHtzZGtQYXRofSIKKyAgICAgICAgICAgIGR5bGliRm91bmQ9dHJ1ZQorICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgIH0KKyAgICAgIGRvbmUKKyAgICAgICIke2R5bGliRm91bmR9IiB8fCBBQ19NU0dfV0FSTihbY2Fubm90IGZpbmQgJHtkeWxpYlBhdGh9XSkKKworICAgICAgYnJsdHR5X21rbGliX2xkX21ha2U9Ii1keWxpYiIKKyAgICAgIGJybHR0eV9ta2xpYl9sZF9vcHRpb25zPSIke2R5bGliUGF0aH0gLXNpbmdsZV9tb2R1bGUgLWluc3RhbGxfbmFtZSIKKyAgICAgIGJybHR0eV9ta2xpYl9nY2NfbWFrZT0iLWR5bmFtaWNsaWIiCisgICAgICA7OworICAgKikKKyAgICAgIEFDX01TR19FUlJPUihbZHluYW1pYyBsaWJyYXJ5IGNyZWF0aW9uIGNvbW1hbmQgbm90IGNvbmZpZ3VyZWQgZm9yICR7aG9zdF9vc31dKQorICAgICAgOzsKK2VzYWMKK2lmIHRlc3QgIiR7R0NDfSIgPSAieWVzIgordGhlbgorICAgYnJsdHR5X2N2X3Byb2dfbWtsaWI9IlwkKENDKSBcJChMREZMQUdTKSAke2JybHR0eV9ta2xpYl9nY2NfbWFrZT0tc2hhcmVkfSBCUkxUVFlfT1BUSU9OU19MRDJDQyhbJHticmx0dHlfbWtsaWJfbGRfb3B0aW9ucyske2JybHR0eV9ta2xpYl9sZF9vcHRpb25zfSA8bmFtZT59XSkgLW8iCitlbHNlCisgICBicmx0dHlfY3ZfcHJvZ19ta2xpYj0iXCQoTEQpIFwkKExERkxBR1MpICR7YnJsdHR5X21rbGliX2xkX21ha2V9ICR7YnJsdHR5X21rbGliX2xkX29wdGlvbnMrJHticmx0dHlfbWtsaWJfbGRfb3B0aW9uc30gPG5hbWU+fSAtbyIKK2ZpXSkKK0FDX1NVQlNUKFtNS0xJQl0sIFsiJHticmx0dHlfY3ZfcHJvZ19ta2xpYn0iXSkKKworQUNfQ0FDSEVfQ0hFQ0soW2ZvciBjb25maWd1cmUgc2hhcmVkIG9iamVjdCBkaXJlY3RvcnkgY29tbWFuZF0sIFticmx0dHlfY3ZfcHJvZ19jb25mbGliZGlyXSwgW2RubAorY2FzZSAiJHtob3N0X29zfSIKK2luCisgICBsaW51eCp8Z251KnxrZnJlZWJzZCp8ZWxmKikKKyAgICAgIGJybHR0eV9jdl9wcm9nX2NvbmZsaWJkaXI9Ii9zYmluL2xkY29uZmlnIC1uIgorICAgICAgOzsKKyAgICopCisgICAgICBicmx0dHlfY3ZfcHJvZ19jb25mbGliZGlyPSI6IgorICAgICAgOzsKK2VzYWNdKQorQUNfU1VCU1QoW0NPTkZMSUJESVJdLCBbIiR7YnJsdHR5X2N2X3Byb2dfY29uZmxpYmRpcn0iXSkKKworY2FzZSAiJHtob3N0X29zfSIKK2luCisgICBtaW5ndyopCisgICAgICBCUkxUVFlfSEFWRV9XSU5ET1dTX0xJQlJBUlkoW3dzMl8zMl0pCisgICAgICBCUkxUVFlfSEFWRV9XSU5ET1dTX0xJQlJBUlkoW2dkaTMyXSkKKyAgICAgIEJSTFRUWV9IQVZFX1dJTkRPV1NfTElCUkFSWShbd2lubW1dKQorICAgICAgOzsKKyAgIGN5Z3dpbiopCisgICAgICBCUkxUVFlfSEFWRV9XSU5ET1dTX0xJQlJBUlkoW2dkaTMyXSkKKyAgICAgIDs7CisgICAqKQorICAgICAgQUNfU0VBUkNIX0xJQlMoW3NvY2tldF0sIFtzb2NrZXQgbmV0d29ya10pCisgICAgICBBQ19TRUFSQ0hfTElCUyhbaW5ldF9udG9hXSwgW25zbF0pCisgICAgICA7OworZXNhYworCitpbnN0YWxsX21lc3NhZ2VzPQorQlJMVFRZX0FSR19ESVNBQkxFKAorICAgW2kxOG5dLAorICAgW3N1cHBvcnQgZm9yIGludGVybmF0aW9uYWxpemF0aW9uXSwKKyAgIFtdLAorW2RubAorICAgdGVzdCAiJHtNU0dNRVJHRX0iID0gImZhbHNlIiB8fCB7CisgICAgICBpbnN0YWxsX21lc3NhZ2VzPWluc3RhbGwtbWVzc2FnZXMKKworICAgICAgQUNfQ0hFQ0tfSEVBREVSKFtsaWJpbnRsLmhdLCBbZG5sCisgICAgICAgICBCUkxUVFlfSEFWRV9MSUJSQVJZKFtpbnRsXSkKKyAgICAgICAgIEFDX0RFRklORShbRU5BQkxFX0kxOE5fU1VQUE9SVF0sIFsxXSwKKyAgICAgICAgICAgICAgICAgICBbRGVmaW5lIHRoaXMgaWYgaW50ZXJuYXRpb25hbGl6YXRpb24gc3VwcG9ydCBpcyB0byBiZSBpbmNsdWRlZC5dKQorICAgICAgXSkKKyAgIH0KK10pCitBQ19TVUJTVChbaW5zdGFsbF9tZXNzYWdlc10pCisKK0FDX0NIRUNLX0ZVTkMoW3djc2xlbl0sIFtBQ19DSEVDS19IRUFERVJTKFt3Y2hhci5oXSwgW2RubAorICAgQUNfQ0hFQ0tfRlVOQ1MoW3djd2lkdGhdKQorXSldKQorCitBQ19DSEVDS19IRUFERVJTKFtnbG9iLmhdLCBbZG5sCisgICBBQ19DSEVDS19GVU5DUyhbZ2xvYl0pCitdKQorCitBQ19DSEVDS19IRUFERVJTKFtsYW5naW5mby5oXSwgW2RubAorICAgQUNfQ0hFQ0tfRlVOQ1MoW25sX2xhbmdpbmZvXSkKK10pCisKK2ljdV9pbmNsdWRlcz0iIgoraWN1X2xpYnM9IiIKK0JSTFRUWV9BUkdfRElTQUJMRSgKKyAgIFtpY3VdLAorICAgW3N1cHBvcnQgZm9yIFVuaWNvZGUtYmFzZWQgaW50ZXJuYXRpb25hbGl6YXRpb25dLAorICAgW10sCitbZG5sCisgICBCUkxUVFlfSEFWRV9QQUNLQUdFKFtpY3VdLCBbaWN1LXVjXSwgW2RubAorICAgICAgQUNfQ0hFQ0tfSEVBREVSUyhbdW5pY29kZS91bm9ybTIuaF0pCisgICAgICBBQ19ERUZJTkVfVU5RVU9URUQoW0hBVkVfSUNVXSwgWzFdLAorICAgICAgICAgICAgICAgICAgICAgICAgIFtEZWZpbmUgdGhpcyBpZiBVbmljb2RlLWJhc2VkIGludGVybmF0aW9uYWxpemF0aW9uIHN1cHBvcnQgaXMgdG8gYmUgaW5jbHVkZWQuXSkKKworICAgICAgaWYgdGVzdCAiJHticmx0dHlfc3RhbmRhbG9uZV9wcm9ncmFtc30iID0gInllcyIKKyAgICAgIHRoZW4KKyAgICAgICAgIGljdV9saWJzPSJgZWNobyAke2ljdV9saWJzfSB8IHNlZCAtZSAncy9cKC1sXClcKGljdVwpL1wxc1wyL2cnYCIKKyAgICAgIGZpCisgICBdKQorXSkKK0FDX1NVQlNUKFtpY3VfaW5jbHVkZXNdKQorQUNfU1VCU1QoW2ljdV9saWJzXSkKKworQlJMVFRZX0FSR19ESVNBQkxFKAorICAgW2ljb252XSwKKyAgIFtzdXBwb3J0IGZvciBjaGFyYWN0ZXIgZW5jb2RpbmcgY29udmVyc2lvbl0sCisgICBbXSwKK1tkbmwKKyAgIEFDX0NIRUNLX0hFQURFUlMoW2ljb252LmhdLCBbCisgICAgICBCUkxUVFlfSEFWRV9MSUJSQVJZKFtpY29udl0pCisgICBdKQorXSkKKworQlJMVFRZX0FSR19ESVNBQkxFKAorICAgW3BvbGtpdF0sCisgICBbc3VwcG9ydCBmb3IgdGhlIFBvbGtpdCBhdXRob3JpemF0aW9uIG1hbmFnZXJdLAorICAgW10sCitbZG5sCisgICBCUkxUVFlfSEFWRV9QQUNLQUdFKFtwb2xraXRdLCBbcG9sa2l0LWdvYmplY3QtMV0sIFtkbmwKKyAgICAgIEFDX0RFRklORShIQVZFX1BPTEtJVCwgMSwgW2lmIHRoZSBQb2xraXQgYXV0aG9yaXphdGlvbiBtYW5hZ2VyIHNob3VsZCBiZSB1c2VkXSkKKyAgIF0pCitdKQorCitCUkxUVFlfQVJHX0RJU0FCTEUoCisgICBbYXBpXSwKKyAgIFt0aGUgYXBwbGljYXRpb24gcHJvZ3JhbW1pbmcgaW50ZXJmYWNlXSwKKyAgIFtdLAorW2RubAorICAgQlJMVFRZX0lGX1BUSFJFQURTKFtkbmwKKyAgICAgIEFDX0RFRklORShbRU5BQkxFX0FQSV0sIFsxXSwKKyAgICAgICAgICAgICAgICBbRGVmaW5lIHRoaXMgaWYgdGhlIGFwcGxpY2F0aW9uIHByb2dyYW1taW5nIGludGVyZmFjZSBpcyB0byBiZSBpbmNsdWRlZC5dKQorICAgICAgQlJMVFRZX0FSR19QQVJBTUVURVJTKFthcGldLCBbYXBwbGljYXRpb24gcHJvZ3JhbW1pbmcgaW50ZXJmYWNlXSkKKworICAgICAgYXBpX3NlcnZlcl9vYmplY3RzPSdicmxhcGlfc2VydmVyLiRPIGJybGFwaV9rZXlyYW5nZXMuJE8gYXV0aC4kTycKKyAgICAgIGFwaV9saWJyYXJpZXM9IiR7TElCU30iCisKKyAgICAgIGFsbF9hcGk9ImFsbC1hcGkiCisgICAgICBidWlsZF9hcGk9ImFwaSIKKyAgICAgIGluc3RhbGxfYXBpPSJpbnN0YWxsLWFwaSIKKyAgICAgIGFwaV9yZWY9JyQoQVBJX0xJQlMpJworCisgICAgICBhcGlfZHluYW1pY19saWJyYXJ5PSJhcGktZHluYW1pYy1saWJyYXJ5IgorICAgICAgaW5zdGFsbF9hcGlfbGlicmFyaWVzPSJpbnN0YWxsLWFwaS1saWJyYXJpZXMiCisgICAgICB1bmluc3RhbGxfYXBpX2xpYnJhcmllcz0idW5pbnN0YWxsLWFwaS1saWJyYXJpZXMiCisgICAgICBkZWZhdWx0X2FwaV9zb2NrZXRfcGF0aD0iJHtsb2NhbHN0YXRlZGlyfS9saWIvQnJsQVBJIgorCisgICAgICBjYXNlICIke2hvc3Rfb3N9IgorICAgICAgaW4KKyAgICAgICAgIGN5Z3dpbip8bWluZ3cqKQorICAgICAgICAgICAgQUNfREVGSU5FKFtCUkxBUElfV0lOMzJdLCBbMV0sCisgICAgICAgICAgICAgICAgICAgICAgW0RlZmluZSB0aGlzIGlmIHRoZSBXaW4zMiBwcm9ncmFtbWluZyBpbnRlcmZhY2UgaXMgYXZhaWxhYmxlLl0pCisgICAgICAgICAgICBkZWZhdWx0X2FwaV9zb2NrZXRfcGF0aD0nXFxcXC5cXHBpcGVcXEJybEFQSScKKyAgICAgICAgICAgIGFwaV9keW5hbWljX2xpYnJhcnk9ImFwaS1keW5hbWljLWxpYnJhcnktd2luZG93cyIKKyAgICAgICAgICAgIGluc3RhbGxfYXBpX2xpYnJhcmllcz0iaW5zdGFsbC1hcGktbGlicmFyaWVzLXdpbmRvd3MiCisgICAgICAgICAgICB1bmluc3RhbGxfYXBpX2xpYnJhcmllcz0idW5pbnN0YWxsLWFwaS1saWJyYXJpZXMtd2luZG93cyIKKyAgICAgICAgICAgIDs7CisgICAgICBlc2FjCisKKyAgICAgIEJSTFRUWV9BUkdfV0lUSCgKKyAgICAgICAgICBbYXBpLXNvY2tldC1wYXRoXSwgW1BBVEhdLAorICAgICAgICAgIFt3aGVyZSBsb2NhbCBzb2NrZXRzIGZvciB0ZWggYXBpIGFyZSBzdG9yZWRdLAorICAgICAgICAgIFthcGlfc29ja2V0X3BhdGhdLCBbIiR7ZGVmYXVsdF9hcGlfc29ja2V0X3BhdGh9Il0KKyAgICAgICkKKworICAgICAgQlJMVFRZX0JJTkRJTkdTKFtFbWFjc10pCisgICAgICBCUkxUVFlfQklORElOR1MoW0phdmFdKQorICAgICAgQlJMVFRZX0JJTkRJTkdTKFtMaXNwXSkKKyAgICAgIEJSTFRUWV9CSU5ESU5HUyhbTHVhXSkKKyAgICAgIEJSTFRUWV9CSU5ESU5HUyhbT0NhbWxdKQorICAgICAgQlJMVFRZX0JJTkRJTkdTKFtQeXRob25dKQorICAgICAgQlJMVFRZX0JJTkRJTkdTKFtUY2xdKQorCisgICAgICB0ZXN0IC1uICIke2FwaV9iaW5kaW5nc30iICYmIHsKKyAgICAgICAgIGZvciBicmx0dHlfYmluZGluZ3NfZGlyZWN0b3J5IGluICR7YXBpX2JpbmRpbmdzfQorICAgICAgICAgZG8KKyAgICAgICAgICAgIGJybHR0eV9idWlsZF9kaXJlY3Rvcmllcz0iJHticmx0dHlfYnVpbGRfZGlyZWN0b3JpZXN9IEJpbmRpbmdzLyR7YnJsdHR5X2JpbmRpbmdzX2RpcmVjdG9yeX0iCisgICAgICAgICBkb25lCisKKyAgICAgICAgIGFsbF9hcGlfYmluZGluZ3M9ImFsbC1hcGktYmluZGluZ3MiCisgICAgICAgICBpbnN0YWxsX2FwaV9iaW5kaW5ncz0iaW5zdGFsbC1hcGktYmluZGluZ3MiCisgICAgICB9CisgICBdKQorXSkKK0FDX1NVQlNUKFthcGlfc2VydmVyX29iamVjdHNdKQorQUNfU1VCU1QoW2FwaV9saWJyYXJpZXNdKQorQUNfU1VCU1QoW2FwaV9iaW5kaW5nc10pCitBQ19TVUJTVChbYWxsX2FwaV9iaW5kaW5nc10pCitBQ19TVUJTVChbaW5zdGFsbF9hcGlfYmluZGluZ3NdKQorQUNfU1VCU1QoW2FsbF9hcGldKQorQUNfU1VCU1QoW2J1aWxkX2FwaV0pCitBQ19TVUJTVChbaW5zdGFsbF9hcGldKQorQUNfU1VCU1QoW2FwaV9yZWZdKQorQUNfU1VCU1QoW2FwaV9keW5hbWljX2xpYnJhcnldKQorQUNfU1VCU1QoW2luc3RhbGxfYXBpX2xpYnJhcmllc10pCitBQ19TVUJTVChbdW5pbnN0YWxsX2FwaV9saWJyYXJpZXNdKQorQUNfU1VCU1QoW2FwaV9hdXRoa2V5ZmlsZV0sIFticmxhcGkua2V5XSkKK0FDX1NVQlNUKFthcGlfc29ja2V0X3BhdGhdKQorQlJMVFRZX1NVTU1BUllfSVRFTShbYXBpLXNvY2tldC1wYXRoXSwgW2FwaV9zb2NrZXRfcGF0aF0pCitCUkxUVFlfREVGSU5FX0VYUEFOREVEKFtCUkxBUElfQVVUSEtFWUZJTEVdLCBbIiR7YXBpX2F1dGhrZXlmaWxlfSJdLAorICAgICAgICAgICAgICAgICAgICAgICBbRGVmaW5lIHRoaXMgdG8gYmUgYSBzdHJpbmcgY29udGFpbmluZyB0aGUgbmFtZSBvZiBCcmxBUEkncyBhdXRob3JpemF0aW9uIGtleSBmaWxlLl0pCisKK0JSTFRUWV9BUkdfRU5BQkxFKAorICAgW2FwaS1mdXp6aW5nXSwKKyAgIFtmdXp6aW5nIHRoZSBhcHBsaWNhdGlvbiBwcm9ncmFtbWluZyBpbnRlcmZhY2VdLAorICAgW10sCitbZG5sCisgIEFDX0NBQ0hFX0NIRUNLKFtmb3IgTExWTSBmdXp6ZXJdLCBbYnJsdHR5X2N2X2xsdm1fZnV6emVyXSwgW2RubAorICAgIEhPU1RfQ1BVPSJgJENDIC1wcmludC1tdWx0aWFyY2ggfCBzZWQgLWUgJ3MvLS4qLy8nYCIKKyAgICBmdXp6ZXJfbGlicz0iYCRDQyAtcHJpbnQtcnVudGltZS1kaXJgL2xpYmNsYW5nX3J0LmZ1enplcl9ub19tYWluLSRIT1NUX0NQVS5hIC1sc3RkYysrIC1sbSIKKyAgICBDRkxBR1M9IiRDRkxBR1MgLWZzYW5pdGl6ZT1mdXp6ZXItbm8tbGluayAtZnNhbml0aXplPWFkZHJlc3MsdW5kZWZpbmVkIC1mc3RhY2stcHJvdGVjdG9yLXN0cm9uZyIKKyAgICBMSUJTPSIkTElCUyAtZnNhbml0aXplPWFkZHJlc3MsdW5kZWZpbmVkIC1sdWJzYW4iCisgICAgT0xEX0xJQlM9IiRMSUJTIgorICAgIExJQlM9IiRMSUJTICRmdXp6ZXJfbGlicyIKKyAgICBBQ19DT01QSUxFX0lGRUxTRSgKKyAgICAgIFtBQ19MQU5HX1BST0dSQU0oW1tdXSwgW1tdXSldLAorICAgICAgW10sIFtBQ19NU0dfRVJST1IoW0NvbXBpbGVyIGRvZXMgbm90IHN1cHBvcnQgZnV6emluZywgZGlkIHlvdSBzZXQgQ0M9Y2xhbmc/XSldKQorICAgIExJQlM9IiRPTERfTElCUyIKKyAgXSkKKyAgQUNfREVGSU5FKFtFTkFCTEVfQVBJX0ZVWlpJTkddLCBbMV0sCisgICAgW0RlZmluZSB0aGlzIGlmIHRoZSBhcHBsaWNhdGlvbiBwcm9ncmFtbWluZyBpbnRlcmZhY2UgaXMgdG8gYmUgZnV6emVkLl0pCitdKQorQUNfU1VCU1QoZnV6emVyX2xpYnMpCisKK2JybHR0eV9jdXJzZXNfbGlic19zYXZlPSIke0xJQlN9IgorQlJMVFRZX1BBQ0tBR0VfQ0hPT1NFKFtjdXJzZXNdLAorICAgW25jdXJzZXN3IG5jdXJzZXN3L25jdXJzZXMuaF0sCisgICBbcGRjdXJzZXN3IGN1cnNlcy5oXSwKKyAgIFtuY3Vyc2VzIG5jdXJzZXMuaF0sCisgICBbcGRjdXJzZXN1IGN1cnNlcy5oXSwKKyAgIFtjdXJzZXMgY3Vyc2VzLmhdLAorICAgW3BkY3Vyc2VzIGN1cnNlcy5oXSkKK2lmIHRlc3QgLW4gIiR7Y3Vyc2VzX3BhY2thZ2V9IgordGhlbgorICAgQUNfQ0hFQ0tfTElCKFt0aW5mb10sIFtpbnRyZmx1c2hdKQorZmkKK2N1cnNlc19saWJzPSIke0xJQlMlJHticmx0dHlfY3Vyc2VzX2xpYnNfc2F2ZX19IgorTElCUz0iJHticmx0dHlfY3Vyc2VzX2xpYnNfc2F2ZX0iCitBQ19TVUJTVChbY3Vyc2VzX2xpYnNdKQorCit4a2JfbGlicz0iIgoreHRrX2xpYnM9IiIKK2FsbF94YnJsYXBpPSIiCitpbnN0YWxsX3hicmxhcGk9IiIKK3hzZWxfb2JqZWN0PSIiCitCUkxUVFlfQVJHX0RJU0FCTEUoCisgICBbeF0sCisgICBbc3VwcG9ydCBmb3IgWDExXSwKKyAgIFtdLAorW2RubAorICAgQlJMVFRZX0hBVkVfUEFDS0FHRShbeDExXSwgW3gxMV0sIFtkbmwKKyAgICAgIGFsbF94YnJsYXBpPSJhbGwteGJybGFwaSIKKyAgICAgIGluc3RhbGxfeGJybGFwaT0iaW5zdGFsbC14YnJsYXBpIgorICAgICAgeHNlbF9vYmplY3Q9J3hzZWwuJE8nCisKKyAgICAgIEFDX0NIRUNLX0hFQURFUlMoW1gxMS9rZXlzeW0uaF0pCisKKyAgICAgIEJSTFRUWV9IQVZFX1BBQ0tBR0UoW3hleHRdLCBbeGV4dF0sIFtkbmwKKyAgICAgICAgIHhrYl9saWJzPSIke3hleHRfbGlic30gJHt4a2JfbGlic30iCisKKyAgICAgICAgIEJSTFRUWV9IQVZFX1BBQ0tBR0UoW3h0c3RdLCBbeHRzdF0sIFtkbmwKKyAgICAgICAgICAgIHhrYl9saWJzPSIke3h0c3RfbGlic30gJHt4a2JfbGlic30iCisgICAgICAgICAgICAgCisgICAgICAgICAgICBBQ19DSEVDS19IRUFERVJTKFtYMTEvZXh0ZW5zaW9ucy9YVGVzdC5oXSkKKyAgICAgICAgICAgIEFDX0NIRUNLX0hFQURFUlMoW1gxMS9leHRlbnNpb25zL1hLQi5oXSkKKyAgICAgICAgIF0pCisKKyAgICAgICAgIEJSTFRUWV9IQVZFX1BBQ0tBR0UoW3hmaXhlc10sIFt4Zml4ZXNdLCBbZG5sCisgICAgICAgICAgICBBQ19DSEVDS19IRUFERVJTKFtYMTEvZXh0ZW5zaW9ucy9YZml4ZXMuaF0pCisgICAgICAgICBdKQorICAgICAgXSkKKworICAgICAgYnJsdHR5X2NwcGZsYWdzX3NhdmU9IiR7Q1BQRkxBR1N9IgorICAgICAgQ1BQRkxBR1M9IiR7Q1BQRkxBR1N9ICR7eDExX2luY2x1ZGVzfSIKKyAgICAgIGJybHR0eV9saWJzX3NhdmU9IiR7TElCU30iCisgICAgICBMSUJTPSIke3gxMV9saWJzfSAke0xJQlN9IgorCisgICAgICBBQ19DSEVDS19GVU5DUyhbWFNldElPRXJyb3JFeGl0SGFuZGxlcl0pCisKKyAgICAgIENQUEZMQUdTPSIke2JybHR0eV9jcHBmbGFnc19zYXZlfSIKKyAgICAgIExJQlM9IiR7YnJsdHR5X2xpYnNfc2F2ZX0iCisKKyAgICAgIEJSTFRUWV9IQVZFX1BBQ0tBR0UoW3h0XSwgW3h0XSwgW2RubAorICAgICAgICAgeHRrX2xpYnM9IiR7eHRfbGlic30gJHt4dGtfbGlic30iCisKKyAgICAgICAgIGJybHR0eV9jcHBmbGFnc19zYXZlPSIke0NQUEZMQUdTfSIKKyAgICAgICAgIENQUEZMQUdTPSIke0NQUEZMQUdTfSAke3gxMV9pbmNsdWRlc30iCisKKyAgICAgICAgIGJybHR0eV9saWJzX3NhdmU9IiR7TElCU30iCisgICAgICAgICBMSUJTPSIke3h0a19saWJzfSAke3gxMV9saWJzfSAke0xJQlN9IgorCisgICAgICAgICBCUkxUVFlfUEFDS0FHRV9DSE9PU0UoW2d1aV90b29sa2l0XSwKKyAgICAgICAgICAgIFtYYXcgWDExL1hhdy9Gb3JtLmggWDExL1hhdy9QYW5lZC5oIFgxMS9YYXcvTGFiZWwuaCBYMTEvWGF3L0NvbW1hbmQuaCBYMTEvWGF3L1JlcGVhdGVyLmhdLAorICAgICAgICAgICAgW1hhdzNkIFgxMS9YYXczZC9Gb3JtLmggWDExL1hhdzNkL1BhbmVkLmggWDExL1hhdzNkL0xhYmVsLmggWDExL1hhdzNkL0NvbW1hbmQuaCBYMTEvWGF3M2QvUmVwZWF0ZXIuaF0sCisgICAgICAgICAgICBbbmVYdGF3IFgxMS9uZVh0YXcvRm9ybS5oIFgxMS9uZVh0YXcvUGFuZWQuaCBYMTEvbmVYdGF3L0xhYmVsLmggWDExL25lWHRhdy9Db21tYW5kLmggWDExL25lWHRhdy9SZXBlYXRlci5oXSwKKyAgICAgICAgICAgIFtYYXdQbHVzIFgxMS9YYXdQbHVzL0Zvcm0uaCBYMTEvWGF3UGx1cy9QYW5lZC5oIFgxMS9YYXdQbHVzL0xhYmVsLmggWDExL1hhd1BsdXMvQ29tbWFuZC5oIFgxMS9YYXdQbHVzL1JlcGVhdGVyLmhdLAorICAgICAgICAgICAgW1htIFhtL1htLmggWG0vRm9ybS5oIFhtL1BhbmVkVy5oIFhtL0xhYmVsLmggWG0vUHVzaEIuaF0pCisKKyAgICAgICAgIHh0a19saWJzPSIke0xJQlMlJHt4MTFfbGlic30gJHticmx0dHlfbGlic19zYXZlfX0iCisKKyAgICAgICAgIENQUEZMQUdTPSIke2JybHR0eV9jcHBmbGFnc19zYXZlfSIKKyAgICAgICAgIExJQlM9IiR7YnJsdHR5X2xpYnNfc2F2ZX0iCisgICAgICBdKQorICAgXSkKK10pCitBQ19TVUJTVChbeGtiX2xpYnNdKQorQUNfU1VCU1QoW3h0a19saWJzXSkKK0FDX1NVQlNUKFthbGxfeGJybGFwaV0pCitBQ19TVUJTVChbaW5zdGFsbF94YnJsYXBpXSkKK0FDX1NVQlNUKFt4c2VsX29iamVjdF0pCisKK3Rlc3QgLXogIiRndWlfdG9vbGtpdF9wYWNrYWdlIiAmJiB7CisgICBjYXNlICIke2hvc3Rfb3N9IgorICAgaW4KKyAgICAgIGN5Z3dpbip8bWluZ3cqKQorICAgICAgICAgZ3VpX3Rvb2xraXRfcGFja2FnZT0id2luZG93cyIKKyAgICAgICAgIDs7CisgICBlc2FjCit9CisKK0FDX0NIRUNLX0ZVTkNTKFt0aW1lIHN0aW1lIGdldHRpbWVvZmRheSBzZXR0aW1lb2ZkYXkgbmFub3NsZWVwXSkKK0JSTFRUWV9DSEVDS19GVU5DVElPTihbY2xvY2tfZ2V0dGltZV0sIFt0aW1lLmhdLCBbcnRdKQorQlJMVFRZX0NIRUNLX0ZVTkNUSU9OKFtjbG9ja19zZXR0aW1lXSwgW3RpbWUuaF0sIFtydF0pCisKK0JSTFRUWV9DSEVDS19GVU5DVElPTihbcHRocmVhZF9nZXRuYW1lX25wXSwgW3B0aHJlYWQuaF0sIFtwdGhyZWFkXSkKK0JSTFRUWV9DSEVDS19GVU5DVElPTihbcHRocmVhZF9hdGZvcmtdLCBbcHRocmVhZC5oXSwgW3B0aHJlYWRdKQorCitBQ19DSEVDS19ERUNMUyhbbG9jYWx0aW1lX3JdLCBbXSwgW10sIFtkbmwKKyNpbmNsdWRlIDx0aW1lLmg+CitdKQorCitBQ19DSEVDS19IRUFERVJTKFtzeXMvcG9sbC5oIHN5cy9zZWxlY3QuaCBzeXMvd2FpdC5oXSkKK0FDX0NIRUNLX0ZVTkNTKFtzZWxlY3RdKQorQUNfQ0hFQ0tfRlVOQ1MoW3BvbGxdKQorCitBQ19DSEVDS19IRUFERVJTKFtzeXMvY2FwYWJpbGl0eS5oIHN5cy9wcmN0bC5oIHNjaGVkLmhdKQorQUNfQ0hFQ0tfSEVBREVSUyhbbGludXgvc2VjY29tcC5oIGxpbnV4L2ZpbHRlci5oIGxpbnV4L2F1ZGl0LmhdKQorCitBQ19DSEVDS19IRUFERVJTKFtzaWduYWwuaCBzeXMvc2lnbmFsZmQuaF0pCitBQ19DSEVDS19GVU5DUyhbc2lnYWN0aW9uXSkKKworQUNfQ0hFQ0tfSEVBREVSUyhbYWxsb2NhLmggZ2V0b3B0LmggcmVnZXguaF0pCitBQ19DSEVDS19IRUFERVJTKFtzeXNsb2cuaF0pCitBQ19DSEVDS19IRUFERVJTKFtzeXMvZmlsZS5oIHN5cy9zb2NrZXQuaF0pCitBQ19DSEVDS19IRUFERVJTKFtwd2QuaCBncnAuaF0pCitBQ19DSEVDS19IRUFERVJTKFtzeXMvaW8uaCBzeXMvbW9kZW0uaCBtYWNoaW5lL3NwZWFrZXIuaCBkZXYvc3BlYWtlci9zcGVha2VyLmggbGludXgvdnQuaF0pCitBQ19DSEVDS19IRUFERVJTKFtzZGtkZGt2ZXIuaF0pCisKK0FDX0NIRUNLX0hFQURFUlMoW2V4ZWNpbmZvLmhdLCBbQlJMVFRZX0hBVkVfTElCUkFSWShbZXhlY2luZm9dKV0pCisKK0FDX0NIRUNLX0hFQURFUlMoW2xpbnV4L2lucHV0LmhdLCBbCisgICBBQ19DSEVDS19IRUFERVJTKFtsaW51eC91aW5wdXQuaF0sIFtdLCBbXSwgWworI2luY2x1ZGUgPGxpbnV4L2lucHV0Lmg+CitdKV0pCisKK0FDX0NIRUNLX0ZVTkNTKFtnZXRvcHRfbG9uZyBoc3RyZXJyb3IgdnN5c2xvZ10pCitBQ19DSEVDS19GVU5DUyhbcmVhbHBhdGggcmVhZGxpbmtdKQorQUNfQ0hFQ0tfRlVOQ1MoW3BhdXNlXSkKK0FDX0NIRUNLX0ZVTkNTKFtmY2hkaXIgZmNobW9kXSkKK0FDX0NIRUNLX0ZVTkNTKFtzaG1nZXQgc2htX29wZW5dKQorQUNfQ0hFQ0tfRlVOQ1MoW2dldHBlZXJlaWQgZ2V0cGVlcnVjcmVkIGdldHpvbmVpZF0pCitBQ19DSEVDS19GVU5DUyhbbWVtcGNweSB3bWVtcGNweV0pCisKK2Nhc2UgIiR7aG9zdF9vc30iCitpbgorICAgY3lnd2luKnxtaW5ndyopCisgICAgICBpZiB0ZXN0ICIke2JybHR0eV9jdl9kbGxfd3MyXzMyfSIgPSAieWVzIgorICAgICAgdGhlbgorICAgICAgICAgQlJMVFRZX0hBVkVfV0lORE9XU19GVU5DVElPTihbZ2V0YWRkcmluZm9dLCBbd3MyXzMyXSkKKyAgICAgICAgIEJSTFRUWV9IQVZFX1dJTkRPV1NfRlVOQ1RJT04oW2dldG5hbWVpbmZvXSwgW3dzMl8zMl0pCisgICAgICAgICBBQ19DSEVDS19GVU5DUyhbZ2FpX3N0cmVycm9yXSkKKyAgICAgIGZpCisgICAgICBBQ19DSEVDS19UWVBFUyhbUFJPQ0VTU19JTkZPUk1BVElPTl9DTEFTU10sIFtdLCBbXSwgWworI2luY2x1ZGUgPHdpbmRvd3MuaD4KK10pCisgICAgICBBQ19DSEVDS19ERUNMUyhbUHJvY2Vzc1VzZXJNb2RlSU9QTF0sIFtdLCBbXSwgWworI2luY2x1ZGUgPHdpbmRvd3MuaD4KK10pCisgICAgICA7OworICAgKikKKyAgICAgIEFDX0NIRUNLX0ZVTkNTKFtnYWlfc3RyZXJyb3IgZ2V0YWRkcmluZm8gZ2V0bmFtZWluZm9dKQorICAgICAgOzsKK2VzYWMKKworQUNfQ0hFQ0tfU0laRU9GKFt3Y2hhcl90XSwgW10sIFsKKyNpbmNsdWRlIDx3Y2hhci5oPgorXSkKK0FDX0RFRklORV9VTlFVT1RFRChbU0laRU9GX1dDSEFSX1RfU1RSXSwgWyIke2FjX2N2X3NpemVvZl93Y2hhcl90fSJdLAorICAgICAgICAgICAgICAgICAgIFtEZWZpbmUgdGhpcyB0byBiZSBhIHN0cmluZyBjb250YWluaW5nIHRoZSBzaXplIG9mIHRoZSB3Y2hhcl90IHR5cGUuXSkKKworQlJMVFRZX0lGX1BUSFJFQURTKFtkbmwKKyAgIEFDX0RFRklORShbSEFWRV9QT1NJWF9USFJFQURTXSwgWzFdLAorICAgICAgICAgICAgIFtEZWZpbmUgdGhpcyBpZiBwb3NpeCB0aHJlYWRzIGFyZSBzdXBwb3J0ZWQuXSkKK10pCisKK0FDX0NfQklHRU5ESUFOCitBQ19DX0NPTlNUCitBQ19DX0lOTElORQorQUNfT0JKRVhUCitBQ19FWEVFWFQKKworQUNfQ0FDSEVfQ0hFQ0soCisgICBbaWYgdGhlIGNvbXBpbGVyIHVuZGVyc3RhbmRzIHRoZSBfX2FsaWdub2ZfXyBvcGVyYXRvcl0sCisgICBbYnJsdHR5X2N2X2Nfb3BlcmF0b3JfYWxpZ25vZl0sCisgICBbCisgICAgICBBQ19DT01QSUxFX0lGRUxTRSgKKyAgICAgICAgIFsKKyAgICAgICAgICAgIEFDX0xBTkdfUFJPR1JBTSgKKyAgICAgICAgICAgICAgIFtbCisgICAgICAgICAgICAgICAgICBpbnQgYTsKKyAgICAgICAgICAgICAgICAgIGludCBiID0gX19hbGlnbm9mX18oYSk7CisgICAgICAgICAgICAgICBdXSwgW1sKKyAgICAgICAgICAgICAgIF1dCisgICAgICAgICAgICApCisgICAgICAgICBdLCBbCisgICAgICAgICAgICBicmx0dHlfY3ZfY19vcGVyYXRvcl9hbGlnbm9mPXllcworICAgICAgICAgXSwgWworICAgICAgICAgICAgYnJsdHR5X2N2X2Nfb3BlcmF0b3JfYWxpZ25vZj1ubworICAgICAgICAgXQorICAgICAgKQorICAgXQorKQoraWYgdGVzdCAiJHticmx0dHlfY3ZfY19vcGVyYXRvcl9hbGlnbm9mfSIgPSAieWVzIgordGhlbgorICAgQUNfREVGSU5FKFtIQVZFX09QRVJBVE9SX0FMSUdOT0ZdLCAgWzFdLAorICAgICAgICAgICAgIFtEZWZpbmUgdGhpcyBpZiB0aGUgX19hbGlnbm9mX18gb3BlcmF0b3IgaXMgc3VwcG9ydGVkLl0pCitmaQorCitBQ19DQUNIRV9DSEVDSygKKyAgIFtpZiB0aGUgY29tcGlsZXIgc3VwcG9ydHMgdGhyZWFkLWxvY2FsIHZhcmlhYmxlc10sCisgICBbYnJsdHR5X2N2X2NfdGhyZWFkX2xvY2FsXSwKKyAgIFsKKyAgICAgIGJybHR0eV9jdl9jX3RocmVhZF9sb2NhbD0iIgorICAgICAgZm9yIHRocmVhZF9sb2NhbF9xdWFsaWZpZXIgaW4gIl9UaHJlYWRfbG9jYWwiICJfX3RocmVhZCIgIl9fZGVjbHNwZWModGhyZWFkKSIKKyAgICAgIGRvCisgICAgICAgICBBQ19DT01QSUxFX0lGRUxTRSgKKyAgICAgICAgICAgIFsKKyAgICAgICAgICAgICAgIEFDX0xBTkdfUFJPR1JBTSgKKyAgICAgICAgICAgICAgICAgIFtbCisgICAgICAgICAgICAgICAgICAgICBzdGF0aWMgJHt0aHJlYWRfbG9jYWxfcXVhbGlmaWVyfSBpbnQgaTsKKyAgICAgICAgICAgICAgICAgIF1dLCBbWworICAgICAgICAgICAgICAgICAgXV0KKyAgICAgICAgICAgICAgICkKKyAgICAgICAgICAgIF0sIFsKKyAgICAgICAgICAgICAgIGJybHR0eV9jdl9jX3RocmVhZF9sb2NhbD0iJHt0aHJlYWRfbG9jYWxfcXVhbGlmaWVyfSIKKyAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBdCisgICAgICAgICApCisgICAgICBkb25lCisgICBdCispCitpZiB0ZXN0IC1uICIke2JybHR0eV9jdl9jX3RocmVhZF9sb2NhbH0iCit0aGVuCisgICBBQ19ERUZJTkVfVU5RVU9URUQoW1RIUkVBRF9MT0NBTF0sIFske2JybHR0eV9jdl9jX3RocmVhZF9sb2NhbH1dLAorICAgICAgICAgICAgICAgICAgICAgIFtEZWZpbmUgdGhpcyBpZiB0aHJlYWQtbG9jYWwgdmFyaWFibGVzIGFyZSBzdXBwb3J0ZWQuXSkKK2ZpCisKK0FDX1NVQlNUKFthcmNoaXZlX3ByZWZpeF0sIFtsaWJdKQorQUNfU1VCU1QoW2FyY2hpdmVfZXh0ZW5zaW9uXSwgW2FdKQorCitjYXNlICIke2hvc3Rfb3N9IgoraW4KKyAgIGN5Z3dpbiopCisgICAgICBsaWJyYXJ5X3ByZWZpeD0iY3lnIgorICAgICAgOzsKKyAgIG1pbmd3KikKKyAgICAgIGxpYnJhcnlfcHJlZml4PSIiCisgICAgICA7OworICAgKikKKyAgICAgIGxpYnJhcnlfcHJlZml4PSIke2FyY2hpdmVfcHJlZml4fSIKKyAgICAgIDs7Citlc2FjCitBQ19TVUJTVChbbGlicmFyeV9wcmVmaXhdKQorCitjYXNlICIke2hvc3Rfb3N9IgoraW4KKyAgIGhwdXgqKQorICAgICAgbGlicmFyeV9leHRlbnNpb249InNsIgorICAgICAgOzsKKyAgIGN5Z3dpbip8bWluZ3cqKQorICAgICAgbGlicmFyeV9leHRlbnNpb249ImRsbCIKKyAgICAgIDs7CisgICBkYXJ3aW4qKQorICAgICAgbGlicmFyeV9leHRlbnNpb249ImR5bGliIgorICAgICAgOzsKKyAgICopCisgICAgICBsaWJyYXJ5X2V4dGVuc2lvbj0ic28iCisgICAgICA7OworZXNhYworQUNfU1VCU1QoW2xpYnJhcnlfZXh0ZW5zaW9uXSkKK0FDX0RFRklORV9VTlFVT1RFRChbTElCUkFSWV9FWFRFTlNJT05dLCBbIiR7bGlicmFyeV9leHRlbnNpb259Il0sCisgICAgICAgICAgICAgICAgICAgW0RlZmluZSB0aGlzIHRvIGJlIGEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIGxpYnJhcnkgZXh0ZW5zaW9uLl0pCisKK0FDX1NVQlNUKFttb2R1bGVfbmFtZV0sIFsiJHtsaWJyYXJ5X3ByZWZpeH0ke1BBQ0tBR0VfVEFSTkFNRX0iXSkKK0FDX0RFRklORV9VTlFVT1RFRChbTU9EVUxFX05BTUVdLCBbIiR7bW9kdWxlX25hbWV9Il0sCisgICAgICAgICAgICAgICAgICAgW0RlZmluZSB0aGlzIHRvIGJlIGEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIGJhc2UgbW9kdWxlIG5hbWUuXSkKKworY2FzZSAiJHtob3N0X29zfSIKK2luCisgICBkYXJ3aW4qKQorICAgICAgbW9kdWxlX2V4dGVuc2lvbj0iYnVuZGxlIgorICAgICAgOzsKKyAgICopCisgICAgICBtb2R1bGVfZXh0ZW5zaW9uPSIke2xpYnJhcnlfZXh0ZW5zaW9ufSIKKyAgICAgIDs7Citlc2FjCitBQ19TVUJTVChbbW9kdWxlX2V4dGVuc2lvbl0pCitBQ19ERUZJTkVfVU5RVU9URUQoW01PRFVMRV9FWFRFTlNJT05dLCBbIiR7bW9kdWxlX2V4dGVuc2lvbn0iXSwKKyAgICAgICAgICAgICAgICAgICBbRGVmaW5lIHRoaXMgdG8gYmUgYSBzdHJpbmcgY29udGFpbmluZyB0aGUgbW9kdWxlIGV4dGVuc2lvbi5dKQorCitBQ19DQUNIRV9DSEVDSyhbZm9yIHN0YXRpYyBhcmNoaXZlIGV4dGVuc2lvbl0sIFticmx0dHlfY3ZfZXh0X2FyY10sIFtkbmwKK2Nhc2UgIiR7aG9zdF9vc30iCitpbgorICAgKikKKyAgICAgIGJybHR0eV9jdl9leHRfYXJjPSJhIgorICAgICAgOzsKK2VzYWNdKQorYXJjaGl2ZV9leHRlbnNpb249IiR7YnJsdHR5X2N2X2V4dF9hcmN9IgorQUNfU1VCU1QoW2FyY2hpdmVfZXh0ZW5zaW9uXSkKKworQUNfQ0FDSEVfQ0hFQ0soW2ZvciBzaGFyZWQgb2JqZWN0IHJ1bi10aW1lIHNlYXJjaCBwYXRoIGVudmlyb25tZW50IHZhcmlhYmxlXSwgW2JybHR0eV9jdl9lbnZfbGlic2VhcmNoXSwgW2RubAorY2FzZSAiJHtob3N0X29zfSIKK2luCisgICBocHV4KikKKyAgICAgIGJybHR0eV9jdl9lbnZfbGlic2VhcmNoPSJTSExJQl9QQVRIIgorICAgICAgOzsKKyAgIGRhcndpbiopCisgICAgICBicmx0dHlfY3ZfZW52X2xpYnNlYXJjaD0iRFlMRF9MSUJSQVJZX1BBVEgiCisgICAgICA7OworICAgKikKKyAgICAgIGJybHR0eV9jdl9lbnZfbGlic2VhcmNoPSJMRF9MSUJSQVJZX1BBVEgiCisgICAgICA7OworZXNhY10pCitsaWJzZWFyY2hfdmFyaWFibGU9IiR7YnJsdHR5X2N2X2Vudl9saWJzZWFyY2h9IgorQUNfU1VCU1QoW2xpYnNlYXJjaF92YXJpYWJsZV0pCisKK0JSTFRUWV9QS0dDT05GSUdfVkFSSUFCTEUoW1BPTEtJVF9QT0xJQ1lfRElSXSwgW3BvbGtpdC1nb2JqZWN0LTFdLCBbcG9saWN5ZGlyXSwgWy91c3Ivc2hhcmUvcG9sa2l0LTEvYWN0aW9uc10pCitCUkxUVFlfUEtHQ09ORklHX1ZBUklBQkxFKFtQT0xLSVRfUlVMRV9ESVJdLCBbcG9sa2l0LWdvYmplY3QtMV0sIFtydWxlZGlyXSwgWy91c3Ivc2hhcmUvcG9sa2l0LTEvcnVsZXMuZF0pCitCUkxUVFlfUEtHQ09ORklHX1ZBUklBQkxFKFtTWVNURU1EX1NZU1VTRVJTX0RJUl0sIFtzeXN0ZW1kXSwgW3N5c3VzZXJzZGlyXSwgWy91c3IvbGliL3N5c3VzZXJzLmRdKQorQlJMVFRZX1BLR0NPTkZJR19WQVJJQUJMRShbU1lTVEVNRF9UTVBGSUxFU19ESVJdLCBbc3lzdGVtZF0sIFt0bXBmaWxlc2Rpcl0sIFsvdXNyL2xpYi90bXBmaWxlcy5kXSkKK0JSTFRUWV9QS0dDT05GSUdfVkFSSUFCTEUoW1NZU1RFTURfVU5JVF9ESVJdLCBbc3lzdGVtZF0sIFtzeXN0ZW1kc3lzdGVtdW5pdGRpcl0sIFsvdXNyL2xpYi9zeXN0ZW1kL3N5c3RlbV0pCitCUkxUVFlfUEtHQ09ORklHX1ZBUklBQkxFKFtTWVNURU1EX0NPTkZfRElSXSwgW3N5c3RlbWRdLCBbc3lzdGVtZHN5c3RlbWNvbmZkaXJdLCBbL3Vzci9saWIvc3lzdGVtZC9zeXN0ZW1dKQorCitCUkxUVFlfQVJHX1BBQ0tBR0UoW3N5c3RlbV0sIFtiYXNlIHN5c3RlbV0sIFtdLCBbZG5sCisgICAqYW5kcm9pZCopCisgICAgICBzeXN0ZW1fcGFja2FnZT0iamF2YSIKKyAgICAgIHN5c3RlbV9saWJzPSItbGxvZyIKKyAgICAgIDs7CisgICAqcW54KikKKyAgICAgIEFDX0NIRUNLX0xJQihbYXNvdW5kXSwgW3NuZF9wY21fb3Blbl0pCisgICAgICA7OworICAgY3lnd2luKikKKyAgICAgIHN5c3RlbV9wYWNrYWdlPSJ3aW5kb3dzIgorICAgICAgOzsKKyAgIGRhcndpbiopCisgICAgICBzeXN0ZW1fcGFja2FnZT0iZGFyd2luIgorICAgICAgc3lzdGVtX2luY2x1ZGVzPSIteCBvYmplY3RpdmUtYyIKKyAgICAgIHN5c3RlbV9saWJzPSItZnJhbWV3b3JrIElPS2l0IC1mcmFtZXdvcmsgRm91bmRhdGlvbiAtZnJhbWV3b3JrIENvcmVGb3VuZGF0aW9uIC1sb2JqYyIKKyAgICAgIDs7CisgICBocHV4KikKKyAgICAgIGlmIHRlc3QgLWQgL29wdC9hdWRpby9pbmNsdWRlCisgICAgICB0aGVuCisgICAgICAgICBDUFBGTEFHUz0iJHtDUFBGTEFHU30gLUkvb3B0L2F1ZGlvL2luY2x1ZGUiCisgICAgICAgICBzeXN0ZW1fbGlicz0iLUwvb3B0L2F1ZGlvL2xpYiAtbEFsaWIiCisgICAgICAgICBBQ19ERUZJTkUoW0hBVkVfSFBVWF9BVURJT10sIFsxXSwKKyAgICAgICAgICAgICAgICAgICBbRGVmaW5lIHRoaXMgaWYgSFAtVVggYXVkaW8gc3VwcG9ydCBpcyBhdmFpbGFibGUuXSkKKyAgICAgIGZpCisgICAgICA7OworICAgbGludXgqKQorICAgICAgc3lzdGVtX3BhY2thZ2U9ImxpbnV4IgorICAgICAgOzsKKyAgIG1pbmd3KikKKyAgICAgIHN5c3RlbV9wYWNrYWdlPSJ3aW5kb3dzIgorICAgICAgOzsKKyAgIG1zZG9zKikKKyAgICAgIHN5c3RlbV9wYWNrYWdlPSJtc2RvcyIKKyAgICAgIHN5c3RlbV9saWJzPSItbGRiZyIKKyAgICAgIDs7CitdKQorCitleHBhdF9pbmNsdWRlcz0iIgorZXhwYXRfbGlicz0iIgorQlJMVFRZX0FSR19ESVNBQkxFKAorICAgW2V4cGF0XSwKKyAgIFtzdXBwb3J0IGZvciBYTUwgcGFyc2luZyAoQ0xEUildLAorICAgW10sCitbZG5sCisgICBCUkxUVFlfSEFWRV9QQUNLQUdFKFtleHBhdF0sIFtleHBhdF0sIFtkbmwKKyAgICAgIEFDX0RFRklORV9VTlFVT1RFRChbSEFWRV9FWFBBVF0sIFsxXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBbRGVmaW5lIHRoaXMgaWYgWE1MIHBhcnNpbmcgc3VwcG9ydCBpcyB0byBiZSBpbmNsdWRlZC5dKQorICAgXSkKK10pCitBQ19TVUJTVChbZXhwYXRfaW5jbHVkZXNdKQorQUNfU1VCU1QoW2V4cGF0X2xpYnNdKQorCitjb250cmFjdGVkX2JyYWlsbGVfb2JqZWN0cz0nY3RiX2NvbXBpbGUuJE8gY2xkci4kTyBjdGJfdHJhbnNsYXRlLiRPIGN0Yl9uYXRpdmUuJE8gY3RiX2V4dGVybmFsLiRPJworbG91aXNfaW5jbHVkZXM9IiIKK2xvdWlzX2xpYnM9IiIKK0JSTFRUWV9BUkdfRElTQUJMRSgKKyAgIFtsaWJsb3Vpc10sCisgICBbc3VwcG9ydCBmb3IgTGliTG91aXMtYmFzZWQgY29udHJhY3RlZCBicmFpbGxlXSwKKyAgIFtdLAorW2RubAorICAgQlJMVFRZX0hBVkVfUEFDS0FHRShbbG91aXNdLCBbbGlibG91aXNdLCBbZG5sCisgICAgICBsb3Vpc1RhYmxlc0RpcmVjdG9yeT1gJHtQS0dfQ09ORklHfSAtLXZhcmlhYmxlPXRhYmxlc2RpciAke2xvdWlzX3BhY2thZ2V9YAorICAgICAgaWYgdGVzdCAtbiAiJHtsb3Vpc1RhYmxlc0RpcmVjdG9yeX0iCisgICAgICB0aGVuCisgICAgICAgICBBQ19TVUJTVChbbG91aXNfdGFibGVzX2RpcmVjdG9yeV0sIFsiJHtsb3Vpc1RhYmxlc0RpcmVjdG9yeX0iXSkKKyAgICAgICAgIEFDX0RFRklORV9VTlFVT1RFRChbTE9VSVNfVEFCTEVTX0RJUkVDVE9SWV0sIFsiJHtsb3Vpc1RhYmxlc0RpcmVjdG9yeX0iXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBbRGVmaW5lIHRoaXMgdG8gYmUgYSBzdHJpbmcgY29udGFpbmluZyB0aGUgcGF0aCB0byB0aGUgTGliTG91aXMgdGFibGVzIGRpcmVjdG9yeS5dKQorICAgICAgICAgY29udHJhY3RlZF9icmFpbGxlX29iamVjdHM9IiR7Y29udHJhY3RlZF9icmFpbGxlX29iamVjdHN9IGN0Yl9sb3Vpcy5cJE8iCisgICAgICBmaQorICAgXSkKK10pCitBQ19TVUJTVChbbG91aXNfaW5jbHVkZXNdKQorQUNfU1VCU1QoW2xvdWlzX2xpYnNdKQorQUNfU1VCU1QoW2NvbnRyYWN0ZWRfYnJhaWxsZV9vYmplY3RzXSkKKworQlJMVFRZX0FSR19ESVNBQkxFKAorICAgW2dwbV0sCisgICBbbW91c2UgdHJhY2tpbmcgdmlhIEdQTV0sCisgICBbXSwKK1tkbmwKKyAgIEFDX0NIRUNLX0xJQihbZ3BtXSwgW0dwbV9PcGVuXSkKK10pCisKK2Nhc2UgIiR7aG9zdF9vc30iCitpbgorICAgaHB1eCopCisgICAgICBCUkxUVFlfU0VBUkNIX0xJQlMoW3NobF9sb2FkXSwgW2RsZF0pCisgICAgICA7OworICAgKikKKyAgICAgIDs7Citlc2FjCisKK0JSTFRUWV9BUkdfUEFDS0FHRShbcGdtcGF0aF0sIFtwcm9ncmFtIHBhdGhdLCBbXSwgW2RubAorICAgY3lnd2luKikKKyAgICAgIHBnbXBhdGhfcGFja2FnZT0id2luZG93cyIKKyAgICAgIDs7CisgICBmcmVlYnNkKikKKyAgICAgIHBnbXBhdGhfcGFja2FnZT0iZnJlZWJzZCIKKyAgICAgIDs7CisgICBsaW51eCopCisgICAgICBwZ21wYXRoX3BhY2thZ2U9ImxpbnV4IgorICAgICAgOzsKKyAgIGdudSopCisgICAgICBwZ21wYXRoX3BhY2thZ2U9Imh1cmQiCisgICAgICA7OworICAgbWluZ3cqKQorICAgICAgcGdtcGF0aF9wYWNrYWdlPSJ3aW5kb3dzIgorICAgICAgOzsKKyAgIHNvbGFyaXMqKQorICAgICAgcGdtcGF0aF9wYWNrYWdlPSJzb2xhcmlzIgorICAgICAgOzsKK10pCisKK0JSTFRUWV9BUkdfUEFDS0FHRShbcGdtcHJpdnNdLCBbcHJvZ3JhbSBwcml2aWxlZ2VzXSwgW10sIFtkbmwKKyAgIGxpbnV4KikKKyAgICAgIHBnbXByaXZzX3BhY2thZ2U9ImxpbnV4IgorICAgICAgQlJMVFRZX0hBVkVfTElCUkFSWShbY2FwXSkKKyAgICAgIDs7CitdKQorCitCUkxUVFlfQVJHX1BBQ0tBR0UoW3NlcnZpY2VdLCBbc3lzdGVtIHNlcnZpY2VdLCBbbGlic3lzdGVtZF0sIFtkbmwKKyAgIG1pbmd3KikKKyAgICAgIHNlcnZpY2VfcGFja2FnZT0id2luZG93cyIKKyAgICAgIDs7CitdKQorCitBQ19TVUJTVChbU1lTVEVNRF9TRVJWSUNFX1RZUEVdLCBbImZvcmtpbmciXSkKK0FDX1NVQlNUKFtTWVNURU1EX1NFUlZJQ0VfQVJHVU1FTlRTXSwgWyIiXSkKKworY2FzZSAiJHtzZXJ2aWNlX3BhY2thZ2V9IgoraW4KKyAgIGxpYnN5c3RlbWQpCisgICAgICBTWVNURU1EX1NFUlZJQ0VfVFlQRT0ibm90aWZ5IgorICAgICAgU1lTVEVNRF9TRVJWSUNFX0FSR1VNRU5UUz0iLW4iCisgICAgICA7OworZXNhYworCitCUkxUVFlfSEFWRV9QQUNLQUdFKFtzeXN0ZW1kXSwgW2xpYnN5c3RlbWRdLCBbCisgICBicmx0dHlfbGlic19zYXZlPSIke0xJQlN9IgorICAgTElCUz0iJHtMSUJTfSAke3N5c3RlbWRfbGlic30iCisgICBBQ19DSEVDS19GVU5DKFtzZF9zZXNzaW9uX2dldF92dF0sIFtkbmwKKyAgICAgIEFDX0RFRklORShbSEFWRV9TRF9TRVNTSU9OX0dFVF9WVF0sIFsxXSwKKyAgICAgICAgICAgICAgICBbRGVmaW5lIHRoaXMgaWYgdGhlIGZ1bmN0aW9uIHNkX3Nlc3Npb25fZ2V0X3Z0IGlzIGF2YWlsYWJsZSBpbiBsaWJzeXN0ZW1kLl0pCisgICAgICBhcGlfbGlicmFyaWVzPSIke2FwaV9saWJyYXJpZXN9ICR7c3lzdGVtZF9saWJzfSIKKyAgIF0sIFtkbmwKKyAgICAgIEFDX01TR19XQVJOKFtmdW5jdGlvbiBub3QgYXZhaWxhYmxlOiBzeXN0ZW1kOnNkX3Nlc3Npb25fZ2V0X3Z0KCldKQorICAgXSkKKyAgIExJQlM9IiR7YnJsdHR5X2xpYnNfc2F2ZX0iCitdLCBbOl0pCisKK0JSTFRUWV9BUkdfUEFDS0FHRShbcGFyYW1zXSwgW2Jvb3QgcGFyYW1ldGVyc10sIFtdLCBbZG5sCisgICBsaW51eCopCisgICAgICBwYXJhbXNfcGFja2FnZT0ibGludXgiCisgICAgICA7OworXSkKKworQlJMVFRZX0FSR19QQUNLQUdFKFtkeW5sZF0sIFtkeW5hbWljIGxvYWRpbmddLCBbZGxmY24gZHlsZF0sIFtkbmwKKyAgIGVsZiopCisgICAgICBkeW5sZF9wYWNrYWdlPSJncnViIgorICAgICAgOzsKKyAgIGhwdXgqKQorICAgICAgZHlubGRfcGFja2FnZT0ic2hsIgorICAgICAgOzsKKyAgIG1pbmd3KikKKyAgICAgIGR5bmxkX3BhY2thZ2U9IndpbmRvd3MiCisgICAgICA7OworXSwgW2RubAorICAgZGxmY24pCisgICAgICBBQ19DSEVDS19IRUFERVJTKFtkbGZjbi5oXSwgWworICAgICAgICAgQUNfU0VBUkNIX0xJQlMoW2Rsb3Blbl0sIFtkbF0sIFtkbmwKKyAgICAgICAgICAgIGR5bmxkX3BhY2thZ2U9ImRsZmNuIgorICAgICAgICAgXSkKKyAgICAgIF0pCisgICAgICA7OworICAgZHlsZCkKKyAgICAgIEFDX0NIRUNLX0hFQURFUlMoW21hY2gtby9keWxkLmhdLCBbCisgICAgICAgICBkeW5sZF9wYWNrYWdlPSJkeWxkIgorICAgICAgXSkKKyAgICAgIDs7CitdKQorCitCUkxUVFlfQVJHX1BBQ0tBR0UoW3JneF0sIFtyZWd1bGFyIGV4cHJlc3Npb25dLCBbbGlicGNyZTItMzIgbGlicGNyZTMyXSwgW2RubAorXSkKKworQlJMVFRZX0FSR19QQUNLQUdFKFtjaGFyc2V0XSwgW2NoYXJhY3RlciBzZXRdLCBbaWNvbnZdLCBbZG5sCisgICBlbGYqKQorICAgICAgY2hhcnNldF9wYWNrYWdlPWdydWIKKyAgICAgIDs7CisgICBtaW5ndyopCisgICAgICBjaGFyc2V0X3BhY2thZ2U9d2luZG93cworICAgICAgOzsKKyAgIG1zZG9zKikKKyAgICAgIGNoYXJzZXRfcGFja2FnZT1tc2RvcworICAgICAgOzsKK10sIFtkbmwKKyAgIGljb252KQorICAgICAgaWYgdGVzdCAiJHticmx0dHlfZW5hYmxlZF9pY29udn0iID0gInllcyIKKyAgICAgIHRoZW4KKyAgICAgICAgIEFDX0NIRUNLX0hFQURFUihbaWNvbnYuaF0sIFtkbmwKKyAgICAgICAgICAgIGNoYXJzZXRfcGFja2FnZT1pY29udgorICAgICAgICAgXSkKKyAgICAgIGZpCisgICAgICA7OworXSkKKworQlJMVFRZX0FSR19QQUNLQUdFKFtob3N0Y21kXSwgW2hvc3QgY29tbWFuZF0sIFt1bml4XSwgW2RubAorICAgbWluZ3cqKQorICAgICAgaG9zdGNtZF9wYWNrYWdlPXdpbmRvd3MKKyAgICAgIDs7CitdLCBbZG5sCisgICB1bml4KQorICAgICAgQUNfQ0hFQ0tfREVDTChbZm9ya10sIFtkbmwKKyAgICAgICAgIEFDX0NIRUNLX0hFQURFUihbc2lnbmFsLmhdLCBbZG5sCisgICAgICAgICAgICBBQ19DSEVDS19ERUNMKFtTSUdDSExEXSwgW2RubAorICAgICAgICAgICAgICAgaG9zdGNtZF9wYWNrYWdlPXVuaXgKKyAgICAgICAgICAgIF0sIFtdLCBbZG5sCisjaW5jbHVkZSA8c2lnbmFsLmg+CisgICAgICAgICAgICBdKQorICAgICAgICAgXSkKKyAgICAgIF0pCisgICAgICA7OworXSkKKworQlJMVFRZX0FSR19QQUNLQUdFKFttbnRwdF0sIFttb3VudCBwb2ludF0sIFttbnRlbnQgbW50dGFiXSwgW2RubAorXSwgW2RubAorICAgbW50ZW50KQorICAgICAgQUNfQ0hFQ0tfSEVBREVSKFttbnRlbnQuaF0sIFtkbmwKKyAgICAgICAgIEFDX0NIRUNLX0ZVTkMoW3NldG1udGVudF0sIFtkbmwKKyAgICAgICAgICAgIG1udHB0X3BhY2thZ2U9bW50ZW50CisgICAgICAgICAgICBBQ19DSEVDS19GVU5DUyhbYWRkbW50ZW50XSkKKyAgICAgICAgIF0pCisgICAgICBdKQorICAgICAgOzsKKyAgIG1udHRhYikKKyAgICAgIEFDX0NIRUNLX0hFQURFUihbc3lzL21udHRhYi5oXSwgW2RubAorICAgICAgICAgbW50cHRfcGFja2FnZT1tbnR0YWIKKyAgICAgIF0pCisgICAgICA7OworXSkKKworQlJMVFRZX0FSR19QQUNLQUdFKFttbnRmc10sIFttb3VudCBmaWxlIHN5c3RlbV0sIFtdLCBbZG5sCisgICBsaW51eCopCisgICAgICBtbnRmc19wYWNrYWdlPSJsaW51eCIKKyAgICAgIDs7CitdKQorCitCUkxUVFlfQVJHX1BBQ0tBR0UoW2tiZF0sIFtrZXlib2FyZF0sIFtdLCBbZG5sCisgICAqYW5kcm9pZCopIGtiZF9wYWNrYWdlPSJhbmRyb2lkIjs7CisgICBsaW51eCopIGtiZF9wYWNrYWdlPSJsaW51eCI7OworXSkKKworQlJMVFRZX0FSR19QQUNLQUdFKFtiZWxsXSwgW2NvbnNvbGUgYmVsbF0sIFtdLCBbZG5sCisgICBsaW51eCopCisgICAgICBiZWxsX3BhY2thZ2U9ImxpbnV4IgorICAgICAgOzsKK10pCisKK0JSTFRUWV9BUkdfUEFDS0FHRShbbGVkc10sIFtrZXlib2FyZCBMRURzXSwgW10sIFtkbmwKKyAgIGxpbnV4KikKKyAgICAgIGxlZHNfcGFja2FnZT0ibGludXgiCisgICAgICA7OworXSkKKworQlJMVFRZX0FSR19QQUNLQUdFKFtiZWVwXSwgW2JlZXBlcl0sIFtdLCBbZG5sCisgICAqYW5kcm9pZCopCisgICAgICBiZWVwX3BhY2thZ2U9Im5vbmUiCisgICAgICA7OworICAgY3lnd2luKikKKyAgICAgIGJlZXBfcGFja2FnZT0id2luZG93cyIKKyAgICAgIDs7CisgICBmcmVlYnNkKikKKyAgICAgIGJlZXBfcGFja2FnZT0ic3BrciIKKyAgICAgIDs7CisgICBrZnJlZWJzZCopCisgICAgICBiZWVwX3BhY2thZ2U9InNwa3IiCisgICAgICA7OworICAgbGludXgqKQorICAgICAgYmVlcF9wYWNrYWdlPSJsaW51eCIKKyAgICAgIDs7CisgICBtaW5ndyopCisgICAgICBiZWVwX3BhY2thZ2U9IndpbmRvd3MiCisgICAgICA7OworICAgbXNkb3MqKQorICAgICAgYmVlcF9wYWNrYWdlPSJtc2RvcyIKKyAgICAgIDs7CisgICBuZXRic2QqKQorICAgICAgYmVlcF9wYWNrYWdlPSJ3c2tiZCIKKyAgICAgIDs7CisgICBvcGVuYnNkKikKKyAgICAgIGJlZXBfcGFja2FnZT0id3NrYmQiCisgICAgICA7OworICAgc29sYXJpcyopCisgICAgICBiZWVwX3BhY2thZ2U9InNvbGFyaXMiCisgICAgICA7OworXSkKKworQlJMVFRZX0FSR19QQUNLQUdFKFtwY21dLCBbUENtXSwgW2Fsc2Egb3NzXSwgW2RubAorICAgKmFuZHJvaWQqKQorICAgICAgcGNtX3BhY2thZ2U9ImFuZHJvaWQiCisgICAgICA7OworICAgKnFueCopCisgICAgICBwY21fcGFja2FnZT0icXNhIgorICAgICAgOzsKKyAgIGhwdXgqKQorICAgICAgcGNtX3BhY2thZ2U9ImhwdXgiCisgICAgICA7OworICAgbWluZ3cqKQorICAgICAgcGNtX3BhY2thZ2U9IndpbmRvd3MiCisgICAgICA7OworICAgbXNkb3MqKQorICAgICAgcGNtX3BhY2thZ2U9Im5vbmUiCisgICAgICA7OworICAgbmV0YnNkKikKKyAgICAgIHBjbV9wYWNrYWdlPSJhdWRpbyIKKyAgICAgIDs7CisgICBvcGVuYnNkKikKKyAgICAgIHBjbV9wYWNrYWdlPSJhdWRpbyIKKyAgICAgIDs7CisgICBzb2xhcmlzKikKKyAgICAgIHBjbV9wYWNrYWdlPSJhdWRpbyIKKyAgICAgIDs7CitdLCBbZG5sCisgICBvc3MpCisgICAgICBBQ19DSEVDS19IRUFERVIoW3N5cy9zb3VuZGNhcmQuaF0sIFtkbmwKKyAgICAgICAgIHBjbV9wYWNrYWdlPSJvc3MiCisgICAgICBdKQorICAgICAgOzsKK10pCisKK0JSTFRUWV9BUkdfUEFDS0FHRShbbWlkaV0sIFtNSURJXSwgW2Fsc2Egb3NzXSwgW2RubAorICAgZGFyd2luKikKKyAgICAgIG1pZGlfcGFja2FnZT0iZGFyd2luIgorICAgICAgbWlkaV9saWJzPSItZnJhbWV3b3JrIEF1ZGlvVW5pdCAtZnJhbWV3b3JrIEF1ZGlvVG9vbGJveCIKKyAgICAgIDs7CisgICBtaW5ndyopCisgICAgICBtaWRpX3BhY2thZ2U9IndpbmRvd3MiCisgICAgICA7OworICAgbXNkb3MqKQorICAgICAgbWlkaV9wYWNrYWdlPSJub25lIgorICAgICAgOzsKK10sIFtkbmwKKyAgIG9zcykKKyAgICAgIEFDX0NIRUNLX0hFQURFUihbc3lzL3NvdW5kY2FyZC5oXSwgW2RubAorICAgICAgICAgbWlkaV9wYWNrYWdlPSJvc3MiCisgICAgICBdKQorICAgICAgOzsKK10pCisKK0JSTFRUWV9BUkdfUEFDS0FHRShbZm1dLCBbRk1dLCBbYWRsaWJdLCBbZG5sCitdLCBbZG5sCisgICBhZGxpYikKKyAgICAgIGZtX3BhY2thZ2U9ImFkbGliIgorICAgICAgOzsKK10pCisKK0JSTFRUWV9BUkdfUEFDS0FHRShbc2VyaWFsXSwgW3NlcmlhbCBJL09dLCBbdGVybWlvc10sIFtkbmwKKyAgIGVsZiopCisgICAgICBzZXJpYWxfcGFja2FnZT0iZ3J1YiIKKyAgICAgIDs7CisgICBtaW5ndyopCisgICAgICBzZXJpYWxfcGFja2FnZT0id2luZG93cyIKKyAgICAgIDs7CisgICBtc2RvcyopCisgICAgICBzZXJpYWxfcGFja2FnZT0ibXNkb3MiCisgICAgICA7OworXSwgW2RubAorICAgdGVybWlvcykKKyAgICAgIEFDX0NIRUNLX0hFQURFUihbdGVybWlvcy5oXSwgW2RubAorICAgICAgICAgc2VyaWFsX3BhY2thZ2U9InRlcm1pb3MiCisgICAgICAgICBBQ19DSEVDS19GVU5DUyhbdGNkcmFpbl0pCisgICAgICBdKQorICAgICAgOzsKK10pCisKK0JSTFRUWV9BUkdfUEFDS0FHRShbdXNiXSwgW1VTQiBJL09dLCBbd2ludXNiIGxpYnVzYi0xLjAgbGlidXNiXSwgW2RubAorICAgKmFuZHJvaWQqKQorICAgICAgdXNiX3BhY2thZ2U9ImFuZHJvaWQiCisgICAgICA7OworICAgZGFyd2luKikKKyAgICAgIHVzYl9wYWNrYWdlPSJkYXJ3aW4iCisgICAgICB1c2JfaW5jbHVkZXM9Ii14IG9iamVjdGl2ZS1jIgorICAgICAgOzsKKyAgIGVsZiopCisgICAgICB1c2JfcGFja2FnZT0iZ3J1YiIKKyAgICAgIDs7CisgICBmcmVlYnNkKikKKyAgICAgIHVzYl9wYWNrYWdlPSJmcmVlYnNkIgorICAgICAgOzsKKyAgIGtmcmVlYnNkKikKKyAgICAgIHVzYl9wYWNrYWdlPSJrZnJlZWJzZCIKKyAgICAgIEFDX0NIRUNLX0hFQURFUlMoW2xlZ2FjeS9kZXYvdXNiL3VzYi5oXSkKKyAgICAgIDs7CisgICBsaW51eCopCisgICAgICB1c2JfcGFja2FnZT0ibGludXgiCisgICAgICA7OworICAgbmV0YnNkKikKKyAgICAgIHVzYl9wYWNrYWdlPSJuZXRic2QiCisgICAgICA7OworICAgb3BlbmJzZCopCisgICAgICB1c2JfcGFja2FnZT0ib3BlbmJzZCIKKyAgICAgIDs7CisgICBzb2xhcmlzKikKKyAgICAgIHVzYl9wYWNrYWdlPSJzb2xhcmlzIgorICAgICAgQlJMVFRZX0hBVkVfTElCUkFSWShbYWlvXSkKKyAgICAgIEJSTFRUWV9IQVZFX0xJQlJBUlkoW3J0XSkKKyAgICAgIDs7CitdLCBbZG5sCisgICB3aW51c2IpCisgICAgICBCUkxUVFlfSEFWRV9IRUFERVIoW3dpbnVzYi5oXSwgW2RubAorICAgICAgICAgdXNiX3BhY2thZ2U9IndpbnVzYiIKKyAgICAgICAgIHVzYl9saWJzPSItbHdpbnVzYiIKKyAgICAgIF0pCisgICAgICA7OworICAgbGlidXNiKQorICAgICAgQlJMVFRZX0hBVkVfSEVBREVSKFt1c2IuaF0sIFtkbmwKKyAgICAgICAgIHVzYl9wYWNrYWdlPSJsaWJ1c2IiCisgICAgICAgICB1c2JfbGlicz0iLWx1c2IiCisgICAgICBdKQorICAgICAgOzsKK10pCisKK0JSTFRUWV9BUkdfUEFDS0FHRShbYmx1ZXRvb3RoXSwgW0JsdWV0b290aCBJL09dLCBbXSwgW2RubAorICAgKmFuZHJvaWQqKQorICAgICAgYmx1ZXRvb3RoX3BhY2thZ2U9ImFuZHJvaWQiCisgICAgICA7OworICAgZGFyd2luKikKKyAgICAgIGJsdWV0b290aF9wYWNrYWdlPSJkYXJ3aW4iCisgICAgICBibHVldG9vdGhfaW5jbHVkZXM9Ii14IG9iamVjdGl2ZS1jIgorICAgICAgYmx1ZXRvb3RoX2xpYnM9Ii1mcmFtZXdvcmsgSU9CbHVldG9vdGgiCisgICAgICA7OworICAgY3lnd2luKnxtaW5ndyopCisgICAgICBBQ19DSEVDS19IRUFERVIoW3dzMmJ0aC5oXSwgW2RubAorICAgICAgICAgYmx1ZXRvb3RoX3BhY2thZ2U9IndpbmRvd3MiCisgICAgICAgICBibHVldG9vdGhfbGlicz0iLWxidGhwcm9wcyAtbHdzMl8zMiIKKyAgICAgIF0sICwgW1sjaW5jbHVkZSA8d2luZG93cy5oPl1dKQorICAgICAgOzsKKyAgIGxpbnV4KikKKyAgICAgIEFDX0NIRUNLX0hFQURFUihbYmx1ZXRvb3RoL2JsdWV0b290aC5oXSwgW2RubAorICAgICAgICAgYmx1ZXRvb3RoX3BhY2thZ2U9ImxpbnV4IgorICAgICAgICAgQlJMVFRZX0hBVkVfTElCUkFSWShbYmx1ZXRvb3RoXSkKKworICAgICAgICAgQlJMVFRZX0lGX0RCVVMoW2RubAorICAgICAgICAgICAgYmx1ZXRvb3RoX2luY2x1ZGVzPSIke2RidXNfaW5jbHVkZXN9IgorICAgICAgICAgICAgYmx1ZXRvb3RoX2xpYnM9IiR7ZGJ1c19saWJzfSIKKyAgICAgICAgIF0pCisgICAgICBdKQorICAgICAgOzsKK10pCisKK0JSTFRUWV9BUkdfUEFDS0FHRShbaGlkXSwgW0h1bWFuIEludGVyZmFjZSBEZXZpY2UgSS9PXSwgW10sIFtkbmwKKyAgIGxpbnV4KikKKyAgICAgIEFDX0NIRUNLX0hFQURFUihbbGludXgvaGlkcmF3LmhdLCBbZG5sCisgICAgICAgICBCUkxUVFlfSEFWRV9QQUNLQUdFKFtsaWJ1ZGV2XSwgW2xpYnVkZXZdLCBbZG5sCisgICAgICAgICAgICBoaWRfcGFja2FnZT0ibGludXgiCisgICAgICAgICAgICBoaWRfaW5jbHVkZXM9IiR7bGlidWRldl9pbmNsdWRlc30iCisgICAgICAgICAgICBoaWRfbGlicz0iJHtsaWJ1ZGV2X2xpYnN9IgorICAgICAgICAgXSkKKyAgICAgICAgIEJSTFRUWV9IQVZFX0xJQlJBUlkoW2JsdWV0b290aF0pCisgICAgICBdKQorICAgICAgOzsKK10pCisKK0JSTFRUWV9BUkdfUEFDS0FHRShbcG9ydHNdLCBbSS9PIHBvcnRzXSwgW10sIFtkbmwKKyAgIGN5Z3dpbiopCisgICAgICBwb3J0c19wYWNrYWdlPSJ3aW5kb3dzIgorICAgICAgOzsKKyAgIGVsZiopCisgICAgICBwb3J0c19wYWNrYWdlPSJncnViIgorICAgICAgOzsKKyAgIGdudSopCisgICAgICBwb3J0c19wYWNrYWdlPSJnbGliYyIKKyAgICAgIDs7CisgICBrZnJlZWJzZCopCisgICAgICBwb3J0c19wYWNrYWdlPSJrZnJlZWJzZCIKKyAgICAgIDs7CisgICBsaW51eCopCisgICAgICBBQ19DSEVDS19GVU5DKFtpb3Blcm1dLCBbCisgICAgICAgICBwb3J0c19wYWNrYWdlPSJnbGliYyIKKyAgICAgIF0pCisgICAgICA7OworICAgbWluZ3cqKQorICAgICAgcG9ydHNfcGFja2FnZT0id2luZG93cyIKKyAgICAgIDs7CisgICBtc2RvcyopCisgICAgICBwb3J0c19wYWNrYWdlPSJtc2RvcyIKKyAgICAgIDs7CitdKQorCitCUkxUVFlfQlJBSUxMRV9EUklWRVIoW2FsXSwgW0FsdmFdKQorQlJMVFRZX0JSQUlMTEVfRFJJVkVSKFthdF0sIFtBbGJhdHJvc3NdKQordGVzdCAtbiAiJHthcGlfc2VydmVyX29iamVjdHN9IiAmJiB7CisgICBCUkxUVFlfQlJBSUxMRV9EUklWRVIoW2JhXSwgW0JybEFQSV0sIFskKEFQSV9MSUJTKV0pCit9CitCUkxUVFlfQlJBSUxMRV9EUklWRVIoW2JjXSwgW0JyYWlsQ29tbV0pCitCUkxUVFlfQlJBSUxMRV9EUklWRVIoW2JkXSwgW0JyYXVkaV0pCitCUkxUVFlfQlJBSUxMRV9EUklWRVIoW2JsXSwgW0JyYWlsbGVMaXRlXSkKK0JSTFRUWV9CUkFJTExFX0RSSVZFUihbYm1dLCBbQmF1bV0pCitCUkxUVFlfQlJBSUxMRV9EUklWRVIoW2JuXSwgW0JyYWlsbGVOb3RlXSkKK0JSTFRUWV9CUkFJTExFX0RSSVZFUihbY2JdLCBbQ29tYmlCcmFpbGxlXSkKK0JSTFRUWV9CUkFJTExFX0RSSVZFUihbY2VdLCBbQ2VicmFdKQorQlJMVFRZX0JSQUlMTEVfRFJJVkVSKFtjbl0sIFtDYW51dGVdKQorQlJMVFRZX0JSQUlMTEVfRFJJVkVSKFtkcF0sIFtEb3RQYWRdKQorQlJMVFRZX0JSQUlMTEVfRFJJVkVSKFtlY10sIFtFY29CcmFpbGxlXSkKK0JSTFRUWV9CUkFJTExFX0RSSVZFUihbZXVdLCBbRXVyb0JyYWlsbGVdKQorQlJMVFRZX0JSQUlMTEVfRFJJVkVSKFtmYV0sIFtGcmFua0F1ZGlvZGF0YV0pCitCUkxUVFlfQlJBSUxMRV9EUklWRVIoW2ZzXSwgW0ZyZWVkb21TY2llbnRpZmljXSkKK0JSTFRUWV9CUkFJTExFX0RSSVZFUihbaGRdLCBbSGVkb10pCitCUkxUVFlfQlJBSUxMRV9EUklWRVIoW2htXSwgW0hJTVNdKQorQlJMVFRZX0JSQUlMTEVfRFJJVkVSKFtodF0sIFtIYW5keVRlY2hdKQorQlJMVFRZX0JSQUlMTEVfRFJJVkVSKFtod10sIFtIdW1hbldhcmVdKQorQlJMVFRZX0JSQUlMTEVfRFJJVkVSKFtpcl0sIFtJcmlzXSkKK0JSTFRUWV9CUkFJTExFX0RSSVZFUihbaWNdLCBbSW5jZXB0b3JdKQorQlJMVFRZX0lGX1BBQ0tBR0UoW0xpYmJyYWlsbGVdLCBbbGliYnJhaWxsZV0sIFtpbmNsdWRlL2JyYWlsbGUuaF0sIFtkbmwKKyAgIEJSTFRUWV9CUkFJTExFX0RSSVZFUihbbGJdLCBbTGliYnJhaWxsZV0sIFstTCQoTElCQlJBSUxMRV9ST09UKS9saWIgLWxicmFpbGxlXSkKK10pCitCUkxUVFlfQlJBSUxMRV9EUklWRVIoW2x0XSwgW0xvZ1RleHRdKQorQlJMVFRZX0JSQUlMTEVfRFJJVkVSKFttYl0sIFtNdWx0aUJyYWlsbGVdKQorQlJMVFRZX0JSQUlMTEVfRFJJVkVSKFttZF0sIFtNRFZdKQorQlJMVFRZX0JSQUlMTEVfRFJJVkVSKFttbV0sIFtCcmFpbGxlTWVtb10pCitCUkxUVFlfQlJBSUxMRV9EUklWRVIoW21uXSwgW01pbmlCcmFpbGxlXSkKK0JSTFRUWV9CUkFJTExFX0RSSVZFUihbbXRdLCBbTWV0ZWNdKQorQlJMVFRZX0JSQUlMTEVfRFJJVkVSKFtucF0sIFtOaW5lUG9pbnRdKQorQlJMVFRZX0JSQUlMTEVfRFJJVkVSKFtwZ10sIFtQZWdhc3VzXSkKK0JSTFRUWV9CUkFJTExFX0RSSVZFUihbcG1dLCBbUGFwZW5tZWllcl0pCitCUkxUVFlfQlJBSUxMRV9EUklWRVIoW3NrXSwgW1NlaWthXSkKK0JSTFRUWV9CUkFJTExFX0RSSVZFUihbdG5dLCBbVGVjaG5pQnJhaWxsZV0pCitCUkxUVFlfQlJBSUxMRV9EUklWRVIoW3RzXSwgW1RTSV0pCitCUkxUVFlfQlJBSUxMRV9EUklWRVIoW3R0XSwgW1RUWV0sIFskKENVUlNFU19MSUJTKV0pCitCUkxUVFlfQlJBSUxMRV9EUklWRVIoW3ZkXSwgW1ZpZGVvQnJhaWxsZV0pCitCUkxUVFlfQlJBSUxMRV9EUklWRVIoW3ZvXSwgW1ZveWFnZXJdKQorQlJMVFRZX0JSQUlMTEVfRFJJVkVSKFt2cl0sIFtWaXJ0dWFsXSkKK0JSTFRUWV9CUkFJTExFX0RSSVZFUihbdnNdLCBbVmlzaW9CcmFpbGxlXSkKK3Rlc3QgLW4gIiR7Z3VpX3Rvb2xraXRfcGFja2FnZX0iICYmIHsKKyAgIEJSTFRUWV9CUkFJTExFX0RSSVZFUihbeHddLCBbWFdpbmRvd10sIFskKFhUS19MSUJTKSAkKFgxMV9MSUJTKV0pCit9CitjYXNlICIke2hvc3Rfb3N9IgoraW4KKyAgIGxpbnV4KikKKyAgICAgIEJSTFRUWV9CUkFJTExFX0RSSVZFUihbYmddLCBbQjJHXSkKKyAgICAgIDs7CisgICAqKSA7OworZXNhYworQlJMVFRZX0FSR19EUklWRVIoW2JyYWlsbGVdLCBbQnJhaWxsZV0pCisKK0FDX0NBQ0hFX0NIRUNLKFtmb3IgZGV2aWNlIGRpcmVjdG9yeV0sIFticmx0dHlfY3ZfZGV2aWNlX2RpcmVjdG9yeV0sIFtkbmwKK2Nhc2UgIiR7aG9zdF9vc30iCitpbgorICAgbWluZ3cqKQorICAgICAgYnJsdHR5X2N2X2RldmljZV9kaXJlY3Rvcnk9Ii8vLiIKKyAgICAgIDs7CisgICBlbGYqfG1zZG9zKikKKyAgICAgIGJybHR0eV9jdl9kZXZpY2VfZGlyZWN0b3J5PSIiCisgICAgICA7OworICAgKikKKyAgICAgIGJybHR0eV9jdl9kZXZpY2VfZGlyZWN0b3J5PSIvZGV2IgorICAgICAgOzsKK2VzYWNdKQorQUNfREVGSU5FX1VOUVVPVEVEKFtERVZJQ0VfRElSRUNUT1JZXSwgWyIke2JybHR0eV9jdl9kZXZpY2VfZGlyZWN0b3J5fSJdLAorICAgICAgICAgICAgICAgICAgIFtEZWZpbmUgdGhpcyB0byBiZSBhIHN0cmluZyBjb250YWluaW5nIHRoZSBwYXRoIHRvIHRoZSBkaXJlY3RvcnkgY29udGFpbmluZyB0aGUgZGV2aWNlcy5dKQorCitBQ19DQUNIRV9DSEVDSyhbZm9yIGZpcnN0IHNlcmlhbCBkZXZpY2VdLCBbYnJsdHR5X2N2X2RldmljZV9zZXJpYWxfZmlyc3RdLCBbZG5sCitjYXNlICIke2hvc3Rfb3N9IgoraW4KKyAgIGxpbnV4KikKKyAgICAgIGJybHR0eV9jdl9kZXZpY2Vfc2VyaWFsX2ZpcnN0PSJ0dHlTMCIKKyAgICAgIDs7CisgICBnbnUqKQorICAgICAgYnJsdHR5X2N2X2RldmljZV9zZXJpYWxfZmlyc3Q9ImNvbTAiCisgICAgICA7OworICAgc29sYXJpcyopCisgICAgICBicmx0dHlfY3ZfZGV2aWNlX3NlcmlhbF9maXJzdD0idHR5YSIKKyAgICAgIDs7CisgICBoYWlrdSopCisgICAgICBicmx0dHlfY3ZfZGV2aWNlX3NlcmlhbF9maXJzdD0icG9ydHMvcGNfc2VyaWFsMCIKKyAgICAgIDs7CisgICBocHV4KikKKyAgICAgIGJybHR0eV9jdl9kZXZpY2Vfc2VyaWFsX2ZpcnN0PSJ0dHkwcDAiCisgICAgICA7OworICAgb3BlbmJzZCopCisgICAgICBicmx0dHlfY3ZfZGV2aWNlX3NlcmlhbF9maXJzdD0iY3VhMDAiCisgICAgICA7OworICAgZnJlZWJzZCopCisgICAgICBicmx0dHlfY3ZfZGV2aWNlX3NlcmlhbF9maXJzdD0iY3VhYTAiCisgICAgICA7OworICAga2ZyZWVic2QqKQorICAgICAgYnJsdHR5X2N2X2RldmljZV9zZXJpYWxfZmlyc3Q9ImN1YWEwIgorICAgICAgOzsKKyAgIG5ldGJzZCopCisgICAgICBicmx0dHlfY3ZfZGV2aWNlX3NlcmlhbF9maXJzdD0iZHR5MDAiCisgICAgICA7OworICAgb3NmKikKKyAgICAgIGJybHR0eV9jdl9kZXZpY2Vfc2VyaWFsX2ZpcnN0PSJ0dHkwMCIKKyAgICAgIDs7CisgICAqcW54KikKKyAgICAgIGJybHR0eV9jdl9kZXZpY2Vfc2VyaWFsX2ZpcnN0PSJzZXIxIgorICAgICAgOzsKKyAgIGN5Z3dpbiopCisgICAgICBicmx0dHlfY3ZfZGV2aWNlX3NlcmlhbF9maXJzdD0idHR5UzAiCisgICAgICA7OworICAgbWluZ3cqfG1zZG9zKikKKyAgICAgIGJybHR0eV9jdl9kZXZpY2Vfc2VyaWFsX2ZpcnN0PSJDT00xIgorICAgICAgOzsKKyAgIGVsZiopCisgICAgICBicmx0dHlfY3ZfZGV2aWNlX3NlcmlhbF9maXJzdD0iY29tMCIKKyAgICAgIDs7CisgICAqKQorICAgICAgYnJsdHR5X2N2X2RldmljZV9zZXJpYWxfZmlyc3Q9IiIKKyAgICAgIEFDX01TR19XQVJOKFtwcmltYXJ5IHNlcmlhbCBkZXZpY2Ugbm90IGNvbmZpZ3VyZWQgZm9yICR7aG9zdF9vc31dKQorICAgICAgOzsKK2VzYWNdKQorQUNfU1VCU1QoW3NlcmlhbF9maXJzdF9kZXZpY2VdLCBbJHticmx0dHlfY3ZfZGV2aWNlX3NlcmlhbF9maXJzdH1dKQorQUNfREVGSU5FX1VOUVVPVEVEKFtTRVJJQUxfRklSU1RfREVWSUNFXSwgWyIke3NlcmlhbF9maXJzdF9kZXZpY2V9Il0sCisgICAgICAgICAgICAgICAgICAgW0RlZmluZSB0aGlzIHRvIGJlIGEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIHBhdGggdG8gdGhlIGZpcnN0IHNlcmlhbCBkZXZpY2UuXSkKKworQlJMVFRZX0FSR19XSVRIKAorICAgW2JyYWlsbGUtZGV2aWNlXSwgW0RFVklDRV0sCisgICBbZGVmYXVsdCBicmFpbGxlIGRldmljZV0sCisgICBbYnJhaWxsZV9kZXZpY2VdLCBbInllcyJdCispCitpZiB0ZXN0ICIke2JyYWlsbGVfZGV2aWNlfSIgPSAibm8iCit0aGVuCisgICBicmFpbGxlX2RldmljZT0iIgorZWxpZiB0ZXN0ICIke2JyYWlsbGVfZGV2aWNlfSIgPSAieWVzIgordGhlbgorICAgYnJhaWxsZV9kZXZpY2U9IiIKKyAgIHRlc3QgIiR7dXNiX3BhY2thZ2V9IiAhPSAibm9uZSIgJiYgYnJhaWxsZV9kZXZpY2U9IiR7YnJhaWxsZV9kZXZpY2V9LHVzYjoiCisgICB0ZXN0ICIke2JsdWV0b290aF9wYWNrYWdlfSIgIT0gIm5vbmUiICYmIGJyYWlsbGVfZGV2aWNlPSIke2JyYWlsbGVfZGV2aWNlfSxibHVldG9vdGg6IgorCisgICBpZiB0ZXN0IC1uICIke2JyYWlsbGVfZGV2aWNlfSIKKyAgIHRoZW4KKyAgICAgIGJyYWlsbGVfZGV2aWNlPSIke2JyYWlsbGVfZGV2aWNlIyx9IgorICAgZWxzZQorICAgICAgYnJhaWxsZV9kZXZpY2U9InNlcmlhbDoke3NlcmlhbF9maXJzdF9kZXZpY2V9IgorICAgZmkKK2ZpCitBQ19TVUJTVChbYnJhaWxsZV9kZXZpY2VdKQorQUNfREVGSU5FX1VOUVVPVEVEKFtCUkFJTExFX0RFVklDRV0sIFsiJHticmFpbGxlX2RldmljZX0iXSwKKyAgICAgICAgICAgICAgICAgICBbRGVmaW5lIHRoaXMgdG8gYmUgYSBzdHJpbmcgY29udGFpbmluZyB0aGUgcGF0aCB0byB0aGUgZGVmYXVsdCBicmFpbGxlIGRldmljZS5dKQorQlJMVFRZX1NVTU1BUllfSVRFTShbYnJhaWxsZS1kZXZpY2VdLCBbYnJhaWxsZV9kZXZpY2VdKQorCitCUkxUVFlfQVJHX1RBQkxFKFt0ZXh0XSwgW2VuLW5hYmNjXSwgW3R0Yl0pCitCUkxUVFlfQVJHX1RBQkxFKFtjb250cmFjdGlvbl0sIFtub25lXSwgW2N0Yl0pCitCUkxUVFlfQVJHX1RBQkxFKFthdHRyaWJ1dGVzXSwgW2xlZnRfcmlnaHRdLCBbYXRiXSkKKworQlJMVFRZX0FSR19ESVNBQkxFKAorICAgW3NwZWVjaC1zdXBwb3J0XSwKKyAgIFtzdXBwb3J0IGZvciBzcGVlY2ggc3ludGhlc2l6ZXJzIGFuZCB0ZXh0LXRvLXNwZWVjaCBlbmdpbmVzXSwKKyAgIFtdLAorW2RubAorICAgQUNfREVGSU5FKFtFTkFCTEVfU1BFRUNIX1NVUFBPUlRdLCBbMV0sCisgICAgICAgICAgICAgW0RlZmluZSB0aGlzIHRvIGluY2x1ZGUgc3BlZWNoIHN5bnRoZXNpemVyIGFuZCB0ZXh0LXRvLXNwZWVjaCBlbmdpbmUgc3VwcG9ydC5dKQorICAgc3BlZWNoX3N1cHBvcnRfb2JqZWN0PSdzcGsuJE8nCisKKyAgIEJSTFRUWV9TUEVFQ0hfRFJJVkVSKFthbF0sIFtBbHZhXSkKKyAgIEJSTFRUWV9TUEVFQ0hfRFJJVkVSKFtibF0sIFtCcmFpbGxlTGl0ZV0pCisgICBCUkxUVFlfU1BFRUNIX0RSSVZFUihbY2JdLCBbQ29tYmlCcmFpbGxlXSkKKworICAgQlJMVFRZX0lGX1BBQ0tBR0UoW2VTcGVhay1OR10sIFtlc3BlYWtfbmddLCBbaW5jbHVkZS9lc3BlYWstbmcvc3BlYWtfbGliLmhdLCBbZG5sCisgICAgICBCUkxUVFlfU1BFRUNIX0RSSVZFUihbZW5dLCBbZVNwZWFrLU5HXSwgWy1MJChFU1BFQUtfTkdfUk9PVCkvbGliIC1sZXNwZWFrLW5nXSkKKyAgIF0pCisKKyAgIEJSTFRUWV9JRl9QQUNLQUdFKFtlU3BlYWtdLCBbZXNwZWFrXSwgW2luY2x1ZGUvZXNwZWFrL3NwZWFrX2xpYi5oXSwgW2RubAorICAgICAgQlJMVFRZX1NQRUVDSF9EUklWRVIoW2VzXSwgW2VTcGVha10sIFstTCQoRVNQRUFLX1JPT1QpL2xpYiAtbGVzcGVha10pCisgICBdKQorCisgICBCUkxUVFlfSUZfUEFDS0FHRShbRmVzdGl2YWxMaXRlXSwgW2ZsaXRlXSwgW2luY2x1ZGUvZmxpdGUvZmxpdGUuaF0sIFtkbmwKKyAgICAgIEJSTFRUWV9BUkdfUkVRVUlSRUQoCisgICAgICAgICBbZmxpdGUtbGFuZ3VhZ2VdLCBbTEFOR1VBR0VdLAorICAgICAgICAgW3RoZSBGZXN0aXZhbExpdGUgbGFuZ3VhZ2UgdG8gdXNlXSwKKyAgICAgICAgIFtmbGl0ZV9sYW5ndWFnZV0sIFsidXNlbmdsaXNoIl0KKyAgICAgICkKKworICAgICAgQlJMVFRZX0FSR19SRVFVSVJFRCgKKyAgICAgICAgIFtmbGl0ZS1sZXhpY29uXSwgW0xFWElDT05dLAorICAgICAgICAgW3RoZSBGZXN0aXZhbExpdGUgbGV4aWNvbiB0byB1c2VdLAorICAgICAgICAgW2ZsaXRlX2xleGljb25dLCBbImNtdWxleCJdCisgICAgICApCisKKyAgICAgIEJSTFRUWV9BUkdfUkVRVUlSRUQoCisgICAgICAgICBbZmxpdGUtdm9pY2VdLCBbVk9JQ0VdLAorICAgICAgICAgW3RoZSBGZXN0aXZhbExpdGUgdm9pY2UgdG8gdXNlXSwKKyAgICAgICAgIFtmbGl0ZV92b2ljZV0sIFsiY211X3VzX2thbCJdCisgICAgICApCisKKyAgICAgIEJSTFRUWV9TUEVFQ0hfRFJJVkVSKFtmbF0sIFtGZXN0aXZhbExpdGVdLCBbLUwkKEZMSVRFX1JPT1QpL2xpYiAtbGZsaXRlXyQoRkxJVEVfVk9JQ0UpIC1sZmxpdGVfJChGTElURV9MRVhJQ09OKSAtbGZsaXRlXyQoRkxJVEVfTEFOR1VBR0UpIC1sZmxpdGUgLWxtXSkKKyAgIF0pCisKKyAgIEJSTFRUWV9TUEVFQ0hfRFJJVkVSKFtmdl0sIFtGZXN0aXZhbF0pCisgICBCUkxUVFlfU1BFRUNIX0RSSVZFUihbZ3NdLCBbR2VuZXJpY1NheV0pCisKKyAgIEJSTFRUWV9JRl9QQUNLQUdFKFtNaWtyb3B1aGVdLCBbbWlrcm9wdWhlXSwgW21wd3JmaWxlLmhdLCBbZG5sCisgICAgICBCUkxUVFlfSUZfUFRIUkVBRFMoW2RubAorICAgICAgICAgQlJMVFRZX1NQRUVDSF9EUklWRVIoW21wXSwgW01pa3JvcHVoZV0sIFstTCQoTVBMSU5VWF9ST09UKSAtbG1wbGludXhdKQorICAgICAgXSkKKyAgIF0pCisKKyAgIEJSTFRUWV9JRl9QQUNLQUdFKFtzcGVlY2gtZGlzcGF0Y2hlcl0sIFtzcGVlY2hkXSwgW2luY2x1ZGUvbGlic3BlZWNoZC5oXSwgW2RubAorICAgICAgQlJMVFRZX1NQRUVDSF9EUklWRVIoW3NkXSwgW1NwZWVjaERpc3BhdGNoZXJdKQorICAgXSwgW2luY2x1ZGVdLCBbbGliXSwgW3NwZWVjaGRdKQorCisgICBCUkxUVFlfSUZfUEFDS0FHRShbU3dpZnRdLCBbc3dpZnRdLCBbaW5jbHVkZS9zd2lmdC5oXSwgW2RubAorICAgICAgQlJMVFRZX1NQRUVDSF9EUklWRVIoW3N3XSwgW1N3aWZ0XSwgWy1MJChTV0lGVF9ST09UKS9saWIgLWxzd2lmdCAtbG1dKQorICAgXSkKKworICAgQlJMVFRZX0lGX1BBQ0tBR0UoW1RoZXRhXSwgW3RoZXRhXSwgW2luY2x1ZGUvdGhldGEuaF0sIFtkbmwKKyAgICAgIEJSTFRUWV9TUEVFQ0hfRFJJVkVSKFt0aF0sIFtUaGV0YV0sIFstTCQoVEhFVEFfUk9PVCkvbGliIC1sdGhldGFdKQorICAgXSkKKworICAgQUNfQ0hFQ0tfSEVBREVSKFtlY2kuaF0sIFtkbmwKKyAgICAgIEJSTFRUWV9TUEVFQ0hfRFJJVkVSKFt2dl0sIFtWaWFWb2ljZV0sIFstbGlibWVjaV0pCisgICBdKQorCisgICBCUkxUVFlfU1BFRUNIX0RSSVZFUihbeHNdLCBbRXh0ZXJuYWxTcGVlY2hdKQorCisgICBjYXNlICIke2hvc3Rfb3N9IgorICAgaW4KKyAgICAgICphbmRyb2lkKikKKyAgICAgICAgIEJSTFRUWV9TUEVFQ0hfRFJJVkVSKFthbl0sIFtBbmRyb2lkXSkKKyAgICAgICAgIDs7CisgICAgICAqKSA7OworICAgZXNhYworXSkKK0FDX1NVQlNUKFtzcGVlY2hfc3VwcG9ydF9vYmplY3RdKQorQlJMVFRZX0FSR19EUklWRVIoW3NwZWVjaF0sIFtTcGVlY2hdKQorCitjYXNlICIke2hvc3Rfb3N9IgoraW4KKyAgICphbmRyb2lkKikKKyAgICAgIEJSTFRUWV9TQ1JFRU5fRFJJVkVSKFthbl0sIFtBbmRyb2lkXSkKKyAgICAgIDs7CisgICBsaW51eCopCisgICAgICBCUkxUVFlfU0NSRUVOX0RSSVZFUihbbHhdLCBbTGludXhdKQorICAgICAgOzsKKyAgIGdudSopCisgICAgICBCUkxUVFlfU0NSRUVOX0RSSVZFUihbaGRdLCBbSHVyZF0pCisgICAgICA7OworICAgY3lnd2luKnxtaW5ndyopCisgICAgICBCUkxUVFlfU0NSRUVOX0RSSVZFUihbd25dLCBbV2luZG93c10pCisgICAgICBicmx0dHlfYnVpbGRfZGlyZWN0b3JpZXM9IiR7YnJsdHR5X2J1aWxkX2RpcmVjdG9yaWVzfSBEcml2ZXJzL0JybEFQSS9XaW5kb3dFeWVzIgorICAgICAgOzsKKyAgIG1zZG9zKikKKyAgICAgIEJSTFRUWV9TQ1JFRU5fRFJJVkVSKFtwYl0sIFtQY0Jpb3NdKQorICAgICAgOzsKKyAgIGVsZiopCisgICAgICBCUkxUVFlfU0NSRUVOX0RSSVZFUihbZ2JdLCBbR3J1Yl0pCisgICAgICA7OworICAgKikKKyAgICAgIEFDX01TR19XQVJOKFtubyBuYXRpdmUgc2NyZWVuIGRyaXZlciBmb3IgJHtob3N0X29zfV0pCisgICAgICA7OworZXNhYworCitCUkxUVFlfU0NSRUVOX0RSSVZFUihbZnZdLCBbRmlsZVZpZXdlcl0pCisKK2FsbF9icmx0dHlfcHR5PSIiCitpbnN0YWxsX2JybHR0eV9wdHk9IiIKK0FDX0NIRUNLX0hFQURFUihbc3lzL3NobS5oXSwgW2RubAorICAgQlJMVFRZX1NDUkVFTl9EUklWRVIoW3NjXSwgW1NjcmVlbl0pCisKKyAgIEFDX0NIRUNLX0hFQURFUihbc3lzL21zZy5oXSwgW2RubAorICAgICAgQlJMVFRZX1NDUkVFTl9EUklWRVIoW2VtXSwgW1Rlcm1pbmFsRW11bGF0b3JdKQorCisgICAgICBpZiB0ZXN0IC1uICIke2N1cnNlc19wYWNrYWdlfSIKKyAgICAgIHRoZW4KKyAgICAgICAgIGFsbF9icmx0dHlfcHR5PSJhbGwtYnJsdHR5LXB0eSIKKyAgICAgICAgIGluc3RhbGxfYnJsdHR5X3B0eT0iaW5zdGFsbC1icmx0dHktcHR5IgorICAgICAgZmkKKyAgIF0pCitdKQorQUNfU1VCU1QoW2FsbF9icmx0dHlfcHR5XSkKK0FDX1NVQlNUKFtpbnN0YWxsX2JybHR0eV9wdHldKQorCitpZiB0ZXN0ICIke2JybHR0eV9lbmFibGVkX3h9IiA9ICJ5ZXMiCit0aGVuCisgICBCUkxUVFlfSEFWRV9QQUNLQUdFKFtjc3BpXSwgW2NzcGktMS4wXSwgW2RubAorICAgICAgQUNfQ0hFQ0tfSEVBREVSKFtYMTEva2V5c3ltLmhdLCBbZG5sCisgICAgICAgICBBQ19DSEVDS19IRUFERVIoW1gxMS9YbGliLmhdLCBbZG5sCisgICAgICAgICAgICBCUkxUVFlfU0NSRUVOX0RSSVZFUihbYXNdLCBbQXRTcGldLCBbJChYMTFfTElCUykgJChDU1BJX0xJQlMpXSkKKyAgICAgICAgIF0pCisgICAgICBdKQorICAgXSwgWzpdKQorZmkKKworQlJMVFRZX0lGX0RCVVMoW2RubAorICAgQUNfQ0hFQ0tfSEVBREVSKFtYMTEva2V5c3ltLmhdLCBbZG5sCisgICAgICBCUkxUVFlfSEFWRV9QQUNLQUdFKFthdHNwaTJdLCBbYXRzcGktMl0sIFtkbmwKKyAgICAgICAgIGJybHR0eV9jcHBmbGFnc19zYXZlPSIke0NQUEZMQUdTfSIKKyAgICAgICAgIENQUEZMQUdTPSIke0NQUEZMQUdTfSAke2F0c3BpMl9jZmxhZ3N9IgorICAgICAgICAgQlJMVFRZX1NDUkVFTl9EUklWRVIoW2EyXSwgW0F0U3BpMl0sIFskKERCVVNfTElCUykgJChBVFNQSTJfTElCUykgJChHTElCMl9MSUJTKSAkKFgxMV9MSUJTKSAkKFhGSVhFU19MSUJTKV0pCisKKyAgICAgICAgIGJybHR0eV9saWJzX3NhdmU9IiR7TElCU30iCisgICAgICAgICBMSUJTPSIke2F0c3BpMl9saWJzfSAke0xJQlN9IgorCisgICAgICAgICBBQ19DSEVDS19GVU5DUyhbYXRzcGlfZ2V0X2ExMXlfYnVzXSkKKworICAgICAgICAgQ1BQRkxBR1M9IiR7YnJsdHR5X2NwcGZsYWdzX3NhdmV9IgorICAgICAgICAgTElCUz0iJHticmx0dHlfbGlic19zYXZlfSIKKworICAgICAgICAgQlJMVFRZX0hBVkVfUEFDS0FHRShbZ2xpYjJdLCBbZ2xpYi0yLjBdKQorICAgICAgXSkKKyAgIF0pCitdKQorCitCUkxUVFlfQVJHX0RSSVZFUihbc2NyZWVuXSwgW1NjcmVlbl0pCitCUkxUVFlfU1VNTUFSWV9JVEVNKFtzY3JlZW4tZHJpdmVyXSwgW2RlZmF1bHRfc2NyZWVuX2RyaXZlcl0pCisKK0JSTFRUWV9BUkdfRU5BQkxFKAorICAgW3JlbG9jYXRhYmxlLWluc3RhbGxdLAorICAgW2luc3RhbGxhdGlvbiB1c2luZyBwYXRocyByZWxhdGl2ZSB0byB0aGUgcHJvZ3JhbSBkaXJlY3RvcnldKQorCitjYXNlICIke2hvc3Rfb3N9IgoraW4KKyAgIGRhcndpbiopCisgICAgICBJTlNUQUxMX09QVElPTl9TVFJJUD0iIgorICAgICAgOzsKKyAgICopCisgICAgICBJTlNUQUxMX09QVElPTl9TVFJJUD0iLXMiCisgICAgICA7OworZXNhYworCitpZiB0ZXN0ICIke2Nyb3NzX2NvbXBpbGluZ30iICE9ICJubyIKK3RoZW4KKyAgIGlmIHRlc3QgLW4gIiR7SU5TVEFMTF9PUFRJT05fU1RSSVB9IgorICAgdGhlbgorICAgICAgSU5TVEFMTF9PUFRJT05fU1RSSVA9IiR7SU5TVEFMTF9PUFRJT05fU1RSSVB9IC0tc3RyaXAtcHJvZ3JhbSAke1NUUklQfSIKKyAgIGZpCitmaQorCitCUkxUVFlfQVJHX0RJU0FCTEUoCisgICBbc3RyaXBwaW5nXSwKKyAgIFtzdHJpcHBpbmcgb2YgZXhlY3V0YWJsZXMgYW5kIHNoYXJlZCBvYmplY3RzIGR1cmluZyBpbnN0YWxsYXRpb25dLAorICAgW10sCisgICBbXSwKKyAgIFtJTlNUQUxMX09QVElPTl9TVFJJUD0iIl0KKykKK0FDX1NVQlNUKFtJTlNUQUxMX09QVElPTl9TVFJJUF0pCisKK29yaWdpbmFsX3ByZWZpeD0iJHtwcmVmaXh9IgordGVzdCAiJHtwcmVmaXh9IiA9ICJOT05FIiAmJiBwcmVmaXg9IiIKK29yaWdpbmFsX2V4ZWNfcHJlZml4PSIke2V4ZWNfcHJlZml4fSIKK3Rlc3QgIiR7ZXhlY19wcmVmaXh9IiA9ICJOT05FIiAmJiBleGVjX3ByZWZpeD0iJHtwcmVmaXh9IgorQlJMVFRZX1ZBUl9FWFBBTkQoW2JybHR0eV9yZWZlcmVuY2VfZGlyZWN0b3J5XSwgWyR7ZXhlY3V0ZV9yb290fSR7cHJvZ3JhbV9kaXJlY3Rvcnl9XSkKKworQlJMVFRZX0RFRklORV9ESVJFQ1RPUlkoW0xPQ0FMRV9ESVJFQ1RPUlldLCBbJHtleGVjdXRlX3Jvb3R9JHtsb2NhbGVkaXJ9XSwKKyAgICAgICAgICAgICAgICAgICAgICAgIFtEZWZpbmUgdGhpcyB0byBiZSBhIHN0cmluZyBjb250YWluaW5nIHRoZSBwYXRoIHRvIHRoZSBsb2NhbGUgZGlyZWN0b3J5Ll0pCisKK0JSTFRUWV9ERUZJTkVfRElSRUNUT1JZKFtUQUJMRVNfRElSRUNUT1JZXSwgWyR7ZXhlY3V0ZV9yb290fSR7dGFibGVzX2RpcmVjdG9yeX1dLAorICAgICAgICAgICAgICAgICAgICAgICAgW0RlZmluZSB0aGlzIHRvIGJlIGEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIHBhdGggdG8gdGhlIGRhdGEgZmlsZXMgZGlyZWN0b3J5Ll0pCisKK0JSTFRUWV9ERUZJTkVfRElSRUNUT1JZKFtEUklWRVJTX0RJUkVDVE9SWV0sIFske2V4ZWN1dGVfcm9vdH0ke2RyaXZlcnNfZGlyZWN0b3J5fV0sCisgICAgICAgICAgICAgICAgICAgICAgICBbRGVmaW5lIHRoaXMgdG8gYmUgYSBzdHJpbmcgY29udGFpbmluZyB0aGUgcGF0aCB0byB0aGUgZHJpdmVycyBkaXJlY3RvcnkuXSkKKworQlJMVFRZX0RFRklORV9ESVJFQ1RPUlkoW0NPTU1BTkRTX0RJUkVDVE9SWV0sIFske2V4ZWN1dGVfcm9vdH0ke2NvbW1hbmRzX2RpcmVjdG9yeX1dLAorICAgICAgICAgICAgICAgICAgICAgICAgW0RlZmluZSB0aGlzIHRvIGJlIGEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIHBhdGggdG8gdGhlIGhlbHBlciBjb21tYW5kcyBkaXJlY3RvcnkuXSkKKworQlJMVFRZX1BVQkxJQ19ESVJFQ1RPUlkoW0NPTkZJR1VSQVRJT05fRElSRUNUT1JZXSwgWyR7c3lzY29uZmRpcn1dLAorICAgICAgICAgICAgICAgICAgICAgICAgW0RlZmluZSB0aGlzIHRvIGJlIGEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIHBhdGggdG8gdGhlIGNvbmZpZ3VyYXRpb24gZGlyZWN0b3J5Ll0pCisKK2lmIHRlc3QgLW4gIiR7dXBkYXRhYmxlX2RpcmVjdG9yeX0iCit0aGVuCisgICBCUkxUVFlfUFVCTElDX0RJUkVDVE9SWShbVVBEQVRBQkxFX0RJUkVDVE9SWV0sIFske3VwZGF0YWJsZV9kaXJlY3Rvcnl9XSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFtEZWZpbmUgdGhpcyB0byBiZSBhIHN0cmluZyBjb250YWluaW5nIHRoZSBwYXRoIHRvIGEgZGlyZWN0b3J5IHdoaWNoIGNvbnRhaW5zIGZpbGVzIHRoYXQgY2FuIGJlIHVwZGF0ZWQuXSkKK2ZpCisKK2lmIHRlc3QgLW4gIiR7d3JpdGFibGVfZGlyZWN0b3J5fSIKK3RoZW4KKyAgIEJSTFRUWV9QVUJMSUNfRElSRUNUT1JZKFtXUklUQUJMRV9ESVJFQ1RPUlldLCBbJHt3cml0YWJsZV9kaXJlY3Rvcnl9XSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFtEZWZpbmUgdGhpcyB0byBiZSBhIHN0cmluZyBjb250YWluaW5nIHRoZSBwYXRoIHRvIGEgd3JpdGFibGUgZGlyZWN0b3J5Ll0pCitmaQorCitCUkxUVFlfUFVCTElDX0RJUkVDVE9SWShbQlJMQVBJX0VUQ0RJUl0sIFske0NPTkZJR1VSQVRJT05fRElSRUNUT1JZfV0sCisgICAgICAgICAgICAgICAgICAgICAgICBbRGVmaW5lIHRoaXMgdG8gYmUgYSBzdHJpbmcgY29udGFpbmluZyB0aGUgcGF0aCB0byBCcmxBUEkncyBkYXRhIGZpbGVzIGRpcmVjdG9yeS5dKQorCitCUkxUVFlfUFVCTElDX0RJUkVDVE9SWShbQlJMQVBJX1NPQ0tFVFBBVEhdLCBbJHthcGlfc29ja2V0X3BhdGh9XSwKKyAgICAgICAgICAgICAgICAgICAgICAgIFtEZWZpbmUgdGhpcyB0byBiZSBhIHN0cmluZyBjb250YWluaW5nIHRoZSBwYXRoIHRvIEJybEFQSSdzIGxvY2FsIHNvY2tldHMgZGlyZWN0b3J5Ll0pCisKK3ByZWZpeD0iJHtvcmlnaW5hbF9wcmVmaXh9IgorZXhlY19wcmVmaXg9IiR7b3JpZ2luYWxfZXhlY19wcmVmaXh9IgorCitBQ19TVUJTVChbaW5zdGFsbF9kcml2ZXJzXSkKK0JSTFRUWV9TVU1NQVJZX0VORAorCitbYnJsdHR5X21ha2VfZmlsZXM9ImBlY2hvICIke2JybHR0eV9idWlsZF9kaXJlY3Rvcmllc30iIHwgc2VkIC1lICcKK3MlXChbXiBdW14gXSpcKSVcMS9NYWtlZmlsZTpwcm9sb2d1ZS5tazpcMS9NYWtlZmlsZS5pbiVnCisnYCJdCisKK0FDX0NPTkZJR19GSUxFUyhbCisgICBjb25maWcubWsKKyAgIGJybHR0eS5zcGVjCisgICBicmx0dHktY29uZmlnLnNoCisgICBicmx0dHkucGMKKyAgIERvY3VtZW50cy9icmx0dHkuY29uZgorICAgRG9jdW1lbnRzL2JybHR0eS4xCisgICBEb2N1bWVudHMveGJybGFwaS4xCisgICBEb2N1bWVudHMvQnJsQVBJcmVmLmRveHkKKyAgIEJpbmRpbmdzL0VtYWNzL2FkZF9kaXJlY3RvcnkuZWwKKyAgIEJpbmRpbmdzL0xpc3AvYnJsYXBpLmFzZAorICAgQmluZGluZ3MvTGlzcC9icmxhcGlfY29uZmlnLmxpc3AKKyAgIEJpbmRpbmdzL1B5dGhvbi9zZXR1cC5weQorICAgQXV0b3N0YXJ0L1N5c3RlbWQvYnJsdHR5QC5zZXJ2aWNlCisgICBBdXRvc3RhcnQvU3lzdGVtZC90bXBmaWxlcworICAgQXV0b3N0YXJ0L1VkZXYvdXNiLXRlbXBsYXRlLnJ1bGVzCisgICBBdXRvc3RhcnQvWDExLzkweGJybGFwaQorICAgQW5kcm9pZC9HcmFkbGUvY29uZmlnLnByb3BlcnRpZXMKKyAgICR7YnJsdHR5X21ha2VfZmlsZXN9CitdKQorCitBQ19DT05GSUdfQ09NTUFORFMoW2J1aWxkLWNvbmZpZ3VyZV0sIFtkbmwKKyAgICIke3NyY2Rpcn0vbWs0YnVpbGQiCitdKQorCitBQ19PVVRQVVQKZGlmZiAtLWdpdCBhL2RvY3VtZW50Lm1rIGIvZG9jdW1lbnQubWsKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWRjYTcwNwotLS0gL2Rldi9udWxsCisrKyBiL2RvY3VtZW50Lm1rCkBAIC0wLDAgKzEsNDAgQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyMgICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisjCisjIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyMKKyMgQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitMT0NBTEUgPSBDCitTRVRMT0NBTEUgPSBMQ19BTEw9JChMT0NBTEUpCisKK2FsbDogYWxsLXllcworYWxsLXllczogdHh0IGh0bWwKK2FsbC1ubzoKKwlAZWNobyBsaW51eGRvYyBpcyBub3QgaW5zdGFsbGVkIC0gZG9jdW1lbnQgd2lsbCBub3QgYmUgbWFkZQorCit0eHQ6ICQoRE9DVU1FTlRfTkFNRSkudHh0CitodG1sOiBodG1sLm1hZGUKKworJChET0NVTUVOVF9OQU1FKS50eHQ6ICQoU1JDX0RJUikvJChET0NVTUVOVF9OQU1FKS5zZ21sCisJJChTRVRMT0NBTEUpIGxpbnV4ZG9jIC1CIHR4dCAtZiAtbCAkKERPQ1VNRU5UX0xBTkdVQUdFKSAtYyBsYXRpbiAkPAorCXNlZCAtZSAncy9ceDFCXFtbMC05XVswLTldKm0vL2cnIC1pICRACisKK2h0bWwubWFkZTogJChTUkNfRElSKS8kKERPQ1VNRU5UX05BTUUpLnNnbWwKKwkkKFNFVExPQ0FMRSkgbGludXhkb2MgLUIgaHRtbCAtbCAkKERPQ1VNRU5UX0xBTkdVQUdFKSAtYyBhc2NpaSAkPAorCXRvdWNoICRACisKK2NsZWFuOjoKKwktcm0gLWYgLS0gKi50eHQgKi5odG1sICoubWFkZQorCmRpZmYgLS1naXQgYS9kb2N1dGlscy5jb25mIGIvZG9jdXRpbHMuY29uZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMzIxOTBiCi0tLSAvZGV2L251bGwKKysrIGIvZG9jdXRpbHMuY29uZgpAQCAtMCwwICsxLDExIEBACitbZ2VuZXJhbF0KK2lucHV0LWVuY29kaW5nOiBVVEYtOAorb3V0cHV0LWVuY29kaW5nOiBVVEYtOAordG9jLWJhY2tsaW5rczogZW50cnkKKworW2h0bWw0Y3NzMSB3cml0ZXJdCitpbml0aWFsLWhlYWRlci1sZXZlbDogMgorCitbdGV4dCB3cml0ZXJdCit3cmFwLXdpZHRoOiA4MAorCmRpZmYgLS1naXQgYS9nZXRyZXZpZCBiL2dldHJldmlkCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjY2OTcxMzkKLS0tIC9kZXYvbnVsbAorKysgYi9nZXRyZXZpZApAQCAtMCwwICsxLDExMSBAQAorIyEvYmluL3NoCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisjICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorIworIyBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisjCisjIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisjCisjIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyMgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorIyBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyMKKyMgV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworIworIyBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworZGVmYXVsdE1vZGlmaWVkSW5kaWNhdG9yPSIrIgorCisuICJgZGlybmFtZSAiJHswfSJgL2JybHR0eS1wcm9sb2d1ZS5zaCIKK2FkZFByb2dyYW1PcHRpb24gYSBzdHJpbmcuYW55dGhpbmcgYXBwZW5kVGV4dCAidGV4dCB0byBhcHBlbmQgdG8gdGhlIHJldmlzaW9uIGlkZW50aWZpZXIiCithZGRQcm9ncmFtT3B0aW9uIGQgc3RyaW5nLmFueXRoaW5nIGRlZmF1bHRJZGVudGlmaWVyICJ0aGUgZGVmYXVsdCByZXZpc2lvbiBpZGVudGlmaWVyIgorYWRkUHJvZ3JhbU9wdGlvbiBmIHN0cmluZy5maWxlIG91dHB1dEZpbGUgInRoZSBmaWxlIGluIHdoaWNoIHRvIHdyaXRlIHRoZSByZXZpc2lvbiBpZGVudGlmaWVyIiAic3RhbmRhcmQgb3V0cHV0IgorYWRkUHJvZ3JhbU9wdGlvbiBpIGZsYWcgYXNJbnRlZ2VyICJyZW5kZXIgdGhlIHJldmlzaW9uIGlkZW50aWZpZXIgYXMgYSAzMi1iaXQgaW50ZWdlciIKK2FkZFByb2dyYW1PcHRpb24gbSBzdHJpbmcuYW55dGhpbmcgbW9kaWZpZWRJbmRpY2F0b3IgInRoZSBtb2RpZmllZCBpbmRpY2F0b3IiICIke2RlZmF1bHRNb2RpZmllZEluZGljYXRvcn0iCithZGRQcm9ncmFtT3B0aW9uIHAgc3RyaW5nLmFueXRoaW5nIHByZXBlbmRUZXh0ICJ0ZXh0IHRvIHByZXBlbmQgdG8gdGhlIHJldmlzaW9uIGlkZW50aWZpZXIiCithZGRQcm9ncmFtT3B0aW9uIHIgc3RyaW5nLmFueXRoaW5nIHJldmlzaW9uSWRlbnRpZmllciAidGhlIHJldmlzaW9uIGlkZW50aWZpZXIiCithZGRQcm9ncmFtT3B0aW9uIHMgZmxhZyBhc1N0cmluZyAicmVuZGVyIHRoZSByZXZpc2lvbiBpZGVudGlmaWVyIGFzIGEgcXVvdGVkIHN0cmluZyIKK2FkZFByb2dyYW1QYXJhbWV0ZXIgc291cmNlIHNvdXJjZVJvb3QgInRoZSB0b3AtbGV2ZWwgZGlyZWN0b3J5IG9mIHRoZSBzb3VyY2UgdHJlZSIKK3BhcnNlUHJvZ3JhbUFyZ3VtZW50cyAiJHtAfSIKKworWyAtZSAiJHtzb3VyY2VSb290fSIgXSB8fCBzZW1hbnRpY0Vycm9yICJkaXJlY3Rvcnkgbm90IGZvdW5kOiAke3NvdXJjZVJvb3R9IgorWyAtZCAiJHtzb3VyY2VSb290fSIgXSB8fCBzZW1hbnRpY0Vycm9yICJub3QgYSBkaXJlY3Rvcnk6ICR7c291cmNlUm9vdH0iCisKK1sgLW4gIiR7bW9kaWZpZWRJbmRpY2F0b3J9IiBdIHx8IG1vZGlmaWVkSW5kaWNhdG9yPSIke2RlZmF1bHRNb2RpZmllZEluZGljYXRvcn0iCisKK1sgLW4gIiR7cmV2aXNpb25JZGVudGlmaWVyfSIgXSB8fCB7CisgIGlmIFsgLWUgIiR7c291cmNlUm9vdH0vLmdpdCIgXQorICB0aGVuCisgICAgIHJldmlzaW9uSWRlbnRpZmllcj0iYGdpdCAtQyAiJHtzb3VyY2VSb290fSIgZGVzY3JpYmUgLS10YWdzIC0tYWJicmV2PTggLS1kaXJ0eT0iJHttb2RpZmllZEluZGljYXRvcn0iIC0tbWF0Y2g9IkJSTFRUWS0qIiAyPi9kZXYvbnVsbGAiCisgIGVsaWYgWyAtZCAiJHtzb3VyY2VSb290fS8uc3ZuIiBdCisgIHRoZW4KKyAgICAgcmV2aXNpb25JZGVudGlmaWVyPSJgc3ZudmVyc2lvbiAtbiAiJHtzb3VyY2VSb290fSIgMj4vZGV2L251bGxgIgorICAgICBbICIke3JldmlzaW9uSWRlbnRpZmllcn0iICE9ICJleHBvcnRlZCIgXSB8fCByZXZpc2lvbklkZW50aWZpZXI9IiIKKyAgZWxzZQorICAgICByZXZpc2lvbkZpbGU9IiR7c291cmNlUm9vdH0vUkVWSVNJT04iCisgICAgIFsgLWYgIiR7cmV2aXNpb25GaWxlfSIgXSAmJiByZWFkIDwiJHtyZXZpc2lvbkZpbGV9IiByZXZpc2lvbklkZW50aWZpZXIKKyAgZmkKKworICBbIC1uICIke3JldmlzaW9uSWRlbnRpZmllcn0iIF0gfHwgbG9nV2FybmluZyAidW5yZWNvZ25pemVkIHNvdXJjZSByZXBvc2l0b3J5IHR5cGU6ICR7c291cmNlUm9vdH0iCit9CisKK1sgLW4gIiR7cmV2aXNpb25JZGVudGlmaWVyfSIgXSB8fCB7CisgIFsgLW4gIiR7ZGVmYXVsdElkZW50aWZpZXJ9IiBdIHx8IHNlbWFudGljRXJyb3IgInJldmlzaW9uIGlkZW50aWZpZXIgbm90IGtub3duIgorICByZXZpc2lvbklkZW50aWZpZXI9IiR7ZGVmYXVsdElkZW50aWZpZXJ9IgorfQorCisiJHthc0ludGVnZXJ9IiAmJiB7CisgIG1ha2VJbnRlZ2VyKCkgeworICAgIHNldCAtLSBgZWNobyAiJHtyZXZpc2lvbklkZW50aWZpZXJ9IiB8IHNlZCAtZSAncy8tLyAvZydgCisgICAgbG9jYWwgY29tbWl0Q291bnQ9IiR7MzotMH0iCisKKyAgICByZXZpc2lvbklkZW50aWZpZXI9MAorICAgIGxvY2FsIHdpZHRoPTYKKyAgICBsb2NhbCBzaGlmdD0zMAorICAgIGxvY2FsIG51bWJlcgorCisgICAgZm9yIG51bWJlciBpbiBgZWNobyAiJHsyfSIgfCBzZWQgLWUgJ3MvXC4vIC9nJ2AKKyAgICBkbworICAgICAgc2hpZnQ9JCgoc2hpZnQgLSB3aWR0aCkpCisgICAgICByZXZpc2lvbklkZW50aWZpZXI9JCgocmV2aXNpb25JZGVudGlmaWVyIHwgKG51bWJlciA8PCBzaGlmdCkpKQorICAgIGRvbmUKKworICAgIHJldmlzaW9uSWRlbnRpZmllcj0kKChyZXZpc2lvbklkZW50aWZpZXIgfCBjb21taXRDb3VudCkpCisgIH0KKworICBtYWtlSW50ZWdlcgorfQorCitbIC1uICIke3ByZXBlbmRUZXh0fSIgXSAmJiByZXZpc2lvbklkZW50aWZpZXI9IiR7cHJlcGVuZFRleHR9JHtyZXZpc2lvbklkZW50aWZpZXJ9IgorWyAtbiAiJHthcHBlbmRUZXh0fSIgXSAmJiByZXZpc2lvbklkZW50aWZpZXI9IiR7cmV2aXNpb25JZGVudGlmaWVyfSR7YXBwZW5kVGV4dH0iCisiJHthc1N0cmluZ30iICYmIHJldmlzaW9uSWRlbnRpZmllcj0nIiciJHtyZXZpc2lvbklkZW50aWZpZXJ9IiciJworCitpZiBbIC16ICIke291dHB1dEZpbGV9IiBdCit0aGVuCisgICBlY2hvICIke3JldmlzaW9uSWRlbnRpZmllcn0iCitlbHNlCisgICBpZiBbIC1lICIke291dHB1dEZpbGV9IiBdCisgICB0aGVuCisgICAgICBbIC1mICIke291dHB1dEZpbGV9IiBdIHx8IHNlbWFudGljRXJyb3IgIm5vdCBhIGZpbGU6ICR7b3V0cHV0RmlsZX0iCisgICAgICBbIC1yICIke291dHB1dEZpbGV9IiBdIHx8IHNlbWFudGljRXJyb3IgImZpbGUgbm90IHJlYWRhYmxlOiAke291dHB1dEZpbGV9IgorCisgICAgICBleGVjIDM8IiR7b3V0cHV0RmlsZX0iCisgICAgICByZWFkIDwmMyAtciBmaXJzdExpbmUgJiYgeworICAgICAgICAgWyAiJHtmaXJzdExpbmV9IiAhPSAiJHtyZXZpc2lvbklkZW50aWZpZXJ9IiBdIHx8IHJlYWQgPCYzIC1yIHNlY29uZExpbmUgfHwgZXhpdCAwCisgICAgICB9CisgICAgICBleGVjIDM8Ji0KKworICAgICAgWyAtdyAiJHtvdXRwdXRGaWxlfSIgXSB8fCBzZW1hbnRpY0Vycm9yICJmaWxlIG5vdCB3cml0YWJsZTogJHtvdXRwdXRGaWxlfSIKKyAgIGVsc2UKKyAgICAgIG91dHB1dERpcmVjdG9yeT0iJChkaXJuYW1lICIke291dHB1dEZpbGV9IikiCisgICAgICBbIC1kICIke291dHB1dERpcmVjdG9yeX0iIF0gfHwgc2VtYW50aWNFcnJvciAibm90IGEgZGlyZWN0b3J5OiAke291dHB1dERpcmVjdG9yeX0iCisgICAgICBbIC13ICIke291dHB1dERpcmVjdG9yeX0iIF0gfHwgc2VtYW50aWNFcnJvciAiZGlyZWN0b3J5IG5vdCB3cml0YWJsZTogJHtvdXRwdXREaXJlY3Rvcnl9IgorICAgZmkKKworICAgZWNobyAiJHtyZXZpc2lvbklkZW50aWZpZXJ9IiA+IiR7b3V0cHV0RmlsZX0iCitmaQorCitleGl0IDAKZGlmZiAtLWdpdCBhL200L2F4X2NoZWNrX2NvbXBpbGVfZmxhZy5tNCBiL200L2F4X2NoZWNrX2NvbXBpbGVfZmxhZy5tNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZDc1M2IzCi0tLSAvZGV2L251bGwKKysrIGIvbTQvYXhfY2hlY2tfY29tcGlsZV9mbGFnLm00CkBAIC0wLDAgKzEsNTMgQEAKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisjICBodHRwczovL3d3dy5nbnUub3JnL3NvZnR3YXJlL2F1dG9jb25mLWFyY2hpdmUvYXhfY2hlY2tfY29tcGlsZV9mbGFnLmh0bWwKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisjCisjIFNZTk9QU0lTCisjCisjICAgQVhfQ0hFQ0tfQ09NUElMRV9GTEFHKEZMQUcsIFtBQ1RJT04tU1VDQ0VTU10sIFtBQ1RJT04tRkFJTFVSRV0sIFtFWFRSQS1GTEFHU10sIFtJTlBVVF0pCisjCisjIERFU0NSSVBUSU9OCisjCisjICAgQ2hlY2sgd2hldGhlciB0aGUgZ2l2ZW4gRkxBRyB3b3JrcyB3aXRoIHRoZSBjdXJyZW50IGxhbmd1YWdlJ3MgY29tcGlsZXIKKyMgICBvciBnaXZlcyBhbiBlcnJvci4gIChXYXJuaW5ncywgaG93ZXZlciwgYXJlIGlnbm9yZWQpCisjCisjICAgQUNUSU9OLVNVQ0NFU1MvQUNUSU9OLUZBSUxVUkUgYXJlIHNoZWxsIGNvbW1hbmRzIHRvIGV4ZWN1dGUgb24KKyMgICBzdWNjZXNzL2ZhaWx1cmUuCisjCisjICAgSWYgRVhUUkEtRkxBR1MgaXMgZGVmaW5lZCwgaXQgaXMgYWRkZWQgdG8gdGhlIGN1cnJlbnQgbGFuZ3VhZ2UncyBkZWZhdWx0CisjICAgZmxhZ3MgKGUuZy4gQ0ZMQUdTKSB3aGVuIHRoZSBjaGVjayBpcyBkb25lLiAgVGhlIGNoZWNrIGlzIHRodXMgbWFkZSB3aXRoCisjICAgdGhlIGZsYWdzOiAiQ0ZMQUdTIEVYVFJBLUZMQUdTIEZMQUciLiAgVGhpcyBjYW4gZm9yIGV4YW1wbGUgYmUgdXNlZCB0bworIyAgIGZvcmNlIHRoZSBjb21waWxlciB0byBpc3N1ZSBhbiBlcnJvciB3aGVuIGEgYmFkIGZsYWcgaXMgZ2l2ZW4uCisjCisjICAgSU5QVVQgZ2l2ZXMgYW4gYWx0ZXJuYXRpdmUgaW5wdXQgc291cmNlIHRvIEFDX0NPTVBJTEVfSUZFTFNFLgorIworIyAgIE5PVEU6IEltcGxlbWVudGF0aW9uIGJhc2VkIG9uIEFYX0NGTEFHU19HQ0NfT1BUSU9OLiBQbGVhc2Uga2VlcCB0aGlzCisjICAgbWFjcm8gaW4gc3luYyB3aXRoIEFYX0NIRUNLX3tQUkVQUk9DLExJTkt9X0ZMQUcuCisjCisjIExJQ0VOU0UKKyMKKyMgICBDb3B5cmlnaHQgKGMpIDIwMDggR3VpZG8gVS4gRHJhaGVpbSA8Z3VpZG9kQGdteC5kZT4KKyMgICBDb3B5cmlnaHQgKGMpIDIwMTEgTWFhcnRlbiBCb3NtYW5zIDxta2Jvc21hbnNAZ21haWwuY29tPgorIworIyAgIENvcHlpbmcgYW5kIGRpc3RyaWJ1dGlvbiBvZiB0aGlzIGZpbGUsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sIGFyZQorIyAgIHBlcm1pdHRlZCBpbiBhbnkgbWVkaXVtIHdpdGhvdXQgcm95YWx0eSBwcm92aWRlZCB0aGUgY29weXJpZ2h0IG5vdGljZQorIyAgIGFuZCB0aGlzIG5vdGljZSBhcmUgcHJlc2VydmVkLiAgVGhpcyBmaWxlIGlzIG9mZmVyZWQgYXMtaXMsIHdpdGhvdXQgYW55CisjICAgd2FycmFudHkuCisKKyNzZXJpYWwgNgorCitBQ19ERUZVTihbQVhfQ0hFQ0tfQ09NUElMRV9GTEFHXSwKK1tBQ19QUkVSRVEoMi42NClkbmwgZm9yIF9BQ19MQU5HX1BSRUZJWCBhbmQgQVNfVkFSX0lGCitBU19WQVJfUFVTSERFRihbQ0FDSEVWQVJdLFtheF9jdl9jaGVja19bXV9BQ19MQU5HX0FCQlJFVltdZmxhZ3NfJDRfJDFdKWRubAorQUNfQ0FDSEVfQ0hFQ0soW3doZXRoZXIgX0FDX0xBTkcgY29tcGlsZXIgYWNjZXB0cyAkMV0sIENBQ0hFVkFSLCBbCisgIGF4X2NoZWNrX3NhdmVfZmxhZ3M9JFtdX0FDX0xBTkdfUFJFRklYW11GTEFHUworICBfQUNfTEFOR19QUkVGSVhbXUZMQUdTPSIkW11fQUNfTEFOR19QUkVGSVhbXUZMQUdTICQ0ICQxIgorICBBQ19DT01QSUxFX0lGRUxTRShbbTRfZGVmYXVsdChbJDVdLFtBQ19MQU5HX1BST0dSQU0oKV0pXSwKKyAgICBbQVNfVkFSX1NFVChDQUNIRVZBUixbeWVzXSldLAorICAgIFtBU19WQVJfU0VUKENBQ0hFVkFSLFtub10pXSkKKyAgX0FDX0xBTkdfUFJFRklYW11GTEFHUz0kYXhfY2hlY2tfc2F2ZV9mbGFnc10pCitBU19WQVJfSUYoQ0FDSEVWQVIseWVzLAorICBbbTRfZGVmYXVsdChbJDJdLCA6KV0sCisgIFttNF9kZWZhdWx0KFskM10sIDopXSkKK0FTX1ZBUl9QT1BERUYoW0NBQ0hFVkFSXSlkbmwKK10pZG5sIEFYX0NIRUNLX0NPTVBJTEVfRkxBR1MKZGlmZiAtLWdpdCBhL200L2F4X2djY19mdW5jX2F0dHJpYnV0ZS5tNCBiL200L2F4X2djY19mdW5jX2F0dHJpYnV0ZS5tNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYTJiMWFjCi0tLSAvZGV2L251bGwKKysrIGIvbTQvYXhfZ2NjX2Z1bmNfYXR0cmlidXRlLm00CkBAIC0wLDAgKzEsMjQyIEBACisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorIyAgaHR0cHM6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS9hdXRvY29uZi1hcmNoaXZlL2F4X2djY19mdW5jX2F0dHJpYnV0ZS5odG1sCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorIworIyBTWU5PUFNJUworIworIyAgIEFYX0dDQ19GVU5DX0FUVFJJQlVURShBVFRSSUJVVEUpCisjCisjIERFU0NSSVBUSU9OCisjCisjICAgVGhpcyBtYWNybyBjaGVja3MgaWYgdGhlIGNvbXBpbGVyIHN1cHBvcnRzIG9uZSBvZiBHQ0MncyBmdW5jdGlvbgorIyAgIGF0dHJpYnV0ZXM7IG1hbnkgb3RoZXIgY29tcGlsZXJzIGFsc28gcHJvdmlkZSBmdW5jdGlvbiBhdHRyaWJ1dGVzIHdpdGgKKyMgICB0aGUgc2FtZSBzeW50YXguIENvbXBpbGVyIHdhcm5pbmdzIGFyZSB1c2VkIHRvIGRldGVjdCBzdXBwb3J0ZWQKKyMgICBhdHRyaWJ1dGVzIGFzIHVuc3VwcG9ydGVkIG9uZXMgYXJlIGlnbm9yZWQgYnkgZGVmYXVsdCBzbyBxdWlldGluZworIyAgIHdhcm5pbmdzIHdoZW4gdXNpbmcgdGhpcyBtYWNybyB3aWxsIHlpZWxkIGZhbHNlIHBvc2l0aXZlcy4KKyMKKyMgICBUaGUgQVRUUklCVVRFIHBhcmFtZXRlciBob2xkcyB0aGUgbmFtZSBvZiB0aGUgYXR0cmlidXRlIHRvIGJlIGNoZWNrZWQuCisjCisjICAgSWYgQVRUUklCVVRFIGlzIHN1cHBvcnRlZCBkZWZpbmUgSEFWRV9GVU5DX0FUVFJJQlVURV88QVRUUklCVVRFPi4KKyMKKyMgICBUaGUgbWFjcm8gY2FjaGVzIGl0cyByZXN1bHQgaW4gdGhlIGF4X2N2X2hhdmVfZnVuY19hdHRyaWJ1dGVfPGF0dHJpYnV0ZT4KKyMgICB2YXJpYWJsZS4KKyMKKyMgICBUaGUgbWFjcm8gY3VycmVudGx5IHN1cHBvcnRzIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb24gYXR0cmlidXRlczoKKyMKKyMgICAgYWxpYXMKKyMgICAgYWxpZ25lZAorIyAgICBhbGxvY19zaXplCisjICAgIGFsd2F5c19pbmxpbmUKKyMgICAgYXJ0aWZpY2lhbAorIyAgICBjb2xkCisjICAgIGNvbnN0CisjICAgIGNvbnN0cnVjdG9yCisjICAgIGNvbnN0cnVjdG9yX3ByaW9yaXR5IGZvciBjb25zdHJ1Y3RvciBhdHRyaWJ1dGUgd2l0aCBwcmlvcml0eQorIyAgICBkZXByZWNhdGVkCisjICAgIGRlc3RydWN0b3IKKyMgICAgZGxsZXhwb3J0CisjICAgIGRsbGltcG9ydAorIyAgICBlcnJvcgorIyAgICBleHRlcm5hbGx5X3Zpc2libGUKKyMgICAgZmFsbHRocm91Z2gKKyMgICAgZmxhdHRlbgorIyAgICBmb3JtYXQKKyMgICAgZm9ybWF0X2FyZworIyAgICBnbnVfZm9ybWF0CisjICAgIGdudV9pbmxpbmUKKyMgICAgaG90CisjICAgIGlmdW5jCisjICAgIGxlYWYKKyMgICAgbWFsbG9jCisjICAgIG5vY2xvbmUKKyMgICAgbm9pbmxpbmUKKyMgICAgbm9ubnVsbAorIyAgICBub3JldHVybgorIyAgICBub3Rocm93CisjICAgIG9wdGltaXplCisjICAgIHB1cmUKKyMgICAgc2VudGluZWwKKyMgICAgc2VudGluZWxfcG9zaXRpb24KKyMgICAgdW51c2VkCisjICAgIHVzZWQKKyMgICAgdmlzaWJpbGl0eQorIyAgICB3YXJuaW5nCisjICAgIHdhcm5fdW51c2VkX3Jlc3VsdAorIyAgICB3ZWFrCisjICAgIHdlYWtyZWYKKyMKKyMgICBVbnN1cHBvcnRlZCBmdW5jdGlvbiBhdHRyaWJ1dGVzIHdpbGwgYmUgdGVzdGVkIHdpdGggYSBwcm90b3R5cGUKKyMgICByZXR1cm5pbmcgYW4gaW50IGFuZCBub3QgYWNjZXB0aW5nIGFueSBhcmd1bWVudHMgYW5kIHRoZSByZXN1bHQgb2YgdGhlCisjICAgY2hlY2sgbWlnaHQgYmUgd3Jvbmcgb3IgbWVhbmluZ2xlc3Mgc28gdXNlIHdpdGggY2FyZS4KKyMKKyMgTElDRU5TRQorIworIyAgIENvcHlyaWdodCAoYykgMjAxMyBHYWJyaWVsZSBTdmVsdG8gPGdhYnJpZWxlLnN2ZWx0b0BnbWFpbC5jb20+CisjCisjICAgQ29weWluZyBhbmQgZGlzdHJpYnV0aW9uIG9mIHRoaXMgZmlsZSwgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwgYXJlCisjICAgcGVybWl0dGVkIGluIGFueSBtZWRpdW0gd2l0aG91dCByb3lhbHR5IHByb3ZpZGVkIHRoZSBjb3B5cmlnaHQgbm90aWNlCisjICAgYW5kIHRoaXMgbm90aWNlIGFyZSBwcmVzZXJ2ZWQuICBUaGlzIGZpbGUgaXMgb2ZmZXJlZCBhcy1pcywgd2l0aG91dCBhbnkKKyMgICB3YXJyYW50eS4KKworI3NlcmlhbCAxMgorCitBQ19ERUZVTihbQVhfR0NDX0ZVTkNfQVRUUklCVVRFXSwgWworICAgIEFTX1ZBUl9QVVNIREVGKFthY192YXJdLCBbYXhfY3ZfaGF2ZV9mdW5jX2F0dHJpYnV0ZV8kMV0pCisKKyAgICBBQ19DQUNIRV9DSEVDSyhbZm9yIF9fYXR0cmlidXRlX18oKCQxKSldLCBbYWNfdmFyXSwgWworICAgICAgICBBQ19MSU5LX0lGRUxTRShbQUNfTEFOR19QUk9HUkFNKFsKKyAgICAgICAgICAgIG00X2Nhc2UoWyQxXSwKKyAgICAgICAgICAgICAgICBbYWxpYXNdLCBbCisgICAgICAgICAgICAgICAgICAgIGludCBmb28oIHZvaWQgKSB7IHJldHVybiAwOyB9CisgICAgICAgICAgICAgICAgICAgIGludCBiYXIoIHZvaWQgKSBfX2F0dHJpYnV0ZV9fKCgkMSgiZm9vIikpKTsKKyAgICAgICAgICAgICAgICBdLAorICAgICAgICAgICAgICAgIFthbGlnbmVkXSwgWworICAgICAgICAgICAgICAgICAgICBpbnQgZm9vKCB2b2lkICkgX19hdHRyaWJ1dGVfXygoJDEoMzIpKSk7CisgICAgICAgICAgICAgICAgXSwKKyAgICAgICAgICAgICAgICBbYWxsb2Nfc2l6ZV0sIFsKKyAgICAgICAgICAgICAgICAgICAgdm9pZCAqZm9vKGludCBhKSBfX2F0dHJpYnV0ZV9fKCgkMSgxKSkpOworICAgICAgICAgICAgICAgIF0sCisgICAgICAgICAgICAgICAgW2Fsd2F5c19pbmxpbmVdLCBbCisgICAgICAgICAgICAgICAgICAgIGlubGluZSBfX2F0dHJpYnV0ZV9fKCgkMSkpIGludCBmb28oIHZvaWQgKSB7IHJldHVybiAwOyB9CisgICAgICAgICAgICAgICAgXSwKKyAgICAgICAgICAgICAgICBbYXJ0aWZpY2lhbF0sIFsKKyAgICAgICAgICAgICAgICAgICAgaW5saW5lIF9fYXR0cmlidXRlX18oKCQxKSkgaW50IGZvbyggdm9pZCApIHsgcmV0dXJuIDA7IH0KKyAgICAgICAgICAgICAgICBdLAorICAgICAgICAgICAgICAgIFtjb2xkXSwgWworICAgICAgICAgICAgICAgICAgICBpbnQgZm9vKCB2b2lkICkgX19hdHRyaWJ1dGVfXygoJDEpKTsKKyAgICAgICAgICAgICAgICBdLAorICAgICAgICAgICAgICAgIFtjb25zdF0sIFsKKyAgICAgICAgICAgICAgICAgICAgaW50IGZvbyggdm9pZCApIF9fYXR0cmlidXRlX18oKCQxKSk7CisgICAgICAgICAgICAgICAgXSwKKyAgICAgICAgICAgICAgICBbY29uc3RydWN0b3JfcHJpb3JpdHldLCBbCisgICAgICAgICAgICAgICAgICAgIGludCBmb28oIHZvaWQgKSBfX2F0dHJpYnV0ZV9fKChfX2NvbnN0cnVjdG9yX18oNjU1MzUvMikpKTsKKyAgICAgICAgICAgICAgICBdLAorICAgICAgICAgICAgICAgIFtjb25zdHJ1Y3Rvcl0sIFsKKyAgICAgICAgICAgICAgICAgICAgaW50IGZvbyggdm9pZCApIF9fYXR0cmlidXRlX18oKCQxKSk7CisgICAgICAgICAgICAgICAgXSwKKyAgICAgICAgICAgICAgICBbZGVwcmVjYXRlZF0sIFsKKyAgICAgICAgICAgICAgICAgICAgaW50IGZvbyggdm9pZCApIF9fYXR0cmlidXRlX18oKCQxKCIiKSkpOworICAgICAgICAgICAgICAgIF0sCisgICAgICAgICAgICAgICAgW2Rlc3RydWN0b3JdLCBbCisgICAgICAgICAgICAgICAgICAgIGludCBmb28oIHZvaWQgKSBfX2F0dHJpYnV0ZV9fKCgkMSkpOworICAgICAgICAgICAgICAgIF0sCisgICAgICAgICAgICAgICAgW2RsbGV4cG9ydF0sIFsKKyAgICAgICAgICAgICAgICAgICAgX19hdHRyaWJ1dGVfXygoJDEpKSBpbnQgZm9vKCB2b2lkICkgeyByZXR1cm4gMDsgfQorICAgICAgICAgICAgICAgIF0sCisgICAgICAgICAgICAgICAgW2RsbGltcG9ydF0sIFsKKyAgICAgICAgICAgICAgICAgICAgaW50IGZvbyggdm9pZCApIF9fYXR0cmlidXRlX18oKCQxKSk7CisgICAgICAgICAgICAgICAgXSwKKyAgICAgICAgICAgICAgICBbZXJyb3JdLCBbCisgICAgICAgICAgICAgICAgICAgIGludCBmb28oIHZvaWQgKSBfX2F0dHJpYnV0ZV9fKCgkMSgiIikpKTsKKyAgICAgICAgICAgICAgICBdLAorICAgICAgICAgICAgICAgIFtleHRlcm5hbGx5X3Zpc2libGVdLCBbCisgICAgICAgICAgICAgICAgICAgIGludCBmb28oIHZvaWQgKSBfX2F0dHJpYnV0ZV9fKCgkMSkpOworICAgICAgICAgICAgICAgIF0sCisgICAgICAgICAgICAgICAgW2ZhbGx0aHJvdWdoXSwgWworICAgICAgICAgICAgICAgICAgICBpbnQgZm9vKCB2b2lkICkge3N3aXRjaCAoMCkgeyBjYXNlIDE6IF9fYXR0cmlidXRlX18oKCQxKSk7IGNhc2UgMjogYnJlYWsgOyB9fTsKKyAgICAgICAgICAgICAgICBdLAorICAgICAgICAgICAgICAgIFtmbGF0dGVuXSwgWworICAgICAgICAgICAgICAgICAgICBpbnQgZm9vKCB2b2lkICkgX19hdHRyaWJ1dGVfXygoJDEpKTsKKyAgICAgICAgICAgICAgICBdLAorICAgICAgICAgICAgICAgIFtmb3JtYXRdLCBbCisgICAgICAgICAgICAgICAgICAgIGludCBmb28oY29uc3QgY2hhciAqcCwgLi4uKSBfX2F0dHJpYnV0ZV9fKCgkMShwcmludGYsIDEsIDIpKSk7CisgICAgICAgICAgICAgICAgXSwKKyAgICAgICAgICAgICAgICBbZ251X2Zvcm1hdF0sIFsKKyAgICAgICAgICAgICAgICAgICAgaW50IGZvbyhjb25zdCBjaGFyICpwLCAuLi4pIF9fYXR0cmlidXRlX18oKGZvcm1hdChnbnVfcHJpbnRmLCAxLCAyKSkpOworICAgICAgICAgICAgICAgIF0sCisgICAgICAgICAgICAgICAgW2Zvcm1hdF9hcmddLCBbCisgICAgICAgICAgICAgICAgICAgIGNoYXIgKmZvbyhjb25zdCBjaGFyICpwKSBfX2F0dHJpYnV0ZV9fKCgkMSgxKSkpOworICAgICAgICAgICAgICAgIF0sCisgICAgICAgICAgICAgICAgW2dudV9pbmxpbmVdLCBbCisgICAgICAgICAgICAgICAgICAgIGlubGluZSBfX2F0dHJpYnV0ZV9fKCgkMSkpIGludCBmb28oIHZvaWQgKSB7IHJldHVybiAwOyB9CisgICAgICAgICAgICAgICAgXSwKKyAgICAgICAgICAgICAgICBbaG90XSwgWworICAgICAgICAgICAgICAgICAgICBpbnQgZm9vKCB2b2lkICkgX19hdHRyaWJ1dGVfXygoJDEpKTsKKyAgICAgICAgICAgICAgICBdLAorICAgICAgICAgICAgICAgIFtpZnVuY10sIFsKKyAgICAgICAgICAgICAgICAgICAgaW50IG15X2Zvbyggdm9pZCApIHsgcmV0dXJuIDA7IH0KKyAgICAgICAgICAgICAgICAgICAgc3RhdGljIGludCAoKnJlc29sdmVfZm9vKHZvaWQpKSh2b2lkKSB7IHJldHVybiBteV9mb287IH0KKyAgICAgICAgICAgICAgICAgICAgaW50IGZvbyggdm9pZCApIF9fYXR0cmlidXRlX18oKCQxKCJyZXNvbHZlX2ZvbyIpKSk7CisgICAgICAgICAgICAgICAgXSwKKyAgICAgICAgICAgICAgICBbbGVhZl0sIFsKKyAgICAgICAgICAgICAgICAgICAgX19hdHRyaWJ1dGVfXygoJDEpKSBpbnQgZm9vKCB2b2lkICkgeyByZXR1cm4gMDsgfQorICAgICAgICAgICAgICAgIF0sCisgICAgICAgICAgICAgICAgW21hbGxvY10sIFsKKyAgICAgICAgICAgICAgICAgICAgdm9pZCAqZm9vKCB2b2lkICkgX19hdHRyaWJ1dGVfXygoJDEpKTsKKyAgICAgICAgICAgICAgICBdLAorICAgICAgICAgICAgICAgIFtub2Nsb25lXSwgWworICAgICAgICAgICAgICAgICAgICBpbnQgZm9vKCB2b2lkICkgX19hdHRyaWJ1dGVfXygoJDEpKTsKKyAgICAgICAgICAgICAgICBdLAorICAgICAgICAgICAgICAgIFtub2lubGluZV0sIFsKKyAgICAgICAgICAgICAgICAgICAgX19hdHRyaWJ1dGVfXygoJDEpKSBpbnQgZm9vKCB2b2lkICkgeyByZXR1cm4gMDsgfQorICAgICAgICAgICAgICAgIF0sCisgICAgICAgICAgICAgICAgW25vbm51bGxdLCBbCisgICAgICAgICAgICAgICAgICAgIGludCBmb28oY2hhciAqcCkgX19hdHRyaWJ1dGVfXygoJDEoMSkpKTsKKyAgICAgICAgICAgICAgICBdLAorICAgICAgICAgICAgICAgIFtub3JldHVybl0sIFsKKyAgICAgICAgICAgICAgICAgICAgdm9pZCBmb28oIHZvaWQgKSBfX2F0dHJpYnV0ZV9fKCgkMSkpOworICAgICAgICAgICAgICAgIF0sCisgICAgICAgICAgICAgICAgW25vdGhyb3ddLCBbCisgICAgICAgICAgICAgICAgICAgIGludCBmb28oIHZvaWQgKSBfX2F0dHJpYnV0ZV9fKCgkMSkpOworICAgICAgICAgICAgICAgIF0sCisgICAgICAgICAgICAgICAgW29wdGltaXplXSwgWworICAgICAgICAgICAgICAgICAgICBfX2F0dHJpYnV0ZV9fKCgkMSgzKSkpIGludCBmb28oIHZvaWQgKSB7IHJldHVybiAwOyB9CisgICAgICAgICAgICAgICAgXSwKKyAgICAgICAgICAgICAgICBbcHVyZV0sIFsKKyAgICAgICAgICAgICAgICAgICAgaW50IGZvbyggdm9pZCApIF9fYXR0cmlidXRlX18oKCQxKSk7CisgICAgICAgICAgICAgICAgXSwKKyAgICAgICAgICAgICAgICBbc2VudGluZWxdLCBbCisgICAgICAgICAgICAgICAgICAgIGludCBmb28odm9pZCAqcCwgLi4uKSBfX2F0dHJpYnV0ZV9fKCgkMSkpOworICAgICAgICAgICAgICAgIF0sCisgICAgICAgICAgICAgICAgW3NlbnRpbmVsX3Bvc2l0aW9uXSwgWworICAgICAgICAgICAgICAgICAgICBpbnQgZm9vKHZvaWQgKnAsIC4uLikgX19hdHRyaWJ1dGVfXygoJDEoMSkpKTsKKyAgICAgICAgICAgICAgICBdLAorICAgICAgICAgICAgICAgIFtyZXR1cm5zX25vbm51bGxdLCBbCisgICAgICAgICAgICAgICAgICAgIHZvaWQgKmZvbyggdm9pZCApIF9fYXR0cmlidXRlX18oKCQxKSk7CisgICAgICAgICAgICAgICAgXSwKKyAgICAgICAgICAgICAgICBbdW51c2VkXSwgWworICAgICAgICAgICAgICAgICAgICBpbnQgZm9vKCB2b2lkICkgX19hdHRyaWJ1dGVfXygoJDEpKTsKKyAgICAgICAgICAgICAgICBdLAorICAgICAgICAgICAgICAgIFt1c2VkXSwgWworICAgICAgICAgICAgICAgICAgICBpbnQgZm9vKCB2b2lkICkgX19hdHRyaWJ1dGVfXygoJDEpKTsKKyAgICAgICAgICAgICAgICBdLAorICAgICAgICAgICAgICAgIFt2aXNpYmlsaXR5XSwgWworICAgICAgICAgICAgICAgICAgICBpbnQgZm9vX2RlZiggdm9pZCApIF9fYXR0cmlidXRlX18oKCQxKCJkZWZhdWx0IikpKTsKKyAgICAgICAgICAgICAgICAgICAgaW50IGZvb19oaWQoIHZvaWQgKSBfX2F0dHJpYnV0ZV9fKCgkMSgiaGlkZGVuIikpKTsKKyAgICAgICAgICAgICAgICAgICAgaW50IGZvb19pbnQoIHZvaWQgKSBfX2F0dHJpYnV0ZV9fKCgkMSgiaW50ZXJuYWwiKSkpOworICAgICAgICAgICAgICAgICAgICBpbnQgZm9vX3Bybyggdm9pZCApIF9fYXR0cmlidXRlX18oKCQxKCJwcm90ZWN0ZWQiKSkpOworICAgICAgICAgICAgICAgIF0sCisgICAgICAgICAgICAgICAgW3dhcm5pbmddLCBbCisgICAgICAgICAgICAgICAgICAgIGludCBmb28oIHZvaWQgKSBfX2F0dHJpYnV0ZV9fKCgkMSgiIikpKTsKKyAgICAgICAgICAgICAgICBdLAorICAgICAgICAgICAgICAgIFt3YXJuX3VudXNlZF9yZXN1bHRdLCBbCisgICAgICAgICAgICAgICAgICAgIGludCBmb28oIHZvaWQgKSBfX2F0dHJpYnV0ZV9fKCgkMSkpOworICAgICAgICAgICAgICAgIF0sCisgICAgICAgICAgICAgICAgW3dlYWtdLCBbCisgICAgICAgICAgICAgICAgICAgIGludCBmb28oIHZvaWQgKSBfX2F0dHJpYnV0ZV9fKCgkMSkpOworICAgICAgICAgICAgICAgIF0sCisgICAgICAgICAgICAgICAgW3dlYWtyZWZdLCBbCisgICAgICAgICAgICAgICAgICAgIHN0YXRpYyBpbnQgZm9vKCB2b2lkICkgeyByZXR1cm4gMDsgfQorICAgICAgICAgICAgICAgICAgICBzdGF0aWMgaW50IGJhciggdm9pZCApIF9fYXR0cmlidXRlX18oKCQxKCJmb28iKSkpOworICAgICAgICAgICAgICAgIF0sCisgICAgICAgICAgICAgICAgWworICAgICAgICAgICAgICAgICBtNF93YXJuKFtzeW50YXhdLCBbVW5zdXBwb3J0ZWQgYXR0cmlidXRlICQxLCB0aGUgdGVzdCBtYXkgZmFpbF0pCisgICAgICAgICAgICAgICAgIGludCBmb28oIHZvaWQgKSBfX2F0dHJpYnV0ZV9fKCgkMSkpOworICAgICAgICAgICAgICAgIF0KKyAgICAgICAgICAgICldLCBbXSkKKyAgICAgICAgICAgIF0sCisgICAgICAgICAgICBkbmwgR0NDIGRvZXNuJ3QgZXhpdCB3aXRoIGFuIGVycm9yIGlmIGFuIHVua25vd24gYXR0cmlidXRlIGlzCisgICAgICAgICAgICBkbmwgcHJvdmlkZWQgYnV0IG9ubHkgb3V0cHV0cyBhIHdhcm5pbmcsIHNvIGFjY2VwdCB0aGUgYXR0cmlidXRlCisgICAgICAgICAgICBkbmwgb25seSBpZiBubyB3YXJuaW5nIHdlcmUgaXNzdWVkLgorICAgICAgICAgICAgW0FTX0lGKFtncmVwIC0tIC1XYXR0cmlidXRlcyBjb25mdGVzdC5lcnJdLAorICAgICAgICAgICAgICAgIFtBU19WQVJfU0VUKFthY192YXJdLCBbbm9dKV0sCisgICAgICAgICAgICAgICAgW0FTX1ZBUl9TRVQoW2FjX3Zhcl0sIFt5ZXNdKV0pXSwKKyAgICAgICAgICAgIFtBU19WQVJfU0VUKFthY192YXJdLCBbbm9dKV0pCisgICAgXSkKKworICAgIEFTX0lGKFt0ZXN0IHllcyA9IEFTX1ZBUl9HRVQoW2FjX3Zhcl0pXSwKKyAgICAgICAgW0FDX0RFRklORV9VTlFVT1RFRChBU19UUl9DUFAoSEFWRV9GVU5DX0FUVFJJQlVURV8kMSksIDEsCisgICAgICAgICAgICBbRGVmaW5lIHRvIDEgaWYgdGhlIHN5c3RlbSBoYXMgdGhlIGAkMScgZnVuY3Rpb24gYXR0cmlidXRlXSldLCBbXSkKKworICAgIEFTX1ZBUl9QT1BERUYoW2FjX3Zhcl0pCitdKQpkaWZmIC0tZ2l0IGEvbTQvYXhfZ2NjX3Zhcl9hdHRyaWJ1dGUubTQgYi9tNC9heF9nY2NfdmFyX2F0dHJpYnV0ZS5tNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NzYzNWQ0Ci0tLSAvZGV2L251bGwKKysrIGIvbTQvYXhfZ2NjX3Zhcl9hdHRyaWJ1dGUubTQKQEAgLTAsMCArMSwxNDEgQEAKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisjICAgaHR0cHM6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS9hdXRvY29uZi1hcmNoaXZlL2F4X2djY192YXJfYXR0cmlidXRlLmh0bWwKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisjCisjIFNZTk9QU0lTCisjCisjICAgQVhfR0NDX1ZBUl9BVFRSSUJVVEUoQVRUUklCVVRFKQorIworIyBERVNDUklQVElPTgorIworIyAgIFRoaXMgbWFjcm8gY2hlY2tzIGlmIHRoZSBjb21waWxlciBzdXBwb3J0cyBvbmUgb2YgR0NDJ3MgdmFyaWFibGUKKyMgICBhdHRyaWJ1dGVzOyBtYW55IG90aGVyIGNvbXBpbGVycyBhbHNvIHByb3ZpZGUgdmFyaWFibGUgYXR0cmlidXRlcyB3aXRoCisjICAgdGhlIHNhbWUgc3ludGF4LiBDb21waWxlciB3YXJuaW5ncyBhcmUgdXNlZCB0byBkZXRlY3Qgc3VwcG9ydGVkCisjICAgYXR0cmlidXRlcyBhcyB1bnN1cHBvcnRlZCBvbmVzIGFyZSBpZ25vcmVkIGJ5IGRlZmF1bHQgc28gcXVpZXRpbmcKKyMgICB3YXJuaW5ncyB3aGVuIHVzaW5nIHRoaXMgbWFjcm8gd2lsbCB5aWVsZCBmYWxzZSBwb3NpdGl2ZXMuCisjCisjICAgVGhlIEFUVFJJQlVURSBwYXJhbWV0ZXIgaG9sZHMgdGhlIG5hbWUgb2YgdGhlIGF0dHJpYnV0ZSB0byBiZSBjaGVja2VkLgorIworIyAgIElmIEFUVFJJQlVURSBpcyBzdXBwb3J0ZWQgZGVmaW5lIEhBVkVfVkFSX0FUVFJJQlVURV88QVRUUklCVVRFPi4KKyMKKyMgICBUaGUgbWFjcm8gY2FjaGVzIGl0cyByZXN1bHQgaW4gdGhlIGF4X2N2X2hhdmVfdmFyX2F0dHJpYnV0ZV88YXR0cmlidXRlPgorIyAgIHZhcmlhYmxlLgorIworIyAgIFRoZSBtYWNybyBjdXJyZW50bHkgc3VwcG9ydHMgdGhlIGZvbGxvd2luZyB2YXJpYWJsZSBhdHRyaWJ1dGVzOgorIworIyAgICBhbGlnbmVkCisjICAgIGNsZWFudXAKKyMgICAgY29tbW9uCisjICAgIG5vY29tbW9uCisjICAgIGRlcHJlY2F0ZWQKKyMgICAgbW9kZQorIyAgICBwYWNrZWQKKyMgICAgdGxzX21vZGVsCisjICAgIHVudXNlZAorIyAgICB1c2VkCisjICAgIHZlY3Rvcl9zaXplCisjICAgIHdlYWsKKyMgICAgZGxsaW1wb3J0CisjICAgIGRsbGV4cG9ydAorIyAgICBpbml0X3ByaW9yaXR5CisjCisjICAgVW5zdXBwb3J0ZWQgdmFyaWFibGUgYXR0cmlidXRlcyB3aWxsIGJlIHRlc3RlZCBhZ2FpbnN0IGEgZ2xvYmFsIGludGVnZXIKKyMgICB2YXJpYWJsZSBhbmQgd2l0aG91dCBhbnkgYXJndW1lbnRzIGdpdmVuIHRvIHRoZSBhdHRyaWJ1dGUgaXRzZWxmOyB0aGUKKyMgICByZXN1bHQgb2YgdGhpcyBjaGVjayBtaWdodCBiZSB3cm9uZyBvciBtZWFuaW5nbGVzcyBzbyB1c2Ugd2l0aCBjYXJlLgorIworIyBMSUNFTlNFCisjCisjICAgQ29weXJpZ2h0IChjKSAyMDEzIEdhYnJpZWxlIFN2ZWx0byA8Z2FicmllbGUuc3ZlbHRvQGdtYWlsLmNvbT4KKyMKKyMgICBDb3B5aW5nIGFuZCBkaXN0cmlidXRpb24gb2YgdGhpcyBmaWxlLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCBhcmUKKyMgICBwZXJtaXR0ZWQgaW4gYW55IG1lZGl1bSB3aXRob3V0IHJveWFsdHkgcHJvdmlkZWQgdGhlIGNvcHlyaWdodCBub3RpY2UKKyMgICBhbmQgdGhpcyBub3RpY2UgYXJlIHByZXNlcnZlZC4gIFRoaXMgZmlsZSBpcyBvZmZlcmVkIGFzLWlzLCB3aXRob3V0IGFueQorIyAgIHdhcnJhbnR5LgorCisjc2VyaWFsIDUKKworQUNfREVGVU4oW0FYX0dDQ19WQVJfQVRUUklCVVRFXSwgWworICAgIEFTX1ZBUl9QVVNIREVGKFthY192YXJdLCBbYXhfY3ZfaGF2ZV92YXJfYXR0cmlidXRlXyQxXSkKKworICAgIEFDX0NBQ0hFX0NIRUNLKFtmb3IgX19hdHRyaWJ1dGVfXygoJDEpKV0sIFthY192YXJdLCBbCisgICAgICAgIEFDX0xJTktfSUZFTFNFKFtBQ19MQU5HX1BST0dSQU0oWworICAgICAgICAgICAgbTRfY2FzZShbJDFdLAorICAgICAgICAgICAgICAgIFthbGlnbmVkXSwgWworICAgICAgICAgICAgICAgICAgICBpbnQgZm9vIF9fYXR0cmlidXRlX18oKCQxKDMyKSkpOworICAgICAgICAgICAgICAgIF0sCisgICAgICAgICAgICAgICAgW2NsZWFudXBdLCBbCisgICAgICAgICAgICAgICAgICAgIGludCBiYXIoaW50ICp0KSB7IHJldHVybiAqdDsgfTsKKyAgICAgICAgICAgICAgICBdLAorICAgICAgICAgICAgICAgIFtjb21tb25dLCBbCisgICAgICAgICAgICAgICAgICAgIGludCBmb28gX19hdHRyaWJ1dGVfXygoJDEpKTsKKyAgICAgICAgICAgICAgICBdLAorICAgICAgICAgICAgICAgIFtub2NvbW1vbl0sIFsKKyAgICAgICAgICAgICAgICAgICAgaW50IGZvbyBfX2F0dHJpYnV0ZV9fKCgkMSkpOworICAgICAgICAgICAgICAgIF0sCisgICAgICAgICAgICAgICAgW2RlcHJlY2F0ZWRdLCBbCisgICAgICAgICAgICAgICAgICAgIGludCBmb28gX19hdHRyaWJ1dGVfXygoJDEpKSA9IDA7CisgICAgICAgICAgICAgICAgXSwKKyAgICAgICAgICAgICAgICBbbW9kZV0sIFsKKyAgICAgICAgICAgICAgICAgICAgbG9uZyBmb28gX19hdHRyaWJ1dGVfXygoJDEod29yZCkpKTsKKyAgICAgICAgICAgICAgICBdLAorICAgICAgICAgICAgICAgIFtwYWNrZWRdLCBbCisgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBiYXIgeworICAgICAgICAgICAgICAgICAgICAgICAgaW50IGJheiBfX2F0dHJpYnV0ZV9fKCgkMSkpOworICAgICAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAgICAgIF0sCisgICAgICAgICAgICAgICAgW3Rsc19tb2RlbF0sIFsKKyAgICAgICAgICAgICAgICAgICAgX190aHJlYWQgaW50IGJhcjEgX19hdHRyaWJ1dGVfXygoJDEoImdsb2JhbC1keW5hbWljIikpKTsKKyAgICAgICAgICAgICAgICAgICAgX190aHJlYWQgaW50IGJhcjIgX19hdHRyaWJ1dGVfXygoJDEoImxvY2FsLWR5bmFtaWMiKSkpOworICAgICAgICAgICAgICAgICAgICBfX3RocmVhZCBpbnQgYmFyMyBfX2F0dHJpYnV0ZV9fKCgkMSgiaW5pdGlhbC1leGVjIikpKTsKKyAgICAgICAgICAgICAgICAgICAgX190aHJlYWQgaW50IGJhcjQgX19hdHRyaWJ1dGVfXygoJDEoImxvY2FsLWV4ZWMiKSkpOworICAgICAgICAgICAgICAgIF0sCisgICAgICAgICAgICAgICAgW3VudXNlZF0sIFsKKyAgICAgICAgICAgICAgICAgICAgaW50IGZvbyBfX2F0dHJpYnV0ZV9fKCgkMSkpOworICAgICAgICAgICAgICAgIF0sCisgICAgICAgICAgICAgICAgW3VzZWRdLCBbCisgICAgICAgICAgICAgICAgICAgIGludCBmb28gX19hdHRyaWJ1dGVfXygoJDEpKTsKKyAgICAgICAgICAgICAgICBdLAorICAgICAgICAgICAgICAgIFt2ZWN0b3Jfc2l6ZV0sIFsKKyAgICAgICAgICAgICAgICAgICAgaW50IGZvbyBfX2F0dHJpYnV0ZV9fKCgkMSgxNikpKTsKKyAgICAgICAgICAgICAgICBdLAorICAgICAgICAgICAgICAgIFt3ZWFrXSwgWworICAgICAgICAgICAgICAgICAgICBpbnQgZm9vIF9fYXR0cmlidXRlX18oKCQxKSk7CisgICAgICAgICAgICAgICAgXSwKKyAgICAgICAgICAgICAgICBbZGxsaW1wb3J0XSwgWworICAgICAgICAgICAgICAgICAgICBpbnQgZm9vIF9fYXR0cmlidXRlX18oKCQxKSk7CisgICAgICAgICAgICAgICAgXSwKKyAgICAgICAgICAgICAgICBbZGxsZXhwb3J0XSwgWworICAgICAgICAgICAgICAgICAgICBpbnQgZm9vIF9fYXR0cmlidXRlX18oKCQxKSk7CisgICAgICAgICAgICAgICAgXSwKKyAgICAgICAgICAgICAgICBbaW5pdF9wcmlvcml0eV0sIFsKKyAgICAgICAgICAgICAgICAgICAgc3RydWN0IGJhciB7IGJhcigpIHt9IH5iYXIoKSB7fSB9OworICAgICAgICAgICAgICAgICAgICBiYXIgYiBfX2F0dHJpYnV0ZV9fKCgkMSg2NTUzNS8yKSkpOworICAgICAgICAgICAgICAgIF0sCisgICAgICAgICAgICAgICAgWworICAgICAgICAgICAgICAgICBtNF93YXJuKFtzeW50YXhdLCBbVW5zdXBwb3J0ZWQgYXR0cmlidXRlICQxLCB0aGUgdGVzdCBtYXkgZmFpbF0pCisgICAgICAgICAgICAgICAgIGludCBmb28gX19hdHRyaWJ1dGVfXygoJDEpKTsKKyAgICAgICAgICAgICAgICBdCisgICAgICAgICAgICApXSwgWworICAgICAgICAgICAgbTRfY2FzZShbJDFdLAorICAgICAgICAgICAgICAgIFtjbGVhbnVwXSwgWworICAgICAgICAgICAgICAgICAgICBpbnQgZm9vIF9fYXR0cmlidXRlX18oKCQxKGJhcikpKSA9IDA7CisgICAgICAgICAgICAgICAgICAgIGZvbyA9IGZvbyArIDE7CisgICAgICAgICAgICAgICAgXSwKKyAgICAgICAgICAgICAgICBbXQorICAgICAgICAgICAgKV0pCisgICAgICAgICAgICBdLAorICAgICAgICAgICAgZG5sIEdDQyBkb2Vzbid0IGV4aXQgd2l0aCBhbiBlcnJvciBpZiBhbiB1bmtub3duIGF0dHJpYnV0ZSBpcworICAgICAgICAgICAgZG5sIHByb3ZpZGVkIGJ1dCBvbmx5IG91dHB1dHMgYSB3YXJuaW5nLCBzbyBhY2NlcHQgdGhlIGF0dHJpYnV0ZQorICAgICAgICAgICAgZG5sIG9ubHkgaWYgbm8gd2FybmluZyB3ZXJlIGlzc3VlZC4KKyAgICAgICAgICAgIFtBU19JRihbdGVzdCAtcyBjb25mdGVzdC5lcnJdLAorICAgICAgICAgICAgICAgIFtBU19WQVJfU0VUKFthY192YXJdLCBbbm9dKV0sCisgICAgICAgICAgICAgICAgW0FTX1ZBUl9TRVQoW2FjX3Zhcl0sIFt5ZXNdKV0pXSwKKyAgICAgICAgICAgIFtBU19WQVJfU0VUKFthY192YXJdLCBbbm9dKV0pCisgICAgXSkKKworICAgIEFTX0lGKFt0ZXN0IHllcyA9IEFTX1ZBUl9HRVQoW2FjX3Zhcl0pXSwKKyAgICAgICAgW0FDX0RFRklORV9VTlFVT1RFRChBU19UUl9DUFAoSEFWRV9WQVJfQVRUUklCVVRFXyQxKSwgMSwKKyAgICAgICAgICAgIFtEZWZpbmUgdG8gMSBpZiB0aGUgc3lzdGVtIGhhcyB0aGUgYCQxJyB2YXJpYWJsZSBhdHRyaWJ1dGVdKV0sIFtdKQorCisgICAgQVNfVkFSX1BPUERFRihbYWNfdmFyXSkKK10pCmRpZmYgLS1naXQgYS9tNC9icmx0dHkubTQgYi9tNC9icmx0dHkubTQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2UwYWU4ZgotLS0gL2Rldi9udWxsCisrKyBiL200L2JybHR0eS5tNApAQCAtMCwwICsxLDg0NyBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBsaWJicmxhcGkgLSBBIGxpYnJhcnkgcHJvdmlkaW5nIGFjY2VzcyB0byBicmFpbGxlIHRlcm1pbmFscyBmb3IgYXBwbGljYXRpb25zLgorIworIyBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+CisjCisjIGxpYmJybGFwaSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisjCisjIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyMgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorIyBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyMKKyMgV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworIworIyBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworQUNfREVGVU4oW0JSTFRUWV9VUFBFUkNBU0VfVFJBTlNMQVRFXSwgW3RyYW5zbGl0KFskMV0sIFthLXpdLCBbQS1aXSldKQorCitBQ19ERUZVTihbQlJMVFRZX1RSQU5TTEFURV9BU1NJR05dLCBbJDE9YGVjaG8gIiQyIiB8IHNlZCAtZSAneSUkMyUkNCUnYF0pCitBQ19ERUZVTihbQlJMVFRZX1VQUEVSQ0FTRV9BU1NJR05dLCBCUkxUVFlfVFJBTlNMQVRFX0FTU0lHTihbJDFdLCBbJDJdLCBbYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXokM10sIFtBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWiQ0XSkpCitBQ19ERUZVTihbQlJMVFRZX0xPV0VSQ0FTRV9BU1NJR05dLCBbQlJMVFRZX1RSQU5TTEFURV9BU1NJR04oWyQxXSwgWyQyXSwgW0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaJDNdLCBbYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXokNF0pXSkKKworQUNfREVGVU4oW0JSTFRUWV9JTkNMVURFX0hFQURFUlNdLCBbZG5sCitpZmVsc2UobGVuKFskMV0pLCAwLCBbXSwgWworWyNdaW5jbHVkZSA8JDE+CitdKWlmZWxzZSgkIywgMSwgW10sIFtCUkxUVFlfSU5DTFVERV9IRUFERVJTKG00X3NoaWZ0KCRAKSldKV0pCisKK0FDX0RFRlVOKFtCUkxUVFlfQ0hFQ0tfRlVOQ1RJT05dLCBbZG5sCisgICBBQ19DSEVDS19ERUNMKFskMV0sIFtkbmwKKyAgICAgIEFDX1NFQVJDSF9MSUJTKFskMV0sIFskM10sIFtkbmwKKyAgICAgICAgIEJSTFRUWV9VUFBFUkNBU0VfQVNTSUdOKFticmx0dHlfZGVmaW5lXSwgW2hhdmVfJDFdKQorICAgICAgICAgQUNfREVGSU5FX1VOUVVPVEVEKCR7YnJsdHR5X2RlZmluZX0sIFsxXSwgW0RlZmluZSB0aGlzIGlmIHRoZSBmdW5jdGlvbiAkMSBpcyBhdmFpbGFibGUuXSkKKyAgICAgIF0pCisgICBdLCBbXSwgW0JSTFRUWV9JTkNMVURFX0hFQURFUlMobTRfdHJhbnNsaXQoWyQyXSwgWyBdLCBbLF0pKV0pCitdKQorCitBQ19ERUZVTihbQlJMVFRZX1NFQVJDSF9MSUJTXSwgW2RubAorQlJMVFRZX1VQUEVSQ0FTRV9BU1NJR04oW2JybHR0eV91Y10sIFskMV0pCitBQ19TRUFSQ0hfTElCUyhbJDFdLCBbJDJdLCBbQUNfREVGSU5FX1VOUVVPVEVEKEhBVkVfJHticmx0dHlfdWN9LCBbMV0sIFtEZWZpbmUgdGhpcyBpZiB0aGUgZnVuY3Rpb24gJDEgaXMgYXZhaWxhYmxlLl0pXSldKQorCitBQ19ERUZVTihbQlJMVFRZX1ZBUl9UUklNXSwgW2RubAorJDE9ImBlY2hvICIkeyQxfSIgfCBzZWQgLWUgJ3MvXiAqLy8nIC1lICdzLyAqJC8vJ2AiCitdKQorCitBQ19ERUZVTihbQlJMVFRZX1ZBUl9FWFBBTkRdLCBbZG5sCiskMT0nJDInCit3aGlsZSB0ZXN0ICIkeyQxfSIgIT0gIiR7JDElXCQ/Kn0iCitkbworICAgZXZhbCAnJDE9IiciJHskMX0iJyInCitkb25lCitdKQorCitBQ19ERUZVTihbQlJMVFRZX1NVQlNUX0VYUEFOREVEXSwgW2RubAorQlJMVFRZX1ZBUl9FWFBBTkQoW2JybHR0eV9leHBhbmRlZF0sIFskMl0pCitBQ19TVUJTVChbJDFdLCBbIiR7YnJsdHR5X2V4cGFuZGVkfSJdKV0pCisKK0FDX0RFRlVOKFtCUkxUVFlfREVGSU5FX1NUUklOR10sIFtkbmwKKyAgIEFDX1NVQlNUKFskMV0sIFskMl0pCisgICBBQ19ERUZJTkUoWyQxXSwgWyIkMiJdLCBbRGVmaW5lIHRoaXMgdG8gYmUgYSBzdHJpbmcgY29udGFpbmluZyAkMy5dKQorXSkKKworQUNfREVGVU4oW0JSTFRUWV9ERUZJTkVfRVhQQU5ERURdLCBbZG5sCitCUkxUVFlfVkFSX0VYUEFORChbYnJsdHR5X2V4cGFuZGVkXSwgWyQyXSkKK0FDX0RFRklORV9VTlFVT1RFRChbJDFdLCBbIiR7YnJsdHR5X2V4cGFuZGVkfSJdLCBbJDNdKV0pCisKK0FDX0RFRlVOKFtCUkxUVFlfUkVMQVRJVkVfUEFUSF0sIFtkbmwKK0FDX1JFUVVJUkUoW0FDX1BST0dfQVdLXSkKK2V2YWwgJyQxPSJgIiR7QVdLfSIgLXYgcGF0aD0iJyIkMiInIiAtdiByZWZlcmVuY2U9IiciJDMiJyIgLWYgIiR7c3JjZGlyfS9yZWxwYXRoLmF3ayJgIiddKQorCitBQ19ERUZVTihbQlJMVFRZX0RFRklORV9ESVJFQ1RPUlldLCBbZG5sCitCUkxUVFlfVkFSX0VYUEFORChbJDFdLCBbJDJdKQorYnJsdHR5X3BhdGg9IiR7JDF9IgorCitpZmVsc2UoWyQ0XSwgW3B1YmxpY10sIFtdLCBbZG5sCisgIHRlc3QgIiR7YnJsdHR5X2VuYWJsZWRfcmVsb2NhdGFibGVfaW5zdGFsbH0iID0gInllcyIgJiYgeworICAgICB0ZXN0ICIkeyQxfSIgPSAiJHskMSNcXH0iICYmIHsKKyAgICAgICAgQlJMVFRZX1JFTEFUSVZFX1BBVEgoW2JybHR0eV9wYXRoXSwgWyR7JDF9XSwgWyR7YnJsdHR5X3JlZmVyZW5jZV9kaXJlY3Rvcnl9XSkKKyAgICAgfQorICB9CitdKQorCitCUkxUVFlfREVGSU5FX0VYUEFOREVEKFskMV0sIFske2JybHR0eV9wYXRofV0sIFskM10pCisjIHJlc29sdmUgZXNjYXBlZCBjaGFyYWN0ZXJzCitldmFsICckMT0iJyIkeyQxfSInIicKK0FDX1NVQlNUKFskMV0pCitdKQorCitBQ19ERUZVTihbQlJMVFRZX1BVQkxJQ19ESVJFQ1RPUlldLCBbZG5sCitCUkxUVFlfREVGSU5FX0RJUkVDVE9SWShbJDFdLCBbJDJdLCBbJDNdLCBbcHVibGljXSkKK10pCisKK0FDX0RFRlVOKFtCUkxUVFlfQVJHX1dJVEhdLCBbZG5sCitBQ19BUkdfV0lUSChbJDFdLCBCUkxUVFlfSEVMUF9TVFJJTkcoWy0td2l0aC0kMT0kMl0sIFskM10pLCBbJDQ9IiR7d2l0aHZhbH0iXSwgWyQ0PSQ1XSldKQorCitBQ19ERUZVTihbQlJMVFRZX0FSR19SRVFVSVJFRF0sIFtkbmwKK0JSTFRUWV9BUkdfV0lUSChbJDFdLCBbJDJdLCBbJDNdLCBbJDRdLCBbInllcyJdKQoraWYgdGVzdCAiJHskNH0iID0gIm5vIgordGhlbgorICAgQUNfTVNHX0VSUk9SKFskMSBub3Qgc3BlY2lmaWVkXSkKK2VsaWYgdGVzdCAiJHskNH0iID0gInllcyIKK3RoZW4KKyAgICQ0PSQ1CitmaQorQUNfU1VCU1QoWyQ0XSkKK0JSTFRUWV9TVU1NQVJZX0lURU0oWyQxXSwgWyQ0XSldKQorCitBQ19ERUZVTihbQlJMVFRZX0FSR19UQUJMRV0sIFtkbmwKK2JybHR0eV9kZWZhdWx0X3RhYmxlPSIkMiIKK0JSTFRUWV9BUkdfV0lUSCgKKyAgIFskMS10YWJsZV0sIFtOQU1FXSwKKyAgIFtidWlsdC1pbiAkMSB0YWJsZV0sCisgICBbJDFfdGFibGVdLCBbIiR7YnJsdHR5X2RlZmF1bHRfdGFibGV9Il0KKykKK2luc3RhbGxfJDFfdGFibGVzPWluc3RhbGwtJDEtdGFibGVzCitpZiB0ZXN0ICIkeyQxX3RhYmxlfSIgPSAibm8iCit0aGVuCisgICBpbnN0YWxsXyQxX3RhYmxlcz0KKyAgICQxX3RhYmxlPSIke2JybHR0eV9kZWZhdWx0X3RhYmxlfSIKK2VsaWYgdGVzdCAiJHskMV90YWJsZX0iID0gInllcyIKK3RoZW4KKyAgICQxX3RhYmxlPSIke2JybHR0eV9kZWZhdWx0X3RhYmxlfSIKK2ZpCitBQ19TVUJTVChbaW5zdGFsbF8kMV90YWJsZXNdKQorQlJMVFRZX1NVTU1BUllfSVRFTShbJDEtdGFibGVdLCBbJDFfdGFibGVdKQorQUNfREVGSU5FX1VOUVVPVEVEKEJSTFRUWV9VUFBFUkNBU0VfVFJBTlNMQVRFKFskMV90YWJsZV0pLCBbIiR7JDFfdGFibGV9Il0sCisgICAgICAgICAgICAgICAgICAgW0RlZmluZSB0aGlzIHRvIGJlIGEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIHBhdGggdG8gdGhlIGRlZmF1bHQgJDEgdGFibGUuXSkKK0FDX1NVQlNUKFskMV90YWJsZV0pXSkKKworQUNfREVGVU4oW0JSTFRUWV9BUkdfUEFSQU1FVEVSU10sIFtkbmwKK0JSTFRUWV9BUkdfV0lUSCgKKyAgIFskMS1wYXJhbWV0ZXJzXSwgWyQzTkFNRT1WQUxVRS4uLiAoY29tbWEtc2VwYXJhdGVkKV0sCisgICBbZGVmYXVsdCBwYXJhbWV0ZXJzIGZvciB0aGUgJDJdLAorICAgWyQxX3BhcmFtZXRlcnNdLCBbInllcyJdCispCitpZiB0ZXN0ICIkeyQxX3BhcmFtZXRlcnN9IiA9ICJubyIKK3RoZW4KKyAgICQxX3BhcmFtZXRlcnM9IiIKK2VsaWYgdGVzdCAiJHskMV9wYXJhbWV0ZXJzfSIgPSAieWVzIgordGhlbgorICAgJDFfcGFyYW1ldGVycz0iJDQiCitmaQorQUNfU1VCU1QoWyQxX3BhcmFtZXRlcnNdKQorQUNfREVGSU5FX1VOUVVPVEVEKEJSTFRUWV9VUFBFUkNBU0VfVFJBTlNMQVRFKFskMV9wYXJhbWV0ZXJzXSksIFsiJHskMV9wYXJhbWV0ZXJzfSJdLAorICAgICAgICAgICAgICAgICAgIFtEZWZpbmUgdGhpcyB0byBiZSBhIHN0cmluZyBjb250YWluaW5nIHRoZSBkZWZhdWx0IHBhcmFtZXRlcnMgZm9yIHRoZSAkMi5dKQorQlJMVFRZX1NVTU1BUllfSVRFTShbJDEtcGFyYW1ldGVyc10sIFskMV9wYXJhbWV0ZXJzXSldKQorCitBQ19ERUZVTihbQlJMVFRZX0hBVkVfSEVBREVSXSwgWworQUNfUFJFUFJPQ19JRkVMU0UoW0FDX0xBTkdfU09VUkNFKFtbQCU6QGluY2x1ZGUgPCQxPl1dKV0sIFskMl0sIFskM10pCitdKQorCitBQ19ERUZVTihbQlJMVFRZX0hBVkVfTElCUkFSWV0sIFtBQ19DSEVDS19MSUIoWyQxXSwgW21haW5dLCBbJDJdLCBbJDNdKV0pCisKK0FDX0RFRlVOKFtCUkxUVFlfQVJHX1BBQ0tBR0VdLCBbZG5sCiskMV9wYWNrYWdlPSIiCiskMV9pbmNsdWRlcz0iIgorJDFfbGlicz0iIgorCitCUkxUVFlfQVJHX1dJVEgoCisgICBbJDEtcGFja2FnZV0sIFtQQUNLQUdFXSwKKyAgIFt3aGljaCAkMiBwYWNrYWdlIHRvIHVzZV0sCisgICBbcGFja2FnZXNdLCBbInllcyJdCispCisKK2lmIHRlc3QgIiR7cGFja2FnZXN9IiA9ICJubyIKK3RoZW4KKyAgICQxX3BhY2thZ2U9Im5vbmUiCitlbGlmIHRlc3QgIiR7cGFja2FnZXN9IiA9ICJ5ZXMiCit0aGVuCisgICBwYWNrYWdlcz0iJDMiCisgICBpZmVsc2UobGVuKFskNF0pLCAwLCBbXSwgW2RubAorICAgICAgY2FzZSAiJHtob3N0X29zfSIKKyAgICAgIGluCisgICAgICAgICAkNAorICAgICAgICAgKik7OworICAgICAgZXNhYworICAgXSkKK2Vsc2UKKyAgIHBhY2thZ2VzPWBlY2hvICIke3BhY2thZ2VzfSIgfCBzZWQgLWUgJ3kvLC8gLydgCitmaQorCit0ZXN0IC16ICIkeyQxX3BhY2thZ2V9IiAmJiB7CisgICB0ZXN0IC1uICIke3BhY2thZ2VzfSIgJiYgeworICAgICAgZm9yIHBhY2thZ2UgaW4gJHtwYWNrYWdlc30KKyAgICAgIGRvCisgICAgICAgICBCUkxUVFlfSEFWRV9QQUNLQUdFKFskMV0sIFske3BhY2thZ2V9XSwgW10sIFs6XSkKKyAgICAgICAgIHRlc3QgLW4gIiR7JDFfcGFja2FnZX0iICYmIGJyZWFrCisKKyAgICAgICAgIGlmZWxzZShsZW4oWyQ1XSksIDAsIFtdLCBbZG5sCisgICAgICAgICAgICBjYXNlICIke3BhY2thZ2V9IgorICAgICAgICAgICAgaW4KKyAgICAgICAgICAgICAgICQ1CisgICAgICAgICAgICAgICAqKTs7CisgICAgICAgICAgICBlc2FjCisKKyAgICAgICAgICAgIHRlc3QgLW4gIiR7JDFfcGFja2FnZX0iICYmIGJyZWFrCisgICAgICAgICBdKQorCisgICAgICAgICBBQ19NU0dfTk9USUNFKFskMiBwYWNrYWdlIG5vdCBhdmFpbGFibGU6ICR7cGFja2FnZX1dKQorICAgICAgZG9uZQorICAgfQorfQorCit0ZXN0IC16ICIkeyQxX3BhY2thZ2V9IiAmJiB7CisgICAkMV9wYWNrYWdlPSJub25lIgorICAgQUNfTVNHX1dBUk4oWyQyIHN1cHBvcnQgbm90IGF2YWlsYWJsZSBvbiB0aGlzIHBsYXRmb3JtXSkKK30KKworQUNfU1VCU1QoWyQxX3BhY2thZ2VdKQorQUNfU1VCU1QoWyQxX2luY2x1ZGVzXSkKK0FDX1NVQlNUKFskMV9saWJzXSkKK0FDX0RFRklORV9VTlFVT1RFRChCUkxUVFlfVVBQRVJDQVNFX1RSQU5TTEFURShbJDFfcGFja2FnZV0pLCBbJHskMV9wYWNrYWdlfV0sIFtEZWZpbmUgdGhpcyB0byB0aGUgbmFtZSBvZiB0aGUgc2VsZWN0ZWQgJDIgcGFja2FnZS5dKQorQlJMVFRZX1VQUEVSQ0FTRV9BU1NJR04oW2JybHR0eV91Y10sIFt1c2VfcGtnXyQxXyR7JDFfcGFja2FnZX1dLCBbLS5dLCBbX19dKQorQUNfREVGSU5FX1VOUVVPVEVEKFske2JybHR0eV91Y31dKQorQlJMVFRZX1NVTU1BUllfSVRFTShbJDEtcGFja2FnZV0sIFskMV9wYWNrYWdlXSldKQorCitBQ19ERUZVTihbQlJMVFRZX0FSR19FTkFCTEVdLCBbZG5sCitCUkxUVFlfQVJHX0ZFQVRVUkUoWyQxXSwgWyQyXSwgW2VuYWJsZV0sIFtub10sIFskM10sIFskNF0sIFskNV0pXSkKKworQUNfREVGVU4oW0JSTFRUWV9BUkdfRElTQUJMRV0sIFtkbmwKK0JSTFRUWV9BUkdfRkVBVFVSRShbJDFdLCBbJDJdLCBbZGlzYWJsZV0sIFt5ZXNdLCBbJDNdLCBbJDRdLCBbJDVdKV0pCisKK0FDX0RFRlVOKFtCUkxUVFlfQVJHX0ZFQVRVUkVdLCBbZG5sCitBQ19BUkdfRU5BQkxFKFskMV0sIEJSTFRUWV9IRUxQX1NUUklORyhbLS0kMy0kMV0sIFskMl0pLCBbXSwgW2VuYWJsZXZhbD0iJDQiXSkKKworcHVzaGRlZihbdmFyXSwgYnJsdHR5X2VuYWJsZWRfW110cmFuc2xpdChbJDFdLCBbLV0sIFtfXSkpZG5sCitBQ19TVUJTVCh2YXIsIFsiJHtlbmFibGV2YWx9Il0pCitCUkxUVFlfU1VNTUFSWV9JVEVNKFskMV0sIHZhcilkbmwKK3BvcGRlZihbdmFyXSkKKworaWYgdGVzdCAiJHtlbmFibGV2YWx9IiA9ICJubyIKK3RoZW4KKyAgIGlmZWxzZShsZW4oWyQ3XSksIDAsIFs6XSwgWyQ3XSkKK2Vsc2UKK2lmZWxzZShsZW4oWyQ1XSksIDAsIFtdLCBbZG5sCisgICBzZXQgLS0gWyQ1XQorXSlkbmwKKyAgIGlmIHRlc3QgIiR7ZW5hYmxldmFsfSIgPSAieWVzIgorICAgdGhlbgorICAgICAgYnJsdHR5X29rPXRydWUKK2lmZWxzZShsZW4oWyQ1XSksIDAsIFtdLCBbZG5sCisgICAgICB0ZXN0ICIkeyN9IiAtZ3QgMCAmJiBlbmFibGV2YWw9IiR7MX0iCitdKWRubAorICAgZWxzZQorICAgICAgYnJsdHR5X29rPWZhbHNlCitpZmVsc2UobGVuKFskNV0pLCAwLCBbXSwgW2RubAorICAgICAgdGVzdCAiJHsjfSIgLWd0IDAgJiYgeworICAgICAgICAgZm9yIGJybHR0eV9zZWxlY3Rpb24KKyAgICAgICAgIGRvCisgICAgICAgICAgICB0ZXN0ICIke2JybHR0eV9zZWxlY3Rpb259IiA9ICIke2VuYWJsZXZhbH0iICYmIHsKKyAgICAgICAgICAgICAgIGJybHR0eV9vaz10cnVlCisgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgfQorICAgICAgICAgZG9uZQorICAgICAgfQorXSlkbmwKKyAgIGZpCisKKyAgIGlmICIke2JybHR0eV9va30iCisgICB0aGVuCitpZmVsc2UobGVuKFskNV0pLCAwLCBbXSwgW2RubAorICAgICAgdGVzdCAiJHsjfSIgLWd0IDAgJiYgeworICAgICAgICAgQlJMVFRZX1VQUEVSQ0FTRV9BU1NJR04oW2JybHR0eV91Y10sIFt1c2VfJDFfJHtlbmFibGV2YWx9XSwgWy1dLCBbX10pCisgICAgICAgICBBQ19ERUZJTkVfVU5RVU9URUQoWyR7YnJsdHR5X3VjfV0pCisgICAgICB9CitdKWRubAorICAgICAgaWZlbHNlKGxlbihbJDZdKSwgMCwgWzpdLCBbJDZdKQorICAgZWxzZQorICAgICAgQUNfTVNHX0VSUk9SKFtpbnZhbGlkIHNlbGVjdGlvbjogLS1lbmFibGUtJDE9JHtlbmFibGV2YWx9XSkKKyAgIGZpCitmaV0pCisKK0FDX0RFRlVOKFtCUkxUVFlfSEVMUF9TVFJJTkddLCBbZG5sCitBU19IRUxQX1NUUklORyhbJDFdLCBwYXRzdWJzdChbJDJdLCBbCisuKiRdKSwgbTRfZGVmbihbYnJsdHR5X2hlbHBfcHJlZml4XSkpZG5sCitwYXRzdWJzdChwYXRzdWJzdChbJDJdLCBbXGBbXgorXSpdKSwgWworXSwgW1wmYnJsdHR5X2hlbHBfcHJlZml4XSlbXWRubAorXSkKK200X2RlZmluZShbYnJsdHR5X2hlbHBfaW5kZW50XSwgMzIpCittNF9kZWZpbmUoW2JybHR0eV9oZWxwX3ByZWZpeF0sIG00X2Zvcm1hdChbJV1icmx0dHlfaGVscF9pbmRlbnRbc10sIFtdKSkKK200X2RlZmluZShbYnJsdHR5X2hlbHBfd2lkdGhdLCBtNF9ldmFsKDc5LWJybHR0eV9oZWxwX2luZGVudCkpCisKK0FDX0RFRlVOKFtCUkxUVFlfSVRFTV0sIFtkbmwKK2RlZmluZShbYnJsdHR5X2l0ZW1fbGlzdF8kMV0sIGlmZGVmKFticmx0dHlfaXRlbV9saXN0XyQxXSwgW2JybHR0eV9pdGVtX2xpc3RfJDFdKVsKK200X3RleHRfd3JhcChbJDNdLCBbICAgICAgXSwgWy0gJDIgIF0sIGJybHR0eV9oZWxwX3dpZHRoKV0pZG5sCiticmx0dHlfaXRlbV9lbnRyaWVzXyQxPSIke2JybHR0eV9pdGVtX2VudHJpZXNfJDF9ICQyLSQzIgorYnJsdHR5X2l0ZW1fY29kZXNfJDE9IiR7YnJsdHR5X2l0ZW1fY29kZXNfJDF9ICQyIgorYnJsdHR5X2l0ZW1fbmFtZXNfJDE9IiR7YnJsdHR5X2l0ZW1fbmFtZXNfJDF9ICQzIgorQUNfU1VCU1QoWyQxX2xpYnJhcmllc18kMl0sIFsnJDQnXSldKQorCitBQ19ERUZVTihbQlJMVFRZX0JSQUlMTEVfRFJJVkVSXSwgW2RubAorQlJMVFRZX0lURU0oW2JyYWlsbGVdLCBbJDFdLCBbJDJdLCBbJDNdKV0pCisKK0FDX0RFRlVOKFtCUkxUVFlfU1BFRUNIX0RSSVZFUl0sIFtkbmwKK0JSTFRUWV9JVEVNKFtzcGVlY2hdLCBbJDFdLCBbJDJdLCBbJDNdKV0pCisKK0FDX0RFRlVOKFtCUkxUVFlfU0NSRUVOX0RSSVZFUl0sIFtkbmwKK0JSTFRUWV9JVEVNKFtzY3JlZW5dLCBbJDFdLCBbJDJdLCBbJDNdKV0pCisKK0FDX0RFRlVOKFtCUkxUVFlfQVJHX0lURU1dLCBbZG5sCitCUkxUVFlfVkFSX1RSSU0oW2JybHR0eV9pdGVtX2NvZGVzXyQxXSkKK0FDX1NVQlNUKFticmx0dHlfaXRlbV9jb2Rlc18kMV0pCisKK0JSTFRUWV9WQVJfVFJJTShbYnJsdHR5X2l0ZW1fbmFtZXNfJDFdKQorQUNfU1VCU1QoW2JybHR0eV9pdGVtX25hbWVzXyQxXSkKKworY2FzZSAiJHtob3N0X29zfSIKK2luCisgICBjeWd3aW4qfG1pbmd3KikKKyAgICAgIGJybHR0eV9kZWZhdWx0PSJhbGwiCisgICAgICA7OworICAgKikKKyAgICAgIGJybHR0eV9kZWZhdWx0PSJ5ZXMiCisgICAgICA7OworZXNhYworCitCUkxUVFlfQVJHX1dJVEgoCisgICBbJDEtJDJdLCBCUkxUVFlfVVBQRVJDQVNFX1RSQU5TTEFURShbJDJdKSwKKyAgIFskMSAkMihzKSB0byBidWlsZCBpbl1icmx0dHlfaXRlbV9saXN0XyQxLAorICAgW2JybHR0eV9pdGVtc10sIFsiJHticmx0dHlfZGVmYXVsdH0iXQorKQorCitpZiB0ZXN0ICIke2JybHR0eV9pdGVtc30iID0gIm5vIgordGhlbgorICAgYnJsdHR5X2V4dGVybmFsX2NvZGVzXyQxPSIiCisgICBicmx0dHlfZXh0ZXJuYWxfbmFtZXNfJDE9IiIKKyAgIGJybHR0eV9pbnRlcm5hbF9jb2Rlc18kMT0iIgorICAgYnJsdHR5X2ludGVybmFsX25hbWVzXyQxPSIiCitlbHNlCisgICBicmx0dHlfaXRlbXNfbGVmdF8kMT0iICR7YnJsdHR5X2l0ZW1fZW50cmllc18kMX0gIgorICAgYnJsdHR5X2V4dGVybmFsX2NvZGVzXyQxPSIgJHticmx0dHlfaXRlbV9jb2Rlc18kMX0gIgorICAgYnJsdHR5X2V4dGVybmFsX25hbWVzXyQxPSIgJHticmx0dHlfaXRlbV9uYW1lc18kMX0gIgorICAgYnJsdHR5X2ludGVybmFsX2NvZGVzXyQxPSIiCisgICBicmx0dHlfaW50ZXJuYWxfbmFtZXNfJDE9IiIKKworICAgaWYgdGVzdCAiJHticmx0dHlfaXRlbXN9IiAhPSAieWVzIgorICAgdGhlbgorICAgICAgd2hpbGUgOgorICAgICAgZG8KKyAgICAgICAgIFticmx0dHlfZGVsaW1pdGVyPSJgZXhwciAiJHticmx0dHlfaXRlbXN9IiA6ICdbXixdKiwnYCJdCisgICAgICAgICBpZiB0ZXN0ICIke2JybHR0eV9kZWxpbWl0ZXJ9IiAtZXEgMAorICAgICAgICAgdGhlbgorICAgICAgICAgICAgYnJsdHR5X2l0ZW09IiR7YnJsdHR5X2l0ZW1zfSIKKyAgICAgICAgICAgIGJybHR0eV9pdGVtcz0iIgorICAgICAgICAgICAgaWYgdGVzdCAiJHticmx0dHlfaXRlbX0iID0gImFsbCIKKyAgICAgICAgICAgIHRoZW4KKyAgICAgICAgICAgICAgIGJybHR0eV9pdGVtX2FsbD10cnVlCisgICAgICAgICAgICAgICBicmx0dHlfaXRlbV9pbmNsdWRlPXRydWUKKyAgICAgICAgICAgIGVsaWYgdGVzdCAiJHticmx0dHlfaXRlbX0iID0gIi1hbGwiCisgICAgICAgICAgICB0aGVuCisgICAgICAgICAgICAgICBicmx0dHlfaXRlbV9hbGw9dHJ1ZQorICAgICAgICAgICAgICAgYnJsdHR5X2l0ZW1faW5jbHVkZT1mYWxzZQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgYnJsdHR5X2l0ZW1fYWxsPWZhbHNlCisgICAgICAgICAgICBmaQorICAgICAgICAgICAgaWYgIiR7YnJsdHR5X2l0ZW1fYWxsfSIKKyAgICAgICAgICAgIHRoZW4KKyAgICAgICAgICAgICAgIGlmICIke2JybHR0eV9pdGVtX2luY2x1ZGV9IgorICAgICAgICAgICAgICAgdGhlbgorICAgICAgICAgICAgICAgICAgYnJsdHR5X2ludGVybmFsX2NvZGVzXyQxPSIke2JybHR0eV9pbnRlcm5hbF9jb2Rlc18kMX0ke2JybHR0eV9leHRlcm5hbF9jb2Rlc18kMX0iCisgICAgICAgICAgICAgICAgICBicmx0dHlfaW50ZXJuYWxfbmFtZXNfJDE9IiR7YnJsdHR5X2ludGVybmFsX25hbWVzXyQxfSR7YnJsdHR5X2V4dGVybmFsX25hbWVzXyQxfSIKKyAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICBicmx0dHlfZXh0ZXJuYWxfY29kZXNfJDE9IiIKKyAgICAgICAgICAgICAgIGJybHR0eV9leHRlcm5hbF9uYW1lc18kMT0iIgorICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIGZpCisgICAgICAgICBlbHNlCisgICAgICAgICAgICBbYnJsdHR5X2l0ZW09ImBleHByICIke2JybHR0eV9pdGVtc30iIDogJ1woW14sXSpcKSdgIl0KKyAgICAgICAgICAgIFticmx0dHlfaXRlbXM9ImBleHByICIke2JybHR0eV9pdGVtc30iIDogJ1teLF0qLFwoLipcKSdgIl0KKyAgICAgICAgIGZpCisgICAgICAgICBicmx0dHlfaXRlbV9zdWZmaXg9IiR7YnJsdHR5X2l0ZW0jLX0iCisgICAgICAgICBpZiB0ZXN0ICIke2JybHR0eV9pdGVtfSIgPSAiJHticmx0dHlfaXRlbV9zdWZmaXh9IgorICAgICAgICAgdGhlbgorICAgICAgICAgICAgYnJsdHR5X2l0ZW1faW5jbHVkZT10cnVlCisgICAgICAgICBlbHNlCisgICAgICAgICAgICBicmx0dHlfaXRlbV9pbmNsdWRlPWZhbHNlCisgICAgICAgICAgICBicmx0dHlfaXRlbT0iJHticmx0dHlfaXRlbV9zdWZmaXh9IgorICAgICAgICAgZmkKKworICAgICAgICAgQlJMVFRZX0lURU1fUkVTT0xWRShbJDFdKQorICAgICAgICAgIiR7YnJsdHR5X2l0ZW1fdW5rbm93bn0iICYmIHsKKyAgICAgICAgICAgIEFDX01TR19FUlJPUihbdW5rbm93biAkMSAkMjogJHticmx0dHlfaXRlbX1dKQorICAgICAgICAgfQorCisgICAgICAgICBicmx0dHlfaXRlbV9mb3VuZD0iYGV4cHIgIiR7YnJsdHR5X2V4dGVybmFsX2NvZGVzXyQxfSIgOiAiLiogJHticmx0dHlfaXRlbV9jb2RlfSAiYCIKKyAgICAgICAgIHRlc3QgIiR7YnJsdHR5X2l0ZW1fZm91bmR9IiAtZXEgMCAmJiB7CisgICAgICAgICAgICBBQ19NU0dfRVJST1IoW2R1cGxpY2F0ZSAkMSAkMjogJHticmx0dHlfaXRlbX1dKQorICAgICAgICAgfQorCisgICAgICAgICBicmx0dHlfaXRlbXNfbGVmdF8kMT0iYGVjaG8gIiR7YnJsdHR5X2l0ZW1zX2xlZnRfJDF9IiB8IHNlZCAtZSAicyUgJHticmx0dHlfaXRlbV9lbnRyeX0gJSAlImAiCisgICAgICAgICBicmx0dHlfZXh0ZXJuYWxfY29kZXNfJDE9ImBlY2hvICIke2JybHR0eV9leHRlcm5hbF9jb2Rlc18kMX0iIHwgc2VkIC1lICJzJSAke2JybHR0eV9pdGVtX2NvZGV9ICUgJSJgIgorICAgICAgICAgYnJsdHR5X2V4dGVybmFsX25hbWVzXyQxPSJgZWNobyAiJHticmx0dHlfZXh0ZXJuYWxfbmFtZXNfJDF9IiB8IHNlZCAtZSAicyUgJHticmx0dHlfaXRlbV9uYW1lfSAlICUiYCIKKworICAgICAgICAgIiR7YnJsdHR5X2l0ZW1faW5jbHVkZX0iICYmIHsKKyAgICAgICAgICAgIGJybHR0eV9pbnRlcm5hbF9jb2Rlc18kMT0iJHticmx0dHlfaW50ZXJuYWxfY29kZXNfJDF9ICR7YnJsdHR5X2l0ZW1fY29kZX0iCisgICAgICAgICAgICBicmx0dHlfaW50ZXJuYWxfbmFtZXNfJDE9IiR7YnJsdHR5X2ludGVybmFsX25hbWVzXyQxfSAke2JybHR0eV9pdGVtX25hbWV9IgorICAgICAgICAgfQorCisgICAgICAgICBCUkxUVFlfSVRFTV9SRVNPTFZFKFskMV0pCisgICAgICAgICAiJHticmx0dHlfaXRlbV91bmtub3dufSIgfHwgeworICAgICAgICAgICAgQUNfTVNHX0VSUk9SKFthbWJpZ3VvdXMgJDEgJDI6ICR7YnJsdHR5X2l0ZW19XSkKKyAgICAgICAgIH0KKworICAgICAgICAgdGVzdCAiJHticmx0dHlfZGVsaW1pdGVyfSIgLWVxIDAgJiYgYnJlYWsKKyAgICAgIGRvbmUKKyAgIGZpCisKKyAgIEJSTFRUWV9WQVJfVFJJTShbYnJsdHR5X2V4dGVybmFsX2NvZGVzXyQxXSkKKyAgIEJSTFRUWV9WQVJfVFJJTShbYnJsdHR5X2V4dGVybmFsX25hbWVzXyQxXSkKKyAgIEJSTFRUWV9WQVJfVFJJTShbYnJsdHR5X2ludGVybmFsX2NvZGVzXyQxXSkKKyAgIEJSTFRUWV9WQVJfVFJJTShbYnJsdHR5X2ludGVybmFsX25hbWVzXyQxXSkKK2ZpCisKK0FDX1NVQlNUKFticmx0dHlfZXh0ZXJuYWxfY29kZXNfJDFdKQorQUNfU1VCU1QoW2JybHR0eV9leHRlcm5hbF9uYW1lc18kMV0pCitBQ19TVUJTVChbYnJsdHR5X2ludGVybmFsX2NvZGVzXyQxXSkKK0FDX1NVQlNUKFticmx0dHlfaW50ZXJuYWxfbmFtZXNfJDFdKQorCitzZXQgLS0gJHticmx0dHlfaW50ZXJuYWxfY29kZXNfJDF9ICR7YnJsdHR5X2V4dGVybmFsX2NvZGVzXyQxfQorQUNfREVGSU5FX1VOUVVPVEVEKEJSTFRUWV9VUFBFUkNBU0VfVFJBTlNMQVRFKFskMV8kMl9jb2Rlc10pLCBbIiR7Kn0iXSwgCisgICAgICAgICAgICAgICAgICAgW0RlZmluZSB0aGlzIHRvIGJlIGEgc3RyaW5nIGNvbnRhaW5pbmcgYSBsaXN0IG9mIHRoZSAkMSAkMiBjb2Rlcy5dKQorCitBQ19TVUJTVChbZGVmYXVsdF8kMV8kMl0sIFsiJHsxfSJdKQorQUNfREVGSU5FX1VOUVVPVEVEKEJSTFRUWV9VUFBFUkNBU0VfVFJBTlNMQVRFKFtkZWZhdWx0XyQxXyQyXSksIFsiJHsxfSJdLCAKKyAgICAgICAgICAgICAgICAgICBbRGVmaW5lIHRoaXMgdG8gYmUgYSBzdHJpbmcgY29udGFpbmluZyB0aGUgZGVmYXVsdCAkMSAkMiBjb2RlLl0pCisKKyQxX2RyaXZlcl9saWJyYXJpZXM9IiIKK2lmIHRlc3QgLW4gIiR7YnJsdHR5X2ludGVybmFsX2NvZGVzXyQxfSIKK3RoZW4KKyAgIGZvciBicmx0dHlfZHJpdmVyIGluICR7YnJsdHR5X2ludGVybmFsX2NvZGVzXyQxfQorICAgZG8KKyAgICAgIGV2YWwgJ2JybHR0eV9saWJyYXJpZXM9IiR7JDFfbGlicmFyaWVzXyciJHticmx0dHlfZHJpdmVyfSInfSInCisgICAgICBpZiB0ZXN0IC1uICIke2JybHR0eV9saWJyYXJpZXN9IgorICAgICAgdGhlbgorICAgICAgICAgJDFfZHJpdmVyX2xpYnJhcmllcz0iJHskMV9kcml2ZXJfbGlicmFyaWVzfSAke2JybHR0eV9saWJyYXJpZXN9IgorICAgICAgZmkKKyAgIGRvbmUKK2ZpCitCUkxUVFlfVkFSX1RSSU0oWyQxX2RyaXZlcl9saWJyYXJpZXNdKQorQUNfU1VCU1QoWyQxX2RyaXZlcl9saWJyYXJpZXNdKQorXSkKKworQUNfREVGVU4oW0JSTFRUWV9JVEVNX1JFU09MVkVdLCBbZG5sCiticmx0dHlfaXRlbV91bmtub3duPXRydWUKK2JybHR0eV9pdGVtX2xlbmd0aD1gZXhwciBsZW5ndGggIiR7YnJsdHR5X2l0ZW19ImAKKworaWYgdGVzdCAiJHticmx0dHlfaXRlbV9sZW5ndGh9IiAtZXEgMgordGhlbgorICAgW2JybHR0eV9pdGVtX2VudHJ5PWBleHByICIke2JybHR0eV9pdGVtc19sZWZ0XyQxfSIgOiAnLiogXCgnIiR7YnJsdHR5X2l0ZW19IictW14gXSpcKSdgXQorICAgaWYgdGVzdCAtbiAiJHticmx0dHlfaXRlbV9lbnRyeX0iCisgICB0aGVuCisgICAgICBicmx0dHlfaXRlbV9jb2RlPSIke2JybHR0eV9pdGVtfSIKKyAgICAgIFticmx0dHlfaXRlbV9uYW1lPWBleHByICIke2JybHR0eV9pdGVtX2VudHJ5fSIgOiAnW15bLi0uXV0qLVwoLipcKSQnYF0KKyAgICAgIGJybHR0eV9pdGVtX3Vua25vd249ZmFsc2UKKyAgIGZpCitlbGlmIHRlc3QgIiR7YnJsdHR5X2l0ZW1fbGVuZ3RofSIgLWd0IDIKK3RoZW4KKyAgIFticmx0dHlfaXRlbV9lbnRyeT1gZXhwciAiJHticmx0dHlfaXRlbXNfbGVmdF8kMX0iIDogJy4qIFwoW14tIF0qLSciJHticmx0dHlfaXRlbX0iJ1teIF0qXCknYF0KKyAgIGlmIHRlc3QgLXogIiR7YnJsdHR5X2l0ZW1fZW50cnl9IgorICAgdGhlbgorICAgICAgQlJMVFRZX0xPV0VSQ0FTRV9BU1NJR04oW2JybHR0eV9sb3dlcmNhc2VdLCBbJHticmx0dHlfaXRlbXNfbGVmdF8kMX1dKQorICAgICAgW2JybHR0eV9pdGVtX2NvZGU9YGV4cHIgIiR7YnJsdHR5X2xvd2VyY2FzZX0iIDogJy4qIFwoW14tIF0qXCktJyIke2JybHR0eV9pdGVtfSJgXQorICAgICAgaWYgdGVzdCAtbiAiJHticmx0dHlfaXRlbV9jb2RlfSIKKyAgICAgIHRoZW4KKyAgICAgICAgIFticmx0dHlfaXRlbV9lbnRyeT1gZXhwciAiJHticmx0dHlfaXRlbXNfbGVmdF8kMX0iIDogJy4qIFwoJyIke2JybHR0eV9pdGVtX2NvZGV9IictW14gXSpcKSdgXQorICAgICAgZmkKKyAgIGZpCisKKyAgIGlmIHRlc3QgLW4gIiR7YnJsdHR5X2l0ZW1fZW50cnl9IgorICAgdGhlbgorICAgICAgW2JybHR0eV9pdGVtX2NvZGU9YGV4cHIgIiR7YnJsdHR5X2l0ZW1fZW50cnl9IiA6ICdcKFteWy4tLl1dKlwpJ2BdCisgICAgICBbYnJsdHR5X2l0ZW1fbmFtZT1gZXhwciAiJHticmx0dHlfaXRlbV9lbnRyeX0iIDogJ1teWy4tLl1dKi1cKC4qXCkkJ2BdCisgICAgICBicmx0dHlfaXRlbV91bmtub3duPWZhbHNlCisgICBmaQorZmkKK10pCisKK0FDX0RFRlVOKFtCUkxUVFlfQVJHX0RSSVZFUl0sIFtkbmwKK0JSTFRUWV9BUkdfSVRFTShbJDFdLCBbZHJpdmVyXSkKK2lmIHRlc3QgIiR7YnJsdHR5X2VuYWJsZWRfJDFfc3VwcG9ydH0iICE9ICJubyIKK3RoZW4KKyAgIGlmIHRlc3QgLW4gIiR7YnJsdHR5X2ludGVybmFsX2NvZGVzXyQxfSIKKyAgIHRoZW4KKyAgICAgIFskMV9kcml2ZXJfb2JqZWN0cz0iYGVjaG8gIiR7YnJsdHR5X2ludGVybmFsX25hbWVzXyQxfSIgfCBzZWQgLWUgJ3MlXChbXiBdW14gXSpcKSUkKEJMRF9UT1ApRHJpdmVycy8kMi9cMS8kMS4kTyVnJ2AiXQorICAgICAgJDFfaGVscD0iJDEtaGVscCIKKyAgIGZpCisKKyAgIGlmIHRlc3QgIiR7YnJsdHR5X3N0YW5kYWxvbmVfcHJvZ3JhbXN9IiAhPSAieWVzIgorICAgdGhlbgorICAgICAgaWYgdGVzdCAtbiAiJHticmx0dHlfZXh0ZXJuYWxfY29kZXNfJDF9IgorICAgICAgdGhlbgorICAgICAgICAgJDFfZHJpdmVycz0iJDEtZHJpdmVycyIKKyAgICAgICAgIGluc3RhbGxfZHJpdmVycz0iaW5zdGFsbC1kcml2ZXJzIgorICAgICAgZmkKKyAgICAgIEJSTFRUWV9TVU1NQVJZX0lURU0oW2V4dGVybmFsLSQxLWRyaXZlcnNdLCBbYnJsdHR5X2V4dGVybmFsX2NvZGVzXyQxXSkKKyAgIGZpCisKKyAgIEJSTFRUWV9TVU1NQVJZX0lURU0oW2ludGVybmFsLSQxLWRyaXZlcnNdLCBbYnJsdHR5X2ludGVybmFsX2NvZGVzXyQxXSkKKyAgIEJSTFRUWV9BUkdfUEFSQU1FVEVSUyhbJDFdLCBbJDEgZHJpdmVyKHMpXSwgW0RSSVZFUjpdKQorZmkKKworZm9yIGJybHR0eV9kcml2ZXIgaW4gJHticmx0dHlfaXRlbV9uYW1lc18kMX0KK2RvCisgICBicmx0dHlfYnVpbGRfZGlyZWN0b3JpZXM9IiR7YnJsdHR5X2J1aWxkX2RpcmVjdG9yaWVzfSBEcml2ZXJzLyQyLyR7YnJsdHR5X2RyaXZlcn0iCitkb25lCisKK0FDX1NVQlNUKFskMV9kcml2ZXJfb2JqZWN0c10pCitBQ19TVUJTVChbJDFfZHJpdmVyc10pCitBQ19TVUJTVChbJDFfaGVscF0pCitdKQorCitBQ19ERUZVTihbQlJMVFRZX1NVTU1BUllfQkVHSU5dLCBbZG5sCiticmx0dHlfc3VtbWFyeV9saW5lcz0iT3B0aW9ucyBTdW1tYXJ5OiIKK10pCisKK0FDX0RFRlVOKFtCUkxUVFlfU1VNTUFSWV9FTkRdLCBbZG5sCitBQ19DT05GSUdfQ09NTUFORFMoW2l0ZW0tc3VtbWFyeV0sCisgICBbQUNfTVNHX05PVElDRShbJHticmx0dHlfc3VtbWFyeV9saW5lc31dKV0sCisgICBbYnJsdHR5X3N1bW1hcnlfbGluZXM9JyR7YnJsdHR5X3N1bW1hcnlfbGluZXN9J10KKyldKQorCitBQ19ERUZVTihbQlJMVFRZX1NVTU1BUllfSVRFTV0sIFtkbmwKK2JybHR0eV9zdW1tYXJ5X2xpbmVzPSIke2JybHR0eV9zdW1tYXJ5X2xpbmVzfQorICAgJDE6ICR7JDJ9Il0pCisKK0FDX0RFRlVOKFtCUkxUVFlfUE9SVEFCTEVfRElSRUNUT1JZXSwgW2RubAorICAgQlJMVFRZX1RPUExFVkVMX0RJUkVDVE9SWShbJDFdLCBbJDJdLCBbcHJlZml4XSldKQorCitBQ19ERUZVTihbQlJMVFRZX0FSQ0hJVEVDVFVSRV9ESVJFQ1RPUlldLCBbZG5sCitpZiB0ZXN0ICIke2V4ZWNfcHJlZml4fSIgPSAiTk9ORSIKK3RoZW4KKyAgIEJSTFRUWV9UT1BMRVZFTF9ESVJFQ1RPUlkoWyQxXSwgWyQyXSwgW2V4ZWNfcHJlZml4XSkKK2ZpXSkKKworQUNfREVGVU4oW0JSTFRUWV9UT1BMRVZFTF9ESVJFQ1RPUlldLCBbZG5sCitpZiB0ZXN0ICIke3ByZWZpeH0iID0gIk5PTkUiCit0aGVuCisgICBpZiB0ZXN0IC16ICIke2V4ZWN1dGVfcm9vdH0iCisgICB0aGVuCisgICAgICBbaWYgdGVzdCBgZXhwciAiJHskMX0gIiA6ICdcJHskM30vW14vXSokJ2AgLWd0IDBdCisgICAgICB0aGVuCisgICAgICAgICAkMT0iYGVjaG8gJHskMX0gfCBzZWQgLWUgJ3MlLyUkMi8lJ2AiCisgICAgICBmaQorICAgZmkKK2ZpXSkKKworQUNfREVGVU4oW0JSTFRUWV9FWEVDVVRBQkxFX1BBVEhdLCBbZG5sCitbaWYgdGVzdCBgZXhwciAiJHskMX0gIiA6ICdbXi8gXVteLyBdKi8nYCAtZ3QgMF0KK3RoZW4KKyAgICQxPSJgcHdkYC8keyQxfSIKK2ZpXSkKKworQUNfREVGVU4oW0JSTFRUWV9JRl9QQUNLQUdFXSwgW2RubAorQlJMVFRZX0FSR19XSVRIKAorICAgWyQyXSwgW0RJUkVDVE9SWV0sCisgICBbd2hlcmUgdGhlICQxIHBhY2thZ2UgaXMgaW5zdGFsbGVkXSwKKyAgIFskMl9yb290XSwgWyJ5ZXMiXQorKQorCiskMl9mb3VuZD1mYWxzZQorbTRfZGVmaW5lKFskMl9maW5kXSwgaWZlbHNlKG00X2V2YWwoJCMgPiA0KSwgMSwgW3RydWVdLCBbZmFsc2VdKSkKK2lmZWxzZSgkMl9maW5kLCBbdHJ1ZV0sIFtCUkxUVFlfSEFWRV9QQUNLQUdFKFskMl0sIFskMV0sIFskMl9mb3VuZD10cnVlXSwgWzpdKV0pCisKK2lmIHRlc3QgIiR7JDJfcm9vdH0iID0gIm5vIgordGhlbgorICAgJDJfcm9vdD0iIgorZWxpZiB0ZXN0ICIkeyQyX3Jvb3R9IiA9ICJ5ZXMiCit0aGVuCisgICAiJHskMl9mb3VuZH0iIHx8IHsKKyAgICAgICQyX3Jvb3Q9IiIKKyAgICAgIHJvb3RzPSIvdXNyIC91c3IvbG9jYWwgL3Vzci9sb2NhbC8kMSAvdXNyL2xvY2FsLyQyIC9vcHQvJDEgL29wdC8kMiAvbWluZ3cgL21pbmd3LyQxIC9taW5ndy8kMiIKKworICAgICAgZm9yIHJvb3QgaW4gJHtyb290c30KKyAgICAgIGRvCisgICAgICAgICB0ZXN0IC1mICIke3Jvb3R9LyQzIiAmJiB7CisgICAgICAgICAgICAkMl9yb290PSIke3Jvb3R9IgorICAgICAgICAgICAgQUNfTVNHX05PVElDRShbJDEgcm9vdDogJHskMl9yb290fV0pCisgICAgICAgICAgICBicmVhaworICAgICAgICAgfQorICAgICAgZG9uZQorCisgICAgICBpZiB0ZXN0IC16ICIkeyQyX3Jvb3R9IgorICAgICAgdGhlbgorICAgICAgICAgQUNfTVNHX1dBUk4oWyQxIHBhY2thZ2Ugbm90IGZvdW5kOiAke3Jvb3RzfV0pCisgICAgICBmaQorICAgfQorZmkKKworQUNfU1VCU1QoWyQyX3Jvb3RdKQorQlJMVFRZX1NVTU1BUllfSVRFTShbJDItcm9vdF0sIFskMl9yb290XSkKKwordGVzdCAtbiAiJHskMl9yb290fSIgJiYgeworICAgaWZlbHNlKCQyX2ZpbmQsIFt0cnVlXSwgW2RubAorICAgICAgaWYgdGVzdCAiJHskMl9yb290fSIgPSAieWVzIgorICAgICAgdGhlbgorICAgICAgICAgJDJfcm9vdD0iL3VzciIKKyAgICAgIGVsc2UKKyAgICAgICAgICQyX2luY2x1ZGVzPSJCUkxUVFlfV09SRFNfUFJFUEVORChbJDVdLCBbLUkkeyQyX3Jvb3R9L10pIgorICAgICAgICAgJDJfbGlicz0iQlJMVFRZX1dPUkRTX1BSRVBFTkQoWyQ2XSwgWy1MJHskMl9yb290fS9dKSBCUkxUVFlfV09SRFNfUFJFUEVORChbJDddLCBbLWxdKSIKKyAgICAgIGZpCisgICBdKQorCisgICBBQ19ERUZJTkVfVU5RVU9URUQoQlJMVFRZX1VQUEVSQ0FTRV9UUkFOU0xBVEUoWyQyX3Jvb3RdKSwgWyIkeyQyX3Jvb3R9Il0sCisgICAgICAgICAgICAgICAgICAgICAgW0RlZmluZSB0aGlzIHRvIGJlIGEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIHBhdGggdG8gdGhlIHJvb3Qgb2YgdGhlICQxIHBhY2thZ2UuXSkKKworICAgJDQKK30KK10pCisKK0FDX0RFRlVOKFtCUkxUVFlfV09SRFNfUFJFUEVORF0sIFtkbmwKK3BhdHN1YnN0KFskMV0sIFtcKFxTK1wpXSwgWyQyXDFdKV0pCisKK0FDX0RFRlVOKFtCUkxUVFlfSEFWRV9QQUNLQUdFXSwgW2RubAorJDFfcGFja2FnZT0iIgorJDFfaW5jbHVkZXM9IiIKKyQxX2xpYnM9IiIKKworZm9yIHBhY2thZ2Vfc3BlY2lmaWNhdGlvbiBpbiAkMgorZG8KKyAgICR7UEtHX0NPTkZJR30gLS1leGlzdHMgIiR7cGFja2FnZV9zcGVjaWZpY2F0aW9ufSIgJiYgeworICAgICAgQUNfREVGSU5FKEJSTFRUWV9VUFBFUkNBU0VfVFJBTlNMQVRFKFtIQVZFX1BLR18kMV0pKQorCisgICAgICAkMV9wYWNrYWdlPSIke3BhY2thZ2Vfc3BlY2lmaWNhdGlvbiUlICp9IgorICAgICAgQUNfTVNHX05PVElDRShbJDEgcGFja2FnZTogJHskMV9wYWNrYWdlfV0pCisKKyAgICAgICQxX2luY2x1ZGVzPWAke1BLR19DT05GSUd9IC0tY2ZsYWdzLW9ubHktSSAiJHskMV9wYWNrYWdlfSJgCisgICAgICBBQ19NU0dfTk9USUNFKFskMSBpbmNsdWRlczogJHskMV9pbmNsdWRlc31dKQorCisgICAgICAkMV9saWJzPWAke1BLR19DT05GSUd9ICR7cGtnY29uZmlnX2ZsYWdzX2xpYnN9ICIkeyQxX3BhY2thZ2V9ImAKKyAgICAgIEFDX01TR19OT1RJQ0UoWyQxIGxpYnM6ICR7JDFfbGlic31dKQorCisgICAgICAkMworICAgICAgYnJlYWsKKyAgIH0KK2RvbmUKKwordGVzdCAtbiAiJHskMV9wYWNrYWdlfSIgfHwgeworICAgaWZlbHNlKGxlbihbJDRdKSwgMCwgW0FDX01TR19XQVJOKFskMSBzdXBwb3J0IG5vdCBhdmFpbGFibGVdKV0sIFskNF0pCit9CisKK0FDX1NVQlNUKFskMV9wYWNrYWdlXSkKK0FDX1NVQlNUKFskMV9pbmNsdWRlc10pCitBQ19TVUJTVChbJDFfbGlic10pCitdKQorCitBQ19ERUZVTihbQlJMVFRZX0hBVkVfREJVU10sIFtkbmwKKyAgIEFDX0NBQ0hFX0NIRUNLKFtpZiBELUJ1cyBpcyBhdmFpbGFibGVdLCBbYnJsdHR5X2N2X2hhdmVfZGJ1c10sIFtkbmwKKyAgICAgIEJSTFRUWV9IQVZFX1BBQ0tBR0UoW2RidXNdLCBbImRidXMtMSA+PSAxLjAiXSwgW2RubAorICAgICAgICAgYnJsdHR5X2N2X2hhdmVfZGJ1cz15ZXMKKyAgICAgIF0sIFtkbmwKKyAgICAgICAgIGJybHR0eV9jdl9oYXZlX2RidXM9bm8KKyAgICAgIF0pCisgICBdKQorXSkKKworQUNfREVGVU4oW0JSTFRUWV9JRl9EQlVTXSwgW2RubAorQUNfUkVRVUlSRShbQlJMVFRZX0hBVkVfREJVU10pCit0ZXN0ICIke2JybHR0eV9jdl9oYXZlX2RidXN9IiA9ICJ5ZXMiICYmIHsKKyAgICQxCit9XSkKKworQUNfREVGVU4oW0JSTFRUWV9IQVZFX1BUSFJFQURTXSwgW2RubAorICAgQUNfQ0FDSEVfQ0hFQ0soW2lmIHB0aHJlYWRzIGFyZSBhdmFpbGFibGVdLCBbYnJsdHR5X2N2X2hhdmVfcHRocmVhZHNdLCBbZG5sCisgICAgICBTWVNDRkxBR1M9IiR7U1lTQ0ZMQUdTfSAtRF9SRUVOVFJBTlQiCisgICAgICBjYXNlICIke2hvc3Rfb3N9IgorICAgICAgaW4KKyAgICAgICAgIG1pbmd3MzIqKQorICAgICAgICAgICAgYnJsdHR5X2N2X2hhdmVfcHRocmVhZHM9eWVzCisgICAgICAgICAgICA7OworICAgICAgICAgKikKKyAgICAgICAgICAgIGJybHR0eV9jdl9oYXZlX3B0aHJlYWRzPW5vCisgICAgICAgICAgICBBQ19DSEVDS19IRUFERVIoW3B0aHJlYWQuaF0sIFtkbmwKKyAgICAgICAgICAgICAgIGNhc2UgIiR7aG9zdF9vc30iCisgICAgICAgICAgICAgICBpbgorICAgICAgICAgICAgICAgICAgc29sYXJpcyopIEFDX1NFQVJDSF9MSUJTKFtfZ2V0ZnBdLCBbcHRocmVhZF0sIFticmx0dHlfY3ZfaGF2ZV9wdGhyZWFkcz15ZXNdKTs7CisgICAgICAgICAgICAgICAgICBocHV4KikgQUNfU0VBUkNIX0xJQlMoW19fcHRocmVhZF9jYW5jZWxfc3RhY2tdLCBbcHRocmVhZF0sIFticmx0dHlfY3ZfaGF2ZV9wdGhyZWFkcz15ZXNdKTs7CisgICAgICAgICAgICAgICAgICAqKSBBQ19TRUFSQ0hfTElCUyhbcHRocmVhZF9jcmVhdGVdLCBbcHRocmVhZCBjX3JdLCBbYnJsdHR5X2N2X2hhdmVfcHRocmVhZHM9eWVzXSk7OworICAgICAgICAgICAgICAgZXNhYworICAgICAgICAgICAgXSkKKyAgICAgICAgICAgIDs7CisgICAgICBlc2FjCisgICBdKQorXSkKKworQUNfREVGVU4oW0JSTFRUWV9JRl9QVEhSRUFEU10sIFtkbmwKK0FDX1JFUVVJUkUoW0JSTFRUWV9IQVZFX1BUSFJFQURTXSkKK3Rlc3QgIiR7YnJsdHR5X2N2X2hhdmVfcHRocmVhZHN9IiA9ICJ5ZXMiICYmIHsKKyAgICQxCit9XSkKKworQUNfREVGVU4oW0JSTFRUWV9QQUNLQUdFX0NIT09TRV0sIFtkbmwKK0JSTFRUWV9BUkdfV0lUSCgKKyAgIFt0cmFuc2xpdChbJDFdLCBbX10sIFstXSldLCBbUEFDS0FHRV0sCisgICBbd2hpY2ggdHJhbnNsaXQoWyQxXSwgW19dLCBbIF0pIHBhY2thZ2UgdG8gdXNlIChCUkxUVFlfUEFDS0FHRV9MSVNUKG00X3NoaWZ0KCRAKSkpXSwKKyAgIFskMV9wYWNrYWdlXSwgWyJ5ZXMiXQorKQoraWYgdGVzdCAiJHskMV9wYWNrYWdlfSIgPSAibm8iCit0aGVuCisgICAkMV9wYWNrYWdlPSIiCitlbGlmIHRlc3QgIiR7JDFfcGFja2FnZX0iID0gInllcyIKK3RoZW4KK0FDX0NBQ0hFX0NIRUNLKFt3aGljaCB0cmFuc2xpdChbJDFdLCBbX10sIFsgXSkgcGFja2FnZSB0byB1c2VdLCBbYnJsdHR5X2N2X3BhY2thZ2VfJDFdLCBbZG5sCisgICBicmx0dHlfY3ZfcGFja2FnZV8kMT0iIgorICAgYnJsdHR5X3BhY2thZ2VzPSIiCisgICBCUkxUVFlfUEFDS0FHRV9ERUZJTkUobTRfc2hpZnQoJEApKQorCisgICBmb3IgYnJsdHR5X3BhY2thZ2UgaW4gJHticmx0dHlfcGFja2FnZXN9CisgICBkbworICAgICAgZXZhbCAnYnJsdHR5X2hlYWRlcnM9IiR7YnJsdHR5X2hlYWRlcnNfJyIke2JybHR0eV9wYWNrYWdlfSInfSInCisgICAgICB0ZXN0IC1uICIke2JybHR0eV9oZWFkZXJzfSIgJiYgeworICAgICAgICAgYnJsdHR5X2ZvdW5kPXRydWUKKyAgICAgICAgIGZvciBicmx0dHlfaGVhZGVyIGluICR7YnJsdHR5X2hlYWRlcnN9CisgICAgICAgICBkbworICAgICAgICAgICAgQlJMVFRZX0hBVkVfSEVBREVSKFske2JybHR0eV9oZWFkZXJ9XSwgW10sIFticmx0dHlfZm91bmQ9ZmFsc2VdKQorICAgICAgICAgICAgIiR7YnJsdHR5X2ZvdW5kfSIgfHwgYnJlYWsKKyAgICAgICAgIGRvbmUKKyAgICAgICAgICIke2JybHR0eV9mb3VuZH0iIHx8IGNvbnRpbnVlCisgICAgICB9CisKKyAgICAgIEFDX0NIRUNLX0xJQihbJHticmx0dHlfcGFja2FnZX1dLCBbbWFpbl0sIFtdLCBbY29udGludWVdKQorICAgICAgYnJsdHR5X2N2X3BhY2thZ2VfJDE9IiR7YnJsdHR5X3BhY2thZ2V9IgorICAgICAgYnJlYWsKKyAgIGRvbmUKK10pCisgICAkMV9wYWNrYWdlPSIke2JybHR0eV9jdl9wYWNrYWdlXyQxfSIKK2Vsc2UKKyAgIEJSTFRUWV9IQVZFX0xJQlJBUlkoWyR7JDFfcGFja2FnZX1dLCBbXSwgWyQxX3BhY2thZ2U9IiJdKQorZmkKK0FDX1NVQlNUKFskMV9wYWNrYWdlXSkKK3Rlc3QgLW4gIiR7JDFfcGFja2FnZX0iICYmIHsKKyAgIEJSTFRUWV9VUFBFUkNBU0VfQVNTSUdOKFticmx0dHlfdWNdLCBbJHskMV9wYWNrYWdlfV0pCisgICBBQ19ERUZJTkVfVU5RVU9URUQoW0hBVkVfUEtHXyR7YnJsdHR5X3VjfV0pCisgICBCUkxUVFlfU1VNTUFSWV9JVEVNKFt0cmFuc2xpdChbJDFdLCBbX10sIFstXSktcGFja2FnZV0sIFskMV9wYWNrYWdlXSkKK31dKQorQUNfREVGVU4oW0JSTFRUWV9QQUNLQUdFX0RFRklORV0sIFtkbmwKK2lmZWxzZSgkIywgMCwgW10sIFtkbmwKKworc2V0IC0tIFskMV0KK2JybHR0eV9wYWNrYWdlPSIkezF9Igorc2hpZnQgMQorZXZhbCAiYnJsdHR5X2hlYWRlcnNfJHticmx0dHlfcGFja2FnZX0iJz0iJHsqfSInCiticmx0dHlfcGFja2FnZXM9IiR7YnJsdHR5X3BhY2thZ2VzfSAke2JybHR0eV9wYWNrYWdlfSIKK2lmZWxzZSgkIywgMSwgW10sIFtCUkxUVFlfUEFDS0FHRV9ERUZJTkUobTRfc2hpZnQoJEApKV0pXSldKQorQUNfREVGVU4oW0JSTFRUWV9QQUNLQUdFX0xJU1RdLCBbZG5sCitpZmVsc2UoJCMsIDAsIFtdLCAkIywgMSwgW0JSTFRUWV9QQUNLQUdFX05BTUUoWyQxXSldLCBbQlJMVFRZX1BBQ0tBR0VfTkFNRShbJDFdKSBCUkxUVFlfUEFDS0FHRV9MSVNUKG00X3NoaWZ0KCRAKSldKV0pCitBQ19ERUZVTihbQlJMVFRZX1BBQ0tBR0VfTkFNRV0sIFtwYXRzdWJzdChbJDFdLCBbXiAqXChcdytcKS4qXSwgW1wxXSldKQorCitBQ19ERUZVTihbQlJMVFRZX09QVElPTlNfTEQyQ0NdLCBbZG5sCitgZWNobyAiJDEiIHwgc2VkIC1lICcKKy9eJC9kCitzL14gKi8tV2wgLworcy8gKiQvLworcy8gICovLC9nCisnYF0pCisKK0FDX0RFRlVOKFtCUkxUVFlfSEFWRV9XSU5ET1dTX0xJQlJBUlldLCBbZG5sCitBQ19DQUNIRV9DSEVDSygKKyAgIFtpZiBETEwgJDEgY2FuIGJlIGxvYWRlZF0sCisgICBbYnJsdHR5X2N2X2RsbF8kMV0sCisgICBbCisgICAgICBBQ19SVU5fSUZFTFNFKAorICAgICAgICAgWworICAgICAgICAgICAgQUNfTEFOR19TT1VSQ0UoW1sKKyAgICAgICAgICAgICAgICNpbmNsdWRlIDx3aW5kb3dzLmg+CisgICAgICAgICAgICAgICBpbnQgbWFpbiAoKSB7CisgICAgICAgICAgICAgICAgICByZXR1cm4gIUxvYWRMaWJyYXJ5KCIkMS5ETEwiKTsKKyAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIF1dKQorICAgICAgICAgXSwKKyAgICAgICAgIFticmx0dHlfY3ZfZGxsXyQxPXllc10sCisgICAgICAgICBbYnJsdHR5X2N2X2RsbF8kMT1ub10KKyAgICAgICkKKyAgIF0KKykKK2lmIHRlc3QgIiR7YnJsdHR5X2N2X2RsbF8kMX0iID0gInllcyIKK3RoZW4KKyAgIEJSTFRUWV9IQVZFX0xJQlJBUlkoWyQxXSkKKyAgICQyCitlbHNlCisgICA6CisgICAkMworZmldKQorCitBQ19ERUZVTihbQlJMVFRZX0hBVkVfV0lORE9XU19GVU5DVElPTl0sIFtkbmwKK0FDX0NBQ0hFX0NIRUNLKAorICAgW2lmIGZ1bmN0aW9uICQxIGluIERMTCAkMiBleGlzdHNdLAorICAgW2JybHR0eV9jdl9mdW5jdGlvbl8kMV0sCisgICBbCisgICAgICBBQ19SVU5fSUZFTFNFKFsKKyAgICAgICAgIEFDX0xBTkdfU09VUkNFKFtbCisgICAgICAgICAgICAjaW5jbHVkZSA8d2luZG93cy5oPgorICAgICAgICAgICAgI2luY2x1ZGUgPHN0ZGlvLmg+CisgICAgICAgICAgICAjaW5jbHVkZSA8ZXJybm8uaD4KKworICAgICAgICAgICAgaW50CisgICAgICAgICAgICBtYWluICh2b2lkKSB7CisgICAgICAgICAgICAgIEhNT0RVTEUgbW9kdWxlOworICAgICAgICAgICAgICBISU5TVEFOQ0UgaW5zdGFuY2U7CisgICAgICAgICAgICAgIGlmICghKGluc3RhbmNlID0gTG9hZExpYnJhcnkoIiQyLmRsbCIpKSkgcmV0dXJuIDE7CisgICAgICAgICAgICAgIGlmICghKG1vZHVsZSA9IEdldE1vZHVsZUhhbmRsZSgiJDIuZGxsIikpKSByZXR1cm4gMjsKKyAgICAgICAgICAgICAgaWYgKCEoR2V0UHJvY0FkZHJlc3MobW9kdWxlLCAiJDEiKSkpIHJldHVybiAzOworICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgIF1dKSwKKyAgICAgICAgIFticmx0dHlfY3ZfZnVuY3Rpb25fJDE9eWVzXSwKKyAgICAgICAgIFticmx0dHlfY3ZfZnVuY3Rpb25fJDE9bm9dCisgICAgICBdKQorICAgXQorKQoraWYgdGVzdCAiJHticmx0dHlfY3ZfZnVuY3Rpb25fJDF9IiA9ICJ5ZXMiCit0aGVuCisgICBBQ19ERUZJTkUoQlJMVFRZX1VQUEVSQ0FTRV9UUkFOU0xBVEUoW0hBVkVfJDFdKSwgWzFdLAorICAgICAgICAgICAgIFtEZWZpbmUgdGhpcyBpZiB0aGUgZnVuY3Rpb24gJDEgaXMgYXZhaWxhYmxlLl0pCisgICAkMworZWxzZQorICAgOgorICAgJDQKK2ZpCitdKQorCitBQ19ERUZVTihbQlJMVFRZX0JJTkRJTkdTXSwgW2RubAoraWZlbHNlKCQjLCAxLCBbZG5sCitCUkxUVFlfQklORElOR1MoWyQxXSwgbTRfdG9sb3dlcihbJDFdKSwgbTRfdG91cHBlcihbJDFdKSlkbmwKK10sIFtkbmwKK0JSTFRUWV9BUkdfRElTQUJMRSgKKyAgIFskMi1iaW5kaW5nc10sCisgICBbJDEgYmluZGluZ3MgZm9yIEJybEFQSV0sCisgICBbXSwKKyAgIFsKKyAgICAgIEJSTFRUWV8kM19CSU5ESU5HUworICAgICAgaWYgIiR7JDNfT0t9IgorICAgICAgdGhlbgorICAgICAgICAgYXBpX2JpbmRpbmdzPSIke2FwaV9iaW5kaW5nc30gJDEiCisgICAgICBlbHNlCisgICAgICAgICBBQ19NU0dfV0FSTihbJDEgQnJsQVBJIGJpbmRpbmdzIG5vdCBpbmNsdWRlZF0pCisgICAgICBmaQorICAgXQorKWRubAorXSldKQorCitBQ19ERUZVTihbQlJMVFRZX1BLR0NPTkZJR19WQVJJQUJMRV0sIFtkbmwKKyQxPSQoJFBLR19DT05GSUcgLS1zaWxlbmNlLWVycm9ycyAtLXZhcmlhYmxlPSIkMyIgLS0gIiQyIikKK3Rlc3QgLW4gIiR7JDF9IiB8fCAkMT0iJDQiCitBQ19TVUJTVChbJDFdKQorXSkKKwpkaWZmIC0tZ2l0IGEvbWs0YnVpbGQgYi9tazRidWlsZApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi40N2FkM2RmCi0tLSAvZGV2L251bGwKKysrIGIvbWs0YnVpbGQKQEAgLTAsMCArMSwxMzkgQEAKKyMhL2Jpbi9zaAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorIyAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyMKKyMgQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorIworIyBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorIworIyBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisjIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyMgbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisjCisjIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK3NldCAtZQorCisuICJgZGlybmFtZSAiJHswfSJgL2JybHR0eS1wcm9sb2d1ZS5zaCIKK2RlZmF1bHRTb3VyY2VSb290PSIke3Byb2dyYW1EaXJlY3Rvcnl9IgorYWRkUHJvZ3JhbU9wdGlvbiBzIHN0cmluZy5kaXJlY3Rvcnkgc291cmNlUm9vdCAidGhlIHRvcC1sZXZlbCBkaXJlY3Rvcnkgb2YgdGhlIHNvdXJjZSB0cmVlIiAiJHtkZWZhdWx0U291cmNlUm9vdH0iCitwYXJzZVByb2dyYW1Bcmd1bWVudHMgIiR7QH0iCisKK1sgLW4gIiR7c291cmNlUm9vdH0iIF0gfHwgc291cmNlUm9vdD0iJHtkZWZhdWx0U291cmNlUm9vdH0iCitbIC1kICIke3NvdXJjZVJvb3R9IiBdIHx8IHNlbWFudGljRXJyb3IgInNvdXJjZSByb290IG5vdCBmb3VuZDogJHtzb3VyY2VSb290fSIKK3NvdXJjZVJvb3Q9YGNkICIke3NvdXJjZVJvb3R9IiAmJiBwd2RgIHx8IGV4aXQgIiR7P30iCisKK2lucHV0TmFtZT0iY29uZmlnIgorb3V0cHV0TmFtZT0iZm9yYnVpbGQiCisKK2hlYWRlckV4dGVuc2lvbj0iaCIKK2xvZ0V4dGVuc2lvbj0ibG9nIgorbWFrZUV4dGVuc2lvbj0ibWsiCitzZWRFeHRlbnNpb249InNlZCIKK3N0YXR1c0V4dGVuc2lvbj0ic3RhdHVzIgorCittYWtlSW5wdXQ9IiR7aW5wdXROYW1lfS4ke21ha2VFeHRlbnNpb259IgorbWFrZU91dHB1dD0iJHtpbml0aWFsRGlyZWN0b3J5fS8ke291dHB1dE5hbWV9LiR7bWFrZUV4dGVuc2lvbn0iCisKK2dldE1ha2VQcm9wZXJ0eSgpIHsKKyAgIGdyZXAgIl4gKiR7MX0gKj0iICIke21ha2VJbnB1dH0iIHwgc2VkIC1lICdzL15bXj1dKj0gKi8vJyAtZSAncy8gKiQvLycKK30KKworYnVpbGRTeXN0ZW09YGdldE1ha2VQcm9wZXJ0eSBCVUlMRF9TWVNURU1gCitob3N0U3lzdGVtPWBnZXRNYWtlUHJvcGVydHkgSE9TVF9TWVNURU1gCisKK29iamVjdEV4dGVuc2lvbj0nJChPX0ZPUl9CVUlMRCknCisKK2lmIFsgIiR7aG9zdFN5c3RlbX0iICE9ICIke2J1aWxkU3lzdGVtfSIgXQordGhlbgorICAgbmVlZFRlbXBvcmFyeURpcmVjdG9yeQorICAgb2JqZWN0RXh0ZW5zaW9uPSJidWlsZC4ke29iamVjdEV4dGVuc2lvbn0iCisKKyAgIGZvciB2YXJpYWJsZSBpbiBDQyBDRkxBR1MgQ1hYIENYWEZMQUdTIExERkxBR1MgTERMSUJTIFBLR19DT05GSUcgUEtHX0NPTkZJR19TWVNST09UX0RJUiBQS0dfQ09ORklHX0xJQkRJUiBQS0dfQ09ORklHX1BBVEgKKyAgIGRvCisgICAgICB1bnNldCAiJHt2YXJpYWJsZX0iCisgICAgICBnZXRWYXJpYWJsZSAiJHt2YXJpYWJsZX1fRk9SX0JVSUxEIiB2YWx1ZQorCisgICAgICBbIC1uICIke3ZhbHVlfSIgXSAmJiB7CisgICAgICAgICBzZXRWYXJpYWJsZSAiJHt2YXJpYWJsZX0iICIke3ZhbHVlfSIKKyAgICAgICAgIGV4cG9ydCAiJHt2YXJpYWJsZX0iCisgICAgICB9CisgICBkb25lCisKKyAgICIke3NvdXJjZVJvb3R9L2NvbmZpZ3VyZSIgXAorICAgICAgLS1kaXNhYmxlLWFwaSBcCisgICAgICAtLWRpc2FibGUtZXhwYXQgXAorICAgICAgLS1kaXNhYmxlLWdwbSBcCisgICAgICAtLWRpc2FibGUtaWNvbnYgXAorICAgICAgLS1kaXNhYmxlLWljdSBcCisgICAgICAtLWRpc2FibGUtbGlibG91aXMgXAorICAgICAgLS1kaXNhYmxlLXBvbGtpdCBcCisgICAgICAtLWRpc2FibGUteCBcCisgICAgICBcCisgICAgICAtLXdpdGhvdXQtbGliYnJhaWxsZSBcCisgICAgICAtLXdpdGgtYnJhaWxsZS1kcml2ZXI9LWFsbCBcCisgICAgICBcCisgICAgICAtLWRpc2FibGUtc3BlZWNoLXN1cHBvcnQgXAorICAgICAgLS13aXRoLXNwZWVjaC1kcml2ZXI9LWFsbCBcCisgICAgICBcCisgICAgICAtd2l0aC1zY3JlZW4tZHJpdmVyPS1hbGwgXAorICAgICAgXAorICAgICAgLS13aXRob3V0LXBnbXBhdGgtcGFja2FnZSBcCisgICAgICAtLXdpdGhvdXQtcGdtcHJpdnMtcGFja2FnZSBcCisgICAgICAtLXdpdGhvdXQtc2VydmljZS1wYWNrYWdlIFwKKyAgICAgIC0td2l0aG91dC1wYXJhbXMtcGFja2FnZSBcCisgICAgICAtLXdpdGhvdXQtZHlubGQtcGFja2FnZSBcCisgICAgICAtLXdpdGhvdXQtcmd4LXBhY2thZ2UgXAorICAgICAgLS13aXRob3V0LWNoYXJzZXQtcGFja2FnZSBcCisgICAgICAtLXdpdGhvdXQtaG9zdGNtZC1wYWNrYWdlIFwKKyAgICAgIC0td2l0aG91dC1tbnRwdC1wYWNrYWdlIFwKKyAgICAgIC0td2l0aG91dC1tbnRmcy1wYWNrYWdlIFwKKyAgICAgIC0td2l0aG91dC1rYmQtcGFja2FnZSBcCisgICAgICAtLXdpdGhvdXQtYmVlcC1wYWNrYWdlIFwKKyAgICAgIC0td2l0aG91dC1wY20tcGFja2FnZSBcCisgICAgICAtLXdpdGhvdXQtbWlkaS1wYWNrYWdlIFwKKyAgICAgIC0td2l0aG91dC1mbS1wYWNrYWdlIFwKKyAgICAgIC0td2l0aG91dC1zZXJpYWwtcGFja2FnZSBcCisgICAgICAtLXdpdGhvdXQtdXNiLXBhY2thZ2UgXAorICAgICAgLS13aXRob3V0LWJsdWV0b290aC1wYWNrYWdlIFwKKyAgICAgIC0td2l0aG91dC1wb3J0cy1wYWNrYWdlIFwKKyAgICAgIFwKKyAgICAgIC0tcXVpZXQKK2ZpCisKK3NlZFNjcmlwdD0iJHtvdXRwdXROYW1lfS4ke3NlZEV4dGVuc2lvbn0iCitzZWQgLW4gLWUgJworcy9eICpcKFtBLVphLXpdW0EtWmEtejAtOV9dKlwpICo9LiokL1wxLwordCBmb3VuZAorZAorOmZvdW5kCitoCitzL15cKC4qXCkkL3MlXlxcKCAqXFwpXFwoXDFcXClcXCggKj1cXCklXFwxXFwyX0ZPUl9CVUlMRFxcMyUvcAorZworcy9eXCguKlwpJC9zJVxcKFxcJChcXClcXChcMVxcKVxcKFspOl1cXCklXFwxXFwyX0ZPUl9CVUlMRFxcMyVnL3AKK2cKK3MvXlwoLlwpJC9zJVxcJFxcKFwxXFwpJSQoXFwxX0ZPUl9CVUlMRCklZy9wCisnIDwiJHttYWtlSW5wdXR9IiA+IiR7c2VkU2NyaXB0fSIKKworZWNobyAiXCRhXFwKK0IgPSAke29iamVjdEV4dGVuc2lvbn0KKyIgPj4iJHtzZWRTY3JpcHR9IgorCitzZWQgPCIke21ha2VJbnB1dH0iID4iJHttYWtlT3V0cHV0fSIgLWYgIiR7c2VkU2NyaXB0fSIKK3JtICIke3NlZFNjcmlwdH0iCisKK2ZvciBleHRlbnNpb24gaW4gIiR7aGVhZGVyRXh0ZW5zaW9ufSIgIiR7bG9nRXh0ZW5zaW9ufSIgIiR7c3RhdHVzRXh0ZW5zaW9ufSIKK2RvCisgICBpbnB1dEZpbGU9IiR7aW5wdXROYW1lfS4ke2V4dGVuc2lvbn0iCisKKyAgIFsgISAtZiAiJHtpbnB1dEZpbGV9IiBdIHx8IHsKKyAgICAgIGNwICIke2lucHV0RmlsZX0iICIke2luaXRpYWxEaXJlY3Rvcnl9LyR7b3V0cHV0TmFtZX0uJHtleHRlbnNpb259IgorICAgfQorZG9uZQorCitleGl0IDAKZGlmZiAtLWdpdCBhL21rZG9ja3RiIGIvbWtkb2NrdGIKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMjI1NTllZgotLS0gL2Rldi9udWxsCisrKyBiL21rZG9ja3RiCkBAIC0wLDAgKzEsMzczIEBACisjIS9iaW4vYmFzaCAtcAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorIyAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyMKKyMgQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorIworIyBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorIworIyBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisjIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyMgbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisjCisjIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK2RlZmF1bHRPdXRwdXRSb290PSJkb2Mta3RiIgorCisuICJgZGlybmFtZSAiJHswfSJgL2JybHR0eS1wcm9sb2d1ZS5zaCIKK2FkZFByb2dyYW1PcHRpb24gcyBzdHJpbmcuZGlyZWN0b3J5IHNvdXJjZVJvb3QgInRvcC1sZXZlbCBkaXJlY3Rvcnkgb2Ygc291cmNlIHRyZWUiICJ0aGUgbG9jYXRpb24gb2YgdGhpcyBzY3JpcHQiCithZGRQcm9ncmFtT3B0aW9uIGIgc3RyaW5nLmRpcmVjdG9yeSBidWlsZFJvb3QgInRvcC1sZXZlbCBkaXJlY3Rvcnkgb2YgYnVpbGQgdHJlZSIgInRoZSBzb3VyY2UgdHJlZSIKK2FkZFByb2dyYW1PcHRpb24gbyBzdHJpbmcuZGlyZWN0b3J5IG91dHB1dFJvb3QgInRvcC1sZXZlbCBkaXJlY3Rvcnkgb2Ygb3V0cHV0IHRyZWUiICIke2RlZmF1bHRPdXRwdXRSb290fSIKK2FkZFByb2dyYW1PcHRpb24gayBmbGFnIGtlZXBGaWxlcyAiZG9uJ3QgcmVtb3ZlIGludGVybWVkaWF0ZSBmaWxlcyIKK3BhcnNlUHJvZ3JhbUFyZ3VtZW50cyAiJHtAfSIKKworc2V0IC1lCit1bWFzayAwMjIKK3Nob3B0IC1zIG51bGxnbG9iCisKK1sgLW4gIiR7c291cmNlUm9vdH0iIF0gfHwgc291cmNlUm9vdD0iJChkaXJuYW1lICIkezB9IikiCit2ZXJpZnlJbnB1dERpcmVjdG9yeSAiJHtzb3VyY2VSb290fSIKK3NvdXJjZVJvb3Q9IiQoY2QgIiR7c291cmNlUm9vdH0iICYmIHB3ZCkiCisKK1sgLW4gIiR7YnVpbGRSb290fSIgXSB8fCBidWlsZFJvb3Q9IiR7c291cmNlUm9vdH0iCitidWlsZFJvb3Q9IiQoY2QgIiR7YnVpbGRSb290fSIgJiYgcHdkKSIKKworWyAtbiAiJHtvdXRwdXRSb290fSIgXSB8fCBvdXRwdXRSb290PSIke2RlZmF1bHRPdXRwdXRSb290fSIKK3ZlcmlmeU91dHB1dERpcmVjdG9yeSAiJHtvdXRwdXRSb290fSIKKwordW5zZXQgSE9NRQorZXhwb3J0IFhER19DT05GSUdfSE9NRT0vCitleHBvcnQgWERHX0NPTkZJR19ESVJTPS8KKworcmVhZG9ubHkgbmV3TGluZT0kJ1xuJworCitsaW5lR3JvdXBzPSgpCituZXdMaW5lR3JvdXAoKSB7CisgICBsb2NhbCB2YXJpYWJsZT0iJHsxfSIKKworICAgbG9jYWwgZ3JvdXA9ImxpbmVHcm91cCR7I2xpbmVHcm91cHNbKl19IgorICAgbGluZUdyb3Vwcys9KCIke2dyb3VwfSIpCisgICBzZXRWYXJpYWJsZSAiJHt2YXJpYWJsZX0iICIke2dyb3VwfSIKKworICAgZGVjbGFyZSAtZyAtYSAiJHtncm91cH0iCisgICBldmFsICIke2dyb3VwfT0oKSIKK30KKworYWRkTGluZVRvR3JvdXAoKSB7CisgICBsb2NhbCBncm91cD0iJHsxfSIKKyAgIGxvY2FsIGxpbmU9IiR7Mn0iCisKKyAgIGV2YWwgIiR7Z3JvdXB9Kz0iJygiJHtsaW5lfSIpJworfQorCituZXdEb2NMaW5lcygpIHsKKyAgIG5ld0xpbmVHcm91cCBkb2NMaW5lcworfQorCitiZWdpblRvY0VudHJpZXMoKSB7CisgICBsb2NhbCB2YXJpYWJsZT0iJHsxfSIKKworICAgbmV3TGluZUdyb3VwICIke3ZhcmlhYmxlfSIKKyAgIG5ld0RvY0xpbmVzCisKKyAgIGFkZExpbmVUb0dyb3VwICIkeyF2YXJpYWJsZX0iICI8dWw+IgorfQorCitlbmRUb2NFbnRyaWVzKCkgeworICAgbG9jYWwgZ3JvdXA9IiR7MX0iCisKKyAgIGFkZExpbmVUb0dyb3VwICIke2dyb3VwfSIgIjwvdWw+IgorfQorCithZGRUb2NFbnRyeSgpIHsKKyAgIGxvY2FsIGdyb3VwPSIkezF9IgorICAgbG9jYWwgdGl0bGU9IiR7Mn0iCisgICBsb2NhbCBhbmNob3I9IiR7M30iCisKKyAgIGFkZExpbmVUb0dyb3VwICIke2dyb3VwfSIgIjxsaT48YSBocmVmPVwiIyR7YW5jaG9yfVwiPiR7dGl0bGV9PC9hPjwvbGk+IgorfQorCithZGREb2NMaW5lKCkgeworICAgbG9jYWwgbGluZT0iJHsxfSIKKworICAgYWRkTGluZVRvR3JvdXAgIiR7ZG9jTGluZXN9IiAiJHtsaW5lfSIKK30KKworYWRkU2VjdGlvblRlcm1pbmF0b3IoKSB7CisgICBhZGREb2NMaW5lICI8aHIgLz4iCit9CisKK2FkZEFuY2hvcigpIHsKKyAgIGxvY2FsIGFuY2hvcj0iJHsxfSIKKworICAgYWRkRG9jTGluZSAiPGEgbmFtZT1cIiR7YW5jaG9yfVwiPjwvYT4iCit9CisKK2JlZ2luRG9jdW1lbnQoKSB7CisgICBsb2NhbCB0aXRsZT0iJHsxfSIKKworICAgbmV3RG9jTGluZXMKKyAgIGhlYWRlckxldmVsPTAKKworICAgYWRkRG9jTGluZSAiPD94bWwgdmVyc2lvbj1cIjEuMFwiIGVuY29kaW5nPVwidXRmLThcIiA/PiIKKyAgIGFkZERvY0xpbmUgIjwhRE9DVFlQRSBodG1sIFBVQkxJQyBcIi0vL1czQy8vRFREIFhIVE1MIDEuMCBUcmFuc2l0aW9uYWwvL0VOXCIgXCJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS10cmFuc2l0aW9uYWwuZHRkXCI+IgorCisgICBhZGREb2NMaW5lICI8aHRtbCB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWxcIiBsYW5nPVwiZW5cIiB4bWw6bGFuZz1cImVuXCI+IgorICAgYWRkRG9jTGluZSAiPGhlYWQ+IgorICAgYWRkRG9jTGluZSAiPHRpdGxlPiR7dGl0bGV9PC90aXRsZT4iCisgICBhZGREb2NMaW5lICI8L2hlYWQ+IgorICAgYWRkRG9jTGluZSAiPGJvZHk+IgorfQorCitlbmREb2N1bWVudCgpIHsKKyAgIGxvY2FsIGZpbGU9IiR7MX0iCisKKyAgIGFkZERvY0xpbmUgIjwvYm9keT4iCisgICBhZGREb2NMaW5lICI8L2h0bWw+IgorCisgICBleGVjIDM+IiR7ZmlsZX0iCisgICAgICBsb2NhbCBncm91cAorCisgICAgICBmb3IgZ3JvdXAgaW4gIiR7bGluZUdyb3Vwc1tAXX0iCisgICAgICBkbworICAgICAgICAgZXZhbCBzZXQgLS0gJyIkeyciJHtncm91cH0iJ1tAXX0iJworICAgICAgICAgbG9jYWwgbGluZQorCisgICAgICAgICBmb3IgbGluZQorICAgICAgICAgZG8KKyAgICAgICAgICAgIGVjaG8gPiYzICIke2xpbmV9IgorICAgICAgICAgZG9uZQorICAgICAgZG9uZQorICAgZXhlYyAzPiYtCit9CisKK2JlZ2luU2VjdGlvbigpIHsKKyAgIGxvY2FsIHRpdGxlPSIkezF9IgorCisgICBsb2NhbCBhbmNob3I9IiR7dGl0bGUsLD99IgorICAgYW5jaG9yPSIke2FuY2hvci8vW15hLXpBLVpfMC05XS8tfSIKKyAgIGFkZEFuY2hvciAiJHthbmNob3J9IgorCisgICBoZWFkZXJMZXZlbD0kKChoZWFkZXJMZXZlbCArIDEpKQorICAgYWRkRG9jTGluZSAiPGgke2hlYWRlckxldmVsfT4ke3RpdGxlfTwvaCR7aGVhZGVyTGV2ZWx9PiIKKworICAgaWYgKChoZWFkZXJMZXZlbCA9PSAxKSkKKyAgIHRoZW4KKyAgICAgIGJlZ2luVG9jRW50cmllcyB0b2NTZWN0aW9ucworICAgICAgYWRkU2VjdGlvblRlcm1pbmF0b3IKKyAgIGVsc2UKKyAgICAgIGFkZFRvY0VudHJ5ICIke3RvY1NlY3Rpb25zfSIgIiR7dGl0bGV9IiAiJHthbmNob3J9IgorICAgZmkKK30KKworZW5kU2VjdGlvbigpIHsKKyAgIGlmICgoaGVhZGVyTGV2ZWwgPT0gMSkpCisgICB0aGVuCisgICAgICBlbmRUb2NFbnRyaWVzICIke3RvY1NlY3Rpb25zfSIKKyAgIGVsc2UKKyAgICAgIGFkZFNlY3Rpb25UZXJtaW5hdG9yCisgICBmaQorCisgICBoZWFkZXJMZXZlbD0kKChoZWFkZXJMZXZlbCAtIDEpKQorfQorCitiZWdpbkxheW91dExpc3QoKSB7CisgICBsYXlvdXRMaXN0ZWQ9ZmFsc2UKK30KKworZW5kTGF5b3V0TGlzdCgpIHsKKyAgICEgIiR7bGF5b3V0TGlzdGVkfSIgfHwgeworICAgICAgYWRkRG9jTGluZSAiPC91bD4iCisgICB9Cit9CisKK2JlZ2luTGF5b3V0RW50cnkoKSB7CisgICBsb2NhbCBwcmVmaXg9IiR7MX0iCisgICBsb2NhbCBvdXRwdXRFeHRlbnNpb249IiR7Mn0iCisKKyAgIGxvY2FsIGxheW91dD0iJHtpbnB1dEZpbGUjIyovfSIKKyAgIGxheW91dD0iJHtsYXlvdXQlLip9IgorCisgICBvdXRwdXRGaWxlPSIke291dHB1dFJvb3R9LyR7cHJlZml4fS0ke2xheW91dH0uJHtvdXRwdXRFeHRlbnNpb259IgorfQorCitlbmRMYXlvdXRFbnRyeSgpIHsKKyAgIGxvY2FsIGNhdGVnb3J5PSIkezF9IgorCisgICBleGVjIDQ8IiR7b3V0cHV0RmlsZSUuKn0uJHtwbGFpblRleHRFeHRlbnNpb259IgorICAgbG9jYWwgZGVzY3JpcHRpb24KKyAgIHJlYWQgLXIgLXUgNCBkZXNjcmlwdGlvbgorICAgZXhlYyA0PCYtCisKKyAgIGRlc2NyaXB0aW9uPSIke2Rlc2NyaXB0aW9ufSAiCisgICBkZXNjcmlwdGlvbj0iJHtkZXNjcmlwdGlvbiMqOiB9IgorICAgWyAteiAiJHtjYXRlZ29yeX0iIF0gfHwgZGVzY3JpcHRpb249IiR7ZGVzY3JpcHRpb24jJHtjYXRlZ29yeX0gfSIKKyAgIGRlc2NyaXB0aW9uPSIke2Rlc2NyaXB0aW9uJSB9IgorCisgICBsb2NhbCBwcmVmaXg9IkFsbCBNb2RlbHMiCisgICBbIC16ICIke2Rlc2NyaXB0aW9ufSIgXSB8fCB7CisgICAgICBpZiBbICIke2Rlc2NyaXB0aW9ufSIgPSAiJHtkZXNjcmlwdGlvbiMofSIgXQorICAgICAgdGhlbgorICAgICAgICAgcHJlZml4PSIiCisgICAgICBlbHNlCisgICAgICAgICBwcmVmaXg9IiR7cHJlZml4fSAiCisgICAgICBmaQorICAgfQorICAgZGVzY3JpcHRpb249IiR7cHJlZml4fSR7ZGVzY3JpcHRpb259IgorCisgICAiJHtsYXlvdXRMaXN0ZWR9IiB8fCB7CisgICAgICBsYXlvdXRMaXN0ZWQ9dHJ1ZQorICAgICAgYWRkRG9jTGluZSAiPHVsPiIKKyAgIH0KKworICAgYWRkRG9jTGluZSAiPGxpPjxhIGhyZWY9XCIke291dHB1dEZpbGUjIyovfVwiPiR7ZGVzY3JpcHRpb259PC9hPjwvbGk+IgorfQorCitsaXN0S2V5VGFibGUoKSB7CisgICBsb2NhbCBkcml2ZXI9IiR7MX0iCisKKyAgIGxvY2FsIGlucHV0PSIke2lucHV0RmlsZSMjKi99IgorICAgbG9jYWwgb3V0cHV0PSIke291dHB1dEZpbGUlLip9IgorICAgbG9jYWwgbmFtZT0iJHtvdXRwdXQjIyovfSIKKworICAgbG9jYWwgY29tbWFuZD0oICIke2tleVRhYmxlTGlzdGVyfSIgLUQiJHtidWlsZFJvb3R9L2xpYiIgLVQiJHtzb3VyY2VSb290fS8ke3RhYmxlc1N1YmRpcmVjdG9yeX0iICkKKyAgIFsgLW4gIiR7ZHJpdmVyfSIgXSAmJiBjb21tYW5kKz0oIC1iICIke2RyaXZlcn0iICkKKyAgICIke2NvbW1hbmRbQF19IiAtbCAiJHtpbnB1dH0iID4iJHtvdXRwdXR9LiR7cGxhaW5UZXh0RXh0ZW5zaW9ufSIgfHwgeworICAgICAgcm0gLWYgIiR7b3V0cHV0fS4ke3BsYWluVGV4dEV4dGVuc2lvbn0iCisgICAgICByZXR1cm4gMQorICAgfQorCisgICAiJHtjb21tYW5kW0BdfSIgLXIgIiR7aW5wdXR9IiA+IiR7b3V0cHV0fS4ke3JlU3RydWN0dXJlZFRleHRFeHRlbnNpb259IgorICAgc2VkIC1lICIyYVxcJHtuZXdMaW5lfSogXGBIZWxwIFNjcmVlbiBWZXJzaW9uIDwke25hbWV9LiR7cGxhaW5UZXh0RXh0ZW5zaW9ufT5cYF8iIC1pICIke291dHB1dH0uJHtyZVN0cnVjdHVyZWRUZXh0RXh0ZW5zaW9ufSIKKworICAgcnN0Mmh0bWwgLS1jb25maWcgIiR7c291cmNlUm9vdH0vZG9jdXRpbHMuY29uZiIgIiR7b3V0cHV0fS4ke3JlU3RydWN0dXJlZFRleHRFeHRlbnNpb259IiAiJHtvdXRwdXR9LiR7aHlwZXJ0ZXh0RXh0ZW5zaW9ufSIKKyAgICIke2tlZXBGaWxlc30iIHx8IHJtICIke291dHB1dH0uJHtyZVN0cnVjdHVyZWRUZXh0RXh0ZW5zaW9ufSIKK30KKworbGlzdEJyYWlsbGVLZXlUYWJsZXMoKSB7CisgICBiZWdpblNlY3Rpb24gIkJyYWlsbGUgRGV2aWNlIEtleSBCaW5kaW5ncyIKKyAgIGFkZERvY0xpbmUgIlRoZSBkcml2ZXIgYXV0b21hdGljYWxseSBzZWxlY3RzIHRoZSBhcHByb3ByaWF0ZSBrZXkgdGFibGUgZm9yIHRoZSBkZXZpY2UgbW9kZWwgYmVpbmcgdXNlZC4iCisgICBhZGREb2NMaW5lICJDbGljayBvbiB0aGUgZHJpdmVyJ3MgbmFtZSBmb3IgZ2VuZXJhbCBpbmZvcm1hdGlvbiBhYm91dCBpdC4iCisgICBhZGREb2NMaW5lICJDbGljayBvbiB0aGUgZGV2aWNlIG1vZGVsIGZvciBpdHMga2V5IGJpbmRpbmdzLiIKKworICAgbG9jYWwgdG9jRHJpdmVycworICAgYmVnaW5Ub2NFbnRyaWVzIHRvY0RyaXZlcnMKKworICAgYWRkRG9jTGluZSAiPGRsPiIKKyAgIGxvY2FsIGRyaXZlckRpcmVjdG9yeQorCisgICBmb3IgZHJpdmVyRGlyZWN0b3J5IGluICIke2RyaXZlcnNEaXJlY3Rvcnl9LyIqCisgICBkbworICAgICAgWyAtZCAiJHtkcml2ZXJEaXJlY3Rvcnl9IiBdIHx8IGNvbnRpbnVlCisKKyAgICAgIGxvY2FsIGRyaXZlck5hbWU9IiR7ZHJpdmVyRGlyZWN0b3J5IyMqL30iCisgICAgICBsb2NhbCBkcml2ZXJDb2RlPSIkKHNlZCAtbiAnL15EUklWRVJfQ09ERSAqPS9zL14uKj0gKlwoW14gXSpcKS4qJC9cMS9wJyAiJHtkcml2ZXJEaXJlY3Rvcnl9L01ha2VmaWxlLmluIikiCisKKyAgICAgIGxvY2FsIGhlYWRlcj0iJHtkcml2ZXJOYW1lfSIKKyAgICAgIGxvY2FsIGlucHV0RmlsZT0iJHtkcml2ZXJEaXJlY3Rvcnl9L1JFQURNRSIKKworICAgICAgWyAhIC1mICIke2lucHV0RmlsZX0iIF0gfHwgeworICAgICAgICAgbG9jYWwgb3V0cHV0RmlsZT0iJHtvdXRwdXRSb290fS8ke2JyYWlsbGVQcmVmaXh9LSR7ZHJpdmVyQ29kZX0uJHtwbGFpblRleHRFeHRlbnNpb259IgorICAgICAgICAgY3AgLWEgLS0gIiR7aW5wdXRGaWxlfSIgIiR7b3V0cHV0RmlsZX0iCisgICAgICAgICBoZWFkZXI9IjxhIGhyZWY9XCIke291dHB1dEZpbGUjIyovfVwiPiR7aGVhZGVyfTwvYT4iCisgICAgICB9CisKKyAgICAgIGxvY2FsIGFuY2hvcj0iJHticmFpbGxlUHJlZml4fS0ke2RyaXZlckNvZGV9IgorICAgICAgYWRkVG9jRW50cnkgIiR7dG9jRHJpdmVyc30iICIke2RyaXZlck5hbWV9IiAiJHthbmNob3J9IgorCisgICAgICBhZGREb2NMaW5lICI8ZHQ+IgorICAgICAgYWRkQW5jaG9yICIke2FuY2hvcn0iCisgICAgICBhZGREb2NMaW5lICIke2hlYWRlcn0iCisgICAgICBhZGREb2NMaW5lICI8L2R0PjxkZD4iCisKKyAgICAgIGJlZ2luTGF5b3V0TGlzdAorICAgICAgc2V0IC0tICIke3RhYmxlc0RpcmVjdG9yeX0vJHticmFpbGxlU3ViZGlyZWN0b3J5fS8ke2RyaXZlckNvZGV9LyIqIi4ke2tleVRhYmxlRXh0ZW5zaW9ufSIKKworICAgICAgaWYgWyAiJHsjfSIgLWd0IDAgXQorICAgICAgdGhlbgorICAgICAgICAgZm9yIGlucHV0RmlsZQorICAgICAgICAgZG8KKyAgICAgICAgICAgIGJlZ2luTGF5b3V0RW50cnkgIiR7YnJhaWxsZVByZWZpeH0tJHtkcml2ZXJDb2RlfSIgIiR7aHlwZXJ0ZXh0RXh0ZW5zaW9ufSIKKyAgICAgICAgICAgIGxpc3RLZXlUYWJsZSAiJHtkcml2ZXJDb2RlfSIgfHwgY29udGludWUKKyAgICAgICAgICAgIGVuZExheW91dEVudHJ5ICIke2RyaXZlck5hbWV9IgorICAgICAgICAgZG9uZQorICAgICAgZWxzZQorICAgICAgICAgc2V0IC0tICIke3RhYmxlc0RpcmVjdG9yeX0vJHticmFpbGxlU3ViZGlyZWN0b3J5fS8ke2RyaXZlckNvZGV9LyIqIi4ke3BsYWluVGV4dEV4dGVuc2lvbn0iCisKKyAgICAgICAgIGZvciBpbnB1dEZpbGUKKyAgICAgICAgIGRvCisgICAgICAgICAgICBiZWdpbkxheW91dEVudHJ5ICIke2JyYWlsbGVQcmVmaXh9LSR7ZHJpdmVyQ29kZX0iICIke3BsYWluVGV4dEV4dGVuc2lvbn0iCisgICAgICAgICAgICBjcCAtYSAtLSAiJHtpbnB1dEZpbGV9IiAiJHtvdXRwdXRGaWxlfSIKKyAgICAgICAgICAgIGVuZExheW91dEVudHJ5ICIke2RyaXZlck5hbWV9IgorICAgICAgICAgZG9uZQorICAgICAgZmkKKworICAgICAgZW5kTGF5b3V0TGlzdAorICAgICAgYWRkRG9jTGluZSAiPC9kZD4iCisgICBkb25lCisKKyAgIGFkZERvY0xpbmUgIjwvZGw+IgorICAgZW5kVG9jRW50cmllcyAiJHt0b2NEcml2ZXJzfSIKKyAgIGVuZFNlY3Rpb24KK30KKworbGlzdEtleWJvYXJkS2V5VGFibGVzKCkgeworICAgYmVnaW5TZWN0aW9uICJLZXlib2FyZCBLZXkgVGFibGVzIgorICAgYWRkRG9jTGluZSAiSW4gb3JkZXIgdG8gdXNlIG9uZSBvZiB0aGVzZSBrZXlib2FyZCB0YWJsZXMsIgorICAgYWRkRG9jTGluZSAieW91IG5lZWQgdG8gZXhwbGljaXRseSBzcGVjaWZ5IGl0IGluIG9uZSBvZiB0aGUgZm9sbG93aW5nIHdheXM6IgorCisgICBhZGREb2NMaW5lICI8dWw+IgorICAgYWRkRG9jTGluZSAiPGxpPlVzZSBCUkxUVFkncyA8dHQ+LWs8L3R0PiAob3IgPHR0Pi0ta2V5Ym9hcmQtdGFibGU9PC90dD4pIGNvbW1hbmQgbGluZSBvcHRpb24uPC9saT4iCisgICBhZGREb2NMaW5lICI8bGk+VXNlIHRoZSA8dHQ+a2V5Ym9hcmQtdGFibGU8L3R0PiBjb25maWd1cmF0aW9uIGZpbGUgKDx0dD5icmx0dHkuY29uZjwvdHQ+KSBkaXJlY3RpdmUuPC9saT4iCisgICBhZGREb2NMaW5lICI8L3VsPiIKKworICAgYmVnaW5MYXlvdXRMaXN0CisgICBzZXQgLS0gIiR7dGFibGVzRGlyZWN0b3J5fS8ke2tleWJvYXJkU3ViZGlyZWN0b3J5fS8iKiIuJHtrZXlUYWJsZUV4dGVuc2lvbn0iCisKKyAgIGxvY2FsIGlucHV0RmlsZQorICAgZm9yIGlucHV0RmlsZQorICAgZG8KKyAgICAgIGJlZ2luTGF5b3V0RW50cnkgIiR7a2V5Ym9hcmRQcmVmaXh9IiAiJHtoeXBlcnRleHRFeHRlbnNpb259IgorICAgICAgbGlzdEtleVRhYmxlIHx8IGNvbnRpbnVlCisgICAgICBlbmRMYXlvdXRFbnRyeQorICAgZG9uZQorCisgICBlbmRMYXlvdXRMaXN0CisgICBlbmRTZWN0aW9uCit9CisKK2RyaXZlcnNTdWJkaXJlY3Rvcnk9IkRyaXZlcnMvQnJhaWxsZSIKK2RyaXZlcnNEaXJlY3Rvcnk9IiR7c291cmNlUm9vdH0vJHtkcml2ZXJzU3ViZGlyZWN0b3J5fSIKKwordGFibGVzU3ViZGlyZWN0b3J5PSJUYWJsZXMiCit0YWJsZXNEaXJlY3Rvcnk9IiR7c291cmNlUm9vdH0vJHt0YWJsZXNTdWJkaXJlY3Rvcnl9IgorCiticmFpbGxlU3ViZGlyZWN0b3J5PSJJbnB1dCIKK2tleWJvYXJkU3ViZGlyZWN0b3J5PSJLZXlib2FyZCIKKworYnJhaWxsZVByZWZpeD0iYnJsIgora2V5Ym9hcmRQcmVmaXg9ImtiZCIKKworcGxhaW5UZXh0RXh0ZW5zaW9uPSJ0eHQiCityZVN0cnVjdHVyZWRUZXh0RXh0ZW5zaW9uPSJyc3QiCitoeXBlcnRleHRFeHRlbnNpb249Imh0bWwiCitrZXlUYWJsZUV4dGVuc2lvbj0ia3RiIgorCitrZXlUYWJsZUxpc3Rlcj0iJHtidWlsZFJvb3R9L1Byb2dyYW1zL2JybHR0eS1rdGIiCittYWtlIC1DICIke2tleVRhYmxlTGlzdGVyJS8qfSIgLXMgIiR7a2V5VGFibGVMaXN0ZXIjIyovfSIKKworZG9jdW1lbnRUaXRsZT0iS2V5IEJpbmRpbmcgTGlzdHMiCitiZWdpbkRvY3VtZW50ICIke2RvY3VtZW50VGl0bGV9IgorCitiZWdpblNlY3Rpb24gIiR7ZG9jdW1lbnRUaXRsZX0iCitsaXN0QnJhaWxsZUtleVRhYmxlcworbGlzdEtleWJvYXJkS2V5VGFibGVzCitlbmRTZWN0aW9uCisKK2VuZERvY3VtZW50ICIke291dHB1dFJvb3R9L2luZGV4LiR7aHlwZXJ0ZXh0RXh0ZW5zaW9ufSIKK2V4aXQgMApkaWZmIC0tZ2l0IGEvbWtkb2NzIGIvbWtkb2NzCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjMxNGM1MWEKLS0tIC9kZXYvbnVsbAorKysgYi9ta2RvY3MKQEAgLTAsMCArMSwxMDYgQEAKKyMhL2Jpbi9iYXNoCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisjICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorIworIyBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisjCisjIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisjCisjIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyMgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorIyBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyMKKyMgV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworIworIyBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworLiAiJHswJS8qfS9wcm9sb2d1ZS5zaCIKKworZXhlY3V0ZUNvbW1hbmQoKSB7CisgICAiJHtAfSIKK30KKwordXBkYXRlRmlsZXMoKSB7CisgICBmcm9tUm9vdD0iJHsxfSIKKyAgIGZyb21EaXJlY3Rvcnk9IiR7Mn0iCisgICB0b0RpcmVjdG9yeT0iJHszfSIKKyAgIHNoaWZ0IDMKKworICAgZXhlY3V0ZUNvbW1hbmQgbWtkaXIgLXAgLS0gIiR7b3V0cHV0Um9vdH0vJHt0b0RpcmVjdG9yeX0iCisgICBzZXQgLS0gYGNkICIke2Zyb21Sb290fS8ke2Zyb21EaXJlY3Rvcnl9IiAmJiBlY2hvICR7Kn1gCisKKyAgIGZvciBmcm9tRmlsZQorICAgZG8KKyAgICAgIGZyb21QYXRoPSIke2Zyb21Sb290fS8ke2Zyb21EaXJlY3Rvcnl9LyR7ZnJvbUZpbGV9IgorICAgICAgWyAtZSAiJHtmcm9tUGF0aH0iIF0gJiYgZXhlY3V0ZUNvbW1hbmQgY3AgLWEgLS0gIiR7ZnJvbVBhdGh9IiAiJHtvdXRwdXRSb290fS8ke3RvRGlyZWN0b3J5fS8iCisgICBkb25lCit9CisKK291dHB1dFJvb3Q9IiIKK3NvdXJjZVJvb3Q9IiIKK2J1aWxkUm9vdD0iIgorCit3aGlsZSBnZXRvcHRzICI6bzpzOmI6IiBvcHRpb24KK2RvCisgICBjYXNlICIke29wdGlvbn0iCisgICBpbgorICAgICAgbykgb3V0cHV0Um9vdD0iJHtPUFRBUkd9Ijs7CisgICAgICBzKSBzb3VyY2VSb290PSIke09QVEFSR30iOzsKKyAgICAgIGIpIGJ1aWxkUm9vdD0iJHtPUFRBUkd9Ijs7CisKKyAgICAgIDopIHN5bnRheEVycm9yICJtaXNzaW5nIHZhbHVlOiAtJHtPUFRBUkd9Ijs7CisgICAgIFw/KSBzeW50YXhFcnJvciAidW5rbm93biBvcHRpb246IC0ke09QVEFSR30iOzsKKyAgICAgICopIHN5bnRheEVycm9yICJ1bmltcGxlbWVudGVkIG9wdGlvbjogLSR7b3B0aW9ufSI7OworICAgZXNhYworZG9uZQorCitzaGlmdCBgZXhwciAiJHtPUFRJTkR9IiAtIDFgCitbICIkeyN9IiAtZXEgMCBdIHx8IHN5bnRheEVycm9yICJ0b28gbWFueSBwYXJhbWV0ZXJzIgorCitbIC1uICIke291dHB1dFJvb3R9IiBdIHx8IG91dHB1dFJvb3Q9ImRvYyIKK3ZlcmlmeU91dHB1dERpcmVjdG9yeSAiJHtvdXRwdXRSb290fSIKKworWyAtbiAiJHtzb3VyY2VSb290fSIgXSB8fCBzb3VyY2VSb290PWBkaXJuYW1lICIkezB9ImAKK3ZlcmlmeUlucHV0RGlyZWN0b3J5ICIke3NvdXJjZVJvb3R9Igorc291cmNlUm9vdD1gcmVzb2x2ZURpcmVjdG9yeSAiJHtzb3VyY2VSb290fSJgCisKK2lmIFsgLW4gIiR7YnVpbGRSb290fSIgXQordGhlbgorICAgdmVyaWZ5SW5wdXREaXJlY3RvcnkgIiR7YnVpbGRSb290fSIKKyAgIGJ1aWxkUm9vdD1gcmVzb2x2ZURpcmVjdG9yeSAiJHtidWlsZFJvb3R9ImAKK2Vsc2UKKyAgIGJ1aWxkUm9vdD0iJHtzb3VyY2VSb290fSIKK2ZpCisKK3VwZGF0ZUZpbGVzICIke3NvdXJjZVJvb3R9IiAiLiIgIi4iICJSRUFETUUiICJMSUNFTlNFLSoiCisKK3NvdXJjZURvY3VtZW50cz0iJHtzb3VyY2VSb290fS8ke2RvY3VtZW50c1N1YmRpcmVjdG9yeX0iCitidWlsZERvY3VtZW50cz0iJHtidWlsZFJvb3R9LyR7ZG9jdW1lbnRzU3ViZGlyZWN0b3J5fSIKKworZm9yIGRvY3VtZW50IGluIGBjZCAiJHtzb3VyY2VEb2N1bWVudHN9IiAmJiBlY2hvIFJFQURNRS4qYAorZG8KKyAgIG1ha2UgLXMgLUMgIiR7YnVpbGREb2N1bWVudHN9IiAiJHtkb2N1bWVudCNSRUFETUUufS5odG1sIgorZG9uZQorCit1cGRhdGVGaWxlcyAiJHtzb3VyY2VSb290fSIgIiR7ZG9jdW1lbnRzU3ViZGlyZWN0b3J5fSIgIi4iICJCVUdTIiAiQ2hhbmdlTG9nIiAiQ09OVFJJQlVUT1JTIiAiSElTVE9SWSIgIlRPRE8iICIqLmNzdiIKK3VwZGF0ZUZpbGVzICIke2J1aWxkUm9vdH0iICIke2RvY3VtZW50c1N1YmRpcmVjdG9yeX0iICIuIiAiYnJsdHR5LmNvbmYiICIqLmh0bWwiCisKK2ZvciBtYW51YWwgaW4gYGNkICIke3NvdXJjZURvY3VtZW50c30iICYmIGVjaG8gTWFudWFsLSovKmAKK2RvCisgICBmb3IgZG9jdW1lbnRFeHRlbnNpb24gaW4gZG9jIGh0bSBodG1sIHBkZiBzZ21sIHR4dAorICAgZG8KKyAgICAgIHVwZGF0ZUZpbGVzICIke3NvdXJjZVJvb3R9IiAiJHtkb2N1bWVudHNTdWJkaXJlY3Rvcnl9LyR7bWFudWFsfSIgIiR7bWFudWFsfSIgIiouJHtkb2N1bWVudEV4dGVuc2lvbn0iCisgICBkb25lCitkb25lCisKK2ZvciBtYW51YWwgaW4gQnJsQVBJcmVmCitkbworICAgdXBkYXRlRmlsZXMgIiR7YnVpbGRSb290fSIgIiR7ZG9jdW1lbnRzU3ViZGlyZWN0b3J5fS8ke21hbnVhbH0vaHRtbCIgIiR7bWFudWFsfSIgIiouaHRtbCIKK2RvbmUKKworZXhlY3V0ZUNvbW1hbmQgIiR7c291cmNlUm9vdH0vbWtkb2NrdGIiIC1vICIke291dHB1dFJvb3R9L0tleVRhYmxlcyIgLXMgIiR7c291cmNlUm9vdH0iIC1iICIke2J1aWxkUm9vdH0iCisKK2V4aXQgMApkaWZmIC0tZ2l0IGEvbWtwb3QgYi9ta3BvdApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4wNTFlZWFiCi0tLSAvZGV2L251bGwKKysrIGIvbWtwb3QKQEAgLTAsMCArMSw2MiBAQAorIyEvYmluL3NoCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisjICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorIworIyBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisjCisjIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisjCisjIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyMgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorIyBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyMKKyMgV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworIworIyBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworLiAiYGRpcm5hbWUgIiR7MH0iYC9icmx0dHktcHJvbG9ndWUuc2giCithZGRQcm9ncmFtT3B0aW9uIHAgc3RyaW5nLm5hbWUgcGFja2FnZU5hbWUgInNwZWNpZnkgdGhlIHBhY2thZ2UgbmFtZSIgInRoZSBuYW1lIG9mIHRoZSB0b3AtbGV2ZWwgZGlyZWN0b3J5IG9mIHRoZSBzb3VyY2UgdHJlZSIKK2FkZFByb2dyYW1PcHRpb24gbiBzdHJpbmcudmVyc2lvbiBwYWNrYWdlVmVyc2lvbiAic3BlY2lmeSB0aGUgcGFja2FnZSB2ZXJzaW9uIiAibm8gdmVyc2lvbiIKK2FkZFByb2dyYW1PcHRpb24gbyBzdHJpbmcuZmlsZSBvdXRwdXRGaWxlICJzcGVjaWZ5IHRoZSBvdXRwdXQgZmlsZSIgIjxwYWNrYWdlLW5hbWU+LnBvdCBpbiB0aGUgY3VycmVudCBkaXJlY3RvcnkiCithZGRQcm9ncmFtT3B0aW9uIGIgc3RyaW5nLmVtYWlsIGJ1Z3NBZGRyZXNzICJzcGVjaWZ5IHRoZSBlbWFpbCBhZGRyZXNzIGZvciBidWcgcmVwb3J0cyIgIm5vIGFkZHJlc3MiCithZGRQcm9ncmFtT3B0aW9uIGMgc3RyaW5nLm5hbWUgY29weXJpZ2h0SG9sZGVyICJzcGVjaWZ5IHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIiAibm8gY29weXJpZ2h0IGhvbGRlciIKK2FkZFByb2dyYW1QYXJhbWV0ZXIgc291cmNlIHNvdXJjZVJvb3QgInRvcC1sZXZlbCBkaXJlY3Rvcnkgb2Ygc291cmNlIHRyZWUiCitvcHRpb25hbFByb2dyYW1QYXJhbWV0ZXJzCithZGRQcm9ncmFtUGFyYW1ldGVyIGJ1aWxkIGJ1aWxkUm9vdCAidG9wLWxldmVsIGRpcmVjdG9yeSBvZiBidWlsZCB0cmVlIiAidGhlIHNvdXJjZSB0cmVlIgorcGFyc2VQcm9ncmFtQXJndW1lbnRzICIke0B9IgorCitbIC1uICIke3NvdXJjZVJvb3R9IiBdIHx8IHNvdXJjZVJvb3Q9Ii4iCitzb3VyY2VSb290PSIkKHJlc29sdmVEaXJlY3RvcnkgIiR7c291cmNlUm9vdH0iKSIgfHwgc2VtYW50aWNFcnJvcgorCitpZiBbIC1uICIke2J1aWxkUm9vdH0iIF0KK3RoZW4KKyAgIGJ1aWxkUm9vdD0iJChyZXNvbHZlRGlyZWN0b3J5ICIke2J1aWxkUm9vdH0iKSIgfHwgc2VtYW50aWNFcnJvcgorZWxzZQorICAgYnVpbGRSb290PSIke3NvdXJjZVJvb3R9IgorZmkKK1sgIiR7YnVpbGRSb290fSIgIT0gIiR7c291cmNlUm9vdH0iIF0gfHwgYnVpbGRSb290PSIiCisKK1sgLW4gIiR7cGFja2FnZU5hbWV9IiBdIHx8IHBhY2thZ2VOYW1lPWBiYXNlbmFtZSAiJHtzb3VyY2VSb290fSJgCitbIC1uICIke291dHB1dEZpbGV9IiBdIHx8IG91dHB1dEZpbGU9IiR7cGFja2FnZU5hbWV9LnBvdCIKK1sgIiR7b3V0cHV0RmlsZSMvfSIgIT0gIiR7b3V0cHV0RmlsZX0iIF0gfHwgb3V0cHV0RmlsZT0iJHtpbml0aWFsRGlyZWN0b3J5fS8ke291dHB1dEZpbGV9IgorCit4Z2V0dGV4dCAtLW91dHB1dCAtIC0tZm9yY2UtcG8gLS1uby13cmFwIC0tc29ydC1vdXRwdXQgLS1mcm9tLWNvZGUgdXRmLTggXAorICAgJHtwYWNrYWdlTmFtZTorLS1wYWNrYWdlLW5hbWUgIiR7cGFja2FnZU5hbWV9In0gXAorICAgJHtwYWNrYWdlVmVyc2lvbjorLS1wYWNrYWdlLXZlcnNpb24gIiR7cGFja2FnZVZlcnNpb259In0gXAorICAgJHtidWdzQWRkcmVzczorLS1tc2dpZC1idWdzLWFkZHJlc3MgIiR7YnVnc0FkZHJlc3N9In0gXAorICAgJHtjb3B5cmlnaHRIb2xkZXI6Ky0tY29weXJpZ2h0LWhvbGRlciAiJHtjb3B5cmlnaHRIb2xkZXJ9In0gXAorICAgLS1rZXl3b3JkPXN0cnRleHQ6MSAtLWZsYWc9bG9nTWVzc2FnZToyOmMtZm9ybWF0IFwKKyAgIC0tYWRkLWNvbW1lbnRzIFwKKyAgIC0tIGBmaW5kIC1IICR7c291cmNlUm9vdH0gJHtidWlsZFJvb3R9IC1uYW1lICcqLmMnIC1vIC1uYW1lICcqLmgnIHwgc29ydGAgfAorc2VkID4iJHtvdXRwdXRGaWxlfSIgLWUgIgorICBzL1BBQ0tBR0UvJHtwYWNrYWdlTmFtZX0vCisKKyAgL14jOiAveworICAgIHMlICR7c291cmNlUm9vdH0vKiUgJWcKKyAgICBzJSAke2J1aWxkUm9vdH0vKiUgJWcKKyAgfQorIgorZXhpdCAiJHs/fSIKZGlmZiAtLWdpdCBhL21rcnBtIGIvbWtycG0KbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNDUwZTZlNwotLS0gL2Rldi9udWxsCisrKyBiL21rcnBtCkBAIC0wLDAgKzEsMzUgQEAKKyMhL2Jpbi9zaAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorIyAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyMKKyMgQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorIworIyBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorIworIyBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisjIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyMgbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisjCisjIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKy4gImBkaXJuYW1lICIkezB9ImAvYnJsdHR5LXByb2xvZ3VlLnNoIgorbmVlZFRlbXBvcmFyeURpcmVjdG9yeQorCitbICIkeyN9IiAtZ3QgMCBdIHx8IHN5bnRheEVycm9yICJtaXNzaW5nIGFyY2hpdmUiCithcmNoaXZlRmlsZT0iJHsxfSIKK1sgIiR7YXJjaGl2ZUZpbGUjL30iID0gIiR7YXJjaGl2ZUZpbGV9IiBdICYmIGFyY2hpdmVGaWxlPSIke2luaXRpYWxEaXJlY3Rvcnl9LyR7YXJjaGl2ZUZpbGV9Igorc2hpZnQKKworWyAiJHsjfSIgLWVxIDAgXSB8fCBzeW50YXhFcnJvciAidG9vIG1hbnkgcGFyYW1ldGVycyIKKworc2V0IC1lCitta2RpciBTUEVDUyBTT1VSQ0VTIEJVSUxEIFJQTVMgU1JQTVMKK3JwbWJ1aWxkIC10YSAtLWNsZWFuIC0tZGVmaW5lICJfdG9wZGlyICR7dGVtcG9yYXJ5RGlyZWN0b3J5fSIgLS1kZWZpbmUgIl90bXBwYXRoICR7dGVtcG9yYXJ5RGlyZWN0b3J5fSIgIiR7YXJjaGl2ZUZpbGV9IgorbXYgLS0gU1JQTVMvKi5ycG0gIiR7aW5pdGlhbERpcmVjdG9yeX0iCittdiAtLSBSUE1TLyovKi5ycG0gIiR7aW5pdGlhbERpcmVjdG9yeX0iCitleGl0IDAKZGlmZiAtLWdpdCBhL21rdGFyIGIvbWt0YXIKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYjY0YTI2MAotLS0gL2Rldi9udWxsCisrKyBiL21rdGFyCkBAIC0wLDAgKzEsODQgQEAKKyMhL2Jpbi9iYXNoCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisjICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorIworIyBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisjCisjIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisjCisjIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyMgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorIyBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyMKKyMgV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworIworIyBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworcmVhZG9ubHkgY29uZmlndXJlT3B0aW9ucz0oCisgICAtLXdpdGhvdXQtbGliYnJhaWxsZQorICAgLS13aXRob3V0LWZsaXRlCisgICAtLXdpdGhvdXQtbWlrcm9wdWhlCisgICAtLXdpdGhvdXQtc3BlZWNoZAorICAgLS13aXRob3V0LXN3aWZ0CisgICAtLXdpdGhvdXQtdGhldGEKKykKKworLiAiYGRpcm5hbWUgIiR7MH0iYC9wcm9sb2d1ZS5zaCIKKworWyAiJHsjfSIgLWd0IDAgXSB8fCBzeW50YXhFcnJvciAibWlzc2luZyBzb3VyY2Ugcm9vdCIKK3NvdXJjZVJvb3Q9IiR7MX0iCitzaGlmdAorY2QgIiR7c291cmNlUm9vdH0iIHx8IGV4aXQgIiR7P30iCitzb3VyY2VSb290PSJgcHdkYCIKKworaWYgWyAiJHsjfSIgLWVxIDAgXQordGhlbgorICAgYXJjaGl2ZU5hbWU9ImBiYXNlbmFtZSAiJHtzb3VyY2VSb290fSJgIgorZWxzZQorICAgYXJjaGl2ZU5hbWU9IiR7MX0iCisgICBzaGlmdAorZmkKKworaWYgWyAiJHsjfSIgLWVxIDAgXQordGhlbgorICAgYXJjaGl2ZUZpbGU9IiR7YXJjaGl2ZU5hbWV9LnRhciIKK2Vsc2UKKyAgIGFyY2hpdmVGaWxlPSIkezF9IgorICAgc2hpZnQKK2ZpCitbICIke2FyY2hpdmVGaWxlIy99IiA9ICIke2FyY2hpdmVGaWxlfSIgXSAmJiBhcmNoaXZlRmlsZT0iJHtpbml0aWFsRGlyZWN0b3J5fS8ke2FyY2hpdmVGaWxlfSIKKworWyAiJHsjfSIgLWVxIDAgXSB8fCBzeW50YXhFcnJvciAidG9vIG1hbnkgcGFyYW1ldGVycyIKKworbmVlZFRlbXBvcmFyeURpcmVjdG9yeQorc2V0IC1lCisKK2NwIC1wIC1yIC0tICIke3NvdXJjZVJvb3R9IiAiJHthcmNoaXZlTmFtZX0iCitjZCAiJHthcmNoaXZlTmFtZX0iCisKKyIke3NvdXJjZVJvb3R9L2dldHJldmlkIiAiJHtzb3VyY2VSb290fSIgPlJFVklTSU9OCisuL2F1dG9nZW4KKy4vY29uZmlndXJlIC0tcXVpZXQgIiR7Y29uZmlndXJlT3B0aW9uc1tAXX0iCisKKyggIHNldCAtZQorICAgY2QgIiR7ZG9jdW1lbnRzU3ViZGlyZWN0b3J5fSIKKyAgIG1ha2UgLXMgY2xlYW4KKyAgIG1ha2UgLXMgYWxsCispCisiJHtzb3VyY2VSb290fS9ta2RvY3MiIC1vICJkb2MiIC1zICIke3NvdXJjZVJvb3R9IiAtYiAiLiIKKworc3BlY0ZpbGU9ImJybHR0eS5zcGVjIgorbXYgLS0gIiR7c3BlY0ZpbGV9IiAiJHt0ZW1wb3JhcnlEaXJlY3Rvcnl9IgorbWFrZSAtcyBkaXN0Y2xlYW4KK212IC0tICIke3RlbXBvcmFyeURpcmVjdG9yeX0vJHtzcGVjRmlsZX0iIC4KKworcm0gLWYgLXIgLS0gLmdpdAorZmluZCAuIC1uYW1lIC5naXRpZ25vcmUgLWV4ZWMgcm0ge30gXDsKK3JtIC1mIC1yIC0tIC5zdm4KKworY2QgLi4KK3RhciAtLWNyZWF0ZSAtLW5vLWFuY2hvcmVkIC0tZmlsZSAiJHthcmNoaXZlRmlsZX0iICIke2FyY2hpdmVOYW1lfSIKK2V4aXQgMApkaWZmIC0tZ2l0IGEvbWt6aXAgYi9ta3ppcApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5lZWYyNTc0Ci0tLSAvZGV2L251bGwKKysrIGIvbWt6aXAKQEAgLTAsMCArMSw2MSBAQAorIyEvYmluL3NoCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEJSTFRUWSAtIEEgYmFja2dyb3VuZCBwcm9jZXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc2NyZWVuICh3aGVuIGluCisjICAgICAgICAgIHRleHQgbW9kZSkgZm9yIGEgYmxpbmQgcGVyc29uIHVzaW5nIGEgcmVmcmVzaGFibGUgYnJhaWxsZSBkaXNwbGF5LgorIworIyBDb3B5cmlnaHQgKEMpIDE5OTUtMjAyMyBieSBUaGUgQlJMVFRZIERldmVsb3BlcnMuCisjCisjIEJSTFRUWSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCisjCisjIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyMgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorIyBsYXRlciB2ZXJzaW9uLiBQbGVhc2Ugc2VlIHRoZSBmaWxlIExJQ0VOU0UtTEdQTCBmb3IgZGV0YWlscy4KKyMKKyMgV2ViIFBhZ2U6IGh0dHA6Ly9icmx0dHkuYXBwLworIworIyBUaGlzIHNvZnR3YXJlIGlzIG1haW50YWluZWQgYnkgRGF2ZSBNaWVsa2UgPGRhdmVAbWllbGtlLmNjPi4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworLiAiYGRpcm5hbWUgIiR7MH0iYC9icmx0dHktcHJvbG9ndWUuc2giCisKK1sgIiR7I30iIC1lcSAwIF0gJiYgc3ludGF4RXJyb3IgIm1pc3Npbmcgc291cmNlIHJvb3QuIgorc291cmNlUm9vdD0iJHsxfSIKK3NoaWZ0CitjZCAiJHtzb3VyY2VSb290fSIgfHwgZXhpdCAiJHs/fSIKK3NvdXJjZVJvb3Q9ImBwd2RgIgorCitpZiBbICIkeyN9IiAtZXEgMCBdCit0aGVuCisgICBhcmNoaXZlTmFtZT0iYGJhc2VuYW1lICIke3NvdXJjZVJvb3R9ImAiCitlbHNlCisgICBhcmNoaXZlTmFtZT0iJHsxfSIKKyAgIHNoaWZ0CitmaQorCitpZiBbICIkeyN9IiAtZXEgMCBdCit0aGVuCisgICBhcmNoaXZlRmlsZT0iJHthcmNoaXZlTmFtZX0uemlwIgorZWxzZQorICAgYXJjaGl2ZUZpbGU9IiR7MX0iCisgICBzaGlmdAorZmkKK1sgIiR7YXJjaGl2ZUZpbGUjL30iID0gIiR7YXJjaGl2ZUZpbGV9IiBdICYmIGFyY2hpdmVGaWxlPSIke2luaXRpYWxEaXJlY3Rvcnl9LyR7YXJjaGl2ZUZpbGV9IgorCitbICIkeyN9IiAtZXEgMCBdIHx8IHN5bnRheEVycm9yICJ0b28gbWFueSBwYXJhbWV0ZXJzLiIKKworbmVlZFRlbXBvcmFyeURpcmVjdG9yeQorc2V0IC1lCisKK2J1aWxkUm9vdD0iJHt0ZW1wb3JhcnlEaXJlY3Rvcnl9L2J1aWxkIgorY3AgLXAgLXIgLS0gIiR7c291cmNlUm9vdH0iICIke2J1aWxkUm9vdH0iCitjZCAiJHtidWlsZFJvb3R9IgorCitpbnN0YWxsUm9vdD0iJHt0ZW1wb3JhcnlEaXJlY3Rvcnl9LyR7YXJjaGl2ZU5hbWV9IgorIi4vY29uZmlndXJlIiAtLXF1aWV0IC0taG9zdD1taW5ndzMyIC0tcHJlZml4PSIke2luc3RhbGxSb290fSIgLS1lbmFibGUtcmVsb2NhdGFibGUtaW5zdGFsbCAtLXdpdGhvdXQtbGliYnJhaWxsZSAtLXdpdGhvdXQtZmxpdGUgLS13aXRob3V0LW1pa3JvcHVoZSAtLXdpdGhvdXQtc3BlZWNoZCAtLXdpdGhvdXQtc3dpZnQgLS13aXRob3V0LXRoZXRhCittYWtlIC1zCittYWtlIC1zIGluc3RhbGwKKworY2QgLi4KK3ppcCAtcSAtQSAtciAiJHthcmNoaXZlRmlsZX0iICIke2FyY2hpdmVOYW1lfSIKK2V4aXQgMApkaWZmIC0tZ2l0IGEvcHJvbG9ndWUubWsgYi9wcm9sb2d1ZS5tawpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MDU2NTc4Ci0tLSAvZGV2L251bGwKKysrIGIvcHJvbG9ndWUubWsKQEAgLTAsMCArMSwyOSBAQAorIyBAY29uZmlndXJlX2lucHV0QAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorIyAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyMKKyMgQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorIworIyBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorIworIyBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisjIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyMgbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisjCisjIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK1NSQ19UT1AgPSBAdG9wX3NyY2RpckAvCitTUkNfRElSID0gQHNyY2RpckAKKyMgVlBBVEggPSBAc3JjZGlyQAorCitCTERfVE9QID0gLi9AdG9wX2J1aWxkZGlyQC8KK0JMRF9ESVIgPSBAYnVpbGRkaXJACisKK2luY2x1ZGUgJChTUkNfVE9QKWNvbW1vbi5taworaW5jbHVkZSAkKFNSQ19ESVIpL3JlbGRlcHMubWsKKwpkaWZmIC0tZ2l0IGEvcHJvbG9ndWUuc2ggYi9wcm9sb2d1ZS5zaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYTkxMjdkCi0tLSAvZGV2L251bGwKKysrIGIvcHJvbG9ndWUuc2gKQEAgLTAsMCArMSw0OCBAQAorIyEvYmluL2Jhc2gKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyMgICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisjCisjIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyMKKyMgQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisuICIkKGRpcm5hbWUgIiR7QkFTSF9TT1VSQ0VbMF19IikvYnJsdHR5LXByb2xvZ3VlLmJhc2giCisKK3NldFNvdXJjZVJvb3QoKSB7CisgICBmaW5kQ29udGFpbmluZ0RpcmVjdG9yeSBCUkxUVFlfU09VUkNFX1JPT1QgIiR7cHJvZ3JhbURpcmVjdG9yeX0iIGJybHR0eS5wYy5pbiB8fCB7CisgICAgICBzZW1hbnRpY0Vycm9yICJzb3VyY2UgdHJlZSBub3QgZm91bmQiCisgICB9CisKKyAgIHJlYWRvbmx5IHNvdXJjZVJvb3Q9IiR7QlJMVFRZX1NPVVJDRV9ST09UfSIKK30KKworc2V0QnVpbGRSb290KCkgeworICAgbG9jYWwgdmFyaWFibGU9QlJMVFRZX0JVSUxEX1JPT1QKKyAgIHNldCAtLSBicmx0dHkucGMKKworICAgZmluZENvbnRhaW5pbmdEaXJlY3RvcnkgIiR7dmFyaWFibGV9IiAiJHtpbml0aWFsRGlyZWN0b3J5fSIgIiR7QH0iIHx8IHsKKyAgICAgIGZpbmRDb250YWluaW5nRGlyZWN0b3J5ICIke3ZhcmlhYmxlfSIgIiR7cHJvZ3JhbURpcmVjdG9yeX0iICIke0B9IiB8fCB7CisgICAgICAgICBzZW1hbnRpY0Vycm9yICJidWlsZCB0cmVlIG5vdCBmb3VuZCIKKyAgICAgIH0KKyAgIH0KKworICAgcmVhZG9ubHkgYnVpbGRSb290PSIke0JSTFRUWV9CVUlMRF9ST09UfSIKK30KKworcmVhZG9ubHkgZG9jdW1lbnRzU3ViZGlyZWN0b3J5PSJEb2N1bWVudHMiCityZWFkb25seSBkcml2ZXJzU3ViZGlyZWN0b3J5PSJEcml2ZXJzIgorcmVhZG9ubHkgcHJvZ3JhbXNTdWJkaXJlY3Rvcnk9IlByb2dyYW1zIgorcmVhZG9ubHkgdGFibGVzU3ViZGlyZWN0b3J5PSJUYWJsZXMiCityZWFkb25seSB0b29sc1N1YmRpcmVjdG9yeT0iVG9vbHMiCisKZGlmZiAtLWdpdCBhL3Byb2xvZ3VlLnRjbCBiL3Byb2xvZ3VlLnRjbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MGE2NzdmCi0tLSAvZGV2L251bGwKKysrIGIvcHJvbG9ndWUudGNsCkBAIC0wLDAgKzEsOTUgQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQlJMVFRZIC0gQSBiYWNrZ3JvdW5kIHByb2Nlc3MgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgY29uc29sZSBzY3JlZW4gKHdoZW4gaW4KKyMgICAgICAgICAgdGV4dCBtb2RlKSBmb3IgYSBibGluZCBwZXJzb24gdXNpbmcgYSByZWZyZXNoYWJsZSBicmFpbGxlIGRpc3BsYXkuCisjCisjIENvcHlyaWdodCAoQykgMTk5NS0yMDIzIGJ5IFRoZSBCUkxUVFkgRGV2ZWxvcGVycy4KKyMKKyMgQlJMVFRZIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyMKKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVyIHZlcnNpb24uIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS1MR1BMIGZvciBkZXRhaWxzLgorIworIyBXZWIgUGFnZTogaHR0cDovL2JybHR0eS5hcHAvCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbWFpbnRhaW5lZCBieSBEYXZlIE1pZWxrZSA8ZGF2ZUBtaWVsa2UuY2M+LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitzb3VyY2UgW2ZpbGUgam9pbiBbZmlsZSBkaXJuYW1lIFtpbmZvIHNjcmlwdF1dICJicmx0dHktcHJvbG9ndWUudGNsIl0KK3NldCBzb3VyY2VSb290IFtmaWxlIG5vcm1hbGl6ZSBbZmlsZSBkaXJuYW1lIFtpbmZvIHNjcmlwdF1dXQorCitzZXQgZG9jdW1lbnRzU3ViZGlyZWN0b3J5IERvY3VtZW50cworc2V0IHByb2dyYW1zU3ViZGlyZWN0b3J5IFByb2dyYW1zCitzZXQgdG9vbHNTdWJkaXJlY3RvcnkgVG9vbHMKKworc2V0IHRhYmxlc1N1YmRpcmVjdG9yeSBUYWJsZXMKK3NldCB0ZXh0VGFibGVzU3ViZGlyZWN0b3J5IFtmaWxlIGpvaW4gJHRhYmxlc1N1YmRpcmVjdG9yeSBUZXh0XQorc2V0IGNvbnRyYWN0aW9uVGFibGVzU3ViZGlyZWN0b3J5IFtmaWxlIGpvaW4gJHRhYmxlc1N1YmRpcmVjdG9yeSBDb250cmFjdGlvbl0KK3NldCBhdHRyaWJ1dGVzVGFibGVzU3ViZGlyZWN0b3J5IFtmaWxlIGpvaW4gJHRhYmxlc1N1YmRpcmVjdG9yeSBBdHRyaWJ1dGVzXQorc2V0IGtleWJvYXJkVGFibGVzU3ViZGlyZWN0b3J5IFtmaWxlIGpvaW4gJHRhYmxlc1N1YmRpcmVjdG9yeSBLZXlib2FyZF0KK3NldCBpbnB1dFRhYmxlc1N1YmRpcmVjdG9yeSBbZmlsZSBqb2luICR0YWJsZXNTdWJkaXJlY3RvcnkgSW5wdXRdCisKK3NldCBkcml2ZXJzU3ViZGlyZWN0b3J5IERyaXZlcnMKK3NldCBicmFpbGxlRHJpdmVyc1N1YmRpcmVjdG9yeSBbZmlsZSBqb2luICRkcml2ZXJzU3ViZGlyZWN0b3J5IEJyYWlsbGVdCitzZXQgc3BlZWNoRHJpdmVyc1N1YmRpcmVjdG9yeSBbZmlsZSBqb2luICRkcml2ZXJzU3ViZGlyZWN0b3J5IFNwZWVjaF0KK3NldCBzY3JlZW5Ecml2ZXJzU3ViZGlyZWN0b3J5IFtmaWxlIGpvaW4gJGRyaXZlcnNTdWJkaXJlY3RvcnkgU2NyZWVuXQorCitwcm9jIHNldFNvdXJjZVJvb3Qge30geworICAgc2V0IHZhcmlhYmxlIDo6ZW52KEJSTFRUWV9TT1VSQ0VfUk9PVCkKKworICAgaWYgeyFbZmluZENvbnRhaW5pbmdEaXJlY3RvcnkgJHZhcmlhYmxlIFtwd2RdIFtsaXN0IGJybHR0eS5wYy5pbl1dfSB7CisgICAgICBzZW1hbnRpY0Vycm9yICJzb3VyY2UgdHJlZSBub3QgZm91bmQiCisgICB9CisKKyAgIHJldHVybiBbc2V0IDo6c291cmNlUm9vdCBbc2V0ICR2YXJpYWJsZV1dCit9CisKK3Byb2Mgc2V0QnVpbGRSb290IHt9IHsKKyAgIGdsb2JhbCBpbml0aWFsRGlyZWN0b3J5IHNjcmlwdERpcmVjdG9yeQorICAgc2V0IHZhcmlhYmxlIDo6ZW52KEJSTFRUWV9CVUlMRF9ST09UKQorCisgICBmb3JlYWNoIGRpcmVjdG9yeSBbbGlzdCAkaW5pdGlhbERpcmVjdG9yeSAkc2NyaXB0RGlyZWN0b3J5XSB7CisgICAgICBpZiB7W2ZpbmRDb250YWluaW5nRGlyZWN0b3J5ICR2YXJpYWJsZSAkZGlyZWN0b3J5IFtsaXN0IGJybHR0eS5wY11dfSB7CisgICAgICAgICByZXR1cm4gW3NldCA6OmJ1aWxkUm9vdCBbc2V0ICR2YXJpYWJsZV1dCisgICAgICB9CisgICB9CisKKyAgIHNlbWFudGljRXJyb3IgImJ1aWxkIHRyZWUgbm90IGZvdW5kIgorfQorCitwcm9jIGdldE1ha2VGaWxlUHJvcGVydHkge2ZpbGUgcHJvcGVydHkge3ZhcmlhYmxlICIifX0geworICAgc2V0IHBhdHRlcm4ge15ccyooXHcrKVxzKj1ccyooLio/KVxzKiR9CisKKyAgIGZvckVhY2hMaW5lIGxpbmUgJGZpbGUgeworICAgICAgaWYge1tyZWdleHAgJHBhdHRlcm4gJGxpbmUgeCBuYW1lIHZhbHVlXX0geworICAgICAgICAgaWYge1tzdHJpbmcgZXF1YWwgJG5hbWUgJHByb3BlcnR5XX0geworICAgICAgICAgICAgaWYge1tzdHJpbmcgbGVuZ3RoICR2YXJpYWJsZV0gPT0gMH0geworICAgICAgICAgICAgICAgcmV0dXJuICR2YWx1ZQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICB1cGxldmVsIDEgW2xpc3Qgc2V0ICR2YXJpYWJsZSAkdmFsdWVdCisgICAgICAgICAgICByZXR1cm4gMQorICAgICAgICAgfQorICAgICAgfQorICAgfQorCisgICBpZiB7W3N0cmluZyBsZW5ndGggJHZhcmlhYmxlXSA9PSAwfSB7CisgICAgICByZXR1cm4gLWNvZGUgZXJyb3IgInByb3BlcnR5IG5vdCBmb3VuZDogJHByb3BlcnR5IgorICAgfQorCisgICByZXR1cm4gMAorfQorCitwcm9jIGdldEJyYWlsbGVEcml2ZXJQcm9wZXJ0eSB7ZHJpdmVyIHByb3BlcnR5IHt2YXJpYWJsZSAiIn19IHsKKyAgIHJldHVybiBbdXBsZXZlbCAxIFtsaXN0IGdldE1ha2VGaWxlUHJvcGVydHkgW2ZpbGUgam9pbiAkOjpzb3VyY2VSb290ICQ6OmJyYWlsbGVEcml2ZXJzU3ViZGlyZWN0b3J5ICRkcml2ZXIgTWFrZWZpbGUuaW5dICRwcm9wZXJ0eSAkdmFyaWFibGVdXQorfQorCitwcm9jIGdldEJyYWlsbGVEcml2ZXJDb2RlIHtkcml2ZXIge3ZhcmlhYmxlICIifX0geworICAgcmV0dXJuIFt1cGxldmVsIDEgW2xpc3QgZ2V0QnJhaWxsZURyaXZlclByb3BlcnR5ICRkcml2ZXIgRFJJVkVSX0NPREUgJHZhcmlhYmxlXV0KK30KKworcHJvYyBnZXRCcmFpbGxlRHJpdmVyQ29tbWVudCB7ZHJpdmVyIHt2YXJpYWJsZSAiIn19IHsKKyAgIHJldHVybiBbdXBsZXZlbCAxIFtsaXN0IGdldEJyYWlsbGVEcml2ZXJQcm9wZXJ0eSAkZHJpdmVyIERSSVZFUl9DT01NRU5UICR2YXJpYWJsZV1dCit9CisKZGlmZiAtLWdpdCBhL3JlbHBhdGguYXdrIGIvcmVscGF0aC5hd2sKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTJiMzliZAotLS0gL2Rldi9udWxsCisrKyBiL3JlbHBhdGguYXdrCkBAIC0wLDAgKzEsMzYgQEAKK2Z1bmN0aW9uIG5vcm1hbGl6ZVBhdGgocGF0aCkgeworICBpZiAobGVuZ3RoKHBhdGgpID09IDApIHBhdGggPSAiLiIKKyAgcGF0aCA9IHBhdGggcGF0aERlbGltaXRlcgorICBnc3ViKChwYXRoRGVsaW1pdGVyICIrIiksIHBhdGhEZWxpbWl0ZXIsIHBhdGgpCisgIHJldHVybiBwYXRoCit9CisKK0JFR0lOIHsKKyAgcGF0aERlbGltaXRlciA9ICIvIgorCisgIHBhdGhMZW5ndGggPSBsZW5ndGgocGF0aCA9IG5vcm1hbGl6ZVBhdGgocGF0aCkpCisgIHJlZmVyZW5jZUxlbmd0aCA9IGxlbmd0aChyZWZlcmVuY2UgPSBub3JtYWxpemVQYXRoKHJlZmVyZW5jZSkpCisKKyAgbWluaW11bUxlbmd0aCA9IHBhdGhMZW5ndGgKKyAgaWYgKHJlZmVyZW5jZUxlbmd0aCA8IG1pbmltdW1MZW5ndGgpIG1pbmltdW1MZW5ndGggPSByZWZlcmVuY2VMZW5ndGgKKworICBwcmVmaXhMZW5ndGggPSAwCisgIGZvciAoaT0xOyBpPD1taW5pbXVtTGVuZ3RoOyArK2kpIHsKKyAgICBjaGFyYWN0ZXIgPSBzdWJzdHIocmVmZXJlbmNlLCBpLCAxKQorICAgIGlmIChzdWJzdHIocGF0aCwgaSwgMSkgIT0gY2hhcmFjdGVyKSBicmVhaworICAgIGlmIChjaGFyYWN0ZXIgPT0gcGF0aERlbGltaXRlcikgcHJlZml4TGVuZ3RoID0gaQorICB9CisKKyAgaWYgKChwcmVmaXhMZW5ndGggPiAwKSB8fCAoKHN1YnN0cihwYXRoLCAxLCAxKSA9PSBwYXRoRGVsaW1pdGVyKSA9PSAoc3Vic3RyKHJlZmVyZW5jZSwgMSwgMSkgPT0gcGF0aERlbGltaXRlcikpKSB7CisgICAgc3VmZml4ID0gc3Vic3RyKHBhdGgsIHByZWZpeExlbmd0aCsxKQorICAgIHByZWZpeCA9IHN1YnN0cihyZWZlcmVuY2UsIHByZWZpeExlbmd0aCsxKQorICAgIGdzdWIoKCJbXiIgcGF0aERlbGltaXRlciAiXSsiKSwgIi4uIiwgcHJlZml4KQorICAgIHBhdGggPSBub3JtYWxpemVQYXRoKHByZWZpeCBzdWZmaXgpCisgIH0KKworICBwYXRoID0gbm9ybWFsaXplUGF0aChwYXRoKQorICBzdWIoKHBhdGhEZWxpbWl0ZXIgIiQiKSwgIiIsIHBhdGgpCisKKyAgcHJpbnRmICIlcyIsIHBhdGgKKyAgZXhpdCAwCit9CmRpZmYgLS1naXQgYS9ydW4tYnJsdHR5IGIvcnVuLWJybHR0eQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5kNjQ0ZTBiCi0tLSAvZGV2L251bGwKKysrIGIvcnVuLWJybHR0eQpAQCAtMCwwICsxLDQxIEBACisjIS9iaW4vYmFzaAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorIyAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyMKKyMgQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorIworIyBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorIworIyBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisjIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyMgbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisjCisjIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKy4gImBkaXJuYW1lICIkezB9ImAvcHJvbG9ndWUuc2giCitjb21tYW5kPWJybHR0eQorCitoYW5kbGVJbml0aWFsSGVscE9wdGlvbiAiJHtAfSIgPDxFTkQtT0YtSEVMUAorUnVuICR7Y29tbWFuZH0gZnJvbSBpdHMgYnVpbGQgdHJlZS4KKworU3ludGF4OiAke3Byb2dyYW1OYW1lfSB7LWggfCBbLW9wdGlvbiAuLi5dfQorCitBbGwgb2YgdGhlIG9wdGlvbnMgYXJlIHBhc3NlZCB0aHJvdWdoIHRvICR7Y29tbWFuZH0gaXRzZWxmLgorCitTZWUgcnVuLWNvbW1hbmQgLWggZm9yIG1vcmUgZGV0YWlscy4KK0VORC1PRi1IRUxQCisKK3NldFNvdXJjZVJvb3QKK3NldEJ1aWxkUm9vdAorCitleHBvcnQgQlJMVFRZX1RBQkxFU19ESVJFQ1RPUlk9IiR7c291cmNlUm9vdH0vVGFibGVzIgorZXhwb3J0IEJSTFRUWV9EUklWRVJTX0RJUkVDVE9SWT0iJHtidWlsZFJvb3R9L2xpYiIKK2V4cG9ydCBCUkxUVFlfTE9DQUxFX0RJUkVDVE9SWT0iJHtidWlsZFJvb3R9L01lc3NhZ2VzL2xvY2FsZSIKKworZXhlYyAiJHtwcm9ncmFtRGlyZWN0b3J5fS9ydW4tY29tbWFuZCIgIiR7YnVpbGRSb290fS9Qcm9ncmFtcy8ke2NvbW1hbmR9IiAtRSAiJHtAfSIKK2V4aXQgIiR7P30iCmRpZmYgLS1naXQgYS9ydW4tY29tbWFuZCBiL3J1bi1jb21tYW5kCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjFlYmJhMGIKLS0tIC9kZXYvbnVsbAorKysgYi9ydW4tY29tbWFuZApAQCAtMCwwICsxLDcxIEBACisjIS9iaW4vYmFzaAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorIyAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyMKKyMgQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorIworIyBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorIworIyBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisjIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyMgbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisjCisjIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKy4gIiQoZGlybmFtZSAiJHswfSIpL3Byb2xvZ3VlLnNoIgorCitoYW5kbGVJbml0aWFsSGVscE9wdGlvbiAiJHtAfSIgPDxFTkQtT0YtSEVMUAorRXhlY3V0ZSB0aGUgc3BlY2lmaWVkIGNvbW1hbmQsIHdpdGggdGhlIHNwZWNpZmllZCBhcmd1bWVudHMsCitzdWNoIHRoYXQgaXQgcGlja3MgdXAgc2hhcmVkIG9iamVjdHMgZnJvbSB0aGUgQlJMVFRZIGJ1aWxkIHRyZWUuCisKK1N5bnRheDogJHtwcm9ncmFtTmFtZX0gey1oIHwgY29tbWFuZCBbYXJndW1lbnQgLi4uXX0KKworVGhlIHdvcmtpbmcgZGlyZWN0b3J5IG11c3QgYmUgc29tZXdoZXJlIHdpdGhpbiB0aGUgYnVpbGQgdHJlZSB0aGF0J3MgdG8gYmUgdXNlZC4KK0lmIGl0IGlzbid0IHRoZW4gdGhlIHNvdXJjZSB0cmVlIHdpbGwgYmUgdXNlZC4KKworRW52aXJvbm1lbnQgVmFyaWFibGVzOgorICA8Q09NTUFORD5fVkFMR1JJTkRfRElSRUNUT1JZPXBhdGgKKyAgICBJZiBzZXQgdGhlbiB3cml0ZSBhIHZhbGdyaW5kIG1lbW9yeSB1c2FnZSBsb2cgdG8gYSBmaWxlIG5hbWVkCisgICAgPGNvbW1hbmQ+LXl5eXltbWRkLUhITU1TUy52ZyBpbiB0aGUgc3BlY2lmaWVkIGRpcmVjdG9yeS4KK0VORC1PRi1IRUxQCisKK3NldEJ1aWxkUm9vdAorCitbICIkeyN9IiAtZ3QgMCBdIHx8IHN5bnRheEVycm9yICJtaXNzaW5nIGNvbW1hbmQiCitjb21tYW5kTmFtZT0iJHsxfSIKK3NoaWZ0IDEKKworcmVhZG9ubHkgY29tbWFuZFBhdGg9IiQodHlwZSAtUCAiJHtjb21tYW5kTmFtZX0iKSIKK1sgLW4gIiR7Y29tbWFuZFBhdGh9IiBdIHx8IHNlbWFudGljRXJyb3IgImNvbW1hbmQgbm90IGZvdW5kOiAke2NvbW1hbmROYW1lfSIKK3JlYWRvbmx5IGNvbW1hbmROYW1lPSIke2NvbW1hbmRQYXRoIyMqL30iCitzZXQgLS0gIiR7Y29tbWFuZFBhdGh9IiAiJHtAfSIKKworWyAtbiAiJHtMRF9MSUJSQVJZX1BBVEh9IiBdICYmIExEX0xJQlJBUllfUEFUSD0iOiR7TERfTElCUkFSWV9QQVRIfSIKK2V4cG9ydCBMRF9MSUJSQVJZX1BBVEg9IiR7YnVpbGRSb290fS9Qcm9ncmFtcyR7TERfTElCUkFSWV9QQVRIfSIKKworcmVhZG9ubHkgdmFyaWFibGVQcmVmaXg9IiR7Y29tbWFuZE5hbWVeXj99IgorZ2V0VmFyaWFibGUgIiR7dmFyaWFibGVQcmVmaXh9X1ZBTEdSSU5EX0RJUkVDVE9SWSIgdmdEaXJlY3RvcnkKK3JlYWRvbmx5IHZnRGlyZWN0b3J5CisKK1sgLW4gIiR7dmdEaXJlY3Rvcnl9IiBdICYmIHsKKyAgIFsgLWUgIiR7dmdEaXJlY3Rvcnl9IiBdIHx8IHNlbWFudGljRXJyb3IgImRpcmVjdG9yeSBub3QgZm91bmQ6ICR7dmdEaXJlY3Rvcnl9IgorICAgWyAtZCAiJHt2Z0RpcmVjdG9yeX0iIF0gfHwgc2VtYW50aWNFcnJvciAibm90IGEgZGlyZWN0b3J5OiAke3ZnRGlyZWN0b3J5fSIKKyAgIFsgLXcgIiR7dmdEaXJlY3Rvcnl9IiBdIHx8IHNlbWFudGljRXJyb3IgImRpcmVjdG9yeSBub3Qgd3JpdGFibGU6ICR7dmdEaXJlY3Rvcnl9IgorCisgICB2Z0ZpbGU9IiR7dmdEaXJlY3Rvcnl9LyR7Y29tbWFuZE5hbWV9LSQoZGF0ZSArJVklbSVkLSVIJU0lUykudmciCisgICBwcm9ncmFtTWVzc2FnZSAidmFsZ3JpbmQgbG9nOiAke3ZnRmlsZX0iCisKKyAgIHNldCAtLSB2YWxncmluZCBcCisgICAgICAgLS1sb2ctZmlsZT0iJHt2Z0ZpbGV9IiBcCisgICAgICAgLS1sZWFrLWNoZWNrPWZ1bGwgXAorICAgICAgIC0tc2hvdy1yZWFjaGFibGU9eWVzIFwKKyAgICAgICAiJHtAfSIKK30KKworZXhlYyAiJHtAfSIKK2V4aXQgIiR7P30iCmRpZmYgLS1naXQgYS9ydW4teGJybGFwaSBiL3J1bi14YnJsYXBpCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjY1MWM4ZTYKLS0tIC9kZXYvbnVsbAorKysgYi9ydW4teGJybGFwaQpAQCAtMCwwICsxLDM2IEBACisjIS9iaW4vYmFzaAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorIyAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyMKKyMgQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorIworIyBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorIworIyBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisjIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyMgbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisjCisjIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKy4gImBkaXJuYW1lICIkezB9ImAvcHJvbG9ndWUuc2giCitjb21tYW5kPXhicmxhcGkKKworaGFuZGxlSW5pdGlhbEhlbHBPcHRpb24gIiR7QH0iIDw8RU5ELU9GLUhFTFAKK1J1biAke2NvbW1hbmR9IGZyb20gaXRzIGJ1aWxkIHRyZWUuCisKK1N5bnRheDogJHtwcm9ncmFtTmFtZX0gey1oIHwgWy1vcHRpb24gLi4uXX0KKworQWxsIG9mIHRoZSBvcHRpb25zIGFyZSBwYXNzZWQgdGhyb3VnaCB0byAke2NvbW1hbmR9IGl0c2VsZi4KKworU2VlIHJ1bi1jb21tYW5kIC1oIGZvciBtb3JlIGRldGFpbHMuCitFTkQtT0YtSEVMUAorCitzZXRCdWlsZFJvb3QKKworZXhlYyAiJHtwcm9ncmFtRGlyZWN0b3J5fS9ydW4tY29tbWFuZCIgIiR7YnVpbGRSb290fS9Qcm9ncmFtcy8ke2NvbW1hbmR9IiAiJEAiCitleGl0ICIkez99IgpkaWZmIC0tZ2l0IGEvc2NyZWVuLm1rIGIvc2NyZWVuLm1rCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRhMmU2ZTkKLS0tIC9kZXYvbnVsbAorKysgYi9zY3JlZW4ubWsKQEAgLTAsMCArMSwzNCBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorIyAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyMKKyMgQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorIworIyBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorIworIyBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisjIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyMgbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisjCisjIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK1NDUl9ERUZTID0nLUREUklWRVJfTkFNRT0kKERSSVZFUl9OQU1FKScgJy1ERFJJVkVSX0NPREU9JChEUklWRVJfQ09ERSknICctRERSSVZFUl9DT01NRU5UPSIkKERSSVZFUl9DT01NRU5UKSInICctRERSSVZFUl9WRVJTSU9OPSIkKERSSVZFUl9WRVJTSU9OKSInICctRERSSVZFUl9ERVZFTE9QRVJTPSIkKERSSVZFUl9ERVZFTE9QRVJTKSInCitTQ1JfQ0ZMQUdTID0gJChMSUJDRkxBR1MpICQoU0NSX0RFRlMpCitTQ1JfQ1hYRkxBR1MgPSAkKExJQkNYWEZMQUdTKSAkKFNDUl9ERUZTKQorU0NSX01PRF9OQU1FID0gJChCTERfVE9QKSQoRFJWX0RJUikvJChNT0RfTkFNRSl4JChEUklWRVJfQ09ERSkKK1NDUl9NT0RfRklMRSA9ICQoU0NSX01PRF9OQU1FKS4kKE1PRF9FWFQpCiskKFNDUl9NT0RfRklMRSk6IHNjcmVlbi4kTworCSQoSU5TVEFMTF9ESVJFQ1RPUlkpICQoQEQpCisJJChNS1NIUikgJChAKSBzY3JlZW4uJE8gJChTQ1JfT0JKUykKK3NjcmVlbi1kcml2ZXI6ICQoU0NSX01PRF9GSUxFKQorCitpbnN0YWxsOjoKKwordW5pbnN0YWxsOjoKKworY2xlYW46OgorCS1ybSAtZiAkKFNDUl9NT0RfTkFNRSkuKgpkaWZmIC0tZ2l0IGEvc3BlZWNoLm1rIGIvc3BlZWNoLm1rCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg0OTViNzYKLS0tIC9kZXYvbnVsbAorKysgYi9zcGVlY2gubWsKQEAgLTAsMCArMSwzNCBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBCUkxUVFkgLSBBIGJhY2tncm91bmQgcHJvY2VzcyBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHNjcmVlbiAod2hlbiBpbgorIyAgICAgICAgICB0ZXh0IG1vZGUpIGZvciBhIGJsaW5kIHBlcnNvbiB1c2luZyBhIHJlZnJlc2hhYmxlIGJyYWlsbGUgZGlzcGxheS4KKyMKKyMgQ29weXJpZ2h0IChDKSAxOTk1LTIwMjMgYnkgVGhlIEJSTFRUWSBEZXZlbG9wZXJzLgorIworIyBCUkxUVFkgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgorIworIyBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisjIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyMgbGF0ZXIgdmVyc2lvbi4gUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFLUxHUEwgZm9yIGRldGFpbHMuCisjCisjIFdlYiBQYWdlOiBodHRwOi8vYnJsdHR5LmFwcC8KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBtYWludGFpbmVkIGJ5IERhdmUgTWllbGtlIDxkYXZlQG1pZWxrZS5jYz4uCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK1NQS19ERUZTID0nLUREUklWRVJfTkFNRT0kKERSSVZFUl9OQU1FKScgJy1ERFJJVkVSX0NPREU9JChEUklWRVJfQ09ERSknICctRERSSVZFUl9DT01NRU5UPSIkKERSSVZFUl9DT01NRU5UKSInICctRERSSVZFUl9WRVJTSU9OPSIkKERSSVZFUl9WRVJTSU9OKSInICctRERSSVZFUl9ERVZFTE9QRVJTPSIkKERSSVZFUl9ERVZFTE9QRVJTKSInCitTUEtfQ0ZMQUdTID0gJChMSUJDRkxBR1MpICQoU1BLX0RFRlMpCitTUEtfQ1hYRkxBR1MgPSAkKExJQkNYWEZMQUdTKSAkKFNQS19ERUZTKQorU1BLX01PRF9OQU1FID0gJChCTERfVE9QKSQoRFJWX0RJUikvJChNT0RfTkFNRSlzJChEUklWRVJfQ09ERSkKK1NQS19NT0RfRklMRSA9ICQoU1BLX01PRF9OQU1FKS4kKE1PRF9FWFQpCiskKFNQS19NT0RfRklMRSk6IHNwZWVjaC4kTworCSQoSU5TVEFMTF9ESVJFQ1RPUlkpICQoQEQpCisJJChNS1NIUikgJChAKSBzcGVlY2guJE8gJChTUEtfT0JKUykKK3NwZWVjaC1kcml2ZXI6ICQoU1BLX01PRF9GSUxFKQorCitpbnN0YWxsOjoKKwordW5pbnN0YWxsOjoKKworY2xlYW46OgorCS1ybSAtZiAkKFNQS19NT0RfTkFNRSkuKgo=